diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ed255a80ce65d1..511a885dd0b935 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -5,44 +5,20 @@ # to the same file or dir, add them to the end under Multiple Owners # GoldenAlpharex -/modular_skyrat/ @GoldenAlpharex +/.github/workflows/ @GoldenAlpharex +/SQL/ @GoldenAlpharex /tools/ @GoldenAlpharex - -# Jake Park -/modular_skyrat/modules/apocolypse_of_scythes/ @jjpark-kb -/modular_skyrat/modules/ash_chemical_centrifuge/ @jjpark-kb -/modular_skyrat/modules/ash_farming/ @jjpark-kb -/modular_skyrat/modules/ashwalker_change/ @jjpark-kb -/modular_skyrat/modules/ashwalker_shaman/ @jjpark-kb -/modular_skyrat/modules/borg_buffs/ @jjpark-kb -/modular_skyrat/modules/cargo_teleporter/ @jjpark-kb -/modular_skyrat/modules/conveyor_sorter/ @jjpark-kb -/modular_skyrat/modules/cortical_borer/ @jjpark-kb -/modular_skyrat/modules/connecting_computer/ @jjpark-kb -/modular_skyrat/modules/fishing/ @jjpark-kb -/modular_skyrat/modules/positronic_alert_console/ @jjpark-kb -/modular_skyrat/modules/primitive_production/ @jjpark-kb -/modular_skyrat/modules/reagent_forging/ @jjpark-kb -/modular_skyrat/modules/xenoarch/ @jjpark-kb +/modular_nova/ @GoldenAlpharex +/icons/ @GoldenAlpharex # Jolly-66 -/modular_skyrat/modules/mapping @Jolly-66 +/modular_nova/modules/mapping @Jolly-66 /tools/UpdatePaths @Jolly-66 -# LT3 -/code/modules/transport/ @lessthnthree -/modular_skyrat/master_files/code/controllers/subsystem/ @lessthnthree -/modular_skyrat/modules/advanced_engineering/ @lessthnthree -/modular_skyrat/modules/airlock_override/ @lessthnthree -/modular_skyrat/modules/alerts/ @lessthnthree -/modular_skyrat/modules/cme/ @lessthnthree -/modular_skyrat/modules/events/ @lessthnthree -/modular_skyrat/modules/ices_events/ @lessthnthree - # Multiple Owners # Maptainers -/_maps/ @Jolly-66 @KathrinBailey +/_maps/ @Jolly-66 # Expensive files that touching basically always cause performance problems ## Init times diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index c7af887cac40fb..14db6cf129758f 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -164,7 +164,7 @@ If you are porting features/tools from other codebases, you must give them credi Regarding sprites & sounds, you must credit the artist and possibly the codebase. All /tg/station assets including icons and sound are under a [Creative Commons 3.0 BY-SA license](https://creativecommons.org/licenses/by-sa/3.0/) unless otherwise indicated. -Regarding sprites in particular, you still need to take your own screenshots of the sprites in-game on your Skyrat code in your PR body, not just re-use the screenshots provided in the original PR. +Regarding sprites in particular, you still need to take your own screenshots of the sprites in-game on your Nova Sector code in your PR body, not just re-use the screenshots provided in the original PR. ## Banned content Do not add any of the following in a Pull Request or risk getting the PR closed: diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 4704e8c20ed335..904de8b36c9a95 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -3,6 +3,11 @@ name: Bug report about: Create a report to help reproduce and fix the issue --- + +## Issue Summary + + + ## Round ID: -## How This Contributes To The Skyrat Roleplay Experience +## How This Contributes To The Nova Sector Roleplay Experience diff --git a/.github/alternate_byond_versions.txt b/.github/alternate_byond_versions.txt index 9a21320ab17582..7b50af46885eb1 100644 --- a/.github/alternate_byond_versions.txt +++ b/.github/alternate_byond_versions.txt @@ -5,5 +5,3 @@ # Format is version: map # Example: # 500.1337: runtimestation - -515.1603: runtimestation diff --git a/.github/gbp.toml b/.github/gbp.toml index 70032056dfe68a..fe086e79b55f97 100644 --- a/.github/gbp.toml +++ b/.github/gbp.toml @@ -9,6 +9,7 @@ reset_label = "GBP: Reset" "Code Improvement" = 2 "Documentation" = 1 "Feature" = -6 +"Good First PR" = 6 "Feedback" = 2 "Fix" = 3 "Grammar and Formatting" = 1 diff --git a/.github/guides/CI.md b/.github/guides/CI.md index e71c2145bab0a3..3f498721a32b16 100644 --- a/.github/guides/CI.md +++ b/.github/guides/CI.md @@ -13,7 +13,7 @@ If after reading this guide you still do not understand why a check suite is fai The [linters](https://en.wikipedia.org/wiki/Lint_(software)) check the maps and code for common mistakes. This includes things like: - Files not being included in the .dme -- Misspelling Nanotrasen as NanoTrasen +- Misspelling Symphionia as Symphionia - Unformatted map files Sometimes linters will fail, but you won't see anything in the "Run Linters" tab. If you open up the action, it might look like this: diff --git a/.github/guides/STYLE.md b/.github/guides/STYLE.md index 2977b4e6900fe0..3c49962bcfbb38 100644 --- a/.github/guides/STYLE.md +++ b/.github/guides/STYLE.md @@ -320,6 +320,47 @@ world.log << "[apples] apples left, taking one." apples-- ``` +### initial() versus :: +`::` is a compile time scope operator which we use as an alternative to `initial()`. +It's used within the definition of a datum as opposed to `Initialize` or other procs. + +```dm +// Bad +/atom/thing/better + name = "Thing" + +/atom/thing/better/Initialize() + var/atom/thing/parent = /atom/thing + desc = inital(parent) + +// Good +/atom/thing/better + name = "Thing" + desc = /atom/thing::desc +``` + +Another good use for it easy access of the parent's variables. +```dm +/obj/item/fork/dangerous + damage = parent_type::damage * 2 +``` + +```dm +/obj/item/fork + flags_1 = parent_type::flags_1 | FLAG_COOLER +``` + + +It's important to note that `::` does not apply to every application of `initial()`. +Primarily in cases where the type you're using for the initial value is not static. + +For example, +```dm +/proc/cmp_subsystem_init(datum/controller/subsystem/a, datum/controller/subsystem/b) + return initial(b.init_order) - initial(a.init_order) +``` +could not use `::` as the provided types are not static. + ## Procs ### Getters and setters diff --git a/.github/labeler.yml b/.github/labeler.yml index 55c5627ddc1fb9..276bb2f73ecffe 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -1,7 +1,9 @@ -# Changes to a .dmm or anything in the _map subfolder +# Changes to anything in the _map subfolder Map Modification: - - '_maps/**' +- changed-files: + - any-glob-to-any-file: '_maps/**' -# Chganges to a .dmi +# Changes to a .dmi Sprites: -- '**/*.dmi' +- changed-files: + - any-glob-to-any-file: '**/*.dmi' diff --git a/.github/workflows/auto_changelog.yml b/.github/workflows/auto_changelog.yml index 7fde51b119b939..cbdeccbc5a03d7 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.SKYRATBOT_TOKEN || secrets.GITHUB_TOKEN }} + github-token: ${{ secrets.NOVABOT_TOKEN || secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/autowiki.yml b/.github/workflows/autowiki.yml index 0a431d520ba965..91ab12cdb19f6e 100644 --- a/.github/workflows/autowiki.yml +++ b/.github/workflows/autowiki.yml @@ -30,9 +30,6 @@ jobs: - name: Install rust-g if: steps.secrets_set.outputs.SECRETS_ENABLED run: | - sudo dpkg --add-architecture i386 - sudo apt update || true - sudo apt install -o APT::Immediate-Configure=false libssl1.1:i386 bash tools/ci/install_rust_g.sh - name: Compile and generate Autowiki files if: steps.secrets_set.outputs.SECRETS_ENABLED diff --git a/.github/workflows/ci_suite.yml b/.github/workflows/ci_suite.yml index 3197a54b9f19f9..01b35d59639edb 100644 --- a/.github/workflows/ci_suite.yml +++ b/.github/workflows/ci_suite.yml @@ -15,11 +15,11 @@ 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: - group: run_linters-${{ github.ref }} + group: run_linters-${{ github.head_ref || github.run_id }} cancel-in-progress: true steps: - uses: actions/checkout@v3 @@ -27,25 +27,38 @@ jobs: uses: actions/cache@v3 with: path: ~/SpacemanDMM - key: ${{ runner.os }}-spacemandmm-${{ secrets.CACHE_PURGE_KEY }} + key: ${{ runner.os }}-spacemandmm - name: Restore Yarn cache uses: actions/cache@v3 with: path: tgui/.yarn/cache - key: ${{ runner.os }}-yarn-${{ secrets.CACHE_PURGE_KEY }}-${{ hashFiles('tgui/yarn.lock') }} + key: ${{ runner.os }}-yarn-${{ hashFiles('tgui/yarn.lock') }} restore-keys: | - ${{ runner.os }}-build-${{ secrets.CACHE_PURGE_KEY }}- - ${{ runner.os }}-build- - ${{ runner.os }}- + ${{ runner.os }}-yarn- + - name: Restore Node cache + uses: actions/cache@v3 + with: + path: ~/.nvm + key: ${{ runner.os }}-node-${{ hashFiles('dependencies.sh') }} + restore-keys: | + ${{ runner.os }}-node- + - name: Restore Bootstrap cache + uses: actions/cache@v3 + with: + path: tools/bootstrap/.cache + key: ${{ runner.os }}-bootstrap-${{ hashFiles('tools/requirements.txt') }} + restore-keys: | + ${{ runner.os }}-bootstrap- - name: Restore Rust cache uses: actions/cache@v3 with: path: ~/.cargo - key: ${{ runner.os }}-rust-${{ secrets.CACHE_PURGE_KEY }} - restore-keys: | - ${{ runner.os }}-build-${{ secrets.CACHE_PURGE_KEY }}- - ${{ runner.os }}-build- - ${{ runner.os }}- + key: ${{ runner.os }}-rust + - name: Restore Cutter cache + uses: actions/cache@v3 + with: + path: tools/icon_cutter/cache + key: ${{ runner.os }}-cutter-${{ hashFiles('dependencies.sh') }} - name: Install Tools run: | pip3 install setuptools @@ -53,30 +66,61 @@ jobs: bash tools/ci/install_spaceman_dmm.sh dreamchecker cargo install ripgrep --features pcre2 tools/bootstrap/python -c '' - - name: Run Linters + - name: Give Linters A Go + id: linter-setup + run: ':' + - name: Run Grep Checks + if: steps.linter-setup.conclusion == 'success' && !cancelled() run: | - bash tools/ci/check_filedirs.sh tgstation.dme - bash tools/ci/check_changelogs.sh bash tools/ci/check_grep.sh - bash skyrat/tools/skyrat_check_grep.sh # SKYRAT EDIT ADDITION - checking modular_skyrat code - bash tools/ci/check_misc.sh + bash modular_nova/tools/nova_check_grep.sh # NOVA EDIT ADDITION - checking modular_nova code + - name: Ticked File Enforcement + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: | tools/bootstrap/python tools/ticked_file_enforcement/ticked_file_enforcement.py < tools/ticked_file_enforcement/schemas/tgstation_dme.json tools/bootstrap/python tools/ticked_file_enforcement/ticked_file_enforcement.py < tools/ticked_file_enforcement/schemas/unit_tests.json - tools/bootstrap/python tools/ticked_file_enforcement/ticked_file_enforcement.py < tools/ticked_file_enforcement/schemas/modular_skyrat.json # SKYRAT EDIT ADDITION - modular tick enforcement - tools/bootstrap/python -m tools.maplint.source --github - tools/build/build --ci lint tgui-test - tools/bootstrap/python -m define_sanity.check - tools/bootstrap/python -m dmi.test + tools/bootstrap/python tools/ticked_file_enforcement/ticked_file_enforcement.py < tools/ticked_file_enforcement/schemas/modular_nova.json # NOVA EDIT ADDITION - modular tick enforcement + - name: Check Define Sanity + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: tools/bootstrap/python -m define_sanity.check + - name: Check Trait Validity + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: tools/bootstrap/python -m trait_validity.check + - name: Run DreamChecker + if: steps.linter-setup.conclusion == 'success' && !cancelled() + shell: bash + run: ~/dreamchecker 2>&1 | bash tools/ci/annotate_dm.sh + - name: Run Map Checks + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: | tools/bootstrap/python -m mapmerge2.dmm_test - ~/dreamchecker 2>&1 | bash tools/ci/annotate_dm.sh + tools/bootstrap/python -m tools.maplint.source + - name: Check Cutter + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: tools/bootstrap/python -m tools.icon_cutter.check + - name: Run DMI Tests + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: tools/bootstrap/python -m dmi.test + - name: Check File Directories + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: bash tools/ci/check_filedirs.sh tgstation.dme + - name: Check Changelogs + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: bash tools/ci/check_changelogs.sh + - name: Check Miscellaneous Files + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: bash tools/ci/check_misc.sh + - name: Run TGUI Checks + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: tools/build/build --ci lint tgui-test compile_all_maps: - if: "!contains(github.event.head_commit.message, '[ci skip]')" + if: ( !contains(github.event.head_commit.message, '[ci skip]') ) name: Compile Maps needs: [collect_data] - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 concurrency: - group: compile_all_maps-${{ github.ref }} + group: compile_all_maps-${{ github.head_ref || github.run_id }} cancel-in-progress: true steps: - uses: actions/checkout@v3 @@ -84,7 +128,7 @@ jobs: uses: actions/cache@v3 with: path: ~/BYOND - key: ${{ runner.os }}-byond-${{ secrets.CACHE_PURGE_KEY }} + key: ${{ runner.os }}-byond - name: Compile All Maps run: | bash tools/ci/install_byond.sh @@ -97,15 +141,15 @@ jobs: max-required-client-version: ${{needs.collect_data.outputs.max_required_byond_client}} collect_data: - if: "!contains(github.event.head_commit.message, '[ci skip]')" + if: ( !contains(github.event.head_commit.message, '[ci skip]') ) name: Collect data for other tasks - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 outputs: maps: ${{ steps.map_finder.outputs.maps }} alternate_tests: ${{ steps.alternate_test_finder.outputs.alternate_tests }} max_required_byond_client: ${{ steps.max_required_byond_client.outputs.max_required_byond_client }} concurrency: - group: find_all_maps-${{ github.ref }} + group: find_all_maps-${{ github.head_ref || github.run_id }} cancel-in-progress: true steps: - uses: actions/checkout@v3 @@ -128,7 +172,7 @@ jobs: echo "max_required_byond_client=$(grep -Ev '^[[:blank:]]{0,}#{1,}|^[[:blank:]]{0,}$' .github/max_required_byond_client.txt | tail -n1)" >> $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: @@ -136,7 +180,7 @@ jobs: matrix: map: ${{ fromJSON(needs.collect_data.outputs.maps).paths }} concurrency: - group: run_all_tests-${{ github.ref }}-${{ matrix.map }} + group: run_all_tests-${{ github.head_ref || github.run_id }}-${{ matrix.map }} cancel-in-progress: true uses: ./.github/workflows/run_integration_tests.yml with: @@ -144,7 +188,7 @@ jobs: max_required_byond_client: ${{needs.collect_data.outputs.max_required_byond_client}} run_alternate_tests: - if: "!contains(github.event.head_commit.message, '[ci skip]') && needs.find_all_maps.outputs.alternate_tests != '[]'" + if: ( !contains(github.event.head_commit.message, '[ci skip]') && needs.find_all_maps.outputs.alternate_tests != '[]' ) name: Alternate Tests needs: [collect_data] strategy: @@ -152,7 +196,7 @@ jobs: matrix: setup: ${{ fromJSON(needs.collect_data.outputs.alternate_tests) }} concurrency: - group: run_all_tests-${{ github.ref }}-${{ matrix.setup.major }}.${{ matrix.setup.minor }}-${{ matrix.setup.map }} + group: run_all_tests-${{ github.head_ref || github.run_id }}-${{ matrix.setup.major }}.${{ matrix.setup.minor }}-${{ matrix.setup.map }} cancel-in-progress: true uses: ./.github/workflows/run_integration_tests.yml with: @@ -162,18 +206,18 @@ jobs: max_required_byond_client: ${{needs.collect_data.outputs.max_required_byond_client}} check_alternate_tests: - if: "!contains(github.event.head_commit.message, '[ci skip]') && needs.find_all_maps.outputs.alternate_tests != '[]'" + if: ( !contains(github.event.head_commit.message, '[ci skip]') && needs.find_all_maps.outputs.alternate_tests != '[]' ) name: Check Alternate Tests needs: [run_alternate_tests] - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - run: echo Alternate tests passed. compare_screenshots: - if: "!contains(github.event.head_commit.message, '[ci skip]') && always()" + if: ( !contains(github.event.head_commit.message, '[ci skip]') && (success() || failure()) ) needs: [run_all_tests, run_alternate_tests] name: Compare Screenshot Tests - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 # If we ever add more artifacts, this is going to break, but it'll be obvious. @@ -205,12 +249,12 @@ 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 concurrency: - group: test_windows-${{ github.ref }} + group: test_windows-${{ github.head_ref || github.run_id }} cancel-in-progress: true steps: - uses: actions/checkout@v3 @@ -218,11 +262,9 @@ jobs: uses: actions/cache@v3 with: path: tgui/.yarn/cache - key: ${{ runner.os }}-yarn-${{ secrets.CACHE_PURGE_KEY }}-${{ hashFiles('tgui/yarn.lock') }} + key: ${{ runner.os }}-yarn-${{ hashFiles('tgui/yarn.lock') }} restore-keys: | - ${{ runner.os }}-build-${{ secrets.CACHE_PURGE_KEY }}- - ${{ runner.os }}-build- - ${{ runner.os }}- + ${{ runner.os }}-yarn- - name: Compile run: pwsh tools/ci/build.ps1 env: diff --git a/.github/workflows/codeowner_reviews.yml b/.github/workflows/codeowner_reviews.yml index a461a96d931f69..5354862c2b88b3 100644 --- a/.github/workflows/codeowner_reviews.yml +++ b/.github/workflows/codeowner_reviews.yml @@ -1,19 +1,23 @@ name: Codeowner Reviews # Controls when the workflow will run -on: pull_request_target +on: + pull_request_target: + types: [opened, synchronize, reopened, ready_for_review] jobs: assign-users: - + permissions: + contents: read + pull-requests: write runs-on: ubuntu-latest - steps: # Checks-out your repository under $GITHUB_WORKSPACE, so the job can access it - uses: actions/checkout@v3 - #Parse the Codeowner file + #Parse the Codeowner file on non draft PRs - name: CodeOwnersParser + if: github.event.pull_request.draft == false id: CodeOwnersParser uses: tgstation/CodeOwnersParser@v1 diff --git a/.github/workflows/compile_changelogs.yml b/.github/workflows/compile_changelogs.yml index 729530927e30d5..3746fa61c6187e 100644 --- a/.github/workflows/compile_changelogs.yml +++ b/.github/workflows/compile_changelogs.yml @@ -8,7 +8,7 @@ on: jobs: compile: name: "Compile changelogs" - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: "Check for ACTION_ENABLER secret and pass true to output if it exists to be checked by later steps" id: value_holder @@ -51,4 +51,4 @@ jobs: if: steps.value_holder.outputs.ACTIONS_ENABLED uses: ad-m/github-push-action@master with: - github_token: ${{ secrets.SKYRATBOT_TOKEN }} + github_token: ${{ secrets.NOVABOT_TOKEN ||secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/docker_publish.yml b/.github/workflows/docker_publish.yml index 48ef92c17f1557..e16b9e2f892b5b 100644 --- a/.github/workflows/docker_publish.yml +++ b/.github/workflows/docker_publish.yml @@ -7,7 +7,7 @@ on: jobs: publish: - if: "!contains(github.event.head_commit.message, '[ci skip]')" + if: ( !contains(github.event.head_commit.message, '[ci skip]') ) runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/generate_documentation.yml b/.github/workflows/generate_documentation.yml index 23ce6b1b5df456..468eee78644733 100644 --- a/.github/workflows/generate_documentation.yml +++ b/.github/workflows/generate_documentation.yml @@ -10,8 +10,8 @@ jobs: generate_documentation: permissions: contents: write # for JamesIves/github-pages-deploy-action to push changes in repo - if: "!contains(github.event.head_commit.message, '[ci skip]')" - runs-on: ubuntu-20.04 + if: ( !contains(github.event.head_commit.message, '[ci skip]') ) + runs-on: ubuntu-22.04 concurrency: gen-docs steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 6cfe6aacb62fdd..8e3f5638624e35 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -1,19 +1,20 @@ name: PR Labeler on: - push: - branches: - - master - pull_request_target: + - pull_request_target jobs: Label: + permissions: + contents: read + pull-requests: write runs-on: ubuntu-latest steps: - name: Apply labels based on changed files - if: github.event_name != 'push' - uses: actions/labeler@main + if: ${{ github.event_name != 'push'}} + uses: actions/labeler@v5 with: repo-token: "${{ secrets.GITHUB_TOKEN }}" sync-labels: true configuration-path: .github/labeler.yml + dot: false diff --git a/.github/workflows/pr_emoji.yml b/.github/workflows/pr_emoji.yml index a9d35d2456fb13..a58e87fdb49a82 100644 --- a/.github/workflows/pr_emoji.yml +++ b/.github/workflows/pr_emoji.yml @@ -8,7 +8,7 @@ permissions: jobs: title_and_changelog: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - uses: Wayland-Smithy/emoji-stripper-action@de0c1d158edee50700583d6454aa5f5117337599 with: diff --git a/.github/workflows/round_id_linker.yml b/.github/workflows/round_id_linker.yml index 5aede3503d1b80..fb4a202d179452 100644 --- a/.github/workflows/round_id_linker.yml +++ b/.github/workflows/round_id_linker.yml @@ -5,7 +5,7 @@ on: jobs: link_rounds: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - uses: tgstation/round_linker@master with: diff --git a/.github/workflows/run_integration_tests.yml b/.github/workflows/run_integration_tests.yml index 0c4ba61a8a45e1..404119d988060f 100644 --- a/.github/workflows/run_integration_tests.yml +++ b/.github/workflows/run_integration_tests.yml @@ -18,7 +18,7 @@ on: type: string jobs: run_integration_tests: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest services: mysql: image: mysql:latest @@ -43,9 +43,6 @@ jobs: mysql -u root -proot tg_ci_prefixed < SQL/tgstation_schema_prefixed.sql - name: Install rust-g run: | - sudo dpkg --add-architecture i386 - sudo apt update || true - sudo apt install -o APT::Immediate-Configure=false libssl1.1:i386 bash tools/ci/install_rust_g.sh - name: Install auxlua run: | diff --git a/.github/workflows/show_screenshot_test_results.yml b/.github/workflows/show_screenshot_test_results.yml index 61fc397477d34b..f1f1dec2649d09 100644 --- a/.github/workflows/show_screenshot_test_results.yml +++ b/.github/workflows/show_screenshot_test_results.yml @@ -11,9 +11,9 @@ on: - completed jobs: show_screenshot_test_results: - if: "!contains(github.event.head_commit.message, '[ci skip]')" + if: ( !contains(github.event.head_commit.message, '[ci skip]') && github.event.workflow_run.run_attempt == 1 ) name: Show Screenshot Test Results - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: "Check for ARTIFACTS_FILE_HOUSE_KEY" id: secrets_set diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 26999ca629ba68..e7e41eebbab3a1 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -13,7 +13,7 @@ jobs: permissions: issues: write # for actions/stale to close stale issues pull-requests: write # for actions/stale to close stale PRs - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - uses: actions/stale@v4 diff --git a/.github/workflows/super-linter.yml b/.github/workflows/super-linter.yml new file mode 100644 index 00000000000000..acee01e2b2caf5 --- /dev/null +++ b/.github/workflows/super-linter.yml @@ -0,0 +1,29 @@ +# This workflow executes several linters on changed files based on languages used in your code base whenever +# you push a code or open a pull request. +# +# You can adjust the behavior by modifying this file. +# For more information, see: +# https://github.com/github/super-linter +name: Lint Code Base + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] +jobs: + run-lint: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + with: + # Full git history is needed to get a proper list of changed files within `super-linter` + fetch-depth: 0 + + - name: Lint Code Base + uses: github/super-linter@v4 + env: + VALIDATE_ALL_CODEBASE: false + DEFAULT_BRANCH: "master" + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/test_merge_bot.yml b/.github/workflows/test_merge_bot.yml index ebf8928f435dfe..4eb62752c065cc 100644 --- a/.github/workflows/test_merge_bot.yml +++ b/.github/workflows/test_merge_bot.yml @@ -11,7 +11,7 @@ on: jobs: test_merge_bot: name: Test Merge Detector - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Check for GET_TEST_MERGES_URL id: secrets_set diff --git a/.github/workflows/tgs_test.yml b/.github/workflows/tgs_test.yml new file mode 100644 index 00000000000000..6a9316f493a127 --- /dev/null +++ b/.github/workflows/tgs_test.yml @@ -0,0 +1,68 @@ +name: TGS Test Suite +on: + push: + branches: + - master + - 'project/**' + - 'gh-readonly-queue/master/**' + - 'gh-readonly-queue/project/**' + paths: + - '.tgs.yml' + - '.github/workflows/tgs_test.yml' + - 'dependencies.sh' + - 'code/__DEFINES/tgs.config.dm' + - 'code/__DEFINES/tgs.dm' + - 'code/game/world.dm' + - 'code/modules/tgs/**' + - 'tools/tgs_scripts/**' + - 'tools/tgs_test/**' + pull_request: + branches: + - master + - 'project/**' + paths: + - '.tgs.yml' + - '.github/workflows/tgs_test.yml' + - 'dependencies.sh' + - 'code/__DEFINES/tgs.config.dm' + - 'code/__DEFINES/tgs.dm' + - 'code/game/world.dm' + - 'code/modules/tgs/**' + - 'tools/tgs_scripts/**' + - 'tools/tgs_test/**' + merge_group: + branches: + - master +env: + TGS_API_PORT: 5000 + PR_NUMBER: ${{ github.event.number }} +jobs: + test_tgs_docker: + if: ( !contains(github.event.head_commit.message, '[ci skip]') ) + name: Test TGS Docker + runs-on: ubuntu-22.04 + concurrency: + group: test_tgs_docker-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + services: + tgs: + image: tgstation/server + env: + Database__DatabaseType: Sqlite + Database__ConnectionString: Data Source=TGS_TGTest.sqlite3;Mode=ReadWriteCreate + 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 + with: + dotnet-version: 8.0.x + + - name: Checkout Repository + uses: actions/checkout@v3 + + - 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 fe4a917dcfd64d..bbd237c102d60f 100644 --- a/.github/workflows/update_tgs_dmapi.yml +++ b/.github/workflows/update_tgs_dmapi.yml @@ -7,7 +7,7 @@ on: jobs: update-dmapi: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 name: Update the TGS DMAPI steps: - name: Clone @@ -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.NOVABOT_TOKEN }} diff --git a/.gitignore b/.gitignore index 1c74dfcdf37590..97393735c820a5 100644 --- a/.gitignore +++ b/.gitignore @@ -210,7 +210,7 @@ Temporary Items # Autowiki /tools/autowiki/node_modules -# TGUI bundles - SKYRAT EDIT +# TGUI bundles - NOVA EDIT /tgui/public/tgui-common.bundle.js # Built auxtools libraries and intermediate files diff --git a/.tgs.yml b/.tgs.yml index aa8d52acedea60..571f823c87d747 100644 --- a/.tgs.yml +++ b/.tgs.yml @@ -1,13 +1,25 @@ +# This file is used by TGS (https://github.com/tgstation/tgstation-server) clients to quickly initialize a server instance for the codebase +# The format isn't documented anywhere but hopefully we never have to change it. If there are questions, contact the TGS maintainer Cyberboss/@Dominion#0444 version: 1 -byond: 514.1588 +# 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.1626" +# Folders to create in "/Configuration/GameStaticFiles/" static_files: + # Config directory should be static - name: config + # This implies the folder should be pre-populated with contents from the repo populate: true + # Data directory must be static - name: data +# String dictionary. The value is the location of the file in the repo to upload to TGS. The key is the name of the file to upload to "/Configuration/EventScripts/" +# This one is for Linux hosted servers linux_scripts: PreCompile.sh: tools/tgs_scripts/PreCompile.sh WatchdogLaunch.sh: tools/tgs_scripts/WatchdogLaunch.sh InstallDeps.sh: tools/tgs_scripts/InstallDeps.sh +# Same as above for Windows hosted servers windows_scripts: PreCompile.bat: tools/tgs_scripts/PreCompile.bat +# The security level the game should be run at security: Trusted diff --git a/.vscode/settings.json b/.vscode/settings.json index 07c9b0862fe713..35e9fafdb333c3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,15 +1,15 @@ { "eslint.nodePath": "./tgui/.yarn/sdks", "eslint.workingDirectories": ["./tgui"], - "prettier.prettierPath": "./tgui/.yarn/sdks/prettier/index.js", + "prettier.prettierPath": "./tgui/.yarn/sdks/prettier/index.cjs", "typescript.tsdk": "./tgui/.yarn/sdks/typescript/lib", - "typescript.enablePromptUseWorkspaceTsdk": true, + "typescript.enablePromptUseWorkspaceTsdk": true, "search.exclude": { "**/.yarn": true, "**/.pnp.*": true }, "editor.codeActionsOnSave": { - "source.fixAll.eslint": true + "source.fixAll.eslint": "explicit" }, "files.eol": "\n", "files.insertFinalNewline": true, diff --git a/README.md b/README.md index b6a2e20b472f67..39cea36a750995 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## Skyrat 13 (/tg/station Downstream) +## Solunakin: A Slice of the Stars [![CI Suite](https://github.com/Skyrat-SS13/Skyrat-tg/workflows/CI%20Suite/badge.svg)](https://github.com/Skyrat-SS13/Skyrat-tg/actions?query=workflow%3A%22CI+Suite%22) [![Percentage of issues still open](https://isitmaintained.com/badge/open/Skyrat-SS13/Skyrat-tg.svg)](https://isitmaintained.com/project/Skyrat-SS13/Skyrat-tg "Percentage of issues still open") @@ -7,32 +7,17 @@ [![resentment](.github/images/badges/built-with-resentment.svg)](.github/images/comics/131-bug-free.png) [![technical debt](.github/images/badges/contains-technical-debt.svg)](.github/images/comics/106-tech-debt-modified.png) [![forinfinityandbyond](.github/images/badges/made-in-byond.gif)](https://www.reddit.com/r/SS13/comments/5oplxp/what_is_the_main_problem_with_byond_as_an_engine/dclbu1a) -| Website | Link | -|---------------------------|------------------------------------------------| -| Git / GitHub cheatsheet | [https://www.notion.so/Git-GitHub-61bc81766b2e4c7d9a346db3078ce833](https://www.notion.so/Git-GitHub-61bc81766b2e4c7d9a346db3078ce833) | -| Guide to Modularization | [./modular_skyrat/readme.md](./modular_skyrat/readme.md) | -| Website | [https://www.tgstation13.org](https://www.tgstation13.org) | -| Code | [https://github.com/Skyrat-SS13/Skyrat-tg](https://github.com/Skyrat-SS13/Skyrat-tg) | -| Wiki | [https://wiki.skyrat13.space/index.php/Main_Page](https://wiki.skyrat13.space/index.php/Main_Page) | -| Codedocs | [https://skyrat-ss13.github.io/Skyrat-tg/](https://skyrat-ss13.github.io/Skyrat-tg/) | -| Skyrat 13 Discord | [https://discord.com/invite/hGpZ4Z3](https://discord.com/invite/hGpZ4Z3) | -| Coderbus Discord | [https://discord.gg/Vh8TJp9](https://discord.gg/Vh8TJp9) | - -This is Skyrat's downstream fork of /tg/station created in byond. +This is downstream fork of skyrat created in byond. **Please note that this repository contains sexually explicit content and is not suitable for those under the age of 18.** -Space Station 13 is a paranoia-laden round-based roleplaying game set against the backdrop of a nonsensical, metal death trap masquerading as a space station, with charming spritework designed to represent the sci-fi setting and its dangerous undertones. Have fun, and survive! +Space Station 13 is a paranoia-laden round-based roleplaying game set against the backdrop of a nonsensical, metal death trap masquerading as a space station, with charming spritework designed to represent the sci-fi setting and its dangerous undertones. Have fun, and survive! +However this is a personal project that aims to be less of that, having a personal touch of my own built lore trying to straw away from the typical nanotrasen yada yada syndicate and such. Hopefully it should be something very nice to play on, alone or with friends, i aim it to be more like a slice-of-life and life sim. Who knows. ## Important note - TEST YOUR PULL REQUESTS You are responsible for the testing of your content and providing proof of such in your pull request. You should not mark a pull request ready for review until you have actually tested it. If you require a separate client for testing, you can use a guest account by logging out of BYOND and connecting to your test server. Test merges are not for bug finding, they are for stress tests where local testing simply doesn't allow for this. -## DEVELOPMENT FLOWCHART -![image](https://i.imgur.com/aJnE4WT.png) - -[Modularisation Guide](./modular_skyrat/readme.md) - ## DOWNLOADING [Downloading](.github/guides/DOWNLOADING.md) @@ -52,12 +37,6 @@ Find `BUILD.bat` here in the root folder of tgstation, and double click it to in **[How to compile in VSCode and other build options](tools/build/README.md).** -## Contributors -[Guides for Contributors](.github/CONTRIBUTING.md) - -[/tg/station HACKMD account](https://hackmd.io/@tgstation) - Design documentation here - -[Interested in some starting lore?](https://github.com/tgstation/common_core) ## LICENSE @@ -65,11 +44,3 @@ All code after [commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at All code before [commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST](https://github.com/tgstation/tgstation/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under [GNU GPL v3](https://www.gnu.org/licenses/gpl-3.0.html). (Including tools unless their readme specifies otherwise.) - -See LICENSE and GPLv3.txt for more details. - -The TGS DMAPI is licensed as a subproject under the MIT license. - -See the footer of [code/__DEFINES/tgs.dm](./code/__DEFINES/tgs.dm) and [code/modules/tgs/LICENSE](./code/modules/tgs/LICENSE) for the MIT license. - -All assets including icons and sound are under a [Creative Commons 3.0 BY-SA license](https://creativecommons.org/licenses/by-sa/3.0/) unless otherwise indicated. diff --git a/SQL/ban_conversion_2018-10-28.py b/SQL/ban_conversion_2018-10-28.py index 26d928bfd16714..05395ec657122d 100644 --- a/SQL/ban_conversion_2018-10-28.py +++ b/SQL/ban_conversion_2018-10-28.py @@ -62,7 +62,7 @@ def parse_role(bantype, job): role = "Server" else: #TG: Some legacy jobbans are missing the last character from their job string. - job_name_fixes = {"A":"AI", "Captai":"Captain", "Cargo Technicia":"Cargo Technician", "Chaplai":"Chaplain", "Che":"Chef", "Chemis":"Chemist", "Chief Enginee":"Chief Engineer", "Chief Medical Office":"Chief Medical Officer", "Cybor":"Cyborg", "Detectiv":"Detective", "Head of Personne":"Head of Personnel", "Head of Securit":"Head of Security", "Mim":"Mime", "pA":"pAI", "Quartermaste":"Quartermaster", "Research Directo":"Research Director", "Scientis":"Scientist", "Security Office":"Security Officer", "Station Enginee":"Station Engineer", "Syndicat":"Syndicate", "Warde":"Warden"} + job_name_fixes = {"A":"AI", "Captai":"Captain", "Cargo Technicia":"Cargo Technician", "Chaplai":"Chaplain", "Che":"Chef", "Chemis":"Chemist", "Chief Enginee":"Chief Engineer", "Chief Medical Office":"Chief Medical Officer", "Cybor":"Cyborg", "Detectiv":"Detective", "Head of Personne":"Head of Personnel", "Head of Securit":"Head of Security", "Mim":"Mime", "pA":"pAI", "Quartermaste":"Quartermaster", "Research Directo":"Research Director", "Scientis":"Scientist", "Security Office":"Security Officer", "Station Enginee":"Station Engineer", "Syndicat":"Symphionia", "Warde":"Warden"} keep_job_names = ("AI", "Head of Personnel", "Head of Security", "OOC", "pAI") if job in job_name_fixes: role = job_name_fixes[job] diff --git a/SQL/database_changelog.md b/SQL/database_changelog.md index b0f6ad08b25559..52a0a5535ba1df 100644 --- a/SQL/database_changelog.md +++ b/SQL/database_changelog.md @@ -2,19 +2,26 @@ 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.27 (5.25 for /tg/); The query to update the schema revision table is: +The latest database version is 5.28 (5.26 for /tg/); The query to update the schema revision table is: ```sql -INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 25); +INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 28); ``` or ```sql -INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (5, 25); +INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (5, 28); ``` In any query remember to add a prefix to the table names if you use one. +----------------------------------------------------- +Version 5.28, 03 December 2023, by distributivgesetz +Set the default value of cloneloss to 0, as it's obsolete and it won't be set by blackbox anymore. +```sql +ALTER TABLE `death` MODIFY COLUMN `cloneloss` SMALLINT(5) UNSIGNED DEFAULT '0'; +``` + ----------------------------------------------------- Version 5.27, 27 September 2023, by Jimmyl Removes the text_adventures table because it is no longer used @@ -124,7 +131,7 @@ Version 5.18, 23 August 2021, by GoldenAlpharex Added `discord_report` column to the `ban table` ```sql -`discord_reported` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', /* SKYRAT EDIT - Labelling bans for ease of reporting them over Discord. */ +`discord_reported` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', /* NOVA EDIT - Labelling bans for ease of reporting them over Discord. */ ``` ----------------------------------------------------- diff --git a/SQL/tgstation_schema.sql b/SQL/tgstation_schema.sql index 0637e0da6f60c0..3c7131035b7bbb 100644 --- a/SQL/tgstation_schema.sql +++ b/SQL/tgstation_schema.sql @@ -93,7 +93,7 @@ CREATE TABLE `ban` ( `unbanned_ip` INT(10) UNSIGNED NULL DEFAULT NULL, `unbanned_computerid` VARCHAR(32) NULL DEFAULT NULL, `unbanned_round_id` INT(11) UNSIGNED NULL DEFAULT NULL, - `discord_reported` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', /* SKYRAT EDIT - Labelling bans for ease of reporting them over Discord. */ + `discord_reported` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', /* NOVA EDIT - Labelling bans for ease of reporting them over Discord. */ PRIMARY KEY (`id`), KEY `idx_ban_isbanned` (`ckey`,`role`,`unbanned_datetime`,`expiration_time`), KEY `idx_ban_isbanned_details` (`ckey`,`ip`,`computerid`,`role`,`unbanned_datetime`,`expiration_time`), @@ -177,7 +177,7 @@ CREATE TABLE `death` ( `fireloss` smallint(5) unsigned NOT NULL, `oxyloss` smallint(5) unsigned NOT NULL, `toxloss` smallint(5) unsigned NOT NULL, - `cloneloss` smallint(5) unsigned NOT NULL, + `cloneloss` smallint(5) unsigned DEFAULT '0', `staminaloss` smallint(5) unsigned NOT NULL, `last_words` varchar(255) DEFAULT NULL, `suicide` tinyint(1) NOT NULL DEFAULT '0', diff --git a/SQL/tgstation_schema_prefixed.sql b/SQL/tgstation_schema_prefixed.sql index 37c370f875ad18..3bf1da4759ac0b 100644 --- a/SQL/tgstation_schema_prefixed.sql +++ b/SQL/tgstation_schema_prefixed.sql @@ -176,7 +176,7 @@ CREATE TABLE `SS13_death` ( `fireloss` smallint(5) unsigned NOT NULL, `oxyloss` smallint(5) unsigned NOT NULL, `toxloss` smallint(5) unsigned NOT NULL, - `cloneloss` smallint(5) unsigned NOT NULL, + `cloneloss` smallint(5) unsigned DEFAULT '0', `staminaloss` smallint(5) unsigned NOT NULL, `last_words` varchar(255) DEFAULT NULL, `suicide` tinyint(1) NOT NULL DEFAULT '0', diff --git a/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm b/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm index 051aaad259a163..61311b3f036c8c 100644 --- a/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm +++ b/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm @@ -197,9 +197,6 @@ }, /turf/open/floor/wood, /area/ruin/powered/golem_ship) -"mE" = ( -/turf/open/water/jungle, -/area/ruin/powered/golem_ship) "mU" = ( /obj/machinery/power/shuttle_engine/propulsion{ dir = 4 @@ -503,6 +500,10 @@ }, /turf/open/floor/mineral/titanium, /area/ruin/powered/golem_ship) +"Cx" = ( +/obj/machinery/fishing_portal_generator, +/turf/open/floor/mineral/titanium, +/area/ruin/powered/golem_ship) "CI" = ( /obj/effect/mob_spawn/ghost_role/human/golem/adamantine, /obj/structure/sink/directional/west, @@ -980,8 +981,8 @@ wN (10,1,1) = {" wN wN -mE -mE +wN +wN Df Df Df @@ -997,13 +998,13 @@ wN "} (11,1,1) = {" wN -mE -mE +wN +wN Df Df vr QX -sS +Cx sS sS At @@ -1015,8 +1016,8 @@ Df "} (12,1,1) = {" wN -mE -mE +wN +wN Df bO XR @@ -1034,7 +1035,7 @@ Df (13,1,1) = {" wN wN -mE +wN lF bO ir diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm index 8c31d589343aa4..5c9336c5c5ca4b 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm @@ -812,7 +812,7 @@ /turf/open/floor/engine/vacuum, /area/ruin/planetengi) "yF" = ( -/mob/living/simple_animal/hostile/construct/proteon, +/mob/living/basic/construct/proteon, /turf/open/floor/iron, /area/ruin/planetengi) "Ai" = ( @@ -823,7 +823,7 @@ /turf/open/floor/iron/icemoon, /area/ruin/planetengi) "Iy" = ( -/mob/living/simple_animal/hostile/construct/proteon, +/mob/living/basic/construct/proteon, /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron/icemoon, /area/ruin/planetengi) diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_gas.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_gas.dmm index a70a0decb47453..21862135013979 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_surface_gas.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_surface_gas.dmm @@ -116,7 +116,7 @@ /turf/open/floor/iron, /area/ruin/powered/lizard_gas) "ed" = ( -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/ruin/powered/lizard_gas) "es" = ( @@ -342,7 +342,7 @@ /turf/open/floor/plating, /area/ruin/powered/lizard_gas) "wN" = ( -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/misc/asteroid/snow/icemoon, /area/ruin/powered/lizard_gas) "wU" = ( diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_mining_site.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_mining_site.dmm index 218900ffdee584..79126e4fdd2e3b 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_surface_mining_site.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_surface_mining_site.dmm @@ -180,9 +180,6 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"Bv" = ( -/turf/open/misc/snow, -/area/icemoon/surface/outdoors/nospawn) "Dd" = ( /turf/closed/mineral/random/snow, /area/icemoon/surface/outdoors/nospawn) @@ -265,9 +262,6 @@ /obj/structure/railing/corner, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"PT" = ( -/turf/template_noop, -/area/icemoon/surface/outdoors/nospawn) "Qi" = ( /obj/effect/turf_decal/stripes/corner, /obj/item/flashlight/glowstick/red{ @@ -414,7 +408,7 @@ fl fl "} (4,1,1) = {" -Bv +lH eu jQ vJ @@ -532,7 +526,7 @@ fl (8,1,1) = {" Dd Dd -PT +Dd nT kd yA diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_pizza.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_pizza.dmm index d499b63b242670..0e78558d6f38cc 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_surface_pizza.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_surface_pizza.dmm @@ -41,9 +41,6 @@ /turf/open/floor/plating, /area/ruin/pizzeria) "cl" = ( -/obj/item/wallframe/airalarm{ - pixel_y = 3 - }, /turf/open/floor/iron/freezer, /area/ruin/pizzeria) "cv" = ( @@ -292,7 +289,6 @@ "jY" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, /obj/effect/decal/cleanable/ash, /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 @@ -415,6 +411,11 @@ /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, +/obj/item/reagent_containers/condiment/cornmeal, +/obj/item/reagent_containers/condiment/cornmeal, +/obj/item/reagent_containers/condiment/olive_oil, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, /turf/open/floor/iron/cafeteria, /area/ruin/pizzeria/kitchen) "rZ" = ( @@ -478,6 +479,7 @@ /obj/structure/cable, /obj/effect/turf_decal/bot, /obj/machinery/light/small/broken/directional/north, +/obj/machinery/power/port_gen/pacman/pre_loaded, /turf/open/floor/plating, /area/ruin/pizzeria) "wd" = ( @@ -509,6 +511,7 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners{ dir = 1 }, +/obj/item/storage/box/drinkingglasses, /turf/open/floor/iron/checker, /area/ruin/pizzeria) "xx" = ( @@ -547,7 +550,6 @@ "yS" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, @@ -614,6 +616,7 @@ "AP" = ( /obj/structure/table, /obj/item/clothing/suit/jacket/puffer, +/obj/item/stack/sheet/mineral/plasma/thirty, /turf/open/floor/plating, /area/ruin/pizzeria) "AZ" = ( @@ -656,6 +659,27 @@ /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, +/obj/structure/closet/crate/freezer/food, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/item/food/grown/herbs, +/obj/item/food/grown/herbs, +/obj/item/food/grown/herbs, +/obj/item/food/grown/herbs, +/obj/item/food/grown/herbs, +/obj/item/food/grown/garlic, +/obj/item/food/grown/garlic, +/obj/item/food/grown/garlic, +/obj/item/food/grown/garlic, +/obj/item/food/grown/garlic, /turf/open/floor/iron/cafeteria, /area/ruin/pizzeria/kitchen) "Di" = ( @@ -781,12 +805,12 @@ /turf/open/floor/plating, /area/ruin/pizzeria/kitchen) "IR" = ( -/obj/item/wallframe/airalarm{ - pixel_y = 5 - }, /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, +/obj/machinery/airalarm/directional/south{ + pixel_y = 35 + }, /turf/open/floor/iron/cafeteria, /area/ruin/pizzeria/kitchen) "IW" = ( @@ -939,6 +963,12 @@ "NL" = ( /turf/closed/wall, /area/ruin/pizzeria) +"Op" = ( +/obj/machinery/airalarm/directional/south{ + pixel_y = 4 + }, +/turf/closed/wall, +/area/ruin/pizzeria) "Oy" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/machinery/door/airlock/public/glass{ @@ -1107,10 +1137,15 @@ /obj/structure/table, /obj/item/plate/small, /obj/structure/sign/poster/official/moth_meth/directional/north, -/obj/item/reagent_containers/condiment/enzyme, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = -7 + }, /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, +/obj/item/reagent_containers/condiment/vinegar{ + pixel_x = 4 + }, /turf/open/floor/iron/cafeteria, /area/ruin/pizzeria/kitchen) "Sw" = ( @@ -1259,10 +1294,18 @@ /area/ruin/pizzeria) "WT" = ( /obj/structure/table, -/obj/item/kitchen/rollingpin, +/obj/item/kitchen/rollingpin{ + pixel_x = 6 + }, /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, +/obj/item/food/canned/tomatoes{ + pixel_x = -3 + }, +/obj/item/food/canned/tomatoes{ + pixel_x = -4 + }, /turf/open/floor/iron/cafeteria, /area/ruin/pizzeria/kitchen) "WW" = ( @@ -1630,7 +1673,7 @@ TK NL JM bW -NL +Op cl ji uU diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm index 84b10a3457b54d..865695e5b33275 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm @@ -358,7 +358,7 @@ /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) "gd" = ( -/mob/living/simple_animal/hostile/asteroid/wolf, +/mob/living/basic/mining/wolf, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) "gj" = ( @@ -1263,7 +1263,7 @@ /obj/effect/turf_decal/box/corners{ dir = 4 }, -/mob/living/simple_animal/hostile/asteroid/wolf, +/mob/living/basic/mining/wolf, /turf/open/floor/iron/smooth{ initial_gas_mix = "ICEMOON_ATMOS" }, @@ -1819,7 +1819,7 @@ /turf/open/floor/plating/icemoon, /area/ruin/plasma_facility/commons) "Hz" = ( -/mob/living/simple_animal/hostile/asteroid/wolf, +/mob/living/basic/mining/wolf, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) "HA" = ( @@ -2655,7 +2655,7 @@ id = "fire_facility_car"; name = "Garage Door" }, -/mob/living/simple_animal/hostile/asteroid/wolf, +/mob/living/basic/mining/wolf, /turf/open/floor/plating/icemoon, /area/ruin/plasma_facility/operations) "VD" = ( diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_frozen_comms.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_frozen_comms.dmm index beab0026e91325..25f29890f45dba 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_frozen_comms.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_frozen_comms.dmm @@ -7,7 +7,7 @@ /turf/open/genturf, /area/icemoon/underground/unexplored/rivers) "bh" = ( -/mob/living/simple_animal/hostile/asteroid/wolf, +/mob/living/basic/mining/wolf, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) "cv" = ( @@ -69,7 +69,7 @@ }, /area/ruin/powered/shuttle) "oD" = ( -/mob/living/simple_animal/hostile/asteroid/wolf, +/mob/living/basic/mining/wolf, /turf/open/floor/iron/showroomfloor{ initial_gas_mix = "ICEMOON_ATMOS" }, @@ -99,7 +99,7 @@ }, /area/ruin/powered/shuttle) "rn" = ( -/mob/living/simple_animal/hostile/asteroid/wolf, +/mob/living/basic/mining/wolf, /turf/open/floor/plating/icemoon, /area/ruin/powered/shuttle) "rS" = ( @@ -249,7 +249,7 @@ /turf/open/floor/plating/icemoon, /area/ruin/powered/shuttle) "FK" = ( -/mob/living/simple_animal/hostile/asteroid/wolf, +/mob/living/basic/mining/wolf, /obj/machinery/light/small/broken/directional/north, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/ruin/powered/shuttle) diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_wendigo_cave.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_wendigo_cave.dmm index 9a4abac267d047..8f8230638562e1 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_wendigo_cave.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_wendigo_cave.dmm @@ -1,197 +1,295 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "a" = ( -/turf/closed/indestructible/rock/snow/ice/ore, -/area/icemoon/underground/explored) -"b" = ( -/turf/open/misc/asteroid/snow/ice/icemoon, -/area/icemoon/underground/unexplored) -"d" = ( /turf/template_noop, /area/template_noop) +"c" = ( +/obj/structure/flora/rock/pile/icy/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/unexplored) +"d" = ( +/obj/structure/flora/tree/pine/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"e" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"g" = ( +/obj/structure/flora/rock/pile/icy/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"h" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) "j" = ( -/obj/effect/mob_spawn/corpse/human/miner/explorer, -/turf/open/misc/asteroid/snow/ice/icemoon, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"k" = ( +/obj, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/unexplored) +"l" = ( +/turf/closed/indestructible/rock/snow/ice/ore, +/area/icemoon/underground/explored) +"m" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"n" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"o" = ( +/turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/unexplored) +"p" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) "q" = ( -/mob/living/simple_animal/hostile/megafauna/wendigo, +/obj/effect/decal/cleanable/blood/gibs/core, /turf/open/indestructible/necropolis{ initial_gas_mix = "ICEMOON_ATMOS" }, /area/icemoon/underground/explored) -"z" = ( -/obj/effect/landmark/portal_exit{ +"t" = ( +/obj/effect/portal/permanent/one_way{ id = "wendigo arena" }, /turf/open/indestructible/necropolis{ initial_gas_mix = "ICEMOON_ATMOS" }, +/area/icemoon/underground/unexplored) +"u" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"w" = ( +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 11; + pixel_y = 18 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"y" = ( +/obj/structure/flora/grass/both/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/unexplored) +"z" = ( +/obj/structure/flora/grass/brown/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"A" = ( +/obj/effect/decal/cleanable/blood/gibs/torso, +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"B" = ( +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"C" = ( +/obj/effect/mob_spawn/corpse/human/miner/explorer, +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/unexplored) +"D" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"F" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 8; + pixel_y = 11 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/unexplored) +"G" = ( +/obj/structure/flora/rock/pile/icy/style_random, +/obj/structure/flora/grass/brown/style_random, +/turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"H" = ( +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"I" = ( +/turf/closed/indestructible/rock/snow/ice/ore, +/area/icemoon/underground/unexplored) +"J" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/unexplored) "K" = ( -/obj/effect/landmark/portal_exit{ - id = "wendigo arena exit" +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" }, -/turf/open/misc/asteroid/snow/ice/icemoon, +/area/icemoon/underground/explored) +"L" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"M" = ( +/obj/structure/flora/tree/pine/style_random, +/turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/unexplored) "N" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/unexplored) +"O" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, /turf/open/indestructible/necropolis{ initial_gas_mix = "ICEMOON_ATMOS" }, /area/icemoon/underground/explored) -"U" = ( -/obj/item/paper/crumpled/bloody{ - default_raw_text = "for your own sake, do not enter" +"P" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"Q" = ( +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = -5 + }, +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 7; + pixel_y = 17 + }, +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 10; + pixel_y = 7 }, -/turf/open/misc/asteroid/snow/ice/icemoon, +/turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/unexplored) -"V" = ( -/obj/effect/portal/permanent/one_way{ +"R" = ( +/obj/effect/landmark/portal_exit{ id = "wendigo arena" }, -/turf/open/misc/asteroid/snow/ice/icemoon, +/obj/effect/decal/cleanable/blood/drip, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"S" = ( +/obj/structure/flora/grass/brown/style_random, +/turf/closed/indestructible/rock/snow/ice/ore, +/area/icemoon/underground/explored) +"T" = ( +/obj/structure/flora/rock/pile/icy/style_3, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"U" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"V" = ( +/obj/effect/landmark/portal_exit{ + id = "wendigo arena exit" + }, +/turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/unexplored) +"W" = ( +/mob/living/simple_animal/hostile/megafauna/wendigo, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"X" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"Y" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"Z" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) (1,1,1) = {" -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -"} -(2,1,1) = {" -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -"} -(3,1,1) = {" -d -d -d -d -d -d -d -d -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -d -d -d -d -d -d -d -"} -(4,1,1) = {" -d -d -d -d -d -d -d -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -d -d -d -d -d -d -"} -(5,1,1) = {" -d -d -d -d -d -d -b -b -b a a a @@ -205,25 +303,6 @@ a a a a -b -b -b -d -d -d -d -d -d -"} -(6,1,1) = {" -d -d -d -d -d -b -b -b a a a @@ -239,23 +318,37 @@ a a a a -b -b -b -d -d -d -d -d -"} -(7,1,1) = {" -d -d -d -d -b -b -b +a +a +a +a +"} +(2,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 a a a @@ -263,6 +356,8 @@ a a a a +"} +(3,1,1) = {" a a a @@ -270,30 +365,58 @@ a a a a +o +o +o +o +y +y +o +o +o +o +o +y +o +o +o +o +o +a +a +a +a +a a a a -b -b -b -d -d -d -d "} -(8,1,1) = {" -d -d -d -b -b -b +(4,1,1) = {" a a a a a a +o +o +y +l +I +M +o +c +o +o +o +o +o +o +y +y +o +o +o a a a @@ -301,657 +424,926 @@ a a a a +"} +(5,1,1) = {" +a +a +a +a +a +o +o +y +o +l +l +l +l +l +y +o +o +M +l +l +l +l +l +o +c +o a a a a a a -b -b -b -d -d -d "} -(9,1,1) = {" -d -d -b -b -b +(6,1,1) = {" a a a a +o +o +o +y +l +l +l +l +l +l +l +l +l +l +l +l +l +l +M +c +o +o +o a a -N -N -N -N -N -N -N -N -N a a a +"} +(7,1,1) = {" +a +a +a +o +o +o +c +l +l +l +l +l +l +l +l +l +l +l +l +l +l +l +o +o +y +o +o +o +a a a a -b -b -b -d -d "} -(10,1,1) = {" -d -d -b -b +(8,1,1) = {" a a a +o +o +M +l +l +l +l +l +l +l +d +H +z +g +g +l +l +l +l +l +l +M +o +o +o a a a -N -N -N -N -N -N -N -N -N -N -N a +"} +(9,1,1) = {" a a a +o +o +y +l +l +l +l +l +z +H +H +h +Z +H +z +z +H +l +l +l +l +l +y +y +o +a +a a a -b -b -d -d "} -(11,1,1) = {" -d -d -b -b +(10,1,1) = {" a a a +k +M +y +l +l +l +l +g +H +j +H +H +O +L +L +P +g +H +l +l +l +l +l +c +o a a -N -N -N -N -N -N -N -N -N -N -N -N -N a a +"} +(11,1,1) = {" +a +a +a +o +o +l +l +l +z +n +H +H +U +Z +H +O +K +B +H +H +H +n +H +l +l +l +o +M +a a a a -b -b -d -d "} (12,1,1) = {" -d -d -b -b a a a -a -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N +o +l +l +l +h +L +K +Z +H +T +O +L +K +K +B +g +e +L +B +H +g +l +l +l +o a a a a -b -b -d -d "} (13,1,1) = {" -d -d -b -b a a +o +o +l +l +l +H +H +O +K +Z +H +O +K +K +K +K +L +K +K +K +Z +H +l +l +l +o a -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N a a a -b -b -d -d "} (14,1,1) = {" +a +a +o +o +M +l +l +l d -d -b -b +O +K +B +H +O +K +K +K +K +K +K +K +K +K +L +l +l +l +o +o a a a -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N +"} +(15,1,1) = {" +a +a +y +y +c +l +l +l +l +K +K +K +L +K +K +K +K +K +K +K +K +K +K +Y +l +l +o +o +M +a +a +a +"} +(16,1,1) = {" +a +a +o +M +o +l +l +l +l +K +K +K +K +K +K +K +m +q +K +K +K +K +X +H +l +l +J +C +o +y +a +a +"} +(17,1,1) = {" a a +o +o +V +o +l +l +l +K +K +K +K +K +K +W +A +K +K +K +K +B +w +R +l +t +F +Q +o +y +a a -b -b -d -d "} -(15,1,1) = {" -d -d -b -b -a +(18,1,1) = {" a a +o +o +o +y +l +l +l +K +K +K +K +K +K +K +D +K +K +K +K +B +u +H +l N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N +c +o +o +o a a -a -b -b -d -d "} -(16,1,1) = {" -d -d -b -b +(19,1,1) = {" a a +o +o +y +M +l +l +Y +Y +Y +K +K +K +K +K +K +K +K +K +K +K +L +L +l +l +y +o +o +M a -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N a +"} +(20,1,1) = {" a a -b -b -d +M +o +o +l +l d +H +H +H +O +K +Y +K +K +K +K +K +K +K +K +K +K +l +l +l +y +o +a +a +a "} -(17,1,1) = {" -d -d -b -b +(21,1,1) = {" a a +o +o +c +l +l +g +H +e +L +K +B +H +O +K +Y +K +K +K +Y +Y +K +K +l +l +l +y a -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N a a a -j -b -d -d "} -(18,1,1) = {" -d -d -b -K +(22,1,1) = {" a a +o +c +l +l +l +L +p +Y +K +K +B +H +O +B +T +U +K +B +H +g +U +l +l +l +l +c a -N -N -N -N -N -N -N -N -q -N -N -N -N -N -N -N -z a a a -V -U -d -d "} -(19,1,1) = {" -d -d -b -b +(23,1,1) = {" a a a -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N +o +l +l +l +l +z +H +O +K +X +g +O +B +H +H +O +B +H +H +H +l +l +l +o +o +a a a a -b -b -d -d "} -(20,1,1) = {" -d -d -b -b +(24,1,1) = {" a a a -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N +o +o +l +l +l +S +d +O +X +g +H +U +X +H +H +U +B +H +H +l +l +l +l +o +M +a a a a -b -b -d -d "} -(21,1,1) = {" -d -d -b -b +(25,1,1) = {" a a a -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N +o +o +o +l +l +l +l +B +H +H +z +H +H +g +z +z +O +l +l +l +l +l +c +o +o +a a a a -b -b -d -d "} -(22,1,1) = {" -d -d -b -b +(26,1,1) = {" a a a -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N +M +o +o +o +M +l +l +l +H +z +z +l +l +l +d +G +l +l +l +l +o +o +o +o +o +a a a a -b -b -d -d "} -(23,1,1) = {" -d -d -b -b +(27,1,1) = {" a a a -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N +a +c +o +y +y +l +l +l +l +l +l +l +l +l +l +l +l +l +l +l +o +o +o +M +o +a a a a -b -b -d -d "} -(24,1,1) = {" -d -d -b -b +(28,1,1) = {" a a a a -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N +a +c +o +y +o +l +l +l +l +l +l +l +l +l +l +l +l +l +c +o +o +o +o +a a a a a -b -b -d -d "} -(25,1,1) = {" -d -d -b -b +(29,1,1) = {" a a a a a -N -N -N -N -N -N -N -N -N -N -N -N -N +a +o +o +o +o +M +y +o +l +l +l +l +l +l +l +l +o +o +o +M +o +a a a a a a -b -b -d -d "} -(26,1,1) = {" -d -d -b -b +(30,1,1) = {" a a a a a a -N -N -N -N -N -N -N -N -N -N -N +a +o +o +o +c +o +o +o +M +o +l +l +l +l +o +o +o +o +o +a a a a a a a -b -b -d -d "} -(27,1,1) = {" -d -d -b -b -b +(31,1,1) = {" a a a a a a -N -N -N -N -N -N -N -N -N a a +o +o +M +o +o +o +c +y +y +o +o +o +c +o +o +M a a a a -b -b -b -d -d -"} -(28,1,1) = {" -d -d -d -b -b -b a a a a +"} +(32,1,1) = {" a a a @@ -967,21 +1359,6 @@ a a a a -b -b -b -d -d -d -"} -(29,1,1) = {" -d -d -d -d -b -b -b a a a @@ -999,23 +1376,12 @@ a a a a -b -b -b -d -d -d -d "} -(30,1,1) = {" -d -d -d -d -d -b -b -b +(33,1,1) = {" +a +a +a +a a a a @@ -1031,25 +1397,6 @@ a a a a -b -b -b -d -d -d -d -d -"} -(31,1,1) = {" -d -d -d -d -d -d -b -b -b a a a @@ -1063,145 +1410,4 @@ a a a a -b -b -b -d -d -d -d -d -d -"} -(32,1,1) = {" -d -d -d -d -d -d -d -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -d -d -d -d -d -d -"} -(33,1,1) = {" -d -d -d -d -d -d -d -d -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -d -d -d -d -d -d -d -"} -(34,1,1) = {" -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -"} -(35,1,1) = {" -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d "} diff --git a/_maps/RandomRuins/IceRuins/skyrat/icemoon_underground_icewalker_lower.dmm b/_maps/RandomRuins/IceRuins/nova/icemoon_underground_icewalker_lower.dmm similarity index 99% rename from _maps/RandomRuins/IceRuins/skyrat/icemoon_underground_icewalker_lower.dmm rename to _maps/RandomRuins/IceRuins/nova/icemoon_underground_icewalker_lower.dmm index 8ea8983ce522ef..6c1b5fc71ebc47 100644 --- a/_maps/RandomRuins/IceRuins/skyrat/icemoon_underground_icewalker_lower.dmm +++ b/_maps/RandomRuins/IceRuins/nova/icemoon_underground_icewalker_lower.dmm @@ -243,7 +243,7 @@ /turf/open/misc/dirt/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "fY" = ( -/obj/structure/flora/ash/cap_shroom, +/obj/structure/flora/ash, /turf/open/misc/dirt/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "gt" = ( @@ -342,6 +342,7 @@ /obj/item/seeds/plum, /obj/item/seeds/berry, /obj/item/seeds/grape, +/obj/item/seeds/watermelon, /turf/open/misc/asteroid/snow/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "iJ" = ( @@ -391,6 +392,10 @@ /obj/structure/stairs/wood, /turf/open/misc/dirt/icemoon, /area/ruin/unpowered/primitive_catgirl_den) +"jO" = ( +/obj/structure/flora/ash/stem_shroom, +/turf/open/misc/dirt/icemoon, +/area/ruin/unpowered/primitive_catgirl_den) "jV" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/fluff/minepost, @@ -845,6 +850,10 @@ }, /turf/open/misc/dirt/icemoon, /area/ruin/unpowered/primitive_catgirl_den) +"sf" = ( +/obj/structure/flora/ash/cap_shroom, +/turf/open/misc/dirt/icemoon, +/area/ruin/unpowered/primitive_catgirl_den) "su" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -990,6 +999,7 @@ /obj/item/seeds/tea/catnip, /obj/item/seeds/bamboo, /obj/item/seeds/ambrosia, +/obj/item/seeds/grass, /turf/open/misc/dirt/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "wF" = ( @@ -1873,6 +1883,7 @@ /obj/item/seeds/tower{ pixel_y = -3 }, +/obj/item/seeds/glowshroom, /obj/item/seeds/poppy, /obj/item/seeds/reishi, /obj/item/seeds/reishi, @@ -2954,7 +2965,7 @@ oJ pa GN GN -fY +jO jV Oy MP @@ -3214,7 +3225,7 @@ GN GN GN mu -fY +sf GN pa hA diff --git a/_maps/RandomRuins/IceRuins/skyrat/icemoon_underground_icewalker_upper.dmm b/_maps/RandomRuins/IceRuins/nova/icemoon_underground_icewalker_upper.dmm similarity index 100% rename from _maps/RandomRuins/IceRuins/skyrat/icemoon_underground_icewalker_upper.dmm rename to _maps/RandomRuins/IceRuins/nova/icemoon_underground_icewalker_upper.dmm diff --git a/_maps/RandomRuins/IceRuins/nova/icemoon_underground_interdyne_base1.dmm b/_maps/RandomRuins/IceRuins/nova/icemoon_underground_interdyne_base1.dmm new file mode 100644 index 00000000000000..da3ee61e839378 --- /dev/null +++ b/_maps/RandomRuins/IceRuins/nova/icemoon_underground_interdyne_base1.dmm @@ -0,0 +1,11155 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/template_noop, +/area/template_noop) +"ab" = ( +/turf/open/lava/plasma/ice_moon, +/area/icemoon/underground/explored) +"ac" = ( +/obj/structure/flora/rock/pile/icy/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"ad" = ( +/obj/machinery/quantumpad{ + name = "quantum pad to DS-2"; + layer = 2.8; + map_pad_id = "interdyne"; + map_pad_link_id = "ds2" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"ae" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 9; + faction = list("Syndicate","neutral") + }, +/turf/closed/wall/r_wall/syndicate{ + fixed_underlay = list(icon='icons/turf/snow.dmi', icon_state="snow") + }, +/area/ruin/interdyne_planetary_base) +"af" = ( +/obj/machinery/camera/autoname/directional/south{ + pixel_x = 20; + pixel_y = 32; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo/deck) +"ag" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo/deck) +"ah" = ( +/obj/machinery/door/poddoor{ + id = "interdynedeckofficer" + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/cargo/deck) +"ai" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/cargo) +"aj" = ( +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/deck_officer/ice{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"ak" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"al" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"am" = ( +/obj/machinery/door/airlock{ + name = "Bedroom" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo/deck) +"an" = ( +/obj/structure/chair/office/light, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"ao" = ( +/obj/machinery/button/door/directional/east{ + id = "interdynedeckofficer"; + req_access = list("syndicate") + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"ap" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/towel_bin, +/obj/structure/table{ + layer = 2.79 + }, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aq" = ( +/obj/structure/drain, +/obj/structure/curtain, +/obj/machinery/shower/directional/west{ + desc = "A borrowed Nanotrasen Hygiene Division HS-452. It's one of the older 2550's series. A small sticker on the side insists it \"observes 2560 lead compliance!\"; passively replenishes itself with water when not in use." + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/interdyne_planetary_base/cargo/deck) +"as" = ( +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"av" = ( +/obj/machinery/light/directional/west, +/obj/structure/closet/secure_closet{ + name = "deck offficer's locker"; + icon_state = "qm"; + req_access = list("syndicate_leader"); + icon_door = "qm" + }, +/obj/item/clothing/neck/cloak/qm/nova/interdyne, +/obj/item/clothing/under/rank/cargo/qm/nova/interdyne, +/obj/item/circuitboard/computer/advanced_camera, +/obj/item/megaphone/cargo, +/obj/item/clothing/glasses/sunglasses, +/obj/item/ammo_box/magazine/m9mm{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/gun/ballistic/automatic/pistol, +/obj/item/stamp/syndicate, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aw" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/carpet/royalblue, +/area/ruin/interdyne_planetary_base/cargo/deck) +"ax" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/carpet/royalblue, +/area/ruin/interdyne_planetary_base/cargo/deck) +"ay" = ( +/obj/structure/table/wood, +/obj/machinery/light/directional/west, +/obj/structure/sign/calendar/directional/west{ + pixel_z = 6; + color = "#FFFFFF"; + pixel_w = 3 + }, +/obj/item/table_clock{ + pixel_x = -6; + anchored_tabletop_offset = 8 + }, +/obj/item/paper_bin{ + pixel_x = 8; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = 8; + pixel_y = 4 + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"az" = ( +/obj/structure/table/wood, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aB" = ( +/obj/machinery/door/airlock{ + name = "Bathroom" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aC" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med/viro) +"aD" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med/viro) +"aE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aF" = ( +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aG" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo) +"aH" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"aL" = ( +/obj/structure/dresser, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aM" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/carpet/royalblue, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aN" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/machinery/light_switch/directional/east, +/obj/item/bedsheet/rd/double, +/obj/structure/bed/double, +/turf/open/floor/carpet/royalblue, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aO" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aP" = ( +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aQ" = ( +/obj/structure/toilet{ + dir = 4; + pixel_z = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aR" = ( +/obj/structure/sink/directional/west, +/obj/structure/mirror/directional/east, +/turf/open/floor/iron/showroomfloor, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aT" = ( +/obj/structure/sign/warning/gas_mask/directional/east, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"aU" = ( +/obj/machinery/door/airlock/command{ + name = "Deck Officer" + }, +/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/syndicate/leader, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"aV" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"aW" = ( +/obj/machinery/door/poddoor{ + id = "interdynecargo" + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/cargo) +"aY" = ( +/obj/structure/dresser, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"aZ" = ( +/obj/structure/closet/secure_closet/personal/wall{ + pixel_y = 30; + pixel_w = 0; + icon_door = "locker_wall" + }, +/turf/open/floor/iron/smooth_edge, +/area/ruin/interdyne_planetary_base/cargo) +"ba" = ( +/obj/structure/bed, +/obj/item/bedsheet/dorms, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"bb" = ( +/obj/structure/flora/grass/green/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"bc" = ( +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"be" = ( +/obj/machinery/camera/autoname/directional/south{ + pixel_y = 32; + network = list("intd13") + }, +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo/deck) +"bf" = ( +/obj/machinery/suit_storage_unit/mining, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bg" = ( +/obj/structure/table/glass, +/obj/structure/reagent_dispensers/wall/virusfood/directional/west, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/storage/box/syringes, +/obj/structure/sign/clock/directional/north{ + pixel_y = 26 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"bh" = ( +/obj/machinery/suit_storage_unit/mining, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bj" = ( +/obj/machinery/camera/autoname/directional/south{ + pixel_x = 20; + pixel_y = 32; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bk" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 5; + faction = list("Syndicate","neutral") + }, +/turf/closed/wall/r_wall/syndicate{ + fixed_underlay = list(icon='icons/turf/snow.dmi', icon_state="snow") + }, +/area/ruin/interdyne_planetary_base) +"bl" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/structure/sign/poster/contraband/icebox_moment/directional/north, +/obj/structure/tank_dispenser, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bm" = ( +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bo" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bp" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bq" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 4; + layer = 2.52 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"br" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bs" = ( +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/shaftminer/ice{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"bt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/smooth_edge{ + dir = 1 + }, +/area/ruin/interdyne_planetary_base/cargo) +"bu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"bv" = ( +/obj/machinery/door/airlock/mining{ + name = "Shaft Miner Dormitory Alpha" + }, +/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/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bx" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Bay" + }, +/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/syndicate/general, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4; + layer = 2.01 + }, +/obj/machinery/duct, +/obj/effect/turf_decal/siding/thinplating{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"by" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bA" = ( +/obj/machinery/duct, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bB" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bC" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "interdynecargoout" + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/caution{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bE" = ( +/obj/item/flashlight{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/flashlight{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/extinguisher{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/extinguisher{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/extinguisher{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/machinery/conveyor{ + dir = 4; + id = "interdynecargoout" + }, +/obj/structure/closet/crate/cardboard, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bF" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "interdynecargoout" + }, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bG" = ( +/obj/machinery/door/poddoor{ + id = "interdynecargowest" + }, +/obj/machinery/conveyor{ + dir = 4; + id = "interdynecargoout" + }, +/obj/machinery/door/firedoor/heavy, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/cargo) +"bH" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "interdynecargoout" + }, +/obj/structure/plasticflaps, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4; + layer = 2.52 + }, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/cargo) +"bI" = ( +/obj/machinery/door/poddoor{ + id = "interdynecargowest" + }, +/obj/machinery/conveyor{ + dir = 4; + id = "interdynecargoout" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/cargo) +"bK" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/dropper{ + pixel_y = 0 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/obj/item/book/manual/wiki/infections, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"bM" = ( +/obj/effect/turf_decal/arrows, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bN" = ( +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bO" = ( +/obj/structure/closet/crate/internals{ + anchored = 1 + }, +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/emergency_oxygen/double, +/obj/item/tank/internals/emergency_oxygen/double, +/obj/item/tank/internals/emergency_oxygen/double, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/effect/turf_decal/box/white, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bQ" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/rack, +/obj/effect/turf_decal/box/white, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bR" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bT" = ( +/obj/machinery/button/door{ + pixel_x = 32; + pixel_y = 8; + id = "interdynecargowest" + }, +/obj/machinery/button/door{ + pixel_x = 32; + pixel_y = -8; + id = "interdynecargoeast" + }, +/obj/machinery/computer/shuttle{ + name = "syndicate cargo shuttle terminal"; + desc = "Occasionally used to call in a resupply shuttle if one is in range."; + dir = 8; + light_color = "#FA8282"; + req_access = list("syndicate"); + icon_screen = "syndishuttle"; + icon_keyboard = "syndie_key"; + shuttleId = "syndie_cargo"; + possible_destinations = "syndielavaland_cargo" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bU" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/cargo) +"bV" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 8 + }, +/obj/structure/noticeboard/directional/north, +/obj/structure/closet/crate, +/obj/item/food/ready_donk, +/obj/item/food/ready_donk, +/obj/item/food/ready_donk/mac_n_cheese, +/obj/item/food/ready_donk, +/obj/item/food/ready_donk, +/obj/item/food/ready_donk, +/obj/item/food/ready_donk/donkrange_chicken, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bW" = ( +/obj/structure/frame/machine{ + icon_state = "box_1"; + state = 2; + anchored = 1 + }, +/obj/item/circuitboard/machine/ore_redemption, +/obj/item/assembly/igniter, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/cargo) +"bZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"ca" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/box/white, +/obj/structure/closet/secure_closet{ + icon_state = "syndicate"; + base_icon_state = "syndicate"; + req_access = list("syndicate"); + icon_door = "syndicate" + }, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"cb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cc" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "interdynecargoin" + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cd" = ( +/obj/machinery/computer/order_console/mining/interdyne, +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"ce" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "interdynecargoin" + }, +/obj/structure/closet/crate/medical, +/obj/item/storage/medkit/fire{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/medkit/brute, +/obj/item/storage/medkit/regular{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cf" = ( +/obj/machinery/door/poddoor{ + id = "interdynecargoeast" + }, +/obj/machinery/conveyor{ + dir = 8; + id = "interdynecargoin" + }, +/obj/machinery/door/firedoor/heavy, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/cargo) +"cg" = ( +/obj/structure/rack/shelf, +/obj/effect/turf_decal/box/white, +/obj/item/pickaxe, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"ch" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "interdynecargoin" + }, +/obj/structure/plasticflaps, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4; + layer = 2.52 + }, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/cargo) +"ci" = ( +/obj/machinery/door/poddoor{ + id = "interdynecargoeast" + }, +/obj/machinery/conveyor{ + dir = 8; + id = "interdynecargoin" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/cargo) +"cj" = ( +/obj/machinery/door/airlock/mining{ + name = "Shaft Miner Dormitory Beta" + }, +/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/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"ck" = ( +/obj/structure/railing, +/obj/effect/turf_decal/loading_area, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"cl" = ( +/obj/structure/railing, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"cm" = ( +/obj/structure/railing, +/obj/effect/turf_decal/box/white, +/obj/structure/rack/shelf, +/obj/item/construction/rcd/loaded/interdyne, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"cn" = ( +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"co" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/machinery/vending/wardrobe/syndie_wardrobe{ + contraband = list(/obj/item/knife/combat=1, /obj/item/clothing/under/syndicate/coldres=6, /obj/item/clothing/shoes/combat/coldres=6, /obj/item/flashlight/lantern/syndicate=4); + extended_inventory = 1; + onstation = 0 + }, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"cp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cs" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"ct" = ( +/obj/machinery/button/door/directional/south{ + name = "window security button"; + id = "interdynecargo"; + req_access = list("syndicate") + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cu" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cv" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 4; + layer = 2.52 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cw" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cy" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"cz" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"cA" = ( +/obj/machinery/light/directional/north, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"cB" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 1 + }, +/obj/machinery/firealarm/directional/south{ + dir = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"cC" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 5 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/item/modular_computer/laptop/preset/syndicate, +/obj/item/modular_computer/laptop/preset/syndicate, +/obj/item/modular_computer/laptop/preset/syndicate, +/obj/item/modular_computer/laptop/preset/syndicate, +/obj/item/modular_computer/laptop/preset/syndicate, +/obj/item/modular_computer/laptop/preset/syndicate, +/obj/item/modular_computer/laptop/preset/syndicate, +/obj/structure/closet/crate/centcom, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"cD" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cE" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/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/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cF" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/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/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cG" = ( +/obj/machinery/firealarm/directional/south{ + dir = 1 + }, +/obj/effect/turf_decal/siding/brown{ + dir = 9 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/item/storage/toolbox/electrical{ + pixel_y = 4 + }, +/obj/item/storage/toolbox/syndicate{ + layer = 3.001 + }, +/obj/structure/closet/crate/engineering, +/obj/item/storage/inflatable, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"cH" = ( +/obj/effect/turf_decal/box/red/corners, +/obj/effect/turf_decal/box/red/corners{ + dir = 8 + }, +/obj/structure/closet/crate/secure/gear{ + desc = "A secure gear crate, with the Syndicate logo on it."; + icon_state = "syndicrate"; + base_icon_state = "syndicrate"; + req_access = list("syndicate") + }, +/obj/item/clothing/glasses/night, +/obj/item/clothing/glasses/night, +/obj/item/clothing/glasses/night, +/obj/item/storage/belt/military, +/obj/item/storage/belt/military, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/under/syndicate/combat, +/obj/item/clothing/under/syndicate/combat, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/combat, +/obj/effect/turf_decal/siding/brown{ + dir = 1 + }, +/obj/item/radio/headset/interdyne, +/obj/item/radio/headset/interdyne, +/obj/item/radio/headset/interdyne, +/obj/item/card/id/advanced/chameleon/black, +/obj/item/card/id/advanced/chameleon/black, +/obj/item/card/id/advanced/chameleon/black, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"cI" = ( +/obj/effect/turf_decal/siding/thinplating/corner{ + dir = 1 + }, +/obj/machinery/duct, +/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/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cJ" = ( +/obj/structure/closet/crate/secure/weapon{ + req_access = list("syndicate") + }, +/obj/item/ammo_box/c9mm{ + pixel_y = 6 + }, +/obj/item/ammo_box/c9mm, +/obj/item/ammo_box/magazine/m9mm{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/ammo_box/magazine/m9mm{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/ammo_box/magazine/m9mm{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/ammo_box/magazine/m9mm{ + pixel_x = 4; + pixel_y = -4 + }, +/obj/effect/turf_decal/siding/brown{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"cK" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north{ + req_access = list("syndicate") + }, +/obj/structure/table/glass, +/obj/item/storage/box/gloves, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 10 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"cN" = ( +/obj/item/storage/box/stockparts/deluxe, +/obj/item/storage/box/stockparts/deluxe, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/machinery/conveyor{ + dir = 8; + id = "interdynecargoin" + }, +/obj/item/stack/rods/fifty, +/obj/item/stack/sheet/mineral/plastitanium{ + amount = 50 + }, +/obj/item/stack/sheet/mineral/wood/fifty, +/obj/structure/closet/crate, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cO" = ( +/obj/machinery/door/airlock/mining{ + name = "Shaft Miner Dormitory Gamma" + }, +/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/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cP" = ( +/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/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cR" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo/ware) +"cS" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/obj/machinery/door/airlock/mining/glass{ + name = "Warehouse" + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/ware) +"cT" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Bay" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-cargo" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/cargo) +"cU" = ( +/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/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cV" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Bay" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-cargo" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/obj/machinery/door/firedoor, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/cargo) +"cW" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo/obs) +"cX" = ( +/obj/effect/turf_decal/siding/brown{ + 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/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"cY" = ( +/obj/machinery/door/poddoor{ + id = "interdyneobservation" + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/cargo/obs) +"cZ" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/cargo/obs) +"da" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"db" = ( +/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/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"dc" = ( +/obj/structure/table/glass, +/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/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/chair/office{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"df" = ( +/obj/item/storage/box/monkeycubes/syndicate{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/structure/table/glass, +/obj/item/storage/box/monkeycubes/syndicate{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dg" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"dh" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"di" = ( +/obj/machinery/light/directional/east, +/obj/structure/weightmachine/weightlifter, +/obj/effect/turf_decal/siding/dark/end{ + dir = 1 + }, +/turf/open/floor/eighties, +/area/ruin/interdyne_planetary_base/cargo) +"dj" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/cargo/ware) +"dk" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/ware) +"dl" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/box/white, +/obj/structure/ore_box, +/obj/machinery/button/door/directional/north{ + id = "interdynewarehosue"; + name = "window security button"; + req_access = list("syndicate") + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/ware) +"dm" = ( +/obj/machinery/door/poddoor{ + id = "interdynewarehosue" + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/cargo/ware) +"dn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/cargo) +"do" = ( +/obj/machinery/smartfridge/chemistry/virology/preloaded, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/door/window/survival_pod{ + req_access = list("syndicate") + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dq" = ( +/obj/machinery/computer/pandemic, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dr" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/table/glass, +/obj/item/healthanalyzer/simple/disease, +/obj/item/clothing/glasses/hud/health, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"ds" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/structure/closet/l3closet/virology, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dt" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/structure/closet/l3closet/virology, +/obj/effect/turf_decal/siding/dark/end{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"du" = ( +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"dv" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/cargo) +"dw" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dx" = ( +/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/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dA" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dB" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + 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/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dC" = ( +/obj/effect/turf_decal/siding/thinplating/corner, +/obj/machinery/light_switch/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/obs) +"dD" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/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/airlock/security/old/glass{ + name = " Observation Center" + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/obs) +"dE" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 2 + }, +/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/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/obs) +"dF" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 2 + }, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/obs) +"dG" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 2 + }, +/obj/machinery/button/door/directional/north{ + name = "window security button"; + pixel_x = 0; + id = "interdyneobservation" + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/obs) +"dH" = ( +/obj/effect/turf_decal/tile/dark_red/half, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"dI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dJ" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dK" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/main) +"dL" = ( +/obj/machinery/door/airlock/maintenance/external, +/obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dM" = ( +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dN" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dO" = ( +/obj/machinery/firealarm/directional/south{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dP" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dQ" = ( +/obj/structure/weightmachine{ + dir = 2 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/eighties, +/area/ruin/interdyne_planetary_base/cargo) +"dS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/smooth_edge{ + dir = 4 + }, +/area/ruin/interdyne_planetary_base/cargo/ware) +"dT" = ( +/obj/structure/ore_box, +/obj/effect/turf_decal/box/white, +/turf/open/floor/iron/smooth_edge{ + dir = 8 + }, +/area/ruin/interdyne_planetary_base/cargo/ware) +"dU" = ( +/obj/effect/turf_decal/siding/thinplating/corner{ + dir = 8 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/obs) +"dV" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/obs) +"dW" = ( +/turf/closed/mineral/random/snow, +/area/icemoon/underground/explored) +"dZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/conveyor{ + dir = 1; + id = "interdynedisp" + }, +/obj/item/serviette_used, +/obj/item/shard/plastitanium, +/obj/item/valentine, +/obj/machinery/light/small/directional/west, +/obj/item/trash/ready_donk, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng/disp) +"ea" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/virology/glass{ + name = "Virological Lab" + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"eb" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med) +"ec" = ( +/obj/machinery/computer/terminal/derelict/security{ + dir = 4 + }, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo/obs) +"ed" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/med) +"ee" = ( +/obj/machinery/computer/security/hos{ + name = "Local station camera console"; + dir = 8; + network = list("ss13","labor","mine","auxbase") + }, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo/obs) +"ef" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 8 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/obs) +"eg" = ( +/obj/machinery/door/airlock/mining{ + name = "Shaft Miner Dormitory Delta" + }, +/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/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"eh" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/cargo) +"ei" = ( +/obj/structure/punching_bag, +/obj/effect/turf_decal/siding/dark/end, +/turf/open/floor/eighties, +/area/ruin/interdyne_planetary_base/cargo) +"ej" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 10; + faction = list("Syndicate","neutral") + }, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base) +"ek" = ( +/obj/effect/turf_decal/box/white, +/obj/item/toy/figure/prisoner{ + layer = 2.9 + }, +/obj/structure/ore_box, +/turf/open/floor/iron/smooth_edge{ + dir = 8 + }, +/area/ruin/interdyne_planetary_base/cargo/ware) +"el" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "interdynemedhall" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/med) +"em" = ( +/obj/structure/table, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo/obs) +"en" = ( +/obj/machinery/computer/security/hos{ + name = "\improper Interdyne camera console"; + dir = 8; + network = list("intd13"); + icon_screen = "syndishuttle" + }, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo/obs) +"eo" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"ep" = ( +/mob/living/carbon/human/species/monkey{ + faction = list("neutral","Syndicate"); + ai_controller = null + }, +/obj/structure/bed/pod, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"eq" = ( +/mob/living/carbon/human/species/monkey{ + faction = list("neutral","Syndicate"); + ai_controller = null + }, +/obj/machinery/light/directional/north, +/obj/structure/bed/pod, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"er" = ( +/turf/closed/wall/r_wall/syndicate{ + fixed_underlay = list(icon='icons/turf/floors.dmi', icon_state="textured_dark_large") + }, +/area/ruin/interdyne_planetary_base/cargo) +"es" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/item/fakeartefact{ + possible = list(/obj/item/gun/energy/recharge/kinetic_accelerator,/obj/item/gun/energy/plasmacutter,/obj/item/gun/energy/plasmacutter/adv,/obj/item/kinetic_crusher,/obj/item/kinetic_crusher/compact,/obj/item/pickaxe/drill,/obj/item/pickaxe/drill/diamonddrill,/obj/item/resonator,/obj/item/resonator/upgraded) + }, +/obj/structure/table/bronze, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"et" = ( +/obj/structure/displaycase{ + desc = "A display case containing an expensive forgery, probably."; + alert = 0; + req_access = list("syndicate"); + start_showpiece_type = /obj/item/fakeartefact + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"eu" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/ware) +"ev" = ( +/obj/structure/closet/crate, +/obj/item/storage/bag/trash, +/obj/item/mop, +/obj/item/reagent_containers/cup/bucket, +/obj/item/soap/syndie, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 10 + }, +/obj/item/reagent_containers/cup/rag{ + pixel_x = -4; + pixel_y = 3 + }, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/box/white, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/ware) +"ew" = ( +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_red/half, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"ex" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo/obs) +"ey" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/obs) +"ez" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/obs) +"eA" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/obj/machinery/airalarm/directional/south{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/obs) +"eB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"eC" = ( +/obj/effect/turf_decal/siding/thinplating/corner{ + dir = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/obs) +"eD" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"eE" = ( +/obj/machinery/door/window/survival_pod{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"eF" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"eG" = ( +/obj/machinery/cryo_cell, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"eH" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/portable_atmospherics/canister/anesthetic_mix, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"eI" = ( +/obj/structure/table/reinforced, +/obj/item/storage/backpack/duffelbag/syndie/surgery, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"eJ" = ( +/obj/structure/table/optable, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"eK" = ( +/obj/machinery/computer/operating, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"eL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/button/door/directional/north{ + name = "window security button"; + pixel_x = -24; + id = "interdynemedhall"; + req_access = list("syndicate") + }, +/turf/open/floor/catwalk_floor/flat_white, +/area/ruin/interdyne_planetary_base/med) +"eM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/flat_white, +/area/ruin/interdyne_planetary_base/med) +"eN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/button/door/directional/north{ + name = "window security button"; + pixel_x = 24; + id = "interdynemedhall"; + req_access = list("syndicate") + }, +/turf/open/floor/catwalk_floor/flat_white, +/area/ruin/interdyne_planetary_base/med) +"eO" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Medical Wing"; + req_access = list("syndicate") + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-medbay" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4; + layer = 2.52 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/catwalk_floor/flat_white, +/area/ruin/interdyne_planetary_base/med) +"eP" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"eQ" = ( +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"eR" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Bay" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-cargo" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/cargo) +"eS" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Bay" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-cargo" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/cargo) +"eT" = ( +/obj/machinery/camera/autoname/directional/east{ + pixel_x = -32; + pixel_y = -10; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo) +"eU" = ( +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"eV" = ( +/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/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"eW" = ( +/obj/machinery/door/firedoor, +/obj/machinery/duct, +/obj/machinery/light/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"eX" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"eY" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"eZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"fc" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/science) +"fd" = ( +/obj/effect/turf_decal/vg_decals/department/cargo, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"fe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1; + layer = 2.52 + }, +/turf/open/floor/catwalk_floor/flat_white, +/area/ruin/interdyne_planetary_base/med) +"ff" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Medical Wing"; + req_access = list("syndicate") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1; + layer = 2.52 + }, +/turf/open/floor/catwalk_floor/flat_white, +/area/ruin/interdyne_planetary_base/med) +"fg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1; + layer = 2.52 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1; + layer = 2.52 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fi" = ( +/obj/structure/fans/tiny, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance/external, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"fj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"fk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/machinery/airalarm/directional/west{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fn" = ( +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fo" = ( +/obj/machinery/iv_drip, +/obj/machinery/defibrillator_mount/loaded{ + pixel_x = 28; + req_one_access = null + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fp" = ( +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fq" = ( +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fr" = ( +/obj/machinery/door/airlock/maintenance/external, +/obj/structure/fans/tiny, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"fs" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/med) +"ft" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"fu" = ( +/obj/machinery/cell_charger_multi, +/obj/item/stock_parts/cell/bluespace, +/obj/machinery/airalarm/directional/west{ + req_access = list("syndicate") + }, +/obj/structure/table/glass/plasmaglass, +/obj/structure/sign/poster/official/periodic_table/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"fv" = ( +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"fw" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"fx" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/main) +"fy" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo/ware) +"fz" = ( +/obj/machinery/door/poddoor{ + id = "interdynescience" + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/science) +"fB" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"fC" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fE" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fG" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/machinery/sleeper/syndie/fullupgrade{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/obj/structure/sign/warning/biohazard/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fH" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fI" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fJ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fK" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/item/storage/backpack/duffelbag/synth_treatment_kit/trauma/advanced, +/obj/structure/railing/corner/end, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fL" = ( +/obj/structure/tank_holder/anesthetic, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/structure/railing{ + dir = 10 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fM" = ( +/obj/machinery/smartfridge/organ, +/obj/structure/railing, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fN" = ( +/obj/machinery/door/poddoor{ + id = "interdynemedbay" + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/med) +"fO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/flat_white, +/area/ruin/interdyne_planetary_base/med) +"fP" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Medical Wing"; + req_access = list("syndicate") + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-medbay" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/catwalk_floor/flat_white, +/area/ruin/interdyne_planetary_base/med) +"fQ" = ( +/obj/structure/railing{ + dir = 9 + }, +/obj/structure/lattice/catwalk, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/ruin/interdyne_planetary_base/main) +"fR" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/ruin/interdyne_planetary_base/main) +"fS" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/obj/structure/sign/warning/biohazard/directional/east{ + pixel_y = 32 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/ruin/interdyne_planetary_base/main) +"fT" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"fU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/south{ + dir = 1 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"fV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/south{ + req_access = list("syndicate") + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"fW" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fX" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"fY" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"fZ" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"ga" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"gb" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"gc" = ( +/obj/structure/cable, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"gd" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"ge" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Medical Wing"; + req_access = list("syndicate") + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/flat_white, +/area/ruin/interdyne_planetary_base/med) +"gf" = ( +/obj/structure/sign/warning/chem_diamond/directional/south, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gh" = ( +/obj/machinery/firealarm/directional/north{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gi" = ( +/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/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/north{ + dir = 1 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"gk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gm" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/obj/machinery/fax{ + dir = 1; + fax_name = "Interdyne Pharmaceuticals"; + name = "Interdyne Fax Machine"; + req_access = list("syndicate"); + syndicate_network = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gn" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/item/folder/white, +/obj/item/pen{ + pixel_y = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"go" = ( +/obj/structure/sign/poster/contraband/interdyne_gene_clinics/directional/north, +/obj/structure/chair/sofa/bench/color/interdyne/icemoon_blue/right, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gp" = ( +/obj/structure/sign/poster/official/moth_epi/directional/north, +/obj/structure/chair/sofa/bench/color/interdyne/icemoon_blue/left, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gq" = ( +/obj/structure/reagent_dispensers/water_cooler/directional/north, +/obj/machinery/airalarm/directional/east{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gr" = ( +/obj/machinery/door/poddoor{ + id = "interdynesciencehall" + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/science) +"gs" = ( +/obj/machinery/medical_kiosk, +/obj/structure/sign/warning/biohazard/directional/north, +/obj/machinery/airalarm/directional/west{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gt" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/machinery/sleeper/syndie/fullupgrade{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gu" = ( +/obj/structure/frame/computer{ + dir = 4; + anchored = 1 + }, +/turf/open/floor/vault/alien{ + name = "floor" + }, +/area/ruin/interdyne_planetary_base/science) +"gv" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gw" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/item/clothing/neck/stethoscope, +/obj/item/healthanalyzer, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gx" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med/pharm) +"gy" = ( +/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/syndicate/general, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical{ + name = "Pharmacy" + }, +/obj/effect/turf_decal/siding/dark/corner, +/obj/effect/turf_decal/stripes/white/corner, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"gz" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/med/pharm) +"gA" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/window/survival_pod{ + dir = 1 + }, +/obj/machinery/door/window/survival_pod{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"gB" = ( +/obj/machinery/smartfridge/chemistry/preloaded{ + initial_contents = list(/obj/item/reagent_containers/pill/epinephrine=12, /obj/item/reagent_containers/pill/multiver=5, /obj/item/reagent_containers/cup/bottle/epinephrine=1, /obj/item/reagent_containers/cup/bottle/multiver=1, /obj/item/storage/pill_bottle/sansufentanyl=10, /obj/item/storage/pill_bottle/mannitol=1) + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"gC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gD" = ( +/obj/machinery/limbgrower, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gE" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/cup/beaker/cryoxadone, +/obj/item/reagent_containers/cup/beaker/cryoxadone, +/obj/item/reagent_containers/cup/beaker/cryoxadone, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gF" = ( +/obj/item/disk/design_disk/limbs/ethereal{ + pixel_y = 2 + }, +/obj/item/disk/design_disk/limbs/felinid{ + pixel_y = 4 + }, +/obj/item/disk/design_disk/limbs/lizard{ + pixel_y = 6 + }, +/obj/item/disk/design_disk/limbs/plasmaman{ + pixel_y = 8 + }, +/obj/structure/table/reinforced, +/obj/item/disk/surgery/forgottenship{ + pixel_y = 10 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gG" = ( +/obj/structure/frame/machine{ + icon_state = "box_1"; + state = 2; + anchored = 1 + }, +/turf/open/floor/vault/alien{ + name = "floor" + }, +/area/ruin/interdyne_planetary_base/science) +"gH" = ( +/obj/machinery/stasis{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gI" = ( +/obj/item/storage/box/stockparts/deluxe{ + pixel_x = -6; + pixel_y = 11 + }, +/obj/item/storage/box/stockparts/deluxe{ + pixel_x = 8; + pixel_y = 5 + }, +/obj/item/mmi/posibrain/syndie/interdyne, +/obj/item/storage/box/beakers/bluespace, +/obj/structure/table/glass/plasmaglass, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"gJ" = ( +/obj/machinery/door/airlock/research{ + name = "Science Wing" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-science" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/science) +"gK" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/science) +"gL" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"gM" = ( +/obj/machinery/firealarm/directional/east{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"gO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/toy/cards/deck/wizoff{ + pixel_y = 6 + }, +/obj/structure/table, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"gP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/chair/plastic{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"gR" = ( +/obj/machinery/firealarm/directional/west{ + dir = 4 + }, +/obj/machinery/vending/medical/syndicate_access{ + onstation = 0; + contraband = list(/obj/item/storage/box/gum/happiness=3, /obj/item/storage/box/hug/medical=3, /obj/item/mmi/syndie/interdyne=3); + extended_inventory = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gS" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gT" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gU" = ( +/obj/structure/filingcabinet{ + dir = 4; + layer = 3.01; + pixel_x = 11; + pixel_y = 16 + }, +/obj/machinery/computer/crew/syndie{ + dir = 8; + pixel_x = -6; + pixel_y = 16; + layer = 3.01 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gV" = ( +/obj/machinery/stasis{ + dir = 8 + }, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"gX" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"gY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"gZ" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"ha" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med/morgue) +"hb" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/main/vault) +"hc" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"hd" = ( +/obj/item/circuitboard/machine/ore_silo, +/obj/structure/frame/machine{ + icon_state = "box_1"; + state = 2; + anchored = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/vault) +"he" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"hf" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"hh" = ( +/obj/machinery/turretid{ + name = "Base turret controls"; + desc = "Used to control the base's automated defenses."; + icon_state = "control_kill"; + dir = 1; + pixel_y = 30; + req_access = list("syndicate"); + lethal = 1; + control_area = "/area/ruin/interdyne_planetary_base"; + ailock = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/vault) +"hi" = ( +/obj/structure/filingcabinet, +/obj/machinery/blackbox_recorder, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/vault) +"hj" = ( +/obj/item/pipe_dispenser, +/obj/item/construction/rcd, +/obj/item/t_scanner, +/obj/structure/closet/crate/secure/engineering, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"hk" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/science) +"hm" = ( +/obj/item/storage/box/rndboards{ + pixel_y = 4 + }, +/obj/structure/table/glass/plasmaglass, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"hn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"ho" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 6; + faction = list("Syndicate","neutral") + }, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base) +"hp" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"hq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/table, +/obj/item/toy/cards/deck/cas{ + pixel_y = 6 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"hs" = ( +/obj/machinery/vending/drugs{ + name = "\improper SyndiDrug Plus"; + onstation = 0; + extended_inventory = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"ht" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/airalarm/directional/south{ + req_access = list("syndicate") + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"hu" = ( +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"hv" = ( +/obj/machinery/door/airlock/medical{ + name = "Medical Desk" + }, +/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/syndicate/general, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"hw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"hx" = ( +/obj/machinery/vending/syndichem{ + onstation = 0 + }, +/obj/machinery/light_switch/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/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"hy" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"hz" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"hA" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/obj/machinery/light/directional/west, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"hB" = ( +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"hC" = ( +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"hD" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/vg_decals/department/sci{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"hE" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/frame/machine{ + icon_state = "box_1"; + state = 2; + anchored = 1 + }, +/obj/item/circuitboard/machine/ammo_workbench, +/obj/item/disk/ammo_workbench/advanced, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/vault) +"hF" = ( +/obj/machinery/syndicatebomb/self_destruct{ + anchored = 1 + }, +/obj/effect/turf_decal/stripes/red/box, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/vault) +"hG" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/machinery/light/directional/east, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"hI" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/suit_storage_unit/syndicate/chameleon, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/vault) +"hJ" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/vg_decals/department/med{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"hK" = ( +/obj/item/stack/cable_coil, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"hL" = ( +/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_large, +/area/ruin/interdyne_planetary_base/science) +"hM" = ( +/obj/item/gun/ballistic/rifle/sniper_rifle/syndicate, +/obj/structure/rack/gunrack, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/vault) +"hN" = ( +/obj/structure/plaque/static_plaque/golden/commission/interdyne_planetary_base/icemoon, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/vault) +"hO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/chair/plastic{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/machinery/light/small/dim/directional/west, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"hP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"hQ" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"hR" = ( +/obj/structure/safe{ + dir = 4 + }, +/obj/item/storage/box/syndie_kit/chameleon/ghostcafe{ + name = "chameleon kit"; + desc = "It's a box, for storing things." + }, +/obj/item/disk/ammo_workbench/advanced, +/obj/item/suppressor, +/obj/item/toy/redbutton, +/obj/item/folder/syndicate/mining, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/vault) +"hS" = ( +/obj/machinery/autolathe/hacked, +/turf/open/floor/vault/alien{ + name = "floor" + }, +/area/ruin/interdyne_planetary_base/science) +"hT" = ( +/obj/machinery/button/door/directional/west{ + name = "window security button"; + id = "interdynescience"; + req_access = list("syndicate") + }, +/obj/machinery/skill_station/plasmaglass, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"hU" = ( +/obj/machinery/door/airlock/research{ + name = "Science Wing" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-science" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/science) +"hV" = ( +/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/south{ + name = "window security button"; + pixel_x = -24; + pixel_w = 0; + id = "interdynesciencehall"; + req_access = list("syndicate") + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/science) +"hW" = ( +/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/ruin/interdyne_planetary_base/science) +"hX" = ( +/obj/structure/curtain/cloth/prison{ + name = "privacy curtains"; + color = "#FFFFFF" + }, +/obj/structure/drain, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/siding/dark/end{ + dir = 1 + }, +/obj/machinery/shower/directional/west{ + desc = "A borrowed Nanotrasen Hygiene Division HS-452. It's one of the older 2550's series. A small sticker on the side insists it \"observes 2560 lead compliance!\"; passively replenishes itself with water when not in use." + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"hY" = ( +/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/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"hZ" = ( +/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/ruin/interdyne_planetary_base/main) +"ia" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"ib" = ( +/obj/item/storage/toolbox/syndicate, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"ic" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + 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/textured_large, +/area/ruin/interdyne_planetary_base/science) +"id" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/west{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"ie" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"if" = ( +/obj/machinery/firealarm/directional/east{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"ig" = ( +/obj/machinery/door/airlock/research{ + name = "Xenobiological Lab" + }, +/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/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"ih" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"ii" = ( +/obj/structure/disposalpipe/junction/flip, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"ik" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/maintenance/external, +/obj/structure/fans/tiny, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"il" = ( +/obj/machinery/chem_dispenser/fullupgrade, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"im" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"in" = ( +/obj/structure/table/glass, +/obj/machinery/reagentgrinder{ + pixel_x = 5 + }, +/obj/item/storage/box/beakers/bluespace{ + pixel_x = -5; + pixel_y = 3 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"io" = ( +/obj/machinery/door/airlock/grunge{ + name = "Morgue" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/morgue) +"ip" = ( +/obj/machinery/smartfridge/extract/preloaded, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"iq" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"ir" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/structure/sign/clock/directional/north{ + pixel_y = 26 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"is" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/sign/poster/contraband/syndicate_medical/directional/east, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"it" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo/obs) +"iu" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/science/xeno) +"iv" = ( +/obj/machinery/door/window/survival_pod{ + dir = 4; + req_access = list("syndicate") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"iw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"ix" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"iy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/north{ + req_access = list("syndicate") + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"iz" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ + name = "euthanization chamber freezer"; + dir = 4; + initialize_directions = 4 + }, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"iA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"iB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"iC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/chair/plastic{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"iD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/firealarm/directional/north{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"iE" = ( +/obj/machinery/button/door{ + name = "vault bolt control button"; + pixel_x = -8; + pixel_y = 24; + id = "syndie_lavaland_vault"; + req_access = list("syndicate"); + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"iF" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/vg_decals/department/bar{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"iG" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"iH" = ( +/obj/machinery/chem_heater/withbuffer, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"iI" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"iJ" = ( +/obj/machinery/chem_master, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"iK" = ( +/obj/structure/bodycontainer/morgue, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/morgue) +"iL" = ( +/obj/machinery/light/directional/north, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/vault/alien{ + name = "floor" + }, +/area/ruin/interdyne_planetary_base/science/xeno) +"iM" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + name = "server vent"; + dir = 8; + pressure_checks = 0; + external_pressure_bound = 140 + }, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/vault/alien{ + name = "floor" + }, +/area/ruin/interdyne_planetary_base/science/xeno) +"iN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/morgue) +"iO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"iP" = ( +/obj/structure/table/optable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/morgue) +"iQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"iR" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"iS" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/ruin/interdyne_planetary_base/main) +"iT" = ( +/obj/machinery/processor/slime, +/obj/structure/sign/xenobio_guide/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"iU" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"iV" = ( +/obj/machinery/computer/camera_advanced/xenobio{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"iW" = ( +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"iX" = ( +/obj/machinery/portable_atmospherics/canister/bz, +/obj/machinery/atmospherics/components/unary/portables_connector, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"iY" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + name = "server vent"; + dir = 1; + external_pressure_bound = 120 + }, +/turf/open/floor/vault/alien{ + name = "floor" + }, +/area/ruin/interdyne_planetary_base/science/xeno) +"iZ" = ( +/obj/machinery/door/window/survival_pod{ + name = "Slime Euthanization Chamber"; + req_access = list("syndicate") + }, +/turf/open/floor/vault/alien{ + name = "floor" + }, +/area/ruin/interdyne_planetary_base/science/xeno) +"ja" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"jb" = ( +/obj/structure/disposalpipe/junction/yjunction{ + dir = 2 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"jc" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"jd" = ( +/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/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"je" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"jf" = ( +/obj/machinery/airalarm/directional/south{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"jg" = ( +/obj/machinery/chem_mass_spec, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"jh" = ( +/obj/structure/bodycontainer/morgue, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/morgue) +"ji" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/blood/gibs/old, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/morgue) +"jj" = ( +/obj/structure/table/glass, +/obj/item/clothing/glasses/science, +/obj/machinery/firealarm/directional/west{ + dir = 4 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 15 + }, +/obj/item/reagent_containers/dropper, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"jk" = ( +/obj/item/storage/box/syringes{ + pixel_x = 5; + pixel_y = 10 + }, +/obj/item/storage/bag/xeno, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/table/glass/plasmaglass, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"jl" = ( +/obj/item/storage/box/monkeycubes/syndicate{ + pixel_y = 5 + }, +/obj/item/storage/box/monkeycubes/syndicate{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/slime_extract/grey{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/slime_extract/grey, +/obj/item/slime_extract/grey{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/table/glass/plasmaglass, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"jm" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jn" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "interdynelibrary" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jo" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Service Wing" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-service" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"jp" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/serv) +"jq" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/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/public/glass{ + name = "Service Wing" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-service" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"jr" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"js" = ( +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo) +"jt" = ( +/obj/machinery/camera/xray{ + dir = 8; + network = list("fsci"); + c_tag = "Xenobio West" + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_red, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"ju" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_red{ + dir = 8 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"jv" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/med/pharm) +"jw" = ( +/obj/structure/fans/tiny, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/maintenance/external, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"jx" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_red, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"jy" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/effect/turf_decal/tile/dark_red, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"jz" = ( +/obj/machinery/camera/xray{ + dir = 4; + network = list("fsci"); + c_tag = "Xenobio East" + }, +/obj/effect/turf_decal/tile/dark_red{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"jA" = ( +/obj/item/book/random{ + pixel_y = 3 + }, +/obj/item/book/random{ + pixel_y = 3 + }, +/obj/item/book/random{ + pixel_y = 3 + }, +/obj/structure/bookcase/random/nonfiction, +/obj/structure/sign/painting/library{ + pixel_x = -32 + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jB" = ( +/obj/machinery/reagentgrinder{ + pixel_y = 6 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/table/glass/plasmaglass, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"jC" = ( +/obj/machinery/monkey_recycler, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"jD" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/ruin/interdyne_planetary_base/main) +"jE" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/med/morgue) +"jG" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing, +/obj/machinery/camera/autoname/directional/east{ + pixel_y = -20; + network = list("intd13") + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/ruin/interdyne_planetary_base/main) +"jH" = ( +/obj/structure/chair/comfy{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/carpet/royalblue, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jI" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/royalblue, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jJ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/fireplace, +/turf/open/floor/carpet/royalblue, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jK" = ( +/obj/structure/chair/sofa/right{ + dir = 8 + }, +/obj/machinery/button/door/directional/north{ + name = "window security button"; + pixel_x = -4; + id = "interdynelibrary" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/carpet/royalblue, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jL" = ( +/obj/machinery/photocopier, +/obj/structure/sign/flag/interdyne/directional/north{ + pixel_x = -13 + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jM" = ( +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/sign/flag/interdyne/directional/east, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"jN" = ( +/obj/structure/sign/painting/library{ + pixel_x = 32 + }, +/obj/machinery/modular_computer/preset/curator{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jO" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"jP" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"jQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"jR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"jS" = ( +/obj/machinery/atmospherics/components/binary/volume_pump{ + name = "BZ Pump"; + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/science/xeno) +"jT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/machinery/light/small/directional/east, +/obj/structure/towel_bin, +/obj/structure/table{ + layer = 2.79 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"jU" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/tile/dark_red{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"jV" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/effect/turf_decal/tile/dark_red{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"jW" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jX" = ( +/obj/structure/fans/tiny, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/machinery/door/window/survival_pod{ + name = "Slime Pacification Chamber"; + req_access = list("syndicate") + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/science/xeno) +"jY" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/eng) +"jZ" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock{ + name = "Unisex Restrooms" + }, +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"ka" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/effect/turf_decal/tile/dark_red{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"kb" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + layer = 3.21 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/tile/dark_red{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"kc" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"kd" = ( +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 8 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"ke" = ( +/obj/item/book/random{ + pixel_y = 3 + }, +/obj/item/book/random{ + pixel_y = 3 + }, +/obj/item/book/random{ + pixel_y = 3 + }, +/obj/structure/bookcase/random/reference, +/obj/machinery/light/directional/west{ + pixel_y = -16 + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kf" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/carpet/royalblue, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kg" = ( +/obj/structure/chair/sofa/left{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/royalblue, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kh" = ( +/obj/structure/chair/sofa/middle{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/royalblue, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"ki" = ( +/obj/structure/chair/sofa/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/carpet/royalblue, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kj" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/eng/disp) +"kk" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/eng/disp) +"kl" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/airalarm/directional/south{ + req_access = list("syndicate") + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/morgue) +"km" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/morgue) +"kn" = ( +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv) +"ko" = ( +/obj/machinery/libraryscanner, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kp" = ( +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kq" = ( +/obj/machinery/bookbinder, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kr" = ( +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"ks" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/dryer{ + pixel_y = 32; + pixel_x = -6 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"kt" = ( +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv) +"ku" = ( +/obj/structure/sink/directional/east, +/obj/structure/mirror/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"kv" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/effect/turf_decal/tile/dark_red, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"kw" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + layer = 3.21 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/effect/turf_decal/tile/dark_red{ + dir = 8 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"kx" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + layer = 3.21 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/effect/turf_decal/tile/dark_red, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"ky" = ( +/obj/item/book/random{ + pixel_y = 3 + }, +/obj/item/book/random{ + pixel_y = 3 + }, +/obj/item/book/random{ + pixel_y = 3 + }, +/obj/structure/bookcase/random/reference, +/obj/structure/sign/painting/library{ + pixel_x = -32 + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kz" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kA" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"kB" = ( +/obj/structure/toilet{ + dir = 8; + pixel_z = 8 + }, +/obj/structure/curtain/cloth/prison{ + name = "privacy curtains"; + color = "#FFFFFF" + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"kC" = ( +/obj/machinery/conveyor{ + dir = 5; + id = "interdynedisp" + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/stamp/chameleon/broken, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng/disp) +"kD" = ( +/obj/structure/frame/machine{ + icon_state = "box_1"; + state = 2; + anchored = 1 + }, +/obj/item/circuitboard/machine/recycler, +/obj/machinery/conveyor{ + dir = 4; + id = "interdynedisp" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng/disp) +"kE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/conveyor{ + dir = 6; + id = "interdynedisp" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng/disp) +"kF" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"kH" = ( +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark_red/half, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv) +"kI" = ( +/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/south{ + name = "window security button"; + pixel_x = 24; + pixel_w = 0; + id = "interdynesciencehall"; + req_access = list("syndicate") + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/science) +"kJ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9; + layer = 2.5 + }, +/turf/open/floor/glass/reinforced, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kK" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5; + layer = 2.5 + }, +/obj/structure/table/wood, +/obj/item/toy/cards/deck/cas{ + pixel_y = 6 + }, +/obj/machinery/light/directional/east{ + pixel_y = 16 + }, +/turf/open/floor/glass/reinforced, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kL" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/obj/machinery/light_switch/directional/west, +/obj/item/kirbyplants/synthetic/plant27{ + pixel_x = 12; + pixel_y = 5 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"kM" = ( +/obj/structure/toilet{ + dir = 8; + pixel_z = 8 + }, +/obj/structure/curtain/cloth/prison{ + name = "privacy curtains"; + color = "#FFFFFF" + }, +/obj/effect/turf_decal/siding/dark/end, +/turf/open/floor/iron/showroomfloor, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"kN" = ( +/obj/effect/turf_decal/tile/dark_red{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"kO" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/dark_red{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"kP" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/effect/turf_decal/tile/dark_red{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"kQ" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/effect/turf_decal/tile/dark_red{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"kR" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/dark_red{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"kS" = ( +/obj/effect/turf_decal/tile/dark_red{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"kT" = ( +/obj/item/book/random{ + pixel_y = 3 + }, +/obj/structure/bookcase/random/religion, +/obj/item/book/random{ + pixel_y = 3 + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kU" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_nineteen, +/obj/structure/easel, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kW" = ( +/obj/structure/table/glass/plasmaglass, +/obj/item/skillchip/wine_taster, +/obj/item/skillchip/job/roboticist, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"kX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/frame/machine{ + icon_state = "box_1"; + state = 2; + anchored = 1 + }, +/obj/item/circuitboard/machine/stacking_machine, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng/disp) +"kY" = ( +/obj/structure/table/wood, +/obj/item/toy/crayon/spraycan{ + pixel_x = 4; + pixel_y = 9 + }, +/obj/item/toy/crayon/spraycan{ + pixel_x = -5; + pixel_y = 9 + }, +/obj/item/choice_beacon/music, +/obj/item/choice_beacon/music, +/obj/item/choice_beacon/music, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/airalarm/directional/south{ + req_access = list("syndicate") + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/conveyor{ + id = "interdynedisp" + }, +/obj/structure/plasticflaps, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng/disp) +"la" = ( +/obj/machinery/door/airlock/engineering{ + name = "Engineering" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/firedoor/heavy, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng) +"lb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng) +"lc" = ( +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"ld" = ( +/obj/structure/closet/crate/hydroponics, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"le" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/conveyor_switch/oneway{ + name = "disposal conveyor"; + dir = 8; + id = "interdynedisp" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng/disp) +"lf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/ash/large, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng/disp) +"lg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"lh" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 10; + layer = 2.5 + }, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/glass/reinforced, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"li" = ( +/obj/machinery/computer/libraryconsole/bookmanagement{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 6; + layer = 2.5 + }, +/obj/structure/sign/painting/large/library{ + dir = 4 + }, +/turf/open/floor/glass/reinforced, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"lj" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/maintenance/external, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"lk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/sign/poster/contraband/jumbo_bar/directional/east, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"ll" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock{ + name = "Library" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"lm" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock{ + name = "Unisex Restrooms" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"ln" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 10; + faction = list("Syndicate","neutral") + }, +/turf/closed/wall/r_wall/syndicate{ + fixed_underlay = list(icon='icons/turf/snow.dmi', icon_state="snow") + }, +/area/ruin/interdyne_planetary_base) +"lo" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 6; + faction = list("Syndicate","neutral") + }, +/turf/closed/wall/r_wall/syndicate{ + fixed_underlay = list(icon='icons/turf/snow.dmi', icon_state="snow") + }, +/area/ruin/interdyne_planetary_base) +"lp" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/hydr) +"lq" = ( +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"lr" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/maintenance/external, +/obj/structure/fans/tiny, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv) +"ls" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/trashcart/filled, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng/disp) +"lt" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv) +"lu" = ( +/obj/machinery/door/poddoor{ + id = "interdyneservicehall" + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/serv) +"lv" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/main/dorms) +"lw" = ( +/obj/item/bedsheet/dorms{ + dir = 4 + }, +/obj/structure/bed{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"lx" = ( +/obj/structure/dresser, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"ly" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/poster/contraband/cybersun_six_hundred/directional/west, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"lz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"lA" = ( +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"lB" = ( +/obj/machinery/power/rtg/advanced, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/bot/right, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"lC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/machinery/light/small/dim/directional/east, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"lD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"lE" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/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/public/glass{ + name = "Service Wing" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"lF" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/bar) +"lG" = ( +/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 = 9 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lH" = ( +/obj/structure/reagent_dispensers/water_cooler/directional/north{ + layer = 3.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/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/sign/poster/contraband/donut_corp/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/light/directional/north, +/obj/structure/sign/poster/contraband/donk_co/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lK" = ( +/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, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lL" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Service Wing" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/machinery/power/apc/auto_name/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/light/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/light/directional/north, +/obj/machinery/button/door/directional/north{ + name = "window security button"; + pixel_x = -4; + id = "interdyneservicehall" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4; + layer = 2.52 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/west{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/smooth_edge{ + dir = 4 + }, +/area/ruin/interdyne_planetary_base/main/dorms) +"lS" = ( +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/ice{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/smooth_edge{ + dir = 8 + }, +/area/ruin/interdyne_planetary_base/main/dorms) +"lT" = ( +/obj/machinery/power/rtg/advanced, +/obj/structure/cable, +/obj/effect/turf_decal/bot/left, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"lU" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"lV" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/main/dorms) +"lW" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"lX" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"lY" = ( +/obj/effect/decal/cleanable/glass/plastitanium, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lZ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"ma" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment, +/obj/machinery/light/directional/west, +/obj/machinery/airalarm/directional/west{ + req_access = list("syndicate") + }, +/obj/structure/closet/crate/secure/engineering, +/obj/item/storage/box/stockparts/deluxe, +/obj/item/circuitboard/machine/processor, +/obj/item/circuitboard/machine/gibber, +/obj/item/circuitboard/machine/deep_fryer, +/obj/item/circuitboard/machine/cell_charger, +/obj/item/circuitboard/machine/smoke_machine, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng) +"mb" = ( +/obj/structure/disposaloutlet{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng/disp) +"mc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng/disp) +"md" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/structure/sign/poster/official/there_is_no_gas_giant/directional/west, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"me" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/eng/disp) +"mf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4; + layer = 2.52 + }, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"mg" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv) +"mh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"mi" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/closet/secure_closet/personal/wall{ + icon_door = "locker_wall"; + pixel_x = 30 + }, +/obj/machinery/button/door/directional/north{ + pixel_x = 0; + id = "interdynecabin6"; + name = "door bolt control"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"mj" = ( +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"mk" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv) +"ml" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Service Wing" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"mm" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"mn" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"mo" = ( +/obj/structure/disposalpipe/junction/flip{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"mp" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Service Wing" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"mq" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"mr" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/firealarm/directional/south{ + dir = 1 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"ms" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/airalarm/directional/south{ + req_access = list("syndicate") + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"mt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"mu" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4; + layer = 2.52 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"mv" = ( +/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/syndicate/general, +/obj/machinery/door/airlock, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"mw" = ( +/obj/machinery/door/airlock{ + name = "Cabin 3"; + id_tag = "interdynecabin3" + }, +/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/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"mx" = ( +/obj/machinery/door/airlock{ + name = "Cabin 2"; + id_tag = "interdynecabin2" + }, +/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/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"my" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/white/line{ + layer = 2.52 + }, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng) +"mz" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/white/line{ + layer = 2.52 + }, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/structure/closet/crate/radiation, +/obj/item/clothing/suit/utility/radiation, +/obj/item/clothing/head/utility/radiation, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng) +"mA" = ( +/obj/machinery/door/airlock{ + name = "Disposal Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng/disp) +"mB" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng/disp) +"mC" = ( +/obj/machinery/door/airlock{ + name = "Cabin 1"; + id_tag = "interdynecabin1" + }, +/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/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"mE" = ( +/obj/structure/chair/sofa/bench/color/interdyne/icemoon_blue/right, +/turf/open/floor/iron/dark/textured_corner, +/area/ruin/interdyne_planetary_base/serv) +"mF" = ( +/obj/structure/chair/sofa/bench/color/interdyne/icemoon_blue/left, +/turf/open/floor/iron/dark/small, +/area/ruin/interdyne_planetary_base/serv) +"mH" = ( +/obj/structure/table{ + layer = 2.79 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/interdyne_planetary_base/serv) +"mI" = ( +/obj/machinery/light/directional/east, +/obj/structure/table{ + layer = 2.79 + }, +/turf/open/floor/iron/dark/textured_corner{ + dir = 8 + }, +/area/ruin/interdyne_planetary_base/serv) +"mJ" = ( +/obj/structure/chair/plastic{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"mK" = ( +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo/obs) +"mL" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"mM" = ( +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med/viro) +"mN" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/serv/hydr) +"mO" = ( +/obj/machinery/power/rtg/advanced, +/obj/machinery/power/terminal, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/bot/right, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"mP" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/hydr) +"mQ" = ( +/obj/machinery/door/poddoor{ + id = "interdynedorms" + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/main/dorms) +"mR" = ( +/obj/machinery/power/rtg/advanced, +/obj/structure/cable, +/obj/structure/sign/poster/contraband/syndiemoth/directional/east, +/obj/effect/turf_decal/bot/left, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"mS" = ( +/obj/machinery/camera/autoname/directional/east{ + pixel_x = -32; + pixel_y = 0; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo/deck) +"mT" = ( +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"mV" = ( +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/ruin/interdyne_planetary_base/serv) +"mW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/obj/effect/turf_decal/arrows/white{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng/disp) +"mX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/plumbed{ + name = "stationary very-high-capacity water tank"; + desc = "A stationary, plumbed, very-high-capacity water tank."; + dir = 8; + prevent_rcd_deconstruction = 1; + tank_volume = 5000 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng/disp) +"mY" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 1 + }, +/obj/machinery/firealarm/directional/west{ + dir = 4 + }, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng) +"mZ" = ( +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng) +"na" = ( +/obj/structure/table, +/obj/item/serviette_pack, +/turf/open/floor/iron/dark/small, +/area/ruin/interdyne_planetary_base/serv) +"nb" = ( +/turf/open/floor/iron/dark/small, +/area/ruin/interdyne_planetary_base/serv) +"nc" = ( +/obj/structure/chair{ + dir = 1; + pixel_z = 8 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/interdyne_planetary_base/serv) +"nd" = ( +/obj/structure/chair{ + dir = 1; + pixel_z = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/interdyne_planetary_base/serv) +"ne" = ( +/obj/effect/turf_decal/siding/thinplating/dark/end{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters{ + id = "interdynekitchen" + }, +/turf/open/floor/iron/freezer, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"nf" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/iron/freezer, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"ng" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"nh" = ( +/obj/machinery/power/smes/magical{ + name = "bluespace-powered power storage unit"; + desc = "A high-capacity superconducting magnetic energy storage (SMES) unit. Produces power through an unstable bluespace pocket."; + output_level = 200000 + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/white/line{ + dir = 5 + }, +/obj/structure/railing{ + dir = 10 + }, +/obj/effect/turf_decal/bot/right, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"ni" = ( +/obj/effect/turf_decal/stripes/white/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 2 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"nj" = ( +/obj/structure/cable, +/obj/machinery/power/rtg/advanced, +/obj/effect/turf_decal/stripes/white/line, +/obj/machinery/light/directional/east, +/obj/structure/railing, +/obj/effect/turf_decal/bot/left, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"nk" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"nl" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"nm" = ( +/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/corner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"nn" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/window/survival_pod{ + dir = 1 + }, +/obj/machinery/door/window/survival_pod{ + req_access = list("syndicate") + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"no" = ( +/obj/machinery/door/airlock{ + name = "Cabin 5"; + id_tag = "interdynecabin5" + }, +/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/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"np" = ( +/obj/machinery/door/airlock{ + name = "Cabin 6"; + id_tag = "interdynecabin6" + }, +/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/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"nq" = ( +/obj/machinery/door/airlock{ + name = "Cabin 7"; + id_tag = "interdynecabin7" + }, +/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/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"nr" = ( +/obj/machinery/door/airlock{ + name = "Cabin 8"; + id_tag = "interdynecabin8" + }, +/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/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"ns" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/cryopod{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"nt" = ( +/obj/structure/chair/sofa/bench/color/interdyne/icemoon_blue/left{ + dir = 1; + pixel_z = 8 + }, +/turf/open/floor/iron/dark/textured_corner{ + dir = 4 + }, +/area/ruin/interdyne_planetary_base/serv) +"nu" = ( +/obj/structure/chair/sofa/bench/color/interdyne/icemoon_blue/right{ + dir = 1; + pixel_z = 8 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/interdyne_planetary_base/serv) +"nv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/binary/valve/digital/layer2, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng) +"nw" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/turf_decal/box/white, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng) +"nx" = ( +/obj/machinery/atmospherics/components/trinary/mixer/airmix/inverse{ + dir = 1 + }, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng) +"ny" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng) +"nz" = ( +/obj/structure/chair/stool/bar/directional/south, +/turf/open/floor/iron/dark/small, +/area/ruin/interdyne_planetary_base/serv) +"nA" = ( +/obj/structure/chair/stool/bar/directional/south{ + color = "" + }, +/turf/open/floor/iron/dark/small, +/area/ruin/interdyne_planetary_base/serv) +"nB" = ( +/obj/structure/chair/stool/bar/directional/south, +/turf/open/floor/iron/dark/textured_corner{ + dir = 1 + }, +/area/ruin/interdyne_planetary_base/serv) +"nC" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 10 + }, +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters{ + id = "interdynekitchen" + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/turf/open/floor/iron/freezer, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"nD" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/turf/open/floor/iron/freezer, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"nE" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/iron/freezer, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"nF" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/iron/freezer, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"nG" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/turf/open/floor/iron/freezer, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"nH" = ( +/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/syndicate/general, +/obj/machinery/door/airlock/hydroponics{ + name = "Hydroponics" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"nI" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"nJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"nK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/floor{ + pixel_x = -16 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"nL" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/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 = "Dormitories" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"nM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"nN" = ( +/obj/machinery/deepfryer, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"nO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/poster/ripped/directional/west, +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/machinery/computer/cryopod/interdyne/directional/west{ + req_one_access = list("syndicate") + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"nP" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/machinery/vending/clothing{ + onstation = 0; + extended_inventory = 1 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"nQ" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate{ + fixed_underlay = list(icon='icons/turf/snow.dmi', icon_state="snow") + }, +/area/ruin/interdyne_planetary_base/science) +"nR" = ( +/obj/machinery/door/firedoor, +/obj/structure/pinata/syndie{ + name = "syndicorgi pinata bar mascot"; + desc = "A papier-mâché representation of a corgi that contains all sorts of bombastic treats. He doesn't move much but we still love him!"; + layer = 3; + pixel_w = -8; + candy_options = list(/obj/item/food/bubblegum,/obj/item/food/candy,/obj/item/food/chocolatebar,/obj/item/food/gumball,/obj/item/food/lollipop) + }, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters{ + id = "interdynekitchen" + }, +/turf/open/floor/iron/white, +/area/ruin/interdyne_planetary_base/serv/bar) +"nS" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters{ + id = "interdynekitchen" + }, +/turf/open/floor/iron/white, +/area/ruin/interdyne_planetary_base/serv/bar) +"nT" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/reagent_containers/cup/rag{ + pixel_x = -4; + pixel_y = 3 + }, +/obj/machinery/door/poddoor/shutters{ + id = "interdynekitchen" + }, +/turf/open/floor/iron/white, +/area/ruin/interdyne_planetary_base/serv/bar) +"nU" = ( +/obj/machinery/door/poddoor/shutters{ + id = "interdynekitchen" + }, +/obj/structure/table/reinforced, +/turf/open/floor/iron/white, +/area/ruin/interdyne_planetary_base/serv/bar) +"nV" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/bar) +"nW" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/structure/sink/kitchen/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/freezer, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"nX" = ( +/obj/machinery/firealarm/directional/north, +/obj/machinery/oven/range, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"nY" = ( +/obj/machinery/griddle, +/obj/machinery/airalarm/directional/north{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"nZ" = ( +/obj/machinery/light/directional/north, +/obj/machinery/griddle, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"oa" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/freezer, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"ob" = ( +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_z = 6; + pixel_w = -3 + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"oc" = ( +/obj/machinery/vending/hydronutrients{ + onstation = 0; + extended_inventory = 1 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"od" = ( +/obj/machinery/smartfridge/food, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"oe" = ( +/obj/structure/closet/crate/hydroponics, +/obj/item/geneshears, +/obj/item/gun/energy/floragun, +/obj/item/plant_analyzer, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"of" = ( +/obj/machinery/seed_extractor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"og" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/airalarm/directional/west{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/smooth_edge{ + dir = 4 + }, +/area/ruin/interdyne_planetary_base/main/dorms) +"oh" = ( +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/washing_machine{ + pixel_x = -6; + pixel_y = 10; + layer = 2.91 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"oi" = ( +/obj/structure/cable, +/obj/machinery/vending/autodrobe{ + onstation = 0; + extended_inventory = 1 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"oj" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/machinery/firealarm/directional/west{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/ruin/interdyne_planetary_base/serv/bar) +"ok" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/interdyne_planetary_base/serv/bar) +"ol" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/ruin/interdyne_planetary_base/serv/bar) +"om" = ( +/obj/machinery/chem_dispenser/mutagensaltpeter, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"on" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/freezer, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"oo" = ( +/obj/machinery/vending/hydroseeds{ + onstation = 0; + extended_inventory = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"op" = ( +/obj/machinery/vending/dinnerware{ + onstation = 0; + extended_inventory = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"oq" = ( +/obj/structure/table/reinforced, +/obj/machinery/reagentgrinder, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"or" = ( +/obj/machinery/button/door{ + name = "shutters button"; + id = "interdynekitchen" + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"os" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"ot" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"ou" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"ov" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"ow" = ( +/obj/structure/table/reinforced, +/obj/item/kitchen/rollingpin, +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 6 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_y = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"ox" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/poster/contraband/blasto_detergent/directional/west, +/obj/structure/closet/crate/trashcart/laundry, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"oy" = ( +/obj/machinery/biogenerator, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"oz" = ( +/obj/structure/disposaloutlet{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/med/viro) +"oA" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/tile/bar{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/iron/white, +/area/ruin/interdyne_planetary_base/serv/bar) +"oB" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/iron/white, +/area/ruin/interdyne_planetary_base/serv/bar) +"oC" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/iron/white, +/area/ruin/interdyne_planetary_base/serv/bar) +"oD" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/iron/white, +/area/ruin/interdyne_planetary_base/serv/bar) +"oE" = ( +/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/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/iron/white, +/area/ruin/interdyne_planetary_base/serv/bar) +"oF" = ( +/obj/structure/table, +/obj/effect/turf_decal/stripes/line, +/obj/item/toy/tennis/red, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"oG" = ( +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/turf/open/floor/iron/freezer, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"oH" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + 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/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"oI" = ( +/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/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"oJ" = ( +/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/siding/thinplating/dark, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"oK" = ( +/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, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/freezer, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"oL" = ( +/obj/machinery/chem_master/condimaster, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"oM" = ( +/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/machinery/duct, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"oN" = ( +/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/machinery/duct, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"oO" = ( +/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/machinery/duct, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"oP" = ( +/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/siding/dark{ + dir = 6 + }, +/obj/structure/disposalpipe/junction/yjunction{ + dir = 1 + }, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"oQ" = ( +/obj/structure/rack, +/obj/item/cultivator, +/obj/item/shovel/spade, +/obj/item/hatchet, +/obj/item/secateurs, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"oR" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/main/dorms) +"oS" = ( +/obj/machinery/button/door/directional/west{ + name = "window security button"; + id = "interdynedorms"; + req_access = list("syndicate") + }, +/obj/structure/table/rolling, +/obj/structure/bedsheetbin, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"oT" = ( +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"oU" = ( +/obj/machinery/vending/dorms{ + onstation = 0; + extended_inventory = 0 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"oV" = ( +/obj/structure/sink/directional/west, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"oW" = ( +/obj/structure/table/reinforced, +/obj/item/book/manual/wiki/cooking_to_serve_man{ + pixel_y = 2 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"oX" = ( +/obj/structure/table/reinforced, +/obj/item/storage/bag/tray, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"oY" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/food_or_drink/donkpockets{ + pixel_x = 10; + pixel_y = 7 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = -7; + pixel_y = 5 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"oZ" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/survival_pod{ + dir = 4; + req_access = list("syndicate") + }, +/obj/machinery/door/window/survival_pod{ + dir = 8; + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"pa" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/bar) +"pb" = ( +/obj/structure/reagent_dispensers/watertank/high, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"pc" = ( +/obj/effect/turf_decal/tile/dark_red/half, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"pd" = ( +/obj/machinery/door/airlock/grunge{ + name = "Bar" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"pe" = ( +/obj/machinery/door/airlock/grunge{ + name = "Kitchen" + }, +/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/syndicate/general, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"pf" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"pg" = ( +/obj/structure/table, +/obj/item/storage/box/drinkingglasses{ + pixel_y = 10 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass{ + pixel_y = 8 + }, +/obj/machinery/airalarm/directional/south{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/bar) +"ph" = ( +/obj/structure/table, +/obj/machinery/chem_dispenser/drinks/fullupgrade{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/bar) +"pi" = ( +/turf/closed/wall/r_wall/syndicate{ + fixed_underlay = list(icon='icons/turf/snow.dmi', icon_state="snow") + }, +/area/ruin/interdyne_planetary_base/med) +"pj" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate{ + fixed_underlay = list(icon='icons/turf/snow.dmi', icon_state="snow") + }, +/area/ruin/interdyne_planetary_base/science/xeno) +"pk" = ( +/obj/structure/table, +/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/bar) +"pl" = ( +/obj/structure/closet/secure_closet/freezer/meat{ + anchored = 1; + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"pm" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate{ + fixed_underlay = list(icon='icons/turf/snow.dmi', icon_state="snow") + }, +/area/ruin/interdyne_planetary_base/eng) +"pn" = ( +/obj/structure/chair/plastic{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/machinery/light/small/dim/directional/east, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"pp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng) +"pq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/eng) +"pr" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/obj/machinery/portable_atmospherics/scrubber, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng) +"ps" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng) +"pt" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng) +"pu" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/obj/structure/closet/secure_closet/ds2atmos{ + anchored = 1; + anchorable = 0 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng) +"pv" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 1 + }, +/turf/open/floor/engine/o2, +/area/ruin/interdyne_planetary_base/eng) +"pw" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/turf/open/floor/engine/o2, +/area/ruin/interdyne_planetary_base/eng) +"px" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/turf/open/floor/engine/n2, +/area/ruin/interdyne_planetary_base/eng) +"py" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 1 + }, +/turf/open/floor/engine/n2, +/area/ruin/interdyne_planetary_base/eng) +"pz" = ( +/obj/machinery/atmospherics/miner/oxygen, +/turf/open/floor/engine/o2, +/area/ruin/interdyne_planetary_base/eng) +"pA" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/effect/turf_decal/vg_decals/atmos/oxygen{ + dir = 1 + }, +/turf/open/floor/engine/o2, +/area/ruin/interdyne_planetary_base/eng) +"pB" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/effect/turf_decal/vg_decals/atmos/nitrogen{ + dir = 1 + }, +/turf/open/floor/engine/n2, +/area/ruin/interdyne_planetary_base/eng) +"pC" = ( +/obj/machinery/atmospherics/miner/nitrogen, +/turf/open/floor/engine/n2, +/area/ruin/interdyne_planetary_base/eng) +"pD" = ( +/turf/closed/wall/r_wall/syndicate{ + fixed_underlay = list(icon='icons/turf/snow.dmi', icon_state="snow") + }, +/area/ruin/interdyne_planetary_base/eng/disp) +"pE" = ( +/obj/machinery/camera/autoname/directional/east{ + pixel_x = -32; + pixel_y = 0; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/science/xeno) +"pF" = ( +/obj/machinery/door/airlock/vault{ + id_tag = "syndie_lavaland_vault" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/vault) +"pG" = ( +/obj/effect/turf_decal/siding/thinplating/corner{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/obs) +"pH" = ( +/obj/machinery/camera/autoname/directional/east{ + pixel_x = -32; + pixel_y = -20; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo) +"pI" = ( +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/obj/machinery/camera/autoname/directional/south{ + pixel_y = 32; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/science) +"pJ" = ( +/obj/structure/flora/tree/pine/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"pK" = ( +/obj/machinery/door/poddoor{ + id = "interdynedorms" + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/camera/autoname/directional/north{ + pixel_y = -32; + network = list("intd13") + }, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/main/dorms) +"pL" = ( +/obj/machinery/camera/autoname/directional/west{ + pixel_x = 32; + pixel_y = 0; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo/deck) +"pM" = ( +/obj/machinery/camera/autoname/directional/south{ + pixel_x = 20; + pixel_y = 32; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med/viro) +"pN" = ( +/obj/machinery/camera/autoname/directional/east{ + pixel_x = -32; + pixel_y = 0; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/science) +"pO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"pP" = ( +/obj/machinery/camera/autoname/directional/west{ + pixel_x = 32; + pixel_y = 0; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/main) +"pQ" = ( +/obj/machinery/vending/boozeomat/syndicate_access{ + onstation = 0; + extended_inventory = 1 + }, +/obj/machinery/light/directional/south, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/bar) +"pR" = ( +/obj/structure/sign/poster/abductor/ayylian/directional/west, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"pS" = ( +/obj/machinery/camera/autoname/directional/north{ + pixel_x = 20; + pixel_y = -32; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/eng/disp) +"pT" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/medipens{ + pixel_x = 4; + pixel_y = 13 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"pU" = ( +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/white/corner{ + dir = 8; + layer = 2.52 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng) +"pV" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"pW" = ( +/obj/machinery/camera/autoname/directional/east{ + pixel_x = -32; + pixel_y = -20; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/hydr) +"pX" = ( +/obj/structure/sign/poster/contraband/rush_propaganda/directional/north, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"pY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/conveyor{ + dir = 1; + id = "interdynedisp" + }, +/obj/item/shard/plastitanium, +/obj/item/toy/cards/deck/cas/black{ + pixel_x = 3; + pixel_y = 11 + }, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng/disp) +"pZ" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/main/vault) +"qb" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med/pharm) +"qc" = ( +/obj/machinery/light/directional/south, +/obj/machinery/button/door/directional/east{ + name = "window security button"; + id = "interdynemedbay"; + req_access = list("syndicate") + }, +/obj/structure/closet/crate/freezer/blood, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"qd" = ( +/obj/machinery/camera/autoname/directional/east{ + pixel_x = -32; + pixel_y = -20; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/science/xeno) +"qf" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"qg" = ( +/turf/closed/wall/r_wall/syndicate{ + fixed_underlay = list(icon='icons/turf/snow.dmi', icon_state="snow") + }, +/area/ruin/interdyne_planetary_base/serv/hydr) +"qh" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/eng/disp) +"qi" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters{ + id = "interdynekitchen" + }, +/obj/effect/baseturf_helper/reinforced_plating, +/turf/open/floor/iron/freezer, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"qj" = ( +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/main/vault) +"qk" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/main/dorms) +"ql" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "interdynemedhall" + }, +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/med) +"qm" = ( +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med/pharm) +"qn" = ( +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med/morgue) +"qo" = ( +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"qp" = ( +/obj/item/paper/guides/jobs/medical/morgue, +/obj/structure/table/reinforced, +/obj/item/storage/backpack/duffelbag/syndie/surgery, +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/cup/bottle/formaldehyde{ + pixel_x = 12; + pixel_y = 12 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/morgue) +"qq" = ( +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/eng) +"qr" = ( +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/eng/disp) +"qs" = ( +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/main/dorms) +"qt" = ( +/obj/machinery/smartfridge/food, +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters{ + id = "interdynekitchen" + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/turf/open/floor/iron/freezer, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"qu" = ( +/obj/machinery/light/directional/south, +/obj/structure/closet/secure_closet/freezer/kitchen{ + anchored = 1; + req_access = list("syndicate") + }, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/soymilk, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"qv" = ( +/obj/machinery/smartfridge/drinks, +/obj/machinery/door/poddoor/shutters{ + id = "interdynekitchen" + }, +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/turf/open/floor/iron/white, +/area/ruin/interdyne_planetary_base/serv/bar) +"qw" = ( +/obj/machinery/computer/crew/syndie{ + dir = 4 + }, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo/obs) +"qx" = ( +/obj/machinery/processor{ + pixel_z = 0 + }, +/obj/structure/table/reinforced, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"qy" = ( +/obj/structure/table/reinforced, +/obj/machinery/microwave{ + pixel_y = 9 + }, +/obj/structure/sign/poster/contraband/microwave/directional/east{ + pixel_z = 7 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"qz" = ( +/obj/machinery/hydroponics/constructable{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"qA" = ( +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"qB" = ( +/obj/machinery/light/directional/west, +/obj/machinery/hydroponics/constructable{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"qC" = ( +/obj/machinery/light/directional/east, +/obj/machinery/hydroponics/constructable{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"qD" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/ruin/interdyne_planetary_base/main) +"qE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/cargo) +"qF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/structure/sign/poster/contraband/the_big_gas_giant_truth/directional/west, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"qG" = ( +/obj/structure/flora/tree/stump, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"qH" = ( +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/turf/closed/wall/r_wall/syndicate{ + fixed_underlay = list(icon='icons/turf/floors.dmi', icon_state="textured_dark_large") + }, +/area/ruin/interdyne_planetary_base/main) +"qI" = ( +/turf/closed/wall/r_wall/syndicate{ + fixed_underlay = list(icon='icons/turf/floors.dmi', icon_state="textured_dark_large") + }, +/area/ruin/interdyne_planetary_base/main) +"qJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/structure/sign/poster/contraband/gorlex_recruitment/directional/west, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"qK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"qL" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/lattice/catwalk, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/ruin/interdyne_planetary_base/main) +"qM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/machinery/light/small/dim/directional/west, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"qN" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/lattice/catwalk, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/machinery/light/small/dim/directional/north, +/turf/open/misc/asteroid/snow/icemoon, +/area/ruin/interdyne_planetary_base/main) +"qO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"qP" = ( +/obj/machinery/camera/autoname/directional/north{ + pixel_y = -32; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med/pharm) +"qQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"qR" = ( +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"qS" = ( +/obj/structure/statue/snow/snowman, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"qT" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/lattice/catwalk, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/ruin/interdyne_planetary_base/main) +"qV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/bodycontainer/crematorium{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/morgue) +"qW" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-cargo" + }, +/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/public/glass{ + name = "Service Wing" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"qX" = ( +/obj/structure/flora/rock/pile/icy/style_random, +/obj/structure/flora/grass/green/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"qY" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med/morgue) +"qZ" = ( +/obj/structure/flora/tree/pine/style_random, +/obj/structure/flora/grass/green/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"ra" = ( +/obj/structure/flora/bush/snow/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"rb" = ( +/obj/machinery/camera/autoname/directional/east{ + pixel_x = -32; + pixel_y = -20; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/main/dorms) +"rc" = ( +/obj/machinery/camera/autoname/directional/north{ + pixel_y = -32; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/main/dorms) +"rd" = ( +/obj/machinery/camera/autoname/directional/north{ + pixel_y = -32; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/hydr) +"re" = ( +/obj/machinery/camera/autoname/directional/north{ + pixel_x = 20; + pixel_y = -32; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/hydr) +"rf" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"rg" = ( +/obj/machinery/camera/autoname/directional/west{ + pixel_x = 32; + pixel_y = -20; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/eng/disp) +"rh" = ( +/obj/machinery/camera/autoname/directional/west{ + pixel_x = 32; + pixel_y = 0; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med/viro) +"ri" = ( +/obj/machinery/camera/autoname/directional/west{ + pixel_x = 32; + pixel_y = -20; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med) +"rj" = ( +/obj/machinery/camera/autoname/directional/west{ + pixel_x = 32; + pixel_y = -20; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/hydr) +"rk" = ( +/obj/machinery/camera/autoname/directional/north{ + pixel_y = -32; + network = list("intd13") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo) +"rl" = ( +/obj/structure/flora/grass/both/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"rm" = ( +/obj/structure/flora/grass/brown/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"rn" = ( +/obj/structure/flora/tree/pine/style_random, +/obj/structure/flora/grass/both/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"ro" = ( +/obj/structure/flora/tree/pine/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"rp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"rq" = ( +/obj/effect/mapping_helpers/turn_off_lights_with_lightswitch, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med/morgue) +"rF" = ( +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"rN" = ( +/turf/closed/wall/r_wall/syndicate{ + fixed_underlay = list(icon='icons/turf/snow.dmi', icon_state="snow") + }, +/area/ruin/interdyne_planetary_base/cargo/deck) +"sZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/white/line{ + layer = 2.52 + }, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng) +"ti" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"tt" = ( +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/science/xeno) +"tZ" = ( +/obj/structure/pod, +/obj/effect/supplypod_rubble, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"ua" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 5; + faction = list("Syndicate","neutral") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base) +"uJ" = ( +/obj/structure/pod, +/obj/effect/supplypod_rubble, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"xc" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"xj" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "interdynedormsbalcony" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/main/dorms) +"xS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"zt" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"zy" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/closet/secure_closet/personal/wall{ + icon_door = "locker_wall"; + pixel_x = 30 + }, +/obj/machinery/button/door/directional/south{ + id = "interdynecabin4"; + name = "door bolt control"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"Ak" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 9; + faction = list("Syndicate","neutral") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base) +"Al" = ( +/obj/structure/shipping_container/interdyne{ + pixel_x = 2 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"AG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/button/door/directional/west{ + name = "window security button"; + id = "interdynedormsbalcony"; + req_access = list("syndicate"); + pixel_y = 20 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"Br" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Service Wing" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-service" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"BG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"BT" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"CW" = ( +/obj/structure/shipping_container/kosmologistika{ + pixel_x = -6; + pixel_y = 7 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"DJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"EM" = ( +/obj/machinery/hydroponics/constructable{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"ER" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/closet/secure_closet/personal/wall{ + icon_door = "locker_wall"; + pixel_x = 30 + }, +/obj/machinery/button/door/directional/north{ + pixel_x = 0; + id = "interdynecabin5"; + name = "door bolt control"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"ET" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/power/floodlight{ + anchored = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"FU" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"GW" = ( +/obj/item/toy/figure/syndie, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"Ht" = ( +/obj/machinery/door/airlock/grunge{ + name = "Bar" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/bar) +"HC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"HG" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/freezer, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"HK" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"HO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo) +"Iu" = ( +/obj/structure/shipping_container/kahraman{ + pixel_y = -14 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"Iv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow/corner, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"JE" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Medical Wing"; + req_access = list("syndicate") + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-medbay" + }, +/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/flat_white, +/area/ruin/interdyne_planetary_base/med) +"JM" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"Ki" = ( +/obj/structure/railing{ + dir = 9 + }, +/obj/structure/lattice/catwalk, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4; + layer = 3 + }, +/turf/open/lava/plasma/ice_moon, +/area/ruin/interdyne_planetary_base/main/dorms) +"Ko" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"Lg" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med) +"LJ" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv) +"LM" = ( +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"Mc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"Mf" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med/viro) +"Np" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/lattice/catwalk, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4; + layer = 3 + }, +/turf/open/lava/plasma/ice_moon, +/area/ruin/interdyne_planetary_base/main/dorms) +"Nz" = ( +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo/deck) +"Oj" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/closet/secure_closet/personal/wall{ + icon_door = "locker_wall"; + pixel_x = 30 + }, +/obj/machinery/button/door/directional/south{ + id = "interdynecabin1"; + name = "door bolt control"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"Oy" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/closet/secure_closet/personal/wall{ + icon_door = "locker_wall"; + pixel_x = 30 + }, +/obj/machinery/button/door/directional/south{ + id = "interdynecabin3"; + name = "door bolt control"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"OK" = ( +/obj/machinery/camera/autoname/directional/west{ + pixel_y = -10; + network = list("intd13"); + pixel_x = 32 + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo) +"Pg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"QK" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/structure/lattice/catwalk, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4; + layer = 3 + }, +/turf/open/lava/plasma/ice_moon, +/area/ruin/interdyne_planetary_base/main/dorms) +"Rt" = ( +/obj/structure/sign/warning/radiation/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"Ur" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"Va" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/poster/contraband/interdyne_gene_clinics/directional/west, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"VH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/closet/secure_closet/personal/wall{ + icon_door = "locker_wall"; + pixel_x = 30 + }, +/obj/machinery/button/door/directional/south{ + id = "interdynecabin2"; + name = "door bolt control"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"VY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/closet/secure_closet/personal/wall{ + icon_door = "locker_wall"; + pixel_x = 30 + }, +/obj/machinery/button/door/directional/north{ + pixel_x = 0; + id = "interdynecabin8"; + name = "door bolt control"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"Wm" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 9; + faction = list("Syndicate","neutral") + }, +/obj/effect/baseturf_helper/reinforced_plating, +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/turf/closed/wall/r_wall/syndicate{ + fixed_underlay = list(icon='icons/turf/snow.dmi', icon_state="snow") + }, +/area/ruin/interdyne_planetary_base) +"WQ" = ( +/obj/structure/shipping_container/donk_co{ + pixel_x = 6 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) +"WZ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/closet/secure_closet/personal/wall{ + icon_door = "locker_wall"; + pixel_x = 30 + }, +/obj/machinery/button/door/directional/north{ + pixel_x = 0; + id = "interdynecabin7"; + name = "door bolt control"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"XB" = ( +/obj/structure/sign/poster/contraband/moffuchis_pizza, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"Yw" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Medical Wing"; + req_access = list("syndicate") + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-medbay" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/flat_white, +/area/ruin/interdyne_planetary_base/med) +"Zd" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/weather/snow{ + layer = 3 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored) + +(1,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +dW +dW +aa +aa +aa +dW +aa +aa +aa +aa +aa +dW +dW +dW +dW +aa +aa +aa +aa +dW +dW +dW +dW +dW +dW +aa +aa +aa +aa +"} +(2,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +dW +dW +dW +dW +dW +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +aa +aa +aa +"} +(3,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +dW +dW +dW +dW +dW +dW +dW +dW +dW +aa +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +ab +ab +dW +dW +dW +ab +dW +dW +dW +dW +dW +ab +ab +ab +ab +dW +dW +dW +dW +ab +ab +ab +ab +ab +dW +dW +dW +aa +aa +"} +(4,1,1) = {" +aa +aa +aa +aa +dW +dW +dW +dW +dW +dW +dW +dW +ab +ab +ab +ab +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +dW +dW +aa +aa +"} +(5,1,1) = {" +aa +aa +aa +dW +dW +dW +dW +dW +ab +ab +ab +ab +ab +ab +ab +ab +ab +dW +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +dW +dW +aa +aa +"} +(6,1,1) = {" +aa +aa +aa +dW +dW +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +as +dW +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +pj +pE +iu +iu +iu +iu +iu +qd +ln +ab +ab +ab +Ki +Np +QK +ab +ab +ab +ab +ab +ab +ab +ab +dW +dW +aa +"} +(7,1,1) = {" +aa +aa +dW +dW +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +nQ +pN +fz +fz +fz +fc +tt +ip +iT +jk +jt +jU +kv +kN +qk +lv +lv +lv +lv +xj +lv +lv +lv +rb +ln +ab +ab +ab +ab +dW +dW +aa +"} +(8,1,1) = {" +aa +aa +dW +dW +ab +ab +ab +ab +ab +ab +ab +ab +ab +as +as +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +pI +fu +gI +hm +kW +hT +iu +ir +iU +jl +ju +jV +kw +kO +qs +lw +lR +mh +mv +AG +no +mh +og +lw +rc +ab +ab +ab +ab +dW +dW +aa +"} +(9,1,1) = {" +aa +dW +dW +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +as +ab +ab +ab +ab +ab +ab +ab +ab +ab +fz +fB +gX +gX +gX +ia +iu +iv +iV +jB +jx +ka +kx +kP +lv +lx +lS +zy +lv +nJ +lv +ER +lS +lx +lv +ab +ab +ab +ab +dW +dW +aa +"} +(10,1,1) = {" +aa +dW +dW +ab +ab +ab +ab +ab +ab +ab +as +as +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +fz +fX +gu +gG +gG +ib +iu +iw +iW +jC +ju +jV +kw +kQ +lv +lv +lv +lv +lv +nK +lv +lv +lv +lv +lv +ab +ab +ab +ab +dW +dW +aa +"} +(11,1,1) = {" +aa +dW +dW +ab +ab +ab +ab +ab +as +ac +ac +pJ +as +as +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +fc +fZ +gY +hn +hK +ic +ig +iw +iW +jP +jx +kb +kx +kP +lv +lw +lR +mh +mw +nJ +np +mh +og +lw +lv +ab +ab +ab +dW +dW +aa +aa +"} +(12,1,1) = {" +aa +dW +dW +ab +ab +Wm +mS +ag +ag +ai +rf +as +ac +as +as +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +fz +ga +gG +gG +hS +ic +iu +iz +iX +jR +ju +jV +kw +kQ +lv +lx +lS +Oy +lv +nJ +lv +mi +lS +lx +lv +ab +ab +ab +dW +dW +aa +aa +"} +(13,1,1) = {" +aa +dW +dW +ab +ab +be +aj +av +aL +js +aG +aG +aG +aG +eT +aG +aG +aG +aG +aG +pH +ej +as +ab +ab +fz +gb +gZ +gZ +gZ +ie +iu +iL +iY +jS +jy +kc +kc +kR +lv +lv +lv +lv +lv +nJ +lv +lv +lv +lv +oR +ab +ab +ab +dW +dW +aa +aa +"} +(14,1,1) = {" +aa +dW +dW +ab +ab +Nz +ak +aw +aM +aG +aY +bs +aG +aY +bs +aG +aY +bs +HO +aY +bs +rk +as +ab +as +fc +gc +hc +hy +hL +if +iu +iM +iZ +jX +jz +kd +kd +kS +lv +lw +lR +mh +mx +nJ +nq +mh +og +lw +lv +ab +ab +dW +dW +aa +aa +aa +"} +(15,1,1) = {" +aa +aa +dW +ab +ab +ag +al +ax +aN +aG +aZ +bt +aG +aZ +bt +aG +aZ +bt +aG +aZ +bt +aG +rf +as +fQ +fc +fc +gJ +hk +hU +fc +iu +iu +iu +jW +jm +jm +jm +jm +lv +lx +lS +VH +lv +nJ +lv +WZ +lS +lx +lv +ab +ab +dW +dW +aa +aa +aa +"} +(16,1,1) = {" +aa +aa +dW +ab +ab +ag +am +ag +ag +aG +ba +bu +aG +ba +bu +aG +ba +bu +aG +ba +bu +aG +rn +bb +fR +hO +gr +gK +hz +hV +gr +as +ab +ab +qo +jA +ke +ky +kT +lv +lv +lv +lv +lv +nK +lv +lv +lv +lv +lv +ab +ab +ab +dW +dW +aa +aa +"} +(17,1,1) = {" +aa +aa +dW +ab +ab +ah +al +ay +aO +aG +aG +bv +aG +aG +cj +aG +aG +cO +aG +aG +eg +aG +eh +ac +fR +gO +gr +gK +hB +hW +gr +ab +ab +ab +jn +jH +kf +kp +kU +lv +lw +lR +mh +mC +nJ +nr +mh +og +lw +lv +ab +ab +ab +ab +dW +dW +aa +"} +(18,1,1) = {" +aa +aa +dW +ab +ab +ah +an +az +aA +aU +bY +bY +qE +qE +qE +qE +qE +qE +qE +qE +qE +es +aG +pJ +fR +gP +gr +gK +hB +hW +gr +ab +ab +ab +jn +jI +kg +kz +kV +lv +lx +lS +Oj +lv +nJ +lv +VY +lS +lx +lv +ab +ab +dW +dW +ab +dW +dW +"} +(19,1,1) = {" +aa +aa +dW +ab +ab +ah +ao +aA +aP +aG +bc +bd +ad +da +bm +bm +bm +bm +bm +bm +dH +et +aG +as +fR +iA +gr +gK +hC +kI +gr +ac +as +ab +jm +jJ +kh +kp +kY +lv +lv +lv +lv +lv +nL +lv +lv +lv +lv +lv +ln +ab +dW +ab +dW +dW +aa +"} +(20,1,1) = {" +aa +dW +dW +ab +ab +ag +ag +aB +ag +aG +aG +bx +aG +aG +aG +aG +aG +er +di +dQ +ei +es +aG +dK +fx +fi +fc +gJ +hk +hU +fc +fx +fx +fx +jm +jK +ki +kp +rp +lv +Va +ly +mj +lz +lz +ns +nO +oh +ox +oS +pK +ab +ab +dW +dW +aa +aa +"} +(21,1,1) = {" +aa +dW +dW +ab +ab +ag +ap +aE +aQ +aG +bf +by +bM +bW +ck +cD +cB +fy +dj +dj +dj +dj +cR +qH +eU +eU +eU +gL +hA +hY +iq +iq +eX +qI +jm +jL +ko +kF +lg +ll +lz +lZ +mT +mT +mT +mT +mT +mT +pc +oT +mQ +ab +ab +dW +dW +aa +aa +"} +(22,1,1) = {" +aa +dW +dW +ab +ab +af +aq +aF +aR +aG +bh +by +bN +bN +cl +cE +cz +cS +dk +dS +dS +eu +cR +eU +eU +eQ +eQ +fv +hD +hZ +eQ +ih +gL +eX +jm +pX +kp +kJ +lh +lv +lD +lU +lU +lU +lU +lU +nP +oi +oT +oU +mQ +ab +ab +dW +dW +aa +aa +"} +(23,1,1) = {" +dW +dW +ab +ab +ab +rN +pL +ag +ag +aG +bh +by +bN +bX +Ko +cE +cy +cR +dl +dT +ek +ev +cR +eU +eP +ft +ft +gM +fT +ft +ft +ft +eQ +ja +jm +jN +kq +kK +li +lv +lE +lV +ml +lV +lV +lV +nV +pa +Ht +pa +pa +ab +ab +dW +dW +dW +aa +"} +(24,1,1) = {" +aa +dW +dW +ab +ab +as +as +as +ac +aG +bh +by +bO +cg +cm +cE +cC +cR +dm +dm +dm +dm +cR +eU +eQ +ft +pZ +hb +hb +hb +hb +iy +eQ +ja +LJ +lt +lt +lt +lt +lt +iD +jO +mm +mE +mV +nt +qv +oj +oA +lF +pa +ab +ab +ab +dW +dW +aa +"} +(25,1,1) = {" +aa +dW +dW +ab +ab +ab +ab +ab +qS +aG +bl +bz +bP +bZ +cn +cE +db +cT +dn +dn +dn +dn +eR +eV +ft +ft +qj +hd +hE +hM +hb +gj +fv +jb +Br +jO +jO +jO +jO +jo +lG +mg +mn +mF +na +nu +nR +ok +oB +ph +pa +ab +ab +ab +ab +dW +dW +"} +(26,1,1) = {" +aa +dW +dW +ab +ab +ab +ab +as +qG +aG +cd +bA +bQ +ca +co +cF +dg +bU +du +bm +bm +ew +bU +eW +fd +fT +hb +hh +hF +hN +pF +fT +iF +jc +jp +kn +kt +kt +kH +jp +lH +kt +mn +nb +nb +nz +nS +ok +oC +pg +pa +ab +ab +ab +ab +dW +dW +"} +(27,1,1) = {" +aa +dW +dW +ab +ab +ab +ab +Ak +aG +aG +bV +bB +bB +bB +bB +cI +dh +cV +dv +dv +dv +dv +eS +eX +fv +fU +hb +hi +hI +hR +hb +iE +iO +jd +jq +jQ +jQ +jQ +lk +qW +jQ +kt +mn +mH +nc +nA +nT +ok +oD +pk +pa +ab +ab +ab +ab +dW +dW +"} +(28,1,1) = {" +aa +dW +dW +ab +ab +ab +ab +aH +aT +aV +bm +bm +bm +cb +bw +cP +cG +it +cY +cY +cY +cY +cW +eY +eQ +fV +hb +hb +hb +hb +hb +ft +eQ +eY +qf +jr +jr +jr +jr +jr +lI +kt +mn +mI +nd +nB +nU +ol +oE +pQ +pa +as +ab +ab +ab +dW +dW +"} +(29,1,1) = {" +aa +aa +dW +dW +ab +ab +ab +ua +aG +aG +bm +bC +bR +cc +bm +cP +cH +mK +dC +dV +dV +pG +cW +eY +eQ +ft +ft +ft +fT +id +ft +ft +iG +eY +jZ +kr +ku +ku +kL +jr +lJ +mk +mn +qi +ne +nC +ob +or +pd +mL +mL +as +ab +ab +dW +dW +aa +"} +(30,1,1) = {" +aa +aa +dW +dW +ab +ab +ab +ab +ab +aG +bn +bD +bS +bD +cp +cU +cX +dD +dE +ec +qw +ey +cZ +eZ +fw +fj +eQ +he +hJ +fv +eQ +eQ +iQ +iR +jr +ks +kA +kG +lc +lm +lK +jO +mo +qt +nf +nD +nW +on +oG +pV +mL +as +ab +ab +dW +dW +aa +"} +(31,1,1) = {" +aa +aa +dW +dW +ab +ab +ab +ab +as +aG +bo +bE +bm +ce +cs +bm +cJ +cW +dF +ex +em +ez +cW +qI +eZ +fY +fY +hf +hG +ii +is +fY +iR +qI +jr +hX +jT +kB +kM +jr +lL +jp +mp +XB +nN +nE +op +oW +oH +pl +mL +ac +ab +ab +ab +dW +dW +"} +(32,1,1) = {" +aa +aa +dW +dW +ab +ab +ab +ab +ra +bj +bm +bF +bT +cN +ct +aG +aG +cW +dG +ee +en +eA +cW +fx +pP +fr +Lg +JE +fs +Yw +eb +ik +fx +pP +jr +jr +jr +jr +jr +jr +lM +lY +mq +mL +nX +nE +oq +oX +oI +qu +mL +as +ab +ab +ab +dW +dW +"} +(33,1,1) = {" +aa +aa +dW +dW +ab +ab +ab +as +ac +aW +bp +bG +aG +cf +cu +aW +ac +cY +dU +ef +ef +eC +cY +rl +fR +iB +ql +eL +fp +fO +el +hp +hP +pR +md +qF +qJ +qM +qQ +lr +jQ +mg +mq +mL +nY +nF +ow +oY +oJ +qx +mL +dW +ab +ab +dW +dW +aa +"} +(34,1,1) = {" +aa +aa +aa +dW +dW +ab +ab +as +pJ +aW +bq +bH +bU +ch +cv +aW +ab +cY +cY +cY +cY +cY +cY +rf +fR +iC +el +eM +fn +fO +el +mJ +iS +qD +qD +qD +qD +qD +qD +lt +lN +kt +mr +mL +nZ +nG +HG +oa +oK +qy +mL +dW +as +ab +ab +dW +dW +"} +(35,1,1) = {" +aa +aa +aa +dW +dW +ab +as +bb +rl +aW +br +bI +OK +ci +cw +aW +as +ab +ab +as +ac +ab +ab +as +fR +hq +el +eM +fn +fO +el +oF +jD +ra +ac +as +as +as +pJ +lu +lO +kt +ms +lp +mP +od +oy +oZ +pe +mP +mP +mP +pW +ln +ab +dW +dW +"} +(36,1,1) = {" +aa +aa +dW +dW +ab +ab +Zd +Mc +Ur +Mc +Pg +Pg +ET +DJ +DJ +Mc +HK +ab +ab +ab +ab +ab +as +ac +fS +lC +el +eN +fq +fO +el +pn +jG +bb +as +ab +ab +ab +as +lu +jQ +kt +mq +nn +nk +nI +nI +os +oM +EM +EM +EM +qB +rd +ab +dW +dW +"} +(37,1,1) = {" +aa +aa +dW +dW +ab +as +BT +LM +LM +LM +Al +rF +rF +rF +WQ +LM +Iv +ab +ab +ae +aC +aC +aC +aC +dL +aC +eb +eO +fs +fP +eb +eb +eb +ed +as +ab +ab +ab +as +lu +jQ +kt +mq +mN +nl +oe +ld +ot +oN +qA +qA +qA +qA +mP +ab +dW +dW +"} +(38,1,1) = {" +aa +aa +dW +dW +ab +as +BT +LM +CW +rF +rF +rF +uJ +rF +GW +rF +Iv +as +ab +Mf +bg +dc +do +dw +dM +aC +gd +fe +fC +fO +eb +gR +hs +eb +as +ab +ab +ab +ab +lu +jQ +kt +mq +mN +nl +of +oL +ou +oO +qz +qz +qz +qz +mP +ab +dW +dW +"} +(39,1,1) = {" +aa +aa +dW +dW +ab +as +BT +LM +LM +GW +rF +Iu +rF +rF +rF +LM +BG +ac +ab +mM +bK +dd +dp +dx +dM +aC +go +fe +fn +fO +gm +gS +ht +eb +as +ab +ab +ab +as +lt +lP +kt +mq +mN +FU +om +oQ +ou +oO +EM +EM +EM +EM +mP +ab +dW +dW +"} +(40,1,1) = {" +aa +dW +dW +ab +ab +ab +xc +rF +rF +rF +rF +rF +rF +rF +LM +LM +Iv +rm +oz +aD +cA +dM +dq +dx +dN +aC +gp +fe +fn +fO +gn +gT +hu +eb +as +as +ab +ab +ab +lt +jQ +mk +mt +nH +nm +nM +nM +ov +oP +qA +qA +qA +qA +mP +ab +dW +dW +"} +(41,1,1) = {" +aa +dW +dW +ab +ab +ab +xc +LM +uJ +rF +rF +rF +LM +tZ +LM +LM +BG +as +as +aC +cK +df +dr +dx +dO +aC +gq +fe +jM +fO +gw +gU +gl +eb +rf +as +ab +ab +ab +lt +lQ +mf +mu +mN +oc +oo +oV +pb +pf +qz +qz +qz +qC +re +ab +dW +dW +"} +(42,1,1) = {" +aa +dW +dW +ab +ab +ab +JM +ti +xS +HC +xS +ti +xS +ti +ti +xS +zt +ab +ab +aC +eo +eD +ds +dy +qR +aC +eb +ff +eb +ge +qb +gx +hv +gx +jv +rl +as +as +pm +jY +jY +la +jY +jY +jY +jY +jY +jY +jY +jY +mP +mP +rj +qg +ab +dW +dW +"} +(43,1,1) = {" +dW +dW +ab +ab +ab +ab +ab +as +as +as +qX +ab +as +as +as +as +as +ab +ab +aC +ep +eE +eE +dz +dM +aC +gs +fg +fE +gf +qm +hx +hw +jj +qP +qL +qL +qL +qq +hj +lq +lb +ma +mz +mY +nx +pr +pv +pz +jY +dW +as +ab +ab +ab +dW +dW +"} +(44,1,1) = {" +dW +dW +ab +ab +ab +ab +ab +ab +as +ra +as +as +as +ac +ro +as +ab +ab +ab +aC +eo +eD +dt +dA +dx +ea +eB +fh +fF +gg +gy +gW +ix +hQ +jw +pO +qK +qO +lj +lA +lA +lA +ng +sZ +mZ +ny +ps +pw +pA +jY +as +ab +ab +ab +ab +dW +dW +"} +(45,1,1) = {" +dW +dW +ab +ab +ab +ab +ab +ab +ab +as +pJ +ac +as +as +as +as +ab +ab +ab +aC +eq +eE +eE +dB +dN +aC +fG +gt +fH +gi +gz +il +iH +je +gx +qN +qT +qT +jY +lB +lB +mO +nh +sZ +nv +pp +pt +px +pB +jY +as +ab +ab +ab +ab +dW +dW +"} +(46,1,1) = {" +aa +dW +dW +dW +ab +ab +ab +ab +ab +ab +as +as +as +as +ab +ab +ab +ab +ab +aC +eo +eD +dt +dI +dM +aC +gh +gv +fH +gi +gA +im +iI +jf +gx +as +ra +as +jY +Rt +lX +lX +ni +my +nw +pp +pu +py +pC +jY +ab +ab +ab +ab +ab +dW +dW +"} +(47,1,1) = {" +aa +aa +dW +dW +dW +dW +ab +ab +ab +ab +ab +as +ab +as +ab +ab +ab +ab +ab +pM +ep +eE +eE +dJ +dP +aC +gV +gH +fH +gi +gB +in +iJ +jg +gx +pJ +ac +ab +jY +lT +lT +mR +nj +pU +jY +pq +jY +jY +jY +lo +ab +ab +ab +ab +ab +dW +dW +"} +(48,1,1) = {" +aa +aa +aa +dW +dW +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +bk +rh +aC +aC +aC +aC +aC +eb +eb +fI +fW +gx +qY +rq +ha +ha +jE +as +ab +qh +kk +kk +kk +kk +mA +kk +me +qZ +as +ab +ab +ab +ab +ab +ab +ab +dW +dW +"} +(49,1,1) = {" +aa +aa +dW +dW +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eb +eF +fk +fH +gg +gD +qn +iK +jh +qV +ha +bb +as +qr +kC +pY +dZ +mb +mB +kk +ac +as +ab +ab +ab +ab +ab +ab +ab +ab +dW +dW +"} +(50,1,1) = {" +aa +aa +aa +dW +dW +ab +ab +ab +dW +ab +ab +ab +ab +ab +ab +as +ab +ab +ab +ab +ab +ab +ab +ab +ab +eb +eG +fl +fJ +gk +gC +io +iN +ji +kl +ha +rl +ra +kk +kD +kX +le +mc +mW +kk +ab +ab +ab +ab +ab +ab +ab +ab +ab +dW +dW +aa +"} +(51,1,1) = {" +aa +aa +aa +dW +dW +ab +ab +as +dW +dW +dW +dW +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eb +eH +fm +fH +gl +pT +ha +iP +qp +km +ha +as +pJ +kk +kE +kZ +lf +ls +mX +pS +ab +ab +ab +ab +ab +ab +ab +ab +ab +dW +dW +aa +"} +(52,1,1) = {" +aa +aa +aa +dW +dW +ab +ab +as +ac +dW +dW +dW +as +dW +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eb +eI +fK +fL +gl +gF +ha +ha +ha +ha +jE +as +as +kj +kk +kk +kk +kk +rg +pD +ab +ab +ab +ab +ab +ab +ab +dW +dW +dW +aa +aa +"} +(53,1,1) = {" +aa +aa +aa +dW +dW +ab +ab +as +as +qG +as +ab +ab +dW +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eb +eJ +fn +lW +gl +gE +eb +as +pJ +ac +as +as +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +as +dW +dW +dW +dW +aa +aa +"} +(54,1,1) = {" +aa +aa +aa +dW +dW +ab +ab +ab +dW +as +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eb +eK +fo +fM +fn +qc +eb +ra +ac +as +as +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +as +ac +dW +as +as +dW +dW +aa +"} +(55,1,1) = {" +aa +aa +aa +dW +dW +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +pi +eb +eb +fN +fN +ri +ho +as +as +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +as +dW +as +dW +as +dW +dW +dW +aa +aa +"} +(56,1,1) = {" +aa +aa +aa +aa +dW +dW +ab +ab +ab +ab +ab +dW +dW +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +as +as +as +dW +dW +dW +dW +dW +aa +aa +aa +"} +(57,1,1) = {" +aa +aa +aa +aa +dW +dW +ab +ab +ab +ab +ab +dW +dW +dW +ab +ab +ab +ab +ab +ab +as +dW +dW +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +dW +dW +dW +ab +ab +dW +dW +dW +dW +ab +ab +dW +dW +dW +dW +dW +dW +aa +aa +aa +aa +aa +"} +(58,1,1) = {" +aa +aa +aa +aa +aa +dW +dW +dW +dW +dW +dW +dW +dW +dW +ab +ab +ab +ab +ab +ab +dW +dW +dW +as +ab +ab +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +aa +aa +aa +aa +aa +aa +aa +aa +"} +(59,1,1) = {" +aa +aa +aa +aa +aa +aa +dW +dW +dW +dW +dW +aa +dW +dW +dW +dW +ab +ab +ab +dW +dW +aa +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +dW +aa +aa +aa +dW +dW +aa +aa +aa +aa +dW +dW +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(60,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +dW +dW +dW +dW +dW +dW +dW +aa +aa +aa +dW +dW +dW +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} diff --git a/_maps/RandomRuins/IceRuins/skyrat/icemoon_underground_mining_site_skyrat.dmm b/_maps/RandomRuins/IceRuins/nova/icemoon_underground_mining_site_nova.dmm similarity index 100% rename from _maps/RandomRuins/IceRuins/skyrat/icemoon_underground_mining_site_skyrat.dmm rename to _maps/RandomRuins/IceRuins/nova/icemoon_underground_mining_site_nova.dmm diff --git a/_maps/RandomRuins/IceRuins/skyrat/icemoon_underground_syndicate_base1_skyrat.dmm b/_maps/RandomRuins/IceRuins/skyrat/icemoon_underground_syndicate_base1_skyrat.dmm deleted file mode 100644 index 56f6f48738092c..00000000000000 --- a/_maps/RandomRuins/IceRuins/skyrat/icemoon_underground_syndicate_base1_skyrat.dmm +++ /dev/null @@ -1,8871 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/template_noop, -/area/template_noop) -"ab" = ( -/turf/open/lava/plasma/ice_moon, -/area/icemoon/underground/explored) -"ac" = ( -/turf/closed/mineral/random/snow/underground, -/area/icemoon/underground/explored) -"ad" = ( -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/structure/fans/tiny, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"ag" = ( -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"ai" = ( -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/structure/fans/tiny, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"ak" = ( -/obj/structure/tank_dispenser, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"al" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/machinery/vending/wardrobe/syndie_wardrobe{ - onstation = 0 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"ao" = ( -/obj/structure/cable, -/obj/machinery/computer/order_console/mining/interdyne, -/obj/structure/railing{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"ap" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/engineering) -"ar" = ( -/obj/machinery/door/airlock/command{ - name = "Deck Officer" - }, -/obj/effect/turf_decal/siding/wood, -/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/syndicate/leader, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"as" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/structure/bed/maint, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/testlab) -"au" = ( -/obj/structure/table/glass, -/obj/item/book/random{ - pixel_y = 3 - }, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"aA" = ( -/obj/machinery/conveyor_switch/oneway{ - dir = 8; - id = "interdynedisp"; - name = "disposal conveyor" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"aB" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"aE" = ( -/obj/structure/closet/crate/medical, -/obj/item/storage/medkit/fire{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/medkit/brute, -/obj/item/storage/medkit/regular{ - pixel_x = -3; - pixel_y = -3 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"aG" = ( -/obj/structure/table/glass, -/obj/item/clothing/glasses/science, -/obj/item/book/manual/wiki/chemistry{ - pixel_y = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"aP" = ( -/obj/structure/frame/machine{ - anchored = 1; - state = 2; - icon_state = "box_1" - }, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/testlab) -"aT" = ( -/obj/structure/table/glass, -/obj/machinery/reagentgrinder{ - pixel_y = 6 - }, -/obj/item/stack/sheet/mineral/plasma{ - amount = 5 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/testlab) -"aV" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 8 - }, -/obj/machinery/light_switch/directional/north, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"aY" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"bd" = ( -/obj/machinery/light/directional/south, -/obj/structure/closet/secure_closet/freezer/kitchen{ - req_access = list("syndicate") - }, -/obj/item/reagent_containers/condiment/milk, -/obj/item/reagent_containers/condiment/soymilk, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"bf" = ( -/obj/structure/rack, -/obj/item/cultivator, -/obj/item/shovel/spade, -/obj/item/hatchet, -/obj/item/plant_analyzer, -/obj/item/geneshears, -/obj/item/gun/energy/floragun, -/obj/item/secateurs, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"bh" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/firealarm/directional/west{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"bk" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"bq" = ( -/turf/open/floor/holofloor/stairs/left{ - dir = 8 - }, -/area/ruin/syndicate_lava_base/cargo) -"bu" = ( -/obj/machinery/button/door/directional/west{ - id = "interdynekitchen" - }, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"bv" = ( -/obj/machinery/door/airlock/command{ - name = "Observation Deck" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/telecomms) -"bz" = ( -/obj/structure/disposalpipe/trunk, -/obj/structure/disposaloutlet{ - dir = 1 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/ruin/syndicate_lava_base/virology) -"bC" = ( -/obj/effect/turf_decal/arrows, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"bF" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"bG" = ( -/obj/structure/closet/crate/internals, -/obj/item/tank/internals/oxygen/yellow, -/obj/item/tank/internals/oxygen/yellow, -/obj/item/tank/internals/oxygen/yellow, -/obj/item/tank/internals/emergency_oxygen/double, -/obj/item/tank/internals/emergency_oxygen/double, -/obj/item/tank/internals/emergency_oxygen/double, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/effect/turf_decal/box/white, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"bM" = ( -/obj/effect/turf_decal/siding/thinplating/corner{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"bN" = ( -/obj/structure/closet/crate, -/obj/item/storage/box/stockparts/deluxe, -/obj/item/storage/box/stockparts/deluxe, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/circuitboard/machine/processor, -/obj/item/circuitboard/machine/gibber, -/obj/item/circuitboard/machine/deep_fryer, -/obj/item/circuitboard/machine/cell_charger, -/obj/item/circuitboard/machine/smoke_machine, -/obj/item/stack/sheet/plasteel/fifty, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"bR" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"bV" = ( -/obj/effect/turf_decal/siding/brown{ - dir = 9 - }, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"bY" = ( -/obj/machinery/door/airlock/grunge{ - name = "Morgue" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/structure/fans/tiny, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"ce" = ( -/obj/machinery/smartfridge/chemistry/preloaded, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"cf" = ( -/obj/structure/closet/crate, -/obj/item/flashlight{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/flashlight{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/flashlight{ - pixel_x = 1; - pixel_y = -1 - }, -/obj/item/extinguisher{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/extinguisher{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/extinguisher{ - pixel_x = 1; - pixel_y = -1 - }, -/obj/effect/turf_decal/siding/brown{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"ci" = ( -/obj/effect/turf_decal/vg_decals/department/cargo, -/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, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"cj" = ( -/obj/machinery/atmospherics/components/binary/volume_pump{ - dir = 4; - name = "BZ Pump" - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/testlab) -"ck" = ( -/obj/structure/sign/directions/medical{ - dir = 4; - pixel_x = 32; - pixel_y = 3 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"cl" = ( -/obj/machinery/airalarm/directional/south, -/obj/machinery/hydroponics/constructable, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/turf/open/floor/grass, -/area/ruin/syndicate_lava_base/bar) -"cm" = ( -/obj/structure/filingcabinet, -/obj/item/folder/syndicate/mining, -/turf/open/floor/iron/corner{ - dir = 8 - }, -/area/ruin/syndicate_lava_base/main) -"cn" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"cu" = ( -/turf/open/floor/iron/dark/textured_corner{ - dir = 4 - }, -/area/ruin/syndicate_lava_base/bar) -"cw" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"cx" = ( -/obj/effect/turf_decal/tile/dark_blue, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/large, -/area/ruin/syndicate_lava_base/telecomms) -"cD" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"cN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/effect/turf_decal/stripes/blue{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"cO" = ( -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"cP" = ( -/obj/machinery/syndicatebomb/self_destruct{ - anchored = 1 - }, -/obj/effect/turf_decal/stripes/red/box, -/turf/open/floor/iron/textured_large, -/area/ruin/syndicate_lava_base/main) -"cQ" = ( -/obj/machinery/light/small/directional/east, -/obj/machinery/ammo_workbench, -/turf/open/floor/iron/edge{ - dir = 8 - }, -/area/ruin/syndicate_lava_base/main) -"cS" = ( -/obj/effect/turf_decal/tile/dark_blue{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/cable, -/turf/open/floor/iron/large, -/area/ruin/syndicate_lava_base/telecomms) -"cV" = ( -/obj/effect/turf_decal/vg_decals/department/med{ - dir = 8 - }, -/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, -/area/ruin/syndicate_lava_base/main) -"cW" = ( -/obj/effect/turf_decal/siding/thinplating/dark/end{ - dir = 1 - }, -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters{ - dir = 8; - id = "interdynekitchen" - }, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"cY" = ( -/turf/open/floor/iron/edge{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/main) -"cZ" = ( -/obj/machinery/smartfridge/drinks, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"db" = ( -/obj/structure/safe, -/obj/item/storage/box/syndie_kit/chameleon/ghostcafe{ - desc = "It's a box, for storing things."; - name = "chameleon kit" - }, -/obj/item/disk/ammo_workbench/advanced, -/turf/open/floor/iron/corner{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/main) -"de" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/lava/plasma/ice_moon, -/area/ruin/syndicate_lava_base/testlab) -"df" = ( -/turf/open/floor/engine/n2, -/area/ruin/syndicate_lava_base/engineering) -"dj" = ( -/obj/machinery/camera/autoname/directional/east{ - network = list("intd13") - }, -/turf/open/lava/plasma/ice_moon, -/area/ruin/syndicate_lava_base/cargo) -"dk" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "intdyno2"; - dir = 1 - }, -/turf/open/floor/engine/o2, -/area/ruin/syndicate_lava_base/engineering) -"dm" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 10 - }, -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters{ - dir = 8; - id = "interdynekitchen" - }, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"ds" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/virology) -"dw" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - external_pressure_bound = 140; - name = "server vent"; - pressure_checks = 0; - dir = 8 - }, -/turf/open/floor/circuit/telecomms, -/area/ruin/syndicate_lava_base/testlab) -"dy" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/chair/plastic{ - dir = 4 - }, -/turf/open/floor/plating/icemoon, -/area/ruin/syndicate_lava_base/medbay) -"dz" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Bar" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "interdyne-service" - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"dJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/medbay) -"dL" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"dM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"dN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"dO" = ( -/obj/machinery/light/directional/north, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"dP" = ( -/obj/machinery/door/firedoor, -/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, -/area/ruin/syndicate_lava_base/main) -"dR" = ( -/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, -/area/ruin/syndicate_lava_base/bar) -"dS" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/thinplating/dark/corner, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"dT" = ( -/obj/structure/table/glass, -/obj/item/storage/box/rndboards{ - pixel_y = 15; - pixel_x = 2 - }, -/obj/item/storage/part_replacer{ - pixel_y = 6 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"ed" = ( -/obj/structure/table, -/turf/open/floor/carpet/royalblack, -/area/ruin/syndicate_lava_base/telecomms) -"ef" = ( -/obj/structure/chair/stool/bar{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"eg" = ( -/obj/machinery/door/airlock{ - name = "Quiet Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"ej" = ( -/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/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/ice{ - dir = 4 - }, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"el" = ( -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/maintenance/external, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"eo" = ( -/obj/structure/sink/directional/east, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"er" = ( -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"et" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"eu" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"ex" = ( -/obj/machinery/airalarm/directional/south{ - req_access = list("syndicate") - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"eA" = ( -/obj/structure/table, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/item/key/atv, -/turf/open/floor/iron/smooth_edge, -/area/ruin/syndicate_lava_base/cargo) -"eC" = ( -/obj/structure/lattice/catwalk, -/turf/open/lava/plasma/ice_moon, -/area/ruin/syndicate_lava_base/testlab) -"eE" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/structure/flora/bush/sparsegrass, -/obj/structure/flora/bush/flowers_pp, -/turf/open/floor/grass, -/area/ruin/syndicate_lava_base/cargo) -"eL" = ( -/obj/machinery/light/directional/west, -/obj/effect/turf_decal/tile/dark_blue{ - dir = 1 - }, -/turf/open/floor/iron/large, -/area/ruin/syndicate_lava_base/telecomms) -"eN" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer2{ - dir = 8 - }, -/turf/open/floor/plating/icemoon, -/area/ruin/syndicate_lava_base/engineering) -"eQ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/button/door/directional/south{ - id = "interdynecargo"; - req_access = list("syndicate"); - pixel_y = 24 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"eS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/showroomfloor, -/area/ruin/syndicate_lava_base/cargo) -"eX" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating/dark/corner, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"eZ" = ( -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"fd" = ( -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"fe" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/machinery/door/poddoor{ - id = "interdynebarbers" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"fg" = ( -/obj/structure/table/glass, -/obj/item/stack/cable_coil, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"fq" = ( -/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, -/area/ruin/syndicate_lava_base/dormitories) -"ft" = ( -/obj/machinery/light/small/directional/north, -/obj/effect/decal/cleanable/blood/gibs/old, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"fx" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Medical Wing"; - req_access = list("syndicate") - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "interdyne-medbay" - }, -/turf/open/floor/iron/white/side{ - dir = 4 - }, -/area/ruin/syndicate_lava_base/medbay) -"fB" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"fE" = ( -/obj/machinery/atmospherics/miner/oxygen, -/turf/open/floor/engine/o2, -/area/ruin/syndicate_lava_base/engineering) -"fF" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"fG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"fO" = ( -/obj/machinery/light/small/directional/west, -/obj/structure/rack, -/obj/item/clothing/mask/gas/syndicate, -/obj/item/clothing/mask/gas/syndicate, -/obj/item/clothing/mask/gas/syndicate, -/obj/item/clothing/mask/gas/syndicate, -/turf/open/floor/iron/edge{ - dir = 4 - }, -/area/ruin/syndicate_lava_base/main) -"ge" = ( -/obj/machinery/griddle, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"gh" = ( -/obj/machinery/computer/security/telescreen/entertainment/directional/east, -/obj/structure/table/reinforced/rglass, -/obj/item/scissors, -/obj/item/hairbrush/tactical, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"gj" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/structure/table/reinforced, -/obj/item/fakeartefact{ - possible = list(/obj/item/kinetic_crusher) - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"gm" = ( -/obj/structure/bookcase/random/reference, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"gn" = ( -/obj/machinery/light/directional/west, -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/shaftminer/ice{ - dir = 4 - }, -/turf/open/floor/iron/smooth_edge{ - dir = 4 - }, -/area/ruin/syndicate_lava_base/cargo) -"gp" = ( -/obj/machinery/light/floor, -/obj/machinery/cryo_cell, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"gs" = ( -/obj/structure/table, -/obj/item/storage/box/drinkingglasses{ - pixel_y = 10 - }, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"gy" = ( -/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/ruin/syndicate_lava_base/cargo) -"gz" = ( -/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/corner{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"gA" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ - name = "euthanization chamber freezer"; - dir = 4; - initialize_directions = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/testlab) -"gB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/chair/office/light{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/virology) -"gF" = ( -/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 = 10 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"gG" = ( -/obj/structure/dresser, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"gL" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/engineering) -"gN" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Medical Wing"; - req_access = list("syndicate") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/white/side{ - dir = 4 - }, -/area/ruin/syndicate_lava_base/medbay) -"gT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"gY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/dark_blue, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"gZ" = ( -/obj/machinery/airalarm/directional/north{ - req_access = list("syndicate") - }, -/obj/machinery/microwave{ - pixel_y = 9 - }, -/obj/structure/table/reinforced, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"ha" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/machinery/door/poddoor{ - id = "interdynedeckofficer" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"hb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"hr" = ( -/obj/machinery/hydroponics/constructable, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/turf/open/floor/grass, -/area/ruin/syndicate_lava_base/bar) -"ht" = ( -/obj/structure/railing, -/obj/structure/rack/shelf, -/obj/effect/turf_decal/box/white, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"hu" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/vending/autodrobe{ - onstation = 0 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/syndicate_lava_base/dormitories) -"hz" = ( -/obj/machinery/chem_dispenser/fullupgrade, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"hA" = ( -/obj/item/paper/guides/jobs/medical/morgue, -/obj/structure/table/reinforced, -/obj/item/storage/backpack/duffelbag/syndie/surgery, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"hI" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/effect/turf_decal/siding/thinplating/light{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/closet/crate/freezer/blood, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"hL" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"hT" = ( -/obj/machinery/photocopier, -/obj/machinery/light/directional/south, -/turf/open/floor/wood/large, -/area/ruin/syndicate_lava_base/dormitories) -"hU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/cargo) -"ie" = ( -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/checker, -/area/ruin/syndicate_lava_base/bar) -"ih" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/item/reagent_containers/cup/glass/shaker{ - pixel_x = 6; - pixel_y = 2 - }, -/obj/item/reagent_containers/cup/rag{ - pixel_x = -4; - pixel_y = 3 - }, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/bar) -"it" = ( -/obj/machinery/door/airlock/engineering{ - name = "Engineering" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/engineering) -"iw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/conveyor{ - id = "interdynedisp"; - dir = 1 - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"iy" = ( -/obj/machinery/suit_storage_unit/mining, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"iB" = ( -/obj/structure/sign/directions/vault{ - dir = 8; - pixel_y = 30 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"iG" = ( -/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 = 6 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"iL" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 8 - }, -/obj/machinery/firealarm/directional/south{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"iQ" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/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, -/area/ruin/syndicate_lava_base/medbay) -"iS" = ( -/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 = 6 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"iX" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/item/reagent_containers/cup/glass/drinkingglass{ - pixel_y = 8 - }, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/bar) -"iY" = ( -/obj/machinery/atmospherics/miner/nitrogen, -/turf/open/floor/engine/n2, -/area/ruin/syndicate_lava_base/engineering) -"iZ" = ( -/obj/machinery/door/airlock{ - name = "Disposals" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"jb" = ( -/obj/machinery/chem_master, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"jf" = ( -/obj/effect/turf_decal/vg_decals/department/bar{ - dir = 1 - }, -/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, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"jg" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/machinery/portable_atmospherics/canister/anesthetic_mix, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"jm" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/obj/machinery/door/window/survival_pod{ - req_access = list("syndicate") - }, -/turf/open/floor/iron/white/side{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/medbay) -"jn" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 1 - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/main) -"jo" = ( -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"jt" = ( -/obj/structure/closet/secure_closet/personal/cabinet, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"ju" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/main) -"jw" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 1 - }, -/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/ruin/syndicate_lava_base/cargo) -"jy" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 6 - }, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"jA" = ( -/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, -/area/ruin/syndicate_lava_base/main) -"jH" = ( -/obj/structure/table/wood, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/toy/crayon/spraycan{ - pixel_y = 9; - pixel_x = 4 - }, -/obj/item/toy/crayon/spraycan{ - pixel_y = 9; - pixel_x = -5 - }, -/obj/structure/sign/painting/large/library{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"jI" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/structure/table, -/obj/item/key/atv, -/turf/open/floor/iron/smooth_large, -/area/ruin/syndicate_lava_base/cargo) -"jJ" = ( -/obj/machinery/door/airlock/grunge{ - name = "Bar" - }, -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/ruin/syndicate_lava_base/bar) -"jR" = ( -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"jT" = ( -/obj/machinery/light/directional/south, -/obj/machinery/vending/medical/syndicate_access{ - onstation = 0 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"jV" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/turf/open/floor/engine/n2, -/area/ruin/syndicate_lava_base/engineering) -"jZ" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"kb" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 9 - }, -/turf/open/lava/plasma/ice_moon, -/area/ruin/syndicate_lava_base/testlab) -"kc" = ( -/obj/structure/toilet{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/showroomfloor, -/area/ruin/syndicate_lava_base/cargo) -"kf" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/testlab) -"kh" = ( -/obj/machinery/computer/operating, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"kk" = ( -/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, -/area/ruin/syndicate_lava_base/cargo) -"kl" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark/corner, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"km" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/directional/north, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/testlab) -"kp" = ( -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/dark_blue, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"kr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/testlab) -"ks" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 4 - }, -/obj/effect/turf_decal/tile/bar{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"kw" = ( -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/testlab) -"kE" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/lava/plasma/ice_moon, -/area/ruin/syndicate_lava_base/medbay) -"kL" = ( -/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 = 6 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"kN" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 6; - faction = list("Syndicate","neutral") - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/main) -"kU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"kV" = ( -/obj/machinery/vending/drugs{ - name = "\improper SyndiDrug Plus"; - onstation = 0 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"kZ" = ( -/obj/machinery/firealarm/directional/west{ - dir = 4; - pixel_x = -28 - }, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"lb" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/table, -/obj/item/toy/cards/deck/cas/black{ - pixel_x = 3; - pixel_y = 11 - }, -/turf/open/floor/plating/icemoon, -/area/ruin/syndicate_lava_base/medbay) -"lc" = ( -/obj/structure/chair/sofa/left/maroon{ - dir = 8 - }, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"lj" = ( -/obj/structure/cable, -/turf/open/floor/catwalk_floor/iron_dark, -/area/ruin/syndicate_lava_base/testlab) -"ln" = ( -/obj/machinery/smartfridge/extract/preloaded, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/testlab) -"lu" = ( -/obj/structure/railing{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/vehicle/ridden/atv/snowmobile/syndicate{ - dir = 4 - }, -/obj/effect/turf_decal/box/red, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"lD" = ( -/obj/machinery/smartfridge/food, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"lH" = ( -/obj/structure/ore_box, -/obj/effect/turf_decal/box/white, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"lP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/bookcase/random/nonfiction, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"lT" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/obj/effect/turf_decal/siding/thinplating/dark/corner, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/airalarm/directional/south{ - req_access = list("syndicate") - }, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"lZ" = ( -/obj/structure/railing, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"ma" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"mg" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"mp" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"mr" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"my" = ( -/obj/machinery/door/airlock/research{ - name = "Xenobiology Lab" - }, -/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/syndicate/general, -/turf/open/floor/iron/dark/side, -/area/ruin/syndicate_lava_base/testlab) -"mA" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/lava/plasma/ice_moon, -/area/ruin/syndicate_lava_base/engineering) -"mG" = ( -/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/ruin/syndicate_lava_base/testlab) -"mP" = ( -/obj/item/toy/figure/syndie, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) -"mV" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/tile/dark_red, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"nb" = ( -/obj/machinery/light/directional/west, -/obj/structure/closet/crate/bin, -/turf/open/floor/iron/checker, -/area/ruin/syndicate_lava_base/bar) -"nc" = ( -/obj/structure/chair/sofa/right/maroon, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"nd" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"nn" = ( -/obj/machinery/light/directional/south, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"no" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"nq" = ( -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"nr" = ( -/obj/item/circuitboard/machine/ore_redemption, -/obj/item/assembly/igniter, -/obj/structure/frame/machine{ - anchored = 1; - state = 2; - icon_state = "box_1" - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"ns" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/testlab) -"nx" = ( -/obj/machinery/conveyor{ - dir = 6; - id = "interdynedisp" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"ny" = ( -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/deckofficer{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"nz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/painting/library{ - pixel_x = 32 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"nA" = ( -/obj/structure/table/glass, -/obj/machinery/firealarm/directional/west{ - dir = 4 - }, -/obj/machinery/reagentgrinder, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"nC" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Medical Wing"; - req_access = list("syndicate") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"nJ" = ( -/obj/structure/rack/shelf, -/obj/effect/turf_decal/box/white, -/obj/item/construction/rcd/loaded, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"nP" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating/dark, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"nS" = ( -/turf/open/floor/iron/checker, -/area/ruin/syndicate_lava_base/bar) -"nT" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"ob" = ( -/obj/effect/turf_decal/tile/dark_blue, -/obj/structure/cable, -/turf/open/floor/iron/large, -/area/ruin/syndicate_lava_base/telecomms) -"oc" = ( -/obj/machinery/turretid{ - ailock = 1; - control_area = "/area/ruin/syndicate_lava_base/main"; - dir = 1; - icon_state = "control_kill"; - lethal = 1; - name = "Base turret controls"; - pixel_y = 30; - req_access = list("syndicate") - }, -/turf/open/floor/iron/edge, -/area/ruin/syndicate_lava_base/main) -"oe" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"of" = ( -/obj/effect/turf_decal/tile/dark_blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/chair/sofa/bench/right, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"oj" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 4 - }, -/obj/item/storage/bag/tray, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"ol" = ( -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"op" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"ov" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"ox" = ( -/obj/machinery/light/directional/west, -/obj/structure/sign/painting/library{ - pixel_x = -32 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"oz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/firealarm/directional/north{ - dir = 2 - }, -/turf/open/floor/iron/smooth_edge, -/area/ruin/syndicate_lava_base/medbay) -"oA" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/vehicle/ridden/atv/snowmobile/syndicate{ - dir = 4 - }, -/obj/effect/turf_decal/box/red, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"oB" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"oE" = ( -/obj/machinery/skill_station, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"oG" = ( -/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/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/bar) -"oN" = ( -/obj/structure/chair/office/light{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"oO" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/computer/camera_advanced/xenobio{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/testlab) -"oP" = ( -/obj/machinery/power/rtg/advanced, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"oS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"oV" = ( -/obj/machinery/light/directional/north, -/obj/machinery/deepfryer, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"oW" = ( -/obj/effect/turf_decal/siding/thinplating/light{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/closet/crate/freezer/sansufentanyl, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"oZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/directional/south, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"pc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/window/survival_pod{ - req_access = list("syndicate") - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/virology) -"pe" = ( -/obj/machinery/chem_master/condimaster{ - name = "BrewMaster 3000" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark/small, -/area/ruin/syndicate_lava_base/bar) -"pg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"ph" = ( -/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 = 9 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"pk" = ( -/obj/machinery/light/directional/east, -/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/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"pp" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 8 - }, -/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/ruin/syndicate_lava_base/cargo) -"pr" = ( -/obj/structure/railing{ - dir = 8 - }, -/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/ruin/syndicate_lava_base/cargo) -"pF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"pH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"pI" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/smooth_edge, -/area/ruin/syndicate_lava_base/cargo) -"pJ" = ( -/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/dark, -/area/ruin/syndicate_lava_base/cargo) -"pK" = ( -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/public/glass{ - name = "Kitchen-Botany" - }, -/turf/open/floor/iron/dark/small, -/area/ruin/syndicate_lava_base/bar) -"pN" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"pU" = ( -/obj/machinery/camera/autoname/directional/west{ - network = list("intd13") - }, -/turf/open/lava/plasma/ice_moon, -/area/ruin/syndicate_lava_base/engineering) -"qa" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/virology) -"qd" = ( -/obj/machinery/door/airlock/maintenance/external, -/obj/structure/fans/tiny, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"qe" = ( -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"qg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"qp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"qA" = ( -/obj/machinery/shower/directional/west, -/obj/structure/drain, -/obj/structure/curtain, -/turf/open/floor/iron/showroomfloor, -/area/ruin/syndicate_lava_base/cargo) -"qC" = ( -/obj/machinery/light/directional/south, -/obj/structure/table, -/obj/machinery/fax{ - fax_name = "Interdyne Pharmaceuticals"; - pixel_y = 7; - name = "Interdyne Fax Machine" - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"qH" = ( -/obj/structure/dresser, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"qK" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/door/airlock{ - name = "Cabin 2"; - id_tag = "IDynbin2" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"qS" = ( -/obj/structure/table/wood, -/obj/machinery/computer/libraryconsole/bookmanagement, -/turf/open/floor/wood/large, -/area/ruin/syndicate_lava_base/dormitories) -"qU" = ( -/obj/machinery/light/directional/north, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"qV" = ( -/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, -/area/ruin/syndicate_lava_base/cargo) -"qY" = ( -/obj/machinery/light/directional/north, -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"rf" = ( -/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, -/area/ruin/syndicate_lava_base/cargo) -"rg" = ( -/turf/open/floor/carpet/orange, -/area/ruin/syndicate_lava_base/cargo) -"rv" = ( -/obj/effect/turf_decal/tile/dark_red{ - dir = 1 - }, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"ry" = ( -/obj/machinery/vending/hydroseeds{ - onstation = 0 - }, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"rD" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/table/glass, -/obj/item/reagent_containers/spray/cleaner{ - pixel_x = 10 - }, -/obj/item/healthanalyzer, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/virology) -"rG" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Medical Wing"; - req_access = list("syndicate") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron/white/side{ - dir = 4 - }, -/area/ruin/syndicate_lava_base/medbay) -"rP" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"rT" = ( -/obj/structure/table/optable, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"rX" = ( -/obj/effect/turf_decal/siding/thinplating/light{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/table/reinforced, -/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/storage/pill_bottle/mannitol, -/obj/item/reagent_containers/dropper, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"sa" = ( -/obj/structure/bodycontainer/morgue, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"sc" = ( -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"se" = ( -/obj/machinery/door/airlock/command{ - name = "Observation Deck" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/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, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/telecomms) -"sg" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"sm" = ( -/obj/effect/turf_decal/siding/thinplating/dark/end, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"so" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/item/toy/cards/deck/wizoff{ - pixel_y = 6 - }, -/obj/structure/table, -/turf/open/floor/plating/icemoon, -/area/ruin/syndicate_lava_base/testlab) -"sr" = ( -/obj/machinery/light/directional/north, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/turf/open/floor/circuit/telecomms, -/area/ruin/syndicate_lava_base/testlab) -"ss" = ( -/obj/structure/table/wood, -/obj/machinery/light/directional/west, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"st" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/anesthetic_machine, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"sv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/smooth_large, -/area/ruin/syndicate_lava_base/cargo) -"sA" = ( -/obj/machinery/door/airlock{ - name = "Unisex Restroom"; - id_tag = "IDyneWC" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"sB" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"sE" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 5; - faction = list("Syndicate","neutral") - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/main) -"sF" = ( -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"sG" = ( -/obj/machinery/vending/games{ - onstation = 0 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"sL" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"sP" = ( -/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, -/turf/open/floor/holofloor/stairs/right{ - dir = 8 - }, -/area/ruin/syndicate_lava_base/cargo) -"sQ" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/machinery/sleeper/syndie/fullupgrade{ - dir = 4 - }, -/obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/smooth_corner, -/area/ruin/syndicate_lava_base/medbay) -"sR" = ( -/obj/machinery/camera/autoname/directional/south{ - network = list("intd13") - }, -/turf/open/lava/plasma/ice_moon, -/area/ruin/syndicate_lava_base/virology) -"sY" = ( -/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 = 10 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"sZ" = ( -/obj/machinery/porta_turret/syndicate, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/main) -"ta" = ( -/obj/machinery/seed_extractor, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"tc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"td" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/bar) -"tl" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"to" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"tu" = ( -/obj/machinery/camera/autoname/directional/north{ - network = list("intd13") - }, -/turf/open/lava/plasma/ice_moon, -/area/ruin/syndicate_lava_base/dormitories) -"tv" = ( -/obj/structure/sign/departments/engineering/directional/east, -/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/ruin/syndicate_lava_base/bar) -"tw" = ( -/obj/structure/fans/tiny, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/door/airlock/maintenance/external, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/main) -"tx" = ( -/obj/machinery/computer/cryopod/interdyne/directional/west, -/obj/machinery/cryopod{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"tB" = ( -/obj/structure/table/reinforced/rglass, -/obj/item/tattoo_kit{ - pixel_y = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"tJ" = ( -/obj/structure/bookcase/random/fiction, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"tM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"tS" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"tT" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/button/door/directional/east{ - specialfunctions = 4; - normaldoorcontrol = 1; - name = "Dorm Bolt Control"; - id = "IDyneDO" - }, -/turf/open/floor/carpet/orange, -/area/ruin/syndicate_lava_base/cargo) -"ub" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"ue" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/camera/xray{ - c_tag = "Xenobio East"; - dir = 4; - network = list("fsci") - }, -/obj/machinery/door/window/survival_pod{ - req_access = list("syndicate"); - dir = 1; - name = "Slime Pacification Chamber" - }, -/obj/effect/turf_decal/tile/dark_red{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 1 - }, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"uk" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/turf/open/floor/engine/o2, -/area/ruin/syndicate_lava_base/engineering) -"um" = ( -/obj/structure/bookcase/random/adult, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"up" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"us" = ( -/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/yjunction{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"uw" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/corner{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"ux" = ( -/obj/structure/sign/departments/medbay/alt/directional/east, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"uA" = ( -/obj/structure/table/reinforced, -/obj/item/storage/backpack/duffelbag/syndie/surgery, -/obj/machinery/airalarm/directional/north, -/obj/item/healthanalyzer{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/clothing/mask/breath/anesthetic{ - pixel_x = 8; - pixel_y = 5 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"uB" = ( -/obj/machinery/door/airlock/vault{ - id_tag = "syndie_lavaland_vault" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron/textured_half, -/area/ruin/syndicate_lava_base/main) -"uQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"uV" = ( -/obj/structure/table/wood, -/obj/item/storage/dice, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"uX" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"vf" = ( -/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, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"vl" = ( -/obj/structure/sign/departments/chemistry/directional/east, -/obj/structure/table/glass, -/obj/item/stack/sheet/mineral/plasma{ - amount = 15 - }, -/obj/item/storage/box/beakers/bluespace, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"vo" = ( -/obj/effect/spawner/random/vending/snackvend, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"vq" = ( -/obj/structure/table/wood, -/obj/item/modular_computer/laptop/preset/syndicate, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"vt" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/iron/checker, -/area/ruin/syndicate_lava_base/bar) -"vv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"vy" = ( -/obj/machinery/button/door/directional/north{ - pixel_y = 34; - id = "interdyneobservation" - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/carpet/royalblack, -/area/ruin/syndicate_lava_base/telecomms) -"vz" = ( -/obj/machinery/shower/directional/north, -/obj/structure/curtain, -/turf/open/floor/iron/checker, -/area/ruin/syndicate_lava_base/bar) -"vB" = ( -/obj/structure/rack, -/obj/item/pickaxe, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"vH" = ( -/obj/structure/tank_holder/anesthetic, -/obj/structure/railing, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"vL" = ( -/obj/structure/table/glass, -/obj/item/storage/box/monkeycubes/syndicate{ - pixel_y = 5 - }, -/obj/item/storage/box/monkeycubes/syndicate{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/slime_extract/grey{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/slime_extract/grey, -/obj/item/slime_extract/grey{ - pixel_x = 2; - pixel_y = -2 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/testlab) -"vT" = ( -/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/ruin/syndicate_lava_base/testlab) -"vW" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"vZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"wa" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"wl" = ( -/obj/machinery/suit_storage_unit/mining, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"wm" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/window/reinforced/plasma/spawner/directional/east, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"wn" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 10; - faction = list("Syndicate","neutral") - }, -/turf/closed/wall/r_wall/syndicate, -/area/ruin/syndicate_lava_base/main) -"wo" = ( -/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 - }, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/bar) -"wr" = ( -/obj/effect/turf_decal/tile/dark_blue, -/obj/effect/turf_decal/tile/dark_blue{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/light_switch/directional/west, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/iron/large, -/area/ruin/syndicate_lava_base/telecomms) -"wu" = ( -/obj/effect/turf_decal/tile/dark_blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"wv" = ( -/obj/machinery/door/airlock/medical{ - name = "Medical Desk" - }, -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 8 - }, -/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/syndicate/general, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"wx" = ( -/obj/structure/chair/comfy/barber_chair{ - dir = 8 - }, -/obj/structure/mirror/directional/west, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"wF" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/firealarm/directional/west{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/engineering) -"wG" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/turf/open/misc/asteroid/snow/icemoon, -/area/ruin/syndicate_lava_base/cargo) -"wN" = ( -/obj/effect/turf_decal/tile/dark_blue{ - dir = 1 - }, -/turf/open/floor/iron/large, -/area/ruin/syndicate_lava_base/telecomms) -"wP" = ( -/obj/machinery/processor/slime, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/testlab) -"wU" = ( -/obj/item/disk/surgery/forgottenship, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/dark_blue, -/obj/item/storage/box/medipens{ - pixel_x = 4; - pixel_y = 13 - }, -/obj/item/reagent_containers/cup/beaker/cryoxadone{ - pixel_x = -6; - pixel_y = 10 - }, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"wX" = ( -/obj/structure/table, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/item/key/atv, -/turf/open/floor/iron/smooth_edge{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/cargo) -"xc" = ( -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"xe" = ( -/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, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/main) -"xf" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 4 - }, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"xl" = ( -/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, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/bar) -"xm" = ( -/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/ruin/syndicate_lava_base/dormitories) -"xo" = ( -/obj/item/bedsheet/dorms_double, -/obj/structure/bed/double, -/obj/machinery/button/door/directional/east{ - specialfunctions = 4; - normaldoorcontrol = 1; - name = "Dorm Bolt Control"; - id = "IDyneBeta" - }, -/turf/open/floor/iron/smooth_large, -/area/ruin/syndicate_lava_base/cargo) -"xq" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - 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/ruin/syndicate_lava_base/bar) -"xs" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Pharmacy"; - req_access = list("syndicate") - }, -/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/syndicate/general, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"xA" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/table, -/obj/item/toy/cards/deck/cas{ - pixel_y = 6 - }, -/turf/open/floor/plating/icemoon, -/area/ruin/syndicate_lava_base/medbay) -"xJ" = ( -/obj/effect/turf_decal/tile/dark_blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/button/door/directional/east{ - id = "interdynemedbay"; - req_access = list("syndicate") - }, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"xP" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/structure/table/reinforced, -/obj/item/fakeartefact{ - possible = list(/obj/item/gun/energy/recharge/kinetic_accelerator) - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"xS" = ( -/obj/structure/frame/machine{ - anchored = 1; - state = 2; - icon_state = "box_1" - }, -/obj/item/circuitboard/machine/stacking_machine, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"xY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"ya" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/reagent_dispensers/fueltank/large, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"yd" = ( -/obj/machinery/button/door/directional/east{ - id = "interdynedeckofficer"; - req_access = list("syndicate") - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"yi" = ( -/obj/structure/sink/directional/south, -/obj/structure/mirror/directional/north, -/turf/open/floor/iron/checker, -/area/ruin/syndicate_lava_base/bar) -"yn" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/structure/disposalpipe/junction{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"yq" = ( -/obj/machinery/bookbinder, -/turf/open/floor/wood/large, -/area/ruin/syndicate_lava_base/dormitories) -"ys" = ( -/turf/open/floor/iron/smooth_edge{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/cargo) -"yu" = ( -/obj/machinery/door/airlock/mining{ - name = "Shaft Miner Dormitory Beta"; - id_tag = "IDyneBeta" - }, -/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/syndicate/general, -/turf/open/floor/iron/smooth_half{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/cargo) -"yy" = ( -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/machinery/door/airlock{ - name = "Barbers" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"yB" = ( -/obj/machinery/vending/barbervend{ - onstation = 0 - }, -/obj/machinery/button/door/directional/east{ - id = "interdynebarbers" - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"yE" = ( -/turf/closed/wall/r_wall/syndicate, -/area/ruin/syndicate_lava_base/testlab) -"yF" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"yG" = ( -/obj/machinery/camera/autoname/directional/east{ - network = list("intd13") - }, -/turf/open/lava/plasma/ice_moon, -/area/ruin/syndicate_lava_base/dormitories) -"yJ" = ( -/obj/machinery/smartfridge/food, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark/small, -/area/ruin/syndicate_lava_base/bar) -"yM" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/syndicate_access, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/testlab) -"yP" = ( -/obj/structure/chair{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/bar) -"yQ" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/medbay) -"yR" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/chair/plastic{ - dir = 8 - }, -/turf/open/floor/plating/icemoon, -/area/ruin/syndicate_lava_base/testlab) -"yY" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner, -/obj/machinery/door/airlock/public/glass{ - name = "Dormitories" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"zd" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/machinery/sleeper/syndie/fullupgrade{ - dir = 4 - }, -/turf/open/floor/iron/smooth_corner{ - dir = 4 - }, -/area/ruin/syndicate_lava_base/medbay) -"zl" = ( -/turf/open/floor/iron/dark/textured_corner{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/bar) -"zp" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/item/kirbyplants/random, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/machinery/airalarm/directional/south{ - req_access = list("syndicate") - }, -/obj/machinery/light_switch/directional/west, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"zq" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/light/directional/east, -/obj/effect/turf_decal/siding/thinplating/dark, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"zu" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"zz" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/effect/turf_decal/vg_decals/atmos/nitrogen{ - dir = 1 - }, -/turf/open/floor/engine/n2, -/area/ruin/syndicate_lava_base/engineering) -"zF" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/dormitories) -"zI" = ( -/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/ruin/syndicate_lava_base/bar) -"zP" = ( -/obj/machinery/button/door{ - id = "syndie_lavaland_vault"; - name = "Vault Bolt Control"; - normaldoorcontrol = 1; - pixel_x = -8; - pixel_y = 24; - req_access = list("syndicate"); - specialfunctions = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"zT" = ( -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"zX" = ( -/obj/structure/bookcase/random/religion, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"Ac" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"Ad" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"Ae" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/effect/turf_decal/tile/dark_red/half{ - dir = 4 - }, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"Am" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"AC" = ( -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/shaftminer/ice, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/smooth_edge, -/area/ruin/syndicate_lava_base/cargo) -"AF" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/bar) -"AN" = ( -/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, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/main) -"AR" = ( -/obj/machinery/camera/autoname/directional/south{ - network = list("intd13") - }, -/turf/open/lava/plasma/ice_moon, -/area/ruin/syndicate_lava_base/cargo) -"AT" = ( -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/shaftminer/ice{ - dir = 4 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/smooth_large, -/area/ruin/syndicate_lava_base/cargo) -"Bf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/showroomfloor, -/area/ruin/syndicate_lava_base/cargo) -"Bn" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/turf/open/floor/iron/white/side, -/area/ruin/syndicate_lava_base/medbay) -"Bp" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - 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/ruin/syndicate_lava_base/medbay) -"Bt" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/structure/flora/rock, -/turf/open/misc/asteroid/snow/icemoon, -/area/ruin/syndicate_lava_base/cargo) -"BA" = ( -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"BB" = ( -/obj/structure/table, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"BC" = ( -/obj/machinery/computer/pandemic, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/virology) -"BE" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/telecomms) -"BF" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"BL" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/power/rtg/advanced, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"BO" = ( -/obj/structure/table, -/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ - dir = 1 - }, -/obj/machinery/airalarm/directional/south{ - req_access = list("syndicate") - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"BR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/engineering) -"BS" = ( -/obj/machinery/chem_heater/withbuffer, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"BT" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_y = 4 - }, -/obj/item/pen{ - pixel_y = 4 - }, -/turf/open/floor/iron/white/side, -/area/ruin/syndicate_lava_base/medbay) -"BZ" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/machinery/portable_atmospherics/pump, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"Ca" = ( -/obj/machinery/vending/syndichem{ - onstation = 0 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"Cc" = ( -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate{ - dir = 1 - }, -/obj/machinery/light/directional/south, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"Cd" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"Ce" = ( -/obj/machinery/computer/security/hos{ - name = "\improper Interdyne camera console"; - network = list("intd13") - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/syndicate_lava_base/telecomms) -"Ch" = ( -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable, -/obj/machinery/power/rtg/advanced, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"Ci" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"Cj" = ( -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"CA" = ( -/turf/open/floor/grass, -/area/ruin/syndicate_lava_base/bar) -"CC" = ( -/obj/structure/table, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/bar) -"CE" = ( -/obj/item/disk/design_disk/limbs/ethereal{ - pixel_y = 2 - }, -/obj/item/disk/design_disk/limbs/felinid{ - pixel_y = 4 - }, -/obj/item/disk/design_disk/limbs/lizard{ - pixel_y = 6 - }, -/obj/item/disk/design_disk/limbs/plasmaman{ - pixel_y = 8 - }, -/obj/structure/table/reinforced, -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/dark_blue, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"CG" = ( -/obj/machinery/light/directional/south, -/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, -/turf/open/floor/catwalk_floor/iron_dark, -/area/ruin/syndicate_lava_base/cargo) -"CK" = ( -/obj/structure/table/glass, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/reagent_dispensers/wall/virusfood/directional/west, -/obj/item/book/manual/wiki/infections{ - pixel_y = 7 - }, -/obj/item/storage/box/beakers{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/storage/box/syringes, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/virology) -"CM" = ( -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"CN" = ( -/obj/machinery/airalarm/directional/north{ - req_access = list("syndicate") - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"CQ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/smooth_edge, -/area/ruin/syndicate_lava_base/cargo) -"CR" = ( -/obj/machinery/door/poddoor{ - id = "interdynedorms" - }, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/dormitories) -"CX" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"CZ" = ( -/obj/structure/closet/secure_closet/personal/cabinet, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"Df" = ( -/obj/machinery/smartfridge/chemistry/virology/preloaded, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/virology) -"Dn" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 4 - }, -/obj/effect/turf_decal/tile/bar{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"Dr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"DA" = ( -/obj/machinery/button/door/directional/west{ - id = "interdynedorms"; - req_access = list("syndicate") - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"DC" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"DE" = ( -/obj/structure/table, -/turf/open/floor/iron/smooth_large, -/area/ruin/syndicate_lava_base/cargo) -"DG" = ( -/obj/item/clothing/mask/gas/syndicate, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/main) -"DH" = ( -/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, -/area/ruin/syndicate_lava_base/main) -"DI" = ( -/obj/effect/turf_decal/tile/bar, -/obj/machinery/vending/boozeomat/syndicate_access{ - onstation = 0 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"DL" = ( -/obj/machinery/door/airlock/mining/glass{ - name = "Cargo Bay" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "interdyne-cargo" - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"DT" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/turf/open/floor/engine/o2, -/area/ruin/syndicate_lava_base/engineering) -"DX" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"DY" = ( -/obj/item/storage/toolbox/syndicate, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"DZ" = ( -/obj/structure/ore_box, -/obj/effect/turf_decal/box/white, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"Eh" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - 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/ruin/syndicate_lava_base/testlab) -"El" = ( -/obj/effect/turf_decal/tile/dark_blue{ - dir = 1 - }, -/obj/machinery/medical_kiosk, -/obj/structure/sign/departments/maint/directional/north, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"En" = ( -/obj/effect/decal/cleanable/oil, -/obj/structure/disposaloutlet{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"Eq" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/carpet/royalblack, -/area/ruin/syndicate_lava_base/telecomms) -"Er" = ( -/obj/structure/lattice/catwalk, -/turf/open/lava/plasma/ice_moon, -/area/ruin/syndicate_lava_base/medbay) -"EA" = ( -/obj/structure/table/reinforced, -/obj/machinery/reagentgrinder, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"ED" = ( -/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, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"EJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"EK" = ( -/obj/machinery/camera/autoname/directional/north{ - network = list("intd13") - }, -/turf/open/lava/plasma/ice_moon, -/area/ruin/syndicate_lava_base/engineering) -"EL" = ( -/obj/item/storage/box/stockparts/deluxe, -/obj/structure/closet/crate, -/obj/item/storage/bag/trash, -/obj/item/mop, -/obj/item/reagent_containers/cup/bucket, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"EO" = ( -/obj/effect/decal/cleanable/oil/streak, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"EP" = ( -/obj/machinery/door/firedoor, -/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, -/area/ruin/syndicate_lava_base/main) -"EQ" = ( -/obj/structure/table, -/obj/machinery/chem_dispenser/drinks/fullupgrade{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"ES" = ( -/obj/machinery/firealarm/directional/east{ - dir = 8 - }, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"EU" = ( -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"EV" = ( -/obj/machinery/stasis{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/airalarm/directional/east{ - req_access = list("syndicate") - }, -/turf/open/floor/iron/smooth_corner{ - dir = 8 - }, -/area/ruin/syndicate_lava_base/medbay) -"Fi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"Fk" = ( -/obj/structure/closet/crate/secure/weapon{ - req_access = list("syndicate") - }, -/obj/item/ammo_box/c9mm{ - pixel_y = 6 - }, -/obj/item/ammo_box/c9mm, -/obj/item/ammo_box/magazine/m9mm{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/ammo_box/magazine/m9mm{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/ammo_box/magazine/m9mm{ - pixel_x = 1; - pixel_y = -1 - }, -/obj/item/ammo_box/magazine/m9mm{ - pixel_x = 4; - pixel_y = -4 - }, -/obj/effect/turf_decal/siding/brown{ - dir = 1 - }, -/obj/machinery/light/directional/south, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"Fl" = ( -/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 - }, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/main) -"Fn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"Fo" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/structure/bed/double{ - dir = 1 - }, -/obj/item/bedsheet/dorms_double{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"Fq" = ( -/obj/structure/table/glass, -/obj/structure/towel_bin, -/obj/item/soap/syndie, -/turf/open/floor/iron/checker, -/area/ruin/syndicate_lava_base/bar) -"Fu" = ( -/obj/machinery/light/directional/west, -/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/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"Fx" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/door/airlock{ - name = "Cabin 4"; - id_tag = "IDynbin4" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"Fy" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"Fz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/airlock/mining{ - name = "Shaft Miner Dormitory Charlie"; - id_tag = "IDyneCharlie" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"FF" = ( -/obj/structure/chair{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/bar) -"FH" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/power/smes/magical{ - desc = "A high-capacity superconducting magnetic energy storage (SMES) unit. Produces power through an unstable bluespace pocket."; - name = "bluespace-powered power storage unit"; - output_level = 200000 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"FK" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/machinery/door/airlock{ - name = "Library Backroom" - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"FO" = ( -/obj/machinery/light/directional/north, -/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, -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/bar) -"FQ" = ( -/obj/structure/rack, -/obj/structure/railing, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"FS" = ( -/obj/machinery/light/directional/south, -/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, -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate{ - dir = 1 - }, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/bar) -"FT" = ( -/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/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"FU" = ( -/obj/structure/sign/directions/science{ - dir = 8; - pixel_x = -32; - pixel_y = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"FV" = ( -/obj/structure/table/reinforced, -/obj/machinery/processor, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"FW" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"Gb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/firealarm/directional/north{ - dir = 2 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"Gd" = ( -/obj/structure/table/reinforced/rglass, -/obj/item/fur_dyer, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"Gh" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/engineering) -"Gl" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"Gm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/smooth_large, -/area/ruin/syndicate_lava_base/cargo) -"Gp" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"Gr" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating/icemoon, -/area/ruin/syndicate_lava_base/medbay) -"Gs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/textured_corner, -/area/ruin/syndicate_lava_base/bar) -"Gv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"Gx" = ( -/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 = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"GA" = ( -/obj/machinery/firealarm/directional/south{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"GB" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"GD" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"GJ" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"GM" = ( -/obj/structure/chair/comfy/black{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"GQ" = ( -/obj/machinery/computer/crew/syndie{ - dir = 4 - }, -/obj/machinery/firealarm/directional/west{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"Hb" = ( -/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, -/area/ruin/syndicate_lava_base/engineering) -"He" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/condiment/enzyme{ - pixel_y = 8 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 6 - }, -/obj/item/reagent_containers/condiment/saltshaker, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"Hn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/departments/engineering/directional/south, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"Ho" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"Hs" = ( -/obj/machinery/door/window/survival_pod{ - req_access = list("syndicate"); - name = "Slime Euthanization Chamber" - }, -/turf/open/floor/circuit/telecomms, -/area/ruin/syndicate_lava_base/testlab) -"Hx" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"Hy" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"HF" = ( -/obj/structure/chair/office, -/obj/machinery/button/door/directional/east{ - id = "interdynelibrary" - }, -/turf/open/floor/wood/large, -/area/ruin/syndicate_lava_base/dormitories) -"HI" = ( -/turf/open/floor/iron/dark/textured_large, -/area/ruin/syndicate_lava_base/bar) -"HL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"HN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"HU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"Ib" = ( -/obj/effect/turf_decal/tile/dark_blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/reagent_dispensers/water_cooler, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"Ie" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"If" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/machinery/airalarm/directional/south{ - req_access = list("syndicate") - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"Ih" = ( -/obj/machinery/atmospherics/components/binary/valve/digital/layer2, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"Ij" = ( -/obj/machinery/light/directional/west, -/obj/structure/closet/secure_closet{ - icon_state = "qm"; - name = "deck offficer's locker"; - req_access = list("syndicate_leader") - }, -/obj/item/clothing/neck/cloak/qm/syndie, -/obj/item/clothing/under/rank/cargo/qm/skyrat/syndie, -/obj/item/circuitboard/computer/advanced_camera, -/obj/item/megaphone/cargo, -/obj/item/clothing/glasses/sunglasses, -/obj/item/ammo_box/magazine/m9mm{ - pixel_x = 1; - pixel_y = -1 - }, -/obj/item/gun/ballistic/automatic/pistol, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"Im" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/door/airlock{ - name = "Bathroom" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"Io" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/smooth_edge{ - dir = 8 - }, -/area/ruin/syndicate_lava_base/cargo) -"Ip" = ( -/obj/machinery/button/door/directional/west{ - id = "IDyneWC"; - normaldoorcontrol = 1; - specialfunctions = 4; - name = "Door Lock" - }, -/obj/machinery/dryer{ - pixel_x = 8; - pixel_y = 20 - }, -/turf/open/floor/iron/checker, -/area/ruin/syndicate_lava_base/bar) -"Is" = ( -/obj/machinery/camera/autoname/directional/east{ - network = list("intd13") - }, -/turf/open/lava/plasma/ice_moon, -/area/ruin/syndicate_lava_base/testlab) -"Iv" = ( -/obj/structure/disposalpipe/junction{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"Iy" = ( -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) -"Iz" = ( -/obj/structure/closet/crate, -/obj/item/storage/toolbox/electrical{ - pixel_y = 4 - }, -/obj/item/storage/toolbox/syndicate, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"IA" = ( -/obj/structure/easel, -/obj/item/canvas/twentythree_nineteen, -/obj/item/canvas/twentythree_twentythree, -/obj/item/canvas/twentythree_twentythree, -/obj/structure/sign/painting/library{ - pixel_x = -32 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"IB" = ( -/obj/machinery/libraryscanner, -/turf/open/floor/wood/large, -/area/ruin/syndicate_lava_base/dormitories) -"IM" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"IP" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"IS" = ( -/obj/machinery/firealarm/directional/south{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/dark_blue, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"Jd" = ( -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"Jj" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/machinery/door/poddoor{ - id = "interdynecargo" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"Jq" = ( -/obj/machinery/chem_dispenser/mutagensaltpeter, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"Jx" = ( -/obj/machinery/door/airlock{ - name = "Bedroom"; - id_tag = "IDyneDO" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"JA" = ( -/obj/effect/turf_decal/vg_decals/department/sci{ - 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, -/area/ruin/syndicate_lava_base/main) -"JM" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/iv_drip, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"JN" = ( -/obj/effect/turf_decal/tile/dark_blue, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/disposal/bin, -/turf/open/floor/iron/large, -/area/ruin/syndicate_lava_base/telecomms) -"JP" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 4 - }, -/obj/effect/turf_decal/tile/bar{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"JQ" = ( -/obj/structure/dresser, -/turf/open/floor/iron/smooth_large, -/area/ruin/syndicate_lava_base/cargo) -"Kb" = ( -/obj/machinery/vending/dorms{ - onstation = 0 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"Kg" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/airalarm/directional/east{ - req_access = list("syndicate") - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/virology) -"Kl" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"Km" = ( -/obj/machinery/door/window/survival_pod{ - dir = 8; - req_access = list("syndicate") - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"Kn" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"Ko" = ( -/obj/effect/turf_decal/tile/dark_blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/chair/sofa/bench/left, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"Kz" = ( -/obj/structure/sign/departments/science/directional/west, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"KC" = ( -/obj/effect/turf_decal/tile/dark_blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/structure/filingcabinet, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"KD" = ( -/obj/machinery/turretid{ - ailock = 1; - control_area = "/area/ruin/syndicate_lava_base/main"; - dir = 1; - icon_state = "control_kill"; - lethal = 1; - name = "Base turret controls"; - pixel_y = 30; - req_access = list("syndicate") - }, -/obj/effect/turf_decal/tile/dark_blue{ - dir = 1 - }, -/turf/open/floor/iron/large, -/area/ruin/syndicate_lava_base/telecomms) -"KP" = ( -/turf/open/floor/iron/smooth_edge{ - dir = 8 - }, -/area/ruin/syndicate_lava_base/cargo) -"KS" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating/corner{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"KW" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"KY" = ( -/obj/machinery/button/flasher{ - id = "IDyneBrigFlash"; - pixel_x = 6; - pixel_y = 34 - }, -/obj/machinery/button/door/directional/north{ - id = "IDyneBrig"; - normaldoorcontrol = 1; - name = "Brig Bolt Control"; - specialfunctions = 4; - req_access = list("syndicate") - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"Lc" = ( -/obj/structure/frame/machine{ - anchored = 1; - state = 2; - icon_state = "box_1" - }, -/obj/item/circuitboard/machine/recycler, -/obj/machinery/conveyor{ - dir = 4; - id = "interdynedisp" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"Ld" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 6 - }, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"Le" = ( -/obj/machinery/door/airlock{ - name = "Library" - }, -/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/syndicate/general, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"Lf" = ( -/obj/machinery/monkey_recycler, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/testlab) -"Lg" = ( -/obj/machinery/light/directional/east, -/obj/machinery/hydroponics/constructable, -/turf/open/floor/grass, -/area/ruin/syndicate_lava_base/bar) -"Lh" = ( -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/maintenance/external{ - name = "Morgue" - }, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"Li" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"Lm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"Lp" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/bar) -"Lw" = ( -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"LA" = ( -/obj/machinery/conveyor{ - dir = 5; - id = "interdynedisp" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"LB" = ( -/obj/machinery/autolathe/hacked, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/testlab) -"LC" = ( -/obj/machinery/conveyor{ - id = "interdynedisp" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"LD" = ( -/obj/machinery/firealarm/directional/east{ - dir = 8 - }, -/obj/machinery/vending/hydronutrients{ - onstation = 0 - }, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"LK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"LM" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/machinery/suit_storage_unit/mining, -/obj/effect/turf_decal/siding/thinplating{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"LP" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"LR" = ( -/obj/structure/table/glass, -/obj/item/storage/box/stockparts/deluxe{ - pixel_x = -6; - pixel_y = 11 - }, -/obj/item/storage/box/stockparts/deluxe{ - pixel_x = 8; - pixel_y = 5 - }, -/obj/item/storage/box/beakers/bluespace{ - pixel_x = -6; - pixel_y = -1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"Mc" = ( -/obj/machinery/cell_charger_multi, -/obj/structure/table/glass, -/obj/item/stock_parts/cell/bluespace, -/obj/machinery/airalarm/directional/west{ - req_access = list("syndicate") - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"Mk" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 10; - faction = list("Syndicate","neutral") - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/main) -"Mn" = ( -/turf/open/floor/iron/smooth_edge{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/medbay) -"Mp" = ( -/obj/machinery/light_switch/directional/south, -/obj/structure/table, -/obj/item/paper_bin{ - pixel_y = 4 - }, -/obj/item/pen{ - pixel_y = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"Mt" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/virology) -"Mu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"My" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/syndicate_access, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/engineering) -"MC" = ( -/obj/effect/turf_decal/siding/wood, -/obj/machinery/door/airlock{ - name = "Cabin 1"; - id_tag = "IDynbin1" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"MD" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"ME" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/syndicate_lava_base/telecomms) -"MG" = ( -/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 = 6 - }, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/main) -"MP" = ( -/obj/structure/frame/computer{ - anchored = 1; - dir = 4 - }, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/testlab) -"MR" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/structure/flora/rock/pile, -/turf/open/misc/asteroid/snow/icemoon, -/area/ruin/syndicate_lava_base/cargo) -"MT" = ( -/obj/machinery/light_switch/directional/north, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"Na" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/turf/open/floor/engine/n2, -/area/ruin/syndicate_lava_base/engineering) -"Ns" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/mob/living/carbon/human/species/monkey{ - ai_controller = null; - faction = list("neutral","Syndicate") - }, -/obj/structure/chair/office/light, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"Nv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/button/door/directional/west{ - specialfunctions = 4; - id = "IDyneDelta"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1 - }, -/turf/open/floor/iron/smooth_edge{ - dir = 4 - }, -/area/ruin/syndicate_lava_base/cargo) -"Ny" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/table, -/turf/open/floor/iron/dark/textured_corner{ - dir = 8 - }, -/area/ruin/syndicate_lava_base/bar) -"NB" = ( -/obj/machinery/door/poddoor{ - id = "interdynemedbay" - }, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"NJ" = ( -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"NK" = ( -/obj/machinery/light/directional/north, -/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, -/turf/open/floor/catwalk_floor/iron_dark, -/area/ruin/syndicate_lava_base/cargo) -"NS" = ( -/obj/structure/closet/secure_closet/freezer/meat{ - req_access = list("syndicate") - }, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"NV" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"NY" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"Oc" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/light/directional/north, -/obj/structure/table/glass, -/obj/structure/bedsheetbin, -/obj/machinery/airalarm/directional/north{ - req_access = list("syndicate") - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/syndicate_lava_base/dormitories) -"Oe" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"Ok" = ( -/obj/structure/displaycase{ - alert = 0; - desc = "A display case containing an expensive forgery, probably."; - req_access = list("syndicate"); - start_showpiece_type = /obj/item/fakeartefact - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"Ol" = ( -/obj/machinery/firealarm/directional/north{ - dir = 2 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"Os" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"Ou" = ( -/obj/structure/table/reinforced, -/obj/effect/spawner/random/food_or_drink/donkpockets{ - pixel_y = 7; - pixel_x = 10 - }, -/obj/item/storage/box/donkpockets{ - pixel_y = 5; - pixel_x = -7 - }, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"Ov" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "intdynn2"; - dir = 1 - }, -/turf/open/floor/engine/n2, -/area/ruin/syndicate_lava_base/engineering) -"Ow" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "intdynserver"; - dir = 1; - external_pressure_bound = 120; - name = "server vent" - }, -/turf/open/floor/circuit/telecomms, -/area/ruin/syndicate_lava_base/testlab) -"Oz" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Medical Wing"; - req_access = list("syndicate") - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "interdyne-medbay" - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"OD" = ( -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"OH" = ( -/obj/machinery/vending/cigarette/syndicate{ - onstation = 0 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"OI" = ( -/obj/machinery/vending/dinnerware{ - onstation = 0 - }, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"ON" = ( -/obj/machinery/limbgrower, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/dark_blue, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"OP" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/camera/xray{ - c_tag = "Xenobio West"; - dir = 8; - network = list("fsci") - }, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"OQ" = ( -/obj/structure/table/glass, -/obj/item/storage/box/syringes{ - pixel_x = 5; - pixel_y = 10 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/item/storage/bag/xeno, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/testlab) -"OV" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/machinery/computer/security/telescreen/entertainment/directional/east, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/bar) -"Pc" = ( -/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/plastitanium, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/testlab) -"Pf" = ( -/obj/effect/turf_decal/tile/dark_blue, -/obj/effect/turf_decal/tile/dark_blue{ - dir = 1 - }, -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/structure/cable, -/turf/open/floor/iron/large, -/area/ruin/syndicate_lava_base/telecomms) -"Pm" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"Pn" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/machinery/light/directional/south, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"Po" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"Pq" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/machinery/door/poddoor{ - id = "interdynelibrary" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/testlab) -"Pr" = ( -/obj/machinery/suit_storage_unit/syndicate/chameleon, -/turf/open/floor/iron/corner{ - dir = 4 - }, -/area/ruin/syndicate_lava_base/main) -"Pt" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"Pv" = ( -/obj/structure/closet/crate, -/obj/item/vending_refill/wardrobe/syndie_wardrobe, -/obj/item/reagent_containers/cup/coffeepot, -/obj/item/coffee_cartridge/decaf, -/obj/item/coffee_cartridge/decaf, -/obj/item/coffee_cartridge/fancy, -/obj/item/coffee_cartridge/fancy, -/obj/item/coffee_cartridge/bootleg, -/obj/item/coffee_cartridge/bootleg, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"Pw" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating/icemoon, -/area/ruin/syndicate_lava_base/testlab) -"PB" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 4 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"PG" = ( -/obj/structure/chair/wood{ - dir = 1 - }, -/obj/structure/sign/painting/library{ - pixel_x = -32 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"PI" = ( -/obj/structure/sink/directional/west, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"PK" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/tile/dark_red{ - dir = 4 - }, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"PO" = ( -/obj/machinery/door/poddoor{ - id = "interdynecargo" - }, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"PQ" = ( -/obj/machinery/light/directional/north, -/obj/structure/table/glass, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/clothing/glasses/hud/health, -/obj/item/reagent_containers/dropper{ - pixel_y = -6 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/virology) -"PW" = ( -/obj/machinery/door/window/survival_pod{ - req_access = list("syndicate") - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"Qi" = ( -/obj/structure/sink/directional/west, -/obj/structure/mirror/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/showroomfloor, -/area/ruin/syndicate_lava_base/cargo) -"Qq" = ( -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate{ - dir = 8 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"Qr" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/effect/turf_decal/vg_decals/atmos/oxygen{ - dir = 1 - }, -/turf/open/floor/engine/o2, -/area/ruin/syndicate_lava_base/engineering) -"Qx" = ( -/obj/structure/chair/office/light{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/testlab) -"QK" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/structure/fans/tiny, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/machinery/door/airlock/security/old{ - name = "Brig Hold"; - id_tag = "IDyneBrig" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"QN" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"QU" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/dormitories) -"Rd" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 8 - }, -/obj/machinery/door/airlock/public/glass{ - name = "Bar" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"Re" = ( -/obj/structure/bed/maint, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"Rl" = ( -/obj/structure/railing, -/obj/effect/turf_decal/loading_area, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"Ro" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/obj/machinery/door/window/survival_pod{ - req_access = list("syndicate") - }, -/turf/open/floor/iron/white/side{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/bar) -"Rv" = ( -/obj/machinery/door/airlock{ - name = "Library Backroom" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/wood/large, -/area/ruin/syndicate_lava_base/dormitories) -"RE" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"RG" = ( -/obj/structure/closet/crate/secure/gear{ - req_access = list("syndicate") - }, -/obj/item/clothing/glasses/night, -/obj/item/clothing/glasses/night, -/obj/item/clothing/glasses/night, -/obj/item/storage/belt/military, -/obj/item/storage/belt/military, -/obj/item/clothing/mask/gas/syndicate, -/obj/item/clothing/mask/gas/syndicate, -/obj/item/clothing/shoes/combat, -/obj/item/clothing/shoes/combat, -/obj/item/clothing/under/syndicate/combat, -/obj/item/clothing/under/syndicate/combat, -/obj/item/clothing/gloves/combat, -/obj/item/clothing/gloves/combat, -/obj/item/card/id/advanced/chameleon, -/obj/item/card/id/advanced/chameleon, -/obj/item/card/id/advanced/chameleon, -/obj/item/radio/headset/interdyne, -/obj/item/radio/headset/interdyne, -/obj/item/radio/headset/interdyne, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"RH" = ( -/obj/machinery/portable_atmospherics/canister/bz, -/obj/machinery/atmospherics/components/unary/portables_connector, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/testlab) -"RM" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"RN" = ( -/obj/machinery/airalarm/directional/south{ - req_access = list("syndicate") - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"RQ" = ( -/obj/machinery/modular_computer/preset/curator{ - dir = 1 - }, -/turf/open/floor/wood/large, -/area/ruin/syndicate_lava_base/dormitories) -"RV" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/cargo) -"RZ" = ( -/obj/machinery/flasher/directional/south{ - pixel_x = -6; - id = "IDyneBrigFlash" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"Sb" = ( -/obj/effect/decal/cleanable/oil, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"Sd" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/machinery/door/poddoor{ - id = "interdyneobservation" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/telecomms) -"Se" = ( -/obj/structure/chair/office/light, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"Sg" = ( -/obj/machinery/camera/autoname/directional/west{ - network = list("intd13") - }, -/turf/open/lava/plasma/ice_moon, -/area/ruin/syndicate_lava_base/medbay) -"Sh" = ( -/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/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/main) -"Sm" = ( -/obj/structure/chair/stool/bar{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"St" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"SG" = ( -/obj/structure/sign/departments/cargo/directional/north, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"SH" = ( -/obj/structure/table, -/obj/machinery/coffeemaker, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/carpet/royalblack, -/area/ruin/syndicate_lava_base/telecomms) -"SJ" = ( -/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 = 8 - }, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/bar) -"SK" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/door/airlock{ - name = "Cabin 3"; - id_tag = "IDynbin3" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"SM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/engineering) -"SY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/engineering) -"SZ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/ruin/syndicate_lava_base/cargo) -"Tc" = ( -/obj/machinery/firealarm/directional/east{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"Td" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 8 - }, -/obj/item/folder/white, -/turf/open/floor/iron/white/side, -/area/ruin/syndicate_lava_base/medbay) -"Tf" = ( -/obj/machinery/camera/autoname/directional/west{ - pixel_y = -18; - network = list("intd13") - }, -/turf/open/lava/plasma/ice_moon, -/area/ruin/syndicate_lava_base/medbay) -"Tk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"Tl" = ( -/obj/machinery/oven/range, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"Tm" = ( -/obj/structure/closet/secure_closet/personal/cabinet, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"Tn" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/button/door/directional/west{ - id = "interdynescience"; - req_access = list("syndicate") - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"Tu" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/structure/table/glass, -/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/dark, -/area/ruin/syndicate_lava_base/virology) -"Tv" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 9; - faction = list("Syndicate","neutral") - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/main) -"TB" = ( -/obj/machinery/light_switch/directional/west, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"TC" = ( -/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, -/turf/open/floor/catwalk_floor/iron_dark, -/area/ruin/syndicate_lava_base/cargo) -"TH" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plating/icemoon, -/area/ruin/syndicate_lava_base/engineering) -"TI" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"TO" = ( -/obj/machinery/door/airlock/mining/glass{ - name = "Cargo Bay" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "interdyne-cargo" - }, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/cargo) -"TT" = ( -/obj/machinery/atmospherics/components/trinary/mixer/airmix/inverse{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"Ua" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/cargo) -"Ud" = ( -/obj/machinery/computer/security/hos{ - name = "Local station camera console"; - network = list("ss13","labor","mine","auxbase") - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/syndicate_lava_base/telecomms) -"Ue" = ( -/obj/structure/chair/office/light{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"Uf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/button/door/directional/north{ - name = "Dorm Bolt Control"; - id = "IDynbin4"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"Uj" = ( -/obj/structure/sign/departments/xenobio/directional/west, -/obj/structure/closet/crate, -/obj/item/clothing/neck/stethoscope, -/obj/item/choice_beacon/music, -/obj/item/choice_beacon/music, -/turf/open/floor/wood/large, -/area/ruin/syndicate_lava_base/dormitories) -"Uo" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/light/directional/north, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"Uq" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating/corner, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"Ut" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"UE" = ( -/obj/structure/flora/bush/flowers_br, -/obj/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/grass, -/area/ruin/syndicate_lava_base/medbay) -"UI" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/structure/bed/double, -/obj/item/bedsheet/qm/double, -/turf/open/floor/carpet/orange, -/area/ruin/syndicate_lava_base/cargo) -"UO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"UP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"UT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/smooth_edge{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/cargo) -"UV" = ( -/obj/item/circuitboard/machine/ore_silo, -/obj/structure/frame/machine{ - anchored = 1; - state = 2; - icon_state = "box_1" - }, -/turf/open/floor/iron/corner, -/area/ruin/syndicate_lava_base/main) -"UX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/testlab) -"Ve" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/airalarm/directional/east{ - req_access = list("syndicate") - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/engineering) -"Vk" = ( -/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, -/area/ruin/syndicate_lava_base/medbay) -"Vn" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"Vp" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/structure/rack, -/obj/item/pipe_dispenser, -/obj/item/construction/rcd, -/obj/machinery/light_switch/directional/north, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/engineering) -"Vr" = ( -/obj/machinery/chem_mass_spec, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"Vs" = ( -/obj/machinery/computer/terminal/derelict/security{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/carpet/royalblack, -/area/ruin/syndicate_lava_base/telecomms) -"Vt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, -/turf/open/floor/iron/smooth_large, -/area/ruin/syndicate_lava_base/cargo) -"Vu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/button/door/directional/west{ - specialfunctions = 4; - id = "IDynbin1"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"Vy" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"Vz" = ( -/obj/machinery/hydroponics/constructable, -/turf/open/floor/grass, -/area/ruin/syndicate_lava_base/bar) -"VC" = ( -/obj/machinery/light/directional/south, -/turf/open/floor/grass, -/area/ruin/syndicate_lava_base/bar) -"VE" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Bar" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"VJ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/chair/plastic{ - dir = 4 - }, -/turf/open/floor/plating/icemoon, -/area/ruin/syndicate_lava_base/testlab) -"VK" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/power/rtg/advanced, -/obj/machinery/power/terminal, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"VL" = ( -/obj/machinery/door/poddoor{ - id = "interdynescience" - }, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/testlab) -"VM" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/smooth_edge{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/cargo) -"VO" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/medbay) -"VP" = ( -/obj/structure/chair/sofa/corner/maroon, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"VQ" = ( -/obj/structure/fans/tiny, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/testlab) -"VW" = ( -/obj/machinery/suit_storage_unit/mining, -/obj/machinery/airalarm/directional/north{ - req_access = list("syndicate") - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"Wa" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"Wp" = ( -/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, -/area/ruin/syndicate_lava_base/cargo) -"Wt" = ( -/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 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"Wu" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"Wx" = ( -/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/syndicate/general, -/obj/machinery/door/airlock/hydroponics{ - name = "Hydroponics" - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"Wz" = ( -/obj/structure/table/reinforced, -/obj/item/kitchen/rollingpin, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"WC" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/window/reinforced/plasma/spawner/directional/east, -/obj/item/kirbyplants/random, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"WD" = ( -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"WE" = ( -/obj/machinery/door/airlock/mining{ - name = "Shaft Miner Dormitory Alpha"; - id_tag = "IDyneAlpha" - }, -/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/syndicate/general, -/turf/open/floor/iron/smooth_half{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/cargo) -"WF" = ( -/obj/machinery/door/airlock/maintenance/external, -/obj/structure/fans/tiny, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/main) -"WK" = ( -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"WM" = ( -/obj/machinery/camera/autoname/directional/north{ - network = list("intd13") - }, -/turf/open/lava/plasma/ice_moon, -/area/ruin/syndicate_lava_base/bar) -"WS" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Dormitories" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"WX" = ( -/obj/machinery/flasher/directional/north{ - id = "IDyneBrigFlash" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"Xa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/frame/machine{ - anchored = 1; - state = 2; - icon_state = "box_1" - }, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/testlab) -"Xc" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"Xh" = ( -/obj/machinery/biogenerator, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark/small, -/area/ruin/syndicate_lava_base/bar) -"Xo" = ( -/obj/machinery/smartfridge/organ, -/obj/structure/railing, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"Xq" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"Xw" = ( -/obj/machinery/light/directional/west, -/obj/machinery/firealarm/directional/west{ - dir = 4; - pixel_x = -28 - }, -/obj/structure/chair/office/light{ - dir = 1 - }, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"Xz" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/vending/clothing{ - onstation = 0 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/syndicate_lava_base/dormitories) -"XC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"XD" = ( -/obj/machinery/washing_machine, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/syndicate_access, -/turf/open/floor/iron/cafeteria, -/area/ruin/syndicate_lava_base/dormitories) -"XH" = ( -/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 = 9 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"XO" = ( -/obj/machinery/firealarm/directional/east{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"XP" = ( -/obj/structure/lattice/catwalk, -/obj/item/storage/toolbox/mechanical, -/turf/open/lava/plasma/ice_moon, -/area/ruin/syndicate_lava_base/testlab) -"XS" = ( -/obj/machinery/door/airlock/research{ - name = "Science Division" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "interdyne-science" - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"XT" = ( -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/bar) -"XU" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, -/obj/machinery/light/directional/east, -/obj/structure/closet/secure_closet/ds2atmos{ - anchorable = 0; - anchored = 1 - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"XW" = ( -/obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/machinery/button/door/directional/east{ - specialfunctions = 4; - normaldoorcontrol = 1; - name = "Dorm Bolt Control"; - id = "IDyneCharlie" - }, -/turf/open/floor/iron/smooth_large, -/area/ruin/syndicate_lava_base/cargo) -"Ya" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/east, -/obj/effect/spawner/random/trash/grime, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"Yb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/button/door/directional/west{ - specialfunctions = 4; - id = "IDynbin2"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"Yc" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/bar) -"Yf" = ( -/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/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"Yk" = ( -/obj/item/bedsheet/dorms_double, -/obj/structure/bed/double, -/obj/machinery/button/door/directional/east{ - specialfunctions = 4; - normaldoorcontrol = 1; - name = "Dorm Bolt Control"; - id = "IDyneAlpha" - }, -/turf/open/floor/iron/smooth_large, -/area/ruin/syndicate_lava_base/cargo) -"Yl" = ( -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate, -/obj/machinery/light/directional/north, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"Ym" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"Yo" = ( -/obj/machinery/light/directional/east, -/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/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"Yv" = ( -/obj/structure/chair, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/bar) -"YA" = ( -/obj/machinery/computer/crew/syndie{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/carpet/royalblack, -/area/ruin/syndicate_lava_base/telecomms) -"YB" = ( -/obj/structure/lattice/catwalk, -/turf/open/lava/plasma/ice_moon, -/area/ruin/syndicate_lava_base/engineering) -"YC" = ( -/turf/open/floor/wood/large, -/area/ruin/syndicate_lava_base/dormitories) -"YI" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"YM" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/structure/bed/double{ - dir = 1 - }, -/obj/item/bedsheet/dorms_double{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"YO" = ( -/turf/open/floor/engine/o2, -/area/ruin/syndicate_lava_base/engineering) -"YQ" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"YS" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/door/window/survival_pod{ - dir = 4; - req_access = list("syndicate") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/testlab) -"Zg" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"Zh" = ( -/obj/structure/toilet, -/obj/structure/window/reinforced/tinted/spawner/directional/west, -/turf/open/floor/iron/checker, -/area/ruin/syndicate_lava_base/bar) -"Zi" = ( -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"Zj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"Zl" = ( -/turf/closed/wall/r_wall/syndicate, -/area/ruin/syndicate_lava_base/main) -"Zn" = ( -/obj/structure/flora/bush/flowers_yw, -/obj/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/grass, -/area/ruin/syndicate_lava_base/medbay) -"Zo" = ( -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"Zp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/button/door/directional/south{ - name = "Dorm Bolt Control"; - id = "IDynbin3"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"Zr" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"Zw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/airlock/mining{ - name = "Shaft Miner Dormitory Delta"; - id_tag = "IDyneDelta" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"Zx" = ( -/obj/structure/table/reinforced, -/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 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"ZA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/bar) -"ZF" = ( -/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 = 9 - }, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/main) -"ZH" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/dark_blue, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"ZK" = ( -/obj/structure/sign/directions/supply{ - dir = 1; - pixel_y = 32 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"ZL" = ( -/obj/machinery/stasis{ - dir = 8 - }, -/turf/open/floor/iron/smooth_corner{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/medbay) -"ZN" = ( -/obj/effect/turf_decal/tile/dark_red/half{ - dir = 8 - }, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"ZQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/dormitories) -"ZR" = ( -/obj/structure/table/optable, -/obj/machinery/defibrillator_mount/directional{ - pixel_y = 26 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"ZU" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/main) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -Is -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -Is -ab -ab -ab -ab -ab -kf -kf -kf -kf -kf -kf -kf -kf -wn -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -ac -aa -aa -aa -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -Mk -kf -VL -VL -VL -kf -kf -ln -wP -OQ -OP -Fy -aB -BA -kf -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -ac -ac -ac -ac -ac -ac -ac -ab -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -kf -Mc -LR -dT -fg -Tn -kf -km -Qx -vL -wa -dL -Zr -Pn -kf -yE -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -aa -"} -(8,1,1) = {" -aa -aa -ac -ac -ab -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -VL -GD -GD -GD -DC -Zj -kf -YS -oO -aT -MD -Xc -zu -Gl -kf -yE -yE -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -aa -aa -"} -(9,1,1) = {" -aa -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -VL -MP -aP -LB -yF -DY -kf -kr -kw -Lf -wa -dL -Zr -Zg -kf -ns -yE -yE -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -aa -"} -(10,1,1) = {" -aa -ac -ac -ab -ab -dj -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -dj -ab -ab -ab -ab -kf -yM -lj -vT -Wt -kU -my -kr -kw -kw -MD -Xc -zu -Gl -kf -as -ns -yE -yE -ab -ab -ab -ab -ab -ab -yG -ab -ab -ab -ac -ac -aa -"} -(11,1,1) = {" -aa -ac -ac -ab -AR -Tv -RV -RV -RV -RV -RV -RV -RV -RV -RV -RV -RV -RV -RV -RV -RV -ab -ab -ab -ab -VL -aP -aP -Xa -yF -Mp -kf -gA -RH -UX -wa -dL -Zr -Zg -zF -zF -zF -zF -zF -CR -CR -zF -zF -zF -zF -Mk -tu -ab -ab -ab -ac -ac -"} -(12,1,1) = {" -aa -ac -ac -ab -ab -RV -ny -Ij -qH -RV -JQ -gn -DE -MR -DE -gn -JQ -RV -JQ -AT -RV -ab -ab -ab -ab -VL -LP -LP -Eh -Gp -qC -kf -sr -Ow -cj -mV -Ae -Ae -PK -zF -YM -xY -Vu -MC -UO -HU -qK -Yb -xY -Fo -zF -ab -ab -ab -ab -ac -ac -"} -(13,1,1) = {" -aa -ac -ac -ab -ab -RV -vv -rg -rg -RV -CQ -Gm -wX -wG -eA -Gm -VM -RV -pI -UT -RV -ab -ab -ab -ab -kf -jo -ov -mG -bk -ES -kf -dw -Hs -VQ -ue -ZN -ZN -rv -zF -gG -Qq -jt -zF -UO -Jd -zF -jt -Qq -gG -zF -ab -ab -ab -ab -ac -ac -"} -(14,1,1) = {" -aa -ac -ac -ab -ab -RV -uQ -tT -UI -RV -Yk -Io -DE -Bt -DE -Io -xo -RV -XW -sv -RV -ab -ab -kb -de -kf -kf -XS -Pc -XS -kf -kf -kf -kf -kf -kf -kf -kf -kf -zF -zF -zF -zF -zF -Gb -Jd -zF -zF -zF -zF -zF -ab -ab -ab -ab -ac -ac -"} -(15,1,1) = {" -ac -ac -ab -ab -ab -RV -Jx -RV -RV -RV -RV -WE -RV -RV -RV -yu -RV -RV -RV -Fz -RV -RV -RV -eC -eC -VJ -VL -jo -ej -jo -Pq -Uj -YC -yq -zF -IA -PG -ox -sG -zF -gG -CZ -zF -XD -xm -Jd -vo -zF -Tm -gG -zF -ab -ab -ab -ab -ac -ac -"} -(16,1,1) = {" -ac -ac -ab -ab -ab -ha -uQ -ss -BF -RV -Uq -dM -PB -bh -Ac -dM -Ac -Ac -PB -vZ -KS -xP -RV -eC -eC -so -VL -jo -FT -jo -Pq -qS -YC -YC -Rv -GM -GM -fd -oE -zF -Yl -xY -zF -Oc -xm -Jd -OH -zF -UP -Cc -zF -ab -ab -ab -ab -ac -ac -"} -(17,1,1) = {" -ac -ac -ab -ab -ab -ha -Se -vq -uQ -ar -Kl -pF -pF -pF -pF -hU -Ua -Ua -Ua -Ua -bR -Ok -RV -eC -eC -yR -VL -jo -FT -jo -Pq -IB -YC -hT -zF -uV -jH -nz -gT -zF -eu -Zp -zF -hu -xm -Jd -zF -zF -Uf -op -zF -ab -ab -ab -ab -ac -ac -"} -(18,1,1) = {" -ac -ac -ab -ab -ab -ha -yd -uQ -Zi -RV -St -pF -ol -sB -ol -NV -oB -fB -fB -Ym -uw -gj -RV -XP -eC -Pw -VL -jo -Yo -jo -Pq -YC -HF -RQ -zF -zF -zF -zF -Le -zF -zF -SK -zF -Xz -xm -Jd -tx -zF -Fx -zF -zF -ab -ab -ab -ab -ac -ac -"} -(19,1,1) = {" -ac -ac -ab -ab -ab -RV -RV -Im -RV -RV -LM -Gx -ol -vB -FQ -Ci -Am -DZ -RV -Zw -RV -RV -RV -ZU -ZU -tw -kf -XS -Pc -XS -kf -FK -ZU -ZU -zF -um -zX -gm -Ad -eg -HU -HU -TB -Jd -xm -Jd -Jd -DA -HU -Kb -CR -ab -ab -ab -ac -ac -aa -"} -(20,1,1) = {" -aa -ac -ac -ab -ab -RV -eE -eS -kc -RV -iy -kk -bC -nr -Rl -Ci -Am -DZ -RV -sv -Nv -jI -RV -Zl -Zo -Zo -Zo -Zo -JA -Zo -Kz -Zo -Vn -Zl -ZU -Uo -up -up -oZ -zF -dO -iG -HN -aY -aY -Fn -Fn -ub -qg -RM -CR -ab -ab -ab -ac -ac -aa -"} -(21,1,1) = {" -aa -ac -ac -ab -ab -RV -qA -Bf -Qi -RV -VW -kk -ol -ol -ol -Ci -Am -lH -RV -AC -SZ -ys -RV -DX -kL -ED -ED -xe -ZF -ju -DH -DH -DH -WK -ZU -nc -au -cw -lP -zF -Jd -fq -Jd -Jd -Jd -Jd -Jd -ef -Sm -Jd -CR -ab -ab -ac -ac -aa -aa -"} -(22,1,1) = {" -aa -ac -ac -ab -AR -RV -RV -RV -RV -RV -wl -kk -ol -sL -ol -Ci -Am -DZ -RV -JQ -KP -Vt -RV -Zo -jA -Zo -ck -XO -cO -Zo -Zo -Zo -DH -Zo -ZU -VP -lc -eZ -tJ -zF -WS -ZQ -yY -QU -QU -QU -zF -Cd -Zx -Km -zF -ab -ab -ab -ac -ac -aa -"} -(23,1,1) = {" -aa -ac -ac -ab -ab -ab -ab -ab -Iy -RV -ak -kk -bG -nJ -ht -Ci -Am -RV -RV -RV -RV -RV -RV -SG -jA -Zo -ZU -ZU -ZU -ZU -ZU -ZK -EP -er -td -td -td -td -td -td -Ol -dR -NY -Yv -CC -FF -lD -Xq -LK -iL -td -WM -ab -ab -ab -ac -ac -"} -(24,1,1) = {" -aa -aa -ac -ac -ab -ab -ab -ab -Iy -RV -al -qV -ol -Dr -lZ -Ci -Am -DL -OD -OD -OD -OD -TO -Zo -Sh -Zo -ZU -UV -fO -Pr -ZU -CN -ju -Zo -dz -KW -sF -sF -sF -dz -sF -oG -uX -Gs -AF -cu -iX -sF -Dn -EQ -td -ab -ab -ab -ab -ac -ac -"} -(25,1,1) = {" -aa -aa -ac -ac -ab -ab -ab -Iy -mP -RV -ao -Wp -oA -oA -lu -jw -iS -HL -NK -TC -TC -CG -HL -ci -Fl -WK -DG -oc -cP -cY -uB -Zo -MG -jf -tM -FO -xl -xl -FS -tM -vf -wo -NY -yP -HI -XT -Lp -sF -ks -gs -td -ab -ab -ab -ab -ac -ac -"} -(26,1,1) = {" -aa -aa -aa -ac -ac -ab -ab -jn -RV -RV -aV -oB -oB -pp -oB -bM -yn -DL -OD -OD -OD -OD -TO -Zo -Sh -ex -ZU -cm -cQ -db -ZU -zP -Sh -Zo -dz -sF -sF -sF -fF -dz -sF -oG -GB -Ny -Yc -zl -ih -sF -JP -BO -td -ab -ab -ab -ab -ac -ac -"} -(27,1,1) = {" -aa -aa -aa -ac -ac -ab -ab -ad -ag -ai -OD -OD -OD -gy -OD -Wa -bV -RV -PO -PO -PO -PO -RV -er -dP -er -ZU -ZU -ZU -ZU -ZU -iB -jA -GA -td -td -sA -td -td -td -MT -dR -NY -OV -XT -XT -cZ -xf -Iv -DI -td -ab -ab -ab -ab -ac -ac -"} -(28,1,1) = {" -aa -aa -aa -ac -ac -ab -AR -jn -RV -RV -qU -ma -no -pr -OD -Wa -Fk -RV -Re -ag -ag -EO -QK -Zo -jA -Zo -Zo -Zo -Cj -Zo -FU -Zo -jA -Zo -td -Ip -nS -nb -vt -td -VE -Mu -Rd -td -cW -dm -td -td -jJ -td -td -ab -ab -ab -ab -ac -ac -"} -(29,1,1) = {" -aa -aa -ac -ac -ab -ab -ab -ab -ab -RV -eQ -mp -mp -pJ -mp -Hy -cf -RV -WX -ag -Sb -RZ -RV -KY -gF -ED -ED -xe -AN -xe -ED -ED -XH -nn -td -yi -nS -nS -Fq -td -sF -dR -sc -td -oV -Li -bu -kZ -nT -eX -td -td -ab -ab -ac -ac -aa -"} -(30,1,1) = {" -aa -aa -ac -ac -ab -ab -ab -ab -ab -Jj -RG -ol -ol -rf -Vy -bN -RV -RV -wm -wm -wm -WC -RV -Zl -sg -Zo -ux -Zo -cV -Zo -Zo -Zo -Zo -Zl -td -Zh -ie -nS -vz -td -sF -oG -sF -td -Tl -hL -EA -Wz -NJ -IP -NS -td -ab -ab -ac -ac -aa -"} -(31,1,1) = {" -aa -aa -ac -ac -ab -ab -ab -ab -ab -RV -Pv -bq -Iz -sP -aE -RV -RV -ab -ab -ab -ab -ab -ab -ZU -ZU -WF -yQ -Oz -pg -Oz -yQ -yy -yQ -yQ -td -td -td -td -td -td -sF -oG -sF -td -ge -hL -He -Ou -NJ -IP -bd -sZ -WM -ab -ab -ac -ac -"} -(32,1,1) = {" -aa -ac -ac -ab -ab -ab -ab -ab -ab -BE -BE -bv -BE -se -BE -BE -ab -ab -ab -ab -ab -ab -ab -kE -Er -Gr -NB -xc -Fu -xc -fe -xc -wx -eo -td -LA -iw -iw -En -td -sF -oG -sF -td -gZ -hL -NJ -YI -NJ -jy -OI -td -ab -ab -ab -ac -ac -"} -(33,1,1) = {" -aa -ac -ac -ab -ab -ab -ab -ab -ab -BE -KD -wN -eL -cS -wr -BE -ab -ab -ab -ab -ab -ab -ab -kE -Er -dy -NB -xc -Yf -xc -fe -xc -xc -qe -td -Lc -xS -aA -EL -td -bF -dR -If -td -PI -dN -tS -tS -jy -oj -FV -td -ab -ab -ab -ac -ac -"} -(34,1,1) = {" -aa -ac -ac -ab -ab -ab -ab -ab -ab -Sd -wN -ed -vy -SH -cx -BE -ab -ab -ab -ab -ab -ab -ab -kE -Er -xA -NB -xc -Yf -xc -fe -xc -Kn -tB -td -nx -LC -Ya -nd -iZ -Os -us -sc -td -td -pK -yJ -Xh -pe -td -td -ap -ab -ab -ab -ac -ac -"} -(35,1,1) = {" -ac -ac -ab -ab -ab -ab -ab -ab -ab -Sd -wN -Ud -ME -YA -cx -BE -ab -ab -ab -ab -ab -ab -ab -kE -Er -lb -NB -xc -pk -xc -fe -yB -gh -Gd -td -td -td -td -td -td -Ol -dR -sF -Ro -Xw -EJ -Wu -zT -mg -Vz -Vz -ap -ab -ab -ab -ac -ac -"} -(36,1,1) = {" -ac -ac -ab -ab -ab -ab -ab -ab -ab -Sd -wN -Ce -Eq -Vs -cx -BE -ab -ab -sR -Mt -Mt -Mt -Mt -yQ -qd -yQ -yQ -fx -pg -fx -yQ -yQ -yQ -yQ -yQ -sa -sa -sa -sa -td -rP -dR -sF -Pm -FW -xq -RE -kl -Ld -CA -VC -ap -ab -ab -ac -ac -aa -"} -(37,1,1) = {" -ac -ac -ab -ab -ab -ab -ab -ab -ab -BE -Pf -ob -ob -ob -JN -BE -ab -ab -ab -Mt -CK -Tu -Df -Ns -ZH -yQ -KC -Gv -sY -fG -zp -yQ -GQ -Ca -yQ -EU -Ut -TI -oS -td -sF -oG -sF -Pm -Hx -ta -BB -nP -Vz -hr -cl -ap -ab -ab -ab -ac -ac -"} -(38,1,1) = {" -ac -ac -ab -ab -ab -ab -ab -ab -AR -BE -BE -Sd -Sd -Sd -BE -BE -ab -ab -ab -Mt -PQ -gB -pc -iQ -kp -yQ -Ib -Gv -Zn -qp -xc -Td -CX -lT -yQ -yQ -ft -Ho -XC -td -sF -oG -sF -Pm -Hx -Jq -bf -nP -Vz -hr -hr -ap -ab -ab -ac -ac -aa -"} -(39,1,1) = {" -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -qa -rD -Kg -BC -iQ -ZH -yQ -of -Gv -UE -qp -xc -Bn -oN -GJ -jT -yQ -rT -Ut -oS -td -sF -SJ -zI -Wx -gz -cn -cn -dS -sm -CA -CA -ap -ab -ab -ab -ac -ac -"} -(40,1,1) = {" -aa -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ds -Mt -Mt -Mt -Tk -IS -yQ -Ko -Gv -nq -qp -Tc -BT -oe -vW -kV -yQ -hA -pH -et -ZA -tv -ph -Lw -Pm -mr -LD -ry -zq -Vz -Lg -Vz -ap -ab -ab -ab -ac -ac -"} -(41,1,1) = {" -aa -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -dJ -jg -tc -IM -Tk -ZH -yQ -yQ -rG -yQ -gN -yQ -yQ -yQ -wv -yQ -yQ -yQ -bY -yQ -ap -ap -it -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ab -ab -ab -ac -ac -"} -(42,1,1) = {" -aa -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -dJ -gp -cN -PW -Tk -ZH -yQ -El -to -Oe -Fi -yQ -nA -aG -Hn -yQ -YB -YB -YB -YB -ap -Vp -Hb -My -wF -Po -TT -YQ -dk -YO -fE -ap -ab -ab -ab -ab -ac -ac -"} -(43,1,1) = {" -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -dJ -rX -oW -hI -Tk -gY -nC -Vk -Vk -hb -hb -xs -hb -hb -hb -Lh -TH -TH -TH -TH -el -gL -SY -SM -Gh -WD -Ie -tl -DT -uk -Qr -ap -ab -ab -ab -ab -ac -ac -"} -(44,1,1) = {" -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -dJ -uA -st -vH -Bp -wU -yQ -sQ -zd -jR -cD -QN -hz -BS -pN -yQ -mA -mA -mA -mA -ap -BL -VK -FH -Gh -WD -Ie -BZ -jV -Na -zz -ap -ab -ab -ab -ac -ac -aa -"} -(45,1,1) = {" -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -Iy -dJ -ZR -Lm -Lm -Bp -CE -yQ -oz -Mn -jR -jR -jm -Ue -xc -RN -yQ -ab -ab -ab -ab -ap -qY -CM -Pt -Gh -WD -Ie -XU -Ov -df -iY -ap -ab -ab -ab -ac -ac -aa -"} -(46,1,1) = {" -aa -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -bz -VO -kh -JM -Xo -jZ -ON -yQ -EV -ZL -wu -xJ -ce -vl -jb -Vr -yQ -ab -ab -ab -ab -ap -oP -oP -Ch -Ve -Ih -ya -ap -ap -ap -ap -kN -EK -ab -ac -ac -aa -aa -"} -(47,1,1) = {" -aa -aa -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -Iy -sE -yQ -yQ -yQ -yQ -yQ -yQ -yQ -NB -NB -yQ -yQ -yQ -yQ -yQ -yQ -ab -ab -ab -ab -sE -ap -ap -ap -ap -ap -BR -ap -ab -ab -ab -pU -ab -ab -ab -ac -ac -aa -"} -(48,1,1) = {" -aa -aa -aa -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -Tf -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -Sg -ab -ab -ab -ab -pU -ab -ab -ab -ab -ab -eN -ab -ab -ab -ab -ab -ab -ab -ac -ac -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -ac -ac -ac -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -ac -ac -aa -aa -aa -aa -aa -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -aa -aa -aa -aa -aa -aa -"} diff --git a/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm b/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm index ef650913f14105..bcc82db11fdeea 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm @@ -333,7 +333,7 @@ /area/ruin/powered/clownplanet) "bZ" = ( /obj/machinery/door/airlock/bananium, -/turf/open/indestructible/honk, +/turf/open/floor/carpet, /area/ruin/powered/clownplanet) "ca" = ( /obj/item/bikehorn, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm index d63d261b813c5e..919d141fda70ea 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm @@ -213,7 +213,7 @@ dir = 1 }, /obj/structure/stone_tile, -/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck, +/mob/living/basic/mining/gutlunch/milk, /turf/open/indestructible/boss, /area/ruin/unpowered/ash_walkers) "aR" = ( @@ -287,7 +287,7 @@ /obj/structure/stone_tile{ dir = 4 }, -/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen, +/mob/living/basic/mining/gutlunch/warrior, /turf/open/indestructible/boss, /area/ruin/unpowered/ash_walkers) "bd" = ( @@ -1114,6 +1114,8 @@ /obj/item/seeds/lavaland/porcini, /obj/item/seeds/tower, /obj/item/seeds/tower, +/obj/item/seeds/bamboo, +/obj/item/seeds/bamboo, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "GW" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_mookvillage.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_mookvillage.dmm index 9b9157f92faa19..70ebd3ce428605 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_mookvillage.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_mookvillage.dmm @@ -68,7 +68,7 @@ /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "p" = ( -/obj/structure/material_stand, +/obj/structure/ore_container/material_stand, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "q" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm index 8fc2a2b03deee4..f05c972ec35c23 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm @@ -377,10 +377,10 @@ /obj/structure/rack, /obj/item/storage/box/lights/bulbs, /obj/item/storage/toolbox/mechanical/old, -/obj/item/a_gift{ +/obj/item/gift{ contains_type = /obj/item/gun/ballistic/automatic/toy/unrestricted }, -/obj/item/a_gift{ +/obj/item/gift{ contains_type = /obj/item/gun/ballistic/automatic/pistol/toy }, /obj/item/ammo_box/foambox, @@ -524,13 +524,13 @@ /obj/structure/table/wood, /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/south, -/obj/item/a_gift{ +/obj/item/gift{ contains_type = /obj/item/toy/plush/goatplushie; pixel_x = 7; pixel_y = 6 }, /obj/structure/sign/clock/directional/south, -/obj/item/a_gift{ +/obj/item/gift{ contains_type = /obj/item/toy/plush/ratplush; pixel_x = -4; pixel_y = 2 @@ -713,7 +713,7 @@ /obj/structure/table, /obj/effect/turf_decal/tile/yellow/diagonal_edge, /obj/effect/turf_decal/tile/neutral/diagonal_centre, -/obj/item/a_gift{ +/obj/item/gift{ contains_type = /obj/item/toy/figure/wizard }, /turf/open/floor/iron/diagonal/lavaland, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm index 7497b5bb9079db..4ad603f7872a09 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm @@ -889,7 +889,7 @@ "hp" = ( /obj/effect/decal/cleanable/dirt, /mob/living/carbon/human/species/monkey{ - faction = list("neutral","Syndicate") + faction = list("neutral","Symphionia") }, /turf/open/floor/iron/white/side{ dir = 9 @@ -897,7 +897,7 @@ /area/ruin/syndicate_lava_base/virology) "hr" = ( /mob/living/carbon/human/species/monkey{ - faction = list("neutral","Syndicate") + faction = list("neutral","Symphionia") }, /turf/open/floor/iron/white/side{ dir = 5 @@ -995,7 +995,7 @@ /area/ruin/syndicate_lava_base/cargo) "hE" = ( /mob/living/carbon/human/species/monkey{ - faction = list("neutral","Syndicate") + faction = list("neutral","Symphionia") }, /turf/open/floor/iron/white/side{ dir = 10 @@ -1004,7 +1004,7 @@ "hG" = ( /obj/effect/decal/cleanable/dirt, /mob/living/carbon/human/species/monkey{ - faction = list("neutral","Syndicate") + faction = list("neutral","Symphionia") }, /turf/open/floor/iron/white/side{ dir = 6 diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/commswilding_1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/commswilding_1.dmm index 92338633ecfb38..5d12747b67a6a9 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/commswilding_1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/commswilding_1.dmm @@ -81,7 +81,7 @@ /obj/structure/table/reinforced, /obj/item/radio/intercom{ freerange = 1; - name = "Syndicate Radio Intercom" + name = "Symphionia Radio Intercom" }, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/commswilding_2.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/commswilding_2.dmm index fd703febfb1652..4a43312562dfdb 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/commswilding_2.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/commswilding_2.dmm @@ -85,7 +85,7 @@ }, /obj/item/radio/intercom{ freerange = 1; - name = "Syndicate Radio Intercom"; + name = "Symphionia Radio Intercom"; pixel_y = -26 }, /turf/open/floor/iron/dark, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/commswilding_3.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/commswilding_3.dmm index dd00fa974852e8..067c386d46fdb1 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/commswilding_3.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/commswilding_3.dmm @@ -77,7 +77,7 @@ /obj/structure/sign/poster/contraband/syndiemoth/directional/west, /obj/item/radio/intercom{ freerange = 1; - name = "Syndicate Radio Intercom"; + name = "Symphionia Radio Intercom"; pixel_y = 5 }, /obj/structure/table/reinforced, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/mistake_feasible.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/mistake_feasible.dmm index 4b4daf0586b897..1ae09db4defd14 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/mistake_feasible.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/mistake_feasible.dmm @@ -11,7 +11,7 @@ /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /obj/machinery/door/poddoor/preopen{ id = "lavalandsyndi"; - name = "Syndicate Research Experimentation Shutters" + name = "Symphionia Research Experimentation Shutters" }, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -61,7 +61,7 @@ /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/preopen{ id = "lavalandsyndi"; - name = "Syndicate Research Experimentation Shutters" + name = "Symphionia Research Experimentation Shutters" }, /turf/open/floor/plating, /area/ruin/syndicate_lava_base/testlab) @@ -116,7 +116,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /mob/living/carbon/human/species/monkey{ - faction = list("neutral","Syndicate") + faction = list("neutral","Symphionia") }, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/light/small/directional/north, @@ -128,7 +128,7 @@ /obj/machinery/light/small/directional/north, /obj/machinery/button/door{ id = "lavalandsyndi"; - name = "Syndicate Experimentation Lockdown Control"; + name = "Symphionia Experimentation Lockdown Control"; pixel_y = 26; req_access = list("syndicate") }, @@ -216,7 +216,7 @@ /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/preopen{ id = "lavalandsyndi"; - name = "Syndicate Research Experimentation Shutters" + name = "Symphionia Research Experimentation Shutters" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -244,7 +244,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /mob/living/carbon/human/species/monkey{ - faction = list("neutral","Syndicate") + faction = list("neutral","Symphionia") }, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, diff --git a/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_arena.dmm b/_maps/RandomRuins/LavaRuins/nova/lavaland_surface_arena.dmm similarity index 99% rename from _maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_arena.dmm rename to _maps/RandomRuins/LavaRuins/nova/lavaland_surface_arena.dmm index a062f3cc436ff3..72bffa4cf069b3 100644 --- a/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_arena.dmm +++ b/_maps/RandomRuins/LavaRuins/nova/lavaland_surface_arena.dmm @@ -693,7 +693,7 @@ dir = 4 }, /obj/item/card/id/green{ - desc = "A green card issued to temporary citizens of Nanotrasen-governed space, used to transfer between stations for work orders. This one's over fifty years out of date."; + desc = "A green card issued to temporary citizens of Symphionia-governed space, used to transfer between stations for work orders. This one's over fifty years out of date."; name = "station transfer card" }, /turf/open/lava/smooth/lava_land_surface{ diff --git a/_maps/RandomRuins/LavaRuins/nova/lavaland_surface_ash_walker1.dmm b/_maps/RandomRuins/LavaRuins/nova/lavaland_surface_ash_walker1.dmm new file mode 100644 index 00000000000000..7463a6012d7b45 --- /dev/null +++ b/_maps/RandomRuins/LavaRuins/nova/lavaland_surface_ash_walker1.dmm @@ -0,0 +1,2291 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ab" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/bottle/moonshine{ + pixel_x = -5; + pixel_y = 7 + }, +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = 5; + pixel_y = -2 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"aK" = ( +/obj/structure/water_source/puddle, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"bc" = ( +/obj/structure/stone_tile/surrounding_tile/cracked, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"bH" = ( +/obj/structure/rack/shelf{ + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; + icon_state = "empty_shelf_1" + }, +/obj/item/gun/ballistic/bow/longbow, +/obj/structure/stone_tile/slab, +/obj/item/storage/bag/quiver, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"cm" = ( +/obj/item/flashlight/flare/torch{ + start_on = 1 + }, +/turf/closed/indestructible/riveted/boss, +/area/ruin/unpowered/ash_walkers) +"dw" = ( +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"eA" = ( +/obj/structure/closet/crate/wooden, +/obj/item/seeds/potato, +/obj/item/seeds/potato, +/obj/item/seeds/potato/sweet, +/obj/item/seeds/plump, +/obj/item/seeds/plump, +/obj/item/seeds/wheat, +/obj/item/seeds/wheat, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"eE" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 4 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"eO" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/primitive_centrifuge{ + pixel_x = -14; + pixel_y = -1 + }, +/obj/item/reagent_containers/cup/mortar{ + pixel_y = 12; + pixel_x = -10 + }, +/obj/item/reagent_containers/cup/glass/bottle/small{ + pixel_x = 7; + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/glass/bottle/small{ + pixel_x = 3; + pixel_y = 5 + }, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"eU" = ( +/obj/item/cultivator/rake, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"fC" = ( +/obj/structure/headpike/bone, +/obj/effect/mapping_helpers/no_lava, +/turf/template_noop, +/area/template_noop) +"fV" = ( +/obj/structure/geyser, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"gn" = ( +/obj/structure/stone_tile/block/burnt{ + dir = 8 + }, +/obj/structure/stone_tile/block/burnt{ + dir = 4 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"hd" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/structure/closet/xenoarch/ashwalker_version, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"hr" = ( +/obj/structure/closet/crate/wooden, +/obj/item/screwdriver/ashwalker, +/obj/item/crowbar/ashwalker, +/obj/item/wrench/ashwalker, +/obj/item/wirecutters/ashwalker, +/obj/item/hatchet/wooden, +/obj/item/weldingtool/mini, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"hA" = ( +/obj/structure/rack/shelf{ + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; + icon_state = "empty_shelf_1" + }, +/obj/structure/stone_tile/slab, +/obj/item/reagent_containers/cup/bowl/mushroom_bowl{ + pixel_y = 7; + pixel_x = -5 + }, +/obj/item/reagent_containers/cup/bowl/mushroom_bowl{ + pixel_y = 7; + pixel_x = 7 + }, +/obj/item/reagent_containers/cup/bowl/mushroom_bowl{ + pixel_y = 11; + pixel_x = 1 + }, +/obj/item/smelling_salts{ + pixel_y = -9; + pixel_x = -5 + }, +/obj/item/smelling_salts{ + pixel_y = -9; + pixel_x = 6 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"hL" = ( +/obj/structure/curtain/bounty, +/obj/structure/stone_tile/block{ + dir = 1 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"hX" = ( +/obj/machinery/iv_drip, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"hY" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/structure/stone_tile/block/burnt, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"ij" = ( +/obj/structure/rack/shelf{ + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; + icon_state = "empty_shelf_1" + }, +/obj/item/reagent_containers/cup/glass/bottle/lizardwine, +/obj/item/reagent_containers/cup/glass/trophy/bronze_cup{ + pixel_x = -7 + }, +/obj/item/reagent_containers/cup/glass/bottle{ + pixel_x = 6; + pixel_y = -2 + }, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"iI" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/structure/stone_tile/burnt, +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"iP" = ( +/obj/item/flashlight/flare/candle/infinite, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"iZ" = ( +/obj/structure/stone_tile/block/burnt{ + dir = 1 + }, +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/obj/structure/stone_tile/burnt, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"jm" = ( +/obj/structure/stone_tile/block/cracked, +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/structure/statue/bone/rib{ + dir = 1 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"jL" = ( +/obj/structure/flora/ash/seraka, +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"ku" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 4 + }, +/obj/structure/chair/stool/bamboo{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"kx" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile/cracked, +/obj/item/flashlight/flare/candle/infinite, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"ky" = ( +/mob/living/basic/mining/gutlunch/milk, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"lB" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/stone_tile/block/cracked{ + dir = 4 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"lH" = ( +/mob/living/basic/mining/gutlunch/grub, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"mc" = ( +/obj/structure/closet/crate/wooden, +/obj/item/seeds/tobacco, +/obj/item/seeds/tobacco, +/obj/item/seeds/cannabis, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"mh" = ( +/obj/structure/closet/crate/wooden, +/obj/item/storage/bag/ore, +/obj/item/storage/bag/ore{ + pixel_y = 3 + }, +/obj/item/pickaxe, +/obj/item/pickaxe{ + pixel_y = 3 + }, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"mu" = ( +/obj/structure/bed/maint, +/obj/structure/curtain/bounty, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"mv" = ( +/turf/template_noop, +/area/template_noop) +"mS" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"mZ" = ( +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"nb" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/beaker/large/ceramic{ + pixel_x = 9; + pixel_y = 11 + }, +/obj/item/reagent_containers/cup/beaker/large/blowing_glass{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/beaker/large/blowing_glass, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"nj" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 5 + }, +/obj/structure/stone_tile/surrounding/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/center/burnt, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 8 + }, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"nt" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile/block{ + dir = 8 + }, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"nx" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/structure/stone_tile, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/item/flashlight/flare/candle/infinite, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"nI" = ( +/obj/structure/stone_tile, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 8 + }, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"nL" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"nY" = ( +/obj/structure/reagent_water_basin, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"oe" = ( +/obj/structure/bonfire/dense, +/obj/item/stack/rods{ + amount = 5 + }, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"ok" = ( +/obj/structure/stone_tile/block/cracked, +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/structure/statue/bone/rib, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"ot" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/structure/rack/shelf{ + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; + icon_state = "empty_shelf_1" + }, +/obj/item/screwdriver/ashwalker, +/obj/item/crowbar/ashwalker, +/obj/item/wrench/ashwalker, +/obj/item/wirecutters/ashwalker, +/obj/item/hatchet/wooden, +/obj/item/weldingtool/mini, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"pn" = ( +/obj/structure/chair/stool/bamboo{ + dir = 8 + }, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"px" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"pD" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"pE" = ( +/turf/closed/indestructible/riveted/boss, +/area/ruin/unpowered/ash_walkers) +"pF" = ( +/obj/structure/table/wood, +/obj/structure/stone_tile/slab, +/obj/structure/chem_separator, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"qr" = ( +/obj/structure/rack/shelf{ + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; + icon_state = "empty_shelf_1" + }, +/obj/item/reagent_containers/cup/bowl/mushroom_bowl{ + pixel_y = -3 + }, +/obj/item/reagent_containers/cup/bowl/mushroom_bowl, +/obj/item/reagent_containers/cup/bowl/mushroom_bowl{ + pixel_y = 3 + }, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"qs" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"qy" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"qW" = ( +/obj/structure/stone_tile/surrounding_tile, +/obj/item/flashlight/flare/candle/infinite, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"rE" = ( +/obj/structure/stone_tile/surrounding_tile/cracked, +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile/cracked, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"rP" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/mob/living/basic/mining/gutlunch/warrior, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"rQ" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 8 + }, +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"sl" = ( +/obj/structure/rack/shelf{ + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; + icon_state = "empty_shelf_1" + }, +/obj/item/knife/combat/bone{ + pixel_y = -4 + }, +/obj/item/knife/combat/bone{ + pixel_y = 2 + }, +/obj/item/knife/combat/bone{ + pixel_y = 8 + }, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"ss" = ( +/obj/structure/stone_tile/block/cracked, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"sI" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 1 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"sS" = ( +/obj/structure/chair/stool/bamboo, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"tg" = ( +/obj/structure/rack/shelf{ + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; + icon_state = "empty_shelf_1" + }, +/obj/item/reagent_containers/cup/bottle/nutrient/rh{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/bottle/nutrient/l4z{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/bottle/nutrient/ez{ + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/bottle/nutrient/rh{ + pixel_x = -6; + pixel_y = 2 + }, +/obj/item/reagent_containers/cup/bottle/nutrient/l4z{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/reagent_containers/cup/bottle/nutrient/ez, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"tl" = ( +/obj/structure/rack/shelf{ + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; + icon_state = "empty_shelf_1" + }, +/obj/item/spear/bonespear, +/obj/item/spear/bonespear{ + pixel_y = 5 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"tR" = ( +/obj/structure/bed/maint, +/obj/structure/curtain/bounty, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"ug" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile/cracked, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"uE" = ( +/obj/structure/lavaland/ash_walker, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"vB" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/structure/closet/crate/wooden, +/obj/item/stack/sheet/iron/twenty, +/obj/item/stack/sheet/leather{ + amount = 35 + }, +/obj/item/stack/sheet/cloth/ten, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"wp" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"ww" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"wM" = ( +/obj/structure/stone_tile, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/block/cracked{ + dir = 8 + }, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"wR" = ( +/obj/structure/flora/ash/cacti, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"wS" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/center/cracked, +/obj/structure/stone_tile/surrounding_tile, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"xl" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 4 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"xW" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"yl" = ( +/obj/structure/stone_tile/block/burnt{ + dir = 8 + }, +/obj/structure/stone_tile/burnt{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile/cracked, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"zI" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"zV" = ( +/obj/structure/stone_tile/slab, +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/obj/machinery/primitive_stove, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Ao" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile, +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"Ar" = ( +/obj/structure/flora/ash/leaf_shroom, +/obj/structure/stone_tile/surrounding_tile, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Az" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"AG" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"AZ" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Bc" = ( +/obj/structure/stone_tile/block/cracked, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Bs" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/obj/structure/flora/ash/stem_shroom, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"BJ" = ( +/obj/structure/stone_tile/cracked, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"Ch" = ( +/obj/structure/stone_tile/slab/cracked, +/obj/item/flashlight/flare/candle/infinite, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"Cl" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile/block/cracked{ + dir = 8 + }, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"Cp" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/obj/structure/stone_tile/surrounding_tile, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Do" = ( +/obj/structure/millstone, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"DL" = ( +/obj/structure/chair/stool/bamboo{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"DP" = ( +/obj/structure/stone_tile/block, +/obj/structure/stone_tile{ + dir = 1 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"EH" = ( +/obj/structure/closet/crate/wooden, +/obj/item/hemostat/ashwalker, +/obj/item/retractor/ashwalker{ + pixel_y = -9 + }, +/obj/item/scalpel/ashwalker{ + pixel_y = -4 + }, +/obj/item/surgicaldrill/ashwalker, +/obj/item/circular_saw/ashwalker, +/obj/item/cautery/ashwalker, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"EL" = ( +/obj/structure/stone_tile/slab, +/obj/effect/decal/cleanable/blood, +/obj/structure/headpike/bone, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"EQ" = ( +/obj/structure/table/wood, +/obj/item/food/rootdough{ + pixel_x = 3; + pixel_y = 2 + }, +/obj/item/food/rootdough{ + pixel_x = -3 + }, +/obj/item/kitchen/rollingpin, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Fz" = ( +/obj/structure/flora/ash/tall_shroom, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"FA" = ( +/turf/closed/indestructible/riveted/boss/see_through, +/area/ruin/unpowered/ash_walkers) +"FL" = ( +/obj/structure/fermenting_barrel, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Gx" = ( +/obj/structure/table/wood, +/obj/item/cutting_board, +/obj/item/knife/hunting, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"GG" = ( +/obj/structure/necropolis_gate, +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile/block/cracked{ + dir = 8 + }, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"Hr" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/syringe/crude{ + pixel_x = 4; + pixel_y = 19 + }, +/obj/item/reagent_containers/syringe/crude{ + pixel_x = 2; + pixel_y = 15 + }, +/obj/structure/stone_tile/slab, +/obj/item/paper_bin/bundlenatural, +/obj/item/pen/charcoal, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Hx" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 4 + }, +/obj/item/flashlight/flare/candle/infinite, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"HF" = ( +/obj/structure/stone_tile/surrounding_tile, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Ie" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"Je" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/mob/living/basic/chicken{ + name = "\improper gunther"; + desc = "An odd looking gutlunch, this one seems to have feathers and lay eggs, not like you'd complain about that."; + unsuitable_atmos_damage = 0 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Jh" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/item/plate/oven_tray/material/fake_tin, +/obj/item/reagent_containers/cup/soup_pot/material/fake_brass{ + pixel_y = 6; + pixel_x = -3 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"JD" = ( +/obj/structure/flora/ash/leaf_shroom, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"JN" = ( +/obj/structure/stone_tile/slab/burnt, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Kr" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"KS" = ( +/obj/structure/stone_tile/slab/cracked, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"KU" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"La" = ( +/obj/structure/table/wood, +/obj/structure/large_mortar, +/obj/item/pestle, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Ly" = ( +/turf/closed/wall/mineral/wood/nonmetal, +/area/ruin/unpowered/ash_walkers) +"Lz" = ( +/obj/structure/reagent_forge, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"LC" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"LE" = ( +/obj/structure/stone_tile/slab, +/obj/structure/closet/crate/wooden, +/obj/item/seeds/ambrosia, +/obj/item/seeds/ambrosia, +/obj/item/seeds/aloe, +/obj/item/seeds/aloe, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"LI" = ( +/obj/structure/stone_tile/surrounding, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"LO" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Mk" = ( +/obj/structure/stone_tile/block/burnt{ + dir = 1 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Mq" = ( +/obj/structure/flora/ash/cap_shroom, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Mv" = ( +/obj/structure/reagent_crafting_bench, +/obj/item/forging/tongs/primitive, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"MD" = ( +/obj/structure/stone_tile/surrounding_tile/cracked, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"MF" = ( +/obj/item/shovel, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"MR" = ( +/obj/machinery/smartfridge/drying_rack, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"MS" = ( +/obj/structure/reagent_anvil, +/obj/item/forging/hammer/primitive, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Ne" = ( +/obj/structure/closet/crate/wooden, +/obj/item/seeds/chanter, +/obj/item/seeds/chanter, +/obj/item/seeds/coffee, +/obj/item/seeds/herbs, +/obj/item/seeds/herbs, +/obj/item/seeds/kronkus, +/obj/item/seeds/tea, +/obj/item/seeds/tea, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Nf" = ( +/obj/structure/rack/shelf{ + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; + icon_state = "empty_shelf_1" + }, +/obj/item/claymore/bone, +/obj/item/claymore/bone{ + pixel_y = 6 + }, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Nm" = ( +/obj/structure/stone_tile/block/burnt{ + dir = 4 + }, +/obj/structure/stone_tile/burnt{ + dir = 8 + }, +/obj/structure/stone_tile/burnt{ + dir = 4 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"NB" = ( +/obj/structure/rack/shelf{ + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; + icon_state = "empty_shelf_1" + }, +/obj/item/forging/billow/primitive, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"NM" = ( +/obj/structure/barricade/wooden, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"NP" = ( +/obj/structure/bonfire/dense, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"NR" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 1 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"NV" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Oc" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Og" = ( +/obj/structure/stone_tile/surrounding/cracked, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Ol" = ( +/obj/structure/stone_tile/block, +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Os" = ( +/obj/structure/curtain/bounty, +/obj/structure/stone_tile/block{ + dir = 4 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Ov" = ( +/obj/structure/necropolis_gate, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Ox" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/structure/stone_tile, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"OG" = ( +/obj/structure/chair/stool/bamboo{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"OJ" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"OR" = ( +/obj/structure/stone_tile/surrounding_tile, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Pr" = ( +/obj/structure/rack/shelf{ + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; + icon_state = "empty_shelf_1" + }, +/obj/item/bedsheet/black{ + pixel_x = 5 + }, +/obj/item/bedsheet/black{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/bedsheet/black{ + pixel_x = 5; + pixel_y = 8 + }, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"PB" = ( +/obj/structure/rack/shelf{ + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; + icon_state = "empty_shelf_1" + }, +/obj/item/stack/sheet/iron/twenty, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"PF" = ( +/obj/structure/closet/crate/wooden, +/obj/item/seeds/cotton, +/obj/item/seeds/cotton, +/obj/item/seeds/cotton, +/obj/item/seeds/korta_nut, +/obj/item/seeds/korta_nut, +/obj/item/seeds/korta_nut, +/obj/item/seeds/korta_nut/sweet, +/obj/item/seeds/korta_nut/sweet, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"PG" = ( +/obj/structure/rack/shelf{ + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; + icon_state = "empty_shelf_1" + }, +/obj/item/forging/billow/primitive, +/obj/item/stack/sheet/mineral/coal/ten, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"PJ" = ( +/obj/structure/flora/ash/seraka, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"PK" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/obj/structure/flora/ash/cacti, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Qe" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Qw" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/stone_tile{ + dir = 1 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Qx" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile/block/burnt{ + dir = 8 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"QG" = ( +/obj/structure/stone_tile/slab/cracked, +/obj/structure/headpike/bone, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Ra" = ( +/obj/effect/ash_rune, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"RR" = ( +/obj/machinery/vending/ashclothingvendor, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"St" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 4 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"SE" = ( +/obj/structure/rack/shelf{ + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; + icon_state = "empty_shelf_1" + }, +/obj/item/secateurs, +/obj/item/hatchet/wooden, +/obj/item/hatchet/wooden{ + pixel_y = 6 + }, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"SF" = ( +/obj/structure/closet/crate/wooden, +/obj/item/seeds/bamboo, +/obj/item/seeds/bamboo, +/obj/item/seeds/sugarcane, +/obj/item/seeds/sugarcane, +/obj/item/seeds/tower, +/obj/item/seeds/tower, +/obj/item/seeds/tower, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"SX" = ( +/obj/structure/table/wood, +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = 11; + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/glass/bottle/hooch{ + pixel_x = -2; + pixel_y = 11 + }, +/obj/item/food/rootroll{ + pixel_x = -3; + pixel_y = -1 + }, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Ts" = ( +/obj/structure/stone_tile/block, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Uh" = ( +/obj/structure/stone_tile/block, +/obj/structure/stone_tile{ + dir = 4 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Um" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile, +/obj/structure/fermenting_barrel, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Uw" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 4 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"UL" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"UR" = ( +/obj/structure/stone_tile/slab, +/obj/machinery/oven/stone, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Vw" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"VT" = ( +/obj/structure/stone_tile/block/burnt{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"VX" = ( +/obj/structure/closet/crate/miningcar, +/obj/item/stack/sheet/mineral/coal/ten, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"WB" = ( +/obj/structure/closet/crate/wooden, +/obj/item/reagent_containers/blood/lizard{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/reagent_containers/blood/lizard{ + pixel_x = 5; + pixel_y = -2 + }, +/obj/item/stack/sheet/cloth/ten, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"WD" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"WJ" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/surrounding/cracked{ + dir = 8 + }, +/obj/structure/stone_tile/center/burnt, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"WK" = ( +/obj/structure/flora/ash/seraka, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"WM" = ( +/obj/structure/chair/stool/bamboo{ + dir = 4 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"WW" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/stone_tile, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Xe" = ( +/obj/structure/rack/shelf{ + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; + icon_state = "empty_shelf_1" + }, +/obj/item/reagent_containers/cup/glass/bottle/small{ + pixel_x = -5; + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/glass/bottle/small{ + pixel_x = 5; + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/beaker/large/ceramic{ + pixel_x = 7; + pixel_y = -5 + }, +/obj/item/reagent_containers/cup/beaker/large/blowing_glass{ + pixel_y = -5; + pixel_x = -3 + }, +/obj/structure/stone_tile/slab, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Xs" = ( +/obj/structure/stone_tile/surrounding, +/obj/structure/stone_tile/center, +/obj/item/knife/hunting, +/obj/structure/table/bronze, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"XQ" = ( +/obj/structure/stone_tile/block/burnt, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"XV" = ( +/obj/effect/mapping_helpers/no_lava, +/turf/template_noop, +/area/template_noop) +"Yq" = ( +/obj/structure/flora/ash/stem_shroom, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"Zn" = ( +/obj/structure/stone_tile/surrounding_tile, +/obj/structure/flora/ash/cacti, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"ZW" = ( +/obj/structure/stone_tile/block/burnt{ + dir = 4 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) + +(1,1,1) = {" +mv +mv +mv +mv +mv +Ly +Ly +cm +Ly +Ly +mv +mv +mv +mv +mv +mv +mv +mv +mv +mv +mv +mv +mv +"} +(2,1,1) = {" +mv +mv +mv +Ly +cm +Ly +mu +mh +mu +Ly +Ly +mv +mv +mv +mv +mv +mv +mv +mv +mv +mv +mv +mv +"} +(3,1,1) = {" +mv +mv +Ly +Ly +mu +bH +AG +HF +OJ +Nf +Ly +NM +NM +NM +mv +mv +mv +Ly +Ly +Ly +cm +Ly +mv +"} +(4,1,1) = {" +mv +mv +Ly +sl +HF +NV +Qw +pn +WW +tR +cm +mZ +mZ +NM +NM +Ly +cm +Ly +MR +FL +FL +Ly +Ly +"} +(5,1,1) = {" +mv +mv +cm +LO +Vw +Oc +HF +mZ +OJ +Uh +WD +mZ +mZ +mZ +Ly +Ly +UR +PG +pD +ZW +Uw +La +Ly +"} +(6,1,1) = {" +mv +mv +Ly +mu +qs +dw +sS +NP +mZ +dw +KS +dw +WW +PJ +Ly +oe +dw +dw +XQ +mZ +NV +EQ +Ly +"} +(7,1,1) = {" +mv +mv +Ly +Ly +Vw +Ox +zI +WM +NV +DP +OR +mZ +dw +NV +cm +Qe +ku +Qe +HF +ky +Gx +nb +Ly +"} +(8,1,1) = {" +mv +mv +mv +Ly +RR +tl +St +dw +mS +HF +pE +mZ +dw +dw +KS +sS +ab +zV +Jh +zI +OJ +cm +pE +"} +(9,1,1) = {" +mv +mv +mv +Ly +Ly +cm +Um +Qe +ww +cm +pE +mZ +KS +KU +dw +Vw +WM +KU +LI +Ts +DL +Mk +Ly +"} +(10,1,1) = {" +mv +mv +mv +mv +mv +NM +vB +JD +lH +ot +HF +Mq +WJ +OJ +cm +qr +Je +OJ +rP +HF +SX +OG +Ly +"} +(11,1,1) = {" +mv +mv +mv +mv +mv +NM +NM +hr +mZ +jL +zI +mZ +JN +mZ +Ly +Ly +Xe +ij +VT +UL +UL +Og +Ly +"} +(12,1,1) = {" +mv +mv +mv +mv +mv +mv +NM +hd +Mq +pE +HF +mZ +dw +mZ +mZ +Ly +Ly +cm +JN +KS +dw +Ly +Ly +"} +(13,1,1) = {" +mv +mv +mv +pE +pE +pE +pE +pE +UL +zI +mZ +Mq +St +dw +WW +mZ +mZ +OJ +Qe +Qe +xl +cm +mv +"} +(14,1,1) = {" +mv +pE +pE +cm +Qx +lB +yl +cm +pE +EL +mZ +mZ +mZ +mZ +KS +fV +mZ +Mq +mZ +mZ +pE +pE +mv +"} +(15,1,1) = {" +pE +cm +hY +nj +ug +kx +wM +Ao +pE +cm +Kr +mZ +PK +Qw +dw +WW +zI +mZ +Fz +cm +pE +fC +mv +"} +(16,1,1) = {" +pE +jm +iI +nx +rE +eE +wS +BJ +px +FA +KS +Kr +Oc +qW +mZ +OJ +Uh +mZ +NV +dw +pE +XV +XV +"} +(17,1,1) = {" +pE +Xs +nt +nt +ss +uE +xW +Ch +Cl +GG +KU +KS +dw +mZ +Ra +iP +dw +dw +dw +dw +Ov +XV +XV +"} +(18,1,1) = {" +pE +ok +hY +nx +bc +nL +rQ +wp +AZ +FA +KS +MD +Ox +zI +iP +NV +DP +mZ +NR +dw +pE +XV +XV +"} +(19,1,1) = {" +pE +cm +iZ +nI +Az +Hx +Az +Ie +pE +cm +HF +mZ +OJ +St +dw +mS +Zn +mZ +mZ +cm +pE +fC +mv +"} +(20,1,1) = {" +mv +pE +pE +cm +gn +Qx +Nm +cm +pE +QG +mZ +Bs +VT +UL +dw +UL +LC +zI +mZ +mZ +pE +pE +mv +"} +(21,1,1) = {" +mv +mv +mv +pE +pE +pE +pE +pE +Qe +HF +fV +KU +pE +pE +KS +Qe +cm +pE +zI +Mq +mZ +cm +mv +"} +(22,1,1) = {" +mv +mv +mv +mv +mv +mv +NM +Mq +mZ +mZ +mZ +qy +cm +NB +NV +zI +Uw +dw +Ts +aK +mZ +Ly +Ly +"} +(23,1,1) = {" +mv +mv +mv +mv +mv +mv +NM +mZ +mZ +mZ +Mq +KU +PB +sI +OJ +HF +NV +dw +Bc +mZ +mZ +PF +Ly +"} +(24,1,1) = {" +mv +mv +mv +mv +mv +Ly +cm +Os +Os +cm +mZ +Mk +Ol +zI +mZ +mZ +Mv +pE +HF +wR +MF +mZ +Ly +"} +(25,1,1) = {" +mv +mv +mv +pE +Ly +Ly +FL +mZ +mZ +hL +mZ +KU +pE +Lz +zI +Og +MS +cm +eA +mZ +wR +mZ +Ly +"} +(26,1,1) = {" +mv +mv +Ly +Ly +mu +EH +Cp +UL +zI +hL +mZ +OJ +pE +cm +VX +nY +pE +pE +WK +mZ +wR +eU +cm +"} +(27,1,1) = {" +mv +mv +cm +Pr +sI +mZ +KU +LI +Ts +cm +pE +mZ +mZ +pE +pE +cm +pE +Do +Ts +mc +mZ +mZ +Ly +"} +(28,1,1) = {" +mv +mv +Ly +Ts +mZ +mZ +OJ +Qe +HF +La +Ly +mZ +mZ +Yq +mZ +mZ +SF +Qe +Ar +PJ +mZ +Ly +Ly +"} +(29,1,1) = {" +mv +mv +Ly +mu +hX +Vw +Og +pF +Hr +eO +Ly +PJ +mZ +mZ +MF +Mq +wR +mZ +mZ +PJ +Ne +Ly +mv +"} +(30,1,1) = {" +mv +mv +Ly +Ly +Ly +WB +hA +Ly +cm +Ly +Ly +cm +mZ +NV +VT +UL +UL +zI +MF +mZ +Ly +Ly +mv +"} +(31,1,1) = {" +mv +mv +mv +mv +Ly +cm +Ly +Ly +mv +mv +mv +pE +Ly +Ly +LE +tg +SE +Ly +Ly +cm +Ly +mv +mv +"} +(32,1,1) = {" +mv +mv +mv +mv +mv +mv +mv +mv +mv +mv +mv +mv +mv +Ly +Ly +cm +Ly +Ly +mv +mv +mv +mv +mv +"} diff --git a/_maps/RandomRuins/LavaRuins/nova/lavaland_surface_interdyne_base1.dmm b/_maps/RandomRuins/LavaRuins/nova/lavaland_surface_interdyne_base1.dmm new file mode 100644 index 00000000000000..d7e92431cf8035 --- /dev/null +++ b/_maps/RandomRuins/LavaRuins/nova/lavaland_surface_interdyne_base1.dmm @@ -0,0 +1,10402 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/template_noop, +/area/template_noop) +"ab" = ( +/turf/closed/mineral/random/volcanic, +/area/lavaland/surface/outdoors) +"ac" = ( +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) +"ad" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 9; + faction = list("Syndicate","neutral") + }, +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base) +"ae" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo/deck) +"af" = ( +/obj/machinery/door/poddoor{ + id = "interdynedeckofficer" + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/cargo/deck) +"ag" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 5; + faction = list("Syndicate","neutral") + }, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base) +"ah" = ( +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/deck_officer{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"ai" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"ak" = ( +/obj/machinery/door/airlock{ + name = "Bedroom" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo/deck) +"al" = ( +/obj/structure/chair/office/light, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"am" = ( +/obj/machinery/button/door/directional/east{ + id = "interdynedeckofficer"; + req_access = list("syndicate") + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"an" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/towel_bin, +/obj/structure/table{ + layer = 2.79 + }, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/ruin/interdyne_planetary_base/cargo/deck) +"ao" = ( +/obj/structure/drain, +/obj/structure/curtain, +/obj/machinery/shower/directional/west{ + desc = "A borrowed Nanotrasen Hygiene Division HS-452. It's one of the older 2550's series. A small sticker on the side insists it \"observes 2560 lead compliance!\"; passively replenishes itself with water when not in use." + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/interdyne_planetary_base/cargo/deck) +"as" = ( +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"at" = ( +/obj/machinery/light/directional/west, +/obj/structure/closet/secure_closet{ + name = "deck offficer's locker"; + icon_state = "qm"; + req_access = list("syndicate_leader"); + icon_door = "qm" + }, +/obj/item/clothing/neck/cloak/qm/nova/interdyne, +/obj/item/clothing/under/rank/cargo/qm/nova/interdyne, +/obj/item/circuitboard/computer/advanced_camera, +/obj/item/megaphone/cargo, +/obj/item/clothing/glasses/sunglasses, +/obj/item/ammo_box/magazine/m9mm{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/gun/ballistic/automatic/pistol, +/obj/item/stamp/syndicate, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"au" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/carpet/orange, +/area/ruin/interdyne_planetary_base/cargo/deck) +"av" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/carpet/orange, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aw" = ( +/obj/structure/table/wood, +/obj/machinery/light/directional/west, +/obj/structure/sign/calendar/directional/west{ + pixel_z = 6; + color = "#FFFFFF"; + pixel_w = 3 + }, +/obj/item/table_clock{ + pixel_x = -6; + anchored_tabletop_offset = 8 + }, +/obj/item/paper_bin{ + pixel_x = 8; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = 8; + pixel_y = 4 + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"ax" = ( +/obj/structure/table/wood, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"ay" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"az" = ( +/obj/machinery/door/airlock{ + name = "Bathroom" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aB" = ( +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aC" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo) +"aD" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"aH" = ( +/obj/structure/dresser, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aI" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/carpet/orange, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aJ" = ( +/obj/structure/bed, +/obj/item/bedsheet/qm{ + name = "deck officer's bedsheet" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/carpet/orange, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aK" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aL" = ( +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aM" = ( +/obj/structure/toilet{ + dir = 4; + pixel_z = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aN" = ( +/obj/structure/sink/directional/west, +/obj/structure/mirror/directional/east, +/turf/open/floor/iron/showroomfloor, +/area/ruin/interdyne_planetary_base/cargo/deck) +"aO" = ( +/obj/structure/sign/warning/gas_mask/directional/east, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"aQ" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/cargo) +"aR" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"aS" = ( +/obj/machinery/door/poddoor{ + id = "interdynecargo" + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/cargo) +"aU" = ( +/obj/structure/dresser, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"aV" = ( +/obj/structure/closet/secure_closet/personal/wall{ + pixel_y = 30; + pixel_w = 0; + icon_door = "locker_wall" + }, +/turf/open/floor/iron/smooth_edge, +/area/ruin/interdyne_planetary_base/cargo) +"aW" = ( +/obj/structure/bed, +/obj/item/bedsheet/dorms, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"aX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"aY" = ( +/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/tile/dark_red/half{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"aZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"ba" = ( +/obj/machinery/suit_storage_unit/mining, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bb" = ( +/obj/machinery/suit_storage_unit/mining, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bd" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/structure/sign/poster/contraband/icebox_moment/directional/north, +/obj/structure/tank_dispenser, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"be" = ( +/obj/machinery/computer/order_console/mining/interdyne, +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bf" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 8 + }, +/obj/structure/noticeboard/directional/north, +/obj/structure/closet/crate, +/obj/item/reagent_containers/cup/glass/waterbottle, +/obj/item/reagent_containers/cup/glass/waterbottle, +/obj/item/reagent_containers/cup/glass/waterbottle, +/obj/item/reagent_containers/cup/glass/waterbottle, +/obj/item/reagent_containers/cup/glass/waterbottle, +/obj/item/reagent_containers/cup/glass/waterbottle/large, +/obj/item/reagent_containers/cup/glass/waterbottle/large, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bg" = ( +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bh" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bi" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bj" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bk" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 4; + layer = 2.52 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bl" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bm" = ( +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/shaftminer{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/smooth_edge{ + dir = 4 + }, +/area/ruin/interdyne_planetary_base/cargo) +"bn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"bo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/smooth_edge{ + dir = 8 + }, +/area/ruin/interdyne_planetary_base/cargo) +"bp" = ( +/obj/machinery/door/airlock/mining{ + name = "Shaft Miner Dormitory Alpha" + }, +/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/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"br" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Bay" + }, +/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/syndicate/general, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4; + layer = 2.01 + }, +/obj/machinery/duct, +/obj/effect/turf_decal/siding/thinplating{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bu" = ( +/obj/machinery/duct, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bv" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bw" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "interdynecargoout" + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/caution{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"by" = ( +/obj/item/flashlight{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/flashlight{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/extinguisher{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/extinguisher{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/extinguisher{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/machinery/conveyor{ + dir = 4; + id = "interdynecargoout" + }, +/obj/structure/closet/crate/cardboard, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bz" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "interdynecargoout" + }, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bA" = ( +/obj/machinery/door/poddoor{ + id = "interdynecargowest" + }, +/obj/machinery/conveyor{ + dir = 4; + id = "interdynecargoout" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/cargo) +"bB" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "interdynecargoout" + }, +/obj/structure/plasticflaps, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4; + layer = 2.52 + }, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/cargo) +"bC" = ( +/obj/machinery/door/poddoor{ + id = "interdynecargowest" + }, +/obj/machinery/conveyor{ + dir = 4; + id = "interdynecargoout" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/cargo) +"bE" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/obj/structure/window/reinforced/tinted/spawner/directional/north, +/obj/structure/flora/rock/pile, +/turf/open/misc/asteroid/basalt, +/area/ruin/interdyne_planetary_base/cargo) +"bF" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/obj/structure/window/reinforced/tinted/spawner/directional/north, +/turf/open/misc/asteroid/basalt, +/area/ruin/interdyne_planetary_base/cargo) +"bG" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/obj/structure/window/reinforced/tinted/spawner/directional/north, +/obj/structure/flora/rock, +/turf/open/misc/asteroid/basalt, +/area/ruin/interdyne_planetary_base/cargo) +"bH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/cargo) +"bI" = ( +/obj/structure/table, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"bJ" = ( +/obj/effect/turf_decal/arrows, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bK" = ( +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bL" = ( +/obj/structure/closet/crate/internals{ + anchored = 1 + }, +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/emergency_oxygen/double, +/obj/item/tank/internals/emergency_oxygen/double, +/obj/item/tank/internals/emergency_oxygen/double, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/effect/turf_decal/box/white, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bN" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/rack, +/obj/effect/turf_decal/box/white, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bO" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bP" = ( +/obj/machinery/button/door{ + pixel_x = 32; + pixel_y = 8; + id = "interdynecargowest" + }, +/obj/machinery/button/door{ + pixel_x = 32; + pixel_y = -8; + id = "interdynecargoeast" + }, +/obj/machinery/computer/shuttle{ + name = "syndicate cargo shuttle terminal"; + desc = "Occasionally used to call in a resupply shuttle if one is in range."; + dir = 8; + light_color = "#FA8282"; + req_access = list("syndicate"); + icon_screen = "syndishuttle"; + icon_keyboard = "syndie_key"; + shuttleId = "syndie_cargo"; + possible_destinations = "syndielavaland_cargo" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bQ" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/cargo) +"bR" = ( +/obj/machinery/door/airlock/mining{ + name = "Shaft Miner Dormitory Beta" + }, +/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/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bS" = ( +/obj/structure/weightmachine/weightlifter, +/obj/effect/turf_decal/siding/dark/end{ + dir = 1 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/eighties/red, +/area/ruin/interdyne_planetary_base/cargo) +"bT" = ( +/obj/structure/frame/machine{ + icon_state = "box_1"; + state = 2; + anchored = 1 + }, +/obj/item/circuitboard/machine/ore_redemption, +/obj/item/assembly/igniter, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bU" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bV" = ( +/obj/structure/rack/shelf, +/obj/effect/turf_decal/box/white, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/pickaxe, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bX" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/box/white, +/obj/structure/closet/secure_closet{ + icon_state = "syndicate"; + base_icon_state = "syndicate"; + req_access = list("syndicate"); + icon_door = "syndicate" + }, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"bY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"bZ" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "interdynecargoin" + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"ca" = ( +/obj/structure/closet/crate, +/obj/item/storage/box/stockparts/deluxe, +/obj/item/storage/box/stockparts/deluxe, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/circuitboard/machine/gibber, +/obj/machinery/conveyor{ + dir = 8; + id = "interdynecargoin" + }, +/obj/item/stack/rods/fifty, +/obj/item/stack/sheet/mineral/plastitanium{ + amount = 50 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cb" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "interdynecargoin" + }, +/obj/structure/closet/crate/medical, +/obj/item/storage/medkit/fire{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/medkit/brute, +/obj/item/storage/medkit/regular{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cc" = ( +/obj/machinery/door/poddoor{ + id = "interdynecargoeast" + }, +/obj/machinery/conveyor{ + dir = 8; + id = "interdynecargoin" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/cargo) +"cd" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "interdynecargoin" + }, +/obj/structure/plasticflaps, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4; + layer = 2.52 + }, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/cargo) +"ce" = ( +/obj/machinery/door/poddoor{ + id = "interdynecargoeast" + }, +/obj/machinery/conveyor{ + dir = 8; + id = "interdynecargoin" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/cargo) +"cf" = ( +/obj/structure/closet/secure_closet/personal/wall{ + pixel_y = -30; + pixel_w = 0; + icon_door = "locker_wall" + }, +/turf/open/floor/iron/smooth_edge{ + dir = 1 + }, +/area/ruin/interdyne_planetary_base/cargo) +"cg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/west{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/cargo) +"ch" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_red/half, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"ci" = ( +/obj/structure/punching_bag, +/obj/effect/turf_decal/siding/dark/end, +/turf/open/floor/eighties/red, +/area/ruin/interdyne_planetary_base/cargo) +"cj" = ( +/obj/structure/railing, +/obj/effect/turf_decal/loading_area, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"ck" = ( +/obj/structure/railing, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"cl" = ( +/obj/structure/railing, +/obj/effect/turf_decal/box/white, +/obj/structure/rack/shelf, +/obj/item/construction/rcd/loaded/interdyne, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"cm" = ( +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"cn" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/machinery/vending/wardrobe/syndie_wardrobe{ + onstation = 0; + contraband = list(/obj/item/knife/combat=1, /obj/item/clothing/under/syndicate/coldres=6, /obj/item/clothing/shoes/combat/coldres=6); + extended_inventory = 1 + }, +/turf/open/floor/iron/diagonal, +/area/ruin/interdyne_planetary_base/cargo) +"co" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cp" = ( +/obj/machinery/button/door/directional/south{ + name = "window security button"; + id = "interdynecargo"; + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cs" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 10; + faction = list("Syndicate","neutral") + }, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base) +"ct" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/item/fakeartefact{ + possible = list(/obj/item/gun/energy/recharge/kinetic_accelerator,/obj/item/gun/energy/plasmacutter,/obj/item/gun/energy/plasmacutter/adv,/obj/item/kinetic_crusher,/obj/item/kinetic_crusher/compact,/obj/item/pickaxe/drill,/obj/item/pickaxe/drill/diamonddrill,/obj/item/resonator,/obj/item/resonator/upgraded) + }, +/obj/structure/table/bronze, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cu" = ( +/obj/structure/displaycase{ + desc = "A display case containing an expensive forgery, probably."; + alert = 0; + req_access = list("syndicate"); + start_showpiece_type = /obj/item/fakeartefact + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cv" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cw" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cx" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/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/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cy" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cz" = ( +/obj/effect/turf_decal/siding/thinplating/corner{ + dir = 1 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cC" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/cargo) +"cD" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 1 + }, +/obj/item/modular_computer/laptop/preset/syndicate, +/obj/item/modular_computer/laptop/preset/syndicate, +/obj/item/modular_computer/laptop/preset/syndicate, +/obj/item/modular_computer/laptop/preset/syndicate, +/obj/item/modular_computer/laptop/preset/syndicate, +/obj/item/modular_computer/laptop/preset/syndicate, +/obj/machinery/firealarm/directional/south{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/item/modular_computer/laptop/preset/syndicate, +/obj/structure/closet/crate/centcom, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"cE" = ( +/obj/structure/closet/crate/secure/weapon{ + req_access = list("syndicate") + }, +/obj/item/ammo_box/c9mm{ + pixel_y = 6 + }, +/obj/item/ammo_box/c9mm, +/obj/item/ammo_box/magazine/m9mm{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/ammo_box/magazine/m9mm{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/ammo_box/magazine/m9mm{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/ammo_box/magazine/m9mm{ + pixel_x = 4; + pixel_y = -4 + }, +/obj/effect/turf_decal/siding/brown{ + dir = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"cF" = ( +/obj/effect/turf_decal/box/red/corners, +/obj/effect/turf_decal/box/red/corners{ + dir = 8 + }, +/obj/structure/closet/crate/secure/gear{ + desc = "A secure gear crate, with the Syndicate logo on it."; + icon_state = "syndicrate"; + base_icon_state = "syndicrate"; + req_access = list("syndicate") + }, +/obj/item/clothing/glasses/night, +/obj/item/clothing/glasses/night, +/obj/item/clothing/glasses/night, +/obj/item/storage/belt/military, +/obj/item/storage/belt/military, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/under/syndicate/combat, +/obj/item/clothing/under/syndicate/combat, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/combat, +/obj/effect/turf_decal/siding/brown{ + dir = 1 + }, +/obj/item/radio/headset/interdyne, +/obj/item/radio/headset/interdyne, +/obj/item/radio/headset/interdyne, +/obj/item/card/id/advanced/chameleon/black, +/obj/item/card/id/advanced/chameleon/black, +/obj/item/card/id/advanced/chameleon/black, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"cG" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/effect/turf_decal/siding/brown{ + dir = 5 + }, +/obj/item/storage/toolbox/electrical{ + pixel_y = 4 + }, +/obj/structure/closet/crate/engineering, +/obj/item/storage/inflatable, +/obj/item/storage/toolbox/syndicate{ + layer = 3.001 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"cH" = ( +/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/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cI" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"cK" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 9 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"cL" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"cM" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo) +"cQ" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Bay" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-cargo" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/cargo) +"cR" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/lattice/catwalk, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/interdyne_planetary_base/main) +"cS" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Bay" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-cargo" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/obj/machinery/door/firedoor, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/cargo) +"cT" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo/ware) +"cU" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/mining/glass{ + name = "Warehouse" + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/ware) +"cW" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/lattice/catwalk, +/obj/effect/turf_decal/sand/volcanic, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/interdyne_planetary_base/main) +"cX" = ( +/obj/machinery/door/poddoor{ + id = "interdynecargohall" + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/cargo) +"cY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/button/door/directional/west{ + name = "window security button"; + pixel_y = 24; + id = "interdynecargohall"; + req_access = list("syndicate") + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/cargo) +"cZ" = ( +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"da" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/cargo) +"db" = ( +/obj/machinery/door/poddoor{ + id = "interdynewarehosue" + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/cargo/ware) +"dc" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/ware) +"dd" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/box/white, +/obj/structure/ore_box, +/obj/machinery/button/door/directional/north{ + id = "interdynewarehosue"; + name = "window security button"; + req_access = list("syndicate") + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/ware) +"de" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/chair/plastic{ + dir = 8 + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"df" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 6; + faction = list("Syndicate","neutral") + }, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base) +"dg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/cargo) +"dh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/smooth_edge{ + dir = 4 + }, +/area/ruin/interdyne_planetary_base/cargo/ware) +"di" = ( +/obj/structure/ore_box, +/obj/effect/turf_decal/box/white, +/turf/open/floor/iron/smooth_edge{ + dir = 8 + }, +/area/ruin/interdyne_planetary_base/cargo/ware) +"dj" = ( +/obj/structure/disposalpipe/trunk, +/obj/structure/disposaloutlet{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/med/viro) +"dk" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med/viro) +"dl" = ( +/obj/machinery/door/airlock/command{ + name = "Deck Officer" + }, +/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/syndicate/leader, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"dm" = ( +/obj/machinery/porta_turret/syndicate{ + faction = list("Syndicate","neutral") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base) +"dn" = ( +/obj/effect/turf_decal/box/white, +/obj/item/toy/figure/prisoner{ + layer = 2.9 + }, +/obj/structure/ore_box, +/turf/open/floor/iron/smooth_edge{ + dir = 8 + }, +/area/ruin/interdyne_planetary_base/cargo/ware) +"do" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/obj/item/kirbyplants/synthetic/plant27{ + pixel_x = 12; + pixel_y = 5 + }, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"dp" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med/viro) +"dq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/north{ + dir = 1 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"dr" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med/viro) +"ds" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/firealarm/directional/north{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"dt" = ( +/obj/structure/table/glass, +/obj/structure/reagent_dispensers/wall/virusfood/directional/west, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/storage/box/syringes, +/obj/structure/sign/clock/directional/north{ + pixel_y = 26 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"du" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/dropper{ + pixel_y = -6 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/obj/item/book/manual/wiki/infections, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/button/door/directional/west{ + name = "window security button"; + pixel_y = -24; + id = "interdynecargohall"; + req_access = list("syndicate") + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/cargo) +"dw" = ( +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_red/half, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"dx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/ware) +"dy" = ( +/obj/structure/closet/crate, +/obj/item/storage/bag/trash, +/obj/item/mop, +/obj/item/reagent_containers/cup/bucket, +/obj/item/soap/syndie, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 10 + }, +/obj/item/reagent_containers/cup/rag{ + pixel_x = -4; + pixel_y = 3 + }, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/box/white, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/cargo/ware) +"dz" = ( +/obj/machinery/light/directional/north, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dA" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north{ + req_access = list("syndicate") + }, +/obj/structure/table/glass, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 10 + }, +/obj/item/storage/box/gloves, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dB" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dC" = ( +/obj/structure/bed/pod, +/mob/living/carbon/human/species/monkey{ + faction = list("neutral","Syndicate"); + ai_controller = null + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dD" = ( +/obj/machinery/light/directional/north, +/obj/structure/bed/pod, +/mob/living/carbon/human/species/monkey{ + faction = list("neutral","Syndicate"); + ai_controller = null + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dE" = ( +/obj/structure/table/glass, +/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/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dF" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance/external, +/obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"dG" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Bay" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-cargo" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/cargo) +"dH" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Bay" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-cargo" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/cargo) +"dI" = ( +/obj/structure/cable, +/obj/structure/chair/office{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dK" = ( +/obj/item/storage/box/monkeycubes/syndicate{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/structure/table/glass, +/obj/item/storage/box/monkeycubes/syndicate{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dL" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dM" = ( +/obj/machinery/door/window/survival_pod{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dN" = ( +/obj/machinery/smartfridge/chemistry/virology/preloaded, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dO" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/main) +"dP" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/bar) +"dQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/door/window/survival_pod{ + req_access = list("syndicate") + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dR" = ( +/obj/machinery/computer/pandemic, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dS" = ( +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"dT" = ( +/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/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"dU" = ( +/obj/machinery/door/firedoor, +/obj/machinery/duct, +/obj/machinery/light/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"dV" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/table/glass, +/obj/item/healthanalyzer/simple/disease, +/obj/item/clothing/glasses/hud/health, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dW" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/structure/closet/l3closet/virology, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dX" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/structure/closet/l3closet/virology, +/obj/effect/turf_decal/siding/dark/end{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dY" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"dZ" = ( +/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/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"ea" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"eb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"ec" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"ed" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/item/toy/cards/deck/kotahi{ + pixel_y = 5 + }, +/obj/structure/table, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"ee" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/interdyne_planetary_base/main) +"ef" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/main) +"eg" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"eh" = ( +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"ei" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"ej" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"ek" = ( +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"el" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"em" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"en" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + 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/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"eo" = ( +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"ep" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"eq" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"er" = ( +/obj/machinery/door/airlock/maintenance/external, +/obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"es" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/science) +"et" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/science) +"eu" = ( +/obj/machinery/door/poddoor{ + id = "interdynescience" + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/science) +"ev" = ( +/obj/structure/railing{ + dir = 9 + }, +/obj/structure/lattice/catwalk, +/obj/effect/turf_decal/sand/volcanic, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/interdyne_planetary_base/main) +"ew" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/chair/plastic{ + dir = 4 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"ex" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/obj/effect/turf_decal/sand/volcanic, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/interdyne_planetary_base/main) +"ey" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/obj/structure/sign/warning/biohazard/directional/east{ + pixel_y = 32 + }, +/obj/effect/turf_decal/sand/volcanic, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/interdyne_planetary_base/main) +"ez" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"eA" = ( +/obj/effect/turf_decal/vg_decals/department/cargo, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"eB" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"eC" = ( +/obj/structure/fans/tiny, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance/external, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"eD" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"eE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/south{ + dir = 1 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"eF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/south{ + req_access = list("syndicate") + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"eG" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"eH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"eI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/table, +/obj/item/toy/cards/deck/cas{ + pixel_y = 6 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"eJ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"eK" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/main) +"eL" = ( +/obj/machinery/firealarm/directional/south{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"eM" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med) +"eN" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/med) +"eO" = ( +/obj/machinery/cell_charger_multi, +/obj/item/stock_parts/cell/bluespace, +/obj/machinery/airalarm/directional/west{ + req_access = list("syndicate") + }, +/obj/structure/table/glass/plasmaglass, +/obj/structure/sign/poster/official/periodic_table/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"eP" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"eQ" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"eR" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"eS" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"eT" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"eU" = ( +/obj/structure/cable, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"eV" = ( +/obj/machinery/door/poddoor{ + id = "interdynesciencehall" + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/science) +"eW" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/main/vault) +"eX" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "interdynemedhall" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/med) +"eY" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"eZ" = ( +/obj/machinery/door/airlock/maintenance/external, +/obj/structure/fans/tiny, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"fa" = ( +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"fb" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/main/vault) +"fc" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/machinery/firealarm/directional/west{ + dir = 4 + }, +/turf/open/floor/iron{ + icon_state = "sepia"; + base_icon_state = "sepia" + }, +/area/ruin/interdyne_planetary_base/serv/bar) +"fd" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med) +"fe" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"ff" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/virology/glass{ + name = "Virological Lab" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/viro) +"fg" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fh" = ( +/obj/structure/chair/sofa/bench/right, +/obj/structure/sign/poster/contraband/interdyne_gene_clinics/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fi" = ( +/obj/structure/chair/sofa/bench/left, +/obj/structure/sign/poster/official/moth_epi/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fj" = ( +/obj/structure/reagent_dispensers/water_cooler/directional/north, +/obj/machinery/airalarm/directional/east{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fk" = ( +/obj/machinery/medical_kiosk, +/obj/structure/sign/warning/biohazard/directional/north, +/obj/machinery/airalarm/directional/west{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fm" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/machinery/sleeper/syndie/fullupgrade{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/obj/structure/sign/warning/biohazard/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fn" = ( +/obj/item/storage/box/stockparts/deluxe{ + pixel_x = -6; + pixel_y = 11 + }, +/obj/item/storage/box/stockparts/deluxe{ + pixel_x = 8; + pixel_y = 5 + }, +/obj/item/mmi/posibrain/syndie/interdyne, +/obj/item/storage/box/beakers/bluespace, +/obj/structure/table/glass/plasmaglass, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"fo" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"fp" = ( +/obj/structure/frame/computer{ + dir = 4; + anchored = 1 + }, +/turf/open/floor/vault/alien{ + name = "floor" + }, +/area/ruin/interdyne_planetary_base/science) +"fq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"fr" = ( +/obj/structure/frame/machine{ + icon_state = "box_1"; + state = 2; + anchored = 1 + }, +/turf/open/floor/vault/alien{ + name = "floor" + }, +/area/ruin/interdyne_planetary_base/science) +"fs" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"ft" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"fu" = ( +/obj/machinery/door/airlock/research{ + name = "Science Wing" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-science" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/science) +"fv" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/science) +"fw" = ( +/obj/machinery/firealarm/directional/north{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fx" = ( +/obj/machinery/stasis{ + dir = 8 + }, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fy" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fz" = ( +/obj/machinery/cryo_cell, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fB" = ( +/turf/closed/wall/r_wall/syndicate{ + fixed_underlay = list(icon='icons/turf/floors.dmi', icon_state="textured_dark_large") + }, +/area/ruin/interdyne_planetary_base/main) +"fC" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/portable_atmospherics/canister/anesthetic_mix, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fD" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"fE" = ( +/obj/machinery/firealarm/directional/east{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"fF" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/button/door/directional/north{ + name = "window security button"; + pixel_x = -24; + id = "interdynemedhall"; + req_access = list("syndicate") + }, +/turf/open/floor/catwalk_floor/flat_white, +/area/ruin/interdyne_planetary_base/med) +"fG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/flat_white, +/area/ruin/interdyne_planetary_base/med) +"fH" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/button/door/directional/north{ + name = "window security button"; + pixel_x = 24; + id = "interdynemedhall"; + req_access = list("syndicate") + }, +/turf/open/floor/catwalk_floor/flat_white, +/area/ruin/interdyne_planetary_base/med) +"fI" = ( +/obj/item/circuitboard/machine/ore_silo, +/obj/structure/frame/machine{ + icon_state = "box_1"; + state = 2; + anchored = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/vault) +"fJ" = ( +/obj/machinery/turretid{ + name = "Base turret controls"; + desc = "Used to control the base's automated defenses."; + icon_state = "control_kill"; + dir = 1; + pixel_y = 30; + req_access = list("syndicate"); + lethal = 1; + control_area = "/area/ruin/interdyne_planetary_base"; + ailock = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/vault) +"fK" = ( +/obj/machinery/blackbox_recorder, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/vault) +"fL" = ( +/obj/structure/table/reinforced, +/obj/item/storage/backpack/duffelbag/syndie/surgery, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"fN" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"fO" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Medical Wing"; + req_access = list("syndicate") + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-medbay" + }, +/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/flat_white, +/area/ruin/interdyne_planetary_base/med) +"fP" = ( +/obj/structure/table/optable, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fQ" = ( +/obj/machinery/computer/operating, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fR" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Medical Wing"; + req_access = list("syndicate") + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-medbay" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4; + layer = 2.52 + }, +/turf/open/floor/catwalk_floor/flat_white, +/area/ruin/interdyne_planetary_base/med) +"fS" = ( +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1; + layer = 2.52 + }, +/turf/open/floor/catwalk_floor/flat_white, +/area/ruin/interdyne_planetary_base/med) +"fU" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/machinery/sleeper/syndie/fullupgrade{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"fV" = ( +/obj/item/storage/box/rndboards{ + pixel_y = 4 + }, +/obj/structure/table/glass/plasmaglass, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"fW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"fX" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/science) +"fY" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"fZ" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"ga" = ( +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"gb" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Medical Wing"; + req_access = list("syndicate") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1; + layer = 2.52 + }, +/turf/open/floor/catwalk_floor/flat_white, +/area/ruin/interdyne_planetary_base/med) +"gc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1; + layer = 2.52 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gd" = ( +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"ge" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1; + layer = 2.52 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gf" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gg" = ( +/obj/machinery/stasis{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/machinery/airalarm/directional/west{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gi" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/obj/machinery/light/directional/west, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"gj" = ( +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gk" = ( +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gl" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/vg_decals/department/sci{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"gm" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/frame/machine{ + icon_state = "box_1"; + state = 2; + anchored = 1 + }, +/obj/item/circuitboard/machine/ammo_workbench, +/obj/item/disk/ammo_workbench/advanced, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/vault) +"gn" = ( +/obj/machinery/syndicatebomb/self_destruct{ + anchored = 1 + }, +/obj/effect/turf_decal/stripes/red/box, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/vault) +"go" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/suit_storage_unit/syndicate/chameleon, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/vault) +"gp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gr" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gs" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/vg_decals/department/med{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"gt" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/machinery/light/directional/east, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"gu" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/med) +"gv" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/item/storage/backpack/duffelbag/synth_treatment_kit/trauma/advanced, +/obj/structure/railing/corner/end, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gw" = ( +/obj/machinery/iv_drip, +/obj/machinery/defibrillator_mount/loaded{ + pixel_x = 28; + req_one_access = null + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gy" = ( +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/sign/flag/interdyne/directional/east, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gz" = ( +/obj/machinery/autolathe/hacked, +/turf/open/floor/vault/alien{ + name = "floor" + }, +/area/ruin/interdyne_planetary_base/science) +"gA" = ( +/obj/item/stack/cable_coil, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"gB" = ( +/obj/machinery/door/airlock/research{ + name = "Science Wing" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-science" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/science) +"gC" = ( +/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/south{ + name = "window security button"; + pixel_x = -24; + pixel_w = 0; + id = "interdynesciencehall"; + req_access = list("syndicate") + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/science) +"gD" = ( +/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/ruin/interdyne_planetary_base/science) +"gE" = ( +/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/south{ + name = "window security button"; + pixel_x = 24; + pixel_w = 0; + id = "interdynesciencehall"; + req_access = list("syndicate") + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/science) +"gF" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/science/xeno) +"gG" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gI" = ( +/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_large, +/area/ruin/interdyne_planetary_base/science) +"gJ" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gK" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gL" = ( +/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/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"gM" = ( +/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/ruin/interdyne_planetary_base/main) +"gN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/table, +/obj/item/toy/cards/deck/cas/black{ + pixel_x = 3; + pixel_y = 11 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"gO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/flat_white, +/area/ruin/interdyne_planetary_base/med) +"gP" = ( +/obj/item/gun/ballistic/rifle/sniper_rifle/syndicate, +/obj/structure/rack/gunrack, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/vault) +"gQ" = ( +/obj/structure/plaque/static_plaque/golden/commission/interdyne_planetary_base/lavaland, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/vault) +"gR" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gS" = ( +/obj/structure/tank_holder/anesthetic, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/structure/railing{ + dir = 10 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gT" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gU" = ( +/obj/machinery/smartfridge/organ, +/obj/structure/railing, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"gV" = ( +/obj/structure/safe{ + dir = 4 + }, +/obj/item/storage/box/syndie_kit/chameleon/ghostcafe{ + name = "chameleon kit"; + desc = "It's a box, for storing things." + }, +/obj/item/disk/ammo_workbench/advanced, +/obj/item/suppressor, +/obj/item/toy/redbutton, +/obj/item/folder/syndicate/mining, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/vault) +"gW" = ( +/obj/machinery/door/poddoor{ + id = "interdynemedbay" + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/med) +"gX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/west{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"gY" = ( +/obj/structure/disposalpipe/junction/flip, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"gZ" = ( +/obj/item/skillchip/wine_taster, +/obj/item/skillchip/job/roboticist, +/obj/structure/table/glass/plasmaglass, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"ha" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"hb" = ( +/obj/item/storage/toolbox/syndicate, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"hc" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + 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/textured_large, +/area/ruin/interdyne_planetary_base/science) +"hd" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"he" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Medical Wing"; + req_access = list("syndicate") + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-medbay" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/flat_white, +/area/ruin/interdyne_planetary_base/med) +"hf" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Medical Wing"; + req_access = list("syndicate") + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-medbay" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/flat_white, +/area/ruin/interdyne_planetary_base/med) +"hg" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Medical Wing"; + req_access = list("syndicate") + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/flat_white, +/area/ruin/interdyne_planetary_base/med) +"hh" = ( +/obj/structure/sign/warning/chem_diamond/directional/south, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"hi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"hj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/obj/structure/sign/poster/contraband/the_big_gas_giant_truth/directional/west, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"hk" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med/pharm) +"hl" = ( +/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/textured_large, +/area/ruin/interdyne_planetary_base/med) +"hm" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"hn" = ( +/obj/machinery/door/airlock/vault{ + id_tag = "syndie_lavaland_vault" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/vault) +"ho" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"hp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"hq" = ( +/obj/machinery/limbgrower, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"hr" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/sign/poster/contraband/syndicate_medical/directional/east, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"hs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"ht" = ( +/obj/machinery/firealarm/directional/east{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"hu" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/science/xeno) +"hv" = ( +/obj/machinery/door/airlock/research{ + name = "Xenobiological Lab" + }, +/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/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"hw" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/obj/machinery/fax{ + dir = 1; + fax_name = "Interdyne Pharmaceuticals"; + name = "Interdyne Fax Machine"; + req_access = list("syndicate"); + syndicate_network = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"hx" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/item/folder/white, +/obj/item/pen{ + pixel_y = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"hy" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/item/clothing/neck/stethoscope, +/obj/item/healthanalyzer, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"hz" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med/pharm) +"hB" = ( +/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/syndicate/general, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical{ + name = "Pharmacy" + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"hC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/chair/plastic{ + dir = 4 + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"hD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/toy/cards/deck/wizoff{ + pixel_y = 6 + }, +/obj/structure/table, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"hE" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/med/pharm) +"hF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/chair/plastic{ + dir = 8 + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"hG" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/window/survival_pod{ + dir = 1 + }, +/obj/machinery/door/window/survival_pod{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"hH" = ( +/obj/machinery/door/firedoor, +/obj/machinery/smartfridge/chemistry/preloaded{ + initial_contents = list(/obj/item/reagent_containers/pill/epinephrine=12, /obj/item/reagent_containers/pill/multiver=5, /obj/item/reagent_containers/cup/bottle/epinephrine=1, /obj/item/reagent_containers/cup/bottle/multiver=1, /obj/item/storage/pill_bottle/sansufentanyl=10, /obj/item/storage/pill_bottle/mannitol=1) + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"hI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"hJ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"hK" = ( +/obj/item/disk/design_disk/limbs/ethereal{ + pixel_y = 2 + }, +/obj/item/disk/design_disk/limbs/felinid{ + pixel_y = 4 + }, +/obj/item/disk/design_disk/limbs/lizard{ + pixel_y = 6 + }, +/obj/item/disk/design_disk/limbs/plasmaman{ + pixel_y = 8 + }, +/obj/structure/table/reinforced, +/obj/item/disk/surgery/forgottenship{ + pixel_y = 10 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"hL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/north{ + req_access = list("syndicate") + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"hN" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/cup/beaker/cryoxadone, +/obj/item/reagent_containers/cup/beaker/cryoxadone, +/obj/item/reagent_containers/cup/beaker/cryoxadone, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"hO" = ( +/obj/machinery/light/directional/south, +/obj/machinery/button/door/directional/east{ + name = "window security button"; + id = "interdynemedbay"; + req_access = list("syndicate") + }, +/obj/structure/closet/crate/freezer/blood, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"hP" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med/morgue) +"hQ" = ( +/obj/machinery/firealarm/directional/west{ + dir = 4 + }, +/obj/machinery/vending/medical/syndicate_access{ + onstation = 0; + contraband = list(/obj/item/storage/box/gum/happiness=3, /obj/item/storage/box/hug/medical=3, /obj/item/mmi/syndie/interdyne=3); + extended_inventory = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"hR" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"hS" = ( +/obj/machinery/smartfridge/extract/preloaded, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"hT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/structure/sign/clock/directional/north{ + pixel_y = 26 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"hU" = ( +/obj/machinery/door/window/survival_pod{ + dir = 4; + req_access = list("syndicate") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"hV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"hW" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ + name = "euthanization chamber freezer"; + dir = 4; + initialize_directions = 4 + }, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"hX" = ( +/obj/machinery/light/directional/north, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/vault/alien{ + name = "floor" + }, +/area/ruin/interdyne_planetary_base/science/xeno) +"hY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + name = "server vent"; + dir = 8; + pressure_checks = 0; + external_pressure_bound = 140 + }, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/vault/alien{ + name = "floor" + }, +/area/ruin/interdyne_planetary_base/science/xeno) +"hZ" = ( +/obj/machinery/button/door{ + name = "vault bolt control button"; + pixel_x = -8; + pixel_y = 24; + id = "syndie_lavaland_vault"; + req_access = list("syndicate"); + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"ia" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/maintenance/external, +/obj/structure/fans/tiny, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"ib" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"ic" = ( +/obj/structure/filingcabinet{ + dir = 4; + layer = 3.01; + pixel_x = 11; + pixel_y = 16 + }, +/obj/machinery/computer/crew/syndie{ + dir = 8; + pixel_x = -6; + pixel_y = 16; + layer = 3.01 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"id" = ( +/obj/machinery/vending/syndichem{ + onstation = 0 + }, +/obj/machinery/light_switch/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/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"ie" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"if" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/interdyne_planetary_base/main) +"ig" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"ih" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"ii" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/vg_decals/department/bar{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"ij" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"ik" = ( +/obj/machinery/chem_dispenser/fullupgrade, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"il" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"im" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main) +"in" = ( +/obj/structure/table/glass, +/obj/machinery/reagentgrinder{ + pixel_x = 5 + }, +/obj/item/storage/box/beakers/bluespace{ + pixel_x = -5; + pixel_y = 3 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"io" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med/morgue) +"ip" = ( +/obj/machinery/door/airlock/grunge{ + name = "Morgue" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/morgue) +"iq" = ( +/obj/machinery/vending/drugs{ + name = "\improper SyndiDrug Plus"; + onstation = 0; + extended_inventory = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med) +"ir" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/airalarm/directional/south{ + req_access = list("syndicate") + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"is" = ( +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"it" = ( +/obj/machinery/processor/slime, +/obj/structure/sign/xenobio_guide/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"iu" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"iv" = ( +/obj/machinery/computer/camera_advanced/xenobio{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"iw" = ( +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"ix" = ( +/obj/machinery/portable_atmospherics/canister/bz, +/obj/machinery/atmospherics/components/unary/portables_connector, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"iy" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + name = "server vent"; + dir = 1; + external_pressure_bound = 120 + }, +/turf/open/floor/vault/alien{ + name = "floor" + }, +/area/ruin/interdyne_planetary_base/science/xeno) +"iz" = ( +/obj/machinery/door/window/survival_pod{ + name = "Slime Euthanization Chamber"; + req_access = list("syndicate") + }, +/turf/open/floor/vault/alien{ + name = "floor" + }, +/area/ruin/interdyne_planetary_base/science/xeno) +"iA" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"iB" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"iC" = ( +/obj/machinery/door/airlock/medical{ + name = "Medical Desk" + }, +/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/syndicate/general, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"iD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"iE" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/interdyne_planetary_base/main) +"iF" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"iG" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"iH" = ( +/obj/machinery/chem_heater/withbuffer, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"iI" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"iJ" = ( +/obj/machinery/chem_master, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"iK" = ( +/obj/structure/bodycontainer/morgue, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch/directional/north, +/obj/structure/broken_flooring/plating{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/morgue) +"iL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/morgue) +"iM" = ( +/obj/structure/table/optable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/morgue) +"iN" = ( +/obj/item/storage/box/syringes{ + pixel_x = 5; + pixel_y = 10 + }, +/obj/item/storage/bag/xeno, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/table/glass/plasmaglass, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"iO" = ( +/obj/item/storage/box/monkeycubes/syndicate{ + pixel_y = 5 + }, +/obj/item/storage/box/monkeycubes/syndicate{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/slime_extract/grey{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/slime_extract/grey, +/obj/item/slime_extract/grey{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/table/glass/plasmaglass, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"iP" = ( +/obj/machinery/reagentgrinder{ + pixel_y = 6 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/table/glass/plasmaglass, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"iQ" = ( +/obj/machinery/monkey_recycler, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"iR" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"iS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science/xeno) +"iT" = ( +/obj/machinery/atmospherics/components/binary/volume_pump{ + name = "BZ Pump"; + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/science/xeno) +"iU" = ( +/obj/structure/fans/tiny, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/machinery/door/window/survival_pod{ + name = "Slime Pacification Chamber"; + req_access = list("syndicate") + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/science/xeno) +"iV" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"iW" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "interdynelibrary" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"iY" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/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/public/glass{ + name = "Service Wing" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-service" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"iZ" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"ja" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"jb" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock{ + name = "Unisex Restrooms" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"jc" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/med/pharm) +"jd" = ( +/obj/structure/table/glass, +/obj/item/clothing/glasses/science, +/obj/machinery/firealarm/directional/west{ + dir = 4 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 15 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"je" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"jf" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"jg" = ( +/obj/machinery/camera/xray{ + dir = 8; + network = list("fsci"); + c_tag = "Xenobio West" + }, +/obj/effect/turf_decal/tile/dark_red, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"jh" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/effect/turf_decal/tile/dark_red{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"ji" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/effect/turf_decal/tile/dark_red, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"jk" = ( +/obj/machinery/camera/xray{ + dir = 4; + network = list("fsci"); + c_tag = "Xenobio East" + }, +/obj/effect/turf_decal/tile/dark_red{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"jl" = ( +/obj/item/book/random{ + pixel_y = 3 + }, +/obj/item/book/random{ + pixel_y = 3 + }, +/obj/item/book/random{ + pixel_y = 3 + }, +/obj/structure/bookcase/random/nonfiction, +/obj/structure/sign/painting/library{ + pixel_x = -32 + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jm" = ( +/obj/structure/chair/comfy{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/carpet/orange, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jn" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/orange, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jo" = ( +/obj/structure/table/glass, +/obj/item/ship_in_a_bottle{ + name = "lavaboat in a bottle"; + desc = "A tiny mysterious boat inside a bottle."; + pixel_x = -6; + anchored = 1; + anchored_tabletop_offset = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/orange, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jp" = ( +/obj/structure/chair/sofa/right{ + dir = 8 + }, +/obj/machinery/button/door/directional/north{ + name = "window security button"; + pixel_x = -4; + id = "interdynelibrary" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/carpet/orange, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jq" = ( +/obj/machinery/photocopier, +/obj/structure/sign/flag/interdyne/directional/north{ + pixel_x = -13 + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jr" = ( +/obj/structure/sign/poster/contraband/rush_propaganda/directional/north, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"js" = ( +/obj/structure/sign/painting/library{ + pixel_x = 32 + }, +/obj/machinery/modular_computer/preset/curator{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jt" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"ju" = ( +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv) +"jv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"jw" = ( +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"jx" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/dryer{ + pixel_y = 32; + pixel_x = -6 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"jy" = ( +/obj/structure/curtain/cloth/prison{ + name = "privacy curtains"; + color = "#FFFFFF" + }, +/obj/structure/drain, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/siding/dark/end{ + dir = 1 + }, +/obj/machinery/shower/directional/west{ + desc = "A borrowed Nanotrasen Hygiene Division HS-452. It's one of the older 2550's series. A small sticker on the side insists it \"observes 2560 lead compliance!\"; passively replenishes itself with water when not in use." + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"jz" = ( +/obj/structure/chair/plastic{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"jA" = ( +/obj/structure/table, +/obj/effect/turf_decal/stripes/line, +/obj/item/toy/tennis/red, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"jB" = ( +/obj/structure/chair/plastic{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"jD" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/med/morgue) +"jE" = ( +/obj/machinery/airalarm/directional/south{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"jF" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/tile/dark_red{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"jG" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/effect/turf_decal/tile/dark_red{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"jH" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/effect/turf_decal/tile/dark_red{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"jI" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + layer = 3.21 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/tile/dark_red{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"jJ" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"jK" = ( +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 8 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"jL" = ( +/obj/item/book/random{ + pixel_y = 3 + }, +/obj/item/book/random{ + pixel_y = 3 + }, +/obj/item/book/random{ + pixel_y = 3 + }, +/obj/structure/bookcase/random/reference, +/obj/machinery/light/directional/west{ + pixel_y = -16 + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jM" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/carpet/orange, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jN" = ( +/obj/structure/chair/sofa/left{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/orange, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jO" = ( +/obj/structure/chair/sofa/middle{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/orange, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jP" = ( +/obj/structure/chair/sofa/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/carpet/orange, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jQ" = ( +/obj/machinery/libraryscanner, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jR" = ( +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jS" = ( +/obj/machinery/bookbinder, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"jT" = ( +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv) +"jU" = ( +/obj/structure/sink/directional/east, +/obj/structure/mirror/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"jV" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"jW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/machinery/light/small/directional/east, +/obj/structure/towel_bin, +/obj/structure/table{ + layer = 2.79 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"jX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"jY" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/effect/turf_decal/tile/dark_red, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"jZ" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + layer = 3.21 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/effect/turf_decal/tile/dark_red{ + dir = 8 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"ka" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + layer = 3.21 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/effect/turf_decal/tile/dark_red, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"kb" = ( +/obj/item/book/random{ + pixel_y = 3 + }, +/obj/item/book/random{ + pixel_y = 3 + }, +/obj/item/book/random{ + pixel_y = 3 + }, +/obj/structure/bookcase/random/reference, +/obj/structure/sign/painting/library{ + pixel_x = -32 + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kc" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kd" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"ke" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/carpet/donk, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kf" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/table/wood, +/obj/item/toy/cards/deck/cas{ + pixel_y = 6 + }, +/obj/machinery/light/directional/east{ + pixel_y = 16 + }, +/turf/open/floor/carpet/donk, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kg" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"kh" = ( +/obj/structure/toilet{ + dir = 8; + pixel_z = 8 + }, +/obj/structure/curtain/cloth/prison{ + name = "privacy curtains"; + color = "#FFFFFF" + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"ki" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/lattice/catwalk, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/interdyne_planetary_base/main) +"kj" = ( +/obj/effect/turf_decal/tile/dark_red{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"kk" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/dark_red{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"kl" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/effect/turf_decal/tile/dark_red{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"km" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/effect/turf_decal/tile/dark_red{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"kn" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/dark_red{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"ko" = ( +/obj/effect/turf_decal/tile/dark_red{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/interdyne_planetary_base/science/xeno) +"kp" = ( +/obj/item/book/random{ + pixel_y = 3 + }, +/obj/structure/bookcase/random/religion, +/obj/item/book/random{ + pixel_y = 3 + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kq" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_nineteen, +/obj/structure/easel, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"ks" = ( +/obj/machinery/button/door/directional/west{ + name = "window security button"; + id = "interdynescience"; + req_access = list("syndicate") + }, +/obj/machinery/skill_station/plasmaglass, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/science) +"kt" = ( +/obj/structure/table/wood, +/obj/item/toy/crayon/spraycan{ + pixel_x = 4; + pixel_y = 9 + }, +/obj/item/toy/crayon/spraycan{ + pixel_x = -5; + pixel_y = 9 + }, +/obj/item/choice_beacon/music, +/obj/item/choice_beacon/music, +/obj/item/choice_beacon/music, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/airalarm/directional/south{ + req_access = list("syndicate") + }, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"ku" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kv" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/carpet/donk, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kw" = ( +/obj/machinery/computer/libraryconsole/bookmanagement{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/sign/painting/large/library{ + dir = 4 + }, +/turf/open/floor/carpet/donk, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kx" = ( +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark_red/half, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv) +"ky" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/sign/poster/contraband/jumbo_bar/directional/east, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"kA" = ( +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"kB" = ( +/obj/structure/toilet{ + dir = 8; + pixel_z = 8 + }, +/obj/structure/curtain/cloth/prison{ + name = "privacy curtains"; + color = "#FFFFFF" + }, +/obj/effect/turf_decal/siding/dark/end, +/turf/open/floor/iron/showroomfloor, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"kC" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/eng/disp) +"kD" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/eng/disp) +"kE" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/eng/disp) +"kF" = ( +/obj/machinery/chem_mass_spec, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"kG" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/main/dorms) +"kH" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock{ + name = "Library" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"kI" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Service Wing" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-service" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"kJ" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/serv) +"kK" = ( +/obj/structure/bodycontainer/morgue, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/morgue) +"kL" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock{ + name = "Unisex Restrooms" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/rstrm) +"kM" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/maintenance/external, +/obj/structure/fans/tiny, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv) +"kN" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv) +"kO" = ( +/obj/machinery/door/poddoor{ + id = "interdyneservicehall" + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/serv) +"kP" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/eng) +"kQ" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/maintenance/external, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"kR" = ( +/obj/machinery/conveyor{ + dir = 5; + id = "interdynedisp" + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/stamp/chameleon/broken, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng/disp) +"kS" = ( +/obj/structure/frame/machine{ + icon_state = "box_1"; + state = 2; + anchored = 1 + }, +/obj/item/circuitboard/machine/recycler, +/obj/machinery/conveyor{ + dir = 4; + id = "interdynedisp" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng/disp) +"kT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/conveyor{ + dir = 6; + id = "interdynedisp" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng/disp) +"kU" = ( +/obj/structure/dresser, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"kV" = ( +/obj/structure/bed, +/obj/item/bedsheet/dorms, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"kW" = ( +/obj/item/bedsheet/dorms{ + dir = 4 + }, +/obj/structure/bed{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"kX" = ( +/obj/structure/dresser, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"kY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/poster/contraband/cybersun_six_hundred/directional/west, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"kZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"la" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"lb" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/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/public/glass{ + name = "Service Wing" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"ld" = ( +/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 = 9 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"le" = ( +/obj/structure/reagent_dispensers/water_cooler/directional/north{ + layer = 3.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/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/sign/poster/contraband/donut_corp/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/sign/poster/contraband/donk_co/directional/north, +/obj/machinery/light/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lh" = ( +/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, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"li" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/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/public/glass{ + name = "Service Wing" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/machinery/power/apc/auto_name/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/light/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"ll" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/light/directional/north, +/obj/machinery/button/door/directional/north{ + name = "window security button"; + pixel_x = -4; + id = "interdyneservicehall" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"ln" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4; + layer = 2.52 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lo" = ( +/obj/item/pipe_dispenser, +/obj/item/construction/rcd, +/obj/item/t_scanner, +/obj/machinery/light_switch/directional/west, +/obj/structure/closet/crate/secure/engineering, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"lp" = ( +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"lq" = ( +/obj/machinery/power/rtg/advanced, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/bot/right, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"lr" = ( +/obj/structure/weightmachine{ + dir = 2 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/eighties/red, +/area/ruin/interdyne_planetary_base/cargo) +"ls" = ( +/obj/machinery/power/rtg/advanced, +/obj/structure/cable, +/obj/effect/turf_decal/bot/left, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"lt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/conveyor{ + dir = 1; + id = "interdynedisp" + }, +/obj/item/shard/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng/disp) +"lu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/frame/machine{ + icon_state = "box_1"; + state = 2; + anchored = 1 + }, +/obj/item/circuitboard/machine/stacking_machine, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng/disp) +"lv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/conveyor{ + id = "interdynedisp" + }, +/obj/structure/plasticflaps, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng/disp) +"lw" = ( +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/smooth_edge{ + dir = 4 + }, +/area/ruin/interdyne_planetary_base/main/dorms) +"lx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/east{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/smooth_edge{ + dir = 8 + }, +/area/ruin/interdyne_planetary_base/main/dorms) +"ly" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/west{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/smooth_edge{ + dir = 4 + }, +/area/ruin/interdyne_planetary_base/main/dorms) +"lz" = ( +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/smooth_edge{ + dir = 8 + }, +/area/ruin/interdyne_planetary_base/main/dorms) +"lA" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"lB" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"lC" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/main/dorms) +"lD" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv) +"lE" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv) +"lF" = ( +/obj/effect/decal/cleanable/glass/plastitanium, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4; + layer = 2.52 + }, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lH" = ( +/obj/machinery/door/airlock/engineering{ + name = "Engineering" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/firedoor/heavy, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng) +"lI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng) +"lJ" = ( +/obj/machinery/power/rtg/advanced, +/obj/machinery/power/terminal, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/bot/right, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"lK" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"lL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/conveyor{ + dir = 1; + id = "interdynedisp" + }, +/obj/item/serviette_used, +/obj/item/shard/plastitanium, +/obj/item/valentine, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng/disp) +"lM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/conveyor_switch/oneway{ + name = "disposal conveyor"; + dir = 8; + id = "interdynedisp" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng/disp) +"lN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/ash/large, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng/disp) +"lO" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing/corner, +/obj/effect/turf_decal/sand/volcanic, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/interdyne_planetary_base/main) +"lP" = ( +/obj/structure/railing{ + dir = 9 + }, +/obj/structure/lattice/catwalk, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/interdyne_planetary_base/main/dorms) +"lQ" = ( +/obj/structure/closet/secure_closet/personal/wall{ + icon_door = "locker_wall"; + pixel_x = -30 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/button/door/directional/south{ + id = "interdynecabin2"; + name = "door bolt control"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"lR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"lS" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/closet/secure_closet/personal/wall{ + icon_door = "locker_wall"; + pixel_x = 30 + }, +/obj/machinery/button/door/directional/north{ + pixel_x = 0; + id = "interdynecabin4"; + name = "door bolt control"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"lT" = ( +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"lU" = ( +/obj/machinery/power/rtg/advanced, +/obj/structure/cable, +/obj/structure/sign/poster/contraband/syndiemoth/directional/east, +/obj/effect/turf_decal/bot/left, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"lV" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Service Wing" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"lW" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lX" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lY" = ( +/obj/structure/disposalpipe/junction/flip{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"lZ" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Service Wing" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"ma" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"mb" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/firealarm/directional/south{ + dir = 1 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"mc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/airalarm/directional/south{ + req_access = list("syndicate") + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"md" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"me" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4; + layer = 2.52 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"mf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment, +/obj/machinery/light/directional/west, +/obj/machinery/airalarm/directional/west{ + req_access = list("syndicate") + }, +/obj/item/circuitboard/machine/smoke_machine, +/obj/item/circuitboard/machine/cell_charger, +/obj/item/circuitboard/machine/deep_fryer, +/obj/item/circuitboard/machine/gibber, +/obj/item/circuitboard/machine/processor, +/obj/structure/closet/crate/secure/engineering, +/obj/item/storage/box/stockparts/deluxe, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng) +"mg" = ( +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"mh" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"mi" = ( +/obj/machinery/power/smes/magical{ + name = "bluespace-powered power storage unit"; + desc = "A high-capacity superconducting magnetic energy storage (SMES) unit. Produces power through an unstable bluespace pocket."; + output_level = 200000 + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/white/line{ + dir = 5 + }, +/obj/effect/turf_decal/bot/right, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"mj" = ( +/obj/effect/turf_decal/stripes/white/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 2 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"mk" = ( +/obj/structure/disposaloutlet{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng/disp) +"ml" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng/disp) +"mm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/trashcart/filled, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng/disp) +"mn" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing, +/obj/effect/turf_decal/sand/volcanic, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/interdyne_planetary_base/main) +"mo" = ( +/obj/structure/sign/poster/abductor/ayylian/directional/west, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"mp" = ( +/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/syndicate/general, +/obj/machinery/door/airlock{ + name = "Cabin 2"; + id_tag = "interdynecabin2" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"mq" = ( +/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/syndicate/general, +/obj/machinery/door/airlock{ + name = "Cabin 1"; + id_tag = "interdynecabin1" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"ms" = ( +/obj/structure/chair/sofa/bench/right, +/turf/open/floor/iron/dark/textured_corner, +/area/ruin/interdyne_planetary_base/serv) +"mt" = ( +/obj/structure/chair/sofa/bench/left, +/turf/open/floor/iron/dark/small, +/area/ruin/interdyne_planetary_base/serv) +"mv" = ( +/obj/structure/table, +/turf/open/floor/iron/dark/small, +/area/ruin/interdyne_planetary_base/serv) +"mw" = ( +/obj/machinery/light/directional/east, +/obj/structure/table{ + layer = 2.79 + }, +/turf/open/floor/iron/dark/textured_corner{ + dir = 8 + }, +/area/ruin/interdyne_planetary_base/serv) +"mx" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/main/dorms) +"my" = ( +/obj/machinery/smartfridge/food, +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters{ + id = "interdynekitchen" + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/structure/sign/poster/contraband/moffuchis_pizza/directional/east, +/turf/open/floor/iron/terracotta, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"mz" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"mA" = ( +/obj/structure/cable, +/obj/machinery/power/rtg/advanced, +/obj/effect/turf_decal/stripes/white/line, +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/bot/left, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"mB" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/serv/hydr) +"mC" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/window/survival_pod{ + dir = 1 + }, +/obj/machinery/door/window/survival_pod{ + req_access = list("syndicate") + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"mD" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/hydr) +"mE" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/white/line{ + layer = 2.52 + }, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/structure/closet/crate/radiation, +/obj/item/clothing/suit/utility/radiation, +/obj/item/clothing/head/utility/radiation, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng) +"mF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/white/line{ + layer = 2.52 + }, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng) +"mG" = ( +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/white/corner{ + dir = 8; + layer = 2.52 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng) +"mH" = ( +/obj/machinery/door/airlock{ + name = "Disposal Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng/disp) +"mI" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng/disp) +"mJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/obj/effect/turf_decal/arrows/white{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng/disp) +"mK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/plumbed{ + name = "stationary very-high-capacity water tank"; + desc = "A stationary, plumbed, very-high-capacity water tank."; + dir = 8; + prevent_rcd_deconstruction = 1; + tank_volume = 5000 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng/disp) +"mL" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/sand/volcanic, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/interdyne_planetary_base/main) +"mM" = ( +/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/syndicate/general, +/obj/machinery/door/airlock/hydroponics{ + name = "Hydroponics" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"mN" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/maintenance/external, +/obj/structure/fans/tiny, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"mO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"mP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"mR" = ( +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/ruin/interdyne_planetary_base/serv) +"mS" = ( +/obj/effect/turf_decal/syndicateemblem/middle/left{ + color = "" + }, +/obj/structure/table, +/obj/item/serviette_pack, +/turf/open/floor/iron/dark/small, +/area/ruin/interdyne_planetary_base/serv) +"mT" = ( +/turf/open/floor/iron/dark/small, +/area/ruin/interdyne_planetary_base/serv) +"mU" = ( +/obj/structure/chair{ + dir = 1; + pixel_z = 8 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/interdyne_planetary_base/serv) +"mV" = ( +/obj/structure/chair{ + dir = 1; + pixel_z = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/interdyne_planetary_base/serv) +"mW" = ( +/obj/effect/turf_decal/siding/thinplating/dark/end{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters{ + id = "interdynekitchen" + }, +/turf/open/floor/iron/terracotta, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"mX" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/iron/terracotta, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"mY" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/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 = "Dormitories" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"mZ" = ( +/obj/machinery/deepfryer, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"na" = ( +/obj/machinery/firealarm/directional/north, +/obj/machinery/oven/range, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"nb" = ( +/obj/machinery/griddle, +/obj/machinery/airalarm/directional/north{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"nc" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"nd" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"ne" = ( +/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/corner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"nf" = ( +/obj/machinery/light/directional/north, +/obj/machinery/griddle, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"ng" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 1 + }, +/obj/machinery/firealarm/directional/west{ + dir = 4 + }, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng) +"nh" = ( +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng) +"ni" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/binary/valve/digital/layer2, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng) +"nj" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/turf_decal/box/white, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng) +"nk" = ( +/obj/item/paper/guides/jobs/medical/morgue, +/obj/structure/table/reinforced, +/obj/item/storage/backpack/duffelbag/syndie/surgery, +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/cup/bottle/formaldehyde{ + pixel_x = 12; + pixel_y = 12 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/morgue) +"nl" = ( +/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/syndicate/general, +/obj/machinery/door/airlock{ + name = "Cabin 3"; + id_tag = "interdynecabin3" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"nm" = ( +/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/syndicate/general, +/obj/machinery/door/airlock{ + name = "Cabin 4"; + id_tag = "interdynecabin4" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"nn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/cryopod{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"no" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 1; + pixel_z = 8 + }, +/turf/open/floor/iron/dark/textured_corner{ + dir = 4 + }, +/area/ruin/interdyne_planetary_base/serv) +"np" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 1; + pixel_z = 8 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/interdyne_planetary_base/serv) +"nq" = ( +/obj/structure/chair/stool/bar/directional/south, +/turf/open/floor/iron/dark/small, +/area/ruin/interdyne_planetary_base/serv) +"nr" = ( +/obj/structure/chair/stool/bar/directional/south{ + color = "" + }, +/turf/open/floor/iron/dark/small, +/area/ruin/interdyne_planetary_base/serv) +"ns" = ( +/obj/structure/chair/stool/bar/directional/south, +/turf/open/floor/iron/dark/textured_corner{ + dir = 1 + }, +/area/ruin/interdyne_planetary_base/serv) +"nt" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 10 + }, +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters{ + id = "interdynekitchen" + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/turf/open/floor/iron/terracotta, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"nu" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/turf/open/floor/iron/terracotta, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"nv" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/iron/terracotta, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"nw" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/iron/terracotta, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"nx" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/turf/open/floor/iron/terracotta, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"ny" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/eng) +"nz" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"nA" = ( +/obj/machinery/vending/hydronutrients{ + onstation = 0; + extended_inventory = 1 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"nB" = ( +/obj/machinery/smartfridge/food, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"nC" = ( +/obj/structure/closet/crate/hydroponics, +/obj/item/geneshears, +/obj/item/gun/energy/floragun, +/obj/item/plant_analyzer, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"nD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"nE" = ( +/obj/machinery/seed_extractor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"nF" = ( +/obj/machinery/atmospherics/components/trinary/mixer/airmix/inverse{ + dir = 1 + }, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng) +"nG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng) +"nI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng) +"nJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/eng) +"nK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/obj/structure/sign/poster/official/there_is_no_gas_giant/directional/west, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"nL" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/lattice/catwalk, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/interdyne_planetary_base/main/dorms) +"nN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/poster/ripped/directional/west, +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/machinery/computer/cryopod/interdyne/directional/west{ + req_one_access = list("syndicate") + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"nO" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/machinery/vending/clothing{ + onstation = 0; + extended_inventory = 1 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"nP" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/bar) +"nQ" = ( +/obj/machinery/smartfridge/drinks, +/obj/machinery/door/poddoor/shutters{ + id = "interdynekitchen" + }, +/turf/open/floor/iron{ + icon_state = "sepia"; + base_icon_state = "sepia" + }, +/area/ruin/interdyne_planetary_base/serv/bar) +"nR" = ( +/obj/machinery/door/firedoor, +/obj/structure/pinata/syndie{ + name = "syndicorgi pinata bar mascot"; + desc = "A papier-mâché representation of a corgi that contains all sorts of bombastic treats. He doesn't move much but we still love him!"; + layer = 3; + pixel_w = -8; + candy_options = list(/obj/item/food/bubblegum,/obj/item/food/candy,/obj/item/food/chocolatebar,/obj/item/food/gumball,/obj/item/food/lollipop) + }, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters{ + id = "interdynekitchen" + }, +/turf/open/floor/iron{ + icon_state = "sepia"; + base_icon_state = "sepia" + }, +/area/ruin/interdyne_planetary_base/serv/bar) +"nS" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters{ + id = "interdynekitchen" + }, +/turf/open/floor/iron{ + icon_state = "sepia"; + base_icon_state = "sepia" + }, +/area/ruin/interdyne_planetary_base/serv/bar) +"nT" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/reagent_containers/cup/rag{ + pixel_x = -4; + pixel_y = 3 + }, +/obj/machinery/door/poddoor/shutters{ + id = "interdynekitchen" + }, +/turf/open/floor/iron{ + icon_state = "sepia"; + base_icon_state = "sepia" + }, +/area/ruin/interdyne_planetary_base/serv/bar) +"nU" = ( +/obj/machinery/door/poddoor/shutters{ + id = "interdynekitchen" + }, +/obj/structure/table/reinforced, +/turf/open/floor/iron{ + icon_state = "sepia"; + base_icon_state = "sepia" + }, +/area/ruin/interdyne_planetary_base/serv/bar) +"nV" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters{ + id = "interdynekitchen" + }, +/obj/effect/baseturf_helper/reinforced_plating, +/turf/open/floor/iron/terracotta, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"nW" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/structure/sink/kitchen/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/terracotta, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"nX" = ( +/obj/machinery/chem_dispenser/mutagensaltpeter, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"nY" = ( +/obj/machinery/vending/hydroseeds{ + onstation = 0; + extended_inventory = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"nZ" = ( +/obj/machinery/vending/dinnerware{ + onstation = 0; + extended_inventory = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"oa" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/terracotta, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"ob" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/hydr) +"oc" = ( +/obj/structure/table/reinforced, +/obj/machinery/reagentgrinder, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"od" = ( +/obj/structure/table/reinforced, +/obj/item/kitchen/rollingpin, +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 6 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_y = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"oe" = ( +/obj/machinery/biogenerator, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"of" = ( +/obj/structure/closet/crate/hydroponics, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"og" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng) +"oh" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng) +"oi" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng) +"oj" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/ds2atmos{ + anchored = 1; + anchorable = 0 + }, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/eng) +"ok" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/airalarm/directional/east{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/smooth_edge{ + dir = 8 + }, +/area/ruin/interdyne_planetary_base/main/dorms) +"ol" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/airalarm/directional/west{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/smooth_edge{ + dir = 4 + }, +/area/ruin/interdyne_planetary_base/main/dorms) +"om" = ( +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/washing_machine{ + pixel_x = -6; + pixel_y = 10; + layer = 2.91 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"on" = ( +/obj/structure/cable, +/obj/machinery/vending/autodrobe{ + onstation = 0; + extended_inventory = 1 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"op" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 8 + }, +/turf/open/floor/iron{ + icon_state = "sepia"; + base_icon_state = "sepia" + }, +/area/ruin/interdyne_planetary_base/serv/bar) +"oq" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 4 + }, +/turf/open/floor/iron{ + icon_state = "sepia"; + base_icon_state = "sepia" + }, +/area/ruin/interdyne_planetary_base/serv/bar) +"or" = ( +/obj/machinery/chem_master/condimaster, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"os" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/terracotta, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"ot" = ( +/obj/structure/rack, +/obj/item/cultivator, +/obj/item/shovel/spade, +/obj/item/hatchet, +/obj/item/secateurs, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"ou" = ( +/obj/structure/sink/directional/west, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"ov" = ( +/obj/structure/table/reinforced, +/obj/item/book/manual/wiki/cooking_to_serve_man{ + pixel_y = 2 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"ow" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/bar) +"ox" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"oy" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"oz" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"oA" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"oB" = ( +/obj/structure/table/reinforced, +/obj/item/storage/bag/tray, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"oC" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 1 + }, +/turf/open/floor/engine/o2, +/area/ruin/interdyne_planetary_base/eng) +"oD" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/turf/open/floor/engine/o2, +/area/ruin/interdyne_planetary_base/eng) +"oE" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/turf/open/floor/engine/n2, +/area/ruin/interdyne_planetary_base/eng) +"oF" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 1 + }, +/turf/open/floor/engine/n2, +/area/ruin/interdyne_planetary_base/eng) +"oG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/poster/contraband/blasto_detergent/directional/west, +/obj/structure/closet/crate/trashcart/laundry, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"oH" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/food_or_drink/donkpockets{ + pixel_x = 10; + pixel_y = 7 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = -7; + pixel_y = 5 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"oI" = ( +/obj/machinery/quantumpad{ + name = "quantum pad to DS-2"; + layer = 2.8; + map_pad_id = "interdyne"; + map_pad_link_id = "ds2" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"oJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/tile/bar{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/iron{ + icon_state = "sepia"; + base_icon_state = "sepia" + }, +/area/ruin/interdyne_planetary_base/serv/bar) +"oK" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/iron{ + icon_state = "sepia"; + base_icon_state = "sepia" + }, +/area/ruin/interdyne_planetary_base/serv/bar) +"oL" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/iron{ + icon_state = "sepia"; + base_icon_state = "sepia" + }, +/area/ruin/interdyne_planetary_base/serv/bar) +"oM" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/iron{ + icon_state = "sepia"; + base_icon_state = "sepia" + }, +/area/ruin/interdyne_planetary_base/serv/bar) +"oN" = ( +/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/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/iron{ + icon_state = "sepia"; + base_icon_state = "sepia" + }, +/area/ruin/interdyne_planetary_base/serv/bar) +"oO" = ( +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_z = 6; + pixel_w = -3 + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"oP" = ( +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/turf/open/floor/iron/terracotta, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"oQ" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + 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/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/terracotta, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"oR" = ( +/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/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/terracotta, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"oS" = ( +/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/siding/thinplating/dark, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/terracotta, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"oT" = ( +/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, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/terracotta, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"oU" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/survival_pod{ + dir = 4; + req_access = list("syndicate") + }, +/obj/machinery/door/window/survival_pod{ + dir = 8; + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"oV" = ( +/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/machinery/duct, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"oW" = ( +/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/machinery/duct, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"oX" = ( +/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/machinery/duct, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"oY" = ( +/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/siding/dark{ + dir = 6 + }, +/obj/structure/disposalpipe/junction/yjunction{ + dir = 1 + }, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"oZ" = ( +/obj/structure/reagent_dispensers/watertank/high, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"pa" = ( +/obj/machinery/atmospherics/miner/oxygen, +/turf/open/floor/engine/o2, +/area/ruin/interdyne_planetary_base/eng) +"pb" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/effect/turf_decal/vg_decals/atmos/oxygen{ + dir = 1 + }, +/turf/open/floor/engine/o2, +/area/ruin/interdyne_planetary_base/eng) +"pc" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/effect/turf_decal/vg_decals/atmos/nitrogen{ + dir = 1 + }, +/turf/open/floor/engine/n2, +/area/ruin/interdyne_planetary_base/eng) +"pd" = ( +/obj/machinery/atmospherics/miner/nitrogen, +/turf/open/floor/engine/n2, +/area/ruin/interdyne_planetary_base/eng) +"pe" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/blood/gibs/old, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/morgue) +"pf" = ( +/obj/machinery/button/door/directional/west{ + name = "window security button"; + id = "interdynedorms"; + req_access = list("syndicate") + }, +/obj/structure/table/rolling, +/obj/structure/bedsheetbin, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"pg" = ( +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"ph" = ( +/obj/machinery/vending/dorms{ + onstation = 0; + extended_inventory = 0 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"pi" = ( +/obj/effect/turf_decal/tile/dark_red/half, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"pj" = ( +/obj/machinery/door/airlock/grunge{ + name = "Bar" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"pk" = ( +/obj/machinery/door/airlock/grunge{ + name = "Kitchen" + }, +/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/syndicate/general, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"pl" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"pm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"pn" = ( +/obj/structure/table, +/obj/machinery/chem_dispenser/drinks/fullupgrade{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/bar) +"po" = ( +/obj/structure/table, +/obj/item/storage/box/drinkingglasses{ + pixel_y = 10 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass{ + pixel_y = 8 + }, +/obj/machinery/airalarm/directional/south{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/bar) +"pp" = ( +/obj/structure/table, +/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/bar) +"pq" = ( +/obj/machinery/vending/boozeomat/syndicate_access{ + onstation = 0; + extended_inventory = 1 + }, +/obj/machinery/light/directional/south, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/bar) +"pr" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"ps" = ( +/obj/structure/closet/secure_closet/freezer/meat{ + anchored = 1; + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"pt" = ( +/obj/machinery/light/directional/south, +/obj/structure/closet/secure_closet/freezer/kitchen{ + anchored = 1; + req_access = list("syndicate") + }, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/milk, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"pu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/bodycontainer/crematorium{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/morgue) +"pv" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/main/dorms) +"pw" = ( +/obj/machinery/door/poddoor{ + id = "interdynedorms" + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/interdyne_planetary_base/main/dorms) +"px" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/medipens{ + pixel_x = 4; + pixel_y = 13 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med) +"py" = ( +/obj/machinery/processor{ + pixel_z = 0 + }, +/obj/structure/table/reinforced, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"pz" = ( +/obj/structure/table/reinforced, +/obj/machinery/microwave{ + pixel_y = 9 + }, +/obj/structure/sign/poster/contraband/microwave/directional/east{ + pixel_z = 7 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"pA" = ( +/obj/structure/fans/tiny, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/maintenance/external, +/turf/open/floor/iron/white/textured_large, +/area/ruin/interdyne_planetary_base/med/pharm) +"pB" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/serv/hydr) +"pC" = ( +/obj/machinery/hydroponics/constructable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"pD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/obj/structure/sign/poster/contraband/gorlex_recruitment/directional/west, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"pE" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo/ware) +"pF" = ( +/obj/machinery/button/door{ + name = "shutters button"; + id = "interdynekitchen" + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"pG" = ( +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"pH" = ( +/obj/machinery/hydroponics/constructable{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"pI" = ( +/obj/machinery/light/directional/east, +/obj/machinery/hydroponics/constructable{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"pK" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/lattice/catwalk, +/obj/effect/turf_decal/sand/volcanic, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/interdyne_planetary_base/main) +"pM" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/airalarm/directional/south{ + req_access = list("syndicate") + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/morgue) +"pN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/med/morgue) +"pO" = ( +/obj/structure/table, +/turf/open/floor/iron/smooth_edge{ + dir = 1 + }, +/area/ruin/interdyne_planetary_base/cargo) +"pP" = ( +/obj/structure/table, +/turf/open/floor/iron/smooth_edge, +/area/ruin/interdyne_planetary_base/cargo) +"pR" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "interdyne-cargo" + }, +/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/public/glass{ + name = "Service Wing" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/serv) +"pS" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/obj/effect/turf_decal/sand/volcanic, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/interdyne_planetary_base/main/dorms) +"pT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main/dorms) +"pU" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"pV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main/dorms) +"pW" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/lattice/catwalk, +/obj/effect/turf_decal/sand/volcanic, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/interdyne_planetary_base/main/dorms) +"pX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main/dorms) +"pY" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/eng/disp) +"pZ" = ( +/obj/structure/disposalpipe/junction/yjunction{ + dir = 2 + }, +/obj/machinery/duct, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"qa" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"qb" = ( +/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/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main) +"qc" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/structure/lattice/catwalk, +/obj/effect/turf_decal/sand/volcanic, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/interdyne_planetary_base/main/dorms) +"qd" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing, +/obj/effect/turf_decal/sand/volcanic, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/interdyne_planetary_base/main/dorms) +"qe" = ( +/obj/structure/flora/ash/tall_shroom, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"qf" = ( +/obj/structure/flora/ash/cap_shroom, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"qg" = ( +/obj/structure/flora/ash/stem_shroom, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"qh" = ( +/obj/structure/flora/ash/fireblossom, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"qi" = ( +/obj/structure/flora/ash/cacti, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"qj" = ( +/obj/structure/flora/rock/pile/style_3, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"qk" = ( +/obj/structure/flora/rock/pile/style_random, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"ql" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/ruin/interdyne_planetary_base/main/dorms/lib) +"ru" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/cargo/deck) +"rM" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/cargo/deck) +"rV" = ( +/obj/structure/sign/warning/radiation/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/eng) +"sa" = ( +/obj/machinery/hydroponics/constructable{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"sK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"sQ" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"tG" = ( +/obj/structure/shipping_container/kosmologistika{ + pixel_y = -14 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"tM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/interdyne_planetary_base/main) +"uv" = ( +/obj/structure/closet/secure_closet/personal/wall{ + icon_door = "locker_wall"; + pixel_x = -30 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/button/door/directional/north{ + pixel_x = 0; + id = "interdynecabin3"; + name = "door bolt control"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"vc" = ( +/obj/structure/shipping_container/kahraman/alt{ + pixel_x = -8; + pixel_y = 3; + layer = 4.69 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"vm" = ( +/obj/effect/mapping_helpers/turn_off_lights_with_lightswitch, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/med/morgue) +"vR" = ( +/obj/item/toy/figure/syndie, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"zw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"zz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/white/line{ + layer = 2.52 + }, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/eng) +"BS" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"Cx" = ( +/obj/structure/shipping_container/gorlex{ + layer = 4.71 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"De" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"DH" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"DV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"Fq" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 9; + faction = list("Syndicate","neutral") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base) +"HV" = ( +/obj/machinery/door/airlock/grunge{ + name = "Bar" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/bar) +"Is" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"II" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"JY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/cargo) +"Ls" = ( +/obj/machinery/hydroponics/constructable{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) +"LH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/poster/contraband/interdyne_gene_clinics/directional/west, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/interdyne_planetary_base/main/dorms) +"LJ" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 9; + faction = list("Syndicate","neutral") + }, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base) +"MW" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/terracotta, +/area/ruin/interdyne_planetary_base/serv/kitchen) +"Nx" = ( +/obj/structure/shipping_container/interdyne{ + pixel_x = -10; + layer = 4.8 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"OK" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 5; + faction = list("Syndicate","neutral") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base) +"Qm" = ( +/obj/structure/shipping_container/donk_co{ + pixel_x = -1; + pixel_y = 11 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"QT" = ( +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"RO" = ( +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"Si" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"Vf" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/interdyne_planetary_base/serv) +"VA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"Wt" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/interdyne_planetary_base/eng) +"WZ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/closet/secure_closet/personal/wall{ + pixel_x = 30; + icon_door = "locker_wall" + }, +/obj/machinery/button/door/directional/south{ + id = "interdynecabin1"; + name = "door bolt control"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/ruin/interdyne_planetary_base/main/dorms) +"Xr" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/stone, +/area/ruin/interdyne_planetary_base/serv/hydr) +"XP" = ( +/obj/structure/pod, +/obj/effect/supplypod_rubble, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"XV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating/reinforced{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) + +(1,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(2,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +"} +(3,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ac +ac +ac +ac +ac +ab +ab +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +aa +aa +ab +ab +ac +ab +ab +ab +ab +ab +aa +aa +aa +"} +(4,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ac +ac +ac +ab +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ac +ac +ac +ac +ab +ab +ab +ab +aa +aa +"} +(5,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +aa +"} +(6,1,1) = {" +aa +aa +aa +aa +ab +aa +aa +aa +ab +ab +ab +ab +ab +ac +ac +ac +ac +ac +ac +ac +as +as +ac +ac +ac +ac +ac +ac +ac +ac +ac +gF +hu +hu +hu +hu +hu +hu +hu +cs +ac +ac +ac +ac +ac +ab +ac +ac +ac +ac +ac +ac +ac +ab +ab +aa +aa +"} +(7,1,1) = {" +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ac +ab +ac +ac +ac +ac +ac +ac +as +ac +ac +ac +ac +ac +ac +es +et +eu +eu +eu +et +hu +hS +it +iN +jg +jF +jY +kj +hu +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +as +ac +ac +ab +ab +aa +"} +(8,1,1) = {" +aa +aa +ab +ab +ac +ab +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +qk +as +ac +ac +ac +et +eO +fn +fV +gZ +ks +hu +hT +iu +iO +jh +jG +jZ +kk +hu +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +aa +aa +"} +(9,1,1) = {" +aa +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +as +as +ac +ac +ac +eu +eP +fo +fo +fo +ha +hu +hU +iv +iP +ji +jH +ka +kl +hu +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +aa +"} +(10,1,1) = {" +aa +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +as +ac +ac +ac +ac +eu +eQ +fp +fr +fr +hb +hu +hV +iw +iQ +jh +jG +jZ +km +hu +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +aa +"} +(11,1,1) = {" +aa +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +as +ac +ac +ac +ac +et +eR +fq +fW +gA +hc +hv +hV +iw +iR +ji +jI +ka +kl +hu +ac +ac +lP +nL +nL +pW +qc +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +"} +(12,1,1) = {" +aa +ab +ab +ac +ac +ad +ae +ae +ae +aQ +aC +aC +aC +aC +aC +aC +aC +cs +ac +ac +ac +ac +ac +ac +ac +eu +eS +fr +fr +gz +hc +hu +hW +ix +iS +jh +jG +jZ +km +hu +ac +ac +pS +pT +pV +pX +qd +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +"} +(13,1,1) = {" +aa +ab +ab +ac +ac +ru +ah +at +aH +aC +aU +bm +bI +bE +bI +bm +aU +aC +ac +ac +ac +ac +ac +ac +ac +eu +eT +fs +fs +fs +hd +hu +hX +iy +iT +ji +jJ +jJ +kn +mx +kG +kG +kG +kG +mN +kG +kG +kG +kG +cs +ac +ac +ac +ac +ac +ab +ab +"} +(14,1,1) = {" +aa +ab +ab +ac +ac +ae +ai +au +aI +aC +aV +bn +pO +bF +pP +bn +cf +aC +ac +ac +ac +ac +ac +ac +ac +et +eU +ft +fY +gI +ht +hu +hY +iz +iU +jk +jK +jK +ko +kG +kU +lw +lQ +kG +mg +kG +uv +lw +kU +kG +ac +ac +ac +ac +ac +ab +ab +"} +(15,1,1) = {" +ab +ab +ac +ac +ac +ae +aj +av +aJ +aC +aW +bo +bI +bG +bI +bo +aW +aC +ac +ac +ac +ac +ac +ac +ev +et +et +fu +fX +gB +et +hu +hu +hu +iF +iV +iV +iV +iV +iV +kV +lx +lR +mp +mO +nl +lR +ok +kV +kG +ac +ac +ac +ac +ac +ab +ab +"} +(16,1,1) = {" +ab +ab +ac +ac +ac +ae +ak +ae +ae +aC +aC +bp +aC +aC +aC +bR +aC +cC +ac +ac +ac +ac +ac +ac +ex +hC +eV +fv +fZ +gC +eV +ac +ac +ac +iV +jl +jL +kb +kp +iV +kG +kG +kG +kG +mP +kG +kG +kG +kG +kG +ac +ac +ac +ac +ac +ab +ab +"} +(17,1,1) = {" +ab +ab +ac +ac +ac +af +aj +aw +aK +aC +bH +bH +bH +cg +bH +bH +ct +aC +ac +ac +ac +ac +ac +ac +ex +hD +eV +fv +ga +gD +eV +ac +ac +ac +iW +jm +jM +jR +kq +iV +kW +ly +lR +mq +mO +nm +lR +ol +kW +kG +ac +ac +ac +ac +ac +ab +ab +"} +(18,1,1) = {" +ab +ab +ac +ac +ac +af +al +ax +ay +dl +aY +JY +bg +bg +bg +ch +cu +aC +ac +ac +ac +ac +ac +ac +ex +hF +eV +fv +ga +gD +eV +ac +ac +ac +iW +jn +jN +kc +kr +iV +kX +lz +WZ +kG +mO +kG +lS +lz +kX +kG +ac +ac +ac +ac +ac +ab +ab +"} +(19,1,1) = {" +ab +ab +ac +ac +ac +af +am +ay +aL +aC +aZ +aZ +oI +bS +lr +ci +ct +aC +ac +ac +ac +ac +ac +ac +ee +ie +eV +fv +gd +gE +eV +ac +ac +ac +iW +jo +jO +jR +kt +iV +kG +kG +kG +kG +mY +kG +kG +kG +kG +kG +pv +ac +ac +ac +ab +ab +aa +"} +(20,1,1) = {" +aa +ab +ab +ac +ac +ae +ae +az +ae +aC +aC +br +aC +aC +aC +aC +aC +cC +ac +ac +ac +ac +ac +dO +ef +eC +et +fu +fX +gB +et +ef +ef +ef +iV +jp +jP +jR +ql +iV +LH +kY +lT +kZ +kZ +nn +nN +om +oG +pf +pw +ac +ac +ac +ab +ab +aa +"} +(21,1,1) = {" +aa +ab +ab +ac +ac +ae +an +aA +aM +aC +ba +bs +bJ +bT +cj +cv +cD +aC +ac +ac +ac +ac +eK +fB +dS +dS +dS +fD +gi +gL +hm +hm +eg +fB +iV +jq +jQ +kd +ku +kH +kZ +lA +mg +mg +mg +mg +mg +mg +pi +pg +pw +ac +ac +ac +ac +ab +ab +"} +(22,1,1) = {" +aa +ab +ab +ac +ac +ae +ao +aB +aN +aC +bb +bs +bK +bK +ck +cw +cE +aC +cW +cR +cR +cW +ef +dS +dS +eh +eh +ek +gl +gM +eh +hJ +fD +eg +iV +jr +jR +ke +kv +iV +la +lB +lB +lB +lB +lB +nO +on +pg +ph +pw +ac +ac +ac +ab +ab +aa +"} +(23,1,1) = {" +ab +ab +ac +ac +ac +rM +ae +ae +ae +aC +bb +bs +bK +bU +bK +cw +cF +aC +de +ed +de +em +dF +dS +el +ez +ez +fE +eD +ez +ez +ez +eh +pU +iV +js +jS +kf +kw +iV +lb +lC +lV +lC +lC +lC +ow +nP +HV +nP +nP +ac +ac +ac +ac +ab +ab +"} +(24,1,1) = {" +aa +ab +ab +ac +ac +ac +ac +ac +qg +aC +bb +bs +bL +bV +cl +cw +cG +aC +cX +cX +cX +cX +aC +dS +eh +ez +fb +eW +eW +eW +eW +hL +eh +pU +Vf +kN +kN +kN +kN +kN +ds +jt +lW +ms +mR +no +nQ +fc +oJ +dP +nP +ac +ac +ac +ac +ab +ab +"} +(25,1,1) = {" +aa +ab +ab +ac +ac +ac +ac +ac +as +aC +bd +bt +bM +bW +cm +cx +cH +cQ +cY +dg +dg +dv +dG +dT +ez +ez +eW +fI +gm +gP +eW +dq +ek +pZ +kI +jt +jt +jt +jt +kI +ld +lD +lX +mt +mS +np +nR +op +oK +pn +nP +ac +ac +ac +ac +ab +ab +"} +(26,1,1) = {" +aa +ab +ab +ac +ac +ac +ac +as +qi +aC +be +bu +bN +bX +cn +cy +cI +bQ +cZ +bg +bg +dw +bQ +dU +eA +eD +eW +fJ +gn +gQ +hn +eD +ii +qa +kJ +ju +jT +jT +kx +kJ +le +jT +lX +mT +mT +nq +nS +op +oL +po +nP +ac +ac +ac +ac +ab +ab +"} +(27,1,1) = {" +aa +ab +ab +ac +ac +ac +ac +Fq +aC +aC +bf +bv +bv +bv +bv +cz +cJ +cS +da +da +da +da +dH +eg +ek +eE +eW +fK +go +gV +eW +hZ +ij +qb +iY +jv +jv +jv +ky +pR +jv +jT +lX +mv +mU +nr +nT +op +oM +pp +nP +ac +ac +ac +ac +ab +ab +"} +(28,1,1) = {" +aa +ab +ab +ac +ac +ac +ac +aD +aO +aR +bg +bg +bg +bY +bq +aX +cK +pE +db +db +db +db +cT +ei +eh +eF +eW +eW +eW +eW +eW +ez +eh +ei +iZ +ja +ja +ja +ja +ja +lf +jT +lX +mw +mV +ns +nU +oq +oN +pq +nP +ac +ac +ac +ac +ab +ab +"} +(29,1,1) = {" +aa +aa +ab +ab +ac +ac +ac +OK +aC +aC +bg +bw +bO +bZ +bg +aX +cL +cU +dc +dh +dh +dx +cT +ei +eh +ez +ez +ez +eD +gX +ez +ez +im +ei +jb +jw +jU +jU +do +ja +lg +lE +lX +nV +mW +nt +oO +pF +pj +mz +dm +ac +ac +ac +ab +ab +aa +"} +(30,1,1) = {" +aa +aa +ab +ab +ac +ac +ac +ac +ac +aC +bh +bx +bh +bx +bh +cA +cM +cT +dd +di +dn +dy +cT +ej +eB +eJ +eh +fM +gs +ek +eh +eh +iA +iB +ja +jx +jV +kg +kA +kL +lh +jt +lY +my +mX +nu +nW +os +oP +pr +mz +ac +ac +ac +ab +ab +aa +"} +(31,1,1) = {" +aa +aa +ab +ab +ac +ac +ac +ac +ac +aC +bi +by +bg +cb +co +aC +aC +cT +db +db +db +db +cT +fB +ej +eY +eY +fN +gt +gY +hr +eY +iB +fB +ja +jy +jW +kh +kB +ja +li +kJ +lZ +mz +mZ +nv +nZ +ov +oQ +ps +mz +ac +ac +ac +ac +ab +ab +"} +(32,1,1) = {" +aa +ab +ab +ac +ac +ac +ac +ac +ac +aC +bg +bz +bP +ca +cp +aC +qe +qg +as +ac +ac +ac +ac +dO +ef +eZ +fd +fO +gu +he +eM +ia +ef +ef +ja +ja +ja +ja +ja +ja +lj +lF +ma +mz +na +nv +oc +oB +oR +pt +mz +ac +ac +ac +ac +ab +ab +"} +(33,1,1) = {" +aa +ab +ab +ac +ac +ac +ac +ac +ac +aS +bj +bA +aC +cc +bj +aS +as +ac +ac +ac +ac +as +ac +ac +ex +eH +eX +fF +gj +gO +eX +ig +jX +mo +hj +nK +pD +tM +jX +kM +jv +lD +ma +mz +nb +nw +od +oH +oS +py +mz +ac +ac +ac +ab +ab +aa +"} +(34,1,1) = {" +aa +ab +ab +ac +ac +ac +ac +ac +ac +aS +bk +bB +bQ +cd +bk +aS +ac +ac +as +qh +as +ac +ac +ac +ee +ew +eX +fG +fS +gO +eX +jz +lO +mL +iE +iE +mL +mL +mL +kN +lk +jT +mb +mz +nf +nx +MW +oa +oT +pz +mz +ac +ac +ac +ac +ab +ab +"} +(35,1,1) = {" +ab +ab +ac +ac +ac +ac +ac +ac +ac +aS +bl +bC +aC +ce +bl +aS +ac +ac +ac +qj +as +ac +ac +ac +ex +eI +eX +fG +fS +gO +eX +jA +if +ac +ac +ac +ac +ac +ac +kO +ll +jT +mc +ob +mD +nB +oe +oU +pk +mD +mD +mD +pB +ac +ac +ab +ab +"} +(36,1,1) = {" +ab +ab +ac +ac +ac +ac +DH +Si +Si +sK +sK +sK +sK +sK +sK +sK +De +ac +ac +ac +ac +ac +ac +ac +ey +gN +eX +fH +gk +gO +eX +jB +mn +ac +ac +ac +ac +ac +ac +kO +jv +jT +ma +mC +nc +nz +nz +ox +oV +pC +sa +pH +mD +ac +ac +ab +ab +"} +(37,1,1) = {" +ab +ab +ac +ac +ac +ac +II +RO +RO +XP +RO +RO +RO +RO +RO +Cx +zw +ac +ac +LJ +dk +dk +dk +dk +er +dk +eM +fR +gu +hf +eM +eM +eM +eN +ac +ac +ac +ac +ac +kO +jv +jT +ma +mB +nd +nC +of +oy +oW +pG +pG +pG +mD +ac +ac +ab +ab +"} +(38,1,1) = {" +ab +ab +ac +ac +ac +ac +sQ +RO +RO +tG +RO +Nx +RO +XP +vR +RO +DV +ac +ac +dp +dt +dE +dN +dY +eo +dk +fg +fT +gx +gO +eM +hQ +iq +eM +ac +ac +ac +ac +ac +kO +jv +jT +ma +mB +nd +nE +or +oz +oX +Ls +Ls +Ls +mD +ac +ac +ab +ab +"} +(39,1,1) = {" +ab +ab +ac +ac +ac +ac +II +QT +vc +RO +RO +RO +RO +RO +Qm +RO +zw +ac +ac +dk +du +dI +dQ +dZ +eo +dk +fh +fT +fS +gO +hw +hR +ir +eM +ac +ac +ac +ac +ac +kN +lm +jT +ma +mB +Xr +nX +ot +oz +oX +sa +sa +sa +mD +ac +ac +ab +ab +"} +(40,1,1) = {" +aa +ab +ab +ac +ac +ac +II +QT +RO +RO +RO +RO +RO +RO +RO +RO +zw +ac +dj +dr +dz +eo +dR +dZ +eG +dk +fi +fT +fS +gO +hx +ib +is +eM +ac +ac +ac +ac +ac +kN +jv +lE +md +mM +ne +nD +nD +oA +oY +pG +pG +pG +mD +ac +ac +ab +ab +"} +(41,1,1) = {" +aa +ab +ab +ac +ac +ac +II +QT +QT +QT +XP +RO +RO +RO +RO +QT +zw +ac +as +dk +dA +dK +dV +dZ +eL +dk +fj +fT +gy +gO +hy +ic +hs +eM +ac +ac +ac +ac +ac +kN +ln +lG +me +mB +nA +nY +ou +oZ +pl +Ls +Ls +pI +mD +ac +ac +ab +ab +"} +(42,1,1) = {" +aa +ab +ab +ac +ac +ac +BS +VA +VA +VA +VA +XV +XV +XV +VA +VA +Is +ac +ac +dk +dB +dL +dW +ea +fa +dk +eM +gb +eM +hg +hz +hk +iC +hk +jc +ac +ac +ac +ac +ny +kP +lH +kP +mD +mD +mD +mD +mD +mD +mD +mD +mD +df +ac +ac +ab +ab +"} +(43,1,1) = {" +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +dk +dC +dM +dM +eb +eo +dk +fk +gc +gG +hh +hk +id +iD +jd +hk +cW +cW +cW +cR +kP +lo +lI +mf +mE +ng +nF +og +oC +pa +kP +qf +as +ac +ac +ac +ab +ab +"} +(44,1,1) = {" +ab +ab +ac +ac +ac +ac +ac +ac +ac +qk +as +ac +ac +ac +ac +ac +ac +ac +ac +dk +dB +dL +dX +ec +dZ +ff +fl +ge +gH +hi +hB +ih +iG +je +pA +pm +pm +pm +pm +kQ +lp +lp +mh +zz +nh +nG +oh +oD +pb +kP +as +ac +ac +ac +ab +ab +aa +"} +(45,1,1) = {" +ab +ab +ac +ac +ac +ac +ac +ac +ac +ab +as +ac +ac +ac +ac +ac +ac +ac +ac +dk +dD +dM +dM +en +eG +dk +fm +fU +gr +hl +hE +ik +iH +jf +hk +ki +ki +pK +pK +kP +lq +lJ +mi +zz +ni +nI +oi +oE +pc +kP +as +ac +ac +ac +ab +ab +aa +"} +(46,1,1) = {" +aa +ab +ab +ac +ac +ac +ac +ac +ac +ac +qk +as +ac +ac +ac +ac +ac +ac +ac +dk +dB +dL +dX +ep +eo +dk +fw +gf +gJ +hl +hG +il +iI +jE +hk +ac +ac +ac +ac +kP +rV +lK +mj +mF +nj +nI +oj +oF +pd +kP +ac +ac +ac +ab +ab +aa +aa +"} +(47,1,1) = {" +aa +aa +ab +ab +ac +ac +ac +ac +ac +ac +ac +as +ac +as +ac +ac +ac +ac +ac +dk +dC +dM +dM +eq +fe +dk +fx +gg +gr +hl +hH +in +iJ +kF +hk +ac +ac +ac +ac +kP +ls +lU +mA +mG +kP +nJ +kP +kP +kP +Wt +ac +ac +ac +ac +ab +ab +aa +"} +(48,1,1) = {" +aa +aa +aa +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ag +dk +dk +dk +dk +dk +dk +eM +eM +gK +ho +hk +io +vm +hP +hP +jD +ac +ac +kC +kE +kE +kE +kE +mH +kE +pY +qk +as +ac +ac +ac +ac +ac +ab +ab +aa +aa +"} +(49,1,1) = {" +aa +aa +aa +ab +ab +ab +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +eM +fy +gh +gr +hi +hq +hP +iK +kK +pu +hP +ac +ac +kE +kR +lt +lL +mk +mI +kE +as +as +ac +ac +ac +ac +ac +ac +ab +ab +aa +aa +"} +(50,1,1) = {" +aa +aa +aa +ab +ab +ab +as +ab +ab +as +ac +ac +ac +ac +ac +as +ac +ac +ac +ac +ac +ac +ac +ac +ac +eM +fz +gp +gR +hp +hI +ip +iL +pe +pM +hP +ac +ac +kE +kS +lu +lM +ml +mJ +kE +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +aa +"} +(51,1,1) = {" +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +eM +fC +gq +gr +hs +px +hP +iM +nk +pN +hP +ac +ac +kE +kT +lv +lN +mm +mK +kE +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +aa +"} +(52,1,1) = {" +aa +aa +aa +aa +ab +ab +ac +ac +as +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +eM +fL +gv +gS +hs +hK +hP +hP +hP +hP +jD +ac +ac +kD +kE +kE +kE +kE +kE +df +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +aa +"} +(53,1,1) = {" +aa +aa +aa +aa +ab +ab +ac +ac +as +ab +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +eM +fP +fS +gT +hs +hN +eM +as +as +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +aa +aa +"} +(54,1,1) = {" +aa +aa +aa +aa +ab +ab +ac +ac +ac +as +ab +ab +qk +as +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +eM +fQ +gw +gU +fS +hO +eM +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +aa +aa +"} +(55,1,1) = {" +aa +aa +aa +aa +aa +ab +ab +ac +ac +as +as +ab +ab +ab +ac +ac +ab +ab +ab +ab +as +ac +ac +ac +ac +eN +eM +eM +gW +gW +eM +df +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +aa +aa +aa +"} +(56,1,1) = {" +aa +aa +aa +aa +aa +ab +ab +ac +ac +ac +ac +as +as +ac +as +ab +ab +ab +ab +ab +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +aa +aa +aa +aa +"} +(57,1,1) = {" +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ac +ac +ac +ab +ab +aa +aa +aa +aa +ab +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +aa +aa +aa +aa +aa +"} +(58,1,1) = {" +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ac +ac +ab +ab +aa +aa +aa +aa +aa +aa +aa +ab +as +as +ac +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +as +ab +ab +ab +ac +ac +ab +ac +ac +ab +ac +ac +ac +ac +ac +ab +ab +aa +aa +aa +aa +"} +(59,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +"} +(60,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +ab +ab +aa +ab +ab +aa +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +"} diff --git a/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_ash_walker1_skyrat.dmm b/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_ash_walker1_skyrat.dmm deleted file mode 100644 index c07f19269bc7ff..00000000000000 --- a/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_ash_walker1_skyrat.dmm +++ /dev/null @@ -1,2291 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ab" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/glass/bottle/moonshine{ - pixel_x = -5; - pixel_y = 7 - }, -/obj/item/flashlight/flare/candle/infinite{ - pixel_x = 5; - pixel_y = -2 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"aK" = ( -/obj/structure/water_source/puddle, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"bc" = ( -/obj/structure/stone_tile/surrounding_tile/cracked, -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/center, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"bH" = ( -/obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; - icon_state = "empty_shelf_1" - }, -/obj/item/gun/ballistic/bow/longbow, -/obj/structure/stone_tile/slab, -/obj/item/storage/bag/quiver, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"cm" = ( -/obj/item/flashlight/flare/torch{ - start_on = 1 - }, -/turf/closed/indestructible/riveted/boss, -/area/ruin/unpowered/ash_walkers) -"dw" = ( -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"eA" = ( -/obj/structure/closet/crate/wooden, -/obj/item/seeds/potato, -/obj/item/seeds/potato, -/obj/item/seeds/potato/sweet, -/obj/item/seeds/plump, -/obj/item/seeds/plump, -/obj/item/seeds/wheat, -/obj/item/seeds/wheat, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"eE" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"eO" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/primitive_centrifuge{ - pixel_x = -14; - pixel_y = -1 - }, -/obj/item/reagent_containers/cup/mortar{ - pixel_y = 12; - pixel_x = -10 - }, -/obj/item/reagent_containers/cup/glass/bottle/small{ - pixel_x = 7; - pixel_y = 12 - }, -/obj/item/reagent_containers/cup/glass/bottle/small{ - pixel_x = 3; - pixel_y = 5 - }, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"eU" = ( -/obj/item/cultivator/rake, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"fC" = ( -/obj/structure/headpike/bone, -/obj/effect/mapping_helpers/no_lava, -/turf/template_noop, -/area/template_noop) -"fV" = ( -/obj/structure/geyser, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"gn" = ( -/obj/structure/stone_tile/block/burnt{ - dir = 8 - }, -/obj/structure/stone_tile/block/burnt{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"hd" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/obj/structure/closet/xenoarch/ashwalker_version, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"hr" = ( -/obj/structure/closet/crate/wooden, -/obj/item/screwdriver/ashwalker, -/obj/item/crowbar/ashwalker, -/obj/item/wrench/ashwalker, -/obj/item/wirecutters/ashwalker, -/obj/item/hatchet/wooden, -/obj/item/weldingtool/mini, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"hA" = ( -/obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; - icon_state = "empty_shelf_1" - }, -/obj/structure/stone_tile/slab, -/obj/item/reagent_containers/cup/bowl/mushroom_bowl{ - pixel_y = 7; - pixel_x = -5 - }, -/obj/item/reagent_containers/cup/bowl/mushroom_bowl{ - pixel_y = 7; - pixel_x = 7 - }, -/obj/item/reagent_containers/cup/bowl/mushroom_bowl{ - pixel_y = 11; - pixel_x = 1 - }, -/obj/item/smelling_salts{ - pixel_y = -9; - pixel_x = -5 - }, -/obj/item/smelling_salts{ - pixel_y = -9; - pixel_x = 6 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"hL" = ( -/obj/structure/curtain/bounty, -/obj/structure/stone_tile/block{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"hX" = ( -/obj/machinery/iv_drip, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"hY" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/structure/stone_tile/block/burnt, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"ij" = ( -/obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; - icon_state = "empty_shelf_1" - }, -/obj/item/reagent_containers/cup/glass/bottle/lizardwine, -/obj/item/reagent_containers/cup/glass/trophy/bronze_cup{ - pixel_x = -7 - }, -/obj/item/reagent_containers/cup/glass/bottle{ - pixel_x = 6; - pixel_y = -2 - }, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"iI" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/structure/stone_tile/burnt, -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"iP" = ( -/obj/item/flashlight/flare/candle/infinite, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"iZ" = ( -/obj/structure/stone_tile/block/burnt{ - dir = 1 - }, -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/burnt, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"jm" = ( -/obj/structure/stone_tile/block/cracked, -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"jL" = ( -/obj/structure/flora/ash/seraka, -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"ku" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/chair/stool/bamboo{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"kx" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile/cracked, -/obj/item/flashlight/flare/candle/infinite, -/turf/open/indestructible/boss, -/area/ruin/unpowered/ash_walkers) -"ky" = ( -/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"lB" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"lH" = ( -/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"mc" = ( -/obj/structure/closet/crate/wooden, -/obj/item/seeds/tobacco, -/obj/item/seeds/tobacco, -/obj/item/seeds/cannabis, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"mh" = ( -/obj/structure/closet/crate/wooden, -/obj/item/storage/bag/ore, -/obj/item/storage/bag/ore{ - pixel_y = 3 - }, -/obj/item/pickaxe, -/obj/item/pickaxe{ - pixel_y = 3 - }, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"mu" = ( -/obj/structure/bed/maint, -/obj/structure/curtain/bounty, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"mv" = ( -/turf/template_noop, -/area/template_noop) -"mS" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"mZ" = ( -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"nb" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/beaker/large/ceramic{ - pixel_x = 9; - pixel_y = 11 - }, -/obj/item/reagent_containers/cup/beaker/large/blowing_glass{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/beaker/large/blowing_glass, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"nj" = ( -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 5 - }, -/obj/structure/stone_tile/surrounding/cracked{ - dir = 1 - }, -/obj/structure/stone_tile/center/burnt, -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/ruin/unpowered/ash_walkers) -"nt" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/structure/stone_tile/block{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/ruin/unpowered/ash_walkers) -"nx" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/item/flashlight/flare/candle/infinite, -/turf/open/indestructible/boss, -/area/ruin/unpowered/ash_walkers) -"nI" = ( -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/ruin/unpowered/ash_walkers) -"nL" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"nY" = ( -/obj/structure/reagent_water_basin, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"oe" = ( -/obj/structure/bonfire/dense, -/obj/item/stack/rods{ - amount = 5 - }, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"ok" = ( -/obj/structure/stone_tile/block/cracked, -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/structure/statue/bone/rib, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"ot" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; - icon_state = "empty_shelf_1" - }, -/obj/item/screwdriver/ashwalker, -/obj/item/crowbar/ashwalker, -/obj/item/wrench/ashwalker, -/obj/item/wirecutters/ashwalker, -/obj/item/hatchet/wooden, -/obj/item/weldingtool/mini, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"pn" = ( -/obj/structure/chair/stool/bamboo{ - dir = 8 - }, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"px" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/stone_tile/surrounding_tile, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"pD" = ( -/obj/structure/stone_tile/surrounding/cracked{ - dir = 1 - }, -/obj/structure/stone_tile/center, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"pE" = ( -/turf/closed/indestructible/riveted/boss, -/area/ruin/unpowered/ash_walkers) -"pF" = ( -/obj/structure/table/wood, -/obj/structure/stone_tile/slab, -/obj/structure/chem_separator, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"qr" = ( -/obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; - icon_state = "empty_shelf_1" - }, -/obj/item/reagent_containers/cup/bowl/mushroom_bowl{ - pixel_y = -3 - }, -/obj/item/reagent_containers/cup/bowl/mushroom_bowl, -/obj/item/reagent_containers/cup/bowl/mushroom_bowl{ - pixel_y = 3 - }, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"qs" = ( -/obj/structure/stone_tile/surrounding/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"qy" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"qW" = ( -/obj/structure/stone_tile/surrounding_tile, -/obj/item/flashlight/flare/candle/infinite, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"rE" = ( -/obj/structure/stone_tile/surrounding_tile/cracked, -/obj/structure/stone_tile/center, -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/obj/structure/stone_tile/surrounding_tile/cracked, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"rP" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"rQ" = ( -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/center, -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"sl" = ( -/obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; - icon_state = "empty_shelf_1" - }, -/obj/item/knife/combat/bone{ - pixel_y = -4 - }, -/obj/item/knife/combat/bone{ - pixel_y = 2 - }, -/obj/item/knife/combat/bone{ - pixel_y = 8 - }, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"ss" = ( -/obj/structure/stone_tile/block/cracked, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"sI" = ( -/obj/structure/stone_tile/surrounding/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"sS" = ( -/obj/structure/chair/stool/bamboo, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"tg" = ( -/obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; - icon_state = "empty_shelf_1" - }, -/obj/item/reagent_containers/cup/bottle/nutrient/rh{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/bottle/nutrient/l4z{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/bottle/nutrient/ez{ - pixel_y = 4 - }, -/obj/item/reagent_containers/cup/bottle/nutrient/rh{ - pixel_x = -6; - pixel_y = 2 - }, -/obj/item/reagent_containers/cup/bottle/nutrient/l4z{ - pixel_x = 6; - pixel_y = 2 - }, -/obj/item/reagent_containers/cup/bottle/nutrient/ez, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"tl" = ( -/obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; - icon_state = "empty_shelf_1" - }, -/obj/item/spear/bonespear, -/obj/item/spear/bonespear{ - pixel_y = 5 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"tR" = ( -/obj/structure/bed/maint, -/obj/structure/curtain/bounty, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"ug" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile/cracked, -/turf/open/indestructible/boss, -/area/ruin/unpowered/ash_walkers) -"uE" = ( -/obj/structure/lavaland/ash_walker, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"vB" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/obj/structure/closet/crate/wooden, -/obj/item/stack/sheet/iron/twenty, -/obj/item/stack/sheet/leather{ - amount = 35 - }, -/obj/item/stack/sheet/cloth/ten, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"wp" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/structure/stone_tile/surrounding_tile, -/turf/open/indestructible/boss, -/area/ruin/unpowered/ash_walkers) -"ww" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/stone_tile/surrounding_tile, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"wM" = ( -/obj/structure/stone_tile, -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 1 - }, -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/ruin/unpowered/ash_walkers) -"wR" = ( -/obj/structure/flora/ash/cacti, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"wS" = ( -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/center/cracked, -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"xl" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"xW" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"yl" = ( -/obj/structure/stone_tile/block/burnt{ - dir = 8 - }, -/obj/structure/stone_tile/burnt{ - dir = 1 - }, -/obj/structure/stone_tile/surrounding_tile/cracked, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"zI" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"zV" = ( -/obj/structure/stone_tile/slab, -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/machinery/primitive_stove, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Ao" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/stone_tile/center, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/ruin/unpowered/ash_walkers) -"Ar" = ( -/obj/structure/flora/ash/leaf_shroom, -/obj/structure/stone_tile/surrounding_tile, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Az" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/ruin/unpowered/ash_walkers) -"AG" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"AZ" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Bc" = ( -/obj/structure/stone_tile/block/cracked, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Bs" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/flora/ash/stem_shroom, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"BJ" = ( -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/structure/stone_tile/block/cracked{ - dir = 1 - }, -/turf/open/indestructible/boss, -/area/ruin/unpowered/ash_walkers) -"Ch" = ( -/obj/structure/stone_tile/slab/cracked, -/obj/item/flashlight/flare/candle/infinite, -/turf/open/indestructible/boss, -/area/ruin/unpowered/ash_walkers) -"Cl" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/ruin/unpowered/ash_walkers) -"Cp" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding_tile, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Do" = ( -/obj/structure/millstone, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"DL" = ( -/obj/structure/chair/stool/bamboo{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"DP" = ( -/obj/structure/stone_tile/block, -/obj/structure/stone_tile{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"EH" = ( -/obj/structure/closet/crate/wooden, -/obj/item/hemostat/ashwalker, -/obj/item/retractor/ashwalker{ - pixel_y = -9 - }, -/obj/item/scalpel/ashwalker{ - pixel_y = -4 - }, -/obj/item/surgicaldrill/ashwalker, -/obj/item/circular_saw/ashwalker, -/obj/item/cautery/ashwalker, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"EL" = ( -/obj/structure/stone_tile/slab, -/obj/effect/decal/cleanable/blood, -/obj/structure/headpike/bone, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"EQ" = ( -/obj/structure/table/wood, -/obj/item/food/rootdough{ - pixel_x = 3; - pixel_y = 2 - }, -/obj/item/food/rootdough{ - pixel_x = -3 - }, -/obj/item/kitchen/rollingpin, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Fz" = ( -/obj/structure/flora/ash/tall_shroom, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"FA" = ( -/turf/closed/indestructible/riveted/boss/see_through, -/area/ruin/unpowered/ash_walkers) -"FL" = ( -/obj/structure/fermenting_barrel, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Gx" = ( -/obj/structure/table/wood, -/obj/item/cutting_board, -/obj/item/knife/hunting, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"GG" = ( -/obj/structure/necropolis_gate, -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/ruin/unpowered/ash_walkers) -"Hr" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/syringe/crude{ - pixel_x = 4; - pixel_y = 19 - }, -/obj/item/reagent_containers/syringe/crude{ - pixel_x = 2; - pixel_y = 15 - }, -/obj/structure/stone_tile/slab, -/obj/item/paper_bin/bundlenatural, -/obj/item/pen/charcoal, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Hx" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 4 - }, -/obj/item/flashlight/flare/candle/infinite, -/turf/open/indestructible/boss, -/area/ruin/unpowered/ash_walkers) -"HF" = ( -/obj/structure/stone_tile/surrounding_tile, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Ie" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/stone_tile/center, -/obj/structure/stone_tile/surrounding_tile, -/turf/open/indestructible/boss, -/area/ruin/unpowered/ash_walkers) -"Je" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/mob/living/basic/chicken{ - name = "\improper gunther"; - desc = "An odd looking gutlunch, this one seems to have feathers and lay eggs, not like you'd complain about that."; - unsuitable_atmos_damage = 0 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Jh" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/obj/structure/table/wood, -/obj/item/plate/oven_tray/material/fake_tin, -/obj/item/reagent_containers/cup/soup_pot/material/fake_brass{ - pixel_y = 6; - pixel_x = -3 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"JD" = ( -/obj/structure/flora/ash/leaf_shroom, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"JN" = ( -/obj/structure/stone_tile/slab/burnt, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Kr" = ( -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"KS" = ( -/obj/structure/stone_tile/slab/cracked, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"KU" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"La" = ( -/obj/structure/table/wood, -/obj/structure/large_mortar, -/obj/item/pestle, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Ly" = ( -/turf/closed/wall/mineral/wood/nonmetal, -/area/ruin/unpowered/ash_walkers) -"Lz" = ( -/obj/structure/reagent_forge, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"LC" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"LE" = ( -/obj/structure/stone_tile/slab, -/obj/structure/closet/crate/wooden, -/obj/item/seeds/ambrosia, -/obj/item/seeds/ambrosia, -/obj/item/seeds/aloe, -/obj/item/seeds/aloe, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"LI" = ( -/obj/structure/stone_tile/surrounding, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"LO" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/obj/structure/stone_tile/surrounding/cracked{ - dir = 1 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Mk" = ( -/obj/structure/stone_tile/block/burnt{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Mq" = ( -/obj/structure/flora/ash/cap_shroom, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Mv" = ( -/obj/structure/reagent_crafting_bench, -/obj/item/forging/tongs/primitive, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"MD" = ( -/obj/structure/stone_tile/surrounding_tile/cracked, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"MF" = ( -/obj/item/shovel, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"MR" = ( -/obj/machinery/smartfridge/drying_rack, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"MS" = ( -/obj/structure/reagent_anvil, -/obj/item/forging/hammer/primitive, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Ne" = ( -/obj/structure/closet/crate/wooden, -/obj/item/seeds/chanter, -/obj/item/seeds/chanter, -/obj/item/seeds/coffee, -/obj/item/seeds/herbs, -/obj/item/seeds/herbs, -/obj/item/seeds/kronkus, -/obj/item/seeds/tea, -/obj/item/seeds/tea, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Nf" = ( -/obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; - icon_state = "empty_shelf_1" - }, -/obj/item/claymore/bone, -/obj/item/claymore/bone{ - pixel_y = 6 - }, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Nm" = ( -/obj/structure/stone_tile/block/burnt{ - dir = 4 - }, -/obj/structure/stone_tile/burnt{ - dir = 8 - }, -/obj/structure/stone_tile/burnt{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"NB" = ( -/obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; - icon_state = "empty_shelf_1" - }, -/obj/item/forging/billow/primitive, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"NM" = ( -/obj/structure/barricade/wooden, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"NP" = ( -/obj/structure/bonfire/dense, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"NR" = ( -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"NV" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Oc" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Og" = ( -/obj/structure/stone_tile/surrounding/cracked, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Ol" = ( -/obj/structure/stone_tile/block, -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Os" = ( -/obj/structure/curtain/bounty, -/obj/structure/stone_tile/block{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Ov" = ( -/obj/structure/necropolis_gate, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Ox" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/structure/stone_tile, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"OG" = ( -/obj/structure/chair/stool/bamboo{ - dir = 1 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"OJ" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"OR" = ( -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Pr" = ( -/obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; - icon_state = "empty_shelf_1" - }, -/obj/item/bedsheet/black{ - pixel_x = 5 - }, -/obj/item/bedsheet/black{ - pixel_x = 5; - pixel_y = 4 - }, -/obj/item/bedsheet/black{ - pixel_x = 5; - pixel_y = 8 - }, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"PB" = ( -/obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; - icon_state = "empty_shelf_1" - }, -/obj/item/stack/sheet/iron/twenty, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"PF" = ( -/obj/structure/closet/crate/wooden, -/obj/item/seeds/cotton, -/obj/item/seeds/cotton, -/obj/item/seeds/cotton, -/obj/item/seeds/korta_nut, -/obj/item/seeds/korta_nut, -/obj/item/seeds/korta_nut, -/obj/item/seeds/korta_nut/sweet, -/obj/item/seeds/korta_nut/sweet, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"PG" = ( -/obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; - icon_state = "empty_shelf_1" - }, -/obj/item/forging/billow/primitive, -/obj/item/stack/sheet/mineral/coal/ten, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"PJ" = ( -/obj/structure/flora/ash/seraka, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"PK" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/flora/ash/cacti, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Qe" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Qw" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Qx" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/structure/stone_tile/block/burnt{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"QG" = ( -/obj/structure/stone_tile/slab/cracked, -/obj/structure/headpike/bone, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Ra" = ( -/obj/effect/ash_rune, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"RR" = ( -/obj/machinery/vending/ashclothingvendor, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"St" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"SE" = ( -/obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; - icon_state = "empty_shelf_1" - }, -/obj/item/secateurs, -/obj/item/hatchet/wooden, -/obj/item/hatchet/wooden{ - pixel_y = 6 - }, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"SF" = ( -/obj/structure/closet/crate/wooden, -/obj/item/seeds/bamboo, -/obj/item/seeds/bamboo, -/obj/item/seeds/sugarcane, -/obj/item/seeds/sugarcane, -/obj/item/seeds/tower, -/obj/item/seeds/tower, -/obj/item/seeds/tower, -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"SX" = ( -/obj/structure/table/wood, -/obj/item/flashlight/flare/candle/infinite{ - pixel_x = 11; - pixel_y = 12 - }, -/obj/item/reagent_containers/cup/glass/bottle/hooch{ - pixel_x = -2; - pixel_y = 11 - }, -/obj/item/food/rootroll{ - pixel_x = -3; - pixel_y = -1 - }, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Ts" = ( -/obj/structure/stone_tile/block, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Uh" = ( -/obj/structure/stone_tile/block, -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Um" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/fermenting_barrel, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Uw" = ( -/obj/structure/stone_tile/surrounding/cracked{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"UL" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"UR" = ( -/obj/structure/stone_tile/slab, -/obj/machinery/oven/stone, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Vw" = ( -/obj/structure/stone_tile/surrounding/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"VT" = ( -/obj/structure/stone_tile/block/burnt{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"VX" = ( -/obj/structure/closet/crate/miningcar, -/obj/item/stack/sheet/mineral/coal/ten, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"WB" = ( -/obj/structure/closet/crate/wooden, -/obj/item/reagent_containers/blood/lizard{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/reagent_containers/blood/lizard{ - pixel_x = 5; - pixel_y = -2 - }, -/obj/item/stack/sheet/cloth/ten, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"WD" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/obj/structure/stone_tile/surrounding_tile, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"WJ" = ( -/obj/structure/stone_tile/surrounding/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/center/burnt, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"WK" = ( -/obj/structure/flora/ash/seraka, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"WM" = ( -/obj/structure/chair/stool/bamboo{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"WW" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/obj/structure/stone_tile, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Xe" = ( -/obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; - icon_state = "empty_shelf_1" - }, -/obj/item/reagent_containers/cup/glass/bottle/small{ - pixel_x = -5; - pixel_y = 12 - }, -/obj/item/reagent_containers/cup/glass/bottle/small{ - pixel_x = 5; - pixel_y = 12 - }, -/obj/item/reagent_containers/cup/beaker/large/ceramic{ - pixel_x = 7; - pixel_y = -5 - }, -/obj/item/reagent_containers/cup/beaker/large/blowing_glass{ - pixel_y = -5; - pixel_x = -3 - }, -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Xs" = ( -/obj/structure/stone_tile/surrounding, -/obj/structure/stone_tile/center, -/obj/item/knife/hunting, -/obj/structure/table/bronze, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"XQ" = ( -/obj/structure/stone_tile/block/burnt, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"XV" = ( -/obj/effect/mapping_helpers/no_lava, -/turf/template_noop, -/area/template_noop) -"Yq" = ( -/obj/structure/flora/ash/stem_shroom, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"Zn" = ( -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/flora/ash/cacti, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) -"ZW" = ( -/obj/structure/stone_tile/block/burnt{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/ash_walkers) - -(1,1,1) = {" -mv -mv -mv -mv -mv -Ly -Ly -cm -Ly -Ly -mv -mv -mv -mv -mv -mv -mv -mv -mv -mv -mv -mv -mv -"} -(2,1,1) = {" -mv -mv -mv -Ly -cm -Ly -mu -mh -mu -Ly -Ly -mv -mv -mv -mv -mv -mv -mv -mv -mv -mv -mv -mv -"} -(3,1,1) = {" -mv -mv -Ly -Ly -mu -bH -AG -HF -OJ -Nf -Ly -NM -NM -NM -mv -mv -mv -Ly -Ly -Ly -cm -Ly -mv -"} -(4,1,1) = {" -mv -mv -Ly -sl -HF -NV -Qw -pn -WW -tR -cm -mZ -mZ -NM -NM -Ly -cm -Ly -MR -FL -FL -Ly -Ly -"} -(5,1,1) = {" -mv -mv -cm -LO -Vw -Oc -HF -mZ -OJ -Uh -WD -mZ -mZ -mZ -Ly -Ly -UR -PG -pD -ZW -Uw -La -Ly -"} -(6,1,1) = {" -mv -mv -Ly -mu -qs -dw -sS -NP -mZ -dw -KS -dw -WW -PJ -Ly -oe -dw -dw -XQ -mZ -NV -EQ -Ly -"} -(7,1,1) = {" -mv -mv -Ly -Ly -Vw -Ox -zI -WM -NV -DP -OR -mZ -dw -NV -cm -Qe -ku -Qe -HF -ky -Gx -nb -Ly -"} -(8,1,1) = {" -mv -mv -mv -Ly -RR -tl -St -dw -mS -HF -pE -mZ -dw -dw -KS -sS -ab -zV -Jh -zI -OJ -cm -pE -"} -(9,1,1) = {" -mv -mv -mv -Ly -Ly -cm -Um -Qe -ww -cm -pE -mZ -KS -KU -dw -Vw -WM -KU -LI -Ts -DL -Mk -Ly -"} -(10,1,1) = {" -mv -mv -mv -mv -mv -NM -vB -JD -lH -ot -HF -Mq -WJ -OJ -cm -qr -Je -OJ -rP -HF -SX -OG -Ly -"} -(11,1,1) = {" -mv -mv -mv -mv -mv -NM -NM -hr -mZ -jL -zI -mZ -JN -mZ -Ly -Ly -Xe -ij -VT -UL -UL -Og -Ly -"} -(12,1,1) = {" -mv -mv -mv -mv -mv -mv -NM -hd -Mq -pE -HF -mZ -dw -mZ -mZ -Ly -Ly -cm -JN -KS -dw -Ly -Ly -"} -(13,1,1) = {" -mv -mv -mv -pE -pE -pE -pE -pE -UL -zI -mZ -Mq -St -dw -WW -mZ -mZ -OJ -Qe -Qe -xl -cm -mv -"} -(14,1,1) = {" -mv -pE -pE -cm -Qx -lB -yl -cm -pE -EL -mZ -mZ -mZ -mZ -KS -fV -mZ -Mq -mZ -mZ -pE -pE -mv -"} -(15,1,1) = {" -pE -cm -hY -nj -ug -kx -wM -Ao -pE -cm -Kr -mZ -PK -Qw -dw -WW -zI -mZ -Fz -cm -pE -fC -mv -"} -(16,1,1) = {" -pE -jm -iI -nx -rE -eE -wS -BJ -px -FA -KS -Kr -Oc -qW -mZ -OJ -Uh -mZ -NV -dw -pE -XV -XV -"} -(17,1,1) = {" -pE -Xs -nt -nt -ss -uE -xW -Ch -Cl -GG -KU -KS -dw -mZ -Ra -iP -dw -dw -dw -dw -Ov -XV -XV -"} -(18,1,1) = {" -pE -ok -hY -nx -bc -nL -rQ -wp -AZ -FA -KS -MD -Ox -zI -iP -NV -DP -mZ -NR -dw -pE -XV -XV -"} -(19,1,1) = {" -pE -cm -iZ -nI -Az -Hx -Az -Ie -pE -cm -HF -mZ -OJ -St -dw -mS -Zn -mZ -mZ -cm -pE -fC -mv -"} -(20,1,1) = {" -mv -pE -pE -cm -gn -Qx -Nm -cm -pE -QG -mZ -Bs -VT -UL -dw -UL -LC -zI -mZ -mZ -pE -pE -mv -"} -(21,1,1) = {" -mv -mv -mv -pE -pE -pE -pE -pE -Qe -HF -fV -KU -pE -pE -KS -Qe -cm -pE -zI -Mq -mZ -cm -mv -"} -(22,1,1) = {" -mv -mv -mv -mv -mv -mv -NM -Mq -mZ -mZ -mZ -qy -cm -NB -NV -zI -Uw -dw -Ts -aK -mZ -Ly -Ly -"} -(23,1,1) = {" -mv -mv -mv -mv -mv -mv -NM -mZ -mZ -mZ -Mq -KU -PB -sI -OJ -HF -NV -dw -Bc -mZ -mZ -PF -Ly -"} -(24,1,1) = {" -mv -mv -mv -mv -mv -Ly -cm -Os -Os -cm -mZ -Mk -Ol -zI -mZ -mZ -Mv -pE -HF -wR -MF -mZ -Ly -"} -(25,1,1) = {" -mv -mv -mv -pE -Ly -Ly -FL -mZ -mZ -hL -mZ -KU -pE -Lz -zI -Og -MS -cm -eA -mZ -wR -mZ -Ly -"} -(26,1,1) = {" -mv -mv -Ly -Ly -mu -EH -Cp -UL -zI -hL -mZ -OJ -pE -cm -VX -nY -pE -pE -WK -mZ -wR -eU -cm -"} -(27,1,1) = {" -mv -mv -cm -Pr -sI -mZ -KU -LI -Ts -cm -pE -mZ -mZ -pE -pE -cm -pE -Do -Ts -mc -mZ -mZ -Ly -"} -(28,1,1) = {" -mv -mv -Ly -Ts -mZ -mZ -OJ -Qe -HF -La -Ly -mZ -mZ -Yq -mZ -mZ -SF -Qe -Ar -PJ -mZ -Ly -Ly -"} -(29,1,1) = {" -mv -mv -Ly -mu -hX -Vw -Og -pF -Hr -eO -Ly -PJ -mZ -mZ -MF -Mq -wR -mZ -mZ -PJ -Ne -Ly -mv -"} -(30,1,1) = {" -mv -mv -Ly -Ly -Ly -WB -hA -Ly -cm -Ly -Ly -cm -mZ -NV -VT -UL -UL -zI -MF -mZ -Ly -Ly -mv -"} -(31,1,1) = {" -mv -mv -mv -mv -Ly -cm -Ly -Ly -mv -mv -mv -pE -Ly -Ly -LE -tg -SE -Ly -Ly -cm -Ly -mv -mv -"} -(32,1,1) = {" -mv -mv -mv -mv -mv -mv -mv -mv -mv -mv -mv -mv -mv -Ly -Ly -cm -Ly -Ly -mv -mv -mv -mv -mv -"} diff --git a/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_syndicate_base1_skyrat.dmm b/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_syndicate_base1_skyrat.dmm deleted file mode 100644 index fedd3cb5207686..00000000000000 --- a/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_syndicate_base1_skyrat.dmm +++ /dev/null @@ -1,8453 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/template_noop, -/area/template_noop) -"ab" = ( -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors) -"ae" = ( -/obj/effect/turf_decal/tile/bar, -/obj/machinery/vending/boozeomat/syndicate_access{ - onstation = 0 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"af" = ( -/obj/machinery/door/poddoor{ - id = "interdynedeckofficer" - }, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"ag" = ( -/turf/closed/mineral/random/volcanic, -/area/lavaland/surface/outdoors) -"aj" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"an" = ( -/obj/structure/chair/sofa/right/maroon, -/obj/machinery/light/directional/north, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"as" = ( -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/deckofficer{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"aw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"aG" = ( -/obj/structure/chair/office/light, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"aM" = ( -/obj/machinery/light/directional/north, -/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, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/bar) -"aQ" = ( -/obj/effect/turf_decal/tile/dark_red/half{ - dir = 8 - }, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"aR" = ( -/obj/machinery/button/door/directional/east{ - id = "interdynedeckofficer"; - req_access = list("syndicate") - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"aS" = ( -/turf/open/floor/grass, -/area/ruin/syndicate_lava_base/bar) -"aT" = ( -/obj/structure/table/optable, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"aX" = ( -/obj/machinery/door/airlock/grunge{ - name = "Morgue" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/structure/fans/tiny, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"bc" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/structure/flora/bush/sparsegrass, -/obj/structure/flora/bush/flowers_pp, -/turf/open/floor/grass, -/area/ruin/syndicate_lava_base/cargo) -"bl" = ( -/obj/machinery/shower/directional/west, -/obj/structure/drain, -/obj/structure/curtain, -/turf/open/floor/iron/showroomfloor, -/area/ruin/syndicate_lava_base/cargo) -"bm" = ( -/obj/machinery/light/directional/west, -/obj/structure/closet/secure_closet{ - icon_state = "qm"; - name = "deck offficer's locker"; - req_access = list("syndicate_leader") - }, -/obj/item/clothing/neck/cloak/qm/syndie, -/obj/item/clothing/under/rank/cargo/qm/skyrat/syndie, -/obj/item/circuitboard/computer/advanced_camera, -/obj/item/megaphone/cargo, -/obj/item/clothing/glasses/sunglasses, -/obj/item/ammo_box/magazine/m9mm{ - pixel_x = 1; - pixel_y = -1 - }, -/obj/item/gun/ballistic/automatic/pistol, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"br" = ( -/turf/open/floor/carpet/orange, -/area/ruin/syndicate_lava_base/cargo) -"bu" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/table/glass, -/obj/item/reagent_containers/spray/cleaner{ - pixel_x = 10 - }, -/obj/item/healthanalyzer, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/virology) -"bv" = ( -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable, -/obj/machinery/power/rtg/advanced, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"bz" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/door/airlock{ - name = "Bathroom" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"bF" = ( -/obj/structure/table/wood, -/obj/machinery/light/directional/west, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"bG" = ( -/obj/structure/fans/tiny, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/obj/machinery/door/window/survival_pod{ - req_access = list("syndicate"); - name = "Slime Pacification Chamber" - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/testlab) -"bI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/bar) -"bL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/showroomfloor, -/area/ruin/syndicate_lava_base/cargo) -"bS" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/item/reagent_containers/cup/glass/drinkingglass{ - pixel_y = 8 - }, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/bar) -"bV" = ( -/obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/showroomfloor, -/area/ruin/syndicate_lava_base/cargo) -"bW" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/vending/autodrobe{ - onstation = 0 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/syndicate_lava_base/dormitories) -"bY" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 1 - }, -/obj/machinery/firealarm/directional/south{ - dir = 1 - }, -/obj/machinery/quantumpad{ - map_pad_id = "interdyne"; - map_pad_link_id = "ds2"; - name = "quantum pad to DS-2" - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"ca" = ( -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/structure/fans/tiny, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"cc" = ( -/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/syndicate/general, -/obj/machinery/door/airlock/hydroponics{ - name = "Hydroponics" - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"ce" = ( -/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 = 9 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"ch" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"ci" = ( -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"cn" = ( -/obj/structure/toilet{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/showroomfloor, -/area/ruin/syndicate_lava_base/cargo) -"co" = ( -/obj/machinery/light/small/directional/north, -/obj/effect/decal/cleanable/blood/gibs/old, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"cp" = ( -/obj/machinery/smartfridge/chemistry/preloaded, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"cr" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"cs" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"ct" = ( -/obj/machinery/light/small/directional/east, -/obj/machinery/ammo_workbench, -/turf/open/floor/iron/edge{ - dir = 8 - }, -/area/ruin/syndicate_lava_base/main) -"cv" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"cB" = ( -/obj/structure/flora/bush/flowers_br, -/obj/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/grass, -/area/ruin/syndicate_lava_base/medbay) -"cC" = ( -/obj/structure/sink/directional/west, -/obj/structure/mirror/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/showroomfloor, -/area/ruin/syndicate_lava_base/cargo) -"cD" = ( -/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 = 10 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"cH" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/turf/open/floor/engine/o2, -/area/ruin/syndicate_lava_base/engineering) -"cP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"cX" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/light/directional/east, -/obj/effect/turf_decal/siding/thinplating/dark, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"da" = ( -/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 = 6 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"dd" = ( -/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, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"de" = ( -/obj/machinery/vending/cigarette/syndicate{ - onstation = 0 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"df" = ( -/obj/structure/table/wood, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/toy/crayon/spraycan{ - pixel_y = 9; - pixel_x = 4 - }, -/obj/item/toy/crayon/spraycan{ - pixel_y = 9; - pixel_x = -5 - }, -/obj/structure/sign/painting/large/library{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"dl" = ( -/obj/item/toy/figure/syndie, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"dn" = ( -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"dy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/window/survival_pod{ - req_access = list("syndicate") - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/virology) -"dA" = ( -/obj/machinery/door/airlock/command{ - name = "Deck Officer" - }, -/obj/effect/turf_decal/siding/wood, -/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/syndicate/leader, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"dF" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"dG" = ( -/obj/structure/table/glass, -/obj/item/storage/box/rndboards{ - pixel_y = 15; - pixel_x = 2 - }, -/obj/item/storage/part_replacer{ - pixel_y = 6 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"dN" = ( -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/structure/fans/tiny, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"dZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"eb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"eg" = ( -/obj/machinery/light/directional/south, -/obj/machinery/vending/medical/syndicate_access{ - onstation = 0 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"eh" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"ej" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 4 - }, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"eq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/engineering) -"et" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/tile/dark_red{ - dir = 4 - }, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"ex" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/testlab) -"ey" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"eA" = ( -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"eI" = ( -/obj/machinery/airalarm/directional/north{ - req_access = list("syndicate") - }, -/obj/machinery/microwave{ - pixel_y = 9 - }, -/obj/structure/table/reinforced, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"eK" = ( -/obj/machinery/vending/games{ - onstation = 0 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"eL" = ( -/obj/machinery/suit_storage_unit/mining, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"eT" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/structure/rack, -/obj/item/pipe_dispenser, -/obj/item/construction/rcd, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/engineering) -"fc" = ( -/obj/machinery/light/directional/north, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"fj" = ( -/obj/structure/tank_dispenser, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"fq" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/machinery/vending/wardrobe/syndie_wardrobe{ - onstation = 0 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"fs" = ( -/obj/effect/turf_decal/tile/dark_blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/reagent_dispensers/water_cooler, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"fv" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/computer/camera_advanced/xenobio{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/testlab) -"fx" = ( -/obj/structure/sink/directional/south, -/obj/structure/mirror/directional/north, -/turf/open/floor/iron/checker, -/area/ruin/syndicate_lava_base/bar) -"fC" = ( -/obj/machinery/light/directional/west, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/checker, -/area/ruin/syndicate_lava_base/bar) -"fF" = ( -/obj/structure/table/wood, -/obj/item/storage/dice, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"fH" = ( -/obj/structure/cable, -/obj/machinery/computer/order_console/mining/interdyne, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"fN" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"fO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"fX" = ( -/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/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/main) -"gb" = ( -/obj/machinery/light/directional/north, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"gd" = ( -/obj/machinery/airalarm/directional/south{ - req_access = list("syndicate") - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"gf" = ( -/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 - }, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/bar) -"gg" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/item/kirbyplants/random, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/machinery/airalarm/directional/south{ - req_access = list("syndicate") - }, -/obj/machinery/light_switch/directional/west, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"gj" = ( -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"gs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/smooth_edge{ - dir = 8 - }, -/area/ruin/syndicate_lava_base/cargo) -"gu" = ( -/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, -/area/ruin/syndicate_lava_base/cargo) -"gv" = ( -/obj/machinery/conveyor_switch/oneway{ - id = "interdynecargoout" - }, -/obj/structure/railing{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"gB" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "interdynecargoout" - }, -/obj/structure/closet/crate, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"gD" = ( -/obj/machinery/door/airlock/grunge{ - name = "Bar" - }, -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/ruin/syndicate_lava_base/bar) -"gF" = ( -/obj/machinery/door/poddoor{ - id = "interdynecargowest" - }, -/obj/machinery/conveyor{ - dir = 4; - id = "interdynecargoout" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"gO" = ( -/obj/machinery/door/window/survival_pod{ - req_access = list("syndicate") - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"gQ" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "interdynecargoout" - }, -/obj/structure/plasticflaps, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"gR" = ( -/obj/effect/turf_decal/tile/brown, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"gS" = ( -/obj/effect/turf_decal/arrows, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"gT" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"gU" = ( -/obj/structure/closet/crate/internals, -/obj/item/tank/internals/oxygen/yellow, -/obj/item/tank/internals/oxygen/yellow, -/obj/item/tank/internals/oxygen/yellow, -/obj/item/tank/internals/emergency_oxygen/double, -/obj/item/tank/internals/emergency_oxygen/double, -/obj/item/tank/internals/emergency_oxygen/double, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/effect/turf_decal/box/white, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"hb" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"hl" = ( -/obj/machinery/atmospherics/components/binary/valve/digital/layer2, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"hq" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/structure/flora/rock, -/turf/open/misc/asteroid/basalt, -/area/ruin/syndicate_lava_base/cargo) -"hH" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/firealarm/directional/west{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"hN" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"hQ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"hR" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"hY" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "interdyneo2"; - dir = 1 - }, -/turf/open/floor/engine/o2, -/area/ruin/syndicate_lava_base/engineering) -"ib" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/item/toy/cards/deck/kotahi{ - pixel_y = 5 - }, -/obj/structure/table, -/turf/open/floor/plating/lavaland_atmos, -/area/ruin/syndicate_lava_base/cargo) -"id" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/condiment/enzyme{ - pixel_y = 8 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 6 - }, -/obj/item/reagent_containers/condiment/saltshaker, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"if" = ( -/obj/machinery/turretid{ - ailock = 1; - control_area = "/area/ruin/syndicate_lava_base/main"; - dir = 1; - icon_state = "control_kill"; - lethal = 1; - name = "Base turret controls"; - pixel_y = 30; - req_access = list("syndicate") - }, -/turf/open/floor/iron/edge, -/area/ruin/syndicate_lava_base/main) -"ij" = ( -/obj/structure/table/reinforced, -/obj/machinery/processor, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"ik" = ( -/obj/structure/bookcase/random/fiction, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"is" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/chair/office/light{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/virology) -"it" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"iw" = ( -/obj/structure/table, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/smooth_edge, -/area/ruin/syndicate_lava_base/cargo) -"iA" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"iC" = ( -/obj/machinery/light/directional/east, -/obj/machinery/hydroponics/constructable, -/turf/open/floor/grass, -/area/ruin/syndicate_lava_base/bar) -"iG" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 5; - faction = list("Syndicate","neutral") - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/engineering) -"iH" = ( -/obj/structure/railing, -/obj/effect/turf_decal/loading_area, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"iO" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/turf_decal/box/white, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"je" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"jh" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 1 - }, -/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/ruin/syndicate_lava_base/cargo) -"ji" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"jj" = ( -/obj/effect/turf_decal/tile/dark_blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/chair/sofa/bench/left, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"jn" = ( -/obj/effect/turf_decal/tile/dark_blue{ - dir = 1 - }, -/obj/machinery/medical_kiosk, -/obj/structure/sign/departments/maint/directional/north, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"jp" = ( -/obj/machinery/photocopier, -/obj/machinery/light/directional/south, -/turf/open/floor/wood/large, -/area/ruin/syndicate_lava_base/dormitories) -"jx" = ( -/obj/structure/chair/office, -/obj/machinery/button/door/directional/east{ - id = "interdynelibrary" - }, -/turf/open/floor/wood/large, -/area/ruin/syndicate_lava_base/dormitories) -"jB" = ( -/obj/effect/turf_decal/siding/thinplating/corner{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"jF" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/anesthetic_machine, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"jK" = ( -/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/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"jN" = ( -/obj/machinery/firealarm/directional/south{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"jP" = ( -/obj/machinery/button/door/directional/west{ - id = "interdynedorms"; - req_access = list("syndicate") - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"jR" = ( -/obj/effect/decal/cleanable/oil/streak, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"jS" = ( -/obj/structure/closet/crate, -/obj/item/storage/box/stockparts/deluxe, -/obj/item/storage/box/stockparts/deluxe, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/circuitboard/machine/processor, -/obj/item/circuitboard/machine/gibber, -/obj/item/circuitboard/machine/deep_fryer, -/obj/item/circuitboard/machine/cell_charger, -/obj/item/circuitboard/machine/smoke_machine, -/obj/item/stack/sheet/plasteel/fifty, -/obj/machinery/button/door/directional/south{ - id = "interdynecargo"; - req_access = list("syndicate") - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"kg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/button/door/directional/west{ - specialfunctions = 4; - id = "Dynbin2"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"kq" = ( -/obj/structure/sign/departments/chemistry/directional/east, -/obj/structure/table/glass, -/obj/item/stack/sheet/mineral/plasma{ - amount = 15 - }, -/obj/item/storage/box/beakers/bluespace, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"ks" = ( -/obj/machinery/oven/range, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"kw" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/firealarm/directional/west{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/engineering) -"ky" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/machinery/airalarm/directional/south{ - req_access = list("syndicate") - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"kC" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/smooth_edge{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/cargo) -"kD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/medbay) -"kL" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 5; - faction = list("Syndicate","neutral") - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/main) -"kS" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 10; - faction = list("Syndicate","neutral") - }, -/turf/closed/wall/r_wall/syndicate, -/area/ruin/syndicate_lava_base/main) -"kV" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"lf" = ( -/obj/machinery/door/window/survival_pod{ - dir = 8; - req_access = list("syndicate") - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"lo" = ( -/obj/machinery/firealarm/directional/west{ - dir = 4; - pixel_x = -28 - }, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"lq" = ( -/obj/machinery/light_switch/directional/north, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"ls" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 8 - }, -/obj/item/folder/white, -/turf/open/floor/iron/white/side, -/area/ruin/syndicate_lava_base/medbay) -"lv" = ( -/obj/machinery/vending/barbervend{ - onstation = 0 - }, -/obj/machinery/button/door/directional/east{ - id = "interdynebarbers" - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"lA" = ( -/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 = 6 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"lC" = ( -/obj/machinery/button/door/directional/west{ - id = "interdynekitchen" - }, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"lF" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer2{ - dir = 8 - }, -/turf/open/floor/plating/lavaland_atmos, -/area/ruin/syndicate_lava_base/engineering) -"lM" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"lR" = ( -/obj/machinery/smartfridge/food, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark/small, -/area/ruin/syndicate_lava_base/bar) -"lS" = ( -/obj/structure/displaycase{ - alert = 0; - desc = "A display case containing an expensive forgery, probably."; - req_access = list("syndicate"); - start_showpiece_type = /obj/item/fakeartefact - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"lX" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/structure/table/reinforced, -/obj/item/fakeartefact{ - possible = list(/obj/item/kinetic_crusher) - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"mb" = ( -/obj/structure/dresser, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"md" = ( -/obj/effect/turf_decal/siding/thinplating/light{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/closet/crate/freezer/sansufentanyl, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"mk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/departments/engineering/directional/south, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"ml" = ( -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"mn" = ( -/obj/structure/sign/directions/supply{ - dir = 1; - pixel_y = 32 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"mp" = ( -/obj/effect/turf_decal/box/red/corners, -/obj/effect/turf_decal/box/red/corners{ - dir = 8 - }, -/obj/structure/closet/crate/secure/gear{ - req_access = list("syndicate") - }, -/obj/item/clothing/glasses/night, -/obj/item/clothing/glasses/night, -/obj/item/clothing/glasses/night, -/obj/item/storage/belt/military, -/obj/item/storage/belt/military, -/obj/item/clothing/mask/gas/syndicate, -/obj/item/clothing/mask/gas/syndicate, -/obj/item/clothing/shoes/combat, -/obj/item/clothing/shoes/combat, -/obj/item/clothing/under/syndicate/combat, -/obj/item/clothing/under/syndicate/combat, -/obj/item/clothing/gloves/combat, -/obj/item/clothing/gloves/combat, -/obj/effect/turf_decal/siding/brown{ - dir = 1 - }, -/obj/machinery/light/directional/south, -/obj/item/card/id/advanced/chameleon, -/obj/item/card/id/advanced/chameleon, -/obj/item/card/id/advanced/chameleon, -/obj/item/radio/headset/interdyne, -/obj/item/radio/headset/interdyne, -/obj/item/radio/headset/interdyne, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"mz" = ( -/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, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/main) -"mD" = ( -/obj/effect/turf_decal/siding/brown{ - dir = 9 - }, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"mG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"mK" = ( -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"mN" = ( -/turf/open/floor/engine/o2, -/area/ruin/syndicate_lava_base/engineering) -"mV" = ( -/obj/effect/turf_decal/siding/thinplating/light{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/table/reinforced, -/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/storage/pill_bottle/mannitol, -/obj/item/reagent_containers/dropper, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"na" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/structure/bed/double{ - dir = 1 - }, -/obj/item/bedsheet/dorms_double{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"nd" = ( -/obj/structure/sign/directions/science{ - dir = 8; - pixel_x = -32; - pixel_y = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"ne" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"nh" = ( -/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, -/area/ruin/syndicate_lava_base/main) -"ni" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/chair/plastic{ - dir = 8 - }, -/turf/open/floor/plating/lavaland_atmos, -/area/ruin/syndicate_lava_base/cargo) -"no" = ( -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"nq" = ( -/obj/structure/dresser, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"nt" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"nA" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plating/lavaland_atmos, -/area/ruin/syndicate_lava_base/cargo) -"nD" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"nT" = ( -/turf/open/floor/iron/dark/textured_large, -/area/ruin/syndicate_lava_base/bar) -"nX" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/obj/machinery/door/window/survival_pod{ - req_access = list("syndicate") - }, -/turf/open/floor/iron/white/side{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/medbay) -"nZ" = ( -/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, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/main) -"ob" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"oi" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner, -/obj/machinery/door/airlock/public/glass{ - name = "Dormitories" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"ok" = ( -/obj/structure/table/reinforced, -/obj/item/storage/backpack/duffelbag/syndie/surgery, -/obj/machinery/airalarm/directional/north, -/obj/item/healthanalyzer{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/clothing/mask/breath/anesthetic{ - pixel_x = 8; - pixel_y = 5 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"ow" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - 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/ruin/syndicate_lava_base/bar) -"oA" = ( -/obj/machinery/door/window/survival_pod{ - req_access = list("syndicate"); - name = "Slime Euthanization Chamber" - }, -/turf/open/floor/circuit/telecomms, -/area/ruin/syndicate_lava_base/testlab) -"oB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/table, -/turf/open/floor/iron/dark/textured_corner{ - dir = 8 - }, -/area/ruin/syndicate_lava_base/bar) -"oE" = ( -/obj/structure/closet/secure_closet/personal/cabinet, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"oH" = ( -/obj/structure/bookcase/random/religion, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"oK" = ( -/obj/machinery/conveyor{ - dir = 6; - id = "interdynedisp" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"oM" = ( -/obj/machinery/smartfridge/chemistry/virology/preloaded, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/virology) -"oP" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/power/rtg/advanced, -/obj/machinery/power/terminal, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"oT" = ( -/obj/machinery/hydroponics/constructable, -/turf/open/floor/grass, -/area/ruin/syndicate_lava_base/bar) -"oW" = ( -/obj/machinery/light/directional/south, -/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, -/turf/open/floor/catwalk_floor/iron_dark, -/area/ruin/syndicate_lava_base/cargo) -"oX" = ( -/obj/structure/rack, -/obj/item/cultivator, -/obj/item/shovel/spade, -/obj/item/hatchet, -/obj/item/plant_analyzer, -/obj/item/geneshears, -/obj/item/gun/energy/floragun, -/obj/item/secateurs, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"oY" = ( -/obj/machinery/light/directional/south, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"pk" = ( -/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 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"pq" = ( -/obj/machinery/door/airlock/mining/glass{ - name = "Cargo Bay" - }, -/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/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/ruin/syndicate_lava_base/cargo) -"pt" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"py" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/structure/table/glass, -/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/dark, -/area/ruin/syndicate_lava_base/virology) -"pz" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"pD" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"pE" = ( -/obj/machinery/vending/drugs{ - name = "\improper SyndiDrug Plus"; - onstation = 0 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"pI" = ( -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"pK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"pR" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"pW" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/iv_drip, -/obj/machinery/defibrillator_mount/loaded{ - pixel_x = 28 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"pY" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"qa" = ( -/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, -/area/ruin/syndicate_lava_base/cargo) -"qb" = ( -/obj/machinery/suit_storage_unit/mining, -/obj/machinery/airalarm/directional/north{ - req_access = list("syndicate") - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"qc" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 9 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/syndicate_lava_base/testlab) -"qj" = ( -/obj/machinery/airalarm/directional/north{ - req_access = list("syndicate") - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"qs" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Bar" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "interdyne-service" - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"qt" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/syndicate_lava_base/testlab) -"qz" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"qE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/button/door/directional/south{ - name = "Dorm Bolt Control"; - id = "Dynbin3"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"qL" = ( -/obj/effect/turf_decal/tile/dark_blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/button/door/directional/east{ - id = "interdynemedbay"; - req_access = list("syndicate") - }, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"qT" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"qU" = ( -/obj/structure/table/glass, -/obj/item/storage/box/syringes{ - pixel_x = 5; - pixel_y = 10 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/item/storage/bag/xeno, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/testlab) -"qX" = ( -/obj/structure/cable, -/turf/open/floor/catwalk_floor/iron_dark, -/area/ruin/syndicate_lava_base/testlab) -"rb" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating/dark, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"rf" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/structure/rack, -/obj/effect/turf_decal/box/white, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/item/pickaxe, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"rh" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"rj" = ( -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/checker, -/area/ruin/syndicate_lava_base/bar) -"rm" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 4 - }, -/obj/item/storage/bag/tray, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"rq" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/virology) -"ru" = ( -/obj/machinery/door/airlock/engineering{ - name = "Engineering" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/engineering) -"rv" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"rC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/syndicate_access, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/engineering) -"rE" = ( -/obj/effect/turf_decal/tile/dark_blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/item/storage/backpack/duffelbag/synth_treatment_kit/trauma/advanced/unzipped, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"rQ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/bar) -"rV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/effect/turf_decal/stripes/blue{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"rW" = ( -/obj/structure/bed/maint, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"sb" = ( -/obj/structure/table/glass, -/obj/item/stack/cable_coil, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"sd" = ( -/obj/structure/sign/directions/vault{ - dir = 8; - pixel_y = 30 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"sf" = ( -/obj/machinery/light/directional/south, -/obj/structure/closet/secure_closet/freezer/kitchen{ - req_access = list("syndicate") - }, -/obj/item/reagent_containers/condiment/milk, -/obj/item/reagent_containers/condiment/soymilk, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"sj" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/light/directional/north, -/obj/structure/table/glass, -/obj/structure/bedsheetbin, -/obj/machinery/airalarm/directional/north{ - req_access = list("syndicate") - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/syndicate_lava_base/dormitories) -"sl" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/turf/open/floor/engine/n2, -/area/ruin/syndicate_lava_base/engineering) -"sn" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/structure/fans/tiny, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/machinery/door/airlock/security/old{ - name = "Brig Hold"; - id_tag = "DyneBrig" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"so" = ( -/obj/machinery/light/directional/north, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"sx" = ( -/obj/structure/bookcase/random/reference, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"sD" = ( -/obj/structure/tank_holder/anesthetic, -/obj/structure/railing, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"sI" = ( -/obj/effect/turf_decal/siding/thinplating/dark/end, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"sK" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 8 - }, -/obj/machinery/light_switch/directional/north, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"sL" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"sP" = ( -/obj/machinery/chem_dispenser/mutagensaltpeter, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"sY" = ( -/obj/machinery/atmospherics/miner/oxygen, -/turf/open/floor/engine/o2, -/area/ruin/syndicate_lava_base/engineering) -"ta" = ( -/turf/open/floor/engine/n2, -/area/ruin/syndicate_lava_base/engineering) -"to" = ( -/turf/open/floor/iron/smooth_edge{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/medbay) -"tt" = ( -/obj/machinery/shower/directional/north, -/obj/structure/curtain, -/turf/open/floor/iron/checker, -/area/ruin/syndicate_lava_base/bar) -"tv" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"tx" = ( -/obj/structure/table/glass, -/obj/structure/towel_bin, -/obj/item/soap/syndie, -/turf/open/floor/iron/checker, -/area/ruin/syndicate_lava_base/bar) -"tD" = ( -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"tH" = ( -/obj/machinery/firealarm/directional/east{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"tI" = ( -/obj/machinery/button/door{ - id = "interdynecargowest"; - pixel_x = 32; - pixel_y = 8 - }, -/obj/machinery/button/door{ - id = "interdynecargoeast"; - pixel_x = 32; - pixel_y = -8 - }, -/obj/machinery/computer/shuttle{ - desc = "Occasionally used to call in a resupply shuttle if one is in range."; - dir = 8; - icon_keyboard = "syndie_key"; - icon_screen = "syndishuttle"; - light_color = "#FA8282"; - name = "syndicate cargo shuttle terminal"; - possible_destinations = "syndielavaland_cargo"; - req_access = list("syndicate"); - shuttleId = "syndie_cargo" - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"tJ" = ( -/obj/machinery/conveyor{ - id = "interdynedisp" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"tP" = ( -/obj/effect/decal/cleanable/oil, -/obj/structure/disposaloutlet{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"tS" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"tT" = ( -/obj/machinery/vending/hydroseeds{ - onstation = 0 - }, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"tW" = ( -/obj/structure/chair/office/light{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"ub" = ( -/obj/machinery/flasher/directional/north{ - id = "DyneBrigFlash" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"un" = ( -/turf/open/floor/iron/dark/textured_corner{ - dir = 4 - }, -/area/ruin/syndicate_lava_base/bar) -"uy" = ( -/obj/machinery/door/airlock{ - name = "Bedroom"; - id_tag = "DyneDO" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"uD" = ( -/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 = 8 - }, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/bar) -"uE" = ( -/obj/machinery/firealarm/directional/east{ - dir = 8 - }, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"uJ" = ( -/obj/structure/table/reinforced, -/obj/effect/spawner/random/food_or_drink/donkpockets{ - pixel_y = 7; - pixel_x = 10 - }, -/obj/item/storage/box/donkpockets{ - pixel_y = 5; - pixel_x = -7 - }, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"uP" = ( -/obj/machinery/light/floor, -/obj/machinery/cryo_cell, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"uX" = ( -/obj/effect/turf_decal/tile/dark_blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/chair/sofa/bench/right, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"ve" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "interdynen2"; - dir = 1 - }, -/turf/open/floor/engine/n2, -/area/ruin/syndicate_lava_base/engineering) -"vi" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"vj" = ( -/obj/machinery/door/airlock{ - name = "Quiet Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"vt" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 4 - }, -/obj/effect/turf_decal/tile/bar{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"vH" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"vJ" = ( -/obj/machinery/light_switch/directional/north, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"vK" = ( -/obj/structure/table, -/obj/item/storage/box/drinkingglasses{ - pixel_y = 10 - }, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"vM" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/structure/flora/rock/pile, -/turf/open/misc/asteroid/basalt, -/area/ruin/syndicate_lava_base/cargo) -"vQ" = ( -/obj/machinery/hydroponics/constructable, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/turf/open/floor/grass, -/area/ruin/syndicate_lava_base/bar) -"vR" = ( -/obj/structure/frame/machine{ - anchored = 1; - state = 2; - icon_state = "box_1" - }, -/obj/item/circuitboard/machine/stacking_machine, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"vX" = ( -/obj/structure/frame/machine{ - anchored = 1; - state = 2; - icon_state = "box_1" - }, -/obj/item/circuitboard/machine/ore_redemption, -/obj/item/assembly/igniter, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"vZ" = ( -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"wb" = ( -/obj/effect/turf_decal/siding/wood, -/obj/machinery/door/airlock{ - name = "Cabin 1"; - id_tag = "Dynbin1" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"wc" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Dormitories" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"wf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/conveyor{ - id = "interdynedisp"; - dir = 1 - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"wi" = ( -/obj/structure/rack/shelf, -/obj/effect/turf_decal/box/white, -/obj/item/construction/rcd/loaded, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"wn" = ( -/obj/structure/disposalpipe/trunk, -/obj/structure/disposaloutlet{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/syndicate_lava_base/virology) -"wo" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"wq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"wt" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"wx" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/vending/clothing{ - onstation = 0 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/syndicate_lava_base/dormitories) -"wy" = ( -/obj/structure/ore_box, -/obj/structure/railing{ - dir = 4 - }, -/obj/effect/turf_decal/box/white, -/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, -/area/ruin/syndicate_lava_base/cargo) -"wB" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/syndicate_lava_base/testlab) -"wC" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"wD" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"wJ" = ( -/obj/structure/table, -/obj/machinery/button/door/directional/east{ - specialfunctions = 4; - normaldoorcontrol = 1; - name = "Dorm Bolt Control"; - id = "DyneAlpha" - }, -/turf/open/floor/iron/smooth_large, -/area/ruin/syndicate_lava_base/cargo) -"wL" = ( -/obj/machinery/door/airlock{ - name = "Library Backroom" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/wood/large, -/area/ruin/syndicate_lava_base/dormitories) -"wR" = ( -/obj/structure/easel, -/obj/item/canvas/twentythree_nineteen, -/obj/item/canvas/twentythree_twentythree, -/obj/item/canvas/twentythree_twentythree, -/obj/structure/sign/painting/library{ - pixel_x = -32 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"wS" = ( -/obj/machinery/washing_machine, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/syndicate_access, -/turf/open/floor/iron/cafeteria, -/area/ruin/syndicate_lava_base/dormitories) -"wU" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/effect/turf_decal/siding/thinplating/light{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/closet/crate/freezer/blood, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"wW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"wY" = ( -/obj/machinery/light_switch/directional/south, -/obj/structure/table, -/obj/item/paper_bin{ - pixel_y = 4 - }, -/obj/item/pen{ - pixel_y = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"xk" = ( -/obj/machinery/conveyor_switch/oneway{ - id = "interdynecargoin" - }, -/obj/structure/railing{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"xm" = ( -/obj/structure/chair/wood{ - dir = 1 - }, -/obj/structure/sign/painting/library{ - pixel_x = -32 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"xo" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/machinery/portable_atmospherics/canister/anesthetic_mix, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"xp" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 6 - }, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"xr" = ( -/obj/structure/chair{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/bar) -"xs" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/door/airlock{ - name = "Cabin 2"; - id_tag = "Dynbin2" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"xw" = ( -/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/corner{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"xJ" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating/dark/corner, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"xL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"xM" = ( -/obj/structure/chair/office/light{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"xN" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"xP" = ( -/obj/effect/turf_decal/vg_decals/department/cargo, -/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, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"xR" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/syndicate_lava_base/medbay) -"xT" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/caution{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"xY" = ( -/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 = 6 - }, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/main) -"yb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/firealarm/directional/north{ - dir = 2 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"yd" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, -/obj/machinery/light/directional/east, -/obj/structure/closet/secure_closet/ds2atmos{ - anchorable = 0; - anchored = 1 - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"yh" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "interdynecargoin" - }, -/obj/structure/closet/crate/medical, -/obj/item/storage/medkit/fire{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/medkit/brute, -/obj/item/storage/medkit/regular{ - pixel_x = -3; - pixel_y = -3 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"yk" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark/corner, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"yp" = ( -/obj/structure/table/reinforced, -/obj/item/kitchen/rollingpin, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"yr" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "interdynecargoin" - }, -/obj/structure/plasticflaps, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"yw" = ( -/obj/effect/decal/cleanable/oil, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"yy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"yA" = ( -/obj/machinery/light/directional/south, -/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, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/bar) -"yE" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/obj/effect/turf_decal/siding/thinplating/dark/corner, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/airalarm/directional/south{ - req_access = list("syndicate") - }, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"yG" = ( -/obj/machinery/door/firedoor, -/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, -/area/ruin/syndicate_lava_base/main) -"yU" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plating/lavaland_atmos, -/area/ruin/syndicate_lava_base/engineering) -"yV" = ( -/obj/structure/toilet, -/obj/structure/window/reinforced/tinted/spawner/directional/west, -/turf/open/floor/iron/checker, -/area/ruin/syndicate_lava_base/bar) -"zc" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"zd" = ( -/obj/structure/closet/secure_closet/freezer/meat{ - req_access = list("syndicate") - }, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"zj" = ( -/obj/machinery/light/directional/south, -/obj/structure/table, -/obj/machinery/fax{ - fax_name = "Interdyne Pharmaceuticals"; - pixel_y = 7; - name = "Interdyne Fax Machine" - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"zl" = ( -/obj/structure/chair/stool/bar{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"zo" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/mob/living/carbon/human/species/monkey{ - ai_controller = null; - faction = list("neutral","Syndicate") - }, -/obj/structure/chair/office/light, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"zr" = ( -/obj/machinery/vending/dinnerware{ - onstation = 0 - }, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"zt" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/virology) -"zu" = ( -/obj/structure/chair/stool/bar{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"zv" = ( -/obj/structure/filingcabinet, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"zw" = ( -/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/plastitanium, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/testlab) -"zy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"zz" = ( -/obj/machinery/door/poddoor{ - id = "interdynecargoeast" - }, -/obj/machinery/conveyor{ - dir = 8; - id = "interdynecargoin" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"zB" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"zE" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 1 - }, -/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, -/area/ruin/syndicate_lava_base/medbay) -"zF" = ( -/obj/machinery/atmospherics/miner/nitrogen, -/turf/open/floor/engine/n2, -/area/ruin/syndicate_lava_base/engineering) -"zG" = ( -/obj/structure/table, -/obj/machinery/chem_dispenser/drinks/fullupgrade{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"zJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/engineering) -"zM" = ( -/obj/machinery/chem_heater/withbuffer, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"zO" = ( -/obj/structure/closet/crate/bin, -/turf/open/floor/iron/checker, -/area/ruin/syndicate_lava_base/bar) -"zP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/directional/south, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"zS" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/button/door/directional/east{ - specialfunctions = 4; - normaldoorcontrol = 1; - name = "Dorm Bolt Control"; - id = "DyneDO" - }, -/turf/open/floor/carpet/orange, -/area/ruin/syndicate_lava_base/cargo) -"Ac" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"Ae" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/door/airlock{ - name = "Cabin 4"; - id_tag = "Dynbin4" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"Ai" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/item/reagent_containers/cup/glass/shaker{ - pixel_x = 6; - pixel_y = 2 - }, -/obj/item/reagent_containers/cup/rag{ - pixel_x = -4; - pixel_y = 3 - }, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/bar) -"Ak" = ( -/obj/machinery/power/rtg/advanced, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"An" = ( -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"Ao" = ( -/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, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"Ar" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"Aw" = ( -/obj/structure/ore_box, -/obj/structure/railing{ - dir = 6 - }, -/obj/effect/turf_decal/box/white, -/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, -/area/ruin/syndicate_lava_base/cargo) -"Ay" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"AC" = ( -/obj/structure/lattice/catwalk, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/syndicate_lava_base/testlab) -"AG" = ( -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/structure/fans/tiny, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"AH" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"AJ" = ( -/obj/effect/turf_decal/tile/dark_red{ - dir = 1 - }, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"AK" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/testlab) -"AS" = ( -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"AT" = ( -/obj/machinery/door/airlock/maintenance/external, -/obj/structure/fans/tiny, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"AV" = ( -/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 = 9 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"AW" = ( -/obj/machinery/atmospherics/components/binary/volume_pump{ - dir = 4; - name = "BZ Pump" - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/testlab) -"Bn" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"Bo" = ( -/obj/machinery/light/directional/south, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"Bp" = ( -/obj/structure/frame/machine{ - anchored = 1; - state = 2; - icon_state = "box_1" - }, -/obj/item/circuitboard/machine/recycler, -/obj/machinery/conveyor{ - dir = 4; - id = "interdynedisp" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"Bq" = ( -/obj/structure/table, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"Bw" = ( -/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, -/area/ruin/syndicate_lava_base/engineering) -"BA" = ( -/obj/item/paper/guides/jobs/medical/morgue, -/obj/structure/table/reinforced, -/obj/item/storage/backpack/duffelbag/syndie/surgery, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"BH" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/chair/plastic{ - dir = 4 - }, -/turf/open/floor/plating/lavaland_atmos, -/area/ruin/syndicate_lava_base/testlab) -"BJ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/item/toy/cards/deck/wizoff{ - pixel_y = 6 - }, -/obj/structure/table, -/turf/open/floor/plating/lavaland_atmos, -/area/ruin/syndicate_lava_base/testlab) -"BN" = ( -/obj/item/disk/surgery/forgottenship, -/obj/structure/table/reinforced, -/obj/item/storage/box/medipens{ - pixel_x = 4; - pixel_y = 13 - }, -/obj/item/reagent_containers/cup/beaker/cryoxadone{ - pixel_x = -6; - pixel_y = 10 - }, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"BP" = ( -/obj/structure/table, -/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ - dir = 1 - }, -/obj/machinery/airalarm/directional/south{ - req_access = list("syndicate") - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"BQ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/chair/plastic{ - dir = 8 - }, -/turf/open/floor/plating/lavaland_atmos, -/area/ruin/syndicate_lava_base/testlab) -"BS" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "interdyneserver"; - dir = 1; - external_pressure_bound = 120; - name = "server vent" - }, -/turf/open/floor/circuit/telecomms, -/area/ruin/syndicate_lava_base/testlab) -"BT" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/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, -/area/ruin/syndicate_lava_base/medbay) -"BW" = ( -/obj/machinery/button/door{ - id = "syndie_lavaland_vault"; - name = "Vault Bolt Control"; - normaldoorcontrol = 1; - pixel_x = -8; - pixel_y = 24; - req_access = list("syndicate"); - specialfunctions = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"BZ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating/lavaland_atmos, -/area/ruin/syndicate_lava_base/testlab) -"Cd" = ( -/obj/structure/chair, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/bar) -"Cg" = ( -/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/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/bar) -"Ci" = ( -/obj/structure/fans/tiny, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/door/airlock/maintenance/external, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/main) -"Co" = ( -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/shaftminer{ - dir = 4 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/smooth_edge{ - dir = 4 - }, -/area/ruin/syndicate_lava_base/cargo) -"Ct" = ( -/obj/machinery/chem_master, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"Cv" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"CB" = ( -/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/ruin/syndicate_lava_base/dormitories) -"CD" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 6 - }, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"CJ" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"CK" = ( -/obj/machinery/bookbinder, -/turf/open/floor/wood/large, -/area/ruin/syndicate_lava_base/dormitories) -"CL" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/engineering) -"CM" = ( -/obj/machinery/door/airlock/maintenance/external, -/obj/structure/fans/tiny, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/main) -"CN" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 8 - }, -/obj/machinery/door/airlock/public/glass{ - name = "Bar" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"CP" = ( -/turf/open/floor/iron/dark/textured_corner{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/bar) -"CR" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/structure/table/reinforced, -/obj/item/fakeartefact{ - possible = list(/obj/item/gun/energy/recharge/kinetic_accelerator) - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"CT" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/thinplating/dark/corner, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"CU" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"CW" = ( -/obj/structure/table/reinforced/rglass, -/obj/item/tattoo_kit{ - pixel_y = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"CY" = ( -/obj/effect/turf_decal/siding/thinplating/dark/end{ - dir = 1 - }, -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters{ - dir = 8; - id = "interdynekitchen" - }, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"CZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/firealarm/directional/north{ - dir = 2 - }, -/turf/open/floor/iron/smooth_edge, -/area/ruin/syndicate_lava_base/medbay) -"Dc" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"De" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/machinery/portable_atmospherics/pump, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"Df" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/frame/machine{ - anchored = 1; - state = 2; - icon_state = "box_1" - }, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/testlab) -"Dk" = ( -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/bar) -"Do" = ( -/obj/machinery/portable_atmospherics/canister/bz, -/obj/machinery/atmospherics/components/unary/portables_connector, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/testlab) -"Dp" = ( -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"Dt" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/machinery/light/directional/south, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"DJ" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/bar) -"DP" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/power/smes/magical{ - desc = "A high-capacity superconducting magnetic energy storage (SMES) unit. Produces power through an unstable bluespace pocket."; - name = "bluespace-powered power storage unit"; - output_level = 200000 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"DQ" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 8 - }, -/obj/machinery/firealarm/directional/south{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"DU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"DZ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating/lavaland_atmos, -/area/ruin/syndicate_lava_base/medbay) -"Em" = ( -/obj/machinery/light/directional/west, -/obj/structure/sign/painting/library{ - pixel_x = -32 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"EA" = ( -/obj/machinery/computer/security/telescreen/entertainment/directional/east, -/obj/structure/table/reinforced/rglass, -/obj/item/scissors, -/obj/item/hairbrush/tactical, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"EP" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/window/reinforced/plasma/spawner/directional/east, -/obj/item/kirbyplants/random, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"EZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/dormitories) -"Fa" = ( -/obj/structure/dresser, -/turf/open/floor/iron/smooth_large, -/area/ruin/syndicate_lava_base/cargo) -"Fc" = ( -/obj/structure/closet/crate/secure/weapon{ - req_access = list("syndicate") - }, -/obj/item/ammo_box/c9mm{ - pixel_y = 6 - }, -/obj/item/ammo_box/c9mm, -/obj/item/ammo_box/magazine/m9mm{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/ammo_box/magazine/m9mm{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/ammo_box/magazine/m9mm{ - pixel_x = 1; - pixel_y = -1 - }, -/obj/item/ammo_box/magazine/m9mm{ - pixel_x = 4; - pixel_y = -4 - }, -/obj/effect/turf_decal/siding/brown{ - dir = 1 - }, -/obj/machinery/light/directional/south, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"Fi" = ( -/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 - }, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/main) -"Fk" = ( -/obj/structure/closet/crate, -/obj/item/flashlight{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/flashlight{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/flashlight{ - pixel_x = 1; - pixel_y = -1 - }, -/obj/item/extinguisher{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/extinguisher{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/extinguisher{ - pixel_x = 1; - pixel_y = -1 - }, -/obj/effect/turf_decal/siding/brown{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"Fm" = ( -/obj/structure/table/reinforced, -/obj/machinery/reagentgrinder, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"Fq" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - external_pressure_bound = 140; - name = "server vent"; - pressure_checks = 0; - dir = 8 - }, -/turf/open/floor/circuit/telecomms, -/area/ruin/syndicate_lava_base/testlab) -"Ft" = ( -/obj/effect/turf_decal/vg_decals/department/bar{ - dir = 1 - }, -/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, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"Fx" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/testlab) -"Fz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"FA" = ( -/obj/structure/table, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/smooth_edge{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/cargo) -"FC" = ( -/obj/machinery/suit_storage_unit/syndicate/chameleon, -/turf/open/floor/iron/corner{ - dir = 4 - }, -/area/ruin/syndicate_lava_base/main) -"FE" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/chair/plastic{ - dir = 4 - }, -/turf/open/floor/plating/lavaland_atmos, -/area/ruin/syndicate_lava_base/medbay) -"FG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"FJ" = ( -/obj/machinery/libraryscanner, -/turf/open/floor/wood/large, -/area/ruin/syndicate_lava_base/dormitories) -"FT" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Medical Wing"; - req_access = list("syndicate") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"FX" = ( -/obj/machinery/cell_charger_multi, -/obj/structure/table/glass, -/obj/item/stock_parts/cell/bluespace, -/obj/machinery/airalarm/directional/west{ - req_access = list("syndicate") - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"Gb" = ( -/obj/structure/sign/departments/engineering/directional/east, -/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/ruin/syndicate_lava_base/bar) -"Gc" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/structure/bed/double, -/obj/item/bedsheet/qm/double{ - name = "deck officer's bedsheet" - }, -/turf/open/floor/carpet/orange, -/area/ruin/syndicate_lava_base/cargo) -"Gs" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"GB" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"GS" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"GZ" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/effect/turf_decal/vg_decals/atmos/nitrogen{ - dir = 1 - }, -/turf/open/floor/engine/n2, -/area/ruin/syndicate_lava_base/engineering) -"Ha" = ( -/obj/machinery/chem_mass_spec, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"Hf" = ( -/obj/machinery/button/door/directional/west{ - id = "DyneWC"; - normaldoorcontrol = 1; - name = "Door Lock" - }, -/obj/machinery/dryer{ - pixel_x = 8; - pixel_y = 20 - }, -/turf/open/floor/iron/checker, -/area/ruin/syndicate_lava_base/bar) -"Ho" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/syndicate_access, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/testlab) -"Hs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"Hz" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"HA" = ( -/obj/machinery/door/poddoor{ - id = "interdynescience" - }, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/testlab) -"HF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/button/door/directional/north{ - name = "Dorm Bolt Control"; - id = "Dynbin4"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"HI" = ( -/obj/structure/sign/directions/medical{ - dir = 4; - pixel_x = 32; - pixel_y = 3 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"HL" = ( -/obj/item/circuitboard/machine/ore_silo, -/obj/structure/frame/machine{ - anchored = 1; - state = 2; - icon_state = "box_1" - }, -/turf/open/floor/iron/corner, -/area/ruin/syndicate_lava_base/main) -"HM" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Medical Wing"; - req_access = list("syndicate") - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "interdyne-medbay" - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"HN" = ( -/obj/effect/spawner/random/vending/snackvend, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"HQ" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"HR" = ( -/obj/structure/sink/directional/east, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"HT" = ( -/obj/structure/table/glass, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/reagent_dispensers/wall/virusfood/directional/west, -/obj/item/book/manual/wiki/infections{ - pixel_y = 7 - }, -/obj/item/storage/box/beakers{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/storage/box/syringes, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/virology) -"HV" = ( -/obj/structure/railing, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"HX" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/effect/turf_decal/vg_decals/atmos/oxygen{ - dir = 1 - }, -/turf/open/floor/engine/o2, -/area/ruin/syndicate_lava_base/engineering) -"HZ" = ( -/obj/machinery/monkey_recycler, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/testlab) -"Ig" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/power/rtg/advanced, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"Ih" = ( -/obj/structure/sign/departments/medbay/alt/directional/east, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"Ir" = ( -/obj/machinery/firealarm/directional/east{ - dir = 8 - }, -/obj/machinery/vending/hydronutrients{ - onstation = 0 - }, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"It" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"Iv" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/door/airlock/maintenance/external, -/obj/structure/fans/tiny, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"IA" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/machinery/sleeper/syndie/fullupgrade{ - dir = 4 - }, -/obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/smooth_corner, -/area/ruin/syndicate_lava_base/medbay) -"IC" = ( -/turf/open/floor/iron/checker, -/area/ruin/syndicate_lava_base/bar) -"IF" = ( -/obj/structure/table/glass, -/obj/item/storage/box/stockparts/deluxe{ - pixel_x = -6; - pixel_y = 11 - }, -/obj/item/storage/box/stockparts/deluxe{ - pixel_x = 8; - pixel_y = 5 - }, -/obj/item/storage/box/beakers/bluespace, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"IH" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"IL" = ( -/obj/machinery/airalarm/directional/south, -/obj/machinery/hydroponics/constructable, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/turf/open/floor/grass, -/area/ruin/syndicate_lava_base/bar) -"IO" = ( -/obj/machinery/door/airlock{ - name = "Library" - }, -/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/syndicate/general, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"IT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"IV" = ( -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"Jb" = ( -/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/ruin/syndicate_lava_base/testlab) -"Jd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/smooth_large, -/area/ruin/syndicate_lava_base/cargo) -"Jg" = ( -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/machinery/door/airlock{ - name = "Barbers" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"Ji" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"Jm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"Jp" = ( -/obj/structure/disposalpipe/junction{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"Jq" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"Js" = ( -/obj/structure/bodycontainer/morgue, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"Jt" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"JB" = ( -/turf/closed/wall/r_wall/syndicate, -/area/ruin/syndicate_lava_base/main) -"JC" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Bar" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"JN" = ( -/obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, -/turf/open/floor/iron/smooth_large, -/area/ruin/syndicate_lava_base/cargo) -"JR" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/engineering) -"JS" = ( -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"JT" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/machinery/door/poddoor{ - id = "interdynelibrary" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/testlab) -"JU" = ( -/obj/machinery/conveyor_switch/oneway{ - dir = 8; - id = "interdynedisp"; - name = "disposal conveyor" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"JV" = ( -/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/yjunction{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"JX" = ( -/obj/machinery/door/airlock/mining/glass{ - name = "Cargo Bay" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "interdyne-cargo" - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"Kd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/bookcase/random/nonfiction, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"Kh" = ( -/obj/structure/table/glass, -/obj/machinery/reagentgrinder{ - pixel_y = 6 - }, -/obj/item/stack/sheet/mineral/plasma{ - amount = 5 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/testlab) -"Ko" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"Kp" = ( -/obj/structure/closet/secure_closet/personal/cabinet, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"Kq" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"Ku" = ( -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/testlab) -"Kx" = ( -/obj/machinery/door/airlock/research{ - name = "Science Division" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "interdyne-science" - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"Ky" = ( -/obj/machinery/light/directional/north, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/turf/open/floor/circuit/telecomms, -/area/ruin/syndicate_lava_base/testlab) -"KA" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/obj/machinery/door/window/survival_pod{ - req_access = list("syndicate") - }, -/turf/open/floor/iron/white/side{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/bar) -"KD" = ( -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/maintenance/external, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"KG" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/turf/open/floor/engine/o2, -/area/ruin/syndicate_lava_base/engineering) -"KK" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/syndicate_lava_base/cargo) -"KL" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - 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/ruin/syndicate_lava_base/testlab) -"KQ" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 10; - faction = list("Syndicate","neutral") - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/main) -"KS" = ( -/obj/structure/filingcabinet, -/obj/item/folder/syndicate/mining, -/turf/open/floor/iron/corner{ - dir = 8 - }, -/area/ruin/syndicate_lava_base/main) -"KX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"KY" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/effect/turf_decal/tile/dark_red/half{ - dir = 4 - }, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"La" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/engineering) -"Lb" = ( -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate{ - dir = 1 - }, -/obj/machinery/light/directional/south, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"Ld" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Medical Wing"; - req_access = list("syndicate") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron/white/side{ - dir = 4 - }, -/area/ruin/syndicate_lava_base/medbay) -"Le" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/turf/open/floor/iron/white/side, -/area/ruin/syndicate_lava_base/medbay) -"Lg" = ( -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"Li" = ( -/obj/machinery/computer/crew/syndie{ - dir = 4 - }, -/obj/machinery/firealarm/directional/west{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"Ln" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"Lq" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/engineering) -"Ls" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"Lw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"LC" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/machinery/sleeper/syndie/fullupgrade{ - dir = 4 - }, -/turf/open/floor/iron/smooth_corner{ - dir = 4 - }, -/area/ruin/syndicate_lava_base/medbay) -"LH" = ( -/obj/structure/table, -/obj/machinery/button/door/directional/east{ - specialfunctions = 4; - normaldoorcontrol = 1; - name = "Dorm Bolt Control"; - id = "DyneBeta" - }, -/turf/open/floor/iron/smooth_large, -/area/ruin/syndicate_lava_base/cargo) -"LL" = ( -/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/ruin/syndicate_lava_base/testlab) -"LN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"LS" = ( -/obj/structure/table/glass, -/obj/item/book/random{ - pixel_y = 3 - }, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"LU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/engineering) -"LX" = ( -/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/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"Ml" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"Mn" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"Mo" = ( -/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/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"Mv" = ( -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"ME" = ( -/obj/machinery/autolathe/hacked, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/testlab) -"MJ" = ( -/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, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/bar) -"MK" = ( -/obj/machinery/light/directional/east, -/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/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"MN" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"MO" = ( -/obj/effect/turf_decal/vg_decals/department/sci{ - 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, -/area/ruin/syndicate_lava_base/main) -"MR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/airalarm/directional/east{ - req_access = list("syndicate") - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/engineering) -"MU" = ( -/obj/structure/chair/sofa/left/maroon{ - dir = 8 - }, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"MX" = ( -/obj/machinery/chem_master/condimaster{ - name = "BrewMaster 3000" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark/small, -/area/ruin/syndicate_lava_base/bar) -"MY" = ( -/obj/machinery/light/directional/south, -/turf/open/floor/grass, -/area/ruin/syndicate_lava_base/bar) -"Nc" = ( -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"Nd" = ( -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/maintenance/external{ - name = "Morgue" - }, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"Nf" = ( -/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/ruin/syndicate_lava_base/bar) -"Nh" = ( -/obj/structure/table/reinforced, -/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 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"Nl" = ( -/obj/machinery/seed_extractor, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"Ns" = ( -/obj/machinery/vending/dorms{ - onstation = 0 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"NC" = ( -/obj/machinery/chem_dispenser/fullupgrade, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"NH" = ( -/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, -/area/ruin/syndicate_lava_base/medbay) -"NO" = ( -/obj/structure/chair/comfy/barber_chair{ - dir = 8 - }, -/obj/structure/mirror/directional/west, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"NS" = ( -/obj/machinery/flasher/directional/south{ - pixel_x = -6; - id = "DyneBrigFlash" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"NT" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 1 - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/main) -"NX" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/bar) -"Od" = ( -/obj/machinery/syndicatebomb/self_destruct{ - anchored = 1 - }, -/obj/effect/turf_decal/stripes/red/box, -/turf/open/floor/iron/textured_large, -/area/ruin/syndicate_lava_base/main) -"Oi" = ( -/obj/machinery/light/directional/west, -/obj/machinery/firealarm/directional/west{ - dir = 4; - pixel_x = -28 - }, -/obj/structure/chair/office/light{ - dir = 1 - }, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"Oo" = ( -/obj/structure/lattice/catwalk, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/syndicate_lava_base/engineering) -"Ow" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"Oy" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/machinery/computer/security/telescreen/entertainment/directional/east, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/bar) -"Oz" = ( -/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, -/area/ruin/syndicate_lava_base/cargo) -"OC" = ( -/obj/machinery/door/poddoor{ - id = "interdynecargo" - }, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"OK" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"OM" = ( -/obj/effect/turf_decal/vg_decals/department/med{ - dir = 8 - }, -/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, -/area/ruin/syndicate_lava_base/main) -"ON" = ( -/obj/machinery/door/airlock/mining{ - name = "Shaft Miner Dormitory Alpha"; - id_tag = "DyneAlpha" - }, -/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/syndicate/general, -/turf/open/floor/iron/smooth_half{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/cargo) -"OR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/button/door/directional/west{ - specialfunctions = 4; - id = "Dynbin1"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"OS" = ( -/obj/machinery/door/firedoor, -/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, -/area/ruin/syndicate_lava_base/main) -"OW" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/testlab) -"OX" = ( -/obj/structure/flora/bush/flowers_yw, -/obj/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/grass, -/area/ruin/syndicate_lava_base/medbay) -"Pb" = ( -/obj/item/storage/toolbox/syndicate, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"Pd" = ( -/obj/structure/table, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/bar) -"Pf" = ( -/obj/machinery/light/directional/west, -/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/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"Pj" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"Pr" = ( -/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 = 10 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"Ps" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"PC" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/airalarm/directional/east{ - req_access = list("syndicate") - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/virology) -"PG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/stone, -/area/ruin/syndicate_lava_base/bar) -"PM" = ( -/turf/open/floor/iron/edge{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/main) -"PS" = ( -/obj/structure/safe, -/obj/item/storage/box/syndie_kit/chameleon/ghostcafe{ - desc = "It's a box, for storing things."; - name = "chameleon kit" - }, -/obj/item/disk/ammo_workbench/advanced, -/turf/open/floor/iron/corner{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/main) -"PZ" = ( -/turf/open/floor/wood/large, -/area/ruin/syndicate_lava_base/dormitories) -"Qa" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/machinery/computer/cryopod/interdyne/directional/west, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"Qc" = ( -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/public/glass{ - name = "Kitchen-Botany" - }, -/turf/open/floor/iron/dark/small, -/area/ruin/syndicate_lava_base/bar) -"Qg" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/window/reinforced/plasma/spawner/directional/east, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/cargo) -"Qk" = ( -/obj/structure/table/glass, -/obj/item/clothing/glasses/science, -/obj/item/book/manual/wiki/chemistry{ - pixel_y = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"Qm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"Qp" = ( -/obj/machinery/light/directional/north, -/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, -/turf/open/floor/catwalk_floor/iron_dark, -/area/ruin/syndicate_lava_base/cargo) -"Qt" = ( -/obj/machinery/stasis{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/airalarm/directional/east{ - req_access = list("syndicate") - }, -/turf/open/floor/iron/smooth_corner{ - dir = 8 - }, -/area/ruin/syndicate_lava_base/medbay) -"Qw" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"Qx" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Medical Wing"; - req_access = list("syndicate") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/white/side{ - dir = 4 - }, -/area/ruin/syndicate_lava_base/medbay) -"QJ" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Medical Wing"; - req_access = list("syndicate") - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "interdyne-medbay" - }, -/turf/open/floor/iron/white/side{ - dir = 4 - }, -/area/ruin/syndicate_lava_base/medbay) -"QN" = ( -/obj/machinery/smartfridge/drinks, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"QQ" = ( -/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, -/area/ruin/syndicate_lava_base/bar) -"QR" = ( -/obj/machinery/conveyor{ - dir = 5; - id = "interdynedisp" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"QS" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 6; - faction = list("Syndicate","neutral") - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/main) -"QV" = ( -/obj/machinery/porta_turret/syndicate{ - faction = list("Syndicate","neutral") - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/bar) -"QW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"QY" = ( -/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 = 9 - }, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/main) -"QZ" = ( -/obj/structure/table, -/turf/open/floor/iron/smooth_large, -/area/ruin/syndicate_lava_base/cargo) -"Re" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"Ro" = ( -/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 = 6 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"Rq" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/effect/turf_decal/siding/brown{ - dir = 5 - }, -/obj/structure/closet/crate, -/obj/item/storage/toolbox/electrical{ - pixel_y = 4 - }, -/obj/item/storage/toolbox/syndicate, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"Rs" = ( -/obj/machinery/light/directional/east, -/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/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"Rt" = ( -/obj/machinery/door/airlock{ - name = "Unisex Restroom"; - id_tag = "DyneWC" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"Ru" = ( -/obj/structure/frame/machine{ - anchored = 1; - state = 2; - icon_state = "box_1" - }, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/testlab) -"Rx" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"RJ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/button/door/directional/west{ - id = "interdynescience"; - req_access = list("syndicate") - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"RK" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 4 - }, -/obj/effect/turf_decal/tile/bar{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"RN" = ( -/obj/structure/closet/secure_closet/personal/cabinet, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"RP" = ( -/obj/structure/table/optable, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"RT" = ( -/obj/machinery/biogenerator, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark/small, -/area/ruin/syndicate_lava_base/bar) -"RV" = ( -/obj/structure/table/wood, -/obj/machinery/computer/libraryconsole/bookmanagement, -/turf/open/floor/wood/large, -/area/ruin/syndicate_lava_base/dormitories) -"RY" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/testlab) -"RZ" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"Sh" = ( -/obj/machinery/airalarm/directional/south{ - req_access = list("syndicate") - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"Sk" = ( -/obj/machinery/computer/operating, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"Sn" = ( -/obj/machinery/suit_storage_unit/mining, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"Sp" = ( -/obj/machinery/skill_station, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"Sr" = ( -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"Ss" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"Sy" = ( -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"SC" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/dormitories) -"SE" = ( -/obj/machinery/door/poddoor{ - id = "interdynedorms" - }, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/dormitories) -"SI" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/turf/open/floor/engine/n2, -/area/ruin/syndicate_lava_base/engineering) -"SU" = ( -/obj/machinery/door/airlock/mining/glass{ - name = "Cargo Bay" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "interdyne-cargo" - }, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/cargo) -"Tb" = ( -/obj/machinery/firealarm/directional/south{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"Tf" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/cargo) -"Th" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"Tl" = ( -/obj/structure/sign/departments/science/directional/west, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"To" = ( -/obj/machinery/firealarm/directional/north{ - dir = 2 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"Tq" = ( -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"Tw" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/camera/xray{ - c_tag = "Xenobio West"; - dir = 8; - network = list("fsci") - }, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"Tx" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/bar) -"TJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/medbay) -"TV" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 4 - }, -/obj/effect/turf_decal/tile/bar{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"TY" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Pharmacy"; - req_access = list("syndicate") - }, -/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/syndicate/general, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"Ub" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"Ug" = ( -/obj/structure/railing, -/obj/effect/turf_decal/box/white, -/obj/structure/rack/shelf, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"Ui" = ( -/obj/machinery/button/door/directional/north{ - id = "DyneBrig"; - normaldoorcontrol = 1; - name = "Brig Bolt Control"; - specialfunctions = 4; - req_access = list("syndicate") - }, -/obj/machinery/button/flasher{ - id = "DyneBrigFlash"; - pixel_x = 6; - pixel_y = 34 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"Up" = ( -/obj/machinery/modular_computer/preset/curator{ - dir = 1 - }, -/turf/open/floor/wood/large, -/area/ruin/syndicate_lava_base/dormitories) -"Uq" = ( -/obj/structure/bookcase/random/adult, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"Ut" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/smooth_edge, -/area/ruin/syndicate_lava_base/cargo) -"UB" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/tile/dark_red, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"UG" = ( -/turf/closed/wall/r_wall/syndicate, -/area/ruin/syndicate_lava_base/testlab) -"UI" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"UO" = ( -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"UP" = ( -/obj/structure/chair/sofa/corner/maroon, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"UX" = ( -/obj/machinery/door/airlock/research{ - name = "Xenobiology Lab" - }, -/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/syndicate/general, -/turf/open/floor/iron/dark/side, -/area/ruin/syndicate_lava_base/testlab) -"UZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/east, -/obj/effect/spawner/random/trash/grime, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"Va" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 9; - faction = list("Syndicate","neutral") - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/main) -"Vb" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/dormitories) -"Vd" = ( -/obj/structure/sign/departments/xenobio/directional/west, -/obj/structure/closet/crate, -/obj/item/clothing/neck/stethoscope, -/obj/item/choice_beacon/music, -/obj/item/choice_beacon/music, -/turf/open/floor/wood/large, -/area/ruin/syndicate_lava_base/dormitories) -"Vf" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/wood/tile, -/area/ruin/syndicate_lava_base/dormitories) -"Vh" = ( -/obj/machinery/light/small/directional/west, -/obj/structure/rack, -/obj/item/clothing/mask/gas/syndicate, -/obj/item/clothing/mask/gas/syndicate, -/obj/item/clothing/mask/gas/syndicate, -/obj/item/clothing/mask/gas/syndicate, -/turf/open/floor/iron/edge{ - dir = 4 - }, -/area/ruin/syndicate_lava_base/main) -"Vi" = ( -/obj/machinery/smartfridge/food, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"Vj" = ( -/obj/structure/lattice/catwalk, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/syndicate_lava_base/medbay) -"Vm" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/turf/open/misc/asteroid/basalt, -/area/ruin/syndicate_lava_base/cargo) -"Vo" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 10 - }, -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters{ - dir = 8; - id = "interdynekitchen" - }, -/turf/open/floor/iron/kitchen, -/area/ruin/syndicate_lava_base/bar) -"Vt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"Vv" = ( -/obj/machinery/stasis{ - dir = 8 - }, -/turf/open/floor/iron/smooth_corner{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/medbay) -"Vw" = ( -/obj/machinery/door/airlock/medical{ - name = "Medical Desk" - }, -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 8 - }, -/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/syndicate/general, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"VI" = ( -/obj/machinery/firealarm/directional/east{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"VL" = ( -/obj/machinery/atmospherics/components/trinary/mixer/airmix/inverse{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"VM" = ( -/obj/structure/chair/comfy/black{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"VO" = ( -/obj/machinery/door/poddoor{ - id = "interdynemedbay" - }, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"VY" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"Wa" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/structure/bed/double{ - dir = 1 - }, -/obj/item/bedsheet/dorms_double{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"Wd" = ( -/obj/machinery/smartfridge/organ, -/obj/structure/railing, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"Wk" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/syndicate_lava_base/engineering) -"Wm" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"Wq" = ( -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"Wx" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/main) -"WB" = ( -/obj/machinery/griddle, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"WG" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"WM" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/machinery/door/poddoor{ - id = "interdynebarbers" - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"WN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/syndicate_lava_base/main) -"WQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"WU" = ( -/obj/effect/turf_decal/siding/thinplating/dark/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, -/area/ruin/syndicate_lava_base/medbay) -"WW" = ( -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/bar) -"WY" = ( -/obj/structure/table/glass, -/obj/item/storage/box/monkeycubes/syndicate{ - pixel_y = 5 - }, -/obj/item/storage/box/monkeycubes/syndicate{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/slime_extract/grey{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/slime_extract/grey, -/obj/item/slime_extract/grey{ - pixel_x = 2; - pixel_y = -2 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/testlab) -"Xd" = ( -/obj/machinery/computer/pandemic, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/virology) -"Xf" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - 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/ruin/syndicate_lava_base/medbay) -"Xl" = ( -/obj/machinery/light/directional/north, -/obj/structure/table/glass, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/clothing/glasses/hud/health, -/obj/item/reagent_containers/dropper{ - pixel_y = -6 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/virology) -"Xn" = ( -/obj/structure/table/reinforced/rglass, -/obj/item/fur_dyer, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"Xo" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"Xp" = ( -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"Xs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/dormitories) -"Xv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/painting/library{ - pixel_x = 32 - }, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"Xx" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/machinery/door/airlock{ - name = "Library Backroom" - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"XD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/camera/xray{ - c_tag = "Xenobio East"; - dir = 4; - network = list("fsci") - }, -/obj/effect/turf_decal/tile/dark_red{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 1 - }, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"XI" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/door/airlock{ - name = "Cabin 3"; - id_tag = "Dynbin3" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"XJ" = ( -/obj/structure/table/glass, -/obj/machinery/firealarm/directional/west{ - dir = 4 - }, -/obj/machinery/reagentgrinder, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"XO" = ( -/obj/machinery/door/airlock{ - name = "Disposals" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"XQ" = ( -/obj/structure/frame/computer{ - anchored = 1; - dir = 4 - }, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/testlab) -"XR" = ( -/obj/structure/table/wood, -/obj/item/modular_computer/laptop/preset/syndicate, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/cargo) -"XV" = ( -/obj/structure/chair/office/light{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/testlab) -"XW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/textured_corner, -/area/ruin/syndicate_lava_base/bar) -"XX" = ( -/obj/structure/sink/directional/west, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"Yb" = ( -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate, -/obj/machinery/light/directional/north, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"Ye" = ( -/obj/effect/turf_decal/siding/brown{ - dir = 1 - }, -/obj/structure/closet/crate, -/obj/item/modular_computer/laptop/preset/syndicate, -/obj/item/modular_computer/laptop/preset/syndicate, -/obj/item/modular_computer/laptop/preset/syndicate, -/obj/item/modular_computer/laptop/preset/syndicate, -/obj/item/modular_computer/laptop/preset/syndicate, -/obj/item/modular_computer/laptop/preset/syndicate, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/cargo) -"Yf" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/structure/bed/maint, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/testlab) -"Yk" = ( -/obj/machinery/smartfridge/extract/preloaded, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/testlab) -"Yn" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) -"Yo" = ( -/obj/item/storage/box/stockparts/deluxe, -/obj/structure/closet/crate, -/obj/item/storage/bag/trash, -/obj/item/mop, -/obj/item/reagent_containers/cup/bucket, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"Yp" = ( -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"Yu" = ( -/obj/machinery/processor/slime, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/testlab) -"Yv" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/medbay) -"Yz" = ( -/obj/item/disk/design_disk/limbs/ethereal{ - pixel_y = 2 - }, -/obj/item/disk/design_disk/limbs/felinid{ - pixel_y = 4 - }, -/obj/item/disk/design_disk/limbs/lizard{ - pixel_y = 6 - }, -/obj/item/disk/design_disk/limbs/plasmaman{ - pixel_y = 8 - }, -/obj/structure/table/reinforced, -/obj/machinery/light/directional/south, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"YD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/table, -/obj/item/toy/cards/deck/cas{ - pixel_y = 6 - }, -/turf/open/floor/plating/lavaland_atmos, -/area/ruin/syndicate_lava_base/medbay) -"YE" = ( -/obj/machinery/door/airlock/mining{ - name = "Shaft Miner Dormitory Beta"; - id_tag = "DyneBeta" - }, -/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/syndicate/general, -/turf/open/floor/iron/smooth_half{ - dir = 1 - }, -/area/ruin/syndicate_lava_base/cargo) -"YF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/directional/north, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/testlab) -"YJ" = ( -/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, -/area/ruin/syndicate_lava_base/dormitories) -"YN" = ( -/obj/structure/chair{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/bar) -"YO" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/bar) -"YV" = ( -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate{ - dir = 8 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/dormitories) -"YW" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/door/window/survival_pod{ - dir = 4; - req_access = list("syndicate") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/testlab) -"YY" = ( -/obj/machinery/limbgrower, -/turf/open/floor/iron/white, -/area/ruin/syndicate_lava_base/medbay) -"Za" = ( -/obj/structure/sign/departments/cargo/directional/north, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"Zc" = ( -/obj/effect/turf_decal/tile/dark_blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/machinery/vending/syndichem{ - onstation = 0 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/medbay) -"Zd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/testlab) -"Zg" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_y = 4 - }, -/obj/item/pen{ - pixel_y = 4 - }, -/turf/open/floor/iron/white/side, -/area/ruin/syndicate_lava_base/medbay) -"Zn" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ - name = "euthanization chamber freezer"; - dir = 4; - initialize_directions = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/syndicate_lava_base/testlab) -"Zo" = ( -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"Zq" = ( -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"Zr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/medbay) -"Zy" = ( -/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, -/turf/open/floor/catwalk_floor/iron_dark, -/area/ruin/syndicate_lava_base/cargo) -"Zz" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/cargo) -"ZA" = ( -/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, -/area/ruin/syndicate_lava_base/main) -"ZC" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/table, -/obj/item/toy/cards/deck/cas/black{ - pixel_x = 3; - pixel_y = 11 - }, -/turf/open/floor/plating/lavaland_atmos, -/area/ruin/syndicate_lava_base/medbay) -"ZG" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/plating, -/area/ruin/syndicate_lava_base/engineering) -"ZH" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/main) -"ZO" = ( -/obj/machinery/door/airlock/vault{ - id_tag = "syndie_lavaland_vault" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron/textured_half, -/area/ruin/syndicate_lava_base/main) -"ZS" = ( -/obj/machinery/light/directional/north, -/obj/machinery/deepfryer, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/syndicate_lava_base/bar) -"ZW" = ( -/obj/structure/lattice/catwalk, -/turf/open/lava/smooth/lava_land_surface, -/area/ruin/syndicate_lava_base/cargo) -"ZX" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/syndicate_lava_base/medbay) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ag -ag -ag -ag -ag -ag -ag -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ag -ag -ag -ag -ag -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -OW -OW -OW -OW -OW -OW -OW -OW -kS -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ag -ag -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -ag -aa -aa -aa -ag -ag -ag -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -OW -OW -HA -HA -HA -OW -OW -Yk -Yu -qU -Tw -qz -cr -no -OW -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ag -ag -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -ag -ag -ag -ag -ag -ag -ag -ab -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -OW -FX -IF -dG -sb -RJ -OW -YF -XV -WY -Ml -qT -WG -Dt -OW -UG -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ag -ag -aa -"} -(8,1,1) = {" -aa -aa -ag -ag -ab -ag -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -HA -IH -IH -IH -It -dZ -OW -YW -fv -Kh -ji -ch -Jt -Ow -OW -UG -UG -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ag -ag -aa -aa -"} -(9,1,1) = {" -aa -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -HA -XQ -Ru -ME -RY -Pb -OW -Zd -Ku -HZ -Ml -qT -WG -Yn -OW -AK -UG -UG -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ag -ag -aa -"} -(10,1,1) = {" -aa -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -OW -Ho -qX -Jb -pk -it -UX -Zd -Ku -Fx -ji -eh -Jt -Ow -OW -Yf -AK -UG -UG -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ag -ag -aa -"} -(11,1,1) = {" -aa -ag -ag -ab -ab -Va -Zz -Zz -Zz -Zz -Zz -Zz -Zz -Zz -Zz -Zz -Zz -KQ -ab -ab -ab -ab -ab -ab -ab -HA -Ru -Ru -Df -RY -wY -OW -Zn -Do -ex -Ml -qT -WG -Yn -Vb -Vb -Vb -Vb -Vb -SE -SE -Vb -Vb -Vb -Vb -KQ -ab -ab -ab -ab -ag -ag -"} -(12,1,1) = {" -aa -ag -ag -ab -ab -Zz -as -bm -mb -Zz -Fa -Co -QZ -vM -QZ -Co -Fa -Zz -ab -ab -ab -ab -ab -ab -ab -HA -Kq -Kq -KL -cv -zj -OW -Ky -BS -AW -UB -KY -KY -et -Vb -na -IT -OR -wb -Fz -Xs -xs -kg -IT -Wa -Vb -ab -ab -ab -ab -ag -ag -"} -(13,1,1) = {" -aa -ag -ag -ab -ab -Zz -aw -br -br -Zz -Ut -Jd -FA -Vm -iw -Jd -kC -Zz -ab -ab -ab -ab -ab -ab -ab -OW -Mv -Hz -LL -CU -uE -OW -Fq -oA -bG -XD -aQ -aQ -AJ -Vb -nq -YV -Kp -Vb -Fz -JS -Vb -Kp -YV -nq -Vb -ab -ab -ab -ab -ag -ag -"} -(14,1,1) = {" -aa -ag -ag -ab -ab -Zz -cP -zS -Gc -Zz -JN -gs -wJ -hq -LH -gs -JN -Zz -ab -ab -ab -ab -ab -qc -qt -OW -OW -Kx -zw -Kx -OW -OW -OW -OW -OW -OW -OW -OW -OW -Vb -Vb -Vb -Vb -Vb -yb -JS -Vb -Vb -Vb -Vb -Vb -ab -ab -ab -ab -ag -ag -"} -(15,1,1) = {" -ag -ag -ab -ab -ab -Zz -uy -Zz -Zz -Zz -Zz -ON -Zz -Zz -Zz -YE -Zz -Zz -ab -ab -ab -ab -ab -wB -AC -BH -HA -Mv -LX -Mv -JT -Vd -PZ -CK -Vb -wR -xm -Em -eK -Vb -nq -RN -Vb -wS -CB -JS -HN -Vb -oE -nq -Vb -ab -ab -ab -ab -ag -ag -"} -(16,1,1) = {" -ag -ag -ab -ab -ab -af -cP -bF -ey -Zz -nt -Ac -xN -hH -nt -Ac -CR -Zz -ab -ab -ab -ab -ab -wB -AC -BJ -HA -Mv -Mo -Mv -JT -RV -PZ -PZ -wL -VM -VM -Xp -Sp -Vb -Yb -IT -Vb -sj -CB -JS -de -Vb -Ps -Lb -Vb -ab -ab -ab -ab -ag -ag -"} -(17,1,1) = {" -ag -ag -ab -ab -ab -af -aG -XR -cP -dA -Ac -Ac -Ac -Ac -Ac -Ac -lS -Zz -ab -ab -ab -ab -ab -wB -AC -BQ -HA -Mv -Mo -Mv -JT -FJ -PZ -jp -Vb -fF -df -Xv -Ss -Vb -vH -qE -Vb -bW -CB -JS -Vb -Vb -HF -Re -Vb -ab -ab -ab -ab -ag -ag -"} -(18,1,1) = {" -ag -ag -ab -ab -ab -af -aR -cP -eA -Zz -kV -Ac -gR -hN -iA -iO -lX -Zz -ab -ab -ab -ab -ab -wB -AC -BZ -HA -Mv -MK -Mv -JT -PZ -jx -Up -Vb -Vb -Vb -Vb -IO -Vb -Vb -XI -Vb -wx -CB -JS -Qa -Vb -Ae -Vb -Vb -ab -ab -ab -ab -ag -ag -"} -(19,1,1) = {" -ag -ag -ab -ab -ab -Zz -Zz -bz -Zz -Zz -Zz -pq -Zz -Zz -Zz -Zz -Zz -Zz -ab -ab -ab -ab -ab -Wx -Wx -Ci -OW -Kx -zw -Kx -OW -Xx -Wx -Wx -Vb -Uq -oH -sx -yy -vj -Xs -Xs -JS -JS -CB -JS -JS -jP -Xs -Ns -SE -ab -ab -ab -ag -ag -aa -"} -(20,1,1) = {" -aa -ag -ag -ab -ab -Zz -bc -bL -cn -Zz -Sn -qa -gS -vX -iH -bY -Zz -Zz -KK -KK -KK -KK -Zz -JB -Zq -Zq -Zq -Zq -MO -Zq -Tl -Zq -ZH -JB -Wx -dF -fO -fO -zP -Vb -so -da -pD -UI -UI -Ub -Ub -LN -Rx -fN -SE -ab -ab -ab -ag -ag -aa -"} -(21,1,1) = {" -aa -ag -ag -ab -ab -Zz -bl -bV -cC -Zz -qb -qa -vZ -vZ -HV -Qw -Ye -Zz -ZW -ZW -ZW -ZW -Zz -Wm -lA -Ao -Ao -nZ -QY -WN -ZA -ZA -ZA -An -Wx -an -LS -Vf -Kd -Vb -lq -YJ -JS -JS -JS -JS -JS -zl -zu -JS -SE -ab -ab -ag -ag -aa -aa -"} -(22,1,1) = {" -aa -ag -ag -ab -ab -Zz -Zz -Zz -Zz -Zz -eL -qa -vZ -hQ -vZ -Qw -mp -Zz -ni -ib -ni -nA -Iv -Zq -nh -Zq -HI -VI -Nc -Zq -Zq -Zq -ZA -Zq -Wx -UP -MU -Lg -ik -Vb -wc -EZ -oi -SC -SC -SC -Vb -GB -Nh -lf -Vb -ab -ab -ab -ag -ag -aa -"} -(23,1,1) = {" -aa -ag -ag -ab -ab -ab -ab -ab -Sy -Zz -fj -qa -gU -wi -Ug -Qw -Rq -Zz -OC -OC -OC -OC -Zz -Za -nh -Zq -Wx -Wx -Wx -Wx -Wx -mn -yG -Zo -Tx -Tx -Tx -Tx -Tx -Tx -To -QQ -wo -Cd -Pd -YN -Vi -Ko -Ji -DQ -Tx -ab -ab -ab -ab -ag -ag -"} -(24,1,1) = {" -aa -aa -ag -ag -ab -ab -ab -ab -Sy -Zz -fq -Oz -vZ -wq -HV -Qw -Sr -JX -Sr -Sr -Sr -Sr -SU -Zq -fX -Zq -Wx -HL -Vh -FC -Wx -qj -WN -Zq -qs -hR -WW -WW -WW -qs -WW -Cg -tS -XW -rQ -un -bS -WW -RK -zG -Tx -ab -ab -ab -ab -ag -ag -"} -(25,1,1) = {" -aa -aa -ag -ag -ab -ab -ab -Sy -dl -Zz -fH -gu -rf -wy -Aw -jh -Ro -mG -Qp -Zy -Zy -oW -mG -xP -Fi -An -Wx -if -Od -PM -ZO -Zq -xY -Ft -DU -aM -MJ -MJ -yA -DU -dd -gf -wo -xr -nT -Dk -DJ -WW -TV -vK -Tx -ab -ab -ab -ab -ag -ag -"} -(26,1,1) = {" -aa -aa -aa -ag -ag -ab -ab -NT -Zz -Zz -sK -rh -rh -wC -rh -jB -Tf -JX -Sr -Sr -Sr -Sr -SU -Zq -fX -gd -Wx -KS -ct -PS -Wx -BW -fX -Zq -qs -WW -WW -WW -lM -qs -WW -Cg -zB -oB -NX -CP -Ai -WW -vt -BP -Tx -ab -ab -ab -ab -ag -ag -"} -(27,1,1) = {" -aa -aa -aa -ag -ag -ab -ab -ca -dn -dN -Sr -Sr -Sr -wW -Sr -Sr -mD -Zz -OC -OC -OC -OC -Zz -Zo -OS -Zo -Wx -Wx -Wx -Wx -Wx -sd -nh -jN -Tx -Tx -Rt -Tx -Tx -Tx -vJ -QQ -wo -Oy -Dk -Dk -QN -ej -Jp -ae -Tx -ab -ab -ab -ab -ag -ag -"} -(28,1,1) = {" -aa -aa -aa -ag -ag -ab -ab -NT -Zz -Zz -gb -gv -tv -xk -Sr -Sr -Fc -Zz -rW -dn -dn -jR -sn -Zq -nh -Zq -Zq -Zq -mK -Zq -nd -Zq -nh -Zq -Tx -Hf -IC -fC -zO -Tx -JC -Hs -CN -Tx -CY -Vo -Tx -Tx -gD -Tx -Tx -ab -ab -ab -ab -ag -ag -"} -(29,1,1) = {" -aa -aa -ag -ag -ab -ab -ab -ab -ab -Zz -vi -xT -vi -xT -vi -vi -Fk -Zz -ub -dn -yw -NS -Zz -Ui -cD -Ao -Ao -nZ -mz -nZ -Ao -Ao -AV -oY -Tx -fx -IC -IC -tx -Tx -WW -QQ -ml -Tx -ZS -Pj -lC -lo -wt -xJ -Tx -Tx -ab -ab -ag -ag -aa -"} -(30,1,1) = {" -aa -aa -ag -ag -ab -ab -ab -ab -ab -Zz -vZ -gB -tI -yh -vZ -jS -Zz -Zz -Qg -Qg -Qg -EP -Zz -JB -AH -Zq -Ih -Zq -OM -Zq -Zq -Zq -Zq -JB -Tx -yV -rj -IC -tt -Tx -WW -Cg -WW -Tx -ks -RZ -Fm -yp -ci -HQ -zd -Tx -ab -ab -ag -ag -aa -"} -(31,1,1) = {" -aa -aa -ag -ag -ab -ab -ab -ab -ab -OC -gj -gF -Zz -zz -gj -OC -Zz -ab -ab -ab -ab -ab -ab -Wx -Wx -CM -ZX -HM -Lw -HM -ZX -Jg -ZX -ZX -Tx -Tx -Tx -Tx -Tx -Tx -WW -Cg -WW -Tx -WB -RZ -id -uJ -ci -HQ -sf -QV -ab -ab -ab -ag -ag -"} -(32,1,1) = {" -aa -ag -ag -ab -ab -ab -ab -ab -ab -OC -dn -gQ -hb -yr -dn -OC -ab -ab -ab -ab -ab -ab -ab -xR -Vj -DZ -VO -Wq -Pf -Wq -WM -Wq -NO -HR -Tx -QR -wf -wf -tP -Tx -WW -Cg -WW -Tx -eI -RZ -ci -Th -ci -xp -zr -Tx -ab -ab -ab -ag -ag -"} -(33,1,1) = {" -aa -ag -ag -ab -ab -ab -ab -ab -ab -OC -AG -gF -Zz -zz -AG -OC -ab -ab -ab -ab -ab -ab -ab -xR -Vj -FE -VO -Wq -jK -Wq -WM -Wq -Wq -AS -Tx -Bp -vR -JU -Yo -Tx -cs -QQ -ky -Tx -XX -eb -nD -nD -xp -rm -ij -Tx -ab -ab -ab -ag -ag -"} -(34,1,1) = {" -aa -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -xR -Vj -YD -VO -Wq -jK -Wq -WM -Wq -CJ -CW -Tx -oK -tJ -UZ -ne -XO -Cv -JV -ml -Tx -Tx -Qc -lR -RT -MX -Tx -Tx -Tx -ab -ab -ab -ag -ag -"} -(35,1,1) = {" -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -xR -Vj -ZC -VO -Wq -Rs -Wq -WM -lv -EA -Xn -Tx -Tx -Tx -Tx -Tx -Tx -To -QQ -WW -KA -Oi -PG -Dc -tD -Gs -oT -oT -Tx -ab -ab -ab -ag -ag -"} -(36,1,1) = {" -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -rq -rq -rq -rq -ZX -AT -ZX -ZX -QJ -Lw -QJ -ZX -ZX -ZX -ZX -ZX -Js -Js -Js -Js -Tx -Jq -QQ -WW -YO -Ls -ow -sL -yk -CD -aS -MY -Tx -ab -ab -ag -ag -aa -"} -(37,1,1) = {" -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -rq -HT -py -oM -zo -Yp -ZX -Zc -KX -Pr -zy -gg -ZX -Li -zv -ZX -pI -pR -je -Jm -Tx -WW -Cg -WW -YO -pz -Nl -Bq -rb -oT -vQ -IL -Tx -ab -ab -ab -ag -ag -"} -(38,1,1) = {" -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -rq -Xl -is -dy -BT -Bo -ZX -fs -KX -OX -Qm -Wq -ls -OK -yE -ZX -ZX -co -aj -Zr -Tx -WW -Cg -WW -YO -pz -sP -oX -rb -oT -vQ -vQ -Tx -ab -ab -ag -ag -aa -"} -(39,1,1) = {" -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -zt -bu -PC -Xd -BT -Yp -ZX -uX -KX -cB -Qm -Wq -Le -tW -zc -eg -ZX -aT -pR -Jm -Tx -WW -uD -Nf -cc -xw -wD -wD -CT -sI -aS -aS -Tx -ab -ab -ab -ag -ag -"} -(40,1,1) = {" -aa -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -kD -ZX -ZX -ZX -zE -Tb -ZX -jj -KX -IV -Qm -tH -Zg -Bn -Ar -pE -ZX -BA -Ay -ob -bI -Gb -ce -Tq -YO -pt -Ir -tT -cX -oT -iC -oT -Tx -ab -ab -ab -ag -ag -"} -(41,1,1) = {" -aa -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -kD -xo -xL -Yv -NH -Yp -ZX -ZX -Ld -ZX -Qx -ZX -ZX -ZX -Vw -ZX -ZX -ZX -aX -ZX -Lq -Lq -ru -Lq -Lq -Lq -Lq -Lq -Lq -Lq -Lq -Lq -Lq -ab -ab -ab -ag -ag -"} -(42,1,1) = {" -aa -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -kD -uP -rV -gO -NH -Yp -ZX -jn -Ln -MN -QW -ZX -XJ -Qk -mk -ZX -Oo -Oo -Oo -Oo -Lq -eT -Bw -rC -kw -GS -VL -ZG -hY -mN -sY -Lq -ab -ab -ab -ab -ag -ag -"} -(43,1,1) = {" -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -kD -mV -md -wU -WU -NH -FT -NH -NH -WQ -WQ -TY -WQ -WQ -WQ -Nd -yU -yU -yU -yU -KD -CL -zJ -LU -La -UO -pK -gT -cH -KG -HX -Lq -ab -ab -ab -ab -ag -ag -"} -(44,1,1) = {" -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -kD -ok -jF -sD -Xf -BN -ZX -IA -LC -Yp -pY -VY -NC -zM -Mn -ZX -Wk -Wk -Wk -Wk -Lq -Ig -oP -DP -JR -UO -pK -De -sl -SI -GZ -Lq -ab -ab -ab -ag -ag -aa -"} -(45,1,1) = {" -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -Sy -kD -RP -Vt -Vt -Xf -Yz -ZX -CZ -to -Yp -Yp -nX -xM -Wq -Sh -ZX -ab -ab -ab -ab -Lq -fc -Dp -rv -La -UO -pK -yd -ve -ta -zF -Lq -ab -ab -ab -ag -ag -aa -"} -(46,1,1) = {" -aa -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wn -TJ -Sk -pW -Wd -Xo -YY -ZX -Qt -Vv -rE -qL -cp -kq -Ct -Ha -ZX -ab -ab -ab -ab -Lq -Ak -Ak -bv -MR -hl -FG -Lq -Lq -Lq -Lq -QS -ab -ab -ag -ag -aa -aa -"} -(47,1,1) = {" -aa -aa -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -Sy -kL -ZX -ZX -ZX -ZX -ZX -ZX -ZX -VO -VO -ZX -ZX -ZX -ZX -ZX -QS -ab -ab -ab -ab -iG -Lq -Lq -Lq -Lq -Lq -eq -Lq -ab -ab -ab -ab -ab -ab -ab -ag -ag -aa -"} -(48,1,1) = {" -aa -aa -aa -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -lF -ab -ab -ab -ab -ab -ab -ab -ag -ag -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ag -ag -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -ag -ag -ag -ab -ab -ab -ab -ab -ag -ag -ag -ag -ag -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ag -ag -ag -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -ag -ag -ag -aa -aa -aa -aa -aa -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -aa -aa -aa -aa -aa -aa -"} diff --git a/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm b/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm index b21e7f4f77032a..bc383941257f80 100644 --- a/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm +++ b/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm @@ -1,4 +1,9 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/teal, +/turf/template_noop, +/area/ruin/space) "aA" = ( /obj/effect/turf_decal/trimline/dark_green/filled/line{ dir = 4 @@ -263,6 +268,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/grimy, /area/ruin/space/has_grav/allamericandiner) +"nv" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/space) "ny" = ( /obj/machinery/oven, /obj/effect/decal/cleanable/dirt, @@ -307,14 +316,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/kitchen, /area/ruin/space/has_grav/allamericandiner) -"ow" = ( -/obj/machinery/light/dim/directional/south, -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/obj/structure/chair/sofa/left/maroon{ - dir = 8 - }, -/turf/open/floor/iron/kitchen, -/area/ruin/space/has_grav/allamericandiner) "oN" = ( /turf/closed/mineral/random/low_chance, /area/ruin/space) @@ -330,14 +331,6 @@ /obj/structure/urinal/directional/north, /turf/open/floor/iron/freezer, /area/ruin/space/has_grav/allamericandiner) -"qp" = ( -/obj/machinery/chem_dispenser/drinks{ - dir = 8; - pixel_x = 17; - pixel_y = 0 - }, -/turf/open/floor/iron/kitchen/small, -/area/ruin/space/has_grav/allamericandiner) "qB" = ( /obj/structure/closet/crate/trashcart/filled, /turf/open/misc/asteroid/airless, @@ -374,6 +367,13 @@ /obj/structure/plasticflaps, /turf/open/floor/plating, /area/ruin/space/has_grav/allamericandiner) +"rm" = ( +/obj/structure/table/reinforced, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/box/cups, +/turf/open/floor/iron/kitchen/small, +/area/ruin/space/has_grav/allamericandiner) "rG" = ( /obj/structure/chair/stool/bar/directional/north, /obj/effect/decal/cleanable/dirt, @@ -466,12 +466,6 @@ }, /turf/open/floor/iron, /area/ruin/space/has_grav/allamericandiner) -"vE" = ( -/obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/kitchen/small, -/area/ruin/space/has_grav/allamericandiner) "wC" = ( /obj/structure/closet{ desc = "Why leave the chairs in a locker?"; @@ -585,6 +579,15 @@ /obj/structure/window/reinforced/tinted/spawner/directional/east, /turf/open/floor/iron/kitchen, /area/ruin/space/has_grav/allamericandiner) +"AS" = ( +/obj/structure/table/reinforced, +/obj/machinery/light/dim/directional/east, +/obj/machinery/chem_dispenser/drinks/fullupgrade{ + dir = 1 + }, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/iron/kitchen/small, +/area/ruin/space/has_grav/allamericandiner) "Bg" = ( /obj/machinery/light/dim/directional/west, /obj/structure/chair/sofa/left/maroon{ @@ -823,21 +826,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/kitchen/small, /area/ruin/space/has_grav/allamericandiner) -"IK" = ( -/obj/structure/lattice/catwalk, -/obj/structure/marker_beacon/teal, -/turf/template_noop, -/area/ruin/space) "IY" = ( /obj/structure/table/wood, /obj/item/paper_bin, /obj/item/pen, /turf/open/floor/iron, /area/ruin/space/has_grav/allamericandiner) -"Jn" = ( -/obj/structure/lattice, -/turf/template_noop, -/area/ruin/space) "Jw" = ( /obj/machinery/griddle, /turf/open/floor/iron/kitchen/small, @@ -912,9 +906,6 @@ /obj/structure/sink/kitchen/directional/west, /turf/open/floor/iron/kitchen/small, /area/ruin/space/has_grav/allamericandiner) -"Mc" = ( -/turf/template_noop, -/area/template_noop) "Mq" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -973,6 +964,14 @@ /obj/machinery/grill, /turf/open/floor/iron/kitchen/small, /area/ruin/space/has_grav/allamericandiner) +"Ot" = ( +/obj/machinery/light/dim/directional/south, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/structure/chair/sofa/left/maroon{ + dir = 8 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/allamericandiner) "OE" = ( /obj/effect/turf_decal/trimline/dark_green/filled/line, /obj/effect/decal/cleanable/dirt, @@ -1055,6 +1054,9 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/freezer, /area/ruin/space/has_grav/allamericandiner) +"SU" = ( +/turf/template_noop, +/area/template_noop) "SZ" = ( /obj/effect/decal/cleanable/dirt, /obj/item/clothing/under/misc/patriotsuit, @@ -1128,11 +1130,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/grimy, /area/ruin/space/has_grav/allamericandiner) -"Um" = ( -/obj/structure/lattice/catwalk, -/obj/structure/marker_beacon/fuchsia, -/turf/template_noop, -/area/ruin/space) "Uv" = ( /obj/structure/toilet{ dir = 8 @@ -1162,12 +1159,6 @@ /obj/structure/sink/directional/south, /turf/open/floor/iron/freezer, /area/ruin/space/has_grav/allamericandiner) -"Vq" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/cups, -/obj/machinery/light/dim/directional/east, -/turf/open/floor/iron/kitchen/small, -/area/ruin/space/has_grav/allamericandiner) "Vy" = ( /obj/effect/turf_decal/trimline/dark_green/filled/line{ dir = 5 @@ -1226,6 +1217,11 @@ /obj/structure/window/reinforced/tinted/spawner/directional/east, /turf/open/floor/iron, /area/ruin/space/has_grav/allamericandiner) +"Yd" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/fuchsia, +/turf/template_noop, +/area/ruin/space) "Yo" = ( /obj/structure/table/wood, /obj/item/folder{ @@ -1299,89 +1295,89 @@ /area/ruin/space/has_grav/allamericandiner) (1,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -oN -oN -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +oN +oN +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (2,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -oN -oN -oN -oN -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +oN +oN +oN +oN +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (3,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU oN oN oN @@ -1396,28 +1392,28 @@ ob EK EK EK -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (4,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU oN oN oN @@ -1433,27 +1429,27 @@ vp Ph Pn EK -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (5,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU oN oN oN @@ -1470,27 +1466,27 @@ vp fL fL ob -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (6,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU oN oN oN @@ -1507,26 +1503,26 @@ PW Zk ET EK -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (7,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU oN oN oN @@ -1544,26 +1540,26 @@ PW JD iS EK -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (8,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU oN oN oN @@ -1581,26 +1577,26 @@ PW fL fL ob -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (9,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU oN oN oN @@ -1616,28 +1612,28 @@ Xw FB PW Ap -ow +Ot EK EK EK -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (10,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU oN oN oN @@ -1659,21 +1655,21 @@ MQ EK EK EK -Jn -Jn -Jn -Jn -Jn -IK -Mc -Mc +nv +nv +nv +nv +nv +aa +SU +SU "} (11,1,1) = {" -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU oN oN oN @@ -1696,21 +1692,21 @@ Ud Tv Mt vu -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU "} (12,1,1) = {" -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU oN oN EK @@ -1733,20 +1729,20 @@ DU Tv Mt vu -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU "} (13,1,1) = {" -Mc -Mc -Mc -Mc +SU +SU +SU +SU oN oN oN @@ -1770,20 +1766,20 @@ eR EK EK EK -Jn -Jn -Jn -Jn -Jn -Um -Mc -Mc +nv +nv +nv +nv +nv +Yd +SU +SU "} (14,1,1) = {" -Mc -Mc -Mc -Mc +SU +SU +SU +SU oN oN oN @@ -1805,22 +1801,22 @@ hU EK EK EK -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (15,1,1) = {" -Mc -Mc -Mc -Mc +SU +SU +SU +SU oN oN oN @@ -1840,24 +1836,24 @@ PW yl yl ob -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (16,1,1) = {" -Mc -Mc -Mc -Mc +SU +SU +SU +SU oN oN oN @@ -1877,24 +1873,24 @@ PW Zk ET EK -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (17,1,1) = {" -Mc -Mc -Mc -Mc +SU +SU +SU +SU oN oN oN @@ -1914,24 +1910,24 @@ rd gl GU EK -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (18,1,1) = {" -Mc -Mc -Mc -Mc +SU +SU +SU +SU oN oN oN @@ -1945,30 +1941,30 @@ Fr Fr lF Fr -vE +rm Ka PW fL fL ob -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (19,1,1) = {" -Mc -Mc -Mc -Mc +SU +SU +SU +SU oN oN oN @@ -1981,30 +1977,30 @@ EK ej jZ LR -qp -Vq -FB +jZ +AS +rd rd lI yQ EK -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (20,1,1) = {" -Mc -Mc -Mc +SU +SU +SU oN oN oN @@ -2030,18 +2026,18 @@ EK oN Bn Bn -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU "} (21,1,1) = {" -Mc -Mc -Mc +SU +SU +SU oN oN oN @@ -2069,16 +2065,16 @@ Bn Bn Bn Bn -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU "} (22,1,1) = {" -Mc -Mc -Mc +SU +SU +SU oN oN oN @@ -2107,15 +2103,15 @@ gU Ie Bn Bn -Mc -Mc -Mc -Mc +SU +SU +SU +SU "} (23,1,1) = {" -Mc -Mc -Mc +SU +SU +SU oN oN oN @@ -2145,15 +2141,15 @@ gU Bn Bn Bn -Mc -Mc -Mc +SU +SU +SU "} (24,1,1) = {" -Mc -Mc -Mc -Mc +SU +SU +SU +SU oN oN EK @@ -2182,15 +2178,15 @@ Bn Bn Bn Bn -Mc -Mc -Mc +SU +SU +SU "} (25,1,1) = {" -Mc -Mc -Mc -Mc +SU +SU +SU +SU oN oN EK @@ -2220,15 +2216,15 @@ Bn Bn Bn Bn -Mc -Mc +SU +SU "} (26,1,1) = {" -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU oN Bn Bn @@ -2257,15 +2253,15 @@ Bn Bn Bn Bn -Mc -Mc +SU +SU "} (27,1,1) = {" -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU Bn Bn Bn @@ -2294,15 +2290,15 @@ oN Bn Bn Bn -Mc -Mc +SU +SU "} (28,1,1) = {" -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU Bn Bn WT @@ -2331,15 +2327,15 @@ oN oN Bn Bn -Mc -Mc +SU +SU "} (29,1,1) = {" -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU Bn Bn Ty @@ -2368,16 +2364,16 @@ oN oN oN oN -Mc -Mc +SU +SU "} (30,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU Bn Bn Bn @@ -2404,18 +2400,18 @@ oN oN oN oN -Mc -Mc -Mc +SU +SU +SU "} (31,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU Bn Bn Bn @@ -2440,20 +2436,20 @@ oN oN oN oN -Mc -Mc -Mc -Mc +SU +SU +SU +SU "} (32,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU Bn oN oN @@ -2476,26 +2472,26 @@ oN oN oN oN -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU "} (33,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU oN oN oN @@ -2512,30 +2508,30 @@ oN oN oN oN -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU "} (34,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU oN oN oN @@ -2547,49 +2543,49 @@ oN oN oN oN -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU "} (35,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -oN -oN -oN -oN -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +oN +oN +oN +oN +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} diff --git a/_maps/RandomRuins/SpaceRuins/anomaly_research.dmm b/_maps/RandomRuins/SpaceRuins/anomaly_research.dmm index e3015469bcea4a..831e0247541938 100644 --- a/_maps/RandomRuins/SpaceRuins/anomaly_research.dmm +++ b/_maps/RandomRuins/SpaceRuins/anomaly_research.dmm @@ -66,7 +66,6 @@ /area/misc/anomaly_research) "dj" = ( /obj/structure/window/spawner/directional/north, -/obj/structure/window/spawner/directional/north, /obj/structure/window/spawner/directional/east, /obj/structure/flora/bush/flowers_br/style_random, /turf/open/floor/grass, @@ -1516,7 +1515,6 @@ /area/misc/anomaly_research) "Ox" = ( /obj/structure/window/spawner/directional/north, -/obj/structure/window/spawner/directional/north, /obj/structure/flora/bush/flowers_br/style_random, /obj/machinery/light/broken/directional/south, /turf/open/floor/grass, diff --git a/_maps/RandomRuins/SpaceRuins/clericden.dmm b/_maps/RandomRuins/SpaceRuins/clericden.dmm index ed9b63c7947a2a..c6e6bebddb0be8 100644 --- a/_maps/RandomRuins/SpaceRuins/clericden.dmm +++ b/_maps/RandomRuins/SpaceRuins/clericden.dmm @@ -131,7 +131,7 @@ /area/ruin/space) "E" = ( /obj/effect/decal/cleanable/blood/tracks, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /turf/open/floor/carpet/airless, /area/ruin/space) "F" = ( @@ -171,7 +171,7 @@ /turf/open/floor/plating/airless, /area/ruin/space) "N" = ( -/mob/living/simple_animal/hostile/construct/proteon, +/mob/living/basic/construct/proteon, /turf/open/misc/asteroid/airless, /area/ruin/space) "O" = ( diff --git a/_maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm b/_maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm index 1f616ced8d279f..f8ec15738e1dc2 100644 --- a/_maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm +++ b/_maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm @@ -824,7 +824,7 @@ /turf/open/floor/carpet, /area/ruin/space/has_grav/derelictsulaco) "BQ" = ( -/mob/living/simple_animal/pet/cat{ +/mob/living/basic/pet/cat{ name = "Jonesy"; desc = "Old and grumpy cat- wait, how the hell is he still alive?!" }, diff --git a/_maps/RandomRuins/SpaceRuins/forgottenship.dmm b/_maps/RandomRuins/SpaceRuins/forgottenship.dmm index 4bcfbd0805ea21..fee5e9a6b3deff 100644 --- a/_maps/RandomRuins/SpaceRuins/forgottenship.dmm +++ b/_maps/RandomRuins/SpaceRuins/forgottenship.dmm @@ -10,7 +10,7 @@ "ac" = ( /obj/machinery/porta_turret/syndicate/energy{ dir = 4; - name = "Syndicate Ship Turret"; + name = "Symphionia Ship Turret"; on = 0; shot_delay = 10 }, @@ -23,7 +23,7 @@ "ae" = ( /obj/structure/fans/tiny, /obj/machinery/door/airlock/external/ruin{ - name = "Syndicate Ship Airlock" + name = "Symphionia Ship Airlock" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/mineral/plastitanium, @@ -150,7 +150,7 @@ /area/ruin/space/has_grav/syndicate_forgotten_ship) "aQ" = ( /obj/machinery/door/airlock/grunge{ - name = "Syndicate Ship Airlock" + name = "Symphionia Ship Airlock" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/iron/dark, @@ -177,7 +177,7 @@ /area/ruin/space/has_grav/syndicate_forgotten_ship) "aU" = ( /obj/machinery/door/airlock/external/ruin{ - name = "Syndicate Ship Airlock" + name = "Symphionia Ship Airlock" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/mineral/plastitanium, @@ -223,7 +223,7 @@ "be" = ( /obj/structure/cable, /obj/machinery/door/airlock/external/ruin{ - name = "Syndicate Ship Airlock" + name = "Symphionia Ship Airlock" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/mineral/plastitanium, @@ -271,7 +271,7 @@ /area/ruin/space/has_grav/syndicate_forgotten_ship) "bm" = ( /obj/machinery/mineral/ore_redemption{ - name = "Syndicate ore redemption machine"; + name = "Symphionia ore redemption machine"; ore_multiplier = 4; req_access = list("syndicate") }, @@ -356,7 +356,7 @@ /area/ruin/space/has_grav/syndicate_forgotten_ship) "by" = ( /obj/machinery/door/airlock/grunge{ - name = "Syndicate Ship Airlock" + name = "Symphionia Ship Airlock" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/mineral/plastitanium, @@ -398,7 +398,7 @@ /area/ruin/space/has_grav/syndicate_forgotten_ship) "bF" = ( /obj/machinery/door/airlock/external/ruin{ - name = "Syndicate Ship Airlock" + name = "Symphionia Ship Airlock" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /obj/structure/cable, @@ -432,7 +432,7 @@ /obj/structure/cable, /obj/structure/fans/tiny, /obj/machinery/door/airlock/external/ruin{ - name = "Syndicate Ship Airlock" + name = "Symphionia Ship Airlock" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/mineral/plastitanium, @@ -567,7 +567,7 @@ "ci" = ( /obj/machinery/porta_turret/syndicate/energy{ dir = 4; - name = "Syndicate Ship Turret"; + name = "Symphionia Ship Turret"; on = 0; shot_delay = 10 }, @@ -583,7 +583,7 @@ /area/ruin/space/has_grav/syndicate_forgotten_cargopod) "cm" = ( /obj/machinery/door/airlock/grunge{ - name = "Syndicate Ship Airlock" + name = "Symphionia Ship Airlock" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/mineral/plastitanium/red, @@ -596,7 +596,7 @@ /obj/structure/filingcabinet, /obj/machinery/door/window{ dir = 8; - name = "Syndicate Interior Door"; + name = "Symphionia Interior Door"; req_access = list("syndicate") }, /turf/open/floor/mineral/plastitanium/red, @@ -708,7 +708,7 @@ /area/ruin/space/has_grav/syndicate_forgotten_ship) "cG" = ( /obj/machinery/door/airlock/grunge{ - name = "Syndicate Ship Airlock" + name = "Symphionia Ship Airlock" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /obj/structure/cable, @@ -740,7 +740,7 @@ /area/ruin/space/has_grav/syndicate_forgotten_ship) "cK" = ( /obj/machinery/door/airlock/grunge{ - name = "Syndicate Ship Airlock" + name = "Symphionia Ship Airlock" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /obj/structure/cable, @@ -847,7 +847,7 @@ /area/ruin/space/has_grav/syndicate_forgotten_ship) "cZ" = ( /obj/machinery/door/airlock/grunge{ - name = "Syndicate Ship Airlock" + name = "Symphionia Ship Airlock" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/iron/dark/side{ @@ -941,7 +941,7 @@ /obj/structure/fans/tiny, /obj/machinery/door/airlock/grunge{ desc = "Vault airlock preventing air from going out."; - name = "Syndicate Vault Airlock" + name = "Symphionia Vault Airlock" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/pod/dark, @@ -957,7 +957,7 @@ /area/ruin/space/has_grav/syndicate_forgotten_ship) "dn" = ( /obj/machinery/door/airlock/grunge{ - name = "Syndicate Ship Airlock" + name = "Symphionia Ship Airlock" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/plating, diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm new file mode 100644 index 00000000000000..8aa85a7e1534dc --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm @@ -0,0 +1,1501 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aF" = ( +/obj/item/trash/can/food/envirochow{ + pixel_x = 2 + }, +/obj/item/trash/can/food/envirochow{ + pixel_x = -8; + pixel_y = -6 + }, +/obj/item/trash/can/food/envirochow{ + pixel_y = -12 + }, +/obj/effect/decal/cleanable/insectguts, +/mob/living/basic/cockroach, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"aP" = ( +/obj/item/kitchen/fork{ + pixel_x = -10; + pixel_y = 0 + }, +/obj/effect/decal/cleanable/ants, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"bj" = ( +/obj/structure/closet/crate/trashcart/filled, +/obj/item/food/badrecipe/moldy/bacteria, +/obj/item/food/deadmouse, +/obj/item/sticker/syndicate/larva, +/mob/living/basic/mouse/rat, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"bs" = ( +/obj/structure/kitchenspike_frame, +/obj/item/paper/crumpled, +/obj/item/restraints/handcuffs/cable/zipties/used, +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"bx" = ( +/obj/effect/decal/cleanable/garbage, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"bF" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"ew" = ( +/obj/item/trash/can/food/peaches/maint, +/obj/item/food/breadslice/moldy/bacteria, +/obj/effect/decal/cleanable/food/egg_smudge, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"fb" = ( +/obj/item/trash/boritos/green, +/obj/effect/decal/cleanable/plastic, +/obj/item/storage/bag/trash, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"fk" = ( +/obj/item/kirbyplants/fern, +/obj/item/food/deadmouse, +/obj/effect/spawner/random/entertainment/money_small, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"fx" = ( +/obj/item/food/badrecipe/moldy/bacteria{ + pixel_y = -10 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"fI" = ( +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"fP" = ( +/obj/item/match, +/obj/item/trash/popcorn, +/obj/item/trash/spacers_sidekick, +/obj/item/food/pizzaslice/moldy/bacteria, +/obj/effect/decal/cleanable/plastic, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"fR" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/item/kitchen/spoon/soup_ladle{ + pixel_x = -5; + pixel_y = 7 + }, +/obj/item/food/badrecipe/moldy{ + pixel_x = 3; + pixel_y = 0 + }, +/obj/item/food/badrecipe/moldy{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/food/badrecipe/moldy{ + pixel_y = 3 + }, +/obj/item/food/badrecipe/moldy, +/obj/item/food/grown/mushroom/odious_puffball{ + pixel_y = 3 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"fV" = ( +/obj/item/food/butter{ + pixel_x = 10; + pixel_y = 4 + }, +/obj/item/food/butter{ + pixel_x = 2; + pixel_y = 4 + }, +/obj/structure/closet/crate/freezer, +/obj/item/food/butter{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/reagent_containers/condiment/flour{ + pixel_x = -6; + pixel_y = -6 + }, +/obj/item/reagent_containers/condiment/flour{ + pixel_x = 6; + pixel_y = -6 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"gb" = ( +/obj/structure/closet/crate/trashcart, +/obj/item/plate_shard, +/obj/item/popsicle_stick, +/obj/item/popsicle_stick, +/obj/item/food/egg/rotten, +/obj/effect/decal/cleanable/plastic, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/knife/butcher{ + name = "antique cleaver"; + desc = "A huge knife for chopping up and slicing meat. Years of service has scarred its metal and worn grooves into the handle, but its blade is well-maintained and very sharp." + }, +/mob/living/basic/cockroach, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"gI" = ( +/obj/item/storage/box/mousetraps, +/obj/structure/table/reinforced, +/obj/item/melee/flyswatter, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"hq" = ( +/obj/structure/chair/comfy/shuttle, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"hH" = ( +/obj/item/clothing/mask/surgical, +/obj/effect/spawner/random/trash/botanical_waste, +/obj/structure/closet/crate/trashcart/filled, +/obj/item/seeds/onion/red{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/seeds/onion{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/food/grown/mushroom/odious_puffball{ + pixel_x = -8; + pixel_y = 2 + }, +/obj/effect/spawner/random/food_or_drink/seed, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"hN" = ( +/obj/item/shard, +/obj/item/food/pizzaslice/moldy/bacteria, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"iu" = ( +/obj/structure/plasticflaps/opaque, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"iH" = ( +/obj/structure/closet/crate/freezer, +/obj/item/food/hard_taco_shell/empty{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/food/hard_taco_shell/empty{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/food/hard_taco_shell/empty{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/food/hard_taco_shell/empty{ + pixel_x = 1; + pixel_y = 1 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = -5; + pixel_y = -5 + }, +/obj/effect/spawner/random/food_or_drink/donkpockets_single, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"jo" = ( +/obj/item/trash/can, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"js" = ( +/obj/item/food/egg/rotten{ + pixel_x = -6; + pixel_y = -8 + }, +/obj/item/food/egg/rotten{ + pixel_x = -10; + pixel_y = -8 + }, +/obj/item/food/egg/rotten{ + pixel_x = -14; + pixel_y = -8 + }, +/obj/item/food/meat/slab/rawcrab{ + pixel_x = 2; + pixel_y = -8 + }, +/obj/item/food/meat/slab/rawcrab{ + pixel_x = 2; + pixel_y = -8 + }, +/obj/item/food/meat/slab/rawcrab{ + pixel_x = 3; + pixel_y = -6 + }, +/obj/item/food/meat/slab/rawcrab{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/food/meat/slab/rawcrab{ + pixel_x = 2 + }, +/obj/item/storage/fancy/pickles_jar{ + pixel_x = -8; + pixel_y = 6 + }, +/obj/structure/closet/secure_closet/freezer/empty, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"ki" = ( +/obj/effect/spawner/random/trash/food_packaging, +/obj/item/shard, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"ku" = ( +/obj/structure/fermenting_barrel, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"kJ" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/gloves{ + pixel_x = 10; + pixel_y = 8 + }, +/obj/item/storage/box/masks{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/machinery/recharger{ + pixel_y = -10 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"kS" = ( +/obj/machinery/light/warm, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"kV" = ( +/obj/machinery/computer/terminal{ + content = list("Property of Spinward-Upsilon Sanitation Department. Authorised employees only."); + desc = "A garbage truck's dusty old control console."; + name = "dashboard"; + upperinfo = "Controls locked." + }, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"nN" = ( +/obj/item/trash/candy, +/obj/item/reagent_containers/cup/glass/colocup, +/obj/item/reagent_containers/cup/glass/colocup, +/obj/item/reagent_containers/cup/glass/colocup, +/obj/item/reagent_containers/cup/glass/colocup, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"nQ" = ( +/obj/item/trash/shrimp_chips, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"nS" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/item/vending_refill/dinnerware, +/obj/item/vending_refill/snack, +/obj/item/circuitboard/machine/coffeemaker, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"og" = ( +/obj/structure/lattice, +/obj/structure/grille, +/obj/effect/spawner/random/entertainment/plushie, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"oq" = ( +/obj/item/food/cheese/wheel, +/obj/item/food/cheese/wheel, +/obj/item/food/cheese/wheel, +/obj/item/food/cheese/wheel, +/obj/item/food/cheese/wheel, +/obj/item/food/cheese/firm_cheese, +/obj/item/food/cheese/firm_cheese, +/obj/item/food/cheese/firm_cheese, +/obj/item/food/cheese/firm_cheese, +/obj/item/food/cheese/firm_cheese, +/obj/item/thermometer, +/obj/structure/closet/secure_closet/freezer/empty, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"oL" = ( +/obj/structure/table/reinforced, +/obj/item/analyzer{ + pixel_y = 6 + }, +/obj/item/geiger_counter{ + pixel_x = -8; + pixel_y = -2 + }, +/obj/item/flashlight{ + pixel_x = 4 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"pp" = ( +/obj/effect/spawner/random/trash/garbage, +/obj/item/broken_bottle, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"ps" = ( +/obj/item/trash/can/food/larvae, +/obj/item/food/bait/worm, +/obj/effect/decal/cleanable/garbage, +/obj/effect/decal/cleanable/ants, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"pF" = ( +/obj/item/food/badrecipe/moldy/bacteria, +/obj/item/food/deadmouse/moldy, +/obj/structure/broken_flooring/pile, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"pP" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"qd" = ( +/obj/item/food/breadslice/moldy/bacteria{ + pixel_y = -10 + }, +/obj/structure/reagent_dispensers/servingdish{ + anchored = 0 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"qm" = ( +/obj/effect/decal/cleanable/food/egg_smudge, +/obj/item/food/pizzaslice/moldy, +/mob/living/basic/mouse/brown, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"qM" = ( +/turf/open/space/basic, +/area/space) +"re" = ( +/obj/item/trash/shrimp_chips, +/obj/item/trash/sosjerky, +/mob/living/basic/mouse/rat, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"rx" = ( +/obj/item/surprise_egg, +/obj/structure/closet/crate/trashcart, +/obj/item/trash/raisins, +/obj/effect/decal/cleanable/food/egg_smudge, +/obj/item/book/manual/chef_recipes, +/obj/item/trash/semki/healthy, +/mob/living/basic/mouse/rat, +/obj/item/clothing/shoes/galoshes, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"rL" = ( +/obj/item/food/badrecipe, +/obj/item/pen/charcoal{ + desc = "It's just a wooden stick with some compressed ash on the end. At least it can write."; + name = "charcoal stick" + }, +/obj/effect/decal/cleanable/oil/streak, +/obj/structure/closet/crate/trashcart, +/obj/item/food/grown/ash_flora/shavings, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"tr" = ( +/obj/structure/broken_flooring/singular, +/obj/effect/spawner/random/trash/food_packaging, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"ty" = ( +/obj/item/trash/can/food/peaches, +/obj/item/trash/boritos/red, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"tU" = ( +/obj/machinery/door/poddoor/shutters/preopen, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"uJ" = ( +/obj/item/trash/cnds, +/obj/item/food/breadslice/moldy/bacteria, +/obj/effect/decal/cleanable/wrapping, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"vA" = ( +/obj/machinery/power/terminal, +/obj/structure/tank_dispenser/oxygen, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"vI" = ( +/obj/item/poster/random_contraband, +/obj/item/tank/internals/emergency_oxygen/empty, +/obj/effect/decal/cleanable/garbage{ + pixel_x = -8; + pixel_y = -8 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"wb" = ( +/obj/effect/spawner/random/trash/bacteria, +/obj/item/trash/can, +/obj/item/trash/can{ + pixel_x = 8; + pixel_y = 1 + }, +/obj/item/trash/can{ + pixel_x = 5; + pixel_y = -2 + }, +/obj/item/food/badrecipe/moldy/bacteria{ + pixel_x = 12; + pixel_y = -8 + }, +/obj/effect/decal/cleanable/fuel_pool{ + desc = "A sticky patch of dried cola. It smells very sweet."; + name = "puddle of cola" + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"wv" = ( +/obj/structure/closet/cardboard, +/obj/item/toy/plush/snakeplushie, +/obj/item/clothing/glasses/eyepatch, +/obj/item/clothing/mask/cigarette/cigar/havana, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"wR" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/item/food/badrecipe/moldy/bacteria{ + pixel_x = 2; + pixel_y = -8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"xf" = ( +/obj/item/trash/tray, +/obj/item/trash/waffles, +/obj/item/trash/waffles, +/obj/item/trash/waffles, +/obj/item/food/grown/mushroom/plumphelmet, +/obj/structure/closet/crate/trashcart, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"xg" = ( +/obj/structure/closet/crate/cardboard, +/obj/item/knife/kitchen, +/obj/item/storage/box/mousetraps, +/obj/structure/broken_flooring/pile, +/obj/item/food/grown/parsnip, +/obj/item/food/grown/parsnip, +/obj/item/food/cheese/wedge, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"xk" = ( +/obj/structure/table/reinforced, +/obj/item/gps/spaceruin{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/storage/backpack/industrial{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/clothing/suit/hazardvest{ + pixel_x = -8; + pixel_y = -6 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"xZ" = ( +/obj/item/restraints/handcuffs/cable/zipties/used, +/obj/effect/spawner/random/decoration/flower, +/obj/item/reagent_containers/cup/glass/bottle/wine/unlabeled, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"ye" = ( +/obj/item/trash/semki/healthy, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"yh" = ( +/obj/effect/spawner/random/trash, +/mob/living/basic/mouse, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"yi" = ( +/obj/structure/sign/warning, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"yv" = ( +/obj/item/trash/can{ + pixel_x = -8; + pixel_y = -2 + }, +/obj/item/trash/can{ + pixel_y = -8 + }, +/obj/effect/decal/cleanable/fuel_pool{ + desc = "A sticky patch of dried cola. It smells very sweet."; + name = "puddle of cola" + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"yC" = ( +/obj/item/trash/popcorn/caramel{ + pixel_y = -6 + }, +/mob/living/basic/cockroach, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"zK" = ( +/obj/item/trash/chips{ + pixel_x = -8 + }, +/obj/item/broken_bottle{ + pixel_x = 8; + pixel_y = 2 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Ad" = ( +/obj/item/food/canned/beans{ + desc = "Probably still good."; + name = "rust-covered tin of beans" + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Aj" = ( +/obj/effect/decal/cleanable/ants, +/mob/living/basic/mouse/white, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"An" = ( +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"AM" = ( +/obj/item/trash/can{ + pixel_x = -8; + pixel_y = -2; + pixel_z = 0 + }, +/obj/item/reagent_containers/cup/soda_cans/random{ + pixel_x = -8; + pixel_y = 6 + }, +/obj/structure/closet/crate/cardboard, +/obj/item/vending_refill/cola, +/obj/item/vending_refill/boozeomat, +/obj/item/trash/can{ + pixel_x = 8; + pixel_y = 0 + }, +/obj/item/trash/can{ + pixel_x = 2; + pixel_y = -4 + }, +/obj/item/reagent_containers/cup/soda_cans/random{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/reagent_containers/cup/soda_cans/random{ + pixel_x = 8; + pixel_y = -2 + }, +/obj/effect/decal/cleanable/fuel_pool{ + desc = "A sticky patch of dried cola. It smells very sweet."; + name = "puddle of cola" + }, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"AR" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"BS" = ( +/obj/item/storage/bag/trash/filled{ + pixel_x = -8 + }, +/obj/effect/decal/cleanable/garbage{ + pixel_x = 2; + pixel_y = 5 + }, +/obj/effect/decal/cleanable/food/egg_smudge{ + pixel_x = -2; + pixel_y = -8 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Cc" = ( +/obj/item/trash/tray, +/obj/item/food/breadslice/moldy/bacteria{ + pixel_x = -8; + pixel_y = -8 + }, +/obj/item/food/tofu/prison{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/food/tofu/prison{ + pixel_x = -8; + pixel_y = -2 + }, +/obj/effect/decal/cleanable/ants, +/obj/structure/closet/crate/preopen, +/obj/item/food/meat/slab/human/mutant/zombie{ + pixel_x = 8; + pixel_y = 4 + }, +/obj/item/mail/junkmail, +/obj/item/trash/raisins, +/obj/item/trash/candy{ + pixel_x = 10; + pixel_y = -6 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Ci" = ( +/obj/item/kitchen/fork/plastic{ + pixel_x = -8 + }, +/obj/item/kitchen/spoon/plastic{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/paper/crumpled{ + pixel_x = 7; + pixel_y = -4 + }, +/obj/effect/decal/cleanable/glass, +/obj/effect/spawner/random/food_or_drink/condiment, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Ct" = ( +/obj/machinery/door/airlock/shuttle, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"CF" = ( +/obj/machinery/reagentgrinder{ + anchored = 0 + }, +/obj/item/food/badrecipe{ + pixel_x = -4; + pixel_y = -6 + }, +/obj/effect/decal/cleanable/fuel_pool{ + desc = "A sticky patch of dried cola. It smells very sweet."; + name = "puddle of cola" + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Do" = ( +/obj/item/food/badrecipe/moldy/bacteria, +/obj/item/food/bait/worm, +/obj/effect/decal/cleanable/food/tomato_smudge, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Ec" = ( +/obj/effect/spawner/random/trash/bucket, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Fp" = ( +/obj/item/food/badrecipe/moldy/bacteria, +/obj/item/storage/bag/trash/filled, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Fs" = ( +/obj/structure/closet/cardboard, +/obj/item/restraints/handcuffs/cable/zipties/used, +/obj/item/food/cornchips/blue, +/obj/item/food/cornchips/blue, +/obj/item/food/cornchips/green, +/obj/item/food/cornchips/green, +/obj/item/food/cornchips/purple, +/obj/item/food/cornchips/purple, +/obj/item/food/cornchips/red, +/obj/item/food/cornchips/red, +/obj/item/food/cornchips/random, +/obj/item/food/cornchips/random, +/obj/item/food/cornchips/blue{ + desc = "Limited edition flavour. Only for sale within the space commonwealth."; + name = "\improper Space Salt and Vinegar Boritos corn chips"; + tastes = list("salt" = 1, "vinegar" = 3) + }, +/obj/item/food/cornchips/blue{ + desc = "Limited edition flavour. Only for sale within the space commonwealth."; + name = "\improper Space Salt and Vinegar Boritos corn chips"; + tastes = list("salt" = 1, "vinegar" = 3) + }, +/obj/item/food/cornchips/random, +/obj/item/food/cornchips/random, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Fz" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/lead, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"FL" = ( +/obj/structure/closet/cardboard, +/obj/item/pen/blue, +/obj/item/ph_paper, +/obj/item/petri_dish, +/obj/item/healthanalyzer/simple/disease, +/obj/item/biopsy_tool, +/obj/effect/spawner/random/medical/surgery_tool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Gh" = ( +/obj/item/trash/semki/healthy, +/mob/living/basic/mouse, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"GB" = ( +/obj/item/trash/can, +/obj/item/storage/bag/trash, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"GP" = ( +/obj/effect/decal/cleanable/garbage, +/obj/item/crowbar/hammer{ + desc = "It's a heavy iron hammer with a wooden handle. A triangle has been chiselled into it."; + name = "heirloom hammer" + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"GU" = ( +/obj/item/reagent_containers/cup/glass/waterbottle/empty, +/obj/effect/decal/cleanable/wrapping, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Hh" = ( +/obj/structure/closet/crate/trashcart/filled, +/obj/item/reagent_containers/cup/glass/bottle/juice/orangejuice{ + desc = "Best before '32"; + pixel_x = -6 + }, +/obj/effect/decal/cleanable/insectguts, +/obj/item/food/grown/mushroom/odious_puffball{ + pixel_x = 8; + pixel_y = 4 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Hu" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/item/knife/plastic{ + pixel_x = 12 + }, +/obj/item/food/badrecipe/moldy/bacteria{ + pixel_x = -6 + }, +/obj/item/food/meat/slab/pig, +/obj/item/food/deadmouse, +/obj/item/food/salami{ + pixel_x = 1; + pixel_y = 2 + }, +/obj/item/food/salami{ + pixel_x = 1; + pixel_y = 3 + }, +/obj/item/food/salami{ + pixel_x = 1; + pixel_y = 6 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"HC" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/item/kitchen/fork/plastic{ + pixel_x = -8 + }, +/obj/item/kitchen/fork/plastic{ + pixel_x = 8; + pixel_y = 0 + }, +/obj/item/kitchen/fork/plastic, +/obj/item/storage/box/papersack/meat, +/obj/effect/spawner/random/food_or_drink/condiment, +/obj/item/popsicle_stick, +/obj/item/popsicle_stick{ + pixel_x = -4; + pixel_y = 1 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Ie" = ( +/obj/machinery/airalarm{ + pixel_y = 25 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"II" = ( +/obj/structure/closet/crate/trashcart/filled, +/obj/item/food/cracker, +/obj/item/food/canned/beans{ + desc = "Probably still good."; + name = "rust-covered tin of beans" + }, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"IR" = ( +/obj/structure/table/reinforced, +/obj/item/gas_filter, +/obj/item/gas_filter, +/obj/item/clothing/mask/gas, +/obj/item/clothing/head/utility/hardhat/orange{ + pixel_y = 8 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"JH" = ( +/obj/item/petri_dish/random, +/obj/item/petri_dish/random, +/obj/item/petri_dish, +/obj/item/petri_dish, +/obj/item/petri_dish, +/obj/item/organ/internal/tongue/rat, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/glass, +/obj/item/organ/internal/stomach/rat, +/obj/item/fish/ratfish, +/obj/structure/closet/crate/freezer, +/obj/effect/spawner/random/medical/surgery_tool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"KD" = ( +/obj/structure/closet/crate/critter, +/obj/item/dog_bone{ + pixel_y = -6 + }, +/mob/living/basic/cockroach, +/mob/living/basic/cockroach, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"KT" = ( +/obj/structure/broken_flooring/singular, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Le" = ( +/obj/effect/spawner/random/trash/bacteria, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Mq" = ( +/obj/structure/closet/crate/cardboard, +/obj/item/stack/tile/bamboo/tatami{ + amount = 40 + }, +/obj/item/stack/sticky_tape{ + pixel_y = -2 + }, +/obj/effect/decal/cleanable/plastic, +/obj/effect/decal/cleanable/oil/streak, +/obj/effect/decal/cleanable/glass, +/obj/effect/spawner/random/engineering/material_cheap, +/obj/item/crowbar/hammer{ + desc = "It's a heavy claw hammer. The handle is covered in bite marks of varying sizes."; + name = "old hammer" + }, +/obj/item/food/deadmouse, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"MA" = ( +/obj/item/food/badrecipe/moldy/bacteria, +/obj/item/food/deadmouse, +/obj/item/grown/bananapeel, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Nm" = ( +/obj/item/trash/energybar, +/obj/item/trash/energybar, +/obj/item/trash/energybar, +/obj/item/trash/energybar, +/obj/item/food/candy/bronx, +/obj/item/food/candy/bronx, +/obj/effect/spawner/random/structure/closet_empty/crate, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Od" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/shuttle, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Oh" = ( +/obj/effect/spawner/random/trash/bacteria, +/mob/living/basic/mouse/brown, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Ok" = ( +/obj/item/plate/large, +/obj/item/plate/large, +/obj/item/storage/box/drinkingglasses{ + pixel_x = 10; + pixel_y = 2 + }, +/obj/structure/closet/crate/preopen, +/obj/item/reagent_containers/cup/glass/coffee_cup{ + pixel_x = 4; + pixel_y = -3 + }, +/mob/living/basic/mouse/brown, +/mob/living/basic/mouse/brown, +/mob/living/basic/mouse/brown, +/mob/living/basic/mouse, +/mob/living/basic/mouse, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Or" = ( +/obj/item/food/sustenance_bar/cheese{ + pixel_x = -6; + pixel_y = -8 + }, +/obj/structure/closet/crate/large, +/obj/item/food/sustenance_bar/cheese{ + pixel_x = -6; + pixel_y = -4 + }, +/obj/item/food/sustenance_bar/neapolitan{ + maptext_x = 0; + maptext_y = 0; + pixel_x = -6 + }, +/obj/item/food/sustenance_bar/neapolitan{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/food/sustenance_bar/mint{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/item/food/sustenance_bar/mint{ + pixel_x = -6; + pixel_y = 12 + }, +/obj/item/food/sustenance_bar{ + pixel_x = 6; + pixel_y = -10 + }, +/obj/item/food/sustenance_bar{ + pixel_x = 6; + pixel_y = -6 + }, +/obj/item/food/sustenance_bar{ + pixel_x = 6; + pixel_y = -2 + }, +/obj/item/food/sustenance_bar{ + pixel_x = 6; + pixel_y = 2 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Ox" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/item/trash/candy{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/trash/can/food/desert_snails{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/item/trash/can/food/envirochow{ + pixel_x = -8; + pixel_y = -2 + }, +/obj/effect/decal/cleanable/food/flour, +/obj/item/thermometer/pen{ + pixel_x = 8 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"OD" = ( +/turf/closed/wall/mineral/titanium, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"OZ" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/item/plate/small{ + pixel_x = -6 + }, +/obj/item/food/meat/slab/human/mutant/zombie{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/food/meat/slab/human/mutant/zombie{ + pixel_x = 5 + }, +/obj/item/food/meat/slab/human/mutant/zombie{ + pixel_x = 2; + pixel_y = -5 + }, +/obj/item/food/meat/slab/human{ + pixel_x = 1; + pixel_y = 3 + }, +/obj/effect/decal/cleanable/ants, +/obj/effect/decal/cleanable/food/tomato_smudge, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"PU" = ( +/obj/item/clothing/head/cone{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/machinery/light/warm, +/obj/machinery/power/apc{ + cell_type = /obj/item/stock_parts/cell/lead; + locked = 0; + pixel_y = -25; + start_charge = 0 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Qi" = ( +/obj/item/book/bible, +/obj/structure/closet/crate/cardboard, +/obj/item/mail/junkmail{ + pixel_x = -10; + pixel_y = 2 + }, +/obj/item/mail/junkmail{ + pixel_x = 6; + pixel_y = 1 + }, +/obj/item/mail/junkmail, +/obj/effect/decal/cleanable/insectguts, +/mob/living/basic/mouse/rat, +/mob/living/basic/mouse/rat, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"QH" = ( +/obj/structure/closet/crate/trashcart/filled, +/obj/effect/decal/cleanable/insectguts, +/obj/item/pinata, +/obj/item/food/cornchips/green, +/obj/effect/spawner/random/food_or_drink/condiment, +/mob/living/basic/mouse, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"QL" = ( +/obj/item/broken_bottle, +/obj/item/grown/bananapeel, +/obj/effect/spawner/random/trash/garbage, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Rq" = ( +/obj/machinery/door/airlock/external/glass, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Sa" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Sb" = ( +/obj/item/food/deadmouse/moldy, +/obj/item/reagent_containers/spray/pestspray{ + pixel_x = 6; + pixel_y = 8 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"TB" = ( +/obj/structure/window/reinforced/shuttle, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"TG" = ( +/obj/item/mop, +/obj/item/food/deadmouse/moldy, +/obj/item/pushbroom, +/obj/effect/decal/cleanable/insectguts, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"TX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"UX" = ( +/obj/structure/lattice/catwalk, +/obj/item/crowbar/large/emergency, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Vb" = ( +/obj/structure/closet/crate/cardboard/mothic, +/obj/item/trash/can/food/pine_nuts, +/obj/item/broken_bottle, +/obj/item/broken_bottle, +/obj/effect/decal/cleanable/wrapping, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"VB" = ( +/obj/machinery/power/smes, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"VL" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/turf/open/space/basic, +/area/space) +"Xi" = ( +/obj/item/food/badrecipe/moldy/bacteria, +/obj/effect/decal/cleanable/food/egg_smudge, +/mob/living/basic/mouse, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"XF" = ( +/obj/item/shard, +/obj/item/trash/boritos, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"XY" = ( +/obj/structure/lattice, +/obj/structure/grille/broken, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Yu" = ( +/obj/structure/table/reinforced, +/obj/item/storage/bag/trash{ + pixel_x = -12; + pixel_y = 0 + }, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash{ + pixel_x = -6; + pixel_y = 0 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Yx" = ( +/obj/structure/reagent_dispensers/cooking_oil{ + anchored = 0 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Yz" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"YB" = ( +/obj/item/trash/peanuts{ + pixel_x = -4; + pixel_y = -8 + }, +/obj/structure/closet/crate/freezer, +/obj/item/trash/pistachios{ + pixel_x = 8; + pixel_y = -4 + }, +/obj/item/trash/pistachios, +/obj/item/c_tube, +/obj/item/food/uncooked_rice{ + pixel_y = -4 + }, +/obj/item/trash/peanuts{ + pixel_x = -2; + pixel_y = 6 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Zb" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/food/deadmouse, +/mob/living/basic/mouse/rat, +/obj/item/organ/internal/heart/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) + +(1,1,1) = {" +qM +qM +pP +pP +pP +OD +VL +qM +qM +qM +qM +qM +qM +qM +qM +qM +qM +qM +qM +qM +"} +(2,1,1) = {" +qM +OD +TB +TB +OD +OD +Sa +Sa +Sa +Sa +Sa +Sa +Sa +Sa +Sa +Sa +Sa +Sa +Sa +Sa +"} +(3,1,1) = {" +XY +Od +kJ +Fz +gI +OD +Sa +Hu +rL +HC +YB +iH +wv +KD +wR +nS +fV +Vb +bs +yi +"} +(4,1,1) = {" +og +TB +kV +hq +kS +OD +Sa +xf +An +OZ +Fp +Ok +MA +aF +vI +xg +ps +ye +GP +Sa +"} +(5,1,1) = {" +AR +TB +xk +IR +bF +OD +Sa +Ci +qm +qd +zK +aP +GU +KT +Ad +TX +ki +Fp +xZ +Sa +"} +(6,1,1) = {" +XY +TB +Od +OD +Ie +Ct +tU +TX +yh +bx +Yz +Do +Le +fx +wb +gb +hH +QH +bj +Sa +"} +(7,1,1) = {" +XY +Od +Yu +oL +bF +Ct +tU +fb +pF +Gh +hN +QL +TX +Mq +AM +CF +rx +II +Hh +Sa +"} +(8,1,1) = {" +og +Od +fI +fI +bF +OD +Sa +js +BS +Oh +oq +XF +jo +Aj +yv +GB +pp +re +Yx +Sa +"} +(9,1,1) = {" +XY +Od +fI +bF +PU +OD +Sa +Qi +yC +nN +Fs +fk +TG +nQ +ku +ty +ew +tr +Zb +Sa +"} +(10,1,1) = {" +AR +Od +fI +vA +VB +OD +Sa +Cc +Ox +fR +fP +Or +Ec +Sb +Xi +uJ +FL +Nm +JH +yi +"} +(11,1,1) = {" +qM +OD +Rq +Od +OD +OD +Sa +Sa +Sa +Sa +Sa +Sa +Sa +iu +iu +iu +Sa +Sa +Sa +Sa +"} +(12,1,1) = {" +qM +qM +pP +pP +UX +OD +VL +qM +qM +qM +qM +qM +qM +qM +qM +qM +qM +qM +qM +qM +"} diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm new file mode 100644 index 00000000000000..9813823daeb17b --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm @@ -0,0 +1,964 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"bb" = ( +/obj/item/organ/external/wings/moth, +/obj/structure/closet/crate/trashcart, +/obj/item/bodypart/arm/left/skeleton, +/obj/item/bodypart/arm/right/skeleton, +/obj/item/evidencebag, +/obj/item/organ/internal/heart/cybernetic/tier2, +/obj/structure/broken_flooring/pile, +/obj/item/stack/sheet/animalhide/human/five, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"bv" = ( +/obj/structure/showcase/horrific_experiment, +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"eO" = ( +/obj/effect/spawner/random/contraband/narcotics, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"gh" = ( +/turf/open/space/basic, +/area/space) +"gr" = ( +/obj/machinery/door/poddoor/shutters/preopen, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"gy" = ( +/obj/machinery/door/airlock/external/glass, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"hf" = ( +/obj/item/circuitboard/machine/medical_kiosk, +/obj/structure/frame/machine, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"hp" = ( +/obj/structure/table/reinforced, +/obj/item/gps/spaceruin{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/storage/backpack/industrial{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/clothing/suit/hazardvest{ + pixel_x = -8; + pixel_y = -6 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"hu" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/item/stack/spacecash/c20, +/obj/item/pen/fountain, +/obj/structure/broken_flooring/singular, +/obj/item/swab, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"hv" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/reagent_containers/pill/maintenance{ + pixel_x = 3; + pixel_y = 7 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"io" = ( +/obj/structure/closet/body_bag, +/obj/structure/table/optable, +/obj/effect/mob_spawn/corpse/human{ + brute_damage = 35; + mob_type = /mob/living/carbon/human/species/fly; + oxy_damage = 65 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"iw" = ( +/obj/structure/lattice, +/obj/structure/grille, +/obj/effect/spawner/random/entertainment/plushie, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"iU" = ( +/obj/item/storage/medkit/brute, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"kf" = ( +/obj/machinery/power/smes, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"kl" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"kp" = ( +/obj/structure/safe, +/obj/item/stamp/syndicate, +/obj/item/traitor_bug, +/obj/item/eyesnatcher, +/obj/item/stack/spacecash/c1000, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"kx" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"lT" = ( +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"mB" = ( +/obj/effect/spawner/random/engineering/tank, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"mZ" = ( +/obj/machinery/airalarm{ + pixel_y = 25 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"nW" = ( +/obj/item/storage/box/disks{ + pixel_x = -7; + pixel_y = -3 + }, +/obj/structure/broken_flooring/singular, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"pu" = ( +/obj/structure/plasticflaps/opaque, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"py" = ( +/obj/structure/closet/body_bag, +/obj/structure/table/optable, +/obj/item/surgical_drapes, +/obj/effect/mob_spawn/corpse/human{ + brute_damage = 50; + burn_damage = 50 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"pD" = ( +/obj/machinery/iv_drip/saline, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"pR" = ( +/obj/machinery/iv_drip, +/obj/item/storage/box/syringes{ + pixel_x = 6; + pixel_y = -2 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"qh" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/rack_parts, +/obj/item/storage/pill_bottle/mannitol, +/obj/effect/decal/cleanable/oil/slippery, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"qC" = ( +/turf/closed/wall/mineral/titanium, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"qV" = ( +/obj/item/retractor/advanced{ + pixel_x = 8 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"qX" = ( +/obj/effect/decal/cleanable/plastic, +/obj/structure/broken_flooring/corner, +/obj/item/trash/syndi_cakes, +/obj/item/trash/syndi_cakes, +/obj/item/trash/syndi_cakes, +/obj/item/poster/random_contraband, +/obj/item/organ/internal/tongue/zombie, +/obj/structure/closet/crate/trashcart, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"rB" = ( +/obj/structure/closet/crate/freezer, +/obj/item/stack/medical/bone_gel, +/obj/item/stack/medical/ointment, +/obj/item/thermometer, +/obj/effect/decal/cleanable/blood/splatter, +/obj/item/clothing/suit/apron/surgical, +/obj/item/clothing/neck/stethoscope, +/obj/item/clothing/neck/stethoscope, +/obj/item/biopsy_tool, +/obj/effect/spawner/random/contraband/narcotics, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"sa" = ( +/obj/structure/frame/computer, +/obj/item/circuitboard/computer/operating, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"sU" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"tI" = ( +/obj/structure/tank_holder/anesthetic, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"uo" = ( +/obj/machinery/computer/terminal{ + content = list("Property of Spinward-Upsilon Sanitation Department. Authorised employees only."); + desc = "A garbage truck's dusty old control console."; + name = "dashboard"; + upperinfo = "Controls locked." + }, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"uG" = ( +/obj/structure/chair/plastic, +/obj/item/reagent_containers/syringe/lethal/choral, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"uR" = ( +/obj/machinery/iv_drip, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/plastic, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"vf" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/lead, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"vM" = ( +/obj/structure/closet/cardboard, +/obj/item/toy/plush/snakeplushie, +/obj/item/bodypart/arm/left/robot/surplus, +/obj/item/clothing/glasses/eyepatch, +/obj/item/toy/nuke, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"wh" = ( +/mob/living/basic/trooper/syndicate/ranged, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"wk" = ( +/obj/structure/frame/computer, +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/cobweb, +/obj/item/circuitboard/computer/operating, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"xj" = ( +/obj/structure/window/reinforced/shuttle, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"xw" = ( +/obj/item/restraints/handcuffs/cable/zipties/used, +/obj/structure/closet/crate/trashcart/filled, +/obj/item/reagent_containers/condiment/soysauce, +/obj/item/reagent_containers/pill/mannitol, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"xH" = ( +/obj/item/food/badrecipe/moldy, +/obj/item/food/badrecipe/moldy, +/obj/structure/closet/mini_fridge/grimy, +/obj/effect/decal/cleanable/oil, +/obj/item/reagent_containers/cup/bottle/morphine, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"zb" = ( +/obj/item/wheelchair, +/obj/item/cane/white, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"zj" = ( +/obj/structure/table/rolling{ + desc = "An Interdyne Pharmaceutics brand 'Crash Cart Classic' rolling table for surgical tools. It can and will move."; + name = "rolling surgical tray" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"zn" = ( +/obj/structure/closet/cardboard, +/obj/item/stack/medical/suture, +/obj/item/stack/medical/gauze, +/obj/item/stack/sticky_tape/surgical, +/obj/structure/broken_flooring/corner, +/obj/item/organ/internal/cyberimp/arm/surgery, +/obj/item/organ/internal/cyberimp/eyes/hud/medical, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"zu" = ( +/obj/structure/toilet{ + anchored = 0 + }, +/obj/effect/spawner/random/contraband/permabrig_weapon, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"zZ" = ( +/obj/item/pillow, +/obj/structure/closet/crate/trashcart/laundry, +/obj/item/bodybag, +/obj/item/bodybag, +/obj/item/clothing/under/rank/medical/scrubs/blue, +/obj/item/clothing/under/rank/medical/scrubs/blue, +/obj/item/clothing/under/rank/medical/scrubs/coroner, +/obj/item/clothing/under/rank/medical/scrubs/green, +/obj/item/clothing/under/rank/medical/scrubs/green, +/obj/item/clothing/suit/toggle/labcoat, +/obj/item/clothing/suit/toggle/labcoat, +/obj/item/clothing/suit/toggle/labcoat, +/obj/item/clothing/suit/toggle/labcoat, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Al" = ( +/obj/structure/frame/computer, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Am" = ( +/obj/structure/mannequin/plastic, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"AB" = ( +/obj/structure/shipping_container/interdyne{ + armor_type = /datum/armor/immune + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"AG" = ( +/obj/structure/chair/comfy/shuttle, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"AU" = ( +/obj/item/paper/crumpled, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/side, +/obj/item/suppressor, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"BE" = ( +/obj/structure/table/reinforced, +/obj/item/storage/bag/trash{ + pixel_x = -12; + pixel_y = 0 + }, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash{ + pixel_x = -6; + pixel_y = 0 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Cv" = ( +/obj/item/storage/box/mousetraps, +/obj/structure/table/reinforced, +/obj/item/melee/flyswatter, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"CJ" = ( +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"CM" = ( +/obj/item/toy/braintoy, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/fuel_pool, +/obj/structure/closet/crate/trashcart, +/obj/item/shard, +/obj/item/stack/cable_coil, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"CU" = ( +/obj/structure/mannequin/skeleton, +/obj/structure/broken_flooring/plating, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Dj" = ( +/obj/item/food/deadmouse/moldy, +/obj/item/statuebust/hippocratic, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Dv" = ( +/obj/item/popsicle_stick{ + pixel_x = -4; + pixel_y = 9 + }, +/obj/item/rack_parts, +/obj/item/shard, +/obj/effect/decal/cleanable/plastic, +/obj/effect/spawner/random/contraband/permabrig_gear, +/obj/item/wrench/medical, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"EJ" = ( +/obj/item/stack/sticky_tape/surgical, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Go" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/pill/cyanide{ + pixel_y = 8 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Gp" = ( +/obj/item/organ/internal/eyes/robotic/basic, +/obj/item/kitchen/spoon, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Hx" = ( +/obj/effect/decal/cleanable/plastic, +/obj/structure/closet/crate/freezer, +/obj/item/skillchip/entrails_reader, +/obj/item/mod/module/health_analyzer, +/obj/item/shovel, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"HE" = ( +/obj/structure/bed/maint, +/obj/structure/bedsheetbin, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"IM" = ( +/obj/effect/decal/cleanable/robot_debris, +/obj/structure/closet/crate/freezer, +/obj/item/organ/internal/liver/roach, +/obj/item/organ/internal/stomach, +/obj/item/organ/internal/tongue/robot, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"IS" = ( +/obj/structure/broken_flooring/singular, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"JW" = ( +/obj/item/plate, +/obj/effect/decal/cleanable/plastic, +/obj/structure/closet/crate/trashcart, +/obj/item/food/deadmouse, +/obj/effect/spawner/random/medical/medkit, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Ka" = ( +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Kk" = ( +/obj/item/wheelchair, +/obj/item/screwdriver, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Ky" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Lh" = ( +/obj/item/food/deadmouse/moldy, +/obj/item/pushbroom, +/obj/item/clothing/shoes/galoshes, +/obj/item/storage/bag/trash/filled, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Ll" = ( +/obj/item/trash/boritos/red, +/obj/item/storage/box/gloves, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"LA" = ( +/obj/item/mail/junkmail, +/obj/effect/decal/cleanable/plastic, +/obj/item/clothing/mask/surgical, +/obj/item/extinguisher/empty, +/obj/item/sticker/assistant, +/obj/item/reagent_containers/cup/coffeepot, +/obj/item/coffee_cartridge/decaf, +/obj/structure/closet/crate/trashcart, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"LG" = ( +/obj/structure/lattice/catwalk, +/obj/item/crowbar/large/emergency, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"LI" = ( +/obj/structure/table/reinforced, +/obj/item/gas_filter, +/obj/item/gas_filter, +/obj/item/clothing/mask/gas, +/obj/item/clothing/head/utility/hardhat/orange{ + pixel_y = 8 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"LR" = ( +/obj/machinery/power/terminal, +/obj/structure/tank_dispenser/oxygen, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"MC" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"NJ" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/gloves{ + pixel_x = 10; + pixel_y = 8 + }, +/obj/item/storage/box/masks{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/machinery/recharger{ + pixel_y = -10 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Od" = ( +/obj/item/clothing/head/cone{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/machinery/light/warm, +/obj/machinery/power/apc{ + cell_type = /obj/item/stock_parts/cell/lead; + locked = 0; + pixel_y = -25; + start_charge = 0 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Ok" = ( +/obj/item/reagent_containers/pill/cyanide, +/obj/effect/spawner/random/medical/minor_healing, +/obj/effect/spawner/random/medical/surgery_tool, +/obj/item/reagent_containers/blood/o_minus, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"OA" = ( +/obj/machinery/door/airlock/shuttle, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Pd" = ( +/obj/structure/lattice, +/obj/structure/grille/broken, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Pe" = ( +/obj/effect/decal/cleanable/robot_debris/up, +/obj/structure/frame/computer, +/obj/item/stack/sheet/glass{ + amount = 2 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"PM" = ( +/obj/structure/closet/mini_fridge/grimy, +/obj/item/storage/organbox, +/obj/effect/decal/cleanable/blood/gibs/old, +/obj/item/storage/pill_bottle/epinephrine, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Qq" = ( +/obj/structure/microscope, +/obj/structure/broken_flooring/singular, +/obj/item/instrument/bilehorn, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"QK" = ( +/obj/effect/decal/cleanable/robot_debris/down, +/obj/item/circular_saw, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Rn" = ( +/obj/structure/closet/crate/cardboard, +/obj/item/book/manual/wiki/surgery, +/obj/item/book/manual/wiki/surgery, +/obj/item/book/manual/wiki/medicine{ + name = "Medical Space Compendium, Volume 637" + }, +/obj/item/book/manual/wiki/medicine{ + name = "Medical Space Compendium, Volume 637" + }, +/obj/item/book/manual/wiki/medicine{ + name = "Medical Space Compendium, Volume 637" + }, +/obj/item/book/manual/wiki/medicine{ + name = "Medical Space Compendium, Volume 637" + }, +/obj/item/stamp/denied, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"RT" = ( +/obj/structure/frame/machine, +/obj/item/shard, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Tp" = ( +/obj/structure/barricade/wooden, +/obj/structure/barricade/wooden/crude, +/obj/structure/curtain/cloth, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"TM" = ( +/obj/structure/closet/body_bag, +/obj/structure/table/optable, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mob_spawn/corpse/human{ + brute_damage = 200; + mob_type = /mob/living/carbon/human/species/lizard + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Ua" = ( +/obj/structure/table/reinforced, +/obj/item/analyzer{ + pixel_y = 6 + }, +/obj/item/geiger_counter{ + pixel_x = -8; + pixel_y = -2 + }, +/obj/item/flashlight{ + pixel_x = 4 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Um" = ( +/obj/effect/decal/cleanable/garbage, +/obj/item/lipstick, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"UJ" = ( +/obj/item/storage/box/masks, +/obj/item/storage/box/masks, +/obj/item/storage/box/masks, +/obj/item/clothing/mask/surgical, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 7; + pixel_y = 5 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"VL" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/turf/open/space/basic, +/area/space) +"WX" = ( +/obj/machinery/light/warm, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"XC" = ( +/obj/structure/sign/warning, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"XD" = ( +/obj/structure/sinkframe, +/obj/structure/broken_flooring/pile, +/obj/effect/decal/cleanable/blood/gibs/old, +/obj/item/reagent_containers/cup/rag{ + pixel_x = 6; + pixel_y = -3 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"XR" = ( +/obj/structure/broken_flooring/pile, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Yj" = ( +/obj/structure/reflector/single/mapping{ + rotation_angle = 360 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Zi" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/shuttle, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) + +(1,1,1) = {" +gh +gh +sU +sU +sU +qC +VL +gh +gh +gh +gh +gh +gh +gh +gh +gh +gh +gh +gh +gh +"} +(2,1,1) = {" +gh +qC +xj +xj +qC +qC +MC +MC +MC +MC +MC +MC +MC +MC +MC +MC +MC +MC +MC +MC +"} +(3,1,1) = {" +Pd +Zi +NJ +vf +Cv +qC +MC +wk +nW +sa +HE +PM +zZ +hu +vM +AB +py +io +TM +XC +"} +(4,1,1) = {" +iw +xj +uo +AG +WX +qC +MC +Dj +XR +Al +QK +CJ +Um +zb +tI +CJ +uG +CJ +Ok +MC +"} +(5,1,1) = {" +kx +xj +hp +LI +kl +qC +MC +Pe +CJ +CJ +CJ +eO +qV +CJ +Kk +CJ +zj +Go +bv +MC +"} +(6,1,1) = {" +Pd +xj +Zi +qC +mZ +OA +gr +CJ +Ky +iU +Rn +CM +qh +CJ +wh +CJ +CJ +Ky +Yj +MC +"} +(7,1,1) = {" +Pd +Zi +BE +Ua +kl +OA +gr +CJ +CJ +mB +Dv +rB +JW +CJ +EJ +AB +xw +CJ +kp +MC +"} +(8,1,1) = {" +iw +Zi +lT +lT +kl +qC +MC +uR +CJ +CJ +hv +Ka +CJ +CJ +Gp +CJ +pD +CJ +IM +MC +"} +(9,1,1) = {" +Pd +Zi +lT +kl +Od +qC +MC +pR +eO +XD +UJ +RT +Lh +CJ +Hx +CJ +zu +IS +bb +MC +"} +(10,1,1) = {" +kx +Zi +lT +LR +kf +qC +MC +CU +Ll +xH +Qq +hf +LA +CJ +Am +Tp +zn +AU +qX +XC +"} +(11,1,1) = {" +gh +qC +gy +Zi +qC +qC +MC +MC +MC +MC +MC +MC +MC +pu +pu +pu +MC +MC +MC +MC +"} +(12,1,1) = {" +gh +gh +sU +sU +LG +qC +VL +gh +gh +gh +gh +gh +gh +gh +gh +gh +gh +gh +gh +gh +"} diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm new file mode 100644 index 00000000000000..c2da1e7646cb02 --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm @@ -0,0 +1,1200 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ac" = ( +/obj/item/trash/semki/healthy, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"ap" = ( +/obj/machinery/power/terminal, +/obj/structure/tank_dispenser/oxygen, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/squat) +"aG" = ( +/obj/item/storage/toolbox/electrical{ + pixel_x = 9; + pixel_y = 8 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -9; + pixel_y = 8 + }, +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -9; + pixel_y = 2 + }, +/obj/structure/closet/crate/preopen, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"aI" = ( +/obj/structure/bed/maint, +/obj/item/knife/shiv, +/obj/item/storage/backpack/satchel/leather/withwallet, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"bb" = ( +/obj/item/food/badrecipe/moldy, +/obj/item/tank/internals/plasma/empty{ + pixel_x = -10; + pixel_y = 4 + }, +/obj/item/tank/internals/plasma/empty{ + pixel_y = 4 + }, +/obj/item/popsicle_stick, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"bP" = ( +/obj/item/cigbutt/cigarbutt, +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/syringe/contraband/krokodil, +/obj/item/screwdriver, +/obj/effect/decal/cleanable/fuel_pool, +/obj/structure/reagent_dispensers/fueltank/large, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"bR" = ( +/obj/item/bedsheet/rainbow, +/obj/item/cigbutt, +/obj/item/clothing/ears/earmuffs, +/obj/structure/bed/maint, +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/spawner/random/contraband/permabrig_gear, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"dh" = ( +/obj/machinery/light/warm, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/squat) +"do" = ( +/obj/structure/chair/comfy/shuttle, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/squat) +"dC" = ( +/obj/item/storage/box/mousetraps, +/obj/structure/table/reinforced, +/obj/item/melee/flyswatter, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/squat) +"dF" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/squat) +"dL" = ( +/obj/item/toy/mecha/marauder, +/obj/structure/closet/cardboard, +/obj/item/toy/plush/snakeplushie, +/obj/item/storage/fancy/cigarettes/cigpack_robust, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"fF" = ( +/obj/item/clothing/suit/caution, +/obj/item/trash/syndi_cakes, +/obj/effect/decal/cleanable/plastic, +/obj/item/t_scanner, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"gq" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/shuttle, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/squat) +"gy" = ( +/obj/structure/window/reinforced/shuttle, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/squat) +"hk" = ( +/obj/structure/table/reinforced, +/obj/item/storage/bag/trash{ + pixel_x = -12; + pixel_y = 0 + }, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash{ + pixel_x = -6; + pixel_y = 0 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/squat) +"hm" = ( +/obj/item/mecha_parts/chassis/ripley, +/obj/item/mecha_parts/part/ripley_right_leg{ + pixel_x = 4; + pixel_y = -8 + }, +/obj/item/mecha_parts/part/ripley_left_leg{ + pixel_x = -4; + pixel_y = -7 + }, +/obj/item/mecha_parts/part/ripley_torso, +/obj/effect/decal/cleanable/fuel_pool, +/obj/structure/closet/crate/large{ + desc = "A hefty wooden crate with the word \"REJECT\" stamped on it. You'll need a crowbar to get it open." + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"ih" = ( +/obj/item/bedsheet/purple, +/obj/item/clothing/mask/cigarette/space_cigarette, +/obj/structure/bed/maint, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"iU" = ( +/obj/structure/chair/stool, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"jl" = ( +/obj/structure/table/reinforced, +/obj/item/gps/spaceruin{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/storage/backpack/industrial{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/clothing/suit/hazardvest{ + pixel_x = -8; + pixel_y = -6 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/squat) +"jJ" = ( +/obj/effect/spawner/random/trash/cigbutt, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"jN" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/stock_parts/scanning_module, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"jZ" = ( +/obj/machinery/door/airlock/external/glass, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/squat) +"kb" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/stock_parts/cell/crap/empty, +/obj/effect/decal/cleanable/plastic, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"kR" = ( +/obj/structure/closet/crate/preopen, +/obj/effect/decal/cleanable/shreds, +/obj/effect/spawner/random/maintenance, +/obj/item/sticker/toolbox, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"la" = ( +/obj/structure/lattice, +/obj/structure/grille/broken, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/squat) +"le" = ( +/obj/structure/door_assembly/door_assembly_mhatch, +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/shard, +/obj/item/stack/cable_coil/cut, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"lv" = ( +/obj/item/storage/box/zipties{ + pixel_x = -6; + pixel_y = 3 + }, +/obj/item/storage/box/stockparts/basic{ + pixel_x = 8; + pixel_y = -2 + }, +/obj/item/storage/box/disks{ + pixel_x = -8; + pixel_y = -4 + }, +/obj/structure/closet/crate/large, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"lA" = ( +/obj/structure/closet/crate/cardboard, +/obj/item/book/manual/wiki/engineering_guide, +/obj/item/book/manual/wiki/engineering_construction, +/obj/item/book/manual/ripley_build_and_repair, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"lE" = ( +/obj/machinery/airalarm{ + pixel_y = 25 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/squat) +"lY" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"mV" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/garbagetruck/squat) +"nX" = ( +/obj/structure/closet/crate/engineering/electrical, +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/firelock, +/obj/item/electronics/firelock, +/obj/item/electronics/firelock, +/obj/item/electronics/firelock, +/obj/item/electronics/firelock, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"oD" = ( +/obj/effect/spawner/random/trash/cigbutt, +/obj/item/trash/boritos/purple, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"pd" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/tank/internals/oxygen/yellow, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"pk" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/squat) +"pC" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/storage/bag/construction, +/obj/item/clothing/shoes/winterboots/ice_boots/eva{ + desc = "A heavy pair of boots with grips applied to the bottom to keep the wearer vertical while walking in freezing conditions. It's clearly been well used."; + name = "ice climbing boots" + }, +/obj/structure/closet/crate/engineering/electrical, +/obj/item/stock_parts/capacitor/adv, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"pM" = ( +/obj/item/lead_pipe, +/obj/structure/door_assembly/door_assembly_mhatch, +/obj/effect/decal/cleanable/glass, +/obj/item/restraints/handcuffs/cable/zipties/used, +/obj/item/shard, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"qF" = ( +/obj/structure/closet/cardboard, +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/pushbroom, +/obj/item/restraints/handcuffs/cable/zipties/used, +/obj/item/toy/brokenradio, +/obj/effect/spawner/random/engineering/tool, +/mob/living/basic/cockroach, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"rq" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed/dogbed, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"sb" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/folder/yellow, +/obj/item/geiger_counter, +/obj/item/boxcutter{ + pixel_x = 5 + }, +/obj/item/boxcutter{ + pixel_x = 10 + }, +/obj/item/stack/sticky_tape{ + pixel_x = -5 + }, +/obj/structure/closet/crate/preopen, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"sf" = ( +/obj/item/burner/fuel{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/ash, +/obj/item/reagent_containers/cup/beaker/plastic{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/structure/table, +/obj/item/reagent_containers/dropper{ + pixel_x = 7; + pixel_y = 0 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"sF" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/gloves{ + pixel_x = 10; + pixel_y = 8 + }, +/obj/item/storage/box/masks{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/machinery/recharger{ + pixel_y = -10 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/squat) +"tu" = ( +/obj/item/clothing/mask/cigarette/robust, +/obj/structure/closet/emcloset, +/obj/item/clothing/suit/utility/fire/heavy, +/obj/item/clothing/head/utility/hardhat/welding/atmos, +/obj/item/survivalcapsule/bathroom, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"tL" = ( +/obj/structure/reagent_dispensers/fueltank/large, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"ui" = ( +/obj/item/rollingpaper, +/obj/item/book/random{ + pixel_x = 7; + pixel_y = 2 + }, +/obj/item/clothing/gloves/fingerless{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/structure/table, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"un" = ( +/obj/item/food/branrequests, +/obj/item/kitchen/spoon/plastic, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"ut" = ( +/obj/item/clothing/suit/apron/overalls{ + pixel_y = -3 + }, +/obj/effect/decal/cleanable/fuel_pool, +/obj/structure/reagent_dispensers/fueltank/large, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"uW" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/fuel_pool, +/obj/structure/bonfire{ + desc = "Begging to be lit." + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"vq" = ( +/obj/item/shard, +/obj/effect/decal/cleanable/fuel_pool, +/obj/structure/closet/crate/trashcart/filled, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"vI" = ( +/obj/item/clothing/head/beanie/red{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/clothing/glasses/regular, +/obj/structure/table, +/obj/item/food/grown/kronkus{ + pixel_x = -5; + pixel_y = 8 + }, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"vJ" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/decal/cleanable/molten_object/large, +/obj/structure/broken_flooring/pile, +/obj/item/food/deadmouse/moldy, +/obj/item/stock_parts/water_recycler, +/obj/item/stock_parts/cell/lead, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"vW" = ( +/obj/effect/spawner/random/engineering/material_cheap, +/obj/structure/girder/displaced, +/obj/item/stock_parts/scanning_module, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"xg" = ( +/obj/structure/chair/office, +/obj/item/reagent_containers/cup/mortar, +/obj/item/pestle, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"yo" = ( +/obj/item/clothing/head/cone{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/machinery/light/warm, +/obj/machinery/power/apc{ + cell_type = /obj/item/stock_parts/cell/lead; + locked = 0; + pixel_y = -25; + start_charge = 0 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/squat) +"yF" = ( +/obj/item/trash/spacers_sidekick, +/obj/item/trash/flare, +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/spawner/random/contraband/narcotics, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"za" = ( +/obj/item/cigbutt/cigarbutt{ + desc = "A manky old cigar butt. A little cobweb is on the end."; + pixel_x = -8; + pixel_y = -2 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"zh" = ( +/obj/item/cigbutt, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"zo" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/structure/girder/displaced, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"zz" = ( +/obj/item/cigbutt/cigarbutt, +/obj/effect/decal/cleanable/oil, +/obj/effect/decal/cleanable/fuel_pool, +/obj/structure/closet/crate/trashcart, +/obj/item/storage/bag/trash, +/obj/item/clothing/shoes/sneakers/black, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"zC" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/squat) +"zN" = ( +/obj/structure/table/reinforced, +/obj/item/gas_filter, +/obj/item/gas_filter, +/obj/item/clothing/mask/gas, +/obj/item/clothing/head/utility/hardhat/orange{ + pixel_y = 8 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/squat) +"zY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/rods/ten, +/obj/item/toy/minimeteor, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"BN" = ( +/obj/item/tank/internals/plasma/full, +/obj/effect/decal/cleanable/fuel_pool, +/obj/structure/reagent_dispensers/fueltank/large, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Cm" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/mod/module/jetpack{ + pixel_y = 2; + pixel_x = -6 + }, +/obj/item/stock_parts/servo, +/obj/item/stock_parts/subspace/filter, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Dq" = ( +/obj/item/match, +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/spawner/random/entertainment/cigarette, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"DR" = ( +/obj/item/shard/plasma{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/trash/semki{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/food/badrecipe/moldy{ + pixel_x = -6; + pixel_y = -4 + }, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Er" = ( +/obj/item/clothing/suit/space, +/obj/item/clothing/head/helmet/space, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Fe" = ( +/obj/structure/fermenting_barrel, +/obj/item/reagent_containers/cup/bottle/welding_fuel{ + pixel_x = 9; + pixel_y = -6 + }, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"FD" = ( +/obj/structure/table/reinforced, +/obj/item/analyzer{ + pixel_y = 6 + }, +/obj/item/geiger_counter{ + pixel_x = -8; + pixel_y = -2 + }, +/obj/item/flashlight{ + pixel_x = 4 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/squat) +"FN" = ( +/obj/item/storage/fancy/cigarettes/cigpack_robust{ + pixel_x = -9; + pixel_y = 4 + }, +/obj/item/storage/fancy/cigarettes/cigpack_robust{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/structure/closet/crate/cardboard, +/obj/item/storage/fancy/cigarettes/cigpack_syndicate{ + pixel_x = -9 + }, +/obj/item/storage/fancy/cigarettes/cigpack_shadyjims{ + pixel_x = 1 + }, +/obj/item/gas_filter/damaged{ + pixel_x = -5; + pixel_y = -4 + }, +/obj/item/clothing/mask/gas{ + pixel_x = 1; + pixel_y = -3 + }, +/obj/item/clothing/mask/gas{ + desc = "This gas mask feels different. It's not quite like the others."; + pixel_x = -1; + pixel_y = -3 + }, +/obj/item/clothing/mask/gas{ + pixel_x = -4; + pixel_y = -3 + }, +/obj/item/clothing/mask/gas{ + pixel_x = -7; + pixel_y = -3 + }, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Gn" = ( +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/squat) +"Hk" = ( +/obj/item/food/pizzaslice/moldy/bacteria, +/obj/item/stack/rods/ten, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Hn" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/decal/cleanable/oil/slippery, +/obj/item/pen, +/obj/item/stock_parts/subspace/analyzer, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Hw" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/spawner/random/trash/cigbutt, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"HD" = ( +/obj/structure/mecha_wreckage/ripley, +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/decal/cleanable/molten_object, +/obj/item/organ/internal/tongue/robot, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"HN" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/lead, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/squat) +"HZ" = ( +/turf/closed/wall/mineral/titanium, +/area/ruin/space/has_grav/garbagetruck/squat) +"Jx" = ( +/obj/structure/chem_separator, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"JL" = ( +/obj/machinery/space_heater/improvised_chem_heater, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"JO" = ( +/obj/item/storage/pill_bottle/stimulant{ + pixel_x = 1; + pixel_y = 3 + }, +/obj/item/storage/pill_bottle/maintenance_pill/full{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/structure/closet/crate/preopen, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/reagent_containers/syringe/contraband/methamphetamine{ + pixel_x = -5; + pixel_y = -7 + }, +/obj/item/reagent_containers/syringe/contraband/krokodil{ + pixel_x = -1; + pixel_y = -2 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"JR" = ( +/obj/effect/decal/cleanable/ash, +/obj/effect/decal/cleanable/oil/streak, +/mob/living/basic/trooper/russian, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"JW" = ( +/obj/machinery/door/poddoor/shutters/preopen, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"JX" = ( +/turf/open/space/basic, +/area/space) +"Ko" = ( +/obj/machinery/computer/terminal{ + content = list("Property of Spinward-Upsilon Sanitation Department. Authorised employees only."); + desc = "A garbage truck's dusty old control console."; + name = "dashboard"; + upperinfo = "Controls locked." + }, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/squat) +"Kq" = ( +/obj/structure/closet/crate, +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/airlock_painter, +/obj/item/pen/screwdriver{ + pixel_y = -2; + pixel_x = 8 + }, +/obj/item/rcd_ammo, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"LV" = ( +/obj/machinery/power/smes, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/squat) +"Ml" = ( +/obj/structure/plasticflaps/opaque, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"MJ" = ( +/obj/structure/lattice/catwalk, +/obj/item/crowbar/large/emergency, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/squat) +"MQ" = ( +/obj/item/stock_parts/cell/crap/empty{ + pixel_x = -4; + pixel_y = 10 + }, +/obj/item/clothing/mask/cigarette/space_cigarette{ + pixel_x = -5; + pixel_y = 7 + }, +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/crowbar/hammer{ + desc = "A large claw hammer. It's been heavily used, as evidenced by the dents and scratches covering its head."; + name = "claw hammer" + }, +/obj/item/storage/fancy/cigarettes/cigpack_cannabis{ + pixel_x = 6; + pixel_y = -2 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Nd" = ( +/obj/item/binoculars, +/obj/item/crowbar/large/old, +/obj/item/tank/jetpack/improvised, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Ol" = ( +/obj/item/plate_shard, +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Pz" = ( +/obj/structure/sign/warning, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/garbagetruck/squat) +"PE" = ( +/obj/machinery/door/airlock/shuttle, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/squat) +"PH" = ( +/obj/item/bikehorn/rubberducky, +/obj/structure/closet/mini_fridge/grimy, +/obj/item/reagent_containers/cup/soda_cans/grey_bull, +/obj/item/reagent_containers/cup/soda_cans/monkey_energy, +/obj/item/reagent_containers/cup/soda_cans/monkey_energy, +/obj/item/reagent_containers/cup/soda_cans/pwr_game, +/obj/item/reagent_containers/cup/blastoff_ampoule, +/obj/structure/table, +/obj/item/food/drug/moon_rock, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Rw" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"RD" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"RP" = ( +/obj/structure/table, +/obj/item/food/drug/moon_rock{ + pixel_x = 7; + pixel_y = 4 + }, +/obj/item/lighter/skull{ + light_color = "#F57247"; + pixel_x = 8; + pixel_y = -3 + }, +/obj/item/weldingtool/largetank{ + light_color = "#F57247"; + max_fuel = 50; + pixel_x = -7; + pixel_y = 3 + }, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Ss" = ( +/obj/item/cigbutt/roach, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"To" = ( +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Tv" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/trash/can/food/beans{ + pixel_x = 8; + pixel_y = -4 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"TD" = ( +/obj/item/food/deadmouse, +/obj/item/trash/candy, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Vw" = ( +/obj/item/rollingpaper{ + pixel_x = 8; + pixel_y = -6 + }, +/obj/item/rollingpaper{ + pixel_x = -2; + pixel_y = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/wooden, +/obj/item/clothing/glasses/night{ + pixel_x = -1; + pixel_y = -2 + }, +/obj/item/melee/roastingstick{ + pixel_x = 11 + }, +/obj/item/flamethrower/full/tank{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"VL" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/turf/open/space/basic, +/area/space) +"WK" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/clothing/shoes/workboots{ + pixel_x = 7; + pixel_y = 5 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"WV" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Xt" = ( +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Xv" = ( +/obj/item/food/deadmouse, +/obj/item/clothing/shoes/sneakers/red, +/obj/item/clothing/mask/cigarette/carp, +/obj/item/extinguisher/mini, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"XS" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/structure/firelock_frame, +/obj/structure/broken_flooring/pile, +/obj/item/reagent_containers/syringe/contraband/methamphetamine, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Ye" = ( +/obj/structure/lattice, +/obj/structure/grille, +/obj/effect/spawner/random/entertainment/plushie, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/squat) +"Zu" = ( +/obj/item/food/candy, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate/trashcart, +/obj/item/storage/bag/trash/filled, +/obj/item/trash/champagne_cork, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) + +(1,1,1) = {" +JX +JX +pk +pk +pk +HZ +VL +JX +JX +JX +JX +JX +JX +JX +JX +JX +JX +JX +JX +JX +"} +(2,1,1) = {" +JX +HZ +gy +gy +HZ +HZ +mV +mV +mV +mV +mV +mV +mV +mV +mV +mV +mV +mV +mV +mV +"} +(3,1,1) = {" +la +gq +sF +HN +dC +HZ +mV +bR +ih +un +aI +rq +Fe +lv +pM +tu +hm +pC +fF +Pz +"} +(4,1,1) = {" +Ye +gy +Ko +do +dh +HZ +mV +ut +WK +zh +WV +Tv +za +aG +zo +HD +MQ +qF +Cm +mV +"} +(5,1,1) = {" +zC +gy +jl +zN +dF +HZ +mV +zz +Xt +jJ +Xt +Xt +DR +uW +XS +nX +BN +vJ +vW +mV +"} +(6,1,1) = {" +la +gy +gq +HZ +lE +PE +JW +WV +WV +WV +Xt +To +Hw +Hk +vq +zY +Hn +kb +le +mV +"} +(7,1,1) = {" +la +gq +hk +FD +dF +PE +JW +oD +Xt +JO +RD +To +Xt +TD +Xt +JR +Kq +sb +dL +mV +"} +(8,1,1) = {" +Ye +gq +Gn +Gn +dF +HZ +mV +vI +Ss +sf +iU +Xt +Xt +ac +To +bb +jN +lA +kR +mV +"} +(9,1,1) = {" +la +gq +Gn +dF +yo +HZ +mV +ui +xg +RP +Jx +lY +JL +tL +Xt +Rw +To +Ol +pd +mV +"} +(10,1,1) = {" +zC +gq +Gn +ap +LV +HZ +mV +PH +Xt +FN +Vw +bP +Zu +To +Dq +yF +Nd +Er +Xv +Pz +"} +(11,1,1) = {" +JX +HZ +jZ +gq +HZ +HZ +mV +mV +mV +mV +mV +mV +mV +Ml +Ml +Ml +mV +mV +mV +mV +"} +(12,1,1) = {" +JX +JX +pk +pk +MJ +HZ +VL +JX +JX +JX +JX +JX +JX +JX +JX +JX +JX +JX +JX +JX +"} diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck4.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck4.dmm new file mode 100644 index 00000000000000..a636b7220cab54 --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/garbagetruck4.dmm @@ -0,0 +1,1158 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aj" = ( +/obj/machinery/power/smes, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/toystore) +"bL" = ( +/obj/structure/table/reinforced, +/obj/item/storage/bag/trash{ + pixel_x = -12; + pixel_y = 0 + }, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash{ + pixel_x = -6; + pixel_y = 0 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/toystore) +"bU" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/toystore) +"cf" = ( +/obj/item/paint_palette, +/obj/item/storage/crayons, +/obj/structure/spider/stickyweb, +/obj/structure/table_frame/wood, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"cg" = ( +/obj/structure/spider/stickyweb, +/obj/item/clothing/under/costume/mummy, +/obj/item/clothing/mask/mummy, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"cq" = ( +/obj/machinery/light/warm, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/toystore) +"cT" = ( +/obj/item/c_tube, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"dn" = ( +/obj/structure/window/reinforced/shuttle, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"dq" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/item/trash/candy{ + pixel_x = 7 + }, +/obj/item/lead_pipe{ + pixel_x = -2; + pixel_y = -4 + }, +/obj/item/plate_shard{ + pixel_x = 6; + pixel_y = 0 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"eL" = ( +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/toystore) +"hD" = ( +/obj/structure/mannequin/wood{ + desc = "Oh, so this is a dress-up game now. It makes eye contact." + }, +/obj/item/clothing/shoes/kindle_kicks{ + pixel_y = -10 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"hH" = ( +/obj/structure/spider/solid, +/obj/item/book/manual/wiki/cytology, +/obj/effect/decal/cleanable/plastic, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"hS" = ( +/obj/item/toy/xmas_cracker, +/obj/item/toy/xmas_cracker, +/obj/item/toy/toy_xeno, +/obj/item/clothing/head/costume/party/festive, +/obj/effect/decal/cleanable/fuel_pool, +/obj/structure/closet/crate/trashcart, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"it" = ( +/obj/item/trash/candle, +/obj/item/food/canned/pine_nuts, +/obj/item/kitchen/fork, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"jD" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/shuttle, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"kj" = ( +/obj/structure/mannequin/plastic, +/obj/structure/spider/stickyweb, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"kz" = ( +/obj/item/storage/wallet/random, +/obj/item/coin/plastic, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"ld" = ( +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"lg" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/toystore) +"lm" = ( +/obj/structure/spider/stickyweb, +/obj/structure/spider/sticky, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"mf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/tank_holder, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"mM" = ( +/obj/structure/spider/stickyweb, +/obj/item/food/badrecipe/moldy, +/obj/item/storage/box/pdas, +/obj/effect/spawner/random/entertainment/money_small, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"ng" = ( +/obj/item/vending_refill/snack, +/obj/item/food/candy, +/obj/structure/broken_flooring/side, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"nM" = ( +/turf/closed/wall/mineral/titanium, +/area/ruin/space/has_grav/garbagetruck/toystore) +"nP" = ( +/obj/structure/bed/maint, +/obj/item/pen/survival, +/obj/item/bedsheet/grey, +/obj/effect/decal/cleanable/shreds, +/obj/effect/spawner/random/bureaucracy/pen, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"pi" = ( +/obj/item/chair/wood, +/obj/item/c_tube, +/obj/effect/decal/cleanable/generic, +/obj/structure/broken_flooring/corner, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"ps" = ( +/obj/effect/spawner/random/trash, +/obj/effect/spawner/random/bureaucracy/paper, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"pA" = ( +/obj/structure/spider/effigy, +/obj/structure/spider/stickyweb, +/obj/item/coin/silver, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"pN" = ( +/obj/structure/closet/crate/cardboard/mothic, +/obj/item/clothing/head/mothcap, +/obj/item/clothing/mask/gas/explorer, +/obj/item/clothing/under/misc/overalls, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/glasses/meson, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"qX" = ( +/obj/structure/spider/sticky, +/obj/item/food/badrecipe/moldy, +/obj/structure/spider/stickyweb, +/obj/item/food/spidereggs{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/structure/closet/crate/trashcart, +/obj/item/food/spidereggs{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/effect/spawner/random/trash/food_packaging, +/obj/item/food/spidereggs, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"rb" = ( +/obj/structure/sign/warning, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/garbagetruck/toystore) +"rc" = ( +/obj/effect/decal/cleanable/oil, +/obj/item/flashlight/flare/torch, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"ri" = ( +/obj/structure/lattice/catwalk, +/obj/item/crowbar/large/emergency, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/toystore) +"rr" = ( +/obj/structure/floodlight_frame, +/obj/effect/spawner/random/decoration/glowstick, +/obj/effect/spawner/random/decoration/glowstick, +/obj/effect/spawner/random/decoration/glowstick, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"rI" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/toystore) +"sh" = ( +/obj/item/food/badrecipe/moldy/bacteria, +/obj/effect/decal/cleanable/ants, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"sw" = ( +/obj/effect/decal/cleanable/glass/plastitanium/screws, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/cardboard_cutout, +/obj/item/clothing/neck/tie/horrible, +/obj/item/sticker/clown{ + pixel_y = 8 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"sA" = ( +/obj/item/clothing/head/costume/rabbitears, +/obj/item/grown/bananapeel, +/obj/effect/decal/cleanable/garbage, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"sO" = ( +/obj/item/clothing/suit/syndicatefake, +/obj/item/weldingtool/largetank{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"ts" = ( +/obj/structure/spider/solid, +/obj/structure/spider/stickyweb, +/obj/structure/closet/crate/trashcart/filled, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"tQ" = ( +/obj/item/rack_parts, +/obj/structure/spider/stickyweb, +/obj/item/folder/blue{ + pixel_x = -3; + pixel_y = -2 + }, +/obj/item/folder/blue, +/obj/item/crowbar/hammer{ + desc = "It's a hammer with 'OLD RELIABLE' written on the handle. It's seen some use." + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"ub" = ( +/obj/structure/filingcabinet, +/obj/structure/spider/stickyweb, +/obj/item/storage/wallet/random, +/obj/item/pen/blue, +/obj/item/paper/fluff/junkmail_redpill, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"uT" = ( +/obj/structure/table/reinforced, +/obj/item/gas_filter, +/obj/item/gas_filter, +/obj/item/clothing/mask/gas, +/obj/item/clothing/head/utility/hardhat/orange{ + pixel_y = 8 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/toystore) +"uX" = ( +/obj/structure/table/reinforced, +/obj/item/gps/spaceruin{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/storage/backpack/industrial{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/clothing/suit/hazardvest{ + pixel_x = -8; + pixel_y = -6 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/toystore) +"vz" = ( +/obj/structure/frame/computer, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"wo" = ( +/obj/machinery/door/airlock/shuttle, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"wu" = ( +/obj/machinery/airalarm{ + pixel_y = 25 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/toystore) +"ww" = ( +/obj/machinery/door/airlock/external/glass, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"wy" = ( +/obj/item/barcodescanner, +/obj/effect/decal/cleanable/dirt, +/obj/item/cardpack/series_one{ + pixel_x = 2; + pixel_y = 1 + }, +/obj/item/cardpack/series_one{ + pixel_y = 4 + }, +/obj/item/cardpack/series_one{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/cardpack/series_one, +/obj/structure/closet/crate/cardboard, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"wE" = ( +/obj/structure/closet/crate/wooden, +/obj/item/toy/figure/wizard{ + pixel_x = 8; + pixel_y = 6 + }, +/obj/item/toy/figure/clown{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/toy/figure/secofficer{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/toy/figure/secofficer{ + pixel_x = 8; + pixel_y = 2 + }, +/obj/item/toy/figure/secofficer{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/item/toy/figure/dsquad{ + pixel_x = 4; + pixel_y = -1 + }, +/obj/item/toy/figure/dsquad{ + pixel_y = -1 + }, +/obj/item/toy/figure/dsquad{ + pixel_x = -4; + pixel_y = -1 + }, +/obj/item/toy/figure/dsquad{ + pixel_x = -8; + pixel_y = -1 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"wK" = ( +/obj/effect/decal/cleanable/robot_debris/down, +/obj/item/clothing/under/costume/skeleton, +/obj/item/clothing/mask/gas/prop, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"wW" = ( +/obj/structure/spider/stickyweb, +/obj/item/food/badrecipe/moldy, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"xd" = ( +/obj/effect/decal/cleanable/robot_debris/up, +/obj/effect/decal/cleanable/oil, +/obj/item/melee/skateboard, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"xf" = ( +/obj/structure/door_assembly/door_assembly_wood, +/obj/effect/decal/cleanable/plastic, +/obj/effect/decal/cleanable/oil/slippery, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"xC" = ( +/obj/item/stack/sheet/plastic/five, +/obj/item/stack/sheet/plastic/five, +/obj/structure/mannequin/plastic, +/obj/item/clothing/neck/tie/black, +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/plastic, +/obj/item/spear, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"xI" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/decal/cleanable/plastic, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"xQ" = ( +/obj/item/storage/box/mousetraps, +/obj/structure/table/reinforced, +/obj/item/melee/flyswatter, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/toystore) +"xW" = ( +/obj/structure/broken_flooring/pile, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"yb" = ( +/obj/item/food/canned/tomatoes{ + pixel_x = 3; + pixel_y = 6 + }, +/obj/item/food/canned/tomatoes{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/structure/closet/crate/cardboard/mothic, +/obj/item/food/uncooked_rice{ + pixel_x = 0; + pixel_y = -6 + }, +/obj/item/food/uncooked_rice{ + pixel_x = 2; + pixel_y = -6 + }, +/obj/item/food/uncooked_rice{ + pixel_x = 4; + pixel_y = -6 + }, +/obj/item/food/uncooked_rice{ + pixel_x = 6; + pixel_y = -6 + }, +/obj/item/food/uncooked_rice{ + pixel_x = 8; + pixel_y = -6 + }, +/obj/item/food/cracker, +/obj/item/food/cracker, +/obj/item/food/cracker, +/obj/item/food/cracker, +/obj/item/food/cracker, +/obj/item/food/cracker{ + pixel_x = -2; + pixel_y = -4 + }, +/obj/item/food/cracker{ + pixel_x = -7; + pixel_y = -2 + }, +/obj/item/food/cracker{ + pixel_y = 1 + }, +/obj/item/food/cracker{ + pixel_x = 2; + pixel_y = 1 + }, +/obj/item/food/cracker{ + pixel_y = -2 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"yP" = ( +/obj/structure/lattice, +/obj/structure/grille, +/obj/effect/spawner/random/entertainment/plushie, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/toystore) +"yS" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"zs" = ( +/obj/machinery/computer/terminal{ + content = list("Property of Spinward-Upsilon Sanitation Department. Authorised employees only."); + desc = "A garbage truck's dusty old control console."; + name = "dashboard"; + upperinfo = "Controls locked." + }, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/toystore) +"AG" = ( +/obj/item/clothing/glasses/blindfold, +/obj/effect/decal/cleanable/plastic, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"AQ" = ( +/obj/item/food/spidereggs, +/obj/effect/mob_spawn/corpse/human{ + brute_damage = 200; + mob_type = /mob/living/carbon/human/species/moth; + outfit = /datum/outfit/abductorcorpse; + oxy_damage = 200 + }, +/obj/structure/spider/cocoon{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/mod/control/pre_equipped/standard{ + pixel_x = -6; + pixel_y = 4 + }, +/mob/living/basic/spider/giant/viper, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"BK" = ( +/obj/structure/closet/mini_fridge, +/obj/item/storage/cans/sixsoda, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"BO" = ( +/obj/structure/spider/stickyweb, +/obj/item/stock_parts/water_recycler, +/obj/effect/decal/cleanable/insectguts, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Dm" = ( +/obj/item/trash/cheesie, +/obj/item/shovel, +/obj/item/seeds/nettle, +/obj/item/popsicle_stick, +/obj/item/hatchet/wooden, +/obj/item/cigbutt, +/obj/item/secateurs, +/obj/item/pickaxe/rusted, +/obj/item/boxcutter, +/obj/structure/closet/crate/preopen, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Dv" = ( +/obj/machinery/door/poddoor/shutters/preopen, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"ER" = ( +/obj/structure/chair/comfy/shuttle, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/toystore) +"FM" = ( +/obj/structure/closet/crate/trashcart, +/obj/item/clothing/mask/surgical, +/obj/item/clothing/suit/costume/whitedress, +/obj/structure/broken_flooring/singular, +/obj/item/clothing/head/costume/nursehat, +/obj/item/clothing/neck/stethoscope, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Gt" = ( +/obj/structure/sign/flag/mothic, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/garbagetruck/toystore) +"He" = ( +/obj/structure/spider/passage, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Hj" = ( +/obj/structure/lattice, +/obj/structure/grille/broken, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Hv" = ( +/obj/effect/decal/cleanable/glass/plastitanium/screws, +/obj/effect/spawner/random/bureaucracy/paper, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Hy" = ( +/obj/item/toy/xmas_cracker, +/obj/item/kirbyplants/synthetic/plant26, +/obj/item/storage/pill_bottle/probital, +/obj/item/clothing/head/costume/festive, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"HK" = ( +/obj/structure/closet/crate/large, +/obj/item/rwd/loaded, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Ix" = ( +/obj/structure/closet/cardboard, +/obj/item/bodypart/chest/robot, +/obj/item/toy/katana, +/obj/item/toy/plush/snakeplushie, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"IQ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/pile, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"IS" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Ja" = ( +/obj/structure/closet/crate/trashcart/filled, +/obj/effect/decal/cleanable/plastic, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/card/cardboard, +/obj/item/broken_bottle, +/obj/item/cardpack/resin, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"JB" = ( +/obj/structure/spider/stickyweb, +/obj/structure/closet/crate/cardboard, +/obj/item/bikehorn/rubberducky, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/head/hats/tophat{ + desc = "It's a fancy looking hat. Inside is a label with a triangle drawn on it." + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"JI" = ( +/obj/item/dice/d10, +/obj/structure/filingcabinet/chestdrawer, +/obj/item/computer_disk/maintenance/modsuit_control, +/obj/item/computer_disk/maintenance/modsuit_control, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"KR" = ( +/obj/item/clothing/head/cone{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/machinery/light/warm, +/obj/machinery/power/apc{ + cell_type = /obj/item/stock_parts/cell/lead; + locked = 0; + pixel_y = -25; + start_charge = 0 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Lm" = ( +/obj/effect/decal/cleanable/garbage, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Lu" = ( +/obj/item/kirbyplants/synthetic/plant27, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Mp" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/lead, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/toystore) +"MK" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/item/mail/junkmail, +/obj/item/healthanalyzer/simple/disease, +/obj/item/sticker/smile, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"OZ" = ( +/obj/item/trash/candy, +/obj/structure/broken_flooring/pile, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Pn" = ( +/obj/structure/closet/crate/mail, +/obj/item/trash/can, +/obj/item/mail/junkmail, +/obj/item/mail/junkmail, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Pv" = ( +/obj/structure/spider/stickyweb, +/obj/item/kirbyplants/synthetic/plant29, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"PJ" = ( +/obj/structure/spider/passage, +/obj/effect/spawner/random/mod/maint, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"PU" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/gloves{ + pixel_x = 10; + pixel_y = 8 + }, +/obj/item/storage/box/masks{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/machinery/recharger{ + pixel_y = -10 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Qe" = ( +/obj/item/hand_labeler, +/obj/item/hand_labeler_refill, +/obj/structure/spider/stickyweb, +/mob/living/basic/spider/giant/hunter/scrawny, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"QD" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/entertainment/plushie_delux, +/obj/effect/spawner/random/entertainment/toy, +/obj/item/c_tube{ + pixel_y = -6 + }, +/obj/structure/spider/stickyweb, +/obj/item/toy/sword{ + pixel_y = 4 + }, +/obj/item/toy/sword{ + pixel_y = 8 + }, +/obj/item/kitchen/spoon/plastic, +/obj/effect/spawner/random/entertainment/toy, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Rb" = ( +/obj/item/stack/spacecash/c500, +/obj/item/coin/plastic, +/obj/structure/safe, +/obj/structure/spider/stickyweb, +/obj/item/tank/jetpack/oxygen{ + desc = "A tank of compressed oxygen for use as propulsion in zero-gravity areas. It's blue, and has a triangle chiselled into the paint." + }, +/obj/item/switchblade, +/obj/item/survivalcapsule/bathroom, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Rl" = ( +/obj/item/paper/crumpled, +/obj/item/stock_parts/cell/hyper, +/obj/item/hand_labeler, +/obj/item/hand_labeler_refill, +/obj/item/hand_labeler_refill, +/obj/item/hand_labeler_refill, +/obj/item/hand_labeler_refill, +/obj/item/barcodescanner, +/obj/item/pen, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Sb" = ( +/obj/structure/reagent_dispensers/beerkeg, +/obj/structure/spider/stickyweb, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Sj" = ( +/obj/item/trash/pistachios, +/obj/structure/closet/crate/cardboard/mothic, +/obj/item/storage/fancy/pickles_jar, +/obj/item/food/spaghetti/raw, +/obj/item/food/spaghetti/raw, +/obj/item/food/sustenance_bar/wonka, +/obj/item/food/fueljacks_lunch, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Sk" = ( +/obj/effect/spawner/random/decoration/paint, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"ST" = ( +/obj/machinery/power/terminal, +/obj/structure/tank_dispenser/oxygen, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/toystore) +"TO" = ( +/obj/item/mop, +/obj/item/multitool{ + pixel_x = 8; + pixel_y = -6 + }, +/obj/structure/mop_bucket, +/obj/item/broken_bottle, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"UD" = ( +/obj/structure/closet/preopen, +/obj/item/stack/spacecash/c200, +/obj/item/storage/backpack/satchel, +/obj/item/toy/plush/shark, +/obj/item/instrument/banjo, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"VL" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/turf/open/space/basic, +/area/space) +"Wl" = ( +/obj/structure/plasticflaps/opaque, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"WZ" = ( +/obj/item/paper/fluff/junkmail_generic, +/obj/item/pen/red, +/obj/structure/table_frame/wood, +/obj/item/mod/paint{ + pixel_x = -6; + pixel_y = -2 + }, +/obj/effect/spawner/random/decoration/paint, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Xg" = ( +/obj/structure/spider/stickyweb, +/obj/item/clothing/ears/earmuffs, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Xs" = ( +/obj/structure/spider/passage, +/mob/living/basic/spider/giant/hunter/scrawny, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"XI" = ( +/obj/structure/spider/solid, +/obj/item/food/badrecipe/moldy/bacteria, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"XL" = ( +/obj/item/scooter_frame, +/obj/effect/decal/cleanable/oil/streak, +/obj/effect/decal/cleanable/garbage, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Ym" = ( +/obj/structure/table/reinforced, +/obj/item/analyzer{ + pixel_y = 6 + }, +/obj/item/geiger_counter{ + pixel_x = -8; + pixel_y = -2 + }, +/obj/item/flashlight{ + pixel_x = 4 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Yr" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Yz" = ( +/obj/structure/spider/stickyweb, +/obj/structure/tank_holder/extinguisher, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"YR" = ( +/obj/item/food/badrecipe/moldy/bacteria, +/obj/effect/spawner/random/bureaucracy/paper, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Zi" = ( +/turf/open/space/basic, +/area/space) +"ZM" = ( +/obj/item/papercutter, +/obj/item/paper_bin, +/obj/structure/spider/stickyweb, +/obj/structure/spider/spikes, +/obj/structure/table_frame/wood, +/obj/effect/spawner/random/bureaucracy/paper, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) + +(1,1,1) = {" +Zi +Zi +lg +lg +lg +nM +VL +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +"} +(2,1,1) = {" +Zi +nM +dn +dn +nM +nM +Yr +Yr +Yr +Yr +Yr +Yr +Yr +Yr +Yr +Yr +Yr +Yr +Yr +Yr +"} +(3,1,1) = {" +Hj +jD +PU +Mp +xQ +nM +Yr +sw +wy +FM +YR +Qe +cf +ZM +WZ +xC +Ix +dq +TO +rb +"} +(4,1,1) = {" +yP +dn +zs +ER +cq +nM +Yr +ng +pi +OZ +xI +IS +xf +ub +AG +lm +cg +sO +Dm +Yr +"} +(5,1,1) = {" +rI +dn +uX +uT +bU +nM +Yr +mf +xW +rc +Hv +ps +HK +ts +Pv +cT +xd +wK +QD +Yr +"} +(6,1,1) = {" +Hj +dn +jD +nM +wu +wo +Dv +IS +ld +ld +ld +Lu +XL +He +Xs +wW +JB +sA +wE +Yr +"} +(7,1,1) = {" +Hj +jD +bL +Ym +bU +wo +Dv +ld +ld +ld +IS +ld +Sb +Rb +IQ +Yz +PJ +pA +mM +Yr +"} +(8,1,1) = {" +yP +jD +eL +eL +bU +nM +Yr +rr +ld +Sk +ld +ld +Ja +hS +Lm +BO +XI +hH +qX +Yr +"} +(9,1,1) = {" +Hj +jD +eL +bU +KR +nM +Gt +UD +nP +pN +Pn +ld +kj +JI +sh +ld +Xg +AQ +tQ +Yr +"} +(10,1,1) = {" +rI +jD +eL +ST +aj +nM +Yr +BK +it +Sj +yb +yS +vz +MK +kz +ld +Hy +Rl +hD +rb +"} +(11,1,1) = {" +Zi +nM +ww +jD +nM +nM +Yr +Yr +Yr +Yr +Yr +Yr +Yr +Wl +Wl +Wl +Yr +Yr +Yr +Yr +"} +(12,1,1) = {" +Zi +Zi +lg +lg +ri +nM +VL +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +"} diff --git a/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm b/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm index 01009e413498fe..470cd2d83791b8 100644 --- a/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm +++ b/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm @@ -356,8 +356,8 @@ /area/ruin/space/has_grav/powered/hilbertresearchfacility) "jC" = ( /mob/living/simple_animal/slime{ - colour = "bluespace"; - rabid = 1 + rabid = 1; + slime_type = /datum/slime_type/bluespace }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/mineral/titanium/tiled/purple, @@ -899,8 +899,8 @@ /area/ruin/space/has_grav/powered/hilbertresearchfacility) "wY" = ( /mob/living/simple_animal/slime{ - colour = "bluespace"; - rabid = 1 + rabid = 1; + slime_type = /datum/slime_type/bluespace }, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/hilbertresearchfacility) @@ -2186,8 +2186,8 @@ }, /obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/slime{ - colour = "bluespace"; - rabid = 1 + rabid = 1; + slime_type = /datum/slime_type/bluespace }, /turf/open/floor/mineral/titanium/tiled/purple, /area/ruin/space/has_grav/powered/hilbertresearchfacility) @@ -2312,8 +2312,8 @@ /area/ruin/space/has_grav/powered/hilbertresearchfacility) "Ze" = ( /mob/living/simple_animal/slime{ - colour = "bluespace"; - rabid = 1 + rabid = 1; + slime_type = /datum/slime_type/bluespace }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/mineral/plastitanium, diff --git a/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm b/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm index 52cfe31d2b8d5f..4b6022953d5daa 100644 --- a/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm +++ b/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm @@ -1731,7 +1731,7 @@ /obj/item/wallframe/telescreen/entertainment{ icon_state = "entertainment"; name = "relatively interesting news"; - desc = "It's been live this whole time, news from Nanotrasen core space, just an hour ago."; + desc = "It's been live this whole time, news from Symphionia core space, just an hour ago."; light_power = 0.5; light_range = 3 }, @@ -2179,7 +2179,7 @@ /obj/structure/frame/computer{ anchored = 1; icon_state = "1"; - name = "Syndicate bridge console"; + name = "Symphionia bridge console"; desc = "At least it used to be." }, /obj/effect/turf_decal{ @@ -2896,7 +2896,7 @@ /obj/structure/showcase/machinery/microwave{ icon_state = "mwbloodyo"; desc = "A product so good your enemies still own one. The dim bloody light compliments the TV's."; - name = "Nanotrasen brand microwave"; + name = "Symphionia brand microwave"; pixel_y = 7 }, /obj/structure/cable, diff --git a/_maps/RandomRuins/SpaceRuins/intactemptyship.dmm b/_maps/RandomRuins/SpaceRuins/intactemptyship.dmm index f54460937b02ad..e0c166aee2c5b5 100644 --- a/_maps/RandomRuins/SpaceRuins/intactemptyship.dmm +++ b/_maps/RandomRuins/SpaceRuins/intactemptyship.dmm @@ -84,7 +84,7 @@ /turf/open/floor/mineral/titanium/purple, /area/ruin/space/has_grav/powered/authorship) "y" = ( -/mob/living/simple_animal/bot/medbot/derelict, +/mob/living/basic/bot/medbot/derelict, /turf/open/floor/mineral/titanium/purple, /area/ruin/space/has_grav/powered/authorship) "z" = ( diff --git a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm index 2b2fc26649a201..09eb88b1fdf1e2 100644 --- a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm @@ -108,7 +108,7 @@ /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /obj/machinery/door/airlock/centcom{ - name = "Nanotrasen Real Locked Door"; + name = "Symphionia Real Locked Door"; desc = "Truly, a marvel of modern engineering." }, /turf/open/floor/iron/dark, @@ -258,7 +258,7 @@ /area/ruin/space/has_grav/listeningstation) "nX" = ( /obj/machinery/door/airlock/centcom{ - name = "Syndicate Secure Airlock System"; + name = "Symphionia Secure Airlock System"; desc = "Truly, a marvel of modern engineering." }, /obj/structure/cable, @@ -665,7 +665,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/structure/reagent_dispensers/plumbed{ - name = "Syndicate Ceritified Drinking Water"; + name = "Symphionia Ceritified Drinking Water"; desc = "Who knew water could taste so good?" }, /obj/effect/mapping_helpers/burnt_floor, @@ -680,7 +680,7 @@ dwidth = 4; height = 5; shuttle_id = "caravansyndicate1_listeningpost"; - name = "Syndicate Listening Post"; + name = "Symphionia Listening Post"; width = 9 }, /turf/template_noop, diff --git a/_maps/RandomRuins/SpaceRuins/mimesvsclowns.dmm b/_maps/RandomRuins/SpaceRuins/mimesvsclowns.dmm index d7186f44776772..6a7c71ad938904 100644 --- a/_maps/RandomRuins/SpaceRuins/mimesvsclowns.dmm +++ b/_maps/RandomRuins/SpaceRuins/mimesvsclowns.dmm @@ -6,6 +6,11 @@ /area/ruin) "dI" = ( /obj/item/grown/bananapeel, +/obj/item/ammo_casing/a357/spent{ + dir = 9; + pixel_x = -13; + pixel_y = 10 + }, /turf/open/floor/iron/checker/airless, /area/ruin) "ef" = ( @@ -71,20 +76,21 @@ /obj/machinery/atmospherics/components/unary/passive_vent{ dir = 4 }, -/obj/item/ammo_casing/energy/c3dbullet{ - pixel_y = 10; - pixel_x = 115; - dir = 9 - }, /obj/effect/decal/cleanable/blood/gibs, /obj/machinery/light/small/broken/directional/south, +/obj/item/ammo_casing/a357/spent, /turf/open/floor/iron/checker/airless, /area/ruin) "uc" = ( -/obj/item/ammo_casing/energy/c3dbullet, /obj/effect/decal/cleanable/blood/footprints{ dir = 4 }, +/obj/item/ammo_casing/a357/spent{ + pixel_x = -5; + dir = 5; + pixel_y = 6 + }, +/obj/item/ammo_casing/a357/spent, /obj/item/gps/spaceruin, /turf/open/floor/plating/airless, /area/ruin) @@ -139,11 +145,6 @@ /turf/open/floor/iron/checker/airless, /area/ruin) "Ar" = ( -/obj/item/ammo_casing/energy/c3dbullet{ - dir = 5; - pixel_x = 59; - pixel_y = 6 - }, /obj/item/clothing/mask/gas/clown_hat{ pixel_y = 39 }, @@ -216,7 +217,6 @@ /area/ruin) "JK" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber, -/obj/item/ammo_casing/energy/c3dbullet, /obj/effect/decal/cleanable/blood/gibs/up, /turf/open/floor/plating/airless, /area/ruin) @@ -252,8 +252,8 @@ /area/ruin) "Pq" = ( /obj/machinery/light/broken/directional/north, -/obj/item/ammo_casing/energy/c3dbullet, /obj/structure/reagent_dispensers/watertank, +/obj/item/ammo_casing/a357/spent, /turf/open/floor/iron/checker/airless, /area/ruin) "Qb" = ( @@ -267,7 +267,6 @@ /turf/open/floor/iron/checker/airless, /area/ruin) "Vj" = ( -/obj/structure/grille, /obj/effect/spawner/structure/window/reinforced, /obj/effect/mapping_helpers/damaged_window, /obj/effect/decal/cleanable/blood/splatter/over_window, diff --git a/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm b/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm index 9597a976d84b0d..0a51efbd58a670 100644 --- a/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm +++ b/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm @@ -245,7 +245,7 @@ /obj/structure/bed/dogbed{ name = "kitty bed" }, -/mob/living/simple_animal/pet/cat/space, +/mob/living/basic/pet/cat/space, /turf/open/floor/carpet, /area/ruin/space/has_grav/powered/cat_man) "aS" = ( diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/alientoollab.dmm b/_maps/RandomRuins/SpaceRuins/nova/alientoollab.dmm similarity index 76% rename from _maps/RandomRuins/SpaceRuins/skyrat/alientoollab.dmm rename to _maps/RandomRuins/SpaceRuins/nova/alientoollab.dmm index ba61dac58476a2..12ccd7eeac8684 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/alientoollab.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/alientoollab.dmm @@ -8,7 +8,7 @@ /obj/machinery/light/red/dim/directional/east, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "ct" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -16,23 +16,23 @@ /obj/structure/sign/warning/no_smoking/directional/north, /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "eA" = ( /obj/effect/mob_spawn/corpse/human/doctor, /obj/effect/turf_decal/trimline/blue/filled/line, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "he" = ( /obj/effect/spawner/random/structure/girder, /turf/open/floor/plating/airless, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "hn" = ( /obj/effect/spawner/random/trash/mopbucket, /obj/effect/turf_decal/bot_white, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "hM" = ( /obj/effect/spawner/random/structure/chair_flipped, /obj/effect/turf_decal/stripes/line{ @@ -40,18 +40,18 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "iv" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "iF" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "jm" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/table, @@ -62,7 +62,7 @@ /obj/effect/spawner/random/engineering/toolbox, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "kU" = ( /obj/effect/spawner/random/structure/chair_flipped, /obj/effect/turf_decal/stripes/line{ @@ -70,39 +70,39 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "mL" = ( /turf/closed/wall/mineral/titanium/nodiagonal, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "mM" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/spawner/random/structure/closet_empty, /obj/effect/turf_decal/bot_white, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "mV" = ( /turf/open/floor/plating/airless, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "nc" = ( /obj/effect/spawner/random/trash/caution_sign, /obj/machinery/light/red/dim/directional/north, /turf/open/floor/plating/airless, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "on" = ( /obj/effect/spawner/random/structure/crate_abandoned, /obj/effect/turf_decal/bot_white, /obj/machinery/light/red/dim/directional/east, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "oZ" = ( /obj/structure/bodycontainer/morgue, /obj/machinery/light/red/dim/directional/west, /obj/structure/sign/warning/biohazard/directional/west, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "pD" = ( /obj/machinery/harvester, /obj/effect/turf_decal/stripes/line{ @@ -112,29 +112,29 @@ /obj/effect/gibspawner/xeno, /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "ql" = ( /obj/effect/spawner/random/engineering/canister, /obj/effect/turf_decal/bot_white, /obj/machinery/light/red/dim/directional/south, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "rH" = ( /obj/structure/table, /obj/structure/sign/warning/chem_diamond/directional/west, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "rO" = ( /obj/effect/spawner/random/structure/steam_vent, /obj/effect/turf_decal/delivery/white, /obj/machinery/door/airlock/external/ruin, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "rW" = ( /obj/effect/spawner/random/engineering/canister, /turf/open/floor/plating/airless, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "sf" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -143,7 +143,7 @@ /obj/machinery/light/red/dim/directional/west, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "uq" = ( /obj/structure/sink/directional/north, /obj/effect/turf_decal/stripes/line{ @@ -151,10 +151,10 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "uV" = ( /turf/closed/wall/mineral/titanium, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "vU" = ( /obj/machinery/iv_drip, /obj/item/reagent_containers/chem_pack{ @@ -166,14 +166,14 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "xv" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/table, /obj/effect/spawner/random/engineering/material_rare, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "xG" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -183,17 +183,17 @@ /obj/effect/gibspawner/xeno/bodypartless, /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "xJ" = ( /obj/structure/closet/secure_closet/medical2, /obj/effect/turf_decal/bot_white, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "yg" = ( /obj/machinery/porta_turret/syndicate/energy, /turf/closed/wall/mineral/titanium, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "yx" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/table, @@ -211,31 +211,31 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "yz" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 5 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "yU" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "zG" = ( /obj/effect/gibspawner/xeno, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "AC" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "Bn" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/effect/spawner/random/medical/memeorgans, @@ -243,44 +243,44 @@ /obj/effect/turf_decal/bot_white, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "CO" = ( /obj/structure/bodycontainer/morgue, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "Dw" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "DT" = ( /obj/effect/spawner/random/structure/tank_holder, /obj/effect/turf_decal/bot_white, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "Ew" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "Ga" = ( /obj/structure/closet/l3closet/scientist, /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/turf_decal/bot_white, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "GM" = ( /obj/machinery/computer/operating{ dir = 8 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "Hy" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 10 @@ -288,30 +288,30 @@ /obj/effect/gibspawner/xeno/bodypartless, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "HG" = ( -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /obj/structure/sign/warning/biohazard/directional/west, /turf/open/floor/plating/airless, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "HS" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/machinery/smartfridge/organ, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "It" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/filingcabinet/chestdrawer/wheeled, /obj/item/gps/spaceruin, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "Iy" = ( /obj/effect/spawner/random/structure/barricade, /obj/structure/sign/warning/secure_area/directional/west, /turf/open/floor/plating/airless, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "JL" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -320,18 +320,18 @@ /obj/effect/gibspawner/xeno/bodypartless, /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "Lg" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "Lu" = ( /obj/effect/spawner/random/structure/barricade, /turf/open/floor/plating/airless, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "LO" = ( /obj/structure/table/glass/plasmaglass, /obj/effect/spawner/random/medical/injector{ @@ -350,7 +350,7 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "LY" = ( /obj/effect/spawner/random/medical/organs, /obj/structure/closet/crate/freezer, @@ -359,14 +359,14 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "Ml" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "Nh" = ( /obj/structure/table/glass/plasmaglass, /obj/item/storage/box/bodybags{ @@ -378,45 +378,45 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "Nz" = ( /obj/effect/spawner/random/structure/crate_loot, /obj/effect/turf_decal/bot_white, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "OH" = ( /obj/effect/turf_decal/bot_white, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "PU" = ( /obj/effect/spawner/random/engineering/atmospherics_portable, /obj/effect/turf_decal/bot_white, /obj/machinery/light/red/dim/directional/north, /obj/structure/sign/warning/test_chamber/directional/north, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "Qt" = ( /obj/machinery/light/red/dim/directional/south, /turf/open/floor/plating/airless, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "QU" = ( /obj/effect/spawner/random/engineering/tank, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "RB" = ( /obj/effect/spawner/random/structure/barricade, /obj/structure/sign/warning/no_smoking/circle/directional/west, /turf/open/floor/plating/airless, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "SI" = ( /obj/machinery/destructive_scanner, /obj/effect/gibspawner/xeno, /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "SK" = ( /obj/structure/table/glass/plasmaglass, /obj/item/defibrillator/loaded{ @@ -424,7 +424,7 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "SP" = ( /obj/effect/spawner/random/medical/patient_stretcher, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -432,13 +432,13 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "TM" = ( /obj/effect/spawner/random/trash/bin, /obj/effect/turf_decal/bot_white, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "Vn" = ( /obj/structure/lattice, /turf/template_noop, @@ -461,24 +461,24 @@ /obj/machinery/light/red/dim/directional/west, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "VL" = ( /obj/structure/table/optable, /obj/effect/mob_spawn/corpse/human/abductor, /obj/effect/gibspawner/xeno, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "WB" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "Xy" = ( /turf/open/floor/catwalk_floor/iron_dark, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) "YP" = ( /obj/effect/mob_spawn/corpse/human/doctor, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -486,7 +486,7 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab) +/area/ruin/space/has_grav/powered/nova/alien_tool_lab) (1,1,1) = {" aq diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/blackmarket.dmm b/_maps/RandomRuins/SpaceRuins/nova/blackmarket.dmm similarity index 78% rename from _maps/RandomRuins/SpaceRuins/skyrat/blackmarket.dmm rename to _maps/RandomRuins/SpaceRuins/nova/blackmarket.dmm index 2698638ab8bc8a..16aa37f84dfe76 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/blackmarket.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/blackmarket.dmm @@ -1,40 +1,40 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "af" = ( /turf/open/floor/iron/smooth_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "bv" = ( /obj/structure/closet/crate/large, /obj/item/stack/sheet/iron/fifty, /obj/item/stack/sheet/glass/fifty, /turf/open/floor/catwalk_floor/iron_smooth, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "cH" = ( /obj/effect/turf_decal/bot_white, /obj/machinery/recharge_station, /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "de" = ( /obj/effect/spawner/random/structure/grille, /obj/effect/turf_decal/stripes/asteroid/line{ dir = 1 }, /turf/open/misc/asteroid, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "dm" = ( /obj/structure/sink/kitchen/directional/south, /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "en" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 4 }, /turf/open/floor/iron/smooth_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "eV" = ( /turf/open/floor/catwalk_floor/iron_smooth, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "fi" = ( /obj/effect/turf_decal/bot_white, /obj/structure/rack/shelf, @@ -42,37 +42,37 @@ /obj/item/mod/module/orebag, /obj/item/trench_tool, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "fB" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, /turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "gf" = ( /obj/machinery/shower/directional/south, /obj/structure/curtain/bounty, /obj/structure/drain, /obj/effect/spawner/random/trash/soap, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "hk" = ( /obj/structure/table, /obj/machinery/microwave, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "ht" = ( /obj/structure/toilet/snappop{ dir = 4 }, /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "hO" = ( /turf/closed/mineral/random, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "io" = ( /turf/open/floor/iron/smooth, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "iG" = ( /obj/structure/deployable_barricade/guardrail{ dir = 4 @@ -86,24 +86,24 @@ /turf/open/floor/iron/smooth_edge{ dir = 8 }, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "iY" = ( /obj/effect/spawner/random/structure/crate_abandoned, /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "jb" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 4 }, /turf/open/misc/asteroid, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "kE" = ( /obj/machinery/recharge_station, /obj/effect/turf_decal/bot_white, /obj/structure/sign/poster/contraband/random/directional/south, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "kT" = ( /obj/structure/table, /obj/effect/spawner/random/engineering/flashlight{ @@ -122,25 +122,25 @@ }, /obj/item/holosign_creator/atmos, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "lp" = ( /turf/template_noop, /area/template_noop) "mb" = ( -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "mP" = ( /obj/structure/sign/poster/contraband/random/directional/west, /turf/open/floor/iron/smooth, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "mQ" = ( /obj/effect/turf_decal/bot_white, /obj/structure/tank_dispenser/oxygen, /obj/machinery/light/red/dim/directional/south, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "mX" = ( /obj/structure/deployable_barricade/guardrail, /obj/effect/turf_decal/siding/thinplating_new/dark{ @@ -149,17 +149,17 @@ /turf/open/floor/iron/smooth_edge{ dir = 1 }, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "mZ" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /turf/open/floor/catwalk_floor/iron_smooth, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "nE" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "nL" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -173,27 +173,27 @@ }, /obj/structure/sign/warning/docking/directional/south, /turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "oV" = ( /turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "qe" = ( /obj/effect/spawner/random/structure/grille, /obj/effect/turf_decal/stripes/asteroid/corner, /turf/open/misc/asteroid, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "qD" = ( /obj/effect/spawner/random/structure/steam_vent, /obj/effect/turf_decal/delivery/white, /obj/machinery/door/airlock/external/ruin, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "rb" = ( /obj/effect/spawner/random/structure/tank_holder, /obj/effect/turf_decal/bot_white, /obj/machinery/light/red/dim/directional/south, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "rs" = ( /obj/structure/deployable_barricade/guardrail{ dir = 1 @@ -202,12 +202,12 @@ dir = 5 }, /turf/open/floor/iron/smooth_edge, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "sB" = ( /obj/machinery/light/dim/directional/north, /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron/smooth, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "tC" = ( /obj/structure/table, /obj/machinery/coffeemaker{ @@ -226,7 +226,7 @@ }, /obj/structure/sign/poster/contraband/random/directional/east, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "tI" = ( /obj/structure/closet/crate/cardboard, /obj/item/folded_navigation_gigabeacon{ @@ -254,7 +254,7 @@ pixel_y = -6 }, /turf/open/floor/catwalk_floor/iron_smooth, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "tP" = ( /obj/structure/table, /obj/effect/spawner/random/food_or_drink/donkpockets{ @@ -266,7 +266,7 @@ /obj/machinery/light/dim/directional/north, /obj/structure/sign/warning/yes_smoking/circle/directional/north, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "tV" = ( /obj/effect/turf_decal/siding/thinplating_new/dark/corner{ dir = 4 @@ -277,7 +277,7 @@ /turf/open/floor/iron/smooth_corner{ dir = 4 }, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "uG" = ( /obj/effect/spawner/random/structure/grille, /obj/effect/turf_decal/stripes/asteroid/line{ @@ -285,13 +285,13 @@ }, /obj/effect/turf_decal/stripes/asteroid/line, /turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "vg" = ( /obj/effect/turf_decal/bot_white, /obj/effect/spawner/random/engineering/canister, /obj/structure/sign/poster/contraband/random/directional/south, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "vj" = ( /obj/effect/turf_decal/bot_white, /obj/machinery/suit_storage_unit/industrial{ @@ -299,7 +299,7 @@ mod_type = /obj/item/mod/control/pre_equipped/standard }, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "vy" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/fluff/metalpole{ @@ -311,7 +311,7 @@ /obj/machinery/power/rtg/advanced, /obj/structure/cable, /turf/open/misc/asteroid, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "vU" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -324,12 +324,12 @@ id = "blackmarkethangar" }, /turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "wq" = ( /obj/structure/closet/crate/trashcart/laundry, /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "wF" = ( /obj/docking_port/stationary{ dwidth = 5; @@ -340,12 +340,12 @@ width = 11 }, /turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "zb" = ( /obj/machinery/light/dim/directional/east, /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/smooth_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "zu" = ( /obj/structure/table, /obj/effect/spawner/random/food_or_drink/dinner{ @@ -361,11 +361,11 @@ }, /obj/structure/sign/calendar/directional/west, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "zS" = ( /obj/structure/sign/warning/docking/directional/north, /turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "AG" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/fluff/metalpole, @@ -373,7 +373,7 @@ /obj/machinery/power/rtg/advanced, /obj/structure/cable, /turf/open/misc/asteroid, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "AX" = ( /obj/structure/deployable_barricade/guardrail{ dir = 4 @@ -384,7 +384,7 @@ /turf/open/floor/iron/smooth_edge{ dir = 8 }, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "Bf" = ( /obj/structure/deployable_barricade/guardrail{ dir = 8 @@ -396,7 +396,7 @@ /turf/open/floor/iron/smooth_edge{ dir = 4 }, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "Bm" = ( /obj/machinery/power/terminal{ dir = 4 @@ -404,30 +404,30 @@ /obj/structure/cable, /obj/machinery/power/port_gen/pacman/pre_loaded, /turf/open/floor/catwalk_floor/iron_smooth, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "BG" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 1 }, /turf/open/floor/iron/smooth_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "De" = ( /obj/structure/cable, /obj/machinery/autolathe/hacked, /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "DU" = ( /obj/effect/spawner/random/trash/moisture, /turf/open/floor/iron/smooth, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "Er" = ( /obj/effect/turf_decal/bot_white, /obj/effect/spawner/random/engineering/canister, /obj/machinery/light/red/dim/directional/north, /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "EE" = ( /obj/structure/fluff/metalpole/end{ dir = 4 @@ -438,12 +438,12 @@ /obj/machinery/washing_machine, /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "Fq" = ( /obj/effect/spawner/random/structure/grille, /obj/effect/turf_decal/stripes/asteroid/line, /turf/open/misc/asteroid, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "FG" = ( /obj/structure/table, /obj/structure/sign/poster/contraband/random/directional/west, @@ -453,18 +453,18 @@ pixel_y = 1 }, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "FJ" = ( /obj/structure/trash_pile, /turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "Hq" = ( /obj/structure/trash_pile, /obj/effect/turf_decal/stripes/asteroid/line{ dir = 4 }, /turf/open/misc/asteroid, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "IS" = ( /obj/structure/extinguisher_cabinet/directional/west, /obj/structure/closet/crate/cardboard/mothic, @@ -475,7 +475,7 @@ pixel_y = 4 }, /turf/open/floor/catwalk_floor/iron_smooth, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "IZ" = ( /obj/structure/table, /obj/effect/spawner/random/food_or_drink/refreshing_beverage{ @@ -492,15 +492,15 @@ }, /obj/structure/cable, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "KL" = ( /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron/smooth_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "KQ" = ( /obj/structure/cable, /turf/open/floor/iron/smooth_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "KV" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 1 @@ -508,18 +508,18 @@ /obj/effect/turf_decal/stripes/asteroid/line, /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "LL" = ( /obj/effect/spawner/random/structure/chair_maintenance{ dir = 1 }, /obj/structure/cable, /turf/open/floor/iron/smooth_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "LZ" = ( /obj/structure/cable, /turf/open/floor/catwalk_floor/iron_smooth, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "Mc" = ( /obj/structure/table, /obj/effect/spawner/random/engineering/toolbox, @@ -527,104 +527,104 @@ pixel_y = 7 }, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "Md" = ( /obj/structure/sign/warning/secure_area/directional/east, /turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "Mp" = ( /obj/effect/spawner/random/structure/chair_maintenance{ dir = 8 }, /obj/structure/cable, /turf/open/floor/iron/smooth_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "MN" = ( /obj/effect/spawner/random/trash/bin, /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "NZ" = ( /obj/effect/mob_spawn/ghost_role/human/blackmarket, /obj/effect/turf_decal/bot_white, /obj/structure/sign/clock/directional/east, /obj/structure/sign/warning/rad_shelter/directional/north, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "OA" = ( /obj/effect/spawner/random/trash/mopbucket, /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "OC" = ( /obj/effect/spawner/random/trash/hobo_squat, /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "OR" = ( /obj/effect/spawner/random/engineering/atmospherics_portable, /obj/effect/turf_decal/bot_white, /obj/machinery/light/red/dim/directional/west, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "Pd" = ( /obj/effect/spawner/random/structure/closet_private, /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "Py" = ( /obj/effect/turf_decal/delivery/white, /obj/machinery/door/airlock/bathroom{ name = "Restroom" }, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "Qm" = ( /obj/effect/spawner/random/engineering/tank, /obj/effect/turf_decal/bot_white, /obj/structure/sign/warning/no_smoking/directional/south, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "QV" = ( /obj/structure/sign/warning/docking/directional/south, /turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "Rv" = ( /obj/effect/turf_decal/delivery/white, /obj/machinery/door/airlock/maintenance_hatch, /obj/structure/cable, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "Sq" = ( /obj/effect/turf_decal/delivery/white, /obj/machinery/door/airlock/service, /obj/structure/cable, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "SI" = ( /obj/structure/cable, /obj/effect/turf_decal/delivery/white, /obj/machinery/door/airlock/external/ruin, /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "SQ" = ( /obj/structure/marker_beacon/burgundy, /turf/closed/wall, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "SS" = ( /obj/effect/spawner/random/structure/crate_loot, /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "UJ" = ( /obj/effect/spawner/random/structure/furniture_parts, /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "Vl" = ( /turf/open/floor/catwalk_floor/iron_dark, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "Wi" = ( /obj/effect/spawner/random/trash/moisture_trap, /obj/effect/turf_decal/bot_white, @@ -632,7 +632,7 @@ /obj/machinery/light/dim/directional/north, /obj/structure/cable, /turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "WS" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -646,19 +646,19 @@ }, /obj/structure/sign/warning/docking/directional/north, /turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "Yn" = ( /obj/effect/turf_decal/siding/thinplating_new/dark/corner, /obj/machinery/light/red/dim/directional/west, /turf/open/floor/iron/smooth_corner, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "YG" = ( /turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "YH" = ( /obj/structure/cable, /turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "YY" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 4 @@ -669,10 +669,10 @@ /obj/effect/spawner/random/structure/grille, /obj/structure/cable, /turf/open/floor/plating/airless, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) "Zh" = ( /turf/closed/wall, -/area/ruin/space/has_grav/powered/skyrat/blackmarket) +/area/ruin/space/has_grav/powered/nova/blackmarket) (1,1,1) = {" lp diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/cargodiselost.dmm b/_maps/RandomRuins/SpaceRuins/nova/cargodiselost.dmm similarity index 99% rename from _maps/RandomRuins/SpaceRuins/skyrat/cargodiselost.dmm rename to _maps/RandomRuins/SpaceRuins/nova/cargodiselost.dmm index 7cdaa54020be83..34ae9a1393060c 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/cargodiselost.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/cargodiselost.dmm @@ -362,12 +362,12 @@ /obj/structure/closet/crate/secure/weapon{ name = "Surplus Firearms" }, -/obj/item/gun/ballistic/automatic/akm/civvie, -/obj/item/gun/ballistic/automatic/akm/civvie, -/obj/item/ammo_box/magazine/akm/civvie, -/obj/item/ammo_box/magazine/akm/civvie, -/obj/item/ammo_box/magazine/akm/civvie, -/obj/item/ammo_box/magazine/akm/civvie, +/obj/item/gun/ballistic/automatic/lanca, +/obj/item/gun/ballistic/automatic/lanca, +/obj/item/ammo_box/magazine/lanca, +/obj/item/ammo_box/magazine/lanca, +/obj/item/ammo_box/magazine/lanca, +/obj/item/ammo_box/magazine/lanca, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/cargo) "fl" = ( @@ -1634,7 +1634,7 @@ "AE" = ( /obj/structure/closet/crate/science{ req_access = list("science"); - name = "Delivery - Nanotrasen Science Division" + name = "Delivery - Symphionia Science Division" }, /obj/effect/spawner/random/exotic/technology, /obj/effect/spawner/random/exotic/technology, @@ -1903,8 +1903,8 @@ /area/ruin/space/has_grav/cargodise_freighter/bridge) "ES" = ( /obj/structure/rack/gunrack, -/obj/item/gun/ballistic/automatic/akm, -/obj/item/gun/ballistic/automatic/akm{ +/obj/item/gun/ballistic/automatic/lanca, +/obj/item/gun/ballistic/automatic/lanca{ pixel_x = 3 }, /turf/open/floor/mineral/plastitanium/red, @@ -2059,7 +2059,7 @@ /obj/item/storage/box/monkeycubes, /obj/item/storage/box/monkeycubes, /obj/item/paper{ - default_raw_text = "Admiral, due to increased Nanotrasen presence in your sector, we are providing some extra supplies to deal with it. The telecrystals are to be held for a contact that will come to collect them in the coming weeks, a solo operative. Please ensure they get the crystals, as their mission is gravely important."; + default_raw_text = "Admiral, due to increased Symphionia presence in your sector, we are providing some extra supplies to deal with it. The telecrystals are to be held for a contact that will come to collect them in the coming weeks, a solo operative. Please ensure they get the crystals, as their mission is gravely important."; name = "CONFIDENTIAL - DS-2 Admiral's Eyes Only" }, /obj/item/stack/telecrystal{ @@ -2121,7 +2121,7 @@ /area/ruin/space/has_grav/cargodise_freighter/primaryhall) "Ii" = ( /obj/structure/closet/crate/secure/gear{ - name = "Delivery - Central Command Frontier Division"; + name = "Delivery - Conglomeration of Colonists Frontier Division"; req_access = list("armory") }, /obj/effect/spawner/random/exotic/antag_gear_weak, @@ -2159,11 +2159,6 @@ }, /turf/open/floor/iron/white, /area/ruin/space/has_grav/cargodise_freighter/trauma) -"IA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/kitchen, -/area/ruin/space/has_grav/cargodise_freighter/kitchen) "IP" = ( /obj/machinery/vending/dinnerware, /turf/open/floor/iron/kitchen, @@ -2412,7 +2407,7 @@ req_access = list("brig") }, /obj/item/knife/combat, -/obj/item/clothing/under/syndicate/skyrat/enclave/real, +/obj/item/clothing/under/syndicate/nova/enclave/real, /obj/item/reagent_containers/hypospray/medipen/stimpack, /obj/item/clothing/glasses/hud/security/sunglasses/gars/giga, /turf/open/floor/iron/dark, @@ -3039,12 +3034,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/kitchen, /area/ruin/space/has_grav/cargodise_freighter/kitchen) -"WE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/cargodise_freighter/kitchen) "WJ" = ( /obj/effect/turf_decal/tile/yellow/half{ dir = 4 @@ -4066,7 +4055,7 @@ Ey WQ Gg Zq -WE +wd YY Gg UL @@ -4635,7 +4624,7 @@ vH vH Gg gc -IA +FT FT FT JC diff --git a/_maps/RandomRuins/SpaceRuins/nova/clothing_facility.dmm b/_maps/RandomRuins/SpaceRuins/nova/clothing_facility.dmm new file mode 100644 index 00000000000000..d51f9909a1136f --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/nova/clothing_facility.dmm @@ -0,0 +1,640 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"b" = ( +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"c" = ( +/turf/closed/mineral/random, +/area/ruin/unpowered/no_grav) +"d" = ( +/obj/machinery/destructive_scanner, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"e" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"f" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"g" = ( +/turf/open/floor/iron/dark/side, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"h" = ( +/obj/structure/toilet{ + pixel_y = 12 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"i" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"j" = ( +/turf/open/floor/engine, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"k" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"l" = ( +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"m" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/engine, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"n" = ( +/obj/item/card/id/advanced/silver/generic, +/obj/structure/rack, +/obj/item/card/id/advanced/silver/generic{ + pixel_y = 3 + }, +/obj/item/card/id/advanced/silver/generic{ + pixel_y = 6 + }, +/turf/open/floor/engine, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"o" = ( +/obj/structure/sink/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"p" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"q" = ( +/obj/item/clothing/neck/cloak/colourable/veil, +/obj/structure/rack, +/obj/item/clothing/neck/cloak/colourable/veil, +/obj/item/clothing/neck/cloak/colourable/veil, +/turf/open/floor/engine, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"r" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"s" = ( +/obj/machinery/autolathe, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"t" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/engine, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"u" = ( +/obj/machinery/door/window/left/directional/south, +/turf/open/floor/engine, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"v" = ( +/obj/machinery/light/directional/west, +/obj/machinery/rnd/destructive_analyzer, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"w" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"x" = ( +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"y" = ( +/turf/open/floor/iron/dark/corner, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"z" = ( +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"A" = ( +/obj/machinery/door/airlock, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"B" = ( +/obj/machinery/door/airlock/research, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"C" = ( +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"D" = ( +/obj/machinery/light/directional/south, +/obj/structure/toilet{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"E" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/engine, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"F" = ( +/obj/machinery/door/window/right/directional/west, +/turf/open/floor/engine, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"G" = ( +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"H" = ( +/turf/open/floor/iron/bluespace, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"I" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/engine, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"J" = ( +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"K" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"L" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"M" = ( +/obj/machinery/door/airlock/highsecurity, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"N" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/engine, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"O" = ( +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"P" = ( +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"Q" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"R" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/engine, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"S" = ( +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"T" = ( +/obj/structure/rack, +/obj/item/clothing/neck/cloak/colourable/shroud, +/obj/item/clothing/neck/cloak/colourable/shroud, +/obj/item/clothing/neck/cloak/colourable/shroud, +/turf/open/floor/engine, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"U" = ( +/obj/structure/sink/directional/east, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"V" = ( +/obj/structure/statue/plasma/scientist, +/turf/open/floor/iron/bluespace, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"W" = ( +/obj/machinery/door/window/right/directional/east, +/turf/open/floor/engine, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"Y" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/ruin/space/has_grav/powered/nova/clothing_facility) +"Z" = ( +/obj/machinery/door/airlock/external, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/clothing_facility) + +(1,1,1) = {" +a +a +a +a +a +a +c +c +c +c +c +c +c +c +c +c +c +c +c +a +a +a +a +a +"} +(2,1,1) = {" +a +a +a +a +a +c +c +c +c +c +c +c +c +c +c +c +c +c +c +c +c +a +a +a +"} +(3,1,1) = {" +a +a +a +a +c +c +f +f +f +f +f +e +e +e +e +e +e +e +e +e +e +e +a +a +"} +(4,1,1) = {" +a +a +c +c +c +c +f +j +R +j +f +d +v +s +e +U +z +e +k +i +p +w +a +a +"} +(5,1,1) = {" +a +c +c +c +c +c +f +j +T +j +f +G +G +G +e +h +z +A +S +S +S +w +a +a +"} +(6,1,1) = {" +a +c +c +f +f +f +f +E +W +E +f +l +l +l +e +e +e +e +S +S +S +e +a +a +"} +(7,1,1) = {" +a +c +c +f +j +j +t +G +G +G +f +y +J +O +y +J +O +e +y +J +O +w +w +w +"} +(8,1,1) = {" +c +c +c +f +m +n +u +G +S +G +M +g +H +P +g +H +P +B +g +V +P +Z +b +Z +"} +(9,1,1) = {" +c +c +c +f +j +j +t +G +G +G +f +C +l +x +K +l +x +e +C +l +x +w +w +w +"} +(10,1,1) = {" +c +c +c +f +f +f +f +I +F +I +f +y +J +O +e +e +A +e +S +S +S +e +a +a +"} +(11,1,1) = {" +a +c +c +c +c +c +f +j +q +j +f +g +H +P +e +z +z +e +S +S +S +w +a +a +"} +(12,1,1) = {" +a +a +c +c +c +c +f +j +N +j +f +C +Y +x +e +o +D +e +Q +r +L +w +a +a +"} +(13,1,1) = {" +a +a +a +a +c +c +f +f +f +f +f +e +e +e +e +e +e +e +e +e +e +e +a +a +"} +(14,1,1) = {" +a +a +a +a +a +c +c +c +c +c +c +c +c +c +c +c +c +c +c +c +c +a +a +a +"} +(15,1,1) = {" +a +a +a +a +a +a +c +c +c +c +a +a +c +c +c +c +c +c +c +c +a +a +a +a +"} diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/codealpha.dmm b/_maps/RandomRuins/SpaceRuins/nova/codealpha.dmm similarity index 100% rename from _maps/RandomRuins/SpaceRuins/skyrat/codealpha.dmm rename to _maps/RandomRuins/SpaceRuins/nova/codealpha.dmm diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/crash.dmm b/_maps/RandomRuins/SpaceRuins/nova/crash.dmm similarity index 100% rename from _maps/RandomRuins/SpaceRuins/skyrat/crash.dmm rename to _maps/RandomRuins/SpaceRuins/nova/crash.dmm diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/derelictferry.dmm b/_maps/RandomRuins/SpaceRuins/nova/derelictferry.dmm similarity index 100% rename from _maps/RandomRuins/SpaceRuins/skyrat/derelictferry.dmm rename to _maps/RandomRuins/SpaceRuins/nova/derelictferry.dmm diff --git a/_maps/RandomRuins/SpaceRuins/nova/des_two.dmm b/_maps/RandomRuins/SpaceRuins/nova/des_two.dmm new file mode 100644 index 00000000000000..06ba678837ce90 --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/nova/des_two.dmm @@ -0,0 +1,14253 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/effect/turf_decal/siding/dark, +/obj/machinery/light/cold/directional/west, +/obj/structure/closet/secure_closet/des_two/prisoner_locker, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/obj/item/restraints/handcuffs, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"ac" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/structure/closet/secure_closet/des_two/mod_locker, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"ae" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/decoration/carpet, +/obj/structure/closet/crate/cardboard, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"ag" = ( +/obj/effect/turf_decal/trimline/purple/warning{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction/flip{ + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"ah" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/obj/effect/turf_decal/stripes/red/line, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"aj" = ( +/obj/structure/frame/machine{ + anchored = 1; + icon_state = "box_1"; + state = 2 + }, +/obj/item/circuitboard/machine/mech_recharger, +/obj/effect/turf_decal/trimline/dark_red/filled/line, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"ak" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + hackProof = 1; + id_tag = "scorpliaison"; + name = "Corporate Liaison" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"ao" = ( +/obj/machinery/stasis, +/obj/machinery/camera/xray/directional/south{ + c_tag = "DS-2 Medical"; + network = list("ds2") + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 6 + }, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/medbay) +"at" = ( +/obj/effect/turf_decal/siding/dark/end, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"au" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/delivery/red, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/security/old/glass{ + name = "Security Checkpoint" + }, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"av" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/camera/xray/directional/north{ + c_tag = "DS-2 Isolation Cell"; + network = list("ds2") + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"ax" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "ds2conveyor" + }, +/obj/structure/railing, +/obj/machinery/light/red/directional/north, +/obj/structure/plasticflaps, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo) +"az" = ( +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 8 + }, +/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/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"aB" = ( +/obj/machinery/vending/imported/tiziran, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"aC" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"aF" = ( +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/cold/directional/east, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"aH" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 9 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"aJ" = ( +/obj/effect/turf_decal/vg_decals/numbers/one{ + dir = 4 + }, +/turf/open/floor/engine/hull, +/area/template_noop) +"aL" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/halls) +"aN" = ( +/obj/machinery/atmospherics/components/binary/valve/digital, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"aP" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/window/survival_pod{ + dir = 8; + req_access = list("syndicate") + }, +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/iron/dark/smooth_large, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"aR" = ( +/obj/effect/turf_decal/trimline/dark_green/warning{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"aT" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/space/has_grav/nova/des_two/bridge) +"aW" = ( +/obj/machinery/porta_turret/syndicate/energy{ + dir = 6 + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/bridge/vault) +"aX" = ( +/obj/effect/turf_decal/bot_white, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/scrubber, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/engineering) +"aY" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/recharger, +/obj/item/paper_bin{ + pixel_x = -14 + }, +/obj/item/pen{ + pixel_x = -14 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"aZ" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 5 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"ba" = ( +/obj/effect/turf_decal/stripes/red/corner, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"bd" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/obj/structure/chair/office/light{ + dir = 8 + }, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"be" = ( +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 1; + volume_rate = 200 + }, +/turf/template_noop, +/area/ruin/space/has_grav/nova/des_two/engineering) +"bj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/chair/office, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/cargo) +"bk" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/button/door{ + desc = "To keep your valuable gear away from prying eyes."; + id = "ds2armory"; + name = "Armory Access"; + pixel_x = 32; + pixel_y = 24; + req_access = list("syndicate_leader") + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"bo" = ( +/obj/machinery/disposal/bin, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/end{ + dir = 8 + }, +/turf/open/floor/iron/small, +/area/ruin/space/has_grav/nova/des_two/research) +"bq" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/closet/secure_closet/des_two/brig_officer_locker, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"bs" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"bt" = ( +/obj/structure/bed{ + dir = 1 + }, +/obj/item/bedsheet/syndie{ + dir = 1; + name = "station admiral's bedsheet" + }, +/turf/open/floor/carpet/red, +/area/ruin/space/has_grav/nova/des_two/bridge/admiral) +"bu" = ( +/obj/structure/curtain, +/obj/structure/drain, +/obj/machinery/shower/directional/north, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"bw" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"bx" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/button/curtain{ + id = "DS2cell2"; + name = "curtain control"; + pixel_y = 24 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"by" = ( +/obj/machinery/vending/security{ + desc = "An Armadyne peacekeeper equipment vendor. Makes you wonder why there's no Gorlex Equipment Vendor yet."; + name = "\improper Stolen Armadyne Equipment Vendor" + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"bA" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/corner, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/halls) +"bP" = ( +/obj/structure/table, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/storage/bag/tray/cafeteria{ + pixel_y = 3 + }, +/obj/item/storage/bag/tray/cafeteria{ + pixel_y = 6 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"bR" = ( +/obj/machinery/computer/operating, +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/medbay) +"bS" = ( +/obj/item/melee/baton/telescopic{ + pixel_x = 4; + pixel_y = 9 + }, +/obj/item/melee/baton/telescopic{ + pixel_x = 10; + pixel_y = 9 + }, +/obj/item/melee/baton/telescopic{ + pixel_x = -2; + pixel_y = 9 + }, +/obj/item/melee/energy/sword/saber/red, +/obj/item/melee/energy/sword/saber/red{ + pixel_x = 13 + }, +/obj/item/melee/energy/sword/saber/red{ + pixel_x = 7 + }, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/structure/rack/shelf, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"bW" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_red/half/contrasted, +/obj/effect/turf_decal/siding/wideplating_new/dark, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/window/reinforced/survival_pod{ + dir = 6 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"bX" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 9 + }, +/obj/item/paper, +/obj/item/pen{ + pixel_x = -5; + pixel_y = 3 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"bY" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/machinery/firealarm/directional/south, +/obj/structure/chair/office/light{ + dir = 8 + }, +/turf/open/floor/iron/dark/side, +/area/ruin/space/has_grav/nova/des_two/research) +"ca" = ( +/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/ruin/space/has_grav/nova/des_two/cargo) +"cb" = ( +/obj/item/clothing/shoes/galoshes{ + pixel_y = -8 + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 6; + pixel_y = -6 + }, +/obj/item/holosign_creator/janibarrier{ + pixel_y = -9 + }, +/obj/item/mop, +/obj/effect/turf_decal/tile/purple/half{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/obj/structure/mop_bucket/janitorialcart{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/ruin/space/has_grav/nova/des_two/cargo) +"ch" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 8 + }, +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/camera/xray/directional/north{ + c_tag = "DS-2 Diner"; + network = list("ds2") + }, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"cj" = ( +/obj/effect/turf_decal/nova_decals/syndicate/middle/middle, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/nova_decals/ds2/middle, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/bridge) +"cm" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/structure/transit_tube{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "ds2bridge" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/halls) +"cn" = ( +/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 = 2 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"cq" = ( +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/obj/machinery/light/cold/directional/east, +/obj/effect/turf_decal/siding/wideplating_new/dark/corner, +/obj/machinery/button/door/directional/east{ + desc = "To keep your hangar away from prying eyes."; + id = "void-be-gone"; + name = "Hangar Blast Door Control"; + req_access = list("syndicate") + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/tile/dark_red, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_edge{ + dir = 1 + }, +/area/ruin/space/has_grav/nova/des_two/cargo) +"cr" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/siding/thinplating/end{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/iron/small, +/area/ruin/space/has_grav/nova/des_two/security) +"ct" = ( +/obj/effect/turf_decal/bot_white, +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"cu" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/obj/machinery/door/airlock/freezer{ + name = "Medical Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/medbay) +"cy" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"cz" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/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/ruin/space/has_grav/nova/des_two/research) +"cA" = ( +/obj/structure/railing, +/obj/effect/turf_decal/siding/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/nova/des_two/medbay/chem) +"cD" = ( +/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/diagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"cE" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/fishing_portal_generator, +/obj/item/storage/toolbox/fishing, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"cG" = ( +/obj/item/bedsheet/qm{ + desc = "It is decorated with the Donk Co. logo."; + name = "corporate liaison's bedsheet" + }, +/obj/structure/bed, +/turf/open/floor/carpet/donk, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"cI" = ( +/obj/machinery/power/shuttle_engine/propulsion/left{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/floor{ + use_power = 0 + }, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/nova/des_two) +"cL" = ( +/obj/machinery/door/airlock/grunge{ + name = "Interrogation Room" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/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/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/lawyer) +"cO" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/obj/machinery/cell_charger_multi, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"cP" = ( +/obj/effect/turf_decal/trimline/blue/corner, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/structure/window/reinforced/survival_pod{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"cS" = ( +/obj/effect/turf_decal/siding/dark, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/research) +"cU" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"cW" = ( +/obj/structure/closet/secure_closet/des_two/mining_locker, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/cargo) +"cY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/nova/des_two/medbay) +"da" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/hedge, +/obj/machinery/light/warm/directional/north, +/obj/structure/sign/painting/library{ + pixel_y = 30 + }, +/turf/open/floor/wood/parquet, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"dg" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"dh" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"dn" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"do" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/structure/table/wood/fancy/black, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"dr" = ( +/obj/structure/cable, +/obj/machinery/light/cold/directional/west, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/frame/machine{ + anchored = 1; + icon_state = "box_1"; + state = 2 + }, +/obj/item/circuitboard/machine/ore_redemption, +/obj/item/assembly/igniter, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"ds" = ( +/obj/effect/turf_decal/arrows{ + dir = 8; + pixel_x = 14 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"dv" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/structure/curtain/cloth/fancy/mechanical{ + color = "#555555"; + icon_state = "bathroom-open"; + icon_type = "bathroom"; + id = "DS2cell2" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"dy" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ + chamber_id = "des_twon2"; + dir = 4 + }, +/turf/open/floor/engine/n2, +/area/ruin/space/has_grav/nova/des_two/engineering) +"dz" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/junction/yjunction, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"dC" = ( +/obj/structure/dresser, +/obj/item/flashlight/lamp/green{ + pixel_x = 5; + pixel_y = 15 + }, +/turf/open/floor/carpet/donk, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"dD" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/trimline/dark_red/end, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ + dir = 8 + }, +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/bridge) +"dF" = ( +/obj/machinery/button/door/directional/north{ + desc = "Keep out the riff-raff."; + id = "sadmiral"; + name = "Admiral's room bolt"; + normaldoorcontrol = 1; + req_access = list("syndicate_leader"); + specialfunctions = 4 + }, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/light/warm/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/bed/dogbed, +/obj/effect/decal/cleanable/oil, +/mob/living/basic/pet/syndifox, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/bridge/admiral) +"dI" = ( +/obj/effect/turf_decal/bot_white, +/obj/structure/sink/kitchen/directional/west, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"dN" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 4 + }, +/obj/structure/closet/secure_closet/ds2atmos{ + anchorable = 0; + anchored = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/ruin/space/has_grav/nova/des_two/engineering) +"dO" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/corner, +/obj/effect/turf_decal/trimline/dark_red/corner{ + dir = 8 + }, +/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/dark/textured_half, +/area/ruin/space/has_grav/nova/des_two/bridge) +"dQ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/door/airlock/command{ + hackProof = 1; + id_tag = "sadmiral"; + name = "Station Admiral" + }, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/bridge/admiral) +"dR" = ( +/obj/machinery/shower/directional/north, +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/obj/structure/drain, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/service/dorms/fitness) +"dS" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/bot_white, +/obj/machinery/portable_atmospherics/scrubber, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/engineering) +"dT" = ( +/obj/machinery/power/shuttle_engine/propulsion/right{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/nova/des_two) +"dZ" = ( +/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/ruin/space/has_grav/nova/des_two/halls) +"ee" = ( +/obj/effect/turf_decal/bot_blue, +/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/service{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"ek" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/hedge, +/obj/structure/sign/painting/library{ + pixel_y = 30 + }, +/turf/open/floor/wood/parquet, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"em" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 10 + }, +/obj/machinery/meter, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"eo" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/closet/secure_closet/personal, +/obj/item/clothing/under/misc/syndicate_souvenir{ + has_sensor = 0; + pixel_y = -4 + }, +/obj/item/clothing/under/misc/syndicate_souvenir{ + has_sensor = 0; + pixel_x = 4; + pixel_y = -7 + }, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"ep" = ( +/obj/effect/turf_decal/bot_blue, +/obj/machinery/light/cold/directional/west, +/obj/structure/closet/secure_closet/freezer/kitchen{ + req_access = list("syndicate") + }, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/storage/fancy/egg_box, +/obj/item/storage/fancy/egg_box, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/condiment/rice, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"ez" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible/layer2{ + dir = 5 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/obj/machinery/atmospherics/components/binary/valve/digital{ + dir = 4 + }, +/obj/machinery/button/door/directional/south{ + desc = "Keep out the Blazing heat."; + id = "DS2incineratorHatch"; + name = "Incinerator Hatch Bolt"; + normaldoorcontrol = 1; + pixel_x = 6; + req_access = list("syndicate_leader"); + specialfunctions = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"eA" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/effect/turf_decal/siding/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"eD" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/trimline/dark_red/line, +/obj/structure/sign/flag/syndicate/directional/south{ + pixel_x = 16 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/item/toy/mecha/darkgygax{ + pixel_y = 16 + }, +/obj/item/toy/figure/syndie, +/turf/open/floor/iron/dark/textured_half, +/area/ruin/space/has_grav/nova/des_two/bridge) +"eE" = ( +/obj/structure/filingcabinet, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/security/lawyer) +"eF" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/research) +"eH" = ( +/obj/effect/turf_decal/box/red/corners{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/corner, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"eJ" = ( +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/cargo) +"eK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/window/reinforced/survival_pod{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/table, +/obj/item/stack/sheet/plasteel/twenty{ + pixel_x = -2 + }, +/obj/item/stack/sheet/mineral/titanium/fifty{ + amount = 20; + pixel_x = 6; + pixel_y = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/engineering) +"eO" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/firealarm/directional/east, +/obj/machinery/camera/xray/directional/east{ + c_tag = "DS-2 Botany"; + network = list("ds2") + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"eP" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"eT" = ( +/obj/structure/table, +/obj/item/analyzer{ + pixel_y = 10 + }, +/obj/item/pipe_dispenser{ + pixel_x = -3 + }, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"eU" = ( +/obj/machinery/light/warm/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"eV" = ( +/obj/effect/turf_decal/tile/dark_blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark_blue{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/closet/crate/silvercrate, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/bridge/vault) +"eW" = ( +/obj/machinery/button/door{ + id = "TESRedguard"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 24; + pixel_y = -24; + specialfunctions = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"eX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/effect/turf_decal/siding/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"eY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"fa" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/bridge) +"fc" = ( +/obj/effect/turf_decal/box/red/corners{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"fd" = ( +/mob/living/basic/bot/medbot/stationary{ + faction = list("Syndicate"); + maints_access_required = list("syndicate"); + name = "Insurgent Care"; + radio_channel = "Syndicate" + }, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"fe" = ( +/obj/machinery/griddle, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"ff" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/dark, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"fh" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"fl" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/research) +"fo" = ( +/obj/structure/closet/emcloset, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/window/reinforced/survival_pod{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"fw" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/structure/chair/office/light, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/research) +"fy" = ( +/obj/machinery/light/cold/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark, +/obj/structure/chair/stool/directional/north, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"fz" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/bridge/eva) +"fA" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/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/ruin/space/has_grav/nova/des_two/research) +"fB" = ( +/obj/effect/turf_decal/trimline/purple/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"fE" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ + dir = 4 + }, +/obj/structure/sign/flag/syndicate/directional/north, +/obj/structure/showcase/cyborg{ + desc = "A stand with the empty body of a Cybersun cyborg bolted to it."; + dir = 8; + icon = 'icons/mob/silicon/robots.dmi'; + icon_state = "synd_sec"; + name = "syndicate cyborg showcase"; + pixel_x = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/ruin/space/has_grav/nova/des_two/bridge) +"fQ" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/dark/textured_edge{ + dir = 8 + }, +/area/ruin/space/has_grav/nova/des_two/cargo) +"fS" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"fW" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"gb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"gg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/airlock/external/glass{ + name = "External Access" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/engineering) +"gi" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/vg_decals/numbers/two, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"gj" = ( +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, +/obj/effect/turf_decal/delivery/red, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/old{ + hackProof = 1; + name = "Long-Term Brig" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "DS2permabrig" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"gk" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/power/rtg/advanced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"gn" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"go" = ( +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"gv" = ( +/obj/machinery/porta_turret/syndicate/energy{ + dir = 5 + }, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/space/has_grav/nova/des_two/bridge/vault) +"gw" = ( +/obj/structure/frame/machine{ + anchored = 1; + icon_state = "box_1"; + state = 2 + }, +/obj/item/circuitboard/machine/component_printer, +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"gx" = ( +/obj/machinery/door/airlock/engineering{ + name = "Engineering" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/engineering) +"gy" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/teargas{ + pixel_x = 3; + pixel_y = 6 + }, +/obj/item/storage/box/handcuffs{ + pixel_y = 3 + }, +/obj/item/storage/box/flashbangs{ + pixel_x = -3 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"gA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"gB" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"gF" = ( +/obj/machinery/door/airlock/security/old/glass{ + name = "Security" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/delivery/red, +/obj/structure/cable, +/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/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "DS2brig" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security) +"gG" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 4 + }, +/obj/machinery/camera/xray/directional/north{ + c_tag = "DS-2 Hangar Airlock"; + network = list("ds2") + }, +/obj/structure/sign/flag/syndicate/directional/north, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"gK" = ( +/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/brigoff{ + dir = 8 + }, +/obj/machinery/light/cold/directional/east, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"gN" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/incinerator_input{ + chamber_id = "syndicatelava_incinerator"; + dir = 8 + }, +/turf/open/floor/engine, +/area/ruin/space/has_grav/nova/des_two/engineering) +"gO" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Diner" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"gW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/structure/cable, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"ha" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/table, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"he" = ( +/obj/effect/turf_decal/bot_blue, +/obj/machinery/light/warm/directional/north, +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/pump, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/engineering) +"hf" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"hg" = ( +/obj/machinery/suit_storage_unit/syndicate/softsuit, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/bridge/eva) +"hh" = ( +/obj/structure/chair/comfy/brown{ + color = "#596479"; + dir = 1 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/bridge/admiral) +"hi" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"hn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"ho" = ( +/obj/machinery/computer/security{ + dir = 4; + network = list("ds2") + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"hq" = ( +/obj/structure/drain, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/siding/thinplating{ + dir = 6 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/firealarm/directional/north, +/obj/machinery/duct, +/turf/open/floor/iron/small, +/area/ruin/space/has_grav/nova/des_two/medbay) +"hs" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"hx" = ( +/obj/machinery/power/turbine/inlet_compressor, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/space/has_grav/nova/des_two/engineering) +"hy" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark/corner, +/obj/effect/turf_decal/siding/dark/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/ruin/space/has_grav/nova/des_two/bridge/vault) +"hz" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"hA" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/machinery/light/cold/directional/east, +/obj/effect/spawner/random/contraband/prison, +/obj/structure/closet/crate/bin, +/obj/effect/spawner/random/trash/food_packaging{ + pixel_y = -5 + }, +/obj/effect/spawner/random/trash/cigbutt, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"hC" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/siding/dark, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/rack, +/obj/item/storage/medkit/emergency, +/obj/machinery/light/cold/directional/east, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"hE" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/obj/machinery/light/cold/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/nova/des_two/medbay/chem) +"hF" = ( +/obj/item/tank/internals/plasmaman/belt{ + pixel_x = -6 + }, +/obj/item/tank/internals/plasmaman/belt{ + pixel_x = 3 + }, +/obj/item/tank/internals/nitrogen/belt{ + pixel_x = -6 + }, +/obj/item/tank/internals/nitrogen/belt, +/obj/item/tank/internals/nitrogen/belt{ + pixel_x = 6 + }, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/structure/rack/shelf, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"hG" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"hH" = ( +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"hJ" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/hedge, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/window/reinforced/survival_pod{ + dir = 6 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/wood/parquet, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"hM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/poddoor/preopen{ + id = "void-be-gone" + }, +/obj/structure/fans/tiny/forcefield{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"hP" = ( +/obj/machinery/light/cold/directional/east, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/vending/cigarette, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"hQ" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate/cardboard, +/obj/item/pai_card, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/iron/dark/textured_edge, +/area/ruin/space/has_grav/nova/des_two/cargo) +"hR" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/bridge/eva) +"hT" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line, +/obj/effect/turf_decal/siding/dark, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/table/glass, +/obj/item/storage/backpack/duffelbag/synth_treatment_kit/trauma/advanced/unzipped, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"hZ" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark/end{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"ib" = ( +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/effect/turf_decal/siding/white, +/obj/machinery/chem_heater/withbuffer, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/medbay/chem) +"ie" = ( +/obj/structure/bed, +/obj/item/bedsheet/hos{ + name = "master at arms's bedsheet" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/nova/des_two/security) +"ih" = ( +/obj/effect/turf_decal/trimline/brown/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"ij" = ( +/obj/effect/turf_decal/trimline/purple/filled/corner{ + dir = 4 + }, +/obj/item/circuitboard/machine/circuit_imprinter/offstation, +/obj/structure/frame/machine{ + anchored = 1; + icon_state = "box_1"; + state = 2 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"il" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/service/dorms/fitness) +"io" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/door/window/survival_pod{ + dir = 8; + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/medbay/chem) +"it" = ( +/obj/structure/chair, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/security/lawyer) +"iw" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate/freezer{ + name = "imported ingredient freezer" + }, +/obj/item/reagent_containers/condiment/vinegar{ + pixel_x = -3; + pixel_y = 11 + }, +/obj/item/reagent_containers/condiment/yoghurt{ + pixel_x = 6; + pixel_y = 5 + }, +/obj/item/reagent_containers/condiment/cornmeal{ + pixel_x = -6; + pixel_y = 2 + }, +/obj/item/food/canned/jellyfish{ + pixel_x = 5 + }, +/obj/item/food/canned/desert_snails{ + pixel_x = -3; + pixel_y = 1 + }, +/obj/item/food/canned/tomatoes, +/obj/item/food/canned/tuna{ + pixel_x = -6; + pixel_y = -5 + }, +/obj/item/food/canned/pine_nuts{ + pixel_x = 10; + pixel_y = -9 + }, +/obj/item/reagent_containers/condiment/olive_oil{ + pixel_x = 3; + pixel_y = -2 + }, +/obj/item/food/fishmeat/moonfish{ + pixel_y = -11 + }, +/obj/item/food/fishmeat/moonfish{ + pixel_y = -8 + }, +/obj/item/food/fishmeat/moonfish{ + pixel_y = -5 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"ix" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/light/cold/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/item/storage/box/stockparts/basic{ + pixel_y = 6 + }, +/obj/item/storage/box/stockparts/basic{ + pixel_x = 8 + }, +/obj/item/storage/box/beakers{ + pixel_x = -4; + pixel_y = -2 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"iy" = ( +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 8 + }, +/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/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"iz" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"iB" = ( +/obj/machinery/light/cold/directional/west, +/obj/machinery/atmospherics/miner/oxygen, +/turf/open/floor/engine/o2, +/area/ruin/space/has_grav/nova/des_two/engineering) +"iE" = ( +/obj/structure/lattice, +/obj/structure/transit_tube{ + dir = 8 + }, +/turf/template_noop, +/area/template_noop) +"iF" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/medbay) +"iK" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/grunge{ + id_tag = "TESArena"; + name = "Dormitory" + }, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"iM" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"iO" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"iP" = ( +/obj/structure/table, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"iR" = ( +/obj/structure/dresser, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"iS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/green/hidden{ + dir = 8 + }, +/obj/machinery/meter, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"iV" = ( +/obj/item/chair{ + dir = 8; + pixel_x = 5; + pixel_y = -3 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"iX" = ( +/obj/structure/chair/office/light{ + dir = 8 + }, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/medbay/chem) +"iY" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 8 + }, +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"iZ" = ( +/obj/machinery/light/warm/directional/south, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"jb" = ( +/obj/machinery/iv_drip, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/medbay) +"jc" = ( +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"jd" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/item/bodybag/environmental/prisoner/syndicate{ + pixel_x = -7; + pixel_y = 15 + }, +/obj/item/bodybag/environmental/prisoner/syndicate{ + pixel_x = 7; + pixel_y = 15 + }, +/obj/item/bodybag/environmental/prisoner/syndicate{ + pixel_y = 8 + }, +/obj/structure/table/reinforced, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/obj/machinery/camera/xray/directional/west{ + c_tag = "DS-2 Brig Storage"; + network = list("ds2") + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"jf" = ( +/obj/structure/closet/emcloset, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/structure/window/reinforced/survival_pod{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"jj" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"jl" = ( +/obj/effect/turf_decal/trimline/purple/filled/end{ + dir = 1 + }, +/obj/structure/table, +/obj/machinery/coffeemaker, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"jm" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo) +"jp" = ( +/obj/machinery/light/warm/directional/north, +/obj/machinery/computer{ + desc = "A console meant to allow modifications to IDs. There's a chameleon ID stuck inside and no one has been able to pull it out..."; + icon_keyboard = "syndie_key"; + icon_screen = "explosive"; + name = "syndicate access change console" + }, +/obj/item/paper{ + default_raw_text = "

DS2 Corporate Report

The Deep Space 2 Forward Operating Base has successfully relocated itself near active Nanotrasen installations. Reboot of shuttle engines in progress...

The Sothran Syndicate welcomes you onboard, Corporate Liaison. It is deeply suggested you help our crew via informing them of their corporate investors' goal and to help maintain cohesion. Don't hurt yourself now, and stay winning.

"; + name = "paper- 'DS2 Corporate Report'" + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"jr" = ( +/obj/item/sign/flag/syndicate{ + pixel_x = 3; + pixel_y = 6 + }, +/obj/item/flashlight/lamp/green{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/structure/table/wood/fancy/black, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/carpet/red, +/area/ruin/space/has_grav/nova/des_two/bridge/admiral) +"jt" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/hedge, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/machinery/light/warm/directional/south, +/turf/open/floor/wood/parquet, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"jw" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"jB" = ( +/obj/structure/chair/comfy/brown{ + color = "#596479" + }, +/obj/machinery/button/door{ + desc = "Keep out the paperwork."; + id = "ds2admiral"; + name = "Shutters control"; + pixel_x = 32; + pixel_y = 24; + req_access = list("syndicate_leader") + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/bridge/admiral) +"jC" = ( +/obj/effect/turf_decal/nova_decals/syndicate/middle/right, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/nova_decals/ds2/right, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/bridge) +"jD" = ( +/obj/item/storage/briefcase/secure/white{ + pixel_y = 13 + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"jE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/obj/item/toy/figure/syndie{ + pixel_x = 10; + pixel_y = 20 + }, +/turf/open/floor/plating/elevatorshaft, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"jJ" = ( +/obj/structure/frame/machine{ + anchored = 1; + icon_state = "box_1"; + state = 2 + }, +/obj/item/circuitboard/machine/mechfab, +/obj/effect/turf_decal/trimline/dark_red/filled/line, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"jN" = ( +/obj/effect/turf_decal/siding/wideplating_new/dark, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"jO" = ( +/obj/effect/turf_decal/delivery/red, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security) +"jP" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/window/reinforced/survival_pod{ + dir = 5 + }, +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/space/has_grav/nova/des_two/engineering) +"jR" = ( +/obj/effect/turf_decal/box/red/corners, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"jT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"jW" = ( +/obj/structure/closet/secure_closet/des_two/robotics, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/research) +"jZ" = ( +/obj/machinery/hydroponics/constructable, +/obj/effect/turf_decal/bot_white, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"ka" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/vg_decals/atmos/carbon_dioxide, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/engineering) +"kb" = ( +/obj/structure/chair, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/security/lawyer) +"kc" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction/yjunction{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"kd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/computer/turbine_computer{ + dir = 1; + mapping_id = "syndicatelava_turbine" + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/window/reinforced/survival_pod{ + dir = 10 + }, +/obj/machinery/button/door/incinerator_vent_syndicatelava_aux{ + name = "Combustion Chamber Blast Door Control"; + pixel_x = -24; + pixel_y = -6 + }, +/obj/machinery/button/door/incinerator_vent_syndicatelava_main{ + name = "Turbine Exterior Vent Control"; + pixel_x = -24; + pixel_y = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/button/ignition/incinerator/syndicatelava{ + pixel_x = -36 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/engineering) +"ke" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"kf" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"kg" = ( +/obj/structure/transit_tube/crossing/horizontal, +/obj/structure/lattice, +/turf/template_noop, +/area/template_noop) +"km" = ( +/obj/machinery/button/door{ + id = "TESBattlespire"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -24; + pixel_y = 24; + specialfunctions = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"kt" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/obj/structure/disposaloutlet, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/engineering) +"kx" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/template_noop) +"kB" = ( +/obj/machinery/light/cold/directional/east, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/corner, +/mob/living/basic/lizard/tegu{ + name = "Entertains-The-Hostages" + }, +/obj/structure/bed/dogbed, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"kD" = ( +/obj/machinery/smartfridge/food, +/turf/open/floor/iron/dark/smooth_large, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"kF" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"kG" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_y = 2 + }, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"kH" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/machinery/vending/medical/syndicate_access/cybersun{ + desc = "An advanced vendor that dispenses medical drugs, both recreational and medicinal. It's said to have been salvaged from an old decomissioned Cybersun Cruiser."; + name = "\improper SyndiMed ++" + }, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"kI" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/door/window/survival_pod{ + dir = 1 + }, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"kM" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"kN" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/window/survival_pod{ + dir = 4; + req_access = list("syndicate_leader") + }, +/obj/machinery/door/window/survival_pod{ + dir = 8; + heat_proof = 1 + }, +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id = "ds2corpliaison"; + name = "Corporate Liaison Shutters" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"kQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"kT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/light/warm/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/space/has_grav/nova/des_two/engineering) +"kZ" = ( +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"la" = ( +/obj/structure/weightmachine, +/obj/effect/turf_decal/box/white, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"lb" = ( +/obj/structure/table, +/obj/machinery/microwave{ + pixel_y = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"ld" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/maintenance/two, +/obj/structure/closet/crate, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"lg" = ( +/obj/structure/closet/secure_closet/des_two/cl_locker, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/turf/open/floor/iron/dark/smooth_large, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"li" = ( +/obj/structure/table/glass, +/obj/item/storage/pill_bottle/mannitol{ + pixel_x = -8; + pixel_y = 6 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/machinery/duct, +/obj/item/stack/medical/gauze{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/item/stack/medical/mesh{ + pixel_x = 4 + }, +/obj/item/stack/medical/suture, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"lo" = ( +/obj/machinery/button/door{ + id = "syndie_ds2_vault"; + name = "Vault Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -24; + pixel_y = 24; + req_access = list("syndicate"); + specialfunctions = 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/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"lp" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"lt" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/item/wirecutters, +/obj/machinery/syndicatebomb/training, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"lu" = ( +/obj/machinery/light/cold/directional/north, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/bridge) +"lD" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/trimline/dark_red/line, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ + dir = 1 + }, +/obj/structure/chair/office{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_half, +/area/ruin/space/has_grav/nova/des_two/bridge) +"lE" = ( +/obj/effect/turf_decal/bot_blue, +/obj/machinery/light/cold/directional/south, +/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/service{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"lF" = ( +/obj/effect/turf_decal/tile/dark_red/fourcorners, +/obj/structure/table, +/obj/item/mmi/posibrain/syndie/ds2{ + pixel_x = 2; + pixel_y = 6 + }, +/obj/item/mmi/posibrain/syndie/ds2{ + pixel_x = -4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"lI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/light/red/directional/south, +/obj/effect/turf_decal/siding/white{ + dir = 10 + }, +/turf/open/floor/plating/elevatorshaft, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"lJ" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/light/cold/directional/west, +/obj/item/clothing/shoes/sneakers/crimson{ + pixel_x = -4 + }, +/obj/item/clothing/shoes/sneakers/crimson{ + pixel_x = 4 + }, +/obj/machinery/firealarm/directional/west, +/obj/item/clothing/under/rank/prisoner/syndicate, +/obj/item/clothing/under/rank/prisoner/syndicate{ + pixel_y = 4 + }, +/obj/item/clothing/under/rank/prisoner/syndicate{ + pixel_y = 8 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"lO" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"lU" = ( +/obj/effect/turf_decal/trimline/dark_blue/corner{ + 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/ruin/space/has_grav/nova/des_two/halls) +"lW" = ( +/obj/machinery/stasis, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/medbay) +"lY" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/research) +"lZ" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/obj/structure/frame/machine{ + anchored = 1; + icon_state = "box_1"; + state = 2 + }, +/obj/item/circuitboard/machine/smes, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"md" = ( +/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/airlock/cmo/glass{ + name = "Medical Bay" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/medbay) +"me" = ( +/obj/machinery/button/door{ + id = "TESSkyrim"; + name = "Restroom Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -24; + pixel_y = -24; + specialfunctions = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"mg" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/siding/dark, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/machinery/atmospherics/components/trinary/mixer/flipped{ + dir = 8; + name = "plasma mixer"; + target_pressure = 2000 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"mi" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/machinery/vending/hydroseeds, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"mj" = ( +/obj/machinery/photocopier, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/security/lawyer) +"ml" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/structure/fans/tiny, +/obj/structure/cable, +/obj/machinery/door/airlock/external/glass{ + name = "External Access" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"mr" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/research) +"ms" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/security) +"mx" = ( +/obj/effect/turf_decal/trimline/dark_blue/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/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"my" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/cargo) +"mA" = ( +/obj/effect/turf_decal/stripes/red/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/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"mC" = ( +/obj/structure/cable, +/obj/machinery/power/smes/engineering{ + charge = 4.5e+006; + input_level = 150000 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/obj/item/aicard/aitater{ + pixel_x = 3; + pixel_y = 11 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"mD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/dark/textured_edge{ + dir = 8 + }, +/area/ruin/space/has_grav/nova/des_two/cargo) +"mH" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/door/window/survival_pod{ + dir = 4; + req_access = list("syndicate_leader") + }, +/obj/effect/turf_decal/delivery/red, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/item/folder/red, +/obj/item/paper{ + pixel_x = -3; + pixel_y = -4 + }, +/obj/item/paper{ + pixel_x = 4; + pixel_y = -6 + }, +/obj/item/pen{ + pixel_y = -4 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"mJ" = ( +/obj/effect/turf_decal/tile/brown, +/obj/effect/turf_decal/siding/dark, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"mK" = ( +/obj/structure/table/wood, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/item/storage/bag/books, +/obj/item/book/bible/syndicate{ + pixel_x = -13 + }, +/obj/item/storage/fancy/candle_box{ + pixel_x = 4 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"mL" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/north, +/obj/structure/window/reinforced/tinted/spawner/directional/west, +/obj/machinery/power/shuttle_engine/heater, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/nova/des_two) +"mO" = ( +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/structure/window/reinforced/survival_pod{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"mP" = ( +/obj/machinery/biogenerator, +/obj/item/reagent_containers/cup/beaker/large, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"mQ" = ( +/obj/effect/turf_decal/box/red/corners{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"mT" = ( +/obj/structure/table/glass, +/obj/item/gun/energy/floragun{ + pixel_y = 7 + }, +/obj/item/geneshears, +/obj/item/plant_analyzer{ + pixel_x = -7 + }, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"mX" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"mY" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/machinery/computer/station_alert{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_red/line, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/dark/textured_half, +/area/ruin/space/has_grav/nova/des_two/bridge) +"nd" = ( +/obj/effect/turf_decal/trimline/blue/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_edge{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/halls) +"ni" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/machinery/light/cold/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"nm" = ( +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"nn" = ( +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/chair/comfy/brown{ + color = "#596479"; + dir = 1 + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"ny" = ( +/obj/machinery/light/warm/directional/south, +/turf/open/floor/carpet/blue, +/area/ruin/space/has_grav/nova/des_two/service/dorms/fitness) +"nz" = ( +/obj/structure/closet/crate/freezer/blood, +/obj/machinery/duct, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/nova/des_two/medbay) +"nA" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/table, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/obj/item/storage/box/stockparts/basic{ + pixel_x = -3; + pixel_y = 11 + }, +/obj/item/storage/box/stockparts/basic{ + pixel_x = 5; + pixel_y = 8 + }, +/obj/item/storage/box/stockparts/basic, +/obj/item/storage/part_replacer{ + pixel_x = -2; + pixel_y = -12 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"nG" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark, +/obj/structure/rack/shelf, +/obj/item/circuitboard/machine/xenoarch_machine/xenoarch_researcher{ + pixel_y = -6 + }, +/obj/item/circuitboard/machine/xenoarch_machine/xenoarch_digger{ + pixel_y = -3 + }, +/obj/item/circuitboard/machine/xenoarch_machine/xenoarch_recoverer, +/obj/item/circuitboard/machine/xenoarch_machine/xenoarch_scanner{ + pixel_y = 3 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/research) +"nH" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/wood/parquet, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"nI" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"nK" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/computer/monitor{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/engineering) +"nL" = ( +/obj/machinery/light/warm/directional/west, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/violet/hidden, +/obj/machinery/meter, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"nN" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ + dir = 4 + }, +/obj/machinery/meter, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"nO" = ( +/obj/machinery/porta_turret/syndicate/energy{ + dir = 9 + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/bridge/vault) +"nR" = ( +/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/stationmed{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/nova/des_two/medbay) +"nS" = ( +/obj/effect/turf_decal/bot_white, +/obj/structure/easel, +/obj/item/canvas/twentythree_nineteen, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"nT" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"ob" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/obj/structure/table, +/obj/item/knife{ + pixel_x = -9; + pixel_y = 3 + }, +/obj/item/kitchen/rollingpin, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_y = -4 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 6 + }, +/obj/structure/cable, +/obj/structure/window/reinforced/survival_pod{ + dir = 6 + }, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"oc" = ( +/obj/machinery/chem_master, +/obj/machinery/light/cold/directional/south, +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/medbay/chem) +"od" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"of" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/line, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron/dark/textured_half, +/area/ruin/space/has_grav/nova/des_two/bridge) +"og" = ( +/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/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"oi" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/hidden{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"ok" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Dormitories" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/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/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"on" = ( +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"oq" = ( +/obj/effect/turf_decal/tile/brown/half, +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 1 + }, +/obj/structure/tank_dispenser/oxygen, +/turf/open/floor/iron/dark/textured_half, +/area/ruin/space/has_grav/nova/des_two/cargo) +"or" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/item/sign/flag/syndicate{ + pixel_x = -3; + pixel_y = 6 + }, +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/glass/waterbottle{ + pixel_x = 8; + pixel_y = 4 + }, +/obj/structure/cable, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/nova/des_two/security) +"ot" = ( +/obj/machinery/light/cold/directional/east, +/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/stationmed{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/nova/des_two/medbay) +"ou" = ( +/obj/effect/turf_decal/trimline/dark_red/corner, +/obj/effect/turf_decal/trimline/dark_red/corner{ + dir = 8 + }, +/obj/machinery/computer{ + desc = "A console meant to communicate with Syndicate upper command. This one seems to be busy processing flight calculations since you last saw it..."; + icon_keyboard = "tech_key"; + icon_screen = "comm"; + name = "syndicate communications console" + }, +/obj/item/paper{ + default_raw_text = "

DS2 Transfer Report

The Deep Space 2 Forward Operating Base has successfully relocated itself near active Nanotrasen installations. Reboot of shuttle engines in progress...

Active syndicate operatives have been transferred over to the target NT workplace and are NOT to be interacted with under any circumstances, unless Syndicate Command allows it. Permission to monitor their activities is granted and heavily suggested.

Stay winning.

"; + name = "paper- 'DS2 Transfer Report'" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/bridge) +"ov" = ( +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/obj/machinery/light/cold/directional/east, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"ow" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/obj/structure/closet/secure_closet/medical1{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/nova/des_two/medbay/chem) +"oz" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"oC" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/medbay) +"oE" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/dark, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/bridge/eva) +"oG" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 5; + faction = list("Syndicate","neutral") + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"oK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/research) +"oO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"oR" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/machinery/light/cold/directional/east, +/obj/structure/rack/shelf, +/obj/item/crowbar/power/syndicate{ + pixel_y = 8 + }, +/obj/item/crowbar/power/syndicate{ + pixel_y = 2 + }, +/obj/item/crowbar/power/syndicate{ + pixel_y = -4 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"oS" = ( +/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/brigoff{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"oT" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"oV" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/bathroom{ + id_tag = "TESSkyrim"; + name = "Restroom" + }, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"oZ" = ( +/obj/machinery/vending/games, +/obj/machinery/camera/xray/directional/west{ + c_tag = "DS-2 Lounge"; + network = list("ds2") + }, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"pa" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/corner, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"pb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/conveyor{ + id = "ds2disposals" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/spawner/random/trash/garbage{ + pixel_y = -10 + }, +/turf/open/floor/iron/pool, +/area/ruin/space/has_grav/nova/des_two/engineering) +"pe" = ( +/obj/machinery/light/cold/directional/north, +/obj/effect/turf_decal/trimline/dark_red/filled, +/obj/effect/turf_decal/siding/white/corner, +/obj/effect/turf_decal/siding/white/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"pf" = ( +/obj/structure/sign/poster/contraband/icebox_moment/directional/south, +/obj/effect/turf_decal/stripes/red/corner, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"pi" = ( +/obj/machinery/computer/crew/syndie{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"pk" = ( +/obj/structure/frame/machine{ + anchored = 1; + icon_state = "box_1"; + state = 2 + }, +/obj/item/circuitboard/machine/module_duplicator, +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"pl" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/item/circuitboard/computer/rdconsole, +/obj/structure/frame/computer{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"pn" = ( +/obj/effect/turf_decal/nova_decals/departments/bridge{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_edge{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/halls) +"pr" = ( +/obj/machinery/door/poddoor/incinerator_syndicatelava_main{ + name = "Turbine Exterior Vent" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/ruin/space/has_grav/nova/des_two/engineering) +"ps" = ( +/obj/machinery/computer/cryopod/interdyne/directional/west, +/obj/structure/table, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/iron/diagonal, +/area/ruin/space/has_grav/nova/des_two/halls) +"pt" = ( +/obj/machinery/light/warm/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"pu" = ( +/obj/effect/turf_decal/siding/dark/corner, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/research) +"py" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/tile/dark_red/half, +/obj/effect/turf_decal/siding/wideplating_new/dark, +/obj/machinery/camera/xray/directional/north{ + c_tag = "DS-2 Hangar North"; + network = list("ds2") + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"pz" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 8 + }, +/obj/structure/chair/stool/bar{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"pB" = ( +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, +/obj/effect/turf_decal/delivery/red, +/obj/machinery/door/airlock/security/old/glass{ + name = "Long-Term Brig" + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "DS2permabrig" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security) +"pI" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/siding/thinplating/end{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/window/reinforced/survival_pod{ + dir = 6 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/small, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"pL" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/item/storage/box/firingpins/syndicate{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/storage/box/firingpins/syndicate{ + pixel_x = 2 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"pO" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"pP" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/effect/turf_decal/delivery/red, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"pW" = ( +/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/brigoff{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"pX" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/structure/curtain/cloth/fancy/mechanical{ + color = "#555555"; + icon_state = "bathroom-open"; + icon_type = "bathroom"; + id = "DS2cell1" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"qc" = ( +/obj/structure/bed/double{ + dir = 1 + }, +/obj/item/bedsheet/brown/double{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"qj" = ( +/obj/structure/dresser, +/obj/item/flashlight/lamp/green{ + pixel_x = 5; + pixel_y = 15 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/nova/des_two/security) +"qn" = ( +/obj/machinery/light/no_nightlight/directional/east, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"qo" = ( +/obj/structure/rack/shelf, +/obj/item/mod/module/chameleon{ + pixel_x = 6 + }, +/obj/item/mod/module/chameleon{ + pixel_x = -2; + pixel_y = -6 + }, +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 9 + }, +/obj/effect/spawner/random/mod{ + pixel_x = 6; + pixel_y = -8 + }, +/obj/effect/spawner/random/mod, +/obj/item/mod/construction/broken_core{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/mod/core/standard, +/obj/item/mod/construction/broken_core{ + pixel_x = -2; + pixel_y = -6 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"qs" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/item/storage/wallet/random, +/obj/item/clothing/under/costume/jabroni{ + has_sensor = 0; + random_sensor = 0 + }, +/obj/structure/closet/secure_closet/personal, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"qt" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"qu" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/railing/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/window/reinforced/survival_pod{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/space/has_grav/nova/des_two/engineering) +"qv" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/trimline/dark_green/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/halls) +"qw" = ( +/obj/machinery/suit_storage_unit/syndicate/chameleon{ + name = "suit storage unit"; + req_access = list("syndicate_leader") + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"qz" = ( +/obj/machinery/power/shuttle_engine/propulsion/left{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/nova/des_two) +"qC" = ( +/obj/machinery/door/airlock/service/glass{ + name = "Hydroponics" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/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/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"qE" = ( +/obj/structure/rack, +/obj/item/clothing/shoes/magboots/syndie{ + pixel_y = 8 + }, +/obj/item/clothing/shoes/magboots/syndie, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/bridge/eva) +"qH" = ( +/obj/structure/railing, +/obj/effect/turf_decal/siding/dark, +/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/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/nova/des_two/medbay/chem) +"qI" = ( +/obj/effect/turf_decal/trimline/dark_red/line, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner, +/obj/machinery/computer/crew/syndie, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/bridge) +"qK" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/research) +"qN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/nova/des_two/security) +"qO" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "ds2conveyor" + }, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"qR" = ( +/obj/machinery/vending/imported/mothic, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"qS" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"qW" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/structure/chair/office/light{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"qY" = ( +/obj/structure/table, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/item/radio{ + desc = "An old handheld radio. You could use it, if you really wanted to."; + icon_state = "radio"; + name = "old radio"; + pixel_y = 5 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/dorms/fitness) +"ra" = ( +/obj/effect/turf_decal/delivery/white, +/obj/machinery/door/airlock/bathroom{ + name = "Brig Restroom" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"rb" = ( +/obj/machinery/atmospherics/components/binary/pump/off/scrubbers/visible/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_red/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_red/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"rc" = ( +/obj/effect/turf_decal/delivery/red, +/obj/effect/mob_spawn/ghost_role/human/ds2/prisoner{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"rd" = ( +/obj/effect/turf_decal/arrows{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"rg" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/bridge/eva) +"ri" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/parquet, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"rj" = ( +/obj/item/kirbyplants/organic/plant22, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"rk" = ( +/obj/effect/turf_decal/trimline/purple/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/warning, +/obj/structure/disposalpipe/junction/yjunction{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"rl" = ( +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"ro" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/obj/machinery/door/airlock/silver/glass{ + name = "Kitchen" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"rr" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"rs" = ( +/obj/machinery/shower/directional/north, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/obj/structure/drain, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/service/dorms/fitness) +"rx" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"rz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/cable, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"rB" = ( +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"rD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"rG" = ( +/obj/machinery/door/airlock/engineering{ + name = "Ship Atmospherics" + }, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/engineering) +"rH" = ( +/obj/machinery/light/cold/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/structure/bookcase/random{ + books_to_load = 10 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"rI" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/dorms/fitness) +"rM" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 8 + }, +/obj/effect/spawner/random/food_or_drink/condiment{ + pixel_x = 8; + pixel_y = 6 + }, +/obj/structure/cable, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"rN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/external/glass{ + name = "External Access" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"rU" = ( +/obj/machinery/dryer{ + pixel_x = 8; + pixel_y = 20 + }, +/obj/structure/sink/directional/east{ + pixel_y = -6 + }, +/obj/structure/mirror/directional/west, +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"rY" = ( +/obj/structure/rack, +/obj/item/restraints/handcuffs, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"rZ" = ( +/obj/effect/turf_decal/siding/dark/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"sa" = ( +/obj/effect/turf_decal/nova_decals/syndicate/bottom/left, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/bridge) +"sc" = ( +/obj/structure/table/wood, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"sh" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"sj" = ( +/obj/effect/turf_decal/siding/dark, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"sl" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/camera/xray/directional/south{ + c_tag = "DS-2 Long-Term Brig Access"; + network = list("ds2") + }, +/obj/item/card/id/advanced/prisoner/ds2, +/obj/item/card/id/advanced/prisoner/ds2{ + pixel_y = 4; + trim = /datum/id_trim/syndicom/nova/ds2/prisoner + }, +/obj/item/card/id/advanced/prisoner/ds2{ + pixel_y = 8; + trim = /datum/id_trim/syndicom/nova/ds2/prisoner + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"sr" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"ss" = ( +/obj/effect/turf_decal/vg_decals/numbers/four{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine/hull, +/area/template_noop) +"st" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"sy" = ( +/obj/effect/turf_decal/nova_decals/syndicate/middle/left, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/nova_decals/ds2/left, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/bridge) +"sB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/parquet, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"sD" = ( +/obj/machinery/vending/sustenance, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"sH" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/parquet, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"sK" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/circuit/off, +/area/ruin/space/has_grav/nova/des_two/bridge/vault) +"sL" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/security/lawyer) +"sM" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark_red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ + dir = 8 + }, +/obj/structure/showcase/cyborg{ + desc = "A stand with the empty body of a Cybersun cyborg bolted to it."; + dir = 4; + icon = 'icons/mob/silicon/robots.dmi'; + icon_state = "synd_sec"; + name = "syndicate cyborg showcase"; + pixel_x = -6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/bridge) +"sO" = ( +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage{ + pixel_x = -7; + pixel_y = 8 + }, +/obj/effect/spawner/random/food_or_drink/donkpockets_single{ + pixel_x = -4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"sP" = ( +/obj/effect/turf_decal/trimline/purple/filled/end, +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"sV" = ( +/obj/item/storage/box/beakers/bluespace{ + pixel_x = -2; + pixel_y = 8 + }, +/obj/item/storage/box/beakers/bluespace{ + pixel_x = 2 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/storage/bag/chemistry{ + pixel_x = -16 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/nova/des_two/medbay/chem) +"sW" = ( +/obj/effect/turf_decal/trimline/blue/warning{ + dir = 8 + }, +/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/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"sZ" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/oven/range, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"tf" = ( +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"tg" = ( +/obj/machinery/shower/directional/south, +/obj/item/soap/syndie, +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/obj/structure/drain, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/service/dorms/fitness) +"tk" = ( +/obj/effect/turf_decal/trimline/yellow/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"tl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/plasticflaps, +/obj/machinery/conveyor{ + id = "ds2disposals" + }, +/turf/open/floor/iron/pool, +/area/ruin/space/has_grav/nova/des_two/engineering) +"tm" = ( +/obj/machinery/vending/assist, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/ruin/space/has_grav/nova/des_two/research) +"tn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"tq" = ( +/obj/effect/turf_decal/trimline/yellow/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"tt" = ( +/obj/structure/bed/double, +/obj/item/bedsheet/brown/double, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"tA" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 1 + }, +/obj/item/paper{ + default_raw_text = "

Gorlex Engineering

New to setting up a turbine, operative? This neat little guide and set-up should teach you how, step by step.

The first step is setting up the burn chamber. The Air alarm is unlocked for syndicate access, and a single scrubber in the area is inactive. That is our burn chamber's scrubber. Set it to scoop up any gas you don't want in it - anything but plasma and oxygen - and set it on expanded reach.

Next is setting up the Plasma Mixer. A good ratio is somewhere between 30-70 and 40-60 Plasma and Oxygen, respectively. Don't forget to max out the mixer's pressure, else it'll only dribble in the gas!

Once that is done, make sure to activate the two digital valves on the floor. One will allow O2 to be brought to the mixer, and the other one will lead the gas mix directly into the chamber.

With the burn being ready, two last things are needed. First, you'll need to set up the ship's scrubbers system to actively pump into space the excess gasses (Water vapour, Co2) the burn will produce. If you want, you can select a gas to filter out, but that isn't necessary. Once everything is set up, flick the igniter switch on, turn on the turbine at the terminal, and watch that fire shine bright!

"; + name = "paper- 'Gorlex Engineering Division - Turbine Easy-Set Guide'" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"tC" = ( +/obj/machinery/door/airlock/research{ + name = "Robotics" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/research) +"tD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/camera/xray/directional/west{ + c_tag = "DS-2 Security Checkpoint"; + network = list("ds2") + }, +/obj/machinery/computer/crew/syndie{ + dir = 1 + }, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/cargo) +"tE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/effect/turf_decal/siding/white{ + dir = 5 + }, +/turf/open/floor/plating/elevatorshaft, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"tG" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo) +"tL" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/obj/item/storage/medkit/advanced{ + pixel_x = -2; + pixel_y = 8 + }, +/obj/item/storage/medkit/regular{ + pixel_x = 3; + pixel_y = 1 + }, +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/medbay) +"tN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/violet/hidden, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"tP" = ( +/obj/machinery/door/airlock/security/old{ + hackProof = 1; + name = "Armory" + }, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, +/obj/effect/turf_decal/delivery/red, +/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/mapping_helpers/airlock/unres, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"tQ" = ( +/obj/effect/turf_decal/stripes/red/line, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"tR" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"tS" = ( +/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/item/seeds/tower, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/siding/dark, +/obj/machinery/light/cold/directional/west, +/obj/item/seeds/tobacco, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/obj/item/seeds/korta_nut, +/obj/item/reagent_containers/cup/watering_can, +/obj/item/cultivator, +/obj/item/plant_analyzer, +/obj/item/secateurs, +/obj/item/shovel/spade, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"tT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"tU" = ( +/obj/machinery/door/airlock/medical{ + name = "Chemistry" + }, +/obj/effect/turf_decal/stripes/blue/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/medbay/chem) +"tY" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + id = "ds2detective"; + name = "Interrogation Room Shutters" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/security/lawyer) +"tZ" = ( +/obj/machinery/smartfridge/food, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"ub" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"uc" = ( +/obj/structure/chair/stool/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"ue" = ( +/obj/effect/turf_decal/tile/dark_blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_blue, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/closet/crate/goldcrate, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/bridge/vault) +"uf" = ( +/obj/effect/turf_decal/siding/dark{ + 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/diagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"uh" = ( +/obj/structure/reagent_dispensers/watertank/high, +/obj/item/reagent_containers/cup/bucket, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/dark/smooth_large, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"ui" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/grunge{ + id_tag = "TESBattlespire"; + name = "Dormitory" + }, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"um" = ( +/obj/structure/reagent_dispensers/plumbed, +/obj/effect/turf_decal/siding/thinplating{ + dir = 10 + }, +/turf/open/floor/iron/small, +/area/ruin/space/has_grav/nova/des_two/medbay) +"uo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"uq" = ( +/obj/machinery/power/shuttle_engine/large, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/nova/des_two) +"uu" = ( +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/medbay) +"uA" = ( +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"uB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/donk, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"uD" = ( +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"uE" = ( +/obj/effect/turf_decal/tile/dark_blue, +/obj/effect/turf_decal/tile/dark_blue{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark/corner, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/structure/safe, +/obj/item/storage/box/syndie_kit/chameleon/ghostcafe{ + desc = "A sleek, sturdy box."; + name = "Chameleon Kit" + }, +/obj/item/reagent_containers/heroinbrick{ + desc = "A brick of stimulants meant for use by Tiger Cooperative agents. It seems this one's just a brittle block of heroin."; + name = "Tiger Coop stimulant brick" + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/bridge/vault) +"uL" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"uN" = ( +/obj/machinery/hydroponics/constructable, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"uS" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/delivery/red, +/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{ + name = "Cell 1" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"uV" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/security/lawyer) +"uW" = ( +/obj/structure/tank_holder/anesthetic, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/medbay) +"va" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "ds2bridge" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/halls) +"vc" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"vd" = ( +/obj/structure/frame/machine{ + anchored = 1; + icon_state = "box_1"; + state = 2 + }, +/obj/item/circuitboard/machine/cyborgrecharger, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_red/filled/line, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"ve" = ( +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"vg" = ( +/obj/structure/table/optable, +/obj/machinery/defibrillator_mount/loaded{ + pixel_y = 28 + }, +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/medbay) +"vl" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/bridge/vault) +"vo" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/structure/rack/shelf, +/obj/item/stock_parts/cell/lead{ + pixel_x = 4; + pixel_y = -6 + }, +/obj/item/stock_parts/cell/lead, +/obj/item/stock_parts/cell/lead{ + pixel_x = -4; + pixel_y = -8 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/research) +"vp" = ( +/obj/effect/turf_decal/stripes/red/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/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"vq" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark/corner, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/bridge/eva) +"vr" = ( +/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate_command/masteratarms, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/nova/des_two/security) +"vv" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"vx" = ( +/obj/structure/closet/secure_closet/des_two/sa_locker, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/turf/open/floor/iron/dark/smooth_large, +/area/ruin/space/has_grav/nova/des_two/bridge/admiral) +"vA" = ( +/obj/machinery/quantumpad{ + map_pad_id = "ds2"; + map_pad_link_id = "interdyne"; + name = "quantum pad to Interdyne" + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"vB" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/research) +"vD" = ( +/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/dark/side{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/dorms/fitness) +"vE" = ( +/obj/effect/turf_decal/trimline/yellow/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"vF" = ( +/obj/structure/curtain, +/obj/structure/drain, +/obj/machinery/shower/directional/north, +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"vK" = ( +/obj/structure/table/reinforced, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/item/paper{ + default_raw_text = "

DS2 Long-Term Brig Report

The Deep Space 2 Forward Operating Base has successfully relocated itself near active Nanotrasen installations. Reboot of shuttle engines in progress...

The Sothran Syndicate has been capable of kidnapping a few key NT workers of various hierarchy levels. It is your task to interrogate, question and break their wills in order to find more intel on our enemy, Nanotrasen.

Stay winning."; + name = "paper- 'DS2 Long-Term Brig Report'" + }, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"vM" = ( +/obj/effect/turf_decal/trimline/yellow/corner, +/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/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"vO" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/door/window/survival_pod{ + dir = 1 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"vQ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/west, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/halls) +"vR" = ( +/obj/machinery/disposal/delivery_chute{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/full, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/conveyor{ + id = "ds2disposals" + }, +/turf/open/floor/iron/pool, +/area/ruin/space/has_grav/nova/des_two/engineering) +"vS" = ( +/obj/machinery/porta_turret/syndicate/energy, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/bridge/vault) +"vT" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/vending/toyliberationstation, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"vU" = ( +/turf/open/floor/engine/plasma, +/area/ruin/space/has_grav/nova/des_two/engineering) +"wc" = ( +/obj/structure/bed/maint, +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"we" = ( +/obj/effect/turf_decal/siding/dark, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"wg" = ( +/turf/template_noop, +/area/template_noop) +"wh" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/hedge, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/window/reinforced/survival_pod{ + dir = 10 + }, +/turf/open/floor/wood/parquet, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"wj" = ( +/obj/machinery/vending/wardrobe/sec_wardrobe/red, +/turf/open/floor/iron/dark/smooth_large, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"wk" = ( +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/electrical{ + pixel_y = 8 + }, +/obj/item/storage/toolbox/syndicate, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"wm" = ( +/obj/effect/turf_decal/siding/dark/corner, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/research) +"wn" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron/dark/side, +/area/ruin/space/has_grav/nova/des_two/research) +"wp" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/east, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/halls) +"wt" = ( +/obj/effect/turf_decal/box/red/corners{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"wu" = ( +/obj/effect/turf_decal/nova_decals/syndicate/bottom/middle, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/bridge) +"wz" = ( +/obj/machinery/light/warm/directional/west, +/obj/machinery/computer/security{ + dir = 4; + network = list("ds2") + }, +/obj/structure/sign/flag/syndicate/directional/west, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"wE" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/dark/corner, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"wH" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/halls) +"wJ" = ( +/obj/effect/turf_decal/nova_decals/syndicate/top/middle, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/bridge) +"wN" = ( +/obj/structure/cable, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/nova/des_two/security) +"wS" = ( +/obj/machinery/igniter/incinerator_syndicatelava, +/turf/open/floor/engine, +/area/ruin/space/has_grav/nova/des_two/engineering) +"wV" = ( +/obj/machinery/gibber, +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"xb" = ( +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/bot, +/obj/structure/ore_box, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"xc" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"xd" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/siding/white, +/obj/item/toy/figure/syndie{ + pixel_x = 10; + pixel_y = -3 + }, +/obj/machinery/camera/xray/directional/south{ + c_tag = "DS-2 Hangar South"; + network = list("ds2") + }, +/turf/open/floor/plating/elevatorshaft, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"xk" = ( +/obj/machinery/chem_dispenser/drinks/fullupgrade{ + dir = 8 + }, +/obj/structure/table/wood, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"xp" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"xr" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/space/has_grav/nova/des_two) +"xu" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"xx" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/siding/dark, +/obj/machinery/light/cold/directional/west, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"xy" = ( +/obj/machinery/light/warm/directional/north, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/security/lawyer) +"xB" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 1 + }, +/obj/machinery/meter, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"xG" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/door/window/survival_pod{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/smooth_large, +/area/ruin/space/has_grav/nova/des_two/research) +"xH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"xQ" = ( +/obj/effect/turf_decal/stripes/red/full, +/obj/effect/turf_decal/box/white, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"xS" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"xX" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"xZ" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"ya" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/cmo/glass{ + name = "Medical Bay" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/medbay) +"yb" = ( +/obj/effect/turf_decal/stripes/red/corner, +/mob/living/basic/pet/cat/kitten{ + desc = "What appears to be a single-celled organism with a pronounced low-level intelligence."; + name = "Murder-Mittens" + }, +/obj/structure/cable, +/obj/structure/bed/dogbed, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"yd" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor/shutters{ + id = "smasteratarms"; + name = "Master At Arms Shutters" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/security) +"ye" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/machinery/vending/drugs{ + name = "\improper SyndiDrug Plus"; + onstation = 0 + }, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"yh" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/machinery/light/cold/directional/west, +/obj/structure/table, +/obj/item/coin/iron{ + pixel_x = -10 + }, +/obj/item/toy/cards/deck, +/obj/item/storage/dice{ + pixel_x = 8; + pixel_y = 3 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"yi" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"yn" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"yu" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/halls) +"yv" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"yy" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 8 + }, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"yH" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/obj/structure/bed/pod, +/obj/item/bedsheet/black, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"yI" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/bridge) +"yL" = ( +/obj/effect/turf_decal/siding/dark, +/obj/structure/closet/secure_closet/des_two/prisoner_locker, +/obj/item/restraints/handcuffs, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"yP" = ( +/obj/structure/chair, +/obj/machinery/firealarm/directional/west, +/obj/machinery/camera/directional/west{ + c_tag = "DS-2 Dormitories"; + network = list("ds2") + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"yR" = ( +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"yS" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark_red/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ + dir = 4 + }, +/obj/structure/showcase/cyborg{ + desc = "A stand with the empty body of a Cybersun cyborg bolted to it."; + dir = 8; + icon = 'icons/mob/silicon/robots.dmi'; + icon_state = "synd_sec"; + name = "syndicate cyborg showcase"; + pixel_x = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 1 + }, +/area/ruin/space/has_grav/nova/des_two/bridge) +"yU" = ( +/obj/machinery/duct, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/medbay) +"yX" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/medbay) +"zb" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"zc" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/tile/dark_red/half, +/obj/effect/turf_decal/siding/wideplating_new/dark, +/obj/machinery/light/red/directional/north, +/turf/open/floor/iron/dark/textured_half{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"zd" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/halls) +"ze" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/structure/fans/tiny, +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/machinery/door/airlock/external/glass{ + name = "External Access" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/engineering) +"zg" = ( +/obj/item/circuitboard/machine/protolathe/offstation, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/frame/machine{ + anchored = 1; + icon_state = "box_1"; + state = 2 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"zh" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch{ + name = "Janitorial Supplies" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"zl" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"zn" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/light/cold/directional/west, +/obj/machinery/recharger, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"zp" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"zq" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"zt" = ( +/obj/structure/table/glass, +/obj/item/clothing/neck/stethoscope{ + pixel_x = 12; + pixel_y = 4 + }, +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/medbay) +"zv" = ( +/obj/effect/turf_decal/vg_decals/numbers/zero{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine/hull, +/area/template_noop) +"zx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/green/visible, +/obj/machinery/meter, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"zy" = ( +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ + dir = 9 + }, +/obj/machinery/light/warm/directional/east, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"zA" = ( +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_edge{ + dir = 8 + }, +/area/ruin/space/has_grav/nova/des_two/halls) +"zD" = ( +/obj/structure/table/wood, +/obj/item/paper_bin/carbon{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/pen{ + pixel_x = -5; + pixel_y = 3 + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"zH" = ( +/turf/open/floor/carpet/donk, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"zI" = ( +/obj/machinery/power/shuttle_engine/large{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/nova/des_two) +"zK" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/red/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/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"zL" = ( +/obj/effect/turf_decal/bot_blue, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/engineering) +"zM" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/effect/turf_decal/siding/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"zN" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/window/reinforced/survival_pod{ + dir = 6 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"zS" = ( +/obj/effect/turf_decal/trimline/purple/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"zU" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 5 + }, +/obj/machinery/light/cold/directional/west, +/obj/structure/chair/office/light, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"zV" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 8 + }, +/obj/structure/chair, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Aa" = ( +/obj/effect/turf_decal/tile/dark_red/fourcorners, +/obj/structure/table, +/obj/machinery/ecto_sniffer, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"Ae" = ( +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, +/obj/effect/turf_decal/delivery/red, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/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/machinery/door/airlock/security/old{ + hackProof = 1; + name = "Long-Term Brig" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "DS2permabrig" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Af" = ( +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_edge{ + dir = 8 + }, +/area/ruin/space/has_grav/nova/des_two/halls) +"Al" = ( +/obj/structure/table, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"An" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/door/airlock/external/glass{ + name = "External Access" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"Ao" = ( +/obj/structure/sink/directional/east{ + pixel_x = -11 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 5 + }, +/turf/open/floor/iron/small, +/area/ruin/space/has_grav/nova/des_two/medbay) +"Ar" = ( +/obj/machinery/smartfridge/food, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"At" = ( +/obj/structure/dresser, +/obj/item/flashlight/lamp/green{ + pixel_x = -4; + pixel_y = 15 + }, +/turf/open/floor/carpet/red, +/area/ruin/space/has_grav/nova/des_two/bridge/admiral) +"Au" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/light/cold/directional/east, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/ruin/space/has_grav/nova/des_two/cargo) +"Av" = ( +/obj/machinery/computer/atmos_alert, +/obj/effect/turf_decal/trimline/dark_red/line, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/bridge) +"Aw" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"Ax" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"Ay" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"Az" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/item/clothing/under/syndicate/nova/baseball, +/obj/structure/closet/secure_closet/personal, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"AC" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/siding/thinplating/end{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/iron/small, +/area/ruin/space/has_grav/nova/des_two/bridge) +"AG" = ( +/obj/structure/closet/secure_closet/des_two/munitions_locker, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"AI" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"AK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/security/lawyer) +"AR" = ( +/obj/machinery/light/red/directional/south, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"AV" = ( +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/bridge) +"AW" = ( +/obj/machinery/light/warm/directional/south, +/obj/machinery/button/door/directional/south{ + desc = "Keep out the Truth."; + id = "ds2detective"; + name = "Interrogation Room shutters control"; + req_access = list("syndicate") + }, +/obj/item/kirbyplants/organic/plant21, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/security/lawyer) +"AX" = ( +/obj/item/reagent_containers/cup/glass/waterbottle{ + pixel_x = 11 + }, +/obj/item/reagent_containers/cup/glass/waterbottle{ + pixel_x = 7; + pixel_y = -4 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/turf_decal/trimline/dark/line, +/obj/effect/turf_decal/trimline/dark/line, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/service/dorms/fitness) +"AZ" = ( +/obj/machinery/vending/boozeomat/syndicate_access, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Bb" = ( +/obj/effect/turf_decal/vg_decals/atmos/oxygen{ + dir = 4 + }, +/turf/open/floor/engine/o2, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Be" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/machinery/light/cold/directional/east, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"Bi" = ( +/obj/effect/turf_decal/siding/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/red/directional/north, +/obj/item/folded_navigation_gigabeacon, +/obj/structure/frame/machine{ + anchored = 1; + icon_state = "box_1"; + state = 2 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/bridge/vault) +"Bj" = ( +/obj/structure/sink/kitchen/directional/west, +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Bk" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/bridge) +"Bm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/conveyor{ + id = "ds2disposals" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/end, +/obj/effect/spawner/random/trash/food_packaging, +/obj/effect/spawner/random/trash/cigbutt{ + pixel_y = -10 + }, +/turf/open/floor/iron/pool, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Bs" = ( +/obj/structure/lattice, +/obj/structure/transit_tube{ + dir = 8 + }, +/obj/machinery/camera/xray/directional/north{ + c_tag = "DS-2 Transit Tube"; + network = list("ds2") + }, +/turf/template_noop, +/area/template_noop) +"Bu" = ( +/obj/machinery/suit_storage_unit/syndicate/chameleon{ + name = "suit storage unit"; + req_access = list("syndicate_leader") + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"Bv" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/rack/shelf, +/obj/item/shovel{ + pixel_y = 2 + }, +/obj/item/pickaxe{ + pixel_y = -4 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/cargo) +"Bw" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/conveyor_switch{ + desc = "An elevator control switch. This one seems defunct."; + id = "ds2fakelevator"; + name = "elevator control"; + pixel_y = 12 + }, +/obj/structure/railing/corner{ + pixel_y = 32 + }, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"By" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/machinery/door/airlock/cmo/glass{ + name = "Medical Bay" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/medbay) +"BC" = ( +/obj/structure/cable, +/obj/structure/table/reinforced, +/turf/open/floor/iron/dark/smooth_large, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"BG" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/miner, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/cargo) +"BL" = ( +/obj/structure/table, +/obj/item/book/manual/chef_recipes, +/obj/item/reagent_containers/condiment/enzyme, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -8; + pixel_y = 5 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 2 + }, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"BN" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"BO" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"BS" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/halls) +"BV" = ( +/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/ruin/space/has_grav/nova/des_two/security/lawyer) +"Cb" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"Cd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/duct, +/obj/structure/cable, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"Ce" = ( +/obj/structure/drain, +/obj/machinery/shower/directional/east, +/obj/effect/turf_decal/siding/thinplating/end{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Cf" = ( +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Ch" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/door/window/survival_pod{ + name = "Diner"; + req_access = list("syndicate") + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Ci" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/north, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/machinery/power/shuttle_engine/heater, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/nova/des_two) +"Cj" = ( +/obj/machinery/light/cold/directional/west, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/service/dorms/fitness) +"Cm" = ( +/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate_command/corporateliaison, +/turf/open/floor/carpet/donk, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"Cn" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor/incinerator_syndicatelava_aux{ + name = "Combustion Chamber Blast Door" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Cp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"Cq" = ( +/obj/effect/turf_decal/nova_decals/departments/bridge{ + dir = 8 + }, +/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/dark/textured_edge{ + dir = 8 + }, +/area/ruin/space/has_grav/nova/des_two/halls) +"Ct" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"Cy" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"CC" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/obj/machinery/light/cold/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"CE" = ( +/obj/structure/railing, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"CF" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/miner, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/cargo) +"CH" = ( +/turf/open/floor/carpet/red, +/area/ruin/space/has_grav/nova/des_two/bridge/admiral) +"CJ" = ( +/obj/machinery/oven/range, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"CS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/item/toy/figure/syndie{ + pixel_x = 10; + pixel_y = 20 + }, +/obj/item/toy/figure/syndie{ + pixel_y = 23 + }, +/turf/open/floor/plating/elevatorshaft, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"CT" = ( +/obj/structure/chair/stool/directional/west, +/obj/effect/turf_decal/stripes/red/line{ + dir = 10 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"CV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/turf/open/floor/plating/elevatorshaft, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"CX" = ( +/obj/machinery/light/warm/directional/north, +/obj/effect/turf_decal/siding/yellow{ + dir = 5 + }, +/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/enginetech{ + dir = 4 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/engineering) +"De" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"Dh" = ( +/obj/effect/turf_decal/delivery/red, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Dk" = ( +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/recharger, +/turf/open/floor/iron/dark/smooth_large, +/area/ruin/space/has_grav/nova/des_two/security) +"Dm" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/research) +"Dr" = ( +/obj/machinery/seed_extractor, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Ds" = ( +/obj/structure/toilet{ + pixel_y = 16 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Dt" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark/corner, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/research) +"Du" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Dv" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"Dw" = ( +/obj/structure/closet/emcloset, +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 1 + }, +/obj/machinery/light/red/directional/south, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"Dy" = ( +/obj/machinery/smartfridge/chemistry, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay/chem) +"Dz" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"DA" = ( +/obj/effect/turf_decal/bot, +/obj/item/disk{ + desc = "A cheap, plastic hard-disk labelled 'good tunes to assault ops to'. It looks disused... wait, is that a 'THE WEAPONIZED' logo?"; + icon_state = "nucleardisk"; + name = "dat fukken disk" + }, +/obj/item/choice_beacon/music{ + pixel_x = 5 + }, +/obj/item/choice_beacon/music{ + pixel_x = -3; + pixel_y = -4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/closet/crate/wooden, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/cargo) +"DB" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"DE" = ( +/obj/structure/table/wood, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/button/door{ + id = "TESArena"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -8; + pixel_y = 24; + specialfunctions = 4 + }, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"DF" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/trimline/dark_red/corner, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/fax{ + fax_name = "Unknown Syndicate Fax"; + name = "DS-2 Fax Machine"; + pixel_y = 7; + syndicate_network = 1 + }, +/turf/open/floor/iron/dark/textured_half, +/area/ruin/space/has_grav/nova/des_two/bridge) +"DH" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"DI" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/machinery/door/airlock/command{ + name = "E.V.A." + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/structure/cable, +/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/syndicate/general, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/bridge/eva) +"DJ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"DK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/ruin/space/has_grav/nova/des_two/service/dorms/fitness) +"DL" = ( +/obj/machinery/biogenerator, +/turf/open/floor/iron/dark/smooth_large, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"DS" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/siding/thinplating/end{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Eb" = ( +/obj/machinery/light/cold/directional/west, +/obj/effect/turf_decal/vg_decals/atmos/nitrogen{ + dir = 4 + }, +/turf/open/floor/engine/n2, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Ec" = ( +/obj/structure/transit_tube/station/dispenser/reverse, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/halls) +"Ed" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"Ej" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/siding/thinplating/end{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/button/door{ + id = "ds2cargo"; + name = "Cargo Blastdoor Control"; + pixel_x = 24; + req_access = list("syndicate") + }, +/obj/structure/railing, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/small, +/area/ruin/space/has_grav/nova/des_two/cargo) +"Em" = ( +/obj/effect/turf_decal/tile/yellow/half, +/obj/structure/sign/flag/syndicate/directional/south{ + pixel_x = -16 + }, +/obj/structure/rack/shelf, +/obj/item/tank/internals/emergency_oxygen/double{ + pixel_x = -2; + pixel_y = 3 + }, +/obj/item/clothing/mask/gas/alt{ + pixel_x = -2 + }, +/obj/item/tank/internals/emergency_oxygen/double{ + pixel_x = 6 + }, +/obj/item/clothing/mask/gas/alt{ + pixel_x = 6; + pixel_y = -3 + }, +/turf/open/floor/iron/dark/textured_half, +/area/ruin/space/has_grav/nova/des_two/cargo) +"En" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Ey" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/bookcase/random/nonfiction, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"Ez" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"EB" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/vending/engivend{ + onstation = 0 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/engineering) +"EC" = ( +/obj/item/grenade/barrier{ + pixel_y = 10 + }, +/obj/item/grenade/barrier{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/grenade/barrier{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/grenade/barrier{ + pixel_y = 2 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"EJ" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/burgundy, +/turf/template_noop, +/area/template_noop) +"EL" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/service/dorms/fitness) +"EP" = ( +/obj/machinery/light/warm/directional/north, +/obj/machinery/vending/clothing, +/turf/open/floor/iron/dark/smooth_large, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"EQ" = ( +/obj/machinery/duct, +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"ET" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/conveyor{ + id = "ds2disposals" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/end, +/obj/effect/spawner/random/trash/botanical_waste, +/obj/effect/spawner/random/trash/food_packaging{ + pixel_x = -4; + pixel_y = -3 + }, +/obj/item/trash/can/food/peaches{ + pixel_x = 6; + pixel_y = -6 + }, +/turf/open/floor/iron/pool, +/area/ruin/space/has_grav/nova/des_two/engineering) +"EU" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 8 + }, +/obj/structure/chair{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"EW" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/light/cold/directional/south, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/bridge/eva) +"EY" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/bridge/admiral) +"EZ" = ( +/obj/effect/spawner/random/contraband/prison, +/obj/structure/closet/crate/bin, +/obj/effect/spawner/random/trash/food_packaging{ + pixel_y = -5 + }, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Fa" = ( +/obj/effect/turf_decal/siding/dark, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Fb" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Fc" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/atmospherics/pipe/smart/simple/violet/hidden{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Fe" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"Fh" = ( +/obj/effect/turf_decal/stripes/red/line, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"Fi" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/window/reinforced/survival_pod{ + dir = 10 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Fj" = ( +/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/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"Fk" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "smasteratarms"; + name = "Master At Arms Shutters" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/security) +"Fl" = ( +/turf/open/floor/engine/o2, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Fm" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research{ + name = "Research" + }, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/research) +"Fo" = ( +/obj/effect/turf_decal/stripes/red/corner, +/obj/effect/turf_decal/siding/dark/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Fw" = ( +/obj/machinery/shower/directional/south, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/obj/structure/drain, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/service/dorms/fitness) +"Fx" = ( +/obj/machinery/chem_dispenser/mutagensaltpeter, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"Fy" = ( +/obj/effect/turf_decal/delivery/red, +/obj/machinery/door/poddoor/shutters{ + id = "ds2armory"; + name = "Armory Shutters" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"Fz" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/research) +"FA" = ( +/obj/machinery/sleeper/syndie/fullupgrade{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/medbay) +"FB" = ( +/obj/structure/chair/office/light, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/research) +"FC" = ( +/obj/structure/cable, +/obj/machinery/power/rtg/advanced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"FD" = ( +/obj/effect/turf_decal/siding/wood, +/obj/item/kirbyplants/organic/plant21, +/obj/machinery/button/door/directional/north{ + desc = "Keep out the paperwork."; + id = "scorpliaison"; + name = "Corporate Liaison's room bolt"; + normaldoorcontrol = 1; + req_access = list("syndicate_leader"); + specialfunctions = 4 + }, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"FG" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"FH" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/service/dorms/fitness) +"FJ" = ( +/obj/effect/turf_decal/siding/dark/corner, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"FO" = ( +/obj/structure/closet/secure_closet/des_two/medical, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/nova/des_two/medbay/chem) +"FP" = ( +/obj/machinery/computer/crew/syndie{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"FY" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"FZ" = ( +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"Gb" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"Gd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/light/red/directional/south, +/obj/effect/turf_decal/siding/white{ + dir = 6 + }, +/obj/item/toy/figure/syndie{ + pixel_x = -12; + pixel_y = -1 + }, +/turf/open/floor/plating/elevatorshaft, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"Ge" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"Gg" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"Gh" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/button/curtain{ + id = "DS2cell1"; + name = "curtain control"; + pixel_y = -24 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Gi" = ( +/obj/effect/turf_decal/stripes/red/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/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Gk" = ( +/obj/machinery/power/turbine/core_rotor{ + mapping_id = "syndicatelava_turbine" + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Gl" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/siding/dark, +/obj/structure/table, +/obj/item/choice_beacon/ingredient{ + pixel_y = 11 + }, +/obj/item/choice_beacon/ingredient{ + pixel_x = -5; + pixel_y = 2 + }, +/obj/item/clothing/accessory/armband/hydro{ + desc = "An armband, worn by the FOB's operatives to display which department they're assigned to."; + name = "service armband"; + pixel_x = 15 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = 17; + pixel_y = 8 + }, +/obj/item/storage/belt/military/snack, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Gt" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/wood/parquet, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"Gx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/research) +"Gz" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/research) +"GD" = ( +/obj/effect/turf_decal/siding/dark, +/obj/structure/table, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"GE" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/maintenance/two, +/obj/structure/closet/crate, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/spawner/random/clothing/twentyfive_percent_cyborg_mask, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"GG" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/iron/diagonal, +/area/ruin/space/has_grav/nova/des_two/halls) +"GH" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate/freezer/surplus_limbs, +/turf/open/floor/iron/dark/textured_half, +/area/ruin/space/has_grav/nova/des_two/cargo) +"GK" = ( +/obj/machinery/power/shuttle_engine/huge, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/nova/des_two) +"GL" = ( +/obj/effect/turf_decal/bot_white, +/obj/structure/closet/crate, +/obj/effect/spawner/random/contraband/prison, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_twentythree, +/obj/item/toy/crayon/spraycan{ + pixel_x = -5; + pixel_y = 9 + }, +/obj/item/toy/crayon/spraycan{ + pixel_x = 4; + pixel_y = 9 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"GO" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/red/corner, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"GR" = ( +/obj/effect/turf_decal/bot, +/obj/structure/reagent_dispensers/fueltank, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"GS" = ( +/obj/effect/turf_decal/siding/wood{ + 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/wood/parquet, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"GU" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"GV" = ( +/obj/structure/table/wood, +/obj/item/camera{ + pixel_x = -9; + pixel_y = 6 + }, +/obj/item/paper{ + default_raw_text = "

DS2 Command Report

The Deep Space 2 Forward Operating Base has successfully relocated itself near active Nanotrasen installations. Reboot of shuttle engines in progress...

The Sothran Syndicate is glad to have you on-field, admiral. Nanotrasen is in the direct sector and, as such, is the direct target of our operatives. Manage your crew well and with respect, and leave all your anger to the gravel that is Nanotrasen. Remember that Interdyne has an unaffiliated facade to keep up, as such, advise against your crew flaunting their affiliation to non-crew.

Stay winning.

"; + name = "paper- 'DS2 Command Report'" + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/bridge/admiral) +"GX" = ( +/obj/structure/sign/flag/syndicate/directional/south{ + pixel_x = 16 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/siding/white, +/obj/item/toy/figure/syndie{ + pixel_x = -10 + }, +/obj/item/toy/figure/syndie{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/structure/shipping_container/donk_co{ + desc = "A standard-measure shipping container for bulk transport of goods. This one is from Donk Co. and so could be carrying just about anything- although it seems this one is overflowing with little Syndicate Figurines, known for being sold at a Loss."; + pixel_x = -17; + pixel_y = 15 + }, +/turf/open/floor/plating/elevatorshaft, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"GY" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/chair/sofa/corp/left{ + color = "#DE3A3A" + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"Ha" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/window/survival_pod{ + dir = 4; + req_access = list("syndicate_leader") + }, +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/iron/dark/smooth_large, +/area/ruin/space/has_grav/nova/des_two/security) +"Hb" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/chair/sofa/corp{ + color = "#DE3A3A" + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"Hc" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/light/cold/directional/west, +/obj/structure/rack/gunrack, +/obj/item/gun/ballistic/automatic/sol_smg/evil{ + pixel_x = -8 + }, +/obj/item/gun/ballistic/shotgun/riot/sol/evil{ + pixel_x = 0 + }, +/obj/item/gun/ballistic/automatic/sol_rifle/evil{ + pixel_x = 8 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"Hh" = ( +/obj/machinery/light/cold/directional/east, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/obj/machinery/vending/dinnerware{ + onstation = 0 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Hn" = ( +/obj/effect/turf_decal/siding/dark, +/obj/structure/window/reinforced/survival_pod{ + dir = 6 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Hq" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/ruin/space/has_grav/nova/des_two/bridge) +"Ht" = ( +/obj/effect/turf_decal/trimline/dark_red/line, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner, +/obj/machinery/computer/shuttle{ + desc = "A shuttle terminal which allows a connection to the DS-2 forward base's supply shuttle."; + icon_keyboard = "syndie_key"; + icon_screen = "syndishuttle"; + light_color = "#FA8282"; + name = "syndicate cargo shuttle terminal"; + possible_destinations = "IP-DS-2"; + req_access = list("syndicate"); + shuttleId = "syndie_cargo" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/bridge) +"Hu" = ( +/obj/structure/closet/crate, +/obj/item/reagent_containers/cup/bowl, +/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/kitchen/fork/plastic, +/obj/item/kitchen/fork/plastic, +/obj/item/kitchen/fork/plastic, +/obj/item/storage/box/drinkingglasses, +/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/kitchen/rollingpin, +/obj/item/storage/box/drinkingglasses, +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Hw" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Hz" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/research) +"HA" = ( +/obj/item/book/manual/wiki/chemistry{ + pixel_x = -4 + }, +/obj/item/clothing/glasses/science{ + pixel_x = -4 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/nova/des_two/medbay/chem) +"HD" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"HE" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"HF" = ( +/obj/machinery/suit_storage_unit/syndicate/chameleon{ + name = "suit storage unit" + }, +/obj/effect/turf_decal/siding/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/ruin/space/has_grav/nova/des_two/engineering) +"HH" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/halls) +"HI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/research) +"HK" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "ds2conveyor" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"HQ" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/north, +/obj/machinery/power/shuttle_engine/heater, +/obj/structure/window/reinforced/tinted/spawner/directional/west, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/nova/des_two) +"HV" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "ds2conveyor" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo) +"HZ" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/dark, +/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/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Ia" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/nova/des_two/medbay/chem) +"Ih" = ( +/obj/effect/turf_decal/trimline/yellow/warning{ + 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/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"Ii" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/security/lawyer) +"Im" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/machinery/light/warm/directional/east, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Io" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/power/rtg/advanced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Ir" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Iw" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"IA" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/structure/chair/sofa/bench/corner{ + dir = 1 + }, +/obj/item/kirbyplants/organic/plant18, +/obj/machinery/light/cold/directional/south, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"IC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/floor{ + use_power = 0 + }, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/nova/des_two) +"IH" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 5 + }, +/obj/item/circuitboard/machine/destructive_analyzer, +/obj/structure/frame/machine{ + anchored = 1; + icon_state = "box_1"; + state = 2 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"IM" = ( +/obj/structure/closet/crate/medical, +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/medical/medkit{ + pixel_x = 6; + pixel_y = 3 + }, +/obj/effect/spawner/random/medical/supplies{ + pixel_y = 3 + }, +/obj/effect/spawner/random/medical/medkit{ + pixel_x = -6; + pixel_y = -3 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"IN" = ( +/obj/structure/table/wood, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/item/sign/flag/syndicate{ + pixel_x = -3; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/maunamug{ + pixel_x = 4 + }, +/turf/open/floor/carpet/donk, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"IQ" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/service/dorms/fitness) +"IU" = ( +/obj/item/circuitboard/machine/ammo_workbench, +/obj/structure/frame/machine{ + anchored = 1; + icon_state = "box_1"; + state = 2 + }, +/obj/item/disk/ammo_workbench/advanced, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"IV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"IZ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/structure/window/reinforced/survival_pod{ + dir = 10 + }, +/obj/machinery/suit_storage_unit{ + mask_type = /obj/item/clothing/mask/gas/syndicate; + mod_type = /obj/item/mod/control/pre_equipped/traitor_elite; + storage_type = /obj/item/tank/jetpack/oxygen/harness + }, +/turf/open/floor/iron/dark/smooth_large, +/area/ruin/space/has_grav/nova/des_two/bridge/admiral) +"Ja" = ( +/obj/structure/table, +/obj/machinery/processor{ + pixel_x = 1 + }, +/obj/structure/sign/poster/contraband/kss13/directional/east, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Jd" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/medbay/chem) +"Jf" = ( +/obj/structure/closet/secure_closet/freezer/kitchen/all_access, +/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/effect/spawner/random/contraband/permabrig_weapon, +/obj/item/food/grown/onion, +/obj/item/food/grown/onion, +/obj/item/storage/box/ingredients/random, +/obj/item/storage/box/ingredients/random, +/obj/effect/turf_decal/bot_white, +/obj/item/storage/box/ingredients/carnivore, +/obj/item/storage/box/ingredients/wildcard, +/obj/item/storage/fancy/egg_box, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Jl" = ( +/obj/machinery/light/cold/directional/west, +/obj/structure/table, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/item/trash/empty_food_tray{ + pixel_y = 7 + }, +/obj/item/newspaper{ + pixel_x = 5; + pixel_y = -1 + }, +/obj/item/trash/can{ + pixel_x = -9 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Jv" = ( +/obj/effect/turf_decal/siding/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/research) +"Jy" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/corner, +/obj/effect/turf_decal/trimline/yellow/corner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/halls) +"Jz" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"JA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/chair/stool/directional/west, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"JB" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark, +/obj/structure/cable, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"JC" = ( +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"JD" = ( +/obj/structure/closet/secure_closet/des_two/maa_locker, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/window/reinforced/survival_pod{ + dir = 6 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"JE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"JF" = ( +/obj/effect/turf_decal/trimline/dark_blue/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/light/cold/directional/north, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"JI" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/machinery/vending/cigarette/syndicate, +/obj/machinery/camera/xray/directional/east{ + c_tag = "DS-2 Botany"; + network = list("ds2") + }, +/turf/open/floor/wood/parquet, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"JK" = ( +/obj/structure/rack/shelf, +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 8 + }, +/obj/item/ai_module/reset/purge{ + pixel_x = -2; + pixel_y = -7 + }, +/obj/item/ai_module/reset/purge{ + pixel_y = -4 + }, +/obj/item/ai_module/supplied/freeform{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/ai_module/supplied/freeform{ + pixel_y = 7 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"JL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"JN" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark_blue/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/ruin/space/has_grav/nova/des_two/halls) +"JR" = ( +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"JS" = ( +/obj/machinery/button/door/directional/east{ + desc = "To keep the void away."; + id = "ds2bridge"; + name = "Bridge Blast Door Control"; + pixel_y = 32; + req_access = list("syndicate_leader") + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/bridge) +"JZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/machinery/light/small/red/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/xray/directional/east{ + c_tag = "DS-2 Engineering Airlock"; + network = list("ds2") + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Kb" = ( +/obj/machinery/door/window/survival_pod{ + dir = 1; + req_access = list("syndicate_leader") + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"Kd" = ( +/obj/effect/turf_decal/nova_decals/syndicate/bottom/right, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/bridge) +"Ke" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/bridge) +"Kf" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"Kg" = ( +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Kh" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/mod/maint, +/obj/effect/spawner/random/mod/maint{ + pixel_y = -3 + }, +/obj/effect/spawner/random/mod/maint{ + pixel_y = -6 + }, +/obj/structure/closet/crate/science, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"Kj" = ( +/obj/effect/turf_decal/trimline/dark_green/warning{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"Kk" = ( +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"Ku" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/research) +"Kz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/railing/corner, +/obj/effect/turf_decal/stripes/end, +/obj/effect/turf_decal/siding/dark/end, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"KC" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"KG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"KI" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/box/white/corners, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"KJ" = ( +/obj/structure/table/reinforced, +/obj/machinery/light/cold/directional/north, +/obj/item/storage/toolbox/electrical{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/storage/toolbox/mechanical, +/obj/item/stack/rods/fifty{ + pixel_y = 5 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/bridge/eva) +"KM" = ( +/obj/structure/chair/stool/directional/east, +/obj/effect/turf_decal/stripes/red/line, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"KN" = ( +/obj/machinery/door/airlock/security/old/glass{ + name = "Security" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/delivery/red, +/obj/structure/cable, +/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 = 2 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "DS2brig" + }, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security) +"KQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/ruin/space/has_grav/nova/des_two/cargo) +"KS" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"KT" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/structure/closet/l3closet/scientist, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/ruin/space/has_grav/nova/des_two/research) +"KV" = ( +/obj/effect/turf_decal/siding/wideplating_new/dark/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"KY" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"Lb" = ( +/obj/effect/turf_decal/tile/dark_red/half, +/obj/effect/turf_decal/siding/wideplating_new/dark, +/turf/open/floor/iron/dark/textured_half{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"Le" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/red, +/area/ruin/space/has_grav/nova/des_two/bridge/admiral) +"Lf" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"Lg" = ( +/obj/machinery/atmospherics/miner/plasma, +/turf/open/floor/engine/plasma, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Ll" = ( +/obj/effect/turf_decal/siding/dark, +/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/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Lo" = ( +/obj/effect/turf_decal/trimline/yellow/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/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"Lq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"Lv" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/closet/secure_closet/des_two/armory_gear_locker, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"Lw" = ( +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Lx" = ( +/obj/machinery/door/airlock/security/old{ + hackProof = 1; + id_tag = "smasteratarms"; + name = "Master At Arms' Office" + }, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/delivery/red, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security) +"Lz" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"LA" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/power/rtg/advanced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"LB" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/researcher, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/ruin/space/has_grav/nova/des_two/research) +"LF" = ( +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"LG" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/bridge/admiral) +"LK" = ( +/obj/structure/sign/flag/syndicate/directional/south, +/obj/machinery/light/warm/directional/south, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"LM" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "ds2conveyor" + }, +/obj/structure/railing, +/obj/machinery/door/poddoor{ + id = "ds2cargo" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo) +"LP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"LQ" = ( +/obj/structure/table/wood, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south, +/obj/item/poster/random_contraband{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/poster/random_contraband, +/obj/item/poster/random_contraband{ + pixel_x = 2; + pixel_y = 5 + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"LT" = ( +/obj/structure/toilet{ + pixel_y = 10 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"LV" = ( +/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/enginetech{ + dir = 8 + }, +/obj/machinery/light/warm/directional/north, +/obj/effect/turf_decal/siding/yellow{ + dir = 9 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/engineering) +"LY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/camera/xray/directional/south{ + c_tag = "DS-2 Armory"; + network = list("ds2") + }, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/obj/item/storage/box/pinpointer_pairs{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/storage/box/pinpointer_pairs, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"Mg" = ( +/obj/structure/chair/office/light{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/space/has_grav/nova/des_two/research) +"Mk" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Mn" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"Mo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"Mt" = ( +/obj/machinery/porta_turret/syndicate/energy{ + dir = 5 + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/bridge/vault) +"Mw" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 8 + }, +/obj/item/plate, +/obj/item/food/poutine{ + pixel_y = 2 + }, +/obj/item/food/poutine{ + pixel_y = 5 + }, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"MB" = ( +/obj/item/clothing/suit/toggle/labcoat/hospitalgown{ + pixel_x = -3; + pixel_y = 4 + }, +/obj/item/clothing/suit/toggle/labcoat/hospitalgown{ + pixel_x = -7 + }, +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/glass/waterbottle{ + pixel_x = 8; + pixel_y = 4 + }, +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/machinery/light/cold/directional/north, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/medbay) +"MC" = ( +/obj/structure/table/wood, +/obj/item/paper_bin/carbon{ + pixel_y = 3 + }, +/obj/item/pen/fountain/captain{ + name = "admiral's fountain pen"; + pixel_y = 5 + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/bridge/admiral) +"ME" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "ds2admiral"; + name = "Admiral Shutters" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/bridge/admiral) +"MF" = ( +/obj/effect/turf_decal/bot_blue, +/obj/structure/closet/secure_closet/freezer/meat{ + req_access = list("syndicate") + }, +/obj/item/food/meat/slab, +/obj/item/food/meat/slab, +/obj/item/food/meat/slab, +/obj/item/food/meat/slab, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"MG" = ( +/obj/structure/drain, +/obj/machinery/shower/directional/east{ + pixel_x = -13 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 6 + }, +/turf/open/floor/iron/small, +/area/ruin/space/has_grav/nova/des_two/medbay) +"MH" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/obj/machinery/firealarm/directional/north, +/obj/machinery/camera/xray/directional/east{ + c_tag = "DS-2 EVA"; + network = list("ds2") + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/bridge/eva) +"MK" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"MM" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"MP" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/space/has_grav/nova/des_two/research) +"MQ" = ( +/obj/structure/weightmachine, +/obj/machinery/light/warm/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/line{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/service/dorms/fitness) +"MT" = ( +/obj/machinery/computer/shuttle{ + desc = "A shuttle terminal which allows a connection to the DS-2 forward base's supply shuttle."; + icon_keyboard = "syndie_key"; + icon_screen = "syndishuttle"; + light_color = "#FA8282"; + name = "syndicate cargo shuttle terminal"; + possible_destinations = "IP-DS-2"; + req_access = list("syndicate"); + shuttleId = "syndie_cargo" + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/cargo) +"MZ" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ + dir = 4 + }, +/obj/structure/sign/flag/syndicate/directional/north, +/obj/structure/showcase/cyborg{ + desc = "A stand with the empty body of a Cybersun cyborg bolted to it."; + dir = 4; + icon = 'icons/mob/silicon/robots.dmi'; + icon_state = "synd_sec"; + name = "syndicate cyborg showcase"; + pixel_x = -6 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/ruin/space/has_grav/nova/des_two/bridge) +"Nb" = ( +/obj/effect/turf_decal/stripes/red/corner, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"Nc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/nova/des_two) +"Ne" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/button/door/directional/south{ + id = "dorms-view"; + name = "Dorms Blast Door Control"; + req_access = list("syndicate") + }, +/obj/structure/chair/sofa/corp/right{ + color = "#DE3A3A"; + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"Ng" = ( +/obj/effect/turf_decal/vg_decals/atmos/plasma{ + dir = 4 + }, +/turf/open/floor/engine/plasma, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Ni" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/structure/chair/stool/bar/directional/south, +/obj/item/paint_palette, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Nk" = ( +/obj/machinery/door/airlock/command{ + hackProof = 1; + name = "Bridge" + }, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/bridge) +"Nl" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/researcher, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/ruin/space/has_grav/nova/des_two/research) +"Nm" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/chair/comfy/brown{ + color = "#596479"; + dir = 8 + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"No" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/silver/glass{ + name = "Kitchen" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"Nr" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Ns" = ( +/obj/structure/sign/flag/syndicate/directional/north{ + pixel_x = 16 + }, +/obj/effect/turf_decal/tile/dark_red/half, +/obj/effect/turf_decal/siding/wideplating_new/dark, +/turf/open/floor/iron/dark/textured_half{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"NA" = ( +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/button/door/incinerator_vent_syndicatelava_aux{ + name = "Combustion Chamber Blast Door Control"; + pixel_x = -6; + pixel_y = 24 + }, +/obj/machinery/button/door/incinerator_vent_syndicatelava_main{ + name = "Turbine Exterior Vent Control"; + pixel_x = -6; + pixel_y = -24 + }, +/obj/machinery/door/window/survival_pod{ + dir = 8; + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/engineering) +"NB" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two) +"NC" = ( +/turf/open/floor/engine/n2, +/area/ruin/space/has_grav/nova/des_two/engineering) +"NG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/turf/open/floor/iron/dark/smooth_large, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"NL" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/dark, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/arrows, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"NN" = ( +/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 = 2 + }, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"NO" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Fitness" + }, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/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/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/service/dorms/fitness) +"NP" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/structure/closet/secure_closet/des_two/brig_officer_locker, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"NQ" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"NR" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "ds2conveyor" + }, +/obj/structure/railing, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo) +"NS" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/table, +/obj/item/storage/box/hug{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"NT" = ( +/obj/effect/turf_decal/trimline/blue/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_edge{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/halls) +"NW" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"NX" = ( +/obj/structure/chair/comfy/brown{ + color = "#596479" + }, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/bridge/admiral) +"NY" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"Ob" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark_red/corner, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 9 + }, +/turf/open/floor/iron/dark/textured_corner, +/area/ruin/space/has_grav/nova/des_two/bridge) +"Oc" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/warm/directional/west, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Od" = ( +/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ + dir = 8; + pixel_y = 4 + }, +/obj/structure/table/wood, +/obj/machinery/firealarm/directional/east, +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_x = -6; + pixel_y = -7 + }, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Oe" = ( +/obj/structure/punching_bag, +/obj/effect/turf_decal/box/white, +/obj/item/reagent_containers/cup/glass/waterbottle{ + pixel_x = 11 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Og" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/north, +/obj/machinery/power/shuttle_engine/heater, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/nova/des_two) +"Oi" = ( +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/nova/des_two) +"Ok" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 10 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/research) +"Op" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/light/warm/directional/east, +/obj/machinery/vending/snack, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"Ov" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/item/restraints/handcuffs{ + pixel_y = 17 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = 3; + pixel_y = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/item/crowbar/red, +/obj/item/assembly/flash/handheld{ + pixel_x = -6; + pixel_y = 7 + }, +/obj/structure/reagent_dispensers/wall/peppertank/directional/west, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"Ox" = ( +/obj/machinery/sleeper/syndie/fullupgrade{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 10 + }, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/medbay) +"Oy" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"OC" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/window/reinforced/survival_pod{ + dir = 10 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/closet/secure_closet/des_two/brig_officer_locker, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"OD" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/power/rtg/advanced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"OF" = ( +/obj/effect/turf_decal/trimline/dark_green/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"OK" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/power/rtg/advanced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"ON" = ( +/obj/machinery/atmospherics/miner/nitrogen, +/turf/open/floor/engine/n2, +/area/ruin/space/has_grav/nova/des_two/engineering) +"OP" = ( +/obj/effect/turf_decal/nova_decals/syndicate/top/left, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/bridge) +"OT" = ( +/obj/machinery/cryopod{ + dir = 8 + }, +/obj/effect/turf_decal/delivery/white{ + color = "#00ff00"; + name = "green" + }, +/obj/machinery/computer/cryopod/interdyne/directional/east, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"OU" = ( +/obj/effect/turf_decal/trimline/dark_green/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"Pe" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/chair/sofa/corp/left{ + color = "#DE3A3A"; + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"Pf" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/security/lawyer) +"Pi" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/conveyor_switch/oneway{ + id = "ds2disposals"; + pixel_y = 12 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Pn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/obj/machinery/atmospherics/components/binary/valve/digital{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Po" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/vg_decals/numbers/one, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Pq" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/camera/xray/directional/west{ + c_tag = "DS-2 Engineering"; + network = list("ds2") + }, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Pt" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/trimline/dark_red/line, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner, +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_half, +/area/ruin/space/has_grav/nova/des_two/bridge) +"Px" = ( +/obj/effect/turf_decal/siding/dark, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Py" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/delivery/red, +/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{ + name = "Cell 2" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"PA" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/machinery/light/cold/directional/north, +/obj/structure/closet/secure_closet/des_two/science_gear, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/ruin/space/has_grav/nova/des_two/research) +"PB" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/griddle, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"PM" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/purple/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/ore_box, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"PO" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/siding/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"PP" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"PR" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/structure/cable, +/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/machinery/firealarm/directional/south, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"PS" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/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/diagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"PU" = ( +/obj/machinery/icecream_vat, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"PV" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"PW" = ( +/obj/structure/table/glass, +/obj/item/grenade/chem_grenade/antiweed{ + pixel_x = -8; + pixel_y = 8 + }, +/obj/item/reagent_containers/spray/plantbgone{ + pixel_x = 11; + pixel_y = 11 + }, +/obj/item/watertank, +/obj/item/clothing/accessory/armband/hydro{ + desc = "An armband, worn by the FOB's operatives to display which department they're assigned to."; + name = "service armband"; + pixel_x = 15 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"PX" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"PY" = ( +/obj/structure/punching_bag, +/turf/open/floor/carpet/blue, +/area/ruin/space/has_grav/nova/des_two/service/dorms/fitness) +"Qa" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Qb" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2, +/turf/open/floor/engine, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Qe" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/power/rtg/advanced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Qh" = ( +/obj/effect/turf_decal/trimline/purple/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"Qi" = ( +/obj/structure/mirror/directional/north, +/obj/structure/sink/directional/south, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Qo" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/structure/sink/directional/south, +/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/diagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"Qp" = ( +/obj/structure/transit_tube/station/dispenser/reverse/flipped{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/halls) +"Qs" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/structure/bed/dogbed, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/window/reinforced/survival_pod{ + dir = 6 + }, +/mob/living/basic/pet/fox{ + name = "Rhials" + }, +/turf/open/floor/iron/dark/smooth_large, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"Qw" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/effect/turf_decal/trimline/brown/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/arrows{ + pixel_y = 16 + }, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/machinery/computer/order_console/mining/interdyne, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"Qx" = ( +/obj/effect/turf_decal/stripes/red/corner, +/obj/structure/weightmachine/weightlifter, +/obj/effect/turf_decal/box/white, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Qz" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"QA" = ( +/obj/effect/turf_decal/bot, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/obj/effect/spawner/random/maintenance/five, +/obj/effect/spawner/random/trash/janitor_supplies, +/obj/structure/closet/crate, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"QB" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 8 + }, +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/button/door/directional/east{ + desc = "To keep your food away from the carp."; + id = "diner-view"; + name = "Diner Blast Door Control"; + pixel_y = -24; + req_access = list("syndicate") + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"QC" = ( +/obj/effect/turf_decal/trimline/dark_green/corner, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/disposalpipe/junction{ + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"QE" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_red/anticorner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 9 + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"QF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/obj/machinery/atmospherics/components/trinary/mixer/airmix/inverse{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"QG" = ( +/obj/effect/turf_decal/box/red/corners{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"QH" = ( +/obj/item/folder/syndicate, +/obj/item/laser_pointer/upgraded{ + pixel_y = 10 + }, +/obj/item/clothing/glasses/sunglasses, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/security/lawyer) +"QK" = ( +/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/dark_red/half{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/ruin/space/has_grav/nova/des_two/cargo) +"QM" = ( +/obj/item/kirbyplants/organic/plant10, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/ruin/space/has_grav/nova/des_two/research) +"QN" = ( +/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/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"QO" = ( +/obj/structure/table/wood, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"QQ" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/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/diagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"QV" = ( +/obj/structure/chair/stool/directional/east, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"QW" = ( +/obj/structure/chair/office/light{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"QX" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/obj/machinery/power/shuttle_engine/heater{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/nova/des_two) +"QY" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/machinery/light/cold/directional/west, +/obj/structure/bed/medical/emergency, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"Ra" = ( +/obj/effect/turf_decal/box/red/corners, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"Rb" = ( +/obj/machinery/chem_master/condimaster{ + name = "BrewMaster 3000" + }, +/turf/open/floor/iron/dark/smooth_large, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"Rc" = ( +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"Rd" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/table/wood, +/obj/machinery/computer/libraryconsole/bookmanagement{ + pixel_y = 7 + }, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/wood/parquet, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"Re" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/security/lawyer) +"Rf" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/security) +"Rh" = ( +/obj/machinery/vending/cola/red, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"Rj" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 4 + }, +/obj/structure/closet/radiation, +/obj/item/mod/module/rad_protection, +/obj/item/analyzer, +/obj/item/mod/module/visor/meson{ + pixel_y = -9 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Rm" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/cold/directional/west, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"Rp" = ( +/obj/structure/sign/flag/syndicate/directional/north, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"Rr" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 8 + }, +/obj/structure/chair/stool/bar{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Rt" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"Ru" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Rx" = ( +/obj/structure/bookcase/random/adult, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"Rz" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/siding/dark, +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/pizzaparty{ + loot = list(/obj/item/pizzabox/margherita=2,/obj/item/pizzabox/meat=2,/obj/item/pizzabox/mushroom=2,/obj/item/pizzabox/pineapple=2,/obj/item/pizzabox/vegetable=2); + pixel_y = 9 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"RE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/conveyor{ + id = "ds2disposals" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/spawner/random/trash/garbage{ + pixel_x = 4; + pixel_y = 5 + }, +/turf/open/floor/iron/pool, +/area/ruin/space/has_grav/nova/des_two/engineering) +"RH" = ( +/obj/effect/turf_decal/siding/dark, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/research) +"RP" = ( +/obj/effect/turf_decal/siding/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"RQ" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/bureaucracy/folder{ + pixel_x = 7; + pixel_y = 8 + }, +/obj/effect/spawner/random/bureaucracy/folder{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/item/stamp{ + pixel_x = -7; + pixel_y = 6 + }, +/obj/item/stamp/denied{ + pixel_x = -6 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/button/door{ + desc = "Keep out the paperwork."; + id = "ds2corpliaison"; + name = "Shutters control"; + pixel_x = -32; + pixel_y = 24; + req_access = list("syndicate_leader") + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"RT" = ( +/obj/effect/turf_decal/tile/dark_blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_blue{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/structure/filingcabinet, +/obj/item/folder/syndicate/red, +/obj/machinery/firealarm/directional/north, +/obj/machinery/camera/xray/directional/north{ + c_tag = "DS-2 Vault"; + network = list("ds2") + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/bridge/vault) +"RV" = ( +/obj/effect/turf_decal/stripes/red/corner, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"RX" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"RY" = ( +/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/ruin/space/has_grav/nova/des_two/cargo) +"RZ" = ( +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Sb" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"Sc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/item/paper_bin, +/obj/structure/window/reinforced/survival_pod{ + dir = 10 + }, +/obj/item/pen, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"Se" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Sf" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/structure/closet/secure_closet/ds2atmos{ + anchorable = 0; + anchored = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/corner, +/obj/effect/turf_decal/trimline/dark_red/corner{ + dir = 8 + }, +/obj/machinery/camera/xray/directional/south{ + c_tag = "DS-2 Bridge"; + network = list("ds2") + }, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/iron/dark/textured_half, +/area/ruin/space/has_grav/nova/des_two/bridge) +"Si" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/atmospherics/pipe/smart/simple/orange/hidden{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Sj" = ( +/obj/effect/turf_decal/trimline/yellow/corner{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/cold/directional/east, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"So" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark_blue/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/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"Sp" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/firealarm/directional/west, +/obj/structure/rack/gunrack, +/obj/item/gun/ballistic/automatic/pistol/sol/evil{ + pixel_x = -5 + }, +/obj/item/gun/ballistic/automatic/pistol/sol/evil, +/obj/item/gun/ballistic/automatic/pistol/sol/evil{ + pixel_x = 5 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"Sq" = ( +/obj/machinery/light/warm/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/components/trinary/filter/flipped, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Sv" = ( +/obj/machinery/autolathe/hacked, +/obj/effect/turf_decal/trimline/purple/filled/line, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"Sw" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/machinery/modular_computer/preset/curator, +/turf/open/floor/wood/parquet, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"Sx" = ( +/obj/effect/turf_decal/trimline/dark_red/line, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner, +/obj/structure/cable, +/obj/machinery/computer/camera_advanced/syndie, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/bridge) +"Sy" = ( +/obj/effect/turf_decal/siding/dark, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"SB" = ( +/obj/effect/turf_decal/trimline/purple/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/ruin/space/has_grav/nova/des_two/research) +"SG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"SH" = ( +/obj/effect/turf_decal/delivery/red, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security) +"SI" = ( +/obj/machinery/atmospherics/components/binary/pump/off/supply/visible/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"SN" = ( +/obj/machinery/deepfryer, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"SO" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/textured, +/area/ruin/space/has_grav/nova/des_two/research) +"SR" = ( +/obj/effect/turf_decal/nova_decals/syndicate/top/right, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/bridge) +"SX" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"SY" = ( +/obj/structure/table/wood, +/obj/item/storage/photo_album/syndicate{ + pixel_x = -5; + pixel_y = -3 + }, +/obj/item/stamp/syndicate{ + pixel_x = 9; + pixel_y = 9 + }, +/obj/item/stamp/denied{ + pixel_x = 11; + pixel_y = 3 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/bridge/admiral) +"SZ" = ( +/obj/machinery/computer/security{ + dir = 1; + network = list("ds2") + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/cargo) +"Ta" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/machinery/light/cold/directional/south, +/obj/item/stack/sheet/glass/fifty{ + pixel_y = 9 + }, +/obj/item/stack/sheet/iron/fifty, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"Tf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/red/corner, +/obj/effect/turf_decal/siding/dark, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/obj/item/trash/boritos/red{ + pixel_x = -13; + pixel_y = -10 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Tm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/computer/atmos_control/nocontrol/incinerator{ + atmos_chambers = list("syndieincinerator"="DS-2 Incinerator Chamber"); + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/engineering) +"To" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"Tp" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"Ts" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/marker_beacon/burgundy, +/obj/structure/railing/corner{ + dir = 8; + pixel_y = 32 + }, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 1 + }, +/obj/machinery/light/red/directional/south, +/turf/open/floor/iron/dark/textured_half{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"Tt" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Tu" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/purple/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"Tw" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"Tx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/item/stack/sheet/iron/five, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"TA" = ( +/obj/machinery/firealarm/directional/east, +/obj/machinery/vending/syndichem, +/obj/machinery/camera/xray/directional/east{ + c_tag = "DS-2 Botany"; + network = list("ds2") + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/nova/des_two/medbay/chem) +"TB" = ( +/obj/docking_port/stationary{ + dir = 4; + dwidth = 5; + height = 8; + name = "DS-2 Hangar"; + width = 11 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"TG" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"TH" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/obj/structure/bed/pod, +/obj/item/bedsheet/black, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"TI" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/siding/dark, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/obj/machinery/meter, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"TL" = ( +/obj/structure/closet/secure_closet/des_two/engie_locker, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 4 + }, +/obj/effect/turf_decal/siding/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/engineering) +"TM" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/power/rtg/advanced, +/obj/machinery/light/warm/directional/south, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"TQ" = ( +/obj/item/storage/box/pillbottles{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/storage/box/gloves{ + pixel_x = 6; + pixel_y = 3 + }, +/obj/item/storage/box/medipens{ + pixel_x = 4; + pixel_y = 13 + }, +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/medbay) +"TS" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/machinery/door/airlock/vault{ + id_tag = "syndie_ds2_vault" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/bridge/vault) +"TT" = ( +/obj/machinery/button/door/directional/west{ + desc = "To keep your hangar away from prying eyes."; + id = "void-be-gone"; + name = "Hangar Blast Door Control"; + req_access = list("syndicate") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/cargo) +"TW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"TX" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/medbay/chem) +"Ua" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/chair/stool/directional/west, +/obj/effect/turf_decal/stripes/red/line{ + dir = 9 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Uc" = ( +/obj/machinery/light/cold/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/reagent_dispensers/wall/peppertank/directional/west, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/cargo) +"Ue" = ( +/obj/item/reagent_containers/cup/bucket/wooden, +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Uh" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/table/wood, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/window/reinforced/survival_pod{ + dir = 6 + }, +/obj/item/wallframe/painting, +/obj/item/wallframe/painting{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/flashlight/lamp/green{ + pixel_x = -10 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"Ui" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/rag, +/obj/item/storage/fancy/cigarettes/cigpack_syndicate{ + pixel_x = 3; + pixel_y = 6 + }, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Uj" = ( +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, +/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/machinery/door/airlock/command{ + hackProof = 1; + name = "Bridge" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/bridge) +"Um" = ( +/obj/effect/turf_decal/trimline/dark_green/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"Un" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 8 + }, +/obj/machinery/light/warm/directional/east, +/obj/item/plate{ + pixel_x = -4 + }, +/obj/effect/spawner/random/food_or_drink/dinner{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Up" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/ruin/space/has_grav/nova/des_two/bridge) +"Us" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/bridge/admiral) +"Uv" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/lattice, +/turf/template_noop, +/area/template_noop) +"Uz" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/cold/directional/east, +/obj/effect/turf_decal/trimline/dark_blue/corner, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"UB" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "ds2bridge" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/bridge) +"UE" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"UM" = ( +/obj/structure/table/reinforced, +/obj/item/storage/backpack/duffelbag/syndie/surgery{ + pixel_y = 4 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/obj/item/clothing/suit/apron/surgical{ + pixel_x = -4; + pixel_y = -5 + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 7; + pixel_y = -9 + }, +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/medbay) +"UO" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/machinery/reagentgrinder{ + pixel_y = 5 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/medbay/chem) +"UQ" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor/preopen{ + id = "diner-view" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"UR" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"UT" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/machinery/light/warm/directional/east, +/obj/machinery/vending/dorms, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"UX" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/window/survival_pod{ + dir = 1; + req_access = list("syndicate_leader") + }, +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/iron/dark/smooth_large, +/area/ruin/space/has_grav/nova/des_two/security) +"UY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/cable, +/obj/machinery/power/rtg/advanced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Va" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/obj/machinery/button/door/directional/south{ + desc = "Keep out the Officers."; + id = "smasteratarms"; + name = "Master at Arms' room bolt"; + normaldoorcontrol = 1; + pixel_x = 6; + req_access = list("syndicate_leader"); + specialfunctions = 4 + }, +/obj/machinery/button/door/directional/south{ + desc = "Keep out the Officers."; + id = "smasteratarms"; + name = "Master at Arms' shutters control"; + pixel_x = -6; + req_access = list("syndicate_leader") + }, +/obj/structure/cable, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"Vb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Ve" = ( +/obj/machinery/light/cold/directional/south, +/obj/machinery/processor, +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Vf" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ + chamber_id = "des_twoo2"; + dir = 4 + }, +/turf/open/floor/engine/o2, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Vk" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/north, +/obj/machinery/power/shuttle_engine/heater, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/nova/des_two) +"Vm" = ( +/obj/machinery/light/cold/directional/east, +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Vn" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark_red/corner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/iron/dark/textured_corner{ + dir = 8 + }, +/area/ruin/space/has_grav/nova/des_two/bridge) +"Vo" = ( +/obj/machinery/light/cold/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/bot, +/obj/machinery/firealarm/directional/west, +/obj/structure/ore_box, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"Vp" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Vu" = ( +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/effect/turf_decal/siding/white, +/obj/machinery/chem_mass_spec, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/medbay/chem) +"Vv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/violet/hidden{ + dir = 9 + }, +/obj/structure/fluff/broken_canister_frame, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Vw" = ( +/obj/machinery/light/cold/directional/south, +/obj/machinery/grill, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Vy" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/machinery/recharger, +/obj/effect/turf_decal/delivery/red, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/item/restraints/handcuffs{ + pixel_y = -9 + }, +/obj/item/crowbar{ + pixel_y = -13 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"Vz" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/nova/des_two/engineering) +"VB" = ( +/obj/machinery/hydroponics/constructable, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"VC" = ( +/obj/machinery/camera/directional/north{ + c_tag = "DS-2 Interrogation Room"; + network = list("ds2") + }, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/security/lawyer) +"VE" = ( +/obj/effect/turf_decal/trimline/purple/warning{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"VF" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/red/directional/south, +/obj/item/circuitboard/machine/ore_silo, +/obj/structure/frame/machine{ + anchored = 1; + icon_state = "box_1"; + state = 2 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/bridge/vault) +"VJ" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/template_noop) +"VK" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 5 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"VM" = ( +/obj/machinery/light/cold/directional/north, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/bridge) +"VO" = ( +/obj/structure/weightmachine/weightlifter, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/line{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron, +/area/ruin/space/has_grav/nova/des_two/service/dorms/fitness) +"VP" = ( +/obj/machinery/power/shuttle_engine/large, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/floor{ + use_power = 0 + }, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/nova/des_two) +"VR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible, +/obj/machinery/meter, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"VT" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"VX" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id = "ds2corpliaison"; + name = "Corporate Liaison Shutters" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/bridge/cl) +"VY" = ( +/obj/effect/turf_decal/stripes/red/corner, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/button/door/directional/east{ + desc = "To keep pesky prisoners obedient."; + id = "gaybabyjail"; + name = "Isolation Cell Control"; + req_access = list("syndicate_leader") + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Wf" = ( +/obj/effect/turf_decal/bot, +/obj/item/storage/toolbox/syndicate{ + pixel_y = 5 + }, +/obj/item/circuitboard/machine/rtg/advanced{ + pixel_y = -2 + }, +/obj/item/circuitboard/machine/rtg/advanced, +/obj/item/circuitboard/machine/rtg/advanced{ + pixel_y = 2 + }, +/obj/item/circuitboard/machine/rtg/advanced{ + pixel_y = 5 + }, +/obj/effect/spawner/random/techstorage/data_disk{ + pixel_x = -5 + }, +/obj/item/storage/box/stockparts/deluxe{ + pixel_x = 3; + pixel_y = -4 + }, +/obj/structure/closet/crate/engineering, +/obj/item/t_scanner, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"Wk" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ + chamber_id = "des_twoplasma"; + dir = 4 + }, +/turf/open/floor/engine/plasma, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Wm" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/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, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"Wn" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/structure/chair/sofa/corp/right{ + color = "#DE3A3A" + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"Wq" = ( +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security) +"Ws" = ( +/obj/structure/table, +/obj/machinery/microwave{ + pixel_y = 5 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Wt" = ( +/obj/structure/bed/medical{ + dir = 4 + }, +/obj/item/bedsheet/medical, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/medbay) +"Wu" = ( +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, +/obj/effect/turf_decal/delivery/red, +/obj/machinery/door/airlock/security/old/glass{ + name = "Long-Term Brig" + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "DS2permabrig" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security) +"Wv" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/delivery/red, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/window/survival_pod{ + dir = 8; + name = "Isolation Cell"; + req_access = list("syndicate_leader") + }, +/obj/machinery/door/window/survival_pod{ + dir = 4; + name = "Isolation Cell"; + req_access = list("syndicate_leader") + }, +/obj/machinery/door/poddoor/preopen{ + id = "gaybabyjail" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Ww" = ( +/obj/effect/turf_decal/box/red/corners{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo/hangar) +"Wx" = ( +/obj/machinery/light/warm/directional/west, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/structure/sign/warning/no_smoking/directional/west, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Wz" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/dark/side, +/area/ruin/space/has_grav/nova/des_two/research) +"WA" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"WC" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/space/has_grav/nova/des_two/research) +"WE" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor/preopen{ + id = "dorms-view" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"WG" = ( +/obj/effect/turf_decal/siding/dark/corner, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/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/diagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"WH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"WL" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"WM" = ( +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ + dir = 10 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/vg_decals/atmos/air, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/engineering) +"WN" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/trimline/dark_red/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/pen{ + pixel_x = -2; + pixel_y = 5 + }, +/turf/open/floor/iron/dark/textured_half, +/area/ruin/space/has_grav/nova/des_two/bridge) +"WS" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"WW" = ( +/obj/machinery/seed_extractor, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"WZ" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 8 + }, +/obj/structure/closet/secure_closet/des_two/electrical_supplies, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Xb" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Xf" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/green/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/door/airlock/hatch{ + id_tag = "DS2incineratorHatch"; + name = "Incinerator Hatch" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/structure/holosign/barrier/atmos/sturdy, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Xg" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"Xh" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/nova/des_two/security) +"Xk" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/bookcase/random/fiction, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/service/lounge) +"Xl" = ( +/obj/machinery/vending/imported/yangyu, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Xm" = ( +/obj/structure/chair, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"Xn" = ( +/obj/structure/table/reinforced, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_y = 8 + }, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = 4; + pixel_y = 5 + }, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = -5; + pixel_y = 4 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/bridge/eva) +"Xq" = ( +/obj/effect/turf_decal/trimline/yellow/line, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"Xr" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/siding/thinplating/end{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/ruin/space/has_grav/nova/des_two/halls) +"Xt" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "ds2conveyor" + }, +/obj/machinery/light/red/directional/south, +/obj/structure/plasticflaps, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo) +"Xx" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder{ + pixel_x = 7; + pixel_y = 4 + }, +/obj/structure/sign/poster/contraband/moffuchis_pizza/directional/east, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/iron/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Xy" = ( +/obj/structure/cable, +/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/kitchen{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Xz" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/machinery/vending/hydronutrients, +/turf/open/floor/iron/white/diagonal, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"XA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/yellow{ + dir = 10 + }, +/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/enginetech{ + dir = 8 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/engineering) +"XC" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/closet/crate/solarpanel_small, +/obj/effect/turf_decal/tile/brown/half{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 4 + }, +/area/ruin/space/has_grav/nova/des_two/cargo) +"XF" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"XG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/security/prison) +"XI" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/bridge/admiral) +"XN" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/trimline/dark_red/line, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner, +/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ + dir = 1 + }, +/obj/machinery/computer/monitor{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/turf/open/floor/iron/dark/textured_half, +/area/ruin/space/has_grav/nova/des_two/bridge) +"XR" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/light/cold/directional/west, +/obj/structure/disposalpipe/junction/flip{ + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"XV" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 8 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"XX" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/cargo) +"XY" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/obj/structure/table/reinforced, +/obj/machinery/reagentgrinder{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/storage/box/beakers{ + pixel_x = 8; + pixel_y = 6 + }, +/obj/item/storage/box/beakers{ + pixel_x = 8 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/ruin/space/has_grav/nova/des_two/service/hydroponics) +"Ya" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/line, +/obj/structure/sign/flag/syndicate/directional/south{ + pixel_x = -16 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/coffeemaker, +/turf/open/floor/iron/dark/textured_half, +/area/ruin/space/has_grav/nova/des_two/bridge) +"Yb" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/floor{ + use_power = 0 + }, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/nova/des_two) +"Yd" = ( +/obj/machinery/power/turbine/turbine_outlet, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/engine, +/area/ruin/space/has_grav/nova/des_two/engineering) +"Ye" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/item/pen{ + pixel_y = 4 + }, +/obj/item/flashlight/lamp{ + pixel_x = -6 + }, +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/nova/des_two/security/lawyer) +"Yn" = ( +/obj/effect/turf_decal/trimline/dark_green/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"Yp" = ( +/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/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"Yz" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/light/warm/directional/west, +/obj/machinery/skill_station, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"YC" = ( +/obj/machinery/air_sensor{ + chamber_id = "syndieincinerator" + }, +/obj/machinery/atmospherics/pipe/smart/simple/dark/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/green/hidden/layer2{ + dir = 9 + }, +/turf/open/floor/engine, +/area/ruin/space/has_grav/nova/des_two/engineering) +"YD" = ( +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/medbay/chem) +"YG" = ( +/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate_command/admiral, +/turf/open/floor/carpet/red, +/area/ruin/space/has_grav/nova/des_two/bridge/admiral) +"YH" = ( +/obj/machinery/door/airlock/silver{ + name = "Public Showers" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/service/dorms/fitness) +"YI" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/nova/des_two/security) +"YK" = ( +/obj/item/circuitboard/computer/mech_bay_power_console, +/obj/effect/turf_decal/trimline/dark_red/filled/line, +/obj/structure/frame/computer, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"YN" = ( +/obj/machinery/vending/wardrobe/syndie_wardrobe, +/turf/open/floor/iron/dark/smooth_large, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"YQ" = ( +/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/ruin/space/has_grav/nova/des_two/halls) +"YR" = ( +/obj/structure/table, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/machinery/camera/xray/directional/west{ + c_tag = "DS-2 Research"; + network = list("ds2") + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/research) +"YU" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/structure/closet/secure_closet/armory_kiboko_but_evil, +/obj/structure/reagent_dispensers/wall/peppertank/directional/west, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/nova/des_two/security/armory) +"Zd" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/siding/thinplating/end{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/small, +/area/ruin/space/has_grav/nova/des_two/halls) +"Zg" = ( +/obj/machinery/suit_storage_unit/syndicate/softsuit, +/turf/open/floor/iron/dark/small, +/area/ruin/space/has_grav/nova/des_two/bridge/eva) +"Zh" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "ds2conveyor" + }, +/obj/machinery/door/poddoor{ + id = "ds2cargo" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/nova/des_two/cargo) +"Zi" = ( +/obj/effect/turf_decal/trimline/purple/corner, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/space/has_grav/nova/des_two/halls) +"Zo" = ( +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"Zp" = ( +/obj/machinery/iv_drip, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/nova/des_two/medbay) +"Zq" = ( +/obj/structure/sign/flag/syndicate/directional/south, +/obj/machinery/light/warm/directional/south, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/bridge/admiral) +"Zs" = ( +/obj/item/bedsheet/medical, +/obj/structure/bed/medical{ + dir = 4 + }, +/turf/open/floor/iron/white/small, +/area/ruin/space/has_grav/nova/des_two/medbay) +"Zt" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 8 + }, +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage{ + pixel_x = -7; + pixel_y = 8 + }, +/obj/effect/spawner/random/food_or_drink/salad{ + pixel_y = 3 + }, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/nova/des_two/service/diner) +"Zz" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/grunge{ + id_tag = "TESRedguard"; + name = "Dormitory" + }, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"ZA" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 6 + }, +/obj/item/toy/mecha/mauler{ + pixel_y = 16 + }, +/obj/item/toy/mecha/deathripley{ + pixel_x = -16; + pixel_y = 8 + }, +/obj/item/toy/figure/syndie, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 1 + }, +/area/ruin/space/has_grav/nova/des_two/bridge) +"ZB" = ( +/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/diagonal, +/area/ruin/space/has_grav/nova/des_two/medbay) +"ZC" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/halls) +"ZE" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/light/red/directional/west, +/obj/machinery/turretid{ + ailock = 1; + control_area = "/area/ruin/space/has_grav/nova/des_two/bridge/vault"; + dir = 1; + icon_state = "control_kill"; + lethal = 1; + name = "DS2 turret controls"; + pixel_x = -30; + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/bridge/vault) +"ZF" = ( +/obj/structure/table, +/obj/structure/bedsheetbin, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/ruin/space/has_grav/nova/des_two/service/dorms/fitness) +"ZH" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/obj/machinery/smartfridge/organ, +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/effect/turf_decal/siding/white/corner{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/medbay) +"ZP" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/item/kirbyplants/organic/plant22, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/nova/des_two/service/dorms) +"ZQ" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/nova/des_two/cargo) +"ZS" = ( +/obj/machinery/chem_dispenser/fullupgrade, +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/nova/des_two/medbay/chem) +"ZT" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/nova/des_two/medbay/chem) +"ZY" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/nova/des_two) + +(1,1,1) = {" +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +mX +kF +kF +kF +kF +kF +kF +kF +kF +kF +kF +kF +kF +kF +kx +kx +kx +kF +kF +kF +kF +kF +mX +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +"} +(2,1,1) = {" +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +mX +kF +rH +GL +nS +fy +UR +Xm +Jl +iV +tS +uN +uN +jZ +kF +kF +kF +kF +kF +ve +QV +uc +KM +kF +mX +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +"} +(3,1,1) = {" +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +EJ +kx +NB +NB +kF +la +gA +Vp +Ni +Tf +UR +tR +RZ +vc +kM +Vp +Vp +Vp +xx +rc +rc +rc +yh +ve +bP +Al +ah +Se +kF +NB +NB +NB +NB +kx +EJ +wg +wg +wg +wg +wg +"} +(4,1,1) = {" +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +qz +QX +kF +Oe +kQ +kQ +kQ +wE +Dh +bs +kQ +kQ +kQ +kQ +kQ +kQ +En +iO +VT +Ir +Du +ve +CT +JA +Ua +Ve +kF +Vk +Oi +uq +wg +wg +wg +wg +wg +wg +wg +wg +"} +(5,1,1) = {" +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +IC +zI +QX +kF +Qx +Po +kB +gi +EZ +UR +VY +Gi +hP +sD +tn +mP +Dr +Fo +Ru +Ru +Ru +uL +RP +XG +XG +iM +Hu +kF +Vk +Oi +Yb +wg +wg +wg +wg +wg +wg +wg +wg +"} +(6,1,1) = {" +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +Nc +Oi +QX +kF +pX +uS +kF +Py +dv +kF +kF +Wv +kF +kF +ra +kF +kF +hC +Lw +OT +Vb +hA +GD +Ar +LP +yR +Jf +kF +Vk +Oi +Oi +GK +wg +wg +wg +wg +wg +wg +wg +"} +(7,1,1) = {" +wg +wg +wg +wg +xr +IQ +IQ +IQ +Kf +Kf +Kf +Kf +WE +WE +Kf +Kf +Kf +kF +Dz +Gh +kF +bx +xZ +kF +av +sh +kF +Ds +Xb +bu +kF +kF +gj +kF +Ae +kF +kF +fe +LP +Oy +BL +kF +Vk +Oi +Oi +Yb +wg +wg +wg +wg +wg +wg +wg +"} +(8,1,1) = {" +wg +EJ +kx +NB +NB +tg +Cj +rs +Kf +iR +eo +Kf +Pe +Ne +Kf +Az +iR +kF +yH +NS +kF +ha +TH +kF +Ue +wc +kF +Qi +qn +vF +kF +aa +Fb +BN +PP +lJ +kF +CJ +dI +ct +lb +kF +Og +Oi +Oi +ZY +wg +wg +wg +wg +wg +wg +wg +"} +(9,1,1) = {" +wg +wg +wg +wg +NB +Fw +FH +dR +Kf +pt +eW +Zz +KY +dh +iK +gb +iZ +uV +uV +uV +uV +Xh +Xh +Xh +Xh +Xh +Xh +Xh +Xh +Xh +Xh +yL +hz +GO +hs +sl +PX +PX +PX +PX +PX +PX +PX +PX +Vk +Oi +VP +wg +wg +wg +wg +wg +wg +"} +(10,1,1) = {" +wg +wg +wg +xr +NB +IQ +YH +IQ +Kf +sc +tt +Kf +xH +UT +Kf +DE +tt +uV +it +QH +Re +Xh +FP +wz +yb +yd +jd +zn +lt +Ov +Xh +Xh +pB +ms +Wu +Xh +PX +Lv +bS +Hc +Sp +YU +EC +PX +Vk +Oi +ZY +wg +wg +wg +wg +wg +wg +"} +(11,1,1) = {" +wg +wg +xr +NB +NB +ZF +DK +PY +Kf +Kf +Kf +Kf +NG +Kf +Kf +Kf +Kf +uV +kb +Ye +Pf +Xh +vK +xX +rz +Lx +eY +rr +rr +Ge +jO +CC +nT +xc +vp +ni +tP +mA +uo +uo +uo +uo +LY +oG +PX +NB +NB +xr +wg +wg +wg +wg +wg +"} +(12,1,1) = {" +wg +wg +dT +QX +NB +VO +il +ny +Kf +wj +do +nn +JE +Kf +qs +qc +QO +uV +xy +AK +AW +Xh +aY +JD +Va +Xh +bq +NP +OC +Fh +SH +WS +rl +rr +rl +Fh +Fy +bk +Lq +Lq +Lq +Ed +Lq +pL +PX +NB +NB +NB +NB +NB +kx +EJ +wg +"} +(13,1,1) = {" +wg +wg +cI +QX +NB +MQ +il +AX +Kf +EP +Nm +DB +Lf +ui +km +eU +iR +uV +VC +Ii +mj +Xh +vr +qN +wN +Xh +Rp +Wq +tf +YI +Rf +cr +oz +pf +Xh +Xh +PX +AG +IU +oR +ac +Bu +qw +gy +PX +NB +Vk +Oi +uq +wg +wg +wg +wg +"} +(14,1,1) = {" +wg +NB +NB +NB +NB +rI +vD +qY +Kf +YN +rj +DJ +ZP +Kf +Kf +Kf +Kf +uV +eE +BV +sL +Xh +qj +ie +or +Xh +oS +gK +pW +NY +Rf +by +rl +xu +aH +rY +Tt +Tt +Tt +Tt +Tt +Tt +Tt +Tt +Tt +NB +Vk +Oi +Yb +wg +wg +wg +wg +"} +(15,1,1) = {" +wg +Nc +zI +QX +NB +EL +NO +EL +Kf +cU +cU +ok +cU +Kf +GG +ps +GG +uV +tY +cL +tY +Xh +Fk +Fk +Fk +Xh +Xh +Xh +Xh +Xh +Xh +vT +zN +xu +Kb +Ct +Tt +Bb +iB +Jz +Eb +ON +Jz +Ng +Lg +NB +Vk +Oi +Oi +GK +wg +wg +wg +"} +(16,1,1) = {" +wg +IC +Oi +QX +NB +on +Fj +on +yP +sO +NW +HE +Lz +XR +Lz +Lz +Lz +yn +oO +og +ub +BS +Lz +Lz +Lz +yn +Lz +ub +Lz +kf +Dk +ho +pi +xu +VK +MK +Tt +Vf +Fl +Jz +dy +NC +Jz +Wk +vU +NB +Vk +Oi +Oi +Yb +wg +wg +wg +"} +(17,1,1) = {" +wg +wg +qz +QX +NB +jf +Fj +Fj +Fj +Fj +Fj +zb +Fj +zb +vM +Lo +Ih +Lo +Sj +Fj +Fj +wp +Uz +AI +mx +mx +mx +aF +lU +zp +UX +Fe +tf +PR +Tt +Tt +Tt +oi +aZ +Tt +Fc +Jz +Tt +Si +Tt +NB +Vk +Oi +Oi +ZY +wg +wg +wg +"} +(18,1,1) = {" +wg +Mt +NB +NB +NB +Qp +aL +Rh +Op +cP +nd +pn +NT +Zd +RX +VX +kN +VX +Rt +Rt +Rt +Rt +Rt +ya +Rt +oC +oC +Rt +JF +xp +ms +Ha +ms +gF +Tt +zL +dS +QF +tN +nL +Vv +Tx +Wx +Pn +Tt +mL +Oi +Oi +GK +wg +wg +wg +wg +"} +(19,1,1) = {" +wg +wg +wg +xr +NB +cm +va +HH +HH +Bk +UB +Uj +UB +RX +RX +jp +QW +zD +Rt +bR +jb +uW +QY +hH +hT +FA +Ox +oC +So +zp +ms +zl +lp +BO +Tt +he +aX +nN +em +aN +ke +xB +ke +mg +Tt +Vk +Oi +Oi +Yb +wg +wg +wg +wg +"} +(20,1,1) = {" +wg +wg +wg +wg +wg +iE +wg +wg +wg +Bk +MZ +Hq +sM +RX +FD +RQ +jD +LQ +Rt +vg +uu +uu +Cb +Aw +Mn +yX +iF +oC +So +ZC +KN +NQ +Be +XF +Tt +SI +rb +hn +uD +uD +od +iS +tA +TI +Tt +Vk +Oi +Oi +ZY +wg +wg +wg +wg +"} +(21,1,1) = {" +wg +wg +wg +wg +wg +iE +wg +wg +aT +Bk +lu +fa +dO +ak +hi +JL +JL +LK +Rt +ZH +UM +tL +ye +Mo +Mn +lW +ao +Rt +yu +bA +Tt +Tt +Tt +Tt +Tt +WM +ka +zy +hG +Ez +VR +Sq +zx +ez +Tt +Vk +Oi +VP +wg +wg +wg +wg +wg +"} +(22,1,1) = {" +wg +wg +wg +wg +EJ +kg +kx +Bk +Bk +XN +AV +fa +of +RX +RX +lg +Qs +vv +Rt +zt +Ao +MG +kH +Mo +PV +TG +IA +Rt +So +tq +Jz +WZ +TL +WZ +Tt +Tt +rG +Tt +Jz +Jz +Jz +Tt +Cn +Xf +Tt +Vk +Oi +ZY +wg +wg +wg +wg +wg +"} +(23,1,1) = {" +wg +wg +wg +wg +wg +iE +wg +UB +qI +lD +AV +yI +Vn +AC +RX +Cm +zH +uB +Rt +MB +yU +yU +fh +Cp +To +hH +gB +Rt +hf +tq +Jz +zM +PO +rZ +Oc +Pq +sj +kd +Io +OK +OD +Cn +Qb +YC +Tt +Tt +Tt +Tt +vS +kx +EJ +wg +wg +"} +(24,1,1) = {" +wg +wg +wg +wg +wg +iE +wg +UB +Av +WN +OP +sy +sa +Ya +RX +dC +cG +IN +Rt +TQ +Zs +Wt +li +EQ +Yp +Yp +ZB +md +dZ +vE +Tt +CX +Ce +Ll +lZ +eT +Fa +Tm +gk +FC +LA +Cn +wS +gN +hx +Gk +Yd +pr +kx +wg +wg +wg +wg +"} +(25,1,1) = {" +wg +wg +wg +wg +VJ +Bs +kx +UB +ou +dD +wJ +cj +wu +Sf +EY +EY +EY +EY +Rt +Rt +Rt +Rt +Rt +hq +QN +fd +hH +oC +dZ +dz +gx +NN +KS +HZ +mC +nA +JB +eK +UY +Qe +TM +Tt +Cn +Cn +Tt +NA +Tt +Tt +kx +wg +wg +wg +wg +"} +(26,1,1) = {" +wg +wg +wg +wg +wg +iE +wg +UB +Sx +DF +SR +jC +Kd +eD +EY +At +bt +jr +Rt +nz +Zp +cY +cu +Cd +gW +Qz +JR +By +cn +tk +Tt +LV +XA +ff +nK +EB +Hn +qu +hZ +Pi +Kz +kT +jP +bW +gg +JZ +ze +be +Uv +wg +wg +wg +wg +"} +(27,1,1) = {" +wg +wg +wg +wg +wg +iE +wg +UB +Ht +Pt +AV +Ke +Ob +ZA +EY +YG +CH +Le +Rt +um +ot +nR +Rt +tU +Dy +io +UO +Jd +UE +Xq +Jz +eA +eX +Vz +Im +dg +Px +kt +pb +ET +Bm +RE +tl +vR +Tt +Tt +Tt +Tt +vS +kx +EJ +wg +wg +"} +(28,1,1) = {" +wg +wg +wg +wg +EJ +kg +kx +Bk +Bk +mY +JS +Ke +of +EY +EY +vx +IZ +XI +Rt +Rt +Rt +Rt +Rt +qH +Vu +iX +oc +Jd +fS +Xq +Jz +dN +HF +Rj +Tt +Tt +Tt +Tt +Tt +Tt +Tt +Tt +Tt +Tt +Tt +Vk +Oi +uq +wg +wg +wg +wg +wg +"} +(29,1,1) = {" +wg +wg +wg +wg +wg +iE +wg +wg +aT +Bk +VM +Ke +dO +dQ +LG +Us +Us +Zq +vl +uE +ZE +eV +vl +cA +ib +YD +ZS +Jd +yu +Jy +my +my +my +my +my +CF +mD +fQ +cW +my +Xn +qE +hg +Zg +fz +Vk +Oi +Yb +wg +wg +wg +wg +wg +"} +(30,1,1) = {" +wg +wg +wg +wg +wg +iE +wg +wg +wg +Bk +fE +Up +yS +EY +dF +jB +SY +hh +vl +Bi +sK +VF +vl +hE +Ia +ZT +HA +TX +So +Xg +au +TT +Uc +tD +jm +Bv +cy +rB +eJ +my +KJ +vq +rg +EW +fz +Vk +Oi +Oi +GK +wg +wg +wg +wg +"} +(31,1,1) = {" +wg +wg +wg +xr +NB +cm +va +HH +HH +Bk +UB +Nk +UB +EY +EY +NX +GV +MC +vl +RT +hy +ue +vl +TA +ow +FO +sV +TX +So +Dv +jm +MT +bj +SZ +jm +BG +FG +mJ +cW +my +MH +oE +Zg +Zg +fz +Vk +Oi +Oi +Yb +wg +wg +wg +wg +"} +(32,1,1) = {" +wg +nO +NB +NB +NB +Ec +zd +oZ +Yz +mO +Af +Cq +zA +Xr +EY +ME +ME +ME +vl +vl +TS +vl +vl +Jd +Jd +TX +TX +Jd +yi +pa +my +Vy +mH +pP +my +my +KC +fW +my +my +fz +DI +hR +hR +fz +Ci +Oi +Oi +ZY +wg +wg +wg +wg +"} +(33,1,1) = {" +wg +wg +dT +QX +NB +fo +TW +TW +YQ +Fj +Fj +Fj +Fj +zb +wH +Fj +Fj +Fj +Rm +Fj +lo +vQ +yv +iy +az +az +az +jc +JN +qt +Sb +Wm +zK +NL +dr +Qw +Tu +ZQ +PM +Vo +xb +sW +hF +oq +my +my +Vk +Oi +Oi +GK +wg +wg +wg +"} +(34,1,1) = {" +wg +IC +zI +QX +NB +Sw +sH +sH +sH +nH +qS +Rc +ov +QC +qv +Um +aR +Yn +Kj +OF +OU +Zi +ag +fB +zS +fB +fB +Qh +VE +rk +jw +kZ +FZ +Sy +XX +go +FZ +FZ +FZ +RY +FZ +FZ +FZ +Em +my +my +Vk +Oi +Oi +Yb +wg +wg +wg +"} +(35,1,1) = {" +wg +Nc +Oi +QX +NB +ek +Wn +Sc +Xk +Gg +wh +lO +lO +aP +Iw +Iw +qC +Iw +Iw +lO +Hz +Hz +Fm +Hz +Hz +Fz +Fz +Fz +xG +Hz +my +ih +vA +qO +ds +rd +Zo +Gb +IV +RY +WH +WH +WH +De +hQ +my +Vk +Oi +Oi +ZY +wg +wg +wg +"} +(36,1,1) = {" +wg +NB +NB +NB +NB +da +Hb +mK +Rx +nI +jt +lO +XY +bd +mi +Xz +PS +VB +vO +vO +Hz +tm +RH +zU +YR +qW +ij +zg +Mg +Sv +my +gG +Kk +Ej +CE +HK +jm +DA +ae +ca +Kh +GR +IM +FZ +QA +my +Vk +Oi +VP +wg +wg +wg +wg +"} +(37,1,1) = {" +wg +Nc +zI +QX +NB +ek +GY +Uh +Ey +MM +hJ +lO +BC +QQ +cD +cD +WG +GU +GU +at +Hz +QM +pu +fA +fA +cz +WC +WC +MP +ix +my +An +tG +my +NR +HV +jm +XC +ld +ca +iw +GE +cE +FZ +Wf +my +Vk +Oi +ZY +wg +wg +wg +wg +"} +(38,1,1) = {" +wg +IC +Oi +QX +NB +Rd +ri +sB +GS +Gt +JI +lO +uh +QQ +PW +Fx +we +VB +vO +vO +Hz +Nl +Jv +jl +sP +SO +IH +pl +cO +rx +my +JC +Dw +my +LM +Zh +my +cq +KQ +QK +Au +KV +rD +Cy +GH +my +NB +NB +NB +NB +kx +EJ +wg +"} +(39,1,1) = {" +wg +Nc +zI +QX +bw +bw +oV +bw +pO +gO +pO +lO +lO +Qo +mT +WW +LF +VB +vO +vO +Hz +LB +Gz +Dm +qK +Ok +bX +Hz +Hz +Hz +my +rN +tG +my +ax +Xt +my +my +tG +ml +my +zh +my +my +my +my +NB +xr +wg +wg +wg +wg +wg +"} +(40,1,1) = {" +wg +IC +Oi +QX +bw +rU +me +bw +iY +FY +Qa +Xl +Iw +QQ +Tw +uA +FJ +GU +GU +at +Hz +PA +HI +oK +Gx +FB +Ta +Hz +xQ +eH +Tp +Tp +iz +TB +ba +Tp +Tp +Ww +xQ +QE +my +cb +my +Vk +Oi +uq +wg +wg +wg +wg +wg +wg +wg +"} +(41,1,1) = {" +wg +wg +dT +QX +bw +LT +Vm +bw +Zt +FY +Qa +aB +Iw +uf +DH +DH +dn +eO +kI +vO +Hz +KT +Ku +bo +vo +nG +wk +Hz +eH +HD +QG +nm +nm +nm +nm +nm +fc +Nb +Ww +AR +my +my +my +Vk +Oi +Yb +wg +wg +wg +wg +wg +wg +wg +"} +(42,1,1) = {" +wg +wg +cI +QX +bw +bw +bw +bw +ch +FY +Qa +qR +lO +No +kD +DL +Rb +lO +lO +lO +Hz +Hz +tC +Fz +Fz +Hz +Hz +aW +tQ +QG +nm +nm +nm +nm +nm +nm +nm +fc +st +Bw +Mt +Ax +HQ +Oi +Oi +GK +wg +wg +wg +wg +wg +wg +wg +"} +(43,1,1) = {" +wg +wg +xr +NB +bw +zV +Mw +yy +WA +pz +Rr +Rr +tZ +jT +WL +WL +Rz +ep +oT +ee +Hz +YK +vB +SB +gw +pk +Hz +zc +tQ +nm +nm +nm +nm +nm +nm +nm +nm +nm +st +jE +lI +Ax +Vk +Oi +Oi +Yb +wg +wg +wg +wg +wg +wg +wg +"} +(44,1,1) = {" +wg +wg +wg +xr +bw +XV +Qa +Qa +Fi +Nr +Mk +kG +AZ +jj +Cf +Cf +Gl +MF +Kg +lE +Hz +aj +wm +eF +fl +bY +Hz +Ns +tQ +nm +nm +nm +nm +nm +nm +nm +nm +nm +jN +CV +GX +Ax +Vk +Oi +Oi +ZY +wg +wg +wg +wg +wg +wg +wg +"} +(45,1,1) = {" +wg +wg +wg +wg +bw +zV +rM +EU +Ch +kc +Hw +Hw +ro +eP +zq +Xy +ob +DS +xS +PU +Hz +pe +cS +lF +Aa +wn +Hz +py +tQ +mQ +nm +nm +nm +nm +nm +nm +nm +Ra +st +CS +xd +Ax +Vk +Oi +VP +wg +wg +wg +wg +wg +wg +wg +wg +"} +(46,1,1) = {" +wg +EJ +kx +Mt +bw +zV +Un +QB +pI +xk +Od +Ui +pO +PB +Cf +tT +SG +SX +KG +SN +Hz +vd +mr +Dt +fw +Wz +Hz +Lb +wt +RV +mQ +nm +nm +nm +nm +nm +Ra +KI +jR +tE +Gd +Ax +Vk +Oi +ZY +wg +wg +wg +wg +wg +wg +wg +wg +"} +(47,1,1) = {" +wg +wg +wg +wg +gn +UQ +UQ +UQ +bw +bw +bw +bw +bw +sZ +Cf +Cf +aC +Cf +Cf +Vw +Hz +jJ +lY +jW +qo +JK +Hz +zc +xQ +wt +sr +sr +sr +sr +sr +sr +sr +jR +xQ +Ts +Ax +Ax +NB +NB +NB +NB +kx +EJ +wg +wg +wg +wg +wg +"} +(48,1,1) = {" +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +bw +Ws +iP +Xx +Ja +Hh +Bj +wV +Hz +Hz +Hz +Hz +Hz +Hz +Hz +aW +hM +hM +hM +hM +hM +hM +hM +hM +hM +hM +hM +Mt +Ax +Ay +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +"} +(49,1,1) = {" +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +gv +bw +bw +bw +bw +bw +bw +bw +Hz +kx +kx +kx +wg +wg +wg +kx +wg +kx +wg +EJ +ss +aJ +zv +EJ +wg +kx +wg +kx +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +"} +(50,1,1) = {" +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +EJ +wg +kx +wg +wg +wg +wg +wg +wg +wg +kx +wg +EJ +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +"} +(51,1,1) = {" +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +kx +wg +wg +wg +wg +wg +wg +wg +kx +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +"} +(52,1,1) = {" +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +EJ +wg +wg +wg +wg +wg +wg +wg +EJ +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +wg +"} diff --git a/_maps/RandomRuins/SpaceRuins/nova/drones_derelict.dmm b/_maps/RandomRuins/SpaceRuins/nova/drones_derelict.dmm new file mode 100644 index 00000000000000..31882f000e84d0 --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/nova/drones_derelict.dmm @@ -0,0 +1,9974 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ad" = ( +/obj/structure/frame/machine, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical/genetics) +"ae" = ( +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway/central) +"ag" = ( +/obj/structure/grille/broken, +/obj/item/shard/plasma, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"aj" = ( +/obj/structure/lattice, +/obj/structure/girder/reinforced, +/turf/template_noop, +/area/ruin/space/bb13/engineering/atmos) +"al" = ( +/obj/structure/girder, +/turf/template_noop, +/area/ruin/space/bb13/engineering/s_solars_control) +"ar" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/dark/airless, +/area/ruin/space/bb13/service/chapel) +"ax" = ( +/obj/structure/door_assembly/door_assembly_med, +/obj/item/stack/cable_coil/cut, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"aE" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/ruin/space/bb13/research/toxins) +"aH" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"aI" = ( +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"aJ" = ( +/obj/machinery/portable_atmospherics/canister/plasma, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"aQ" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/space/bb13/research/toxins) +"aX" = ( +/turf/closed/wall, +/area/ruin/space/bb13/service/botany) +"aZ" = ( +/obj/machinery/mass_driver/chapelgun{ + dir = 8 + }, +/obj/structure/closet/crate/coffin, +/obj/machinery/door/window/right/directional/east, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/chapel) +"bb" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/kitchen) +"bf" = ( +/turf/closed/wall, +/area/ruin/space/bb13/medical) +"bj" = ( +/obj/structure/frame/machine/secured, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/botany) +"bk" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/s_solars_control) +"bs" = ( +/obj/structure/closet/crate/bin, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"bw" = ( +/turf/template_noop, +/area/ruin/space/bb13/engineering/sec_eng) +"bB" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/bluespace_crystal, +/obj/item/stack/sheet/bluespace_crystal, +/obj/item/stack/sheet/bluespace_crystal, +/obj/item/language_manual/dronespeak_manual, +/turf/open/floor/circuit/red/airless, +/area/ruin/space/bb13/engineering/vault) +"bK" = ( +/obj/structure/lattice, +/obj/item/stack/cable_coil/cut, +/turf/template_noop, +/area/ruin/space/bb13/security) +"bN" = ( +/obj/machinery/door/airlock, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/kitchen) +"bQ" = ( +/turf/template_noop, +/area/ruin/space/bb13/engineering/atmos) +"bR" = ( +/obj/structure/door_assembly/door_assembly_eng, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"cc" = ( +/obj/structure/cable, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/n_solars_control) +"cd" = ( +/obj/structure/lattice, +/obj/item/tank/internals/oxygen, +/turf/template_noop, +/area/ruin/space/bb13/engineering/engine) +"cg" = ( +/obj/structure/table_frame, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"ci" = ( +/obj/structure/frame/machine, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/kitchen) +"ck" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"cq" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical/genetics) +"cJ" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/research/toxins) +"cM" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/template_noop, +/area/space/nearstation) +"di" = ( +/obj/item/tank/internals/plasma/full, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"ds" = ( +/obj/structure/cable, +/obj/machinery/power/smes, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/n_solars_control) +"dt" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/no_charge, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/chapel) +"dw" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"dy" = ( +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"dz" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/circuit/red/airless, +/area/ruin/space/bb13/security) +"dB" = ( +/obj/item/clothing/head/helmet/space/eva, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/n_solars_control) +"dR" = ( +/obj/structure/lattice, +/obj/machinery/light/small/directional/west, +/turf/template_noop, +/area/ruin/space/bb13/research) +"dT" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"dV" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/bridge) +"dY" = ( +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/botany) +"dZ" = ( +/obj/structure/table_frame, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service) +"eb" = ( +/obj/machinery/door/airlock, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/botany) +"ei" = ( +/obj/item/shard, +/obj/item/shard, +/obj/structure/grille/broken, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/medical/genetics) +"em" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/space/bb13/hallway) +"en" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark/airless, +/area/ruin/space/bb13/medical) +"eC" = ( +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"eD" = ( +/obj/effect/spawner/random/structure/crate_abandoned, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway/central) +"eI" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1 + }, +/turf/template_noop, +/area/ruin/space/bb13/engineering/atmos) +"eK" = ( +/obj/structure/table, +/obj/structure/frame/machine, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"eS" = ( +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"fa" = ( +/obj/structure/table_frame, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical/genetics) +"fe" = ( +/obj/item/shard, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"fj" = ( +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/atmos) +"fl" = ( +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/vault) +"fr" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical/genetics) +"fv" = ( +/obj/machinery/door/airlock/maintenance, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway/central) +"fy" = ( +/obj/item/reagent_containers/cup/beaker/large, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/kitchen) +"fE" = ( +/obj/structure/lattice/catwalk, +/turf/template_noop, +/area/ruin/space/bb13/engineering/n_solars_control) +"fH" = ( +/obj/structure/table_frame, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"fM" = ( +/obj/structure/frame/machine/secured, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical/genetics) +"fQ" = ( +/obj/structure/closet/crate/bin, +/obj/item/slime_extract/grey, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research/toxins) +"fR" = ( +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/chapel) +"fT" = ( +/obj/structure/reagent_dispensers/watertank/high, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/botany) +"fW" = ( +/obj/effect/decal/remains/human, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/n_solars_control) +"fY" = ( +/obj/structure/table, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/medical) +"gb" = ( +/obj/item/kirbyplants/random/dead, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"ge" = ( +/obj/structure/girder/reinforced, +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/space/bb13/engineering/sec_eng) +"gp" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/botany) +"gB" = ( +/obj/structure/grille/broken, +/obj/item/shard, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/bridge) +"gF" = ( +/obj/structure/lattice, +/obj/item/stack/cable_coil/five, +/turf/template_noop, +/area/ruin/space/bb13/engineering/atmos) +"gK" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/wood/airless, +/area/ruin/space/bb13/bridge) +"gM" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/vending/sovietsoda, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway/central) +"gN" = ( +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"gU" = ( +/obj/item/shard/plasma, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"gX" = ( +/obj/structure/frame/machine/secured, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"ha" = ( +/obj/structure/frame/machine/secured, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"hc" = ( +/turf/open/floor/engine/airless, +/area/ruin/space/bb13/engineering/atmos) +"hm" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"ho" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/frame/machine/secured, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"hv" = ( +/obj/structure/frame/computer{ + anchored = 1; + dir = 1 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/bridge) +"hC" = ( +/obj/machinery/door/airlock/external, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway/central) +"hH" = ( +/turf/template_noop, +/area/ruin/space/bb13/engineering/n_solars_control) +"hM" = ( +/turf/open/floor/wood/airless, +/area/ruin/space/bb13/service/chapel) +"hO" = ( +/obj/structure/girder/reinforced, +/turf/template_noop, +/area/ruin/space/bb13/engineering/engine) +"hS" = ( +/obj/structure/table, +/obj/machinery/door/window/right/directional/east, +/obj/machinery/door/window/right/directional/west, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/botany) +"hZ" = ( +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"id" = ( +/turf/template_noop, +/area/ruin/space/bb13/research) +"ie" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark/airless, +/area/ruin/space/bb13/service/chapel) +"ih" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"ii" = ( +/obj/structure/closet/crate, +/obj/structure/lattice, +/obj/item/solar_assembly, +/obj/item/solar_assembly, +/obj/item/solar_assembly, +/obj/item/solar_assembly, +/obj/item/solar_assembly, +/obj/item/solar_assembly, +/obj/item/solar_assembly, +/obj/item/solar_assembly, +/obj/item/solar_assembly, +/obj/item/solar_assembly, +/obj/item/solar_assembly, +/turf/template_noop, +/area/space/nearstation) +"ip" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8 + }, +/turf/open/floor/engine/airless, +/area/ruin/space/bb13/research/toxins) +"iq" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"is" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/security) +"it" = ( +/obj/machinery/sleeper{ + dir = 8 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"iz" = ( +/obj/structure/frame/machine, +/obj/structure/lattice, +/turf/template_noop, +/area/space/nearstation) +"iB" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4 + }, +/turf/open/floor/engine/airless, +/area/ruin/space/bb13/research/toxins) +"iD" = ( +/obj/effect/mob_spawn/ghost_role/drone/derelict/babylon, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/s_solars_control) +"iF" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/s_solars_control) +"iJ" = ( +/obj/item/stack/cable_coil/cut, +/turf/template_noop, +/area/ruin/space/bb13/hallway/central) +"iM" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/mapping_helpers/apc/no_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/n_solars_control) +"iO" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"iQ" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/machinery/light/small/directional/west, +/turf/open/floor/circuit/red/airless, +/area/ruin/space/bb13/engineering/vault) +"iR" = ( +/obj/item/storage/box/lights/mixed, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway) +"iS" = ( +/obj/structure/table_frame, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway) +"iT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"iV" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research/toxins) +"iY" = ( +/obj/structure/rack, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/machinery/light/small/directional/west, +/obj/item/stack/sheet/glass, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"iZ" = ( +/turf/closed/wall, +/area/ruin/space/bb13/research) +"jd" = ( +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research/toxins) +"jg" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8 + }, +/turf/open/floor/engine/airless, +/area/ruin/space/bb13/engineering/atmos) +"jj" = ( +/obj/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/security) +"jm" = ( +/obj/structure/frame/computer{ + anchored = 1; + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/bridge) +"jo" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/mineral/uranium{ + amount = 15 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 15 + }, +/turf/open/floor/circuit/red/airless, +/area/ruin/space/bb13/engineering/vault) +"jp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"jv" = ( +/obj/structure/cable, +/obj/machinery/power/terminal, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/n_solars_control) +"jz" = ( +/obj/structure/table_frame, +/obj/effect/spawner/random/engineering/toolbox, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"jA" = ( +/obj/machinery/power/solar{ + id = "derelictsolar"; + name = "Derelict Solar Array" + }, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/n_solars_control) +"jG" = ( +/obj/structure/chair{ + pixel_y = -2 + }, +/turf/open/floor/wood/airless, +/area/ruin/space/bb13/bridge) +"jN" = ( +/obj/structure/frame/computer, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"jT" = ( +/obj/structure/table_frame, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/kitchen) +"jU" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"jX" = ( +/obj/machinery/door/morgue, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/chapel) +"kc" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"kh" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"kl" = ( +/obj/structure/table, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/no_charge, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/kitchen) +"km" = ( +/obj/structure/table_frame, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"ku" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"kB" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/no_charge, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway) +"kF" = ( +/obj/machinery/door/airlock/service, +/turf/open/floor/iron/dark/airless, +/area/ruin/space/bb13/service/chapel) +"kG" = ( +/obj/item/shard, +/turf/open/floor/iron/dark/airless, +/area/ruin/space/bb13/service/chapel) +"kL" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/bb13/engineering/vault) +"kM" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/space/bb13/security) +"kQ" = ( +/obj/structure/frame/computer{ + anchored = 1; + dir = 1 + }, +/obj/item/circuitboard/computer/rdconsole, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research) +"kU" = ( +/obj/machinery/power/emitter, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"lk" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/medical) +"lo" = ( +/obj/structure/reagent_dispensers/watertank/high, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"lp" = ( +/obj/item/kirbyplants/random/dead, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"lx" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/chapel) +"lz" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/no_charge, +/turf/open/floor/wood/airless, +/area/ruin/space/bb13/bridge) +"lD" = ( +/obj/structure/frame/computer{ + anchored = 1; + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/bridge) +"lE" = ( +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/research) +"lG" = ( +/obj/structure/lattice, +/obj/item/solar_assembly, +/turf/template_noop, +/area/space/nearstation) +"lH" = ( +/obj/structure/door_assembly/door_assembly_research, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research) +"lY" = ( +/obj/structure/table_frame, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"lZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/kitchen) +"md" = ( +/obj/machinery/door/airlock/engineering, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"mf" = ( +/obj/structure/girder/reinforced, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/atmos) +"mg" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/cable_coil/cut, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"mh" = ( +/obj/structure/table, +/obj/item/tank/internals/oxygen/empty, +/obj/item/tank/internals/oxygen/empty, +/obj/item/computer_disk/engineering, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"mj" = ( +/obj/item/kirbyplants/random/dead, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"mF" = ( +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"mG" = ( +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"mT" = ( +/turf/template_noop, +/area/ruin/space/bb13/medical) +"nb" = ( +/obj/structure/frame/machine/secured, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research) +"nc" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/research/toxins) +"ni" = ( +/obj/machinery/door/airlock/external/glass, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"no" = ( +/obj/structure/bed, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"nq" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/atmos) +"nr" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway/central) +"ns" = ( +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/kitchen) +"nt" = ( +/obj/structure/frame/computer{ + anchored = 1; + dir = 4 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical/genetics) +"nw" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/mapping_helpers/apc/no_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/s_solars_control) +"nE" = ( +/obj/structure/door_assembly/door_assembly_med, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"nF" = ( +/obj/structure/table, +/obj/structure/frame/machine, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/kitchen) +"nH" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/template_noop, +/area/ruin/space/bb13/engineering/engine) +"nK" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/s_solars_control) +"nN" = ( +/obj/item/shard, +/obj/structure/lattice, +/turf/template_noop, +/area/space/nearstation) +"nY" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"of" = ( +/turf/closed/wall, +/area/ruin/space/bb13/hallway) +"oi" = ( +/obj/structure/lattice, +/obj/item/stack/cable_coil/cut, +/turf/template_noop, +/area/ruin/space/bb13/hallway/central) +"oq" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"ou" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/bb13/engineering/sec_eng) +"ox" = ( +/obj/item/kirbyplants/random/dead, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/security) +"oF" = ( +/obj/structure/girder/reinforced, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/vault) +"oI" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/bridge) +"oJ" = ( +/obj/structure/table, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"oM" = ( +/obj/structure/grille/broken, +/obj/item/shard, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/s_solars_control) +"oO" = ( +/obj/structure/frame/machine, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research) +"oQ" = ( +/obj/machinery/door/poddoor/shutters{ + id = "derelict_armor" + }, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"oR" = ( +/obj/structure/reagent_dispensers/fueltank/large, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"oZ" = ( +/obj/structure/closet/crate/bin, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"pb" = ( +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/kitchen) +"pe" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/no_charge, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service) +"pj" = ( +/obj/structure/filingcabinet, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"pr" = ( +/turf/closed/wall, +/area/ruin/space/bb13/service/kitchen) +"ps" = ( +/obj/structure/closet/crate/coffin, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/chapel) +"px" = ( +/obj/item/tank/internals/plasma/full, +/obj/structure/lattice, +/turf/template_noop, +/area/space/nearstation) +"pE" = ( +/obj/structure/table_frame, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research/toxins) +"pI" = ( +/obj/structure/lattice, +/obj/structure/girder/reinforced, +/turf/template_noop, +/area/ruin/space/bb13/engineering/sec_eng) +"pK" = ( +/obj/structure/closet/l3closet, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"pL" = ( +/obj/structure/lattice, +/obj/structure/chair, +/obj/machinery/light/small/directional/north, +/turf/template_noop, +/area/ruin/space/bb13/security) +"pM" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/bb13/medical/genetics) +"pO" = ( +/obj/structure/rack, +/obj/item/circuitboard/machine/circuit_imprinter/offstation{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/ai_module/core/full/drone, +/turf/open/floor/circuit/red/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"pS" = ( +/obj/structure/closet/crate/secure, +/obj/effect/spawner/random/maintenance/four, +/obj/item/bikehorn, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"pU" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ + dir = 1 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"pW" = ( +/obj/structure/door_assembly/door_assembly_sec, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"qa" = ( +/obj/machinery/button/door/directional/east{ + id = "derelict_armor" + }, +/obj/machinery/door/poddoor/shutters{ + id = "derelict_armor" + }, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"qc" = ( +/obj/machinery/pipedispenser, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"qi" = ( +/obj/structure/frame/computer{ + anchored = 1; + dir = 8 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"qx" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1 + }, +/turf/open/floor/engine/airless, +/area/ruin/space/bb13/engineering/atmos) +"qy" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"qA" = ( +/obj/structure/plaque/static_plaque/golden/commission/ks13, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"qB" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/template_noop, +/area/space/nearstation) +"qC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/chapel) +"qE" = ( +/obj/structure/lattice, +/obj/effect/spawner/random/structure/grille, +/turf/template_noop, +/area/space/nearstation) +"qG" = ( +/obj/machinery/sleeper{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"qN" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector{ + dir = 4 + }, +/turf/open/floor/engine/airless, +/area/ruin/space/bb13/research/toxins) +"qO" = ( +/obj/structure/closet/crate/bin, +/obj/machinery/light/small/directional/north, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/dark/airless, +/area/ruin/space/bb13/service/chapel) +"qS" = ( +/obj/structure/closet/crate/coffin, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/chapel) +"qT" = ( +/obj/effect/mob_spawn/ghost_role/drone/derelict/babylon, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"qV" = ( +/turf/template_noop, +/area/ruin/space/bb13/medical/genetics) +"ra" = ( +/obj/structure/grille/broken, +/obj/item/shard, +/obj/item/shard, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway/central) +"re" = ( +/obj/machinery/door/airlock/medical, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/medical/genetics) +"ri" = ( +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/s_solars_control) +"rk" = ( +/obj/structure/lattice, +/obj/structure/closet/crate/bin, +/turf/template_noop, +/area/ruin/space/bb13/service) +"rq" = ( +/obj/item/bodypart/chest/monkey, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/medical/genetics) +"ru" = ( +/obj/machinery/door/window/right/directional/south, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical/genetics) +"ry" = ( +/obj/machinery/power/emitter{ + dir = 4 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"rA" = ( +/turf/closed/wall, +/area/ruin/space/bb13/engineering/n_solars_control) +"rD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical/genetics) +"rE" = ( +/obj/machinery/atmospherics/components/unary/vent_pump, +/turf/open/floor/engine/airless, +/area/ruin/space/bb13/engineering/atmos) +"rF" = ( +/obj/structure/closet/crate/bin, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical/genetics) +"rL" = ( +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service) +"rP" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/chapel) +"rQ" = ( +/obj/structure/frame/computer{ + anchored = 1; + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/security) +"rS" = ( +/obj/machinery/door/airlock/engineering, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"rW" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research/toxins) +"sd" = ( +/obj/structure/chair, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"sf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/mapping_helpers/apc/no_charge, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"sg" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/bodypart/chest/monkey, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical/genetics) +"sj" = ( +/obj/structure/table, +/obj/item/stock_parts/servo, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"ss" = ( +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/medical/genetics) +"su" = ( +/obj/structure/lattice, +/obj/structure/closet/crate/bin, +/obj/effect/spawner/random/maintenance, +/turf/template_noop, +/area/ruin/space/bb13/hallway/central) +"sv" = ( +/obj/structure/table, +/obj/structure/frame/machine, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/kitchen) +"sx" = ( +/obj/machinery/power/terminal, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"sD" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service) +"sE" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/space/bb13/service/chapel) +"sF" = ( +/obj/structure/table_frame, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"sG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"sI" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/atmos) +"sX" = ( +/obj/machinery/power/solar_control{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/s_solars_control) +"tj" = ( +/obj/structure/frame/computer{ + anchored = 1; + dir = 8 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical/genetics) +"tw" = ( +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research/toxins) +"tD" = ( +/obj/structure/lattice, +/obj/structure/girder, +/turf/template_noop, +/area/ruin/space/bb13/medical) +"tI" = ( +/obj/structure/table, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"tN" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/medical/genetics) +"tW" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"tX" = ( +/turf/open/floor/iron/dark/airless, +/area/ruin/space/bb13/service/chapel) +"ug" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/atmos) +"ui" = ( +/obj/machinery/power/solar{ + id = "derelictsolar"; + name = "Derelict Solar Array" + }, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/n_solars_control) +"uj" = ( +/turf/closed/wall, +/area/ruin/space/bb13/service/chapel) +"uo" = ( +/obj/machinery/door/airlock/external, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/atmos) +"uq" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/machinery/light/small/directional/east, +/turf/open/floor/circuit/red/airless, +/area/ruin/space/bb13/engineering/vault) +"us" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/mineral/titanium{ + amount = 15 + }, +/obj/item/stack/sheet/mineral/wood/fifty, +/turf/open/floor/circuit/red/airless, +/area/ruin/space/bb13/engineering/vault) +"ux" = ( +/obj/structure/door_assembly/door_assembly_ext, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"uz" = ( +/obj/machinery/gravity_generator/main, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"uB" = ( +/obj/structure/lattice, +/obj/machinery/light/small/directional/north, +/turf/template_noop, +/area/ruin/space/bb13/security) +"uC" = ( +/obj/item/tank/internals/oxygen/empty, +/turf/template_noop, +/area/ruin/space/bb13/engineering/atmos) +"uI" = ( +/obj/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service) +"uR" = ( +/obj/structure/rack, +/obj/item/circuitboard/machine/chem_dispenser/drinks{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/circuitboard/machine/chem_dispenser/drinks/beer, +/turf/open/floor/circuit/red/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"uU" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway/central) +"vd" = ( +/turf/closed/wall, +/area/ruin/space/bb13/service) +"ve" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/space/bb13/service/kitchen) +"vg" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research/toxins) +"vj" = ( +/obj/effect/mob_spawn/ghost_role/drone/derelict/babylon, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/n_solars_control) +"vl" = ( +/obj/structure/cable, +/obj/item/storage/box/lights/mixed, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/s_solars_control) +"vo" = ( +/obj/machinery/power/solar{ + id = "derelictsolar"; + name = "Derelict Solar Array" + }, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/s_solars_control) +"vq" = ( +/obj/structure/frame/machine/secured, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/botany) +"vs" = ( +/obj/structure/girder, +/turf/template_noop, +/area/template_noop) +"vz" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/kitchen) +"vA" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"vB" = ( +/obj/machinery/door/morgue, +/turf/open/floor/iron/dark/airless, +/area/ruin/space/bb13/service/chapel) +"vC" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/bb13/medical) +"vG" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/medical) +"vS" = ( +/turf/open/floor/circuit/red/airless, +/area/ruin/space/bb13/security) +"wa" = ( +/obj/structure/chair{ + pixel_y = -2 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/wood/airless, +/area/ruin/space/bb13/service/chapel) +"wf" = ( +/obj/structure/lattice, +/obj/item/stack/cable_coil/five, +/turf/template_noop, +/area/ruin/space/bb13/engineering/n_solars_control) +"wh" = ( +/obj/machinery/door/window/right/directional/north, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"wi" = ( +/obj/structure/lattice, +/obj/structure/grille/broken, +/obj/item/shard, +/turf/template_noop, +/area/ruin/space/bb13/service/botany) +"wk" = ( +/obj/item/shard, +/turf/template_noop, +/area/ruin/space/bb13/engineering/engine) +"wq" = ( +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway/central) +"ws" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/no_charge, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/botany) +"wv" = ( +/obj/structure/table, +/obj/item/stock_parts/servo, +/obj/item/stock_parts/servo, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"wB" = ( +/obj/machinery/light/small/directional/north, +/obj/item/stack/cable_coil/cut, +/turf/template_noop, +/area/ruin/space/bb13/hallway/central) +"wK" = ( +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/bridge) +"wT" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"wV" = ( +/obj/machinery/door/airlock/engineering, +/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/airless, +/area/ruin/space/bb13/engineering/engine) +"wW" = ( +/obj/structure/door_assembly/door_assembly_com, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"xm" = ( +/obj/structure/girder/reinforced, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/security) +"xo" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/medical/genetics) +"xp" = ( +/obj/structure/rack, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"xu" = ( +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/s_solars_control) +"xw" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway/central) +"xy" = ( +/obj/structure/frame/machine/secured, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"xA" = ( +/obj/structure/lattice, +/obj/structure/girder/reinforced, +/turf/template_noop, +/area/ruin/space/bb13/engineering/engine) +"xE" = ( +/obj/structure/door_assembly, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"xI" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/obj/effect/mob_spawn/ghost_role/drone/derelict/babylon, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"xL" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/mapping_helpers/apc/no_charge, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/vault) +"xN" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"xQ" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/research) +"xT" = ( +/obj/structure/bed{ + dir = 4 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"yg" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"yh" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/atmos) +"yv" = ( +/obj/machinery/vending/hydroseeds, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/botany) +"yw" = ( +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research) +"yy" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"yz" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/research) +"yA" = ( +/obj/machinery/door/airlock/research/glass, +/obj/machinery/button/door/directional/north{ + id = "derelict_toxin" + }, +/turf/open/floor/engine/airless, +/area/ruin/space/bb13/research/toxins) +"yE" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"yR" = ( +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/research/toxins) +"yV" = ( +/obj/structure/door_assembly/door_assembly_ext, +/turf/template_noop, +/area/ruin/space/bb13/engineering/engine) +"yZ" = ( +/turf/template_noop, +/area/template_noop) +"za" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/space/bb13/engineering/n_solars_control) +"zf" = ( +/obj/structure/table_frame, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/research) +"zg" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/kitchen) +"zj" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/mineral/gold{ + amount = 15 + }, +/obj/item/stack/sheet/mineral/silver{ + amount = 15 + }, +/turf/open/floor/circuit/red/airless, +/area/ruin/space/bb13/engineering/vault) +"zp" = ( +/obj/structure/frame/computer{ + anchored = 1; + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/bridge) +"zr" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/research) +"zF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"zG" = ( +/obj/structure/grille/broken, +/obj/item/shard/plasma, +/obj/item/shard/plasma, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"zU" = ( +/obj/structure/table, +/obj/item/shard, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"zZ" = ( +/turf/open/floor/plating/airless, +/area/space/nearstation) +"Ah" = ( +/obj/structure/cable, +/obj/structure/door_assembly/door_assembly_research, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research/toxins) +"Ak" = ( +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/research) +"Al" = ( +/obj/machinery/door/morgue, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"Am" = ( +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"An" = ( +/obj/structure/mop_bucket, +/obj/item/mop, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway) +"Aw" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway/central) +"AA" = ( +/obj/machinery/door/airlock/research/glass, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research) +"AE" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/security) +"AI" = ( +/obj/item/stack/cable_coil/five, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/s_solars_control) +"AK" = ( +/obj/structure/cable, +/obj/machinery/power/solar_control, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/n_solars_control) +"AL" = ( +/obj/structure/chair{ + pixel_y = -2 + }, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/bridge) +"AM" = ( +/obj/machinery/door/poddoor/massdriver_chapel, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/chapel) +"AN" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/turf/open/floor/circuit/red/airless, +/area/ruin/space/bb13/engineering/vault) +"AO" = ( +/obj/machinery/vending/hydronutrients, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/botany) +"AT" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/chapel) +"AZ" = ( +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/bridge) +"Ba" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway) +"Bc" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/bridge) +"Bd" = ( +/obj/item/kirbyplants/random/dead, +/turf/template_noop, +/area/ruin/space/bb13/hallway/central) +"Bk" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/no_charge, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"Bn" = ( +/obj/structure/bed, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"Bp" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/wood/airless, +/area/ruin/space/bb13/service/chapel) +"Bx" = ( +/obj/structure/rack, +/obj/item/circuitboard/machine/autolathe{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/circuitboard/machine/protolathe/offstation, +/turf/open/floor/circuit/red/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"By" = ( +/obj/structure/rack, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"BB" = ( +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/vault) +"BP" = ( +/obj/machinery/power/energy_accumulator/grounding_rod/anchored, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"BQ" = ( +/obj/structure/closet/crate/bin, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"BU" = ( +/obj/structure/rack, +/obj/item/circuitboard/machine/smes{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/circuitboard/machine/smes, +/turf/open/floor/circuit/red/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"BV" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"BW" = ( +/obj/item/tank/internals/oxygen/empty, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/atmos) +"Co" = ( +/obj/machinery/door/airlock/vault, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"Cw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"Cx" = ( +/obj/structure/girder/reinforced, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"CF" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/botany) +"CK" = ( +/obj/structure/table_frame, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"CL" = ( +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"CM" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/components/unary/outlet_injector{ + dir = 1 + }, +/turf/template_noop, +/area/ruin/space/bb13/engineering/atmos) +"CP" = ( +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/atmos) +"Dc" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/bridge) +"Dh" = ( +/turf/template_noop, +/area/ruin/space/bb13/engineering/engine) +"Dl" = ( +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"Ds" = ( +/obj/machinery/button/door/directional/east{ + id = "derelict_nuke" + }, +/obj/machinery/door/poddoor/shutters{ + id = "derelict_nuke" + }, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"Du" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/stack/sheet/glass, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/security) +"DH" = ( +/obj/structure/bed, +/obj/item/stack/sheet/glass, +/obj/item/stack/sheet/glass, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"DN" = ( +/obj/structure/grille/broken, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/botany) +"DT" = ( +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"DU" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/ruin/space/bb13/research/toxins) +"DV" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/no_charge, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"Ea" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway) +"Ec" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"Ee" = ( +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"Eo" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research/toxins) +"EM" = ( +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/n_solars_control) +"EN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"EO" = ( +/obj/structure/table_frame, +/obj/item/stack/sheet/glass, +/obj/item/stack/sheet/glass, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway) +"ES" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4 + }, +/turf/open/floor/engine/airless, +/area/ruin/space/bb13/research/toxins) +"EY" = ( +/obj/structure/door_assembly/door_assembly_ext, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"Fe" = ( +/obj/structure/cable, +/obj/machinery/power/smes, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"Ff" = ( +/obj/structure/chair/stool/directional/west, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"Fs" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"Fx" = ( +/obj/structure/table_frame, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"Fy" = ( +/obj/structure/table, +/obj/item/stock_parts/matter_bin, +/obj/item/reagent_containers/cup/beaker/large, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research) +"FJ" = ( +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"FM" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"FP" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/table_frame, +/obj/item/shard, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"FR" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"FU" = ( +/obj/structure/grille/broken, +/obj/item/shard, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/n_solars_control) +"FX" = ( +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway) +"FY" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/components/unary/vent_pump, +/turf/template_noop, +/area/ruin/space/bb13/engineering/atmos) +"Gm" = ( +/obj/item/kirbyplants/random/dead, +/turf/open/floor/wood/airless, +/area/ruin/space/bb13/bridge) +"Go" = ( +/obj/structure/lattice/catwalk, +/turf/template_noop, +/area/ruin/space/bb13/engineering/s_solars_control) +"Gr" = ( +/obj/machinery/door/airlock/research/glass, +/turf/open/floor/engine/airless, +/area/ruin/space/bb13/research/toxins) +"Gs" = ( +/obj/structure/chair{ + pixel_y = -2 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"Gt" = ( +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"Gv" = ( +/obj/structure/door_assembly/door_assembly_research, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/research/toxins) +"Gw" = ( +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/bridge) +"Gz" = ( +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"GC" = ( +/obj/structure/frame/computer, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"GI" = ( +/obj/structure/girder, +/turf/template_noop, +/area/ruin/space/bb13/engineering/n_solars_control) +"GJ" = ( +/obj/effect/decal/remains/human, +/turf/open/floor/engine/airless, +/area/ruin/space/bb13/research/toxins) +"GK" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/cable, +/obj/machinery/power/smes, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"GR" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"GT" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"GX" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/space/bb13/engineering/engine) +"GY" = ( +/obj/structure/closet/crate/bin, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/research) +"Ha" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"Hc" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/space/bb13/service/botany) +"He" = ( +/obj/item/stack/cable_coil/cut, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"Hf" = ( +/obj/structure/closet/crate/bin, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"Hl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"Hv" = ( +/obj/structure/closet/crate/bin, +/obj/item/stack/sheet/glass, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"HR" = ( +/turf/closed/wall, +/area/ruin/space/bb13/medical/genetics) +"HT" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/mapping_helpers/apc/no_charge, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"HU" = ( +/obj/structure/grille/broken, +/obj/item/shard, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/security) +"HV" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/no_charge, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/research) +"HZ" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/space/nearstation) +"Ia" = ( +/obj/machinery/door/poddoor/preopen{ + id = "derelict_toxin" + }, +/turf/open/floor/engine/airless, +/area/ruin/space/bb13/research/toxins) +"Ig" = ( +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"Ih" = ( +/obj/structure/table_frame, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"Iq" = ( +/obj/structure/cable, +/obj/machinery/power/tracker, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/n_solars_control) +"Is" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/no_charge, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research/toxins) +"IE" = ( +/obj/structure/holosign/barrier/atmos, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"IF" = ( +/obj/structure/frame/machine, +/turf/open/floor/circuit/red/airless, +/area/ruin/space/bb13/security) +"II" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/no_charge, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/atmos) +"IM" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/security) +"IP" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/chair{ + pixel_y = -2 + }, +/turf/open/floor/iron/dark/airless, +/area/ruin/space/bb13/service/chapel) +"IY" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway) +"Ja" = ( +/obj/structure/lattice, +/obj/structure/table_frame, +/turf/template_noop, +/area/ruin/space/bb13/medical) +"Jd" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical/genetics) +"Je" = ( +/obj/structure/frame/computer{ + anchored = 1; + dir = 1 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research/toxins) +"Ji" = ( +/obj/structure/door_assembly/door_assembly_eng, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"Jj" = ( +/obj/structure/table, +/obj/effect/spawner/random/maintenance/four, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/kitchen) +"Jk" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/research/toxins) +"Jm" = ( +/obj/structure/table_frame, +/turf/open/floor/wood/airless, +/area/ruin/space/bb13/bridge) +"Ju" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"Jw" = ( +/obj/structure/lattice, +/obj/item/stack/cable_coil/cut, +/turf/template_noop, +/area/ruin/space/bb13/engineering/engine) +"JI" = ( +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research/toxins) +"JJ" = ( +/obj/structure/closet/crate/bin, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"JN" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research/toxins) +"JR" = ( +/obj/machinery/door/airlock/security, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"JT" = ( +/obj/structure/closet/crate/secure/engineering, +/obj/machinery/power/supermatter_crystal/shard{ + warning_channel = null + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"JU" = ( +/turf/open/floor/engine/airless, +/area/ruin/space/bb13/research/toxins) +"Kd" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical/genetics) +"Kk" = ( +/obj/structure/frame/computer{ + anchored = 1; + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/security) +"Kl" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/dark/airless, +/area/ruin/space/bb13/service/chapel) +"Ko" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"Ks" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/bb13/engineering/atmos) +"Ku" = ( +/obj/structure/holosign/barrier, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"Kx" = ( +/obj/structure/door_assembly/door_assembly_eng, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/s_solars_control) +"KH" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/chapel) +"KV" = ( +/turf/closed/wall, +/area/ruin/space/bb13/hallway/central) +"KZ" = ( +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"Lc" = ( +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research) +"Lf" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/plastic/fifty, +/obj/item/stack/sheet/plastic/fifty, +/turf/open/floor/circuit/red/airless, +/area/ruin/space/bb13/engineering/vault) +"Lk" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"Lr" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/space/bb13/research) +"Lx" = ( +/obj/structure/frame/machine, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/kitchen) +"Ly" = ( +/obj/machinery/drone_dispenser/derelict, +/obj/machinery/light/small/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research) +"LC" = ( +/obj/structure/table, +/obj/item/tank/internals/plasma/full, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"LQ" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"LR" = ( +/obj/structure/lattice, +/obj/structure/closet/crate/bin, +/turf/template_noop, +/area/ruin/space/bb13/bridge) +"LZ" = ( +/turf/closed/wall, +/area/ruin/space/bb13/research/toxins) +"Ma" = ( +/obj/structure/grille/broken, +/obj/item/shard, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"Mc" = ( +/obj/structure/grille/broken, +/obj/item/shard/plasma, +/obj/item/shard/plasma, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/atmos) +"Mh" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"Mj" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research/toxins) +"Mk" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/dark/airless, +/area/ruin/space/bb13/service/chapel) +"Ml" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/atmos) +"Mm" = ( +/obj/structure/closet/crate/solarpanel_small, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"Mn" = ( +/obj/machinery/door/airlock, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"Ms" = ( +/obj/machinery/door/airlock/vault/derelict, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/vault) +"Mz" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/bb13/research/toxins) +"ME" = ( +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/research/toxins) +"MO" = ( +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical/genetics) +"MQ" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research) +"MR" = ( +/obj/structure/lattice, +/obj/structure/chair{ + dir = 8 + }, +/turf/template_noop, +/area/ruin/space/bb13/security) +"MU" = ( +/obj/structure/frame/machine, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/kitchen) +"MW" = ( +/obj/structure/table, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/kitchen) +"MY" = ( +/obj/machinery/field/generator, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"Nd" = ( +/obj/structure/table_frame, +/obj/structure/frame/machine, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"Nh" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/beaker/large, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/kitchen) +"Nk" = ( +/obj/machinery/door/airlock/medical, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"Nm" = ( +/obj/machinery/door/window/right/directional/south, +/obj/structure/table, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"NA" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway/central) +"NB" = ( +/obj/machinery/light/small/directional/east, +/obj/item/stack/cable_coil/cut, +/turf/template_noop, +/area/ruin/space/bb13/hallway/central) +"NK" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/space/bb13/medical/genetics) +"NL" = ( +/obj/structure/rack, +/obj/item/circuitboard/machine/microwave{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/circuitboard/machine/microwave, +/obj/item/circuitboard/machine/deep_fryer{ + pixel_x = -6; + pixel_y = -6 + }, +/turf/open/floor/circuit/red/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"NM" = ( +/obj/structure/holosign/barrier, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"NO" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"NT" = ( +/obj/structure/girder/reinforced, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/bridge) +"NY" = ( +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research/toxins) +"NZ" = ( +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"Oc" = ( +/obj/structure/table_frame, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"Oj" = ( +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/n_solars_control) +"Op" = ( +/obj/machinery/power/port_gen/pacman, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"Or" = ( +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical/genetics) +"Ot" = ( +/obj/structure/table, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service) +"Ov" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"Oz" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"OF" = ( +/obj/structure/frame/computer, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"OO" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research/toxins) +"OT" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/turf/open/floor/circuit/red/airless, +/area/ruin/space/bb13/engineering/vault) +"Pb" = ( +/obj/structure/table, +/obj/effect/spawner/random/entertainment/deck, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service) +"Pc" = ( +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/security) +"Pg" = ( +/obj/structure/closet/crate/bin, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"Pi" = ( +/obj/structure/grille/broken, +/obj/item/shard/plasma, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"Pj" = ( +/obj/structure/frame/computer{ + anchored = 1; + dir = 4 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"Pl" = ( +/obj/structure/closet/crate/bin, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"Pz" = ( +/obj/structure/frame/machine/secured, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"PA" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"PP" = ( +/obj/structure/door_assembly, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service) +"PQ" = ( +/obj/structure/grille/broken, +/obj/item/shard/plasma, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/atmos) +"PV" = ( +/obj/structure/grille/broken, +/obj/item/shard, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"PX" = ( +/obj/structure/table, +/obj/item/stack/sheet/iron/five, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"PZ" = ( +/obj/structure/rack, +/obj/item/circuitboard/machine/space_heater{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/circuitboard/machine/space_heater, +/turf/open/floor/circuit/red/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"Qb" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"Qg" = ( +/obj/structure/lattice, +/obj/item/stack/cable_coil/cut, +/turf/template_noop, +/area/ruin/space/bb13/research) +"Qu" = ( +/turf/open/floor/iron/dark/airless, +/area/ruin/space/bb13/medical) +"Qx" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/space/bb13/hallway/central) +"QA" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research) +"QE" = ( +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/botany) +"QG" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/template_noop, +/area/ruin/space/bb13/engineering/engine) +"QR" = ( +/obj/structure/chair/stool/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"QS" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/atmos) +"Rg" = ( +/obj/structure/closet/crate/bin, +/obj/item/shovel/spade, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/botany) +"Rk" = ( +/obj/structure/girder, +/obj/structure/lattice, +/turf/template_noop, +/area/space/nearstation) +"Rl" = ( +/obj/structure/frame/computer{ + dir = 4 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/bridge) +"Ro" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{ + dir = 1 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"Rr" = ( +/obj/structure/grille/broken, +/obj/item/shard, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway/central) +"Rs" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/bb13/engineering/engine) +"Ru" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/space/bb13/service) +"RB" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/space/bb13/bridge) +"RF" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/structure/crate_abandoned, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"RG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/kitchen) +"RI" = ( +/obj/structure/table, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"RM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron/dark/airless, +/area/ruin/space/bb13/service/chapel) +"RU" = ( +/obj/machinery/field/generator, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"Sm" = ( +/obj/structure/rack, +/obj/item/circuitboard/computer/solar_control{ + pixel_x = -6; + pixel_y = 6 + }, +/turf/open/floor/circuit/red/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"Sq" = ( +/obj/structure/chair/stool/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"St" = ( +/obj/structure/door_assembly/door_assembly_eng, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"Sx" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway/central) +"SD" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector, +/turf/open/floor/engine/airless, +/area/ruin/space/bb13/engineering/atmos) +"SE" = ( +/turf/closed/wall, +/area/ruin/space/bb13/engineering/s_solars_control) +"SH" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/medical) +"SI" = ( +/obj/structure/table, +/obj/item/stock_parts/scanning_module, +/obj/item/stock_parts/scanning_module, +/obj/item/stock_parts/capacitor, +/obj/item/stock_parts/capacitor, +/obj/item/stack/sheet/iron/five, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research/toxins) +"SP" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/dark/airless, +/area/ruin/space/bb13/service/chapel) +"SQ" = ( +/obj/machinery/power/smes, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/s_solars_control) +"ST" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/security) +"Tl" = ( +/obj/structure/rack, +/obj/item/circuitboard/machine/turbine_compressor{ + pixel_y = 6; + pixel_x = 6 + }, +/obj/item/circuitboard/machine/turbine_rotor, +/obj/item/circuitboard/machine/turbine_stator{ + pixel_x = -6; + pixel_y = -6 + }, +/turf/open/floor/circuit/red/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"Tp" = ( +/obj/structure/table/wood, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark/airless, +/area/ruin/space/bb13/service/chapel) +"Ts" = ( +/obj/machinery/door/airlock/service, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"Tt" = ( +/obj/structure/chair/stool/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service) +"Tv" = ( +/turf/template_noop, +/area/ruin/space/bb13/bridge) +"Tw" = ( +/obj/item/shard, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/botany) +"Tz" = ( +/obj/structure/bodycontainer/morgue{ + dir = 8 + }, +/turf/open/floor/iron/dark/airless, +/area/ruin/space/bb13/medical) +"TF" = ( +/obj/structure/holosign/barrier, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway/central) +"TG" = ( +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/medical) +"TI" = ( +/obj/structure/table/wood, +/turf/open/floor/wood/airless, +/area/ruin/space/bb13/service/chapel) +"TL" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway/central) +"TN" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/wood/airless, +/area/ruin/space/bb13/bridge) +"TR" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/chapel) +"TV" = ( +/obj/structure/grille/broken, +/obj/item/shard, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/botany) +"TW" = ( +/obj/structure/rack, +/obj/item/circuitboard/computer/operating{ + pixel_y = 6 + }, +/obj/item/circuitboard/machine/cryo_tube, +/obj/item/circuitboard/computer/crew, +/obj/machinery/light/small/directional/east, +/obj/item/circuitboard/machine/bluespace_miner, +/turf/open/floor/circuit/red/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"Ub" = ( +/obj/structure/closet/crate/bin, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"Uc" = ( +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/vault) +"Uh" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"Ui" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/bb13/security) +"Ur" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"Uu" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/atmos) +"Uv" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/space/bb13/engineering/s_solars_control) +"UB" = ( +/obj/structure/bodycontainer/morgue, +/turf/open/floor/iron/dark/airless, +/area/ruin/space/bb13/medical) +"UD" = ( +/obj/item/tank/internals/oxygen, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/atmos) +"UF" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/space/bb13/medical) +"UJ" = ( +/obj/structure/closet/crate/bin, +/turf/open/floor/iron/dark/airless, +/area/ruin/space/bb13/service/chapel) +"UQ" = ( +/obj/structure/table, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/engine) +"US" = ( +/obj/effect/spawner/random/structure/grille, +/obj/structure/lattice, +/turf/template_noop, +/area/space/nearstation) +"UW" = ( +/obj/structure/cable, +/obj/item/paper/fluff/ruins/thederelict/vaultraider, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"UX" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway/central) +"UY" = ( +/obj/structure/table, +/obj/item/food/monkeycube, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/no_charge, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical/genetics) +"Vb" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector{ + dir = 1 + }, +/turf/open/floor/engine/airless, +/area/ruin/space/bb13/engineering/atmos) +"Ve" = ( +/turf/template_noop, +/area/ruin/space/bb13/security) +"Vs" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"Vw" = ( +/obj/structure/grille/broken, +/obj/item/shard, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/research/toxins) +"VN" = ( +/turf/closed/indestructible/riveted{ + color = "#FF8888" + }, +/area/ruin/space/bb13/engineering/vault) +"VQ" = ( +/obj/structure/table, +/obj/item/stock_parts/matter_bin, +/obj/item/pai_card, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research) +"VR" = ( +/turf/template_noop, +/area/ruin/space/bb13/hallway/central) +"VT" = ( +/obj/structure/lattice, +/obj/item/stack/cable_coil/five, +/turf/template_noop, +/area/space/nearstation) +"VU" = ( +/obj/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/bridge) +"Wa" = ( +/obj/structure/lattice, +/obj/item/shard/plasma, +/turf/template_noop, +/area/ruin/space/bb13/engineering/atmos) +"Wd" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/bb13/bridge) +"Wg" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/n_solars_control) +"Wh" = ( +/obj/structure/table, +/obj/item/stock_parts/matter_bin, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research) +"Wi" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"Wj" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/botany) +"Wl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/apc/no_charge, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"Wn" = ( +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/medical) +"Wo" = ( +/obj/structure/table_frame, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/medical) +"Ws" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/table_frame, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"WA" = ( +/obj/structure/holosign/barrier, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway/central) +"WC" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/airless, +/area/ruin/space/bb13/service/chapel) +"WE" = ( +/obj/machinery/power/solar{ + id = "derelictsolar"; + name = "Derelict Solar Array" + }, +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/space/bb13/engineering/n_solars_control) +"WF" = ( +/obj/machinery/computer/vaultcontroller, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/sec_eng) +"WH" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"WI" = ( +/obj/structure/frame/machine, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"WN" = ( +/obj/machinery/door/airlock/security, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"WQ" = ( +/obj/machinery/light/small/directional/north, +/turf/template_noop, +/area/ruin/space/bb13/engineering/engine) +"WS" = ( +/turf/template_noop, +/area/ruin/space/bb13/service/kitchen) +"WT" = ( +/obj/structure/table, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/kitchen) +"WY" = ( +/obj/structure/table, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/medical) +"WZ" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"Xd" = ( +/obj/structure/lattice, +/obj/structure/grille/broken, +/obj/item/shard, +/obj/item/shard, +/turf/template_noop, +/area/ruin/space/bb13/service/chapel) +"Xh" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/frame/machine/secured, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"Xn" = ( +/obj/structure/closet/crate/coffin, +/obj/machinery/door/window/right/directional/north, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service/chapel) +"Xu" = ( +/obj/structure/table_frame, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"Xw" = ( +/obj/structure/chair/stool/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service) +"Xz" = ( +/obj/structure/frame/machine, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/medical) +"XG" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/atmos) +"XL" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/bridge) +"XR" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/bb13/engineering/n_solars_control) +"XS" = ( +/obj/machinery/power/tracker, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/s_solars_control) +"Yi" = ( +/obj/structure/table_frame, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research) +"Ym" = ( +/obj/structure/closet/crate, +/obj/item/clothing/head/rasta, +/obj/item/clothing/head/waldo, +/obj/item/clothing/head/costume/bearpelt, +/obj/item/clothing/head/utility/bomb_hood, +/obj/item/clothing/head/costume/bunnyhead, +/obj/item/clothing/head/costume/cardborg, +/obj/item/clothing/head/cone, +/obj/item/clothing/head/costume/festive, +/obj/item/clothing/head/helmet/toggleable/riot, +/obj/item/clothing/head/helmet/sec, +/obj/item/clothing/head/costume/jester, +/obj/item/clothing/head/chaplain/nun_hood, +/obj/item/clothing/head/costume/papersack, +/obj/item/clothing/head/costume/rabbitears, +/obj/item/clothing/head/costume/snowman, +/obj/item/clothing/head/costume/sombrero/green, +/obj/item/clothing/head/wig, +/obj/item/clothing/head/wizard/fake, +/obj/item/clothing/head/wizard/santa, +/obj/item/clothing/head/costume/xenos, +/turf/open/floor/circuit/red/airless, +/area/ruin/space/bb13/engineering/vault) +"Yq" = ( +/obj/structure/frame/machine/secured, +/obj/structure/cable, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/engineering/engine) +"Yv" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/space/bb13/engineering/sec_eng) +"YF" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"YN" = ( +/obj/structure/table, +/obj/item/stack/sheet/iron/five, +/turf/open/floor/wood/airless, +/area/ruin/space/bb13/bridge) +"YO" = ( +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/obj/item/stack/sheet/glass, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/hallway/central) +"YZ" = ( +/obj/item/tank/internals/plasma/empty, +/obj/structure/lattice, +/turf/template_noop, +/area/space/nearstation) +"Za" = ( +/obj/item/clothing/suit/space/eva, +/obj/item/storage/toolbox/syndicate, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/engineering/n_solars_control) +"Zd" = ( +/obj/structure/girder/reinforced, +/obj/structure/lattice, +/turf/template_noop, +/area/space/nearstation) +"Ze" = ( +/obj/machinery/iv_drip, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/medical) +"Zh" = ( +/obj/structure/table, +/obj/effect/spawner/random/maintenance/four, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/research) +"Zk" = ( +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/hallway) +"Zo" = ( +/obj/machinery/vending/dinnerware, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/service/kitchen) +"Zv" = ( +/obj/structure/table, +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/service) +"Zw" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector{ + dir = 8 + }, +/turf/open/floor/engine/airless, +/area/ruin/space/bb13/engineering/atmos) +"Zy" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating/airless, +/area/ruin/space/bb13/research/toxins) +"Zz" = ( +/turf/open/floor/wood/airless, +/area/ruin/space/bb13/bridge) +"ZB" = ( +/obj/structure/lattice, +/obj/structure/table_frame, +/turf/template_noop, +/area/ruin/space/bb13/service/kitchen) +"ZC" = ( +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/obj/item/stack/sheet/iron/five, +/turf/open/floor/iron/airless, +/area/ruin/space/bb13/security) +"ZN" = ( +/obj/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/wood/airless, +/area/ruin/space/bb13/bridge) +"ZW" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/space/bb13/engineering/atmos) +"ZY" = ( +/obj/structure/table/wood, +/obj/item/book/bible, +/turf/open/floor/wood/airless, +/area/ruin/space/bb13/service/chapel) + +(1,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(2,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +US +US +US +US +US +US +US +US +US +US +US +US +US +US +US +yZ +yZ +yZ +yZ +yZ +yZ +"} +(3,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +US +VT +yZ +yZ +yZ +yZ +yZ +yZ +yZ +lG +yZ +yZ +yZ +yZ +US +yZ +yZ +yZ +yZ +yZ +yZ +"} +(4,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +US +yZ +ri +Go +xu +yZ +vo +Go +xu +HZ +AI +Go +xu +yZ +US +yZ +yZ +yZ +yZ +yZ +yZ +"} +(5,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +US +yZ +vo +Go +ri +yZ +vo +Go +xu +yZ +vo +Go +ri +yZ +US +yZ +yZ +yZ +yZ +yZ +yZ +"} +(6,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +US +yZ +vo +Go +vo +yZ +vo +Go +vo +yZ +vo +Go +vo +yZ +US +yZ +yZ +yZ +yZ +yZ +yZ +"} +(7,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +US +yZ +vo +Go +vo +yZ +vo +Go +vo +yZ +ri +Go +vo +yZ +US +yZ +yZ +yZ +yZ +yZ +yZ +"} +(8,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +HZ +yZ +SE +SE +nK +nK +SE +yZ +HZ +yZ +xu +Go +vo +yZ +xu +Go +vo +yZ +ri +Go +vo +yZ +US +US +yZ +yZ +yZ +yZ +yZ +"} +(9,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +nK +SQ +bk +sX +iF +oM +iF +yZ +yZ +Go +yZ +yZ +yZ +Go +yZ +yZ +yZ +Go +yZ +yZ +yZ +US +yZ +yZ +yZ +yZ +yZ +"} +(10,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +HZ +yZ +Uv +xu +iD +xu +xu +xu +xu +Go +Go +Go +Go +Go +Go +Go +Go +Go +Go +Go +Go +XS +yZ +US +yZ +yZ +yZ +yZ +yZ +"} +(11,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +Uv +nw +vl +ri +iF +oM +oM +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +US +yZ +yZ +yZ +yZ +yZ +"} +(12,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +HZ +al +SE +Kx +SE +SE +yZ +yZ +yZ +yZ +yZ +VT +HZ +US +US +US +US +US +US +US +US +US +US +yZ +yZ +yZ +yZ +yZ +"} +(13,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +zZ +yZ +yZ +yZ +KV +NA +Bd +vd +Ru +Ru +vd +rL +vd +vd +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(14,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +zZ +yZ +yZ +ii +wq +NA +Qx +sD +xT +fH +vd +jz +xT +sD +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(15,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +uj +lx +uj +AM +KH +Xd +KH +uj +Aw +VR +vd +ku +mG +rL +mG +mG +sD +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(16,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +uj +Tp +kG +fR +Mk +sE +Kl +KH +iq +iq +vd +sD +Mn +vd +xE +vd +vd +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(17,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +uj +uj +uj +IP +aZ +Mk +Kl +sE +KH +iq +iq +Ru +rk +rL +mG +yy +WI +Ru +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(18,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +lx +ar +vB +fR +fR +fR +RM +rP +kF +GR +wq +Ts +yy +yy +Ru +yy +WI +sD +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(19,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +uj +TR +uj +dt +qC +AT +AT +WC +KH +GR +Qx +vd +ha +wT +wT +Ru +Fx +vd +nN +yZ +yZ +yZ +nN +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(20,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +bf +tD +bf +bf +UF +lx +SP +uj +qO +tX +Kl +WC +ie +KH +xw +YF +Ru +vd +Mn +vd +Mn +vd +vd +yZ +HZ +yZ +HZ +HZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(21,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +vG +UF +UB +UB +UB +uj +vB +uj +uj +vB +uj +sE +sE +sE +wq +yE +sD +mG +mG +Ru +ku +mG +aX +Wj +TV +Wj +Wj +wi +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(22,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +bf +vG +vG +bf +bf +UF +Qu +Wn +Wn +uj +hM +fR +fR +kG +ps +ps +uj +Qx +xw +yE +sD +no +PX +Ru +km +DH +aX +fT +dY +vq +vq +TV +HZ +nN +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(23,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +UF +Pj +RI +RI +bf +en +UF +UF +Qu +jX +hM +TI +Bp +fR +Xn +ps +uj +yE +xw +Vs +vd +sD +Ru +vd +sD +vd +Hc +yv +CF +dY +dY +TV +HZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(24,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +UF +lY +dy +Wn +Al +Qu +Qu +UF +Qu +uj +wa +ZY +Bp +UJ +qS +ps +uj +VR +dw +vd +sD +ha +eK +eK +sj +tI +gp +AO +CF +vq +vq +Wj +yZ +yZ +nN +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(25,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +HZ +yZ +yZ +yZ +yZ +yZ +yZ +bf +Ze +Wn +Pg +bf +Qu +Tz +Tz +Tz +bf +vG +bf +vG +bf +KV +UX +KV +TL +ih +vd +Hf +yy +yy +yy +yy +wv +aX +Rg +CF +CF +Tw +DN +iz +HZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(26,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +zZ +HZ +qV +HR +NK +tN +tN +NK +HR +bf +bf +nE +bf +bf +bf +bf +UF +UF +UF +iO +iO +SH +bf +su +mj +Am +ih +ih +sD +mG +yy +yy +yy +yy +Ee +eb +QE +ws +CF +bj +Wj +nN +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(27,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +HZ +qV +Kd +Jd +nt +fM +fa +HR +qG +dy +dT +Wl +Pg +bf +Xz +gX +ho +dy +UF +Wn +dy +bf +Am +Qx +NB +wq +vd +sD +xE +vd +Ot +km +pr +bN +aX +hS +aX +gp +aX +Wj +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(28,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +zZ +qV +rq +cq +Or +xo +rF +ei +Wn +Wn +RI +Dl +dy +Wn +dy +Gs +Nm +dT +iO +SH +iO +bf +TF +NM +vd +PP +vd +rL +mG +Ru +mG +mG +WT +RG +lZ +lZ +Zo +nF +vz +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(29,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +Zd +yZ +yZ +yZ +yZ +yZ +yZ +yZ +NK +Kd +ru +xo +fr +rD +re +TG +Wo +WY +Wn +jp +vG +zU +Ws +FP +dy +Wn +mT +dT +bf +wq +dw +rL +rL +pe +Sq +Tt +QR +cg +mG +ZB +ns +Nh +pb +ve +pb +pr +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(30,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +HZ +yZ +HZ +yZ +yZ +yZ +yZ +ss +Kd +sg +ss +qV +MO +ei +dy +mT +Ja +fY +TG +Nk +Dl +jp +jp +jp +TG +jp +Dl +ax +Qx +dw +vd +lp +rL +uI +dZ +rL +rL +Ee +jT +ns +WT +WT +ns +MW +ve +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(31,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +Zd +yZ +HZ +yZ +yZ +yZ +yZ +ss +qV +cq +tj +ad +UY +HR +it +dy +dy +dy +pK +bf +Pg +dy +dy +mT +lk +Ov +WZ +bf +Qx +xw +vd +Pz +yy +Pb +Zv +uI +rL +Ru +pr +bb +ci +zg +zg +MU +pr +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(32,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +HZ +pI +bw +bw +ou +ou +ou +pM +pM +pM +pM +pM +pM +pM +Rs +GX +md +Rs +Rs +vC +bf +UF +vG +Wn +bf +bf +bf +bf +FR +ae +vd +Nd +yy +Xw +Xw +Ff +Wi +JJ +vz +ve +RG +lZ +fy +ve +WS +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(33,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +ge +Yv +Yv +xN +qy +fe +Rs +Xu +oR +Oc +lo +Rs +vA +kh +Ju +kh +kh +kh +Rs +Dh +Dh +GX +Dh +Dh +Rs +yZ +nr +iq +ih +vd +vd +Ru +Ru +Ru +vd +vd +vd +pr +MU +kl +sv +Jj +Lx +ns +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(34,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +ou +Uh +Uh +qy +qy +Uh +Rs +mh +hZ +hZ +Lk +Rs +kh +Ko +Ko +vA +WH +GX +GX +Rs +Cx +Cx +Rs +Cx +Rs +yZ +nr +YF +GR +nr +YZ +yZ +yZ +yZ +yZ +yZ +yZ +ve +ve +pr +vz +pr +vz +pr +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(35,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +ou +gN +eS +eS +uz +eS +Rs +Mm +NZ +hZ +oq +FJ +WH +WH +GX +ni +Rs +kh +hO +hZ +LC +UQ +Rs +Dh +wk +yZ +Rr +uU +ih +KV +yZ +Ui +xm +xm +Ui +yZ +YZ +yZ +yZ +yZ +yZ +Zd +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(36,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +ou +eS +qy +qy +eS +gN +Rs +Op +Lk +oq +Pl +Rs +kh +vA +GX +vA +GX +kh +kh +WH +GX +Ih +Rs +Dh +xA +yZ +Rr +uU +Qx +nr +yZ +HU +Du +BV +Ui +xm +xm +Ui +xm +xm +Ui +Ui +kM +xm +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(37,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +kL +kL +kL +kL +kL +kL +kL +eS +Yv +Yv +Yv +Yv +Rs +Rs +Rs +Ji +Rs +Rs +Pi +tW +Rs +EY +Rs +tW +tW +tW +WH +Ko +Rs +vA +hO +yZ +nr +uU +oi +ra +yZ +HU +kM +Pc +wh +Pc +Pc +Hv +xm +Ig +aI +Gz +aI +Ui +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(38,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +kL +kL +VN +VN +VN +VN +VN +kL +PA +PA +Yv +Ma +PA +Rs +vA +vA +oq +Lk +tW +gU +vA +GX +vA +jU +RU +ry +tW +kh +di +Mh +vA +Rs +nN +Rr +uU +GR +nr +yZ +Ui +Ui +Ui +Ui +uB +CL +CL +oQ +CL +kM +kM +CL +kM +Zd +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(39,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +kL +VN +VN +zj +iQ +AN +VN +kL +Uh +Uh +qy +eS +Uh +Rs +Lk +oq +Ko +vA +tW +BP +MY +Dh +GX +Dh +vA +vA +ag +kh +kh +hZ +Cx +Rs +yZ +Rr +Ku +WA +Rr +px +AE +Pc +kM +wh +CL +kM +CL +qa +CL +CL +CL +Ve +Ve +yZ +HZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(40,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +kL +VN +us +fl +fl +fl +VN +kL +Uh +Uh +PV +eS +Bk +Rs +Lk +GX +Rs +Rs +Rs +vA +Dh +vA +vA +vA +Dh +vA +Rs +Rs +Rs +Ko +bs +Rs +nr +nr +Qx +wq +nr +nN +AE +Bn +ST +xm +CL +Pc +CL +Ui +aI +aI +ZC +pS +Ui +yZ +Zd +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(41,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +kL +VN +bB +fl +Ym +BB +Ms +Ms +Gt +UW +qT +Yv +Ec +wW +FM +Jw +ni +vA +ni +vA +GX +vA +JT +vA +GX +vA +EY +vA +ni +kh +WH +rS +GR +GR +mg +ih +nr +Rr +Ui +Ui +xm +Ui +xm +Pc +Pc +Ui +Ui +kM +kM +Ui +Ui +Ui +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(42,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +kL +VN +Lf +fl +fl +xL +VN +kL +WF +eS +gN +eS +eS +Rs +WQ +Dh +Rs +Rs +Rs +vA +Dh +vA +vA +vA +Dh +GX +Rs +Rs +Rs +yg +HT +Rs +nr +nr +iq +ih +dw +GR +pW +IM +Ur +Ur +WN +eC +Pc +Ds +Co +CL +kM +CL +pj +Ui +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(43,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +kL +VN +VN +jo +uq +OT +VN +kL +eS +eS +qy +He +eS +xA +GX +Dh +oq +Lk +Pi +GX +cd +Dh +GX +yV +RU +vA +Pi +oJ +zF +Ha +sG +Oz +cM +pU +yE +Qx +nr +nr +xm +CL +Pc +ox +Ui +kM +JR +Ui +Ui +NO +kM +vS +vS +Ui +HZ +Zd +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(44,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +kL +kL +VN +VN +VN +VN +VN +kL +Yv +Yv +gN +ou +gN +xA +GX +Dh +oq +Lk +zG +kU +vA +RU +vA +vA +vA +BP +tW +oJ +nH +QG +sF +aH +qB +Ro +VR +VR +VR +yZ +xm +sd +kM +Pc +jj +Pc +bK +Ub +Ui +GC +vS +IF +kM +kM +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(45,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +kL +kL +kL +Uc +oF +kL +Uc +Tl +eS +Yv +eS +Sm +Rs +Rs +Rs +St +Rs +Rs +tW +tW +Rs +vA +Cx +Pi +zG +Rs +Rs +bR +Rs +GT +Rs +yZ +KV +wB +UX +VR +yZ +xm +pL +Pc +CL +Ui +DV +is +Pc +kM +xy +vS +vS +dz +kM +Zd +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(46,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +Zd +Yv +NL +eS +eS +eS +PZ +Rs +nY +nY +oq +CK +Rs +Lk +Lk +Cx +vA +Rs +Lk +Lk +Rs +OF +Hl +sx +Fe +Rs +yZ +nr +VR +iJ +nr +yZ +Ui +oZ +Fs +MR +Ui +qi +rQ +Kk +Ui +Ui +kM +kM +Ui +xm +HZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(47,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +HZ +HZ +ou +uR +eS +eS +eS +BU +Rs +aJ +aJ +oq +oq +rS +oq +Lk +Cx +vA +Rs +oq +Cw +wV +nH +Cw +xI +Yq +Rs +yZ +VR +VR +VR +Rr +nr +Wd +Wd +NT +NT +Wd +NT +NT +Wd +Wd +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(48,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +Zd +yZ +qE +ou +ou +pO +TW +Bx +ou +Rs +LQ +LQ +NZ +DT +Rs +vA +vA +Ko +oq +ux +EN +iT +Rs +jN +GX +sx +Fe +Rs +yZ +Rr +VR +ae +ae +dw +AZ +Gw +wK +AZ +Dc +Tv +Rl +Rl +XL +XL +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(49,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +qE +yZ +ou +ou +ou +ou +ou +Rs +kc +kc +NZ +KZ +Rs +qc +vA +vA +oq +Lk +vA +vA +Rs +jN +NZ +sx +GK +Rs +yZ +nr +Qx +qA +YF +KV +Wd +Gw +AZ +Tv +Tv +Tv +Tv +oI +zp +gB +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(50,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +HZ +HZ +qE +qE +qE +yZ +hH +fE +Oj +HZ +ii +Rs +Rs +Rs +Rs +Rs +GX +GX +Rs +Rs +rS +Rs +Rs +Rs +Rs +Rs +Rs +Rs +Rs +Rs +yZ +Xh +yE +TL +iq +iY +Wd +lz +Zz +gK +Zz +wK +Tv +VU +hv +XL +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(51,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +qE +yZ +yZ +yZ +yZ +yZ +wf +fE +jA +yZ +yZ +aj +ZW +SD +yh +nq +nq +XG +sI +sI +Uu +II +ug +sI +nq +nq +yh +eI +Wa +Ks +yZ +gM +wq +ih +iq +By +RB +Zz +Jm +ZN +dV +AZ +AZ +AL +hv +gB +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(52,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +qE +yZ +za +hH +jA +HZ +Oj +fE +jA +yZ +yZ +Ks +hc +FY +yh +nq +nq +sI +ZW +sI +sI +nq +nq +ug +bQ +nq +PQ +Vb +hc +Ks +yZ +nr +YF +ih +iq +mF +RB +jG +ZN +YN +Zz +RB +AZ +Bc +jm +XL +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(53,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +qE +yZ +WE +fE +jA +yZ +Oj +fE +jA +yZ +yZ +Ks +ZW +ZW +ZW +nq +nq +nq +nq +nq +ZW +bQ +nq +ug +ug +ug +Ks +ZW +Ks +Ks +yZ +Rr +YF +ih +iq +YO +Wd +LR +TN +TN +Gm +wK +lD +lD +gB +gB +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(54,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +qE +yZ +WE +fE +ui +yZ +jA +fE +jA +yZ +yZ +Ks +hc +SD +yh +ug +ug +sI +sI +BW +sI +sI +sI +ug +ug +ug +yh +qx +ZW +Ks +yZ +Rr +yE +wq +sf +KV +Wd +NT +RB +Wd +RB +Wd +RB +NT +NT +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(55,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +qE +yZ +hH +fE +WE +yZ +jA +fE +jA +yZ +yZ +aj +ZW +rE +yh +ug +ug +bQ +ZW +sI +nq +Ml +Ml +CP +ug +ug +yh +Vb +hc +ZW +yZ +KV +yE +Am +ih +gb +iZ +dR +Lc +lE +Yi +Fy +VQ +Wh +zr +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(56,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +qE +HZ +Oj +fE +jA +yZ +jA +fE +Oj +yZ +yZ +Ks +mf +Ks +Ks +ug +ug +sI +sI +bQ +nq +Ml +Ml +CP +ug +ug +Ks +Ks +Ks +Ks +yZ +nr +BQ +YF +wq +yE +iZ +Lc +lE +yz +QA +id +Lc +Yi +iZ +yZ +HZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(57,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +qE +yZ +ui +fE +jA +yZ +Oj +fE +Oj +HZ +yZ +gF +ZW +SD +yh +Ml +UD +Ml +ug +ug +ZW +ug +ug +sI +nq +sI +Mc +qx +hc +Ks +em +em +Ea +of +Aw +ih +lH +yw +id +MQ +yw +Qg +Lc +Yi +zr +yZ +yZ +Rk +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(58,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +HZ +yZ +ui +fE +jA +yZ +jA +fE +jA +yZ +Zd +Ks +hc +FY +yh +Ml +Ml +Ml +Ml +Ml +sI +ug +ug +bQ +ZW +nq +yh +CM +ZW +Ks +An +FX +Ba +Ea +ih +iq +iZ +iZ +Lr +iZ +Ly +Lc +Lr +Zh +lE +yZ +HZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(59,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +qE +yZ +ui +fE +Oj +yZ +jA +fE +jA +yZ +yZ +Ks +Ks +Ks +Ks +ug +Ml +Ml +Ml +QS +nq +nq +nq +sI +uC +sI +Ks +ZW +Ks +Ks +kB +Zk +FX +IY +ih +iq +zf +Lc +Lc +Lc +yw +yz +yz +lE +Lr +yZ +yZ +HZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(60,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +qE +qE +yZ +ui +fE +Oj +yZ +Oj +fE +EM +yZ +yZ +ii +rA +Za +XR +EM +Ks +yh +yh +Ks +sI +mf +Mc +yh +aj +bQ +bQ +yZ +Zd +of +iR +EO +iS +of +iq +iq +iZ +oO +lE +oO +Ak +xQ +yz +lE +iZ +HZ +yZ +yZ +HZ +Rk +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(61,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +qE +yZ +yZ +yZ +fE +HZ +yZ +yZ +fE +yZ +yZ +FU +FU +Wg +fW +dB +iM +Ks +Zw +jg +mf +uo +Ks +Zw +jg +ZW +HZ +yZ +Zd +yZ +of +Ea +Ea +of +of +IE +IE +iZ +nb +Lc +kQ +Lc +HV +Ak +GY +Lr +yZ +Rk +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(62,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +qE +yZ +Iq +fE +fE +fE +fE +fE +fE +fE +fE +EM +EM +EM +EM +vj +cc +Ks +ZW +hc +mf +fj +mf +hc +hc +Ks +yZ +yZ +yZ +yZ +KV +Am +Am +Am +Am +YF +Am +iZ +iZ +iZ +Lr +Lr +iZ +AA +iZ +iZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(63,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +qE +yZ +yZ +yZ +fE +yZ +yZ +yZ +fE +yZ +yZ +Wg +FU +Wg +AK +jv +ds +aj +aj +Ks +Ks +uo +Ks +Ks +Ks +Ks +yZ +HZ +yZ +yZ +KV +Am +wq +YF +YF +YF +Am +KV +yZ +HZ +yZ +yZ +Zy +JI +Zy +yZ +nN +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(64,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +qE +HZ +yZ +ui +fE +WE +yZ +ui +fE +wf +yZ +qE +yZ +rA +rA +hH +GI +HZ +yZ +yZ +yZ +zZ +yZ +yZ +yZ +yZ +yZ +yZ +nr +nr +KV +Qb +wq +nr +KV +Am +KV +KV +yZ +HZ +yZ +yZ +Zy +yR +Vw +yZ +nN +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(65,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +HZ +HZ +ui +fE +ui +yZ +ui +fE +WE +yZ +qE +yZ +US +yZ +vs +zZ +zZ +zZ +zZ +zZ +zZ +zZ +yZ +zZ +yZ +US +yZ +nr +Am +Am +wq +Am +Rr +wq +wq +KV +yZ +yZ +HZ +yZ +yZ +Zy +nc +Zy +HZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(66,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +qE +yZ +hH +fE +Oj +yZ +jA +fE +ui +HZ +qE +yZ +US +yZ +zZ +zZ +zZ +zZ +zZ +zZ +zZ +yZ +zZ +zZ +HZ +HZ +yZ +KV +wq +YF +Am +Am +nr +wq +wq +KV +nN +yZ +HZ +yZ +yZ +Vw +yR +Vw +yZ +HZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(67,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +qE +yZ +yZ +yZ +HZ +yZ +jA +fE +Oj +yZ +HZ +yZ +US +yZ +zZ +zZ +zZ +zZ +zZ +zZ +zZ +zZ +yZ +HZ +yZ +nr +Rr +nr +wq +YF +KV +nr +KV +wq +Sx +KV +HZ +HZ +HZ +HZ +HZ +Zy +aQ +Vw +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(68,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +qE +qE +qE +HZ +qE +yZ +jA +fE +Oj +yZ +HZ +yZ +HZ +HZ +zZ +zZ +zZ +zZ +zZ +zZ +zZ +zZ +zZ +zZ +zZ +hC +wq +hC +Am +Am +Rr +mF +Am +wq +wq +UX +yZ +yZ +HZ +yZ +yZ +Vw +JI +Zy +yZ +yZ +HZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(69,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +qE +yZ +ui +fE +jA +yZ +qE +yZ +US +yZ +yZ +zZ +yZ +zZ +zZ +yZ +zZ +zZ +zZ +zZ +yZ +nr +Rr +Rr +hm +hm +KV +mF +wq +By +xp +KV +yZ +nN +HZ +yZ +yZ +Zy +rW +Zy +yZ +yZ +yZ +HZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(70,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +qE +yZ +hH +hH +jA +yZ +qE +yZ +US +yZ +yZ +zZ +zZ +zZ +zZ +zZ +zZ +zZ +yZ +zZ +yZ +US +yZ +KV +KV +KV +KV +KV +fv +KV +KV +KV +yZ +Mz +Ia +Ia +Ia +Mz +Ah +LZ +LZ +Zy +Zy +ME +Vw +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(71,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +qE +yZ +HZ +yZ +yZ +yZ +qE +yZ +US +yZ +yZ +zZ +zZ +zZ +zZ +zZ +zZ +yZ +zZ +zZ +yZ +US +yZ +UX +Am +wq +wq +wq +Am +YF +YF +UX +HZ +Mz +JU +GJ +JU +Mz +rW +nc +Gv +JI +JI +aQ +Vw +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(72,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +qE +qE +qE +qE +qE +HZ +qE +yZ +yZ +yZ +yZ +HZ +HZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +HZ +US +yZ +KV +ck +wq +wq +wq +Am +YF +YF +KV +yZ +Mz +qN +JU +ES +Mz +iV +rW +LZ +Zy +Zy +Zy +Zy +HZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(73,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +US +US +US +US +US +US +US +US +US +US +US +yZ +UX +RF +wq +wq +wq +Am +wq +Sx +KV +HZ +Mz +DU +Gr +aE +Mz +jd +aQ +LZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(74,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +KV +Am +wq +wq +YF +Am +wq +eD +UX +yZ +Mz +ip +JU +iB +Mz +ME +Is +LZ +Jk +Vw +Vw +LZ +aQ +Rk +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(75,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +KV +KV +UX +KV +UX +UX +KV +KV +KV +HZ +Mz +DU +yA +aE +Mz +jd +JN +Jk +jd +ME +aQ +Je +LZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(76,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +LZ +Eo +ME +Mj +jd +aQ +cJ +jd +ME +ME +jd +pE +Vw +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(77,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +LZ +vg +vg +vg +jd +ME +jd +LZ +OO +aQ +jd +SI +Zy +yZ +HZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(78,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +LZ +Jk +Jk +LZ +LZ +tw +NY +Jk +fQ +jd +aQ +Je +LZ +Rk +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(79,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +LZ +tw +NY +LZ +LZ +Zy +Vw +LZ +aQ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(80,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +LZ +LZ +Jk +Jk +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} +(81,1,1) = {" +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +yZ +"} diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/ghostship.dmm b/_maps/RandomRuins/SpaceRuins/nova/ghostship.dmm similarity index 100% rename from _maps/RandomRuins/SpaceRuins/skyrat/ghostship.dmm rename to _maps/RandomRuins/SpaceRuins/nova/ghostship.dmm diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/gorilla.dmm b/_maps/RandomRuins/SpaceRuins/nova/gorilla.dmm similarity index 100% rename from _maps/RandomRuins/SpaceRuins/skyrat/gorilla.dmm rename to _maps/RandomRuins/SpaceRuins/nova/gorilla.dmm diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/luna.dmm b/_maps/RandomRuins/SpaceRuins/nova/luna.dmm similarity index 82% rename from _maps/RandomRuins/SpaceRuins/skyrat/luna.dmm rename to _maps/RandomRuins/SpaceRuins/nova/luna.dmm index 93818fd7d881c6..0ee2685510a779 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/luna.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/luna.dmm @@ -6,12 +6,12 @@ /turf/open/floor/stone{ color = "#03fcf0" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "bp" = ( /turf/open/floor/stone{ color = "#fceb03" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "cG" = ( /obj/structure/railing{ color = "#03fcf0"; @@ -24,13 +24,13 @@ color = "#03fcf0"; initial_gas_mix = "TEMP=2.7" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "cL" = ( /obj/effect/light_emitter, /turf/open/floor/stone{ color = "#fceb03" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "cM" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 4 @@ -39,72 +39,72 @@ color = "#03fcf0"; initial_gas_mix = "TEMP=2.7" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "dC" = ( /obj/structure/flora/bush/grassy, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "dE" = ( /obj/structure/flora/biolumi/lamp/weaklight, /obj/structure/flora/bush/leafy, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "dG" = ( /turf/closed/wall/mineral/iron{ color = "#03fcf0" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "eF" = ( /obj/structure/flora/bush/grassy, /obj/structure/flora/bush/leafy, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "fT" = ( /obj/structure/flora/tree/jungle/small, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "hj" = ( /obj/structure/flora/bush/leafy, /obj/structure/flora/bush/flowers_br, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "hp" = ( /obj/structure/flora/bush/flowers_br, /obj/structure/flora/bush/jungle, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "hN" = ( /obj/structure/flora/biolumi, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "il" = ( /obj/item/food/grown/moonflower, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "iv" = ( /turf/open/floor/stone{ color = "#03fcf0" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "ko" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/stone{ color = "#03fcf0" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "lb" = ( /obj/structure/flora/bush/flowers_br, /obj/structure/flora/bush/leafy, /obj/structure/flora/bush/flowers_pp, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "lh" = ( /obj/structure/flora/bush/ferny, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "lB" = ( /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "lD" = ( /turf/template_noop, /area/space) @@ -113,24 +113,24 @@ color = "#03fcf0"; initial_gas_mix = "TEMP=2.7" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "lO" = ( /obj/structure/flora/bush/flowers_pp, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "mN" = ( /obj/structure/flora/rock, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "nx" = ( /obj/structure/flora/bush/lavendergrass, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "oj" = ( /obj/structure/flora/bush/leafy, /obj/structure/flora/bush/flowers_pp, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "oT" = ( /obj/structure/railing{ color = "#03fcf0"; @@ -143,33 +143,33 @@ color = "#03fcf0"; initial_gas_mix = "TEMP=2.7" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "pf" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /turf/open/floor/stone{ color = "#03fcf0" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "qD" = ( /obj/structure/flora/bush/flowers_pp, /obj/structure/flora/bush/flowers_br, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "qR" = ( /obj/structure/flora/biolumi/mine/weaklight, /obj/structure/flora/bush/flowers_br, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "sY" = ( /obj/structure/flora/bush/sparsegrass, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "tn" = ( /obj/structure/flora/bush/leafy, /obj/structure/flora/bush/grassy, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "tt" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 1 @@ -178,7 +178,7 @@ color = "#03fcf0"; initial_gas_mix = "TEMP=2.7" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "tQ" = ( /turf/open/misc/asteroid/airless, /area/ruin/unpowered) @@ -186,32 +186,32 @@ /obj/structure/flora/biolumi/flower/weaklight, /obj/structure/flora/bush/grassy, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "uM" = ( /obj/structure/flora/bush/flowers_br, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "vn" = ( /obj/structure/flora/bush/jungle, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "vp" = ( /obj/structure/flora/bush/flowers_yw, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "wa" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/stone, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "wL" = ( /obj/structure/flora/bush/jungle/a/style_3, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "wS" = ( /obj/effect/light_emitter, /obj/effect/decal/cleanable/dirt, /turf/open/floor/stone, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "wY" = ( /obj/structure/railing{ color = "#03fcf0" @@ -221,7 +221,7 @@ color = "#03fcf0"; initial_gas_mix = "TEMP=2.7" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "xg" = ( /obj/structure/railing{ color = "#03fcf0"; @@ -234,7 +234,7 @@ color = "#03fcf0"; initial_gas_mix = "TEMP=2.7" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "xC" = ( /obj/structure/railing{ color = "#03fcf0"; @@ -250,7 +250,7 @@ color = "#03fcf0"; initial_gas_mix = "TEMP=2.7" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "ye" = ( /obj/machinery/door/airlock/hatch{ color = "#03fcf0" @@ -261,28 +261,28 @@ /turf/open/floor/stone{ color = "#03fcf0" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "yg" = ( /turf/open/floor/stone, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "yh" = ( /obj/structure/flora/bush/flowers_pp, /obj/structure/flora/bush/grassy, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "yU" = ( /obj/structure/flora/biolumi/lamp/weaklight, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "zq" = ( /obj/structure/flora/bush/flowers_br, /obj/structure/flora/bush/leafy, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "As" = ( /obj/structure/flora/rock/pile, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "Bi" = ( /obj/effect/turf_decal/siding/thinplating/corner{ dir = 4 @@ -291,12 +291,12 @@ color = "#03fcf0"; initial_gas_mix = "TEMP=2.7" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "BP" = ( /obj/structure/flora/bush/flowers_br, /obj/structure/flora/bush/flowers_pp, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "Cx" = ( /obj/structure/mineral_door/iron{ color = "#03fcf0" @@ -305,29 +305,29 @@ /turf/open/floor/stone{ color = "#03fcf0" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "CW" = ( /obj/structure/flora/bush/fullgrass, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "CZ" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/stone{ color = "#fc8403" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "Da" = ( /obj/effect/light_emitter, /obj/item/melee/sabre/luna, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "Fo" = ( /turf/closed/mineral/random, /area/ruin/unpowered) "Fv" = ( /obj/structure/flora/grass/jungle, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "IA" = ( /mob/living/basic/carp{ dir = 8 @@ -339,7 +339,7 @@ /turf/open/floor/stone{ color = "#fceb03" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "Lz" = ( /obj/structure/railing{ color = "#03fcf0"; @@ -355,11 +355,11 @@ color = "#03fcf0"; initial_gas_mix = "TEMP=2.7" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "Mk" = ( /obj/structure/flora/biolumi/mine/weaklight, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "MG" = ( /obj/machinery/quantumpad{ desc = "A bluespace quantum-linked telepad used for teleporting objects to other quantum pads. This one seems crudely modified - though whatever effects it was meant to have seem inert. The modifications look frail..."; @@ -367,7 +367,7 @@ }, /obj/effect/turf_decal/tile/dark_red/fourcorners, /turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "MU" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -375,38 +375,38 @@ /turf/open/floor/stone{ color = "#03fcf0" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "Ng" = ( /obj/effect/decal/cleanable/dirt, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "OR" = ( /obj/structure/flora/bush/flowers_br, /obj/structure/flora/bush/grassy, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "PJ" = ( /turf/open/floor/stone{ color = "#fc8403" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "QL" = ( /obj/structure/flora/bush/flowers_br, /obj/structure/flora/bush/flowers_yw, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "Rp" = ( /obj/effect/light_emitter, /turf/open/floor/stone{ color = "#03fcf0"; initial_gas_mix = "TEMP=2.7" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "RZ" = ( /obj/structure/flora/bush/grassy, /obj/structure/flora/bush/flowers_br, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "Sj" = ( /obj/structure/railing{ color = "#03fcf0" @@ -417,21 +417,21 @@ color = "#03fcf0"; initial_gas_mix = "TEMP=2.7" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "Sl" = ( /obj/structure/flora/bush/stalky, /obj/structure/flora/bush/flowers_yw, /obj/structure/flora/bush/flowers_pp, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "Tj" = ( /obj/structure/flora/bush/jungle/b, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "Tt" = ( /obj/structure/flora/biolumi/flower/weaklight, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "TH" = ( /mob/living/basic/carp, /turf/open/misc/asteroid/airless, @@ -439,11 +439,11 @@ "Vs" = ( /obj/structure/flora/bush/leafy, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "Wf" = ( /obj/structure/flora/tree/jungle, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "Wn" = ( /obj/structure/window/fulltile{ color = "#03fcf0" @@ -451,18 +451,18 @@ /turf/open/floor/plating{ color = "#03fcf0" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "YT" = ( /obj/structure/flora/biolumi/flower/weaklight, /obj/structure/flora/bush/flowers_br, /turf/open/misc/grass, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) "ZW" = ( /obj/effect/light_emitter, /turf/open/floor/stone{ color = "#03fcf0" }, -/area/ruin/space/has_grav/powered/skyrat/luna) +/area/ruin/space/has_grav/powered/nova/luna) (1,1,1) = {" lD diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/piratefort.dmm b/_maps/RandomRuins/SpaceRuins/nova/piratefort.dmm similarity index 100% rename from _maps/RandomRuins/SpaceRuins/skyrat/piratefort.dmm rename to _maps/RandomRuins/SpaceRuins/nova/piratefort.dmm diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon.dmm b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon.dmm similarity index 100% rename from _maps/RandomRuins/SpaceRuins/skyrat/port_tarkon.dmm rename to _maps/RandomRuins/SpaceRuins/nova/port_tarkon.dmm diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon2.dmm b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon2.dmm similarity index 99% rename from _maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon2.dmm rename to _maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon2.dmm index e6c3a96f8e0e8e..38bd228c60d607 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon2.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon2.dmm @@ -107,7 +107,7 @@ /turf/open/misc/asteroid/airless, /area/solars/tarkon) "aA" = ( -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/dirt, /turf/open/floor/cult, /area/ruin/space/has_grav/port_tarkon/observ) @@ -657,7 +657,7 @@ /obj/structure/chair/sofa/corp{ dir = 8 }, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/has_grav/port_tarkon/observ) @@ -1300,8 +1300,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/cargo/tech/skyrat/utility, -/obj/item/clothing/under/rank/cargo/tech/skyrat/gorka, +/obj/item/clothing/under/rank/cargo/tech/nova/utility, +/obj/item/clothing/under/rank/cargo/tech/nova/gorka, /obj/item/storage/backpack/duffelbag/explorer, /obj/item/storage/backpack/explorer, /obj/item/storage/backpack/satchel/explorer, @@ -2178,8 +2178,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/medical/doctor/skyrat/utility, -/obj/item/clothing/under/rank/medical/doctor/skyrat/utility, +/obj/item/clothing/under/rank/medical/doctor/nova/utility, +/obj/item/clothing/under/rank/medical/doctor/nova/utility, /obj/item/storage/backpack/duffelbag/med, /obj/item/storage/backpack/medic, /obj/item/storage/backpack/satchel/med, @@ -3096,8 +3096,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/misc/skyrat/utility, -/obj/item/clothing/under/misc/skyrat/utility, +/obj/item/clothing/under/misc/nova/utility, +/obj/item/clothing/under/misc/nova/utility, /obj/item/storage/backpack, /obj/item/storage/backpack/duffelbag, /obj/item/storage/backpack/satchel, @@ -3578,8 +3578,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/misc/skyrat/utility, -/obj/item/clothing/under/misc/skyrat/utility, +/obj/item/clothing/under/misc/nova/utility, +/obj/item/clothing/under/misc/nova/utility, /obj/item/storage/backpack, /obj/item/storage/backpack/duffelbag, /obj/item/storage/backpack/satchel, @@ -4445,7 +4445,7 @@ /turf/open/floor/iron, /area/ruin/space/has_grav/port_tarkon/trauma) "yT" = ( -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/has_grav/port_tarkon/porthall) @@ -4646,7 +4646,7 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/blood, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/has_grav/port_tarkon/porthall) @@ -6276,8 +6276,8 @@ "Jl" = ( /obj/structure/closet, /obj/effect/decal/cleanable/dirt, -/obj/item/clothing/under/rank/security/skyrat/utility/redsec, -/obj/item/clothing/under/rank/security/skyrat/utility, +/obj/item/clothing/under/rank/security/nova/utility/redsec, +/obj/item/clothing/under/rank/security/nova/utility, /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, @@ -6809,8 +6809,8 @@ "LA" = ( /obj/structure/closet, /obj/effect/decal/cleanable/dirt, -/obj/item/clothing/under/rank/rnd/scientist/skyrat/utility, -/obj/item/clothing/under/rank/rnd/roboticist/skyrat/sleek, +/obj/item/clothing/under/rank/rnd/scientist/nova/utility, +/obj/item/clothing/under/rank/rnd/roboticist/nova/sleek, /obj/item/clothing/shoes/jackboots, /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, @@ -7234,7 +7234,7 @@ "NZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/has_grav/port_tarkon/observ) @@ -7615,7 +7615,6 @@ "Qy" = ( /obj/machinery/firealarm/directional/west, /obj/machinery/suit_storage_unit/industrial/hauler, -/obj/machinery/suit_storage_unit/industrial/hauler, /obj/effect/turf_decal/tile/brown/half{ dir = 8 }, @@ -8114,8 +8113,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/engineering/engineer/skyrat/utility, -/obj/item/clothing/under/rank/engineering/engineer/skyrat/utility, +/obj/item/clothing/under/rank/engineering/engineer/nova/utility, +/obj/item/clothing/under/rank/engineering/engineer/nova/utility, /obj/item/storage/backpack/industrial, /obj/item/storage/backpack/duffelbag/engineering, /obj/item/storage/backpack/satchel/eng, @@ -8452,8 +8451,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/captain/skyrat/utility, -/obj/item/clothing/under/rank/captain/skyrat/utility, +/obj/item/clothing/under/rank/captain/nova/utility, +/obj/item/clothing/under/rank/captain/nova/utility, /obj/item/storage/backpack/duffelbag/blueshield, /obj/item/storage/backpack/blueshield, /obj/item/storage/backpack/satchel/blueshield, @@ -8681,7 +8680,7 @@ /turf/open/floor/iron, /area/ruin/space/has_grav/port_tarkon/forehall) "WK" = ( -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/dirt, /turf/open/floor/cult, /area/ruin/space/has_grav/port_tarkon/afthall) diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon3.dmm b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon3.dmm similarity index 99% rename from _maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon3.dmm rename to _maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon3.dmm index 0589f45fba18c9..9b88f9eb941880 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon3.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon3.dmm @@ -1287,8 +1287,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/cargo/tech/skyrat/utility, -/obj/item/clothing/under/rank/cargo/tech/skyrat/gorka, +/obj/item/clothing/under/rank/cargo/tech/nova/utility, +/obj/item/clothing/under/rank/cargo/tech/nova/gorka, /obj/item/storage/backpack/duffelbag/explorer, /obj/item/storage/backpack/explorer, /obj/item/storage/backpack/satchel/explorer, @@ -2187,8 +2187,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/medical/doctor/skyrat/utility, -/obj/item/clothing/under/rank/medical/doctor/skyrat/utility, +/obj/item/clothing/under/rank/medical/doctor/nova/utility, +/obj/item/clothing/under/rank/medical/doctor/nova/utility, /obj/item/storage/backpack/duffelbag/med, /obj/item/storage/backpack/medic, /obj/item/storage/backpack/satchel/med, @@ -3085,8 +3085,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/misc/skyrat/utility, -/obj/item/clothing/under/misc/skyrat/utility, +/obj/item/clothing/under/misc/nova/utility, +/obj/item/clothing/under/misc/nova/utility, /obj/item/storage/backpack, /obj/item/storage/backpack/duffelbag, /obj/item/storage/backpack/satchel, @@ -3541,8 +3541,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/misc/skyrat/utility, -/obj/item/clothing/under/misc/skyrat/utility, +/obj/item/clothing/under/misc/nova/utility, +/obj/item/clothing/under/misc/nova/utility, /obj/item/storage/backpack, /obj/item/storage/backpack/duffelbag, /obj/item/storage/backpack/satchel, @@ -6025,8 +6025,8 @@ "Jl" = ( /obj/structure/closet, /obj/effect/decal/cleanable/dirt, -/obj/item/clothing/under/rank/security/skyrat/utility/redsec, -/obj/item/clothing/under/rank/security/skyrat/utility, +/obj/item/clothing/under/rank/security/nova/utility/redsec, +/obj/item/clothing/under/rank/security/nova/utility, /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, @@ -6480,8 +6480,8 @@ "LA" = ( /obj/structure/closet, /obj/effect/decal/cleanable/dirt, -/obj/item/clothing/under/rank/rnd/scientist/skyrat/utility, -/obj/item/clothing/under/rank/rnd/roboticist/skyrat/sleek, +/obj/item/clothing/under/rank/rnd/scientist/nova/utility, +/obj/item/clothing/under/rank/rnd/roboticist/nova/sleek, /obj/item/clothing/shoes/jackboots, /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, @@ -7213,7 +7213,6 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm/directional/west, /obj/machinery/suit_storage_unit/industrial/hauler, -/obj/machinery/suit_storage_unit/industrial/hauler, /obj/effect/turf_decal/tile/brown/half{ dir = 8 }, @@ -7709,8 +7708,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/engineering/engineer/skyrat/utility, -/obj/item/clothing/under/rank/engineering/engineer/skyrat/utility, +/obj/item/clothing/under/rank/engineering/engineer/nova/utility, +/obj/item/clothing/under/rank/engineering/engineer/nova/utility, /obj/item/storage/backpack/industrial, /obj/item/storage/backpack/duffelbag/engineering, /obj/item/storage/backpack/satchel/eng, @@ -8002,8 +8001,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/captain/skyrat/utility, -/obj/item/clothing/under/rank/captain/skyrat/utility, +/obj/item/clothing/under/rank/captain/nova/utility, +/obj/item/clothing/under/rank/captain/nova/utility, /obj/item/storage/backpack/duffelbag/blueshield, /obj/item/storage/backpack/blueshield, /obj/item/storage/backpack/satchel/blueshield, diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon4.dmm b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon4.dmm similarity index 99% rename from _maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon4.dmm rename to _maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon4.dmm index 5514e997812365..d2cb66b12efb41 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon4.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon4.dmm @@ -1105,8 +1105,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/cargo/tech/skyrat/utility, -/obj/item/clothing/under/rank/cargo/tech/skyrat/gorka, +/obj/item/clothing/under/rank/cargo/tech/nova/utility, +/obj/item/clothing/under/rank/cargo/tech/nova/gorka, /obj/item/storage/backpack/duffelbag/explorer, /obj/item/storage/backpack/explorer, /obj/item/storage/backpack/satchel/explorer, @@ -1905,8 +1905,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/medical/doctor/skyrat/utility, -/obj/item/clothing/under/rank/medical/doctor/skyrat/utility, +/obj/item/clothing/under/rank/medical/doctor/nova/utility, +/obj/item/clothing/under/rank/medical/doctor/nova/utility, /obj/item/storage/backpack/duffelbag/med, /obj/item/storage/backpack/medic, /obj/item/storage/backpack/satchel/med, @@ -2665,8 +2665,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/misc/skyrat/utility, -/obj/item/clothing/under/misc/skyrat/utility, +/obj/item/clothing/under/misc/nova/utility, +/obj/item/clothing/under/misc/nova/utility, /obj/item/storage/backpack, /obj/item/storage/backpack/duffelbag, /obj/item/storage/backpack/satchel, @@ -3090,8 +3090,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/misc/skyrat/utility, -/obj/item/clothing/under/misc/skyrat/utility, +/obj/item/clothing/under/misc/nova/utility, +/obj/item/clothing/under/misc/nova/utility, /obj/item/storage/backpack, /obj/item/storage/backpack/duffelbag, /obj/item/storage/backpack/satchel, @@ -5297,8 +5297,8 @@ "Jl" = ( /obj/structure/closet, /obj/effect/decal/cleanable/dirt, -/obj/item/clothing/under/rank/security/skyrat/utility/redsec, -/obj/item/clothing/under/rank/security/skyrat/utility, +/obj/item/clothing/under/rank/security/nova/utility/redsec, +/obj/item/clothing/under/rank/security/nova/utility, /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, @@ -5675,8 +5675,8 @@ "LA" = ( /obj/structure/closet, /obj/effect/decal/cleanable/dirt, -/obj/item/clothing/under/rank/rnd/scientist/skyrat/utility, -/obj/item/clothing/under/rank/rnd/roboticist/skyrat/sleek, +/obj/item/clothing/under/rank/rnd/scientist/nova/utility, +/obj/item/clothing/under/rank/rnd/roboticist/nova/sleek, /obj/item/clothing/shoes/jackboots, /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, @@ -6335,7 +6335,6 @@ "Qy" = ( /obj/machinery/firealarm/directional/west, /obj/machinery/suit_storage_unit/industrial/hauler, -/obj/machinery/suit_storage_unit/industrial/hauler, /obj/effect/turf_decal/tile/brown/half{ dir = 8 }, @@ -6806,8 +6805,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/engineering/engineer/skyrat/utility, -/obj/item/clothing/under/rank/engineering/engineer/skyrat/utility, +/obj/item/clothing/under/rank/engineering/engineer/nova/utility, +/obj/item/clothing/under/rank/engineering/engineer/nova/utility, /obj/item/storage/backpack/industrial, /obj/item/storage/backpack/duffelbag/engineering, /obj/item/storage/backpack/satchel/eng, @@ -7083,8 +7082,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/captain/skyrat/utility, -/obj/item/clothing/under/rank/captain/skyrat/utility, +/obj/item/clothing/under/rank/captain/nova/utility, +/obj/item/clothing/under/rank/captain/nova/utility, /obj/item/storage/backpack/duffelbag/blueshield, /obj/item/storage/backpack/blueshield, /obj/item/storage/backpack/satchel/blueshield, diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon5.dmm b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon5.dmm similarity index 99% rename from _maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon5.dmm rename to _maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon5.dmm index 5ebeb6648402e0..8aaf274c14b8e6 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon5.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon5.dmm @@ -1200,8 +1200,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/cargo/tech/skyrat/utility, -/obj/item/clothing/under/rank/cargo/tech/skyrat/gorka, +/obj/item/clothing/under/rank/cargo/tech/nova/utility, +/obj/item/clothing/under/rank/cargo/tech/nova/gorka, /obj/item/storage/backpack/duffelbag/explorer, /obj/item/storage/backpack/explorer, /obj/item/storage/backpack/satchel/explorer, @@ -2083,8 +2083,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/medical/doctor/skyrat/utility, -/obj/item/clothing/under/rank/medical/doctor/skyrat/utility, +/obj/item/clothing/under/rank/medical/doctor/nova/utility, +/obj/item/clothing/under/rank/medical/doctor/nova/utility, /obj/item/storage/backpack/duffelbag/med, /obj/item/storage/backpack/medic, /obj/item/storage/backpack/satchel/med, @@ -2900,8 +2900,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/misc/skyrat/utility, -/obj/item/clothing/under/misc/skyrat/utility, +/obj/item/clothing/under/misc/nova/utility, +/obj/item/clothing/under/misc/nova/utility, /obj/item/storage/backpack, /obj/item/storage/backpack/duffelbag, /obj/item/storage/backpack/satchel, @@ -3316,8 +3316,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/misc/skyrat/utility, -/obj/item/clothing/under/misc/skyrat/utility, +/obj/item/clothing/under/misc/nova/utility, +/obj/item/clothing/under/misc/nova/utility, /obj/item/storage/backpack, /obj/item/storage/backpack/duffelbag, /obj/item/storage/backpack/satchel, @@ -5774,8 +5774,8 @@ "Jl" = ( /obj/structure/closet, /obj/effect/decal/cleanable/dirt, -/obj/item/clothing/under/rank/security/skyrat/utility/redsec, -/obj/item/clothing/under/rank/security/skyrat/utility, +/obj/item/clothing/under/rank/security/nova/utility/redsec, +/obj/item/clothing/under/rank/security/nova/utility, /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, @@ -6208,8 +6208,8 @@ "LA" = ( /obj/structure/closet, /obj/effect/decal/cleanable/dirt, -/obj/item/clothing/under/rank/rnd/scientist/skyrat/utility, -/obj/item/clothing/under/rank/rnd/roboticist/skyrat/sleek, +/obj/item/clothing/under/rank/rnd/scientist/nova/utility, +/obj/item/clothing/under/rank/rnd/roboticist/nova/sleek, /obj/item/clothing/shoes/jackboots, /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, @@ -6955,7 +6955,6 @@ "Qy" = ( /obj/machinery/firealarm/directional/west, /obj/machinery/suit_storage_unit/industrial/hauler, -/obj/machinery/suit_storage_unit/industrial/hauler, /obj/effect/turf_decal/tile/brown/half{ dir = 8 }, @@ -7464,8 +7463,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/engineering/engineer/skyrat/utility, -/obj/item/clothing/under/rank/engineering/engineer/skyrat/utility, +/obj/item/clothing/under/rank/engineering/engineer/nova/utility, +/obj/item/clothing/under/rank/engineering/engineer/nova/utility, /obj/item/storage/backpack/industrial, /obj/item/storage/backpack/duffelbag/engineering, /obj/item/storage/backpack/satchel/eng, @@ -7771,8 +7770,8 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/captain/skyrat/utility, -/obj/item/clothing/under/rank/captain/skyrat/utility, +/obj/item/clothing/under/rank/captain/nova/utility, +/obj/item/clothing/under/rank/captain/nova/utility, /obj/item/storage/backpack/duffelbag/blueshield, /obj/item/storage/backpack/blueshield, /obj/item/storage/backpack/satchel/blueshield, diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/posterpandamonium.dmm b/_maps/RandomRuins/SpaceRuins/nova/posterpandamonium.dmm similarity index 100% rename from _maps/RandomRuins/SpaceRuins/skyrat/posterpandamonium.dmm rename to _maps/RandomRuins/SpaceRuins/nova/posterpandamonium.dmm diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/prisonshuttle.dmm b/_maps/RandomRuins/SpaceRuins/nova/prisonshuttle.dmm similarity index 100% rename from _maps/RandomRuins/SpaceRuins/skyrat/prisonshuttle.dmm rename to _maps/RandomRuins/SpaceRuins/nova/prisonshuttle.dmm diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/salvagepost.dmm b/_maps/RandomRuins/SpaceRuins/nova/salvagepost.dmm similarity index 100% rename from _maps/RandomRuins/SpaceRuins/skyrat/salvagepost.dmm rename to _maps/RandomRuins/SpaceRuins/nova/salvagepost.dmm diff --git a/_maps/RandomRuins/SpaceRuins/nova/scrapheap.dmm b/_maps/RandomRuins/SpaceRuins/nova/scrapheap.dmm new file mode 100644 index 00000000000000..cf46c6f8114b2e --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/nova/scrapheap.dmm @@ -0,0 +1,3006 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/machinery/light/red/directional/south, +/obj/machinery/smartfridge/chemistry/preloaded, +/turf/open/floor/iron/white/textured_corner{ + dir = 4 + }, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"ah" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"aq" = ( +/obj/machinery/chem_master, +/turf/open/floor/iron/white/smooth_half, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"ax" = ( +/obj/machinery/light/red/directional/south, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"bi" = ( +/mob/living/simple_animal/hostile/zombie/nocorpse, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"bn" = ( +/obj/machinery/light/red/directional/south, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"bC" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/machinery/door/window{ + dir = 4 + }, +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"bP" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"cf" = ( +/obj/machinery/light/small/red/directional/west, +/mob/living/simple_animal/hostile/zombie, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"cm" = ( +/obj/machinery/light/red/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"cp" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"cx" = ( +/obj/machinery/light/broken/directional/north, +/obj/machinery/suit_storage_unit/open, +/obj/effect/turf_decal/tile/brown/full, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"cA" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"cE" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/mob_spawn/corpse/human/cargo_tech, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"cI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/brown/filled/end{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"cY" = ( +/obj/machinery/light/red/directional/south, +/obj/structure/closet/l3closet, +/turf/open/floor/iron/white/textured_corner{ + dir = 1 + }, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"db" = ( +/obj/machinery/light/broken/directional/east, +/mob/living/simple_animal/hostile/zombie, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"dd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/tank_holder, +/obj/effect/turf_decal/trimline/blue/filled/corner, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"dk" = ( +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/abandoned, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"dl" = ( +/obj/machinery/suit_storage_unit/open, +/obj/effect/turf_decal/tile/brown/full, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"dp" = ( +/obj/machinery/light/red/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"dw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/effect/spawner/random/engineering/toolbox, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"dP" = ( +/obj/machinery/light/red/directional/south, +/obj/machinery/computer/crew{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_half, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"dQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/cleanable/blood/gibs/up, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"dX" = ( +/obj/machinery/light/red/directional/east, +/obj/structure/table/reinforced, +/obj/item/flashlight/seclite, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"eK" = ( +/obj/structure/closet/wardrobe/pjs, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"eL" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"eY" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"eZ" = ( +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/zombie/nocorpse, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"fa" = ( +/obj/effect/mob_spawn/corpse/human/syndicatesoldier, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"ff" = ( +/turf/closed/wall/mineral/titanium/survival, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"fr" = ( +/obj/machinery/power/shuttle_engine/large{ + dir = 8 + }, +/turf/template_noop, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"ft" = ( +/obj/machinery/power/smes, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"fw" = ( +/turf/template_noop, +/area/template_noop) +"fU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/brown/filled/corner, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"ga" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/comfy/shuttle, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"gd" = ( +/obj/structure/closet/crate/secure/science, +/obj/effect/turf_decal/bot, +/obj/item/disk/design_disk/bepis, +/obj/item/disk/design_disk/bepis, +/obj/item/disk/design_disk/bepis, +/obj/effect/decal/cleanable/dirt, +/obj/item/raw_anomaly_core/random, +/obj/item/raw_anomaly_core/random, +/obj/item/raw_anomaly_core/random, +/obj/effect/turf_decal/tile/brown/full, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"gm" = ( +/obj/machinery/light/small/red/directional/south, +/mob/living/simple_animal/hostile/zombie/nocorpse, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"gr" = ( +/obj/structure/table, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"gA" = ( +/obj/machinery/chem_heater, +/turf/open/floor/iron/white/smooth_half, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"gG" = ( +/obj/structure/closet/cabinet, +/obj/item/book/random, +/obj/item/book/random, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"gL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/window{ + dir = 8; + req_access = list("maint_tunnels") + }, +/obj/effect/turf_decal/trimline/brown/filled/end{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"gX" = ( +/obj/structure/closet/crate/medical, +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/medical/medkit, +/obj/effect/spawner/random/medical/medkit, +/obj/effect/spawner/random/medical/medkit_rare, +/obj/effect/turf_decal/tile/brown/full, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"hc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/grime, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"hz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"hC" = ( +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/plasteel/twenty, +/obj/structure/closet/crate/engineering, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"hD" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"hN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/obj/effect/mob_spawn/corpse/human/cargo_tech, +/obj/effect/turf_decal/trimline/brown/filled/corner, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"hU" = ( +/mob/living/simple_animal/hostile/zombie, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"iy" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"iB" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"iH" = ( +/obj/effect/spawner/random/trash/graffiti, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"iM" = ( +/obj/machinery/computer, +/obj/effect/turf_decal/tile/brown/full, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"iR" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"iT" = ( +/obj/structure/table, +/obj/item/disk/design_disk/bepis, +/obj/effect/spawner/random/medical/surgery_tool_advanced, +/obj/effect/spawner/random/medical/surgery_tool_advanced, +/turf/open/floor/iron/white/smooth_half, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"iU" = ( +/mob/living/simple_animal/hostile/zombie, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"jr" = ( +/obj/machinery/computer{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"jt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"jM" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"kc" = ( +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"kn" = ( +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/zombie/cheesezombie, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"kA" = ( +/obj/machinery/power/shuttle_engine/propulsion{ + dir = 8 + }, +/turf/template_noop, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"kH" = ( +/obj/structure/closet/crate/secure/plasma, +/obj/effect/turf_decal/bot, +/obj/item/stack/sheet/mineral/plasma/thirty, +/obj/effect/turf_decal/tile/brown/full, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"lq" = ( +/obj/structure/table, +/obj/effect/spawner/random/engineering/material_cheap, +/obj/effect/spawner/random/engineering/material_cheap, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"lt" = ( +/obj/machinery/light/broken/directional/west, +/obj/structure/rack, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"lx" = ( +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/looter/ranged/space/laser, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"lK" = ( +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/zombie/nocorpse, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"lM" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"lN" = ( +/obj/structure/bed/medical/emergency, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"lS" = ( +/obj/machinery/light/red/directional/south, +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"lT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"lU" = ( +/obj/structure/table, +/obj/effect/spawner/random/engineering/material_rare, +/obj/effect/spawner/random/engineering/material_rare, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"mj" = ( +/obj/machinery/stasis, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"mk" = ( +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/trog, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"mz" = ( +/obj/machinery/chem_dispenser, +/turf/open/floor/iron/white/smooth_half, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"mG" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"mQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"nz" = ( +/obj/machinery/light/red/directional/west, +/obj/item/storage/fancy/donut_box, +/obj/structure/table, +/obj/item/toy/nuke, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"nO" = ( +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/looter/big, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"nR" = ( +/obj/machinery/light/red/directional/south, +/obj/structure/closet/crate/large, +/obj/effect/turf_decal/bot, +/obj/item/shovel, +/obj/effect/spawner/random/decoration/carpet, +/obj/effect/spawner/random/decoration/carpet, +/obj/effect/turf_decal/tile/brown/full, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"om" = ( +/obj/machinery/light/red/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"ou" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"oz" = ( +/obj/machinery/door/airlock/mining, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"oJ" = ( +/obj/machinery/light/broken/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/suit_storage_unit/open, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"oP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"pr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"pw" = ( +/obj/machinery/light/broken/directional/west, +/obj/structure/closet/crate/radiation, +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/engineering/material_rare, +/obj/effect/spawner/random/engineering/material_rare, +/obj/effect/turf_decal/tile/brown/full, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"pM" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/carpet/lone, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"pQ" = ( +/obj/structure/bed/medical{ + dir = 4 + }, +/obj/item/bedsheet/random, +/obj/machinery/door/window{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"pZ" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"qm" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"qt" = ( +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/glass{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"qx" = ( +/obj/structure/table/reinforced, +/obj/item/folder, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"qM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/brown/filled/end, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"qV" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"re" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"rh" = ( +/obj/structure/rack, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"rm" = ( +/obj/structure/bed, +/obj/item/bedsheet/nanotrasen, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"ry" = ( +/obj/machinery/light/red/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/blue/filled/corner, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"rU" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"rY" = ( +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"se" = ( +/obj/machinery/door/airlock/highsecurity, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"sV" = ( +/mob/living/simple_animal/hostile/zombie/nocorpse, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"sY" = ( +/obj/machinery/light/broken/directional/north, +/turf/open/floor/iron/white/smooth_half, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"tc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/grenade/chem_grenade/smart_metal_foam, +/obj/item/grenade/chem_grenade/smart_metal_foam, +/obj/item/grenade/chem_grenade/smart_metal_foam, +/obj/structure/table, +/obj/effect/spawner/random/engineering/tool_advanced{ + pixel_x = 6; + pixel_y = 8 + }, +/obj/effect/spawner/random/engineering/tool_advanced{ + pixel_x = 6; + pixel_y = 8 + }, +/obj/effect/spawner/random/engineering/tool_advanced{ + pixel_x = 6; + pixel_y = 8 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"td" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"tj" = ( +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"ts" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"tw" = ( +/obj/item/folder, +/obj/machinery/computer/records/security/laptop{ + dir = 1 + }, +/obj/structure/table/wood, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"tJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"tO" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"tQ" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"uc" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"ui" = ( +/obj/machinery/computer{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"us" = ( +/obj/machinery/door/airlock/maintenance, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"uv" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"uH" = ( +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"uM" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"uO" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/cleanable/blood/gibs/up, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"uX" = ( +/obj/structure/closet/crate/secure/loot, +/obj/effect/turf_decal/bot_red, +/obj/effect/decal/cleanable/dirt, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/tile/brown/full, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"vc" = ( +/obj/structure/table/reinforced, +/obj/item/megaphone, +/turf/open/floor/iron/dark/side, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"vg" = ( +/obj/effect/spawner/random/medical/patient_stretcher, +/obj/effect/turf_decal/trimline/blue/filled/corner, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"vl" = ( +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"vm" = ( +/obj/machinery/light/broken/directional/east, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"vq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"vr" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"vG" = ( +/obj/structure/bed/medical{ + dir = 4 + }, +/obj/item/bedsheet/random, +/obj/machinery/door/window{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"vY" = ( +/obj/machinery/light/red/directional/west, +/obj/machinery/suit_storage_unit/cmo, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"wa" = ( +/obj/machinery/door/airlock/public, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"wh" = ( +/obj/machinery/light/red/directional/south, +/obj/structure/closet/crate/secure/gear, +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/toolbox/syndicate, +/obj/item/switchblade, +/obj/effect/turf_decal/tile/brown/full, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"wi" = ( +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"wu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"wT" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"wV" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"xm" = ( +/obj/structure/table/wood, +/obj/machinery/computer/records/security/laptop, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"xs" = ( +/obj/structure/rack/shelf, +/obj/item/reagent_containers/hypospray/medipen/atropine, +/obj/item/reagent_containers/hypospray/medipen/survival{ + pixel_y = -6 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"xL" = ( +/obj/machinery/light/broken/directional/east, +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/trog, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"xY" = ( +/obj/structure/rack/shelf, +/obj/item/radio, +/obj/item/radio, +/obj/item/radio, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"yh" = ( +/obj/machinery/computer/operating, +/turf/open/floor/iron/white/textured_corner{ + dir = 8 + }, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"yl" = ( +/obj/machinery/light/red/directional/east, +/obj/structure/bed/medical{ + dir = 4 + }, +/obj/item/bedsheet/random, +/obj/machinery/door/window{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"yp" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"yq" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"ys" = ( +/obj/structure/rack/shelf, +/obj/item/storage/toolbox/mechanical, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"yy" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"yA" = ( +/obj/structure/table, +/obj/item/taperecorder, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"yE" = ( +/obj/machinery/light/small/red/directional/west, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"yO" = ( +/obj/machinery/light/red/directional/west, +/obj/structure/table/reinforced, +/obj/item/computer_disk/syndicate/camera_app, +/obj/item/disk/design_disk/bepis, +/obj/item/disk/design_disk/bepis, +/obj/item/stack/spacecash/c500, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"yR" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/effect/mapping_helpers/damaged_window, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"zo" = ( +/obj/machinery/computer{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"zr" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp{ + pixel_y = 10 + }, +/obj/item/paper, +/obj/item/paper{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/pen/fountain/captain, +/obj/item/folder, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"zA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"zB" = ( +/obj/structure/dresser, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"zC" = ( +/obj/structure/closet/crate/medical, +/obj/effect/turf_decal/bot, +/obj/item/reagent_containers/cup/beaker/bluespace, +/obj/item/reagent_containers/cup/beaker/bluespace, +/obj/effect/turf_decal/tile/brown/full, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"zH" = ( +/obj/effect/spawner/random/exotic/ripley, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"zX" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Av" = ( +/obj/structure/closet/cabinet, +/obj/item/flashlight/seclite, +/obj/item/stack/spacecash/c500, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"AD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Bq" = ( +/obj/structure/table, +/obj/item/storage/belt, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"BS" = ( +/obj/machinery/light/red/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"BY" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Cg" = ( +/obj/structure/bed/medical/emergency, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Cl" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, +/turf/closed/wall/mineral/titanium, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Cs" = ( +/obj/structure/door_assembly/door_assembly_hatch, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Cu" = ( +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/zombie, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"CF" = ( +/obj/machinery/door/airlock/glass, +/obj/effect/spawner/random/structure/barricade, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"CH" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/spawner/random/structure/crate_loot, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"CK" = ( +/obj/machinery/light/small/red/directional/north, +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"CQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"CT" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/carpet/lone, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"CU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/suit_storage_unit/open, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Dh" = ( +/obj/machinery/light/red/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Du" = ( +/obj/structure/closet/crate/large, +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/spacecash/c1000, +/obj/item/statuebust, +/obj/effect/turf_decal/tile/brown/full, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Dx" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"DN" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Ec" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Ee" = ( +/obj/effect/spawner/random/trash/mess, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Ef" = ( +/obj/machinery/computer/atmos_alert{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Ej" = ( +/obj/structure/rack/shelf, +/obj/item/surgery_tray/full, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"El" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Ew" = ( +/obj/structure/rack/shelf, +/obj/item/gun/energy/laser/retro, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Ey" = ( +/obj/effect/spawner/random/trash/grime, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"ED" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/paper_bin{ + pixel_x = -11; + pixel_y = 7 + }, +/obj/item/folder, +/obj/item/pen/fourcolor{ + pixel_x = 4 + }, +/obj/item/pen/fountain, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"EE" = ( +/obj/structure/closet/crate/large, +/obj/effect/turf_decal/bot, +/obj/item/stack/spacecash/c1000, +/obj/effect/turf_decal/tile/brown/full, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"EJ" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"EL" = ( +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/zombie/nocorpse, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"EN" = ( +/obj/structure/table, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"ES" = ( +/obj/structure/rack, +/obj/item/storage/medkit{ + pixel_y = 12 + }, +/obj/item/storage/medkit/brute{ + pixel_y = 7 + }, +/obj/item/storage/medkit/o2, +/turf/open/floor/iron/white/textured_corner, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"EU" = ( +/obj/machinery/door/airlock/command, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"EY" = ( +/mob/living/simple_animal/hostile/zombie, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Fe" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Fj" = ( +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"FE" = ( +/obj/structure/rack/shelf, +/obj/item/storage/toolbox/electrical, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"FF" = ( +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"FV" = ( +/turf/template_noop, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"FW" = ( +/obj/structure/grille/broken, +/obj/item/shard{ + icon_state = "medium" + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Gd" = ( +/obj/structure/closet/crate/secure/loot, +/obj/effect/turf_decal/bot_red, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/tile/brown/full, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Gf" = ( +/obj/structure/rack, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Gp" = ( +/obj/machinery/suit_storage_unit/open, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Gq" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = -7; + pixel_y = 14 + }, +/obj/item/storage/briefcase, +/obj/item/storage/pill_bottle/psicodine, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"GP" = ( +/obj/structure/table/wood, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"GR" = ( +/obj/structure/table_frame, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"GU" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Hj" = ( +/obj/machinery/door/poddoor/shutters/preopen, +/turf/open/floor/noslip, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Hk" = ( +/obj/structure/closet/crate/radiation, +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/engineering/material_rare, +/obj/effect/spawner/random/engineering/material_rare, +/obj/effect/turf_decal/tile/brown/full, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"HO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/blue/filled/end, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Ib" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/office, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"If" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Ig" = ( +/obj/structure/curtain, +/obj/machinery/door/window{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/obj/machinery/shower/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"It" = ( +/obj/structure/table, +/obj/item/flashlight/seclite, +/obj/effect/spawner/random/trash/soap, +/obj/effect/spawner/random/trash/soap, +/turf/open/floor/iron/white/smooth_half, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"IF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/tank/air, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"IH" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"IM" = ( +/obj/effect/turf_decal/trimline/brown/filled/end, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"IZ" = ( +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/zombie/nocorpse, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Ja" = ( +/obj/machinery/light/red/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Jh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Jx" = ( +/obj/machinery/door/airlock/external{ + id_tag = "syndie_listeningpost_external"; + req_access = list("syndicate") + }, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"JI" = ( +/obj/machinery/light/broken/directional/east, +/obj/effect/turf_decal/trimline/brown/filled/end{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"JM" = ( +/obj/structure/closet/crate/medical, +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/medical/memeorgans, +/obj/effect/spawner/random/medical/memeorgans, +/obj/effect/spawner/random/medical/memeorgans, +/obj/effect/spawner/random/medical/organs, +/obj/effect/spawner/random/medical/organs, +/obj/effect/spawner/random/medical/organs, +/obj/effect/turf_decal/tile/brown/full, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"JN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/item/shovel, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"JU" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Kk" = ( +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/zombie, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/corner, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"KA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/sheet/plastic/fifty, +/obj/structure/closet/crate/engineering, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"KB" = ( +/obj/effect/spawner/random/trash/box, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"KD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"KJ" = ( +/obj/machinery/computer/monitor{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"KP" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"KQ" = ( +/obj/machinery/light/broken/directional/west, +/obj/structure/table, +/obj/effect/spawner/random/engineering/material, +/obj/effect/spawner/random/engineering/material, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Lk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/cabinet, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Ls" = ( +/obj/machinery/door/airlock/medical, +/obj/effect/mapping_helpers/airlock/abandoned, +/turf/open/floor/iron/white/side{ + dir = 1 + }, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Lt" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white/smooth_edge{ + dir = 1 + }, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"LG" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"LL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/effect/turf_decal/trimline/blue/filled/corner, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Ma" = ( +/obj/structure/table/reinforced, +/obj/item/radio{ + desc = "An old handheld radio. You could use it, if you really wanted to."; + icon_state = "radio"; + name = "old radio"; + pixel_y = 15 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Md" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/mob_spawn/corpse/human/doctor, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Mf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Mq" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Mr" = ( +/obj/machinery/light/small/red/directional/north, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Mv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/corner, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"MA" = ( +/obj/machinery/computer/crew{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"MC" = ( +/obj/machinery/door/airlock/medical, +/turf/open/floor/iron/white/side{ + dir = 1 + }, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"MV" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"MY" = ( +/obj/machinery/porta_turret, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Nb" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/iron/dark/side, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"No" = ( +/obj/machinery/shieldgen, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Nt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Ny" = ( +/mob/living/simple_animal/hostile/zombie/cheesezombie, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Nz" = ( +/obj/machinery/light/broken/directional/north, +/obj/effect/mob_spawn/corpse/human/syndicatecommando, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"NH" = ( +/obj/effect/decal/cleanable/greenglow, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"NO" = ( +/obj/structure/closet/crate/secure/engineering, +/obj/item/crowbar/power, +/obj/item/multitool/advanced, +/obj/item/rcd_upgrade/frames, +/obj/item/screwdriver/advanced, +/obj/effect/turf_decal/tile/brown/full, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"NU" = ( +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/zombie, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Oc" = ( +/obj/structure/closet/crate/large, +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/maintenance/five, +/obj/effect/turf_decal/tile/brown/full, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Om" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/machinery/door/window{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"On" = ( +/obj/structure/rack/shelf, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Ou" = ( +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/glass{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"OI" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"ON" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/tank_holder, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"OW" = ( +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Pe" = ( +/obj/machinery/light/broken/directional/north, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Pq" = ( +/obj/machinery/door/poddoor/shutters, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"PJ" = ( +/obj/structure/bed/medical{ + dir = 4 + }, +/obj/item/bedsheet/random, +/obj/machinery/door/window{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"PW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/autolathe, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Qb" = ( +/obj/structure/table, +/obj/item/stack/sheet/cloth/ten, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Qe" = ( +/obj/structure/rack, +/obj/item/flashlight, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Qg" = ( +/obj/effect/turf_decal/trimline/brown/filled/end{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Qj" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Qn" = ( +/obj/machinery/light/small/red/directional/east, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Qo" = ( +/obj/structure/closet/crate/secure/loot, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/tile/brown/full, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"QA" = ( +/obj/machinery/light/broken/directional/east, +/obj/structure/table/reinforced, +/obj/item/storage/fancy/donut_box, +/obj/item/food/benedict, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"QB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/wood, +/obj/item/modular_computer/laptop, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"QI" = ( +/obj/structure/closet/crate/large, +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance/five, +/obj/effect/turf_decal/tile/brown/full, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"QM" = ( +/mob/living/simple_animal/hostile/zombie/nocorpse, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"QW" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"RA" = ( +/obj/structure/rack/shelf, +/obj/item/gps/spaceruin, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"RI" = ( +/obj/structure/table, +/obj/machinery/cell_charger_multi, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"RW" = ( +/obj/machinery/computer, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"RX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Sz" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"SD" = ( +/obj/machinery/power/shuttle_engine/heater{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Tk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/rack, +/obj/item/storage/briefcase, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Tn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate_loot, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Tv" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Tz" = ( +/obj/structure/noticeboard{ + pixel_y = 26 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"TB" = ( +/obj/machinery/light/broken/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"TH" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"TW" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Ud" = ( +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/looter, +/turf/open/floor/carpet/lone, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Ul" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Up" = ( +/obj/structure/tank_dispenser/oxygen, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"UW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/cleanable/blood/gibs/torso, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"UX" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Vo" = ( +/obj/structure/bed/medical{ + dir = 4 + }, +/obj/item/bedsheet/random, +/obj/machinery/door/window{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/structure/window/reinforced/tinted/spawner/directional/north, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"VA" = ( +/obj/machinery/door/airlock/highsecurity, +/obj/effect/mapping_helpers/airlock/abandoned, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"VU" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"We" = ( +/turf/closed/wall/mineral/titanium, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Wx" = ( +/obj/machinery/light/small/red/directional/south, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"WA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/office{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"WT" = ( +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Xw" = ( +/obj/structure/closet/crate/medical, +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/cup/beaker/synthflesh, +/obj/item/reagent_containers/cup/beaker/synthflesh, +/obj/item/reagent_containers/pill/iron, +/obj/item/reagent_containers/pill/iron, +/obj/item/reagent_containers/pill/iron, +/obj/item/reagent_containers/pill/oxandrolone, +/obj/item/reagent_containers/pill/oxandrolone, +/obj/item/reagent_containers/pill/potassiodide, +/obj/item/reagent_containers/pill/potassiodide, +/obj/item/reagent_containers/pill/stimulant, +/obj/effect/turf_decal/tile/brown/full, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"XB" = ( +/obj/machinery/light/red/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/comfy/shuttle, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"YA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/obj/effect/mob_spawn/corpse/human/cargo_tech, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"YG" = ( +/mob/living/simple_animal/hostile/zombie, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"YP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mob_spawn/corpse/human/syndicatesoldier, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"YS" = ( +/obj/machinery/light/broken/directional/north, +/obj/structure/table/optable, +/obj/machinery/defibrillator_mount{ + pixel_y = 25 + }, +/turf/open/floor/iron/white/smooth_half, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"YT" = ( +/obj/machinery/light/broken/directional/west, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Zd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/grime, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Zg" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/tile, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"Zu" = ( +/obj/structure/curtain, +/obj/machinery/door/window{ + dir = 4 + }, +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/obj/machinery/shower/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/powered/nova/scrapheap) +"ZU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/brown/filled/line, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/scrapheap) + +(1,1,1) = {" +fw +fw +fw +ff +fw +fw +ff +FV +fr +ff +fw +fw +fw +fw +fw +ff +FV +fr +ff +fw +fw +ff +fw +fw +fw +"} +(2,1,1) = {" +fw +fw +fw +cA +kA +kA +cA +FV +FV +cA +kA +kA +kA +kA +kA +cA +FV +FV +cA +kA +kA +cA +fw +fw +fw +"} +(3,1,1) = {" +fw +fw +fw +cA +SD +SD +cA +SD +SD +cA +SD +SD +SD +SD +SD +cA +SD +SD +cA +SD +SD +cA +fw +fw +fw +"} +(4,1,1) = {" +fw +fw +fw +cA +Cl +Cl +cA +Cl +Cl +cA +Cl +Cl +Cl +Cl +Cl +cA +Cl +Cl +cA +Cl +Cl +cA +fw +fw +fw +"} +(5,1,1) = {" +fw +fw +cA +cA +Up +KQ +lU +oJ +CU +cA +PW +tc +KJ +Ef +hC +KA +No +ft +cA +kc +wT +cA +cA +fw +fw +"} +(6,1,1) = {" +fw +fw +QW +lt +wT +kc +wT +wT +kc +us +OW +bP +hU +bP +bP +OW +bP +IF +QW +wT +IZ +GU +QW +fw +fw +"} +(7,1,1) = {" +QW +QW +QW +rh +wT +kc +wT +IZ +kc +QW +CK +bP +bP +bP +Wx +QW +QW +QW +QW +ts +EN +EN +QW +QW +QW +"} +(8,1,1) = {" +Jx +OW +Jx +kc +qm +zA +kc +wT +wT +QW +Fe +OW +rU +bP +hD +QW +LL +eY +QW +kc +wT +wT +Jx +OW +Jx +"} +(9,1,1) = {" +QW +QW +QW +kc +wT +wT +lM +GU +dp +QW +QW +QW +QW +us +QW +QW +cp +oP +CF +wT +wT +EN +QW +QW +QW +"} +(10,1,1) = {" +Sz +MY +QW +om +IZ +qm +lM +EN +lM +QW +dd +ON +cf +qV +qV +YT +If +EY +QW +sV +kc +WA +QW +MY +Sz +"} +(11,1,1) = {" +Sz +Sz +QW +wT +kc +kc +wT +kc +wT +CF +Mf +vq +Nt +Nt +iB +KB +ou +cm +QW +QW +CF +QW +QW +yR +Sz +"} +(12,1,1) = {" +fw +fw +QW +LG +kc +Ja +wT +xL +MV +QW +Ul +oP +vl +wV +dQ +uH +cp +mQ +pr +pr +bi +gr +We +fw +fw +"} +(13,1,1) = {" +fw +fw +QW +QW +QW +QW +QW +QW +QW +QW +cp +oP +wV +uH +wV +wV +eL +Dx +Dx +Tv +HO +dw +We +fw +fw +"} +(14,1,1) = {" +fw +fw +We +Ib +tw +yE +Gf +QW +ry +qV +AD +YA +uH +uH +uH +wV +cp +vq +iB +iB +vm +lq +We +fw +fw +"} +(15,1,1) = {" +fw +fw +Sz +IH +eZ +tQ +IH +VA +Mf +iU +Nt +KP +uH +uH +uH +Ey +Mf +oP +QW +QW +QW +QW +We +fw +fw +"} +(16,1,1) = {" +fw +fw +Sz +On +IH +IH +EJ +QW +Mf +oP +wV +mG +mG +Cs +mG +uH +Mf +El +QW +Ew +gG +Av +We +fw +fw +"} +(17,1,1) = {" +fw +fw +QW +Mr +zX +hz +gm +QW +Tn +TH +ui +mG +NH +uH +mG +yy +Mf +oP +se +Qj +CT +lx +Sz +fw +fw +"} +(18,1,1) = {" +fw +fw +Sz +GP +QB +ED +tQ +QW +cp +TH +GR +FW +uH +uH +mG +uH +Mf +ax +QW +zr +Ud +wi +Sz +fw +fw +"} +(19,1,1) = {" +fw +fw +Sz +Tk +RX +UX +Jh +QW +Dh +oP +Fj +mG +mG +Cs +mG +uH +Mf +TH +QW +xm +pM +Qj +Sz +fw +fw +"} +(20,1,1) = {" +fw +fw +We +Lk +Qn +FF +Zg +QW +cp +Cu +uH +yA +jr +uH +vg +re +JN +mk +QW +Qj +nO +bn +We +fw +fw +"} +(21,1,1) = {" +fw +fw +We +QW +QW +QW +QW +QW +cp +oP +vl +uH +wV +wV +Mf +vq +iB +KP +QW +zB +Gq +rm +We +fw +fw +"} +(22,1,1) = {" +fw +fw +We +ES +Ej +xs +aa +QW +Mf +Cg +wV +UW +wV +uH +Mf +ax +QW +QW +QW +QW +QW +QW +We +fw +fw +"} +(23,1,1) = {" +fw +fw +We +sY +kn +OI +Lt +Ls +Mf +TH +wV +uH +uH +uH +Mf +TH +oz +cI +TB +Oc +Hk +pw +We +fw +fw +"} +(24,1,1) = {" +fw +fw +We +gA +rY +uc +It +QW +hc +TH +uH +RI +QW +Qe +Mf +cE +QW +iM +Mv +wu +fa +qM +We +fw +fw +"} +(25,1,1) = {" +fw +fw +We +aq +BY +uc +dP +QW +Dh +oP +uH +Qb +QW +Bq +Mf +TH +Hj +iy +KD +NO +zC +QI +We +fw +fw +"} +(26,1,1) = {" +fw +fw +We +mz +rY +uc +iT +QW +Tz +oP +uH +FE +QW +RA +Mf +iH +Hj +Mq +hN +VU +NU +IM +We +fw +fw +"} +(27,1,1) = {" +fw +fw +We +YS +Md +lK +Lt +MC +EL +lN +jt +ys +QW +xY +Mf +TH +Hj +Ee +ZU +JM +Du +nR +We +fw +fw +"} +(28,1,1) = {" +fw +fw +We +yh +uM +mj +cY +QW +DN +iR +TH +uH +yq +CH +cp +TH +Hj +JU +fU +VU +VU +qM +We +fw +fw +"} +(29,1,1) = {" +fw +fw +We +QW +QW +QW +QW +QW +QW +ga +TH +wV +uH +ah +cp +BS +QW +dl +lT +gd +kH +wh +We +fw +fw +"} +(30,1,1) = {" +fw +fw +We +Zu +bC +kc +nz +eK +QW +XB +TH +uH +YG +uH +Mf +pZ +QW +cx +Kk +CQ +VU +qM +QW +We +fw +"} +(31,1,1) = {" +fw +fw +We +Nz +WT +kc +kc +uv +wa +cp +jM +tO +pr +Zd +AD +pZ +QW +dl +yp +Xw +EE +gX +QW +QW +We +"} +(32,1,1) = {" +fw +fw +We +Ig +Om +uv +Ny +kc +QW +Ec +iB +Nt +Nt +iB +iB +lS +QW +Qg +YP +wu +db +IM +Jx +OW +Jx +"} +(33,1,1) = {" +fw +fw +We +We +We +vG +kc +Vo +QW +QW +Ou +EU +qt +dk +Sz +QW +QW +Gd +gL +uX +QW +Pq +QW +QW +We +"} +(34,1,1) = {" +fw +fw +Sz +MY +We +Pe +sV +kc +QW +yO +tj +kc +tj +kc +Gp +vY +QW +Qo +tJ +Qo +QW +zH +QW +We +fw +"} +(35,1,1) = {" +fw +fw +Sz +Sz +We +PJ +yl +pQ +QW +RW +TW +QM +uO +vr +QM +Nb +QW +Qo +JI +Qo +QW +QW +We +fw +fw +"} +(36,1,1) = {" +fw +fw +fw +fw +We +We +We +We +QW +RW +TW +vr +td +td +td +vc +QW +We +We +We +We +We +fw +fw +fw +"} +(37,1,1) = {" +fw +fw +fw +fw +fw +fw +fw +fw +We +QA +qx +Ma +zo +zo +MA +dX +We +fw +fw +fw +fw +fw +fw +fw +fw +"} +(38,1,1) = {" +fw +fw +fw +fw +fw +fw +fw +fw +We +We +Sz +Sz +Sz +Sz +Sz +We +We +fw +fw +fw +fw +fw +fw +fw +fw +"} diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/shuttle8532.dmm b/_maps/RandomRuins/SpaceRuins/nova/shuttle8532.dmm similarity index 100% rename from _maps/RandomRuins/SpaceRuins/skyrat/shuttle8532.dmm rename to _maps/RandomRuins/SpaceRuins/nova/shuttle8532.dmm diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/shuttlescrap.dmm b/_maps/RandomRuins/SpaceRuins/nova/shuttlescrap.dmm similarity index 99% rename from _maps/RandomRuins/SpaceRuins/skyrat/shuttlescrap.dmm rename to _maps/RandomRuins/SpaceRuins/nova/shuttlescrap.dmm index f018d49169fae6..831767c1af0c4b 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/shuttlescrap.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/shuttlescrap.dmm @@ -26,7 +26,7 @@ /area/ruin/unpowered/no_grav) "k" = ( /turf/closed/wall/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat) +/area/ruin/space/has_grav/nova) "r" = ( /obj/machinery/door/airlock/hatch, /turf/open/floor/iron/dark/airless, diff --git a/_maps/RandomRuins/SpaceRuins/nova/smugglies.dmm b/_maps/RandomRuins/SpaceRuins/nova/smugglies.dmm new file mode 100644 index 00000000000000..609c2986d49e10 --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/nova/smugglies.dmm @@ -0,0 +1,442 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"c" = ( +/obj/machinery/door/airlock/medical, +/obj/effect/mapping_helpers/airlock/access/all, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/smugglies) +"d" = ( +/obj/item/reagent_containers/cocainebrick{ + pixel_x = 7; + pixel_y = 8 + }, +/obj/item/reagent_containers/cocaine{ + pixel_y = 4 + }, +/obj/structure/table, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/smugglies) +"e" = ( +/obj/machinery/hydroponics/constructable, +/turf/open/floor/grass, +/area/ruin/space/has_grav/powered/nova/smugglies) +"g" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/smugglies) +"h" = ( +/obj/effect/turf_decal/stripes/asteroid/corner{ + dir = 4 + }, +/turf/open/misc/asteroid/airless, +/area/ruin/unpowered/no_grav) +"k" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 1 + }, +/turf/open/misc/asteroid/airless, +/area/ruin/unpowered/no_grav) +"m" = ( +/turf/open/floor/iron/grimy, +/area/ruin/space/has_grav/powered/nova/smugglies) +"o" = ( +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/smugglies) +"t" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/smugglies) +"u" = ( +/obj/machinery/door/airlock/mining{ + name = "Backroom" + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/smugglies) +"v" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/smugglies) +"w" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/burgundy, +/turf/template_noop, +/area/template_noop) +"y" = ( +/obj/structure/table, +/obj/effect/spawner/random/entertainment/money, +/obj/effect/spawner/random/entertainment/money, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/smugglies) +"z" = ( +/turf/closed/mineral/random, +/area/ruin/unpowered/no_grav) +"A" = ( +/obj/structure/chair/office, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/smugglies) +"B" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/access/all, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/smugglies) +"C" = ( +/obj/effect/turf_decal/stripes/asteroid/corner{ + dir = 1 + }, +/turf/open/misc/asteroid/airless, +/area/ruin/unpowered/no_grav) +"E" = ( +/obj/machinery/vending/hydronutrients, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/smugglies) +"F" = ( +/turf/open/misc/asteroid/airless, +/area/ruin/unpowered/no_grav) +"H" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/iron/grimy, +/area/ruin/space/has_grav/powered/nova/smugglies) +"I" = ( +/obj/structure/closet/secure_closet/hydroponics{ + req_access = null + }, +/obj/item/gun/energy/floragun, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/smugglies) +"K" = ( +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/smugglies) +"L" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/left/directional/north, +/turf/open/floor/plating, +/area/ruin/space/has_grav/powered/nova/smugglies) +"N" = ( +/obj/structure/sink/directional/west, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/smugglies) +"O" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/powered/nova/smugglies) +"Q" = ( +/obj/machinery/light/directional/north, +/obj/structure/table, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/smugglies) +"R" = ( +/obj/structure/sign/poster/contraband/random/directional/north, +/obj/structure/table, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/smugglies) +"S" = ( +/obj/effect/turf_decal/siding/thinplating, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/smugglies) +"U" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/smugglies) +"V" = ( +/obj/machinery/vending/hydroseeds, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/smugglies) +"W" = ( +/obj/structure/table, +/obj/item/seeds/cocoapod, +/obj/item/folded_navigation_gigabeacon, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/smugglies) +"Y" = ( +/obj/machinery/computer/crew/syndie{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/powered/nova/smugglies) +"Z" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/nova/smugglies) + +(1,1,1) = {" +a +a +a +a +z +z +a +a +a +z +a +a +a +a +a +"} +(2,1,1) = {" +a +a +z +z +z +z +a +a +z +z +z +a +a +a +a +"} +(3,1,1) = {" +a +a +z +z +z +z +z +a +z +z +z +z +a +a +a +"} +(4,1,1) = {" +a +z +z +z +z +z +z +z +z +z +z +z +z +a +a +"} +(5,1,1) = {" +a +z +z +O +O +O +O +O +O +O +O +O +z +z +w +"} +(6,1,1) = {" +z +z +z +O +R +v +A +L +m +m +o +O +O +O +h +"} +(7,1,1) = {" +z +z +z +O +Q +v +Y +O +H +m +o +B +K +B +k +"} +(8,1,1) = {" +z +z +z +O +y +Z +U +u +o +o +o +O +O +O +C +"} +(9,1,1) = {" +z +z +z +O +g +c +g +O +O +O +O +O +z +z +w +"} +(10,1,1) = {" +z +z +z +O +I +o +W +d +o +S +e +O +z +z +F +"} +(11,1,1) = {" +z +z +z +O +V +o +o +o +o +S +e +O +z +z +z +"} +(12,1,1) = {" +z +z +z +O +E +o +o +t +N +S +e +O +z +z +z +"} +(13,1,1) = {" +z +z +z +O +O +O +O +O +O +O +O +O +z +z +a +"} +(14,1,1) = {" +a +z +z +z +z +z +z +z +z +z +z +z +z +a +a +"} +(15,1,1) = {" +a +a +z +z +z +z +z +z +z +z +z +a +a +a +a +"} +(16,1,1) = {" +a +a +a +z +z +z +z +z +z +z +a +a +a +a +a +"} diff --git a/_maps/RandomRuins/SpaceRuins/nova/spacehotel.dmm b/_maps/RandomRuins/SpaceRuins/nova/spacehotel.dmm new file mode 100644 index 00000000000000..fa1830fa67d48a --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/nova/spacehotel.dmm @@ -0,0 +1,12839 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/template_noop, +/area/template_noop) +"ab" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/template_noop, +/area/template_noop) +"ac" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/template_noop) +"ad" = ( +/obj/machinery/power/solar, +/obj/structure/cable, +/turf/open/floor/iron/solarpanel/airless, +/area/ruin/solars/hotel/solars) +"ae" = ( +/obj/structure/rack, +/obj/effect/spawner/random/clothing, +/obj/effect/spawner/random/clothing, +/obj/effect/spawner/random/clothing, +/obj/effect/spawner/random/clothing, +/obj/effect/spawner/random/clothing, +/obj/effect/turf_decal/tile/dark/diagonal_edge, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"ag" = ( +/obj/machinery/mineral/stacking_machine{ + input_dir = 2 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/workroom) +"ai" = ( +/obj/machinery/power/tracker, +/obj/structure/cable, +/turf/open/floor/iron/solarpanel/airless, +/area/ruin/solars/hotel/solars) +"aj" = ( +/obj/structure/chair/greyscale{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"al" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/pool) +"am" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/hotel) +"ap" = ( +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"aq" = ( +/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"ar" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/grunge{ + name = "Hotel Staff Storage" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/hotel/workroom) +"as" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/closet, +/obj/machinery/button/curtain{ + id = "HotelRoom3Curtains"; + pixel_y = 23 + }, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"at" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"au" = ( +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/workroom) +"av" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"aw" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 6 + }, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"aA" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/curtain/cloth/fancy/mechanical{ + icon_state = "bounty-open"; + icon_type = "bounty"; + id = "HotelRoom3Curtains"; + name = "curtain" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"aB" = ( +/obj/machinery/power/smes/magical, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"aC" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"aD" = ( +/obj/structure/table/wood, +/obj/item/storage/fancy/candle_box/amber, +/obj/effect/spawner/random/entertainment/lighter, +/obj/item/wrench, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"aF" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/glass/bottle/champagne, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"aG" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"aH" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"aI" = ( +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"aK" = ( +/obj/structure/chair/comfy/black{ + dir = 1 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"aL" = ( +/obj/machinery/airalarm/directional/north{ + pixel_y = 24 + }, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/structure/rack, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"aM" = ( +/obj/item/paper/pamphlet/ruin/spacehotel, +/obj/item/paper/pamphlet/ruin/spacehotel, +/obj/item/paper/pamphlet/ruin/spacehotel, +/obj/item/paper/pamphlet/ruin/spacehotel, +/obj/structure/table/glass, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"aN" = ( +/obj/machinery/computer/teleporter{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"aP" = ( +/obj/machinery/teleport/station, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"aQ" = ( +/obj/machinery/teleport/hub, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"aS" = ( +/obj/structure/chair/sofa/corp{ + dir = 1 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"aT" = ( +/obj/effect/spawner/random/vending/snackvend, +/obj/machinery/light, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"aV" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -30 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/carpet/neon/simple/black/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"aW" = ( +/obj/machinery/airalarm/directional/north{ + pixel_y = 24 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"aZ" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/pool) +"ba" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"bb" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"bk" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/indestructible/hotelwood, +/area/ruin/space/has_grav/hotel/pool) +"bq" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/entertainment/lighter, +/obj/item/wrench, +/obj/item/storage/fancy/candle_box/amber, +/turf/open/floor/carpet/neon/simple/black/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"by" = ( +/obj/structure/table/wood/fancy/green, +/obj/item/reagent_containers/cup/glass/mug/nanotrasen, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"bE" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"bH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"bN" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"bP" = ( +/obj/effect/turf_decal/siding/blue, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"bQ" = ( +/obj/structure/chair/sofa/corp/left, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"bV" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green, +/turf/open/floor/carpet/neon/simple/black/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"bW" = ( +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"bZ" = ( +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"cb" = ( +/obj/structure/table, +/obj/structure/bedsheetbin, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"cc" = ( +/obj/machinery/washing_machine, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"cd" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/maintenance{ + name = "Hotel Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"ce" = ( +/obj/structure/closet/crate/bin, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"cf" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"cj" = ( +/obj/machinery/vending/boozeomat/cafe, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"ck" = ( +/obj/structure/cable, +/obj/machinery/light_switch{ + pixel_y = 24 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/workroom) +"cl" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"co" = ( +/obj/item/kirbyplants/random, +/obj/machinery/airalarm/directional/north{ + pixel_y = 24 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"cp" = ( +/obj/structure/bed/double, +/obj/item/bedsheet/random/double, +/obj/machinery/button/curtain{ + id = "HotelRoom6Curtains"; + pixel_x = 24 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"cq" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 10 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"cr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"cu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"cw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"cy" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"cC" = ( +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/sink/directional/south, +/obj/structure/cable, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel/pool) +"cE" = ( +/obj/effect/turf_decal/tile/green, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"cJ" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"cL" = ( +/obj/effect/turf_decal/tile/dark_red/diagonal_edge, +/obj/effect/turf_decal/siding/dark_red{ + dir = 9 + }, +/obj/structure/urinal/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"cO" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -30 + }, +/obj/machinery/light{ + dir = 8; + light_color = "#e8eaff" + }, +/obj/structure/dresser, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"cP" = ( +/obj/machinery/vending/dorms, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"cR" = ( +/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/ruin/space/has_grav/hotel/workroom) +"cZ" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"dd" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"dg" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"di" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/hotel/workroom) +"dl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"dm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"do" = ( +/obj/structure/closet/wardrobe/mixed, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"dr" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"ds" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/obj/item/radio/headset/headset_faction, +/obj/item/radio/headset/headset_faction, +/obj/item/radio/headset/headset_faction, +/obj/item/radio/headset/headset_faction, +/obj/item/radio/headset/headset_faction, +/obj/item/radio/headset/headset_faction, +/obj/item/radio/headset/headset_faction, +/obj/item/radio/headset/headset_faction, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"dv" = ( +/obj/item/reagent_containers/cup/rag, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"dx" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"dz" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/spawner/random/entertainment/lighter, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"dA" = ( +/obj/machinery/chem_master/condimaster, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"dE" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"dF" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"dH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"dI" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"dJ" = ( +/obj/structure/rack, +/obj/effect/spawner/random/clothing/costume, +/obj/effect/spawner/random/clothing/costume, +/obj/effect/spawner/random/clothing/costume, +/obj/effect/spawner/random/clothing/costume, +/obj/effect/spawner/random/clothing/costume, +/obj/effect/turf_decal/tile/dark/diagonal_edge, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"dM" = ( +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/ruin/space/has_grav/hotel/bar) +"dN" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/hotel/guestroom) +"dP" = ( +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"dR" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/structure/toilet{ + dir = 1 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"dT" = ( +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"dV" = ( +/obj/structure/table, +/obj/item/food/mint, +/obj/item/kitchen/rollingpin, +/obj/item/cutting_board, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"dY" = ( +/obj/structure/table/wood, +/obj/item/stamp{ + pixel_x = 7; + pixel_y = 9 + }, +/obj/item/stamp/denied{ + pixel_x = 7; + pixel_y = 4 + }, +/obj/item/clipboard{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -30 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/workroom) +"ea" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/pool) +"eb" = ( +/turf/open/floor/engine/n2, +/area/ruin/space/has_grav/hotel/power) +"ec" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"ed" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"ee" = ( +/obj/item/storage/medkit/fire, +/obj/item/storage/medkit/fire{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/structure/table, +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"ei" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/sauna) +"el" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/closet/secure_closet/freezer/meat{ + req_access = list("twin_nexus_staff") + }, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/ruin/space/has_grav/hotel/bar) +"em" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/cable, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"en" = ( +/obj/structure/grille, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/custodial) +"ep" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"es" = ( +/obj/machinery/atmospherics/pipe/smart/simple/supply/visible{ + dir = 9 + }, +/obj/machinery/power/solar_control{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 6 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"et" = ( +/obj/effect/turf_decal/tile/dark/diagonal_edge, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"ev" = ( +/obj/structure/chair/stool/bar, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"ex" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/carpet/green, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"ey" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"ez" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"eA" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"eE" = ( +/obj/effect/spawner/liquids_spawner, +/turf/open/floor/iron/pool, +/area/ruin/space/has_grav/hotel/guestroom) +"eF" = ( +/obj/structure/disposaloutlet{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/workroom) +"eG" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/hotel/dock) +"eH" = ( +/obj/structure/table/glass, +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = 6; + pixel_y = 5 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"eJ" = ( +/obj/machinery/door/airlock/external/glass, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/power) +"eN" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Hotel Maintenance" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel) +"eO" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"eP" = ( +/obj/effect/turf_decal/siding/green, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"eQ" = ( +/obj/machinery/airalarm/directional/north{ + pixel_y = 24 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"eR" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"eS" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/pool) +"eT" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/pool) +"eU" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"eV" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/dark_blue, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"eY" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"fa" = ( +/obj/structure/sign/warning/no_smoking/circle/directional/north, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/structure/rack, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"fb" = ( +/obj/machinery/airalarm/directional/west, +/obj/structure/sink/directional/east, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom) +"fd" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"fe" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"fg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"fh" = ( +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"fi" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/hotel/bar) +"fj" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Hotel 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/all/twin_nexus_staff, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/bar) +"fl" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/pool) +"fo" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"fq" = ( +/obj/machinery/vending/cigarette, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"fs" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/effect/turf_decal/tile/dark/opposingcorners, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"fu" = ( +/obj/structure/table/glass, +/obj/item/paper/pamphlet/ruin/spacehotel, +/obj/item/paper/pamphlet/ruin/spacehotel, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"fw" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 4 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"fy" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 1 + }, +/obj/machinery/button/curtain{ + id = "HotelRoom5Curtains"; + pixel_x = 24 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"fz" = ( +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"fA" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 4 + }, +/turf/open/floor/engine/air, +/area/ruin/space/has_grav/hotel/power) +"fB" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/engine/air, +/area/ruin/space/has_grav/hotel/power) +"fC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"fE" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"fF" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -30 + }, +/obj/effect/turf_decal/siding/dark_green{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"fH" = ( +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"fI" = ( +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"fK" = ( +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"fR" = ( +/obj/machinery/door/airlock/grunge{ + name = "Bar Backroom" + }, +/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"fS" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/structure/cable, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"fY" = ( +/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/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"gb" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"gd" = ( +/obj/structure/chair/sofa/corp/corner, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"ge" = ( +/obj/structure/window/reinforced/spawner/directional/north{ + layer = 2.9 + }, +/obj/structure/table/glass, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"gh" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"gi" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"gj" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/cyan{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"gk" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark_red/diagonal_edge, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"gl" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"gn" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 10 + }, +/obj/effect/turf_decal/tile/dark_red/diagonal_edge, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"gp" = ( +/obj/structure/table/glass, +/obj/machinery/reagentgrinder, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"gq" = ( +/obj/structure/sign/warning/electric_shock, +/turf/closed/wall, +/area/ruin/space/has_grav/hotel/power) +"gr" = ( +/obj/structure/table, +/obj/item/storage/medkit/toxin, +/obj/item/storage/medkit/toxin{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"gs" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/item/paper/pamphlet/ruin/spacehotel, +/obj/item/paper/pamphlet/ruin/spacehotel, +/obj/item/paper/pamphlet/ruin/spacehotel, +/obj/item/paper/pamphlet/ruin/spacehotel, +/obj/item/paper/pamphlet/ruin/spacehotel, +/obj/structure/table/glass, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"gt" = ( +/obj/structure/table/glass, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/button/door{ + id = "HotelRoom8"; + name = "Guest Door Lock"; + normaldoorcontrol = 1; + pixel_y = 2; + specialfunctions = 4 + }, +/obj/structure/window/reinforced/spawner/directional/north{ + layer = 2.9 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"gv" = ( +/obj/effect/mob_spawn/ghost_role/human/hotel_staff, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"gw" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"gy" = ( +/obj/structure/sink/directional/north, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"gB" = ( +/obj/structure/closet/crate/freezer, +/obj/item/food/meat/slab/human/mutant/plant, +/obj/item/food/meat/slab/human/mutant/plant, +/obj/item/food/meat/slab/human/mutant/lizard, +/obj/item/food/meat/slab/human/mutant/lizard, +/obj/item/food/meat/slab/xeno, +/obj/item/food/meat/slab/xeno, +/obj/item/food/meat/slab/pug, +/obj/item/food/meat/slab/pug, +/obj/item/food/meat/slab/pug, +/obj/item/food/meat/slab/pug, +/obj/item/food/meat/slab/pug, +/obj/item/food/meat/slab/pug, +/obj/item/food/meat/slab/pug, +/obj/item/food/meat/slab/bear, +/obj/item/food/meat/slab/bear, +/obj/item/food/meat/slab/bear, +/obj/item/food/meat/slab/bear, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/ruin/space/has_grav/hotel/bar) +"gE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/workroom) +"gF" = ( +/obj/structure/chair/sofa/corp/right, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"gG" = ( +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"gH" = ( +/obj/machinery/airalarm/directional/north{ + pixel_y = 24 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"gI" = ( +/obj/structure/chair/sofa/corp/left, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"gJ" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = -30 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"gK" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/hotel/power) +"gL" = ( +/obj/item/kirbyplants/random, +/obj/machinery/airalarm/directional/north{ + pixel_y = 24 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"gM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel/custodial) +"gO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"gV" = ( +/obj/structure/table/wood/fancy/green, +/obj/item/newspaper{ + pixel_x = -9; + pixel_y = 12 + }, +/obj/item/paper_bin{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/pen/fountain, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"gX" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/sauna) +"ha" = ( +/obj/structure/mirror{ + pixel_y = -32 + }, +/obj/structure/table, +/obj/item/gun/energy/e_gun/mini{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/gun/energy/e_gun/mini{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/recharger, +/obj/item/restraints/handcuffs, +/obj/effect/turf_decal/siding/dark_blue, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"hb" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -30 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/pool) +"hc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"he" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"hk" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 6 + }, +/obj/effect/turf_decal/tile/dark_red/diagonal_edge, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"hl" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"hm" = ( +/obj/structure/dresser, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"hn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel/pool) +"ho" = ( +/obj/structure/rack, +/obj/effect/spawner/random/clothing/beret_or_rabbitears, +/obj/effect/spawner/random/clothing/beret_or_rabbitears, +/obj/effect/spawner/random/clothing/beret_or_rabbitears, +/obj/effect/spawner/random/clothing/beret_or_rabbitears, +/obj/effect/spawner/random/clothing/beret_or_rabbitears, +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark/diagonal_edge, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"hp" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"hq" = ( +/obj/structure/table/glass, +/obj/item/paper/pamphlet/ruin/spacehotel, +/obj/item/paper/pamphlet/ruin/spacehotel, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel) +"hr" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"hs" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"hu" = ( +/obj/machinery/chem_dispenser/drinks/fullupgrade{ + dir = 4 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"hv" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/coffeemaker, +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/mug/nanotrasen{ + pixel_y = -9 + }, +/obj/item/coffee_cartridge/fancy{ + pixel_x = 10; + pixel_y = -7 + }, +/obj/machinery/button/door{ + id = "HotelRoom5"; + name = "Guest Door Lock"; + normaldoorcontrol = 1; + pixel_y = -30; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"hw" = ( +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"hx" = ( +/obj/machinery/airalarm/directional/west, +/obj/machinery/light_switch{ + pixel_y = -24 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"hy" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/closet/secure_closet/personal, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"hA" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"hB" = ( +/obj/structure/chair/sofa/corp{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"hC" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"hE" = ( +/obj/structure/cable, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"hF" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"hH" = ( +/obj/machinery/atmospherics/pipe/smart/simple/supply/visible, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"hJ" = ( +/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ + dir = 4 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"hK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/purple{ + dir = 9 + }, +/obj/effect/decal/cleanable/cobweb, +/mob/living/basic/bot/cleanbot, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"hL" = ( +/obj/machinery/airalarm/directional/north{ + pixel_y = 24 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"hO" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/ruin/space/has_grav/hotel/pool) +"hP" = ( +/obj/item/bikehorn/rubberducky, +/obj/effect/spawner/liquids_spawner, +/turf/open/floor/iron/pool, +/area/ruin/space/has_grav/hotel/pool) +"hQ" = ( +/obj/structure/chair/sofa/corp{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"hS" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"hT" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"hX" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/airalarm/directional/north{ + pixel_y = 24 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"hY" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/door/airlock, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"hZ" = ( +/obj/effect/turf_decal/siding/green{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"id" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/toy/crayon/spraycan, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/coffee_cartridge/decaf{ + pixel_x = -7 + }, +/obj/item/coffee_cartridge/fancy{ + pixel_x = -7; + pixel_y = 9 + }, +/obj/item/reagent_containers/cup/glass/mug/nanotrasen{ + pixel_x = 6; + pixel_y = 10 + }, +/obj/machinery/button/door{ + id = "HotelRoom3"; + name = "Guest Door Lock"; + normaldoorcontrol = 1; + pixel_y = -30; + specialfunctions = 4 + }, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"if" = ( +/obj/structure/bed, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/pool) +"ih" = ( +/obj/machinery/light/floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"ii" = ( +/obj/structure/sink/directional/east, +/obj/structure/mirror{ + pixel_x = -31; + pixel_y = -3 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"ij" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Hotel Maintenance" + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/bar) +"il" = ( +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"im" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/multi_tile/public/glass{ + dir = 4; + id_tag = "HotelRoom8" + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"in" = ( +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"is" = ( +/obj/machinery/door/airlock/external/glass, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/power) +"it" = ( +/obj/structure/cable, +/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/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"iu" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"iv" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/trinary/filter/atmos/o2, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"iw" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 10 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"ix" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"iy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock{ + name = "Bathroom" + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"iz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"iA" = ( +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"iC" = ( +/obj/machinery/light, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"iK" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/engineering{ + name = "Power Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel/power) +"iL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"iM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"iN" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ + dir = 10 + }, +/obj/effect/turf_decal/siding/wideplating_new/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 4 + }, +/obj/structure/fireaxecabinet/empty/directional/east, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"iO" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"iP" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 4 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"iQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"iS" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"iX" = ( +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/dresser, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/machinery/light/floor, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel/pool) +"iZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"jb" = ( +/obj/structure/displaycase/trophy, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"jc" = ( +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"jd" = ( +/obj/machinery/vending/snack, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"je" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/chair/sofa/corp/corner{ + dir = 1 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"jf" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -30 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/pool) +"ji" = ( +/obj/item/reagent_containers/cup/glass/shaker, +/obj/item/reagent_containers/cup/rag, +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"jm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/neon/simple/black/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"jo" = ( +/obj/structure/table/wood/fancy/green, +/obj/effect/spawner/random/food_or_drink/three_course_meal, +/obj/item/kitchen/fork{ + pixel_x = -12; + pixel_y = 4 + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"jq" = ( +/obj/machinery/light/floor, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"jw" = ( +/obj/machinery/door/airlock/public/glass, +/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, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"jy" = ( +/obj/structure/chair/sofa/corp{ + dir = 1 + }, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"jz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"jA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"jD" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"jE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/custodial) +"jF" = ( +/obj/item/kirbyplants/random, +/obj/structure/extinguisher_cabinet{ + pixel_x = -30 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"jG" = ( +/obj/structure/table, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/item/lightreplacer, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"jH" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"jJ" = ( +/obj/structure/mop_bucket/janitorialcart, +/obj/item/mop, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"jK" = ( +/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/siding/wood, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"jL" = ( +/obj/structure/table, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"jO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel/custodial) +"jP" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"jQ" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/hotel/pool) +"jU" = ( +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/sink/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel/pool) +"jY" = ( +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/pool) +"jZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"kb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/workroom) +"kc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"ke" = ( +/obj/machinery/gibber, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/ruin/space/has_grav/hotel/bar) +"kg" = ( +/obj/structure/sink/directional/north, +/obj/machinery/airalarm/directional/west, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"kh" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"kj" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"kk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"kl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"km" = ( +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"kn" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"kq" = ( +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"kr" = ( +/obj/machinery/atmospherics/components/trinary/mixer/airmix/flipped, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"kt" = ( +/obj/machinery/door/airlock/wood{ + name = "Private Sauna" + }, +/obj/structure/fans/tiny, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom) +"ku" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/pump, +/obj/item/wrench, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"kv" = ( +/obj/structure/table, +/obj/item/storage/toolbox/electrical, +/obj/item/clothing/gloves/color/yellow, +/obj/item/multitool, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/cable, +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 5 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"kw" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/carpet/green, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"kx" = ( +/turf/closed/wall/mineral/wood, +/area/ruin/space/has_grav/hotel/sauna) +"ky" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"kz" = ( +/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel) +"kA" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"kB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"kC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel/custodial) +"kD" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"kF" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -30 + }, +/obj/structure/dresser, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"kH" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/hotel/power) +"kI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/hotel/power) +"kK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/purple, +/obj/machinery/vending/wardrobe/jani_wardrobe, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"kL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/keyed/hotel_room/two{ + id_tag = "HotelRoom2" + }, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"kM" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/bucket, +/obj/item/reagent_containers/spray/cleaner, +/obj/effect/turf_decal/siding/purple, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"kN" = ( +/obj/structure/table, +/obj/item/storage/bag/trash, +/obj/effect/turf_decal/siding/purple, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"kO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"kP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/airalarm/directional/north{ + pixel_y = 24 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"kR" = ( +/obj/machinery/atmospherics/miner/oxygen, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/engine/o2, +/area/ruin/space/has_grav/hotel/power) +"kT" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"kU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel/pool) +"kW" = ( +/obj/structure/table, +/obj/item/clothing/suit/apron, +/obj/item/clothing/suit/apron, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/siding/green{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"kX" = ( +/obj/machinery/door/airlock/external, +/obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/dock) +"kY" = ( +/obj/machinery/airalarm/directional/west, +/obj/structure/bed/double{ + dir = 4 + }, +/obj/item/bedsheet/random/double{ + dir = 1 + }, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"kZ" = ( +/obj/effect/mob_spawn/ghost_role/human/hotel_staff{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 30 + }, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"la" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"lb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_green/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"lc" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/sauna) +"le" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/sauna) +"lf" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/sauna) +"lg" = ( +/obj/structure/table/glass, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"lh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"ll" = ( +/obj/machinery/light_switch{ + pixel_y = 24 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/sauna) +"ln" = ( +/obj/machinery/airalarm/directional/north{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/pool) +"lp" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 4; + name = "O2 Outlet Pump" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 10 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"lr" = ( +/obj/structure/sauna_oven{ + fuel_amount = -1; + water_amount = -1 + }, +/obj/item/stack/sheet/mineral/wood/fifty, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/sauna) +"lx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/indestructible/hotelwood, +/area/ruin/space/has_grav/hotel/pool) +"lz" = ( +/obj/machinery/airalarm/directional/north{ + pixel_y = 24 + }, +/obj/effect/turf_decal/siding/dark, +/obj/machinery/vending/autodrobe/all_access, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"lA" = ( +/obj/machinery/atmospherics/components/binary/volume_pump, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wideplating_new/end, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"lD" = ( +/obj/machinery/door/window/left{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"lF" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/keyed/hotel_room/six{ + id_tag = "HotelRoom6" + }, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"lK" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"lL" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"lN" = ( +/obj/machinery/light/floor, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"lO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"lP" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -30 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"lQ" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/template_noop, +/area/ruin/solars/hotel/solars) +"lS" = ( +/obj/structure/table/wood, +/obj/structure/bedsheetbin, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/sauna) +"lT" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table/glass, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"lU" = ( +/obj/machinery/airalarm/directional/north{ + pixel_y = 24 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/sauna) +"lX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"ma" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"mb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/workroom) +"mc" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"md" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/hotel/custodial) +"me" = ( +/obj/structure/mineral_door/wood, +/obj/structure/fans/tiny, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/sauna) +"mi" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"mj" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/closet/secure_closet/personal/wall{ + pixel_y = 28 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/pool) +"mk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/pool) +"ml" = ( +/obj/machinery/light/small, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/sauna) +"mn" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 30 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"mq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"mr" = ( +/obj/machinery/airalarm/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"ms" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/button/door{ + id = "HotelRoom1"; + name = "Guest Door Lock"; + normaldoorcontrol = 1; + pixel_y = 31; + specialfunctions = 4 + }, +/turf/open/floor/carpet/neon/simple/black/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"mt" = ( +/obj/structure/chair/pew{ + dir = 8; + pixel_x = 5 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/sauna) +"mu" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"mx" = ( +/obj/machinery/door/airlock{ + name = "Custodial Closet" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/custodial) +"mA" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel) +"mD" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"mE" = ( +/obj/item/kirbyplants{ + icon_state = "plant-25" + }, +/obj/effect/turf_decal/siding/purple{ + dir = 10 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"mF" = ( +/obj/structure/grille, +/obj/structure/lattice, +/turf/template_noop, +/area/template_noop) +"mG" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"mH" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"mI" = ( +/obj/machinery/light/floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"mJ" = ( +/obj/item/kirbyplants/random, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"mL" = ( +/obj/structure/closet/crate, +/obj/item/bedsheet/patriot, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"mM" = ( +/obj/machinery/light, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/pool) +"mN" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/pool) +"mO" = ( +/obj/structure/table, +/obj/item/reagent_containers/spray/cleaner, +/obj/effect/turf_decal/siding/blue{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"mP" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/sauna) +"mQ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"mR" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"mT" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/carpet/neon/simple/black/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"mX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"mY" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"nc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/coffeemaker, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"nf" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"nh" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"ni" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"nj" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"nk" = ( +/obj/structure/chair/greyscale, +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"nl" = ( +/obj/machinery/door/airlock/external, +/obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/dock) +"nr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/item/kirbyplants/random, +/obj/machinery/light_switch{ + pixel_y = -24 + }, +/turf/open/floor/carpet/green, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"nt" = ( +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"nx" = ( +/obj/structure/chair/greyscale, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"nC" = ( +/obj/structure/bed/double, +/obj/item/bedsheet/random/double, +/obj/machinery/button/curtain{ + id = "HotelRoom2Curtains"; + pixel_x = 22; + pixel_y = 1 + }, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"nD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"nJ" = ( +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/rods{ + amount = 60 + }, +/obj/item/stack/sheet/plasteel/twenty, +/obj/item/stack/sheet/rglass{ + amount = 50 + }, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"nL" = ( +/obj/machinery/light{ + dir = 8; + light_color = "#e8eaff" + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom) +"nN" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"nO" = ( +/obj/structure/decorative/shelf/alcohol_small, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"nQ" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"nS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/table, +/obj/item/storage/toolbox/mechanical, +/obj/machinery/light_switch{ + pixel_y = 24 + }, +/obj/item/clothing/head/utility/welding, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 1 + }, +/obj/item/storage/belt/utility, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"nU" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/engine/air, +/area/ruin/space/has_grav/hotel/power) +"nW" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/door/airlock{ + name = "Unisex Changing" + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/pool) +"nX" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"nZ" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/oxygen_input{ + dir = 4 + }, +/turf/open/floor/engine/n2, +/area/ruin/space/has_grav/hotel/power) +"oa" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/item/cigbutt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/north{ + pixel_y = 24 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/workroom) +"oe" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"ok" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"ol" = ( +/obj/machinery/light/floor, +/obj/effect/turf_decal/siding/dark/end{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"op" = ( +/obj/structure/noticeboard{ + pixel_x = -33 + }, +/obj/structure/table, +/obj/machinery/microwave, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"or" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"os" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"ov" = ( +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/hotel/dock) +"oA" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel/pool) +"oD" = ( +/obj/machinery/seed_extractor, +/obj/effect/turf_decal/siding/green, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"oF" = ( +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"oH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"oI" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/light, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"oK" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/hotel) +"oM" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line, +/obj/effect/turf_decal/siding/wood, +/turf/open/indestructible/hotelwood, +/area/ruin/space/has_grav/hotel/pool) +"oT" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/ruin/space/has_grav/hotel/bar) +"oV" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"oW" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/flashlight/lamp/green, +/obj/machinery/button/curtain{ + id = "HotelRoom1Curtains"; + pixel_x = -21 + }, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"oX" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/curtain/cloth/fancy/mechanical{ + icon_state = "bounty-open"; + icon_type = "bounty"; + id = "HotelRoom6Curtains"; + name = "curtain" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"oZ" = ( +/obj/structure/table, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/pool) +"pa" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"pc" = ( +/mob/living/basic/bat{ + desc = "Fronk's the beloved space bat of the space hotel, if found make sure to return him!"; + name = "Fronk" + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/workroom) +"pe" = ( +/obj/structure/chair/sofa/corp/corner{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"pf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"pk" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/custodial) +"po" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/closet/secure_closet/personal/wall{ + pixel_y = 28 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/pool) +"pA" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"pC" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"pE" = ( +/obj/structure/closet, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"pH" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"pI" = ( +/obj/effect/turf_decal/tile/dark_red/diagonal_edge, +/obj/effect/turf_decal/siding/dark_red, +/obj/effect/turf_decal/siding/dark_red{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"pK" = ( +/obj/structure/cable, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"pL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/closet/secure_closet/personal/cabinet, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"pM" = ( +/obj/structure/chair/pew/left{ + dir = 1 + }, +/obj/machinery/light_switch{ + pixel_y = -24 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom) +"pN" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line, +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/caution/blue{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/ruin/space/has_grav/hotel/pool) +"pR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"pS" = ( +/obj/structure/holopay, +/obj/effect/turf_decal/bot_blue, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/hotel) +"pV" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel/pool) +"pX" = ( +/obj/effect/turf_decal/siding/dark_green{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"qd" = ( +/obj/structure/hedge, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"qf" = ( +/obj/structure/table, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/crowbar, +/obj/item/folded_navigation_gigabeacon, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"qh" = ( +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"qi" = ( +/obj/effect/turf_decal/siding/blue, +/obj/machinery/light, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"qj" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/pool) +"ql" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/carpet/green, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"qo" = ( +/obj/machinery/smartfridge, +/obj/effect/turf_decal/siding/green{ + dir = 10 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"qq" = ( +/obj/machinery/airalarm/directional/south{ + pixel_y = -24 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"qr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel/pool) +"qs" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/engine/n2, +/area/ruin/space/has_grav/hotel/power) +"qv" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"qx" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/closet/secure_closet/personal/cabinet, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"qA" = ( +/obj/machinery/hydroponics/constructable, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"qB" = ( +/obj/structure/closet/l3closet/janitor, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"qG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"qI" = ( +/obj/effect/spawner/structure/window/reinforced/no_firelock, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel) +"qN" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/ruin/space/has_grav/hotel/pool) +"qQ" = ( +/obj/structure/table, +/obj/item/storage/medkit/regular{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/storage/medkit/regular, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel) +"qS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"qU" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"qV" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/ruin/space/has_grav/hotel/pool) +"qX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock{ + name = "Bathroom" + }, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"qY" = ( +/obj/structure/kitchenspike, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/ruin/space/has_grav/hotel/bar) +"qZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet/green, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"rd" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/curtain/cloth/fancy/mechanical{ + icon_state = "bounty-open"; + icon_type = "bounty"; + id = "HotelRoom7Curtains2"; + name = "curtain" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/guestroom) +"rg" = ( +/obj/structure/cable, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel/pool) +"rh" = ( +/obj/structure/chair/sofa/corp{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"rl" = ( +/obj/structure/sink/directional/south, +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/effect/turf_decal/siding/dark_red{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark_red{ + dir = 5 + }, +/obj/effect/turf_decal/tile/dark_red/diagonal_edge, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"rn" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"ro" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"rp" = ( +/obj/effect/turf_decal/siding/green{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"rr" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet/green, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"rw" = ( +/obj/effect/turf_decal/siding/dark, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"ry" = ( +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"rB" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/light{ + dir = 4 + }, +/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/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"rC" = ( +/obj/item/kirbyplants/random, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/carpet/neon/simple/black/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"rD" = ( +/obj/machinery/light_switch{ + pixel_y = -24 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"rE" = ( +/obj/item/flashlight/lamp/green, +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"rG" = ( +/obj/structure/table/wood/fancy/green, +/obj/item/modular_computer/laptop, +/obj/item/phone{ + pixel_x = 9; + pixel_y = 10 + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"rI" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/chem_dispenser/drinks/fullupgrade{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"rL" = ( +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/bin, +/obj/machinery/airalarm/directional/north{ + pixel_y = 24 + }, +/obj/effect/turf_decal/siding/purple{ + dir = 5 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"rP" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"rR" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/ruin/space/has_grav/hotel/pool) +"rT" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/workroom) +"rU" = ( +/obj/machinery/door/airlock/grunge{ + name = "Hotel Medical Storage" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"rV" = ( +/obj/machinery/modular_computer/preset/civilian{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/carpet/executive, +/area/ruin/space/has_grav/hotel/workroom) +"rW" = ( +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/pool) +"rY" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Gift Shop" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"sa" = ( +/obj/structure/chair/comfy/black, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"sb" = ( +/obj/machinery/vending/wallmed{ + pixel_x = -32 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"sc" = ( +/obj/structure/reagent_dispensers/watertank/high, +/obj/item/stack/sheet/mineral/wood/fifty, +/obj/item/stack/sheet/mineral/wood/fifty, +/obj/item/reagent_containers/cup/bucket/wooden, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom) +"sd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"se" = ( +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom) +"sf" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/hotel/dock) +"sg" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/bottle/whiskey{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = 7; + pixel_y = 5 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = 7; + pixel_y = 12 + }, +/turf/open/floor/carpet/executive, +/area/ruin/space/has_grav/hotel/workroom) +"sh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"sj" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/green, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"sm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/green, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"so" = ( +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"sr" = ( +/obj/item/soap/deluxe, +/obj/machinery/shower/directional/north, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"ss" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"st" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/chair/sofa/corp/corner{ + dir = 1 + }, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"sA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 6 + }, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"sC" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"sD" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel) +"sE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"sK" = ( +/turf/open/floor/engine/air, +/area/ruin/space/has_grav/hotel/power) +"sN" = ( +/obj/structure/grille, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/hotel/power) +"sS" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"sT" = ( +/obj/structure/chair/stool/bar, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"sU" = ( +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"sX" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/carpet/green, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"sZ" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/carpet/executive, +/area/ruin/space/has_grav/hotel/workroom) +"tb" = ( +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/siding/dark_green{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"td" = ( +/obj/structure/chair/sofa/corp{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"th" = ( +/obj/machinery/door/airlock, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"ti" = ( +/obj/structure/drain/big, +/obj/machinery/shower/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel/pool) +"tl" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"ty" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/ruin/space/has_grav/hotel/bar) +"tB" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wideplating_new/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"tC" = ( +/obj/structure/table/glass, +/obj/item/paper/pamphlet/ruin/spacehotel, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"tK" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"tN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"tP" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/storage/fancy/candle_box/pear, +/obj/item/storage/fancy/candle_box/vanilla, +/obj/effect/spawner/random/entertainment/lighter, +/obj/item/wrench, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"tQ" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark/diagonal_edge, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"tS" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/carpet/executive, +/area/ruin/space/has_grav/hotel/workroom) +"tU" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"tW" = ( +/obj/effect/turf_decal/siding/dark/corner, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/hotel) +"tX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark/diagonal_edge, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"ud" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"ug" = ( +/obj/structure/sink/kitchen/directional/south, +/obj/effect/turf_decal/siding/dark_green{ + dir = 5 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"ui" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 4 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"uj" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/dark, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"ul" = ( +/obj/structure/cable, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"um" = ( +/obj/structure/chair/pew/right{ + dir = 8; + pixel_x = 5 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom) +"ur" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"us" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"uC" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/structure/window/reinforced/tinted/spawner/directional/west, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom) +"uD" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"uF" = ( +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/custodial) +"uJ" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "garbage" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/workroom) +"uM" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel) +"uN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"uO" = ( +/obj/structure/table/glass, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"uQ" = ( +/obj/structure/closet, +/obj/item/tickle_feather, +/obj/item/kinky_shocker, +/obj/item/storage/medkit/regular, +/obj/item/clothing/sextoy/buttplug{ + pixel_y = 4 + }, +/obj/item/clothing/sextoy/dildo{ + pixel_x = -6; + pixel_y = 7 + }, +/obj/item/spanking_pad, +/obj/item/clothing/mask/leatherwhip, +/obj/item/condom_pack, +/obj/item/condom_pack, +/obj/item/condom_pack, +/obj/item/condom_pack, +/obj/item/electropack/shockcollar, +/obj/item/storage/box/strippole_kit, +/obj/item/wrench, +/obj/item/stack/shibari_rope/glow, +/obj/item/storage/box/shibari_stand, +/obj/item/stack/shibari_rope/glow/full, +/obj/item/storage/box/strippole_kit, +/obj/item/bdsm_candle, +/obj/item/bdsm_candle, +/obj/item/bdsm_candle, +/obj/item/bdsm_bed_kit, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"uR" = ( +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"uU" = ( +/obj/machinery/door/poddoor/massdriver_trash, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/workroom) +"uW" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"va" = ( +/obj/structure/table/wood/fancy/green, +/obj/item/reagent_containers/cup/glass/drinkingglass{ + pixel_x = -3 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass{ + pixel_x = -3; + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/glass/bottle/wine/unlabeled{ + pixel_x = 6; + pixel_y = 9 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"ve" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"vn" = ( +/obj/structure/table/glass, +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = 6; + pixel_y = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"vo" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = -30 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"vq" = ( +/obj/structure/grandfatherclock, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/workroom) +"vr" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/caution/blue{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/ruin/space/has_grav/hotel/pool) +"vt" = ( +/obj/machinery/airalarm/directional/south{ + pixel_y = -24 + }, +/obj/structure/sink/kitchen/directional/west, +/obj/effect/turf_decal/siding/green{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"vu" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"vw" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"vB" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"vG" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"vH" = ( +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom) +"vI" = ( +/obj/structure/table, +/obj/item/reagent_containers/condiment/soysauce, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"vK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/carpet/green, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"vN" = ( +/turf/open/floor/engine/o2, +/area/ruin/space/has_grav/hotel/power) +"vX" = ( +/obj/structure/bed/double{ + dir = 4 + }, +/obj/item/bedsheet/random/double{ + dir = 1 + }, +/turf/open/floor/carpet/neon/simple/black/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"vY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"wc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/dark_green{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"wd" = ( +/obj/item/kirbyplants/random, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"wm" = ( +/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/effect/turf_decal/siding/wideplating_new{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"wu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/pool) +"ww" = ( +/obj/structure/table/wood, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 6 + }, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"wx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark/diagonal_edge, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"wy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"wB" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/carpet/green, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"wC" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"wG" = ( +/obj/structure/bed/double, +/obj/item/bedsheet/random/double, +/obj/machinery/button/curtain{ + id = "HotelRoom7Curtains1"; + pixel_x = 24 + }, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"wH" = ( +/obj/item/hand_labeler, +/obj/item/stack/package_wrap, +/obj/structure/table/wood, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/workroom) +"wI" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"wK" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/grunge{ + name = "Hotel Staff Room" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel) +"wQ" = ( +/obj/structure/table/glass, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"wS" = ( +/obj/effect/mob_spawn/ghost_role/human/hotel_staff/manager{ + dir = 1 + }, +/turf/open/floor/carpet/executive, +/area/ruin/space/has_grav/hotel/workroom) +"wT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wideplating_new, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"wV" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"wZ" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/curtain/cloth/fancy/mechanical{ + icon_state = "bounty-open"; + icon_type = "bounty"; + id = "HotelRoom2Curtains"; + name = "curtain" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"xc" = ( +/obj/structure/dresser, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"xd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/workroom) +"xe" = ( +/obj/structure/chair/sofa/corp/right, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 6 + }, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"xi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/firecloset, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/custodial) +"xl" = ( +/obj/structure/sign/warning/vacuum/directional/south, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wideplating_new, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"xo" = ( +/obj/structure/closet/cabinet, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"xw" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/ruin/space/has_grav/hotel/pool) +"xx" = ( +/obj/machinery/shower/directional/east, +/obj/item/soap/deluxe, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"xz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"xD" = ( +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"xH" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/curtain/cloth/fancy/mechanical{ + icon_state = "bounty-open"; + icon_type = "bounty"; + id = "HotelRoom4Curtains"; + name = "curtain" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"xJ" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"xN" = ( +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/workroom) +"xR" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"xU" = ( +/obj/machinery/door/airlock{ + name = "Sauna" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/pool) +"xV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"xW" = ( +/obj/structure/sauna_oven{ + fuel_amount = -1; + water_amount = -1 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom) +"xX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"xZ" = ( +/obj/structure/disposalpipe/segment, +/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/grunge{ + name = "Manager's Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff/manager, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/hotel/workroom) +"ya" = ( +/obj/structure/chair/sofa/corp/corner{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"ye" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"yg" = ( +/obj/structure/tank_dispenser/oxygen, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"yi" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 5 + }, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"yk" = ( +/obj/machinery/door/airlock{ + name = "Unisex Changing" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/pool) +"yl" = ( +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"yp" = ( +/obj/effect/mob_spawn/ghost_role/human/hotel_staff{ + dir = 1 + }, +/obj/machinery/light, +/obj/effect/turf_decal/siding/dark_blue, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"ys" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 4 + }, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"yu" = ( +/obj/machinery/chem_master/condimaster{ + name = "CondiMaster Neo" + }, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/ruin/space/has_grav/hotel/bar) +"yv" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/siding/purple{ + dir = 6 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"yw" = ( +/obj/structure/closet/crate/bin, +/obj/structure/extinguisher_cabinet{ + pixel_y = -30 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"yy" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"yz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/door/airlock{ + name = "Bathroom" + }, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"yA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"yC" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"yE" = ( +/turf/open/floor/glass/reinforced, +/area/ruin/space/has_grav/hotel) +"yL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/hotel/power) +"yM" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/window/spawner/directional/north, +/obj/machinery/airalarm/directional/west, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"yT" = ( +/obj/structure/table/glass, +/obj/item/paper/pamphlet/ruin/spacehotel, +/obj/item/paper/pamphlet/ruin/spacehotel, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel) +"yU" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"yX" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"yZ" = ( +/obj/structure/table, +/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/effect/turf_decal/siding/blue{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"zj" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/hotel) +"zl" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/corner, +/turf/open/indestructible/hotelwood, +/area/ruin/space/has_grav/hotel/pool) +"zo" = ( +/obj/structure/decorative/shelf/alcohol_assortment, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"zp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"zr" = ( +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"zv" = ( +/obj/machinery/light_switch{ + pixel_x = 23 + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel/pool) +"zw" = ( +/obj/structure/table, +/obj/item/storage/medkit/o2, +/obj/item/storage/medkit/o2{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"zE" = ( +/obj/structure/closet/crate, +/obj/effect/turf_decal/bot, +/obj/item/clothing/head/cowboy/nova/cattleman{ + greyscale_colors = "#F2B0E7#EB88CB" + }, +/obj/item/clothing/head/cowboy/nova/cattleman{ + greyscale_colors = "#FFFFFF#FFFFFF" + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"zH" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Hotel Maintenance" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel) +"zP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/light, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/sauna) +"zQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"zR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"zS" = ( +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"zU" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 4 + }, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"zZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/table/wood, +/obj/item/coffee_cartridge/fancy{ + pixel_x = -7; + pixel_y = 9 + }, +/obj/item/coffee_cartridge/decaf{ + pixel_x = -7 + }, +/obj/item/reagent_containers/cup/glass/mug/nanotrasen{ + pixel_x = 6; + pixel_y = 10 + }, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"Ah" = ( +/obj/machinery/door/airlock/grunge{ + name = "Hydroponics" + }, +/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"Ai" = ( +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"Al" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/keyed/hotel_room/seven{ + id_tag = "HotelRoom7" + }, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/hotel/guestroom) +"Ao" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/key_card/hotel_room/master, +/turf/open/floor/carpet/executive, +/area/ruin/space/has_grav/hotel/workroom) +"Ap" = ( +/obj/effect/turf_decal/tile/dark_red/diagonal_edge, +/obj/effect/turf_decal/siding/dark_red/corner{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"Au" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"AA" = ( +/obj/structure/chair/stool/bar, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"AF" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/workroom) +"AG" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/siding/green{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"AI" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"AT" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/hotel/dock) +"AW" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/curtain/cloth/fancy/mechanical{ + icon_state = "bounty-open"; + icon_type = "bounty"; + id = "HotelRoom7Curtains1"; + name = "curtain" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/guestroom) +"AX" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"AY" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wideplating_new, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"AZ" = ( +/obj/machinery/light/floor, +/obj/effect/turf_decal/siding/thinplating_new/dark/end{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"Ba" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"Be" = ( +/obj/structure/closet/crate/hydroponics, +/obj/item/wirecutters, +/obj/item/reagent_containers/cup/bucket, +/obj/item/cultivator, +/obj/item/wrench, +/obj/item/shovel/spade, +/obj/item/gun/energy/floragun, +/obj/item/watertank, +/obj/effect/turf_decal/siding/green{ + dir = 5 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"Bk" = ( +/obj/structure/chair/sofa/corp/corner, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"Bn" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet/neon/simple/black/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"Bp" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"Bu" = ( +/obj/machinery/photocopier, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/workroom) +"Bx" = ( +/obj/structure/chair/stool, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/purple, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"By" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"BA" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north{ + pixel_y = 24 + }, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"BB" = ( +/obj/machinery/light/small, +/obj/effect/turf_decal/siding/purple, +/obj/structure/closet/crate/trashcart, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"BC" = ( +/obj/structure/table/glass, +/obj/machinery/door/window{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/structure/desk_bell, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"BF" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"BG" = ( +/obj/structure/reagent_dispensers/cooking_oil, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/ruin/space/has_grav/hotel/bar) +"BI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"BM" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/pool) +"BN" = ( +/obj/machinery/vending/imported, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"BO" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/effect/turf_decal/siding/dark_green{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"BP" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"BT" = ( +/obj/machinery/computer/cryopod/directional/north, +/obj/effect/turf_decal/tile/dark/opposingcorners, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"BU" = ( +/obj/machinery/light_switch{ + pixel_y = -24 + }, +/obj/effect/turf_decal/tile/dark/opposingcorners, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"BY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/carpet/neon/simple/black/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"Ca" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/siding/green{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"Cb" = ( +/obj/effect/mob_spawn/ghost_role/human/hotel_staff{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark_blue, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"Cc" = ( +/obj/machinery/door/airlock/grunge{ + name = "Kitchen" + }, +/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"Ce" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/workroom) +"Ci" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/filingcabinet, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"Cj" = ( +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"Cr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"Cs" = ( +/obj/machinery/airalarm/directional/north{ + pixel_y = 24 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"Cu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 9 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"Cv" = ( +/obj/structure/rack, +/obj/effect/spawner/random/clothing/costume, +/obj/effect/spawner/random/clothing/costume, +/obj/effect/spawner/random/clothing/costume, +/obj/effect/spawner/random/clothing/costume, +/obj/effect/spawner/random/clothing/costume, +/obj/machinery/light, +/obj/effect/turf_decal/tile/dark/diagonal_edge, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"Cw" = ( +/obj/machinery/airalarm/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/button/door{ + id = "HotelRoom7"; + name = "Guest Door Lock"; + normaldoorcontrol = 1; + pixel_y = -30; + specialfunctions = 4 + }, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"CC" = ( +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/dock) +"CD" = ( +/obj/machinery/vending/dinnerware, +/obj/effect/turf_decal/siding/dark_green{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"CI" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/hotel) +"CO" = ( +/obj/structure/cable, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"CQ" = ( +/obj/machinery/washing_machine, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"CT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock{ + name = "Bathroom" + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"CZ" = ( +/obj/effect/turf_decal/siding/dark_green/corner{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"Da" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel) +"Dd" = ( +/obj/structure/chair/greyscale, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"De" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark/corner, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/hotel) +"Df" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/keyed/hotel_room/one{ + id_tag = "HotelRoom1" + }, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"Dg" = ( +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"Dk" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/power) +"Dm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"Do" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/hotel/power) +"Dp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"Ds" = ( +/obj/machinery/light, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel/pool) +"Dt" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"Dv" = ( +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/sink/directional/south, +/obj/effect/turf_decal/siding/dark_red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_red/diagonal_edge, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"Dw" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"Dy" = ( +/obj/item/kirbyplants/random, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"DA" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/turf/open/floor/carpet/neon/simple/black/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"DB" = ( +/obj/structure/table/glass, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"DC" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 4 + }, +/turf/open/floor/engine/n2, +/area/ruin/space/has_grav/hotel/power) +"DF" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "garbage"; + name = "disposal conveyor" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/workroom) +"DH" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/workroom) +"DL" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"DM" = ( +/obj/structure/closet/crate, +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"DN" = ( +/obj/structure/sink/directional/north, +/obj/structure/window/reinforced/tinted/spawner/directional/west, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"DQ" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"DR" = ( +/obj/machinery/light_switch{ + pixel_y = 24 + }, +/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, +/turf/open/floor/carpet/neon/simple/black/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"DV" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"Ed" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/pool) +"Ef" = ( +/obj/structure/table/glass, +/obj/item/stack/package_wrap, +/obj/item/hand_labeler, +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/hotel) +"Eg" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"Ek" = ( +/obj/structure/reagent_dispensers/fueltank/large, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/workroom) +"En" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"Eq" = ( +/obj/structure/closet/crate, +/obj/effect/turf_decal/bot, +/obj/item/clothing/accessory/maidapron, +/obj/item/clothing/accessory/maidapron, +/obj/item/clothing/under/costume/maid, +/obj/item/clothing/under/costume/maid, +/obj/item/clothing/head/costume/nova/maid, +/obj/item/clothing/head/costume/nova/maid, +/obj/item/clothing/head/costume/maidheadband, +/obj/item/clothing/head/costume/maidheadband, +/obj/item/clothing/gloves/maid, +/obj/item/clothing/gloves/maid, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"Es" = ( +/obj/structure/cable, +/turf/open/floor/carpet/executive, +/area/ruin/space/has_grav/hotel/workroom) +"Eu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"EA" = ( +/obj/machinery/door/airlock{ + name = "Sauna" + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/pool) +"EC" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "garbage" + }, +/obj/machinery/door/poddoor/preopen{ + id = "Disposal Exit"; + name = "Disposal Exit Vent" + }, +/obj/structure/fans/tiny/invisible, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/workroom) +"EH" = ( +/obj/machinery/door/window/right/directional/east{ + req_access = list("twin_nexus_staff") + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"EI" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/power) +"EM" = ( +/obj/structure/closet/crate, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/pool) +"EP" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"ET" = ( +/obj/machinery/vending/imported/tiziran, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"EV" = ( +/obj/structure/closet/crate/freezer, +/obj/item/food/meat/slab/human/mutant/plant, +/obj/item/food/meat/slab/human/mutant/plant, +/obj/item/food/meat/slab/human/mutant/lizard, +/obj/item/food/meat/slab/human/mutant/lizard, +/obj/item/food/meat/slab/xeno, +/obj/item/food/meat/slab/xeno, +/obj/item/food/meat/slab/pug, +/obj/item/food/meat/slab/pug, +/obj/item/food/meat/slab/pug, +/obj/item/food/meat/slab/pug, +/obj/item/food/meat/slab/pug, +/obj/item/food/meat/slab/pug, +/obj/item/food/meat/slab/pug, +/obj/item/food/meat/slab/bear, +/obj/item/food/meat/slab/bear, +/obj/item/food/meat/slab/bear, +/obj/item/food/meat/slab/bear, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/ruin/space/has_grav/hotel/bar) +"EW" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"EX" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"Fc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 9 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"Fg" = ( +/obj/structure/cable, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel/pool) +"Fl" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"Fm" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/public/glass{ + dir = 4; + id_tag = "HotelRoom8" + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"Fr" = ( +/obj/machinery/button/curtain{ + id = "HotelRoom7Curtains2"; + pixel_x = 24 + }, +/obj/structure/chair/pew/left{ + dir = 8; + pixel_x = 5 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom) +"Ft" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 5 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"Fy" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel) +"Fz" = ( +/obj/structure/chair/sofa/corp, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"FJ" = ( +/obj/structure/sink/kitchen/directional/west, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/siding/dark_green{ + dir = 6 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"FK" = ( +/obj/machinery/light, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/sauna) +"FM" = ( +/obj/item/toy/cards/deck, +/obj/item/toy/cards/deck, +/obj/item/toy/cards/deck, +/obj/structure/closet/crate, +/obj/item/toy/cards/deck/kotahi, +/obj/item/toy/cards/deck/kotahi, +/obj/item/toy/cards/deck/tarot, +/obj/item/toy/cards/deck/tarot, +/obj/item/toy/cards/deck/cas/black, +/obj/item/toy/cards/deck/cas/black, +/obj/item/toy/cards/deck/cas/black, +/obj/item/toy/cards/deck/kotahi, +/obj/item/toy/cards/deck/tarot, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"FQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/carpet/green, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"FV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light, +/obj/effect/turf_decal/siding/dark_green, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"Ga" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green, +/obj/item/storage/fancy/candle_box/mint, +/obj/effect/spawner/random/entertainment/lighter, +/obj/item/wrench, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"Gd" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"Gj" = ( +/obj/machinery/door/window, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel/pool) +"Gk" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"Gv" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/caution/blue{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/ruin/space/has_grav/hotel/pool) +"Gw" = ( +/obj/structure/closet/secure_closet/freezer/meat{ + req_access = list("twin_nexus_staff") + }, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/ruin/space/has_grav/hotel/bar) +"Gx" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 1 + }, +/obj/structure/lattice, +/turf/template_noop, +/area/template_noop) +"Gz" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 4; + name = "N2 Outlet Pump" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"GC" = ( +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/workroom) +"GD" = ( +/obj/machinery/light/floor, +/obj/effect/turf_decal/siding/dark/end, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"GF" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"GG" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"GH" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"GI" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"GJ" = ( +/obj/structure/closet/secure_closet/personal, +/obj/item/storage/box/stockparts/deluxe, +/obj/item/storage/box/stockparts/deluxe, +/obj/item/device/traitor_announcer, +/obj/effect/spawner/random/engineering/flashlight, +/obj/item/device/traitor_announcer, +/obj/item/crowbar, +/obj/item/radio/headset/headset_faction/bowman, +/obj/item/clothing/suit/victoriantailcoatbutler, +/obj/item/clothing/under/suit/tuxedo, +/obj/item/clothing/neck/bowtie, +/turf/open/floor/carpet/executive, +/area/ruin/space/has_grav/hotel/workroom) +"GK" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"GL" = ( +/obj/item/reagent_containers/condiment/rice, +/obj/item/reagent_containers/condiment/rice, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/structure/closet/secure_closet/freezer/kitchen{ + req_access = list("twin_nexus_staff") + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/effect/turf_decal/siding/dark_green{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"GN" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom) +"GO" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/supply/visible, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"GR" = ( +/obj/item/soap/deluxe, +/obj/machinery/shower/directional/north, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"GU" = ( +/obj/structure/closet/crate/bin, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"GX" = ( +/obj/machinery/vending/imported/mothic, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"Hb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"Hd" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"Hg" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"Hm" = ( +/obj/machinery/smartfridge/food, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"Ho" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"Hp" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"Hq" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"Hs" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"HA" = ( +/obj/structure/bed/double, +/obj/item/bedsheet/centcom/double, +/obj/machinery/button/curtain{ + id = "HotelRoom4Curtains"; + pixel_x = 1; + pixel_y = 23 + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"HD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/table, +/obj/item/reagent_containers/condiment/enzyme{ + layer = 5 + }, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = 5 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"HF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_green, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"HG" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"HI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"HJ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"HM" = ( +/obj/structure/toilet{ + dir = 1 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"HO" = ( +/obj/structure/table/glass, +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = 6; + pixel_y = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"HS" = ( +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"HV" = ( +/obj/machinery/vending/boozeomat/cafe, +/turf/closed/wall, +/area/ruin/space/has_grav/hotel/bar) +"HY" = ( +/obj/effect/mob_spawn/ghost_role/human/hotel_staff, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"HZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"Ib" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table/glass, +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"Ie" = ( +/obj/machinery/atmospherics/pipe/color_adapter/layer4{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north{ + pixel_y = 24 + }, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"Ig" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/reagent_containers/cup/glass/bottle/whiskey{ + pixel_y = 22; + pixel_x = 6 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = 6 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"Ij" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/table/wood, +/obj/machinery/coffeemaker, +/obj/machinery/button/door{ + id = "HotelRoom2"; + name = "Guest Door Lock"; + normaldoorcontrol = 1; + pixel_y = -30; + specialfunctions = 4 + }, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"In" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"Io" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"Iu" = ( +/obj/structure/cable, +/obj/machinery/button/curtain{ + id = "HotelRoom3Curtains"; + pixel_x = -24 + }, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"IF" = ( +/obj/machinery/light_switch{ + pixel_y = -24 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom) +"II" = ( +/obj/structure/disposalpipe/junction/flip{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"IK" = ( +/obj/machinery/vending/games, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"IP" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"IS" = ( +/obj/structure/sink/kitchen/directional/south, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/ruin/space/has_grav/hotel/bar) +"IV" = ( +/obj/structure/table/glass, +/obj/item/paper/pamphlet/ruin/spacehotel, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"IW" = ( +/obj/machinery/processor, +/obj/effect/turf_decal/siding/dark_green{ + dir = 5 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"IX" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"IZ" = ( +/obj/effect/turf_decal/siding/green{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"Ja" = ( +/obj/item/storage/medkit/brute, +/obj/item/storage/medkit/brute{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/structure/table, +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"Jb" = ( +/obj/effect/turf_decal/siding/dark/corner, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"Jh" = ( +/obj/item/reagent_containers/cup/glass/shaker, +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"Ji" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"Jp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel/pool) +"Jq" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"Jw" = ( +/obj/structure/bed/double{ + dir = 4 + }, +/obj/item/bedsheet/random/double{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"Jx" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"Jy" = ( +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel/pool) +"JF" = ( +/obj/structure/reagent_dispensers/watertank/high, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/sauna) +"JG" = ( +/obj/structure/table/wood, +/obj/item/modular_computer/laptop, +/obj/item/storage/briefcase/secure/white, +/obj/item/key_card/hotel_room/seven, +/obj/item/key_card/hotel_room/six, +/obj/item/key_card/hotel_room/five, +/obj/item/key_card/hotel_room/four, +/obj/item/key_card/hotel_room/three, +/obj/item/key_card/hotel_room/two, +/obj/item/key_card/hotel_room/one, +/obj/item/permanent_portal_creator/space_hotel, +/obj/item/permanent_portal_anchor/space_hotel, +/turf/open/floor/carpet/executive, +/area/ruin/space/has_grav/hotel/workroom) +"JJ" = ( +/obj/structure/cable, +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"JN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/workroom) +"JQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/light, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"JT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"JV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/filingcabinet/chestdrawer{ + pixel_y = 2 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/workroom) +"JW" = ( +/obj/machinery/light, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"JZ" = ( +/obj/structure/table, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"Kd" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green, +/obj/structure/cable, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"Ke" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"Kf" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"Kg" = ( +/obj/machinery/shower/directional/south, +/obj/structure/drain/big, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel/pool) +"Ki" = ( +/obj/machinery/vending/imported/yangyu, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"Kj" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/workroom) +"Kr" = ( +/obj/machinery/cryopod/quiet{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark/opposingcorners, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"Kt" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"Ku" = ( +/obj/structure/table/glass, +/obj/effect/spawner/random/entertainment/money_medium, +/obj/effect/spawner/random/entertainment/money_medium, +/obj/effect/turf_decal/tile/dark/diagonal_edge, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"KC" = ( +/obj/machinery/light/floor, +/obj/effect/turf_decal/siding/dark/end{ + dir = 4 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"KD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"KG" = ( +/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"KJ" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/ruin/space/has_grav/hotel/pool) +"KU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/siding/dark_green, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"KY" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/light_switch{ + pixel_y = -24 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"KZ" = ( +/obj/effect/turf_decal/tile/dark/opposingcorners, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"Lc" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_green{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"Lh" = ( +/obj/machinery/light, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel/pool) +"Li" = ( +/obj/machinery/light_switch{ + pixel_y = -24 + }, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"Lj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"Lk" = ( +/obj/machinery/light, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"Lm" = ( +/obj/structure/chair/pew/right{ + dir = 8; + pixel_x = 5 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/sauna) +"Ln" = ( +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"Lo" = ( +/obj/machinery/airalarm/directional/west, +/obj/machinery/light_switch{ + pixel_y = -24 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"Lp" = ( +/obj/structure/reagent_dispensers/beerkeg, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"Lq" = ( +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/structure/dresser, +/obj/machinery/light/floor, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel/pool) +"Lt" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/workroom) +"Lu" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/telecomms/relay/preset/ruskie{ + use_power = 0 + }, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"Lw" = ( +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"Ly" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/keyed/hotel_room/three{ + id_tag = "HotelRoom3" + }, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"Lz" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"LA" = ( +/obj/structure/chair/sofa/corp/corner{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"LD" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_red/diagonal_edge, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"LN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"LP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"LQ" = ( +/obj/machinery/space_heater, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/workroom) +"LU" = ( +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/hotel) +"LY" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -30 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"Mb" = ( +/obj/machinery/griddle, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"Md" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"Mg" = ( +/obj/structure/chair/sofa/corp{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"Mh" = ( +/obj/structure/chair/sofa/corp/corner{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"Ml" = ( +/obj/effect/spawner/structure/window/reinforced/no_firelock, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/workroom) +"Mm" = ( +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"Mo" = ( +/obj/item/kirbyplants/random, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"Mt" = ( +/obj/structure/chair/sofa/corp/corner{ + dir = 4 + }, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"Mv" = ( +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"Mw" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/closed/wall, +/area/ruin/space/has_grav/hotel) +"MB" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 8 + }, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"MD" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"MJ" = ( +/obj/structure/window/reinforced/spawner/directional/north{ + layer = 2.9 + }, +/obj/structure/table/glass, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/item/paper_bin, +/obj/item/pen, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"MN" = ( +/obj/structure/table/wood/fancy/green, +/obj/item/coffee_cartridge/decaf{ + pixel_x = -7 + }, +/obj/item/coffee_cartridge/fancy{ + pixel_x = -7; + pixel_y = 9 + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"MP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"MR" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"MS" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"MU" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"MV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/coffeemaker, +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/mug/nanotrasen{ + pixel_y = -9 + }, +/obj/item/coffee_cartridge/fancy{ + pixel_x = 10; + pixel_y = -7 + }, +/obj/machinery/button/door{ + id = "HotelRoom6"; + name = "Guest Door Lock"; + normaldoorcontrol = 1; + pixel_y = -30; + specialfunctions = 4 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"Na" = ( +/obj/machinery/cryopod/quiet{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark/opposingcorners, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"Nb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_green{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"Nc" = ( +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/workroom) +"Nd" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"Ne" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"Nk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/diagonal, +/area/ruin/space/has_grav/hotel) +"Nn" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"Nq" = ( +/obj/structure/rack, +/obj/effect/spawner/random/clothing/costume, +/obj/effect/spawner/random/clothing/costume, +/obj/effect/spawner/random/clothing/costume, +/obj/effect/spawner/random/clothing/costume, +/obj/effect/spawner/random/clothing/costume, +/obj/item/clothing/suit/ashwalkermantle/cape, +/obj/effect/turf_decal/tile/dark/diagonal_edge, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"Nt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"Nw" = ( +/obj/machinery/mass_driver/trash{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/workroom) +"NK" = ( +/obj/structure/dresser, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/green, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"NO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"NS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/dresser, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"NU" = ( +/obj/structure/chair/sofa/corp/left, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"NV" = ( +/obj/structure/cable, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"NW" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/mob_spawn/ghost_role/human/hotel_staff/security, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"NZ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"Oa" = ( +/obj/machinery/recharge_station, +/obj/effect/turf_decal/tile/dark/opposingcorners, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"Ob" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"Oc" = ( +/turf/open/floor/carpet/neon/simple/black/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"Od" = ( +/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 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"Oh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/sign/poster/contraband/random/directional/north, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"Om" = ( +/obj/machinery/vending/clothing, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"Or" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = -30 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"Os" = ( +/obj/structure/displaycase/trophy, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"Ov" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"Ow" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/power) +"Oz" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/window/spawner/directional/north, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"OA" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/corner, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"OB" = ( +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/structure/closet/secure_closet/freezer/fridge{ + req_access = list("twin_nexus_staff") + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark_green{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"OE" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/trinary/filter/atmos/n2, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"OJ" = ( +/obj/structure/chair/sofa/corp/corner{ + dir = 8 + }, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"OK" = ( +/obj/structure/chair/greyscale{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"OL" = ( +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"ON" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/light, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"OQ" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"OW" = ( +/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"OZ" = ( +/obj/machinery/shower/directional/north, +/obj/item/soap/deluxe, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"Pb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/structure/decorative/shelf/alcohol_assortment, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"Pd" = ( +/obj/structure/chair/office/light, +/obj/effect/turf_decal/tile/dark/diagonal_edge, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"Pf" = ( +/obj/item/beacon, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"Pg" = ( +/obj/structure/table/wood/fancy/green, +/obj/item/wrench, +/obj/effect/spawner/random/entertainment/lighter, +/obj/item/storage/fancy/candle_box/jasmine, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"Pj" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/dock) +"Pl" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark_red/diagonal_edge, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"Pp" = ( +/obj/structure/closet/crate/freezer, +/obj/item/food/grown/wheat, +/obj/item/food/grown/wheat, +/obj/item/food/grown/wheat, +/obj/item/food/grown/wheat, +/obj/item/food/grown/wheat, +/obj/item/food/grown/wheat, +/obj/item/food/grown/wheat, +/obj/item/food/grown/potato, +/obj/item/food/grown/potato, +/obj/item/food/grown/potato, +/obj/item/food/grown/potato, +/obj/item/food/grown/potato, +/obj/item/food/grown/carrot, +/obj/item/food/grown/carrot, +/obj/item/food/grown/carrot, +/obj/item/food/grown/carrot, +/obj/item/food/grown/carrot, +/obj/item/food/grown/carrot, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/machinery/light_switch{ + pixel_y = -24 + }, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/ruin/space/has_grav/hotel/bar) +"Pq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/siding/blue, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"Pr" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north{ + layer = 2.9 + }, +/obj/item/gps/spaceruin{ + name = "hotel gps" + }, +/obj/structure/table/glass, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"Ps" = ( +/obj/structure/table, +/obj/item/surgery_tray/full, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel) +"Pw" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"Py" = ( +/obj/machinery/door/airlock{ + name = "Bathroom" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"PG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"PJ" = ( +/obj/structure/table, +/obj/item/book/manual/hydroponics_pod_people, +/obj/item/wrench, +/obj/machinery/airalarm/directional/north{ + pixel_y = 24 + }, +/obj/effect/turf_decal/siding/green{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"PM" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"PN" = ( +/obj/structure/cable, +/obj/structure/extinguisher_cabinet{ + pixel_x = -30 + }, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"PP" = ( +/obj/item/kirbyplants/random, +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"PU" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/curtain/cloth/fancy/mechanical{ + icon_state = "bounty-open"; + icon_type = "bounty"; + id = "HotelRoom5Curtains"; + name = "curtain" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"PW" = ( +/turf/open/floor/carpet/green, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"PX" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/ruin/space/has_grav/hotel/pool) +"Qc" = ( +/obj/structure/table, +/obj/machinery/microwave, +/obj/effect/turf_decal/siding/dark_green{ + dir = 9 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"Qd" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/dock) +"Qe" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"Qh" = ( +/obj/structure/chair/sofa/corp, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"Qi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"Qk" = ( +/obj/machinery/light/floor, +/obj/effect/turf_decal/siding/thinplating_new/dark/end, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"Qo" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"Qr" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/button/door{ + id = "HotelRoom4"; + name = "Guest Door Lock"; + normaldoorcontrol = 1; + pixel_y = -30; + specialfunctions = 4 + }, +/turf/open/floor/carpet/green, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"Qv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 6 + }, +/obj/structure/chair/sofa/corp/left{ + dir = 1 + }, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"Qw" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/airalarm/directional/north{ + pixel_y = 24 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"QE" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"QH" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"QI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"QK" = ( +/obj/item/reagent_containers/cup/bucket/wooden, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/sauna) +"QM" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green, +/obj/item/storage/fancy/candle_box/jasmine, +/obj/effect/spawner/random/entertainment/lighter, +/obj/item/wrench, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"QR" = ( +/obj/machinery/airalarm/directional/west, +/obj/structure/cable, +/obj/machinery/light_switch{ + pixel_y = -24 + }, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"QX" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/carpet/executive, +/area/ruin/space/has_grav/hotel/workroom) +"QY" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/ruin/space/has_grav/hotel/pool) +"QZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"Rd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/workroom) +"Rg" = ( +/obj/item/soap/deluxe, +/obj/machinery/shower/directional/north, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"Rh" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/indestructible/hotelwood, +/area/ruin/space/has_grav/hotel/pool) +"Ri" = ( +/obj/structure/sign/painting/meat, +/turf/closed/wall, +/area/ruin/space/has_grav/hotel/workroom) +"Rm" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/junction/flip{ + dir = 8 + }, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"Rn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"Rq" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/turf/closed/wall, +/area/ruin/space/has_grav/hotel) +"Rr" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_green, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"Rv" = ( +/obj/structure/bed, +/obj/structure/extinguisher_cabinet{ + pixel_x = 30 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/pool) +"Ry" = ( +/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/carpet/neon/simple/black/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"Rz" = ( +/obj/structure/mirror/directional, +/turf/closed/wall, +/area/ruin/space/has_grav/hotel/bar) +"RE" = ( +/obj/item/reagent_containers/cup/bottle/morphine, +/obj/item/reagent_containers/cup/bottle/toxin{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/bottle/epinephrine{ + pixel_x = 8 + }, +/obj/item/reagent_containers/cup/bottle/multiver{ + pixel_x = -5 + }, +/obj/item/reagent_containers/syringe/epinephrine, +/obj/structure/table, +/obj/effect/turf_decal/siding/blue{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"RF" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/supply/visible, +/obj/effect/turf_decal/siding/wideplating_new/corner, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"RH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"RI" = ( +/obj/structure/table/wood, +/obj/item/paper_bin/carbon, +/obj/item/pen/fountain, +/obj/item/taperecorder{ + pixel_x = 6; + pixel_y = 10 + }, +/turf/open/floor/carpet/executive, +/area/ruin/space/has_grav/hotel/workroom) +"RK" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/pool) +"RL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"RM" = ( +/obj/structure/reagent_dispensers/watertank/high, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/workroom) +"RO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"RS" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"RU" = ( +/obj/structure/table/wood, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"RX" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"RY" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"Sa" = ( +/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{ + name = "Bathroom" + }, +/turf/open/floor/carpet/neon/simple/black/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"Sb" = ( +/obj/effect/turf_decal/siding/dark_green{ + dir = 1 + }, +/obj/machinery/oven/range, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"Se" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 1 + }, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"Sf" = ( +/obj/machinery/washing_machine, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"Sg" = ( +/obj/machinery/door/window/right{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"Sl" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"So" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"Sr" = ( +/obj/effect/mob_spawn/ghost_role/human/hotel_staff{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"Sx" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"SF" = ( +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/sauna) +"SH" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom) +"SJ" = ( +/obj/effect/spawner/liquids_spawner, +/turf/open/floor/iron/pool, +/area/ruin/space/has_grav/hotel/pool) +"SM" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/ruin/space/has_grav/hotel/bar) +"SN" = ( +/obj/item/soap/deluxe, +/obj/machinery/shower/directional/north, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"SQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"SU" = ( +/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel) +"SY" = ( +/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/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"Tb" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"Tg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"Th" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"Tj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"Tm" = ( +/obj/machinery/recharge_station, +/obj/machinery/airalarm/directional/north{ + pixel_y = 24 + }, +/obj/effect/turf_decal/tile/dark/opposingcorners, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"Tp" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 4 + }, +/turf/open/floor/engine/o2, +/area/ruin/space/has_grav/hotel/power) +"Tu" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/biogenerator, +/obj/machinery/light, +/obj/effect/turf_decal/siding/green, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"Tv" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/light_switch{ + pixel_x = 24 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"Ty" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"Tz" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"TA" = ( +/obj/machinery/door/airlock/grunge{ + name = "Disposals Access" + }, +/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/mapping_helpers/airlock/access/all/twin_nexus_staff, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/hotel/workroom) +"TE" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"TK" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"TL" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"TP" = ( +/turf/open/floor/carpet/executive, +/area/ruin/space/has_grav/hotel/workroom) +"TW" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/carpet/green, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"TX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/indestructible/hotelwood, +/area/ruin/space/has_grav/hotel/pool) +"Uc" = ( +/obj/structure/rack, +/obj/effect/spawner/random/clothing/gloves, +/obj/effect/spawner/random/clothing/gloves, +/obj/effect/spawner/random/clothing/gloves, +/obj/effect/spawner/random/clothing/gloves, +/obj/effect/spawner/random/clothing/gloves, +/obj/effect/turf_decal/tile/dark/diagonal_edge, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"Ug" = ( +/obj/effect/turf_decal/tile/dark_red/diagonal_edge, +/obj/effect/turf_decal/siding/dark_red{ + dir = 1 + }, +/obj/structure/urinal/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"Uk" = ( +/obj/machinery/autolathe, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"Ul" = ( +/obj/structure/table, +/obj/structure/bedsheetbin, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"Ur" = ( +/obj/structure/reagent_dispensers/watertank/high, +/obj/item/reagent_containers/cup/bucket, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"Us" = ( +/obj/structure/cable, +/obj/structure/chair/comfy/brown, +/turf/open/floor/carpet/executive, +/area/ruin/space/has_grav/hotel/workroom) +"Ut" = ( +/obj/effect/light_emitter, +/obj/effect/spawner/liquids_spawner, +/turf/open/floor/iron/pool, +/area/ruin/space/has_grav/hotel/pool) +"Uu" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrogen_input{ + dir = 4 + }, +/turf/open/floor/engine/o2, +/area/ruin/space/has_grav/hotel/power) +"UB" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"UE" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"UF" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/obj/structure/cable, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"UI" = ( +/obj/structure/chair/comfy/black{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"UK" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -30 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"UM" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/ruin/space/has_grav/hotel/pool) +"UQ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"UU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light_switch{ + pixel_y = -24 + }, +/obj/effect/turf_decal/siding/dark_green, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"UW" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/bin, +/obj/machinery/light_switch{ + pixel_y = 24 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"UX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"Vb" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel/pool) +"Ve" = ( +/obj/structure/chair/pew/right{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom) +"Vj" = ( +/obj/structure/table, +/obj/item/storage/box/donkpockets, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"Vk" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Hotel Maintenance" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/bar) +"Vm" = ( +/obj/machinery/atmospherics/miner/nitrogen, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/open/floor/engine/n2, +/area/ruin/space/has_grav/hotel/power) +"Vn" = ( +/obj/structure/cable, +/obj/structure/extinguisher_cabinet{ + pixel_x = -30 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"Vo" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"Vs" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green/half{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"Vw" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/dock) +"Vx" = ( +/obj/machinery/shower/directional/east, +/obj/item/soap/deluxe, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom) +"VF" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/engine/o2, +/area/ruin/space/has_grav/hotel/power) +"VH" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"VI" = ( +/obj/structure/table/reinforced, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"VK" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"VN" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "garbage" + }, +/obj/machinery/recycler{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/workroom) +"VQ" = ( +/obj/machinery/vending/hydronutrients, +/obj/effect/turf_decal/siding/green{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"VT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"VU" = ( +/obj/effect/turf_decal/tile/dark_red/diagonal_edge, +/obj/effect/turf_decal/siding/dark_red, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"VW" = ( +/obj/machinery/airalarm/directional/west, +/obj/structure/dresser, +/turf/open/floor/carpet/neon/simple/black/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"VX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 6 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/guestroom/room_6) +"VY" = ( +/obj/machinery/airalarm/directional/north{ + pixel_y = 24 + }, +/obj/structure/table/wood/fancy/green, +/obj/machinery/coffeemaker, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"Wf" = ( +/obj/machinery/vending/hydroseeds{ + slogan_delay = 700 + }, +/obj/effect/turf_decal/siding/green{ + dir = 9 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/bar) +"Wi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 5 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/custodial) +"Wl" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom) +"Wo" = ( +/turf/open/floor/glass/reinforced, +/area/ruin/space/has_grav/hotel/bar) +"Wx" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -30 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"Wz" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/mob/living/basic/bot/medbot{ + name = "Accidents Happen" + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"WH" = ( +/obj/structure/table, +/obj/item/soap, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"WM" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"WS" = ( +/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/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"WW" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/ruin/space/has_grav/hotel/pool) +"WX" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"Xa" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 4; + name = "Air to Distro" + }, +/obj/structure/sign/warning/fire/directional/north{ + desc = "A poster designed to remind the reader to wear appropriate insulation and head protection when working with material."; + icon_state = "safety"; + name = "Safety Poster" + }, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 9 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"Xg" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/sauna) +"Xi" = ( +/obj/structure/table/wood/fancy/green, +/obj/item/flashlight/lamp/green{ + pixel_x = 7; + pixel_y = 14 + }, +/obj/item/clothing/mask/cigarette/pipe{ + pixel_x = -5 + }, +/obj/machinery/pollution_scrubber{ + pixel_x = 7; + pixel_y = -5 + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"Xk" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/indestructible/hotelwood, +/area/ruin/space/has_grav/hotel/pool) +"Xm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/coffeemaker, +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/mug/nanotrasen{ + pixel_y = -9 + }, +/obj/item/coffee_cartridge/fancy{ + pixel_x = 10; + pixel_y = -7 + }, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"Xn" = ( +/obj/machinery/firealarm{ + pixel_x = 24 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/pool) +"Xp" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel/pool) +"Xq" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/extinguisher_cabinet{ + pixel_x = -30 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"Xs" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/showroomfloor, +/area/ruin/space/has_grav/hotel/pool) +"Xu" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"Xy" = ( +/obj/structure/table, +/obj/item/card/id/away/hotel, +/obj/item/card/id/away/hotel, +/obj/item/card/id/away/hotel, +/obj/item/card/id/away/hotel, +/obj/item/card/id/away/hotel, +/obj/item/card/id/away/hotel, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/medkit/regular, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"XA" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/power) +"XB" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet/neon/simple/black/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"XD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"XE" = ( +/obj/structure/sink/directional/north, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"XF" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/hotel/sauna) +"XO" = ( +/obj/effect/turf_decal/tile/green/half{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"XQ" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/pool) +"XZ" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"Yd" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"Yg" = ( +/obj/structure/table, +/obj/item/storage/box/monkeycubes, +/obj/item/storage/box/monkeycubes, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/ruin/space/has_grav/hotel/bar) +"Yk" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"Ym" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/closet/secure_closet/personal/cabinet, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"Yp" = ( +/obj/machinery/light, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel/workroom) +"Yq" = ( +/obj/structure/chair/sofa/corp/right, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"Yr" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"Ys" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/dock) +"Yt" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/caution/blue, +/turf/open/indestructible/hotelwood, +/area/ruin/space/has_grav/hotel/pool) +"Yu" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"Yw" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/bar) +"YA" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"YE" = ( +/obj/structure/chair/sofa/corp, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"YI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/door/airlock{ + name = "Bathroom" + }, +/turf/open/floor/carpet/green, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"YK" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"YO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/keyed/hotel_room/five{ + id_tag = "HotelRoom5" + }, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"YP" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/neon/simple/black/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"YQ" = ( +/obj/effect/turf_decal/siding/dark/corner, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) +"YR" = ( +/obj/structure/kitchenspike, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/ruin/space/has_grav/hotel/bar) +"YZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"Zc" = ( +/turf/open/floor/carpet/neon/simple/pink/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"Zd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/ruin/space/has_grav/hotel/power) +"Ze" = ( +/obj/structure/chair/pew/left{ + dir = 8; + pixel_x = 5 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/hotel/sauna) +"Zh" = ( +/obj/structure/sink/directional/north, +/obj/machinery/airalarm/directional/west, +/obj/structure/mirror{ + pixel_y = -31 + }, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_2) +"Zn" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/paper/pamphlet/ruin/spacehotel, +/turf/open/floor/carpet/neon/simple/teal/nodots, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"Zq" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_5) +"Zs" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"Zx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/keyed/hotel_room/four{ + id_tag = "HotelRoom4" + }, +/turf/open/floor/carpet, +/area/ruin/space/has_grav/hotel/guestroom/room_4) +"Zz" = ( +/obj/structure/table/glass, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/carpet/orange, +/area/ruin/space/has_grav/hotel) +"ZC" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_1) +"ZH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/indestructible/hoteltile, +/area/ruin/space/has_grav/hotel/guestroom/room_3) +"ZI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/grunge{ + name = "Hotel Cold Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/hotel/bar) +"ZJ" = ( +/obj/effect/turf_decal/siding/dark/end{ + dir = 8 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/space/has_grav/hotel/dock) +"ZL" = ( +/obj/machinery/computer/pod/old/mass_driver_controller/trash{ + pixel_x = -25; + pixel_y = -4 + }, +/obj/machinery/button/door{ + id = "Disposal Exit"; + name = "Disposal Vent Control"; + pixel_x = 25; + pixel_y = -4; + req_access = list("twin_nexus_staff") + }, +/obj/machinery/door/window/left/directional/south, +/turf/open/floor/plating, +/area/ruin/space/has_grav/hotel/workroom) +"ZM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/bar) +"ZN" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/hotel/workroom/quarters) +"ZP" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/hotel) +"ZR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/ruin/space/has_grav/hotel) +"ZS" = ( +/obj/machinery/light/floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 9 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel/dock) +"ZV" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/carpet/neon/simple/white/nodots, +/area/ruin/space/has_grav/hotel/guestroom) +"ZZ" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) + +(1,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +mF +mF +mF +mF +mF +mF +mF +mF +ac +aa +aa +aa +aa +aa +aa +aa +aa +mF +mF +mF +mF +mF +mF +mF +mF +mF +mF +mF +ac +mF +mF +mF +mF +mF +mF +mF +ac +ac +mF +ac +ac +mF +mF +mF +mF +mF +mF +mF +mF +mF +mF +mF +mF +ac +aa +"} +(2,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ac +aa +aa +aa +aa +aa +ac +aa +aa +aa +aa +aa +aa +mF +mF +mF +mF +ac +aa +aa +aa +aa +ac +aa +aa +aa +aa +ac +aa +ac +aa +aa +aa +aa +aa +aa +ac +aa +aa +mF +mF +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +mF +aa +"} +(3,1,1) = {" +bN +wZ +wZ +wZ +bN +bN +bN +bN +bN +am +am +am +am +am +am +am +am +am +am +am +ac +mF +mF +mF +mF +mF +ac +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +sN +sN +sN +sN +sN +sN +sN +sN +sN +sN +sN +sN +sN +aa +aa +ad +aa +ad +aa +ad +aa +ad +aa +ad +aa +ad +aa +mF +aa +"} +(4,1,1) = {" +wZ +aD +Eg +Zc +Iu +NV +PN +QR +bN +OA +RO +mH +cd +oV +oV +oV +oV +oV +yi +am +aa +aa +aa +aa +aa +ac +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +sN +sK +fB +sK +gK +vN +VF +vN +gK +eb +qs +eb +sN +aa +aa +ad +aa +ad +aa +ad +aa +ad +aa +ad +aa +ad +aa +mF +ac +"} +(5,1,1) = {" +wZ +Zc +YK +xe +ww +Qv +sA +aw +kL +vB +yE +Bp +cl +cl +cl +cl +cl +cl +Hs +am +am +am +am +am +am +am +am +am +am +am +am +am +am +am +am +am +am +am +am +sN +sK +nU +sK +gK +vN +kR +vN +gK +eb +Vm +eb +sN +aa +aa +ad +aa +ad +aa +ad +aa +ad +aa +ad +aa +ad +aa +aa +mF +"} +(6,1,1) = {" +wZ +Zc +Zc +NU +Kd +Se +Zc +Ij +bN +RS +yE +ix +cl +vX +bV +VW +aV +cl +jD +ed +ed +ed +ed +ed +ed +ed +lK +lK +fd +lK +ed +ed +ed +ed +ed +ed +ed +ed +or +sN +fA +sK +fA +gK +Uu +vN +Tp +gK +nZ +eb +DC +sN +aa +aa +ad +aa +ad +aa +ad +aa +ad +aa +ad +aa +ad +aa +aa +mF +"} +(7,1,1) = {" +wZ +Zc +Zc +Zc +CO +Zc +GG +zZ +bN +RS +yE +nf +cl +Oc +Oc +Oc +Oc +cl +SQ +fi +fi +fi +fi +fi +fi +fi +fi +fi +ij +fi +fi +fi +fi +fi +fi +fi +fi +fi +HZ +gK +kI +EI +kI +gK +yL +EI +Do +gK +yL +EI +Do +gK +aa +aa +ad +aa +ad +aa +ad +aa +ad +aa +ad +aa +ad +aa +aa +mF +"} +(8,1,1) = {" +wZ +nC +Eg +xc +qx +kT +zR +Dw +bN +RS +yE +nf +cl +ms +Oc +BY +DA +cl +SQ +fi +Gw +el +BG +fi +Qc +fF +BO +pX +Lc +fi +mY +UK +Lp +Yw +cj +hw +vw +fi +ZR +kH +Xa +Lw +KD +UE +Sl +Lw +Gz +Lu +Sl +VT +lp +Ow +aa +aa +ad +aa +ad +aa +ad +aa +ad +aa +ad +aa +ad +aa +mF +ac +"} +(9,1,1) = {" +bN +bN +bN +bN +bN +bN +qX +bN +bN +it +yE +tN +Df +Ry +jm +jm +DA +cl +Th +fi +IS +dM +SM +fi +Sb +fh +vI +HD +Rr +Cc +hw +yC +HI +HI +HI +PG +QZ +Vk +Yr +kH +gj +uW +iw +jz +Fl +UB +kr +hH +GO +RF +es +Ow +aa +aa +ad +aa +ad +aa +ad +aa +ad +aa +ad +aa +ad +aa +mF +aa +"} +(10,1,1) = {" +yX +xx +yM +ii +bN +Ji +qG +Zh +bN +WX +yE +Ba +cl +DR +bq +bV +mT +cl +Oh +fi +YR +dM +Pp +fi +CD +fh +SY +Mb +KU +fi +hw +hw +gp +dA +hw +hw +FM +fi +BA +kH +Ie +lX +iu +uW +XZ +nJ +QH +QH +XZ +xl +gK +gK +gK +aa +ad +aa +ad +aa +ad +aa +ad +aa +ad +aa +ad +aa +mF +aa +"} +(11,1,1) = {" +yX +ap +Oz +ap +bN +hc +wV +Qe +bN +dl +yE +RX +cl +YP +Bn +XB +rC +cl +Th +fi +qY +dM +EV +fi +OB +fh +dV +Mb +FV +fi +fR +Rz +Rz +Rz +Rz +Rz +Rz +fi +bE +kH +nS +Zd +Gk +dI +OE +dI +dI +En +iv +wT +eJ +Dk +is +lQ +lQ +lQ +lQ +lQ +lQ +lQ +lQ +lQ +lQ +lQ +lQ +ai +mF +aa +"} +(12,1,1) = {" +yX +TE +ZH +ap +bN +NO +dP +GR +bN +xR +yE +nf +cl +Sa +cl +cl +cl +cl +SQ +fi +qY +SM +gB +fi +GL +fh +Hg +Mm +UU +fi +eQ +hJ +Pb +rI +hu +zo +hJ +fi +bE +kH +kv +wm +aB +uD +tB +uW +kq +kq +uW +AY +gK +gK +gK +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +mF +aa +"} +(13,1,1) = {" +yX +yX +Py +yX +bN +bN +bN +bN +bN +xR +yE +nf +cl +JJ +ZC +fI +XE +cl +Th +fi +ke +oT +ty +ZI +wc +RH +ni +iz +HF +VI +hw +hw +Lj +hw +hw +sh +rD +fi +bE +kH +kH +iK +gq +kH +Ft +Uk +kZ +ku +yg +iN +lA +XA +Gx +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +mF +aa +"} +(14,1,1) = {" +yX +vu +qS +sU +dx +oW +kY +cO +yX +xR +yE +nf +cl +ul +fI +MS +dR +cl +Th +fi +Yg +Gw +yu +fi +IW +CZ +lb +tb +FJ +Hm +hw +hw +Lj +hw +hw +sh +hw +HV +hS +ed +lK +iL +or +md +md +md +md +md +md +XF +XF +XF +XF +XF +XF +XF +XF +XF +XF +XF +XF +XF +ac +mF +ac +ac +mF +aa +"} +(15,1,1) = {" +aA +zU +st +qS +sU +sU +sU +sU +yX +xR +yE +nf +cl +pa +tl +fI +Rg +cl +Th +fi +fi +fi +fi +fi +fi +ug +Nb +fi +fi +fi +EH +ji +Dp +hl +Ig +dv +Jh +fi +fi +fi +fi +fi +bE +md +hK +cZ +cZ +mE +md +lr +SF +Xg +QK +kx +lS +JF +kx +QK +Xg +SF +lr +XF +aa +mF +aa +aa +aa +aa +"} +(16,1,1) = {" +aA +dz +jy +qS +Zn +sU +sU +Li +yX +xR +yE +nf +di +di +di +di +di +di +Th +fi +Wf +hZ +hZ +hZ +hZ +hZ +Ca +qo +fi +jF +Kf +AA +sT +AA +AA +ev +AA +AI +fo +Wx +ky +fi +bE +md +jH +kh +Wi +kK +md +mP +SF +SF +SF +me +SF +SF +me +SF +SF +SF +ml +XF +aa +mF +aa +aa +aa +aa +"} +(17,1,1) = {" +aA +yy +jy +qS +cu +cu +cu +cu +yX +xR +yE +nf +di +rT +dY +wH +Bu +di +Th +fi +VQ +dT +qA +qA +qA +qA +oH +eP +Ah +iA +iA +iA +Eu +QI +QI +QI +QI +QI +QI +QI +QI +fj +In +md +jJ +kj +kk +Bx +md +Ze +mt +mt +Lm +kx +SF +SF +kx +Ze +mt +mt +Lm +XF +aa +mF +aa +aa +aa +aa +"} +(18,1,1) = {" +aA +yy +jy +sU +By +pC +sU +nc +yX +xR +yE +nf +di +Rd +mb +Ce +DH +di +SQ +fi +kW +dT +dT +Ur +dT +dT +ba +Tu +fi +iA +iA +iA +ZM +iA +iA +zS +MR +MR +MR +MR +Hq +fi +BA +md +qB +kj +kk +BB +md +kx +kx +kx +kx +kx +SF +FK +kx +kx +kx +kx +kx +XF +aa +mF +aa +aa +aa +aa +"} +(19,1,1) = {" +aA +MB +OJ +sU +sU +sU +sU +id +yX +xR +yE +uN +xZ +cR +JN +pc +au +di +SQ +fi +PJ +dT +qA +qA +qA +qA +mq +oD +fi +iA +Mh +ur +ZM +bb +ya +qU +Wo +Wo +Wo +Wo +ye +fi +bE +md +jL +kl +wy +kN +md +lr +SF +Xg +QK +kx +lU +SF +kx +QK +Xg +SF +lr +XF +aa +mF +aa +aa +aa +aa +"} +(20,1,1) = {" +yX +as +pE +dx +uQ +hT +Jx +rB +Ly +jK +yE +hs +di +ck +JV +Kj +vq +di +SQ +fi +Be +IZ +AG +IZ +IZ +AG +rp +vt +fi +Ob +Fz +wQ +vn +wQ +hQ +qU +Wo +Wo +Wo +Wo +ON +fi +bE +md +jG +km +kB +kM +md +mP +SF +SF +SF +me +SF +SF +me +SF +SF +SF +ml +XF +aa +mF +aa +aa +aa +aa +"} +(21,1,1) = {" +yX +yX +yX +yX +yX +yX +yX +yX +yX +RS +yE +hs +di +Es +RI +TP +QX +di +Th +fi +fi +fi +fi +fi +fi +fi +fi +fi +fi +iA +gd +gb +ZM +ud +pe +qU +Wo +Wo +Wo +Wo +ye +fi +bE +md +rL +kn +ec +yv +md +Ze +mt +mt +Lm +kx +le +ei +kx +Ze +mt +mt +Lm +XF +aa +mF +aa +aa +aa +aa +"} +(22,1,1) = {" +av +VY +va +jo +nO +mc +xo +xo +av +hp +yE +oI +di +Es +Ao +sZ +TP +di +Th +fi +Na +Kr +Na +fi +cL +pI +am +fH +fi +iA +Mh +ur +ZM +bb +ya +qU +Wo +Wo +Wo +Wo +ye +fi +RL +md +md +md +mx +md +md +kx +kx +kx +kx +kx +lf +zP +kx +kx +kx +kx +kx +XF +aa +mF +aa +aa +aa +aa +"} +(23,1,1) = {" +xH +MN +xD +sX +TW +TW +TW +Qr +av +xR +yE +hs +Ri +Us +JG +sZ +GJ +di +Th +fi +BT +KZ +BU +fi +Ug +VU +am +th +fi +iA +Fz +uO +vn +wQ +hQ +qU +Wo +Wo +Wo +Wo +ye +fi +Rm +jO +jO +gM +kC +uF +md +lr +SF +Xg +QK +kx +SF +ei +kx +QK +Xg +SF +lr +XF +aa +mF +aa +aa +aa +aa +"} +(24,1,1) = {" +xH +qd +xD +sj +kw +ql +rr +qZ +Zx +IP +yE +hs +di +rV +sg +tS +wS +di +kP +fi +Tm +KZ +Oa +fi +Dv +Ap +LD +gn +fi +iA +gd +gb +ez +ud +pe +qU +Wo +Wo +Wo +Wo +ye +fi +bE +uF +en +pk +jE +xi +md +mP +SF +SF +SF +me +gX +ei +me +SF +SF +SF +ml +XF +aa +mF +aa +aa +aa +aa +"} +(25,1,1) = {" +xH +gV +xD +sj +sm +FQ +vK +nr +av +xR +yE +hs +di +di +di +di +di +di +zH +fi +fi +fs +fi +fi +rl +Pl +gk +hk +fi +iA +Mh +ur +ez +bb +ya +qU +Wo +Wo +Wo +Wo +ye +fi +Ty +jQ +jQ +jQ +jQ +jQ +jQ +Ze +mt +mt +Lm +kx +ll +lc +kx +Ze +mt +mt +Lm +XF +aa +mF +aa +aa +aa +aa +"} +(26,1,1) = {" +xH +rG +UI +sj +wB +av +YI +av +av +xR +yE +Tg +aq +LP +LP +VH +HG +kz +xz +LY +GK +DQ +oe +Mw +Mw +hY +Mw +Rq +fi +Ob +Fz +wQ +HO +wQ +hQ +qU +Wo +Wo +Wo +Wo +ON +fi +bE +jQ +Kg +Gj +Jy +Jy +jQ +jQ +jQ +jQ +jQ +jQ +EA +xU +jQ +jQ +jQ +jQ +jQ +jQ +aa +mF +aa +aa +aa +aa +"} +(27,1,1) = {" +xH +by +Xi +sj +PW +av +yA +gy +av +hX +yE +mi +am +co +Zz +tC +lL +am +Rn +dF +LN +LN +LN +Xq +LN +Lz +eA +iC +fi +iA +gd +os +ez +ud +pe +qU +Wo +Wo +Wo +Wo +ye +fi +bE +jQ +Lq +pV +Jy +Ds +jQ +EM +RK +RK +eS +jf +RK +mk +rW +aZ +rW +rW +BM +jQ +aa +mF +aa +aa +aa +aa +"} +(28,1,1) = {" +xH +xD +xD +sj +PW +av +TK +la +av +RS +yE +sd +OW +JT +Fc +bW +bW +SU +nh +nh +lO +nh +nh +nh +AX +ey +so +kD +fi +gL +iA +iA +iA +iA +iA +VK +Kf +Tv +Kf +Kf +nX +fi +bE +jQ +ti +Gj +Jy +Jy +jQ +RK +lx +UM +UM +UM +UM +UM +UM +UM +UM +bk +rW +jQ +aa +mF +aa +aa +aa +aa +"} +(29,1,1) = {" +av +HA +Pg +NK +ex +av +Qw +SN +av +xR +yE +hs +di +di +di +di +di +di +am +sD +rY +sD +am +am +DL +ey +UX +qq +fi +fi +fi +fi +fi +fi +iA +iA +fi +fi +fi +fi +fi +fi +wI +jQ +iX +pV +Jy +kU +nW +RK +WW +zl +Gv +rR +rR +rR +rR +Gv +KJ +Rh +rW +Ed +aa +mF +aa +aa +aa +aa +"} +(30,1,1) = {" +av +av +av +av +av +av +av +av +av +iQ +yE +Ov +di +Cs +lP +qv +do +di +Pd +Ku +tX +wx +dJ +am +lz +ey +so +Jq +ZZ +mJ +gl +gl +gl +ZZ +gl +gl +ZZ +gl +gl +gl +nQ +am +bE +jQ +Kg +Gj +Jy +kU +jQ +mj +WW +pN +SJ +SJ +SJ +SJ +SJ +SJ +Yt +Rh +rW +Ed +aa +mF +aa +aa +aa +aa +"} +(31,1,1) = {" +PU +Jw +QM +RY +fS +NS +Vn +Lo +aC +Od +yE +pR +ar +ep +ep +DV +do +di +et +Ef +Nk +CI +dJ +am +Dg +ey +so +so +so +so +so +so +so +so +so +so +so +so +so +so +iC +am +bE +jQ +iX +rg +Fg +Lh +jQ +po +WW +oM +SJ +SJ +SJ +SJ +SJ +SJ +qV +Rh +rW +Ed +aa +mF +aa +aa +aa +aa +"} +(32,1,1) = {" +PU +OL +OL +OL +hE +zQ +zQ +kO +YO +fE +yE +Hp +di +JZ +fC +GI +do +di +tQ +pS +LU +tW +Cv +am +Om +ey +so +BF +Au +AX +so +so +dE +nh +nh +nh +nh +YA +so +so +vo +am +iZ +jQ +cC +Xs +Jy +qr +jQ +po +WW +oM +SJ +SJ +SJ +SJ +SJ +SJ +qV +Rh +rW +Ed +aa +mF +aa +aa +aa +aa +"} +(33,1,1) = {" +PU +nN +OL +OL +em +zQ +OL +hv +aC +xR +yE +Hp +di +UW +fY +II +GU +di +et +oK +De +zj +dJ +am +cP +ey +so +GX +am +DL +so +so +Xu +gF +mA +hq +hA +Ln +so +so +pA +am +RL +jQ +jU +hn +Vb +qr +jQ +po +PX +oM +SJ +Ut +SJ +SJ +Ut +SJ +qV +Rh +mM +jQ +ac +mF +aa +aa +aa +aa +"} +(34,1,1) = {" +PU +fy +zQ +jP +Dy +dg +rn +rP +aC +xR +yE +Hp +di +WH +fC +GI +Tb +di +Uc +ae +ho +et +Nq +am +IK +ey +so +ET +am +Ln +so +so +Xu +Qh +uM +Da +hB +Ln +so +so +vY +am +bE +jQ +jU +Jp +qr +Xp +jQ +eT +WW +oM +SJ +SJ +SJ +SJ +SJ +SJ +qV +Rh +rW +jQ +ac +ac +mF +aa +aa +aa +"} +(35,1,1) = {" +aC +aC +CT +aC +cf +cf +cf +cf +cf +xR +yE +Hp +di +di +fC +GI +bZ +di +am +am +am +am +am +am +tK +ey +so +Ki +am +Ln +so +so +Xu +Qh +uM +Da +hB +Ln +so +so +vY +am +eN +jQ +oA +Jp +zv +Jy +jQ +al +WW +oM +SJ +SJ +SJ +SJ +SJ +SJ +qV +Rh +rW +Ed +aa +aa +mF +aa +aa +aa +"} +(36,1,1) = {" +aC +cw +Cr +kg +cf +mr +Mv +OZ +cf +xR +yE +Hp +di +cc +lh +WS +CQ +di +zw +Ja +gr +ee +aG +am +eU +ey +so +BN +am +Ln +so +so +Xu +gI +yT +Fy +hC +Ln +so +Kt +mQ +iM +Md +am +jQ +yk +jQ +jQ +jQ +ln +WW +oM +SJ +SJ +hP +SJ +SJ +SJ +qV +Rh +rW +Ed +aa +aa +mF +aa +aa +aa +"} +(37,1,1) = {" +aC +EW +wC +Zq +cf +iS +So +DN +cf +xR +yE +Hp +di +cb +xX +WS +cb +di +QE +bH +so +mR +bP +am +fq +ey +UX +Xu +am +Ln +so +so +MD +XO +jc +cE +XO +cy +so +Hb +so +so +Ke +jw +wu +ea +hb +oZ +mN +al +WW +oM +SJ +SJ +SJ +SJ +SJ +SJ +qV +Rh +rW +Ed +aa +aa +mF +aa +aa +aa +"} +(38,1,1) = {" +aC +ry +oF +sr +cf +HS +ss +HM +cf +xR +yE +Hp +di +Sf +bZ +WS +cc +di +mO +Ul +Ps +qQ +qi +am +sC +ey +so +Xu +am +Ln +so +so +Jq +Vs +ma +YQ +Vs +Gd +so +Hb +so +so +pf +at +jY +fl +jY +oZ +mN +al +WW +oM +SJ +Ut +SJ +SJ +Ut +SJ +qV +Rh +rW +Ed +aa +aa +mF +aa +aa +aa +"} +(39,1,1) = {" +aC +aC +aC +aC +cf +cf +iy +cf +cf +xR +yE +Hp +di +di +di +WS +Tb +di +gH +Tj +Tj +sE +Pq +rU +sE +ey +eA +Xu +am +Yu +so +so +gt +Ci +Sg +lD +hy +lg +so +Hb +so +so +pf +KG +jY +qj +Xn +oZ +mN +al +PX +oM +SJ +SJ +SJ +SJ +SJ +SJ +qV +Rh +rW +jQ +aa +aa +mF +aa +aa +aa +"} +(40,1,1) = {" +oX +ui +fw +RU +wd +kF +nD +hx +cf +iQ +yE +Lk +am +ac +di +jZ +Yp +di +RE +yZ +he +BP +ZP +am +AX +ey +dE +Io +am +DL +so +so +MJ +ol +us +Jb +GD +lT +so +Hb +fe +NZ +Cu +am +jQ +jQ +jQ +jQ +jQ +eT +WW +oM +SJ +SJ +SJ +SJ +SJ +SJ +qV +Rh +mM +jQ +aa +aa +mF +aa +aa +aa +"} +(41,1,1) = {" +oX +uR +uR +uR +uR +ve +VX +kA +lF +UQ +yE +Hp +qI +ac +Ml +jZ +DM +di +am +am +am +am +am +am +am +wK +am +am +am +hL +so +so +ge +Pw +Jq +Gd +Pw +lT +so +Hb +am +iO +jd +am +IX +ok +rh +LA +jQ +po +WW +oM +SJ +Ut +SJ +SJ +Ut +SJ +qV +Rh +rW +Ed +ac +ac +mF +aa +aa +aa +"} +(42,1,1) = {" +oX +uR +uR +uR +uR +dH +fg +MV +cf +xR +yE +Hp +qI +ac +Ml +WS +zE +di +Xy +XD +Vj +op +qf +sb +eR +Wz +yw +eG +eG +eG +il +Fm +Pr +BC +gs +gs +BC +Ib +il +im +eG +eG +eG +eG +Yq +DB +eH +Mg +jQ +po +WW +pN +SJ +SJ +SJ +SJ +SJ +SJ +Yt +Rh +rW +Ed +aa +aa +mF +aa +aa +aa +"} +(43,1,1) = {" +oX +cp +Ga +Ho +Sx +Sx +eO +UF +cf +xR +yE +Hp +qI +ac +Ml +WS +mL +di +fa +gG +Ne +Ne +Ne +Ne +Nt +gO +ha +eG +yl +mu +in +in +ZJ +ov +hr +gh +ov +ZJ +in +dm +mG +iP +je +eG +YE +IV +DB +vG +jQ +po +WW +QY +vr +qN +qN +qN +qN +vr +hO +Rh +rW +Ed +aa +aa +mF +aa +aa +aa +"} +(44,1,1) = {" +cf +cf +cf +cf +cf +cf +cf +cf +cf +xR +yE +Hp +am +ac +di +WS +Eq +di +aL +WM +nj +gG +WM +gG +HJ +ZN +eV +eG +nt +in +in +in +uj +ov +Os +jb +ov +tU +in +dm +TL +fu +aS +eG +Bk +td +cJ +fz +jQ +po +TX +xw +xw +xw +xw +xw +xw +xw +xw +Xk +rW +Ed +aa +aa +mF +aa +aa +aa +"} +(45,1,1) = {" +AW +Mt +ys +jA +Ym +pL +YZ +Cw +dN +GF +yE +Hp +di +di +di +TA +di +di +gv +gG +gG +nx +zr +aj +gG +ZN +Cb +eG +Mo +in +in +in +rw +ov +hr +gh +ov +Zs +in +dm +TL +aF +gJ +eG +sf +sf +sf +sf +jQ +BM +rW +if +XQ +Rv +rW +rW +if +XQ +if +rW +BM +jQ +aa +aa +mF +aa +aa +aa +"} +(46,1,1) = {" +AW +bQ +tP +Dm +pK +Cj +Cj +Hd +Al +EP +yE +Hp +di +LQ +xd +AF +eF +di +HY +WM +WM +Dd +zr +aj +gG +ZN +yp +eG +ce +in +in +in +rw +ov +hr +gh +ov +Zs +in +dm +xJ +gw +aT +eG +Pj +AT +AT +Pj +jQ +jQ +jQ +jQ +jQ +jQ +jQ +jQ +jQ +jQ +jQ +jQ +jQ +jQ +eG +aa +aa +aa +aa +aa +"} +(47,1,1) = {" +AW +Cj +dd +Dm +pK +Cj +Cj +KY +dN +Tz +yE +kc +di +GC +xN +DF +uJ +di +NW +qh +qh +nk +ds +OK +BI +eY +Sr +eG +Qo +in +in +in +uj +ov +Os +jb +ov +tU +in +dm +in +in +in +mu +in +in +in +in +in +mu +in +in +in +mu +in +in +in +mu +in +in +in +Ai +Pj +Pj +Pj +aa +aa +aa +"} +(48,1,1) = {" +AW +Cj +Cj +cr +sS +Cj +xV +Xm +dN +Dt +yE +MU +di +RM +gE +kb +VN +di +Yk +Yk +Yk +Yk +Yk +Yk +Yk +Yk +Yk +eG +aW +in +in +in +KC +ov +Vo +Nd +ov +KC +in +dm +zp +mI +zp +zp +zp +ZS +Qi +Qi +Qi +ih +Qi +Qi +Qi +ih +Qi +Qi +Qi +ih +Qi +Qi +MP +Qk +Ys +CC +nl +aa +aa +aa +"} +(49,1,1) = {" +AW +Cj +ZV +JQ +dN +dN +yz +dN +dN +Dt +yE +MU +di +Ek +Lt +ag +uJ +di +aa +aa +aa +aa +aa +aa +aa +aa +aa +eG +EX +aH +Nn +OQ +in +in +in +Pf +in +in +in +Vw +in +in +mX +in +in +Yd +in +Vw +in +in +in +mX +in +mn +in +Vw +in +in +in +mX +in +in +Pj +Pj +Pj +aa +aa +aa +"} +(50,1,1) = {" +AW +Cj +Cj +Cj +dN +fb +Wl +Vx +dN +GH +yE +JW +di +Nc +Lt +di +uJ +di +aa +aa +aa +aa +aa +aa +aa +aa +aa +eG +sa +fu +aK +fK +in +aM +aN +aP +aQ +in +in +in +in +in +in +in +in +lN +in +Pj +Pj +eG +Pj +Pj +Pj +eG +Pj +Pj +Pj +eG +Pj +Pj +Pj +eG +eG +aa +aa +aa +aa +aa +"} +(51,1,1) = {" +AW +wG +rE +hm +dN +GN +Wl +SH +dN +ro +yU +PM +di +oa +Lt +ZL +uJ +di +aa +aa +aa +aa +aa +aa +aa +aa +aa +eG +xJ +aI +gw +pH +jq +in +in +in +in +jq +in +in +in +jq +in +in +in +Yd +Or +eG +aa +aa +aa +aa +aa +ac +aa +aa +aa +aa +aa +aa +aa +ac +aa +aa +aa +aa +aa +aa +"} +(52,1,1) = {" +dN +dN +dN +dN +dN +vH +vH +vH +dN +sD +sD +sD +di +di +di +di +EC +di +aa +aa +aa +aa +aa +aa +aa +aa +aa +eG +dr +dr +dr +gi +hF +dr +hF +dr +hF +dr +gi +dr +dr +dr +PP +cq +in +Yd +in +eG +aa +aa +aa +aa +aa +ac +aa +aa +aa +aa +aa +aa +aa +ac +aa +mF +aa +aa +aa +aa +"} +(53,1,1) = {" +rd +sc +nL +se +kt +vH +vH +uC +dN +aa +aa +aa +ac +aa +aa +di +Nw +di +aa +aa +aa +aa +aa +aa +aa +aa +aa +eG +Pj +Pj +Pj +eG +Pj +Pj +Pj +Pj +Pj +Pj +eG +Pj +Pj +Pj +eG +eG +mD +Yd +in +Pj +aa +aa +aa +aa +aa +ac +aa +aa +aa +aa +aa +aa +aa +ac +aa +mF +aa +aa +aa +aa +"} +(54,1,1) = {" +rd +se +se +pM +dN +vH +vH +IF +dN +aa +aa +aa +ac +aa +aa +di +uU +di +aa +aa +aa +aa +aa +aa +aa +aa +aa +ac +aa +aa +aa +ac +aa +aa +aa +aa +aa +aa +ac +aa +aa +aa +aa +eG +in +AZ +in +Pj +ac +ac +ac +ac +ac +ac +ac +ac +aa +aa +aa +aa +aa +ac +ac +mF +aa +aa +aa +aa +"} +(55,1,1) = {" +rd +se +se +Ve +dN +eE +eE +eE +dN +aa +aa +aa +ac +aa +aa +ac +aa +ac +aa +aa +aa +aa +aa +aa +aa +aa +aa +ac +aa +aa +aa +ac +aa +aa +aa +aa +aa +aa +ac +aa +aa +aa +aa +eG +Pj +Qd +Pj +eG +aa +aa +aa +aa +aa +ac +aa +mF +mF +mF +mF +mF +mF +mF +aa +aa +aa +aa +aa +aa +"} +(56,1,1) = {" +rd +Fr +um +xW +dN +eE +eE +eE +dN +aa +aa +aa +ac +aa +aa +mF +aa +mF +aa +aa +aa +aa +aa +aa +aa +aa +aa +ac +aa +aa +aa +ac +aa +aa +aa +aa +aa +aa +ac +aa +aa +aa +aa +ac +Pj +CC +Pj +ac +aa +aa +aa +aa +aa +ac +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(57,1,1) = {" +dN +dN +dN +dN +dN +dN +dN +dN +dN +aa +aa +aa +ac +aa +aa +mF +aa +mF +aa +aa +aa +aa +aa +aa +aa +aa +aa +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mF +mF +mF +Pj +kX +Pj +ac +ac +mF +mF +mF +mF +mF +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(58,1,1) = {" +ac +aa +aa +aa +ac +aa +aa +aa +ac +aa +aa +aa +ac +aa +aa +ac +aa +ac +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(59,1,1) = {" +mF +mF +mF +mF +mF +mF +mF +mF +mF +mF +mF +mF +mF +mF +mF +mF +aa +mF +mF +ac +mF +mF +mF +mF +ac +mF +mF +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/syndibase.dmm b/_maps/RandomRuins/SpaceRuins/nova/syndibase.dmm similarity index 100% rename from _maps/RandomRuins/SpaceRuins/skyrat/syndibase.dmm rename to _maps/RandomRuins/SpaceRuins/nova/syndibase.dmm diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/toystore.dmm b/_maps/RandomRuins/SpaceRuins/nova/toystore.dmm similarity index 100% rename from _maps/RandomRuins/SpaceRuins/skyrat/toystore.dmm rename to _maps/RandomRuins/SpaceRuins/nova/toystore.dmm diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/vaulttango.dmm b/_maps/RandomRuins/SpaceRuins/nova/vaulttango.dmm similarity index 100% rename from _maps/RandomRuins/SpaceRuins/skyrat/vaulttango.dmm rename to _maps/RandomRuins/SpaceRuins/nova/vaulttango.dmm diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/waypointstation.dmm b/_maps/RandomRuins/SpaceRuins/nova/waypointstation.dmm similarity index 100% rename from _maps/RandomRuins/SpaceRuins/skyrat/waypointstation.dmm rename to _maps/RandomRuins/SpaceRuins/nova/waypointstation.dmm diff --git a/_maps/RandomRuins/SpaceRuins/whiteshipruin_box_skyrat.dmm b/_maps/RandomRuins/SpaceRuins/nova/whiteshipruin_box.dmm similarity index 100% rename from _maps/RandomRuins/SpaceRuins/whiteshipruin_box_skyrat.dmm rename to _maps/RandomRuins/SpaceRuins/nova/whiteshipruin_box.dmm diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/wreckedfriendship.dmm b/_maps/RandomRuins/SpaceRuins/nova/wreckedfriendship.dmm similarity index 100% rename from _maps/RandomRuins/SpaceRuins/skyrat/wreckedfriendship.dmm rename to _maps/RandomRuins/SpaceRuins/nova/wreckedfriendship.dmm diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/wreckedhomestead.dmm b/_maps/RandomRuins/SpaceRuins/nova/wreckedhomestead.dmm similarity index 100% rename from _maps/RandomRuins/SpaceRuins/skyrat/wreckedhomestead.dmm rename to _maps/RandomRuins/SpaceRuins/nova/wreckedhomestead.dmm diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index 18dc918a109216..2fd8256c659996 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -541,12 +541,12 @@ pixel_y = 2; pixel_x = 6 }, -/mob/living/simple_animal/bot/cleanbot/autopatrol{ +/mob/living/basic/bot/cleanbot/autopatrol{ bot_mode_flags = 12; name = "Ramboo"; pixel_x = -2; pixel_y = 5; - bot_cover_flags = 0 + bot_access_flags = 0 }, /turf/open/floor/plating{ initial_gas_mix = "co2=6;o2=16;n2=82;TEMP=293.15" @@ -2842,9 +2842,7 @@ /area/ruin/space/ancientstation/charlie/hall) "mm" = ( /obj/machinery/power/supermatter_crystal/shard, -/obj/structure/closet/crate/engineering{ - name = "supermatter shard crate" - }, +/obj/structure/closet/crate/radiation, /turf/open/floor/iron/white/textured, /area/ruin/space/ancientstation/delta/proto) "mo" = ( @@ -3802,32 +3800,6 @@ /obj/effect/mapping_helpers/apc/away_general_access, /turf/open/floor/engine/airless, /area/ruin/space/ancientstation/beta/supermatter) -"rN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/glass, -/obj/item/reagent_containers/cup/bottle{ - pixel_x = 4; - list_reagents = list(/datum/reagent/growthserum=30); - name = "Experimental solution"; - renamedByPlayer = 1; - pixel_y = 8 - }, -/obj/item/reagent_containers/cup/bottle{ - pixel_x = -4; - list_reagents = list(/datum/reagent/consumable/nutriment/peptides=30); - name = "Solution for Molly"; - renamedByPlayer = 1 - }, -/obj/item/reagent_containers/dropper{ - pixel_x = -7; - pixel_y = 10 - }, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/white/textured_edge, -/area/ruin/space/ancientstation/delta/biolab) "rP" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -5155,7 +5127,6 @@ "By" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/computer/monitor, -/obj/machinery/computer/monitor, /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 1 }, @@ -5178,11 +5149,6 @@ /obj/structure/cable, /turf/template_noop, /area/space/nearstation) -"BC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/fluff/broken_canister_frame, -/turf/open/floor/engine/airless, -/area/ruin/space/ancientstation/beta/supermatter) "BH" = ( /obj/item/solar_assembly, /obj/structure/cable, @@ -5427,6 +5393,11 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/rnd) +"DK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/fluff/broken_canister_frame, +/turf/open/floor/engine/airless, +/area/ruin/space/ancientstation/beta/supermatter) "DM" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -7740,6 +7711,30 @@ /obj/effect/mapping_helpers/airalarm/away_general_access, /turf/open/floor/iron/white/textured, /area/ruin/space/ancientstation/delta/proto) +"TH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/bottle{ + pixel_x = 4; + list_reagents = list(/datum/reagent/growthserum=30); + name = "Experimental solution"; + pixel_y = 8 + }, +/obj/item/reagent_containers/cup/bottle{ + pixel_x = -4; + list_reagents = list(/datum/reagent/consumable/nutriment/peptides=30); + name = "Solution for Molly" + }, +/obj/item/reagent_containers/dropper{ + pixel_x = -7; + pixel_y = 10 + }, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_edge, +/area/ruin/space/ancientstation/delta/biolab) "TI" = ( /obj/machinery/door/airlock/science, /obj/effect/decal/cleanable/dirt, @@ -10556,7 +10551,7 @@ NU xY lI CN -BC +DK iv Qi ZD @@ -15302,7 +15297,7 @@ aa aa aa SU -rN +TH Pg zI uI diff --git a/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm b/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm index 76e7da25fa414e..f07d5408b65bf2 100644 --- a/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm +++ b/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm @@ -519,6 +519,10 @@ "fU" = ( /turf/open/floor/iron, /area/ruin/space/ks13/ai/corridor) +"gd" = ( +/obj/machinery/portable_atmospherics/canister/plasma, +/turf/open/floor/iron/airless, +/area/ruin/space/ks13/engineering/singulo) "ge" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -741,12 +745,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating/airless, /area/ruin/space/ks13/engineering/singulo) -"jD" = ( -/obj/machinery/light/small/directional/east, -/obj/structure/closet/emcloset, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/airless, -/area/ruin/space/ks13/dorms) "jV" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle, /turf/open/floor/plating/airless, @@ -3359,7 +3357,7 @@ "AI" = ( /obj/effect/decal/remains/human{ desc = "This guy seemed to have died in terrible way! Half his remains are dust."; - name = "Syndicate agent remains" + name = "Symphionia agent remains" }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/airless, @@ -3626,17 +3624,6 @@ /obj/structure/cable, /turf/open/floor/plating/airless, /area/ruin/space/ks13/security/cell) -"Cd" = ( -/obj/machinery/light/small/directional/west, -/obj/structure/table_frame, -/obj/item/wallframe/apc{ - pixel_x = -5; - pixel_y = 9 - }, -/obj/item/wallframe/apc, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/airless, -/area/ruin/space/ks13/engineering/tech_storage) "Ce" = ( /obj/effect/mapping_helpers/burnt_floor, /obj/machinery/airalarm/directional/north, @@ -4078,11 +4065,6 @@ }, /turf/open/floor/plating/airless, /area/ruin/space/ks13/science/rnd) -"EC" = ( -/obj/machinery/portable_atmospherics/canister/plasma, -/obj/machinery/portable_atmospherics/canister/plasma, -/turf/open/floor/iron/airless, -/area/ruin/space/ks13/engineering/singulo) "ED" = ( /obj/machinery/door/airlock/maintenance{ name = "Atmospherics Access" @@ -4252,12 +4234,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/airless, /area/ruin/space/ks13/hallway/aft) -"Fy" = ( -/obj/machinery/light/small/directional/west, -/obj/machinery/light/small/directional/west, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/iron/airless, -/area/ruin/space/ks13/engineering/singulo) "FB" = ( /obj/machinery/light/small/directional/west, /obj/structure/closet, @@ -4554,6 +4530,13 @@ }, /turf/open/floor/plating/airless, /area/ruin/space/ks13/command/bridge) +"GW" = ( +/obj/item/circuitboard/machine/smes, +/obj/structure/table, +/obj/effect/spawner/random/maintenance, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/ks13/engineering/secure_storage) "GY" = ( /obj/structure/cable, /turf/open/floor/iron/chapel{ @@ -4935,11 +4918,6 @@ /obj/item/wallframe/firealarm, /turf/open/floor/iron/airless, /area/ruin/space/ks13/engineering/atmos) -"Jm" = ( -/obj/machinery/light/small/directional/east, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating/airless, -/area/ruin/space/ks13/engineering/singulo) "Jp" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 @@ -5687,7 +5665,7 @@ /obj/item/paper/fluff/ruins/thederelict/vaultraider, /obj/effect/decal/remains/human{ desc = "This guy seemed to have died in terrible way! Half his remains are dust."; - name = "Syndicate agent remains" + name = "Symphionia agent remains" }, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating/airless, @@ -6066,15 +6044,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/ruin/space/ks13/security/court) -"Ps" = ( -/obj/machinery/light/small/directional/east, -/obj/item/circuitboard/machine/smes, -/obj/structure/table, -/obj/machinery/light/small/directional/east, -/obj/effect/spawner/random/maintenance, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/iron/airless, -/area/ruin/space/ks13/engineering/secure_storage) "Pt" = ( /obj/structure/cable, /obj/effect/mapping_helpers/broken_floor, @@ -6479,7 +6448,7 @@ /obj/structure/grille/broken, /obj/effect/decal/remains/human{ desc = "This guy seemed to have died in terrible way! Half his remains are dust."; - name = "Syndicate agent remains" + name = "Symphionia agent remains" }, /obj/effect/decal/cleanable/glass, /turf/open/floor/plating/airless, @@ -6737,6 +6706,10 @@ /obj/structure/chair, /turf/open/floor/iron/airless, /area/ruin/space/ks13/security/court_hall) +"SI" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/iron/airless, +/area/ruin/space/ks13/dorms) "SJ" = ( /obj/structure/frame/computer{ anchored = 1; @@ -7602,6 +7575,15 @@ "Xa" = ( /turf/open/floor/plating/airless, /area/ruin/space/ks13/ai/corridor) +"Xb" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/table_frame, +/obj/item/wallframe/apc{ + pixel_x = -5; + pixel_y = 9 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/ks13/engineering/tech_storage) "Xd" = ( /obj/structure/closet/crate/bin, /obj/effect/decal/cleanable/dirt, @@ -9607,7 +9589,7 @@ Fq yq rm uf -jD +SI oU sm wc @@ -10945,7 +10927,7 @@ rk QG QG Xt -Cd +Xb DT QG QG @@ -11387,7 +11369,7 @@ rk rk sU sU -EC +gd CX PI PI @@ -11732,7 +11714,7 @@ PI Ex pi FI -Fy +FI FI FI zv @@ -12862,7 +12844,7 @@ fg Jc gB PI -Jm +zv zv zv HX @@ -13657,7 +13639,7 @@ rk rr rr ab -Ps +GW DL rr rr diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/clothing_facility.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/clothing_facility.dmm deleted file mode 100644 index b8c0a4e576cbc0..00000000000000 --- a/_maps/RandomRuins/SpaceRuins/skyrat/clothing_facility.dmm +++ /dev/null @@ -1,640 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"c" = ( -/turf/closed/mineral/random, -/area/ruin/unpowered/no_grav) -"d" = ( -/obj/machinery/destructive_scanner, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"e" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"f" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"g" = ( -/turf/open/floor/iron/dark/side, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"h" = ( -/obj/structure/toilet{ - pixel_y = 12 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"i" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"j" = ( -/turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"k" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"l" = ( -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"m" = ( -/obj/machinery/light/directional/north, -/turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"n" = ( -/obj/item/card/id/advanced/silver/generic, -/obj/structure/rack, -/obj/item/card/id/advanced/silver/generic{ - pixel_y = 3 - }, -/obj/item/card/id/advanced/silver/generic{ - pixel_y = 6 - }, -/turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"o" = ( -/obj/structure/sink/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"p" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"q" = ( -/obj/item/clothing/neck/cloak/colourable/veil, -/obj/structure/rack, -/obj/item/clothing/neck/cloak/colourable/veil, -/obj/item/clothing/neck/cloak/colourable/veil, -/turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"r" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"s" = ( -/obj/machinery/autolathe, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"t" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"u" = ( -/obj/machinery/door/window/left/directional/south, -/turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"v" = ( -/obj/machinery/light/directional/west, -/obj/machinery/rnd/destructive_analyzer, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"w" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"x" = ( -/turf/open/floor/iron/dark/corner{ - dir = 1 - }, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"y" = ( -/turf/open/floor/iron/dark/corner, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"z" = ( -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"A" = ( -/obj/machinery/door/airlock, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"B" = ( -/obj/machinery/door/airlock/research, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"C" = ( -/turf/open/floor/iron/dark/corner{ - dir = 8 - }, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"D" = ( -/obj/machinery/light/directional/south, -/obj/structure/toilet{ - dir = 8 - }, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"E" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"F" = ( -/obj/machinery/door/window/right/directional/west, -/turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"G" = ( -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"H" = ( -/turf/open/floor/iron/bluespace, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"I" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"J" = ( -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"K" = ( -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark/corner{ - dir = 8 - }, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"L" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"M" = ( -/obj/machinery/door/airlock/highsecurity, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"N" = ( -/obj/machinery/light/directional/east, -/turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"O" = ( -/turf/open/floor/iron/dark/corner{ - dir = 4 - }, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"P" = ( -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"Q" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"R" = ( -/obj/machinery/light/directional/west, -/turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"S" = ( -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"T" = ( -/obj/structure/rack, -/obj/item/clothing/neck/cloak/colourable/shroud, -/obj/item/clothing/neck/cloak/colourable/shroud, -/obj/item/clothing/neck/cloak/colourable/shroud, -/turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"U" = ( -/obj/structure/sink/directional/east, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"V" = ( -/obj/structure/statue/plasma/scientist, -/turf/open/floor/iron/bluespace, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"W" = ( -/obj/machinery/door/window/right/directional/east, -/turf/open/floor/engine, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"Y" = ( -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) -"Z" = ( -/obj/machinery/door/airlock/external, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/clothing_facility) - -(1,1,1) = {" -a -a -a -a -a -a -c -c -c -c -c -c -c -c -c -c -c -c -c -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -a -a -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -a -a -a -"} -(3,1,1) = {" -a -a -a -a -c -c -f -f -f -f -f -e -e -e -e -e -e -e -e -e -e -e -a -a -"} -(4,1,1) = {" -a -a -c -c -c -c -f -j -R -j -f -d -v -s -e -U -z -e -k -i -p -w -a -a -"} -(5,1,1) = {" -a -c -c -c -c -c -f -j -T -j -f -G -G -G -e -h -z -A -S -S -S -w -a -a -"} -(6,1,1) = {" -a -c -c -f -f -f -f -E -W -E -f -l -l -l -e -e -e -e -S -S -S -e -a -a -"} -(7,1,1) = {" -a -c -c -f -j -j -t -G -G -G -f -y -J -O -y -J -O -e -y -J -O -w -w -w -"} -(8,1,1) = {" -c -c -c -f -m -n -u -G -S -G -M -g -H -P -g -H -P -B -g -V -P -Z -b -Z -"} -(9,1,1) = {" -c -c -c -f -j -j -t -G -G -G -f -C -l -x -K -l -x -e -C -l -x -w -w -w -"} -(10,1,1) = {" -c -c -c -f -f -f -f -I -F -I -f -y -J -O -e -e -A -e -S -S -S -e -a -a -"} -(11,1,1) = {" -a -c -c -c -c -c -f -j -q -j -f -g -H -P -e -z -z -e -S -S -S -w -a -a -"} -(12,1,1) = {" -a -a -c -c -c -c -f -j -N -j -f -C -Y -x -e -o -D -e -Q -r -L -w -a -a -"} -(13,1,1) = {" -a -a -a -a -c -c -f -f -f -f -f -e -e -e -e -e -e -e -e -e -e -e -a -a -"} -(14,1,1) = {" -a -a -a -a -a -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -a -a -a -"} -(15,1,1) = {" -a -a -a -a -a -a -c -c -c -c -a -a -c -c -c -c -c -c -c -c -a -a -a -a -"} diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm deleted file mode 100644 index 801e86950e4d70..00000000000000 --- a/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm +++ /dev/null @@ -1,14253 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/obj/effect/turf_decal/siding/dark, -/obj/machinery/light/cold/directional/west, -/obj/structure/closet/secure_closet/interdynefob/prisoner_locker, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/structure/cable, -/obj/item/restraints/handcuffs, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"ac" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/structure/closet/secure_closet/interdynefob/mod_locker, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"ae" = ( -/obj/effect/turf_decal/bot, -/obj/effect/spawner/random/decoration/carpet, -/obj/structure/closet/crate/cardboard, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ - pixel_x = 4 - }, -/obj/effect/spawner/random/maintenance/three, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"ag" = ( -/obj/effect/turf_decal/trimline/purple/warning{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/junction/flip{ - dir = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"ah" = ( -/obj/structure/table, -/obj/item/paper_bin, -/obj/item/pen, -/obj/effect/turf_decal/stripes/red/line, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"aj" = ( -/obj/structure/frame/machine{ - anchored = 1; - icon_state = "box_1"; - state = 2 - }, -/obj/item/circuitboard/machine/mech_recharger, -/obj/effect/turf_decal/trimline/dark_red/filled/line, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"ak" = ( -/obj/effect/turf_decal/siding/wood, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command{ - hackProof = 1; - id_tag = "scorpliaison"; - name = "Corporate Liaison" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/unres, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"ao" = ( -/obj/machinery/stasis, -/obj/machinery/camera/xray/directional/south{ - c_tag = "DS-2 Medical"; - network = list("ds2") - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 6 - }, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"at" = ( -/obj/effect/turf_decal/siding/dark/end, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"au" = ( -/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, -/obj/effect/turf_decal/stripes/red/line, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/obj/effect/turf_decal/delivery/red, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/security/old/glass{ - name = "Security Checkpoint" - }, -/obj/effect/mapping_helpers/airlock/unres, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"av" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/line{ - dir = 9 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 9 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/machinery/camera/xray/directional/north{ - c_tag = "DS-2 Isolation Cell"; - network = list("ds2") - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"ax" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "ds2conveyor" - }, -/obj/structure/railing, -/obj/machinery/light/red/directional/north, -/obj/structure/plasticflaps, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"az" = ( -/obj/effect/turf_decal/trimline/dark_blue/line{ - dir = 8 - }, -/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/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"aB" = ( -/obj/machinery/vending/imported/tiziran, -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 8 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"aC" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"aF" = ( -/obj/effect/turf_decal/trimline/dark_blue/line{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"aH" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/structure/chair{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 9 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"aJ" = ( -/obj/effect/turf_decal/vg_decals/numbers/one{ - dir = 4 - }, -/turf/open/floor/engine/hull, -/area/template_noop) -"aL" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 10 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"aN" = ( -/obj/machinery/atmospherics/components/binary/valve/digital, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"aP" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/window/survival_pod{ - dir = 8; - req_access = list("syndicate") - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/table/reinforced/plastitaniumglass, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"aR" = ( -/obj/effect/turf_decal/trimline/dark_green/warning{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"aT" = ( -/turf/closed/wall/r_wall/syndicate, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"aW" = ( -/obj/machinery/porta_turret/syndicate/energy{ - dir = 6 - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/vault) -"aX" = ( -/obj/effect/turf_decal/bot_white, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/scrubber, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"aY" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/recharger, -/obj/item/paper_bin{ - pixel_x = -14 - }, -/obj/item/pen{ - pixel_x = -14 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"aZ" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ - dir = 5 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"ba" = ( -/obj/effect/turf_decal/stripes/red/corner, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"bd" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 9 - }, -/obj/structure/chair/office/light{ - dir = 8 - }, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"be" = ( -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/components/unary/outlet_injector/on{ - dir = 1; - volume_rate = 200 - }, -/turf/template_noop, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"bj" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/structure/chair/office, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"bk" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/button/door{ - desc = "To keep your valuable gear away from prying eyes."; - id = "ds2armory"; - name = "Armory Access"; - pixel_x = 32; - pixel_y = 24; - req_access = list("syndicate_leader") - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"bo" = ( -/obj/machinery/disposal/bin, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating/end{ - dir = 8 - }, -/turf/open/floor/iron/small, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"bq" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/structure/closet/secure_closet/interdynefob/brig_officer_locker, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"bs" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 4 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"bt" = ( -/obj/structure/bed{ - dir = 1 - }, -/obj/item/bedsheet/syndie{ - dir = 1; - name = "station admiral's bedsheet" - }, -/turf/open/floor/carpet/red, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral) -"bu" = ( -/obj/structure/curtain, -/obj/structure/drain, -/obj/machinery/shower/directional/north, -/obj/effect/turf_decal/siding/dark{ - dir = 10 - }, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"bw" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"bx" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/line{ - dir = 9 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/button/curtain{ - id = "DS2cell2"; - name = "curtain control"; - pixel_y = 24 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"by" = ( -/obj/machinery/vending/security{ - desc = "An Armadyne peacekeeper equipment vendor. Makes you wonder why there's no Gorlex Equipment Vendor yet."; - name = "\improper Stolen Armadyne Equipment Vendor" - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"bA" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/corner, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"bP" = ( -/obj/structure/table, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/obj/item/storage/bag/tray/cafeteria, -/obj/item/storage/bag/tray/cafeteria{ - pixel_y = 3 - }, -/obj/item/storage/bag/tray/cafeteria{ - pixel_y = 6 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"bR" = ( -/obj/machinery/computer/operating, -/obj/effect/turf_decal/tile/dark_blue/full, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"bS" = ( -/obj/item/melee/baton/telescopic{ - pixel_x = 4; - pixel_y = 9 - }, -/obj/item/melee/baton/telescopic{ - pixel_x = 10; - pixel_y = 9 - }, -/obj/item/melee/baton/telescopic{ - pixel_x = -2; - pixel_y = 9 - }, -/obj/item/melee/energy/sword/saber/red, -/obj/item/melee/energy/sword/saber/red{ - pixel_x = 13 - }, -/obj/item/melee/energy/sword/saber/red{ - pixel_x = 7 - }, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/structure/rack/shelf, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"bW" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/dark_red/half/contrasted, -/obj/effect/turf_decal/siding/wideplating_new/dark, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/window/reinforced/survival_pod{ - dir = 6 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"bX" = ( -/obj/structure/table/reinforced, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 9 - }, -/obj/item/paper, -/obj/item/pen{ - pixel_x = -5; - pixel_y = 3 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"bY" = ( -/obj/effect/turf_decal/trimline/purple/filled/line, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/machinery/firealarm/directional/south, -/obj/structure/chair/office/light{ - dir = 8 - }, -/turf/open/floor/iron/dark/side, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"ca" = ( -/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/ruin/space/has_grav/skyrat/interdynefob/cargo) -"cb" = ( -/obj/item/clothing/shoes/galoshes{ - pixel_y = -8 - }, -/obj/item/reagent_containers/spray/cleaner{ - pixel_x = 6; - pixel_y = -6 - }, -/obj/item/holosign_creator/janibarrier{ - pixel_y = -9 - }, -/obj/item/mop, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/machinery/light/small/directional/east, -/obj/structure/mop_bucket/janitorialcart{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_half{ - dir = 1 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"ch" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 8 - }, -/obj/structure/chair{ - dir = 8 - }, -/obj/machinery/camera/xray/directional/north{ - c_tag = "DS-2 Diner"; - network = list("ds2") - }, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"cj" = ( -/obj/effect/turf_decal/skyrat_decals/syndicate/middle/middle, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/turf_decal/skyrat_decals/ds2/middle, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"cm" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/structure/transit_tube{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "ds2bridge" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"cn" = ( -/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 = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"cq" = ( -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/machinery/light/cold/directional/east, -/obj/effect/turf_decal/siding/wideplating_new/dark/corner, -/obj/machinery/button/door/directional/east{ - desc = "To keep your hangar away from prying eyes."; - id = "void-be-gone"; - name = "Hangar Blast Door Control"; - req_access = list("syndicate") - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/effect/turf_decal/tile/dark_red, -/obj/effect/turf_decal/siding/wideplating_new/dark{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_edge{ - dir = 1 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"cr" = ( -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/siding/thinplating/end{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 4 - }, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/iron/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"ct" = ( -/obj/effect/turf_decal/bot_white, -/obj/structure/table, -/obj/effect/spawner/random/food_or_drink/donkpockets, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"cu" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/obj/machinery/door/airlock/freezer{ - name = "Medical Storage" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"cy" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"cz" = ( -/obj/effect/turf_decal/siding/dark/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 10 - }, -/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/ruin/space/has_grav/skyrat/interdynefob/research) -"cA" = ( -/obj/structure/railing, -/obj/effect/turf_decal/siding/dark, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem) -"cD" = ( -/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/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"cE" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/fishing_portal_generator, -/obj/item/storage/toolbox/fishing, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"cG" = ( -/obj/item/bedsheet/qm{ - desc = "It is decorated with the Donk Co. logo."; - name = "corporate liaison's bedsheet" - }, -/obj/structure/bed, -/turf/open/floor/carpet/donk, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"cI" = ( -/obj/machinery/power/shuttle_engine/propulsion/left{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/light/floor{ - use_power = 0 - }, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/skyrat/interdynefob) -"cL" = ( -/obj/machinery/door/airlock/grunge{ - name = "Interrogation Room" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/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/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/lawyer) -"cO" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/structure/cable, -/obj/machinery/cell_charger_multi, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"cP" = ( -/obj/effect/turf_decal/trimline/blue/corner, -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/structure/window/reinforced/survival_pod{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"cS" = ( -/obj/effect/turf_decal/siding/dark, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"cU" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"cW" = ( -/obj/structure/closet/secure_closet/interdynefob/mining_locker, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"cY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"da" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/hedge, -/obj/machinery/light/warm/directional/north, -/obj/structure/sign/painting/library{ - pixel_y = 30 - }, -/turf/open/floor/wood/parquet, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"dg" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"dh" = ( -/obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"dn" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 6 - }, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"do" = ( -/obj/structure/extinguisher_cabinet/directional/west, -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/obj/structure/table/wood/fancy/black, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"dr" = ( -/obj/structure/cable, -/obj/machinery/light/cold/directional/west, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/frame/machine{ - anchored = 1; - icon_state = "box_1"; - state = 2 - }, -/obj/item/circuitboard/machine/ore_redemption, -/obj/item/assembly/igniter, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"ds" = ( -/obj/effect/turf_decal/arrows{ - dir = 8; - pixel_x = 14 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"dv" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/structure/curtain/cloth/fancy/mechanical{ - color = "#555555"; - icon_state = "bathroom-open"; - icon_type = "bathroom"; - id = "DS2cell2" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"dy" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "interdynefobn2"; - dir = 4 - }, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"dz" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/yellow/warning, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/junction/yjunction, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"dC" = ( -/obj/structure/dresser, -/obj/item/flashlight/lamp/green{ - pixel_x = 5; - pixel_y = 15 - }, -/turf/open/floor/carpet/donk, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"dD" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/effect/turf_decal/trimline/dark_red/end, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ - dir = 8 - }, -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"dF" = ( -/obj/machinery/button/door/directional/north{ - desc = "Keep out the riff-raff."; - id = "sadmiral"; - name = "Admiral's room bolt"; - normaldoorcontrol = 1; - req_access = list("syndicate_leader"); - specialfunctions = 4 - }, -/obj/effect/turf_decal/siding/wood, -/obj/machinery/light/warm/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/bed/dogbed, -/obj/effect/decal/cleanable/oil, -/mob/living/basic/pet/syndifox, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral) -"dI" = ( -/obj/effect/turf_decal/bot_white, -/obj/structure/sink/kitchen/directional/west, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"dN" = ( -/obj/effect/turf_decal/siding/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/yellow/warning{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/line{ - dir = 4 - }, -/obj/structure/closet/secure_closet/ds2atmos{ - anchorable = 0; - anchored = 1 - }, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"dO" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_red/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_red/corner, -/obj/effect/turf_decal/trimline/dark_red/corner{ - dir = 8 - }, -/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/dark/textured_half, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"dQ" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/door/airlock/command{ - hackProof = 1; - id_tag = "sadmiral"; - name = "Station Admiral" - }, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/unres, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral) -"dR" = ( -/obj/machinery/shower/directional/north, -/obj/effect/turf_decal/siding/dark{ - dir = 6 - }, -/obj/structure/drain, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness) -"dS" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/bot_white, -/obj/machinery/portable_atmospherics/scrubber, -/obj/machinery/light/warm/directional/west, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"dT" = ( -/obj/machinery/power/shuttle_engine/propulsion/right{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/skyrat/interdynefob) -"dZ" = ( -/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/ruin/space/has_grav/skyrat/interdynefob/halls) -"ee" = ( -/obj/effect/turf_decal/bot_blue, -/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/service{ - dir = 1 - }, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"ek" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/hedge, -/obj/structure/sign/painting/library{ - pixel_y = 30 - }, -/turf/open/floor/wood/parquet, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"em" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ - dir = 10 - }, -/obj/machinery/meter, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"eo" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/closet/secure_closet/personal, -/obj/item/clothing/under/misc/syndicate_souvenir{ - has_sensor = 0; - pixel_y = -4 - }, -/obj/item/clothing/under/misc/syndicate_souvenir{ - has_sensor = 0; - pixel_x = 4; - pixel_y = -7 - }, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"ep" = ( -/obj/effect/turf_decal/bot_blue, -/obj/machinery/light/cold/directional/west, -/obj/structure/closet/secure_closet/freezer/kitchen{ - req_access = list("syndicate") - }, -/obj/item/reagent_containers/condiment/soymilk, -/obj/item/reagent_containers/condiment/soymilk, -/obj/item/reagent_containers/condiment/milk, -/obj/item/reagent_containers/condiment/milk, -/obj/item/storage/fancy/egg_box, -/obj/item/storage/fancy/egg_box, -/obj/item/reagent_containers/condiment/sugar, -/obj/item/reagent_containers/condiment/rice, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/flour, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"ez" = ( -/obj/machinery/atmospherics/pipe/smart/simple/green/visible/layer2{ - dir = 5 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 6 - }, -/obj/machinery/atmospherics/components/binary/valve/digital{ - dir = 4 - }, -/obj/machinery/button/door/directional/south{ - desc = "Keep out the Blazing heat."; - id = "DS2incineratorHatch"; - name = "Incinerator Hatch Bolt"; - normaldoorcontrol = 1; - pixel_x = 6; - req_access = list("syndicate_leader"); - specialfunctions = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"eA" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/effect/turf_decal/siding/yellow{ - dir = 8 - }, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"eD" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/effect/turf_decal/trimline/dark_red/line, -/obj/structure/sign/flag/syndicate/directional/south{ - pixel_x = 16 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/item/toy/mecha/darkgygax{ - pixel_y = 16 - }, -/obj/item/toy/figure/syndie, -/turf/open/floor/iron/dark/textured_half, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"eE" = ( -/obj/structure/filingcabinet, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/security/lawyer) -"eF" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"eH" = ( -/obj/effect/turf_decal/box/red/corners{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/red/corner, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"eJ" = ( -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"eK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/structure/window/reinforced/survival_pod{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/table, -/obj/item/stack/sheet/plasteel/twenty{ - pixel_x = -2 - }, -/obj/item/stack/sheet/mineral/titanium/fifty{ - amount = 20; - pixel_x = 6; - pixel_y = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"eO" = ( -/obj/machinery/hydroponics/constructable, -/obj/machinery/firealarm/directional/east, -/obj/machinery/camera/xray/directional/east{ - c_tag = "DS-2 Botany"; - network = list("ds2") - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"eP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"eT" = ( -/obj/structure/table, -/obj/item/analyzer{ - pixel_y = 10 - }, -/obj/item/pipe_dispenser{ - pixel_x = -3 - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 10 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"eU" = ( -/obj/machinery/light/warm/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"eV" = ( -/obj/effect/turf_decal/tile/dark_blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/dark_blue{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/closet/crate/silvercrate, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/vault) -"eW" = ( -/obj/machinery/button/door{ - id = "TESRedguard"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_x = 24; - pixel_y = -24; - specialfunctions = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"eX" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/effect/turf_decal/siding/yellow{ - dir = 8 - }, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"eY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"fa" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"fc" = ( -/obj/effect/turf_decal/box/red/corners{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"fd" = ( -/mob/living/simple_animal/bot/medbot/stationary{ - faction = list("Syndicate"); - maints_access_required = list("syndicate"); - name = "Insurgent Care"; - radio_channel = "Syndicate" - }, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"fe" = ( -/obj/machinery/griddle, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"ff" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/dark, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"fh" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"fl" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"fo" = ( -/obj/structure/closet/emcloset, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/window/reinforced/survival_pod{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"fw" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/structure/chair/office/light, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"fy" = ( -/obj/machinery/light/cold/directional/west, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark, -/obj/structure/chair/stool/directional/north, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"fz" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/eva) -"fA" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/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/ruin/space/has_grav/skyrat/interdynefob/research) -"fB" = ( -/obj/effect/turf_decal/trimline/purple/line{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"fE" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_red/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_red/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ - dir = 4 - }, -/obj/structure/sign/flag/syndicate/directional/north, -/obj/structure/showcase/cyborg{ - desc = "A stand with the empty body of a Cybersun cyborg bolted to it."; - dir = 8; - icon = 'icons/mob/silicon/robots.dmi'; - icon_state = "synd_sec"; - name = "syndicate cyborg showcase"; - pixel_x = 6 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/dark/textured_half{ - dir = 1 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"fQ" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron/dark/textured_edge{ - dir = 8 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"fS" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/dark_blue/line{ - dir = 1 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"fW" = ( -/obj/effect/turf_decal/siding/dark/corner{ - dir = 8 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"gb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"gg" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/door/airlock/external/glass{ - name = "External Access" - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"gi" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/vg_decals/numbers/two, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"gj" = ( -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, -/obj/effect/turf_decal/delivery/red, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/old{ - hackProof = 1; - name = "Long-Term Brig" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "DS2permabrig" - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"gk" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/power/rtg/advanced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"gn" = ( -/turf/closed/wall/r_wall/syndicate, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"go" = ( -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"gv" = ( -/obj/machinery/porta_turret/syndicate/energy{ - dir = 5 - }, -/turf/closed/wall/r_wall/syndicate, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/vault) -"gw" = ( -/obj/structure/frame/machine{ - anchored = 1; - icon_state = "box_1"; - state = 2 - }, -/obj/item/circuitboard/machine/component_printer, -/obj/effect/turf_decal/trimline/dark_red/filled/line{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"gx" = ( -/obj/machinery/door/airlock/engineering{ - name = "Engineering" - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"gy" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/teargas{ - pixel_x = 3; - pixel_y = 6 - }, -/obj/item/storage/box/handcuffs{ - pixel_y = 3 - }, -/obj/item/storage/box/flashbangs{ - pixel_x = -3 - }, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 1 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"gA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"gB" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"gF" = ( -/obj/machinery/door/airlock/security/old/glass{ - name = "Security" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/effect/turf_decal/delivery/red, -/obj/structure/cable, -/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/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "DS2brig" - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"gG" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/dark_red/half/contrasted{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/turf_decal/siding/wideplating_new/dark{ - dir = 4 - }, -/obj/machinery/camera/xray/directional/north{ - c_tag = "DS-2 Hangar Airlock"; - network = list("ds2") - }, -/obj/structure/sign/flag/syndicate/directional/north, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"gK" = ( -/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/brigoff{ - dir = 8 - }, -/obj/machinery/light/cold/directional/east, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"gN" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/incinerator_input{ - chamber_id = "syndicatelava_incinerator"; - dir = 8 - }, -/turf/open/floor/engine, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"gO" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Diner" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"gW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/structure/cable, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"ha" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/line{ - dir = 5 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 5 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/structure/table, -/obj/effect/spawner/random/entertainment/cigarette_pack, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"he" = ( -/obj/effect/turf_decal/bot_blue, -/obj/machinery/light/warm/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/pump, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"hf" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/dark_blue/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"hg" = ( -/obj/machinery/suit_storage_unit/syndicate/softsuit, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/eva) -"hh" = ( -/obj/structure/chair/comfy/brown{ - color = "#596479"; - dir = 1 - }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral) -"hi" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"hn" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"ho" = ( -/obj/machinery/computer/security{ - dir = 4; - network = list("ds2") - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"hq" = ( -/obj/structure/drain, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/siding/thinplating{ - dir = 6 - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/firealarm/directional/north, -/obj/machinery/duct, -/turf/open/floor/iron/small, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"hs" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"hx" = ( -/obj/machinery/power/turbine/inlet_compressor, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/engine, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"hy" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark/corner, -/obj/effect/turf_decal/siding/dark/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/ruin/space/has_grav/skyrat/interdynefob/bridge/vault) -"hz" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"hA" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/machinery/light/cold/directional/east, -/obj/effect/spawner/random/contraband/prison, -/obj/structure/closet/crate/bin, -/obj/effect/spawner/random/trash/food_packaging{ - pixel_y = -5 - }, -/obj/effect/spawner/random/trash/cigbutt, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"hC" = ( -/obj/effect/turf_decal/stripes/red/line, -/obj/effect/turf_decal/siding/dark, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/structure/rack, -/obj/item/storage/medkit/emergency, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"hE" = ( -/obj/effect/turf_decal/siding/dark/corner{ - dir = 8 - }, -/obj/machinery/light/cold/directional/north, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem) -"hF" = ( -/obj/item/tank/internals/plasmaman/belt{ - pixel_x = -6 - }, -/obj/item/tank/internals/plasmaman/belt{ - pixel_x = 3 - }, -/obj/item/tank/internals/nitrogen/belt{ - pixel_x = -6 - }, -/obj/item/tank/internals/nitrogen/belt, -/obj/item/tank/internals/nitrogen/belt{ - pixel_x = 6 - }, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/structure/rack/shelf, -/obj/effect/turf_decal/trimline/blue/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"hG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"hH" = ( -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"hJ" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/hedge, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/structure/window/reinforced/survival_pod{ - dir = 6 - }, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/wood/parquet, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"hM" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/door/poddoor/preopen{ - id = "void-be-gone" - }, -/obj/structure/fans/tiny/forcefield{ - dir = 4 - }, -/obj/effect/turf_decal/tile/dark_red/half{ - dir = 4 - }, -/obj/effect/turf_decal/tile/dark_red/half{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_half{ - dir = 1 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"hP" = ( -/obj/machinery/light/cold/directional/east, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/vending/cigarette, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"hQ" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/bot, -/obj/structure/closet/crate/cardboard, -/obj/item/pai_card, -/obj/effect/spawner/random/maintenance/three, -/turf/open/floor/iron/dark/textured_edge, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"hR" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/eva) -"hT" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/obj/effect/turf_decal/siding/dark, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/structure/table/glass, -/obj/item/storage/backpack/duffelbag/synth_treatment_kit/trauma/advanced/unzipped, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"hZ" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark/end{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"ib" = ( -/obj/effect/turf_decal/tile/dark_blue/full, -/obj/effect/turf_decal/siding/white, -/obj/machinery/chem_heater/withbuffer, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem) -"ie" = ( -/obj/structure/bed, -/obj/item/bedsheet/hos{ - name = "master at arms's bedsheet" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"ih" = ( -/obj/effect/turf_decal/trimline/brown/corner{ - dir = 1 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"ij" = ( -/obj/effect/turf_decal/trimline/purple/filled/corner{ - dir = 4 - }, -/obj/item/circuitboard/machine/circuit_imprinter/offstation, -/obj/structure/frame/machine{ - anchored = 1; - icon_state = "box_1"; - state = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"il" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness) -"io" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/machinery/door/window/survival_pod{ - dir = 8; - req_access = list("syndicate") - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem) -"it" = ( -/obj/structure/chair, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/security/lawyer) -"iw" = ( -/obj/effect/turf_decal/bot, -/obj/structure/closet/crate/freezer{ - name = "imported ingredient freezer" - }, -/obj/item/reagent_containers/condiment/vinegar{ - pixel_x = -3; - pixel_y = 11 - }, -/obj/item/reagent_containers/condiment/yoghurt{ - pixel_x = 6; - pixel_y = 5 - }, -/obj/item/reagent_containers/condiment/cornmeal{ - pixel_x = -6; - pixel_y = 2 - }, -/obj/item/food/canned/jellyfish{ - pixel_x = 5 - }, -/obj/item/food/canned/desert_snails{ - pixel_x = -3; - pixel_y = 1 - }, -/obj/item/food/canned/tomatoes, -/obj/item/food/canned/tuna{ - pixel_x = -6; - pixel_y = -5 - }, -/obj/item/food/canned/pine_nuts{ - pixel_x = 10; - pixel_y = -9 - }, -/obj/item/reagent_containers/condiment/olive_oil{ - pixel_x = 3; - pixel_y = -2 - }, -/obj/item/food/fishmeat/moonfish{ - pixel_y = -11 - }, -/obj/item/food/fishmeat/moonfish{ - pixel_y = -8 - }, -/obj/item/food/fishmeat/moonfish{ - pixel_y = -5 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"ix" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/trimline/purple/filled/line, -/obj/machinery/light/cold/directional/south, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/item/storage/box/stockparts/basic{ - pixel_y = 6 - }, -/obj/item/storage/box/stockparts/basic{ - pixel_x = 8 - }, -/obj/item/storage/box/beakers{ - pixel_x = -4; - pixel_y = -2 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"iy" = ( -/obj/effect/turf_decal/trimline/dark_blue/corner{ - dir = 8 - }, -/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/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"iz" = ( -/obj/effect/turf_decal/stripes/red/corner{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"iB" = ( -/obj/machinery/light/cold/directional/west, -/obj/machinery/atmospherics/miner/oxygen, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"iE" = ( -/obj/structure/lattice, -/obj/structure/transit_tube{ - dir = 8 - }, -/turf/template_noop, -/area/template_noop) -"iF" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"iK" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/grunge{ - id_tag = "TESArena"; - name = "Dormitory" - }, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"iM" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"iO" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"iP" = ( -/obj/structure/table, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"iR" = ( -/obj/structure/dresser, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"iS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/green/hidden{ - dir = 8 - }, -/obj/machinery/meter, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"iV" = ( -/obj/item/chair{ - dir = 8; - pixel_x = 5; - pixel_y = -3 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"iX" = ( -/obj/structure/chair/office/light{ - dir = 8 - }, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem) -"iY" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 8 - }, -/obj/structure/chair{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"iZ" = ( -/obj/machinery/light/warm/directional/south, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"jb" = ( -/obj/machinery/iv_drip, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"jc" = ( -/obj/effect/turf_decal/trimline/dark_blue/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"jd" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/item/bodybag/environmental/prisoner/syndicate{ - pixel_x = -7; - pixel_y = 15 - }, -/obj/item/bodybag/environmental/prisoner/syndicate{ - pixel_x = 7; - pixel_y = 15 - }, -/obj/item/bodybag/environmental/prisoner/syndicate{ - pixel_y = 8 - }, -/obj/structure/table/reinforced, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/structure/cable, -/obj/machinery/camera/xray/directional/west{ - c_tag = "DS-2 Brig Storage"; - network = list("ds2") - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"jf" = ( -/obj/structure/closet/emcloset, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/structure/window/reinforced/survival_pod{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"jj" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"jl" = ( -/obj/effect/turf_decal/trimline/purple/filled/end{ - dir = 1 - }, -/obj/structure/table, -/obj/machinery/coffeemaker, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"jm" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"jp" = ( -/obj/machinery/light/warm/directional/north, -/obj/machinery/computer{ - desc = "A console meant to allow modifications to IDs. There's a chameleon ID stuck inside and no one has been able to pull it out..."; - icon_keyboard = "syndie_key"; - icon_screen = "explosive"; - name = "syndicate access change console" - }, -/obj/item/paper{ - default_raw_text = "

DS2 Corporate Report

The Deep Space 2 Forward Operating Base has successfully relocated itself near active Nanotrasen installations. Reboot of shuttle engines in progress...

The Sothran Syndicate welcomes you onboard, Corporate Liaison. It is deeply suggested you help our crew via informing them of their corporate investors' goal and to help maintain cohesion. Don't hurt yourself now, and stay winning.

"; - name = "paper- 'DS2 Corporate Report'" - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"jr" = ( -/obj/item/sign/flag/syndicate{ - pixel_x = 3; - pixel_y = 6 - }, -/obj/item/flashlight/lamp/green{ - pixel_x = -6; - pixel_y = 4 - }, -/obj/structure/table/wood/fancy/black, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/carpet/red, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral) -"jt" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/hedge, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/machinery/light/warm/directional/south, -/turf/open/floor/wood/parquet, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"jw" = ( -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"jB" = ( -/obj/structure/chair/comfy/brown{ - color = "#596479" - }, -/obj/machinery/button/door{ - desc = "Keep out the paperwork."; - id = "ds2admiral"; - name = "Shutters control"; - pixel_x = 32; - pixel_y = 24; - req_access = list("syndicate_leader") - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral) -"jC" = ( -/obj/effect/turf_decal/skyrat_decals/syndicate/middle/right, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/skyrat_decals/ds2/right, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"jD" = ( -/obj/item/storage/secure/briefcase/white{ - pixel_y = 13 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"jE" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/effect/turf_decal/siding/white{ - dir = 9 - }, -/obj/item/toy/figure/syndie{ - pixel_x = 10; - pixel_y = 20 - }, -/turf/open/floor/plating/elevatorshaft, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"jJ" = ( -/obj/structure/frame/machine{ - anchored = 1; - icon_state = "box_1"; - state = 2 - }, -/obj/item/circuitboard/machine/mechfab, -/obj/effect/turf_decal/trimline/dark_red/filled/line, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"jN" = ( -/obj/effect/turf_decal/siding/wideplating_new/dark, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"jO" = ( -/obj/effect/turf_decal/delivery/red, -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/red/line, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"jP" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/window/reinforced/survival_pod{ - dir = 5 - }, -/obj/structure/railing/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/catwalk_floor/iron_dark, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"jR" = ( -/obj/effect/turf_decal/box/red/corners, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"jT" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/dark{ - dir = 9 - }, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"jW" = ( -/obj/structure/closet/secure_closet/interdynefob/robotics, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"jZ" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/bot_white, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"ka" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/obj/effect/turf_decal/vg_decals/atmos/carbon_dioxide, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"kb" = ( -/obj/structure/chair, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/security/lawyer) -"kc" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/junction/yjunction{ - dir = 8 - }, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"kd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/computer/turbine_computer{ - dir = 1; - mapping_id = "syndicatelava_turbine" - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/structure/window/reinforced/survival_pod{ - dir = 10 - }, -/obj/machinery/button/door/incinerator_vent_syndicatelava_aux{ - name = "Combustion Chamber Blast Door Control"; - pixel_x = -24; - pixel_y = -6 - }, -/obj/machinery/button/door/incinerator_vent_syndicatelava_main{ - name = "Turbine Exterior Vent Control"; - pixel_x = -24; - pixel_y = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/button/ignition/incinerator/syndicatelava{ - pixel_x = -36 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"ke" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"kf" = ( -/obj/effect/turf_decal/stripes/red/line, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"kg" = ( -/obj/structure/transit_tube/crossing/horizontal, -/obj/structure/lattice, -/turf/template_noop, -/area/template_noop) -"km" = ( -/obj/machinery/button/door{ - id = "TESBattlespire"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_x = -24; - pixel_y = 24; - specialfunctions = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"kt" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, -/obj/structure/disposaloutlet, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"kx" = ( -/obj/structure/lattice, -/turf/template_noop, -/area/template_noop) -"kB" = ( -/obj/machinery/light/cold/directional/east, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/corner, -/mob/living/basic/lizard/tegu{ - name = "Entertains-The-Hostages" - }, -/obj/structure/bed/dogbed, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"kD" = ( -/obj/machinery/smartfridge/food, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"kF" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"kG" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 6; - pixel_y = 4 - }, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_y = 2 - }, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"kH" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 - }, -/obj/machinery/vending/medical/syndicate_access/cybersun{ - desc = "An advanced vendor that dispenses medical drugs, both recreational and medicinal. It's said to have been salvaged from an old decomissioned Cybersun Cruiser."; - name = "\improper SyndiMed ++" - }, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"kI" = ( -/obj/machinery/hydroponics/constructable, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"kM" = ( -/obj/effect/turf_decal/siding/dark/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"kN" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window/survival_pod{ - dir = 4; - req_access = list("syndicate_leader") - }, -/obj/machinery/door/window/survival_pod{ - dir = 8; - heat_proof = 1 - }, -/obj/machinery/door/poddoor/shutters{ - dir = 8; - id = "ds2corpliaison"; - name = "Corporate Liaison Shutters" - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"kQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"kT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/light/warm/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/catwalk_floor/iron_dark, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"kZ" = ( -/obj/effect/turf_decal/trimline/brown/warning{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"la" = ( -/obj/structure/weightmachine, -/obj/effect/turf_decal/box/white, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"lb" = ( -/obj/structure/table, -/obj/machinery/microwave{ - pixel_y = 8 - }, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"ld" = ( -/obj/effect/turf_decal/bot, -/obj/effect/spawner/random/maintenance/two, -/obj/structure/closet/crate, -/obj/effect/spawner/random/engineering/tool, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"lg" = ( -/obj/structure/closet/secure_closet/interdynefob/cl_locker, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"li" = ( -/obj/structure/table/glass, -/obj/item/storage/pill_bottle/mannitol{ - pixel_x = -8; - pixel_y = 6 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 - }, -/obj/machinery/duct, -/obj/item/stack/medical/gauze{ - pixel_x = 1; - pixel_y = 4 - }, -/obj/item/stack/medical/mesh{ - pixel_x = 4 - }, -/obj/item/stack/medical/suture, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"lo" = ( -/obj/machinery/button/door{ - id = "syndie_ds2_vault"; - name = "Vault Bolt Control"; - normaldoorcontrol = 1; - pixel_x = -24; - pixel_y = 24; - req_access = list("syndicate"); - specialfunctions = 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/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"lp" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 6 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"lt" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/item/wirecutters, -/obj/machinery/syndicatebomb/training, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"lu" = ( -/obj/machinery/light/cold/directional/north, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"lD" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/effect/turf_decal/trimline/dark_red/line, -/obj/effect/turf_decal/trimline/dark_red/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ - dir = 1 - }, -/obj/structure/chair/office{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark/textured_half, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"lE" = ( -/obj/effect/turf_decal/bot_blue, -/obj/machinery/light/cold/directional/south, -/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/service{ - dir = 1 - }, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"lF" = ( -/obj/effect/turf_decal/tile/dark_red/fourcorners, -/obj/structure/table, -/obj/item/mmi/posibrain{ - pixel_x = 2; - pixel_y = 6 - }, -/obj/item/mmi/posibrain{ - pixel_x = -4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"lI" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/light/red/directional/south, -/obj/effect/turf_decal/siding/white{ - dir = 10 - }, -/turf/open/floor/plating/elevatorshaft, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"lJ" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/machinery/light/cold/directional/west, -/obj/item/clothing/shoes/sneakers/crimson{ - pixel_x = -4 - }, -/obj/item/clothing/shoes/sneakers/crimson{ - pixel_x = 4 - }, -/obj/machinery/firealarm/directional/west, -/obj/item/clothing/under/rank/prisoner/syndicate, -/obj/item/clothing/under/rank/prisoner/syndicate{ - pixel_y = 4 - }, -/obj/item/clothing/under/rank/prisoner/syndicate{ - pixel_y = 8 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"lO" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"lU" = ( -/obj/effect/turf_decal/trimline/dark_blue/corner{ - 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/ruin/space/has_grav/skyrat/interdynefob/halls) -"lW" = ( -/obj/machinery/stasis, -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 5 - }, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"lY" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"lZ" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 9 - }, -/obj/structure/frame/machine{ - anchored = 1; - icon_state = "box_1"; - state = 2 - }, -/obj/item/circuitboard/machine/smes, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"md" = ( -/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/airlock/cmo/glass{ - name = "Medical Bay" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"me" = ( -/obj/machinery/button/door{ - id = "TESSkyrim"; - name = "Restroom Bolt Control"; - normaldoorcontrol = 1; - pixel_x = -24; - pixel_y = -24; - specialfunctions = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"mg" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/siding/dark, -/obj/structure/extinguisher_cabinet/directional/south, -/obj/machinery/atmospherics/components/trinary/mixer/flipped{ - dir = 8; - name = "plasma mixer"; - target_pressure = 2000 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"mi" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/machinery/vending/hydroseeds, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"mj" = ( -/obj/machinery/photocopier, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/security/lawyer) -"ml" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/structure/fans/tiny, -/obj/structure/cable, -/obj/machinery/door/airlock/external/glass{ - name = "External Access" - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"mr" = ( -/obj/effect/turf_decal/siding/dark/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"ms" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"mx" = ( -/obj/effect/turf_decal/trimline/dark_blue/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/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"my" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"mA" = ( -/obj/effect/turf_decal/stripes/red/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/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"mC" = ( -/obj/structure/cable, -/obj/machinery/power/smes/engineering{ - charge = 4.5e+006; - input_level = 150000 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ - pixel_x = 4 - }, -/obj/item/aicard/aitater{ - pixel_x = 3; - pixel_y = 11 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 5 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"mD" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/dark/textured_edge{ - dir = 8 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"mH" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/machinery/door/window/survival_pod{ - dir = 4; - req_access = list("syndicate_leader") - }, -/obj/effect/turf_decal/delivery/red, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/item/folder/red, -/obj/item/paper{ - pixel_x = -3; - pixel_y = -4 - }, -/obj/item/paper{ - pixel_x = 4; - pixel_y = -6 - }, -/obj/item/pen{ - pixel_y = -4 - }, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"mJ" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/siding/dark, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"mK" = ( -/obj/structure/table/wood, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/item/storage/bag/books, -/obj/item/book/bible/syndicate{ - pixel_x = -13 - }, -/obj/item/storage/fancy/candle_box{ - pixel_x = 4 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"mL" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/structure/window/reinforced/tinted/spawner/directional/west, -/obj/machinery/power/shuttle_engine/heater, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/skyrat/interdynefob) -"mO" = ( -/obj/effect/turf_decal/trimline/blue/corner{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/structure/window/reinforced/survival_pod{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"mP" = ( -/obj/machinery/biogenerator, -/obj/item/reagent_containers/cup/beaker/large, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"mQ" = ( -/obj/effect/turf_decal/box/red/corners{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"mT" = ( -/obj/structure/table/glass, -/obj/item/gun/energy/floragun{ - pixel_y = 7 - }, -/obj/item/geneshears, -/obj/item/plant_analyzer{ - pixel_x = -7 - }, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"mX" = ( -/turf/closed/wall/r_wall/syndicate, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"mY" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/machinery/computer/station_alert{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_red/line, -/obj/effect/turf_decal/trimline/dark_red/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/dark/textured_half, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"nd" = ( -/obj/effect/turf_decal/trimline/blue/line{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_edge{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"ni" = ( -/obj/effect/turf_decal/stripes/red/line, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 1 - }, -/obj/machinery/light/cold/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"nm" = ( -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"nn" = ( -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/chair/comfy/brown{ - color = "#596479"; - dir = 1 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"ny" = ( -/obj/machinery/light/warm/directional/south, -/turf/open/floor/carpet/blue, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness) -"nz" = ( -/obj/structure/closet/crate/freezer/blood, -/obj/machinery/duct, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"nA" = ( -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/table, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ - pixel_x = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 6 - }, -/obj/item/storage/box/stockparts/basic{ - pixel_x = -3; - pixel_y = 11 - }, -/obj/item/storage/box/stockparts/basic{ - pixel_x = 5; - pixel_y = 8 - }, -/obj/item/storage/box/stockparts/basic, -/obj/item/storage/part_replacer{ - pixel_x = -2; - pixel_y = -12 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"nG" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 6 - }, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark, -/obj/structure/rack/shelf, -/obj/item/circuitboard/machine/xenoarch_machine/xenoarch_researcher{ - pixel_y = -6 - }, -/obj/item/circuitboard/machine/xenoarch_machine/xenoarch_digger{ - pixel_y = -3 - }, -/obj/item/circuitboard/machine/xenoarch_machine/xenoarch_recoverer, -/obj/item/circuitboard/machine/xenoarch_machine/xenoarch_scanner{ - pixel_y = 3 - }, -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"nH" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/wood/parquet, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"nI" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"nK" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/computer/monitor{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"nL" = ( -/obj/machinery/light/warm/directional/west, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/violet/hidden, -/obj/machinery/meter, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"nN" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ - dir = 4 - }, -/obj/machinery/meter, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/machinery/space_heater, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"nO" = ( -/obj/machinery/porta_turret/syndicate/energy{ - dir = 9 - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/vault) -"nR" = ( -/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/stationmed{ - dir = 8 - }, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"nS" = ( -/obj/effect/turf_decal/bot_white, -/obj/structure/easel, -/obj/item/canvas/twentythree_nineteen, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"nT" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"ob" = ( -/obj/effect/turf_decal/siding/dark/corner{ - dir = 8 - }, -/obj/structure/table, -/obj/item/knife{ - pixel_x = -9; - pixel_y = 3 - }, -/obj/item/kitchen/rollingpin, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_y = -4 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 6 - }, -/obj/structure/cable, -/obj/structure/window/reinforced/survival_pod{ - dir = 6 - }, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"oc" = ( -/obj/machinery/chem_master, -/obj/machinery/light/cold/directional/south, -/obj/effect/turf_decal/tile/dark_blue/full, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem) -"od" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"of" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_red/line, -/obj/effect/turf_decal/trimline/dark_red/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/dark/textured_half, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"og" = ( -/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/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"oi" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/machinery/atmospherics/pipe/smart/manifold/cyan/hidden{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"ok" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Dormitories" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/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/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"on" = ( -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"oq" = ( -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/turf_decal/trimline/blue/corner{ - dir = 1 - }, -/obj/structure/tank_dispenser/oxygen, -/turf/open/floor/iron/dark/textured_half, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"or" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/item/sign/flag/syndicate{ - pixel_x = -3; - pixel_y = 6 - }, -/obj/structure/table/glass, -/obj/item/reagent_containers/cup/glass/waterbottle{ - pixel_x = 8; - pixel_y = 4 - }, -/obj/structure/cable, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"ot" = ( -/obj/machinery/light/cold/directional/east, -/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/stationmed{ - dir = 8 - }, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"ou" = ( -/obj/effect/turf_decal/trimline/dark_red/corner, -/obj/effect/turf_decal/trimline/dark_red/corner{ - dir = 8 - }, -/obj/machinery/computer{ - desc = "A console meant to communicate with Syndicate upper command. This one seems to be busy processing flight calculations since you last saw it..."; - icon_keyboard = "tech_key"; - icon_screen = "comm"; - name = "syndicate communications console" - }, -/obj/item/paper{ - default_raw_text = "

DS2 Transfer Report

The Deep Space 2 Forward Operating Base has successfully relocated itself near active Nanotrasen installations. Reboot of shuttle engines in progress...

Active syndicate operatives have been transferred over to the target NT workplace and are NOT to be interacted with under any circumstances, unless Syndicate Command allows it. Permission to monitor their activities is granted and heavily suggested.

Stay winning.

"; - name = "paper- 'DS2 Transfer Report'" - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"ov" = ( -/obj/structure/disposalpipe/segment{ - dir = 1 - }, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"ow" = ( -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/obj/structure/closet/secure_closet/medical1{ - req_access = list("syndicate") - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem) -"oz" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"oC" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"oE" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/dark, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/eva) -"oG" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 5; - faction = list("Syndicate","neutral") - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"oK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"oO" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"oR" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/machinery/light/cold/directional/east, -/obj/structure/rack/shelf, -/obj/item/crowbar/power/syndicate{ - pixel_y = 8 - }, -/obj/item/crowbar/power/syndicate{ - pixel_y = 2 - }, -/obj/item/crowbar/power/syndicate{ - pixel_y = -4 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"oS" = ( -/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/brigoff{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"oT" = ( -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"oV" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/bathroom{ - id_tag = "TESSkyrim"; - name = "Restroom" - }, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"oZ" = ( -/obj/machinery/vending/games, -/obj/machinery/camera/xray/directional/west{ - c_tag = "DS-2 Lounge"; - network = list("ds2") - }, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"pa" = ( -/obj/effect/turf_decal/stripes/red/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/corner, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"pb" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/conveyor{ - id = "ds2disposals" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/spawner/random/trash/garbage{ - pixel_y = -10 - }, -/turf/open/floor/iron/pool, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"pe" = ( -/obj/machinery/light/cold/directional/north, -/obj/effect/turf_decal/trimline/dark_red/filled, -/obj/effect/turf_decal/siding/white/corner, -/obj/effect/turf_decal/siding/white/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/white/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white/corner{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"pf" = ( -/obj/structure/sign/poster/contraband/icebox_moment/directional/south, -/obj/effect/turf_decal/stripes/red/corner, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"pi" = ( -/obj/machinery/computer/crew/syndie{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"pk" = ( -/obj/structure/frame/machine{ - anchored = 1; - icon_state = "box_1"; - state = 2 - }, -/obj/item/circuitboard/machine/module_duplicator, -/obj/effect/turf_decal/trimline/dark_red/filled/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"pl" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 4 - }, -/obj/item/circuitboard/computer/rdconsole, -/obj/structure/frame/computer{ - dir = 8 - }, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"pn" = ( -/obj/effect/turf_decal/skyrat_decals/departments/bridge{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_edge{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"pr" = ( -/obj/machinery/door/poddoor/incinerator_syndicatelava_main{ - name = "Turbine Exterior Vent" - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/engine, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"ps" = ( -/obj/machinery/computer/cryopod/interdyne/directional/west, -/obj/structure/table, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/turf/open/floor/iron/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"pt" = ( -/obj/machinery/light/warm/directional/north, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"pu" = ( -/obj/effect/turf_decal/siding/dark/corner, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"py" = ( -/obj/structure/marker_beacon/burgundy, -/obj/effect/turf_decal/tile/dark_red/half, -/obj/effect/turf_decal/siding/wideplating_new/dark, -/obj/machinery/camera/xray/directional/north{ - c_tag = "DS-2 Hangar North"; - network = list("ds2") - }, -/turf/open/floor/iron/dark/textured_half{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"pz" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 8 - }, -/obj/structure/chair/stool/bar{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"pB" = ( -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, -/obj/effect/turf_decal/delivery/red, -/obj/machinery/door/airlock/security/old/glass{ - name = "Long-Term Brig" - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "DS2permabrig" - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"pI" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/siding/thinplating/end{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/window/reinforced/survival_pod{ - dir = 6 - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/open/floor/iron/small, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"pL" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/item/storage/box/firingpins/syndicate{ - pixel_x = -2; - pixel_y = 6 - }, -/obj/item/storage/box/firingpins/syndicate{ - pixel_x = 2 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"pO" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"pP" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/item/paper_bin{ - pixel_y = 4 - }, -/obj/effect/turf_decal/delivery/red, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"pW" = ( -/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/brigoff{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"pX" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/structure/curtain/cloth/fancy/mechanical{ - color = "#555555"; - icon_state = "bathroom-open"; - icon_type = "bathroom"; - id = "DS2cell1" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"qc" = ( -/obj/structure/bed/double{ - dir = 1 - }, -/obj/item/bedsheet/brown/double{ - dir = 1 - }, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"qj" = ( -/obj/structure/dresser, -/obj/item/flashlight/lamp/green{ - pixel_x = 5; - pixel_y = 15 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"qn" = ( -/obj/machinery/light/no_nightlight/directional/east, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"qo" = ( -/obj/structure/rack/shelf, -/obj/item/mod/module/chameleon{ - pixel_x = 6 - }, -/obj/item/mod/module/chameleon{ - pixel_x = -2; - pixel_y = -6 - }, -/obj/effect/turf_decal/trimline/dark_red/filled/line{ - dir = 9 - }, -/obj/effect/spawner/random/mod{ - pixel_x = 6; - pixel_y = -8 - }, -/obj/effect/spawner/random/mod, -/obj/item/mod/construction/broken_core{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/mod/core/standard, -/obj/item/mod/construction/broken_core{ - pixel_x = -2; - pixel_y = -6 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"qs" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/item/storage/wallet/random, -/obj/item/clothing/under/costume/jabroni{ - has_sensor = 0; - random_sensor = 0 - }, -/obj/structure/closet/secure_closet/personal, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"qt" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/brown/warning, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"qu" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/railing/corner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/window/reinforced/survival_pod{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/catwalk_floor/iron_dark, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"qv" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/dark_green/line{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"qw" = ( -/obj/machinery/suit_storage_unit/syndicate/chameleon{ - name = "suit storage unit"; - req_access = list("syndicate_leader") - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"qz" = ( -/obj/machinery/power/shuttle_engine/propulsion/left{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/skyrat/interdynefob) -"qC" = ( -/obj/machinery/door/airlock/service/glass{ - name = "Hydroponics" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/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/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"qE" = ( -/obj/structure/rack, -/obj/item/clothing/shoes/magboots/syndie{ - pixel_y = 8 - }, -/obj/item/clothing/shoes/magboots/syndie, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/eva) -"qH" = ( -/obj/structure/railing, -/obj/effect/turf_decal/siding/dark, -/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/north, -/obj/effect/mapping_helpers/apc/syndicate_access, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem) -"qI" = ( -/obj/effect/turf_decal/trimline/dark_red/line, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner, -/obj/machinery/computer/crew/syndie, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"qK" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"qN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"qO" = ( -/obj/machinery/conveyor_switch/oneway{ - id = "ds2conveyor" - }, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"qR" = ( -/obj/machinery/vending/imported/mothic, -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 8 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"qS" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 1 - }, -/turf/open/floor/wood/parquet, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"qW" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 4 - }, -/obj/structure/chair/office/light{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"qY" = ( -/obj/structure/table, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; - pixel_y = 5 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness) -"ra" = ( -/obj/effect/turf_decal/delivery/white, -/obj/machinery/door/airlock/bathroom{ - name = "Brig Restroom" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"rb" = ( -/obj/machinery/atmospherics/components/binary/pump/off/scrubbers/visible/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_red/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_red/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_red/filled/mid_joiner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_red/filled/mid_joiner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"rc" = ( -/obj/effect/turf_decal/delivery/red, -/obj/effect/mob_spawn/ghost_role/human/ds2/prisoner{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"rd" = ( -/obj/effect/turf_decal/arrows{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"rg" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/eva) -"ri" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/parquet, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"rj" = ( -/obj/item/kirbyplants/organic/plant22, -/obj/effect/turf_decal/siding/wood{ - dir = 5 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"rk" = ( -/obj/effect/turf_decal/trimline/purple/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/warning, -/obj/structure/disposalpipe/junction/yjunction{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"rl" = ( -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"ro" = ( -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 1 - }, -/obj/machinery/door/airlock/silver/glass{ - name = "Kitchen" - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"rr" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"rs" = ( -/obj/machinery/shower/directional/north, -/obj/effect/turf_decal/siding/dark{ - dir = 10 - }, -/obj/structure/drain, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness) -"rx" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"rz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/red/line, -/obj/structure/cable, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"rB" = ( -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"rD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"rG" = ( -/obj/machinery/door/airlock/engineering{ - name = "Ship Atmospherics" - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"rH" = ( -/obj/machinery/light/cold/directional/west, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/bookcase/random{ - books_to_load = 10 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"rI" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark/corner{ - dir = 1 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness) -"rM" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 8 - }, -/obj/effect/spawner/random/food_or_drink/condiment{ - pixel_x = 8; - pixel_y = 6 - }, -/obj/structure/cable, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"rN" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/structure/fans/tiny, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/door/airlock/external/glass{ - name = "External Access" - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"rU" = ( -/obj/machinery/dryer{ - pixel_x = 8; - pixel_y = 20 - }, -/obj/structure/sink/directional/east{ - pixel_y = -6 - }, -/obj/structure/mirror/directional/west, -/obj/effect/turf_decal/siding/dark{ - dir = 9 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"rY" = ( -/obj/structure/rack, -/obj/item/restraints/handcuffs, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"rZ" = ( -/obj/effect/turf_decal/siding/dark/corner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"sa" = ( -/obj/effect/turf_decal/skyrat_decals/syndicate/bottom/left, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"sc" = ( -/obj/structure/table/wood, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"sh" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/line{ - dir = 10 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 10 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"sj" = ( -/obj/effect/turf_decal/siding/dark, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"sl" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/machinery/camera/xray/directional/south{ - c_tag = "DS-2 Long-Term Brig Access"; - network = list("ds2") - }, -/obj/item/card/id/advanced/prisoner/ds2, -/obj/item/card/id/advanced/prisoner/ds2{ - pixel_y = 4; - trim = /datum/id_trim/syndicom/skyrat/ds2/prisoner - }, -/obj/item/card/id/advanced/prisoner/ds2{ - pixel_y = 8; - trim = /datum/id_trim/syndicom/skyrat/ds2/prisoner - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"sr" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"ss" = ( -/obj/effect/turf_decal/vg_decals/numbers/four{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine/hull, -/area/template_noop) -"st" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"sy" = ( -/obj/effect/turf_decal/skyrat_decals/syndicate/middle/left, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/skyrat_decals/ds2/left, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"sB" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/parquet, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"sD" = ( -/obj/machinery/vending/sustenance, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"sH" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/wood/parquet, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"sK" = ( -/obj/effect/turf_decal/tile/dark_blue/fourcorners, -/turf/open/floor/circuit/off, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/vault) -"sL" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/security/lawyer) -"sM" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_red/line{ - dir = 10 - }, -/obj/effect/turf_decal/trimline/dark_red/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ - dir = 8 - }, -/obj/structure/showcase/cyborg{ - desc = "A stand with the empty body of a Cybersun cyborg bolted to it."; - dir = 4; - icon = 'icons/mob/silicon/robots.dmi'; - icon_state = "synd_sec"; - name = "syndicate cyborg showcase"; - pixel_x = -6 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/dark/smooth_corner{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"sO" = ( -/obj/structure/table, -/obj/effect/spawner/random/food_or_drink/refreshing_beverage{ - pixel_x = -7; - pixel_y = 8 - }, -/obj/effect/spawner/random/food_or_drink/donkpockets_single{ - pixel_x = -4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"sP" = ( -/obj/effect/turf_decal/trimline/purple/filled/end, -/obj/structure/table, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"sV" = ( -/obj/item/storage/box/beakers/bluespace{ - pixel_x = -2; - pixel_y = 8 - }, -/obj/item/storage/box/beakers/bluespace{ - pixel_x = 2 - }, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/item/storage/bag/chemistry{ - pixel_x = -16 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem) -"sW" = ( -/obj/effect/turf_decal/trimline/blue/warning{ - dir = 8 - }, -/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/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"sZ" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/machinery/oven/range, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"tf" = ( -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"tg" = ( -/obj/machinery/shower/directional/south, -/obj/item/soap/syndie, -/obj/effect/turf_decal/siding/dark{ - dir = 9 - }, -/obj/structure/drain, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness) -"tk" = ( -/obj/effect/turf_decal/trimline/yellow/line, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/junction{ - dir = 8 - }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"tl" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/plasticflaps, -/obj/machinery/conveyor{ - id = "ds2disposals" - }, -/turf/open/floor/iron/pool, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"tm" = ( -/obj/machinery/vending/assist, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"tn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"tq" = ( -/obj/effect/turf_decal/trimline/yellow/line, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"tt" = ( -/obj/structure/bed/double, -/obj/item/bedsheet/brown/double, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"tA" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ - dir = 1 - }, -/obj/item/paper{ - default_raw_text = "

Gorlex Engineering

New to setting up a turbine, operative? This neat little guide and set-up should teach you how, step by step.

The first step is setting up the burn chamber. The Air alarm is unlocked for syndicate access, and a single scrubber in the area is inactive. That is our burn chamber's scrubber. Set it to scoop up any gas you don't want in it - anything but plasma and oxygen - and set it on expanded reach.

Next is setting up the Plasma Mixer. A good ratio is somewhere between 30-70 and 40-60 Plasma and Oxygen, respectively. Don't forget to max out the mixer's pressure, else it'll only dribble in the gas!

Once that is done, make sure to activate the two digital valves on the floor. One will allow O2 to be brought to the mixer, and the other one will lead the gas mix directly into the chamber.

With the burn being ready, two last things are needed. First, you'll need to set up the ship's scrubbers system to actively pump into space the excess gasses (Water vapour, Co2) the burn will produce. If you want, you can select a gas to filter out, but that isn't necessary. Once everything is set up, flick the igniter switch on, turn on the turbine at the terminal, and watch that fire shine bright!

"; - name = "paper- 'Gorlex Engineering Division - Turbine Easy-Set Guide'" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"tC" = ( -/obj/machinery/door/airlock/research{ - name = "Robotics" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"tD" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/camera/xray/directional/west{ - c_tag = "DS-2 Security Checkpoint"; - network = list("ds2") - }, -/obj/machinery/computer/crew/syndie{ - dir = 1 - }, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"tE" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/effect/turf_decal/siding/white{ - dir = 5 - }, -/turf/open/floor/plating/elevatorshaft, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"tG" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"tL" = ( -/obj/structure/table/reinforced, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ - pixel_x = 4 - }, -/obj/item/storage/medkit/advanced{ - pixel_x = -2; - pixel_y = 8 - }, -/obj/item/storage/medkit/regular{ - pixel_x = 3; - pixel_y = 1 - }, -/obj/effect/turf_decal/tile/dark_blue/full, -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"tN" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/violet/hidden, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"tP" = ( -/obj/machinery/door/airlock/security/old{ - hackProof = 1; - name = "Armory" - }, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, -/obj/effect/turf_decal/delivery/red, -/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/mapping_helpers/airlock/unres, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"tQ" = ( -/obj/effect/turf_decal/stripes/red/line, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"tR" = ( -/obj/effect/turf_decal/stripes/red/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"tS" = ( -/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/item/seeds/tower, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/effect/turf_decal/siding/dark, -/obj/machinery/light/cold/directional/west, -/obj/item/seeds/tobacco, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 1 - }, -/obj/item/seeds/korta_nut, -/obj/item/reagent_containers/cup/watering_can, -/obj/item/cultivator, -/obj/item/plant_analyzer, -/obj/item/secateurs, -/obj/item/shovel/spade, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"tT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/cable, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"tU" = ( -/obj/machinery/door/airlock/medical{ - name = "Chemistry" - }, -/obj/effect/turf_decal/stripes/blue/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/blue/line{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/structure/cable, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem) -"tY" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - id = "ds2detective"; - name = "Interrogation Room Shutters" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/security/lawyer) -"tZ" = ( -/obj/machinery/smartfridge/food, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"ub" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"uc" = ( -/obj/structure/chair/stool/directional/east, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"ue" = ( -/obj/effect/turf_decal/tile/dark_blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/dark_blue, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/structure/closet/crate/goldcrate, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/vault) -"uf" = ( -/obj/effect/turf_decal/siding/dark{ - 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/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"uh" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/item/reagent_containers/cup/bucket, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"ui" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/grunge{ - id_tag = "TESBattlespire"; - name = "Dormitory" - }, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"um" = ( -/obj/structure/reagent_dispensers/plumbed, -/obj/effect/turf_decal/siding/thinplating{ - dir = 10 - }, -/turf/open/floor/iron/small, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"uo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"uq" = ( -/obj/machinery/power/shuttle_engine/large, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/skyrat/interdynefob) -"uu" = ( -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"uA" = ( -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"uB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/carpet/donk, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"uD" = ( -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"uE" = ( -/obj/effect/turf_decal/tile/dark_blue, -/obj/effect/turf_decal/tile/dark_blue{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark/corner, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/safe, -/obj/item/storage/box/syndie_kit/chameleon/ghostcafe{ - desc = "A sleek, sturdy box."; - name = "Chameleon Kit" - }, -/obj/item/reagent_containers/heroinbrick{ - desc = "A brick of stimulants meant for use by Tiger Cooperative agents. It seems this one's just a brittle block of heroin."; - name = "Tiger Coop stimulant brick" - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/vault) -"uL" = ( -/obj/effect/turf_decal/stripes/red/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"uN" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"uS" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/effect/turf_decal/delivery/red, -/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{ - name = "Cell 1" - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"uV" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/security/lawyer) -"uW" = ( -/obj/structure/tank_holder/anesthetic, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"va" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "ds2bridge" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"vc" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"vd" = ( -/obj/structure/frame/machine{ - anchored = 1; - icon_state = "box_1"; - state = 2 - }, -/obj/item/circuitboard/machine/cyborgrecharger, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_red/filled/line, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"ve" = ( -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"vg" = ( -/obj/structure/table/optable, -/obj/machinery/defibrillator_mount/loaded{ - pixel_y = 28 - }, -/obj/effect/turf_decal/tile/dark_blue/full, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"vl" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/vault) -"vo" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 4 - }, -/obj/structure/rack/shelf, -/obj/item/stock_parts/cell/lead{ - pixel_x = 4; - pixel_y = -6 - }, -/obj/item/stock_parts/cell/lead, -/obj/item/stock_parts/cell/lead{ - pixel_x = -4; - pixel_y = -8 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"vp" = ( -/obj/effect/turf_decal/stripes/red/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/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"vq" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark/corner, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/eva) -"vr" = ( -/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate_command/masteratarms, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"vv" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"vx" = ( -/obj/structure/closet/secure_closet/interdynefob/sa_locker, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral) -"vA" = ( -/obj/machinery/quantumpad{ - map_pad_id = "ds2"; - map_pad_link_id = "interdyne"; - name = "quantum pad to Interdyne" - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"vB" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"vD" = ( -/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/dark/side{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness) -"vE" = ( -/obj/effect/turf_decal/trimline/yellow/line, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"vF" = ( -/obj/structure/curtain, -/obj/structure/drain, -/obj/machinery/shower/directional/north, -/obj/effect/turf_decal/siding/dark{ - dir = 6 - }, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"vK" = ( -/obj/structure/table/reinforced, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/item/paper{ - default_raw_text = "

DS2 Long-Term Brig Report

The Deep Space 2 Forward Operating Base has successfully relocated itself near active Nanotrasen installations. Reboot of shuttle engines in progress...

The Sothran Syndicate has been capable of kidnapping a few key NT workers of various hierarchy levels. It is your task to interrogate, question and break their wills in order to find more intel on our enemy, Nanotrasen.

Stay winning."; - name = "paper- 'DS2 Long-Term Brig Report'" - }, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"vM" = ( -/obj/effect/turf_decal/trimline/yellow/corner, -/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/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"vO" = ( -/obj/machinery/hydroponics/constructable, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"vQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/west, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"vR" = ( -/obj/machinery/disposal/delivery_chute{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/full, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/machinery/conveyor{ - id = "ds2disposals" - }, -/turf/open/floor/iron/pool, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"vS" = ( -/obj/machinery/porta_turret/syndicate/energy, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/vault) -"vT" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/vending/toyliberationstation, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"vU" = ( -/turf/open/floor/engine/plasma, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"wc" = ( -/obj/structure/bed/maint, -/obj/effect/turf_decal/trimline/dark_red/filled/line{ - dir = 6 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"we" = ( -/obj/effect/turf_decal/siding/dark, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"wg" = ( -/turf/template_noop, -/area/template_noop) -"wh" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/hedge, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/structure/window/reinforced/survival_pod{ - dir = 10 - }, -/turf/open/floor/wood/parquet, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"wj" = ( -/obj/machinery/vending/wardrobe/sec_wardrobe/red, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"wk" = ( -/obj/structure/table/reinforced, -/obj/item/storage/toolbox/electrical{ - pixel_y = 8 - }, -/obj/item/storage/toolbox/syndicate, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"wm" = ( -/obj/effect/turf_decal/siding/dark/corner, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"wn" = ( -/obj/effect/turf_decal/trimline/purple/filled/line, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/dark/side, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"wp" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/east, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"wt" = ( -/obj/effect/turf_decal/box/red/corners{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"wu" = ( -/obj/effect/turf_decal/skyrat_decals/syndicate/bottom/middle, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"wz" = ( -/obj/machinery/light/warm/directional/west, -/obj/machinery/computer/security{ - dir = 4; - network = list("ds2") - }, -/obj/structure/sign/flag/syndicate/directional/west, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"wE" = ( -/obj/effect/turf_decal/stripes/red/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/dark/corner, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"wH" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"wJ" = ( -/obj/effect/turf_decal/skyrat_decals/syndicate/top/middle, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"wN" = ( -/obj/structure/cable, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"wS" = ( -/obj/machinery/igniter/incinerator_syndicatelava, -/turf/open/floor/engine, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"wV" = ( -/obj/machinery/gibber, -/obj/effect/turf_decal/siding/dark{ - dir = 6 - }, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"xb" = ( -/obj/effect/turf_decal/trimline/blue/corner{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/bot, -/obj/structure/ore_box, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"xc" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"xd" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/siding/white, -/obj/item/toy/figure/syndie{ - pixel_x = 10; - pixel_y = -3 - }, -/obj/machinery/camera/xray/directional/south{ - c_tag = "DS-2 Hangar South"; - network = list("ds2") - }, -/turf/open/floor/plating/elevatorshaft, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"xk" = ( -/obj/machinery/chem_dispenser/drinks/fullupgrade{ - dir = 8 - }, -/obj/structure/table/wood, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"xp" = ( -/obj/effect/turf_decal/stripes/red/line, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"xr" = ( -/turf/closed/wall/r_wall/syndicate, -/area/ruin/space/has_grav/skyrat/interdynefob) -"xu" = ( -/obj/effect/turf_decal/stripes/red/line, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"xx" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/effect/turf_decal/stripes/red/line, -/obj/effect/turf_decal/siding/dark, -/obj/machinery/light/cold/directional/west, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 1 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"xy" = ( -/obj/machinery/light/warm/directional/north, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/security/lawyer) -"xB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 1 - }, -/obj/machinery/meter, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"xG" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/machinery/door/window/survival_pod{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"xH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/wood{ - dir = 5 - }, -/obj/structure/cable, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"xQ" = ( -/obj/effect/turf_decal/stripes/red/full, -/obj/effect/turf_decal/box/white, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"xS" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"xX" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"xZ" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/line{ - dir = 10 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 10 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"ya" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/cmo/glass{ - name = "Medical Bay" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"yb" = ( -/obj/effect/turf_decal/stripes/red/corner, -/mob/living/simple_animal/pet/cat/kitten{ - desc = "What appears to be a single-celled organism with a pronounced low-level intelligence."; - name = "Murder-Mittens" - }, -/obj/structure/cable, -/obj/structure/bed/dogbed, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"yd" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/machinery/door/poddoor/shutters{ - id = "smasteratarms"; - name = "Master At Arms Shutters" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"ye" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 - }, -/obj/machinery/vending/drugs{ - name = "\improper SyndiDrug Plus"; - onstation = 0 - }, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"yh" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/machinery/light/cold/directional/west, -/obj/structure/table, -/obj/item/coin/iron{ - pixel_x = -10 - }, -/obj/item/toy/cards/deck, -/obj/item/storage/dice{ - pixel_x = 8; - pixel_y = 3 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"yi" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/dark_blue/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"yn" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"yu" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/dark_blue/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"yv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"yy" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 8 - }, -/obj/structure/chair{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"yH" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/line{ - dir = 5 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 5 - }, -/obj/structure/bed/pod, -/obj/item/bedsheet/black, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"yI" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"yL" = ( -/obj/effect/turf_decal/siding/dark, -/obj/structure/closet/secure_closet/interdynefob/prisoner_locker, -/obj/item/restraints/handcuffs, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"yP" = ( -/obj/structure/chair, -/obj/machinery/firealarm/directional/west, -/obj/machinery/camera/directional/west{ - c_tag = "DS-2 Dormitories"; - network = list("ds2") - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"yR" = ( -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"yS" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_red/line{ - dir = 6 - }, -/obj/effect/turf_decal/trimline/dark_red/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ - dir = 4 - }, -/obj/structure/showcase/cyborg{ - desc = "A stand with the empty body of a Cybersun cyborg bolted to it."; - dir = 8; - icon = 'icons/mob/silicon/robots.dmi'; - icon_state = "synd_sec"; - name = "syndicate cyborg showcase"; - pixel_x = 6 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/dark/smooth_corner{ - dir = 1 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"yU" = ( -/obj/machinery/duct, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"yX" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"zb" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"zc" = ( -/obj/structure/marker_beacon/burgundy, -/obj/effect/turf_decal/tile/dark_red/half, -/obj/effect/turf_decal/siding/wideplating_new/dark, -/obj/machinery/light/red/directional/north, -/turf/open/floor/iron/dark/textured_half{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"zd" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 6 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"ze" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/structure/fans/tiny, -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/machinery/door/airlock/external/glass{ - name = "External Access" - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"zg" = ( -/obj/item/circuitboard/machine/protolathe/offstation, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/frame/machine{ - anchored = 1; - icon_state = "box_1"; - state = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"zh" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch{ - name = "Janitorial Supplies" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"zl" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"zn" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/light/cold/directional/west, -/obj/machinery/recharger, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"zp" = ( -/obj/effect/turf_decal/stripes/red/line, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"zq" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"zt" = ( -/obj/structure/table/glass, -/obj/item/clothing/neck/stethoscope{ - pixel_x = 12; - pixel_y = 4 - }, -/obj/effect/turf_decal/tile/dark_blue/full, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"zv" = ( -/obj/effect/turf_decal/vg_decals/numbers/zero{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/engine/hull, -/area/template_noop) -"zx" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/layer_manifold/green/visible, -/obj/machinery/meter, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"zy" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/light/warm/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 5 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"zA" = ( -/obj/effect/turf_decal/trimline/blue/line{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_edge{ - dir = 8 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"zD" = ( -/obj/structure/table/wood, -/obj/item/paper_bin/carbon{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/item/pen{ - pixel_x = -5; - pixel_y = 3 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"zH" = ( -/turf/open/floor/carpet/donk, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"zI" = ( -/obj/machinery/power/shuttle_engine/large{ - dir = 1 - }, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/skyrat/interdynefob) -"zK" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/red/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/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"zL" = ( -/obj/effect/turf_decal/bot_blue, -/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/pump, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"zM" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/effect/turf_decal/siding/yellow{ - dir = 4 - }, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"zN" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/window/reinforced/survival_pod{ - dir = 6 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"zS" = ( -/obj/effect/turf_decal/trimline/purple/line{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"zU" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 5 - }, -/obj/machinery/light/cold/directional/west, -/obj/structure/chair/office/light, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"zV" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 8 - }, -/obj/structure/chair, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Aa" = ( -/obj/effect/turf_decal/tile/dark_red/fourcorners, -/obj/structure/table, -/obj/machinery/ecto_sniffer, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"Ae" = ( -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, -/obj/effect/turf_decal/delivery/red, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/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/machinery/door/airlock/security/old{ - hackProof = 1; - name = "Long-Term Brig" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "DS2permabrig" - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Af" = ( -/obj/effect/turf_decal/trimline/blue/line{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_edge{ - dir = 8 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Al" = ( -/obj/structure/table, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"An" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/door/airlock/external/glass{ - name = "External Access" - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"Ao" = ( -/obj/structure/sink/directional/east{ - pixel_x = -11 - }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 5 - }, -/turf/open/floor/iron/small, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"Ar" = ( -/obj/machinery/smartfridge/food, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"At" = ( -/obj/structure/dresser, -/obj/item/flashlight/lamp/green{ - pixel_x = -4; - pixel_y = 15 - }, -/turf/open/floor/carpet/red, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral) -"Au" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/machinery/light/cold/directional/east, -/obj/effect/turf_decal/tile/dark_red/half{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wideplating_new/dark{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_half{ - dir = 1 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"Av" = ( -/obj/machinery/computer/atmos_alert, -/obj/effect/turf_decal/trimline/dark_red/line, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner, -/obj/structure/cable, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"Aw" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"Ax" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"Ay" = ( -/turf/closed/wall/r_wall/syndicate, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"Az" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/item/clothing/under/syndicate/skyrat/baseball, -/obj/structure/closet/secure_closet/personal, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"AC" = ( -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/siding/thinplating/end{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/open/floor/iron/small, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"AG" = ( -/obj/structure/closet/secure_closet/interdynefob/munitions_locker, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"AI" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/dark_blue/warning{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"AK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/security/lawyer) -"AR" = ( -/obj/machinery/light/red/directional/south, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/obj/structure/marker_beacon/burgundy, -/obj/effect/turf_decal/tile/dark_red/half{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wideplating_new/dark{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_half{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"AV" = ( -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"AW" = ( -/obj/machinery/light/warm/directional/south, -/obj/machinery/button/door/directional/south{ - desc = "Keep out the Truth."; - id = "ds2detective"; - name = "Interrogation Room shutters control"; - req_access = list("syndicate") - }, -/obj/item/kirbyplants/organic/plant21, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/security/lawyer) -"AX" = ( -/obj/item/reagent_containers/cup/glass/waterbottle{ - pixel_x = 11 - }, -/obj/item/reagent_containers/cup/glass/waterbottle{ - pixel_x = 7; - pixel_y = -4 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/effect/turf_decal/trimline/dark/line, -/obj/effect/turf_decal/trimline/dark/line, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness) -"AZ" = ( -/obj/machinery/vending/boozeomat/syndicate_access, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Bb" = ( -/obj/effect/turf_decal/vg_decals/atmos/oxygen{ - dir = 4 - }, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Be" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"Bi" = ( -/obj/effect/turf_decal/siding/dark, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/red/directional/north, -/obj/item/folded_navigation_gigabeacon, -/obj/structure/frame/machine{ - anchored = 1; - icon_state = "box_1"; - state = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/vault) -"Bj" = ( -/obj/structure/sink/kitchen/directional/west, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Bk" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"Bm" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/conveyor{ - id = "ds2disposals" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/end, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/spawner/random/trash/cigbutt{ - pixel_y = -10 - }, -/turf/open/floor/iron/pool, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Bs" = ( -/obj/structure/lattice, -/obj/structure/transit_tube{ - dir = 8 - }, -/obj/machinery/camera/xray/directional/north{ - c_tag = "DS-2 Transit Tube"; - network = list("ds2") - }, -/turf/template_noop, -/area/template_noop) -"Bu" = ( -/obj/machinery/suit_storage_unit/syndicate/chameleon{ - name = "suit storage unit"; - req_access = list("syndicate_leader") - }, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/structure/cable, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"Bv" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/obj/structure/rack/shelf, -/obj/item/shovel{ - pixel_y = 2 - }, -/obj/item/pickaxe{ - pixel_y = -4 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"Bw" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/conveyor_switch{ - desc = "An elevator control switch. This one seems defunct."; - id = "ds2fakelevator"; - name = "elevator control"; - pixel_y = 12 - }, -/obj/structure/railing/corner{ - pixel_y = 32 - }, -/obj/effect/turf_decal/tile/dark_red/half{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wideplating_new/dark{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_half{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"By" = ( -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/machinery/door/airlock/cmo/glass{ - name = "Medical Bay" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"BC" = ( -/obj/structure/cable, -/obj/structure/table/reinforced, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"BG" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/miner, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"BL" = ( -/obj/structure/table, -/obj/item/book/manual/chef_recipes, -/obj/item/reagent_containers/condiment/enzyme, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -8; - pixel_y = 5 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 2 - }, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"BN" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 8 - }, -/obj/structure/chair{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"BO" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"BS" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"BV" = ( -/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/ruin/space/has_grav/skyrat/interdynefob/security/lawyer) -"Cb" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 - }, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"Cd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/duct, -/obj/structure/cable, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"Ce" = ( -/obj/structure/drain, -/obj/machinery/shower/directional/east, -/obj/effect/turf_decal/siding/thinplating/end{ - dir = 4 - }, -/turf/open/floor/iron/small, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Cf" = ( -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Ch" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood, -/obj/machinery/door/window/survival_pod{ - name = "Diner"; - req_access = list("syndicate") - }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/structure/cable, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Ci" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/obj/machinery/power/shuttle_engine/heater, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/skyrat/interdynefob) -"Cj" = ( -/obj/machinery/light/cold/directional/west, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness) -"Cm" = ( -/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate_command/corporateliaison, -/turf/open/floor/carpet/donk, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"Cn" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/machinery/door/poddoor/incinerator_syndicatelava_aux{ - name = "Combustion Chamber Blast Door" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Cp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"Cq" = ( -/obj/effect/turf_decal/skyrat_decals/departments/bridge{ - dir = 8 - }, -/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/dark/textured_edge{ - dir = 8 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Ct" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"Cy" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"CC" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 8 - }, -/obj/machinery/light/cold/directional/west, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"CE" = ( -/obj/structure/railing, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"CF" = ( -/obj/effect/turf_decal/stripes/red/corner{ - dir = 4 - }, -/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/miner, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"CH" = ( -/turf/open/floor/carpet/red, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral) -"CJ" = ( -/obj/machinery/oven/range, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"CS" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/item/toy/figure/syndie{ - pixel_x = 10; - pixel_y = 20 - }, -/obj/item/toy/figure/syndie{ - pixel_y = 23 - }, -/turf/open/floor/plating/elevatorshaft, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"CT" = ( -/obj/structure/chair/stool/directional/west, -/obj/effect/turf_decal/stripes/red/line{ - dir = 10 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"CV" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/turf/open/floor/plating/elevatorshaft, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"CX" = ( -/obj/machinery/light/warm/directional/north, -/obj/effect/turf_decal/siding/yellow{ - dir = 5 - }, -/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/enginetech{ - dir = 4 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"De" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"Dh" = ( -/obj/effect/turf_decal/delivery/red, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/red/line, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Dk" = ( -/obj/machinery/door/firedoor, -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/machinery/recharger, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"Dm" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"Dr" = ( -/obj/machinery/seed_extractor, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Ds" = ( -/obj/structure/toilet{ - pixel_y = 16 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 9 - }, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Dt" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark/corner, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"Du" = ( -/obj/effect/turf_decal/stripes/red/corner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 1 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Dv" = ( -/obj/effect/turf_decal/stripes/red/line, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Dw" = ( -/obj/structure/closet/emcloset, -/obj/structure/cable, -/obj/effect/turf_decal/tile/dark_red/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wideplating_new/dark{ - dir = 1 - }, -/obj/machinery/light/red/directional/south, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"Dy" = ( -/obj/machinery/smartfridge/chemistry, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem) -"Dz" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/line{ - dir = 9 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 9 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"DA" = ( -/obj/effect/turf_decal/bot, -/obj/item/disk{ - desc = "A cheap, plastic hard-disk labelled 'good tunes to assault ops to'. It looks disused... wait, is that a 'THE WEAPONIZED' logo?"; - icon_state = "nucleardisk"; - name = "dat fukken disk" - }, -/obj/item/choice_beacon/music{ - pixel_x = 5 - }, -/obj/item/choice_beacon/music{ - pixel_x = -3; - pixel_y = -4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/closet/crate/wooden, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ - pixel_x = 4 - }, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_half{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"DB" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"DE" = ( -/obj/structure/table/wood, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/button/door{ - id = "TESArena"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_x = -8; - pixel_y = 24; - specialfunctions = 4 - }, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"DF" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/effect/turf_decal/trimline/dark_red/corner, -/obj/effect/turf_decal/trimline/dark_red/line{ - dir = 9 - }, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ - dir = 1 - }, -/obj/structure/cable, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/machinery/fax{ - fax_name = "Unknown Syndicate Fax"; - name = "DS-2 Fax Machine"; - pixel_y = 7; - syndicate_network = 1 - }, -/turf/open/floor/iron/dark/textured_half, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"DH" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"DI" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/machinery/door/airlock/command{ - name = "E.V.A." - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/structure/cable, -/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/syndicate/general, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/eva) -"DJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"DK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness) -"DL" = ( -/obj/machinery/biogenerator, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"DS" = ( -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/siding/thinplating/end{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/open/floor/iron/small, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Eb" = ( -/obj/machinery/light/cold/directional/west, -/obj/effect/turf_decal/vg_decals/atmos/nitrogen{ - dir = 4 - }, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Ec" = ( -/obj/structure/transit_tube/station/dispenser/reverse, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Ed" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"Ej" = ( -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/siding/thinplating/end{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/button/door{ - id = "ds2cargo"; - name = "Cargo Blastdoor Control"; - pixel_x = 24; - req_access = list("syndicate") - }, -/obj/structure/railing, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron/small, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"Em" = ( -/obj/effect/turf_decal/tile/yellow/half, -/obj/structure/sign/flag/syndicate/directional/south{ - pixel_x = -16 - }, -/obj/structure/rack/shelf, -/obj/item/tank/internals/emergency_oxygen/double{ - pixel_x = -2; - pixel_y = 3 - }, -/obj/item/clothing/mask/gas/alt{ - pixel_x = -2 - }, -/obj/item/tank/internals/emergency_oxygen/double{ - pixel_x = 6 - }, -/obj/item/clothing/mask/gas/alt{ - pixel_x = 6; - pixel_y = -3 - }, -/turf/open/floor/iron/dark/textured_half, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"En" = ( -/obj/effect/turf_decal/stripes/red/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Ey" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/bookcase/random/nonfiction, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"Ez" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"EB" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/vending/engivend{ - onstation = 0 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"EC" = ( -/obj/item/grenade/barrier{ - pixel_y = 10 - }, -/obj/item/grenade/barrier{ - pixel_x = 4; - pixel_y = 6 - }, -/obj/item/grenade/barrier{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/item/grenade/barrier{ - pixel_y = 2 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"EJ" = ( -/obj/structure/lattice/catwalk, -/obj/structure/marker_beacon/burgundy, -/turf/template_noop, -/area/template_noop) -"EL" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness) -"EP" = ( -/obj/machinery/light/warm/directional/north, -/obj/machinery/vending/clothing, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"EQ" = ( -/obj/machinery/duct, -/obj/structure/reagent_dispensers/water_cooler, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"ET" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/conveyor{ - id = "ds2disposals" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/end, -/obj/effect/spawner/random/trash/botanical_waste, -/obj/effect/spawner/random/trash/food_packaging{ - pixel_x = -4; - pixel_y = -3 - }, -/obj/item/trash/can/food/peaches{ - pixel_x = 6; - pixel_y = -6 - }, -/turf/open/floor/iron/pool, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"EU" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 8 - }, -/obj/structure/chair{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"EW" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/light/cold/directional/south, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/eva) -"EY" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral) -"EZ" = ( -/obj/effect/spawner/random/contraband/prison, -/obj/structure/closet/crate/bin, -/obj/effect/spawner/random/trash/food_packaging{ - pixel_y = -5 - }, -/obj/effect/spawner/random/trash/cigbutt, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Fa" = ( -/obj/effect/turf_decal/siding/dark, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Fb" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Fc" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/machinery/atmospherics/pipe/smart/simple/violet/hidden{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Fe" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"Fh" = ( -/obj/effect/turf_decal/stripes/red/line, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"Fi" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/structure/window/reinforced/survival_pod{ - dir = 10 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Fj" = ( -/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/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Fk" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "smasteratarms"; - name = "Master At Arms Shutters" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"Fl" = ( -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Fm" = ( -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Research" - }, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"Fo" = ( -/obj/effect/turf_decal/stripes/red/corner, -/obj/effect/turf_decal/siding/dark/corner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Fw" = ( -/obj/machinery/shower/directional/south, -/obj/effect/turf_decal/siding/dark{ - dir = 5 - }, -/obj/structure/drain, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness) -"Fx" = ( -/obj/machinery/chem_dispenser/mutagensaltpeter, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"Fy" = ( -/obj/effect/turf_decal/delivery/red, -/obj/machinery/door/poddoor/shutters{ - id = "ds2armory"; - name = "Armory Shutters" - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"Fz" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"FA" = ( -/obj/machinery/sleeper/syndie/fullupgrade{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 9 - }, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"FB" = ( -/obj/structure/chair/office/light, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"FC" = ( -/obj/structure/cable, -/obj/machinery/power/rtg/advanced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"FD" = ( -/obj/effect/turf_decal/siding/wood, -/obj/item/kirbyplants/organic/plant21, -/obj/machinery/button/door/directional/north{ - desc = "Keep out the paperwork."; - id = "scorpliaison"; - name = "Corporate Liaison's room bolt"; - normaldoorcontrol = 1; - req_access = list("syndicate_leader"); - specialfunctions = 4 - }, -/obj/machinery/light/warm/directional/west, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"FG" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"FH" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness) -"FJ" = ( -/obj/effect/turf_decal/siding/dark/corner, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 8 - }, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"FO" = ( -/obj/structure/closet/secure_closet/interdynefob/medical, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem) -"FP" = ( -/obj/machinery/computer/crew/syndie{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"FY" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"FZ" = ( -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"Gb" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"Gd" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/machinery/light/red/directional/south, -/obj/effect/turf_decal/siding/white{ - dir = 6 - }, -/obj/item/toy/figure/syndie{ - pixel_x = -12; - pixel_y = -1 - }, -/turf/open/floor/plating/elevatorshaft, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"Ge" = ( -/obj/effect/turf_decal/stripes/red/line, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"Gg" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 10 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"Gh" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/line{ - dir = 10 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/button/curtain{ - id = "DS2cell1"; - name = "curtain control"; - pixel_y = -24 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Gi" = ( -/obj/effect/turf_decal/stripes/red/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/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Gk" = ( -/obj/machinery/power/turbine/core_rotor{ - mapping_id = "syndicatelava_turbine" - }, -/obj/structure/cable, -/turf/open/floor/engine, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Gl" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/effect/turf_decal/siding/dark, -/obj/structure/table, -/obj/item/choice_beacon/ingredient{ - pixel_y = 11 - }, -/obj/item/choice_beacon/ingredient{ - pixel_x = -5; - pixel_y = 2 - }, -/obj/item/clothing/accessory/armband/hydro{ - desc = "An armband, worn by the FOB's operatives to display which department they're assigned to."; - name = "service armband"; - pixel_x = 15 - }, -/obj/item/reagent_containers/condiment/enzyme{ - pixel_x = 17; - pixel_y = 8 - }, -/obj/item/storage/belt/military/snack, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Gt" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/turf/open/floor/wood/parquet, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"Gx" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"Gz" = ( -/obj/effect/turf_decal/siding/dark/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"GD" = ( -/obj/effect/turf_decal/siding/dark, -/obj/structure/table, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"GE" = ( -/obj/effect/turf_decal/bot, -/obj/effect/spawner/random/maintenance/two, -/obj/structure/closet/crate, -/obj/effect/spawner/random/engineering/flashlight, -/obj/effect/spawner/random/clothing/twentyfive_percent_cyborg_mask, -/obj/effect/spawner/random/engineering/tool, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"GG" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/turf/open/floor/iron/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"GH" = ( -/obj/effect/turf_decal/bot, -/obj/structure/closet/crate/freezer/surplus_limbs, -/turf/open/floor/iron/dark/textured_half, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"GK" = ( -/obj/machinery/power/shuttle_engine/huge, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/skyrat/interdynefob) -"GL" = ( -/obj/effect/turf_decal/bot_white, -/obj/structure/closet/crate, -/obj/effect/spawner/random/contraband/prison, -/obj/item/canvas/twentythree_twentythree, -/obj/item/canvas/twentythree_twentythree, -/obj/item/toy/crayon/spraycan{ - pixel_x = -5; - pixel_y = 9 - }, -/obj/item/toy/crayon/spraycan{ - pixel_x = 4; - pixel_y = 9 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"GO" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/red/corner, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"GR" = ( -/obj/effect/turf_decal/bot, -/obj/structure/reagent_dispensers/fueltank, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ - pixel_x = 4 - }, -/obj/effect/decal/cleanable/oil, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"GS" = ( -/obj/effect/turf_decal/siding/wood{ - 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/wood/parquet, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"GU" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"GV" = ( -/obj/structure/table/wood, -/obj/item/camera{ - pixel_x = -9; - pixel_y = 6 - }, -/obj/item/paper{ - default_raw_text = "

DS2 Command Report

The Deep Space 2 Forward Operating Base has successfully relocated itself near active Nanotrasen installations. Reboot of shuttle engines in progress...

The Sothran Syndicate is glad to have you on-field, admiral. Nanotrasen is in the direct sector and, as such, is the direct target of our operatives. Manage your crew well and with respect, and leave all your anger to the gravel that is Nanotrasen. Remember that Interdyne has an unaffiliated facade to keep up, as such, advise against your crew flaunting their affiliation to non-crew.

Stay winning.

"; - name = "paper- 'DS2 Command Report'" - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral) -"GX" = ( -/obj/structure/sign/flag/syndicate/directional/south{ - pixel_x = 16 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/siding/white, -/obj/item/toy/figure/syndie{ - pixel_x = -10 - }, -/obj/item/toy/figure/syndie{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/structure/shipping_container/donk_co{ - desc = "A standard-measure shipping container for bulk transport of goods. This one is from Donk Co. and so could be carrying just about anything- although it seems this one is overflowing with little Syndicate Figurines, known for being sold at a Loss."; - pixel_x = -17; - pixel_y = 15 - }, -/turf/open/floor/plating/elevatorshaft, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"GY" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 5 - }, -/obj/structure/chair/sofa/corp/left{ - color = "#DE3A3A" - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"Ha" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/window/survival_pod{ - dir = 4; - req_access = list("syndicate_leader") - }, -/obj/structure/table/reinforced/plastitaniumglass, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"Hb" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/chair/sofa/corp{ - color = "#DE3A3A" - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"Hc" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/light/cold/directional/west, -/obj/structure/rack/gunrack, -/obj/item/gun/ballistic/automatic/sol_smg/evil{ - pixel_x = -8 - }, -/obj/item/gun/ballistic/shotgun/riot/sol/evil{ - pixel_x = 0 - }, -/obj/item/gun/ballistic/automatic/sol_rifle/evil{ - pixel_x = 8 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"Hh" = ( -/obj/machinery/light/cold/directional/east, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/obj/machinery/vending/dinnerware{ - onstation = 0 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Hn" = ( -/obj/effect/turf_decal/siding/dark, -/obj/structure/window/reinforced/survival_pod{ - dir = 6 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Hq" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_red/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_red/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_half{ - dir = 1 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"Ht" = ( -/obj/effect/turf_decal/trimline/dark_red/line, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner, -/obj/machinery/computer/shuttle{ - desc = "A shuttle terminal which allows a connection to the DS-2 forward base's supply shuttle."; - icon_keyboard = "syndie_key"; - icon_screen = "syndishuttle"; - light_color = "#FA8282"; - name = "syndicate cargo shuttle terminal"; - possible_destinations = "IP-DS-2"; - req_access = list("syndicate"); - shuttleId = "syndie_cargo" - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"Hu" = ( -/obj/structure/closet/crate, -/obj/item/reagent_containers/cup/bowl, -/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/kitchen/fork/plastic, -/obj/item/kitchen/fork/plastic, -/obj/item/kitchen/fork/plastic, -/obj/item/storage/box/drinkingglasses, -/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/kitchen/rollingpin, -/obj/item/storage/box/drinkingglasses, -/obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 1 - }, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Hw" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 1 - }, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Hz" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"HA" = ( -/obj/item/book/manual/wiki/chemistry{ - pixel_x = -4 - }, -/obj/item/clothing/glasses/science{ - pixel_x = -4 - }, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem) -"HD" = ( -/obj/effect/turf_decal/stripes/red/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 8 - }, -/obj/effect/turf_decal/box/white/corners{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"HE" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"HF" = ( -/obj/machinery/suit_storage_unit/syndicate/chameleon{ - name = "suit storage unit" - }, -/obj/effect/turf_decal/siding/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/yellow/warning{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/line{ - dir = 4 - }, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"HH" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"HI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"HK" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "ds2conveyor" - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"HQ" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/machinery/power/shuttle_engine/heater, -/obj/structure/window/reinforced/tinted/spawner/directional/west, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/skyrat/interdynefob) -"HV" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "ds2conveyor" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"HZ" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/dark, -/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/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Ia" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem) -"Ih" = ( -/obj/effect/turf_decal/trimline/yellow/warning{ - 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/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Ii" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/security/lawyer) -"Im" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/machinery/light/warm/directional/east, -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Io" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/structure/cable, -/obj/machinery/power/rtg/advanced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Ir" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Iw" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"IA" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/structure/chair/sofa/bench/corner{ - dir = 1 - }, -/obj/item/kirbyplants/organic/plant18, -/obj/machinery/light/cold/directional/south, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/structure/cable, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"IC" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/light/floor{ - use_power = 0 - }, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/skyrat/interdynefob) -"IH" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 5 - }, -/obj/item/circuitboard/machine/destructive_analyzer, -/obj/structure/frame/machine{ - anchored = 1; - icon_state = "box_1"; - state = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"IM" = ( -/obj/structure/closet/crate/medical, -/obj/effect/turf_decal/bot, -/obj/effect/spawner/random/medical/medkit{ - pixel_x = 6; - pixel_y = 3 - }, -/obj/effect/spawner/random/medical/supplies{ - pixel_y = 3 - }, -/obj/effect/spawner/random/medical/medkit{ - pixel_x = -6; - pixel_y = -3 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ - pixel_x = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"IN" = ( -/obj/structure/table/wood, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/item/sign/flag/syndicate{ - pixel_x = -3; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/maunamug{ - pixel_x = 4 - }, -/turf/open/floor/carpet/donk, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"IQ" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness) -"IU" = ( -/obj/item/circuitboard/machine/ammo_workbench, -/obj/structure/frame/machine{ - anchored = 1; - icon_state = "box_1"; - state = 2 - }, -/obj/item/disk/ammo_workbench/advanced, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"IV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"IZ" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 6 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/structure/window/reinforced/survival_pod{ - dir = 10 - }, -/obj/machinery/suit_storage_unit{ - mask_type = /obj/item/clothing/mask/gas/syndicate; - mod_type = /obj/item/mod/control/pre_equipped/traitor_elite; - storage_type = /obj/item/tank/jetpack/oxygen/harness - }, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral) -"Ja" = ( -/obj/structure/table, -/obj/machinery/processor{ - pixel_x = 1 - }, -/obj/structure/sign/poster/contraband/kss13/directional/east, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Jd" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem) -"Jf" = ( -/obj/structure/closet/secure_closet/freezer/kitchen/all_access, -/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/effect/spawner/random/contraband/permabrig_weapon, -/obj/item/food/grown/onion, -/obj/item/food/grown/onion, -/obj/item/storage/box/ingredients/random, -/obj/item/storage/box/ingredients/random, -/obj/effect/turf_decal/bot_white, -/obj/item/storage/box/ingredients/carnivore, -/obj/item/storage/box/ingredients/wildcard, -/obj/item/storage/fancy/egg_box, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Jl" = ( -/obj/machinery/light/cold/directional/west, -/obj/structure/table, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/item/trash/empty_food_tray{ - pixel_y = 7 - }, -/obj/item/newspaper{ - pixel_x = 5; - pixel_y = -1 - }, -/obj/item/trash/can{ - pixel_x = -9 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Jv" = ( -/obj/effect/turf_decal/siding/dark, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"Jy" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/red/corner, -/obj/effect/turf_decal/trimline/yellow/corner{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Jz" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"JA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/chair/stool/directional/west, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"JB" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark, -/obj/structure/cable, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"JC" = ( -/turf/open/floor/catwalk_floor/iron_dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"JD" = ( -/obj/structure/closet/secure_closet/interdynefob/maa_locker, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/window/reinforced/survival_pod{ - dir = 6 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"JE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/wood{ - dir = 10 - }, -/obj/structure/cable, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"JF" = ( -/obj/effect/turf_decal/trimline/dark_blue/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/light/cold/directional/north, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"JI" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 6 - }, -/obj/machinery/vending/cigarette/syndicate, -/obj/machinery/camera/xray/directional/east{ - c_tag = "DS-2 Botany"; - network = list("ds2") - }, -/turf/open/floor/wood/parquet, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"JK" = ( -/obj/structure/rack/shelf, -/obj/effect/turf_decal/trimline/dark_red/filled/line{ - dir = 8 - }, -/obj/item/ai_module/reset/purge{ - pixel_x = -2; - pixel_y = -7 - }, -/obj/item/ai_module/reset/purge{ - pixel_y = -4 - }, -/obj/item/ai_module/supplied/freeform{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/ai_module/supplied/freeform{ - pixel_y = 7 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"JL" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"JN" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/dark_blue/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/ruin/space/has_grav/skyrat/interdynefob/halls) -"JR" = ( -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"JS" = ( -/obj/machinery/button/door/directional/east{ - desc = "To keep the void away."; - id = "ds2bridge"; - name = "Bridge Blast Door Control"; - pixel_y = 32; - req_access = list("syndicate_leader") - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"JZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/machinery/light/small/red/directional/east, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/camera/xray/directional/east{ - c_tag = "DS-2 Engineering Airlock"; - network = list("ds2") - }, -/turf/open/floor/catwalk_floor/iron_dark, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Kb" = ( -/obj/machinery/door/window/survival_pod{ - dir = 1; - req_access = list("syndicate_leader") - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"Kd" = ( -/obj/effect/turf_decal/skyrat_decals/syndicate/bottom/right, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"Ke" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"Kf" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"Kg" = ( -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Kh" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ - pixel_x = 4 - }, -/obj/effect/turf_decal/bot, -/obj/effect/spawner/random/mod/maint, -/obj/effect/spawner/random/mod/maint{ - pixel_y = -3 - }, -/obj/effect/spawner/random/mod/maint{ - pixel_y = -6 - }, -/obj/structure/closet/crate/science, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"Kj" = ( -/obj/effect/turf_decal/trimline/dark_green/warning{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Kk" = ( -/obj/effect/turf_decal/tile/dark_red/half/contrasted{ - dir = 4 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/effect/turf_decal/siding/wideplating_new/dark{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"Ku" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"Kz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/railing/corner, -/obj/effect/turf_decal/stripes/end, -/obj/effect/turf_decal/siding/dark/end, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"KC" = ( -/obj/effect/turf_decal/siding/dark/corner{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"KG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"KI" = ( -/obj/effect/turf_decal/stripes/red/corner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 4 - }, -/obj/effect/turf_decal/box/white/corners, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"KJ" = ( -/obj/structure/table/reinforced, -/obj/machinery/light/cold/directional/north, -/obj/item/storage/toolbox/electrical{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/storage/toolbox/mechanical, -/obj/item/stack/rods/fifty{ - pixel_y = 5 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/eva) -"KM" = ( -/obj/structure/chair/stool/directional/east, -/obj/effect/turf_decal/stripes/red/line, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"KN" = ( -/obj/machinery/door/airlock/security/old/glass{ - name = "Security" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/red/line, -/obj/effect/turf_decal/delivery/red, -/obj/structure/cable, -/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 = 2 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "DS2brig" - }, -/obj/effect/mapping_helpers/airlock/unres, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"KQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/dark_red/half{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wideplating_new/dark{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_half{ - dir = 1 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"KS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"KT" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/obj/structure/closet/l3closet/scientist, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"KV" = ( -/obj/effect/turf_decal/siding/wideplating_new/dark/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"KY" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"Lb" = ( -/obj/effect/turf_decal/tile/dark_red/half, -/obj/effect/turf_decal/siding/wideplating_new/dark, -/turf/open/floor/iron/dark/textured_half{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"Le" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/carpet/red, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral) -"Lf" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"Lg" = ( -/obj/machinery/atmospherics/miner/plasma, -/turf/open/floor/engine/plasma, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Ll" = ( -/obj/effect/turf_decal/siding/dark, -/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/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Lo" = ( -/obj/effect/turf_decal/trimline/yellow/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/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Lq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"Lv" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/closet/secure_closet/interdynefob/armory_gear_locker, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"Lw" = ( -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Lx" = ( -/obj/machinery/door/airlock/security/old{ - hackProof = 1; - id_tag = "smasteratarms"; - name = "Master At Arms' Office" - }, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/delivery/red, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/red/line, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"Lz" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"LA" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/power/rtg/advanced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"LB" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/researcher, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"LF" = ( -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"LG" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral) -"LK" = ( -/obj/structure/sign/flag/syndicate/directional/south, -/obj/machinery/light/warm/directional/south, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"LM" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "ds2conveyor" - }, -/obj/structure/railing, -/obj/machinery/door/poddoor{ - id = "ds2cargo" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"LP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"LQ" = ( -/obj/structure/table/wood, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/firealarm/directional/south, -/obj/item/poster/random_contraband{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/poster/random_contraband, -/obj/item/poster/random_contraband{ - pixel_x = 2; - pixel_y = 5 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"LT" = ( -/obj/structure/toilet{ - pixel_y = 10 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 5 - }, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"LV" = ( -/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/enginetech{ - dir = 8 - }, -/obj/machinery/light/warm/directional/north, -/obj/effect/turf_decal/siding/yellow{ - dir = 9 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"LY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/camera/xray/directional/south{ - c_tag = "DS-2 Armory"; - network = list("ds2") - }, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/siding/dark{ - dir = 5 - }, -/obj/item/storage/box/pinpointer_pairs{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/item/storage/box/pinpointer_pairs, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"Mg" = ( -/obj/structure/chair/office/light{ - dir = 8 - }, -/turf/open/floor/catwalk_floor/iron_dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"Mk" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Mn" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"Mo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"Mt" = ( -/obj/machinery/porta_turret/syndicate/energy{ - dir = 5 - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/vault) -"Mw" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 8 - }, -/obj/item/plate, -/obj/item/food/poutine{ - pixel_y = 2 - }, -/obj/item/food/poutine{ - pixel_y = 5 - }, -/obj/machinery/light/warm/directional/west, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"MB" = ( -/obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown{ - pixel_x = -3; - pixel_y = 4 - }, -/obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown{ - pixel_x = -7 - }, -/obj/structure/table/glass, -/obj/item/reagent_containers/cup/glass/waterbottle{ - pixel_x = 8; - pixel_y = 4 - }, -/obj/effect/turf_decal/tile/dark_blue/full, -/obj/machinery/light/cold/directional/north, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"MC" = ( -/obj/structure/table/wood, -/obj/item/paper_bin/carbon{ - pixel_y = 3 - }, -/obj/item/pen/fountain/captain{ - name = "admiral's fountain pen"; - pixel_y = 5 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral) -"ME" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "ds2admiral"; - name = "Admiral Shutters" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral) -"MF" = ( -/obj/effect/turf_decal/bot_blue, -/obj/structure/closet/secure_closet/freezer/meat{ - req_access = list("syndicate") - }, -/obj/item/food/meat/slab, -/obj/item/food/meat/slab, -/obj/item/food/meat/slab, -/obj/item/food/meat/slab, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"MG" = ( -/obj/structure/drain, -/obj/machinery/shower/directional/east{ - pixel_x = -13 - }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 6 - }, -/turf/open/floor/iron/small, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"MH" = ( -/obj/structure/table/reinforced, -/obj/machinery/recharger, -/obj/machinery/firealarm/directional/north, -/obj/machinery/camera/xray/directional/east{ - c_tag = "DS-2 EVA"; - network = list("ds2") - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/eva) -"MK" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"MM" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 6 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"MP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/catwalk_floor/iron_dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"MQ" = ( -/obj/structure/weightmachine, -/obj/machinery/light/warm/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark/line{ - dir = 1 - }, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness) -"MT" = ( -/obj/machinery/computer/shuttle{ - desc = "A shuttle terminal which allows a connection to the DS-2 forward base's supply shuttle."; - icon_keyboard = "syndie_key"; - icon_screen = "syndishuttle"; - light_color = "#FA8282"; - name = "syndicate cargo shuttle terminal"; - possible_destinations = "IP-DS-2"; - req_access = list("syndicate"); - shuttleId = "syndie_cargo" - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"MZ" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_red/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_red/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ - dir = 4 - }, -/obj/structure/sign/flag/syndicate/directional/north, -/obj/structure/showcase/cyborg{ - desc = "A stand with the empty body of a Cybersun cyborg bolted to it."; - dir = 4; - icon = 'icons/mob/silicon/robots.dmi'; - icon_state = "synd_sec"; - name = "syndicate cyborg showcase"; - pixel_x = -6 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/dark/textured_half{ - dir = 1 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"Nb" = ( -/obj/effect/turf_decal/stripes/red/corner, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 1 - }, -/obj/effect/turf_decal/box/white/corners{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"Nc" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/skyrat/interdynefob) -"Ne" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 10 - }, -/obj/machinery/button/door/directional/south{ - id = "dorms-view"; - name = "Dorms Blast Door Control"; - req_access = list("syndicate") - }, -/obj/structure/chair/sofa/corp/right{ - color = "#DE3A3A"; - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"Ng" = ( -/obj/effect/turf_decal/vg_decals/atmos/plasma{ - dir = 4 - }, -/turf/open/floor/engine/plasma, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Ni" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/structure/chair/stool/bar/directional/south, -/obj/item/paint_palette, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Nk" = ( -/obj/machinery/door/airlock/command{ - hackProof = 1; - name = "Bridge" - }, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"Nl" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/researcher, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"Nm" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/chair/comfy/brown{ - color = "#596479"; - dir = 8 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"No" = ( -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/silver/glass{ - name = "Kitchen" - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"Nr" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Ns" = ( -/obj/structure/sign/flag/syndicate/directional/north{ - pixel_x = 16 - }, -/obj/effect/turf_decal/tile/dark_red/half, -/obj/effect/turf_decal/siding/wideplating_new/dark, -/turf/open/floor/iron/dark/textured_half{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"NA" = ( -/obj/effect/turf_decal/tile/dark_red/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wideplating_new/dark{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/button/door/incinerator_vent_syndicatelava_aux{ - name = "Combustion Chamber Blast Door Control"; - pixel_x = -6; - pixel_y = 24 - }, -/obj/machinery/button/door/incinerator_vent_syndicatelava_main{ - name = "Turbine Exterior Vent Control"; - pixel_x = -6; - pixel_y = -24 - }, -/obj/machinery/door/window/survival_pod{ - dir = 8; - req_access = list("syndicate") - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"NB" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob) -"NC" = ( -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"NG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/obj/machinery/door/firedoor, -/obj/structure/cable, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"NL" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/dark, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/arrows, -/obj/effect/turf_decal/box/corners{ - dir = 8 - }, -/obj/effect/turf_decal/box/corners, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"NN" = ( -/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 = 2 - }, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"NO" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Fitness" - }, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/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/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness) -"NP" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/structure/closet/secure_closet/interdynefob/brig_officer_locker, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"NQ" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"NR" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "ds2conveyor" - }, -/obj/structure/railing, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"NS" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/line{ - dir = 6 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 6 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/structure/table, -/obj/item/storage/box/hug{ - pixel_x = 4; - pixel_y = 3 - }, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"NT" = ( -/obj/effect/turf_decal/trimline/blue/line{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_edge{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"NW" = ( -/obj/structure/chair{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"NX" = ( -/obj/structure/chair/comfy/brown{ - color = "#596479" - }, -/obj/machinery/light/warm/directional/north, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral) -"NY" = ( -/obj/structure/closet/firecloset/full, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"Ob" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 9 - }, -/obj/effect/turf_decal/trimline/dark_red/corner, -/obj/effect/turf_decal/trimline/dark_red/line{ - dir = 9 - }, -/turf/open/floor/iron/dark/textured_corner, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"Oc" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/warm/directional/west, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Od" = ( -/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ - dir = 8; - pixel_y = 4 - }, -/obj/structure/table/wood, -/obj/machinery/firealarm/directional/east, -/obj/item/reagent_containers/cup/glass/shaker{ - pixel_x = -6; - pixel_y = -7 - }, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Oe" = ( -/obj/structure/punching_bag, -/obj/effect/turf_decal/box/white, -/obj/item/reagent_containers/cup/glass/waterbottle{ - pixel_x = 11 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Og" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/machinery/power/shuttle_engine/heater, -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/skyrat/interdynefob) -"Oi" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/skyrat/interdynefob) -"Ok" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 10 - }, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"Op" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/light/warm/directional/east, -/obj/machinery/vending/snack, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Ov" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/item/restraints/handcuffs{ - pixel_y = 17 - }, -/obj/item/assembly/flash/handheld{ - pixel_x = 3; - pixel_y = 10 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/item/crowbar/red, -/obj/item/assembly/flash/handheld{ - pixel_x = -6; - pixel_y = 7 - }, -/obj/structure/reagent_dispensers/wall/peppertank/directional/west, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"Ox" = ( -/obj/machinery/sleeper/syndie/fullupgrade{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 10 - }, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"Oy" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"OC" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/structure/window/reinforced/survival_pod{ - dir = 10 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 10 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/closet/secure_closet/interdynefob/brig_officer_locker, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"OD" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/power/rtg/advanced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"OF" = ( -/obj/effect/turf_decal/trimline/dark_green/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"OK" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/power/rtg/advanced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"ON" = ( -/obj/machinery/atmospherics/miner/nitrogen, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"OP" = ( -/obj/effect/turf_decal/skyrat_decals/syndicate/top/left, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"OT" = ( -/obj/machinery/cryopod{ - dir = 8 - }, -/obj/effect/turf_decal/delivery/white{ - color = "#00ff00"; - name = "green" - }, -/obj/machinery/computer/cryopod/interdyne/directional/east, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"OU" = ( -/obj/effect/turf_decal/trimline/dark_green/corner{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Pe" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/structure/chair/sofa/corp/left{ - color = "#DE3A3A"; - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"Pf" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/security/lawyer) -"Pi" = ( -/obj/structure/railing/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/conveyor_switch/oneway{ - id = "ds2disposals"; - pixel_y = 12 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Pn" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 10 - }, -/obj/machinery/atmospherics/components/binary/valve/digital{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Po" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/vg_decals/numbers/one, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Pq" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/camera/xray/directional/west{ - c_tag = "DS-2 Engineering"; - network = list("ds2") - }, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Pt" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/effect/turf_decal/trimline/dark_red/line, -/obj/effect/turf_decal/trimline/dark_red/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner, -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_half, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"Px" = ( -/obj/effect/turf_decal/siding/dark, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Py" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/effect/turf_decal/delivery/red, -/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{ - name = "Cell 2" - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"PA" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/obj/machinery/light/cold/directional/north, -/obj/structure/closet/secure_closet/interdynefob/science_gear, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"PB" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/machinery/griddle, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"PM" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/purple/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/ore_box, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"PO" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/siding/yellow{ - dir = 4 - }, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"PP" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"PR" = ( -/obj/effect/turf_decal/stripes/red/corner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/structure/cable, -/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/machinery/firealarm/directional/south, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"PS" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 10 - }, -/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/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"PU" = ( -/obj/machinery/icecream_vat, -/obj/effect/turf_decal/siding/dark{ - dir = 10 - }, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"PV" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 8 - }, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"PW" = ( -/obj/structure/table/glass, -/obj/item/grenade/chem_grenade/antiweed{ - pixel_x = -8; - pixel_y = 8 - }, -/obj/item/reagent_containers/spray/plantbgone{ - pixel_x = 11; - pixel_y = 11 - }, -/obj/item/watertank, -/obj/item/clothing/accessory/armband/hydro{ - desc = "An armband, worn by the FOB's operatives to display which department they're assigned to."; - name = "service armband"; - pixel_x = 15 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"PX" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"PY" = ( -/obj/structure/punching_bag, -/turf/open/floor/carpet/blue, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness) -"Qa" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 8 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Qb" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2, -/turf/open/floor/engine, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Qe" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/power/rtg/advanced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Qh" = ( -/obj/effect/turf_decal/trimline/purple/line{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Qi" = ( -/obj/structure/mirror/directional/north, -/obj/structure/sink/directional/south, -/obj/effect/turf_decal/siding/dark{ - dir = 5 - }, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Qo" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/structure/sink/directional/south, -/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/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"Qp" = ( -/obj/structure/transit_tube/station/dispenser/reverse/flipped{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Qs" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 10 - }, -/obj/structure/bed/dogbed, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/window/reinforced/survival_pod{ - dir = 6 - }, -/mob/living/basic/pet/fox{ - name = "Rhials" - }, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"Qw" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/effect/turf_decal/trimline/brown/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/arrows{ - pixel_y = 16 - }, -/obj/effect/turf_decal/box/corners{ - dir = 4 - }, -/obj/effect/turf_decal/box/corners{ - dir = 1 - }, -/obj/machinery/computer/order_console/mining/interdyne, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"Qx" = ( -/obj/effect/turf_decal/stripes/red/corner, -/obj/structure/weightmachine/weightlifter, -/obj/effect/turf_decal/box/white, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Qz" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"QA" = ( -/obj/effect/turf_decal/bot, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ - pixel_x = 4 - }, -/obj/effect/spawner/random/maintenance/five, -/obj/effect/spawner/random/trash/janitor_supplies, -/obj/structure/closet/crate, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"QB" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 8 - }, -/obj/structure/chair{ - dir = 1 - }, -/obj/machinery/button/door/directional/east{ - desc = "To keep your food away from the carp."; - id = "diner-view"; - name = "Diner Blast Door Control"; - pixel_y = -24; - req_access = list("syndicate") - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"QC" = ( -/obj/effect/turf_decal/trimline/dark_green/corner, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/disposalpipe/junction{ - dir = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"QE" = ( -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/structure/cable, -/obj/effect/turf_decal/tile/dark_red/anticorner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wideplating_new/dark{ - dir = 9 - }, -/turf/open/floor/iron/dark/textured_half{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"QF" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 9 - }, -/obj/machinery/atmospherics/components/trinary/mixer/airmix/inverse{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"QG" = ( -/obj/effect/turf_decal/box/red/corners{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"QH" = ( -/obj/item/folder/syndicate, -/obj/item/laser_pointer/upgraded{ - pixel_y = 10 - }, -/obj/item/clothing/glasses/sunglasses, -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/security/lawyer) -"QK" = ( -/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/dark_red/half{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wideplating_new/dark{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_half{ - dir = 1 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"QM" = ( -/obj/item/kirbyplants/organic/plant10, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"QN" = ( -/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/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"QO" = ( -/obj/structure/table/wood, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"QQ" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/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/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"QV" = ( -/obj/structure/chair/stool/directional/east, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"QW" = ( -/obj/structure/chair/office/light{ - dir = 8 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"QX" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/machinery/power/shuttle_engine/heater{ - dir = 1 - }, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/skyrat/interdynefob) -"QY" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 - }, -/obj/machinery/light/cold/directional/west, -/obj/structure/bed/medical/emergency, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"Ra" = ( -/obj/effect/turf_decal/box/red/corners, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"Rb" = ( -/obj/machinery/chem_master/condimaster{ - name = "BrewMaster 3000" - }, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"Rc" = ( -/obj/structure/disposalpipe/segment{ - dir = 1 - }, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Rd" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 5 - }, -/obj/structure/table/wood, -/obj/machinery/computer/libraryconsole/bookmanagement{ - pixel_y = 7 - }, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/wood/parquet, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"Re" = ( -/obj/structure/chair{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/security/lawyer) -"Rf" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"Rh" = ( -/obj/machinery/vending/cola/red, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Rj" = ( -/obj/effect/turf_decal/siding/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/yellow/warning{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/line{ - dir = 4 - }, -/obj/structure/closet/radiation, -/obj/item/mod/module/rad_protection, -/obj/item/analyzer, -/obj/item/mod/module/visor/meson{ - pixel_y = -9 - }, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Rm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/cold/directional/west, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Rp" = ( -/obj/structure/sign/flag/syndicate/directional/north, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"Rr" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 8 - }, -/obj/structure/chair/stool/bar{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Rt" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"Ru" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Rx" = ( -/obj/structure/bookcase/random/adult, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"Rz" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/effect/turf_decal/siding/dark, -/obj/structure/table, -/obj/effect/spawner/random/food_or_drink/pizzaparty{ - loot = list(/obj/item/pizzabox/margherita=2,/obj/item/pizzabox/meat=2,/obj/item/pizzabox/mushroom=2,/obj/item/pizzabox/pineapple=2,/obj/item/pizzabox/vegetable=2); - pixel_y = 9 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"RE" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/conveyor{ - id = "ds2disposals" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/spawner/random/trash/garbage{ - pixel_x = 4; - pixel_y = 5 - }, -/turf/open/floor/iron/pool, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"RH" = ( -/obj/effect/turf_decal/siding/dark, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"RP" = ( -/obj/effect/turf_decal/siding/dark, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"RQ" = ( -/obj/structure/table/wood, -/obj/effect/spawner/random/bureaucracy/folder{ - pixel_x = 7; - pixel_y = 8 - }, -/obj/effect/spawner/random/bureaucracy/folder{ - pixel_x = 4; - pixel_y = 3 - }, -/obj/item/stamp{ - pixel_x = -7; - pixel_y = 6 - }, -/obj/item/stamp/denied{ - pixel_x = -6 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/machinery/button/door{ - desc = "Keep out the paperwork."; - id = "ds2corpliaison"; - name = "Shutters control"; - pixel_x = -32; - pixel_y = 24; - req_access = list("syndicate_leader") - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"RT" = ( -/obj/effect/turf_decal/tile/dark_blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/dark_blue{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/structure/filingcabinet, -/obj/item/folder/syndicate/red, -/obj/machinery/firealarm/directional/north, -/obj/machinery/camera/xray/directional/north{ - c_tag = "DS-2 Vault"; - network = list("ds2") - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/vault) -"RV" = ( -/obj/effect/turf_decal/stripes/red/corner, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 1 - }, -/obj/effect/turf_decal/box/white/corners{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"RX" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"RY" = ( -/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/ruin/space/has_grav/skyrat/interdynefob/cargo) -"RZ" = ( -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Sb" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"Sc" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/table/wood, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/item/paper_bin, -/obj/structure/window/reinforced/survival_pod{ - dir = 10 - }, -/obj/item/pen, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"Se" = ( -/obj/structure/table, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Sf" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/structure/closet/secure_closet/ds2atmos{ - anchorable = 0; - anchored = 1 - }, -/obj/effect/turf_decal/trimline/dark_red/corner, -/obj/effect/turf_decal/trimline/dark_red/corner{ - dir = 8 - }, -/obj/machinery/camera/xray/directional/south{ - c_tag = "DS-2 Bridge"; - network = list("ds2") - }, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/iron/dark/textured_half, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"Si" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/machinery/atmospherics/pipe/smart/simple/orange/hidden{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Sj" = ( -/obj/effect/turf_decal/trimline/yellow/corner{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"So" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/dark_blue/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/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Sp" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/firealarm/directional/west, -/obj/structure/rack/gunrack, -/obj/item/gun/ballistic/automatic/pistol/sol/evil{ - pixel_x = -5 - }, -/obj/item/gun/ballistic/automatic/pistol/sol/evil, -/obj/item/gun/ballistic/automatic/pistol/sol/evil{ - pixel_x = 5 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"Sq" = ( -/obj/machinery/light/warm/directional/east, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/atmospherics/components/trinary/filter/flipped, -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Sv" = ( -/obj/machinery/autolathe/hacked, -/obj/effect/turf_decal/trimline/purple/filled/line, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"Sw" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/obj/machinery/modular_computer/preset/curator, -/turf/open/floor/wood/parquet, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"Sx" = ( -/obj/effect/turf_decal/trimline/dark_red/line, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner, -/obj/structure/cable, -/obj/machinery/computer/camera_advanced/syndie, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"Sy" = ( -/obj/effect/turf_decal/siding/dark, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"SB" = ( -/obj/effect/turf_decal/trimline/purple/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron/dark/corner{ - dir = 8 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"SG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"SH" = ( -/obj/effect/turf_decal/delivery/red, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/red/line, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"SI" = ( -/obj/machinery/atmospherics/components/binary/pump/off/supply/visible/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/mid_joiner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/mid_joiner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"SN" = ( -/obj/machinery/deepfryer, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"SO" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron/textured, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"SR" = ( -/obj/effect/turf_decal/skyrat_decals/syndicate/top/right, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"SX" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"SY" = ( -/obj/structure/table/wood, -/obj/item/storage/photo_album/syndicate{ - pixel_x = -5; - pixel_y = -3 - }, -/obj/item/stamp/syndicate{ - pixel_x = 9; - pixel_y = 9 - }, -/obj/item/stamp/denied{ - pixel_x = 11; - pixel_y = 3 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral) -"SZ" = ( -/obj/machinery/computer/security{ - dir = 1; - network = list("ds2") - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"Ta" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/obj/machinery/light/cold/directional/south, -/obj/item/stack/sheet/glass/fifty{ - pixel_y = 9 - }, -/obj/item/stack/sheet/iron/fifty, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"Tf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/red/corner, -/obj/effect/turf_decal/siding/dark, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 1 - }, -/obj/item/trash/boritos/red{ - pixel_x = -13; - pixel_y = -10 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Tm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/computer/atmos_control/nocontrol/incinerator{ - atmos_chambers = list("syndieincinerator"="DS-2 Incinerator Chamber"); - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"To" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"Tp" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"Ts" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/structure/marker_beacon/burgundy, -/obj/structure/railing/corner{ - dir = 8; - pixel_y = 32 - }, -/obj/effect/turf_decal/tile/dark_red/half{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wideplating_new/dark{ - dir = 1 - }, -/obj/machinery/light/red/directional/south, -/turf/open/floor/iron/dark/textured_half{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"Tt" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Tu" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/purple/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"Tw" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"Tx" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/item/stack/sheet/iron/five, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"TA" = ( -/obj/machinery/firealarm/directional/east, -/obj/machinery/vending/syndichem, -/obj/machinery/camera/xray/directional/east{ - c_tag = "DS-2 Botany"; - network = list("ds2") - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem) -"TB" = ( -/obj/docking_port/stationary{ - dir = 4; - dwidth = 5; - height = 8; - name = "DS-2 Hangar"; - width = 11 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"TG" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/structure/chair/sofa/bench/left{ - dir = 4 - }, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"TH" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/line{ - dir = 6 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 6 - }, -/obj/structure/bed/pod, -/obj/item/bedsheet/black, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"TI" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/siding/dark, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 4 - }, -/obj/machinery/meter, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"TL" = ( -/obj/structure/closet/secure_closet/interdynefob/engie_locker, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/warning{ - dir = 4 - }, -/obj/effect/turf_decal/siding/yellow{ - dir = 4 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"TM" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/machinery/power/rtg/advanced, -/obj/machinery/light/warm/directional/south, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"TQ" = ( -/obj/item/storage/box/pillbottles{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/item/storage/box/gloves{ - pixel_x = 6; - pixel_y = 3 - }, -/obj/item/storage/box/medipens{ - pixel_x = 4; - pixel_y = 13 - }, -/obj/structure/table/glass, -/obj/effect/turf_decal/tile/dark_blue/full, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"TS" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/machinery/door/airlock/vault{ - id_tag = "syndie_ds2_vault" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/vault) -"TT" = ( -/obj/machinery/button/door/directional/west{ - desc = "To keep your hangar away from prying eyes."; - id = "void-be-gone"; - name = "Hangar Blast Door Control"; - req_access = list("syndicate") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"TW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"TX" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem) -"Ua" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/structure/chair/stool/directional/west, -/obj/effect/turf_decal/stripes/red/line{ - dir = 9 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Uc" = ( -/obj/machinery/light/cold/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/reagent_dispensers/wall/peppertank/directional/west, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"Ue" = ( -/obj/item/reagent_containers/cup/bucket/wooden, -/obj/effect/turf_decal/trimline/dark_red/filled/line{ - dir = 5 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Uh" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/table/wood, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/structure/window/reinforced/survival_pod{ - dir = 6 - }, -/obj/item/wallframe/painting, -/obj/item/wallframe/painting{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/flashlight/lamp/green{ - pixel_x = -10 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"Ui" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/rag, -/obj/item/storage/fancy/cigarettes/cigpack_syndicate{ - pixel_x = 3; - pixel_y = 6 - }, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Uj" = ( -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, -/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/machinery/door/airlock/command{ - hackProof = 1; - name = "Bridge" - }, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"Um" = ( -/obj/effect/turf_decal/trimline/dark_green/line{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Un" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 8 - }, -/obj/machinery/light/warm/directional/east, -/obj/item/plate{ - pixel_x = -4 - }, -/obj/effect/spawner/random/food_or_drink/dinner{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/effect/spawner/random/food_or_drink/refreshing_beverage{ - pixel_x = 8; - pixel_y = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Up" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/dark_red/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_red/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/textured_half{ - dir = 1 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"Us" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral) -"Uv" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/structure/lattice, -/turf/template_noop, -/area/template_noop) -"Uz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/cold/directional/east, -/obj/effect/turf_decal/trimline/dark_blue/corner, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"UB" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "ds2bridge" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"UE" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/dark_blue/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"UM" = ( -/obj/structure/table/reinforced, -/obj/item/storage/backpack/duffelbag/syndie/surgery{ - pixel_y = 4 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ - pixel_x = 4 - }, -/obj/item/clothing/suit/apron/surgical{ - pixel_x = -4; - pixel_y = -5 - }, -/obj/item/reagent_containers/spray/cleaner{ - pixel_x = 7; - pixel_y = -9 - }, -/obj/effect/turf_decal/tile/dark_blue/full, -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"UO" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/machinery/reagentgrinder{ - pixel_y = 5 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem) -"UQ" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/machinery/door/poddoor/preopen{ - id = "diner-view" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"UR" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"UT" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 6 - }, -/obj/machinery/light/warm/directional/east, -/obj/machinery/vending/dorms, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"UX" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/window/survival_pod{ - dir = 1; - req_access = list("syndicate_leader") - }, -/obj/structure/table/reinforced/plastitaniumglass, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"UY" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/structure/cable, -/obj/machinery/power/rtg/advanced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Va" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 8 - }, -/obj/machinery/button/door/directional/south{ - desc = "Keep out the Officers."; - id = "smasteratarms"; - name = "Master at Arms' room bolt"; - normaldoorcontrol = 1; - pixel_x = 6; - req_access = list("syndicate_leader"); - specialfunctions = 4 - }, -/obj/machinery/button/door/directional/south{ - desc = "Keep out the Officers."; - id = "smasteratarms"; - name = "Master at Arms' shutters control"; - pixel_x = -6; - req_access = list("syndicate_leader") - }, -/obj/structure/cable, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"Vb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Ve" = ( -/obj/machinery/light/cold/directional/south, -/obj/machinery/processor, -/obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Vf" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "interdynefobo2"; - dir = 4 - }, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Vk" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/machinery/power/shuttle_engine/heater, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/skyrat/interdynefob) -"Vm" = ( -/obj/machinery/light/cold/directional/east, -/obj/effect/turf_decal/siding/dark{ - dir = 6 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Vn" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 5 - }, -/obj/effect/turf_decal/trimline/dark_red/line{ - dir = 5 - }, -/obj/effect/turf_decal/trimline/dark_red/corner{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/turf/open/floor/iron/dark/textured_corner{ - dir = 8 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"Vo" = ( -/obj/machinery/light/cold/directional/west, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/bot, -/obj/machinery/firealarm/directional/west, -/obj/structure/ore_box, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"Vp" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Vu" = ( -/obj/effect/turf_decal/tile/dark_blue/full, -/obj/effect/turf_decal/siding/white, -/obj/machinery/chem_mass_spec, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem) -"Vv" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/violet/hidden{ - dir = 9 - }, -/obj/structure/fluff/broken_canister_frame, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Vw" = ( -/obj/machinery/light/cold/directional/south, -/obj/machinery/grill, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Vy" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/machinery/recharger, -/obj/effect/turf_decal/delivery/red, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/item/restraints/handcuffs{ - pixel_y = -9 - }, -/obj/item/crowbar{ - pixel_y = -13 - }, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"Vz" = ( -/obj/effect/turf_decal/siding/dark/corner{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"VB" = ( -/obj/machinery/hydroponics/constructable, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"VC" = ( -/obj/machinery/camera/directional/north{ - c_tag = "DS-2 Interrogation Room"; - network = list("ds2") - }, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/security/lawyer) -"VE" = ( -/obj/effect/turf_decal/trimline/purple/warning{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"VF" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/red/directional/south, -/obj/item/circuitboard/machine/ore_silo, -/obj/structure/frame/machine{ - anchored = 1; - icon_state = "box_1"; - state = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/vault) -"VJ" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/template_noop) -"VK" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/structure/chair{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 5 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"VM" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"VO" = ( -/obj/structure/weightmachine/weightlifter, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark/line{ - dir = 1 - }, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness) -"VP" = ( -/obj/machinery/power/shuttle_engine/large, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/light/floor{ - use_power = 0 - }, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/skyrat/interdynefob) -"VR" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible, -/obj/machinery/meter, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"VT" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"VX" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/machinery/door/poddoor/shutters{ - dir = 8; - id = "ds2corpliaison"; - name = "Corporate Liaison Shutters" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl) -"VY" = ( -/obj/effect/turf_decal/stripes/red/corner, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/machinery/button/door/directional/east{ - desc = "To keep pesky prisoners obedient."; - id = "gaybabyjail"; - name = "Isolation Cell Control"; - req_access = list("syndicate_leader") - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Wf" = ( -/obj/effect/turf_decal/bot, -/obj/item/storage/toolbox/syndicate{ - pixel_y = 5 - }, -/obj/item/circuitboard/machine/rtg/advanced{ - pixel_y = -2 - }, -/obj/item/circuitboard/machine/rtg/advanced, -/obj/item/circuitboard/machine/rtg/advanced{ - pixel_y = 2 - }, -/obj/item/circuitboard/machine/rtg/advanced{ - pixel_y = 5 - }, -/obj/effect/spawner/random/techstorage/data_disk{ - pixel_x = -5 - }, -/obj/item/storage/box/stockparts/deluxe{ - pixel_x = 3; - pixel_y = -4 - }, -/obj/structure/closet/crate/engineering, -/obj/item/t_scanner, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"Wk" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "interdynefobplasma"; - dir = 4 - }, -/turf/open/floor/engine/plasma, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Wm" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/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, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"Wn" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/obj/structure/chair/sofa/corp/right{ - color = "#DE3A3A" - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"Wq" = ( -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"Ws" = ( -/obj/structure/table, -/obj/machinery/microwave{ - pixel_y = 5 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 5 - }, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Wt" = ( -/obj/structure/bed/medical{ - dir = 4 - }, -/obj/item/bedsheet/medical, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"Wu" = ( -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/leader, -/obj/effect/turf_decal/delivery/red, -/obj/machinery/door/airlock/security/old/glass{ - name = "Long-Term Brig" - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "DS2permabrig" - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"Wv" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/effect/turf_decal/delivery/red, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/window/survival_pod{ - dir = 8; - name = "Isolation Cell"; - req_access = list("syndicate_leader") - }, -/obj/machinery/door/window/survival_pod{ - dir = 4; - name = "Isolation Cell"; - req_access = list("syndicate_leader") - }, -/obj/machinery/door/poddoor/preopen{ - id = "gaybabyjail" - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Ww" = ( -/obj/effect/turf_decal/box/red/corners{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar) -"Wx" = ( -/obj/machinery/light/warm/directional/west, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/structure/sign/warning/no_smoking/directional/west, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Wz" = ( -/obj/effect/turf_decal/trimline/purple/filled/line, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/iron/dark/side, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"WA" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood/corner, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"WC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/catwalk_floor/iron_dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"WE" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/machinery/door/poddoor/preopen{ - id = "dorms-view" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"WG" = ( -/obj/effect/turf_decal/siding/dark/corner, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 8 - }, -/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/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"WH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"WL" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"WM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/obj/effect/turf_decal/vg_decals/atmos/air, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"WN" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/effect/turf_decal/trimline/dark_red/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_red/line{ - dir = 5 - }, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ - dir = 1 - }, -/obj/structure/cable, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/item/pen{ - pixel_x = -2; - pixel_y = 5 - }, -/turf/open/floor/iron/dark/textured_half, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"WS" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"WW" = ( -/obj/machinery/seed_extractor, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"WZ" = ( -/obj/effect/turf_decal/siding/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/warning{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/yellow/line{ - dir = 8 - }, -/obj/structure/closet/secure_closet/interdynefob/electrical_supplies, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Xb" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Xf" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/green/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/machinery/door/airlock/hatch{ - id_tag = "DS2incineratorHatch"; - name = "Incinerator Hatch" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/structure/holosign/barrier/atmos/sturdy, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Xg" = ( -/obj/effect/turf_decal/stripes/red/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Xh" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"Xk" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/bookcase/random/fiction, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge) -"Xl" = ( -/obj/machinery/vending/imported/yangyu, -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 8 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Xm" = ( -/obj/structure/chair, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"Xn" = ( -/obj/structure/table/reinforced, -/obj/item/grenade/chem_grenade/smart_metal_foam{ - pixel_y = 8 - }, -/obj/item/grenade/chem_grenade/smart_metal_foam{ - pixel_x = 4; - pixel_y = 5 - }, -/obj/item/grenade/chem_grenade/smart_metal_foam{ - pixel_x = -5; - pixel_y = 4 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/eva) -"Xq" = ( -/obj/effect/turf_decal/trimline/yellow/line, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Xr" = ( -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/siding/thinplating/end{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/open/floor/iron/small, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Xt" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "ds2conveyor" - }, -/obj/machinery/light/red/directional/south, -/obj/structure/plasticflaps, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"Xx" = ( -/obj/structure/table, -/obj/machinery/reagentgrinder{ - pixel_x = 7; - pixel_y = 4 - }, -/obj/structure/sign/poster/contraband/moffuchis_pizza/directional/east, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/iron/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Xy" = ( -/obj/structure/cable, -/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/kitchen{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Xz" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/machinery/vending/hydronutrients, -/turf/open/floor/iron/white/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"XA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/yellow{ - dir = 10 - }, -/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate/enginetech{ - dir = 8 - }, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"XC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/closet/crate/solarpanel_small, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_half{ - dir = 4 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"XF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"XG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison) -"XI" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral) -"XN" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/effect/turf_decal/trimline/dark_red/line, -/obj/effect/turf_decal/trimline/dark_red/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner, -/obj/effect/turf_decal/trimline/dark_red/mid_joiner{ - dir = 1 - }, -/obj/machinery/computer/monitor{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/syndicate_access, -/turf/open/floor/iron/dark/textured_half, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"XR" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/machinery/light/cold/directional/west, -/obj/structure/disposalpipe/junction/flip{ - dir = 2 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"XV" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 8 - }, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"XX" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"XY" = ( -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/syndicate_access, -/obj/structure/cable, -/obj/structure/table/reinforced, -/obj/machinery/reagentgrinder{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/storage/box/beakers{ - pixel_x = 8; - pixel_y = 6 - }, -/obj/item/storage/box/beakers{ - pixel_x = 8 - }, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics) -"Ya" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_red/line, -/obj/structure/sign/flag/syndicate/directional/south{ - pixel_x = -16 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/machinery/coffeemaker, -/turf/open/floor/iron/dark/textured_half, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"Yb" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/light/floor{ - use_power = 0 - }, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/skyrat/interdynefob) -"Yd" = ( -/obj/machinery/power/turbine/turbine_outlet, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/engine, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"Ye" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/item/paper_bin{ - pixel_y = 4 - }, -/obj/item/pen{ - pixel_y = 4 - }, -/obj/item/flashlight/lamp{ - pixel_x = -6 - }, -/obj/structure/table/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/skyrat/interdynefob/security/lawyer) -"Yn" = ( -/obj/effect/turf_decal/trimline/dark_green/line{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Yp" = ( -/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/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"Yz" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/light/warm/directional/west, -/obj/machinery/skill_station, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"YC" = ( -/obj/machinery/air_sensor{ - chamber_id = "syndieincinerator" - }, -/obj/machinery/atmospherics/pipe/smart/simple/dark/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/green/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/engine, -/area/ruin/space/has_grav/skyrat/interdynefob/engineering) -"YD" = ( -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem) -"YG" = ( -/obj/effect/mob_spawn/ghost_role/human/ds2/syndicate_command/admiral, -/turf/open/floor/carpet/red, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral) -"YH" = ( -/obj/machinery/door/airlock/silver{ - name = "Public Showers" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness) -"YI" = ( -/obj/effect/turf_decal/stripes/red/corner{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/skyrat/interdynefob/security) -"YK" = ( -/obj/item/circuitboard/computer/mech_bay_power_console, -/obj/effect/turf_decal/trimline/dark_red/filled/line, -/obj/structure/frame/computer, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"YN" = ( -/obj/machinery/vending/wardrobe/syndie_wardrobe, -/turf/open/floor/iron/dark/smooth_large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"YQ" = ( -/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/ruin/space/has_grav/skyrat/interdynefob/halls) -"YR" = ( -/obj/structure/table, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 4 - }, -/obj/machinery/camera/xray/directional/west{ - c_tag = "DS-2 Research"; - network = list("ds2") - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/research) -"YU" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/structure/closet/secure_closet/armory_kiboko_but_evil, -/obj/structure/reagent_dispensers/wall/peppertank/directional/west, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory) -"Zd" = ( -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/siding/thinplating/end{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/open/floor/iron/small, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Zg" = ( -/obj/machinery/suit_storage_unit/syndicate/softsuit, -/turf/open/floor/iron/dark/small, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/eva) -"Zh" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "ds2conveyor" - }, -/obj/machinery/door/poddoor{ - id = "ds2cargo" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"Zi" = ( -/obj/effect/turf_decal/trimline/purple/corner, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"Zo" = ( -/obj/effect/turf_decal/tile/yellow, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"Zp" = ( -/obj/machinery/iv_drip, -/obj/machinery/duct, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"Zq" = ( -/obj/structure/sign/flag/syndicate/directional/south, -/obj/machinery/light/warm/directional/south, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral) -"Zs" = ( -/obj/item/bedsheet/medical, -/obj/structure/bed/medical{ - dir = 4 - }, -/turf/open/floor/iron/white/small, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"Zt" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 8 - }, -/obj/structure/table, -/obj/effect/spawner/random/food_or_drink/refreshing_beverage{ - pixel_x = -7; - pixel_y = 8 - }, -/obj/effect/spawner/random/food_or_drink/salad{ - pixel_y = 3 - }, -/obj/machinery/light/warm/directional/north, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner) -"Zz" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/grunge{ - id_tag = "TESRedguard"; - name = "Dormitory" - }, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"ZA" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 1 - }, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/effect/turf_decal/trimline/dark_red/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_red/line{ - dir = 6 - }, -/obj/item/toy/mecha/mauler{ - pixel_y = 16 - }, -/obj/item/toy/mecha/deathripley{ - pixel_x = -16; - pixel_y = 8 - }, -/obj/item/toy/figure/syndie, -/turf/open/floor/iron/dark/smooth_corner{ - dir = 1 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge) -"ZB" = ( -/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/diagonal, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"ZC" = ( -/obj/effect/turf_decal/stripes/red/line, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/halls) -"ZE" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/light/red/directional/west, -/obj/machinery/turretid{ - ailock = 1; - control_area = "/area/ruin/space/has_grav/skyrat/interdynefob/bridge/vault"; - dir = 1; - icon_state = "control_kill"; - lethal = 1; - name = "DS2 turret controls"; - pixel_x = -30; - req_access = list("syndicate") - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/vault) -"ZF" = ( -/obj/structure/table, -/obj/structure/bedsheetbin, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark/corner{ - dir = 4 - }, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness) -"ZH" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ - pixel_x = 4 - }, -/obj/machinery/smartfridge/organ, -/obj/effect/turf_decal/tile/dark_blue/full, -/obj/effect/turf_decal/siding/white/corner{ - dir = 8 - }, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay) -"ZP" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 6 - }, -/obj/item/kirbyplants/organic/plant22, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms) -"ZQ" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/brown/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/skyrat/interdynefob/cargo) -"ZS" = ( -/obj/machinery/chem_dispenser/fullupgrade, -/obj/effect/turf_decal/tile/dark_blue/full, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem) -"ZT" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem) -"ZY" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/skyrat/interdynefob) - -(1,1,1) = {" -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -mX -kF -kF -kF -kF -kF -kF -kF -kF -kF -kF -kF -kF -kF -kx -kx -kx -kF -kF -kF -kF -kF -mX -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -"} -(2,1,1) = {" -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -mX -kF -rH -GL -nS -fy -UR -Xm -Jl -iV -tS -uN -uN -jZ -kF -kF -kF -kF -kF -ve -QV -uc -KM -kF -mX -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -"} -(3,1,1) = {" -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -EJ -kx -NB -NB -kF -la -gA -Vp -Ni -Tf -UR -tR -RZ -vc -kM -Vp -Vp -Vp -xx -rc -rc -rc -yh -ve -bP -Al -ah -Se -kF -NB -NB -NB -NB -kx -EJ -wg -wg -wg -wg -wg -"} -(4,1,1) = {" -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -qz -QX -kF -Oe -kQ -kQ -kQ -wE -Dh -bs -kQ -kQ -kQ -kQ -kQ -kQ -En -iO -VT -Ir -Du -ve -CT -JA -Ua -Ve -kF -Vk -Oi -uq -wg -wg -wg -wg -wg -wg -wg -wg -"} -(5,1,1) = {" -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -IC -zI -QX -kF -Qx -Po -kB -gi -EZ -UR -VY -Gi -hP -sD -tn -mP -Dr -Fo -Ru -Ru -Ru -uL -RP -XG -XG -iM -Hu -kF -Vk -Oi -Yb -wg -wg -wg -wg -wg -wg -wg -wg -"} -(6,1,1) = {" -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -Nc -Oi -QX -kF -pX -uS -kF -Py -dv -kF -kF -Wv -kF -kF -ra -kF -kF -hC -Lw -OT -Vb -hA -GD -Ar -LP -yR -Jf -kF -Vk -Oi -Oi -GK -wg -wg -wg -wg -wg -wg -wg -"} -(7,1,1) = {" -wg -wg -wg -wg -xr -IQ -IQ -IQ -Kf -Kf -Kf -Kf -WE -WE -Kf -Kf -Kf -kF -Dz -Gh -kF -bx -xZ -kF -av -sh -kF -Ds -Xb -bu -kF -kF -gj -kF -Ae -kF -kF -fe -LP -Oy -BL -kF -Vk -Oi -Oi -Yb -wg -wg -wg -wg -wg -wg -wg -"} -(8,1,1) = {" -wg -EJ -kx -NB -NB -tg -Cj -rs -Kf -iR -eo -Kf -Pe -Ne -Kf -Az -iR -kF -yH -NS -kF -ha -TH -kF -Ue -wc -kF -Qi -qn -vF -kF -aa -Fb -BN -PP -lJ -kF -CJ -dI -ct -lb -kF -Og -Oi -Oi -ZY -wg -wg -wg -wg -wg -wg -wg -"} -(9,1,1) = {" -wg -wg -wg -wg -NB -Fw -FH -dR -Kf -pt -eW -Zz -KY -dh -iK -gb -iZ -uV -uV -uV -uV -Xh -Xh -Xh -Xh -Xh -Xh -Xh -Xh -Xh -Xh -yL -hz -GO -hs -sl -PX -PX -PX -PX -PX -PX -PX -PX -Vk -Oi -VP -wg -wg -wg -wg -wg -wg -"} -(10,1,1) = {" -wg -wg -wg -xr -NB -IQ -YH -IQ -Kf -sc -tt -Kf -xH -UT -Kf -DE -tt -uV -it -QH -Re -Xh -FP -wz -yb -yd -jd -zn -lt -Ov -Xh -Xh -pB -ms -Wu -Xh -PX -Lv -bS -Hc -Sp -YU -EC -PX -Vk -Oi -ZY -wg -wg -wg -wg -wg -wg -"} -(11,1,1) = {" -wg -wg -xr -NB -NB -ZF -DK -PY -Kf -Kf -Kf -Kf -NG -Kf -Kf -Kf -Kf -uV -kb -Ye -Pf -Xh -vK -xX -rz -Lx -eY -rr -rr -Ge -jO -CC -nT -xc -vp -ni -tP -mA -uo -uo -uo -uo -LY -oG -PX -NB -NB -xr -wg -wg -wg -wg -wg -"} -(12,1,1) = {" -wg -wg -dT -QX -NB -VO -il -ny -Kf -wj -do -nn -JE -Kf -qs -qc -QO -uV -xy -AK -AW -Xh -aY -JD -Va -Xh -bq -NP -OC -Fh -SH -WS -rl -rr -rl -Fh -Fy -bk -Lq -Lq -Lq -Ed -Lq -pL -PX -NB -NB -NB -NB -NB -kx -EJ -wg -"} -(13,1,1) = {" -wg -wg -cI -QX -NB -MQ -il -AX -Kf -EP -Nm -DB -Lf -ui -km -eU -iR -uV -VC -Ii -mj -Xh -vr -qN -wN -Xh -Rp -Wq -tf -YI -Rf -cr -oz -pf -Xh -Xh -PX -AG -IU -oR -ac -Bu -qw -gy -PX -NB -Vk -Oi -uq -wg -wg -wg -wg -"} -(14,1,1) = {" -wg -NB -NB -NB -NB -rI -vD -qY -Kf -YN -rj -DJ -ZP -Kf -Kf -Kf -Kf -uV -eE -BV -sL -Xh -qj -ie -or -Xh -oS -gK -pW -NY -Rf -by -rl -xu -aH -rY -Tt -Tt -Tt -Tt -Tt -Tt -Tt -Tt -Tt -NB -Vk -Oi -Yb -wg -wg -wg -wg -"} -(15,1,1) = {" -wg -Nc -zI -QX -NB -EL -NO -EL -Kf -cU -cU -ok -cU -Kf -GG -ps -GG -uV -tY -cL -tY -Xh -Fk -Fk -Fk -Xh -Xh -Xh -Xh -Xh -Xh -vT -zN -xu -Kb -Ct -Tt -Bb -iB -Jz -Eb -ON -Jz -Ng -Lg -NB -Vk -Oi -Oi -GK -wg -wg -wg -"} -(16,1,1) = {" -wg -IC -Oi -QX -NB -on -Fj -on -yP -sO -NW -HE -Lz -XR -Lz -Lz -Lz -yn -oO -og -ub -BS -Lz -Lz -Lz -yn -Lz -ub -Lz -kf -Dk -ho -pi -xu -VK -MK -Tt -Vf -Fl -Jz -dy -NC -Jz -Wk -vU -NB -Vk -Oi -Oi -Yb -wg -wg -wg -"} -(17,1,1) = {" -wg -wg -qz -QX -NB -jf -Fj -Fj -Fj -Fj -Fj -zb -Fj -zb -vM -Lo -Ih -Lo -Sj -Fj -Fj -wp -Uz -AI -mx -mx -mx -aF -lU -zp -UX -Fe -tf -PR -Tt -Tt -Tt -oi -aZ -Tt -Fc -Jz -Tt -Si -Tt -NB -Vk -Oi -Oi -ZY -wg -wg -wg -"} -(18,1,1) = {" -wg -Mt -NB -NB -NB -Qp -aL -Rh -Op -cP -nd -pn -NT -Zd -RX -VX -kN -VX -Rt -Rt -Rt -Rt -Rt -ya -Rt -oC -oC -Rt -JF -xp -ms -Ha -ms -gF -Tt -zL -dS -QF -tN -nL -Vv -Tx -Wx -Pn -Tt -mL -Oi -Oi -GK -wg -wg -wg -wg -"} -(19,1,1) = {" -wg -wg -wg -xr -NB -cm -va -HH -HH -Bk -UB -Uj -UB -RX -RX -jp -QW -zD -Rt -bR -jb -uW -QY -hH -hT -FA -Ox -oC -So -zp -ms -zl -lp -BO -Tt -he -aX -nN -em -aN -ke -xB -ke -mg -Tt -Vk -Oi -Oi -Yb -wg -wg -wg -wg -"} -(20,1,1) = {" -wg -wg -wg -wg -wg -iE -wg -wg -wg -Bk -MZ -Hq -sM -RX -FD -RQ -jD -LQ -Rt -vg -uu -uu -Cb -Aw -Mn -yX -iF -oC -So -ZC -KN -NQ -Be -XF -Tt -SI -rb -hn -uD -uD -od -iS -tA -TI -Tt -Vk -Oi -Oi -ZY -wg -wg -wg -wg -"} -(21,1,1) = {" -wg -wg -wg -wg -wg -iE -wg -wg -aT -Bk -lu -fa -dO -ak -hi -JL -JL -LK -Rt -ZH -UM -tL -ye -Mo -Mn -lW -ao -Rt -yu -bA -Tt -Tt -Tt -Tt -Tt -WM -ka -zy -hG -Ez -VR -Sq -zx -ez -Tt -Vk -Oi -VP -wg -wg -wg -wg -wg -"} -(22,1,1) = {" -wg -wg -wg -wg -EJ -kg -kx -Bk -Bk -XN -AV -fa -of -RX -RX -lg -Qs -vv -Rt -zt -Ao -MG -kH -Mo -PV -TG -IA -Rt -So -tq -Jz -WZ -TL -WZ -Tt -Tt -rG -Tt -Jz -Jz -Jz -Tt -Cn -Xf -Tt -Vk -Oi -ZY -wg -wg -wg -wg -wg -"} -(23,1,1) = {" -wg -wg -wg -wg -wg -iE -wg -UB -qI -lD -AV -yI -Vn -AC -RX -Cm -zH -uB -Rt -MB -yU -yU -fh -Cp -To -hH -gB -Rt -hf -tq -Jz -zM -PO -rZ -Oc -Pq -sj -kd -Io -OK -OD -Cn -Qb -YC -Tt -Tt -Tt -Tt -vS -kx -EJ -wg -wg -"} -(24,1,1) = {" -wg -wg -wg -wg -wg -iE -wg -UB -Av -WN -OP -sy -sa -Ya -RX -dC -cG -IN -Rt -TQ -Zs -Wt -li -EQ -Yp -Yp -ZB -md -dZ -vE -Tt -CX -Ce -Ll -lZ -eT -Fa -Tm -gk -FC -LA -Cn -wS -gN -hx -Gk -Yd -pr -kx -wg -wg -wg -wg -"} -(25,1,1) = {" -wg -wg -wg -wg -VJ -Bs -kx -UB -ou -dD -wJ -cj -wu -Sf -EY -EY -EY -EY -Rt -Rt -Rt -Rt -Rt -hq -QN -fd -hH -oC -dZ -dz -gx -NN -KS -HZ -mC -nA -JB -eK -UY -Qe -TM -Tt -Cn -Cn -Tt -NA -Tt -Tt -kx -wg -wg -wg -wg -"} -(26,1,1) = {" -wg -wg -wg -wg -wg -iE -wg -UB -Sx -DF -SR -jC -Kd -eD -EY -At -bt -jr -Rt -nz -Zp -cY -cu -Cd -gW -Qz -JR -By -cn -tk -Tt -LV -XA -ff -nK -EB -Hn -qu -hZ -Pi -Kz -kT -jP -bW -gg -JZ -ze -be -Uv -wg -wg -wg -wg -"} -(27,1,1) = {" -wg -wg -wg -wg -wg -iE -wg -UB -Ht -Pt -AV -Ke -Ob -ZA -EY -YG -CH -Le -Rt -um -ot -nR -Rt -tU -Dy -io -UO -Jd -UE -Xq -Jz -eA -eX -Vz -Im -dg -Px -kt -pb -ET -Bm -RE -tl -vR -Tt -Tt -Tt -Tt -vS -kx -EJ -wg -wg -"} -(28,1,1) = {" -wg -wg -wg -wg -EJ -kg -kx -Bk -Bk -mY -JS -Ke -of -EY -EY -vx -IZ -XI -Rt -Rt -Rt -Rt -Rt -qH -Vu -iX -oc -Jd -fS -Xq -Jz -dN -HF -Rj -Tt -Tt -Tt -Tt -Tt -Tt -Tt -Tt -Tt -Tt -Tt -Vk -Oi -uq -wg -wg -wg -wg -wg -"} -(29,1,1) = {" -wg -wg -wg -wg -wg -iE -wg -wg -aT -Bk -VM -Ke -dO -dQ -LG -Us -Us -Zq -vl -uE -ZE -eV -vl -cA -ib -YD -ZS -Jd -yu -Jy -my -my -my -my -my -CF -mD -fQ -cW -my -Xn -qE -hg -Zg -fz -Vk -Oi -Yb -wg -wg -wg -wg -wg -"} -(30,1,1) = {" -wg -wg -wg -wg -wg -iE -wg -wg -wg -Bk -fE -Up -yS -EY -dF -jB -SY -hh -vl -Bi -sK -VF -vl -hE -Ia -ZT -HA -TX -So -Xg -au -TT -Uc -tD -jm -Bv -cy -rB -eJ -my -KJ -vq -rg -EW -fz -Vk -Oi -Oi -GK -wg -wg -wg -wg -"} -(31,1,1) = {" -wg -wg -wg -xr -NB -cm -va -HH -HH -Bk -UB -Nk -UB -EY -EY -NX -GV -MC -vl -RT -hy -ue -vl -TA -ow -FO -sV -TX -So -Dv -jm -MT -bj -SZ -jm -BG -FG -mJ -cW -my -MH -oE -Zg -Zg -fz -Vk -Oi -Oi -Yb -wg -wg -wg -wg -"} -(32,1,1) = {" -wg -nO -NB -NB -NB -Ec -zd -oZ -Yz -mO -Af -Cq -zA -Xr -EY -ME -ME -ME -vl -vl -TS -vl -vl -Jd -Jd -TX -TX -Jd -yi -pa -my -Vy -mH -pP -my -my -KC -fW -my -my -fz -DI -hR -hR -fz -Ci -Oi -Oi -ZY -wg -wg -wg -wg -"} -(33,1,1) = {" -wg -wg -dT -QX -NB -fo -TW -TW -YQ -Fj -Fj -Fj -Fj -zb -wH -Fj -Fj -Fj -Rm -Fj -lo -vQ -yv -iy -az -az -az -jc -JN -qt -Sb -Wm -zK -NL -dr -Qw -Tu -ZQ -PM -Vo -xb -sW -hF -oq -my -my -Vk -Oi -Oi -GK -wg -wg -wg -"} -(34,1,1) = {" -wg -IC -zI -QX -NB -Sw -sH -sH -sH -nH -qS -Rc -ov -QC -qv -Um -aR -Yn -Kj -OF -OU -Zi -ag -fB -zS -fB -fB -Qh -VE -rk -jw -kZ -FZ -Sy -XX -go -FZ -FZ -FZ -RY -FZ -FZ -FZ -Em -my -my -Vk -Oi -Oi -Yb -wg -wg -wg -"} -(35,1,1) = {" -wg -Nc -Oi -QX -NB -ek -Wn -Sc -Xk -Gg -wh -lO -lO -aP -Iw -Iw -qC -Iw -Iw -lO -Hz -Hz -Fm -Hz -Hz -Fz -Fz -Fz -xG -Hz -my -ih -vA -qO -ds -rd -Zo -Gb -IV -RY -WH -WH -WH -De -hQ -my -Vk -Oi -Oi -ZY -wg -wg -wg -"} -(36,1,1) = {" -wg -NB -NB -NB -NB -da -Hb -mK -Rx -nI -jt -lO -XY -bd -mi -Xz -PS -VB -vO -vO -Hz -tm -RH -zU -YR -qW -ij -zg -Mg -Sv -my -gG -Kk -Ej -CE -HK -jm -DA -ae -ca -Kh -GR -IM -FZ -QA -my -Vk -Oi -VP -wg -wg -wg -wg -"} -(37,1,1) = {" -wg -Nc -zI -QX -NB -ek -GY -Uh -Ey -MM -hJ -lO -BC -QQ -cD -cD -WG -GU -GU -at -Hz -QM -pu -fA -fA -cz -WC -WC -MP -ix -my -An -tG -my -NR -HV -jm -XC -ld -ca -iw -GE -cE -FZ -Wf -my -Vk -Oi -ZY -wg -wg -wg -wg -"} -(38,1,1) = {" -wg -IC -Oi -QX -NB -Rd -ri -sB -GS -Gt -JI -lO -uh -QQ -PW -Fx -we -VB -vO -vO -Hz -Nl -Jv -jl -sP -SO -IH -pl -cO -rx -my -JC -Dw -my -LM -Zh -my -cq -KQ -QK -Au -KV -rD -Cy -GH -my -NB -NB -NB -NB -kx -EJ -wg -"} -(39,1,1) = {" -wg -Nc -zI -QX -bw -bw -oV -bw -pO -gO -pO -lO -lO -Qo -mT -WW -LF -VB -vO -vO -Hz -LB -Gz -Dm -qK -Ok -bX -Hz -Hz -Hz -my -rN -tG -my -ax -Xt -my -my -tG -ml -my -zh -my -my -my -my -NB -xr -wg -wg -wg -wg -wg -"} -(40,1,1) = {" -wg -IC -Oi -QX -bw -rU -me -bw -iY -FY -Qa -Xl -Iw -QQ -Tw -uA -FJ -GU -GU -at -Hz -PA -HI -oK -Gx -FB -Ta -Hz -xQ -eH -Tp -Tp -iz -TB -ba -Tp -Tp -Ww -xQ -QE -my -cb -my -Vk -Oi -uq -wg -wg -wg -wg -wg -wg -wg -"} -(41,1,1) = {" -wg -wg -dT -QX -bw -LT -Vm -bw -Zt -FY -Qa -aB -Iw -uf -DH -DH -dn -eO -kI -vO -Hz -KT -Ku -bo -vo -nG -wk -Hz -eH -HD -QG -nm -nm -nm -nm -nm -fc -Nb -Ww -AR -my -my -my -Vk -Oi -Yb -wg -wg -wg -wg -wg -wg -wg -"} -(42,1,1) = {" -wg -wg -cI -QX -bw -bw -bw -bw -ch -FY -Qa -qR -lO -No -kD -DL -Rb -lO -lO -lO -Hz -Hz -tC -Fz -Fz -Hz -Hz -aW -tQ -QG -nm -nm -nm -nm -nm -nm -nm -fc -st -Bw -Mt -Ax -HQ -Oi -Oi -GK -wg -wg -wg -wg -wg -wg -wg -"} -(43,1,1) = {" -wg -wg -xr -NB -bw -zV -Mw -yy -WA -pz -Rr -Rr -tZ -jT -WL -WL -Rz -ep -oT -ee -Hz -YK -vB -SB -gw -pk -Hz -zc -tQ -nm -nm -nm -nm -nm -nm -nm -nm -nm -st -jE -lI -Ax -Vk -Oi -Oi -Yb -wg -wg -wg -wg -wg -wg -wg -"} -(44,1,1) = {" -wg -wg -wg -xr -bw -XV -Qa -Qa -Fi -Nr -Mk -kG -AZ -jj -Cf -Cf -Gl -MF -Kg -lE -Hz -aj -wm -eF -fl -bY -Hz -Ns -tQ -nm -nm -nm -nm -nm -nm -nm -nm -nm -jN -CV -GX -Ax -Vk -Oi -Oi -ZY -wg -wg -wg -wg -wg -wg -wg -"} -(45,1,1) = {" -wg -wg -wg -wg -bw -zV -rM -EU -Ch -kc -Hw -Hw -ro -eP -zq -Xy -ob -DS -xS -PU -Hz -pe -cS -lF -Aa -wn -Hz -py -tQ -mQ -nm -nm -nm -nm -nm -nm -nm -Ra -st -CS -xd -Ax -Vk -Oi -VP -wg -wg -wg -wg -wg -wg -wg -wg -"} -(46,1,1) = {" -wg -EJ -kx -Mt -bw -zV -Un -QB -pI -xk -Od -Ui -pO -PB -Cf -tT -SG -SX -KG -SN -Hz -vd -mr -Dt -fw -Wz -Hz -Lb -wt -RV -mQ -nm -nm -nm -nm -nm -Ra -KI -jR -tE -Gd -Ax -Vk -Oi -ZY -wg -wg -wg -wg -wg -wg -wg -wg -"} -(47,1,1) = {" -wg -wg -wg -wg -gn -UQ -UQ -UQ -bw -bw -bw -bw -bw -sZ -Cf -Cf -aC -Cf -Cf -Vw -Hz -jJ -lY -jW -qo -JK -Hz -zc -xQ -wt -sr -sr -sr -sr -sr -sr -sr -jR -xQ -Ts -Ax -Ax -NB -NB -NB -NB -kx -EJ -wg -wg -wg -wg -wg -"} -(48,1,1) = {" -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -bw -Ws -iP -Xx -Ja -Hh -Bj -wV -Hz -Hz -Hz -Hz -Hz -Hz -Hz -aW -hM -hM -hM -hM -hM -hM -hM -hM -hM -hM -hM -Mt -Ax -Ay -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -"} -(49,1,1) = {" -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -gv -bw -bw -bw -bw -bw -bw -bw -Hz -kx -kx -kx -wg -wg -wg -kx -wg -kx -wg -EJ -ss -aJ -zv -EJ -wg -kx -wg -kx -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -"} -(50,1,1) = {" -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -EJ -wg -kx -wg -wg -wg -wg -wg -wg -wg -kx -wg -EJ -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -"} -(51,1,1) = {" -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -kx -wg -wg -wg -wg -wg -wg -wg -kx -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -"} -(52,1,1) = {" -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -EJ -wg -wg -wg -wg -wg -wg -wg -EJ -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -"} diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/scrapheap.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/scrapheap.dmm deleted file mode 100644 index 3f65766b5affa8..00000000000000 --- a/_maps/RandomRuins/SpaceRuins/skyrat/scrapheap.dmm +++ /dev/null @@ -1,3006 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/obj/machinery/light/red/directional/south, -/obj/machinery/smartfridge/chemistry/preloaded, -/turf/open/floor/iron/white/textured_corner{ - dir = 4 - }, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"ah" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"aq" = ( -/obj/machinery/chem_master, -/turf/open/floor/iron/white/smooth_half, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"ax" = ( -/obj/machinery/light/red/directional/south, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"bi" = ( -/mob/living/simple_animal/hostile/zombie/nocorpse, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"bn" = ( -/obj/machinery/light/red/directional/south, -/turf/open/floor/wood, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"bC" = ( -/obj/structure/toilet{ - dir = 4 - }, -/obj/machinery/door/window{ - dir = 4 - }, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"bP" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"cf" = ( -/obj/machinery/light/small/red/directional/west, -/mob/living/simple_animal/hostile/zombie, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"cm" = ( -/obj/machinery/light/red/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"cp" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"cx" = ( -/obj/machinery/light/broken/directional/north, -/obj/machinery/suit_storage_unit/open, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"cA" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"cE" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/mob_spawn/corpse/human/cargo_tech, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"cI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/brown/filled/end{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"cY" = ( -/obj/machinery/light/red/directional/south, -/obj/structure/closet/l3closet, -/turf/open/floor/iron/white/textured_corner{ - dir = 1 - }, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"db" = ( -/obj/machinery/light/broken/directional/east, -/mob/living/simple_animal/hostile/zombie, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"dd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/tank_holder, -/obj/effect/turf_decal/trimline/blue/filled/corner, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"dk" = ( -/obj/machinery/door/airlock/command, -/obj/effect/mapping_helpers/airlock/abandoned, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"dl" = ( -/obj/machinery/suit_storage_unit/open, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"dp" = ( -/obj/machinery/light/red/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"dw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/effect/spawner/random/engineering/toolbox, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"dP" = ( -/obj/machinery/light/red/directional/south, -/obj/machinery/computer/crew{ - dir = 1 - }, -/turf/open/floor/iron/white/smooth_half, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"dQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/gibs/up, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"dX" = ( -/obj/machinery/light/red/directional/east, -/obj/structure/table/reinforced, -/obj/item/flashlight/seclite, -/turf/open/floor/iron/dark/side{ - dir = 6 - }, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"eK" = ( -/obj/structure/closet/wardrobe/pjs, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"eL" = ( -/obj/effect/turf_decal/trimline/blue/filled/corner, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"eY" = ( -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"eZ" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/zombie/nocorpse, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"fa" = ( -/obj/effect/mob_spawn/corpse/human/syndicatesoldier, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"ff" = ( -/turf/closed/wall/mineral/titanium/survival, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"fr" = ( -/obj/machinery/power/shuttle_engine/large{ - dir = 8 - }, -/turf/template_noop, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"ft" = ( -/obj/machinery/power/smes, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"fw" = ( -/turf/template_noop, -/area/template_noop) -"fU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/brown/filled/corner, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"ga" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/comfy/shuttle, -/obj/effect/turf_decal/trimline/blue/filled/line, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"gd" = ( -/obj/structure/closet/crate/secure/science, -/obj/effect/turf_decal/bot, -/obj/item/disk/design_disk/bepis, -/obj/item/disk/design_disk/bepis, -/obj/item/disk/design_disk/bepis, -/obj/effect/decal/cleanable/dirt, -/obj/item/raw_anomaly_core/random, -/obj/item/raw_anomaly_core/random, -/obj/item/raw_anomaly_core/random, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"gm" = ( -/obj/machinery/light/small/red/directional/south, -/mob/living/simple_animal/hostile/zombie/nocorpse, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"gr" = ( -/obj/structure/table, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"gA" = ( -/obj/machinery/chem_heater, -/turf/open/floor/iron/white/smooth_half, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"gG" = ( -/obj/structure/closet/cabinet, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/wood, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"gL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/window{ - dir = 8; - req_access = list("maint_tunnels") - }, -/obj/effect/turf_decal/trimline/brown/filled/end{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"gX" = ( -/obj/structure/closet/crate/medical, -/obj/effect/turf_decal/bot, -/obj/effect/spawner/random/medical/medkit, -/obj/effect/spawner/random/medical/medkit, -/obj/effect/spawner/random/medical/medkit_rare, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"hc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/trash/grime, -/obj/effect/turf_decal/trimline/blue/filled/line, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"hz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/comfy/black{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"hC" = ( -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/plasteel/twenty, -/obj/structure/closet/crate/engineering, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"hD" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"hN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/obj/effect/mob_spawn/corpse/human/cargo_tech, -/obj/effect/turf_decal/trimline/brown/filled/corner, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"hU" = ( -/mob/living/simple_animal/hostile/zombie, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"iy" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"iB" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"iH" = ( -/obj/effect/spawner/random/trash/graffiti, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"iM" = ( -/obj/machinery/computer, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"iR" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"iT" = ( -/obj/structure/table, -/obj/item/disk/design_disk/bepis, -/obj/effect/spawner/random/medical/surgery_tool_advanced, -/obj/effect/spawner/random/medical/surgery_tool_advanced, -/turf/open/floor/iron/white/smooth_half, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"iU" = ( -/mob/living/simple_animal/hostile/zombie, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"jr" = ( -/obj/machinery/computer{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"jt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"jM" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"kc" = ( -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"kn" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/zombie/cheesezombie, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"kA" = ( -/obj/machinery/power/shuttle_engine/propulsion{ - dir = 8 - }, -/turf/template_noop, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"kH" = ( -/obj/structure/closet/crate/secure/plasma, -/obj/effect/turf_decal/bot, -/obj/item/stack/sheet/mineral/plasma/thirty, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"lq" = ( -/obj/structure/table, -/obj/effect/spawner/random/engineering/material_cheap, -/obj/effect/spawner/random/engineering/material_cheap, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"lt" = ( -/obj/machinery/light/broken/directional/west, -/obj/structure/rack, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"lx" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/looter/ranged/space/laser, -/turf/open/floor/wood, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"lK" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/zombie/nocorpse, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"lM" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"lN" = ( -/obj/structure/bed/medical/emergency, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"lS" = ( -/obj/machinery/light/red/directional/south, -/obj/structure/chair/comfy/shuttle{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"lT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/filled/line, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"lU" = ( -/obj/structure/table, -/obj/effect/spawner/random/engineering/material_rare, -/obj/effect/spawner/random/engineering/material_rare, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"mj" = ( -/obj/machinery/stasis, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"mk" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/trog, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"mz" = ( -/obj/machinery/chem_dispenser, -/turf/open/floor/iron/white/smooth_half, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"mG" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"mQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"nz" = ( -/obj/machinery/light/red/directional/west, -/obj/item/storage/fancy/donut_box, -/obj/structure/table, -/obj/item/toy/nuke, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"nO" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/looter/big, -/turf/open/floor/wood, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"nR" = ( -/obj/machinery/light/red/directional/south, -/obj/structure/closet/crate/large, -/obj/effect/turf_decal/bot, -/obj/item/shovel, -/obj/effect/spawner/random/decoration/carpet, -/obj/effect/spawner/random/decoration/carpet, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"om" = ( -/obj/machinery/light/red/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"ou" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"oz" = ( -/obj/machinery/door/airlock/mining, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"oJ" = ( -/obj/machinery/light/broken/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/suit_storage_unit/open, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"oP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"pr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"pw" = ( -/obj/machinery/light/broken/directional/west, -/obj/structure/closet/crate/radiation, -/obj/effect/turf_decal/bot, -/obj/effect/spawner/random/engineering/material_rare, -/obj/effect/spawner/random/engineering/material_rare, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"pM" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/carpet/lone, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"pQ" = ( -/obj/structure/bed/medical{ - dir = 4 - }, -/obj/item/bedsheet/random, -/obj/machinery/door/window{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"pZ" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"qm" = ( -/obj/effect/spawner/random/trash/mess, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"qt" = ( -/obj/structure/grille/broken, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/glass{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"qx" = ( -/obj/structure/table/reinforced, -/obj/item/folder, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"qM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/brown/filled/end, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"qV" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"re" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"rh" = ( -/obj/structure/rack, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"rm" = ( -/obj/structure/bed, -/obj/item/bedsheet/nanotrasen, -/turf/open/floor/wood, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"ry" = ( -/obj/machinery/light/red/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/blue/filled/corner, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"rU" = ( -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"rY" = ( -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"se" = ( -/obj/machinery/door/airlock/highsecurity, -/turf/open/floor/wood, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"sV" = ( -/mob/living/simple_animal/hostile/zombie/nocorpse, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"sY" = ( -/obj/machinery/light/broken/directional/north, -/turf/open/floor/iron/white/smooth_half, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"tc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/grenade/chem_grenade/smart_metal_foam, -/obj/item/grenade/chem_grenade/smart_metal_foam, -/obj/item/grenade/chem_grenade/smart_metal_foam, -/obj/structure/table, -/obj/effect/spawner/random/engineering/tool_advanced{ - pixel_x = 6; - pixel_y = 8 - }, -/obj/effect/spawner/random/engineering/tool_advanced{ - pixel_x = 6; - pixel_y = 8 - }, -/obj/effect/spawner/random/engineering/tool_advanced{ - pixel_x = 6; - pixel_y = 8 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"td" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"tj" = ( -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"ts" = ( -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"tw" = ( -/obj/item/folder, -/obj/machinery/computer/records/security/laptop{ - dir = 1 - }, -/obj/structure/table/wood, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"tJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"tO" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"tQ" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"uc" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"ui" = ( -/obj/machinery/computer{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"us" = ( -/obj/machinery/door/airlock/maintenance, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"uv" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"uH" = ( -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"uM" = ( -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"uO" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/gibs/up, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"uX" = ( -/obj/structure/closet/crate/secure/loot, -/obj/effect/turf_decal/bot_red, -/obj/effect/decal/cleanable/dirt, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"vc" = ( -/obj/structure/table/reinforced, -/obj/item/megaphone, -/turf/open/floor/iron/dark/side, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"vg" = ( -/obj/effect/spawner/random/medical/patient_stretcher, -/obj/effect/turf_decal/trimline/blue/filled/corner, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"vl" = ( -/obj/effect/spawner/random/trash/graffiti, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"vm" = ( -/obj/machinery/light/broken/directional/east, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"vq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"vr" = ( -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"vG" = ( -/obj/structure/bed/medical{ - dir = 4 - }, -/obj/item/bedsheet/random, -/obj/machinery/door/window{ - dir = 8 - }, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"vY" = ( -/obj/machinery/light/red/directional/west, -/obj/machinery/suit_storage_unit/cmo, -/turf/open/floor/iron/dark/side{ - dir = 10 - }, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"wa" = ( -/obj/machinery/door/airlock/public, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"wh" = ( -/obj/machinery/light/red/directional/south, -/obj/structure/closet/crate/secure/gear, -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/toolbox/syndicate, -/obj/item/switchblade, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"wi" = ( -/turf/open/floor/wood, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"wu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"wT" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"wV" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"xm" = ( -/obj/structure/table/wood, -/obj/machinery/computer/records/security/laptop, -/turf/open/floor/wood, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"xs" = ( -/obj/structure/rack/shelf, -/obj/item/reagent_containers/hypospray/medipen/atropine, -/obj/item/reagent_containers/hypospray/medipen/survival{ - pixel_y = -6 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"xL" = ( -/obj/machinery/light/broken/directional/east, -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/trog, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"xY" = ( -/obj/structure/rack/shelf, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"yh" = ( -/obj/machinery/computer/operating, -/turf/open/floor/iron/white/textured_corner{ - dir = 8 - }, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"yl" = ( -/obj/machinery/light/red/directional/east, -/obj/structure/bed/medical{ - dir = 4 - }, -/obj/item/bedsheet/random, -/obj/machinery/door/window{ - dir = 8 - }, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"yp" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/filled/line, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"yq" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"ys" = ( -/obj/structure/rack/shelf, -/obj/item/storage/toolbox/mechanical, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"yy" = ( -/obj/effect/spawner/random/trash/mess, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"yA" = ( -/obj/structure/table, -/obj/item/taperecorder, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"yE" = ( -/obj/machinery/light/small/red/directional/west, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"yO" = ( -/obj/machinery/light/red/directional/west, -/obj/structure/table/reinforced, -/obj/item/computer_disk/syndicate/camera_app, -/obj/item/disk/design_disk/bepis, -/obj/item/disk/design_disk/bepis, -/obj/item/stack/spacecash/c500, -/turf/open/floor/iron/dark/side{ - dir = 9 - }, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"yR" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/effect/mapping_helpers/damaged_window, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"zo" = ( -/obj/machinery/computer{ - dir = 8 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"zr" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp{ - pixel_y = 10 - }, -/obj/item/paper, -/obj/item/paper{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/item/pen/fountain/captain, -/obj/item/folder, -/turf/open/floor/wood, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"zA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"zB" = ( -/obj/structure/dresser, -/turf/open/floor/wood, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"zC" = ( -/obj/structure/closet/crate/medical, -/obj/effect/turf_decal/bot, -/obj/item/reagent_containers/cup/beaker/bluespace, -/obj/item/reagent_containers/cup/beaker/bluespace, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"zH" = ( -/obj/effect/spawner/random/exotic/ripley, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"zX" = ( -/obj/structure/chair/comfy/black{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Av" = ( -/obj/structure/closet/cabinet, -/obj/item/flashlight/seclite, -/obj/item/stack/spacecash/c500, -/turf/open/floor/wood, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"AD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Bq" = ( -/obj/structure/table, -/obj/item/storage/belt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"BS" = ( -/obj/machinery/light/red/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/comfy/shuttle{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"BY" = ( -/obj/effect/spawner/random/trash/mess, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Cg" = ( -/obj/structure/bed/medical/emergency, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Cl" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, -/turf/closed/wall/mineral/titanium, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Cs" = ( -/obj/structure/door_assembly/door_assembly_hatch, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Cu" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/zombie, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"CF" = ( -/obj/machinery/door/airlock/glass, -/obj/effect/spawner/random/structure/barricade, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"CH" = ( -/obj/structure/extinguisher_cabinet/directional/north, -/obj/effect/spawner/random/structure/crate_loot, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"CK" = ( -/obj/machinery/light/small/red/directional/north, -/obj/structure/closet/emcloset, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"CQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"CT" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/carpet/lone, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"CU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/suit_storage_unit/open, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Dh" = ( -/obj/machinery/light/red/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/blue/filled/line, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Du" = ( -/obj/structure/closet/crate/large, -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/spacecash/c1000, -/obj/item/statuebust, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Dx" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"DN" = ( -/obj/structure/extinguisher_cabinet/directional/north, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Ec" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Ee" = ( -/obj/effect/spawner/random/trash/mess, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Ef" = ( -/obj/machinery/computer/atmos_alert{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Ej" = ( -/obj/structure/rack/shelf, -/obj/item/surgery_tray/full, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"El" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Ew" = ( -/obj/structure/rack/shelf, -/obj/item/gun/energy/laser/retro, -/turf/open/floor/wood, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Ey" = ( -/obj/effect/spawner/random/trash/grime, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"ED" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/item/paper_bin{ - pixel_x = -11; - pixel_y = 7 - }, -/obj/item/folder, -/obj/item/pen/fourcolor{ - pixel_x = 4 - }, -/obj/item/pen/fountain, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"EE" = ( -/obj/structure/closet/crate/large, -/obj/effect/turf_decal/bot, -/obj/item/stack/spacecash/c1000, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"EJ" = ( -/obj/effect/spawner/random/trash/mess, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"EL" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/zombie/nocorpse, -/obj/effect/turf_decal/trimline/blue/filled/line, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"EN" = ( -/obj/structure/table, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"ES" = ( -/obj/structure/rack, -/obj/item/storage/medkit{ - pixel_y = 12 - }, -/obj/item/storage/medkit/brute{ - pixel_y = 7 - }, -/obj/item/storage/medkit/o2, -/turf/open/floor/iron/white/textured_corner, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"EU" = ( -/obj/machinery/door/airlock/command, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"EY" = ( -/mob/living/simple_animal/hostile/zombie, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Fe" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Fj" = ( -/obj/structure/table, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"FE" = ( -/obj/structure/rack/shelf, -/obj/item/storage/toolbox/electrical, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"FF" = ( -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"FV" = ( -/turf/template_noop, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"FW" = ( -/obj/structure/grille/broken, -/obj/item/shard{ - icon_state = "medium" - }, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Gd" = ( -/obj/structure/closet/crate/secure/loot, -/obj/effect/turf_decal/bot_red, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Gf" = ( -/obj/structure/rack, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Gp" = ( -/obj/machinery/suit_storage_unit/open, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Gq" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green{ - pixel_x = -7; - pixel_y = 14 - }, -/obj/item/storage/briefcase, -/obj/item/storage/pill_bottle/psicodine, -/turf/open/floor/wood, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"GP" = ( -/obj/structure/table/wood, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"GR" = ( -/obj/structure/table_frame, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"GU" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Hj" = ( -/obj/machinery/door/poddoor/shutters/preopen, -/turf/open/floor/noslip, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Hk" = ( -/obj/structure/closet/crate/radiation, -/obj/effect/turf_decal/bot, -/obj/effect/spawner/random/engineering/material_rare, -/obj/effect/spawner/random/engineering/material_rare, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"HO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/blue/filled/end, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Ib" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/office, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"If" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Ig" = ( -/obj/structure/curtain, -/obj/machinery/door/window{ - dir = 8 - }, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/machinery/shower/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"It" = ( -/obj/structure/table, -/obj/item/flashlight/seclite, -/obj/effect/spawner/random/trash/soap, -/obj/effect/spawner/random/trash/soap, -/turf/open/floor/iron/white/smooth_half, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"IF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/tank/air, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"IH" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"IM" = ( -/obj/effect/turf_decal/trimline/brown/filled/end, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"IZ" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/zombie/nocorpse, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Ja" = ( -/obj/machinery/light/red/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Jh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Jx" = ( -/obj/machinery/door/airlock/external{ - id_tag = "syndie_listeningpost_external"; - req_access = list("syndicate") - }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"JI" = ( -/obj/machinery/light/broken/directional/east, -/obj/effect/turf_decal/trimline/brown/filled/end{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"JM" = ( -/obj/structure/closet/crate/medical, -/obj/effect/turf_decal/bot, -/obj/effect/spawner/random/medical/memeorgans, -/obj/effect/spawner/random/medical/memeorgans, -/obj/effect/spawner/random/medical/memeorgans, -/obj/effect/spawner/random/medical/organs, -/obj/effect/spawner/random/medical/organs, -/obj/effect/spawner/random/medical/organs, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"JN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/item/shovel, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"JU" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Kk" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/zombie, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/filled/corner, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"KA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/sheet/plastic/fifty, -/obj/structure/closet/crate/engineering, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"KB" = ( -/obj/effect/spawner/random/trash/box, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"KD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"KJ" = ( -/obj/machinery/computer/monitor{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"KP" = ( -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"KQ" = ( -/obj/machinery/light/broken/directional/west, -/obj/structure/table, -/obj/effect/spawner/random/engineering/material, -/obj/effect/spawner/random/engineering/material, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Lk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/cabinet, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Ls" = ( -/obj/machinery/door/airlock/medical, -/obj/effect/mapping_helpers/airlock/abandoned, -/turf/open/floor/iron/white/side{ - dir = 1 - }, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Lt" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/smooth_edge{ - dir = 1 - }, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"LG" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"LL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/effect/turf_decal/trimline/blue/filled/corner, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Ma" = ( -/obj/structure/table/reinforced, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; - pixel_y = 15 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Md" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/mob_spawn/corpse/human/doctor, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Mf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/blue/filled/line, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Mq" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Mr" = ( -/obj/machinery/light/small/red/directional/north, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Mv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/filled/corner, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"MA" = ( -/obj/machinery/computer/crew{ - dir = 8 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"MC" = ( -/obj/machinery/door/airlock/medical, -/turf/open/floor/iron/white/side{ - dir = 1 - }, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"MV" = ( -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"MY" = ( -/obj/machinery/porta_turret, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Nb" = ( -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/iron/dark/side, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"No" = ( -/obj/machinery/shieldgen, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Nt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Ny" = ( -/mob/living/simple_animal/hostile/zombie/cheesezombie, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Nz" = ( -/obj/machinery/light/broken/directional/north, -/obj/effect/mob_spawn/corpse/human/syndicatecommando, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"NH" = ( -/obj/effect/decal/cleanable/greenglow, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"NO" = ( -/obj/structure/closet/crate/secure/engineering, -/obj/item/crowbar/power, -/obj/item/multitool/advanced, -/obj/item/rcd_upgrade/frames, -/obj/item/screwdriver/advanced, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"NU" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/zombie, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Oc" = ( -/obj/structure/closet/crate/large, -/obj/effect/turf_decal/bot, -/obj/effect/spawner/random/maintenance/five, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Om" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/machinery/door/window{ - dir = 8 - }, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"On" = ( -/obj/structure/rack/shelf, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Ou" = ( -/obj/structure/grille/broken, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/glass{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"OI" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"ON" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/tank_holder, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"OW" = ( -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Pe" = ( -/obj/machinery/light/broken/directional/north, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Pq" = ( -/obj/machinery/door/poddoor/shutters, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"PJ" = ( -/obj/structure/bed/medical{ - dir = 4 - }, -/obj/item/bedsheet/random, -/obj/machinery/door/window{ - dir = 8 - }, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"PW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/autolathe, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Qb" = ( -/obj/structure/table, -/obj/item/stack/sheet/cloth/ten, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Qe" = ( -/obj/structure/rack, -/obj/item/flashlight, -/obj/item/flashlight{ - pixel_x = 1; - pixel_y = 5 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Qg" = ( -/obj/effect/turf_decal/trimline/brown/filled/end{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Qj" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Qn" = ( -/obj/machinery/light/small/red/directional/east, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Qo" = ( -/obj/structure/closet/crate/secure/loot, -/obj/effect/turf_decal/bot_red, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"QA" = ( -/obj/machinery/light/broken/directional/east, -/obj/structure/table/reinforced, -/obj/item/storage/fancy/donut_box, -/obj/item/food/benedict, -/turf/open/floor/iron/dark/side{ - dir = 5 - }, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"QB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/wood, -/obj/item/modular_computer/laptop, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"QI" = ( -/obj/structure/closet/crate/large, -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/maintenance/five, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"QM" = ( -/mob/living/simple_animal/hostile/zombie/nocorpse, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"QW" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"RA" = ( -/obj/structure/rack/shelf, -/obj/item/gps/spaceruin, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"RI" = ( -/obj/structure/table, -/obj/machinery/cell_charger_multi, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"RW" = ( -/obj/machinery/computer, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"RX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/chair/comfy/brown{ - dir = 8 - }, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Sz" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"SD" = ( -/obj/machinery/power/shuttle_engine/heater{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Tk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/rack, -/obj/item/storage/briefcase, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Tn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/crate_loot, -/obj/effect/turf_decal/trimline/blue/filled/line, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Tv" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Tz" = ( -/obj/structure/noticeboard{ - pixel_y = 26 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/blue/filled/line, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"TB" = ( -/obj/machinery/light/broken/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 10 - }, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"TH" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"TW" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Ud" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/looter, -/turf/open/floor/carpet/lone, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Ul" = ( -/obj/structure/extinguisher_cabinet/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/blue/filled/line, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Up" = ( -/obj/structure/tank_dispenser/oxygen, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"UW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/gibs/torso, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"UX" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Vo" = ( -/obj/structure/bed/medical{ - dir = 4 - }, -/obj/item/bedsheet/random, -/obj/machinery/door/window{ - dir = 8 - }, -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"VA" = ( -/obj/machinery/door/airlock/highsecurity, -/obj/effect/mapping_helpers/airlock/abandoned, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"VU" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"We" = ( -/turf/closed/wall/mineral/titanium, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Wx" = ( -/obj/machinery/light/small/red/directional/south, -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"WA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/office{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"WT" = ( -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Xw" = ( -/obj/structure/closet/crate/medical, -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/cup/beaker/synthflesh, -/obj/item/reagent_containers/cup/beaker/synthflesh, -/obj/item/reagent_containers/pill/iron, -/obj/item/reagent_containers/pill/iron, -/obj/item/reagent_containers/pill/iron, -/obj/item/reagent_containers/pill/oxandrolone, -/obj/item/reagent_containers/pill/oxandrolone, -/obj/item/reagent_containers/pill/potassiodide, -/obj/item/reagent_containers/pill/potassiodide, -/obj/item/reagent_containers/pill/stimulant, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"XB" = ( -/obj/machinery/light/red/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/comfy/shuttle, -/obj/effect/turf_decal/trimline/blue/filled/line, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"YA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/obj/effect/mob_spawn/corpse/human/cargo_tech, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"YG" = ( -/mob/living/simple_animal/hostile/zombie, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"YP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mob_spawn/corpse/human/syndicatesoldier, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"YS" = ( -/obj/machinery/light/broken/directional/north, -/obj/structure/table/optable, -/obj/machinery/defibrillator_mount{ - pixel_y = 25 - }, -/turf/open/floor/iron/white/smooth_half, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"YT" = ( -/obj/machinery/light/broken/directional/west, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Zd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/trash/grime, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Zg" = ( -/obj/structure/extinguisher_cabinet/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood/tile, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"Zu" = ( -/obj/structure/curtain, -/obj/machinery/door/window{ - dir = 4 - }, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/machinery/shower/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) -"ZU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/brown/filled/line, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/scrapheap) - -(1,1,1) = {" -fw -fw -fw -ff -fw -fw -ff -FV -fr -ff -fw -fw -fw -fw -fw -ff -FV -fr -ff -fw -fw -ff -fw -fw -fw -"} -(2,1,1) = {" -fw -fw -fw -cA -kA -kA -cA -FV -FV -cA -kA -kA -kA -kA -kA -cA -FV -FV -cA -kA -kA -cA -fw -fw -fw -"} -(3,1,1) = {" -fw -fw -fw -cA -SD -SD -cA -SD -SD -cA -SD -SD -SD -SD -SD -cA -SD -SD -cA -SD -SD -cA -fw -fw -fw -"} -(4,1,1) = {" -fw -fw -fw -cA -Cl -Cl -cA -Cl -Cl -cA -Cl -Cl -Cl -Cl -Cl -cA -Cl -Cl -cA -Cl -Cl -cA -fw -fw -fw -"} -(5,1,1) = {" -fw -fw -cA -cA -Up -KQ -lU -oJ -CU -cA -PW -tc -KJ -Ef -hC -KA -No -ft -cA -kc -wT -cA -cA -fw -fw -"} -(6,1,1) = {" -fw -fw -QW -lt -wT -kc -wT -wT -kc -us -OW -bP -hU -bP -bP -OW -bP -IF -QW -wT -IZ -GU -QW -fw -fw -"} -(7,1,1) = {" -QW -QW -QW -rh -wT -kc -wT -IZ -kc -QW -CK -bP -bP -bP -Wx -QW -QW -QW -QW -ts -EN -EN -QW -QW -QW -"} -(8,1,1) = {" -Jx -OW -Jx -kc -qm -zA -kc -wT -wT -QW -Fe -OW -rU -bP -hD -QW -LL -eY -QW -kc -wT -wT -Jx -OW -Jx -"} -(9,1,1) = {" -QW -QW -QW -kc -wT -wT -lM -GU -dp -QW -QW -QW -QW -us -QW -QW -cp -oP -CF -wT -wT -EN -QW -QW -QW -"} -(10,1,1) = {" -Sz -MY -QW -om -IZ -qm -lM -EN -lM -QW -dd -ON -cf -qV -qV -YT -If -EY -QW -sV -kc -WA -QW -MY -Sz -"} -(11,1,1) = {" -Sz -Sz -QW -wT -kc -kc -wT -kc -wT -CF -Mf -vq -Nt -Nt -iB -KB -ou -cm -QW -QW -CF -QW -QW -yR -Sz -"} -(12,1,1) = {" -fw -fw -QW -LG -kc -Ja -wT -xL -MV -QW -Ul -oP -vl -wV -dQ -uH -cp -mQ -pr -pr -bi -gr -We -fw -fw -"} -(13,1,1) = {" -fw -fw -QW -QW -QW -QW -QW -QW -QW -QW -cp -oP -wV -uH -wV -wV -eL -Dx -Dx -Tv -HO -dw -We -fw -fw -"} -(14,1,1) = {" -fw -fw -We -Ib -tw -yE -Gf -QW -ry -qV -AD -YA -uH -uH -uH -wV -cp -vq -iB -iB -vm -lq -We -fw -fw -"} -(15,1,1) = {" -fw -fw -Sz -IH -eZ -tQ -IH -VA -Mf -iU -Nt -KP -uH -uH -uH -Ey -Mf -oP -QW -QW -QW -QW -We -fw -fw -"} -(16,1,1) = {" -fw -fw -Sz -On -IH -IH -EJ -QW -Mf -oP -wV -mG -mG -Cs -mG -uH -Mf -El -QW -Ew -gG -Av -We -fw -fw -"} -(17,1,1) = {" -fw -fw -QW -Mr -zX -hz -gm -QW -Tn -TH -ui -mG -NH -uH -mG -yy -Mf -oP -se -Qj -CT -lx -Sz -fw -fw -"} -(18,1,1) = {" -fw -fw -Sz -GP -QB -ED -tQ -QW -cp -TH -GR -FW -uH -uH -mG -uH -Mf -ax -QW -zr -Ud -wi -Sz -fw -fw -"} -(19,1,1) = {" -fw -fw -Sz -Tk -RX -UX -Jh -QW -Dh -oP -Fj -mG -mG -Cs -mG -uH -Mf -TH -QW -xm -pM -Qj -Sz -fw -fw -"} -(20,1,1) = {" -fw -fw -We -Lk -Qn -FF -Zg -QW -cp -Cu -uH -yA -jr -uH -vg -re -JN -mk -QW -Qj -nO -bn -We -fw -fw -"} -(21,1,1) = {" -fw -fw -We -QW -QW -QW -QW -QW -cp -oP -vl -uH -wV -wV -Mf -vq -iB -KP -QW -zB -Gq -rm -We -fw -fw -"} -(22,1,1) = {" -fw -fw -We -ES -Ej -xs -aa -QW -Mf -Cg -wV -UW -wV -uH -Mf -ax -QW -QW -QW -QW -QW -QW -We -fw -fw -"} -(23,1,1) = {" -fw -fw -We -sY -kn -OI -Lt -Ls -Mf -TH -wV -uH -uH -uH -Mf -TH -oz -cI -TB -Oc -Hk -pw -We -fw -fw -"} -(24,1,1) = {" -fw -fw -We -gA -rY -uc -It -QW -hc -TH -uH -RI -QW -Qe -Mf -cE -QW -iM -Mv -wu -fa -qM -We -fw -fw -"} -(25,1,1) = {" -fw -fw -We -aq -BY -uc -dP -QW -Dh -oP -uH -Qb -QW -Bq -Mf -TH -Hj -iy -KD -NO -zC -QI -We -fw -fw -"} -(26,1,1) = {" -fw -fw -We -mz -rY -uc -iT -QW -Tz -oP -uH -FE -QW -RA -Mf -iH -Hj -Mq -hN -VU -NU -IM -We -fw -fw -"} -(27,1,1) = {" -fw -fw -We -YS -Md -lK -Lt -MC -EL -lN -jt -ys -QW -xY -Mf -TH -Hj -Ee -ZU -JM -Du -nR -We -fw -fw -"} -(28,1,1) = {" -fw -fw -We -yh -uM -mj -cY -QW -DN -iR -TH -uH -yq -CH -cp -TH -Hj -JU -fU -VU -VU -qM -We -fw -fw -"} -(29,1,1) = {" -fw -fw -We -QW -QW -QW -QW -QW -QW -ga -TH -wV -uH -ah -cp -BS -QW -dl -lT -gd -kH -wh -We -fw -fw -"} -(30,1,1) = {" -fw -fw -We -Zu -bC -kc -nz -eK -QW -XB -TH -uH -YG -uH -Mf -pZ -QW -cx -Kk -CQ -VU -qM -QW -We -fw -"} -(31,1,1) = {" -fw -fw -We -Nz -WT -kc -kc -uv -wa -cp -jM -tO -pr -Zd -AD -pZ -QW -dl -yp -Xw -EE -gX -QW -QW -We -"} -(32,1,1) = {" -fw -fw -We -Ig -Om -uv -Ny -kc -QW -Ec -iB -Nt -Nt -iB -iB -lS -QW -Qg -YP -wu -db -IM -Jx -OW -Jx -"} -(33,1,1) = {" -fw -fw -We -We -We -vG -kc -Vo -QW -QW -Ou -EU -qt -dk -Sz -QW -QW -Gd -gL -uX -QW -Pq -QW -QW -We -"} -(34,1,1) = {" -fw -fw -Sz -MY -We -Pe -sV -kc -QW -yO -tj -kc -tj -kc -Gp -vY -QW -Qo -tJ -Qo -QW -zH -QW -We -fw -"} -(35,1,1) = {" -fw -fw -Sz -Sz -We -PJ -yl -pQ -QW -RW -TW -QM -uO -vr -QM -Nb -QW -Qo -JI -Qo -QW -QW -We -fw -fw -"} -(36,1,1) = {" -fw -fw -fw -fw -We -We -We -We -QW -RW -TW -vr -td -td -td -vc -QW -We -We -We -We -We -fw -fw -fw -"} -(37,1,1) = {" -fw -fw -fw -fw -fw -fw -fw -fw -We -QA -qx -Ma -zo -zo -MA -dX -We -fw -fw -fw -fw -fw -fw -fw -fw -"} -(38,1,1) = {" -fw -fw -fw -fw -fw -fw -fw -fw -We -We -Sz -Sz -Sz -Sz -Sz -We -We -fw -fw -fw -fw -fw -fw -fw -fw -"} diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/smugglies.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/smugglies.dmm deleted file mode 100644 index a4bccd943323ab..00000000000000 --- a/_maps/RandomRuins/SpaceRuins/skyrat/smugglies.dmm +++ /dev/null @@ -1,442 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"c" = ( -/obj/machinery/door/airlock/medical, -/obj/effect/mapping_helpers/airlock/access/all, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"d" = ( -/obj/item/reagent_containers/cocainebrick{ - pixel_x = 7; - pixel_y = 8 - }, -/obj/item/reagent_containers/cocaine{ - pixel_y = 4 - }, -/obj/structure/table, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"e" = ( -/obj/machinery/hydroponics/constructable, -/turf/open/floor/grass, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"g" = ( -/obj/effect/spawner/structure/window/reinforced/tinted, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"h" = ( -/obj/effect/turf_decal/stripes/asteroid/corner{ - dir = 4 - }, -/turf/open/misc/asteroid/airless, -/area/ruin/unpowered/no_grav) -"k" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/ruin/unpowered/no_grav) -"m" = ( -/turf/open/floor/iron/grimy, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"o" = ( -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"t" = ( -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"u" = ( -/obj/machinery/door/airlock/mining{ - name = "Backroom" - }, -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/all, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"v" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"w" = ( -/obj/structure/lattice/catwalk, -/obj/structure/marker_beacon/burgundy, -/turf/template_noop, -/area/template_noop) -"y" = ( -/obj/structure/table, -/obj/effect/spawner/random/entertainment/money, -/obj/effect/spawner/random/entertainment/money, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"z" = ( -/turf/closed/mineral/random, -/area/ruin/unpowered/no_grav) -"A" = ( -/obj/structure/chair/office, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"B" = ( -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/access/all, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"C" = ( -/obj/effect/turf_decal/stripes/asteroid/corner{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/ruin/unpowered/no_grav) -"E" = ( -/obj/machinery/vending/hydronutrients, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"F" = ( -/turf/open/misc/asteroid/airless, -/area/ruin/unpowered/no_grav) -"H" = ( -/obj/machinery/light/directional/north, -/turf/open/floor/iron/grimy, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"I" = ( -/obj/structure/closet/secure_closet/hydroponics{ - req_access = null - }, -/obj/item/gun/energy/floragun, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"K" = ( -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"L" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/north, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"N" = ( -/obj/structure/sink/directional/west, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"O" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"Q" = ( -/obj/machinery/light/directional/north, -/obj/structure/table, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"R" = ( -/obj/structure/sign/poster/contraband/random/directional/north, -/obj/structure/table, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"S" = ( -/obj/effect/turf_decal/siding/thinplating, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"U" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"V" = ( -/obj/machinery/vending/hydroseeds, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"W" = ( -/obj/structure/table, -/obj/item/seeds/cocoapod, -/obj/item/folded_navigation_gigabeacon, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"Y" = ( -/obj/machinery/computer/crew/syndie{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/powered/skyrat/smugglies) -"Z" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/powered/skyrat/smugglies) - -(1,1,1) = {" -a -a -a -a -z -z -a -a -a -z -a -a -a -a -a -"} -(2,1,1) = {" -a -a -z -z -z -z -a -a -z -z -z -a -a -a -a -"} -(3,1,1) = {" -a -a -z -z -z -z -z -a -z -z -z -z -a -a -a -"} -(4,1,1) = {" -a -z -z -z -z -z -z -z -z -z -z -z -z -a -a -"} -(5,1,1) = {" -a -z -z -O -O -O -O -O -O -O -O -O -z -z -w -"} -(6,1,1) = {" -z -z -z -O -R -v -A -L -m -m -o -O -O -O -h -"} -(7,1,1) = {" -z -z -z -O -Q -v -Y -O -H -m -o -B -K -B -k -"} -(8,1,1) = {" -z -z -z -O -y -Z -U -u -o -o -o -O -O -O -C -"} -(9,1,1) = {" -z -z -z -O -g -c -g -O -O -O -O -O -z -z -w -"} -(10,1,1) = {" -z -z -z -O -I -o -W -d -o -S -e -O -z -z -F -"} -(11,1,1) = {" -z -z -z -O -V -o -o -o -o -S -e -O -z -z -z -"} -(12,1,1) = {" -z -z -z -O -E -o -o -t -N -S -e -O -z -z -z -"} -(13,1,1) = {" -z -z -z -O -O -O -O -O -O -O -O -O -z -z -a -"} -(14,1,1) = {" -a -z -z -z -z -z -z -z -z -z -z -z -z -a -a -"} -(15,1,1) = {" -a -a -z -z -z -z -z -z -z -z -z -a -a -a -a -"} -(16,1,1) = {" -a -a -a -z -z -z -z -z -z -z -a -a -a -a -a -"} diff --git a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm index 705b26545460b9..3a2d28ba1ee8ff 100644 --- a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm @@ -862,7 +862,7 @@ /obj/effect/turf_decal/siding/yellow{ dir = 8 }, -/mob/living/simple_animal/bot/medbot{ +/mob/living/basic/bot/medbot{ name = "Accidents Happen" }, /obj/structure/cable, diff --git a/_maps/RandomRuins/SpaceRuins/spacehotel_skyrat.dmm b/_maps/RandomRuins/SpaceRuins/spacehotel_skyrat.dmm deleted file mode 100644 index e5b1e49530f7ae..00000000000000 --- a/_maps/RandomRuins/SpaceRuins/spacehotel_skyrat.dmm +++ /dev/null @@ -1,12561 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/template_noop, -/area/template_noop) -"ab" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/template_noop, -/area/template_noop) -"ac" = ( -/obj/structure/lattice, -/turf/template_noop, -/area/template_noop) -"ad" = ( -/obj/machinery/power/solar, -/obj/structure/cable, -/turf/open/floor/iron/solarpanel/airless, -/area/ruin/solars/hotel/solars) -"ae" = ( -/obj/structure/rack, -/obj/effect/spawner/random/clothing, -/obj/effect/spawner/random/clothing, -/obj/effect/spawner/random/clothing, -/obj/effect/spawner/random/clothing, -/obj/effect/spawner/random/clothing, -/obj/effect/turf_decal/tile/dark/diagonal_edge, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"ag" = ( -/obj/machinery/mineral/stacking_machine{ - input_dir = 2 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/workroom) -"ai" = ( -/obj/machinery/power/tracker, -/obj/structure/cable, -/turf/open/floor/iron/solarpanel/airless, -/area/ruin/solars/hotel/solars) -"aj" = ( -/obj/structure/chair/greyscale{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"al" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/pool) -"am" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/hotel) -"ap" = ( -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"aq" = ( -/obj/machinery/door/airlock/public/glass, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"ar" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/grunge{ - name = "Hotel Staff Storage" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel/workroom) -"as" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/closet, -/obj/machinery/button/curtain{ - id = "HotelRoom3Curtains"; - pixel_y = 23 - }, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"at" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"au" = ( -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/workroom) -"av" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"aw" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"aA" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/curtain/cloth/fancy/mechanical{ - icon_state = "bounty-open"; - icon_type = "bounty"; - id = "HotelRoom3Curtains"; - name = "curtain" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"aB" = ( -/obj/machinery/power/smes/magical, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"aC" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"aD" = ( -/obj/structure/table/wood, -/obj/item/storage/fancy/candle_box/amber, -/obj/effect/spawner/random/entertainment/lighter, -/obj/item/wrench, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"aF" = ( -/obj/structure/table/glass, -/obj/item/reagent_containers/cup/glass/bottle/champagne, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"aG" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 10 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"aH" = ( -/obj/structure/chair/comfy/black{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"aI" = ( -/obj/structure/chair/comfy/black{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"aK" = ( -/obj/structure/chair/comfy/black{ - dir = 1 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"aL" = ( -/obj/machinery/airalarm/directional/north{ - pixel_y = 24 - }, -/obj/effect/turf_decal/siding/dark_blue{ - dir = 1 - }, -/obj/structure/rack, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"aM" = ( -/obj/item/paper/pamphlet/ruin/spacehotel, -/obj/item/paper/pamphlet/ruin/spacehotel, -/obj/item/paper/pamphlet/ruin/spacehotel, -/obj/item/paper/pamphlet/ruin/spacehotel, -/obj/structure/table/glass, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"aN" = ( -/obj/machinery/computer/teleporter{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"aP" = ( -/obj/machinery/teleport/station, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"aQ" = ( -/obj/machinery/teleport/hub, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"aS" = ( -/obj/structure/chair/sofa/corp{ - dir = 1 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"aT" = ( -/obj/effect/spawner/random/vending/snackvend, -/obj/machinery/light, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"aV" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -30 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/carpet/neon/simple/black/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"aW" = ( -/obj/machinery/airalarm/directional/north{ - pixel_y = 24 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"aZ" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/pool) -"ba" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"bb" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"bk" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 10 - }, -/turf/open/indestructible/hotelwood, -/area/ruin/space/has_grav/hotel/pool) -"bq" = ( -/obj/structure/table/wood, -/obj/effect/spawner/random/entertainment/lighter, -/obj/item/wrench, -/obj/item/storage/fancy/candle_box/amber, -/turf/open/floor/carpet/neon/simple/black/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"by" = ( -/obj/structure/table/wood/fancy/green, -/obj/item/reagent_containers/cup/glass/mug/nanotrasen, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"bE" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"bH" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"bN" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"bP" = ( -/obj/effect/turf_decal/siding/blue, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"bQ" = ( -/obj/structure/chair/sofa/corp/left, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"bV" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green, -/turf/open/floor/carpet/neon/simple/black/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"bW" = ( -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"bZ" = ( -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"cb" = ( -/obj/structure/table, -/obj/structure/bedsheetbin, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"cc" = ( -/obj/machinery/washing_machine, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"cd" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/maintenance{ - name = "Hotel Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"ce" = ( -/obj/structure/closet/crate/bin, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"cf" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"ck" = ( -/obj/structure/cable, -/obj/machinery/light_switch{ - pixel_y = 24 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/workroom) -"cl" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"co" = ( -/obj/item/kirbyplants/random, -/obj/machinery/airalarm/directional/north{ - pixel_y = 24 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"cp" = ( -/obj/structure/bed/double, -/obj/item/bedsheet/random/double, -/obj/machinery/button/curtain{ - id = "HotelRoom6Curtains"; - pixel_x = 24 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"cq" = ( -/obj/effect/spawner/random/vending/colavend, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 10 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"cr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"cu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"cw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"cy" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"cE" = ( -/obj/effect/turf_decal/tile/green, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"cJ" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"cO" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -30 - }, -/obj/machinery/light{ - dir = 8; - light_color = "#e8eaff" - }, -/obj/structure/dresser, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"cP" = ( -/obj/machinery/vending/dorms, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"cR" = ( -/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/ruin/space/has_grav/hotel/workroom) -"cZ" = ( -/obj/effect/turf_decal/siding/purple{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"dd" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"dg" = ( -/obj/structure/closet/secure_closet/personal/cabinet, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"di" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/hotel/workroom) -"dl" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"dm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"do" = ( -/obj/structure/closet/wardrobe/mixed, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"dr" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"ds" = ( -/obj/structure/table, -/obj/effect/turf_decal/siding/dark_blue{ - dir = 4 - }, -/obj/item/radio/headset/headset_faction, -/obj/item/radio/headset/headset_faction, -/obj/item/radio/headset/headset_faction, -/obj/item/radio/headset/headset_faction, -/obj/item/radio/headset/headset_faction, -/obj/item/radio/headset/headset_faction, -/obj/item/radio/headset/headset_faction, -/obj/item/radio/headset/headset_faction, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"dv" = ( -/obj/item/reagent_containers/cup/rag, -/obj/structure/table/reinforced/plastitaniumglass, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"dx" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"dz" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/effect/spawner/random/entertainment/lighter, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"dA" = ( -/obj/machinery/chem_master/condimaster, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"dE" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/siding/dark{ - dir = 9 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"dH" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"dI" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"dJ" = ( -/obj/structure/rack, -/obj/effect/spawner/random/clothing/costume, -/obj/effect/spawner/random/clothing/costume, -/obj/effect/spawner/random/clothing/costume, -/obj/effect/spawner/random/clothing/costume, -/obj/effect/spawner/random/clothing/costume, -/obj/effect/turf_decal/tile/dark/diagonal_edge, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"dM" = ( -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/ruin/space/has_grav/hotel/bar) -"dN" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/hotel/guestroom) -"dP" = ( -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"dR" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/obj/structure/toilet{ - dir = 1 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"dT" = ( -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"dV" = ( -/obj/structure/table, -/obj/item/food/mint, -/obj/item/kitchen/rollingpin, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"dY" = ( -/obj/structure/table/wood, -/obj/item/stamp{ - pixel_x = 7; - pixel_y = 9 - }, -/obj/item/stamp/denied{ - pixel_x = 7; - pixel_y = 4 - }, -/obj/item/clipboard{ - pixel_x = -6; - pixel_y = 4 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -30 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/workroom) -"ea" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/pool) -"eb" = ( -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/hotel/power) -"ec" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/turf_decal/siding/purple{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"ed" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"ee" = ( -/obj/item/storage/medkit/fire, -/obj/item/storage/medkit/fire{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/structure/table, -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"ei" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/sauna) -"el" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/closet/secure_closet/freezer/meat{ - req_access = list("twin_nexus_staff") - }, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/ruin/space/has_grav/hotel/bar) -"em" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/structure/cable, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"en" = ( -/obj/structure/grille, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/custodial) -"ep" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"es" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/visible{ - dir = 9 - }, -/obj/machinery/power/solar_control{ - dir = 1 - }, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 6 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"et" = ( -/obj/effect/turf_decal/tile/dark/diagonal_edge, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"ex" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/carpet/green, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"ey" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"ez" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/turf_decal/siding/green{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"eA" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"eE" = ( -/obj/effect/spawner/liquids_spawner, -/turf/open/floor/iron/pool, -/area/ruin/space/has_grav/hotel/guestroom) -"eF" = ( -/obj/structure/disposaloutlet{ - dir = 4 - }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/workroom) -"eG" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/hotel/dock) -"eH" = ( -/obj/structure/table/glass, -/obj/item/flashlight/flare/candle/infinite{ - pixel_x = 6; - pixel_y = 5 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"eJ" = ( -/obj/machinery/door/airlock/external/glass, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/power) -"eN" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Hotel Maintenance" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel) -"eO" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"eP" = ( -/obj/effect/turf_decal/siding/green, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"eQ" = ( -/obj/machinery/airalarm/directional/north{ - pixel_y = 24 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"eR" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk, -/obj/effect/turf_decal/siding/dark_blue{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"eS" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/pool) -"eT" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/pool) -"eU" = ( -/obj/effect/spawner/random/vending/colavend, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"eV" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/dark_blue, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"eY" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/turf_decal/siding/dark_blue{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"fa" = ( -/obj/structure/sign/warning/no_smoking/circle/directional/north, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/dark_blue{ - dir = 1 - }, -/obj/structure/rack, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"fb" = ( -/obj/machinery/airalarm/directional/west, -/obj/structure/sink/directional/east, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom) -"fd" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/junction{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"fe" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 9 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"fg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"fh" = ( -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"fi" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/hotel/bar) -"fj" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Hotel 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/all/twin_nexus_staff, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/bar) -"fl" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/pool) -"fo" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"fq" = ( -/obj/machinery/vending/cigarette, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"fs" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/effect/turf_decal/tile/dark/opposingcorners, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"fu" = ( -/obj/structure/table/glass, -/obj/item/paper/pamphlet/ruin/spacehotel, -/obj/item/paper/pamphlet/ruin/spacehotel, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"fw" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 4 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"fy" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 1 - }, -/obj/machinery/button/curtain{ - id = "HotelRoom5Curtains"; - pixel_x = 24 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"fz" = ( -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"fA" = ( -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 4 - }, -/turf/open/floor/engine/air, -/area/ruin/space/has_grav/hotel/power) -"fB" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/engine/air, -/area/ruin/space/has_grav/hotel/power) -"fC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"fE" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/junction{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"fF" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -30 - }, -/obj/effect/turf_decal/siding/dark_green{ - dir = 8 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"fH" = ( -/obj/structure/toilet{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"fI" = ( -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"fK" = ( -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"fR" = ( -/obj/machinery/door/airlock/grunge{ - name = "Bar Backroom" - }, -/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"fS" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/structure/cable, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"fY" = ( -/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/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"gb" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"gd" = ( -/obj/structure/chair/sofa/corp/corner, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"ge" = ( -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, -/obj/structure/table/glass, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"gh" = ( -/obj/structure/hedge, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"gi" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"gj" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/cyan{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"gl" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"gp" = ( -/obj/structure/table/glass, -/obj/machinery/reagentgrinder, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"gq" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall, -/area/ruin/space/has_grav/hotel/power) -"gr" = ( -/obj/structure/table, -/obj/item/storage/medkit/toxin, -/obj/item/storage/medkit/toxin{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"gs" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/item/paper/pamphlet/ruin/spacehotel, -/obj/item/paper/pamphlet/ruin/spacehotel, -/obj/item/paper/pamphlet/ruin/spacehotel, -/obj/item/paper/pamphlet/ruin/spacehotel, -/obj/item/paper/pamphlet/ruin/spacehotel, -/obj/structure/table/glass, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"gt" = ( -/obj/structure/table/glass, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/machinery/button/door{ - id = "HotelRoom8"; - name = "Guest Door Lock"; - normaldoorcontrol = 1; - pixel_y = 2; - specialfunctions = 4 - }, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"gv" = ( -/obj/effect/mob_spawn/ghost_role/human/hotel_staff, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/effect/turf_decal/siding/dark_blue{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"gw" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"gy" = ( -/obj/structure/sink/directional/north, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"gB" = ( -/obj/structure/closet/crate/freezer, -/obj/item/food/meat/slab/human/mutant/plant, -/obj/item/food/meat/slab/human/mutant/plant, -/obj/item/food/meat/slab/human/mutant/lizard, -/obj/item/food/meat/slab/human/mutant/lizard, -/obj/item/food/meat/slab/xeno, -/obj/item/food/meat/slab/xeno, -/obj/item/food/meat/slab/pug, -/obj/item/food/meat/slab/pug, -/obj/item/food/meat/slab/pug, -/obj/item/food/meat/slab/pug, -/obj/item/food/meat/slab/pug, -/obj/item/food/meat/slab/pug, -/obj/item/food/meat/slab/pug, -/obj/item/food/meat/slab/bear, -/obj/item/food/meat/slab/bear, -/obj/item/food/meat/slab/bear, -/obj/item/food/meat/slab/bear, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/ruin/space/has_grav/hotel/bar) -"gE" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/workroom) -"gF" = ( -/obj/structure/chair/sofa/corp/right, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"gG" = ( -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"gH" = ( -/obj/machinery/airalarm/directional/north{ - pixel_y = 24 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"gI" = ( -/obj/structure/chair/sofa/corp/left, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"gJ" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 1 - }, -/obj/structure/extinguisher_cabinet{ - pixel_y = -30 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"gK" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/hotel/power) -"gL" = ( -/obj/item/kirbyplants/random, -/obj/machinery/airalarm/directional/north{ - pixel_y = 24 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"gM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel/custodial) -"gO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"gV" = ( -/obj/structure/table/wood/fancy/green, -/obj/item/newspaper{ - pixel_x = -9; - pixel_y = 12 - }, -/obj/item/paper_bin{ - pixel_x = 5; - pixel_y = 4 - }, -/obj/item/pen/fountain, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"gX" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/sauna) -"ha" = ( -/obj/structure/mirror{ - pixel_y = -32 - }, -/obj/structure/table, -/obj/item/gun/energy/e_gun/mini{ - pixel_x = 2; - pixel_y = -2 - }, -/obj/item/gun/energy/e_gun/mini{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/recharger, -/obj/item/restraints/handcuffs, -/obj/effect/turf_decal/siding/dark_blue, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"hb" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -30 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/pool) -"hc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"he" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/pen{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"hk" = ( -/obj/machinery/vending/boozeomat, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"hl" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"hm" = ( -/obj/structure/dresser, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"hn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/structure/cable, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel/pool) -"ho" = ( -/obj/structure/rack, -/obj/effect/spawner/random/clothing/beret_or_rabbitears, -/obj/effect/spawner/random/clothing/beret_or_rabbitears, -/obj/effect/spawner/random/clothing/beret_or_rabbitears, -/obj/effect/spawner/random/clothing/beret_or_rabbitears, -/obj/effect/spawner/random/clothing/beret_or_rabbitears, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/turf_decal/tile/dark/diagonal_edge, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"hp" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"hq" = ( -/obj/structure/table/glass, -/obj/item/paper/pamphlet/ruin/spacehotel, -/obj/item/paper/pamphlet/ruin/spacehotel, -/obj/effect/turf_decal/siding/dark{ - dir = 10 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel) -"hr" = ( -/obj/structure/hedge, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"hs" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"hu" = ( -/obj/machinery/chem_dispenser/drinks/fullupgrade{ - dir = 4 - }, -/obj/structure/table/reinforced/plastitaniumglass, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"hv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/coffeemaker, -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/glass/mug/nanotrasen{ - pixel_y = -9 - }, -/obj/item/coffee_cartridge/fancy{ - pixel_x = 10; - pixel_y = -7 - }, -/obj/machinery/button/door{ - id = "HotelRoom5"; - name = "Guest Door Lock"; - normaldoorcontrol = 1; - pixel_y = -30; - specialfunctions = 4 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"hw" = ( -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"hx" = ( -/obj/machinery/airalarm/directional/west, -/obj/machinery/light_switch{ - pixel_y = -24 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"hy" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/closet/secure_closet/personal, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"hA" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"hB" = ( -/obj/structure/chair/sofa/corp{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"hC" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"hE" = ( -/obj/structure/cable, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"hF" = ( -/obj/structure/chair/comfy/black{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"hH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/visible, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"hJ" = ( -/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ - dir = 4 - }, -/obj/structure/table/reinforced/plastitaniumglass, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"hK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/purple{ - dir = 9 - }, -/obj/effect/decal/cleanable/cobweb, -/mob/living/simple_animal/bot/cleanbot, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"hL" = ( -/obj/machinery/airalarm/directional/north{ - pixel_y = 24 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"hO" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/ruin/space/has_grav/hotel/pool) -"hP" = ( -/obj/item/bikehorn/rubberducky, -/obj/effect/spawner/liquids_spawner, -/turf/open/floor/iron/pool, -/area/ruin/space/has_grav/hotel/pool) -"hQ" = ( -/obj/structure/chair/sofa/corp{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"hS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"hT" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"hX" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/airalarm/directional/north{ - pixel_y = 24 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"hZ" = ( -/obj/effect/turf_decal/siding/green{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"id" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/item/toy/crayon/spraycan, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/coffee_cartridge/decaf{ - pixel_x = -7 - }, -/obj/item/coffee_cartridge/fancy{ - pixel_x = -7; - pixel_y = 9 - }, -/obj/item/reagent_containers/cup/glass/mug/nanotrasen{ - pixel_x = 6; - pixel_y = 10 - }, -/obj/machinery/button/door{ - id = "HotelRoom3"; - name = "Guest Door Lock"; - normaldoorcontrol = 1; - pixel_y = -30; - specialfunctions = 4 - }, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"if" = ( -/obj/structure/bed, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/pool) -"ih" = ( -/obj/machinery/light/floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"ii" = ( -/obj/structure/sink/directional/east, -/obj/structure/mirror{ - pixel_x = -31; - pixel_y = -3 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"ij" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Hotel Maintenance" - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/bar) -"il" = ( -/obj/machinery/door/firedoor, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"im" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4; - id_tag = "HotelRoom8" - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"in" = ( -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"is" = ( -/obj/machinery/door/airlock/external/glass, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/structure/cable, -/obj/structure/fans/tiny, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/power) -"it" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"iu" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"iv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/trinary/filter/atmos/o2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"iw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 10 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"ix" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"iy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock{ - name = "Bathroom" - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"iz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom) -"iA" = ( -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"iC" = ( -/obj/machinery/light, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"iK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/engineering{ - name = "Power Storage" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel/power) -"iL" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/junction/flip{ - dir = 1 - }, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"iM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/trunk, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"iN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ - dir = 10 - }, -/obj/effect/turf_decal/siding/wideplating_new/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"iO" = ( -/obj/machinery/vending/coffee, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"iP" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 4 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"iQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"iS" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"iX" = ( -/obj/structure/mirror{ - pixel_y = 32 - }, -/obj/structure/dresser, -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/obj/machinery/light/floor, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel/pool) -"iZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/south, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"jb" = ( -/obj/structure/displaycase/trophy, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"jc" = ( -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"jd" = ( -/obj/machinery/vending/snack, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"je" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/chair/sofa/corp/corner{ - dir = 1 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"jf" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -30 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/pool) -"ji" = ( -/obj/item/reagent_containers/cup/glass/shaker, -/obj/item/reagent_containers/cup/rag, -/obj/structure/table/reinforced/plastitaniumglass, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"jm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/carpet/neon/simple/black/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"jo" = ( -/obj/structure/table/wood/fancy/green, -/obj/effect/spawner/random/food_or_drink/three_course_meal, -/obj/item/kitchen/fork{ - pixel_x = -12; - pixel_y = 4 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"jq" = ( -/obj/machinery/light/floor, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"jw" = ( -/obj/machinery/door/airlock/public/glass, -/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, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"jy" = ( -/obj/structure/chair/sofa/corp{ - dir = 1 - }, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"jz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"jA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"jD" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"jE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/emcloset, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/custodial) -"jF" = ( -/obj/item/kirbyplants/random, -/obj/structure/extinguisher_cabinet{ - pixel_x = -30 - }, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"jG" = ( -/obj/structure/table, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/item/lightreplacer, -/obj/effect/turf_decal/siding/purple{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"jH" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/purple{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"jJ" = ( -/obj/structure/mop_bucket/janitorialcart, -/obj/item/mop, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/purple{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"jK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/junction/flip{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"jL" = ( -/obj/structure/table, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/purple{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"jO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel/custodial) -"jP" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"jQ" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/hotel/pool) -"jU" = ( -/obj/structure/mirror{ - pixel_y = 32 - }, -/obj/structure/sink/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel/pool) -"jY" = ( -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/pool) -"jZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"kb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/workroom) -"kc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet/green, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"ke" = ( -/obj/machinery/gibber, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/ruin/space/has_grav/hotel/bar) -"kg" = ( -/obj/structure/sink/directional/north, -/obj/machinery/airalarm/directional/west, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"kh" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"kj" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"kk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"kl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"km" = ( -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"kn" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/siding/purple{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"kq" = ( -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"kr" = ( -/obj/machinery/atmospherics/components/trinary/mixer/airmix/flipped, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"kt" = ( -/obj/machinery/door/airlock/wood{ - name = "Private Sauna" - }, -/obj/structure/fans/tiny, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom) -"ku" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/pump, -/obj/item/wrench, -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"kv" = ( -/obj/structure/table, -/obj/item/storage/toolbox/electrical, -/obj/item/clothing/gloves/color/yellow, -/obj/item/multitool, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/structure/cable, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 5 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"kw" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/carpet/green, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"kx" = ( -/turf/closed/wall/mineral/wood, -/area/ruin/space/has_grav/hotel/sauna) -"ky" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"kz" = ( -/obj/machinery/door/airlock/public/glass, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel) -"kA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"kB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"kC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel/custodial) -"kF" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -30 - }, -/obj/structure/dresser, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"kH" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/hotel/power) -"kI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/hotel/power) -"kK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/purple, -/obj/machinery/vending/wardrobe/jani_wardrobe, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"kL" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/keyed/hotel_room/two{ - id_tag = "HotelRoom2" - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"kM" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/bucket, -/obj/item/reagent_containers/spray/cleaner, -/obj/effect/turf_decal/siding/purple, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"kN" = ( -/obj/structure/table, -/obj/item/storage/bag/trash, -/obj/effect/turf_decal/siding/purple, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"kO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"kP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/airalarm/directional/north{ - pixel_y = 24 - }, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"kR" = ( -/obj/machinery/atmospherics/miner/oxygen, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/hotel/power) -"kT" = ( -/obj/structure/closet/secure_closet/personal/cabinet, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"kU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel/pool) -"kW" = ( -/obj/structure/table, -/obj/item/clothing/suit/apron, -/obj/item/clothing/suit/apron, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/siding/green{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"kX" = ( -/obj/machinery/door/airlock/external, -/obj/structure/fans/tiny, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/dock) -"kY" = ( -/obj/machinery/airalarm/directional/west, -/obj/structure/bed/double{ - dir = 4 - }, -/obj/item/bedsheet/random/double{ - dir = 1 - }, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"kZ" = ( -/obj/effect/mob_spawn/ghost_role/human/hotel_staff{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 30 - }, -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"la" = ( -/obj/structure/toilet{ - dir = 1 - }, -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"lb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark_green/corner, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"lc" = ( -/obj/machinery/power/apc/auto_name/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/sauna) -"le" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/sauna) -"lf" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/sauna) -"lg" = ( -/obj/structure/table/glass, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"lh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"ll" = ( -/obj/machinery/light_switch{ - pixel_y = 24 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/sauna) -"ln" = ( -/obj/machinery/airalarm/directional/north{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/pool) -"lp" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 4; - name = "O2 Outlet Pump" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 10 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"lr" = ( -/obj/structure/sauna_oven{ - fuel_amount = -1; - water_amount = -1 - }, -/obj/item/stack/sheet/mineral/wood/fifty, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/sauna) -"lx" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/turf/open/indestructible/hotelwood, -/area/ruin/space/has_grav/hotel/pool) -"lz" = ( -/obj/machinery/airalarm/directional/north{ - pixel_y = 24 - }, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"lA" = ( -/obj/machinery/atmospherics/components/binary/volume_pump, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/wideplating_new/end, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"lD" = ( -/obj/machinery/door/window/left{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"lF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/keyed/hotel_room/six{ - id_tag = "HotelRoom6" - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"lK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"lL" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"lN" = ( -/obj/machinery/light/floor, -/obj/structure/cable, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating_new/dark, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"lO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"lP" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -30 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"lQ" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable, -/turf/template_noop, -/area/ruin/solars/hotel/solars) -"lS" = ( -/obj/structure/table/wood, -/obj/structure/bedsheetbin, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/sauna) -"lT" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/table/glass, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"lU" = ( -/obj/machinery/airalarm/directional/north{ - pixel_y = 24 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/sauna) -"lX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"ma" = ( -/obj/effect/turf_decal/siding/dark/corner{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"mb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/workroom) -"mc" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"md" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/hotel/custodial) -"me" = ( -/obj/structure/mineral_door/wood, -/obj/structure/fans/tiny, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/sauna) -"mi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"mj" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/closet/secure_closet/personal/wall{ - pixel_y = 28 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/pool) -"mk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/pool) -"ml" = ( -/obj/machinery/light/small, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/sauna) -"mn" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 30 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"mr" = ( -/obj/machinery/airalarm/directional/west, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"ms" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/button/door{ - id = "HotelRoom1"; - name = "Guest Door Lock"; - normaldoorcontrol = 1; - pixel_y = 31; - specialfunctions = 4 - }, -/turf/open/floor/carpet/neon/simple/black/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"mt" = ( -/obj/structure/chair/pew{ - dir = 8; - pixel_x = 5 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/sauna) -"mu" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"mx" = ( -/obj/machinery/door/airlock{ - name = "Custodial Closet" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/custodial) -"mA" = ( -/obj/structure/table/glass, -/obj/effect/turf_decal/siding/dark{ - dir = 9 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel) -"mD" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"mE" = ( -/obj/item/kirbyplants{ - icon_state = "plant-25" - }, -/obj/effect/turf_decal/siding/purple{ - dir = 10 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"mF" = ( -/obj/structure/grille, -/obj/structure/lattice, -/turf/template_noop, -/area/template_noop) -"mG" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"mH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"mI" = ( -/obj/machinery/light/floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"mJ" = ( -/obj/item/kirbyplants/random, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"mL" = ( -/obj/structure/closet/crate, -/obj/item/bedsheet/patriot, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"mM" = ( -/obj/machinery/light, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/pool) -"mN" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/firedoor, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/pool) -"mO" = ( -/obj/structure/table, -/obj/item/reagent_containers/spray/cleaner, -/obj/effect/turf_decal/siding/blue{ - dir = 1 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"mP" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/sauna) -"mQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/dark{ - dir = 5 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"mR" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"mT" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal/bin, -/turf/open/floor/carpet/neon/simple/black/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"mX" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"mY" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"nc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/machinery/coffeemaker, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"nf" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"nh" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"ni" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"nj" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"nk" = ( -/obj/structure/chair/greyscale, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark_blue{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"nl" = ( -/obj/machinery/door/airlock/external, -/obj/structure/fans/tiny, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/dock) -"nr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/item/kirbyplants/random, -/obj/machinery/light_switch{ - pixel_y = -24 - }, -/turf/open/floor/carpet/green, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"nt" = ( -/obj/effect/spawner/random/vending/colavend, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"nx" = ( -/obj/structure/chair/greyscale, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"nC" = ( -/obj/structure/bed/double, -/obj/item/bedsheet/random/double, -/obj/machinery/button/curtain{ - id = "HotelRoom2Curtains"; - pixel_x = 22; - pixel_y = 1 - }, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"nD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"nJ" = ( -/obj/structure/table, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/rods{ - amount = 60 - }, -/obj/item/stack/sheet/plasteel/twenty, -/obj/item/stack/sheet/rglass{ - amount = 50 - }, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"nL" = ( -/obj/machinery/light{ - dir = 8; - light_color = "#e8eaff" - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom) -"nN" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"nO" = ( -/obj/structure/decorative/shelf/alcohol_small, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"nQ" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"nS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/table, -/obj/item/storage/toolbox/mechanical, -/obj/machinery/light_switch{ - pixel_y = 24 - }, -/obj/item/clothing/head/utility/welding, -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"nU" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/open/floor/engine/air, -/area/ruin/space/has_grav/hotel/power) -"nW" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/door/airlock{ - name = "Unisex Changing" - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/pool) -"nX" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"nZ" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/oxygen_input{ - dir = 4 - }, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/hotel/power) -"oa" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/item/cigbutt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/north{ - pixel_y = 24 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/workroom) -"oe" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"ok" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"ol" = ( -/obj/machinery/light/floor, -/obj/effect/turf_decal/siding/dark/end{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"op" = ( -/obj/structure/noticeboard{ - pixel_x = -33 - }, -/obj/structure/table, -/obj/machinery/microwave, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark_blue{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"or" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"ov" = ( -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/hotel/dock) -"oA" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel/pool) -"oD" = ( -/obj/machinery/seed_extractor, -/obj/effect/turf_decal/siding/green, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"oF" = ( -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"oH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"oI" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/light, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"oK" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 5 - }, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/hotel) -"oM" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/obj/effect/turf_decal/siding/wood, -/turf/open/indestructible/hotelwood, -/area/ruin/space/has_grav/hotel/pool) -"oT" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/ruin/space/has_grav/hotel/bar) -"oV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom) -"oW" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/item/flashlight/lamp/green, -/obj/machinery/button/curtain{ - id = "HotelRoom1Curtains"; - pixel_x = -21 - }, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"oX" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/curtain/cloth/fancy/mechanical{ - icon_state = "bounty-open"; - icon_type = "bounty"; - id = "HotelRoom6Curtains"; - name = "curtain" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"oZ" = ( -/obj/structure/table, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/pool) -"pa" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"pc" = ( -/mob/living/basic/bat{ - desc = "Fronk's the beloved space bat of the space hotel, if found make sure to return him!"; - name = "Fronk" - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/workroom) -"pe" = ( -/obj/structure/chair/sofa/corp/corner{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"pf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"pk" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/custodial) -"po" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/closet/secure_closet/personal/wall{ - pixel_y = 28 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/pool) -"pA" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"pC" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"pE" = ( -/obj/structure/closet, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"pH" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 6 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"pK" = ( -/obj/structure/cable, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"pL" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/closet/secure_closet/personal/cabinet, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"pM" = ( -/obj/structure/chair/pew/left{ - dir = 1 - }, -/obj/machinery/light_switch{ - pixel_y = -24 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom) -"pN" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/caution/blue{ - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/ruin/space/has_grav/hotel/pool) -"pR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"pS" = ( -/obj/structure/holopay, -/obj/effect/turf_decal/bot_blue, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 4 - }, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/hotel) -"pV" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel/pool) -"pX" = ( -/obj/effect/turf_decal/siding/dark_green{ - dir = 8 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"qd" = ( -/obj/structure/hedge, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"qf" = ( -/obj/structure/table, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/crowbar, -/obj/item/folded_navigation_gigabeacon, -/obj/effect/turf_decal/siding/dark_blue{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"qh" = ( -/obj/effect/turf_decal/siding/dark_blue{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"qi" = ( -/obj/effect/turf_decal/siding/blue, -/obj/machinery/light, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"qj" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/pool) -"ql" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/carpet/green, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"qo" = ( -/obj/machinery/smartfridge, -/obj/effect/turf_decal/siding/green{ - dir = 10 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"qq" = ( -/obj/machinery/airalarm/directional/south{ - pixel_y = -24 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"qr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel/pool) -"qs" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/hotel/power) -"qv" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"qx" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/closet/secure_closet/personal/cabinet, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"qA" = ( -/obj/machinery/hydroponics/constructable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"qB" = ( -/obj/structure/closet/l3closet/janitor, -/obj/effect/turf_decal/siding/purple{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"qG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"qI" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel) -"qN" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/ruin/space/has_grav/hotel/pool) -"qQ" = ( -/obj/structure/table, -/obj/item/storage/medkit/regular{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/storage/medkit/regular, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel) -"qS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"qU" = ( -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"qV" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/ruin/space/has_grav/hotel/pool) -"qX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock{ - name = "Bathroom" - }, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"qY" = ( -/obj/structure/kitchenspike, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/ruin/space/has_grav/hotel/bar) -"qZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/carpet/green, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"rd" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/curtain/cloth/fancy/mechanical{ - icon_state = "bounty-open"; - icon_type = "bounty"; - id = "HotelRoom7Curtains2"; - name = "curtain" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/guestroom) -"rg" = ( -/obj/structure/cable, -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel/pool) -"rh" = ( -/obj/structure/chair/sofa/corp{ - dir = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"rn" = ( -/obj/structure/closet/secure_closet/personal/cabinet, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"ro" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"rp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 9 - }, -/obj/effect/turf_decal/siding/green{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"rr" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/carpet/green, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"rw" = ( -/obj/effect/turf_decal/siding/dark, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"ry" = ( -/obj/structure/mirror{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"rB" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/light{ - dir = 4 - }, -/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/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"rC" = ( -/obj/item/kirbyplants/random, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/carpet/neon/simple/black/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"rD" = ( -/obj/machinery/light_switch{ - pixel_y = -24 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"rE" = ( -/obj/item/flashlight/lamp/green, -/obj/structure/table/reinforced/plastitaniumglass, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"rG" = ( -/obj/structure/table/wood/fancy/green, -/obj/item/modular_computer/laptop, -/obj/item/phone{ - pixel_x = 9; - pixel_y = 10 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"rI" = ( -/obj/machinery/vending/boozeomat, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"rL" = ( -/obj/structure/disposalpipe/trunk, -/obj/machinery/disposal/bin, -/obj/machinery/airalarm/directional/north{ - pixel_y = 24 - }, -/obj/effect/turf_decal/siding/purple{ - dir = 5 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"rP" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/disposal/bin, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"rR" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/indestructible/hotelwood, -/area/ruin/space/has_grav/hotel/pool) -"rT" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/workroom) -"rU" = ( -/obj/machinery/door/airlock/grunge{ - name = "Hotel Medical Storage" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"rV" = ( -/obj/machinery/modular_computer/preset/civilian{ - dir = 8 - }, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/turf/open/floor/carpet/executive, -/area/ruin/space/has_grav/hotel/workroom) -"rW" = ( -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/pool) -"rY" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Gift Shop" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"sa" = ( -/obj/structure/chair/comfy/black, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"sb" = ( -/obj/machinery/vending/wallmed{ - pixel_x = -32 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark_blue{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"sc" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/item/stack/sheet/mineral/wood/fifty, -/obj/item/stack/sheet/mineral/wood/fifty, -/obj/item/reagent_containers/cup/bucket/wooden, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom) -"sd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"se" = ( -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom) -"sf" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/hotel/dock) -"sg" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/glass/bottle/whiskey{ - pixel_x = -5; - pixel_y = 4 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = 7; - pixel_y = 5 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = 7; - pixel_y = 12 - }, -/turf/open/floor/carpet/executive, -/area/ruin/space/has_grav/hotel/workroom) -"sh" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"sj" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet/green, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"sm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/carpet/green, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"so" = ( -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"sr" = ( -/obj/item/soap/deluxe, -/obj/machinery/shower/directional/north, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"ss" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"st" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/chair/sofa/corp/corner{ - dir = 1 - }, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"sC" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 6 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"sD" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel) -"sE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"sK" = ( -/turf/open/floor/engine/air, -/area/ruin/space/has_grav/hotel/power) -"sN" = ( -/obj/structure/grille, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/hotel/power) -"sS" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"sT" = ( -/obj/structure/chair/stool/bar, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"sU" = ( -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"sX" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/turf/open/floor/carpet/green, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"sZ" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/carpet/executive, -/area/ruin/space/has_grav/hotel/workroom) -"tb" = ( -/obj/structure/disposalpipe/trunk, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/siding/dark_green{ - dir = 4 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"td" = ( -/obj/structure/chair/sofa/corp{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"th" = ( -/obj/machinery/door/airlock, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"ti" = ( -/obj/structure/drain/big, -/obj/machinery/shower/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel/pool) -"tl" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"ty" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/ruin/space/has_grav/hotel/bar) -"tB" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wideplating_new/corner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"tC" = ( -/obj/structure/table/glass, -/obj/item/paper/pamphlet/ruin/spacehotel, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"tK" = ( -/obj/machinery/vending/coffee, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"tN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"tP" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/item/storage/fancy/candle_box/pear, -/obj/item/storage/fancy/candle_box/vanilla, -/obj/effect/spawner/random/entertainment/lighter, -/obj/item/wrench, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"tQ" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/tile/dark/diagonal_edge, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"tS" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/carpet/executive, -/area/ruin/space/has_grav/hotel/workroom) -"tU" = ( -/obj/structure/hedge, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"tW" = ( -/obj/effect/turf_decal/siding/dark/corner, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/hotel) -"tX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/tile/dark/diagonal_edge, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"ud" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"ug" = ( -/obj/structure/sink/kitchen/directional/south, -/obj/effect/turf_decal/siding/dark_green{ - dir = 5 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"ui" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 4 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"uj" = ( -/obj/structure/hedge, -/obj/effect/turf_decal/siding/dark, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"ul" = ( -/obj/structure/cable, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"um" = ( -/obj/structure/chair/pew/right{ - dir = 8; - pixel_x = 5 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom) -"ur" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"us" = ( -/obj/effect/turf_decal/siding/dark/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"uC" = ( -/obj/structure/toilet{ - dir = 1 - }, -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/obj/structure/window/reinforced/tinted/spawner/directional/west, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom) -"uD" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/item/stock_parts/cell/high, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"uF" = ( -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/custodial) -"uJ" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "garbage" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/workroom) -"uM" = ( -/obj/structure/table/glass, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel) -"uN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"uO" = ( -/obj/structure/table/glass, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"uQ" = ( -/obj/structure/closet, -/obj/item/tickle_feather, -/obj/item/kinky_shocker, -/obj/item/storage/medkit/regular, -/obj/item/clothing/sextoy/buttplug{ - pixel_y = 4 - }, -/obj/item/clothing/sextoy/dildo{ - pixel_x = -6; - pixel_y = 7 - }, -/obj/item/spanking_pad, -/obj/item/clothing/mask/leatherwhip, -/obj/item/condom_pack, -/obj/item/condom_pack, -/obj/item/condom_pack, -/obj/item/condom_pack, -/obj/item/electropack/shockcollar, -/obj/item/storage/box/strippole_kit, -/obj/item/wrench, -/obj/item/stack/shibari_rope/glow, -/obj/item/storage/box/shibari_stand, -/obj/item/stack/shibari_rope/glow/full, -/obj/item/storage/box/strippole_kit, -/obj/item/bdsm_candle, -/obj/item/bdsm_candle, -/obj/item/bdsm_candle, -/obj/item/bdsm_bed_kit, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"uR" = ( -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"uU" = ( -/obj/machinery/door/poddoor/massdriver_trash, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/workroom) -"uW" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"va" = ( -/obj/structure/table/wood/fancy/green, -/obj/item/reagent_containers/cup/glass/drinkingglass{ - pixel_x = -3 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass{ - pixel_x = -3; - pixel_y = 12 - }, -/obj/item/reagent_containers/cup/glass/bottle/wine/unlabeled{ - pixel_x = 6; - pixel_y = 9 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"vn" = ( -/obj/structure/table/glass, -/obj/item/flashlight/flare/candle/infinite{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/flashlight/flare/candle/infinite{ - pixel_x = 6; - pixel_y = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"vo" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -30 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"vr" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/effect/turf_decal/caution/blue{ - dir = 4 - }, -/turf/open/indestructible/hotelwood, -/area/ruin/space/has_grav/hotel/pool) -"vt" = ( -/obj/machinery/airalarm/directional/south{ - pixel_y = -24 - }, -/obj/structure/sink/kitchen/directional/west, -/obj/effect/turf_decal/siding/green{ - dir = 6 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"vu" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"vw" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal/bin, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"vB" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"vG" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"vH" = ( -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom) -"vI" = ( -/obj/structure/table, -/obj/item/reagent_containers/condiment/soysauce, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"vK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/carpet/green, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"vN" = ( -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/hotel/power) -"vX" = ( -/obj/structure/bed/double{ - dir = 4 - }, -/obj/item/bedsheet/random/double{ - dir = 1 - }, -/turf/open/floor/carpet/neon/simple/black/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"vY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"wc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/siding/dark_green{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"wd" = ( -/obj/item/kirbyplants/random, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"wm" = ( -/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/effect/turf_decal/siding/wideplating_new{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"wu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/pool) -"ww" = ( -/obj/structure/table/wood, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"wx" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/tile/dark/diagonal_edge, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"wy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"wB" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/carpet/green, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"wC" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"wG" = ( -/obj/structure/bed/double, -/obj/item/bedsheet/random/double, -/obj/machinery/button/curtain{ - id = "HotelRoom7Curtains1"; - pixel_x = 24 - }, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"wH" = ( -/obj/item/hand_labeler, -/obj/item/stack/package_wrap, -/obj/structure/table/wood, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/workroom) -"wI" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/sign/poster/contraband/random/directional/north, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"wK" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/grunge{ - name = "Hotel Staff Room" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel) -"wQ" = ( -/obj/structure/table/glass, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"wS" = ( -/obj/effect/mob_spawn/ghost_role/human/hotel_staff/manager{ - dir = 1 - }, -/turf/open/floor/carpet/executive, -/area/ruin/space/has_grav/hotel/workroom) -"wT" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/wideplating_new, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"wV" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"wZ" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/curtain/cloth/fancy/mechanical{ - icon_state = "bounty-open"; - icon_type = "bounty"; - id = "HotelRoom2Curtains"; - name = "curtain" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"xc" = ( -/obj/structure/dresser, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"xd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/workroom) -"xe" = ( -/obj/structure/chair/sofa/corp/right, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"xi" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/firecloset, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/custodial) -"xl" = ( -/obj/structure/sign/warning/vacuum/directional/south, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/wideplating_new, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"xo" = ( -/obj/structure/closet/cabinet, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"xw" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/indestructible/hotelwood, -/area/ruin/space/has_grav/hotel/pool) -"xx" = ( -/obj/machinery/shower/directional/east, -/obj/item/soap/deluxe, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"xz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"xD" = ( -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"xH" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/curtain/cloth/fancy/mechanical{ - icon_state = "bounty-open"; - icon_type = "bounty"; - id = "HotelRoom4Curtains"; - name = "curtain" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"xJ" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 5 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"xN" = ( -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/workroom) -"xR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"xU" = ( -/obj/machinery/door/airlock{ - name = "Sauna" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/pool) -"xV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"xW" = ( -/obj/structure/sauna_oven{ - fuel_amount = -1; - water_amount = -1 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom) -"xX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"xZ" = ( -/obj/structure/disposalpipe/segment, -/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/grunge{ - name = "Manager's Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff/manager, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel/workroom) -"ya" = ( -/obj/structure/chair/sofa/corp/corner{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"ye" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"yg" = ( -/obj/structure/tank_dispenser/oxygen, -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"yk" = ( -/obj/machinery/door/airlock{ - name = "Unisex Changing" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/pool) -"yl" = ( -/obj/effect/spawner/random/vending/snackvend, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"yp" = ( -/obj/effect/mob_spawn/ghost_role/human/hotel_staff{ - dir = 1 - }, -/obj/machinery/light, -/obj/effect/turf_decal/siding/dark_blue, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"ys" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 4 - }, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"yu" = ( -/obj/machinery/chem_master/condimaster{ - name = "CondiMaster Neo" - }, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/ruin/space/has_grav/hotel/bar) -"yv" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/turf_decal/siding/purple{ - dir = 6 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"yw" = ( -/obj/structure/closet/crate/bin, -/obj/structure/extinguisher_cabinet{ - pixel_y = -30 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/dark_blue{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"yy" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"yz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/door/airlock{ - name = "Bathroom" - }, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"yA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"yC" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"yE" = ( -/turf/open/floor/glass/reinforced, -/area/ruin/space/has_grav/hotel) -"yL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/hotel/power) -"yM" = ( -/obj/structure/toilet{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/window/spawner/directional/north, -/obj/machinery/airalarm/directional/west, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"yT" = ( -/obj/structure/table/glass, -/obj/item/paper/pamphlet/ruin/spacehotel, -/obj/item/paper/pamphlet/ruin/spacehotel, -/obj/effect/turf_decal/siding/dark{ - dir = 5 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel) -"yU" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"yX" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"yZ" = ( -/obj/structure/table, -/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/effect/turf_decal/siding/blue{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"zj" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 6 - }, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/hotel) -"zl" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/corner, -/turf/open/indestructible/hotelwood, -/area/ruin/space/has_grav/hotel/pool) -"zp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"zr" = ( -/obj/structure/table, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"zv" = ( -/obj/machinery/light_switch{ - pixel_x = 23 - }, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel/pool) -"zw" = ( -/obj/structure/table, -/obj/item/storage/medkit/o2, -/obj/item/storage/medkit/o2{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 9 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"zE" = ( -/obj/structure/closet/crate, -/obj/effect/turf_decal/bot, -/obj/item/clothing/head/cowboy/skyrat/cattleman{ - greyscale_colors = "#F2B0E7#EB88CB" - }, -/obj/item/clothing/head/cowboy/skyrat/cattleman{ - greyscale_colors = "#FFFFFF#FFFFFF" - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"zH" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Hotel Maintenance" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel) -"zP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/light, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/sauna) -"zQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"zR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"zS" = ( -/obj/effect/turf_decal/siding/wood/corner, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"zU" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 4 - }, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"zZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/table/wood, -/obj/item/coffee_cartridge/fancy{ - pixel_x = -7; - pixel_y = 9 - }, -/obj/item/coffee_cartridge/decaf{ - pixel_x = -7 - }, -/obj/item/reagent_containers/cup/glass/mug/nanotrasen{ - pixel_x = 6; - pixel_y = 10 - }, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"Ah" = ( -/obj/machinery/door/airlock/grunge{ - name = "Hydroponics" - }, -/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"Ai" = ( -/obj/machinery/airalarm/directional/west, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"Al" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/keyed/hotel_room/seven{ - id_tag = "HotelRoom7" - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel/guestroom) -"Ao" = ( -/obj/structure/table/wood, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/item/flashlight/lamp/green{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/item/key_card/hotel_room/master, -/turf/open/floor/carpet/executive, -/area/ruin/space/has_grav/hotel/workroom) -"Au" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"AA" = ( -/obj/structure/chair/stool/bar, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"AF" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/workroom) -"AG" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/turf_decal/siding/green{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"AI" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -30 - }, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"AT" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/hotel/dock) -"AW" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/curtain/cloth/fancy/mechanical{ - icon_state = "bounty-open"; - icon_type = "bounty"; - id = "HotelRoom7Curtains1"; - name = "curtain" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/guestroom) -"AX" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 10 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"AY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/wideplating_new, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"AZ" = ( -/obj/machinery/light/floor, -/obj/effect/turf_decal/siding/thinplating_new/dark/end{ - dir = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"Ba" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"Be" = ( -/obj/structure/closet/crate/hydroponics, -/obj/item/wirecutters, -/obj/item/reagent_containers/cup/bucket, -/obj/item/cultivator, -/obj/item/wrench, -/obj/item/shovel/spade, -/obj/item/gun/energy/floragun, -/obj/item/watertank, -/obj/effect/turf_decal/siding/green{ - dir = 5 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"Bk" = ( -/obj/structure/chair/sofa/corp/corner, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"Bn" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/carpet/neon/simple/black/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"Bp" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"Bu" = ( -/obj/machinery/photocopier, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/workroom) -"Bx" = ( -/obj/structure/chair/stool, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/purple, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"By" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"BA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/airalarm/directional/north{ - pixel_y = 24 - }, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"BB" = ( -/obj/machinery/light/small, -/obj/effect/turf_decal/siding/purple, -/obj/structure/closet/crate/trashcart, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"BC" = ( -/obj/structure/table/glass, -/obj/machinery/door/window{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"BF" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 9 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"BG" = ( -/obj/structure/reagent_dispensers/cooking_oil, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/ruin/space/has_grav/hotel/bar) -"BI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/dark_blue{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"BM" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/pool) -"BN" = ( -/obj/machinery/vending/imported, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"BO" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/effect/turf_decal/siding/dark_green{ - dir = 8 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"BP" = ( -/obj/structure/table, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"BT" = ( -/obj/machinery/computer/cryopod/directional/north, -/obj/effect/turf_decal/tile/dark/opposingcorners, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"BU" = ( -/obj/machinery/light_switch{ - pixel_y = -24 - }, -/obj/effect/turf_decal/tile/dark/opposingcorners, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"BY" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/carpet/neon/simple/black/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"Ca" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/siding/green{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"Cb" = ( -/obj/effect/mob_spawn/ghost_role/human/hotel_staff{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark_blue, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"Cc" = ( -/obj/machinery/door/airlock/grunge{ - name = "Kitchen" - }, -/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"Ce" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/workroom) -"Ci" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/filingcabinet, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"Cj" = ( -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"Cr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"Cs" = ( -/obj/machinery/airalarm/directional/north{ - pixel_y = 24 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/cobweb, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"Cu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"Cv" = ( -/obj/structure/rack, -/obj/effect/spawner/random/clothing/costume, -/obj/effect/spawner/random/clothing/costume, -/obj/effect/spawner/random/clothing/costume, -/obj/effect/spawner/random/clothing/costume, -/obj/effect/spawner/random/clothing/costume, -/obj/machinery/light, -/obj/effect/turf_decal/tile/dark/diagonal_edge, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"Cw" = ( -/obj/machinery/airalarm/directional/west, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/button/door{ - id = "HotelRoom7"; - name = "Guest Door Lock"; - normaldoorcontrol = 1; - pixel_y = -30; - specialfunctions = 4 - }, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"CC" = ( -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/dock) -"CD" = ( -/obj/machinery/vending/dinnerware, -/obj/effect/turf_decal/siding/dark_green{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"CI" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 10 - }, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/hotel) -"CO" = ( -/obj/structure/cable, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"CQ" = ( -/obj/machinery/washing_machine, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"CT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock{ - name = "Bathroom" - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"CZ" = ( -/obj/effect/turf_decal/siding/dark_green/corner{ - dir = 4 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"Da" = ( -/obj/structure/table/glass, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel) -"Dd" = ( -/obj/structure/chair/greyscale, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"De" = ( -/obj/effect/turf_decal/siding/dark/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark/corner, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/hotel) -"Df" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/keyed/hotel_room/one{ - id_tag = "HotelRoom1" - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"Dg" = ( -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"Dk" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/power) -"Dm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"Do" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/visible{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/hotel/power) -"Dp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/table/reinforced/plastitaniumglass, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"Ds" = ( -/obj/machinery/light, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel/pool) -"Dt" = ( -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"Dv" = ( -/obj/structure/mirror{ - pixel_y = 32 - }, -/obj/structure/sink/directional/south, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"Dw" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"Dy" = ( -/obj/item/kirbyplants/random, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"DA" = ( -/obj/structure/closet/secure_closet/personal/cabinet, -/turf/open/floor/carpet/neon/simple/black/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"DB" = ( -/obj/structure/table/glass, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"DC" = ( -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 4 - }, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/hotel/power) -"DF" = ( -/obj/machinery/conveyor_switch/oneway{ - id = "garbage"; - name = "disposal conveyor" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/workroom) -"DH" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/workroom) -"DL" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"DM" = ( -/obj/structure/closet/crate, -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"DN" = ( -/obj/structure/sink/directional/north, -/obj/structure/window/reinforced/tinted/spawner/directional/west, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"DQ" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"DR" = ( -/obj/machinery/light_switch{ - pixel_y = 24 - }, -/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, -/turf/open/floor/carpet/neon/simple/black/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"DV" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"Ed" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/pool) -"Ef" = ( -/obj/structure/table/glass, -/obj/item/stack/package_wrap, -/obj/item/hand_labeler, -/obj/effect/turf_decal/siding/dark{ - dir = 9 - }, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/hotel) -"Eg" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"Ek" = ( -/obj/structure/reagent_dispensers/fueltank/large, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/workroom) -"En" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"Eq" = ( -/obj/structure/closet/crate, -/obj/effect/turf_decal/bot, -/obj/item/clothing/accessory/maidapron, -/obj/item/clothing/accessory/maidapron, -/obj/item/clothing/under/costume/maid, -/obj/item/clothing/under/costume/maid, -/obj/item/clothing/head/costume/skyrat/maid, -/obj/item/clothing/head/costume/skyrat/maid, -/obj/item/clothing/head/costume/maidheadband, -/obj/item/clothing/head/costume/maidheadband, -/obj/item/clothing/gloves/maid, -/obj/item/clothing/gloves/maid, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"Es" = ( -/obj/structure/cable, -/turf/open/floor/carpet/executive, -/area/ruin/space/has_grav/hotel/workroom) -"Eu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"EA" = ( -/obj/machinery/door/airlock{ - name = "Sauna" - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/pool) -"EC" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "garbage" - }, -/obj/machinery/door/poddoor/preopen{ - id = "Disposal Exit"; - name = "Disposal Exit Vent" - }, -/obj/structure/fans/tiny/invisible, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/workroom) -"EH" = ( -/obj/machinery/door/window/right/directional/east{ - req_access = list("twin_nexus_staff") - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"EI" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/power) -"EM" = ( -/obj/structure/closet/crate, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/shoes/sandal, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/pool) -"EP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"ET" = ( -/obj/machinery/vending/imported/tiziran, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"EV" = ( -/obj/structure/closet/crate/freezer, -/obj/item/food/meat/slab/human/mutant/plant, -/obj/item/food/meat/slab/human/mutant/plant, -/obj/item/food/meat/slab/human/mutant/lizard, -/obj/item/food/meat/slab/human/mutant/lizard, -/obj/item/food/meat/slab/xeno, -/obj/item/food/meat/slab/xeno, -/obj/item/food/meat/slab/pug, -/obj/item/food/meat/slab/pug, -/obj/item/food/meat/slab/pug, -/obj/item/food/meat/slab/pug, -/obj/item/food/meat/slab/pug, -/obj/item/food/meat/slab/pug, -/obj/item/food/meat/slab/pug, -/obj/item/food/meat/slab/bear, -/obj/item/food/meat/slab/bear, -/obj/item/food/meat/slab/bear, -/obj/item/food/meat/slab/bear, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/ruin/space/has_grav/hotel/bar) -"EW" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"EX" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 9 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"Fc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"Fg" = ( -/obj/structure/cable, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel/pool) -"Fl" = ( -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"Fm" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4; - id_tag = "HotelRoom8" - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"Fr" = ( -/obj/machinery/button/curtain{ - id = "HotelRoom7Curtains2"; - pixel_x = 24 - }, -/obj/structure/chair/pew/left{ - dir = 8; - pixel_x = 5 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom) -"Ft" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 5 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"Fy" = ( -/obj/structure/table/glass, -/obj/effect/turf_decal/siding/dark{ - dir = 6 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel) -"Fz" = ( -/obj/structure/chair/sofa/corp, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"FJ" = ( -/obj/structure/sink/kitchen/directional/west, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/turf_decal/siding/dark_green{ - dir = 6 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"FK" = ( -/obj/machinery/light, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/sauna) -"FM" = ( -/obj/item/toy/cards/deck, -/obj/item/toy/cards/deck, -/obj/item/toy/cards/deck, -/obj/structure/closet/crate, -/obj/item/toy/cards/deck/kotahi, -/obj/item/toy/cards/deck/kotahi, -/obj/item/toy/cards/deck/tarot, -/obj/item/toy/cards/deck/tarot, -/obj/item/toy/cards/deck/cas/black, -/obj/item/toy/cards/deck/cas/black, -/obj/item/toy/cards/deck/cas/black, -/obj/item/toy/cards/deck/kotahi, -/obj/item/toy/cards/deck/tarot, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"FQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/disposal/bin, -/turf/open/floor/carpet/green, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"FV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light, -/obj/effect/turf_decal/siding/dark_green, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"Ga" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green, -/obj/item/storage/fancy/candle_box/mint, -/obj/effect/spawner/random/entertainment/lighter, -/obj/item/wrench, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"Gd" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 6 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"Gj" = ( -/obj/machinery/door/window, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel/pool) -"Gk" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"Gv" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/effect/turf_decal/caution/blue{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/ruin/space/has_grav/hotel/pool) -"Gw" = ( -/obj/structure/closet/secure_closet/freezer/meat{ - req_access = list("twin_nexus_staff") - }, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/ruin/space/has_grav/hotel/bar) -"Gx" = ( -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 1 - }, -/obj/structure/lattice, -/turf/template_noop, -/area/template_noop) -"Gz" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 4; - name = "N2 Outlet Pump" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"GC" = ( -/obj/machinery/space_heater, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/workroom) -"GD" = ( -/obj/machinery/light/floor, -/obj/effect/turf_decal/siding/dark/end, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"GF" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"GG" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"GH" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"GI" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"GJ" = ( -/obj/structure/closet/secure_closet/personal, -/obj/item/storage/box/stockparts/deluxe, -/obj/item/storage/box/stockparts/deluxe, -/obj/item/device/traitor_announcer, -/obj/effect/spawner/random/engineering/flashlight, -/obj/item/device/traitor_announcer, -/obj/item/crowbar, -/obj/item/radio/headset/headset_faction/bowman, -/turf/open/floor/carpet/executive, -/area/ruin/space/has_grav/hotel/workroom) -"GK" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"GL" = ( -/obj/item/reagent_containers/condiment/rice, -/obj/item/reagent_containers/condiment/rice, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/flour, -/obj/structure/closet/secure_closet/freezer/kitchen{ - req_access = list("twin_nexus_staff") - }, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/effect/turf_decal/siding/dark_green{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"GN" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom) -"GO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/supply/visible, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"GR" = ( -/obj/item/soap/deluxe, -/obj/machinery/shower/directional/north, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"GU" = ( -/obj/structure/closet/crate/bin, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"GX" = ( -/obj/machinery/vending/imported/mothic, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"Hb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"Hd" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"Hg" = ( -/obj/structure/table, -/obj/machinery/reagentgrinder, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"Hm" = ( -/obj/machinery/smartfridge/food, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"Ho" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"Hp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom) -"Hq" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"Hs" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"HA" = ( -/obj/structure/bed/double, -/obj/item/bedsheet/centcom/double, -/obj/machinery/button/curtain{ - id = "HotelRoom4Curtains"; - pixel_x = 1; - pixel_y = 23 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"HD" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/structure/table, -/obj/item/reagent_containers/condiment/enzyme{ - layer = 5 - }, -/obj/item/reagent_containers/cup/beaker{ - pixel_x = 5 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"HF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark_green, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"HG" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"HI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"HJ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"HM" = ( -/obj/structure/toilet{ - dir = 1 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"HO" = ( -/obj/structure/table/glass, -/obj/item/flashlight/flare/candle/infinite{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/flashlight/flare/candle/infinite{ - pixel_x = 6; - pixel_y = 5 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"HS" = ( -/obj/structure/mirror{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"HY" = ( -/obj/effect/mob_spawn/ghost_role/human/hotel_staff, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark_blue{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"HZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/contraband/random/directional/north, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"Ib" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/table/glass, -/obj/effect/turf_decal/siding/dark{ - dir = 6 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"Ie" = ( -/obj/machinery/atmospherics/pipe/color_adapter/layer4{ - dir = 4 - }, -/obj/machinery/airalarm/directional/north{ - pixel_y = 24 - }, -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"Ij" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/table/wood, -/obj/machinery/coffeemaker, -/obj/machinery/button/door{ - id = "HotelRoom2"; - name = "Guest Door Lock"; - normaldoorcontrol = 1; - pixel_y = -30; - specialfunctions = 4 - }, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"In" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/junction/flip{ - dir = 8 - }, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"Io" = ( -/obj/effect/turf_decal/siding/dark/corner{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"Iu" = ( -/obj/structure/cable, -/obj/machinery/button/curtain{ - id = "HotelRoom3Curtains"; - pixel_x = -24 - }, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"IF" = ( -/obj/machinery/light_switch{ - pixel_y = -24 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom) -"II" = ( -/obj/structure/disposalpipe/junction/flip{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"IK" = ( -/obj/machinery/vending/games, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"IP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/junction{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"IS" = ( -/obj/structure/sink/kitchen/directional/south, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/ruin/space/has_grav/hotel/bar) -"IV" = ( -/obj/structure/table/glass, -/obj/item/paper/pamphlet/ruin/spacehotel, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"IW" = ( -/obj/machinery/processor, -/obj/effect/turf_decal/siding/dark_green{ - dir = 5 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"IX" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"IZ" = ( -/obj/effect/turf_decal/siding/green{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"Ja" = ( -/obj/item/storage/medkit/brute, -/obj/item/storage/medkit/brute{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/structure/table, -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"Jb" = ( -/obj/effect/turf_decal/siding/dark/corner, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"Jh" = ( -/obj/item/reagent_containers/cup/glass/shaker, -/obj/structure/table/reinforced/plastitaniumglass, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"Ji" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"Jp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel/pool) -"Jq" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 5 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"Jw" = ( -/obj/structure/bed/double{ - dir = 4 - }, -/obj/item/bedsheet/random/double{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"Jx" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"Jy" = ( -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel/pool) -"JF" = ( -/obj/structure/reagent_dispensers/watertank/high, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/sauna) -"JG" = ( -/obj/structure/table/wood, -/obj/item/modular_computer/laptop, -/obj/item/storage/secure/briefcase/white, -/obj/item/key_card/hotel_room/seven, -/obj/item/key_card/hotel_room/six, -/obj/item/key_card/hotel_room/five, -/obj/item/key_card/hotel_room/four, -/obj/item/key_card/hotel_room/three, -/obj/item/key_card/hotel_room/two, -/obj/item/key_card/hotel_room/one, -/obj/item/permanent_portal_creator/space_hotel, -/obj/item/permanent_portal_anchor/space_hotel, -/turf/open/floor/carpet/executive, -/area/ruin/space/has_grav/hotel/workroom) -"JJ" = ( -/obj/structure/cable, -/obj/structure/mirror{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"JN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/workroom) -"JQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/light, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"JT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"JV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/filingcabinet/chestdrawer{ - pixel_y = 2 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/workroom) -"JW" = ( -/obj/machinery/light, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"JZ" = ( -/obj/structure/table, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"Kd" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green, -/obj/structure/cable, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"Ke" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"Kf" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"Kg" = ( -/obj/machinery/shower/directional/south, -/obj/structure/drain/big, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel/pool) -"Ki" = ( -/obj/machinery/vending/imported/yangyu, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"Kj" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/workroom) -"Kr" = ( -/obj/machinery/cryopod/quiet{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/turf_decal/tile/dark/opposingcorners, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"Kt" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"Ku" = ( -/obj/structure/table/glass, -/obj/effect/spawner/random/entertainment/money_medium, -/obj/effect/spawner/random/entertainment/money_medium, -/obj/effect/turf_decal/tile/dark/diagonal_edge, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"KC" = ( -/obj/machinery/light/floor, -/obj/effect/turf_decal/siding/dark/end{ - dir = 4 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"KD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"KG" = ( -/obj/machinery/door/airlock/public/glass, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"KJ" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ - dir = 4 - }, -/turf/open/indestructible/hotelwood, -/area/ruin/space/has_grav/hotel/pool) -"KU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/turf_decal/siding/dark_green, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"KY" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/light_switch{ - pixel_y = -24 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"KZ" = ( -/obj/effect/turf_decal/tile/dark/opposingcorners, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"Lc" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark_green{ - dir = 10 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"Lh" = ( -/obj/machinery/light, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel/pool) -"Li" = ( -/obj/machinery/light_switch{ - pixel_y = -24 - }, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"Lj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"Lm" = ( -/obj/structure/chair/pew/right{ - dir = 8; - pixel_x = 5 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/sauna) -"Ln" = ( -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"Lo" = ( -/obj/machinery/airalarm/directional/west, -/obj/machinery/light_switch{ - pixel_y = -24 - }, -/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/ruin/space/has_grav/hotel/guestroom/room_5) -"Lq" = ( -/obj/structure/mirror{ - pixel_y = 32 - }, -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/obj/structure/dresser, -/obj/machinery/light/floor, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel/pool) -"Lt" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/workroom) -"Lu" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/telecomms/relay/preset/ruskie{ - use_power = 0 - }, -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"Lw" = ( -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"Ly" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/keyed/hotel_room/three{ - id_tag = "HotelRoom3" - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"Lz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"LA" = ( -/obj/structure/chair/sofa/corp/corner{ - dir = 1 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"LD" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"LN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"LP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"LQ" = ( -/obj/machinery/space_heater, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/workroom) -"LU" = ( -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/hotel) -"LY" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -30 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"Mb" = ( -/obj/machinery/griddle, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"Md" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/junction{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"Mg" = ( -/obj/structure/chair/sofa/corp{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"Mh" = ( -/obj/structure/chair/sofa/corp/corner{ - dir = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"Ml" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/workroom) -"Mm" = ( -/obj/structure/table, -/obj/effect/spawner/random/food_or_drink/donkpockets, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"Mo" = ( -/obj/item/kirbyplants/random, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"Mt" = ( -/obj/structure/chair/sofa/corp/corner{ - dir = 4 - }, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"Mv" = ( -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"MB" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 8 - }, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"MD" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"MN" = ( -/obj/structure/table/wood/fancy/green, -/obj/item/coffee_cartridge/decaf{ - pixel_x = -7 - }, -/obj/item/coffee_cartridge/fancy{ - pixel_x = -7; - pixel_y = 9 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"MP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"MR" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"MS" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"MU" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"MV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/coffeemaker, -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/glass/mug/nanotrasen{ - pixel_y = -9 - }, -/obj/item/coffee_cartridge/fancy{ - pixel_x = 10; - pixel_y = -7 - }, -/obj/machinery/button/door{ - id = "HotelRoom6"; - name = "Guest Door Lock"; - normaldoorcontrol = 1; - pixel_y = -30; - specialfunctions = 4 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"Na" = ( -/obj/machinery/cryopod/quiet{ - dir = 4 - }, -/obj/effect/turf_decal/tile/dark/opposingcorners, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"Nb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark_green{ - dir = 6 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"Nc" = ( -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/workroom) -"Nd" = ( -/obj/structure/hedge, -/obj/effect/turf_decal/siding/dark{ - dir = 6 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"Ne" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"Nk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 1 - }, -/turf/open/floor/iron/dark/diagonal, -/area/ruin/space/has_grav/hotel) -"Nn" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"Nq" = ( -/obj/structure/rack, -/obj/effect/spawner/random/clothing/costume, -/obj/effect/spawner/random/clothing/costume, -/obj/effect/spawner/random/clothing/costume, -/obj/effect/spawner/random/clothing/costume, -/obj/effect/spawner/random/clothing/costume, -/obj/item/clothing/suit/ashwalkermantle/cape, -/obj/effect/turf_decal/tile/dark/diagonal_edge, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"Nt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"Nw" = ( -/obj/machinery/mass_driver/trash{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/workroom) -"NK" = ( -/obj/structure/dresser, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet/green, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"NO" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"NS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/dresser, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"NU" = ( -/obj/structure/chair/sofa/corp/left, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"NV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 6 - }, -/obj/structure/cable, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"NW" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/effect/mob_spawn/ghost_role/human/hotel_staff/security, -/obj/effect/turf_decal/siding/dark_blue{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"NZ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"Oa" = ( -/obj/machinery/recharge_station, -/obj/effect/turf_decal/tile/dark/opposingcorners, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"Ob" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"Oc" = ( -/turf/open/floor/carpet/neon/simple/black/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"Od" = ( -/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 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"Oh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/sign/poster/contraband/random/directional/north, -/obj/structure/cable, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"Om" = ( -/obj/machinery/vending/clothing, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"Or" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -30 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"Os" = ( -/obj/structure/displaycase/trophy, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"Ov" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"Ow" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/power) -"Oz" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/window/spawner/directional/north, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"OA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood/corner, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"OB" = ( -/obj/item/reagent_containers/condiment/milk, -/obj/item/reagent_containers/condiment/milk, -/obj/item/reagent_containers/condiment/milk, -/obj/structure/closet/secure_closet/freezer/fridge{ - req_access = list("twin_nexus_staff") - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark_green{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"OE" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/trinary/filter/atmos/n2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"OJ" = ( -/obj/structure/chair/sofa/corp/corner{ - dir = 8 - }, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"OK" = ( -/obj/structure/chair/greyscale{ - dir = 1 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark_blue{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"OL" = ( -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"ON" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/light, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"OQ" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 10 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"OW" = ( -/obj/machinery/door/airlock/public/glass, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"OZ" = ( -/obj/machinery/shower/directional/north, -/obj/item/soap/deluxe, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"Pb" = ( -/obj/machinery/chem_dispenser/drinks/fullupgrade{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/table/reinforced/plastitaniumglass, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"Pd" = ( -/obj/structure/chair/office/light, -/obj/effect/turf_decal/tile/dark/diagonal_edge, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"Pf" = ( -/obj/item/beacon, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"Pg" = ( -/obj/structure/table/wood/fancy/green, -/obj/item/wrench, -/obj/effect/spawner/random/entertainment/lighter, -/obj/item/storage/fancy/candle_box/jasmine, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"Pj" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/dock) -"Pp" = ( -/obj/structure/closet/crate/freezer, -/obj/item/food/grown/wheat, -/obj/item/food/grown/wheat, -/obj/item/food/grown/wheat, -/obj/item/food/grown/wheat, -/obj/item/food/grown/wheat, -/obj/item/food/grown/wheat, -/obj/item/food/grown/wheat, -/obj/item/food/grown/potato, -/obj/item/food/grown/potato, -/obj/item/food/grown/potato, -/obj/item/food/grown/potato, -/obj/item/food/grown/potato, -/obj/item/food/grown/carrot, -/obj/item/food/grown/carrot, -/obj/item/food/grown/carrot, -/obj/item/food/grown/carrot, -/obj/item/food/grown/carrot, -/obj/item/food/grown/carrot, -/obj/item/food/grown/tomato, -/obj/item/food/grown/tomato, -/obj/item/food/grown/tomato, -/obj/item/food/grown/tomato, -/obj/item/food/grown/tomato, -/obj/machinery/light_switch{ - pixel_y = -24 - }, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/ruin/space/has_grav/hotel/bar) -"Pq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"Pr" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, -/obj/item/gps/spaceruin{ - name = "hotel gps" - }, -/obj/structure/table/glass, -/obj/effect/turf_decal/siding/dark{ - dir = 5 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"Ps" = ( -/obj/structure/table, -/obj/item/surgery_tray/full, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel) -"Pw" = ( -/obj/structure/chair/office/light{ - dir = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"Py" = ( -/obj/machinery/door/airlock{ - name = "Bathroom" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"PG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"PJ" = ( -/obj/structure/table, -/obj/item/book/manual/hydroponics_pod_people, -/obj/item/wrench, -/obj/machinery/airalarm/directional/north{ - pixel_y = 24 - }, -/obj/effect/turf_decal/siding/green{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"PM" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"PN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 6 - }, -/obj/structure/cable, -/obj/structure/extinguisher_cabinet{ - pixel_x = -30 - }, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"PP" = ( -/obj/item/kirbyplants/random, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"PU" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/curtain/cloth/fancy/mechanical{ - icon_state = "bounty-open"; - icon_type = "bounty"; - id = "HotelRoom5Curtains"; - name = "curtain" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"PW" = ( -/turf/open/floor/carpet/green, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"PX" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/ruin/space/has_grav/hotel/pool) -"Qc" = ( -/obj/structure/table, -/obj/machinery/microwave, -/obj/effect/turf_decal/siding/dark_green{ - dir = 9 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"Qd" = ( -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/dock) -"Qe" = ( -/obj/structure/toilet{ - dir = 1 - }, -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"Qh" = ( -/obj/structure/chair/sofa/corp, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"Qi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"Qk" = ( -/obj/machinery/light/floor, -/obj/effect/turf_decal/siding/thinplating_new/dark/end, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"Qo" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"Qr" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/button/door{ - id = "HotelRoom4"; - name = "Guest Door Lock"; - normaldoorcontrol = 1; - pixel_y = -30; - specialfunctions = 4 - }, -/turf/open/floor/carpet/green, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"Qv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 6 - }, -/obj/structure/chair/sofa/corp/left{ - dir = 1 - }, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"Qw" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/airalarm/directional/north{ - pixel_y = 24 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"QE" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"QH" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"QI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"QK" = ( -/obj/item/reagent_containers/cup/bucket/wooden, -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/sauna) -"QM" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green, -/obj/item/storage/fancy/candle_box/jasmine, -/obj/effect/spawner/random/entertainment/lighter, -/obj/item/wrench, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"QR" = ( -/obj/machinery/airalarm/directional/west, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/light_switch{ - pixel_y = -24 - }, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"QX" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/carpet/executive, -/area/ruin/space/has_grav/hotel/workroom) -"QY" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/ruin/space/has_grav/hotel/pool) -"QZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"Rd" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/workroom) -"Rg" = ( -/obj/item/soap/deluxe, -/obj/machinery/shower/directional/north, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"Rh" = ( -/obj/effect/turf_decal/siding/wood, -/turf/open/indestructible/hotelwood, -/area/ruin/space/has_grav/hotel/pool) -"Rm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet/green, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"Rn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/item/kirbyplants/random, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"Rr" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark_green, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"Rv" = ( -/obj/structure/bed, -/obj/structure/extinguisher_cabinet{ - pixel_x = 30 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/pool) -"Ry" = ( -/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/carpet/neon/simple/black/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"RE" = ( -/obj/item/reagent_containers/cup/bottle/morphine, -/obj/item/reagent_containers/cup/bottle/toxin{ - pixel_x = 5; - pixel_y = 4 - }, -/obj/item/reagent_containers/cup/bottle/epinephrine{ - pixel_x = 8 - }, -/obj/item/reagent_containers/cup/bottle/multiver{ - pixel_x = -5 - }, -/obj/item/reagent_containers/syringe/epinephrine, -/obj/structure/table, -/obj/effect/turf_decal/siding/blue{ - dir = 5 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"RF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/visible, -/obj/effect/turf_decal/siding/wideplating_new/corner, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"RH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"RI" = ( -/obj/structure/table/wood, -/obj/item/paper_bin/carbon, -/obj/item/pen/fountain, -/obj/item/taperecorder{ - pixel_x = 6; - pixel_y = 10 - }, -/turf/open/floor/carpet/executive, -/area/ruin/space/has_grav/hotel/workroom) -"RK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/pool) -"RL" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"RM" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/workroom) -"RO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"RS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"RU" = ( -/obj/structure/table/wood, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"RX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green, -/turf/open/floor/carpet/neon/simple/black/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"RY" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"Sa" = ( -/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{ - name = "Bathroom" - }, -/turf/open/floor/carpet/neon/simple/black/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"Sb" = ( -/obj/effect/turf_decal/siding/dark_green{ - dir = 1 - }, -/obj/machinery/oven/range, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"Se" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 1 - }, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"Sf" = ( -/obj/machinery/washing_machine, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"Sg" = ( -/obj/machinery/door/window/right{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"Sl" = ( -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"So" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/west, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"Sr" = ( -/obj/effect/mob_spawn/ghost_role/human/hotel_staff{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark_blue{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"Sx" = ( -/obj/structure/closet/secure_closet/personal/cabinet, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"SF" = ( -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/sauna) -"SH" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom) -"SJ" = ( -/obj/effect/spawner/liquids_spawner, -/turf/open/floor/iron/pool, -/area/ruin/space/has_grav/hotel/pool) -"SM" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/ruin/space/has_grav/hotel/bar) -"SN" = ( -/obj/item/soap/deluxe, -/obj/machinery/shower/directional/north, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"SQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"SU" = ( -/obj/machinery/door/airlock/public/glass, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel) -"SY" = ( -/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/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"Tb" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"Tg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"Th" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"Tj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"Tm" = ( -/obj/machinery/recharge_station, -/obj/machinery/airalarm/directional/north{ - pixel_y = 24 - }, -/obj/effect/turf_decal/tile/dark/opposingcorners, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"Tp" = ( -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 4 - }, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/hotel/power) -"Tu" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/biogenerator, -/obj/machinery/light, -/obj/effect/turf_decal/siding/green, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"Tv" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/light_switch{ - pixel_x = 24 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"Ty" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/structure/disposalpipe/junction/flip{ - dir = 8 - }, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"Tz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet/green, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"TA" = ( -/obj/machinery/door/airlock/grunge{ - name = "Disposals Access" - }, -/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/mapping_helpers/airlock/access/all/twin_nexus_staff, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/hotel/workroom) -"TE" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"TK" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"TL" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"TP" = ( -/turf/open/floor/carpet/executive, -/area/ruin/space/has_grav/hotel/workroom) -"TW" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/carpet/green, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"TX" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 5 - }, -/turf/open/indestructible/hotelwood, -/area/ruin/space/has_grav/hotel/pool) -"Uc" = ( -/obj/structure/rack, -/obj/effect/spawner/random/clothing/gloves, -/obj/effect/spawner/random/clothing/gloves, -/obj/effect/spawner/random/clothing/gloves, -/obj/effect/spawner/random/clothing/gloves, -/obj/effect/spawner/random/clothing/gloves, -/obj/effect/turf_decal/tile/dark/diagonal_edge, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"Uk" = ( -/obj/machinery/autolathe, -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"Ul" = ( -/obj/structure/table, -/obj/structure/bedsheetbin, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"Ur" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/item/reagent_containers/cup/bucket, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"Us" = ( -/obj/structure/chair/comfy/black, -/obj/structure/cable, -/turf/open/floor/carpet/executive, -/area/ruin/space/has_grav/hotel/workroom) -"Ut" = ( -/obj/effect/light_emitter, -/obj/effect/spawner/liquids_spawner, -/turf/open/floor/iron/pool, -/area/ruin/space/has_grav/hotel/pool) -"Uu" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrogen_input{ - dir = 4 - }, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/hotel/power) -"UB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"UE" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"UF" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/disposal/bin, -/obj/structure/cable, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"UI" = ( -/obj/structure/chair/comfy/black{ - dir = 1 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"UK" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -30 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"UM" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/ruin/space/has_grav/hotel/pool) -"UQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/junction{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"UU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_y = -24 - }, -/obj/effect/turf_decal/siding/dark_green, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"UW" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk, -/obj/machinery/disposal/bin, -/obj/machinery/light_switch{ - pixel_y = 24 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"UX" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"Vb" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel/pool) -"Ve" = ( -/obj/structure/chair/pew/right{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom) -"Vj" = ( -/obj/structure/table, -/obj/item/storage/box/donkpockets, -/obj/effect/turf_decal/siding/dark_blue{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"Vk" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Hotel Maintenance" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/bar) -"Vm" = ( -/obj/machinery/atmospherics/miner/nitrogen, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/hotel/power) -"Vn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/extinguisher_cabinet{ - pixel_x = -30 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"Vo" = ( -/obj/structure/hedge, -/obj/effect/turf_decal/siding/dark{ - dir = 5 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"Vs" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green/half{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"Vw" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/dock) -"Vx" = ( -/obj/machinery/shower/directional/east, -/obj/item/soap/deluxe, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom) -"VF" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/hotel/power) -"VH" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"VI" = ( -/obj/structure/table/reinforced, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"VK" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"VN" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "garbage" - }, -/obj/machinery/recycler{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/workroom) -"VQ" = ( -/obj/machinery/vending/hydronutrients, -/obj/effect/turf_decal/siding/green{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"VT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"VW" = ( -/obj/machinery/airalarm/directional/west, -/obj/structure/dresser, -/turf/open/floor/carpet/neon/simple/black/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"VX" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/guestroom/room_6) -"VY" = ( -/obj/machinery/airalarm/directional/north{ - pixel_y = 24 - }, -/obj/structure/table/wood/fancy/green, -/obj/machinery/coffeemaker, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"Wf" = ( -/obj/machinery/vending/hydroseeds{ - slogan_delay = 700 - }, -/obj/effect/turf_decal/siding/green{ - dir = 9 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/bar) -"Wi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) -"Wl" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom) -"Wo" = ( -/turf/open/floor/glass/reinforced, -/area/ruin/space/has_grav/hotel/bar) -"Wz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/turf_decal/siding/dark_blue{ - dir = 8 - }, -/mob/living/simple_animal/bot/medbot{ - name = "Accidents Happen" - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"WH" = ( -/obj/structure/table, -/obj/item/soap, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"WM" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"WS" = ( -/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/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"WW" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/ruin/space/has_grav/hotel/pool) -"WX" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"Xa" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 4; - name = "Air to Distro" - }, -/obj/structure/sign/warning/fire/directional/north{ - desc = "A poster designed to remind the reader to wear appropriate insulation and head protection when working with material."; - icon_state = "safety"; - name = "Safety Poster" - }, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 9 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"Xg" = ( -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/sauna) -"Xi" = ( -/obj/structure/table/wood/fancy/green, -/obj/item/flashlight/lamp/green{ - pixel_x = 7; - pixel_y = 14 - }, -/obj/item/clothing/mask/cigarette/pipe{ - pixel_x = -5 - }, -/obj/machinery/pollution_scrubber{ - pixel_x = 7; - pixel_y = -5 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"Xk" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 6 - }, -/turf/open/indestructible/hotelwood, -/area/ruin/space/has_grav/hotel/pool) -"Xm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/coffeemaker, -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/glass/mug/nanotrasen{ - pixel_y = -9 - }, -/obj/item/coffee_cartridge/fancy{ - pixel_x = 10; - pixel_y = -7 - }, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"Xn" = ( -/obj/machinery/firealarm{ - pixel_x = 24 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/pool) -"Xp" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel/pool) -"Xs" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/showroomfloor, -/area/ruin/space/has_grav/hotel/pool) -"Xu" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"Xy" = ( -/obj/structure/table, -/obj/item/card/id/away/hotel, -/obj/item/card/id/away/hotel, -/obj/item/card/id/away/hotel, -/obj/item/card/id/away/hotel, -/obj/item/card/id/away/hotel, -/obj/item/card/id/away/hotel, -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/medkit/regular, -/obj/effect/turf_decal/siding/dark_blue{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"XA" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/power) -"XB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/chair/sofa/corp/left{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/carpet/neon/simple/black/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"XD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/pen{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/effect/turf_decal/siding/dark_blue{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"XE" = ( -/obj/structure/sink/directional/north, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"XF" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/hotel/sauna) -"XO" = ( -/obj/effect/turf_decal/tile/green/half{ - dir = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"XQ" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/pool) -"XZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"Yd" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating_new/dark, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"Yg" = ( -/obj/structure/table, -/obj/item/storage/box/monkeycubes, -/obj/item/storage/box/monkeycubes, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/ruin/space/has_grav/hotel/bar) -"Yk" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"Ym" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/closet/secure_closet/personal/cabinet, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"Yp" = ( -/obj/machinery/light, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel/workroom) -"Yq" = ( -/obj/structure/chair/sofa/corp/right, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"Yr" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/junction{ - dir = 8 - }, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"Ys" = ( -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/dock) -"Yt" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/turf_decal/caution/blue, -/turf/open/indestructible/hotelwood, -/area/ruin/space/has_grav/hotel/pool) -"Yu" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"Yw" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/bar) -"YA" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/siding/dark{ - dir = 10 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"YE" = ( -/obj/structure/chair/sofa/corp, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"YI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/door/airlock{ - name = "Bathroom" - }, -/turf/open/floor/carpet/green, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"YK" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"YO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/keyed/hotel_room/five{ - id_tag = "HotelRoom5" - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"YP" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/carpet/neon/simple/black/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"YQ" = ( -/obj/effect/turf_decal/siding/dark/corner, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) -"YR" = ( -/obj/structure/kitchenspike, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/ruin/space/has_grav/hotel/bar) -"YZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"Zc" = ( -/turf/open/floor/carpet/neon/simple/pink/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"Zd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/power) -"Ze" = ( -/obj/structure/chair/pew/left{ - dir = 8; - pixel_x = 5 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/hotel/sauna) -"Zh" = ( -/obj/structure/sink/directional/north, -/obj/machinery/airalarm/directional/west, -/obj/structure/mirror{ - pixel_y = -31 - }, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_2) -"Zn" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/item/paper/pamphlet/ruin/spacehotel, -/turf/open/floor/carpet/neon/simple/teal/nodots, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"Zq" = ( -/obj/structure/toilet{ - dir = 1 - }, -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_5) -"Zs" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"Zx" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/keyed/hotel_room/four{ - id_tag = "HotelRoom4" - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel/guestroom/room_4) -"Zz" = ( -/obj/structure/table/glass, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/ruin/space/has_grav/hotel) -"ZC" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/machinery/airalarm/directional/west, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_1) -"ZH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/indestructible/hoteltile, -/area/ruin/space/has_grav/hotel/guestroom/room_3) -"ZI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/airlock/grunge{ - name = "Hotel Cold Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/twin_nexus_staff, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) -"ZJ" = ( -/obj/effect/turf_decal/siding/dark/end{ - dir = 8 - }, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/hotel/dock) -"ZL" = ( -/obj/machinery/computer/pod/old/mass_driver_controller/trash{ - pixel_x = -25; - pixel_y = -4 - }, -/obj/machinery/button/door{ - id = "Disposal Exit"; - name = "Disposal Vent Control"; - pixel_x = 25; - pixel_y = -4; - req_access = list("twin_nexus_staff") - }, -/obj/machinery/door/window/left/directional/south, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel/workroom) -"ZM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/bar) -"ZN" = ( -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/hotel/workroom/quarters) -"ZP" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 6 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/hotel) -"ZR" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/ruin/space/has_grav/hotel) -"ZS" = ( -/obj/machinery/light/floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 9 - }, -/obj/effect/turf_decal/siding/thinplating_new/dark/corner, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel/dock) -"ZV" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/carpet/neon/simple/white/nodots, -/area/ruin/space/has_grav/hotel/guestroom) -"ZZ" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mF -mF -mF -mF -mF -mF -mF -mF -ac -aa -aa -aa -aa -aa -aa -aa -aa -mF -mF -mF -mF -mF -mF -mF -mF -mF -mF -mF -ac -mF -mF -mF -mF -mF -mF -mF -ac -ac -mF -ac -ac -mF -mF -mF -mF -mF -mF -mF -mF -mF -mF -mF -mF -ac -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -aa -aa -aa -aa -ac -aa -aa -aa -aa -aa -aa -mF -mF -mF -mF -ac -aa -aa -aa -aa -ac -aa -aa -aa -aa -ac -aa -ac -aa -aa -aa -aa -aa -aa -ac -aa -aa -mF -mF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mF -aa -"} -(3,1,1) = {" -bN -wZ -wZ -wZ -bN -bN -bN -bN -bN -am -am -am -am -am -am -am -am -am -am -am -ac -mF -mF -mF -mF -mF -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -sN -sN -sN -sN -sN -sN -sN -sN -sN -sN -sN -sN -sN -aa -aa -ad -aa -ad -aa -ad -aa -ad -aa -ad -aa -ad -aa -mF -aa -"} -(4,1,1) = {" -wZ -aD -Eg -Zc -Iu -NV -PN -QR -bN -OA -RO -mH -cd -ed -ed -ed -ed -ed -or -am -aa -aa -aa -aa -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -sN -sK -fB -sK -gK -vN -VF -vN -gK -eb -qs -eb -sN -aa -aa -ad -aa -ad -aa -ad -aa -ad -aa -ad -aa -ad -aa -mF -ac -"} -(5,1,1) = {" -wZ -Zc -YK -xe -ww -Qv -Zc -aw -kL -vB -yE -Bp -cl -cl -cl -cl -cl -cl -Hs -am -am -am -am -am -am -am -am -am -am -am -am -am -am -am -am -am -am -am -am -sN -sK -nU -sK -gK -vN -kR -vN -gK -eb -Vm -eb -sN -aa -aa -ad -aa -ad -aa -ad -aa -ad -aa -ad -aa -ad -aa -aa -mF -"} -(6,1,1) = {" -wZ -Zc -Zc -NU -Kd -Se -Zc -Ij -bN -RS -yE -ix -cl -vX -bV -VW -aV -cl -jD -ed -ed -ed -ed -ed -ed -ed -lK -lK -fd -lK -ed -ed -ed -ed -ed -ed -ed -ed -or -sN -fA -sK -fA -gK -Uu -vN -Tp -gK -nZ -eb -DC -sN -aa -aa -ad -aa -ad -aa -ad -aa -ad -aa -ad -aa -ad -aa -aa -mF -"} -(7,1,1) = {" -wZ -Zc -Zc -Zc -CO -Zc -GG -zZ -bN -RS -yE -nf -cl -Oc -Oc -Oc -Oc -cl -SQ -fi -fi -fi -fi -fi -fi -fi -fi -fi -ij -fi -fi -fi -fi -fi -fi -fi -fi -fi -HZ -gK -kI -EI -kI -gK -yL -EI -Do -gK -yL -EI -Do -gK -aa -aa -ad -aa -ad -aa -ad -aa -ad -aa -ad -aa -ad -aa -aa -mF -"} -(8,1,1) = {" -wZ -nC -Eg -xc -qx -kT -zR -Dw -bN -RS -yE -nf -cl -ms -Oc -BY -DA -cl -SQ -fi -Gw -el -BG -fi -Qc -fF -BO -pX -Lc -fi -mY -UK -hw -Yw -hw -hw -vw -fi -ZR -kH -Xa -Lw -KD -UE -Sl -Lw -Gz -Lu -Sl -VT -lp -Ow -aa -aa -ad -aa -ad -aa -ad -aa -ad -aa -ad -aa -ad -aa -mF -ac -"} -(9,1,1) = {" -bN -bN -bN -bN -bN -bN -qX -bN -bN -it -yE -tN -Df -Ry -jm -jm -DA -cl -Th -fi -IS -dM -SM -fi -Sb -fh -vI -HD -Rr -Cc -hw -yC -HI -HI -HI -PG -QZ -Vk -Yr -kH -gj -uW -iw -jz -Fl -UB -kr -hH -GO -RF -es -Ow -aa -aa -ad -aa -ad -aa -ad -aa -ad -aa -ad -aa -ad -aa -mF -aa -"} -(10,1,1) = {" -yX -xx -yM -ii -bN -Ji -qG -Zh -bN -WX -yE -Ba -cl -DR -bq -RX -mT -cl -Oh -fi -YR -dM -Pp -fi -CD -fh -SY -Mb -KU -fi -hw -hw -gp -dA -hw -hw -FM -fi -BA -kH -Ie -lX -iu -uW -XZ -nJ -QH -QH -XZ -xl -gK -gK -gK -aa -ad -aa -ad -aa -ad -aa -ad -aa -ad -aa -ad -aa -mF -aa -"} -(11,1,1) = {" -yX -ap -Oz -ap -bN -hc -wV -Qe -bN -dl -yE -uN -cl -YP -Bn -XB -rC -cl -Th -fi -qY -dM -EV -fi -OB -fh -dV -Mb -FV -fi -fR -fi -fi -fi -fi -fi -fi -fi -bE -kH -nS -Zd -Gk -dI -OE -dI -dI -En -iv -wT -eJ -Dk -is -lQ -lQ -lQ -lQ -lQ -lQ -lQ -lQ -lQ -lQ -lQ -lQ -ai -mF -aa -"} -(12,1,1) = {" -yX -TE -ZH -ap -bN -NO -dP -GR -bN -xR -yE -nf -cl -Sa -cl -cl -cl -cl -SQ -fi -qY -SM -gB -fi -GL -fh -Hg -Mm -UU -fi -eQ -hJ -Pb -rI -hk -hu -hJ -fi -bE -kH -kv -wm -aB -uD -tB -uW -kq -kq -uW -AY -gK -gK -gK -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mF -aa -"} -(13,1,1) = {" -yX -yX -Py -yX -bN -bN -bN -bN -bN -xR -yE -nf -cl -JJ -ZC -fI -XE -cl -Th -fi -ke -oT -ty -ZI -wc -RH -ni -RH -HF -VI -hw -hw -Lj -hw -hw -hw -rD -fi -bE -kH -kH -iK -gq -kH -Ft -Uk -kZ -ku -yg -iN -lA -XA -Gx -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mF -aa -"} -(14,1,1) = {" -yX -vu -qS -sU -dx -oW -kY -cO -yX -xR -yE -nf -cl -ul -fI -MS -dR -cl -Th -fi -Yg -Gw -yu -fi -IW -CZ -lb -tb -FJ -Hm -hw -hw -Lj -hw -hw -hw -hw -fi -hS -ed -lK -iL -or -md -md -md -md -md -md -XF -XF -XF -XF -XF -XF -XF -XF -XF -XF -XF -XF -XF -ac -mF -ac -ac -mF -aa -"} -(15,1,1) = {" -aA -zU -st -qS -sU -sU -sU -sU -yX -xR -yE -nf -cl -pa -tl -fI -Rg -cl -Th -fi -fi -fi -fi -fi -fi -ug -Nb -fi -fi -fi -EH -ji -Dp -hl -hl -dv -Jh -fi -fi -fi -fi -fi -bE -md -hK -cZ -cZ -mE -md -lr -SF -Xg -QK -kx -lS -JF -kx -QK -Xg -SF -lr -XF -aa -mF -aa -aa -aa -aa -"} -(16,1,1) = {" -aA -dz -jy -qS -Zn -sU -sU -Li -yX -xR -yE -nf -di -di -di -di -di -di -Th -fi -Wf -hZ -hZ -hZ -hZ -hZ -Ca -qo -fi -jF -Kf -AA -sT -AA -AA -AA -AA -AI -fo -iA -ky -fi -bE -md -jH -kh -Wi -kK -md -mP -SF -SF -SF -me -SF -SF -me -SF -SF -SF -ml -XF -aa -mF -aa -aa -aa -aa -"} -(17,1,1) = {" -aA -yy -jy -qS -cu -cu -cu -cu -yX -xR -yE -nf -di -rT -dY -wH -Bu -di -Th -fi -VQ -dT -qA -qA -qA -qA -oH -eP -Ah -iA -iA -iA -Eu -QI -QI -QI -QI -QI -QI -QI -QI -fj -In -md -jJ -kj -kk -Bx -md -Ze -mt -mt -Lm -kx -SF -SF -kx -Ze -mt -mt -Lm -XF -aa -mF -aa -aa -aa -aa -"} -(18,1,1) = {" -aA -yy -jy -sU -By -pC -sU -nc -yX -xR -yE -nf -di -Rd -mb -Ce -DH -di -SQ -fi -kW -dT -dT -dT -dT -dT -ba -Tu -fi -iA -iA -iA -ZM -iA -iA -zS -MR -MR -MR -MR -Hq -fi -BA -md -qB -kj -kk -BB -md -kx -kx -kx -kx -kx -SF -FK -kx -kx -kx -kx -kx -XF -aa -mF -aa -aa -aa -aa -"} -(19,1,1) = {" -aA -MB -OJ -sU -sU -sU -sU -id -yX -xR -yE -uN -xZ -cR -JN -pc -au -di -SQ -fi -PJ -dT -qA -qA -qA -qA -oH -oD -fi -iA -Mh -ur -ZM -bb -ya -qU -Wo -Wo -Wo -Wo -ye -fi -bE -md -jL -kl -wy -kN -md -lr -SF -Xg -QK -kx -lU -SF -kx -QK -Xg -SF -lr -XF -aa -mF -aa -aa -aa -aa -"} -(20,1,1) = {" -yX -as -pE -dx -uQ -hT -Jx -rB -Ly -jK -yE -hs -di -ck -JV -Kj -au -di -SQ -fi -Be -IZ -AG -IZ -IZ -ez -rp -vt -fi -Ob -Fz -wQ -vn -wQ -hQ -qU -Wo -Wo -Wo -Wo -ON -fi -bE -md -jG -km -kB -kM -md -mP -SF -SF -SF -me -SF -SF -me -SF -SF -SF -ml -XF -aa -mF -aa -aa -aa -aa -"} -(21,1,1) = {" -yX -yX -yX -yX -yX -yX -yX -yX -yX -RS -yE -hs -di -Es -RI -TP -QX -di -Th -fi -fi -fi -fi -fi -Ur -fi -fi -fi -fi -iA -gd -gb -ZM -ud -pe -qU -Wo -Wo -Wo -Wo -ye -fi -bE -md -rL -kn -ec -yv -md -Ze -mt -mt -Lm -kx -le -ei -kx -Ze -mt -mt -Lm -XF -aa -mF -aa -aa -aa -aa -"} -(22,1,1) = {" -av -VY -va -jo -nO -mc -xo -xo -av -hp -yE -oI -di -Es -Ao -sZ -TP -di -Th -fi -Na -Kr -Na -fi -am -fH -am -fH -fi -iA -Mh -ur -ZM -bb -ya -qU -Wo -Wo -Wo -Wo -ye -fi -RL -md -md -md -mx -md -md -kx -kx -kx -kx -kx -lf -zP -kx -kx -kx -kx -kx -XF -aa -mF -aa -aa -aa -aa -"} -(23,1,1) = {" -xH -MN -xD -sX -TW -TW -TW -Qr -av -xR -yE -hs -di -Us -JG -sZ -GJ -di -Th -fi -BT -KZ -BU -fi -am -th -am -th -fi -iA -Fz -uO -vn -wQ -hQ -qU -Wo -Wo -Wo -Wo -ye -fi -RL -jO -jO -gM -kC -uF -md -lr -SF -Xg -QK -kx -SF -ei -kx -QK -Xg -SF -lr -XF -aa -mF -aa -aa -aa -aa -"} -(24,1,1) = {" -xH -qd -xD -Tz -kw -ql -rr -qZ -Zx -IP -yE -hs -di -rV -sg -tS -wS -di -kP -fi -Tm -KZ -Oa -fi -Dv -so -LD -so -fi -iA -gd -gb -ZM -ud -pe -qU -Wo -Wo -Wo -Wo -ye -fi -bE -uF -en -pk -jE -xi -md -mP -SF -SF -SF -me -gX -ei -me -SF -SF -SF -ml -XF -aa -mF -aa -aa -aa -aa -"} -(25,1,1) = {" -xH -gV -xD -kc -sm -FQ -vK -nr -av -xR -yE -hs -di -di -di -di -di -di -zH -fi -fi -fs -fi -fi -am -th -am -am -fi -iA -Mh -ur -ZM -bb -ya -qU -Wo -Wo -Wo -Wo -ye -fi -Ty -jQ -jQ -jQ -jQ -jQ -jQ -Ze -mt -mt -Lm -kx -ll -lc -kx -Ze -mt -mt -Lm -XF -aa -mF -aa -aa -aa -aa -"} -(26,1,1) = {" -xH -rG -UI -Rm -wB -av -YI -av -av -xR -yE -Tg -aq -LP -LP -VH -HG -kz -xz -LY -GK -DQ -oe -LY -gl -gl -gl -nQ -fi -Ob -Fz -wQ -HO -wQ -hQ -qU -Wo -Wo -Wo -Wo -ON -fi -bE -jQ -Kg -Gj -Jy -Jy -jQ -jQ -jQ -jQ -jQ -jQ -EA -xU -jQ -jQ -jQ -jQ -jQ -jQ -aa -mF -aa -aa -aa -aa -"} -(27,1,1) = {" -xH -by -Xi -sj -PW -av -yA -gy -av -hX -yE -mi -am -co -Zz -tC -lL -am -Rn -LN -LN -LN -LN -LN -LN -Lz -eA -iC -fi -iA -gd -gb -iA -ud -pe -qU -Wo -Wo -Wo -Wo -ye -fi -bE -jQ -Lq -pV -Jy -Ds -jQ -EM -RK -RK -eS -jf -RK -mk -rW -aZ -rW -rW -BM -jQ -aa -mF -aa -aa -aa -aa -"} -(28,1,1) = {" -xH -xD -xD -sj -PW -av -TK -la -av -RS -yE -sd -OW -JT -Fc -bW -bW -SU -lO -nh -lO -nh -nh -nh -AX -ey -so -Xu -fi -gL -iA -iA -iA -iA -iA -VK -Kf -Tv -Kf -Kf -nX -fi -bE -jQ -ti -Gj -Jy -Jy -jQ -RK -lx -UM -UM -UM -UM -UM -UM -UM -UM -bk -rW -jQ -aa -mF -aa -aa -aa -aa -"} -(29,1,1) = {" -av -HA -Pg -NK -ex -av -Qw -SN -av -xR -yE -hs -di -di -di -di -di -di -am -sD -rY -sD -am -am -DL -ey -so -qq -fi -fi -fi -fi -fi -fi -iA -iA -fi -fi -fi -fi -fi -fi -wI -jQ -iX -pV -Jy -kU -nW -RK -WW -zl -Gv -rR -rR -rR -rR -Gv -KJ -Rh -rW -Ed -aa -mF -aa -aa -aa -aa -"} -(30,1,1) = {" -av -av -av -av -av -av -av -av -av -iQ -yE -Ov -di -Cs -lP -qv -do -di -Pd -Ku -tX -wx -dJ -am -lz -ey -so -Jq -ZZ -mJ -gl -gl -gl -ZZ -gl -gl -ZZ -gl -gl -gl -nQ -am -bE -jQ -Kg -Gj -Jy -kU -jQ -mj -WW -pN -SJ -SJ -SJ -SJ -SJ -SJ -Yt -Rh -rW -Ed -aa -mF -aa -aa -aa -aa -"} -(31,1,1) = {" -PU -Jw -QM -RY -fS -NS -Vn -Lo -aC -Od -yE -pR -ar -ep -ep -DV -do -di -et -Ef -Nk -CI -dJ -am -Dg -ey -so -so -so -so -so -so -so -so -so -so -so -so -so -so -iC -am -bE -jQ -iX -rg -Fg -Lh -jQ -po -WW -oM -SJ -SJ -SJ -SJ -SJ -SJ -qV -Rh -rW -Ed -aa -mF -aa -aa -aa -aa -"} -(32,1,1) = {" -PU -OL -OL -OL -hE -OL -OL -kO -YO -fE -yE -MU -di -JZ -fC -GI -do -di -tQ -pS -LU -tW -Cv -am -Om -ey -so -BF -Au -AX -so -so -dE -nh -nh -nh -nh -YA -so -so -vo -am -iZ -jQ -jU -Xs -Jy -qr -jQ -po -WW -oM -SJ -SJ -SJ -SJ -SJ -SJ -qV -Rh -rW -Ed -aa -mF -aa -aa -aa -aa -"} -(33,1,1) = {" -PU -nN -OL -OL -em -zQ -zQ -hv -aC -xR -yE -MU -di -UW -fY -II -GU -di -et -oK -De -zj -dJ -am -cP -ey -so -GX -am -DL -so -so -Xu -gF -mA -hq -hA -Ln -so -so -pA -am -RL -jQ -jU -hn -Vb -qr -jQ -po -PX -oM -SJ -Ut -SJ -SJ -Ut -SJ -qV -Rh -mM -jQ -ac -mF -aa -aa -aa -aa -"} -(34,1,1) = {" -PU -fy -zQ -jP -Dy -dg -rn -rP -aC -xR -yE -MU -di -WH -fC -GI -Tb -di -Uc -ae -ho -et -Nq -am -IK -ey -UX -ET -am -Ln -so -so -Xu -Qh -uM -Da -hB -Ln -so -so -vY -am -bE -jQ -jU -Jp -qr -Xp -jQ -eT -WW -oM -SJ -SJ -SJ -SJ -SJ -SJ -qV -Rh -rW -jQ -ac -ac -mF -aa -aa -aa -"} -(35,1,1) = {" -aC -aC -CT -aC -cf -cf -cf -cf -cf -xR -yE -MU -di -di -fC -GI -bZ -di -am -am -am -am -am -am -tK -ey -so -Ki -am -Ln -so -so -Xu -Qh -uM -Da -hB -Ln -so -so -vY -am -eN -jQ -oA -Jp -zv -Jy -jQ -al -WW -oM -SJ -SJ -SJ -SJ -SJ -SJ -qV -Rh -rW -Ed -aa -aa -mF -aa -aa -aa -"} -(36,1,1) = {" -aC -cw -Cr -kg -cf -mr -Mv -OZ -cf -xR -yE -MU -di -cc -lh -WS -CQ -di -zw -Ja -gr -ee -aG -am -eU -ey -so -BN -am -Ln -so -so -Xu -gI -yT -Fy -hC -Ln -so -Kt -mQ -iM -Md -am -jQ -yk -jQ -jQ -jQ -ln -WW -oM -SJ -SJ -hP -SJ -SJ -SJ -qV -Rh -rW -Ed -aa -aa -mF -aa -aa -aa -"} -(37,1,1) = {" -aC -EW -wC -Zq -cf -iS -So -DN -cf -xR -yE -MU -di -cb -xX -WS -cb -di -QE -bH -so -mR -bP -am -fq -ey -so -Xu -am -Ln -so -so -MD -XO -jc -cE -XO -cy -so -Hb -so -so -Ke -jw -wu -ea -hb -oZ -mN -al -WW -oM -SJ -SJ -SJ -SJ -SJ -SJ -qV -Rh -rW -Ed -aa -aa -mF -aa -aa -aa -"} -(38,1,1) = {" -aC -ry -oF -sr -cf -HS -ss -HM -cf -xR -yE -MU -di -Sf -bZ -WS -cc -di -mO -Ul -Ps -qQ -qi -am -sC -ey -so -Xu -am -Ln -so -so -Jq -Vs -ma -YQ -Vs -Gd -so -Hb -so -so -pf -at -jY -fl -jY -oZ -mN -al -WW -oM -SJ -Ut -SJ -SJ -Ut -SJ -qV -Rh -rW -Ed -aa -aa -mF -aa -aa -aa -"} -(39,1,1) = {" -aC -aC -aC -aC -cf -cf -iy -cf -cf -xR -yE -MU -di -di -di -WS -Tb -di -gH -Tj -Tj -sE -Pq -rU -sh -ey -eA -Xu -am -Yu -so -so -gt -Ci -Sg -lD -hy -lg -so -Hb -so -so -pf -KG -jY -qj -Xn -oZ -mN -al -PX -oM -SJ -SJ -SJ -SJ -SJ -SJ -qV -Rh -rW -jQ -aa -aa -mF -aa -aa -aa -"} -(40,1,1) = {" -oX -ui -fw -RU -wd -kF -nD -hx -cf -iQ -yE -JW -am -ac -di -jZ -Yp -di -RE -yZ -he -BP -ZP -am -AX -ey -dE -Io -am -DL -so -so -ge -ol -us -Jb -GD -lT -so -Hb -fe -NZ -Cu -am -jQ -jQ -jQ -jQ -jQ -eT -WW -oM -SJ -SJ -SJ -SJ -SJ -SJ -qV -Rh -mM -jQ -aa -aa -mF -aa -aa -aa -"} -(41,1,1) = {" -oX -uR -uR -uR -uR -uR -VX -kA -lF -UQ -yE -MU -qI -ac -Ml -jZ -DM -di -am -am -am -am -am -am -am -wK -am -am -am -hL -so -so -ge -Pw -Jq -Gd -Pw -lT -so -Hb -am -iO -jd -am -IX -ok -rh -LA -jQ -po -WW -oM -SJ -Ut -SJ -SJ -Ut -SJ -qV -Rh -rW -Ed -ac -ac -mF -aa -aa -aa -"} -(42,1,1) = {" -oX -uR -uR -uR -uR -dH -fg -MV -cf -xR -yE -MU -qI -ac -Ml -WS -zE -di -Xy -XD -Vj -op -qf -sb -eR -Wz -yw -eG -eG -eG -il -Fm -Pr -BC -gs -gs -BC -Ib -il -im -eG -eG -eG -eG -Yq -DB -eH -Mg -jQ -po -WW -pN -SJ -SJ -SJ -SJ -SJ -SJ -Yt -Rh -rW -Ed -aa -aa -mF -aa -aa -aa -"} -(43,1,1) = {" -oX -cp -Ga -Ho -Sx -Sx -eO -UF -cf -xR -yE -MU -qI -ac -Ml -WS -mL -di -fa -gG -Ne -Ne -Ne -Ne -Nt -gO -ha -eG -yl -mu -in -in -ZJ -ov -hr -gh -ov -ZJ -in -dm -mG -iP -je -eG -YE -IV -DB -vG -jQ -po -WW -QY -vr -qN -qN -qN -qN -vr -hO -Rh -rW -Ed -aa -aa -mF -aa -aa -aa -"} -(44,1,1) = {" -cf -cf -cf -cf -cf -cf -cf -cf -cf -xR -yE -MU -am -ac -di -WS -Eq -di -aL -WM -nj -gG -WM -gG -HJ -ZN -eV -eG -nt -in -in -in -uj -ov -Os -jb -ov -tU -in -dm -TL -fu -aS -eG -Bk -td -cJ -fz -jQ -po -TX -xw -xw -xw -xw -xw -xw -xw -xw -Xk -rW -Ed -aa -aa -mF -aa -aa -aa -"} -(45,1,1) = {" -AW -Mt -ys -jA -Ym -pL -YZ -Cw -dN -GF -yE -MU -di -di -di -TA -di -di -gv -gG -gG -nx -zr -aj -gG -ZN -Cb -eG -Mo -in -in -in -rw -ov -hr -gh -ov -Zs -in -dm -TL -aF -gJ -eG -sf -sf -sf -sf -jQ -BM -rW -if -XQ -Rv -rW -rW -if -XQ -if -rW -BM -jQ -aa -aa -mF -aa -aa -aa -"} -(46,1,1) = {" -AW -bQ -tP -Dm -pK -Cj -Cj -Hd -Al -EP -yE -MU -di -LQ -xd -AF -eF -di -HY -WM -WM -Dd -zr -aj -gG -ZN -yp -eG -ce -in -in -in -rw -ov -hr -gh -ov -Zs -in -dm -xJ -gw -aT -eG -Pj -AT -AT -Pj -jQ -jQ -jQ -jQ -jQ -jQ -jQ -jQ -jQ -jQ -jQ -jQ -jQ -jQ -eG -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -AW -Cj -dd -Dm -pK -Cj -Cj -KY -dN -Dt -yE -MU -di -GC -xN -DF -uJ -di -NW -qh -qh -nk -ds -OK -BI -eY -Sr -eG -Qo -in -in -in -uj -ov -Os -jb -ov -tU -in -dm -in -in -in -mu -in -in -in -in -in -mu -in -in -in -mu -in -in -in -mu -in -in -in -Ai -Pj -Pj -Pj -aa -aa -aa -"} -(48,1,1) = {" -AW -Cj -Cj -cr -sS -Cj -xV -Xm -dN -Dt -yE -MU -di -RM -gE -kb -VN -di -Yk -Yk -Yk -Yk -Yk -Yk -Yk -Yk -Yk -eG -aW -in -in -in -KC -ov -Vo -Nd -ov -KC -in -dm -zp -mI -zp -zp -zp -ZS -Qi -Qi -Qi -ih -Qi -Qi -Qi -ih -Qi -Qi -Qi -ih -Qi -Qi -MP -Qk -Ys -CC -nl -aa -aa -aa -"} -(49,1,1) = {" -AW -Cj -ZV -JQ -dN -dN -yz -dN -dN -Dt -yE -MU -di -Ek -Lt -ag -uJ -di -aa -aa -aa -aa -aa -aa -aa -aa -aa -eG -EX -aH -Nn -OQ -in -in -in -Pf -in -in -in -Vw -in -in -mX -in -in -Yd -in -Vw -in -in -in -mX -in -mn -in -Vw -in -in -in -mX -in -in -Pj -Pj -Pj -aa -aa -aa -"} -(50,1,1) = {" -AW -Cj -Cj -Cj -dN -fb -Wl -Vx -dN -GH -yE -JW -di -Nc -Lt -di -uJ -di -aa -aa -aa -aa -aa -aa -aa -aa -aa -eG -sa -fu -aK -fK -in -aM -aN -aP -aQ -in -in -in -in -in -in -in -in -lN -in -Pj -Pj -eG -Pj -Pj -Pj -eG -Pj -Pj -Pj -eG -Pj -Pj -Pj -eG -eG -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -AW -wG -rE -hm -dN -GN -Wl -SH -dN -ro -yU -PM -di -oa -Lt -ZL -uJ -di -aa -aa -aa -aa -aa -aa -aa -aa -aa -eG -xJ -aI -gw -pH -jq -in -in -in -in -jq -in -in -in -jq -in -in -in -Yd -Or -eG -aa -aa -aa -aa -aa -ac -aa -aa -aa -aa -aa -aa -aa -ac -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -dN -dN -dN -dN -dN -oV -iz -Hp -dN -sD -sD -sD -di -di -di -di -EC -di -aa -aa -aa -aa -aa -aa -aa -aa -aa -eG -dr -dr -dr -gi -hF -dr -hF -dr -hF -dr -gi -dr -dr -dr -PP -cq -in -Yd -in -eG -aa -aa -aa -aa -aa -ac -aa -aa -aa -aa -aa -aa -aa -ac -aa -mF -aa -aa -aa -aa -"} -(53,1,1) = {" -rd -sc -nL -se -kt -vH -vH -uC -dN -aa -aa -aa -ac -aa -aa -di -Nw -di -aa -aa -aa -aa -aa -aa -aa -aa -aa -eG -Pj -Pj -Pj -eG -Pj -Pj -Pj -Pj -Pj -Pj -eG -Pj -Pj -Pj -eG -eG -mD -Yd -in -Pj -aa -aa -aa -aa -aa -ac -aa -aa -aa -aa -aa -aa -aa -ac -aa -mF -aa -aa -aa -aa -"} -(54,1,1) = {" -rd -se -se -pM -dN -vH -vH -IF -dN -aa -aa -aa -ac -aa -aa -di -uU -di -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -aa -aa -ac -aa -aa -aa -aa -aa -aa -ac -aa -aa -aa -aa -eG -in -AZ -in -Pj -ac -ac -ac -ac -ac -ac -ac -ac -aa -aa -aa -aa -aa -ac -ac -mF -aa -aa -aa -aa -"} -(55,1,1) = {" -rd -se -se -Ve -dN -eE -eE -eE -dN -aa -aa -aa -ac -aa -aa -ac -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -aa -aa -ac -aa -aa -aa -aa -aa -aa -ac -aa -aa -aa -aa -eG -Pj -Qd -Pj -eG -aa -aa -aa -aa -aa -ac -aa -mF -mF -mF -mF -mF -mF -mF -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -rd -Fr -um -xW -dN -eE -eE -eE -dN -aa -aa -aa -ac -aa -aa -mF -aa -mF -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -aa -aa -ac -aa -aa -aa -aa -aa -aa -ac -aa -aa -aa -aa -ac -Pj -CC -Pj -ac -aa -aa -aa -aa -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -dN -dN -dN -dN -dN -dN -dN -dN -dN -aa -aa -aa -ac -aa -aa -mF -aa -mF -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mF -mF -mF -Pj -kX -Pj -ac -ac -mF -mF -mF -mF -mF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -ac -aa -aa -aa -ac -aa -aa -aa -ac -aa -aa -aa -ac -aa -aa -ac -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -mF -mF -mF -mF -mF -mF -mF -mF -mF -mF -mF -mF -mF -mF -mF -mF -aa -mF -mF -ac -mF -mF -mF -mF -ac -mF -mF -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/_maps/RandomRuins/SpaceRuins/the_faceoff.dmm b/_maps/RandomRuins/SpaceRuins/the_faceoff.dmm index 60bc78ed8e75c7..08175777752e64 100644 --- a/_maps/RandomRuins/SpaceRuins/the_faceoff.dmm +++ b/_maps/RandomRuins/SpaceRuins/the_faceoff.dmm @@ -471,7 +471,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/misc/asteroid/basalt/airless, /area/ruin/space) "so" = ( @@ -1179,7 +1179,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/misc/asteroid/basalt/airless, /area/ruin/space) "YE" = ( diff --git a/_maps/RandomRuins/SpaceRuins/the_outlet.dmm b/_maps/RandomRuins/SpaceRuins/the_outlet.dmm index 89f41588081387..e10d5abc1118d5 100644 --- a/_maps/RandomRuins/SpaceRuins/the_outlet.dmm +++ b/_maps/RandomRuins/SpaceRuins/the_outlet.dmm @@ -75,7 +75,7 @@ /turf/open/floor/eighties, /area/ruin/space/has_grav/the_outlet/storefront) "cK" = ( -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/machinery/light/small/directional/west, /obj/effect/decal/cleanable/blood{ icon_state = "floor2-old" @@ -1056,7 +1056,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-4" }, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/crayon{ icon_state = "rune6" }, @@ -1222,7 +1222,7 @@ /area/ruin/space/has_grav/the_outlet/storefront) "Db" = ( /obj/effect/decal/cleanable/crayon, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /turf/open/floor/cult, /area/ruin/space/has_grav/the_outlet/cultinfluence) "Do" = ( @@ -1481,7 +1481,7 @@ /obj/effect/decal/cleanable/crayon{ icon_state = "rune2" }, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /turf/open/floor/iron/white, /area/ruin/space/has_grav/the_outlet/researchrooms) "IF" = ( @@ -1573,7 +1573,7 @@ /turf/template_noop, /area/template_noop) "LL" = ( -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/crayon{ icon_state = "rune2" }, @@ -1667,7 +1667,7 @@ /obj/effect/decal/cleanable/crayon{ icon_state = "rune4" }, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /turf/open/floor/cult, /area/ruin/space/has_grav/the_outlet/cultinfluence) "NE" = ( @@ -1976,7 +1976,7 @@ dir = 8 }, /obj/effect/decal/cleanable/crayon, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-127" }, @@ -2101,7 +2101,7 @@ /turf/open/floor/iron/white, /area/ruin/space/has_grav/the_outlet/researchrooms) "Yr" = ( -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/crayon, /turf/open/floor/cult, /area/ruin/space/has_grav/the_outlet/cultinfluence) diff --git a/_maps/RandomRuins/SpaceRuins/travelers_rest.dmm b/_maps/RandomRuins/SpaceRuins/travelers_rest.dmm index 8e773ee9926665..7ad7cfc5a1d77a 100644 --- a/_maps/RandomRuins/SpaceRuins/travelers_rest.dmm +++ b/_maps/RandomRuins/SpaceRuins/travelers_rest.dmm @@ -405,7 +405,7 @@ /obj/effect/turf_decal/trimline/dark_green/filled/line{ dir = 1 }, -/obj/item/storage/secure/safe/directional/north{ +/obj/structure/secure_safe/directional/north{ pixel_y = 45 }, /obj/structure/sink/kitchen/directional/south{ diff --git a/_maps/RandomRuins/SpaceRuins/waystation.dmm b/_maps/RandomRuins/SpaceRuins/waystation.dmm index a13a5087ee3d8f..af2cc329685558 100644 --- a/_maps/RandomRuins/SpaceRuins/waystation.dmm +++ b/_maps/RandomRuins/SpaceRuins/waystation.dmm @@ -1,13 +1,4 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ak" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp{ - pixel_x = -5; - pixel_y = 2; - start_on = 0 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/waystation/dorms) "ar" = ( /obj/machinery/vending/coffee, /obj/effect/turf_decal/siding/green, @@ -35,6 +26,15 @@ }, /turf/open/floor/iron/freezer, /area/ruin/space/has_grav/waystation/dorms) +"bg" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp{ + pixel_x = -5; + pixel_y = 2; + start_on = 0 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/waystation/dorms) "bt" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, @@ -179,6 +179,17 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/ruin/space/has_grav/waystation/dorms) +"dX" = ( +/obj/effect/turf_decal/siding/red, +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/flashlight/lamp{ + pixel_x = -5; + pixel_y = 2; + start_on = 0 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/waystation/securestorage) "dY" = ( /obj/effect/mapping_helpers/burnt_floor, /obj/item/ammo_casing/c45/spent{ @@ -1377,17 +1388,6 @@ /obj/structure/broken_flooring/pile/directional/east, /turf/template_noop, /area/template_noop) -"xk" = ( -/obj/machinery/porta_turret/syndicate/pod{ - dir = 1; - max_integrity = 80 - }, -/obj/machinery/porta_turret/syndicate/pod{ - dir = 1; - max_integrity = 80 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ruin/space/has_grav/powered/waystation/assaultpod) "xq" = ( /obj/machinery/conveyor{ dir = 1; @@ -1791,24 +1791,6 @@ /obj/item/storage/toolbox/mechanical/old, /turf/open/floor/plating, /area/ruin/space/has_grav/waystation) -"FK" = ( -/obj/structure/table, -/obj/item/folder{ - pixel_x = 6; - pixel_y = 3 - }, -/obj/item/pen, -/obj/item/pen{ - pixel_x = 6; - pixel_y = 2 - }, -/obj/item/flashlight/lamp{ - pixel_x = -5; - pixel_y = 2; - start_on = 0 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/waystation/cargooffice) "FM" = ( /obj/structure/chair/comfy/shuttle{ dir = 4; @@ -1911,6 +1893,24 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/ruin/space/has_grav/waystation/dorms) +"IU" = ( +/obj/structure/table, +/obj/item/folder{ + pixel_x = 6; + pixel_y = 3 + }, +/obj/item/pen, +/obj/item/pen{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/flashlight/lamp{ + pixel_x = -5; + pixel_y = 2; + start_on = 0 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/waystation/cargooffice) "IZ" = ( /obj/effect/turf_decal/loading_area/red{ dir = 8 @@ -2101,6 +2101,16 @@ }, /turf/open/floor/iron, /area/ruin/space/has_grav/waystation/cargooffice) +"LL" = ( +/obj/structure/table/wood, +/obj/effect/decal/cleanable/dirt, +/obj/item/flashlight/lamp{ + pixel_x = -5; + pixel_y = 2; + start_on = 0 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/waystation/dorms) "LQ" = ( /obj/effect/decal/cleanable/blood/splatter, /obj/effect/decal/cleanable/blood/tracks{ @@ -2458,16 +2468,6 @@ }, /turf/open/floor/iron, /area/ruin/space/has_grav/waystation/cargooffice) -"RO" = ( -/obj/structure/table/wood, -/obj/effect/decal/cleanable/dirt, -/obj/item/flashlight/lamp{ - pixel_x = -5; - pixel_y = 2; - start_on = 0 - }, -/turf/open/floor/wood, -/area/ruin/space/has_grav/waystation/dorms) "RW" = ( /obj/effect/turf_decal/tile/brown/half/contrasted, /obj/item/kirbyplants/random, @@ -2581,17 +2581,6 @@ }, /turf/open/floor/iron, /area/ruin/space/has_grav/waystation/dorms) -"Uc" = ( -/obj/effect/turf_decal/siding/red, -/obj/structure/table/reinforced, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/item/flashlight/lamp{ - pixel_x = -5; - pixel_y = 2; - start_on = 0 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/waystation/securestorage) "Ud" = ( /obj/machinery/door/airlock, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2695,7 +2684,7 @@ "VE" = ( /obj/machinery/door/airlock/external{ id_tag = "SBC_corvette_bolt"; - name = "Syndicate Corvette Airlock" + name = "Symphionia Corvette Airlock" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/mineral/plastitanium, @@ -4007,22 +3996,22 @@ pK pK pK Ls -ak +bg Of Ls -RO +LL Of lB -ak +bg dW Ls -RO +LL dW Ls -ak +bg dW Ls -ak +bg TL QN Dj @@ -4646,7 +4635,7 @@ xw jV UG lx -FK +IU Dc fc zh @@ -4714,7 +4703,7 @@ Qx SL jG my -xk +lM tb FM TW @@ -4832,7 +4821,7 @@ xw jV UG xv -FK +IU Dc Cx Pd @@ -5063,7 +5052,7 @@ pK yi vn LQ -Uc +dX Oj WS yi diff --git a/_maps/RandomZLevels/SnowCabin.dmm b/_maps/RandomZLevels/SnowCabin.dmm index 42e6fd5279b152..09333f6fb5adf5 100644 --- a/_maps/RandomZLevels/SnowCabin.dmm +++ b/_maps/RandomZLevels/SnowCabin.dmm @@ -132,7 +132,7 @@ /obj/structure/cable, /obj/machinery/power/smes/magical{ desc = "A high-capacity superconducting magnetic energy storage (SMES) unit. It seems to be powered just fine without our intervention."; - name = "\improper Nanotrasen power storage unit" + name = "\improper Symphionia power storage unit" }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -1381,7 +1381,6 @@ /obj/machinery/space_heater, /obj/effect/decal/remains/robot, /obj/structure/sign/warning/fire/directional/north, -/obj/machinery/space_heater, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/awaymission/cabin) @@ -1640,7 +1639,7 @@ }, /area/awaymission/cabin/caves/sovietcave) "is" = ( -/obj/structure/closet/secure_closet/freezer/kitchen, +/obj/structure/closet/secure_closet/freezer/fridge/open, /obj/item/reagent_containers/condiment/enzyme, /turf/open/floor/iron/freezer, /area/awaymission/cabin) @@ -4460,8 +4459,8 @@ /obj/structure/signpost/salvation{ density = 0; desc = "An intercomm. Someone seems to be on the other end. I should use it."; - icon = 'icons/obj/radio.dmi'; - icon_state = "intercom"; + icon = 'icons/obj/machines/wallmounts.dmi'; + icon_state = "intercom_prison"; max_integrity = 99999; name = "\proper Fun Jail intercom"; pixel_y = 32; @@ -4833,7 +4832,7 @@ /obj/item/gun/ballistic/automatic/toy{ anchored = 1; desc = "Don't try it."; - name = "\improper Nanotrasen Saber SMG" + name = "\improper Symphionia Saber SMG" }, /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/indestructible, @@ -4907,7 +4906,7 @@ /area/awaymission/cabin/caves) "RL" = ( /obj/item/toy/figure/dsquad{ - desc = "The muscle behind the exploration team. May or may not be a secret soldier depending on the mood of Nanotrasen following their own lore."; + desc = "The muscle behind the exploration team. May or may not be a secret soldier depending on the mood of Symphionia following their own lore."; name = "exploration squad Officer"; toysay = "We're top secret until we're not!" }, diff --git a/_maps/RandomZLevels/TheBeach.dmm b/_maps/RandomZLevels/TheBeach.dmm index cdf1895ee91761..a2d1f2a94f56d5 100644 --- a/_maps/RandomZLevels/TheBeach.dmm +++ b/_maps/RandomZLevels/TheBeach.dmm @@ -734,7 +734,7 @@ /area/awaymission/beach) "jF" = ( /obj/machinery/vending/boozeomat/all_access{ - desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one. May not work for bartenders that don't have Nanotrasen bank accounts." + desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one. May not work for bartenders that don't have Symphionia bank accounts." }, /turf/open/floor/wood/large, /area/awaymission/beach) @@ -1279,8 +1279,8 @@ "qf" = ( /obj/structure/table/bronze, /obj/item/pai_card{ - desc = "A real Nanotrasen success, these personal AIs provide all of the companionship of an AI without any law related red-tape."; - name = "\improper Nanotrasen-brand personal AI device exhibit"; + desc = "A real Symphionia success, these personal AIs provide all of the companionship of an AI without any law related red-tape."; + name = "\improper Symphionia-brand personal AI device exhibit"; pixel_y = 2 }, /turf/open/floor/wood/large, @@ -2050,8 +2050,8 @@ "AB" = ( /obj/structure/table/bronze, /obj/item/pai_card{ - desc = "A real Nanotrasen success, these personal AIs provide all of the companionship of an AI without any law related red-tape."; - name = "\improper Nanotrasen-brand personal AI device exhibit"; + desc = "A real Symphionia success, these personal AIs provide all of the companionship of an AI without any law related red-tape."; + name = "\improper Symphionia-brand personal AI device exhibit"; pixel_y = 4 }, /turf/open/floor/wood, @@ -2976,7 +2976,7 @@ "La" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /obj/effect/spawner/random/maintenance/two, /obj/item/storage/toolbox/fishing{ pixel_y = 2 @@ -3326,8 +3326,8 @@ "OU" = ( /obj/structure/chair/plastic, /obj/item/pai_card{ - desc = "A real Nanotrasen success, these personal AIs provide all of the companionship of an AI without any law related red-tape."; - name = "\improper Nanotrasen-brand personal AI device exhibit"; + desc = "A real Symphionia success, these personal AIs provide all of the companionship of an AI without any law related red-tape."; + name = "\improper Symphionia-brand personal AI device exhibit"; pixel_y = 3; pixel_x = -1 }, @@ -3702,8 +3702,8 @@ "Ut" = ( /obj/structure/table/wood, /obj/item/pai_card{ - desc = "A real Nanotrasen success, these personal AIs provide all of the companionship of an AI without any law related red-tape."; - name = "\improper Nanotrasen-brand personal AI device exhibit"; + desc = "A real Symphionia success, these personal AIs provide all of the companionship of an AI without any law related red-tape."; + name = "\improper Symphionia-brand personal AI device exhibit"; pixel_y = 3; pixel_x = 10 }, diff --git a/_maps/RandomZLevels/blackmesa.dmm b/_maps/RandomZLevels/blackmesa.dmm deleted file mode 100644 index a4484e7711d3f4..00000000000000 --- a/_maps/RandomZLevels/blackmesa.dmm +++ /dev/null @@ -1,81705 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aac" = ( -/obj/item/book/granter/action/spell/summonitem{ - name = "\proper an extremely flamboyant book" - }, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/antag_token_nook) -"aai" = ( -/turf/closed/wall/ice, -/area/awaymission/black_mesa/cryo_room) -"aaj" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_hallway) -"aak" = ( -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa) -"aal" = ( -/obj/structure/pod, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/crowbar_nook) -"aam" = ( -/obj/machinery/door/poddoor/preopen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/tram_room) -"aan" = ( -/obj/machinery/status_display/door_timer{ - id = "Mesa 2"; - name = "Cell 2"; - pixel_x = -32 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aaA" = ( -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"aaD" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/tram_room) -"aaK" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 8 - }, -/obj/structure/flora/biolumi/lamp/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"aaO" = ( -/obj/item/clothing/mask/gas/hecu1, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/awaymission/black_mesa/security_outpost) -"aaS" = ( -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/tram_room) -"aaZ" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/indestructible/rock, -/area/awaymission/black_mesa) -"abd" = ( -/obj/structure/closet/crate/wooden, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/cryo_storage) -"abk" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing/corner{ - dir = 1 - }, -/turf/open/chasm{ - planetary_atmos = 1 - }, -/area/awaymission/black_mesa/entrance) -"abo" = ( -/obj/structure/falsewall/reinforced, -/obj/structure/sign/poster/contraband/communist_state, -/turf/open/floor/plating, -/area/awaymission/black_mesa/security_outpost) -"abs" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/servers) -"aby" = ( -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/servers) -"abA" = ( -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"abG" = ( -/obj/structure/fluff/tram_rail{ - dir = 1 - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa/tram_room) -"abJ" = ( -/obj/structure/chair/stool/bamboo, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"abK" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"abM" = ( -/obj/effect/random_mob_placer/xen, -/obj/effect/decal/cleanable/blood/footprints, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"abQ" = ( -/obj/item/food/mre_course/dessert/chocolate, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"abR" = ( -/obj/structure/table, -/obj/item/flashlight/seclite, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"abS" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/glass/mug/tea, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"abV" = ( -/obj/structure/table, -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"acc" = ( -/obj/structure/chair/sofa/bench{ - dir = 4 - }, -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_hallway) -"ace" = ( -/obj/machinery/light/cold, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_room) -"acg" = ( -/obj/structure/bonfire/prelit, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"ach" = ( -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"aci" = ( -/obj/structure/table/wood, -/obj/item/storage/fancy/donut_box, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/awaymission/black_mesa/security_outpost) -"acn" = ( -/obj/effect/spawner/random/bioluminescent_plant/weak, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"acp" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/machinery/light/broken/directional/east, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"acr" = ( -/obj/machinery/autolathe/hacked, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"acu" = ( -/obj/machinery/light/cold/directional/east, -/obj/structure/table, -/obj/structure/alien/weeds/xen, -/obj/effect/spawner/random/exotic/technology, -/obj/effect/spawner/random/exotic/technology, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"acx" = ( -/obj/item/pickaxe, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating/elevatorshaft, -/area/awaymission/black_mesa/cryo_room) -"acE" = ( -/obj/structure/table, -/obj/machinery/computer/libraryconsole, -/obj/machinery/light/cold/directional/west, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"acJ" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/plating/elevatorshaft, -/area/awaymission/black_mesa/cryo_storage) -"acK" = ( -/obj/machinery/door/airlock/security, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"acL" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_hallway) -"acP" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing, -/turf/open/chasm{ - planetary_atmos = 1 - }, -/area/awaymission/black_mesa/entrance) -"acT" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lantern, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"acX" = ( -/turf/closed/wall/mineral/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"acY" = ( -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/structure/extinguisher_cabinet/directional/south, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/to_cryo_room) -"acZ" = ( -/obj/machinery/light/broken/directional/north, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_lobby) -"add" = ( -/obj/structure/billboard/donk_n_go, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/tram_room) -"ade" = ( -/obj/structure/spacevine/xen/thick, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"adf" = ( -/obj/effect/turf_decal/stripes, -/turf/open/misc/ice, -/area/awaymission/black_mesa/cryo_room) -"adi" = ( -/obj/machinery/door/poddoor{ - id = "biolabs" - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/cryo_hallway) -"adj" = ( -/obj/structure/flora/biolumi, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_hall) -"adl" = ( -/obj/machinery/door/window/brigdoor/security/cell{ - dir = 8; - id = "Mesa 3" - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"ado" = ( -/obj/structure/table, -/obj/item/pen, -/obj/structure/alien/weeds/xen, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"adq" = ( -/obj/effect/spawner/random/bioluminescent_plant/weak, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/crowbar_nook) -"adu" = ( -/obj/structure/marker_beacon/green, -/turf/open/floor/vault/alien, -/area/awaymission/black_mesa/xen/nihilanth_arena) -"adv" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/tram_tunnel) -"adx" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/tram_room) -"adA" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 8 - }, -/obj/effect/landmark/awaystart, -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/entrance) -"adB" = ( -/obj/structure/table, -/obj/item/folder/yellow, -/obj/item/folder/yellow{ - pixel_x = 4 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_lobby) -"adE" = ( -/obj/effect/turf_decal/siding/dark_green{ - dir = 1 - }, -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"adF" = ( -/obj/structure/billboard/azik, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/tram_room) -"adG" = ( -/obj/item/chair/stool/bamboo{ - dir = 4 - }, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"adL" = ( -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab, -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/entrance) -"adM" = ( -/obj/item/storage/medkit/regular, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"adP" = ( -/obj/structure/closet/crate/bin, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_room) -"adW" = ( -/obj/effect/baseturf_helper/black_mesa_xen, -/turf/closed/indestructible/rock/xen, -/area/awaymission/black_mesa/xen) -"adY" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"aeb" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"aed" = ( -/obj/machinery/modular_computer/preset/id{ - dir = 4 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_lobby) -"aeo" = ( -/obj/structure/table, -/obj/item/radio/intercom, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"aep" = ( -/obj/structure/cable, -/obj/item/ammo_casing/spent, -/obj/item/ammo_casing/spent, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aer" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_room) -"aes" = ( -/obj/effect/random_mob_placer/vortigaunt, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa) -"aew" = ( -/obj/structure/sign/warning/chem_diamond/directional/north, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_room) -"aey" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/to_cryo_room) -"aeB" = ( -/obj/structure/table, -/obj/item/folder/white{ - pixel_x = 2 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"aeD" = ( -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"aeF" = ( -/obj/structure/closet/crate/large, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance_tunnel) -"aeK" = ( -/obj/machinery/door/window/brigdoor/security/cell{ - dir = 4; - id = "Mesa 6" - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aeR" = ( -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/cryo_room) -"aeV" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ - dir = 8 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"aeX" = ( -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/cryo_room) -"afe" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/servers) -"aff" = ( -/obj/machinery/computer{ - dir = 1 - }, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"afi" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/tram_room) -"afj" = ( -/turf/closed/mineral/black_mesa, -/area/awaymission/black_mesa) -"afk" = ( -/turf/closed/indestructible/riveted, -/area/awaymission/black_mesa/xen/nihilanth_arena) -"afo" = ( -/obj/machinery/portable_atmospherics/canister/hydrogen, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/cryo_room) -"afv" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/security, -/obj/effect/decal/cleanable/blood/footprints, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"afw" = ( -/obj/effect/spawner/random/bioluminescent_plant, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"afy" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_hallway) -"afB" = ( -/obj/structure/fluff/tram_rail{ - dir = 1 - }, -/obj/structure/fluff/tram_rail, -/obj/effect/spawner/random/exotic/antag_gear_weak, -/obj/effect/spawner/random/exotic/antag_gear_weak, -/turf/open/floor/plating, -/area/awaymission/black_mesa/tram_room) -"afC" = ( -/obj/structure/rack/gunrack, -/obj/item/storage/box/ammo_box/shotgun_12g, -/obj/item/storage/box/ammo_box/shotgun_12g, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"afE" = ( -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/tram_room) -"afF" = ( -/obj/structure/xen_pylon, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/crowbar_nook) -"afJ" = ( -/obj/structure/table, -/obj/item/geiger_counter, -/turf/open/misc/ice, -/area/awaymission/black_mesa/cryo_room) -"afK" = ( -/obj/structure/noticeboard{ - pixel_y = 29 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"afM" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 8 - }, -/area/awaymission/black_mesa/xen/freeman_hallway) -"afR" = ( -/obj/structure/chair/sofa/bench{ - dir = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_hallway) -"afS" = ( -/obj/structure/closet/crate/large, -/obj/item/stack/sheet/plasteel, -/turf/open/floor/plating, -/area/awaymission/black_mesa/tram_tunnel) -"afU" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/structure/closet/crate/bin, -/obj/structure/alien/weeds/xen, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"agb" = ( -/obj/effect/spawner/random/bioluminescent_plant, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"agc" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/tram_room) -"agi" = ( -/obj/structure/chair/sofa/bench{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_hallway) -"agq" = ( -/obj/effect/random_mob_placer/xen, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"ags" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/gas_emitter_chamber) -"agw" = ( -/obj/structure/alien/weeds/xen, -/obj/structure/xen_crystal, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa) -"agz" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/obj/effect/random_mob_placer/security_guard, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/gas_emitter_chamber) -"agD" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/light/cold/directional/north, -/turf/open/chasm{ - planetary_atmos = 1 - }, -/area/awaymission/black_mesa/entrance) -"agE" = ( -/obj/structure/cable, -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"agF" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/cryo_storage) -"agG" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/cryo_room) -"agI" = ( -/obj/structure/cable, -/turf/closed/wall, -/area/awaymission/black_mesa/security_outpost) -"agN" = ( -/obj/structure/bed, -/obj/item/bedsheet, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"agW" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/gas_emitter_chamber) -"ahf" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 9 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"ahg" = ( -/turf/closed/indestructible/rock/xen, -/area/awaymission/black_mesa/xen/nihilanth_hallway) -"ahp" = ( -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/cryo_hallway) -"ahq" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aht" = ( -/obj/item/stack/sheet/cloth/ten, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/tram_room) -"ahy" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_lobby) -"ahA" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_hall) -"ahC" = ( -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_room) -"ahF" = ( -/obj/structure/headpike/bamboo, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"ahG" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/footprints{ - pixel_x = -1; - pixel_y = 2 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"ahI" = ( -/obj/structure/table, -/obj/item/raw_anomaly_core/bluespace, -/obj/item/stack/sheet/cloth/ten, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"ahQ" = ( -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/gas_emitter_chamber) -"ahR" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/structure/chair/sofa/bench, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"ahT" = ( -/obj/structure/table, -/obj/item/stack/sheet/plasteel, -/obj/item/stack/sheet/plasteel, -/obj/machinery/light/broken/directional/west, -/obj/structure/alien/weeds/xen, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"ahW" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/tram_room) -"aic" = ( -/obj/structure/closet/crate/large, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/cryo_storage) -"aid" = ( -/obj/machinery/power/rtg/abductor, -/obj/structure/cable, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa) -"aie" = ( -/obj/structure/noticeboard/directional/north, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"aig" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/indestructible/permalube, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aih" = ( -/obj/structure/chair/office, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/servers) -"air" = ( -/obj/machinery/computer{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"aiu" = ( -/obj/machinery/door/airlock/security, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/tram_room) -"aiy" = ( -/obj/effect/random_mob_placer/vortigaunt, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"aiA" = ( -/obj/structure/water_source/puddle/healing, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"aiC" = ( -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/machinery/light/cold, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/to_cryo_room) -"aiH" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/servers) -"aiM" = ( -/obj/structure/bed/maint, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa) -"aiW" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ - dir = 1 - }, -/obj/effect/random_mob_placer/xen, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"ajj" = ( -/obj/effect/random_mob_placer/vortigaunt_hostile, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"ajl" = ( -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/structure/flora/biolumi/flower/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/to_cryo_room) -"ajm" = ( -/obj/structure/closet/crate/wooden, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"ajs" = ( -/obj/structure/cable, -/obj/structure/table, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"ajx" = ( -/obj/machinery/light/cold/directional/west, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"ajz" = ( -/obj/structure/closet/crate/bin, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"ajH" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/tram_room) -"ajJ" = ( -/obj/machinery/modular_computer/preset/cargochat/science{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/servers) -"ajN" = ( -/obj/effect/spawner/structure/window/reinforced/shuttle, -/turf/open/floor/plating, -/area/awaymission/black_mesa/tram_room) -"ajS" = ( -/obj/structure/spacevine/xen/thick, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/antag_token_nook) -"ajT" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/servers) -"ajW" = ( -/obj/structure/closet/crate/large, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/cryo_storage) -"ajY" = ( -/obj/structure/fence/corner{ - dir = 1 - }, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"akd" = ( -/turf/closed/indestructible/riveted/boss, -/area/awaymission/black_mesa/xen/freeman_arena) -"ake" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_room) -"akf" = ( -/obj/structure/table, -/obj/item/food/donut/trumpet, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"akt" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/gas_emitter_chamber) -"akE" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/servers) -"akH" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_bus) -"akI" = ( -/obj/structure/sink/directional/east, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"akM" = ( -/obj/effect/spawner/random/bioluminescent_plant/weak, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"akN" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"akP" = ( -/obj/structure/decorative/shelf/crates, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"akU" = ( -/obj/machinery/computer{ - dir = 8 - }, -/obj/effect/turf_decal/stripes, -/turf/open/misc/asteroid/snow/standard_air, -/area/awaymission/black_mesa/cryo_room) -"akW" = ( -/obj/structure/table, -/obj/item/flashlight/lamp, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"akX" = ( -/obj/item/grenade/syndieminibomb/concussion, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"akZ" = ( -/obj/structure/sign/warning/cold_temp, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/cryo_room) -"alb" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 8 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"ale" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"alf" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark/corner{ - dir = 1 - }, -/area/awaymission/black_mesa/entrance_lobby) -"ali" = ( -/obj/effect/decal/cleanable/blood/footprints, -/obj/item/ammo_casing/shotgun/buckshot, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"alm" = ( -/obj/machinery/light/broken/directional/north, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/servers) -"alq" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"alr" = ( -/obj/structure/stone_tile/surrounding, -/obj/structure/xen_pylon/freeman{ - pixel_y = 12 - }, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_arena) -"aly" = ( -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/machinery/light/broken, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"alA" = ( -/turf/open/indestructible/permalube, -/area/awaymission/black_mesa/gas_emitter_chamber) -"alC" = ( -/obj/machinery/door/airlock/vault, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/gas_emitter_chamber) -"alG" = ( -/obj/structure/deployable_barricade/metal/plasteel{ - dir = 1 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"alO" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_lobby) -"alV" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"amf" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/button/door{ - id = "sectorcmain"; - pixel_y = 23 - }, -/obj/machinery/light/cold/directional/north, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/chasm{ - planetary_atmos = 1 - }, -/area/awaymission/black_mesa/entrance) -"amg" = ( -/obj/structure/rack/shelf, -/obj/item/gun_maintenance_supplies, -/obj/item/gun_maintenance_supplies, -/obj/item/gun_maintenance_supplies, -/obj/item/stack/sheet/plasteel, -/obj/item/storage/box/flashbangs, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/gas_emitter_chamber) -"amh" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_lobby) -"ams" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/chasm, -/area/awaymission/black_mesa/tram_room) -"amv" = ( -/obj/machinery/computer/crew{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"amx" = ( -/obj/structure/cable, -/obj/machinery/power/rtg/abductor, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa) -"amz" = ( -/obj/structure/chair/stool/bamboo, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"amE" = ( -/obj/effect/turf_decal/stripes, -/obj/machinery/light/cold/directional/east, -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/gas_emitter_chamber) -"amI" = ( -/obj/structure/fence, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"amL" = ( -/obj/structure/bed{ - dir = 4 - }, -/obj/item/bedsheet{ - dir = 1 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"amP" = ( -/obj/machinery/light/cold, -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/tram_room) -"amS" = ( -/obj/structure/table/abductor, -/turf/open/floor/vault/alien, -/area/awaymission/black_mesa/xen/nihilanth_hallway) -"amW" = ( -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/security_outpost) -"amZ" = ( -/obj/structure/chair/sofa/bench{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"ana" = ( -/obj/structure/fluff/tram_rail{ - dir = 1 - }, -/obj/structure/fluff/tram_rail, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance) -"anb" = ( -/turf/open/floor/vault/alien, -/area/awaymission/black_mesa/xen/nihilanth_hallway) -"and" = ( -/obj/structure/closet/secure_closet/brig, -/obj/item/poster/random_contraband, -/obj/effect/spawner/random/exotic/antag_gear_weak, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"ann" = ( -/obj/effect/gibspawner/human/bodypartless, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating/elevatorshaft, -/area/awaymission/black_mesa/cryo_room) -"ano" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/obj/structure/flora/biolumi/mine/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"ans" = ( -/obj/structure/table/wood, -/obj/item/gun/ballistic/automatic/p90, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/freeman_arena) -"ant" = ( -/obj/machinery/door/poddoor/preopen, -/obj/structure/fluff/tram_rail, -/obj/structure/fluff/tram_rail{ - dir = 1 - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa/tram_room) -"anu" = ( -/obj/machinery/portable_atmospherics/canister/hydrogen, -/turf/open/misc/ice, -/area/awaymission/black_mesa/cryo_room) -"anv" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/cryo_hallway) -"anw" = ( -/obj/structure/noticeboard{ - pixel_y = 29 - }, -/obj/structure/table, -/obj/item/reagent_containers/cup/glass/bottle/beer/light{ - pixel_x = -6; - pixel_y = -6 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"anA" = ( -/obj/structure/flora/biolumi/lamp/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/servers) -"anB" = ( -/obj/machinery/portable_atmospherics/canister/hydrogen, -/turf/open/indestructible/permalube, -/area/awaymission/black_mesa/gas_emitter_chamber) -"anG" = ( -/obj/machinery/door/window/right/directional/south{ - dir = 8; - name = "Jim Norton's Quebecois Coffee" - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"anJ" = ( -/obj/structure/table, -/obj/item/flamethrower/full/tank, -/obj/item/tank/internals/plasma/full, -/obj/item/tank/internals/plasma/full, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/cryo_room) -"anL" = ( -/obj/machinery/vending/coffee, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"anR" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 5 - }, -/turf/open/floor/iron/textured_corner{ - dir = 8 - }, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"anV" = ( -/obj/structure/decorative/shelf/crates1, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"anY" = ( -/obj/structure/cable, -/obj/machinery/light/directional/east{ - dir = 1 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aok" = ( -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/cryo_hallway) -"aol" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/cryo_hallway) -"aoy" = ( -/obj/machinery/door/puzzle/keycard/stockroom, -/turf/open/floor/plating, -/area/awaymission/black_mesa/security_outpost) -"aoE" = ( -/turf/closed/indestructible/rock/xen, -/area/awaymission/black_mesa/xen) -"aoG" = ( -/obj/machinery/door/airlock/science/glass, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aoJ" = ( -/obj/structure/flora/biolumi, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_lobby) -"aoK" = ( -/obj/effect/random_mob_placer/hev_zombie, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"aoO" = ( -/obj/item/storage/medkit/regular, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa) -"aoZ" = ( -/obj/machinery/portable_atmospherics/canister/nob, -/turf/open/misc/ice, -/area/awaymission/black_mesa/cryo_room) -"apd" = ( -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/machinery/light/broken, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/to_cryo_room) -"apg" = ( -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/tram_room) -"apk" = ( -/obj/structure/table, -/obj/machinery/recharger, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/gas_emitter_chamber) -"apm" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 8 - }, -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/tram_room) -"apn" = ( -/obj/structure/table, -/obj/machinery/light/cold/directional/west, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"aps" = ( -/obj/effect/bump_teleporter{ - id = "adminup"; - id_target = "admindown" - }, -/turf/open/floor/plating/elevatorshaft, -/area/awaymission/black_mesa/cryo_storage) -"apt" = ( -/obj/structure/lattice/catwalk, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance_lobby) -"apu" = ( -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/tram_room) -"apx" = ( -/obj/structure/closet/crate/bin, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"apy" = ( -/obj/machinery/door/poddoor/preopen, -/obj/structure/fluff/tram_rail{ - dir = 1 - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa/tram_room) -"apD" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"apG" = ( -/turf/closed/indestructible/rock, -/area/awaymission/black_mesa/entrance) -"apJ" = ( -/obj/structure/table, -/obj/item/raw_anomaly_core/vortex, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/cryo_room) -"apL" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/cryo_storage) -"apO" = ( -/obj/structure/stone_tile/slab, -/obj/effect/spawner/random/bioluminescent_plant, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_arena) -"apQ" = ( -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/machinery/door/poddoor{ - id = "teleporter" - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/to_cryo_room) -"apT" = ( -/obj/item/ammo_casing/spent, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"apW" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/structure/chair/sofa/bench/left, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"aqa" = ( -/obj/structure/cursed_slot_machine, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"aqb" = ( -/obj/structure/marker_beacon/burgundy, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"aqc" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/to_cryo_room) -"aqd" = ( -/obj/machinery/door/airlock/vault, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/vault/alien, -/area/awaymission/black_mesa/xen/nihilanth_hallway) -"aqo" = ( -/obj/machinery/door/airlock/maintenance, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance_tunnel) -"aqq" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/vault/alien, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"aqr" = ( -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/to_cryo_room) -"aqy" = ( -/obj/machinery/portable_atmospherics/canister/zauker, -/obj/machinery/light/cold/directional/east, -/turf/open/misc/asteroid/snow/standard_air, -/area/awaymission/black_mesa/cryo_room) -"aqD" = ( -/obj/machinery/blackbox_recorder, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/servers) -"aqG" = ( -/obj/machinery/portable_atmospherics/canister/nob, -/obj/machinery/light/cold, -/turf/open/misc/ice, -/area/awaymission/black_mesa/cryo_room) -"aqH" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/to_cryo_room) -"aqL" = ( -/obj/structure/fluff/tram_rail, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance) -"aqM" = ( -/obj/structure/sign/warning/no_smoking/circle/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_room) -"aqQ" = ( -/obj/structure/alien/weeds/xen, -/obj/effect/random_mob_placer/vortigaunt_hostile, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_hall) -"aqR" = ( -/obj/machinery/door/airlock/science/glass, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/indestructible/permalube, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aqS" = ( -/obj/structure/cable, -/obj/machinery/light/directional/east{ - dir = 2 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aqU" = ( -/obj/machinery/status_display/door_timer{ - id = "Mesa 3"; - name = "Cell 3"; - pixel_x = -32 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aqW" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 6 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"arc" = ( -/obj/effect/gibspawner/human/bodypartless, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/gas_emitter_chamber) -"ard" = ( -/obj/effect/spawner/random/bioluminescent_plant, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_arena) -"arj" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"ark" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_hall) -"arn" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/tram_room) -"arq" = ( -/obj/structure/chair/sofa/bamboo/right, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"arr" = ( -/obj/structure/stone_tile/slab, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_arena) -"ars" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/tram_tunnel) -"arz" = ( -/turf/open/space/basic, -/area/space) -"arA" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance_tunnel) -"arF" = ( -/obj/machinery/modular_computer/preset/civilian{ - dir = 4 - }, -/obj/machinery/light/cold/directional/north, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"arM" = ( -/obj/machinery/portable_atmospherics/canister/nob, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/gas_emitter_chamber) -"arN" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/pen, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_lobby) -"arP" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/tram_room) -"arQ" = ( -/obj/machinery/light/broken/directional/west, -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/servers) -"arR" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/plating, -/area/awaymission/black_mesa/tram_room) -"arS" = ( -/obj/item/chair/stool/bamboo, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"arT" = ( -/obj/item/ammo_casing/spent, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"asd" = ( -/obj/structure/rack/gunrack, -/obj/item/gun/ballistic/automatic/pistol/sol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"asl" = ( -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"asm" = ( -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/gas_emitter_chamber) -"asq" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/indestructible/permalube, -/area/awaymission/black_mesa/gas_emitter_chamber) -"asz" = ( -/obj/item/crowbar/freeman, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/crowbar_nook) -"asA" = ( -/obj/machinery/status_display/door_timer{ - id = "Mesa 1"; - name = "Cell 1"; - pixel_x = -32 - }, -/obj/item/ammo_casing/spent, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"asB" = ( -/obj/structure/railing{ - dir = 1 - }, -/turf/closed/mineral/black_mesa, -/area/awaymission/black_mesa/tram_room) -"asC" = ( -/obj/structure/cable, -/obj/structure/chair/plastic{ - dir = 4 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"asD" = ( -/obj/machinery/door/airlock/silver, -/turf/open/indestructible/permalube, -/area/awaymission/black_mesa/gas_emitter_chamber) -"asJ" = ( -/obj/machinery/gateway/away/required_key, -/turf/open/floor/vault/alien, -/area/awaymission/black_mesa/xen/nihilanth_arena) -"asO" = ( -/obj/machinery/vending/cigarette/syndicate, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"asQ" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 4 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"asS" = ( -/obj/structure/sign/warning/cold_temp, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/gas_emitter_chamber) -"asW" = ( -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/indestructible/permalube, -/area/awaymission/black_mesa/gas_emitter_chamber) -"atd" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/obj/machinery/light/broken/directional/west, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"atf" = ( -/obj/structure/water_source/puddle/healing, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_arena) -"atp" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 8 - }, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/tram_room) -"atz" = ( -/obj/structure/table, -/obj/machinery/cell_charger_multi, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"atD" = ( -/obj/structure/chair/stool/bamboo{ - dir = 4 - }, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"atG" = ( -/obj/structure/extinguisher_cabinet/directional/east, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_lobby) -"atI" = ( -/obj/structure/table, -/obj/item/clothing/mask/balaclava, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"atK" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/awaymission/black_mesa/tram_room) -"atO" = ( -/obj/structure/table, -/obj/item/wirecutters, -/obj/item/screwdriver{ - pixel_x = -2; - pixel_y = 10 - }, -/obj/machinery/syndicatebomb/training, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"atT" = ( -/obj/structure/flora/biolumi/lamp/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_lobby) -"atV" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 6 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"atW" = ( -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_arena) -"aua" = ( -/obj/structure/table/wood, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"aub" = ( -/turf/open/chasm{ - planetary_atmos = 1 - }, -/area/awaymission/black_mesa/tram_room) -"aud" = ( -/obj/effect/spawner/structure/window/plasma, -/turf/open/floor/vault/alien, -/area/awaymission/black_mesa/xen/nihilanth_hallway) -"aui" = ( -/obj/machinery/computer{ - dir = 4 - }, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"auC" = ( -/obj/structure/closet/crate/bin, -/obj/machinery/light/broken/directional/west, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"auQ" = ( -/obj/structure/rack/shelf, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/cryo_storage) -"auV" = ( -/obj/structure/table/wood, -/obj/item/ammo_box/magazine/p90, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/freeman_arena) -"auX" = ( -/obj/structure/closet/secure_closet/brig, -/obj/effect/spawner/random/contraband, -/obj/effect/spawner/random/contraband, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"ava" = ( -/obj/machinery/light/cold/directional/west, -/obj/item/keycard/icebox, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/gas_emitter_chamber) -"avc" = ( -/obj/structure/bed/dogbed/mcgriff, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"avj" = ( -/obj/structure/closet/crate/bin, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/gas_emitter_chamber) -"avl" = ( -/obj/item/stack/sheet/plasteel, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/cryo_room) -"avq" = ( -/obj/structure/chair/sofa/bamboo/right{ - dir = 8 - }, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"avx" = ( -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/tram_room) -"avz" = ( -/obj/item/ammo_box/c10mm, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/cryo_storage) -"avB" = ( -/obj/machinery/portable_atmospherics/canister/nitrium, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/cryo_room) -"avI" = ( -/obj/effect/spawner/random/bioluminescent_plant, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"avJ" = ( -/obj/machinery/vending/snack/orange, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"avK" = ( -/obj/item/storage/box/hecu_rations, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/crowbar_nook) -"avQ" = ( -/obj/structure/mineral_door/paperframe, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"avR" = ( -/obj/structure/xen_pylon/freeman{ - pixel_y = 12 - }, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"avS" = ( -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"avX" = ( -/obj/structure/pod, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/antag_token_nook) -"awi" = ( -/obj/item/coin/antagtoken, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/antag_token_nook) -"awl" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"awm" = ( -/obj/machinery/status_display/door_timer{ - id = "Mesa 5"; - name = "Cell 5"; - pixel_x = 32 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"awn" = ( -/obj/structure/chair/office, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"awp" = ( -/obj/structure/table, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"awu" = ( -/obj/structure/server{ - anchored = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/servers) -"awy" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/closet/secure_closet/medical2{ - req_access = null - }, -/obj/effect/turf_decal/siding/dark_red, -/obj/effect/turf_decal/siding/dark_green/corner{ - dir = 4 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"awC" = ( -/obj/structure/closet/crate/bin, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/cryo_hallway) -"awH" = ( -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"awI" = ( -/obj/item/gun_maintenance_supplies, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"awL" = ( -/turf/open/floor/plating, -/area/awaymission/black_mesa/tram_tunnel) -"awM" = ( -/turf/closed/mineral/black_mesa, -/area/awaymission/black_mesa/tram_room) -"awP" = ( -/obj/structure/bed/maint, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"awU" = ( -/obj/structure/fluff/tram_rail{ - dir = 1 - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance) -"awY" = ( -/obj/structure/xen_pylon, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"axb" = ( -/obj/machinery/light/directional/east{ - dir = 1 - }, -/obj/item/ammo_casing/spent, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"axf" = ( -/obj/structure/fence/corner, -/obj/structure/fence/corner{ - dir = 4 - }, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"axg" = ( -/obj/structure/table, -/obj/item/folder/red{ - pixel_x = 3 - }, -/obj/item/folder/blue, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"axj" = ( -/obj/item/storage/box/hecu_rations, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"axk" = ( -/obj/structure/rack/shelf, -/obj/item/clothing/suit/armor/vest/blueshirt{ - pixel_x = -5; - pixel_y = 6 - }, -/obj/item/clothing/suit/armor/vest/blueshirt{ - pixel_x = 6; - pixel_y = -6 - }, -/obj/item/clothing/suit/armor/vest/blueshirt{ - pixel_x = -5; - pixel_y = -6 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"axm" = ( -/obj/structure/stone_tile/slab, -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/gordon_freeman, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_arena) -"axn" = ( -/obj/item/ammo_box/magazine/mp5, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"axy" = ( -/obj/structure/table, -/obj/item/folder/red, -/turf/open/misc/ice, -/area/awaymission/black_mesa/cryo_room) -"axF" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/hecu_zone_external_sec) -"axL" = ( -/obj/structure/flora/biolumi/mine/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/servers) -"ayg" = ( -/obj/machinery/porta_turret/black_mesa, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/servers) -"aym" = ( -/obj/structure/filingcabinet/chestdrawer, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/servers) -"ayr" = ( -/obj/structure/alien/weeds/xen, -/obj/effect/spawner/random/bioluminescent_plant/weak, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa) -"ayu" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_hallway) -"ayA" = ( -/obj/machinery/door/airlock/silver, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/cryo_hallway) -"ayB" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/cryo_room) -"ayC" = ( -/obj/structure/cable, -/obj/item/ammo_casing/spent, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"ayF" = ( -/obj/structure/rack/shelf, -/obj/machinery/light/small/red/directional/north{ - dir = 8 - }, -/obj/item/armament_points_card/hecu, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/awaymission/black_mesa/security_outpost) -"ayH" = ( -/obj/machinery/light/cold, -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/entrance) -"ayI" = ( -/turf/closed/indestructible/rock/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"ayQ" = ( -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"ayU" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_hallway) -"ayZ" = ( -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance_tunnel) -"aza" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/cryo_room) -"azc" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/cryo_storage) -"azf" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_storage) -"azk" = ( -/obj/machinery/light/broken/directional/west, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"azm" = ( -/obj/machinery/door/puzzle/light{ - puzzle_id = "office_entrance" - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa/employee_dorm_room) -"azn" = ( -/obj/structure/chair/sofa/bamboo/left{ - dir = 8 - }, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"azo" = ( -/obj/structure/billboard/space_cola, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/tram_room) -"azp" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -11; - pixel_y = 7 - }, -/obj/machinery/recharger{ - pixel_x = 6; - pixel_y = -5 - }, -/obj/item/pen{ - pixel_x = -11; - pixel_y = 7 - }, -/obj/item/hand_labeler{ - pixel_x = -10; - pixel_y = -6 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"azr" = ( -/obj/machinery/door/poddoor, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/tram_room) -"azu" = ( -/obj/machinery/door/airlock/science/glass, -/obj/effect/mapping_helpers/airlock/locked, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/servers) -"azQ" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/black_mesa/entrance) -"azT" = ( -/obj/item/storage/medkit/tactical, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/antag_token_nook) -"azV" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"azY" = ( -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"azZ" = ( -/obj/machinery/modular_computer/preset/civilian{ - dir = 8 - }, -/obj/machinery/light/broken/directional/east, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/servers) -"aAb" = ( -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/tram_room) -"aAe" = ( -/obj/structure/closet/secure_closet/security/black_mesa, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"aAg" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing/corner{ - dir = 4 - }, -/turf/open/chasm{ - planetary_atmos = 1 - }, -/area/awaymission/black_mesa/entrance) -"aAk" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_hallway) -"aAm" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/obj/machinery/light/broken, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"aAp" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/item/radio/intercom/directional/west{ - pixel_y = 5 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aAq" = ( -/obj/machinery/status_display/door_timer{ - id = "Mesa 6"; - name = "Cell 6"; - pixel_x = 32 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aAs" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/awaymission/black_mesa/entrance_lobby) -"aAt" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/entrance) -"aAu" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 8 - }, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/tram_room) -"aAx" = ( -/obj/structure/fluff/tram_rail, -/obj/structure/fluff/tram_rail{ - dir = 1 - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa/tram_room) -"aAy" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_lobby) -"aAC" = ( -/obj/machinery/door/airlock/titanium{ - name = "Arrivals Shuttle Airlock" - }, -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/entrance) -"aAG" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/chasm{ - planetary_atmos = 1 - }, -/area/awaymission/black_mesa/tram_room) -"aAI" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/glass/bottle/beer/almost_empty{ - pixel_x = 8; - pixel_y = 3 - }, -/obj/item/storage/fancy/cigarettes/cigpack_uplift, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aAM" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/structure/chair/sofa/bench/right, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"aAR" = ( -/obj/structure/mineral_door/xen, -/turf/open/floor/vault/alien, -/area/awaymission/black_mesa/xen/nihilanth_hallway) -"aAU" = ( -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/cryo_hallway) -"aBa" = ( -/obj/effect/random_mob_placer/hev_zombie, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/crowbar_nook) -"aBc" = ( -/obj/machinery/door/airlock/silver, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/cryo_hallway) -"aBd" = ( -/obj/machinery/light/cold, -/obj/effect/gibspawner/human/bodypartless, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/tram_room) -"aBe" = ( -/obj/structure/rack/shelf, -/obj/item/ammo_box/a357, -/obj/item/ammo_box/a357, -/obj/item/ammo_box/a357, -/obj/item/ammo_box/a357, -/obj/item/ammo_box/a357/match, -/obj/item/ammo_box/a357/match, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/awaymission/black_mesa/security_outpost) -"aBf" = ( -/obj/structure/railing/corner{ - dir = 4 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/tram_room) -"aBh" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/glass/bottle/beer/light{ - pixel_x = -5; - pixel_y = 9 - }, -/obj/item/lighter{ - pixel_x = 6 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aBj" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"aBo" = ( -/obj/structure/rack/gunrack, -/obj/item/gun/ballistic/automatic/mp5, -/obj/item/ammo_box/magazine/mp5, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aBq" = ( -/turf/closed/wall/mineral/bamboo, -/area/awaymission/black_mesa/xen/freeman_arena) -"aBu" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/awaymission/black_mesa/security_outpost) -"aBC" = ( -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"aBD" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/machinery/door/poddoor{ - id = "biolabs" - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/to_cryo_room) -"aBG" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/servers) -"aBK" = ( -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/machinery/door/poddoor{ - id = "biolabs" - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/to_cryo_room) -"aBQ" = ( -/obj/structure/mop_bucket/janitorialcart, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/cryo_storage) -"aBR" = ( -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"aBS" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark/side, -/area/awaymission/black_mesa/entrance_lobby) -"aBY" = ( -/obj/machinery/power/rtg/abductor, -/obj/structure/cable, -/obj/structure/railing{ - dir = 9 - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa) -"aCb" = ( -/obj/structure/cable, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/security_outpost) -"aCc" = ( -/obj/structure/table, -/obj/machinery/recharger{ - pixel_y = 4 - }, -/obj/item/folder/red, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_lobby) -"aCe" = ( -/obj/structure/sign/warning/chem_diamond/directional/north, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_hallway) -"aCh" = ( -/obj/structure/chair/plastic{ - dir = 8 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aCi" = ( -/obj/structure/table/wood, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"aCj" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 9 - }, -/turf/open/chasm{ - planetary_atmos = 1 - }, -/area/awaymission/black_mesa/entrance) -"aCn" = ( -/obj/effect/decal/cleanable/blood/splatter{ - icon_state = "floor3" - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aCp" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/chasm, -/area/awaymission/black_mesa/tram_room) -"aCx" = ( -/obj/machinery/power/emitter/welded{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aCy" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"aCA" = ( -/obj/machinery/door/poddoor{ - id = "biolabs" - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"aCI" = ( -/obj/structure/sign/warning/chem_diamond/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_room) -"aCK" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/entrance) -"aCT" = ( -/obj/structure/table, -/obj/machinery/computer/libraryconsole, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_lobby) -"aDa" = ( -/obj/item/flashlight/lantern, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"aDf" = ( -/obj/structure/table, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aDk" = ( -/obj/structure/rack/shelf, -/obj/machinery/light/cold/directional/east, -/obj/item/storage/medkit/regular, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aDx" = ( -/obj/structure/spacevine/xen/thick, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen) -"aDz" = ( -/obj/machinery/door/airlock/silver, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/cryo_storage) -"aDC" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/tram_room) -"aDL" = ( -/obj/structure/marker_beacon/burgundy, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"aDM" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"aDO" = ( -/obj/structure/chair{ - dir = 4 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aDS" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - dir = 1; - icon_state = "right"; - name = "Outer Window" - }, -/obj/machinery/door/window/brigdoor{ - name = "Brig Control Desk"; - req_access = list("armory") - }, -/obj/item/folder/red, -/obj/item/folder/red, -/obj/item/poster/random_official, -/obj/item/book/manual/wiki/security_space_law{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"aEa" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aEe" = ( -/obj/structure/fluff/tram_rail, -/turf/open/floor/plating, -/area/awaymission/black_mesa/tram_room) -"aEg" = ( -/obj/machinery/light/directional/east{ - dir = 2 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aEi" = ( -/obj/effect/mob_spawn/corpse/human/skeleton, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aEp" = ( -/obj/structure/table, -/obj/structure/microscope, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"aEB" = ( -/obj/structure/fluff/tram_rail{ - dir = 1 - }, -/obj/structure/fluff/tram_rail, -/turf/open/floor/plating, -/area/awaymission/black_mesa/tram_room) -"aEH" = ( -/obj/machinery/door/airlock/silver, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/cryo_room) -"aET" = ( -/obj/structure/fluff/tram_rail{ - dir = 1 - }, -/obj/structure/fluff/tram_rail, -/obj/effect/random_mob_placer/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/tram_room) -"aEV" = ( -/obj/structure/table/reinforced{ - name = "Jim Norton's Quebecois Coffee table" - }, -/obj/item/stack/spacecash/c1{ - pixel_y = 5 - }, -/obj/item/reagent_containers/cup/rag, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"aEW" = ( -/obj/structure/closet/l3closet/janitor, -/obj/item/storage/belt/janitor/full, -/obj/item/pizzabox/margherita, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/cryo_storage) -"aEX" = ( -/obj/structure/cable, -/obj/machinery/power/rtg/abductor, -/obj/structure/railing{ - dir = 10 - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa) -"aFa" = ( -/obj/structure/flora/biolumi/lamp/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_hall) -"aFd" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aFe" = ( -/obj/effect/spawner/random/bioluminescent_plant/weak, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/antag_token_nook) -"aFj" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 6 - }, -/turf/open/chasm{ - planetary_atmos = 1 - }, -/area/awaymission/black_mesa/entrance) -"aFp" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/cryo_room) -"aFt" = ( -/obj/structure/bed/maint, -/obj/effect/random_mob_placer/vortigaunt, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"aFu" = ( -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen) -"aFv" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/cryo_room) -"aFx" = ( -/obj/structure/rack/shelf, -/obj/item/clothing/suit/armor/riot, -/obj/item/clothing/head/helmet/toggleable/riot, -/obj/item/shield/riot, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aFz" = ( -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"aFD" = ( -/obj/structure/mineral_door/paperframe, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/freeman_arena) -"aFM" = ( -/obj/structure/closet/secure_closet/brig, -/obj/effect/spawner/random/contraband, -/obj/effect/spawner/random/contraband/permabrig_gear, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aFP" = ( -/obj/machinery/door/poddoor{ - id = "sectorcmain2" - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance_lobby) -"aFU" = ( -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"aFX" = ( -/obj/structure/chair/office, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/servers) -"aFY" = ( -/obj/machinery/computer, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"aGf" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 9 - }, -/area/awaymission/black_mesa/xen/freeman_hallway) -"aGg" = ( -/obj/machinery/iv_drip, -/turf/closed/mineral/black_mesa, -/area/awaymission/black_mesa) -"aGi" = ( -/obj/structure/table, -/obj/effect/spawner/random/food_or_drink/donkpockets, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aGj" = ( -/turf/closed/indestructible/reinforced, -/area/awaymission/black_mesa/security_outpost) -"aGk" = ( -/obj/structure/closet/crate/large, -/turf/open/floor/plating, -/area/awaymission/black_mesa/tram_tunnel) -"aGu" = ( -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/tram_room) -"aGy" = ( -/obj/item/paper/crumpled/awaymissions/moonoutpost19/hastey_note{ - default_raw_text = "Right, I'm a commie? So what? I'm proud of it.." - }, -/obj/item/reagent_containers/cup/glass/bottle/vodka{ - pixel_x = 11 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/awaymission/black_mesa/security_outpost) -"aGB" = ( -/obj/structure/table, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"aGE" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/machinery/light/directional/east{ - dir = 8 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aGI" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_entrance) -"aGJ" = ( -/obj/item/ammo_casing/shotgun/buckshot, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aGR" = ( -/obj/structure/table/reinforced{ - name = "Jim Norton's Quebecois Coffee table" - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/item/food/poppypretzel{ - pixel_x = -8; - pixel_y = -3 - }, -/obj/item/food/muffin/berry{ - pixel_x = -4; - pixel_y = 9 - }, -/obj/item/food/hotcrossbun{ - pixel_x = 3; - pixel_y = 5 - }, -/obj/item/food/cakeslice/pound_cake_slice{ - pixel_x = 8; - pixel_y = -2 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"aGW" = ( -/obj/structure/xen_pylon, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"aGY" = ( -/obj/structure/flora/biolumi/mine/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_lobby) -"aGZ" = ( -/obj/structure/chair/office, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"aHa" = ( -/turf/closed/indestructible/rock, -/area/awaymission/black_mesa/cryo_room) -"aHd" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - dir = 2; - icon_state = "right"; - name = "Reception Window" - }, -/obj/machinery/door/window/brigdoor{ - dir = 1; - name = "Brig Control Desk"; - req_access = list("armory") - }, -/obj/item/paper, -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/item/storage/fancy/donut_box, -/obj/item/paper, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aHk" = ( -/obj/structure/lattice/catwalk, -/turf/open/chasm, -/area/awaymission/black_mesa/tram_room) -"aHm" = ( -/obj/structure/marker_beacon/burgundy, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"aHq" = ( -/obj/item/storage/box/hecu_rations, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/antag_token_nook) -"aHt" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating/elevatorshaft, -/area/awaymission/black_mesa/cryo_room) -"aHv" = ( -/obj/effect/turf_decal/stripes, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aHA" = ( -/obj/item/radio/intercom/directional/west{ - pixel_y = 5 - }, -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"aHH" = ( -/obj/structure/table/wood, -/obj/item/storage/box/hecu_rations, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"aHI" = ( -/obj/structure/cable, -/turf/closed/indestructible/rock, -/area/awaymission/black_mesa) -"aHK" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/turf/open/floor/plating, -/area/awaymission/black_mesa/security_outpost) -"aHR" = ( -/obj/effect/random_mob_placer/xen, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_hall) -"aHS" = ( -/obj/structure/alien/weeds/xen, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa) -"aHT" = ( -/obj/machinery/door/airlock/maintenance, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance_lobby) -"aHU" = ( -/obj/structure/closet/secure_closet/security/black_mesa, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/gun/ballistic/automatic/pistol/sol, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_lobby) -"aHX" = ( -/obj/machinery/door/window/brigdoor/security/cell{ - dir = 4; - id = "Mesa 5" - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aIk" = ( -/obj/machinery/light/dim{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"aIp" = ( -/obj/effect/decal/cleanable/blood/splatter{ - icon_state = "floor5" - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aIv" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"aIz" = ( -/obj/item/raw_anomaly_core/vortex, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aIG" = ( -/turf/open/floor/vault/alien, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"aIH" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/gibs/up, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"aIO" = ( -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"aIP" = ( -/obj/structure/xen_crystal{ - pixel_y = 15 - }, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"aIW" = ( -/obj/structure/server{ - anchored = 1 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/servers) -"aIX" = ( -/obj/structure/flora/biolumi/mine/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"aJb" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/mob/living/simple_animal/hostile/blackmesa/sec/ranged, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_lobby) -"aJd" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating/elevatorshaft, -/area/awaymission/black_mesa/cryo_room) -"aJl" = ( -/obj/structure/spacevine/xen/thick, -/obj/structure/spacevine/xen/thick, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"aJq" = ( -/obj/machinery/light/directional/east{ - dir = 1 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aJt" = ( -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/servers) -"aJx" = ( -/turf/open/misc/beach/coastline_t/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"aJE" = ( -/obj/machinery/vending/cola/red, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aJF" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/awaymission/black_mesa/entrance_lobby) -"aJL" = ( -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/cryo_storage) -"aJP" = ( -/obj/effect/bump_teleporter{ - id = "factory_lower_start"; - id_target = "factory_lower_end" - }, -/turf/open/floor/vault/alien, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"aJT" = ( -/obj/item/book/granter/crafting_recipe/dusting/pipegun_prime, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa) -"aJW" = ( -/obj/effect/random_mob_placer/vortigaunt, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"aKa" = ( -/obj/machinery/door/airlock/science/glass, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/servers) -"aKb" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 8 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"aKd" = ( -/obj/effect/decal/cleanable/blood/footprints, -/obj/item/gun/ballistic/shotgun/riot/sol, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"aKg" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_lobby) -"aKl" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aKm" = ( -/obj/structure/spacevine/xen/thick, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"aKq" = ( -/obj/machinery/door/poddoor{ - id = "sectorcmain" - }, -/turf/closed/indestructible/rock, -/area/awaymission/black_mesa) -"aKu" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -11; - pixel_y = 7 - }, -/obj/machinery/recharger{ - pixel_x = 6; - pixel_y = -5 - }, -/obj/item/pen{ - pixel_x = -11; - pixel_y = 7 - }, -/obj/item/hand_labeler{ - pixel_x = -10; - pixel_y = -6 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"aKw" = ( -/obj/machinery/door/airlock/science/glass, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aKB" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark/corner{ - dir = 4 - }, -/area/awaymission/black_mesa/entrance_lobby) -"aKC" = ( -/obj/structure/pod, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"aKF" = ( -/obj/effect/spawner/random/vending/colavend, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/tram_room) -"aKG" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"aKJ" = ( -/obj/machinery/door/window/brigdoor/security/cell{ - dir = 8; - id = "Mesa 1" - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aKM" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"aKP" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/flour, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"aKR" = ( -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aKS" = ( -/obj/structure/table, -/obj/item/radio/intercom, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_lobby) -"aLa" = ( -/obj/structure/closet/secure_closet/brig, -/obj/item/poster/random_contraband, -/obj/effect/spawner/random/contraband/permabrig_gear, -/obj/effect/spawner/random/exotic/antag_gear_weak, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aLb" = ( -/obj/machinery/door/window/brigdoor/security/cell{ - dir = 8; - id = "Mesa 2" - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aLk" = ( -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_lobby) -"aLm" = ( -/obj/structure/sign/warning/cold_temp, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/cryo_storage) -"aLn" = ( -/obj/structure/rack, -/obj/item/restraints/handcuffs, -/obj/item/restraints/handcuffs, -/obj/item/restraints/handcuffs, -/obj/item/restraints/handcuffs, -/obj/item/restraints/handcuffs, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aLp" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aLt" = ( -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/cryo_storage) -"aLz" = ( -/obj/structure/closet/secure_closet/security/black_mesa, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aLJ" = ( -/obj/structure/closet/crate/bin, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"aLO" = ( -/obj/structure/lattice/catwalk, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance_lobby) -"aLS" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/servers) -"aLU" = ( -/obj/machinery/atmospherics/components/binary/crystallizer, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/cryo_room) -"aLX" = ( -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 8 - }, -/obj/machinery/light/broken, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"aMa" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa/tram_tunnel) -"aMb" = ( -/obj/structure/mineral_door/xen, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"aMc" = ( -/obj/structure/fence/door{ - dir = 4 - }, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"aMh" = ( -/turf/open/misc/ice, -/area/awaymission/black_mesa/cryo_room) -"aMk" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aMl" = ( -/obj/machinery/vending/wardrobe/jani_wardrobe, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/cryo_storage) -"aMq" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"aMy" = ( -/turf/open/floor/vault/alien, -/area/awaymission/black_mesa/xen/nihilanth_arena) -"aME" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark/corner, -/area/awaymission/black_mesa/entrance_lobby) -"aMF" = ( -/obj/item/book/granter/crafting_recipe/trash_cannon, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa) -"aMJ" = ( -/obj/structure/chair/stool{ - name = "Jim Norton's Quebecois Coffee stool" - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/awaymission/black_mesa/security_outpost) -"aML" = ( -/obj/item/food/deadmouse, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa) -"aMS" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aMT" = ( -/obj/effect/mob_spawn/corpse/human/hecu_zombie, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"aMU" = ( -/obj/structure/closet/crate/bin, -/obj/item/food/donut/laugh, -/obj/item/food/donut/laugh, -/obj/item/food/donut/plain, -/obj/item/food/donut/plain, -/obj/item/food/donut/plain, -/obj/item/food/donut/plain, -/obj/item/food/donut/plain, -/obj/item/food/donut/plain, -/obj/item/food/donut/plain, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aMW" = ( -/obj/structure/rack/shelf, -/obj/item/clothing/head/helmet/blueshirt{ - pixel_x = -5; - pixel_y = -6 - }, -/obj/item/clothing/head/helmet/blueshirt{ - pixel_x = 6; - pixel_y = -6 - }, -/obj/item/clothing/head/helmet/blueshirt{ - pixel_x = -5; - pixel_y = 3 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aNa" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_lobby) -"aNc" = ( -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/entrance) -"aNi" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/entrance_hall) -"aNo" = ( -/turf/closed/indestructible/rock, -/area/awaymission/black_mesa) -"aNr" = ( -/obj/effect/random_mob_placer/security_guard, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aNv" = ( -/obj/structure/table, -/obj/machinery/computer/libraryconsole, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"aNw" = ( -/obj/structure/marker_beacon/green, -/turf/open/floor/vault/alien, -/area/awaymission/black_mesa/xen/nihilanth_hallway) -"aNx" = ( -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aNz" = ( -/obj/structure/table, -/obj/item/folder/red, -/obj/machinery/light/cold, -/turf/open/misc/ice, -/area/awaymission/black_mesa/cryo_room) -"aNF" = ( -/obj/structure/flora/biolumi, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/servers) -"aNG" = ( -/obj/structure/table/wood, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/freeman_arena) -"aNP" = ( -/obj/structure/chair/plastic{ - dir = 8 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aNR" = ( -/obj/structure/alien/weeds/xen, -/obj/item/stack/sticky_tape, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa) -"aOa" = ( -/obj/item/reagent_containers/condiment/milk{ - pixel_x = 6; - pixel_y = 8 - }, -/obj/item/reagent_containers/condiment/sugar{ - pixel_y = 4 - }, -/obj/item/reagent_containers/condiment/soymilk{ - pixel_x = -6; - pixel_y = 8 - }, -/obj/item/reagent_containers/cup/glass/ice{ - pixel_x = -4; - pixel_y = -2 - }, -/obj/item/reagent_containers/cup/glass/bottle/juice/cream{ - pixel_x = 3; - pixel_y = -2 - }, -/obj/structure/table{ - name = "Jim Norton's Quebecois Coffee table" - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"aOc" = ( -/obj/structure/cable, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aOe" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"aOj" = ( -/obj/machinery/status_display/door_timer{ - id = "Mesa 4"; - name = "Cell 4"; - pixel_x = 32 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aOk" = ( -/obj/structure/rack/shelf, -/obj/item/storage/medkit/regular, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aOr" = ( -/obj/structure/alien/weeds/xen, -/obj/item/gun/ballistic/rifle/boltaction/pipegun, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa) -"aOy" = ( -/obj/structure/table, -/obj/item/grenade/gluon, -/obj/item/grenade/gluon, -/obj/item/grenade/gluon, -/obj/item/grenade/gluon, -/turf/open/misc/asteroid/snow/standard_air, -/area/awaymission/black_mesa/cryo_room) -"aOz" = ( -/obj/structure/table, -/obj/item/folder/blue, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/servers) -"aOG" = ( -/obj/effect/random_mob_placer/xen, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"aOI" = ( -/obj/effect/turf_decal/trimline/brown/filled/corner, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"aOM" = ( -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/freeman_arena) -"aOY" = ( -/obj/structure/table/reinforced{ - name = "Jim Norton's Quebecois Coffee table" - }, -/obj/item/paper{ - default_raw_text = "Jim Norton's Quebecois Coffee. You see, in 2265 the Quebecois had finally had enough of Canada's shit, and went to the one place that wasn't corrupted by Canuckistan.Je vais au seul endroit qui n'a pas ??? corrompu par les Canadiens ... ESPACE."; - name = "Coffee Shop"; - pixel_x = -4; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/glass/mug/coco{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/reagent_containers/cup/glass/mug/tea{ - pixel_x = 4; - pixel_y = 2 - }, -/obj/item/reagent_containers/cup/glass/coffee{ - pixel_x = -3 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"aOZ" = ( -/obj/machinery/door/airlock/maintenance, -/turf/open/floor/plating, -/area/awaymission/black_mesa/tram_room) -"aPd" = ( -/obj/structure/bookcase/random/adult, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"aPj" = ( -/obj/effect/bump_teleporter{ - id = "factory_upper_start"; - id_target = "factory_upper_end" - }, -/turf/open/floor/vault/alien, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"aPn" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/awaymission/black_mesa/entrance) -"aPp" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_room) -"aPw" = ( -/obj/effect/spawner/random/vending/snackvend, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/tram_room) -"aPy" = ( -/turf/open/water/xen_acid, -/area/awaymission/black_mesa/xen/freeman_hallway) -"aPA" = ( -/obj/effect/spawner/structure/window/reinforced/shuttle, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance) -"aPB" = ( -/obj/item/reagent_containers/cup/soda_cans/grey_bull, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa) -"aPG" = ( -/obj/effect/bump_teleporter{ - id = "factory_upper_end"; - id_target = "factory_upper_start" - }, -/turf/open/floor/vault/alien, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"aPJ" = ( -/obj/effect/random_mob_placer/xen/zombie, -/obj/effect/decal/cleanable/blood/gibs/up, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aPL" = ( -/obj/effect/random_mob_placer/vortigaunt, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/freeman_arena) -"aPN" = ( -/obj/structure/chair/sofa/bamboo/left, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"aPU" = ( -/obj/machinery/door/poddoor{ - id = "biolabs" - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/cryo_hallway) -"aPW" = ( -/obj/structure/chair/plastic{ - dir = 4 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aPY" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/entrance) -"aQa" = ( -/obj/structure/filingcabinet/security, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_lobby) -"aQc" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/entrance) -"aQe" = ( -/obj/effect/decal/cleanable/blood/footprints, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aQj" = ( -/obj/machinery/modular_computer/preset/civilian{ - dir = 8 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/servers) -"aQl" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/cryo_room) -"aQz" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/employee_dorm_room) -"aQB" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/corner, -/obj/machinery/light/broken, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"aQC" = ( -/obj/item/stack/sheet/iron/ten, -/obj/item/stack/sheet/iron/ten, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa) -"aQF" = ( -/obj/machinery/portable_atmospherics/canister/nob, -/obj/structure/sign/warning/chem_diamond/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aQL" = ( -/obj/machinery/modular_computer/preset/civilian{ - dir = 1 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/servers) -"aQZ" = ( -/turf/closed/indestructible/rock, -/area/space) -"aRb" = ( -/obj/structure/lattice/catwalk, -/turf/open/chasm{ - planetary_atmos = 1 - }, -/area/awaymission/black_mesa/entrance) -"aRc" = ( -/obj/structure/closet/crate/large, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/cryo_storage) -"aRd" = ( -/obj/structure/table, -/obj/item/storage/fancy/cigarettes/cigpack_robust, -/obj/item/lighter/greyscale, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aRg" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/tram_room) -"aRi" = ( -/obj/structure/flora/biolumi/mine/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_hall) -"aRk" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor{ - dir = 4 - }, -/obj/item/paper, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_lobby) -"aRp" = ( -/obj/item/book/granter/crafting_recipe/cooking_sweets_101, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa) -"aRB" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aRC" = ( -/obj/item/clothing/suit/apron/chef{ - name = "Jim Norton's Quebecois Coffee apron" - }, -/obj/structure/sink/directional/west, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"aRI" = ( -/obj/structure/table/abductor, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"aRO" = ( -/obj/machinery/door/poddoor/preopen, -/obj/structure/fluff/tram_rail, -/turf/open/floor/plating, -/area/awaymission/black_mesa/tram_room) -"aRR" = ( -/turf/open/misc/beach/coastline_t/sandwater_inner/xen{ - dir = 8 - }, -/area/awaymission/black_mesa/xen/freeman_hallway) -"aRS" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance_lobby) -"aRW" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/water/beach/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"aSa" = ( -/turf/open/chasm{ - planetary_atmos = 1 - }, -/area/awaymission/black_mesa/entrance) -"aSe" = ( -/obj/structure/table, -/obj/item/storage/fancy/cigarettes/cigpack_uplift, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aSg" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/black_mesa/tram_room) -"aSi" = ( -/obj/structure/table, -/obj/machinery/microwave, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aSj" = ( -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"aSl" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/tram_room) -"aSt" = ( -/obj/machinery/computer{ - dir = 8 - }, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"aSv" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/security, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aSC" = ( -/obj/item/storage/box/ammo_box/shotgun_12g, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aSD" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"aSH" = ( -/obj/machinery/computer/prisoner/management{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"aSI" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/tram_room) -"aSL" = ( -/obj/structure/rack/shelf, -/obj/item/melee/baton/security, -/obj/item/gun/ballistic/shotgun/automatic/as2, -/obj/item/storage/box/ammo_box/shotgun_12g, -/obj/item/storage/box/ammo_box/shotgun_12g, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aSO" = ( -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/structure/extinguisher_cabinet/directional/south, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"aSP" = ( -/turf/open/floor/plating, -/area/awaymission/black_mesa/tram_room) -"aSR" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 8 - }, -/obj/effect/landmark/awaystart, -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/entrance) -"aSV" = ( -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aSX" = ( -/obj/machinery/door/puzzle/keycard/xen/freeman_boss_exit, -/obj/effect/freeman_blocker, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_arena) -"aTa" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 10 - }, -/turf/open/chasm{ - planetary_atmos = 1 - }, -/area/awaymission/black_mesa/entrance) -"aTj" = ( -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aTn" = ( -/obj/structure/alien/weeds/xen, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/entrance_lobby) -"aTo" = ( -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/glass/fifty, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aTs" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/servers) -"aTt" = ( -/obj/machinery/light/cold, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"aTE" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark/corner{ - dir = 8 - }, -/area/awaymission/black_mesa/entrance_lobby) -"aTL" = ( -/obj/machinery/door/airlock/security, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/footprints, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aTN" = ( -/obj/structure/railing/corner{ - dir = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/tram_room) -"aTO" = ( -/obj/structure/table, -/obj/item/folder/red, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/cryo_room) -"aTR" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/chasm{ - planetary_atmos = 1 - }, -/area/awaymission/black_mesa/entrance) -"aTT" = ( -/obj/structure/marker_beacon/green, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"aUa" = ( -/obj/effect/mob_spawn/corpse/human/charredskeleton, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"aUc" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/servers) -"aUh" = ( -/obj/structure/chair/plastic{ - dir = 4 - }, -/obj/machinery/light/directional/east{ - dir = 1 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aUr" = ( -/obj/machinery/door/airlock/titanium{ - name = "Arrivals Shuttle Airlock" - }, -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/tram_room) -"aUu" = ( -/mob/living/simple_animal/hostile/blackmesa/xen/nihilanth, -/obj/structure/marker_beacon/green, -/turf/open/floor/vault/alien, -/area/awaymission/black_mesa/xen/nihilanth_arena) -"aUy" = ( -/obj/item/storage/box/hecu_rations, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"aUI" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 4 - }, -/area/awaymission/black_mesa/xen/freeman_hallway) -"aUL" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_button) -"aUN" = ( -/obj/structure/closet/secure_closet/brig, -/obj/item/poster/random_contraband, -/obj/effect/spawner/random/contraband/permabrig_gear, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aUO" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_lobby) -"aUR" = ( -/turf/closed/indestructible/rock/xen, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"aUS" = ( -/obj/machinery/modular_computer/preset/civilian{ - dir = 4 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/servers) -"aUV" = ( -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/structure/flora/biolumi/mine/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/to_cryo_room) -"aVi" = ( -/obj/machinery/door/poddoor{ - id = "sectorcmain" - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance_lobby) -"aVj" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/footprints, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"aVl" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/obj/effect/turf_decal/stripes, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/misc/ice, -/area/awaymission/black_mesa/cryo_room) -"aVn" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/awaymission/black_mesa/entrance_lobby) -"aVr" = ( -/obj/structure/lattice/catwalk, -/turf/open/chasm{ - planetary_atmos = 1 - }, -/area/awaymission/black_mesa/tram_room) -"aVs" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"aVu" = ( -/obj/effect/spawner/random/bioluminescent_plant/weak, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"aVx" = ( -/obj/structure/flora/tree/dead, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"aVD" = ( -/obj/structure/bookcase/random/religion, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa) -"aVG" = ( -/turf/open/chasm, -/area/awaymission/black_mesa/entrance) -"aVO" = ( -/obj/structure/table/wood, -/obj/item/food/meat/slab/human, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"aVU" = ( -/obj/structure/spacevine/xen/thick, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"aVV" = ( -/obj/machinery/light/broken/directional/east, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"aVW" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/security_outpost) -"aWa" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/tram_room) -"aWb" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_lobby) -"aWg" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_room) -"aWi" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_lobby) -"aWl" = ( -/obj/item/storage/medkit/advanced, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"aWm" = ( -/obj/machinery/button/door{ - id = "sectorcmain2"; - pixel_x = -23 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"aWt" = ( -/obj/effect/bump_teleporter{ - id = "factory_lower_end"; - id_target = "factory_lower_start" - }, -/turf/open/floor/vault/alien, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"aWu" = ( -/obj/machinery/modular_computer/preset/cargochat/science{ - dir = 1 - }, -/obj/machinery/light/cold/directional/west, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"aWx" = ( -/obj/machinery/door/poddoor, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/entrance) -"aWz" = ( -/obj/structure/spacevine/xen/thick, -/obj/effect/random_mob_placer/xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"aWF" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_room) -"aWI" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/cryo_storage) -"aWJ" = ( -/obj/effect/random_mob_placer/hev_zombie, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/antag_token_nook) -"aWR" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"aXb" = ( -/obj/machinery/light/broken/directional/east, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_lobby) -"aXl" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"aXm" = ( -/obj/structure/spacevine/xen/thick, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/crowbar_nook) -"aXo" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/chasm{ - planetary_atmos = 1 - }, -/area/awaymission/black_mesa/tram_room) -"aXt" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance_tunnel) -"aXv" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"aXz" = ( -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/entrance) -"aXC" = ( -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/crowbar_nook) -"aXD" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/plating/elevatorshaft, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aXE" = ( -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/antag_token_nook) -"aXH" = ( -/obj/effect/random_mob_placer/security_guard, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aXM" = ( -/obj/structure/table, -/obj/structure/alien/weeds/xen, -/obj/effect/spawner/random/exotic/technology, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"aXN" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 8 - }, -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/tram_room) -"aXT" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/entrance_tunnel) -"aYb" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/chasm{ - planetary_atmos = 1 - }, -/area/awaymission/black_mesa/entrance) -"aYc" = ( -/obj/effect/spawner/random/bioluminescent_plant/weak, -/obj/structure/marker_beacon/burgundy, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"aYd" = ( -/obj/item/seeds/coffee{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/seeds/coffee/robusta{ - pixel_x = -3; - pixel_y = -2 - }, -/obj/item/seeds/coffee{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/storage/box/drinkingglasses{ - pixel_x = 4; - pixel_y = 5 - }, -/obj/item/storage/pill_bottle/happinesspsych{ - pixel_x = -4; - pixel_y = -1 - }, -/obj/item/seeds/coffee{ - pixel_x = 4; - pixel_y = -2 - }, -/obj/machinery/light/directional/north, -/obj/structure/table{ - name = "Jim Norton's Quebecois Coffee table" - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"aYf" = ( -/obj/effect/mob_spawn/corpse/human/engineer, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/tram_room) -"aYk" = ( -/obj/structure/closet/crate/bin, -/obj/machinery/light/cold, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_hallway) -"aYr" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa) -"aYs" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 1 - }, -/area/awaymission/black_mesa/xen/freeman_hallway) -"aYu" = ( -/obj/structure/cable, -/obj/structure/chair/plastic{ - dir = 8 - }, -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aYv" = ( -/obj/structure/filingcabinet/chestdrawer, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_lobby) -"aYw" = ( -/obj/item/storage/medkit/tactical, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"aYB" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/chasm{ - planetary_atmos = 1 - }, -/area/awaymission/black_mesa/entrance) -"aYH" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/entrance_lobby) -"aYJ" = ( -/obj/structure/rack/shelf, -/obj/item/storage/box/nri_survival_pack{ - name = "russian survival pack" - }, -/obj/item/knife/combat, -/obj/item/clothing/glasses/night, -/obj/item/clothing/suit/armor/vest/russian{ - pixel_x = -6; - pixel_y = -2 - }, -/obj/item/clothing/head/helmet/rus_helmet{ - pixel_x = -7; - pixel_y = 8 - }, -/obj/item/clothing/under/costume/nri{ - pixel_x = 7 - }, -/obj/item/clothing/shoes/combat, -/obj/item/storage/belt/military/nri, -/obj/item/clothing/gloves/tackler/combat/insulated, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/awaymission/black_mesa/security_outpost) -"aYK" = ( -/turf/open/misc/asteroid/snow/standard_air, -/area/awaymission/black_mesa/cryo_room) -"aYL" = ( -/obj/machinery/light/cold, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/tram_room) -"aYP" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/mineral/titanium/white, -/area/awaymission/black_mesa/tram_room) -"aYR" = ( -/obj/machinery/bookbinder, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/to_cryo_room) -"aYT" = ( -/turf/open/water/beach/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"aYV" = ( -/obj/effect/bump_teleporter{ - id = "admindown"; - id_target = "adminup" - }, -/turf/open/floor/plating/elevatorshaft, -/area/awaymission/black_mesa/gas_emitter_chamber) -"aYX" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"aYY" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating/elevatorshaft, -/area/awaymission/black_mesa/cryo_room) -"aZd" = ( -/obj/machinery/portable_atmospherics/canister/hydrogen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/cryo_room) -"aZj" = ( -/obj/structure/table/wood, -/obj/item/dice/d20/fate/one_use, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"aZk" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_server) -"aZl" = ( -/obj/machinery/computer{ - dir = 8 - }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/cryo_room) -"aZt" = ( -/obj/structure/xen_crystal, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"aZw" = ( -/obj/structure/xen_crystal{ - pixel_y = 15 - }, -/turf/open/floor/vault/alien, -/area/awaymission/black_mesa/xen/nihilanth_hallway) -"aZB" = ( -/obj/structure/water_source/puddle/healing, -/obj/effect/spawner/random/bioluminescent_plant, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_arena) -"aZE" = ( -/obj/machinery/door/window/brigdoor/security/cell{ - dir = 4; - id = "Mesa 4" - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"aZH" = ( -/obj/machinery/door/airlock/science, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/to_cryo_room) -"aZJ" = ( -/obj/effect/random_mob_placer/xen, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_lobby) -"aZS" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 5 - }, -/turf/open/chasm{ - planetary_atmos = 1 - }, -/area/awaymission/black_mesa/entrance) -"aZU" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/servers) -"aZW" = ( -/obj/machinery/computer/security{ - dir = 4 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_lobby) -"aZZ" = ( -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"bau" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"baR" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_entrance) -"bba" = ( -/obj/structure/deployable_barricade/metal{ - dir = 4 - }, -/obj/structure/deployable_barricade/metal, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"bbc" = ( -/turf/closed/indestructible/rock/xen, -/area/awaymission/black_mesa/xen/lost_camp) -"bbI" = ( -/obj/structure/lattice/catwalk, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"bcL" = ( -/obj/structure/rack/shelf, -/obj/item/assembly/shock_kit, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"bdb" = ( -/obj/effect/mob_spawn/corpse/human/hecu_zombie, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"bed" = ( -/obj/machinery/vending/coffee{ - default_price = 0; - extra_price = 0; - fair_market_price = 0; - name = "\improper Jim Norton's Quebecois Coffee" - }, -/obj/structure/sign/poster/contraband/robust_softdrinks/directional/north{ - name = "Jim Norton's Quebecois Coffee" - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"bem" = ( -/obj/structure/table, -/obj/item/tape/ruins/black_mesa/third_eas, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_entrance) -"bfx" = ( -/obj/structure/alien/weeds/xen, -/obj/item/ammo_box/strilka310, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa) -"bfV" = ( -/obj/machinery/chem_master, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"bgt" = ( -/obj/structure/lattice/catwalk, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake) -"bgC" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 6 - }, -/area/awaymission/black_mesa/xen/lost_camp_hallway) -"bik" = ( -/obj/structure/table, -/obj/item/clothing/accessory/armband, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"bix" = ( -/obj/machinery/door/airlock/science{ - id_tag = "gatesiguess" - }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_internal) -"bjN" = ( -/obj/structure/closet/crate/large, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_feesh) -"bjX" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"bkc" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/machinery/light/broken/directional/north, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"bkf" = ( -/obj/machinery/porta_turret/black_mesa, -/obj/structure/flora/biolumi/lamp/weaklight, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"bli" = ( -/obj/structure/closet/crate/bin, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/employee_dorm_room) -"blz" = ( -/obj/machinery/door_buttons/airlock_controller{ - name = "Elevator Button"; - pixel_x = -23 - }, -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/genetics_elevator) -"bmh" = ( -/obj/structure/flora/biolumi/mine/weaklight{ - pixel_x = -12; - pixel_y = 13 - }, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/black_ops_science_room) -"bmS" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 1 - }, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"bnB" = ( -/obj/effect/baseturf_helper/black_mesa_xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_hallway) -"bnJ" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/table, -/obj/machinery/microwave, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"boM" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/misc/beach/coastline_t/xen{ - dir = 4 - }, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"bpc" = ( -/obj/structure/table, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"bpy" = ( -/obj/structure/water_source/puddle, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"bpH" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 9 - }, -/turf/open/floor/engine, -/area/awaymission/black_mesa/lambda_teleporter) -"bqB" = ( -/obj/structure/chair/plastic{ - dir = 8 - }, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"brg" = ( -/obj/machinery/light/cold, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_entrance) -"bsv" = ( -/obj/machinery/computer{ - dir = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/lambda_teleporter) -"bsL" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_emitter) -"btx" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/plating, -/area/awaymission/black_mesa/black_ops_turret_blockade) -"bur" = ( -/obj/structure/deployable_barricade/metal{ - dir = 1 - }, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"bvz" = ( -/turf/open/floor/plating/elevatorshaft, -/area/awaymission/black_mesa/resonant_chamber) -"bvU" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 10 - }, -/turf/open/floor/engine, -/area/awaymission/black_mesa/lambda_teleporter) -"bwo" = ( -/obj/effect/spawner/random/vending/snackvend, -/turf/open/floor/carpet/blue, -/area/awaymission/black_mesa/high_security_hallway) -"bwz" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/obj/structure/closet/crate/bin, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"bxm" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"byj" = ( -/obj/machinery/computer/operating{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"byl" = ( -/obj/structure/lattice/catwalk, -/turf/open/water/xen_acid, -/area/awaymission/black_mesa/xen/acid_lake) -"byK" = ( -/obj/structure/cable, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp) -"byO" = ( -/obj/machinery/light/broken/directional/north, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"bzF" = ( -/obj/structure/barricade/wooden, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"bAg" = ( -/obj/structure/tank_holder/anesthetic, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"bAx" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 8 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"bBs" = ( -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/high_security_hallway) -"bBT" = ( -/turf/open/floor/iron/stairs/medium{ - dir = 1 - }, -/area/awaymission/black_mesa/equipment_room) -"bDW" = ( -/obj/structure/chair/stool/bamboo{ - dir = 4 - }, -/obj/effect/random_mob_placer/vortigaunt, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"bEa" = ( -/obj/structure/chair/office, -/obj/effect/mob_spawn/ghost_role/human/black_mesa, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"bEo" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/obj/machinery/light/broken/directional/north, -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"bFy" = ( -/obj/structure/closet/crate/bin, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_hallway) -"bGe" = ( -/obj/machinery/door/puzzle/keycard/icebox/processing{ - puzzle_id = "Puzzle1" - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/dorm_tunnel) -"bGu" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/science_labs) -"bGH" = ( -/obj/structure/lattice/catwalk, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"bHE" = ( -/obj/structure/table, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/xen/acid_lake_building) -"bIg" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/plating, -/area/awaymission/black_mesa/high_security_hallway) -"bIH" = ( -/obj/effect/spawner/random/vending/colavend, -/turf/open/floor/carpet/blue, -/area/awaymission/black_mesa/high_security_hallway) -"bJu" = ( -/obj/structure/table, -/obj/item/paper, -/obj/item/geiger_counter, -/obj/item/ammo_box/c10mm, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"bJE" = ( -/obj/machinery/power/floodlight{ - anchored = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"bKH" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"bKZ" = ( -/obj/effect/mob_spawn/corpse/human/hecu_zombie, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/employee_dorm_room) -"bLy" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"bLS" = ( -/obj/machinery/photocopier, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"bMJ" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 8 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"bOt" = ( -/obj/machinery/light/cold, -/obj/structure/chair/sofa/bench{ - dir = 1 - }, -/turf/open/floor/carpet/blue, -/area/awaymission/black_mesa/high_security_servers) -"bOJ" = ( -/turf/open/floor/carpet/blue, -/area/awaymission/black_mesa/high_security_servers) -"bOK" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_emitter) -"bPo" = ( -/obj/structure/flora/biolumi/flower/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_decon_room) -"bPP" = ( -/obj/structure/table, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_entrance) -"bQb" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 1 - }, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"bQd" = ( -/obj/structure/alien/weeds/xen, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/equipment_room) -"bRK" = ( -/obj/item/ammo_box/magazine/m16, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_external_sec) -"bSz" = ( -/obj/structure/table, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"bSI" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/freezer, -/area/awaymission/black_mesa/hecu_zone_bathroom) -"bTZ" = ( -/obj/machinery/light/warm/directional/west, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/employee_dorm_room) -"bUH" = ( -/obj/machinery/computer{ - dir = 8 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"bUJ" = ( -/obj/structure/chair/sofa/bench/right, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/employee_dorm_room) -"bWx" = ( -/obj/structure/fluff/bus/dense{ - icon_state = "frontwallbottomrear" - }, -/turf/open/floor/iron/dark/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"bYm" = ( -/obj/structure/deployable_barricade/metal{ - dir = 1 - }, -/obj/structure/cable, -/obj/structure/deployable_barricade/metal{ - dir = 4 - }, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"bYu" = ( -/obj/structure/railing, -/obj/structure/deployable_barricade/metal{ - dir = 4 - }, -/obj/structure/deployable_barricade/metal, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_button) -"bYS" = ( -/obj/effect/turf_decal/arrows{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"bZa" = ( -/obj/effect/bump_teleporter{ - id = "lambdaup"; - id_target = "lambdadown" - }, -/obj/effect/bump_teleporter{ - id = "lambdaup"; - id_target = "lambdadown" - }, -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/black_ops_entrance) -"bZx" = ( -/obj/structure/closet/crate/large, -/obj/item/food/canned/tomatoes, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"bZK" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"cak" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/electrolyzer, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"can" = ( -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/resonant_chamber) -"cao" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/high_security_hallway) -"caQ" = ( -/obj/item/gun_maintenance_supplies, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/resonant_chamber) -"cba" = ( -/obj/structure/alien/weeds/xen, -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/equipment_room) -"cbk" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/genetics_elevator) -"cbq" = ( -/obj/machinery/light/cold/directional/west, -/obj/machinery/modular_computer/preset/civilian{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"cbD" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"cch" = ( -/obj/structure/table/optable, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/xen/acid_lake_building) -"ccv" = ( -/obj/effect/spawner/liquids_spawner, -/mob/living/basic/carp/mega, -/turf/open/floor/iron/pool, -/area/awaymission/black_mesa/deep_sci_feesh) -"ccX" = ( -/obj/structure/curtain/cloth{ - color = "#556B2F" - }, -/obj/effect/turf_decal/arrows{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"cdK" = ( -/obj/effect/random_mob_placer/vortigaunt, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"cdX" = ( -/obj/machinery/door/window/left/directional/east, -/obj/effect/turf_decal/siding/dark_green{ - dir = 4 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"cem" = ( -/obj/structure/rack/shelf, -/obj/item/reagent_containers/hypospray/medipen/stimulants, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_armory) -"ceu" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"ceC" = ( -/obj/machinery/chem_mass_spec, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_decon_room) -"ceE" = ( -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp) -"ceG" = ( -/obj/effect/random_mob_placer/blackops, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"ceO" = ( -/obj/structure/alien/weeds/xen, -/obj/machinery/power/emitter/welded, -/obj/structure/cable, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"ceV" = ( -/obj/item/weaponcrafting/gunkit/hellgun, -/turf/open/floor/plating, -/area/awaymission/black_mesa/science_tunnel) -"ceW" = ( -/obj/structure/railing, -/obj/machinery/light/cold/directional/west, -/obj/structure/deployable_barricade/metal, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_button) -"cgq" = ( -/obj/structure/table, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"chS" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/turf/open/floor/plating, -/area/awaymission/black_mesa/black_ops_turret_blockade) -"civ" = ( -/obj/structure/table, -/obj/item/pizzabox/pineapple, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_atrium) -"ciB" = ( -/obj/item/ammo_casing/a223/weak, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_entrance) -"ciK" = ( -/obj/structure/railing, -/turf/open/floor/circuit, -/area/awaymission/black_mesa/black_ops_button) -"ciX" = ( -/obj/machinery/modular_computer/preset/civilian{ - dir = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_atrium) -"cjr" = ( -/obj/structure/table, -/obj/item/gun/ballistic/automatic/mp5, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/mp5_outpost) -"cjE" = ( -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"cjO" = ( -/obj/structure/closet/crate/large, -/obj/item/storage/box/hecu_rations, -/turf/open/floor/plating, -/area/awaymission/black_mesa/dorm_tunnel) -"cjV" = ( -/obj/structure/window/spawner/directional/north, -/obj/structure/window/spawner/directional/west, -/obj/structure/server{ - anchored = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"ckA" = ( -/obj/structure/tank_holder/extinguisher, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"ckJ" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/obj/structure/closet/crate/bin, -/obj/item/gun_maintenance_supplies, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"clI" = ( -/obj/machinery/chem_mass_spec, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"clR" = ( -/obj/machinery/computer{ - dir = 4 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"cmn" = ( -/obj/item/statuebust/hippocratic, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_hallway) -"cms" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/obj/effect/random_mob_placer/xen, -/obj/machinery/light/broken, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"cnj" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance_tunnel) -"cny" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_atrium) -"cnA" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/high_security_hallway) -"cnW" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"cou" = ( -/obj/effect/mob_spawn/corpse/human/hecu_zombie, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"coF" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/deep_sci_hall) -"coR" = ( -/obj/structure/table, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"coX" = ( -/obj/machinery/porta_turret/black_mesa/friendly, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"cqd" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_decon_room) -"cqA" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_button) -"cqD" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"cqW" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 1 - }, -/turf/open/floor/carpet/blue, -/area/awaymission/black_mesa/high_security_servers) -"cqZ" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/mineral/black_mesa, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"crg" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"cru" = ( -/obj/structure/table, -/obj/item/grenade/chem_grenade/large, -/obj/item/grenade/chem_grenade/large, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"crz" = ( -/obj/structure/railing{ - dir = 10 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"csK" = ( -/obj/structure/table, -/obj/item/folder/red, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"csP" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/security_outpost) -"cuS" = ( -/obj/structure/filingcabinet/chestdrawer/wheeled, -/obj/item/documents, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"cve" = ( -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/black_ops_science_room) -"cvs" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/bed, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"cvy" = ( -/obj/structure/table, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"cvX" = ( -/obj/machinery/light/cold, -/obj/item/stack/sheet/mineral/sandbags{ - amount = 50 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"cwf" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/engine, -/area/awaymission/black_mesa/lambda_teleporter) -"cwi" = ( -/obj/effect/turf_decal/trimline/green/filled/corner{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"cwW" = ( -/obj/machinery/computer{ - dir = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"cxv" = ( -/obj/structure/water_source/puddle/healing, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"cxM" = ( -/obj/item/flashlight/flare, -/obj/item/flashlight/flare, -/obj/item/flashlight/flare, -/obj/item/flashlight/flare, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"cxQ" = ( -/obj/structure/spacevine/xen/thick, -/obj/effect/baseturf_helper/black_mesa_xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"cyk" = ( -/obj/effect/random_mob_placer/blackops, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_server) -"cyy" = ( -/obj/machinery/light/red/directional/south, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"czJ" = ( -/obj/structure/barricade/sandbags, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"cAQ" = ( -/obj/structure/table, -/obj/item/folder/red, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/dorm_computers) -"cDA" = ( -/obj/structure/lattice/catwalk, -/turf/open/floor/plating, -/area/awaymission/black_mesa/science_decon_room) -"cDJ" = ( -/obj/structure/lattice/catwalk, -/obj/effect/random_mob_placer/blackops, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"cEy" = ( -/obj/structure/rack/shelf, -/obj/item/ammo_box/magazine/c40sol_rifle, -/obj/item/ammo_box/magazine/c40sol_rifle, -/obj/item/ammo_box/magazine/c40sol_rifle, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"cFH" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_server) -"cFU" = ( -/obj/structure/xen_crystal, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/mp5_outpost) -"cGi" = ( -/obj/machinery/light/cold/directional/east, -/obj/structure/chair/sofa/corp{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"cGQ" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"cHP" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/tank_holder/anesthetic, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"cIe" = ( -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/silver/glass, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"cIf" = ( -/obj/structure/water_source/puddle, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp_hallway) -"cIR" = ( -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/science{ - id_tag = "chemiguess" - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_labs) -"cKU" = ( -/obj/structure/railing{ - dir = 5 - }, -/obj/machinery/porta_turret/black_mesa, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"cKX" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/circuit, -/area/awaymission/black_mesa/black_ops_button) -"cLY" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"cNZ" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/genetics) -"cOX" = ( -/obj/machinery/light/cold/directional/east, -/obj/effect/turf_decal/arrows{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"cPd" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing, -/turf/open/floor/engine, -/area/awaymission/black_mesa/lambda_teleporter) -"cPq" = ( -/obj/structure/closet/crate/large, -/obj/item/pickaxe, -/turf/open/floor/plating, -/area/awaymission/black_mesa/hecu_zone_tunnel) -"cPz" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/structure/flora/biolumi/lamp/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"cPC" = ( -/mob/living/basic/blob_minion/spore, -/obj/structure/blob/normal, -/turf/open/floor/engine, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"cPH" = ( -/obj/machinery/computer{ - dir = 8 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"cPI" = ( -/obj/structure/rack/shelf, -/obj/item/storage/medkit/advanced, -/obj/item/storage/medkit/advanced, -/obj/item/storage/medkit/advanced, -/obj/item/storage/medkit/expeditionary, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_armory) -"cPK" = ( -/obj/machinery/power/emitter/energycannon{ - dir = 1 - }, -/obj/structure/lattice/catwalk, -/turf/open/floor/engine, -/area/awaymission/black_mesa/lambda_teleporter) -"cPS" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/spawner/random/structure/closet_private, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"cQu" = ( -/obj/structure/barricade/sandbags, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"cQD" = ( -/obj/structure/inflatable, -/obj/structure/cable, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp) -"cQF" = ( -/obj/machinery/porta_turret/black_mesa/friendly, -/turf/open/misc/beach/coastline_t/sandwater_inner/xen{ - dir = 8 - }, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"cRb" = ( -/obj/machinery/computer, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_button) -"cSu" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_internal_hall) -"cSv" = ( -/obj/structure/fluff/bus/passable{ - icon_state = "wheredahoodat" - }, -/turf/open/floor/iron/dark/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"cTb" = ( -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_atrium) -"cTc" = ( -/obj/structure/lattice/catwalk, -/obj/effect/random_mob_placer/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/deep_sci_hall) -"cTi" = ( -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/structure/flora/biolumi/mine/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"cTO" = ( -/obj/machinery/power/emitter/energycannon{ - dir = 8 - }, -/obj/machinery/power/emitter/energycannon{ - dir = 8 - }, -/turf/open/floor/circuit/red, -/area/awaymission/black_mesa/black_ops_turret_blockade) -"cUd" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/high_security_emitter) -"cUf" = ( -/obj/structure/cable, -/obj/structure/alien/weeds/xen, -/obj/structure/flora/biolumi/lamp/weaklight, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"cUM" = ( -/obj/structure/deployable_barricade/metal{ - dir = 4 - }, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"cWJ" = ( -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"cXa" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"cXw" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/obj/structure/table, -/obj/item/pizzabox/margherita, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"cXB" = ( -/obj/structure/table, -/obj/item/flashlight/lamp, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"cYO" = ( -/turf/open/floor/circuit, -/area/awaymission/black_mesa/black_ops_turret_blockade) -"cYY" = ( -/obj/effect/spawner/random/vending/colavend, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_internal_hall) -"cZI" = ( -/obj/machinery/light/small/red/directional/east, -/turf/open/floor/plating, -/area/awaymission/black_mesa/hecu_zone_tunnel) -"dan" = ( -/obj/machinery/smoke_machine, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics) -"daX" = ( -/obj/effect/spawner/random/vending/colavend, -/turf/open/floor/carpet/blue, -/area/awaymission/black_mesa/high_security_servers) -"dbM" = ( -/obj/machinery/door/airlock/multi_tile/public/glass, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"dcv" = ( -/obj/machinery/cryo_cell, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/xen/acid_lake_building) -"ddi" = ( -/obj/structure/closet/crate/secure/weapon, -/obj/item/stack/sheet/iron/twenty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"ddt" = ( -/obj/structure/alien/weeds/xen, -/obj/structure/cable, -/obj/machinery/power/emitter/welded{ - dir = 1 - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"det" = ( -/obj/structure/table, -/obj/item/folder/blue, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"dew" = ( -/obj/machinery/light/broken/directional/north, -/obj/effect/spawner/random/vending/snackvend, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"deH" = ( -/obj/machinery/smartfridge/chemistry/preloaded, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"deU" = ( -/obj/structure/flora/biolumi/mine/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_labs) -"dfc" = ( -/obj/structure/railing{ - dir = 6 - }, -/turf/open/floor/circuit, -/area/awaymission/black_mesa/lambda_teleporter) -"dfk" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"dfy" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 8 - }, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"dgr" = ( -/turf/open/floor/engine, -/area/awaymission/black_mesa/lambda_teleporter) -"dgs" = ( -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/dark/textured, -/area/awaymission/black_mesa/hecu_zone_bathroom) -"dhs" = ( -/turf/open/water/beach/xen, -/area/awaymission/black_mesa/xen/lost_camp_hallway) -"dis" = ( -/obj/effect/spawner/random/vending/colavend, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"dix" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_hall) -"djq" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 8 - }, -/obj/machinery/light/broken/directional/west, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"djM" = ( -/obj/structure/sign/poster/random/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"djQ" = ( -/obj/structure/railing, -/obj/structure/table, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/equipment_room) -"djS" = ( -/obj/structure/alien/weeds/xen, -/obj/effect/mob_spawn/corpse/human/guard_zombie, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"dlk" = ( -/obj/machinery/computer{ - dir = 4 - }, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics_sec) -"dly" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 1 - }, -/obj/effect/mob_spawn/corpse/human/skeleton, -/turf/open/floor/engine, -/area/awaymission/black_mesa/xen/entering_zone) -"dmL" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/circuit/red, -/area/awaymission/black_mesa/black_ops_turret_blockade) -"dnf" = ( -/obj/structure/railing, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"dnS" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"dok" = ( -/obj/structure/table, -/obj/structure/sign/calendar/directional/west, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"dop" = ( -/obj/structure/flora/biolumi/lamp/weaklight{ - pixel_x = 8; - pixel_y = -17 - }, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/black_ops_science_room) -"doO" = ( -/obj/structure/closet/crate/bin, -/obj/item/pushbroom, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/employee_dorm_room) -"dpF" = ( -/obj/structure/curtain, -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"dpK" = ( -/obj/structure/chair/office, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"dqq" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"dqR" = ( -/obj/structure/railing{ - dir = 10 - }, -/turf/open/floor/circuit, -/area/awaymission/black_mesa/lambda_teleporter) -"dru" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_hall) -"drF" = ( -/obj/machinery/light/cold/directional/north, -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"drM" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/engine, -/area/awaymission/black_mesa/lambda_teleporter) -"dsC" = ( -/obj/structure/alien/weeds/node, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_surgery) -"dsI" = ( -/obj/structure/cable, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"dsQ" = ( -/obj/structure/inflatable{ - color = "#556B2F"; - opacity = 1 - }, -/obj/structure/cable, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp) -"duc" = ( -/obj/item/flashlight/lantern, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"dus" = ( -/obj/structure/railing, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"duw" = ( -/obj/structure/table, -/obj/item/storage/box/hecu_rations, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/mp5_outpost) -"duV" = ( -/obj/machinery/computer, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/scientist_hall) -"dvk" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 8 - }, -/obj/effect/random_mob_placer/xen, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"dvL" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"dwa" = ( -/obj/machinery/medical_kiosk, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"dxJ" = ( -/obj/structure/lattice/catwalk, -/obj/effect/random_mob_placer/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/scientist_hall) -"dyc" = ( -/obj/effect/random_mob_placer/xen, -/obj/structure/spacevine/xen/thick, -/turf/open/water/beach/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"dzu" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"dzN" = ( -/obj/structure/marker_beacon/burgundy, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"dzX" = ( -/obj/effect/spawner/random/bioluminescent_plant/weak, -/turf/open/misc/beach/coastline_t/xen{ - dir = 8 - }, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"dzY" = ( -/obj/structure/xen_pylon/freeman{ - pixel_y = 12 - }, -/turf/open/misc/beach/coastline_t/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"dAv" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/light/broken/directional/north, -/turf/open/floor/plating, -/area/awaymission/black_mesa/scientist_hall) -"dBl" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 6 - }, -/obj/effect/decal/remains/human, -/obj/structure/marker_beacon/burgundy, -/turf/open/floor/engine, -/area/awaymission/black_mesa/xen/entering_zone) -"dCz" = ( -/obj/structure/showcase/perfect_employee, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"dCG" = ( -/obj/structure/cable, -/obj/structure/table, -/obj/item/modular_computer/laptop, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"dDq" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"dDu" = ( -/obj/structure/chair/stool, -/obj/effect/random_mob_placer/xen, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/equipment_room) -"dDw" = ( -/obj/effect/mob_spawn/corpse/human/skeleton, -/turf/open/misc/beach/coastline_b/xen{ - dir = 9 - }, -/area/awaymission/black_mesa/xen/entering_zone) -"dDF" = ( -/obj/machinery/door/poddoor, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"dDU" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/high_security_surgery) -"dFb" = ( -/obj/effect/mob_spawn/corpse/human/hecu_zombie, -/turf/open/floor/iron/dark/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"dFF" = ( -/obj/structure/table, -/obj/item/food/mre_course/dessert/cookie, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"dGr" = ( -/obj/effect/random_mob_placer/blackops, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"dGx" = ( -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/acid_lake) -"dGD" = ( -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"dGM" = ( -/turf/open/floor/plating, -/area/awaymission/black_mesa/xen/lost_camp) -"dGY" = ( -/obj/effect/turf_decal/stripes, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/scientist_hall) -"dHh" = ( -/obj/machinery/bookbinder, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"dIi" = ( -/obj/machinery/porta_turret/black_mesa/friendly, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake) -"dIq" = ( -/obj/structure/closet/secure_closet/security/black_mesa, -/obj/item/clothing/mask/gas/syndicate/ds, -/obj/item/storage/medkit/emergency, -/obj/item/keycard/stockroom, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"dIH" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"dIL" = ( -/obj/machinery/destructive_scanner, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/xen/acid_lake_building) -"dJX" = ( -/obj/structure/table, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"dLt" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"dMR" = ( -/obj/effect/turf_decal/siding/dark_red, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"dNy" = ( -/obj/structure/table, -/obj/item/folder/blue, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_atrium) -"dNA" = ( -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/village_hallway) -"dOb" = ( -/obj/machinery/computer/records/security{ - dir = 4 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/high_security_sec_point) -"dOR" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"dPz" = ( -/obj/structure/alien/egg/burst, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_surgery) -"dPS" = ( -/obj/item/ammo_casing/a223/weak, -/obj/item/ammo_casing/a223/weak, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_entrance) -"dQa" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"dQq" = ( -/obj/structure/railing, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"dQu" = ( -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"dQE" = ( -/obj/effect/gibspawner/human/bodypartless, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"dRb" = ( -/obj/structure/table, -/obj/structure/alien/weeds/xen, -/obj/effect/spawner/random/exotic/technology, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"dRN" = ( -/turf/open/misc/beach/coastline_b/xen{ - dir = 1 - }, -/area/awaymission/black_mesa/xen/entering_zone) -"dSQ" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, -/turf/open/floor/engine, -/area/awaymission/black_mesa/high_security_emitter) -"dTf" = ( -/obj/structure/chair/sofa/bench{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"dTm" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"dTv" = ( -/obj/effect/baseturf_helper/black_mesa_xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_arena) -"dTz" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/scientist_hall) -"dTJ" = ( -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"dTO" = ( -/obj/structure/table, -/obj/item/folder/red, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_labs) -"dUs" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/scientist_hall) -"dUO" = ( -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/employee_dorm_room) -"dVo" = ( -/obj/structure/table, -/obj/structure/fluff/paper/stack{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"dVM" = ( -/obj/machinery/grill, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"dWe" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics_sec) -"dWl" = ( -/obj/effect/turf_decal/stripes, -/obj/structure/table, -/obj/structure/bedsheetbin, -/obj/structure/sign/clock/directional/south, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"dWt" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics) -"dWA" = ( -/turf/open/floor/iron/stairs/medium{ - dir = 8 - }, -/area/awaymission/black_mesa/high_security_hallway) -"dWG" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/obj/effect/turf_decal/tile/green/fourcorners, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_internal_hall) -"dYd" = ( -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/machinery/light/cold, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"dYp" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa/dorm_tunnel) -"dYE" = ( -/obj/machinery/door/airlock/science/glass, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_hall) -"dYJ" = ( -/obj/machinery/doppler_array, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"dZu" = ( -/obj/structure/closet/crate/large, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"dZv" = ( -/obj/effect/turf_decal/siding/blue, -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"eab" = ( -/obj/machinery/door_buttons/airlock_controller{ - name = "Elevator Button"; - pixel_y = 23 - }, -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"eag" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 6 - }, -/turf/open/floor/engine, -/area/awaymission/black_mesa/lambda_teleporter) -"eat" = ( -/obj/structure/deployable_barricade/metal{ - dir = 4 - }, -/obj/structure/marker_beacon/burgundy, -/obj/structure/cable, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_camp) -"eaL" = ( -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake) -"eaO" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"ebi" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/obj/machinery/light/broken, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"edd" = ( -/obj/structure/inflatable{ - color = "#556B2F"; - opacity = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"edS" = ( -/obj/structure/grille/broken, -/obj/item/shard, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating, -/area/awaymission/black_mesa/black_ops_entrance) -"edZ" = ( -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/black_ops_entrance) -"eff" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/genetics) -"efM" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"efO" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/genetics_elevator) -"egS" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/deep_sci_turret) -"ehd" = ( -/obj/structure/flora/biolumi/lamp/weaklight, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"ehE" = ( -/obj/structure/lattice/catwalk, -/turf/open/floor/plating, -/area/awaymission/black_mesa/scientist_hall) -"ehK" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/lambda_hallway) -"eif" = ( -/obj/structure/rack/gunrack, -/obj/item/ammo_box/magazine/c980_grenade, -/obj/item/ammo_box/c980grenade/shrapnel, -/obj/item/ammo_casing/c980grenade/shrapnel/phosphor, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"eij" = ( -/obj/structure/table, -/obj/item/folder/red, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/high_security_surgery) -"eiE" = ( -/obj/effect/random_mob_placer/xen, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"ejs" = ( -/obj/structure/fluff/bus/passable/seat, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/dark/textured_large{ - icon_state = "bus" - }, -/area/awaymission/black_mesa/black_ops_bus) -"ekr" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"eky" = ( -/obj/structure/rack/shelf, -/obj/item/grenade/frag, -/obj/item/grenade/frag, -/obj/item/grenade/frag, -/obj/item/grenade/frag, -/obj/item/gun_maintenance_supplies, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_armory) -"ems" = ( -/obj/structure/sign/poster/random/directional/south, -/obj/effect/turf_decal/siding/blue, -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"emu" = ( -/obj/machinery/light/cold, -/obj/structure/chair/sofa/corp/left{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"enC" = ( -/obj/structure/table, -/obj/item/folder/blue, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"enK" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/tank_holder/anesthetic, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"enQ" = ( -/turf/open/chasm{ - planetary_atmos = 1 - }, -/area/awaymission/black_mesa/lambda_teleporter) -"eoM" = ( -/obj/structure/chair/sofa/corp{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"epL" = ( -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"epV" = ( -/obj/structure/flora/biolumi/lamp/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/equipment_room) -"eqD" = ( -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"erE" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/gas_emitter_chamber) -"erJ" = ( -/obj/effect/spawner/random/bioluminescent_plant, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"esP" = ( -/obj/structure/holosign/barrier/wetsign, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"etg" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/indestructible/reinforced, -/area/awaymission/black_mesa/dorm_tunnel) -"ets" = ( -/obj/structure/inflatable{ - color = "#556B2F"; - opacity = 1 - }, -/obj/machinery/light/broken/directional/south, -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"euc" = ( -/turf/closed/indestructible/reinforced, -/area/awaymission/black_mesa/employee_dorm_room) -"euy" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 10 - }, -/obj/structure/marker_beacon/burgundy, -/turf/open/floor/engine, -/area/awaymission/black_mesa/xen/entering_zone) -"evY" = ( -/obj/effect/random_mob_placer/security_guard, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_armory) -"ewW" = ( -/obj/item/taperecorder/empty, -/obj/item/tape/ruins/black_mesa/first_hecu, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"exd" = ( -/obj/item/target, -/turf/open/floor/engine, -/area/awaymission/black_mesa/high_security_emitter) -"exY" = ( -/obj/structure/chair/office, -/obj/effect/mob_spawn/ghost_role/human/black_mesa, -/obj/structure/sign/poster/official/science/directional/north, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"eyI" = ( -/obj/structure/table, -/obj/item/storage/medkit/regular, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/xen/acid_lake_building) -"ezH" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/beaker/synthflesh, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"ezT" = ( -/obj/structure/railing, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/engine, -/area/awaymission/black_mesa/deep_sci_turret) -"eAo" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/black_ops_hall) -"eAu" = ( -/turf/open/misc/beach/coastline_t/sandwater_inner/xen{ - dir = 4 - }, -/area/awaymission/black_mesa/xen/lost_camp_hallway) -"eAz" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/barricade/wooden, -/turf/open/floor/plating, -/area/awaymission/black_mesa/high_security_surgery) -"eAA" = ( -/obj/structure/flora/tree/dead, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"eBc" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 8 - }, -/obj/structure/flora/biolumi/mine/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"eCy" = ( -/turf/open/floor/iron/stairs/medium{ - dir = 8 - }, -/area/awaymission/black_mesa/hecu_zone_camp) -"eCX" = ( -/obj/effect/turf_decal/stripes, -/obj/machinery/light/cold, -/obj/structure/sign/flag/usa/directional/south, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"eDD" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"eEo" = ( -/obj/machinery/griddle, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"eFZ" = ( -/obj/effect/turf_decal/stripes, -/obj/structure/table, -/obj/item/flashlight/seclite, -/obj/structure/sign/calendar/directional/south, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"eGs" = ( -/obj/structure/table, -/obj/item/knife/combat/marksman, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"eHg" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/black_ops_hallway_two) -"eHo" = ( -/obj/item/pressure_plate/hologrid{ - reward = /obj/item/keycard/icebox/office - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/dorm_computers) -"eJe" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/water/overlay/hotspring/indestructible, -/area/awaymission/black_mesa/black_ops_button) -"eJv" = ( -/obj/structure/closet/secure_closet/engineering_welding, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"eJC" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_hall) -"eKW" = ( -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_labs) -"eLr" = ( -/obj/effect/gibspawner/human, -/turf/open/floor/plating, -/area/awaymission/black_mesa/hecu_zone_tunnel) -"eMn" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"eMs" = ( -/obj/structure/cable, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"eMB" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"eME" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/structure/chair/sofa/bench, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"eOL" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/deep_sci_chem) -"ePf" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 4 - }, -/obj/machinery/light/broken/directional/west, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"ePt" = ( -/obj/item/food/popcorn, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"ePK" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 4 - }, -/obj/machinery/light/cold/directional/east, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"ePW" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"eQj" = ( -/obj/effect/bump_teleporter{ - id = "amsup"; - id_target = "amsdown" - }, -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/genetics_elevator) -"eQB" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/siding/blue{ - dir = 1 - }, -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"eRK" = ( -/obj/machinery/door/airlock/vault, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/baseturf_helper/black_mesa_xen, -/turf/open/floor/vault/alien, -/area/awaymission/black_mesa/xen/nihilanth_hallway) -"eSs" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_science_room) -"eSD" = ( -/obj/structure/closet/wardrobe, -/obj/machinery/light/broken/directional/east, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/dark/textured, -/area/awaymission/black_mesa/hecu_zone_bathroom) -"eTC" = ( -/turf/open/floor/plating, -/area/awaymission/black_mesa/xen/acid_lake_building) -"eVB" = ( -/obj/item/food/canned/tuna, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"eXb" = ( -/obj/effect/spawner/random/bioluminescent_plant/weak, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"eXf" = ( -/mob/living/simple_animal/hostile/blackmesa/sec, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_armory) -"eXU" = ( -/obj/item/flashlight/flare, -/obj/machinery/light/small/red/directional/south, -/turf/open/floor/plating, -/area/awaymission/black_mesa/hecu_zone_tunnel) -"eYk" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/turf/open/floor/engine, -/area/awaymission/black_mesa/resonant_chamber) -"eYu" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_labs) -"eYM" = ( -/obj/item/stack/sheet/plasteel, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"eYQ" = ( -/obj/structure/cable, -/obj/structure/table, -/obj/machinery/microwave, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"eYU" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"eZe" = ( -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/employee_dorm_room) -"eZm" = ( -/obj/structure/lattice/catwalk, -/turf/open/floor/plating, -/area/awaymission/black_mesa/science_internal) -"eZs" = ( -/obj/structure/fence{ - dir = 4 - }, -/obj/effect/spawner/liquids_spawner, -/turf/open/floor/iron/pool, -/area/awaymission/black_mesa/deep_sci_feesh) -"eZJ" = ( -/obj/structure/rack/shelf, -/obj/item/ammo_box/magazine/p90, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_armory) -"fah" = ( -/obj/structure/closet/crate/large, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance_tunnel) -"fao" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/deep_sci_storage) -"faD" = ( -/obj/machinery/door/airlock/science/glass, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_emitter) -"faZ" = ( -/obj/machinery/door/airlock/multi_tile/public/glass, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/scientist_hall) -"fbS" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"fcm" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_decon_room) -"fcR" = ( -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/black_ops_server) -"fcS" = ( -/obj/machinery/light/broken/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"fea" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/entrance) -"fed" = ( -/obj/structure/extinguisher_cabinet/directional/south, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/equipment_room) -"fef" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_hall) -"feA" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"feL" = ( -/obj/machinery/chem_mass_spec, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics_sec) -"ffd" = ( -/obj/effect/random_mob_placer/vortigaunt_hostile, -/turf/open/floor/plating, -/area/awaymission/black_mesa/dorm_tunnel) -"ffk" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"ffD" = ( -/obj/machinery/door/airlock/science/glass, -/obj/effect/mapping_helpers/airlock/locked, -/obj/structure/barricade/wooden, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_surgery) -"ffW" = ( -/turf/open/floor/circuit, -/area/awaymission/black_mesa/lambda_teleporter) -"fgF" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/lambda_teleporter) -"fgR" = ( -/obj/machinery/smartfridge/chemistry/preloaded, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"fhE" = ( -/obj/effect/spawner/random/vending/snackvend, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_internal_hall) -"fhM" = ( -/obj/machinery/light/broken/directional/south, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"fhT" = ( -/turf/open/misc/beach/coastline_b/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"fif" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/structure/closet/crate/bin, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"fig" = ( -/obj/structure/railing/corner{ - dir = 4 - }, -/turf/open/floor/circuit, -/area/awaymission/black_mesa/lambda_teleporter) -"fin" = ( -/obj/machinery/light/broken/directional/north, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"fio" = ( -/obj/machinery/porta_turret/black_mesa, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_entrance) -"fir" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/lambda_teleporter) -"fjj" = ( -/obj/machinery/power/emitter/energycannon{ - dir = 4 - }, -/obj/machinery/power/emitter/energycannon{ - dir = 4 - }, -/turf/open/floor/circuit/red, -/area/awaymission/black_mesa/black_ops_turret_blockade) -"fjp" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/black_ops_science_room) -"fjK" = ( -/obj/effect/mob_spawn/corpse/human/engineer, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"fjM" = ( -/obj/structure/alien/weeds/xen, -/obj/structure/cable, -/obj/machinery/power/emitter/welded{ - dir = 4 - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"fkz" = ( -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"flu" = ( -/obj/structure/table/wood, -/obj/item/food/meat/slab/human, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"flC" = ( -/obj/machinery/computer{ - dir = 8 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics) -"fmF" = ( -/obj/structure/rack/gunrack, -/obj/item/gun/ballistic/automatic/mp5, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"fmN" = ( -/obj/structure/closet/crate/medical, -/obj/effect/turf_decal/siding/dark_green{ - dir = 8 - }, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"fnr" = ( -/turf/open/misc/beach/coastline_t/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"fnD" = ( -/obj/effect/random_mob_placer/blackops, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_entrance) -"fnG" = ( -/obj/item/storage/medkit/advanced, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"fnP" = ( -/obj/item/stack/rods, -/turf/open/water/xen_acid, -/area/awaymission/black_mesa/xen/acid_lake) -"fom" = ( -/turf/closed/indestructible/rock, -/area/awaymission/black_mesa/lambda_teleporter) -"fos" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/scientist_hall) -"fpv" = ( -/obj/item/clothing/gloves/latex/nitrile, -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"fpy" = ( -/obj/structure/rack/shelf, -/obj/item/gun/ballistic/automatic/pistol/sol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"fpS" = ( -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"fqj" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_armory) -"ftw" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"fuF" = ( -/obj/structure/table, -/obj/machinery/recharger, -/obj/machinery/light/cold, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/deep_sci_turret) -"fvE" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 8 - }, -/obj/machinery/light/broken/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/genetics_elevator) -"fvJ" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"fvQ" = ( -/obj/structure/table, -/obj/item/gun_maintenance_supplies, -/obj/item/gun_maintenance_supplies, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/high_security_emitter) -"fwg" = ( -/obj/structure/fence, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_surgery) -"fwx" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/glass/coffee{ - pixel_x = -3 - }, -/obj/item/reagent_containers/cup/glass/mug/tea{ - pixel_x = 4; - pixel_y = 2 - }, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_internal_hall) -"fwW" = ( -/mob/living/simple_animal/hostile/blackmesa/blackops/ranged, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_button) -"fxF" = ( -/obj/machinery/computer{ - dir = 8 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_entrance) -"fxV" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"fym" = ( -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics) -"fyE" = ( -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/high_security_surgery) -"fzx" = ( -/obj/structure/rack, -/obj/item/construction/rld, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"fzF" = ( -/obj/structure/closet/crate/secure/loot, -/obj/effect/spawner/random/exotic/antag_gear, -/obj/effect/spawner/random/exotic/antag_gear_weak, -/obj/effect/spawner/random/exotic/antag_gear_weak, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_armory) -"fAW" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/structure/table, -/obj/item/coffee_cartridge, -/obj/item/coffee_cartridge, -/obj/item/coffee_cartridge, -/obj/item/coffee_cartridge, -/obj/item/coffee_cartridge, -/obj/item/coffee_cartridge, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"fBo" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/black_ops_hall) -"fBv" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 1 - }, -/obj/structure/chair/sofa/bench/right, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"fBH" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/railing, -/obj/structure/marker_beacon/burgundy, -/turf/open/floor/engine, -/area/awaymission/black_mesa/xen/entering_zone) -"fDa" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"fEr" = ( -/obj/structure/alien/weeds/xen, -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_internal_hall) -"fED" = ( -/obj/machinery/chem_heater, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics) -"fFh" = ( -/obj/structure/flora/biolumi/mine/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"fFA" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/obj/structure/table, -/obj/machinery/chem_dispenser/drinks/beer, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"fGg" = ( -/obj/structure/chair/sofa/bench/left, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/employee_dorm_room) -"fGY" = ( -/obj/effect/spawner/liquids_spawner, -/turf/open/floor/iron/pool, -/area/awaymission/black_mesa/deep_sci_feesh) -"fHn" = ( -/obj/machinery/door/airlock/science, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics_sec) -"fHq" = ( -/obj/structure/sign/departments/chemistry, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/deep_sci_hall) -"fHu" = ( -/obj/effect/spawner/random/vending/colavend, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"fIH" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/structure/chair/sofa/bench/left, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"fKG" = ( -/obj/structure/alien/weeds/xen, -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_decon_room) -"fKJ" = ( -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/dorm_computers) -"fLp" = ( -/obj/item/food/canned/beans, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"fLI" = ( -/turf/closed/indestructible/reinforced, -/area/awaymission/black_mesa/equipment_room) -"fMJ" = ( -/obj/machinery/computer{ - dir = 8 - }, -/obj/machinery/light/broken/directional/east, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_decon_room) -"fNm" = ( -/obj/structure/table, -/obj/item/paper, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"fPQ" = ( -/obj/item/food/urinalcake, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_surgery) -"fPX" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 5 - }, -/area/awaymission/black_mesa/xen/lost_camp_hallway) -"fQo" = ( -/obj/structure/flora/biolumi/lamp/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"fUS" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/structure/lattice/catwalk, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"fUY" = ( -/turf/open/water/electric, -/area/awaymission/black_mesa/employee_dorm_room) -"fXk" = ( -/obj/machinery/light/broken/directional/east, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_decon_room) -"fXG" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/structure/flora/biolumi/mine/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"fYd" = ( -/obj/structure/inflatable/door{ - color = "#556B2F"; - opacity = 1 - }, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp) -"fYD" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"fYL" = ( -/obj/machinery/door/airlock/maintenance, -/turf/open/floor/plating, -/area/awaymission/black_mesa/science_tunnel) -"fYW" = ( -/obj/structure/alien/weeds/xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp) -"fZA" = ( -/obj/machinery/computer{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"fZB" = ( -/obj/structure/railing{ - dir = 9 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"fZK" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"gaj" = ( -/obj/structure/railing{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/resonant_chamber) -"gaA" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 6 - }, -/obj/machinery/porta_turret/black_mesa, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"gaL" = ( -/obj/effect/decal/remains/human, -/turf/open/water/beach/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"gbg" = ( -/obj/machinery/computer{ - dir = 1 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/deep_sci_turret) -"gdc" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/scientist_hall) -"gdr" = ( -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"gdX" = ( -/obj/structure/table, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"gee" = ( -/obj/structure/rack/shelf, -/obj/machinery/light/cold, -/obj/item/gun/ballistic/automatic/m16, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_armory) -"gew" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"geB" = ( -/turf/closed/indestructible/reinforced, -/area/awaymission/black_mesa/dorm_tunnel) -"geV" = ( -/obj/structure/rack, -/obj/item/storage/part_replacer, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"gfO" = ( -/obj/structure/chair, -/obj/effect/turf_decal/tile/green, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_internal_hall) -"ggf" = ( -/obj/structure/closet/secure_closet/medical1{ - req_access = null - }, -/obj/effect/turf_decal/siding/dark_red, -/obj/effect/turf_decal/siding/dark_green/corner{ - dir = 1 - }, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"ggg" = ( -/obj/structure/table/optable, -/obj/machinery/light/cold/directional/east, -/obj/item/storage/medkit/surgery, -/obj/item/clothing/mask/breath/medical, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"ggL" = ( -/obj/machinery/light/cold, -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"ggY" = ( -/obj/structure/window/spawner/directional/south, -/obj/structure/server{ - anchored = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"gid" = ( -/obj/structure/table, -/obj/item/folder/blue, -/obj/machinery/light/cold, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"gip" = ( -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 5 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"gkk" = ( -/obj/effect/spawner/random/vending/colavend, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"gkl" = ( -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_hallway_two) -"glF" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"gmJ" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_atrium) -"gol" = ( -/obj/item/stock_parts/cell/high, -/obj/structure/alien/weeds/xen, -/obj/structure/closet/wardrobe, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/equipment_room) -"gov" = ( -/obj/structure/cable, -/obj/machinery/power/smes, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"goz" = ( -/obj/structure/sign/warning/radiation, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/resonant_chamber) -"goZ" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"gpj" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/science_tunnel) -"gpk" = ( -/obj/structure/mineral_door/xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp_hallway) -"gpN" = ( -/obj/structure/mineral_door/xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"gqq" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/structure/sign/poster/random/directional/north, -/obj/structure/table, -/obj/item/storage/box/cups, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"gqu" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/deep_sci_chem) -"gsy" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/machinery/light/cold/directional/west, -/obj/structure/table, -/obj/item/storage/box/donkpockets/donkpocketpizza{ - pixel_x = -6 - }, -/obj/item/storage/box/donkpockets{ - pixel_x = 4 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"gtN" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/scientist_hall) -"guk" = ( -/obj/structure/table, -/obj/item/folder/red, -/obj/structure/sign/warning/no_smoking/circle/directional/north, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"guF" = ( -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"gvf" = ( -/obj/effect/mob_spawn/corpse/human/hecu_zombie, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/black_ops_bus) -"gvm" = ( -/obj/machinery/light/cold/directional/north, -/obj/structure/table, -/obj/item/storage/fancy/donut_box, -/obj/item/reagent_containers/cup/glass/coffee, -/obj/item/assembly/signaler, -/obj/item/gun_maintenance_supplies, -/obj/item/gun_maintenance_supplies, -/obj/item/gun_maintenance_supplies, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/high_security_sec_point) -"gvI" = ( -/obj/structure/chair/plastic{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"gwE" = ( -/obj/structure/closet/crate/large, -/obj/item/stack/sheet/plasteel, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_entrance) -"gxC" = ( -/obj/effect/bump_teleporter{ - id = "teleporterdown"; - id_target = "teleporterup" - }, -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/black_ops_hallway_two) -"gyy" = ( -/obj/structure/marker_beacon/burgundy, -/obj/structure/deployable_barricade/metal{ - dir = 1 - }, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"gze" = ( -/turf/open/floor/iron/stairs/medium{ - dir = 4 - }, -/area/awaymission/black_mesa/black_ops_button) -"gAf" = ( -/obj/structure/table, -/obj/item/storage/fancy/donut_box, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"gAl" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"gAB" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"gAR" = ( -/obj/effect/baseturf_helper/black_mesa_xen, -/turf/open/water/xen_acid, -/area/awaymission/black_mesa/xen/acid_lake) -"gBN" = ( -/obj/effect/mob_spawn/corpse/human/hecu_zombie, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/high_security_hallway) -"gCt" = ( -/obj/structure/rack/gunrack, -/obj/item/gun/ballistic/automatic/sol_grenade_launcher, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"gCB" = ( -/obj/item/gun/ballistic/automatic/m16/oldarms, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/black_ops_bus) -"gDg" = ( -/obj/structure/fluff/bus/passable/seat, -/turf/open/floor/iron/dark/textured_large{ - icon_state = "bus" - }, -/area/awaymission/black_mesa/black_ops_bus) -"gEA" = ( -/obj/effect/decal/cleanable/blood/tracks, -/obj/structure/cable, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_camp) -"gGc" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_hall) -"gGF" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"gGU" = ( -/obj/structure/table, -/obj/item/storage/box/hecu_rations, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"gGZ" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"gHv" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"gHF" = ( -/obj/effect/spawner/random/bioluminescent_plant/weak, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/mp5_outpost) -"gHY" = ( -/obj/machinery/light/dim/directional/west, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"gIf" = ( -/obj/structure/table, -/obj/item/gun/ballistic/automatic/pistol/sol, -/turf/open/floor/plating, -/area/awaymission/black_mesa/equipment_room) -"gIr" = ( -/obj/effect/random_mob_placer/xen, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"gIM" = ( -/obj/effect/turf_decal/stripes, -/obj/machinery/recharge_station, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"gJa" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/machinery/light/cold, -/turf/open/floor/carpet/blue, -/area/awaymission/black_mesa/high_security_hallway) -"gKe" = ( -/obj/structure/railing/corner{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"gKg" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"gKy" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 8 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"gLe" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/deep_sci_turret) -"gMj" = ( -/obj/machinery/door/poddoor{ - id = "sectorcmain" - }, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_hall) -"gMx" = ( -/obj/machinery/shower/directional/east, -/obj/structure/drain, -/turf/open/floor/iron/freezer, -/area/awaymission/black_mesa/hecu_zone_bathroom) -"gNG" = ( -/obj/item/keycard/yellow, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_decon_room) -"gOg" = ( -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/high_security_surgery) -"gOM" = ( -/obj/structure/railing/corner, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"gPz" = ( -/obj/machinery/porta_turret/black_mesa, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_hall) -"gQg" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"gRA" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"gSH" = ( -/obj/structure/lattice/catwalk, -/obj/effect/bump_teleporter{ - density = 0; - id = "lambda_destination" - }, -/turf/open/floor/engine, -/area/awaymission/black_mesa/xen/entering_zone) -"gTe" = ( -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"gTh" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"gTp" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_feesh) -"gTF" = ( -/turf/closed/indestructible/rock/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"gUo" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/servers) -"gUA" = ( -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics) -"gVb" = ( -/obj/machinery/light/broken/directional/east, -/turf/open/floor/plating/elevatorshaft, -/area/awaymission/black_mesa/resonant_chamber) -"gVo" = ( -/obj/structure/railing, -/turf/open/floor/iron/stairs/medium{ - dir = 4 - }, -/area/awaymission/black_mesa/black_ops_button) -"gVv" = ( -/obj/structure/rack/shelf, -/obj/item/ammo_box/magazine/m16, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_armory) -"gVw" = ( -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/lambda_teleporter) -"gWm" = ( -/obj/machinery/light/red{ - dir = 1 - }, -/obj/structure/lattice/catwalk, -/obj/structure/sign/warning/secure_area/directional/north, -/turf/open/floor/plating, -/area/awaymission/black_mesa/genetics_elevator) -"gWB" = ( -/obj/structure/deployable_barricade/metal, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_camp) -"gWF" = ( -/obj/structure/chair/plastic, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"gXc" = ( -/turf/open/floor/circuit, -/area/awaymission/black_mesa/black_ops_button) -"gXX" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"gYK" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 1 - }, -/obj/machinery/light/broken/directional/north, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"gZk" = ( -/obj/effect/baseturf_helper/black_mesa_xen, -/turf/open/floor/vault/alien, -/area/awaymission/black_mesa/xen/nihilanth_arena) -"gZV" = ( -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"hbB" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/water/beach/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"hck" = ( -/obj/structure/inflatable/door{ - color = "#556B2F"; - opacity = 1 - }, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"hcB" = ( -/obj/effect/random_mob_placer/hev_zombie, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"hcD" = ( -/obj/effect/turf_decal/trimline/green/filled/corner, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"hcK" = ( -/obj/structure/chair{ - dir = 8 - }, -/turf/open/floor/carpet/blue, -/area/awaymission/black_mesa/high_security_hallway) -"hde" = ( -/obj/machinery/computer, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"hdA" = ( -/obj/structure/fluff/bus/passable{ - icon_state = "topdoor" - }, -/turf/open/floor/iron/dark/textured_large{ - icon_state = "bus" - }, -/area/awaymission/black_mesa/black_ops_bus) -"hdP" = ( -/obj/structure/server{ - anchored = 1 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"heb" = ( -/obj/structure/table, -/obj/item/paper_bin, -/obj/item/pen/blue, -/obj/structure/sign/clock/directional/west, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"hfc" = ( -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_server) -"hfh" = ( -/obj/effect/mapping_helpers/airlock/locked, -/obj/structure/alien/weeds/xen, -/obj/machinery/door/airlock/science{ - id_tag = "chemiguess" - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_decon_room) -"hfm" = ( -/obj/machinery/autolathe/hacked, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"hfP" = ( -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_hall) -"hfW" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"hgc" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_atrium) -"hgj" = ( -/obj/structure/mineral_door/paperframe, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"hgt" = ( -/obj/machinery/door/airlock/command, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_hall) -"hgE" = ( -/obj/structure/inflatable/door{ - color = "#556B2F"; - opacity = 1 - }, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/mp5_outpost) -"hgG" = ( -/obj/structure/railing/corner, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_decon_room) -"hgL" = ( -/obj/item/ammo_box/magazine/m16/vintage/oldarms, -/turf/open/floor/iron/dark/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"hhL" = ( -/obj/structure/bed/medical/emergency, -/obj/structure/curtain, -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"hhN" = ( -/obj/machinery/light/broken/directional/north, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_decon_room) -"hiT" = ( -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/employee_dorm_room) -"hjj" = ( -/obj/effect/random_mob_placer/security_guard, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"hjl" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_science_room) -"hjs" = ( -/obj/item/taperecorder/empty, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"hjB" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"hjO" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/lambda_teleporter) -"hjV" = ( -/obj/structure/closet/crate/large, -/obj/item/storage/medkit/regular, -/turf/open/floor/plating, -/area/awaymission/black_mesa/science_tunnel) -"hkE" = ( -/obj/structure/closet/crate/secure/weapon, -/obj/effect/turf_decal/bot, -/obj/item/minespawner/explosive, -/obj/item/minespawner/explosive, -/obj/item/minespawner/explosive, -/obj/item/minespawner/explosive, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"hlv" = ( -/obj/structure/filingcabinet/chestdrawer, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/deep_sci_turret) -"hlW" = ( -/obj/structure/lattice/catwalk, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp) -"hmc" = ( -/turf/closed/mineral/black_mesa, -/area/awaymission/black_mesa/high_security_servers) -"hme" = ( -/obj/effect/random_mob_placer/blackops, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_entrance) -"hmF" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/table, -/obj/item/storage/medkit/surgery, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"hnp" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/hecu_zone_bathroom) -"hnC" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_decon_room) -"hok" = ( -/obj/structure/closet/crate/bin, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_hall) -"how" = ( -/obj/machinery/door/airlock/science, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"hpx" = ( -/obj/item/ammo_box/magazine/m50, -/obj/effect/baseturf_helper/black_mesa_xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/village_hallway) -"hqT" = ( -/obj/effect/random_mob_placer/vortigaunt_hostile, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"hrk" = ( -/obj/structure/blob/normal, -/turf/open/floor/engine, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"hrI" = ( -/obj/structure/rack/shelf, -/obj/machinery/light/cold, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"hrO" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/black_ops_entrance) -"hrR" = ( -/obj/machinery/door/airlock/multi_tile/metal{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_entrance) -"hrW" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"htb" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/locked, -/obj/structure/barricade/wooden/crude, -/turf/open/floor/plating, -/area/awaymission/black_mesa/hecu_zone_bathroom) -"hti" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"hvZ" = ( -/obj/machinery/medical_kiosk, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"hwN" = ( -/obj/machinery/door/airlock, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/dark/textured, -/area/awaymission/black_mesa/hecu_zone_bathroom) -"hwQ" = ( -/turf/open/floor/iron/stairs/medium, -/area/awaymission/black_mesa/resonant_chamber) -"hyv" = ( -/obj/structure/chair{ - dir = 1 - }, -/turf/open/floor/carpet/blue, -/area/awaymission/black_mesa/high_security_hallway) -"hyT" = ( -/obj/item/clothing/mask/facehugger/dead, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_surgery) -"hzh" = ( -/obj/structure/bed/medical/emergency, -/obj/structure/curtain, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"hzj" = ( -/obj/structure/bed/medical/emergency, -/obj/structure/curtain, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"hzB" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/black_ops_server) -"hzE" = ( -/obj/structure/table, -/obj/item/storage/pill_bottle/mining, -/obj/item/storage/pill_bottle/mining, -/obj/item/storage/pill_bottle/epinephrine, -/obj/item/storage/pill_bottle/iron, -/obj/item/storage/pill_bottle/iron, -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"hzF" = ( -/obj/structure/rack/shelf, -/obj/item/gun/ballistic/automatic/m16, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_external_sec) -"hAa" = ( -/obj/structure/deployable_barricade/metal{ - dir = 4 - }, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp) -"hAz" = ( -/obj/machinery/computer{ - dir = 4 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_entrance) -"hAE" = ( -/obj/structure/lattice/catwalk, -/obj/effect/random_mob_placer/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/science_internal) -"hAH" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance_large_office) -"hAS" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"hBp" = ( -/mob/living/simple_animal/hostile/blackmesa/sec/ranged, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/high_security_sec_point) -"hBz" = ( -/obj/effect/spawner/random/bioluminescent_plant/weak, -/turf/open/water/beach/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"hCD" = ( -/obj/machinery/light/broken/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"hCW" = ( -/obj/structure/deployable_barricade/metal{ - dir = 1 - }, -/obj/structure/deployable_barricade/metal{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"hDu" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 1 - }, -/area/awaymission/black_mesa/xen/lost_camp_hallway) -"hEr" = ( -/obj/item/radio/intercom/directional/west, -/obj/effect/mob_spawn/ghost_role/human/black_mesa/hecu/leader, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"hEH" = ( -/obj/machinery/light/cold/directional/north, -/obj/effect/turf_decal/siding/dark_green{ - dir = 1 - }, -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"hFW" = ( -/obj/effect/spawner/random/vending/snackvend, -/turf/open/floor/carpet/blue, -/area/awaymission/black_mesa/high_security_servers) -"hGC" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/obj/structure/xen_pylon, -/turf/open/water/jungle, -/area/awaymission/black_mesa/resonant_chamber) -"hGV" = ( -/obj/structure/rack/shelf, -/obj/item/gun/ballistic/automatic/sol_rifle, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"hHb" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/machinery/deepfryer, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"hHC" = ( -/obj/structure/table, -/obj/item/kitchen/fork/plastic, -/obj/item/kitchen/fork/plastic, -/obj/item/kitchen/fork/plastic, -/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/kitchen/spoon/plastic, -/obj/item/kitchen/spoon/plastic, -/obj/item/kitchen/spoon/plastic, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"hIA" = ( -/obj/structure/table, -/obj/machinery/coffeemaker, -/obj/item/coffee_cartridge/fancy, -/obj/item/coffee_cartridge/fancy, -/obj/item/coffee_cartridge/fancy, -/obj/item/coffee_cartridge/fancy, -/obj/item/coffee_cartridge/fancy, -/obj/item/coffee_cartridge/fancy, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"hJN" = ( -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_internal_hall) -"hKg" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/light/dim/directional/east, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake) -"hKE" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"hMp" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/glass/mug/tea{ - pixel_x = 4; - pixel_y = 2 - }, -/obj/item/knife/plastic, -/obj/effect/spawner/random/food_or_drink/three_course_meal, -/obj/effect/turf_decal/tile/green/fourcorners, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_internal_hall) -"hMr" = ( -/obj/structure/bed, -/obj/item/bedsheet/patriot, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"hMD" = ( -/obj/structure/closet/crate/secure/weapon, -/obj/item/stack/sheet/mineral/sandbags/fifty, -/obj/item/stack/sheet/mineral/sandbags/fifty, -/obj/item/trench_tool, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"hMF" = ( -/obj/structure/spacevine, -/obj/effect/random_mob_placer/xen, -/turf/open/floor/engine, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"hMI" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"hNg" = ( -/obj/item/clothing/accessory/armband/engine, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"hNG" = ( -/obj/effect/decal/remains/human, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"hOw" = ( -/obj/structure/bonfire/prelit, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"hOI" = ( -/obj/effect/spawner/random/medical/two_percent_xeno_egg_spawner, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_surgery) -"hOT" = ( -/obj/structure/mineral_door/paperframe, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"hQb" = ( -/obj/machinery/light/cold/directional/west, -/obj/structure/closet/crate/large, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_feesh) -"hQI" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/obj/structure/barricade/sandbags, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"hQK" = ( -/turf/open/misc/beach/coastline_t/sandwater_inner/xen{ - dir = 4 - }, -/area/awaymission/black_mesa/xen/entering_zone) -"hRb" = ( -/obj/structure/cable, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_camp) -"hRF" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"hRT" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"hUa" = ( -/obj/machinery/door/airlock/wood/glass, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"hUd" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/engine, -/area/awaymission/black_mesa/lambda_teleporter) -"hVO" = ( -/obj/machinery/door/airlock/silver/glass, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"hWb" = ( -/obj/structure/tank_holder/anesthetic, -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"hXN" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, -/obj/structure/closet/secure_closet/freezer/fridge/all_access, -/obj/item/reagent_containers/condiment/milk, -/obj/item/reagent_containers/condiment/milk, -/obj/item/storage/box/ingredients/american, -/obj/item/storage/box/ingredients/american, -/obj/item/storage/box/ingredients/american, -/obj/item/storage/box/ingredients/american, -/obj/item/storage/fancy/nugget_box, -/obj/item/storage/fancy/nugget_box, -/obj/item/storage/fancy/nugget_box, -/obj/item/storage/fancy/nugget_box, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"hYc" = ( -/obj/structure/flora/biolumi/lamp/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_decon_room) -"hZg" = ( -/turf/open/misc/beach/coastline_b/xen{ - dir = 6 - }, -/area/awaymission/black_mesa/xen/entering_zone) -"ian" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"iar" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/barricade/wooden/crude, -/turf/open/floor/plating, -/area/awaymission/black_mesa/hecu_zone_atrium) -"icX" = ( -/obj/structure/sign/warning/test_chamber, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/deep_sci_hall) -"icZ" = ( -/obj/machinery/door/airlock/security{ - name = "Brig"; - req_access = list("brig_entrance") - }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_external_sec) -"idt" = ( -/obj/effect/gibspawner/human/bodypartless, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"idC" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/lambda_teleporter) -"ieX" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"ifq" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/obj/effect/gibspawner/human/bodypartless, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"igt" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/high_security_surgery) -"igz" = ( -/obj/structure/railing, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_decon_room) -"iiA" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"ijR" = ( -/obj/effect/gibspawner/human, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/dark/textured, -/area/awaymission/black_mesa/hecu_zone_bathroom) -"ijT" = ( -/obj/structure/water_source/puddle, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"ijX" = ( -/obj/structure/table, -/obj/item/fuel_pellet/exotic, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"iki" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/item/clothing/shoes/combat/swat, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"iku" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/hecu_zone_tunnel) -"ikU" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_atrium) -"imi" = ( -/obj/structure/spacevine/xen/thick, -/obj/structure/sign/warning/biohazard, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp_hallway) -"ipj" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"ipk" = ( -/obj/structure/flora/biolumi/flower/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"ipp" = ( -/obj/structure/closet/crate/bin, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_atrium) -"iqc" = ( -/obj/machinery/light/warm/directional/west, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"iqd" = ( -/obj/machinery/light/cold/directional/west, -/obj/structure/bed/medical/emergency, -/obj/structure/curtain, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"iqp" = ( -/obj/machinery/light/broken/directional/west, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/resonant_chamber) -"iqQ" = ( -/obj/effect/spawner/random/bioluminescent_plant, -/turf/open/water/xen_acid, -/area/awaymission/black_mesa/xen/acid_lake) -"iro" = ( -/obj/structure/lattice/catwalk, -/turf/open/water/xen_acid, -/area/awaymission/black_mesa/xen/acid_lake_building) -"irD" = ( -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"irU" = ( -/obj/effect/decal/remains/human, -/turf/open/water/xen_acid, -/area/awaymission/black_mesa/xen/acid_lake) -"isf" = ( -/turf/open/floor/carpet/blue, -/area/awaymission/black_mesa/high_security_hallway) -"ish" = ( -/obj/machinery/light/broken/directional/west, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics) -"isv" = ( -/obj/structure/fence/corner{ - dir = 8 - }, -/obj/effect/spawner/liquids_spawner, -/turf/open/floor/iron/pool, -/area/awaymission/black_mesa/deep_sci_feesh) -"isX" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/to_cryo_room) -"itz" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/high_security_surgery) -"ium" = ( -/obj/machinery/light/cold/directional/west, -/obj/machinery/autolathe/hacked, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"iux" = ( -/obj/structure/closet/crate/large, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_science_room) -"iuT" = ( -/obj/machinery/light/broken/directional/north, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/scientist_hall) -"ivb" = ( -/obj/machinery/armament_station/hecu, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"ivf" = ( -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_button) -"ivk" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/employee_dorm_room) -"ivz" = ( -/obj/structure/closet/crate/bin, -/obj/item/ammo_box/a357, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_hallway) -"ivQ" = ( -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/structure/chair/sofa/bench/right{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"ixj" = ( -/obj/structure/bed/medical/emergency, -/obj/structure/curtain, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"iyb" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/obj/structure/table, -/obj/item/instrument/guitar, -/obj/item/toy/cards/deck, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"izk" = ( -/obj/machinery/porta_turret/black_mesa/heavy, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"izl" = ( -/turf/open/floor/iron/stairs/right{ - dir = 1 - }, -/area/awaymission/black_mesa/resonant_chamber) -"izv" = ( -/obj/machinery/light/broken/directional/west, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"iAn" = ( -/obj/machinery/light/dim/directional/east, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"iBo" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/cryo_storage) -"iCa" = ( -/obj/structure/deployable_barricade/metal/plasteel{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"iCk" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/turf/open/floor/engine, -/area/awaymission/black_mesa/high_security_emitter) -"iCN" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_hall) -"iDr" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/light/broken/directional/north, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"iDF" = ( -/obj/structure/extinguisher_cabinet/directional/south, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"iDH" = ( -/obj/machinery/light/cold, -/obj/structure/closet/crate/freezer/blood, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"iEr" = ( -/obj/effect/random_mob_placer/xen, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/scientist_hall) -"iEE" = ( -/obj/structure/deployable_barricade/metal{ - dir = 1 - }, -/obj/structure/deployable_barricade/metal{ - dir = 4 - }, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"iFx" = ( -/obj/structure/deployable_barricade/metal{ - dir = 8 - }, -/obj/structure/deployable_barricade/metal, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"iFR" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/high_security_surgery) -"iHm" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/obj/effect/gibspawner/human, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_entrance) -"iHF" = ( -/obj/machinery/light/cold/directional/west, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"iHL" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_external_sec) -"iIk" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 8 - }, -/obj/structure/alien/weeds/xen, -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"iIH" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/turf_decal/bot_red, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"iIS" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"iJu" = ( -/obj/item/storage/medkit/tactical, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"iJL" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/entrance_internal_hall) -"iKp" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_hallway) -"iKG" = ( -/obj/structure/chair/office, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"iLb" = ( -/obj/structure/lattice/catwalk, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance_internal_hall) -"iMP" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_labs) -"iNa" = ( -/obj/machinery/light/cold, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/black_ops_bus) -"iNt" = ( -/obj/structure/table, -/obj/effect/spawner/random/decoration/glowstick, -/obj/effect/spawner/random/decoration/glowstick, -/obj/effect/spawner/random/decoration/glowstick, -/obj/effect/spawner/random/decoration/glowstick, -/obj/effect/spawner/random/decoration/glowstick, -/obj/effect/spawner/random/decoration/glowstick, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"iOl" = ( -/obj/effect/baseturf_helper/black_mesa_xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"iOR" = ( -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"iPM" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"iRk" = ( -/obj/item/reagent_containers/condiment/cornmeal, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_atrium) -"iRJ" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing, -/turf/open/floor/engine, -/area/awaymission/black_mesa/xen/entering_zone) -"iTd" = ( -/obj/structure/table, -/obj/item/scalpel/alien, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/high_security_surgery) -"iUZ" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/locked, -/obj/structure/barricade/wooden/crude, -/turf/open/floor/plating, -/area/awaymission/black_mesa/hecu_zone_tunnel) -"iVz" = ( -/obj/structure/table/optable, -/obj/effect/gibspawner/xeno, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/high_security_surgery) -"iVC" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"iWf" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_armory) -"iWr" = ( -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/scientist_hall) -"iWy" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/lambda_hallway) -"iWI" = ( -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/resonant_chamber) -"iXz" = ( -/obj/machinery/light/small/red/directional/north, -/turf/open/floor/plating, -/area/awaymission/black_mesa/hecu_zone_tunnel) -"iXA" = ( -/obj/structure/table, -/obj/item/fireaxe/metal_h2_axe, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/high_security_surgery) -"iXD" = ( -/obj/structure/lattice/catwalk, -/turf/open/floor/plating, -/area/awaymission/black_mesa/science_labs) -"iYk" = ( -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"iYm" = ( -/obj/effect/bump_teleporter/lambda{ - id = "lambda_teleporter"; - id_target = "lambda_destination" - }, -/turf/open/floor/engine, -/area/awaymission/black_mesa/lambda_teleporter) -"iYx" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"iYC" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 9 - }, -/obj/structure/marker_beacon/burgundy, -/turf/open/floor/engine, -/area/awaymission/black_mesa/xen/entering_zone) -"iYD" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/table, -/obj/item/stack/ore/bluespace_crystal, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"iZb" = ( -/turf/open/misc/beach/coastline_b/xen{ - dir = 8 - }, -/area/awaymission/black_mesa/xen/entering_zone) -"iZm" = ( -/obj/machinery/door/airlock/multi_tile/public/glass, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"iZn" = ( -/obj/item/ammo_casing/shotgun/buckshot, -/obj/structure/sign/flag/usa/directional/south, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"iZK" = ( -/obj/structure/closet/crate/bin, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"iZO" = ( -/obj/structure/table, -/obj/machinery/light/cold/directional/east, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/machinery/chem_dispenser/drinks, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"jaA" = ( -/obj/structure/sign/warning/no_smoking/circle/directional/north, -/obj/structure/flora/biolumi/lamp/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"jaW" = ( -/obj/structure/alien/weeds/node, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"jbe" = ( -/obj/effect/turf_decal/trimline/green/filled/corner, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"jbL" = ( -/obj/structure/xen_pylon, -/turf/open/floor/engine, -/area/awaymission/black_mesa/lambda_teleporter) -"jdg" = ( -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/structure/chair/sofa/bench/left{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"jdh" = ( -/turf/closed/wall/mineral/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"jdk" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/equipment_room) -"jdo" = ( -/obj/item/taperecorder/empty, -/turf/open/floor/iron/dark/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"jdz" = ( -/obj/machinery/door/airlock/multi_tile/metal, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_hallway_two) -"jdE" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/genetics_elevator) -"jej" = ( -/obj/structure/table/wood, -/obj/item/food/meat/slab/human/mutant/lizard, -/obj/item/food/meat/slab/human/mutant/lizard, -/obj/item/storage/box/hecu_rations, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"jem" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/scientist_hall) -"jev" = ( -/obj/structure/spacevine/xen/thick, -/obj/effect/baseturf_helper/black_mesa_xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/crowbar_nook) -"jeC" = ( -/obj/effect/mob_spawn/corpse/human/hecu_zombie, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_hallway) -"jfm" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_camp) -"jfP" = ( -/obj/structure/bed/medical/emergency, -/obj/structure/curtain, -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"jgy" = ( -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/lambda_hallway) -"jgU" = ( -/obj/structure/table, -/obj/item/paper, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_decon_room) -"jhT" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/high_security_hallway) -"jiL" = ( -/obj/machinery/light/broken/directional/west, -/obj/structure/flora/biolumi/flower/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/scientist_hall) -"jjg" = ( -/obj/machinery/door/airlock/multi_tile/public/glass, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/scientist_hall) -"jjC" = ( -/obj/structure/table, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"jkg" = ( -/obj/structure/table, -/obj/machinery/computer/records/medical/laptop, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"jki" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"jkj" = ( -/obj/item/gun/energy/recharge/ebow/large, -/obj/effect/spawner/liquids_spawner, -/turf/open/floor/iron/pool, -/area/awaymission/black_mesa/deep_sci_feesh) -"jlI" = ( -/obj/structure/rack/shelf, -/obj/item/assembly/signaler, -/obj/item/assembly/signaler, -/obj/item/assembly/signaler, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/high_security_sec_point) -"jmc" = ( -/obj/structure/sign/poster/random/directional/north, -/obj/effect/spawner/random/vending/colavend, -/obj/effect/turf_decal/siding/blue{ - dir = 1 - }, -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"jml" = ( -/turf/closed/wall, -/area/awaymission/black_mesa/equipment_room) -"jmM" = ( -/obj/structure/table, -/obj/item/folder/red, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"jnr" = ( -/obj/machinery/computer{ - dir = 1 - }, -/obj/machinery/light/cold, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"jnZ" = ( -/obj/machinery/suit_storage_unit/engine, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"jpF" = ( -/obj/structure/closet/secure_closet/engineering_personal, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"jpM" = ( -/obj/structure/rack/shelf, -/obj/item/ammo_box/magazine/mp5, -/obj/item/ammo_box/magazine/mp5, -/obj/item/ammo_box/magazine/mp5, -/obj/item/ammo_box/magazine/mp5, -/obj/item/ammo_box/magazine/mp5, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_armory) -"jpR" = ( -/obj/machinery/light/small/red/directional/north, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/plating, -/area/awaymission/black_mesa/hecu_zone_tunnel) -"jqU" = ( -/obj/machinery/light/broken, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"jrc" = ( -/obj/structure/lattice/catwalk, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/light/cold, -/turf/open/floor/plating, -/area/awaymission/black_mesa/scientist_hall) -"jrv" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 1 - }, -/turf/open/floor/carpet/blue, -/area/awaymission/black_mesa/high_security_servers) -"jrz" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/engine, -/area/awaymission/black_mesa/xen/entering_zone) -"jrH" = ( -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/deep_sci_turret) -"jsS" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/dorm_computers) -"jte" = ( -/obj/machinery/door/airlock/vault, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"jts" = ( -/obj/structure/table, -/obj/item/extinguisher, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics) -"jtA" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"jtF" = ( -/obj/structure/deployable_barricade/metal/plasteel{ - dir = 1 - }, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_camp) -"jtW" = ( -/obj/item/storage/backpack/duffelbag/sec/surgery, -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"juh" = ( -/obj/structure/table, -/obj/item/paper, -/obj/item/pen, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"juA" = ( -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_server) -"jvn" = ( -/obj/structure/rack/shelf, -/obj/item/reagent_containers/hypospray/medipen/stimpack/traitor, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_armory) -"jvJ" = ( -/obj/structure/rack, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/gun_maintenance_supplies, -/obj/item/gun_maintenance_supplies, -/obj/item/gun_maintenance_supplies, -/obj/item/gun_maintenance_supplies, -/obj/item/gun_maintenance_supplies, -/obj/item/stack/sheet/cloth/ten, -/obj/item/stack/sheet/cloth/ten, -/obj/item/door_seal, -/obj/item/door_seal, -/obj/item/door_seal, -/obj/item/door_seal, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"jwD" = ( -/obj/machinery/porta_turret/black_mesa, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"jwP" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"jxo" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/scientist_hall) -"jxt" = ( -/obj/structure/closet/crate/bin, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"jyc" = ( -/obj/structure/fluff/bus/dense{ - icon_state = "frontwallbottom" - }, -/turf/open/floor/iron/dark/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"jym" = ( -/obj/machinery/power/emitter/energycannon, -/obj/structure/lattice/catwalk, -/turf/open/floor/engine, -/area/awaymission/black_mesa/lambda_teleporter) -"jyF" = ( -/obj/structure/lattice/catwalk, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/power/emitter/energycannon, -/turf/open/floor/plating, -/area/awaymission/black_mesa/scientist_hall) -"jyG" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"jzg" = ( -/turf/closed/indestructible/riveted/boss, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"jzY" = ( -/obj/structure/flora/biolumi/mine/weaklight, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/resonant_chamber) -"jBe" = ( -/obj/machinery/door/airlock/security{ - name = "Brig"; - req_access = list("brig_entrance") - }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/gas_emitter_chamber) -"jBA" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 4 - }, -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/genetics_elevator) -"jBE" = ( -/turf/closed/mineral/black_mesa, -/area/awaymission/black_mesa/deep_sci_hall) -"jBF" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 9 - }, -/obj/structure/flora/biolumi/mine/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"jBR" = ( -/obj/machinery/door/airlock/vault, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_external_sec) -"jCy" = ( -/obj/structure/lattice/catwalk, -/turf/open/floor/plating, -/area/awaymission/black_mesa/black_ops_turret_blockade) -"jCL" = ( -/obj/item/tape/ruins/black_mesa/first_eas, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"jCM" = ( -/obj/structure/lattice/catwalk, -/obj/structure/marker_beacon/burgundy, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"jDi" = ( -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/black_ops_bus) -"jDN" = ( -/obj/structure/closet/crate/bin, -/obj/item/pen, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"jEk" = ( -/obj/machinery/light/broken/directional/west, -/obj/machinery/destructive_scanner, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"jEM" = ( -/obj/machinery/door/airlock/multi_tile/metal{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"jFH" = ( -/obj/item/storage/barricade, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_armory) -"jHi" = ( -/obj/structure/rack, -/obj/item/storage/box/ammo_box, -/obj/item/storage/box/ammo_box, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"jHm" = ( -/obj/structure/window/spawner/directional/north, -/obj/structure/server{ - anchored = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"jHV" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"jIb" = ( -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_button) -"jIt" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/high_security_surgery) -"jIz" = ( -/obj/structure/xen_pylon, -/turf/open/water/xen_acid, -/area/awaymission/black_mesa/xen/acid_lake) -"jJB" = ( -/obj/structure/server{ - anchored = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_external_sec) -"jJJ" = ( -/obj/effect/mob_spawn/corpse/human/engineer, -/turf/open/floor/plating, -/area/awaymission/black_mesa/science_tunnel) -"jLg" = ( -/obj/structure/alien/weeds/xen, -/obj/machinery/computer, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/scientist_hall) -"jLK" = ( -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/high_security_surgery) -"jMn" = ( -/obj/effect/turf_decal/tile/green/half/contrasted, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_internal_hall) -"jME" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_entrance) -"jOy" = ( -/obj/machinery/computer{ - dir = 1 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"jOA" = ( -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"jOY" = ( -/obj/structure/closet/crate/bin, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/carpet/blue, -/area/awaymission/black_mesa/high_security_hallway) -"jPD" = ( -/obj/effect/mob_spawn/corpse/human/hecu_zombie, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_entrance) -"jQm" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"jQp" = ( -/obj/structure/showcase/machinery/tv, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"jQR" = ( -/obj/structure/flora/biolumi/flower/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/scientist_hall) -"jRk" = ( -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"jRH" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/obj/machinery/light/broken, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"jRP" = ( -/obj/machinery/field/generator/anchored, -/obj/structure/cable, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp) -"jSt" = ( -/obj/structure/fluff/bus/passable, -/obj/item/food/meatball, -/turf/open/floor/iron/dark/textured_large{ - icon_state = "bus" - }, -/area/awaymission/black_mesa/black_ops_bus) -"jSB" = ( -/obj/structure/sign/flag/terragov/directional/south, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"jST" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 8 - }, -/area/awaymission/black_mesa/xen/lost_camp_hallway) -"jUb" = ( -/obj/machinery/light/cold/directional/north, -/obj/machinery/chem_master, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"jUD" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_surgery) -"jVn" = ( -/obj/machinery/power/port_gen/pacman, -/obj/structure/cable, -/obj/item/stack/sheet/mineral/plasma/thirty, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"jVF" = ( -/obj/structure/table, -/obj/item/folder/blue, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"jVK" = ( -/obj/machinery/door/airlock/multi_tile/metal, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_hall) -"jWj" = ( -/obj/item/gun/ballistic/automatic/pistol/deagle/gold, -/obj/item/ammo_box/magazine/m50, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/village_hallway) -"jYa" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"jYx" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/black_ops_hallway_two) -"jYN" = ( -/obj/structure/table, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"jZi" = ( -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/siding/blue{ - dir = 1 - }, -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"jZF" = ( -/obj/machinery/door/puzzle/keycard/yellow_required, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/equipment_room) -"kai" = ( -/obj/structure/table, -/obj/machinery/button/door{ - id = "teleporter_catwalk"; - name = "Teleporter Catwalk Control" - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/lambda_teleporter) -"kam" = ( -/obj/machinery/light/cold/directional/east, -/obj/structure/chair/office, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics_sec) -"kbC" = ( -/obj/machinery/light/cold, -/obj/effect/spawner/random/trash/food_packaging, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"kbW" = ( -/obj/structure/rack/shelf, -/obj/item/grenade/c4, -/obj/item/grenade/c4, -/obj/item/grenade/c4, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/high_security_sec_point) -"kcn" = ( -/turf/open/misc/beach/coastline_t/sandwater_inner/xen{ - dir = 8 - }, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"kda" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 5 - }, -/turf/open/floor/engine, -/area/awaymission/black_mesa/lambda_teleporter) -"kdx" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 10 - }, -/area/awaymission/black_mesa/xen/lost_camp_hallway) -"kdM" = ( -/obj/structure/fluff/bus/dense, -/turf/open/floor/iron/dark/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"kee" = ( -/obj/structure/cable, -/obj/item/wrench, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"keM" = ( -/obj/structure/closet/wardrobe, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/dark/textured, -/area/awaymission/black_mesa/hecu_zone_bathroom) -"keP" = ( -/obj/effect/random_mob_placer/xen, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/equipment_room) -"kfF" = ( -/turf/closed/wall, -/area/awaymission/black_mesa/science_labs) -"kfR" = ( -/obj/machinery/hypnochair, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"khd" = ( -/obj/structure/table, -/obj/item/tape/ruins/black_mesa/second_eas, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"khl" = ( -/obj/machinery/computer, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/dorm_computers) -"kht" = ( -/obj/structure/cable, -/obj/structure/table, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"khy" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/obj/structure/curtain/cloth{ - color = "#556B2F" - }, -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"khG" = ( -/obj/machinery/door/airlock/multi_tile/public/glass, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_labs) -"khU" = ( -/obj/item/storage/box/hecu_rations, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"kjx" = ( -/obj/structure/table, -/obj/item/reagent_containers/hypospray/medipen/blood_loss, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"kjy" = ( -/obj/effect/spawner/random/vending/colavend, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"kjS" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_decon_room) -"kkK" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/obj/item/resonator/upgraded, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"klO" = ( -/obj/effect/turf_decal/stripes, -/obj/structure/table, -/obj/item/modular_computer/laptop/preset/civilian, -/obj/item/camera, -/obj/item/storage/photo_album, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"kmE" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"kni" = ( -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"kop" = ( -/obj/structure/spacevine/xen/thick, -/obj/effect/random_mob_placer/xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"kor" = ( -/obj/machinery/light/cold/directional/west, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/high_security_surgery) -"koR" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"kqp" = ( -/obj/structure/water_source/puddle/healing, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake) -"kqy" = ( -/obj/structure/closet/crate/large, -/obj/item/minespawner/explosive, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_feesh) -"krt" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 4 - }, -/obj/machinery/light/cold/directional/east, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"ksv" = ( -/obj/structure/inflatable{ - color = "#556B2F"; - opacity = 1 - }, -/obj/structure/sign/warning/biohazard, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp) -"kuR" = ( -/obj/structure/chair/sofa/bench{ - dir = 1 - }, -/obj/machinery/light/cold, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"kvc" = ( -/obj/structure/cable, -/obj/effect/decal/remains/human, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"kvl" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/scientist_hall) -"kvq" = ( -/turf/open/misc/beach/coastline_t/sandwater_inner/xen{ - dir = 1 - }, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"kwe" = ( -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"kwr" = ( -/obj/effect/turf_decal/trimline/green/filled/corner{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"kwF" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/obj/structure/chair/sofa/bench/right{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"kxa" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/obj/effect/random_mob_placer/scientist_zombie, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"kxo" = ( -/obj/structure/table, -/obj/item/storage/box/medipens/utility, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"kyP" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/entrance_large_office) -"kyZ" = ( -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_decon_room) -"kzW" = ( -/obj/structure/rack/shelf, -/obj/item/storage/medkit/advanced, -/obj/item/storage/medkit/advanced, -/obj/item/storage/medkit/advanced, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_armory) -"kAr" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"kAK" = ( -/obj/effect/turf_decal/stripes, -/obj/structure/server{ - anchored = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/black_ops_server) -"kAS" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 8 - }, -/obj/machinery/light/cold/directional/west, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"kAW" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/beaker/large, -/obj/item/reagent_containers/cup/beaker/large, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"kBh" = ( -/obj/machinery/light/cold, -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"kBo" = ( -/obj/structure/table, -/obj/machinery/button/door{ - id = "teleporter"; - name = "Teleporter Access Control" - }, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_button) -"kBT" = ( -/obj/structure/table, -/obj/item/ammo_box/magazine/mp5, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"kBZ" = ( -/obj/structure/curtain/cloth, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"kCw" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_turret_blockade) -"kDp" = ( -/obj/effect/random_mob_placer/vortigaunt, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"kDI" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_feesh) -"kGj" = ( -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 10 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/genetics_elevator) -"kGn" = ( -/obj/structure/spacevine, -/obj/item/armament_points_card, -/turf/open/floor/engine, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"kHS" = ( -/obj/effect/spawner/random/bioluminescent_plant/weak, -/turf/open/misc/beach/coastline_t/xen{ - dir = 6 - }, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"kJN" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 4 - }, -/obj/machinery/light/broken/directional/east, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"kJQ" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/obj/structure/marker_beacon/burgundy, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"kJS" = ( -/obj/structure/chair/office, -/obj/machinery/light/cold/directional/north, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"kJZ" = ( -/obj/structure/chair/plastic{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"kKb" = ( -/obj/structure/table, -/obj/item/gun/energy/laser/thermal/inferno, -/obj/item/gun/energy/laser/thermal/cryo, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/deep_sci_turret) -"kLe" = ( -/obj/machinery/door/airlock/multi_tile/public/glass, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"kLj" = ( -/turf/open/floor/iron/stairs/medium{ - dir = 4 - }, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"kMw" = ( -/mob/living/simple_animal/hostile/blackmesa/sec/ranged, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"kNj" = ( -/obj/structure/fluff/bus/dense{ - icon_state = "fronttire" - }, -/turf/open/floor/iron/dark/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"kOl" = ( -/obj/structure/table, -/obj/item/folder/red, -/obj/item/knife/combat/marksman, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/dorm_computers) -"kPC" = ( -/obj/effect/random_mob_placer/xen/zombie, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/dark/textured, -/area/awaymission/black_mesa/hecu_zone_bathroom) -"kQc" = ( -/obj/structure/closet/crate/bin, -/obj/item/knife/combat/marksman, -/turf/open/floor/carpet/blue, -/area/awaymission/black_mesa/high_security_hallway) -"kQo" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/lambda_hallway) -"kQp" = ( -/obj/machinery/iv_drip, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"kRe" = ( -/obj/machinery/door/airlock/science/glass, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/high_security_surgery) -"kRl" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"kRp" = ( -/obj/machinery/door/window/brigdoor/security{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"kRK" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/door/window/left/directional/east, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"kRR" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics) -"kSw" = ( -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/awaymission/black_mesa/entrance_internal_hall) -"kSA" = ( -/obj/effect/turf_decal/siding/dark_green{ - dir = 9 - }, -/obj/structure/closet/secure_closet/medical3{ - req_access = null - }, -/turf/open/floor/iron/textured_corner, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"kSV" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/deep_sci_turret) -"kTL" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/lambda_teleporter) -"kUo" = ( -/turf/open/chasm{ - planetary_atmos = 1 - }, -/area/awaymission/black_mesa/deep_sci_turret) -"kVj" = ( -/obj/machinery/door/airlock/science{ - id_tag = "chemiguess" - }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"kWg" = ( -/obj/structure/railing, -/obj/structure/marker_beacon/burgundy, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_camp) -"kWq" = ( -/obj/item/radio{ - icon_state = "radio"; - name = "old radio"; - pixel_y = 26 - }, -/obj/structure/table, -/obj/item/reagent_containers/cup/glass/bottle/beer/almost_empty{ - pixel_x = 8; - pixel_y = 3 - }, -/obj/item/food/chips/shrimp, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"kWF" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/genetics_sec) -"kWX" = ( -/mob/living/simple_animal/hostile/blackmesa/xen/bullsquid, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake) -"kXt" = ( -/obj/structure/window/reinforced/unanchored/spawner/directional/north, -/obj/structure/table, -/obj/machinery/light/directional/east{ - dir = 8 - }, -/obj/item/radio/off{ - pixel_x = -11; - pixel_y = -3 - }, -/obj/machinery/recharger{ - pixel_y = 4 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"kXJ" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"kXN" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"kXX" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/entrance_lobby) -"kYb" = ( -/obj/structure/marker_beacon/burgundy, -/obj/structure/cable, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"kYz" = ( -/obj/structure/inflatable{ - color = "#556B2F"; - opacity = 1 - }, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp) -"kZh" = ( -/turf/closed/indestructible/rock/xen, -/area/awaymission/black_mesa/xen/mp5_outpost) -"kZC" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics) -"kZK" = ( -/obj/machinery/door_buttons/airlock_controller{ - name = "Elevator Button"; - pixel_x = -23 - }, -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/scientist_hall) -"kZT" = ( -/obj/structure/sign/warning/radiation, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/science_labs) -"kZX" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/hecu_zone_atrium) -"law" = ( -/obj/structure/bed, -/obj/item/bedsheet/patriot, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"lbg" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_armory) -"lbk" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"lbD" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"lbN" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"lbQ" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/structure/liquid_pump, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_button) -"lcg" = ( -/obj/machinery/light/broken/directional/north, -/obj/structure/sign/warning/no_smoking/circle/directional/north, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/scientist_hall) -"lcM" = ( -/obj/machinery/iv_drip, -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"ldC" = ( -/mob/living/basic/blob_minion/blobbernaut, -/obj/structure/blob/normal, -/turf/open/floor/engine, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"ldR" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"lew" = ( -/obj/machinery/light/small/red/directional/west, -/turf/open/floor/plating, -/area/awaymission/black_mesa/hecu_zone_tunnel) -"leN" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_emitter) -"lfq" = ( -/obj/effect/random_mob_placer/vortigaunt_hostile, -/turf/open/floor/engine, -/area/awaymission/black_mesa/lambda_teleporter) -"lfO" = ( -/obj/structure/cable, -/obj/machinery/power/floodlight{ - anchored = 1 - }, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"lgz" = ( -/obj/structure/sign/warning/no_smoking/circle/directional/north, -/obj/item/storage/fancy/cigarettes/cigpack_uplift{ - pixel_x = 13; - pixel_y = -3 - }, -/obj/structure/table, -/obj/machinery/reagentgrinder, -/obj/item/lighter{ - pixel_x = 11; - pixel_y = 7 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"lit" = ( -/obj/structure/flora/biolumi/flower/weaklight, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/resonant_chamber) -"liZ" = ( -/obj/structure/chair/office, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"ljd" = ( -/obj/effect/random_mob_placer/blackops, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"ljQ" = ( -/obj/structure/closet/crate, -/obj/structure/alien/weeds/xen, -/obj/item/gun_maintenance_supplies, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"lkr" = ( -/obj/structure/lattice/catwalk, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/power/emitter/energycannon{ - dir = 1 - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa/scientist_hall) -"lkt" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/lambda_teleporter) -"lkz" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/misc/beach/coastline_t/xen{ - dir = 8 - }, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"lkE" = ( -/obj/effect/random_mob_placer/xen, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"lkV" = ( -/obj/structure/table, -/obj/item/restraints/handcuffs/alien, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/high_security_surgery) -"llZ" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 9 - }, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"lmJ" = ( -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"lnj" = ( -/obj/machinery/light/cold, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"lnD" = ( -/obj/structure/flora/biolumi/lamp/weaklight{ - pixel_x = -12; - pixel_y = 11 - }, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/black_ops_science_room) -"loc" = ( -/obj/structure/alien/weeds/xen, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"loj" = ( -/obj/effect/turf_decal/stripes, -/obj/structure/closet/crate/bin, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"loR" = ( -/obj/machinery/light/cold/directional/east, -/obj/structure/reagent_dispensers/water_cooler, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"loZ" = ( -/obj/structure/railing, -/turf/open/floor/circuit, -/area/awaymission/black_mesa/lambda_teleporter) -"lpg" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"lpp" = ( -/obj/machinery/computer, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_decon_room) -"lpw" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/high_security_hallway) -"lqU" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance_tunnel) -"lrF" = ( -/obj/effect/mob_spawn/corpse/human/hecu_zombie, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"lrH" = ( -/obj/effect/mob_spawn/corpse/human/hecu_zombie, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"lti" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_science_room) -"ltE" = ( -/obj/item/ammo_box/magazine/recharge/marksman, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"ltG" = ( -/turf/open/floor/iron/dark/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"lup" = ( -/obj/machinery/destructive_scanner, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"lwG" = ( -/obj/structure/closet/crate/large, -/turf/open/floor/plating, -/area/awaymission/black_mesa/science_tunnel) -"lwZ" = ( -/obj/structure/bed/maint, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"lxb" = ( -/obj/structure/fence/door, -/turf/open/floor/plating, -/area/awaymission/black_mesa/dorm_tunnel) -"lxy" = ( -/obj/machinery/stasis{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"lyv" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"lyA" = ( -/turf/closed/mineral/black_mesa, -/area/awaymission/black_mesa/deep_sci_medbay) -"lzn" = ( -/obj/machinery/door/airlock, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/mineral/titanium/blue, -/area/awaymission/black_mesa/equipment_room) -"lzG" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"lzQ" = ( -/obj/machinery/door/airlock/multi_tile/metal, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_turret_blockade) -"lAI" = ( -/obj/machinery/light/broken, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"lBi" = ( -/obj/structure/chair/stool/bamboo, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"lBD" = ( -/obj/structure/table, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"lCc" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"lCv" = ( -/obj/machinery/door/airlock/security{ - name = "Brig"; - req_access = list("brig_entrance") - }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/high_security_sec_point) -"lCE" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_entrance) -"lDh" = ( -/obj/structure/deployable_barricade/metal{ - dir = 1 - }, -/obj/structure/marker_beacon/olive, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"lDC" = ( -/obj/structure/closet/wardrobe, -/obj/item/reagent_containers/cup/glass/bottle/whiskey, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/dark/textured, -/area/awaymission/black_mesa/hecu_zone_bathroom) -"lDP" = ( -/obj/structure/inflatable, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"lDX" = ( -/obj/machinery/light/small/red/directional/south, -/turf/open/floor/plating, -/area/awaymission/black_mesa/hecu_zone_tunnel) -"lEm" = ( -/obj/structure/closet/crate/large, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/plating, -/area/awaymission/black_mesa/science_tunnel) -"lEu" = ( -/obj/machinery/nuclearbomb/beer, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_entrance) -"lFA" = ( -/obj/machinery/door/airlock/security, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"lGM" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 4 - }, -/area/awaymission/black_mesa/xen/lost_camp_hallway) -"lGS" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4 - }, -/obj/machinery/light/broken/directional/west, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"lHm" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/turf_decal/bot_red, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"lHB" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"lIO" = ( -/obj/structure/deployable_barricade/metal{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_camp) -"lKi" = ( -/obj/structure/closet/crate/medical, -/obj/item/storage/medkit/advanced, -/obj/item/storage/medkit/advanced, -/obj/item/storage/medkit/regular, -/obj/item/storage/medkit/regular, -/obj/item/storage/medkit/regular, -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"lKo" = ( -/obj/structure/table, -/obj/item/folder/red, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_decon_room) -"lLJ" = ( -/obj/machinery/door/airlock/vault, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/lambda_hallway) -"lMK" = ( -/turf/open/floor/engine, -/area/awaymission/black_mesa/black_ops_server) -"lNq" = ( -/obj/structure/pod, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"lNE" = ( -/obj/structure/rack/shelf, -/obj/item/reagent_containers/hypospray/medipen/stimulants, -/obj/item/ammo_box/magazine/mp5, -/obj/item/ammo_box/magazine/mp5, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_armory) -"lNP" = ( -/turf/open/floor/engine, -/area/awaymission/black_mesa/high_security_emitter) -"lPn" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"lQc" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_hallway_two) -"lQH" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"lRV" = ( -/obj/item/storage/medkit/regular, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_emitter) -"lSV" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"lUd" = ( -/obj/structure/urinal/directional/south, -/obj/item/food/urinalcake, -/turf/open/floor/iron/freezer, -/area/awaymission/black_mesa/hecu_zone_bathroom) -"lUi" = ( -/obj/structure/closet/crate/large, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"lUm" = ( -/obj/effect/spawner/random/trash/food_packaging, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"lVe" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_button) -"lVN" = ( -/obj/structure/chair/stool/bamboo{ - dir = 8 - }, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"lVP" = ( -/obj/effect/gibspawner/human, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"lWf" = ( -/obj/machinery/computer, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_labs) -"lWX" = ( -/obj/machinery/chem_dispenser/fullupgrade, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"lXv" = ( -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"lYp" = ( -/obj/effect/random_mob_placer/xen/zombie, -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_atrium) -"lZa" = ( -/obj/structure/fluff/bus/passable, -/obj/item/banhammer, -/turf/open/floor/iron/dark/textured_large{ - icon_state = "bus" - }, -/area/awaymission/black_mesa/black_ops_bus) -"lZj" = ( -/obj/structure/fluff/paper/stack{ - dir = 5; - pixel_x = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"lZp" = ( -/obj/machinery/vending/wallmed/directional/north, -/obj/effect/turf_decal/siding/dark_green{ - dir = 1 - }, -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"lZE" = ( -/obj/machinery/computer{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"mah" = ( -/obj/machinery/light/broken/directional/west, -/turf/open/floor/iron/stairs/medium, -/area/awaymission/black_mesa/entrance_internal_hall) -"mas" = ( -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"maZ" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"mbf" = ( -/obj/machinery/scanner_gate, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"mbQ" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"mcx" = ( -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"mcP" = ( -/obj/structure/table, -/obj/item/stack/sheet/cloth/ten, -/obj/item/stack/sheet/cloth/ten, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/high_security_emitter) -"meb" = ( -/obj/structure/railing, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"meB" = ( -/obj/structure/chair/office, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"meH" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 4 - }, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/chasm, -/area/awaymission/black_mesa/deep_sci_turret) -"meT" = ( -/obj/structure/deployable_barricade/metal{ - dir = 8 - }, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"mgw" = ( -/obj/machinery/light/cold/directional/east, -/obj/structure/sign/flag/usa/directional/east, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/high_security_sec_point) -"mgO" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"mhC" = ( -/obj/machinery/atmospherics/components/tank, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_labs) -"mjd" = ( -/turf/open/misc/beach/coastline_b/xen{ - dir = 9 - }, -/area/awaymission/black_mesa/xen/entering_zone) -"mkD" = ( -/obj/structure/lattice/catwalk, -/obj/structure/fence/door, -/turf/open/floor/plating, -/area/awaymission/black_mesa/science_internal) -"mkM" = ( -/obj/structure/deployable_barricade/metal{ - dir = 8 - }, -/obj/structure/deployable_barricade/metal, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp) -"mkN" = ( -/obj/effect/turf_decal/stripes, -/obj/machinery/atmospherics/components/tank, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"mla" = ( -/obj/structure/closet/crate/large, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"mlA" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/dorm_computers) -"mmj" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"mmE" = ( -/obj/effect/baseturf_helper/black_mesa_xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/antag_token_nook) -"mmG" = ( -/obj/structure/closet/secure_closet/chemical{ - req_access = null - }, -/obj/item/storage/bag/chemistry, -/obj/item/storage/backpack/satchel/leather, -/obj/item/storage/backpack/satchel/leather, -/obj/item/storage/backpack/satchel/leather, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"mnf" = ( -/obj/structure/flora/biolumi/mine/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"mnn" = ( -/obj/structure/alien/weeds/xen, -/obj/structure/cable, -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/hev, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"mnS" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/obj/structure/chair/sofa/bench{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"mnV" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/beaker/bluespace, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"moe" = ( -/obj/machinery/light/cold/directional/west, -/obj/item/ammo_box/magazine/m16/vintage/oldarms, -/turf/open/floor/iron/dark/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"mpE" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"mpY" = ( -/turf/open/misc/beach/coastline_t/sandwater_inner/xen{ - dir = 1 - }, -/area/awaymission/black_mesa/xen/entering_zone) -"mqk" = ( -/obj/structure/closet/crate/large, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_camp) -"mqs" = ( -/obj/machinery/power/floodlight{ - anchored = 1 - }, -/obj/structure/cable, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"mqB" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"mrj" = ( -/obj/structure/window/reinforced/plasma/spawner/directional/west, -/obj/structure/window/reinforced/plasma/spawner/directional/east, -/obj/machinery/suit_storage_unit/open, -/turf/open/floor/plating, -/area/awaymission/black_mesa/equipment_room) -"msF" = ( -/turf/open/floor/plating, -/area/awaymission/black_mesa/dorm_tunnel) -"mtu" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"muz" = ( -/obj/structure/railing, -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/lambda_hallway) -"muZ" = ( -/obj/structure/rack/shelf, -/obj/item/gun/ballistic/automatic/mp5, -/obj/structure/sign/flag/usa/directional/south, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_armory) -"mve" = ( -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/structure/extinguisher_cabinet/directional/south, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"mvH" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/plating, -/area/awaymission/black_mesa/deep_sci_storage) -"mvP" = ( -/obj/structure/flora/tree/dead, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"mxf" = ( -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_camp) -"mxn" = ( -/obj/structure/table, -/obj/item/storage/box/donkpockets, -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"mxz" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/light/cold/directional/north, -/obj/structure/sign/poster/random/directional/north, -/obj/machinery/oven, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"mxB" = ( -/obj/structure/inflatable{ - color = "#556B2F"; - opacity = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"mya" = ( -/obj/structure/closet/crate/freezer/blood, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"mzJ" = ( -/obj/structure/closet/crate/bin, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/carpet/blue, -/area/awaymission/black_mesa/high_security_servers) -"mzY" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/high_security_surgery) -"mBn" = ( -/obj/structure/table, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"mEd" = ( -/obj/structure/closet/crate, -/obj/structure/alien/weeds/xen, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"mED" = ( -/obj/structure/lattice/catwalk, -/obj/effect/random_mob_placer/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/high_security_hallway) -"mFi" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/obj/machinery/light/broken, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"mFO" = ( -/obj/structure/xen_crystal, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"mHO" = ( -/obj/structure/railing{ - dir = 9 - }, -/turf/open/floor/circuit, -/area/awaymission/black_mesa/lambda_teleporter) -"mIg" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/carpet/blue, -/area/awaymission/black_mesa/high_security_servers) -"mID" = ( -/obj/structure/urinal{ - pixel_y = 32 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/freezer, -/area/awaymission/black_mesa/equipment_room) -"mIW" = ( -/obj/structure/chair/sofa/bench{ - dir = 1 - }, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"mJx" = ( -/obj/effect/random_mob_placer/xen/zombie, -/obj/effect/turf_decal/siding/blue, -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"mJQ" = ( -/obj/structure/sign/poster/random/directional/south, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"mKn" = ( -/obj/structure/table, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"mLc" = ( -/obj/structure/window/spawner/directional/south, -/obj/structure/window/spawner/directional/east, -/obj/structure/server{ - anchored = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"mLg" = ( -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_labs) -"mLH" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"mLQ" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/employee_dorm_room) -"mLW" = ( -/obj/structure/table, -/obj/item/papercutter, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"mNg" = ( -/obj/structure/sink/directional/east, -/obj/structure/mirror{ - pixel_x = -28 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/freezer, -/area/awaymission/black_mesa/equipment_room) -"mNh" = ( -/obj/structure/shockplant, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"mNl" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/door/window/left/directional/east, -/obj/structure/table, -/obj/item/storage/box/condimentbottles, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"mOq" = ( -/obj/structure/fence/door, -/obj/effect/spawner/liquids_spawner, -/turf/open/floor/iron/pool, -/area/awaymission/black_mesa/deep_sci_feesh) -"mOs" = ( -/obj/structure/railing/corner{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/resonant_chamber) -"mPM" = ( -/obj/item/reagent_containers/cup/glass/bottle/beer/almost_empty, -/obj/effect/spawner/random/trash/mess, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"mRK" = ( -/obj/item/clothing/accessory/armband/medblue, -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"mSc" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"mSA" = ( -/obj/machinery/photocopier, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_atrium) -"mSM" = ( -/obj/machinery/modular_computer/preset/civilian{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"mUb" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/mp5_outpost) -"mVF" = ( -/obj/structure/table, -/obj/item/flashlight/flashdark, -/turf/open/floor/plating, -/area/awaymission/black_mesa/equipment_room) -"mVI" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing, -/obj/structure/railing{ - dir = 1 - }, -/obj/machinery/door/poddoor{ - id = "teleporter_catwalk" - }, -/turf/open/floor/engine, -/area/awaymission/black_mesa/lambda_teleporter) -"mVV" = ( -/obj/machinery/light/broken/directional/north, -/obj/structure/table, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/plating, -/area/awaymission/black_mesa/equipment_room) -"mWj" = ( -/obj/structure/inflatable{ - color = "#556B2F"; - opacity = 1 - }, -/obj/effect/baseturf_helper/black_mesa_xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"mWI" = ( -/obj/structure/closet/crate/bin, -/obj/machinery/light/broken/directional/north, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"mYd" = ( -/obj/structure/closet/crate/large, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/plating, -/area/awaymission/black_mesa/dorm_tunnel) -"mYF" = ( -/obj/structure/table, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"mYL" = ( -/obj/structure/spacevine/xen/thick, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/village_hallway) -"mZP" = ( -/obj/structure/toilet{ - dir = 8 - }, -/turf/open/floor/mineral/titanium/blue, -/area/awaymission/black_mesa/equipment_room) -"naR" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/dorm_computers) -"nbs" = ( -/obj/structure/table, -/obj/item/gun/energy/cell_loaded/medigun/upgraded, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/xen/acid_lake_building) -"nbu" = ( -/obj/structure/rack/gunrack, -/obj/item/gun/ballistic/revolver/mateba, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/awaymission/black_mesa/security_outpost) -"nbJ" = ( -/obj/structure/closet/crate/large, -/obj/item/ammo_box/a357, -/turf/open/floor/plating, -/area/awaymission/black_mesa/dorm_tunnel) -"ncO" = ( -/turf/closed/indestructible/rock/xen, -/area/awaymission/black_mesa/xen/village_hallway) -"ndA" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 5 - }, -/obj/structure/marker_beacon/burgundy, -/turf/open/floor/engine, -/area/awaymission/black_mesa/xen/entering_zone) -"nej" = ( -/obj/structure/window/spawner/directional/west, -/obj/structure/window/spawner/directional/south, -/obj/structure/server{ - anchored = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"neu" = ( -/obj/machinery/light/red, -/obj/structure/lattice/catwalk, -/obj/structure/sign/warning/secure_area/directional/south, -/turf/open/floor/plating, -/area/awaymission/black_mesa/genetics_elevator) -"neA" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/carpet/blue, -/area/awaymission/black_mesa/high_security_hallway) -"neN" = ( -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"ngh" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_hall) -"ngp" = ( -/obj/machinery/light/warm/directional/west, -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"nhS" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/structure/closet/crate/bin, -/obj/structure/alien/weeds/xen, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"njp" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/glass/coffee, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"njF" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/high_security_surgery) -"nkj" = ( -/obj/structure/closet/crate/large, -/obj/item/food/canned/peaches, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"nlz" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"nlM" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/entrance_internal_hall) -"nmo" = ( -/obj/effect/spawner/random/bioluminescent_plant/weak, -/turf/open/misc/beach/coastline_t/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"nmp" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/xen/acid_lake_building) -"nmq" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_atrium) -"nms" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 6 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"nmD" = ( -/obj/structure/chair/office, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/deep_sci_turret) -"nmG" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"nnm" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/dorm_computers) -"nns" = ( -/obj/structure/mineral_door/xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/village_hallway) -"nnI" = ( -/obj/structure/pod, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"nnQ" = ( -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/cryo_room) -"noE" = ( -/obj/structure/sign/warning/biohazard, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/deep_sci_hall) -"nps" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/lambda_teleporter) -"npB" = ( -/obj/machinery/door/airlock/science/glass, -/obj/effect/mapping_helpers/airlock/locked, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"npW" = ( -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/structure/closet/crate/bin, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"nqs" = ( -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_eng_storage) -"nqy" = ( -/obj/machinery/status_display{ - pixel_y = 32 - }, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_hallway) -"nqG" = ( -/obj/structure/closet/crate/large, -/obj/item/stack/sheet/plasteel, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"nrb" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/structure/table, -/obj/structure/reagent_dispensers/servingdish, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"nrw" = ( -/obj/structure/filingcabinet/chestdrawer, -/turf/open/floor/plating, -/area/awaymission/black_mesa/xen/acid_lake_building) -"nrD" = ( -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/lambda_hallway) -"nrL" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/indestructible/reinforced, -/area/awaymission/black_mesa/equipment_room) -"nrT" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"nsz" = ( -/obj/structure/sign/warning/xeno_mining/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_hall) -"ntL" = ( -/obj/structure/deployable_barricade/metal{ - dir = 4 - }, -/obj/machinery/power/floodlight{ - anchored = 1 - }, -/obj/structure/deployable_barricade/metal, -/obj/structure/cable, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_camp) -"ntW" = ( -/obj/structure/closet/crate/large, -/obj/item/armament_points_card, -/turf/open/floor/plating, -/area/awaymission/black_mesa/hecu_zone_tunnel) -"nvj" = ( -/obj/machinery/computer, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/high_security_emitter) -"nvD" = ( -/obj/effect/spawner/random/bioluminescent_plant/weak, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp) -"nvW" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"nvX" = ( -/obj/structure/table, -/obj/item/storage/medkit/expeditionary, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"nwT" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"nxa" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"nxq" = ( -/obj/structure/flora/biolumi/mine/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_decon_room) -"nxx" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/genetics_elevator) -"nxD" = ( -/obj/effect/gibspawner/human, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"nxI" = ( -/obj/structure/sign/warning/gas_mask/directional/east, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"nxS" = ( -/obj/structure/table, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"nyd" = ( -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"nyp" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics) -"nyu" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/high_security_sec_point) -"nyU" = ( -/obj/structure/closet/crate/large, -/turf/open/floor/plating, -/area/awaymission/black_mesa/dorm_tunnel) -"nyX" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/equipment_room) -"nzL" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/plating, -/area/awaymission/black_mesa/hecu_zone_tunnel) -"nzT" = ( -/obj/machinery/power/rtg/advanced, -/obj/structure/cable, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"nAh" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/table, -/obj/item/stack/ore/bluespace_crystal, -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"nBg" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/high_security_emitter) -"nCX" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/vending/medical, -/obj/effect/turf_decal/siding/dark_green{ - dir = 5 - }, -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"nDv" = ( -/obj/structure/server{ - anchored = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"nFP" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing/corner, -/obj/structure/railing/corner{ - dir = 4 - }, -/turf/open/floor/engine, -/area/awaymission/black_mesa/lambda_teleporter) -"nGO" = ( -/obj/structure/lattice/catwalk, -/turf/open/floor/plating, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"nHl" = ( -/obj/structure/chair/office, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/deep_sci_turret) -"nHm" = ( -/obj/structure/table, -/obj/item/paper_bin, -/obj/item/folder/blue{ - pixel_x = 3 - }, -/obj/item/pen{ - pixel_x = 3 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"nHx" = ( -/obj/structure/blob/normal, -/obj/structure/blob/normal, -/turf/open/floor/engine, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"nHG" = ( -/obj/structure/window/spawner/directional/north, -/obj/structure/window/spawner/directional/east, -/obj/structure/server{ - anchored = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"nHO" = ( -/obj/structure/chair/office, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"nII" = ( -/obj/machinery/modular_computer/preset/civilian{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"nIZ" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"nJA" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_button) -"nKc" = ( -/turf/closed/indestructible/rock, -/area/awaymission/black_mesa/deep_sci_hall) -"nKy" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_feesh) -"nLp" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light/broken/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"nLr" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/cryo_room) -"nLu" = ( -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/circuit, -/area/awaymission/black_mesa/lambda_teleporter) -"nLL" = ( -/obj/effect/random_mob_placer/vortigaunt, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"nLY" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"nMQ" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 5 - }, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"nMS" = ( -/obj/structure/table, -/obj/item/modular_computer/laptop, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"nNy" = ( -/obj/structure/chair/plastic{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"nNN" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/black_ops_server) -"nOf" = ( -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_hallway) -"nOB" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/engine, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"nOK" = ( -/obj/machinery/door/airlock/science, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"nPg" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/tram_room) -"nPp" = ( -/obj/item/ammo_box/magazine/mp5, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"nQD" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/deep_sci_medbay) -"nQJ" = ( -/obj/structure/lattice/catwalk, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"nQL" = ( -/obj/effect/turf_decal/stripes, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"nRP" = ( -/obj/structure/table, -/obj/item/folder/red, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_external_sec) -"nSe" = ( -/obj/structure/fluff/bus/dense{ - icon_state = "hoodbottom" - }, -/turf/open/floor/iron/dark/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"nSi" = ( -/obj/structure/inflatable{ - color = "#556B2F"; - opacity = 1 - }, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/mp5_outpost) -"nSW" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics_sec) -"nTs" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"nTv" = ( -/obj/structure/deployable_barricade/metal, -/obj/structure/cable, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_camp) -"nTH" = ( -/obj/machinery/modular_computer/preset/civilian{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"nVg" = ( -/obj/machinery/atmospherics/components/binary/crystallizer, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"nWP" = ( -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/circuit, -/area/awaymission/black_mesa/lambda_teleporter) -"nXD" = ( -/obj/structure/mineral_door/xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"nXT" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/science_tunnel) -"nXY" = ( -/obj/machinery/door/airlock/security{ - name = "Brig"; - req_access = list("brig_entrance") - }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_entrance) -"nZh" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"nZI" = ( -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_armory) -"nZJ" = ( -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"oag" = ( -/obj/structure/deployable_barricade/metal/plasteel, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"oaB" = ( -/turf/open/misc/beach/coastline_t/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"obI" = ( -/obj/machinery/chem_dispenser/fullupgrade, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"ocV" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 1 - }, -/area/awaymission/black_mesa/xen/entering_zone) -"oeo" = ( -/obj/effect/gibspawner/human, -/obj/item/screwdriver, -/obj/structure/railing/corner, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"oeJ" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/dorm_computers) -"oeY" = ( -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"ofE" = ( -/obj/effect/random_mob_placer/blackops, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/black_ops_bus) -"ofP" = ( -/obj/machinery/modular_computer/preset/civilian{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"ogL" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/high_security_emitter) -"ogS" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/vending/drugs, -/obj/effect/turf_decal/siding/dark_green{ - dir = 4 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"ohf" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_hall) -"ohO" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 5 - }, -/obj/machinery/porta_turret/black_mesa, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"oib" = ( -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_camp) -"ojG" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"ojH" = ( -/obj/effect/gibspawner/human, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_atrium) -"okq" = ( -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"okE" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/high_security_armory) -"okH" = ( -/obj/effect/spawner/random/bioluminescent_plant, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/mp5_outpost) -"olm" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/high_security_sec_point) -"olH" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_external_sec) -"olK" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/deep_sci_medbay) -"oos" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/genetics_elevator) -"opB" = ( -/obj/structure/lattice/catwalk, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/reflector/box/anchored{ - dir = 1 - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa/scientist_hall) -"oqg" = ( -/obj/effect/spawner/random/bioluminescent_plant, -/turf/open/misc/beach/coastline_t/xen{ - dir = 4 - }, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"oqM" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/obj/structure/flora/biolumi/lamp/weaklight, -/obj/structure/alien/weeds/xen, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"orr" = ( -/obj/structure/rack/shelf, -/obj/item/ammo_box/magazine/m16, -/obj/item/ammo_box/magazine/m16, -/obj/item/ammo_box/magazine/m16, -/obj/item/ammo_box/magazine/m16, -/obj/item/ammo_box/magazine/m16, -/obj/item/ammo_box/magazine/m16, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_external_sec) -"osI" = ( -/obj/structure/flora/biolumi/lamp/weaklight, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"osS" = ( -/obj/structure/chair/stool/bamboo{ - dir = 1 - }, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"otA" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"otO" = ( -/obj/structure/lattice/catwalk, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/power/emitter/energycannon{ - dir = 4 - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa/scientist_hall) -"ovO" = ( -/obj/machinery/door/puzzle/keycard/xen/freeman_boss_entry, -/obj/effect/freeman_blocker, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"ovX" = ( -/obj/item/grown/log/tree, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"owq" = ( -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_internal_hall) -"owF" = ( -/obj/machinery/light/cold/directional/west, -/obj/machinery/chem_mass_spec, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics) -"oxw" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"oxx" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics_sec) -"oxJ" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"oxS" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/structure/curtain/cloth, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"oyq" = ( -/obj/machinery/chem_mass_spec, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"oyX" = ( -/obj/structure/deployable_barricade/metal{ - dir = 4 - }, -/obj/structure/deployable_barricade/metal, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp) -"oza" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/entrance_tunnel) -"ozz" = ( -/turf/open/floor/plating, -/area/awaymission/black_mesa/science_tunnel) -"oAi" = ( -/obj/structure/table, -/obj/item/folder/blue, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"oAJ" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"oBm" = ( -/obj/machinery/chem_master, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"oBA" = ( -/obj/structure/railing{ - dir = 5 - }, -/obj/structure/lattice/catwalk, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"oBI" = ( -/obj/structure/stone_tile/slab/cracked, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"oCb" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/hecu_zone_atrium) -"oCV" = ( -/obj/item/disk/tech_disk, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_entrance) -"oDW" = ( -/obj/structure/closet/crate/bin, -/obj/item/pen, -/obj/machinery/light/broken/directional/north, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"oEl" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ - dir = 8 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"oEs" = ( -/obj/structure/rack/shelf, -/obj/item/ammo_box/magazine/m16, -/obj/item/reagent_containers/hypospray/medipen/stimulants, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_armory) -"oEG" = ( -/obj/structure/table, -/obj/item/storage/medkit/regular, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_server) -"oET" = ( -/obj/structure/table, -/obj/item/folder/red, -/obj/item/stack/sheet/cloth/ten, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/dorm_computers) -"oFv" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_internal_hall) -"oGD" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_entrance) -"oHn" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/deep_sci_hall) -"oHz" = ( -/obj/effect/turf_decal/stripes, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/black_ops_server) -"oIk" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/structure/sign/poster/random/directional/north, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"oKh" = ( -/turf/open/floor/iron/stairs/medium, -/area/awaymission/black_mesa/hecu_zone_atrium) -"oML" = ( -/obj/structure/table, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"oNA" = ( -/obj/structure/closet/crate/large, -/obj/item/stack/spacecash/c10000, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance_tunnel) -"oNV" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/high_security_surgery) -"oNZ" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"oPR" = ( -/obj/effect/turf_decal/trimline/green/filled/corner{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"oQq" = ( -/mob/living/basic/carp/mega, -/obj/effect/spawner/liquids_spawner, -/turf/open/floor/iron/pool, -/area/awaymission/black_mesa/deep_sci_feesh) -"oQy" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/entrance_large_office) -"oQS" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"oQV" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/structure/server{ - anchored = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/black_ops_server) -"oRB" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"oRK" = ( -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"oRN" = ( -/obj/structure/railing/corner{ - dir = 8 - }, -/turf/open/floor/circuit, -/area/awaymission/black_mesa/lambda_teleporter) -"oRQ" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"oRV" = ( -/obj/effect/spawner/random/bioluminescent_plant, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"oSj" = ( -/obj/structure/deployable_barricade/metal{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_camp) -"oSm" = ( -/obj/structure/closet/crate/large, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"oSQ" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_labs) -"oTo" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"oTs" = ( -/obj/structure/closet/crate/large, -/obj/item/keycard/blue, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance_tunnel) -"oTt" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/dorm_computers) -"oTZ" = ( -/obj/machinery/door/puzzle/keycard/icebox, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_armory) -"oUx" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"oVj" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_turret_blockade) -"oWN" = ( -/obj/structure/closet/crate/large, -/obj/item/ammo_box/magazine/m16/vintage/oldarms, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"oXc" = ( -/obj/structure/chair/stool, -/obj/effect/gibspawner/human, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/dark/textured, -/area/awaymission/black_mesa/hecu_zone_bathroom) -"oXe" = ( -/obj/structure/fluff/bus/passable, -/turf/open/floor/iron/dark/textured_large{ - icon_state = "bus" - }, -/area/awaymission/black_mesa/black_ops_bus) -"oXi" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/flora/biolumi/mine/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/scientist_hall) -"oXq" = ( -/obj/structure/closet/crate/secure/weapon, -/obj/item/storage/toolbox/emergency/turret/mesa, -/obj/item/storage/toolbox/emergency/turret/mesa, -/obj/item/storage/toolbox/emergency/turret/mesa, -/obj/item/storage/toolbox/emergency/turret/mesa, -/obj/item/storage/toolbox/emergency/turret/mesa, -/obj/item/storage/toolbox/emergency/turret/mesa, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"oXs" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_camp) -"oXG" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, -/obj/structure/closet/mini_fridge, -/obj/item/storage/cans/sixsoda, -/obj/item/storage/cans/sixsoda, -/obj/item/storage/cans/sixbeer, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"oXH" = ( -/obj/structure/closet/crate/medical, -/obj/item/armament_points_card, -/obj/structure/sign/poster/random/directional/west, -/obj/effect/turf_decal/siding/dark_green{ - dir = 8 - }, -/obj/machinery/light/broken/directional/west, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"oXS" = ( -/obj/machinery/door/airlock/wood/glass, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"oZW" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/equipment_room) -"pag" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_hallway) -"pbR" = ( -/obj/structure/spacevine/xen/thick, -/obj/effect/baseturf_helper/black_mesa_xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp_hallway) -"pcK" = ( -/obj/structure/deployable_barricade/metal{ - dir = 4 - }, -/obj/structure/marker_beacon/burgundy, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp) -"pcX" = ( -/obj/structure/spacevine/xen/thick, -/turf/open/misc/beach/coastline_t/xen{ - dir = 6 - }, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"pdC" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/light/broken/directional/east, -/turf/open/floor/plating, -/area/awaymission/black_mesa/scientist_hall) -"pdG" = ( -/obj/machinery/power/emitter/welded, -/turf/open/floor/engine, -/area/awaymission/black_mesa/deep_sci_turret) -"pdN" = ( -/obj/structure/flora/biolumi/lamp/weaklight, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance_tunnel) -"pdX" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/genetics_elevator) -"pem" = ( -/obj/structure/lattice/catwalk, -/turf/open/water/jungle, -/area/awaymission/black_mesa/resonant_chamber) -"pgq" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"pgK" = ( -/obj/machinery/light/cold, -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/black_ops_entrance) -"phk" = ( -/obj/machinery/light/red, -/obj/structure/lattice/catwalk, -/turf/open/floor/plating, -/area/awaymission/black_mesa/genetics_elevator) -"phR" = ( -/obj/machinery/medical_kiosk, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/xen/acid_lake_building) -"phX" = ( -/obj/machinery/door/airlock/wood/glass, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/dorm_computers) -"piJ" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/resonant_chamber) -"pjD" = ( -/obj/structure/table, -/obj/item/knife/plastic, -/obj/item/knife/plastic, -/obj/item/knife/plastic, -/obj/item/knife/plastic, -/obj/item/knife/plastic, -/obj/item/knife/plastic, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"pkR" = ( -/obj/machinery/door/airlock/science, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"pmE" = ( -/obj/effect/mob_spawn/corpse/human/hecu_zombie, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_hall) -"pnb" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/hecu_zone_tunnel) -"pnc" = ( -/obj/structure/fluff/bus/dense{ - icon_state = "hoodtop" - }, -/turf/open/floor/iron/dark/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"pni" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_entrance) -"pnl" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/black_ops_entrance) -"poP" = ( -/obj/machinery/autolathe/hacked, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_eng_storage) -"ppY" = ( -/obj/structure/spacevine/xen/thick, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"pqv" = ( -/obj/structure/sign/warning/electric_shock/directional/west, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/employee_dorm_room) -"prp" = ( -/obj/structure/alien/resin/membrane, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_surgery) -"pru" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"pso" = ( -/obj/structure/lattice/catwalk, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_button) -"pst" = ( -/obj/effect/gibspawner/human, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_entrance) -"psu" = ( -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_decon_room) -"psA" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/table/greyscale, -/obj/item/storage/box/hecu_rations{ - pixel_x = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"psO" = ( -/obj/structure/lattice/catwalk, -/turf/open/floor/engine, -/area/awaymission/black_mesa/lambda_teleporter) -"psX" = ( -/obj/structure/table, -/obj/item/storage/box/bodybags, -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"pto" = ( -/turf/open/water/beach/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"ptC" = ( -/obj/effect/random_mob_placer/hev_zombie, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"puz" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 8 - }, -/area/awaymission/black_mesa/xen/entering_zone) -"puA" = ( -/obj/structure/railing, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"puQ" = ( -/obj/machinery/door/poddoor, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_bus) -"pvh" = ( -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/structure/alien/weeds/xen, -/obj/effect/baseturf_helper/black_mesa, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"pvq" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"pvA" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"pvG" = ( -/obj/machinery/porta_turret/black_mesa, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_decon_room) -"pvO" = ( -/obj/machinery/computer, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_server) -"pwj" = ( -/obj/machinery/light/cold/directional/south, -/obj/effect/random_mob_placer/blackops, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_button) -"pxJ" = ( -/turf/open/floor/iron/stairs/medium{ - dir = 8 - }, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"pxO" = ( -/obj/structure/rack/shelf, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"pyq" = ( -/obj/effect/mob_spawn/corpse/human/damaged, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"pyH" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"pyK" = ( -/obj/item/stack/cable_coil, -/obj/item/clothing/glasses/welding, -/obj/item/lightreplacer, -/obj/structure/rack/shelf, -/obj/item/stack/cable_coil, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"pzc" = ( -/turf/open/water/jungle, -/area/awaymission/black_mesa/resonant_chamber) -"pBa" = ( -/obj/structure/closet/crate/large, -/obj/item/stack/telecrystal/twenty, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"pCG" = ( -/obj/effect/turf_decal/stripes, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"pDm" = ( -/turf/open/misc/beach/coastline_t/sandwater_inner/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"pDo" = ( -/obj/structure/alien/weeds/xen, -/obj/effect/random_mob_placer/vortigaunt_hostile, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"pDP" = ( -/obj/structure/closet/crate/freezer/blood, -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"pEd" = ( -/obj/machinery/light/small/red/directional/north, -/obj/effect/gibspawner/human, -/turf/open/floor/plating, -/area/awaymission/black_mesa/hecu_zone_tunnel) -"pED" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/obj/structure/flora/biolumi/lamp/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_decon_room) -"pFJ" = ( -/obj/effect/random_mob_placer/xen, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/equipment_room) -"pGS" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa/dorm_tunnel) -"pJF" = ( -/obj/machinery/door/poddoor{ - id = "sectorcams" - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"pJW" = ( -/obj/structure/table/glass, -/obj/item/clothing/accessory/medal/plasma/nobel_science, -/obj/item/clothing/glasses/science{ - pixel_y = -2 - }, -/obj/item/clothing/head/beret/science{ - pixel_y = 2 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"pKO" = ( -/turf/open/water/xen_acid, -/area/awaymission/black_mesa/xen/village_hallway) -"pKR" = ( -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"pLk" = ( -/obj/structure/lattice/catwalk, -/turf/open/floor/plating, -/area/awaymission/black_mesa/high_security_hallway) -"pMg" = ( -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"pMi" = ( -/turf/open/floor/engine, -/area/awaymission/black_mesa/deep_sci_turret) -"pNl" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/high_security_servers) -"pNo" = ( -/obj/effect/mob_spawn/corpse/human/guard_zombie, -/turf/open/floor/iron/dark/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"pNs" = ( -/obj/structure/inflatable, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp) -"pNW" = ( -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/structure/extinguisher_cabinet/directional/south, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"pOk" = ( -/obj/machinery/light/cold/directional/east, -/obj/structure/closet/secure_closet/engineering_electrical, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"pOw" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/deep_sci_feesh) -"pPh" = ( -/obj/structure/inflatable/door{ - color = "#556B2F"; - opacity = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"pSp" = ( -/obj/structure/table, -/obj/item/clipboard, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"pUe" = ( -/obj/structure/table, -/obj/item/storage/medkit/regular, -/obj/item/storage/inflatable, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/dark/textured, -/area/awaymission/black_mesa/hecu_zone_bathroom) -"pUu" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/high_security_servers) -"pUz" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/high_security_servers) -"pUI" = ( -/obj/structure/window/reinforced/unanchored/spawner/directional/north, -/obj/structure/table, -/obj/item/reagent_containers/spray/pepper, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"pUQ" = ( -/obj/structure/table, -/obj/item/grenade/gas_crystal/proto_nitrate_crystal, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"pUY" = ( -/obj/structure/closet/crate/freezer/blood, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/xen/acid_lake_building) -"pVe" = ( -/obj/effect/gibspawner/human/bodypartless, -/turf/open/floor/iron/stairs/medium{ - dir = 8 - }, -/area/awaymission/black_mesa/high_security_hallway) -"pWY" = ( -/obj/structure/fence/corner{ - dir = 4 - }, -/obj/effect/spawner/liquids_spawner, -/turf/open/floor/iron/pool, -/area/awaymission/black_mesa/deep_sci_feesh) -"pXS" = ( -/obj/structure/fence/corner{ - dir = 1 - }, -/obj/effect/spawner/liquids_spawner, -/turf/open/floor/iron/pool, -/area/awaymission/black_mesa/deep_sci_feesh) -"pYa" = ( -/obj/structure/sign/warning/xeno_mining, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/high_security_hallway) -"pYd" = ( -/obj/structure/closet/crate/large, -/obj/item/ammo_box/magazine/mp5, -/turf/open/floor/plating, -/area/awaymission/black_mesa/science_tunnel) -"pYl" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/dorm_computers) -"pYD" = ( -/obj/effect/gibspawner/human/bodypartless, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"pYW" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_entrance) -"pZl" = ( -/obj/machinery/porta_turret/black_mesa/heavy, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/resonant_chamber) -"pZK" = ( -/turf/open/floor/plating, -/area/awaymission/black_mesa/hecu_zone_tunnel) -"qae" = ( -/obj/structure/inflatable{ - color = "#556B2F"; - opacity = 1 - }, -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"qaj" = ( -/obj/structure/closet/l3closet/scientist, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"qaD" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"qbS" = ( -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_turret_blockade) -"qdc" = ( -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/black_ops_server) -"qdu" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_labs) -"qdB" = ( -/obj/structure/table, -/obj/machinery/light/broken/directional/west, -/obj/structure/sign/warning/no_smoking/circle/directional/north, -/obj/structure/alien/weeds/xen, -/obj/item/shield/riot/tele, -/turf/open/floor/iron/freezer, -/area/awaymission/black_mesa/equipment_room) -"qfk" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"qfU" = ( -/obj/item/storage/box/plastic/medicells, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/xen/acid_lake_building) -"qgp" = ( -/obj/structure/railing{ - dir = 5 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"qhh" = ( -/obj/structure/rack, -/obj/item/stack/sheet/plasteel{ - amount = 5 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_eng_storage) -"qhN" = ( -/obj/structure/table, -/obj/item/folder/red, -/obj/machinery/light/cold, -/obj/item/storage/medkit/advanced, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/deep_sci_turret) -"qhV" = ( -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/structure/chair/sofa/bench{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"qiB" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"qiS" = ( -/obj/structure/lattice/catwalk, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake) -"qiU" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_eng_storage) -"qjg" = ( -/obj/effect/turf_decal/stripes, -/obj/structure/sign/poster/random/directional/south, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"qkc" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_server) -"qlg" = ( -/obj/structure/table, -/obj/structure/window/reinforced/plasma/spawner/directional/east, -/obj/structure/window/reinforced/plasma/spawner/directional/west, -/obj/item/clothing/gloves/tackler/combat/insulated, -/obj/structure/window/reinforced/plasma/spawner/directional/south, -/obj/item/clothing/shoes/combat/swat, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/high_security_surgery) -"qlj" = ( -/obj/machinery/door/airlock/science/glass, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"qlP" = ( -/obj/structure/inflatable/door{ - color = "#556B2F"; - opacity = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"qmB" = ( -/obj/structure/bed, -/obj/item/bedsheet/patriot, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"qnn" = ( -/obj/machinery/chem_heater, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"qnr" = ( -/obj/structure/table, -/obj/item/geiger_counter, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"qnL" = ( -/obj/machinery/light/broken, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/resonant_chamber) -"qoi" = ( -/obj/item/ammo_box/magazine/p90, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"qoM" = ( -/obj/effect/spawner/random/bioluminescent_plant/weak, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"qpw" = ( -/obj/item/chair, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/xen/acid_lake_building) -"qpF" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"qqt" = ( -/obj/machinery/suit_storage_unit/open, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"qqV" = ( -/obj/machinery/computer{ - dir = 8 - }, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"qrc" = ( -/obj/structure/railing/corner{ - dir = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"qrk" = ( -/obj/structure/server{ - anchored = 1 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"quU" = ( -/obj/structure/table, -/obj/item/plate/small, -/obj/item/plate/small, -/obj/item/plate/small, -/obj/item/plate/small, -/obj/item/plate/small, -/obj/item/plate/small, -/obj/item/reagent_containers/condiment/pack/ketchup{ - pixel_x = 10 - }, -/obj/item/reagent_containers/condiment/pack/ketchup{ - pixel_x = 10 - }, -/obj/item/reagent_containers/condiment/pack/ketchup{ - pixel_x = 10 - }, -/obj/item/reagent_containers/condiment/pack/ketchup{ - pixel_x = 10 - }, -/obj/item/reagent_containers/condiment/pack/bbqsauce, -/obj/item/reagent_containers/condiment/pack/bbqsauce, -/obj/item/reagent_containers/condiment/pack/bbqsauce, -/obj/item/reagent_containers/condiment/pack/bbqsauce, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"qvf" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 9 - }, -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"qwa" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"qwm" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing/corner{ - dir = 1 - }, -/obj/structure/railing/corner{ - dir = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"qwG" = ( -/obj/structure/lattice/catwalk, -/turf/open/floor/circuit/red, -/area/awaymission/black_mesa/black_ops_turret_blockade) -"qxg" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 6 - }, -/area/awaymission/black_mesa/xen/entering_zone) -"qxX" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"qym" = ( -/turf/open/floor/iron/stairs/medium{ - dir = 8 - }, -/area/awaymission/black_mesa/hecu_zone_external_sec) -"qyN" = ( -/obj/structure/sign/warning/xeno_mining/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"qzB" = ( -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"qAD" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"qAH" = ( -/obj/machinery/door/airlock, -/obj/structure/alien/weeds/xen, -/turf/open/floor/mineral/titanium/blue, -/area/awaymission/black_mesa/equipment_room) -"qBx" = ( -/obj/structure/railing, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_camp) -"qBU" = ( -/obj/structure/alien/weeds/xen, -/obj/structure/cable, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"qCF" = ( -/obj/effect/random_mob_placer/xen, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"qDk" = ( -/obj/structure/stone_tile/surrounding/burnt, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"qEg" = ( -/obj/effect/spawner/random/bioluminescent_plant, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"qEt" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/black_ops_server) -"qFa" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics) -"qFp" = ( -/obj/structure/closet/crate/large, -/obj/item/minespawner/explosive, -/obj/item/ammo_box/a357, -/obj/item/ammo_box/a357, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_feesh) -"qFH" = ( -/obj/effect/baseturf_helper/black_mesa_xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"qFQ" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"qGl" = ( -/obj/structure/deployable_barricade/metal, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"qGz" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/dorm_computers) -"qGC" = ( -/obj/structure/rack, -/obj/item/storage/toolbox/mechanical, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"qGR" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"qGY" = ( -/obj/machinery/porta_turret/black_mesa/heavy, -/turf/open/floor/circuit, -/area/awaymission/black_mesa/black_ops_turret_blockade) -"qHk" = ( -/obj/machinery/computer, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"qHC" = ( -/obj/structure/alien/weeds/xen, -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/scientist_hall) -"qIv" = ( -/obj/structure/deployable_barricade/metal{ - dir = 1 - }, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_camp) -"qIB" = ( -/obj/effect/spawner/random/exotic/antag_gear, -/obj/structure/closet/crate/secure/loot, -/obj/effect/spawner/random/exotic/antag_gear_weak, -/obj/effect/spawner/random/exotic/antag_gear_weak, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_armory) -"qIC" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/structure/table, -/obj/item/storage/box/hecu_rations{ - pixel_x = -6 - }, -/obj/item/storage/box/hecu_rations{ - pixel_x = -6 - }, -/obj/item/storage/box/hecu_rations{ - pixel_x = 7 - }, -/obj/item/storage/box/hecu_rations{ - pixel_x = 7 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"qJa" = ( -/obj/structure/chair/plastic{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"qJx" = ( -/obj/structure/closet/wardrobe, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/equipment_room) -"qJF" = ( -/obj/structure/table, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"qKI" = ( -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/black_ops_hallway_two) -"qLd" = ( -/obj/structure/table/glass, -/obj/item/stack/sheet/mineral/plasma{ - name = "solid thing" - }, -/obj/item/stack/sheet/mineral/plasma{ - name = "solid thing" - }, -/obj/item/storage/box/beakers/variety, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"qLg" = ( -/obj/machinery/light/broken/directional/north, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/equipment_room) -"qLk" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/plating, -/area/awaymission/black_mesa/science_tunnel) -"qLz" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 10 - }, -/obj/machinery/porta_turret/black_mesa, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"qLV" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/dorm_computers) -"qMo" = ( -/obj/machinery/porta_turret/black_mesa, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_hallway) -"qMD" = ( -/obj/structure/extinguisher_cabinet/directional/south, -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_hallway) -"qMF" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 8 - }, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/genetics_elevator) -"qNk" = ( -/obj/structure/sign/departments/chemistry{ - pixel_x = -31 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_labs) -"qOK" = ( -/obj/structure/table, -/obj/item/stack/ore/bluespace_crystal, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"qOM" = ( -/obj/structure/table, -/obj/structure/xen_crystal{ - pixel_y = 15 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/xen/acid_lake_building) -"qPf" = ( -/obj/structure/railing/corner{ - dir = 1 - }, -/turf/open/floor/circuit, -/area/awaymission/black_mesa/lambda_teleporter) -"qQn" = ( -/obj/structure/window/reinforced/plasma/spawner/directional/south, -/obj/structure/window/reinforced/plasma/spawner/directional/east, -/obj/structure/window/reinforced/plasma/spawner/directional/north, -/obj/structure/window/reinforced/plasma/spawner/directional/west, -/obj/structure/rack/shelf, -/obj/item/gun/ballistic/automatic/laser/marksman, -/obj/item/ammo_box/magazine/recharge/marksman, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/high_security_emitter) -"qQv" = ( -/obj/structure/sign/warning/biohazard, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/deep_sci_storage) -"qQX" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"qRz" = ( -/obj/structure/table, -/obj/item/stack/telecrystal/five, -/obj/item/raw_anomaly_core/random, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics_sec) -"qTu" = ( -/obj/structure/table, -/obj/machinery/door/window/left/directional/east, -/obj/item/clothing/accessory/armband/cargo, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"qTM" = ( -/obj/effect/random_mob_placer/xen, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_decon_room) -"qTQ" = ( -/obj/structure/table, -/obj/structure/fluff/paper/stack{ - dir = 5; - pixel_x = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"qUX" = ( -/obj/item/ammo_box/magazine/m16, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"qVm" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/employee_dorm_room) -"qVH" = ( -/obj/structure/flora/biolumi/flower/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/scientist_hall) -"qVW" = ( -/turf/open/misc/beach/coastline_t/sandwater_inner/xen{ - dir = 1 - }, -/area/awaymission/black_mesa/xen/lost_camp_hallway) -"qWw" = ( -/obj/effect/spawner/random/vending/snackvend, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"qWA" = ( -/obj/effect/turf_decal/stripes, -/obj/machinery/light/cold, -/obj/structure/sign/poster/random/directional/south, -/obj/structure/curtain/cloth, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"qWY" = ( -/obj/structure/fence/door, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"qXD" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/effect/mapping_helpers/damaged_window, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"qXG" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/light/broken/directional/west, -/turf/open/floor/plating, -/area/awaymission/black_mesa/scientist_hall) -"qXZ" = ( -/obj/structure/table/glass, -/obj/item/clothing/accessory/medal/plasma/nobel_science{ - pixel_x = 7 - }, -/obj/item/clothing/accessory/medal/plasma/nobel_science{ - pixel_x = -6 - }, -/obj/item/clothing/glasses/science{ - pixel_x = -5; - pixel_y = -2 - }, -/obj/item/clothing/glasses/science{ - pixel_x = 5; - pixel_y = -2 - }, -/obj/item/clothing/head/beret/science{ - pixel_x = 5; - pixel_y = 2 - }, -/obj/item/clothing/head/beret/science{ - pixel_x = -5; - pixel_y = 2 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"qYc" = ( -/obj/item/radio/intercom/directional/west, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"qYn" = ( -/obj/structure/server{ - anchored = 1 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_button) -"qYw" = ( -/obj/structure/table, -/obj/item/pen, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"qYL" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_internal_hall) -"qZn" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_atrium) -"qZw" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/effect/turf_decal/siding/blue{ - dir = 5 - }, -/obj/machinery/light/broken/directional/east, -/turf/open/floor/iron/textured_corner{ - dir = 8 - }, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"qZD" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/dorm_tunnel) -"rad" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/obj/structure/table, -/obj/item/storage/box/cups, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"raX" = ( -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"rbu" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/science_labs) -"rbY" = ( -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"rcF" = ( -/obj/effect/turf_decal/siding/blue/corner{ - dir = 4 - }, -/turf/open/floor/iron/textured_corner{ - dir = 4 - }, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"rcX" = ( -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/dorm_computers) -"rdu" = ( -/obj/structure/flora/biolumi/flower/weaklight, -/turf/open/floor/plating/elevatorshaft, -/area/awaymission/black_mesa/resonant_chamber) -"reY" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"rfj" = ( -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"rfm" = ( -/obj/structure/rack/shelf, -/obj/item/storage/medkit/advanced, -/obj/item/storage/medkit/advanced, -/obj/item/storage/medkit/advanced, -/obj/item/reagent_containers/hypospray/medipen/stimulants, -/obj/item/storage/medkit/expeditionary, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_armory) -"rgd" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_hallway) -"rgH" = ( -/obj/effect/mob_spawn/corpse/human/engineer, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance_tunnel) -"rhO" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/science_decon_room) -"riC" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_internal_hall) -"rjb" = ( -/obj/structure/table, -/obj/item/papercutter, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_atrium) -"rjB" = ( -/obj/structure/closet/crate/bin, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"rkc" = ( -/obj/machinery/door/airlock/science, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_feesh) -"rkV" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/stairs/medium, -/area/awaymission/black_mesa/entrance_internal_hall) -"rlq" = ( -/obj/item/ammo_box/magazine/m50, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/village_hallway) -"rmA" = ( -/obj/structure/deployable_barricade/metal{ - dir = 8 - }, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp) -"rmK" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/dorm_computers) -"rnE" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/light/dim/directional/west, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake) -"rnF" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 1 - }, -/obj/structure/chair/sofa/bench/left, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"rnL" = ( -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/resonant_chamber) -"rnO" = ( -/obj/machinery/light/small/red/directional/west, -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/plating, -/area/awaymission/black_mesa/hecu_zone_tunnel) -"rnS" = ( -/obj/structure/rack/shelf, -/obj/machinery/light/cold/directional/north, -/obj/item/ammo_box/magazine/p90, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_armory) -"rox" = ( -/obj/effect/mob_spawn/ghost_role/human/black_mesa/hecu, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"roK" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/science_decon_room) -"roR" = ( -/obj/effect/baseturf_helper/black_mesa_xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/nihilanth_computer) -"rpk" = ( -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"rqo" = ( -/obj/effect/turf_decal/arrows{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"rqQ" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/scientist_hall) -"rrX" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/black_ops_server) -"rtf" = ( -/obj/machinery/power/emitter/energycannon{ - dir = 4 - }, -/obj/structure/lattice/catwalk, -/turf/open/floor/engine, -/area/awaymission/black_mesa/lambda_teleporter) -"rts" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/genetics_elevator) -"rtx" = ( -/obj/structure/lattice/catwalk, -/turf/open/floor/plating, -/area/awaymission/black_mesa/deep_sci_hall) -"rtM" = ( -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/science, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"rtP" = ( -/obj/machinery/chem_mass_spec, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"rtR" = ( -/obj/effect/spawner/random/vending/snackvend, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"ruO" = ( -/obj/structure/table, -/obj/item/megaphone, -/obj/item/clothing/mask/whistle, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"rvm" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/obj/effect/spawner/random/structure/closet_private, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"rvK" = ( -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_hallway) -"rvZ" = ( -/obj/effect/turf_decal/trimline/green/filled/corner{ - dir = 4 - }, -/obj/machinery/light/cold/directional/east, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"rwu" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/mp5_outpost) -"rwU" = ( -/obj/effect/sliding_puzzle/freeman, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"rxo" = ( -/obj/structure/deployable_barricade/metal/plasteel, -/obj/structure/cable, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_camp) -"rxq" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/science_decon_room) -"rxO" = ( -/obj/structure/flora/biolumi/lamp/weaklight, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/black_ops_science_room) -"rym" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"rys" = ( -/obj/structure/stone_tile/slab, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"ryu" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/high_security_armory) -"rzr" = ( -/obj/structure/flora/tree/dead, -/turf/open/water/xen_acid, -/area/awaymission/black_mesa/xen/acid_lake) -"rzS" = ( -/obj/structure/sign/warning/biohazard, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"rCe" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/lambda_hallway) -"rCy" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_hall) -"rCG" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"rCK" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/high_security_emitter) -"rCO" = ( -/obj/structure/closet/crate/trashcart/filled, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"rDg" = ( -/obj/structure/table, -/obj/item/grenade/gas_crystal/nitrous_oxide_crystal, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics_sec) -"rDq" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"rFi" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 1 - }, -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"rFA" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/circuit, -/area/awaymission/black_mesa/black_ops_hallway_two) -"rFF" = ( -/obj/effect/bump_teleporter{ - id = "lambdadown"; - id_target = "lambdaup" - }, -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"rGa" = ( -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"rGk" = ( -/obj/structure/chair/plastic{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"rGq" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_hall) -"rHa" = ( -/obj/structure/stone_tile/surrounding/cracked, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"rHs" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/deep_sci_turret) -"rHu" = ( -/obj/structure/sign/poster/random/directional/east, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"rHv" = ( -/obj/machinery/light/warm, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"rHx" = ( -/obj/structure/spacevine/xen/thick, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"rHB" = ( -/obj/machinery/light/broken/directional/west, -/turf/open/floor/iron/freezer, -/area/awaymission/black_mesa/hecu_zone_bathroom) -"rHE" = ( -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"rIg" = ( -/turf/open/water/xen_acid, -/area/awaymission/black_mesa/xen/acid_lake) -"rJj" = ( -/obj/item/ammo_box/a357, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"rJt" = ( -/obj/structure/spacevine/xen/thick, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp_hallway) -"rLR" = ( -/obj/machinery/light/cold/directional/east, -/obj/structure/closet/crate/engineering/electrical, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"rMt" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/xen/lost_camp) -"rMU" = ( -/obj/structure/closet/crate/large, -/obj/machinery/light/small/red/directional/east, -/turf/open/floor/plating, -/area/awaymission/black_mesa/hecu_zone_tunnel) -"rMW" = ( -/obj/structure/server{ - anchored = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"rOE" = ( -/obj/structure/extinguisher_cabinet/directional/west, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/scientist_hall) -"rOM" = ( -/obj/item/tape/ruins/black_mesa/second_hecu, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_hall) -"rOP" = ( -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/lambda_hallway) -"rPs" = ( -/obj/structure/spacevine, -/turf/open/floor/engine, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"rPD" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp_hallway) -"rPP" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/lambda_hallway) -"rPZ" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"rRc" = ( -/obj/effect/random_mob_placer/hev_zombie, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/xen/acid_lake_building) -"rRi" = ( -/obj/structure/table, -/obj/item/stock_parts/cell/crystal_cell, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"rRB" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 10 - }, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"rSl" = ( -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"rSo" = ( -/obj/item/clothing/mask/facehugger/toy, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_surgery) -"rSt" = ( -/obj/machinery/door_buttons/airlock_controller{ - name = "Elevator Button"; - pixel_y = 23 - }, -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/black_ops_entrance) -"rTr" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/light/broken/directional/east, -/obj/effect/random_mob_placer/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/scientist_hall) -"rTN" = ( -/obj/structure/window/reinforced/unanchored/spawner/directional/north, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"rTV" = ( -/obj/structure/deployable_barricade/metal/plasteel{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_camp) -"rUc" = ( -/obj/structure/rack, -/obj/item/stack/sheet/iron/ten{ - amount = 30; - pixel_x = 3 - }, -/obj/item/stack/sheet/glass{ - amount = 30 - }, -/obj/item/stack/sheet/iron/ten{ - amount = 30; - pixel_x = 3 - }, -/obj/item/stack/sheet/glass{ - amount = 30 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_eng_storage) -"rVo" = ( -/obj/effect/mob_spawn/corpse/human/hecu_zombie, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_entrance) -"rVS" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/dorm_computers) -"rVW" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_hallway) -"rWz" = ( -/obj/structure/sign/warning/xeno_mining, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/high_security_surgery) -"rXj" = ( -/obj/structure/water_source/puddle/healing, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/mp5_outpost) -"rXo" = ( -/obj/machinery/light/cold/directional/north, -/obj/structure/table/optable, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"rXr" = ( -/obj/machinery/chem_master, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics_sec) -"rYc" = ( -/obj/structure/urinal/directional/south, -/turf/open/floor/iron/freezer, -/area/awaymission/black_mesa/hecu_zone_bathroom) -"rYe" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"say" = ( -/obj/structure/lattice/catwalk, -/obj/structure/flora/biolumi/lamp/weaklight, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance_internal_hall) -"saO" = ( -/obj/machinery/iv_drip, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/xen/acid_lake_building) -"scr" = ( -/obj/structure/railing/corner, -/turf/open/floor/circuit, -/area/awaymission/black_mesa/lambda_teleporter) -"scT" = ( -/obj/machinery/door/airlock/science/glass, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/high_security_servers) -"sdP" = ( -/obj/effect/turf_decal/tile/green/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_internal_hall) -"sdX" = ( -/obj/structure/sign/warning/gas_mask/directional/east, -/obj/structure/closet/crate/bin, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"sev" = ( -/obj/item/flashlight/lantern, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"seS" = ( -/obj/structure/closet/body_bag, -/obj/effect/mob_spawn/corpse/human/damaged, -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"seU" = ( -/obj/machinery/sleeper/syndie/fullupgrade, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"sfA" = ( -/obj/item/pickaxe/diamond, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_hallway) -"sfK" = ( -/obj/structure/table, -/obj/machinery/light/cold/directional/north, -/obj/item/storage/pouch/ammo, -/obj/item/storage/belt/security/full, -/obj/structure/sign/flag/usa/directional/north, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"sgM" = ( -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_atrium) -"sgP" = ( -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_entrance) -"sgX" = ( -/obj/machinery/light/broken/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"shY" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 1 - }, -/obj/structure/closet/crate/bin, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"sja" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/high_security_hallway) -"sjb" = ( -/obj/structure/table, -/obj/item/folder/blue, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"sjp" = ( -/turf/closed/mineral/black_mesa, -/area/awaymission/black_mesa/high_security_hallway) -"sjv" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_science_room) -"sjA" = ( -/obj/machinery/light/cold, -/obj/effect/turf_decal/siding/blue, -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"sjF" = ( -/obj/structure/flora/biolumi/flower/weaklight, -/obj/machinery/light/broken, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/equipment_room) -"skD" = ( -/obj/machinery/modular_computer/preset/civilian, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_atrium) -"skO" = ( -/obj/structure/table, -/obj/item/grenade/antigravity, -/obj/item/grenade/antigravity, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"slk" = ( -/obj/item/chair, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_camp) -"sls" = ( -/obj/structure/sign/warning/no_smoking/circle/directional/north, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_decon_room) -"sma" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_decon_room) -"smb" = ( -/obj/effect/random_mob_placer/hev_zombie, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"sms" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/obj/effect/spawner/random/vending/snackvend, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"smK" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"sng" = ( -/obj/structure/sign/departments/medbay/alt, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/deep_sci_hall) -"snI" = ( -/obj/machinery/door/poddoor{ - id = "sectorcmain" - }, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/deep_sci_hall) -"soz" = ( -/obj/structure/table, -/obj/item/phone, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_atrium) -"soS" = ( -/obj/structure/table, -/obj/item/clothing/accessory/medal/silver/valor, -/obj/item/clothing/accessory/medal/gold/heroism, -/obj/item/clothing/accessory/medal/conduct, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"sqN" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/engine, -/area/awaymission/black_mesa/lambda_teleporter) -"sqX" = ( -/obj/structure/kitchenspike, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"srf" = ( -/obj/machinery/scanner_gate, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"srm" = ( -/obj/machinery/porta_turret/black_mesa/heavy, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/lambda_hallway) -"srW" = ( -/obj/effect/spawner/structure/window/plasma, -/turf/open/floor/circuit/red, -/area/awaymission/black_mesa/black_ops_turret_blockade) -"ssi" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/circuit, -/area/awaymission/black_mesa/lambda_teleporter) -"sst" = ( -/obj/machinery/door/airlock/science, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics) -"ssI" = ( -/obj/structure/sign/poster/random/directional/east, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"sut" = ( -/obj/machinery/computer, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/scientist_hall) -"suz" = ( -/obj/structure/closet/crate/large, -/obj/item/construction/rcd/loaded/upgraded, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_feesh) -"suB" = ( -/obj/machinery/power/floodlight, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"suE" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/structure/alien/weeds/xen, -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/mineral/titanium/blue, -/area/awaymission/black_mesa/equipment_room) -"suQ" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 5 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"svJ" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/science_internal) -"swe" = ( -/obj/structure/filingcabinet/chestdrawer, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"sya" = ( -/obj/structure/lattice/catwalk, -/obj/structure/chair/plastic{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake) -"syy" = ( -/obj/structure/bed/medical/emergency, -/obj/structure/curtain, -/obj/effect/mob_spawn/corpse/human/engineer, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"szg" = ( -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"szt" = ( -/obj/machinery/light/broken/directional/north, -/obj/item/knife/combat/marksman, -/obj/structure/table, -/turf/open/floor/plating, -/area/awaymission/black_mesa/equipment_room) -"sAC" = ( -/obj/structure/table, -/obj/structure/microscope, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"sCn" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"sCL" = ( -/turf/open/misc/beach/coastline_b/xen{ - dir = 10 - }, -/area/awaymission/black_mesa/xen/entering_zone) -"sEb" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/lambda_hallway) -"sEo" = ( -/obj/structure/chair/plastic{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"sEI" = ( -/obj/structure/server{ - anchored = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"sEU" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"sFA" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/obj/structure/table, -/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/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"sFW" = ( -/obj/structure/table, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_atrium) -"sGa" = ( -/obj/structure/flora/biolumi/mine/weaklight{ - pixel_x = -7; - pixel_y = 7 - }, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/black_ops_science_room) -"sGy" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 9 - }, -/area/awaymission/black_mesa/xen/lost_camp_hallway) -"sGO" = ( -/obj/structure/railing, -/obj/effect/random_mob_placer/xen, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/equipment_room) -"sGY" = ( -/obj/structure/alien/weeds/xen, -/obj/structure/table, -/obj/structure/microscope, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"sHu" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/vending/wardrobe/medi_wardrobe, -/obj/effect/turf_decal/siding/dark_green{ - dir = 4 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"sHW" = ( -/obj/structure/curtain, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"sIG" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_server) -"sJk" = ( -/obj/structure/table, -/obj/machinery/light/cold, -/obj/machinery/microwave, -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"sJE" = ( -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_external_sec) -"sJT" = ( -/obj/structure/table, -/obj/item/folder/red, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"sKQ" = ( -/obj/machinery/light/cold/directional/east, -/obj/machinery/atmospherics/components/binary/crystallizer, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"sLG" = ( -/obj/structure/closet/wardrobe, -/obj/machinery/light/cold/directional/west, -/obj/item/clothing/mask/cigarette/rollie/cannabis, -/obj/item/clothing/mask/cigarette/rollie/cannabis, -/obj/item/clothing/mask/cigarette/rollie/cannabis, -/obj/item/clothing/mask/cigarette/rollie/cannabis, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/dark/textured, -/area/awaymission/black_mesa/hecu_zone_bathroom) -"sNu" = ( -/obj/structure/closet/crate/wooden, -/obj/item/food/meat/slab/human, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"sNz" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 4 - }, -/area/awaymission/black_mesa/xen/entering_zone) -"sOs" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, -/turf/open/floor/engine, -/area/awaymission/black_mesa/high_security_emitter) -"sOH" = ( -/obj/machinery/light/small/red/directional/west, -/obj/effect/random_mob_placer/hev_zombie, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/mp5_outpost) -"sOJ" = ( -/obj/structure/filingcabinet/chestdrawer/wheeled, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_atrium) -"sQo" = ( -/obj/structure/rack/shelf, -/obj/item/grenade/syndieminibomb/concussion, -/obj/item/grenade/syndieminibomb/concussion, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_armory) -"sST" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"sTe" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/closet, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"sTX" = ( -/obj/structure/closet/crate/large, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_entrance) -"sUe" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/high_security_surgery) -"sUn" = ( -/obj/effect/turf_decal/trimline/green/filled/corner{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"sUP" = ( -/obj/structure/closet/crate/large, -/obj/item/food/canned/beans, -/obj/item/food/canned/beans, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"sVp" = ( -/obj/structure/lattice/catwalk, -/obj/structure/closet/crate/large, -/turf/open/floor/plating, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"sVG" = ( -/obj/effect/turf_decal/stripes, -/obj/machinery/washing_machine, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"sWl" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/science_tunnel) -"sXo" = ( -/obj/effect/spawner/random/bioluminescent_plant, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"sXD" = ( -/obj/structure/closet/crate/wooden, -/obj/item/storage/medkit/regular, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"sXR" = ( -/obj/machinery/gravity_generator, -/turf/open/floor/engine, -/area/awaymission/black_mesa/black_ops_server) -"sXV" = ( -/obj/structure/curtain/cloth{ - color = "#556B2F" - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"sYe" = ( -/obj/effect/gibspawner/human, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_decon_room) -"sYI" = ( -/obj/structure/cable, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"sYT" = ( -/obj/structure/sign/flag/usa/directional/south, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"sZa" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"sZq" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/deep_sci_feesh) -"sZG" = ( -/obj/structure/lattice/catwalk, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_button) -"taR" = ( -/obj/structure/alien/weeds/xen, -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"taX" = ( -/obj/structure/deployable_barricade/metal{ - dir = 4 - }, -/obj/structure/cable, -/obj/structure/marker_beacon/burgundy, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"tbC" = ( -/obj/structure/table, -/obj/item/food/mre_course/dessert/chocolate, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"tbG" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"tce" = ( -/obj/structure/table, -/obj/machinery/computer/records/security/laptop, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/mp5_outpost) -"tcp" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/lambda_hallway) -"tcJ" = ( -/obj/machinery/computer, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"tcK" = ( -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"tdb" = ( -/obj/structure/table, -/obj/item/storage/medkit/advanced, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"tfA" = ( -/obj/effect/turf_decal/trimline/green/filled/corner, -/obj/machinery/light/broken/directional/east, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"tfX" = ( -/obj/structure/chair/sofa/bench{ - dir = 4 - }, -/obj/structure/sign/poster/random/directional/west, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"tgl" = ( -/obj/structure/cable, -/obj/structure/table, -/obj/machinery/computer/records/security/laptop, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"tgn" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"tgH" = ( -/obj/structure/closet/crate/large, -/obj/item/food/canned/tuna, -/obj/item/food/canned/tuna, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"tgO" = ( -/obj/structure/cable, -/turf/open/floor/plating, -/area/awaymission/black_mesa/xen/lost_camp) -"thb" = ( -/obj/structure/closet/crate/large, -/obj/item/stack/spacecash/c10000, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"thu" = ( -/obj/machinery/door/airlock/multi_tile/metal, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_science_room) -"tiq" = ( -/obj/structure/table, -/obj/item/paper, -/obj/structure/alien/weeds/xen, -/obj/item/ammo_box/c10mm, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_decon_room) -"tiO" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 4 - }, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"tjL" = ( -/obj/item/ammo_box/magazine/mp5, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"tjX" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/turf/open/water/jungle, -/area/awaymission/black_mesa/resonant_chamber) -"tjZ" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, -/turf/open/water/jungle, -/area/awaymission/black_mesa/resonant_chamber) -"tkh" = ( -/obj/machinery/light/broken/directional/north, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"tlC" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_button) -"tlF" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"tmC" = ( -/obj/structure/flora/biolumi/flower/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"tow" = ( -/obj/structure/alien/weeds/xen, -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"tpG" = ( -/obj/machinery/door/airlock/vault, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_armory) -"tpK" = ( -/obj/structure/cable, -/obj/structure/table, -/obj/item/storage/box/hecu_rations, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"trG" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_server) -"trZ" = ( -/obj/structure/table, -/obj/item/surgicaldrill/alien, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/high_security_surgery) -"tsr" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 10 - }, -/area/awaymission/black_mesa/xen/entering_zone) -"ttP" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/high_security_emitter) -"tve" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/circuit, -/area/awaymission/black_mesa/black_ops_hallway_two) -"tvl" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/siding/blue{ - dir = 10 - }, -/turf/open/floor/iron/textured_corner{ - dir = 4 - }, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"tvo" = ( -/obj/structure/window/reinforced/plasma/spawner/directional/east, -/obj/structure/window/reinforced/plasma/spawner/directional/west, -/obj/machinery/suit_storage_unit/open, -/turf/open/floor/plating, -/area/awaymission/black_mesa/equipment_room) -"tvq" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"tvK" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/glass/coffee{ - pixel_x = -3 - }, -/obj/item/food/cakeslice/pound_cake_slice{ - pixel_x = 8; - pixel_y = -2 - }, -/obj/machinery/light/cold, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_internal_hall) -"tvM" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/obj/structure/railing{ - dir = 1 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"tvQ" = ( -/obj/item/tape/ruins/black_mesa/third_hecu, -/turf/open/floor/iron/dark/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"tww" = ( -/obj/structure/lattice/catwalk, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/science_labs) -"twB" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_atrium) -"twQ" = ( -/obj/structure/closet/crate, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"tzU" = ( -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_hallway_two) -"tBk" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/genetics_elevator) -"tBP" = ( -/obj/structure/cable, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"tCX" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/light/cold, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"tEg" = ( -/obj/structure/chair/comfy/brown{ - dir = 1 - }, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"tER" = ( -/obj/effect/random_mob_placer/vortigaunt_hostile, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_hallway) -"tFO" = ( -/turf/open/water/overlay/hotspring/indestructible, -/area/awaymission/black_mesa/black_ops_button) -"tGy" = ( -/obj/structure/xen_crystal, -/turf/open/floor/engine, -/area/awaymission/black_mesa/resonant_chamber) -"tHD" = ( -/obj/structure/table/glass, -/obj/item/clothing/glasses/science{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/clothing/glasses/science, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil, -/obj/item/grenade/chem_grenade, -/obj/item/grenade/chem_grenade, -/obj/item/grenade/chem_grenade, -/obj/item/grenade/chem_grenade, -/obj/item/screwdriver, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"tIk" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_hall) -"tJr" = ( -/turf/open/misc/beach/coastline_t/sandwater_inner/xen{ - dir = 8 - }, -/area/awaymission/black_mesa/xen/lost_camp_hallway) -"tJD" = ( -/obj/structure/rack/shelf, -/obj/item/reagent_containers/hypospray/medipen/stimpack/traitor, -/obj/item/gun/ballistic/automatic/p90, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_armory) -"tKZ" = ( -/turf/open/misc/beach/coastline_b/xen{ - dir = 4 - }, -/area/awaymission/black_mesa/xen/entering_zone) -"tLu" = ( -/obj/structure/window/reinforced/unanchored/spawner/directional/north, -/obj/structure/table, -/obj/machinery/light/directional/east, -/obj/item/storage/fancy/cigarettes/cigpack_robust, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"tLG" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp) -"tMk" = ( -/obj/machinery/light/broken/directional/east, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_external_sec) -"tNP" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/black_ops_server) -"tOz" = ( -/obj/structure/table, -/obj/item/razor, -/obj/item/flashlight/seclite, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"tOP" = ( -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"tPa" = ( -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"tPh" = ( -/obj/structure/inflatable, -/turf/open/floor/iron/white, -/area/awaymission/black_mesa/hecu_zone_camp) -"tPr" = ( -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"tPs" = ( -/obj/structure/railing/corner, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"tPy" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/railing, -/turf/open/floor/engine, -/area/awaymission/black_mesa/lambda_teleporter) -"tQp" = ( -/obj/structure/railing{ - dir = 10 - }, -/turf/open/floor/circuit, -/area/awaymission/black_mesa/black_ops_button) -"tQQ" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/hecu_zone_bathroom) -"tRm" = ( -/obj/structure/railing, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"tRF" = ( -/obj/structure/spacevine/xen/thick, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"tRW" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/black_ops_bus) -"tSn" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ - dir = 8 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"tSq" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/deep_sci_turret) -"tSV" = ( -/obj/structure/table, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_atrium) -"tTN" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"tTS" = ( -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/mp5_outpost) -"tTW" = ( -/obj/structure/table, -/obj/item/geneshears, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"tUb" = ( -/obj/machinery/light/cold/directional/north, -/obj/structure/reagent_dispensers/water_cooler, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"tUj" = ( -/obj/structure/table/wood, -/obj/item/food/breadslice/xenomeat, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"tUX" = ( -/obj/machinery/shower/directional/west, -/obj/structure/drain, -/turf/open/floor/iron/freezer, -/area/awaymission/black_mesa/hecu_zone_bathroom) -"tVa" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/high_security_sec_point) -"tWd" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"tWk" = ( -/obj/structure/xen_pylon/freeman{ - pixel_y = 12 - }, -/turf/open/misc/dirt/planet/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"tWI" = ( -/obj/effect/gibspawner/human/bodypartless, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"tXe" = ( -/obj/effect/spawner/random/trash/food_packaging, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"tXq" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/dark/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"tZd" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"tZe" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"uam" = ( -/obj/structure/table, -/obj/item/gun/ballistic/automatic/p90, -/obj/item/ammo_box/magazine/p90, -/obj/item/ammo_box/magazine/p90, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"uaK" = ( -/obj/machinery/light/cold, -/mob/living/simple_animal/hostile/blackmesa/blackops/ranged, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"ubi" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"ubP" = ( -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_button) -"uek" = ( -/obj/machinery/light/cold/directional/east, -/obj/structure/table, -/obj/item/modular_computer/laptop/preset/civilian, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"ufF" = ( -/obj/structure/alien/weeds/xen, -/turf/open/water/jungle, -/area/awaymission/black_mesa/resonant_chamber) -"ufJ" = ( -/obj/structure/railing{ - dir = 5 - }, -/turf/open/floor/circuit, -/area/awaymission/black_mesa/lambda_teleporter) -"ugs" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"ugS" = ( -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"ugU" = ( -/obj/item/gun/ballistic/automatic/pistol/sol, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"ugW" = ( -/obj/structure/inflatable{ - color = "#556B2F"; - opacity = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"uhA" = ( -/obj/structure/marker_beacon/burgundy, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"uhW" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 4 - }, -/obj/machinery/light/cold/directional/east, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/genetics_elevator) -"uiV" = ( -/obj/structure/window/reinforced/unanchored/spawner/directional/north, -/obj/structure/table, -/obj/item/book/manual/wiki/security_space_law, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) -"ujk" = ( -/obj/structure/flora/tree/dead, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"ukc" = ( -/obj/effect/bump_teleporter{ - id = "amsdown"; - id_target = "amsup" - }, -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/scientist_hall) -"ukW" = ( -/obj/structure/table, -/obj/item/keycard/office, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"ulz" = ( -/obj/structure/table, -/obj/machinery/light/cold, -/obj/item/storage/toolbox/mechanical, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"ump" = ( -/obj/machinery/light/cold/directional/north, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"umB" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_button) -"uot" = ( -/obj/machinery/light/cold/directional/north, -/obj/machinery/chem_master, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics) -"uoz" = ( -/turf/open/misc/beach/coastline_b/xen{ - dir = 5 - }, -/area/awaymission/black_mesa/xen/entering_zone) -"uoV" = ( -/obj/machinery/light/warm, -/obj/effect/spawner/random/trash/food_packaging, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"upg" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 4; - name = "Broken Computer" - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics) -"uph" = ( -/turf/open/floor/iron/stairs/medium, -/area/awaymission/black_mesa/entrance_internal_hall) -"upu" = ( -/obj/structure/lattice/catwalk, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/light/cold, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_button) -"upA" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/light/cold/directional/north, -/obj/structure/sign/flag/usa/directional/north, -/obj/structure/table, -/obj/machinery/coffeemaker, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"upS" = ( -/obj/structure/shockplant, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/village_hallway) -"uqp" = ( -/obj/structure/deployable_barricade/metal/plasteel{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"uqs" = ( -/obj/structure/table, -/obj/item/food/mre_course/dessert/cake, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"uqv" = ( -/obj/structure/deployable_barricade/metal/plasteel{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_camp) -"urj" = ( -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_camp) -"urK" = ( -/obj/structure/reagent_dispensers/water_cooler, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"usf" = ( -/obj/machinery/door/airlock/security{ - name = "Brig"; - req_access = list("brig_entrance") - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_lobby) -"usi" = ( -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/space/basic, -/area/space) -"usA" = ( -/obj/machinery/light/broken/directional/west, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"usS" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/genetics) -"utK" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_emitter) -"uuC" = ( -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"uuE" = ( -/obj/structure/table, -/obj/item/grenade/gas_crystal/healium_crystal, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"uuN" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_camp) -"uwk" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/lattice/catwalk, -/obj/machinery/computer{ - dir = 4 - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"uwo" = ( -/obj/structure/table, -/obj/item/ammo_box/magazine/mp5, -/obj/item/ammo_box/magazine/mp5, -/obj/item/ammo_box/magazine/mp5, -/obj/item/ammo_box/magazine/mp5, -/obj/item/ammo_box/magazine/mp5, -/obj/item/ammo_box/magazine/mp5, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/mp5_outpost) -"uwM" = ( -/obj/machinery/door/puzzle/keycard/office, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/high_security_sec_point) -"uwR" = ( -/obj/machinery/light/broken/directional/east, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/equipment_room) -"uxn" = ( -/obj/structure/lattice/catwalk, -/obj/structure/table, -/obj/machinery/button/door{ - id = "biolabs"; - name = "Biolabs Lockdown Release" - }, -/obj/item/crowbar/freeman, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"uyv" = ( -/obj/structure/light_puzzle{ - puzzle_id = "office_entrance" - }, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/tram_tunnel) -"uzy" = ( -/obj/structure/fluff/bus/passable/seat/driver, -/turf/open/floor/iron/dark/textured_large{ - icon_state = "bus" - }, -/area/awaymission/black_mesa/black_ops_bus) -"uAQ" = ( -/obj/structure/table, -/obj/item/folder/red, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"uBx" = ( -/obj/structure/table, -/obj/item/retractor/alien, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/high_security_surgery) -"uBZ" = ( -/obj/item/kitchen/rollingpin, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"uCU" = ( -/obj/structure/closet/crate/bin, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/deep_sci_turret) -"uEe" = ( -/obj/structure/light_prism, -/turf/open/water/overlay/hotspring/indestructible, -/area/awaymission/black_mesa/black_ops_button) -"uEE" = ( -/obj/structure/closet/secure_closet/chemical/heisenberg{ - req_access = null - }, -/obj/effect/turf_decal/siding/dark_green{ - dir = 8 - }, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"uFD" = ( -/obj/structure/headpike/bamboo, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"uFT" = ( -/obj/structure/lattice/catwalk, -/turf/open/floor/plating, -/area/awaymission/black_mesa/black_ops_entrance) -"uGf" = ( -/obj/machinery/power/emitter/energycannon{ - dir = 1 - }, -/obj/structure/lattice/catwalk, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_button) -"uHk" = ( -/obj/structure/alien/weeds/xen, -/obj/effect/spawner/random/bioluminescent_plant/weak, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"uJi" = ( -/obj/structure/lattice/catwalk, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/reflector/box/anchored{ - dir = 8 - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa/scientist_hall) -"uJr" = ( -/obj/structure/table, -/obj/item/storage/backpack/duffelbag/syndie/surgery, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/high_security_surgery) -"uKr" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"uKX" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/hecu_zone_atrium) -"uMO" = ( -/obj/structure/table, -/obj/structure/microscope, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"uMT" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_entrance) -"uNb" = ( -/turf/closed/mineral/black_mesa, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"uOe" = ( -/obj/structure/railing{ - dir = 9 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"uOn" = ( -/obj/structure/xen_pylon, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"uOu" = ( -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/genetics_elevator) -"uOC" = ( -/obj/structure/chair/stool, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/dark/textured, -/area/awaymission/black_mesa/hecu_zone_bathroom) -"uQH" = ( -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/high_security_sec_point) -"uQI" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/black_ops_entrance) -"uQK" = ( -/obj/machinery/light/broken/directional/east, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/stairs/medium, -/area/awaymission/black_mesa/entrance_internal_hall) -"uQW" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_hall) -"uRb" = ( -/obj/structure/flora/biolumi/mine/weaklight{ - pixel_x = 7; - pixel_y = 4 - }, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/black_ops_science_room) -"uSO" = ( -/obj/structure/deployable_barricade/metal{ - dir = 8 - }, -/mob/living/simple_animal/hostile/blackmesa/blackops/ranged, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"uSX" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 6 - }, -/turf/open/floor/iron/textured_corner{ - dir = 1 - }, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"uSZ" = ( -/obj/machinery/computer{ - desc = "A console meant for calling and sending a transit ferry. It seems iced-over and non-functional."; - dir = 4; - icon_screen = null; - name = "Shuttle Transist Console" - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"uTp" = ( -/obj/machinery/chem_heater, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"uTE" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 1 - }, -/obj/structure/chair/sofa/bench, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"uUl" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"uVs" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 1 - }, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"uVv" = ( -/obj/structure/chair/plastic{ - dir = 4 - }, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"uVx" = ( -/obj/structure/closet/wardrobe, -/obj/item/storage/fancy/cigarettes/cigpack_syndicate, -/obj/item/lighter, -/obj/item/storage/fancy/cigarettes/cigpack_syndicate, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/dark/textured, -/area/awaymission/black_mesa/hecu_zone_bathroom) -"uVA" = ( -/obj/structure/table, -/obj/item/paper_bin, -/obj/item/pen/blue, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_atrium) -"uWg" = ( -/obj/structure/marker_beacon/burgundy, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"uWN" = ( -/obj/structure/alien/weeds/xen, -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/scientist, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_labs) -"uWO" = ( -/obj/item/chair, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/xen/acid_lake_building) -"uXU" = ( -/obj/structure/closet/crate/large, -/turf/open/floor/plating, -/area/awaymission/black_mesa/hecu_zone_tunnel) -"uYl" = ( -/obj/effect/bump_teleporter{ - id = "lambdaup"; - id_target = "lambdadown" - }, -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/black_ops_entrance) -"uYC" = ( -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_entrance) -"uYQ" = ( -/obj/machinery/computer/records/security{ - dir = 4 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/gas_emitter_chamber) -"uZQ" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/high_security_surgery) -"vaN" = ( -/turf/open/floor/engine, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"vbi" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/obj/structure/barricade/sandbags, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"vbw" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/black_ops_server) -"vcs" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/cryo_hallway) -"vdk" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/obj/machinery/light/broken/directional/south, -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"vdJ" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/light/broken/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/plating, -/area/awaymission/black_mesa/scientist_hall) -"ved" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"veB" = ( -/obj/effect/mob_spawn/ghost_role/human/black_mesa/guard, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"vfl" = ( -/obj/structure/lattice/catwalk, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/village_hallway) -"vfC" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_labs) -"vhg" = ( -/obj/structure/filingcabinet/security, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"vhn" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 9 - }, -/area/awaymission/black_mesa/xen/entering_zone) -"vhq" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_hallway) -"vhr" = ( -/obj/structure/chair/sofa/bench{ - dir = 4 - }, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/obj/structure/sign/poster/random/directional/west, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"vhN" = ( -/obj/structure/closet/firecloset/wall{ - pixel_x = 30 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"vhW" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/obj/machinery/button/door{ - id = "sectorcams"; - name = "gates button"; - pixel_x = -7; - pixel_y = -24 - }, -/obj/machinery/button/door/directional/south{ - id = "gatesiguess"; - name = "Gates Door Lock"; - normaldoorcontrol = 1; - pixel_x = 7; - specialfunctions = 4 - }, -/obj/machinery/button/door/directional/south{ - id = "chemiguess"; - name = "Science Lockdown"; - normaldoorcontrol = 1; - pixel_y = -37; - specialfunctions = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"vio" = ( -/obj/structure/sign/flag/usa/directional/south, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"vju" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/genetics_elevator) -"vjI" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/high_security_sec_point) -"vlf" = ( -/obj/structure/table, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"vlp" = ( -/obj/effect/turf_decal/siding/dark_green{ - dir = 1 - }, -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"vlF" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/genetics_sec) -"vmb" = ( -/obj/structure/inflatable{ - color = "#556B2F"; - opacity = 1 - }, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"vmm" = ( -/obj/effect/baseturf_helper/black_mesa_xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) -"vmt" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"vmK" = ( -/obj/structure/table, -/obj/item/weaponcrafting/gunkit/xray, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"vmZ" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/marker_beacon/burgundy, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_camp) -"vnu" = ( -/obj/structure/table, -/obj/structure/microscope, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_decon_room) -"vnW" = ( -/obj/structure/chair/stool/bamboo{ - dir = 1 - }, -/turf/open/floor/bamboo, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"vpb" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"vph" = ( -/obj/structure/closet/crate/large, -/obj/item/stack/spacecash/c10000, -/turf/open/floor/plating, -/area/awaymission/black_mesa/dorm_tunnel) -"vpP" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/tram_tunnel) -"vpS" = ( -/obj/structure/railing, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"vqZ" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_bus) -"vrZ" = ( -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"vsF" = ( -/obj/structure/chair/plastic, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"vtr" = ( -/obj/machinery/door/airlock/science/glass, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_entrance) -"vtK" = ( -/obj/structure/inflatable{ - color = "#556B2F"; - opacity = 1 - }, -/obj/structure/noticeboard{ - pixel_y = -5 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"vtU" = ( -/obj/structure/rack/shelf, -/obj/item/gun/ballistic/automatic/mp5, -/obj/item/ammo_box/magazine/mp5, -/obj/item/ammo_box/magazine/mp5, -/obj/item/ammo_box/magazine/mp5, -/obj/item/ammo_box/magazine/mp5, -/obj/item/ammo_box/magazine/mp5, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/high_security_sec_point) -"vtX" = ( -/obj/effect/gibspawner/human, -/obj/structure/railing{ - dir = 1 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"vva" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"vvC" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/resonant_chamber) -"vwx" = ( -/obj/structure/window/reinforced/plasma/spawner/directional/west, -/obj/structure/window/reinforced/plasma/spawner/directional/east, -/obj/machinery/suit_storage_unit/hev, -/turf/open/floor/plating, -/area/awaymission/black_mesa/equipment_room) -"vwV" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/circuit, -/area/awaymission/black_mesa/black_ops_button) -"vxE" = ( -/obj/structure/urinal/directional/south, -/obj/item/flashlight/flare, -/turf/open/floor/iron/freezer, -/area/awaymission/black_mesa/hecu_zone_bathroom) -"vxO" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"vyO" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_emitter) -"vAe" = ( -/obj/machinery/computer/records/security{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/entrance_lobby) -"vAi" = ( -/obj/machinery/light/cold/directional/west, -/obj/structure/sign/departments/science/alt{ - pixel_x = -31 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_labs) -"vAB" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/obj/structure/table, -/obj/item/storage/box/donkpockets/donkpocketpizza, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"vAS" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/obj/structure/chair/sofa/bench/left{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"vAT" = ( -/turf/open/water/beach/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"vBz" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_decon_room) -"vCy" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_server) -"vCH" = ( -/obj/machinery/atmospherics/components/tank, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"vCQ" = ( -/obj/structure/chair/sofa/corp{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"vDa" = ( -/obj/effect/mob_spawn/corpse/human/engineer, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"vEa" = ( -/obj/structure/table, -/obj/item/surgery_tray/full, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"vEe" = ( -/obj/machinery/light/broken, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_decon_room) -"vGc" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 8 - }, -/obj/machinery/light/broken/directional/west, -/obj/structure/flora/biolumi/lamp/weaklight, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/genetics_elevator) -"vGe" = ( -/obj/structure/filingcabinet/chestdrawer, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_entrance) -"vGR" = ( -/obj/machinery/door/poddoor{ - id = "teleporter" - }, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_hall) -"vHB" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 1 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"vIo" = ( -/obj/structure/chair/office, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_server) -"vIs" = ( -/obj/structure/sign/warning/xeno_mining, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/high_security_emitter) -"vIy" = ( -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"vJI" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/structure/chair/sofa/bench/right, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_hall) -"vJV" = ( -/obj/effect/turf_decal/tile/green/fourcorners, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_internal_hall) -"vJX" = ( -/obj/structure/deployable_barricade/metal{ - dir = 4 - }, -/obj/structure/marker_beacon/burgundy, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"vKn" = ( -/obj/structure/server{ - anchored = 1 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"vKT" = ( -/obj/structure/table/optable, -/turf/open/floor/iron/textured_corner{ - dir = 4 - }, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"vLa" = ( -/obj/structure/lattice/catwalk, -/turf/open/floor/plating, -/area/awaymission/black_mesa/entrance_internal_hall) -"vLg" = ( -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/machinery/light/broken, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"vLs" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_external_sec) -"vLv" = ( -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics_sec) -"vLL" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ - dir = 8 - }, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"vMu" = ( -/obj/structure/reagent_dispensers/cooking_oil, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"vMV" = ( -/obj/structure/chair, -/obj/machinery/light/broken/directional/north, -/obj/effect/turf_decal/tile/green/half/contrasted, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_internal_hall) -"vNM" = ( -/obj/structure/table, -/obj/machinery/microwave{ - pixel_x = -3; - pixel_y = 6 - }, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_internal_hall) -"vNU" = ( -/obj/structure/flora/biolumi/lamp/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/scientist_hall) -"vOS" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"vPz" = ( -/obj/machinery/light/cold, -/obj/structure/server{ - anchored = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"vPK" = ( -/obj/structure/deployable_barricade/metal{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_button) -"vQo" = ( -/obj/machinery/light/broken, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/equipment_room) -"vQD" = ( -/obj/machinery/door/puzzle/keycard/blue_required, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"vRk" = ( -/obj/effect/decal/cleanable/blood/tracks, -/obj/structure/curtain/cloth{ - color = "#556B2F" - }, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"vSs" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_entrance) -"vTc" = ( -/obj/machinery/light/red{ - dir = 1 - }, -/obj/structure/lattice/catwalk, -/turf/open/floor/plating, -/area/awaymission/black_mesa/genetics_elevator) -"vTf" = ( -/obj/structure/rack, -/obj/item/storage/barricade, -/obj/item/storage/barricade, -/obj/item/storage/barricade, -/obj/item/storage/backpack/duffelbag/engineering{ - pixel_y = -4 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"vTj" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4 - }, -/obj/structure/barricade/wooden/crude, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"vTT" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/genetics_elevator) -"vUI" = ( -/obj/structure/flora/biolumi/lamp/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"vVt" = ( -/obj/machinery/door/airlock/science, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"vVP" = ( -/obj/item/inflatable/torn, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp) -"vWu" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"vXf" = ( -/obj/structure/lattice/catwalk, -/obj/structure/flora/biolumi/mine/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"vXB" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"vXC" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_atrium) -"vYx" = ( -/obj/structure/curtain/cloth{ - color = "#556B2F" - }, -/obj/effect/turf_decal/arrows{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"vZa" = ( -/obj/structure/stone_tile/slab/burnt, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"vZq" = ( -/obj/structure/filingcabinet/chestdrawer, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/dorm_computers) -"vZr" = ( -/obj/effect/spawner/random/bioluminescent_plant/weak, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp_hallway) -"vZt" = ( -/obj/structure/lattice/catwalk, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/power/emitter/energycannon{ - dir = 8 - }, -/turf/open/floor/plating, -/area/awaymission/black_mesa/scientist_hall) -"vZC" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/obj/effect/spawner/liquids_spawner, -/turf/open/floor/iron/pool, -/area/awaymission/black_mesa/deep_sci_feesh) -"vZE" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/black_ops_server) -"vZN" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"way" = ( -/obj/structure/table, -/obj/structure/sign/warning/no_smoking/circle/directional/north, -/obj/structure/alien/weeds/xen, -/obj/effect/spawner/random/exotic/technology, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"waO" = ( -/obj/effect/gibspawner/human, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"wbr" = ( -/obj/effect/baseturf_helper/black_mesa_xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/mp5_outpost) -"wbL" = ( -/obj/machinery/computer, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"wdS" = ( -/turf/open/misc/beach/coastline_t/xen, -/area/awaymission/black_mesa/xen/lost_camp_hallway) -"wea" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"wfi" = ( -/obj/machinery/computer/records/security{ - dir = 4 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_external_sec) -"wft" = ( -/obj/machinery/modular_computer/preset/civilian{ - dir = 4 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_external_sec) -"wfT" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, -/turf/open/water/jungle, -/area/awaymission/black_mesa/resonant_chamber) -"wfY" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 5 - }, -/obj/machinery/porta_turret/black_mesa, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"wgs" = ( -/obj/structure/railing, -/obj/structure/table, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/equipment_room) -"wjB" = ( -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"wke" = ( -/turf/open/floor/circuit/red, -/area/awaymission/black_mesa/black_ops_turret_blockade) -"wkG" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/awaymission/black_mesa/genetics_sec) -"wmo" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"wmp" = ( -/obj/item/chair, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"wmF" = ( -/obj/structure/lattice/catwalk, -/obj/structure/table, -/obj/item/reagent_containers/cup/glass/bottle/beer/light, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake) -"wmH" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"wnt" = ( -/obj/structure/closet/crate/bin, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_decon_room) -"wot" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 6 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"wqa" = ( -/obj/item/ammo_box/magazine/mmg_box, -/turf/open/floor/plating/cobblestone, -/area/awaymission/black_mesa/hecu_zone_camp) -"wqi" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, -/obj/structure/closet/crate/trashcart/laundry, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"wqW" = ( -/obj/effect/random_mob_placer/xen/zombie, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_labs) -"wrl" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/dorm_tunnel) -"wrN" = ( -/obj/effect/turf_decal/stripes, -/obj/structure/reagent_dispensers/water_cooler, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"wsl" = ( -/obj/structure/railing/corner{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"wth" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/hecu_zone_external_sec) -"wtk" = ( -/obj/structure/rack/shelf, -/obj/item/ammo_box/magazine/recharge/marksman, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/high_security_sec_point) -"wuz" = ( -/obj/structure/table, -/obj/item/storage/box/donkpockets/donkpocketspicy, -/obj/machinery/dish_drive, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_internal_hall) -"wuH" = ( -/obj/machinery/door/airlock/multi_tile/public/glass, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/security_outpost) -"wuY" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/village_hallway) -"wvv" = ( -/obj/effect/spawner/random/bioluminescent_plant, -/turf/open/misc/beach/coastline_t/xen{ - dir = 8 - }, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"wvx" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/indestructible/reinforced, -/area/awaymission/black_mesa/employee_dorm_room) -"wvQ" = ( -/obj/structure/sign/departments/medbay/alt, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"wwU" = ( -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"wwY" = ( -/obj/effect/mob_spawn/corpse/human/guard_zombie, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"wxv" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_armory) -"wxU" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4 - }, -/obj/structure/barricade/wooden, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"wye" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/corner, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"wyq" = ( -/obj/structure/table, -/obj/item/serviette_pack, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"wyy" = ( -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp_hallway) -"wyH" = ( -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/high_security_servers) -"wAD" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"wAJ" = ( -/obj/structure/deployable_barricade/metal{ - dir = 1 - }, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"wCZ" = ( -/obj/machinery/power/smes, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"wEc" = ( -/obj/structure/table, -/obj/structure/fluff/paper/stack{ - dir = 5; - pixel_x = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"wER" = ( -/obj/structure/chair/stool, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/equipment_room) -"wFj" = ( -/obj/structure/table, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"wGe" = ( -/obj/structure/closet/crate/bin, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"wGz" = ( -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/high_security_emitter) -"wGY" = ( -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_hall) -"wGZ" = ( -/obj/structure/cable, -/obj/structure/table, -/obj/machinery/light/cold/directional/east, -/obj/item/modular_computer/laptop, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"wHI" = ( -/obj/machinery/chem_dispenser/fullupgrade, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics) -"wHR" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"wIx" = ( -/obj/item/ammo_box/magazine/p90, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"wIC" = ( -/obj/structure/rack/shelf, -/obj/machinery/light/cold, -/obj/item/ammo_box/magazine/m16, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_armory) -"wJo" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"wJJ" = ( -/obj/structure/lattice/catwalk, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/plating, -/area/awaymission/black_mesa/scientist_hall) -"wJU" = ( -/obj/effect/gibspawner/human/bodypartless, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"wKd" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/obj/structure/chair/office{ - dir = 1 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"wKi" = ( -/obj/structure/table, -/obj/item/food/grown/banana/bunch, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"wKF" = ( -/obj/structure/table, -/obj/item/folder/red, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_internal) -"wKK" = ( -/obj/machinery/computer{ - dir = 1 - }, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_server) -"wLy" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/water/jungle, -/area/awaymission/black_mesa/resonant_chamber) -"wLZ" = ( -/obj/structure/rack/shelf, -/obj/item/gun_maintenance_supplies, -/obj/item/gun_maintenance_supplies, -/obj/item/gun_maintenance_supplies, -/obj/item/storage/medkit/regular, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_external_sec) -"wMx" = ( -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"wMZ" = ( -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"wNR" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/lambda_hallway) -"wOo" = ( -/obj/machinery/blackbox_recorder, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_eng_storage) -"wOq" = ( -/obj/machinery/autolathe/hacked, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"wOP" = ( -/turf/closed/indestructible/rock, -/area/awaymission/black_mesa/employee_dorm_room) -"wPp" = ( -/obj/machinery/light/cold/directional/east, -/obj/machinery/atmospherics/components/binary/crystallizer, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"wQu" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/holobox, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/employee_dorm_room) -"wRo" = ( -/obj/structure/liquid_pump, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_button) -"wRp" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/table, -/obj/item/weaponcrafting/gunkit/tesla, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_labs) -"wRu" = ( -/obj/item/storage/cans/sixbeer, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"wRN" = ( -/obj/structure/server{ - anchored = 1 - }, -/turf/open/floor/carpet/blue, -/area/awaymission/black_mesa/high_security_hallway) -"wRQ" = ( -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"wSo" = ( -/obj/structure/pod, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/freeman_puzzle) -"wTd" = ( -/obj/structure/fence, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_feesh) -"wTp" = ( -/obj/structure/railing, -/obj/machinery/destructive_scanner, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_decon_room) -"wUr" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/obj/structure/alien/weeds/xen, -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/scientist, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_labs) -"wUw" = ( -/obj/machinery/modular_computer/preset/civilian{ - dir = 4 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/high_security_surgery) -"wUX" = ( -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/black_ops_hallway_two) -"wVR" = ( -/obj/structure/rack/shelf, -/obj/machinery/light/warm, -/obj/item/gun/ballistic/automatic/pistol/sol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"wWc" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"wWN" = ( -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"wXb" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/table/optable, -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"wXI" = ( -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"wXR" = ( -/obj/machinery/door/airlock/multi_tile/public/glass, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/genetics_elevator) -"wYo" = ( -/mob/living/simple_animal/hostile/blackmesa/xen/bullsquid, -/turf/open/water/xen_acid, -/area/awaymission/black_mesa/xen/acid_lake) -"wYs" = ( -/obj/structure/inflatable{ - color = "#556B2F"; - opacity = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"xaa" = ( -/obj/structure/shockplant, -/turf/open/water/beach/xen, -/area/awaymission/black_mesa/xen/lost_camp_hallway) -"xao" = ( -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_button) -"xaN" = ( -/obj/structure/barricade/wooden/crude, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_atrium) -"xbj" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/railing, -/turf/open/floor/engine, -/area/awaymission/black_mesa/xen/entering_zone) -"xbr" = ( -/obj/structure/rack/shelf, -/obj/item/reagent_containers/hypospray/medipen/stimulants, -/obj/machinery/light/cold/directional/north, -/obj/item/ammo_box/magazine/p90, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_armory) -"xbw" = ( -/obj/effect/bump_teleporter{ - id = "teleporterup"; - id_target = "teleporterdown" - }, -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/lambda_hallway) -"xbD" = ( -/obj/structure/xen_crystal{ - pixel_y = 15 - }, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"xbZ" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/mineral/titanium, -/area/awaymission/black_mesa/black_ops_hallway_two) -"xcz" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/high_security_surgery) -"xcI" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/deep_sci_storage) -"xdn" = ( -/obj/machinery/porta_turret/black_mesa, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_towards_facility) -"xdQ" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 10 - }, -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"xei" = ( -/obj/structure/closet/secure_closet/medical1{ - req_access = null - }, -/obj/item/defibrillator/compact/loaded, -/obj/item/storage/medkit/brute, -/obj/item/storage/medkit/fire, -/obj/item/storage/medkit/o2, -/obj/item/storage/medkit/toxin, -/obj/item/storage/medkit/surgery, -/obj/item/bodybag, -/obj/item/storage/pouch/medpens, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"xez" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/structure/flora/biolumi/mine/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"xeE" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"xeQ" = ( -/obj/structure/fence, -/obj/effect/spawner/liquids_spawner, -/turf/open/floor/iron/pool, -/area/awaymission/black_mesa/deep_sci_feesh) -"xgs" = ( -/obj/effect/random_mob_placer/blackops, -/turf/open/floor/iron/dark/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"xgz" = ( -/obj/structure/table, -/turf/open/floor/plating, -/area/awaymission/black_mesa/xen/acid_lake_building) -"xgC" = ( -/obj/structure/table, -/obj/structure/microscope, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"xhr" = ( -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/xen/acid_lake_building) -"xhC" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"xhU" = ( -/obj/structure/closet/crate/bin, -/obj/item/stack/sheet/cloth/ten, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_internal_hall) -"xhX" = ( -/obj/machinery/light/cold/directional/east, -/obj/structure/table, -/obj/item/storage/medkit/emergency, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"xiq" = ( -/obj/machinery/porta_turret/black_mesa/heavy, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"xiu" = ( -/obj/structure/flora/biolumi/flower/weaklight, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/entrance_large_office) -"xjg" = ( -/obj/structure/closet/crate/large, -/obj/item/rcd_ammo, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_feesh) -"xjK" = ( -/obj/structure/closet/crate/secure/weapon, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/gun_maintenance_supplies, -/obj/item/gun_maintenance_supplies, -/obj/item/gun_maintenance_supplies, -/obj/item/ammo_box/magazine/mp5, -/obj/item/ammo_box/magazine/mp5, -/obj/item/ammo_box/magazine/m16, -/obj/item/ammo_box/magazine/m16, -/obj/item/gun/ballistic/automatic/pistol/sol{ - burst_size = 3; - desc = "A weapon from bygone times, and this is the exact 21st century version. In fact, even more reliable, but it also can run full automatic fire mode. Chambered in 9mm."; - firing_burst = 1; - name = "\improper Glock-18" - }, -/turf/open/floor/iron/dark/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"xjM" = ( -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_surgery) -"xkv" = ( -/obj/effect/baseturf_helper/black_mesa, -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_hallway_two) -"xkB" = ( -/obj/machinery/dna_scannernew, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/genetics) -"xlZ" = ( -/obj/effect/gibspawner/human, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/black_ops_bus) -"xmo" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_server) -"xmt" = ( -/obj/effect/random_mob_placer/xen, -/obj/effect/turf_decal/tile/green/fourcorners, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_internal_hall) -"xmK" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"xmL" = ( -/obj/machinery/door/airlock/science/glass, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"xnh" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/plating, -/area/awaymission/black_mesa/dorm_tunnel) -"xnl" = ( -/obj/effect/spawner/random/vending/snackvend, -/obj/effect/turf_decal/siding/blue{ - dir = 1 - }, -/turf/open/floor/iron/textured_half, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"xnW" = ( -/obj/structure/bed/medical/emergency, -/obj/structure/curtain, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"xov" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/turf/open/floor/engine, -/area/awaymission/black_mesa/high_security_emitter) -"xoY" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_decon_room) -"xpa" = ( -/obj/machinery/light/warm/directional/west, -/turf/open/floor/wood/parquet, -/area/awaymission/black_mesa/employee_dorm_room) -"xpk" = ( -/turf/open/floor/iron/stairs/left{ - dir = 1 - }, -/area/awaymission/black_mesa/resonant_chamber) -"xqs" = ( -/obj/effect/spawner/random/bioluminescent_plant, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/acid_lake) -"xrz" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 8 - }, -/obj/effect/random_mob_placer/xen, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/entrance_internal_hall) -"xrB" = ( -/obj/machinery/computer{ - dir = 8 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"xrM" = ( -/obj/structure/alien/weeds/xen, -/obj/effect/random_mob_placer/xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp) -"xsB" = ( -/obj/structure/cable, -/obj/machinery/light/dim/directional/west, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/lost_camp) -"xuC" = ( -/obj/effect/gibspawner/human, -/turf/open/floor/iron/dark/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"xww" = ( -/obj/structure/bed/medical/emergency, -/obj/structure/curtain, -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"xwV" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_science_room) -"xwW" = ( -/obj/effect/spawner/random/bioluminescent_plant/weak, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/vortigaunt_village) -"xxk" = ( -/obj/machinery/computer{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) -"xxG" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/black_ops_button) -"xzA" = ( -/obj/machinery/door/airlock/science/glass, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/high_security_hallway) -"xAh" = ( -/obj/structure/sign/poster/random/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/hecu_zone_external_hall) -"xAE" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, -/obj/effect/spawner/random/structure/closet_private, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"xBd" = ( -/obj/machinery/door/airlock/multi_tile/metal{ - dir = 4 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_science_room) -"xBu" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/turf/open/floor/iron, -/area/awaymission/black_mesa/entrance_internal_hall) -"xCw" = ( -/obj/machinery/computer, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"xDg" = ( -/obj/effect/turf_decal/siding/blue/corner{ - dir = 8 - }, -/turf/open/floor/iron/textured_corner{ - dir = 8 - }, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"xEe" = ( -/obj/machinery/door/poddoor{ - id = "teleporter" - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/black_ops_hall) -"xEL" = ( -/obj/structure/table, -/obj/machinery/recharger, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake_building) -"xEN" = ( -/obj/structure/table, -/obj/item/folder/red, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/deep_sci_turret) -"xEP" = ( -/turf/closed/wall/r_wall, -/area/awaymission/black_mesa/resonant_chamber) -"xHe" = ( -/obj/machinery/light/cold, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_hallway_two) -"xHl" = ( -/obj/effect/spawner/random/bioluminescent_plant, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/village_hallway) -"xId" = ( -/obj/machinery/computer/operating{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"xIi" = ( -/obj/structure/deployable_barricade/metal{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"xIo" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"xIS" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/turf/open/floor/plating, -/area/awaymission/black_mesa/hecu_zone_tunnel) -"xJD" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 4 - }, -/obj/effect/random_mob_placer/xen, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/entrance_internal_hall) -"xKM" = ( -/turf/open/misc/beach/coastline_t/sandwater_inner/xen{ - dir = 8 - }, -/area/awaymission/black_mesa/xen/entering_zone) -"xLa" = ( -/obj/machinery/atmospherics/components/tank, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"xLf" = ( -/obj/structure/table, -/obj/item/taperecorder/empty, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"xLv" = ( -/turf/open/chasm{ - planetary_atmos = 1 - }, -/area/awaymission/black_mesa/high_security_servers) -"xLJ" = ( -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/hecu_zone_infirmary) -"xNT" = ( -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/genetics_elevator) -"xOE" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/high_security_servers) -"xOU" = ( -/obj/structure/closet/body_bag/stasis, -/obj/effect/mob_spawn/corpse/human/assistant/spanishflu_infection, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"xPl" = ( -/turf/closed/indestructible/rock, -/area/awaymission/black_mesa/deep_sci_medbay) -"xPH" = ( -/obj/machinery/suit_storage_unit/hev, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_armory) -"xPM" = ( -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_hall) -"xQH" = ( -/obj/structure/table, -/obj/structure/sign/warning/no_smoking/circle/directional/north, -/obj/item/stack/sheet/plasteel, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"xQJ" = ( -/turf/open/misc/beach/coastline_t/sandwater_inner/xen, -/area/awaymission/black_mesa/xen/lost_camp_hallway) -"xRg" = ( -/obj/effect/baseturf_helper/black_mesa_xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/entering_zone) -"xRt" = ( -/obj/effect/spawner/random/bioluminescent_plant/weak, -/turf/open/misc/beach/coastline_t/xen{ - dir = 4 - }, -/area/awaymission/black_mesa/xen/acid_lake_hallway) -"xRw" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing/corner{ - dir = 1 - }, -/obj/structure/railing/corner{ - dir = 8 - }, -/turf/open/floor/engine, -/area/awaymission/black_mesa/xen/entering_zone) -"xSm" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"xTs" = ( -/obj/machinery/computer{ - dir = 8 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_decon_room) -"xTE" = ( -/obj/item/ammo_box/magazine/c35sol_pistol, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_medbay) -"xUH" = ( -/obj/structure/fluff/bus/dense{ - icon_state = "reartire" - }, -/turf/open/floor/iron/dark/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"xUK" = ( -/obj/structure/table, -/obj/item/plate, -/obj/item/plate, -/obj/item/plate, -/obj/item/plate, -/obj/item/plate, -/obj/item/plate, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"xVJ" = ( -/obj/machinery/power/emitter/ctf{ - dir = 1 - }, -/turf/open/floor/engine, -/area/awaymission/black_mesa/high_security_emitter) -"xVU" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/high_security_surgery) -"xXs" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"xXG" = ( -/turf/open/misc/beach/coastline_t/xen{ - dir = 5 - }, -/area/awaymission/black_mesa/xen/entering_zone) -"xXL" = ( -/obj/machinery/door/airlock/science/glass, -/turf/open/floor/iron/smooth, -/area/awaymission/black_mesa/black_ops_hallway_two) -"xYc" = ( -/obj/effect/random_mob_placer/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"xYn" = ( -/obj/structure/railing, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"xYp" = ( -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/xen/acid_lake) -"xZk" = ( -/obj/structure/marker_beacon/burgundy, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"xZM" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_button) -"xZR" = ( -/obj/structure/fluff/bus/passable{ - icon_state = "bottomdoor"; - layer = 3 - }, -/turf/open/floor/iron/dark/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"yae" = ( -/obj/structure/table, -/obj/item/folder/red, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"ycb" = ( -/obj/effect/mob_spawn/corpse/human/scientist_zombie, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) -"ycu" = ( -/obj/structure/inflatable, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"ycW" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/turf/open/floor/plating, -/area/awaymission/black_mesa/black_ops_science_room) -"ydd" = ( -/obj/machinery/door/airlock/wood/glass, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/employee_dorm_room) -"ydy" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark/textured_large, -/area/awaymission/black_mesa/black_ops_bus) -"ydM" = ( -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/high_security_surgery) -"yeu" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 4 - }, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/genetics_elevator) -"yeQ" = ( -/obj/effect/random_mob_placer/xen/zombie, -/obj/machinery/light/broken/directional/south, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_test_chambers) -"yfu" = ( -/obj/machinery/door/window/left/directional/east, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"ygM" = ( -/obj/effect/baseturf_helper/black_mesa_xen, -/turf/open/misc/xen, -/area/awaymission/black_mesa/xen/lost_camp) -"ygN" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_decon_room) -"ygT" = ( -/obj/structure/server{ - anchored = 1 - }, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"yhc" = ( -/obj/machinery/ore_silo, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_eng_storage) -"yhs" = ( -/obj/structure/table, -/obj/item/stack/sheet/plasteel, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_turret) -"yhH" = ( -/obj/structure/table, -/obj/machinery/light/cold/directional/north, -/obj/structure/microscope, -/obj/structure/alien/weeds/xen, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) -"yhM" = ( -/obj/structure/cable, -/obj/machinery/power/port_gen/pacman, -/obj/structure/alien/weeds/xen, -/turf/open/floor/plating, -/area/awaymission/black_mesa/resonant_chamber) -"yib" = ( -/obj/structure/chair/sofa/bench, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/employee_dorm_room) -"yix" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/hecu_zone_camp) -"yiT" = ( -/turf/open/floor/iron/stairs/medium, -/area/awaymission/black_mesa/black_ops_downstairs_atrium) -"yjH" = ( -/obj/item/assembly/shock_kit, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_storage) -"yky" = ( -/obj/structure/chair/office, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/hecu_zone_atrium) -"ykY" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/black_ops_science_room) -"ylv" = ( -/obj/machinery/door/airlock/science, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/iron/smooth_large, -/area/awaymission/black_mesa/deep_sci_chem) -"ylC" = ( -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_science_room) -"ylJ" = ( -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) -"ylS" = ( -/obj/effect/mob_spawn/corpse/human/hecu_zombie, -/turf/open/floor/plating, -/area/awaymission/black_mesa/dorm_tunnel) -"ymi" = ( -/obj/structure/spacevine/xen/thick, -/turf/open/water/beach/xen, -/area/awaymission/black_mesa/xen/acid_lake_hallway) - -(1,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(2,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(3,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -ach -xbD -ach -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(4,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -ach -ach -ach -ach -ach -ach -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -aQZ -aQZ -aQZ -aQZ -aQZ -aQZ -arz -arz -arz -aQZ -aQZ -aQZ -aQZ -aQZ -arz -arz -arz -"} -(5,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -ach -ach -cbD -ach -mNh -cbD -ach -ach -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -tiO -tiO -oqg -boM -tiO -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aPy -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -aQZ -arz -arz -arz -arz -arz -aQZ -arz -arz -"} -(6,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -tiO -tiO -tiO -tiO -tiO -tiO -tiO -tiO -tiO -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -ymi -ymi -ymi -ymi -ymi -ymi -ymi -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aPy -aPy -aPy -aPy -aPy -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -akM -aoE -aoE -aoE -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -aQZ -arz -arz -arz -arz -arz -aQZ -arz -arz -"} -(7,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -pcX -ymi -vAT -vAT -vAT -hBz -vAT -vAT -vAT -vAT -hbB -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -ymi -ymi -ymi -ymi -ymi -ymi -ymi -ymi -hbB -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -ach -ach -ach -ach -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aFu -aPy -aaA -afw -aaA -aPy -aPy -aPy -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aUI -aUI -aUI -aUI -aoE -aoE -aoE -aoE -aUI -aUI -aUI -aUI -aUI -aUI -aUI -aUI -aUI -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -aQZ -arz -arz -arz -arz -arz -aQZ -arz -arz -"} -(8,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -kHS -ymi -ymi -vAT -hbB -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -hbB -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -hbB -ymi -ymi -ymi -ymi -ymi -ymi -ymi -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -vAT -nMQ -kvq -erJ -ach -ach -ach -ach -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aDx -aDx -aaA -aaA -aaA -aaA -aaA -aaA -aPy -aPy -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aGf -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -aQZ -arz -arz -arz -arz -arz -aQZ -arz -arz -"} -(9,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -ymi -ymi -ymi -vAT -vAT -vAT -aoE -aoE -aoE -aoE -aoE -aoE -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -ymi -ymi -ymi -ymi -ymi -ymi -ymi -hbB -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -bmS -ach -ach -ach -ach -ach -ach -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aVU -aVU -aVU -aaA -aaA -aaA -aaA -aaA -azV -aaA -aaA -aPy -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aRW -aYT -aYT -aYT -aYT -aYT -aRW -aYT -aYT -aYT -aRW -aYT -aYT -aGf -aRR -asl -asl -asl -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(10,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -pcX -ymi -dyc -ymi -ymi -aoE -aoE -aoE -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -dfy -dfy -wvv -dfy -dfy -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -ymi -ymi -ymi -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -nMQ -kvq -ach -ach -ach -ach -ach -gpN -aKm -aKm -aKm -ach -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aVU -aVU -aVU -aVU -aPy -aPy -aPy -aPy -aPy -aaA -afw -aPy -aPy -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYs -asl -aYX -asl -asl -asl -asl -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -aQZ -aQZ -aQZ -aQZ -aQZ -arz -arz -arz -arz -aQZ -aQZ -aQZ -aQZ -aQZ -arz -arz -arz -"} -(11,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ymi -ymi -ymi -ymi -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -vAT -vAT -vAT -vAT -vAT -hbB -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -bmS -ach -ach -erJ -ach -ach -gpN -ach -ach -ach -ach -ach -ach -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aVU -aVU -aVU -aVU -aPy -aoE -aoE -aoE -aPy -aPy -aaA -aaA -aPy -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aGf -asl -asl -asl -akM -asl -asl -asl -asl -asl -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -aQZ -arz -arz -arz -arz -arz -aQZ -arz -arz -"} -(12,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -vAT -vAT -vAT -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -bmS -ach -ach -ach -ach -ach -gpN -ach -ach -ach -ach -ach -erJ -ach -ach -aoE -aoE -aoE -arz -arz -arz -arz -arz -aoE -asl -aVU -aVU -aVU -aoE -aoE -arz -aoE -aoE -aPy -aPy -aaA -aPy -aoE -aoE -arz -arz -arz -arz -arz -arz -aoE -aYT -aYT -aYT -aYT -aYT -aoE -aoE -aoE -aoE -aoE -aoE -afM -afM -afM -afM -afM -afM -afM -aoE -aoE -aoE -aRR -asl -asl -asl -asl -asl -asl -asl -asl -asl -asl -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -aQZ -arz -arz -arz -arz -arz -aQZ -arz -arz -"} -(13,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -vAT -vAT -vAT -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -llZ -kcn -ach -ach -ach -ach -aoE -aoE -aoE -aoE -aoE -ach -ach -ach -ach -ach -ach -aKm -aoE -arz -arz -arz -arz -arz -aoE -asl -aVU -aVU -aoE -aoE -arz -arz -arz -aoE -aoE -aPy -aaA -aPy -aPy -aoE -arz -arz -arz -arz -arz -aoE -aoE -aYT -aYT -aYT -aYT -aoE -aoE -arz -arz -arz -arz -aoE -aoE -awY -asl -asl -asl -avR -aoE -aoE -arz -aoE -aoE -aoE -aoE -aoE -asl -asl -asl -asl -asl -asl -asl -bnB -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -aQZ -arz -arz -arz -arz -arz -aQZ -arz -arz -"} -(14,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -vAT -hbB -vAT -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -vAT -vAT -vAT -vAT -bmS -erJ -ach -ach -ach -aoE -aoE -arz -arz -arz -aoE -aoE -aoE -aoE -aKm -ach -ach -ach -aoE -aoE -arz -arz -arz -arz -aoE -asl -asl -asl -aoE -arz -arz -arz -arz -arz -aoE -aPy -aaA -aaA -aPy -aoE -aoE -arz -arz -arz -aoE -aoE -aYT -aYT -aYT -aYT -aoE -aoE -arz -arz -arz -arz -arz -arz -aoE -aoE -asl -akM -asl -aoE -aoE -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aMb -aMb -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -aQZ -aQZ -aQZ -aQZ -aQZ -arz -arz -arz -arz -aQZ -aQZ -aQZ -aQZ -aQZ -arz -arz -arz -"} -(15,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -bbc -aoE -aoE -aoE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -vAT -vAT -vAT -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -vAT -vAT -vAT -bmS -ach -ach -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aKm -ijT -ach -iOl -aoE -aoE -arz -arz -arz -aoE -asl -aYX -asl -aoE -arz -arz -arz -arz -arz -aoE -aoE -aaA -aaA -aaA -aaA -aoE -arz -arz -aoE -aoE -aJx -aYT -aYT -aYT -aYT -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -abA -aZZ -aZZ -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(16,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wwU -tLG -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -dzY -vAT -vAT -vAT -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aKm -ach -ach -ach -aoE -arz -arz -arz -aoE -agb -asl -asl -aoE -arz -arz -arz -arz -arz -arz -aoE -aPy -afw -aaA -aaA -aoE -arz -arz -aoE -aIP -aJx -aYT -aYT -aYT -aYT -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -abA -aZZ -aZZ -abA -abA -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -aQZ -aQZ -aQZ -aQZ -aQZ -aQZ -arz -arz -aQZ -aQZ -aQZ -aQZ -aQZ -aQZ -aQZ -arz -arz -"} -(17,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -wwU -wwU -kYz -kYz -kYz -kYz -kYz -kYz -kYz -kYz -kYz -ceE -kYz -pNs -pNs -pNs -kYz -ceE -ceE -ceE -ceE -nvD -ceE -ceE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -nmo -vAT -ymi -vAT -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aKm -ach -ach -aoE -arz -arz -arz -aoE -asl -aYX -asl -aoE -arz -arz -arz -arz -arz -arz -aoE -aPy -aPy -azV -aaA -aoE -arz -arz -aoE -akM -aJx -aYT -aYT -aYT -aYT -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -abA -aZZ -aZZ -aZZ -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -arz -arz -arz -aQZ -arz -arz -aQZ -arz -arz -aQZ -arz -arz -"} -(18,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -kYz -gZV -uVv -rGk -rGk -gZV -otA -gZV -kYz -ceE -kYz -gZV -gZV -gZV -mxB -kYz -ceE -ceE -ceE -ceE -ceE -ceE -ceE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -oaB -ymi -dyc -vAT -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -ach -ach -aoE -arz -arz -arz -aoE -asl -asl -aVU -aoE -arz -arz -arz -arz -arz -arz -aoE -aoE -aPy -aaA -aaA -aoE -aoE -arz -aoE -aoE -aJx -aYT -aYT -aYT -aYT -aYT -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -abA -abA -abA -aJW -aZZ -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -aQZ -arz -arz -arz -arz -aQZ -arz -arz -aQZ -arz -arz -aQZ -arz -arz -"} -(19,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -ksv -gZV -tbC -dFF -uqs -gZV -gZV -ubi -kYz -ceE -kYz -gZV -gZV -gZV -gZV -mxB -kYz -ceE -ceE -ceE -ceE -ceE -ceE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -ymi -ymi -ymi -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -aoE -erJ -ach -aoE -aoE -arz -arz -aoE -aVU -aVU -aVU -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aPy -aaA -asl -asl -aoE -arz -arz -aoE -aJx -aYT -aYT -aYT -aYT -aYT -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -abA -abA -ahF -aZZ -aZZ -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -arz -aQZ -arz -arz -arz -aQZ -arz -arz -aQZ -arz -arz -aQZ -arz -arz -"} -(20,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wwU -wwU -wwU -wwU -qoM -wwU -wwU -dTJ -dTJ -dTJ -jCM -kYz -gZV -nNy -nNy -bqB -gZV -gZV -gZV -kYz -kYz -kYz -uKr -gZV -gZV -gZV -irD -kYz -ceE -ceE -ceE -ceE -ceE -ceE -bbc -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ymi -ymi -ymi -ymi -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -ach -xbD -aoE -aoE -aoE -aoE -arz -arz -arz -aoE -ach -ach -ach -aoE -arz -arz -aoE -aVU -aVU -aVU -aoE -aoE -arz -arz -arz -arz -arz -arz -aoE -aoE -aVU -asl -agb -aoE -arz -arz -aoE -aJx -aYT -aYT -aYT -aRW -aYT -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -abA -abA -abA -abA -aZZ -aZZ -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -arz -arz -arz -aQZ -arz -arz -arz -aQZ -aQZ -arz -aQZ -aQZ -arz -arz -arz -"} -(21,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wwU -wwU -wwU -wwU -wwU -dTJ -dTJ -dTJ -dTJ -dTJ -dTJ -bGH -fYd -gZV -gZV -gZV -gZV -gZV -gZV -gZV -pPh -gHY -pPh -gZV -hcB -gZV -gZV -gZV -pNs -ceE -ceE -ceE -ceE -ceE -ceE -ceE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ymi -ymi -ymi -ymi -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ptC -ach -ach -ach -ach -ach -aoE -arz -arz -arz -aoE -ach -ach -ach -aoE -arz -arz -aoE -aVU -aVU -aVU -aVU -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aVU -asl -asl -aoE -arz -arz -aoE -aoE -aYT -aYT -aYT -aYT -aYT -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -abA -abA -abA -abA -abA -aZZ -abA -ahF -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(22,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -wwU -wwU -wwU -wwU -dTJ -dTJ -dTJ -dTJ -dTJ -dTJ -dTJ -dTJ -jCM -kYz -gZV -gZV -gZV -gZV -gZV -gZV -gZV -kYz -kYz -kYz -gZV -gZV -bJE -gZV -gZV -pNs -ceE -ceE -ceE -ceE -ceE -ceE -rMt -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -ymi -ymi -vAT -vAT -aoE -aoE -aoE -arz -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ach -ach -ach -lNq -ach -ach -aoE -arz -arz -arz -aoE -ach -ach -ach -aoE -arz -arz -aoE -aVU -aVU -aVU -aVU -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -asl -asl -aoE -arz -arz -arz -aoE -aoE -aYT -aYT -aYT -aYT -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -abA -abA -abA -abA -abA -abA -aZZ -aZZ -abA -abA -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -"} -(23,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wwU -wwU -wwU -wwU -wwU -dTJ -dTJ -dTJ -wwU -wwU -dTJ -dTJ -wwU -wwU -wwU -ksv -gZV -gZV -gZV -gZV -gZV -gZV -gZV -kYz -ceE -kYz -gZV -gZV -neN -neN -neN -cQD -byK -byK -byK -byK -byK -byK -jRP -ygM -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -vAT -vAT -hbB -vAT -vAT -aoE -aoE -aoE -tiO -xRt -tiO -tiO -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -ptC -eXb -ach -iJu -ach -aoE -arz -arz -arz -aoE -ach -ach -ach -aoE -arz -arz -aoE -aVU -aVU -aVU -aVU -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aoE -asl -asl -aoE -aoE -arz -arz -arz -aoE -aYT -aYT -aYT -aYT -aYT -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -abA -abA -abA -abA -abA -abA -aZZ -aZZ -abA -abA -abA -abA -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(24,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wwU -wwU -wwU -wwU -wwU -dTJ -dTJ -dTJ -wwU -wwU -wwU -dTJ -dTJ -mqs -sYI -sYI -dsQ -eYQ -tpK -wGZ -neN -tBP -neN -jVn -dsQ -byK -dsQ -neN -dCG -kht -gZV -gZV -kYz -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -eXb -cxv -eXb -wIx -aoE -aoE -arz -arz -arz -aoE -ach -ach -aKm -aoE -arz -arz -aoE -aoE -aVU -aVU -aVU -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aoE -asl -asl -aVU -aoE -arz -arz -arz -aoE -aYT -aYT -aYT -aYT -aYT -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -abA -abA -abA -abA -abA -abA -abA -aZZ -abA -abA -abA -abA -abA -abA -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(25,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wwU -wwU -wwU -wwU -wwU -wwU -dTJ -dTJ -wwU -wwU -wwU -wwU -dTJ -dTJ -wwU -wwU -wwU -kYz -kYz -kYz -dsQ -pPh -kYz -kYz -kYz -kYz -ceE -kYz -gZV -gdX -kht -gZV -gZV -ksv -kYz -kYz -kYz -rmA -rmA -mkM -ceE -ceE -gpk -wyy -vZr -rJt -rJt -wyy -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -hbB -vAT -vAT -vAT -aoE -aoE -aoE -aoE -aoE -aoE -aoE -tiO -tiO -xRt -tiO -tiO -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ach -eXb -ach -ach -aoE -arz -arz -arz -aoE -aoE -ach -ach -aKm -aoE -arz -arz -arz -aoE -aVU -aVU -aVU -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aoE -asl -asl -aVU -aoE -arz -arz -arz -aoE -aYT -aYT -aYT -aYT -aYT -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -abA -abA -abA -abA -abA -abA -abA -abA -aZZ -aZZ -abA -aVx -abA -abA -abA -abA -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(26,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wwU -wwU -wwU -wwU -wwU -wwU -dTJ -dTJ -wwU -wwU -wwU -wwU -dTJ -dTJ -dTJ -wwU -wwU -wwU -wwU -wwU -dsQ -gZV -kYz -ceE -ceE -ceE -ceE -kYz -uKr -gdX -tgl -gZV -gZV -pPh -gHY -gZV -pPh -hlW -hlW -hlW -ceE -ceE -gpk -wyy -wyy -wyy -wyy -wyy -rJt -wyy -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -vAT -vAT -vAT -vAT -hbB -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -ymi -ymi -ymi -ymi -vAT -vAT -hbB -vAT -vAT -vAT -vAT -vAT -vAT -vAT -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aKm -aKm -aKm -aoE -arz -arz -aoE -aoE -ach -ach -ach -aKm -aoE -arz -arz -arz -aoE -aVU -aVU -aVU -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -asl -asl -asl -aoE -arz -arz -arz -aoE -aYT -aYT -aYT -aYT -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -aZZ -aZZ -abA -abA -abA -abA -abA -abA -abA -abA -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -arz -arz -arz -arz -arz -"} -(27,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wwU -wwU -hNG -wwU -wwU -pDm -sNz -fBH -sNz -sNz -mpY -wwU -wwU -dTJ -dTJ -wwU -wwU -wwU -wwU -xRg -dsQ -gZV -kYz -ceE -ceE -ceE -ceE -kYz -uKr -gdX -kht -gZV -gZV -pPh -iAn -gZV -pPh -hlW -hlW -hlW -ceE -ceE -gpk -wyy -wyy -wyy -wyy -wyy -wyy -wyy -rJt -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -ymi -ymi -ymi -ymi -ymi -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -vAT -rzS -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aKm -aKm -aoE -arz -aoE -aoE -ach -ach -ach -ach -aKm -aoE -arz -arz -arz -aoE -aVU -aVU -aVU -aVU -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -asl -aYX -asl -aoE -arz -arz -arz -aoE -aYT -aYT -aYT -aYT -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -abA -abA -abA -abA -abA -abA -abA -aVu -abA -abA -abA -aZZ -aZZ -ahF -abA -abA -aVu -abA -abA -abA -abA -abA -abA -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -arz -arz -arz -arz -arz -arz -"} -(28,1,1) = {" -arz -arz -arz -arz -arz -arz -aoE -aoE -wwU -wwU -wwU -wwU -wwU -pDm -qxg -mjd -xbj -tKZ -sCL -xXG -mpY -wwU -dTJ -dTJ -dTJ -wwU -wwU -kYz -kYz -dsQ -pPh -kYz -kYz -kYz -kYz -ceE -kYz -gZV -gdX -tgl -gZV -gZV -ksv -kYz -kYz -kYz -hAa -pcK -oyX -ceE -ceE -gpk -vZr -rJt -wyy -wyy -wyy -rPD -wyy -rJt -rPD -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -dfy -dzX -lkz -dfy -aoE -aoE -aoE -aoE -vAT -vAT -vAT -vAT -hbB -vAT -vAT -ymi -ymi -ymi -ymi -ymi -vAT -vAT -vAT -vAT -vAT -hbB -vAT -vAT -llZ -kcn -coX -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aKm -aoE -aoE -aoE -ach -ach -ach -ach -ach -aKm -aoE -arz -arz -arz -aoE -aVU -aWz -aVU -aVU -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -asl -asl -asl -aoE -arz -arz -arz -aoE -aYT -aYT -aYT -aGf -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -aZZ -aZZ -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -arz -aQZ -arz -aQZ -arz -arz -"} -(29,1,1) = {" -arz -arz -arz -arz -arz -arz -aoE -wwU -wwU -wwU -wwU -wwU -wwU -fnr -mjd -pto -xbj -pto -pto -sCL -xXG -mpY -wwU -dTJ -dTJ -wwU -wwU -kYz -jnZ -xsB -gZV -gZV -izv -qaj -kYz -ceE -kYz -gZV -gdX -kht -gZV -gZV -kYz -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -aoE -aoE -aoE -aoE -rJt -wyy -wyy -wyy -rJt -rJt -pbR -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -aoE -aoE -vAT -vAT -vAT -vAT -vAT -vAT -vAT -ymi -ymi -ymi -ymi -ymi -vAT -vAT -vAT -vAT -vAT -vAT -vAT -bmS -ach -ach -ach -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aKm -aKm -aKm -aKm -aKm -uWg -ach -ach -ach -ach -ach -ach -ach -aoE -arz -arz -arz -aoE -aVU -aVU -aVU -aVU -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aVU -agb -asl -aoE -arz -arz -arz -aoE -aoE -afM -afM -aRR -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -aZZ -aZZ -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -vmm -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -aQZ -arz -arz -arz -arz -arz -"} -(30,1,1) = {" -arz -arz -arz -arz -arz -arz -aoE -wwU -wwU -wwU -wwU -wwU -wwU -fnr -fhT -pto -xbj -pto -pto -pto -sCL -xXG -sNz -dTJ -dTJ -wwU -wwU -ksv -gZV -neN -xmK -gZV -gZV -qaj -kYz -ceE -kYz -gZV -gZV -neN -gZV -gZV -pNs -ceE -ceE -ceE -ceE -byK -byK -jRP -ceE -aoE -arz -arz -aoE -aoE -imi -wyy -wyy -wyy -wyy -wyy -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -lkz -dzX -dfy -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -vAT -vAT -bmS -ach -ach -ach -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -ach -ach -ach -ach -ach -ach -ach -ach -ach -ach -ach -ach -erJ -ach -ach -aoE -aoE -arz -arz -arz -aoE -aoE -aVU -aVU -aVU -aoE -aoE -arz -arz -arz -arz -arz -arz -aoE -aVU -asl -asl -aoE -arz -arz -arz -arz -aoE -asl -asl -aVU -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -abA -abA -abA -acX -acX -acX -acX -acX -acX -abA -abA -abA -abA -abA -aVx -aZZ -aZZ -abA -abA -abA -abA -abA -acX -acX -acX -acX -acX -acX -abA -abA -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -aQZ -arz -arz -arz -arz -arz -arz -"} -(31,1,1) = {" -arz -arz -arz -arz -arz -arz -aoE -aoE -wwU -wwU -qoM -wwU -wwU -fnr -fhT -pto -fBH -pto -pto -pto -pto -tKZ -sCL -ocV -dTJ -dTJ -jCM -kYz -jnZ -neN -gZV -xmK -gZV -qaj -kYz -kYz -kYz -gZV -gZV -bJE -neN -neN -cQD -byK -byK -byK -byK -byK -ceE -rMt -aoE -aoE -arz -arz -arz -aoE -rJt -wyy -wyy -wyy -wyy -wyy -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -vAT -bmS -ach -erJ -ach -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aKm -ach -ach -ach -ach -ach -ach -ach -ach -ach -ach -ach -ach -ach -ach -ach -aoE -aoE -arz -arz -arz -arz -arz -aoE -aVU -aVU -aVU -aVU -aoE -arz -arz -arz -arz -arz -arz -aoE -aoE -asl -asl -aoE -aoE -arz -arz -arz -aoE -aVU -asl -aVU -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -abA -abA -abA -abA -abA -acX -ajm -azY -awP -awP -acX -abA -abA -abA -abA -abA -abA -aZZ -aZZ -abA -abA -abA -abA -abA -acX -aPd -azY -azY -azY -acX -abA -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(32,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wwU -wwU -wwU -pDm -qxg -fhT -pto -xbj -pto -pto -pto -pto -pto -dRN -ocV -dTJ -dTJ -bGH -fYd -gZV -kvc -dGM -dGM -lHB -gZV -pPh -gHY -pPh -gZV -gZV -hcB -gZV -gZV -pNs -ceE -ceE -ceE -ceE -ceE -ceE -ceE -aoE -arz -arz -arz -arz -aoE -rJt -rJt -wyy -wyy -wyy -wyy -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -cQF -ach -ach -ach -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aKm -ach -ach -ach -ach -ach -ach -ach -ach -ach -ach -ach -ach -ach -ach -ach -ach -aoE -aoE -arz -arz -arz -arz -arz -arz -aoE -aVU -aVU -aVU -aVU -aoE -aoE -arz -arz -arz -arz -arz -arz -aoE -asl -asl -asl -aoE -arz -arz -arz -aoE -aVU -agb -asl -aoE -arz -arz -arz -arz -arz -arz -aoE -aoE -abA -abA -abA -abA -abA -abA -acX -aHH -azY -azY -azY -acX -abA -abA -abA -abA -abA -aZZ -aZZ -aZZ -abA -abA -abA -aZZ -aZZ -avQ -azY -azY -aiy -aua -acX -abA -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -arz -arz -arz -arz -arz -"} -(33,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wwU -pDm -qxg -mjd -pto -pto -xbj -pto -pto -pto -pto -pto -dRN -ocV -wwU -dTJ -jCM -kYz -gZV -tgO -sEU -uHk -dGM -qaj -kYz -kYz -kYz -uKr -gZV -lHB -gZV -irD -kYz -ceE -ceE -ceE -ceE -ceE -ceE -ceE -aoE -arz -arz -arz -arz -aoE -aoE -wyy -wyy -wyy -wyy -wyy -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -rzS -ach -ach -ach -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aKm -ach -ach -ach -ach -ach -ach -erJ -ach -ach -ach -ach -ach -ach -ach -ach -ach -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aVU -aVU -aVU -aYX -aoE -aoE -arz -arz -arz -arz -arz -aoE -asl -asl -asl -aoE -arz -arz -arz -aoE -aVU -asl -asl -aoE -arz -arz -arz -arz -arz -aoE -aoE -abA -abA -abA -abA -abA -abA -abA -acX -aVO -azY -aiy -azY -acX -abA -abA -abA -abA -abA -aZZ -aZZ -aZZ -aZZ -aZZ -aZZ -aZZ -abA -acX -arq -azY -azY -aua -acX -abA -abA -abA -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -arz -arz -arz -arz -arz -arz -"} -(34,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wwU -fnr -mjd -pto -pto -pto -xbj -pto -pto -gaL -pto -pto -dRN -ocV -wwU -wwU -wwU -ksv -dGM -loc -xrM -ceE -sEU -qaj -kYz -ceE -kYz -gZV -gZV -gZV -gZV -kYz -kYz -ceE -ceE -ceE -ceE -ceE -aoE -aoE -aoE -arz -arz -arz -arz -arz -aoE -wyy -vZr -wyy -wyy -wyy -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -ach -ach -ach -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aKm -ach -ach -ach -ach -ach -ach -ach -ach -ach -ach -ach -ach -aKm -aKm -ach -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aVU -aVU -aVU -aVU -aVU -aoE -arz -arz -arz -arz -arz -aoE -asl -asl -asl -aoE -arz -arz -arz -aoE -asl -asl -asl -aoE -arz -arz -arz -arz -arz -aoE -abA -abA -abA -abA -abA -abA -abA -abA -acX -aVO -azY -azY -azY -avQ -aZZ -aZZ -aZZ -aZZ -aZZ -aZZ -aZZ -aZZ -aZZ -abA -abA -abA -abA -acX -aPN -azY -azY -aua -acX -abA -abA -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -arz -aQZ -arz -aQZ -arz -arz -"} -(35,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wwU -fnr -fhT -pto -pto -pto -fBH -pto -pto -pto -pto -pto -dRN -ocV -wwU -mqs -sYI -dsQ -neN -loc -fYW -vVP -sEU -qaj -kYz -ceE -kYz -gZV -gZV -gZV -kYz -kYz -ceE -ceE -ceE -ceE -ceE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -wyy -wyy -wyy -wyy -wyy -wyy -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -hck -hck -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aKm -aKm -ach -ach -ijT -ach -ach -ach -ach -aKm -aKm -aKm -aKm -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -asl -asl -asl -asl -aVU -aoE -aoE -arz -arz -arz -arz -aoE -aVU -asl -asl -aoE -arz -arz -arz -aoE -asl -asl -aoE -aoE -arz -arz -arz -arz -aoE -aoE -abA -abA -avI -abA -abA -aVu -abA -abA -acX -aVO -azY -aiy -azY -acX -abA -abA -abA -abA -ahF -abA -aZZ -aZZ -abA -abA -abA -abA -abA -acX -acX -avQ -acX -acX -acX -abA -abA -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -aQZ -arz -arz -arz -arz -arz -"} -(36,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -adW -wwU -fnr -fhT -pto -pto -iYC -xRw -euy -pto -pto -pto -pto -dRN -xXG -mpY -wwU -wwU -kYz -kYz -vVP -ceE -ceE -kYz -kYz -kYz -ceE -kYz -pNs -pNs -pNs -kYz -ceE -ceE -ceE -ceE -ceE -ceE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wyy -wyy -wyy -wyy -wyy -wyy -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -ach -wjB -rIg -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ach -ach -ach -ach -ach -ach -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -asl -asl -asl -asl -aIP -aoE -arz -arz -arz -arz -aoE -aVU -asl -asl -aoE -aoE -arz -aoE -aoE -asl -asl -aoE -arz -arz -arz -arz -arz -aoE -abA -abA -avI -aiA -avI -abA -abA -abA -abA -acX -akP -azY -avq -azn -acX -abA -abA -abA -abA -abA -aZZ -aZZ -aZZ -abA -abA -abA -abA -abA -acX -arq -azY -azY -azY -acX -abA -abA -abA -abA -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -aQZ -arz -arz -arz -arz -arz -arz -"} -(37,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wwU -fnr -fhT -pto -pto -dly -gSH -iRJ -pto -pto -pto -pto -pto -sCL -ocV -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -tLG -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wyy -wyy -wyy -wyy -wyy -wyy -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -rIg -qiS -qiS -rIg -rIg -rIg -rIg -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ach -ach -ach -ach -ach -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -asl -asl -asl -asl -aoE -arz -arz -arz -arz -aoE -aVU -asl -asl -aFu -aoE -aoE -aoE -aVU -asl -asl -aoE -arz -arz -arz -arz -arz -aoE -abA -abA -abA -avI -abA -abA -abA -abA -abA -acX -acX -acX -acX -acX -acX -abA -abA -abA -abA -abA -abA -aZZ -abA -abA -aVx -abA -abA -abA -acX -aPN -azY -aFt -awP -acX -abA -abA -abA -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(38,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wwU -wwU -fnr -fhT -pto -pto -ndA -jrz -dBl -pto -pto -pto -pto -pto -dRN -ocV -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -tLG -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -nvD -ceE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wyy -wyy -wyy -wyy -wyy -wyy -aoE -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -rIg -rIg -qiS -qiS -rIg -rIg -rIg -rIg -rIg -rIg -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ach -ach -ach -ach -ach -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -asl -asl -asl -asl -aoE -arz -arz -arz -arz -aoE -aoE -asl -agb -asl -asl -asl -asl -asl -asl -asl -aoE -arz -arz -arz -arz -aoE -aoE -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -aZZ -aZZ -aZZ -abA -abA -abA -abA -abA -acX -acX -acX -acX -acX -acX -abA -abA -abA -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -arz -arz -arz -arz -arz -"} -(39,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wwU -wwU -fnr -fhT -pto -pto -pto -pto -pto -pto -pto -pto -pto -pto -dRN -ocV -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -tLG -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -ceE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wyy -wyy -wyy -wyy -wyy -rJt -aoE -arz -arz -arz -arz -aoE -aoE -aoE -tTS -tTS -tTS -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -rIg -aoE -aoE -aoE -aoE -aoE -aoE -aoE -rIg -aoE -aoE -rIg -rIg -rIg -rIg -rIg -qiS -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ach -ach -erJ -ach -ach -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aIP -asl -asl -aoE -aoE -arz -arz -arz -arz -aoE -aHm -asl -asl -asl -aYX -asl -agb -aVU -aoE -aoE -arz -arz -arz -arz -aoE -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -aVx -abA -abA -abA -abA -aVu -abA -abA -abA -aZZ -aZZ -aZZ -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -arz -arz -arz -arz -arz -arz -"} -(40,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wwU -wwU -fnr -fhT -pto -pto -pto -pto -pto -pto -pto -pto -pto -pto -dRN -ocV -wwU -nnI -wwU -wwU -wwU -wwU -wwU -wwU -wwU -aoE -aoE -aoE -aoE -aoE -ceE -ceE -ceE -ceE -ceE -bbc -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rJt -wyy -wyy -wyy -wyy -rJt -aoE -arz -arz -arz -aoE -aoE -tTS -tTS -tTS -tTS -tTS -wbr -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -qiS -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ach -ach -ach -ach -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -asl -asl -asl -aoE -arz -arz -arz -arz -aoE -ayI -asl -asl -asl -asl -asl -asl -aoE -aoE -arz -arz -arz -arz -arz -aoE -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -aZZ -aZZ -aZZ -abA -aVu -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -arz -aQZ -arz -aQZ -arz -arz -"} -(41,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wwU -fnr -uoz -pto -pto -pto -pto -pto -pto -pto -pto -pto -pto -hZg -ocV -wwU -fnG -wwU -pDm -sNz -sNz -mpY -wwU -wwU -aoE -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rJt -wyy -wyy -wyy -wyy -rJt -aoE -arz -arz -aoE -aoE -tTS -tTS -nSi -nSi -nSi -nSi -tTS -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -eaL -qiS -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -gAR -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -gpN -gpN -gpN -gpN -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -asl -asl -asl -aoE -arz -arz -arz -arz -arz -aoE -aoE -aVU -aVU -aVU -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -aoE -abA -abA -abA -abA -abA -acX -acX -acX -acX -acX -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -aVx -aZZ -aZZ -aZZ -abA -abA -abA -abA -abA -abA -abA -abA -aVx -abA -abA -abA -abA -abA -abA -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -aQZ -arz -arz -arz -arz -arz -"} -(42,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wwU -hQK -tsr -uoz -iZb -iZb -iZb -iZb -pto -pto -pto -pto -hZg -vhn -xKM -wwU -wwU -pDm -qxg -dDw -sCL -ocV -wwU -wwU -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rJt -wyy -rPD -wyy -wyy -wyy -aoE -arz -arz -aoE -tTS -nSi -nSi -nSi -cjr -uwo -nSi -tTS -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -eaL -qiS -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -tOP -okq -okq -tOP -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -akd -aSX -akd -aoE -aoE -aoE -arz -arz -arz -arz -aoE -aoE -aVU -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aoE -abA -abA -abA -abA -abA -acX -aVO -aiy -azY -acX -abA -abA -abA -abA -ahF -aZZ -atD -aZZ -abA -abA -abA -aZZ -aZZ -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -aQZ -arz -arz -arz -arz -arz -arz -"} -(43,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wwU -hQK -puz -puz -puz -puz -tsr -uoz -pto -pto -hZg -vhn -xKM -wwU -wwU -wwU -fnr -mjd -pto -hZg -ocV -wwU -wwU -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rJt -wyy -wyy -wyy -wyy -rJt -aoE -arz -arz -aoE -tTS -nSi -duw -sOH -rwu -tTS -nSi -tTS -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -wYo -rIg -rIg -rIg -rIg -rIg -rIg -eaL -eaL -qiS -qiS -wYo -rIg -rIg -rIg -iqQ -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -ppY -ppY -tOP -tOP -okq -tOP -tOP -tOP -tOP -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -atW -atW -atW -atW -atW -atW -atW -atW -aoE -aoE -aoE -arz -arz -arz -aoE -aVU -aVU -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aoE -abA -abA -acX -acX -acX -acX -aVO -azY -azY -acX -abA -abA -abA -abA -aZZ -aZZ -aZZ -aZZ -aZZ -abA -abA -aDa -aZZ -aZZ -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(44,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -wwU -wwU -wwU -qoM -hQK -tsr -uoz -hZg -vhn -xKM -wwU -wwU -wwU -wwU -fnr -uoz -hZg -vhn -xKM -wwU -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wyy -wyy -vZr -wyy -wyy -rJt -aoE -arz -arz -aoE -tTS -nSi -tce -rwu -tTS -tTS -nSi -tTS -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rzr -rIg -rIg -rIg -eaL -dIi -qiS -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -ppY -tOP -tOP -tOP -okq -okq -tOP -oRV -tOP -tOP -tOP -ppY -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -dTv -aoE -aoE -arz -arz -aoE -aVU -aVU -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aoE -abA -abA -acX -abQ -azY -acX -aVO -azY -azY -avQ -aZZ -aZZ -aZZ -aZZ -amz -aZZ -acg -aZZ -amz -aZZ -aZZ -aZZ -aZZ -aZZ -abA -abA -abA -acX -acX -acX -acX -acX -abA -abA -abA -abA -abA -abA -abA -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aQZ -arz -arz -"} -(45,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -wwU -wwU -wwU -hQK -puz -puz -xKM -wwU -wwU -hNG -wwU -wwU -hQK -puz -puz -xKM -wwU -wwU -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wyy -wyy -wyy -wyy -wyy -rJt -aoE -arz -arz -aoE -tTS -nSi -uwo -tTS -tTS -tTS -nSi -tTS -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -eaL -eaL -qiS -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -arz -arz -aoE -aoE -ppY -tOP -tOP -tOP -okq -okq -tOP -tOP -tOP -tOP -tOP -tOP -ppY -ppY -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -aoE -aoE -arz -aoE -aVU -aJl -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aoE -abA -abA -acX -aqa -aiy -avQ -azY -azY -azY -acX -abA -abA -abA -abA -aZZ -aZZ -aZZ -aZZ -aZZ -abA -abA -ahF -aZZ -aZZ -ahF -abA -abA -acX -aPd -azY -azY -acX -abA -abA -abA -abA -aVu -abA -abA -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(46,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rJt -wyy -wyy -wyy -wyy -wyy -rJt -aoE -arz -arz -aoE -tTS -nSi -nSi -nSi -hgE -nSi -nSi -tTS -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -qiS -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -arz -arz -aoE -ppY -ppY -tOP -tOP -tOP -okq -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -ppY -tOP -aoE -aoE -arz -arz -arz -arz -arz -aoE -aoE -atW -atW -atW -aBq -aBq -aBq -aBq -aBq -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -aoE -arz -aoE -aoE -aVU -aoE -aoE -arz -aoE -aoE -aoE -arz -arz -aoE -aoE -ajY -abA -acX -abQ -azY -acX -azY -aiy -azY -acX -abA -abA -abA -abA -aZZ -aZZ -atD -aZZ -abA -abA -abA -abA -aZZ -aZZ -aZZ -abA -abA -acX -azY -aiy -azY -acX -abA -abA -abA -abA -abA -abA -abA -abA -abA -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(47,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -qoM -wwU -wwU -wwU -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wyy -wyy -wyy -wyy -wyy -wyy -aoE -aoE -arz -arz -aoE -tTS -tTS -tTS -tTS -tTS -tTS -tTS -tTS -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -qiS -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -arz -aoE -aoE -ppY -tOP -tOP -tOP -tOP -okq -tOP -tOP -tOP -jzg -jzg -jzg -jzg -jzg -jzg -jzg -tOP -cxQ -aoE -aoE -arz -arz -arz -aoE -aoE -atW -atW -atW -atW -aBq -aNG -aNG -aNG -aBq -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -aoE -arz -arz -aoE -aVU -aVU -aoE -aoE -aoE -aIP -aoE -aoE -arz -aoE -aBC -aIv -abA -acX -acX -acX -acX -akP -anV -akP -acX -abA -abA -abA -abA -abA -aZZ -aZZ -abA -abA -abA -abA -abA -aZZ -aZZ -aZZ -aZZ -aZZ -avQ -azY -azY -aua -acX -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(48,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -wwU -uhA -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rJt -wyy -wyy -wyy -wyy -wyy -rJt -aoE -arz -arz -arz -aoE -aoE -tTS -okH -tTS -mUb -tTS -cFU -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -qiS -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -wYo -rIg -rIg -aoE -aoE -arz -arz -arz -arz -arz -aoE -ppY -ppY -tOP -tOP -tOP -tOP -tOP -okq -tOP -tOP -jzg -qoi -okq -hqT -okq -qoi -jzg -tOP -ppY -ppY -aoE -arz -arz -aoE -aoE -atW -atW -atW -atW -atW -aBq -aOM -aPL -aOM -aBq -atW -atW -atW -atW -atW -atW -ard -atW -atW -atW -atW -atW -aoE -aoE -arz -aoE -aVU -aVU -aoE -asl -akX -asl -akM -aoE -arz -aoE -aBC -aIv -abA -abA -abA -abA -acX -acX -acX -acX -acX -abA -abA -abA -abA -abA -abA -aZZ -abA -abA -abA -abA -abA -aZZ -aZZ -aZZ -abA -abA -acX -azY -azY -aZj -acX -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(49,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -wwU -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rJt -wyy -wyy -wyy -wyy -wyy -wyy -aoE -arz -arz -arz -arz -aoE -okH -rXj -okH -tTS -tTS -tTS -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -iqQ -rIg -rIg -rIg -rIg -rIg -rIg -rIg -qiS -qiS -qiS -qiS -qiS -qiS -hKg -qiS -qiS -hKg -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -arz -arz -aoE -ppY -tOP -tOP -tOP -tOP -tOP -okq -okq -tOP -tOP -jzg -okq -qEg -okq -okq -qEg -jzg -tOP -tOP -tOP -aoE -aoE -aoE -aoE -atW -atW -atW -atW -atW -atW -aBq -aOM -aOM -aOM -aBq -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -aoE -arz -aoE -aoE -aJl -aVU -aYw -asl -aWl -aKC -aoE -arz -aoE -aBC -aIv -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -aZZ -abA -abA -abA -aVx -abA -aZZ -aZZ -aZZ -abA -abA -acX -azY -aiy -aua -acX -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(50,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -tRF -tRF -tRF -tRF -tRF -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wyy -wyy -wyy -wyy -wyy -wyy -aoE -arz -arz -arz -arz -arz -aoE -kZh -okH -tTS -tTS -gHF -tTS -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -qiS -qiS -qiS -qiS -qiS -wYs -wYs -wYs -wYs -wYs -wYs -qlP -qlP -mWj -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -arz -arz -aoE -ppY -tOP -tOP -tOP -tOP -tOP -tOP -okq -tOP -tOP -jzg -tWk -okq -okq -okq -okq -jzg -tOP -tOP -tOP -tOP -aoE -aoE -atW -atW -atW -atW -atW -atW -atW -aBq -aBq -aFD -aBq -aBq -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -ard -atW -atW -aoE -arz -arz -aoE -aVU -asl -akM -asl -asl -aoE -aoE -arz -aoE -aBC -aIv -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -aZZ -abA -abA -abA -abA -abA -aZZ -aZZ -aZZ -abA -abA -acX -azY -azY -azY -acX -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(51,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -tRF -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -wyy -wyy -wyy -wyy -wyy -wyy -rJt -aoE -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -nXD -nXD -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -qiS -wYs -wYs -wYs -wYs -wYs -kjy -rtR -wYs -qqt -vIy -vIy -vIy -wYs -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -arz -arz -aoE -tOP -tOP -tOP -ujk -tOP -tOP -tOP -okq -tOP -tOP -jzg -jzg -jzg -okq -jzg -jzg -jzg -tOP -tOP -tOP -tOP -tOP -aoE -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -arr -atW -atW -atW -atW -atW -atW -ard -aZB -ard -atW -aoE -aoE -arz -aoE -aoE -aWl -asl -aoK -axj -aoE -arz -aoE -aoE -aBC -aIv -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -acX -acX -acX -acX -acX -avQ -acX -acX -acX -abA -abA -abA -aZZ -aZZ -abA -abA -acX -acX -acX -acX -acX -abA -abA -abA -abA -abA -aVu -abA -abA -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(52,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -tRF -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wyy -wyy -wyy -wyy -wyy -rPD -wyy -wyy -vZr -wyy -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -pMg -pMg -pMg -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -qiS -qiS -wYs -fYD -vIy -nLL -vIy -vIy -mcx -wYs -qqt -vIy -vIy -mcx -wYs -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -arz -arz -aoE -tOP -tOP -tOP -tOP -tOP -tOP -okq -okq -tOP -tOP -tOP -tOP -tOP -okq -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -aoE -atW -atW -ard -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -arr -alr -arr -atW -atW -atW -atW -atW -atW -ard -atW -atW -atW -aoE -arz -arz -aoE -asl -akM -asl -aKC -aoE -arz -aoE -aBC -aBC -aIv -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -acX -azY -azY -azY -acX -azY -azY -azY -acX -abA -abA -aZZ -aZZ -abA -ahF -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(53,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -tRF -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -xQJ -lGM -qVW -cIf -wyy -wyy -wyy -wyy -wyy -wyy -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -pMg -pMg -pMg -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -eaL -eaL -rIg -rIg -sya -qiS -lDP -vsF -uam -nMS -gvI -vIy -vIy -wYs -qqt -vIy -vIy -eif -wYs -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -arz -arz -aoE -tOP -tOP -tOP -tOP -tOP -tOP -okq -tOP -tOP -tOP -tOP -tOP -tOP -okq -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -aoE -atW -ard -atf -ard -atW -ard -atW -atW -atW -atW -atW -atW -atW -atW -arr -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -aoE -arz -arz -aoE -akX -axj -aWl -aoE -aoE -arz -aoE -aBC -aBC -aIv -abA -abA -abA -abA -aVu -abA -abA -abA -abA -abA -acX -awP -aiy -azY -acX -azY -aiy -aua -acX -abA -abA -aZZ -aZZ -aZZ -abA -aVx -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(54,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -tRF -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -xQJ -bgC -dhs -fPX -qVW -wyy -wyy -wyy -wyy -wyy -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -pMg -pMg -pMg -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -eaL -eaL -eaL -rIg -rIg -wmF -qiS -lDP -vsF -qTQ -xEL -gvI -vIy -vIy -qlP -vIy -vIy -vIy -gCt -wYs -qiS -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -aoE -arz -arz -arz -arz -arz -aoE -tOP -oRV -tOP -tOP -tOP -tOP -tOP -okq -tOP -tOP -oRV -tOP -tOP -okq -tOP -tOP -tOP -tOP -tOP -oRV -tOP -tOP -aoE -atW -atW -ard -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -arr -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -aoE -aoE -arz -aoE -aoE -aIP -aoE -aoE -arz -aoE -aoE -aBC -aBC -aIv -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -acX -azY -azY -azY -avQ -azY -azY -aua -acX -abA -abA -aZZ -aZZ -aZZ -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(55,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -tRF -tRF -tRF -tRF -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wdS -dhs -xaa -dhs -hDu -wyy -wyy -wyy -wyy -wyy -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aoE -uOn -hti -hti -pMg -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -eaL -xqs -eaL -eaL -rIg -qiS -qiS -wYs -vsF -gGU -qTQ -gvI -vIy -vIy -wYs -vIy -vIy -wYs -wYs -wYs -wYs -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -arz -aoE -tOP -tOP -tOP -tOP -tOP -tOP -tOP -okq -tOP -tOP -tOP -tOP -tOP -okq -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -aoE -atW -atW -atW -atW -atW -atW -atW -atW -atW -ard -atW -atW -atW -arr -arr -arr -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -aoE -arz -arz -aoE -aoE -aoE -arz -arz -aoE -aBC -aBC -aBC -aIv -abA -abA -abA -abA -abA -abA -abA -abA -abA -abA -acX -anV -acT -aua -acX -azY -aua -aua -acX -amI -amI -aMc -aMc -aMc -amI -amI -amI -amI -amI -amI -amI -amI -amI -amI -amI -amI -amI -amI -amI -amI -amI -amI -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(56,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wwU -wwU -wwU -wwU -wwU -wwU -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -eAu -kdx -dhs -sGy -tJr -wyy -rPD -wyy -wyy -wyy -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aoE -pMg -hti -hti -pMg -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -eaL -eaL -eaL -rIg -rIg -qiS -wYs -fYD -vIy -vIy -vIy -vIy -mcx -wYs -vIy -mcx -wYs -phR -nbs -wYs -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -arz -aoE -tOP -tOP -tOP -tOP -tOP -tOP -tOP -okq -tOP -tOP -ujk -tOP -okq -okq -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -aoE -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -arr -arr -arr -atW -atW -atW -atW -atW -atW -atW -ard -atW -atW -atW -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aBC -aBC -aBC -axf -amI -amI -amI -amI -amI -amI -amI -amI -amI -amI -acX -acX -acX -acX -acX -acX -acX -acX -acX -aBC -aBC -aBC -aBC -aSj -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -roR -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(57,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wwU -wwU -hNG -aUy -wwU -adM -wwU -wwU -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wyy -eAu -jST -tJr -wyy -wyy -wyy -wyy -wyy -wyy -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -pMg -pMg -pMg -pMg -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -qiS -wYs -wYs -wYs -wYs -qlP -wYs -wYs -wYs -vIy -vIy -wYs -nmp -qpw -wYs -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -arz -aoE -tOP -tOP -tOP -tOP -tOP -tOP -okq -okq -tOP -tOP -tOP -tOP -okq -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -aoE -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -arr -arr -arr -arr -arr -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(58,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wwU -wwU -wwU -wwU -wwU -wwU -aUa -wwU -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wyy -wyy -wyy -wyy -wyy -wyy -wyy -wyy -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -pMg -pMg -pMg -pMg -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -qiS -qiS -wYs -lZj -vIy -vIy -vIy -wYs -ckA -vIy -vIy -wYs -uWO -nmp -lDP -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -arz -aoE -tOP -tOP -tOP -tOP -tOP -tOP -rys -rys -rys -rys -rys -rys -rys -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -aoE -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -arr -arr -arr -arr -arr -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aBC -aBC -aBC -acn -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(59,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wwU -aUa -wwU -wwU -qoM -wwU -wwU -wwU -wwU -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wyy -cIf -wyy -wyy -wyy -wyy -wyy -wyy -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -pMg -pMg -pMg -pMg -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -byl -wYs -lBD -wmp -lZj -cyy -wYs -wYs -qlP -wYs -wYs -nmp -qfU -lDP -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -arz -aoE -tOP -tOP -tOP -tOP -tOP -tOP -rys -rys -rys -rys -rys -rys -rys -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -aoE -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -arr -arr -arr -arr -apO -arr -arr -arr -arr -atW -atW -atW -atW -atW -atW -atW -atW -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aSj -aSj -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(60,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wwU -wwU -aCy -wwU -wwU -wwU -wwU -aCy -wwU -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wyy -wyy -rPD -wyy -wyy -wyy -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -pMg -xwW -pMg -pMg -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -nrw -eTC -vIy -vIy -wYs -dcv -nmp -nmp -qOM -rRc -nmp -lDP -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -arz -aoE -ppY -tOP -tOP -tOP -tOP -tOP -rys -rys -tOP -tOP -tOP -rys -rys -vZa -rys -oBI -oBI -rys -rHa -rys -rys -rys -jzg -atW -atW -atW -atW -atW -arr -atW -atW -arr -arr -arr -arr -arr -arr -arr -arr -arr -arr -arr -arr -arr -atW -atW -arr -atW -atW -atW -atW -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -acn -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aSj -aSj -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -abK -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(61,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aZt -wwU -wwU -fnG -wwU -wwU -wwU -aUy -wwU -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wyy -wyy -wyy -wyy -wyy -wyy -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -pMg -pMg -pMg -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rzr -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -iro -eTC -lZj -vIy -qlP -nmp -nmp -nmp -nmp -nmp -nmp -lDP -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -aoE -arz -arz -arz -arz -aoE -ppY -tOP -ujk -tOP -tOP -tOP -rys -rys -tOP -rwU -tOP -rys -rys -rys -qDk -rys -rys -rys -rys -rHa -rys -rys -ovO -atW -atW -atW -atW -arr -alr -arr -arr -arr -arr -arr -arr -apO -arr -axm -arr -apO -arr -arr -arr -arr -arr -arr -alr -arr -atW -atW -atW -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aSj -aSj -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -acn -aBC -aBC -aBC -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(62,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -wwU -wwU -hNG -wwU -aUa -wwU -wwU -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wyy -wyy -wyy -wyy -aoE -aoE -arz -arz -arz -arz -arz -arz -aoE -aoE -pMg -pMg -pMg -pMg -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -nrw -vIy -vIy -wYs -dIL -nmp -nmp -nmp -nmp -xhr -wYs -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -aoE -ppY -tOP -tOP -tOP -tOP -tOP -rys -rys -tOP -tOP -tOP -rys -rys -rys -vZa -rys -qDk -oBI -oBI -rys -rys -rys -jzg -atW -atW -atW -atW -atW -arr -atW -atW -arr -arr -arr -arr -arr -arr -arr -arr -arr -arr -arr -arr -arr -atW -atW -arr -atW -atW -atW -atW -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -abK -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aSj -aBC -aBC -aBC -aBC -abK -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(63,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -wwU -wwU -wwU -wwU -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wyy -wyy -wyy -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -pMg -pMg -hti -pMg -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -byl -wYs -xgz -lZj -vIy -cyy -wYs -eyI -cch -saO -cch -bHE -pUY -wYs -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -aoE -ppY -tOP -tOP -tOP -tOP -tOP -rys -rys -rys -rys -rys -rys -rys -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -aoE -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -arr -arr -arr -arr -apO -arr -arr -arr -arr -atW -atW -atW -atW -atW -atW -atW -atW -atW -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(64,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wyy -wyy -wyy -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -pMg -pMg -pMg -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -qiS -wYs -wYs -wYs -qlP -qlP -wYs -wYs -wYs -lDP -lDP -lDP -wYs -wYs -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -aoE -ppY -tOP -tOP -tOP -tOP -tOP -rys -rys -rys -rys -rys -rys -rys -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -aoE -atW -atW -ard -atW -atW -atW -atW -atW -atW -atW -atW -atW -arr -arr -arr -arr -arr -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(65,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wyy -wyy -wyy -aoE -arz -arz -arz -arz -arz -arz -aoE -aoE -pMg -pMg -pMg -pMg -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -qiS -qiS -qiS -rnE -qiS -qiS -rnE -qiS -qiS -qiS -qiS -qiS -qiS -qiS -qiS -rIg -rIg -rIg -rIg -rzr -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -aoE -ppY -tOP -tOP -tOP -tOP -tOP -tOP -okq -okq -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -aoE -atW -atW -atW -atW -atW -atW -ard -atW -atW -atW -atW -atW -arr -arr -arr -arr -arr -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aPj -aqq -aIG -aIG -aIG -aIG -aIG -aIG -aqq -aIG -aIG -aIG -aIG -aIG -aIG -aIG -aBC -aGW -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aBC -aIG -aIG -aIG -aIG -aIG -aIG -aIG -aIG -aIG -aIG -aIG -aIG -aIG -aIG -aJP -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(66,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -wyy -wyy -wyy -aoE -arz -arz -arz -arz -arz -aoE -aoE -pMg -pMg -pMg -pMg -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -hpx -bgt -rIg -rIg -rIg -rIg -byl -byl -rIg -rIg -rIg -rIg -rIg -rIg -qiS -qiS -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -aoE -ppY -tOP -tOP -tOP -tOP -tOP -tOP -okq -okq -tOP -tOP -ujk -tOP -tOP -tOP -tOP -tOP -oRV -tOP -tOP -tOP -tOP -aoE -atW -atW -atW -atW -atW -ard -atf -ard -atW -atW -atW -atW -atW -arr -arr -arr -atW -atW -atW -ard -atW -atW -atW -ard -atW -atW -atW -atW -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aJP -aqq -aIG -aIG -aIG -aIG -aIG -aIG -aqq -aIG -aIG -aIG -aIG -aIG -aIG -aIG -aBC -aBC -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aGW -aBC -aIG -aIG -aIG -aIG -aIG -aIG -aIG -aIG -aIG -aIG -aIG -aIG -aIG -aIG -aJP -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(67,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wyy -vZr -wyy -wyy -aoE -arz -arz -arz -arz -aoE -aoE -rHx -pMg -pMg -pMg -pMg -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -dNA -dNA -jWj -bgt -byl -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -qiS -dGx -xYp -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -aoE -ppY -oRV -tOP -tOP -tOP -tOP -tOP -okq -okq -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -aoE -atW -atW -atW -atW -atW -atW -ard -atW -atW -ard -atW -atW -atW -arr -arr -arr -atW -atW -atW -atW -atW -atW -ard -atf -ard -atW -atW -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aBC -aBC -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(68,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -wyy -wyy -wyy -aoE -aoE -arz -arz -arz -arz -aoE -rHx -rHx -rHx -rHx -pMg -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -dNA -mYL -dNA -dNA -rlq -bgt -rIg -byl -byl -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -qiS -dGx -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -aoE -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -okq -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -aoE -aoE -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -arr -atW -atW -atW -atW -atW -atW -atW -atW -ard -atW -atW -atW -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -ade -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -abK -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aBC -aqq -aqq -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aDx -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(69,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -gpk -gpk -gpk -aoE -aoE -arz -arz -arz -aoE -aoE -rHx -rHx -rHx -rHx -rHx -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -mYL -mYL -wuY -aoE -aoE -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -qiS -dGx -qiS -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -wYo -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -aoE -tOP -tOP -tOP -tOP -jzg -jzg -jzg -jzg -okq -jzg -jzg -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -aoE -aoE -atW -atW -atW -aBq -aBq -aBq -aBq -aBq -atW -atW -atW -atW -atW -atW -arr -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ade -ade -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aqq -aqq -aBC -aBC -aBC -aBC -aSj -aSj -aBC -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aDx -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(70,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -pMg -rGa -rGa -rGa -qFH -aoE -aoE -arz -aoE -aoE -rHx -rHx -rHx -rHx -rHx -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -dNA -dNA -mYL -mYL -aoE -aoE -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -dGx -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -aoE -tOP -tOP -tOP -tOP -jzg -okq -okq -okq -okq -qEg -jzg -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -aoE -aoE -aoE -atW -atW -atW -aBq -aNG -aOM -aOM -aBq -atW -atW -atW -atW -atW -arr -alr -arr -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ade -ade -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aDx -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(71,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -pMg -pMg -rGa -rGa -rGa -pMg -pMg -aoE -aoE -aoE -rHx -kop -rHx -rHx -rHx -rHx -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -dNA -mYL -mYL -dNA -aoE -aoE -arz -aoE -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -dGx -dGx -dGx -dGx -rIg -rIg -rIg -wYo -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -aoE -arz -arz -arz -arz -aoE -tOP -tOP -tOP -tOP -jzg -tjL -okq -okq -okq -okq -jzg -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -aoE -arz -aoE -atW -atW -atW -aBq -ans -aPL -aOM -aFD -atW -atW -atW -atW -atW -atW -arr -atW -atW -atW -atW -atW -atW -ard -atW -atW -atW -atW -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -ade -aBC -aBC -aBC -aBC -aBC -aBC -aqb -aBC -aBC -aTT -aIG -aIG -aTT -aBC -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aTT -aIG -aIG -aTT -aBC -aBC -aqb -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aDx -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(72,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -pMg -pMg -pMg -pMg -rGa -rGa -rGa -pMg -pMg -pMg -pMg -rHx -rHx -rHx -rHx -rHx -rHx -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -dNA -wuY -aoE -aoE -aoE -aoE -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -byl -rIg -irU -rIg -dGx -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -arz -aoE -aoE -ppY -tOP -tOP -jzg -okq -okq -hqT -okq -tjL -jzg -tOP -tOP -tOP -oRV -tOP -tOP -tOP -tOP -aoE -aoE -arz -aoE -atW -atW -atW -aBq -auV -aOM -aOM -aBq -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ade -ade -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aIG -aIG -aRI -aui -aui -aui -aSj -aSj -aSj -aui -aui -aui -aRI -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -acn -aBC -aBC -aBC -aBC -aDx -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(73,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -rGa -rGa -rGa -pMg -pMg -pMg -pMg -rHx -rHx -rHx -rHx -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -dNA -mYL -mYL -aoE -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -wYo -rIg -rIg -rIg -rIg -rIg -byl -rIg -rIg -rIg -dGx -rIg -rIg -rIg -rIg -rIg -rIg -rIg -eaL -eaL -eaL -rIg -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -arz -arz -arz -aoE -ppY -ppY -tOP -jzg -qEg -qEg -okq -okq -tWk -jzg -tOP -tOP -tOP -tOP -tOP -tOP -tOP -aoE -aoE -arz -arz -aoE -aoE -atW -atW -aBq -aBq -aBq -aBq -aBq -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ade -ade -aBC -aBC -aBC -aBC -aBC -aqb -aBC -abK -aBC -aIG -aIG -aFY -aSj -adG -aSj -aSj -aSj -aSj -aSj -adG -aSj -aff -aqq -aqq -aBC -aBC -aBC -aqb -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aDx -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(74,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -pMg -pMg -pMg -pMg -eAA -pMg -pMg -pMg -pMg -pMg -rGa -xwW -pMg -pMg -pMg -pMg -pMg -pMg -rHx -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -mYL -mYL -dNA -aoE -aoE -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -dGx -dGx -dGx -rIg -rIg -rIg -rIg -eaL -eaL -eaL -xqs -eaL -rIg -rIg -rIg -rIg -rIg -rIg -aoE -arz -arz -arz -aoE -aoE -aoE -aoE -gTF -ppY -dzN -jzg -jzg -jzg -jzg -jzg -jzg -jzg -tOP -tOP -tOP -tOP -tOP -tOP -tOP -aoE -arz -arz -arz -arz -aoE -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -ade -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aIG -aIG -aFY -arS -ajj -aSj -aSj -aSj -aSj -aSj -ajj -arS -aff -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(75,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -rGa -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -dNA -mYL -mYL -aoE -aoE -arz -arz -arz -arz -arz -aoE -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -byl -rIg -rIg -rIg -rIg -dGx -rIg -rIg -rIg -xqs -eaL -eaL -xqs -kqp -xqs -rIg -rIg -rIg -rIg -eaL -eaL -aoE -arz -arz -aoE -aoE -tOP -ppY -ppY -ppY -ppY -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -aoE -arz -arz -arz -arz -aoE -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -ard -atW -atW -atW -atW -atW -atW -atW -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aBC -aBC -aBC -acn -aBC -aBC -aqb -aBC -aBC -aBC -aIG -aIG -aFY -aSj -adG -aSj -aSj -aSj -aSj -aSj -adG -aSj -aff -aIG -aIG -aBC -aBC -aBC -aqb -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(76,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -rGa -pMg -pMg -pMg -pMg -eAA -pMg -pMg -pMg -pMg -pMg -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -mYL -mYL -mYL -dNA -aoE -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -byl -rIg -rIg -rIg -rIg -dGx -dGx -rIg -rIg -eaL -eaL -eaL -eaL -xqs -eaL -rIg -rIg -rIg -eaL -eaL -aoE -aoE -arz -arz -aoE -gTe -tOP -tOP -ppY -ppY -gTF -ppY -tOP -tOP -tOP -tOP -ujk -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -tOP -aoE -arz -arz -arz -arz -aoE -aoE -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -ard -atf -ard -atW -atW -atW -atW -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aqq -aqq -aRI -aSt -aSt -aSt -aSj -aSj -aBC -aSt -aSt -aSt -aRI -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(77,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -pMg -pMg -jdh -jdh -jdh -jdh -jdh -pMg -sXo -rGa -rGa -rGa -rGa -pMg -rGa -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -mYL -mYL -mYL -pKO -aoE -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -eaL -eaL -rIg -rIg -rIg -rIg -rIg -rIg -fnP -irU -rIg -rIg -rIg -rIg -rIg -dGx -rIg -rIg -rIg -eaL -eaL -eaL -eaL -rIg -rIg -rIg -eaL -eaL -eaL -aoE -arz -arz -aoE -aoE -gTe -tOP -nPp -tOP -ppY -aoE -aoE -aoE -aoE -aFu -aFu -aFu -aFu -aFu -aFu -aFu -aFu -aFu -aFu -aFu -aoE -aoE -arz -arz -arz -arz -arz -aoE -aoE -atW -atW -atW -atW -atW -atW -atW -ard -atW -atW -atW -atW -ard -atW -atW -atW -atW -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -ade -aBC -aBC -aBC -aBC -aqb -aBC -aBC -aTT -aIG -aIG -aTT -aBC -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aTT -aIG -aIG -aTT -aBC -aBC -aqb -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(78,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -pMg -pMg -pMg -jdh -abJ -aCi -vnW -jdh -pMg -rGa -rGa -lVN -rGa -rGa -rGa -rGa -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -dNA -mYL -mYL -mYL -aoE -aoE -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -eaL -eaL -eaL -eaL -eaL -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -dGx -dGx -dGx -dGx -eaL -eaL -eaL -eaL -eaL -eaL -eaL -eaL -aoE -aoE -aoE -arz -arz -aoE -ugU -nPp -khU -wSo -tOP -tOP -aoE -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -atW -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ade -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aSj -aSj -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(79,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -pMg -pMg -pMg -pMg -jdh -lwZ -kDp -oRK -jdh -pMg -rGa -rGa -rGa -rGa -rGa -rGa -rGa -pMg -pMg -pMg -pMg -pMg -cdK -pMg -pMg -pMg -xwW -pMg -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -dNA -dNA -wuY -dNA -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -rIg -rIg -rIg -rIg -eaL -eaL -eaL -kWX -eaL -rIg -rIg -rIg -rIg -rIg -byl -rIg -fnP -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -eaL -eaL -rIg -rIg -rIg -rIg -eaL -eaL -aoE -arz -arz -arz -arz -aoE -smb -tOP -oRV -tOP -tOP -tOP -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ade -aBC -aBC -aBC -aBC -aqb -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aSj -aSj -aBC -aBC -aBC -aBC -aqq -aqq -aBC -aBC -aBC -aqb -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(80,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -pMg -eAA -pMg -pMg -jdh -sNu -oRK -oRK -jdh -pMg -osS -rGa -hOw -rGa -lBi -rGa -pMg -pMg -pMg -pMg -xwW -pMg -pMg -pMg -pMg -pMg -pMg -pMg -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -mYL -mYL -dNA -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -eaL -xqs -eaL -eaL -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -eaL -eaL -aoE -aoE -arz -arz -arz -arz -aoE -gTe -tOP -nPp -khU -tOP -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ade -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aGW -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(81,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -pMg -pMg -pMg -pMg -jdh -jdh -hgj -jdh -jdh -pMg -rGa -rGa -rGa -rGa -rGa -rGa -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -mYL -mYL -dNA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -kWX -eaL -eaL -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -eaL -eaL -aoE -aoE -arz -arz -arz -arz -arz -aoE -aoE -tOP -smb -gTe -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ade -aBC -aBC -aBC -aBC -aqb -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aTT -aSj -aSj -aSj -aTT -aBC -abK -aBC -aIG -aIG -aBC -aBC -aBC -aqb -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(82,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -pMg -pMg -pMg -pMg -uFD -pMg -rGa -bpy -uFD -pMg -rGa -rGa -bDW -rGa -rGa -sev -rGa -rGa -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -dNA -mYL -mYL -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -rIg -rIg -rIg -rIg -rIg -eaL -rIg -rIg -rIg -rIg -rzr -rIg -rIg -byl -rIg -rIg -rIg -rIg -rIg -rIg -eaL -rIg -rIg -rIg -rIg -rIg -rIg -rIg -xqs -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -abK -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(83,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -pMg -pMg -pMg -pMg -pMg -pMg -rGa -pMg -pMg -pMg -pMg -rGa -rGa -rGa -rGa -pMg -pMg -rGa -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -dNA -mYL -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -byl -fnP -rIg -rIg -rIg -eaL -eaL -eaL -rIg -rIg -rIg -rIg -rIg -rIg -eaL -eaL -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aBC -aBC -aBC -aBC -aBC -aqb -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aSj -aSj -aBC -aBC -aBC -aGW -aBC -aIG -aIG -aBC -aBC -aBC -aqb -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(84,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -pMg -xwW -pMg -pMg -pMg -pMg -rGa -rGa -rGa -rGa -rGa -rGa -rGa -rGa -pMg -sXo -pMg -rGa -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -dNA -dNA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -byl -rIg -rIg -rIg -rIg -eaL -kWX -xqs -eaL -rIg -rIg -rIg -rIg -rIg -eaL -eaL -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ade -ade -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(85,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -pMg -pMg -pMg -pMg -pMg -pMg -rGa -duc -pMg -pMg -pMg -duc -rGa -pMg -pMg -pMg -pMg -rGa -rGa -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -dNA -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -eaL -eaL -rIg -rIg -rIg -rIg -rIg -eaL -eaL -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aQz -aQz -aQz -aQz -aQz -aQz -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -ade -aBC -aBC -acn -aqb -aBC -aBC -aTT -aqq -aqq -aTT -aBC -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aTT -aqq -aqq -aTT -aBC -aBC -aqb -aBC -abK -aBC -aBC -acn -aBC -aBC -aBC -ade -ade -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(86,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -pMg -pMg -pMg -eAA -pMg -sXo -rGa -pMg -pMg -pMg -uFD -pMg -rGa -pMg -uFD -pMg -pMg -pMg -mvP -pMg -pMg -pMg -pMg -eAA -pMg -pMg -pMg -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -dNA -dNA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -jIz -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -byl -rIg -rIg -rIg -rIg -eaL -rIg -rIg -rIg -rIg -rIg -rIg -eaL -eaL -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aQz -wOP -wOP -wOP -wOP -aQz -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ade -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aIG -aIG -aRI -aui -aui -aui -aSj -aSj -aSj -aui -aui -aui -aRI -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -ade -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(87,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -pMg -pMg -pMg -cdK -pMg -pMg -rGa -pMg -pMg -jdh -jdh -jdh -hgj -jdh -jdh -pMg -pMg -pMg -rGa -rGa -pMg -pMg -pMg -pMg -pMg -pMg -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -dNA -dNA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -wYo -rIg -rIg -rIg -rIg -rIg -byl -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -eaL -eaL -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aQz -wOP -vWu -vWu -wOP -aQz -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aBC -aBC -aBC -aBC -aqb -aBC -aBC -aBC -aIG -aIG -aFY -aSj -adG -aSj -aSj -aSj -aSj -aSj -adG -aSj -aff -aIG -aIG -aBC -aBC -aBC -aqb -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(88,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -pMg -pMg -pMg -pMg -pMg -rGa -pMg -pMg -jdh -oRK -oRK -oRK -oRK -jdh -pMg -pMg -pMg -pMg -rGa -rGa -pMg -pMg -pMg -pMg -pMg -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -dNA -dNA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -jIz -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -eaL -eaL -aoE -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aQz -qVm -rJj -idt -wOP -aQz -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ade -aBC -abK -aBC -aBC -aBC -aBC -aBC -aIG -aIG -aFY -arS -ajj -aSj -aSj -aSj -aSj -aSj -ajj -arS -aff -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(89,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -pMg -pMg -pMg -bpy -duc -rGa -pMg -ovX -jdh -sXD -oRK -kDp -oRK -jdh -pMg -pMg -pMg -pMg -pMg -rGa -rGa -pMg -rGa -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -dNA -dNA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -dNA -eaL -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -byl -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -eaL -eaL -aoE -aoE -arz -arz -arz -arz -aNo -rVS -rVS -rVS -rVS -rVS -rVS -rVS -rVS -rVS -rVS -rVS -rVS -oeJ -aQz -wQu -vWu -vWu -hiT -aQz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ade -aBC -aBC -aBC -aqb -aBC -aBC -aBC -aIG -aIG -aFY -aSj -adG -aSj -aSj -aSj -aBC -aSj -adG -aSj -aff -aIG -aIG -aBC -aBC -aBC -aqb -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(90,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -pMg -pMg -pMg -pMg -rGa -rGa -rGa -pMg -ovX -jdh -jdh -lwZ -oRK -oRK -jdh -pMg -pMg -pMg -pMg -xwW -pMg -rGa -rGa -rGa -nXD -dNA -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -nns -nns -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -dNA -dNA -dNA -vfl -bgt -rIg -byl -byl -byl -irU -rIg -fnP -rIg -rIg -irU -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -eaL -eaL -eaL -aoE -arz -arz -arz -arz -arz -aNo -rVS -qGz -qGz -rmK -qGz -mlA -qGz -qGz -qGz -qGz -qGz -qGz -qGz -aQz -aQz -raX -jEM -aQz -aQz -aQz -aQz -aQz -aQz -aQz -euc -euc -euc -euc -euc -wvx -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ade -ade -aBC -aBC -aBC -aBC -aBC -aBC -aIG -aIG -aRI -aSt -aSt -aSt -aSj -aSj -aSj -aSt -aSt -aSt -aRI -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(91,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -pMg -pMg -sXo -pMg -pMg -rGa -pMg -pMg -pMg -pMg -pMg -jdh -jdh -jej -tUj -jdh -pMg -pMg -pMg -pMg -pMg -pMg -pMg -rGa -rGa -nXD -dNA -dNA -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aoE -dNA -dNA -dNA -aoE -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -dNA -dNA -xHl -dNA -vfl -bgt -rIg -rIg -fnP -rIg -rIg -rIg -rIg -rIg -byl -byl -byl -rIg -eaL -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -eaL -eaL -aoE -aoE -arz -arz -arz -arz -arz -aNo -rVS -qGz -fKJ -fKJ -fKJ -fKJ -fKJ -fKJ -fKJ -fKJ -fKJ -naR -qGz -aQz -doO -dUO -dUO -dUO -jjC -raX -iqc -raX -raX -raX -euc -jQp -ePt -tEg -uoV -euc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ade -ade -aBC -aBC -aqb -aBC -aBC -aTT -aqq -aqq -aTT -aBC -aBC -aBC -aBC -aSj -aSj -aBC -aBC -aBC -aTT -aIG -aIG -aTT -aBC -aBC -aqb -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(92,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -pMg -pMg -pMg -pMg -rGa -rGa -rGa -pMg -pMg -aoE -aoE -pMg -pMg -jdh -jdh -jdh -jdh -pMg -pMg -eAA -pMg -pMg -pMg -pMg -pMg -rGa -nXD -dNA -dNA -dNA -dNA -aoE -aoE -arz -arz -arz -arz -aoE -aoE -aoE -aoE -dNA -dNA -dNA -aoE -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -dNA -dNA -dNA -dNA -dNA -dNA -vfl -bgt -rIg -rIg -rIg -rIg -fnP -byl -byl -rIg -rIg -rIg -eaL -kWX -eaL -eaL -rIg -rIg -rIg -rIg -rIg -rIg -rIg -xqs -eaL -aoE -arz -arz -arz -arz -arz -arz -aNo -rVS -rcX -fKJ -cAQ -cAQ -fKJ -cAQ -cAQ -fKJ -cAQ -cAQ -fKJ -oTt -aQz -bUJ -fUY -fUY -fUY -sjb -qfk -raX -raX -raX -raX -vQD -tXe -mPM -wRu -pKR -euc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -arz -aoE -ade -ade -aBC -aBC -aBC -abK -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(93,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -pMg -pMg -pMg -jdh -jdh -hOT -jdh -jdh -pMg -pMg -aoE -aoE -aoE -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -aoE -aoE -dNA -dNA -xHl -dNA -dNA -aoE -aoE -arz -arz -aoE -aoE -dNA -dNA -dNA -dNA -dNA -dNA -aoE -arz -arz -arz -arz -aoE -aoE -aoE -pKO -pKO -dNA -dNA -dNA -dNA -dNA -dNA -dNA -eaL -eaL -eaL -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -eaL -xqs -rIg -rIg -rIg -rIg -rIg -rIg -rIg -eaL -eaL -eaL -aoE -arz -arz -arz -arz -arz -arz -aNo -rVS -vZq -fKJ -khl -qLV -fKJ -khl -qLV -fKJ -khl -qLV -fKJ -vZq -aQz -yib -fUY -fUY -fUY -tcJ -raX -raX -raX -raX -raX -euc -pKR -hjj -tXe -tXe -euc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -adq -aXC -aBa -aoE -aoE -aoE -ade -ade -aBC -aBC -aqb -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aSj -aBC -aSj -aBC -aBC -aBC -aBC -aqq -aqq -aBC -aBC -aBC -aqb -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(94,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -pMg -pMg -pMg -jdh -oRK -oRK -oRK -jdh -pMg -sXo -aoE -arz -aoE -pMg -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -pMg -pMg -pMg -aoE -aoE -aoE -aoE -dNA -dNA -dNA -dNA -dNA -aoE -aoE -aoE -aoE -dNA -upS -dNA -dNA -dNA -dNA -dNA -aoE -arz -aoE -aoE -aoE -aoE -pKO -pKO -dNA -dNA -dNA -dNA -dNA -dNA -dNA -dNA -aoE -aoE -eaL -eaL -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -eaL -eaL -eaL -eaL -aoE -aoE -arz -arz -arz -arz -arz -arz -aNo -rVS -nnm -fKJ -fKJ -fKJ -fKJ -fKJ -fKJ -fKJ -fKJ -fKJ -fKJ -oTt -aQz -yib -fUY -nrT -dUO -tcJ -qfk -raX -pgq -raX -rHv -euc -cEy -hGV -fpy -wVR -euc -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -afF -aXC -aXC -aXC -jev -aoE -ade -ade -aBC -aBC -aBC -aBC -aBC -aBC -aIG -aIG -aBC -abK -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -abK -aBC -aBC -aBC -aBC -aBC -ade -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(95,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -pMg -pMg -pMg -pMg -pMg -jdh -lwZ -kDp -oRK -jdh -pMg -pMg -aoE -arz -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -arz -arz -aoE -aoE -dNA -dNA -wuY -dNA -dNA -dNA -aoE -aoE -dNA -dNA -dNA -dNA -wuY -dNA -dNA -aoE -aoE -aoE -dNA -dNA -dNA -dNA -dNA -dNA -dNA -dNA -xHl -dNA -dNA -dNA -ncO -aoE -aoE -eaL -eaL -eaL -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -eaL -eaL -eaL -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -aNo -rVS -qGz -fKJ -cAQ -cAQ -fKJ -cAQ -cAQ -fKJ -kOl -cAQ -fKJ -qGz -aQz -yib -fUY -fUY -dUO -khd -sjb -xLf -sjb -aQz -aQz -euc -euc -euc -euc -euc -euc -aQz -aQz -aQz -euc -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aBa -aXC -asz -aXC -aXC -aXm -aXm -ade -ade -aBC -aBC -aqb -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aTT -aSj -aSj -aSj -aTT -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aqb -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(96,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -mFO -pMg -pMg -pMg -pMg -pMg -pMg -jdh -flu -flu -oRK -jdh -pMg -pMg -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -dNA -dNA -dNA -xHl -dNA -nns -dNA -dNA -dNA -dNA -dNA -dNA -dNA -dNA -dNA -dNA -nns -dNA -dNA -dNA -dNA -dNA -dNA -wuY -dNA -dNA -dNA -dNA -aoE -aoE -arz -aoE -aoE -eaL -eaL -xqs -eaL -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -rIg -eaL -eaL -eaL -eaL -eaL -eaL -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rVS -vZq -fKJ -khl -qLV -fKJ -khl -qLV -fKJ -khl -qLV -qGz -vZq -aQz -fGg -lrH -fUY -dUO -dUO -bKZ -fUY -fUY -fUY -eZe -bTZ -nrT -fUY -dUO -dUO -bTZ -pqv -dUO -bli -euc -ars -ars -ars -ars -ars -ars -ars -ars -ars -ars -ars -ars -ars -ars -ars -ars -vpP -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aXC -aal -aXC -aXC -aXm -aoE -ade -ade -aBC -aBC -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aGW -aBC -aBC -aSj -aSj -aSj -aBC -aBC -abK -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(97,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -pMg -pMg -xwW -pMg -pMg -pMg -jdh -jdh -jdh -jdh -jdh -pMg -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -dNA -dNA -dNA -dNA -nns -dNA -dNA -dNA -dNA -dNA -dNA -dNA -dNA -dNA -dNA -nns -dNA -dNA -dNA -xHl -dNA -dNA -dNA -dNA -dNA -aoE -aoE -aoE -arz -arz -arz -aoE -aoE -aoE -eaL -eaL -eaL -eaL -eaL -eaL -rIg -rIg -rIg -rIg -rIg -eaL -eaL -eaL -eaL -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rVS -nnm -fKJ -fKJ -fKJ -fKJ -fKJ -fKJ -naR -fKJ -fKJ -oTt -rVS -aQz -bli -raX -fUY -raX -raX -fUY -fUY -nmG -raX -nrT -fUY -raX -fUY -fUY -fUY -esP -nrT -raX -dUO -azm -awL -awL -awL -awL -awL -aGk -awL -awL -adv -awL -awL -awL -awL -aMa -awL -awL -ars -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -afF -adq -aXC -aXC -aXm -aoE -ade -ade -aBC -aBC -aYc -aBC -aBC -aBC -aqq -aqq -aBC -aBC -aBC -aBC -aSj -aBC -aSj -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aqb -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(98,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -dNA -dNA -nns -dNA -dNA -wuY -dNA -dNA -dNA -dNA -dNA -wuY -dNA -nns -dNA -dNA -dNA -dNA -dNA -dNA -dNA -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -eaL -eaL -eaL -eaL -eaL -eaL -eaL -eaL -xqs -eaL -eaL -eaL -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rVS -qGz -naR -oET -cAQ -fKJ -cAQ -cAQ -fKJ -cAQ -cAQ -qGz -pYl -dUO -dUO -raX -nrT -dCz -raX -raX -raX -raX -raX -fUY -fUY -raX -fUY -fUY -fUY -raX -raX -raX -dUO -euc -awL -awL -adv -aGk -awL -awL -awL -awL -awL -awL -awL -awL -awL -aMa -awL -awL -ars -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -avK -aXC -aXC -aoE -aoE -aoE -ade -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(99,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -pMg -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -dNA -dNA -nns -dNA -dNA -dNA -dNA -dNA -xHl -dNA -dNA -dNA -dNA -nns -dNA -dNA -dNA -dNA -dNA -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -eaL -eaL -eaL -eaL -eaL -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rVS -vZq -fKJ -khl -qLV -fKJ -khl -qLV -fKJ -khl -qLV -qGz -phX -dUO -nrT -raX -raX -dCz -raX -fUY -fUY -raX -raX -fUY -fUY -raX -fUY -fUY -raX -raX -fUY -fUY -dUO -euc -ars -uyv -ars -ars -ars -ars -ars -ars -ars -ars -ars -ars -ars -ars -awL -awL -ars -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aBa -aoE -aoE -arz -aoE -ade -aBC -aBC -aBC -aqb -aBC -aBC -aTT -aIG -aIG -aTT -aBC -aBC -aBC -aSj -aSj -aBC -aBC -aBC -aBC -aTT -aIG -aIG -aTT -aBC -aBC -aqb -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(100,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -pMg -pMg -pMg -pMg -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -dNA -dNA -dNA -dNA -dNA -dNA -dNA -dNA -dNA -dNA -nns -dNA -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rVS -qGz -fKJ -fKJ -fKJ -fKJ -fKJ -fKJ -fKJ -fKJ -fKJ -qGz -phX -bKZ -raX -raX -raX -raX -fUY -fUY -fUY -raX -raX -fUY -raX -raX -nrT -raX -fUY -fUY -fUY -fUY -dUO -aQz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -ars -awL -awL -ars -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -arz -arz -aoE -ade -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aIG -aIG -aRI -aui -aui -aui -aSj -aSj -aBC -aui -aui -aui -aRI -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -acn -aBC -aBC -aBC -aBC -aBC -ade -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(101,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -pMg -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rVS -eHo -qGz -qGz -jsS -rmK -qGz -qGz -qGz -qGz -qGz -qGz -pYl -dUO -dUO -dUO -dUO -dUO -fUY -mLQ -dUO -dUO -dUO -fUY -fUY -dUO -dUO -dUO -dUO -dUO -dUO -dUO -dUO -aQz -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -ars -awL -afS -ars -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ade -ade -aBC -aBC -aqb -aBC -aBC -aBC -aIG -aIG -aFY -aSj -adG -aSj -aSj -aSj -aSj -aSj -adG -aSj -aff -aqq -aqq -aBC -aBC -aBC -aYc -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(102,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -geB -geB -bGe -geB -etg -rVS -rVS -rVS -rVS -rVS -rVS -rVS -rVS -ivk -ydd -ydd -ivk -aQz -ivk -ivk -aQz -hUa -aQz -aQz -ivk -ivk -aQz -hUa -aQz -ivk -ivk -aQz -oXS -aQz -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -ars -awL -awL -ars -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -ade -aBC -aBC -abK -aBC -aBC -aBC -aIG -aIG -aFY -arS -ajj -aSj -aSj -aSj -aSj -aSj -ajj -arS -aff -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -aoE -arz -arz -arz -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -"} -(103,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -nyU -msF -msF -wrl -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aYr -dUO -eYM -ltE -dUO -aQz -pKR -pKR -ngp -pKR -aQz -aQz -pKR -nlz -xpa -pKR -aQz -pKR -pKR -xpa -pKR -aQz -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -ars -awL -adv -ars -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ade -aBC -aBC -aqb -aBC -aBC -aBC -aIG -aIG -aFY -aSj -adG -aSj -aSj -aSj -aSj -aSj -adG -aSj -aff -aIG -aIG -aBC -aBC -aBC -aqb -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -ade -aoE -arz -arz -aoE -aoE -aFe -aXE -aoE -aoE -arz -arz -arz -arz -arz -"} -(104,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -msF -nyU -wrl -aNo -arz -arz -arz -arz -arz -aNo -aYr -dUO -pYD -oeY -oeY -aQz -jQp -pKR -nwT -ukW -aQz -aQz -jQp -pKR -nwT -cgq -aQz -jQp -pKR -iYx -wFj -aQz -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -ars -awL -awL -ars -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ade -aBC -aBC -aBC -aBC -aBC -aBC -aqq -aqq -aRI -aSt -aSt -aSt -aSj -aSj -aSj -aSt -aSt -aSt -aRI -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -ade -aoE -aoE -aoE -aoE -aHq -aXE -aWJ -mmE -aoE -arz -arz -arz -arz -arz -"} -(105,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -msF -msF -wrl -aNo -arz -arz -arz -arz -arz -aNo -aYr -dUO -oeY -aNo -aNo -aQz -swe -dJX -qqV -cgq -aQz -aQz -swe -cgq -qqV -cgq -aQz -swe -cgq -qqV -cgq -aQz -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -ars -aGk -awL -ars -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ade -ade -aBC -aqb -aBC -aBC -aTT -aIG -aIG -aTT -aBC -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aTT -aIG -aIG -aTT -aBC -aBC -aqb -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -ade -aoE -aoE -ajS -azT -awi -aXE -awi -aXE -aoE -arz -arz -arz -arz -arz -"} -(106,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -wAJ -gdr -gdr -ugW -ugW -ugW -ugW -ugW -ugW -ugW -ugW -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -msF -msF -wrl -aNo -arz -arz -arz -arz -arz -aNo -aYr -oeY -aNo -aNo -aNo -aQz -aQz -aQz -aQz -aQz -aQz -aQz -aQz -aQz -aQz -aQz -aQz -aQz -aQz -aQz -aQz -aQz -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -ars -awL -awL -ars -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -ade -aBC -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aSj -aSj -aBC -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -abK -aBC -aBC -aBC -aBC -aBC -aBC -ade -ade -ajS -ajS -ajS -aXE -aXE -avX -aXE -aXE -aoE -arz -arz -arz -arz -arz -"} -(107,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -wAJ -gdr -gdr -ugW -hIA -cuS -dok -cbq -heb -bLS -ugW -ugW -ugW -ugW -gdr -qGl -xZk -gdr -gdr -gdr -gdr -gdr -gdr -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -qZD -nyU -wrl -aNo -arz -arz -arz -arz -arz -aNo -aYr -aNo -aNo -aNo -aNo -aYr -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -ars -awL -awL -ars -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ade -aBC -aqb -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aBC -aqq -aqq -aBC -aBC -aBC -aqb -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -ade -aoE -aoE -ajS -aXE -aXE -awi -aXE -aHq -aoE -arz -arz -arz -arz -arz -"} -(108,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -wAJ -gdr -gdr -ugW -lXv -oxJ -hEr -lXv -ewW -jSB -ugW -cvs -psA -ugW -gdr -qGl -gdr -gdr -gdr -gdr -gdr -gdr -gdr -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -msF -msF -wrl -aNo -arz -arz -arz -arz -arz -aNo -aYr -aNo -aNo -aNo -aNo -aYr -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -arn -arn -azr -azr -azr -azr -azr -arn -arn -arn -aOZ -nPg -aNo -aBY -aid -amx -aEX -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -ade -aBC -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aGW -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -ade -aoE -aoE -aoE -aWJ -aac -aXE -aFe -aXE -aoE -arz -arz -arz -arz -arz -"} -(109,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -gdr -gdr -gdr -ugW -ugW -ugW -ugW -ugW -ugW -gdr -gdr -wAJ -gdr -gdr -ugW -mLW -bik -soS -tOz -ruO -vio -ugW -kRK -aTt -ugW -gdr -qGl -gdr -gdr -gdr -gdr -gdr -gdr -gdr -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -nyU -msF -msF -wrl -aNo -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -apg -arn -aNo -aNo -aNo -aHI -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -aoE -ade -aBC -aqb -aBC -aBC -aBC -aIG -aIG -aBC -aBC -abK -aTT -aSj -aSj -aSj -aTT -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aqb -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -aoE -aoE -arz -aoE -aoE -aoE -azT -aXE -aoE -aoE -arz -arz -arz -arz -arz -"} -(110,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -gdr -gdr -gdr -gdr -gdr -ugW -oXq -hkE -jHi -ivb -ugW -gdr -gdr -wAJ -dsI -gdr -ugW -lXv -lXv -lXv -lXv -lXv -lPn -ugW -kRK -sTe -ugW -gdr -qGl -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -msF -msF -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -apg -arn -aVW -aVW -aVW -aCb -aCb -aCb -aCb -aCb -aCb -aCb -aCb -aCb -aCb -aCb -aCb -aCb -aCb -aCb -aCb -aCb -aCb -csP -aNo -arz -arz -arz -arz -arz -aoE -aBC -aBC -aBC -aBC -aBC -aBC -aqq -aqq -aBC -aBC -aBC -aBC -aSj -aSj -aSj -aBC -aBC -abK -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aoE -arz -arz -arz -arz -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -"} -(111,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -arz -arz -arz -aNo -gdr -gdr -gdr -gdr -gdr -vtK -lXv -lXv -sEo -lXv -sXV -lXv -gdr -wAJ -dsI -gdr -ugW -tlF -sEo -sEo -sEo -sEo -lXv -lXv -lXv -lXv -sXV -lXv -oag -lXv -lXv -lXv -gdr -gdr -gdr -gdr -gdr -gdr -gdr -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -ylS -qZD -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -apg -arn -anL -aSV -aPW -asC -aVW -aRd -aDO -aGE -aDO -aDO -aDO -aVW -awp -aUN -aHK -awp -auX -aHK -awp -and -aHK -aVW -aNo -arz -arz -arz -arz -arz -aoE -ade -aBC -aqb -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aSj -aSj -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aqb -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(112,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aYr -aNo -aNo -aNo -aNo -aNo -gdr -gdr -gdr -gdr -gdr -ugW -yfu -mBn -qTu -coR -ugW -lXv -gdr -wAJ -dsI -gdr -vtK -lXv -pSp -wEc -nHm -dVo -lXv -lXv -lXv -lXv -sXV -lXv -oag -lXv -lXv -lXv -gdr -gdr -gdr -gdr -gdr -gdr -gdr -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -msF -msF -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -apg -arn -aJE -aSV -awp -ajs -aVW -aLn -aSV -aSV -aSV -aSV -aSV -aVW -agN -aSV -aHK -agN -aSV -aHK -agN -aSV -aHK -aVW -aNo -arz -arz -arz -arz -arz -aoE -ade -aBC -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aSj -aSj -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(113,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -rHE -rHE -rHE -rHE -rHE -rHE -bkf -rHE -rHE -rHE -gKg -rHE -rHE -hRF -gAl -gAl -gdr -gdr -gdr -gdr -gdr -ugW -lXv -bYS -cOX -rqo -ugW -lXv -gdr -wAJ -dsI -gdr -ugW -lXv -kJZ -kJZ -kJZ -kJZ -lXv -lXv -oxJ -vPz -ugW -gdr -qGl -xZk -lXv -lXv -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -qZD -msF -msF -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -apg -arn -avJ -aSV -aNP -aYu -aVW -aHK -aHK -aHK -aSv -aHK -aHK -aVW -aHK -aKJ -agI -aHK -aLb -agI -aHK -adl -agI -aVW -aNo -arz -arz -arz -arz -arz -aoE -ade -aBC -aqb -aBC -aBC -aTT -aIG -aIG -aTT -aBC -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aTT -aIG -aIG -aTT -aBC -aBC -aqb -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(114,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rHE -gAl -gdr -gdr -xZk -gdr -gdr -ugW -ugW -ccX -ugW -vYx -ugW -lXv -gdr -wAJ -dsI -gdr -ugW -lXv -lXv -lXv -yix -lXv -lXv -lXv -nTH -ygT -ugW -gdr -qGl -gdr -lXv -lXv -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -nyU -msF -nyU -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -apg -arn -asO -aSV -aSV -aOc -amW -aJq -aSV -aSV -aOc -aSV -aSV -acK -aOc -arT -asA -aOc -aKl -aan -ayC -ale -aqU -aVW -aNo -arz -arz -arz -arz -arz -aoE -ade -ade -aBC -aBC -aBC -aBC -aIG -aIG -aRI -aui -aui -aui -aSj -aSj -aSj -aui -aui -aui -aRI -aIG -aIG -aBC -aBC -aBC -aBC -acn -aBC -aBC -aBC -abK -aBC -ade -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(115,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -rHE -rHE -rHE -kXJ -rbY -rbY -rbY -mla -osI -rbY -rbY -rbY -rbY -rbY -rHE -rbY -osI -bur -oib -oib -mqk -oib -oib -oib -oib -oib -oib -lXv -lXv -lXv -gdr -wAJ -dsI -gdr -ugW -ycu -ycu -ycu -ugW -sXV -ugW -sXV -ycu -ycu -ugW -gdr -qGl -gdr -lXv -lXv -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -msF -msF -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -apg -arn -aSi -aSV -aSV -aOc -iZm -aSV -aSV -aOc -aOc -aOc -aOc -aHK -anY -aOc -aOc -aOc -aOc -aOc -aOc -aOc -aqS -aVW -aNo -arz -arz -arz -arz -arz -aoE -aoE -ade -aqb -aBC -aBC -aBC -aIG -aIG -aFY -aSj -adG -aSj -aSj -aSj -aBC -aSj -adG -aSj -aff -aIG -aIG -aBC -aBC -aBC -aqb -aBC -aBC -aBC -aBC -aBC -aBC -ade -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(116,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -rHE -rHE -rHE -rbY -rbY -rbY -rbY -rbY -rbY -rbY -rbY -rbY -rbY -rbY -rbY -rbY -rbY -rbY -bur -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -lXv -gdr -gdr -wAJ -dsI -gdr -gdr -gdr -gdr -gdr -gdr -lXv -gdr -lXv -gdr -gdr -gdr -gdr -qGl -gdr -lXv -lXv -gdr -ugW -ugW -ugW -ugW -ugW -ugW -ugW -ugW -ugW -vMu -gdr -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -msF -msF -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -apg -arn -aGi -aSV -aSV -aOc -aBR -aSV -ale -aOc -aSV -aSV -aSV -acK -aOc -ale -aOj -aep -aSV -awm -aOc -aSV -aAq -aVW -aNo -arz -arz -arz -arz -arz -arz -aoE -ade -aBC -aBC -aBC -aBC -aIG -aIG -aFY -arS -ajj -aSj -aSj -aSj -aSj -aSj -ajj -arS -aff -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(117,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rHE -rbY -rbY -rbY -rbY -rbY -kXJ -rbY -rbY -rbY -rbY -rbY -rbY -rbY -mla -rbY -rbY -bur -oib -wqa -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -gdr -wAJ -lfO -dsI -dsI -dsI -dsI -dsI -dsI -rpk -dsI -rpk -dsI -dsI -dsI -lfO -qGl -gdr -lXv -lXv -gdr -ugW -oXG -nrb -hHb -gsy -qIC -aKP -hXN -ugW -vOS -gdr -aNo -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -nps -nps -nps -nps -nps -nps -nps -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -nyU -msF -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -apg -arn -aJq -aSV -ale -aOc -amW -aSV -aSV -aOc -aSV -aKl -aSV -aVW -aHK -aZE -agI -aHK -aHX -agI -aHK -aeK -agI -aVW -aNo -arz -arz -arz -arz -arz -arz -aoE -aBC -aqb -aBC -aBC -aBC -aIG -aIG -aFY -aSj -adG -aSj -aSj -aSj -aSj -aSj -adG -aSj -aff -aIG -aIG -aBC -aBC -aBC -aqb -aBC -aBC -aBC -aBC -ade -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(118,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -rHE -hAS -rbY -rbY -rbY -rbY -rHE -rHE -rHE -rHE -rHE -rbY -rbY -rbY -rbY -rbY -rbY -osI -rHE -bur -oib -slk -jfm -oib -oib -oib -oib -oib -oib -oib -oib -oib -xZk -iEE -cUM -cUM -cUM -cUM -cUM -cUM -cUM -iCa -cUM -iCa -cUM -cUM -cUM -xIi -bba -gdr -lXv -lXv -wAJ -ugW -qiB -lXv -uBZ -lXv -lXv -lXv -fkz -sXV -gdr -gdr -aNo -arz -arz -arz -arz -aNo -aNo -aNo -nps -nps -kTL -hjO -bsv -kai -bsv -hjO -kTL -nps -nps -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -msF -msF -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -aaD -arn -aSV -aSV -aSV -aHK -aCb -aCb -aCb -aHK -aSV -aSV -sYT -aVW -amL -aSV -aHK -amL -aSV -aHK -amL -aSV -aHK -aVW -aNo -arz -arz -arz -arz -arz -arz -aoE -aBC -acn -aBC -aBC -aBC -aIG -aIG -aRI -aSt -aSt -aSt -aSj -aSj -aSj -aSt -aSt -aSt -aRI -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aBC -ade -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(119,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rHE -rbY -rbY -rbY -rbY -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rHE -gAl -bpc -kWq -kJQ -ylJ -ylJ -urj -urj -oXs -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -gdr -xZk -dsI -gdr -xZk -lXv -lXv -wAJ -ugW -mxz -sZa -mNl -bnJ -eEo -dVM -qWA -ugW -rCO -gdr -aNo -arz -arz -arz -aNo -aNo -nps -nps -hjO -kTL -kTL -dgr -hUd -dgr -dgr -dgr -kTL -kTL -hjO -nps -nps -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -mYd -msF -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -add -aub -aub -aub -aEe -aEB -abG -aSP -aCp -aCp -aTN -apg -aiu -aOc -aOc -aOc -aHK -aKu -avc -aAe -aHK -aSV -aSV -aSV -aVW -awp -aFM -aHK -awp -aLa -aHK -awp -aFM -aHK -aVW -aNo -arz -arz -arz -arz -arz -arz -aoE -aoE -aqb -aBC -aBC -aTT -aqq -aqq -aTT -aBC -aBC -aBC -aSj -aSj -aBC -aBC -aBC -aBC -aTT -aqq -aqq -aTT -aBC -aBC -aqb -aBC -aBC -ade -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(120,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rbY -kXJ -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rHE -dzu -rHE -rHE -rHE -gAl -gAl -gdr -gdr -gdr -gdr -gdr -xZk -lXv -nxa -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -dsI -gdr -gdr -lXv -lXv -wAJ -ugW -oIk -lXv -lXv -lXv -lXv -lXv -qjg -ugW -gdr -gdr -aNo -arz -arz -aNo -aNo -nps -hjO -kTL -kTL -dgr -dgr -dgr -dgr -dgr -dgr -dgr -dgr -dgr -fgF -kTL -hjO -nps -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -qZD -msF -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -arR -aub -aub -aEe -aEB -abG -aSP -aHk -aHk -apg -apg -aAb -aOc -aSV -arT -aDS -aHA -aIH -aKd -afv -ali -aQe -aEg -aVW -aVW -aVW -aVW -aVW -aVW -aCb -aCb -aCb -aCb -aVW -aNo -arz -arz -arz -arz -arz -arz -arz -aoE -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aSj -aSj -aBC -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -ade -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(121,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rbY -rbY -rHE -rHE -rHE -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aYr -aNo -aNo -aNo -aNo -aNo -gdr -gdr -gdr -gdr -gdr -gdr -lXv -nxa -lXv -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -hRb -lXv -lXv -lXv -lXv -gyy -ugW -gqq -lXv -lXv -lXv -lXv -lXv -qjg -ugW -gdr -gdr -aNo -arz -arz -aNo -nps -fir -kTL -dgr -dgr -hUd -dgr -dgr -dgr -dgr -dgr -dgr -dgr -dgr -dgr -dgr -kTL -gVw -lkt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -msF -msF -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aSP -aHk -aHk -aht -apg -aiu -aKl -aSV -aSV -amW -amv -aSH -afC -aHK -aSV -asQ -aSV -aVW -atI -aLz -pUI -aLz -kXt -aLz -aHK -aBo -aSC -aVW -aNo -arz -arz -arz -arz -arz -arz -arz -aoE -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(122,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rbY -rbY -rHE -rHE -rHE -aNo -arz -arz -arz -arz -arz -aNo -aNo -aNo -arz -arz -arz -aNo -gdr -gdr -gdr -gdr -gdr -gdr -lXv -nxa -lXv -gdr -gdr -gdr -xZk -gdr -gdr -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -oib -hRb -lXv -lXv -lXv -lXv -wAJ -ugW -upA -lXv -gWF -pjD -qJa -lXv -eCX -ugW -gdr -gdr -aNo -arz -aNo -aNo -nps -kTL -dgr -lfq -dgr -dgr -dgr -ffW -psO -rtf -psO -ffW -dgr -dgr -dgr -lfq -dgr -kTL -nps -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -msF -msF -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aSP -ams -ams -aBf -apg -arn -aSV -arT -aSV -amW -aCb -aCb -aCb -aHK -aSV -aEa -iZn -aVW -aSV -aSV -rTN -aSV -rTN -aSV -aHK -asd -axn -aVW -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -aoE -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aBC -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(123,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -rHE -rHE -rbY -rbY -rbY -dZu -rHE -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -gdr -gdr -gdr -xZk -qae -qae -tPh -khy -tPh -qae -qae -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -oib -oib -oib -oib -oib -oib -oib -oib -hRb -oib -gdr -gdr -gdr -wAJ -vtK -fAW -lXv -gWF -hHC -qJa -lXv -fkz -ugW -gdr -gdr -aNo -arz -aNo -nps -fir -kTL -dgr -dgr -dgr -scr -nWP -nWP -cwf -cwf -cwf -nWP -nWP -fig -dgr -dgr -dgr -kTL -gVw -nps -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -nyU -msF -msF -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aET -abG -aub -aub -aub -apu -aaD -arn -axb -aSV -aSV -aSV -amW -aSV -aSV -aOc -aGJ -aSV -aSV -aVW -aJq -aSV -ale -aSV -axn -aSV -aHK -acr -awI -aVW -aGj -aGj -aGj -aGj -aGj -aNo -arz -arz -aoE -aoE -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(124,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rbY -rbY -rHE -rHE -rHE -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -gdr -lfO -gdr -gdr -qae -lKi -mas -mas -hzE -psX -qae -gdr -lfO -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -oib -oib -oib -oib -oib -oib -gEA -oib -gdr -gdr -gdr -wAJ -ugW -fif -lXv -gWF -wyq -qJa -lXv -wrN -ugW -gdr -gdr -aNo -aNo -aNo -nps -kTL -dgr -jbL -dgr -scr -dfc -enQ -enQ -enQ -enQ -enQ -enQ -enQ -ufJ -fig -dgr -dgr -hUd -kTL -nps -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -msF -msF -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -apg -arn -afK -aSV -arT -aSV -wuH -aSV -aSV -aOc -arT -aSV -arT -acK -ayQ -aSV -arT -aCn -arT -aXH -amW -azp -ayQ -aVW -aGj -aYJ -ayF -aBe -aGj -aNo -arz -arz -arz -aoE -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aSj -aSj -aSj -aBC -abK -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(125,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rHE -rbY -rbY -rHE -rHE -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -gdr -dsI -gdr -gdr -qae -qae -mas -cLY -mas -qae -qae -gdr -dsI -gdr -gdr -gdr -xZk -gdr -gdr -gdr -xZk -gdr -gdr -oib -oib -oib -oib -hRb -oib -oib -gdr -xZk -wAJ -ugW -fHu -lXv -gWF -xUK -qJa -lXv -mxn -ugW -gdr -gdr -aNo -aNo -nps -kTL -kTL -dgr -dgr -dgr -loZ -enQ -enQ -enQ -enQ -enQ -enQ -enQ -enQ -enQ -nLu -dgr -dgr -dgr -kTL -kTL -nps -aNo -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -msF -msF -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -apg -arn -arT -aPJ -aQe -aQe -aVj -ahG -arT -aOc -aOc -aOc -aOc -aHK -agE -ayC -aOc -aOc -aOc -aOc -aHd -aAp -aSV -abo -aoy -aaO -aGy -nbu -aGj -aNo -arz -arz -arz -aoE -aBC -aBC -aBC -aIG -aIG -aBC -aBC -abK -aBC -aBC -aSj -aSj -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(126,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rbY -rbY -rHE -rHE -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -gdr -dsI -gdr -gdr -qae -hhL -mas -mas -mas -hhL -ets -gdr -dsI -gdr -vmb -ugW -ugW -ugW -ugW -ugW -ugW -gdr -gdr -oib -oib -oib -oib -hRb -oib -oib -lXv -lXv -uqp -sXV -qiB -lXv -gWF -quU -qJa -lXv -sJk -ugW -gdr -gdr -aNo -aNo -nps -fir -hUd -dgr -dgr -ffW -loZ -enQ -enQ -enQ -enQ -enQ -enQ -enQ -enQ -enQ -nLu -ffW -dgr -dgr -dgr -gVw -nps -aNo -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -msF -nyU -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -apg -arn -aBu -aMJ -aci -aBu -amW -alb -abM -aQe -apT -ale -aSV -acK -aSV -aKl -arT -axn -aIp -aQe -aTL -aQe -aTo -aVW -aGj -aGj -aGj -aGj -aGj -aNo -arz -arz -arz -aoE -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aSj -aSj -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(127,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -dZu -rbY -rbY -rbY -rHE -hAS -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -gdr -dsI -gdr -gdr -qae -qae -aVs -seS -nLY -qae -qae -gdr -dsI -gdr -vmb -xAE -hMr -vxO -wJo -wqi -ugW -gdr -gdr -gdr -oib -oib -oib -hRb -oib -oib -gdr -xZk -wAJ -ycu -sms -feA -lXv -lXv -lXv -cWJ -vAB -ugW -gdr -gdr -aNo -aNo -nps -kTL -dgr -dgr -dgr -psO -cPd -enQ -enQ -enQ -bpH -sqN -bvU -enQ -enQ -enQ -drM -psO -dgr -dgr -dgr -kTL -nps -aNo -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -msF -msF -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -apg -arn -aEV -aOY -aGR -anG -aCb -aUh -aPW -aPW -aPW -arT -arT -aVW -aJq -aSV -ale -arT -aXH -aSV -aHK -axk -aEi -aVW -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -aoE -aoE -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aBC -aSj -aSj -aBC -aBC -aBC -aBC -aIG -aIG -aBC -aBC -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(128,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -hAS -rbY -kXJ -rHE -rHE -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -gdr -dsI -gdr -gdr -qae -hhL -cLY -mas -mas -hhL -qae -gdr -dsI -gdr -vmb -oxS -kBZ -kBZ -lXv -sVG -ugW -qGl -gdr -gdr -oib -oib -oib -hRb -oib -oib -gdr -gdr -wAJ -ycu -ycu -cXw -feA -lXv -cWJ -sFA -ugW -ugW -gdr -gdr -aNo -aNo -nps -kTL -dgr -dgr -dgr -jym -cPd -enQ -enQ -enQ -drM -iYm -cPd -enQ -enQ -enQ -drM -cPK -dgr -dgr -hUd -kTL -nps -aNo -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -nyU -msF -qZD -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -apg -arn -aie -awH -awH -awH -aCb -anw -aAI -aBh -aSe -aSV -aSV -aVW -aSV -ayQ -rTN -aSV -rTN -aSV -aHK -aMW -axn -aVW -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aBC -aBC -aqq -aqq -aBC -aBC -aBC -aBC -aSj -aSj -aSj -aBC -abK -aBC -aBC -aqq -aqq -aBC -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(129,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -rHE -rHE -rbY -aMT -rHE -rHE -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -gdr -dsI -gdr -gdr -qae -qae -mas -mas -cLY -qae -qae -gdr -dsI -gdr -vmb -cPS -law -rox -lXv -dWl -ugW -qGl -gdr -gdr -oib -oib -oib -hRb -oib -oib -gdr -gdr -wAJ -gdr -ycu -ycu -fFA -iZO -rad -ugW -ugW -gdr -gdr -gdr -aNo -aNo -nps -kTL -dgr -dgr -dgr -psO -cPd -enQ -enQ -enQ -kda -nFP -eag -enQ -enQ -enQ -drM -psO -dgr -dgr -dgr -kTL -nps -aNo -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -msF -msF -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -avx -arn -bed -aOa -aYd -aRC -aCb -aNP -aNP -aCh -aNP -aSV -atO -aVW -aDf -aLz -uiV -aLz -tLu -aLz -aHK -aFx -aSV -aVW -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aBC -aBC -aIG -aIG -aBC -aBC -aBC -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aBC -aIG -aIG -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(130,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rHE -rbY -rbY -rHE -rHE -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -gdr -dsI -gdr -gdr -qae -hhL -jtW -mas -mas -hhL -qae -gdr -dsI -gdr -vmb -oxS -kBZ -kBZ -lXv -eFZ -ugW -qGl -gdr -oib -oib -oib -oib -hRb -uuN -oib -oib -gdr -wAJ -lfO -gdr -ycu -ugW -ugW -ugW -ugW -gdr -xZk -gdr -gdr -aNo -aNo -nps -fir -dgr -dgr -dgr -ffW -loZ -enQ -enQ -enQ -enQ -tPy -enQ -enQ -enQ -enQ -nLu -ffW -dgr -dgr -dgr -gVw -nps -aNo -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -wrl -msF -msF -msF -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -aSI -awM -arn -aVW -aVW -aVW -aVW -aCb -aCb -aCb -aCb -aCb -aCb -aCb -aCb -aCb -aCb -aCb -aCb -aCb -aCb -aCb -aVW -aVW -aVW -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aBC -aIG -aIG -aBC -aBC -abK -aBC -aSj -aSj -aSj -aBC -aBC -aBC -aUR -aIG -aIG -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(131,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -aMT -rbY -rbY -rHE -dZu -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -gdr -dsI -gdr -xZk -qae -qae -tPh -dpF -tPh -qae -qae -xZk -dsI -gdr -vmb -cPS -law -rox -lXv -loj -ugW -qGl -gdr -oib -oib -oib -oib -hRb -oib -oib -oib -oib -hCW -xIi -cUM -cUM -cUM -cUM -gdr -gdr -gdr -gdr -gdr -gdr -aNo -aNo -nps -kTL -kTL -dgr -lfq -dgr -loZ -enQ -enQ -enQ -enQ -tPy -enQ -enQ -enQ -enQ -nLu -dgr -dgr -lfq -kTL -kTL -nps -aNo -arz -aNo -wrl -wrl -wrl -wrl -wrl -wrl -wrl -msF -ffd -msF -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -asB -awM -arn -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aIG -aIG -aoE -aBC -aBC -aBC -aDL -aDL -aDL -aBC -aoE -aoE -aoE -aIG -aIG -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(132,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rDq -rbY -rbY -rHE -rHE -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -gdr -dsI -gdr -gdr -gdr -qae -lxy -mRK -lxy -qae -gdr -gdr -dsI -gdr -vmb -oxS -kBZ -kBZ -lXv -gIM -ugW -gWB -oib -oib -oib -oib -oib -hRb -oib -oib -oib -oib -hRb -oib -xZk -suB -suB -suB -gdr -xZk -gdr -gdr -gdr -gdr -aNo -aNo -aNo -nps -kTL -dgr -dgr -dgr -oRN -dqR -enQ -enQ -enQ -tPy -enQ -enQ -enQ -mHO -qPf -dgr -dgr -dgr -kTL -nps -aNo -aNo -arz -aNo -wrl -msF -msF -msF -pGS -qZD -dYp -msF -nyU -msF -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -arn -arn -aam -aRO -ant -apy -aam -agc -arn -arn -ahW -arn -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aIG -aIG -aoE -aoE -aoE -aoE -aqd -aqd -eRK -aoE -aoE -arz -aoE -aIG -aIG -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(133,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rbY -rbY -rHE -lrF -aNo -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -gdr -dsI -gdr -gdr -gdr -qae -pDP -fpv -lcM -qae -gdr -gdr -dsI -gdr -vmb -cPS -law -rox -lXv -gIM -ugW -gWB -oib -oib -oib -oib -oib -hRb -oib -oib -oib -oib -hRb -qIv -ycu -ycu -ycu -ycu -ugW -ugW -ugW -gdr -gdr -aNo -aNo -arz -aNo -nps -kTL -kTL -dgr -dgr -dgr -oRN -ssi -dqR -enQ -tPy -enQ -mHO -ssi -qPf -dgr -hUd -dgr -kTL -gVw -nps -aNo -arz -arz -aNo -wrl -msF -vph -msF -msF -msF -lxb -msF -msF -msF -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -awM -awM -arn -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aIG -aIG -aoE -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -aoE -aIG -aIG -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(134,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -hAS -rHE -rbY -rbY -rbY -rHE -rHE -aNo -arz -arz -arz -aNo -gew -gew -gew -gew -gew -gew -gew -gew -gew -afj -afj -gdr -dsI -gdr -gdr -gdr -qae -hWb -ggg -byj -qae -gdr -gdr -dsI -gdr -vmb -oxS -kBZ -kBZ -lXv -fkz -sXV -rxo -hRb -hRb -hRb -hRb -hRb -hRb -hRb -hRb -hRb -hRb -hRb -qIv -ycu -jvJ -ium -pyK -ddi -lHm -ugW -gdr -gdr -aNo -arz -arz -aNo -aNo -nps -kTL -dgr -hUd -dgr -dgr -dgr -oRN -ssi -mVI -ssi -qPf -dgr -dgr -dgr -jbL -dgr -kTL -nps -aNo -aNo -arz -arz -aNo -wrl -msF -msF -wrl -wrl -wrl -wrl -wrl -wrl -wrl -wrl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -aSI -awM -arn -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aIG -aIG -aoE -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -aoE -aIG -aIG -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(135,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rbY -rbY -rHE -rHE -aNo -aNo -arz -arz -arz -aNo -gew -kSA -fmN -oXH -uEE -ggf -enK -vKT -gew -aGg -afj -gdr -dsI -gdr -gdr -gdr -qae -qae -qae -qae -qae -gdr -gdr -dsI -gdr -vmb -cPS -law -lXv -lXv -fkz -sXV -rxo -uuN -oib -oib -oib -kWg -eCy -eCy -eCy -eCy -vmZ -hRb -qIv -ycu -cxM -hNg -lXv -lXv -iIH -ugW -gdr -gdr -aNo -arz -arz -arz -aNo -nps -fir -kTL -dgr -dgr -dgr -dgr -dgr -dgr -dgr -dgr -dgr -dgr -dgr -dgr -dgr -kTL -gVw -nps -aNo -arz -arz -arz -aNo -wrl -msF -msF -wrl -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -aBd -arn -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aIG -aIG -aoE -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -aoE -aIG -aIG -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(136,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rbY -rbY -rHE -rHE -aNo -arz -arz -arz -arz -aNo -gew -vlp -smK -szg -szg -dMR -hmF -vrZ -gew -afj -afj -gdr -dsI -gdr -gdr -gdr -xZk -gdr -gdr -gdr -xZk -gdr -gdr -dsI -gdr -vmb -oxS -kBZ -kBZ -lXv -klO -ugW -nTv -oib -oib -oib -oib -qBx -eCy -eCy -eCy -eCy -mxf -hRb -jtF -sXV -lXv -lXv -lXv -lXv -vTf -ugW -gdr -gdr -aNo -arz -arz -arz -aNo -aNo -nps -idC -kTL -kTL -dgr -hUd -dgr -dgr -dgr -hUd -dgr -lfq -dgr -kTL -kTL -idC -nps -aNo -aNo -arz -arz -arz -aNo -wrl -msF -qZD -wrl -aNo -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -apg -arn -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aIG -aIG -aoE -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -aoE -aIG -aIG -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(137,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rbY -rHE -rHE -rHE -aNo -arz -arz -arz -arz -aNo -gew -hEH -szg -tWI -szg -dMR -sHW -vdk -gew -afj -afj -gdr -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -lfO -gdr -vmb -rvm -qmB -gQg -vpb -iyb -ugW -nTv -oib -oib -oib -gdr -qBx -eCy -eCy -eCy -eCy -mxf -hRb -rTV -sXV -lXv -oxJ -lXv -lXv -fzx -ugW -gdr -gdr -aNo -arz -arz -arz -arz -aNo -fom -nps -nps -idC -kTL -kTL -dgr -dgr -dgr -dgr -dgr -kTL -kTL -idC -nps -nps -aNo -aNo -arz -arz -arz -arz -aNo -wrl -msF -msF -wrl -aNo -arz -arz -arz -aNo -xcI -xcI -xcI -xcI -xcI -xcI -xcI -xcI -xcI -fao -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -aDC -arn -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aIG -aIG -aoE -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -aoE -aIG -aIG -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(138,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -aMT -rbY -rHE -rHE -aNo -arz -arz -arz -arz -aNo -gew -adE -smK -szg -smK -dMR -sHW -ftw -gew -afj -afj -afj -afj -afj -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -dsI -gdr -vmb -ugW -ugW -ugW -sXV -ugW -ugW -nTv -oib -oib -oib -gdr -kWg -eCy -eCy -eCy -eCy -vmZ -gdr -oSj -ycu -iNt -uek -abR -lXv -hMD -ugW -gdr -gdr -aNo -arz -arz -arz -arz -arz -aNo -aNo -aNo -nps -nps -kTL -idC -kTL -kTL -kTL -idC -kTL -nps -nps -aNo -aNo -aNo -arz -arz -arz -arz -arz -aNo -wrl -msF -msF -wrl -aNo -arz -arz -arz -aNo -xcI -rYe -qyN -tgn -rYe -sUP -pxO -rYe -pxO -xcI -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -apg -arn -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aPG -aPG -aoE -arz -arz -aoE -aNw -anb -aNw -aoE -arz -arz -aoE -aWt -aWt -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(139,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rbY -rbY -rHE -rHE -aNo -arz -arz -arz -arz -aNo -gew -lZp -szg -szg -szg -dMR -hmF -vrZ -gew -afj -afj -afj -afj -afj -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -dsI -dsI -dsI -kYb -xIi -xIi -uqv -lIO -eat -ntL -oib -oib -oib -gdr -uKX -bzF -wxU -bzF -wxU -uKX -gdr -oSj -ycu -ycu -ycu -ycu -ugW -ugW -ugW -gdr -gdr -aNo -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -nps -tcp -tcp -lLJ -tcp -kQo -nps -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -nbJ -msF -wrl -aNo -arz -arz -arz -aNo -xcI -drF -rYe -qWY -rYe -rYe -sqX -rYe -bcL -xcI -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -aaD -arn -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(140,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -rHE -hAS -rbY -rbY -rbY -rHE -rHE -aNo -arz -arz -arz -arz -aNo -gew -nCX -ogS -sHu -cdX -awy -cHP -wXb -gew -afj -afj -afj -afj -afj -afj -afj -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -qGl -gdr -gdr -oib -oib -oib -oib -oib -oib -gdr -gdr -kZX -nIZ -sgM -sgM -nIZ -kZX -gdr -bYm -taX -xIi -xIi -xIi -xIi -vJX -gdr -gdr -gdr -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -tcp -srm -nrD -iWy -tcp -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -msF -wrl -aNo -arz -arz -arz -aNo -xcI -rYe -wJU -tgn -tvq -rYe -rYe -rYe -pxO -xcI -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -apg -arn -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(141,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rbY -rbY -rHE -rHE -hAS -aNo -arz -arz -arz -arz -aNo -gew -qvf -dfk -dfk -ifq -dfk -dfk -xdQ -gew -afj -afj -afj -afj -afj -afj -afj -afj -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -qGl -gdr -gdr -gdr -oib -oib -oib -gdr -gdr -gdr -gdr -kZX -eYU -sgM -sgM -pru -kZX -gdr -gdr -gdr -gdr -gdr -gdr -dsI -gdr -gdr -gdr -gdr -aNo -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -tcp -ehK -nrD -rOP -tcp -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -nyU -wrl -aNo -arz -arz -arz -aNo -xcI -rYe -rYe -tgn -rYe -rYe -pxO -rYe -hrI -xcI -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -atK -ajN -ajN -ajN -atK -aub -aub -apu -aGu -arn -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(142,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rbY -rbY -rHE -rHE -rHE -aNo -arz -arz -arz -arz -aNo -gew -ixj -szg -xww -szg -szg -smK -dZv -gew -afj -afj -afj -afj -afj -afj -afj -afj -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -gdr -qGl -gdr -gdr -gdr -gdr -oib -oib -gdr -gdr -gdr -pyH -kZX -nIZ -sgM -sgM -nIZ -kZX -gdr -gdr -gdr -gdr -gdr -gdr -dsI -gdr -gdr -gdr -gdr -aNo -arz -arz -arz -aNo -tcp -tcp -tcp -tcp -tcp -tcp -tcp -tcp -iWy -nrD -iWy -tcp -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -msF -wrl -aNo -arz -arz -arz -aNo -xcI -kAr -rYe -qWY -tvq -rYe -bcL -pBa -pxO -xcI -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aSg -aaS -afE -aYL -aSg -aXo -aXo -aTN -aaD -akt -akt -akt -akt -akt -akt -akt -akt -akt -akt -akt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(143,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rbY -rHE -hAS -rHE -aNo -aNo -arz -arz -arz -arz -aNo -gew -bEo -szg -szg -szg -tWI -szg -sjA -gew -gew -gew -gew -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -gdr -gdr -gdr -gdr -gdr -oCb -iar -iar -uKX -xaN -vTj -xaN -vTj -uKX -iar -iar -uKX -gdr -gdr -nzT -nzT -nzT -gdr -gdr -gdr -aNo -arz -arz -arz -aNo -tcp -xbw -jgy -muz -iWy -sEb -rPP -iWy -iWy -nrD -iWy -tcp -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -wrl -xnh -wrl -aNo -aNo -aNo -aNo -aNo -xcI -rYe -tvq -tgn -eaO -rYe -bZx -rYe -pxO -xcI -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -azo -aub -aub -aUr -afE -aRg -afE -aUr -aVr -aVr -apg -apg -aoG -aTj -aFd -agW -aTj -aTj -aTj -aFd -aTj -avj -akt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(144,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rbY -rHE -rHE -rHE -aNo -arz -arz -arz -arz -arz -aNo -gew -jfP -szg -hzh -smK -szg -szg -xDg -abV -hRT -tvl -gew -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -gdr -gdr -gdr -gdr -uKX -uKX -nIZ -nIZ -reY -nIZ -nIZ -nIZ -nIZ -reY -nIZ -nIZ -uKX -uKX -gdr -gdr -kee -gdr -gdr -gdr -aNo -aNo -arz -arz -arz -aNo -tcp -xbw -jgy -jgy -nrD -nrD -nrD -nrD -wNR -nrD -iWy -tcp -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -msF -wrl -wrl -wrl -wrl -wrl -wrl -wrl -wrl -wrl -xcI -rYe -bdb -tvq -rYe -bcL -xcI -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -arR -aub -aSg -afi -afE -aYP -aSg -aVr -aVr -aSl -apg -aoG -aTj -aTj -aTj -aTj -aTj -aTj -aTj -aTj -aTj -akt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aNw -anb -aNw -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(145,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -dZu -rbY -rbY -rHE -rHE -aNo -aNo -arz -arz -arz -arz -arz -aNo -gew -anR -hKE -hKE -hKE -rcF -szg -ved -jYN -szg -ems -gew -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -gdr -gdr -uKX -uKX -sgX -nIZ -sgM -sgM -sgM -sgM -sgM -sgM -sgM -sgM -nIZ -reY -uKX -uKX -nzT -nzT -nzT -gdr -aNo -aNo -arz -arz -arz -arz -aNo -tcp -xbw -jgy -muz -iWy -iWy -rCe -iWy -iWy -rCe -sEb -tcp -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -qZD -msF -xnh -msF -nyU -msF -qZD -nyU -msF -msF -msF -mvH -rYe -rYe -rYe -tvq -fZK -xcI -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -ajN -aAu -apm -arP -ajN -aAG -aAG -aBf -aaD -akt -akt -akt -akt -akt -akt -akt -akt -aTj -aRB -akt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(146,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rDq -rHE -rHE -aNo -arz -arz -arz -arz -arz -arz -aNo -gew -gew -gew -gew -gew -jZi -szg -szg -jkg -kxa -dZv -gew -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -uKX -uKX -nIZ -nIZ -sgM -sgM -sgM -sgM -sgM -sgM -sgM -sgM -sgM -ojH -nIZ -nIZ -uKX -uKX -gdr -gdr -gdr -aNo -arz -arz -arz -arz -arz -aNo -tcp -tcp -tcp -tcp -tcp -tcp -tcp -tcp -tcp -tcp -tcp -tcp -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -wrl -msF -msF -xnh -msF -msF -msF -msF -msF -msF -cjO -msF -mvH -tvq -rYe -pxO -nkj -qzB -xcI -xcI -xcI -xcI -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -ajN -aXN -apm -afE -ajN -aub -aub -apu -apg -arn -aNo -aNo -aNo -aNo -aNo -aNo -akt -aTj -aTj -akt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(147,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rbY -rHE -rHE -aNo -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -gew -jmc -ved -szg -jYN -szg -dZv -gew -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -uKX -kXN -nIZ -sgM -sgM -sgM -sgM -sFW -uVA -civ -dNy -sgM -sgM -sgM -sgM -nIZ -ajx -uKX -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -wrl -wrl -wrl -wrl -wrl -wrl -wrl -wrl -wrl -wrl -wrl -wrl -xcI -rYe -rYe -pxO -rYe -rYe -tgn -qyN -rYe -xcI -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -ajN -aXN -apm -afE -ajN -aub -aub -apu -apg -arn -aNo -arz -arz -arz -arz -aNo -akt -aTj -aTj -akt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(148,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rDq -rbY -rbY -rHE -rHE -aNo -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -gew -xnl -szg -szg -jYN -hvZ -mJx -gew -gew -gew -gew -gew -gew -gew -gew -bau -ojG -ojG -ojG -ojG -ojG -afj -afj -afj -afj -afj -afj -uKX -gkk -sgM -sgM -sgM -sgM -sFW -dNy -twB -twB -rjb -sFW -sgM -sgM -sgM -sgM -rjB -uKX -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -kSV -kSV -kSV -kSV -kSV -kSV -kSV -kSV -kSV -kSV -kSV -kSV -kSV -kSV -kSV -kSV -kSV -kSV -kSV -egS -aYr -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -xcI -yjH -rYe -pxO -rYe -tgH -tgn -tvq -fZK -xcI -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -ajN -atp -apm -afE -ajN -aub -aub -adx -aaD -arn -aNo -arz -arz -arz -arz -aNo -akt -aTj -aTj -akt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(149,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rbY -rbY -rbY -rHE -sST -aNo -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -gew -eQB -szg -tWI -szg -szg -dZv -qXD -alV -oxw -lCc -oxw -lDh -nLp -pvq -oxw -wvQ -edd -hCD -ipj -ojG -afj -afj -afj -afj -afj -afj -uKX -dew -sgM -sgM -sgM -dNy -soz -twB -cTb -iRk -sOJ -sFW -dNy -sgM -sgM -sgM -emu -uKX -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -kSV -hlv -jrH -jrH -kSV -gGF -gGF -gGF -xXs -gGF -gGF -gGF -gGF -gGF -xXs -gGF -gGF -cvy -gGF -tTW -aYr -aNo -olK -olK -olK -olK -olK -olK -olK -olK -olK -olK -olK -nQD -aNo -xcI -kAr -tvq -pxO -rYe -rYe -qWY -rYe -wJU -xcI -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -ajN -aXN -apm -ajH -ajN -aub -aub -apu -apg -arn -aNo -arz -arz -arz -arz -aNo -akt -aTj -asm -akt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(150,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rbY -rHE -rHE -aNo -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -gew -rFi -smK -szg -szg -szg -dZv -hVO -xLJ -tZd -gXX -dQE -alG -xLJ -xLJ -ugS -cIe -vRk -ldR -bKH -ojG -afj -afj -afj -afj -afj -afj -uKX -uuC -sgM -sgM -sgM -skD -qZn -cTb -cTb -gmJ -cTb -yky -ciX -sgM -sgM -tSV -eoM -uKX -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -kSV -hlv -jrH -jrH -pkR -gGF -gGF -gGF -tPs -tPa -tPa -tPa -tPa -tPa -qrc -gGF -xYc -gGF -meB -fZA -aYr -aNo -olK -kQp -xnW -kQp -iqd -kQp -syy -kQp -iqd -kQp -xnW -olK -aNo -xcI -rYe -rYe -rYe -rYe -tvq -tgn -tvq -fZK -xcI -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aSg -aWa -afE -amP -aSg -aub -aub -apu -apg -arn -aNo -arz -arz -arz -arz -aNo -akt -aTj -aRB -akt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aNw -anb -aNw -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(151,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -hAS -rbY -rbY -rHE -rHE -aNo -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -gew -qZw -lQH -lQH -lQH -lQH -uSX -qXD -oxw -pvq -rHu -oxw -lDh -oxw -alV -oxw -wvQ -edd -pyq -bKH -ojG -ojG -ojG -ojG -ojG -ojG -lbD -uKX -nIZ -sgM -ojH -sgM -sFW -mSA -cTb -nmq -cTb -cTb -cTb -soz -sgM -sgM -tSV -eoM -uKX -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -kSV -jrH -jrH -fuF -kSV -iOR -gGF -gGF -tRm -kUo -kUo -kUo -kUo -kUo -qgp -qrc -gGF -gGF -meB -jnr -aYr -aNo -olK -rym -jyG -jyG -jyG -jyG -jyG -jyG -jyG -jyG -xOU -olK -aNo -xcI -sdX -rYe -rYe -tvq -nxI -tgn -rYe -tvq -xcI -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -atK -ajN -ajN -ajN -atK -aub -aub -apu -aYf -arn -aNo -arz -aNo -aNo -aNo -aNo -akt -aTj -aTj -akt -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(152,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rDq -rbY -rHE -rHE -aNo -aNo -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -gew -gew -gew -gew -gew -gew -gew -gew -gew -gew -gew -gew -gew -gew -gew -gew -ojG -bKH -kni -bKH -bKH -bKH -bKH -mLH -bKH -bKH -bxm -oKh -nIZ -sgM -sgM -sgM -dNy -uVA -ikU -cTb -cTb -ipp -uVA -sFW -sgM -sgM -sgM -eoM -uKX -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -kSV -gLe -nHl -gbg -tSq -wMx -xSm -xSm -xYn -kUo -jwP -jwP -jwP -kUo -kUo -dGD -gGF -yhs -cvy -oAi -aYr -aNo -olK -kQp -hzj -kQp -xnW -kQp -xnW -kQp -hzj -kQp -xnW -olK -aNo -xcI -xcI -qQv -how -qQv -xcI -xcI -xcI -xcI -xcI -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -aaD -arn -aNo -arz -aNo -akt -akt -akt -akt -aKw -aKw -akt -akt -akt -akt -akt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(153,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rbY -kXJ -rHE -rHE -aNo -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -bKH -kni -kni -kni -vva -waO -kni -kni -kni -qlj -oKh -nIZ -vXC -sgM -sgM -sgM -sFW -sFW -cTb -cny -sFW -sFW -sgM -sgM -sgM -sgM -jYa -uKX -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -kSV -jrH -jrH -gbg -tSq -guF -pdG -pMi -ezT -kUo -jwP -izk -jwP -meH -meH -qwm -gGF -kSV -kSV -kSV -aYr -aNo -olK -seU -jyG -jyG -lVP -jyG -cou -jyG -jyG -cou -jyG -olK -olK -aNo -coF -gGc -rtx -gGc -oHn -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -apu -apg -arn -aNo -arz -aNo -akt -arM -aMS -ahq -ahq -ahq -ahq -ahq -aHv -aCx -akt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(154,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -ehd -rbY -rbY -rbY -rHE -rHE -aNo -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -bKH -kni -bKH -bKH -bKH -bKH -bKH -bKH -bKH -bxm -oKh -nIZ -sgM -sgM -sgM -sgM -sgM -sFW -cTb -sFW -sFW -sgM -sgM -sgM -sgM -sgM -pru -uKX -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -kSV -jrH -nmD -gbg -tSq -tTN -oRB -oRB -dQq -kUo -jwP -jwP -jwP -kUo -kUo -dGD -gGF -oAi -cvy -oAi -aYr -aNo -olK -rXo -jyG -lVP -lVP -jyG -jyG -jyG -xTE -jyG -jyG -jyG -olK -aNo -coF -gGc -rtx -rGq -coF -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aAx -abG -aub -aub -aub -aPw -aKF -arn -aNo -arz -aNo -akt -aQF -aMk -aIz -ahq -ahq -ahq -ahq -aNx -aCx -akt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(155,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -rHE -rHE -rbY -rbY -rbY -rHE -aNo -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -bKH -kni -bKH -ojG -ojG -ojG -ojG -ojG -ojG -ojG -uKX -ump -nIZ -sgM -sgM -sgM -sgM -sgM -sgM -sgM -sgM -sgM -sgM -sgM -vXC -sgM -urK -uKX -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -kSV -jrH -jrH -gbg -tSq -gGF -gGF -gGF -tRm -kUo -kUo -kUo -kUo -kUo -fZB -gKe -gGF -gGF -meB -jnr -aYr -aNo -olK -vEa -xId -bAg -jyG -nvX -jyG -tdb -xhX -mya -mya -iDH -olK -aNo -coF -gGc -rtx -gGc -coF -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -arn -arn -aam -aRO -ant -apy -aam -agc -arn -arn -arn -arn -aNo -arz -aNo -akt -arM -aMk -ahq -ahq -ahq -ahq -arc -aNx -aCx -akt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(156,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rbY -rbY -dZu -aNo -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -bKH -kni -bKH -ojG -afj -afj -afj -afj -afj -afj -uKX -uKX -nIZ -nIZ -hgc -lYp -sgM -sgM -sgM -sgM -sgM -ojH -sgM -sgM -sgM -nIZ -kXN -uKX -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -kSV -uCU -rHs -kKb -tSq -gGF -xYc -gGF -wsl -mbQ -mbQ -mbQ -mbQ -mbQ -gKe -gGF -gGF -gGF -gGF -ijX -aYr -aNo -olK -xPl -lyA -lyA -jyG -olK -jyG -olK -olK -olK -olK -olK -olK -aNo -coF -ngh -rtx -ohf -coF -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -arn -aNo -aNo -aNo -arz -aNo -akt -aQF -aMk -ahq -ahq -ahq -ahq -ahq -aNx -aCx -akt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aNw -anb -aNw -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(157,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rbY -rbY -rHE -aNo -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -bKH -kni -bKH -ojG -afj -afj -afj -afj -afj -afj -afj -uKX -uKX -nIZ -nIZ -tSV -tSV -sgM -sgM -sgM -hgc -sgM -sgM -sgM -nIZ -nIZ -uKX -uKX -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -kSV -xEN -xEN -qhN -kSV -gGF -gGF -gGF -iVC -gGF -gGF -gGF -gGF -eqD -iVC -gGF -gGF -kSV -nDv -ijX -aYr -aNo -olK -lyA -lyA -olK -cnW -olK -vVt -olK -aNo -aNo -aNo -aNo -aNo -aNo -coF -gGc -rtx -gGc -fHq -eOL -eOL -eOL -eOL -eOL -eOL -eOL -eOL -gqu -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -arn -aNo -arz -arz -arz -aNo -akt -arM -aMk -ahq -ahq -ahq -ahq -ahq -amE -aCx -akt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(158,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rbY -rHE -rHE -aNo -aNo -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -djM -kni -bKH -ojG -afj -afj -afj -afj -afj -afj -afj -afj -uKX -uKX -gHv -cGi -vCQ -vZN -rjB -loR -nIZ -nIZ -bzF -bzF -bzF -uKX -uKX -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -kSV -kSV -kSV -kSV -kSV -gGF -qAD -kSV -kSV -kSV -kSV -kSV -coF -coF -coF -noE -dYE -noE -coF -coF -coF -coF -coF -nKc -jBE -coF -coF -sng -gGc -sng -coF -coF -coF -coF -coF -coF -coF -rOM -rtx -gGc -gGc -rtM -jQm -ylv -jQm -jQm -eVB -jQm -kRl -eOL -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -arn -aNo -arz -arz -arz -aNo -akt -aLp -aLp -aLp -jBe -asS -aqR -aqR -akt -akt -akt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(159,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rbY -rbY -rHE -rHE -aNo -aNo -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -bKH -kni -bKH -ojG -afj -afj -afj -afj -afj -afj -afj -afj -afj -uKX -uKX -uKX -uKX -uKX -uKX -uKX -iku -iku -iku -iUZ -pnb -uKX -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -sja -bFy -vhq -vhq -vhq -isf -bIH -jhT -aNo -snI -gGc -nsz -dru -gGc -dru -nsz -gGc -gGc -pmE -gGc -gGc -gGc -dru -gGc -gGc -gGc -gGc -gGc -gGc -gGc -dru -gGc -rGq -gGc -gGc -rtx -gGc -fHq -eOL -eOL -eOL -tUb -fLp -gRA -lUm -kbC -eOL -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -arn -aNo -arz -arz -arz -aNo -akt -aMU -uYQ -apk -ahQ -akt -alA -alA -akt -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(160,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rbY -rbY -rbY -rHE -rHE -rHE -aNo -aNo -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -fcS -kni -bKH -ojG -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -iku -pZK -xIS -pZK -iku -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sja -nqy -bBs -bBs -vhq -isf -hyv -sja -aNo -snI -rtx -rtx -rtx -rtx -rtx -rtx -rtx -rtx -rtx -rtx -rtx -rtx -rtx -rtx -cTc -rtx -rtx -rtx -rtx -rtx -rtx -rtx -rtx -rtx -cTc -rtx -gGc -coF -aNo -aNo -eOL -kxo -jQm -kjx -jQm -oML -eOL -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -arn -aNo -arz -arz -arz -aNo -akt -ahQ -agz -ahQ -aNr -akt -alA -asq -akt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -anb -anb -anb -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(161,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rHE -rHE -rbY -rbY -rbY -rHE -rHE -rHE -aNo -arz -aNo -aNo -afj -afj -afj -afj -cqD -cqD -cqD -cqD -cqD -cqD -cqD -cqD -cqD -afj -afj -afj -afj -afj -afj -afj -ojG -bKH -kni -bKH -ojG -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -iku -jpR -pZK -lDX -iku -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sja -vhq -bBs -lpw -vhq -isf -gJa -sja -aNo -snI -gGc -gGc -gGc -gGc -gGc -gGc -gGc -dix -fef -gGc -gGc -rGq -gGc -gGc -gGc -gGc -wGY -fef -gGc -gGc -gPz -gGc -gGc -gGc -fef -gGc -hok -coF -aNo -aNo -eOL -ezH -jQm -ezH -lUm -xgC -eOL -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -arn -aNo -arz -arz -arz -aNo -akt -ahQ -ags -ahQ -aDk -akt -alA -alA -akt -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aNw -aZw -aZw -aZw -aNw -aud -anb -anb -anb -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(162,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rHE -rHE -rbY -rbY -rbY -rHE -ehd -rHE -aNo -arz -aNo -cqD -cqD -cqD -cqD -cqD -cqD -dis -ePf -tfX -vhr -tfX -lGS -qWw -cqD -cqD -cqD -cqD -cqD -cqD -cqD -jtA -ojG -bKH -kni -bKH -ojG -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -iku -pZK -pZK -pZK -iku -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sja -rvK -bBs -bBs -vhq -isf -hyv -sja -aNo -coF -coF -coF -coF -coF -coF -coF -coF -coF -coF -icX -gGc -icX -coF -coF -coF -coF -coF -coF -coF -coF -coF -coF -coF -coF -coF -coF -coF -coF -aNo -aNo -eOL -deH -jQm -cru -jQm -mSM -eOL -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -arn -aNo -arz -arz -arz -aNo -akt -alC -akt -akt -akt -akt -alA -alA -akt -akt -akt -akt -akt -akt -akt -akt -akt -akt -akt -akt -erE -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aZw -anb -anb -anb -anb -aud -aNw -anb -aNw -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(163,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rHE -rHE -rHE -aMT -rbY -rHE -rHE -rHE -aNo -arz -aNo -cqD -wRQ -pvA -wRQ -wRQ -kLe -wRQ -wRQ -wRQ -wRQ -vmt -wRQ -wRQ -kLe -wRQ -wRQ -wRQ -usA -wRQ -wRQ -wRQ -dbM -bKH -kni -bKH -ojG -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -iku -pZK -nzL -pZK -iku -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sja -vhq -bBs -bBs -vhq -isf -hyv -sja -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -sZq -rkc -sZq -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -eOL -obI -jQm -kAW -jQm -mSM -eOL -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -arn -aNo -arz -arz -arz -aNo -akt -ahq -aKR -ava -aOk -akt -alA -alA -alA -alA -alA -aig -alA -alA -alA -alA -alA -aig -alA -anB -akt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aZw -anb -amS -amS -anb -ahg -anb -anb -anb -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aMy -aMy -aMy -adu -aMy -aMy -aMy -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(164,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -sST -rHE -rHE -rbY -rbY -rHE -rHE -sST -aNo -arz -aNo -cqD -wRQ -vmt -wRQ -wRQ -wRQ -wRQ -wRQ -wRQ -wRQ -wRQ -wRQ -wRQ -wRQ -wRQ -wRQ -vmt -wRQ -wRQ -wRQ -wRQ -bKH -bKH -waO -bKH -ojG -afj -afj -afj -iku -iku -iku -iku -iku -iku -iku -iku -iku -iku -iku -iku -iku -iku -pZK -pZK -pZK -iku -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sja -vhq -gBN -bBs -vhq -isf -gJa -sja -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sZq -kDI -sZq -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -eOL -jUb -dLt -jQm -jQm -ggL -eOL -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -arn -aNo -arz -arz -arz -aNo -akt -amg -ahq -ahq -aSL -akt -alA -alA -alA -alA -alA -alA -asW -asq -alA -alA -alA -alA -alA -anB -akt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aZw -anb -amS -amS -anb -aAR -anb -anb -anb -aoE -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aMy -aMy -aMy -aMy -aMy -aMy -adu -aMy -aMy -aMy -aMy -aMy -aMy -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -"} -(165,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rHE -rHE -rHE -rHE -rbY -rbY -rHE -rHE -rHE -aNo -arz -aNo -cqD -cqD -cqD -xmL -cqD -cqD -cqD -cqD -cqD -xmL -cqD -cqD -cqD -cqD -cqD -xmL -cqD -cqD -cqD -cqD -cqD -ojG -bKH -kni -bKH -ojG -afj -afj -afj -iku -pZK -nzL -pZK -lew -pZK -eLr -pZK -lew -pZK -pZK -pZK -rnO -pZK -pZK -pZK -eXU -iku -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sja -nqy -bBs -bBs -vhq -isf -hyv -sja -aNo -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -sZq -rkc -sZq -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -eOL -mnV -oML -rtP -uTp -jxt -eOL -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -arn -aNo -arz -arz -arz -aNo -akt -akt -akt -akt -akt -akt -akt -akt -akt -akt -akt -akt -akt -akt -akt -asD -asD -akt -akt -akt -akt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aZw -anb -amS -amS -anb -ahg -anb -anb -anb -aoE -arz -arz -arz -arz -arz -arz -aoE -aoE -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -adu -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aoE -aoE -arz -arz -arz -arz -arz -arz -"} -(166,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rHE -rHE -rHE -rHE -rbY -rbY -rbY -rHE -rHE -aNo -arz -aNo -cqD -fpS -fpS -fpS -fpS -lbk -cqD -fpS -oRQ -fpS -fpS -fhM -cqD -fpS -fpS -fpS -fpS -yeQ -cqD -afj -afj -ojG -bKH -vva -bKH -ojG -afj -afj -afj -iku -pZK -pZK -pZK -pZK -pZK -xIS -pZK -ntW -pZK -pZK -cPq -pZK -uXU -pZK -eLr -pZK -iku -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sja -rVW -bBs -vhq -cmn -wRN -bwo -sja -aNo -arz -aNo -sZq -sZq -sZq -sZq -sZq -sZq -sZq -sZq -sZq -kDI -sZq -sZq -sZq -sZq -pOw -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -eOL -eOL -eOL -eOL -eOL -eOL -eOL -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -adF -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -arn -aNo -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -akt -aYV -aYV -akt -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aZw -anb -anb -anb -anb -aud -anb -anb -anb -aoE -arz -arz -arz -arz -arz -aoE -aoE -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -adu -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aoE -aoE -arz -arz -arz -arz -arz -"} -(167,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -lrF -rHE -rHE -rHE -rbY -aMT -rbY -rHE -rHE -aNo -arz -aNo -cqD -cXB -eGs -xrB -wKi -mKn -cqD -mKn -jVF -xrB -jVF -mKn -cqD -mKn -jVF -xrB -jVF -mKn -cqD -afj -afj -ojG -epL -kni -bKH -ojG -afj -afj -afj -iku -pEd -pZK -pZK -rMU -pZK -pZK -nzL -cZI -pZK -pZK -pZK -cZI -pZK -pZK -pZK -pZK -iku -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sja -vhq -vhq -ivz -pYa -sja -sja -sja -aNo -arz -aNo -sZq -qFp -kqy -nKy -kDI -kDI -kDI -nKy -kDI -kDI -kDI -hQb -bjN -xjg -sZq -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -arR -aub -aub -aEe -aEB -abG -aub -aub -aub -arn -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -akt -aXD -aXD -akt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aNw -aZw -aZw -aZw -aNw -aud -anb -anb -anb -aoE -arz -arz -arz -arz -aoE -aoE -adu -aMy -aMy -aMy -aMy -aMy -aMy -aMy -afk -afk -afk -afk -afk -aMy -aMy -aMy -aMy -aMy -aMy -aMy -adu -aoE -aoE -arz -arz -arz -arz -"} -(168,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rbY -rbY -rbY -rHE -rHE -aNo -arz -aNo -cqD -fbS -fbS -fbS -fbS -fbS -cqD -fbS -fbS -fbS -fbS -fbS -cqD -fbS -fbS -fbS -fbS -fbS -cqD -afj -afj -ojG -bKH -kni -bKH -ojG -afj -afj -afj -iku -pZK -pZK -iku -iku -iku -iku -iku -iku -iku -iku -iku -iku -iku -iku -iku -iku -iku -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sja -pLk -pLk -sja -sja -aNo -aNo -aNo -aNo -arz -aNo -sZq -kqy -kDI -kDI -kDI -kDI -kDI -kDI -kDI -kDI -bjN -kqy -bjN -bjN -sZq -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -arn -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -akt -akt -akt -akt -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aNw -anb -aNw -aoE -arz -arz -arz -aoE -aoE -aMy -aMy -adu -aMy -aMy -aMy -aMy -afk -afk -aMy -aMy -adu -aMy -aMy -afk -afk -aMy -aMy -aMy -aMy -adu -aMy -gZk -aoE -aoE -arz -arz -arz -"} -(169,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rHE -rHE -rHE -ehd -rHE -rHE -rbY -rbY -rHE -rHE -aNo -aNo -aNo -cqD -rPs -rPs -rPs -rPs -rPs -cqD -vaN -nOB -vaN -vaN -vaN -cqD -ldC -hrk -hrk -hrk -ldC -cqD -afj -afj -ojG -dnS -kni -bKH -ojG -afj -afj -afj -iku -pZK -pZK -iku -afj -pUu -xLv -xLv -bjX -lpg -lpg -xOE -xLv -pUz -bOJ -bOJ -mzJ -pNl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sja -pLk -pLk -sja -aNo -arz -arz -arz -arz -arz -aNo -sZq -wTd -wTd -wTd -wTd -wTd -wTd -wTd -wTd -wTd -wTd -bjN -bjN -wTd -sZq -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -arn -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -arz -aoE -aMy -aMy -aMy -aMy -adu -aMy -aMy -adu -aMy -aMy -aMy -aMy -adu -aMy -aMy -aMy -aMy -adu -aMy -aMy -adu -aMy -aMy -aMy -aMy -aoE -arz -arz -arz -"} -(170,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rHE -rHE -dZu -rHE -rHE -rbY -rbY -rbY -rHE -rHE -rHE -aNo -aNo -cqD -rPs -rPs -rPs -hMF -rPs -cqD -vaN -vaN -vaN -vaN -vaN -cqD -hrk -hrk -hrk -cPC -hrk -cqD -afj -afj -ojG -bKH -kni -bKH -ojG -afj -afj -afj -iku -pZK -pZK -iku -afj -pUu -xLv -xLv -tvM -oeo -iki -xLv -lpg -pUz -bOJ -bOJ -jrv -pUu -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sja -bIg -pLk -sja -aNo -arz -arz -arz -arz -arz -aNo -sZq -fGY -fGY -fGY -fGY -fGY -fGY -fGY -fGY -fGY -fGY -fGY -fGY -fGY -sZq -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -arn -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -aoE -aoE -aMy -aMy -aMy -aMy -aMy -adu -adu -aMy -aMy -aMy -aMy -aMy -adu -aMy -aMy -aMy -aMy -aMy -adu -adu -aMy -aMy -aMy -aMy -aMy -aoE -aoE -arz -arz -"} -(171,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rbY -rbY -rbY -rHE -rHE -rHE -aNo -aNo -cqD -hMF -kGn -rPs -rPs -rPs -cqD -vaN -vaN -vaN -vaN -nOB -cqD -cPC -hrk -nHx -hrk -ldC -cqD -afj -afj -ojG -djM -kni -mSc -ojG -afj -afj -afj -iku -iXz -xIS -iku -afj -pUu -lpg -xLv -vtX -puA -xLv -xLv -lpg -pUz -bOJ -bOJ -bOt -pUu -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sja -pLk -pLk -sja -aNo -arz -arz -arz -arz -arz -aNo -sZq -fGY -fGY -fGY -fGY -fGY -isv -xeQ -xeQ -xeQ -pXS -fGY -fGY -fGY -sZq -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -arn -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -aoE -aMy -aMy -aMy -aMy -aMy -aMy -adu -adu -aMy -aMy -aMy -aMy -aMy -adu -aMy -aMy -aMy -aMy -aMy -adu -adu -aMy -aMy -aMy -aMy -aMy -aMy -aoE -arz -arz -"} -(172,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -dZu -oWN -rHE -rHE -rHE -rHE -rHE -rbY -rbY -rHE -rHE -rHE -aNo -aNo -cqD -rPs -hMF -rPs -rPs -rPs -cqD -nOB -vaN -vaN -vaN -vaN -cqD -hrk -hrk -hrk -ldC -hrk -cqD -afj -afj -ojG -bKH -kni -bKH -ojG -afj -afj -afj -iku -nzL -pZK -iku -afj -pUu -kJS -jOy -hdP -xCw -hmc -xLv -hmc -pUz -bOJ -bOJ -cqW -pUu -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sja -pLk -pLk -sja -aNo -arz -arz -arz -arz -arz -aNo -sZq -fGY -fGY -vZC -fGY -fGY -eZs -fGY -fGY -fGY -eZs -fGY -fGY -fGY -sZq -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -arn -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -arz -arz -aoE -aMy -aMy -aMy -aMy -aMy -adu -aMy -aMy -adu -aMy -aMy -aMy -aMy -adu -aMy -aMy -aMy -aMy -adu -aMy -aMy -adu -aMy -aMy -aMy -aMy -aMy -aoE -arz -arz -"} -(173,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rHE -rHE -xdn -rHE -rHE -lrF -rbY -rbY -rHE -xdn -rHE -aNo -aNo -cqD -cqD -cqD -cqD -cqD -cqD -cqD -cqD -cqD -cqD -cqD -cqD -cqD -cqD -cqD -cqD -cqD -cqD -cqD -afj -afj -ojG -bKH -kni -bKH -ojG -afj -afj -afj -iku -pZK -pZK -iku -afj -pUu -iKG -lZE -sEI -hmc -hmc -xLv -hmc -pUz -bOJ -bOJ -daX -pUu -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sja -pLk -mED -sja -aNo -arz -arz -arz -arz -arz -aNo -sZq -fGY -fGY -fGY -oQq -fGY -eZs -fGY -jkj -fGY -mOq -fGY -fGY -fGY -sZq -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -arn -aNo -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -arz -aoE -aoE -aMy -aMy -aMy -aMy -afk -aMy -aMy -aMy -aMy -adu -aMy -aMy -aMy -adu -aMy -aMy -aMy -adu -aMy -aMy -aMy -aMy -afk -aMy -aMy -aMy -aMy -aoE -aoE -arz -"} -(174,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rbY -rbY -rHE -rHE -rHE -aNo -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -bKH -vva -bKH -ojG -afj -afj -afj -iku -pZK -nzL -iku -afj -pUu -iKG -lZE -sEI -xCw -hmc -xLv -xLv -pUz -bOJ -bOJ -hFW -pUu -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sja -pLk -pLk -sja -aNo -arz -arz -arz -arz -arz -aNo -sZq -fGY -fGY -fGY -fGY -fGY -eZs -fGY -fGY -fGY -eZs -fGY -fGY -fGY -sZq -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -arn -aNo -arz -arz -aNo -ayB -ayB -ayB -ayB -ayB -ayB -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aNw -anb -aNw -aoE -arz -aoE -aMy -aMy -aMy -aMy -aMy -afk -aMy -aMy -aMy -aMy -aMy -adu -aMy -aMy -adu -aMy -aMy -adu -aMy -aMy -aMy -aMy -aMy -afk -aMy -aMy -aMy -aMy -aMy -aoE -arz -"} -(175,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -dZu -dZu -dZu -rHE -dZu -rHE -rHE -rbY -rbY -rHE -ehd -rHE -aNo -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -bKH -kni -bKH -ojG -afj -afj -afj -iku -iXz -pZK -iku -afj -pUu -iKG -lZE -sEI -xCw -hmc -hmc -lpg -pUz -bOJ -bOJ -jrv -pUu -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sja -bIg -pLk -sja -aNo -arz -arz -arz -arz -arz -aNo -sZq -fGY -fGY -fGY -fGY -fGY -pWY -xeQ -xeQ -xeQ -pWY -fGY -fGY -fGY -sZq -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aEB -abG -aub -aub -aub -arn -aNo -arz -arz -aNo -ayB -aHa -aHa -aHa -aHa -ayB -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aoE -aoE -aoE -aMy -aMy -aMy -aMy -afk -aMy -aMy -aMy -aMy -aMy -aMy -aMy -adu -aMy -adu -aMy -adu -aMy -aMy -aMy -aMy -aMy -aMy -aMy -afk -aMy -aMy -aMy -aMy -aoE -arz -"} -(176,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rHE -rbY -rbY -rHE -rHE -rHE -aNo -aNo -afj -afj -afj -afj -agw -aHS -aNR -aHS -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -bKH -kni -bKH -ojG -afj -afj -afj -iku -pZK -pZK -iku -afj -pUu -iKG -lZE -sEI -xCw -ekr -lpg -lpg -pUz -bOJ -bOJ -bOt -pUu -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sja -pLk -pLk -sja -aNo -arz -arz -arz -arz -arz -aNo -sZq -fGY -fGY -fGY -fGY -fGY -fGY -fGY -fGY -fGY -fGY -fGY -fGY -ccv -sZq -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -aET -abG -aub -aub -aub -arn -aNo -arz -arz -aNo -ayB -aHt -aHa -aYY -aHt -ayB -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aNw -anb -aAR -aMy -aMy -aMy -aMy -afk -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -afk -aMy -aMy -aMy -aMy -aoE -arz -"} -(177,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rHE -rHE -meT -uSO -meT -iFx -rHE -rHE -rbY -rbY -rHE -rHE -rHE -aNo -aNo -afj -afj -afj -aHS -bfx -aJT -aOr -ayr -aHS -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -bKH -kni -bKH -ojG -afj -afj -afj -iku -pZK -pZK -iku -afj -pUu -iKG -lZE -sEI -xCw -wKd -xeE -xeE -pUz -bOJ -bOJ -cqW -pUu -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -sja -pLk -pLk -sja -aNo -aNo -aNo -aNo -aNo -arz -aNo -sZq -wTd -wTd -wTd -wTd -wTd -bjN -bjN -bjN -wTd -wTd -wTd -wTd -wTd -sZq -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -aub -aub -aub -aEe -afB -abG -aub -aub -aub -arn -aNo -aNo -aNo -aNo -ayB -aJd -ann -acx -aHt -ayB -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aNw -anb -aAR -adu -adu -adu -adu -afk -adu -adu -adu -adu -adu -adu -aUu -adu -aMy -asJ -aMy -adu -adu -adu -adu -adu -adu -adu -adu -afk -adu -adu -adu -adu -aoE -arz -"} -(178,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -baR -hrO -hrO -edS -hrO -baR -baR -sgP -hrR -baR -aGI -aYr -aNo -aNo -afj -afj -afj -aoO -aak -aML -aPB -bfx -aHS -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -fcS -kni -bKH -ojG -afj -afj -afj -iku -pZK -pZK -iku -afj -pUu -iKG -lZE -sEI -xCw -dTm -lpg -xeE -pUz -bOJ -bOJ -mIg -pUu -pUu -pUu -pUu -pUu -hmc -pUu -sjp -sja -sja -sja -sja -sja -sja -sja -sja -sja -sja -pYa -pLk -pLk -pYa -sja -sja -sja -sja -aNo -arz -aNo -sZq -suz -bjN -kDI -kDI -kDI -kDI -kDI -kDI -kDI -kDI -kDI -kDI -kDI -sZq -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -arn -arn -arn -azr -azr -azr -azr -azr -arn -arn -arn -aNo -aNo -ayB -ayB -ayB -ayB -aWg -nnQ -ayB -ayB -nLr -apL -apL -apL -apL -apL -apL -apL -apL -apL -apL -apL -apL -apL -apL -apL -apL -apL -iBo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -anb -anb -anb -aNw -anb -aAR -aMy -aMy -aMy -aMy -afk -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -afk -aMy -aMy -aMy -aMy -aoE -arz -"} -(179,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -baR -bPP -hAz -uYC -vGe -baR -sgP -uFT -uFT -sgP -baR -aNo -aNo -aNo -afj -afj -afj -aoO -aMF -aes -aQC -aRp -aak -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -bKH -kni -mJQ -ojG -afj -afj -afj -iku -iXz -pZK -iku -afj -pUu -hmc -hmc -hmc -xLv -xLv -lpg -xeE -pUz -xeE -xeE -xeE -xeE -xeE -xOE -hmc -kMw -hmc -lpg -sjp -iKp -vhq -vhq -vhq -vhq -vhq -vhq -vhq -vhq -vhq -pag -vhq -vhq -pag -rVW -vhq -vhq -sja -aNo -arz -aNo -sZq -bjN -kDI -gTp -kDI -kDI -kDI -gTp -kDI -kDI -kDI -gTp -kDI -kDI -sZq -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -ayB -ahC -aWg -aWg -aWg -aWg -aWg -aWg -aWg -apL -aRc -aJL -aic -aic -abd -ajW -aJL -aic -aic -aJL -abd -aic -aic -apL -aBQ -aEW -apL -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aMy -aMy -aMy -aMy -afk -aMy -aMy -aMy -aMy -aMy -aMy -aMy -adu -aMy -adu -aMy -adu -aMy -aMy -aMy -aMy -aMy -aMy -aMy -afk -aMy -aMy -aMy -aMy -aoE -arz -"} -(180,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -baR -sgP -sgP -sgP -sgP -baR -sgP -uFT -uFT -sgP -baR -aNo -arz -aNo -afj -afj -afj -afj -aiM -aVD -aVD -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -bKH -kni -bKH -hnp -hnp -hnp -hnp -hnp -htb -hnp -tQQ -afj -pUu -xLv -hmc -lpg -lpg -xLv -lpg -xeE -scT -wyH -wyH -wyH -wyH -wyH -wyH -wyH -hmc -gIr -kkK -sjp -sjp -sfA -bBs -lpw -bBs -bBs -bBs -cnA -bBs -bBs -bBs -bBs -bBs -bBs -bBs -bBs -vhq -sja -aNo -arz -aNo -sZq -sZq -sZq -sZq -sZq -sZq -sZq -sZq -sZq -sZq -sZq -sZq -sZq -sZq -sZq -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -ayB -aqM -aeX -aFp -aeX -aeX -aeX -aeX -aWg -azf -aJL -aJL -avz -aic -aic -aJL -aJL -agF -aJL -aJL -aJL -aic -aic -azc -aJL -aWI -apL -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aMy -aMy -aMy -aMy -aMy -afk -aMy -aMy -aMy -aMy -aMy -adu -aMy -aMy -adu -aMy -aMy -adu -aMy -aMy -aMy -aMy -aMy -afk -aMy -aMy -aMy -aMy -aMy -aoE -arz -"} -(181,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -baR -baR -baR -nXY -baR -baR -lCE -uFT -uFT -jME -baR -aNo -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -bKH -kni -bKH -hnp -pUe -lDC -sLG -uVx -dgs -gMx -hnp -afj -pUu -jHV -lpg -lpg -xLv -xeE -lpg -xeE -pUz -xeE -xeE -xeE -xeE -xeE -wyH -xeE -hmc -lpg -hmc -sjp -sjp -sjp -iKp -vhq -vhq -vhq -vhq -vhq -vhq -qMo -vhq -vhq -vhq -qMo -vhq -bBs -qMD -sja -aNo -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -anv -anv -anv -anv -anv -vcs -aPp -aeX -aeX -aeX -aeX -agG -aeX -ake -aLm -abd -aJL -aJL -aic -aic -abd -aLt -aJL -aJL -aJL -aJL -aic -aRc -apL -aMl -aJL -apL -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aMy -aMy -aMy -aMy -afk -aMy -aMy -aMy -aMy -adu -aMy -aMy -aMy -adu -aMy -aMy -aMy -adu -aMy -aMy -aMy -aMy -afk -aMy -aMy -aMy -aMy -aoE -aoE -arz -"} -(182,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -baR -sgP -sgP -sgP -sgP -baR -sgP -uFT -uFT -sgP -baR -aNo -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -ojG -bKH -bKH -bKH -hnp -dgs -dgs -kPC -dgs -dgs -lUd -hnp -afj -pUu -xeE -ian -xeE -lpg -lpg -ian -xeE -pUz -xeE -xeE -ian -tVa -olm -olm -lCv -nyu -pUu -pUu -sjp -nBg -nBg -rCK -rCK -rCK -nBg -vyO -vyO -vyO -nBg -nBg -vIs -faD -cUd -vhq -bBs -rgd -sja -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -anv -ayu -afR -acc -aaj -anv -aWg -aeX -aeX -aeX -aeX -aeX -aeX -adP -apL -auQ -aJL -auQ -apL -apL -apL -apL -apL -apL -aDz -aDz -apL -apL -apL -apL -apL -apL -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aMy -aMy -aMy -aMy -aMy -adu -aMy -aMy -adu -aMy -aMy -aMy -aMy -adu -aMy -aMy -aMy -aMy -adu -aMy -aMy -adu -aMy -aMy -aMy -aMy -aMy -aoE -arz -arz -"} -(183,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -baR -lCE -sgP -sgP -sgP -baR -sgP -uFT -uFT -sgP -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -kni -kni -kni -kni -hwN -dgs -dgs -oXc -uOC -uOC -rYc -hnp -afj -pUu -pUu -pUu -pUu -pUu -pUu -pUu -pUu -pUu -pUu -pUu -pUu -tVa -gvm -dOb -hBp -tVa -afj -afj -afj -afj -nBg -vyO -vyO -vyO -bOK -vyO -vyO -vyO -vyO -rCK -wGz -wGz -nBg -vhq -bBs -vhq -sja -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -anv -anv -anv -anv -anv -anv -anv -aCe -ahp -ahp -acL -anv -aCI -aeX -aeX -aeX -aeX -aeX -aeX -aWF -apL -auQ -aJL -auQ -apL -aNo -aNo -aNo -aNo -apL -aps -aps -apL -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aMy -aMy -aMy -aMy -aMy -aMy -adu -adu -aMy -aMy -aMy -aMy -aMy -adu -aMy -aMy -aMy -aMy -aMy -adu -adu -aMy -aMy -aMy -aMy -aMy -aMy -aoE -arz -arz -"} -(184,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -baR -rVo -sgP -uMT -sgP -baR -fio -uFT -uFT -fio -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -ojG -kni -vva -uVs -hnp -hnp -hnp -dgs -uOC -uOC -uOC -vxE -hnp -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -tVa -vjI -uQH -uQH -tVa -afj -nBg -nBg -nBg -nBg -vyO -sOs -lNP -lNP -lNP -lNP -dSQ -vyO -rCK -nvj -ttP -nBg -vhq -bBs -vhq -sja -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -anv -awC -aAU -aAU -aAU -aAU -aBc -afy -ahp -ahp -afy -ayA -aWg -aeX -aeX -aeX -aeX -aeX -aeX -aer -apL -auQ -aJL -auQ -apL -aNo -arz -arz -aNo -apL -acJ -acJ -apL -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aMy -aMy -aMy -aMy -aMy -adu -adu -aMy -aMy -aMy -aMy -aMy -adu -aMy -aMy -aMy -aMy -aMy -adu -adu -aMy -aMy -aMy -aMy -aMy -aoE -aoE -arz -arz -"} -(185,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -baR -sgP -sgP -sgP -sgP -baR -baR -vtr -vtr -baR -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -kni -kni -kni -mIW -hnp -rHB -hwN -dgs -dgs -ijR -kPC -lUd -hnp -afj -afj -afj -mzY -mzY -mzY -mzY -mzY -mzY -mzY -mzY -xcz -afj -tVa -tVa -uwM -tVa -tVa -afj -nBg -vyO -leN -utK -vyO -lNP -lNP -lNP -lNP -lNP -lNP -vyO -rCK -mcP -wGz -nBg -vhq -bBs -vhq -sja -aNo -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -anv -aAU -aok -aok -aok -aok -aBc -afy -ahp -ahp -afy -ayA -aWg -aeX -aeX -aeX -aeX -aeX -aFp -adP -apL -apL -apL -apL -apL -aNo -arz -arz -aNo -apL -apL -apL -apL -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aMy -aMy -aMy -aMy -adu -aMy -aMy -adu -aMy -aMy -aMy -aMy -adu -aMy -aMy -aMy -aMy -adu -aMy -aMy -adu -aMy -aMy -aMy -aMy -aoE -arz -arz -arz -"} -(186,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -baR -fio -sgP -sgP -fio -baR -sgP -uFT -uFT -sgP -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -byO -waO -kni -bQb -hnp -bSI -hnp -keM -eSD -keM -keM -tUX -hnp -afj -afj -afj -mzY -xjM -hyT -hOI -mzY -xjM -xjM -xjM -mzY -afj -tVa -wtk -hBp -kbW -tVa -afj -nBg -leN -vyO -utK -vyO -exd -lNP -lNP -lNP -lNP -xVJ -vyO -rCK -qQn -ogL -nBg -vhq -cnA -vhq -sja -aNo -arz -arz -arz -aNo -cNZ -cNZ -cNZ -cNZ -cNZ -cNZ -cNZ -cNZ -cNZ -cNZ -cNZ -eff -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -anv -aAU -aok -aAU -aAU -aAU -aBc -afy -ahp -ahp -afy -ayA -aWg -aeX -agG -aeX -aeX -aeX -aeX -ace -ayB -aNo -aNo -aNo -aNo -aNo -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aMy -aMy -adu -aMy -aMy -aMy -aMy -afk -afk -aMy -aMy -adu -aMy -aMy -afk -afk -aMy -aMy -aMy -aMy -adu -aMy -aMy -aoE -aoE -arz -arz -arz -"} -(187,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -baR -baR -nXY -baR -baR -baR -lCE -uFT -uFT -jME -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -vva -kni -ojG -ojG -hnp -hnp -hnp -hnp -hnp -hnp -hnp -hnp -hnp -afj -afj -afj -mzY -rSo -dsC -fPQ -mzY -xjM -jUD -xjM -mzY -afj -tVa -jlI -mgw -vtU -tVa -afj -nBg -lRV -leN -utK -vyO -lNP -lNP -lNP -lNP -lNP -lNP -vyO -rCK -fvQ -wGz -nBg -vhq -bBs -vhq -sja -aNo -arz -arz -arz -aNo -cNZ -wHI -fym -owF -gUA -xkB -upg -xkB -upg -ish -fym -cNZ -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -anv -aPU -adi -aPU -anv -anv -anv -aCe -aol -ahp -aYk -anv -aew -aWg -aWg -aWg -aWg -aWg -aWg -aWg -akZ -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -adu -aMy -aMy -aMy -aMy -aMy -aMy -aMy -afk -afk -afk -afk -afk -aMy -aMy -aMy -aMy -aMy -aMy -aMy -adu -aoE -aoE -arz -arz -arz -arz -"} -(188,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -baR -sgP -uYC -pni -sgP -baR -lCE -uFT -uFT -jME -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -kni -kni -ojG -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -mzY -dPz -xjM -xjM -mzY -xjM -xjM -jUD -mzY -afj -tVa -tVa -tVa -tVa -tVa -afj -nBg -nBg -nBg -nBg -vyO -iCk -lNP -lNP -lNP -lNP -xov -vyO -rCK -nvj -ttP -nBg -vhq -bBs -vhq -sja -aNo -arz -arz -arz -aNo -cNZ -fED -kZC -fym -fym -fym -qFa -fym -qFa -fym -fym -cNZ -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -anv -aPU -adi -aPU -anv -aNo -anv -aAk -agi -agi -ayU -anv -aza -aza -aza -aEH -aEH -aza -aza -aza -ayB -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -adu -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aoE -aoE -arz -arz -arz -arz -arz -"} -(189,1,1) = {" -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -baR -sgP -uYC -uYC -sgP -baR -sgP -uFT -uFT -sgP -baR -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -kni -fxV -ojG -afj -ojG -ojG -ojG -ojG -ojG -ojG -ojG -ojG -uNb -cqZ -afj -afj -mzY -prp -prp -prp -mzY -jUD -xjM -xjM -mzY -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -nBg -vyO -vyO -vyO -bsL -vyO -vyO -vyO -vyO -rCK -wGz -wGz -nBg -vhq -gBN -vhq -sja -aNo -arz -arz -arz -aNo -cNZ -uot -fym -dWt -kRR -kRR -fym -fym -fym -dWt -nyp -cNZ -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -anv -aBc -anv -aBc -anv -aNo -anv -anv -anv -anv -anv -aai -anu -aFv -aza -aeR -aeR -aza -adf -aoZ -aai -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -adu -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aMy -aoE -aoE -arz -arz -arz -arz -arz -arz -"} -(190,1,1) = {" -arz -aNo -vqZ -vqZ -vqZ -vqZ -vqZ -vqZ -vqZ -vqZ -vqZ -vqZ -vqZ -vqZ -vqZ -vqZ -vqZ -vqZ -vqZ -akH -aNo -aNo -baR -sgP -uYC -uYC -sgP -baR -vtr -baR -vtr -baR -baR -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -kni -kni -ojG -ojG -ojG -bKH -hCD -wWN -bKH -mLH -bKH -ojG -ojG -ojG -mzY -mzY -mzY -fwg -fwg -fwg -rWz -fwg -fwg -fwg -mzY -sja -sja -sja -sja -sja -sja -sja -sja -sja -sja -nBg -nBg -nBg -nBg -nBg -nBg -nBg -nBg -nBg -nBg -nBg -nBg -nBg -qMo -bBs -rgd -sja -aNo -arz -arz -arz -aNo -cNZ -jts -fym -dan -flC -dan -fym -fym -fym -fym -fym -cNZ -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -anv -aAU -anv -aAU -anv -aNo -aNo -aNo -aNo -aNo -aNo -aai -aZd -aFv -aza -aEH -aEH -aza -adf -aoZ -aai -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aMy -aMy -aMy -aMy -aMy -aMy -adu -aMy -aMy -aMy -aMy -aMy -aMy -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -"} -(191,1,1) = {" -arz -aNo -vqZ -jDi -ltG -ydy -ltG -ltG -gvf -jdo -moe -hgL -ltG -jDi -ltG -ydy -ltG -ltG -jDi -vqZ -aNo -aNo -baR -sgP -uYC -uYC -sgP -sgP -uYC -sgP -uYC -sgP -sgP -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -bKH -bKH -bKH -bKH -xAh -bKH -kni -kni -kni -kni -bKH -bKH -bKH -bKH -sUe -jIt -oNV -xVU -xVU -xVU -kor -xVU -xVU -xVU -eAz -vhq -vhq -vhq -vhq -pag -nOf -tER -vhq -rVW -vhq -vhq -vhq -vhq -vhq -pag -nOf -vhq -cao -vhq -vhq -vhq -vhq -vhq -vhq -bBs -vhq -sja -aNo -arz -arz -arz -aNo -cNZ -usS -usS -usS -usS -usS -usS -sst -usS -usS -usS -cNZ -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -anv -aAU -anv -aAU -anv -aNo -arz -arz -arz -arz -aNo -aai -afo -aFv -aMh -avl -aeR -aMh -adf -aqG -aai -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aMy -aMy -aMy -adu -aMy -aMy -aMy -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(192,1,1) = {" -arz -aNo -vqZ -jDi -kdM -gDg -oXe -bWx -xlZ -kdM -gDg -oXe -bWx -jDi -ltG -ltG -xgs -ltG -jDi -vqZ -aNo -aNo -baR -fio -uYC -uYC -jPD -uYC -uYC -uYC -uYC -fnD -sgP -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -dnS -vva -kni -kni -kni -bKH -kni -waO -kni -kni -kni -kni -kni -bKH -kRe -itz -fyE -fyE -fyE -fyE -fyE -fyE -fyE -jLK -ffD -bBs -bBs -bBs -cnA -bBs -bBs -bBs -bBs -bBs -bBs -bBs -bBs -bBs -bBs -bBs -bBs -bBs -xzA -bBs -bBs -bBs -bBs -bBs -bBs -bBs -vhq -sja -aNo -arz -arz -arz -aNo -nxx -jBF -bMJ -bMJ -bMJ -bMJ -bMJ -bMJ -bMJ -mmj -rRB -nxx -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -anv -aBc -anv -aBc -anv -aNo -arz -arz -arz -arz -aNo -aai -aZd -aFv -aMh -aeR -aMh -aMh -adf -aoZ -aai -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -aoE -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(193,1,1) = {" -arz -aNo -vqZ -jDi -kdM -gDg -oXe -xUH -gCB -kdM -ejs -oXe -xUH -jDi -ltG -ltG -ltG -ltG -iNa -vqZ -aNo -aNo -baR -sgP -uYC -uYC -uYC -uYC -uYC -uYC -sTX -uYC -sgP -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -bKH -ssI -bKH -bKH -bKH -bKH -bKH -bKH -bKH -ipj -bKH -bKH -bKH -bKH -sUe -itz -jLK -jLK -jLK -jLK -jLK -jLK -fyE -jLK -eAz -vhq -tER -vhq -vhq -vhq -vhq -vhq -vhq -vhq -vhq -rVW -vhq -vhq -rVW -vhq -vhq -vhq -cao -vhq -vhq -vhq -vhq -vhq -vhq -bBs -vhq -sja -aNo -arz -arz -arz -aNo -nxx -vHB -mqB -mqB -mqB -mqB -mqB -mqB -wMZ -wMZ -mFi -nxx -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aey -aBD -aCA -aBK -aey -aNo -arz -arz -arz -arz -aNo -aai -aLU -aFv -aMh -aMh -aMh -aMh -adf -axy -aai -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(194,1,1) = {" -arz -aNo -vqZ -jDi -kdM -gDg -jSt -jyc -jDi -kdM -ejs -jSt -jyc -jDi -ltG -ltG -ltG -ltG -jDi -vqZ -aNo -aNo -baR -baR -baR -baR -oGD -uYC -uYC -uYC -uYC -uYC -jME -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -ojG -ojG -ojG -ojG -ojG -ojG -pxJ -ojG -bxm -bxm -bxm -bxm -ojG -ojG -ojG -mzY -njF -njF -njF -njF -njF -uZQ -jLK -fyE -jLK -mzY -sja -sja -sja -sja -sja -sja -sja -sja -isf -isf -isf -isf -isf -isf -isf -sja -sja -sja -sja -sja -vhq -vhq -sja -vhq -bBs -vhq -sja -aNo -aNo -aNo -aNo -aNo -nxx -vHB -jqU -nxx -nxx -nxx -nxx -nxx -nxx -wMZ -oUx -nxx -nxx -nxx -nxx -nxx -nxx -nxx -nxx -pdX -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aey -aBD -aCA -apQ -aey -aNo -arz -arz -arz -arz -aNo -aai -apJ -aQl -aeR -aMh -aYK -aYK -aVl -aNz -aai -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(195,1,1) = {" -arz -aNo -vqZ -tRW -kdM -gDg -oXe -jyc -jDi -kdM -ejs -lZa -jyc -jDi -xuC -ltG -ltG -ltG -jDi -vqZ -aNo -aNo -baR -vGe -bem -hrO -uYC -uYC -uYC -sTX -uYC -uYC -sgP -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -wth -qym -wth -nRP -wft -wfi -jJB -axF -afj -afj -mzY -ydM -iVz -ydM -iVz -uBx -gOg -jLK -fyE -jLK -mzY -afj -afj -afj -afj -afj -afj -afj -sja -kQc -hcK -hcK -neA -hcK -hcK -jOY -sja -afj -afj -afj -sja -dWA -dWA -sja -vhq -cnA -vhq -okE -okE -okE -ryu -aNo -aNo -nxx -vHB -mqB -nxx -cbk -blz -uOu -eQj -nxx -wMZ -vLL -qMF -rts -vGc -jdE -jdE -jdE -fvE -kGj -nxx -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aey -aqH -alq -aiC -aey -aNo -aNo -aNo -aNo -aNo -aNo -aai -aTO -aZl -anJ -avB -aqy -aOy -akU -afJ -aai -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(196,1,1) = {" -arz -aNo -vqZ -jDi -kdM -gDg -oXe -jyc -jDi -kdM -gDg -oXe -jyc -jDi -kdM -gDg -oXe -bWx -jDi -vqZ -aNo -aNo -baR -hme -vSs -edS -uYC -uYC -uYC -uYC -uYC -sTX -sgP -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -wth -qym -wth -sJE -vLs -iHL -sJE -wth -afj -afj -mzY -uJr -lkV -uJr -trZ -iTd -gOg -jLK -jLK -jLK -mzY -afj -afj -afj -afj -afj -afj -afj -sja -sja -sja -sja -sja -sja -sja -sja -sja -afj -afj -afj -sja -dWA -dWA -sja -vhq -bBs -vhq -okE -iWf -eky -okE -aNo -aNo -nxx -vHB -pCG -wXR -cbk -cbk -uOu -eQj -nxx -wMZ -wMZ -mbf -wMZ -wMZ -wMZ -wMZ -wMZ -wMZ -oos -nxx -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aey -aey -aey -aey -aey -aqH -alq -ajl -aey -aey -aey -aey -isX -aNo -aNo -aai -aai -aai -aai -aai -aai -aai -aai -aai -aai -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(197,1,1) = {" -arz -aNo -vqZ -jDi -kdM -uzy -hdA -xZR -jDi -kdM -uzy -hdA -xZR -jDi -kdM -ejs -oXe -xUH -jDi -vqZ -aNo -aNo -baR -sgP -fxF -baR -uYC -uYC -iHm -uYC -uYC -uYC -sgP -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -wth -olH -icZ -sJE -tMk -sJE -sJE -wth -afj -afj -mzY -sUe -sUe -sUe -sUe -sUe -sUe -sUe -kRe -sUe -mzY -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -sja -pVe -afj -sja -vhq -bBs -vhq -oTZ -eXf -sQo -okE -aNo -aNo -nxx -vHB -pCG -mqB -cbk -cbk -uOu -eQj -nxx -mqB -mqB -srf -mqB -mqB -lkE -mqB -mqB -mqB -oos -nxx -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aey -ahI -azk -alq -aZH -aqH -alq -aqr -aey -akI -ahT -atz -aey -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(198,1,1) = {" -arz -aNo -vqZ -jDi -cSv -pnc -nSe -kNj -jDi -cSv -pnc -nSe -kNj -jDi -kdM -ejs -jSt -jyc -iNa -vqZ -aNo -aNo -baR -nXY -baR -baR -oGD -uYC -uYC -ciB -sTX -uYC -jME -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -wth -wth -wth -wth -wth -wth -jBR -wth -afj -afj -mzY -eij -wUw -wUw -wUw -wUw -iXA -fyE -fyE -fyE -mzY -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -sja -dWA -afj -sja -jeC -bBs -vhq -okE -iWf -muZ -okE -aNo -aNo -nxx -vHB -mqB -nxx -cbk -uOu -uOu -eQj -nxx -mqB -wye -jBA -yeu -uhW -yeu -vju -hjB -hjB -vTT -nxx -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aey -aNv -arj -alq -aey -aqH -alq -aqr -aZH -alq -alq -alq -aey -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(199,1,1) = {" -arz -aNo -vqZ -jDi -ltG -ltG -ltG -ltG -jDi -ltG -ltG -ltG -ltG -jDi -kdM -ejs -oXe -jyc -jDi -vqZ -aNo -aNo -baR -sgP -uYC -uYC -uYC -sTX -uYC -ciB -ciB -ciB -sgP -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -wth -hzF -bRK -olH -olH -wth -afj -afj -mzY -fyE -igt -dDU -fyE -igt -fyE -fyE -fyE -dDU -mzY -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -sja -aKq -afj -sja -vhq -bBs -vhq -okE -eXf -jpM -okE -aNo -aNo -nxx -vHB -lnj -nxx -nxx -nxx -nxx -nxx -nxx -mqB -lzG -nxx -nxx -nxx -nxx -tBk -xNT -efO -tBk -nxx -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aey -akW -avS -avS -aqc -aqH -aOG -aqr -aey -alq -aEp -alq -aey -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(200,1,1) = {" -arz -aNo -vqZ -tRW -xjK -ltG -ltG -ltG -ofE -ltG -ltG -dFb -ltG -jDi -kdM -ejs -oXe -jyc -jDi -vqZ -baR -baR -baR -lCE -uYC -uYC -uYC -uYC -ciB -ciB -dPS -ciB -uMT -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -wth -orr -olH -olH -wLZ -wth -afj -afj -mzY -qlg -fyE -fyE -fyE -iFR -fyE -fyE -fyE -fyE -mzY -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -sja -vhq -iKp -iKp -okE -jFH -sQo -okE -aNo -aNo -nxx -vHB -mqB -mqB -mqB -mqB -mqB -mqB -mqB -mqB -jRH -nxx -aNo -aNo -nxx -gWm -mqB -mqB -phk -nxx -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aey -abS -aDM -avS -aqc -aqH -alq -aqr -aqc -aGZ -aEp -aOe -aey -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(201,1,1) = {" -arz -aNo -puQ -ltG -ltG -xuC -ltG -ltG -ltG -ltG -ltG -ltG -ltG -ltG -kdM -uzy -hdA -xZR -ltG -pNo -uMT -sgP -sgP -sgP -uYC -sTX -uYC -ciB -dPS -ciB -fnD -ciB -uMT -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -wth -wth -wth -wth -wth -wth -afj -afj -mzY -mzY -mzY -mzY -mzY -mzY -mzY -mzY -mzY -mzY -mzY -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -sja -iKp -afj -afj -okE -okE -okE -okE -aNo -aNo -nxx -ohO -wmo -ePK -wmo -wmo -fXG -wmo -wmo -wmo -wot -nxx -aNo -aNo -nxx -vTc -mqB -mqB -neu -nxx -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aey -aNv -arj -avS -aqc -aqH -alq -aqr -aqc -avS -aYR -avS -aey -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(202,1,1) = {" -arz -aNo -puQ -ltG -ltG -ltG -ltG -ltG -dFb -tvQ -ltG -ltG -xgs -ltG -cSv -pnc -nSe -kNj -ltG -pNo -uYC -lEu -uYC -uYC -pYW -uYC -uYC -uYC -ciB -ciB -sTX -uYC -uMT -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -sja -afj -afj -afj -aYr -aNo -aNo -aNo -aNo -aNo -nxx -nxx -nxx -nxx -nxx -nxx -nxx -nxx -nxx -nxx -nxx -nxx -aNo -aNo -nxx -tBk -xNT -efO -tBk -nxx -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aey -akf -aXv -aLJ -aey -aqH -alq -aqr -aqc -aDM -aVV -avS -aey -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(203,1,1) = {" -arz -aNo -puQ -ltG -ltG -ltG -ltG -ltG -ltG -ltG -ltG -ltG -ltG -ltG -ltG -ltG -ltG -ltG -tXq -ltG -pst -oCV -uYC -uYC -uYC -uYC -uYC -gwE -dPS -uYC -ciB -uYC -brg -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -aNo -aNo -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -nlM -lyv -mtu -mtu -eMn -vlF -vlF -vlF -vlF -kWF -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aey -aey -aey -aey -aey -aqH -alq -apd -aey -aey -aey -aey -aey -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(204,1,1) = {" -arz -aNo -puQ -ltG -xgs -ltG -ltG -ltG -ltG -dFb -ltG -ltG -pNo -ltG -ltG -ltG -ltG -ltG -pNo -ltG -sgP -sgP -uMT -sgP -uYC -uYC -uYC -fnD -uYC -uYC -uYC -pst -sgP -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -nlM -nvW -qxX -qxX -mpE -wkG -feL -dlk -qRz -vlF -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aey -aqH -alq -acY -aey -apx -azk -akI -aey -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(205,1,1) = {" -arz -aNo -vqZ -koR -cXa -cXa -cXa -cXa -cXa -cXa -cXa -cXa -cXa -crz -ltG -ltG -ltG -ltG -jDi -vqZ -baR -baR -baR -baR -baR -baR -sgP -sgP -sgP -sgP -sgP -baR -baR -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -nlM -gYK -eiE -qxX -mpE -wkG -vLv -dWe -vLv -vlF -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aey -aqH -alq -aUV -aZH -alq -alq -aEp -aey -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(206,1,1) = {" -arz -aNo -vqZ -tcK -tcK -fjK -tcK -nxD -tcK -fjK -tcK -tcK -tcK -tcK -ltG -ltG -ltG -ltG -jDi -vqZ -aNo -aNo -aNo -aNo -aNo -baR -pnl -pnl -edZ -pnl -pnl -baR -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -afj -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -nlM -nvW -qxX -djS -mpE -wkG -oxx -vLv -rDg -vlF -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aey -aqH -alq -aqr -aey -aOG -aGZ -air -aey -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -apG -aAt -aAt -aAt -aAt -aAt -aAt -aAt -aAt -aAt -aPY -aWx -aWx -aWx -aWx -aWx -aWx -aWx -aAt -aAt -aAt -fea -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(207,1,1) = {" -arz -aNo -vqZ -tcK -tcK -tcK -tcK -tcK -tcK -tcK -tcK -tcK -tcK -vpS -ltG -ltG -xgs -ltG -iNa -vqZ -aNo -arz -arz -arz -aNo -baR -edZ -edZ -edZ -edZ -edZ -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -nlM -nvW -qxX -qxX -mpE -wkG -vLv -vLv -vLv -vlF -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aey -aqH -alq -aqr -aqc -alq -alq -aXM -aey -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -apG -aAt -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aqL -ana -awU -aSa -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(208,1,1) = {" -arz -aNo -vqZ -pOk -jpF -eJv -tcK -qGC -rLR -geV -ugs -ugs -ugs -dnf -ltG -ltG -ltG -ltG -jDi -vqZ -aNo -arz -arz -arz -aNo -baR -baR -rSt -edZ -edZ -edZ -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sWl -sWl -sWl -sWl -sWl -sWl -sWl -nXT -xEP -xEP -xEP -xEP -xEP -xEP -xEP -xEP -xEP -xEP -xEP -xEP -xEP -xEP -vvC -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -nlM -shY -qxX -qxX -mpE -fHn -nSW -kam -rXr -vlF -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aey -aqH -aOG -aqr -aqc -alq -aGZ -aXM -aey -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -apG -aAt -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aqL -ana -awU -aSa -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(209,1,1) = {" -arz -aNo -vqZ -vqZ -vqZ -vqZ -jte -vqZ -vqZ -vqZ -vqZ -vqZ -vqZ -vqZ -vqZ -vqZ -vqZ -vqZ -vqZ -vqZ -aNo -arz -arz -arz -aNo -baR -uQI -edZ -edZ -edZ -pgK -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sWl -ozz -lEm -lEm -ozz -lwG -lwG -hjV -xEP -dIH -yhM -dIH -uwk -uxn -dQa -nQJ -nQJ -nQJ -nQJ -nQJ -iqp -pZl -xEP -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -nlM -fBv -qxX -qxX -cms -vlF -vlF -vlF -vlF -vlF -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aey -aqH -alq -aqr -aqc -alq -acu -aXM -aey -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -apG -aAt -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aqL -ana -awU -aSa -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(210,1,1) = {" -arz -aNo -aNo -qiU -nqs -nqs -nqs -nqs -nqs -qiU -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -aNo -baR -uYl -uYl -uYl -bZa -uYl -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sWl -ozz -ozz -ozz -gpj -ozz -ozz -qLk -xEP -dIH -eMs -dIH -oBA -fUS -fUS -fUS -fUS -fUS -fUS -fUS -mOs -iWI -xEP -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -nlM -uTE -qxX -qxX -tSn -eBc -gKy -kAS -gKy -gKy -gKy -djq -gKy -qGR -gKy -dvk -gKy -gKy -gKy -djq -gKy -gKy -gKy -kAS -gKy -gKy -gKy -qLz -nlM -aNo -aNo -aNi -aNi -aNi -aNi -aNi -aNi -aNi -aNi -aey -aqH -alq -aqr -aey -aey -aey -aey -aey -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -apG -aAt -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aqL -ana -awU -aSa -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(211,1,1) = {" -arz -arz -aNo -qiU -wOo -yhc -poP -qhh -rUc -qiU -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -baR -baR -baR -baR -baR -baR -baR -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sWl -ozz -jJJ -lwG -pYd -pYd -ozz -ozz -xEP -vUI -eMs -eMs -gov -eMs -eMs -eMs -eMs -eMs -eMs -gov -can -piJ -xEP -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -nlM -rnF -qxX -qxX -qxX -vLa -vLa -vLa -vLa -vLa -vLa -say -vLa -vLa -vLa -vLa -vLa -vLa -vLa -vLa -vLa -vLa -iLb -vLa -vLa -qxX -qxX -xIo -nlM -aNo -aNo -aNi -ahf -atd -aBj -aBj -aBj -aBj -atd -aBj -aFz -ahA -aFU -aNi -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -apG -aAt -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aqL -ana -awU -aSa -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(212,1,1) = {" -arz -arz -aNo -qiU -qiU -qiU -qiU -qiU -qiU -qiU -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sWl -lwG -ozz -ozz -ozz -ozz -ozz -ceV -xEP -xiq -dIH -dIH -qBU -dIH -mnf -fjM -dIH -dIH -dIH -eMs -can -caQ -xEP -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -nlM -wfY -jki -kJN -jki -jki -jki -krt -jki -xJD -jki -kJN -jki -jki -jki -jki -jki -jki -jki -jki -jki -jki -jki -kJN -jki -uUl -qxX -mpE -nlM -aNo -aNo -aNi -aMq -ahA -ahA -aHR -ahA -ahA -aHR -ahA -ahA -aFa -aly -aNi -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -apG -aAt -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aqL -ana -awU -aSa -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(213,1,1) = {" -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sWl -lwG -ozz -sWl -sWl -sWl -sWl -sWl -xEP -dIH -qCF -dIH -mnn -wfT -pzc -wLy -pzc -tjZ -dIH -eMs -can -iWI -xEP -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -kyP -kyP -kyP -kyP -kyP -kyP -kyP -oQy -nvW -qxX -oqM -nlM -aNo -aNo -aNi -aMq -ahA -aOI -awl -awl -awl -awl -awl -awl -awl -atV -aNi -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -apG -aAt -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aqL -ana -awU -aSa -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(214,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sWl -lwG -ozz -sWl -kwe -ePW -ePW -iiA -xEP -iDr -dIH -dIH -qBU -pzc -xEP -eYk -xEP -pzc -qCF -eMs -can -jzY -xEP -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -kyP -fNm -fNm -uSZ -qJF -crg -dHh -hAH -nvW -qxX -mpE -nlM -aNo -aNo -aNi -aMq -ahA -aSO -aZU -aZU -aZU -aZU -aZU -aZU -aZU -aZU -gUo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -apG -aAt -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aqL -ana -awU -aSa -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(215,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -sWl -lwG -ozz -sWl -eZm -eZm -hAE -eZm -pJF -hwQ -dIH -dIH -ceO -ufF -eYk -tGy -eYk -pzc -ddt -cUf -can -iWI -xEP -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -kyP -sGY -wHR -qFQ -wHR -tow -fNm -hAH -nvW -eiE -ckJ -nlM -aNo -aNo -aNi -aAM -adj -aly -aZU -aUS -aUS -aZU -aby -aby -arQ -aby -aYH -aYH -aYH -aYH -aYH -aYH -aYH -aYH -aYH -aYH -aYH -aYH -aYH -aNo -arz -arz -apG -aAt -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aPn -aPA -aPA -aPA -aPn -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(216,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -sWl -ozz -ozz -sWl -eZm -eZm -eZm -eZm -pJF -hwQ -vDa -dIH -dIH -pzc -xEP -eYk -xEP -pzc -dIH -xpk -iWI -iWI -xEP -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -kyP -pUQ -wHR -cjV -nej -dpK -gid -hAH -nvW -qxX -vAS -nlM -aNo -aNo -aNi -ahR -ahA -aFU -aZU -aJt -aJt -aKa -aby -aTs -aBG -aby -aYH -apn -ajz -adY -amZ -aKM -auC -adY -amZ -aKM -apD -aWu -aYH -aNo -arz -arz -apG -aAt -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aCj -aYB -aYB -azQ -aNc -adL -ayH -azQ -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(217,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -svJ -svJ -svJ -sWl -ozz -ozz -sWl -kwe -oNZ -oNZ -kwe -goz -xez -dIH -dIH -dIH -hGC -pzc -pem -pzc -tjX -dIH -izl -lit -iWI -xEP -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -kyP -qHk -qQX -jHm -ggY -wHR -uAQ -hAH -nvW -qxX -mnS -nlM -aNo -aNo -aNi -apW -ahA -aFU -aZU -abs -abs -aUc -aOz -ajJ -ajJ -aym -aYH -apD -apD -apD -apD -apD -apD -apD -apD -agq -aIX -apD -aYH -aNo -aNo -aaZ -apG -aAt -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aTR -aRb -aRb -aAC -aXz -aXz -aXz -aPA -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(218,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -aNo -hjl -hjl -hjl -hjl -hjl -eSs -lQc -lQc -lQc -lQc -lQc -lQc -lQc -xkv -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -vhg -hfW -ofP -sWl -fYL -sWl -sWl -bix -svJ -svJ -svJ -xEP -tkh -dIH -dIH -wCZ -qCF -dIH -nQJ -qCF -dIH -pDo -wCZ -can -qnL -xEP -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -aNo -kyP -yhH -wHR -jHm -ggY -dpK -fNm -hAH -nvW -qxX -kwF -nlM -aNo -aNo -aNi -afU -ahA -aFU -aZU -abs -abs -aUc -aUc -aUc -aUc -aUc -aYH -alO -atT -alO -alO -aoJ -alO -alO -alO -alO -alO -alO -aYH -aYH -aYH -aYH -aYH -aYH -aYH -kXX -amf -aTa -aSa -aSa -aSa -aTR -aRb -aRb -azQ -aCK -aXz -aXz -aPA -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(219,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rCG -dDF -dDF -dDF -rCG -aNo -arz -arz -arz -arz -arz -arz -arz -aNo -xxG -xxG -xxG -xxG -xxG -xxG -xxG -xxG -xxG -aUL -aNo -arz -arz -arz -arz -arz -arz -aNo -hjl -ylC -ylC -ylC -ylC -hjl -tve -tve -tve -lQc -tzU -tzU -tzU -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -dIq -qYc -vhW -svJ -jOA -iHF -qnr -eZm -kwe -kwe -kwe -xEP -xiq -dIH -mgO -eMB -eMB -eMB -nQJ -dIH -dIH -dIH -dIH -gaj -rnL -xEP -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -dTz -aNo -arz -arz -arz -arz -arz -arz -aNo -kyP -guk -wHR -jHm -ggY -fQo -bfV -hAH -nvW -qxX -bwz -nlM -aNo -aNo -aNi -aMq -ahA -aFU -aZU -abs -abs -aJt -aJt -aLS -aJt -aJt -aYH -alO -aNa -aNa -aNa -aNa -aNa -aNa -aNa -aNa -aNa -aNa -aFP -aWm -apD -aIO -aIk -aIO -aIO -aVi -aRb -aRb -aYB -aYB -aYB -abk -aRb -aRb -aPA -aSR -adA -aXz -aPA -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(220,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rCG -cjE -bbI -cjE -rCG -aNo -arz -arz -arz -arz -arz -arz -arz -aNo -xxG -kBo -fwW -nJA -jIb -jIb -ceW -qYn -qYn -xxG -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -hjl -ylC -dQu -dQu -ylC -thu -tzU -tzU -tzU -jdz -tzU -gkl -tzU -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -sfK -veB -jOA -lFA -jOA -glF -wKF -eZm -kwe -kwe -iZK -xEP -dIH -tmC -nQL -bvz -bvz -rdu -nQJ -dIH -dIH -vUI -dIH -vUI -dIH -xEP -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -gtN -dAv -ehE -ehE -dxJ -ehE -qXG -ehE -ehE -ehE -ehE -ehE -ehE -qXG -ehE -ehE -gtN -iWr -kZK -iWr -ukc -gtN -aNo -arz -arz -arz -arz -arz -arz -aNo -kyP -uMO -qQX -nHG -mLc -wHR -lAI -kyP -qpF -qxX -ebi -nlM -nlM -nlM -iJL -aFz -ahA -aFU -aZU -alm -ajT -ajT -ajT -ajT -ajT -anA -aYH -acZ -aNa -aME -aAs -aAs -aAs -aAs -aKB -aNa -aNa -aNa -aFP -aLO -apt -apt -apt -apt -apt -aVi -aRb -aRb -aRb -aRb -aRb -aRb -aRb -aRb -aPA -aSR -adA -aXz -aPA -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(221,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rCG -cjE -cDJ -gTh -rCG -aNo -arz -arz -arz -arz -arz -arz -arz -aNo -xxG -cRb -vPK -vPK -vPK -vPK -bYu -ubP -ubP -xxG -aNo -fqj -fqj -fqj -fqj -fqj -fqj -fqj -wxv -ylC -dQu -dQu -ylC -ylC -tzU -tzU -tzU -tzU -tzU -gkl -xHe -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -gAf -kBT -fmF -svJ -kRp -nII -njp -eZm -kwe -kwe -vXB -xEP -xLa -xLa -mkN -gVb -bvz -bvz -vXf -dIH -dIH -dIH -dIH -dIH -dIH -xEP -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -gtN -sut -fos -dUs -dUs -dUs -dUs -dUs -jQR -iEr -dUs -dUs -dUs -vNU -dUs -dGY -faZ -iWr -iWr -iWr -ukc -gtN -aNo -arz -arz -arz -arz -arz -arz -aNo -kyP -bfV -wHR -wHR -wHR -wHR -crg -hAH -iPM -riC -oEl -kmE -uph -mah -sCn -gAB -ahA -aLX -aZU -abs -ajT -awu -awu -awu -aih -aQL -aYH -alO -aNa -aBS -aTn -arF -aeo -ado -aVn -aNa -aNa -aNa -aFP -apD -aIO -aIO -aIO -aIO -aIO -aVi -aRb -aRb -aYb -aYb -aYb -aAg -aRb -aRb -aPA -aSR -adA -aXz -aPA -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(222,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rCG -cjE -bbI -cjE -rCG -aNo -arz -arz -arz -arz -arz -arz -arz -aNo -xxG -vwV -vwV -vwV -tQp -gze -gVo -ubP -pso -xxG -aNo -fqj -qIB -rfm -fzF -cPI -fzF -kzW -fqj -lti -dQu -dQu -ylC -hjl -rFA -rFA -rFA -lQc -tzU -gkl -tzU -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -svJ -svJ -svJ -svJ -kwe -kwe -kwe -eZm -kwe -kwe -kuR -rbu -rbu -rbu -rbu -xEP -tbG -tbG -tbG -tbG -tbG -xEP -xEP -xEP -xEP -xEP -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -gtN -sut -fos -dUs -dUs -dUs -dUs -dUs -dUs -dUs -dUs -dUs -dUs -dUs -dUs -dGY -dUs -iWr -iWr -iWr -ukc -gtN -aNo -arz -arz -arz -arz -arz -arz -aNo -kyP -oDW -wHR -wHR -wHR -wHR -crg -npB -iPM -fEr -riC -iPM -rkV -rkV -iPM -ahA -aHR -ahA -azu -abs -ajT -aNF -ajT -ajT -ajT -akE -aYH -alO -aNa -aBS -acE -aSD -awn -vAe -aVn -aNa -aNa -atT -aYH -aYH -aRS -aRS -aRS -aRS -aYH -aYH -aRb -acP -aSa -aSa -aSa -aTR -aRb -aRb -aPA -aSR -adA -aXz -aPA -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(223,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -rCG -cjE -bbI -cjE -rCG -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -xxG -cKX -tFO -tFO -ciK -lVe -xao -ubP -uGf -xxG -aNo -fqj -evY -nZI -nZI -nZI -evY -nZI -fqj -ylC -hrW -dQu -ylC -hjl -hjl -hjl -hjl -hjl -tzU -gkl -tzU -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -svJ -oQS -kwe -kwe -eZm -kwe -kwe -dTf -rbu -lWf -eKW -rbu -jEk -bJu -xxk -dYJ -xxk -vlf -jEk -bGu -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -aNo -gtN -ehE -kvl -oXi -ehE -ehE -pdC -dxJ -ehE -ehE -ehE -ehE -ehE -rTr -ehE -ehE -gtN -iWr -iWr -iWr -ukc -gtN -aNo -arz -arz -arz -arz -arz -arz -aNo -kyP -fvJ -wHR -wHR -lSV -wHR -crg -hAH -iPM -riC -hcD -dOR -uQK -rkV -dOR -oPR -ahA -aQB -aZU -abs -ajT -aqD -aqD -aqD -aFX -aQL -aYH -alO -aNa -aBS -aXl -agq -awn -axg -aVn -aNa -aNa -alO -aYH -aQa -arN -aed -aZW -aCc -ahy -aYH -agD -acP -aSa -aSa -aSa -aTR -aRb -aRb -aPA -aSR -adA -aXz -aPA -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(224,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rCG -rCG -rCG -rCG -cjE -bbI -cjE -rCG -rCG -rCG -rCG -akN -eJC -gMj -gMj -ark -aNo -xxG -gXc -uEe -uEe -ciK -lVe -xao -ubP -upu -xxG -aNo -fqj -xPH -nZI -nZI -nZI -nZI -nZI -tpG -ylC -dQu -dQu -ylC -ylC -ylC -ylC -ylC -hjl -tzU -gkl -tzU -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -kwe -kwe -kwe -eZm -kwe -kwe -dTf -rbu -dTO -eYu -rbu -wea -oSQ -vfC -wUr -vfC -oSQ -iDF -rhO -rhO -rhO -rhO -rhO -rhO -rhO -rhO -rhO -rhO -rhO -rhO -rhO -rhO -aNo -arz -arz -arz -aNo -gtN -gtN -gdc -jem -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -aNo -arz -arz -arz -arz -arz -arz -aNo -kyP -fNm -wHR -sJT -vmK -wHR -lAI -kyP -sUn -qxX -vLg -aXT -aXT -aXT -oza -bZK -ahA -ano -aZU -abs -ajT -aby -aby -aby -aby -aJt -aYH -alO -aNa -aBS -apD -apD -aGB -aeB -aVn -aNa -aNa -alO -aYH -aWb -aLk -aJb -aLk -aLk -aLk -usf -aYb -aFj -aSa -aSa -aSa -aZS -aYb -aYb -azQ -aQc -aXz -ayH -azQ -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(225,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -rCG -cjE -cjE -meb -kLj -kLj -kLj -nZJ -cjE -gOM -wXI -wXI -eJC -hfP -hfP -eJC -aNo -xxG -gXc -tFO -tFO -ciK -lVe -xao -ubP -uGf -xxG -aNo -fqj -nZI -nZI -nZI -nZI -nZI -nZI -fqj -ylC -dQu -dQu -dQu -dQu -dGr -dQu -ylC -hjl -tzU -gkl -tzU -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -jwD -kwe -kwe -eZm -kwe -kwe -dTf -rbu -wRp -iMP -kZT -ipk -vfC -vfC -vfC -vfC -vfC -wea -rhO -cqd -cqd -bPo -cqd -cqd -cqd -cqd -cqd -cDA -cDA -cDA -cqd -rhO -aNo -arz -arz -arz -aNo -gtN -rqQ -gdc -gdc -otO -gtN -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -aNo -kyP -qHk -qQX -uuE -jmM -fFh -mEd -hAH -nTs -qxX -npW -aXT -ayZ -oNA -aXT -nhS -ahA -aWR -aZU -axL -ajT -aIW -aIW -aIW -aFX -aQL -aYH -acZ -aGY -aTE -aJF -aJF -aJF -aJF -alf -aZJ -aNa -aoJ -aYH -aCT -aKg -aLk -aLk -aLk -ahy -aYH -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aPn -aPA -aPA -aPA -aPn -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(226,1,1) = {" -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -rCG -cjE -jRk -jRk -jRk -jRk -jRk -jRk -jRk -dus -bbI -bbI -eJC -hfP -hfP -eJC -aNo -xxG -gXc -uEe -uEe -ciK -lVe -xao -ubP -upu -xxG -aNo -fqj -xbr -nZI -tJD -nZI -gee -lbg -fqj -ylC -dQu -oTo -wAD -ykY -wAD -rPZ -ylC -hjl -tzU -gkl -tzU -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -svJ -svJ -kwe -eZm -kwe -kwe -kuR -rbu -mLg -eKW -cIR -tww -tww -tww -tww -tww -tww -tww -hfh -cqd -cqd -fXk -cqd -cqd -qTM -fXk -cqd -cqd -cqd -cqd -hYc -rhO -aNo -arz -arz -arz -aNo -gtN -rqQ -gdc -gdc -wJJ -gtN -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -kyP -fNm -tow -wHR -wHR -wHR -twQ -hAH -nTs -qxX -jdg -aXT -ayZ -ayZ -aXT -vJI -aFa -aWR -aZU -aJt -aby -aby -afe -aby -aby -aJt -aYH -alO -aNa -aNa -aNa -aNa -aNa -aNa -aNa -aNa -aNa -alO -aYH -aYv -aLk -aLk -aHU -aYH -aYH -aYH -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aVG -aqL -ana -awU -aSa -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(227,1,1) = {" -arz -arz -aNo -rCG -rCG -rCG -rCG -rCG -rCG -rCG -rCG -rCG -rCG -rCG -cjE -jRk -jRk -oSm -oSm -jRk -jRk -ceG -dus -bbI -bbI -hgt -hfP -hfP -eJC -aNo -xxG -gXc -eJe -tFO -ciK -lVe -xao -ubP -uGf -xxG -aNo -fqj -eZJ -nZI -eZJ -nZI -gVv -evY -fqj -ylC -dGr -goZ -bSz -yae -bSz -lmJ -sjv -hjl -tzU -gkl -xHe -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -svJ -kwe -eZm -jCL -hjs -fDa -rbu -mhC -eKW -kZT -wea -uWN -vfC -vfC -vfC -vfC -wea -rhO -rhO -rhO -rhO -rhO -rhO -rhO -rhO -rhO -roK -roK -fcm -vEe -rhO -aNo -arz -arz -arz -aNo -gtN -lcg -gdc -gdc -opB -gtN -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -kyP -fvJ -wHR -oyq -sAC -wHR -ljQ -hAH -nTs -qxX -qhV -aXT -ayZ -ayZ -aXT -eME -ahA -aWR -aZU -aJt -aJt -aiH -aiH -aiH -aJt -aJt -aYH -alO -aNa -alO -aXb -alO -atG -alO -alO -alO -alO -aXb -aYH -aXT -aXT -aqo -aXT -oza -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aqL -ana -awU -aSa -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(228,1,1) = {" -arz -arz -aNo -rCG -cjE -cjE -cjE -cjE -cjE -cjE -cjE -cjE -rCG -rCG -ljd -jRk -jRk -oSm -jRk -oSm -jRk -jRk -dus -bbI -bbI -eJC -rCy -hfP -eJC -aNo -xxG -cKX -uEe -uEe -ciK -lVe -xao -ubP -upu -xxG -aNo -fqj -eZJ -nZI -eZJ -nZI -oEs -nZI -fqj -lti -dQu -liZ -cwW -vKn -hde -lbN -ylC -hjl -tzU -gkl -tzU -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -kwe -eZm -wwY -kwe -iZK -rbu -mhC -eKW -rbu -jaA -vfC -vfC -deU -vfC -uWN -rSl -rbu -aNo -aNo -aNo -aNo -aNo -rhO -kyZ -hgG -psu -hnC -cqd -cqd -rhO -aNo -arz -arz -arz -aNo -gtN -duV -jxo -gdc -wJJ -gtN -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -kyP -mWI -wHR -det -juh -qQX -crg -hAH -nTs -qxX -ivQ -aXT -ayZ -ayZ -aXT -fIH -ahA -aAm -aZU -ayg -aJt -aQj -azZ -aQj -aJt -aJt -aYH -aAy -aNa -alO -aYH -aYH -aYH -aYH -aRS -aRk -aRS -aYH -aYH -ayZ -ayZ -ayZ -ayZ -aXT -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aqL -ana -awU -aSa -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(229,1,1) = {" -arz -arz -aNo -rCG -cjE -tWd -jRk -jRk -jRk -jRk -ieX -cjE -rCG -rCG -bLy -jRk -jRk -jRk -jRk -jRk -jRk -jRk -dus -bbI -bbI -fBo -hfP -hfP -eJC -aNo -xxG -gXc -gXc -gXc -ciK -lVe -xao -ubP -uGf -xxG -aNo -fqj -lNE -nZI -cem -nZI -gVv -nZI -fqj -ylC -dQu -liZ -cwW -vKn -hde -lbN -xwV -hjl -tzU -gkl -tzU -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -kwe -eZm -kwe -kwe -kwe -rbu -mhC -wqW -rbu -wPp -rMW -rMW -rMW -qrk -qrk -sKQ -rbu -aNo -aNo -aNo -aNo -aNo -rhO -sYe -igz -lKo -ygN -qTM -cqd -rhO -aNo -arz -arz -arz -aNo -gtN -jLg -gdc -gdc -wJJ -gtN -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -kyP -wOq -dpK -qYw -dRb -wHR -crg -hAH -nTs -qxX -npW -aXT -ayZ -ayZ -aXT -bZK -ahA -aWR -aZU -aZU -aZU -aZU -aZU -aZU -aZU -aZU -aZU -aeb -ahA -pvh -aYH -aYv -aLk -aKS -aKg -amh -adB -aLk -aYH -ayZ -ayZ -ayZ -ayZ -aXT -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aqL -ana -awU -aSa -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(230,1,1) = {" -arz -arz -aNo -rCG -cjE -ceG -jRk -oSm -oSm -jRk -czJ -cQu -rCG -rCG -cjE -jRk -jRk -jRk -thb -oSm -jRk -jRk -dus -bbI -bbI -fBo -hfP -hfP -eJC -aNo -xxG -lbQ -xZM -xZM -xZM -umB -xao -ubP -sZG -xxG -aNo -fqj -rnS -nZI -eZJ -nZI -wIC -lbg -fqj -ylC -dQu -nHO -cwW -vKn -hde -lbN -ylC -hjl -tzU -gkl -tzU -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -kwe -eZm -kwe -rbu -rbu -kZT -iMP -iMP -rbu -rbu -rbu -rbu -rbu -rbu -rbu -rbu -rbu -rbu -rbu -rbu -aNo -aNo -rhO -kyZ -wTp -tiq -hYc -cqd -xoY -rhO -aNo -aNo -arz -arz -aNo -gtN -duV -jxo -gdc -wJJ -gtN -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -aNo -kyP -fNm -wHR -rRi -dRb -wHR -lAI -hAH -nTs -qxX -tPr -aXT -aeF -ayZ -aXT -bZK -ahA -aeV -aKb -aKb -aKb -aKb -aKb -aKb -aKb -aaK -aKb -aiW -ahA -aeD -aYH -aYv -aLk -aLk -aUO -aLk -aLk -aLk -aHT -ayZ -aXt -ayZ -ayZ -aXT -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aqL -ana -awU -aSa -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(231,1,1) = {" -arz -arz -aNo -rCG -bLy -jRk -jRk -jRk -jRk -jRk -czJ -uaK -rCG -rCG -cjE -jRk -jRk -oSm -jRk -jRk -jRk -jRk -dus -bbI -bbI -fBo -hfP -hfP -eJC -aNo -xxG -wRo -ivf -ivf -ivf -ivf -xao -ubP -ubP -xxG -aNo -fqj -jvn -evY -jvn -evY -wIC -nZI -fqj -ylC -dQu -liZ -cwW -vKn -hde -nZh -ylC -hjl -tzU -gkl -tzU -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -kwe -eZm -kwe -rbu -nVg -tZe -eKW -eKW -nAh -rbu -bEa -rfj -rbu -qnn -qLd -clI -dwa -skO -qOK -rbu -aNo -aNo -rhO -sma -igz -lpp -kjS -cqd -nxq -rhO -rhO -aNo -aNo -arz -aNo -gtN -iuT -gdc -gdc -jrc -gtN -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -fLI -fLI -fLI -fLI -fLI -fLI -fLI -fLI -aNo -arz -arz -arz -arz -aNo -kyP -way -wHR -sAC -rRi -qQX -crg -hAH -cPz -qxX -vLg -aXT -ayZ -ayZ -aXT -bZK -aqQ -ahA -aRi -ahA -ahA -ahA -ahA -ahA -ahA -ahA -ahA -ahA -ahA -aeD -aYH -aYv -aWi -aLk -aLk -aLk -aWi -aYv -aYH -ayZ -ayZ -ayZ -ayZ -aXT -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aqL -ana -awU -aSa -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(232,1,1) = {" -arz -arz -aNo -rCG -cjE -jRk -jRk -jRk -jRk -jRk -czJ -cQu -sVp -nGO -cjE -jRk -jRk -jRk -jRk -jRk -jRk -jRk -dus -bbI -bbI -eJC -hfP -tIk -eJC -aNo -xxG -xxG -ivf -tlC -xxG -xxG -xxG -xxG -xxG -xxG -aNo -fqj -lNE -nZI -jvn -nZI -gVv -nZI -fqj -ylC -dQu -liZ -cwW -vKn -hde -lbN -ylC -hjl -tzU -gkl -tzU -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -kwe -eZm -oAJ -rbu -nVg -rSl -eKW -eKW -cak -rbu -pJW -rfj -rbu -lWX -maZ -rSl -rSl -rSl -lup -rbu -aNo -aNo -rhO -kyZ -wTp -jgU -cqd -cqd -xoY -pvG -rhO -rxq -aNo -aNo -aNo -gtN -rqQ -qVH -gdc -otO -gtN -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -fLI -mVF -bQd -nyX -sGO -jdk -jdk -fLI -aNo -arz -arz -arz -arz -aNo -kyP -uAQ -wHR -rRi -dRb -xiu -twQ -hAH -nTs -qxX -tPr -aXT -ayZ -aeF -aXT -gip -aKG -acp -aKG -aKG -aKG -aKG -acp -aKG -aKG -aKG -aKG -acp -aKG -aqW -aYH -aYH -aYH -aYH -aYH -aYH -aYH -aYH -aYH -aXT -aXT -aqo -aXT -aXT -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aqL -ana -awU -aSa -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(233,1,1) = {" -arz -arz -aNo -rCG -cjE -jRk -jRk -jRk -oSm -jRk -jRk -cjE -nGO -nGO -cjE -jRk -jRk -nqG -jRk -oSm -jRk -jRk -dus -bbI -bbI -eJC -hfP -hfP -eJC -aNo -aNo -xxG -ivf -ivf -xxG -aNo -aNo -aNo -aNo -aNo -aNo -fqj -lNE -nZI -cem -nZI -eZJ -nZI -fqj -ylC -hrW -liZ -cwW -vKn -hde -lbN -ylC -hjl -tzU -gkl -tzU -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -kwe -eZm -kwe -rbu -nVg -rSl -qdu -eKW -cak -rbu -exY -rfj -rbu -oBm -tHD -rSl -rSl -rSl -ulz -rbu -aNo -aNo -rhO -hhN -igz -lpp -kjS -cqd -cqd -nxq -xoY -gtN -gtN -gtN -gtN -gtN -rqQ -gdc -gdc -opB -gtN -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -fLI -tvo -nyX -bQd -bBT -jdk -jdk -fLI -aNo -arz -arz -arz -arz -aNo -kyP -fvJ -wHR -wHR -wHR -wHR -twQ -hAH -nTs -qxX -tPr -aXT -ayZ -ayZ -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aeF -ayZ -ayZ -ayZ -ayZ -ayZ -ayZ -ayZ -ayZ -ayZ -ayZ -ayZ -aXT -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aSa -aqL -ana -awU -aSa -aSa -aSa -aSa -aSa -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(234,1,1) = {" -arz -arz -aNo -rCG -cjE -jRk -jRk -jRk -jRk -jRk -jRk -cjE -nGO -nGO -cjE -jRk -jRk -jRk -oSm -jRk -jRk -jRk -dus -bbI -tCX -eJC -hfP -hfP -eJC -aNo -aNo -xxG -cqA -pwj -xxG -aNo -aNo -aNo -aNo -aNo -aNo -fqj -fqj -fqj -fqj -fqj -fqj -fqj -fqj -lti -dQu -liZ -cwW -vKn -hde -nZh -sjv -hjl -tzU -gkl -tzU -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -kwe -eZm -kwe -rbu -nVg -rSl -eKW -eKW -iYD -rbu -qXZ -rfj -nOK -rfj -rSl -rSl -rSl -rSl -kfR -rbu -aNo -aNo -rhO -kyZ -wTp -ceC -cqd -fKG -cqd -xoY -xoY -gtN -rOE -jiL -rqQ -rqQ -rqQ -qHC -gdc -wJJ -gtN -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -fLI -mVV -nyX -bQd -bBT -jdk -sjF -fLI -aNo -arz -arz -arz -arz -aNo -kyP -fin -wHR -wHR -eDD -wHR -crg -hAH -nTs -qxX -pNW -aXT -arA -ayZ -ayZ -ayZ -ayZ -ayZ -aeF -ayZ -ayZ -ayZ -aeF -ayZ -ayZ -ayZ -ayZ -arA -ayZ -ayZ -ayZ -ayZ -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aAt -aAt -aAt -aAt -aAt -aAt -aAt -aAt -aPY -aWx -aWx -aWx -aWx -aWx -aWx -aWx -aAt -aAt -aAt -aAt -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(235,1,1) = {" -arz -arz -aNo -rCG -cjE -jRk -oSm -jRk -jRk -jRk -ceG -cjE -nGO -nGO -cjE -jRk -jRk -jRk -jRk -jRk -jRk -ceG -dus -bbI -bbI -eJC -rCy -hfP -eJC -aNo -aNo -xxG -ivf -ivf -xxG -aNo -kCw -kCw -kCw -kCw -kCw -kCw -kCw -kCw -fjj -wke -oVj -ylC -ylC -ylC -dQu -liZ -cwW -vKn -hde -lbN -ylC -hjl -tzU -gkl -tzU -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -kwe -eZm -kwe -rbu -vCH -rSl -eKW -eKW -rbu -rbu -bEa -rfj -rbu -lgz -fgR -xei -mmG -vhN -hfm -rbu -aNo -aNo -rhO -sls -igz -ceC -cqd -cqd -cqd -cqd -cqd -jjg -gdc -gdc -gdc -gdc -gdc -gdc -gdc -wJJ -gtN -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -fLI -vwx -nyX -nyX -djQ -jdk -jdk -fLI -aNo -aNo -aNo -aNo -aNo -aNo -kyP -wGe -crg -enC -bUH -jDN -crg -kyP -nTs -jaW -tPr -aXT -ayZ -ayZ -ayZ -ayZ -ayZ -aeF -aeF -aeF -ayZ -ayZ -ayZ -ayZ -ayZ -aeF -ayZ -ayZ -ayZ -ayZ -ayZ -ayZ -aXT -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -apG -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(236,1,1) = {" -arz -arz -aNo -rCG -cjE -jRk -jRk -jRk -jRk -jRk -jRk -cjE -sVp -nGO -cjE -jRk -jRk -oSm -oSm -jRk -jRk -jRk -dus -bbI -bbI -eJC -hfP -hfP -eJC -eJC -eJC -eJC -xPM -iCN -eJC -eJC -kCw -cYO -qGY -cYO -cYO -qGY -cYO -kCw -srW -srW -kCw -ylC -dQu -dQu -dQu -liZ -cwW -vKn -hde -lbN -ylC -hjl -tzU -gkl -xHe -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -kwe -eZm -kwe -rbu -xQH -rSl -eKW -eKW -cKU -rbu -rbu -kVj -rbu -rbu -kfF -rbu -rbu -rbu -rbu -rbu -aNo -aNo -rhO -gNG -wTp -lKo -vBz -vBz -pED -vBz -qTM -gdc -gdc -gdc -gdc -qVH -gdc -gdc -gdc -wJJ -gtN -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -fLI -szt -pFJ -nyX -djQ -jdk -fed -fLI -fLI -fLI -fLI -nrL -aYr -aYr -kyP -kyP -kyP -kyP -kyP -kyP -kyP -kyP -nTs -qxX -tPr -aXT -ayZ -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aXT -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(237,1,1) = {" -arz -arz -aNo -rCG -cjE -jRk -jRk -jRk -jRk -jRk -jRk -cjE -nGO -nGO -cjE -jRk -jRk -jRk -oSm -nqG -jRk -qUX -dus -bbI -bbI -fBo -hfP -hfP -eJC -eAo -eAo -eAo -hfP -hfP -eAo -xEe -kCw -kCw -chS -chS -chS -chS -kCw -kCw -dmL -wke -kCw -lti -dQu -hrW -dQu -liZ -cwW -vKn -hde -lbN -ylC -hjl -tzU -gkl -tzU -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -kwe -eZm -oAJ -rbu -wbL -maZ -eKW -eKW -eKW -khG -vAi -eKW -khG -qNk -eKW -rSl -rbu -aNo -aNo -aNo -aNo -aNo -rhO -hhN -igz -vnu -xTs -fMJ -xTs -xTs -wnt -gtN -jyF -wJJ -uJi -wJJ -wJJ -vdJ -lkr -vZt -gtN -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -fLI -mrj -nyX -nyX -wgs -jdk -jdk -qJx -qJx -qJx -qJx -fLI -wmH -bAx -iIk -bAx -bAx -bAx -xrz -bAx -bAx -bAx -cwi -taR -dYd -aXT -ayZ -aXT -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(238,1,1) = {" -arz -arz -aNo -rCG -cjE -jRk -jRk -jRk -jRk -oSm -jRk -cjE -nGO -sVp -cjE -jRk -jRk -jRk -jRk -jRk -jRk -jRk -dus -bbI -bbI -fBo -hfP -hfP -jVK -hfP -hfP -hfP -hfP -hfP -hfP -vGR -lzQ -btx -jCy -jCy -jCy -jCy -btx -lzQ -qwG -qwG -lzQ -ylC -dQu -dQu -dQu -liZ -cwW -vKn -hde -nZh -ylC -hjl -tzU -gkl -tzU -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -kwe -eZm -kwe -rbu -wbL -maZ -eKW -eKW -eKW -eKW -eKW -eKW -eKW -eKW -eKW -rSl -rbu -aNo -arz -arz -arz -aNo -rhO -rhO -rhO -rhO -rhO -rhO -rhO -rhO -rhO -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -gtN -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -fLI -gIf -nyX -nyX -djQ -keP -jdk -jdk -jdk -jdk -jdk -fLI -cwi -jbe -cGQ -cGQ -cGQ -rvZ -qxX -qxX -qxX -tfA -cGQ -cGQ -gaA -aXT -ayZ -aXT -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(239,1,1) = {" -arz -arz -aNo -rCG -cjE -jRk -ceG -jRk -jRk -jRk -jRk -cjE -nGO -nGO -cjE -jRk -jRk -jRk -oSm -oSm -jRk -jRk -dus -kLj -kLj -fBo -hfP -hfP -hfP -hfP -hfP -hfP -hfP -hfP -hfP -vGR -qbS -jCy -jCy -jCy -jCy -jCy -jCy -qbS -qwG -qwG -qbS -ylC -dQu -dGr -dQu -liZ -cwW -vKn -hde -lbN -ylC -hjl -tzU -gkl -tzU -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -kwe -eZm -kwe -rbu -mYF -ycb -eKW -eKW -uOe -rbu -rbu -rbu -rbu -qwa -iXD -qwa -rbu -aNo -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -fLI -fLI -fLI -fLI -fLI -qJx -jdk -wER -wER -wER -jdk -jZF -qxX -nyd -nlM -nlM -nlM -nlM -kSw -kSw -kSw -nlM -nlM -nlM -nlM -aXT -ayZ -aXT -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(240,1,1) = {" -arz -arz -aNo -rCG -bLy -oSm -oSm -jRk -jRk -jRk -ceG -cvX -rCG -rCG -cjE -jRk -jRk -thb -jRk -jRk -jRk -jRk -dus -kLj -kLj -fBo -hfP -hfP -eJC -eAo -eAo -eAo -hfP -hfP -eAo -xEe -kCw -kCw -chS -chS -chS -chS -kCw -kCw -dmL -wke -kCw -lti -dQu -dQu -dQu -hMI -csK -nxS -csK -ffk -sjv -hjl -tzU -gkl -tzU -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -wwY -eZm -kwe -rbu -rbu -rbu -rbu -rbu -rbu -rbu -clR -clR -rbu -rfj -iXD -rfj -rbu -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -fLI -qJx -jdk -jdk -jdk -jdk -jdk -fLI -kwr -nyd -nlM -gfO -fwx -cSu -hJN -hJN -hJN -hJN -oFv -nlM -ayZ -ayZ -ayZ -aXT -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -usi -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(241,1,1) = {" -arz -arz -aNo -rCG -cjE -hQI -czJ -czJ -jRk -czJ -vbi -cQu -rCG -rCG -bLy -jRk -jRk -jRk -jRk -jRk -jRk -ceG -dus -kLj -kLj -eJC -rCy -hfP -eJC -eJC -eJC -eJC -hfP -uQW -eJC -eJC -kCw -cYO -qGY -cYO -cYO -qGY -cYO -kCw -srW -srW -kCw -ylC -dQu -dQu -dQu -dQu -dQu -efM -dQu -dGr -xwV -hjl -tzU -gkl -tzU -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -kwe -eZm -kwe -ePW -kwe -kwe -dvL -rfj -gGZ -rfj -xhC -xhC -gGZ -rfj -iXD -rfj -rbu -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -fLI -qJx -vQo -oZW -jdk -oZW -qLg -fLI -bkc -cTi -nlM -vMV -hMp -dWG -vJV -xmt -vJV -vJV -tvK -nlM -aeF -ayZ -ayZ -aXT -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(242,1,1) = {" -arz -arz -aNo -rCG -cjE -cjE -cjE -cjE -cjE -cjE -cjE -cjE -rCG -rCG -cjE -ceG -jRk -jRk -jRk -jRk -jRk -jRk -dus -kLj -kLj -eJC -hfP -hfP -eJC -aNo -aNo -cFH -hfc -hfc -cFH -aNo -kCw -kCw -kCw -kCw -kCw -kCw -kCw -kCw -wke -cTO -kCw -ylC -ylC -ylC -dQu -dQu -dQu -dQu -dQu -dQu -ylC -hjl -tzU -gkl -tzU -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -kwe -eZm -eZm -eZm -eZm -eZm -mkD -iXD -iXD -iXD -iXD -iXD -iXD -iXD -iXD -rfj -rbu -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -fLI -fLI -fLI -fLI -fLI -fLI -gol -jdk -jdk -jdk -jdk -jdk -fLI -dqq -nyd -nlM -jMn -vJV -vJV -vJV -vJV -sdP -owq -qYL -nlM -ayZ -ayZ -aXT -aXT -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(243,1,1) = {" -arz -arz -aNo -rCG -rCG -rCG -qaD -qaD -iYk -qaD -qaD -rCG -aYr -rCG -cjE -cjE -meb -yiT -yiT -yiT -nZJ -cjE -dDq -cjE -gTh -eJC -hfP -hfP -eJC -aNo -aNo -cFH -qkc -juA -cFH -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -hjl -hjl -hjl -hjl -hjl -hjl -hjl -hjl -hjl -hjl -hjl -ylC -xBd -hjl -hjl -tzU -gkl -xHe -lQc -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -jwD -kwe -kwe -kwe -kwe -kwe -dvL -rfj -rfj -rfj -rfj -rfj -rfj -rfj -rfj -rfj -rbu -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -fLI -fLI -qdB -mNg -mNg -mNg -fLI -jdk -jdk -wER -wER -dDu -jdk -fLI -dqq -mve -nlM -xhU -fhE -cYY -wuz -vNM -xBu -nlM -nlM -nlM -aeF -ayZ -aYr -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(244,1,1) = {" -arz -arz -aNo -aNo -aaZ -rCG -iYk -iYk -iYk -iYk -iYk -rCG -aNo -rCG -rCG -rCG -rCG -cjE -bbI -cjE -rCG -rCG -rCG -rCG -rCG -eJC -eJC -eJC -eJC -aNo -aNo -cFH -qkc -juA -cFH -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -hjl -dQu -lUi -dQu -lUi -wWc -dQu -dQu -dQu -dQu -wWc -dQu -dQu -dQu -hjl -tzU -gkl -tzU -lQc -lQc -lQc -lQc -lQc -lQc -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -svJ -svJ -svJ -svJ -svJ -svJ -svJ -svJ -rbu -rbu -rbu -rbu -rbu -rbu -rbu -rbu -rbu -rbu -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -fLI -mID -jdk -jdk -jdk -jdk -jdk -jdk -jdk -jdk -jdk -jdk -jdk -fLI -bkc -nyd -nlM -nlM -nlM -nlM -nlM -nlM -nlM -nlM -arA -ayZ -ayZ -aeF -aYr -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(245,1,1) = {" -arz -arz -arz -arz -aNo -rCG -rCG -eab -iYk -iYk -iYk -rCG -aNo -aNo -aNo -aNo -rCG -cjE -bbI -cjE -rCG -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -cFH -hfc -cyk -cFH -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -hjl -iux -dQu -dQu -dQu -dQu -dQu -dQu -dQu -dQu -dQu -dQu -dQu -dQu -hjl -tzU -gkl -tzU -tzU -eHg -tzU -wUX -xbZ -gxC -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -fLI -mID -cba -jdk -jdk -jdk -epV -jdk -jdk -qJx -qJx -qJx -qJx -fLI -suQ -nms -nlM -ayZ -ayZ -ayZ -pdN -ayZ -ayZ -ayZ -ayZ -ayZ -aYr -aYr -aYr -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(246,1,1) = {" -arz -arz -arz -arz -aNo -rCG -iIS -iYk -iYk -iYk -kBh -rCG -aNo -arz -arz -aNo -rCG -cjE -bbI -cjE -rCG -aNo -arz -arz -aNo -cFH -cFH -cFH -cFH -cFH -cFH -cFH -hfc -sIG -cFH -cFH -cFH -cFH -cFH -cFH -aZk -aNo -aNo -aNo -hjl -hjl -dQu -dQu -dQu -ceu -dQu -ceu -dQu -dQu -ceu -dQu -dQu -hjl -tzU -gkl -gkl -gkl -xXL -gkl -qKI -qKI -gxC -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -fLI -mID -jdk -uwR -jdk -uwR -jdk -fLI -fLI -fLI -fLI -fLI -fLI -fLI -lqU -nlM -nlM -rgH -aYr -aYr -aYr -aYr -aYr -aYr -aYr -aYr -aYr -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(247,1,1) = {" -arz -arz -arz -arz -aNo -rCG -rFF -rFF -rFF -rFF -rFF -rCG -aNo -arz -arz -aNo -rCG -cjE -cDJ -gTh -rCG -aNo -arz -arz -aNo -cFH -qdc -qEt -qEt -qEt -nNN -vCy -hfc -hfc -vCy -qdc -qEt -qEt -qEt -nNN -cFH -aNo -arz -aNo -aNo -hjl -hjl -bSz -yae -cPH -bSz -cPH -yae -bSz -cPH -yae -bSz -hjl -tzU -tzU -tzU -tzU -eHg -tzU -wUX -jYx -gxC -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -fLI -fLI -lzn -jml -qAH -jml -lzn -fLI -aNo -aNo -aNo -aNo -aNo -aYr -oTs -cnj -ayZ -fah -aYr -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(248,1,1) = {" -arz -arz -arz -arz -aNo -rCG -rCG -rCG -rCG -rCG -rCG -rCG -aNo -arz -arz -aNo -rCG -cjE -bbI -cjE -rCG -aNo -arz -arz -aNo -cFH -oHz -lMK -lMK -lMK -oQV -pvO -hfc -hfc -oEG -kAK -lMK -lMK -lMK -rrX -cFH -aNo -arz -arz -aNo -aNo -hjl -ycW -ycW -ycW -ycW -ycW -ycW -ycW -ycW -ycW -ycW -hjl -lQc -lQc -lQc -lQc -lQc -lQc -lQc -lQc -lQc -lQc -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -fLI -mZP -jml -suE -jml -mZP -fLI -aNo -arz -arz -arz -aNo -aYr -aYr -aYr -aYr -aYr -aYr -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(249,1,1) = {" -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -aNo -rCG -dDF -dDF -dDF -rCG -aNo -arz -arz -aNo -cFH -fcR -lMK -lMK -sXR -oQV -pvO -xmo -vIo -wKK -kAK -lMK -lMK -sXR -vZE -cFH -aNo -arz -arz -arz -aNo -hjl -cve -dop -cve -cve -uRb -cve -fjp -cve -rxO -cve -hjl -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -fLI -fLI -fLI -fLI -fLI -fLI -fLI -aNo -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(250,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -aNo -cFH -oHz -lMK -lMK -lMK -oQV -pvO -hfc -hfc -wKK -kAK -lMK -lMK -lMK -rrX -cFH -aNo -arz -arz -arz -aNo -hjl -fjp -cve -cve -cve -cve -cve -cve -cve -cve -cve -hjl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(251,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -cFH -hzB -vbw -vbw -vbw -tNP -trG -hfc -hfc -trG -hzB -vbw -vbw -vbw -tNP -cFH -aNo -arz -arz -arz -aNo -hjl -cve -sGa -cve -fjp -cve -lnD -cve -bmh -cve -fjp -hjl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(252,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -cFH -cFH -cFH -cFH -cFH -cFH -cFH -cFH -cFH -cFH -cFH -cFH -cFH -cFH -cFH -cFH -aNo -arz -arz -arz -aNo -hjl -hjl -hjl -hjl -hjl -hjl -hjl -hjl -hjl -hjl -hjl -hjl -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(253,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -aNo -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(254,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} -(255,1,1) = {" -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -"} diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm index fa636a49184a81..29b5fa4b4abe1f 100644 --- a/_maps/RandomZLevels/moonoutpost19.dmm +++ b/_maps/RandomZLevels/moonoutpost19.dmm @@ -394,7 +394,7 @@ /turf/open/floor/iron, /area/awaymission/moonoutpost19/research) "cS" = ( -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/structure/flora/lunar_plant, /turf/open/misc/asteroid/moon{ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" @@ -434,7 +434,7 @@ }, /area/awaymission/moonoutpost19/syndicate) "dr" = ( -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /turf/open/misc/asteroid/moon{ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, @@ -1941,7 +1941,7 @@ "mJ" = ( /obj/structure/sign/warning/vacuum{ desc = "A beacon used by a teleporter."; - icon = 'icons/obj/device.dmi'; + icon = 'icons/obj/devices/tracker.dmi'; icon_state = "beacon"; name = "tracking beacon" }, @@ -2140,6 +2140,15 @@ /obj/machinery/door/airlock/maintenance, /turf/open/floor/plating, /area/awaymission/moonoutpost19/arrivals) +"ob" = ( +/mob/living/basic/pet/cat/space{ + desc = "With survival instincts like these, it's no wonder cats survived to the 26th century."; + name = "Jones" + }, +/turf/open/misc/asteroid/moon{ + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + }, +/area/awaymission/moonoutpost19/main) "od" = ( /obj/effect/decal/cleanable/xenoblood/xgibs/larva/body, /turf/open/misc/asteroid/moon{ @@ -2956,6 +2965,16 @@ }, /turf/open/floor/iron, /area/awaymission/moonoutpost19/arrivals) +"sM" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/item/flashlight/flare{ + start_on = 1 + }, +/turf/open/floor/iron{ + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 + }, +/area/awaymission/moonoutpost19/syndicate) "sO" = ( /obj/machinery/light/small/directional/west, /obj/effect/turf_decal/lunar_sand, @@ -3348,7 +3367,7 @@ /area/awaymission/moonoutpost19/research) "vu" = ( /obj/structure/table, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/item/taperecorder{ pixel_x = -3 }, @@ -3500,14 +3519,6 @@ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/mines) -"wA" = ( -/obj/item/flashlight/flare{ - start_on = 1 - }, -/turf/open/misc/asteroid/moon{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/mines) "wD" = ( /obj/machinery/light/small/broken/directional/east, /obj/effect/decal/cleanable/dirt, @@ -5117,15 +5128,6 @@ dir = 8 }, /area/awaymission/moonoutpost19/research) -"HP" = ( -/mob/living/simple_animal/pet/cat/space{ - desc = "With survival instincts like these, it's no wonder cats survived to the 26th century."; - name = "Jones" - }, -/turf/open/misc/asteroid/moon{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/main) "HS" = ( /obj/structure/chair/stool/directional/east{ pixel_x = 9 @@ -5450,16 +5452,6 @@ temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) -"JU" = ( -/obj/effect/mapping_helpers/burnt_floor, -/obj/item/flashlight/flare{ - start_on = 1 - }, -/turf/open/floor/iron{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/syndicate) "JV" = ( /obj/structure/sink{ dir = 4; @@ -5522,7 +5514,7 @@ /area/awaymission/moonoutpost19/mines) "KF" = ( /obj/item/banner/command/mundane{ - desc = "The banner of Central Command, impaled into the rock upon first landing on this moon."; + desc = "The banner of Conglomeration of Colonists, impaled into the rock upon first landing on this moon."; name = "command claim banner"; pixel_x = -1; pixel_y = 15 @@ -6176,6 +6168,14 @@ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/mines) +"Pf" = ( +/obj/item/flashlight/flare{ + start_on = 1 + }, +/turf/open/misc/asteroid/moon{ + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + }, +/area/awaymission/moonoutpost19/mines) "Ph" = ( /obj/effect/decal/cleanable/blood/tracks{ desc = "Your instincts say you shouldn't be following these."; @@ -6844,7 +6844,7 @@ }, /area/awaymission/moonoutpost19/research) "Tx" = ( -/obj/item/storage/secure/safe/directional/east, +/obj/structure/secure_safe/directional/east, /obj/effect/decal/cleanable/blood/splatter, /obj/item/pen, /obj/item/paper/crumpled/awaymissions/moonoutpost19/hastey_note, @@ -29319,7 +29319,7 @@ ac ac My My -HP +ob My My My @@ -40252,7 +40252,7 @@ WZ JQ WZ lj -JU +sM WZ WZ Nr @@ -56533,7 +56533,7 @@ tb mo mo mo -wA +Pf pS tb tb diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm index 5fec2a05aae315..3f5ed4661f587b 100644 --- a/_maps/RandomZLevels/snowdin.dmm +++ b/_maps/RandomZLevels/snowdin.dmm @@ -8493,14 +8493,14 @@ /area/awaymission/snowdin/cave) "CK" = ( /obj/structure/closet/syndicate{ - desc = "It's a storage unit for a Syndicate boarding party." + desc = "It's a storage unit for a Symphionia boarding party." }, /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/dark, /area/awaymission/snowdin/cave) "CL" = ( /obj/structure/closet/syndicate{ - desc = "It's a storage unit for a Syndicate boarding party." + desc = "It's a storage unit for a Symphionia boarding party." }, /obj/effect/turf_decal/bot_white, /obj/effect/turf_decal/tile/neutral/half/contrasted{ diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm index 6aa99013c81f79..32e837c178f92e 100644 --- a/_maps/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/RandomZLevels/undergroundoutpost45.dmm @@ -121,7 +121,7 @@ "az" = ( /obj/structure/sign/warning/vacuum{ desc = "A beacon used by a teleporter."; - icon = 'icons/obj/device.dmi'; + icon = 'icons/obj/devices/tracker.dmi'; icon_state = "beacon"; name = "tracking beacon" }, @@ -4042,7 +4042,7 @@ }, /area/awaymission/undergroundoutpost45/research) "pg" = ( -/obj/item/storage/secure/safe{ +/obj/structure/secure_safe{ pixel_x = 5; pixel_y = -27 }, diff --git a/_maps/_basemap.dm b/_maps/_basemap.dm index a2fbfed494b160..8bd71f0db34be5 100644 --- a/_maps/_basemap.dm +++ b/_maps/_basemap.dm @@ -13,10 +13,10 @@ #include "map_files\Mining\Lavaland.dmm" #include "map_files\NorthStar\north_star.dmm" #include "map_files\tramstation\tramstation.dmm" - // SKYRAT EDIT ADDITON START - Compiling our modular maps too! + // NOVA EDIT ADDITON START - Compiling our modular maps too! #include "map_files\VoidRaptor\VoidRaptor.dmm" #include "map_files\NSVBlueshift\Blueshift.dmm" - // SKYRAT EDIT END + // NOVA EDIT END #ifdef CIBUILDING #include "templates.dm" diff --git a/_maps/birdshot.json b/_maps/birdshot.json index 8f105128176c52..8d807c6b4df228 100644 --- a/_maps/birdshot.json +++ b/_maps/birdshot.json @@ -4,7 +4,7 @@ "map_path": "map_files/Birdshot", "map_file": "birdshot.dmm", "shuttles": { - "cargo": "cargo_skyrat", + "cargo": "cargo_nova", "ferry": "ferry_kilo", "whiteship": "whiteship_birdshot", "emergency": "emergency_birdshot" diff --git a/_maps/blueshift.json b/_maps/blueshift.json index ce76806eed9a77..10de3ac7e0df04 100644 --- a/_maps/blueshift.json +++ b/_maps/blueshift.json @@ -4,10 +4,10 @@ "map_path": "map_files/NSVBlueshift", "map_file": "Blueshift.dmm", "shuttles": { - "cargo": "cargo_skyrat", - "ferry": "ferry_skyrat", + "cargo": "cargo_nova", + "ferry": "ferry_nova", "whiteship": "whiteship_blueshift", - "emergency": "emergency_skyrat" + "emergency": "emergency_nova" }, "traits": [ { diff --git a/_maps/deltastation.json b/_maps/deltastation.json index cc6c11f4092632..bf0b703a2b9f6e 100644 --- a/_maps/deltastation.json +++ b/_maps/deltastation.json @@ -6,7 +6,7 @@ "shuttles": { "emergency": "emergency_delta", "ferry": "ferry_fancy", - "cargo": "cargo_delta_skyrat", + "cargo": "cargo_nova_delta", "whiteship": "whiteship_delta" }, "job_changes": { diff --git a/_maps/icebox.json b/_maps/icebox.json index 3e10e516bf35cf..1d5ba40caf20eb 100644 --- a/_maps/icebox.json +++ b/_maps/icebox.json @@ -7,7 +7,7 @@ "space_empty_levels": 0, "planetary": 1, "shuttles": { - "cargo": "cargo_skyrat", + "cargo": "cargo_nova", "ferry": "ferry_fancy", "whiteship": "whiteship_box", "emergency": "emergency_box" diff --git a/_maps/map_files/Basketball/ash_gladiators.dmm b/_maps/map_files/Basketball/ash_gladiators.dmm index 3a8c74b42013e3..75315e028a83c4 100644 --- a/_maps/map_files/Basketball/ash_gladiators.dmm +++ b/_maps/map_files/Basketball/ash_gladiators.dmm @@ -132,7 +132,7 @@ /turf/open/floor/fakebasalt, /area/centcom/basketball) "ie" = ( -/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen, +/mob/living/basic/mining/gutlunch/warrior, /turf/open/floor/fakebasalt, /area/centcom/basketball) "ix" = ( @@ -609,7 +609,7 @@ /turf/open/lava/smooth/basketball, /area/centcom/basketball) "Fy" = ( -/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck, +/mob/living/basic/mining/gutlunch/milk, /turf/open/floor/fakebasalt, /area/centcom/basketball) "FS" = ( diff --git a/_maps/map_files/Basketball/greytide_worldwide.dmm b/_maps/map_files/Basketball/greytide_worldwide.dmm index b104d189891e72..77c5f30af4c78e 100644 --- a/_maps/map_files/Basketball/greytide_worldwide.dmm +++ b/_maps/map_files/Basketball/greytide_worldwide.dmm @@ -95,7 +95,7 @@ "fj" = ( /obj/structure/sign/poster/contraband/random/directional/south, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/floor/plating, /area/centcom/basketball) "fp" = ( @@ -285,7 +285,7 @@ /area/centcom/basketball) "rU" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/floor/plating, /area/centcom/basketball) "sb" = ( diff --git a/_maps/map_files/Basketball/lusty_xenomorphs.dmm b/_maps/map_files/Basketball/lusty_xenomorphs.dmm index 6aa3dae075e79c..afcfdb58997966 100644 --- a/_maps/map_files/Basketball/lusty_xenomorphs.dmm +++ b/_maps/map_files/Basketball/lusty_xenomorphs.dmm @@ -291,7 +291,8 @@ /turf/closed/indestructible/fakeglass, /area/centcom/basketball) "zZ" = ( -/obj/structure/window/reinforced/fulltile/damaged, +/obj/effect/mapping_helpers/damaged_window, +/obj/structure/window/reinforced/fulltile, /obj/effect/particle_effect/water/extinguisher/stomach_acid, /obj/machinery/door/poddoor/preopen{ id = null; @@ -489,7 +490,8 @@ /turf/open/floor/engine, /area/centcom/basketball) "PW" = ( -/obj/structure/window/reinforced/fulltile/damaged, +/obj/effect/mapping_helpers/damaged_window, +/obj/structure/window/reinforced/fulltile, /obj/machinery/door/poddoor/preopen{ id = null; name = "Xenobiology Blast Door" diff --git a/_maps/map_files/Basketball/stadium.dmm b/_maps/map_files/Basketball/stadium.dmm index bcbb91ce4b7eff..bff1cc482701f0 100644 --- a/_maps/map_files/Basketball/stadium.dmm +++ b/_maps/map_files/Basketball/stadium.dmm @@ -492,7 +492,7 @@ /turf/open/floor/wood, /area/centcom/basketball) "Ev" = ( -/mob/living/simple_animal/robot_customer, +/mob/living/basic/robot_customer, /turf/open/floor/wood, /area/centcom/basketball) "Gh" = ( diff --git a/_maps/map_files/Birdshot/birdshot.dmm b/_maps/map_files/Birdshot/birdshot.dmm index 4e1cca53c771f3..4da22be4da2862 100644 --- a/_maps/map_files/Birdshot/birdshot.dmm +++ b/_maps/map_files/Birdshot/birdshot.dmm @@ -49,7 +49,7 @@ "ach" = ( /obj/machinery/netpod, /turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "acl" = ( /obj/effect/turf_decal/sand/plating, /obj/effect/decal/cleanable/dirt, @@ -392,6 +392,15 @@ dir = 4 }, /area/station/science/xenobiology) +"ahu" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/obj/structure/bed/dogbed/runtime, +/mob/living/basic/pet/cat/runtime, +/turf/open/floor/iron/white/small, +/area/station/command/heads_quarters/cmo) "ahy" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes, @@ -418,6 +427,17 @@ /obj/effect/turf_decal/siding/yellow, /turf/open/floor/wood/tile, /area/station/command/bridge) +"ahM" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/mob/living/basic/parrot/poly, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "aid" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -481,14 +501,6 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos/project) -"ajw" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/yellow/line, -/obj/structure/cable, -/turf/open/floor/iron/smooth, -/area/station/engineering/supermatter/room) "ajG" = ( /obj/machinery/atmospherics/components/tank/oxygen{ dir = 1 @@ -2015,13 +2027,6 @@ }, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) -"aPG" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/engineering/supermatter) "aPM" = ( /obj/structure/chair/sofa/bench/right, /obj/machinery/firealarm/directional/north, @@ -2057,10 +2062,6 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron/dark/small, /area/station/security/checkpoint/customs) -"aQn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/station/engineering/supermatter) "aQr" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ @@ -2075,13 +2076,6 @@ }, /turf/open/floor/iron/smooth, /area/station/engineering/engine_smes) -"aQB" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 9 - }, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/station/engineering/supermatter) "aQF" = ( /obj/effect/turf_decal/tile/dark_red/half/contrasted{ dir = 1 @@ -2300,13 +2294,6 @@ }, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) -"aTA" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/engineering/supermatter/room) "aTG" = ( /obj/structure/table/reinforced, /obj/machinery/requests_console/directional/east{ @@ -2319,41 +2306,12 @@ /obj/machinery/recharger, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/escape) -"aTP" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/supermatter/room) -"aTW" = ( -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark, -/area/station/engineering/supermatter/room) "aUA" = ( /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/dark/smooth_edge, /area/station/maintenance/starboard/greater) -"aUQ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/yellow/arrow_cw, -/obj/structure/cable, -/turf/open/floor/iron/smooth, -/area/station/engineering/supermatter/room) -"aVj" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/yellow/corner, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/engineering/tracking_beacon, -/turf/open/floor/iron/smooth, -/area/station/engineering/supermatter/room) "aVq" = ( /obj/machinery/door/airlock/highsecurity{ name = "Radiation-Proof Airlock" @@ -2542,26 +2500,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"aZP" = ( -/obj/structure/cable, -/obj/structure/table/wood, -/obj/item/storage/secure/briefcase{ - pixel_y = -10 - }, -/obj/item/paper_bin{ - pixel_x = 7; - pixel_y = 7 - }, -/obj/item/pen{ - pixel_x = 8; - pixel_y = 8 - }, -/obj/item/flashlight/lamp/green{ - pixel_x = -6; - pixel_y = 11 - }, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/hop) "aZS" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -2660,19 +2598,6 @@ /obj/effect/turf_decal/stripes/end, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) -"bcu" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/arrow_cw{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 8 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/supermatter/room) "bcv" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2680,14 +2605,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/white/small, /area/station/medical/medbay/lobby) -"bcK" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/engineering/supermatter/room) "bcR" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 @@ -3167,7 +3084,7 @@ /area/station/hallway/secondary/construction) "bmB" = ( /obj/effect/turf_decal/tile/blue/fourcorners, -/mob/living/simple_animal/bot/medbot/autopatrol, +/mob/living/basic/bot/medbot/autopatrol, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "bmM" = ( @@ -3271,15 +3188,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/small, /area/station/engineering/main) -"boP" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/components/trinary/filter/critical{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/supermatter/room) "boW" = ( /obj/structure/table/glass, /obj/machinery/status_display/ai/directional/south, @@ -4053,7 +3961,7 @@ /turf/open/floor/iron/dark/smooth_half{ dir = 1 }, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "bCi" = ( /obj/effect/turf_decal/tile/yellow/opposingcorners, /obj/machinery/atmospherics/components/binary/crystallizer{ @@ -4465,18 +4373,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"bJL" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/arrow_cw{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible, -/obj/machinery/meter, -/turf/open/floor/iron/smooth, -/area/station/engineering/supermatter/room) "bJZ" = ( /obj/structure/chair/stool/directional/south, /turf/open/floor/iron, @@ -4917,6 +4813,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/rust, /area/station/maintenance/department/engine) +"bUl" = ( +/obj/effect/landmark/start/station_engineer, +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 8; + filter_type = list(/datum/gas/nitrogen) + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/supermatter/room) "bUr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/blue{ @@ -5472,6 +5376,15 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/disposal/incinerator) +"cdZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/supermatter/room) "cea" = ( /obj/structure/window/spawner/directional/south, /turf/open/space/basic, @@ -5905,8 +5818,12 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "engine" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/smooth, -/area/station/engineering/supermatter) +/area/station/engineering/supermatter/room) "coJ" = ( /obj/structure/chair/stool/directional/east, /obj/effect/decal/cleanable/dirt, @@ -6240,7 +6157,7 @@ /turf/open/floor/iron/dark/smooth_half{ dir = 1 }, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "cvZ" = ( /obj/structure/closet/secure_closet/evidence, /obj/effect/decal/cleanable/dirt, @@ -6856,6 +6773,16 @@ }, /turf/open/floor/plating/rust, /area/station/engineering/supermatter) +"cFF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/supermatter/room) "cFI" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -7724,6 +7651,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"cXF" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/atmospherics/pipe/smart/simple/pink/visible{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/engineering/supermatter) "cXJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/siding/wood{ @@ -7850,8 +7784,8 @@ /obj/structure/sink/kitchen/directional/east, /obj/machinery/airalarm/directional/south, /obj/machinery/button/door/directional/west{ - pixel_y = 8; - id = "custodialshutters" + id = "custodialshutters"; + pixel_y = 8 }, /turf/open/floor/iron/white/small, /area/station/service/janitor) @@ -8275,6 +8209,13 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) +"diM" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/supermatter/room) "diO" = ( /obj/effect/turf_decal/tile/yellow, /obj/structure/cable, @@ -8470,15 +8411,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"dla" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 9 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/supermatter/room) "dlc" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -8580,6 +8512,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/engineering/atmos/pumproom) +"dnp" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) "dnq" = ( /obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ dir = 1 @@ -9164,13 +9103,6 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/iron/smooth, /area/station/maintenance/disposal/incinerator) -"dyH" = ( -/obj/machinery/atmospherics/components/trinary/filter/critical{ - dir = 4 - }, -/obj/effect/landmark/start/station_engineer, -/turf/open/floor/iron/smooth, -/area/station/engineering/supermatter/room) "dyO" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -10724,8 +10656,8 @@ /area/station/security/prison/shower) "dZT" = ( /obj/machinery/button/transport/tram/directional/south{ - specific_transport_id = "bird_2"; - id = 2 + id = 2; + specific_transport_id = "bird_2" }, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) @@ -11187,7 +11119,7 @@ "ejq" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "ejt" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -12473,7 +12405,7 @@ pixel_x = 9; pixel_y = 2 }, -/mob/living/simple_animal/bot/cleanbot, +/mob/living/basic/bot/cleanbot, /obj/machinery/ai_slipper{ uses = 10 }, @@ -13029,6 +12961,17 @@ /obj/item/stock_parts/cell/high, /turf/open/floor/circuit, /area/station/maintenance/port/aft) +"ePu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/arrow_cw, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/supermatter/room) "ePw" = ( /obj/machinery/photocopier, /obj/effect/mapping_helpers/broken_floor, @@ -13378,6 +13321,18 @@ /obj/structure/closet/secure_closet/engineering_welding, /turf/open/floor/iron/small, /area/station/engineering/atmos) +"eVc" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/decal/cleanable/dirt, +/obj/item/clothing/gloves/color/fyellow{ + pixel_y = 7 + }, +/obj/structure/fluff/broken_canister_frame, +/obj/machinery/camera/autoname/directional/north, +/obj/item/stack/sticky_tape/super, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/plating, +/area/station/commons/storage/tools) "eVd" = ( /obj/structure/cable, /obj/item/clothing/shoes/griffin{ @@ -13897,6 +13852,15 @@ }, /turf/open/floor/iron/small, /area/station/security/office) +"fhs" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "fhw" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, @@ -13960,6 +13924,17 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating/airless, /area/space/nearstation) +"fiW" = ( +/obj/effect/turf_decal/siding/dark_red/corner{ + dir = 8 + }, +/obj/structure/secure_safe/directional/north{ + name = "armory safe A" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark/small, +/area/station/ai_monitored/security/armory) "fjh" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, @@ -14856,10 +14831,6 @@ /obj/machinery/coffeemaker{ pixel_y = 12 }, -/obj/item/reagent_containers/cup/coffeepot{ - pixel_x = 3; - pixel_y = -5 - }, /turf/open/floor/iron/kitchen/small, /area/station/security/breakroom) "fyr" = ( @@ -15107,7 +15078,7 @@ /obj/structure/window/spawner/directional/south, /obj/effect/turf_decal/tile/neutral, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /obj/item/circuitboard/machine/thermomachine, /obj/item/stack/rods/fifty, /obj/item/stack/sheet/glass/fifty, @@ -15144,25 +15115,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"fBl" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/table, -/obj/item/folder/red, -/obj/item/food/monkeycube/bee{ - name = "monkey cube"; - pixel_y = 17 - }, -/obj/item/food/monkeycube/gorilla{ - desc = "Just add water!"; - name = "monkey cube"; - pixel_x = 3; - pixel_y = 13 - }, -/turf/open/floor/iron/dark, -/area/station/commons/storage/tools) "fBq" = ( /obj/machinery/atmospherics/components/binary/valve/digital{ dir = 4 @@ -16081,17 +16033,6 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"fRU" = ( -/obj/structure/chair/office/light{ - dir = 4 - }, -/mob/living/simple_animal/parrot/poly, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "fSf" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -16206,15 +16147,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) -"fTx" = ( -/obj/structure/cable, -/obj/structure/bed, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/item/bedsheet/ce, -/obj/effect/landmark/start/chief_engineer, -/obj/item/storage/secure/safe/directional/south, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/ce) "fTD" = ( /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, @@ -16501,6 +16433,26 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark/small, /area/station/command/heads_quarters/captain/private) +"gaf" = ( +/obj/structure/cable, +/obj/structure/table/wood, +/obj/item/storage/briefcase/secure{ + pixel_y = -10 + }, +/obj/item/paper_bin{ + pixel_x = 7; + pixel_y = 7 + }, +/obj/item/pen{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/flashlight/lamp/green{ + pixel_x = -6; + pixel_y = 11 + }, +/turf/open/floor/iron/grimy, +/area/station/command/heads_quarters/hop) "gal" = ( /obj/structure/table, /obj/item/reagent_containers/condiment/saltshaker{ @@ -16775,8 +16727,12 @@ /obj/machinery/atmospherics/pipe/smart/simple/purple/visible, /obj/machinery/airalarm/directional/east, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnancefreezer" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/dark, -/area/station/science/ordnance/freezerchamber) +/area/station/science/ordnance) "gfE" = ( /obj/effect/turf_decal/siding/red{ dir = 8 @@ -17161,6 +17117,15 @@ /obj/item/wrench/medical, /turf/open/floor/iron/dark, /area/station/medical/medbay/aft) +"gmi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/supermatter/room) "gmm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -17337,13 +17302,6 @@ "gpI" = ( /turf/closed/wall, /area/station/command/heads_quarters/ce) -"gpK" = ( -/obj/structure/closet/secure_closet/engineering_chief, -/obj/item/storage/secure/briefcase, -/obj/item/lighter, -/obj/machinery/computer/security/telescreen/entertainment/directional/south, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/ce) "gpL" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -18339,11 +18297,6 @@ /obj/effect/turf_decal/siding/green, /turf/open/floor/iron/dark/small, /area/station/medical/chemistry) -"gIG" = ( -/obj/structure/table/glass, -/obj/item/storage/secure/briefcase, -/turf/open/floor/carpet/executive, -/area/station/command/meeting_room) "gIH" = ( /obj/structure/table, /obj/item/wrench{ @@ -18756,14 +18709,6 @@ /obj/effect/decal/cleanable/vomit/old, /turf/open/floor/carpet/green, /area/station/maintenance/central/lesser) -"gPr" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/effect/turf_decal/trimline/yellow/corner, -/obj/structure/cable, -/turf/open/floor/iron/smooth, -/area/station/engineering/supermatter/room) "gPN" = ( /obj/structure/fermenting_barrel, /turf/open/floor/plating, @@ -18805,17 +18750,6 @@ }, /turf/open/floor/plating/rust, /area/station/maintenance/department/engine/atmos) -"gQx" = ( -/obj/effect/turf_decal/bot_white, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/gloves/color/fyellow{ - pixel_y = 7 - }, -/obj/structure/fluff/broken_canister_frame, -/obj/machinery/camera/autoname/directional/north, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/plating, -/area/station/commons/storage/tools) "gQG" = ( /obj/structure/window/spawner/directional/east, /obj/structure/closet/crate, @@ -19561,16 +19495,6 @@ /obj/effect/turf_decal/siding/yellow, /turf/open/floor/wood/tile, /area/station/command/bridge) -"hcG" = ( -/obj/structure/closet{ - name = "Evidence Closet 2" - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/secure/safe/directional/north{ - name = "evidence safe" - }, -/turf/open/floor/iron/smooth, -/area/station/security/evidence) "hcU" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -20014,8 +19938,8 @@ pixel_y = 11 }, /obj/item/mod/module/signlang_radio{ - pixel_y = 2; - pixel_x = -2 + pixel_x = -2; + pixel_y = 2 }, /turf/open/floor/iron/small, /area/station/security/office) @@ -20653,6 +20577,11 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"hur" = ( +/obj/structure/table/glass, +/obj/item/storage/briefcase/secure, +/turf/open/floor/carpet/executive, +/area/station/command/meeting_room) "huy" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -21716,7 +21645,7 @@ /obj/machinery/light_switch/directional/north, /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "hNA" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /turf/open/floor/iron, @@ -22840,6 +22769,18 @@ dir = 1 }, /area/station/hallway/secondary/entry) +"ijY" = ( +/obj/structure/closet/secure_closet/chief_medical, +/obj/item/storage/briefcase/secure{ + pixel_x = 3; + pixel_y = 5 + }, +/obj/structure/secure_safe/directional/south{ + pixel_y = -23 + }, +/obj/item/gun/syringe, +/turf/open/floor/wood/parquet, +/area/station/command/heads_quarters/cmo) "ikc" = ( /turf/open/floor/plating, /area/station/maintenance/starboard/fore) @@ -24515,7 +24456,7 @@ }, /obj/machinery/power/apc/auto_name/directional/west, /obj/item/phone{ - desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; + desc = "Supposedly a direct line to Symphionia Conglomeration of Colonists. It's not even plugged in."; pixel_x = -3; pixel_y = 3 }, @@ -25333,7 +25274,7 @@ dir = 9 }, /obj/structure/cable, -/obj/machinery/atmospherics/components/trinary/filter, +/obj/machinery/atmospherics/components/trinary/filter/critical, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) "jeg" = ( @@ -25730,6 +25671,16 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/catwalk_floor/iron_dark, /area/station/security/processing) +"jmm" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/meter, +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/supermatter/room) "jmo" = ( /obj/structure/reagent_dispensers/fueltank, /obj/machinery/light/small/directional/west, @@ -26667,7 +26618,7 @@ /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/any/command/general, /obj/machinery/door/airlock/command{ - name = "Corporate Showroom" + name = "Conglomeration Showroom" }, /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -28509,6 +28460,16 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron/white/textured_large, /area/station/command/heads_quarters/cmo) +"kkW" = ( +/obj/structure/closet{ + name = "Evidence Closet 2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/secure_safe/directional/north{ + name = "evidence safe" + }, +/turf/open/floor/iron/smooth, +/area/station/security/evidence) "kla" = ( /obj/structure/closet, /obj/item/clothing/suit/toggle/owlwings, @@ -29107,11 +29068,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/hallway/abandoned_recreation) -"kvh" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible, -/turf/open/floor/iron/smooth, -/area/station/engineering/supermatter/room) "kvl" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -29121,6 +29077,18 @@ /obj/effect/turf_decal/trimline/neutral/line, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"kvr" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/dark_red{ + dir = 1 + }, +/obj/structure/secure_safe/hos{ + pixel_x = 15; + pixel_y = 28 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/stone, +/area/station/command/heads_quarters/hos) "kvI" = ( /obj/docking_port/stationary/random{ dir = 8; @@ -29338,7 +29306,7 @@ /area/station/hallway/primary/central/fore) "kzI" = ( /obj/effect/turf_decal/bot_white, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) "kzP" = ( @@ -29413,6 +29381,10 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"kBD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/pink/visible, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/station/engineering/supermatter) "kBH" = ( /turf/open/floor/iron/white/small, /area/station/service/janitor) @@ -29500,6 +29472,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons) +"kDS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/supermatter/room) "kDV" = ( /obj/item/kirbyplants/random, /obj/effect/decal/cleanable/dirt, @@ -30400,6 +30383,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/security/office) +"kUy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/supermatter/room) "kUF" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -30571,13 +30561,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/port/fore) -"kYK" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/engineering/supermatter/room) "kYQ" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -30724,7 +30707,7 @@ /obj/machinery/light/small/directional/east, /obj/effect/landmark/start/bitrunner, /turf/open/floor/iron/dark/smooth_half, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "lbG" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -31146,6 +31129,25 @@ }, /turf/open/space/basic, /area/space/nearstation) +"lgh" = ( +/obj/structure/table, +/obj/machinery/light_switch/directional/north, +/obj/item/storage/briefcase/secure{ + pixel_x = 3; + pixel_y = 12 + }, +/obj/item/storage/briefcase/secure{ + pixel_x = -1; + pixel_y = 8 + }, +/obj/item/crowbar/large{ + pixel_y = -10 + }, +/obj/item/weldingtool/mini{ + pixel_y = -10 + }, +/turf/open/floor/iron/dark, +/area/station/security/lockers) "lgj" = ( /obj/structure/chair/sofa/bench{ dir = 8 @@ -32900,7 +32902,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/effect/landmark/start/bitrunner, /turf/open/floor/iron/dark/smooth_half, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "lKK" = ( /obj/effect/mapping_helpers/broken_floor, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -32922,7 +32924,7 @@ /obj/machinery/byteforge, /obj/effect/turf_decal/box, /turf/open/floor/iron/dark/smooth_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "lLr" = ( /obj/machinery/porta_turret/ai{ dir = 4 @@ -33137,13 +33139,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/hallway/abandoned_command) -"lOh" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 8 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/supermatter/room) "lOi" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -34781,6 +34776,25 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"mrP" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/table, +/obj/item/folder/red, +/obj/item/food/monkeycube/bee{ + name = "monkey cube"; + pixel_y = 17 + }, +/obj/item/food/monkeycube/chicken{ + pixel_y = 15; + pixel_x = 6; + name = "monkey cube"; + desc = "A new Nanotrasen classic, the monkey cube. Tastes like everything!" + }, +/turf/open/floor/iron/dark, +/area/station/commons/storage/tools) "msg" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -36004,8 +36018,8 @@ "mNG" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/button/transport/tram/directional/south{ - specific_transport_id = "bird_2"; - id = 1 + id = 1; + specific_transport_id = "bird_2" }, /turf/open/floor/iron, /area/station/maintenance/port/aft) @@ -36196,6 +36210,13 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"mRT" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) "mSi" = ( /obj/structure/mannequin/plastic, /turf/open/floor/plating, @@ -36368,15 +36389,6 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron/white, /area/station/medical/virology) -"mVs" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 1 - }, -/obj/machinery/airalarm/directional/north, -/obj/structure/bed/dogbed/runtime, -/mob/living/simple_animal/pet/cat/runtime, -/turf/open/floor/iron/white/small, -/area/station/command/heads_quarters/cmo) "mVt" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/dark_red{ @@ -37539,7 +37551,7 @@ /obj/structure/table/glass, /obj/machinery/recharger, /obj/item/phone{ - desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; + desc = "Supposedly a direct line to Symphionia Conglomeration of Colonists. It's not even plugged in."; pixel_x = -3; pixel_y = 14 }, @@ -37866,7 +37878,7 @@ /obj/structure/table, /obj/item/food/cornchips/green, /turf/open/floor/iron/dark/smooth_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "nyi" = ( /turf/closed/wall/rust, /area/station/maintenance/hallway/abandoned_command) @@ -38218,21 +38230,12 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/greater) "nEl" = ( -/obj/machinery/computer/quantum_console{ - dir = 4 - }, -/obj/machinery/computer/quantum_console{ - dir = 4 - }, -/obj/machinery/computer/quantum_console{ - dir = 4 - }, /obj/machinery/computer/quantum_console{ dir = 4 }, /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "nEo" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -38296,7 +38299,7 @@ /area/station/cargo/drone_bay) "nFo" = ( /turf/closed/wall, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "nFp" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -38613,17 +38616,6 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"nKf" = ( -/obj/effect/turf_decal/siding/dark_red/corner{ - dir = 8 - }, -/obj/item/storage/secure/safe/directional/north{ - name = "armory safe A" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/autoname/directional/north, -/turf/open/floor/iron/dark/small, -/area/station/ai_monitored/security/armory) "nKj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -39604,6 +39596,16 @@ }, /turf/open/floor/iron/smooth_large, /area/station/maintenance/department/medical/central) +"ofS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/arrow_cw{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/station/engineering/supermatter/room) "ofZ" = ( /turf/closed/mineral/random/stationside, /area/station/maintenance/port/lesser) @@ -39635,6 +39637,16 @@ }, /turf/open/floor/iron/white/small, /area/station/medical/storage) +"ogB" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 6 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/supermatter/room) "ogF" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/closet/firecloset, @@ -40564,6 +40576,11 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"owZ" = ( +/obj/item/kirbyplants/organic/applebush, +/obj/structure/secure_safe/caps_spare/directional/west, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/bridge) "oxb" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/poddoor/preopen{ @@ -40760,6 +40777,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/port) +"oBv" = ( +/obj/machinery/door/airlock/external{ + name = "Labor Camp Shuttle Airlock"; + shuttledocked = 1 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/iron/dark/small, +/area/station/security/processing) "oBA" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -40821,7 +40848,7 @@ /area/station/hallway/primary/central/fore) "oCG" = ( /turf/closed/wall/rust, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "oCM" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/broken_flooring/pile/directional/east, @@ -40940,6 +40967,7 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 4 }, +/obj/machinery/air_sensor/engine_chamber, /turf/open/floor/engine, /area/station/engineering/supermatter) "oFf" = ( @@ -42039,6 +42067,20 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron, /area/station/construction/mining/aux_base) +"oZS" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/arrow_cw{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 5 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/supermatter/room) "oZY" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -42879,13 +42921,6 @@ }, /turf/open/floor/iron/textured_large, /area/station/security/checkpoint/escape) -"poI" = ( -/obj/machinery/atmospherics/components/trinary/filter/critical{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/engineering/supermatter/room) "poM" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -43012,6 +43047,12 @@ /obj/effect/spawner/random/trash, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"pqJ" = ( +/obj/machinery/atmospherics/pipe/smart/simple/pink/visible{ + dir = 6 + }, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/station/engineering/supermatter) "pqK" = ( /obj/structure/cable, /obj/machinery/door/window/left/directional/south, @@ -43168,11 +43209,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/stone, /area/station/command/corporate_suite) -"ptB" = ( -/obj/item/kirbyplants/organic/applebush, -/obj/item/storage/secure/safe/caps_spare/directional/west, -/turf/open/floor/iron/dark/smooth_large, -/area/station/command/bridge) "ptN" = ( /obj/structure/table/reinforced/plastitaniumglass, /obj/item/toy/talking/griffin{ @@ -43866,14 +43902,6 @@ /obj/effect/turf_decal/siding/blue, /turf/open/floor/iron/white, /area/station/medical/paramedic) -"pEu" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/meter, -/obj/machinery/light/directional/south, -/turf/open/floor/iron/smooth, -/area/station/engineering/supermatter/room) "pEy" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -44914,6 +44942,17 @@ }, /turf/open/floor/iron/textured_half, /area/station/service/hydroponics/garden) +"pUS" = ( +/obj/machinery/door/airlock/external{ + name = "Labor Camp Shuttle Airlock"; + shuttledocked = 1 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/iron/dark/small, +/area/station/security/processing) "pVa" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -46140,6 +46179,9 @@ shuttledocked = 1 }, /obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, /turf/open/floor/iron/dark/small, /area/station/security/processing) "qnj" = ( @@ -46384,12 +46426,6 @@ }, /turf/open/floor/iron/grimy, /area/station/service/theater) -"qrP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 6 - }, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/station/engineering/supermatter) "qrR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -46826,8 +46862,8 @@ "qzp" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/button/transport/tram/directional/north{ - specific_transport_id = "bird_1"; - id = 1 + id = 1; + specific_transport_id = "bird_1" }, /obj/machinery/transport/destination_sign/indicator/directional/north, /turf/open/floor/noslip, @@ -47392,6 +47428,13 @@ }, /turf/open/floor/iron/kitchen/small, /area/station/security/prison/mess) +"qHT" = ( +/obj/structure/closet/secure_closet/engineering_chief, +/obj/item/storage/briefcase/secure, +/obj/item/lighter, +/obj/machinery/computer/security/telescreen/entertainment/directional/south, +/turf/open/floor/iron/grimy, +/area/station/command/heads_quarters/ce) "qHY" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -49889,8 +49932,8 @@ /obj/structure/table, /obj/machinery/airalarm/directional/south, /obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = -6 + pixel_x = -6; + pixel_y = 6 }, /obj/item/clipboard{ pixel_x = 4; @@ -51082,7 +51125,7 @@ /turf/open/floor/iron/dark/smooth_edge{ dir = 1 }, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "rPz" = ( /obj/structure/table/glass, /obj/item/flashlight/lamp/green{ @@ -51571,7 +51614,7 @@ /turf/open/floor/iron/dark/smooth_half{ dir = 1 }, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "rWW" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -51871,6 +51914,10 @@ /obj/effect/landmark/start/research_director, /turf/open/floor/iron/grimy, /area/station/science/cubicle) +"scc" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/smooth, +/area/station/engineering/supermatter/room) "scg" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -54249,7 +54296,7 @@ /area/station/maintenance/central/greater) "sQv" = ( /obj/effect/turf_decal/sand/plating, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /obj/item/stack/ore/iron{ amount = 25 }, @@ -55338,7 +55385,7 @@ /turf/open/floor/carpet/red, /area/station/command/heads_quarters/hos) "tiN" = ( -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /obj/item/stack/ore/glass{ amount = 20 }, @@ -55378,18 +55425,6 @@ "tjj" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/ai_upload) -"tjQ" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/dark_red{ - dir = 1 - }, -/obj/item/storage/secure/safe/hos{ - pixel_x = 15; - pixel_y = 28 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/stone, -/area/station/command/heads_quarters/hos) "tkp" = ( /obj/machinery/door/airlock/public/glass{ name = "Services Corridor" @@ -55671,6 +55706,13 @@ /obj/effect/turf_decal/tile/dark_red/half/contrasted, /turf/open/floor/iron, /area/station/security/brig/entrance) +"tpd" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/pink/visible{ + dir = 9 + }, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/station/engineering/supermatter) "tpk" = ( /obj/machinery/vending/wardrobe/law_wardrobe, /obj/effect/turf_decal/siding/wood{ @@ -56721,8 +56763,8 @@ "tGv" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/button/transport/tram/directional/north{ - specific_transport_id = "bird_1"; - id = 2 + id = 2; + specific_transport_id = "bird_1" }, /obj/machinery/transport/destination_sign/indicator/directional/north, /turf/open/floor/noslip, @@ -57249,7 +57291,7 @@ /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "tQx" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/fueltank, @@ -59940,11 +59982,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/commons/toilet/auxiliary) -"uJZ" = ( -/obj/structure/window/reinforced/shuttle, -/obj/structure/window/reinforced/shuttle, -/turf/open/floor/plating, -/area/station/commons/fitness/recreation/entertainment) "uKl" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -60333,6 +60370,17 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/smooth, /area/station/maintenance/solars/port/aft) +"uRu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/yellow/corner, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/supermatter/room) "uRF" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -61238,18 +61286,6 @@ /obj/effect/mapping_helpers/airlock/access/any/science/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"vgC" = ( -/obj/structure/closet/secure_closet/chief_medical, -/obj/item/storage/secure/briefcase{ - pixel_x = 3; - pixel_y = 5 - }, -/obj/item/storage/secure/safe/directional/south{ - pixel_y = -23 - }, -/obj/item/gun/syringe, -/turf/open/floor/wood/parquet, -/area/station/command/heads_quarters/cmo) "vgN" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/opposingcorners, @@ -61679,6 +61715,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/machinery/camera/autoname/directional/north, /obj/machinery/light/small/directional/north, +/obj/vehicle/sealed/mecha/ripley/paddy/preset, /turf/open/floor/iron, /area/station/security/tram) "vmX" = ( @@ -63672,6 +63709,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ dir = 4 }, +/obj/machinery/air_sensor/ordnance_freezer_chamber, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/freezerchamber) "vTm" = ( @@ -64068,6 +64106,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/central/greater) +"vYg" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/corner, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/supermatter/room) "vYj" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -64647,6 +64698,15 @@ }, /turf/closed/wall/r_wall, /area/station/security/brig/entrance) +"wiw" = ( +/obj/structure/cable, +/obj/structure/bed, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/item/bedsheet/ce, +/obj/effect/landmark/start/chief_engineer, +/obj/structure/secure_safe/directional/south, +/turf/open/floor/iron/grimy, +/area/station/command/heads_quarters/ce) "wix" = ( /obj/item/kirbyplants/random, /obj/machinery/newscaster/directional/west, @@ -65884,6 +65944,14 @@ /obj/effect/spawner/random/structure/grille, /turf/open/space/basic, /area/space/nearstation) +"wCp" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/supermatter/room) "wCt" = ( /obj/machinery/flasher/directional/east, /turf/open/floor/iron/half, @@ -66727,18 +66795,9 @@ /turf/open/floor/iron/dark, /area/station/security/interrogation) "wPf" = ( -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "hop"; - name = "Privacy Shutters" - }, -/obj/machinery/door/poddoor/preopen{ - id = "hop"; - name = "Privacy Shutters" - }, -/turf/open/floor/plating, -/area/station/command/heads_quarters/hop) +/obj/item/clothing/glasses/blindfold, +/turf/open/space/basic, +/area/space) "wPh" = ( /obj/structure/disposalpipe/trunk{ dir = 8 @@ -66783,6 +66842,15 @@ }, /turf/open/floor/iron, /area/station/medical/chemistry) +"wPV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/supermatter/room) "wQj" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -66942,8 +67010,8 @@ /obj/item/radio/intercom/directional/south, /obj/structure/extinguisher_cabinet/directional/west, /obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = 4 + pixel_x = 4; + pixel_y = 6 }, /obj/item/stack/medical/gauze{ pixel_x = -2; @@ -68556,8 +68624,12 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/east, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnanceburn" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/dark, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "xoa" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -70277,6 +70349,9 @@ }, /obj/effect/mapping_helpers/airlock/access/all/security/general, /obj/structure/cable, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, /turf/open/floor/iron/dark/small, /area/station/security/processing) "xLm" = ( @@ -71976,25 +72051,6 @@ /obj/effect/spawner/random/aimodule/harmless, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai_upload) -"yhk" = ( -/obj/structure/table, -/obj/machinery/light_switch/directional/north, -/obj/item/storage/secure/briefcase{ - pixel_x = 3; - pixel_y = 12 - }, -/obj/item/storage/secure/briefcase{ - pixel_x = -1; - pixel_y = 8 - }, -/obj/item/crowbar/large{ - pixel_y = -10 - }, -/obj/item/weldingtool/mini{ - pixel_y = -10 - }, -/turf/open/floor/iron/dark, -/area/station/security/lockers) "yhq" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/neutral{ @@ -72296,7 +72352,7 @@ /obj/effect/turf_decal/delivery, /obj/machinery/light/cold/directional/west, /turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "ylJ" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -81638,9 +81694,9 @@ diK aII dID tKO -kYK -dyH -pEu +ogB +bUl +jmm ayK jZl jZl @@ -81895,9 +81951,9 @@ cFC aJc aME xQr -aTA -poI -kvh +cFF +kUy +diM bfZ bmn bwg @@ -82152,9 +82208,9 @@ qiX jxu buS xQr -aTP -boP -dla +cdZ +gmi +wPV npy bmP bzs @@ -82408,10 +82464,10 @@ oZg geQ aRR pbt -aPG -aTW +cXF bAq -aTW +mRT +dnp bhc bng bzv @@ -82665,9 +82721,9 @@ vFW aAt oES fzl -aQn -gPr -bcu +kBD +uRu +ofS jOb xtX jAw @@ -82921,10 +82977,10 @@ acn iuu iey mwI -qrP -aQB -ajw -bcK +pqJ +tpd +kDS +wCp frj ayK ayK @@ -83180,8 +83236,8 @@ xmb aJn aNe xQr -aUQ -lOh +ePu +scc xYG rQi bGT @@ -83437,8 +83493,8 @@ hzi bEG leh lkU -aVj -bJL +vYg +oZS iQv bhR boL @@ -85597,7 +85653,7 @@ wYW pds kPa vTV -tjQ +kvr ddE tiM qGu @@ -86100,7 +86156,7 @@ rui qVP qop xkt -nKf +fiW mVt gJa huN @@ -87128,7 +87184,7 @@ fEC fEC rui qVP -hcG +kkW jnN gEH nDe @@ -88933,7 +88989,7 @@ nCH xfN daq xFe -yhk +lgh dYc nlf yjd @@ -89643,7 +89699,7 @@ ueX slY slY slY -gQx +eVc hbv rkr hmj @@ -90160,7 +90216,7 @@ hXf oQM hbI hgd -fBl +mrP xrZ sRg xat @@ -90221,7 +90277,7 @@ xur nGi yaU xsF -xLl +pUS xur bCf xur @@ -90992,7 +91048,7 @@ nCH blb blb wpO -qnc +oBv xKv blb xKv @@ -91441,7 +91497,7 @@ wbi hrY wbi wbi -wbi +fhs wbi wbi wbi @@ -92714,7 +92770,7 @@ evs bGc fqf fvT -fRU +ahM gnf fpO dDB @@ -93496,7 +93552,7 @@ dDB dDB sUy uOP -gIG +hur mzb gTi pUy @@ -94000,7 +94056,7 @@ eSh fpO fyQ fSW -gpK +qHT fpO blb blb @@ -94256,7 +94312,7 @@ eyv eSo fpO fyT -fTx +wiw fpO fpO dDB @@ -94525,7 +94581,7 @@ pIS uAK anb uFm -ptB +owZ xsh ahE plz @@ -94794,8 +94850,8 @@ uVT tgw lqt ghD -aZP -wPf +gaf +xQw mvT vrn kvT @@ -95309,7 +95365,7 @@ njA lqt cpT xQv -wPf +xQw mvT vrn ncL @@ -98984,7 +99040,7 @@ vDV kkO vDV ntX -vgC +ijY wgL lLH sSQ @@ -100265,7 +100321,7 @@ oNd fFD cbO vDV -mVs +ahu clt jbr guF @@ -109946,7 +110002,7 @@ tIE aJN aJN aJN -uJZ +aJN aJN doX doX @@ -132065,7 +132121,7 @@ dDB dDB dDB dDB -dDB +wPf dDB dDB dDB diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index ad05d3cb906c63..1c55d530618998 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -23,13 +23,6 @@ }, /turf/closed/wall/r_wall, /area/station/maintenance/solars/port/fore) -"aaj" = ( -/obj/structure/bed/dogbed/renault, -/obj/machinery/newscaster/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/mob/living/basic/pet/fox/renault, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/captain) "aaz" = ( /obj/effect/landmark/start/hangover, /obj/structure/chair/stool/directional/east, @@ -285,6 +278,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/command/bridge) +"adE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "adF" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -376,6 +374,18 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"aeD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/directional/east{ + c_tag = "Cargo Bay - Delivery Office"; + name = "cargo camera" + }, +/obj/effect/turf_decal/tile/brown, +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/sorting) "aeE" = ( /obj/structure/table/reinforced, /obj/item/stack/package_wrap, @@ -806,13 +816,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/department/eva/abandoned) -"ajG" = ( -/obj/item/storage/secure/safe/directional/west, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/rd) "ajP" = ( /obj/machinery/holopad, /obj/structure/disposalpipe/segment, @@ -1141,23 +1144,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) -"anP" = ( -/obj/structure/table, -/obj/structure/cable, -/obj/machinery/status_display/evac/directional/north, -/obj/item/storage/briefcase{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/secure/briefcase, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/command/corporate_showroom) "anV" = ( /obj/effect/landmark/start/hangover/closet, /obj/structure/closet/firecloset, @@ -1280,6 +1266,14 @@ }, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"apf" = ( +/obj/machinery/mech_bay_recharge_port{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "apu" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -2187,6 +2181,16 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"azD" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "azE" = ( /obj/effect/turf_decal/tile/red/opposingcorners, /obj/effect/turf_decal/tile/yellow/opposingcorners{ @@ -2527,17 +2531,20 @@ /obj/item/clothing/under/rank/civilian/lawyer/black/skirt, /turf/open/floor/wood, /area/station/commons/dorms) +"aFb" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "aFo" = ( /obj/structure/lattice, /obj/structure/grille/broken, /turf/open/space, /area/space/nearstation) -"aFs" = ( -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/lobby) "aFv" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2745,11 +2752,6 @@ /obj/item/toy/figure/chef, /turf/open/floor/iron/dark, /area/station/service/kitchen) -"aHw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "aHC" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/status_display/evac/directional/east, @@ -3270,6 +3272,11 @@ /obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"aOd" = ( +/obj/structure/table/wood, +/obj/item/paper/fluff/jobs/engineering/frequencies, +/turf/open/floor/iron/grimy, +/area/station/tcommsat/computer) "aOf" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -3418,15 +3425,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/robotics/lab) -"aPD" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "aPO" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /obj/effect/turf_decal/tile/yellow{ @@ -3558,6 +3556,12 @@ }, /turf/open/floor/iron, /area/station/security/prison/safe) +"aRX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/iron, +/area/station/service/kitchen/abandoned) "aRZ" = ( /obj/structure/dresser, /obj/item/radio/intercom/directional/east, @@ -4053,6 +4057,21 @@ /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, /area/station/engineering/main) +"aZj" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/clothing/glasses/welding, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/weldingtool/empty{ + pixel_y = 8; + pixel_x = 9 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "aZo" = ( /obj/structure/table/reinforced, /obj/item/electronics/airalarm, @@ -4984,13 +5003,6 @@ }, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/hos) -"bkr" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/conveyor{ - id = "cargodisposals" - }, -/turf/open/floor/plating, -/area/station/cargo/sorting) "bkD" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -5003,6 +5015,19 @@ }, /turf/open/floor/iron, /area/station/maintenance/department/chapel) +"bkE" = ( +/obj/structure/table, +/obj/item/stack/package_wrap, +/obj/structure/secure_safe/directional/north, +/obj/item/stack/package_wrap, +/obj/item/hand_labeler, +/obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) "bkN" = ( /obj/structure/table/reinforced, /obj/item/folder/red{ @@ -5127,6 +5152,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"bmo" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/herringbone, +/area/station/cargo/miningoffice) "bmp" = ( /obj/machinery/status_display/ai/directional/north, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -6658,6 +6693,13 @@ }, /turf/open/floor/iron/dark/corner, /area/station/maintenance/disposal/incinerator) +"bFA" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/herringbone, +/area/station/cargo/miningoffice) "bFS" = ( /obj/effect/turf_decal/trimline/blue/filled/warning, /obj/structure/cable, @@ -6726,19 +6768,6 @@ "bGc" = ( /turf/closed/wall, /area/station/maintenance/department/engine/atmos) -"bGf" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/west{ - dir = 4; - name = "Mining Desk"; - req_access = list("mining") - }, -/obj/effect/turf_decal/delivery, -/obj/item/paper_bin, -/obj/item/pen, -/turf/open/floor/iron, -/area/station/cargo/lobby) "bGi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -6870,6 +6899,13 @@ }, /turf/open/floor/iron, /area/station/construction/mining/aux_base) +"bHd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/table/wood, +/obj/item/radio/intercom/command, +/obj/item/paper/fluff/jobs/engineering/frequencies, +/turf/open/floor/carpet, +/area/station/command/meeting_room/council) "bHg" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/corner, @@ -7294,28 +7330,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/science) -"bLN" = ( -/obj/structure/rack, -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/toolbox/emergency{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/storage/toolbox/emergency, -/obj/item/shovel, -/obj/item/shovel, -/obj/item/pickaxe, -/obj/item/pickaxe, -/obj/effect/turf_decal/bot, -/obj/machinery/light/small/directional/south, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/machinery/light_switch/directional/west{ - pixel_x = -38 - }, -/obj/machinery/airalarm/directional/south, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "bLP" = ( /obj/machinery/camera/directional/east{ c_tag = "Permabrig - Kitchen Entrance"; @@ -7389,12 +7403,6 @@ /obj/effect/turf_decal/trimline/purple/filled/warning, /turf/open/floor/iron/white, /area/station/science/lab) -"bMw" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/space, -/area/space/nearstation) "bMB" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -7676,6 +7684,14 @@ dir = 8 }, /area/station/science/lobby) +"bRs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/port) "bRw" = ( /obj/structure/sign/warning/deathsposal/directional/east, /obj/machinery/disposal/bin, @@ -8172,32 +8188,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/maintenance/department/science/xenobiology) -"bWn" = ( -/obj/structure/sign/poster/party_game/directional/west, -/obj/structure/table, -/obj/item/storage/secure/briefcase{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/briefcase{ - pixel_y = -2 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation) -"bWw" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/machinery/status_display/door_timer{ - id = "Isolation_Cell"; - name = "Isolation Cell"; - pixel_x = -32 - }, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "bWD" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -8428,6 +8418,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/port) +"bZe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/glass, +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/mob/living/basic/cockroach, +/turf/open/floor/iron, +/area/station/medical/abandoned) "bZz" = ( /obj/structure/table/wood, /obj/item/folder, @@ -9143,6 +9143,24 @@ "cjN" = ( /turf/closed/wall/r_wall, /area/station/security/office) +"cjO" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/generic, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/landmark/start/bitrunner, +/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_large, +/area/station/cargo/bitrunning/den) "ckb" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -10099,17 +10117,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/security/prison/safe) -"cvc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/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/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/plating, -/area/station/maintenance/department/science) "cvo" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, @@ -10150,12 +10157,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hop) -"cwd" = ( -/obj/machinery/light/directional/south, -/obj/machinery/byteforge, -/obj/effect/turf_decal/box, -/turf/open/floor/iron/dark/smooth_large, -/area/station/bitrunning/den) "cwe" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -10207,22 +10208,6 @@ /obj/structure/sign/warning/radiation/directional/south, /turf/open/floor/iron, /area/station/engineering/supermatter/room) -"cwK" = ( -/obj/structure/cable, -/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/effect/turf_decal/tile/brown/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) "cwV" = ( /obj/effect/landmark/start/hangover, /obj/structure/disposalpipe/segment{ @@ -10291,14 +10276,15 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/engineering/storage/tech) -"cxv" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/maintenance/fore) +"cxu" = ( +/obj/structure/table/reinforced, +/obj/item/storage/medkit/regular, +/obj/structure/secure_safe/caps_spare/directional/west, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "cxM" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line, @@ -10333,11 +10319,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/medical/treatment_center) -"cyc" = ( -/obj/machinery/netpod, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) "cyq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -10758,7 +10739,7 @@ }, /obj/machinery/button/door/directional/north{ id = "corporatelounge"; - name = "Corporate Lounge Shutters"; + name = "Conglomeration Lounge Shutters"; pixel_x = -4; pixel_y = 26 }, @@ -11092,9 +11073,6 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) -"cGV" = ( -/turf/closed/wall, -/area/station/bitrunning/den) "cHb" = ( /obj/machinery/door/firedoor/heavy, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -11542,11 +11520,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/station/service/theater) -"cNy" = ( -/obj/item/kirbyplants/random, -/obj/item/storage/secure/safe/directional/east, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/captain/private) "cNH" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -11653,13 +11626,6 @@ /obj/effect/spawner/random/trash/janitor_supplies, /turf/open/floor/plating, /area/station/maintenance/fore) -"cOS" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/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/fore) "cOU" = ( /obj/structure/weightmachine/weightlifter, /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ @@ -11890,6 +11856,13 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/plating, /area/station/maintenance/department/eva/abandoned) +"cRR" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table, +/obj/item/storage/medkit/regular, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "cRT" = ( /turf/open/floor/iron, /area/station/medical/abandoned) @@ -12016,6 +11989,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/port) +"cTv" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "cTy" = ( /obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ dir = 1 @@ -12733,6 +12713,18 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plating, /area/station/service/library/abandoned) +"ddp" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/item/mod/module/plasma_stabilizer, +/obj/item/mod/module/thermal_regulator, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/digital_clock/directional/south, +/obj/item/mod/module/signlang_radio, +/turf/open/floor/iron, +/area/station/medical/storage) "dds" = ( /obj/machinery/camera/directional/east{ c_tag = "Virology - Break Room"; @@ -13270,6 +13262,19 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"dkr" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/office, +/obj/machinery/status_display/supply{ + pixel_x = 32 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/sorting) "dkz" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light/small/directional/west, @@ -13406,6 +13411,21 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) +"dlU" = ( +/obj/structure/table/wood, +/obj/structure/secure_safe/directional/east, +/obj/machinery/computer/security/wooden_tv, +/obj/machinery/light_switch/directional/south{ + pixel_x = 8 + }, +/obj/machinery/button/door/directional/south{ + id = "detectivewindows"; + name = "Privacy Shutters"; + pixel_x = -6; + req_access = list("detective") + }, +/turf/open/floor/carpet, +/area/station/security/detectives_office) "dmq" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -13482,6 +13502,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/security/detectives_office) +"dnK" = ( +/obj/structure/rack, +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/storage/briefcase/secure, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/wood, +/area/station/service/lawoffice) "dnM" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -13798,6 +13828,12 @@ dir = 4 }, /area/station/science/lobby) +"dsb" = ( +/obj/machinery/netpod, +/obj/structure/sign/poster/random/directional/north, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "dse" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -14020,18 +14056,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/xenobiology) -"dux" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/item/clipboard, -/obj/item/toy/figure/miner, -/obj/machinery/light/directional/south, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/station/cargo/miningoffice) "duA" = ( /turf/closed/wall/r_wall, /area/station/command/corporate_showroom) @@ -14311,6 +14335,11 @@ "dxe" = ( /turf/closed/wall, /area/station/medical/abandoned) +"dxh" = ( +/obj/structure/table/wood, +/obj/item/aquarium_kit, +/turf/open/floor/carpet/red, +/area/station/hallway/secondary/service) "dxi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/window{ @@ -15250,6 +15279,17 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"dKR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/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/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/department/science) "dLd" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -15681,18 +15721,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/gateway) +"dPv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) "dPB" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"dPC" = ( -/obj/structure/closet/secure_closet/miner, -/obj/effect/turf_decal/delivery, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "dPD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15858,15 +15899,6 @@ /obj/effect/turf_decal/tile/brown/half/contrasted, /turf/open/floor/iron, /area/station/cargo/lobby) -"dRQ" = ( -/obj/structure/table/glass, -/obj/item/surgery_tray/full, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/suit/apron/surgical, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/medical/surgery/theatre) "dSj" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /obj/effect/landmark/event_spawn, @@ -16095,6 +16127,16 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"dVA" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + 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/maintenance/fore) "dVC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -16233,14 +16275,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/port) -"dXs" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/item/flashlight/lamp, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "dXw" = ( /obj/structure/sign/painting/large/library_private{ dir = 1; @@ -16287,6 +16321,13 @@ /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/white, /area/station/medical/medbay) +"dXX" = ( +/obj/structure/closet/secure_closet/miner, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/delivery, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "dYj" = ( /turf/closed/wall/r_wall, /area/station/engineering/atmos/hfr_room) @@ -16508,19 +16549,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/pharmacy) -"eaL" = ( -/obj/structure/table, -/obj/item/stack/package_wrap, -/obj/item/storage/secure/safe/directional/north, -/obj/item/stack/package_wrap, -/obj/item/hand_labeler, -/obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/turf/open/floor/iron, -/area/station/commons/vacant_room/commissary) "eaO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -16672,6 +16700,13 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/station/engineering/atmos/hfr_room) +"ecX" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/conveyor{ + id = "cargodisposals" + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "eda" = ( /obj/structure/chair/sofa/bench{ dir = 8 @@ -17062,6 +17097,11 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron/dark, /area/station/service/bar) +"eit" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/mob/living/basic/cockroach, +/turf/open/floor/iron/dark, +/area/station/service/abandoned_gambling_den) "eiw" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -17153,19 +17193,6 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) -"eke" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/junction/yjunction{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - 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/maintenance/fore) "ekM" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -17240,12 +17267,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/gateway) -"elO" = ( -/obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "elP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/yellow/fourcorners, @@ -17323,18 +17344,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) -"emZ" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "garbage" - }, -/obj/machinery/recycler{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "enc" = ( /obj/machinery/status_display/evac/directional/east, /obj/item/kirbyplants/photosynthetic{ @@ -17378,6 +17387,15 @@ /obj/structure/flora/bush/lavendergrass/style_4, /turf/open/floor/grass, /area/station/hallway/secondary/exit/departure_lounge) +"enF" = ( +/obj/structure/table/wood, +/obj/item/storage/briefcase/secure{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/briefcase, +/turf/open/floor/iron/checker, +/area/station/service/theater/abandoned) "enR" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 @@ -17647,6 +17665,12 @@ /obj/effect/turf_decal/tile/purple/opposingcorners, /turf/open/floor/iron/textured, /area/station/maintenance/port/aft) +"ero" = ( +/obj/structure/bed/dogbed/mcgriff, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/mob/living/basic/pet/dog/pug/mcgriff, +/turf/open/floor/iron, +/area/station/security/warden) "ers" = ( /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, @@ -17966,19 +17990,6 @@ dir = 4 }, /area/station/service/chapel) -"euf" = ( -/obj/structure/table/wood, -/obj/machinery/newscaster/directional/east, -/obj/item/storage/secure/briefcase, -/obj/item/book/manual/wiki/security_space_law, -/obj/item/taperecorder{ - pixel_x = 3; - pixel_y = 4 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/hos) "eug" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 @@ -18543,6 +18554,28 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/engineering/storage/tech) +"eCQ" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/toolbox/emergency{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/storage/toolbox/emergency, +/obj/item/shovel, +/obj/item/shovel, +/obj/item/pickaxe, +/obj/item/pickaxe, +/obj/effect/turf_decal/bot, +/obj/machinery/light/small/directional/south, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/light_switch/directional/west{ + pixel_x = -38 + }, +/obj/machinery/airalarm/directional/south, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "eCR" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 4 @@ -18668,6 +18701,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"eEI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/mob/living/basic/goat/pete, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "eFj" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/north, @@ -18728,18 +18769,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"eFU" = ( -/obj/structure/cable, -/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/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "eGb" = ( /obj/effect/spawner/random/trash/mess, /turf/open/floor/wood, @@ -19070,6 +19099,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/grimy, /area/station/service/lawoffice) +"eJx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/blobstart, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 + }, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/iron, +/area/station/service/kitchen/abandoned) "eJy" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt, @@ -19708,6 +19747,14 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat_interior) +"eQG" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt/dust, +/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/herringbone, +/area/station/cargo/miningoffice) "eQK" = ( /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 1 @@ -20039,6 +20086,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/bridge) +"eVc" = ( +/obj/effect/landmark/blobstart, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/aft) "eVk" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 4; @@ -20070,6 +20122,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/engineering/atmos) +"eVz" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/fore) "eVE" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -20292,29 +20351,6 @@ }, /turf/open/floor/glass, /area/station/maintenance/space_hut/observatory) -"eYo" = ( -/obj/structure/table/reinforced, -/obj/item/gun/energy/laser/carbine/practice{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/item/gun/energy/laser/practice, -/obj/item/clothing/ears/earmuffs, -/obj/item/clothing/ears/earmuffs, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/security/range) -"eYt" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/computer/order_console/mining, -/obj/item/radio/intercom/directional/west, -/obj/machinery/firealarm/directional/west{ - pixel_y = -9 - }, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "eYy" = ( /obj/structure/cable, /obj/structure/closet/secure_closet/atmospherics, @@ -20398,13 +20434,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron, /area/station/security/checkpoint/escape) -"eYZ" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/sorting) "eZe" = ( /obj/machinery/vending/wardrobe/viro_wardrobe, /obj/structure/sign/poster/official/cleanliness/directional/west, @@ -20506,10 +20535,6 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/iron/smooth, /area/station/maintenance/department/science/xenobiology) -"fbu" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/bitrunning/den) "fbA" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -20946,6 +20971,18 @@ /obj/item/kirbyplants/random, /turf/open/floor/wood, /area/station/service/theater/abandoned) +"fgk" = ( +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=hall12"; + location = "hall11" + }, +/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/fourcorners, +/mob/living/simple_animal/bot/secbot/beepsky/officer, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "fgq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -21100,11 +21137,6 @@ }, /turf/open/floor/wood, /area/station/service/library/abandoned) -"fiu" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/mob/living/basic/cockroach, -/turf/open/floor/iron/dark, -/area/station/service/abandoned_gambling_den) "fix" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -21120,13 +21152,6 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/iron/white, /area/station/science/robotics/lab) -"fiJ" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/fore) "fiL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -21447,6 +21472,21 @@ }, /turf/open/floor/wood, /area/station/service/library/abandoned) +"fmH" = ( +/obj/structure/cable, +/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/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) "fmI" = ( /obj/machinery/bluespace_vendor/directional/south, /obj/effect/turf_decal/tile/neutral, @@ -21639,17 +21679,6 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron, /area/station/security/warden) -"fpe" = ( -/obj/structure/closet/secure_closet/contraband/heads, -/obj/item/storage/secure/briefcase, -/obj/item/storage/box/ids, -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/customs/aft) "fpm" = ( /obj/machinery/light/directional/south, /obj/effect/turf_decal/tile/neutral{ @@ -21759,6 +21788,23 @@ /obj/effect/mapping_helpers/mail_sorting/medbay/cmo_office, /turf/open/floor/iron/white, /area/station/medical/medbay) +"fqN" = ( +/obj/structure/table, +/obj/structure/cable, +/obj/machinery/status_display/evac/directional/north, +/obj/item/storage/briefcase{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/briefcase/secure, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/corporate_showroom) "fqO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -21990,13 +22036,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/service/library) -"ftS" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/iron/herringbone, -/area/station/cargo/miningoffice) "ftU" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/yellow, @@ -22074,6 +22113,13 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"fvD" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "fvE" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, @@ -22247,6 +22293,10 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"fxx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "fxP" = ( /obj/machinery/computer/security/telescreen/entertainment/directional/west, /obj/structure/table/wood, @@ -22433,16 +22483,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/engineering/storage) -"fAj" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt/dust, -/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/herringbone, -/area/station/cargo/miningoffice) "fAn" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -23017,6 +23057,12 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/security/evidence) +"fIe" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) "fIg" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -23088,6 +23134,18 @@ }, /turf/open/floor/iron, /area/station/maintenance/department/crew_quarters/bar) +"fIU" = ( +/obj/structure/rack, +/obj/item/gun/energy/laser/carbine/practice{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/gun/energy/laser/practice, +/obj/effect/turf_decal/bot, +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/auxlab/firing_range) "fIW" = ( /obj/structure/table, /obj/structure/bedsheetbin, @@ -23109,7 +23167,7 @@ /turf/open/floor/iron, /area/station/science/xenobiology) "fIY" = ( -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/floor/plating, /area/station/maintenance/fore) "fJj" = ( @@ -23234,6 +23292,13 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/station/solars/port/fore) +"fKY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/wood, +/obj/item/storage/briefcase/secure, +/obj/item/grenade/smokebomb, +/turf/open/floor/wood, +/area/station/maintenance/starboard/aft) "fLc" = ( /obj/structure/table/wood, /obj/item/clothing/neck/tie/red, @@ -23620,17 +23685,6 @@ }, /turf/open/floor/iron, /area/station/command/teleporter) -"fQC" = ( -/obj/structure/table, -/obj/item/mod/module/plasma_stabilizer, -/obj/item/mod/module/thermal_regulator, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 5 - }, -/obj/item/radio/intercom/directional/south, -/obj/item/mod/module/signlang_radio, -/turf/open/floor/iron/dark, -/area/station/security/office) "fQF" = ( /obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/structure/cable, @@ -23798,16 +23852,6 @@ "fSW" = ( /turf/closed/indestructible/opshuttle, /area/station/science/ordnance/bomb) -"fTh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/blobstart, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/effect/turf_decal/tile/yellow/opposingcorners{ - dir = 1 - }, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/iron, -/area/station/service/kitchen/abandoned) "fTw" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/effect/turf_decal/bot, @@ -23848,6 +23892,12 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, /area/station/service/library) +"fTE" = ( +/obj/machinery/cryo_cell{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/medical/cryo) "fTF" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /obj/structure/window/reinforced/spawner/directional/west, @@ -23916,12 +23966,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"fUr" = ( -/obj/machinery/cryo_cell{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/station/medical/cryo) "fUF" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced/spawner/directional/east, @@ -24403,27 +24447,6 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron, /area/station/security/courtroom) -"gan" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/newscaster/directional/east, -/obj/effect/spawner/random/structure/table_fancy, -/obj/item/reagent_containers/cup/glass/bottle/beer{ - desc = "Whatever it is, it reeks of foul, putrid froth."; - list_reagents = list(/datum/reagent/consumable/ethanol/bacchus_blessing = 15); - name = "Delta-Down"; - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = -3; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = -6; - pixel_y = 3 - }, -/turf/open/floor/wood, -/area/station/commons/dorms) "gat" = ( /obj/machinery/door/poddoor/preopen{ id = "brigprison"; @@ -24608,16 +24631,6 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics) -"gco" = ( -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/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, -/area/station/cargo/miningoffice) "gcr" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, @@ -24987,6 +25000,13 @@ /obj/effect/spawner/random/entertainment/deck, /turf/open/floor/carpet/black, /area/station/maintenance/port) +"gfY" = ( +/obj/structure/secure_safe/directional/west, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/rd) "ggc" = ( /obj/machinery/duct, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -25039,6 +25059,11 @@ /obj/effect/turf_decal/siding/white, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"ggW" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/lockers) "gho" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -25254,19 +25279,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/paramedic) -"gjG" = ( -/obj/structure/table/wood, -/obj/item/storage/secure/safe/hos{ - pixel_x = 32 - }, -/obj/machinery/light_switch/directional/north, -/obj/effect/turf_decal/siding/dark_red{ - dir = 6 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/item/flashlight/lamp/green, -/turf/open/floor/iron, -/area/station/command/heads_quarters/hos) "gjI" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/north, @@ -25284,6 +25296,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) +"gkt" = ( +/obj/effect/turf_decal/caution/stand_clear, +/obj/effect/turf_decal/box, +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id = "secmechbay"; + name = "Security Mech Bay Shutters" + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "gku" = ( /obj/machinery/meter, /obj/machinery/door/window/right/directional/west, @@ -25607,6 +25629,18 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/port) +"goa" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) "goc" = ( /obj/machinery/keycard_auth/directional/south{ pixel_y = -38 @@ -25731,6 +25765,18 @@ /obj/structure/reflector/single, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"gpD" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/poster/official/random/directional/west, +/turf/open/floor/iron/half{ + dir = 1 + }, +/area/station/cargo/miningoffice) "gpI" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -26105,6 +26151,13 @@ /obj/item/toy/cards/deck, /turf/open/floor/iron/grimy, /area/station/service/abandoned_gambling_den) +"gty" = ( +/obj/structure/table/reinforced, +/obj/item/folder/yellow, +/obj/item/gps/mining, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "gtG" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -26158,14 +26211,6 @@ }, /turf/open/floor/iron, /area/station/commons/storage/primary) -"guj" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal/bin, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "gum" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -26562,11 +26607,6 @@ /obj/effect/mapping_helpers/mail_sorting/service/law_office, /turf/open/floor/plating, /area/station/maintenance/department/security) -"gzc" = ( -/obj/structure/table/wood, -/obj/item/aquarium_kit, -/turf/open/floor/carpet/red, -/area/station/hallway/secondary/service) "gzj" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/start/prisoner, @@ -26801,6 +26841,19 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/commons/dorms) +"gCa" = ( +/obj/effect/turf_decal/caution/stand_clear, +/obj/effect/turf_decal/box, +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id = "secmechbay"; + name = "Security Mech Bay Shutters" + }, +/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/mechbay) "gCn" = ( /obj/structure/sign/warning/electric_shock/directional/east, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -26890,6 +26943,17 @@ }, /turf/open/floor/iron, /area/station/maintenance/department/science) +"gCL" = ( +/obj/structure/closet/secure_closet/contraband/heads, +/obj/item/storage/briefcase/secure, +/obj/item/storage/box/ids, +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/customs/aft) "gCQ" = ( /obj/structure/reagent_dispensers/wall/peppertank/directional/north, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -27154,15 +27218,6 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"gGh" = ( -/obj/structure/table/wood, -/obj/item/storage/briefcase{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/secure/briefcase, -/turf/open/floor/wood, -/area/station/command/meeting_room/council) "gGv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -27231,6 +27286,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/research) +"gHq" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/cargo/bitrunning/den) "gHt" = ( /obj/item/kirbyplants/random, /obj/machinery/button/door/directional/north{ @@ -27255,16 +27314,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/carpet/royalblack, /area/station/service/chapel/office) -"gHH" = ( -/obj/structure/cable, -/obj/structure/closet/secure_closet/contraband/heads, -/obj/item/storage/secure/briefcase, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/customs/fore) "gHI" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/landmark/event_spawn, @@ -27784,11 +27833,6 @@ }, /turf/open/floor/iron, /area/station/security/prison) -"gOH" = ( -/obj/effect/landmark/blobstart, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/plating, -/area/station/maintenance/solars/starboard/fore) "gOR" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -28163,16 +28207,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/medical/cryo) -"gTH" = ( -/obj/machinery/flasher/directional/south{ - id = "Isolation_Cell" - }, -/obj/machinery/light/small/broken/directional/south, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/security/prison/safe) "gTO" = ( /obj/structure/table/wood, /obj/item/crowbar/red, @@ -28342,6 +28376,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/commons/storage/primary) +"gVv" = ( +/obj/machinery/netpod, +/obj/effect/decal/cleanable/robot_debris, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "gVx" = ( /obj/structure/cable, /obj/machinery/door/window/brigdoor/right/directional/south{ @@ -29375,13 +29414,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay) -"hkn" = ( -/obj/structure/disposalpipe/segment, -/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/cargo/miningoffice) "hkt" = ( /obj/effect/spawner/random/engineering/tank, /turf/open/floor/plating, @@ -29847,6 +29879,28 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/wood, /area/station/maintenance/starboard/aft) +"hrz" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/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_large, +/area/station/cargo/bitrunning/den) "hrG" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -30090,14 +30144,6 @@ /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"huS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible, -/obj/effect/spawner/random/engineering/tracking_beacon, -/obj/effect/mapping_helpers/burnt_floor, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/iron, -/area/station/maintenance/department/electrical) "huX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ @@ -30336,6 +30382,13 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron, /area/station/maintenance/department/chapel) +"hxP" = ( +/obj/structure/bed/dogbed/renault, +/obj/machinery/newscaster/directional/south, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/mob/living/basic/pet/fox/renault, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/captain) "hxS" = ( /turf/open/floor/carpet/royalblack, /area/station/service/chapel/office) @@ -30379,6 +30432,20 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"hyR" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/machinery/vending/wardrobe/sec_wardrobe, +/obj/machinery/button/door/directional/east{ + name = "Security Mech Garage Door Controls"; + id = "secmechbay"; + req_access = list("security") + }, +/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/lockers) "hza" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -30399,10 +30466,6 @@ }, /turf/open/floor/glass/reinforced, /area/station/maintenance/department/science/xenobiology) -"hzs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "hzx" = ( /obj/machinery/firealarm/directional/west, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -31277,6 +31340,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) +"hMp" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/port) "hMx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -31395,6 +31465,11 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"hOk" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/lockers) "hOw" = ( /obj/structure/chair/office{ dir = 4 @@ -31608,21 +31683,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron/dark/corner, /area/station/hallway/secondary/exit/departure_lounge) -"hQJ" = ( -/obj/structure/table/wood, -/obj/item/storage/secure/safe/directional/east, -/obj/machinery/computer/security/wooden_tv, -/obj/machinery/light_switch/directional/south{ - pixel_x = 8 - }, -/obj/machinery/button/door/directional/south{ - id = "detectivewindows"; - name = "Privacy Shutters"; - pixel_x = -6; - req_access = list("detective") - }, -/turf/open/floor/carpet, -/area/station/security/detectives_office) "hQK" = ( /obj/structure/reflector/box, /turf/open/floor/plating, @@ -31843,7 +31903,7 @@ /obj/machinery/door/poddoor/shutters/preopen{ dir = 1; id = "corporatelounge"; - name = "Corporate Lounge Shutters" + name = "Conglomeration Lounge Shutters" }, /turf/open/floor/plating, /area/station/command/corporate_showroom) @@ -32095,6 +32155,9 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/department/science) +"hXg" = ( +/turf/closed/wall, +/area/station/cargo/bitrunning/den) "hXi" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -32764,6 +32827,13 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/space, /area/space/nearstation) +"idX" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "iee" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -33024,16 +33094,6 @@ }, /turf/open/floor/plating, /area/station/medical/virology) -"iio" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/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, -/area/station/cargo/miningoffice) "iiy" = ( /obj/structure/easel, /turf/open/floor/iron, @@ -33178,6 +33238,21 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/maintenance/port) +"ikn" = ( +/obj/structure/sign/poster/party_game/directional/west, +/obj/structure/table, +/obj/item/storage/briefcase/secure{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/briefcase{ + pixel_y = -2 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) "ikx" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -33715,6 +33790,18 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"irx" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/iron, +/area/station/maintenance/department/chapel) "irD" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/medical/general, @@ -33854,13 +33941,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/maintenance/port/fore) -"itC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/maintenance/starboard/aft) "itF" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 6 @@ -34283,14 +34363,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) -"izj" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt/dust, -/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/herringbone, -/area/station/cargo/miningoffice) "izo" = ( /obj/structure/table/wood, /obj/item/gavelblock, @@ -34332,6 +34404,14 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/command/heads_quarters/hos) +"izK" = ( +/obj/machinery/door/airlock/mining{ + name = "Mining Dock" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "izM" = ( /obj/structure/closet/crate/trashcart/laundry, /obj/effect/spawner/random/contraband/prison, @@ -34481,11 +34561,6 @@ }, /turf/open/floor/wood, /area/station/medical/psychology) -"iBH" = ( -/obj/structure/table/wood, -/obj/item/paper/fluff/jobs/engineering/frequencies, -/turf/open/floor/iron/grimy, -/area/station/tcommsat/computer) "iBO" = ( /obj/machinery/power/turbine/inlet_compressor, /turf/open/floor/engine, @@ -34876,6 +34951,12 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark, /area/station/command/bridge) +"iGF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible/layer4, +/obj/machinery/air_sensor/engine_chamber, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "iGI" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance_hatch{ @@ -34927,6 +35008,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/holding_cell) +"iHn" = ( +/obj/machinery/computer/mech_bay_power_console{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "iHq" = ( /obj/effect/turf_decal/trimline/neutral/warning{ dir = 10 @@ -34956,6 +35045,15 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"iIb" = ( +/obj/structure/table/reinforced, +/obj/item/folder/red, +/obj/item/storage/briefcase/secure, +/obj/item/book/manual/wiki/security_space_law, +/obj/item/taperecorder, +/obj/effect/turf_decal/tile/red/fourcorners, +/turf/open/floor/iron/dark, +/area/station/security/office) "iId" = ( /obj/effect/turf_decal/siding/yellow, /obj/structure/table/glass, @@ -35744,6 +35842,25 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/medical/coldroom) +"iTM" = ( +/obj/structure/table/reinforced, +/obj/item/stack/sheet/rglass{ + amount = 50; + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/stock_parts/cell/emproof{ + pixel_x = 1; + pixel_y = 3 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/newscaster/directional/east, +/obj/item/mod/module/plasma_stabilizer, +/obj/item/mod/module/thermal_regulator, +/obj/item/mod/module/magboot, +/obj/item/mod/module/signlang_radio, +/turf/open/floor/iron, +/area/station/engineering/storage) "iTW" = ( /obj/structure/closet/emcloset, /obj/effect/decal/cleanable/dirt, @@ -36022,15 +36139,6 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) -"iXd" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/shaft_miner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "iXj" = ( /obj/effect/landmark/start/hangover, /obj/effect/turf_decal/bot, @@ -36100,14 +36208,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron, /area/station/security/checkpoint/escape) -"iXE" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/aisat/exterior) "iXM" = ( /obj/structure/cable, /obj/item/kirbyplants/random, @@ -36287,6 +36387,17 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"jag" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/trimline/white/warning{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/mob/living/simple_animal/hostile/retaliate/goose/vomit, +/turf/open/floor/iron/dark, +/area/station/service/abandoned_gambling_den) "jap" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -36435,20 +36546,6 @@ }, /turf/open/floor/iron, /area/station/commons/locker) -"jbG" = ( -/obj/structure/rack, -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 1 - }, -/obj/item/storage/secure/briefcase{ - pixel_x = 5; - pixel_y = -3 - }, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/security/detectives_office) "jbN" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/white/warning{ @@ -36853,13 +36950,6 @@ /obj/structure/sign/warning/secure_area/directional/west, /turf/open/floor/plating, /area/station/engineering/atmos/mix) -"jfO" = ( -/obj/structure/closet/wardrobe/miner, -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/backpack/satchel/explorer, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "jfP" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37025,6 +37115,7 @@ /obj/effect/turf_decal/trimline/red/filled/warning{ dir = 1 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/lockers) "jhs" = ( @@ -37483,13 +37574,6 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron, /area/station/security/courtroom) -"jnd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/storage) "jni" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/airlock/access/all/science/robotics, @@ -37637,21 +37721,6 @@ /obj/item/clothing/suit/toggle/labcoat, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"joP" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Cargo Maintenance" - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/maintenance/fore) "joU" = ( /obj/structure/table, /obj/item/paper_bin, @@ -38046,6 +38115,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/science/xenobiology) +"juz" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/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/fore) "juF" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -38098,6 +38174,16 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) +"jvp" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/fore) "jvq" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -38314,6 +38400,19 @@ /obj/effect/mapping_helpers/mail_sorting/medbay/chemistry, /turf/open/floor/iron/white, /area/station/medical/medbay) +"jyL" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/junction/yjunction{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + 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/maintenance/fore) "jyP" = ( /obj/effect/turf_decal/siding/dark_blue{ dir = 8 @@ -38352,6 +38451,11 @@ /obj/effect/turf_decal/tile/neutral/full, /turf/open/floor/iron/dark/smooth_large, /area/station/security/evidence) +"jyZ" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "jzb" = ( /obj/machinery/door/poddoor/shutters{ dir = 4; @@ -38567,11 +38671,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/lobby) -"jBM" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "jCb" = ( /obj/machinery/computer/records/security{ dir = 8 @@ -38655,13 +38754,6 @@ /obj/item/pen, /turf/open/floor/wood, /area/station/service/library/abandoned) -"jCu" = ( -/obj/structure/closet/secure_closet/miner, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "jCv" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/hydroponics/constructable, @@ -39309,18 +39401,6 @@ /obj/effect/turf_decal/tile/blue/opposingcorners, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) -"jKY" = ( -/obj/effect/decal/cleanable/oil/streak, -/obj/machinery/camera/directional/south, -/obj/structure/table, -/obj/item/storage/toolbox/mechanical{ - pixel_y = 7 - }, -/obj/item/reagent_containers/cup/soda_cans/space_mountain_wind{ - pixel_x = 5 - }, -/turf/open/floor/iron/dark/smooth_large, -/area/station/bitrunning/den) "jLa" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/railing{ @@ -39903,19 +39983,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay) -"jRc" = ( -/obj/structure/cable, -/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/machinery/power/apc/auto_name/directional/north, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "jRg" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -40100,6 +40167,19 @@ }, /turf/open/floor/iron, /area/station/maintenance/department/eva/abandoned) +"jTH" = ( +/obj/structure/table/glass, +/obj/machinery/status_display/ai/directional/west, +/obj/machinery/newscaster/directional/north, +/obj/effect/turf_decal/siding/dark_red, +/obj/item/storage/box/bandages{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/bottle/morphine, +/obj/item/reagent_containers/syringe, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) "jTI" = ( /obj/structure/table/wood, /obj/machinery/newscaster/directional/north, @@ -40680,6 +40760,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/chapel) +"kbL" = ( +/obj/structure/cable, +/obj/structure/closet/secure_closet/contraband/heads, +/obj/item/storage/briefcase/secure, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/customs/fore) "kbN" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/north, @@ -41658,6 +41748,17 @@ /obj/effect/turf_decal/tile/blue/opposingcorners, /turf/open/floor/iron/white, /area/station/medical/storage) +"knp" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table/reinforced, +/obj/item/cigbutt/cigarbutt, +/obj/item/stack/cable_coil{ + pixel_x = -10; + pixel_y = 7 + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "knu" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/green{ @@ -41850,20 +41951,22 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"kqk" = ( -/obj/structure/table/wood, -/obj/item/storage/secure/briefcase{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/storage/lockbox/medal, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/captain) "kql" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) +"kqJ" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 1 + }, +/obj/effect/landmark/start/shaft_miner, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "kqM" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -42069,6 +42172,17 @@ /obj/structure/cable/layer3, /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai) +"kuj" = ( +/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/mapping_helpers/airlock/access/any/supply/bit_den, +/obj/machinery/door/airlock/mining/glass{ + name = "Bitrunning Den" + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "kun" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -42204,7 +42318,7 @@ "kvF" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ - name = "Corporate Lounge" + name = "Conglomeration Lounge" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ @@ -42501,7 +42615,7 @@ "kzp" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ - name = "Corporate Lounge" + name = "Conglomeration Lounge" }, /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "showroom" @@ -42616,13 +42730,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"kBE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/table/wood, -/obj/item/radio/intercom/command, -/obj/item/paper/fluff/jobs/engineering/frequencies, -/turf/open/floor/carpet, -/area/station/command/meeting_room/council) "kBH" = ( /obj/machinery/status_display/evac/directional/west, /obj/machinery/chem_master, @@ -42766,15 +42873,6 @@ /obj/structure/chair/pew/right, /turf/open/floor/iron/chapel, /area/station/service/chapel) -"kDv" = ( -/obj/structure/bed/dogbed/runtime, -/obj/item/radio/intercom/directional/south, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/mob/living/simple_animal/pet/cat/runtime, -/turf/open/floor/iron, -/area/station/command/heads_quarters/cmo) "kDB" = ( /obj/structure/plasticflaps/opaque, /obj/machinery/navbeacon{ @@ -43218,15 +43316,6 @@ /obj/structure/sign/warning/pods, /turf/closed/wall, /area/station/hallway/secondary/entry) -"kKx" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/station/cargo/miningoffice) "kKy" = ( /obj/machinery/airalarm/directional/east, /obj/machinery/rnd/production/techfab/department/medical, @@ -43325,6 +43414,22 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"kLA" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/landmark/start/bitrunner, +/turf/open/floor/iron/half{ + dir = 1 + }, +/area/station/cargo/miningoffice) "kLI" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm/directional/north{ @@ -43588,6 +43693,15 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/commons/locker) +"kPM" = ( +/obj/structure/table/wood, +/obj/item/storage/briefcase{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/briefcase/secure, +/turf/open/floor/wood, +/area/station/command/meeting_room/council) "kPQ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -43853,18 +43967,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/engineering/main) -"kTs" = ( -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 1 - }, -/obj/effect/landmark/start/shaft_miner, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "kTy" = ( /obj/structure/chair/office{ dir = 8 @@ -43914,6 +44016,18 @@ }, /turf/open/floor/iron, /area/station/maintenance/port) +"kUj" = ( +/obj/effect/decal/cleanable/oil/streak, +/obj/structure/table, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 7 + }, +/obj/item/reagent_containers/cup/soda_cans/space_mountain_wind{ + pixel_x = 5 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark/smooth_large, +/area/station/cargo/bitrunning/den) "kUn" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/brown{ @@ -44000,15 +44114,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"kVw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red/fourcorners, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/iron, -/area/station/service/kitchen/abandoned) "kVx" = ( /obj/machinery/door/airlock/highsecurity{ name = "Emergency Access" @@ -44359,6 +44464,26 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) +"lab" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/item/folder/yellow{ + pixel_x = -6 + }, +/obj/item/pen{ + pixel_x = -6 + }, +/obj/machinery/door/window/left/directional/south{ + dir = 1; + req_access = list("cargo"); + name = "Office Desk" + }, +/obj/effect/turf_decal/delivery, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "lac" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/bot/left, @@ -44778,22 +44903,6 @@ /mob/living/carbon/human/species/monkey, /turf/open/floor/engine, /area/station/science/genetics) -"lfC" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = 4 - }, -/obj/item/storage/toolbox/mechanical, -/obj/item/storage/belt/utility, -/turf/open/floor/iron, -/area/station/cargo/storage) "lfD" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/siding/dark_red{ @@ -44899,7 +45008,7 @@ pixel_x = 7 }, /obj/item/phone{ - desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; + desc = "Supposedly a direct line to Symphionia Conglomeration of Colonists. It's not even plugged in."; pixel_x = -3; pixel_y = 3 }, @@ -45169,15 +45278,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/iron, /area/station/maintenance/solars/starboard/fore) -"ljQ" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "ljS" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -45212,7 +45312,7 @@ /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ id = "corporatelounge"; - name = "Corporate Lounge Shutters" + name = "Conglomeration Lounge Shutters" }, /obj/structure/cable, /turf/open/floor/plating, @@ -45317,16 +45417,6 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"llj" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/herringbone, -/area/station/cargo/miningoffice) "llm" = ( /obj/structure/chair/office/tactical{ dir = 8 @@ -45428,22 +45518,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"lmI" = ( -/obj/structure/table/glass, -/obj/machinery/computer/records/medical/laptop, -/obj/item/storage/secure/safe/directional/north, -/obj/item/radio/intercom/directional/east, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/machinery/camera/directional/north{ - c_tag = "Medbay - Chief Medical Officer's Quarters"; - name = "medbay camera"; - network = list("ss13","medbay") - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron, -/area/station/command/heads_quarters/cmo) "lmJ" = ( /obj/structure/closet/firecloset, /obj/effect/turf_decal/bot, @@ -45479,6 +45553,16 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/engineering/atmos/storage/gas) +"lni" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/department/chapel) "lnm" = ( /obj/structure/closet/secure_closet/captains, /obj/effect/turf_decal/stripes/line{ @@ -45786,6 +45870,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"lrK" = ( +/obj/structure/table, +/obj/item/storage/briefcase/secure, +/obj/machinery/firealarm/directional/north, +/obj/item/clothing/neck/stethoscope, +/obj/item/flashlight/pen, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron, +/area/station/command/heads_quarters/cmo) "lrO" = ( /obj/machinery/status_display/ai/directional/south, /obj/machinery/camera/directional/south{ @@ -45854,16 +45947,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/department/science) -"ltg" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/plating, -/area/station/maintenance/department/chapel) "ltr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -46316,8 +46399,19 @@ dir = 1 }, /obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/lockers) +"lyx" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/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, +/area/station/cargo/miningoffice) "lyE" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -46723,6 +46817,17 @@ }, /turf/open/floor/iron/dark, /area/station/command/corporate_showroom) +"lDu" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table, +/obj/machinery/microwave{ + desc = "Cooks and boils stuff, somehow."; + pixel_x = -3; + pixel_y = 5 + }, +/obj/structure/sign/poster/official/random/directional/west, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "lDI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -47289,6 +47394,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) +"lJw" = ( +/obj/machinery/computer/quantum_console, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron/dark/smooth_corner, +/area/station/cargo/bitrunning/den) "lJB" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/west, @@ -47501,17 +47611,6 @@ /obj/effect/mapping_helpers/apc/cell_10k, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"lLW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/rack, -/obj/item/storage/secure/briefcase, -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/turf/open/floor/plating, -/area/station/security/detectives_office/private_investigators_office) "lLY" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 4 @@ -47666,12 +47765,6 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/carpet/blue, /area/station/commons/vacant_room/office) -"lNN" = ( -/obj/structure/bed/dogbed/mcgriff, -/obj/effect/turf_decal/tile/red/anticorner/contrasted, -/mob/living/basic/pet/dog/pug/mcgriff, -/turf/open/floor/iron, -/area/station/security/warden) "lNZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -47800,6 +47893,8 @@ /obj/effect/turf_decal/trimline/red/filled/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/security/lockers) "lPM" = ( @@ -48125,12 +48220,6 @@ /obj/effect/turf_decal/tile/neutral/full, /turf/open/floor/iron/large, /area/station/medical/paramedic) -"lUW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/red/fourcorners, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/iron, -/area/station/service/kitchen/abandoned) "lVi" = ( /obj/structure/closet/l3closet/virology, /obj/effect/turf_decal/bot, @@ -48581,11 +48670,6 @@ dir = 4 }, /area/station/hallway/secondary/entry) -"mcF" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/space, -/area/space/nearstation) "mcG" = ( /obj/machinery/button/door/directional/east{ id = "Dorm6"; @@ -48665,6 +48749,8 @@ /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, /area/station/security/lockers) "mdB" = ( @@ -49090,6 +49176,27 @@ "mjz" = ( /turf/closed/wall, /area/station/maintenance/starboard/lesser) +"mjH" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/item/folder/yellow{ + pixel_x = -6 + }, +/obj/item/pen{ + pixel_x = -6 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/window/right/directional/south{ + name = "Delivery Office Desk"; + req_access = list("shipping") + }, +/obj/structure/desk_bell{ + pixel_x = 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/cargo/sorting) "mjK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/trimline/green/filled/corner{ @@ -49167,6 +49274,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/station/service/theater) +"mlv" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/sorting) "mlw" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -49197,11 +49311,6 @@ "mlE" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/command/storage/eva) -"mlF" = ( -/obj/machinery/computer/quantum_console, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron/dark/smooth_corner, -/area/station/bitrunning/den) "mlM" = ( /obj/structure/table/wood, /obj/machinery/computer/records/medical/laptop, @@ -49275,16 +49384,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/space/basic, /area/space/nearstation) -"mmA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/obj/machinery/duct, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/mob/living/basic/cockroach, -/turf/open/floor/iron, -/area/station/medical/abandoned) "mmM" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, @@ -49748,11 +49847,6 @@ /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage) -"mtL" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/status_display/evac/directional/north, -/turf/open/floor/plating, -/area/station/cargo/miningoffice) "mtO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/yellow{ @@ -49996,6 +50090,19 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"mwM" = ( +/obj/structure/cable, +/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/machinery/power/apc/auto_name/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "mwR" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/medical/general, @@ -50506,13 +50613,6 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) -"mDm" = ( -/obj/machinery/quantum_server, -/obj/effect/turf_decal/bot/left, -/turf/open/floor/iron/dark/smooth_corner{ - dir = 4 - }, -/area/station/bitrunning/den) "mDo" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -50657,6 +50757,19 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron, /area/station/maintenance/department/security) +"mEv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "mEx" = ( /obj/structure/table/reinforced, /obj/item/clothing/suit/hazardvest, @@ -51458,17 +51571,6 @@ /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) -"mOh" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/trimline/white/warning{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/mob/living/simple_animal/hostile/retaliate/goose/vomit, -/turf/open/floor/iron/dark, -/area/station/service/abandoned_gambling_den) "mOo" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple, /turf/open/floor/circuit/green/telecomms/mainframe, @@ -51849,11 +51951,6 @@ "mTA" = ( /turf/closed/wall/r_wall, /area/station/security/holding_cell) -"mTB" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/space, -/area/space/nearstation) "mTT" = ( /obj/machinery/holopad, /obj/structure/cable, @@ -52026,6 +52123,12 @@ /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, /area/station/engineering/supermatter) +"mWs" = ( +/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/fore) "mWy" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/disposalpipe/segment, @@ -52596,17 +52699,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"neT" = ( -/obj/effect/turf_decal/trimline/neutral/mid_joiner{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/item/surgery_tray/full/morgue, -/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "nfd" = ( /obj/machinery/portable_atmospherics/canister/plasma, /turf/open/floor/engine/plasma, @@ -52745,17 +52837,6 @@ /obj/effect/spawner/random/trash/hobo_squat, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"nhj" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/table, -/obj/machinery/microwave{ - desc = "Cooks and boils stuff, somehow."; - pixel_x = -3; - pixel_y = 5 - }, -/obj/structure/sign/poster/official/random/directional/west, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "nhm" = ( /turf/closed/wall/r_wall, /area/station/maintenance/starboard/lesser) @@ -52886,16 +52967,6 @@ /obj/effect/turf_decal/tile/neutral/full, /turf/open/floor/iron/dark/smooth_large, /area/station/service/chapel/funeral) -"niL" = ( -/obj/structure/rack, -/obj/item/storage/secure/briefcase, -/obj/machinery/status_display/ai/directional/south, -/obj/effect/turf_decal/bot, -/obj/item/reagent_containers/pill/patch/aiuri, -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "niN" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/carpet/blue, @@ -53024,6 +53095,22 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"nkO" = ( +/obj/structure/cable, +/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/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) "nkU" = ( /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, @@ -53525,7 +53612,12 @@ }, /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible/layer4, -/obj/structure/sign/warning/secure_area/directional/west, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/engine_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "engine" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron, /area/station/engineering/supermatter/room) "nsd" = ( @@ -53643,12 +53735,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"ntU" = ( -/obj/structure/table/reinforced, -/obj/machinery/microwave/engineering/cell_included, -/obj/structure/sign/poster/random/directional/west, -/turf/open/floor/wood, -/area/station/engineering/break_room) "ntX" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -54357,6 +54443,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/breakroom) +"nCY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/sorting) "nDk" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/conveyor{ @@ -54476,12 +54569,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/maintenance/port) -"nEE" = ( -/obj/machinery/netpod, -/obj/structure/sign/poster/random/directional/north, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) "nEJ" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/yellow/line, @@ -54496,6 +54583,9 @@ /obj/structure/sign/warning/electric_shock/directional/east, /turf/open/space/basic, /area/space) +"nEZ" = ( +/turf/closed/wall/r_wall, +/area/station/security/mechbay) "nFb" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/generic_maintenance_landmark, @@ -54584,6 +54674,19 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) +"nGO" = ( +/obj/structure/table/wood, +/obj/machinery/newscaster/directional/east, +/obj/item/storage/briefcase/secure, +/obj/item/book/manual/wiki/security_space_law, +/obj/item/taperecorder{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hos) "nGS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -54872,18 +54975,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"nJF" = ( -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall12"; - location = "hall11" - }, -/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/fourcorners, -/mob/living/simple_animal/bot/secbot/beepsky/officer, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "nJK" = ( /obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_ordmix{ dir = 1 @@ -55038,6 +55129,15 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"nMi" = ( +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/half{ + dir = 1 + }, +/area/station/cargo/miningoffice) "nMp" = ( /obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible, /obj/machinery/meter, @@ -55391,7 +55491,7 @@ /obj/machinery/door/poddoor/shutters/preopen{ dir = 1; id = "corporatelounge"; - name = "Corporate Lounge Shutters" + name = "Conglomeration Lounge Shutters" }, /obj/structure/cable, /turf/open/floor/plating, @@ -55636,6 +55736,22 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/chapel/funeral) +"nUo" = ( +/obj/effect/landmark/start/hangover/closet, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/personal, +/obj/effect/spawner/random/food_or_drink/cups, +/obj/item/storage/briefcase/secure, +/obj/effect/turf_decal/bot, +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/vacant_room) "nUp" = ( /turf/closed/wall/r_wall, /area/station/engineering/gravity_generator) @@ -55865,6 +55981,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"nXR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/rack, +/obj/item/storage/briefcase/secure, +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/turf/open/floor/plating, +/area/station/security/detectives_office/private_investigators_office) "nXY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -56113,6 +56240,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/service/hydroponics/garden) +"obB" = ( +/obj/machinery/status_display/evac/directional/west, +/obj/structure/filingcabinet/chestdrawer, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/newscaster/directional/north, +/mob/living/basic/parrot/poly, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "obI" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 4 @@ -56154,6 +56289,15 @@ }, /turf/open/floor/plating, /area/station/science/robotics/mechbay) +"occ" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/computer/order_console/mining, +/obj/item/radio/intercom/directional/west, +/obj/machinery/firealarm/directional/west{ + pixel_y = -9 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "ocd" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/flora/bush/flowers_yw/style_random, @@ -56554,7 +56698,7 @@ /obj/structure/table/wood, /obj/structure/cable, /obj/item/phone{ - desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; + desc = "Supposedly a direct line to Symphionia Conglomeration of Colonists. It's not even plugged in."; pixel_x = -3; pixel_y = 3 }, @@ -56635,16 +56779,6 @@ /obj/structure/sign/poster/official/science/directional/north, /turf/open/floor/plating, /area/station/maintenance/space_hut/observatory) -"oit" = ( -/obj/structure/table/wood, -/obj/machinery/light/directional/north, -/obj/item/storage/secure/safe/directional/east, -/obj/item/storage/lockbox/loyalty, -/obj/item/storage/backpack/satchel/leather/withwallet{ - pixel_y = 6 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hop) "oiC" = ( /obj/machinery/computer/records/security{ dir = 8 @@ -56848,24 +56982,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/security/prison/garden) -"okN" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 8 - }, -/obj/effect/decal/cleanable/generic, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/landmark/start/bitrunner, -/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_large, -/area/station/bitrunning/den) "okV" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/plumbed{ @@ -57130,12 +57246,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) -"onA" = ( -/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/fore) "onK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -57397,6 +57507,22 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) +"orQ" = ( +/obj/structure/table/glass, +/obj/machinery/computer/records/medical/laptop, +/obj/structure/secure_safe/directional/north, +/obj/item/radio/intercom/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Medbay - Chief Medical Officer's Quarters"; + name = "medbay camera"; + network = list("ss13","medbay") + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron, +/area/station/command/heads_quarters/cmo) "orR" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -57575,6 +57701,15 @@ /obj/machinery/light/small/red/directional/north, /turf/open/floor/iron/dark/smooth_large, /area/station/service/chapel/funeral) +"ove" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/iron, +/area/station/service/kitchen/abandoned) "ovf" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -57676,6 +57811,14 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/command/teleporter) +"own" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/iron, +/area/station/maintenance/department/electrical) "owu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -57716,8 +57859,12 @@ }, /obj/machinery/airalarm/directional/west, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnanceburn" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/dark, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "owY" = ( /obj/structure/table/reinforced, /obj/item/stack/sheet/iron{ @@ -57731,13 +57878,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/port) -"owZ" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/table, -/obj/item/storage/medkit/regular, -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "oxb" = ( /obj/machinery/duct, /obj/effect/turf_decal/siding/white, @@ -57981,28 +58121,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/captain/private) -"oAV" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/corner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt/dust, -/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_large, -/area/station/bitrunning/den) "oAW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -58188,6 +58306,12 @@ "oDE" = ( /turf/closed/wall, /area/station/medical/cryo) +"oDJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/delivery, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/iron, +/area/station/science/research/abandoned) "oDR" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -58308,14 +58432,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/department/medical/morgue) -"oFk" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/steam_vent, -/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/fore) "oFr" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -58612,6 +58728,14 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/security/evidence) +"oKn" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/mob/living/basic/cockroach, +/turf/open/floor/iron/dark, +/area/station/service/abandoned_gambling_den) "oKr" = ( /turf/closed/wall, /area/station/security/checkpoint/supply) @@ -58892,6 +59016,11 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"oNE" = ( +/obj/effect/landmark/blobstart, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) "oNF" = ( /obj/effect/turf_decal/siding/blue, /obj/effect/turf_decal/tile/blue/opposingcorners, @@ -59627,6 +59756,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/hos) +"oYr" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "oYs" = ( /turf/closed/wall, /area/station/maintenance/port/fore) @@ -59709,16 +59847,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/service/abandoned_gambling_den) -"pal" = ( -/obj/structure/rack, -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/storage/secure/briefcase, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/wood, -/area/station/service/lawoffice) "paq" = ( /obj/effect/landmark/start/hangover, /turf/open/floor/wood, @@ -60189,6 +60317,13 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"pfs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "pfA" = ( /obj/structure/table/reinforced, /obj/item/assembly/timer, @@ -60241,6 +60376,16 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"pgs" = ( +/obj/structure/table/wood, +/obj/machinery/light/directional/north, +/obj/structure/secure_safe/directional/east, +/obj/item/storage/lockbox/loyalty, +/obj/item/storage/backpack/satchel/leather/withwallet{ + pixel_y = 6 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) "pgv" = ( /obj/machinery/teleport/station, /obj/machinery/status_display/evac/directional/east, @@ -60331,6 +60476,23 @@ /obj/machinery/newscaster/directional/south, /turf/open/floor/iron, /area/station/engineering/supermatter/room) +"pgZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/button/door/directional/north{ + id = "secmechbay"; + name = "Security Mech Garage Door Controls"; + req_access = list("security") + }, +/obj/effect/turf_decal/trimline/dark_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, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "phn" = ( /obj/structure/cable, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -60424,6 +60586,7 @@ /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/lockers) "phX" = ( @@ -61216,16 +61379,6 @@ /obj/structure/cable, /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai_upload) -"ptA" = ( -/obj/structure/cable, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/delivery, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/item/mod/module/tether, -/obj/item/mod/module/tether, -/obj/item/stack/sheet/plasteel/fifty, -/turf/open/floor/iron, -/area/station/engineering/storage) "ptC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61286,6 +61439,13 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"put" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) "puJ" = ( /obj/machinery/suit_storage_unit/standard_unit, /obj/effect/turf_decal/delivery, @@ -61568,21 +61728,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) -"pxS" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/landmark/start/bitrunner, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/station/cargo/miningoffice) "pxT" = ( /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, @@ -61776,6 +61921,15 @@ }, /turf/open/floor/iron, /area/station/service/kitchen/abandoned) +"pAa" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/shaft_miner, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "pAd" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -61950,10 +62104,29 @@ }, /turf/open/floor/wood, /area/station/service/lawoffice) +"pBN" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "pBY" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/service/abandoned_gambling_den) +"pCr" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + id = "chemisttop"; + name = "Pharmacy Shutters" + }, +/obj/machinery/smartfridge/chemistry/preloaded, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) "pCy" = ( /obj/structure/table, /obj/item/clipboard, @@ -62048,13 +62221,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"pDy" = ( -/obj/machinery/cryo_cell{ - dir = 8 +"pDz" = ( +/obj/machinery/quantum_server, +/obj/effect/turf_decal/bot/left, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 4 }, -/obj/machinery/status_display/ai/directional/south, -/turf/open/floor/iron/dark/textured_large, -/area/station/medical/cryo) +/area/station/cargo/bitrunning/den) "pDE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -62408,6 +62581,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"pGR" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/herringbone, +/area/station/cargo/miningoffice) "pHa" = ( /obj/structure/lattice, /obj/structure/sign/warning/directional/west, @@ -63244,13 +63421,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/medical/cryo) -"pQR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/wood, -/obj/item/storage/secure/briefcase, -/obj/item/grenade/smokebomb, -/turf/open/floor/wood, -/area/station/maintenance/starboard/aft) "pQT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -63284,13 +63454,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"pRp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "pRy" = ( /obj/effect/turf_decal/siding/green, /obj/structure/window/reinforced/spawner/directional/south, @@ -63498,39 +63661,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/hos) -"pTz" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/structure/desk_bell{ - pixel_x = 7; - pixel_y = 6 - }, -/obj/item/folder/yellow{ - pixel_x = -3; - pixel_y = -6 - }, -/obj/item/pen{ - pixel_x = -3; - pixel_y = -2 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - id = "chemisttop"; - name = "Pharmacy Shutters" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/door/window/left/directional/west{ - name = "Pharmacy Desk"; - req_access = list("pharmacy"); - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/medical/pharmacy) "pTB" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -63651,17 +63781,6 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/pumproom) -"pUs" = ( -/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/mapping_helpers/airlock/access/any/supply/bit_den, -/obj/machinery/door/airlock/mining/glass{ - name = "Bitrunning Den" - }, -/turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) "pUw" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -64094,6 +64213,17 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/port) +"pZf" = ( +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/machinery/status_display/door_timer{ + id = "Isolation_Cell"; + name = "Isolation Cell"; + pixel_x = -32 + }, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "pZi" = ( /obj/structure/training_machine, /obj/item/target/alien, @@ -64250,6 +64380,21 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron, /area/station/commons/toilet/locker) +"qbd" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/landmark/start/bitrunner, +/turf/open/floor/iron/half{ + dir = 1 + }, +/area/station/cargo/miningoffice) "qbg" = ( /obj/machinery/duct, /obj/structure/disposalpipe/segment{ @@ -64674,6 +64819,20 @@ }, /turf/open/floor/wood/tile, /area/station/service/library/artgallery) +"qhq" = ( +/obj/structure/rack, +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 1 + }, +/obj/item/storage/briefcase/secure{ + pixel_x = 5; + pixel_y = -3 + }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/security/detectives_office) "qhA" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -64881,18 +65040,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/bridge) -"qko" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/machinery/light/directional/west, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/sign/poster/official/random/directional/west, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/station/cargo/miningoffice) "qkv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -65049,21 +65196,6 @@ }, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"qmT" = ( -/obj/structure/cable, -/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/effect/turf_decal/tile/brown/half/contrasted{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) "qnc" = ( /obj/machinery/firealarm/directional/south, /obj/effect/turf_decal/tile/blue{ @@ -65235,6 +65367,14 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) +"qpd" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "qpg" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -65491,22 +65631,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/science/xenobiology) -"qsF" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/line, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 1 - }, -/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/dark/textured_large, -/area/station/bitrunning/den) "qsN" = ( /obj/structure/chair{ dir = 4 @@ -65586,6 +65710,21 @@ /obj/effect/turf_decal/tile/neutral/full, /turf/open/floor/iron/dark/smooth_large, /area/station/security/detectives_office) +"quh" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/line, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "qul" = ( /obj/structure/chair/stool/bar/directional/south, /turf/open/floor/wood, @@ -66328,6 +66467,17 @@ /obj/item/circuitboard/machine/chem_master, /turf/open/floor/iron/grimy, /area/station/maintenance/port/fore) +"qDw" = ( +/obj/structure/table, +/obj/item/mod/module/plasma_stabilizer, +/obj/item/mod/module/thermal_regulator, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/obj/item/radio/intercom/directional/south, +/obj/item/mod/module/signlang_radio, +/turf/open/floor/iron/dark, +/area/station/security/office) "qDI" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -67415,6 +67565,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/fore) +"qQy" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/flashlight/lamp, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "qQE" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/iron, @@ -67678,6 +67836,27 @@ /obj/item/shovel/spade, /turf/open/floor/iron/dark, /area/station/service/hydroponics/garden/abandoned) +"qVa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/newscaster/directional/east, +/obj/effect/spawner/random/structure/table_fancy, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + desc = "Whatever it is, it reeks of foul, putrid froth."; + list_reagents = list(/datum/reagent/consumable/ethanol/bacchus_blessing = 15); + name = "Delta-Down"; + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = -3; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = -6; + pixel_y = 3 + }, +/turf/open/floor/wood, +/area/station/commons/dorms) "qVf" = ( /obj/structure/chair, /obj/effect/decal/cleanable/blood/splatter, @@ -68421,13 +68600,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"rgC" = ( -/obj/structure/table/reinforced, -/obj/item/folder/yellow, -/obj/item/gps/mining, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "rgG" = ( /obj/structure/closet/secure_closet/engineering_personal, /obj/effect/decal/cleanable/dirt, @@ -68570,6 +68742,19 @@ }, /turf/open/floor/iron, /area/station/medical/virology) +"rid" = ( +/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, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "riq" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/grille/broken, @@ -68637,16 +68822,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/white, /area/station/medical/medbay) -"riZ" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - id = "chemisttop"; - name = "Pharmacy Shutters" - }, -/obj/machinery/smartfridge/chemistry/preloaded, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) "rjd" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green, @@ -69003,7 +69178,7 @@ "rme" = ( /obj/structure/table/wood, /obj/item/phone{ - desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; + desc = "Supposedly a direct line to Symphionia Conglomeration of Colonists. It's not even plugged in."; pixel_x = -3; pixel_y = 3 }, @@ -69061,19 +69236,6 @@ /obj/machinery/light/dim/directional/east, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) -"rmH" = ( -/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, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "rmI" = ( /obj/structure/table/reinforced, /obj/item/electronics/apc, @@ -69258,7 +69420,7 @@ /area/station/medical/cryo) "roI" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/floor/iron, /area/station/maintenance/department/medical/morgue) "roX" = ( @@ -69353,14 +69515,6 @@ }, /turf/open/floor/iron, /area/station/science/xenobiology) -"rqN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/plating, -/area/station/maintenance/port) "rqV" = ( /obj/machinery/dna_infuser, /obj/item/infuser_book, @@ -69748,6 +69902,19 @@ }, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) +"rwF" = ( +/obj/structure/table/wood, +/obj/structure/secure_safe/hos{ + pixel_x = 32 + }, +/obj/machinery/light_switch/directional/north, +/obj/effect/turf_decal/siding/dark_red{ + dir = 6 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/item/flashlight/lamp/green, +/turf/open/floor/iron, +/area/station/command/heads_quarters/hos) "rwM" = ( /obj/structure/table/wood, /obj/item/paper_bin/construction{ @@ -70053,16 +70220,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/cargo/storage) -"rAl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/conveyor{ - id = "cargodisposals" - }, -/turf/open/floor/plating, -/area/station/cargo/sorting) "rAm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -70376,6 +70533,14 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) +"rFg" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/steam_vent, +/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/fore) "rFm" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/bed/medical/emergency, @@ -70871,6 +71036,22 @@ /obj/effect/turf_decal/tile/neutral/full, /turf/open/floor/iron/large, /area/station/hallway/secondary/exit/departure_lounge) +"rLB" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/item/storage/box/bandages{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/storage/toolbox/mechanical, +/obj/item/storage/belt/utility, +/turf/open/floor/iron, +/area/station/cargo/storage) "rLL" = ( /obj/structure/filingcabinet/chestdrawer, /obj/machinery/newscaster/directional/north, @@ -70912,6 +71093,21 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos) +"rMj" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Cargo Maintenance" + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/maintenance/fore) "rMn" = ( /obj/structure/table/wood, /obj/effect/spawner/random/techstorage/arcade_boards, @@ -71176,6 +71372,14 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/research) +"rPb" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "rPc" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -71218,6 +71422,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"rPi" = ( +/obj/structure/disposalpipe/segment, +/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/cargo/miningoffice) "rPj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, @@ -71361,11 +71572,6 @@ /obj/structure/mirror/directional/west, /turf/open/floor/wood, /area/station/maintenance/port/aft) -"rQF" = ( -/obj/machinery/netpod, -/obj/effect/decal/cleanable/robot_debris, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) "rQI" = ( /obj/machinery/airlock_sensor/incinerator_atmos{ pixel_x = 24 @@ -71600,6 +71806,9 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/cargo/lobby) +"rTB" = ( +/turf/open/floor/iron, +/area/station/cargo/storage) "rTG" = ( /obj/structure/cable, /obj/structure/disposalpipe/sorting/mail{ @@ -71667,14 +71876,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/xenobiology) -"rUi" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "rUj" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -71724,16 +71925,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/fore) -"rUV" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - 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/maintenance/fore) "rUW" = ( /obj/item/kirbyplants/organic/plant21, /obj/effect/turf_decal/stripes/line{ @@ -71823,8 +72014,6 @@ /turf/open/floor/iron/white, /area/station/science/research) "rVM" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/engine_access, /turf/open/floor/engine, /area/station/engineering/supermatter) "rVX" = ( @@ -72020,6 +72209,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/engineering/atmos) +"rYp" = ( +/obj/structure/closet/secure_closet/miner, +/obj/effect/turf_decal/delivery, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "rYA" = ( /turf/closed/wall, /area/station/maintenance/department/security) @@ -72356,18 +72551,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/chapel) -"scv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/machinery/camera/directional/east{ - c_tag = "Cargo Bay - Delivery Office"; - name = "cargo camera" - }, -/obj/effect/turf_decal/tile/brown, -/obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/sorting) "scy" = ( /obj/machinery/atmospherics/components/trinary/mixer{ dir = 4 @@ -72525,6 +72708,21 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"seX" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "sfc" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -72675,15 +72873,6 @@ }, /turf/open/space/basic, /area/space) -"sgK" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "sgZ" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -73380,13 +73569,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) -"sqW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/sorting) "sqX" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -73562,10 +73744,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/medical/pharmacy) -"stf" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/herringbone, -/area/station/cargo/miningoffice) "stp" = ( /obj/machinery/airalarm/directional/west, /obj/effect/turf_decal/trimline/brown/filled/line{ @@ -73871,7 +74049,7 @@ /area/station/commons/fitness/recreation) "swR" = ( /obj/item/phone{ - desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; + desc = "Supposedly a direct line to Symphionia Conglomeration of Colonists. It's not even plugged in."; pixel_x = -3; pixel_y = 3 }, @@ -74047,6 +74225,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"syW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/conveyor{ + id = "cargodisposals" + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "sze" = ( /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) @@ -74208,6 +74396,14 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/maintenance/department/medical/morgue) +"sAL" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "sAU" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -74374,23 +74570,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/half, /area/station/service/hydroponics) -"sCW" = ( -/obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/mining/glass{ - name = "Delivery Office" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining, -/obj/effect/mapping_helpers/airlock/access/any/supply/shipping, -/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/turf/open/floor/iron, -/area/station/cargo/sorting) "sCY" = ( /obj/structure/cable, /obj/machinery/power/tracker, @@ -75074,9 +75253,6 @@ /obj/structure/sign/poster/official/build/directional/north, /turf/open/floor/iron, /area/station/science/robotics/mechbay) -"sLg" = ( -/turf/open/floor/iron, -/area/station/cargo/storage) "sLx" = ( /obj/effect/decal/cleanable/generic, /turf/open/floor/iron/grimy, @@ -75163,6 +75339,16 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"sMG" = ( +/obj/machinery/flasher/directional/south{ + id = "Isolation_Cell" + }, +/obj/machinery/light/small/broken/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/security/prison/safe) "sMN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -75244,18 +75430,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/engineering/main) -"sNP" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/iron, -/area/station/maintenance/department/chapel) "sOi" = ( /obj/machinery/portable_atmospherics/pump, /obj/effect/turf_decal/bot, @@ -75270,6 +75444,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/abandoned_gambling_den/gaming) +"sOp" = ( +/obj/structure/table/glass, +/obj/item/surgery_tray/full, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/suit/apron/surgical, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/medical/surgery/theatre) "sOs" = ( /obj/structure/chair/pew/left, /turf/open/floor/iron/chapel{ @@ -75363,6 +75546,16 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"sQi" = ( +/obj/structure/table/wood, +/obj/item/storage/briefcase{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/briefcase/secure, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/turf/open/floor/iron, +/area/station/security/courtroom) "sQn" = ( /obj/machinery/vending/clothing, /obj/effect/turf_decal/bot, @@ -75592,12 +75785,6 @@ /obj/effect/spawner/random/trash/graffiti, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"sSx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/iron, -/area/station/science/research/abandoned) "sSH" = ( /obj/effect/turf_decal/tile/green/half/contrasted{ dir = 8 @@ -75650,6 +75837,14 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) +"sTu" = ( +/obj/structure/rack, +/obj/item/aicard, +/obj/item/storage/briefcase/secure, +/obj/machinery/status_display/evac/directional/south, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "sTv" = ( /obj/machinery/status_display/evac/directional/north, /obj/structure/cable, @@ -76071,6 +76266,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/ordnance/office) +"sYn" = ( +/obj/machinery/netpod, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "sYw" = ( /obj/effect/landmark/start/hangover, /obj/effect/landmark/event_spawn, @@ -76308,6 +76508,7 @@ /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/lockers) "tch" = ( @@ -76348,14 +76549,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/engineering/supermatter/room) -"tcB" = ( -/obj/machinery/door/airlock/mining{ - name = "Mining Dock" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "tcG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -76573,6 +76766,13 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"tfJ" = ( +/obj/machinery/cryo_cell{ + dir = 8 + }, +/obj/machinery/status_display/ai/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/station/medical/cryo) "tfK" = ( /obj/item/kirbyplants/random, /obj/machinery/status_display/evac/directional/east, @@ -76585,12 +76785,6 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron/white, /area/station/medical/paramedic) -"tfO" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/space, -/area/space/nearstation) "tgl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -76742,22 +76936,6 @@ /obj/effect/turf_decal/trimline/green/filled/corner, /turf/open/floor/iron/white, /area/station/medical/virology) -"thZ" = ( -/obj/machinery/status_display/evac/directional/west, -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/newscaster/directional/north, -/mob/living/simple_animal/parrot/poly, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) -"tip" = ( -/obj/structure/rack, -/obj/item/aicard, -/obj/item/storage/secure/briefcase, -/obj/machinery/status_display/evac/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "tiC" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 5 @@ -76798,6 +76976,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/cargo/storage) +"tjo" = ( +/obj/machinery/light/directional/south, +/obj/machinery/byteforge, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark/smooth_large, +/area/station/cargo/bitrunning/den) "tjp" = ( /obj/structure/table/reinforced, /obj/item/storage/toolbox/mechanical, @@ -77056,13 +77240,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) -"toy" = ( -/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/herringbone, -/area/station/cargo/miningoffice) "toB" = ( /obj/machinery/light/directional/west, /obj/effect/turf_decal/stripes/line{ @@ -77237,6 +77414,11 @@ "tqo" = ( /turf/closed/wall, /area/station/engineering/main) +"tqr" = ( +/obj/item/kirbyplants/random, +/obj/structure/secure_safe/directional/east, +/turf/open/floor/iron/grimy, +/area/station/command/heads_quarters/captain/private) "tqw" = ( /obj/effect/turf_decal/bot, /obj/machinery/vending/wardrobe/medi_wardrobe, @@ -77400,14 +77582,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"tsx" = ( -/obj/structure/table/glass, -/obj/item/surgery_tray/full, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/suit/apron/surgical, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/medical/surgery/theatre) "tsz" = ( /turf/open/floor/plating, /area/station/service/abandoned_gambling_den/gaming) @@ -77418,25 +77592,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/engineering/atmos/mix) -"tsG" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/item/folder/yellow{ - pixel_x = -6 - }, -/obj/item/pen{ - pixel_x = -6 - }, -/obj/machinery/door/window/left/directional/south{ - dir = 1; - req_access = list("cargo") - }, -/obj/effect/turf_decal/delivery, -/obj/structure/desk_bell{ - pixel_x = 7 - }, -/turf/open/floor/iron, -/area/station/cargo/office) "tsJ" = ( /obj/structure/table/reinforced, /obj/item/clothing/gloves/color/black, @@ -77635,6 +77790,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/xenobiology) +"tum" = ( +/obj/structure/cable, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/delivery, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/item/mod/module/tether, +/obj/item/mod/module/tether, +/obj/item/stack/sheet/plasteel/fifty, +/turf/open/floor/iron, +/area/station/engineering/storage) "tup" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Theater Maintenance" @@ -78572,25 +78737,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"tGm" = ( -/obj/structure/table/reinforced, -/obj/item/stack/sheet/rglass{ - amount = 50; - pixel_x = 2; - pixel_y = -2 - }, -/obj/item/stock_parts/cell/emproof{ - pixel_x = 1; - pixel_y = 3 - }, -/obj/effect/turf_decal/bot, -/obj/machinery/newscaster/directional/east, -/obj/item/mod/module/plasma_stabilizer, -/obj/item/mod/module/thermal_regulator, -/obj/item/mod/module/magboot, -/obj/item/mod/module/signlang_radio, -/turf/open/floor/iron, -/area/station/engineering/storage) "tGq" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, @@ -78843,6 +78989,18 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron, /area/station/engineering/supermatter/room) +"tJp" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/obj/item/clipboard, +/obj/item/toy/figure/miner, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/half{ + dir = 1 + }, +/area/station/cargo/miningoffice) "tJt" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -79117,16 +79275,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/server) -"tNn" = ( -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "tNq" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -79185,6 +79333,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"tNU" = ( +/obj/effect/turf_decal/trimline/neutral/mid_joiner{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/surgery_tray/full/morgue, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "tNV" = ( /obj/machinery/door/firedoor, /obj/structure/cable, @@ -79561,6 +79720,19 @@ /mob/living/carbon/human/species/monkey, /turf/open/floor/iron/white, /area/station/medical/virology) +"tRV" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/left/directional/west{ + dir = 4; + name = "Delivery Desk"; + req_access = list("cargo") + }, +/obj/effect/turf_decal/delivery, +/obj/item/paper_bin, +/obj/item/pen, +/turf/open/floor/iron, +/area/station/cargo/lobby) "tSa" = ( /obj/structure/sign/poster/random/directional/south, /obj/effect/turf_decal/tile/red/opposingcorners{ @@ -80090,6 +80262,22 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/carpet/blue, /area/station/commons/vacant_room/office) +"tYI" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/line, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 1 + }, +/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/dark/textured_large, +/area/station/cargo/bitrunning/den) "tYL" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -80170,14 +80358,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"uao" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/mob/living/basic/goat/pete, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) "uaE" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 8 @@ -80425,9 +80605,11 @@ }, /area/station/service/chapel) "udb" = ( -/obj/effect/spawner/structure/window/reinforced, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, /obj/structure/cable, -/turf/open/floor/plating, +/turf/open/floor/iron, /area/station/security/lockers) "udd" = ( /obj/structure/cable, @@ -81267,6 +81449,18 @@ /obj/structure/sign/plaques/kiddie/library, /turf/open/floor/plating, /area/station/service/library) +"uoz" = ( +/obj/structure/cable, +/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/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "uoI" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -81361,18 +81555,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"upq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/iron, -/area/station/maintenance/starboard/aft) "upv" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=4"; @@ -81627,13 +81809,6 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) -"usJ" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "usZ" = ( /obj/item/flashlight/lamp, /obj/machinery/airalarm/directional/east, @@ -81655,6 +81830,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/xenobiology) +"utz" = ( +/obj/structure/bed/dogbed/runtime, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/mob/living/basic/pet/cat/runtime, +/turf/open/floor/iron, +/area/station/command/heads_quarters/cmo) "utK" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 @@ -82118,27 +82302,6 @@ /obj/effect/turf_decal/stripes/white/line, /turf/open/floor/wood, /area/station/engineering/break_room) -"uzn" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/item/folder/yellow{ - pixel_x = -6 - }, -/obj/item/pen{ - pixel_x = -6 - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/right/directional/south{ - name = "Delivery Office Desk"; - req_access = list("shipping") - }, -/obj/structure/desk_bell{ - pixel_x = 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/cargo/sorting) "uzo" = ( /obj/structure/chair/office/light, /obj/structure/disposalpipe/segment{ @@ -82311,21 +82474,6 @@ dir = 1 }, /area/station/medical/morgue) -"uBd" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/nanotrasen{ - pixel_y = 32 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "uBf" = ( /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ dir = 4 @@ -82865,6 +83013,17 @@ /obj/structure/cable, /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) +"uHu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_red/filled/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "uHE" = ( /obj/structure/table/wood/poker, /obj/effect/decal/cleanable/dirt, @@ -83129,15 +83288,6 @@ dir = 1 }, /area/station/science/lobby) -"uLn" = ( -/obj/structure/table, -/obj/item/storage/secure/briefcase, -/obj/machinery/firealarm/directional/north, -/obj/item/clothing/neck/stethoscope, -/obj/item/flashlight/pen, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron, -/area/station/command/heads_quarters/cmo) "uLq" = ( /obj/effect/landmark/start/hangover, /obj/effect/turf_decal/tile/neutral{ @@ -83266,6 +83416,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"uMS" = ( +/obj/structure/closet/wardrobe/miner, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/backpack/satchel/explorer, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "uMV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -83315,19 +83472,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/storage/primary) -"uND" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/computer/order_console/bitrunning, -/obj/effect/turf_decal/stripes/end, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/station/cargo/miningoffice) "uNE" = ( /obj/machinery/atmospherics/components/unary/passive_vent{ dir = 4 @@ -83374,15 +83518,6 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/office) -"uOk" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/shaft_miner, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "uOn" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -84154,8 +84289,12 @@ }, /obj/machinery/airalarm/directional/east, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnancefreezer" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/dark, -/area/station/science/ordnance/freezerchamber) +/area/station/science/ordnance) "uXU" = ( /obj/structure/disposaloutlet{ dir = 8 @@ -84507,18 +84646,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/port/fore) -"vbT" = ( -/obj/structure/rack, -/obj/item/gun/energy/laser/carbine/practice{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/item/gun/energy/laser/practice, -/obj/effect/turf_decal/bot, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/auxlab/firing_range) "vbV" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -84899,11 +85026,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/diagonal, /area/station/science/breakroom) -"vhx" = ( -/obj/item/storage/secure/safe/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/security/armory) "vhH" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -84920,11 +85042,6 @@ /obj/structure/cable, /turf/open/floor/iron/grimy, /area/station/service/bar/backroom) -"vhK" = ( -/obj/effect/landmark/blobstart, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/plating, -/area/station/maintenance/solars/starboard/aft) "vhW" = ( /obj/item/kirbyplants/random, /obj/structure/sign/warning/pods/directional/south{ @@ -85204,19 +85321,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/service/cafeteria) -"vmo" = ( -/obj/structure/table/glass, -/obj/machinery/status_display/ai/directional/west, -/obj/machinery/newscaster/directional/north, -/obj/effect/turf_decal/siding/dark_red, -/obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = -6 - }, -/obj/item/reagent_containers/cup/bottle/morphine, -/obj/item/reagent_containers/syringe, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) "vmr" = ( /obj/machinery/airalarm/directional/west, /obj/machinery/disposal/bin, @@ -85458,6 +85562,13 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/cmo) +"vpI" = ( +/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/security/mechbay) "vpJ" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -85602,15 +85713,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/medical/chemistry) -"vrz" = ( -/obj/structure/table/reinforced, -/obj/item/folder/red, -/obj/item/storage/secure/briefcase, -/obj/item/book/manual/wiki/security_space_law, -/obj/item/taperecorder, -/obj/effect/turf_decal/tile/red/fourcorners, -/turf/open/floor/iron/dark, -/area/station/security/office) "vrP" = ( /obj/structure/disposalpipe/trunk{ dir = 8 @@ -85683,6 +85785,16 @@ }, /turf/open/floor/iron, /area/station/cargo/lobby) +"vsR" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/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, +/area/station/cargo/miningoffice) "vsV" = ( /obj/machinery/duct, /turf/open/floor/plating, @@ -86077,19 +86189,6 @@ "vxs" = ( /turf/closed/wall/r_wall, /area/station/security/prison/visit) -"vxt" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/office, -/obj/machinery/status_display/supply{ - pixel_x = 32 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/sorting) "vxu" = ( /obj/effect/turf_decal/siding/green{ dir = 1 @@ -86592,10 +86691,7 @@ /area/station/construction/mining/aux_base) "vCQ" = ( /obj/machinery/newscaster/directional/south, -/obj/machinery/vending/wardrobe/sec_wardrobe, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 6 - }, +/obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/iron, /area/station/security/lockers) "vCU" = ( @@ -86609,21 +86705,6 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/command/heads_quarters/hos) -"vDj" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/line, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/holopad, -/turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) "vDm" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -86802,6 +86883,13 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) +"vFg" = ( +/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/herringbone, +/area/station/cargo/miningoffice) "vFh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -86907,6 +86995,11 @@ "vGy" = ( /turf/closed/wall/mineral/plastitanium, /area/station/commons/fitness/recreation) +"vGM" = ( +/obj/structure/secure_safe/directional/east, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) "vGP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing{ @@ -87008,23 +87101,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/security) -"vId" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 8 - }, -/obj/item/radio/intercom/directional/south, -/obj/effect/decal/cleanable/oil, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) "vIq" = ( /obj/structure/cable, /obj/structure/disposalpipe/junction{ @@ -87159,16 +87235,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"vKx" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/fore) "vKI" = ( /obj/item/radio/intercom/directional/west, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -87278,6 +87344,11 @@ "vMp" = ( /turf/closed/wall/r_wall, /area/station/medical/chemistry) +"vMq" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) "vMx" = ( /obj/item/kirbyplants/random, /obj/machinery/firealarm/directional/north, @@ -87364,22 +87435,6 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/engineering) -"vNV" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/landmark/start/bitrunner, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/station/cargo/miningoffice) "vOh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -87486,17 +87541,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"vPv" = ( -/obj/structure/table/reinforced, -/obj/machinery/status_display/ai/directional/east, -/obj/item/storage/secure/briefcase, -/obj/item/aicard, -/obj/item/circuitboard/aicore, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/rd) "vPy" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -87663,6 +87707,23 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) +"vSm" = ( +/obj/machinery/door/firedoor, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/mining/glass{ + name = "Delivery Office" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/supply/shipping, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/turf/open/floor/iron, +/area/station/cargo/sorting) "vSo" = ( /obj/structure/table/wood, /obj/item/clipboard, @@ -87793,6 +87854,39 @@ }, /turf/open/floor/iron, /area/station/science/research) +"vUf" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/structure/desk_bell{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/item/folder/yellow{ + pixel_x = -3; + pixel_y = -6 + }, +/obj/item/pen{ + pixel_x = -3; + pixel_y = -2 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + id = "chemisttop"; + name = "Pharmacy Shutters" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/window/left/directional/west{ + dir = 4; + name = "Pharmacy Desk"; + req_access = list("pharmacy") + }, +/turf/open/floor/iron/dark, +/area/station/medical/pharmacy) "vUk" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/binary/pump{ @@ -88015,6 +88109,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark/corner, /area/station/hallway/secondary/entry) +"vXy" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/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/herringbone, +/area/station/cargo/miningoffice) "vXH" = ( /obj/structure/chair/office{ dir = 8 @@ -88106,8 +88210,10 @@ /area/station/solars/port/fore) "vYw" = ( /obj/effect/turf_decal/trimline/red/filled/line{ - dir = 5 + 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/security/lockers) "vYG" = ( @@ -88155,15 +88261,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"vZw" = ( -/obj/structure/table/reinforced, -/obj/item/storage/medkit/regular, -/obj/item/storage/secure/safe/caps_spare/directional/west, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "vZE" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, @@ -88720,24 +88817,6 @@ /obj/effect/landmark/start/depsec/medical, /turf/open/floor/iron/large, /area/station/security/checkpoint/medical/medsci) -"whb" = ( -/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, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/airlock/mining/glass{ - name = "Delivery Office" - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/shipping, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining, -/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/turf/open/floor/iron, -/area/station/cargo/sorting) "whc" = ( /obj/structure/sign/poster/official/fruit_bowl/directional/west, /obj/effect/turf_decal/stripes/line{ @@ -89023,6 +89102,20 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) +"wlc" = ( +/obj/structure/table/reinforced, +/obj/item/gun/energy/laser/carbine/practice{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/gun/energy/laser/practice, +/obj/item/clothing/ears/earmuffs, +/obj/item/clothing/ears/earmuffs, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/security/range) "wld" = ( /obj/machinery/door/window/right/directional/south, /turf/open/floor/plating, @@ -89320,7 +89413,7 @@ /area/station/hallway/secondary/entry) "wnI" = ( /obj/item/sign, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /obj/item/screwdriver, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) @@ -89778,6 +89871,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/server) +"wsT" = ( +/obj/structure/table/reinforced, +/obj/machinery/microwave/engineering/cell_included, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/wood, +/area/station/engineering/break_room) "wsU" = ( /obj/docking_port/stationary/escape_pod, /turf/open/space/basic, @@ -89931,19 +90030,6 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/storage) -"wuU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/light/small/directional/east, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "wuV" = ( /obj/structure/fireaxecabinet/directional/south, /obj/effect/turf_decal/tile/blue/half/contrasted, @@ -90172,6 +90258,24 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"wxX" = ( +/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, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/mining/glass{ + name = "Delivery Office" + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/shipping, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/turf/open/floor/iron, +/area/station/cargo/sorting) "wyh" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -90517,6 +90621,16 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"wCn" = ( +/obj/structure/rack, +/obj/item/storage/briefcase/secure, +/obj/machinery/status_display/ai/directional/south, +/obj/effect/turf_decal/bot, +/obj/item/reagent_containers/pill/patch/aiuri, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "wCp" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -91560,15 +91674,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"wRe" = ( -/obj/structure/table/wood, -/obj/item/storage/secure/briefcase{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/briefcase, -/turf/open/floor/iron/checker, -/area/station/service/theater/abandoned) "wRf" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 @@ -91596,6 +91701,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"wRz" = ( +/obj/structure/table/wood, +/obj/item/storage/briefcase/secure{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/lockbox/medal, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron/grimy, +/area/station/command/heads_quarters/captain) "wRL" = ( /obj/effect/spawner/random/structure/crate, /obj/machinery/light/small/broken/directional/west, @@ -91775,6 +91890,23 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/maintenance/port) +"wTL" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 8 + }, +/obj/item/radio/intercom/directional/south, +/obj/effect/decal/cleanable/oil, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "wTN" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -92294,6 +92426,13 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/station/solars/starboard/fore) +"xce" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "xcm" = ( /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/window/preopen{ @@ -92401,6 +92540,19 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) +"xdZ" = ( +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/computer/order_console/bitrunning, +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/iron/half{ + dir = 1 + }, +/area/station/cargo/miningoffice) "xef" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, @@ -92731,6 +92883,14 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) +"xhO" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/maintenance/fore) "xhR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -93143,22 +93303,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/security/range) -"xnh" = ( -/obj/effect/landmark/start/hangover/closet, -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/secure_closet/personal, -/obj/effect/spawner/random/food_or_drink/cups, -/obj/item/storage/secure/briefcase, -/obj/effect/turf_decal/bot, -/obj/item/radio/intercom/directional/west, -/obj/effect/turf_decal/tile/brown/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/commons/vacant_room) "xnp" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -93390,6 +93534,10 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology) +"xqp" = ( +/obj/vehicle/sealed/mecha/ripley/paddy/preset, +/turf/open/floor/iron/recharge_floor, +/area/station/security/mechbay) "xqM" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -93439,6 +93587,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/engineering/main) +"xrl" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/shaft_miner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "xrr" = ( /turf/closed/wall/r_wall, /area/station/maintenance/solars/starboard/fore) @@ -93531,6 +93688,17 @@ /obj/item/bedsheet/random/double, /turf/open/floor/wood, /area/station/maintenance/port/aft) +"xsp" = ( +/obj/structure/table/reinforced, +/obj/machinery/status_display/ai/directional/east, +/obj/item/storage/briefcase/secure, +/obj/item/aicard, +/obj/item/circuitboard/aicore, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/rd) "xsq" = ( /obj/structure/table, /obj/item/storage/box/lights/mixed, @@ -93584,7 +93752,7 @@ "xsU" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ - name = "Corporate Lounge" + name = "Conglomeration Lounge" }, /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "showroom" @@ -93685,18 +93853,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/fore) -"xtS" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/item/mod/module/plasma_stabilizer, -/obj/item/mod/module/thermal_regulator, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/digital_clock/directional/south, -/obj/item/mod/module/signlang_radio, -/turf/open/floor/iron, -/area/station/medical/storage) "xtZ" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/delivery, @@ -94165,13 +94321,6 @@ "xzJ" = ( /turf/open/floor/iron, /area/station/security/execution/transfer) -"xzL" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/plating, -/area/station/maintenance/port) "xzO" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass{ @@ -94584,6 +94733,14 @@ /obj/structure/plasticflaps, /turf/open/floor/plating, /area/station/cargo/storage) +"xES" = ( +/obj/structure/table/glass, +/obj/item/surgery_tray/full, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/suit/apron/surgical, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/medical/surgery/theatre) "xEV" = ( /obj/item/target, /obj/effect/decal/cleanable/dirt, @@ -95259,13 +95416,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"xMZ" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/cargo/sorting) "xNe" = ( /obj/structure/lattice, /obj/structure/grille/broken, @@ -95329,16 +95479,6 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) -"xOn" = ( -/obj/structure/table/wood, -/obj/item/storage/briefcase{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/secure/briefcase, -/obj/effect/turf_decal/tile/blue/half/contrasted, -/turf/open/floor/iron, -/area/station/security/courtroom) "xOs" = ( /obj/machinery/light/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -95418,17 +95558,6 @@ "xPc" = ( /turf/closed/wall, /area/station/medical/virology) -"xPf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/mob/living/basic/sloth/citrus, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) "xPo" = ( /obj/machinery/camera/directional/north{ c_tag = "Security - Prison Port" @@ -95477,14 +95606,6 @@ /obj/machinery/incident_display/delam/directional/south, /turf/open/floor/iron, /area/station/engineering/supermatter/room) -"xQq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/mob/living/basic/cockroach, -/turf/open/floor/iron/dark, -/area/station/service/abandoned_gambling_den) "xQr" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ dir = 6 @@ -95685,6 +95806,17 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/engineering/atmos/storage) +"xTD" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/mob/living/basic/sloth/citrus, +/turf/open/floor/iron, +/area/station/command/heads_quarters/qm) "xTJ" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ @@ -95815,13 +95947,6 @@ /obj/structure/barricade/wooden, /turf/open/floor/plating, /area/station/service/abandoned_gambling_den) -"xVv" = ( -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "xVI" = ( /obj/structure/rack, /obj/item/analyzer, @@ -96043,6 +96168,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) +"xYM" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "xYN" = ( /obj/machinery/newscaster/directional/north, /obj/effect/turf_decal/siding/white/corner{ @@ -96123,6 +96254,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) +"xZP" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/camera/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "yah" = ( /obj/machinery/computer/bank_machine, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -96696,6 +96833,18 @@ /obj/machinery/photocopier, /turf/open/floor/iron/white, /area/station/science/research) +"yhW" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "garbage" + }, +/obj/machinery/recycler{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "yhY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -103262,7 +103411,7 @@ nOy smV smV nOy -mcF +smV aaa bPC bRz @@ -103273,7 +103422,7 @@ caa bPC pYJ ePZ -tfO +nCB cVr bAU cVr @@ -107385,7 +107534,7 @@ pGJ bPC pYJ ePZ -bMw +qpQ smV aOl smV @@ -107628,7 +107777,7 @@ pSa chU chU chU -iXE +chU chU chU iIm @@ -108413,7 +108562,7 @@ chU chU chU aaQ -mTB +pzp qYo qYo qYo @@ -118444,7 +118593,7 @@ aVW lbl sHT msB -kXR +iGF owf fUY jjw @@ -118993,7 +119142,7 @@ gpd cXL bMd eJy -mOh +jag jtC ibp pxb @@ -119188,14 +119337,14 @@ uiP vkg wlS vQj -ntU +wsT cJX fhr kTd wwr rSZ bAR -thZ +obB viB pOz hEL @@ -119716,7 +119865,7 @@ tMl apu swR aHE -niL +wCn gAw qje fbA @@ -120272,7 +120421,7 @@ sfN rnS mAt mSP -xQq +oKn bfz bsY vOk @@ -120282,7 +120431,7 @@ tuq grz urh pxb -fiu +eit egk nCI nCI @@ -121797,7 +121946,7 @@ lAs trG fnq uKY -xzL +hMp mYM pTC eSu @@ -121819,7 +121968,7 @@ vSX nEc tFP oMV -sSx +oDJ cHU eKz qel @@ -124362,8 +124511,8 @@ iqz kgi hps hkJ -ptA -tGm +tum +iTM abO pTC sNd @@ -124906,7 +125055,7 @@ aJX fSw fTA jkC -cvc +dKR jUx wEI qYo @@ -125920,7 +126069,7 @@ dyx sIX rzF gAE -ajG +gfY xsl lXI sIX @@ -126439,7 +126588,7 @@ ddn wMi sIX qCb -vbT +fIU ljC gmE omw @@ -126670,7 +126819,7 @@ ikf vcB vcB jPf -rqN +bRs sIe bTe jTw @@ -127744,7 +127893,7 @@ bvd wJJ wEI dnV -aHw +adE gFO qQM isR @@ -127976,7 +128125,7 @@ hwS sIX wyK eqh -vPv +xsp sIX sIX sIX @@ -128140,7 +128289,7 @@ azA oYs bEs bEs -pRp +pfs tQY ltr qRN @@ -128174,7 +128323,7 @@ hXw btc hFP xAt -uao +eEI oTB sqM oYs @@ -128929,7 +129078,7 @@ juX ueJ nMw csw -xnh +nUo pLx jZj umN @@ -132049,7 +132198,7 @@ xOv nHc fxs lAg -gGh +kPM pRS qLa nLS @@ -132080,7 +132229,7 @@ whK rcW dJa oRz -aFs +fIe bgL mfI fvi @@ -132870,7 +133019,7 @@ lhC pdi ikZ dNN -lmI +orQ wRj jBw wRj @@ -133589,7 +133738,7 @@ mGE qGW nHu lgQ -kBE +bHd mxU xJh pRS @@ -133855,7 +134004,7 @@ lAv nAz jce lZx -oit +pgs lbt iVT nuY @@ -134577,7 +134726,7 @@ ptC maV rgK gmh -gzc +dxh nUG kVP kVP @@ -134609,7 +134758,7 @@ xms aaa wyH fIx -vZw +cxu cQv drj bog @@ -134670,10 +134819,10 @@ dQT xkU jew rEO -uLn +lrK pMF jDq -kDv +utz loe eoE jbc @@ -135127,13 +135276,13 @@ pnV bsC fIg hdZ -tip +sTu ipQ eVl cGR vBA aPW -iBH +aOd lkL jDi dZD @@ -136950,7 +137099,7 @@ vpK jcB uJm duA -anP +fqN mzL sFu uDj @@ -136965,8 +137114,8 @@ uNY squ pEU cwh -riZ -pTz +pCr +vUf cwh cwh udd @@ -137388,7 +137537,7 @@ bFV aSO lZz koM -gHH +kbL pzr jwr mxP @@ -137445,7 +137594,7 @@ gOU gOU vDo eBw -aaj +hxP gOU fOw ilI @@ -137505,10 +137654,10 @@ pdl fOJ kuU tOS -tsx +xES jqJ jqJ -dRQ +sOp qYL jNY llm @@ -138025,7 +138174,7 @@ uue jdf qYL qpU -neT +tNU aNV hvf vid @@ -138270,7 +138419,7 @@ nFO tqw kKy xhT -xtS +ddp ako ako gMX @@ -138449,7 +138598,7 @@ hqK hLa rve iJr -tsG +lab qQE xjx euK @@ -138681,8 +138830,8 @@ pKn vsA fsl elS -eke -vKx +jyL +jvp cCb wQv oDR @@ -138939,7 +139088,7 @@ sPo vxL jdL jdL -fiJ +eVz jdL mDP szg @@ -138965,9 +139114,9 @@ vKl wfK hoC yfI -bGf +tRV kGo -sCW +vSm xhW ygL xhW @@ -138988,7 +139137,7 @@ cBE kDL qxw aby -kqk +wRz aGZ teA nSv @@ -139196,7 +139345,7 @@ hEQ weX iLF jdL -rUV +dVA jdL gJI ttP @@ -139453,7 +139602,7 @@ vyG dRo tpI jdL -onA +mWs jdL lgc dfk @@ -139679,7 +139828,7 @@ aad aad csz jSE -gOH +oNE wFz xrr aaa @@ -139710,7 +139859,7 @@ uTB wak xor jdL -oFk +rFg jdL lDi lHC @@ -139720,7 +139869,7 @@ kRn kjl lDi lDi -sLg +rTB bqv hDZ bfT @@ -139764,7 +139913,7 @@ ivA hmA wbh sEs -cNy +tqr sim lHx ivA @@ -139808,9 +139957,9 @@ cwe ltS cwe oDE -fUr +fTE bcj -pDy +tfJ oDE ajY tJh @@ -139967,7 +140116,7 @@ nmb kYn djn jdL -cOS +juz jdL aix wHa @@ -139984,21 +140133,21 @@ oSv ueU cNf wqo -lfC +rLB oSv mOe yhh liD mZU -whb +wxX uBZ pso -sqW -sqW -scv -eYZ -vxt -uzn +nCY +nCY +aeD +mlv +dkr +mjH eUH dvy lSl @@ -140224,7 +140373,7 @@ xwO liM xGK jdL -cOS +juz jdL ncT hTl @@ -140481,9 +140630,9 @@ sma tyU kvK sKC -cxv -joP -jnd +xhO +rMj +dPv udk uyt iRP @@ -140507,8 +140656,8 @@ gLz xhW axz fOz -rAl -bkr +syW +ecX yfo qLp pcx @@ -140764,14 +140913,14 @@ ohH xhW xhW nPo -xMZ -cGV -cGV -cGV -cGV -cGV -uBd -wuU +xce +hXg +hXg +hXg +hXg +hXg +seX +mEv vPp tJT qzY @@ -141019,14 +141168,14 @@ uSp oSv cFz rWo -qko -vNV -pxS -fbu -mlF -qsF -jKY -cGV +gpD +kLA +qbd +gHq +lJw +tYI +kUj +hXg lDY tpZ kOj @@ -141238,11 +141387,11 @@ aeF vno nNs ffk -fTh +eJx egs vno rJN -lUW +aRX pGy vno kvs @@ -141275,16 +141424,16 @@ qaF tQW hQj uzM -aPD -stf -llj -ftS -fbu -mDm -vDj -cwd -cGV -qmT +oYr +pGR +bmo +bFA +gHq +pDz +quh +tjo +hXg +fmH tpZ aaa aad @@ -141532,16 +141681,16 @@ rbV qLg uTu tQP -rmH -toy -izj -fAj -pUs -okN -oAV -vId -cGV -eFU +rid +vFg +eQG +vXy +kuj +cjO +hrz +wTL +hXg +uoz tpZ aaa lhY @@ -141790,15 +141939,15 @@ fya cSK pok rWo -uND -kKx -dux -cGV -nEE -cyc -rQF -cGV -eFU +xdZ +nMi +tJp +hXg +dsb +sYn +gVv +hXg +uoz tpZ aad lhY @@ -141836,7 +141985,7 @@ lgf ljT gbt hgJ -eaL +bkE qoR aNG tXA @@ -141861,11 +142010,11 @@ bRZ qMf jfW gUF -ltg +lni xeX qkj qMf -lLW +nXR rKL gnj cjs @@ -141873,7 +142022,7 @@ hJo kfb qQg eBn -fpe +gCL epU hWJ eQo @@ -142047,15 +142196,15 @@ fKA krp krp aJE -mtL -tcB +vMq +izK rWo -cGV -cGV -cGV -cGV -cGV -jRc +hXg +hXg +hXg +hXg +hXg +mwM tpZ aaa lhY @@ -142305,14 +142454,14 @@ iWR gkP krp llJ -ljQ -guj -eYt -nhj -owZ -bLN +aFb +sAL +occ +lDu +cRR +eCQ tpZ -eFU +uoz tpZ aaa lhY @@ -142557,19 +142706,19 @@ aDg krp cAF qqx -xPf +xTD xZC aiF aJE -jCu -rUi -kTs -sgK -iio -gco -hkn +dXX +qpd +kqJ +pBN +vsR +lyx +rPi qyX -cwK +nkO tpZ aaa lhY @@ -142784,7 +142933,7 @@ aad aad vno iJj -kVw +ove acU vno aad @@ -142818,12 +142967,12 @@ osw qZD qrG aJE -dPC -usJ -iXd -elO -hzs -uOk +rYp +idX +xrl +xYM +fxx +pAa bhJ tpZ tpZ @@ -142889,7 +143038,7 @@ pPl vPf qMf rPf -sNP +irx ovf qkj ygf @@ -143075,12 +143224,12 @@ uQZ xhJ vMd tgX -jfO -jBM -tNn -xVv -dXs -rgC +uMS +jyZ +azD +cTv +qQy +gty tDD rWo aad @@ -143564,7 +143713,7 @@ gdM lbu jtm ikR -emZ +yhW akS oeX aaa @@ -143881,7 +144030,7 @@ lMk fSg tJt cei -xOn +sQi kgm wan rrF @@ -144178,7 +144327,7 @@ xPK wZE eSU haQ -huS +own pdb hnH nvM @@ -144898,7 +145047,7 @@ cnp uzz uYp xWR -hQJ +dlU dCk rTO dCd @@ -145408,7 +145557,7 @@ btm aaa aaa dCk -jbG +qhq oHF wRP rku @@ -145679,7 +145828,7 @@ mDR qwP vrP gez -pal +dnK rYA gdA hjQ @@ -146443,7 +146592,7 @@ lYY lYY lYY pdY -nJF +fgk fvn rNx uPH @@ -146923,7 +147072,7 @@ mSe mSe mSe mSe -vmo +jTH lQj xBD mXg @@ -147178,7 +147327,7 @@ qYo qYo mSe prB -gTH +sMG mSe iiR log @@ -147526,7 +147675,7 @@ qMf rev qMf qMf -wRe +enF nbc dtM iLr @@ -147948,7 +148097,7 @@ hlr wDX biI iZG -bWw +pZf kxj wDX xNU @@ -148284,7 +148433,7 @@ wEM uen iYg klE -mmA +bZe tHd ujU ehy @@ -149305,7 +149454,7 @@ ouy geH nXH gWF -upq +goa jix nmD gQK @@ -149516,7 +149665,7 @@ anY dql eBE gIV -eYo +wlc vgK ryB jlV @@ -149529,7 +149678,7 @@ rIa rIa rIa aVz -lNN +ero lra cgZ qiM @@ -149767,7 +149916,7 @@ mif qlN bdx lpI -vrz +iIb sYN wWH vgK @@ -149801,7 +149950,7 @@ aaa aad vop qqe -gan +qVa yaI fNn uEo @@ -150082,7 +150231,7 @@ nXH aad nXH uFH -itC +put udQ cun kOR @@ -150317,7 +150466,7 @@ pzN uYX pGm jMz -bWn +ikn bvT gVh lmD @@ -150350,7 +150499,7 @@ hrt wZV vNa cPU -vhK +eVc oBM pWe aad @@ -150540,7 +150689,7 @@ bzi sWa gDY tKw -fQC +qDw vgK eOv tLx @@ -150603,7 +150752,7 @@ qEb bBd hDU dhR -pQR +fKY pwM vNa eOt @@ -151074,7 +151223,7 @@ dwU wtB qBw vYw -lPH +hOk vCQ hEF hEF @@ -151330,10 +151479,10 @@ teo pKD pbN bLs -hEF -udb +hyR +lPH udb -hEF +ggW aad aad efQ @@ -151581,17 +151730,17 @@ bLs bLs gPh oGM -vhx +vGM gYv lIy uro bLs bLs -aaa -aad -aaa -aKU -aaa +nEZ +gCa +gkt +nEZ +nEZ aad aaa aaa @@ -151844,11 +151993,11 @@ bLs bLs bLs ptN -efQ -qYo -efQ -efQ -qYo +nEZ +pgZ +uHu +aZj +nEZ qYo efQ qYo @@ -152101,11 +152250,11 @@ mfO aaa aaa aaa -aaa -qYo -aaa -aaa -aaa +nEZ +rPb +fvD +knp +nEZ qYo aaa aaa @@ -152358,12 +152507,12 @@ efQ efQ efQ efQ +nEZ +xqp +vpI +xZP +nEZ qYo -efQ -efQ -efQ -qYo -efQ lvw qYo efQ @@ -152615,14 +152764,14 @@ qYo aaa aaa qYo +nEZ +apf +iHn +nEZ +nEZ qYo aaa aaa -aaa -aaa -aaa -aaa -aaa efQ aaa uKw @@ -152872,12 +153021,12 @@ efQ efQ efQ qYo +nEZ +nEZ +nEZ +nEZ aaa -aaa -aaa -aaa -aaa -aaa +qYo aaa aaa efQ @@ -153108,7 +153257,7 @@ gIw huI fbW okz -euf +nGO kOA kOA aad @@ -153128,15 +153277,15 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +qYo +qYo +lvw +qYo +qYo +uHd +qYo +uHd +qYo aad dTS uKw @@ -153386,13 +153535,13 @@ aaa aaa aaa aaa +lvw aaa +uHd aaa +lvw aaa -aaa -aaa -aaa -aaa +uHd aaa efQ aad @@ -153643,13 +153792,13 @@ aaa aaa aaa aaa +uHd aaa +lvw aaa +uHd aaa -aaa -aaa -aaa -aaa +lvw aaa efQ aaa @@ -154132,7 +154281,7 @@ aaa aad aaa kOA -gjG +rwF xtj iHy yfO diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 4de6c4c210e9cf..fd96d32565df14 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -1392,8 +1392,8 @@ /area/station/security/courtroom) "awR" = ( /obj/machinery/conveyor{ - id = "garbage"; - dir = 1 + dir = 1; + id = "garbage" }, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -1677,6 +1677,12 @@ }, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai_upload) +"aAl" = ( +/obj/machinery/computer/mech_bay_power_console{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/mechbay) "aAv" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -2815,8 +2821,8 @@ "aUi" = ( /obj/structure/table, /obj/item/storage/briefcase{ - pixel_y = 3; - pixel_x = 2 + pixel_x = 2; + pixel_y = 3 }, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/item/storage/wallet, @@ -3181,8 +3187,8 @@ pixel_x = 7 }, /obj/item/reagent_containers/cup/soda_cans/sol_dry{ - pixel_y = 4; - pixel_x = -7 + pixel_x = -7; + pixel_y = 4 }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) @@ -3533,7 +3539,6 @@ /turf/open/floor/plating, /area/mine/eva/lower) "bfB" = ( -/obj/item/kirbyplants/random, /obj/machinery/firealarm/directional/east, /turf/open/floor/iron/dark/textured, /area/station/security/office) @@ -4579,12 +4584,6 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos/pumproom) -"bup" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/mob/living/simple_animal/parrot/poly, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "buv" = ( /obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ color = "#ff0000"; @@ -4871,7 +4870,7 @@ dir = 1 }, /turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "byq" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 5 @@ -5312,8 +5311,8 @@ dir = 8; id = "garbage"; name = "disposal conveyor"; - pixel_y = 5; - pixel_x = -5 + pixel_x = -5; + pixel_y = 5 }, /obj/structure/railing/corner, /obj/effect/turf_decal/box/corners{ @@ -5915,12 +5914,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"bMr" = ( -/obj/item/flashlight/lantern{ - start_on = 1 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "bMu" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/left/directional/north{ @@ -7155,8 +7148,8 @@ name = "Disposal Exit Vent" }, /obj/machinery/conveyor{ - id = "garbage"; - dir = 1 + dir = 1; + id = "garbage" }, /obj/effect/turf_decal/stripes/red/box, /turf/open/floor/plating, @@ -7838,8 +7831,8 @@ /obj/structure/table, /obj/item/storage/wallet, /obj/item/storage/wallet{ - pixel_y = 3; - pixel_x = 4 + pixel_x = 4; + pixel_y = 3 }, /turf/open/floor/plastic, /area/station/commons/dorms/laundry) @@ -9337,11 +9330,6 @@ /area/station/cargo/warehouse) "cLw" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/north{ - dir = 4; - name = "Engineering Desk"; - req_access = list("engine_equip") - }, /obj/machinery/door/firedoor, /obj/item/paper_bin{ pixel_x = -6; @@ -9358,6 +9346,11 @@ /obj/structure/desk_bell{ pixel_x = 6 }, +/obj/machinery/door/window/left/directional/north{ + dir = 4; + name = "Engineering Desk"; + req_access = list("engineering") + }, /turf/open/floor/iron, /area/station/engineering/lobby) "cLB" = ( @@ -10187,7 +10180,7 @@ /obj/machinery/netpod, /obj/machinery/light/small/directional/south, /turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "cYL" = ( /obj/effect/turf_decal/bot, /obj/structure/ore_box, @@ -10741,14 +10734,6 @@ /obj/effect/turf_decal/tile/red/full, /turf/open/floor/iron/dark/smooth_large, /area/station/security/checkpoint/medical) -"dho" = ( -/obj/structure/table/reinforced, -/obj/item/storage/secure/briefcase{ - pixel_y = 5 - }, -/obj/machinery/status_display/evac/directional/west, -/turf/open/floor/iron, -/area/station/command/bridge) "dhq" = ( /turf/closed/mineral/random/labormineral/ice, /area/icemoon/surface/outdoors/labor_camp) @@ -12094,7 +12079,6 @@ dir = 4 }, /obj/machinery/firealarm/directional/south, -/obj/machinery/firealarm/directional/south, /turf/open/floor/iron/dark, /area/station/engineering/atmos/storage/gas) "dBQ" = ( @@ -14180,8 +14164,8 @@ "ekm" = ( /obj/machinery/door/poddoor/shutters/preopen{ dir = 8; - id = "pharmacy_shutters3"; - name = "Pharmacy Shutters" + id = "chemistry_lower_shutters"; + name = "Chemistry Exterior Shutters" }, /obj/structure/cable, /obj/effect/spawner/structure/window/hollow/reinforced/middle{ @@ -15378,35 +15362,6 @@ /obj/structure/bookcase/random/fiction, /turf/open/floor/iron/dark, /area/station/commons/lounge) -"eDW" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Security - HoS Office" - }, -/obj/item/flashlight/lamp/green{ - pixel_x = -6; - pixel_y = 16; - start_on = 0 - }, -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_x = 8; - pixel_y = 3 - }, -/obj/item/stamp/head/hos{ - pixel_x = 10; - pixel_y = 6 - }, -/obj/machinery/recharger{ - pixel_x = -4; - pixel_y = -1 - }, -/obj/machinery/airalarm/directional/west, -/obj/item/phone{ - pixel_x = -9; - pixel_y = 7 - }, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/hos) "eEh" = ( /obj/structure/table/reinforced, /obj/item/storage/toolbox/mechanical, @@ -15730,29 +15685,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) -"eJC" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/glass/bottle/vodka/badminka{ - pixel_x = 7; - pixel_y = 20 - }, -/obj/item/taperecorder{ - pixel_x = -5; - pixel_y = 1 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = 7; - pixel_y = 8 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = 6 - }, -/obj/item/storage/secure/safe/hos{ - pixel_x = 35 - }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/dark/smooth_large, -/area/station/command/heads_quarters/hos) "eJI" = ( /obj/structure/closet/emcloset, /obj/effect/mapping_helpers/broken_floor, @@ -16186,7 +16118,7 @@ /turf/open/floor/iron/dark/smooth_corner{ dir = 4 }, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "eSn" = ( /obj/structure/chair/office, /obj/effect/landmark/start/assistant, @@ -16732,6 +16664,35 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"fad" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Security - HoS Office" + }, +/obj/item/flashlight/lamp/green{ + pixel_x = -6; + pixel_y = 16; + start_on = 0 + }, +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = 8; + pixel_y = 3 + }, +/obj/item/stamp/head/hos{ + pixel_x = 10; + pixel_y = 6 + }, +/obj/machinery/recharger{ + pixel_x = -4; + pixel_y = -1 + }, +/obj/machinery/airalarm/directional/west, +/obj/item/phone{ + pixel_x = -9; + pixel_y = 7 + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/hos) "faf" = ( /obj/structure/tank_holder/extinguisher, /turf/open/floor/plating, @@ -16896,8 +16857,8 @@ /area/icemoon/underground/explored) "fdX" = ( /obj/item/toy/cards/deck{ - pixel_y = 13; - pixel_x = -9 + pixel_x = -9; + pixel_y = 13 }, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/generic, @@ -17155,6 +17116,12 @@ "fiL" = ( /turf/closed/wall/r_wall, /area/station/security/evidence) +"fiN" = ( +/obj/structure/table/wood, +/obj/structure/secure_safe/directional/east, +/obj/machinery/light/directional/east, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) "fiO" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -18007,6 +17974,14 @@ /obj/structure/cable, /turf/open/floor/iron/showroomfloor, /area/station/engineering/atmos) +"fwQ" = ( +/obj/structure/table/reinforced, +/obj/structure/secure_safe/caps_spare/directional/east, +/obj/item/papercutter{ + pixel_x = 7 + }, +/turf/open/floor/iron, +/area/station/command/bridge) "fwS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -18195,6 +18170,13 @@ /obj/item/reagent_containers/cup/glass/waterbottle, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"fAH" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "fAV" = ( /obj/item/kirbyplants/random, /turf/open/floor/iron, @@ -19486,9 +19468,9 @@ }, /obj/effect/turf_decal/tile/yellow/fourcorners, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; id = "pharmacy_shutters2"; - name = "Pharmacy Shutters"; - dir = 4 + name = "Pharmacy Shutters" }, /turf/open/floor/iron, /area/station/medical/pharmacy) @@ -21088,8 +21070,8 @@ /area/station/security/prison/workout) "gvp" = ( /obj/item/chair/stool{ - pixel_y = -3; - pixel_x = -1 + pixel_x = -1; + pixel_y = -3 }, /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/dim/directional/west, @@ -22002,14 +21984,6 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) -"gKk" = ( -/obj/structure/table/reinforced, -/obj/item/storage/secure/safe/caps_spare/directional/east, -/obj/item/papercutter{ - pixel_x = 7 - }, -/turf/open/floor/iron, -/area/station/command/bridge) "gKl" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -22481,6 +22455,7 @@ }, /obj/item/geiger_counter, /obj/item/clothing/glasses/meson, +/obj/machinery/firealarm/directional/north, /turf/open/floor/engine, /area/station/engineering/supermatter/room) "gSy" = ( @@ -22650,13 +22625,13 @@ /area/station/science/breakroom) "gVm" = ( /obj/item/coin/silver{ - pixel_y = -3; - pixel_x = -5 + pixel_x = -5; + pixel_y = -3 }, /obj/item/toy/plush/moth{ - pixel_y = 5; + name = "Marcellus"; pixel_x = 5; - name = "Marcellus" + pixel_y = 5 }, /turf/open/floor/plating, /area/station/commons/dorms/laundry) @@ -23014,14 +22989,6 @@ "hap" = ( /turf/open/floor/vault, /area/station/security/prison/rec) -"haw" = ( -/obj/item/storage/secure/safe/directional/south, -/obj/machinery/light/directional/south, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/commons/vacant_room/commissary) "hay" = ( /obj/structure/extinguisher_cabinet/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -24729,17 +24696,17 @@ "hCY" = ( /obj/structure/table/wood, /obj/item/folder/yellow{ - pixel_y = 8; - pixel_x = 3 + pixel_x = 3; + pixel_y = 8 }, /obj/item/folder/white{ - pixel_y = 12; - pixel_x = -3 + pixel_x = -3; + pixel_y = 12 }, /obj/structure/sign/poster/contraband/random/directional/south, /obj/item/folder/blue{ - pixel_y = 3; - pixel_x = -3 + pixel_x = -3; + pixel_y = 3 }, /obj/item/folder/red{ pixel_x = 5; @@ -25880,13 +25847,6 @@ /obj/machinery/teleport/hub, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat_interior) -"hWI" = ( -/obj/effect/turf_decal/box, -/obj/structure/closet/crate/maint, -/obj/effect/spawner/random/maintenance/six, -/obj/structure/sign/poster/official/wtf_is_co2/directional/north, -/turf/open/floor/iron/dark, -/area/station/maintenance/starboard/aft) "hWP" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -26550,18 +26510,6 @@ /obj/structure/chair/stool/directional/south, /turf/open/floor/iron, /area/station/commons/locker) -"ihr" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "pharmacy_shutters2"; - name = "Pharmacy Shutters" - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "pharmacy_shutters2"; - name = "Pharmacy Shutters" - }, -/turf/open/floor/plating, -/area/station/medical/pharmacy) "ihu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, @@ -26616,7 +26564,6 @@ dir = 8 }, /obj/machinery/airalarm/directional/east, -/obj/machinery/airalarm/directional/east, /obj/machinery/camera/directional/east{ c_tag = "Cargo Bay Office - Access" }, @@ -27535,8 +27482,8 @@ "ixb" = ( /obj/machinery/button/door/directional/south{ id = "vacantofficemaintshutter"; - pixel_x = 4; name = "Privacy Shutters"; + pixel_x = 4; pixel_y = -28 }, /turf/open/floor/iron/grimy, @@ -28667,15 +28614,6 @@ /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"iOO" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/structure/table, -/obj/item/storage/secure/safe/directional/south, -/obj/item/storage/secure/briefcase, -/turf/open/floor/iron/smooth, -/area/station/command/heads_quarters/rd) "iOS" = ( /obj/machinery/airalarm/directional/east, /obj/structure/table, @@ -30596,6 +30534,12 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"juH" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/mob/living/basic/parrot/poly, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "juQ" = ( /obj/structure/rack, /obj/item/stack/rods/fifty, @@ -30660,6 +30604,12 @@ /obj/machinery/atmospherics/components/binary/pump{ dir = 8 }, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnancefreezer" + }, +/obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/dark, /area/station/science/ordnance) "jwl" = ( @@ -31189,7 +31139,7 @@ dir = 4 }, /turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "jFR" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -31302,8 +31252,8 @@ /area/station/engineering/atmos) "jHV" = ( /obj/machinery/mineral/stacking_machine{ - stack_amt = 10; - output_dir = 2 + output_dir = 2; + stack_amt = 10 }, /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -32065,11 +32015,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"jSc" = ( -/obj/structure/bookcase/random, -/obj/structure/bookcase/random, -/turf/open/floor/carpet/red, -/area/station/security/prison/work) "jSe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -32566,6 +32511,12 @@ /obj/item/clothing/shoes/workboots, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"kbm" = ( +/obj/machinery/mech_bay_recharge_port{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/mechbay) "kbn" = ( /obj/effect/decal/cleanable/food/pie_smudge, /turf/open/floor/iron, @@ -32577,8 +32528,8 @@ /area/icemoon/surface/outdoors/nospawn) "kbq" = ( /obj/machinery/conveyor{ - id = "garbage"; - dir = 1 + dir = 1; + id = "garbage" }, /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -32721,6 +32672,16 @@ /obj/structure/sign/warning/test_chamber/directional/south, /turf/open/floor/iron, /area/station/science/ordnance/testlab) +"kdy" = ( +/obj/machinery/door/poddoor/shutters{ + id = "secmechbay"; + name = "Security Mech Bay Shutters" + }, +/obj/structure/cable, +/obj/effect/turf_decal/caution/stand_clear, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "kdD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -33719,6 +33680,16 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) +"kqG" = ( +/obj/structure/table/reinforced, +/obj/machinery/light/small/directional/east, +/obj/effect/spawner/random/engineering/tool{ + pixel_x = 1; + pixel_y = 3 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron, +/area/station/security/mechbay) "kqK" = ( /obj/effect/spawner/random/trash/mess, /obj/effect/decal/cleanable/dirt, @@ -33877,7 +33848,7 @@ /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) "ksu" = ( -/mob/living/simple_animal/hostile/asteroid/gutlunch, +/mob/living/basic/mining/gutlunch/warrior, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) "ksC" = ( @@ -33954,13 +33925,18 @@ /area/station/security/prison/work) "ktw" = ( /obj/effect/turf_decal/stripes/line, -/obj/machinery/firealarm/directional/south, /obj/machinery/camera/directional/south{ c_tag = "Engineering Supermatter Fore"; network = list("ss13","engine"); pixel_x = 23 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/engine_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "engine" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/engine, /area/station/engineering/supermatter/room) "ktx" = ( @@ -34111,6 +34087,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, +/obj/item/kirbyplants/random, /turf/open/floor/iron/dark/textured, /area/station/security/office) "kvR" = ( @@ -34598,8 +34575,8 @@ pixel_y = 2 }, /obj/item/clothing/suit/hooded/wintercoat/eva{ - pixel_y = 5; - pixel_x = 1 + pixel_x = 1; + pixel_y = 5 }, /obj/machinery/light/small/directional/east, /obj/machinery/mining_weather_monitor/directional/north, @@ -35558,6 +35535,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, /turf/open/floor/iron/showroomfloor, /area/station/engineering/atmos) +"kRy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "kRE" = ( /obj/machinery/computer/mech_bay_power_console{ dir = 8 @@ -36470,6 +36454,10 @@ }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) +"lgg" = ( +/obj/machinery/air_sensor/engine_chamber, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "lgk" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 4 @@ -36910,6 +36898,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/mine/laborcamp) +"lmM" = ( +/obj/structure/cable, +/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/dark, +/area/station/security/mechbay) "lmY" = ( /obj/machinery/newscaster/directional/west, /obj/machinery/camera{ @@ -37043,8 +37040,14 @@ /turf/open/floor/iron, /area/station/construction) "loy" = ( -/obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/machinery/button/door/directional/east{ + id = "secmechbay"; + name = "Security Mech Garage Door Controls"; + req_access = list("security") + }, +/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/brig/upper) "loG" = ( @@ -38100,6 +38103,14 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"lET" = ( +/obj/structure/table/reinforced, +/obj/item/storage/briefcase/secure{ + pixel_y = 5 + }, +/obj/machinery/status_display/evac/directional/west, +/turf/open/floor/iron, +/area/station/command/bridge) "lFe" = ( /obj/structure/bookcase/random/adult, /turf/open/floor/iron/dark/textured, @@ -38267,6 +38278,19 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/storage/gas) +"lHL" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/button/door/directional/north{ + id = "secmechbay"; + name = "Security Mech Garage Door Controls"; + req_access = list("security") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "lIk" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -38444,9 +38468,9 @@ /area/station/maintenance/port/aft) "lLE" = ( /obj/machinery/netpod, -/obj/machinery/camera/directional/south, +/obj/machinery/camera/autoname/directional/south, /turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "lLN" = ( /obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/dirt, @@ -38460,8 +38484,8 @@ /obj/structure/table, /obj/effect/turf_decal/tile/brown/half/contrasted, /obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = -6 + pixel_x = -6; + pixel_y = 6 }, /obj/item/food/cheesiehonkers, /turf/open/floor/iron, @@ -38726,7 +38750,7 @@ dir = 4 }, /turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "lPN" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, @@ -38816,6 +38840,11 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron, /area/station/commons/fitness) +"lRc" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/mechbay) "lRd" = ( /obj/structure/chair, /obj/effect/turf_decal/stripes/line{ @@ -39548,6 +39577,13 @@ /obj/structure/sign/warning/electric_shock/directional/west, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"mdX" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "mdZ" = ( /turf/closed/wall, /area/station/hallway/secondary/service) @@ -40149,7 +40185,7 @@ /obj/structure/cable, /obj/machinery/computer/quantum_console, /turf/open/floor/iron/dark/smooth_corner, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "mpf" = ( /obj/structure/cable, /obj/structure/table/wood, @@ -40621,9 +40657,9 @@ "mwF" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; id = "pharmacy_shutters"; - name = "Pharmacy Shutters"; - dir = 4 + name = "Pharmacy Shutters" }, /turf/open/floor/plating, /area/station/medical/pharmacy) @@ -40960,7 +40996,7 @@ "mCb" = ( /mob/living/basic/goat/pete{ desc = "Not known for their pleasant disposition. This one seems a bit more hardy to the cold."; - habitable_atmos = list("min_oxy" = 1, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0); + habitable_atmos = list("min_oxy"=1,"max_oxy"=0,"min_plas"=0,"max_plas"=1,"min_co2"=0,"max_co2"=5,"min_n2"=0,"max_n2"=0); minimum_survivable_temperature = 150; name = "Snowy Pete" }, @@ -43181,6 +43217,19 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) +"nmq" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/structure/table/reinforced, +/obj/effect/spawner/random/engineering/tool{ + pixel_x = -11 + }, +/obj/effect/spawner/random/engineering/tool{ + pixel_x = 5; + pixel_y = 8 + }, +/turf/open/floor/iron, +/area/station/security/mechbay) "nmr" = ( /obj/machinery/hydroponics/soil, /obj/item/cultivator, @@ -43844,8 +43893,8 @@ dir = 4 }, /obj/machinery/door/airlock/multi_tile/public/glass{ - name = "Arrivals Dock"; - dir = 4 + dir = 4; + name = "Arrivals Dock" }, /turf/open/floor/iron/dark/textured, /area/station/hallway/secondary/entry) @@ -45393,7 +45442,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, /turf/open/floor/iron, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "nRv" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -45806,6 +45855,7 @@ }, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/structure/cable, /turf/open/floor/iron/textured, /area/station/security/brig) "nZf" = ( @@ -46022,8 +46072,12 @@ /obj/effect/turf_decal/box/red, /obj/machinery/airalarm/directional/east, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnanceburn" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/dark, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "odi" = ( /obj/item/toy/snowball{ pixel_x = 5; @@ -46739,8 +46793,8 @@ dir = 4 }, /obj/machinery/door/airlock/multi_tile/public/glass{ - name = "Arrivals Dock"; - dir = 4 + dir = 4; + name = "Arrivals Dock" }, /turf/open/floor/iron/dark/textured, /area/station/hallway/secondary/entry) @@ -47143,8 +47197,8 @@ /obj/structure/rack, /obj/machinery/light/cold/directional/north, /obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = -6 + pixel_x = -6; + pixel_y = 6 }, /obj/item/healthanalyzer, /turf/open/floor/iron/white/textured, @@ -47446,6 +47500,13 @@ /obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/plating, /area/station/security/prison/safe) +"oyL" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "oyV" = ( /obj/effect/turf_decal/tile/neutral/diagonal_edge, /obj/structure/cable, @@ -49349,12 +49410,12 @@ /area/station/medical/medbay/central) "pcc" = ( /obj/item/stack/spacecash/c10{ - pixel_y = 4; - pixel_x = 4 + pixel_x = 4; + pixel_y = 4 }, /obj/item/toy/plush/beeplushie{ - pixel_y = -6; - name = "Coolidge" + name = "Coolidge"; + pixel_y = -6 }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, @@ -49617,7 +49678,7 @@ /obj/machinery/byteforge, /obj/effect/turf_decal/box, /turf/open/floor/iron/dark/smooth_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "pgw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/requests_console/directional/south{ @@ -50414,6 +50475,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/office) +"psY" = ( +/obj/machinery/door/poddoor/shutters{ + id = "secmechbay"; + name = "Security Mech Bay Shutters" + }, +/obj/effect/turf_decal/caution/stand_clear, +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "ptd" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -50662,16 +50734,6 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/miningdock) -"pwc" = ( -/obj/machinery/airalarm/directional/north, -/obj/structure/closet/secure_closet/personal, -/obj/item/storage/secure/briefcase, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/effect/turf_decal/tile/brown/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/commons/vacant_room/commissary) "pwd" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -51095,7 +51157,7 @@ /area/station/maintenance/port/aft) "pBE" = ( /turf/closed/wall, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "pBI" = ( /obj/machinery/power/smes{ capacity = 9e+006; @@ -52122,6 +52184,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/commons/storage/art) +"pRX" = ( +/obj/structure/secure_safe/directional/south, +/obj/machinery/light/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) "pRZ" = ( /obj/machinery/shower/directional/south, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -52294,6 +52364,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) +"pVL" = ( +/turf/closed/wall/r_wall, +/area/station/security/mechbay) "pVN" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -52930,7 +53003,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, -/mob/living/simple_animal/bot/cleanbot, +/mob/living/basic/bot/cleanbot, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/service) "qhp" = ( @@ -53202,6 +53275,15 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron, /area/station/science/explab) +"qlO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/table, +/obj/structure/secure_safe/directional/south, +/obj/item/storage/briefcase/secure, +/turf/open/floor/iron/smooth, +/area/station/command/heads_quarters/rd) "qlP" = ( /obj/machinery/door/airlock/external/glass, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -54299,8 +54381,6 @@ dir = 1; name = "Gas to Filter" }, -/obj/effect/mapping_helpers/airalarm/engine_access, -/obj/machinery/airalarm/directional/west, /turf/open/floor/engine, /area/station/engineering/supermatter) "qDD" = ( @@ -55814,9 +55894,9 @@ /obj/machinery/smartfridge/chemistry/preloaded, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; id = "pharmacy_shutters"; - name = "Pharmacy Shutters"; - dir = 4 + name = "Pharmacy Shutters" }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) @@ -56386,6 +56466,14 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"rid" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "rig" = ( /obj/structure/bed, /obj/effect/spawner/random/maintenance, @@ -56902,8 +56990,8 @@ pixel_y = 3 }, /obj/item/assembly/flash/handheld{ - pixel_y = 3; - pixel_x = -19 + pixel_x = -19; + pixel_y = 3 }, /obj/structure/table, /obj/effect/turf_decal/tile/red/anticorner/contrasted, @@ -57938,9 +58026,9 @@ /obj/machinery/smartfridge/chemistry/preloaded, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; id = "pharmacy_shutters2"; - name = "Pharmacy Shutters"; - dir = 4 + name = "Pharmacy Shutters" }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) @@ -58913,6 +59001,17 @@ /obj/structure/cable, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain) +"rXj" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/medical{ + dir = 4 + }, +/obj/structure/secure_safe/directional/south, +/obj/effect/turf_decal/tile/green/full, +/turf/open/floor/iron/dark/smooth_large, +/area/station/medical/virology) "rXr" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -59119,9 +59218,9 @@ }, /obj/effect/turf_decal/tile/yellow/fourcorners, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; id = "pharmacy_shutters"; - name = "Pharmacy Shutters"; - dir = 4 + name = "Pharmacy Shutters" }, /turf/open/floor/iron, /area/station/medical/pharmacy) @@ -59328,6 +59427,10 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) +"sen" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/courtroom) "seA" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -59966,14 +60069,6 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron, /area/station/engineering/atmos) -"soi" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/flashlight/lamp{ - start_on = 0 - }, -/turf/open/floor/wood, -/area/station/maintenance/aft/greater) "sok" = ( /obj/machinery/door/airlock/security/glass{ name = "Security Office" @@ -60104,13 +60199,13 @@ pixel_y = -5 }, /obj/item/coin/plasma{ - pixel_y = -2; - pixel_x = 3 + pixel_x = 3; + pixel_y = -2 }, /obj/item/toy/plush/lizard_plushie{ + name = "Cassius"; pixel_x = 11; - pixel_y = -4; - name = "Cassius" + pixel_y = -4 }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, @@ -60225,7 +60320,7 @@ /obj/machinery/light/small/directional/south, /obj/effect/decal/cleanable/robot_debris, /turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "srG" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/tracks{ @@ -60303,6 +60398,13 @@ /obj/structure/sign/warning/secure_area, /turf/closed/wall/r_wall, /area/station/engineering/storage/tech) +"sst" = ( +/obj/effect/turf_decal/box, +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/obj/effect/spawner/random/maintenance/six, +/obj/structure/sign/poster/official/wtf_is_co2/directional/north, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) "ssv" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/siding/thinplating_new/corner, @@ -60840,7 +60942,7 @@ "szU" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/dark/smooth_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "szX" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, @@ -61655,8 +61757,8 @@ /area/station/medical/chemistry) "sLR" = ( /obj/machinery/conveyor{ - id = "garbage"; - dir = 1 + dir = 1; + id = "garbage" }, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -61671,6 +61773,7 @@ pixel_y = 6 }, /obj/machinery/light/directional/east, +/obj/machinery/light_switch/directional/east, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) "sMg" = ( @@ -62440,6 +62543,14 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"taj" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "tak" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -62626,9 +62737,9 @@ "teE" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/poddoor/shutters{ + dir = 8; id = "vacantofficemaintshutter"; - name = "Privacy Shutters"; - dir = 8 + name = "Privacy Shutters" }, /turf/open/floor/plating, /area/station/commons/vacant_room/office) @@ -62950,8 +63061,8 @@ dir = 4 }, /obj/machinery/door/airlock/multi_tile/public/glass{ - name = "Auxiliary Dock"; - dir = 4 + dir = 4; + name = "Auxiliary Dock" }, /turf/open/floor/iron/dark/textured, /area/station/hallway/secondary/entry) @@ -64022,17 +64133,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison/work) -"tCM" = ( -/obj/structure/bed{ - dir = 4 - }, -/obj/item/bedsheet/medical{ - dir = 4 - }, -/obj/item/storage/secure/safe/directional/south, -/obj/effect/turf_decal/tile/green/full, -/turf/open/floor/iron/dark/smooth_large, -/area/station/medical/virology) "tCO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -65023,6 +65123,12 @@ /obj/machinery/suit_storage_unit/security, /turf/open/floor/iron/smooth, /area/station/security/brig/upper) +"tSs" = ( +/obj/item/flashlight/lantern{ + start_on = 1 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "tSt" = ( /obj/structure/sign/painting/library, /turf/closed/wall, @@ -65100,6 +65206,14 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/science/ordnance) +"tUv" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "tUx" = ( /obj/effect/spawner/random/trash/moisture_trap, /turf/open/floor/plating, @@ -65466,6 +65580,16 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/station/maintenance/department/chapel) +"uao" = ( +/obj/machinery/airalarm/directional/north, +/obj/structure/closet/secure_closet/personal, +/obj/item/storage/briefcase/secure, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) "uar" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -68059,10 +68183,8 @@ dir = 4 }, /obj/machinery/meter, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/mixingchamber_access, /turf/open/floor/iron/dark, -/area/station/science/ordnance/freezerchamber) +/area/station/science/ordnance) "uSS" = ( /obj/machinery/recharge_station, /obj/effect/turf_decal/stripes/box, @@ -68322,7 +68444,7 @@ "uYc" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "uYj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -69413,6 +69535,11 @@ /obj/structure/sign/warning/gas_mask/directional/west, /turf/open/floor/iron, /area/station/cargo/drone_bay) +"vpn" = ( +/obj/vehicle/sealed/mecha/ripley/paddy/preset, +/obj/structure/cable, +/turf/open/floor/iron/recharge_floor, +/area/station/security/mechbay) "vpR" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, @@ -69566,6 +69693,16 @@ /obj/structure/marker_beacon/burgundy, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"vsL" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/camera/directional/west{ + c_tag = "Security - Office - Port" + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "vsM" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, @@ -69620,6 +69757,29 @@ dir = 10 }, /area/station/science/research) +"vtZ" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/bottle/vodka/badminka{ + pixel_x = 7; + pixel_y = 20 + }, +/obj/item/taperecorder{ + pixel_x = -5; + pixel_y = 1 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = 7; + pixel_y = 8 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = 6 + }, +/obj/structure/secure_safe/hos{ + pixel_x = 35 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/heads_quarters/hos) "vuh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -70430,6 +70590,7 @@ "vFO" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/cable, /turf/open/floor/iron/textured, /area/station/security/brig) "vFW" = ( @@ -70790,6 +70951,14 @@ /obj/structure/cable/layer3, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat_interior) +"vMN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/flashlight/lamp{ + start_on = 0 + }, +/turf/open/floor/wood, +/area/station/maintenance/aft/greater) "vMR" = ( /obj/structure/table/glass, /obj/item/seeds/glowshroom, @@ -72946,7 +73115,7 @@ /obj/machinery/holopad, /obj/effect/decal/cleanable/oil, /turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "wuA" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -73070,7 +73239,7 @@ /obj/structure/bed/dogbed/runtime, /obj/item/toy/cattoy, /obj/machinery/newscaster/directional/north, -/mob/living/simple_animal/pet/cat/runtime, +/mob/living/basic/pet/cat/runtime, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) "wwn" = ( @@ -73112,12 +73281,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"wwB" = ( -/obj/structure/table/wood, -/obj/item/storage/secure/safe/directional/east, -/obj/machinery/light/directional/east, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain) "wwI" = ( /obj/structure/chair, /obj/effect/turf_decal/stripes/line{ @@ -73358,6 +73521,8 @@ "wAT" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/red/half/contrasted, +/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/brig/upper) "wAW" = ( @@ -73421,7 +73586,7 @@ /obj/machinery/netpod, /obj/item/radio/intercom/directional/south, /turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "wBA" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 1 @@ -75455,7 +75620,7 @@ specialfunctions = 4 }, /obj/item/paper/crumpled{ - default_raw_text = "Remember! Corporate spent a lot of money to create this state of the art fashion show. If we EVER even so much as HEAR a rumor that a news crew or corporate rep is coming by, this place needs to be in TIP TOP condition. It's all of our asses (and our pensions) if it's not."; + default_raw_text = "Remember! Conglomeration spent a lot of money to create this state of the art fashion show. If we EVER even so much as HEAR a rumor that a news crew or corporate rep is coming by, this place needs to be in TIP TOP condition. It's all of our asses (and our pensions) if it's not."; name = "Crumpled Memo" }, /turf/open/floor/iron/smooth, @@ -75567,8 +75732,8 @@ "xgX" = ( /obj/structure/table/wood, /obj/effect/spawner/random/entertainment/deck{ - pixel_y = 15; - pixel_x = -2 + pixel_x = -2; + pixel_y = 15 }, /obj/effect/spawner/random/food_or_drink/snack{ pixel_x = 5; @@ -77246,6 +77411,7 @@ }, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/structure/cable, /turf/open/floor/iron/textured, /area/station/security/courtroom) "xGZ" = ( @@ -78292,7 +78458,7 @@ }, /obj/machinery/elevator_control_panel/directional/north{ linked_elevator_id = "publicElevator"; - preset_destination_names = list("3" = "Icemoon Level", "4" = "Station Level") + preset_destination_names = list("3"="Icemoon Level","4"="Station Level") }, /turf/open/floor/plating/elevatorshaft, /area/mine/storage) @@ -169013,7 +169179,7 @@ scl dck scl htB -jSc +scl jty cIc nUL @@ -169035,7 +169201,7 @@ jLB qpB qpB siv -qpB +kRy qpB iwC qzV @@ -170327,8 +170493,8 @@ vFO vFO vFO xGX -aiX -aiX +sen +sen lQq aiX vrc @@ -184002,7 +184168,7 @@ hzz gmf jUB gyY -tCM +rXj xDb thA thA @@ -186529,7 +186695,7 @@ thA thA thA rcY -bMr +tSs iDt scw scw @@ -233062,7 +233228,7 @@ gpZ vov cAo gst -pwc +uao plN rTO rTO @@ -233324,7 +233490,7 @@ fXu uOM vzw rTO -haw +pRX gst byl rgl @@ -237684,7 +237850,7 @@ dnq kgD utR uEQ -dho +lET grA cEv nOH @@ -238439,7 +238605,7 @@ jQU psN pfe aeQ -gYp +mdX pfe duq pyW @@ -238670,7 +238836,7 @@ nbp mgU nbt ioi -eDW +fad azx tDw rhf @@ -239040,7 +239206,7 @@ tfR iNa tLW seR -esE +lgg uey esE uLe @@ -239443,7 +239609,7 @@ jDt wtg diq ehy -eJC +vtZ mgU fUj kcc @@ -240255,7 +240421,7 @@ nfk utR tmQ qnV -gKk +fwQ kBr lhv iGH @@ -240309,7 +240475,7 @@ ami oPU wHj mBB -bup +juH ojv htc mDw @@ -240740,7 +240906,7 @@ jNp jNp jNp jNp -sDl +pVL sDl sDl sDl @@ -240993,11 +241159,11 @@ law eqI ewM wAT -lbk -bln -bln -bln -sDl +kdy +taj +vsL +vpn +lRc sDl sDl sDl @@ -241250,11 +241416,11 @@ eyb hAQ ksC loy -lbk -bln -bln -bln -sDl +psY +lmM +oyL +kbm +lRc sDl sDl sDl @@ -241508,10 +241674,10 @@ mfH cIY mfH mfH -ntK -bln -sDl -sDl +lHL +fAH +aAl +lRc sDl sDl sDl @@ -241764,11 +241930,11 @@ ykw tSi kfc dcX -lbk -bln -bln -sDl -sDl +mfH +nmq +kqG +pVL +pVL sDl sDl sDl @@ -242022,9 +242188,9 @@ nOQ cqx sQB mfH -bln -sDl -sDl +pVL +pVL +pVL sDl sDl tOq @@ -242321,7 +242487,7 @@ eEC aTw iFL hpe -wwB +fiN mBX uEm viQ @@ -245155,7 +245321,7 @@ aMP dQo oQD hHI -ihr +tdE fBR fKi tHr @@ -249561,7 +249727,7 @@ bPY rwe wGO npD -soi +vMN hRe ves dFA @@ -250054,9 +250220,9 @@ klc sHd jih rkM -eHU iYs -eHU +rid +tUv rkM eHU pko @@ -254680,7 +254846,7 @@ bHa oMT gaT bZc -iOO +qlO jbU ily hdH @@ -256753,7 +256919,7 @@ fOl cyL jAI bgx -hWI +sst xxv dOK vzD diff --git a/_maps/map_files/Mafia/mafia_ayylmao.dmm b/_maps/map_files/Mafia/mafia_ayylmao.dmm index b9d8582f3b0101..6fdc04e3d0954f 100644 --- a/_maps/map_files/Mafia/mafia_ayylmao.dmm +++ b/_maps/map_files/Mafia/mafia_ayylmao.dmm @@ -9,6 +9,10 @@ /obj/effect/landmark/mafia, /turf/open/floor/plating/abductor, /area/centcom/mafia) +"f" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/closed/indestructible/alien, +/area/centcom/mafia) "g" = ( /obj/mafia_game_board, /obj/effect/mapping_helpers/broken_floor, @@ -48,15 +52,6 @@ /obj/item/abductor/gizmo, /turf/open/floor/plating/abductor2, /area/centcom/mafia) -"p" = ( -/obj/machinery/door/poddoor/preopen{ - desc = "When it's time to sleep, the lights will go out. Remember - no one in space can hear you scream."; - id = "mafia"; - max_integrity = 99999; - name = "Station Night Shutters" - }, -/turf/closed/indestructible/fakeglass, -/area/centcom/mafia) "q" = ( /turf/open/floor/plating/abductor, /area/centcom/mafia) @@ -83,8 +78,8 @@ max_integrity = 99999; name = "Station Night Shutters" }, -/obj/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating/abductor2, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/space/basic, /area/centcom/mafia) "z" = ( /obj/structure/grille/indestructible, @@ -350,7 +345,7 @@ i N o r -p +x m q x @@ -578,7 +573,7 @@ q b b r -b +f q b b diff --git a/_maps/map_files/Mafia/mafia_ball.dmm b/_maps/map_files/Mafia/mafia_ball.dmm index fb4dc490d367f7..e642cc78783e27 100644 --- a/_maps/map_files/Mafia/mafia_ball.dmm +++ b/_maps/map_files/Mafia/mafia_ball.dmm @@ -67,7 +67,8 @@ max_integrity = 99999; name = "Station Night Shutters" }, -/turf/closed/indestructible/fakeglass, +/obj/effect/spawner/structure/window/reinforced/indestructible, +/turf/open/space/basic, /area/centcom/mafia) "q" = ( /turf/open/floor/iron/dark, @@ -91,8 +92,12 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/centcom/mafia) +"E" = ( +/turf/template_noop, +/area/template_noop) (1,1,1) = {" +E a a a @@ -114,10 +119,10 @@ a a a a -a -a +E "} (2,1,1) = {" +E a b b @@ -138,14 +143,13 @@ b b b b -b -b a +E "} (3,1,1) = {" +E a b -b c c c @@ -164,13 +168,13 @@ c c c b -b a +E "} (4,1,1) = {" +E a b -b c g h @@ -189,12 +193,12 @@ h k c b -b a +E "} (5,1,1) = {" a -b +a b c h @@ -214,7 +218,7 @@ i h c b -b +a a "} (6,1,1) = {" @@ -544,7 +548,7 @@ a "} (19,1,1) = {" a -b +a b c h @@ -564,13 +568,13 @@ d h c b -b +a a "} (20,1,1) = {" +E a b -b c k h @@ -589,13 +593,13 @@ h v c b -b a +E "} (21,1,1) = {" +E a b -b c c c @@ -614,10 +618,11 @@ c c c b -b a +E "} (22,1,1) = {" +E a b b @@ -638,11 +643,11 @@ b b b b -b -b a +E "} (23,1,1) = {" +E a a a @@ -664,6 +669,5 @@ a a a a -a -a +E "} diff --git a/_maps/map_files/Mafia/mafia_gothic.dmm b/_maps/map_files/Mafia/mafia_gothic.dmm index 817e145d111035..5dadad3d2c1794 100644 --- a/_maps/map_files/Mafia/mafia_gothic.dmm +++ b/_maps/map_files/Mafia/mafia_gothic.dmm @@ -62,7 +62,8 @@ max_integrity = 99999; name = "Station Night Shutters" }, -/turf/closed/indestructible/opsglass, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/space/basic, /area/centcom/mafia) "q" = ( /turf/open/floor/carpet/red, @@ -85,6 +86,9 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/centcom/mafia) +"y" = ( +/turf/template_noop, +/area/template_noop) "D" = ( /obj/effect/landmark/mafia, /turf/open/floor/iron/chapel{ @@ -131,6 +135,9 @@ dir = 8 }, /area/centcom/mafia) +"U" = ( +/turf/closed/wall/r_wall, +/area/centcom/mafia) "X" = ( /turf/open/floor/iron/chapel{ dir = 1 @@ -138,6 +145,7 @@ /area/centcom/mafia) (1,1,1) = {" +y a a a @@ -159,38 +167,37 @@ a a a a -a -a +y "} (2,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a +y +a +U +U +U +U +U +U +U +U +U +U +U +U +U +U +U +U +U +U +U +a +y "} (3,1,1) = {" +y a -b -b +U c c c @@ -208,14 +215,14 @@ c c c c -b -b +U a +y "} (4,1,1) = {" +y a -b -b +U c g h @@ -233,14 +240,14 @@ d h k c -b -b +U a +y "} (5,1,1) = {" a -b -b +a +U c h d @@ -258,14 +265,14 @@ d i h c -b -b +U +a a "} (6,1,1) = {" a -b -b +U +U c i b @@ -283,13 +290,13 @@ b b d c -b -b +U +U a "} (7,1,1) = {" a -b +U c c d @@ -309,12 +316,12 @@ b d c c -b +U a "} (8,1,1) = {" a -b +U c d d @@ -334,12 +341,12 @@ b d d c -b +U a "} (9,1,1) = {" a -b +U c d b @@ -359,12 +366,12 @@ b b d c -b +U a "} (10,1,1) = {" a -b +U c d b @@ -384,12 +391,12 @@ Q b d c -b +U a "} (11,1,1) = {" a -b +U c d j @@ -409,12 +416,12 @@ O j i c -b +U a "} (12,1,1) = {" a -b +U c i b @@ -434,12 +441,12 @@ b b d c -b +U a "} (13,1,1) = {" a -b +U c d j @@ -459,12 +466,12 @@ q j d c -b +U a "} (14,1,1) = {" a -b +U c d b @@ -484,12 +491,12 @@ l b i c -b +U a "} (15,1,1) = {" a -b +U c d b @@ -509,12 +516,12 @@ b b d c -b +U a "} (16,1,1) = {" a -b +U c f d @@ -534,12 +541,12 @@ b d d c -b +U a "} (17,1,1) = {" a -b +U c c d @@ -559,13 +566,13 @@ b d c c -b +U a "} (18,1,1) = {" a -b -b +U +U c d b @@ -583,14 +590,14 @@ b b d c -b -b +U +U a "} (19,1,1) = {" a -b -b +a +U c h i @@ -608,14 +615,14 @@ i d h c -b -b +U +a a "} (20,1,1) = {" +y a -b -b +U c k h @@ -633,14 +640,14 @@ d h v c -b -b +U a +y "} (21,1,1) = {" +y a -b -b +U c c c @@ -658,36 +665,37 @@ c c c c -b -b +U a +y "} (22,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a +y +a +U +U +U +U +U +U +U +U +U +U +U +U +U +U +U +U +U +U +U +a +y "} (23,1,1) = {" +y a a a @@ -709,6 +717,5 @@ a a a a -a -a +y "} diff --git a/_maps/map_files/Mafia/mafia_lavaland.dmm b/_maps/map_files/Mafia/mafia_lavaland.dmm index 96ddef90b5cebf..d086ab3f5318a9 100644 --- a/_maps/map_files/Mafia/mafia_lavaland.dmm +++ b/_maps/map_files/Mafia/mafia_lavaland.dmm @@ -52,7 +52,7 @@ "al" = ( /obj/item/shovel, /obj/item/pickaxe, -/obj/structure/closet/secure_closet/miner/unlocked, +/obj/structure/closet/crate/miningcar, /turf/open/floor/fakebasalt, /area/centcom/mafia) "am" = ( @@ -72,7 +72,7 @@ }, /obj/item/shovel, /obj/item/pickaxe, -/obj/structure/closet/secure_closet/miner/unlocked, +/obj/structure/closet/crate/miningcar, /turf/open/floor/iron, /area/centcom/mafia) "ap" = ( @@ -82,7 +82,8 @@ max_integrity = 99999; name = "Station Night Shutters" }, -/turf/closed/indestructible/fakeglass, +/obj/effect/spawner/structure/window/reinforced/indestructible, +/turf/open/space/basic, /area/centcom/mafia) "aq" = ( /turf/open/floor/fakebasalt, @@ -93,7 +94,7 @@ }, /obj/item/shovel, /obj/item/pickaxe, -/obj/structure/closet/secure_closet/miner/unlocked, +/obj/structure/closet/crate/miningcar, /turf/open/floor/iron, /area/centcom/mafia) "as" = ( @@ -134,7 +135,7 @@ }, /obj/item/shovel, /obj/item/pickaxe, -/obj/structure/closet/secure_closet/miner/unlocked, +/obj/structure/closet/crate/miningcar, /turf/open/floor/iron, /area/centcom/mafia) "aB" = ( @@ -183,7 +184,7 @@ }, /obj/item/shovel, /obj/item/pickaxe, -/obj/structure/closet/secure_closet/miner/unlocked, +/obj/structure/closet/crate/miningcar, /turf/open/floor/iron, /area/centcom/mafia) "aI" = ( @@ -192,7 +193,7 @@ }, /obj/item/shovel, /obj/item/pickaxe, -/obj/structure/closet/secure_closet/miner/unlocked, +/obj/structure/closet/crate/miningcar, /turf/open/floor/iron, /area/centcom/mafia) "aJ" = ( @@ -210,7 +211,7 @@ }, /obj/item/shovel, /obj/item/pickaxe, -/obj/structure/closet/secure_closet/miner/unlocked, +/obj/structure/closet/crate/miningcar, /turf/open/floor/iron, /area/centcom/mafia) "aM" = ( @@ -282,12 +283,16 @@ }, /turf/open/floor/iron/dark, /area/centcom/mafia) +"qp" = ( +/turf/template_noop, +/area/template_noop) "GL" = ( /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron/dark, /area/centcom/mafia) (1,1,1) = {" +qp aa aa aa @@ -309,10 +314,10 @@ aa aa aa aa -aa -aa +qp "} (2,1,1) = {" +qp aa aY aY @@ -333,14 +338,13 @@ aY aY aY aY -aY -aY aa +qp "} (3,1,1) = {" +qp aa aY -aY ac ac ac @@ -359,13 +363,13 @@ ac ac ac aY -aY aa +qp "} (4,1,1) = {" +qp aa aY -aY ac ag ah @@ -384,12 +388,12 @@ ah ak ac aY -aY aa +qp "} (5,1,1) = {" aa -aY +aa aY ac ah @@ -409,7 +413,7 @@ ai ah ac aY -aY +aa aa "} (6,1,1) = {" @@ -739,7 +743,7 @@ aa "} (19,1,1) = {" aa -aY +aa aY ac ah @@ -759,13 +763,13 @@ ad ah ac aY -aY +aa aa "} (20,1,1) = {" +qp aa aY -aY ac ak ah @@ -784,13 +788,13 @@ ah av ac aY -aY aa +qp "} (21,1,1) = {" +qp aa aY -aY ac ac ac @@ -809,10 +813,11 @@ ac ac ac aY -aY aa +qp "} (22,1,1) = {" +qp aa aY aY @@ -833,11 +838,11 @@ aY aY aY aY -aY -aY aa +qp "} (23,1,1) = {" +qp aa aa aa @@ -859,6 +864,5 @@ aa aa aa aa -aa -aa +qp "} diff --git a/_maps/map_files/Mafia/mafia_snow.dmm b/_maps/map_files/Mafia/mafia_snow.dmm index b8fbc0650b4cb8..bbc5f958d75abd 100644 --- a/_maps/map_files/Mafia/mafia_snow.dmm +++ b/_maps/map_files/Mafia/mafia_snow.dmm @@ -71,7 +71,8 @@ max_integrity = 99999; name = "Station Night Shutters" }, -/turf/closed/indestructible/fakeglass, +/obj/effect/spawner/structure/window/ice, +/turf/open/space/basic, /area/centcom/mafia) "q" = ( /turf/open/floor/iron/dark, @@ -176,6 +177,9 @@ "K" = ( /turf/closed/indestructible/rock/snow, /area/centcom/mafia) +"L" = ( +/turf/template_noop, +/area/template_noop) "R" = ( /obj/effect/landmark/mafia, /turf/open/floor/iron, @@ -187,7 +191,7 @@ /area/centcom/mafia) (1,1,1) = {" -a +L a a a @@ -212,6 +216,7 @@ a a "} (2,1,1) = {" +L a b b @@ -222,7 +227,6 @@ b b b b -b s K K @@ -237,9 +241,9 @@ K a "} (3,1,1) = {" +L a b -b s s s @@ -262,9 +266,9 @@ K a "} (4,1,1) = {" +L a b -b s g h @@ -288,7 +292,7 @@ a "} (5,1,1) = {" a -b +a b s h @@ -375,8 +379,8 @@ s q s t -p -p +s +s z z p @@ -427,7 +431,7 @@ p p p p -p +s p D p @@ -467,7 +471,7 @@ b s i s -b +s p s p @@ -477,10 +481,10 @@ v t p p +s p -p -p -p +s +s w w K @@ -527,7 +531,7 @@ p p p p -p +s p D p @@ -575,8 +579,8 @@ s r s t -p -p +s +s z z p @@ -638,7 +642,7 @@ a "} (19,1,1) = {" a -b +a b s h @@ -662,9 +666,9 @@ K a "} (20,1,1) = {" +L a b -b s k h @@ -687,9 +691,9 @@ K a "} (21,1,1) = {" +L a b -b s s s @@ -712,6 +716,7 @@ K a "} (22,1,1) = {" +L a b b @@ -722,7 +727,6 @@ b b b b -b s K K @@ -737,7 +741,7 @@ K a "} (23,1,1) = {" -a +L a a a diff --git a/_maps/map_files/Mafia/mafia_spiderclan.dmm b/_maps/map_files/Mafia/mafia_spiderclan.dmm index ff83f8de3ec40e..aae3f9914f3819 100644 --- a/_maps/map_files/Mafia/mafia_spiderclan.dmm +++ b/_maps/map_files/Mafia/mafia_spiderclan.dmm @@ -67,8 +67,8 @@ name = "Station Night Shutters" }, /turf/closed/indestructible/fakeglass{ - icon = 'icons/obj/smooth_structures/paperframes.dmi'; - icon_state = "paper" + icon = 'icons/obj/smooth_structures/structure_variations.dmi'; + icon_state = "paper-whole" }, /area/centcom/mafia) "q" = ( @@ -94,11 +94,15 @@ /obj/structure/showcase/katana, /turf/open/misc/beach/sand, /area/centcom/mafia) +"Q" = ( +/turf/template_noop, +/area/template_noop) "S" = ( /turf/closed/wall/mineral/wood, /area/centcom/mafia) (1,1,1) = {" +Q a a a @@ -120,10 +124,10 @@ a a a a -a -a +Q "} (2,1,1) = {" +Q a S S @@ -144,14 +148,13 @@ S S S S -S -S a +Q "} (3,1,1) = {" +Q a S -S c c c @@ -170,13 +173,13 @@ c c c S -S a +Q "} (4,1,1) = {" +Q a S -S c g h @@ -195,12 +198,12 @@ h k c S -S a +Q "} (5,1,1) = {" a -S +a S c h @@ -220,7 +223,7 @@ i h c S -S +a a "} (6,1,1) = {" @@ -550,7 +553,7 @@ a "} (19,1,1) = {" a -S +a S c h @@ -570,13 +573,13 @@ d h c S -S +a a "} (20,1,1) = {" +Q a S -S c k h @@ -595,13 +598,13 @@ h v c S -S a +Q "} (21,1,1) = {" +Q a S -S c c c @@ -620,10 +623,11 @@ c c c S -S a +Q "} (22,1,1) = {" +Q a S S @@ -644,11 +648,11 @@ S S S S -S -S a +Q "} (23,1,1) = {" +Q a a a @@ -670,6 +674,5 @@ a a a a -a -a +Q "} diff --git a/_maps/map_files/Mafia/mafia_syndie.dmm b/_maps/map_files/Mafia/mafia_syndie.dmm index 12287245828d5d..4c275e2ef3237f 100644 --- a/_maps/map_files/Mafia/mafia_syndie.dmm +++ b/_maps/map_files/Mafia/mafia_syndie.dmm @@ -46,7 +46,6 @@ /turf/open/floor/plating, /area/centcom/mafia) "o" = ( -/obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/dark, /area/centcom/mafia) "p" = ( @@ -56,14 +55,14 @@ max_integrity = 99999; name = "Station Night Shutters" }, -/turf/closed/indestructible/opsglass, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/space/basic, /area/centcom/mafia) "q" = ( /obj/structure/chair/office{ dir = 1; name = "tactical swivel chair" }, -/obj/effect/turf_decal/tile/red/fourcorners, /obj/effect/landmark/mafia, /turf/open/floor/iron/dark, /area/centcom/mafia) @@ -82,14 +81,13 @@ /turf/open/floor/plating, /area/centcom/mafia) "w" = ( -/turf/closed/indestructible/syndicate, +/turf/closed/wall/r_wall, /area/centcom/mafia) "x" = ( /obj/structure/chair/office{ dir = 4; name = "tactical swivel chair" }, -/obj/effect/turf_decal/tile/red/fourcorners, /obj/effect/landmark/mafia, /turf/open/floor/iron/dark, /area/centcom/mafia) @@ -104,7 +102,6 @@ /obj/structure/chair/office{ name = "tactical swivel chair" }, -/obj/effect/turf_decal/tile/red/fourcorners, /obj/effect/landmark/mafia, /turf/open/floor/iron/dark, /area/centcom/mafia) @@ -129,7 +126,6 @@ dir = 8; name = "tactical swivel chair" }, -/obj/effect/turf_decal/tile/red/fourcorners, /obj/effect/landmark/mafia, /turf/open/floor/iron/dark, /area/centcom/mafia) @@ -146,7 +142,6 @@ desc = "A storage closet for syndicate conflict resolution operatives."; name = "red closet" }, -/obj/effect/turf_decal/tile/red/fourcorners, /obj/effect/spawner/random/clothing/syndie, /turf/open/floor/iron/dark, /area/centcom/mafia) @@ -156,8 +151,15 @@ "S" = ( /turf/open/floor/mineral/plastitanium/red, /area/centcom/mafia) +"W" = ( +/turf/closed/wall/mineral/plastitanium, +/area/centcom/mafia) +"Y" = ( +/turf/template_noop, +/area/template_noop) (1,1,1) = {" +Y a a a @@ -179,10 +181,10 @@ a a a a -a -a +Y "} (2,1,1) = {" +Y a w w @@ -203,14 +205,13 @@ w w w w -w -w a +Y "} (3,1,1) = {" +Y a w -w c c c @@ -229,13 +230,13 @@ c c c w -w a +Y "} (4,1,1) = {" +Y a w -w c g h @@ -254,32 +255,32 @@ h k c w -w a +Y "} (5,1,1) = {" a -w +a w c h d d i -w -w +W +W j -w +W j -w -w +W +W d d i h c w -w +a a "} (6,1,1) = {" @@ -288,19 +289,19 @@ w w c i -w -w +W +W j -w +W b r -w +W o G -w +W j -w -w +W +W d c w @@ -313,7 +314,7 @@ w c c d -w +W G o p @@ -325,7 +326,7 @@ o p r b -w +W d c c @@ -338,19 +339,19 @@ w c d d -w +W o o -w -w +W +W r -w +W o -w -w +W +W r r -w +W d d c @@ -362,8 +363,8 @@ a w c d -w -w +W +W p o x @@ -375,8 +376,8 @@ p B r p -w -w +W +W d c w @@ -387,10 +388,10 @@ a w c d -w +W b p -w +W p p p @@ -398,10 +399,10 @@ p p p p -w +W p G -w +W d c w @@ -437,10 +438,10 @@ a w c i -w -w +W +W p -w +W p p Q @@ -448,10 +449,10 @@ u Q p p -w +W p -w -w +W +W d c w @@ -487,10 +488,10 @@ a w c d -w +W G p -w +W p p p @@ -498,10 +499,10 @@ p p p p -w +W p b -w +W i c w @@ -512,8 +513,8 @@ a w c d -w -w +W +W p r A @@ -525,8 +526,8 @@ p C o p -w -w +W +W d c w @@ -538,19 +539,19 @@ w c f d -w +W r r -w -w +W +W o -w +W r -w -w +W +W o o -w +W d d c @@ -563,7 +564,7 @@ w c c d -w +W b r p @@ -575,7 +576,7 @@ r p o G -w +W d c c @@ -588,19 +589,19 @@ w w c d -w -w +W +W j -w +W G o -w +W r b -w +W j -w -w +W +W d c w @@ -609,33 +610,33 @@ a "} (19,1,1) = {" a -w +a w c h i d d -w -w +W +W j -w +W j -w -w +W +W d i d h c w -w +a a "} (20,1,1) = {" +Y a w -w c k h @@ -654,13 +655,13 @@ h v c w -w a +Y "} (21,1,1) = {" +Y a w -w c c c @@ -679,10 +680,11 @@ c c c w -w a +Y "} (22,1,1) = {" +Y a w w @@ -703,11 +705,11 @@ w w w w -w -w a +Y "} (23,1,1) = {" +Y a a a @@ -729,6 +731,5 @@ a a a a -a -a +Y "} diff --git a/_maps/map_files/Mafia/mafia_unit_test.dmm b/_maps/map_files/Mafia/mafia_unit_test.dmm new file mode 100644 index 00000000000000..93fd1d176ee57e --- /dev/null +++ b/_maps/map_files/Mafia/mafia_unit_test.dmm @@ -0,0 +1,598 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"c" = ( +/turf/open/floor/iron, +/area/centcom/mafia) +"i" = ( +/obj/effect/landmark/mafia, +/turf/open/floor/iron, +/area/centcom/mafia) +"E" = ( +/obj/effect/landmark/mafia/town_center, +/turf/open/floor/iron, +/area/centcom/mafia) +"G" = ( +/turf/closed/indestructible, +/area/centcom/mafia) +"W" = ( +/obj/mafia_game_board, +/turf/open/floor/iron, +/area/centcom/mafia) +"Y" = ( +/turf/template_noop, +/area/template_noop) + +(1,1,1) = {" +G +G +G +G +G +G +G +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(2,1,1) = {" +G +W +i +i +i +W +G +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(3,1,1) = {" +G +i +c +c +c +i +G +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(4,1,1) = {" +G +i +c +E +c +i +G +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(5,1,1) = {" +G +i +c +c +c +i +G +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(6,1,1) = {" +G +W +i +i +i +W +G +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(7,1,1) = {" +G +G +G +G +G +G +G +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(8,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(9,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(10,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(11,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(12,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(13,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(14,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(15,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(16,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(17,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(18,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(19,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(20,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(21,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(22,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(23,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 9b8acb43075cfb..27f23bc77760ba 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -152,6 +152,14 @@ "adp" = ( /turf/closed/wall, /area/station/hallway/primary/starboard) +"adz" = ( +/obj/structure/closet/secure_closet/engineering_chief, +/obj/machinery/airalarm/directional/east, +/obj/structure/cable, +/obj/item/storage/briefcase/secure, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "adD" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/spawner/random/maintenance, @@ -589,6 +597,12 @@ "alE" = ( /turf/open/floor/iron, /area/station/security/courtroom) +"alF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "alI" = ( /obj/machinery/door/window/left/directional/west{ dir = 4; @@ -641,26 +655,6 @@ /obj/effect/turf_decal/tile/green/anticorner/contrasted, /turf/open/floor/iron, /area/station/security/courtroom) -"amu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/box/drinkingglasses, -/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/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/random/structure/crate_empty, -/obj/effect/spawner/random/food_or_drink/donkpockets, -/obj/effect/spawner/random/food_or_drink/cups, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "amy" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -1608,12 +1602,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/construction/storage_wing) -"aEP" = ( -/obj/machinery/light_switch/directional/east, -/obj/structure/dresser, -/obj/item/storage/secure/safe/directional/north, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain/private) "aEW" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -2318,7 +2306,7 @@ /obj/machinery/power/apc/auto_name/directional/west, /obj/effect/landmark/start/bitrunner, /turf/open/floor/iron/dark/textured_half, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "aQR" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -2486,7 +2474,7 @@ }, /obj/effect/spawner/random/bureaucracy/birthday_wrap, /turf/open/floor/iron, -/area/station/construction/storage_wing) +/area/station/cargo/lobby) "aUk" = ( /obj/effect/turf_decal/delivery, /obj/structure/sign/map/right{ @@ -2495,11 +2483,11 @@ pixel_y = 32 }, /turf/open/floor/iron, -/area/station/construction/storage_wing) +/area/station/cargo/lobby) "aUm" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, -/area/station/construction/storage_wing) +/area/station/cargo/lobby) "aUn" = ( /obj/effect/spawner/random/structure/grille, /turf/open/space/basic, @@ -2665,29 +2653,13 @@ }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) -"aWR" = ( -/obj/structure/table/glass, -/obj/machinery/light_switch/directional/north, -/obj/item/storage/secure/briefcase{ - pixel_x = 3; - pixel_y = 5 - }, -/obj/item/storage/medkit/regular{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/cmo) "aXa" = ( /turf/closed/wall, /area/station/security/prison/mess) "aXq" = ( /obj/effect/turf_decal/trimline/brown/filled/line, /turf/open/floor/iron, -/area/station/construction/storage_wing) +/area/station/cargo/lobby) "aXE" = ( /obj/machinery/door/airlock/maintenance{ name = "Service Maintenance" @@ -2915,6 +2887,23 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) +"bar" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = 10 + }, +/obj/item/flashlight/lamp{ + pixel_x = -7; + pixel_y = 18; + start_on = 0 + }, +/obj/item/kitchen/rollingpin{ + pixel_x = -4 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "bas" = ( /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/chapel, @@ -2966,7 +2955,7 @@ }, /obj/effect/turf_decal/trimline/brown/filled/corner, /turf/open/floor/iron, -/area/station/construction/storage_wing) +/area/station/cargo/lobby) "bbd" = ( /obj/machinery/duct, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -3101,12 +3090,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"bdV" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/mob/living/simple_animal/parrot/poly, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "beo" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 @@ -3311,6 +3294,17 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark, /area/station/security/execution/education) +"bhv" = ( +/obj/effect/landmark/blobstart, +/obj/machinery/camera/directional/north{ + c_tag = "Security - Evidence Storage" + }, +/obj/structure/secure_safe/directional/north{ + name = "evidence safe" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/security/evidence) "bhM" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -3479,7 +3473,7 @@ /obj/machinery/light/small/directional/east, /obj/machinery/firealarm/directional/east, /obj/effect/turf_decal/tile/blue, -/mob/living/simple_animal/bot/cleanbot, +/mob/living/basic/bot/cleanbot, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "bkF" = ( @@ -4398,7 +4392,6 @@ /area/station/commons/dorms) "bAI" = ( /obj/machinery/disposal/bin, -/obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -5699,7 +5692,7 @@ "bZz" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "bZB" = ( /obj/effect/turf_decal/siding/purple{ dir = 1 @@ -5804,6 +5797,14 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"cdm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/turf_decal/bot, +/obj/item/electronics/apc, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "cdv" = ( /obj/machinery/door/airlock{ id_tag = "AuxToilet1"; @@ -6926,7 +6927,7 @@ /obj/item/chair, /obj/machinery/firealarm/directional/north, /turf/open/floor/iron, -/area/station/construction/storage_wing) +/area/station/cargo/lobby) "cyS" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -7406,6 +7407,14 @@ /obj/item/hand_labeler, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) +"cKW" = ( +/obj/structure/secure_safe/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Chief Engineer's Office" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "cLa" = ( /obj/structure/weightmachine, /obj/effect/turf_decal/tile/dark_red/half/contrasted, @@ -7652,6 +7661,13 @@ /obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"cQn" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "cQx" = ( /obj/machinery/computer/atmos_control/nitrous_tank{ dir = 1 @@ -7663,6 +7679,22 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/iron, /area/station/engineering/atmos) +"cQz" = ( +/obj/structure/table/glass, +/obj/machinery/light_switch/directional/north, +/obj/item/storage/briefcase/secure{ + pixel_x = 3; + pixel_y = 5 + }, +/obj/item/storage/medkit/regular{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) "cQQ" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ @@ -8696,7 +8728,7 @@ dir = 1 }, /turf/open/floor/iron, -/area/station/construction/storage_wing) +/area/station/cargo/lobby) "dhN" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -9224,15 +9256,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"dth" = ( -/obj/structure/table, -/obj/item/storage/secure/briefcase{ - pixel_x = -7; - pixel_y = 12 - }, -/obj/effect/spawner/random/engineering/flashlight, -/turf/open/floor/iron/dark, -/area/station/security/office) "dtB" = ( /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ dir = 8 @@ -9282,7 +9305,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/textured_half, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "duu" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -9779,6 +9802,11 @@ /obj/machinery/light/small/dim/directional/north, /turf/open/floor/wood, /area/station/commons/vacant_room/office) +"dGT" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/item/clothing/gloves/color/fyellow, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "dGW" = ( /obj/machinery/holopad, /obj/effect/decal/cleanable/dirt, @@ -9880,8 +9908,12 @@ }, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, /obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnancefreezer" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/dark, -/area/station/science/ordnance/freezerchamber) +/area/station/science/ordnance) "dJk" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -10495,6 +10527,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/locker) +"dTN" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/turf/closed/wall/r_wall, +/area/station/science/ordnance) "dTQ" = ( /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 4 @@ -10716,6 +10752,12 @@ /obj/effect/mapping_helpers/turn_off_lights_with_lightswitch, /turf/open/floor/iron, /area/station/cargo/warehouse) +"dXs" = ( +/obj/structure/secure_safe/directional/north{ + name = "armory safe A" + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) "dXA" = ( /obj/structure/closet/crate/trashcart, /obj/effect/spawner/random/contraband/prison, @@ -10887,7 +10929,7 @@ /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 4 }, -/mob/living/simple_animal/bot/medbot/autopatrol, +/mob/living/basic/bot/medbot/autopatrol, /turf/open/floor/iron/white/corner{ dir = 8 }, @@ -11147,6 +11189,19 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) +"eey" = ( +/obj/machinery/firealarm/directional/west, +/obj/structure/rack, +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/storage/briefcase/secure{ + pixel_x = 2; + pixel_y = -2 + }, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office) "eeT" = ( /obj/machinery/vending/hydroseeds{ slogan_delay = 700 @@ -11259,6 +11314,14 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"egp" = ( +/obj/item/storage/briefcase/secure, +/obj/structure/table/wood, +/obj/item/folder/blue, +/obj/item/storage/briefcase/secure, +/obj/item/assembly/flash/handheld, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) "egs" = ( /obj/effect/spawner/random/maintenance/two, /obj/structure/rack, @@ -11372,7 +11435,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/fore) "eih" = ( -/mob/living/simple_animal/bot/cleanbot/medbay, +/mob/living/basic/bot/cleanbot/medbay, /turf/open/floor/iron/white, /area/station/medical/storage) "eiO" = ( @@ -12846,6 +12909,15 @@ "eKP" = ( /turf/closed/wall/r_wall, /area/station/science/ordnance/freezerchamber) +"eLa" = ( +/obj/structure/table/wood, +/obj/item/storage/briefcase/secure{ + desc = "A large briefcase with a digital locking system, and the Nanotrasen logo emblazoned on the sides."; + name = "\improper Nanotrasen-brand secure briefcase exhibit"; + pixel_y = 2 + }, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) "eLb" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -13144,6 +13216,13 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) +"eQr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "eQs" = ( /obj/machinery/air_sensor/air_tank, /turf/open/floor/engine/air, @@ -13559,6 +13638,16 @@ dir = 1 }, /area/station/engineering/atmos/pumproom) +"eYy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "eYz" = ( /obj/machinery/airalarm/directional/east, /obj/machinery/newscaster/directional/north, @@ -13685,6 +13774,16 @@ /obj/item/food/pizzaslice/moldy/bacteria, /turf/open/floor/iron/white, /area/station/medical/abandoned) +"faW" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/table, +/obj/structure/cable, +/obj/item/poster/random_official, +/obj/item/poster/random_official{ + pixel_y = 10 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "fbf" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -14039,7 +14138,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/construction/storage_wing) +/area/station/cargo/lobby) "fhD" = ( /obj/effect/spawner/random/vending/snackvend, /obj/structure/window/reinforced/spawner/directional/east, @@ -14634,14 +14733,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"fqC" = ( -/obj/structure/closet/secure_closet/engineering_chief, -/obj/machinery/airalarm/directional/east, -/obj/structure/cable, -/obj/item/storage/secure/briefcase, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "fqD" = ( /obj/structure/chair/stool/directional/south, /turf/open/floor/wood, @@ -15732,17 +15823,6 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"fOb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/bot, -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/random/structure/crate_empty, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "fOf" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -15752,14 +15832,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/range) -"fOn" = ( -/obj/item/storage/secure/safe/directional/north, -/obj/machinery/camera/directional/north{ - c_tag = "Chief Engineer's Office" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "fOu" = ( /obj/effect/turf_decal/siding/white{ dir = 8 @@ -16207,6 +16279,10 @@ /obj/structure/table, /obj/structure/cable, /obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/fax{ + fax_name = "Security Office"; + name = "Security Office Fax Machine" + }, /turf/open/floor/iron/dark, /area/station/security/office) "fYq" = ( @@ -16222,6 +16298,9 @@ /obj/structure/cable, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "fYC" = ( @@ -16385,6 +16464,18 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/hallway/primary/port) +"gcL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/corner, +/obj/structure/cable, +/obj/machinery/button/door/directional/east{ + name = "Security Mech Garage Door Controls"; + id = "secmechbay"; + req_access = list("security") + }, +/turf/open/floor/iron, +/area/station/security/office) "gcU" = ( /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/science/robotics, @@ -16450,6 +16541,15 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/iron/white, /area/station/security/prison/visit) +"gem" = ( +/obj/structure/table, +/obj/item/storage/briefcase/secure{ + pixel_x = -7; + pixel_y = 12 + }, +/obj/effect/spawner/random/engineering/flashlight, +/turf/open/floor/iron/dark, +/area/station/security/office) "gen" = ( /obj/structure/table/glass, /obj/item/folder/blue{ @@ -17355,6 +17455,17 @@ }, /turf/open/floor/iron, /area/station/service/janitor) +"guO" = ( +/obj/structure/table/wood, +/obj/machinery/light_switch/directional/west, +/obj/item/storage/briefcase/secure{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/storage/lockbox/medal, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain/private) "guR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -17635,6 +17746,19 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"gAk" = ( +/obj/machinery/recharger{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/structure/secure_safe/directional/east, +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = -12; + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) "gAt" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, @@ -17988,17 +18112,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"gHC" = ( -/obj/structure/table/wood, -/obj/machinery/light_switch/directional/west, -/obj/item/storage/secure/briefcase{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/storage/lockbox/medal, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain/private) "gHE" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -18193,6 +18306,15 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"gKH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/office) "gKK" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -18450,6 +18572,11 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) +"gOT" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/mechbay) "gOY" = ( /obj/structure/chair{ dir = 8 @@ -19552,6 +19679,20 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) +"hlj" = ( +/obj/structure/table/wood, +/obj/structure/secure_safe/directional/east, +/obj/machinery/computer/security/wooden_tv{ + pixel_x = 3; + pixel_y = 2 + }, +/obj/machinery/button/door/directional/north{ + id = "detective_shutters"; + name = "detective's office shutters control"; + req_access = list("detective") + }, +/turf/open/floor/carpet, +/area/station/security/detectives_office) "hlq" = ( /obj/structure/chair{ dir = 4 @@ -20264,7 +20405,6 @@ "hyn" = ( /obj/machinery/airalarm/directional/west, /obj/effect/spawner/random/vending/snackvend, -/obj/machinery/airalarm/directional/west, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/neutral/opposingcorners{ dir = 1 @@ -20314,6 +20454,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"hza" = ( +/obj/vehicle/sealed/mecha/ripley/paddy/preset, +/turf/open/floor/iron/recharge_floor, +/area/station/security/mechbay) "hzt" = ( /obj/structure/transit_tube/curved/flipped, /obj/effect/turf_decal/tile/blue{ @@ -22163,6 +22307,13 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron, /area/station/command/heads_quarters/rd) +"iip" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/turf_decal/stripes/line, +/obj/effect/spawner/random/maintenance/two, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "iix" = ( /obj/item/flashlight/lamp, /obj/machinery/newscaster/directional/west, @@ -23608,7 +23759,7 @@ /obj/machinery/byteforge, /obj/effect/turf_decal/box, /turf/open/floor/iron/dark/smooth_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "iGT" = ( /obj/structure/table, /obj/item/paper_bin, @@ -24360,7 +24511,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, /turf/open/floor/iron, -/area/station/construction/storage_wing) +/area/station/cargo/lobby) "iRW" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -24593,6 +24744,13 @@ }, /turf/open/floor/iron, /area/station/command/gateway) +"iVJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "iVN" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -24711,7 +24869,7 @@ }, /obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, /turf/open/floor/iron/dark/textured_half, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "iXt" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/purple, @@ -24776,8 +24934,12 @@ }, /obj/machinery/airalarm/directional/east, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnanceburn" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/dark, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "iYG" = ( /obj/effect/landmark/event_spawn, /obj/effect/turf_decal/tile/neutral{ @@ -25011,7 +25173,7 @@ dir = 4 }, /turf/open/floor/iron, -/area/station/construction/storage_wing) +/area/station/cargo/lobby) "jdv" = ( /obj/machinery/airalarm/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -26026,7 +26188,7 @@ /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 4 }, -/mob/living/simple_animal/pet/cat/runtime, +/mob/living/basic/pet/cat/runtime, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) "juV" = ( @@ -26086,7 +26248,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, -/area/station/construction/storage_wing) +/area/station/cargo/lobby) "jvB" = ( /obj/structure/chair/comfy/black{ dir = 4 @@ -26419,7 +26581,6 @@ /area/station/service/kitchen) "jAd" = ( /obj/machinery/door/airlock/maintenance, -/obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 @@ -26595,8 +26756,8 @@ dir = 8 }, /obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = -6 + pixel_x = -6; + pixel_y = 6 }, /obj/item/storage/medkit/regular, /obj/item/reagent_containers/cup/bottle/multiver, @@ -27177,17 +27338,6 @@ /obj/machinery/light/cold/directional/south, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"jNm" = ( -/obj/effect/landmark/blobstart, -/obj/machinery/camera/directional/north{ - c_tag = "Security - Evidence Storage" - }, -/obj/item/storage/secure/safe/directional/north{ - name = "evidence safe" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/security/evidence) "jNo" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -27264,19 +27414,6 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"jOQ" = ( -/obj/machinery/firealarm/directional/west, -/obj/structure/rack, -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/item/storage/secure/briefcase{ - pixel_x = 2; - pixel_y = -2 - }, -/turf/open/floor/iron/grimy, -/area/station/security/detectives_office) "jOR" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -28150,6 +28287,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/central) +"kdy" = ( +/obj/structure/frame/computer{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/mechbay) "kdA" = ( /obj/machinery/door/airlock/mining{ name = "Warehouse" @@ -28798,6 +28941,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"kqM" = ( +/obj/effect/turf_decal/stripes/corner, +/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/security/mechbay) "kqZ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -28855,13 +29005,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) -"krP" = ( -/obj/item/storage/secure/safe/directional/south, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/commons/vacant_room/commissary) "ksg" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -28987,12 +29130,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/satellite) -"ktY" = ( -/obj/item/storage/secure/safe/directional/north{ - name = "armory safe A" - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/security/armory) "kud" = ( /obj/structure/sign/warning/vacuum/external/directional/south, /obj/effect/turf_decal/stripes/line, @@ -29078,11 +29215,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"kwi" = ( -/obj/effect/spawner/random/structure/crate_empty, -/obj/item/clothing/gloves/color/fyellow, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "kwp" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, @@ -29092,6 +29224,11 @@ }, /turf/open/floor/iron, /area/station/command/gateway) +"kwq" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/closet_empty/crate, +/turf/open/floor/iron, +/area/station/maintenance/port/aft) "kww" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/closed/wall/r_wall, @@ -29726,8 +29863,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, /obj/machinery/airalarm/directional/east, /obj/effect/mapping_helpers/airalarm/engine_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "engine" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/engine, -/area/station/engineering/supermatter) +/area/station/engineering/supermatter/room) "kKp" = ( /obj/structure/rack, /obj/item/gun/energy/laser/carbine/practice{ @@ -30968,12 +31109,10 @@ /obj/structure/bed/medical{ dir = 8 }, -/obj/item/clothing/suit/jacket/straight_jacket, -/obj/item/clothing/glasses/blindfold, -/obj/item/clothing/mask/muzzle, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 }, +/obj/machinery/iv_drip, /turf/open/floor/iron/white, /area/station/security/execution/transfer) "lgl" = ( @@ -31214,6 +31353,12 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/glass/reinforced, /area/station/science/research) +"llU" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "lma" = ( /obj/structure/chair/stool/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -33240,13 +33385,6 @@ dir = 1 }, /area/station/engineering/atmos/storage/gas) -"maY" = ( -/obj/effect/spawner/random/structure/crate_empty, -/obj/effect/turf_decal/stripes/line, -/obj/effect/spawner/random/maintenance/two, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "mbk" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/structure/cable, @@ -33317,6 +33455,21 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/engineering/atmos) +"mcu" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id = "secmechbay"; + name = "Security Mech Bay Shutters" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 4 + }, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "mcF" = ( /obj/structure/table, /obj/machinery/button/door{ @@ -33397,11 +33550,6 @@ /obj/item/food/fortunecookie, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"mec" = ( -/obj/effect/turf_decal/bot, -/obj/effect/spawner/random/structure/crate_empty, -/turf/open/floor/iron, -/area/station/maintenance/port/aft) "mei" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /turf/open/floor/iron, @@ -33537,7 +33685,7 @@ dir = 4 }, /turf/open/floor/iron, -/area/station/construction/storage_wing) +/area/station/cargo/lobby) "mgK" = ( /obj/item/target, /obj/effect/turf_decal/stripes/line{ @@ -35019,8 +35167,8 @@ dir = 1 }, /obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = 4 + pixel_x = 4; + pixel_y = 6 }, /turf/open/floor/iron, /area/station/cargo/miningoffice) @@ -35201,7 +35349,7 @@ name = "Ore Redemtion Window" }, /turf/open/floor/iron, -/area/station/construction/storage_wing) +/area/station/cargo/lobby) "mJE" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -36910,7 +37058,6 @@ /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) "nnt" = ( -/obj/vehicle/ridden/secway, /obj/effect/turf_decal/bot, /obj/structure/cable, /turf/open/floor/iron/dark, @@ -37367,6 +37514,13 @@ }, /turf/open/floor/iron/white, /area/station/medical/office) +"nuB" = ( +/obj/structure/secure_safe/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) "nuI" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -38199,7 +38353,7 @@ }, /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /turf/open/floor/engine, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "nJG" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -39423,6 +39577,20 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/captain/private) +"oha" = ( +/obj/structure/rack, +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/storage/briefcase/secure{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/taperecorder, +/obj/item/clothing/glasses/sunglasses, +/turf/open/floor/wood, +/area/station/service/lawoffice) "ohm" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -39650,6 +39818,12 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"omA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "omF" = ( /obj/machinery/teleport/station, /obj/machinery/status_display/evac/directional/north, @@ -39768,6 +39942,9 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"ope" = ( +/turf/closed/wall, +/area/station/security/mechbay) "oph" = ( /obj/structure/chair/wood/wings{ dir = 8 @@ -39888,15 +40065,6 @@ }, /turf/open/floor/iron, /area/station/security/warden) -"ory" = ( -/obj/structure/table/wood, -/obj/item/storage/secure/briefcase{ - desc = "A large briefcase with a digital locking system, and the Nanotrasen logo emblazoned on the sides."; - name = "\improper Nanotrasen-brand secure briefcase exhibit"; - pixel_y = 2 - }, -/turf/open/floor/carpet, -/area/station/command/corporate_showroom) "orT" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible, /turf/open/floor/iron/dark, @@ -39933,6 +40101,15 @@ /obj/structure/window/reinforced/spawner/directional/east, /turf/open/space, /area/space/nearstation) +"osH" = ( +/obj/structure/secure_safe/hos{ + pixel_x = 36; + pixel_y = 28 + }, +/obj/machinery/status_display/evac/directional/north, +/obj/structure/cable, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/hos) "ota" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -40049,11 +40226,15 @@ "ouj" = ( /obj/structure/bed/medical/emergency, /obj/structure/bed/medical/emergency, -/obj/machinery/iv_drip, -/obj/machinery/iv_drip, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 6 }, +/obj/item/clothing/suit/jacket/straight_jacket, +/obj/item/clothing/suit/jacket/straight_jacket, +/obj/item/clothing/mask/muzzle, +/obj/item/clothing/mask/muzzle, +/obj/item/clothing/glasses/blindfold, +/obj/item/clothing/glasses/blindfold, /turf/open/floor/iron/white, /area/station/security/execution/transfer) "ouk" = ( @@ -40162,20 +40343,6 @@ }, /turf/closed/wall/r_wall, /area/station/engineering/atmos/storage/gas) -"ovz" = ( -/obj/structure/table/wood, -/obj/item/storage/secure/safe/directional/east, -/obj/machinery/computer/security/wooden_tv{ - pixel_x = 3; - pixel_y = 2 - }, -/obj/machinery/button/door/directional/north{ - id = "detective_shutters"; - name = "detective's office shutters control"; - req_access = list("detective") - }, -/turf/open/floor/carpet, -/area/station/security/detectives_office) "ovK" = ( /obj/structure/closet/secure_closet/hop, /turf/open/floor/wood, @@ -40286,6 +40453,10 @@ /obj/item/storage/photo_album/chapel, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) +"oxV" = ( +/obj/machinery/air_sensor/engine_chamber, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "oxW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes/line{ @@ -40936,6 +41107,10 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"oKp" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/turf/open/floor/iron, +/area/station/maintenance/port/aft) "oKx" = ( /obj/structure/tank_dispenser, /obj/machinery/light/directional/north, @@ -41020,15 +41195,6 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"oLL" = ( -/obj/item/storage/secure/safe/hos{ - pixel_x = 36; - pixel_y = 28 - }, -/obj/machinery/status_display/evac/directional/north, -/obj/structure/cable, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/hos) "oLS" = ( /turf/closed/wall/r_wall, /area/station/science/ordnance/testlab) @@ -41554,20 +41720,6 @@ /obj/machinery/telecomms/server/presets/science, /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) -"oXv" = ( -/obj/structure/rack, -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/item/storage/secure/briefcase{ - pixel_x = 2; - pixel_y = -2 - }, -/obj/item/taperecorder, -/obj/item/clothing/glasses/sunglasses, -/turf/open/floor/wood, -/area/station/service/lawoffice) "oXJ" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -41585,6 +41737,25 @@ /obj/item/stack/cable_coil, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) +"oXK" = ( +/obj/structure/safe, +/obj/item/storage/briefcase/secure/riches, +/obj/item/storage/backpack/duffelbag/syndie/hitman, +/obj/item/card/id/advanced/silver/reaper, +/obj/item/lazarus_injector, +/obj/item/gun/energy/disabler, +/obj/item/gun/ballistic/revolver/russian, +/obj/item/ammo_box/a357, +/obj/item/clothing/neck/stethoscope, +/obj/item/book{ + desc = "An undeniably handy book."; + icon_state = "bookknock"; + name = "\improper A Simpleton's Guide to Safe-cracking with Stethoscopes" + }, +/obj/effect/turf_decal/bot_white/left, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) "oXL" = ( /obj/machinery/disposal/bin, /obj/structure/cable, @@ -41738,7 +41909,7 @@ /area/station/security/brig) "paD" = ( /turf/closed/wall, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "pbb" = ( /obj/structure/table, /obj/machinery/microwave, @@ -41897,6 +42068,7 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/coroner, /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/dark, /area/station/medical/morgue) "pdX" = ( @@ -42994,9 +43166,6 @@ /turf/open/floor/iron, /area/station/security/courtroom) "pyh" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 1 - }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -43190,14 +43359,9 @@ /turf/open/floor/iron, /area/station/security/checkpoint/customs) "pBL" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 9 - }, /obj/machinery/newscaster/directional/west, -/obj/structure/table, -/obj/machinery/fax{ - fax_name = "Security Office"; - name = "Security Office Fax Machine" +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 }, /turf/open/floor/iron, /area/station/security/office) @@ -43449,7 +43613,7 @@ /obj/machinery/light/directional/west, /obj/machinery/airalarm/directional/south, /turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "pGn" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -43655,7 +43819,7 @@ /obj/machinery/light/directional/north, /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "pJu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -43774,17 +43938,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) -"pLv" = ( -/obj/machinery/light/directional/south, -/obj/machinery/firealarm/directional/south, -/obj/structure/rack, -/obj/item/storage/secure/briefcase, -/obj/item/clothing/mask/cigarette/cigar, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "pLz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -44076,7 +44229,7 @@ /obj/effect/turf_decal/delivery, /obj/machinery/light/directional/north, /turf/open/floor/iron, -/area/station/construction/storage_wing) +/area/station/cargo/lobby) "pQG" = ( /obj/machinery/porta_turret/ai{ dir = 4 @@ -44615,13 +44768,11 @@ /obj/structure/bed/medical{ dir = 4 }, -/obj/item/clothing/suit/jacket/straight_jacket, -/obj/item/clothing/glasses/blindfold, -/obj/item/clothing/mask/muzzle, /obj/structure/cable, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 }, +/obj/machinery/iv_drip, /turf/open/floor/iron/white, /area/station/security/execution/transfer) "qby" = ( @@ -45304,7 +45455,7 @@ /obj/effect/landmark/start/bitrunner, /obj/machinery/holopad, /turf/open/floor/iron/dark/textured_half, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "qos" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -45435,7 +45586,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron/dark/smooth_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "qrO" = ( /obj/machinery/chem_dispenser/drinks{ dir = 1 @@ -45708,6 +45859,12 @@ dir = 1 }, /area/station/engineering/atmos) +"qxJ" = ( +/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/cargo/lobby) "qyb" = ( /obj/structure/chair{ pixel_y = -2 @@ -46982,11 +47139,9 @@ /obj/machinery/computer/quantum_console, /obj/effect/turf_decal/siding/thinplating_new/dark, /obj/effect/decal/cleanable/cobweb, -/obj/machinery/camera/directional/north{ - c_tag = "Mining Dock" - }, +/obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "qRV" = ( /obj/structure/chair{ dir = 1 @@ -49399,7 +49554,7 @@ "rKe" = ( /obj/machinery/netpod, /turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "rKf" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -49753,19 +49908,11 @@ "rQw" = ( /turf/open/floor/plating/airless, /area/station/solars/starboard/fore) -"rQz" = ( -/obj/item/storage/secure/briefcase, -/obj/structure/table/wood, -/obj/item/folder/blue, -/obj/item/storage/secure/briefcase, -/obj/item/assembly/flash/handheld, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hop) "rQK" = ( /obj/machinery/netpod, /obj/effect/decal/cleanable/robot_debris, /turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "rQS" = ( /obj/structure/table, /obj/item/storage/box/evidence{ @@ -50046,7 +50193,7 @@ /area/station/security/prison/garden) "rVn" = ( /turf/open/floor/iron, -/area/station/construction/storage_wing) +/area/station/cargo/lobby) "rVG" = ( /obj/machinery/door/window/left/directional/east{ dir = 8; @@ -50073,7 +50220,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/construction/storage_wing) +/area/station/cargo/lobby) "rVY" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -50281,6 +50428,26 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/storage) +"saa" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/table, +/obj/machinery/camera/directional/west{ + c_tag = "Security - Office - Port" + }, +/obj/machinery/button/door/directional/west{ + id = "secmechbay"; + name = "Security Mech Garage Door Controls"; + req_access = list("security") + }, +/obj/item/circuitboard/computer/mech_bay_power_console, +/obj/item/stack/sheet/glass{ + pixel_y = 14 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "sab" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, @@ -50316,7 +50483,7 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/effect/landmark/navigate_destination, /turf/open/floor/iron, -/area/station/construction/storage_wing) +/area/station/cargo/lobby) "sal" = ( /obj/machinery/door/poddoor/shutters{ dir = 4; @@ -50394,6 +50561,12 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/white, /area/station/medical/abandoned) +"sby" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/mob/living/basic/parrot/poly, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "sbG" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/east, @@ -50655,7 +50828,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/bitrunner, /turf/open/floor/iron/dark/textured_half, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "sgX" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 4 @@ -51086,11 +51259,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/service/library) -"srf" = ( -/obj/effect/spawner/random/structure/crate_empty, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "sri" = ( /obj/machinery/duct, /turf/open/floor/iron/dark/textured_large, @@ -51119,7 +51287,7 @@ dir = 4 }, /turf/open/floor/iron, -/area/station/construction/storage_wing) +/area/station/cargo/lobby) "srP" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -51607,10 +51775,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"sAE" = ( -/obj/effect/spawner/random/structure/crate_empty, -/turf/open/floor/iron, -/area/station/maintenance/port/aft) "sAF" = ( /obj/effect/turf_decal/siding/purple{ dir = 1 @@ -52534,6 +52698,18 @@ /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"sQz" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id = "secmechbay"; + name = "Security Mech Bay Shutters" + }, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 4 + }, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "sQB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -53231,11 +53407,11 @@ /area/station/maintenance/starboard/fore) "tbl" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Kitchen" - }, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/door/airlock/public/glass{ + name = "Bar" + }, /turf/open/floor/iron, /area/station/commons/lounge) "tbp" = ( @@ -54618,19 +54794,6 @@ /obj/effect/landmark/start/depsec/supply, /turf/open/floor/iron, /area/station/security/checkpoint/supply) -"tBV" = ( -/obj/machinery/recharger{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/item/storage/secure/safe/directional/east, -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green{ - pixel_x = -12; - pixel_y = 5 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hop) "tCC" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 8 @@ -54762,6 +54925,14 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"tFP" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer5, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/item/circuitboard/machine/thermomachine, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/atmos) "tGI" = ( /obj/machinery/light_switch/directional/west, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -55036,14 +55207,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"tKA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/crate_empty, -/obj/effect/turf_decal/bot, -/obj/item/electronics/apc, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "tKE" = ( /turf/closed/wall, /area/station/security/checkpoint/engineering) @@ -55133,23 +55296,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"tLG" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/beaker{ - pixel_x = 10 - }, -/obj/item/flashlight/lamp{ - pixel_x = -7; - pixel_y = 18; - start_on = 0 - }, -/obj/item/kitchen/rollingpin{ - pixel_x = -4 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light/small/dim/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "tLN" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -55692,6 +55838,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/execution/education) +"tVk" = ( +/obj/machinery/light/directional/south, +/obj/machinery/firealarm/directional/south, +/obj/structure/rack, +/obj/item/storage/briefcase/secure, +/obj/item/clothing/mask/cigarette/cigar, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "tVm" = ( /obj/structure/closet/secure_closet/brig, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -57052,6 +57209,18 @@ }, /turf/open/floor/iron, /area/station/commons/locker) +"usQ" = ( +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/structure/table/glass, +/obj/structure/secure_safe/caps_spare/directional/west, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "uta" = ( /obj/structure/rack, /obj/item/book/manual/wiki/security_space_law{ @@ -57165,6 +57334,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"uuO" = ( +/obj/machinery/mech_bay_recharge_port{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/mechbay) "uvw" = ( /obj/machinery/status_display/supply{ pixel_y = 32 @@ -57196,7 +57371,7 @@ dir = 6 }, /turf/open/floor/iron, -/area/station/construction/storage_wing) +/area/station/cargo/lobby) "uvP" = ( /obj/structure/cable, /obj/machinery/door/airlock/virology/glass{ @@ -57662,7 +57837,9 @@ dir = 4; id = "garbage" }, -/obj/machinery/recycler, +/obj/machinery/recycler{ + dir = 8 + }, /turf/open/floor/plating, /area/station/maintenance/disposal) "uEO" = ( @@ -57681,6 +57858,15 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"uEW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/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/dark, +/area/station/security/mechbay) "uFf" = ( /obj/machinery/holopad, /obj/effect/spawner/random/engineering/tracking_beacon, @@ -58559,7 +58745,7 @@ "uTI" = ( /obj/machinery/door/firedoor, /turf/open/floor/iron, -/area/station/construction/storage_wing) +/area/station/cargo/lobby) "uTN" = ( /obj/effect/turf_decal/siding/wood{ dir = 10 @@ -58731,6 +58917,12 @@ /obj/effect/turf_decal/trimline/red/filled/corner, /turf/open/floor/iron, /area/station/security/brig) +"uWs" = ( +/obj/machinery/computer/mech_bay_power_console{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/mechbay) "uWt" = ( /obj/structure/rack, /obj/item/stack/medical/mesh, @@ -59142,6 +59334,17 @@ }, /turf/open/floor/iron, /area/station/security/office) +"vdm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/bot, +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "vdx" = ( /obj/machinery/rnd/experimentor, /turf/open/floor/engine, @@ -60395,16 +60598,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"vzj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/crate_empty, -/obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "vzt" = ( /obj/structure/table/reinforced, /obj/machinery/airalarm/directional/north, @@ -61073,14 +61266,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"vJI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer5, -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, -/obj/effect/spawner/random/structure/crate_empty, -/obj/item/circuitboard/machine/thermomachine, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/dark/textured, -/area/station/engineering/atmos) "vJX" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -61676,6 +61861,16 @@ "vTX" = ( /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) +"vUa" = ( +/obj/structure/table, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north, +/obj/item/stack/rods/two, +/obj/item/stack/cable_coil/five, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "vUx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -61871,6 +62066,13 @@ }, /turf/open/floor/circuit/green/off, /area/station/science/research) +"vXj" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron, +/area/station/security/office) "vXt" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 9 @@ -62203,6 +62405,26 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"wcZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/box/drinkingglasses, +/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/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/cups, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "wde" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 9 @@ -62254,7 +62476,7 @@ "wdM" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, -/area/station/construction/storage_wing) +/area/station/cargo/lobby) "wem" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -62669,6 +62891,9 @@ dir = 1 }, /area/station/engineering/storage_shared) +"wlz" = ( +/turf/closed/wall/r_wall, +/area/station/security/mechbay) "wlL" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 @@ -62696,6 +62921,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/science/robotics/lab) +"wmr" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/vehicle/ridden/secway, +/turf/open/floor/iron, +/area/station/security/office) "wmz" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /turf/open/floor/iron, @@ -63388,6 +63620,15 @@ /obj/item/flashlight/lamp, /turf/open/floor/iron/dark, /area/station/security/execution/education) +"wzq" = ( +/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 = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/office) "wzy" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -64094,25 +64335,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"wOQ" = ( -/obj/structure/safe, -/obj/item/storage/secure/briefcase/riches, -/obj/item/storage/backpack/duffelbag/syndie/hitman, -/obj/item/card/id/advanced/silver/reaper, -/obj/item/lazarus_injector, -/obj/item/gun/energy/disabler, -/obj/item/gun/ballistic/revolver/russian, -/obj/item/ammo_box/a357, -/obj/item/clothing/neck/stethoscope, -/obj/item/book{ - desc = "An undeniably handy book."; - icon_state = "bookknock"; - name = "\improper A Simpleton's Guide to Safe-cracking with Stethoscopes" - }, -/obj/effect/turf_decal/bot_white/left, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/nuke_storage) "wOR" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64476,7 +64698,7 @@ dir = 4 }, /obj/effect/turf_decal/tile/neutral, -/mob/living/simple_animal/bot/cleanbot/autopatrol, +/mob/living/basic/bot/cleanbot/autopatrol, /turf/open/floor/iron, /area/station/hallway/primary/central) "wUt" = ( @@ -64568,9 +64790,9 @@ /turf/open/floor/iron, /area/station/hallway/primary/aft) "wVt" = ( -/obj/item/storage/box/deputy, /obj/structure/table, /obj/item/radio/intercom/directional/west, +/obj/item/storage/box/deputy, /turf/open/floor/iron/dark, /area/station/security/office) "wVy" = ( @@ -64910,6 +65132,13 @@ /obj/structure/cable, /turf/open/floor/iron/white/smooth_large, /area/station/command/heads_quarters/cmo) +"xcv" = ( +/obj/effect/turf_decal/stripes/line, +/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/security/mechbay) "xcz" = ( /obj/effect/turf_decal/stripes/corner, /obj/structure/reagent_dispensers/watertank, @@ -65049,6 +65278,11 @@ /obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /turf/open/floor/engine, /area/station/science/cytology) +"xfB" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "xfD" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -65344,6 +65578,15 @@ }, /turf/open/floor/iron, /area/station/commons/storage/tools) +"xkq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/office) "xkr" = ( /obj/effect/turf_decal/plaque{ icon_state = "L13" @@ -66749,18 +66992,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"xJl" = ( -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/structure/table/glass, -/obj/item/storage/secure/safe/caps_spare/directional/west, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) +"xJv" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/iron/recharge_floor, +/area/station/security/mechbay) "xJA" = ( /obj/structure/sign/warning/docking, /turf/closed/wall, @@ -67240,6 +67475,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"xUx" = ( +/obj/machinery/light_switch/directional/east, +/obj/structure/dresser, +/obj/structure/secure_safe/directional/north, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain/private) "xUB" = ( /obj/structure/sign/directions/security{ dir = 1; @@ -67398,8 +67639,8 @@ pixel_y = 6 }, /obj/item/reagent_containers/condiment/enzyme{ - layer = 5; - pixel_x = -6 + pixel_x = -6; + pixel_y = 5 }, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) @@ -67568,6 +67809,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) +"xYZ" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/turf/closed/wall/r_wall, +/area/station/science/ordnance) "xZb" = ( /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, @@ -84394,11 +84639,11 @@ riW cBc dqN dqN -mec +kwq dqN sMS dqN -mec +kwq jUb jUb njr @@ -84638,7 +84883,7 @@ pOa uOH jUb xIK -tLG +bar nBp dqN pqz @@ -84650,10 +84895,10 @@ lCb jUb bZW dqN -sAE +oKp bOH fkr -mec +kwq cNS dqN jUb @@ -85683,7 +85928,7 @@ vJy njc ctq hnv -srf +xfB qCK syh fRU @@ -88461,7 +88706,7 @@ hGv mNQ vQs aUk -uwx +qxJ aXq ldC qMA @@ -88711,14 +88956,14 @@ wjH mgv cUD cfv -fOb -vzj +vdm +eYy pQI puD vQs vQs pQD -uwx +qxJ aXq agQ fWU @@ -88968,7 +89213,7 @@ jXu lJR jXu wtQ -tKA +cdm fDo xIZ bNU @@ -89208,7 +89453,7 @@ jXu fTT sOP twr -kwi +dGT jXu xVc fsQ @@ -89489,7 +89734,7 @@ voS vQs cyR rVn -uwx +qxJ mgJ aqG iyv @@ -89988,7 +90233,7 @@ rlU vis mCi ixT -wOQ +oXK rlU aaa aEH @@ -91812,7 +92057,7 @@ wvo xCl nMz pJR -rQz +egp kfA rWH oOE @@ -91847,7 +92092,7 @@ ePX svQ duu pKP -aWR +cQz rQd cJm jGw @@ -92067,9 +92312,9 @@ oIa cpn koa srP -krP +nuB pJR -tBV +gAk qAA uFQ eIy @@ -94341,7 +94586,7 @@ aaa aaa aaa rJB -jNm +bhv dxe wTO xxZ @@ -94380,7 +94625,7 @@ tKN aaf dsQ mZL -xJl +usQ aGQ acf hmq @@ -94641,7 +94886,7 @@ nxO qXF qXF aMB -pLv +tVk duI jnt cdC @@ -94657,7 +94902,7 @@ jzN sYh qeZ nBs -ory +eLa vyi nNY htd @@ -95369,7 +95614,7 @@ aaa aaa cTk aeq -ktY +dXs tJE kVU tJE @@ -97158,219 +97403,214 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -iTZ -ahj -ahj -iTZ -iTZ -iTZ -iTZ -ahj -gyG -vZm -ahj -vZm -kYg -mLL -kYg -rzY -jVv -esR -ieV -qwh -qwh -ieV -ieV -ieV -ieV -iHD -wCO -nOU -alE -alE -dCo -vWI -wwY -wwY -qcy -olw -olw -wEG -rng -qBC -tKN -aaf -dsQ -dsQ -dho -rhL -sLd -qXF -aMB -hQv -bVs -aNG -mJP -qpr -mBT -lSz -qaq -tvE -tvE -bUO -tvE -yjd -yjd -yjd -yjd -tvE -flm -htd -fBz -udN -sxg -suW -uMR -jUh -wUj -oMW -hpB -aRI -iug -nZf -uTP -eut -vlY -uwK -wmg -jAt -mET -liD -iAk -nSB -fXd -xwl -sNn -ouZ -cSN -eZz -sAF -hZO -xvI -jBk -qNz -mZO -klu -vjk -qOs -kZk -kZk -kZk -kZk -kZk -kZk -dKC -tVR -vbt -oRV -iUm -lMJ -lMJ -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(114,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 +gdb +gdb +gdb +gdb +gdb +iTZ +ahj +ahj +iTZ +iTZ +iTZ +iTZ +ahj +gyG +vZm +ahj +vZm +kYg +mLL +kYg +rzY +jVv +esR +ieV +qwh +qwh +ieV +ieV +ieV +ieV +iHD +wCO +nOU +alE +alE +dCo +vWI +wwY +wwY +qcy +olw +olw +wEG +rng +qBC +tKN +aaf +dsQ +dsQ +dho +rhL +sLd +qXF +aMB +hQv +bVs +aNG +mJP +qpr +mBT +lSz +qaq +tvE +tvE +bUO +tvE +yjd +yjd +yjd +yjd +tvE +flm +htd +fBz +udN +sxg +suW +uMR +jUh +wUj +oMW +hpB +aRI +iug +nZf +uTP +eut +vlY +uwK +wmg +jAt +mET +liD +iAk +nSB +fXd +xwl +sNn +ouZ +cSN +eZz +sAF +hZO +xvI +jBk +qNz +mZO +klu +vjk +qOs +kZk +kZk +kZk +kZk +kZk +kZk +dKC +tVR +vbt +oRV +iUm +lMJ +lMJ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(114,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -97425,12 +97665,17 @@ rDE fOw nQC ikZ +vXj +iGj +iGj +iGj +iGj pBL iGj iGj iGj vdi -iGj +wmr ljf kYg nnt @@ -97670,11 +97915,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa rrt aaa vaB @@ -97682,6 +97922,11 @@ kKp iDq mPT fCn +gKH +gcL +wzq +wzq +xkq pyh aja lyF @@ -97927,11 +98172,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa rrt lMJ gdb @@ -97939,6 +98179,11 @@ hhl fOf eZI dgD +ope +ope +mcu +sQz +ope kYg vGt fYb @@ -98186,16 +98431,16 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa gdb nMV luV rqs dgD +faW +saa +uEW +eQr +ope jGl kxA wxj @@ -98240,7 +98485,7 @@ ogL tyY aPs cUX -gHC +guO nOq xDa vwP @@ -98443,22 +98688,22 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa gdb ksg aGM rpz dgD +vUa +cQn +kqM +omA +ope jGl kxA xXh ooG wxj -dth +gem ipz nOv dgS @@ -98698,11 +98943,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa rrt lMJ gdb @@ -98710,6 +98950,11 @@ ksg aGM rpz dgD +xJv +alF +xcv +hza +ope rtI kxA kAT @@ -98955,11 +99200,6 @@ aaa aav aaa aaa -aaa -aaa -aaa -aaa -aaa rrt aaa ikZ @@ -98967,6 +99207,11 @@ ksg vuP rpz dgD +uuO +alF +xcv +uuO +ope jGl kxA qmu @@ -98981,7 +99226,7 @@ pBG sOZ uWo jMy -jOQ +eey aHr mhA xNo @@ -99212,11 +99457,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa rrt lMJ gdb @@ -99224,6 +99464,11 @@ dhN nuI qJa dgD +kdy +iVJ +llU +uWs +ope kYg jAN wxj @@ -99470,17 +99715,17 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa tLb gdb ikZ gdb ikZ gdb +wlz +gOT +gOT +wlz +wlz hYd olD mLx @@ -99502,7 +99747,7 @@ bHN ilh ilh ilh -oXv +oha fbs itp soX @@ -99584,7 +99829,7 @@ fhi fhi uEo fiS -hqj +gyQ eRn hqj hqj @@ -99774,7 +100019,7 @@ wEG htd qBC syo -aEP +xUx cRU oRn sjS @@ -99841,7 +100086,7 @@ huj fhi xEU iqx -deY +xYZ gil deY oet @@ -100009,7 +100254,7 @@ lAM dDe lAM sWV -ovz +hlj dbj jyQ lGj @@ -100355,7 +100600,7 @@ ujk jvo aHH iYE -pCa +dTN dEF pCa cOT @@ -101276,7 +101521,7 @@ aaa rrt lMJ mxn -oLL +osH gTt sdu fad @@ -103137,7 +103382,7 @@ ttF sRY wDh uIs -amu +wcZ gsr pUA wFM @@ -105208,7 +105453,7 @@ wqA ksT rAp tUn -maY +iip ehG lYH cpU @@ -107994,7 +108239,7 @@ vHs iBm uXd sqE -fOn +cKW dJP bfO pCt @@ -108255,7 +108500,7 @@ nLz jEh hYE rEd -bdV +sby tUw iqU jLg @@ -108512,7 +108757,7 @@ qtm fyJ qVD cuc -fqC +adz tUw rHq peX @@ -111326,7 +111571,7 @@ wBE oNs eyD qZB -oNs +oxV hRl jWE auc @@ -112644,7 +112889,7 @@ nwK fFC uVf kRc -vJI +tFP ich jnQ tBM diff --git a/_maps/map_files/NSVBlueshift/Blueshift.dmm b/_maps/map_files/NSVBlueshift/Blueshift.dmm index 6bbfebbb62a5ca..ab9fb26865aa86 100644 --- a/_maps/map_files/NSVBlueshift/Blueshift.dmm +++ b/_maps/map_files/NSVBlueshift/Blueshift.dmm @@ -46,16 +46,6 @@ /mob/living/basic/mothroach, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"aaO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/station/cargo/miningdock) "aaR" = ( /obj/machinery/camera/directional/north{ c_tag = " Prison - East"; @@ -88,16 +78,8 @@ /turf/open/floor/plating, /area/station/engineering/atmos/pumproom) "abk" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/coldroom) "abl" = ( @@ -108,9 +90,6 @@ /obj/item/bedsheet{ pixel_y = 8 }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 6 - }, /turf/open/floor/iron/dark, /area/station/security/brig) "abA" = ( @@ -138,12 +117,6 @@ /area/station/maintenance/port/upper) "abJ" = ( /obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -185,12 +158,8 @@ "acE" = ( /obj/machinery/holopad, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/chapel) "acJ" = ( @@ -202,12 +171,8 @@ /turf/open/floor/iron/smooth_edge, /area/station/cargo/miningdock) "acS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/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/safe) "acT" = ( @@ -231,19 +196,6 @@ /turf/closed/wall/rust, /area/station/maintenance/solars/starboard/fore) "adb" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/structure/trash_pile, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -251,7 +203,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "adi" = ( /turf/closed/wall/rust, @@ -262,12 +214,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -320,12 +268,6 @@ /turf/open/floor/iron, /area/station/commons/dorms) "adF" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/item/radio/intercom/directional/west, /obj/structure/sink/directional/east, /turf/open/floor/iron/cafeteria, @@ -354,10 +296,8 @@ /area/station/hallway/primary/central) "adQ" = ( /obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/blueshield) "adR" = ( @@ -395,16 +335,12 @@ /turf/open/floor/carpet/purple, /area/station/science/breakroom) "aea" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/camera{ c_tag = "Security - Brig Far Starboard"; dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/extinguisher_cabinet/directional/east, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, @@ -425,8 +361,8 @@ }, /obj/effect/turf_decal/delivery/red, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/mess) @@ -471,6 +407,9 @@ /turf/open/floor/plating, /area/station/maintenance/department/eva) "aey" = ( +/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/interrogation) "aeM" = ( @@ -483,9 +422,7 @@ /turf/open/floor/iron, /area/station/hallway/secondary/service) "aeP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -545,8 +482,8 @@ "afm" = ( /obj/effect/spawner/random/trash/mess, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/fore/upper) "afn" = ( @@ -616,8 +553,7 @@ "afL" = ( /obj/structure/reagent_dispensers/wall/peppertank/directional/west, /obj/machinery/light/directional/west, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ +/obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 }, /turf/open/floor/iron/dark/side{ @@ -642,10 +578,6 @@ /area/station/maintenance/aft/upper) "agb" = ( /obj/machinery/vending/wardrobe/atmos_wardrobe, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/office) "agc" = ( @@ -667,12 +599,8 @@ }, /obj/machinery/door/airlock/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/upper) "agl" = ( @@ -684,18 +612,13 @@ pixel_x = -12 }, /obj/structure/cable, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/station/solars/starboard/aft) "agv" = ( /obj/structure/transit_tube/curved{ dir = 1 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "agy" = ( /obj/effect/turf_decal/siding/wood{ @@ -714,7 +637,6 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, -/obj/effect/turf_decal/stripes, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) "agI" = ( @@ -729,12 +651,8 @@ /area/station/maintenance/port/upper) "agL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/command) "agN" = ( @@ -759,12 +677,8 @@ id_tag = "HoPdoor"; name = "Head of Personel's Quarters" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/command/hop, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) @@ -821,12 +735,8 @@ /obj/machinery/door/airlock/rd{ name = "Research Director's Quarters" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/science/rd, /obj/machinery/duct, /turf/open/floor/carpet/purple, @@ -912,9 +822,6 @@ /turf/open/floor/iron/dark, /area/station/security/prison/garden) "aiC" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, /obj/machinery/suit_storage_unit/engine, /turf/open/floor/iron/dark, /area/station/engineering/break_room) @@ -978,8 +885,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/iron, @@ -1027,12 +934,8 @@ name = "Gravity Generator Area" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/construction, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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) "ajr" = ( @@ -1071,18 +974,14 @@ "ajB" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 6 + dir = 4 }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "ajD" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/central) "ajH" = ( @@ -1102,8 +1001,8 @@ /area/station/medical/exam_room) "ajK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip{ dir = 2 }, @@ -1151,12 +1050,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /obj/machinery/duct, /turf/open/floor/plating, @@ -1177,8 +1072,8 @@ "akl" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/public/glass{ name = "Central Hallway" @@ -1237,16 +1132,6 @@ /turf/open/floor/catwalk_floor, /area/station/engineering/atmos) "akS" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/structure/chair/office{ dir = 4 }, @@ -1291,8 +1176,8 @@ "alt" = ( /obj/structure/cable, /obj/effect/landmark/start/botanist, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -1302,10 +1187,6 @@ /turf/open/floor/mineral/plastitanium, /area/station/science/robotics/lab) "alH" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/table, /obj/machinery/chem_dispenser/drinks{ dir = 8 @@ -1313,6 +1194,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/command/captain_dining) "alQ" = ( @@ -1324,15 +1206,13 @@ }, /obj/effect/spawner/random/trash/cigbutt, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/electronic_marketing_den) "alS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -1420,25 +1300,11 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) -"amU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/wood, -/area/station/service/barber) "ana" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, @@ -1465,9 +1331,7 @@ /obj/structure/railing{ dir = 4 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "anz" = ( /obj/structure/table, @@ -1533,9 +1397,11 @@ }, /area/station/security/corrections_officer) "anW" = ( -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/salon/lower) +/obj/structure/reagent_anvil, +/obj/machinery/light/directional/north, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/stone, +/area/station/service/forge) "anZ" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 6 @@ -1595,13 +1461,6 @@ dir = 8 }, /area/station/security/prison/workout) -"aoF" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, -/turf/open/floor/iron, -/area/station/security/prison/mess) "aoI" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -1616,37 +1475,19 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, /area/station/maintenance/department/medical) -"aoM" = ( -/obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/blueshield) "aoO" = ( /obj/machinery/button/door{ id = "MainSurgeryTheatre"; name = "Privacy Shutter Controll"; pixel_x = 26 }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) "aoR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/carpet/blue, /area/station/medical/break_room) @@ -1668,22 +1509,15 @@ /area/station/security/prison/upper) "apa" = ( /obj/machinery/vending/coffee, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, /obj/structure/cable, /obj/machinery/camera{ c_tag = "Departures Customs"; dir = 9; name = "customs camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) @@ -1700,10 +1534,6 @@ dir = 4; id = "garbage" }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/plating, /area/station/maintenance/disposal) @@ -1739,24 +1569,26 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/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, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "apO" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/xenobio_disposals) "apR" = ( /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) +"apW" = ( +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/hallway/primary/port) "apX" = ( /obj/effect/turf_decal/bot_white, /obj/machinery/light/small/directional/south, @@ -1767,10 +1599,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) -"apY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/science/genetics) "aqb" = ( /obj/item/kirbyplants/random, /turf/open/floor/iron/dark, @@ -1926,12 +1754,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /obj/structure/cable, @@ -1941,7 +1765,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/wood, /area/station/command/heads_quarters/ce) @@ -1967,8 +1791,8 @@ listening = 0; name = "Station Intercom (Court)" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/courtroom) "arT" = ( @@ -1994,20 +1818,10 @@ /turf/open/floor/iron, /area/station/science) "asc" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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, +/turf/open/floor/iron, /area/station/security/brig) "asd" = ( /turf/closed/wall/r_wall, @@ -2021,9 +1835,7 @@ dir = 1 }, /obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) "ass" = ( @@ -2038,46 +1850,31 @@ /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/commons/vacant_room/commissary) "asA" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "asF" = ( /obj/effect/turf_decal/vg_decals/numbers/two, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/safe) "asH" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/barber) "asK" = ( @@ -2085,12 +1882,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -2110,27 +1903,13 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/power/apc/auto_name/directional/north, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"asW" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "asX" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, /obj/machinery/light/directional/south, /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/smooth_large, @@ -2153,12 +1932,8 @@ /area/station/commons/dorms) "atk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva/upper) "atm" = ( @@ -2195,12 +1970,6 @@ }, /turf/open/floor/carpet, /area/station/security/prison/rec) -"atN" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/space/nearstation) "atW" = ( /obj/effect/turf_decal/trimline/blue/corner, /obj/effect/landmark/start/assistant, @@ -2243,25 +2012,10 @@ dir = 4 }, /area/station/security/range) -"auh" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/test_chambers) "auv" = ( /obj/effect/turf_decal/bot_white/left, -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 10 - }, /obj/effect/spawner/random/structure/crate, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/small, /area/station/cargo/miningdock) "auH" = ( @@ -2280,8 +2034,8 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "auR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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, @@ -2290,29 +2044,21 @@ /obj/structure/table, /obj/item/stack/package_wrap, /obj/item/hand_labeler, -/obj/effect/turf_decal/tile/green{ +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/green/filled/corner{ dir = 8 }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green, -/obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/corner{ dir = 1 }, /area/station/service/hydroponics) "auZ" = ( -/obj/item/toy/plush/skyrat/borbplushie, +/obj/item/toy/plush/nova/borbplushie, /turf/open/floor/plating, /area/station/maintenance/fore/upper) "avb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/exit) "avc" = ( @@ -2351,9 +2097,6 @@ /turf/open/floor/iron/dark, /area/station/common/night_club) "avr" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /obj/structure/table/reinforced, /obj/item/inducer, /obj/item/construction/rld, @@ -2361,10 +2104,8 @@ /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) "avw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/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/bar/backroom) "avy" = ( @@ -2378,9 +2119,7 @@ "avB" = ( /obj/machinery/light/directional/north, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos/office) "avF" = ( @@ -2424,12 +2163,6 @@ dir = 9 }, /area/station/commons/dorms) -"avO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "avP" = ( /obj/structure/reagent_dispensers/fueltank/large, /obj/effect/turf_decal/bot, @@ -2445,10 +2178,7 @@ /area/station/maintenance/department/medical) "avR" = ( /obj/effect/landmark/carpspawn, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "avX" = ( /obj/structure/window/reinforced/spawner/directional/south, @@ -2456,15 +2186,10 @@ dir = 8; pixel_x = 5 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -2474,8 +2199,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -2491,12 +2216,8 @@ }, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/detectives_office) "awq" = ( @@ -2506,12 +2227,8 @@ }, /area/station/commons/fitness) "awA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/service/hydroponics/garden/abandoned) "awC" = ( @@ -2525,8 +2242,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/maintenance/abandon_diner) @@ -2540,19 +2257,14 @@ /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/port/aft) "awV" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/security/checkpoint) -"awW" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/tcommsat/computer) "awX" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/trimline/purple/filled/warning{ @@ -2569,12 +2281,8 @@ id_tag = "RDdoor"; name = "Research Director's Office" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -2600,22 +2308,14 @@ /turf/closed/wall/r_wall, /area/station/command/heads_quarters/nt_rep) "axi" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/common/tailoring) "axj" = ( /obj/machinery/conveyor{ id = "cargounload" }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/machinery/camera/directional/east{ c_tag = "Cargo Bay - Starboard"; name = "cargo camera" @@ -2625,7 +2325,7 @@ /area/station/cargo/storage) "axk" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/qm) "axm" = ( @@ -2634,10 +2334,7 @@ /area/station/commons/dorms/room5) "axq" = ( /obj/structure/closet/lasertag/blue, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, +/obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -2676,8 +2373,8 @@ "axy" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/directional/west, /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, @@ -2692,9 +2389,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/storage_shared) "axI" = ( @@ -2719,7 +2414,7 @@ /area/station/security/checkpoint/medical) "axS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/circuits) "axU" = ( @@ -2750,12 +2445,8 @@ dir = 4 }, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/medium{ dir = 8 }, @@ -2791,12 +2482,6 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "ayM" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -2824,8 +2509,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/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/port/upper) "azj" = ( @@ -2855,12 +2540,8 @@ /area/station/maintenance/fore/upper) "azB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction/flip{ dir = 2 }, @@ -2872,8 +2553,8 @@ }, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/old, /area/station/cargo/warehouse) "azU" = ( @@ -2888,15 +2569,11 @@ id_tag = "Toilet1"; name = "Stall 1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) "aAb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/dark, /area/station/escapepodbay) @@ -2911,12 +2588,6 @@ /obj/structure/closet, /turf/open/floor/plating, /area/station/maintenance/disposal) -"aAg" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "aAj" = ( /obj/structure/window/spawner/directional/east, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -2925,29 +2596,17 @@ /turf/open/floor/iron/dark, /area/station/engineering/atmos) "aAk" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/dark/side{ dir = 8 }, /area/station/hallway/primary/port) "aAo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/aisat_interior) "aAw" = ( @@ -3032,7 +2691,7 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "aBz" = ( -/obj/item/storage/secure/safe/directional/east, +/obj/structure/secure_safe/directional/east, /turf/open/floor/carpet/green, /area/station/command/heads_quarters/nt_rep) "aBB" = ( @@ -3056,24 +2715,16 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/disposal) "aBG" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "aBK" = ( @@ -3126,9 +2777,7 @@ name = "Confession Booth"; req_access = list("crematorium") }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/service/chapel/office) "aCf" = ( @@ -3157,7 +2806,6 @@ /obj/effect/turf_decal/loading_area{ dir = 1 }, -/obj/effect/turf_decal/stripes, /turf/open/floor/plating, /area/station/escapepodbay) "aCu" = ( @@ -3194,12 +2842,6 @@ dir = 4 }, /obj/machinery/newscaster/directional/west, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/service/hydroponics) @@ -3212,11 +2854,10 @@ /area/station/maintenance/port/upper) "aCT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red{ + dir = 1 }, /turf/open/floor/iron, /area/station/security/execution/transfer) @@ -3228,12 +2869,8 @@ /turf/open/floor/carpet, /area/station/service/chapel) "aDa" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs/medium{ dir = 8 }, @@ -3252,12 +2889,8 @@ /area/station/security/courtroom) "aDi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -3265,14 +2898,9 @@ /obj/machinery/door/airlock/highsecurity{ name = "Gravity Generator Room" }, -/obj/effect/turf_decal/tile/yellow, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/sign/warning/radiation/directional/north, /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "grav-gen" @@ -3306,12 +2934,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -3368,24 +2992,9 @@ }, /area/station/hallway/secondary/exit) "aEy" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "aEz" = ( /obj/machinery/door/airlock/virology{ @@ -3410,35 +3019,20 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/medical/virology, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology) "aEL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/bridge) "aEQ" = ( /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, /area/station/maintenance/department/security/greater) -"aEU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/central/aft) "aEX" = ( /obj/effect/turf_decal/bot, /obj/structure/closet/athletic_mixed, @@ -3486,10 +3080,6 @@ /area/station/ai_monitored/turret_protected/ai) "aFn" = ( /obj/machinery/door/poddoor/incinerator_atmos_main, -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /turf/open/floor/engine/vacuum, /area/station/maintenance/disposal/incinerator) "aFw" = ( @@ -3497,13 +3087,11 @@ /obj/structure/railing/corner{ dir = 1 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/glass/reinforced, /area/station/security/prison/safe) "aFx" = ( /obj/structure/sign/shuttleg250, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/dark/herringbone, /area/station/cargo/storage) "aFD" = ( @@ -3562,7 +3150,6 @@ /area/station/service/kitchen) "aFW" = ( /obj/machinery/computer/atmos_control, -/obj/effect/turf_decal/bot, /obj/machinery/light/directional/north, /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/dark, @@ -3571,12 +3158,6 @@ /obj/structure/chair/sofa/bench/right{ pixel_y = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -3641,8 +3222,8 @@ /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/science) @@ -3656,46 +3237,31 @@ /area/station/command/heads_quarters/ce) "aGS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/hallway/secondary/command) "aGV" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/item/folder/blue{ pixel_x = 3; pixel_y = 3 }, /obj/item/folder/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/item/aicard, +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/blue, -/obj/item/aicard, /turf/open/floor/iron/dark, /area/station/command/bridge) "aHd" = ( /turf/closed/wall/rust, /area/station/maintenance/department/security/greater) "aHh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) @@ -3745,12 +3311,8 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "aHy" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/security/detectives_office) "aHz" = ( @@ -3796,19 +3358,12 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/starboard/fore) "aHV" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /obj/machinery/cryo_cell, /turf/open/floor/iron, /area/station/medical/cryo) @@ -3816,19 +3371,13 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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, /area/station/science/ordnance/storage) "aHZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) @@ -3854,9 +3403,7 @@ }, /obj/effect/mapping_helpers/airlock/access/all/science/research, /obj/structure/cable, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/maintenance/department/science/xenobiology) "aIz" = ( /obj/machinery/door/firedoor, @@ -3890,19 +3437,9 @@ /turf/closed/wall/r_wall, /area/station/maintenance/eva_shed/starboard) "aIF" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/table, /obj/item/wrench, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "aIH" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -3916,15 +3453,10 @@ }, /area/station/hallway/primary/central/aft) "aIS" = ( -/obj/effect/turf_decal/bot, /obj/structure/table/glass, /obj/item/melee/flyswatter, /obj/item/clothing/suit/utility/beekeeper_suit, /obj/item/clothing/head/utility/beekeeper_head, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -3939,12 +3471,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth_large, /area/station/cargo/storage) "aJc" = ( @@ -4014,30 +3542,10 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/carpet, /area/station/security/courtroom) -"aJI" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) "aJL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -4084,12 +3592,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable/layer1, /obj/structure/disposalpipe/segment{ dir = 4 @@ -4129,13 +3633,6 @@ pixel_x = 24; req_access = list("aux_base") }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /turf/open/floor/iron, /area/station/construction/mining/aux_base) "aKt" = ( @@ -4166,12 +3663,8 @@ /area/station/service/library) "aKI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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/science/research) @@ -4184,27 +3677,13 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/public/glass{ name = "East RnD Wing" }, /turf/open/floor/iron, /area/station/science/research) -"aKY" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "aLa" = ( /obj/structure/closet/crate, /obj/effect/turf_decal/bot, @@ -4255,7 +3734,7 @@ /obj/item/stock_parts/cell/high, /obj/item/inducer, /obj/item/inducer, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) "aLP" = ( @@ -4263,8 +3742,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/structure/sign/poster/random/directional/west, /turf/open/floor/iron, @@ -4312,7 +3791,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/courtroom) "aMl" = ( @@ -4346,22 +3825,11 @@ }, /turf/open/floor/iron/chapel, /area/station/service/chapel) -"aME" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/security/lockers) "aMJ" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/item/kirbyplants/random, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/engineering/main) @@ -4388,9 +3856,7 @@ "aMU" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -4402,10 +3868,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/abandon_office) -"aNj" = ( -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/port/central) "aNm" = ( /turf/closed/wall, /area/station/maintenance/port/upper) @@ -4431,22 +3893,12 @@ /turf/open/floor/plating, /area/station/cargo/storage) "aNv" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/effect/decal/cleanable/oil, /turf/open/floor/plating/airless, /area/station/maintenance/port/upper) "aNy" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -4467,12 +3919,6 @@ /turf/open/floor/plating, /area/station/maintenance/pool_maintenance) "aNO" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, @@ -4490,20 +3936,14 @@ /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/table, /obj/item/folder/red, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /turf/open/floor/iron/dark/side, /area/station/security/checkpoint/escape) "aNU" = ( /obj/effect/turf_decal/bot, /obj/machinery/power/emitter, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, /obj/effect/turf_decal/stripes{ dir = 6 }, @@ -4519,6 +3959,9 @@ /obj/machinery/smartfridge/chemistry/virology/preloaded, /obj/machinery/light/directional/east, /obj/structure/reagent_dispensers/wall/virusfood/directional/east, +/obj/effect/turf_decal/trimline/green/filled/end{ + dir = 4 + }, /turf/open/floor/iron/white, /area/station/medical/virology) "aOe" = ( @@ -4537,15 +3980,6 @@ /obj/effect/spawner/random/trash/moisture_trap, /turf/open/floor/plating, /area/station/maintenance/aft/upper) -"aOm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/brig) "aOv" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -4596,12 +4030,6 @@ /area/station/medical/cryo) "aOT" = ( /obj/effect/turf_decal/bot_white/right, -/obj/effect/turf_decal/stripes{ - dir = 9 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 6 - }, /turf/open/floor/iron/dark/small, /area/station/cargo/miningdock) "aOU" = ( @@ -4634,20 +4062,17 @@ /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) "aPq" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/machinery/washing_machine, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, /turf/open/floor/iron/cafeteria, /area/station/commons/locker) "aPt" = ( @@ -4672,12 +4097,8 @@ /obj/effect/turf_decal/tile/purple/half{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/side{ dir = 4 }, @@ -4685,24 +4106,10 @@ "aPz" = ( /obj/effect/turf_decal/vg_decals/numbers/six, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/safe) -"aPA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/prison) "aPB" = ( /obj/structure/closet/firecloset, /obj/effect/turf_decal/tile/neutral, @@ -4750,7 +4157,6 @@ /area/station/maintenance/fore/upper) "aQb" = ( /obj/structure/railing/corner, -/obj/effect/turf_decal/stripes/corner, /turf/open/floor/plating/rust, /area/station/maintenance/department/science/xenobiology) "aQc" = ( @@ -4800,12 +4206,8 @@ /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/corner, /area/station/maintenance/department/engineering/engine_aft_starboard) "aQq" = ( @@ -4818,12 +4220,8 @@ /area/station/engineering/atmos/hfr_room) "aQr" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/ai_monitored/security/armory) "aQu" = ( @@ -4833,16 +4231,6 @@ /area/station/engineering/transit_tube) "aQw" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, /obj/machinery/field/generator, /turf/open/floor/iron, /area/station/engineering/storage) @@ -4867,13 +4255,6 @@ }, /turf/open/floor/wood, /area/station/maintenance/abandon_art_studio) -"aQU" = ( -/obj/machinery/cryo_cell, -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/medical/cryo) "aQY" = ( /turf/closed/wall, /area/station/medical/psychology) @@ -4913,12 +4294,8 @@ /obj/effect/turf_decal/tile/bar{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -4926,7 +4303,6 @@ /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "aRD" = ( -/obj/effect/turf_decal/stripes, /obj/structure/liquid_pump, /obj/structure/railing, /turf/open/floor/plating, @@ -4946,12 +4322,8 @@ /area/station/maintenance/starboard/fore) "aSf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/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) "aSh" = ( @@ -4959,23 +4331,6 @@ /obj/structure/railing, /turf/open/openspace, /area/station/hallway/secondary/command) -"aSi" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) "aSk" = ( /obj/machinery/portable_atmospherics/scrubber, /obj/effect/turf_decal/delivery, @@ -5033,9 +4388,7 @@ /obj/effect/turf_decal/stripes/white/corner{ dir = 1 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "aSG" = ( /obj/machinery/atmospherics/components/binary/pump{ @@ -5119,9 +4472,8 @@ /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage) "aTP" = ( @@ -5183,19 +4535,33 @@ /obj/machinery/status_display/evac/directional/west, /turf/open/floor/iron/dark, /area/station/commons/fitness) +"aUg" = ( +/obj/structure/chair/stool/bar/directional{ + dir = 1 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/prison/mess) "aUj" = ( /obj/machinery/holopad, /obj/structure/cable, /obj/effect/landmark/start/barber, /turf/open/floor/wood/tile, /area/station/service/barber) +"aUr" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/shuttle/evac/airless, +/area/space/nearstation) "aUy" = ( /turf/closed/wall, /area/station/service/hydroponics/garden) "aUF" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/gateway) "aUI" = ( @@ -5208,7 +4574,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "aUO" = ( -/obj/effect/turf_decal/tile/bar, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/service{ name = "Bar" @@ -5232,12 +4597,12 @@ /area/station/security/checkpoint/customs) "aUX" = ( /obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/loading_area/white{ +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/arrows/white{ dir = 1 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) "aUY" = ( @@ -5249,7 +4614,7 @@ /area/station/service/bar/atrium) "aVm" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/small/directional/east, /turf/open/floor/plating, /area/station/service/power_station) @@ -5267,12 +4632,6 @@ /turf/closed/wall/mineral/titanium, /area/station/science/ordnance/bomb) "aVv" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/sink/directional/east, /turf/open/floor/iron/kitchen{ dir = 1 @@ -5296,7 +4655,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5327,12 +4686,8 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "aVT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hallup5"; location = "hallup4" @@ -5366,64 +4721,28 @@ /obj/structure/bookcase/random/fiction, /turf/open/floor/wood, /area/station/security/prison/rec) -"aWl" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "aWp" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/break_room) -"aWq" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "aWr" = ( /obj/machinery/door/airlock/medical/glass{ name = "Cryogenics" }, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/medical/general, +/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "aWA" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/cable, /obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "aWD" = ( @@ -5439,10 +4758,7 @@ "aWL" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "aWM" = ( /obj/effect/turf_decal/delivery, @@ -5505,12 +4821,8 @@ "aXn" = ( /obj/item/cigbutt, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/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/aft/upper) "aXo" = ( @@ -5524,12 +4836,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/medical/central) "aXs" = ( @@ -5546,8 +4854,8 @@ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/surgery) @@ -5584,7 +4892,7 @@ /turf/open/floor/circuit/red, /area/station/science/robotics/mechbay) "aXS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) "aXW" = ( @@ -5597,8 +4905,8 @@ dir = 4; name = "Judge" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/clothing/suit/costume/judgerobe, /obj/item/clothing/head/costume/powdered_wig{ pixel_y = 11 @@ -5614,12 +4922,8 @@ /area/station/cargo/storage) "aYj" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -5641,19 +4945,6 @@ /obj/machinery/holopad, /turf/open/floor/carpet, /area/station/service/bar/atrium) -"aYH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "aYM" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes{ @@ -5673,12 +4964,8 @@ network = list("ss13","prison") }, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/security/prison/safe) "aYS" = ( @@ -5689,7 +4976,6 @@ /turf/open/floor/wood, /area/station/command/captain_dining) "aYU" = ( -/obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes, /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/iron/dark, @@ -5720,8 +5006,8 @@ /area/station/service/theater) "aZh" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -5744,8 +5030,8 @@ /turf/open/floor/iron, /area/station/commons/dorms) "aZx" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/port) @@ -5773,12 +5059,6 @@ /turf/open/floor/wood/parquet, /area/station/common/tailoring) "aZM" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/machinery/airalarm/directional/south, /obj/structure/extinguisher_cabinet/directional/west, /obj/machinery/camera/directional/south{ @@ -5786,6 +5066,9 @@ name = "command camera" }, /obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/command/bridge) "aZP" = ( @@ -5839,35 +5122,18 @@ name = "Courtroom Lobby" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/navigate_destination, /turf/open/floor/iron/dark, /area/station/security/courtroom) "bap" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/office) "baw" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -5879,12 +5145,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/clown_chamber) -"baB" = ( -/obj/effect/turf_decal/trimline/purple/filled/corner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/science/research) "baD" = ( /obj/structure/closet/crate/freezer, /obj/item/food/meat/slab, @@ -5904,12 +5164,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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) @@ -5927,12 +5183,8 @@ /area/station/commons/dorms) "baI" = ( /obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5967,10 +5219,7 @@ /area/station/security/power_station) "bbn" = ( /obj/structure/filingcabinet/security, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, /turf/open/floor/iron/dark, @@ -5986,22 +5235,10 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/bar/atrium) -"bby" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/circuit/red, -/area/station/science/robotics/mechbay) "bbz" = ( /obj/machinery/computer/slot_machine, /obj/effect/decal/cleanable/dirt{ @@ -6011,8 +5248,8 @@ /area/station/maintenance/rus_gambling) "bbE" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -6035,16 +5272,7 @@ "bbG" = ( /obj/structure/table/reinforced, /obj/item/binoculars, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/bridge) "bbH" = ( @@ -6052,16 +5280,12 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/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/port/upper) "bbX" = ( -/obj/effect/turf_decal/skyrat_decals/departments/bridge{ +/obj/effect/turf_decal/nova_decals/departments/bridge{ dir = 4 }, /obj/structure/cable, @@ -6111,21 +5335,16 @@ /turf/open/space/basic, /area/space/nearstation) "bcu" = ( -/obj/machinery/door/airlock/vault{ - name = "Vault Door" - }, -/obj/effect/mapping_helpers/airlock/locked, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/vault, +/obj/machinery/door/airlock/public/glass{ + name = "Vault Entrance" + }, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) "bcx" = ( @@ -6142,18 +5361,14 @@ "bcy" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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/storage_shared) "bcA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -6168,8 +5383,8 @@ /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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, /area/station/commons/dorms) @@ -6177,9 +5392,6 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -6197,8 +5409,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/iron, @@ -6208,35 +5420,14 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/dorms) "bcQ" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/cmo) -"bcR" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) "bcV" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, @@ -6278,8 +5469,8 @@ /area/station/science/research) "bdf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -6328,8 +5519,8 @@ /turf/open/floor/carpet/green, /area/station/command/heads_quarters/nt_rep) "bdx" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/research) "bdF" = ( @@ -6449,10 +5640,8 @@ "beQ" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -6474,14 +5663,6 @@ name = "Ultra Reinforced Glass Floor" }, /area/station/ai_monitored/turret_protected/aisat_interior) -"bfa" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/hallway/primary/port) "bfo" = ( /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, @@ -6490,39 +5671,26 @@ /obj/structure/table, /obj/item/stack/package_wrap, /obj/item/hand_labeler, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/newscaster/directional/north, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/newscaster/directional/north, /turf/open/floor/iron, /area/station/security/checkpoint/escape) -"bft" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/science/research) "bfA" = ( /obj/machinery/computer/records/security{ dir = 4 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "bfD" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/research/abandoned) "bfG" = ( @@ -6565,22 +5733,6 @@ "bgi" = ( /turf/closed/wall, /area/station/engineering/engine_smes) -"bgo" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "bgp" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -6595,9 +5747,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/side{ dir = 8 }, @@ -6621,17 +5771,15 @@ dir = 8 }, /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/solars/starboard/fore) "bgA" = ( /turf/closed/wall, /area/station/commons/fitness/recreation) "bgI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/eighties, /area/station/maintenance/abandon_arcade) "bgP" = ( @@ -6660,12 +5808,8 @@ /area/station/service/library/printer) "bhf" = ( /obj/effect/landmark/start/nanotrasen_consultant, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/carpet/green, /area/station/command/heads_quarters/nt_rep) @@ -6673,13 +5817,10 @@ /obj/structure/table, /obj/item/folder/red, /obj/item/pen, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/interrogation) "bho" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/segment, /obj/structure/sign/departments/chemistry/pharmacy/directional/east, /turf/open/floor/iron, @@ -6693,13 +5834,11 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/lower) "bhN" = ( -/obj/effect/turf_decal/tile/red, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 }, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -6712,13 +5851,6 @@ /obj/machinery/duct, /turf/open/floor/iron/freezer, /area/station/security/prison/shower) -"bia" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "bie" = ( /obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating, @@ -6745,11 +5877,8 @@ "bio" = ( /obj/structure/table/reinforced, /obj/machinery/computer/records/medical/laptop, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "bit" = ( @@ -6778,8 +5907,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/medical/virology, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -6808,12 +5937,8 @@ "biH" = ( /obj/machinery/recharge_station, /obj/effect/landmark/start/cyborg, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -6859,23 +5984,20 @@ /obj/item/pen{ pixel_y = 3 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) "bjc" = ( /obj/machinery/chem_master, /obj/machinery/light/directional/east, /obj/structure/noticeboard/directional/east, -/obj/effect/turf_decal/tile/yellow/fourcorners, /obj/structure/window/spawner/directional/south, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "bjl" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/table/reinforced, /obj/machinery/status_display/ai/directional/south, /obj/item/storage/belt/utility, @@ -6914,25 +6036,19 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) "bjL" = ( /obj/structure/chair/sofa/bench/right, -/obj/effect/landmark/start/assistant, /obj/effect/turf_decal/siding/thinplating_new, /obj/structure/sign/poster/random/directional/north, /turf/open/floor/iron/dark, /area/station/hallway/primary/upper) "bjM" = ( /obj/effect/turf_decal/vg_decals/atmos/carbon_dioxide, -/obj/effect/turf_decal/bot_white, /turf/open/floor/engine/co2, /area/station/engineering/atmos) "bjO" = ( @@ -6943,12 +6059,11 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "bjS" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/barber) "bjW" = ( @@ -6986,12 +6101,8 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 1 }, @@ -7018,29 +6129,12 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "bkA" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/clown_chamber) "bkC" = ( @@ -7052,12 +6146,6 @@ "bkG" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/airalarm/directional/north, /obj/machinery/firealarm/directional/west, /obj/structure/disposalpipe/trunk{ @@ -7069,16 +6157,11 @@ /turf/closed/wall, /area/station/medical/exam_room) "bkN" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "bkP" = ( @@ -7109,12 +6192,8 @@ /obj/machinery/door/airlock/public/glass{ name = "Lasertag Prep Room" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/common/laser_tag) @@ -7125,19 +6204,6 @@ dir = 1 }, /area/station/cargo/miningdock) -"bln" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "blr" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 @@ -7148,33 +6214,22 @@ name = "medbay camera"; network = list("ss13","medbay") }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/machinery/newscaster/directional/west, /turf/open/floor/iron/white, /area/station/medical/virology) "blx" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron/dark/side, /area/station/security/brig) "blB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) @@ -7191,6 +6246,11 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, +/obj/machinery/status_display/door_timer{ + id = "IsolationCell_2"; + name = "Isolation Cell 2"; + pixel_y = -32 + }, /turf/open/floor/iron/dark, /area/station/security/prison/safe) "blS" = ( @@ -7219,10 +6279,6 @@ /obj/effect/decal/cleanable/generic, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"bmd" = ( -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/central) "bml" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/access/all/engineering, @@ -7263,16 +6319,9 @@ }, /area/station/medical/medbay/lobby) "bmD" = ( -/obj/effect/turf_decal/bot, /obj/structure/table/glass, /obj/item/storage/bag/plants/portaseeder, /obj/machinery/light/directional/east, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -7294,12 +6343,8 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -7320,9 +6365,6 @@ /area/station/security/power_station) "bmP" = ( /obj/machinery/door/airlock/maintenance/glass, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/maintenance/disposal/incinerator) @@ -7345,16 +6387,12 @@ /turf/open/floor/iron/white, /area/station/command/heads_quarters/rd) "bmV" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/sorting/mail{ dir = 8; name = "HoS Junction"; sortType = 8 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "bng" = ( /obj/effect/turf_decal/stripes/line, @@ -7383,10 +6421,8 @@ /area/station/maintenance/console_room) "bnq" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/hallway/secondary/command) @@ -7396,8 +6432,8 @@ /area/station/maintenance/port/central) "bns" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/prison/rec) "bnx" = ( @@ -7460,27 +6496,15 @@ /obj/machinery/door/airlock/security{ name = "Evidence Storage" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/security/general, +/obj/structure/cable, +/obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/security/interrogation) "bnZ" = ( /obj/machinery/smartfridge/organ, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /turf/open/floor/iron/white, /area/station/medical/surgery) "boc" = ( @@ -7502,12 +6526,8 @@ }, /area/station/science/tele_sci) "bog" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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) "boj" = ( @@ -7516,12 +6536,8 @@ name = "Containment Breach Shutters" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/right{ dir = 8 }, @@ -7548,10 +6564,6 @@ }, /obj/effect/mapping_helpers/requests_console/information, /obj/effect/mapping_helpers/requests_console/assistance, -/obj/machinery/requests_console/directional/west{ - department = "Toxins Lab"; - name = "Toxins Requests Console" - }, /obj/effect/mapping_helpers/requests_console/information, /obj/effect/mapping_helpers/requests_console/assistance, /obj/effect/turf_decal/bot, @@ -7572,12 +6584,17 @@ /turf/open/floor/iron, /area/station/science/ordnance) "bop" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 }, -/obj/effect/spawner/random/trash/graffiti, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/structure/table, +/obj/item/poster/random_official{ + pixel_y = 10 + }, +/obj/item/poster/random_official, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "bos" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt{ @@ -7597,8 +6614,8 @@ /obj/machinery/door/airlock/asylum{ name = "Asylum" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/medical/psychology, /obj/machinery/duct, /turf/open/floor/iron, @@ -7655,12 +6672,8 @@ /area/station/maintenance/port/central) "boS" = ( /obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/radio/intercom/directional/south, /obj/structure/cable, /turf/open/floor/iron/dark/side, @@ -7673,19 +6686,12 @@ /obj/structure/closet/secure_closet/personal/cabinet, /turf/open/floor/carpet/red, /area/station/commons/dorms/room6) -"bpa" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/end, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/test_chambers) "bpg" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/engineering/storage/tcomms) "bpj" = ( @@ -7694,7 +6700,6 @@ dir = 1 }, /obj/machinery/defibrillator_mount/directional/south, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "bpo" = ( @@ -7705,14 +6710,12 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "bpp" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/upper) "bpv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/holopad/secure, /turf/open/floor/iron/dark, /area/station/security/office) @@ -7726,20 +6729,14 @@ /turf/open/misc/asteroid/airless, /area/space/nearstation) "bpA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/captain_dining) "bpC" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -7813,10 +6810,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -7929,7 +6924,7 @@ /area/station/maintenance/department/security/upper) "bri" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad/secure, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) @@ -7947,9 +6942,6 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "brr" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/machinery/door/poddoor/shutters{ id = "evashutters3"; name = "E.V.A. Storage Shutters" @@ -7962,12 +6954,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/research) @@ -7976,7 +6962,7 @@ dir = 9 }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/qm) "bry" = ( @@ -7998,14 +6984,6 @@ /obj/structure/flora/bush/grassy, /turf/open/floor/grass, /area/station/service/cafeteria) -"brE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "brK" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes{ @@ -8022,12 +7000,8 @@ dir = 6 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "brO" = ( @@ -8074,6 +7048,9 @@ dir = 1 }, /area/station/ai_monitored/command/storage/eva/upper) +"bsb" = ( +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) "bse" = ( /obj/machinery/light/directional/south, /turf/open/floor/carpet/lone, @@ -8086,12 +7063,8 @@ /area/station/science/research/abandoned) "bsk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall13"; location = "hall12" @@ -8099,12 +7072,8 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "bsq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) "bst" = ( @@ -8152,9 +7121,7 @@ department = "EVA"; name = "EVA Requests Console" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) @@ -8163,12 +7130,8 @@ /area/space/nearstation) "bsN" = ( /obj/item/radio/intercom/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/camera/directional/south{ c_tag = "Security - Shuttle Bay East" }, @@ -8213,9 +7176,7 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) "bti" = ( @@ -8224,16 +7185,6 @@ /obj/effect/turf_decal/siding/thinplating_new, /turf/open/floor/iron/dark, /area/station/cargo/miningdock) -"btk" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "btt" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -8241,12 +7192,8 @@ /obj/machinery/door/airlock{ name = "Theater Backstage" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/theatre, /turf/open/floor/wood, /area/station/service/theater) @@ -8257,12 +7204,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/hallway/secondary/service) "btQ" = ( @@ -8295,12 +7238,8 @@ }, /obj/machinery/door/firedoor/heavy, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/command/general, /turf/open/floor/engine, /area/station/command/secure_bunker) @@ -8309,12 +7248,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/maintenance/port/aft) "buD" = ( @@ -8336,16 +7271,6 @@ /obj/machinery/meter, /turf/open/floor/iron/smooth, /area/station/engineering/atmos/pumproom) -"buL" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/security/checkpoint/escape) "buP" = ( /obj/machinery/light/directional/west, /turf/open/openspace, @@ -8355,9 +7280,6 @@ /turf/open/floor/grass, /area/station/service/lawoffice) "buV" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/effect/turf_decal/stripes/blue/line{ dir = 4 }, @@ -8440,8 +7362,8 @@ /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/dorms) @@ -8458,16 +7380,11 @@ /area/station/medical/medbay/central) "bvL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/common/pool/sauna) "bvM" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /obj/structure/sign/poster/random/directional/east, /turf/open/floor/iron/dark/side{ dir = 4 @@ -8492,10 +7409,8 @@ /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "bvZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -8542,7 +7457,7 @@ "bwO" = ( /obj/effect/turf_decal/bot, /obj/structure/punching_bag, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/medical/aslyum) @@ -8560,27 +7475,10 @@ /area/station/hallway/primary/upper) "bwY" = ( /obj/machinery/bluespace_vendor/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, /area/station/hallway/primary/port) -"bxc" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/main) "bxf" = ( /obj/structure/flora/bush/fullgrass, /obj/structure/flora/bush/pale, @@ -8620,10 +7518,7 @@ "bxt" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "bxx" = ( /obj/effect/turf_decal/stripes{ @@ -8636,12 +7531,8 @@ /area/station/service/power_station) "bxy" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -8659,12 +7550,8 @@ /obj/item/shard, /obj/item/wrench, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/electronic_marketing_den) "bxS" = ( @@ -8677,12 +7564,8 @@ /area/station/science/xenobiology) "bxW" = ( /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/security/glass{ id_tag = "permainner"; name = "Permabrig Transfer" @@ -8700,7 +7583,7 @@ /obj/effect/turf_decal/siding/wood/corner{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/parquet, /area/station/common/night_club) "byi" = ( @@ -8889,7 +7772,7 @@ /turf/open/floor/iron, /area/station/engineering/storage/tech) "bzk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison/visit) "bzv" = ( @@ -8931,12 +7814,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/command/captain, /obj/effect/landmark/navigate_destination, /turf/open/floor/wood, @@ -8985,46 +7864,33 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/general, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/medical/exam_room) "bAo" = ( -/obj/structure/rack, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "bAt" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 }, /obj/machinery/light_switch/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) "bAw" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction/flip{ dir = 4 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "bAL" = ( /obj/machinery/door/poddoor/shutters{ @@ -9032,8 +7898,8 @@ name = "Gateway Chamber Shutters" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/gateway) "bAO" = ( @@ -9067,9 +7933,7 @@ "bAZ" = ( /obj/structure/table/glass, /obj/item/book/manual/wiki/chemistry, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/xenobiology/control) "bBa" = ( @@ -9100,12 +7964,8 @@ /obj/machinery/door/airlock/medical{ name = "Psychology" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/medical/psychology, /turf/open/floor/wood, /area/station/medical/psychology) @@ -9133,16 +7993,8 @@ /turf/open/floor/iron, /area/station/commons/dorms) "bBI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip{ dir = 8 }, @@ -9160,12 +8012,8 @@ /obj/effect/turf_decal/siding/thinplating/dark{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/carpet/purple, /area/station/common/night_club/back_stage) @@ -9214,20 +8062,16 @@ id = "custodialshutters"; name = "Custodial Closet Shutters" }, -/obj/effect/turf_decal/delivery, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/service/janitor) "bCi" = ( -/obj/effect/turf_decal/tile/red{ +/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/red/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, /turf/open/floor/iron/dark/side, /area/station/security/checkpoint/escape) "bCk" = ( @@ -9246,9 +8090,7 @@ /turf/open/floor/iron/dark, /area/station/command/bridge) "bCL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/lockers) "bCQ" = ( @@ -9265,8 +8107,8 @@ "bDe" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/hop) "bDm" = ( @@ -9276,19 +8118,10 @@ /area/station/maintenance/port/upper) "bDn" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/xenobiology) -"bDq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "bDr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/iron, @@ -9297,12 +8130,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/small/directional/north, /obj/effect/spawner/random/trash/moisture_trap, /turf/open/floor/plating, @@ -9374,8 +8203,8 @@ /area/station/cargo/miningdock) "bDV" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/central) "bDW" = ( @@ -9395,9 +8224,7 @@ }, /obj/machinery/status_display/evac/directional/east, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/security/checkpoint/medical) "bEl" = ( @@ -9437,7 +8264,7 @@ /turf/open/floor/engine, /area/station/engineering/supermatter/room) "bEF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/science/ordnance/storage) @@ -9457,11 +8284,6 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/rd) -"bEH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/commons/dorms) "bEK" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 8 @@ -9525,9 +8347,7 @@ /turf/open/floor/carpet/purple, /area/station/common/night_club) "bFc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/commons/dorms/room6) @@ -9535,7 +8355,7 @@ /obj/effect/spawner/random/trash/mess, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/central) "bFi" = ( @@ -9579,25 +8399,13 @@ /area/station/maintenance/port/upper) "bFJ" = ( /obj/machinery/newscaster/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/executive, /area/station/command/heads_quarters/blueshield) "bFO" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -9676,12 +8484,8 @@ /turf/open/floor/wood, /area/station/service/lawoffice) "bHc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/security/courtroom) "bHe" = ( @@ -9714,10 +8518,7 @@ /obj/structure/transit_tube/curved/flipped{ dir = 4 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "bHU" = ( /obj/effect/turf_decal/siding/thinplating/dark, @@ -9726,36 +8527,18 @@ /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/aisat/hallway) "bHY" = ( -/obj/effect/turf_decal/tile/bar{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/bar/opposingcorners{ dir = 1 }, -/obj/effect/turf_decal/tile/bar, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, /turf/open/floor/iron, /area/station/security/prison/mess) "bIk" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/machinery/status_display/ai/directional/north, /obj/effect/spawner/random/vending/snackvend, /obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "bIr" = ( /obj/structure/rack, @@ -9778,12 +8561,8 @@ /area/station/commons/fitness) "bIw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction, /turf/open/floor/iron, /area/station/commons/dorms) @@ -9801,8 +8580,8 @@ name = "Abandoned Diner" }, /obj/structure/barricade/wooden/crude, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/abandon_diner) @@ -9819,7 +8598,6 @@ /area/space) "bIW" = ( /obj/machinery/dish_drive/bullet, -/obj/effect/turf_decal/stripes, /obj/structure/extinguisher_cabinet/directional/north, /obj/effect/turf_decal/stripes/blue/line, /turf/open/floor/iron/dark, @@ -9835,10 +8613,8 @@ /obj/effect/turf_decal/bot, /obj/machinery/holopad, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva/upper) "bJd" = ( @@ -9871,15 +8647,11 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/medical/morgue) "bJC" = ( -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/machinery/camera/directional/east{ c_tag = "Cargo Bay - Starboard Upper"; name = "cargo camera" @@ -9890,12 +8662,6 @@ }, /turf/open/floor/plating, /area/station/cargo/storage) -"bJE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/atmos/test_chambers) "bJF" = ( /obj/effect/turf_decal/stripes, /obj/structure/table/reinforced, @@ -9932,7 +8698,6 @@ /turf/open/floor/iron/dark, /area/station/commons/storage/primary) "bJT" = ( -/obj/effect/turf_decal/bot_white, /obj/effect/turf_decal/vg_decals/atmos/nitrous_oxide, /turf/open/floor/engine/n2o, /area/station/engineering/atmos) @@ -9950,12 +8715,8 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "bKa" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing{ dir = 1 }, @@ -10018,12 +8779,8 @@ /obj/structure/disposalpipe/segment{ dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/library) "bKr" = ( @@ -10034,7 +8791,7 @@ /obj/effect/turf_decal/box/white{ color = "#EFB341" }, -/turf/open/floor/iron/dark/small, +/turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) "bKt" = ( /obj/structure/rack/shelf, @@ -10043,16 +8800,6 @@ /turf/open/floor/iron/dark, /area/station/maintenance/department/engineering/atmos_aux_port) "bKw" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/table, /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/south, @@ -10064,23 +8811,15 @@ req_access = list("ai_upload") }, /obj/effect/spawner/random/aimodule/harmless, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload) "bKy" = ( -/obj/effect/turf_decal/tile/red{ - color = "#ff0000" - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ +/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/red/real_red/half/contrasted{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/structure/cable, /turf/open/floor/iron, /area/station/common/laser_tag) "bKE" = ( @@ -10105,7 +8844,6 @@ /turf/open/floor/iron/dark, /area/station/science/auxlab/firing_range) "bKM" = ( -/obj/effect/turf_decal/bot_red, /obj/effect/turf_decal/vg_decals/numbers/two, /obj/structure/closet/emcloset/wall{ pixel_y = -32 @@ -10222,8 +8960,8 @@ name = "Research Division Server Room" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/science/rd, /turf/open/floor/iron/dark, /area/station/science/server) @@ -10241,7 +8979,12 @@ /obj/machinery/computer/security/qm{ dir = 1 }, -/obj/machinery/requests_console/directional/south, +/obj/machinery/requests_console/directional/south{ + department = "Quartermaster's Office"; + name = "Quartermaster's Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/supplies, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/qm) "bLI" = ( @@ -10270,7 +9013,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/central) "bLW" = ( -/obj/effect/turf_decal/stripes/corner, /obj/structure/table, /obj/machinery/microwave/engineering/cell_included{ pixel_y = 8 @@ -10278,7 +9020,7 @@ /turf/open/floor/iron/dark/small, /area/station/cargo/storage) "bLY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 1 }, @@ -10306,16 +9048,6 @@ dir = 4 }, /area/station/command/gateway) -"bMk" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "bMn" = ( /obj/structure/rack, /obj/item/circuitboard/mecha/ripley/main, @@ -10350,8 +9082,8 @@ /turf/open/floor/mineral/plastitanium/red, /area/station/science/robotics/lab) "bMr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/ai_monitored/security/armory) "bMt" = ( @@ -10362,24 +9094,9 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore/upper) -"bMw" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "bMx" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/command) "bMB" = ( @@ -10391,12 +9108,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/navigate_destination, /obj/effect/mapping_helpers/airlock/access/all/supply/vault, /turf/open/floor/iron/dark, @@ -10439,8 +9152,8 @@ /area/station/command/heads_quarters/nt_rep) "bNm" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "bNr" = ( @@ -10461,9 +9174,6 @@ /turf/open/floor/plating, /area/station/science/ordnance/freezerchamber) "bNL" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /obj/structure/table/reinforced, /obj/item/aicard, /obj/machinery/firealarm/directional/west, @@ -10475,19 +9185,14 @@ dir = 8; name = "Bailiff" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/security/courtroom) "bNO" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, -/obj/effect/turf_decal/stripes/end, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/engineering/atmos/test_chambers) @@ -10530,12 +9235,6 @@ dir = 4 }, /area/station/common/locker_room_shower) -"bOm" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/iron/dark/small, -/area/station/cargo/storage) "bOu" = ( /obj/structure/railing{ dir = 4 @@ -10573,14 +9272,12 @@ /obj/structure/railing/corner{ dir = 4 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "bOK" = ( /obj/machinery/firealarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "bOO" = ( @@ -10588,9 +9285,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/service/power_station) "bOR" = ( @@ -10615,14 +9310,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/science/xenobiology) -"bOV" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "bOX" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/bot, @@ -10637,8 +9324,8 @@ name = "Locker Room" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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) "bOZ" = ( @@ -10676,12 +9363,8 @@ /area/station/engineering/supermatter/room) "bPi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/sorting/mail/flip{ dir = 1; name = "Library Junction"; @@ -10706,9 +9389,7 @@ /turf/open/floor/plating, /area/station/maintenance/xenobio_disposals) "bPt" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/command/gateway) "bPz" = ( @@ -10726,8 +9407,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/security/general, /turf/open/floor/iron, /area/station/security/execution/transfer) @@ -10746,12 +9427,8 @@ /area/station/service/chapel/office) "bPN" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs/old{ dir = 4 }, @@ -10777,7 +9454,7 @@ "bPS" = ( /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "bPZ" = ( @@ -10828,12 +9505,8 @@ pixel_x = -16; pixel_y = 28 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 5 }, @@ -10876,12 +9549,8 @@ /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood, /obj/item/folder, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/chapel/office) "bQU" = ( @@ -10896,45 +9565,13 @@ /obj/item/disk/tech_disk{ pixel_y = 6 }, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple, /turf/open/floor/iron/white, /area/station/science/lab) -"bQW" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/brig) "bQX" = ( /obj/machinery/conveyor/inverted{ dir = 9; id = "cargoload" }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /turf/open/floor/plating, /area/station/cargo/storage) "bRe" = ( @@ -10965,9 +9602,7 @@ /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/common/locker_room_shower) "bRu" = ( @@ -11010,8 +9645,8 @@ /obj/effect/turf_decal/tile/yellow{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -11038,27 +9673,14 @@ /turf/open/floor/iron/white, /area/station/science/cytology) "bSa" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/table, /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/west, /obj/effect/spawner/random/aimodule/harmful, /obj/machinery/light/small/directional/east, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload) "bSd" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /turf/open/floor/iron/dark, /area/station/science/xenobiology) "bSf" = ( @@ -11087,20 +9709,9 @@ /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) "bSz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/storage/tech) -"bSA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/security/prison/upper) "bSB" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/cable, @@ -11115,12 +9726,8 @@ name = "Representative's Quarters" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -11171,12 +9778,8 @@ /turf/open/floor/iron/dark, /area/station/engineering/break_room) "bTk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/chapel{ dir = 1 }, @@ -11216,35 +9819,16 @@ /turf/open/floor/iron, /area/station/hallway/primary/starboard) "bTy" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/warden) "bTz" = ( /obj/effect/turf_decal/trimline/purple/filled/corner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/research) -"bTA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/main) "bTE" = ( /obj/structure/rack, /obj/effect/turf_decal/bot, @@ -11304,8 +9888,8 @@ /area/station/command/heads_quarters/captain) "bTP" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/port) @@ -11322,12 +9906,8 @@ req_access = list("command") }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/bridge) "bUc" = ( @@ -11368,12 +9948,8 @@ /area/station/maintenance/department/chapel) "bUn" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -11384,12 +9960,6 @@ /turf/open/floor/iron, /area/station/commons/dorms) "bUp" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/structure/table/reinforced, /obj/machinery/recharger{ pixel_x = -5; @@ -11416,9 +9986,6 @@ /area/station/maintenance/fore/upper) "bUB" = ( /obj/machinery/power/turbine/inlet_compressor, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /turf/open/floor/engine/vacuum, /area/station/maintenance/disposal/incinerator) "bUD" = ( @@ -11426,12 +9993,6 @@ /turf/open/floor/wood, /area/station/hallway/primary/port) "bUG" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/item/radio/intercom/directional/north, /obj/machinery/door/window/brigdoor/right{ @@ -11444,9 +10005,6 @@ /obj/structure/window/spawner/directional/south, /obj/structure/filingcabinet/chestdrawer, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, @@ -11478,7 +10036,7 @@ /obj/machinery/door/airlock{ name = "Drinks Shop" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/common/wrestling/beverage) "bVj" = ( @@ -11501,16 +10059,6 @@ /obj/structure/table/wood, /turf/open/floor/wood, /area/station/service/bar/atrium) -"bVw" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/medical) "bVy" = ( /obj/structure/bookcase/random/nonfiction, /turf/open/floor/wood, @@ -11541,12 +10089,8 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "bVK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/corner{ dir = 1 }, @@ -11561,7 +10105,7 @@ "bVN" = ( /obj/structure/table/glass, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/hairbrush, /obj/item/radio/intercom/directional/west, /turf/open/floor/carpet/black, @@ -11584,12 +10128,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction/yjunction, /turf/open/floor/wood, /area/station/command/captain_dining) @@ -11621,15 +10161,12 @@ /area/station/service/lawoffice) "bWu" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/cafeteria, /area/station/commons/toilet/auxiliary) "bWy" = ( /obj/machinery/chem_heater/withbuffer, -/obj/effect/turf_decal/tile/yellow/fourcorners, /obj/structure/window/spawner/directional/south, /turf/open/floor/iron/white, /area/station/medical/pharmacy) @@ -11687,19 +10224,12 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology) "bWZ" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/machinery/door/airlock/engineering{ name = "Starboard Bow Solar Access" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/sign/warning/electric_shock/directional/north, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/iron/dark, @@ -11728,23 +10258,16 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "bridge-west" }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark/side, /area/station/command/bridge) "bXA" = ( /obj/effect/turf_decal/vg_decals/numbers/three, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/safe) "bXG" = ( @@ -11799,8 +10322,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor, /area/station/engineering/atmos) "bYc" = ( @@ -11810,7 +10333,6 @@ }, /area/station/science/xenobiology) "bYj" = ( -/obj/effect/turf_decal/stripes, /obj/machinery/door/firedoor/border_only, /obj/structure/chair/stool/directional/north{ pixel_y = 11 @@ -11845,19 +10367,15 @@ "bYp" = ( /obj/structure/cable, /obj/structure/extinguisher_cabinet/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/hop) "bYs" = ( /obj/structure/cable, /obj/item/electronics/airlock, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "bYx" = ( @@ -11876,10 +10394,7 @@ /area/station/maintenance/port/aft) "bYD" = ( /obj/structure/transit_tube/crossing/horizontal, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "bYG" = ( /turf/closed/wall, @@ -11936,9 +10451,7 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, /area/station/cargo/miningdock) "bZp" = ( @@ -11956,14 +10469,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"bZv" = ( -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/wood/parquet, -/area/station/command/heads_quarters/cmo) "bZC" = ( /obj/structure/table, /obj/machinery/reagentgrinder{ @@ -11980,9 +10485,7 @@ /obj/effect/turf_decal/siding/wood, /obj/structure/sink/directional/west, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/hydroponics/garden/abandoned) "bZG" = ( @@ -12010,12 +10513,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/maintenance/abandon_office) "bZN" = ( @@ -12042,8 +10541,8 @@ /obj/structure/railing/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/wood/parquet, @@ -12053,9 +10552,7 @@ /area/station/command/secure_bunker) "caw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/holopad, /turf/open/floor/iron/dark, /area/station/science/server) @@ -12071,8 +10568,8 @@ "caB" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/aft/upper) @@ -12105,9 +10602,6 @@ /area/station/maintenance/department/security/greater) "cbc" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/machinery/disposal/delivery_chute{ dir = 4 }, @@ -12120,6 +10614,9 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/cargo/sorting) "cbl" = ( @@ -12136,24 +10633,10 @@ dir = 6; name = "hallway camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"cbq" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/morgue) "cbs" = ( /obj/machinery/newscaster/directional/north, /obj/effect/turf_decal/bot, @@ -12181,12 +10664,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor, /area/station/engineering/main) "cby" = ( @@ -12196,8 +10675,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/public/glass{ name = "Upper Science Department" }, @@ -12207,8 +10686,8 @@ "cbB" = ( /obj/structure/cable, /obj/structure/extinguisher_cabinet/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -12231,14 +10710,10 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "cbG" = ( -/obj/effect/turf_decal/tile/green{ +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/green/filled/corner{ dir = 1 }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/corner{ dir = 8 }, @@ -12249,12 +10724,6 @@ }, /turf/open/floor/iron, /area/station/security/prison/workout) -"cbU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/service/chapel) "cbZ" = ( /turf/open/floor/iron, /area/station/commons/locker) @@ -12262,19 +10731,10 @@ /obj/effect/turf_decal/delivery, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth_large, /area/station/cargo/storage) -"ccc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/station/security/courtroom) "ccj" = ( /obj/effect/decal/cleanable/blood/gibs/down, /turf/open/floor/material/meat, @@ -12327,17 +10787,16 @@ /obj/effect/turf_decal/trimline/white/line{ dir = 1 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "ccK" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) "ccL" = ( @@ -12349,19 +10808,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/eighties, /area/station/maintenance/abandon_arcade) -"ccM" = ( -/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/security/execution/transfer) "ccV" = ( /obj/effect/turf_decal/siding/wood, /obj/item/radio/intercom/directional/north{ @@ -12415,12 +10861,6 @@ "cdu" = ( /obj/structure/drain, /obj/machinery/shower/directional/west, -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, -/obj/effect/turf_decal/siding/thinplating/dark/end{ - dir = 8 - }, /turf/open/floor/iron/checker, /area/station/engineering/atmos/test_chambers) "cdz" = ( @@ -12457,12 +10897,8 @@ "cdM" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/hallway/secondary/service) @@ -12474,18 +10910,14 @@ /turf/open/floor/iron/dark, /area/station/science/auxlab/firing_range) "cdU" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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/side{ dir = 9 }, /area/station/security/prison) "cdY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/security/lockers) @@ -12511,7 +10943,6 @@ /turf/open/floor/plating, /area/station/engineering/main) "cef" = ( -/obj/effect/turf_decal/delivery, /obj/machinery/door/poddoor/shutters{ id = "evashutters2"; name = "E.V.A. Storage Shutters" @@ -12537,22 +10968,12 @@ /turf/open/floor/wood, /area/station/security/courtroom) "cek" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs{ dir = 4 }, /area/station/engineering/gravity_generator) -"ces" = ( -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/wood/parquet, -/area/station/command/heads_quarters/cmo) "cev" = ( /obj/structure/chair/sofa/bench/left{ dir = 4; @@ -12589,10 +11010,9 @@ /turf/open/floor/engine, /area/station/science/ordnance) "ceT" = ( -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/red, /turf/open/floor/iron/dark, /area/station/security/office) "ceU" = ( @@ -12665,12 +11085,8 @@ name = "Diner" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -12703,9 +11119,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/service/hydroponics/garden/abandoned) @@ -12728,17 +11142,13 @@ }, /obj/effect/turf_decal/bot_white, /obj/machinery/status_display/evac/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/aisat_interior) "cgE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_starboard) @@ -12781,8 +11191,8 @@ name = "Chapel Morgue" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/service/crematorium, /turf/open/floor/iron, /area/station/service/chapel) @@ -12797,8 +11207,8 @@ /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/surgery) @@ -12830,6 +11240,11 @@ name = "Holodeck Projector Floor" }, /area/station/holodeck/rec_center) +"cho" = ( +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/hallway/primary/port) "chA" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/turf_decal/bot, @@ -12847,12 +11262,8 @@ /obj/item/stack/rods/fifty, /obj/item/stack/cable_coil, /obj/item/stack/cable_coil, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) "chB" = ( @@ -12864,21 +11275,11 @@ /turf/open/floor/iron/dark, /area/station/security/execution/education) "chC" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/railing{ dir = 1 }, /obj/structure/cable, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "chF" = ( /obj/effect/decal/cleanable/dirt{ @@ -12900,10 +11301,8 @@ /turf/open/floor/plating, /area/station/service/bar/atrium) "chO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/interrogation) "chR" = ( @@ -12929,8 +11328,8 @@ name = "Cell 5"; pixel_x = 32 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/brig) "chU" = ( @@ -12942,20 +11341,9 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison) -"chZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/prison/safe) "cib" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction/yjunction, /obj/machinery/duct, @@ -12964,20 +11352,19 @@ "cie" = ( /obj/structure/window/spawner/directional/south, /obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/machinery/light/directional/east, /obj/machinery/vending/barbervend, +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/barber) "cig" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -13004,17 +11391,9 @@ }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) -"ciu" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/catwalk_floor{ - initial_gas_mix = "TEMP=2.7" - }, -/area/space/nearstation) "ciB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/gateway) "ciE" = ( @@ -13042,9 +11421,7 @@ /turf/open/floor/engine, /area/station/command/secure_bunker) "ciQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit/red, /area/station/science/robotics/mechbay) "ciR" = ( @@ -13055,7 +11432,7 @@ icon_state = "dirt-flat-1" }, /obj/effect/spawner/random/trash/cigbutt, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/maintenance/abandon_art_studio) "ciS" = ( @@ -13079,17 +11456,13 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/iron, -/area/station/common/night_club/changing_room) +/area/station/hallway/primary/central/aft) "cjk" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 @@ -13131,12 +11504,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/medical/morgue, /turf/open/floor/iron/dark/side{ dir = 8 @@ -13147,9 +11516,7 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "ckd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/chemistry) @@ -13161,15 +11528,6 @@ dir = 4 }, /area/station/common/wrestling/arena) -"ckr" = ( -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) "ckt" = ( /obj/machinery/camera/directional/west{ c_tag = "Crew Area - Pool Port"; @@ -13186,22 +11544,14 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "ckv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/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) "cky" = ( @@ -13209,23 +11559,20 @@ /obj/machinery/door/airlock{ name = "Wrestling Ring Entrance" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/landmark/navigate_destination, /turf/open/floor/wood, /area/station/common/wrestling/lobby) "ckz" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/machinery/light/directional/west, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/command/bridge) "ckC" = ( @@ -13235,17 +11582,13 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/central) "ckH" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) @@ -13267,9 +11610,7 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "ckT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/library) "ckV" = ( @@ -13299,16 +11640,13 @@ }, /area/station/hallway/secondary/entry) "ckZ" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, /obj/structure/sign/departments/medbay/alt/directional/west, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "clb" = ( @@ -13318,22 +11656,7 @@ initial_gas_mix = "TEMP=2.7" }, /area/space/nearstation) -"clg" = ( -/obj/effect/spawner/random/structure/steam_vent, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "clj" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/table, /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/south, @@ -13347,7 +11670,7 @@ pixel_x = -3; pixel_y = -3 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload) "clo" = ( /obj/structure/table, @@ -13362,9 +11685,7 @@ /area/station/maintenance/department/security/prison_upper) "clx" = ( /obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "cly" = ( @@ -13403,7 +11724,7 @@ /turf/open/floor/iron/grimy, /area/station/security/detectives_office/private_investigators_office) "clO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/auxlab/firing_range) "clP" = ( @@ -13454,18 +11775,6 @@ "cmo" = ( /turf/open/floor/plating, /area/station/maintenance/department/security/greater) -"cmu" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/engine{ - icon_state = "floor" - }, -/area/station/science/ordnance) "cmv" = ( /obj/machinery/light/small/directional/south, /obj/machinery/duct, @@ -13501,9 +11810,7 @@ /area/station/engineering/supermatter/room) "cmG" = ( /obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) "cmI" = ( /obj/effect/turf_decal/siding/wood{ @@ -13553,16 +11860,16 @@ name = "Security Power Station" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/security/hos, /obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/open/floor/plating, /area/station/security/power_station) "cnk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -13600,7 +11907,7 @@ /turf/open/floor/iron/dark/side, /area/station/security/prison/shower) "cnL" = ( -/mob/living/simple_animal/bot/cleanbot, +/mob/living/basic/bot/cleanbot, /obj/structure/railing, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) @@ -13608,15 +11915,10 @@ /obj/structure/railing{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; +/obj/machinery/digital_clock/directional/south, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ dir = 8 }, -/obj/machinery/digital_clock/directional/south, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "cnR" = ( @@ -13646,8 +11948,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side, /area/station/hallway/primary/central) "cnV" = ( @@ -13670,13 +11972,6 @@ name = "Padded tile" }, /area/station/medical/aslyum) -"coa" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/security/checkpoint/customs/auxiliary) "cob" = ( /obj/structure/ore_box, /obj/effect/decal/cleanable/dirt{ @@ -13689,12 +11984,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/atmos/office) "col" = ( @@ -13702,12 +11993,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/main) @@ -13716,19 +12003,15 @@ /area/station/maintenance/clown_chamber) "coo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/service/library/lounge) "cop" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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/cable, /turf/open/floor/wood, @@ -13766,23 +12049,16 @@ "coz" = ( /obj/structure/window/spawner/directional/south, /obj/machinery/light/directional/east, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "coD" = ( -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/half, /turf/open/floor/iron, /area/station/hallway/primary/upper) "coP" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, /obj/machinery/light/directional/west, /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -13795,10 +12071,6 @@ }, /area/station/cargo/miningdock) "coR" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, @@ -13830,15 +12102,12 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/structure/railing/corner/end/flip{ +/obj/structure/railing/corner/end{ dir = 4 }, /turf/open/floor/iron, /area/station/hallway/primary/central) "cpf" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/table/reinforced, /obj/item/clothing/gloves/color/yellow, /obj/item/storage/toolbox/electrical, @@ -13872,8 +12141,8 @@ }, /obj/machinery/door/firedoor/heavy, /obj/machinery/firealarm/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/science/ordnance, /obj/structure/cable, /turf/open/floor/iron, @@ -13896,9 +12165,7 @@ /area/station/security/prison) "cpE" = ( /obj/structure/marker_beacon/burgundy, -/turf/open/floor/iron/shuttle/evac{ - initial_gas_mix = "TEMP=2.7" - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "cpM" = ( /obj/machinery/door/airlock/medical/glass{ @@ -13909,12 +12176,8 @@ /obj/effect/mapping_helpers/airlock/unres{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/medical/general, /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, @@ -13927,7 +12190,6 @@ /turf/open/floor/wood, /area/station/service/theater) "cpY" = ( -/obj/effect/turf_decal/bot, /obj/structure/rack/shelf, /obj/item/weldingtool, /obj/item/clothing/head/utility/welding, @@ -13960,12 +12222,6 @@ /obj/structure/aquarium/prefilled, /turf/open/floor/iron/dark, /area/station/command/meeting_room/council) -"cqj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/wood, -/area/station/service/library) "cqk" = ( /obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible, /turf/closed/wall/r_wall, @@ -13988,12 +12244,8 @@ /area/station/hallway/primary/port) "cqy" = ( /obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -14008,16 +12260,11 @@ /area/space/nearstation) "cqG" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 8 - }, /obj/machinery/firealarm/directional/west, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "cqK" = ( @@ -14027,24 +12274,13 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/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/department/medical/central) -"cqO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/prison/work) "cqP" = ( /obj/effect/turf_decal/siding/purple, /obj/effect/turf_decal/siding/purple{ @@ -14071,23 +12307,10 @@ /turf/open/floor/wood/parquet, /area/station/common/tailoring) "cry" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "crI" = ( /obj/structure/flora/rock, @@ -14114,7 +12337,6 @@ /area/station/maintenance/department/crew_quarters/dorms) "crR" = ( /obj/structure/rack, -/obj/effect/turf_decal/stripes, /obj/effect/spawner/random/techstorage/ai_all, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) @@ -14133,14 +12355,12 @@ }, /area/station/commons/fitness/recreation) "crY" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, /area/station/security/brig) "cse" = ( /obj/item/kirbyplants/random, @@ -14215,12 +12435,8 @@ /turf/open/floor/plating, /area/station/security/range) "csC" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/right{ dir = 4 }, @@ -14252,19 +12468,12 @@ /turf/open/floor/carpet, /area/station/command/heads_quarters/qm) "csS" = ( -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ +/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/disposalpipe/segment{ +/obj/effect/turf_decal/tile/green/half/contrasted{ dir = 4 }, /turf/open/floor/iron/dark/side{ @@ -14280,18 +12489,14 @@ /area/space/nearstation) "csY" = ( /obj/effect/turf_decal/stripes, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/ordnance/storage) "ctc" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central) "ctd" = ( @@ -14305,8 +12510,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/maintenance/starboard/fore) @@ -14314,8 +12519,8 @@ /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -14323,10 +12528,8 @@ /area/station/medical/medbay/lobby) "ctk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/medical/aslyum) @@ -14341,17 +12544,7 @@ /obj/structure/railing{ dir = 6 }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, +/obj/effect/turf_decal/tile/red/real_red/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "ctz" = ( @@ -14359,10 +12552,6 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "ctA" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -14429,16 +12618,6 @@ /area/station/security/prison/mess) "ctK" = ( /obj/structure/rack, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/newscaster/directional/north, /obj/machinery/status_display/ai/directional/west, /obj/structure/extinguisher_cabinet/directional/north, @@ -14483,6 +12662,15 @@ /obj/item/seeds/nettle, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"ctT" = ( +/obj/structure/disposaloutlet{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/shuttle/evac/airless, +/area/space/nearstation) "cua" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp, @@ -14534,19 +12722,14 @@ /area/station/engineering/atmos/office) "cug" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/chair/wood{ dir = 8 }, -/obj/effect/landmark/start/assistant, /turf/open/floor/wood, /area/station/service/cafeteria) "cuh" = ( @@ -14571,22 +12754,12 @@ dir = 1 }, /area/station/command/heads_quarters/ce) -"cup" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/solars/starboard/fore) "cuq" = ( /obj/structure/disposalpipe/segment, /obj/structure/grille, /obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/crew_quarters/bar) "cuz" = ( @@ -14606,21 +12779,20 @@ /area/station/engineering/supermatter/room) "cuE" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes, /obj/machinery/atmospherics/components/trinary/filter{ dir = 8 }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/test_chambers) "cuH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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, /area/station/commons/fitness/recreation) "cuL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/maintenance_hatch{ name = "Medbay Maintenance" }, @@ -14681,8 +12853,8 @@ /area/station/medical/medbay/central) "cvh" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -14698,10 +12870,8 @@ /turf/open/floor/carpet, /area/station/service/chapel) "cvj" = ( -/obj/machinery/mecha_part_fabricator/maint{ - name = "forgotten exosuit fabricator" - }, -/obj/effect/turf_decal/bot, +/obj/machinery/recharge_station, +/obj/item/robot_suit, /turf/open/floor/plating, /area/station/science/research/abandoned) "cvk" = ( @@ -14719,9 +12889,6 @@ name = "hallway camera" }, /obj/machinery/light/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -14803,12 +12970,8 @@ name = "Workshop" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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 @@ -14897,12 +13060,8 @@ name = "Permabrig Visitation" }, /obj/effect/turf_decal/delivery/blue, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/airlock/access/all/security/brig, /turf/open/floor/iron/dark/side{ @@ -14911,34 +13070,20 @@ /area/station/security/prison/visit) "cwQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /turf/open/floor/iron, /area/station/hallway/primary/upper) "cwS" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/status_display/evac/directional/east, /turf/open/floor/iron/dark, /area/station/security/brig) "cwX" = ( /turf/closed/wall, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "cxa" = ( /obj/structure/window/spawner/directional/west, /obj/structure/window/spawner/directional/south, @@ -14954,19 +13099,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"cxe" = ( -/obj/machinery/door/airlock/security{ - name = "Court Cell" - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/security/general, -/turf/open/floor/iron/dark, -/area/station/security/courtroom) "cxr" = ( /obj/machinery/door/poddoor/preopen{ id = "bridgedoors"; @@ -15028,12 +13160,8 @@ /area/station/security/range) "cyc" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, /turf/open/floor/iron/stairs/right{ dir = 8 @@ -15133,7 +13261,6 @@ pixel_x = -32; req_access = list("atmospherics") }, -/obj/effect/turf_decal/bot, /obj/structure/rack/shelf, /obj/item/storage/toolbox/mechanical, /obj/item/flashlight, @@ -15156,7 +13283,6 @@ name = "Free Acces Shutters" }, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/delivery/white, /obj/machinery/door/airlock/multi_tile/glass{ dir = 1; name = "Arrivals" @@ -15167,8 +13293,8 @@ }, /obj/structure/disposalpipe/segment, /obj/machinery/firealarm/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) "cyX" = ( @@ -15207,12 +13333,8 @@ /area/space/nearstation) "czk" = ( /obj/structure/railing/corner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/corner{ dir = 1 }, @@ -15231,12 +13353,8 @@ /area/station/maintenance/department/medical/central) "czq" = ( /obj/effect/landmark/start/mime, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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) "czt" = ( @@ -15259,20 +13377,14 @@ id_tag = "Toilet2"; name = "Stall 2" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) "czF" = ( /obj/structure/trash_pile, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/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/upper) "czG" = ( @@ -15284,27 +13396,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"czJ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/dark, -/area/station/security/brig) "czQ" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -15316,7 +13407,6 @@ dir = 1; name = "atmospherics camera" }, -/obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/engineering/atmos/office) "czZ" = ( @@ -15337,12 +13427,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/maintenance/abandon_office) "cAc" = ( @@ -15375,12 +13461,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/command/secure_bunker) "cAp" = ( @@ -15421,9 +13503,7 @@ /area/station/command/heads_quarters/captain/private) "cAL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -15440,10 +13520,7 @@ /area/station/engineering/atmos/office) "cAY" = ( /obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/bridge) "cBb" = ( @@ -15456,9 +13533,7 @@ "cBh" = ( /obj/machinery/light/floor, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth_large, /area/station/cargo/storage) "cBn" = ( @@ -15491,8 +13566,11 @@ pixel_y = -3 }, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/green/fourcorners, /obj/structure/cable, +/obj/effect/turf_decal/tile/green/fourcorners, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/iron/white, /area/station/medical/virology) "cBq" = ( @@ -15532,24 +13610,6 @@ /obj/effect/spawner/random/armory/rubbershot, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"cBF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) -"cBH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/office) "cBY" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -15574,18 +13634,6 @@ /obj/structure/flora/ocean/coral, /turf/open/water/overlay, /area/station/hallway/primary/central) -"cCr" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/wood, -/area/station/security/detectives_office/private_investigators_office) "cCx" = ( /obj/structure/closet/crate, /obj/effect/turf_decal/bot, @@ -15594,7 +13642,6 @@ /area/station/maintenance/gag_room) "cCE" = ( /obj/structure/window/spawner/directional/south, -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/hydroponics, /obj/machinery/light/directional/west, /obj/structure/disposalpipe/segment, @@ -15624,16 +13671,6 @@ dir = 1 }, /area/station/security/prison/shower) -"cCP" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/brig) "cCT" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -15642,8 +13679,8 @@ /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, /obj/machinery/airalarm/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/commissary) "cCY" = ( @@ -15664,13 +13701,6 @@ /obj/structure/drain, /turf/open/floor/iron/checker, /area/station/science/xenobiology/hallway) -"cDb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "cDe" = ( /obj/effect/spawner/random/structure/crate, /obj/structure/railing{ @@ -15732,17 +13762,10 @@ /obj/item/pen{ pixel_y = 3 }, -/obj/effect/turf_decal/tile/blue{ +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/light/directional/north, /turf/open/floor/iron/dark, /area/station/command/bridge) "cDu" = ( @@ -15787,12 +13810,8 @@ dir = 9; id = "Luggagebelt" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/security/checkpoint) "cDN" = ( @@ -15819,14 +13838,10 @@ /obj/effect/turf_decal/bot, /obj/item/weldingtool, /obj/item/clothing/head/utility/welding, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /turf/open/floor/iron/dark, /area/station/engineering/main) "cDZ" = ( /obj/structure/railing, -/obj/effect/turf_decal/stripes, /turf/open/floor/plating/rust, /area/station/maintenance/department/science/xenobiology) "cEe" = ( @@ -15841,12 +13856,8 @@ /turf/open/space/basic, /area/space) "cEl" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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 }, @@ -15857,16 +13868,11 @@ /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/nt_rep) "cEo" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, /obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 }, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -15880,8 +13886,8 @@ }, /area/station/security/office) "cEr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/stairs{ dir = 1 @@ -15905,17 +13911,9 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) "cEu" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/green/filled/line, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology) @@ -15931,9 +13929,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/security/detectives_office/private_investigators_office) "cEz" = ( @@ -15979,10 +13975,6 @@ /area/station/maintenance/department/eva) "cEW" = ( /obj/structure/fans/tiny/forcefield, -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/light/directional/west, /turf/open/floor/plating, /area/station/cargo/storage) @@ -16046,27 +14038,18 @@ /turf/open/floor/iron/dark, /area/station/common/laser_tag) "cFp" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/structure/cable, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "cFq" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/bridge) "cFu" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/table, /obj/item/storage/fancy/donut_box, /turf/open/floor/iron/dark, @@ -16085,9 +14068,7 @@ /turf/open/floor/wood, /area/station/medical/psychology) "cFI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/security/execution/transfer) @@ -16140,16 +14121,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) -"cGi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/eighties/red, -/area/station/common/arcade) "cGl" = ( /obj/structure/railing/corner{ dir = 4 @@ -16218,8 +14189,8 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/hop) "cGH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) "cGK" = ( @@ -16299,9 +14270,7 @@ dir = 1 }, /obj/effect/landmark/start/station_engineer, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/break_room) @@ -16332,12 +14301,6 @@ /turf/open/floor/carpet, /area/station/service/electronic_marketing_den) "cHn" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/camera/directional/east{ c_tag = "Leisure Hallway - Upper aft"; name = "hallway camera" @@ -16438,8 +14401,8 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/central) "cIc" = ( @@ -16453,14 +14416,9 @@ /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) "cIf" = ( -/obj/effect/turf_decal/tile/red, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -16493,9 +14451,7 @@ /area/station/engineering/atmos/hfr_room) "cIn" = ( /obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/medical/psychology) "cIq" = ( @@ -16513,22 +14469,6 @@ }, /turf/open/floor/plating, /area/station/science/genetics) -"cIu" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/brig) "cIB" = ( /obj/machinery/power/port_gen/pacman/pre_loaded, /obj/effect/turf_decal/bot, @@ -16573,7 +14513,7 @@ /obj/item/storage/box/ids{ pixel_y = 6 }, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/effect/turf_decal/siding/thinplating_new{ dir = 5 }, @@ -16602,8 +14542,8 @@ /area/station/medical/exam_room) "cJg" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/command) @@ -16639,8 +14579,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/aft/upper) @@ -16663,19 +14603,13 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) "cJH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/iron, @@ -16683,18 +14617,14 @@ "cJI" = ( /obj/structure/cable, /obj/effect/landmark/start/security_officer, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/office) "cJU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/upper) "cKb" = ( @@ -16706,8 +14636,8 @@ }, /obj/machinery/newscaster/directional/west, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/iron, @@ -16766,9 +14696,6 @@ /turf/open/floor/iron, /area/station/hallway/primary/port) "cKI" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/door/airlock/external{ name = "Solar Maintenance" }, @@ -16781,8 +14708,8 @@ /area/station/maintenance/solars/starboard/fore) "cKJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/fore/upper) "cKR" = ( @@ -16795,9 +14722,7 @@ /area/station/medical/break_room) "cKU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/blobstart, /turf/open/floor/iron, /area/station/science/explab) @@ -16829,27 +14754,14 @@ /obj/effect/turf_decal/vg_decals/atmos/nitrogen{ dir = 1 }, -/obj/effect/turf_decal/bot_white, /turf/open/floor/engine/n2, /area/station/engineering/atmos) "cLp" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/transit_tube) -"cLq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/research) "cLt" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -16889,19 +14801,11 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"cLO" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/hallway/primary/port) "cLP" = ( /obj/effect/landmark/event_spawn, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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) "cLR" = ( @@ -16916,9 +14820,7 @@ /area/station/security/prison/safe) "cMb" = ( /obj/docking_port/stationary/escape_pod, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "cMd" = ( /obj/effect/turf_decal/tile/red/half, @@ -16939,7 +14841,6 @@ /obj/item/stack/medical/gauze{ pixel_x = 8 }, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "cMm" = ( @@ -16976,27 +14877,19 @@ /obj/structure/chair/sofa/corp/corner{ dir = 1 }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "cMt" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/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/checkpoint/engineering) "cMC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, /area/station/command/secure_bunker) "cMF" = ( @@ -17008,12 +14901,8 @@ /obj/structure/lattice/catwalk, /obj/structure/railing, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/openspace, /area/station/maintenance/aft/upper) "cMK" = ( @@ -17025,17 +14914,16 @@ /area/station/medical/medbay/central) "cMM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) "cMP" = ( /obj/effect/turf_decal/bot, /obj/structure/table/glass, +/obj/item/mod/module/plasma_stabilizer, +/obj/item/mod/module/signlang_radio, +/obj/item/mod/module/thermal_regulator, /turf/open/floor/iron, /area/station/medical/storage) "cMX" = ( @@ -17043,7 +14931,6 @@ /obj/item/crowbar/red, /obj/item/wrench, /obj/item/clothing/mask/gas, -/obj/effect/turf_decal/bot, /obj/machinery/light/directional/south, /turf/open/floor/iron/dark, /area/station/engineering/atmos/office) @@ -17051,9 +14938,7 @@ /obj/effect/turf_decal/stripes/white/corner{ dir = 4 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "cNj" = ( /obj/machinery/power/shuttle_engine/heater{ @@ -17074,16 +14959,9 @@ /turf/open/floor/wood, /area/station/service/chapel/office) "cNB" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/disposalpipe/junction{ dir = 2 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /turf/open/floor/iron/dark/corner{ dir = 1 }, @@ -17097,16 +14975,6 @@ /turf/open/floor/iron/dark, /area/station/commons/storage/primary) "cNO" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/machinery/modular_computer/preset/civilian{ dir = 1 }, @@ -17118,13 +14986,7 @@ /area/station/science/research) "cNU" = ( /obj/structure/closet/lasertag/red, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000" - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 8 - }, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -17135,12 +14997,8 @@ /area/station/hallway/primary/central) "cNZ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/dark/side{ dir = 4 @@ -17183,12 +15041,8 @@ "cOm" = ( /obj/structure/lattice/catwalk, /obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/openspace, /area/station/maintenance/aft/upper) "cOq" = ( @@ -17249,12 +15103,9 @@ /obj/structure/chair/office{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/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, /area/station/security/interrogation) "cOS" = ( @@ -17273,19 +15124,6 @@ /obj/structure/chair/wood{ dir = 8 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -17306,21 +15144,15 @@ /area/station/maintenance/eva_shed/starboard) "cPf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/iron, /area/station/security/checkpoint/customs) "cPg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor, /area/station/engineering/atmos/test_chambers) "cPk" = ( @@ -17330,15 +15162,6 @@ /turf/closed/wall/rust, /area/station/maintenance/abandon_art_studio) "cPw" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -17377,45 +15200,23 @@ "cPH" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/science/research/abandoned) "cPK" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/hallway/primary/port) -"cPV" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/hallway/primary/port) "cPW" = ( /obj/machinery/computer/operating{ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/medical/surgery/theatre) "cPX" = ( @@ -17427,12 +15228,8 @@ dir = 4 }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -17457,9 +15254,7 @@ }, /obj/structure/cable, /obj/machinery/airalarm/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/lab) "cQp" = ( @@ -17469,29 +15264,12 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/wood, /area/station/command/heads_quarters/nt_rep) -"cQz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/science/xenobiology) "cQH" = ( /obj/structure/railing/corner/end, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) -"cQI" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "cQY" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -17567,12 +15345,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/port/aft) "cRy" = ( @@ -17596,12 +15370,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -17671,10 +15441,6 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "cSd" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/machinery/light/directional/south, /obj/item/radio/intercom/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -17683,6 +15449,7 @@ /obj/structure/chair/sofa/corp/right{ dir = 1 }, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "cSf" = ( @@ -17708,15 +15475,9 @@ /area/station/command/heads_quarters/blueshield) "cSI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/catwalk_floor{ - initial_gas_mix = "TEMP=2.7" - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron/airless, /area/space/nearstation) "cSK" = ( /obj/structure/trash_pile, @@ -17725,8 +15486,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/port/fore) "cSO" = ( @@ -17751,17 +15512,7 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"cSV" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "cSX" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/structure/chair/sofa/bench/left{ dir = 8; pixel_x = 5 @@ -17769,6 +15520,9 @@ /obj/structure/cable, /obj/effect/landmark/start/assistant, /obj/effect/landmark/start/assistant, +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/barber) "cTa" = ( @@ -17803,12 +15557,8 @@ /obj/structure/railing/corner/end/flip{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -17835,13 +15585,11 @@ /turf/open/floor/iron/white, /area/station/medical/pharmacy) "cTG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "cTO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "cTR" = ( @@ -17894,25 +15642,13 @@ /obj/item/clothing/accessory/badge/holo/warden{ pixel_x = 13 }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/railing{ dir = 1 }, /turf/open/floor/iron/dark, /area/station/security/warden) "cUA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) "cUE" = ( @@ -17923,19 +15659,13 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/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/aft/upper) "cUJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/structure/railing/corner/end/flip{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/railing/corner/end{ dir = 4 }, /turf/open/floor/iron, @@ -17950,9 +15680,6 @@ uses = 10 }, /obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, @@ -17977,36 +15704,20 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth_large, /area/station/cargo/storage) "cVe" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark/side{ dir = 1 }, /area/station/hallway/secondary/command) -"cVh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/prison/safe) "cVn" = ( /obj/structure/chair/stool/directional/east, /turf/open/floor/plating, @@ -18016,9 +15727,7 @@ /area/station/security/brig) "cVw" = ( /obj/machinery/atmospherics/pipe/smart/simple/supply/visible/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/department/engineering/atmos_aux_port) "cVx" = ( @@ -18078,12 +15787,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/fore/upper) "cVV" = ( @@ -18109,10 +15814,8 @@ "cWd" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/checkpoint) "cWg" = ( @@ -18121,12 +15824,6 @@ /area/station/science/xenobiology) "cWh" = ( /obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -18145,22 +15842,6 @@ /obj/machinery/digital_clock/directional/north, /turf/open/floor/carpet/blue, /area/station/commons/dorms/room3) -"cWq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "cWr" = ( /obj/effect/turf_decal/tile/red{ dir = 8 @@ -18208,8 +15889,8 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "cWP" = ( @@ -18250,10 +15931,7 @@ /area/space/nearstation) "cXo" = ( /obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "cXy" = ( /obj/structure/closet/secure_closet/personal, @@ -18275,24 +15953,14 @@ /area/station/maintenance/department/medical) "cXM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /turf/open/floor/plating, /area/station/maintenance/port/upper) "cXR" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/structure/table, /obj/item/paper/pamphlet/radstorm{ pixel_x = -6; @@ -18325,9 +15993,7 @@ /obj/effect/turf_decal/trimline/green/filled/line{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/virology) "cYg" = ( @@ -18357,33 +16023,18 @@ "cYn" = ( /turf/closed/wall, /area/station/hallway/primary/central) -"cYt" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "cYv" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip{ dir = 2 }, /turf/open/floor/iron, /area/station/hallway/secondary/command) "cYF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -18397,12 +16048,8 @@ /obj/structure/railing/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/small/directional/north, /turf/open/openspace, /area/station/maintenance/aft/upper) @@ -18456,20 +16103,14 @@ /area/station/medical/surgery/theatre) "cZa" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /obj/machinery/power/energy_accumulator/tesla_coil, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/engineering/storage) "cZh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/captain/private) "cZl" = ( @@ -18478,18 +16119,12 @@ /area/station/hallway/primary/central) "cZm" = ( /obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/aft) "cZo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/landmark/start/scientist, /turf/open/floor/iron, @@ -18508,17 +16143,13 @@ /turf/open/floor/iron, /area/station/hallway/primary/aft) "cZC" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/bridge) "cZE" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/ordnance/storage) "cZH" = ( @@ -18538,21 +16169,20 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/medical) "cZS" = ( /obj/effect/turf_decal/siding/blue, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/freezer, /area/station/command/heads_quarters/captain/private) +"cZT" = ( +/turf/closed/wall/r_wall, +/area/station/security/mechbay) "cZU" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/structure/cable, @@ -18597,12 +16227,8 @@ /area/station/command/teleporter) "daw" = ( /obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/maintenance/abandon_office) "daC" = ( @@ -18655,7 +16281,7 @@ /area/station/security/prison/safe) "dbj" = ( /obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/security/courtroom) "dbo" = ( @@ -18692,18 +16318,11 @@ /obj/structure/disposalpipe/junction/yjunction{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/hallway/secondary/service) "dbE" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 }, @@ -18711,12 +16330,8 @@ /area/station/engineering/atmos/test_chambers) "dbM" = ( /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/cmo) "dbQ" = ( @@ -18724,21 +16339,15 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "dbR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/mineral/plastitanium, /area/station/science/robotics/lab) "dbX" = ( /obj/structure/cable, /obj/effect/landmark/start/medical_doctor, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/holopad, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -18788,12 +16397,6 @@ /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "dcr" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/machinery/defibrillator_mount/directional/east, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) @@ -18805,18 +16408,6 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/plating/airless, /area/station/engineering/atmos/upper) -"dcA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "dcJ" = ( /obj/structure/window/spawner/directional/north, /obj/structure/closet/athletic_mixed, @@ -18828,19 +16419,6 @@ /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"dcM" = ( -/obj/structure/disposalpipe/junction/flip{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "dcR" = ( /obj/structure/table, /obj/item/storage/fancy/cigarettes/cigpack_robustgold{ @@ -18870,8 +16448,8 @@ "dda" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/security/prison/upper) @@ -18944,12 +16522,8 @@ /obj/effect/turf_decal/stripes/end{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit, /area/station/command/gateway) "dec" = ( @@ -18996,37 +16570,21 @@ /area/station/security/execution/education) "det" = ( /obj/machinery/porta_turret/lasertag/red, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000" - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 1 - }, /obj/structure/window/reinforced/tinted/spawner/directional/west, +/obj/effect/turf_decal/tile/red/real_red/fourcorners, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "deu" = ( /obj/structure/closet/crate, -/obj/effect/turf_decal/bot, /obj/item/crowbar/red, /obj/item/stack/sheet/mineral/plasma{ amount = 20 }, /obj/item/gps/engineering, /obj/item/tank/internals/emergency_oxygen/engi, -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -19071,22 +16629,15 @@ /turf/open/floor/circuit, /area/station/tcommsat/computer) "deT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/service/theater/abandoned) "deY" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/item/folder/blue, /obj/item/hand_labeler, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "dfb" = ( @@ -19116,12 +16667,8 @@ network = list("ss13","prison") }, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/safe) "dfB" = ( @@ -19146,8 +16693,8 @@ /area/station/science/xenobiology) "dfG" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/port/fore) "dfK" = ( @@ -19174,10 +16721,8 @@ /obj/machinery/atmospherics/components/unary/passive_vent/layer2{ dir = 1 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, -/area/station/medical/virology) +/turf/open/floor/iron/shuttle/evac/airless, +/area/space/nearstation) "dfV" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/neutral{ @@ -19234,14 +16779,11 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/lobby) "dgv" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/table, @@ -19249,6 +16791,7 @@ dir = 4; pixel_y = 0 }, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "dgw" = ( @@ -19270,13 +16813,6 @@ /turf/open/floor/iron, /area/station/engineering/atmos/hfr_room) "dgM" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/structure/disposalpipe/junction{ dir = 2 }, @@ -19286,19 +16822,10 @@ /area/station/hallway/primary/port) "dgN" = ( /obj/structure/rack/shelf, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/item/wrench, /obj/item/crowbar/red, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/maintenance/aux_eva) "dgO" = ( @@ -19369,16 +16896,11 @@ color = "#DE3A3A"; dir = 8 }, -/obj/machinery/firealarm/directional/south, +/obj/structure/sign/departments/evac/directional/south, /turf/open/floor/iron/white/corner{ dir = 1 }, /area/station/hallway/secondary/exit/departure_lounge) -"dhz" = ( -/turf/open/floor/glass/reinforced{ - initial_gas_mix = "TEMP=2.7" - }, -/area/space/nearstation) "dhI" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -19388,12 +16910,6 @@ /area/station/command/heads_quarters/cmo) "dhK" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/machinery/field/generator, /obj/effect/turf_decal/stripes{ dir = 4 @@ -19414,8 +16930,8 @@ /turf/open/floor/wood, /area/station/service/hydroponics/garden) "dhS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/courtroom) "dhT" = ( @@ -19437,19 +16953,13 @@ /obj/machinery/shower/directional/west{ name = "emergency shower" }, -/obj/effect/turf_decal/bot, /obj/structure/drain, -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, -/obj/effect/turf_decal/siding/thinplating/dark/end{ - dir = 8 - }, /obj/machinery/camera/directional/south{ c_tag = "Engineering - Engine Foyer"; dir = 1; name = "engineering camera" }, +/obj/effect/turf_decal/box, /turf/open/floor/iron/checker, /area/station/engineering/main) "dhZ" = ( @@ -19458,12 +16968,8 @@ }, /obj/item/melee/baton/security/cattleprod, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/fore/upper) @@ -19480,12 +16986,8 @@ /obj/machinery/door/airlock/virology{ name = "Virology Cabin" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/medical/virology, /obj/machinery/duct, /turf/open/floor/carpet/green, @@ -19520,8 +17022,8 @@ "dip" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/hallway/secondary/command) @@ -19565,12 +17067,8 @@ /turf/open/floor/engine/vacuum, /area/station/maintenance/disposal/incinerator) "diO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall17"; @@ -19587,9 +17085,7 @@ }, /area/station/hallway/primary/central) "djm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/commons/dorms/room8) @@ -19623,23 +17119,16 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "bridge-west" }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/iron/dark, /area/station/command/bridge) "djy" = ( -/obj/effect/turf_decal/tile/bar{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/bar/opposingcorners{ dir = 1 }, -/obj/effect/turf_decal/tile/bar, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison/mess) "djC" = ( @@ -19686,9 +17175,7 @@ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/barber) "djW" = ( @@ -19714,18 +17201,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"dko" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/catwalk_floor{ - initial_gas_mix = "TEMP=2.7" - }, -/area/space/nearstation) "dkt" = ( /turf/open/floor/plating, /area/station/ai_monitored/aisat/exterior) @@ -19786,20 +17261,11 @@ /area/station/service/library) "dkT" = ( /obj/structure/closet/secure_closet/evidence, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, /turf/open/floor/iron/dark, /area/station/security/interrogation) -"dkW" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/space/nearstation) "dkX" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=2"; @@ -19836,7 +17302,7 @@ /turf/open/floor/engine, /area/station/science/ordnance) "dlh" = ( -/obj/item/kirbyplants/random, +/obj/machinery/vending/cola/space_up, /turf/open/floor/iron/dark, /area/station/security/prison/workout) "dll" = ( @@ -19872,9 +17338,7 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "dlA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/button/crematorium{ id = "crematoriumChapel"; pixel_y = 26; @@ -19889,13 +17353,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/department/crew_quarters/bar) -"dlH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "dlN" = ( /obj/effect/turf_decal/tile/red, /obj/machinery/camera/directional/south{ @@ -19915,22 +17372,13 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating/airless, /area/space/nearstation) -"dlX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/security/brig) "dlY" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/research) "dma" = ( @@ -19940,8 +17388,8 @@ }, /obj/effect/mapping_helpers/airlock/access/all/engineering/tcoms, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/engineering/storage/tcomms) "dmc" = ( @@ -19949,22 +17397,11 @@ /obj/machinery/computer/security, /turf/open/floor/iron/dark, /area/station/command/bridge) -"dmf" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/engineering/break_room) "dmt" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/machinery/newscaster/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -19991,8 +17428,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/left, /area/station/hallway/primary/central) "dmD" = ( @@ -20025,13 +17462,12 @@ }, /obj/structure/cable, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) "dmO" = ( -/obj/effect/turf_decal/stripes/box, /obj/effect/turf_decal/stripes/red/corner{ dir = 8 }, @@ -20069,10 +17505,6 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "dnj" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/port) @@ -20085,8 +17517,8 @@ /area/station/science/research) "dnu" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/freezer{ name = "Freezer" }, @@ -20112,12 +17544,8 @@ /area/station/security/prison) "dnF" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -20133,21 +17561,12 @@ }, /area/station/service/chapel) "dnK" = ( -/obj/effect/turf_decal/delivery, /obj/machinery/disposal/bin, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/disposalpipe/trunk{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "dnN" = ( @@ -20155,12 +17574,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/medical/medbay/central) "dnO" = ( @@ -20191,12 +17606,8 @@ /obj/machinery/door/airlock{ name = "Information Kiosk" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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) "dom" = ( @@ -20204,12 +17615,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) "dos" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) @@ -20228,40 +17635,26 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/port/fore) "doF" = ( /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 9 }, /turf/open/floor/iron/white, /area/station/science/xenobiology/control) "doG" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/railing{ dir = 8 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "doH" = ( /obj/machinery/light/small/broken/directional/east, @@ -20276,18 +17669,12 @@ /obj/machinery/door/firedoor/heavy, /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/research{ name = "Bomb Assembly" }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "dpg" = ( /obj/machinery/light/small/broken/directional/north, @@ -20316,15 +17703,8 @@ /obj/structure/cable, /turf/open/floor/circuit, /area/station/command/gateway) -"dpG" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "dpO" = ( /obj/machinery/disposal/bin, -/obj/effect/turf_decal/delivery, /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -20337,12 +17717,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/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/department/medical) "dpT" = ( @@ -20351,8 +17727,8 @@ /area/station/tcommsat/computer) "dqd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -20385,14 +17761,11 @@ }, /obj/item/stack/package_wrap, /obj/item/hand_labeler, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/light/directional/west, /obj/machinery/newscaster/directional/west, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/security/interrogation) "dqD" = ( @@ -20575,8 +17948,8 @@ /turf/open/floor/engine, /area/station/engineering/supermatter/room) "dsr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/command/bridge) "dss" = ( @@ -20594,12 +17967,6 @@ /turf/open/floor/iron, /area/station/command/gateway) "dsA" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/light/directional/north, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -20626,12 +17993,8 @@ "dsM" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/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/central) "dsQ" = ( @@ -20659,6 +18022,15 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"dsU" = ( +/obj/structure/reagent_forge, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/left{ + dir = 4 + }, +/obj/item/stack/sheet/mineral/coal/five, +/turf/open/floor/iron/dark, +/area/station/service/forge) "dsW" = ( /obj/structure/table/wood/fancy/red, /obj/effect/turf_decal/siding/wood{ @@ -20738,12 +18110,8 @@ dir = 4 }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock{ id_tag = "Dorm8"; name = "Cabin 8" @@ -20760,10 +18128,6 @@ /turf/closed/wall/rust, /area/station/maintenance/department/medical/central) "dtJ" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -20772,12 +18136,8 @@ /area/station/security/prison/mess) "dtK" = ( /obj/effect/mapping_helpers/airlock/abandoned, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock{ id_tag = "Dorm9"; name = "Cabin 9" @@ -20850,7 +18210,7 @@ /obj/structure/railing, /obj/machinery/elevator_control_panel/directional/south{ linked_elevator_id = "publicElevator"; - 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/hallway/primary/central) @@ -20872,9 +18232,7 @@ /area/station/engineering/transit_tube) "duP" = ( /obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "duU" = ( /obj/structure/table, @@ -20950,12 +18308,8 @@ /area/station/command/heads_quarters/hos) "dwi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/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/storage/primary) "dwk" = ( @@ -20976,8 +18330,8 @@ /obj/machinery/door/airlock/public/glass{ name = "Fitness Courtyard" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/side, /area/station/commons/fitness) @@ -21007,15 +18361,6 @@ /area/station/common/tailoring) "dwK" = ( /obj/structure/chair/sofa/bench/right, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) @@ -21037,12 +18382,8 @@ /turf/open/floor/grass, /area/station/hallway/primary/central) "dwO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/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 = 9 }, @@ -21060,7 +18401,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) "dxa" = ( @@ -21073,15 +18414,9 @@ "dxk" = ( /obj/machinery/atmospherics/components/binary/valve/digital, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/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) "dxn" = ( /obj/machinery/light/small/directional/east, @@ -21097,17 +18432,6 @@ dir = 4 }, /area/station/hallway/secondary/command) -"dxD" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Central Hallway" - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "dxM" = ( /obj/structure/table, /obj/machinery/light/directional/north, @@ -21141,19 +18465,9 @@ dir = 4; name = "Ordnance Freezer Chamber Access" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, -/area/station/science/ordnance) -"dyb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, -/area/station/escapepodbay) +/area/station/science/ordnance) "dyh" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -21172,30 +18486,11 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/command/gateway) -"dyl" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "dyt" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, -/obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/commons/storage/primary) "dyx" = ( @@ -21220,12 +18515,8 @@ dir = 1 }, /obj/structure/extinguisher_cabinet/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -21235,10 +18526,8 @@ "dyF" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/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/checkpoint/customs) "dyI" = ( @@ -21264,8 +18553,8 @@ /turf/open/floor/iron/dark, /area/station/security/prison/safe) "dyO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_corner, /area/station/engineering/atmos/hfr_room) "dyP" = ( @@ -21275,31 +18564,22 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/plating/airless, /area/station/engineering/atmos/upper) +"dyS" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/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/dark, +/area/station/security/mechbay) "dyT" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /turf/open/floor/plating, /area/station/maintenance/disposal) -"dyW" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/medical/cryo) "dzs" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/portable_atmospherics/scrubber, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) @@ -21416,7 +18696,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/courtroom) "dAo" = ( @@ -21431,8 +18711,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -21467,7 +18747,6 @@ "dAK" = ( /obj/machinery/iv_drip, /obj/machinery/defibrillator_mount/directional/north, -/obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/stasis{ dir = 4 }, @@ -21487,8 +18766,7 @@ /obj/machinery/computer/camera_advanced/base_construction/aux{ dir = 8 }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 }, /turf/open/floor/iron, @@ -21498,10 +18776,7 @@ dir = 1 }, /obj/structure/transit_tube/crossing/horizontal, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "dBh" = ( /obj/effect/decal/cleanable/dirt{ @@ -21520,10 +18795,8 @@ /area/station/maintenance/department/security/prison_upper) "dBj" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/science/server) "dBm" = ( @@ -21553,9 +18826,6 @@ /area/station/maintenance/department/crew_quarters/bar) "dBv" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/machinery/field/generator, /obj/effect/turf_decal/stripes{ dir = 5 @@ -21571,12 +18841,8 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/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/medical/surgery) "dBE" = ( @@ -21607,12 +18873,8 @@ /turf/open/floor/iron, /area/station/engineering/atmos) "dBH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/iron/dark, /area/station/common/laser_tag) @@ -21643,12 +18905,8 @@ dir = 9 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/science/research) "dBT" = ( @@ -21685,8 +18943,8 @@ /area/station/hallway/primary/aft) "dCe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/dorms) @@ -21695,12 +18953,8 @@ /turf/open/floor/engine/co2, /area/station/engineering/atmos) "dCp" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/explab) @@ -21715,12 +18969,8 @@ "dCN" = ( /obj/machinery/firealarm/directional/south, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs{ dir = 4 }, @@ -21738,10 +18988,7 @@ /turf/open/floor/wood, /area/station/service/cafeteria) "dCV" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/hallway/primary/port) "dDf" = ( @@ -21750,23 +18997,13 @@ }, /area/station/security/prison) "dDl" = ( -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 8 - }, /obj/machinery/computer/security{ dir = 4 }, /obj/structure/disposalpipe/segment{ dir = 5 }, +/obj/effect/turf_decal/tile/red/real_red/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "dDr" = ( @@ -21805,8 +19042,8 @@ }, /obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/navigate_destination, /turf/open/floor/iron/dark, /area/station/cargo/office) @@ -21832,8 +19069,8 @@ /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) "dEa" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/eighties/red, /area/station/common/arcade) "dEb" = ( @@ -21866,10 +19103,8 @@ "dEe" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/table/reinforced, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -21884,8 +19119,8 @@ /area/station/science/circuits) "dEf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/port/upper) "dEi" = ( @@ -21899,8 +19134,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/hallway/primary/upper) @@ -21929,11 +19164,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/department/engineering/atmos_aux_port) -"dEI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/security/prison/safe) "dEJ" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/machinery/computer/security/hos, @@ -21949,17 +19179,15 @@ "dEU" = ( /obj/effect/turf_decal/trimline/yellow/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/pharmacy) "dEY" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible/layer4{ dir = 8 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "dFf" = ( /obj/structure/chair/plastic{ @@ -21974,9 +19202,7 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "dFm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/upper) @@ -22002,12 +19228,8 @@ /area/station/common/wrestling/locker) "dFt" = ( /obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/maintenance/port/aft) "dFy" = ( @@ -22198,7 +19420,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -22210,23 +19432,15 @@ }, /obj/effect/mapping_helpers/airlock/access/any/engineering/general, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/cargo/power_station/upper) "dHb" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/structure/extinguisher_cabinet/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/medical/medbay/lobby) "dHc" = ( @@ -22263,34 +19477,16 @@ /turf/open/floor/iron/freezer, /area/station/medical/aslyum) "dHC" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "dHN" = ( /obj/machinery/computer/prisoner/management{ dir = 4 }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/machinery/camera{ c_tag = "Security Post - Arrivals"; dir = 10 @@ -22350,8 +19546,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/trash/waffles, /obj/machinery/duct, /turf/open/floor/plating, @@ -22365,12 +19561,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -22430,8 +19622,8 @@ /turf/open/floor/plating, /area/station/maintenance/disposal) "dIR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/holopad, /obj/effect/landmark/blobstart, /turf/open/floor/wood, @@ -22526,12 +19718,8 @@ /area/station/maintenance/fore/upper) "dJx" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/blueshield) "dJz" = ( @@ -22539,12 +19727,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/upper) "dJA" = ( @@ -22554,12 +19738,8 @@ /obj/effect/turf_decal/delivery, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -22602,9 +19782,7 @@ c_tag = " Prison - Locker Room"; network = list("ss13","prison") }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison/shower) "dJW" = ( @@ -22668,7 +19846,6 @@ /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/closet/radiation, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes, /obj/item/clothing/glasses/meson, /obj/machinery/light/directional/north, /obj/machinery/newscaster/directional/north, @@ -22676,12 +19853,8 @@ /area/station/engineering/main) "dKz" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/hydroponics/garden) "dKB" = ( @@ -22720,16 +19893,15 @@ /area/station/engineering/gravity_generator) "dKT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad/secure, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai_upload) "dKZ" = ( /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 }, /turf/open/floor/iron/dark/side{ @@ -22746,12 +19918,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/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/aisat_interior) "dLk" = ( @@ -22777,7 +19945,7 @@ "dLv" = ( /obj/structure/bed/dogbed/runtime, /obj/item/toy/cattoy, -/mob/living/simple_animal/pet/cat/runtime, +/mob/living/basic/pet/cat/runtime, /obj/machinery/requests_console/directional/east{ department = "Chief Medical Officer's Desk"; name = "Chief Medical Officer's Requests Console" @@ -22806,12 +19974,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/chair/wood{ dir = 8 }, @@ -22820,7 +19984,7 @@ /area/station/service/cafeteria) "dLI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -22828,9 +19992,7 @@ codes_txt = "patrol;next_patrol=hall12"; location = "hall11" }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central) "dLK" = ( @@ -22848,12 +20010,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -22902,15 +20060,11 @@ /area/station/service/library/abandoned) "dMw" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/caution/stand_clear/blue{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, /turf/open/floor/iron/dark, /area/station/security/brig) "dMx" = ( @@ -22920,23 +20074,15 @@ "dMM" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/lab) "dMN" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/dark, +/turf/open/floor/iron/dark/side, /area/station/security/brig) "dMP" = ( /obj/machinery/door/airlock/multi_tile/glass{ @@ -22958,8 +20104,8 @@ /area/station/security/lockers) "dNd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/entry) "dNe" = ( @@ -22972,16 +20118,6 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron/dark, /area/station/science/robotics/mechbay) -"dNf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/engineering/transit_tube) "dNg" = ( /turf/open/floor/iron/smooth_edge{ dir = 4 @@ -22991,7 +20127,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/abandon_art_studio) @@ -23036,9 +20172,7 @@ "dNK" = ( /obj/structure/sauna_oven, /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/barber/spa) "dNQ" = ( @@ -23091,13 +20225,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/security/checkpoint/supply) -"dOR" = ( -/obj/effect/turf_decal/stripes, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/aux_eva) "dOT" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -23131,12 +20258,8 @@ /turf/open/floor/iron, /area/station/common/wrestling/locker) "dPN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva/upper) "dPO" = ( @@ -23187,10 +20310,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "dQn" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -23211,8 +20330,8 @@ /obj/machinery/door/airlock/captain{ name = "Captain's Quarters" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/command/captain, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) @@ -23244,9 +20363,7 @@ /turf/open/floor/plating, /area/station/maintenance/department/security) "dRf" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/aslyum) "dRn" = ( @@ -23296,26 +20413,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/fore/upper) -"dRY" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/brig) "dRZ" = ( /obj/effect/decal/cleanable/blood/gibs/old, /obj/effect/landmark/event_spawn, @@ -23347,6 +20444,8 @@ dir = 1 }, /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/hallway/primary/port) "dSh" = ( @@ -23364,24 +20463,13 @@ /turf/open/floor/engine/vacuum, /area/station/engineering/atmos) "dSm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, /turf/open/floor/iron, /area/station/command/bridge) -"dSo" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/medical/aslyum) "dSq" = ( /obj/machinery/light/directional/south, /turf/open/floor/iron/dark, @@ -23417,12 +20505,8 @@ /obj/structure/chair/office{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/red, /area/station/command/heads_quarters/hos) "dSI" = ( @@ -23508,7 +20592,7 @@ /area/station/maintenance/department/crew_quarters/bar) "dTa" = ( /obj/structure/safe, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/item/storage/backpack/duffelbag/syndie/hitman, /obj/item/card/id/advanced/silver/reaper, /obj/item/lazarus_injector, @@ -23548,12 +20632,8 @@ /area/station/science/research) "dTk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -23564,12 +20644,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/command/heads_quarters/rd) @@ -23590,11 +20666,10 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "dTy" = ( -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Security Maintenance" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "dTz" = ( /obj/structure/extinguisher_cabinet/directional/west, /obj/machinery/light/directional/south, @@ -23616,9 +20691,8 @@ "dTH" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/machinery/door/airlock/medical/glass{ id_tag = "MedbayFoyer"; @@ -23642,8 +20716,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, @@ -23668,7 +20742,6 @@ /turf/closed/wall/r_wall, /area/station/service/abandoned_gambling_den) "dTP" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/cable, /obj/structure/table, /obj/item/book/manual/wiki/barman_recipes{ @@ -23676,47 +20749,22 @@ pixel_y = 11 }, /obj/item/holosign_creator/robot_seat/bar, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) -"dTX" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen/diner) "dTY" = ( /obj/structure/railing{ pixel_y = -5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs{ dir = 8 }, /area/station/ai_monitored/aisat/exterior) -"dUd" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/catwalk_floor{ - initial_gas_mix = "TEMP=2.7" - }, -/area/space/nearstation) "dUf" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -23755,12 +20803,8 @@ /area/station/service/bar/atrium) "dUu" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) "dUv" = ( @@ -23792,10 +20836,8 @@ /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology/isolation) @@ -23805,24 +20847,16 @@ /turf/open/floor/plating, /area/station/maintenance/disposal) "dUF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/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) "dUP" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/red, /area/station/service/library/abandoned) "dUS" = ( @@ -23846,9 +20880,6 @@ /area/station/hallway/secondary/service) "dVc" = ( /obj/machinery/power/smes/engineering, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/machinery/camera/directional/west{ c_tag = "Engineering - Power Monitoring"; name = "engineering camera" @@ -23910,13 +20941,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green, /turf/open/floor/iron, /area/station/service/hydroponics) "dVP" = ( @@ -23936,16 +20960,6 @@ /obj/effect/spawner/random/trash/moisture, /turf/open/floor/plating, /area/station/maintenance/aft/upper) -"dWc" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "dWe" = ( /obj/structure/flora/grass/jungle, /obj/structure/flora/bush/flowers_pp, @@ -24031,9 +21045,6 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "dXb" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /turf/open/floor/iron/dark, /area/station/engineering/main) "dXl" = ( @@ -24045,10 +21056,10 @@ /turf/open/floor/carpet/green, /area/station/command/heads_quarters/nt_rep) "dXo" = ( -/obj/structure/closet/cardboard, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/salon/lower) +/obj/structure/reagent_crafting_bench, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/wood/large, +/area/station/service/forge) "dXq" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -24057,12 +21068,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable/layer1, /obj/structure/disposalpipe/segment{ dir = 4 @@ -24080,19 +21087,6 @@ }, /turf/open/floor/iron/dark/side, /area/station/security/office) -"dXz" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/maintenance/department/medical/central) "dXE" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -24106,12 +21100,8 @@ /turf/open/space/basic, /area/space/nearstation) "dXJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/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, @@ -24144,34 +21134,14 @@ /obj/effect/turf_decal/stripes{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"dXY" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "dXZ" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 9 }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 9 - }, /turf/open/floor/iron/dark, /area/station/engineering/break_room) "dYe" = ( @@ -24189,10 +21159,8 @@ "dYj" = ( /obj/machinery/holopad, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/checker, /area/station/service/janitor) @@ -24213,12 +21181,8 @@ dir = 8 }, /obj/structure/trash_pile, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/openspace, /area/station/maintenance/aft/upper) "dYL" = ( @@ -24268,12 +21232,8 @@ /area/space/nearstation) "dZo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -24298,10 +21258,8 @@ /turf/open/floor/iron/dark/side, /area/station/science/tele_sci) "dZy" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/common/night_club) "dZA" = ( @@ -24314,14 +21272,11 @@ }, /area/station/ai_monitored/turret_protected/aisat_interior) "dZQ" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, /obj/machinery/light/directional/east, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron, /area/station/commons/storage/primary) "dZR" = ( @@ -24379,9 +21334,6 @@ }, /obj/machinery/portable_atmospherics/canister/anesthetic_mix, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/structure/window/spawner/directional/west, /obj/structure/window/spawner/directional/south, /turf/open/floor/iron, @@ -24408,9 +21360,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, /obj/structure/chair/office/light{ dir = 8 }, @@ -24479,30 +21428,16 @@ /area/station/engineering/storage/tcomms) "ebD" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/central) "ebF" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/medical/coldroom) "ebG" = ( @@ -24535,9 +21470,6 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "ecj" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/structure/cable, /obj/structure/chair/stool/directional/east, /obj/effect/landmark/start/atmospheric_technician, @@ -24548,13 +21480,8 @@ dir = 4; pixel_x = -15 }, -/turf/open/floor/iron/dark/small, +/turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) -"eco" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/security/brig) "ecF" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/machinery/status_display/ai/directional/south, @@ -24569,6 +21496,10 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/space/openspace, /area/space) +"ecR" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) "eda" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/structure/extinguisher_cabinet/directional/south, @@ -24601,12 +21532,8 @@ name = "Cell 6"; req_access = list("security") }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/vg_decals/numbers/six, /turf/open/floor/iron/dark/side{ dir = 4 @@ -24625,8 +21552,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/chapel) "edQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/purple, /area/station/common/night_club) @@ -24639,12 +21566,8 @@ dir = 10 }, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/medical/medbay/central) "edY" = ( @@ -24689,16 +21612,6 @@ name = "Cargo Deliveries"; req_access = list("security") }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /turf/open/floor/iron/dark, /area/station/security/brig) "eeD" = ( @@ -24707,9 +21620,6 @@ /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) "eeE" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 4; initialize_directions = 8 @@ -24724,13 +21634,6 @@ /obj/machinery/space_heater, /turf/open/floor/plating, /area/station/maintenance/port/upper) -"eeP" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/medical/cryo) "eeQ" = ( /obj/effect/turf_decal/tile/red{ dir = 4 @@ -24772,9 +21675,6 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/dark/small, /area/station/cargo/storage) "eeW" = ( @@ -24788,14 +21688,11 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/storage_shared) "eeY" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /obj/structure/rack/shelf, /obj/effect/spawner/random/techstorage/tcomms_all, /turf/open/floor/iron/dark, @@ -24835,14 +21732,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/upper) -"efp" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/obj/machinery/light/floor, -/obj/effect/turf_decal/trimline/yellow, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "efr" = ( /obj/effect/turf_decal/weather/sand{ dir = 10 @@ -24858,25 +21747,15 @@ /turf/open/floor/grass, /area/station/hallway/primary/central) "efz" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/door/airlock/highsecurity{ name = "AI Upload Access" }, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/command/ai_upload, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload) "efD" = ( /obj/machinery/space_heater, @@ -24924,13 +21803,6 @@ /obj/structure/mirror/directional/east, /turf/open/floor/iron/freezer, /area/station/commons/dorms/room8) -"efZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "egb" = ( /obj/effect/turf_decal/siding/thinplating_new{ dir = 8 @@ -24940,7 +21812,7 @@ /area/station/hallway/primary/port) "egd" = ( /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/library) "egg" = ( @@ -24955,10 +21827,8 @@ /area/station/command/heads_quarters/hop) "ego" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -24980,22 +21850,16 @@ /area/station/maintenance/department/science/central) "egB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/duct, +/obj/effect/spawner/structure/window/reinforced, /obj/structure/disposalpipe/segment{ - dir = 6 + dir = 4 }, -/turf/open/floor/iron/white, +/turf/open/floor/plating, /area/station/medical/virology) "egE" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -25084,9 +21948,7 @@ /area/station/command/heads_quarters/cmo) "ehp" = ( /obj/effect/turf_decal/tile/blue, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -25102,8 +21964,8 @@ /area/station/security/prison/workout) "ehs" = ( /obj/effect/landmark/start/geneticist, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -25161,9 +22023,7 @@ /turf/open/floor/iron/dark, /area/station/medical/morgue) "eid" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 10 }, @@ -25222,12 +22082,8 @@ dir = 4 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/lobby) "eiB" = ( @@ -25287,31 +22143,12 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) -"eiR" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "eiW" = ( /obj/structure/railing, /turf/closed/wall, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "eiY" = ( /obj/structure/fence/door, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, /obj/machinery/door/firedoor/border_only{ dir = 1 }, @@ -25328,29 +22165,11 @@ /turf/open/floor/wood, /area/station/service/cafeteria) "ejd" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/railing/corner/end, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, /area/station/security/execution/transfer) "eje" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/structure/cable, /turf/open/floor/iron/cafeteria, /area/station/commons/locker) @@ -25372,7 +22191,6 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, -/obj/effect/turf_decal/stripes/box, /obj/machinery/disposal/delivery_chute{ dir = 8 }, @@ -25385,8 +22203,8 @@ }, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "ejG" = ( @@ -25429,19 +22247,14 @@ "ekl" = ( /obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/security, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /turf/open/floor/iron/dark/side, /area/station/security/checkpoint/escape) "ekr" = ( /obj/structure/table, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/spawner/random/engineering/tool, /obj/effect/spawner/random/engineering/tool, /turf/open/floor/iron/dark/side{ @@ -25452,10 +22265,7 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "ekE" = ( /obj/structure/closet, @@ -25465,18 +22275,12 @@ /area/station/maintenance/starboard/fore) "ekF" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "ekG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -25491,12 +22295,6 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"ekN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/medical/surgery/theatre) "ekQ" = ( /obj/structure/railing/corner/end, /obj/effect/turf_decal/trimline/purple/filled/line, @@ -25515,9 +22313,6 @@ /turf/open/floor/grass, /area/station/medical/virology/isolation) "elg" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/light/directional/east, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -25591,9 +22386,6 @@ }, /obj/structure/window/reinforced/spawner/directional/south, /obj/machinery/meter, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -25609,9 +22401,7 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/central) "elK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing/corner{ dir = 1 }, @@ -25619,13 +22409,6 @@ dir = 1 }, /area/station/commons/dorms) -"elM" = ( -/obj/effect/turf_decal/stripes, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/science/ordnance/storage) "elN" = ( /obj/effect/decal/cleanable/blood/gibs/old, /obj/effect/mapping_helpers/burnt_floor, @@ -25633,8 +22416,8 @@ /area/station/maintenance/fore/upper) "elO" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) @@ -25663,12 +22446,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -25688,30 +22467,11 @@ /turf/open/floor/iron/dark, /area/station/science/power_station) "emk" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/structure/disposalpipe/segment{ dir = 10 }, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) -"emq" = ( -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "emr" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -25721,27 +22481,16 @@ /turf/open/floor/iron/white, /area/station/science/research) "emt" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/pew/right{ dir = 4 }, /obj/machinery/light/directional/west, /obj/machinery/status_display/evac/directional/north, -/turf/open/floor/iron, -/area/station/security/prison/mess) -"emz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 }, /turf/open/floor/iron, -/area/station/security/execution/transfer) +/area/station/security/prison/mess) "emD" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -25777,15 +22526,6 @@ /obj/structure/reagent_dispensers/water_cooler, /turf/open/floor/iron/dark, /area/station/engineering/break_room) -"enj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/wood/parquet, -/area/station/common/gaskiosk) "enl" = ( /obj/machinery/light/small/directional/east, /obj/machinery/portable_atmospherics/scrubber, @@ -25807,12 +22547,8 @@ /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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, /area/station/cargo/lobby) @@ -25822,14 +22558,12 @@ /turf/open/floor/iron/freezer, /area/station/common/locker_room_shower) "enO" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, /area/station/security/brig) "eod" = ( /obj/structure/mirror/directional/north, @@ -25839,12 +22573,6 @@ /area/station/commons/toilet/auxiliary) "eof" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/test_chambers) "eoj" = ( @@ -25884,25 +22612,15 @@ /obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/central) -"eoK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "eoO" = ( /obj/item/stack/sheet/iron{ amount = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/science/research/abandoned) "eoQ" = ( @@ -25915,12 +22633,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/prison/upper) -"eoS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "eoV" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -25948,10 +22660,6 @@ desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments."; name = "SapMaster XP" }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/side{ dir = 8 @@ -25959,15 +22667,9 @@ /area/station/service/hydroponics) "epc" = ( /obj/machinery/vending/boozeomat, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "epg" = ( @@ -25975,8 +22677,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -25988,12 +22690,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/aft/upper) "epz" = ( @@ -26024,12 +22722,8 @@ /area/station/maintenance/department/science/ordnance_maint) "epN" = ( /obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -26041,7 +22735,7 @@ /obj/effect/turf_decal/stripes{ dir = 10 }, -/obj/machinery/modular_computer/preset/civilian{ +/obj/machinery/computer/rdconsole{ dir = 4 }, /turf/open/floor/iron, @@ -26106,12 +22800,8 @@ "eqr" = ( /obj/item/trash/syndi_cakes, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/fore/upper) @@ -26122,8 +22812,8 @@ /area/station/medical/morgue) "eqw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/small/directional/east, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -26186,9 +22876,7 @@ dir = 8 }, /obj/machinery/meter, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "erj" = ( /obj/effect/turf_decal/stripes{ @@ -26217,12 +22905,6 @@ /obj/structure/rack/shelf, /turf/open/floor/iron/dark, /area/station/cargo/warehouse) -"erE" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/commons/dorms) "erU" = ( /obj/structure/chair/pew{ dir = 8 @@ -26241,32 +22923,26 @@ /turf/open/floor/iron/cafeteria, /area/station/common/wrestling/concessions) "esc" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/aux_eva) "esd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) "esg" = ( /obj/item/trash/waffles, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/fore/upper) "esh" = ( /obj/structure/window/spawner/directional/west, /obj/structure/window/spawner/directional/north, -/obj/effect/landmark/start/assistant, /obj/structure/chair/sofa/corp/corner{ color = "#DE3A3A"; dir = 4 @@ -26297,7 +22973,7 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/landmark/navigate_destination, /obj/effect/mapping_helpers/airlock/access/all/command/teleporter, @@ -26312,10 +22988,7 @@ /area/station/cargo/power_station/upper) "esy" = ( /obj/effect/turf_decal/vg_decals/numbers/zero, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "esA" = ( /obj/machinery/iv_drip, @@ -26341,13 +23014,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/upper) -"esH" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "esP" = ( /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood{ @@ -26374,12 +23040,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/engineering/aux_base, /turf/open/floor/iron, /area/station/construction/mining/aux_base) @@ -26397,12 +23059,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/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/disposal) "eth" = ( @@ -26473,12 +23131,6 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/rd) "etL" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/side{ dir = 4 @@ -26522,26 +23174,21 @@ /area/station/engineering/engine_smes) "etY" = ( /obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/textured, /area/station/common/cryopods) "euj" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/machinery/door/firedoor, /obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "eul" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/firedoor, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -26562,11 +23209,11 @@ "eum" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/service/bar) "euq" = ( @@ -26610,9 +23257,7 @@ dir = 4 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) "euJ" = ( @@ -26631,9 +23276,6 @@ "euL" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/machinery/computer/security/telescreen/turbine{ dir = 8; pixel_x = 32 @@ -26648,17 +23290,15 @@ sortType = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) "euQ" = ( /obj/structure/disposalpipe/segment{ dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/hallway/primary/port) "euS" = ( @@ -26713,9 +23353,7 @@ /turf/open/floor/iron/white, /area/station/science/robotics) "evd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/upper) @@ -26724,21 +23362,20 @@ dir = 1 }, /obj/effect/landmark/start/chemist, -/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "evi" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/research) "evl" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/machinery/door/window{ dir = 4; name = "Deliveries"; @@ -26754,12 +23391,8 @@ /area/station/cargo/office) "evn" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/stripes/white/line{ dir = 10 }, @@ -26808,12 +23441,8 @@ /area/station/security/prison/visit) "evQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/blobstart, /turf/open/floor/iron/freezer, /area/station/service/kitchen/coldroom) @@ -26824,26 +23453,13 @@ /area/station/maintenance/port/aft) "evT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, /turf/open/floor/iron, /area/station/service/chapel) -"evX" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/closed/wall/r_wall, -/area/station/ai_monitored/turret_protected/aisat_interior) "ewa" = ( /turf/open/floor/wood, /area/station/medical/patients_rooms) @@ -26858,15 +23474,6 @@ dir = 1 }, /area/station/medical/aslyum) -"ewi" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/carpet/red, -/area/station/service/library/abandoned) "ewk" = ( /obj/structure/decorative/shelf/crates, /obj/machinery/light/directional/south, @@ -26880,9 +23487,6 @@ /area/station/security/medical) "ews" = ( /obj/effect/turf_decal/box, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/structure/ore_box, /turf/open/floor/iron/dark, /area/station/cargo/miningoffice) @@ -26942,17 +23546,12 @@ /area/station/security/prison) "ewI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/cryo) "ewO" = ( /obj/structure/closet/firecloset, /obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/engineering/main) "ewR" = ( @@ -26961,9 +23560,6 @@ /turf/open/floor/iron/dark, /area/station/security/checkpoint/escape) "ewU" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /obj/effect/turf_decal/stripes/red/line{ dir = 9 }, @@ -26981,19 +23577,16 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos) "exc" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/siding/wood{ dir = 8 }, /obj/structure/chair/stool/bar/directional/west, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/command/captain_dining) "exf" = ( @@ -27059,9 +23652,7 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/checkpoint/customs/auxiliary) "exN" = ( @@ -27078,18 +23669,13 @@ /area/station/service/barber) "eya" = ( /obj/machinery/disposal/bin, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/status_display/ai/directional/south, /obj/structure/disposalpipe/trunk{ dir = 1 }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/security/interrogation) "eyb" = ( @@ -27147,12 +23733,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/port/aft) "eyD" = ( @@ -27168,10 +23750,8 @@ pixel_x = -6 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/bridge) "eyF" = ( @@ -27191,10 +23771,9 @@ /area/station/maintenance/department/crew_quarters/dorms) "eyN" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -27214,7 +23793,7 @@ /area/station/commons/dorms/room2) "ezm" = ( /obj/effect/turf_decal/siding/wood/corner, -/obj/structure/railing/corner/end/flip{ +/obj/structure/railing/corner/end{ dir = 4 }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -27250,12 +23829,6 @@ /obj/structure/fans/tiny/forcefield{ dir = 8 }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/plating, /area/station/cargo/miningdock) "ezC" = ( @@ -27288,10 +23861,7 @@ /obj/structure/transit_tube/diagonal{ dir = 4 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "eAa" = ( /obj/machinery/door/firedoor/border_only, @@ -27307,12 +23877,8 @@ }, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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, /area/station/engineering/supermatter/room) @@ -27356,12 +23922,8 @@ "eAz" = ( /obj/machinery/duct, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/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) "eAB" = ( @@ -27372,28 +23934,11 @@ /obj/structure/railing{ dir = 10 }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; +/obj/effect/turf_decal/tile/red/real_red/anticorner/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) -"eAP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "eAQ" = ( /turf/closed/wall, /area/station/science/robotics/lab) @@ -27418,20 +23963,15 @@ /turf/open/floor/iron/white, /area/station/science/research) "eAU" = ( -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 4 - }, /obj/structure/chair{ dir = 1 }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark/side, /area/station/common/laser_tag) "eAV" = ( @@ -27474,24 +24014,16 @@ /area/station/maintenance/department/science/xenobiology) "eBo" = ( /obj/structure/window/spawner/directional/north, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/machinery/suit_storage_unit/security, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/blueshield) "eBp" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "eBq" = ( @@ -27521,15 +24053,12 @@ /area/station/maintenance/department/science/central) "eBG" = ( /obj/structure/closet/secure_closet/evidence, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/camera/directional/west{ c_tag = "Security - Evidence Storage" }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/security/interrogation) "eBL" = ( @@ -27543,8 +24072,8 @@ /obj/machinery/door/airlock/asylum{ name = "Asylum Entrance" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/medical/psychology, /obj/machinery/duct, /turf/open/floor/iron/white/side{ @@ -27558,12 +24087,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/central) "eCb" = ( @@ -27601,9 +24126,7 @@ /turf/open/floor/plating/airless, /area/station/maintenance/port/upper) "eCq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 6 }, @@ -27638,18 +24161,8 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "eCK" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -27682,8 +24195,7 @@ /obj/item/stack/sheet/iron/fifty, /obj/item/stack/sheet/iron/fifty, /obj/item/stack/sheet/glass/fifty, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 }, /turf/open/floor/iron, @@ -27706,12 +24218,8 @@ dir = 4 }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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 = "N-O2 Stop Shop" }, @@ -27720,12 +24228,8 @@ }, /area/station/common/gaskiosk) "eDc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/iron/dark/side, @@ -27735,10 +24239,6 @@ /turf/open/floor/iron/white, /area/station/medical/cryo) "eDl" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/machinery/light/directional/west, /obj/item/radio/intercom/directional/west, /obj/structure/disposalpipe/segment, @@ -27867,12 +24367,8 @@ }, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/medical/psychology) "eEN" = ( @@ -27892,14 +24388,6 @@ }, /turf/open/floor/stone, /area/station/common/wrestling/arena) -"eES" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/science/research) "eEX" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, @@ -27916,25 +24404,21 @@ /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/flora/grass/jungle, /obj/structure/flora/bush/flowers_br, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/grass, /area/station/command/heads_quarters/hos) "eFf" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/noticeboard/directional/east, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) "eFi" = ( /obj/structure/chair/sofa/bench/left{ pixel_y = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -28009,20 +24493,8 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/upper) -"eFM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "eFT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/command) "eFU" = ( @@ -28070,38 +24542,21 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/open/floor/plating, /area/station/engineering/atmos) -"eGm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/maintenance/port/upper) -"eGt" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 +"eGr" = ( +/obj/machinery/computer/mech_bay_power_console{ + dir = 1 }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "eGv" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -28115,16 +24570,13 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/central) "eGB" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 4 }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark/side{ dir = 9 }, @@ -28132,7 +24584,7 @@ "eGG" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/mob/living/simple_animal/bot/cleanbot{ +/mob/living/basic/bot/cleanbot{ name = "Soapficcer Cleansky" }, /obj/structure/disposalpipe/segment{ @@ -28156,21 +24608,12 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/iron, /area/station/hallway/primary/upper) -"eGN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "eGO" = ( /obj/structure/table, /obj/item/circuitboard/machine/thermomachine, @@ -28187,7 +24630,7 @@ /area/station/service/abandoned_gambling_den) "eGS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/cmo) "eGW" = ( @@ -28221,17 +24664,11 @@ /obj/structure/barricade/wooden, /turf/open/floor/plating, /area/station/maintenance/abandon_diner) -"eHg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/commons/fitness) "eHi" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) "eHr" = ( @@ -28275,12 +24712,8 @@ name = "Chapel Office" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/service/chapel_office, /turf/open/floor/iron/dark, /area/station/service/chapel/office) @@ -28303,12 +24736,8 @@ /area/station/commons/dorms) "eHO" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -28348,16 +24777,6 @@ /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/iron/smooth, /area/station/cargo/power_station/upper) -"eIy" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/dark/side, -/area/station/hallway/secondary/command) "eIA" = ( /obj/structure/chair/wood{ dir = 1 @@ -28375,16 +24794,9 @@ /turf/open/floor/iron/dark, /area/station/science/research) "eIM" = ( -/obj/effect/turf_decal/bot, /obj/item/clothing/glasses/hud/security/sunglasses/gars, /obj/item/clothing/glasses/hud/security, /obj/item/clothing/glasses/hud/security, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/effect/turf_decal/stripes/corner{ dir = 1 }, @@ -28437,10 +24849,6 @@ dir = 5; id = "cargounload" }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /turf/open/floor/plating, /area/station/cargo/storage) "eJf" = ( @@ -28498,10 +24906,8 @@ /obj/structure/disposalpipe/junction/yjunction{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/cargo/storage) "eJF" = ( @@ -28527,12 +24933,8 @@ /obj/item/clothing/suit/hazardvest, /obj/item/clothing/head/utility/hardhat, /obj/item/clothing/head/utility/hardhat, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/department/medical/central) "eJW" = ( @@ -28551,8 +24953,8 @@ name = "Front Desk" }, /obj/effect/turf_decal/siding/thinplating/dark, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/common/night_club) @@ -28628,15 +25030,6 @@ }, /turf/open/floor/iron/white, /area/station/science/research) -"eKA" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/port/aft) "eKB" = ( /obj/structure/chair/stool/directional/east, /turf/open/floor/wood, @@ -28648,16 +25041,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) -"eKO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/wood, -/area/station/hallway/primary/port) "eKU" = ( /turf/closed/wall/r_wall, /area/station/security/prison/visit) @@ -28751,7 +25134,6 @@ /obj/effect/turf_decal/siding/wood/corner{ dir = 4 }, -/obj/effect/landmark/start/assistant, /obj/item/radio/intercom/directional/east, /turf/open/floor/wood, /area/station/hallway/primary/central) @@ -28764,12 +25146,6 @@ }, /area/station/security/prison/workout) "eLF" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/structure/table, /obj/item/book/manual/wiki/security_space_law{ pixel_y = 5 @@ -28879,8 +25255,8 @@ }, /area/station/commons/fitness/recreation) "eMC" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/chair/comfy/black{ dir = 8 }, @@ -28898,12 +25274,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/security/greater) "eMK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 5 }, @@ -28914,15 +25286,15 @@ name = "Art Storage" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/storage/art) "eMP" = ( /obj/effect/turf_decal/siding/wood/end, /obj/item/clothing/suit/apron/chef, /obj/item/clothing/shoes/sandal, -/obj/item/clothing/under/shorts/skyrat, +/obj/item/clothing/under/shorts/nova, /turf/open/floor/wood, /area/station/hallway/primary/central) "eMT" = ( @@ -28941,43 +25313,32 @@ /obj/item/clothing/gloves/color/black, /obj/item/wrench, /obj/item/clothing/glasses/meson/engine, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/engineering/main) "eNn" = ( /obj/effect/landmark/event_spawn, /obj/machinery/light/floor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /mob/living/basic/pet/bumbles, /obj/structure/bed/dogbed, /turf/open/floor/iron, /area/station/service/hydroponics) "eNq" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/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/tile/purple/opposingcorners{ + dir = 4 + }, /turf/open/floor/iron, /area/station/service/barber) "eNx" = ( /obj/effect/turf_decal/vg_decals/atmos/plasma, -/obj/effect/turf_decal/bot_white, /turf/open/floor/engine/plasma, /area/station/engineering/atmos) "eNy" = ( @@ -29011,16 +25372,6 @@ /turf/open/floor/wood/parquet, /area/station/service/theater) "eNV" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/table, /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/east, @@ -29034,7 +25385,7 @@ pixel_y = -3 }, /obj/machinery/light/small/directional/west, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload) "eNX" = ( /obj/structure/flora/bush/fullgrass, @@ -29043,8 +25394,8 @@ /area/station/security/prison/garden) "eNZ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -29071,9 +25422,6 @@ "eOe" = ( /obj/effect/turf_decal/bot, /obj/machinery/power/emitter, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /obj/effect/turf_decal/stripes{ dir = 10 }, @@ -29168,23 +25516,14 @@ /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) "eOQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/medium, /area/station/science/research) "eOS" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron/dark/side, /area/station/security/brig) "eOU" = ( /obj/effect/landmark/start/botanist, @@ -29196,7 +25535,6 @@ /area/station/service/hydroponics) "eOX" = ( /obj/structure/closet/secure_closet/personal, -/obj/effect/turf_decal/bot_blue, /obj/effect/turf_decal/siding/wood, /turf/open/floor/carpet, /area/station/command/gateway) @@ -29221,15 +25559,10 @@ /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) "ePc" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating/dark/end{ - dir = 1 - }, /obj/structure/drain, /obj/machinery/shower/directional/north, /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, +/obj/effect/turf_decal/box, /turf/open/floor/iron/checker, /area/station/engineering/atmos/hfr_room) "ePj" = ( @@ -29295,29 +25628,24 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) "ePG" = ( /obj/effect/turf_decal/box/white, -/obj/effect/turf_decal/arrows/white{ - color = "#0000FF"; - pixel_y = 15 +/obj/effect/turf_decal/arrows/blue{ + pixel_y = 13 }, -/turf/open/floor/iron/dark/small, +/turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) "ePN" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/security/prison) "ePO" = ( @@ -29356,13 +25684,12 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/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/caution/stand_clear/blue{ + dir = 8 + }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "eQb" = ( @@ -29388,15 +25715,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/aft/upper) -"eQh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/science/research) "eQj" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -29423,9 +25741,7 @@ /turf/open/floor/engine, /area/station/science/xenobiology) "eQp" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/secondary/service) @@ -29433,10 +25749,6 @@ /obj/structure/chair{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /turf/open/floor/iron/dark, /area/station/security/brig) "eQE" = ( @@ -29447,19 +25759,10 @@ /obj/item/bedsheet{ pixel_y = 8 }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 6 - }, /obj/machinery/status_display/evac/directional/east, /turf/open/floor/iron/dark, /area/station/security/brig) "eQF" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/machinery/airalarm/directional/east, /obj/effect/landmark/blobstart, /turf/open/floor/iron/white, @@ -29480,9 +25783,6 @@ /obj/item/pen{ pixel_y = 3 }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, @@ -29509,21 +25809,9 @@ /turf/open/openspace, /area/station/hallway/primary/upper) "eRk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) -"eRl" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "eRm" = ( /obj/structure/chair/comfy/brown{ dir = 4 @@ -29536,12 +25824,8 @@ "eRo" = ( /obj/vehicle/ridden/wheelchair, /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) @@ -29563,12 +25847,8 @@ "eRy" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/public/glass{ name = "Central Hallway" }, @@ -29581,26 +25861,14 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) "eRE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/hallway/secondary/service) -"eRF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "eRN" = ( /obj/structure/chair{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -29620,8 +25888,8 @@ }, /obj/item/trash/raisins, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/plating, @@ -29646,17 +25914,12 @@ /obj/item/trash/energybar, /turf/open/floor/plating, /area/station/maintenance/fore/upper) -"eSj" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 +"eSi" = ( +/obj/effect/turf_decal/stripes/blue/line{ + dir = 8 }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/security/prison/upper) +/turf/open/floor/iron/dark, +/area/station/security/brig) "eSk" = ( /obj/machinery/conveyor{ id = "robo2" @@ -29713,15 +25976,6 @@ /obj/item/crowbar, /turf/open/floor/engine, /area/station/engineering/supermatter) -"eSV" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/brig) "eSY" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -29779,7 +26033,6 @@ dir = 8 }, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/hallway/primary/upper) "eTG" = ( @@ -29787,21 +26040,11 @@ /turf/open/floor/carpet/executive, /area/station/command/heads_quarters/blueshield) "eTH" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/railing{ dir = 8 }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "eTI" = ( /obj/structure/table, @@ -29820,29 +26063,21 @@ /area/station/security/execution/transfer) "eTS" = ( /obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/loading_area/white{ - dir = 4 - }, /obj/machinery/door/poddoor/shutters/window/preopen{ id = "ArrivalsEntry3"; name = "Line Reroute Shutter" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ +/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/effect/turf_decal/siding/thinplating_new{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ +/obj/effect/turf_decal/arrows/white{ dir = 4 }, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) "eTU" = ( -/obj/effect/turf_decal/stripes/box, /obj/structure/ladder, /turf/open/floor/plating, /area/station/engineering/main) @@ -29866,9 +26101,6 @@ /area/station/maintenance/department/medical/central) "eUf" = ( /obj/structure/railing/corner, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, /obj/machinery/light/directional/north, /obj/structure/disposalpipe/segment{ @@ -29930,7 +26162,7 @@ /area/station/hallway/primary/central/aft) "eUy" = ( /turf/closed/wall/rust, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "eUG" = ( /obj/effect/turf_decal/siding/blue/corner{ dir = 4 @@ -29972,9 +26204,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/xenobiology) "eVc" = ( @@ -30001,12 +26231,11 @@ /turf/open/floor/iron, /area/station/construction/mining/aux_base) "eVf" = ( -/obj/machinery/door/airlock/maintenance_hatch, -/obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/department/chapel) +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/hallway/primary/port) "eVg" = ( /turf/closed/wall, /area/station/maintenance/department/crew_quarters/dorms) @@ -30014,7 +26243,7 @@ /obj/effect/turf_decal/stripes{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/gravity_generator) "eVv" = ( @@ -30036,22 +26265,9 @@ }, /obj/structure/window/reinforced/tinted/spawner/directional/west, /obj/structure/extinguisher_cabinet/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"eVz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "eVK" = ( /obj/structure/table, /obj/item/folder/blue{ @@ -30075,12 +26291,8 @@ /area/station/maintenance/solars/starboard/fore) "eVV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) @@ -30089,12 +26301,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "eWi" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/prison/safe) "eWl" = ( @@ -30104,9 +26312,9 @@ /turf/closed/wall/r_wall, /area/station/maintenance/department/engineering/engine_aft_starboard) "eWy" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison) "eWz" = ( @@ -30130,13 +26338,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"eWB" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/office) "eWC" = ( /obj/structure/table/reinforced, /obj/machinery/microwave/engineering/cell_included{ @@ -30206,21 +26407,6 @@ }, /turf/open/floor/iron/smooth, /area/station/engineering/atmos/pumproom) -"eWS" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/wood/parquet, -/area/station/science/breakroom) "eWU" = ( /obj/structure/bookcase/random, /turf/open/floor/wood, @@ -30251,9 +26437,6 @@ /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 1 - }, /obj/machinery/modular_computer/preset/cargochat/engineering{ dir = 8 }, @@ -30261,10 +26444,8 @@ /area/station/engineering/break_room) "eXo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/plating, /area/station/security/prison/upper) @@ -30272,8 +26453,8 @@ /obj/structure/railing{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/firedoor/border_only{ dir = 8 }, @@ -30281,10 +26462,8 @@ /area/station/commons/dorms) "eXx" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/lounge) "eXy" = ( @@ -30327,20 +26506,16 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/hallway/primary/central) "eYs" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side, /area/station/ai_monitored/command/storage/eva) "eYw" = ( @@ -30357,12 +26532,8 @@ /obj/effect/turf_decal/tile/blue{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -30374,7 +26545,6 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "eYP" = ( -/obj/effect/turf_decal/delivery, /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/atmospherics/components/binary/pump{ name = "Mix to Port" @@ -30393,31 +26563,24 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/abandon_art_studio) "eZi" = ( -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/command/bridge) "eZj" = ( /obj/effect/turf_decal/box/white{ color = "#9FED58" }, -/turf/open/floor/iron/dark/small, +/turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) "eZn" = ( /obj/structure/table/wood, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /turf/open/floor/iron, /area/station/security/prison/mess) "eZo" = ( @@ -30458,12 +26621,8 @@ /area/station/hallway/primary/upper) "eZz" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -30588,8 +26747,8 @@ /turf/open/floor/iron/dark, /area/station/medical/morgue) "fag" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/detectives_office) "fah" = ( @@ -30602,12 +26761,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/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/research/abandoned) "fap" = ( @@ -30646,7 +26801,6 @@ "fax" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/engine, /area/station/science/xenobiology) "faz" = ( @@ -30671,13 +26825,7 @@ /area/station/security/checkpoint/science/research) "faG" = ( /obj/effect/turf_decal/bot_white/right, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/small, /area/station/cargo/miningdock) "faI" = ( @@ -30687,8 +26835,8 @@ }, /obj/effect/turf_decal/delivery, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/security/armory) "faJ" = ( @@ -30767,8 +26915,8 @@ /area/station/maintenance/port/fore) "fbt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -30797,18 +26945,14 @@ /turf/open/floor/iron/white, /area/station/medical/virology/isolation) "fbG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/maintenance/starboard/fore) "fbI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/red, /area/station/security/warden) "fbR" = ( @@ -30850,31 +26994,14 @@ /obj/machinery/vending/assist, /obj/structure/window/reinforced/spawner/directional/north, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, +/obj/effect/turf_decal/tile/purple/half, /turf/open/floor/iron/white/side, /area/station/science) -"fcs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/engineering/main) "fcw" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "fcz" = ( /obj/structure/chair/office{ @@ -30891,25 +27018,10 @@ /obj/machinery/light/directional/south, /turf/open/floor/engine, /area/station/science/xenobiology) -"fcH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/security/prison/upper) "fcK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/cafeteria) "fcM" = ( @@ -30966,12 +27078,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) "fcW" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/smooth, /area/station/cargo/miningdock) @@ -31036,19 +27144,9 @@ /obj/machinery/door/airlock/freezer{ name = "Medical Freezer" }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/medical/surgery, /turf/open/floor/iron/white, /area/station/medical/coldroom) @@ -31063,16 +27161,14 @@ /area/station/commons/fitness) "fdE" = ( /obj/effect/turf_decal/trimline/purple/filled/line, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/sign/nanotrasen{ pixel_y = -32 }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science) "fdF" = ( @@ -31101,13 +27197,12 @@ /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "fdU" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/pew/right{ dir = 8 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/prison/mess) "fdW" = ( @@ -31131,12 +27226,8 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -31188,12 +27279,8 @@ name = "Customs Desk" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/command/general, /obj/effect/turf_decal/siding/thinplating_new{ dir = 8 @@ -31243,21 +27330,11 @@ /obj/structure/chair/office{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/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) "ffG" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/closet/crate/trashcart/laundry, /obj/effect/spawner/random/contraband/prison, /obj/machinery/camera/directional/north{ @@ -31289,23 +27366,16 @@ /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/aisat_interior) "fgg" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/structure/chair{ dir = 1 }, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "fgj" = ( -/obj/effect/turf_decal/tile/bar{ +/obj/structure/cable, +/obj/effect/turf_decal/tile/bar/opposingcorners{ dir = 1 }, -/obj/effect/turf_decal/tile/bar, -/obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison/mess) "fgn" = ( @@ -31314,11 +27384,11 @@ /obj/item/healthanalyzer, /obj/item/clothing/glasses/hud/health, /obj/item/clothing/glasses/science, -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /obj/machinery/light_switch/directional/south, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/iron, /area/station/medical/virology) "fgo" = ( @@ -31334,8 +27404,8 @@ /area/station/service/lawoffice) "fgA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/shutters{ id = "Portbowmaints"; @@ -31369,12 +27439,8 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/xenobiology/control) "fgO" = ( @@ -31449,17 +27515,12 @@ /area/station/maintenance/abandon_kitchen_upper) "fhl" = ( /obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, /area/station/hallway/primary/port) "fhm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -31470,12 +27531,8 @@ /obj/machinery/door/airlock/maintenance_hatch{ name = "Medbay Maintenance" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -31528,8 +27585,8 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/aft) "fhS" = ( @@ -31537,10 +27594,8 @@ /area/station/medical/morgue) "fhU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/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/hallway/primary/port) @@ -31577,16 +27632,6 @@ }, /turf/open/floor/circuit, /area/station/science/research/abandoned) -"fhY" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "fhZ" = ( /turf/closed/wall/r_wall, /area/station/science/research/abandoned) @@ -31637,26 +27682,19 @@ /obj/effect/turf_decal/vg_decals/numbers/two{ dir = 8 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "fin" = ( /turf/closed/wall/r_wall, /area/station/maintenance/eva_shed/port) "fiv" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light_switch/directional/south, +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/barber) "fiw" = ( @@ -31671,8 +27709,8 @@ dir = 6 }, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/medbay/central) "fiI" = ( @@ -31686,9 +27724,6 @@ /turf/open/floor/iron, /area/station/science/research) "fiN" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, /obj/structure/rack/shelf, /obj/effect/spawner/random/techstorage/security_all, /turf/open/floor/iron/dark, @@ -31707,8 +27742,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/commons/dorms) @@ -31721,8 +27756,8 @@ }, /obj/machinery/status_display/ai/directional/west, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/iron, @@ -31730,12 +27765,8 @@ "fjr" = ( /obj/effect/turf_decal/vg_decals/numbers/five, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/safe) "fjw" = ( @@ -31833,7 +27864,6 @@ /area/station/cargo/miningoffice) "fkJ" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/bot, /obj/machinery/photocopier, /obj/machinery/firealarm/directional/east, /obj/effect/turf_decal/siding/thinplating_new/end{ @@ -31842,12 +27872,8 @@ /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs) "fkL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "fkN" = ( @@ -31890,9 +27916,6 @@ /turf/open/floor/plating, /area/station/maintenance/port/aft) "flL" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/effect/turf_decal/stripes/blue/line{ dir = 4 }, @@ -31901,28 +27924,11 @@ /turf/open/floor/plating, /area/station/medical/break_room) "flM" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/commons/vacant_room/commissary) "flR" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, /obj/structure/rack/shelf, /obj/effect/spawner/random/techstorage/rnd_all, /turf/open/floor/iron/dark, @@ -31946,10 +27952,7 @@ /obj/structure/transit_tube/curved{ dir = 4 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "fmu" = ( /obj/effect/spawner/structure/window/reinforced, @@ -31962,21 +27965,9 @@ /turf/open/floor/plating, /area/station/security/prison/safe) "fmw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"fmx" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron/smooth, -/area/station/cargo/miningdock) "fmC" = ( /turf/open/floor/iron/dark, /area/station/security/interrogation) @@ -31987,19 +27978,6 @@ "fmI" = ( /obj/structure/table_frame/wood, /obj/effect/spawner/random/trash/mess, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /turf/open/floor/iron, /area/station/maintenance/clown_chamber) "fmM" = ( @@ -32007,12 +27985,8 @@ dir = 4 }, /obj/effect/turf_decal/tile/yellow, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/iron, /area/station/engineering/break_room) @@ -32038,15 +28012,13 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology/control) "fnb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor, /area/station/engineering/atmos/test_chambers) "fnc" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/directional/east, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -32070,12 +28042,8 @@ }, /obj/item/trash/candy, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) @@ -32083,9 +28051,6 @@ /turf/closed/wall/r_wall, /area/station/science/xenobiology/hallway) "fnp" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /obj/structure/table/reinforced, /obj/item/clipboard, /obj/item/toy/figure/engineer, @@ -32101,9 +28066,6 @@ /area/station/hallway/secondary/command) "fnu" = ( /obj/structure/table/glass, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, /obj/item/clothing/neck/stethoscope, /obj/item/storage/box/beakers{ pixel_x = 3; @@ -32111,6 +28073,9 @@ }, /obj/item/storage/box/syringes, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/iron, /area/station/medical/virology) "fnv" = ( @@ -32162,12 +28127,8 @@ /turf/open/floor/iron/dark, /area/station/service/hydroponics) "fnL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/chapel/funeral) "fnO" = ( @@ -32264,19 +28225,15 @@ /area/station/maintenance/port/upper) "foT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white/textured, /area/station/medical/aslyum) "foV" = ( /obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -32290,19 +28247,15 @@ }, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/office) "foZ" = ( /obj/machinery/light/small/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/transit_tube) "fpl" = ( @@ -32337,10 +28290,6 @@ /area/station/science/breakroom) "fpt" = ( /obj/structure/table/wood/fancy/red, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/item/reagent_containers/cup/glass/bottle/champagne{ pixel_x = 6; pixel_y = 25 @@ -32374,7 +28323,7 @@ pixel_x = -3; pixel_y = 3 }, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /turf/open/floor/wood, /area/station/security/detectives_office) "fpz" = ( @@ -32395,8 +28344,8 @@ "fpD" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "fpI" = ( @@ -32421,12 +28370,8 @@ /obj/item/radio/intercom/directional/north, /obj/machinery/firealarm/directional/south, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/directional/south, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -32436,8 +28381,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/structure/sign/departments/restroom/directional/west, /turf/open/floor/iron, @@ -32454,10 +28399,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/engineering/atmos_aux_port) "fqc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/command) "fqd" = ( @@ -32471,10 +28414,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/black, /area/station/service/barber) "fqi" = ( @@ -32492,12 +28433,8 @@ /area/station/security/prison/rec) "fqs" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/maintenance/solars/port/fore) "fqw" = ( @@ -32527,33 +28464,17 @@ "fqG" = ( /obj/structure/disposalpipe/segment, /obj/effect/spawner/random/trash/mess, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/xenobio_disposals) "fqK" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/segment, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "fqM" = ( /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/closet/crate/bin, /obj/effect/spawner/random/trash/garbage, /obj/effect/spawner/random/trash/garbage, @@ -32567,7 +28488,6 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "fqR" = ( -/obj/effect/turf_decal/bot, /obj/structure/table/glass, /obj/item/seeds/lime{ pixel_x = 6 @@ -32579,12 +28499,6 @@ /obj/item/food/grown/wheat, /obj/item/food/grown/watermelon, /obj/item/food/grown/banana, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron/dark/side{ dir = 4 @@ -32594,12 +28508,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/plating, /area/station/maintenance/department/medical/central) @@ -32630,8 +28540,6 @@ "fre" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/machinery/disposal/bin, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/red, /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -32683,13 +28591,13 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "fsa" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/table, /obj/machinery/reagentgrinder{ pixel_x = -5; pixel_y = 9 }, /obj/item/reagent_containers/cup/glass/shaker, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "fsk" = ( @@ -32704,20 +28612,12 @@ }, /turf/open/floor/iron/dark, /area/station/security/prison/safe) -"fsu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/catwalk_floor, -/area/station/engineering/atmos/test_chambers) "fsv" = ( /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/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) "fsx" = ( @@ -32780,21 +28680,12 @@ /turf/closed/wall, /area/station/service/kitchen/diner) "ftk" = ( -/obj/effect/turf_decal/delivery/white{ - color = "#00ff00"; - name = "green" - }, /obj/machinery/light/directional/east, /obj/machinery/cryopod{ dir = 8 }, /turf/open/floor/iron/dark/textured_large, /area/station/common/cryopods) -"ftv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "ftH" = ( /obj/structure/bodycontainer/morgue{ dir = 8 @@ -32852,12 +28743,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_edge{ dir = 4 }, @@ -32886,21 +28773,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) -"fuv" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "fuw" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /turf/open/floor/iron/freezer, @@ -32935,17 +28807,9 @@ }, /area/station/common/wrestling/arena) "fuM" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -32969,7 +28833,6 @@ /area/station/hallway/secondary/exit) "fuX" = ( /obj/structure/window/spawner/directional/south, -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/hydroponics, /turf/open/floor/iron/dark, /area/station/service/hydroponics) @@ -32980,13 +28843,6 @@ "fuZ" = ( /obj/structure/closet/secure_closet/brig, /obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /turf/open/floor/iron/dark, /area/station/security/brig) "fvc" = ( @@ -32994,19 +28850,6 @@ /obj/structure/sign/warning/radiation/directional/east, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) -"fvn" = ( -/obj/effect/turf_decal/trimline/purple/filled/corner{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/research) "fvp" = ( /obj/structure/chair/office{ dir = 1 @@ -33047,15 +28890,6 @@ "fvF" = ( /turf/open/floor/plating, /area/station/security/execution/transfer) -"fvY" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 5 - }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, -/area/space/nearstation) "fvZ" = ( /obj/structure/chair/sofa/bench/right{ dir = 4; @@ -33069,12 +28903,6 @@ /area/station/hallway/secondary/entry) "fwb" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, /obj/structure/sign/departments/exam_room/directional/south, /turf/open/floor/iron/white, /area/station/medical/treatment_center) @@ -33082,13 +28910,10 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/service/library) "fwe" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/effect/turf_decal/stripes/red/line{ dir = 4 }, @@ -33180,9 +29005,6 @@ /turf/open/floor/iron/dark, /area/station/command/bridge) "fwv" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/structure/table/reinforced, /obj/item/t_scanner, /obj/item/t_scanner, @@ -33193,12 +29015,8 @@ /obj/effect/turf_decal/siding/thinplating/dark{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/dark, /area/station/common/night_club/back_stage) @@ -33218,19 +29036,14 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "fwE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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) "fwI" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/plating, /area/station/cargo/drone_bay) "fwM" = ( @@ -33238,9 +29051,6 @@ /turf/open/space/openspace, /area/space) "fwU" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/machinery/door/airlock/engineering{ name = "Starboard Bow Solar Access" }, @@ -33311,12 +29121,8 @@ /obj/effect/turf_decal/stripes/corner{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit, /area/station/command/gateway) "fxz" = ( @@ -33334,8 +29140,8 @@ }, /obj/effect/turf_decal/delivery/blue, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark, @@ -33371,13 +29177,11 @@ /area/station/maintenance/abandon_holding_cell) "fyg" = ( /obj/structure/filingcabinet/chestdrawer, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/structure/cable, -/turf/open/floor/iron/dark, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, /area/station/security/warden) "fyi" = ( /obj/effect/turf_decal/stripes{ @@ -33439,9 +29243,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/power/port_gen/pacman/pre_loaded, /turf/open/floor/iron/smooth, /area/station/cargo/power_station/upper) @@ -33454,9 +29256,7 @@ /turf/open/floor/iron/white, /area/station/science/research) "fyM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/upper) @@ -33469,21 +29269,11 @@ /obj/machinery/door/airlock/service{ name = "Kitchen" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/service/kitchen, /turf/open/floor/iron/checker, /area/station/service/kitchen) -"fyV" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "fyW" = ( /obj/structure/chair/comfy{ color = "#596479"; @@ -33548,8 +29338,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/abandon_office) @@ -33571,12 +29361,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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, /turf/open/floor/iron/dark, /area/station/maintenance/solars/port/fore) @@ -33589,10 +29375,6 @@ /turf/open/floor/plating, /area/station/maintenance/disposal) "fAn" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, /turf/open/floor/iron/smooth_large, @@ -33609,21 +29391,9 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "fAB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/storage/primary) -"fAG" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "fAH" = ( /obj/structure/rack/wooden, /obj/item/clothing/under/pants/camo{ @@ -33648,18 +29418,11 @@ /turf/open/floor/wood/parquet, /area/station/common/tailoring) "fAR" = ( -/obj/effect/turf_decal/bot, /obj/structure/window/spawner/directional/south, /obj/structure/reagent_dispensers/watertank/high, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/item/reagent_containers/cup/watering_can, /turf/open/floor/iron/dark/side{ dir = 4 @@ -33679,9 +29442,7 @@ "fAX" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) "fAY" = ( @@ -33690,16 +29451,6 @@ }, /turf/open/floor/iron/stairs/left, /area/station/hallway/primary/upper) -"fBc" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "fBk" = ( /obj/machinery/duct, /turf/open/floor/carpet/green, @@ -33737,10 +29488,10 @@ }, /area/station/science/explab) "fBH" = ( -/obj/effect/turf_decal/stripes{ +/obj/machinery/modular_computer/preset/engineering{ dir = 1 }, -/obj/machinery/modular_computer/preset/engineering{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, /turf/open/floor/iron/dark, @@ -33801,8 +29552,8 @@ }, /obj/machinery/status_display/ai/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -33811,12 +29562,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/crew_quarters/dorms) "fCB" = ( @@ -33831,22 +29578,10 @@ /area/station/service/cafeteria) "fCQ" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/science/ordnance/freezerchamber) "fCT" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/table, /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/north, @@ -33858,7 +29593,7 @@ req_access = list("ai_upload") }, /obj/effect/spawner/random/aimodule/neutral, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload) "fCU" = ( /turf/open/floor/carpet, @@ -33884,9 +29619,6 @@ /area/station/maintenance/department/medical/central) "fDk" = ( /obj/structure/rack, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/effect/spawner/random/techstorage/rnd_secure_all, /obj/machinery/light/directional/east, /obj/structure/cable, @@ -33903,15 +29635,13 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 9 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "fDD" = ( /obj/structure/railing/corner, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central) "fDI" = ( @@ -33931,13 +29661,10 @@ /turf/open/floor/wood, /area/station/maintenance/abandon_office) "fDP" = ( -/obj/effect/turf_decal/tile/red{ +/obj/structure/chair{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/structure/chair{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, /turf/open/floor/iron/dark/side, @@ -33955,19 +29682,10 @@ "fDW" = ( /obj/structure/railing/corner/end/flip, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) -"fEc" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/obj/effect/landmark/carpspawn, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, -/area/space/nearstation) "fEp" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -33985,15 +29703,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/upper) -"fEt" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/hallway/primary/port) "fEx" = ( /obj/machinery/button/door/directional/south{ id = "Toilet5"; @@ -34036,9 +29745,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "fEO" = ( /obj/structure/table, @@ -34047,9 +29754,7 @@ /area/station/maintenance/port/upper) "fEY" = ( /obj/machinery/newscaster/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/spawner/random/trash/mess, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -34064,37 +29769,20 @@ /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) "fFo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/chapel/office) "fFq" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/engineering/lesser) -"fFy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/eighties/red, -/area/station/common/arcade) "fFB" = ( /obj/structure/sink/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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 = "ChapelHall"; name = "Outer Garden Shutters" @@ -34113,16 +29801,6 @@ /obj/item/circuitboard/mecha/clarke/peripherals, /turf/open/floor/circuit, /area/station/science/research/abandoned) -"fFS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat_interior) "fFU" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -34131,12 +29809,8 @@ /obj/structure/railing{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -34195,8 +29869,8 @@ /area/station/maintenance/port/aft) "fGA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -34204,35 +29878,20 @@ /obj/machinery/door/firedoor, /turf/open/floor/plating, /area/station/maintenance/port/upper) -"fGC" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) -"fGO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/carpet/blue, -/area/station/command/heads_quarters/captain/private) "fGR" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/storage_shared) "fGV" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/mob/living/simple_animal/pet/cat, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/mob/living/basic/pet/cat, +/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/maintenance/abandon_exam/cat) @@ -34303,9 +29962,6 @@ /area/station/maintenance/starboard/fore) "fHD" = ( /obj/machinery/light/small/red/dim/directional/west, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/plating, /area/station/escapepodbay) "fHF" = ( @@ -34322,11 +29978,10 @@ "fHM" = ( /obj/structure/extinguisher_cabinet/directional/east, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red{ + dir = 1 }, /turf/open/floor/iron, /area/station/security/execution/transfer) @@ -34348,16 +30003,14 @@ /turf/open/floor/wood, /area/station/service/barber/spa) "fIb" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/item/radio/intercom/directional/west, -/obj/effect/turf_decal/delivery, /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 4 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) "fIc" = ( @@ -34365,12 +30018,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/main) "fId" = ( @@ -34384,9 +30033,7 @@ /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/cytology) @@ -34405,46 +30052,25 @@ /area/station/security/detectives_office) "fIk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/medical/psychology) "fIr" = ( /obj/effect/turf_decal/siding/blue, /turf/open/floor/iron/dark/textured_edge, /area/station/security/prison/garden) -"fIt" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "fIv" = ( /obj/structure/railing{ dir = 4 }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/machinery/light_switch/directional/south, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "fIw" = ( @@ -34453,12 +30079,11 @@ amount = 10 }, /obj/item/stack/rods/fifty, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron, /area/station/construction/mining/aux_base) "fIA" = ( @@ -34487,8 +30112,8 @@ pixel_x = -11; pixel_y = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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) @@ -34510,29 +30135,12 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"fJi" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/engine{ - icon_state = "floor" - }, -/area/station/science/ordnance) "fJl" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/item/wrench, /obj/item/assembly/timer, /obj/item/assembly/signaler, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ dir = 8 }, /turf/open/floor/iron/dark, @@ -34571,8 +30179,8 @@ "fJK" = ( /obj/effect/turf_decal/trimline/blue/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -34580,12 +30188,8 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/central) "fJL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/carpet/purple, /area/station/command/heads_quarters/rd) @@ -34593,18 +30197,12 @@ /obj/structure/chair{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "fJT" = ( /obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/theater/abandoned) "fJW" = ( @@ -34638,8 +30236,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/department/medical) "fKq" = ( @@ -34654,12 +30252,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing/corner/end{ dir = 8 }, @@ -34669,39 +30263,14 @@ /turf/open/floor/iron, /area/station/hallway/primary/starboard) "fKw" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/machinery/washing_machine, /turf/open/floor/iron/kitchen{ dir = 1 }, /area/station/security/prison/upper) -"fKy" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/spawner/random/structure/steam_vent, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/morgue) "fKz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/common/wrestling/arena) "fKK" = ( @@ -34715,9 +30284,7 @@ /obj/effect/turf_decal/stripes{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /turf/open/floor/engine, @@ -34766,17 +30333,12 @@ }, /obj/structure/curtain/cloth/fancy, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/abandoned) "fLn" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/engine, /area/station/science/xenobiology) @@ -34861,8 +30423,8 @@ /area/station/service/abandoned_gambling_den) "fMq" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip{ dir = 1 }, @@ -34944,11 +30506,9 @@ /area/station/medical/chemistry) "fMS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/circuit, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai_upload) "fMV" = ( /obj/machinery/ai_slipper, @@ -34998,8 +30558,8 @@ "fNd" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip{ dir = 1 }, @@ -35022,8 +30582,8 @@ }, /obj/effect/mapping_helpers/airlock/access/all/medical/cmo, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/cmo) "fNr" = ( @@ -35064,12 +30624,8 @@ /area/space/nearstation) "fNC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/wood, /area/station/command/heads_quarters/rd) @@ -35085,17 +30641,13 @@ "fNK" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva/upper) "fNT" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -35172,18 +30724,11 @@ /area/station/maintenance/port/upper) "fOE" = ( /obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/table/reinforced, /obj/item/clothing/ears/earmuffs{ pixel_y = 7 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, +/obj/effect/turf_decal/stripes, /turf/open/floor/iron/dark, /area/station/security/range) "fOI" = ( @@ -35205,9 +30750,6 @@ /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) "fON" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, /obj/structure/table/reinforced, /obj/item/storage/part_replacer, /turf/open/floor/iron/dark, @@ -35241,15 +30783,10 @@ /turf/open/floor/plating, /area/station/maintenance/department/security/greater) "fPk" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ +/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, @@ -35267,14 +30804,15 @@ pixel_y = 8 }, /obj/item/storage/box/prisoner, +/obj/item/paper/fluff/genpop_instructions, /turf/open/floor/iron/dark/side{ dir = 1 }, /area/station/security/prison) "fPo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, @@ -35338,16 +30876,6 @@ }, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/qm) -"fQh" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/security/prison) "fQk" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -35378,16 +30906,6 @@ /obj/item/surgical_drapes, /turf/open/floor/plating, /area/station/maintenance/abandon_surgery) -"fQS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "fQT" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 5 @@ -35442,12 +30960,8 @@ /turf/open/floor/iron/smooth_corner, /area/station/maintenance/disposal/incinerator) "fRq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -35517,9 +31031,7 @@ /obj/item/flashlight/seclite, /obj/item/flashlight/seclite, /obj/item/key/security, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "fRM" = ( @@ -35560,8 +31072,8 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/library) "fSw" = ( @@ -35578,23 +31090,10 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/carpet/lone, /area/station/service/bar/atrium) -"fSE" = ( -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "fSM" = ( /obj/structure/chair/wood{ dir = 1 }, -/obj/effect/landmark/start/bouncer, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -35624,10 +31123,6 @@ }, /turf/open/floor/wood, /area/station/service/bar/atrium) -"fTg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/command/gateway) "fTh" = ( /obj/structure/reagent_dispensers/plumbed{ dir = 8 @@ -35647,23 +31142,15 @@ /turf/open/floor/grass, /area/station/hallway/primary/central) "fTz" = ( -/obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/department/chapel) +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) "fTA" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/medical/virology) "fTD" = ( @@ -35672,12 +31159,8 @@ }, /obj/effect/turf_decal/bot, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/treatment_center) "fTF" = ( @@ -35716,8 +31199,8 @@ /area/station/hallway/primary/central) "fTV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -35727,12 +31210,8 @@ /obj/machinery/door/airlock/captain{ name = "Captain's Quarters" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/command/captain, /obj/machinery/duct, /turf/open/floor/wood, @@ -35742,12 +31221,8 @@ /turf/open/floor/carpet/lone, /area/station/command/meeting_room/council) "fUp" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -35790,16 +31265,6 @@ /turf/open/floor/plating, /area/station/service/hydroponics) "fUZ" = ( -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, /turf/open/floor/iron/white, /area/station/science/xenobiology/hallway) "fVb" = ( @@ -35810,12 +31275,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor, /area/station/engineering/main) "fVd" = ( @@ -35889,22 +31350,9 @@ /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "fVQ" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/machinery/light/small/directional/north, /obj/effect/spawner/random/vending/colavend, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "fVS" = ( /obj/structure/chair/stool/directional/west, @@ -35914,7 +31362,6 @@ }, /area/station/security/prison/visit) "fVT" = ( -/obj/effect/turf_decal/delivery, /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/smooth, /area/station/cargo/storage) @@ -35953,16 +31400,6 @@ /obj/structure/table/reinforced, /obj/item/folder/red, /obj/item/binoculars, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/railing{ dir = 1 }, @@ -36041,12 +31478,8 @@ "fXh" = ( /obj/structure/cable, /obj/effect/landmark/start/medical_doctor, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/blue/filled/warning{ dir = 4 }, @@ -36107,12 +31540,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/corner{ dir = 8 }, @@ -36133,12 +31562,8 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "fXT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -36166,6 +31591,10 @@ dir = 4 }, /area/station/maintenance/disposal/incinerator) +"fYr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/circuit, +/area/station/security/mechbay) "fYz" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/bot, @@ -36196,8 +31625,8 @@ "fYJ" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) @@ -36231,17 +31660,13 @@ /turf/open/floor/carpet/royalblack, /area/station/command/heads_quarters/qm) "fYU" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/security/prison/upper) "fYW" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/carpet/blue, @@ -36253,12 +31678,8 @@ /obj/machinery/door/airlock/silver{ name = "Catering Area" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/captain_dining) "fZd" = ( @@ -36301,8 +31722,8 @@ "fZv" = ( /obj/effect/turf_decal/bot_white, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) "fZC" = ( @@ -36313,21 +31734,15 @@ /turf/open/floor/iron/dark, /area/station/service/chapel) "fZE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "fZH" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "fZI" = ( @@ -36347,12 +31762,8 @@ /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) "fZL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing/corner{ dir = 4 }, @@ -36374,8 +31785,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) @@ -36387,8 +31798,8 @@ /obj/effect/spawner/random/trash/mess, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/central) "gah" = ( @@ -36437,10 +31848,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"gay" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "gaz" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/machinery/light/small/directional/north, @@ -36450,12 +31857,8 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -36501,12 +31904,8 @@ dir = 4 }, /obj/structure/extinguisher_cabinet/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) "gbc" = ( @@ -36517,12 +31916,6 @@ /area/station/engineering/supermatter/room) "gbf" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, /obj/effect/turf_decal/stripes, /obj/machinery/shieldgen, /turf/open/floor/iron/dark/side{ @@ -36545,9 +31938,7 @@ name = "lavaland"; shuttle_id = "pod_lavaland" }, -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) "gbv" = ( /obj/effect/decal/cleanable/dirt{ @@ -36575,7 +31966,7 @@ /area/station/command/heads_quarters/captain) "gbC" = ( /obj/structure/rack, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/reagent_containers/condiment/cherryjelly{ pixel_x = -6 }, @@ -36607,8 +31998,8 @@ /area/station/maintenance/abandon_exam/cat) "gbM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hallup18"; location = "hallup17" @@ -36617,8 +32008,8 @@ /area/station/hallway/primary/upper) "gbQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -36640,12 +32031,8 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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, /area/station/commons/dorms) @@ -36653,7 +32040,7 @@ /obj/effect/spawner/structure/window/reinforced, /obj/structure/curtain/bounty/start_closed, /turf/open/floor/plating, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "gcg" = ( /obj/structure/lattice/catwalk, /turf/open/space/openspace, @@ -36666,25 +32053,16 @@ /area/station/maintenance/department/science/lower) "gcs" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/item/clipboard, /obj/item/mining_voucher, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ dir = 4 }, /turf/open/floor/iron/dark, /area/station/command/bridge) "gct" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/wood, /area/station/service/barber) @@ -36693,9 +32071,7 @@ dir = 4 }, /obj/structure/cable, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/station/solars/starboard/aft) "gcy" = ( /obj/machinery/door/airlock/bathroom{ @@ -36714,8 +32090,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/primary/port) "gcX" = ( @@ -36730,7 +32106,6 @@ /area/station/medical/psychology) "gcY" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/personal, /turf/open/floor/iron/dark, /area/station/engineering/break_room) @@ -36757,19 +32132,10 @@ /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ dir = 1 }, +/obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage) "gdq" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/effect/landmark/blobstart, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) @@ -36858,9 +32224,7 @@ /turf/open/floor/engine, /area/station/science/explab) "gef" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -36918,8 +32282,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/science/robotics, /turf/open/floor/iron/dark, /area/station/science/robotics) @@ -36928,19 +32292,22 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/xenobiology/control) "geH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) +"geL" = ( +/obj/effect/turf_decal/stripes/box, +/obj/machinery/camera/directional/west{ + c_tag = "Security - Mechbay" + }, +/turf/open/floor/iron/recharge_floor, +/area/station/security/mechbay) "geQ" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -36950,10 +32317,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -36966,15 +32329,10 @@ /area/space/nearstation) "gfk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/sorting/mail{ - name = "Detective Junction"; - renamedByPlayer = 30 + name = "Detective Junction" }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) @@ -36984,12 +32342,8 @@ /area/station/maintenance/eva_shed/starboard) "gfr" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall2"; location = "hall1" @@ -37008,7 +32362,7 @@ /turf/open/floor/plating, /area/station/cargo/storage) "gfI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/rack, /obj/item/reagent_containers/condiment/olive_oil{ pixel_x = -6 @@ -37037,9 +32391,7 @@ dir = 1; name = "Ordnance Freezer Chamber Access" }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "ggh" = ( /obj/effect/turf_decal/stripes{ @@ -37050,8 +32402,8 @@ /area/station/science/xenobiology) "ggl" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, @@ -37069,12 +32421,8 @@ }, /area/station/science/xenobiology) "ggt" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/side{ dir = 1 @@ -37089,12 +32437,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/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/department/crew_quarters/dorms) "ggF" = ( @@ -37174,8 +32518,8 @@ "ghu" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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 = "Central Upper Hallway" }, @@ -37210,19 +32554,13 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/security/detectives_office/private_investigators_office) "gij" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -37281,8 +32619,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/starboard/fore) @@ -37302,12 +32640,6 @@ /area/station/science/tele_sci) "gji" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, /obj/machinery/power/shieldwallgen, /turf/open/floor/iron/dark/side{ dir = 4 @@ -37331,7 +32663,6 @@ dir = 8; name = "Mix to Engine" }, -/obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/engineering/atmos) "gjt" = ( @@ -37392,14 +32723,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/command/bridge) -"gjO" = ( -/obj/effect/decal/cleanable/oil, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "gjW" = ( /obj/structure/railing{ dir = 10 @@ -37414,10 +32737,6 @@ /area/station/maintenance/department/medical/central) "gkh" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow, /obj/machinery/field/generator, /obj/effect/turf_decal/stripes{ dir = 8 @@ -37449,15 +32768,8 @@ /area/station/hallway/secondary/exit/departure_lounge) "gky" = ( /obj/machinery/computer/atmos_control/nitrous_tank, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, /obj/structure/window/spawner/directional/north, +/obj/effect/turf_decal/tile/red/real_red/diagonal_centre, /turf/open/floor/iron/cafeteria, /area/station/engineering/atmos) "gkz" = ( @@ -37485,8 +32797,8 @@ dir = 10 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/central) "gkQ" = ( @@ -37551,8 +32863,8 @@ /obj/machinery/door/airlock/maintenance_hatch{ name = "Science Maintenance" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/science/research, /turf/open/floor/plating, /area/station/maintenance/aft/upper) @@ -37578,8 +32890,8 @@ /obj/structure/disposalpipe/segment{ dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -37588,8 +32900,8 @@ /obj/machinery/door/airlock/public/glass{ name = "Hydroponics Animal Pen" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/hydroponics, /obj/structure/cable, /turf/open/floor/iron/dark/side{ @@ -37615,12 +32927,8 @@ /area/station/service/barber) "glL" = ( /obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/floor, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -37638,9 +32946,7 @@ /area/station/commons/dorms/room3) "glU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "glW" = ( @@ -37658,21 +32964,11 @@ /area/station/medical/surgery) "glX" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/hallway/primary/port) -"glZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/science/xenobiology) "gma" = ( /turf/open/floor/plating, /area/station/maintenance/port/central) @@ -37707,10 +33003,6 @@ /turf/open/floor/iron, /area/station/hallway/primary/upper) "gmi" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/stool/bar/directional{ dir = 4 }, @@ -37718,9 +33010,7 @@ /area/station/security/prison/mess) "gml" = ( /obj/structure/cable, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/station/solars/starboard/aft) "gmr" = ( /obj/effect/decal/cleanable/dirt{ @@ -37780,9 +33070,7 @@ /obj/structure/chair/office{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/solars/starboard/fore) "gmZ" = ( @@ -37833,12 +33121,8 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/medical/surgery, /turf/open/floor/iron/white, /area/station/medical/surgery) @@ -37861,12 +33145,8 @@ "gns" = ( /obj/structure/cable, /obj/effect/landmark/start/captain, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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 = 10 }, @@ -37893,29 +33173,15 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/science/research) "gny" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron/dark, +/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/brig) "gnB" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple, @@ -37949,10 +33215,6 @@ "gnP" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, /turf/open/floor/iron, /area/station/cargo/lobby) "gnU" = ( @@ -37970,35 +33232,11 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/upper) -"goa" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 9 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) -"goc" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/maintenance/department/medical/central) "goe" = ( /obj/structure/chair/office, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -38013,8 +33251,8 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology) "gok" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/science) @@ -38023,16 +33261,6 @@ /obj/effect/turf_decal/stripes/white/line, /turf/open/floor/iron/dark, /area/station/service/kitchen) -"gov" = ( -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/wood/parquet, -/area/station/command/heads_quarters/cmo) "gow" = ( /obj/structure/cable, /turf/open/floor/iron/stairs, @@ -38042,12 +33270,8 @@ /obj/structure/flora/bush/flowers_br, /obj/structure/window/spawner/directional/south, /obj/structure/window/spawner/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/dorms) "goF" = ( @@ -38080,12 +33304,8 @@ /turf/open/floor/wood, /area/station/maintenance/abandon_art_studio) "goQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -38129,16 +33349,6 @@ /turf/open/floor/carpet, /area/station/service/chapel) "gpq" = ( -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green, /obj/structure/table/glass, /obj/item/petri_dish{ pixel_x = -6; @@ -38178,17 +33388,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) -"gpy" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/security/prison/upper) "gpz" = ( /turf/closed/wall/r_wall, /area/station/engineering/gravity_generator) @@ -38207,23 +33406,21 @@ /area/station/science/xenobiology/hallway) "gpJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "gpM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/central) "gpT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -38245,7 +33442,7 @@ /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "gqa" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/radio/intercom/directional/west, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) @@ -38262,21 +33459,15 @@ }, /obj/effect/landmark/start/librarian, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/carpet, /area/station/service/library) "gqr" = ( -/turf/open/floor/glass/reinforced{ - initial_gas_mix = "TEMP=2.7" - }, +/turf/open/floor/glass/reinforced/airless, /area/station/hallway/secondary/exit) "gqu" = ( /obj/machinery/door/firedoor, @@ -38294,9 +33485,6 @@ /turf/open/floor/iron/dark, /area/station/science/lab) "gqy" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, /obj/structure/table/reinforced, /obj/item/stock_parts/servo/nano, /obj/item/stock_parts/servo/nano, @@ -38305,21 +33493,12 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) -"gqC" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "gqL" = ( /obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 5 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "gqM" = ( /obj/structure/window/reinforced/spawner/directional/west, @@ -38369,20 +33548,12 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/central) "grb" = ( -/obj/effect/turf_decal/stripes, /obj/structure/railing, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, /obj/machinery/door/firedoor/border_only, /turf/open/floor/iron/dark/small, /area/station/cargo/storage) @@ -38455,8 +33626,8 @@ /area/station/security/prison/upper) "grJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -38486,12 +33657,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/upper) "gsj" = ( @@ -38511,31 +33678,8 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/upper) -"gsn" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) -"gso" = ( -/obj/effect/turf_decal/tile/red, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/dark, -/area/station/security/brig) "gsx" = ( /obj/machinery/light/directional/north, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/iron/smooth_edge{ dir = 8 }, @@ -38548,7 +33692,7 @@ /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) "gsK" = ( -/obj/structure/railing/corner/end/flip{ +/obj/structure/railing/corner/end{ dir = 4 }, /turf/open/floor/iron/white, @@ -38642,15 +33786,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) -"gtr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "gtx" = ( /obj/structure/stairs/north, /turf/open/floor/iron/dark, @@ -38677,12 +33812,8 @@ /area/station/service/hydroponics) "gtR" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing/corner, /turf/open/floor/iron, /area/station/commons/dorms) @@ -38700,22 +33831,15 @@ /obj/effect/turf_decal/caution/stand_clear, /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/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/gateway) "guj" = ( /obj/structure/cable, /obj/effect/landmark/start/paramedic, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/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/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -38741,7 +33865,6 @@ /area/station/ai_monitored/command/storage/eva/upper) "gux" = ( /obj/structure/table/wood, -/obj/item/canvas/drawingtablet, /turf/open/floor/iron/dark, /area/station/service/library) "guy" = ( @@ -38749,12 +33872,8 @@ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/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 = 9 }, @@ -38775,12 +33894,6 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/wood, /area/station/service/theater) -"guB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/science/ordnance_maint) "guC" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -38834,8 +33947,8 @@ /area/station/maintenance/starboard/fore) "gva" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/service/chapel) "gvb" = ( @@ -38847,22 +33960,14 @@ /area/station/security/courtroom) "gve" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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/hallway/primary/port) "gvm" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment{ dir = 4 @@ -38872,8 +33977,8 @@ "gvt" = ( /obj/structure/cable, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs{ dir = 1 }, @@ -38898,7 +34003,7 @@ /area/station/cargo/miningdock) "gvN" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -38947,16 +34052,9 @@ /obj/effect/spawner/random/trash/moisture_trap, /turf/open/floor/plating, /area/station/maintenance/department/medical) -"gwj" = ( -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/hallway/primary/port) "gwk" = ( /obj/machinery/iv_drip, /obj/machinery/defibrillator_mount/directional/south, -/obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/stasis{ dir = 4 }, @@ -39020,12 +34118,8 @@ /area/station/service/barber) "gwW" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/hallway/secondary/command) "gwX" = ( @@ -39123,10 +34217,8 @@ /area/station/hallway/primary/starboard) "gxY" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/service/chapel) "gyb" = ( @@ -39137,12 +34229,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -39157,12 +34245,8 @@ dir = 1 }, /obj/structure/chair/stool/bar/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/hallway/primary/port) "gyd" = ( @@ -39173,25 +34257,8 @@ }, /turf/open/floor/plating, /area/station/medical/surgery) -"gye" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/duct, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/commons/dorms) "gyf" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "gyg" = ( @@ -39199,12 +34266,6 @@ /turf/open/floor/iron/dark/small, /area/station/cargo/miningdock) "gyh" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/machinery/duct, /turf/open/floor/iron/cafeteria, /area/station/commons/locker) @@ -39231,18 +34292,14 @@ /obj/effect/turf_decal/siding/wood{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/cafeteria) "gyP" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/chair/wood{ dir = 4 }, @@ -39253,12 +34310,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/clown_chamber) "gyX" = ( @@ -39289,12 +34342,12 @@ /turf/open/floor/iron/freezer, /area/station/commons/dorms/vacantroom) "gzo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) "gzr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/iron, @@ -39318,7 +34371,7 @@ dir = 4 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) "gzD" = ( @@ -39330,8 +34383,8 @@ name = "Cryopods" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/security/prison/upper) @@ -39344,9 +34397,7 @@ /turf/open/floor/iron/dark/side, /area/station/hallway/primary/upper) "gzG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/machinery/shower/directional/south, /obj/effect/turf_decal/stripes/end, @@ -39355,9 +34406,7 @@ /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "gzH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -39370,12 +34419,8 @@ /area/station/service/hydroponics) "gzL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -39387,8 +34432,8 @@ name = "Recovery Ward" }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -39412,8 +34457,8 @@ /area/station/security/checkpoint/customs) "gAo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/small/directional/east, /turf/open/floor/plating, /area/station/maintenance/aft/upper) @@ -39444,13 +34489,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood, /area/station/hallway/primary/port) -"gAz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/security/interrogation) "gAC" = ( /obj/structure/chair, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -39488,13 +34526,7 @@ name = "Labor Camp Shuttle Airlock" }, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) @@ -39509,8 +34541,8 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/lobby) "gBa" = ( @@ -39520,9 +34552,6 @@ /turf/open/floor/engine, /area/station/science/explab) "gBb" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, /obj/machinery/power/smes/engineering, /obj/structure/cable, /obj/structure/railing{ @@ -39559,12 +34588,8 @@ /turf/open/floor/iron, /area/station/commons/dorms) "gBk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -39587,12 +34612,6 @@ /obj/structure/chair/sofa/bench{ pixel_y = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/cable, /obj/machinery/camera/directional/south{ c_tag = "Security - Brig Center"; @@ -39656,14 +34675,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/common/wrestling/arena) -"gCa" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/obj/machinery/light/floor, -/obj/effect/turf_decal/trimline/yellow, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "gCd" = ( /obj/machinery/light/small/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -39684,8 +34695,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/aft/upper) "gCs" = ( @@ -39736,24 +34747,11 @@ /turf/open/floor/iron/dark, /area/station/security/execution/education) "gDk" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/structure/chair/stool/bar/directional/north, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "gDn" = ( /obj/effect/turf_decal/stripes/white/line{ @@ -39765,9 +34763,7 @@ "gDp" = ( /obj/machinery/light_switch/directional/south, /obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/old{ dir = 8 }, @@ -39800,22 +34796,18 @@ /area/station/maintenance/port/upper) "gDF" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 }, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "gDI" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 }, -/obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -39829,8 +34821,8 @@ }, /obj/effect/turf_decal/siding/wood, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/landmark/navigate_destination, /turf/open/floor/wood/parquet, @@ -39899,12 +34891,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/service) "gEV" = ( @@ -39932,7 +34920,6 @@ /turf/open/floor/carpet/black, /area/station/service/barber) "gFg" = ( -/obj/effect/turf_decal/bot_white, /obj/machinery/light/directional/west, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) @@ -39945,7 +34932,7 @@ }, /obj/effect/landmark/start/assistant, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) "gFE" = ( @@ -39958,10 +34945,6 @@ /area/station/security/power_station) "gFG" = ( /obj/structure/table/wood/fancy/red, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/item/storage/fancy/cigarettes/cigars/cohiba{ pixel_y = 5 }, @@ -39973,12 +34956,8 @@ "gFM" = ( /obj/effect/turf_decal/caution, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/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/gateway) "gFO" = ( @@ -40003,11 +34982,8 @@ /obj/structure/chair/sofa/corp{ dir = 1 }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/machinery/newscaster/directional/south, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "gFX" = ( @@ -40041,25 +35017,17 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "gGo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/hallway/secondary/command) -"gGq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/storage/primary) "gGr" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 }, /obj/machinery/firealarm/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/command/secure_bunker) "gGw" = ( @@ -40117,12 +35085,8 @@ /obj/machinery/door/airlock/captain{ name = "Captain's Suite" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -40202,21 +35166,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/security/greater) -"gHQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/wood, -/area/station/hallway/primary/port) "gHT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -40243,12 +35196,9 @@ /turf/open/floor/iron, /area/station/security/courtroom) "gIe" = ( -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -40290,8 +35240,8 @@ /area/station/science/xenobiology/control) "gIN" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/department/engineering/atmos_aux_port) "gIR" = ( @@ -40308,24 +35258,10 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"gJb" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/ai_monitored/command/storage/eva/upper) "gJd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 1 }, @@ -40351,7 +35287,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/barber/spa) "gJh" = ( @@ -40371,51 +35308,17 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/wood, /area/station/maintenance/abandon_art_studio) -"gJm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "gJq" = ( -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, /obj/structure/statue/silver/sec, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" +/obj/effect/turf_decal/tile/red/real_red/anticorner/contrasted{ + dir = 4 }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "gJt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/station/service/library/printer) -"gJv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -40554,10 +35457,7 @@ /turf/open/floor/grass, /area/station/hallway/primary/central) "gLc" = ( -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "gLe" = ( /obj/effect/turf_decal/tile/neutral{ @@ -40568,10 +35468,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) -"gLh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "gLj" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 9 @@ -40624,12 +35520,9 @@ /area/station/cargo/miningoffice) "gLu" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, /obj/machinery/destructive_scanner, /obj/effect/turf_decal/stripes/box, +/obj/effect/turf_decal/tile/purple/half, /turf/open/floor/iron/white/side, /area/station/science) "gLv" = ( @@ -40641,12 +35534,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "gLI" = ( @@ -40660,12 +35549,7 @@ /area/station/maintenance/department/security/lower) "gLQ" = ( /obj/machinery/seed_extractor, -/obj/effect/turf_decal/bot, /obj/machinery/light/directional/west, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -40675,10 +35559,6 @@ dir = 4; id = "garbage" }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, /obj/machinery/door/window/right{ base_state = "left"; dir = 1; @@ -40699,16 +35579,13 @@ /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) "gMj" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/effect/landmark/start/bartender, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 }, /turf/open/floor/iron, /area/station/service/bar) @@ -40738,12 +35615,6 @@ /obj/item/paper_bin, /turf/open/floor/carpet, /area/station/service/lawoffice) -"gMv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/prison) "gMw" = ( /obj/item/kirbyplants/random, /obj/effect/decal/cleanable/dirt{ @@ -40773,12 +35644,8 @@ /obj/machinery/door/airlock/security{ name = "Detective's Office" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -40792,15 +35659,10 @@ /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) "gMP" = ( -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, /turf/open/floor/iron, /area/station/common/laser_tag) "gMR" = ( @@ -40824,6 +35686,16 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/security/range) +"gNf" = ( +/obj/structure/cable, +/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/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/locker) "gNv" = ( /obj/machinery/smartfridge, /turf/open/floor/iron/dark, @@ -40842,31 +35714,22 @@ dir = 4 }, /obj/effect/turf_decal/stripes/corner, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit, /area/station/command/gateway) "gNG" = ( /obj/machinery/door/airlock/grunge{ name = "Chapel Quarters" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/service/chapel_office, /turf/open/floor/iron/dark, /area/station/service/chapel/office) "gNT" = ( /obj/effect/turf_decal/delivery, /obj/structure/closet/secure_closet/engineering_electrical, -/obj/effect/turf_decal/stripes, /turf/open/floor/iron/dark, /area/station/engineering/main) "gNW" = ( @@ -40932,12 +35795,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/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/department/medical/central) "gOx" = ( @@ -40994,18 +35853,9 @@ /obj/effect/mapping_helpers/requests_console/information, /turf/open/floor/iron/dark/textured_large, /area/station/command/heads_quarters/ce) -"gOR" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) "gOT" = ( /obj/structure/closet/l3closet/virology, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/iron, /area/station/medical/virology/isolation) "gOY" = ( @@ -41051,7 +35901,6 @@ dir = 1 }, /obj/structure/disposalpipe/segment, -/obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/port) "gPp" = ( @@ -41098,10 +35947,6 @@ /turf/open/floor/iron/dark, /area/station/science/ordnance) "gPE" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/structure/chair/sofa/bench/right{ dir = 8; pixel_x = 5 @@ -41109,6 +35954,9 @@ /obj/structure/cable, /obj/effect/landmark/start/assistant, /obj/effect/landmark/start/assistant, +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 4 + }, /turf/open/floor/iron, /area/station/service/barber) "gPF" = ( @@ -41117,9 +35965,7 @@ }, /obj/machinery/light/directional/north, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/barber) "gPJ" = ( @@ -41132,12 +35978,8 @@ /turf/open/floor/wood, /area/station/service/electronic_marketing_den) "gPM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/radio/intercom/directional/south, /obj/machinery/duct, /turf/open/floor/carpet/green, @@ -41193,27 +36035,6 @@ dir = 8 }, /area/station/science) -"gQA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/station/service/library) -"gQM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "gQU" = ( /obj/machinery/atmospherics/components/binary/valve{ dir = 4; @@ -41226,12 +36047,8 @@ /turf/open/floor/engine, /area/station/science/ordnance) "gQW" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -41252,12 +36069,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -41275,10 +36088,6 @@ /turf/open/floor/plating, /area/station/security/prison/safe) "gRe" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/pew/right{ dir = 8 }, @@ -41295,12 +36104,8 @@ }, /obj/effect/turf_decal/bot_white, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/aisat/exterior) "gRj" = ( @@ -41313,12 +36118,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing/corner/end{ dir = 8 }, @@ -41339,9 +36140,7 @@ }, /obj/machinery/airalarm/directional/south, /obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) "gRC" = ( @@ -41398,12 +36197,6 @@ /turf/open/space/basic, /area/space/nearstation) "gSi" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/segment, /obj/machinery/airalarm/directional/east, /obj/machinery/camera/directional/east{ @@ -41444,12 +36237,13 @@ fax_name = "Cargo Office"; name = "Cargo Office Fax Machine" }, +/obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron/dark, /area/station/cargo/office) "gSE" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/side, /area/station/hallway/secondary/command) @@ -41460,12 +36254,8 @@ /area/station/security/prison) "gSQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/maintenance/solars/starboard/fore) "gST" = ( @@ -41494,12 +36284,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -41511,12 +36297,8 @@ name = "Engineering Security Post" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/engie_guard, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/checkpoint/engineering) "gTg" = ( @@ -41536,13 +36318,11 @@ "gTl" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/textured, /area/station/common/cryopods) "gTn" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/textured_large, /area/station/common/cryopods) "gTo" = ( @@ -41550,8 +36330,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip, /obj/machinery/duct, /turf/open/floor/iron, @@ -41560,9 +36340,7 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 1 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "gTD" = ( /obj/effect/turf_decal/tile/neutral{ @@ -41577,44 +36355,23 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "gTF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/iron, /area/station/security/interrogation) "gTL" = ( /obj/structure/cable, /turf/open/floor/plating/airless, /area/station/solars/starboard/aft) -"gTN" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable/layer1, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "gTS" = ( /obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) "gTU" = ( /obj/effect/turf_decal/trimline/purple/filled/line, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/lab) "gTW" = ( @@ -41644,9 +36401,6 @@ "gUa" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/loading_area, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/structure/disposalpipe/segment, /obj/machinery/computer/department_orders/security, /turf/open/floor/iron/dark/corner{ @@ -41697,12 +36451,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -41714,8 +36464,6 @@ dir = 1 }, /obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/engine, /area/station/science/xenobiology) @@ -41766,15 +36514,6 @@ /turf/open/floor/iron, /area/station/medical/medbay/central) "gVw" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/effect/turf_decal/box/white{ color = "#52B4E9" }, @@ -41783,12 +36522,8 @@ /area/station/medical/coldroom) "gVx" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/aft/upper) "gVz" = ( @@ -41844,12 +36579,8 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "gWf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/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/side{ dir = 1 @@ -41893,10 +36624,8 @@ /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "gWF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/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/diner) @@ -41911,8 +36640,8 @@ "gWR" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/central) @@ -41969,21 +36698,15 @@ name = "Command Evac Lounge" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/command/general, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "gXH" = ( /obj/machinery/computer/security/telescreen/entertainment/directional/north, /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/wood, /area/station/common/wrestling/lobby) @@ -42044,7 +36767,7 @@ /turf/open/floor/carpet, /area/station/service/electronic_marketing_den) "gXZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, /area/station/cargo/miningdock) "gYf" = ( @@ -42057,9 +36780,7 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "gYl" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs{ dir = 4 }, @@ -42077,10 +36798,6 @@ /turf/open/floor/wood, /area/station/medical/exam_room) "gYX" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/machinery/light/directional/west, /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron/dark/side{ @@ -42101,12 +36818,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/security/brig, /turf/open/floor/iron/dark, /area/station/security/prison) @@ -42119,19 +36832,11 @@ "gZm" = ( /turf/open/floor/wood, /area/station/service/library) -"gZp" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/engine, -/area/station/science/xenobiology) "gZu" = ( -/obj/machinery/computer/atmos_control/noreconnect{ - atmos_chambers = list("ordnancegas1"="Burn Chamber","ordnancegas2"="Freezer Chamber"); +/obj/machinery/computer/atmos_control/ordnancemix{ dir = 8 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "gZw" = ( /obj/item/kirbyplants/organic/plant21, @@ -42149,21 +36854,11 @@ /turf/open/floor/iron/dark, /area/station/commons/fitness) "gZL" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/structure/cable, /obj/effect/landmark/start/medical_doctor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/mob/living/simple_animal/bot/cleanbot/medbay, +/mob/living/basic/bot/cleanbot/medbay, /obj/item/beacon, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -42188,29 +36883,20 @@ /obj/machinery/duct, /turf/open/floor/iron/freezer, /area/station/medical/virology/isolation) -"hak" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/common/wrestling/locker) "hal" = ( /turf/closed/wall/rust, /area/station/security/detectives_office/private_investigators_office) "haw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 4 }, /turf/open/floor/iron, /area/station/science/robotics) "haD" = ( -/obj/effect/turf_decal/tile/green{ - dir = 8 +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 }, /turf/open/floor/iron/dark/side{ dir = 5 @@ -42224,12 +36910,8 @@ /area/space/nearstation) "haK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, /turf/open/floor/iron, @@ -42241,22 +36923,14 @@ /area/station/maintenance/disposal/incinerator) "haN" = ( /obj/structure/rack/shelf, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, /obj/item/stack/sheet/rglass{ amount = 20; pixel_x = 2; pixel_y = -2 }, /obj/item/stack/rods/fifty, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/maintenance/aux_eva) "haQ" = ( @@ -42295,12 +36969,8 @@ /area/station/maintenance/department/medical/central) "hbk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -42326,7 +36996,7 @@ /area/station/engineering/supermatter) "hbu" = ( /obj/item/reagent_containers/cup/bucket/wooden, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/common/pool/sauna) "hbv" = ( @@ -42422,11 +37092,6 @@ }, /turf/closed/wall, /area/station/maintenance/clown_chamber) -"hcl" = ( -/obj/effect/spawner/random/structure/steam_vent, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "hcn" = ( /obj/structure/rack/wooden, /obj/machinery/light/directional/east, @@ -42500,26 +37165,20 @@ /area/station/hallway/secondary/entry) "hcy" = ( /obj/effect/turf_decal/tile/blue/full, -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) "hcK" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/upper) "hcL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -42563,8 +37222,8 @@ "hdx" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/public/glass{ name = "Command Hallway" @@ -42579,8 +37238,8 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/storage_shared) "hdL" = ( @@ -42591,12 +37250,8 @@ /area/station/science/ordnance/testlab) "hdS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -42617,22 +37272,13 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) "hdY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/fitness/recreation) "hef" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/table, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/item/paper_bin, /obj/item/pen, /turf/open/floor/iron/dark, @@ -42664,16 +37310,12 @@ /turf/open/floor/carpet/blue, /area/station/command/captain_dining) "hey" = ( -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, /turf/open/floor/iron, /area/station/construction/mining/aux_base) "heB" = ( -/obj/effect/spawner/random/trash/mess, /obj/structure/sign/warning/vacuum/external/directional/east, /turf/open/floor/plating, /area/station/maintenance/fore/upper) @@ -42705,12 +37347,8 @@ }, /obj/structure/curtain/bounty, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs{ dir = 4 }, @@ -42720,21 +37358,13 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/upper) "heZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/common/night_club/changing_room) @@ -42750,8 +37380,8 @@ /turf/open/floor/material/meat, /area/station/maintenance/department/science/xenobiology) "hfm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark, /area/station/security/prison/safe) @@ -42764,12 +37394,8 @@ /area/station/maintenance/department/crew_quarters/bar) "hfI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/chapel) "hfM" = ( @@ -42888,12 +37514,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -42920,9 +37542,6 @@ /area/station/commons/dorms/room2) "hgM" = ( /obj/machinery/status_display/ai/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -42936,12 +37555,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/courtroom) "hha" = ( @@ -42970,8 +37585,8 @@ /area/station/maintenance/library/lower) "hhr" = ( /obj/machinery/light/small/red/dim/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/central) "hhx" = ( @@ -42995,8 +37610,8 @@ id = "brigfront"; name = "Brig Blast Door" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/security/entrance, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -43011,12 +37626,8 @@ id_tag = "CEdoor"; name = "Chief Engineer's Office" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -43025,12 +37636,8 @@ /turf/open/floor/iron, /area/station/command/heads_quarters/ce) "hhF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/commons/dorms) "hhH" = ( @@ -43047,17 +37654,12 @@ }, /obj/machinery/airalarm/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/upper) "hhW" = ( -/obj/effect/turf_decal/stripes, /obj/effect/decal/cleanable/greenglow, /obj/effect/decal/remains/human, /turf/open/floor/plating, @@ -43100,8 +37702,8 @@ dir = 6 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/construction) "hiD" = ( @@ -43123,8 +37725,8 @@ /obj/structure/lattice/catwalk, /obj/item/shard, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/openspace, /area/station/maintenance/department/medical/central) "hiM" = ( @@ -43144,9 +37746,6 @@ /obj/effect/turf_decal/loading_area{ dir = 1 }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/iron, /area/station/medical/cryo) @@ -43176,22 +37775,24 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/security/range) +"hiZ" = ( +/obj/machinery/porta_turret/ai{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/ai_monitored/turret_protected/ai_upload) "hjd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction/flip{ dir = 8 }, /turf/open/floor/iron, /area/station/hallway/primary/upper) "hjh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/red{ dir = 4 }, @@ -43202,19 +37803,10 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, /turf/open/floor/iron/smooth_large, /area/station/cargo/miningdock) "hjp" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/engineering/atmos/test_chambers) @@ -43234,37 +37826,6 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/fore) -"hjy" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) -"hjD" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/security/prison/upper) -"hjE" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "hjI" = ( /obj/structure/grille/broken, /obj/effect/decal/cleanable/glass, @@ -43288,12 +37849,8 @@ /area/station/science/explab) "hjS" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/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{ icon_state = "dirt-flat-1" @@ -43307,9 +37864,6 @@ "hjV" = ( /obj/machinery/door/firedoor, /obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -43331,8 +37885,8 @@ }, /obj/structure/cable, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/security/general, /turf/open/floor/iron/dark/side, /area/station/security/range) @@ -43341,10 +37895,8 @@ dir = 1 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/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, /area/station/cargo/lobby) @@ -43366,12 +37918,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/sign/poster/contraband/random/directional/south, /obj/effect/spawner/random/trash/moisture, /turf/open/floor/plating, @@ -43456,23 +38004,23 @@ /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) "hlu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /obj/machinery/duct, /turf/open/floor/wood, /area/station/commons/dorms/vacantroom) +"hlw" = ( +/obj/machinery/air_sensor/engine_chamber, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "hlC" = ( /obj/effect/turf_decal/box, /obj/machinery/holopad, /obj/structure/disposalpipe/segment{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/shaft_miner, /turf/open/floor/iron, /area/station/cargo/miningoffice) @@ -43482,9 +38030,7 @@ /obj/item/key/janitor, /obj/item/toy/figure/janitor, /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/checker, /area/station/service/janitor) "hlP" = ( @@ -43548,8 +38094,8 @@ /area/station/common/night_club) "hmi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/security/office) @@ -43588,13 +38134,6 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/white, /area/station/medical/surgery) -"hmC" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/surgery/theatre) "hmD" = ( /obj/effect/turf_decal/stripes/white/corner, /turf/open/floor/engine/hull/reinforced, @@ -43625,22 +38164,16 @@ dir = 8 }, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/sign/poster/random/directional/west, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/dorms) "hmS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/chair/comfy/black{ dir = 8 }, @@ -43648,8 +38181,8 @@ /area/station/command/captain_dining) "hmT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -43728,12 +38261,8 @@ /turf/open/floor/wood, /area/station/hallway/primary/port) "hnW" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/department/crew_quarters/dorms) "hnX" = ( @@ -43742,28 +38271,11 @@ }, /obj/effect/spawner/random/trash/food_packaging, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/fore/upper) "hnZ" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -43773,12 +38285,8 @@ /turf/open/floor/iron, /area/station/maintenance/abandon_diner) "hob" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/wood, /area/station/commons/dorms/room4) @@ -43786,9 +38294,7 @@ /obj/machinery/holopad{ name = "botany requests holopad" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "hog" = ( @@ -43810,8 +38316,8 @@ }, /obj/effect/turf_decal/bot_white, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "hoz" = ( @@ -43848,8 +38354,8 @@ /area/station/maintenance/department/security) "hoH" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/freezer, /area/station/service/kitchen/coldroom) "hoI" = ( @@ -43866,12 +38372,8 @@ /turf/open/floor/plating, /area/station/maintenance/abandon_arcade) "hoT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs/left{ dir = 4 }, @@ -43884,12 +38386,8 @@ /area/station/maintenance/department/engineering/engine_aft_port) "hpb" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -43909,12 +38407,8 @@ }, /obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/cargo/drone_bay) "hpj" = ( @@ -43941,25 +38435,21 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, -/obj/effect/turf_decal/stripes/end, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, +/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/medical/virology, /obj/machinery/duct, +/obj/effect/turf_decal/tile/green/opposingcorners, /turf/open/floor/iron/white, /area/station/medical/virology) +"hpF" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "hpS" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -43970,20 +38460,10 @@ "hqa" = ( /obj/effect/turf_decal/bot, /obj/machinery/vending/cigarette, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/hallway/primary/port) -"hqe" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "hqo" = ( /obj/structure/window/spawner/directional/south, /obj/structure/window/spawner/directional/east, @@ -43999,45 +38479,20 @@ /turf/open/floor/iron, /area/station/hallway/primary/upper) "hqv" = ( -/obj/effect/turf_decal/delivery/white{ - color = "#00ff00"; - name = "green" - }, /obj/machinery/cryopod{ dir = 8 }, /turf/open/floor/iron/dark/textured_large, /area/station/common/cryopods) -"hqz" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, -/turf/open/floor/iron/dark, -/area/station/security/brig) "hqC" = ( /obj/structure/closet/radiation, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes, /obj/item/clothing/glasses/meson, /obj/machinery/firealarm/directional/north, /obj/item/pipe_dispenser, /obj/structure/sign/delam_procedure/directional/east, /turf/open/floor/iron/dark, /area/station/engineering/main) -"hqD" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/checkpoint) "hqF" = ( /obj/structure/railing/corner{ dir = 4 @@ -44048,9 +38503,7 @@ c_tag = "Crew Area - Cryopods"; name = "dormitories camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs{ dir = 8 }, @@ -44068,9 +38521,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -44105,21 +38556,16 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, -/obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "hrF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science) "hrJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -44156,7 +38602,6 @@ /area/station/maintenance/department/medical/central) "hrO" = ( /obj/machinery/vending/wardrobe/jani_wardrobe, -/obj/effect/turf_decal/bot, /obj/structure/cable, /turf/open/floor/iron/checker, /area/station/service/janitor) @@ -44173,8 +38618,8 @@ /obj/item/stack/sheet/cardboard, /obj/item/storage/box, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/aft/upper) "hsi" = ( @@ -44182,9 +38627,7 @@ id_tag = "Toilet4"; name = "Stall 4" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) "hsm" = ( @@ -44193,13 +38636,9 @@ }, /turf/closed/wall, /area/station/hallway/primary/upper) -"hsn" = ( -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "hss" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/mess) @@ -44209,12 +38648,8 @@ id = "SnacksKitchen"; name = "Snack Bar Shutters" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/common/wrestling/concessions) "hsI" = ( @@ -44301,12 +38736,8 @@ /area/station/common/tailoring) "htq" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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, /turf/open/floor/iron, /area/station/engineering/storage/tech) @@ -44326,18 +38757,8 @@ /obj/machinery/door/airlock/virology/glass{ name = "Isolation A" }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/medical/virology, /turf/open/floor/iron, /area/station/medical/virology) @@ -44356,13 +38777,10 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) "htF" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_corner, /area/station/cargo/miningdock) "htI" = ( @@ -44380,8 +38798,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor/border_only{ dir = 4 }, @@ -44392,12 +38810,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/port/aft) "htS" = ( @@ -44411,19 +38825,15 @@ "htV" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "hud" = ( /obj/machinery/light/directional/south, /obj/effect/landmark/start/chaplain, /obj/machinery/light_switch/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/royalblack, /area/station/service/chapel/office) "hui" = ( @@ -44456,36 +38866,30 @@ dir = 1 }, /obj/effect/turf_decal/tile/blue, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/corner{ dir = 8 }, /area/station/hallway/secondary/entry) "huI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/detectives_office) "huN" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/command/nuke_storage) "huQ" = ( -/obj/machinery/door/airlock/maintenance_hatch, /obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/salon/lower) +/obj/machinery/firealarm/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/hallway/primary/port) "hvn" = ( -/obj/effect/turf_decal/delivery, /obj/machinery/disposal/bin, /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 @@ -44508,9 +38912,7 @@ /area/station/medical/chemistry) "hvq" = ( /obj/structure/railing/corner/end/flip, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -44533,27 +38935,15 @@ /obj/structure/disposalpipe/segment, /turf/closed/wall, /area/station/cargo/sorting) -"hvC" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation) "hvG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, /area/station/common/pool) "hvH" = ( /obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/table/reinforced, /obj/item/clothing/ears/earmuffs{ pixel_y = 7 @@ -44562,10 +38952,7 @@ pixel_x = 3; pixel_y = -3 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, +/obj/effect/turf_decal/stripes, /turf/open/floor/iron/dark, /area/station/security/range) "hvJ" = ( @@ -44581,11 +38968,9 @@ /turf/open/floor/iron, /area/station/science/research) "hvU" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/effect/turf_decal/caution/stand_clear{ + dir = 8 }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/iron, /area/station/cargo/storage) "hvV" = ( @@ -44595,7 +38980,6 @@ /turf/open/floor/iron/dark, /area/station/engineering/storage_shared) "hwb" = ( -/obj/effect/turf_decal/bot, /obj/machinery/vending/wardrobe/hydro_wardrobe, /turf/open/floor/iron/dark, /area/station/service/hydroponics) @@ -44625,10 +39009,6 @@ /area/station/service/janitor) "hwl" = ( /obj/machinery/suit_storage_unit/atmos, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/engineering/atmos/office) @@ -44642,11 +39022,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) -"hwA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/wood, -/area/station/security/detectives_office) "hwD" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 4 @@ -44656,7 +39031,6 @@ /turf/open/floor/iron/white, /area/station/command/heads_quarters/rd) "hwM" = ( -/obj/effect/turf_decal/stripes, /obj/machinery/space_heater, /obj/structure/railing, /turf/open/floor/plating/rust, @@ -44679,9 +39053,7 @@ /turf/open/floor/iron/white, /area/station/medical/virology) "hwT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/kitchen, /area/station/security/prison/mess) "hwU" = ( @@ -44694,18 +39066,12 @@ }, /area/station/engineering/atmos/hfr_room) "hxd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/lobby) "hxh" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 10 - }, +/obj/effect/turf_decal/trimline/yellow/filled/line, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "hxm" = ( @@ -44744,11 +39110,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/carpet, /area/station/service/chapel/funeral) -"hxv" = ( -/obj/effect/spawner/random/structure/crate, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "hxw" = ( /obj/structure/showcase/cyborg/old{ pixel_y = 20 @@ -44778,20 +39139,14 @@ pixel_x = 3 }, /obj/item/reagent_containers/dropper, -/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "hxO" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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) "hxV" = ( @@ -44843,9 +39198,7 @@ "hyt" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/bed/dogbed, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/command/secure_bunker) "hyw" = ( @@ -44882,8 +39235,8 @@ "hyM" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/openspace, /area/station/maintenance/department/medical/central) "hyY" = ( @@ -44899,9 +39252,7 @@ dir = 4 }, /obj/structure/cable, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/station/solars/starboard/aft) "hzr" = ( /obj/machinery/atmospherics/components/binary/pump{ @@ -44925,12 +39276,8 @@ /area/station/common/wrestling/lobby) "hzH" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/command) "hzU" = ( @@ -44960,12 +39307,8 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) "hAd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/hallway/secondary/service) "hAn" = ( @@ -45004,6 +39347,17 @@ }, /turf/open/floor/wood/parquet, /area/station/common/night_club) +"hAz" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/blue/line{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/window{ + id = "SecMech"; + name = "Security Mechbay Shutters" + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "hAB" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -45054,8 +39408,8 @@ name = "Atmospherics Maintenance" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/atmos/hfr_room) "hBk" = ( @@ -45071,9 +39425,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "hBq" = ( /obj/effect/turf_decal/tile/red, @@ -45095,26 +39447,14 @@ /obj/structure/chair/stool/directional/east, /turf/open/floor/glass, /area/station/commons/dorms) -"hBH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "hBJ" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/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) "hBL" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ @@ -45125,10 +39465,8 @@ /area/station/engineering/atmos/pumproom) "hBM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) "hBP" = ( @@ -45167,12 +39505,8 @@ dir = 5; name = "chapel camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, /obj/effect/decal/cleanable/dirt{ @@ -45225,18 +39559,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/escapepodbay) -"hCC" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "hCF" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -45292,12 +39614,8 @@ name = "Visitation" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/dark/side{ dir = 4 @@ -45418,25 +39736,20 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) "hDU" = ( /obj/structure/closet/radiation, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes, /obj/item/clothing/glasses/meson, /obj/item/radio/intercom/directional/north, /obj/item/pipe_dispenser, /turf/open/floor/iron/dark, /area/station/engineering/main) "hDY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/water_source/puddle, /obj/structure/flora/bush/reed{ pixel_y = 8 @@ -45448,12 +39761,8 @@ icon_state = "dirt-flat-1" }, /obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/upper) "hEi" = ( @@ -45469,9 +39778,6 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "hEv" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/structure/table/reinforced, /obj/item/assembly/timer{ pixel_x = -6; @@ -45516,12 +39822,6 @@ /area/station/engineering/storage/tech) "hEA" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/white, /area/station/medical/treatment_center) @@ -45536,7 +39836,6 @@ "hED" = ( /obj/structure/window/spawner/directional/north, /obj/structure/chair/sofa/left/brown, -/obj/effect/landmark/start/assistant, /turf/open/floor/wood, /area/station/service/bar/atrium) "hEI" = ( @@ -45553,24 +39852,9 @@ }, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/starboard/fore) -"hET" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/service/bar) -"hEZ" = ( -/obj/structure/cable, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, -/area/space/nearstation) "hFf" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -45581,7 +39865,6 @@ dir = 9 }, /obj/structure/table, -/obj/effect/turf_decal/tile/yellow/fourcorners, /obj/item/assembly/igniter, /obj/item/assembly/igniter, /obj/item/assembly/timer{ @@ -45596,6 +39879,9 @@ pixel_x = 3; pixel_y = -3 }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "hFk" = ( @@ -45621,9 +39907,7 @@ id = "BevStand"; name = "Beverage Stand Shutters" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/common/wrestling/beverage) "hFB" = ( @@ -45651,8 +39935,8 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/dorms) @@ -45674,15 +39958,6 @@ "hFZ" = ( /turf/open/floor/iron/white/textured, /area/station/common/cryopods) -"hGe" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/aux_eva) "hGf" = ( /turf/closed/wall/r_wall, /area/station/security/brig) @@ -45703,12 +39978,8 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -45721,6 +39992,7 @@ pixel_y = 6 }, /obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron/dark, /area/station/cargo/miningoffice) "hGx" = ( @@ -45740,12 +40012,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/sign/warning/electric_shock/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -45758,7 +40026,7 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "hGX" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/hallway/secondary/construction) "hGY" = ( @@ -45817,12 +40085,8 @@ /turf/open/floor/iron/dark, /area/station/command/heads_quarters/nt_rep) "hHe" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -45845,8 +40109,7 @@ /obj/structure/chair{ dir = 4 }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ +/obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 }, /turf/open/floor/iron/dark/side{ @@ -45860,12 +40123,8 @@ /area/station/hallway/primary/central) "hHt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/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/department/engineering/atmos_aux_port) "hHv" = ( @@ -45886,19 +40145,15 @@ dir = 10 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "hHJ" = ( -/obj/machinery/light/directional/east, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall10"; location = "hall9" }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -45954,19 +40209,13 @@ pixel_y = 3 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/restraints/handcuffs/cable/cyan, /turf/open/floor/iron, /area/station/security/checkpoint/medical) "hIp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/freezer, /area/station/maintenance/abandon_kitchen_upper) "hIu" = ( @@ -45975,7 +40224,6 @@ "hIv" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/machinery/disposal/bin, -/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/siding/thinplating_new/end{ dir = 4 }, @@ -45998,12 +40246,8 @@ /area/station/hallway/primary/upper) "hIV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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, /area/station/commons/fitness) @@ -46011,15 +40255,6 @@ /obj/machinery/power/shuttle_engine/heater, /turf/open/floor/plating, /area/station/maintenance/department/engineering/atmos_aux_port) -"hJa" = ( -/obj/structure/window/spawner/directional/east, -/obj/effect/landmark/start/assistant, -/obj/structure/chair/sofa/corp/left{ - color = "#DE3A3A"; - dir = 8 - }, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen/diner) "hJb" = ( /obj/machinery/sparker/directional/north{ id = "Xenobio" @@ -46049,12 +40284,8 @@ /obj/structure/cable, /obj/structure/extinguisher_cabinet/directional/north, /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/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/research) "hJm" = ( @@ -46069,12 +40300,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/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/medical) "hJr" = ( @@ -46108,12 +40335,8 @@ /obj/machinery/light/directional/east, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/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/bar/atrium) "hJz" = ( @@ -46123,8 +40346,10 @@ pixel_x = 6 }, /obj/item/reagent_containers/cup/bottle/epinephrine, -/obj/effect/turf_decal/tile/yellow/fourcorners, /obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "hJA" = ( @@ -46143,7 +40368,7 @@ /turf/open/floor/engine, /area/station/science/ordnance) "hJF" = ( -/obj/structure/railing/corner/end/flip{ +/obj/structure/railing/corner/end{ dir = 4 }, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -46156,9 +40381,6 @@ /turf/closed/wall, /area/station/maintenance/fore/upper) "hJL" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, /obj/structure/table, /obj/structure/cable, /obj/item/storage/bag/construction, @@ -46167,12 +40389,6 @@ /obj/item/stack/sheet/iron/fifty, /turf/open/floor/iron/dark, /area/station/engineering/atmos/test_chambers) -"hJQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/command) "hJR" = ( /turf/closed/wall, /area/station/science/research) @@ -46182,20 +40398,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/abandon_wrestle) -"hJY" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/door/airlock/public/glass{ - name = "Central Upper Hallway" - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "hKf" = ( /obj/structure/table, /obj/item/paper_bin, @@ -46211,8 +40413,8 @@ /area/station/hallway/secondary/exit/departure_lounge) "hKi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/hallway/primary/port) @@ -46235,19 +40437,12 @@ "hKn" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "hKt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "hKw" = ( @@ -46288,16 +40483,6 @@ /obj/effect/decal/cleanable/blood/splatter, /turf/open/floor/plating, /area/station/maintenance/department/science/lower) -"hLf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/command/bridge) "hLg" = ( /obj/structure/sign/warning/vacuum/external/directional/south, /obj/effect/mapping_helpers/broken_floor, @@ -46307,9 +40492,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "hLk" = ( /obj/structure/chair/office{ @@ -46336,18 +40519,6 @@ /obj/machinery/dish_drive/bullet, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"hLp" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/coldroom) "hLu" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -46407,12 +40578,8 @@ /area/station/maintenance/console_room) "hMj" = ( /obj/effect/turf_decal/trimline/blue/filled/line, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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, /area/station/medical/medbay/lobby) "hMm" = ( @@ -46438,10 +40605,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/abandon_art_studio) @@ -46455,10 +40620,8 @@ /obj/structure/disposalpipe/junction/flip{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/corner{ dir = 1 }, @@ -46493,26 +40656,15 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "hMH" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/common/laser_tag) "hMI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -46558,9 +40710,7 @@ /turf/open/floor/carpet, /area/station/service/chapel/office) "hNj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/fitness/recreation) "hNk" = ( @@ -46633,12 +40783,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/upper) "hNI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/lone, /area/station/command/meeting_room/council) "hNP" = ( @@ -46743,7 +40889,7 @@ /turf/open/space/basic, /area/space/nearstation) "hOx" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/lone, /area/station/service/chapel) "hOA" = ( @@ -46784,16 +40930,13 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "rnd-enterance" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/science/general, /turf/open/floor/iron, /area/station/science/research) "hPg" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/table, /obj/item/paper_bin{ pixel_y = 3 @@ -46818,9 +40961,6 @@ dir = 8 }, /obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /turf/open/floor/iron/dark, /area/station/command/bridge) "hPp" = ( @@ -46898,15 +41038,8 @@ /area/station/hallway/secondary/command) "hPQ" = ( /obj/item/kirbyplants/random, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/engineering/main) "hPR" = ( @@ -46931,12 +41064,8 @@ /obj/structure/fence/door/opened{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/aft) "hPZ" = ( @@ -46945,7 +41074,6 @@ }, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/turf_decal/tile/purple/fourcorners, /obj/machinery/button/door/directional/north{ id = "trashcompactor"; name = "Trash Compactor"; @@ -46988,19 +41116,15 @@ /obj/machinery/door/airlock/medical{ name = "Surgery Observation" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/medical/surgery/theatre) "hQi" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "hQm" = ( @@ -47017,15 +41141,11 @@ /obj/structure/chair/office{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/detectives_office) "hQp" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/solars/port/fore) "hQA" = ( @@ -47068,9 +41188,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 4 }, -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) "hRq" = ( /obj/effect/turf_decal/stripes{ @@ -47094,10 +41212,8 @@ /area/station/maintenance/starboard/fore) "hRv" = ( /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/stone, /area/station/common/wrestling/arena) @@ -47159,8 +41275,8 @@ dir = 6 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos) "hSm" = ( @@ -47213,16 +41329,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/upper) -"hSF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/science/ordnance/testlab) "hSG" = ( /obj/structure/lattice/catwalk, /obj/structure/railing/corner{ @@ -47243,10 +41349,6 @@ /obj/structure/window/spawner/directional/north, /turf/open/floor/grass, /area/station/science/research) -"hSP" = ( -/obj/effect/spawner/random/trash/graffiti, -/turf/closed/wall, -/area/station/maintenance/department/engineering/engine_aft_port) "hSQ" = ( /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/command) @@ -47266,12 +41368,8 @@ "hSU" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/meeting_room/council) "hSW" = ( @@ -47301,12 +41399,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -47319,10 +41413,8 @@ /area/station/command/heads_quarters/captain) "hTD" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -47369,10 +41461,8 @@ /turf/open/floor/plating, /area/station/maintenance/rus_surgery) "hTY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/medical/psychology) "hUg" = ( @@ -47408,10 +41498,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -47440,16 +41528,18 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) +"hUN" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) "hUX" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -47465,41 +41555,21 @@ /turf/open/floor/iron/dark, /area/station/security/lockers) "hVk" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /mob/living/basic/mouse/brown/tom, /turf/open/floor/iron/kitchen{ dir = 1 }, /area/station/security/prison/upper) -"hVn" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/openspace, -/area/station/maintenance/aft/upper) "hVo" = ( /obj/machinery/door/airlock/security/glass{ name = "Security Office" }, /obj/structure/cable, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/security/general, /turf/open/floor/iron, /area/station/security/office) @@ -47529,8 +41599,8 @@ /area/station/commons/dorms) "hVE" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -47581,14 +41651,13 @@ /turf/open/floor/glass/reinforced/airless, /area/space/nearstation) "hWj" = ( -/obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, /area/station/security/prison/mess) "hWl" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) "hWp" = ( @@ -47599,14 +41668,12 @@ /turf/open/floor/plating, /area/station/maintenance/abandon_exam/cat) "hWs" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/checker, /area/station/service/janitor) "hWy" = ( -/obj/effect/turf_decal/tile/green/fourcorners, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/green/filled/corner{ dir = 4 }, /turf/open/floor/iron/white, @@ -47635,10 +41702,6 @@ /turf/closed/wall/r_wall, /area/station/engineering/atmos) "hWC" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, /obj/effect/turf_decal/stripes/white/line, /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -47648,8 +41711,8 @@ id = "Psychward2"; name = "Cell Door 2" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/aslyum) @@ -47669,16 +41732,6 @@ /obj/effect/spawner/random/contraband/prison, /turf/open/floor/iron/dark, /area/station/security/prison/workout) -"hWY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/structure/cable, -/turf/open/floor/eighties/red, -/area/station/common/arcade) "hWZ" = ( /obj/structure/table, /obj/item/pai_card, @@ -47733,8 +41786,8 @@ /obj/effect/turf_decal/tile/brown/half/contrasted, /obj/structure/cable, /obj/structure/disposalpipe/junction, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/sorting) "hXK" = ( @@ -47753,9 +41806,6 @@ /turf/open/floor/iron, /area/station/hallway/secondary/entry) "hXM" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/structure/railing{ dir = 4 }, @@ -47771,8 +41821,8 @@ /area/station/common/wrestling/arena) "hXS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/atmos{ name = "Atmospherics Auxiliary Port" }, @@ -47800,12 +41850,8 @@ /turf/open/floor/glass/reinforced, /area/station/science) "hYo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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, /area/station/security/prison/upper) @@ -47825,21 +41871,8 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"hYA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "hYF" = ( /obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -47856,32 +41889,20 @@ /turf/open/floor/iron/dark, /area/station/security/execution/education) "hYS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/item/cigbutt, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "hYV" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/medical/surgery/theatre) "hYX" = ( /obj/effect/landmark/start/bartender, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/hallway/secondary/service) "hYZ" = ( @@ -47900,9 +41921,6 @@ /obj/machinery/door/window/brigdoor/left/directional/west{ name = "Experimental Containment" }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/engine, /area/station/science/explab) "hZm" = ( @@ -47925,12 +41943,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/library/abandoned) "hZq" = ( @@ -47947,8 +41961,8 @@ /turf/closed/wall, /area/station/commons/locker) "hZz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ @@ -47977,15 +41991,12 @@ name = "science camera"; network = list("ss13","rd") }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "hZI" = ( /turf/closed/wall, /area/station/security/execution/transfer) "hZO" = ( -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/hydroponics, /obj/structure/disposalpipe/segment{ dir = 10 @@ -47998,21 +42009,6 @@ }, /turf/open/floor/iron/grimy, /area/station/command/meeting_room/council) -"hZQ" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "iaa" = ( /obj/structure/chair, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -48022,41 +42018,26 @@ "iac" = ( /obj/structure/cable, /obj/effect/landmark/start/medical_doctor, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/mob/living/simple_animal/bot/medbot{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/mob/living/basic/bot/medbot{ name = "Doctor Heals-The-Idiot" }, /obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"iai" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "ian" = ( /obj/effect/turf_decal/vg_decals/numbers/two{ dir = 4 }, /obj/structure/cable, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/station/solars/starboard/aft) "iau" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -48155,12 +42136,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -48186,20 +42163,14 @@ "ibo" = ( /obj/structure/table/reinforced, /obj/item/folder/red, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/office) "ibr" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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, /area/station/security/prison/shower) @@ -48262,16 +42233,9 @@ "ica" = ( /obj/machinery/light/directional/south, /obj/machinery/firealarm/directional/south, +/obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron/smooth_edge, /area/station/cargo/miningdock) -"ich" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "icj" = ( /obj/structure/decorative/shelf, /obj/effect/spawner/random/maintenance/two, @@ -48294,12 +42258,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -48307,22 +42267,13 @@ /turf/open/floor/iron, /area/station/commons/dorms) "icv" = ( -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, /obj/machinery/modular_computer/preset/id{ dir = 8 }, /obj/machinery/status_display/ai/directional/east, +/obj/effect/turf_decal/tile/red/real_red/anticorner/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "icG" = ( @@ -48353,12 +42304,8 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "icN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 9 }, @@ -48443,42 +42390,15 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"idD" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "idG" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/railing/corner/end/flip{ dir = 1 }, /turf/open/floor/iron, /area/station/hallway/primary/upper) -"idM" = ( -/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "AISATFOYER" - }, -/obj/structure/cable, -/obj/machinery/door/airlock/external{ - name = "MiniSat Exterior Access" - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/engineering/transit_tube) "idP" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/poddoor/preopen{ @@ -48505,10 +42425,9 @@ /area/station/medical/chemistry) "idY" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "iej" = ( @@ -48534,9 +42453,6 @@ /obj/structure/sign/barber{ pixel_x = -13 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -48544,32 +42460,20 @@ "iem" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side, /area/station/ai_monitored/security/armory) "ien" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/caution/stand_clear/blue{ + dir = 8 }, /turf/open/floor/iron/dark, /area/station/security/brig) "ies" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/siding/wood{ dir = 9 }, @@ -48577,63 +42481,34 @@ dir = 4 }, /obj/structure/chair/stool/bar/directional/west, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/command/captain_dining) "ieu" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/detectives_office) "iev" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) -"ieF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/eighties/red, -/area/station/common/arcade) "ieG" = ( /obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, /area/station/hallway/primary/port) -"ieJ" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "ieR" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/tank_holder/extinguisher, @@ -48656,9 +42531,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/transit_tube) "ieX" = ( @@ -48667,9 +42540,7 @@ /obj/machinery/door/airlock/atmos/glass{ name = "Distribution Loop" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos/office) "ifb" = ( @@ -48688,10 +42559,6 @@ /area/station/maintenance/starboard/fore) "ifj" = ( /obj/structure/table/wood/fancy/red, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/item/reagent_containers/cup/rag{ pixel_x = 2; pixel_y = 11 @@ -48712,6 +42579,7 @@ pixel_x = -2; pixel_y = 9 }, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/command/captain_dining) "ifn" = ( @@ -48739,35 +42607,17 @@ /area/station/maintenance/department/medical/central) "ifq" = ( /obj/structure/chair/stool, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/assistant, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"ifs" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/open/floor/iron, -/area/station/medical/cryo) "ifx" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 8 }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/medical/medbay/central) "ify" = ( @@ -48785,16 +42635,14 @@ /area/station/medical/medbay/lobby) "ifG" = ( /obj/machinery/chem_heater/withbuffer, -/obj/effect/turf_decal/tile/yellow/fourcorners, /obj/structure/window/spawner/directional/west, +/obj/effect/turf_decal/trimline/yellow/filled/line, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "ifQ" = ( /obj/structure/cable, /obj/machinery/light_switch/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/textured, /area/station/common/cryopods) "ifR" = ( @@ -48807,9 +42655,6 @@ /area/station/service/bar/atrium) "ifS" = ( /obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /turf/open/floor/plating, /area/station/escapepodbay) "ifT" = ( @@ -48841,12 +42686,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/white, /area/station/science/research) -"igG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/office) "igH" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/cable, @@ -48913,9 +42752,6 @@ /turf/open/floor/iron/dark, /area/station/security/power_station) "igR" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, /obj/effect/turf_decal/siding/thinplating/dark/end{ dir = 1 }, @@ -48924,10 +42760,8 @@ /turf/open/floor/iron/checker, /area/station/engineering/gravity_generator) "ihg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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/hallway/secondary/command) "ihs" = ( @@ -48936,26 +42770,19 @@ /area/station/command/heads_quarters/captain/private) "ihD" = ( /obj/effect/landmark/start/security_officer, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/security/lockers) "ihH" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/command/captain_dining) "ihM" = ( @@ -49012,7 +42839,7 @@ /turf/open/floor/iron/dark, /area/station/command/bridge) "iij" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/holopad, /turf/open/floor/iron, /area/station/security/checkpoint) @@ -49063,8 +42890,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/common/wrestling/locker) "iiL" = ( @@ -49080,36 +42907,31 @@ }, /area/station/command/gateway) "iiT" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/item/kirbyplants/random, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/barber) "ijc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/theater) "iji" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/lobby) "ijj" = ( /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -49132,8 +42954,8 @@ /obj/machinery/door/firedoor, /obj/effect/turf_decal/trimline/purple/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/science/research, /turf/open/floor/iron/white, /area/station/science/explab) @@ -49169,15 +42991,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "ijC" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/dark, /area/station/cargo/miningoffice) @@ -49188,12 +43003,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -49229,32 +43040,18 @@ /area/station/commons/dorms/room2) "ijZ" = ( /obj/structure/window/reinforced/tinted/spawner/directional/west, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000" - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 4 - }, /obj/item/toy/plush/nukeplushie{ name = "Lasertag Red Flag" }, /obj/structure/window/reinforced/tinted/spawner/directional/north, /obj/structure/window/reinforced/tinted/spawner/directional/south, +/obj/effect/turf_decal/tile/red/real_red/fourcorners, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "ikb" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -49265,19 +43062,13 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/theater/abandoned) "ikn" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_starboard) @@ -49287,12 +43078,8 @@ }, /obj/effect/spawner/random/trash/cigbutt, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "ikr" = ( @@ -49315,12 +43102,8 @@ /obj/effect/turf_decal/trimline/green/filled/warning{ dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology/isolation) @@ -49347,8 +43130,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/abandon_diner) @@ -49405,12 +43188,8 @@ /area/station/science/robotics) "ilB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /mob/living/simple_animal/bot/secbot/beepsky/officer, /obj/structure/disposalpipe/segment{ dir = 4 @@ -49427,12 +43206,8 @@ /area/station/hallway/secondary/entry) "ilK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -49472,22 +43247,8 @@ /turf/open/floor/iron, /area/station/commons/fitness/recreation) "img" = ( -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000" - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 1 - }, /obj/structure/window/reinforced/tinted/spawner/directional/west, +/obj/effect/turf_decal/tile/red/real_red/fourcorners, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "iml" = ( @@ -49500,12 +43261,8 @@ /area/station/science/robotics) "imm" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/chapel{ dir = 8 }, @@ -49534,8 +43291,8 @@ "imD" = ( /obj/structure/cable, /obj/machinery/airalarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -49558,16 +43315,14 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/morgue) "imR" = ( /obj/structure/bed/maint, /obj/machinery/flasher{ - id = "IsolationFlash2"; + id = "IsolationCell_1"; pixel_x = -22; pixel_y = 28 }, @@ -49592,14 +43347,6 @@ }, /turf/open/floor/wood, /area/station/commons/dorms/room1) -"ina" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/structure/rack/shelf, -/obj/effect/spawner/random/techstorage/medical_all, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tech) "inc" = ( /obj/effect/decal/cleanable/oil/streak, /turf/open/floor/iron/dark, @@ -49610,13 +43357,10 @@ dir = 4; pixel_x = -5 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -49663,8 +43407,8 @@ }, /obj/effect/turf_decal/trimline/blue/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/medical/surgery, /turf/open/floor/iron/white, @@ -49676,17 +43420,12 @@ name = "Distribution Loop" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos/office) "inQ" = ( -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 }, /turf/open/floor/iron/dark/side{ dir = 4 @@ -49704,7 +43443,6 @@ /turf/open/floor/iron/dark, /area/station/security/courtroom) "inZ" = ( -/obj/effect/turf_decal/bot, /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/iron/dark, /area/station/engineering/atmos/pumproom) @@ -49719,8 +43457,8 @@ /area/station/maintenance/port/upper) "iof" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/digital_clock/directional/east, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) @@ -49728,12 +43466,8 @@ /obj/structure/lattice/catwalk, /obj/structure/railing/corner, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/openspace, /area/station/maintenance/aft/upper) "ior" = ( @@ -49742,8 +43476,8 @@ }, /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/medical/medbay/central) "iox" = ( @@ -49753,8 +43487,8 @@ /area/station/engineering/atmos) "ioy" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "ioE" = ( @@ -49842,8 +43576,8 @@ /area/station/maintenance/department/engineering/atmos_aux_port) "ipR" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -49911,7 +43645,7 @@ "iqk" = ( /obj/effect/turf_decal/bot, /obj/effect/landmark/event_spawn, -/turf/open/floor/iron/dark/small, +/turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) "iqm" = ( /obj/structure/window/reinforced/plasma/spawner/directional/west, @@ -49948,19 +43682,6 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron, /area/station/engineering/main) -"iqE" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/duct, -/turf/open/floor/engine{ - icon_state = "floor" - }, -/area/station/science/ordnance) "iqG" = ( /obj/effect/turf_decal/delivery, /obj/effect/spawner/random/vending/colavend, @@ -49977,23 +43698,16 @@ /obj/structure/railing{ dir = 4 }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "iqP" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron, /area/station/engineering/main) "iqT" = ( @@ -50018,19 +43732,12 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, /obj/machinery/door/poddoor/shutters/preopen{ id = "Xenobio Containment"; name = "Xenobiology Containment Shutters" }, /turf/open/floor/iron, /area/station/science/xenobiology/hallway) -"ira" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/engineering/gravity_generator) "irb" = ( /obj/structure/lattice/catwalk, /obj/structure/railing/corner/end{ @@ -50046,9 +43753,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/chair/comfy/brown{ color = "#A46106" }, @@ -50106,24 +43811,15 @@ /turf/open/floor/iron/dark, /area/station/science/xenobiology/control) "irJ" = ( -/obj/structure/sign/directions/evac{ - dir = 1; - pixel_y = -10 - }, -/obj/structure/sign/directions/supply{ - dir = 4; - pixel_y = -4 - }, -/obj/structure/sign/directions/engineering{ - dir = 4; - pixel_y = 2 +/obj/machinery/camera{ + c_tag = "Leisure Hallway - Lowest Aft"; + dir = 9; + name = "hallway camera" }, -/obj/structure/sign/directions/security{ - dir = 4; - pixel_y = 8 +/turf/open/floor/iron/dark/side{ + dir = 1 }, -/turf/closed/wall, -/area/station/maintenance/salon/lower) +/area/station/hallway/primary/port) "irK" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/structure/disposalpipe/segment{ @@ -50138,12 +43834,6 @@ /obj/structure/railing{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, /obj/structure/table, /obj/item/radio/intercom/directional/east, /turf/open/floor/iron, @@ -50152,15 +43842,11 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/smooth, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "isb" = ( /obj/effect/mapping_helpers/burnt_floor, /obj/machinery/door/airlock/maintenance, @@ -50168,7 +43854,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "isg" = ( -/obj/effect/turf_decal/stripes, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 }, @@ -50194,19 +43879,6 @@ /obj/structure/table, /turf/open/floor/iron/smooth, /area/station/maintenance/starboard/fore) -"isu" = ( -/obj/structure/cable, -/obj/effect/landmark/start/assistant, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/commons/locker) "isy" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /obj/machinery/atmospherics/pipe/smart/simple/brown/visible/layer2, @@ -50219,9 +43891,6 @@ /turf/closed/wall, /area/station/security/checkpoint/medical) "isJ" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/rack/shelf, /obj/effect/spawner/random/techstorage/tcomms_all, /obj/machinery/light/directional/south, @@ -50232,12 +43901,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/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/upper) "isR" = ( @@ -50264,15 +43929,12 @@ /turf/open/floor/plating/airless, /area/station/maintenance/fore/upper) "ita" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/security/prison/upper) "itv" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /turf/open/floor/iron/dark, /area/station/maintenance/aux_eva) "itJ" = ( @@ -50291,8 +43953,8 @@ /obj/machinery/door/airlock/silver{ name = "Changing Room" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/side, @@ -50321,8 +43983,8 @@ "iuq" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/public/glass{ name = "Central Hallway" @@ -50331,24 +43993,20 @@ /area/station/hallway/primary/central/aft) "iur" = ( /obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) "iuy" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/port) "iuD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/aft/upper) @@ -50366,12 +44024,8 @@ /area/station/commons/dorms/room5) "iuN" = ( /obj/structure/railing/corner, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/red, /area/station/command/heads_quarters/hos) "iuP" = ( @@ -50384,9 +44038,7 @@ /turf/open/floor/plating, /area/station/science/ordnance/testlab) "iuS" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, +/obj/effect/turf_decal/trimline/yellow/filled/corner, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "iuT" = ( @@ -50395,8 +44047,9 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/execution/transfer) "iuU" = ( @@ -50408,21 +44061,8 @@ /area/station/maintenance/department/security/upper) "iuW" = ( /obj/structure/window/spawner/directional/north, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"iuY" = ( -/obj/effect/spawner/random/structure/steam_vent, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/engineering/engine_aft_starboard) "ivc" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -50432,14 +44072,6 @@ }, /turf/open/floor/iron/smooth, /area/station/maintenance/starboard/fore) -"ivd" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "ivh" = ( /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood{ @@ -50463,10 +44095,8 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/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/side{ dir = 8 @@ -50483,7 +44113,6 @@ /obj/machinery/mass_driver/trash{ dir = 4 }, -/obj/effect/turf_decal/stripes/full, /turf/open/floor/plating, /area/station/maintenance/disposal) "ivs" = ( @@ -50503,9 +44132,7 @@ /turf/open/floor/engine, /area/station/science/xenobiology) "ivB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/dark, /area/station/common/laser_tag) @@ -50538,12 +44165,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -50583,9 +44206,6 @@ /area/station/maintenance/starboard/fore) "ivX" = ( /obj/structure/table/glass, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/item/book/manual/wiki/infections, /obj/item/reagent_containers/syringe/antiviral, /obj/item/reagent_containers/dropper, @@ -50603,9 +44223,7 @@ /area/station/science/explab) "iwe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/power_station) "iwl" = ( @@ -50616,12 +44234,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "prison-mess-hall" }, @@ -50649,12 +44263,8 @@ /obj/structure/disposalpipe/segment, /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) "iwt" = ( @@ -50674,12 +44284,8 @@ "iwv" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/machinery/light_switch/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -50709,8 +44315,8 @@ "iwV" = ( /obj/effect/turf_decal/trimline/green/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology/isolation) @@ -50736,12 +44342,8 @@ "ixh" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/chair/sofa/bench/right, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/prison/workout) "ixj" = ( @@ -50763,10 +44365,8 @@ /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) "ixs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/blueshield) "ixt" = ( @@ -50781,8 +44381,8 @@ /area/station/hallway/primary/upper) "ixy" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/research) "ixA" = ( @@ -50889,26 +44489,10 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/hallway/primary/aft) -"ixZ" = ( -/obj/effect/turf_decal/stripes/end, -/obj/machinery/suit_storage_unit/engine, -/turf/open/floor/iron/dark, -/area/station/engineering/break_room) -"iye" = ( -/obj/structure/cable, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/wood/parquet, -/area/station/command/heads_quarters/cmo) "iyf" = ( /obj/structure/fence/door/opened{ dir = 4 @@ -50926,21 +44510,14 @@ name = "Secure Tool Storage Blast Door" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/transit_tube) -"iyq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/white/textured, -/area/station/medical/aslyum) "iyE" = ( /obj/effect/turf_decal/bot_red, /obj/effect/turf_decal/loading_area/red, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/mineral/plastitanium, /area/station/science/robotics/lab) "iyH" = ( @@ -50952,10 +44529,8 @@ /obj/effect/turf_decal/bot_red, /obj/structure/cable, /obj/machinery/light/floor, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/command/secure_bunker) "iyX" = ( @@ -50973,12 +44548,10 @@ /turf/open/floor/iron, /area/station/hallway/primary/upper) "izc" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/segment, -/turf/open/floor/iron/dark, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, /area/station/security/brig) "izd" = ( /obj/structure/chair/sofa/corp/right, @@ -50992,7 +44565,7 @@ }, /obj/effect/landmark/start/bitrunner, /turf/open/floor/iron/dark/small, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "izf" = ( /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 8 @@ -51004,25 +44577,13 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology) "izm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/service/theater/abandoned) "izq" = ( /obj/structure/railing, /turf/open/floor/iron/dark/side, /area/station/ai_monitored/command/storage/eva) -"izF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/catwalk_floor{ - initial_gas_mix = "TEMP=2.7" - }, -/area/space/nearstation) "izM" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -51037,12 +44598,8 @@ /obj/machinery/door/airlock/corporate{ name = "Blueshield's Quarters" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/command/captain, /turf/open/floor/wood, /area/station/command/heads_quarters/blueshield) @@ -51064,22 +44621,14 @@ /turf/open/floor/plating, /area/station/construction/mining/aux_base) "iAj" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 }, /turf/open/floor/iron/dark, /area/station/security/brig) "iAk" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/door/window/left{ dir = 1 }, @@ -51133,14 +44682,6 @@ }, /turf/open/floor/glass, /area/station/commons/dorms) -"iAO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/engine{ - icon_state = "floor" - }, -/area/station/science/ordnance/testlab) "iAU" = ( /obj/structure/chair/sofa/bench/right{ dir = 4 @@ -51244,18 +44785,8 @@ /obj/machinery/door/airlock/virology/glass{ name = "Isolation B" }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/medical/virology, /turf/open/floor/iron, /area/station/medical/virology) @@ -51263,9 +44794,6 @@ /obj/structure/fence/cut/medium{ dir = 4 }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/door/firedoor/border_only{ dir = 1 }, @@ -51320,12 +44848,8 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/warehouse) "iCi" = ( @@ -51353,13 +44877,6 @@ /obj/machinery/computer/shuttle/labor{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "iCD" = ( @@ -51372,12 +44889,8 @@ "iCF" = ( /obj/machinery/door/firedoor, /obj/machinery/firealarm/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/exit) "iCJ" = ( @@ -51385,12 +44898,8 @@ icon_state = "dirt-flat-1" }, /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/delivery, /obj/machinery/portable_atmospherics/scrubber, /turf/open/floor/plating, @@ -51446,8 +44955,8 @@ }, /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/library) "iDw" = ( @@ -51459,12 +44968,7 @@ /area/station/maintenance/department/security/lower) "iDx" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, -/obj/effect/turf_decal/trimline/purple/filled/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -51484,12 +44988,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/engineering/atmos_aux_port) "iDH" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/closet/crate/bin, /obj/machinery/light/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -51512,22 +45010,15 @@ "iDX" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "iEg" = ( /obj/structure/trash_pile, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"iEh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "iEm" = ( /obj/machinery/light/directional/south, /obj/item/radio/intercom/directional/south, @@ -51535,19 +45026,15 @@ /area/station/engineering/main) "iEp" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark/side, /area/station/security/prison/upper) "iEr" = ( /obj/effect/spawner/random/trash/mess, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable/multilayer/connected, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) @@ -51557,13 +45044,8 @@ /area/station/cargo/warehouse) "iEx" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/machinery/door/firedoor, /turf/open/floor/iron/white, @@ -51577,21 +45059,18 @@ /area/station/engineering/atmos) "iEz" = ( /obj/structure/window/green_glass_pane, -/obj/machinery/door/poddoor/shutters{ +/obj/machinery/door/poddoor/shutters/preopen{ id = "ChapelHall"; name = "Chapel Garden Shutters" }, /turf/open/floor/plating, /area/station/service/chapel) "iEB" = ( -/obj/effect/turf_decal/bot_red, /obj/effect/turf_decal/vg_decals/numbers/one, /obj/structure/closet/emcloset/wall{ pixel_y = -32 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/escapepodbay) "iEC" = ( @@ -51644,12 +45123,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) @@ -51697,17 +45172,13 @@ /area/station/engineering/break_room) "iFx" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/hallway/secondary/exit/departure_lounge) "iFz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/captain) "iFA" = ( @@ -51772,43 +45243,29 @@ /turf/open/floor/iron/white, /area/station/science/ordnance/storage) "iFX" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/table, /obj/machinery/power/shuttle_engine/propulsion{ dir = 8 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "iGa" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/upper) "iGb" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "iGe" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/break_room) "iGg" = ( @@ -51819,15 +45276,6 @@ "iGk" = ( /turf/closed/wall, /area/station/maintenance/abandon_wrestle) -"iGo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/carpet, -/area/station/security/courtroom) "iGr" = ( /obj/machinery/shower/directional/west, /obj/structure/drain, @@ -51844,7 +45292,7 @@ /turf/open/floor/carpet/green, /area/station/command/heads_quarters/nt_rep) "iGu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -51861,9 +45309,6 @@ /obj/item/crowbar, /obj/item/wrench, /obj/item/clothing/mask/gas, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /turf/open/floor/iron/dark, /area/station/engineering/main) "iGE" = ( @@ -51907,9 +45352,6 @@ /turf/open/floor/carpet, /area/station/service/library) "iHj" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark/side{ dir = 8 @@ -51920,8 +45362,8 @@ name = "Interrogation" }, /obj/effect/turf_decal/delivery/blue, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/security/general, /turf/open/floor/iron/dark, /area/station/security/interrogation) @@ -51940,8 +45382,8 @@ /area/station/command/heads_quarters/captain) "iHv" = ( /obj/effect/turf_decal/trimline/purple/filled/line, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/research) "iHw" = ( @@ -51949,8 +45391,8 @@ dir = 8 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "iHC" = ( @@ -51963,9 +45405,7 @@ /area/station/maintenance/abandon_arcade) "iHI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) "iHJ" = ( @@ -51975,9 +45415,7 @@ /obj/structure/cable, /obj/machinery/duct, /obj/effect/decal/cleanable/food/flour, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/common/wrestling/concessions) "iHL" = ( @@ -52026,13 +45464,6 @@ dir = 8 }, /obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /turf/open/floor/iron/dark, /area/station/security/office) "iIk" = ( @@ -52041,9 +45472,6 @@ }, /obj/machinery/portable_atmospherics/canister/anesthetic_mix, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /obj/structure/window/spawner/directional/east, /obj/structure/window/spawner/directional/south, /turf/open/floor/iron, @@ -52067,12 +45495,8 @@ /area/station/escapepodbay) "iIw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/holopad, /obj/effect/landmark/start/science_guard, /turf/open/floor/iron, @@ -52081,9 +45505,7 @@ /turf/open/floor/iron/kitchen, /area/station/security/prison/mess) "iIz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/xenobio_disposals) "iIJ" = ( @@ -52106,12 +45528,8 @@ }, /area/station/commons/fitness) "iJe" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -52120,30 +45538,14 @@ /area/station/maintenance/thruster_room/central) "iJh" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/machinery/duct, /turf/open/floor/carpet/green, /area/station/command/heads_quarters/nt_rep) -"iJm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/duct, -/turf/open/floor/iron/dark/side, -/area/station/hallway/secondary/command) "iJw" = ( /obj/structure/reagent_dispensers/fueltank, /obj/effect/turf_decal/bot, @@ -52157,9 +45559,7 @@ id_tag = "Toilet3"; name = "Stall 3" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) "iJK" = ( @@ -52179,12 +45579,8 @@ /obj/structure/disposalpipe/junction{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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/hallway/primary/starboard) "iJY" = ( @@ -52201,12 +45597,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"iKb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/atmos/test_chambers) "iKj" = ( /obj/structure/extinguisher_cabinet/directional/east, /obj/structure/railing/corner/end/flip{ @@ -52225,10 +45615,6 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "iKD" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/machinery/button/door{ id = "Barshutters"; name = "Bar Shutters"; @@ -52243,9 +45629,10 @@ pixel_y = -6; req_access = list("bar") }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "iKG" = ( @@ -52281,7 +45668,7 @@ /area/station/common/arcade) "iLb" = ( /turf/closed/wall/r_wall, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "iLd" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Security Maintenance" @@ -52301,12 +45688,8 @@ /area/station/science/breakroom) "iLo" = ( /obj/effect/turf_decal/trimline/purple/filled/line, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -52325,16 +45708,6 @@ }, /area/station/science) "iLs" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/door/airlock/highsecurity{ name = "AI Upload Access" }, @@ -52342,19 +45715,15 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/command/ai_upload, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload_foyer) "iLw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/spawner/random/trash/bin, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -52362,12 +45731,8 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "iLx" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/aslyum) "iLD" = ( @@ -52383,9 +45748,7 @@ pixel_y = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/electronic_marketing_den) "iLH" = ( @@ -52402,7 +45765,8 @@ /obj/structure/statue/sandstone/venus{ anchored = 1; pixel_x = -3; - pixel_y = 7 + pixel_y = 7; + layer = 3.4 }, /turf/open/floor/grass, /area/station/hallway/primary/aft) @@ -52450,17 +45814,6 @@ "iMc" = ( /turf/closed/wall/r_wall, /area/station/common/pool) -"iMd" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "iMf" = ( /obj/structure/flora/bush/jungle/c/style_3, /obj/structure/flora/bush/flowers_br, @@ -52494,16 +45847,11 @@ /turf/open/floor/plating, /area/station/command/secure_bunker) "iMB" = ( -/obj/effect/turf_decal/tile/blue{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "iMC" = ( @@ -52522,7 +45870,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -52538,12 +45886,8 @@ /area/station/maintenance/department/security/prison_upper) "iMN" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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) "iMU" = ( @@ -52582,19 +45926,10 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/research/abandoned) -"iNs" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "iNy" = ( /obj/effect/turf_decal/trimline/blue/corner{ dir = 8 @@ -52605,23 +45940,11 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/central) "iNB" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/railing{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, /area/station/security/execution/transfer) "iNE" = ( /obj/effect/spawner/random/trash/food_packaging, @@ -52633,8 +45956,8 @@ /area/station/maintenance/port/fore) "iOb" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/firealarm/directional/west, /obj/machinery/duct, @@ -52649,8 +45972,8 @@ /area/space/nearstation) "iOl" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -52711,12 +46034,8 @@ "iOR" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/openspace, /area/station/maintenance/aft/upper) "iOX" = ( @@ -52732,10 +46051,10 @@ /area/station/maintenance/department/security/lower) "iPj" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/public/glass{ name = "Central Hallway" }, @@ -52752,9 +46071,7 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "iPA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/engineering/supermatter/room) "iPE" = ( @@ -52764,9 +46081,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "iPK" = ( @@ -52796,9 +46111,6 @@ /obj/item/book/manual/wiki/security_space_law, /obj/item/radio, /obj/machinery/newscaster/directional/east, -/obj/effect/turf_decal/siding/thinplating_new/end{ - dir = 8 - }, /turf/open/floor/iron/dark, /area/station/security/checkpoint) "iQb" = ( @@ -52820,9 +46132,6 @@ /turf/open/floor/iron, /area/station/science/ordnance/testlab) "iQx" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/effect/turf_decal/stripes/red/line{ dir = 8 }, @@ -52837,12 +46146,8 @@ /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/abandoned, /obj/structure/barricade/wooden/crude, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, @@ -52868,12 +46173,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/ai_monitored/turret_protected/aisat_interior) "iQP" = ( @@ -52938,14 +46239,13 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "iRq" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/pew/left{ dir = 8 }, /obj/structure/cable, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/prison/mess) "iRz" = ( @@ -52955,8 +46255,8 @@ /area/station/maintenance/port/aft) "iRC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/aisat_interior) "iRJ" = ( @@ -52966,18 +46266,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) -"iRM" = ( -/obj/effect/turf_decal/trimline/white/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/white/filled/corner{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "iRO" = ( /obj/structure/railing{ dir = 4 @@ -52998,7 +46286,6 @@ }, /obj/machinery/defibrillator_mount/directional/north, /obj/item/radio/intercom/directional/east, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "iSa" = ( @@ -53017,8 +46304,8 @@ dir = 8 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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, /area/station/cargo/lobby) @@ -53043,12 +46330,8 @@ "iSV" = ( /obj/structure/cable, /obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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, /area/station/common/locker_room_shower) @@ -53076,8 +46359,8 @@ /area/station/maintenance/starboard/fore) "iTp" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -53091,6 +46374,7 @@ /area/station/maintenance/fore/upper) "iTs" = ( /obj/machinery/light/directional/south, +/obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron/smooth_edge, /area/station/cargo/miningdock) "iTC" = ( @@ -53217,12 +46501,8 @@ "iUv" = ( /obj/effect/landmark/start/chief_medical_officer, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/cmo) "iUy" = ( @@ -53235,12 +46515,8 @@ /turf/open/floor/wood, /area/station/command/meeting_room/council) "iUB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/side{ dir = 8 @@ -53257,9 +46533,6 @@ /turf/open/floor/grass, /area/station/hallway/primary/aft) "iUL" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/white/smooth_corner{ dir = 1 }, @@ -53279,13 +46552,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) -"iUR" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron/dark/side, -/area/station/hallway/secondary/command) "iUS" = ( /obj/item/radio/intercom/directional/east, /obj/machinery/camera/directional/east{ @@ -53300,9 +46566,6 @@ /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 8 }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 8 - }, /obj/structure/table/reinforced, /obj/machinery/fax{ fax_name = "Engineering Lobby"; @@ -53320,9 +46583,9 @@ /area/station/command/gateway) "iVe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/siding/wood{ dir = 1 }, @@ -53330,9 +46593,7 @@ /turf/open/floor/wood, /area/station/hallway/primary/port) "iVh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/cafeteria, /area/station/command/heads_quarters/nt_rep) @@ -53353,7 +46614,7 @@ /obj/structure/railing/corner/end/flip{ dir = 8 }, -/obj/structure/railing/corner/end/flip{ +/obj/structure/railing/corner/end{ dir = 4 }, /turf/open/floor/iron, @@ -53404,8 +46665,8 @@ /turf/closed/wall/r_wall, /area/station/maintenance/aft/upper) "iVM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -53420,16 +46681,14 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) "iVV" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, @@ -53437,8 +46696,8 @@ "iWe" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/hydroponics/garden) "iWi" = ( @@ -53454,22 +46713,16 @@ /area/station/security/detectives_office) "iWu" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction/flip{ dir = 1 }, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "iWw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/captain_dining) "iWz" = ( @@ -53480,8 +46733,8 @@ /obj/structure/chair/comfy/black{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/blue, /area/station/command/captain_dining) "iWF" = ( @@ -53499,10 +46752,6 @@ /turf/closed/wall, /area/station/commons/vacant_room/commissary) "iWV" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, @@ -53544,12 +46793,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/digital_clock/directional/south, /obj/machinery/duct, /turf/open/floor/wood, @@ -53584,33 +46829,22 @@ /obj/structure/chair/office/light{ dir = 4 }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green, /obj/effect/landmark/start/virologist, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, /obj/machinery/duct, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 6 + }, /turf/open/floor/iron/white, /area/station/medical/virology) "iXF" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -53619,8 +46853,8 @@ }, /area/station/hallway/primary/central) "iXJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -53647,10 +46881,8 @@ /area/station/medical/psychology) "iXS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -53670,15 +46902,6 @@ }, /turf/open/floor/iron/dark/side, /area/station/security/office) -"iXW" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/construction/mining/aux_base) "iYc" = ( /obj/structure/table, /obj/machinery/bluespace_vendor/directional/north, @@ -53709,12 +46932,8 @@ }, /obj/structure/cable, /obj/effect/landmark/start/research_director, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/wood, /area/station/command/heads_quarters/rd) @@ -53732,17 +46951,11 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/cargo/office) -"iYo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/atmos/test_chambers) "iYx" = ( /obj/effect/spawner/random/trash/mess, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "iYA" = ( @@ -53777,7 +46990,6 @@ /turf/open/floor/wood, /area/station/maintenance/abandon_art_studio) "iYN" = ( -/obj/structure/closet/secure_closet/detective, /obj/item/clothing/under/rank/security/detective, /obj/item/clothing/suit/jacket/det_suit{ icon_state = "curator" @@ -53788,6 +47000,7 @@ /obj/machinery/camera/directional/east{ c_tag = "Detective's Study" }, +/obj/structure/filingcabinet/security, /turf/open/floor/wood/parquet, /area/station/security/detectives_office) "iYT" = ( @@ -53796,8 +47009,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) "iYV" = ( @@ -53864,10 +47077,8 @@ /obj/effect/mapping_helpers/requests_console/supplies, /obj/structure/cable, /obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/chapel/office) "iZs" = ( @@ -53891,9 +47102,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "iZv" = ( /turf/open/floor/iron/stairs/right, @@ -53912,7 +47121,7 @@ "iZC" = ( /obj/structure/table/wood, /obj/structure/window/reinforced/spawner/directional/west, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_x = 5; pixel_y = 5 }, @@ -53942,9 +47151,7 @@ /area/station/common/tailoring) "iZT" = ( /obj/effect/landmark/carpspawn, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "iZW" = ( /obj/structure/mirror{ @@ -53984,18 +47191,6 @@ }, /turf/open/floor/engine/n2o, /area/station/engineering/atmos) -"jan" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "jas" = ( /obj/machinery/door/airlock/command/glass{ name = "Control Room" @@ -54029,15 +47224,9 @@ /area/station/hallway/primary/central/aft) "jaI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/catwalk_floor{ - initial_gas_mix = "TEMP=2.7" - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron/airless, /area/space/nearstation) "jaJ" = ( /obj/effect/turf_decal/bot, @@ -54053,10 +47242,8 @@ /area/station/security/prison/upper) "jaM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/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/abandoned) "jaR" = ( @@ -54079,18 +47266,11 @@ /turf/open/floor/engine, /area/station/engineering/supermatter/room) "jbh" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/dark/herringbone, /area/station/cargo/storage) "jbj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/cargo/power_station/upper) "jbn" = ( @@ -54152,12 +47332,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/library/private) "jbR" = ( @@ -54189,18 +47365,6 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"jbW" = ( -/obj/structure/fence{ - dir = 8 - }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/iron/dark/herringbone, -/area/station/cargo/storage) "jbX" = ( /obj/item/kirbyplants/random, /obj/machinery/airalarm/directional/west, @@ -54210,12 +47374,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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 = 1 @@ -54243,12 +47403,8 @@ dir = 9 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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/hallway/primary/aft) "jcn" = ( @@ -54278,19 +47434,14 @@ }, /area/station/security/office) "jcu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/dark, /area/station/security/corrections_officer) "jcw" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/north, /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -54322,12 +47473,8 @@ /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/ce) "jcR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/chemistry) @@ -54346,9 +47493,6 @@ "jdg" = ( /obj/effect/turf_decal/bot, /obj/structure/closet/firecloset, -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /turf/open/floor/iron/dark, /area/station/engineering/main) "jdh" = ( @@ -54373,7 +47517,7 @@ pixel_y = -4 }, /obj/structure/sign/directions/evac{ - dir = 1; + dir = 8; pixel_y = -10 }, /turf/closed/wall, @@ -54389,12 +47533,8 @@ /area/station/security/prison/rec) "jdz" = ( /obj/effect/turf_decal/tile/brown/anticorner/contrasted, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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, /area/station/cargo/drone_bay) @@ -54410,9 +47550,7 @@ /area/station/maintenance/port/upper) "jdO" = ( /obj/machinery/griddle, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "jdR" = ( @@ -54483,7 +47621,6 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "jeT" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/table, /obj/item/storage/fancy/coffee_condi_display{ pixel_x = 4; @@ -54493,6 +47630,7 @@ pixel_x = -10; pixel_y = 4 }, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "jfa" = ( @@ -54559,12 +47697,8 @@ /turf/open/floor/carpet/blue, /area/station/service/lawoffice) "jfR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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, /area/station/security/execution/education) @@ -54575,12 +47709,8 @@ "jfW" = ( /obj/effect/spawner/random/trash/mess, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/security/prison/upper) @@ -54594,12 +47724,8 @@ /obj/machinery/door/airlock{ name = "Law Office" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -54612,12 +47738,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "jgo" = ( @@ -54627,9 +47749,7 @@ /obj/machinery/power/terminal, /obj/structure/cable, /obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -54661,7 +47781,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/structure/railing/corner/end/flip{ +/obj/structure/railing/corner/end{ dir = 4 }, /turf/open/floor/iron, @@ -54676,9 +47796,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/green, /area/station/service/abandoned_gambling_den) "jha" = ( @@ -54692,17 +47810,9 @@ /obj/structure/railing{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/common/cryopods) "jhk" = ( @@ -54710,9 +47820,7 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) "jho" = ( @@ -54731,12 +47839,8 @@ /area/station/medical/virology/isolation) "jhw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -54747,28 +47851,13 @@ /area/station/engineering/supermatter/room) "jhF" = ( /obj/effect/spawner/random/trash/cigbutt, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/department/medical) -"jhI" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "jhL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /mob/living/simple_animal/bot/secbot{ name = "Officer Beats-The-Kobold" }, @@ -54805,8 +47894,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/medical) "jhW" = ( @@ -54872,11 +47961,11 @@ dir = 8 }, /obj/structure/sign/poster/contraband/secborg_vale/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/purple, /area/station/common/night_club/back_stage) "jiF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "jiS" = ( @@ -54911,22 +48000,20 @@ "jiV" = ( /obj/item/reagent_containers/cup/bucket/wooden, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/barber/spa) "jiZ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "jjb" = ( /obj/structure/railing, /obj/effect/spawner/random/trash/graffiti, /turf/closed/wall/rust, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "jjf" = ( /obj/item/kirbyplants/random, /obj/machinery/camera/directional/east{ @@ -54939,12 +48026,8 @@ /area/station/hallway/primary/central/aft) "jjg" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/department/engineering/atmos_aux_port) "jjm" = ( @@ -54964,9 +48047,6 @@ /obj/item/reagent_containers/cup/glass/coffee{ pixel_x = -7 }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/plating, /area/station/maintenance/central) "jjr" = ( @@ -54984,8 +48064,8 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/aft) "jju" = ( @@ -55011,9 +48091,7 @@ dir = 4 }, /obj/effect/turf_decal/tile/yellow, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/chemistry) "jjG" = ( @@ -55059,12 +48137,8 @@ /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/central) "jkr" = ( @@ -55072,35 +48146,20 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/directional/west, /turf/open/floor/iron/white, /area/station/science/xenobiology) "jku" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/effect/spawner/random/trash/cigbutt, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "jkx" = ( /obj/structure/disposalpipe/segment{ @@ -55124,31 +48183,6 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) -"jkF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/turf/open/floor/iron/white, -/area/station/science/research) -"jkJ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "jkO" = ( /obj/structure/chair/sofa/bench/left{ dir = 8; @@ -55171,18 +48205,14 @@ /obj/effect/turf_decal/siding/wood{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/cafeteria) "jkZ" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/assistant, /turf/open/floor/carpet, /area/station/common/tailoring) @@ -55206,8 +48236,8 @@ icon_state = "dirt-flat-1" }, /obj/item/cigbutt, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "jlt" = ( @@ -55327,8 +48357,8 @@ /area/station/command/heads_quarters/ce) "jmn" = ( /obj/machinery/door/airlock/maintenance, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/aft/upper) @@ -55348,8 +48378,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) "jmH" = ( @@ -55386,20 +48416,14 @@ /area/station/security/prison/mess) "jmT" = ( /obj/effect/landmark/start/blueshield, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/command/heads_quarters/blueshield) "jmZ" = ( /obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -55414,8 +48438,8 @@ /area/station/engineering/atmos) "jnd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/red/half{ dir = 1 }, @@ -55448,15 +48472,10 @@ icon_state = "dirt-flat-1" }, /obj/item/cigbutt, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/mapping_helpers/broken_floor, -/obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "jnr" = ( @@ -55523,28 +48542,14 @@ /turf/open/floor/iron, /area/station/science/circuits) "jnR" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/ai_slipper{ uses = 10 }, /obj/effect/turf_decal/bot_white, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload_foyer) "jnW" = ( /obj/effect/spawner/structure/window/reinforced, @@ -55565,12 +48570,8 @@ "joe" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/wood, @@ -55642,19 +48643,6 @@ }, /turf/open/floor/iron/checker, /area/station/service/janitor) -"joG" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "joK" = ( /obj/machinery/light/small/directional/west, /obj/machinery/power/port_gen/pacman/pre_loaded, @@ -55669,8 +48657,8 @@ "joN" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/central) "joU" = ( @@ -55701,7 +48689,6 @@ /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/closet/radiation, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes, /obj/item/clothing/glasses/meson, /obj/machinery/light/directional/north, /obj/machinery/status_display/evac/directional/north, @@ -55727,24 +48714,16 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/port/aft) "jpA" = ( /obj/structure/railing{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs, /area/station/security/execution/transfer) "jpC" = ( @@ -55779,16 +48758,10 @@ /area/station/commons/dorms/room1) "jpR" = ( /obj/structure/railing, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 8 - }, /obj/effect/landmark/start/head_of_security, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "jpY" = ( @@ -55853,11 +48826,6 @@ /obj/effect/decal/remains/human, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"jqu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/department/engineering/lesser) "jqx" = ( /obj/machinery/vending/cigarette, /turf/open/floor/carpet/purple, @@ -55868,12 +48836,8 @@ /area/station/common/arcade) "jqC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/aft/upper) "jqG" = ( @@ -55885,7 +48849,6 @@ /area/station/security/execution/education) "jqJ" = ( /obj/machinery/disposal/bin, -/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/tile/blue{ dir = 4 }, @@ -55928,23 +48891,10 @@ }, /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/medical/morgue) -"jqZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/courtroom) "jrg" = ( /obj/machinery/door/airlock/medical{ name = "Psychologist's Office" @@ -55954,12 +48904,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/medical/psychology, /turf/open/floor/wood, /area/station/medical/psychology) @@ -55985,15 +48931,11 @@ "jrw" = ( /obj/effect/turf_decal/bot, /obj/machinery/airalarm/directional/west, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ +/obj/structure/closet/secure_closet/security/cargo, +/obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 }, -/obj/machinery/camera/directional/east{ - c_tag = "Security Post - Cargo"; - dir = 8 - }, -/obj/structure/closet/secure_closet/security/cargo, +/obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -56010,38 +48952,20 @@ "jrA" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/engineering/atmos_aux_port) -"jrB" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Central Hallway" - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/hallway/primary/port) "jrG" = ( /obj/effect/turf_decal/siding/wood{ dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/common/night_club) "jrH" = ( /obj/effect/turf_decal/stripes/end{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit, /area/station/command/gateway) "jrJ" = ( @@ -56052,13 +48976,12 @@ name = "Cell 1"; req_access = list("security") }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/vg_decals/numbers/one, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -56099,16 +49022,6 @@ /obj/machinery/light/small/broken/directional/west, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"jrZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/wood, -/area/station/hallway/primary/port) "jsd" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -56188,12 +49101,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/freezer, /area/station/maintenance/abandon_kitchen_upper) "jsO" = ( @@ -56212,14 +49121,11 @@ /turf/open/floor/iron/dark, /area/station/tcommsat/computer) "jsX" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "jtc" = ( @@ -56252,10 +49158,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "jtu" = ( -/obj/effect/turf_decal/delivery/white{ - color = "#00ff00"; - name = "green" - }, /obj/machinery/light/directional/west, /obj/machinery/cryopod{ dir = 4 @@ -56295,15 +49197,6 @@ initial_gas_mix = "TEMP=2.7" }, /area/station/science/ordnance/bomb) -"jtN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white/textured, -/area/station/medical/aslyum) "jtO" = ( /obj/structure/closet/crate, /obj/effect/spawner/random/entertainment/money, @@ -56327,27 +49220,6 @@ }, /turf/open/floor/iron, /area/station/cargo/office) -"jtX" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/research) -"jtY" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/dark, -/area/station/security/brig) "jub" = ( /obj/machinery/airalarm/directional/west, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -56373,10 +49245,6 @@ /turf/open/floor/wood, /area/station/medical/psychology) "jun" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /turf/open/floor/iron, /area/station/command/captain_dining) "juo" = ( @@ -56384,17 +49252,10 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/medical) -"juz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "juD" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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) "juE" = ( @@ -56408,12 +49269,8 @@ /turf/closed/wall, /area/station/security/checkpoint) "juG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -56424,17 +49281,15 @@ /area/station/common/locker_room_shower) "juQ" = ( /obj/structure/filingcabinet/chestdrawer, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, /obj/machinery/status_display/evac/directional/north, /obj/structure/disposalpipe/segment{ dir = 10 }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/security/interrogation) "juT" = ( @@ -56452,8 +49307,8 @@ "juW" = ( /obj/effect/turf_decal/trimline/blue/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -56503,9 +49358,6 @@ /turf/open/floor/iron/dark/small, /area/station/cargo/miningdock) "jvs" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, @@ -56540,15 +49392,6 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) -"jvJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/security/prison/upper) "jvL" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 4 @@ -56561,10 +49404,9 @@ /area/space/nearstation) "jvQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron, /area/station/security/execution/transfer) "jvV" = ( @@ -56663,9 +49505,7 @@ "jwV" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/checkpoint/customs/auxiliary) "jwX" = ( @@ -56695,12 +49535,8 @@ /area/station/maintenance/department/science/ordnance_maint) "jxk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) "jxl" = ( @@ -56717,17 +49553,15 @@ /area/station/security/prison/safe) "jxq" = ( /obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, /turf/open/floor/carpet, /area/station/service/library) "jxr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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) "jxs" = ( @@ -56740,9 +49574,7 @@ /area/station/command/heads_quarters/qm) "jxv" = ( /obj/structure/fluff/fokoff_sign, -/turf/open/floor/glass/reinforced{ - initial_gas_mix = "TEMP=2.7" - }, +/turf/open/floor/glass/reinforced/airless, /area/space/nearstation) "jxx" = ( /obj/effect/turf_decal/tile/neutral{ @@ -56771,13 +49603,12 @@ dir = 1 }, /obj/machinery/vending/coffee, -/obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron/dark/side{ dir = 9 }, /area/station/hallway/primary/port) "jxF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -56795,9 +49626,7 @@ "jxT" = ( /obj/structure/marker_beacon/burgundy, /obj/effect/turf_decal/trimline/white, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "jya" = ( /obj/structure/frame/computer{ @@ -56817,9 +49646,6 @@ pixel_y = 7 }, /obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/engineering/break_room) "jyo" = ( @@ -56837,8 +49663,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/medical/central) "jyx" = ( @@ -56887,6 +49713,11 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/engine_smes) +"jzb" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/shuttle/evac/airless, +/area/space/nearstation) "jze" = ( /obj/structure/window/spawner/directional/north, /obj/structure/window/spawner/directional/west, @@ -56900,9 +49731,7 @@ /area/station/medical/aslyum) "jzh" = ( /obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/large, /area/station/cargo/lobby) "jzj" = ( @@ -56913,9 +49742,7 @@ dir = 1 }, /obj/effect/turf_decal/tile/yellow, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/break_room) @@ -56971,9 +49798,7 @@ /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) "jzJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/library/private) "jzZ" = ( @@ -57075,8 +49900,8 @@ }, /obj/effect/turf_decal/trimline/purple/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/science/research, /obj/effect/mapping_helpers/airlock/abandoned, @@ -57148,12 +49973,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -57168,15 +49989,15 @@ name = "Lockdown" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/upper) "jBI" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/checker, /area/station/hallway/secondary/service) "jBN" = ( @@ -57213,10 +50034,8 @@ /turf/closed/wall/rust, /area/station/maintenance/starboard/fore) "jBZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/mineral/titanium/tiled/white{ name = "Padded tile" @@ -57240,8 +50059,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/research{ name = "Robotics" }, @@ -57295,7 +50114,7 @@ dir = 1 }, /obj/effect/turf_decal/stripes, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/command/secure_bunker) "jCN" = ( @@ -57310,10 +50129,6 @@ /turf/open/floor/cult, /area/station/maintenance/cult_chapel_maint) "jCZ" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, @@ -57392,40 +50207,25 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology/isolation) "jDB" = ( /obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/circuit/red, /area/station/science/robotics/mechbay) "jDE" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_edge{ dir = 8 }, @@ -57441,12 +50241,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -57454,14 +50250,7 @@ /area/station/maintenance/department/medical/central) "jDU" = ( /obj/structure/rack, -/obj/effect/turf_decal/bot, /obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -57473,8 +50262,8 @@ /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/service) "jEg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/port) "jEk" = ( @@ -57495,17 +50284,25 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "jEs" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/stairs{ dir = 4 }, /area/station/cargo/miningoffice) +"jEw" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/cell_charger_multi/wall_mounted/directional/west, +/obj/structure/table, +/obj/item/circuitboard/computer/mech_bay_power_console, +/obj/item/stack/sheet/glass{ + pixel_y = 14 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "jEz" = ( /turf/open/floor/iron/dark, /area/station/security/prison/garden) @@ -57543,7 +50340,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/upper) "jER" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/command/secure_bunker) "jEU" = ( @@ -57563,23 +50360,14 @@ /obj/effect/turf_decal/stripes{ dir = 1 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) -"jFe" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "jFf" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/port/aft) "jFj" = ( @@ -57601,12 +50389,8 @@ c_tag = "Bridge - Command Dining Room"; name = "command camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -57630,12 +50414,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/medical/psychology) "jFw" = ( @@ -57650,7 +50430,7 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/teleporter) "jFE" = ( @@ -57666,10 +50446,6 @@ /turf/open/floor/iron, /area/station/science/ordnance/testlab) "jFN" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, /obj/item/radio/intercom/directional/north, /obj/structure/disposalpipe/segment{ @@ -57689,7 +50465,6 @@ /turf/open/floor/iron/dark, /area/station/command/heads_quarters/blueshield) "jGa" = ( -/obj/effect/turf_decal/bot, /obj/effect/turf_decal/loading_area, /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/iron/dark, @@ -57736,15 +50511,15 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/navigate_destination, /turf/open/floor/iron, /area/station/engineering/lobby) "jGA" = ( /obj/structure/table/glass, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/dryer{ dir = 4; pixel_x = -6; @@ -57752,18 +50527,6 @@ }, /turf/open/floor/carpet/black, /area/station/service/barber) -"jGL" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "jGS" = ( /obj/structure/chair/comfy/beige, /obj/effect/landmark/start/psychologist, @@ -57786,9 +50549,10 @@ /area/station/maintenance/fore/upper) "jHd" = ( /obj/machinery/door/airlock/security{ - name = "Isolation Cell 1" + name = "Isolation Cell 1"; + id_tag = "IsolationCell_1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark, /area/station/security/prison/safe) @@ -57811,16 +50575,6 @@ "jHh" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/table, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple, /obj/machinery/fax{ fax_name = "Research Division"; name = "Research Division Fax Machine"; @@ -57848,12 +50602,8 @@ }, /obj/structure/cable, /obj/structure/extinguisher_cabinet/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/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/research) "jHD" = ( @@ -57932,12 +50682,8 @@ /turf/open/floor/iron/dark, /area/station/service/power_station) "jIf" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/dark/side{ dir = 8 @@ -57988,23 +50734,18 @@ /area/station/science/research) "jIV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing/corner{ dir = 8 }, /turf/open/floor/iron, /area/station/commons/dorms) "jIX" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/space_heater, -/obj/machinery/light/small/broken/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/department/chapel) +/obj/machinery/vending/coffee, +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) "jJb" = ( /obj/effect/spawner/random/trash/graffiti, /turf/closed/wall, @@ -58030,18 +50771,9 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "jJl" = ( -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, /obj/structure/statue/silver/sec, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 8 +/obj/effect/turf_decal/tile/red/real_red/anticorner/contrasted{ + dir = 1 }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) @@ -58088,12 +50820,8 @@ /turf/open/floor/iron, /area/station/hallway/primary/starboard) "jJJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/eighties/red, /area/station/common/arcade) "jJK" = ( @@ -58109,19 +50837,6 @@ }, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) -"jJT" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/maintenance/aft/upper) "jJU" = ( /turf/closed/wall/r_wall, /area/station/engineering/supermatter/room) @@ -58164,12 +50879,8 @@ /area/station/maintenance/aft/upper) "jKw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/blue/line{ dir = 8 }, @@ -58178,8 +50889,8 @@ /area/station/medical/treatment_center) "jKx" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -58192,25 +50903,14 @@ }, /turf/open/floor/engine/hull/reinforced, /area/space/nearstation) -"jKJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "jKM" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/effect/landmark/start/bartender, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) "jKP" = ( @@ -58218,8 +50918,8 @@ /area/station/common/gaskiosk) "jKU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/sorting/mail{ dir = 1; name = "Kitchen Junction"; @@ -58234,12 +50934,8 @@ name = "Customs Desk" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/security/general, /obj/effect/turf_decal/siding/thinplating_new{ dir = 8 @@ -58283,8 +50979,8 @@ /area/station/security/execution/transfer) "jLp" = ( /obj/structure/barricade/wooden/crude, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/service/hydroponics/garden/abandoned) "jLu" = ( @@ -58295,7 +50991,7 @@ /area/station/common/pool) "jLv" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs, /area/station/medical/cryo) "jLw" = ( @@ -58305,38 +51001,27 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/maintenance/abandon_office) "jLy" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/wood{ dir = 4 }, /turf/open/floor/carpet, /area/station/hallway/primary/port) "jLA" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ +/obj/machinery/newscaster/directional/west, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, -/obj/machinery/newscaster/directional/west, /turf/open/floor/iron, /area/station/commons/storage/primary) "jLC" = ( @@ -58390,7 +51075,7 @@ /obj/machinery/door/morgue{ name = "Confession Booth" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/service/chapel) "jMm" = ( @@ -58398,8 +51083,8 @@ name = "Supermatter Engine Room" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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, /area/station/engineering/supermatter/room) @@ -58409,12 +51094,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/dark, /area/station/maintenance/department/engineering/atmos_aux_port) -"jMq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/science/research) "jMr" = ( /obj/item/cigbutt, /obj/structure/cable, @@ -58436,13 +51115,6 @@ /obj/machinery/computer/security/labor{ dir = 4 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/window/spawner/directional/north, /obj/machinery/newscaster/directional/west, /turf/open/floor/iron/dark, @@ -58495,10 +51167,6 @@ /turf/open/floor/iron/dark/small, /area/station/cargo/storage) "jNf" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, /obj/machinery/door/poddoor/shutters{ id = "qm_warehouse"; name = "Warehouse Shutters" @@ -58556,12 +51224,8 @@ /area/station/science/xenobiology) "jNv" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/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/morgue) "jNx" = ( @@ -58573,29 +51237,20 @@ /obj/effect/turf_decal/stripes{ dir = 1 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "jNE" = ( /obj/machinery/door/airlock/engineering/glass{ name = "Primary Tool Storage" }, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/navigate_destination, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron, /area/station/commons/storage/primary) "jNH" = ( @@ -58668,12 +51323,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -58695,26 +51346,14 @@ /area/station/science/research) "jOn" = ( /obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/light/directional/south, /turf/open/floor/iron/dark, /area/station/security/interrogation) "jOo" = ( /obj/machinery/door/airlock/maintenance, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/service/theater/abandoned) -"jOt" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/smooth, -/area/station/cargo/miningdock) "jOx" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 4 @@ -58723,15 +51362,11 @@ name = "Captains Office Access" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/captain) @@ -58748,9 +51383,7 @@ /area/station/science/breakroom) "jPb" = ( /obj/item/clothing/mask/gas/clown_hat, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "jPe" = ( /obj/structure/table/glass, @@ -58780,8 +51413,8 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "jPi" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/carpet, /area/station/service/theater) @@ -58816,20 +51449,16 @@ /area/station/security/prison/shower) "jPu" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, /area/station/cargo/miningdock) "jPv" = ( /obj/effect/turf_decal/caution/stand_clear/blue, /obj/effect/turf_decal/bot_blue, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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) "jPK" = ( @@ -58847,8 +51476,8 @@ /area/station/commons/fitness/recreation) "jPP" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron/dark/side, @@ -58861,14 +51490,14 @@ /obj/effect/mapping_helpers/airlock/access/all/service/general, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/checker, /area/station/hallway/secondary/service) "jPR" = ( /obj/structure/table, /obj/item/storage/fancy/donut_box, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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) @@ -58900,8 +51529,6 @@ dir = 1 }, /obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/engine, /area/station/science/xenobiology) @@ -58957,9 +51584,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -58994,9 +51619,7 @@ /obj/structure/chair/office{ dir = 8 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "jQV" = ( /obj/machinery/light/small/directional/north, @@ -59010,16 +51633,14 @@ /area/station/hallway/primary/central) "jQY" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/upper) "jQZ" = ( /obj/structure/bed, /obj/item/bedsheet/chaplain, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/royalblack, /area/station/service/chapel/office) "jRa" = ( @@ -59027,12 +51648,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/starboard) @@ -59041,12 +51658,6 @@ /obj/structure/railing/corner, /turf/open/floor/glass/reinforced, /area/station/security/prison/safe) -"jRd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/station/security/prison/upper) "jRe" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -59067,13 +51678,9 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "bridge-west" }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/command/general, /turf/open/floor/iron/dark, /area/station/command/bridge) @@ -59107,9 +51714,6 @@ /turf/open/openspace, /area/station/commons/dorms) "jRB" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, /obj/structure/table/reinforced, /obj/item/stock_parts/scanning_module/adv, /obj/item/stock_parts/scanning_module/adv, @@ -59180,8 +51784,8 @@ network = list("minisat"); start_active = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/aisat_interior) "jSd" = ( @@ -59193,11 +51797,6 @@ }, /turf/open/floor/grass, /area/station/hallway/primary/central) -"jSf" = ( -/obj/structure/closet/secure_closet/engineering_personal, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/station/engineering/break_room) "jSs" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green{ @@ -59222,8 +51821,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -59235,12 +51834,8 @@ }, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "jSI" = ( @@ -59253,13 +51848,6 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/carpet, /area/station/service/chapel) -"jSL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/service/hydroponics/garden/abandoned) "jSR" = ( /obj/structure/trash_pile, /obj/effect/decal/cleanable/dirt{ @@ -59287,9 +51875,7 @@ /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) "jTj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -59308,20 +51894,10 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/hallway/primary/port) -"jTC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "jTD" = ( /obj/effect/turf_decal/trimline/blue, /obj/item/toy/basketball, @@ -59344,13 +51920,12 @@ name = "Cell 4"; req_access = list("security") }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/vg_decals/numbers/four, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/vg_decals/numbers/four, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -59429,12 +52004,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/fore/upper) @@ -59484,16 +52055,12 @@ /area/station/security/prison/safe) "jUF" = ( /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/large, /area/station/cargo/lobby) "jUM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -59501,22 +52068,16 @@ /turf/open/floor/iron, /area/station/common/wrestling/arena) "jUN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison/upper) "jUO" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 }, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -59578,12 +52139,8 @@ "jVm" = ( /obj/structure/cable, /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/upper) "jVo" = ( @@ -59593,8 +52150,8 @@ "jVp" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/main) @@ -59605,26 +52162,16 @@ /obj/structure/railing{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/old, /area/station/engineering/atmos) "jVv" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/dark, +/turf/open/floor/iron, /area/station/security/brig) "jVw" = ( /obj/effect/decal/cleanable/dirt{ @@ -59650,12 +52197,8 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/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/medical/medbay/central) "jVB" = ( @@ -59669,12 +52212,8 @@ /area/station/command/heads_quarters/hos) "jVI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -59741,21 +52280,13 @@ }, /obj/item/tank/jetpack/carbondioxide, /obj/structure/rack, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/engineering/break_room) "jWg" = ( /obj/structure/window/reinforced/tinted/spawner/directional/west, /obj/item/kirbyplants/random, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/common/night_club) "jWh" = ( @@ -59788,9 +52319,7 @@ dir = 1 }, /obj/effect/landmark/start/paramedic, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/storage) "jWp" = ( @@ -59809,9 +52338,7 @@ /obj/structure/disposalpipe/segment{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/xenobiology) "jWA" = ( @@ -59830,6 +52357,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, +/obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage) "jWJ" = ( @@ -59848,33 +52376,19 @@ }, /area/station/security/prison/visit) "jXa" = ( -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; +/obj/machinery/computer/records/medical{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, -/obj/machinery/computer/records/medical{ +/obj/effect/turf_decal/tile/red/real_red/anticorner/contrasted{ dir = 8 }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "jXA" = ( -/obj/effect/turf_decal/trimline/white/filled/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/white/filled/corner{ - dir = 8 - }, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "jXB" = ( @@ -59887,9 +52401,6 @@ "jXG" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/loading_area/white{ - dir = 1 - }, /obj/structure/cable, /obj/machinery/door/poddoor/shutters/window/preopen{ id = "ArrivalsEntry2"; @@ -59898,19 +52409,14 @@ /obj/machinery/door/airlock/public/glass{ name = "Arrivals" }, -/obj/effect/turf_decal/siding/thinplating_new{ +/obj/effect/turf_decal/arrows/white{ dir = 1 }, -/obj/effect/turf_decal/siding/thinplating_new, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) "jXI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -59941,8 +52447,8 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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) "jXV" = ( @@ -59954,15 +52460,6 @@ dir = 8 }, /area/station/security/prison) -"jYb" = ( -/obj/machinery/status_display/evac/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/hallway/primary/port) "jYd" = ( /obj/structure/closet/crate/large, /obj/effect/spawner/random/maintenance/two, @@ -60016,9 +52513,7 @@ /obj/machinery/atmospherics/components/binary/valve/digital{ dir = 4 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "jYt" = ( /obj/effect/spawner/structure/window/reinforced, @@ -60031,20 +52526,6 @@ "jYy" = ( /turf/open/openspace, /area/station/maintenance/port/upper) -"jYB" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/medical/surgery/theatre) -"jYD" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/engineering/storage_shared) "jYG" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/delivery, @@ -60059,21 +52540,13 @@ /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/aft) "jYJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/security/prison/work) @@ -60087,9 +52560,6 @@ /turf/open/floor/plating, /area/station/command/heads_quarters/hop) "jYQ" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/table/reinforced, /obj/item/storage/belt/utility, /obj/item/storage/belt/utility, @@ -60108,16 +52578,6 @@ "jYX" = ( /turf/open/floor/iron/white, /area/station/science/research) -"jYZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/command/bridge) "jZa" = ( /obj/machinery/light/small/broken/directional/west, /obj/effect/decal/cleanable/dirt{ @@ -60135,12 +52595,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/public/glass{ name = "West RnD Wing" }, @@ -60179,9 +52635,7 @@ /turf/open/floor/wood, /area/station/service/bar/atrium) "jZq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 6 }, @@ -60258,12 +52712,11 @@ /turf/open/floor/wood, /area/station/service/kitchen/diner) "jZK" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/door/firedoor, /obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "jZN" = ( @@ -60277,12 +52730,6 @@ }, /area/station/security/prison/visit) "jZP" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, @@ -60322,20 +52769,14 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/security/prison) "kau" = ( /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -60359,15 +52800,9 @@ /area/station/command/heads_quarters/rd) "kba" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, /area/station/science/ordnance) "kbe" = ( /obj/structure/dresser, @@ -60383,12 +52818,8 @@ /turf/open/floor/mineral/plastitanium/red, /area/station/maintenance/cult_chapel_maint) "kbs" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -60434,12 +52865,8 @@ /area/station/science) "kbZ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/wood{ dir = 1 }, @@ -60452,12 +52879,8 @@ /area/station/commons/toilet/auxiliary) "kci" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/service/chapel) @@ -60480,15 +52903,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/common/laser_tag) -"kcK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/eighties/red, -/area/station/common/arcade) "kcM" = ( /obj/effect/turf_decal/siding/wood{ dir = 5 @@ -60502,11 +52916,11 @@ /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "kcQ" = ( -/obj/item/kirbyplants/random, /obj/effect/turf_decal/siding/thinplating_new{ dir = 1 }, /obj/structure/sign/departments/restroom/directional/south, +/obj/item/kirbyplants/random, /turf/open/floor/iron/dark, /area/station/hallway/primary/port) "kcR" = ( @@ -60522,7 +52936,7 @@ /obj/effect/landmark/start/bitrunner, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/small, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "kcW" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 9 @@ -60535,9 +52949,7 @@ "kcZ" = ( /obj/effect/turf_decal/bot, /obj/structure/liquid_pump, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -60570,8 +52982,8 @@ }, /obj/effect/turf_decal/trimline/purple/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/science/genetics, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -60596,9 +53008,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "kdO" = ( /obj/machinery/light/directional/west, @@ -60648,10 +53058,9 @@ "key" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -60681,12 +53090,8 @@ /area/station/hallway/secondary/command) "keK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -60704,12 +53109,8 @@ }, /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/plasticflaps/opaque, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/security/checkpoint) "keT" = ( @@ -60772,37 +53173,21 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"kfq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/maintenance/department/engineering/atmos_aux_port) "kft" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/table, /obj/machinery/airalarm/directional/east, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, -/turf/open/floor/engine{ - icon_state = "floor" +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnanceburn" }, -/area/station/science/ordnance/burnchamber) +/turf/open/floor/iron, +/area/station/science/ordnance) "kfv" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -60827,12 +53212,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/aft/upper) "kfD" = ( @@ -60886,12 +53267,8 @@ }, /obj/item/cigbutt, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/plating, /area/station/maintenance/department/medical/morgue) @@ -60902,10 +53279,6 @@ /area/station/engineering/atmos/test_chambers) "kfW" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/disposalpipe/segment, /obj/machinery/light/directional/west, /turf/open/floor/iron/dark/side{ @@ -60933,8 +53306,8 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/cargo/sorting) "kgf" = ( @@ -60948,8 +53321,8 @@ /area/station/service/chapel) "kgh" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/red{ dir = 8 }, @@ -60971,8 +53344,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/plating, @@ -60989,8 +53362,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/chemistry) "kgr" = ( @@ -61005,33 +53378,11 @@ pixel_y = 5 }, /obj/machinery/status_display/ai/directional/north, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"kgs" = ( -/obj/structure/railing/corner/end/flip{ - dir = 1 - }, -/obj/structure/railing/corner/end{ - dir = 1 - }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "kgt" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, /obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "kgv" = ( @@ -61074,20 +53425,9 @@ }, /turf/open/floor/iron/dark, /area/station/security/prison/mess) -"kgJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "kgO" = ( /obj/effect/turf_decal/delivery, /obj/structure/closet/secure_closet/engineering_welding, -/obj/effect/turf_decal/stripes, /turf/open/floor/iron/dark, /area/station/engineering/main) "kgQ" = ( @@ -61100,8 +53440,8 @@ id_tag = "HoPdoor"; name = "Head Of Personel's Office" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/command/hop, /obj/machinery/duct, /turf/open/floor/wood, @@ -61140,12 +53480,8 @@ dir = 4 }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -61174,8 +53510,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/wood, @@ -61203,9 +53539,7 @@ /area/station/science/research) "khA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -61252,10 +53586,8 @@ /area/station/service/hydroponics/garden/abandoned) "khN" = ( /obj/structure/table, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/commons/dorms) "khO" = ( @@ -61295,24 +53627,11 @@ /obj/structure/grille, /turf/open/floor/plating, /area/station/maintenance/department/security/greater) -"khZ" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/stripes/blue/line{ - dir = 4 - }, -/obj/structure/closet/secure_closet/personal, -/turf/open/floor/iron/dark, -/area/station/security/lockers) "kib" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/supermatter/room) @@ -61340,15 +53659,6 @@ }, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) -"kim" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/station/security/courtroom) "kir" = ( /obj/structure/cable, /obj/machinery/duct, @@ -61359,15 +53669,6 @@ /obj/machinery/vending/wardrobe/coroner_wardrobe, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"kiI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/science/research) "kiL" = ( /obj/machinery/door/airlock/engineering{ name = "Starboard Aft Solar Access" @@ -61422,12 +53723,8 @@ name = "Locker Room" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/dark, /area/station/common/locker_room_shower) @@ -61473,13 +53770,6 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "kjL" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/segment, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall8"; @@ -61498,12 +53788,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) "kkf" = ( @@ -61514,8 +53800,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/upper) "kkg" = ( @@ -61524,16 +53810,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"kkh" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/science/research) "kkv" = ( /obj/machinery/door/airlock/bathroom{ name = "Restroom" @@ -61551,26 +53827,21 @@ /turf/open/floor/wood/parquet, /area/station/service/theater) "kky" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/circuit/red, /area/station/science/robotics/mechbay) "kkC" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/comfy/brown{ dir = 4 }, /obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/prison/mess) "kkD" = ( @@ -61614,12 +53885,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/department/medical) "klh" = ( @@ -61654,8 +53921,8 @@ "klB" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/wood, /area/station/command/heads_quarters/captain/private) @@ -61672,12 +53939,8 @@ /turf/open/floor/iron/solarpanel/airless, /area/station/solars/starboard/aft) "klV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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/side{ @@ -61705,7 +53968,6 @@ /turf/open/floor/iron/dark, /area/station/service/library/printer) "kmb" = ( -/obj/effect/turf_decal/stripes, /obj/structure/table/reinforced, /obj/item/stock_parts/cell/high, /obj/item/stock_parts/cell/high, @@ -61717,12 +53979,8 @@ /area/station/engineering/storage/tech) "kmc" = ( /obj/effect/spawner/random/maintenance, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/crew_quarters/dorms) "kmg" = ( @@ -61744,10 +54002,8 @@ /area/station/science/research) "kmi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, /area/station/command/secure_bunker) "kmj" = ( @@ -61771,8 +54027,8 @@ "kml" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/port/aft) "kmq" = ( @@ -61793,12 +54049,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) "kms" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/side{ dir = 8 }, @@ -61822,12 +54074,8 @@ /area/station/maintenance/department/engineering/atmos_aux_port) "kmG" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark/side{ dir = 4 @@ -61867,12 +54115,8 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -61888,12 +54132,8 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -61901,16 +54141,13 @@ /area/station/science/ordnance/storage) "knm" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, /obj/structure/closet/secure_closet/brig{ id = "cargocell"; name = "Cargo Cell Locker" }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -61922,12 +54159,8 @@ /area/station/security/prison/upper) "kno" = ( /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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, @@ -61947,12 +54180,8 @@ /area/station/service/chapel) "knw" = ( /obj/effect/turf_decal/trimline/purple/filled/line, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -61992,11 +54221,6 @@ }, /turf/open/floor/iron, /area/station/science/research) -"knD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/security/brig) "knM" = ( /obj/effect/turf_decal/tile/neutral, /obj/structure/extinguisher_cabinet/directional/east, @@ -62018,7 +54242,7 @@ /area/station/hallway/secondary/command) "knV" = ( /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/airalarm/directional/west, /turf/open/floor/iron, /area/station/security/prison/visit) @@ -62036,9 +54260,6 @@ /area/station/hallway/primary/central) "koc" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/structure/rack, /obj/item/stack/cable_coil, /obj/item/stack/cable_coil, @@ -62052,17 +54273,8 @@ /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/reagent_dispensers/water_cooler, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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) "kox" = ( @@ -62108,31 +54320,6 @@ dir = 1 }, /area/station/hallway/primary/starboard) -"koL" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/port) -"koW" = ( -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 6 - }, -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 10 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/virology) "kpo" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/west, @@ -62145,8 +54332,8 @@ /area/station/security/prison/garden) "kpz" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall7"; location = "hall6" @@ -62165,9 +54352,7 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/xenobiology) "kpP" = ( @@ -62187,12 +54372,8 @@ name = "Blueshield's Equipment Room" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/command/captain, /turf/open/floor/wood, /area/station/command/heads_quarters/blueshield) @@ -62269,19 +54450,6 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "kqo" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/structure/bed, /obj/item/bedsheet/clown, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -62350,12 +54518,8 @@ /area/space/nearstation) "kqL" = ( /obj/structure/sign/poster/party_game/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) "kqU" = ( @@ -62387,9 +54551,7 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "krl" = ( /obj/effect/turf_decal/stripes/line, @@ -62413,12 +54575,8 @@ /turf/open/floor/iron, /area/station/command/heads_quarters/rd) "krt" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/lockers) "kru" = ( @@ -62457,8 +54615,8 @@ /area/station/common/wrestling/arena) "krU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "krV" = ( @@ -62473,14 +54631,14 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) "ksj" = ( /obj/effect/turf_decal/stripes, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white/side{ dir = 1 @@ -62501,18 +54659,6 @@ dir = 1 }, /area/station/security/warden) -"ksp" = ( -/obj/structure/chair/plastic{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/landmark/start/scientist, -/turf/open/floor/iron/white/side{ - dir = 1 - }, -/area/station/science/research) "kss" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -62530,10 +54676,8 @@ /area/station/medical/exam_room) "ksu" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/ai_monitored/turret_protected/aisat/hallway) "ksx" = ( @@ -62561,12 +54705,15 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/central) "ksK" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" +/obj/machinery/door/airlock{ + id_tag = "commissarydoor"; + name = "Forge" }, -/turf/open/floor/plating, -/area/station/maintenance/salon/lower) +/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/dark, +/area/station/service/forge) "ksM" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -62583,7 +54730,6 @@ /turf/open/floor/iron, /area/station/security/checkpoint/science/research) "ksV" = ( -/obj/effect/turf_decal/tile/red, /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -62598,12 +54744,8 @@ /area/station/maintenance/department/science/lower) "ktc" = ( /obj/effect/spawner/random/trash/moisture_trap, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/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/department/medical) "ktl" = ( @@ -62616,9 +54758,6 @@ /turf/open/floor/iron, /area/station/hallway/primary/starboard) "kts" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -62667,12 +54806,8 @@ /area/station/maintenance/department/medical/central) "ktK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -62683,10 +54818,6 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "ktQ" = ( -/obj/effect/turf_decal/delivery/white{ - color = "#00ff00"; - name = "green" - }, /obj/machinery/cryopod{ dir = 4 }, @@ -62729,7 +54860,7 @@ name = "Service Power Station" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/open/floor/plating, /area/station/service/power_station) @@ -62741,15 +54872,6 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/night_club) -"kuj" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "kus" = ( /obj/structure/table/wood, /obj/item/paper_bin{ @@ -62762,8 +54884,8 @@ /area/station/command/heads_quarters/hop) "kut" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/security/prison/garden) @@ -62824,59 +54946,20 @@ pixel_x = -3; pixel_y = -4 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, -/area/station/science/ordnance/testlab) -"kuR" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /turf/open/floor/iron/dark, -/area/station/security/brig) -"kuS" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/dorms) -"kuV" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/engine{ - icon_state = "floor" - }, -/area/station/science/ordnance) +/area/station/science/ordnance/testlab) "kvp" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 4 }, /turf/open/floor/iron/white, /area/station/science/research) "kvs" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron/dark, /area/station/service/chapel/office) @@ -62889,9 +54972,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/aft) "kvx" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/science/auxlab/firing_range) @@ -62908,8 +54989,8 @@ id_tag = "HoPdoor"; name = "Head of Personel's Quarters" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/command/hop, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) @@ -62921,20 +55002,14 @@ }, /area/station/hallway/primary/central/aft) "kvQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/interrogation) "kvR" = ( /obj/structure/table, /obj/item/plate, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) "kvS" = ( @@ -62956,9 +55031,7 @@ /area/station/service/chapel/office) "kvY" = ( /mob/living/simple_animal/bot/floorbot, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) @@ -62987,13 +55060,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating/airless, /area/station/maintenance/port/upper) -"kwm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/dark, -/area/station/security/brig) "kwo" = ( /obj/effect/turf_decal/tile/neutral, /obj/machinery/light/directional/east, @@ -63018,8 +55084,8 @@ name = "Service Supply Closet" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/service) "kwu" = ( @@ -63030,9 +55096,7 @@ /obj/machinery/airalarm/directional/north{ pixel_y = 22 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/xenobiology/control) "kwv" = ( @@ -63042,12 +55106,8 @@ /turf/open/floor/carpet/purple, /area/station/commons/dorms/room4) "kww" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/medical/medbay/central) "kwB" = ( @@ -63074,22 +55134,16 @@ icon_state = "dirt-flat-1" }, /obj/effect/decal/cleanable/oil/streak, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "kwM" = ( /obj/structure/table/reinforced/rglass, /obj/machinery/cell_charger, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/window/spawner/directional/west, /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, @@ -63117,6 +55171,12 @@ /obj/item/stack/cable_coil/five, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) +"kxe" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "kxk" = ( /obj/structure/chair/comfy/shuttle{ dir = 8 @@ -63126,48 +55186,20 @@ "kxn" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 4 }, /turf/open/floor/iron, /area/station/hallway/secondary/command) "kxq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 4 }, /area/station/command/gateway) -"kxs" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/wood, -/area/station/hallway/primary/port) -"kxv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "kxz" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/iron/smooth_large, @@ -63178,8 +55210,8 @@ }, /obj/effect/turf_decal/trimline/purple/filled/corner, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -63197,12 +55229,8 @@ "kxH" = ( /obj/item/cigbutt, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -63259,21 +55287,14 @@ /obj/effect/turf_decal/stripes{ dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit, /area/station/command/gateway) "kyr" = ( /obj/machinery/computer/records/medical, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/bridge) "kys" = ( @@ -63297,8 +55318,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white/side, /area/station/command/heads_quarters/ce) @@ -63346,8 +55367,8 @@ /area/station/hallway/primary/upper) "kzb" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/sign/poster/contraband/random/directional/east, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -63390,23 +55411,13 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"kzp" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "kzr" = ( /obj/machinery/light/small/directional/east, /turf/open/floor/plating, @@ -63421,22 +55432,12 @@ /turf/open/floor/wood/tile, /area/station/service/bar/atrium) "kzx" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/railing{ dir = 8 }, /obj/machinery/light/directional/north, /obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "kzy" = ( /obj/machinery/light/directional/north, @@ -63445,10 +55446,8 @@ /area/station/service/bar/backroom) "kzz" = ( /obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -63472,19 +55471,18 @@ /obj/structure/window/spawner/directional/north, /obj/structure/table/reinforced, /obj/machinery/computer/security/telescreen/minisat, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) "kzI" = ( /turf/open/floor/iron, /area/station/science/xenobiology) "kzN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/command/meeting_room/council) "kzQ" = ( -/obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes, /obj/machinery/portable_atmospherics/canister/nitrogen, /turf/open/floor/iron/dark, @@ -63498,12 +55496,8 @@ /area/station/construction/mining/aux_base) "kzV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/holopad, /turf/open/floor/iron, /area/station/security/checkpoint/medical) @@ -63524,16 +55518,14 @@ /turf/open/floor/plating, /area/station/security/power_station) "kAh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/security/office) "kAi" = ( /obj/machinery/door/firedoor, /obj/machinery/firealarm/directional/south, -/obj/structure/railing/corner/end/flip{ +/obj/structure/railing/corner/end{ dir = 4 }, /obj/structure/railing/corner/end/flip{ @@ -63550,9 +55542,7 @@ /obj/item/storage/box/deputy{ pixel_y = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/office) "kAn" = ( @@ -63562,12 +55552,8 @@ req_access = list("security") }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/security/checkpoint/escape) "kAp" = ( @@ -63582,7 +55568,7 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "kAy" = ( @@ -63647,12 +55633,6 @@ /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "kBa" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, /obj/structure/cable, /obj/machinery/time_clock/directional/north, /turf/open/floor/iron/dark/textured, @@ -63664,10 +55644,7 @@ /obj/structure/transit_tube/curved/flipped{ dir = 8 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "kBg" = ( /obj/structure/chair/plastic{ @@ -63678,7 +55655,7 @@ /area/station/maintenance/abandon_wrestle) "kBo" = ( /obj/structure/closet/secure_closet/personal, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) @@ -63702,10 +55679,6 @@ /area/station/science/xenobiology/control) "kBG" = ( /obj/structure/fans/tiny/forcefield, -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/light/directional/east, /turf/open/floor/plating, /area/station/cargo/storage) @@ -63733,12 +55706,8 @@ /area/station/service/cafeteria) "kCe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/maintenance/department/engineering/atmos_aux_port) "kCf" = ( @@ -63772,10 +55741,8 @@ pixel_x = -4 }, /obj/item/tank/jetpack/carbondioxide, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) "kCt" = ( @@ -63905,12 +55872,8 @@ }, /obj/structure/cable, /obj/machinery/airalarm/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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, /area/station/commons/dorms) @@ -63922,9 +55885,7 @@ /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/qm) "kDP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light_switch/directional/south, /turf/open/floor/iron, /area/station/maintenance/solars/starboard/fore) @@ -63947,14 +55908,8 @@ /area/station/maintenance/starboard/fore) "kEa" = ( /obj/effect/turf_decal/arrows/white, -/turf/open/floor/iron/dark/small, +/turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) -"kEh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/eighties/red, -/area/station/common/arcade) "kEj" = ( /obj/structure/flora/bush/sparsegrass, /obj/structure/flora/bush/grassy, @@ -63962,12 +55917,8 @@ /obj/structure/window/spawner/directional/south, /obj/structure/window/spawner/directional/north, /obj/structure/window/spawner/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/dorms) "kEr" = ( @@ -63985,9 +55936,7 @@ "kEs" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/effect/landmark/start/paramedic, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/storage) "kEv" = ( @@ -64001,19 +55950,6 @@ pixel_y = -3 }, /obj/item/lipstick/random, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /turf/open/floor/iron, /area/station/maintenance/clown_chamber) "kEw" = ( @@ -64021,8 +55957,8 @@ /obj/structure/statue/sandstone/venus{ layer = 3.1 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 8 }, @@ -64066,20 +56002,19 @@ /obj/machinery/door/airlock/mining{ name = "Mining Office" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, /obj/structure/cable, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/open/floor/iron/dark/small, /area/station/cargo/miningoffice) "kFe" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/engine, /area/station/science/xenobiology) "kFn" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -64089,19 +56024,9 @@ /area/station/maintenance/port/fore) "kFt" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/medical/treatment_center) "kFv" = ( @@ -64125,17 +56050,6 @@ /obj/item/pen, /turf/open/floor/iron/dark, /area/station/security/checkpoint) -"kFC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/research) "kFL" = ( /obj/structure/railing{ dir = 10 @@ -64178,9 +56092,6 @@ /turf/closed/wall, /area/station/command/gateway) "kGm" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/effect/turf_decal/stripes/red/line{ dir = 1 }, @@ -64188,12 +56099,14 @@ /area/station/science/xenobiology) "kGp" = ( /obj/machinery/light/directional/west, -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/table, /obj/machinery/chem_dispenser/drinks{ dir = 4; pixel_y = 2 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) "kGs" = ( @@ -64202,8 +56115,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/science/general, /turf/open/floor/iron/white/side, @@ -64229,30 +56142,21 @@ /turf/open/floor/plating, /area/station/cargo/storage) "kGE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing{ dir = 1 }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) "kGL" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/rack/shelf, /obj/effect/spawner/random/techstorage/engineering_all, /obj/machinery/light/directional/south, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) "kGM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad, /obj/machinery/duct, /turf/open/floor/wood, @@ -64294,12 +56198,9 @@ /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) "kHq" = ( -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "kHt" = ( @@ -64331,17 +56232,6 @@ }, /turf/open/floor/eighties/red, /area/station/common/arcade) -"kHC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "kHF" = ( /obj/effect/spawner/random/trash/moisture_trap, /obj/structure/disposalpipe/segment{ @@ -64362,9 +56252,6 @@ id = "Cell 5"; name = "Cell 5 Locker" }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 10 - }, /obj/machinery/light/small/directional/west, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -64374,12 +56261,8 @@ "kHP" = ( /obj/machinery/power/terminal, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes, /turf/open/floor/iron/dark, /area/station/science/power_station) @@ -64392,14 +56275,6 @@ }, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) -"kHW" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/structure/rack/shelf, -/obj/effect/spawner/random/techstorage/service_all, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tech) "kIi" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -64416,9 +56291,7 @@ /turf/open/floor/iron, /area/station/engineering/storage) "kIp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/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/trimline/green/filled/corner{ @@ -64439,9 +56312,7 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "kIH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison/work) @@ -64466,12 +56337,8 @@ /area/station/command/meeting_room/council) "kIK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/vg_decals/numbers/two, /turf/open/floor/iron, /area/station/hallway/primary/upper) @@ -64481,14 +56348,6 @@ /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"kIX" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/landmark/start/scientist, -/obj/machinery/duct, -/turf/open/floor/wood/parquet, -/area/station/science/breakroom) "kJm" = ( /obj/effect/decal/cleanable/cobweb, /obj/structure/safe/floor{ @@ -64515,12 +56374,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/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/port/fore) "kJB" = ( @@ -64532,12 +56387,6 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"kJK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/science/research) "kJQ" = ( /obj/machinery/modular_computer/preset/command, /turf/open/floor/iron/dark, @@ -64567,8 +56416,8 @@ }, /obj/structure/cable, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -64611,8 +56460,8 @@ /area/station/science/lab) "kKC" = ( /obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/port/fore) "kKD" = ( @@ -64641,12 +56490,8 @@ name = "hallway camera" }, /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/vg_decals/numbers/two, /turf/open/floor/iron, /area/station/commons/dorms) @@ -64715,12 +56560,7 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/science/xenobiology/control) "kLj" = ( @@ -64745,6 +56585,11 @@ }, /turf/open/floor/plating, /area/station/commons/dorms/room5) +"kLq" = ( +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/hallway/primary/port) "kLr" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -64754,7 +56599,6 @@ /area/station/service/hydroponics) "kLy" = ( /obj/machinery/computer/order_console/cook, -/obj/effect/turf_decal/bot, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "kLH" = ( @@ -64762,19 +56606,13 @@ /turf/open/floor/iron, /area/station/hallway/secondary/service) "kLP" = ( -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 9 - }, -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 10 - }, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology) "kLQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -64814,12 +56652,8 @@ icon_state = "dirt-flat-1" }, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/carpet, /area/station/commons/dorms/vacantroom) @@ -64868,8 +56702,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -64914,8 +56748,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, @@ -64928,12 +56762,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) "kNe" = ( @@ -64941,12 +56771,8 @@ name = "Janitorial Closet" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -64967,15 +56793,6 @@ }, /turf/open/floor/wood, /area/station/service/barber) -"kNM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "kNR" = ( /obj/structure/table, /obj/item/folder/red, @@ -65012,8 +56829,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/security/lesser) "kOd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/common/wrestling/arena) @@ -65038,12 +56855,8 @@ }, /obj/machinery/light/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/black, /area/station/service/barber) "kOs" = ( @@ -65079,7 +56892,7 @@ icon_state = "dirt-flat-1" }, /turf/open/floor/iron/dark/small, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "kOB" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -65088,12 +56901,8 @@ /area/station/cargo/miningdock) "kOD" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -65113,8 +56922,8 @@ /area/station/maintenance/port/central) "kPf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/department/medical) "kPg" = ( @@ -65142,9 +56951,7 @@ /turf/open/floor/wood, /area/station/service/library) "kPw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/eighties, /area/station/maintenance/abandon_arcade) "kPx" = ( @@ -65162,22 +56969,12 @@ /turf/open/floor/iron, /area/station/science/breakroom) "kPK" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/coldroom) "kQd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/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 }, @@ -65195,15 +56992,11 @@ /area/station/engineering/atmos) "kQl" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "kQo" = ( @@ -65211,8 +57004,8 @@ name = "Abandoned Storage" }, /obj/effect/mapping_helpers/airlock/abandoned, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/medical/general, /turf/open/floor/iron/white/side{ @@ -65221,10 +57014,8 @@ /area/station/medical/abandoned) "kQp" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall22"; location = "hall21" @@ -65311,12 +57102,8 @@ dir = 10 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/aft) "kQQ" = ( @@ -65327,8 +57114,8 @@ /obj/item/radio/intercom/directional/east, /obj/structure/cable, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -65341,11 +57128,8 @@ /turf/open/floor/carpet, /area/station/common/wrestling/lobby) "kRo" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/item/stack/rods/ten, +/obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/hallway/primary/port) "kRp" = ( @@ -65364,6 +57148,16 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/fore/upper) +"kRw" = ( +/obj/effect/turf_decal/tile/blue/half{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue/half{ + dir = 4 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/dark/smooth_large/airless, +/area/space/nearstation) "kRD" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/disposal/bin, @@ -65397,9 +57191,7 @@ /area/station/commons/storage/primary) "kRU" = ( /obj/item/kirbyplants/organic/plant22, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/security/office) @@ -65411,8 +57203,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/broken_floor, /obj/machinery/duct, @@ -65454,9 +57246,6 @@ /obj/machinery/power/shuttle_engine/heater{ dir = 8 }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /turf/open/floor/plating/airless, /area/space/nearstation) "kSC" = ( @@ -65467,10 +57256,6 @@ dir = 4; id = "garbage" }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/plating, /area/station/maintenance/disposal) @@ -65478,10 +57263,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/structure/sign/poster/random/directional/east, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -65516,9 +57297,7 @@ /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 10 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "kTj" = ( /obj/structure/lattice/catwalk, @@ -65536,12 +57315,8 @@ /area/station/engineering/supermatter) "kTo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "kTq" = ( @@ -65553,21 +57328,11 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/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/port/fore) "kTK" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/camera/directional/south{ c_tag = "Security - Brig Far Port"; dir = 1 @@ -65602,9 +57367,7 @@ /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 4 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "kUv" = ( /obj/machinery/airalarm/directional/north, @@ -65641,9 +57404,7 @@ pixel_y = -4 }, /obj/item/assembly/timer, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "kUL" = ( /obj/structure/trash_pile, @@ -65652,16 +57413,8 @@ /area/station/maintenance/aft/upper) "kUO" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -65687,24 +57440,9 @@ /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) "kVc" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/closet/crate/freezer/blood, /turf/open/floor/iron/white, /area/station/medical/coldroom) -"kVi" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/security/prison/upper) "kVJ" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4 @@ -65721,10 +57459,6 @@ dir = 4 }, /area/station/security/prison/upper) -"kVY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/catwalk_floor, -/area/station/engineering/atmos/test_chambers) "kWb" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/aisat/hallway) @@ -65739,7 +57473,7 @@ dwidth = 2; height = 5; name = "fore bay 1"; - roundstart_template = /datum/map_template/shuttle/labour/skyrat; + roundstart_template = /datum/map_template/shuttle/labour/nova; shuttle_id = "laborcamp_home"; width = 9 }, @@ -65765,8 +57499,8 @@ /obj/structure/extinguisher_cabinet/directional/east{ pixel_x = 34 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs, /area/station/ai_monitored/command/storage/eva) "kWH" = ( @@ -65798,28 +57532,32 @@ /obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/station/maintenance/department/medical) +"kWY" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/right{ + dir = 4 + }, +/obj/item/forging/tongs, +/obj/item/forging/hammer, +/turf/open/floor/iron/dark, +/area/station/service/forge) "kXe" = ( /obj/machinery/door/airlock/security{ name = "Armory" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/security/armory, /turf/open/floor/iron/dark/side, /area/station/ai_monitored/security/armory) "kXl" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, /obj/structure/rack/shelf, /obj/effect/spawner/random/techstorage/medical_all, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) "kXm" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, /obj/structure/rack/shelf, /obj/effect/spawner/random/techstorage/service_all, /turf/open/floor/iron/dark, @@ -65853,9 +57591,7 @@ /area/station/maintenance/starboard/fore) "kXM" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/checkpoint/science/research) "kXP" = ( @@ -65890,12 +57626,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/blue{ dir = 1 }, @@ -65935,12 +57667,8 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "kYk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -65949,12 +57677,6 @@ "kYo" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/table, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/item/folder/red, /obj/item/stamp/denied{ pixel_y = 5 @@ -65998,16 +57720,11 @@ /area/station/science/genetics) "kYB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip{ dir = 1 }, -/obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -66033,12 +57750,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/bar/atrium) "kYZ" = ( @@ -66067,25 +57780,14 @@ }, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"kZh" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/commons/fitness) "kZi" = ( /obj/effect/turf_decal/siding/wideplating/dark, /obj/machinery/door/airlock/grunge{ name = "Nerd Room" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/lounge) "kZk" = ( @@ -66127,12 +57829,8 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "bridge-enterance-west" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/navigate_destination, /obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/machinery/duct, @@ -66142,8 +57840,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/aft/upper) "kZK" = ( @@ -66154,13 +57852,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/dark, /area/station/science/robotics/mechbay) -"kZL" = ( -/obj/effect/spawner/random/trash/mess, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "kZZ" = ( /obj/structure/bed, /obj/item/clothing/suit/jacket/straight_jacket, @@ -66215,7 +57906,7 @@ /obj/structure/railing/corner, /obj/effect/spawner/random/trash/graffiti, /turf/closed/wall/rust, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "laB" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -66229,9 +57920,7 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "laC" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /turf/open/floor/iron/dark, @@ -66279,30 +57968,14 @@ /area/station/engineering/supermatter/room) "laX" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/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/machinery/duct, /turf/open/floor/iron, /area/station/service/hydroponics) -"lbe" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "lbi" = ( /obj/structure/table, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -66338,12 +58011,8 @@ /obj/effect/turf_decal/siding/purple{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -66451,12 +58120,8 @@ /turf/open/floor/grass, /area/station/science/genetics) "lbZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/kitchen, /area/station/service/kitchen/diner) @@ -66478,23 +58143,19 @@ /obj/item/paper_bin{ pixel_y = 3 }, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "lck" = ( /obj/machinery/newscaster/directional/north, /obj/structure/extinguisher_cabinet/directional/east, /obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/machinery/vending/wardrobe/bar_wardrobe, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) "lcm" = ( @@ -66524,8 +58185,8 @@ /obj/structure/window/reinforced/spawner/directional/north, /obj/vehicle/ridden/wheelchair, /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) @@ -66562,26 +58223,18 @@ /area/station/service/library) "lcG" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) "lcJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall6"; location = "hall5" @@ -66607,7 +58260,9 @@ }, /obj/item/reagent_containers/cup/beaker/large, /obj/item/reagent_containers/dropper, -/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "lcO" = ( @@ -66638,26 +58293,22 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/plating, /area/station/maintenance/department/medical) "ldt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/spawner/random/trash/box, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "ldA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/transit_tube) "ldD" = ( @@ -66687,8 +58338,8 @@ }, /obj/effect/mapping_helpers/airlock/access/all/supply/qm, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/qm) "lec" = ( @@ -66711,12 +58362,6 @@ /turf/open/floor/iron/dark, /area/station/science/xenobiology) "leg" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/segment, /obj/machinery/light/directional/east, /turf/open/floor/iron/dark/side{ @@ -66730,12 +58375,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/research) @@ -66747,12 +58386,7 @@ /turf/open/floor/plating, /area/station/engineering/engine_smes) "leo" = ( -/obj/effect/turf_decal/bot, /obj/structure/sink/directional/east, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -66781,9 +58415,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "leA" = ( @@ -66805,13 +58437,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible/layer4{ dir = 4 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "leE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/medical/aslyum) "leF" = ( @@ -66822,12 +58452,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -66841,8 +58467,8 @@ /obj/effect/turf_decal/tile/blue{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/bridge) "leK" = ( @@ -66859,16 +58485,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/wood, /area/station/hallway/primary/port) -"leW" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/science/xenobiology) "lfd" = ( /obj/item/kirbyplants/random, /obj/structure/extinguisher_cabinet/directional/east, @@ -66896,15 +58512,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/service/library/abandoned) -"lfB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/service/hydroponics/garden/abandoned) "lfG" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -66969,7 +58576,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/medical/power_station) "lgi" = ( @@ -66978,24 +58585,16 @@ /obj/structure/window/spawner/directional/north, /turf/open/floor/iron/dark, /area/station/commons/storage/primary) -"lgm" = ( -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) "lgr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, /area/station/commons/dorms/room1) "lgw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/sorting/mail{ dir = 8; name = "Test Lab Junction"; @@ -67010,13 +58609,6 @@ /obj/item/clothing/mask/gas, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"lgL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/duct, -/turf/open/floor/iron/kitchen, -/area/station/security/prison/mess) "lgV" = ( /obj/machinery/shower/directional/west, /obj/machinery/light/small/directional/north, @@ -67032,8 +58624,8 @@ /obj/structure/railing{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/item/cigbutt, /turf/open/openspace, @@ -67067,12 +58659,8 @@ /area/station/ai_monitored/command/storage/eva) "lhl" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs{ dir = 8 }, @@ -67126,7 +58714,7 @@ /obj/structure/railing{ dir = 8 }, -/obj/structure/railing/corner/end/flip{ +/obj/structure/railing/corner/end{ dir = 4 }, /turf/open/floor/iron, @@ -67162,13 +58750,11 @@ /obj/item/crowbar, /obj/item/wrench, /obj/item/radio, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/red, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -67192,12 +58778,8 @@ /obj/machinery/door/airlock/rd{ name = "Research Director's Study" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -67209,23 +58791,10 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/central) -"liS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/central/aft) "liY" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/atmos{ name = "Atmospherics Auxiliary Port" }, @@ -67243,13 +58812,6 @@ /area/station/medical/storage) "ljh" = ( /obj/structure/closet/secure_closet/brig, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/machinery/camera/directional/south{ c_tag = "Security - Brig Port"; dir = 1 @@ -67263,12 +58825,8 @@ }, /obj/structure/extinguisher_cabinet/directional/south, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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, /area/station/commons/dorms) @@ -67277,7 +58835,7 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/item/radio/intercom/directional/west, /turf/open/floor/iron, @@ -67288,12 +58846,6 @@ /turf/open/floor/iron, /area/station/security/warden) "ljx" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/rack/shelf, /obj/machinery/light/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -67320,12 +58872,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/captain_dining) "ljS" = ( @@ -67343,8 +58891,8 @@ /area/station/engineering/supermatter/room) "ljZ" = ( /obj/machinery/airalarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "lkh" = ( @@ -67356,12 +58904,8 @@ /area/station/maintenance/department/medical/central) "lkl" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 1 }, @@ -67377,38 +58921,23 @@ /area/station/security/prison/rec) "lkp" = ( /obj/machinery/airalarm/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/storage/primary) "lkq" = ( /turf/closed/wall, /area/station/maintenance/gag_room) "lkr" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "lkt" = ( /obj/effect/spawner/structure/window/reinforced, @@ -67421,7 +58950,7 @@ /obj/effect/spawner/random/trash/mess, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark/small, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "lky" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/bar/opposingcorners, @@ -67471,8 +59000,8 @@ /obj/effect/turf_decal/siding/wood, /obj/structure/cable, /obj/machinery/airalarm/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/library) "lkY" = ( @@ -67521,22 +59050,24 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "llv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/library) +"llz" = ( +/obj/structure/cable, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/service/bar) "llL" = ( /obj/structure/railing, /turf/open/floor/iron/telecomms, /area/station/tcommsat/server) "llN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -67549,16 +59080,6 @@ /obj/structure/window/reinforced/fulltile, /turf/open/floor/grass, /area/station/hallway/secondary/entry) -"llP" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "llV" = ( /obj/structure/table, /obj/item/reagent_containers/cup/soda_cans/cola{ @@ -67575,10 +59096,8 @@ }, /obj/machinery/newscaster/directional/east, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/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/medbay/lobby) "lmd" = ( @@ -67601,8 +59120,8 @@ name = "Restroom" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/cafeteria, /area/station/commons/toilet/auxiliary) "lmi" = ( @@ -67646,12 +59165,8 @@ /area/space/nearstation) "lmz" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/trimline/green/filled/warning{ dir = 4 }, @@ -67661,16 +59176,6 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/service/hydroponics) -"lmC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/solars/port/fore) "lmE" = ( /obj/machinery/light/directional/south, /turf/open/floor/iron, @@ -67692,8 +59197,8 @@ }, /obj/structure/cable, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/structure/sign/poster/random/directional/west, /obj/machinery/duct, @@ -67703,19 +59208,15 @@ /obj/structure/chair{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/common/wrestling/beverage) "lmV" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/mob/living/simple_animal/bot/cleanbot{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/mob/living/basic/bot/cleanbot{ name = "Sweeps-The-Tiles" }, /turf/open/floor/iron, @@ -67743,12 +59244,8 @@ name = "Cabin 2" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -67785,19 +59282,9 @@ /turf/open/floor/plating, /area/station/medical/medbay/lobby) "lnC" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -67807,14 +59294,11 @@ /turf/closed/wall/rust, /area/station/service/power_station) "lnM" = ( -/turf/open/floor/iron/dark/small, +/turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) "lnW" = ( /obj/effect/turf_decal/bot, /obj/machinery/suit_storage_unit/mining, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/plating, /area/station/cargo/miningoffice) "lnX" = ( @@ -67834,10 +59318,6 @@ /turf/open/floor/carpet/royalblack, /area/station/command/heads_quarters/qm) "lov" = ( -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/machinery/conveyor{ id = "cargoload" }, @@ -67869,10 +59349,7 @@ /area/station/service/bar/backroom) "loJ" = ( /obj/structure/cable, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "loN" = ( /obj/effect/turf_decal/siding/wood, @@ -67880,18 +59357,14 @@ /obj/machinery/door/airlock/ce{ name = "Chief Engineer's Quarters" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/ce, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/wood, /area/station/command/heads_quarters/ce) "loR" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, @@ -67919,8 +59392,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -67940,12 +59413,8 @@ /area/station/maintenance/aft/upper) "lpe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/holopad, /turf/open/floor/iron, @@ -67953,26 +59422,9 @@ "lpf" = ( /turf/closed/wall, /area/station/maintenance/abandon_surgery) -"lpg" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "lpi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall14"; @@ -67986,17 +59438,14 @@ dwidth = 3; height = 5; name = "SS13: Common Mining Dock"; - roundstart_template = /datum/map_template/shuttle/mining_common/skyrat; + roundstart_template = /datum/map_template/shuttle/mining_common/nova; shuttle_id = "commonmining_home"; width = 7 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "lpo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 }, @@ -68011,19 +59460,6 @@ name = "Holodeck Projector Floor" }, /area/station/holodeck/rec_center) -"lpx" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/hallway/primary/port) "lpC" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 4 @@ -68045,46 +59481,18 @@ /obj/machinery/suit_storage_unit/standard_unit, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) -"lpP" = ( -/obj/structure/disposalpipe/trunk{ - dir = 2 - }, -/obj/structure/disposaloutlet{ - dir = 1 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/engine, -/area/station/science/xenobiology) "lpQ" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/science/power_station) "lpR" = ( -/obj/machinery/doppler_array, /obj/effect/turf_decal/bot_red, +/obj/machinery/doppler_array, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) -"lpV" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "lqa" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) "lqf" = ( @@ -68123,12 +59531,6 @@ /obj/structure/chair{ dir = 4 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, @@ -68199,12 +59601,8 @@ /area/station/service/theater/abandoned) "lre" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -68218,9 +59616,6 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "lrf" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, @@ -68256,8 +59651,8 @@ name = "Holodeck" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/side, /area/station/common/arcade) @@ -68283,11 +59678,9 @@ /turf/open/floor/glass/reinforced, /area/station/security/prison/safe) "lrK" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "lrQ" = ( @@ -68312,9 +59705,7 @@ /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ piping_layer = 4 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "lsb" = ( /obj/effect/turf_decal/tile/neutral, @@ -68328,8 +59719,8 @@ dir = 6; name = "hallway camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/commons/dorms) @@ -68397,12 +59788,8 @@ pixel_y = 3 }, /obj/item/camera_film, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -68410,8 +59797,8 @@ /area/station/service/chapel/office) "lsM" = ( /obj/effect/turf_decal/trimline/blue/filled/warning, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -68420,9 +59807,7 @@ /area/station/medical/medbay/central) "lsO" = ( /obj/effect/turf_decal/tile/brown, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/drone_bay) "lsQ" = ( @@ -68464,8 +59849,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/research) "ltv" = ( @@ -68480,23 +59865,16 @@ name = "Service Power Station" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/open/floor/plating, /area/station/service/power_station) "ltF" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /obj/structure/filingcabinet, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 +/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 = 8 @@ -68524,12 +59902,11 @@ /obj/effect/turf_decal/siding/thinplating/dark{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) "ltW" = ( -/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 6 }, @@ -68564,12 +59941,8 @@ dir = 8 }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -68609,16 +59982,9 @@ /obj/structure/railing/corner{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 6 }, @@ -68634,9 +60000,7 @@ /obj/structure/chair/office{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/assistant, /turf/open/floor/wood/parquet, /area/station/common/arcade) @@ -68650,12 +60014,8 @@ /area/station/maintenance/pool_maintenance) "lvb" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -68705,12 +60065,8 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "lvS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/wood/parquet, /area/station/command/heads_quarters/nt_rep) @@ -68724,15 +60080,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"lvW" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "lwb" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold/green/visible, @@ -68743,12 +60090,8 @@ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "lwm" = ( @@ -68777,9 +60120,7 @@ /turf/open/floor/iron, /area/station/commons/fitness) "lwp" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/directional/south, /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, @@ -68813,10 +60154,7 @@ /obj/structure/transit_tube/curved{ dir = 8 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "lwZ" = ( /obj/effect/turf_decal/trimline/purple/filled/warning{ @@ -68825,20 +60163,13 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology) "lxj" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/item/tank/internals/emergency_oxygen/empty, /turf/open/floor/plating, /area/station/maintenance/port/aft) "lxt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -68870,10 +60201,10 @@ /area/space) "lxA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, -/mob/living/simple_animal/bot/medbot{ +/mob/living/basic/bot/medbot{ name = "Healy Stabby" }, /turf/open/floor/iron, @@ -68883,8 +60214,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -68952,9 +60283,7 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "lyP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, /obj/machinery/duct, @@ -68974,10 +60303,6 @@ /turf/open/floor/wood, /area/station/service/bar/atrium) "lyW" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/conveyor_switch/oneway{ dir = 8; id = "garbage"; @@ -69006,10 +60331,8 @@ "lze" = ( /obj/effect/turf_decal/caution/stand_clear/blue, /obj/effect/turf_decal/bot_blue, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/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) "lzn" = ( @@ -69084,12 +60407,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -69099,18 +60418,6 @@ /obj/machinery/vending/boozeomat, /turf/closed/wall, /area/station/command/captain_dining) -"lAb" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/catwalk_floor{ - initial_gas_mix = "TEMP=2.7" - }, -/area/space/nearstation) "lAg" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -69119,12 +60426,8 @@ name = "Maint Kicks" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/poddoor/shutters/preopen{ id = "Clothingstore"; name = "Clothing Store Shutters" @@ -69144,16 +60447,6 @@ /obj/item/gun_maintenance_supplies, /turf/open/floor/plating, /area/station/maintenance/fore/upper) -"lAw" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/wood, -/area/station/hallway/primary/port) "lAC" = ( /obj/structure/railing{ dir = 8 @@ -69164,23 +60457,10 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/glass, /area/station/commons/dorms) -"lAD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/lockers) "lAE" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -69191,47 +60471,31 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - 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, /area/station/science/xenobiology) "lAL" = ( -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, /obj/machinery/computer/prisoner/management{ dir = 4 }, /obj/machinery/light/directional/west, /obj/machinery/newscaster/directional/west, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "lAM" = ( /obj/structure/flora/bush/flowers_pp, /mob/living/carbon/human/species/monkey, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/grass, /area/station/science/genetics) "lAP" = ( /turf/open/floor/carpet, /area/station/service/library) -"lAQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/prison) "lAU" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -69241,14 +60505,6 @@ /turf/open/floor/plating, /area/station/command/heads_quarters/cmo) "lAY" = ( -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 4 - }, /obj/structure/chair{ dir = 1 }, @@ -69256,6 +60512,9 @@ c_tag = "Recreation - Lasertag Lockers"; name = "hallway camera" }, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark/side, /area/station/common/laser_tag) "lAZ" = ( @@ -69284,26 +60543,23 @@ /turf/open/floor/iron/dark, /area/station/command/bridge) "lBj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/security/prison) "lBn" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/structure/chair{ dir = 1 }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark/side, /area/station/common/laser_tag) "lBq" = ( @@ -69339,7 +60595,7 @@ name = "engineering camera" }, /obj/machinery/firealarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/break_room) "lBC" = ( @@ -69347,12 +60603,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/fore/upper) "lBD" = ( @@ -69360,16 +60612,6 @@ /obj/item/bedsheet/hos/double, /turf/open/floor/carpet/red, /area/station/command/heads_quarters/hos) -"lBE" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "lBH" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -69406,8 +60648,8 @@ /area/station/maintenance/port/fore) "lCo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/upper) @@ -69422,12 +60664,8 @@ "lCx" = ( /obj/effect/spawner/random/structure/crate, /obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/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/department/medical) "lCF" = ( @@ -69438,12 +60676,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) "lCH" = ( @@ -69480,18 +60714,17 @@ /area/station/science/genetics) "lCK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, /obj/machinery/duct, /turf/open/floor/wood, /area/station/command/heads_quarters/rd) +"lCL" = ( +/turf/open/floor/iron/large, +/area/station/ai_monitored/turret_protected/ai_upload) "lCP" = ( /obj/effect/turf_decal/bot, /obj/machinery/hydroponics/constructable, @@ -69515,13 +60748,14 @@ /area/station/security/office) "lCT" = ( /obj/machinery/light/directional/north, -/obj/machinery/requests_console/directional/north, /obj/structure/chair/office{ dir = 4 }, -/turf/open/floor/engine{ - icon_state = "floor" +/obj/machinery/requests_console/directional/north{ + department = "Ordinance"; + name = "Ordinance Requests Console" }, +/turf/open/floor/iron, /area/station/science/ordnance) "lCV" = ( /obj/structure/grille, @@ -69539,24 +60773,18 @@ "lDc" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/customs_agent, /turf/open/floor/iron, /area/station/security/checkpoint/supply) "lDg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs/medium{ dir = 4 }, /area/station/science/research) "lDk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/parquet, /area/station/common/gaskiosk) "lDl" = ( @@ -69575,12 +60803,8 @@ /area/station/hallway/primary/central) "lDq" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -69589,9 +60813,7 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "lDr" = ( -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "lDs" = ( /obj/machinery/light/directional/east, @@ -69612,15 +60834,6 @@ /obj/structure/alien/weeds/xen, /turf/open/misc/asteroid/airless, /area/space/nearstation) -"lDz" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/maintenance/port/aft) "lDB" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=2"; @@ -69647,12 +60860,8 @@ icon_state = "dirt-flat-1" }, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/eighties, /area/station/maintenance/abandon_arcade) "lDR" = ( @@ -69690,7 +60899,7 @@ /obj/effect/turf_decal/stripes, /obj/effect/turf_decal/trimline/purple/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/xenobiology/hallway) "lEj" = ( @@ -69708,12 +60917,8 @@ /area/station/maintenance/starboard/fore) "lEo" = ( /obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/railing/corner{ dir = 1 }, @@ -69746,8 +60951,8 @@ /area/station/service/barber) "lEO" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -69762,12 +60967,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"lEZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "lFa" = ( /obj/structure/chair/sofa/right/brown, /obj/effect/turf_decal/siding/wood{ @@ -69780,12 +60979,8 @@ /turf/open/floor/iron, /area/station/maintenance/console_room) "lFo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/airlock/access/all/engineering, /obj/machinery/door/airlock/engineering{ @@ -69905,6 +61100,10 @@ /obj/machinery/atmospherics/components/binary/pump{ name = "Gas to Chamber" }, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "engine" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/engine, /area/station/engineering/supermatter) "lGz" = ( @@ -69921,12 +61120,8 @@ dir = 8 }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -69953,22 +61148,14 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/security/range) -"lGT" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/transit_tube) "lGU" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" +/obj/effect/turf_decal/siding/wood{ + dir = 8 }, -/turf/open/floor/plating, -/area/station/maintenance/salon/lower) +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/stone, +/area/station/service/forge) "lGV" = ( /obj/structure/railing{ dir = 10 @@ -69977,10 +61164,8 @@ /area/station/service/bar/atrium) "lGW" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/circuit, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai_upload) "lHb" = ( /obj/structure/chair/wood{ @@ -70010,29 +61195,9 @@ /obj/effect/landmark/start/security_officer, /turf/open/floor/iron, /area/station/security/office) -"lHk" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "lHt" = ( /obj/effect/turf_decal/bot, /obj/structure/sink/directional/east, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/side{ dir = 8 @@ -70043,12 +61208,8 @@ /area/station/hallway/primary/upper) "lHw" = ( /obj/effect/landmark/start/nanotrasen_consultant, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -70071,20 +61232,15 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "lHT" = ( -/obj/structure/closet/crate/trashcart/filled, -/obj/effect/spawner/random/contraband/cannabis, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted, +/obj/machinery/recharge_station, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "lHV" = ( /obj/structure/railing/corner{ dir = 8 }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "lHW" = ( @@ -70112,11 +61268,13 @@ /turf/open/floor/iron/dark, /area/station/engineering/atmos) "lIu" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/table, /obj/machinery/coffeemaker{ pixel_y = 8 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) "lIx" = ( @@ -70197,12 +61355,8 @@ /turf/open/floor/iron, /area/station/engineering/supermatter/room) "lIZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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) "lJa" = ( @@ -70212,19 +61366,13 @@ /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "lJc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/mineral/plastitanium, /area/station/science/robotics/lab) "lJg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/common/wrestling/locker) "lJh" = ( @@ -70257,12 +61405,8 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "lJs" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/iron, @@ -70277,7 +61421,6 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "lJw" = ( @@ -70294,12 +61437,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -70345,26 +61484,13 @@ /turf/open/floor/iron/dark, /area/station/maintenance/thruster_room/central) "lKd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"lKi" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/aft/upper) "lKk" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -70385,19 +61511,12 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/nt_rep) "lKw" = ( -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/table/reinforced, /obj/item/clothing/ears/earmuffs{ pixel_y = 7 }, /obj/item/gun/energy/laser/practice, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, +/obj/effect/turf_decal/stripes, /turf/open/floor/iron/dark, /area/station/security/range) "lKx" = ( @@ -70422,10 +61541,8 @@ /area/station/hallway/secondary/command) "lKC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -70477,7 +61594,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/start/bitrunner, /turf/open/floor/iron/dark/small, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "lKU" = ( /obj/structure/window/reinforced/plasma/spawner/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold/general/visible{ @@ -70492,25 +61609,12 @@ name = "Virology Access" }, /obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, +/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/medical/virology, /obj/machinery/duct, +/obj/effect/turf_decal/tile/green/opposingcorners, /turf/open/floor/iron/white, /area/station/medical/virology) "lLl" = ( @@ -70533,13 +61637,9 @@ /turf/open/floor/iron, /area/station/science/breakroom) "lLr" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/security/prison/mess) @@ -70591,7 +61691,6 @@ /turf/open/floor/wood, /area/station/maintenance/abandon_psych) "lLD" = ( -/obj/effect/turf_decal/bot, /obj/effect/turf_decal/loading_area, /obj/machinery/portable_atmospherics/canister/nitrous_oxide, /obj/machinery/light/small/directional/north, @@ -70603,8 +61702,8 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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, /area/station/commons/dorms) @@ -70649,9 +61748,6 @@ /turf/open/floor/iron/dark, /area/station/command/bridge) "lMu" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/door/window/right{ base_state = "left"; dir = 1; @@ -70674,24 +61770,12 @@ /turf/open/floor/engine, /area/station/command/secure_bunker) "lMz" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/railing{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron/dark, +/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/execution/transfer) "lME" = ( /obj/effect/turf_decal/bot, @@ -70717,12 +61801,8 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/medical/surgery, /turf/open/floor/iron/white, /area/station/medical/surgery) @@ -70732,21 +61812,15 @@ }, /obj/structure/cable, /obj/machinery/light_switch/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/command/secure_bunker) "lMR" = ( /obj/structure/chair/office{ dir = 1 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/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) "lMX" = ( @@ -70844,9 +61918,7 @@ /turf/open/floor/iron, /area/station/medical/surgery/theatre) "lNG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/office) "lNI" = ( @@ -70856,7 +61928,7 @@ /obj/effect/turf_decal/stripes{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) @@ -70868,15 +61940,13 @@ /obj/item/toy/dodgeball, /obj/item/toy/dodgeball, /obj/structure/rack, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/commons/fitness) "lNR" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/service/abandoned_gambling_den) "lNU" = ( @@ -70887,8 +61957,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -70926,9 +61996,7 @@ "lOn" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip{ dir = 8 }, @@ -70974,14 +62042,12 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "lOz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/bridge) "lOL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/common/night_club/changing_room) "lOW" = ( @@ -70998,8 +62064,8 @@ "lPf" = ( /obj/machinery/holopad, /obj/effect/turf_decal/box, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/office) "lPl" = ( @@ -71024,33 +62090,12 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore/upper) -"lPC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/hydroponics) "lPG" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip{ dir = 1 }, @@ -71088,8 +62133,8 @@ /area/station/hallway/primary/port) "lQt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/power_station) "lQA" = ( @@ -71112,7 +62157,6 @@ /turf/open/floor/iron, /area/station/engineering/atmos) "lQD" = ( -/obj/effect/turf_decal/bot_white, /obj/structure/table/wood/fancy/royalblue, /obj/item/stack/spacecash/c500, /obj/item/paper/fluff{ @@ -71134,12 +62178,8 @@ name = "Jail Cell" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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 = 8 }, @@ -71226,8 +62266,8 @@ /area/station/hallway/primary/central) "lRv" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -71258,12 +62298,8 @@ /turf/open/floor/iron/dark, /area/station/science/xenobiology) "lRD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/red, /area/station/command/heads_quarters/hos) "lRF" = ( @@ -71276,9 +62312,6 @@ /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) "lRG" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 9 - }, /obj/machinery/camera/directional/west{ c_tag = "Security - Brig Cell 3" }, @@ -71312,12 +62345,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/aft/upper) "lRZ" = ( @@ -71326,8 +62355,8 @@ }, /obj/effect/turf_decal/delivery/blue, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/brig) "lSb" = ( @@ -71368,30 +62397,12 @@ dir = 8 }, /area/station/common/wrestling/arena) -"lSr" = ( -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 5 - }, -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 6 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/virology) "lSs" = ( /obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/red, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark, /area/station/security/interrogation) "lSv" = ( @@ -71407,17 +62418,14 @@ name = "Teleporter Shutters" }, /obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/command/teleporter) "lSI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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/chair/stool/directional/north, -/obj/effect/landmark/start/assistant, /turf/open/floor/iron, /area/station/commons/fitness/recreation) "lSP" = ( @@ -71511,17 +62519,6 @@ /obj/machinery/portable_atmospherics/canister, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"lTJ" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/effect/spawner/random/structure/steam_vent, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "lTO" = ( /obj/machinery/disposal/bin, /obj/machinery/light/directional/west, @@ -71531,9 +62528,7 @@ /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/nt_rep) "lTQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/maintenance/solars/starboard/fore) "lTZ" = ( @@ -71548,8 +62543,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/small/directional/east, /obj/structure/sign/departments/medbay/alt/directional/east, /obj/machinery/duct, @@ -71568,7 +62563,7 @@ dir = 1 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/xenobio_disposals) "lUA" = ( @@ -71586,12 +62581,8 @@ /turf/open/floor/iron/white, /area/station/medical/pharmacy) "lUD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/eighties/red, /area/station/common/arcade) @@ -71599,17 +62590,12 @@ /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, -/obj/effect/turf_decal/stripes, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "lUG" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) "lUP" = ( @@ -71706,27 +62692,20 @@ /turf/open/floor/iron/white, /area/station/medical/treatment_center) "lVP" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/structure/chair/office{ dir = 1 }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/landmark/start/engineering_guard, +/obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron/dark/side{ dir = 1 }, /area/station/engineering/lobby) "lVQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/cargo/miningdock) "lVR" = ( @@ -71769,7 +62748,6 @@ /obj/structure/chair/wood{ dir = 1 }, -/obj/effect/landmark/start/assistant, /turf/open/floor/wood, /area/station/service/cafeteria) "lWk" = ( @@ -71816,12 +62794,8 @@ dir = 4 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "lWL" = ( @@ -71849,18 +62823,14 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) "lXc" = ( -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, /obj/structure/closet/crate/engineering{ name = "Turbine Board Crate" }, /obj/item/circuitboard/computer/turbine_computer, /obj/item/circuitboard/machine/turbine_rotor, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -71914,12 +62884,8 @@ /area/station/security/prison/upper) "lXs" = ( /obj/structure/trash_pile, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/upper) "lXw" = ( @@ -71941,10 +62907,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "lXC" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/machinery/camera/directional/south{ c_tag = "Bar - Counter"; dir = 1; @@ -71955,27 +62917,15 @@ department = "Bar"; name = "Bar Requests Console" }, -/obj/effect/turf_decal/bot, /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" }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) -"lXD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/orange/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/main) "lXI" = ( /turf/closed/wall, /area/station/maintenance/department/engineering/atmos_aux_port) @@ -72010,33 +62960,21 @@ }, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/cmo) -"lXT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/security/prison/upper) "lYe" = ( /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) "lYg" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/aft/upper) "lYi" = ( /obj/effect/turf_decal/stripes{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -72060,9 +62998,7 @@ /turf/closed/wall/r_wall, /area/station/science/xenobiology) "lYx" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/side{ dir = 8 @@ -72084,12 +63020,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/carpet/green, /area/station/command/heads_quarters/nt_rep) @@ -72113,9 +63045,7 @@ /obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "lYI" = ( @@ -72169,18 +63099,8 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) -"lZf" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/department/science/upper) "lZg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "lZl" = ( @@ -72209,12 +63129,8 @@ /turf/open/floor/carpet, /area/station/security/detectives_office) "lZC" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) "lZH" = ( @@ -72226,12 +63142,8 @@ /turf/open/floor/carpet, /area/station/service/library/lounge) "lZM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/beacon, /obj/effect/landmark/event_spawn, /turf/open/floor/iron, @@ -72276,19 +63188,7 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "mah" = ( -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/xenobiology/hallway) "man" = ( @@ -72317,12 +63217,8 @@ name = "Self Care Salon" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -72339,12 +63235,6 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/plating, /area/station/engineering/atmos) -"maD" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/test_chambers) "maF" = ( /obj/machinery/photocopier, /obj/effect/turf_decal/stripes, @@ -72358,10 +63248,8 @@ pixel_y = -29 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/bridge) "maI" = ( @@ -72426,12 +63314,8 @@ name = "Weapons Test Range" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/science/research, /obj/structure/cable, /turf/open/floor/iron/white/side{ @@ -72470,8 +63354,8 @@ dir = 1 }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/poddoor/shutters/preopen{ id = "Xeno9"; name = "Xenobio Pens Containment" @@ -72484,12 +63368,6 @@ }, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva/upper) -"mcd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/office) "mcl" = ( /obj/structure/table/reinforced, /obj/item/paper_bin{ @@ -72529,9 +63407,8 @@ /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage) "mcE" = ( @@ -72556,23 +63433,13 @@ /obj/effect/decal/cleanable/oil, /turf/open/floor/plating, /area/station/maintenance/fore/upper) -"mcP" = ( -/obj/effect/turf_decal/trimline/white/filled/corner{ - dir = 8 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "mcR" = ( /obj/structure/closet/lawcloset, /obj/item/storage/briefcase{ pixel_x = 3; pixel_y = 3 }, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/item/clothing/glasses/sunglasses/big{ pixel_x = 3; pixel_y = 3 @@ -72586,12 +63453,8 @@ /area/station/maintenance/department/security/upper) "mcT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 8 }, @@ -72600,24 +63463,13 @@ "mcW" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "mdb" = ( /turf/open/floor/iron/dark/side{ dir = 1 }, /area/station/hallway/secondary/command) -"mdf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "mdj" = ( /obj/structure/table, /obj/machinery/recharger{ @@ -72642,12 +63494,8 @@ network = list("ss13","prison") }, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/security/prison/safe) "mdm" = ( @@ -72679,6 +63527,15 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) +"mdA" = ( +/obj/structure/chair/sofa/bench{ + dir = 8; + pixel_x = 5 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/hallway/secondary/entry) "mdF" = ( /obj/machinery/power/supermatter_crystal/engine, /obj/effect/turf_decal/stripes/box, @@ -72719,25 +63576,10 @@ req_access = list("command") }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/command/bridge) -"mdU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/science/robotics) "mdY" = ( /obj/structure/chair/wood{ dir = 4 @@ -72778,16 +63620,10 @@ }, /obj/machinery/status_display/ai/directional/west, /obj/structure/rack, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /turf/open/floor/iron/dark, /area/station/engineering/break_room) "mei" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -72796,12 +63632,6 @@ "mem" = ( /obj/effect/turf_decal/bot, /obj/machinery/power/emitter, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /obj/effect/turf_decal/stripes, /turf/open/floor/iron/dark/side, /area/station/engineering/storage) @@ -72810,12 +63640,8 @@ dir = 8 }, /obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) "meu" = ( @@ -72823,8 +63649,8 @@ dir = 8 }, /obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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) "mex" = ( @@ -72833,20 +63659,10 @@ /area/station/command/gateway) "mey" = ( /obj/structure/plaque/static_plaque/golden/commission, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"meF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/solars/starboard/fore) "meJ" = ( /obj/effect/turf_decal/stripes{ dir = 5 @@ -72866,9 +63682,7 @@ "meY" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -72878,12 +63692,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/starboard) @@ -72913,11 +63723,12 @@ c_tag = "Engineering - Secure tech storage"; name = "engineering camera" }, -/obj/item/circuitboard/machine/circuit_imprinter/department, -/obj/item/circuitboard/machine/protolathe/department, /obj/structure/cable, -/obj/effect/turf_decal/stripes{ - dir = 8 +/obj/item/ai_module/reset{ + pixel_y = 8 + }, +/obj/item/ai_module/core/full/custom{ + pixel_y = -4 }, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) @@ -72995,16 +63806,10 @@ /obj/effect/turf_decal/siding/brown{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/cargo/sorting) "mgt" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/button/door/directional/west{ id = "prison release"; name = "Labor Camp Shuttle Lockdown"; @@ -73021,8 +63826,8 @@ /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "mgu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -73033,8 +63838,8 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "mgF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/library) "mgG" = ( @@ -73061,10 +63866,8 @@ /area/station/science/robotics/lab) "mgL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/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/cargo/miningdock) "mgM" = ( @@ -73082,8 +63885,8 @@ "mgX" = ( /obj/structure/disposalpipe/segment, /obj/structure/falsewall, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/cargo/warehouse) "mhf" = ( @@ -73186,12 +63989,8 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -73209,41 +64008,22 @@ dir = 8 }, /area/station/hallway/primary/central) -"mif" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/blueshield) "miw" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/table, /obj/item/weldingtool/largetank{ pixel_x = -4; pixel_y = 3 }, /obj/item/clothing/head/utility/welding, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "miB" = ( /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 9 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/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) "miC" = ( @@ -73310,20 +64090,8 @@ /obj/structure/closet/secure_closet/brig, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science/research) -"mjr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/engineering/main) "mjw" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, /obj/machinery/light/directional/east, /obj/machinery/power/shieldwallgen, /turf/open/floor/iron/dark/side{ @@ -73334,34 +64102,18 @@ /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"mjz" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/hallway/primary/central) "mjA" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/neutral, /obj/item/storage/toolbox/mechanical, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /turf/open/floor/iron/dark, /area/station/command/bridge) "mjB" = ( @@ -73403,22 +64155,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/abandon_wrestle) -"mjY" = ( -/obj/effect/turf_decal/delivery, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "mjZ" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -73428,16 +64171,19 @@ /obj/structure/railing/corner/end/flip, /obj/machinery/light/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/black, /area/station/service/barber) -"mko" = ( -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/department/medical) +"mkf" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/chair/stool/bar/directional/west, +/turf/open/floor/iron, +/area/station/command/captain_dining) "mky" = ( /obj/structure/chair, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/interrogation) "mkC" = ( @@ -73507,37 +64253,25 @@ id = "hopline"; name = "Queue Shutters" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "mly" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/chapel) "mlB" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/machinery/door/poddoor/massdriver_trash, /obj/structure/fans/tiny, /turf/open/floor/plating, /area/station/maintenance/disposal) "mlC" = ( -/obj/effect/turf_decal/stripes{ +/obj/machinery/computer/atmos_alert{ dir = 1 }, -/obj/machinery/computer/atmos_alert{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, /turf/open/floor/iron/dark, @@ -73548,8 +64282,8 @@ /area/station/maintenance/department/science/xenobiology) "mlH" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/maintenance, /obj/machinery/duct, /turf/open/floor/plating, @@ -73558,16 +64292,6 @@ /obj/machinery/vending/sovietsoda, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"mlQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/service/chapel) "mlX" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt{ @@ -73586,14 +64310,12 @@ name = "lavaland"; shuttle_id = "pod_2_lavaland" }, -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) "mme" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 8 }, @@ -73605,16 +64327,23 @@ }, /obj/item/trash/peanuts, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"mmu" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/obj/structure/table, +/obj/item/stack/rods/two, +/obj/item/stack/cable_coil/five, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "mmz" = ( /obj/effect/turf_decal/stripes{ dir = 4 @@ -73636,17 +64365,11 @@ /obj/structure/cable, /obj/structure/disposalpipe/segment, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/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) "mmL" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/machinery/smartfridge/organ, /turf/open/floor/iron/white, /area/station/medical/coldroom) @@ -73656,8 +64379,8 @@ }, /obj/item/trash/boritos, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) @@ -73665,8 +64388,8 @@ /obj/machinery/door/airlock{ name = "Lasertag Arena" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/common/laser_tag) @@ -73745,29 +64468,6 @@ /obj/effect/turf_decal/loading_area, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"mnV" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) -"mnW" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/station/medical/psychology) "moh" = ( /obj/machinery/door/airlock/silver{ name = "Locker Room" @@ -73779,22 +64479,14 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/maintenance/aft/upper) "mot" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -73822,20 +64514,9 @@ /turf/open/floor/eighties, /area/station/maintenance/abandon_arcade) "moz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/hallway/primary/port) -"moC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "moF" = ( /obj/structure/railing{ dir = 1 @@ -73866,9 +64547,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/research/abandoned) "moY" = ( @@ -73879,26 +64558,16 @@ /area/station/command/heads_quarters/ce) "moZ" = ( /obj/machinery/light/small/red/dim/directional/east, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/plating, /area/station/escapepodbay) "mpb" = ( /obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "mpe" = ( /obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/mineral/plastitanium/red, /area/station/science/robotics/lab) "mpg" = ( @@ -73920,12 +64589,8 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "mpD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/stairs/left{ @@ -73960,12 +64625,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/abandon_art_studio) @@ -73981,10 +64642,6 @@ }, /turf/open/misc/beach/sand, /area/station/service/barber) -"mqb" = ( -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "mqf" = ( /obj/structure/chair/sofa/bench/right{ dir = 4; @@ -74000,12 +64657,8 @@ /area/station/maintenance/department/eva) "mqi" = ( /obj/structure/flora/bush/lavendergrass, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/hydroponics/soil, /turf/open/floor/grass, @@ -74013,10 +64666,8 @@ "mqj" = ( /obj/structure/cable, /obj/effect/landmark/start/assistant, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -74024,7 +64675,7 @@ /turf/open/floor/iron, /area/station/commons/locker) "mqm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/security/detectives_office) "mqs" = ( @@ -74045,9 +64696,7 @@ /turf/open/floor/plating, /area/station/engineering/atmos) "mqD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/engine_smes) "mqG" = ( @@ -74060,22 +64709,16 @@ /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/wood, /area/station/hallway/primary/central) "mqN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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) @@ -74094,17 +64737,12 @@ dir = 6; id = "garbage" }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/plating, /area/station/maintenance/disposal) "mqY" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -74122,16 +64760,13 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "mrc" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/camera/directional/east{ c_tag = "Security - Brig Port upper"; dir = 10 }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "mrl" = ( @@ -74150,18 +64785,10 @@ /turf/open/floor/wood, /area/station/security/courtroom) "mro" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/department/engineering/lesser) -"mrp" = ( -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "mrw" = ( /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark/side{ @@ -74216,7 +64843,7 @@ /area/station/maintenance/abandon_arcade) "mrY" = ( /obj/machinery/light/small/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "mrZ" = ( @@ -74275,11 +64902,10 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "msQ" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/structure/cable, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "msS" = ( @@ -74291,21 +64917,25 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "msT" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ +/obj/structure/railing{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/turf/open/floor/iron, +/area/station/security/execution/transfer) +"msV" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/medical/glass{ + id_tag = "MedbayFoyer"; + name = "Medbay" }, -/obj/structure/railing{ +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 }, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "mtc" = ( /obj/effect/turf_decal/delivery, /obj/structure/rack, @@ -74319,18 +64949,11 @@ }, /obj/item/gavelblock, /obj/item/gavelhammer, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/courtroom) "mtk" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/effect/turf_decal/stripes/white/line{ dir = 4 }, @@ -74370,10 +64993,7 @@ /turf/open/floor/iron/dark/small, /area/station/cargo/miningdock) "mtF" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple/half, /turf/open/floor/iron, /area/station/hallway/primary/upper) "mtR" = ( @@ -74390,12 +65010,8 @@ /obj/effect/turf_decal/trimline/green/filled/line{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/medical/virology) "mui" = ( @@ -74420,17 +65036,6 @@ dir = 1 }, /area/station/command/secure_bunker) -"muA" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/maintenance/central) "muK" = ( /obj/structure/cable, /obj/machinery/door/airlock/hatch{ @@ -74488,12 +65093,6 @@ /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "mvo" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/closet/crate/freezer/surplus_limbs, /turf/open/floor/iron/white, /area/station/medical/coldroom) @@ -74516,10 +65115,8 @@ }, /obj/structure/cable, /obj/structure/disposalpipe/junction/flip, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/office) "mvK" = ( @@ -74528,12 +65125,8 @@ layer = 3.5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/blue, /obj/machinery/door/airlock/public/glass{ @@ -74558,8 +65151,8 @@ /area/station/command/heads_quarters/cmo) "mvR" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/checkpoint/customs) "mvS" = ( @@ -74607,35 +65200,24 @@ /turf/open/openspace, /area/station/maintenance/department/medical/central) "mwm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /mob/living/simple_animal/pet/gondola/funky, /turf/open/floor/iron, /area/station/service/theater) "mwn" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/storage) "mwt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/tile/blue/fourcorners, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -74692,7 +65274,6 @@ /area/station/command/heads_quarters/hop) "mwX" = ( /obj/structure/closet/firecloset, -/obj/effect/turf_decal/bot, /obj/effect/turf_decal/siding/thinplating_new{ dir = 6 }, @@ -74752,12 +65333,8 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology) "mya" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/xenobiology) "mys" = ( @@ -74784,12 +65361,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/portable_atmospherics/scrubber, /obj/effect/turf_decal/delivery, /turf/open/floor/plating, @@ -74812,12 +65385,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 2 }, @@ -74826,12 +65395,8 @@ /area/station/science/research) "myG" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -74853,18 +65418,14 @@ /turf/open/floor/carpet/red, /area/station/service/library/abandoned) "myQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/public/glass{ name = "Arcade" }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/wood{ dir = 8 }, @@ -74874,9 +65435,6 @@ /obj/machinery/disposal/bin, /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -74918,23 +65476,10 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/common/cryopods) -"mzm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "mzp" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -75015,18 +65560,14 @@ /obj/machinery/door/firedoor, /obj/effect/turf_decal/trimline/blue/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/medical/orderly, /turf/open/floor/iron/white/side, /area/station/security/checkpoint/medical) "mzP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/common/laser_tag) @@ -75075,22 +65616,10 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) -"mAv" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/structure/rack/shelf, -/obj/effect/spawner/random/techstorage/rnd_all, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tech) "mAB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/plating, /area/station/maintenance/department/engineering/lesser) @@ -75101,12 +65630,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/common/wrestling/concessions) "mAK" = ( @@ -75128,7 +65653,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/upper) "mAN" = ( @@ -75141,7 +65666,7 @@ /area/station/cargo/storage) "mAP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) @@ -75161,7 +65686,7 @@ /area/station/science/xenobiology) "mBe" = ( /obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/engine, /area/station/science/xenobiology) "mBt" = ( @@ -75179,14 +65704,19 @@ }, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) -"mBC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 +"mBw" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 +/obj/machinery/mech_bay_recharge_port{ + dir = 2 }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) +"mBC" = ( +/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/white/line{ dir = 1 }, @@ -75221,12 +65751,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor, /area/station/engineering/main) "mBT" = ( @@ -75268,8 +65794,8 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/qm) "mCj" = ( @@ -75317,10 +65843,8 @@ /area/station/hallway/secondary/exit/departure_lounge) "mCV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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 }, @@ -75328,10 +65852,8 @@ /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/captain) "mDc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/common/wrestling/lobby) @@ -75347,9 +65869,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "mDi" = ( @@ -75361,12 +65881,8 @@ /area/station/tcommsat/server) "mDj" = ( /obj/structure/flora/bush/sparsegrass, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/flora/bush/lavendergrass, /turf/open/floor/grass, @@ -75379,7 +65895,7 @@ /turf/open/floor/iron/dark, /area/station/medical/medbay/lobby) "mDn" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/miningoffice) "mDo" = ( @@ -75410,7 +65926,6 @@ /obj/effect/turf_decal/tile/red/half{ dir = 1 }, -/obj/effect/turf_decal/tile/red, /turf/open/floor/iron/dark/side{ dir = 5 }, @@ -75448,13 +65963,12 @@ /turf/open/floor/iron, /area/station/security/courtroom) "mEf" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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, /area/station/commons/storage/art) "mEg" = ( -/obj/effect/turf_decal/bot, /obj/machinery/atmospherics/components/binary/pump{ dir = 1; name = "Pure to Mix" @@ -75469,9 +65983,7 @@ /obj/machinery/door/airlock/security/glass{ name = "Labor Camp Shuttle Airlock" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark/side{ dir = 8 @@ -75570,26 +66082,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) -"mFc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/security/prison/upper) -"mFf" = ( -/obj/effect/turf_decal/bot, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/command/gateway) "mFg" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -75606,19 +66098,6 @@ "mFi" = ( /obj/structure/table_frame/wood, /obj/effect/spawner/random/clothing/costume, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/machinery/light/small/directional/east, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -75628,8 +66107,8 @@ "mFp" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/central) "mFs" = ( @@ -75643,9 +66122,9 @@ /obj/machinery/computer/atmos_control/oxygen_tank{ dir = 1 }, -/obj/effect/turf_decal/tile/blue/fourcorners, /obj/structure/window/spawner/directional/south, /obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/tile/red/diagonal_centre, /turf/open/floor/iron, /area/station/engineering/atmos) "mFy" = ( @@ -75668,10 +66147,8 @@ /area/station/service/lawoffice) "mFM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/cafeteria, /area/station/commons/toilet/auxiliary) @@ -75706,12 +66183,8 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology/hallway) "mFT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/service) "mFY" = ( @@ -75726,27 +66199,13 @@ /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron, /area/station/science/breakroom) -"mGj" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/turf/open/floor/wood, -/area/station/medical/psychology) "mGl" = ( /obj/effect/turf_decal/stripes{ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_edge{ dir = 8 }, @@ -75756,12 +66215,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/research) "mGs" = ( @@ -75788,16 +66243,12 @@ /obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/gravity_generator) "mGD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/aft) "mGG" = ( @@ -75837,8 +66288,8 @@ /obj/effect/landmark/navigate_destination, /obj/effect/mapping_helpers/airlock/access/all/service/janitor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/checker, /area/station/service/janitor) @@ -75868,12 +66319,8 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/medical/medbay/central) "mHp" = ( @@ -75888,29 +66335,18 @@ /turf/open/floor/iron, /area/station/hallway/primary/upper) "mHv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/radio/intercom/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/upper) "mHx" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/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, /area/station/security/prison) "mHA" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, /obj/structure/table/reinforced, /obj/item/airlock_painter/decal, /turf/open/floor/iron/dark, @@ -75992,12 +66428,8 @@ id = "Luggagebelt" }, /obj/structure/plasticflaps/opaque, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/security/checkpoint) "mIn" = ( @@ -76023,9 +66455,7 @@ /turf/open/floor/iron/dark, /area/station/science/genetics) "mIv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light_switch/directional/south, /turf/open/floor/iron, /area/station/maintenance/solars/port/fore) @@ -76050,21 +66480,8 @@ "mIz" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) -"mIG" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "mIQ" = ( /obj/machinery/light/directional/west, /turf/open/floor/engine, @@ -76078,24 +66495,14 @@ /turf/open/floor/iron, /area/station/security/checkpoint/escape) "mIY" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/table, /obj/item/fuel_pellet, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "mJa" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/security/prison/upper) @@ -76117,28 +66524,14 @@ /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) "mJm" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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, +/turf/open/floor/iron, /area/station/security/brig) "mJr" = ( /mob/living/simple_animal/hostile/cult/mannequin, @@ -76154,8 +66547,8 @@ /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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) "mJC" = ( @@ -76172,12 +66565,8 @@ /area/station/service/chapel) "mJD" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -76223,7 +66612,6 @@ /turf/open/floor/iron, /area/station/engineering/atmos/hfr_room) "mJX" = ( -/obj/effect/turf_decal/tile/purple, /obj/structure/curtain/bounty, /obj/structure/sign/calendar/directional/west, /turf/open/floor/iron/dark/side{ @@ -76280,7 +66668,6 @@ /obj/structure/table/glass, /obj/structure/window/spawner/directional/east, /obj/item/stack/medical/gauze, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "mKz" = ( @@ -76288,7 +66675,6 @@ id = "custodialshutters"; name = "Custodial Closet Shutters" }, -/obj/effect/turf_decal/delivery, /obj/machinery/button/door{ id = "custodialshutters"; name = "Custodial Shutters"; @@ -76297,25 +66683,8 @@ }, /turf/open/floor/iron/dark, /area/station/service/janitor) -"mKE" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "mKG" = ( /obj/structure/chair/stool, -/obj/effect/landmark/start/assistant, /turf/open/floor/iron, /area/station/commons/fitness/recreation) "mKJ" = ( @@ -76381,12 +66750,8 @@ /area/station/security/checkpoint/escape) "mLj" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall18"; location = "hall17" @@ -76404,7 +66769,7 @@ /turf/closed/wall, /area/station/science/research/abandoned) "mLq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/dark/side{ dir = 8 @@ -76445,14 +66810,7 @@ /turf/open/misc/sandy_dirt, /area/station/maintenance/department/medical) "mLZ" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/bridge) "mMc" = ( @@ -76466,9 +66824,7 @@ /turf/open/floor/plating/airless, /area/station/engineering/atmos/upper) "mMd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/wood, /area/station/commons/dorms/room2) @@ -76568,8 +66924,8 @@ dir = 10 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/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/atmos/office) "mMU" = ( @@ -76607,12 +66963,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -76626,9 +66978,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/chair/comfy/brown{ color = "#A46106" }, @@ -76645,12 +66995,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"mNF" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "mNI" = ( /obj/structure/girder/displaced, /obj/structure/grille/broken, @@ -76682,7 +67026,7 @@ /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "mOb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/wood, /area/station/common/wrestling/lobby) @@ -76734,12 +67078,8 @@ "mOS" = ( /obj/machinery/atmospherics/components/binary/pump, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/xenobiology) "mOX" = ( @@ -76749,10 +67089,6 @@ /turf/open/floor/wood, /area/station/hallway/primary/port) "mPa" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, /obj/machinery/button/door/directional/east{ id = "qm_warehouse"; name = "Warehouse Door Control"; @@ -76764,8 +67100,8 @@ }, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/small, /area/station/cargo/warehouse) "mPf" = ( @@ -76828,8 +67164,7 @@ "mPG" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/medical/virology) "mPH" = ( @@ -76851,9 +67186,7 @@ /turf/open/misc/asteroid, /area/station/hallway/primary/upper) "mPL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs{ dir = 8 }, @@ -76887,8 +67220,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) @@ -76906,12 +67239,8 @@ /area/station/maintenance/department/crew_quarters/dorms) "mQt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/fore/upper) @@ -76933,12 +67262,8 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -76967,10 +67292,8 @@ /area/station/service/library/private) "mQI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -77000,7 +67323,6 @@ /turf/open/floor/iron, /area/station/common/wrestling/locker) "mQS" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/table/wood/fancy/black, /obj/structure/window/spawner/directional/north, /obj/item/reagent_containers/cup/glass/bottle/trappist{ @@ -77014,6 +67336,7 @@ pixel_x = 9; pixel_y = -2 }, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "mQU" = ( @@ -77045,22 +67368,11 @@ /area/station/engineering/atmos) "mRf" = ( /obj/structure/chair/wood, -/obj/effect/landmark/start/bouncer, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/wood, /area/station/service/bar/atrium) -"mRg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain/private) "mRh" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -77076,12 +67388,6 @@ "mRm" = ( /obj/structure/window/reinforced/tinted/spawner/directional/west, /obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, /turf/open/floor/iron/dark, /area/station/common/night_club) "mRu" = ( @@ -77114,15 +67420,6 @@ }, /turf/open/floor/engine, /area/station/command/heads_quarters/rd) -"mRG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/gravity_generator) "mRN" = ( /obj/effect/mob_spawn/corpse/human/skeleton, /turf/open/floor/plating, @@ -77149,16 +67446,9 @@ /area/station/commons/dorms) "mRY" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 8 }, /turf/open/floor/iron/dark/side{ @@ -77184,24 +67474,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/fore/upper) -"mSo" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) -"mSs" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/iron/smooth_edge{ - dir = 8 - }, -/area/station/cargo/miningdock) "mSx" = ( /obj/effect/turf_decal/tile/red/half, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -77212,16 +67484,6 @@ /obj/machinery/dish_drive/bullet, /turf/open/floor/iron/dark/side, /area/station/security/office) -"mSA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/maintenance/department/engineering/atmos_aux_port) "mSE" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/siding/thinplating_new{ @@ -77234,8 +67496,8 @@ /area/station/science/power_station) "mSI" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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, /area/station/commons/fitness/recreation) @@ -77243,7 +67505,7 @@ /obj/structure/sign/painting/parting{ pixel_x = -32 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) "mSO" = ( @@ -77357,9 +67619,6 @@ /turf/open/floor/iron/dark, /area/station/cargo/office) "mTU" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/portables_connector/visible, /obj/machinery/portable_atmospherics/canister, /turf/open/floor/iron/dark, @@ -77369,12 +67628,8 @@ name = "Janitorial Closet" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/engineering/maintenance, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, @@ -77392,15 +67647,6 @@ /obj/item/paper_bin/carbon, /obj/item/pen/fountain, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/security/office) "mUi" = ( @@ -77451,14 +67697,6 @@ /obj/effect/spawner/random/structure/chair_flipped, /turf/open/floor/plating, /area/station/maintenance/department/security/greater) -"mUz" = ( -/obj/effect/turf_decal/stripes, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/smooth_large, -/area/station/cargo/storage) "mUF" = ( /obj/structure/chair/sofa/bench/right{ dir = 4; @@ -77470,17 +67708,13 @@ "mUH" = ( /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/cmo) "mUL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 1 }, @@ -77497,12 +67731,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/office) "mVb" = ( @@ -77518,16 +67748,6 @@ }, /turf/open/floor/engine/hull/reinforced, /area/space/nearstation) -"mVf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "mVh" = ( /obj/structure/flora/bush/jungle/b, /obj/structure/flora/bush/flowers_yw, @@ -77549,16 +67769,6 @@ "mVk" = ( /turf/closed/wall, /area/station/service/bar) -"mVn" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "mVo" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -77597,20 +67807,10 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "mVF" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side, /area/station/security/warden) "mVI" = ( /obj/effect/turf_decal/bot, @@ -77621,7 +67821,6 @@ /turf/open/floor/iron/dark, /area/station/maintenance/aux_eva) "mVS" = ( -/obj/effect/turf_decal/stripes/corner, /obj/structure/reagent_dispensers/water_cooler, /turf/open/floor/iron/smooth_large, /area/station/cargo/storage) @@ -77635,20 +67834,16 @@ name = "Courtroom" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/security/court, /turf/open/floor/carpet, /area/station/security/courtroom) "mWf" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) "mWh" = ( @@ -77674,8 +67869,8 @@ /area/station/maintenance/fore/upper) "mWm" = ( /obj/item/cigbutt, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/medical) "mWp" = ( @@ -77686,14 +67881,6 @@ codes_txt = "patrol;next_patrol=hall9"; location = "hall8" }, -/obj/machinery/camera{ - c_tag = "Leisure Hallway - Lowest Aft"; - dir = 10; - name = "hallway camera" - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -77703,28 +67890,19 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/medical/medbay/central) "mWL" = ( /obj/structure/chair/sofa/corp/right, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "mWQ" = ( -/turf/open/floor/catwalk_floor{ - initial_gas_mix = "TEMP=2.7" - }, +/turf/open/floor/catwalk_floor/iron/airless, /area/space/nearstation) "mWU" = ( /obj/effect/turf_decal/tile/neutral{ @@ -77732,28 +67910,19 @@ }, /obj/structure/cable, /obj/structure/extinguisher_cabinet/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/upper) "mWW" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/escapepodbay) "mWY" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 8 }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 8 - }, /obj/structure/chair/office{ dir = 4 }, @@ -77765,12 +67934,8 @@ /area/station/maintenance/department/security/greater) "mXe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/medical/medbay/central) "mXl" = ( @@ -77789,12 +67954,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing/corner/end{ dir = 4 }, @@ -77803,21 +67964,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"mXo" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/coldroom) "mXq" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -77837,7 +67983,7 @@ "mXB" = ( /obj/machinery/light/small/directional/west, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/xenobio_disposals) "mXC" = ( @@ -77870,14 +68016,17 @@ /area/station/cargo/storage) "mXM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/brig) "mXO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, /turf/open/floor/iron, /area/station/security/execution/transfer) "mYc" = ( @@ -77908,10 +68057,8 @@ /area/station/science/robotics/lab) "mYn" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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) "mYo" = ( @@ -77944,12 +68091,8 @@ "mYD" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/service/hydroponics, /obj/machinery/door/airlock/hydroponics{ name = "Hydroponics Backroom" @@ -77958,6 +68101,9 @@ dir = 4 }, /obj/machinery/duct, +/obj/effect/turf_decal/tile/green/tram{ + dir = 4 + }, /turf/open/floor/iron, /area/station/service/hydroponics) "mYG" = ( @@ -77977,12 +68123,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/medical/pharmacy, /turf/open/floor/iron/white, /area/station/medical/pharmacy) @@ -78015,12 +68157,8 @@ /area/station/maintenance/starboard/fore) "mZA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "mZE" = ( @@ -78042,12 +68180,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -78105,12 +68239,8 @@ /area/station/commons/locker) "naj" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -78135,31 +68265,13 @@ "nao" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/openspace, /area/station/maintenance/fore/upper) -"nas" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "nav" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -78177,10 +68289,6 @@ /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "nay" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/machinery/firealarm/directional/east, /obj/machinery/light_switch/directional/north, /obj/structure/table/reinforced, @@ -78191,6 +68299,7 @@ /obj/item/book/manual/wiki/engineering_guide{ pixel_x = -2 }, +/obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -78229,12 +68338,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/security/detective, /turf/open/floor/wood, /area/station/security/detectives_office) @@ -78249,12 +68354,8 @@ /turf/open/floor/iron/dark, /area/station/maintenance/department/security/prison_upper) "nbq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -78267,12 +68368,8 @@ /obj/structure/window/spawner/directional/south, /obj/structure/window/spawner/directional/north, /obj/structure/window/spawner/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/dorms) "nbC" = ( @@ -78310,12 +68407,8 @@ /area/station/science/xenobiology) "nbJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/sorting/mail/flip{ dir = 4; name = "Dorm Junction"; @@ -78335,9 +68428,7 @@ /area/station/science/xenobiology) "nbW" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/ai_monitored/security/armory) "nca" = ( @@ -78356,19 +68447,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/security/greater) "ncn" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/dark, /area/station/security/brig) @@ -78426,9 +68506,7 @@ /obj/effect/turf_decal/stripes{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "ncJ" = ( @@ -78498,8 +68576,8 @@ /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/structure/sign/poster/random/directional/east, /turf/open/floor/iron, @@ -78523,12 +68601,8 @@ /area/station/maintenance/department/science/xenobiology) "ndT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/mineral/plastitanium/red, /area/station/science/robotics/lab) "nec" = ( @@ -78544,8 +68618,8 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/central) "nef" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/landmark/start/hangover, /turf/open/floor/carpet/purple, @@ -78602,7 +68676,7 @@ /turf/open/floor/engine/vacuum, /area/station/engineering/atmos/test_chambers) "neG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/science/ordnance/office) @@ -78626,17 +68700,11 @@ /turf/open/floor/iron, /area/station/hallway/secondary/command) "neQ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/turf_decal/tile/yellow, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/upper) "neV" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/effect/turf_decal/stripes/red/line{ dir = 8 }, @@ -78749,8 +68817,8 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/surgery) @@ -78762,8 +68830,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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, /area/station/commons/dorms) @@ -78816,12 +68884,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -78836,8 +68900,8 @@ /obj/machinery/door/airlock/engineering/glass{ name = "Supermatter Engine Control Room" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/structure/cable, /turf/open/floor/iron, @@ -78890,12 +68954,8 @@ /area/station/command/heads_quarters/captain) "ngZ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -78904,9 +68964,6 @@ /area/station/command/heads_quarters/captain) "nha" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 9 - }, /obj/structure/cable, /obj/machinery/camera/directional/west{ c_tag = "Security - Brig Cell 1" @@ -78972,7 +69029,7 @@ /turf/closed/wall, /area/station/engineering/storage/tcomms) "nhR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -78983,21 +69040,15 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) "nhZ" = ( /obj/effect/turf_decal/stripes, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/ordnance/storage) "nid" = ( @@ -79013,19 +69064,6 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) -"nig" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/medical) "nih" = ( /obj/effect/turf_decal/stripes{ dir = 8 @@ -79041,16 +69079,6 @@ /obj/item/stack/ore/glass, /turf/open/space/basic, /area/space/nearstation) -"nip" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "niu" = ( /obj/effect/turf_decal/weather/sand{ dir = 10 @@ -79062,7 +69090,8 @@ anchored = 1; dir = 1; pixel_x = 3; - pixel_y = 7 + pixel_y = 7; + layer = 3.4 }, /turf/open/floor/grass, /area/station/hallway/primary/aft) @@ -79070,28 +69099,20 @@ /obj/structure/mirror/directional/west, /obj/effect/landmark/start/mime, /obj/structure/sink/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/kitchen, /area/station/service/theater) "niD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, /turf/open/floor/iron, /area/station/engineering/lobby) "niE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -79110,12 +69131,8 @@ "niJ" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/hallway/secondary/entry) "niN" = ( @@ -79127,7 +69144,7 @@ c_tag = "Primary Tool Storage"; name = "engineering camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/firealarm/directional/west, /turf/open/floor/iron, /area/station/commons/storage/primary) @@ -79139,12 +69156,8 @@ name = "Study Room" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -79165,8 +69178,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, @@ -79239,12 +69252,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/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/aisat/exterior) "nko" = ( @@ -79261,12 +69270,8 @@ /area/station/security/checkpoint/science/research) "nkI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/maintenance, /turf/open/floor/plating, /area/station/maintenance/aft/upper) @@ -79280,8 +69285,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/science/research, /obj/machinery/duct, @@ -79302,9 +69307,6 @@ /obj/item/crowbar, /obj/item/wirecutters, /obj/item/stack/cable_coil, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/engineering/main) "nkY" = ( @@ -79324,28 +69326,20 @@ /turf/open/floor/cult, /area/station/maintenance/department/science/xenobiology) "nlg" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/turf/open/floor/iron/dark/side{ + dir = 4 }, -/turf/open/floor/iron/dark, /area/station/security/brig) "nli" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/green, /area/station/service/abandoned_gambling_den) "nly" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/captain/private) "nlI" = ( @@ -79357,12 +69351,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/research) "nlN" = ( @@ -79375,27 +69365,17 @@ /turf/open/floor/iron, /area/station/hallway/primary/aft) "nlO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/department/medical) "nlR" = ( -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/brig, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -79406,26 +69386,14 @@ /area/station/maintenance/port/central) "nmh" = ( /obj/machinery/biogenerator, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/service/hydroponics) "nmi" = ( /obj/machinery/computer/crew, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/machinery/newscaster/directional/west, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/bridge) "nmk" = ( @@ -79451,18 +69419,12 @@ "nmv" = ( /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/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/department/crew_quarters/dorms) "nmK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -79495,7 +69457,6 @@ /obj/structure/window/spawner/directional/north, /obj/machinery/light/directional/east, /obj/item/radio/intercom/directional/east, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "nnc" = ( @@ -79550,15 +69511,6 @@ }, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) -"nnz" = ( -/obj/machinery/power/shuttle_engine/heater{ - dir = 8 - }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "nnB" = ( /obj/structure/chair/sofa/bench{ dir = 4; @@ -79608,22 +69560,10 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/maintenance/gamer_lair) -"nnM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/command/bridge) "nnS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -79659,12 +69599,8 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "noo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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, @@ -79683,12 +69619,8 @@ /area/station/maintenance/department/medical/morgue) "noU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -79784,8 +69716,8 @@ "npQ" = ( /obj/structure/disposalpipe/segment, /obj/effect/spawner/random/trash/mopbucket, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/crew_quarters/bar) "npR" = ( @@ -79837,21 +69769,15 @@ icon_state = "dirt-flat-1" }, /obj/machinery/light/broken/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/cargo/power_station/upper) "nqG" = ( /turf/closed/wall/r_wall, /area/station/science/ordnance/burnchamber) "nqH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -79862,9 +69788,7 @@ dir = 4 }, /obj/item/stack/spacecash/c10, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/common/arcade) "nqK" = ( @@ -79886,9 +69810,7 @@ /area/station/maintenance/port/fore) "nqT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos/office) "nqY" = ( @@ -79909,9 +69831,7 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/upper) @@ -79920,15 +69840,6 @@ /obj/machinery/digital_clock/directional/north, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/cmo) -"nrw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/prison/safe) "nrx" = ( /turf/closed/wall/r_wall, /area/station/science/robotics/mechbay) @@ -79955,12 +69866,8 @@ /area/space/nearstation) "nrV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -80000,15 +69907,12 @@ /turf/open/floor/iron, /area/station/hallway/primary/upper) "nsg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) "nsi" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 @@ -80024,20 +69928,15 @@ /obj/machinery/door/firedoor, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/left, /area/station/cargo/storage) "nsy" = ( /obj/structure/ladder, -/obj/effect/turf_decal/stripes/box, /obj/effect/turf_decal/stripes/white/box, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/transit_tube) "nsz" = ( @@ -80058,12 +69957,8 @@ /area/station/science/xenobiology) "nsH" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -80089,8 +69984,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/command/ai_upload, /turf/open/floor/engine, /area/station/ai_monitored/turret_protected/ai) @@ -80098,16 +69993,12 @@ /obj/effect/turf_decal/arrows/white{ dir = 4 }, -/turf/open/floor/iron/dark/small, +/turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) "nsV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -80135,7 +70026,7 @@ }, /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/construction) "nty" = ( @@ -80173,13 +70064,14 @@ /area/station/maintenance/wrestle) "nud" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/tcommsat/computer) "nuj" = ( /obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -80212,12 +70104,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - 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, /area/station/maintenance/starboard/fore) @@ -80314,10 +70202,8 @@ /area/station/service/kitchen/diner) "nvr" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/command/heads_quarters/ce) @@ -80352,13 +70238,11 @@ /turf/open/floor/iron/white, /area/station/medical/treatment_center) "nvM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos/office) "nvP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -80370,12 +70254,8 @@ dir = 5; name = "hallway camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/exit) @@ -80415,8 +70295,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) "nws" = ( @@ -80429,24 +70309,11 @@ network = list("ss13","rd") }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) "nwt" = ( /turf/closed/wall/r_wall, /area/station/service/barber) -"nwB" = ( -/obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/carpet/purple, -/area/station/common/night_club) "nwD" = ( /obj/structure/cable, /obj/machinery/light/small/directional/north, @@ -80521,12 +70388,8 @@ /area/station/commons/fitness) "nxw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/dark/side{ dir = 8 @@ -80536,33 +70399,17 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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, /area/station/maintenance/abandon_diner) "nxH" = ( /obj/structure/punching_bag, /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side, /area/station/commons/fitness) -"nxO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/wood, -/area/station/hallway/primary/port) "nxQ" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/flora/bush/jungle/a/style_3, @@ -80632,12 +70479,8 @@ dir = 10 }, /obj/machinery/newscaster/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/service) "nyk" = ( @@ -80648,9 +70491,6 @@ /obj/effect/turf_decal/bot{ dir = 1 }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/portables_connector/visible, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) @@ -80673,8 +70513,8 @@ }, /obj/effect/mapping_helpers/airlock/abandoned, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/maintenance, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, @@ -80688,13 +70528,6 @@ /area/station/service/barber) "nyD" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /turf/open/floor/iron, /area/station/construction/mining/aux_base) "nyM" = ( @@ -80728,9 +70561,7 @@ /obj/structure/table/reinforced, /obj/structure/window/spawner/directional/west, /obj/structure/window/spawner/directional/north, -/turf/open/floor/iron{ - heat_capacity = 1e+006 - }, +/turf/open/floor/iron, /area/station/medical/storage) "nyU" = ( /obj/structure/window/reinforced/plasma/spawner/directional/east, @@ -80753,13 +70584,10 @@ /turf/open/floor/iron, /area/station/cargo/lobby) "nzd" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/machinery/washing_machine, +/obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 8 }, -/obj/machinery/washing_machine, /turf/open/floor/iron/cafeteria, /area/station/commons/locker) "nzh" = ( @@ -80772,27 +70600,14 @@ /turf/open/floor/grass, /area/station/service/cafeteria) "nzi" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, /obj/machinery/suit_storage_unit/open, /turf/open/floor/iron/dark, /area/station/engineering/break_room) "nzm" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/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/medical/coldroom) "nzn" = ( @@ -80817,47 +70632,18 @@ "nzp" = ( /turf/open/floor/iron, /area/station/cargo/drone_bay) -"nzt" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "nzv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/dorms) -"nzz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/central/aft) "nzA" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/table/reinforced, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/compact_remote, /obj/item/controller, /obj/item/compact_remote, @@ -80867,9 +70653,7 @@ /turf/open/floor/iron/dark, /area/station/service/chapel) "nzH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/medical/surgery/theatre) "nzJ" = ( @@ -80921,12 +70705,8 @@ /obj/structure/disposalpipe/segment{ dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/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/central) "nAb" = ( @@ -80945,9 +70725,7 @@ "nAl" = ( /obj/machinery/airalarm/directional/south, /obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/exit) "nAr" = ( @@ -81013,17 +70791,15 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs{ dir = 1 }, /area/station/command/gateway) "nBd" = ( /obj/structure/marker_beacon/teal, -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) "nBf" = ( /obj/effect/turf_decal/weather/sand{ @@ -81035,12 +70811,8 @@ /area/station/command/heads_quarters/captain) "nBh" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/security/prison/upper) "nBi" = ( @@ -81062,10 +70834,11 @@ icon_state = "dirt-flat-1" }, /obj/machinery/drone_dispenser, +/obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/science/research/abandoned) "nBu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) @@ -81088,6 +70861,7 @@ "nBJ" = ( /obj/structure/window/spawner/directional/north, /obj/structure/flora/bush/sparsegrass, +/obj/machinery/light/small/directional/west, /turf/open/floor/grass, /area/station/service/chapel) "nBN" = ( @@ -81136,13 +70910,6 @@ }, /turf/open/water/overlay, /area/station/hallway/primary/central) -"nBZ" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/turf/open/floor/iron/dark, -/area/station/security/brig) "nCh" = ( /obj/structure/window/spawner/directional/east, /obj/structure/window/spawner/directional/west, @@ -81193,7 +70960,7 @@ /area/station/command/heads_quarters/rd) "nCA" = ( /obj/effect/turf_decal/bot/right, -/turf/open/floor/iron/dark/small, +/turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) "nCB" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ @@ -81202,12 +70969,8 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/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/surgery) "nCD" = ( @@ -81251,8 +71014,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) "nCS" = ( @@ -81264,12 +71027,8 @@ /obj/machinery/door/airlock/engineering{ name = "Power Access Hatch" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/engineering/engine_equipment, /obj/structure/cable, /turf/open/floor/plating, @@ -81281,16 +71040,16 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "nCZ" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/cargo/storage) "nDa" = ( @@ -81322,16 +71081,20 @@ /obj/machinery/space_heater, /turf/open/floor/plating, /area/station/maintenance/fore/upper) -"nDT" = ( -/obj/effect/turf_decal/tile/red, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 +"nDO" = ( +/obj/effect/turf_decal/caution/stand_clear/blue{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/blue/line{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/window{ + id = "SecMech"; + name = "Security Mechbay Shutters" }, /turf/open/floor/iron/dark, -/area/station/security/brig) +/area/station/security/mechbay) "nDV" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/table/reinforced, @@ -81384,9 +71147,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "nEx" = ( @@ -81418,12 +71179,6 @@ /turf/open/floor/iron, /area/station/hallway/primary/aft) "nEW" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/machinery/light_switch/directional/north, /obj/structure/closet/crate/freezer/blood, /turf/open/floor/iron/white, @@ -81440,12 +71195,8 @@ /area/station/hallway/primary/central) "nFg" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/firedoor, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -81490,12 +71241,6 @@ }, /turf/closed/wall, /area/station/hallway/primary/upper) -"nFq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/security/courtroom) "nFs" = ( /obj/machinery/shower/directional/south, /obj/structure/drain, @@ -81516,15 +71261,13 @@ }, /area/station/command/secure_bunker) "nFF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/command/secure_bunker) "nFJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -81536,8 +71279,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/entry) "nFN" = ( @@ -81630,9 +71373,6 @@ /area/station/maintenance/gamer_lair) "nGv" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/rack, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/emergency_oxygen, @@ -81652,15 +71392,14 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) "nGH" = ( /obj/structure/disposalpipe/sorting/mail{ - name = "Robotics Junction"; - renamedByPlayer = 14 + name = "Robotics Junction" }, /turf/open/floor/iron, /area/station/hallway/primary/upper) @@ -81685,8 +71424,8 @@ "nGQ" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/cafeteria, /area/station/service/kitchen) @@ -81694,12 +71433,8 @@ /obj/structure/chair{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) "nGZ" = ( @@ -81741,12 +71476,8 @@ /area/station/medical/break_room) "nHB" = ( /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/holopad/secure, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) @@ -81776,15 +71507,12 @@ name = "Bar" }, /obj/effect/mapping_helpers/airlock/access/all/service/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/machinery/door/firedoor, /obj/machinery/firealarm/directional/east, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "nIu" = ( @@ -81801,19 +71529,10 @@ /obj/machinery/door/airlock/medical/glass{ name = "Primary Treatment Centre" }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/medical/general, /obj/machinery/duct, +/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "nIB" = ( @@ -81869,15 +71588,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"nIP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/service/hydroponics/garden/abandoned) "nIV" = ( /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood, @@ -81900,19 +71610,9 @@ /turf/open/floor/iron/dark, /area/station/commons/vacant_room/commissary) "nJc" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron/dark/side, /area/station/hallway/primary/port) @@ -81921,41 +71621,26 @@ /obj/machinery/computer/records/security/laptop{ dir = 4 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/camera/directional/north{ c_tag = "Security - Departures Port" }, /obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/security/checkpoint/escape) "nJe" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ name = "Security Shuttlebay" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/security/general, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "nJg" = ( /obj/machinery/door/window/left{ @@ -81966,7 +71651,6 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners{ dir = 8 }, -/obj/effect/turf_decal/siding/yellow/end, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, @@ -82039,8 +71723,8 @@ /obj/structure/cable, /obj/effect/turf_decal/delivery/blue, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/security/general, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -82070,12 +71754,8 @@ /turf/closed/wall/r_wall, /area/station/service/barber/spa) "nKf" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing/corner{ dir = 1 }, @@ -82130,8 +71810,8 @@ dir = 4 }, /obj/effect/turf_decal/tile/yellow, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/chemistry) "nKD" = ( @@ -82141,10 +71821,9 @@ /turf/open/floor/iron, /area/station/engineering/atmos/office) "nKI" = ( -/obj/effect/turf_decal/tile/bar{ +/obj/effect/turf_decal/tile/bar/opposingcorners{ dir = 1 }, -/obj/effect/turf_decal/tile/bar, /turf/open/floor/iron, /area/station/service/bar) "nKJ" = ( @@ -82161,9 +71840,7 @@ /turf/open/floor/iron/dark, /area/station/command/bridge) "nKK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/warehouse) "nKV" = ( @@ -82175,13 +71852,6 @@ }, /turf/open/floor/carpet/lone, /area/station/command/meeting_room/council) -"nKY" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron/dark, -/area/station/security/warden) "nKZ" = ( /obj/machinery/holopad, /turf/open/floor/iron/grimy, @@ -82206,9 +71876,8 @@ pixel_y = 14 }, /turf/open/floor/iron/dark/small, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "nLh" = ( -/obj/effect/turf_decal/bot, /obj/machinery/atmospherics/components/binary/pump/on{ dir = 1; name = "Unfiltered to Mix" @@ -82271,19 +71940,13 @@ /area/station/maintenance/department/science/central) "nLC" = ( /obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/obj/effect/turf_decal/stripes/blue/line{ - dir = 9 - }, /obj/structure/closet/secure_closet/personal, /turf/open/floor/iron/dark, /area/station/security/lockers) "nLF" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/robotics) "nLG" = ( @@ -82314,18 +71977,21 @@ /area/space/nearstation) "nMc" = ( /obj/machinery/light_switch/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/service/chapel) +"nMo" = ( +/obj/machinery/duct, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) "nMD" = ( /obj/structure/table/wood, /obj/item/taperecorder, @@ -82344,12 +72010,6 @@ }, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/captain) -"nMI" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/test_chambers) "nMN" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/curtain/bounty, @@ -82422,23 +72082,9 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"nNF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/security/checkpoint/escape) "nNI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -82475,9 +72121,6 @@ }, /obj/structure/cable, /obj/effect/landmark/start/security_officer, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /turf/open/floor/iron/dark/corner{ dir = 1 }, @@ -82494,32 +72137,9 @@ }, /turf/open/floor/carpet/purple, /area/station/science/breakroom) -"nOc" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "nOf" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/kitchen{ dir = 1 }, @@ -82540,12 +72160,8 @@ name = "Engineering Locker Room" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/break_room) @@ -82554,13 +72170,11 @@ /area/station/science/ordnance) "nOv" = ( /obj/effect/turf_decal/siding/thinplating_new, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) "nOw" = ( -/obj/structure/closet/secure_closet/nanotrasen_consultant/station, +/obj/structure/closet/secure_closet/nanotrasen_consultant, /obj/item/clothing/accessory/medal/silver/bureaucracy, /obj/item/clothing/accessory/medal/gold/nanotrasen_consultant, /obj/item/clothing/accessory/medal/gold/ordom, @@ -82584,29 +72198,15 @@ /obj/effect/turf_decal/stripes{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/command/secure_bunker) "nOF" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/iron/dark, /area/station/maintenance/solars/port/fore) -"nOG" = ( -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) "nOL" = ( /obj/structure/window/spawner/directional/south, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "nOO" = ( @@ -82632,7 +72232,6 @@ /turf/open/floor/plating, /area/station/engineering/supermatter/room) "nPo" = ( -/obj/effect/turf_decal/stripes, /obj/item/chair/plastic, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, @@ -82698,9 +72297,7 @@ "nPY" = ( /obj/structure/cable, /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -82720,7 +72317,6 @@ /turf/open/floor/iron, /area/station/maintenance/starboard/fore) "nQh" = ( -/obj/effect/turf_decal/stripes/box, /obj/machinery/processor, /obj/structure/table, /turf/open/floor/iron/dark, @@ -82765,8 +72361,8 @@ /turf/open/floor/wood, /area/station/hallway/primary/central) "nQA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -82840,12 +72436,8 @@ /turf/open/floor/iron/dark/side, /area/station/hallway/primary/upper) "nRc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/airalarm/directional/north, /obj/structure/window/reinforced/spawner/directional/east, @@ -82857,22 +72449,14 @@ dir = 8 }, /obj/machinery/door/airlock/wood, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/wood/parquet, /area/station/command/heads_quarters/nt_rep) "nRk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -82880,8 +72464,8 @@ /area/station/service/lawoffice) "nRo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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, /turf/open/floor/carpet, @@ -82930,18 +72514,8 @@ /area/station/command/gateway) "nRJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - 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, /area/station/medical/treatment_center) "nRW" = ( @@ -82960,8 +72534,8 @@ /obj/structure/lattice/catwalk, /obj/item/trash/raisins, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/openspace, /area/station/maintenance/department/medical/central) "nSh" = ( @@ -82972,9 +72546,15 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron, /area/station/maintenance/abandon_holding_cell) +"nSj" = ( +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/hallway/primary/port) "nSk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/chapel) "nSl" = ( @@ -83001,12 +72581,8 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark, @@ -83018,16 +72594,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"nSx" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/station/cargo/storage) "nSD" = ( /obj/structure/chair/plastic, /turf/open/floor/plating, @@ -83057,18 +72623,15 @@ /turf/open/floor/iron/dark, /area/station/maintenance/department/engineering/atmos_aux_port) "nSQ" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/machinery/firealarm/directional/west{ pixel_x = -27; pixel_y = 24 }, /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -83101,7 +72664,6 @@ /area/station/hallway/secondary/entry) "nSZ" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/engine, /area/station/science/xenobiology) "nTd" = ( @@ -83114,9 +72676,7 @@ "nTe" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -83127,12 +72687,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/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/abandon_exam/cat) "nTj" = ( @@ -83151,12 +72707,8 @@ /area/station/maintenance/department/security/prison_upper) "nTw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/hos{ name = "Head Of Security's Quarters" }, @@ -83177,23 +72729,13 @@ "nTC" = ( /obj/structure/window/reinforced/tinted/spawner/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/common/night_club) "nTK" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/kitchen{ dir = 1 @@ -83213,25 +72755,14 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/central) "nTO" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/commons/locker) -"nTP" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "nTR" = ( /obj/structure/easel, /obj/item/canvas/twentythree_twentythree, @@ -83313,7 +72844,6 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "nUx" = ( -/obj/effect/turf_decal/bot, /obj/structure/rack/shelf, /obj/item/crowbar, /obj/item/gps/engineering{ @@ -83331,18 +72861,10 @@ /obj/structure/chair{ pixel_y = -2 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark, +/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/warden) "nUG" = ( /obj/structure/flora/bush/grassy, @@ -83350,12 +72872,8 @@ /area/station/service/chapel) "nUH" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/security/prison/upper) @@ -83365,20 +72883,12 @@ /turf/open/floor/plating, /area/station/command/secure_bunker) "nUM" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/security/brig) "nUQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/spawner/random/trash/mess, /obj/structure/cable, /turf/open/floor/plating, @@ -83395,12 +72905,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/maintenance/abandon_exam/cat) @@ -83408,8 +72914,8 @@ /obj/machinery/door/airlock{ name = "Commentator Studio" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/common/wrestling/arena) @@ -83418,8 +72924,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/sign/poster/contraband/random/directional/east, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, @@ -83441,9 +72947,7 @@ }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -83473,12 +72977,8 @@ /turf/closed/wall/r_wall, /area/station/science/research) "nVB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/stairs/medium{ dir = 4 @@ -83490,32 +72990,20 @@ "nVQ" = ( /obj/effect/turf_decal/caution/stand_clear, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/gateway) "nVU" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/wood, /area/station/medical/patients_rooms) "nWa" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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) @@ -83535,12 +73023,8 @@ "nWe" = ( /obj/effect/turf_decal/bot, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/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/gateway) "nWi" = ( @@ -83566,12 +73050,8 @@ /area/station/engineering/atmos/pumproom) "nWx" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -83602,16 +73082,12 @@ /area/station/science) "nWI" = ( /obj/structure/table/reinforced, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_y = 8 }, /obj/item/flashlight/seclite, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/office) "nWK" = ( @@ -83627,22 +73103,14 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/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/upper) "nWR" = ( /obj/effect/turf_decal/siding/blue, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark/textured_edge, /area/station/security/prison/garden) @@ -83652,13 +73120,10 @@ /turf/open/floor/iron/dark/side, /area/station/security/lockers) "nXd" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 8 }, -/obj/structure/cable, /turf/open/floor/iron/dark, /area/station/command/bridge) "nXn" = ( @@ -83713,7 +73178,6 @@ /obj/effect/turf_decal/vg_decals/atmos/oxygen{ dir = 1 }, -/obj/effect/turf_decal/bot_white, /turf/open/floor/engine/o2, /area/station/engineering/atmos) "nXP" = ( @@ -83728,14 +73192,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/hallway/primary/central/fore) -"nXU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "nXV" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -83762,7 +73218,9 @@ /area/space/nearstation) "nYF" = ( /obj/machinery/chem_dispenser, -/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "nYM" = ( @@ -83771,7 +73229,6 @@ /turf/open/floor/iron, /area/station/hallway/secondary/service) "nYP" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/table/wood/fancy/black, /obj/item/reagent_containers/cup/glass/bottle/champagne{ pixel_x = 4; @@ -83781,6 +73238,9 @@ pixel_x = -5; pixel_y = 3 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) "nYQ" = ( @@ -83802,20 +73262,9 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/wood, /area/station/service/library) -"nYT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/lobby) "nYU" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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) @@ -83837,19 +73286,13 @@ /turf/open/floor/iron/dark, /area/station/science/robotics) "nZe" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron, /area/station/commons/storage/primary) "nZg" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/item/airlock_painter, /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron/dark, @@ -83858,6 +73301,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, +/obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage) "nZi" = ( @@ -83895,10 +73339,8 @@ /area/station/common/arcade) "nZt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/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/carpet/blue, /area/station/command/heads_quarters/captain/private) @@ -83967,9 +73409,6 @@ /turf/open/floor/iron/white/small, /area/station/medical/break_room) "nZT" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/machinery/power/smes{ capacity = 9e+006; charge = 10000 @@ -83978,35 +73417,21 @@ /turf/open/floor/iron/dark, /area/station/engineering/atmos/test_chambers) "oag" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/corner{ dir = 4 }, /area/station/hallway/secondary/exit) "oak" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/commons/dorms/room7) "oaq" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, /area/station/security/brig) "oar" = ( /turf/open/floor/iron/dark, @@ -84028,7 +73453,7 @@ /turf/open/floor/iron, /area/station/security/prison/upper) "oax" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/genetics) "oaG" = ( @@ -84055,12 +73480,8 @@ "obc" = ( /obj/structure/flora/bush/sparsegrass, /obj/structure/flora/bush/flowers_yw, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/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/chapel) "obf" = ( @@ -84079,9 +73500,7 @@ /obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ dir = 4 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "obn" = ( /obj/machinery/door/firedoor, @@ -84092,21 +73511,13 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/lobby) "obq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/royalblack, /area/station/service/chapel/office) "obs" = ( @@ -84114,12 +73525,8 @@ /turf/open/floor/grass, /area/station/security/prison/garden) "obz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/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{ icon_state = "dirt-flat-1" @@ -84128,12 +73535,8 @@ /area/station/service/chapel/funeral) "obB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/science/ordnance) @@ -84145,12 +73548,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/security/greater) "obJ" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/structure/chair, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -84164,12 +73561,8 @@ /turf/open/floor/wood/parquet, /area/station/common/gaskiosk) "obQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -84179,7 +73572,7 @@ /obj/structure/chair{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/courtroom) "obU" = ( @@ -84189,25 +73582,15 @@ /turf/open/floor/carpet, /area/station/security/detectives_office) "occ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/railing{ dir = 4 }, /obj/machinery/light/directional/north, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "oci" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 }, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -84221,16 +73604,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"ocp" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "ocu" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -84247,9 +73620,9 @@ pixel_x = 3; pixel_y = 3 }, -/obj/item/storage/secure/briefcase, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/item/storage/briefcase/secure, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/courtroom) "ocy" = ( @@ -84260,12 +73633,8 @@ /turf/open/floor/iron/dark, /area/station/service/library/lounge) "ocz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -84277,9 +73646,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "ocN" = ( /obj/structure/trash_pile, @@ -84304,12 +73671,6 @@ /area/station/service/lawoffice) "odb" = ( /obj/effect/turf_decal/trimline/blue/line, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -84325,9 +73686,7 @@ dir = 8 }, /obj/effect/landmark/start/station_engineer, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/break_room) "odl" = ( @@ -84342,16 +73701,6 @@ /obj/effect/decal/cleanable/blood/old, /turf/open/floor/iron/freezer, /area/station/maintenance/abandon_kitchen_upper) -"odn" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "odo" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -84366,8 +73715,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/mineral/plastitanium/red, /area/station/science/robotics/lab) "odv" = ( @@ -84412,24 +73761,15 @@ /turf/open/floor/iron/stairs/left, /area/station/hallway/primary/central) "odP" = ( -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, /obj/item/kirbyplants/organic/plant22, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 8 - }, /obj/machinery/camera/directional/west{ c_tag = "Security - Head of Security's Office" }, /obj/structure/disposalpipe/segment, /obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/tile/red/real_red/anticorner/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "odQ" = ( @@ -84470,12 +73810,8 @@ pixel_y = 4 }, /obj/item/clothing/shoes/magboots, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) "oer" = ( @@ -84504,12 +73840,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/lobby) "oeB" = ( @@ -84522,21 +73854,13 @@ /area/station/maintenance/aux_eva) "oeI" = ( /obj/effect/decal/cleanable/blood/old, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/starboard/fore) "oeK" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /obj/machinery/camera/directional/west{ c_tag = "Engineering - Secure Storage Upper"; name = "engineering camera" @@ -84564,12 +73888,8 @@ /turf/open/floor/engine, /area/station/engineering/supermatter/room) "oeN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/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) "oeQ" = ( @@ -84578,12 +73898,8 @@ }, /area/station/common/night_club) "oeS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/hallway/secondary/exit/departure_lounge) "oeZ" = ( @@ -84602,24 +73918,10 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"ofc" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "ofd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall1"; location = "hall22" @@ -84696,12 +73998,10 @@ /turf/open/floor/iron/dark, /area/station/security/checkpoint/supply) "ofS" = ( -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/hydroponics, /turf/open/floor/iron/dark, /area/station/service/hydroponics) "ofT" = ( -/obj/effect/turf_decal/bot, /obj/structure/table/glass, /obj/item/seeds/wheat{ pixel_x = 6 @@ -84714,10 +74014,6 @@ /obj/item/food/grown/watermelon, /obj/item/food/grown/grapes, /obj/item/food/grown/tomato, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -84727,8 +74023,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/sign/nanotrasen{ pixel_x = -32 }, @@ -84744,7 +74040,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/power_station) "ogj" = ( @@ -84752,16 +74048,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/eva) -"ogl" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "ogq" = ( /obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 8 @@ -84798,12 +74084,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/upper) "ogw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -84832,11 +74114,8 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) "ogD" = ( -/obj/effect/turf_decal/stripes, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/solars/starboard/fore) "ogN" = ( @@ -84878,12 +74157,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -84910,8 +74185,8 @@ /turf/open/floor/iron/dark, /area/station/security/checkpoint/supply) "ohd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/medical/psychology) "ohg" = ( @@ -84928,9 +74203,7 @@ /area/station/hallway/primary/central) "ohj" = ( /obj/effect/turf_decal/stripes/white/line, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "ohk" = ( /obj/structure/bookcase/random/nonfiction, @@ -85013,16 +74286,6 @@ /obj/structure/table, /turf/open/floor/wood, /area/station/service/kitchen/diner) -"ohJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/duct, -/turf/open/floor/wood/parquet, -/area/station/command/heads_quarters/nt_rep) "ohK" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/poddoor/shutters/preopen{ @@ -85033,9 +74296,6 @@ /area/station/medical/exam_room) "ohL" = ( /obj/machinery/computer/teleporter, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/effect/turf_decal/stripes/blue/line{ dir = 5 }, @@ -85060,12 +74320,8 @@ "oib" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/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) "oic" = ( @@ -85092,8 +74348,8 @@ /turf/open/floor/iron, /area/station/security/execution/transfer) "oil" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) @@ -85125,15 +74381,11 @@ name = "RnD Cell"; req_access = list("security") }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science/research) "oiz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) "oiD" = ( @@ -85173,7 +74425,7 @@ network = list("ss13","medbay") }, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs, /area/station/medical/cryo) "oiQ" = ( @@ -85195,12 +74447,8 @@ /area/station/security/prison) "oiX" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/solars/port/fore) "ojg" = ( @@ -85230,18 +74478,6 @@ /obj/item/modular_computer/laptop/preset/civilian, /turf/open/floor/carpet/blue, /area/station/service/lawoffice) -"ojC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "ojG" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark/corner{ @@ -85263,13 +74499,12 @@ /turf/open/space/openspace, /area/space/nearstation) "ojS" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/comfy/brown{ dir = 8 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/prison/mess) "ojU" = ( @@ -85287,8 +74522,8 @@ /obj/machinery/door/airlock/security/glass{ name = "Prison Sanitarium" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/security/brig, /turf/open/floor/iron/white/side, /area/station/security/prison) @@ -85296,13 +74531,6 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "oke" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -85329,9 +74557,7 @@ /area/station/medical/chemistry) "okr" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/checkpoint/customs/auxiliary) "oky" = ( @@ -85346,8 +74572,8 @@ /obj/machinery/status_display/evac/directional/east, /obj/structure/cable, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -85390,23 +74616,9 @@ /turf/open/floor/iron, /area/station/service/hydroponics) "okJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/service/hydroponics) -"okL" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "okO" = ( /obj/structure/chair/sofa/left/brown{ dir = 4 @@ -85418,20 +74630,11 @@ /obj/machinery/light/directional/west, /turf/open/floor/wood/parquet, /area/station/service/theater) -"okV" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "okY" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 10 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "okZ" = ( /obj/structure/girder, @@ -85454,9 +74657,7 @@ dir = 2 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - 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/lobby) @@ -85478,6 +74679,16 @@ /obj/item/reagent_containers/cup/glass/bottle/hooch, /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) +"olk" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/chair/stool/bar/directional/south, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/service/kitchen/diner) "olm" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating/airless, @@ -85494,9 +74705,7 @@ /turf/open/floor/iron/dark, /area/station/hallway/secondary/service) "olu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/stripes/corner{ dir = 8 }, @@ -85507,31 +74716,12 @@ dir = 4 }, /area/station/hallway/primary/upper) -"olz" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "olF" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /turf/open/floor/mineral/plastitanium/red, /area/station/science/robotics/lab) -"olG" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/engine{ - icon_state = "floor" - }, -/area/station/science/ordnance) "olH" = ( /obj/structure/chair/pew/left{ dir = 8 @@ -85556,6 +74746,11 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/carpet/royalblack, /area/station/commons/dorms/room8) +"olW" = ( +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/station/hallway/primary/port) "oma" = ( /obj/structure/girder/displaced, /obj/effect/decal/cleanable/dirt{ @@ -85613,12 +74808,8 @@ /area/station/science/xenobiology) "omt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -85630,12 +74821,8 @@ /turf/open/floor/iron, /area/station/maintenance/thruster_room/central) "omD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -85647,7 +74834,6 @@ /obj/item/clothing/neck/stethoscope, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "omM" = ( @@ -85663,20 +74849,10 @@ /area/station/maintenance/department/eva) "omQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/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, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"omR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/security/prison/safe) "omT" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -85685,12 +74861,8 @@ /turf/open/floor/engine, /area/station/engineering/supermatter) "omU" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/computer/monitor, /turf/open/floor/iron/smooth, @@ -85723,12 +74895,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -85761,12 +74929,8 @@ /turf/open/floor/iron/dark, /area/station/command/heads_quarters/blueshield) "onB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ @@ -85775,14 +74939,13 @@ /turf/open/floor/iron/dark, /area/station/security/office) "onF" = ( -/obj/effect/turf_decal/bot, /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/iron/dark, /area/station/engineering/atmos/pumproom) "onG" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/checker, /area/station/service/janitor) @@ -85790,12 +74953,11 @@ /obj/structure/table, /obj/item/storage/box/lights/mixed, /obj/item/pipe_dispenser, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /obj/structure/cable, /obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron, /area/station/construction/mining/aux_base) "onO" = ( @@ -85847,28 +75009,16 @@ /obj/effect/decal/cleanable/blood/tracks{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, /obj/structure/cable, /turf/open/floor/mineral/plastitanium/red, /area/station/maintenance/cult_chapel_maint) "ook" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron, /area/station/construction/mining/aux_base) "oom" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/blobstart, /turf/open/floor/iron, /area/station/hallway/primary/port) @@ -85895,25 +75045,12 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) -"ooA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/central/aft) "ooB" = ( /obj/machinery/door/airlock/corporate{ name = "Representative's Quarters" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -85929,13 +75066,12 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/engine_smes) "ooG" = ( -/obj/effect/turf_decal/bot, /obj/machinery/atmospherics/components/binary/pump/on{ dir = 1; name = "Air to Distro" @@ -85973,9 +75109,6 @@ /area/station/science/xenobiology/hallway) "ooY" = ( /obj/machinery/teleport/hub, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /obj/effect/turf_decal/stripes/blue/line{ dir = 9 }, @@ -85991,17 +75124,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron/dark/textured_large, /area/station/ai_monitored/turret_protected/aisat_interior) -"ooZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "opb" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/structure/cable, @@ -86022,7 +75144,7 @@ }, /obj/structure/curtain/bounty/start_closed, /turf/open/floor/iron/dark/herringbone, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "opw" = ( /obj/machinery/door/window/left{ dir = 4; @@ -86059,7 +75181,7 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) "opJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -86074,10 +75196,7 @@ /area/station/medical/patients_rooms) "opP" = ( /obj/structure/grille, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "opY" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -86101,9 +75220,7 @@ name = "Exam Room Privacy Shutters"; pixel_x = -6 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/button/door/directional/north{ id = "ExamRoom"; name = "Door Lock"; @@ -86122,10 +75239,8 @@ /area/station/hallway/primary/starboard) "oqi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/checkpoint/medical) "oql" = ( @@ -86147,21 +75262,13 @@ /turf/open/floor/plating, /area/station/maintenance/port/aft) "oqu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/security/prison/visit) "oqw" = ( /obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /turf/open/floor/iron/dark, /area/station/security/brig) "oqz" = ( @@ -86176,12 +75283,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction/flip{ dir = 2 }, @@ -86191,21 +75294,11 @@ /obj/structure/flora/bush/reed, /turf/open/water/overlay, /area/station/hallway/primary/central) -"oqK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/science/research) "oqM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance/testlab) "oqO" = ( /obj/effect/spawner/liquids_spawner{ @@ -86223,12 +75316,8 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark, @@ -86236,10 +75325,8 @@ "oqU" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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) "oqZ" = ( @@ -86259,16 +75346,13 @@ /area/station/security/prison/upper) "orn" = ( /obj/effect/turf_decal/vg_decals/numbers/three, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "orp" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/machinery/duct, @@ -86276,10 +75360,8 @@ /area/station/maintenance/department/medical/morgue) "ort" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hallup2"; location = "hallup1" @@ -86294,9 +75376,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, /turf/open/floor/iron/smooth_corner{ dir = 4 }, @@ -86348,9 +75427,7 @@ /obj/effect/turf_decal/trimline/green/filled/warning{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/virology/isolation) "osb" = ( @@ -86359,9 +75436,7 @@ name = "Prisoner Processing Blast Door" }, /obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark/side{ dir = 8 @@ -86431,12 +75506,8 @@ name = "medbay camera"; network = list("ss13","medbay") }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/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/medical/medbay/central) "osE" = ( @@ -86451,10 +75522,8 @@ /area/station/engineering/supermatter/room) "osN" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/checkpoint/science/research) "osQ" = ( @@ -86481,8 +75550,8 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "otd" = ( @@ -86493,9 +75562,6 @@ /area/station/science/auxlab/firing_range) "otk" = ( /obj/machinery/photocopier, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /obj/machinery/light/directional/north, /obj/machinery/status_display/ai/directional/north, /obj/effect/turf_decal/stripes/blue/line{ @@ -86515,7 +75581,6 @@ /area/station/hallway/secondary/exit) "otv" = ( /obj/effect/decal/cleanable/blood/old, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/mineral/plastitanium, /area/station/maintenance/cult_chapel_maint) "otE" = ( @@ -86539,12 +75604,8 @@ /area/station/service/lawoffice) "otN" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -86555,14 +75616,13 @@ /turf/open/floor/iron, /area/station/commons/dorms) "otQ" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/pew/left{ dir = 4 }, /obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/prison/mess) "otS" = ( @@ -86614,7 +75674,7 @@ /obj/structure/railing/corner/end{ dir = 8 }, -/obj/structure/railing/corner/end{ +/obj/structure/railing/corner/end/flip{ dir = 4 }, /turf/open/floor/iron/dark, @@ -86629,7 +75689,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth_edge{ dir = 8 }, @@ -86645,12 +75705,8 @@ }, /area/station/security/prison) "ouM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -86660,7 +75716,7 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth_edge{ dir = 4 }, @@ -86713,9 +75769,6 @@ /obj/effect/turf_decal/tile/red/half{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 9 }, @@ -86738,17 +75791,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"ovN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/science/robotics) "ovO" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -86769,12 +75811,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/aft/upper) "ovW" = ( @@ -86847,12 +75885,8 @@ /turf/open/floor/iron, /area/station/service/hydroponics) "owK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/aisat_interior) "owM" = ( @@ -86881,12 +75915,8 @@ /area/station/ai_monitored/turret_protected/aisat_interior) "owN" = ( /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -86895,6 +75925,9 @@ /obj/machinery/door/airlock/hydroponics/glass{ name = "Hydroponics" }, +/obj/effect/turf_decal/tile/green/tram{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/service/hydroponics) "owP" = ( @@ -86926,21 +75959,15 @@ dir = 10 }, /obj/structure/chair/sofa/corp/corner, -/obj/item/clothing/suit/costume/wellworn_shirt/messy/graphic/gamer{ - pixel_x = -4 - }, /obj/machinery/light/small/blacklight/directional/east, /obj/effect/landmark/start/bitrunner, /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/dark/small, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "owS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -86968,12 +75995,8 @@ /turf/open/floor/iron/white, /area/station/medical/surgery) "oxB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/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/central) "oxF" = ( @@ -87011,12 +76034,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -87035,23 +76054,12 @@ "oyh" = ( /obj/structure/window/spawner/directional/south, /obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/tile/purple{ +/obj/structure/closet/secure_closet/barber, +/obj/effect/turf_decal/tile/purple/opposingcorners{ dir = 1 }, -/obj/effect/turf_decal/tile/purple, -/obj/structure/closet/secure_closet/barber, /turf/open/floor/iron, /area/station/service/barber) -"oyj" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "oym" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -87074,9 +76082,6 @@ /area/station/service/library) "oyw" = ( /obj/machinery/power/smes/engineering, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /obj/machinery/status_display/ai/directional/west, /obj/structure/cable, /turf/open/floor/iron/dark, @@ -87110,12 +76115,8 @@ /turf/open/floor/carpet, /area/station/common/tailoring) "oyI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "oyK" = ( @@ -87126,17 +76127,11 @@ /turf/open/floor/wood, /area/station/service/library/printer) "oyN" = ( -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/brig, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -87146,12 +76141,8 @@ name = "Holding Cell"; req_access = list("brig") }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/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/checkpoint/escape) "ozb" = ( @@ -87164,32 +76155,16 @@ /obj/effect/turf_decal/siding/wood{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) -"ozj" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/command/bridge) "ozm" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/engine_smes) @@ -87198,22 +76173,14 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 2 }, /turf/open/floor/iron/white, /area/station/science/research) "ozu" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/pew/left{ dir = 4 }, @@ -87264,12 +76231,8 @@ "oAd" = ( /obj/structure/extinguisher_cabinet/directional/north, /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -87278,20 +76241,9 @@ dir = 8 }, /area/station/command/heads_quarters/nt_rep) -"oAg" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/command/bridge) "oAu" = ( /obj/structure/chair/sofa/middle/brown, /obj/structure/window/spawner/directional/north, -/obj/effect/landmark/start/assistant, /turf/open/floor/wood, /area/station/service/bar/atrium) "oAv" = ( @@ -87300,9 +76252,7 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "oAC" = ( @@ -87419,20 +76369,10 @@ /turf/open/floor/plating/airless, /area/station/maintenance/port/upper) "oBp" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload) "oBt" = ( /obj/structure/window/reinforced/fulltile, @@ -87479,19 +76419,15 @@ /turf/open/floor/plating, /area/station/maintenance/department/security) "oBE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/crew_quarters/dorms) "oBI" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "oBJ" = ( @@ -87509,18 +76445,12 @@ id = "Luggagebelt" }, /obj/structure/plasticflaps, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/security/checkpoint) "oBP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/carpet/blue, /area/station/medical/break_room) @@ -87563,17 +76493,16 @@ /area/station/tcommsat/server) "oCd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/service/library/printer) "oCh" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 }, /turf/open/floor/iron, /area/station/engineering/main) @@ -87609,21 +76538,10 @@ "oCx" = ( /turf/closed/wall/r_wall, /area/station/maintenance/gag_room) -"oCy" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/dark, -/area/station/security/prison/upper) "oCG" = ( /obj/effect/turf_decal/trimline/purple/filled/line, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -87644,12 +76562,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/sign/poster/contraband/random/directional/south, /obj/machinery/duct, /turf/open/floor/plating, @@ -87664,15 +76578,6 @@ /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/closet/crate/bin, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) @@ -87689,31 +76594,32 @@ /obj/structure/cable, /turf/open/floor/carpet, /area/station/service/cafeteria) -"oDr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/common/wrestling/arena) "oDt" = ( /obj/item/kirbyplants/random, /obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/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) "oDw" = ( +/obj/structure/sign/directions/evac{ + dir = 8; + pixel_y = -10 + }, +/obj/structure/sign/directions/supply{ + dir = 4; + pixel_y = -4 + }, +/obj/structure/sign/directions/engineering{ + dir = 4; + pixel_y = 2 + }, +/obj/structure/sign/directions/security{ + dir = 4; + pixel_y = 8 + }, /turf/closed/wall, -/area/station/maintenance/salon/lower) +/area/station/service/forge) "oDz" = ( /turf/closed/wall/r_wall, /area/station/security/checkpoint/escape) @@ -87736,29 +76642,27 @@ /area/station/security/corrections_officer) "oDH" = ( /obj/machinery/disposal/bin, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/disposalpipe/trunk{ dir = 2 }, /obj/structure/disposalpipe/trunk{ dir = 4 }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "oDK" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/space_heater, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" +/obj/effect/turf_decal/siding/wood{ + dir = 8 }, -/turf/open/floor/plating, -/area/station/maintenance/salon/lower) +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/service/forge) "oDV" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/carbon_input{ dir = 1 @@ -87770,23 +76674,13 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/hallway/primary/aft) "oEl" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -87801,12 +76695,8 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/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/department/crew_quarters/bar) "oEw" = ( @@ -87814,12 +76704,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "oEx" = ( @@ -87866,14 +76752,10 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/lower) "oFo" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 5 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 4 }, /turf/open/floor/iron/white, @@ -87889,15 +76771,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) -"oFD" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/iron, -/area/station/maintenance/aux_eva) "oFH" = ( /obj/machinery/door/firedoor/heavy, /obj/machinery/door/airlock/atmos/glass{ @@ -87914,7 +76787,7 @@ "oFI" = ( /obj/structure/railing/corner/end/flip, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, /area/station/cargo/miningdock) "oFJ" = ( @@ -87947,20 +76820,14 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/cytology) "oGm" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -87984,28 +76851,14 @@ /area/station/security/checkpoint/escape) "oGp" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/vg_decals/numbers/one, /turf/open/floor/iron, /area/station/hallway/primary/central) "oGA" = ( /turf/closed/wall/r_wall, /area/station/maintenance/solars/port/fore) -"oGE" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "oGF" = ( /obj/structure/rack, /obj/effect/turf_decal/bot, @@ -88021,12 +76874,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -88043,16 +76892,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/open/floor/plating, /area/station/maintenance/port/upper) -"oGI" = ( -/obj/structure/chair/sofa/bench{ - dir = 4; - pixel_x = -5 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/hallway/secondary/entry) "oGK" = ( /obj/effect/spawner/random/maintenance, /obj/structure/cable, @@ -88103,12 +76942,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/glass, /area/station/hallway/primary/upper) -"oHn" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, -/turf/open/floor/plating/airless, -/area/station/maintenance/port/upper) "oHq" = ( /obj/structure/curtain/cloth, /obj/structure/drain, @@ -88188,9 +77021,6 @@ /area/station/cargo/miningdock) "oHS" = ( /obj/machinery/power/smes/engineering, -/obj/effect/turf_decal/stripes{ - dir = 5 - }, /obj/machinery/status_display/evac/directional/west, /obj/structure/cable, /turf/open/floor/iron/dark, @@ -88203,12 +77033,6 @@ /turf/open/floor/iron/dark, /area/station/service/library) "oIe" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/machinery/washing_machine, /obj/machinery/status_display/ai/directional/north, /obj/machinery/light/directional/north, @@ -88229,12 +77053,6 @@ name = "Forbidden Chapel" }, /obj/structure/barricade/wooden, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, /turf/open/floor/iron/dark, @@ -88245,8 +77063,8 @@ }, /obj/structure/closet, /obj/item/fuel_pellet/advanced, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/small/broken/directional/east, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) @@ -88280,18 +77098,12 @@ pixel_y = 16 }, /obj/machinery/light/directional/west, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "oIw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs{ dir = 8 }, @@ -88328,14 +77140,11 @@ "oIW" = ( /obj/effect/turf_decal/bot_white, /obj/item/banner/command/mundane, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/machinery/light/small/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/captain) "oJc" = ( @@ -88349,14 +77158,6 @@ /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/plating, /area/station/command/secure_bunker) -"oJf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "oJg" = ( /turf/closed/wall, /area/station/engineering/storage_shared) @@ -88378,9 +77179,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/radio/intercom/directional/south, /turf/open/floor/wood/parquet, /area/station/common/night_club) @@ -88408,35 +77207,15 @@ /obj/machinery/door/airlock/medical{ name = "Ward Controll Room" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/medical/psychology, /turf/open/floor/iron, /area/station/medical/psychology) -"oJK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "oJY" = ( /obj/structure/falsewall/reinforced, /turf/open/floor/plating, /area/station/command/secure_bunker) -"oKc" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/station/cargo/miningdock) "oKi" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 8 @@ -88499,8 +77278,8 @@ }, /obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/side{ dir = 4 }, @@ -88526,12 +77305,8 @@ pixel_x = 22; pixel_y = 21 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/button/door/directional/north{ id = "HoPdoor"; name = "HoP Door Lock"; @@ -88548,12 +77323,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/freezer, /area/station/maintenance/abandon_kitchen_upper) "oKF" = ( @@ -88570,15 +77341,8 @@ }, /area/station/maintenance/disposal/incinerator) "oKN" = ( -/obj/effect/turf_decal/bot, /obj/structure/reagent_dispensers/watertank/high, /obj/item/radio/intercom/directional/east, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/item/reagent_containers/cup/watering_can, /turf/open/floor/iron/dark/side{ dir = 4 @@ -88592,8 +77356,8 @@ /obj/effect/turf_decal/siding/wood, /obj/structure/cable, /obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/carpet, @@ -88608,9 +77372,6 @@ name = "Solar Maintenance" }, /obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/unres, /obj/structure/sign/warning/electric_shock/directional/east, @@ -88755,17 +77516,6 @@ }, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) -"oMy" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "oMC" = ( /obj/structure/bed, /obj/item/bedsheet/mime, @@ -88785,21 +77535,14 @@ /obj/machinery/door/airlock/security/glass{ name = "Equipment Room" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/security/general, /turf/open/floor/iron/dark/side{ dir = 4 }, /area/station/security/lockers) "oML" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /obj/structure/railing{ dir = 6 }, @@ -88814,7 +77557,7 @@ color = "#DE3A3A"; dir = 1 }, -/obj/structure/railing/corner/end/flip{ +/obj/structure/railing/corner/end{ dir = 4 }, /obj/structure/railing/corner/end/flip{ @@ -88834,27 +77577,17 @@ /obj/structure/disposalpipe/segment, /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos) "oNc" = ( -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, /obj/machinery/light/floor, -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "oNh" = ( /obj/effect/turf_decal/delivery/white, -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) "oNk" = ( /obj/structure/flora/bush/grassy, @@ -88885,23 +77618,10 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/department/medical/central) -"oNA" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/aft) "oNC" = ( /obj/structure/table/wood/poker, /obj/effect/spawner/random/entertainment/gambling, @@ -88988,7 +77708,7 @@ /obj/structure/closet/secure_closet/contraband/heads, /obj/effect/turf_decal/bot, /obj/item/storage/box/ids, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/machinery/airalarm/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -89055,10 +77775,6 @@ "oPc" = ( /obj/effect/turf_decal/bot, /obj/machinery/photocopier, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /obj/machinery/newscaster/directional/east, @@ -89070,16 +77786,6 @@ /obj/item/book/manual/wiki/security_space_law, /turf/open/floor/iron, /area/station/security/courtroom) -"oPg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/prison) "oPn" = ( /obj/machinery/power/shuttle_engine/heater{ dir = 4 @@ -89160,13 +77866,10 @@ }, /area/station/service/chapel) "oPZ" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/purple/half, /turf/open/floor/iron, /area/station/hallway/primary/upper) "oQc" = ( @@ -89202,19 +77905,6 @@ /turf/open/floor/iron/dark, /area/station/service/barber) "oQq" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/structure/table/wood, /obj/item/flashlight/lamp/bananalamp{ pixel_y = 16 @@ -89236,13 +77926,10 @@ /area/station/hallway/secondary/service) "oQD" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ +/obj/structure/closet/secure_closet/security/cargo, +/obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 8 }, -/obj/structure/closet/secure_closet/security/cargo, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -89274,15 +77961,15 @@ "oQI" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/break_room) "oQO" = ( /obj/effect/turf_decal/stripes/white/line, /obj/structure/railing, /turf/closed/wall, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "oQQ" = ( /obj/machinery/dish_drive/bullet, /obj/effect/turf_decal/delivery, @@ -89290,19 +77977,15 @@ /turf/open/floor/iron, /area/station/science/auxlab/firing_range) "oQT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/escapepodbay) "oQY" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -89341,12 +78024,8 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "oRw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/medical/psychology) "oRy" = ( @@ -89367,7 +78046,7 @@ /turf/open/floor/iron, /area/station/engineering/break_room) "oSe" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/brig) "oSf" = ( @@ -89459,7 +78138,7 @@ }, /obj/structure/railing, /turf/closed/wall, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "oSX" = ( /turf/open/floor/iron/dark, /area/station/security/corrections_officer) @@ -89472,21 +78151,11 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "oTc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/stairs, /area/station/science/xenobiology) -"oTe" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/command/bridge) "oTg" = ( /turf/open/floor/iron/dark/side{ dir = 1 @@ -89517,23 +78186,15 @@ /area/station/medical/patients_rooms) "oTC" = ( /obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/atmospherics, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/engineering/atmos/office) "oTH" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -89547,12 +78208,8 @@ /area/station/security/brig) "oTW" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/ai_monitored/aisat/exterior) "oUd" = ( @@ -89560,8 +78217,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -89596,7 +78253,6 @@ }, /area/station/science/circuits) "oUr" = ( -/obj/effect/spawner/random/structure/steam_vent, /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 10 @@ -89661,12 +78317,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -89674,16 +78326,6 @@ /turf/open/floor/iron, /area/station/commons/locker) "oUI" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/computer/records/security{ dir = 1 }, @@ -89717,26 +78359,11 @@ /turf/open/floor/wood, /area/station/commons/dorms/room5) "oUN" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/structure/chair/stool/bar/directional/north, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "oUO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron, /area/station/common/locker_room_shower) @@ -89747,25 +78374,14 @@ /obj/effect/turf_decal/delivery/blue, /obj/structure/cable, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/effect/mapping_helpers/airlock/access/all/security/armory, /turf/open/floor/iron/dark, /area/station/security/warden) -"oUU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "oVd" = ( /obj/structure/chair/sofa/bench{ dir = 8; @@ -89788,7 +78404,7 @@ /area/station/medical/morgue) "oVJ" = ( /obj/machinery/suit_storage_unit/cmo, -/obj/effect/turf_decal/stripes, +/obj/effect/turf_decal/siding/wood, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) "oVN" = ( @@ -89842,12 +78458,8 @@ /area/station/ai_monitored/command/nuke_storage) "oVX" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/cargo/miningoffice) @@ -89861,12 +78473,7 @@ "oWi" = ( /obj/structure/table/glass, /obj/item/modular_computer/laptop/preset/civilian, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/xenobiology/control) "oWj" = ( @@ -89881,16 +78488,6 @@ /turf/open/floor/iron/dark, /area/station/command/gateway) "oWl" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/table, /obj/item/ai_module/supplied/quarantine{ pixel_x = 3; @@ -89903,7 +78500,7 @@ }, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload) "oWx" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted, @@ -89933,12 +78530,8 @@ }, /obj/structure/chair/office, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/maintenance/abandon_office) "oWJ" = ( @@ -89967,7 +78560,6 @@ /area/station/common/laser_tag) "oXa" = ( /obj/structure/rack/gunrack, -/obj/effect/spawner/random/trash/mess, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/fore/upper) @@ -89989,29 +78581,13 @@ /obj/structure/desk_bell, /turf/open/floor/iron/dark, /area/station/service/bar) -"oXx" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/engine{ - icon_state = "floor" - }, -/area/station/science/ordnance) "oXz" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/hallway/primary/port) "oXE" = ( @@ -90025,7 +78601,7 @@ /turf/open/floor/plating, /area/station/medical/psychology) "oXF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/directional/west, /obj/structure/table/glass, /turf/open/floor/wood, @@ -90040,19 +78616,14 @@ /obj/structure/window/reinforced/spawner/directional/north, /obj/machinery/vending/modularpc, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, +/obj/effect/turf_decal/tile/purple/half, /turf/open/floor/iron/white/side, /area/station/science) "oXP" = ( /obj/structure/table/reinforced, /obj/item/clipboard, /obj/item/toy/figure/secofficer, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/security/office) @@ -90074,17 +78645,9 @@ /turf/open/floor/iron, /area/station/hallway/secondary/construction) "oYg" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 2 }, @@ -90094,12 +78657,8 @@ }, /area/station/hallway/primary/port) "oYi" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/medbay/lobby) "oYm" = ( @@ -90115,11 +78674,9 @@ req_access = list("engine_equip") }, /obj/structure/tank_dispenser, -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/bot, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -90132,27 +78689,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/command/heads_quarters/rd) -"oYG" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) -"oYH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/iron/white, -/area/station/science/research) "oYP" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/turf_decal/bot, @@ -90200,9 +78736,7 @@ /turf/open/floor/wood, /area/station/security/courtroom) "oZd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/service/theater/abandoned) "oZi" = ( @@ -90245,12 +78779,10 @@ }, /area/station/science/cytology) "oZu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/effect/landmark/blobstart, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/closet/cardboard, /obj/item/toy/plush/lizard_plushie/green{ name = "Tends-the-Wounds" @@ -90293,22 +78825,10 @@ /turf/open/floor/iron/pool/cobble/corner, /area/station/common/pool) "oZK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/supermatter/room) -"oZO" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/brig) "oZQ" = ( /turf/open/floor/wood, /area/station/hallway/primary/port) @@ -90317,21 +78837,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/checkpoint/customs/auxiliary) -"oZX" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/science/ordnance_maint) "oZY" = ( /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/library/upper) "pae" = ( /obj/structure/railing/corner, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "pai" = ( /obj/machinery/door/airlock/security/glass{ @@ -90343,19 +78855,12 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/security/brig, /turf/open/floor/iron/dark, /area/station/security/prison) "paj" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, /obj/effect/turf_decal/stripes/red/line{ dir = 10 }, @@ -90364,16 +78869,6 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) -"pal" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/cargo/power_station/upper) "pao" = ( /obj/machinery/door/firedoor/border_only{ dir = 8 @@ -90425,9 +78920,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "paH" = ( /turf/open/floor/iron/solarpanel/airless, @@ -90459,12 +78952,8 @@ /turf/open/floor/plating/airless, /area/station/maintenance/eva_shed/port) "pbb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/construction/mining/aux_base) "pbe" = ( @@ -90483,8 +78972,8 @@ "pbi" = ( /obj/item/stack/sheet/cardboard, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/department/medical) "pbm" = ( @@ -90500,12 +78989,8 @@ /obj/structure/disposalpipe/junction/flip{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/hallway/primary/starboard) "pbt" = ( @@ -90529,16 +79014,8 @@ /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "pbC" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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) "pbG" = ( @@ -90547,31 +79024,19 @@ /area/station/maintenance/disposal) "pbJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/surgery_tray/full/deployed, /turf/open/floor/iron, /area/station/medical/surgery/theatre) "pbP" = ( /obj/effect/landmark/start/bitrunner, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "pbS" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark, /area/station/common/night_club) @@ -90607,8 +79072,9 @@ /turf/open/floor/iron/cafeteria, /area/station/engineering/atmos) "pcs" = ( -/obj/machinery/recharge_station, -/obj/item/robot_suit, +/obj/machinery/mecha_part_fabricator/maint{ + name = "forgotten exosuit fabricator" + }, /turf/open/floor/iron, /area/station/science/research/abandoned) "pcv" = ( @@ -90621,7 +79087,7 @@ name = "motion-sensitive ai camera"; network = list("aiupload") }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload) "pcy" = ( /obj/structure/trash_pile, @@ -90660,17 +79126,6 @@ /obj/effect/turf_decal/tile/purple/fourcorners, /turf/open/floor/iron/dark, /area/station/security/corrections_officer) -"pdl" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/duct, -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/commons/dorms/room2) "pdp" = ( /obj/structure/closet/secure_closet/medical1, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -90680,9 +79135,7 @@ /area/station/medical/treatment_center) "pdD" = ( /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -90779,20 +79232,14 @@ /turf/open/floor/wood, /area/station/service/theater) "peD" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/command/captain_dining) "peF" = ( /obj/machinery/computer/records/security{ dir = 4 }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/machinery/light_switch/directional/west, /turf/open/floor/iron/dark, /area/station/security/checkpoint) @@ -90803,20 +79250,12 @@ /obj/machinery/door/airlock{ name = "Quarters" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/command/gateway, /turf/open/floor/wood/parquet, /area/station/command/gateway) "peT" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/chair/stool/bar/directional{ @@ -90825,13 +79264,7 @@ /turf/open/floor/iron, /area/station/security/prison/mess) "peU" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "peV" = ( @@ -90915,7 +79348,7 @@ /area/station/maintenance/department/crew_quarters/dorms) "pfO" = ( /obj/structure/rack, -/obj/item/vending_refill/security_peacekeeper, +/obj/item/vending_refill/security, /obj/item/storage/box/handcuffs, /obj/item/storage/box/flashbangs{ pixel_x = -2; @@ -90952,12 +79385,8 @@ "pgi" = ( /obj/structure/table/wood, /obj/item/book/manual/wiki/security_space_law, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/courtroom) "pgs" = ( @@ -90977,13 +79406,6 @@ dir = 1 }, /area/station/science/xenobiology) -"pgy" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron/kitchen, -/area/station/security/prison/mess) "pgz" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/service/bar, @@ -90993,44 +79415,20 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/hallway/secondary/service) -"pgG" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/wood/large, -/area/station/service/theater/abandoned) "pgJ" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, +/obj/effect/turf_decal/tile/purple/opposingcorners, /turf/open/floor/iron, /area/station/service/barber) "pgK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/courtroom) -"pgM" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/medical/surgery/theatre) "pgN" = ( /obj/structure/table/glass, /obj/item/stack/package_wrap, @@ -91042,11 +79440,6 @@ dir = 1 }, /area/station/science/research) -"pgQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/wood/parquet, -/area/station/common/gaskiosk) "pgV" = ( /obj/effect/turf_decal/siding/yellow{ dir = 6 @@ -91068,16 +79461,6 @@ /obj/machinery/light/directional/north, /turf/open/misc/asteroid, /area/station/hallway/primary/upper) -"pha" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "phg" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/bot, @@ -91097,12 +79480,12 @@ /area/station/cargo/power_station/upper) "phD" = ( /obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/execution/transfer) -"phG" = ( /obj/effect/turf_decal/tile/red{ dir = 1 }, +/turf/open/floor/iron, +/area/station/security/execution/transfer) +"phG" = ( /obj/machinery/light/directional/north, /obj/machinery/newscaster/directional/north, /turf/open/floor/iron/dark, @@ -91113,19 +79496,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"phM" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/hallway/secondary/command) "phO" = ( /obj/structure/railing, /obj/effect/decal/cleanable/dirt{ @@ -91134,9 +79504,6 @@ /turf/open/floor/iron/dark, /area/station/common/wrestling/arena) "phP" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, /obj/structure/weightmachine/weightlifter, /obj/machinery/light/directional/west, /turf/open/floor/iron/dark, @@ -91182,17 +79549,15 @@ "pid" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/public/glass{ name = "Central Upper Hallway" }, /turf/open/floor/iron, /area/station/hallway/primary/upper) "pih" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/table, /obj/item/burner/fuel{ pixel_y = 4 @@ -91206,12 +79571,8 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -91225,13 +79586,9 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "bridge-east" }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/command/general, /turf/open/floor/iron/dark, /area/station/command/bridge) @@ -91250,8 +79607,8 @@ /obj/machinery/door/airlock/security/glass{ name = "Shaving Station" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/security/brig, /turf/open/floor/iron, /area/station/security/prison) @@ -91284,11 +79641,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/power_station) -"piA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/security/prison/safe) "piD" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/structure/cable, @@ -91299,9 +79651,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/camera/directional/north{ c_tag = "Security - Medbay Waiting Room" }, @@ -91317,16 +79667,6 @@ /area/station/hallway/secondary/exit) "piO" = ( /obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /turf/open/floor/iron/dark, /area/station/security/brig) "piQ" = ( @@ -91339,13 +79679,13 @@ }, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/lab) "piZ" = ( /obj/machinery/door/firedoor/heavy, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/science/ordnance, /obj/structure/cable, /obj/machinery/door/airlock/research{ @@ -91355,12 +79695,8 @@ /area/station/science/ordnance) "pja" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction/yjunction{ dir = 4 }, @@ -91370,8 +79706,8 @@ /obj/machinery/door/airlock{ name = "Abandoned Arcade" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/abandon_arcade) @@ -91393,10 +79729,6 @@ }, /area/station/maintenance/xenobio_disposals) "pjl" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/pew/right{ dir = 4 }, @@ -91409,9 +79741,7 @@ /turf/open/floor/plating/airless, /area/station/maintenance/eva_shed/port) "pjt" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -91470,14 +79800,10 @@ /area/station/medical/virology/isolation) "pjC" = ( /obj/item/weldingtool, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 9 - }, /turf/open/floor/plating, /area/station/hallway/primary/port) "pjH" = ( /obj/machinery/holopad, -/obj/effect/turf_decal/bot, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "pjI" = ( @@ -91569,9 +79895,7 @@ /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/cmo) "pkC" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) @@ -91599,17 +79923,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"pld" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) -"plq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/security/prison/shower) "plv" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/machinery/disposal/bin, @@ -91642,9 +79955,7 @@ /turf/open/floor/grass, /area/station/maintenance/port/fore) "plJ" = ( -/turf/open/floor/iron/airless{ - icon_state = "textured_white_large" - }, +/turf/open/floor/iron/white/textured_large/airless, /area/space/nearstation) "plN" = ( /obj/structure/cable, @@ -91654,12 +79965,8 @@ /obj/machinery/firealarm/directional/north{ pixel_x = -22 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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 = 9 @@ -91710,24 +80017,17 @@ /area/station/security/detectives_office/private_investigators_office) "pmr" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/service/hydroponics, /obj/machinery/door/airlock/hydroponics{ name = "Hydroponics Backroom" }, /obj/structure/disposalpipe/segment, /obj/machinery/duct, +/obj/effect/turf_decal/tile/green/tram, /turf/open/floor/iron, /area/station/service/hydroponics) -"pmt" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/iron/smooth_edge{ - dir = 1 - }, -/area/station/cargo/miningdock) "pmD" = ( /obj/structure/chair/wood{ dir = 8 @@ -91772,9 +80072,7 @@ }, /obj/machinery/status_display/evac/directional/north, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/xenobiology/control) "pnd" = ( @@ -91789,15 +80087,14 @@ dir = 8 }, /obj/effect/turf_decal/tile/blue, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/command/general, /turf/open/floor/iron/dark/side, /area/station/command/bridge) "pnj" = ( /obj/machinery/hydroponics/constructable, /obj/structure/flora/bush/sparsegrass, -/obj/machinery/hydroponics/constructable, /turf/open/floor/grass, /area/station/security/prison/garden) "pnk" = ( @@ -91813,19 +80110,6 @@ dir = 1 }, /area/station/science/research) -"pnn" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron/dark, -/area/station/security/brig) "pnv" = ( /obj/effect/turf_decal/bot, /obj/structure/rack, @@ -91843,9 +80127,7 @@ /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) "pnz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/structure/railing{ dir = 1 @@ -91854,8 +80136,8 @@ /area/station/ai_monitored/turret_protected/ai) "pnA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/carpet/blue, /area/station/medical/break_room) @@ -91880,13 +80162,9 @@ /area/station/maintenance/starboard/fore) "pnK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, /area/station/science/ordnance/testlab) "pnL" = ( /obj/structure/lattice/catwalk, @@ -91920,9 +80198,6 @@ "pnS" = ( /obj/machinery/autolathe, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /turf/open/floor/iron/dark, /area/station/cargo/office) "pnV" = ( @@ -91974,20 +80249,6 @@ /obj/structure/cable, /turf/open/floor/glass/reinforced, /area/station/science) -"poo" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/virology/isolation) "pov" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -91996,18 +80257,11 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/upper) "poD" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, /obj/structure/chair/plastic{ dir = 1 }, @@ -92029,23 +80283,18 @@ /area/station/maintenance/department/security/prison_upper) "poY" = ( /obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/captain/private) "ppj" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/chair/stool/bar/directional{ dir = 4 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/prison/mess) "ppn" = ( @@ -92079,7 +80328,7 @@ /obj/effect/turf_decal/stripes{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) "pqc" = ( @@ -92104,34 +80353,14 @@ /turf/closed/wall, /area/station/maintenance/rus_gambling) "pqp" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/purple/half, /turf/open/floor/iron, /area/station/hallway/primary/upper) "pqq" = ( /obj/effect/landmark/start/hangover, /turf/open/floor/plating, /area/station/maintenance/central) -"pqv" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/department/medical) -"pqw" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/virology) "pqz" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/landmark/start/hangover, @@ -92144,12 +80373,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/research) @@ -92177,12 +80400,8 @@ /area/station/service/janitor) "pqU" = ( /obj/structure/barricade/wooden, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/plating, /area/station/maintenance/starboard/fore) @@ -92206,9 +80425,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) "pre" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/machinery/camera{ c_tag = "Security - Interrogation Monitoring"; dir = 10 @@ -92253,12 +80469,6 @@ /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, /area/station/security/courtroom) -"prw" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "prL" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -92276,9 +80486,7 @@ /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) "prU" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) "prV" = ( @@ -92331,8 +80539,8 @@ /area/station/maintenance/department/medical) "psu" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/medical) "psw" = ( @@ -92347,12 +80555,8 @@ /obj/structure/railing{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/openspace, /area/station/maintenance/aft/upper) "psD" = ( @@ -92374,12 +80578,8 @@ /area/station/engineering/supermatter/room) "psQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) @@ -92450,8 +80650,8 @@ dir = 8 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/lobby) "ptx" = ( @@ -92472,19 +80672,6 @@ /turf/open/floor/iron/dark, /area/station/security/office) "ptL" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/structure/table/wood, /obj/item/clothing/suit/toggle/suspenders, /obj/effect/spawner/random/clothing/costume, @@ -92495,23 +80682,14 @@ /area/station/maintenance/clown_chamber) "ptO" = ( /obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/machinery/duct, /turf/open/floor/carpet/purple, /area/station/common/night_club) -"ptR" = ( -/obj/effect/landmark/start/atmospheric_technician, -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "ptU" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -92542,8 +80720,8 @@ "pue" = ( /obj/effect/turf_decal/trimline/blue/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 4 }, @@ -92583,16 +80761,14 @@ "puL" = ( /obj/effect/landmark/event_spawn, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/break_room) "puT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "puV" = ( @@ -92600,9 +80776,7 @@ /turf/open/floor/iron/white, /area/station/medical/morgue) "puX" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "puZ" = ( @@ -92615,18 +80789,13 @@ /turf/open/floor/iron/dark, /area/station/command/bridge) "pvb" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/tile/purple/opposingcorners{ dir = 4 }, -/obj/machinery/airalarm/directional/south, /turf/open/floor/iron, /area/station/service/barber) "pvc" = ( @@ -92654,9 +80823,7 @@ c_tag = "Security - Holding Cell" }, /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/brig) "pvk" = ( @@ -92673,44 +80840,27 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/central) "pvr" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/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, +/turf/open/floor/iron, /area/station/security/brig) "pvv" = ( /obj/machinery/vending/autodrobe, /turf/open/floor/wood, /area/station/common/wrestling/lobby) "pvB" = ( -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 8 - }, /obj/machinery/computer/crew{ dir = 8 }, /obj/machinery/light/directional/east, /obj/machinery/newscaster/directional/east, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "pvF" = ( @@ -92725,12 +80875,8 @@ dir = 6 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "pvL" = ( @@ -92743,7 +80889,7 @@ /area/station/ai_monitored/command/storage/eva/upper) "pvU" = ( /obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/table/reinforced, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) @@ -92790,12 +80936,9 @@ /obj/item/pen{ pixel_y = 4 }, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /turf/open/floor/iron/dark/side, /area/station/security/checkpoint/escape) "pwi" = ( @@ -92808,7 +80951,7 @@ /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, /turf/open/floor/iron/dark/small, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "pwj" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/delivery/white, @@ -92840,29 +80983,18 @@ /turf/open/floor/grass, /area/station/hallway/primary/central) "pwo" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/machinery/light/directional/east, /turf/open/floor/iron/dark, /area/station/science/xenobiology) "pwr" = ( -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/machinery/computer/shuttle/labor{ dir = 4 }, /obj/machinery/status_display/evac/directional/west, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/red/real_red/anticorner/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "pwt" = ( @@ -92870,8 +81002,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/surgery) @@ -92909,23 +81041,18 @@ /obj/effect/turf_decal/stripes{ dir = 4 }, -/obj/machinery/camera/directional/south{ - c_tag = "Cargo - Lower foyer"; - dir = 8 - }, /obj/effect/turf_decal/stripes/white/line{ dir = 4 }, /obj/structure/rack, /obj/structure/sign/poster/random/directional/west, /obj/machinery/airalarm/directional/south, +/obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron/dark, /area/station/cargo/lobby) "pwH" = ( /obj/item/kirbyplants/organic/plant22, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/office) "pwR" = ( @@ -92934,7 +81061,7 @@ /turf/open/floor/plating, /area/station/maintenance/central) "pwW" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/prison/safe) "pwX" = ( @@ -92942,10 +81069,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor, /area/station/engineering/main) "pxa" = ( @@ -92953,13 +81078,13 @@ dir = 4 }, /obj/effect/landmark/start/chemist, -/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 4 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "pxb" = ( -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) "pxd" = ( /obj/effect/turf_decal/siding/wood{ @@ -92973,23 +81098,18 @@ /obj/machinery/door/firedoor, /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/cmo) "pxe" = ( /obj/machinery/holopad, -/obj/effect/turf_decal/bot_blue, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 2 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "pxh" = ( /obj/machinery/door/airlock/highsecurity{ @@ -93014,12 +81134,8 @@ }, /obj/effect/spawner/random/maintenance, /obj/effect/spawner/random/trash/mess, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -93042,41 +81158,31 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/medical/morgue) "pxK" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/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/research) "pxL" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "pxT" = ( /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/yellow{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/break_room) "pxU" = ( @@ -93088,8 +81194,8 @@ /obj/effect/spawner/random/structure/steam_vent, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/central) "pya" = ( @@ -93179,16 +81285,12 @@ /turf/open/floor/iron/smooth_corner, /area/station/engineering/atmos/hfr_room) "pzl" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/sorting/mail{ dir = 8; name = "Security Junction"; sortType = 7 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "pzm" = ( /obj/effect/spawner/structure/window/reinforced, @@ -93265,9 +81367,7 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/medical/morgue) "pzN" = ( @@ -93340,11 +81440,10 @@ }, /area/station/command/gateway) "pAF" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "pAH" = ( @@ -93394,12 +81493,8 @@ name = "Arcade" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/landmark/navigate_destination, /turf/open/floor/wood, @@ -93407,6 +81502,9 @@ "pBb" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/execution/transfer) "pBo" = ( @@ -93416,15 +81514,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/plating, /area/station/maintenance/central) -"pBq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/wood, -/area/station/service/library) "pBr" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/bar{ @@ -93484,12 +81573,8 @@ /obj/machinery/door/airlock{ name = "Public Pool" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/iron, @@ -93518,31 +81603,11 @@ "pCQ" = ( /obj/effect/turf_decal/delivery, /obj/structure/tank_dispenser, -/obj/effect/turf_decal/stripes{ - dir = 5 - }, /turf/open/floor/iron/dark, /area/station/engineering/main) "pCR" = ( /turf/closed/wall, /area/station/common/arcade) -"pDm" = ( -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/escapepodbay) -"pDo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/carpet/purple, -/area/station/command/heads_quarters/rd) "pDq" = ( /turf/open/floor/engine/vacuum, /area/station/maintenance/disposal/incinerator) @@ -93586,25 +81651,13 @@ dir = 10 }, /area/station/hallway/secondary/exit) -"pDN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "pEc" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/hallway/primary/starboard) "pEe" = ( @@ -93630,14 +81683,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"pEn" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "pEo" = ( /obj/effect/turf_decal/tile/brown{ dir = 4 @@ -93658,8 +81703,8 @@ dir = 1 }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/security/court, /turf/open/floor/wood, /area/station/security/courtroom) @@ -93692,12 +81737,8 @@ "pEN" = ( /obj/effect/turf_decal/tile/brown, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/cargo/office) "pET" = ( @@ -93708,18 +81749,13 @@ /turf/closed/wall/r_wall, /area/station/hallway/secondary/exit) "pFh" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/effect/turf_decal/tile/bar/opposingcorners{ dir = 1 }, -/obj/machinery/duct, /turf/open/floor/iron, /area/station/security/prison/mess) "pFi" = ( @@ -93729,8 +81765,8 @@ }, /obj/effect/mapping_helpers/airlock/access/all/medical/general, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -93739,12 +81775,7 @@ /turf/closed/wall, /area/station/maintenance/abandon_kitchen_upper) "pFt" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/machinery/disposal/bin, -/obj/effect/turf_decal/delivery, /obj/machinery/camera/directional/east{ c_tag = "Bridge - Command Bar"; name = "command camera" @@ -93752,6 +81783,7 @@ /obj/structure/disposalpipe/trunk{ dir = 8 }, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/command/captain_dining) "pFw" = ( @@ -93767,20 +81799,14 @@ }, /obj/item/trash/can/food/beans, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/fore/upper) "pFD" = ( /obj/structure/fans/tiny/forcefield{ dir = 8 }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/machinery/light/directional/north, /turf/open/floor/plating, /area/station/cargo/storage) @@ -93825,8 +81851,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/burnt_floor, /obj/machinery/duct, @@ -93879,12 +81905,8 @@ /area/station/cargo/warehouse) "pGt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -93896,10 +81918,8 @@ name = "recreation camera" }, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/common/wrestling/arena) @@ -93930,12 +81950,8 @@ /area/station/engineering/supermatter/room) "pHf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/blue{ dir = 4 }, @@ -93950,9 +81966,7 @@ /turf/open/floor/iron/white, /area/station/science/lab) "pHz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) "pHB" = ( @@ -93961,12 +81975,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/security/greater) "pHD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/wood, /area/station/security/detectives_office) @@ -93979,7 +81989,6 @@ /obj/machinery/cell_charger, /obj/item/stock_parts/cell/high, /obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/engineering/atmos/office) "pHL" = ( @@ -93988,8 +81997,8 @@ name = "Atmospherics Maintenance" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/central) "pHQ" = ( @@ -94035,10 +82044,8 @@ /turf/open/floor/wood, /area/station/service/cafeteria) "pIn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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) "pIo" = ( @@ -94066,12 +82073,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/maintenance/department/medical/central) "pIA" = ( @@ -94082,9 +82085,7 @@ /turf/open/floor/eighties, /area/station/maintenance/abandon_arcade) "pIJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -94098,32 +82099,22 @@ }, /area/station/command/heads_quarters/ce) "pJb" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/disposalpipe/segment{ dir = 6 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "pJc" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 4; pixel_x = -12 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "pJq" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -94132,8 +82123,8 @@ "pJy" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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) "pJB" = ( @@ -94142,9 +82133,6 @@ id = "Cell 4"; name = "Cell 4 Locker" }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 10 - }, /obj/machinery/light/small/directional/west, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -94153,9 +82141,7 @@ /area/station/security/brig) "pJI" = ( /obj/effect/spawner/random/trash/moisture, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ dir = 1 }, @@ -94163,8 +82149,8 @@ /area/station/maintenance/department/crew_quarters/dorms) "pJO" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -94267,19 +82253,6 @@ /obj/machinery/telecomms/processor/preset_four, /turf/open/floor/iron/telecomms, /area/station/tcommsat/server) -"pKm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "pKp" = ( /obj/machinery/ai_slipper{ uses = 10 @@ -94300,8 +82273,8 @@ "pKx" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/main) @@ -94359,17 +82332,13 @@ "pKW" = ( /obj/effect/turf_decal/bot, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/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/gateway) "pKX" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/security{ name = "Shuttle Bay" }, @@ -94415,8 +82384,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/cent_com/rep_door, /obj/machinery/duct, @@ -94424,9 +82393,7 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/nt_rep) "pLg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/science/ordnance_maint) "pLk" = ( @@ -94536,22 +82503,12 @@ /turf/open/floor/carpet, /area/station/maintenance/abandon_psych) "pMb" = ( -/obj/effect/turf_decal/tile/bar{ +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/tile/bar/opposingcorners{ dir = 1 }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/security/prison/mess) -"pMg" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/clown_chamber) "pMh" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -94596,17 +82553,11 @@ /turf/open/floor/iron/dark, /area/station/medical/morgue) "pMq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/eighties, /area/station/maintenance/abandon_arcade) "pMw" = ( -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -94631,10 +82582,7 @@ /obj/structure/transit_tube/horizontal{ dir = 1 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "pMQ" = ( /obj/effect/turf_decal/tile/neutral{ @@ -94648,8 +82596,8 @@ dir = 10; name = "hallway camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/iron, @@ -94661,12 +82609,8 @@ /area/station/common/wrestling/arena) "pMW" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction/flip{ dir = 1 }, @@ -94689,10 +82633,8 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "pNb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/cafeteria, /area/station/command/heads_quarters/nt_rep) "pNh" = ( @@ -94703,18 +82645,6 @@ }, /turf/open/floor/carpet, /area/station/service/library/lounge) -"pNj" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/engine{ - icon_state = "floor" - }, -/area/station/science/ordnance/testlab) "pNl" = ( /obj/structure/flora/grass/jungle, /obj/structure/flora/bush/grassy, @@ -94754,12 +82684,8 @@ icon_state = "dirt-flat-1" }, /obj/item/trash/chips, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -94822,26 +82748,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/science/upper) -"pOE" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/station/maintenance/port/upper) -"pOF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/research) "pOJ" = ( /turf/open/floor/iron, /area/station/hallway/secondary/construction) @@ -94850,6 +82756,7 @@ /obj/structure/railing{ dir = 1 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/glass/reinforced, /area/station/security/prison/safe) "pOM" = ( @@ -94903,12 +82810,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/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/maintenance/department/medical/central) @@ -94921,12 +82824,9 @@ /turf/open/floor/iron, /area/station/science/explab) "pPx" = ( -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, /obj/effect/landmark/start/assistant, /obj/structure/chair/stool/bar/directional/north, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar/atrium) "pPz" = ( @@ -94939,17 +82839,16 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/captain) "pPD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/parquet, /area/station/command/gateway) "pPF" = ( /obj/item/radio/intercom/directional/north, /obj/structure/cable, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/execution/transfer) "pPJ" = ( @@ -94966,8 +82865,8 @@ /obj/machinery/door/airlock/security{ name = "Court Cell" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/security/general, /turf/open/floor/iron/dark, /area/station/security/courtroom) @@ -94985,7 +82884,7 @@ /area/station/security/prison) "pQs" = ( /obj/structure/table/wood, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_y = 5 }, /obj/item/storage/lockbox/loyalty, @@ -95018,10 +82917,8 @@ /area/station/common/pool) "pQC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/security/office) @@ -95052,12 +82949,8 @@ /area/station/security/prison/shower) "pQT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -95076,30 +82969,18 @@ req_access = list("command") }, /obj/item/radio/intercom/directional/south, -/obj/item/storage/secure/safe/caps_spare{ +/obj/structure/secure_safe/caps_spare{ pixel_x = 5; pixel_y = -37 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/command/bridge) "pQZ" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/mess) "pRa" = ( @@ -95109,7 +82990,6 @@ /obj/structure/disposalpipe/trunk{ dir = 8 }, -/obj/effect/turf_decal/stripes/box, /obj/structure/disposaloutlet, /turf/open/floor/plating, /area/station/maintenance/disposal) @@ -95123,12 +83003,8 @@ /area/station/maintenance/aux_eva) "pRs" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/prison/rec) "pRx" = ( @@ -95177,7 +83053,6 @@ pixel_x = -32 }, /obj/structure/railing, -/obj/effect/turf_decal/trimline/white/filled/corner, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, @@ -95186,10 +83061,8 @@ /area/station/hallway/primary/starboard) "pSd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/medical/psychology) "pSh" = ( @@ -95203,16 +83076,6 @@ /area/station/service/chapel/funeral) "pSi" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "pSk" = ( @@ -95230,12 +83093,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/medical/treatment_center) "pSu" = ( @@ -95248,13 +83107,10 @@ dir = 8; pixel_x = 5 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -95293,8 +83149,8 @@ /turf/open/floor/iron, /area/station/engineering/atmos/office) "pSS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/chemistry) "pSY" = ( @@ -95303,10 +83159,6 @@ /turf/open/floor/iron, /area/station/security/warden) "pTj" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/table, /obj/machinery/chem_dispenser/drinks/beer{ dir = 8 @@ -95325,28 +83177,11 @@ /area/station/engineering/supermatter) "pTx" = ( /obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/atmospherics, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/office) -"pTz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "pTE" = ( /obj/structure/table/reinforced, /obj/effect/spawner/random/maintenance, @@ -95368,8 +83203,8 @@ }, /obj/structure/curtain/cloth/fancy, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/command/captain_dining) @@ -95401,18 +83236,10 @@ /obj/structure/chair{ pixel_y = -2 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side, /area/station/security/warden) "pUc" = ( /obj/machinery/light/directional/west, @@ -95457,12 +83284,8 @@ icon_state = "dirt-flat-1" }, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/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, /area/station/maintenance/abandon_diner) @@ -95527,16 +83350,6 @@ }, /turf/open/floor/carpet, /area/station/service/chapel/funeral) -"pUY" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "pVg" = ( /obj/machinery/door/firedoor/border_only{ dir = 4 @@ -95550,19 +83363,6 @@ }, /turf/open/floor/grass, /area/station/hallway/primary/central) -"pVj" = ( -/obj/structure/railing/wooden_fencing{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/duct, -/turf/open/floor/wood, -/area/station/common/pool) "pVn" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -95580,12 +83380,6 @@ /area/station/maintenance/port/aft) "pVA" = ( /obj/structure/closet/toolcloset, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /obj/machinery/light_switch/directional/north, /turf/open/floor/iron, /area/station/construction/mining/aux_base) @@ -95600,9 +83394,7 @@ /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/engineering/engine_equipment, /turf/open/floor/plating, /area/station/maintenance/port/aft) @@ -95678,19 +83470,12 @@ /turf/open/floor/plating, /area/station/maintenance/library/upper) "pWc" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, /obj/structure/sign/poster/random/directional/west, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/hallway/primary/port) "pWi" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/table/wood/fancy/black, /obj/structure/window/spawner/directional/south, /obj/item/reagent_containers/cup/glass/bottle/lizardwine{ @@ -95705,6 +83490,7 @@ pixel_x = 2; pixel_y = 6 }, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "pWk" = ( @@ -95715,8 +83501,8 @@ name = "Lockdown" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/security/prison/upper) @@ -95736,12 +83522,8 @@ }, /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -95773,12 +83555,8 @@ /turf/open/space/basic, /area/space/nearstation) "pWt" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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 }, @@ -95797,9 +83575,7 @@ /area/station/commons/dorms) "pWy" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -95849,9 +83625,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) "pWL" = ( @@ -95875,12 +83649,8 @@ /turf/closed/wall, /area/station/cargo/storage) "pWV" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/stairs/medium{ dir = 8 @@ -95892,8 +83662,8 @@ /obj/machinery/door/airlock/bathroom{ name = "Primary Restroom" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -95964,9 +83734,7 @@ /obj/effect/turf_decal/tile/yellow{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/chemistry) "pXK" = ( @@ -95984,12 +83752,8 @@ icon_state = "dirt-flat-1" }, /obj/machinery/door/airlock/maintenance_hatch, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/engineering/maintenance, /turf/open/floor/iron/freezer, /area/station/maintenance/abandon_kitchen_upper) @@ -96000,12 +83764,8 @@ /turf/open/floor/engine/vacuum, /area/station/maintenance/department/engineering/atmos_aux_port) "pXP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/common/night_club) @@ -96018,8 +83778,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/side, /area/station/science) @@ -96071,12 +83831,8 @@ }, /obj/machinery/door/firedoor/heavy, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/command/general, /turf/open/floor/iron/smooth_large, /area/station/command/secure_bunker) @@ -96110,12 +83866,8 @@ /area/station/maintenance/department/engineering/engine_aft_port) "pYM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/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/port/aft) "pYQ" = ( @@ -96139,12 +83891,6 @@ /turf/open/floor/iron, /area/station/science/explab) "pZl" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/closet/crate/medical, /turf/open/floor/iron/white, /area/station/medical/coldroom) @@ -96154,7 +83900,7 @@ c_tag = "Bridge - Captain's Lounge"; name = "command camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) "pZn" = ( @@ -96167,27 +83913,19 @@ }, /area/station/hallway/primary/central) "pZt" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/port/aft) "pZy" = ( -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, /obj/item/kirbyplants/organic/plant22, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/machinery/camera/directional/east{ c_tag = "Security - Head of Security's Office" }, /obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/tile/red/real_red/anticorner/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "pZA" = ( @@ -96197,10 +83935,8 @@ /turf/closed/wall, /area/station/maintenance/department/security/prison_upper) "pZJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/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, /area/station/commons/fitness) @@ -96230,12 +83966,6 @@ /turf/open/floor/iron, /area/station/security/brig) "qao" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) "qax" = ( @@ -96247,7 +83977,6 @@ /area/station/service/barber) "qaB" = ( /obj/machinery/disposal/bin, -/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 9 }, @@ -96264,7 +83993,7 @@ "qaC" = ( /obj/structure/sign/departments/cargo, /turf/closed/wall, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "qaH" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/circuit/green, @@ -96281,12 +84010,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -96312,10 +84037,10 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "qaZ" = ( -/obj/effect/turf_decal/stripes{ +/obj/machinery/computer/station_alert{ dir = 1 }, -/obj/machinery/computer/station_alert{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, /turf/open/floor/iron/dark, @@ -96334,12 +84059,8 @@ /area/station/security/prison/mess) "qbj" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor/iron_dark, /area/station/hallway/primary/port) "qbq" = ( @@ -96357,9 +84078,7 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/electronic_marketing_den) "qbu" = ( @@ -96378,20 +84097,14 @@ "qby" = ( /obj/item/radio/intercom/directional/east, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/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/execution/transfer) "qbD" = ( /obj/structure/cable, /obj/machinery/airalarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/service/library/lounge) "qbG" = ( @@ -96443,25 +84156,19 @@ /area/station/science/research) "qcm" = ( /obj/effect/landmark/start/bartender, -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/cable, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) "qcs" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/hallway/secondary/entry) "qcx" = ( /obj/structure/rack/shelf, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, /obj/item/stack/sheet/iron{ amount = 30 }, @@ -96485,32 +84192,13 @@ "qcC" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/lobby) -"qcD" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/carpet, -/area/station/service/chapel) "qcE" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -96540,8 +84228,8 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/research) "qcU" = ( @@ -96637,21 +84325,15 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) "qdC" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/machinery/shower/directional/south, /obj/effect/turf_decal/stripes/end, @@ -96697,10 +84379,6 @@ /turf/open/floor/mineral/plastitanium, /area/station/science/robotics/mechbay) "qei" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/side{ dir = 8 @@ -96709,10 +84387,6 @@ "qem" = ( /turf/closed/wall/rust, /area/station/medical/power_station) -"qeo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "qet" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -96763,9 +84437,6 @@ /turf/open/floor/iron/dark, /area/station/commons/storage/primary) "qeW" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 }, @@ -96775,9 +84446,8 @@ "qeX" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/small, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "qfc" = ( -/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -96866,12 +84536,8 @@ /turf/open/floor/iron/white, /area/station/medical/treatment_center) "qgb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 5 }, @@ -96927,16 +84593,23 @@ /area/station/security/prison/workout) "qgI" = ( /obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/trimline/white/filled/arrow_cw{ - dir = 9 - }, -/obj/effect/turf_decal/trimline/white/filled/corner, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, /obj/structure/railing/corner/end/flip, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"qgJ" = ( +/obj/machinery/button/door/directional/south{ + name = "Security Mech Garage Door Controls"; + id = "SecMech"; + req_access = list("security") + }, +/obj/effect/turf_decal/stripes/blue/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) "qgM" = ( /obj/machinery/chem_master/condimaster{ name = "HoochMaster 2000" @@ -96970,15 +84643,15 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/department/medical) "qgZ" = ( /obj/structure/cable, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark/side{ dir = 4 @@ -96996,8 +84669,8 @@ dir = 8 }, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -97012,7 +84685,6 @@ /obj/structure/table/glass, /obj/structure/window/spawner/directional/west, /obj/item/stack/medical/gauze/twelve, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "qhn" = ( @@ -97029,25 +84701,17 @@ /area/station/maintenance/aft/upper) "qho" = ( /obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/openspace, /area/station/maintenance/aft/upper) "qhq" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/red{ - dir = 4 + dir = 1 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/brig) "qht" = ( @@ -97087,24 +84751,17 @@ /turf/open/floor/plating, /area/station/maintenance/department/security/greater) "qhK" = ( -/obj/effect/spawner/random/trash/mess, -/obj/structure/cable, -/obj/machinery/light/small/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/salon/lower) +/obj/item/forging/billow, +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/stone, +/area/station/service/forge) "qhN" = ( /obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/monitored/air_output{ dir = 8 }, /turf/open/floor/engine/air, /area/station/engineering/atmos) -"qhP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "qhR" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/simple/green/visible/layer4{ @@ -97131,9 +84788,7 @@ /area/station/service/theater/abandoned) "qii" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/xenobiology) "qip" = ( @@ -97149,8 +84804,9 @@ pixel_x = -2; pixel_y = 3 }, +/obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron/dark/small, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "qiq" = ( /obj/machinery/atmospherics/components/binary/pump/on, /turf/closed/wall/r_wall, @@ -97165,9 +84821,7 @@ /area/station/maintenance/department/medical/central) "qit" = ( /obj/machinery/status_display/evac/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/command/secure_bunker) "qiv" = ( @@ -97178,20 +84832,14 @@ name = "Private Detective Office" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/security/detectives_office/private_investigators_office) "qiC" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/science/research) @@ -97230,8 +84878,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -97247,20 +84895,7 @@ /turf/open/floor/iron/dark, /area/station/command/bridge) "qjv" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "qjx" = ( /turf/open/misc/beach/sand, @@ -97290,8 +84925,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/upper) "qjL" = ( @@ -97345,15 +84980,12 @@ /turf/open/floor/iron, /area/station/hallway/primary/port) "qkp" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron, /area/station/hallway/primary/central) "qkq" = ( @@ -97370,12 +85002,12 @@ /area/station/maintenance/abandon_diner) "qku" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/port) "qkw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/security/prison/upper) "qkx" = ( @@ -97389,12 +85021,8 @@ /area/station/maintenance/aft/upper) "qkz" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/service/chapel/office) @@ -97459,9 +85087,7 @@ "qlt" = ( /obj/effect/turf_decal/bot, /obj/structure/rack/shelf, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/cargo/warehouse) "qlu" = ( @@ -97470,27 +85096,11 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/medical) -"qly" = ( -/obj/structure/cable, -/obj/effect/landmark/start/assistant, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/commons/locker) "qlC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red{ dir = 4 }, /turf/open/floor/iron, @@ -97579,12 +85189,8 @@ /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -97609,9 +85215,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/upper) "qmn" = ( -/obj/machinery/air_sensor{ - chamber_id = "ordnancegas1" - }, +/obj/machinery/air_sensor/ordnance_burn_chamber, /turf/open/floor/engine, /area/station/science/ordnance/burnchamber) "qmr" = ( @@ -97621,16 +85225,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood, /area/station/common/pool/sauna) -"qmt" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/command/bridge) "qmx" = ( /turf/open/floor/plating/airless, /area/station/maintenance/port/upper) @@ -97642,12 +85236,8 @@ dir = 10 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/hallway/primary/aft) "qmB" = ( @@ -97656,39 +85246,16 @@ }, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/service/bar, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/bar/backroom) "qmI" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side, /area/station/security/brig) -"qmO" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/station/science/robotics/lab) "qmP" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ dir = 4 @@ -97696,20 +85263,14 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/central) "qmT" = ( /obj/item/kirbyplants/random, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "qmW" = ( @@ -97737,8 +85298,8 @@ }, /obj/structure/barricade/wooden/crude, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/wood, @@ -97760,26 +85321,19 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) "qnr" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "qnt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/execution/transfer) "qnw" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, /obj/machinery/door/poddoor/shutters{ id = "qm_warehouse"; name = "Warehouse Shutters" @@ -97791,11 +85345,10 @@ dir = 4; pixel_x = -5 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -97805,26 +85358,6 @@ /obj/item/radio/intercom, /turf/open/floor/iron/dark, /area/station/science/xenobiology/control) -"qnB" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/brig) "qnH" = ( /obj/structure/chair/sofa/bench/left{ dir = 4; @@ -97837,12 +85370,8 @@ /area/station/hallway/primary/central/aft) "qnI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/medium{ dir = 4 }, @@ -97850,12 +85379,8 @@ "qnM" = ( /mob/living/simple_animal/bot/secbot/pingsky, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing{ dir = 1 }, @@ -97863,10 +85388,8 @@ /area/station/ai_monitored/turret_protected/aisat_interior) "qnR" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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/hallway/primary/aft) "qnW" = ( @@ -97874,19 +85397,14 @@ /turf/open/floor/plating/airless, /area/station/maintenance/fore/upper) "qoe" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/aslyum) "qoj" = ( /obj/structure/closet/lasertag/blue, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -97915,7 +85433,7 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "qoz" = ( -/mob/living/simple_animal/pet/cat/space{ +/mob/living/basic/pet/cat/space{ dir = 4 }, /obj/effect/decal/cleanable/dirt{ @@ -97940,26 +85458,12 @@ /area/station/maintenance/department/security/prison_upper) "qoL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing, /obj/machinery/door/firedoor/border_only, /turf/open/floor/iron, /area/station/commons/dorms) -"qoR" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/research) "qoV" = ( /obj/machinery/photocopier, /obj/machinery/light/directional/south, @@ -97985,12 +85489,8 @@ /obj/effect/turf_decal/trimline/green/filled/line{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology/isolation) @@ -97999,12 +85499,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/abandon_art_studio) "qpb" = ( @@ -98022,7 +85518,7 @@ /turf/open/floor/iron/dark, /area/station/maintenance/abandon_exam/cat) "qpd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -98054,12 +85550,8 @@ pixel_x = -4 }, /obj/item/tank/jetpack/carbondioxide, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) "qpu" = ( @@ -98087,8 +85579,8 @@ /turf/open/floor/plating, /area/station/maintenance/port/central) "qpL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/xenobiology) @@ -98147,8 +85639,8 @@ "qqb" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -98160,12 +85652,8 @@ "qqo" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/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/maintenance/solars/port/fore) "qqs" = ( @@ -98182,19 +85670,11 @@ /obj/item/plant_analyzer, /turf/open/floor/iron/dark, /area/station/service/hydroponics/garden) -"qqC" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "qqK" = ( /turf/open/floor/engine, /area/station/science/auxlab/firing_range) "qqM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/storage/tech) "qqT" = ( @@ -98238,12 +85718,8 @@ /area/station/medical/break_room) "qrd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment{ dir = 4 @@ -98312,12 +85788,6 @@ /obj/structure/flora/bush/fullgrass, /turf/open/floor/grass, /area/station/security/prison/garden) -"qrM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/construction/mining/aux_base) "qrP" = ( /obj/structure/chair/sofa/bench/right{ dir = 8; @@ -98335,8 +85805,8 @@ /area/station/commons/dorms) "qrU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden{ dir = 8 }, @@ -98358,8 +85828,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white/side, /area/station/science) @@ -98398,11 +85868,10 @@ /area/station/science/research) "qsl" = ( /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 }, /turf/open/floor/iron/dark/side{ dir = 8 @@ -98411,12 +85880,8 @@ "qsm" = ( /obj/machinery/light/directional/north, /obj/machinery/status_display/evac/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/right{ dir = 4 }, @@ -98437,31 +85902,23 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) "qsz" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/sign/departments/science/alt/directional/north, /turf/open/floor/iron/white, /area/station/science/research) "qsD" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/warehouse) "qsG" = ( @@ -98513,16 +85970,13 @@ /turf/open/floor/iron, /area/station/hallway/secondary/command) "qsW" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, /obj/effect/landmark/generic_maintenance_landmark, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron, /area/station/construction/mining/aux_base) "qsY" = ( @@ -98556,15 +86010,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"qth" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "qti" = ( /obj/item/kirbyplants/organic/plant21, /obj/machinery/firealarm/directional/north, @@ -98628,9 +86073,6 @@ /area/station/maintenance/department/science/ordnance_maint) "qtw" = ( /obj/structure/chair/stool/directional/west, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/effect/landmark/start/hangover, /turf/open/floor/plating, /area/station/maintenance/central) @@ -98642,7 +86084,6 @@ /obj/effect/landmark/start/medical_doctor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "qtM" = ( @@ -98675,16 +86116,6 @@ }, /turf/open/floor/wood, /area/station/security/detectives_office/private_investigators_office) -"qtR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/common/laser_tag) "qtS" = ( /obj/item/cigbutt, /obj/structure/cable, @@ -98741,7 +86172,6 @@ /area/station/maintenance/department/crew_quarters/dorms) "qut" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/bot, /obj/item/clothing/gloves/color/orange, /obj/item/clothing/gloves/color/orange, /obj/item/clothing/gloves/color/orange, @@ -98792,12 +86222,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/medical/cryo) "quA" = ( @@ -98808,22 +86234,11 @@ /area/station/command/heads_quarters/blueshield) "quC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/mob/living/simple_animal/bot/medbot/autopatrol, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/mob/living/basic/bot/medbot/autopatrol, /turf/open/floor/iron, /area/station/hallway/primary/upper) -"quE" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "quF" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt{ @@ -98832,16 +86247,13 @@ /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/dorms) "quH" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/item/radio/intercom/directional/east, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/captain) "quJ" = ( @@ -98863,12 +86275,8 @@ pixel_y = 20 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing{ dir = 8 }, @@ -98884,20 +86292,16 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/abandon_diner) "qvj" = ( /obj/structure/cable, /obj/machinery/firealarm/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/hallway/secondary/exit/departure_lounge) "qvs" = ( @@ -98913,12 +86317,8 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/office) "qvB" = ( @@ -98950,6 +86350,7 @@ /obj/structure/railing/corner{ dir = 4 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/glass/reinforced, /area/station/security/prison/safe) "qvW" = ( @@ -98975,9 +86376,7 @@ }, /area/station/hallway/primary/central) "qwg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/small/directional/south, /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -99030,12 +86429,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/aft) @@ -99097,12 +86492,7 @@ /turf/open/floor/iron/dark, /area/station/common/locker_room_shower) "qxt" = ( -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "qxI" = ( @@ -99130,37 +86520,26 @@ uses = 10 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/event_spawn, /turf/open/floor/engine, /area/station/ai_monitored/turret_protected/aisat/hallway) "qya" = ( /obj/structure/railing, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "qyf" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/modular_computer/preset/civilian, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/command/bridge) "qyi" = ( @@ -99188,7 +86567,7 @@ /turf/open/floor/iron/dark, /area/station/maintenance/solars/starboard/fore) "qyn" = ( -/obj/item/storage/secure/safe{ +/obj/structure/secure_safe{ pixel_x = 32 }, /obj/structure/chair/comfy/brown, @@ -99210,8 +86589,8 @@ /obj/machinery/door/airlock{ name = "Commisary Desk" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/commissary) "qyr" = ( @@ -99240,7 +86619,7 @@ /area/station/science/breakroom) "qyx" = ( /obj/item/camera, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/maintenance/abandon_art_studio) "qyy" = ( @@ -99287,8 +86666,8 @@ /area/station/service/cafeteria) "qyT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/range) "qyY" = ( @@ -99308,12 +86687,8 @@ /area/station/hallway/primary/port) "qzi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/large, /area/station/service/theater/abandoned) "qzj" = ( @@ -99325,12 +86700,8 @@ /area/station/science/research) "qzm" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/gateway) "qzn" = ( @@ -99350,19 +86721,6 @@ /turf/open/floor/carpet/executive, /area/station/command/heads_quarters/blueshield) "qzz" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -99371,17 +86729,13 @@ /obj/machinery/door/airlock/maintenance{ name = "Abandoned Clown Theater" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/clown_chamber) "qzC" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -99481,13 +86835,6 @@ pixel_x = -6 }, /obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/service/hydroponics) @@ -99498,19 +86845,14 @@ name = "Cell 3"; req_access = list("security") }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/vg_decals/numbers/three, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/security/brig) "qAE" = ( -/obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron/dark/side{ dir = 9 }, @@ -99564,6 +86906,9 @@ c_tag = "Security - Outpost"; dir = 9 }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/execution/transfer) "qBm" = ( @@ -99584,12 +86929,8 @@ /area/station/ai_monitored/security/armory) "qBA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/chair/office/light{ dir = 8 }, @@ -99667,9 +87008,7 @@ /obj/effect/turf_decal/siding/thinplating/dark/end, /obj/machinery/shower/directional/south, /obj/structure/drain, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "qCv" = ( /obj/effect/turf_decal/trimline/red/filled/line{ @@ -99677,15 +87016,14 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) +"qCy" = ( +/turf/closed/wall, +/area/station/service/forge) "qCz" = ( /obj/machinery/firealarm/directional/west, /obj/structure/table/reinforced, @@ -99711,8 +87049,8 @@ /turf/open/floor/cult, /area/station/maintenance/cult_chapel_maint) "qCI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/side, /area/station/security/prison/upper) @@ -99746,10 +87084,10 @@ /turf/open/floor/plating, /area/station/maintenance/rus_gambling) "qCP" = ( -/obj/effect/spawner/random/vending/snackvend, /obj/effect/turf_decal/siding/thinplating_new{ dir = 1 }, +/obj/structure/closet/crate/bin, /turf/open/floor/iron/dark, /area/station/hallway/primary/port) "qCS" = ( @@ -99778,12 +87116,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/navigate_destination, /turf/open/floor/iron, /area/station/engineering/atmos/office) @@ -99826,10 +87160,8 @@ /area/station/ai_monitored/turret_protected/aisat_interior) "qDn" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/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/security/checkpoint/customs/auxiliary) @@ -99855,12 +87187,8 @@ }, /obj/machinery/light/directional/south, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/command/bridge) "qDq" = ( @@ -99895,12 +87223,8 @@ /obj/structure/cable, /obj/machinery/firealarm/directional/west, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva/upper) "qDF" = ( @@ -99916,20 +87240,17 @@ /turf/open/floor/iron, /area/station/hallway/primary/upper) "qDH" = ( -/obj/effect/turf_decal/tile/green{ - dir = 1 +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 }, /turf/open/floor/iron/dark/side{ dir = 6 }, /area/station/hallway/primary/central) "qDO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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, /area/station/security/interrogation) "qDP" = ( @@ -99959,16 +87280,6 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/wood, /area/station/command/meeting_room/council) -"qEm" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "qEn" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/caution/stand_clear{ @@ -99977,16 +87288,10 @@ /turf/open/floor/plating, /area/station/escapepodbay) "qEo" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/portables_connector/visible, /turf/open/floor/iron/dark, /area/station/engineering/atmos/test_chambers) "qEt" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/item/clothing/mask/breath, /turf/open/floor/plating, /area/station/maintenance/port/aft) @@ -100025,17 +87330,11 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/sorting) "qEW" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, /obj/machinery/light/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -100051,9 +87350,7 @@ /area/station/security/checkpoint) "qFa" = ( /obj/structure/cable, -/turf/open/floor/iron/shuttle/evac{ - initial_gas_mix = "TEMP=2.7" - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "qFc" = ( /obj/effect/turf_decal/bot, @@ -100078,8 +87375,8 @@ /area/station/maintenance/aft/upper) "qFr" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -100114,28 +87411,15 @@ /turf/open/floor/grass, /area/station/service/cafeteria) "qFI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/radio/intercom/directional/south, /obj/machinery/duct, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/nt_rep) -"qFP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/command/gateway) "qFQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/curtain/cloth/fancy/mechanical/start_closed{ desc = "A set of curtains serving as a fancy theater backdrop. They can only be opened by a button."; id = "theater_curtains"; @@ -100144,18 +87428,14 @@ /turf/open/floor/wood, /area/station/service/theater) "qFV" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/captain/private) "qFW" = ( /obj/structure/railing/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth_edge{ dir = 1 }, @@ -100177,12 +87457,8 @@ "qGm" = ( /obj/effect/turf_decal/bot_white, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -100214,7 +87490,7 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "qGC" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/commons/fitness) @@ -100238,12 +87514,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/engineering/atmos_aux_port) "qGP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/corner{ dir = 4 }, @@ -100256,21 +87528,14 @@ /obj/machinery/recharger{ pixel_y = 2 }, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "qGV" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/central) @@ -100307,12 +87572,8 @@ "qHq" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/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/central) "qHx" = ( @@ -100332,8 +87593,7 @@ dir = 8; pixel_x = 30 }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 }, /turf/open/floor/iron, @@ -100356,12 +87616,8 @@ /turf/open/floor/iron/white/side, /area/station/science/xenobiology) "qHK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -100428,20 +87684,16 @@ /turf/closed/wall/r_wall, /area/station/common/arcade) "qIv" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/effect/turf_decal/siding/wood{ dir = 1 }, /obj/structure/chair/stool/bar/directional/south, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/kitchen/diner) "qIA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/office) "qIB" = ( @@ -100574,8 +87826,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) "qJF" = ( @@ -100586,8 +87838,8 @@ /turf/open/floor/iron/dark/textured_edge, /area/station/security/prison/garden) "qJH" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/machinery/vending/boozeomat, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "qJJ" = ( @@ -100668,12 +87920,8 @@ "qKA" = ( /obj/machinery/power/terminal, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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) "qKF" = ( @@ -100686,9 +87934,7 @@ /obj/effect/turf_decal/siding/brown{ dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/cargo/sorting) "qKN" = ( @@ -100708,9 +87954,6 @@ /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva/upper) "qKW" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/effect/turf_decal/stripes/white/line{ dir = 1 }, @@ -100718,9 +87961,7 @@ /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) "qLh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/common/laser_tag) "qLj" = ( @@ -100739,7 +87980,7 @@ dir = 4 }, /obj/effect/landmark/start/bartender, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/hallway/secondary/service) "qLC" = ( @@ -100754,12 +87995,6 @@ /area/station/medical/storage) "qLQ" = ( /obj/effect/turf_decal/bot_white/left, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 5 - }, /obj/structure/closet/crate/hydroponics, /turf/open/floor/iron/dark/small, /area/station/cargo/miningdock) @@ -100783,10 +88018,8 @@ /obj/effect/turf_decal/bot_white, /obj/structure/cable, /obj/machinery/holopad/secure, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/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/aisat_interior) "qMb" = ( @@ -100794,25 +88027,12 @@ /turf/open/floor/plating, /area/station/security/detectives_office/private_investigators_office) "qMm" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/table, /obj/structure/bedsheetbin, /turf/open/floor/iron/kitchen{ dir = 1 }, /area/station/security/prison/upper) -"qMq" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow, -/turf/open/floor/iron, -/area/station/construction/mining/aux_base) "qMs" = ( /obj/effect/turf_decal/weather/sand{ dir = 1 @@ -100852,12 +88072,8 @@ /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "qML" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -100870,9 +88086,7 @@ req_access = list("security") }, /obj/machinery/firealarm/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "qMV" = ( @@ -100892,8 +88106,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/upper) "qNf" = ( @@ -100935,12 +88149,8 @@ /obj/effect/turf_decal/bot, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/command/gateway, /turf/open/floor/iron/dark/side{ dir = 8 @@ -100956,21 +88166,15 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, /turf/open/floor/iron/white, /area/station/science/xenobiology) "qNB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/railing/corner{ dir = 1 }, @@ -100986,17 +88190,6 @@ }, /turf/open/floor/iron, /area/station/science/research/abandoned) -"qNL" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "qNP" = ( /obj/structure/railing{ dir = 8 @@ -101030,24 +88223,16 @@ dir = 9 }, /obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/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/department/medical/morgue) "qOe" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -101064,9 +88249,6 @@ /obj/machinery/computer/security{ dir = 4 }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, /obj/machinery/airalarm/directional/south, @@ -101074,28 +88256,18 @@ /area/station/security/checkpoint) "qOA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/iron, /area/station/commons/dorms) -"qOD" = ( -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/open/floor/iron, -/area/station/medical/cryo) "qOJ" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/public/glass{ name = "Central Hallway" @@ -101131,8 +88303,8 @@ /area/station/science/xenobiology/control) "qPh" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -101163,9 +88335,6 @@ /obj/structure/railing{ dir = 10 }, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /turf/open/floor/plating/rust, /area/station/maintenance/department/science/xenobiology) "qPs" = ( @@ -101190,12 +88359,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/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/medical/central) "qPD" = ( @@ -101231,27 +88396,20 @@ /area/station/maintenance/department/security/lower) "qPT" = ( /obj/machinery/newscaster/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/barber) "qQe" = ( /obj/effect/turf_decal/vg_decals/numbers/zero{ dir = 4 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "qQf" = ( /obj/structure/cable, /turf/open/floor/carpet, /area/station/service/library/printer) "qQh" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 5 - }, /obj/machinery/camera{ c_tag = "Security - Brig Cell 6"; dir = 6 @@ -101262,10 +88420,8 @@ /turf/open/floor/iron/dark, /area/station/security/brig) "qQi" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 1 - }, /obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "qQj" = ( @@ -101285,16 +88441,7 @@ /obj/structure/barricade/wooden, /turf/open/floor/plating, /area/station/maintenance/console_room) -"qQr" = ( -/obj/structure/chair/stool/bar/directional/north, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen/diner) "qQs" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/disposalpipe/segment, /obj/structure/sign/poster/random/directional/west, /turf/open/floor/iron/dark/side{ @@ -101317,8 +88464,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/directional/east, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -101361,9 +88508,6 @@ }, /obj/effect/landmark/start/security_officer, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /turf/open/floor/iron/dark/corner{ dir = 4 }, @@ -101394,21 +88538,13 @@ /turf/open/floor/iron, /area/station/engineering/storage/tech) "qRI" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip{ dir = 8 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "qRN" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -101440,9 +88576,6 @@ /turf/open/floor/iron/white, /area/station/science) "qSd" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /turf/open/floor/plating, /area/station/maintenance/aux_eva) "qSe" = ( @@ -101459,9 +88592,6 @@ /turf/open/floor/wood/parquet, /area/station/common/night_club) "qSo" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/machinery/photocopier, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -101472,10 +88602,6 @@ }, /area/station/commons/vacant_room/commissary) "qSs" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/stool/bar/directional{ dir = 1 }, @@ -101494,18 +88620,11 @@ /area/station/maintenance/aft/upper) "qSy" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/tile/neutral/half/contrasted{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -101517,20 +88636,13 @@ /obj/effect/turf_decal/siding/wood/corner, /turf/open/floor/wood/parquet, /area/station/service/theater) -"qSH" = ( -/obj/machinery/light/floor, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, -/area/space/nearstation) "qSJ" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) @@ -101617,22 +88729,11 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/command/gateway) -"qTB" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "qTC" = ( /obj/machinery/door/airlock/command{ name = "Telescience Supply Storage" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -101662,12 +88763,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/central) "qTT" = ( @@ -101675,38 +88772,20 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs{ dir = 4 }, /area/station/hallway/primary/port) "qTW" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "qUa" = ( /obj/item/paper/fluff{ @@ -101716,9 +88795,7 @@ /turf/open/floor/plating, /area/station/security/prison/safe) "qUg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/dark/side{ dir = 4 @@ -101729,10 +88806,6 @@ /obj/machinery/computer/security/telescreen/interrogation{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/security/interrogation) @@ -101803,15 +88876,8 @@ /area/station/service/lawoffice) "qVa" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/service/hydroponics) @@ -101853,12 +88919,8 @@ /area/station/maintenance/department/engineering/engine_aft_port) "qVs" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -101904,12 +88966,8 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "qVI" = ( @@ -101928,8 +88986,8 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) "qVY" = ( @@ -101956,12 +89014,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -101973,18 +89027,15 @@ /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ dir = 1 }, +/obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage) "qWn" = ( /obj/structure/flippedtable{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/maintenance/starboard/fore) @@ -102079,10 +89130,8 @@ /area/station/maintenance/fore/upper) "qWU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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, /area/station/medical/aslyum) @@ -102093,10 +89142,8 @@ }, /obj/effect/turf_decal/delivery, /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) @@ -102110,9 +89157,6 @@ /area/station/maintenance/department/science/xenobiology) "qXp" = ( /obj/effect/spawner/random/vending/colavend, -/obj/effect/turf_decal/trimline/white/filled/corner{ - dir = 1 - }, /obj/effect/turf_decal/siding/thinplating_new{ dir = 1 }, @@ -102121,12 +89165,6 @@ "qXs" = ( /turf/closed/wall, /area/station/commons/dorms/room3) -"qXu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/atmos/test_chambers) "qXv" = ( /obj/structure/sink/kitchen/directional/west, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -102145,12 +89183,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/effect/landmark/start/hangover, /turf/open/floor/plating, @@ -102196,9 +89230,7 @@ pixel_x = 3; pixel_y = -1 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) "qYf" = ( /obj/effect/spawner/random/trash/garbage, @@ -102215,13 +89247,12 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/maintenance/starboard/fore) "qYk" = ( -/obj/effect/turf_decal/bot, /obj/machinery/chem_master/condimaster{ name = "CondiMaster Neo" }, @@ -102253,29 +89284,6 @@ "qYv" = ( /turf/open/floor/iron, /area/station/hallway/primary/port) -"qYw" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "qYC" = ( /obj/structure/chair/office{ dir = 1 @@ -102308,6 +89316,7 @@ /area/station/maintenance/port/upper) "qYI" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden, +/obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage) "qYP" = ( @@ -102384,13 +89393,11 @@ /area/station/command/secure_bunker) "qZA" = ( /obj/machinery/photocopier, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "qZD" = ( @@ -102414,10 +89421,6 @@ /area/station/cargo/power_station/upper) "qZM" = ( /obj/structure/table/wood, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3 }, @@ -102435,11 +89438,8 @@ /area/station/hallway/primary/port) "qZQ" = ( /obj/structure/closet/crate/bin, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 }, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -102460,17 +89460,6 @@ }, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) -"rak" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/stripes/blue/line{ - dir = 10 - }, -/obj/structure/closet/secure_closet/personal, -/turf/open/floor/iron/dark, -/area/station/security/lockers) "ral" = ( /obj/machinery/camera/directional/south{ c_tag = "Engineering - Gravity Generator"; @@ -102478,9 +89467,7 @@ name = "engineering camera" }, /obj/machinery/status_display/ai/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes{ dir = 4 }, @@ -102498,22 +89485,12 @@ /turf/open/floor/plating, /area/station/common/pool) "raF" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/hallway/primary/central) "raG" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/machinery/washing_machine, /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/kitchen{ @@ -102522,12 +89499,8 @@ /area/station/security/prison/upper) "raJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/table/wood, /turf/open/floor/wood, /area/station/service/cafeteria) @@ -102541,7 +89514,7 @@ }, /area/station/science/ordnance/bomb) "rba" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/prison/safe) "rbc" = ( @@ -102593,12 +89566,8 @@ /turf/open/floor/wood, /area/station/service/library/abandoned) "rbq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron, @@ -102666,8 +89635,8 @@ /area/station/cargo/miningoffice) "rci" = ( /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/port) "rcq" = ( @@ -102689,9 +89658,6 @@ dir = 8 }, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/cargo/miningoffice) "rcw" = ( @@ -102705,12 +89671,8 @@ }, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_starboard) @@ -102760,8 +89722,8 @@ "rcX" = ( /obj/effect/spawner/random/trash/mess, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -102785,22 +89747,11 @@ /obj/machinery/recharger{ pixel_y = 3 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/item/borg/sight/hud/sec{ pixel_y = 17 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "rdo" = ( @@ -102817,8 +89768,8 @@ /area/station/engineering/atmos/hfr_room) "rdr" = ( /obj/structure/flora/bush/flowers_pp, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/chapel) "rdz" = ( @@ -102829,7 +89780,6 @@ /area/station/security/execution/transfer) "rdB" = ( /obj/structure/closet/secure_closet/personal, -/obj/effect/turf_decal/bot_blue, /obj/effect/turf_decal/siding/wood{ dir = 1 }, @@ -102846,9 +89796,7 @@ pixel_x = -4; pixel_y = 4 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "rdL" = ( /obj/structure/sign/directions/security{ @@ -102868,7 +89816,6 @@ /area/station/maintenance/department/chapel) "rdR" = ( /obj/structure/chair/sofa/right/brown, -/obj/effect/landmark/start/assistant, /obj/machinery/airalarm/directional/north, /turf/open/floor/carpet, /area/station/common/wrestling/lobby) @@ -102886,12 +89833,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) "rem" = ( @@ -102921,12 +89864,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -102940,22 +89879,8 @@ /obj/machinery/computer/atmos_control/nitrogen_tank{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, /obj/structure/window/spawner/directional/south, +/obj/effect/turf_decal/tile/red/real_red/diagonal_centre, /turf/open/floor/iron, /area/station/engineering/atmos) "rew" = ( @@ -102975,22 +89900,24 @@ /obj/effect/turf_decal/tile/blue{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/command/bridge) "reA" = ( /obj/structure/table/reinforced, -/obj/item/taperecorder, +/obj/item/taperecorder{ + pixel_x = 6; + pixel_y = 10 + }, +/obj/item/book/manual/wiki/security_space_law{ + pixel_y = 3 + }, /turf/open/floor/iron/dark, /area/station/security/office) "reB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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) "reE" = ( @@ -103031,9 +89958,6 @@ /area/station/security/execution/transfer) "reW" = ( /obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, /turf/open/floor/iron, /area/station/medical/cryo) @@ -103046,13 +89970,10 @@ /turf/open/floor/plating, /area/station/science/lab) "rfh" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/command) "rfm" = ( @@ -103060,9 +89981,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /turf/open/floor/iron/dark, @@ -103077,32 +89996,18 @@ /turf/open/floor/iron/smooth_edge{ dir = 4 }, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "rfs" = ( /obj/effect/turf_decal/box/white/corners{ dir = 1 }, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) -"rft" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, -/obj/machinery/light/floor, -/obj/effect/turf_decal/trimline/yellow, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "rfu" = ( /turf/open/floor/iron, /area/station/science/auxlab/firing_range) "rfv" = ( /obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/trimline/white/filled/arrow_cw{ - dir = 10 - }, -/obj/effect/turf_decal/trimline/white/filled/corner{ - dir = 4 - }, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, @@ -103157,9 +90062,6 @@ /area/station/security/prison/upper) "rfX" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 10 - }, /obj/structure/bed{ dir = 1; pixel_y = 8 @@ -103201,12 +90103,8 @@ }, /obj/effect/mapping_helpers/airlock/access/all/supply/customs, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/checkpoint/supply) "rgn" = ( @@ -103256,12 +90154,8 @@ name = "Engineering Maintenance" }, /obj/effect/mapping_helpers/airlock/access/all/engineering, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/engineering/lesser) "rgW" = ( @@ -103305,10 +90199,8 @@ /turf/open/floor/iron, /area/station/service/hydroponics) "rhp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/dark/side{ dir = 8 @@ -103322,10 +90214,7 @@ /turf/open/floor/iron/dark, /area/station/science/xenobiology/control) "rhu" = ( -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/liquids/icons/turf/submarine.dmi'; - icon_state = "submarine_perf" - }, +/turf/open/floor/iron/submarine_perf/airless, /area/space/nearstation) "rhA" = ( /obj/structure/table/wood, @@ -103346,15 +90235,10 @@ /turf/open/floor/iron/dark, /area/station/medical/morgue) "rhV" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/lockers) "rhW" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /obj/structure/table/reinforced, /obj/item/storage/toolbox/mechanical, /obj/item/radio{ @@ -103377,8 +90261,8 @@ /turf/open/floor/iron, /area/station/cargo/sorting) "rib" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/carpet/purple, /area/station/common/night_club) @@ -103449,9 +90333,7 @@ /area/station/medical/medbay/central) "riS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/white, /area/station/medical/cryo) @@ -103471,10 +90353,6 @@ /turf/open/space/basic, /area/space/nearstation) "rje" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -103487,12 +90365,8 @@ /obj/item/kirbyplants/random, /obj/machinery/light/directional/south, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/barber) "rjm" = ( @@ -103504,7 +90378,9 @@ /obj/item/reagent_containers/cup/beaker/large, /obj/item/reagent_containers/dropper, /obj/structure/noticeboard/directional/south, -/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "rjq" = ( @@ -103518,9 +90394,6 @@ /turf/open/floor/engine, /area/station/maintenance/department/science/xenobiology) "rjt" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/effect/turf_decal/stripes/white/line{ dir = 1 }, @@ -103536,12 +90409,8 @@ /area/station/service/cafeteria) "rjB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -103549,12 +90418,8 @@ /area/station/service/cafeteria) "rjF" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -103570,35 +90435,18 @@ }, /obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/science/cytology) "rjO" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/sign/poster/contraband/random/directional/south, /turf/open/floor/iron, /area/station/maintenance/clown_chamber) @@ -103620,12 +90468,6 @@ "rjX" = ( /obj/effect/turf_decal/bot, /obj/machinery/power/emitter, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/effect/turf_decal/stripes{ dir = 4 }, @@ -103638,8 +90480,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/research) "rkc" = ( @@ -103682,14 +90524,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/science/xenobiology) -"rkr" = ( -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "rkv" = ( /turf/open/floor/iron/stairs/right{ dir = 8 @@ -103736,21 +90570,7 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/common/arcade) -"rkO" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "rkS" = ( -/obj/effect/turf_decal/stripes, /obj/effect/turf_decal/stripes/red/line, /turf/open/floor/engine, /area/station/science/xenobiology) @@ -103838,23 +90658,10 @@ c_tag = "Chapel Apiary"; name = "chapel camera" }, -/obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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) -"rlD" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "rlG" = ( /obj/machinery/door/airlock/security/glass{ name = "Prison Sanitarium" @@ -103863,12 +90670,8 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/security/brig, /turf/open/floor/iron/dark, /area/station/security/prison) @@ -103945,16 +90748,11 @@ /obj/machinery/door/airlock/medical{ name = "Surgery Theater" }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, /obj/effect/mapping_helpers/airlock/access/all/medical/surgery, +/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "rmz" = ( @@ -103995,18 +90793,12 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/science/cytology) "rnl" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/gulag_teleporter, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) @@ -104015,10 +90807,7 @@ /area/station/science/ordnance/testlab) "rns" = ( /obj/effect/turf_decal/vg_decals/numbers/five, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "rny" = ( /obj/effect/decal/cleanable/dirt{ @@ -104026,12 +90815,8 @@ }, /obj/item/stack/sheet/cardboard, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -104058,7 +90843,7 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "rnT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/common/wrestling/beverage) "rnU" = ( @@ -104091,8 +90876,8 @@ /area/station/science/research/abandoned) "rog" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -104125,12 +90910,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/lobby) "roU" = ( @@ -104151,12 +90932,8 @@ dir = 4 }, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/holopad, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) @@ -104180,29 +90957,21 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) "rpk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/secondary/command) "rpn" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/hallway/primary/central/aft) @@ -104211,7 +90980,7 @@ /turf/open/floor/plating, /area/station/science/research/abandoned) "rpr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/wood, /turf/open/floor/carpet, /area/station/common/tailoring) @@ -104259,8 +91028,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/starboard/fore) "rpO" = ( @@ -104286,12 +91055,8 @@ /area/station/commons/toilet/restrooms) "rpU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -104332,17 +91097,11 @@ /obj/item/restraints/handcuffs, /obj/item/restraints/handcuffs, /obj/item/assembly/flash/handheld, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/red, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -104382,11 +91141,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) -"rqB" = ( -/obj/structure/cable, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "rqC" = ( /turf/closed/wall, /area/station/cargo/office) @@ -104399,12 +91153,8 @@ /turf/open/floor/iron/dark, /area/station/hallway/primary/central/fore) "rqF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/commons/dorms/room3) @@ -104422,8 +91172,8 @@ /area/station/medical/surgery) "rqN" = ( /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -104503,12 +91253,8 @@ /area/station/hallway/primary/central) "rsi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -104577,8 +91323,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "rsO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/iron/dark, @@ -104609,8 +91355,8 @@ id = "brigfront"; name = "Brig Blast Door" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/security/entrance, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -104740,16 +91486,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) -"rtW" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/command/gateway) "rtX" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -104766,35 +91502,31 @@ "rua" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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) "rum" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, /turf/open/floor/iron, /area/station/service/bar) "ruq" = ( /obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/loading_area/white{ - dir = 8 - }, /obj/structure/cable, /obj/machinery/door/poddoor/shutters/window/preopen{ id = "ArrivalsEntry4"; name = "Line Acces Shutter" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/thinplating_new{ dir = 4 }, +/obj/effect/turf_decal/arrows/white{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) "rur" = ( @@ -104821,9 +91553,7 @@ /area/station/maintenance/department/crew_quarters/dorms) "rux" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/transit_tube) "ruz" = ( @@ -104837,12 +91567,8 @@ }, /obj/machinery/door/firedoor/heavy, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/navigate_destination, /obj/effect/mapping_helpers/airlock/access/all/engineering/tech_storage, /turf/open/floor/iron, @@ -104852,8 +91578,8 @@ /turf/open/floor/iron/kitchen, /area/station/security/prison/mess) "ruG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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, @@ -104912,19 +91638,13 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "bridge-east" }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/structure/cable, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/iron/dark, /area/station/command/bridge) "ruY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/common/night_club) "rvb" = ( @@ -104951,12 +91671,8 @@ /turf/open/floor/glass, /area/station/commons/dorms) "rvl" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white/textured, /area/station/medical/aslyum) @@ -104969,8 +91685,8 @@ /obj/structure/disposalpipe/segment, /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos) "rvs" = ( @@ -104981,58 +91697,27 @@ icon_state = "dirt-flat-1" }, /obj/item/trash/semki, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "rvy" = ( /obj/structure/sign/barber{ pixel_x = -13 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/hallway/primary/port) -"rvG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/central) "rvL" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/brig) "rvO" = ( /obj/structure/chair/comfy/black, /obj/effect/landmark/start/head_of_security, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/office) "rvP" = ( @@ -105053,14 +91738,8 @@ /obj/machinery/shower/directional/east{ name = "emergency shower" }, -/obj/effect/turf_decal/bot, /obj/structure/drain, -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark/end{ - dir = 4 - }, +/obj/effect/turf_decal/box, /turf/open/floor/iron/checker, /area/station/engineering/main) "rwl" = ( @@ -105120,9 +91799,7 @@ /obj/effect/turf_decal/vg_decals/numbers/nine{ dir = 8 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "rwS" = ( /obj/structure/chair/sofa/bench/left{ @@ -105142,8 +91819,8 @@ }, /area/station/security/prison) "rwZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -105188,23 +91865,10 @@ }, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) -"rxv" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Central Hallway" - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/hallway/primary/port) "rxy" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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, /area/station/cargo/lobby) @@ -105225,10 +91889,6 @@ /area/station/maintenance/abandon_office) "rxG" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /obj/machinery/light/directional/west, /obj/machinery/power/energy_accumulator/tesla_coil, /turf/open/floor/iron/dark/side{ @@ -105245,33 +91905,18 @@ /obj/structure/sign/warning/vacuum/external/directional/south, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"rxP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/engineering/transit_tube) "rxQ" = ( /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/light/colour_cycle/dancefloor_b, /area/station/common/night_club) "rxR" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - 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, /area/station/science/research) "rxV" = ( /obj/machinery/computer/security, -/obj/effect/turf_decal/stripes, /obj/structure/extinguisher_cabinet/directional/north, /obj/effect/turf_decal/stripes/blue/line, /turf/open/floor/iron/dark, @@ -105303,10 +91948,8 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/surgery) @@ -105341,8 +91984,8 @@ /area/station/maintenance/department/science/ordnance_maint) "ryK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron_dark, /area/station/hallway/primary/central) "ryM" = ( @@ -105373,8 +92016,8 @@ "rzg" = ( /obj/effect/turf_decal/tile/brown/half/contrasted, /obj/structure/disposalpipe/junction, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/office) "rzv" = ( @@ -105387,12 +92030,8 @@ id_tag = "Capoffice2"; name = "Captain's Suite" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -105434,7 +92073,7 @@ /obj/structure/chair{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/courtroom) "rAA" = ( @@ -105462,29 +92101,7 @@ }, /turf/open/floor/grass, /area/station/medical/patients_rooms) -"rAL" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron/white, -/area/station/medical/surgery) "rAN" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall11"; location = "hall10" @@ -105511,22 +92128,10 @@ "rBo" = ( /obj/effect/turf_decal/siding/wood/corner, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) -"rBt" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/eighties/red, -/area/station/common/arcade) "rBw" = ( /obj/structure/inflatable/door, /turf/open/floor/plating, @@ -105551,12 +92156,8 @@ /turf/open/floor/engine, /area/station/engineering/supermatter/room) "rBK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/science/auxlab/firing_range) @@ -105582,8 +92183,8 @@ /area/station/hallway/primary/central) "rBT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/wood, /area/station/command/meeting_room/council) @@ -105650,12 +92251,8 @@ /obj/item/stack/sheet/cardboard, /obj/item/storage/box/lights/mixed, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/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/department/medical) "rCi" = ( @@ -105682,30 +92279,16 @@ /turf/open/floor/iron/checker, /area/station/service/janitor) "rCA" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, /obj/machinery/door/airlock/maintenance{ name = "Abandoned Clown Theater" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/clown_chamber) "rCC" = ( -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/engineering_personal, /turf/open/floor/iron/dark, /area/station/engineering/break_room) @@ -105784,9 +92367,7 @@ /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) "rCS" = ( -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/station/maintenance/fore/upper) "rCT" = ( /obj/effect/turf_decal/tile/red, @@ -105802,8 +92383,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/iron, @@ -105829,13 +92410,6 @@ dir = 8 }, /area/station/hallway/primary/upper) -"rDs" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "rDv" = ( /obj/structure/chair{ dir = 4 @@ -105851,21 +92425,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"rDG" = ( -/obj/effect/turf_decal/trimline/purple/filled/warning, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/research) "rDK" = ( /obj/structure/table/wood, /obj/item/paper_bin{ @@ -105901,18 +92460,8 @@ "rDT" = ( /obj/structure/cable, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/security/glass{ name = "Shuttle Hangar" }, @@ -105920,18 +92469,14 @@ dir = 1 }, /obj/effect/mapping_helpers/airlock/access/all/security/general, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "rDU" = ( /obj/effect/turf_decal/delivery, /obj/machinery/bluespace_beacon, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/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/gateway) "rDV" = ( @@ -105977,18 +92522,14 @@ /area/station/hallway/secondary/exit/departure_lounge) "rEk" = ( /obj/effect/decal/cleanable/blood/gibs/old, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/freezer, /area/station/maintenance/abandon_kitchen_upper) "rEm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -106019,20 +92560,16 @@ network = list("minisat"); start_active = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "rED" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/science) @@ -106049,7 +92586,7 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/lower) "rES" = ( -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "rFd" = ( @@ -106071,12 +92608,8 @@ c_tag = " Prison - Upper"; network = list("ss13","prison") }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/newscaster/directional/north, /obj/machinery/duct, /turf/open/floor/iron/dark/side{ @@ -106095,19 +92628,6 @@ "rFr" = ( /turf/open/floor/iron/dark/corner, /area/station/security/prison/upper) -"rFt" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "rFv" = ( /obj/structure/chair/comfy/brown{ dir = 4 @@ -106125,12 +92645,8 @@ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/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/research) "rFD" = ( @@ -106157,19 +92673,21 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) +"rFN" = ( +/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/mess) "rFR" = ( /obj/machinery/camera/directional/west{ c_tag = "Prison gym"; network = list("ss13","prison") }, +/obj/item/kirbyplants/random, /turf/open/floor/iron/dark, /area/station/security/prison/workout) "rFT" = ( @@ -106191,10 +92709,8 @@ c_tag = "Command - E.V.A."; name = "command camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) "rFV" = ( @@ -106240,8 +92756,8 @@ /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /obj/machinery/firealarm/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/ordnance/testlab) "rGn" = ( @@ -106287,7 +92803,7 @@ /obj/structure/bed/maint, /obj/item/toy/plush/rouny, /obj/machinery/flasher{ - id = "IsolationFlash"; + id = "IsolationCell_2"; pixel_x = 22; pixel_y = 28 }, @@ -106321,31 +92837,14 @@ /obj/item/pen{ pixel_y = 3 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/security/detectives_office) "rGZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science) -"rHc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron/dark, -/area/station/security/prison/workout) "rHm" = ( /obj/structure/chair/office{ dir = 8 @@ -106353,19 +92852,6 @@ /obj/effect/landmark/start/geneticist, /turf/open/floor/iron/white, /area/station/science/genetics) -"rHt" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/checkpoint/customs) "rHu" = ( /obj/structure/cable, /turf/open/floor/iron/dark/side{ @@ -106403,16 +92889,13 @@ /area/station/command/heads_quarters/captain) "rHI" = ( /obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/firealarm/directional/south, /obj/machinery/camera/directional/south{ c_tag = "Security - Gear Room" }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark/side{ dir = 10 }, @@ -106421,19 +92904,9 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -106454,12 +92927,8 @@ network = list("ss13","prison") }, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/safe) "rHT" = ( @@ -106467,8 +92936,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/fore/upper) "rHV" = ( @@ -106485,7 +92954,6 @@ /area/station/maintenance/department/medical/central) "rIc" = ( /obj/structure/rack, -/obj/effect/turf_decal/stripes, /obj/effect/spawner/random/aimodule/harmful, /obj/machinery/light/directional/east, /obj/structure/cable, @@ -106499,17 +92967,6 @@ name = "Padded tile" }, /area/station/medical/aslyum) -"rIg" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/research) "rIh" = ( /obj/structure/railing{ dir = 1 @@ -106519,36 +92976,18 @@ dir = 8 }, /area/station/cargo/miningdock) -"rIi" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/iron/white, -/area/station/medical/coldroom) "rIB" = ( /obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/openspace, /area/station/maintenance/fore/upper) "rIC" = ( /obj/machinery/suit_storage_unit/industrial, -/obj/effect/turf_decal/stripes/end, /turf/open/floor/plating, /area/station/cargo/storage) "rIJ" = ( /obj/structure/closet/emcloset, -/obj/effect/turf_decal/bot, /obj/effect/turf_decal/siding/thinplating_new{ dir = 4 }, @@ -106573,12 +93012,8 @@ /area/station/service/theater/abandoned) "rIP" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -106586,31 +93021,12 @@ /area/station/commons/dorms) "rIQ" = ( /obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/dorms) -"rIR" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "rIX" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/computer/prisoner/gulag_teleporter_computer{ dir = 8 }, @@ -106618,21 +93034,12 @@ /area/station/security/execution/transfer) "rJf" = ( /obj/structure/window/reinforced/tinted/spawner/directional/east, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, /obj/item/toy/plush/slimeplushie{ name = "Lasertag Blue Flag" }, /obj/structure/window/reinforced/tinted/spawner/directional/south, /obj/structure/window/reinforced/tinted/spawner/directional/north, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "rJh" = ( @@ -106690,13 +93097,6 @@ }, /turf/open/floor/iron/dark/side, /area/station/hallway/primary/central) -"rJD" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/turf/open/floor/iron/dark, -/area/station/security/brig) "rJL" = ( /obj/structure/table/wood, /obj/item/food/grown/harebell, @@ -106729,8 +93129,8 @@ /area/station/hallway/primary/central) "rJZ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/hydroponics/garden) "rKn" = ( @@ -106802,8 +93202,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /obj/machinery/duct, @@ -106828,12 +93228,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/hallway/primary/upper) "rLH" = ( @@ -106846,9 +93242,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) "rLL" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /obj/effect/turf_decal/stripes/red/line{ dir = 6 }, @@ -106883,12 +93276,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) "rMr" = ( @@ -106924,10 +93313,8 @@ /area/station/maintenance/department/security/lesser) "rMz" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hallup3"; location = "hallup2" @@ -106945,16 +93332,6 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) -"rMC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/wood/parquet, -/area/station/command/heads_quarters/nt_rep) "rMM" = ( /obj/effect/turf_decal/tile/blue/fourcorners, /obj/effect/turf_decal/siding/wood{ @@ -106969,12 +93346,8 @@ pixel_y = 32 }, /obj/machinery/airalarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -107004,9 +93377,10 @@ name = "Science Power Station" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/any/science/rd, /obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/science/power_station) "rNl" = ( @@ -107028,18 +93402,14 @@ "rNv" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_large, /area/station/cargo/storage) "rNy" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/hallway/primary/port) "rNG" = ( @@ -107062,12 +93432,8 @@ /area/station/maintenance/port/upper) "rNY" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/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/checkpoint/escape) "rOc" = ( @@ -107095,12 +93461,8 @@ "rOl" = ( /obj/machinery/light/directional/north, /obj/machinery/status_display/ai/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/left{ dir = 8 }, @@ -107149,20 +93511,13 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "rOM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/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/grimy, /area/station/command/heads_quarters/captain/private) "rON" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "rPi" = ( @@ -107196,9 +93551,7 @@ dir = 9 }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/cytology) @@ -107293,12 +93646,8 @@ pixel_y = 5 }, /obj/effect/turf_decal/siding/thinplating/dark, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/grass, /area/station/service/chapel) "rQn" = ( @@ -107323,7 +93672,7 @@ /turf/open/floor/wood, /area/station/security/courtroom) "rQt" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/siding/wood{ dir = 1 }, @@ -107337,27 +93686,6 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/service/barber) -"rQA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/catwalk_floor{ - initial_gas_mix = "TEMP=2.7" - }, -/area/space/nearstation) -"rRb" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) "rRe" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -107405,12 +93733,8 @@ /area/station/common/arcade) "rRu" = ( /obj/machinery/door/airlock/maintenance_hatch, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/maintenance, /obj/structure/cable, /turf/open/floor/plating, @@ -107419,8 +93743,8 @@ /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/xenobiology) @@ -107465,11 +93789,8 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/trash/crushed_can, /turf/open/floor/iron/dark/small, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "rSj" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining{ name = "Cargo Bay" @@ -107488,10 +93809,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"rSr" = ( -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron/smooth_large, -/area/station/cargo/storage) "rSs" = ( /turf/open/floor/glass/reinforced, /area/station/security/prison) @@ -107526,12 +93843,8 @@ "rSB" = ( /obj/machinery/holopad/secure, /obj/effect/turf_decal/bot_white, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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) "rSK" = ( @@ -107560,18 +93873,11 @@ }, /turf/open/space/basic, /area/space/nearstation) -"rST" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "rSX" = ( /obj/structure/stairs/south, /turf/open/floor/iron, /area/station/hallway/primary/port) "rSY" = ( -/obj/effect/turf_decal/stripes/corner, /obj/structure/table/reinforced, /obj/item/storage/toolbox/electrical, /obj/item/clothing/gloves/color/yellow, @@ -107605,17 +93911,12 @@ /obj/effect/turf_decal/delivery/blue, /obj/structure/cable, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark, /area/station/security/office) -"rTg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "rTs" = ( /obj/structure/flora/bush/lavendergrass, /obj/machinery/door/window/left{ @@ -107630,24 +93931,19 @@ id = "rdgene"; name = "Genetics Lab Shutters" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/grass, /area/station/science/genetics) "rTv" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/item/paper_bin{ pixel_y = 3 }, /obj/item/pen{ pixel_y = 4 }, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "rTx" = ( @@ -107667,9 +93963,7 @@ /turf/open/openspace/airless, /area/station/maintenance/port/upper) "rTH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/theater/abandoned) "rTL" = ( @@ -107679,26 +93973,6 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"rTO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/research) -"rTQ" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "rUb" = ( /obj/machinery/button/curtain{ id = "prisoncell7"; @@ -107723,8 +93997,8 @@ /area/station/science/xenobiology) "rUd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/fore/upper) @@ -107768,17 +94042,8 @@ /obj/machinery/power/shuttle_engine/heater{ dir = 4 }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /turf/open/floor/plating/airless, /area/space/nearstation) -"rUM" = ( -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/hallway/primary/port) "rVd" = ( /obj/machinery/power/shuttle_engine/heater{ dir = 1 @@ -107805,14 +94070,10 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) "rVq" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/caution/stand_clear/blue{ + dir = 8 }, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -107849,12 +94110,8 @@ /obj/structure/cable, /obj/structure/disposalpipe/segment, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/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/medical/morgue) "rVE" = ( @@ -107885,8 +94142,8 @@ name = "Penalty Chamber" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark, @@ -107899,51 +94156,14 @@ /obj/machinery/status_display/ai/directional/west, /turf/open/floor/iron/dark, /area/station/command/gateway) -"rVS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) "rVU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/iron, /area/station/science/robotics) -"rVY" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/morgue) -"rWa" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "rWg" = ( /obj/structure/railing/corner, /obj/effect/turf_decal/tile/neutral, @@ -107966,10 +94186,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -108023,8 +94241,8 @@ /area/station/maintenance/solars/starboard/fore) "rWQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) @@ -108051,12 +94269,8 @@ /area/station/maintenance/abandon_exam/cat) "rXg" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -108064,9 +94278,6 @@ /turf/open/floor/iron, /area/station/commons/dorms) "rXk" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 5 - }, /obj/machinery/camera{ c_tag = "Security - Brig Cell 5"; dir = 6 @@ -108102,12 +94313,8 @@ /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/office) "rXy" = ( @@ -108132,12 +94339,8 @@ /area/station/science/xenobiology) "rXO" = ( /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -108150,12 +94353,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) "rXY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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, /area/station/maintenance/abandon_diner) @@ -108236,12 +94435,6 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "rYU" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, @@ -108295,12 +94488,8 @@ name = "Gravity Generator Room" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/sign/warning/radiation/directional/north, /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "grav-gen" @@ -108312,13 +94501,10 @@ }, /area/station/engineering/gravity_generator) "rZq" = ( -/obj/machinery/portable_atmospherics/scrubber, -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/effect/turf_decal/stripes/box, +/obj/vehicle/sealed/mecha/ripley/paddy/preset, +/turf/open/floor/iron/recharge_floor, +/area/station/security/mechbay) "rZu" = ( /obj/item/storage/crayons{ pixel_x = 2; @@ -108329,9 +94515,9 @@ /turf/open/floor/grass, /area/station/medical/patients_rooms) "rZz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side, /area/station/security/prison) "rZC" = ( @@ -108360,11 +94546,13 @@ /turf/closed/wall/r_wall, /area/station/command/gateway) "rZM" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/effect/turf_decal/siding/wood{ dir = 1 }, /obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/kitchen/diner) "rZN" = ( @@ -108374,12 +94562,8 @@ /turf/open/floor/iron/white, /area/station/medical/chemistry) "rZO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/landmark/start/hangover, /turf/open/floor/eighties/red, @@ -108427,8 +94611,8 @@ /area/station/security/warden) "sal" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/sorting/mail{ dir = 4; name = "Toxin Junction"; @@ -108444,15 +94628,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"saI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "saL" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 10 @@ -108460,13 +94635,12 @@ /obj/machinery/airalarm/directional/west, /obj/machinery/light/directional/west, /obj/machinery/chem_mass_spec, -/obj/effect/turf_decal/bot, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "saM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/plating, /area/station/maintenance/port/aft) @@ -108502,12 +94676,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/electronic_marketing_den) "sbk" = ( @@ -108523,21 +94693,15 @@ /obj/structure/chair/office{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/detectives_office) "sbn" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/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/security/checkpoint/medical) "sbo" = ( @@ -108596,12 +94760,8 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "sbQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -108647,10 +94807,6 @@ /turf/open/floor/iron, /area/station/maintenance/console_room) "sci" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -108658,8 +94814,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) "sck" = ( @@ -108675,17 +94831,13 @@ /area/station/hallway/secondary/command) "sco" = ( /obj/machinery/light/floor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/transit_tube) "scr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/blueshield) "scw" = ( @@ -108716,22 +94868,14 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "scI" = ( /obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -108779,7 +94923,7 @@ /obj/effect/turf_decal/stripes{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "sdw" = ( @@ -108790,9 +94934,6 @@ dir = 8 }, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, /obj/structure/cable, /turf/open/floor/mineral/plastitanium/red, /area/station/maintenance/cult_chapel_maint) @@ -108831,12 +94972,8 @@ /turf/open/floor/iron, /area/station/engineering/storage) "sdK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -108847,8 +94984,8 @@ /area/station/common/wrestling/arena) "sdM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/wood, /area/station/command/heads_quarters/captain/private) @@ -108860,22 +94997,12 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "sdR" = ( -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ +/obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /turf/open/floor/iron/dark, /area/station/command/bridge) "sdU" = ( @@ -108889,7 +95016,6 @@ /turf/open/floor/plating, /area/station/engineering/atmos) "sdZ" = ( -/obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes, /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/iron/dark, @@ -108955,8 +95081,8 @@ /area/station/cargo/sorting) "seG" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/command/heads_quarters/hos) @@ -109027,9 +95153,6 @@ name = "Luggage conveyor switch"; pixel_y = 8 }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/plating, /area/station/maintenance/central) "sfn" = ( @@ -109061,9 +95184,7 @@ /turf/open/floor/wood, /area/station/service/cafeteria) "sfS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) @@ -109081,8 +95202,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/science/general, /turf/open/floor/iron/white, @@ -109122,7 +95243,6 @@ /area/station/hallway/primary/upper) "sgw" = ( /obj/machinery/disposal/bin, -/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 6 }, @@ -109139,9 +95259,7 @@ /area/station/medical/medbay/central) "sgz" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -109152,25 +95270,10 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) -"sgF" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "sgI" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 6 @@ -109180,12 +95283,8 @@ /area/station/science/research) "sgU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -109194,16 +95293,10 @@ /area/station/commons/dorms) "sgW" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/item/book/manual/wiki/security_space_law{ - pixel_y = 3 - }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/item/mod/module/plasma_stabilizer, +/obj/item/mod/module/signlang_radio, +/obj/item/mod/module/thermal_regulator, /turf/open/floor/iron/dark, /area/station/security/office) "sgZ" = ( @@ -109228,12 +95321,6 @@ /turf/open/floor/iron, /area/station/security/checkpoint/medical) "she" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/closet/crate/freezer/blood, /obj/machinery/light/directional/north, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -109254,15 +95341,6 @@ /obj/effect/turf_decal/tile/yellow/full, /turf/open/floor/iron/large, /area/station/command/heads_quarters/ce) -"shy" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 6 - }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, -/area/space/nearstation) "shI" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/structure/cable, @@ -109331,27 +95409,19 @@ /turf/open/floor/grass, /area/station/medical/patients_rooms) "siA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/spawner/random/trash/crushed_can, /turf/open/floor/iron/smooth, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "siB" = ( /obj/structure/rack, /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/aft/upper) "siD" = ( @@ -109374,9 +95444,7 @@ "siP" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/bed/dogbed, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/command/secure_bunker) "siQ" = ( @@ -109408,7 +95476,7 @@ /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/security/prison/mess) "siW" = ( -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/floor/plating, /area/station/maintenance/department/science/lower) "siX" = ( @@ -109422,8 +95490,9 @@ /area/station/security/range) "sjf" = ( /obj/structure/table/reinforced, -/obj/effect/spawner/random/engineering/material_cheap, -/obj/item/clothing/gloves/color/yellow, +/obj/item/mod/module/plasma_stabilizer, +/obj/item/mod/module/signlang_radio, +/obj/item/mod/module/thermal_regulator, /turf/open/floor/iron/dark, /area/station/engineering/storage_shared) "sjh" = ( @@ -109447,12 +95516,8 @@ }, /obj/machinery/pdapainter/security, /obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "sjq" = ( @@ -109506,8 +95571,8 @@ "sjT" = ( /obj/structure/cable, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/port) @@ -109528,12 +95593,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/command/secure_bunker) "skf" = ( @@ -109547,16 +95608,6 @@ /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hop) "skg" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/table, /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/north, @@ -109570,7 +95621,7 @@ pixel_x = -3; pixel_y = -3 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload) "skh" = ( /obj/machinery/door/airlock/maintenance, @@ -109596,12 +95647,8 @@ /area/station/science/xenobiology/hallway) "skz" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/fore/upper) @@ -109623,12 +95670,8 @@ /area/station/engineering/atmos/test_chambers) "skS" = ( /obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -109641,15 +95684,6 @@ /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/white, /area/station/medical/break_room) -"skU" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/station/maintenance/fore/upper) "skZ" = ( /obj/effect/decal/cleanable/oil, /obj/effect/spawner/random/trash/cigbutt, @@ -109673,8 +95707,8 @@ "slh" = ( /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -109700,15 +95734,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) -"slF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) "slG" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -109837,22 +95862,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"smU" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "smV" = ( /obj/item/kirbyplants/random, /turf/open/floor/iron/dark, @@ -109866,22 +95875,12 @@ /turf/open/floor/wood, /area/station/service/barber/spa) "smY" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/table, /obj/item/screwdriver{ pixel_y = 3 }, /obj/item/wirecutters, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "sna" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -109896,6 +95895,11 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, +/obj/machinery/status_display/door_timer{ + id = "IsolationCell_1"; + name = "Isolation Cell 1"; + pixel_y = -32 + }, /turf/open/floor/iron/dark, /area/station/security/prison/safe) "snl" = ( @@ -109951,12 +95955,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/maintenance/port/upper) "snF" = ( @@ -109994,39 +95994,19 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical) "sof" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/dark/side{ dir = 4 }, /area/station/security/prison/upper) "soi" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green, /obj/machinery/light/small/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, +/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/tile/green/opposingcorners, /turf/open/floor/iron/white, /area/station/medical/virology) "sot" = ( @@ -110042,19 +96022,12 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "sov" = ( -/obj/effect/turf_decal/trimline/white/filled/line{ - dir = 8 - }, /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "sox" = ( @@ -110067,9 +96040,7 @@ /turf/open/floor/iron, /area/station/commons/dorms) "soz" = ( -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "soC" = ( /obj/structure/window/reinforced/tinted/spawner/directional/west, @@ -110110,12 +96081,8 @@ name = "Jail Cell" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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 = 4 }, @@ -110139,8 +96106,8 @@ /area/station/maintenance/aft/upper) "spp" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/medical/pharmacy) "spq" = ( @@ -110158,27 +96125,16 @@ name = "Court Cell"; req_access = list("brig") }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/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/courtroom) "spD" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, /obj/effect/decal/cleanable/oil, /turf/open/floor/plating/airless, /area/station/maintenance/fore/upper) "spE" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/machinery/field/generator, /obj/effect/turf_decal/stripes{ dir = 1 @@ -110196,38 +96152,19 @@ /obj/structure/closet/secure_closet/personal, /turf/open/floor/iron/dark, /area/station/engineering/break_room) -"spL" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "spO" = ( /turf/open/floor/iron/white, /area/station/science/genetics) "spS" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth_large, /area/station/cargo/storage) "sqa" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison/shower) -"sqh" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "sqn" = ( /obj/effect/turf_decal/stripes/box, /obj/effect/turf_decal/stripes/red/box, @@ -110248,8 +96185,8 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "sqy" = ( @@ -110258,18 +96195,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/science/lower) -"sqD" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "sqS" = ( /obj/structure/railing{ dir = 8 @@ -110293,12 +96218,8 @@ /area/station/security/brig) "srd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -110314,30 +96235,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"srh" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/virology) "srj" = ( /obj/effect/turf_decal/delivery, /obj/machinery/space_heater, @@ -110382,19 +96279,13 @@ /turf/open/floor/iron, /area/station/security/checkpoint/engineering) "srx" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/security/checkpoint/medical) "sry" = ( /obj/item/cigbutt, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/crew_quarters/dorms) "srD" = ( @@ -110406,9 +96297,6 @@ /area/station/security/execution/transfer) "srJ" = ( /obj/structure/extinguisher_cabinet/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -110420,12 +96308,8 @@ /obj/structure/sign/picture_frame/showroom/four{ pixel_y = 32 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -110453,12 +96337,8 @@ icon_state = "dirt-flat-1" }, /obj/effect/spawner/random/trash/cigbutt, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) @@ -110483,15 +96363,6 @@ /obj/effect/turf_decal/trimline/purple/filled/line, /turf/open/floor/iron/white, /area/station/science/research) -"ssp" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/wood, -/area/station/security/courtroom) "ssr" = ( /obj/effect/landmark/start/lawyer, /obj/structure/cable, @@ -110532,8 +96403,8 @@ /area/station/hallway/primary/upper) "ssB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/cafeteria, /area/station/service/kitchen) @@ -110544,49 +96415,20 @@ /turf/open/floor/plating, /area/station/maintenance/department/security/lesser) "ssN" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/structure/mirror/directional/west, /obj/effect/landmark/start/clown, /obj/structure/sink/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/service/theater) -"ssS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white/textured, -/area/station/medical/aslyum) "ssU" = ( /obj/effect/spawner/random/trash/mess, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/aft/upper) "ssW" = ( @@ -110604,15 +96446,10 @@ /area/space) "sto" = ( /obj/structure/chair/sofa/corp/left, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) @@ -110635,8 +96472,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/security/general, /turf/open/floor/iron/dark, /area/station/security/checkpoint/escape) @@ -110670,16 +96507,6 @@ /turf/open/floor/iron/dark, /area/station/security/checkpoint/escape) "stP" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/structure/filingcabinet/chestdrawer, /obj/machinery/newscaster/directional/north, /turf/open/floor/iron, @@ -110687,12 +96514,8 @@ "stQ" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/iron/dark, /area/station/engineering/atmos) @@ -110778,9 +96601,6 @@ /area/station/service/theater/abandoned) "sut" = ( /obj/machinery/rnd/production/techfab/department/cargo, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/machinery/status_display/supply{ pixel_y = 32 }, @@ -110807,12 +96627,8 @@ "suN" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/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/science/lab) @@ -110882,9 +96698,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/cryo) @@ -110896,12 +96710,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/lattice/catwalk, /turf/open/openspace, /area/station/maintenance/department/medical/central) @@ -110960,9 +96770,7 @@ /turf/open/floor/plating, /area/station/security/range) "svL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/main) @@ -110975,13 +96783,10 @@ /turf/open/floor/wood, /area/station/service/library) "svX" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/cable, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "svZ" = ( @@ -110992,26 +96797,18 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "swi" = ( /obj/effect/spawner/random/structure/closet_maintenance, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/science/ordnance_maint) "swj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/security{ name = "Warden's Quarters" }, @@ -111023,25 +96820,13 @@ /obj/structure/table, /obj/machinery/cell_charger, /obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/lab) "swr" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/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/aisat/exterior) "swt" = ( @@ -111078,40 +96863,23 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"swE" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "swG" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/red, /area/station/service/library/abandoned) "swO" = ( /obj/structure/chair/sofa/corp, -/obj/effect/turf_decal/tile/blue{ +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "swQ" = ( @@ -111141,12 +96909,8 @@ /area/station/cargo/lobby) "sxc" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -111171,13 +96935,6 @@ name = "Shooting Range"; req_access = list("security") }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /turf/open/floor/iron/dark, /area/station/security/range) "sxk" = ( @@ -111196,14 +96953,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"sxn" = ( -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/test_chambers) "sxp" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/fore/upper) @@ -111249,9 +97002,7 @@ /area/station/science/server) "sxF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/effect/turf_decal/trimline/green/filled/corner, /obj/structure/cable, @@ -111267,18 +97018,6 @@ /obj/item/storage/photo_album, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"sxK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "sxM" = ( /turf/open/floor/iron/stairs/medium{ dir = 1 @@ -111309,8 +97048,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/maintenance, /turf/open/floor/wood, @@ -111356,16 +97095,6 @@ /obj/effect/decal/cleanable/food/flour, /turf/open/floor/iron/cafeteria, /area/station/common/wrestling/concessions) -"syD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/mineral/plastitanium/red, -/area/station/maintenance/cult_chapel_maint) "syJ" = ( /obj/effect/landmark/start/engineering_guard, /turf/open/floor/iron, @@ -111397,10 +97126,6 @@ /area/station/maintenance/abandon_arcade) "szb" = ( /obj/structure/fans/tiny/forcefield, -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /turf/open/floor/plating, /area/station/cargo/storage) "szl" = ( @@ -111485,15 +97210,6 @@ dir = 8 }, /area/station/command/gateway) -"sAp" = ( -/obj/machinery/power/shuttle_engine/heater{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "sAs" = ( /obj/effect/turf_decal/delivery/white, /obj/machinery/status_display/supply{ @@ -111504,7 +97220,7 @@ /area/station/cargo/storage) "sAv" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad/secure, /turf/open/floor/iron/white, /area/station/security/medical) @@ -111536,12 +97252,8 @@ /area/station/science/research) "sAG" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/sign/gym{ pixel_y = 32 }, @@ -111588,12 +97300,8 @@ /area/station/service/abandoned_gambling_den) "sBh" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "sBj" = ( @@ -111619,7 +97327,6 @@ /turf/closed/wall/r_wall, /area/station/engineering/atmos) "sBu" = ( -/obj/effect/turf_decal/stripes/box, /obj/effect/turf_decal/stripes/red/corner{ dir = 1 }, @@ -111642,22 +97349,17 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/abandon_psych) "sBG" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/structure/table/reinforced, /obj/item/paper_bin, /obj/item/pen, +/obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -111666,7 +97368,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/command/heads_quarters/rd) "sBK" = ( @@ -111688,12 +97390,8 @@ /turf/open/floor/iron/white, /area/station/science/research) "sBZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -111701,12 +97399,8 @@ "sCa" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/siding/purple, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -111767,12 +97461,8 @@ /area/station/command/heads_quarters/rd) "sCB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/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/checkpoint/escape) "sCE" = ( @@ -111784,12 +97474,8 @@ /area/station/maintenance/rus_gambling) "sCF" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/plating, /area/station/engineering/atmos/upper) @@ -111799,8 +97485,7 @@ /obj/item/radio, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ +/obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 }, /turf/open/floor/iron/dark/side{ @@ -111832,7 +97517,7 @@ /area/station/commons/storage/primary) "sCZ" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "sDg" = ( @@ -111842,12 +97527,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/fore/upper) "sDl" = ( @@ -111857,7 +97538,7 @@ /turf/open/floor/iron, /area/station/engineering/break_room) "sDm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/construction) "sDp" = ( @@ -111877,15 +97558,6 @@ "sDx" = ( /turf/open/floor/iron, /area/station/engineering/storage/tech) -"sDz" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "sDG" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -111976,20 +97648,6 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/iron/dark, /area/station/service/bar/atrium) -"sEE" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/machinery/power/smes/engineering, -/obj/structure/cable, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "sEF" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -112002,9 +97660,6 @@ /area/station/maintenance/starboard/fore) "sEL" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/machinery/door/airlock/mining{ name = "Cargo Bay" }, @@ -112012,12 +97667,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_large, /area/station/cargo/office) "sER" = ( @@ -112042,6 +97693,9 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, +/obj/machinery/light/directional/north{ + dir = 2 + }, /turf/open/floor/iron, /area/station/hallway/primary/port) "sEZ" = ( @@ -112068,7 +97722,7 @@ }, /area/station/service/hydroponics) "sFl" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/engineering/storage/tcomms) "sFm" = ( @@ -112113,12 +97767,8 @@ /area/station/command/gateway) "sFC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 4 }, @@ -112128,12 +97778,14 @@ /turf/open/floor/iron, /area/station/science/ordnance/storage) "sFF" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/sign/picture_frame/portrait/bar{ name = "Portrait of the late MR.Deempisi"; pixel_x = 32; pixel_y = 32 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) "sFG" = ( @@ -112142,12 +97794,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/research) @@ -112164,12 +97810,6 @@ /obj/effect/decal/remains/human, /turf/open/floor/plating, /area/station/security/courtroom) -"sFT" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/engine, -/area/station/science/xenobiology) "sFU" = ( /obj/machinery/light/small/directional/north, /turf/open/floor/plating, @@ -112181,8 +97821,8 @@ /area/station/ai_monitored/aisat/exterior) "sFZ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "sGa" = ( @@ -112198,9 +97838,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) "sGr" = ( /obj/machinery/door/firedoor, @@ -112209,12 +97847,8 @@ }, /obj/effect/turf_decal/delivery, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/command/teleporter, /turf/open/floor/iron, /area/station/command/gateway) @@ -112291,8 +97925,8 @@ /area/station/maintenance/department/science/ordnance_maint) "sHp" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -112302,25 +97936,18 @@ /obj/structure/cable, /obj/machinery/light/directional/south, /obj/item/radio/intercom/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "sHt" = ( /turf/open/floor/iron/white, /area/station/medical/treatment_center) "sHv" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/machinery/newscaster/directional/south, /obj/machinery/light/directional/south, /obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "sHy" = ( @@ -112343,10 +97970,8 @@ /area/station/cargo/miningdock) "sHE" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -112358,15 +97983,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/storage/art) -"sHP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/station/security/prison/safe) "sHQ" = ( /obj/machinery/door/airlock/external{ name = "External Docking Port"; @@ -112400,8 +98016,8 @@ /area/station/commons/fitness) "sHV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "sIg" = ( @@ -112412,13 +98028,6 @@ /turf/open/floor/iron, /area/station/security/prison/upper) "sIh" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/computer/records/security{ dir = 4 }, @@ -112440,16 +98049,6 @@ /obj/effect/turf_decal/loading_area, /turf/open/floor/iron/dark, /area/station/cargo/warehouse) -"sIr" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/research) "sIv" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/hedge, @@ -112460,8 +98059,8 @@ /area/station/hallway/primary/upper) "sIH" = ( /obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/port/aft) "sIL" = ( @@ -112473,7 +98072,7 @@ /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "sIN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes{ dir = 4 }, @@ -112490,12 +98089,8 @@ /obj/machinery/door/airlock/silver{ name = "Locker Room" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -112517,12 +98112,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -112618,12 +98209,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/engineering/engine_equipment, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) @@ -112641,15 +98228,15 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "sKb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/dark, /area/station/security/prison/safe) "sKc" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -112687,12 +98274,8 @@ /area/station/service/chapel/office) "sKo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -112764,12 +98347,8 @@ /turf/open/floor/iron/dark, /area/station/medical/surgery/theatre) "sKL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -112815,22 +98394,17 @@ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "sLm" = ( /obj/machinery/computer/atmos_alert{ dir = 8 }, -/obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/engineering/atmos/office) "sLr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 5 }, @@ -112842,8 +98416,8 @@ /area/station/command/heads_quarters/captain/private) "sLx" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/structure/sign/poster/contraband/space_cola/directional/west, /turf/open/floor/wood, @@ -112853,8 +98427,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, @@ -112875,9 +98449,7 @@ "sLK" = ( /obj/effect/turf_decal/siding/wood, /obj/item/radio/intercom/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/captain_dining) "sLL" = ( @@ -112896,14 +98468,6 @@ /obj/structure/sign/poster/random/directional/east, /turf/open/floor/wood, /area/station/hallway/primary/port) -"sLS" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable, -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "sLT" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -112916,13 +98480,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"sLX" = ( -/obj/effect/turf_decal/trimline/purple/filled/line, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/iron/white, -/area/station/science/lab) "sMb" = ( /obj/structure/chair{ dir = 4 @@ -112964,9 +98521,7 @@ /area/station/command/heads_quarters/hop) "sMu" = ( /obj/effect/landmark/start/librarian, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/library) "sMv" = ( @@ -112982,9 +98537,7 @@ "sMw" = ( /obj/structure/sauna_oven, /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/common/pool/sauna) "sMx" = ( @@ -112992,9 +98545,6 @@ dir = 4; id = "garbage" }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /turf/open/floor/plating, /area/station/maintenance/disposal) "sME" = ( @@ -113011,8 +98561,8 @@ "sMM" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/port/fore) "sMR" = ( @@ -113023,20 +98573,10 @@ }, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) -"sMU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "sMY" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/testlab) "sNa" = ( @@ -113064,7 +98604,7 @@ "sNk" = ( /obj/machinery/light/directional/east, /obj/effect/landmark/start/blueshield, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/executive, /area/station/command/heads_quarters/blueshield) "sNn" = ( @@ -113084,9 +98624,7 @@ /turf/open/floor/iron, /area/station/security/checkpoint/supply) "sNw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/cargo/storage) "sNz" = ( @@ -113096,19 +98634,15 @@ /turf/open/floor/iron, /area/station/hallway/primary/starboard) "sND" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/grass, /area/station/service/hydroponics) "sNE" = ( /obj/effect/turf_decal/delivery, /obj/machinery/portable_atmospherics/scrubber, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ dir = 1 }, @@ -113152,17 +98686,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"sOe" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/main) "sOh" = ( /obj/structure/rack, /obj/effect/turf_decal/bot, @@ -113246,8 +98769,8 @@ /obj/machinery/door/airlock/external{ name = "MiniSat Exterior Access" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/transit_tube) "sOV" = ( @@ -113268,12 +98791,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) "sPk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/dark, /area/station/service/chapel) @@ -113295,7 +98814,7 @@ pixel_x = 3; pixel_y = 3 }, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /turf/open/floor/carpet, /area/station/service/library/printer) "sPB" = ( @@ -113319,7 +98838,7 @@ /area/station/service/hydroponics/garden/abandoned) "sPS" = ( /obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/security/courtroom) "sPT" = ( @@ -113327,12 +98846,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/upper) "sPU" = ( @@ -113369,13 +98884,6 @@ /obj/structure/window/spawner/directional/north, /turf/open/floor/iron/dark, /area/station/common/tailoring) -"sQo" = ( -/obj/effect/spawner/random/structure/steam_vent, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/iron, -/area/station/maintenance/department/engineering/engine_aft_port) "sQr" = ( /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/stairs{ @@ -113391,10 +98899,8 @@ /turf/open/floor/plating, /area/station/maintenance/pool_maintenance) "sQv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/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/courtroom) "sQw" = ( @@ -113452,12 +98958,8 @@ /area/station/science/xenobiology) "sQO" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/plating, /area/station/cargo/lobby) @@ -113465,18 +98967,13 @@ /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "sQS" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, /obj/effect/landmark/start/assistant, /turf/open/floor/iron/dark, /area/station/commons/fitness) "sQU" = ( /obj/structure/sink/directional/west, /obj/machinery/status_display/evac/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/genetics) "sQX" = ( @@ -113484,12 +98981,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/starboard/fore) @@ -113513,26 +99006,11 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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, /area/station/commons/dorms) -"sRv" = ( -/obj/structure/closet/secure_closet/security/sec, -/obj/effect/turf_decal/stripes{ - dir = 9 - }, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/stripes/blue/line{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/station/security/lockers) "sRw" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/delivery, @@ -113546,26 +99024,16 @@ /turf/open/floor/iron/white, /area/station/science/cytology) "sRx" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/table, /obj/machinery/power/shuttle_engine/heater{ dir = 8 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "sRD" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 1 }, @@ -113590,31 +99058,21 @@ dir = 10 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/gateway) "sSi" = ( /obj/effect/turf_decal/vg_decals/numbers/one{ dir = 8 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "sSp" = ( /obj/effect/turf_decal/vg_decals/numbers/one, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/safe) "sSq" = ( @@ -113642,27 +99100,20 @@ /obj/structure/table/wood, /obj/item/taperecorder, /obj/item/tape, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/detectives_office) "sSE" = ( -/obj/item/stack/sheet/cardboard, -/obj/item/storage/box/lights/mixed, -/obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" +/obj/structure/chair/sofa/bench{ + dir = 8 }, -/turf/open/floor/plating, -/area/station/maintenance/department/chapel) +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) "sSF" = ( /obj/structure/lattice/catwalk, -/obj/structure/railing/corner/end/flip{ +/obj/structure/railing/corner/end{ dir = 4 }, /obj/structure/railing/corner/end/flip{ @@ -113670,21 +99121,15 @@ }, /turf/open/space/basic, /area/space/nearstation) -"sSN" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) -"sSP" = ( -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ +"sSI" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ dir = 1 }, /turf/open/floor/iron, /area/station/security/prison/mess) +"sSP" = ( +/turf/open/floor/iron, +/area/station/security/prison/mess) "sSS" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -113707,13 +99152,10 @@ /area/station/maintenance/starboard/fore) "sTg" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/vending/wardrobe/sec_wardrobe, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/machinery/vending/wardrobe/sec_wardrobe, /turf/open/floor/iron/dark/side, /area/station/security/checkpoint/escape) "sTh" = ( @@ -113735,22 +99177,16 @@ "sTA" = ( /obj/effect/turf_decal/trimline/blue/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/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/security/medical) "sTB" = ( /obj/machinery/door/airlock/public/glass{ name = "Holodeck Controls" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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) "sTF" = ( @@ -113781,12 +99217,8 @@ /turf/open/floor/carpet, /area/station/maintenance/abandon_psych) "sUe" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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 @@ -113799,12 +99231,8 @@ }, /obj/structure/railing, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) @@ -113813,15 +99241,14 @@ id = "evashutters2"; name = "E.V.A. Storage Shutters" }, -/obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/maintenance/aux_eva) "sUs" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/cable, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/security/old{ name = "Library" }, @@ -113835,10 +99262,8 @@ /obj/structure/extinguisher_cabinet/directional/east, /obj/structure/cable, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -113866,9 +99291,7 @@ /turf/closed/wall, /area/station/maintenance/department/engineering/engine_aft_starboard) "sUV" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/cryo) @@ -113876,12 +99299,8 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/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, /area/station/science) @@ -113900,9 +99319,7 @@ /area/station/maintenance/department/medical) "sVi" = ( /obj/structure/closet/cardboard, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/xenobio_disposals) "sVj" = ( @@ -113915,11 +99332,11 @@ /area/station/hallway/primary/central/aft) "sVk" = ( /obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/effect/turf_decal/siding/wood{ dir = 1 }, /obj/structure/chair/stool/bar/directional/south, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/kitchen/diner) "sVm" = ( @@ -113938,36 +99355,13 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos) -"sVq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/command/bridge) "sVt" = ( /turf/open/floor/iron, /area/station/command/gateway) "sVu" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/railing/corner/end/flip, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, /area/station/security/execution/transfer) "sVz" = ( /obj/machinery/power/shuttle_engine/heater, @@ -114103,10 +99497,6 @@ /area/station/maintenance/port/aft) "sVZ" = ( /obj/machinery/suit_storage_unit/atmos, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron/dark, /area/station/engineering/atmos/office) @@ -114128,15 +99518,12 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "sWo" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron, /area/station/construction/mining/aux_base) "sWA" = ( @@ -114148,15 +99535,13 @@ /area/station/maintenance/aft/upper) "sWE" = ( /obj/structure/table, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/commons/dorms) "sWF" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) @@ -114164,9 +99549,6 @@ /obj/machinery/computer/atmos_control/mix_tank{ dir = 8 }, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -114187,7 +99569,6 @@ /obj/machinery/computer/station_alert{ dir = 8 }, -/obj/effect/turf_decal/bot, /obj/structure/window/reinforced/spawner/directional/south, /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/dark, @@ -114198,10 +99579,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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) "sXb" = ( @@ -114247,7 +99626,9 @@ /turf/open/floor/carpet, /area/station/security/courtroom) "sXy" = ( -/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "sXD" = ( @@ -114267,8 +99648,8 @@ /area/station/maintenance/aft/upper) "sXH" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/research) @@ -114304,12 +99685,8 @@ /obj/effect/turf_decal/siding/thinplating/dark{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -114344,8 +99721,7 @@ /obj/machinery/computer/shuttle/mining{ dir = 8 }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 }, /turf/open/floor/iron, @@ -114359,8 +99735,8 @@ /area/station/common/night_club) "sYe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/lone, /area/station/service/chapel) "sYh" = ( @@ -114409,12 +99785,8 @@ /area/station/common/wrestling/lobby) "sYN" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -114447,29 +99819,15 @@ }, /turf/open/floor/iron/freezer, /area/station/maintenance/abandon_kitchen_upper) -"sYR" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/test_chambers) "sYX" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/atmospherics, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/office) "sYY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/theater) "sZb" = ( @@ -114491,8 +99849,8 @@ /area/station/security/courtroom) "sZd" = ( /obj/machinery/door/firedoor/border_only, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/old, /area/station/engineering/atmos/upper) "sZm" = ( @@ -114576,7 +99934,6 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "sZV" = ( -/obj/effect/turf_decal/bot, /obj/machinery/portable_atmospherics/canister/nitrogen, /turf/open/floor/iron/dark, /area/station/engineering/atmos/pumproom) @@ -114607,12 +99964,8 @@ /turf/open/floor/iron, /area/station/command/teleporter) "tax" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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 = 4 }, @@ -114634,19 +99987,6 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"taG" = ( -/obj/effect/turf_decal/trimline/purple/filled/corner{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/research) "taK" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; @@ -114686,12 +100026,8 @@ /obj/machinery/airalarm/directional/north, /obj/structure/cable, /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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/hallway/primary/upper) "taR" = ( @@ -114712,12 +100048,8 @@ }, /obj/effect/turf_decal/delivery, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/command/eva, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva/upper) @@ -114767,9 +100099,6 @@ dir = 9 }, /obj/structure/cable, -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /turf/open/floor/plating, /area/station/cargo/power_station/upper) "tbm" = ( @@ -114821,15 +100150,6 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"tbF" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "tbH" = ( /obj/structure/chair/pew/left{ dir = 4 @@ -114856,11 +100176,8 @@ /turf/open/floor/iron/white, /area/station/command/gateway) "tbW" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 }, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -114880,12 +100197,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -114919,7 +100232,6 @@ /obj/effect/turf_decal/tile/blue/half{ dir = 8 }, -/obj/effect/landmark/start/assistant, /turf/open/floor/iron/white/side{ dir = 8 }, @@ -114931,12 +100243,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) "tcp" = ( @@ -114947,8 +100255,10 @@ name = "Medbay" }, /obj/effect/mapping_helpers/airlock/access/all/medical/general, -/obj/effect/turf_decal/tile/blue/fourcorners, /obj/effect/mapping_helpers/airlock/unres, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "tcq" = ( @@ -115000,9 +100310,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/freezer, /area/station/maintenance/abandon_kitchen_upper) "tdk" = ( @@ -115027,9 +100335,7 @@ pixel_x = 8; pixel_y = 2 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/xenobiology/control) "tdr" = ( @@ -115051,12 +100357,7 @@ /obj/structure/railing{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ dir = 8 }, /turf/open/floor/iron/dark, @@ -115064,7 +100365,7 @@ "tdy" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/trinary/filter/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -115084,12 +100385,8 @@ /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) "tdK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/plating, /area/station/maintenance/starboard/fore) @@ -115112,15 +100409,9 @@ "tdR" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/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) "tdU" = ( /obj/machinery/duct, @@ -115132,7 +100423,7 @@ icon_state = "dirt-flat-1" }, /turf/open/floor/iron/dark/small, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "teb" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/effect/turf_decal/stripes{ @@ -115149,12 +100440,8 @@ /area/station/science/xenobiology) "tef" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/hallway/primary/port) "tej" = ( @@ -115162,8 +100449,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) "tel" = ( @@ -115197,16 +100484,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"tem" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/hydroponics) "teo" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -115222,19 +100499,19 @@ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/storage) "tez" = ( /obj/item/kirbyplants/random, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/detectives_office) "teA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) @@ -115276,12 +100553,8 @@ /turf/open/floor/wood, /area/station/service/electronic_marketing_den) "teQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -115293,8 +100566,8 @@ }, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/office) "teV" = ( @@ -115324,19 +100597,21 @@ /area/station/engineering/supermatter) "tfh" = ( /obj/structure/closet/secure_closet/chief_medical, -/obj/effect/turf_decal/stripes, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/siding/wood, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) "tfq" = ( /obj/structure/noticeboard/directional/south, /obj/structure/table, -/obj/effect/turf_decal/tile/yellow/fourcorners, /obj/item/clothing/glasses/science{ pixel_x = 3; pixel_y = 3 }, /obj/item/clothing/glasses/science, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "tfC" = ( @@ -115347,12 +100622,8 @@ pixel_y = -38 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs{ dir = 8 }, @@ -115368,12 +100639,8 @@ /area/station/commons/dorms/vacantroom) "tfJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/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/aft/upper) "tfO" = ( @@ -115386,12 +100653,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/green, /area/station/service/abandoned_gambling_den) "tfR" = ( @@ -115425,8 +100688,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/starboard/fore) @@ -115467,16 +100730,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/xenobio_disposals) -"tgB" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "tgH" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 9 @@ -115505,12 +100758,8 @@ "tgW" = ( /obj/machinery/light/floor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/transit_tube) "thg" = ( @@ -115543,8 +100792,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/side{ dir = 1 }, @@ -115605,17 +100854,14 @@ }, /area/station/security/lockers) "tib" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/machinery/airalarm/directional/east, /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 }, /turf/open/floor/iron, /area/station/service/bar) @@ -115629,12 +100875,8 @@ "tik" = ( /obj/effect/turf_decal/delivery, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/storage/tech) "tim" = ( @@ -115652,9 +100894,6 @@ /area/station/maintenance/abandon_wrestle) "tix" = ( /obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/computer/piratepad_control/civilian{ dir = 1 }, @@ -115666,15 +100905,11 @@ /turf/open/floor/iron/dark, /area/station/cargo/lobby) "tiy" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/machinery/door/airlock{ name = "Bar" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/captain_dining) "tiA" = ( @@ -115689,14 +100924,8 @@ /obj/machinery/computer/prisoner/management{ dir = 8 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/light/directional/east, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "tiE" = ( @@ -115757,7 +100986,6 @@ /area/station/hallway/primary/port) "tjC" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/bot, /obj/structure/window/reinforced/spawner/directional/south, /obj/item/folder/yellow, /obj/item/flashlight/lamp, @@ -115767,7 +100995,7 @@ /obj/effect/turf_decal/box/white{ color = "#52B4E9" }, -/turf/open/floor/iron/dark/small, +/turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) "tjK" = ( /obj/machinery/atmospherics/pipe/smart/simple/brown/visible/layer2{ @@ -115779,12 +101007,6 @@ /obj/structure/fans/tiny/forcefield{ dir = 8 }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/plating, /area/station/cargo/storage) "tka" = ( @@ -115804,10 +101026,8 @@ }, /obj/effect/turf_decal/caution/stand_clear/red, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/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/command/secure_bunker) "tkf" = ( @@ -115847,14 +101067,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/eva) -"tkE" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/security/range) "tkG" = ( /obj/structure/grille, /obj/structure/window/spawner/directional/south, @@ -115868,8 +101080,8 @@ "tkM" = ( /obj/effect/spawner/random/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -115907,17 +101119,6 @@ "tle" = ( /turf/open/floor/iron/dark, /area/station/security/courtroom) -"tlh" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) "tli" = ( /obj/effect/turf_decal/caution/stand_clear, /obj/structure/transport/linear/public, @@ -115934,14 +101135,8 @@ /area/station/hallway/primary/central) "tlr" = ( /obj/structure/closet/lasertag/red, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000" - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 8 - }, /obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -116074,7 +101269,7 @@ /turf/open/floor/iron/dark, /area/station/engineering/storage_shared) "tmD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad, /turf/open/floor/iron, /area/station/security/checkpoint/customs) @@ -116082,12 +101277,8 @@ /obj/machinery/door/airlock/maintenance_hatch{ name = "Hydroponics Maintenance" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/airlock/access/all/service/hydroponics, /turf/open/floor/plating, @@ -116138,19 +101329,17 @@ }, /obj/effect/turf_decal/bot_white, /obj/machinery/status_display/ai/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/aisat_interior) "tnh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/ordnance/storage) "tnj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/commons/fitness) @@ -116201,12 +101390,8 @@ req_access = list("library") }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -116224,12 +101409,8 @@ "tnW" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -116237,22 +101418,16 @@ /turf/open/floor/iron, /area/station/hallway/secondary/service) "toc" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /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" }, -/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/command/captain_dining) "tod" = ( -/obj/effect/turf_decal/tile/green/fourcorners, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/green/filled/corner, /turf/open/floor/iron/white, /area/station/medical/virology) "toe" = ( @@ -116283,18 +101458,8 @@ /area/station/maintenance/port/upper) "toB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -116306,12 +101471,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/upper) "toK" = ( @@ -116369,7 +101530,6 @@ /obj/item/hatchet, /obj/item/wirecutters, /obj/item/shovel/spade, -/obj/effect/turf_decal/bot, /obj/item/wrench, /obj/item/crowbar/large, /obj/item/screwdriver, @@ -116377,8 +101537,8 @@ /area/station/service/hydroponics) "tpd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/siding/wood, /obj/structure/disposalpipe/segment{ dir = 6 @@ -116390,12 +101550,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -116403,7 +101559,7 @@ /area/station/hallway/primary/central) "tpg" = ( /obj/item/kirbyplants/random, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/lawoffice) "tph" = ( @@ -116411,8 +101567,8 @@ dir = 1 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -116426,7 +101582,7 @@ "tpp" = ( /obj/effect/spawner/random/trash/graffiti, /turf/closed/wall, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "tpx" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -116450,33 +101606,21 @@ dir = 1 }, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /turf/open/floor/iron/dark/small, /area/station/cargo/storage) "tpN" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "tpR" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/beacon, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) @@ -116501,12 +101645,8 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "tqh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/hallway/secondary/service) "tqo" = ( @@ -116521,26 +101661,13 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "tqs" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "tqu" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -116551,7 +101678,6 @@ /area/station/science/research) "tqE" = ( /obj/structure/chair/comfy, -/obj/effect/landmark/start/scientist, /obj/structure/cable, /turf/open/floor/carpet/purple, /area/station/science/breakroom) @@ -116597,21 +101723,10 @@ dir = 8; id = "garbage" }, -/obj/effect/turf_decal/stripes, /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/plating, /area/station/maintenance/disposal) "trz" = ( -/obj/machinery/button/flasher{ - id = "IsolationFlash2"; - pixel_x = 10; - pixel_y = -24 - }, -/obj/machinery/button/flasher{ - id = "IsolationFlash"; - pixel_x = -10; - pixel_y = -24 - }, /obj/structure/closet/crate/bin, /obj/effect/spawner/random/trash/garbage, /obj/effect/spawner/random/trash/garbage, @@ -116631,16 +101746,8 @@ name = "Service Hallway Maintenance Hatch" }, /obj/effect/mapping_helpers/airlock/access/all/service/general, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"trK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/cable, /turf/open/floor/iron, -/area/station/security/prison) +/area/station/maintenance/starboard/fore) "trM" = ( /obj/structure/railing/corner/end{ dir = 1 @@ -116666,8 +101773,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -116694,7 +101801,6 @@ req_access = list("cargo") }, /obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes, /obj/machinery/disposal/delivery_chute, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -116720,30 +101826,22 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/chair/comfy/brown{ color = "#A46106" }, /turf/open/floor/wood/parquet, /area/station/service/theater) "tsR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) "tsS" = ( /obj/effect/spawner/random/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -116787,7 +101885,7 @@ /obj/effect/spawner/random/trash/garbage, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/small, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "ttI" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -116869,9 +101967,6 @@ /turf/open/floor/wood, /area/station/security/prison/mess) "tuv" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 6 - }, /obj/machinery/light/small/directional/east, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -116900,12 +101995,8 @@ /obj/effect/turf_decal/trimline/green/filled/corner, /obj/machinery/newscaster/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology) @@ -116922,8 +102013,8 @@ /area/station/hallway/primary/aft) "tuS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/science/explab) @@ -116950,10 +102041,8 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/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) "tvk" = ( @@ -116962,9 +102051,6 @@ /area/station/service/cafeteria) "tvl" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /obj/machinery/piratepad/civilian, /obj/structure/cable, /turf/open/floor/iron/dark, @@ -116981,36 +102067,22 @@ /area/station/commons/dorms/room2) "tvs" = ( /obj/structure/table/glass, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/item/clipboard, /obj/item/toy/figure/virologist, /turf/open/floor/iron, /area/station/medical/virology) "tvu" = ( /obj/item/radio/intercom/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) "tvB" = ( /turf/closed/wall, /area/station/service/chapel/office) -"tvG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/lockers) "tvI" = ( /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light_switch/directional/east, /turf/open/floor/iron, /area/station/security/lockers) @@ -117018,9 +102090,6 @@ /obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -117059,16 +102128,11 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) "twp" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, /obj/structure/rack/shelf, /obj/effect/spawner/random/techstorage/engineering_all, /turf/open/floor/iron/dark, @@ -117196,13 +102260,9 @@ /obj/item/toy/crayon/white{ pixel_y = -4 }, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, /turf/open/floor/iron/dark, /area/station/security/office) "txl" = ( @@ -117215,7 +102275,6 @@ dir = 10; id = "garbage" }, -/obj/effect/turf_decal/stripes, /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/plating, /area/station/maintenance/disposal) @@ -117226,10 +102285,7 @@ /obj/structure/transit_tube/junction{ dir = 4 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "txw" = ( /obj/structure/cable, @@ -117248,32 +102304,14 @@ dir = 10; id = "cargounload" }, -/obj/effect/turf_decal/delivery, /obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /turf/open/floor/plating, /area/station/cargo/storage) -"txF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/commons/dorms) "txP" = ( /obj/machinery/duct, /turf/open/floor/carpet/purple, /area/station/common/night_club) "txW" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, @@ -117329,8 +102367,8 @@ /area/station/service/chapel/office) "tyu" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -117356,19 +102394,15 @@ /obj/structure/disposalpipe/segment{ dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "tyG" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 1 }, @@ -117382,8 +102416,8 @@ /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "tyK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/bridge) "tyT" = ( @@ -117400,12 +102434,8 @@ /area/station/medical/aslyum) "tyX" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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/hallway/primary/central) "tzc" = ( @@ -117424,12 +102454,8 @@ }, /obj/structure/extinguisher_cabinet/directional/north, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -117497,19 +102523,15 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "tzE" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "tzF" = ( @@ -117528,8 +102550,8 @@ /area/station/maintenance/port/upper) "tzJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -117568,7 +102590,6 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology) "tzV" = ( -/obj/effect/turf_decal/delivery, /obj/machinery/disposal/bin, /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 10 @@ -117584,9 +102605,7 @@ }, /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/common/wrestling/concessions) "tAc" = ( @@ -117685,7 +102704,7 @@ /area/station/hallway/secondary/service) "tAL" = ( /obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/parquet, /area/station/common/night_club) "tAM" = ( @@ -117718,12 +102737,8 @@ /turf/open/floor/iron, /area/station/hallway/primary/aft) "tAX" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/gbp_redemption{ pixel_y = 6 @@ -117738,10 +102753,8 @@ /area/station/hallway/primary/aft) "tBc" = ( /obj/structure/noticeboard/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) "tBi" = ( @@ -117752,8 +102765,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/upper) "tBp" = ( @@ -117791,12 +102804,8 @@ /area/station/security/checkpoint/medical) "tBF" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -117845,13 +102854,8 @@ /area/station/science/xenobiology) "tCd" = ( /obj/machinery/holopad, -/obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/iron, /area/station/engineering/atmos/office) @@ -117866,12 +102870,8 @@ /turf/open/floor/carpet/purple, /area/station/command/heads_quarters/rd) "tCi" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -117901,8 +102901,8 @@ /area/station/security/checkpoint/medical) "tCt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -117949,12 +102949,8 @@ /area/station/hallway/primary/central) "tCN" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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, /area/station/science/ordnance) @@ -117964,20 +102960,14 @@ /area/station/maintenance/department/science/upper) "tCS" = ( /obj/effect/turf_decal/siding/wood/corner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/medical/patients_rooms) "tCX" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) @@ -117996,9 +102986,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /turf/open/floor/iron/smooth_large, /area/station/cargo/miningdock) "tDr" = ( @@ -118006,12 +102993,8 @@ dir = 1 }, /obj/structure/chair/office, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/maintenance/abandon_office) "tDy" = ( @@ -118021,12 +103004,8 @@ "tDH" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -118088,21 +103067,11 @@ /turf/open/floor/iron/dark, /area/station/security/checkpoint/medical) "tEl" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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, +/turf/open/floor/iron, /area/station/security/brig) "tEr" = ( /obj/structure/chair/sofa/corp/left{ @@ -118132,16 +103101,16 @@ /obj/item/book/manual/wiki/chemistry{ pixel_x = 8 }, -/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "tEx" = ( /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -118149,8 +103118,8 @@ /area/station/commons/dorms) "tEA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/service/theater/abandoned) "tEK" = ( @@ -118173,9 +103142,6 @@ /turf/open/space/basic, /area/space/nearstation) "tEU" = ( -/obj/effect/turf_decal/trimline/yellow/filled/end{ - dir = 1 - }, /obj/structure/window/spawner/directional/east, /turf/open/floor/iron/white, /area/station/medical/pharmacy) @@ -118185,7 +103151,7 @@ /area/station/commons/dorms/room7) "tFa" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/meeting_room/council) "tFc" = ( @@ -118196,12 +103162,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -118209,8 +103171,8 @@ /area/station/commons/dorms) "tFd" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -118277,15 +103239,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood, /area/station/common/pool) -"tFV" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/carpet, -/area/station/security/courtroom) "tFX" = ( /obj/structure/door_assembly, /obj/structure/barricade/wooden/crude, @@ -118293,10 +103246,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/lower) "tGb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/security/courtroom) "tGf" = ( @@ -118340,12 +103291,8 @@ /obj/structure/disposalpipe/segment{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "tGx" = ( @@ -118358,22 +103305,17 @@ dir = 10 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 }, /turf/open/floor/iron, /area/station/engineering/main) "tGH" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -118385,12 +103327,8 @@ /turf/open/floor/iron/dark, /area/station/tcommsat/computer) "tHo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/side{ @@ -118413,12 +103351,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/small/directional/east, /obj/structure/disposalpipe/segment{ dir = 10 @@ -118443,15 +103377,6 @@ }, /turf/open/floor/carpet, /area/station/medical/psychology) -"tHC" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "tHG" = ( /obj/item/kirbyplants/random, /obj/machinery/camera/directional/east{ @@ -118469,12 +103394,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "tHQ" = ( -/obj/effect/turf_decal/bot, /obj/structure/sink/directional/north, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -118487,9 +103407,6 @@ /turf/open/floor/iron/white, /area/station/science/research) "tHX" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 6 }, @@ -118513,16 +103430,6 @@ }, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) -"tIf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/nuke_storage) "tIh" = ( /obj/structure/curtain/bounty, /obj/structure/cable, @@ -118599,27 +103506,14 @@ }, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) -"tIQ" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "tIW" = ( /obj/structure/closet/cardboard, /turf/open/floor/plating, /area/station/maintenance/department/science/upper) "tJe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -118634,12 +103528,8 @@ /area/station/hallway/primary/port) "tJx" = ( /obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -118695,12 +103585,8 @@ /obj/machinery/door/airlock/grunge{ name = "Chapel Apiary" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/machinery/duct, /turf/open/floor/iron/dark, @@ -118713,28 +103599,18 @@ pixel_x = 40; pixel_y = 8 }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) "tKg" = ( /obj/structure/railing/corner{ dir = 8 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "tKi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -118761,9 +103637,7 @@ pixel_x = -4; pixel_y = -9 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/common/wrestling/concessions) "tKz" = ( @@ -118775,8 +103649,8 @@ /area/station/science/xenobiology) "tKB" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/central) "tKH" = ( @@ -118791,7 +103665,6 @@ /turf/open/floor/iron/smooth_corner, /area/station/command/secure_bunker) "tKM" = ( -/obj/effect/turf_decal/siding/wideplating/dark, /obj/item/paper{ default_raw_text = "The goons over at our NT relations department have informed us we've gotta somehow shove a 3 deck ship into 2 decks on a budget fit to build us a frigate.. maybe a very cheap destroyer, best we can do at the moment is just weld off the bottom deck starting at the structural support beams and ending with the stairwells and elevator shaft, we'll take it up from there with the engine array.. just make sure to plug the hole."; name = "Shipyard Orders"; @@ -118800,24 +103673,12 @@ }, /turf/open/floor/plating, /area/station/hallway/primary/port) -"tKO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "tKQ" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/portables_connector/visible, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "tKX" = ( /obj/item/clothing/head/utility/welding, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 6 - }, /turf/open/floor/plating, /area/station/hallway/primary/port) "tLf" = ( @@ -118828,9 +103689,7 @@ /obj/structure/window/reinforced/spawner/directional/south, /obj/effect/turf_decal/siding/wood, /obj/item/kirbyplants/random, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -118852,12 +103711,8 @@ name = "science camera"; network = list("ss13","rd") }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -118873,11 +103728,8 @@ /turf/closed/wall, /area/station/maintenance/department/chapel) "tLM" = ( -/obj/effect/turf_decal/stripes, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/solars/port/fore) "tLN" = ( @@ -118906,12 +103758,8 @@ dir = 6 }, /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/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/side{ dir = 5 @@ -118968,16 +103816,6 @@ /turf/open/floor/carpet, /area/station/command/heads_quarters/captain) "tMz" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/item/radio/intercom/directional/south, /obj/machinery/light/directional/south, /obj/machinery/computer/security/labor{ @@ -119015,12 +103853,8 @@ pixel_y = 3 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -119033,16 +103867,10 @@ }, /obj/effect/turf_decal/stripes, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/research) -"tMK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/department/medical) "tMM" = ( /obj/structure/mirror/directional/south, /obj/structure/mannequin/plastic{ @@ -119065,12 +103893,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/engineering/engine_equipment, /turf/open/floor/plating, /area/station/maintenance/aft/upper) @@ -119078,7 +103902,7 @@ /obj/structure/chair/comfy/barber_chair{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison) "tNg" = ( @@ -119138,12 +103962,8 @@ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "tNy" = ( @@ -119154,15 +103974,11 @@ /turf/closed/wall/r_wall, /area/station/maintenance/port/fore) "tNE" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/caution/stand_clear/blue{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, /turf/open/floor/iron/dark, /area/station/security/brig) "tNM" = ( @@ -119191,16 +104007,6 @@ }, /turf/open/floor/glass/reinforced, /area/station/science) -"tNT" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/transit_tube) "tNU" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -119213,12 +104019,8 @@ name = "command camera" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/command) "tNZ" = ( @@ -119237,12 +104039,8 @@ /obj/structure/railing, /obj/machinery/light/directional/north, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/warehouse) "tOv" = ( @@ -119265,12 +104063,8 @@ id_tag = "Capoffice"; name = "Captain's Office" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -119288,9 +104082,6 @@ /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, /obj/machinery/disposal/bin{ desc = "A pneumatic waste disposal unit. This one leads into space!"; name = "deathsposal unit" @@ -119298,6 +104089,9 @@ /obj/effect/turf_decal/delivery, /obj/structure/cable, /obj/machinery/airalarm/directional/south, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, /turf/open/floor/iron/white, /area/station/medical/virology) "tOJ" = ( @@ -119393,10 +104187,8 @@ /area/station/cargo/drone_bay) "tPn" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/upper) "tPs" = ( @@ -119431,12 +104223,8 @@ /turf/open/floor/iron/dark, /area/station/command/bridge) "tPH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/dorms) @@ -119446,12 +104234,8 @@ /turf/open/floor/plating, /area/station/engineering/atmos/hfr_room) "tPS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hallup8"; location = "hallup7" @@ -119472,12 +104256,8 @@ "tQg" = ( /obj/effect/turf_decal/vg_decals/numbers/four, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/safe) "tQj" = ( @@ -119498,24 +104278,16 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/wood, /area/station/service/library) "tQr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/parquet, /area/station/common/gaskiosk) "tQu" = ( @@ -119550,13 +104322,9 @@ /area/station/science/ordnance) "tQB" = ( /obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "tQJ" = ( -/obj/effect/turf_decal/stripes/end, /obj/machinery/power/smes/engineering, /obj/structure/cable, /obj/structure/railing{ @@ -119571,12 +104339,11 @@ /area/station/commons/toilet/restrooms) "tQQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 8 }, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "tQS" = ( @@ -119588,12 +104355,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/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/research) "tQT" = ( @@ -119621,15 +104384,11 @@ /obj/structure/disposalpipe/segment, /obj/structure/cable, /obj/machinery/newscaster/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/service) "tRe" = ( /obj/structure/table/wood, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3; pixel_y = 16 @@ -119638,6 +104397,9 @@ pixel_x = 3; pixel_y = 16 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/prison/mess) "tRj" = ( @@ -119665,16 +104427,14 @@ /area/station/maintenance/solars/starboard/aft) "tRz" = ( /obj/structure/window/spawner/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/theater) "tRC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -119685,10 +104445,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plating, /area/station/maintenance/aft/upper) -"tRO" = ( -/obj/effect/turf_decal/delivery, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "tRP" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -119736,9 +104492,7 @@ dir = 8; pixel_x = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/commons/toilet/auxiliary) "tRX" = ( @@ -119767,7 +104521,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/lower) "tSE" = ( -/obj/effect/turf_decal/bot_white, /obj/machinery/telecomms/relay/preset/station, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) @@ -119798,7 +104551,6 @@ /obj/item/storage/box/lights, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "tSL" = ( @@ -119815,9 +104567,7 @@ /area/station/maintenance/department/medical) "tSR" = ( /obj/structure/closet/crate/bin, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/radio/intercom/directional/south, /turf/open/floor/iron, /area/station/security/prison) @@ -119843,12 +104593,9 @@ /turf/open/floor/iron, /area/station/hallway/primary/upper) "tTn" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/purple/opposingcorners, /turf/open/floor/iron, /area/station/service/barber) "tTp" = ( @@ -119872,21 +104619,15 @@ name = "MiniSat Foyer" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/any/command/general, /obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "tTy" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/visit) "tTB" = ( @@ -119948,31 +104689,38 @@ dir = 9 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage) "tUd" = ( -/obj/machinery/portable_atmospherics/pump, -/obj/effect/turf_decal/bot, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/mech_bay_recharge_port{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "tUg" = ( /obj/machinery/door/airlock/security{ name = "Interrogation Monitoring" }, /obj/effect/turf_decal/delivery/blue, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/security/interrogation) +"tUj" = ( +/turf/open/floor/circuit, +/area/station/security/mechbay) "tUm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/eighties, /area/station/maintenance/abandon_arcade) @@ -120034,15 +104782,15 @@ /obj/effect/turf_decal/trimline/red/filled/warning{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "tUO" = ( -/obj/effect/turf_decal/tile/blue{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/tile/dark_blue{ dir = 1 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark, /area/station/command/bridge) "tUP" = ( @@ -120053,8 +104801,8 @@ "tUS" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) @@ -120086,7 +104834,7 @@ /turf/open/floor/iron, /area/station/command/bridge) "tVr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "tVt" = ( @@ -120099,12 +104847,11 @@ /area/station/medical/surgery/theatre) "tVH" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 4 }, -/obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -120165,16 +104912,18 @@ /obj/machinery/light_switch/directional/south{ pixel_y = -37 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/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/bridge) "tWx" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/carpet, /area/station/service/library/printer) +"tWE" = ( +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/central) "tWN" = ( /obj/structure/sign/directions/vault{ dir = 1 @@ -120190,7 +104939,6 @@ /turf/closed/wall/r_wall, /area/station/hallway/secondary/command) "tWO" = ( -/obj/effect/turf_decal/bot, /obj/machinery/oven/range, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) @@ -120210,12 +104958,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/security/brig) -"tWX" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/main) "tWY" = ( /obj/effect/turf_decal/stripes{ dir = 4 @@ -120253,9 +104995,7 @@ /obj/item/assembly/igniter/condenser{ pixel_x = 8 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) "tXk" = ( /obj/structure/closet/secure_closet/freezer/fridge, @@ -120279,12 +105019,8 @@ "tXu" = ( /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/upper) @@ -120305,9 +105041,7 @@ /turf/open/floor/carpet/purple, /area/station/command/heads_quarters/rd) "tXQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/wood, @@ -120326,8 +105060,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -120343,20 +105077,13 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical) "tYp" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/sign/flag/nanotrasen/directional/north, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "tYr" = ( @@ -120366,12 +105093,6 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "tYu" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000" - }, /obj/structure/cable, /turf/open/floor/iron/dark/side{ dir = 1 @@ -120385,12 +105106,8 @@ department = "Detective's Office"; name = "Detective's Requests Console" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/security/detectives_office) "tYA" = ( @@ -120398,12 +105115,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/medbay/central) "tYB" = ( @@ -120475,8 +105188,8 @@ }, /obj/effect/turf_decal/trimline/yellow/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/medical/chemistry, /turf/open/floor/iron/white, /area/station/medical/pharmacy) @@ -120500,18 +105213,6 @@ "tZD" = ( /turf/open/floor/iron, /area/station/ai_monitored/security/armory) -"tZH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "tZU" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt{ @@ -120535,16 +105236,9 @@ /turf/open/floor/iron, /area/station/maintenance/starboard/fore) "tZV" = ( -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/sorting/mail{ dir = 1; name = "CMO's Junction"; @@ -120567,20 +105261,13 @@ /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) "uao" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/sign/flag/nanotrasen/directional/north, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "uaL" = ( @@ -120647,12 +105334,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /obj/machinery/duct, /obj/structure/cable, @@ -120672,12 +105355,9 @@ dir = 6 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage) "uci" = ( @@ -120690,16 +105370,6 @@ /turf/open/floor/iron/dark, /area/station/science/robotics) "uck" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/machinery/camera{ c_tag = "Starboard Hallway - Info Kiosk"; dir = 10; @@ -120724,9 +105394,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/chapel) "ucm" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 9 - }, /obj/machinery/camera/directional/west{ c_tag = "Security - Brig Cell 2" }, @@ -120738,26 +105405,10 @@ "ucn" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/abandoned, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/prison/upper) -"ucp" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "ucs" = ( /obj/effect/spawner/random/trash/box, /turf/open/floor/plating, @@ -120773,27 +105424,14 @@ /obj/effect/landmark/start/head_of_personnel, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) -"ucJ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron/dark/side, -/area/station/hallway/primary/port) "ucK" = ( /obj/machinery/griddle, /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/security/prison/mess) "ucO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -120815,10 +105453,6 @@ }, /area/station/service/hydroponics) "uda" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/structure/chair/sofa/bench/left{ dir = 4; pixel_x = -5 @@ -120846,10 +105480,6 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "udr" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, /obj/effect/turf_decal/stripes/white/line, /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -120859,8 +105489,8 @@ id = "Psychward3"; name = "Cell Door 3" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/aslyum) @@ -120869,19 +105499,13 @@ /turf/open/floor/iron/white, /area/station/science/research) "udt" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/table, /obj/machinery/reagentgrinder{ pixel_x = -5; pixel_y = 9 }, /obj/item/reagent_containers/cup/glass/shaker, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/captain_dining) "udv" = ( @@ -120915,14 +105539,14 @@ /turf/open/floor/iron/dark, /area/station/science/xenobiology) "udH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) "udI" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "udK" = ( @@ -120948,18 +105572,10 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/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/security/prison) -"udS" = ( -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "udT" = ( /obj/effect/turf_decal/bot, /obj/machinery/conveyor_switch/oneway{ @@ -120974,10 +105590,6 @@ /obj/item/taperecorder, /obj/item/tape, /obj/item/tape, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/security/interrogation) @@ -120993,26 +105605,12 @@ name = "Chapel Office" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/service/chapel_office, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/service/chapel/office) -"uea" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "ued" = ( /obj/structure/railing/corner/end/flip{ dir = 8 @@ -121029,12 +105627,8 @@ /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/cargo/miningoffice) @@ -121051,32 +105645,16 @@ /turf/open/floor/iron/dark, /area/station/cargo/sorting) "ueo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/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/checkpoint/escape) "ueq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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/security/office) -"ues" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "uex" = ( /obj/structure/table, /obj/item/clothing/head/helmet/skull, @@ -121087,12 +105665,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 5 }, @@ -121147,47 +105721,17 @@ pixel_y = -4; req_access = list("brig") }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/railing{ dir = 1 }, /turf/open/floor/iron/dark, /area/station/security/warden) -"ueN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/research) "ueR" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) -"ueV" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/eighties/red, -/area/station/common/arcade) "ueW" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/machinery/status_display/ai/directional/south, @@ -121219,24 +105763,11 @@ /obj/structure/railing{ dir = 6 }, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "ufk" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/status_display/evac/directional/south, /turf/open/floor/iron/dark/side, /area/station/hallway/primary/port) @@ -121286,20 +105817,11 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron, /area/station/engineering/main) -"ufD" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "ufG" = ( /obj/structure/window/spawner/directional/west, /obj/structure/chair/sofa/corp/right{ @@ -121337,27 +105859,13 @@ /turf/open/space/basic, /area/space/nearstation) "ugk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/lab) -"ugm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "ugo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/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/fore/upper) "ugq" = ( @@ -121397,12 +105905,8 @@ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) "ugS" = ( @@ -121421,8 +105925,8 @@ /area/station/maintenance/aft/upper) "uhc" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -121439,12 +105943,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/aft/upper) "uho" = ( @@ -121459,19 +105959,9 @@ }, /area/station/service/chapel) "uhs" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -121480,9 +105970,6 @@ }, /area/station/hallway/primary/port) "uhv" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/effect/turf_decal/stripes/white/line{ dir = 4 }, @@ -121492,10 +105979,6 @@ /turf/closed/wall, /area/station/medical/coldroom) "uhE" = ( -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/machinery/pipedispenser/disposal/transit_tube, /turf/open/floor/iron/dark, /area/station/engineering/atmos) @@ -121524,12 +106007,8 @@ }, /obj/machinery/door/firedoor/heavy, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/command/general, /turf/open/floor/iron/smooth_large, /area/station/command/secure_bunker) @@ -121559,12 +106038,8 @@ /turf/open/floor/iron/dark, /area/station/security/prison/safe) "uif" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/library) "uig" = ( @@ -121601,8 +106076,8 @@ dir = 1 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/lobby) "uiy" = ( @@ -121627,12 +106102,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"uiJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/department/engineering/atmos_aux_port) "uiR" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -121667,20 +106136,12 @@ }, /obj/machinery/airalarm/directional/south, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, -/area/station/science/ordnance/freezerchamber) -"uja" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnancefreezer" }, /turf/open/floor/iron/dark, -/area/station/security/brig) +/area/station/science/ordnance) "ujk" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -121723,8 +106184,8 @@ "ujB" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "ujF" = ( @@ -121779,9 +106240,7 @@ dir = 6 }, /obj/structure/tank_dispenser, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "ukr" = ( /obj/structure/cable, @@ -121789,8 +106248,8 @@ dir = 8 }, /obj/structure/extinguisher_cabinet/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/upper) "uks" = ( @@ -121799,12 +106258,6 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "ukv" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/disposaloutlet{ dir = 8 @@ -121905,14 +106358,6 @@ /obj/structure/railing/corner, /turf/open/floor/plating/airless, /area/station/maintenance/fore/upper) -"ulh" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/structure/rack/shelf, -/obj/effect/spawner/random/techstorage/security_all, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tech) "ulk" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/green/filled/line{ @@ -121934,12 +106379,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -121963,12 +106404,8 @@ "uly" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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, /area/station/hallway/secondary/service) @@ -122105,24 +106542,13 @@ }, /obj/structure/cable, /obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/stairs/old{ dir = 8 }, /area/station/science/ordnance) -"ulS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "ulX" = ( /obj/structure/rack, /obj/item/grenade/smokebomb{ @@ -122154,8 +106580,7 @@ dir = 9 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -122189,10 +106614,8 @@ /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) "umx" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -122248,8 +106671,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/side{ dir = 1 @@ -122265,16 +106688,14 @@ pixel_x = -3; pixel_y = 3 }, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /turf/open/floor/wood, /area/station/security/detectives_office/private_investigators_office) "unv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/port) "unA" = ( @@ -122282,12 +106703,6 @@ /obj/item/restraints/handcuffs, /obj/item/restraints/handcuffs, /obj/item/restraints/handcuffs, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /turf/open/floor/iron/dark, /area/station/security/brig) "unF" = ( @@ -122296,12 +106711,8 @@ }, /obj/effect/decal/cleanable/oil, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -122327,22 +106738,17 @@ /area/station/security/checkpoint/customs/auxiliary) "unT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/textured_large, /area/station/service/barber) "unX" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction/flip{ dir = 2 }, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "uoa" = ( @@ -122354,12 +106760,8 @@ name = "Cabin 1" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -122388,9 +106790,7 @@ /obj/effect/turf_decal/tile/yellow{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/break_room) @@ -122460,16 +106860,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) -"uoG" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "uoI" = ( /obj/machinery/light/directional/north, /obj/machinery/newscaster/directional/north, @@ -122481,7 +106871,7 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/chair{ dir = 1 }, @@ -122491,7 +106881,7 @@ "uoP" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/right{ dir = 1 }, @@ -122508,11 +106898,7 @@ /turf/open/floor/iron/dark, /area/station/common/pool) "upg" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/chair/stool/bar/directional{ dir = 4 }, @@ -122532,12 +106918,8 @@ }, /area/station/hallway/secondary/exit) "upz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -122550,17 +106932,6 @@ dir = 10 }, /area/station/security/prison/work) -"upJ" = ( -/obj/machinery/light/small/directional/south, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/central) -"upN" = ( -/obj/effect/landmark/carpspawn, -/turf/open/floor/iron/shuttle/evac{ - initial_gas_mix = "TEMP=2.7" - }, -/area/space/nearstation) "upO" = ( /turf/closed/wall, /area/station/maintenance/gamer_lair) @@ -122583,11 +106954,6 @@ "upX" = ( /turf/closed/wall, /area/station/service/barber) -"uql" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/station/security/courtroom) "uqr" = ( /obj/structure/chair, /obj/effect/landmark/start/assistant, @@ -122606,12 +106972,8 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -122641,10 +107003,6 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "uqH" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron/dark/side{ @@ -122701,14 +107059,6 @@ dir = 8 }, /area/station/common/locker_room_shower) -"uqQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/ai_monitored/turret_protected/aisat/hallway) "urb" = ( /obj/structure/table, /obj/machinery/microwave{ @@ -122728,13 +107078,15 @@ /obj/structure/table/reinforced/rglass, /obj/item/clipboard, /obj/item/toy/figure/chemist, -/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "urm" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/broken_floor, /obj/machinery/duct, @@ -122742,8 +107094,7 @@ /area/station/maintenance/port/fore) "uro" = ( /obj/structure/closet/secure_closet/evidence, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 }, /turf/open/floor/iron/dark, @@ -122777,20 +107128,15 @@ /turf/open/floor/plating, /area/station/maintenance/department/security) "urH" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/tile/purple/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/barber) "urM" = ( @@ -122803,10 +107149,7 @@ "urN" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "urU" = ( /obj/structure/railing/corner{ @@ -122832,8 +107175,8 @@ /turf/open/floor/engine, /area/station/engineering/supermatter/room) "ush" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "usi" = ( @@ -122865,9 +107208,7 @@ dir = 1 }, /obj/effect/turf_decal/tile/blue, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -122883,17 +107224,13 @@ "usq" = ( /obj/effect/turf_decal/tile/brown/half/contrasted, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/cargo/office) "ust" = ( /obj/machinery/newscaster/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) "usu" = ( @@ -122980,9 +107317,7 @@ /turf/open/floor/iron/dark, /area/station/cargo/office) "utj" = ( -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/station/maintenance/department/medical) "utr" = ( /obj/structure/curtain/cloth, @@ -123035,12 +107370,8 @@ /area/station/maintenance/rus_surgery) "utQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad/secure, /turf/open/floor/wood, /area/station/command/heads_quarters/blueshield) @@ -123048,12 +107379,8 @@ /obj/effect/turf_decal/siding/wood/corner{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/wood, /area/station/command/heads_quarters/rd) @@ -123085,14 +107412,17 @@ name = "Overgrown Gardain" }, /obj/effect/mapping_helpers/airlock/abandoned, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/hydroponics/garden/abandoned) +"uut" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "uuu" = ( /obj/effect/spawner/random/trash/cigbutt, /obj/effect/decal/cleanable/dirt{ @@ -123159,10 +107489,6 @@ /obj/structure/chair{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, @@ -123180,17 +107506,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/service/theater/abandoned) -"uvr" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/engineering/engine_aft_starboard) "uvu" = ( /turf/closed/wall, /area/station/common/wrestling/arena) @@ -123200,12 +107515,8 @@ /area/station/maintenance/department/security/prison_upper) "uvF" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/aft) @@ -123228,15 +107539,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/grass, /area/station/command/heads_quarters/captain) -"uwb" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "uwh" = ( /obj/structure/table, /obj/machinery/computer/records/medical/laptop{ @@ -123297,8 +107599,8 @@ /area/station/security/prison) "uwH" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -123307,12 +107609,8 @@ /area/station/science/genetics) "uwI" = ( /obj/effect/turf_decal/vg_decals/numbers/one, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "uwO" = ( @@ -123351,48 +107649,21 @@ /turf/open/floor/plating, /area/station/maintenance/department/security/prison_upper) "uxa" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/security/corrections_officer) "uxy" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, +/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/medical/medbay/central) "uxA" = ( /obj/item/banner/security/mundane, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /turf/open/floor/iron/dark, /area/station/security/brig) -"uxC" = ( -/obj/structure/closet/secure_closet/security/sec, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/stripes/blue/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/security/lockers) -"uxH" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "uxI" = ( /obj/effect/turf_decal/tile/neutral, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -123417,14 +107688,11 @@ }, /obj/effect/mapping_helpers/requests_console/ore_update, /obj/structure/disposalpipe/trunk, -/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"uxN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/command/gateway) "uxO" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 @@ -123436,9 +107704,7 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/xenobiology) "uxV" = ( @@ -123468,9 +107734,6 @@ /area/station/security/execution/education) "uxW" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/atmospherics/components/trinary/mixer/flipped{ dir = 4 }, @@ -123515,7 +107778,7 @@ /turf/open/floor/plating, /area/station/maintenance/abandon_holding_cell) "uyx" = ( -/obj/item/toy/plush/skyrat/plushie_syntax1112, +/obj/item/toy/plush/nova/plushie_syntax1112, /obj/item/paper/fluff{ default_raw_text = "if yor readin this!! its 2 late! it has been unleahsed"; name = "Ominous Note" @@ -123535,8 +107798,8 @@ /obj/effect/turf_decal/delivery/red, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/security/prison/garden) @@ -123571,12 +107834,8 @@ "uyT" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/upper) "uyZ" = ( @@ -123589,9 +107848,6 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "uzf" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/turf_decal/tile/yellow, /obj/structure/disposalpipe/sorting/mail{ dir = 1; @@ -123614,21 +107870,15 @@ /turf/open/floor/iron/dark, /area/station/common/laser_tag) "uzj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/meeting_room/council) "uzl" = ( /obj/structure/chair/office{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) "uzm" = ( @@ -123668,8 +107918,8 @@ /turf/closed/wall, /area/station/medical/medbay/central) "uzV" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/cobweb, /turf/open/floor/iron, @@ -123701,12 +107951,8 @@ /turf/open/floor/plating, /area/station/service/library/abandoned) "uAl" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/vg_decals/numbers/one, /turf/open/floor/iron, /area/station/hallway/primary/port) @@ -123738,14 +107984,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) -"uAu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/chair/stool/directional/north, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation) "uAI" = ( /obj/structure/table, /obj/item/storage/fancy/donut_box, @@ -123760,8 +107998,8 @@ name = "MiniSat Antechamber" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/command/general, /obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/open/floor/iron/dark, @@ -123786,8 +108024,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -123836,8 +108074,8 @@ "uBt" = ( /obj/effect/spawner/random/trash/mess, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -123846,12 +108084,8 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "uBu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -123860,10 +108094,7 @@ /area/station/command/heads_quarters/nt_rep) "uBz" = ( /obj/structure/chair, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, +/obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -123908,23 +108139,18 @@ /turf/closed/wall/r_wall, /area/station/maintenance/pool_maintenance) "uCf" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/aft/upper) "uCg" = ( /turf/open/floor/iron/dark, /area/station/security/power_station) "uCj" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 }, /turf/open/floor/iron, @@ -123972,24 +108198,16 @@ }, /turf/open/floor/wood, /area/station/commons/dorms/room7) -"uCx" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "uCB" = ( /obj/machinery/light/directional/east, /obj/machinery/firealarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison/visit) "uCC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -124028,7 +108246,7 @@ "uCR" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 9 + dir = 8 }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -124050,8 +108268,8 @@ icon_state = "dirt-flat-1" }, /obj/effect/decal/cleanable/oil, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "uDf" = ( @@ -124071,12 +108289,8 @@ /area/station/maintenance/abandon_exam/cat) "uDm" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/sorting/mail{ dir = 4; name = "Theatre Junction"; @@ -124085,22 +108299,18 @@ /turf/open/floor/iron, /area/station/commons/dorms) "uDy" = ( -/obj/effect/turf_decal/tile/blue{ +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/dark_blue{ dir = 4 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark, /area/station/command/bridge) "uDz" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) "uDC" = ( @@ -124135,17 +108345,11 @@ /area/station/commons/fitness) "uDZ" = ( /obj/effect/landmark/carpspawn, -/turf/open/floor/glass/reinforced{ - initial_gas_mix = "TEMP=2.7" - }, +/turf/open/floor/glass/reinforced/airless, /area/space/nearstation) "uEa" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 1 }, @@ -124158,7 +108362,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/wood, /area/station/common/pool) @@ -124167,8 +108371,8 @@ /turf/open/floor/iron/dark, /area/station/common/tailoring) "uEk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -124183,12 +108387,8 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "uEt" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/eighties/red, /area/station/common/arcade) @@ -124240,10 +108440,8 @@ icon_state = "dirt-flat-1" }, /obj/effect/spawner/random/trash/mess, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/small/directional/east, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) @@ -124292,12 +108490,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -124320,28 +108514,22 @@ /area/station/medical/chemistry) "uFD" = ( /obj/structure/window/spawner/directional/south, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/structure/table, /obj/structure/bedsheetbin, /obj/structure/cable, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, /turf/open/floor/iron/cafeteria, /area/station/commons/locker) "uFG" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 8 }, -/obj/machinery/firealarm/directional/east, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -124351,16 +108539,9 @@ dir = 8; id = "Luggagebelt" }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/security/checkpoint) "uFT" = ( @@ -124372,12 +108553,8 @@ c_tag = "Leisure Hallway - Starboard"; name = "hallway camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -124398,27 +108575,19 @@ pixel_x = -4 }, /obj/item/tank/jetpack/carbondioxide, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) "uGc" = ( /obj/machinery/door/airlock{ name = "Courtroom" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/courtroom) "uGd" = ( @@ -124426,13 +108595,12 @@ dir = 8 }, /obj/structure/rack/shelf, -/obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/security/brig) "uGf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -124456,8 +108624,8 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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, /area/station/hallway/primary/starboard) @@ -124513,9 +108681,6 @@ dir = 8 }, /obj/structure/cable, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/plating, /area/station/cargo/power_station/upper) "uHf" = ( @@ -124552,7 +108717,6 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) "uHy" = ( -/obj/effect/turf_decal/bot, /obj/machinery/grill, /obj/machinery/light_switch/directional/west, /turf/open/floor/iron/cafeteria, @@ -124623,12 +108787,8 @@ name = "Gear Room" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron, @@ -124670,23 +108830,10 @@ /area/station/maintenance/department/security/lower) "uIX" = ( /obj/structure/rack, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/effect/spawner/random/techstorage/command_all, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) "uJc" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -124694,7 +108841,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "uJk" = ( /obj/machinery/light/small/directional/east, @@ -124740,8 +108887,8 @@ /area/station/ai_monitored/command/storage/eva/upper) "uJz" = ( /obj/effect/spawner/random/trash/garbage, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_starboard) @@ -124795,30 +108942,21 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, /turf/open/floor/plating, /area/station/maintenance/abandon_art_studio) "uJZ" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/machinery/vending/wardrobe/viro_wardrobe, /obj/structure/cable, /turf/open/floor/iron, /area/station/medical/virology/isolation) "uKc" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -124862,12 +109000,8 @@ /area/station/engineering/gravity_generator) "uKh" = ( /obj/machinery/airalarm/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/service/hydroponics/garden/abandoned) "uKq" = ( @@ -125029,18 +109163,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/department/engineering/engine_aft_port) -"uMn" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "uMr" = ( /obj/structure/cable, /obj/machinery/door/airlock/maintenance, @@ -125049,12 +109171,8 @@ "uMs" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -125086,15 +109204,10 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/red, /area/station/service/library/abandoned) "uMX" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 10 }, @@ -125105,9 +109218,6 @@ /obj/structure/disposaloutlet{ dir = 4 }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/effect/turf_decal/delivery, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -125124,14 +109234,11 @@ /turf/open/floor/iron, /area/station/maintenance/department/engineering/atmos_aux_port) "uNk" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/airalarm/directional/west, /obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/security/interrogation) "uNl" = ( @@ -125159,9 +109266,7 @@ /turf/open/water/overlay, /area/station/hallway/primary/central) "uNt" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/security/prison/shower) @@ -125170,12 +109275,8 @@ /area/station/service/lawoffice) "uND" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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 }, @@ -125203,15 +109304,6 @@ /obj/structure/window/reinforced/shuttle, /turf/open/floor/grass, /area/station/common/cryopods) -"uNL" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "uNZ" = ( /obj/machinery/ntnet_relay, /turf/open/floor/circuit/telecomms/mainframe, @@ -125226,24 +109318,10 @@ cycle_id = "AIsatAirlock" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/ai_monitored/aisat/exterior) -"uOc" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "uOh" = ( /obj/structure/cable, /turf/open/floor/iron/dark/side, @@ -125273,7 +109351,6 @@ /obj/item/clothing/glasses/hud/health, /obj/item/clothing/glasses/hud/health, /obj/item/clothing/glasses/hud/health, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "uOA" = ( @@ -125281,10 +109358,6 @@ /turf/open/floor/iron, /area/station/science/ordnance/office) "uOB" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/pew/left{ dir = 8 }, @@ -125334,7 +109407,7 @@ /obj/structure/chair{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/interrogation) "uPp" = ( @@ -125360,12 +109433,8 @@ /obj/structure/railing{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -125392,9 +109461,7 @@ /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) "uQb" = ( @@ -125432,12 +109499,8 @@ /turf/open/floor/engine/vacuum, /area/station/maintenance/department/engineering/atmos_aux_port) "uQp" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/courtroom) "uQq" = ( @@ -125446,12 +109509,8 @@ /area/station/command/secure_bunker) "uQv" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -125487,9 +109546,7 @@ }, /area/station/maintenance/port/upper) "uQM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/public/glass{ name = "Arcade" }, @@ -125499,9 +109556,7 @@ /turf/open/floor/wood, /area/station/common/arcade) "uQQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/railing/corner{ dir = 8 }, @@ -125534,10 +109589,8 @@ /area/station/maintenance/starboard/fore) "uRs" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/sorting/mail{ dir = 1; name = "Hydroponics Junction"; @@ -125562,12 +109615,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -125575,20 +109624,12 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron/dark, /area/station/common/night_club) -"uRy" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/research) "uRA" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/port/aft) "uRL" = ( @@ -125596,7 +109637,6 @@ /obj/structure/window/spawner/directional/east, /obj/item/clothing/neck/stethoscope, /obj/machinery/status_display/evac/directional/north, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "uRM" = ( @@ -125604,12 +109644,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/wood, /area/station/command/heads_quarters/hos) @@ -125640,8 +109676,8 @@ /area/station/cargo/drone_bay) "uSe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/service/library) @@ -125673,7 +109709,6 @@ /obj/structure/table/reinforced/rglass, /obj/item/clipboard, /obj/item/toy/figure/md, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "uSl" = ( @@ -125691,9 +109726,6 @@ dir = 1 }, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, /turf/open/floor/iron/dark/small, /area/station/cargo/storage) "uSA" = ( @@ -125744,12 +109776,8 @@ /turf/open/floor/grass, /area/station/service/cafeteria) "uSU" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, /area/station/science/ordnance) "uSX" = ( /obj/structure/chair/wood{ @@ -125820,7 +109848,6 @@ /area/station/maintenance/abandon_exam/cat) "uTu" = ( /obj/structure/cable, -/obj/effect/turf_decal/stripes/box, /obj/machinery/modular_computer/preset/engineering{ dir = 8 }, @@ -125864,8 +109891,10 @@ /area/station/medical/medbay/central) "uTT" = ( /obj/machinery/chem_master, -/obj/effect/turf_decal/tile/yellow/fourcorners, /obj/structure/window/spawner/directional/west, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "uTU" = ( @@ -125918,7 +109947,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/engineering/atmos_aux_port) "uUA" = ( -/obj/effect/turf_decal/stripes/corner, /obj/structure/trash_pile, /obj/structure/disposalpipe/segment{ dir = 10 @@ -125929,12 +109957,8 @@ /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/research) "uUH" = ( @@ -125962,8 +109986,8 @@ dir = 6; name = "engineering camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/plating, /area/station/maintenance/port/aft) @@ -125978,19 +110002,12 @@ /turf/open/floor/eighties/red, /area/station/common/arcade) "uVe" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/machinery/light/directional/south, /obj/structure/extinguisher_cabinet/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/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/tile/blue/half/contrasted, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/command) "uVf" = ( @@ -126004,8 +110021,8 @@ /area/station/science/xenobiology/control) "uVg" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/upper) @@ -126052,23 +110069,10 @@ /obj/effect/spawner/random/trash/moisture_trap, /turf/open/floor/plating, /area/station/maintenance/aft/upper) -"uVC" = ( -/obj/structure/cable, -/obj/effect/landmark/start/security_officer, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/security/office) "uVL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/commons/storage/art) @@ -126095,7 +110099,7 @@ /obj/machinery/door/airlock/mining{ name = "Mining Office" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/open/floor/iron/dark/small, /area/station/cargo/miningoffice) "uWe" = ( @@ -126106,12 +110110,8 @@ /area/station/medical/chemistry) "uWf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/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/bridge) "uWi" = ( @@ -126164,7 +110164,7 @@ /obj/structure/chair{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -126178,22 +110178,7 @@ /obj/structure/window/spawner/directional/west, /turf/open/floor/iron/dark, /area/station/service/hydroponics/garden) -"uWT" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/research) "uWV" = ( -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /obj/machinery/pipedispenser, /obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ dir = 6 @@ -126221,15 +110206,12 @@ /turf/open/floor/iron/dark, /area/station/maintenance/department/engineering/atmos_aux_port) "uXj" = ( -/obj/effect/turf_decal/box/corners, /obj/machinery/byteforge, /turf/open/floor/circuit/green, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "uXl" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/red, /area/station/service/library/abandoned) "uXm" = ( @@ -126290,20 +110272,16 @@ /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "uXJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/common/wrestling/locker) "uXP" = ( -/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/dark/small, /area/station/cargo/storage) "uXY" = ( /obj/structure/railing, -/obj/effect/turf_decal/stripes, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "uYa" = ( @@ -126388,12 +110366,8 @@ /turf/open/floor/iron/dark, /area/station/security/power_station) "uYL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/chapel) "uYQ" = ( @@ -126409,10 +110383,8 @@ /area/station/common/locker_room_shower) "uYS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -126430,8 +110402,8 @@ /area/station/commons/dorms/room3) "uZe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -126454,12 +110426,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/aft/upper) @@ -126515,12 +110483,8 @@ network = list("ss13","prison") }, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/safe) "uZK" = ( @@ -126555,34 +110519,15 @@ /area/station/hallway/primary/central) "vaE" = ( /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/upper) -"vaJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "vaK" = ( /obj/structure/closet/secure_closet/security, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/checkpoint) "vaL" = ( @@ -126604,12 +110549,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/port) @@ -126619,12 +110560,8 @@ /turf/open/space/basic, /area/space/nearstation) "vaP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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{ icon_state = "dirt-flat-1" @@ -126644,23 +110581,10 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"vaZ" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/aft) "vbd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -126673,12 +110597,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 2 }, @@ -126686,7 +110606,6 @@ /turf/open/floor/iron/white, /area/station/science/research) "vbk" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/mineral/plastitanium, /area/station/maintenance/cult_chapel_maint) "vbn" = ( @@ -126722,37 +110641,21 @@ /area/station/science/ordnance/office) "vcc" = ( /obj/structure/table/wood, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) -"vcd" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "vce" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/hallway/primary/central) "vcr" = ( /obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs{ dir = 4 }, @@ -126773,14 +110676,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"vcF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "vcG" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -126793,12 +110688,8 @@ name = "E.V.A. Storage Shutter" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) "vcQ" = ( @@ -126878,14 +110769,9 @@ /area/station/maintenance/thruster_room/central) "vdX" = ( /obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/machinery/light_switch/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "vdZ" = ( @@ -126897,11 +110783,16 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/brig) +"ved" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "veg" = ( /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/security/lockers) @@ -126920,12 +110811,8 @@ }, /obj/machinery/light/directional/east, /obj/machinery/firealarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/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/library) "vet" = ( @@ -126933,21 +110820,17 @@ name = "Bitrunning Den" }, /obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/smooth, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "vev" = ( /obj/structure/bed/dogbed/ian, /mob/living/basic/pet/dog/corgi/ian, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) "veC" = ( @@ -126982,7 +110865,7 @@ /obj/effect/turf_decal/siding/brown{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/cargo/sorting) "veS" = ( @@ -127029,8 +110912,8 @@ /area/station/medical/break_room) "vfk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/explab) "vfB" = ( @@ -127067,8 +110950,8 @@ }, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/any/command/general, /obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/open/floor/engine, @@ -127107,9 +110990,7 @@ /turf/open/floor/engine, /area/station/command/secure_bunker) "vgi" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/medical/patients_rooms) @@ -127132,35 +111013,20 @@ /area/station/security/prison/mess) "vgp" = ( /obj/machinery/porta_turret/lasertag/blue, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, /obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "vgx" = ( /turf/open/floor/wood, /area/station/service/theater) "vgD" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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) "vgE" = ( @@ -127192,15 +111058,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/upper) -"vgK" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/obj/structure/chair{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/science) "vgM" = ( /obj/structure/chair/pew/right{ dir = 8 @@ -127219,45 +111076,20 @@ /area/station/hallway/primary/central) "vgP" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, /turf/open/floor/iron, /area/station/command/teleporter) -"vgU" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/science/robotics) "vgV" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "vgW" = ( /obj/machinery/navbeacon{ @@ -127269,7 +111101,7 @@ }, /area/station/hallway/secondary/command) "vgY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/service/lawoffice) "vha" = ( @@ -127290,12 +111122,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) @@ -127344,16 +111172,6 @@ /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) -"vhW" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/medical) "vif" = ( /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden{ dir = 6 @@ -127390,9 +111208,6 @@ name = "E.V.A. External Shutters"; req_access = list("command") }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/machinery/door/poddoor/shutters{ id = "evashutters3"; name = "E.V.A. Storage Shutters" @@ -127420,9 +111235,7 @@ }, /area/station/security/range) "viv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/circuit/red, /area/station/science/robotics/mechbay) "viy" = ( @@ -127430,16 +111243,14 @@ /area/station/common/wrestling/lobby) "viz" = ( /obj/machinery/light/directional/east, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "viC" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology/isolation) @@ -127458,9 +111269,6 @@ desc = "Used to grind things up into raw materials and liquids."; pixel_y = 5 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, /obj/item/radio/intercom/directional/north, /obj/structure/cable, /turf/open/floor/iron, @@ -127476,8 +111284,8 @@ }, /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/storage) "viS" = ( @@ -127485,12 +111293,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/medical/central) "viT" = ( @@ -127517,9 +111321,7 @@ /area/station/service/theater) "viW" = ( /obj/structure/transit_tube/diagonal, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "viX" = ( /obj/structure/chair/office{ @@ -127550,8 +111352,8 @@ id_tag = "HoSdoor"; name = "Head Of Security's Office" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/security/hos, /obj/machinery/duct, /turf/open/floor/iron, @@ -127587,9 +111389,6 @@ /obj/item/clothing/gloves/color/yellow, /obj/item/clothing/gloves/color/yellow, /obj/item/storage/medkit/fire, -/obj/effect/turf_decal/stripes{ - dir = 5 - }, /obj/machinery/status_display/evac/directional/west, /turf/open/floor/iron/dark, /area/station/engineering/break_room) @@ -127674,12 +111473,8 @@ "vks" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -127705,23 +111500,6 @@ /obj/item/storage/photo_album/library, /turf/open/floor/carpet, /area/station/service/library) -"vkv" = ( -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/rack, -/obj/item/tank/internals/oxygen, -/obj/item/radio, -/obj/item/clothing/mask/breath, -/turf/open/floor/iron/dark, -/area/station/maintenance/aux_eva) -"vkA" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "vkC" = ( /obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, @@ -127732,12 +111510,8 @@ }, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/command/minisat, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/navigate_destination, /turf/open/floor/iron, /area/station/engineering/transit_tube) @@ -127747,19 +111521,6 @@ }, /turf/open/floor/plating, /area/station/security/range) -"vkJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "vkM" = ( /obj/effect/turf_decal/stripes{ dir = 4 @@ -127782,9 +111543,7 @@ /area/station/cargo/miningdock) "vkX" = ( /obj/structure/marker_beacon/burgundy, -/turf/open/floor/iron/airless{ - icon_state = "textured_white_large" - }, +/turf/open/floor/iron/white/textured_large/airless, /area/space/nearstation) "vlc" = ( /obj/effect/turf_decal/trimline/purple/filled/warning{ @@ -127796,8 +111555,8 @@ name = "RnD Junction"; sortType = 12 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/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/research) "vlf" = ( @@ -127842,35 +111601,22 @@ /turf/open/floor/iron/dark, /area/station/common/gaskiosk) "vlv" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/structure/chair/stool/bar/directional/north, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "vly" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/research) "vlA" = ( @@ -127909,29 +111655,19 @@ }, /area/station/science/explab) "vlO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/common/pool) "vlQ" = ( -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 6 - }, -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 5 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, +/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/tile/green/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron/white, /area/station/medical/virology) "vlR" = ( @@ -127958,13 +111694,9 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/upper) "vmg" = ( -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000" - }, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "vmj" = ( @@ -127987,12 +111719,8 @@ /obj/effect/turf_decal/siding/wood/corner{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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_hatch, /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, /turf/open/floor/plating, @@ -128015,8 +111743,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/upper) "vmy" = ( @@ -128044,16 +111772,6 @@ }, /turf/open/floor/iron, /area/station/science/research/abandoned) -"vmN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/structure/cable, -/turf/open/floor/mineral/plastitanium/red, -/area/station/maintenance/cult_chapel_maint) "vmO" = ( /obj/machinery/door/poddoor/preopen{ id = "BarBlastDoor"; @@ -128063,7 +111781,7 @@ /turf/open/floor/plating, /area/station/service/bar) "vmP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/button/door/directional/west{ id = "Capoffice2"; name = "Door lock"; @@ -128095,12 +111813,8 @@ /area/station/maintenance/starboard/fore) "vns" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/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) "vnC" = ( @@ -128108,21 +111822,15 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) "vnK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall3"; location = "hall2" @@ -128214,8 +111922,8 @@ /obj/effect/turf_decal/tile/yellow{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/chemistry) @@ -128223,12 +111931,8 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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/starboard) @@ -128241,10 +111945,6 @@ /turf/open/floor/wood, /area/station/service/theater) "voH" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -128291,18 +111991,14 @@ /turf/open/floor/iron/white, /area/station/medical/treatment_center) "vpa" = ( -/obj/effect/turf_decal/bot, /obj/machinery/deepfryer, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "vpe" = ( -/obj/structure/trash_pile, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "vpn" = ( /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron/dark/side{ @@ -128325,20 +112021,10 @@ /area/station/common/night_club/back_stage) "vpx" = ( /obj/machinery/firealarm/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/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/courtroom) -"vpy" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "vpD" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/chair/wood{ @@ -128347,19 +112033,13 @@ /turf/open/floor/wood, /area/station/service/chapel/funeral) "vpF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/ordnance/storage) "vpK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -128387,12 +112067,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/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/upper) "vqm" = ( @@ -128417,18 +112093,8 @@ /turf/open/floor/plating, /area/station/maintenance/pool_maintenance) "vqv" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/brig) "vqH" = ( @@ -128476,19 +112142,6 @@ }, /turf/open/floor/plating, /area/station/security/prison/safe) -"vqV" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "vqW" = ( /obj/effect/turf_decal/siding/wood, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -128545,8 +112198,8 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/medical/morgue) "vry" = ( @@ -128582,12 +112235,8 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/research) "vrY" = ( @@ -128622,12 +112271,8 @@ /obj/structure/disposalpipe/junction{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "vsl" = ( @@ -128639,12 +112284,8 @@ dir = 8 }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -128674,23 +112315,12 @@ /obj/structure/railing/corner{ dir = 1 }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/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/aft/upper) "vsN" = ( /obj/machinery/disposal/bin, -/obj/effect/turf_decal/delivery, /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -128740,15 +112370,15 @@ /obj/effect/turf_decal/siding/wood/corner{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/parquet, /area/station/common/night_club) "vti" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/abandoned, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/port/fore) "vtk" = ( @@ -128757,9 +112387,7 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/poddoor/shutters/window/preopen{ id = "XenoOffice"; name = "Xenobiology Controll Room Shutters" @@ -128775,7 +112403,7 @@ }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/aft) "vtp" = ( @@ -128785,7 +112413,7 @@ /turf/open/floor/grass, /area/station/command/heads_quarters/captain) "vts" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/command/secure_bunker) "vtt" = ( @@ -128826,12 +112454,8 @@ /area/station/hallway/secondary/service) "vtN" = ( /obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip{ dir = 4 }, @@ -128851,8 +112475,8 @@ }, /obj/structure/barricade/wooden, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/iron, @@ -128920,9 +112544,7 @@ dir = 8 }, /obj/effect/landmark/start/chemist, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -128936,9 +112558,7 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/components/binary/valve/on/layer4{ dir = 4 }, @@ -128949,13 +112569,6 @@ "vus" = ( /turf/open/floor/wood, /area/station/security/courtroom) -"vut" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) "vuz" = ( /obj/structure/cable, /obj/machinery/door/airlock/maintenance_hatch, @@ -128967,12 +112580,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -129026,12 +112635,8 @@ /area/station/medical/psychology) "vuX" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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, /area/station/engineering/gravity_generator) @@ -129057,8 +112662,8 @@ /obj/structure/chair/office{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white/smooth_large, /area/station/command/heads_quarters/ce) @@ -129073,23 +112678,20 @@ /turf/open/floor/iron/dark, /area/station/security/checkpoint/medical) "vvJ" = ( -/obj/effect/turf_decal/tile/red{ +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "vvP" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/transit_tube) "vvR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/closed/wall/r_wall, /area/station/science/ordnance/burnchamber) "vvS" = ( @@ -129145,9 +112747,7 @@ /turf/open/floor/iron/dark, /area/station/common/wrestling/beverage) "vwd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/chair, /obj/effect/landmark/start/assistant, /turf/open/floor/wood, @@ -129167,9 +112767,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/engine, /area/station/engineering/supermatter/room) @@ -129186,12 +112784,8 @@ name = "Cell 5"; req_access = list("security") }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/vg_decals/numbers/five, /turf/open/floor/iron/dark/side{ dir = 4 @@ -129200,8 +112794,8 @@ "vwE" = ( /obj/structure/cable, /obj/machinery/firealarm/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -129210,13 +112804,6 @@ "vwF" = ( /turf/closed/wall/r_wall, /area/station/security/corrections_officer) -"vwJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/commons/dorms) "vwN" = ( /turf/open/floor/iron/dark/side{ dir = 4 @@ -129246,9 +112833,7 @@ /turf/open/floor/engine, /area/station/science/tele_sci) "vwY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/engineering/atmos) "vxa" = ( @@ -129271,12 +112856,8 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/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) "vxi" = ( @@ -129287,12 +112868,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/side{ dir = 4 }, @@ -129307,12 +112884,6 @@ }, /area/station/security/prison) "vxk" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/rack/shelf, /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/white, @@ -129332,12 +112903,8 @@ /area/station/security/brig) "vxB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 2 }, @@ -129350,8 +112917,8 @@ /obj/machinery/door/airlock/security{ name = "Private Interrogation" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/security/detective, /turf/open/floor/iron/dark, /area/station/security/detectives_office) @@ -129359,9 +112926,7 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "vxH" = ( @@ -129377,9 +112942,7 @@ }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/surgery) @@ -129389,12 +112952,8 @@ }, /obj/structure/sink/directional/south, /obj/structure/window/reinforced/tinted/frosted/spawner/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/captain/private) "vxT" = ( @@ -129407,9 +112966,7 @@ /area/station/security/checkpoint/customs/auxiliary) "vxX" = ( /obj/effect/landmark/start/medical_doctor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/carpet/blue, /area/station/medical/break_room) @@ -129495,7 +113052,6 @@ /turf/open/floor/iron, /area/station/engineering/main) "vyB" = ( -/obj/effect/turf_decal/bot, /obj/machinery/deepfryer, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) @@ -129604,12 +113160,8 @@ /area/station/science/xenobiology) "vyR" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -129618,8 +113170,8 @@ /area/station/maintenance/port/upper) "vyT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/plating, @@ -129636,12 +113188,10 @@ /area/station/maintenance/fore/upper) "vyY" = ( /obj/item/kirbyplants/organic/plant21, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/dark, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, /area/station/security/warden) "vza" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ @@ -129675,12 +113225,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/service/hydroponics/garden/abandoned) @@ -129717,12 +113263,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor, /area/station/engineering/main) "vzD" = ( @@ -129749,9 +113291,7 @@ /turf/open/floor/plating, /area/station/science/research/abandoned) "vzJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad, /turf/open/floor/iron, /area/station/command/gateway) @@ -129784,32 +113324,15 @@ /obj/structure/sink/directional/south, /turf/open/floor/iron/freezer, /area/station/common/locker_room_shower) +"vzV" = ( +/turf/open/floor/circuit/green, +/area/station/ai_monitored/turret_protected/ai_upload) "vzW" = ( /obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/iron/smooth, /area/station/command/secure_bunker) -"vAe" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/research) -"vAf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "vAi" = ( /obj/machinery/light/small/broken/directional/south, /turf/open/floor/grass, @@ -129817,32 +113340,12 @@ "vAm" = ( /obj/effect/turf_decal/bot, /obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/effect/landmark/start/chief_engineer, /turf/open/floor/iron/white/smooth_large, /area/station/command/heads_quarters/ce) -"vAo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"vAw" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/blueshield) "vAC" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -129903,42 +113406,10 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/crew_quarters/dorms) -"vBj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/central) -"vBk" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "vBn" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 1 @@ -129970,12 +113441,6 @@ /area/station/science/ordnance/storage) "vBP" = ( /obj/machinery/door/poddoor/incinerator_atmos_aux, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/engine/vacuum, /area/station/maintenance/disposal/incinerator) "vBX" = ( @@ -129997,12 +113462,8 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -130019,10 +113480,7 @@ /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "vCl" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -130031,9 +113489,7 @@ /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/security/prison) "vCp" = ( @@ -130086,7 +113542,7 @@ /area/station/maintenance/department/science/lower) "vCP" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -130144,8 +113600,8 @@ /area/station/maintenance/abandon_diner) "vDA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "vDJ" = ( @@ -130160,24 +113616,13 @@ /area/station/common/cryopods) "vDP" = ( /obj/structure/chair/sofa/bench/left, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "vDR" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/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) "vDU" = ( @@ -130191,12 +113636,6 @@ /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) "vDX" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) @@ -130214,18 +113653,12 @@ "vEk" = ( /obj/effect/turf_decal/bot, /obj/structure/tank_dispenser/oxygen, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/iron/dark, /area/station/cargo/miningoffice) "vEl" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -130273,9 +113706,6 @@ /turf/open/floor/iron/white, /area/station/science/research) "vEx" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, /obj/structure/easel, /turf/open/floor/plating, /area/station/maintenance/disposal) @@ -130299,8 +113729,8 @@ /area/station/tcommsat/computer) "vEF" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white/smooth_large, /area/station/command/heads_quarters/ce) @@ -130311,16 +113741,10 @@ /turf/open/floor/iron/white, /area/station/science/research) "vEL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/genetics) "vES" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/machinery/newscaster/directional/west, /obj/structure/disposalpipe/segment{ dir = 5 @@ -130367,11 +113791,7 @@ /turf/open/floor/iron, /area/station/security/execution/transfer) "vFr" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/machinery/light/floor, -/obj/effect/turf_decal/trimline/yellow, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "vFx" = ( @@ -130383,7 +113803,6 @@ /obj/item/soap/nanotrasen{ pixel_y = -6 }, -/obj/effect/turf_decal/bot, /obj/machinery/power/apc/auto_name/directional/south, /obj/effect/turf_decal/siding/purple/corner{ dir = 1 @@ -130429,8 +113848,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/plating, @@ -130475,38 +113894,22 @@ "vGu" = ( /obj/structure/closet/secure_closet/security/sec, /obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, -/obj/effect/turf_decal/stripes/blue/line{ - dir = 5 - }, /turf/open/floor/iron/dark, /area/station/security/lockers) "vGv" = ( /obj/machinery/computer/security{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/status_display/ai/directional/east, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/red, -/obj/machinery/status_display/ai/directional/east, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "vGy" = ( /obj/machinery/air_sensor/oxygen_tank, /turf/open/floor/engine/o2, /area/station/engineering/atmos) -"vGF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/station/security/prison/safe) "vGH" = ( /obj/machinery/defibrillator_mount/directional/north, /obj/machinery/light/directional/north, @@ -130514,10 +113917,8 @@ /turf/open/floor/iron, /area/station/medical/surgery) "vGI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/courtroom) "vGL" = ( @@ -130526,12 +113927,8 @@ /area/station/maintenance/department/security/lower) "vGR" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes{ dir = 1 }, @@ -130539,14 +113936,11 @@ /area/station/science/explab) "vGZ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/power_station) "vHe" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/table, /obj/item/reagent_containers/cup/glass/drinkingglass{ pixel_x = -1; @@ -130559,6 +113953,7 @@ /obj/item/reagent_containers/cup/rag{ pixel_y = 3 }, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "vHg" = ( @@ -130569,13 +113964,10 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "bridge-west" }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/command/general, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark/side, /area/station/command/bridge) "vHk" = ( @@ -130585,18 +113977,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"vHu" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating/airless, -/area/station/maintenance/fore/upper) "vHy" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 10 @@ -130714,9 +114094,7 @@ /turf/open/floor/plating, /area/station/maintenance/abandon_art_studio) "vIh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/main) @@ -130724,12 +114102,8 @@ /obj/structure/chair{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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 = 4 }, @@ -130755,17 +114129,13 @@ /area/station/service/lawoffice) "vIs" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/spawner/random/trash/crushed_can, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/cargo/miningdock) "vIy" = ( -/mob/living/simple_animal/bot/cleanbot/autopatrol, +/mob/living/basic/bot/cleanbot/autopatrol, /obj/structure/cable, /turf/open/floor/iron/goonplaque, /area/station/hallway/primary/central/aft) @@ -130842,12 +114212,9 @@ /area/station/common/night_club) "vJa" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -130875,18 +114242,15 @@ /obj/structure/chair/wood{ dir = 8 }, -/obj/effect/landmark/start/bouncer, /turf/open/floor/wood, /area/station/service/bar/atrium) "vJv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/service/hydroponics) "vJx" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/gateway) "vJz" = ( @@ -130939,10 +114303,6 @@ /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/security/prison/mess) "vKh" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, @@ -130978,10 +114338,8 @@ sortType = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/break_room) "vKN" = ( @@ -130993,12 +114351,14 @@ /obj/item/book/manual/wiki/robotics_cyborgs{ pixel_x = -7 }, -/obj/machinery/requests_console/directional/south, /obj/item/radio/intercom/directional/east, +/obj/machinery/requests_console/directional/south{ + department = "Robotics"; + name = "Robotics Requests Console" + }, /turf/open/floor/iron/dark, /area/station/science/robotics) "vKR" = ( -/obj/effect/turf_decal/stripes/white/line, /obj/structure/weightmachine, /turf/open/floor/iron/dark, /area/station/commons/fitness) @@ -131006,15 +114366,12 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 6 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "vLa" = ( /obj/effect/turf_decal/vg_decals/atmos/air{ dir = 8 }, -/obj/effect/turf_decal/bot_white, /turf/open/floor/engine/air, /area/station/engineering/atmos) "vLe" = ( @@ -131046,12 +114403,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/carpet, /area/station/commons/dorms/vacantroom) @@ -131061,19 +114414,12 @@ "vLx" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/mineral/plastitanium/red, /area/station/science/robotics/lab) "vLD" = ( /obj/item/kirbyplants/organic/plant10, -/obj/effect/turf_decal/trimline/white/filled/corner{ - dir = 4 - }, /obj/effect/turf_decal/siding/thinplating_new{ dir = 1 }, @@ -131103,9 +114449,7 @@ dir = 4 }, /obj/structure/cable, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/station/solars/starboard/aft) "vLL" = ( /obj/effect/spawner/random/trash/moisture_trap, @@ -131122,7 +114466,6 @@ /obj/structure/closet/secure_closet/chemical{ anchored = 1 }, -/obj/effect/turf_decal/delivery, /obj/item/radio/headset/headset_med, /turf/open/floor/iron/white, /area/station/medical/pharmacy) @@ -131139,22 +114482,15 @@ /area/station/service/barber) "vMe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 8 - }, +/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/machinery/duct, +/obj/effect/turf_decal/tile/green/tram{ + dir = 4 + }, /turf/open/floor/iron, /area/station/service/hydroponics) "vMi" = ( @@ -131235,10 +114571,7 @@ }, /obj/structure/closet/crate/internals, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, +/obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron, /area/station/commons/storage/primary) "vMj" = ( @@ -131259,7 +114592,6 @@ /area/station/science/research) "vMy" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/stripes, /obj/effect/spawner/random/trash/garbage, /obj/machinery/camera{ c_tag = "Disposal Driver"; @@ -131271,9 +114603,6 @@ /area/station/maintenance/disposal) "vMA" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /obj/item/book/manual/wiki/engineering_hacking{ pixel_x = 6; pixel_y = 6 @@ -131290,12 +114619,8 @@ /area/station/engineering/main) "vMM" = ( /obj/structure/chair/office, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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, /area/station/engineering/main) @@ -131318,12 +114643,15 @@ /obj/machinery/airalarm/directional/west, /obj/machinery/light_switch/directional/south, /obj/structure/cable, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/execution/transfer) "vNd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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, /area/station/commons/dorms) @@ -131334,27 +114662,13 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/central) "vNg" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "vNh" = ( /obj/structure/rack/shelf, @@ -131389,12 +114703,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/science/upper) -"vNv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/carpet, -/area/station/service/chapel) "vNx" = ( /obj/structure/table_frame, /obj/effect/decal/cleanable/dirt{ @@ -131448,10 +114756,6 @@ /obj/machinery/door/airlock/medical{ name = "Surgery Theater" }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, /obj/effect/mapping_helpers/airlock/unres{ dir = 4 }, @@ -131459,33 +114763,14 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/mapping_helpers/airlock/access/all/medical/surgery, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) -"vOi" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 6 - }, -/obj/machinery/light/small/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/structure/closet/secure_closet/brig{ - id = "Cell 3"; - name = "Cell 3 Locker" - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "vOk" = ( /obj/effect/spawner/random/trash/moisture_trap, /turf/open/floor/plating, @@ -131496,9 +114781,7 @@ /area/station/maintenance/abandon_wrestle) "vOt" = ( /obj/item/kirbyplants/random, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -131516,7 +114799,7 @@ }, /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -131525,14 +114808,13 @@ /area/station/medical/morgue) "vOy" = ( /obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 4 + }, /turf/open/floor/iron, /area/station/service/barber) "vOz" = ( @@ -131605,6 +114887,9 @@ /area/space/nearstation) "vPn" = ( /obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -131627,9 +114912,7 @@ "vPz" = ( /obj/structure/cable, /obj/machinery/status_display/ai/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/command/secure_bunker) "vPM" = ( @@ -131646,18 +114929,6 @@ }, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/qm) -"vQj" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "vQk" = ( /obj/machinery/computer/teleporter{ dir = 1 @@ -131694,10 +114965,7 @@ /area/station/common/night_club/back_stage) "vQA" = ( /obj/effect/turf_decal/vg_decals/numbers/eight, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "vQC" = ( /obj/structure/chair/sofa/left/brown{ @@ -131728,9 +114996,7 @@ /area/station/science/research/abandoned) "vQQ" = ( /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -131793,15 +115059,15 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/hallway/primary/port) "vRO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/xenobiology/control) "vRS" = ( @@ -131828,13 +115094,10 @@ /turf/open/floor/iron, /area/station/science/ordnance) "vSn" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/sorting) "vSt" = ( -/obj/effect/turf_decal/bot, /obj/effect/turf_decal/loading_area, /obj/machinery/portable_atmospherics/canister/nitrous_oxide, /turf/open/floor/iron/dark, @@ -131911,12 +115174,8 @@ /area/station/maintenance/abandon_art_studio) "vTs" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/port/aft) "vTy" = ( @@ -131928,37 +115187,23 @@ id = "custodialshutters"; name = "Custodial Closet Shutters" }, -/obj/effect/turf_decal/delivery, /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/dark, /area/station/service/janitor) "vTC" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron/dark/side, /area/station/security/brig) "vTD" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/department/medical) "vTH" = ( @@ -131994,12 +115239,10 @@ }, /area/station/security/prison/workout) "vTN" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 9 }, +/obj/effect/turf_decal/trimline/blue/filled/corner, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "vTQ" = ( @@ -132013,9 +115256,6 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "vUe" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "vUf" = ( @@ -132053,12 +115293,8 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -132083,12 +115319,8 @@ /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/captain/private) "vUC" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/execution/transfer) "vUH" = ( @@ -132099,17 +115331,14 @@ /area/station/maintenance/port/aft) "vUK" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/machinery/cell_charger, /obj/item/stock_parts/cell/high, /turf/open/floor/iron/dark, /area/station/engineering/main) "vUM" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/old, /area/station/cargo/office) "vUW" = ( @@ -132162,9 +115391,7 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 5 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "vVu" = ( /obj/effect/turf_decal/tile/neutral{ @@ -132172,12 +115399,8 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -132188,19 +115411,15 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) "vVA" = ( /obj/effect/turf_decal/delivery/white, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) "vVB" = ( @@ -132226,12 +115445,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/science/ordnance_storage, /turf/open/floor/iron/white/side{ dir = 4 @@ -132258,9 +115473,7 @@ dir = 1 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/cytology) @@ -132299,20 +115512,16 @@ /area/station/engineering/supermatter/room) "vWk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/security/prison/upper) "vWp" = ( /obj/item/trash/syndi_cakes, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters{ @@ -132335,13 +115544,6 @@ "vWO" = ( /turf/closed/wall, /area/station/common/wrestling/concessions) -"vWU" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron/white, -/area/station/medical/surgery/theatre) "vWW" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -132366,10 +115568,8 @@ /area/station/maintenance/department/security/greater) "vXe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -132405,12 +115605,8 @@ /turf/open/floor/iron, /area/station/maintenance/central) "vXP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 4 }, @@ -132418,18 +115614,12 @@ /area/station/science/robotics) "vXQ" = ( /obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "vXS" = ( /obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/crew_quarters/dorms) "vXV" = ( @@ -132455,10 +115645,9 @@ }, /obj/effect/turf_decal/delivery/red, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/prison/upper) "vYi" = ( @@ -132472,7 +115661,7 @@ /obj/structure/chair{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/lawoffice) "vYq" = ( @@ -132503,12 +115692,8 @@ /turf/open/floor/iron/freezer, /area/station/common/locker_room_shower) "vYX" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/textured, /area/station/medical/aslyum) "vZa" = ( @@ -132527,8 +115712,8 @@ }, /obj/item/chair, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/plating, @@ -132545,8 +115730,8 @@ /area/station/service/library/printer) "vZv" = ( /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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 = "Central Hallway" }, @@ -132569,8 +115754,8 @@ /area/station/hallway/primary/upper) "vZK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 4 }, @@ -132580,33 +115765,23 @@ /obj/structure/chair/office/light{ dir = 4 }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green, /obj/effect/landmark/start/virologist, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, /obj/machinery/duct, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, /turf/open/floor/iron/white, /area/station/medical/virology) "vZR" = ( /obj/structure/window/spawner/directional/south, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/structure/closet/crate/trashcart/laundry, /obj/item/soap/nanotrasen, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, /turf/open/floor/iron/cafeteria, /area/station/commons/locker) "vZW" = ( @@ -132626,12 +115801,8 @@ /area/station/ai_monitored/command/storage/eva) "waa" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/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) "wae" = ( @@ -132653,9 +115824,6 @@ "was" = ( /obj/machinery/computer/pandemic, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/structure/cable, /turf/open/floor/iron, /area/station/medical/virology) @@ -132663,12 +115831,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/upper) "waD" = ( @@ -132676,12 +115840,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/port) "waF" = ( @@ -132721,16 +115881,8 @@ /turf/open/floor/wood, /area/station/service/hydroponics/garden/abandoned) "waY" = ( -/obj/structure/disposaloutlet{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "waZ" = ( /obj/machinery/disposal/bin, @@ -132741,12 +115893,8 @@ /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "wba" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/service/hydroponics) @@ -132789,15 +115937,8 @@ dir = 8; id = "Luggagebelt" }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/security/checkpoint) "wbh" = ( @@ -132815,8 +115956,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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, @@ -132842,16 +115983,14 @@ /area/station/common/cryopods) "wbJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/range) "wbM" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/structure/railing/corner/end{ +/obj/structure/railing/corner/end/flip{ dir = 4 }, /turf/open/floor/iron, @@ -132860,26 +115999,19 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/blueshield) "wbQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/stone, /area/station/common/wrestling/arena) "wbV" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science) "wbW" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/north, /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -132895,12 +116027,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/aux_eva) @@ -132932,8 +116060,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -133018,15 +116146,11 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer4{ dir = 4 }, -/obj/machinery/air_sensor{ - chamber_id = "ordnancegas2" - }, +/obj/machinery/air_sensor/ordnance_freezer_chamber, /turf/open/floor/engine, /area/station/science/ordnance/freezerchamber) "wcJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/gravity_generator) "wcO" = ( @@ -133037,6 +116161,10 @@ }, /turf/open/floor/grass, /area/station/science/research) +"wcZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/circuit, +/area/station/security/mechbay) "wdb" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 4 @@ -133071,8 +116199,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/medbay/central) "wdn" = ( @@ -133080,13 +116208,6 @@ /area/station/hallway/primary/central) "wdo" = ( /obj/structure/closet/secure_closet/security/sec, -/obj/effect/turf_decal/bot_blue, -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/blue/end{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/security/lockers) "wdr" = ( @@ -133109,12 +116230,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -133160,24 +116277,16 @@ /area/station/hallway/primary/central) "wdI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/storage/tech) "wdL" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -133219,15 +116328,6 @@ }, /turf/open/floor/carpet, /area/station/hallway/primary/port) -"wdX" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/department/medical) "wel" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible/layer4, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, @@ -133291,7 +116391,6 @@ /area/station/ai_monitored/turret_protected/aisat_interior) "weB" = ( /obj/structure/window/spawner/directional/west, -/obj/effect/landmark/start/assistant, /obj/structure/chair/sofa/corp/right{ color = "#DE3A3A"; dir = 4 @@ -133312,31 +116411,16 @@ /obj/structure/disposalpipe/segment, /obj/structure/cable, /obj/item/radio/intercom/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/checker, /area/station/hallway/secondary/service) "weK" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/effect/spawner/random/trash/food_packaging, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "weL" = ( /obj/structure/rack/shelf, @@ -133351,13 +116435,13 @@ /area/station/science/research/abandoned) "weT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/commons/dorms) "weV" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/security/courtroom) "weW" = ( @@ -133375,10 +116459,8 @@ /turf/open/floor/iron/dark, /area/station/science/robotics) "weZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/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, /area/station/science/ordnance/office) @@ -133407,8 +116489,8 @@ }, /obj/effect/spawner/random/trash/mess, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/firedoor, /obj/machinery/button/door/directional/north{ id = "Starboardbowmaints"; @@ -133439,7 +116521,6 @@ /area/station/engineering/gravity_generator) "wfu" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/bot, /obj/item/storage/box/lights/mixed{ pixel_x = 6; pixel_y = 11 @@ -133482,12 +116563,8 @@ /area/station/command/heads_quarters/rd) "wfE" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -133545,10 +116622,6 @@ /turf/open/floor/iron, /area/station/cargo/lobby) "wgp" = ( -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/machinery/pipedispenser/disposal, /turf/open/floor/iron/dark, /area/station/engineering/atmos) @@ -133586,16 +116659,8 @@ /obj/structure/railing{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/common/cryopods) "wgA" = ( @@ -133617,8 +116682,8 @@ /turf/closed/wall/r_wall, /area/station/maintenance/abandon_psych) "wgY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -133664,7 +116729,6 @@ /area/station/security/detectives_office/private_investigators_office) "who" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/bot, /obj/item/clipboard, /obj/item/toy/figure/atmos, /obj/item/analyzer{ @@ -133697,20 +116761,14 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/upper) "whz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/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/gateway) "whB" = ( /obj/item/kirbyplants/random, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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) @@ -133720,12 +116778,8 @@ id = "Biohazard"; name = "Biohazard Containment Door" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -133742,8 +116796,8 @@ /area/station/security/lockers) "whW" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/holopad, /obj/structure/disposalpipe/segment{ dir = 10 @@ -133760,7 +116814,7 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "wie" = ( @@ -133771,8 +116825,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) @@ -133783,17 +116837,6 @@ /obj/machinery/duct, /turf/open/floor/iron/freezer, /area/station/commons/toilet/auxiliary) -"wig" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "wij" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ color = "#DE3A3A" @@ -133832,10 +116875,6 @@ "wiI" = ( /obj/effect/turf_decal/bot, /obj/machinery/power/emitter, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/stripes{ dir = 8 }, @@ -133855,23 +116894,7 @@ }, /turf/open/floor/material/meat, /area/station/maintenance/department/science/xenobiology) -"wiP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "wiQ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/cable, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/side{ @@ -133899,12 +116922,8 @@ /turf/open/floor/carpet, /area/station/command/heads_quarters/qm) "wjv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/airalarm/directional/south, /obj/structure/cable, /obj/machinery/camera{ @@ -133933,9 +116952,6 @@ /turf/open/floor/iron/smooth, /area/station/cargo/miningdock) "wjF" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 10 - }, /obj/structure/bed{ dir = 1 }, @@ -133972,9 +116988,7 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -133998,8 +117012,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/research) "wkv" = ( @@ -134011,12 +117025,8 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "wkC" = ( @@ -134044,7 +117054,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "wkR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad, /turf/open/floor/iron, /area/station/construction/mining/aux_base) @@ -134059,13 +117069,9 @@ "wkY" = ( /obj/machinery/photocopier, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, /turf/open/floor/iron/dark, /area/station/security/interrogation) "wkZ" = ( @@ -134088,25 +117094,12 @@ name = "Seperating Blast Doors" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/gateway) "wlb" = ( /obj/structure/closet/toolcloset, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/machinery/newscaster/directional/north, /turf/open/floor/iron, /area/station/construction/mining/aux_base) @@ -134136,7 +117129,6 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "wlo" = ( -/obj/effect/turf_decal/bot_white, /obj/structure/closet/crate/goldcrate, /obj/item/stack/spacecash/c500, /obj/item/stack/spacecash/c500, @@ -134158,11 +117150,15 @@ /area/station/maintenance/solars/port/fore) "wlu" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/xenobiology/hallway) +"wlw" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/stone, +/area/station/service/forge) "wlF" = ( /obj/effect/turf_decal/stripes, /obj/machinery/light/directional/south, @@ -134189,17 +117185,12 @@ /area/station/security/prison/shower) "wlL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/wood, /area/station/command/heads_quarters/hos) "wlM" = ( -/obj/effect/turf_decal/stripes, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, @@ -134223,9 +117214,6 @@ /turf/open/floor/iron, /area/station/commons/dorms) "wlT" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining{ name = "Cargo Bay" @@ -134239,32 +117227,19 @@ /turf/open/floor/plating, /area/station/maintenance/department/security/prison_upper) "wlW" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/machinery/light/directional/south, /obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/command) "wlY" = ( /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 5 +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "wmh" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /turf/open/floor/iron/white, /area/station/medical/surgery) "wmr" = ( @@ -134275,17 +117250,12 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/cargo/power_station/upper) "wmC" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow, /obj/machinery/field/generator, /obj/effect/turf_decal/stripes{ dir = 9 @@ -134295,15 +117265,9 @@ }, /area/station/engineering/storage) "wmD" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron/dark, +/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/brig) "wmH" = ( /obj/effect/decal/cleanable/dirt{ @@ -134325,8 +117289,8 @@ id = "Biohazard"; name = "Biohazard Containment Door" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/science) @@ -134348,7 +117312,7 @@ }, /obj/effect/turf_decal/trimline/purple/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /turf/open/floor/iron/white, /area/station/science/xenobiology/hallway) @@ -134408,6 +117372,16 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/circuit/telecomms, /area/station/science/server) +"wnk" = ( +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) "wno" = ( /obj/item/stack/sheet/cardboard, /obj/effect/decal/cleanable/dirt{ @@ -134424,9 +117398,6 @@ /turf/open/floor/cult, /area/station/maintenance/cult_chapel_maint) "wnr" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -134434,8 +117405,8 @@ /area/station/maintenance/aux_eva) "wnt" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/command) "wnv" = ( @@ -134452,7 +117423,7 @@ /turf/open/floor/iron/stairs/left, /area/station/hallway/primary/port) "wnF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/kitchen, /area/station/security/prison/mess) @@ -134481,12 +117452,8 @@ "wnU" = ( /obj/effect/spawner/random/trash/mess, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/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/aft/upper) "wnW" = ( @@ -134542,12 +117509,8 @@ name = "Atmospherics Maintenance" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/department/engineering/lesser) "wpg" = ( @@ -134580,8 +117543,8 @@ /obj/machinery/door/airlock/bathroom{ name = "Restroom" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/captain/private) @@ -134627,7 +117590,6 @@ name = "E.V.A. Shutters"; req_access = list("command") }, -/obj/effect/turf_decal/delivery, /obj/machinery/door/poddoor/shutters{ id = "evashutters2"; name = "E.V.A. Storage Shutters" @@ -134640,25 +117602,13 @@ /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, /turf/open/floor/plating, /area/station/maintenance/pool_maintenance) -"wpV" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "wpY" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing, /obj/structure/railing{ dir = 1 @@ -134678,19 +117628,12 @@ /area/station/medical/virology) "wqf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/sign/poster/contraband/pwr_game/directional/south, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "wqk" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -134762,6 +117705,12 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"wrd" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/light/directional/east, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) "wrj" = ( /obj/structure/closet/firecloset, /obj/effect/turf_decal/bot, @@ -134791,9 +117740,10 @@ /area/station/command/heads_quarters/captain) "wru" = ( /obj/machinery/door/airlock/security{ - name = "Isolation Cell 2" + name = "Isolation Cell 2"; + id_tag = "IsolationCell_2" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark, /area/station/security/prison/safe) @@ -134816,12 +117766,8 @@ }, /obj/machinery/newscaster/directional/south, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/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/medbay/central) "wrI" = ( @@ -134832,12 +117778,8 @@ "wrJ" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -134849,24 +117791,10 @@ /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) "wrN" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/brig) -"wrP" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/open/floor/iron, -/area/station/medical/cryo) "wrR" = ( /obj/effect/decal/cleanable/glass, /obj/structure/grille/broken, @@ -134935,8 +117863,8 @@ "wsu" = ( /obj/machinery/door/airlock/wood, /obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/nt_rep) "wsv" = ( @@ -134973,48 +117901,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/security/prison_upper) -"wsA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) -"wsB" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "wsF" = ( /obj/structure/grille/broken, /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) "wsG" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/effect/turf_decal/box/white{ color = "#52B4E9" }, -/obj/machinery/portable_atmospherics/canister/anesthetic_mix, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/effect/turf_decal/box/white{ color = "#52B4E9" }, @@ -135082,9 +117976,7 @@ /area/station/command/heads_quarters/qm) "wtk" = ( /obj/machinery/light/floor, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "wto" = ( /obj/machinery/door/airlock/engineering{ @@ -135094,8 +117986,8 @@ /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/construction) "wtq" = ( @@ -135106,7 +117998,6 @@ /turf/open/floor/iron/white/smooth_half, /area/station/science/explab) "wtu" = ( -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/engineering_personal, /obj/machinery/newscaster/directional/north, /obj/machinery/light/directional/north, @@ -135184,8 +118075,8 @@ /area/station/service/chapel) "wup" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/wood, /area/station/service/cafeteria) @@ -135204,12 +118095,8 @@ }, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/engineering, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/engineering/engine_aft_starboard) "wuy" = ( @@ -135221,12 +118108,8 @@ dir = 8 }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -135243,12 +118126,8 @@ /obj/effect/turf_decal/siding/purple{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -135256,12 +118135,8 @@ /area/station/command/heads_quarters/rd) "wuE" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/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/prison/upper) "wuI" = ( @@ -135279,8 +118154,8 @@ /area/station/science/cytology) "wuM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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, /area/station/hallway/secondary/service) @@ -135306,13 +118181,6 @@ /obj/effect/spawner/random/trash/cigbutt, /turf/open/floor/plating, /area/station/maintenance/department/science/lower) -"wuY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/construction/mining/aux_base) "wvd" = ( /obj/structure/railing, /turf/open/floor/carpet, @@ -135325,7 +118193,6 @@ /turf/open/floor/wood, /area/station/service/chapel/funeral) "wvg" = ( -/obj/effect/turf_decal/bot_white, /obj/structure/closet/crate/goldcrate, /obj/item/stack/spacecash/c500, /obj/item/stack/spacecash/c500, @@ -135339,9 +118206,7 @@ /area/station/science/xenobiology) "wvk" = ( /obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/captain/private) @@ -135359,8 +118224,8 @@ /turf/open/floor/grass, /area/station/hallway/primary/port) "wvo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/brig) "wvt" = ( @@ -135377,6 +118242,7 @@ /obj/structure/chair/comfy/barber_chair{ dir = 8 }, +/obj/structure/reagent_anvil, /turf/open/floor/wood/tile, /area/station/service/barber) "wvB" = ( @@ -135392,14 +118258,6 @@ /obj/item/clothing/suit/hazardvest, /turf/open/floor/iron, /area/station/hallway/secondary/construction) -"wvM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/duct, -/turf/open/floor/wood, -/area/station/service/barber) "wvN" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -135455,8 +118313,8 @@ /area/station/maintenance/department/security/lesser) "wwx" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/window/left{ name = "Coroner's Office"; req_access = list("morgue") @@ -135472,25 +118330,20 @@ name = "Primary Tool Storage" }, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron, /area/station/commons/storage/primary) "wwR" = ( -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000" - }, -/obj/machinery/light/small/directional/south, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "wxd" = ( @@ -135511,29 +118364,6 @@ dir = 1 }, /area/station/hallway/secondary/entry) -"wxh" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/science/research) -"wxi" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/security/prison/upper) "wxk" = ( /obj/effect/turf_decal/stripes{ dir = 1 @@ -135541,32 +118371,6 @@ /obj/structure/chair/office/light, /turf/open/floor/iron, /area/station/science/xenobiology) -"wxm" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating/airless, -/area/station/maintenance/port/upper) -"wxr" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "wxt" = ( /obj/structure/cable, /obj/machinery/computer/cryopod/directional/north, @@ -135574,10 +118378,7 @@ /area/station/common/cryopods) "wxu" = ( /obj/structure/transit_tube/curved/flipped, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "wxw" = ( /obj/machinery/computer/mecha, @@ -135592,7 +118393,7 @@ dir = 8 }, /obj/effect/landmark/generic_maintenance_landmark, -/obj/structure/railing/corner/end/flip{ +/obj/structure/railing/corner/end{ dir = 4 }, /turf/open/floor/iron, @@ -135606,20 +118407,13 @@ /obj/item/paper_bin{ pixel_y = 3 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/grimy, /area/station/ai_monitored/turret_protected/aisat_interior) "wxW" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /obj/item/clothing/head/cone, /obj/item/clothing/head/cone, /obj/item/clothing/head/cone, @@ -135641,9 +118435,6 @@ /area/station/service/chapel/funeral) "wyf" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 5 - }, /obj/machinery/camera{ c_tag = "Security - Brig Cell 4"; dir = 6 @@ -135667,9 +118458,6 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "wyi" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/effect/turf_decal/stripes/red/line{ dir = 5 }, @@ -135705,12 +118493,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) "wyz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/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/safe) "wyA" = ( @@ -135726,12 +118510,8 @@ name = "Auxiliary E.V.A. Storage" }, /obj/structure/barricade/wooden, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/command/eva, /obj/structure/cable, /turf/open/floor/plating, @@ -135744,9 +118524,7 @@ "wyJ" = ( /obj/effect/turf_decal/trimline/white, /obj/structure/marker_beacon/burgundy, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "wyK" = ( /obj/structure/table, @@ -135767,12 +118545,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -135797,8 +118571,8 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "wyX" = ( @@ -135834,12 +118608,8 @@ dir = 8 }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/medical{ name = "Recovery Ward" }, @@ -135943,13 +118713,9 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "wAf" = ( -/obj/structure/closet/crate, -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/salon/lower) +/obj/structure/reagent_water_basin, +/turf/open/floor/wood/large, +/area/station/service/forge) "wAg" = ( /obj/effect/turf_decal/weather/sand{ dir = 6 @@ -135959,7 +118725,7 @@ /area/station/hallway/primary/central) "wAh" = ( /obj/effect/turf_decal/bot/left, -/turf/open/floor/iron/dark/small, +/turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) "wAk" = ( /obj/machinery/door/airlock{ @@ -135993,38 +118759,25 @@ }, /turf/open/floor/iron, /area/station/cargo/drone_bay) -"wAJ" = ( -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "wAN" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/aft) "wAS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth_edge{ dir = 8 }, /area/station/engineering/atmos/hfr_room) "wAU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/spawner/random/trash, /obj/effect/spawner/random/trash/mess, /obj/effect/decal/cleanable/dirt{ @@ -136041,13 +118794,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"wBh" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/research) "wBn" = ( /obj/machinery/atmospherics/components/binary/pump{ name = "Port to Filter" @@ -136060,12 +118806,8 @@ /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/department/crew_quarters/dorms) "wBv" = ( @@ -136101,8 +118843,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -136143,7 +118885,7 @@ }, /obj/structure/railing, /turf/closed/wall/rust, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "wCa" = ( /obj/effect/mapping_helpers/broken_floor, /obj/machinery/light/small/directional/south, @@ -136154,46 +118896,26 @@ /obj/machinery/holopad, /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/storage/tech) "wCi" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, /turf/open/floor/iron/white, /area/station/science/research) -"wCp" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat_interior) "wCw" = ( /obj/machinery/camera/directional/south{ c_tag = "Courtroom - Holding Cell" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/courtroom) "wCG" = ( @@ -136274,19 +118996,6 @@ /turf/open/floor/iron/dark, /area/station/engineering/lobby) "wCS" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/structure/closet/crate/wooden/toy, /obj/machinery/light/small/directional/north, /turf/open/floor/iron, @@ -136351,26 +119060,18 @@ /obj/structure/barricade/wooden/crude, /obj/structure/curtain/bounty/start_closed, /turf/open/floor/iron/dark/herringbone, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "wDh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, /turf/open/floor/carpet, /area/station/service/lawoffice) "wDi" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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 @@ -136401,7 +119102,7 @@ /turf/open/floor/iron/white, /area/station/science) "wDr" = ( -/obj/item/storage/secure/safe/directional/east, +/obj/structure/secure_safe/directional/east, /obj/structure/cable, /obj/machinery/light/directional/east, /obj/machinery/camera{ @@ -136409,28 +119110,21 @@ dir = 6; name = "command camera" }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/hop) "wDt" = ( /obj/structure/railing/corner, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/warehouse) "wDy" = ( /obj/structure/bed, /obj/item/bedsheet, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 6 - }, /turf/open/floor/iron/dark, /area/station/security/brig) "wDB" = ( @@ -136473,17 +119167,12 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/private_investigators_office) "wDM" = ( /obj/machinery/disposal/bin, -/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 10 }, @@ -136507,18 +119196,12 @@ /obj/effect/turf_decal/stripes/white/corner{ dir = 8 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "wEl" = ( /obj/structure/sign/poster/official/love_ian/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) "wEn" = ( @@ -136529,26 +119212,12 @@ /obj/machinery/atmospherics/components/binary/valve/digital/on/layer2, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"wEr" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "wEw" = ( /obj/structure/chair{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) @@ -136567,7 +119236,6 @@ /obj/structure/chair/sofa/bench{ dir = 4 }, -/obj/effect/landmark/start/assistant, /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, @@ -136581,8 +119249,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /obj/effect/landmark/start/hangover, @@ -136659,15 +119327,6 @@ }, /turf/open/floor/iron/smooth_edge, /area/station/command/secure_bunker) -"wFi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/security/prison/safe) "wFl" = ( /obj/structure/plasticflaps, /obj/machinery/navbeacon{ @@ -136682,13 +119341,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"wFr" = ( -/obj/effect/turf_decal/bot_white, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/entry) "wFA" = ( /obj/machinery/holopad, /obj/structure/disposalpipe/segment{ @@ -136698,22 +119350,14 @@ /area/station/service/hydroponics) "wFH" = ( /obj/effect/spawner/random/structure/steam_vent, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/department/engineering/lesser) "wFN" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/bridge) "wFW" = ( @@ -136729,7 +119373,6 @@ "wGe" = ( /obj/structure/closet/toolcloset, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes, /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) @@ -136739,12 +119382,8 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/hallway/primary/aft) "wGm" = ( @@ -136775,29 +119414,6 @@ /obj/item/clothing/mask/breath, /turf/open/floor/plating/airless, /area/space/nearstation) -"wGr" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "wGx" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -136809,11 +119425,15 @@ /turf/open/floor/iron, /area/station/hallway/primary/port) "wGD" = ( -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ +/obj/structure/chair/stool/bar/directional/north, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/service/bar/atrium) +"wGE" = ( +/obj/structure/chair/stool/bar/directional/north, +/obj/effect/turf_decal/tile/bar/opposingcorners{ dir = 1 }, -/obj/structure/chair/stool/bar/directional/north, /turf/open/floor/iron, /area/station/service/bar/atrium) "wGO" = ( @@ -136828,9 +119448,7 @@ "wGR" = ( /obj/structure/punching_bag, /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -136845,13 +119463,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/dark/side, /area/station/cargo/drone_bay) -"wHa" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "wHf" = ( /obj/structure/table, /obj/item/clothing/shoes/russian, @@ -136887,9 +119498,6 @@ /area/station/security/prison/shower) "wHw" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /turf/open/floor/iron/dark, /area/station/science/xenobiology) "wHA" = ( @@ -136948,8 +119556,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) @@ -136965,25 +119573,11 @@ /turf/open/floor/iron, /area/station/security/prison/workout) "wIx" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/iron/dark, +/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/brig) "wIE" = ( /turf/open/floor/iron, @@ -137054,13 +119648,6 @@ name = "Labor Camp Shuttle Lockdown"; req_access = list("brig") }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/structure/chair/sofa/bench/right{ dir = 4; pixel_x = -5 @@ -137082,12 +119669,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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/research) "wJl" = ( @@ -137144,28 +119727,14 @@ }, /turf/open/floor/iron/white, /area/station/security/medical) -"wJI" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/security/checkpoint) "wJQ" = ( /obj/structure/chair/office{ dir = 8 }, /obj/effect/landmark/start/head_of_personnel, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) -"wJY" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/main) "wJZ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/layer_manifold/violet/visible{ @@ -137173,6 +119742,12 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos/pumproom) +"wKa" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) "wKd" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -137195,18 +119770,12 @@ /area/station/command/heads_quarters/nt_rep) "wKi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/port) -"wKj" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "wKx" = ( /obj/structure/chair/office{ dir = 1 @@ -137216,17 +119785,14 @@ /area/station/medical/psychology) "wKQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/atmos/office) "wLc" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "wLn" = ( /turf/open/floor/iron, @@ -137240,9 +119806,6 @@ /turf/open/floor/plating, /area/station/security/prison/workout) "wLD" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/structure/table/reinforced, /obj/effect/spawner/random/techstorage/arcade_boards, /obj/item/radio/intercom/directional/north, @@ -137255,11 +119818,6 @@ /obj/machinery/duct, /turf/open/floor/carpet/orange, /area/station/commons/dorms/room1) -"wLG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/station/service/theater) "wLH" = ( /obj/effect/landmark/start/botanist, /obj/effect/turf_decal/trimline/green/filled/line{ @@ -137273,12 +119831,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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 = 6 }, @@ -137297,12 +119851,8 @@ /area/station/hallway/primary/central) "wLS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/sorting/mail/flip{ dir = 1; name = "Law Junction"; @@ -137316,12 +119866,8 @@ }, /obj/effect/spawner/random/trash/mess, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -137335,9 +119881,7 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "wMa" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/ordnance/testlab) "wMb" = ( @@ -137365,9 +119909,7 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "wMj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/purple{ dir = 1 @@ -137415,26 +119957,12 @@ dir = 1 }, /obj/effect/turf_decal/trimline/blue/filled/warning, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/medical/general, /turf/open/floor/iron/white, /area/station/medical/storage) -"wMw" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/security/brig) "wMx" = ( /turf/closed/wall/rust, /area/station/maintenance/port/upper) @@ -137479,7 +120007,7 @@ }, /area/station/hallway/primary/central/aft) "wMT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/kitchen, /area/station/service/theater) "wMU" = ( @@ -137510,7 +120038,6 @@ }, /area/station/science/research) "wNu" = ( -/obj/effect/turf_decal/tile/green/fourcorners, /obj/structure/table/glass, /obj/structure/microscope{ pixel_x = -16; @@ -137544,10 +120071,8 @@ /area/station/science/lab) "wNA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/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) "wNF" = ( @@ -137561,8 +120086,8 @@ }, /area/station/hallway/secondary/entry) "wNU" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/stairs, /area/station/common/wrestling/arena) @@ -137573,12 +120098,8 @@ /obj/machinery/door/firedoor, /obj/machinery/firealarm/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/public/glass{ name = "Central Upper Hallway" }, @@ -137590,12 +120111,8 @@ "wOc" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/table/reinforced, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -137652,10 +120169,6 @@ /obj/item/pen{ pixel_x = 7 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /obj/structure/disposalpipe/segment, /obj/machinery/button/polarizer{ id = "interro"; @@ -137666,14 +120179,13 @@ /area/station/security/interrogation) "wPc" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/effect/mapping_helpers/broken_floor, -/obj/effect/spawner/random/structure/steam_vent, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/port/fore) @@ -137688,9 +120200,7 @@ network = list("ss13","medbay") }, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "wPg" = ( @@ -137731,12 +120241,8 @@ /obj/structure/cable, /obj/machinery/airalarm/directional/south, /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/solars/port/fore) "wPS" = ( @@ -137750,12 +120256,8 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "wPZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/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/engineering/lesser) "wQf" = ( @@ -137830,12 +120332,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/aft/upper) @@ -137852,9 +120350,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/hydroponics/garden/abandoned) "wQH" = ( @@ -137900,27 +120396,15 @@ "wQO" = ( /obj/effect/turf_decal/bot, /obj/machinery/power/emitter, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, /turf/open/floor/iron, /area/station/engineering/storage) "wQP" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, /area/station/security/brig) "wQS" = ( /obj/effect/decal/cleanable/dirt{ @@ -137942,12 +120426,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"wRb" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "wRj" = ( /obj/structure/railing{ dir = 8 @@ -137963,8 +120441,8 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "rnd-enterance" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/science/general, /obj/machinery/duct, @@ -137981,7 +120459,7 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/xenobio_disposals) "wRI" = ( @@ -137989,12 +120467,9 @@ /obj/structure/flora/bush/lavendergrass, /obj/structure/window/spawner/directional/south, /obj/effect/turf_decal/siding/thinplating/dark, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/small/directional/west, /turf/open/floor/grass, /area/station/service/chapel) "wRL" = ( @@ -138003,26 +120478,19 @@ /area/station/cargo/miningdock) "wRM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/medium{ dir = 8 }, /area/station/hallway/secondary/command) "wRQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/hallway/primary/port) "wRR" = ( /obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/corner{ @@ -138064,11 +120532,9 @@ /turf/open/floor/catwalk_floor, /area/station/engineering/atmos) "wSh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "wSi" = ( /obj/structure/cable, /obj/effect/spawner/random/structure/steam_vent, @@ -138091,12 +120557,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical) "wSE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/dark/side, /area/station/hallway/secondary/exit) @@ -138142,12 +120604,8 @@ /turf/open/floor/iron/dark, /area/station/science/server) "wTh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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, /area/station/cargo/lobby) @@ -138156,18 +120614,14 @@ dir = 1 }, /obj/structure/filingcabinet/chestdrawer, -/mob/living/simple_animal/parrot/poly, +/mob/living/basic/parrot/poly, /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/white/corner, /area/station/command/heads_quarters/ce) "wTl" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -138179,30 +120633,18 @@ /obj/effect/turf_decal/stripes{ dir = 1 }, -/obj/effect/turf_decal/stripes, /obj/machinery/door/poddoor/preopen{ id = "shuttleblast1"; name = "Shuttle Bay Blast Door" }, /turf/open/floor/plating, /area/station/cargo/power_station/upper) -"wTp" = ( -/obj/structure/cable, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/law) "wTq" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/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{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "wTr" = ( /obj/machinery/camera/directional/east{ @@ -138210,9 +120652,6 @@ name = "hallway camera" }, /obj/machinery/newscaster/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -138225,12 +120664,8 @@ name = "Public Gym" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/gym/right{ pixel_y = 32 @@ -138238,15 +120673,6 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/wood, /area/station/commons/fitness) -"wTB" = ( -/obj/structure/extinguisher_cabinet/directional/west, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/hallway/primary/port) "wTE" = ( /obj/effect/turf_decal/tile/blue/half{ dir = 8 @@ -138254,9 +120680,7 @@ /obj/effect/turf_decal/tile/blue/half{ dir = 4 }, -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) "wTF" = ( /turf/open/floor/wood, @@ -138299,8 +120723,8 @@ "wTW" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/department/engineering/atmos_aux_port) "wUb" = ( @@ -138377,8 +120801,8 @@ name = "Mech Bay"; req_access = list("robotics") }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/mineral/plastitanium/red, /area/station/science/robotics/lab) "wVe" = ( @@ -138390,22 +120814,17 @@ /turf/open/floor/grass, /area/station/hallway/primary/central) "wVn" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/kitchen, /area/station/security/prison/mess) "wVs" = ( -/obj/effect/turf_decal/tile/blue{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -138416,12 +120835,8 @@ /area/station/maintenance/port/fore) "wVD" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -138440,17 +120855,12 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"wVS" = ( -/obj/machinery/suit_storage_unit/open, -/obj/effect/turf_decal/stripes/end, -/turf/open/floor/iron/dark, -/area/station/engineering/break_room) "wVT" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/machinery/airalarm/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/hop) "wVW" = ( @@ -138478,31 +120888,17 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "wWj" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/railing{ dir = 4 }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "wWk" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/machinery/airalarm/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/medical/medbay/lobby) "wWq" = ( @@ -138514,8 +120910,8 @@ "wWy" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/cargo/storage) "wWz" = ( @@ -138530,9 +120926,7 @@ "wWB" = ( /obj/effect/turf_decal/bot_red, /obj/item/robot_suit, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/mineral/plastitanium, /area/station/science/robotics/lab) "wWH" = ( @@ -138545,12 +120939,8 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron/dark/side, /area/station/maintenance/department/engineering/engine_aft_starboard) @@ -138570,12 +120960,8 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "bridge-enterance-west" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/command/general, /obj/machinery/duct, /turf/open/floor/iron/dark, @@ -138611,18 +120997,6 @@ /obj/effect/landmark/start/coroner, /turf/open/floor/iron/dark/small, /area/station/medical/morgue) -"wXq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "wXt" = ( /obj/machinery/door/window/left{ dir = 4; @@ -138640,12 +121014,8 @@ /area/station/science/ordnance/testlab) "wXw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -138654,10 +121024,7 @@ /area/station/hallway/secondary/service) "wXy" = ( /obj/machinery/computer/rdconsole, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, +/obj/effect/turf_decal/tile/purple/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/bridge) "wXK" = ( @@ -138671,24 +121038,20 @@ /obj/effect/turf_decal/stripes{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/circuit, /area/station/command/gateway) "wYd" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/detectives_office) "wYe" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing/corner{ dir = 4 }, @@ -138718,6 +121081,13 @@ }, /turf/open/floor/iron/dark, /area/station/service/hydroponics/garden) +"wYl" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/obj/structure/ladder, +/turf/open/floor/iron/shuttle/arrivals/airless, +/area/space/nearstation) "wYo" = ( /obj/structure/table, /obj/item/stack/sheet/iron/fifty, @@ -138800,31 +121170,14 @@ /area/station/security/detectives_office) "wYV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/table/optable, /turf/open/floor/iron, /area/station/medical/surgery/theatre) -"wYY" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "wZc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/security/office) "wZd" = ( @@ -138847,9 +121200,6 @@ /obj/structure/railing{ dir = 8 }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "wZr" = ( @@ -138925,25 +121275,22 @@ /turf/open/floor/iron/white/telecomms, /area/station/tcommsat/server) "wZT" = ( -/obj/effect/spawner/random/structure/chair_maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) -"wZU" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 4 }, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/machinery/button/door/directional/east{ + name = "Security Mech Garage Door Controls"; + id = "SecMech"; + req_access = list("security") + }, +/obj/machinery/recharge_station, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "wZW" = ( -/obj/effect/turf_decal/tile/blue{ +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/cable, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -138974,16 +121321,15 @@ /area/station/maintenance/department/science/lower) "xas" = ( /obj/structure/table/wood, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3 }, /obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/prison/mess) "xaw" = ( @@ -139030,9 +121376,6 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "xaN" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, /obj/structure/decorative/shelf/crates, /turf/open/floor/iron/smooth_edge{ dir = 1 @@ -139040,12 +121383,8 @@ /area/station/cargo/miningdock) "xaU" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -139060,14 +121399,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/ordnance) -"xbf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/research) "xbi" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -139076,7 +121407,6 @@ /obj/effect/turf_decal/vg_decals/atmos/mix{ dir = 8 }, -/obj/effect/turf_decal/bot_white, /turf/open/floor/engine/vacuum, /area/station/engineering/atmos) "xbm" = ( @@ -139098,24 +121428,16 @@ /turf/open/floor/wood, /area/station/commons/dorms/vacantroom) "xbG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/side{ dir = 4 }, /area/station/medical/medbay/lobby) "xbH" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hallup17"; @@ -139128,9 +121450,6 @@ id = "Cell 6"; name = "Cell 6 Locker" }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 10 - }, /obj/machinery/light/small/directional/west, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -139153,32 +121472,17 @@ }, /obj/machinery/airalarm/directional/south, /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/solars/starboard/fore) "xcn" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) -"xcy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, /turf/open/floor/iron, -/area/station/hallway/secondary/service) +/area/station/hallway/primary/upper) "xcz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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, /area/station/service/chapel) @@ -139225,9 +121529,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical) "xcO" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /obj/machinery/atmospherics/components/tank/plasma{ initialize_directions = 1 }, @@ -139240,7 +121541,7 @@ "xcP" = ( /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "xcT" = ( @@ -139254,23 +121555,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat_interior) -"xcY" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/commons/dorms) "xda" = ( /obj/structure/closet/crate/freezer{ name = "limb storage" @@ -139296,7 +121580,7 @@ /area/station/hallway/primary/upper) "xdl" = ( /obj/machinery/photocopier, -/obj/item/storage/secure/safe/directional/east, +/obj/structure/secure_safe/directional/east, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -139347,16 +121631,11 @@ /area/station/maintenance/solars/starboard/fore) "xdL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip{ dir = 2 }, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "xdQ" = ( @@ -139399,9 +121678,7 @@ "xep" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -139412,14 +121689,6 @@ dir = 8 }, /area/station/engineering/atmos/hfr_room) -"xev" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/security/brig) "xey" = ( /obj/machinery/light/directional/south, /obj/item/radio/intercom/directional/south, @@ -139469,12 +121738,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/any/command/general, /obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/open/floor/iron/dark, @@ -139508,8 +121773,8 @@ /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "xfj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/science/research) @@ -139539,7 +121804,7 @@ pixel_y = 12 }, /turf/open/floor/iron/dark/small, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "xfA" = ( /obj/effect/turf_decal/bot, /obj/structure/closet, @@ -139617,8 +121882,8 @@ /area/station/service/cafeteria) "xgr" = ( /obj/structure/chair/stool, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/assistant, /turf/open/floor/iron, @@ -139635,12 +121900,8 @@ "xgv" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/dorms) @@ -139648,12 +121909,6 @@ /obj/structure/fans/tiny/forcefield{ dir = 8 }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/machinery/light/directional/south, /turf/open/floor/plating, /area/station/cargo/storage) @@ -139661,10 +121916,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -139692,19 +121945,12 @@ }, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/command/minisat, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/transit_tube) "xgS" = ( /obj/machinery/computer/records/security, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/machinery/light/directional/north, /obj/machinery/status_display/evac/directional/north, /obj/effect/turf_decal/stripes/blue/line{ @@ -139722,8 +121968,8 @@ /obj/machinery/newscaster/directional/west, /obj/structure/cable, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -139743,12 +121989,8 @@ "xhe" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 4 }, @@ -139760,9 +122002,7 @@ /area/station/commons/dorms) "xhm" = ( /obj/effect/decal/cleanable/oil/streak, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/solars/starboard/fore) "xhn" = ( @@ -139792,8 +122032,8 @@ /area/station/maintenance/starboard/fore) "xhw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/starboard/fore) "xhE" = ( @@ -139806,8 +122046,8 @@ /area/station/maintenance/department/medical/central) "xhZ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/maintenance/starboard/fore) @@ -139850,30 +122090,10 @@ /obj/item/storage/box/drinkingglasses, /turf/open/floor/iron, /area/station/service/bar/backroom) -"xiy" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/command/bridge) -"xiA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/command/captain_dining) "xiB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/abandon_art_studio) @@ -139897,8 +122117,8 @@ /obj/effect/decal/cleanable/glass, /obj/item/shard, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/fore/upper) "xiF" = ( @@ -139918,12 +122138,8 @@ name = "Cell 2"; req_access = list("security") }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/vg_decals/numbers/two, /turf/open/floor/iron/dark/side{ dir = 8 @@ -139946,20 +122162,9 @@ /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) "xjl" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/medical/psychology) -"xjr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/duct, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/prison/workout) "xjt" = ( /obj/effect/turf_decal/bot, /obj/structure/rack, @@ -139975,7 +122180,7 @@ /obj/item/wirecutters, /obj/item/wirecutters, /obj/item/wirecutters, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) "xjw" = ( @@ -140009,12 +122214,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/textured_large, /area/station/service/barber) "xjY" = ( @@ -140031,20 +122232,24 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 1 }, -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Security Maintenance" - }, /obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/structure/cable, +/obj/machinery/door/airlock/security{ + name = "Security Mechbay" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, -/area/station/maintenance/port/fore) +/area/station/security/mechbay) "xkf" = ( /obj/machinery/door/airlock/wood{ name = "Sauna" }, /obj/structure/fans/tiny, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/common/pool/sauna) "xkm" = ( @@ -140093,11 +122298,8 @@ /obj/effect/turf_decal/stripes{ dir = 8 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -140123,32 +122325,17 @@ /area/station/service/lawoffice) "xkG" = ( /obj/effect/spawner/random/structure/crate, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/structure/cable/layer1, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"xkI" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "xkR" = ( /obj/item/radio/intercom/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/engine_smes) "xkU" = ( @@ -140167,8 +122354,8 @@ name = "Atmospherics Maintenance" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/engineering/lesser) "xkZ" = ( @@ -140199,9 +122386,6 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "xlq" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/structure/chair/stool/directional/west, /obj/machinery/light/small/red/dim/directional/west, /obj/structure/cable, @@ -140218,23 +122402,18 @@ /obj/effect/turf_decal/trimline/green/filled/line{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/chair/office/light, /turf/open/floor/iron/white, /area/station/medical/virology) "xlI" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "xlK" = ( @@ -140262,19 +122441,15 @@ /turf/open/floor/wood, /area/station/service/bar/atrium) "xmj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/engineering_guard, /turf/open/floor/iron, /area/station/security/checkpoint/engineering) "xml" = ( /obj/item/trash/pistachios, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/carpet, /area/station/maintenance/abandon_office) @@ -140306,7 +122481,6 @@ /turf/open/floor/plating/airless, /area/station/maintenance/fore/upper) "xmD" = ( -/obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -140323,12 +122497,8 @@ /turf/open/floor/iron, /area/station/command/heads_quarters/hos) "xmO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -140361,26 +122531,11 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "xnj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/iron, /area/station/security/lockers) -"xnl" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "xnp" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -140406,7 +122561,7 @@ /obj/machinery/light/small/directional/east, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "xnC" = ( @@ -140421,10 +122576,6 @@ pixel_y = 4 }, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/side{ dir = 8 @@ -140435,22 +122586,19 @@ /turf/open/floor/carpet/royalblack, /area/station/command/heads_quarters/qm) "xnK" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /mob/living/carbon/human/species/monkey/punpun, /obj/machinery/holopad, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) "xnM" = ( /obj/structure/railing{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor/border_only{ dir = 8 }, @@ -140479,12 +122627,8 @@ dir = 4 }, /obj/machinery/light/small/broken/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/central) "xos" = ( @@ -140495,10 +122639,8 @@ /turf/open/floor/iron, /area/station/engineering/engine_smes) "xot" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -140516,8 +122658,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -140529,9 +122671,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/barber) "xoK" = ( @@ -140570,7 +122710,6 @@ /turf/open/floor/iron/white, /area/station/science/tele_sci) "xph" = ( -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/engineering_personal, /obj/machinery/light/directional/south, /turf/open/floor/iron/dark, @@ -140586,8 +122725,8 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/medical/medbay/lobby) "xpr" = ( @@ -140605,7 +122744,6 @@ /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/effect/landmark/start/assistant, /turf/open/floor/carpet, /area/station/common/wrestling/lobby) "xpv" = ( @@ -140656,10 +122794,6 @@ /turf/open/floor/iron, /area/station/science/explab) "xpC" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, /obj/machinery/conveyor{ dir = 4; id = "garbage" @@ -140696,16 +122830,12 @@ /turf/open/floor/circuit/telecomms, /area/station/science/server) "xpZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "xqc" = ( @@ -140717,8 +122847,8 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/construction, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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) "xqe" = ( @@ -140742,9 +122872,7 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -140754,7 +122882,7 @@ /turf/closed/wall/r_wall, /area/station/maintenance/solars/starboard/fore) "xqu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad, /turf/open/floor/iron/white, /area/station/science/genetics) @@ -140767,7 +122895,7 @@ /turf/open/floor/iron/kitchen, /area/station/security/prison/mess) "xqJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/security/courtroom) "xqK" = ( @@ -140780,14 +122908,6 @@ dir = 8 }, /area/station/hallway/secondary/entry) -"xqR" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/commons/fitness) "xqS" = ( /obj/effect/turf_decal/stripes, /obj/effect/turf_decal/stripes/line{ @@ -140796,35 +122916,11 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating/airless, /area/space/nearstation) -"xqY" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing/corner, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/openspace, -/area/station/maintenance/aft/upper) "xqZ" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - 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/dark, +/turf/open/floor/iron, /area/station/security/brig) "xrk" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -140834,8 +122930,8 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/central) "xrl" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/cable, @@ -140877,10 +122973,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/medical/storage) "xrJ" = ( @@ -140913,6 +123007,16 @@ /obj/structure/curtain/cloth/fancy, /turf/open/floor/wood/large, /area/station/service/theater/abandoned) +"xrV" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt{ + icon_state = "dirt-flat-1" + }, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/chapel) "xrW" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -140932,12 +123036,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -140954,12 +123054,8 @@ network = list("ss13","prison") }, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/security/prison/safe) "xsn" = ( @@ -141038,17 +123134,7 @@ /obj/structure/sign/departments/chemistry/pharmacy/directional/north, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"xsT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/command/gateway) "xsV" = ( -/obj/effect/turf_decal/stripes/corner, /turf/open/floor/iron/white/smooth_half{ dir = 8 }, @@ -141091,8 +123177,8 @@ /obj/machinery/door/airlock/grunge{ name = "Funeral Hall" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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, /area/station/service/chapel/funeral) @@ -141138,20 +123224,14 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/research) "xtQ" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) @@ -141198,8 +123278,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/structure/sign/poster/contraband/random/directional/east, /turf/open/floor/plating, @@ -141207,8 +123287,8 @@ "xuh" = ( /obj/item/kirbyplants/random, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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 = 4 }, @@ -141288,30 +123368,24 @@ "xuN" = ( /obj/structure/closet/secure_closet/brig, /obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/security/brig) "xuR" = ( /obj/structure/filingcabinet/security, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /obj/machinery/camera/directional/east{ c_tag = "Security - Departures Starboard" }, /obj/machinery/light_switch/directional/east, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "xuV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron, /area/station/security/execution/transfer) "xuX" = ( @@ -141324,8 +123398,8 @@ /area/station/command/bridge) "xva" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hallup1"; location = "hallup40" @@ -141359,8 +123433,8 @@ /area/station/hallway/primary/central) "xvf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/command/bridge) @@ -141386,12 +123460,8 @@ /area/station/maintenance/starboard/fore) "xvo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/dark/side{ dir = 9 @@ -141399,8 +123469,8 @@ /area/station/security/prison/upper) "xvy" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) "xvC" = ( @@ -141426,36 +123496,26 @@ }, /area/station/command/secure_bunker) "xvM" = ( -/obj/effect/spawner/random/trash/mess, -/obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" +/obj/structure/chair/sofa/bench/right{ + dir = 8 }, -/turf/open/floor/plating, -/area/station/maintenance/department/chapel) +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) "xvP" = ( /obj/structure/transit_tube/curved/flipped{ dir = 8 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "xvQ" = ( /obj/item/crowbar, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/research/abandoned) "xvR" = ( /obj/effect/turf_decal/stripes/white/corner, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "xwa" = ( /turf/open/floor/carpet, @@ -141491,19 +123551,14 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, +/obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/hallway/primary/port) "xwJ" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/carpet/purple, /area/station/common/night_club/back_stage) @@ -141526,10 +123581,6 @@ /obj/structure/billboard/azik, /turf/open/space/openspace, /area/space/nearstation) -"xxa" = ( -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "xxf" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /obj/machinery/door/poddoor/shutters/preopen{ @@ -141587,12 +123638,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -141638,16 +123685,10 @@ dir = 8 }, /obj/structure/extinguisher_cabinet/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/break_room) "xxW" = ( -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/effect/turf_decal/stripes/white/line, /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -141657,17 +123698,14 @@ id = "Psychward1"; name = "Cell Door 1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/aslyum) "xya" = ( /obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "xyf" = ( /obj/structure/table, @@ -141716,6 +123754,7 @@ dir = 1 }, /obj/structure/railing, +/obj/structure/ladder, /turf/open/floor/plating/airless, /area/station/maintenance/department/security/greater) "xzh" = ( @@ -141723,12 +123762,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/science/lower) -"xzi" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/main) "xzt" = ( /obj/effect/turf_decal/bot, /obj/structure/reagent_dispensers/plumbed, @@ -141756,7 +123789,6 @@ }, /area/station/hallway/secondary/exit) "xzA" = ( -/obj/effect/turf_decal/stripes, /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 1 }, @@ -141777,9 +123809,7 @@ /turf/open/floor/iron/white, /area/station/medical/treatment_center) "xzH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing/corner, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) @@ -141822,18 +123852,14 @@ /area/station/command/gateway) "xAl" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/research) "xAz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -141853,12 +123879,8 @@ }, /obj/effect/turf_decal/trimline/purple/filled/line, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 8 }, @@ -141905,16 +123927,6 @@ /obj/structure/table, /turf/open/floor/plating, /area/station/maintenance/department/security/prison_upper) -"xBo" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "xBs" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 @@ -141969,8 +123981,8 @@ /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/any/medical/cmo, /obj/effect/mapping_helpers/airlock/access/any/engineering/general, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/medical/power_station) "xBL" = ( @@ -141999,24 +124011,7 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/commons/dorms/room3) -"xBS" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/door/airlock/public/glass{ - name = "Central Upper Hallway" - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "xBX" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/table/reinforced, /obj/item/stock_parts/matter_bin/adv, /obj/item/stock_parts/matter_bin/adv, @@ -142067,29 +124062,22 @@ color = "#DE3A3A"; dir = 8 }, -/obj/structure/sign/departments/evac/directional/north, /turf/open/floor/iron/white/corner{ dir = 1 }, /area/station/hallway/secondary/exit/departure_lounge) "xCo" = ( /obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/starboard) "xCp" = ( -/obj/effect/spawner/random/structure/crate, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/salon/lower) +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/stone, +/area/station/service/forge) "xCs" = ( /obj/machinery/holopad, /turf/open/floor/wood, @@ -142107,15 +124095,6 @@ dir = 4 }, /area/station/hallway/secondary/exit) -"xCJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "xCP" = ( /obj/structure/chair/office{ dir = 4 @@ -142144,9 +124123,6 @@ /turf/open/floor/iron/grimy, /area/station/maintenance/starboard/fore) "xDb" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /obj/structure/table/reinforced, /obj/item/pai_card, /obj/machinery/status_display/ai/directional/north, @@ -142161,9 +124137,7 @@ id = "hopline"; name = "Queue Shutters" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "xDl" = ( @@ -142188,9 +124162,7 @@ /obj/effect/turf_decal/stripes{ dir = 4 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "xDq" = ( /obj/machinery/holopad, @@ -142198,33 +124170,19 @@ /obj/structure/disposalpipe/segment{ dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - 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, /area/station/cargo/lobby) "xDx" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 8 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "xDy" = ( /obj/effect/turf_decal/siding/blue, @@ -142289,12 +124247,8 @@ }, /obj/machinery/light_switch/directional/south, /obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/medical/medbay/lobby) "xEg" = ( @@ -142337,12 +124291,8 @@ network = list("ss13","prison") }, /obj/machinery/status_display/evac/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/visit) "xEB" = ( @@ -142352,12 +124302,8 @@ /turf/open/floor/plating/airless, /area/station/maintenance/port/upper) "xEE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/railing/corner/end, /turf/open/floor/iron/dark/side, @@ -142369,7 +124315,6 @@ /turf/open/floor/iron/kitchen, /area/station/security/prison/mess) "xEN" = ( -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/freezer/fridge, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) @@ -142385,9 +124330,8 @@ "xEQ" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue/fourcorners, +/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/medical/medbay/central) "xEV" = ( @@ -142445,11 +124389,8 @@ /turf/open/floor/grass, /area/station/service/chapel) "xFG" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "xFJ" = ( @@ -142466,7 +124407,7 @@ /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/nt_rep) "xFO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/interrogation) "xFQ" = ( @@ -142488,8 +124429,8 @@ color = "#DE3A3A" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/command/heads_quarters/hos) @@ -142514,12 +124455,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - 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/research) "xGq" = ( @@ -142537,12 +124474,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"xGC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/hallway/primary/port) "xGF" = ( /obj/structure/table/wood/poker, /obj/effect/decal/cleanable/dirt{ @@ -142550,21 +124481,10 @@ }, /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) -"xGI" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "xGL" = ( /obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/mineral/plastitanium, /area/station/science/robotics/lab) "xGO" = ( @@ -142631,8 +124551,8 @@ name = "Changing Room" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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, @@ -142644,8 +124564,8 @@ /obj/effect/turf_decal/tile/neutral, /obj/machinery/status_display/evac/directional/east, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/dorms) @@ -142658,7 +124578,6 @@ }, /area/station/hallway/primary/port) "xHN" = ( -/obj/effect/turf_decal/stripes, /obj/structure/window/reinforced/spawner/directional/north, /obj/machinery/computer/order_console/mining, /turf/open/floor/iron/dark/small, @@ -142683,9 +124602,7 @@ pixel_x = -2; pixel_y = -2 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "xHT" = ( /turf/closed/wall, @@ -142732,16 +124649,6 @@ /obj/structure/railing/corner, /turf/open/floor/wood, /area/station/service/cafeteria) -"xIs" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/medical) "xIt" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/heat_exchanging/junction, @@ -142808,10 +124715,6 @@ }, /area/station/hallway/primary/upper) "xJi" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/machinery/camera{ c_tag = "Leisure Hallway - Lower Center"; dir = 10; @@ -142844,24 +124747,10 @@ /turf/open/floor/catwalk_floor/iron_dark, /area/station/science/research) "xJs" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/security/execution/transfer) -"xJt" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "xJv" = ( /obj/item/cigbutt, /obj/machinery/portable_atmospherics/scrubber, @@ -142875,7 +124764,6 @@ "xJN" = ( /obj/structure/closet/toolcloset, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes, /obj/machinery/camera{ c_tag = "Engineering - Gravgen Airlock"; dir = 6; @@ -142894,9 +124782,7 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 4 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "xJY" = ( /obj/effect/turf_decal/siding/wood{ @@ -142916,13 +124802,10 @@ dir = 8 }, /obj/structure/rack/gunrack, -/obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/security/brig) "xKe" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -142933,12 +124816,8 @@ /area/station/maintenance/department/engineering/atmos_aux_port) "xKf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/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/checkpoint) "xKh" = ( @@ -142950,12 +124829,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) "xKj" = ( @@ -143001,12 +124876,8 @@ /obj/machinery/door/airlock/service{ name = "Kitchen" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/navigate_destination, /obj/effect/mapping_helpers/airlock/access/all/service/kitchen, /obj/machinery/duct, @@ -143036,12 +124907,8 @@ /turf/open/floor/iron/white, /area/station/science) "xKP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -143051,12 +124918,8 @@ /area/station/hallway/secondary/exit/departure_lounge) "xKR" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -143078,12 +124941,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) "xLf" = ( @@ -143136,9 +124995,7 @@ /obj/structure/sign/painting/large/library{ pixel_y = -36 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/library) "xLp" = ( @@ -143178,16 +125035,11 @@ /turf/open/floor/wood, /area/station/common/pool) "xMr" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 }, /turf/open/floor/iron, /area/station/service/barber) @@ -143235,10 +125087,7 @@ "xMM" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/machinery/computer/rdservercontrol, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, +/obj/effect/turf_decal/tile/purple/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/bridge) "xMP" = ( @@ -143265,12 +125114,8 @@ /turf/open/floor/iron, /area/station/hallway/primary/upper) "xMY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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/freezer, /area/station/command/heads_quarters/captain/private) @@ -143283,12 +125128,8 @@ /obj/structure/disposalpipe/segment{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/corner{ dir = 8 }, @@ -143327,16 +125168,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) -"xNo" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "xNy" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -143349,7 +125180,7 @@ /turf/open/floor/iron/pool/cobble, /area/station/maintenance/department/engineering/engine_aft_port) "xNA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/closed/wall/r_wall, /area/station/science/ordnance/burnchamber) "xNB" = ( @@ -143387,8 +125218,8 @@ /obj/machinery/door/airlock/freezer{ name = "Freezer" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/abandon_kitchen_upper) @@ -143416,10 +125247,8 @@ dir = 5; name = "chapel camera" }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/chapel/office) "xOi" = ( @@ -143460,8 +125289,8 @@ /turf/open/space/basic, /area/space/nearstation) "xOw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -143479,8 +125308,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/office) "xOE" = ( @@ -143515,12 +125344,8 @@ /area/station/command/heads_quarters/hop) "xPb" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/ordnance) @@ -143599,7 +125424,7 @@ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/tcommsat/computer) "xQa" = ( @@ -143608,8 +125433,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/structure/sign/poster/random/directional/east, /obj/machinery/duct, @@ -143618,18 +125443,14 @@ "xQq" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/warehouse) "xQu" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/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, /area/station/engineering/main) @@ -143650,9 +125471,6 @@ /turf/open/floor/wood, /area/station/hallway/primary/central) "xQR" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, @@ -143666,7 +125484,6 @@ /turf/open/floor/circuit, /area/station/ai_monitored/command/nuke_storage) "xQY" = ( -/obj/effect/turf_decal/stripes, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -143712,14 +125529,13 @@ /area/station/commons/dorms/room5) "xRO" = ( /obj/effect/turf_decal/trimline/blue/filled/warning, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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, /area/station/medical/medbay/central) "xRR" = ( /obj/machinery/teleport/station, -/obj/effect/turf_decal/stripes, /obj/effect/turf_decal/stripes/blue/line, /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -143848,24 +125664,17 @@ id = "Biohazard"; name = "Biohazard Containment Door" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/research) "xTr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/construction/mining/aux_base) "xTt" = ( /obj/structure/cable, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, /turf/open/floor/iron/dark, @@ -143884,24 +125693,25 @@ /area/station/ai_monitored/security/armory) "xTA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/medical/exam_room) "xTE" = ( /obj/machinery/newscaster/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) +"xTK" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) "xTP" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -143914,9 +125724,6 @@ /obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, /obj/effect/decal/cleanable/oil/streak, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -143967,15 +125774,6 @@ /obj/item/binoculars, /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) -"xUD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/wood/parquet, -/area/station/common/gaskiosk) "xUF" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/siding/thinplating_new{ @@ -143985,12 +125783,8 @@ /area/station/medical/patients_rooms) "xUL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 1 }, @@ -144005,22 +125799,10 @@ /obj/structure/table, /turf/open/floor/iron/dark, /area/station/security/prison/mess) -"xUO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/prison/upper) "xUR" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -144037,24 +125819,11 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron/dark, /area/station/service/cafeteria) -"xUW" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat_interior) "xUX" = ( /turf/closed/wall, /area/station/maintenance/abandon_office) "xUY" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/command) "xUZ" = ( @@ -144077,12 +125846,8 @@ }, /obj/item/trash/energybar, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/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/department/medical/central) "xVo" = ( @@ -144091,15 +125856,6 @@ /turf/open/floor/iron/dark, /area/station/tcommsat/computer) "xVt" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/structure/chair/plastic, /obj/structure/cable, /turf/open/floor/iron/dark, @@ -144150,12 +125906,8 @@ /area/station/common/laser_tag) "xVT" = ( /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -144163,12 +125915,8 @@ /area/station/command/bridge) "xVV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -144208,16 +125956,14 @@ /area/station/maintenance/abandon_wrestle) "xWq" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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) "xWt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -144266,18 +126012,6 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/station/medical/surgery/theatre) -"xWR" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/maintenance/aft/upper) "xWT" = ( /obj/effect/turf_decal/stripes{ dir = 1 @@ -144293,7 +126027,6 @@ dir = 1 }, /obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/engine, /area/station/science/xenobiology) @@ -144306,7 +126039,6 @@ "xXl" = ( /obj/structure/disposalpipe/segment, /obj/structure/table, -/obj/effect/turf_decal/tile/yellow/fourcorners, /obj/item/stack/cable_coil{ pixel_x = 3; pixel_y = 3 @@ -144318,12 +126050,14 @@ /obj/item/screwdriver{ pixel_y = -8 }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "xXm" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/engine, /area/station/science/xenobiology) "xXo" = ( @@ -144331,10 +126065,8 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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 }, @@ -144481,12 +126213,8 @@ /turf/open/floor/iron, /area/station/engineering/main) "xYH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/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/hallway/secondary/exit/departure_lounge) @@ -144522,12 +126250,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -144570,14 +126294,11 @@ /turf/open/floor/iron, /area/station/cargo/miningoffice) "xZi" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/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/medical) "xZo" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, /obj/structure/table/reinforced, /obj/item/mmi, /obj/item/mmi, @@ -144625,23 +126346,15 @@ "xZO" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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/cable, /turf/open/floor/iron, /area/station/engineering/main) "xZR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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, /area/station/engineering/main) @@ -144685,21 +126398,13 @@ /obj/effect/turf_decal/bot, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - 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/break_room) "yal" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/medical/surgery/theatre) "yap" = ( @@ -144735,12 +126440,8 @@ dir = 9 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) "yau" = ( @@ -144834,15 +126535,13 @@ icon_state = "dirt-flat-1" }, /obj/effect/spawner/random/trash/food_packaging, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "ybd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison/work) "ybh" = ( @@ -144941,9 +126640,6 @@ /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/table/reinforced, /obj/machinery/recharger, -/obj/effect/turf_decal/siding/thinplating_new/end{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/security/checkpoint) "ybY" = ( @@ -145001,8 +126697,8 @@ /area/station/ai_monitored/command/storage/eva) "ycs" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/commissary) "ycv" = ( @@ -145010,12 +126706,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/port/aft) "ycA" = ( @@ -145023,9 +126715,6 @@ input_dir = 1 }, /obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -145044,12 +126733,8 @@ dir = 4 }, /obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) "ycW" = ( @@ -145098,12 +126783,8 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/medical/general, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -145111,10 +126792,6 @@ /obj/structure/frame/computer{ dir = 8 }, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 4 - }, /obj/item/radio/intercom/directional/east, /obj/machinery/light/broken/directional/east, /obj/effect/decal/cleanable/dirt{ @@ -145149,13 +126826,10 @@ /turf/open/floor/carpet/purple, /area/station/common/night_club) "ydD" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/machinery/light_switch/directional/south, /obj/machinery/light/directional/south, /obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "ydE" = ( @@ -145181,12 +126855,8 @@ "ydH" = ( /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/department/medical) "ydI" = ( @@ -145198,9 +126868,6 @@ /turf/open/misc/asteroid/airless, /area/space/nearstation) "ydK" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, @@ -145246,12 +126913,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - 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/maintenance/abandon_art_studio) "ydW" = ( @@ -145334,8 +126997,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs/right, /area/station/hallway/primary/central) "yeN" = ( @@ -145361,18 +127024,14 @@ icon_state = "dirt-flat-1" }, /obj/structure/trash_pile, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/dark/small, /area/station/cargo/storage) "yfw" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/structure/cable, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "yfy" = ( @@ -145396,12 +127055,12 @@ "yfF" = ( /obj/effect/turf_decal/bot_white, /obj/machinery/scanner_gate, -/obj/effect/turf_decal/loading_area/white{ +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/arrows/white{ dir = 1 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) "yfG" = ( @@ -145411,9 +127070,6 @@ /turf/open/floor/plating, /area/station/security/range) "yfK" = ( -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 10 - }, /turf/open/floor/plating, /area/station/hallway/primary/port) "yfR" = ( @@ -145423,24 +127079,10 @@ /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) "yfU" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - 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/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "yfV" = ( /obj/structure/railing{ @@ -145463,29 +127105,16 @@ /obj/item/chair/stool/bar{ pixel_y = -8 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/vomit/old, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "yga" = ( /obj/structure/curtain/bounty, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/stairs, /area/station/common/night_club) @@ -145503,23 +127132,18 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "ygl" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/machinery/camera{ c_tag = "Security - Brig Starboard"; dir = 10 }, /obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "ygn" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "ygo" = ( @@ -145532,9 +127156,6 @@ /area/station/security/prison/garden) "ygq" = ( /obj/structure/table, -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, /obj/item/storage/toolbox/electrical{ pixel_y = 12 }, @@ -145583,7 +127204,6 @@ /area/station/command/gateway) "ygI" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/delivery/white, /obj/machinery/door/poddoor/shutters/window/preopen{ id = "ArrivalsEntry"; name = "Free Acces Shutters" @@ -145600,7 +127220,7 @@ /turf/open/floor/iron, /area/station/maintenance/port/aft) "ygS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/service/chapel) "ygT" = ( @@ -145635,7 +127255,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/cargo/power_station/upper) "yhf" = ( @@ -145663,8 +127283,8 @@ /turf/open/floor/iron, /area/station/commons/fitness) "yht" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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, @@ -145686,9 +127306,7 @@ /area/station/command/bridge) "yhv" = ( /obj/structure/chair/stool, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/service) "yhA" = ( @@ -145722,10 +127340,7 @@ /obj/structure/chair/sofa/corp/left{ dir = 4 }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 8 }, /turf/open/floor/iron/dark, @@ -145748,9 +127363,7 @@ "yhW" = ( /obj/effect/turf_decal/bot_white, /obj/effect/turf_decal/caution/stand_clear/white, -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) "yhY" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -145776,8 +127389,8 @@ /turf/open/floor/iron/cafeteria, /area/station/maintenance/department/medical/central) "yij" = ( -/obj/effect/turf_decal/tile/yellow, /obj/machinery/photocopier, +/obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron/dark/side{ dir = 9 }, @@ -145800,9 +127413,7 @@ "yiy" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron, @@ -145817,43 +127428,29 @@ pixel_y = 2 }, /obj/item/pen, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/ai_monitored/turret_protected/aisat_interior) "yiD" = ( -/obj/effect/turf_decal/tile/green/fourcorners, +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/green/filled/corner, /turf/open/floor/iron/white, /area/station/medical/virology) "yiE" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/power_station) "yiI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/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/captain_dining) "yiJ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /turf/open/floor/iron/dark/corner{ dir = 8 }, @@ -145912,9 +127509,6 @@ "yiV" = ( /obj/effect/turf_decal/delivery, /obj/machinery/disposal/bin, -/obj/effect/turf_decal/stripes{ - dir = 5 - }, /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -145935,17 +127529,20 @@ /area/station/maintenance/fore/upper) "yjD" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/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) "yjE" = ( /turf/closed/wall, /area/station/maintenance/thruster_room/central) +"yjN" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/computer/mech_bay_power_console, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "yjO" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance/two, @@ -145981,17 +127578,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"ykv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/medical) "yky" = ( /obj/item/assembly/shock_kit, /obj/structure/rack, @@ -146017,9 +127603,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 6 - }, /obj/structure/closet/secure_closet/brig{ id = "Cell 3"; name = "Cell 3 Locker" @@ -146063,9 +127646,6 @@ /obj/machinery/door/airlock/external/glass{ name = "Turbine Airlock" }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) @@ -146117,8 +127697,9 @@ /obj/structure/chair/office{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/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/security/interrogation) "ylw" = ( @@ -146132,27 +127713,13 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/dark/side, /area/station/security/checkpoint/customs/auxiliary) -"ylQ" = ( -/obj/machinery/light/directional/west, -/obj/item/radio/intercom/directional/west, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/hallway/primary/port) "ylX" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "ylY" = ( @@ -146175,9 +127742,6 @@ name = "Mix Outlet Pump" }, /obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -164096,9 +145660,9 @@ xHT hTS xHT lZm -dkW -dkW -dkW +ojX +ojX +ojX iBx ojX fZI @@ -164353,9 +145917,9 @@ xHT nXP bbz uKU -atN -atN -atN +ojX +ojX +ojX kSt ojX fZI @@ -164534,14 +146098,14 @@ cuH mSI ifq jPR -uAu +lSI xgr fIF lSI mSI cuH lrs -kEh +lUD rZO oUA peh @@ -164799,11 +146363,11 @@ pmP oIJ rkL siD -ueV +dEa oUA kcI cNU -qtR +mzP lAY eCb ivB @@ -164869,8 +146433,8 @@ oHL mqQ lxj qEt -rST -sAp +vPM +jtq tfY ojX fZI @@ -165056,7 +146620,7 @@ pGQ cDu pCR gGB -ueV +dEa rRk eCb tlr @@ -165313,7 +146877,7 @@ vQr vQr pCR rkL -ueV +dEa vdG eCb eCb @@ -165354,7 +146918,7 @@ eAV cFU knN oyX -nNF +rNY hCU nFN sCB @@ -165381,10 +146945,10 @@ uiy jNH qCN mqQ -wKj -wKj -wKj -nnz +vPM +vPM +vPM +xDN rus ojX fZI @@ -165570,7 +147134,7 @@ uyC uyC nMN aAU -ueV +dEa uVc ewE xoK @@ -165611,13 +147175,13 @@ eYl cFU pSC avX -buL +rNY lif rqn rNY sTg dTd -pha +hKt kIB aqO muU @@ -165628,7 +147192,7 @@ jMZ lls psQ aiU -coa +qDn qDn oOG szo @@ -165827,11 +147391,11 @@ uyC uyC nMN aAU -kcK +jJJ iXJ -fFy dEa -ieF +dEa +uEt bQL luT ihY @@ -165840,10 +147404,10 @@ aUf tdQ jcj pBo -gOR -goa +gZF +sQS hIV -pld +gZF sQS pBo wGR @@ -165895,9 +147459,9 @@ oxL fJf fJf pVz -oGE -oGE -oGE +fJf +fJf +fJf fjA pVz pVz @@ -166121,7 +147685,7 @@ rqa upX ufV exX -wvM +gct xoD cFU lcj @@ -166131,7 +147695,7 @@ gDF bfA dTd idW -pha +hKt kIB wBy muU @@ -166345,19 +147909,19 @@ siD hMu jJJ siD -hWY -kEh -cGi +lUD +lUD +lUD lUD pCR oib xWq xWq xWq -xqR xWq -kZh -eHg +xWq +hIV +pZJ pZJ dwx tnj @@ -166388,11 +147952,11 @@ lpe mLd gVW wPU -pha +hKt kfF mZA vZK -oYG +iFx iFx ckH prL @@ -166408,10 +147972,10 @@ oxL ufs pRk mVI -dOR +wnr wqk esc -oFD +gmr qSd oeB usR @@ -166605,7 +148169,7 @@ siD fUU nZq fWB -rBt +lUD pCR sAG sKq @@ -166647,7 +148211,7 @@ dTd hyx xYH oil -ulS +psQ fdW gXL met @@ -166883,7 +148447,7 @@ dku pXP eJY edQ -nwB +foV tyh tyh tyh @@ -166921,12 +148485,12 @@ wcz pVz tfO pRk -vkv +oeB itv ajc dgN ezC -hGe +wnr koc jfa iSC @@ -167155,7 +148719,7 @@ upX iqb oQc ijM -oDw +qCy dXo wAf xKQ @@ -167189,7 +148753,7 @@ usR oxL pYM awQ -lDz +htQ htQ oMg dlp @@ -167355,7 +148919,7 @@ lRB krK fuK dVs -oDr +sbQ pMR uyC uyC @@ -167376,9 +148940,9 @@ wtM oZQ cRV oWc -lAw +rNy wRQ -eKO +rNy rNy cRV hgC @@ -167412,13 +148976,13 @@ oyh gJC kvS wvA -oDw +qCy lGU oDK xKQ rii gXL -vkJ +tRC jiF qcc xKQ @@ -167574,7 +149138,7 @@ inc rUv euE hLH -aSi +chC mjE ylg frJ @@ -167593,7 +149157,7 @@ laf laf uMr rYT -pRF +rYT ctM kbK kKZ @@ -167669,7 +149233,7 @@ vOy qaA aUj qaA -huQ +qCy anW xCp xKQ @@ -167926,9 +149490,9 @@ cie dEb pww fwh -oDw +qCy qhK -ksK +wlw ksK huQ dSg @@ -168183,9 +149747,9 @@ upX mUu mUu mUu -oDw -oDw -oDw +qCy +dsU +kWY oDw irJ phI @@ -168208,7 +149772,7 @@ glt pOJ sVC vTs -eKA +buC jpx pZt uRA @@ -168425,26 +149989,26 @@ oYg loR vES pWc -cLO +xil cPK -cLO -cLO -cLO -cLO +xil +xil +xil +xil iel -cLO +xil iHj -cLO +xil qSy -ylQ -cLO -cLO -cLO rvy -wTB +xil +xil +xil +xil +xil mWt -jrB -cLO +xil +cho phI oXz feR @@ -168475,7 +150039,7 @@ oxL dFt qMb jEU -cCr +cEy xko jRz whn @@ -168646,7 +150210,7 @@ sQw lmQ nfL vmp -hvC +hdY bog rAA bgA @@ -168654,9 +150218,9 @@ gtx fKP qYv eIV -lEZ -gLh -bDq +unv +unv +cGH jEg jEg jEg @@ -168664,13 +150228,13 @@ qku qku lmV qku -bMk +qku qku iuy qku qku qku -koL +gve gve qku qku @@ -168688,19 +150252,19 @@ bTP bTP bTP wKi -eGN -dlH -dlH -dlH +fhU +fhU +fhU +fhU vxB -dlH -dlH +fhU +fhU eHi fhU bTP bTP lxA -dxD +bTP bTP hWl iDM @@ -168878,7 +150442,7 @@ dfG sMM kKC cSK -qqC +kTw kTw dCQ dPl @@ -168909,9 +150473,9 @@ uTd bgA gtx sNd -bfa +kxO bcG -fEt +etL gSi jZP etL @@ -168919,46 +150483,46 @@ etL etL leg oke -hBH +gve rAN -cPV -cPV -lpx -cPV -cPV -cPV +kxO +kxO +hjV +kxO +kxO +kxO aNO eCK -cPV -cPV -cPV -cPV -cPV +kxO +kxO +kxO +kxO +kxO cHn uhs -cPV -cPV -bfa -bfa +kxO +kxO +kxO +kxO hjV cvn srJ ieG bvM -bfa +fhl hgM -bfa -bfa +oXX +apW wTr -bfa bwY -jYb +kxO +ieG kSS -bfa -fhl +kxO +kxO hHJ -rxv -bfa +kxO +olW qYv oXz qYv @@ -169131,16 +150695,16 @@ bbm bbm bbm aXM -jhI +ctM mWp lqH gnb tcI kJs vti -hak +lJg iiE -hak +lJg lJg aEX dCQ @@ -169156,7 +150720,7 @@ unK wdW jLy iVe -gHQ +glX glX sLx axy @@ -169176,8 +150740,8 @@ ndg kdl aUy rje -hBH -ucJ +gve +edY ffH nCh wYH @@ -169209,21 +150773,21 @@ tLL tLL tLL tLL -tLL -tLL -tLL -tLL -tLL -tLL -tLL +ecR +bsb +bsb +bsb +bsb +bsb +kLq phI oXz feR bzM vHF -asW +dCV fmG -rUM +yfK tKM uDf tFG @@ -169368,8 +150932,8 @@ fZI mjE mjE kzx -aJI -aJI +doG +doG eTH iNB feJ @@ -169410,8 +150974,8 @@ hrl hrl hXO oWc -jrZ -nxO +rNy +rNy oZQ oZQ oZQ @@ -169434,7 +150998,7 @@ cXf qqu ctA qbj -ucJ +edY iCw irA rfP @@ -169465,22 +151029,22 @@ guN guN guN ucl -fTz -fTz +xrV +hUN xvM sSE -fTz -fTz +xTK +wrd fTz eVf gPk -dcM +iDM feR iLN yaR xwF jWL -gwj +yfK tKX uDf sNP @@ -169492,7 +151056,7 @@ tyB gwf uDf pLD -mIG +kTo exp nhQ qBc @@ -169624,7 +151188,7 @@ fZI fZI oql rGh -rRb +jHK aIF iFX smY @@ -169637,7 +151201,7 @@ wOH odg dVC iHC -vut +glU euE euE euE @@ -169667,7 +151231,7 @@ lct uvu uvu oZQ -kxs +wRQ oZQ xIV oZQ @@ -169690,8 +151254,8 @@ rJZ rJZ iWe sci -xGC -ucJ +qbj +edY iCw bUD rfP @@ -169724,13 +151288,13 @@ tvB taR tvB hyA -hyA -hyA -hyA +iEz +iEz +iEz hyA jIX -tLL -att +nSj +phI waD sEW iLN @@ -169749,7 +151313,7 @@ gwf gwf uDf pLD -mIG +kTo duq nhQ vUj @@ -169881,7 +151445,7 @@ fZI fZI oql qIZ -ccM +jHK miw sRx mIY @@ -169894,7 +151458,7 @@ ixK uqK hZI mfE -vut +glU euE euE euE @@ -169948,7 +151512,7 @@ fVX wYk ctA qbj -ucJ +edY iCw sLQ rfP @@ -170006,7 +151570,7 @@ gwf rUD uDf pLD -mIG +kTo exp dNC ofE @@ -170028,7 +151592,7 @@ jOi dPP qBS csv -hSP +hDr hDr eVv eVv @@ -170167,7 +151731,7 @@ rKn rKn rKn rKn -nTP +kbf dCQ hsZ hsZ @@ -170204,7 +151768,7 @@ aUy aUy aUy voH -xBo +qku ufk aKq aKq @@ -170245,7 +151809,7 @@ wRI tHz iEz phI -vBk +oXz tej gcU lmf @@ -170408,7 +151972,7 @@ euE hce mKJ euE -rVS +sBh mhN mhN mhN @@ -170665,7 +152229,7 @@ euE euE mKJ euE -rVS +sBh mhN jYd dQz @@ -170756,7 +152320,7 @@ wuC nUG hBP bxf -wsA +uYL iEz phI oXz @@ -170936,16 +152500,16 @@ lCn rKn war nbK -rKn -rKn -ttc -rKn -rKn -rKn -rKn +tNz +tNz +tNz +tNz +tNz +tNz +tNz aQk fbq -wZU +fbq laf fbq fbq @@ -170980,7 +152544,7 @@ qTT aKq dkP dfe -wTp +lBH lBH jtm uEi @@ -171034,7 +152598,7 @@ mIR mIR vVX fOr -iMd +kfm exp ofE grm @@ -171055,7 +152619,7 @@ bNr ani jOi hDr -hSP +hDr lHh hDr eVv @@ -171193,13 +152757,13 @@ rKn rKn plI nWK -rKn -ufv -mjK -rKn +tNz +mBw +geL +jEw rZq tUd -rKn +tNz ggF wMc mWp @@ -171291,12 +152855,12 @@ mIR mIR vVX pLD -emq +vaX jjt xqc oqU xPO -awW +nud nud xuI xxh @@ -171436,7 +153000,7 @@ euE cgu mKJ euE -rVS +sBh hZI aSZ reQ @@ -171450,13 +153014,13 @@ etj rKn xrJ ejO -rKn -ttc -rKn -rKn -kbf -kbf tNz +yjN +vpe +tUj +uut +eGr +cZT fAw fAw fAw @@ -171470,12 +153034,12 @@ oNl lEA iGF wCw -ccc +dhS vGI pPO dhS spB -uql +uQp arQ ocx aXX @@ -171489,7 +153053,7 @@ uGZ cXk rKn vUs -oyj +qku uFT aKq aKq @@ -171707,13 +153271,13 @@ rKn rKn rKn rKn -rKn -tcI -rKn -vpe -kbf -wZT tNz +mmu +tUj +vpe +wcZ +hpF +cZT bbn dqw eBG @@ -171727,7 +153291,7 @@ rtp lWz iGF kZZ -jqZ +vGI jUk uDg ozQ @@ -171746,7 +153310,7 @@ uDg uDg uDg cRg -rlD +gve jwJ kro mUP @@ -171940,9 +153504,9 @@ gBn ebG dwK mgt -tlh +iHC mhN -bcR +vUC mhN iHC xYh @@ -171964,12 +153528,12 @@ mjK kbf ttc ttc -kbf +tNz bop dTy -ttc -kbf -mjK +fYr +kxe +dyS xkc aey gTF @@ -171984,7 +153548,7 @@ wfQ hXY iGF jQu -cxe +pPO jQu uDg aJG @@ -172003,7 +153567,7 @@ jBr dJL jQu dGz -vcd +qku jwJ kro eAm @@ -172037,9 +153601,9 @@ xNW tvB waa uYL -cvi -sGN dty +sGN +cvi ckv lKd vDU @@ -172221,13 +153785,13 @@ rKn kif tPT ufv -mjK +tNz wZT -rKn -hHH +bAo +bAo bAo lHT -tNz +cZT lSs qDO uro @@ -172241,7 +153805,7 @@ laf laf swt hel -jqZ +vGI tle gxg fcP @@ -172260,7 +153824,7 @@ vus uQp pEq vRE -aAg +qku jwJ kro wrV @@ -172281,7 +153845,7 @@ oBv qlY amB qYC -gJv +mQI rWB pzF snu @@ -172467,9 +154031,9 @@ bDB hxO tMz mjE -sDz -rFt -quE +sum +cVu +sXy hGf rYT mjK @@ -172479,12 +154043,12 @@ tNz tNz cue tNz -tNz -tNz -tNz -tNz -tNz -tNz +cZT +hAz +nDO +hAz +fAw +fAw fAw bnX fAw @@ -172507,7 +154071,7 @@ cFj oZa fcP sXv -kim +tGb dsW qqZ fPr @@ -172517,7 +154081,7 @@ iYl hgY jQu dGz -vcd +qku jwJ kro boE @@ -172538,7 +154102,7 @@ gyX qlY tbS oMk -gJv +mQI pmD bhb snu @@ -172551,14 +154115,14 @@ kvW tvB iXl imm -ufD hfI -iNs +hfI +ckv bTk dnG eAB mHa -oMy +oXz feR lkU xWd @@ -172725,7 +154289,7 @@ lMR oUI mjE dsA -pnn +cVu pAF hGf rYT @@ -172737,13 +154301,13 @@ kcW cAi bVB yiK -wYY -wYY -tbW +eSi +eSi +qgJ fAw uNk pre -gAz +qDO xQR wkY fAw @@ -172764,7 +154328,7 @@ onO rQp fcP fcP -kim +tGb gvb lHb quo @@ -172774,7 +154338,7 @@ rAr vpx uDg dGz -vcd +qku jwJ kro bGM @@ -172815,7 +154379,7 @@ seh kLj vDU phI -vBk +oXz qJo eMM mEf @@ -172968,22 +154532,22 @@ iuU lzN akv qby -eoS -eoS -eFM +jvQ +qnt +jvQ iuT jvQ qnt xuV bPE -emz +aCT hef rdj srD mhN -kzp -pnn -quE +sum +cVu +sXy hGf rYT kbf @@ -173021,7 +154585,7 @@ vus scO fcP fcP -kim +tGb bJz vus vus @@ -173031,7 +154595,7 @@ ccx pgK uDg dRK -vcd +qku cST lAZ lAZ @@ -173104,7 +154668,7 @@ qBS rXP rXP uVZ -sQo +uVZ mxa rUl hDr @@ -173113,7 +154677,7 @@ bbj pLo uVZ oBa -hSP +hDr hDr xuJ hDr @@ -173234,13 +154798,13 @@ eLF fgg mhN fHM -eoK +qlC qlC mXO pKX wQP -qnB -quE +asc +sXy hGf uTp hGf @@ -173251,7 +154815,7 @@ wJB aiV ewr yiK -eeQ +sum qTW sXy fAw @@ -173285,10 +154849,10 @@ aTD uDg gIc obS -nFq +pgK uDg dGz -vcd +qku ofm lAZ tiZ @@ -173496,8 +155060,8 @@ mjE mjE mjE kts -dRY -quE +asc +sXy hGf mZP hGf @@ -173534,8 +155098,8 @@ jNN kMy vgM fcP -tFV -iGo +tGb +tGb gOI kMy vfC @@ -173545,7 +155109,7 @@ uDg nyW uDg qkm -vcd +qku jwJ fgv wrV @@ -173594,11 +155158,11 @@ vPM xBz vVX wlb -iXW +hey qsW -iXW -iXW -iXW +hey +hey +hey sWo hey ook @@ -173751,23 +155315,23 @@ aCu oUh dQI aVB -jtY -kzp -dRY +oqw +sum +asc oci euj -oZO +svX mrc -wYY -wYY +tbW +tbW ckZ -wYY -wYY +tbW +tbW qZQ nqK -kzp +sum qTW -oci +sXy tTp pfl fmC @@ -173802,7 +155366,7 @@ uEl gma pjw dGz -uoG +qku sLT fgv amb @@ -173813,7 +155377,7 @@ nRk gEu uuF aKE -cqj +ckT egd uif kty @@ -173848,17 +155412,17 @@ mqO eqS eqS eqS -xxa +vPM vVX pVA jyG -qrM +xTr xTr wkR xTr -wuY pbb -qMq +pbb +jyG oqn pLD kfm @@ -174004,14 +155568,14 @@ ilg thr lKw wbJ -tkE +qyT qyT qyT hkb crY asc -bQW -cIu +asc +asc tEl asc asc @@ -174020,7 +155584,7 @@ asc xqZ asc asc -cWq +gny rDT gny uJc @@ -174059,7 +155623,7 @@ bnr bnr rkc cKH -vcd +qku jwJ fgv nwS @@ -174072,7 +155636,7 @@ uuF nHh nHh nHh -pBq +uif kPr hfR gqp @@ -174086,15 +155650,15 @@ uuF bdW bdW hXp -mlQ -cbU -cbU -cbU +gva +gva +gva +gva cgS sYe -qcD +mJD nSk -vNv +gxY gEE gEE rcY @@ -174126,7 +155690,7 @@ oeL xmj srs vvf -ixZ +aiC jCu rtN mQU @@ -174265,22 +155829,22 @@ nyf aua mdj aVB -esH -esH +sum +sum jCZ -esH +sum nUM -esH -rJD -rJD +sum +sum +sum elg nlg ksV -rJD +sum oqw nqK -eeQ -wGr +sum +pvr sXy tTp fYK @@ -174316,7 +155880,7 @@ bnr eUb pjw jVP -vcd +qku wGx lAZ fnY @@ -174329,7 +155893,7 @@ uuF oFJ lAP imH -pBq +uif svR vku tME @@ -174536,9 +156100,9 @@ gdj lBJ lBJ gdj -kuR -wGr -nBZ +sum +pvr +sXy fAw fAw fAw @@ -174568,7 +156132,7 @@ uDg uDg qpK nxc -aNj +gma xTU nTM pjw @@ -174586,7 +156150,7 @@ uuF qbW qbW qbW -pBq +uif aaK fwc vXe @@ -174793,9 +156357,9 @@ wdo aAF rHI gdj -kzp -wGr -nBZ +sum +pvr +sXy myC vFi vFi @@ -174819,7 +156383,7 @@ xCP trQ qAW hur -ssp +uQp aGF grq uDg @@ -174843,7 +156407,7 @@ uuF mMu lAP imH -pBq +uif kMG hfR bpC @@ -174874,26 +156438,26 @@ sdU lvT iUK ylX -cSV +kTo ujB -cSV -cSV -cSV -tgB -prw -prw -prw -prw +kTo +kTo +kTo +qnR +qnR +qnR +qnR +qnR uvF -mVn -cSV +qnR +kTo ujB qnR -xCJ +hHI wEZ fik lVP -nYT +hxd iLS wCR owf @@ -174902,7 +156466,7 @@ cHc gcY spI pxT -jSf +rCC lzd amk arJ @@ -175052,7 +156616,7 @@ rqR sCR izc bAw -qEW +wnk hGf hGf hGf @@ -175066,7 +156630,7 @@ ucP viG hcf ffy -hwA +oeN bbE oeN vxD @@ -175100,10 +156664,10 @@ uuF hXi hXi hXi -pBq +uif kMG hfR -gQA +vXe sSv kMG gZm @@ -175154,7 +156718,7 @@ iji syJ ioW owf -wVS +nzi jzj fmM lBB @@ -175174,9 +156738,9 @@ bYN aJv lzd hIe -qEm uOU -sLS +uOU +uOU bgi dmu jrA @@ -175296,20 +156860,20 @@ qYP fyD csH bZh -tvG +krt rhk csH whU cxv -sRv -uxC +vGu +vGu vGu dMX yiP lBJ xuN -wGr -oci +pvr +sXy nqK lqx unA @@ -175333,7 +156897,7 @@ xJP trQ jst rOx -ssp +uQp scO tle hEI @@ -175379,7 +156943,7 @@ nQA hCi bRE fqx -bln +ego qEQ xwd nzB @@ -175431,9 +156995,9 @@ oxs hvn lzd xkR -xJt ujF -sSN +ujF +ujF lel eeo jrA @@ -175553,22 +157117,22 @@ mfw umJ csH kgk -tvG +krt mMA csH eec rhV -rak -khZ +nLC +nLC nLC bCL wIN lBJ ljh -qYw +pvr qmI lRZ -jFe +vqv pvj hGf ssK @@ -175636,7 +157200,7 @@ oOJ pUX bRE uqr -cBF +hfI ukE wzl nzB @@ -175689,7 +157253,7 @@ oxs lzd gDp gBb -sEE +tQJ tQJ bFX ulF @@ -175810,19 +157374,19 @@ uzX voW csH smA -tvG +krt jQR csH lYE veg cdY xnj -aME +bCL tvI ddx lBJ fuZ -wGr +pvr sXy nqK eQu @@ -175846,7 +157410,7 @@ trQ trQ trQ qAE -mjz +cqn bFO raF uMX @@ -175917,7 +157481,7 @@ pwR eIm uWx uqE -lpg +hHI cZx nEN nyP @@ -175939,7 +157503,7 @@ pzm ewO iGA xYB -bxc +ttV mFy pCQ nkV @@ -176174,22 +157738,22 @@ ujn nvv lzy uqE -sMU +kTo hHI osZ jGw olg dgq gAW -dmf +iGe oQI vKL yaj -dmf +iGe iGe oQI eeX -jYD +bcy bcy fGR hdE @@ -176330,13 +157894,13 @@ jIn nKm gdj thV -lAD +xnj pHS gdj ctK jDU uxA -wGr +pvr msQ hlp vxA @@ -176360,24 +157924,24 @@ ryK ryK ryK vnK -jTC +lUG tyX fDD oUd yeH lcJ -pDN -uCx -uCx -uCx -uCx +tyX +tyX +tyX +tyX +tyX kpz tyX dLI iPj -efZ -efZ -efZ +vce +vce +vce wLS gpM gpM @@ -176385,7 +157949,7 @@ gpM gpM gpM gpM -rWa +gpM gpM fMq ggl @@ -176420,9 +157984,9 @@ baQ rMr wLD sDx -ulh +fiN htq -kHW +kXm sDx twp rMr @@ -176450,7 +158014,7 @@ gWC axH tmB pzm -tWX +dXb dXb mFy fVb @@ -176654,13 +158218,13 @@ lpi gpM iuq rpn -liS +rpn fPo -aEU +elO +rpn rpn rpn rpn -ooA rpn tUS elO @@ -176668,7 +158232,7 @@ iWu tzE ejt tzE -vaZ +tzE tzE tyE uXF @@ -176710,7 +158274,7 @@ oJg sVS kgO uTy -lXD +fVb iEm xCQ xCQ @@ -176847,7 +158411,7 @@ nkY ueq vwE rTc -kwm +sKo xDx vTC bhN @@ -176941,8 +158505,8 @@ sDx eeY rMr eBZ -wra -wra +tWE +tWE uzo czR eIS @@ -177187,13 +158751,13 @@ owZ lTo puc wHI -upJ +pBp rMr xNh sDx -mAv +flR lmH -ina +kXl sDx isJ rMr @@ -177202,10 +158766,10 @@ vMj pBp uzo aFW -igG nvM nvM -cBH +nvM +wKQ wKQ mMT npj @@ -177364,7 +158928,7 @@ hVN aGj bmV blx -oci +sum nqK eXN mHF @@ -177459,7 +159023,7 @@ iCD qAu tBw gFX -mcd +nvM sLm sWO nqT @@ -177615,7 +159179,7 @@ jnd bap hVo bap -uVC +cJI tkN oSr gBr @@ -177686,7 +159250,7 @@ bJS vSB dkN hNX -gGq +fAB nZe hVH sCX @@ -177740,9 +159304,9 @@ rua nCP eTU jxk -mjr +fwE ngI -mjr +fwE xZO vMM fBH @@ -177752,7 +159316,7 @@ jbe nxi tBq kQu -qax +hlw mdF qax pTu @@ -177878,7 +159442,7 @@ hVN eFi pzl blx -sXy +sum nqK ceV oPK @@ -178134,7 +159698,7 @@ gkm gkm abJ fcw -fuv +blx coR nqK hGf @@ -178215,7 +159779,7 @@ kDx xzv ooN wHI -bmd +qAu wHI fZI ojJ @@ -178391,12 +159955,12 @@ vLE jwR ayM fcw -jkJ -oci +eOS +tbW svX ygl tbW -hqz +eeQ rsG wkP xfg @@ -178515,7 +160079,7 @@ cpf xCQ hqC xZR -fcs +fwE jMm vwi pTG @@ -178648,7 +160212,7 @@ iem faI vgD qRI -czJ +jVv jVv jVv jVv @@ -178716,7 +160280,7 @@ sKc vDA vDA vDA -nzz +vDA vDA oBI sWF @@ -178724,7 +160288,7 @@ vDA bNm wyU fYJ -oNA +fpD fpD tGu lKx @@ -178739,7 +160303,7 @@ dvB dvB xJH liN -rvG +eBZ cqk buG kYe @@ -178905,10 +160469,10 @@ krl jwR ayM cIf -esH -esH -esH -esH +sum +sum +sum +sum cFp iAj rsG @@ -178925,13 +160489,13 @@ rWQ bdf rWQ qqb -gQM +tyX ryK ryK ryK kQp -jTC -eGt +lUG +tyX nwr cnU dmC @@ -179020,8 +160584,8 @@ qvM sBt qkW sBt -xzi -wJY +dXb +dXb mFy vzC xZH @@ -179161,12 +160725,12 @@ xTz wne gkm eIM -nzt +cIf bqq xKd uGd rpA -cCP +cFp cEo hGf vdZ @@ -179253,7 +160817,7 @@ xJH fZI wHI wHI -vBj +qmP qhe vKJ eWR @@ -179281,8 +160845,8 @@ iwq jVp jVp ttV -bTA -bTA +xQu +xQu xQu bcV oZK @@ -179418,12 +160982,12 @@ aQr bMr kXe cwS -ucp +cIf oIz mMN sum dsF -cCP +cFp jUO wrN nha @@ -179497,10 +161061,10 @@ fvE dGH uwm kyD -fIt +pEc uGo cHT -muA +joN pZb wHI wHI @@ -179537,7 +161101,7 @@ sBt hPQ cDQ mFy -sOe +xQu mFy jdg aMJ @@ -179682,9 +161246,9 @@ ykW ykW rvL pbC -uja +sum dMw -vOi +ykG ucm rfX lRG @@ -179987,10 +161551,10 @@ ohH nge qIv dSV -aWA -hET +llz +lky qcm -hET +lky nKI jsX jRe @@ -180195,9 +161759,9 @@ ovE esl sRd ykW -eSV +qak cVu -eSV +qak iEG xiJ vPo @@ -180242,16 +161806,16 @@ qxg xAz bQF mzh -qIv +olk dSV nIX -nIX +nKI fsa dTP vHe jKM lme -wGD +wGE rpj wEf fRV @@ -180445,20 +162009,20 @@ aLr nbW tZD qpZ -nKY +vye mVF fWt ksn pSY ljt byV -dlX -knD +qak +qak qak wvo qak chT -eco +qak gQp qub kgl @@ -180496,7 +162060,7 @@ gpA gpA tIy dos -dTX +xAz jED nge sVk @@ -180568,7 +162132,7 @@ sqT qKA fhD gpz -iuY +ikn eWt eWt eWt @@ -180709,9 +162273,9 @@ mDz esl mUr ykW -aOm +wvo cVu -eSV +qak rcC vww vPo @@ -180765,7 +162329,7 @@ ccK jeT gMj oli -wGD +wGE kYW utK pgb @@ -180819,8 +162383,8 @@ boH aPt mro gpz -mRG -ira +pIn +pIn pIn vDR uoF @@ -181039,7 +162603,7 @@ eKB eKB uwm jvZ -xnl +pEc cwD iWN uAV @@ -181082,7 +162646,7 @@ nWi dKQ ana gpz -uvr +ikn uJz cgE tkn @@ -181222,9 +162786,9 @@ iLK ykW ykW ykW -hCC +sum vqv -pUY +sum ien pJB rXk @@ -181235,7 +162799,7 @@ hGf sfn tHq mrV -lTJ +ocl dVy mHE uZA @@ -181477,11 +163041,11 @@ bIY fbI iLK cPw -oZO -hZQ -xev -nDT -uja +rvL +sum +vqv +pbC +sum wyf abl hGf @@ -181521,7 +163085,7 @@ icG jdO gpX oaG -qQr +bZN cTZ wEw nGi @@ -181566,7 +163130,7 @@ nIZ nIZ iWN wHI -bmd +qAu tHY wst sBt @@ -181735,8 +163299,8 @@ tif iLK bUG oaq -aWq -wMw +wvo +qak qEW hGf hGf @@ -181758,7 +163322,7 @@ yad fUV aIS ofT -lPC +kUO geY tHQ mHE @@ -181992,7 +163556,7 @@ koJ iLK ukv sKo -gso +ncn aea ncn hco @@ -182002,7 +163566,7 @@ oAv whX xny iYx -xGI +udI udI cAL dVy @@ -182013,10 +163577,10 @@ gzI mDj sND glD -vAo +mqN mqN wHi -tem +qPh uZe pmr alt @@ -182040,7 +163604,7 @@ cTZ nGY nGi prV -hJa +jAZ ftj eSN aUO @@ -182069,15 +163633,15 @@ rtj fsk wkB iJV -gqC -gqC -gqC -gqC htV -mcP +htV +htV +htV +htV +jXA jXA sov -iRM +fsk qXp wHI ybS @@ -182102,7 +163666,7 @@ sCF sZd bXY xkY -jqu +mro gpz nRx jgd @@ -182546,7 +164110,7 @@ lkJ wZQ lJa kMu -brE +blB mBt gpA gpA @@ -182580,11 +164144,11 @@ vqa vqa cVz oRP -qNL -qNL +gnP +gnP qcC -qNL -qNL +gnP +gnP oRP cVz cVz @@ -182753,8 +164317,8 @@ jfR rVN lBj mHx -lAQ -gMv +mHx +mHx cLP juD mYn @@ -182875,11 +164439,11 @@ wSf vLv fkL qmT -sYR +onq isg jXB qeW -sxn +onq hZm cnV sQQ @@ -183022,7 +164586,7 @@ tMc tax aoI chV -fQh +kas qwc ltK fBz @@ -183032,7 +164596,7 @@ qzO bxx bzC lnJ -spL +xhw xhw rpJ aKh @@ -183043,7 +164607,7 @@ hQP dVy jRi jRl -slF +lZC bma afi dVy @@ -183131,7 +164695,7 @@ sdV akL vLv fZH -avO +puT mTU cuE vhR @@ -183140,8 +164704,8 @@ wlM sQQ cnV sQQ -qXu -fsu +fnb +fnb fnb xgs lmd @@ -183389,18 +164953,18 @@ wSf oCM gzG hYS -nMI -auh +onq +dbE sQQ dbE -maD +onq sQQ cnV sQQ -bJE -rft -hqe -hqe +fnb +vFr +sQQ +sQQ eeE vFr lmd @@ -183546,10 +165110,10 @@ jte lnJ jte jte -hxv +bJg mrV hxZ -gTN +aKh dVy dVy tdK @@ -183569,12 +165133,12 @@ whW xWt mjy cdM -uxH -uxH -uxH +uly +uly +uly cdM -uxH -sqD +uly +uly uoP tRc jPQ @@ -183644,8 +165208,8 @@ urM dLw wSf gkT -iEh -bia +puX +nBu qQi qQi qQi @@ -183653,13 +165217,13 @@ qQi qQi nBu xcP -qeo +puT fnb nyl xyi epH fLS -hsn +sQQ lmd sQQ sQQ @@ -183790,7 +165354,7 @@ uVj lmI lmI lmI -oPg +mHx mHx ojW udR @@ -183878,8 +165442,8 @@ kyD pEc lzF wHI -bmd -bmd +qAu +qAu tHY xJH ssj @@ -183912,11 +165476,11 @@ biL cnV sjQ qhu -kgs +qeJ sQQ wpg pET -ptR +vhR hAJ qeJ sQQ @@ -184082,7 +165646,7 @@ ikD lqT aCf hMP -eAP +hAd nYM qIW ooc @@ -184116,7 +165680,7 @@ czQ rXx xOy lPf -eWB +usq eBf pnN xPn @@ -184161,13 +165725,13 @@ gkT lez teA jiZ -gay -gay -gay -gay -gay +puX +puX +puX +puX +puX bPS -gay +puX cPg tKQ oki @@ -184283,9 +165847,9 @@ irb caC eZn xas -aoF -aoF -aoF +sSP +sSI +sSP tRe eZn caC @@ -184339,7 +165903,7 @@ pdU pdU pdU pdU -eAP +hAd nYM qIW ooc @@ -184425,12 +165989,12 @@ sQQ sQQ kfT sQQ -iKb -gCa -vpy -vpy -vpy -efp +cPg +vFr +sQQ +sQQ +sQQ +vFr lmd sQQ sQQ @@ -184541,8 +166105,8 @@ caC iRq gRe fgj -aoF -aoF +sSP +sSI uOB fdU caC @@ -184561,8 +166125,8 @@ uVj lmI lmI dUF -trK -aPA +mHx +mHx pir jxr tNa @@ -184596,7 +166160,7 @@ dcL tVI tVI pdU -eAP +hAd nYM qIW vLe @@ -184682,8 +166246,8 @@ sQQ sQQ hYG sQQ -iYo -kVY +cPg +cPg cPg lfK lmd @@ -184796,11 +166360,11 @@ fZI gOy caC yeN -aoF +sSI dtJ pMb txW -sSP +sSI sSP qvK bCQ @@ -184853,7 +166417,7 @@ mrV ugS tVI pdU -eAP +hAd nWm pdU pdU @@ -184934,7 +166498,7 @@ veU biL ygq eof -bpa +wlM sQQ sQQ kfT @@ -185067,7 +166631,7 @@ wDK wDK hZE dwO -wxi +sUe pRI fLW fLW @@ -185399,7 +166963,7 @@ psw ipg sAs aIY -rSr +oTl kPg mgM vhe @@ -185570,8 +167134,8 @@ xEM iIy ruF jLG -qSs -bHY +aUg +rFN ojS hZE aiu @@ -185626,7 +167190,7 @@ rGn pdU gEJ nYM -mqb +vpS vTA hDA adt @@ -185655,11 +167219,11 @@ pkD llc oTl dod -nSx -rSr +aIY +oTl bLW -bOm -bOm +kPg +kPg grb sdi xdQ @@ -185674,7 +167238,7 @@ phX jqg seM lrj -cYt +pEc sNz wHI wra @@ -185883,7 +167447,7 @@ pdU pdU nyj dcY -mjY +hZB bCg pqP gYo @@ -185919,7 +167483,7 @@ qpy owq ilS gsx -mSs +iBc orx rWM osS @@ -186140,13 +167704,13 @@ ekr pdU mFT nYM -mqb +vpS mKz hWs hDA kNV sWA -tRO +dyT fZg etc mTp @@ -186154,7 +167718,7 @@ dUA eFn iCf azF -uwb +xQq xQq qsD mPa @@ -186170,7 +167734,7 @@ nCZ nCZ nCZ cUZ -mUz +rNv nsv htF jDE @@ -186337,7 +167901,7 @@ fZI iDa caC fZT -pgy +wnF xqy hwT xUM @@ -186357,7 +167921,7 @@ rtH hCF lIC jYJ -cqO +kIH lkS qgb sof @@ -186393,9 +167957,9 @@ dek rtr dUW uKG -qth +mFT kws -xcy +mFT vtM sWA sWA @@ -186407,7 +167971,7 @@ aAf jUp uUA uMY -wpV +fAl eWl dIK eFn @@ -186427,10 +167991,10 @@ ipg ipg mXK gsY -rSr +oTl jWJ -pmt -oKc +sdF +mgL ktY aOT qLQ @@ -186594,12 +168158,12 @@ fZI ksM caC ucK -lgL +wnF wnF wVn hss aef -oCy +nUH jcg hZE luD @@ -186623,16 +168187,16 @@ lSv lSv sqS fsn -sHP -dEI -cVh -dEI +acS +acS +eWi +acS hfm -dEI -cVh -dEI -dEI -dEI +acS +eWi +acS +acS +acS eWi pwW blR @@ -186652,7 +168216,7 @@ dij gbC kcZ pdU -gtr +hAd wuM mGW onG @@ -186687,7 +168251,7 @@ fkA asX ilS xaN -aaO +mgL gXZ auv faG @@ -186880,7 +168444,7 @@ grD dBq jbr eid -chZ +acS jRc ixe lrG @@ -186892,7 +168456,7 @@ jxo qUF ixe qvR -lWL +rba wru eOY rGF @@ -186944,7 +168508,7 @@ oTl uSr kGC naT -oKc +mgL ktY ktY ktY @@ -187127,17 +168691,17 @@ yiy auR auR auR -bSA +vbd jBC auR -jvJ vbd -mFc +vbd +auR auR jBC rbq wyz -omR +acS vKl bAO bAO @@ -187367,15 +168931,15 @@ eAw fhV vKf tKm -eSj +mJa mJa dda fOj -kVi -kVi +kmG +kmG qgZ -kVi -kVi +kmG +kmG kmG fdu wdA @@ -187388,13 +168952,13 @@ iQi jJA kVN iQi -lXT +sof fdm kVN jJA tHo jZq -nrw +eWi hSG oAM dbb @@ -187406,13 +168970,13 @@ jxo qyr oAM aFw -lWL +rba jHd rlA imR cLX guu -ieJ +baE nuu xrl lNR @@ -187473,7 +169037,7 @@ rGN djJ leG kyD -rkO +pEc twc wHI wHI @@ -187651,16 +169215,16 @@ lSv lSv noo dyM -vGF -piA -wFi -piA -piA -piA -wFi -piA +eWi +eWi +eWi +eWi +eWi +eWi +eWi +eWi sKb -piA +eWi acS rba snh @@ -187685,7 +169249,7 @@ vpS dsK jUp jUp -hcl +jUp jUp mou jUp @@ -187881,7 +169445,7 @@ eAw tKm tKm tKm -gpy +mJa lWC raG nTK @@ -187926,7 +169490,7 @@ qgy hRu dVy fhg -tIQ +baE dzs rtr ddd @@ -188138,7 +169702,7 @@ jnr mZZ fnG lWC -gpy +mJa lWC fKw nOf @@ -188151,7 +169715,7 @@ pRs bns sUs gWf -xUO +hYo rtH nes arP @@ -188227,7 +169791,7 @@ dXR dXR dXR tol -jbW +xAg mUi vIs ktY @@ -188484,12 +170048,12 @@ gfF gfF gfF smi -jbW +xAg eQc jPu -fmx -jOt -jOt +mgL +mgL +mgL mgL oFI ouO @@ -188514,7 +170078,7 @@ xwK vaK iij cWd -wJI +xKf xKf nSl uFN @@ -188677,7 +170241,7 @@ iUB qpd vaM nes -rHc +yht qBT cLX cLX @@ -188762,7 +170326,7 @@ pEc aUW rSz xwK -rHt +cPf fkJ fbV xRH @@ -188772,7 +170336,7 @@ mPQ viX fXr iPX -hqD +xKf nDV wbe aCz @@ -188934,7 +170498,7 @@ uAI anR qTD nes -rHc +yht qBT ehw rFR @@ -189194,7 +170758,7 @@ vwF nRc yht yht -xjr +rsO kmj cgQ wIs @@ -189278,13 +170842,13 @@ djF jXG qGm yfF -wFr +fZv vVA -wFr +fZv aUX -wFr +fZv vVA -wFr +fZv yfF fZv qEY @@ -189423,7 +170987,7 @@ lSv aoU wuE ucn -hjD +nBh dzS dzS dzS @@ -189459,8 +171023,8 @@ rsO xHD ruG ibr -plq -plq +uNt +uNt uNt agB bhW @@ -189692,12 +171256,12 @@ wUP sgi sgi jGp -fcH +pWt ita qCI gzE -jRd -jRd +fYU +fYU fYU qkw xxz @@ -190050,7 +171614,7 @@ ygI xHy aqq rJo -uIj +mdA hcw tHG fkv @@ -190251,7 +171815,7 @@ qte qte lNh jZl -pal +esx lQN esx dJW @@ -190564,7 +172128,7 @@ uSK ilJ aqq rGa -oGI +kRF xqK bgw wNF @@ -191585,8 +173149,8 @@ soz qsY moZ qsY -pDm -dyb +ifS +mWW qsY soz rMe @@ -192613,7 +174177,7 @@ soz qsY moZ qsY -pDm +ifS qsY qsY fZI @@ -228837,15 +210401,15 @@ ulx ulx ulx nvJ -dhz +wgK nvJ -dhz +wgK nvJ ulx ulx ulx nvJ -dhz +wgK ott gqr ott @@ -229094,15 +210658,15 @@ ulx ulx ulx nvJ -dhz +wgK nvJ -dhz +wgK nvJ -dhz -dhz -dhz +wgK +wgK +wgK nvJ -dhz +wgK ott gqr ott @@ -229331,13 +210895,13 @@ uCa uCa jPU nvJ -vKW -krj -krj -krj -krj -krj -krj +soz +soz +soz +soz +soz +soz +soz xbi vLZ gwS @@ -229351,15 +210915,15 @@ nvJ nvJ nvJ nvJ -dhz +wgK nvJ -dhz +wgK nvJ -dhz -dhz -dhz +wgK +wgK +wgK nvJ -dhz +wgK ott gqr ott @@ -229587,12 +211151,12 @@ wjY bTs uCa krj -krj -aSB -shy +soz +soz +gLc +gLc gLc gLc -fvY xbi xbi nKd @@ -229601,35 +211165,35 @@ cov wDY lJw xbi -krj -krj -krj -krj -krj -krj -fEc soz -krj soz -krj -krj -krj -krj -krj +soz +soz +soz +soz +iZT +soz +soz +soz +soz +soz +soz +soz +soz soz pFg jLT pFg -krj -krj -krj -krj -krj -krj +soz +soz +soz +soz +soz +soz uAj dzW akU -ewi +uMO jvz mzF qyy @@ -229847,7 +211411,7 @@ gLc gLc gLc gLc -qSH +oNc gLc xbi xbi @@ -230064,7 +211628,7 @@ nvJ nvJ soz qsv -oNc +kRw hRi gLc gLc @@ -230118,7 +211682,8 @@ nwt nwt nwt gLc -qSH +oNc +gLc gLc gLc gLc @@ -230126,9 +211691,8 @@ gLc gLc gLc gLc -fvY soz -shy +gLc gLc gLc ott @@ -230143,7 +211707,7 @@ gLc uAj lfw vsm -ewi +uMO rbn nGh wpF @@ -230345,7 +211909,7 @@ brn aIe aIe aIe -pVj +uEh uEh cop vlO @@ -230381,20 +211945,20 @@ iVF iVF iVF iVF -qSH +oNc gLc gLc iZT gLc gLc -qSH +oNc ott oRT ott gLc gLc gLc -qSH +oNc gLc iVF dMs @@ -230879,7 +212443,7 @@ xla wTS oRn ilW -amU +asH kOo bVN jGA @@ -231314,12 +212878,12 @@ esE cjG dQc ulI -eiR -kNM +hrJ +jhw eqw tCt tCt -pKm +jhw aNm npP jdJ @@ -231369,8 +212933,8 @@ aNm aNm wxY fhc -bEH -bEH +iHI +iHI iHI slU fQk @@ -231576,10 +213140,10 @@ aNm aNm aNm gKy -lpV +hrJ fGA -kNM -bgo +jhw +hrJ aNm wMx ulI @@ -231628,8 +213192,8 @@ qhW qhW cXy dAB -txF -erE +aSf +aSf bOY vNd khN @@ -231871,7 +213435,7 @@ lEO lxt hZy oIe -gyh +nMo gyh jyY mqj @@ -231942,7 +213506,7 @@ vka keY tcq vsE -mKE +tfJ lHV lbA iLH @@ -232080,12 +213644,12 @@ aNm nFk uwn wMx -kxv -kNM -kNM -kNM -kNM -lHk +jhw +jhw +jhw +jhw +jhw +hrJ eYE fEC nsI @@ -232131,7 +213695,7 @@ aPq eje uFD fyr -qly +gNf ddk jLC ePn @@ -232334,7 +213898,7 @@ kwk fXE qmx aNm -kgJ +jQY jQY jQY czF @@ -232376,7 +213940,7 @@ cdB cdB xQw jVI -vaJ +jhw kTV kBa ktQ @@ -232388,7 +213952,7 @@ kmq eCV qtm cbZ -qly +mqj nIB jLC cyX @@ -232645,7 +214209,7 @@ bTH cbZ bTH elV -isu +gNf ujq jLC jpQ @@ -232656,7 +214220,7 @@ kDM fCo dmH qjs -xcY +qjs qjs xhc ngm @@ -232718,9 +214282,9 @@ uDC tpk wln sXD -mVf +gVx jmn -eRl +gVx rfn tcq tpk @@ -232968,16 +214532,16 @@ piL cct tpk lbA -mVf -fQS +gVx +gVx gAo -kZL -wRb -wRb +wnU +gVx +gVx iuD -vAf +gVx xYP -ugm +gVx hsh aXn lbA @@ -233121,9 +214685,9 @@ okY cMY soz xsa -joG -kNM -nip +jhw +jhw +jQY aNm aNm ybT @@ -233237,7 +214801,7 @@ aDV tGh tGh wnU -eRl +gVx ylY iLH iLH @@ -233361,7 +214925,7 @@ tQj btu btu exy -lmC +fqs wlt rKN soz @@ -233479,11 +215043,11 @@ rrt oTg avb piL -xqY +iol lhd nCX epx -wRb +gVx iOR pyb bJr @@ -233658,7 +215222,7 @@ dEf jQY fnc dEf -dcA +hrJ eul cXM kTV @@ -233671,7 +215235,7 @@ jhg mzj kMY fDW -kuS +htK htK wds gTo @@ -233692,15 +215256,15 @@ hgG xoC qhg xoC -gye +bcK rCV hmQ rCV -gye +bcK rCV cKb pMQ -gye +bcK rCV fjj rCV @@ -233905,8 +215469,8 @@ jYy jYy aNm xZB -kgJ -fhY +jQY +jQY qGL qGL qGL @@ -233917,7 +215481,7 @@ lXI mLk mLk cgN -rIR +cXM cmY kTV xfK @@ -234162,7 +215726,7 @@ jYy rxY aNm wMx -swE +jQY qGL qGL nSP @@ -234234,11 +215798,11 @@ psd vfk ijl ltt -bft +bdx pEL mKQ myB -kiI +bdx iHv glr uCf @@ -234381,11 +215945,11 @@ rTF rTF rTF rTF -oHn -pOE +qmx +qmx aNv -pOE -wxm +qmx +kwk rKN xCU tLM @@ -234413,7 +215977,7 @@ aNm wMx eej aNm -smU +vmv vmv vmv vmv @@ -234491,7 +216055,7 @@ bxy pPs umn qzj -fvn +vly jYX bda jYX @@ -234499,14 +216063,14 @@ bTz aBW hJR pyG -wxr +tBF cvh cvh cvh dqd cvh -btk -oJK +tfJ +tfJ nsV nQG mxp @@ -234522,7 +216086,7 @@ eXj hSm soH aDV -bMw +caB lbA lbA tcq @@ -234670,7 +216234,7 @@ jQY lCo jQY jQY -fhY +jQY aNm aNm aNm @@ -234680,9 +216244,9 @@ oIw qGL vMm jjg -mSA gIN -kfq +gIN +qrU tdy wTW qrU @@ -234750,8 +216314,8 @@ avF hJR qsz wks -kkh -baB +ixy +bTz pxK hJR hJR @@ -234763,7 +216327,7 @@ pzS pzS pzS pzS -jKJ +tfJ xgI xgI xgI @@ -235007,7 +216571,7 @@ ttN avF avF juT -vAe +rxR ecF hJR hJR @@ -235020,7 +216584,7 @@ tCf bdS fLw pzS -jKJ +tfJ mSG emg uBS @@ -235029,7 +216593,7 @@ mSG qho aDV anF -lfB +awA awA lec bqc @@ -235190,9 +216754,9 @@ ybT ybT eYE azj -eGm +dEf hXS -uiJ +kCe hHt jrA jrA @@ -235264,7 +216828,7 @@ mEi ufH dHd dur -sIr +rxR sso jOk hJR @@ -235283,10 +216847,10 @@ lQt kHP gOx xgI -hVn +qho jLp -jSL -nIP +awA +awA wXj aDV aDV @@ -235476,7 +217040,7 @@ hiO lPl jdm kfA -pdl +gQW aoo xEX tFc @@ -235521,14 +217085,14 @@ nQI dLW dHd dur -sIr +rxR sso hQd hJR uXm pzS qsI -pDo +fJL sNc tXD pzS @@ -235778,7 +217342,7 @@ hAB aDb giB wpy -wxh +xAl xPx tbm hJR @@ -235977,7 +217541,7 @@ aAw jop iGt yaI -rMC +lvS wsu pNb eJf @@ -236035,7 +217599,7 @@ jnN avF avF sBX -uRy +ixy qOt hJR hJR @@ -236067,8 +217631,8 @@ icQ bDx kZB gCk -jJT -lKi +lRV +lRV lRV kgo tcq @@ -236234,7 +217798,7 @@ aUI mNM ePv cEl -ohJ +lvS hHa iVh hEi @@ -236292,7 +217856,7 @@ avF avF dBO dlY -oYH +rxR apt jsl qci @@ -236729,10 +218293,10 @@ scc dMb rZJ iUY -xsT +whz ciB ciB -uxN +whz whz uWI knB @@ -236797,14 +218361,14 @@ dBj bLD ltt ixy -eES -jMq -jMq -cLq +ixy +rxR +rxR +rxR nTe ixy tMF -kJK +ixy cbl wcO leA @@ -236843,7 +218407,7 @@ bIQ uKq cJw caB -ojC +naj grJ cvh cvh @@ -237061,7 +218625,7 @@ bac pik bac hvK -taG +wks jYX xrL jYX @@ -237230,9 +218794,9 @@ oIL ulI ulI ulI -dXY -aWl -aWl +gsd +gsd +gsd pov isQ emO @@ -237267,8 +218831,8 @@ qUH ide quA jnk -aoM -mif +adQ +scr jmT eWG sZp @@ -237320,7 +218884,7 @@ ujk uor rFA vly -jkF +rxR kMK khx dBJ @@ -237511,7 +219075,7 @@ rZJ cpE qFa edv -tIf +dUu edv qFa cpE @@ -237577,7 +219141,7 @@ aHi uor uor xyS -xbf +rxR tHR dBJ dBJ @@ -237593,7 +219157,7 @@ iAG cYM tby omn -tby +omn fpn pyb sXD @@ -237744,7 +219308,7 @@ bER oDA kNf qYH -swE +jQY hni xsa gLc @@ -237800,7 +219364,7 @@ cRb mQo mqh aOv -vwJ +hhF xWy vhM gpu @@ -237834,7 +219398,7 @@ xej djt kOu dur -sIr +rxR tHR dBJ jFE @@ -238001,7 +219565,7 @@ fhW wJu kNf pFJ -swE +jQY duI xsa gLc @@ -238091,7 +219655,7 @@ plS evb kOu dur -sIr +rxR tHR dBJ tJS @@ -238125,7 +219689,7 @@ icQ hnZ euV icQ -xWR +moj wqf kCj euq @@ -238258,7 +219822,7 @@ fFR eLv kNf dMn -swE +jQY eFI xsa gLc @@ -238275,15 +219839,15 @@ pti rRh gFM bAL -wsB -moC +agL +qVs cYv -kuj -juz -juz -juz -gJm -juz +rpk +bnq +bnq +bnq +bnq +bnq pGt hSQ fKQ @@ -238343,12 +219907,12 @@ alE reb nTU mve -vgU +rVU fBL jRF kOu dur -sIr +rxR tHR dBJ wxw @@ -238360,7 +219924,7 @@ adx bKc pzS mGb -kIX +nBN tDH nfB xSa @@ -238515,7 +220079,7 @@ iNr cvj pyO jwi -swE +jQY ulI xQw xQw @@ -238585,7 +220149,7 @@ tsQ ijc tRz dIR -wLG +sYY qFQ sYY oDt @@ -238600,12 +220164,12 @@ tUp gme uor tpV -vgU +rVU mve uor uor ibl -rTO +ixy eoV dBJ dBJ @@ -238618,7 +220182,7 @@ bmT pzS lLq qyu -eWS +tDH adY nNZ dBm @@ -238649,7 +220213,7 @@ hOk hOk oPy dfW -mzm +cvh tpk xaz owA @@ -238772,7 +220336,7 @@ cPH pyO kNf aNm -swE +jQY bZe ulI xQw @@ -238862,7 +220426,7 @@ aqb uor jHu dlY -cLq +rxR cig wCi dBJ @@ -239025,11 +220589,11 @@ xND sdC mnI mnI -dyl +tBi tBi tBi kkf -fhY +jQY wMx ulI xQw @@ -239068,7 +220632,7 @@ lsn cGu pRa kAU -vAw +dJx mTw sZp ycn @@ -239109,7 +220673,7 @@ quF hOA olF mgJ -qmO +odu odu vLx gCg @@ -239163,7 +220727,7 @@ syY ydY hoQ tpk -mzm +cvh tpk dZv akA @@ -239299,7 +220863,7 @@ xRc dpw ukJ rWk -mFf +nWe tYJ fil gZk @@ -239312,7 +220876,7 @@ gLc gLc asd ydi -nOc +nnS jYp poi ide @@ -239383,10 +220947,10 @@ lgw sXH cby sXH -kFC sXH sXH -ueN +sXH +sXH sXH sXH aKI @@ -239424,15 +220988,15 @@ iLw cvh ldt lYg -ciu -ciu -ciu jaI -rQA -rQA -rQA -rQA -rQA +jaI +jaI +jaI +cSI +cSI +cSI +cSI +cSI cSI soz soz @@ -239586,7 +221150,7 @@ gwW qsP qsP neN -aYH +hcL mIq fAY vIA @@ -239628,7 +221192,7 @@ wVc mpe gCg hbU -mdU +eJw hbU ahz tqu @@ -239643,7 +221207,7 @@ eAS lmj dno fRM -pOF +aKI kMK eAS hJF @@ -239684,13 +221248,13 @@ iVF gLc gLc gLc -dko +jaI ojX ojX ojX gLc gLc -dUd +cSI soz soz soz @@ -239827,18 +221391,18 @@ soz gRC mdb qVs -iJm -rDs -juz -juz -juz -juz -juz +jPP +rpk +bnq +bnq +bnq +bnq +bnq dip -rDs -kuj -juz -juz +rpk +rpk +bnq +bnq rpk bnq cYv @@ -239846,11 +221410,11 @@ hdx mcT cJU cJU -odn -dpG +cJU +tPn uGf -dpG -aKY +tPn +tPn gDu fKf arc @@ -239885,7 +221449,7 @@ sdw iaT uor jcn -ovN +eJw lxF uor teL @@ -239900,7 +221464,7 @@ hJR hJR hJR uIq -pOF +aKI fQu hJR roU @@ -239922,10 +221486,10 @@ lqt miB sWX thv -cQz -cQz +bDn +bDn oKA -cQz +bDn bDn xoO qgS @@ -239941,13 +221505,13 @@ gLc gLc gLc gLc -dko +jaI gLc gLc gLc gLc gLc -dUd +cSI gLc soz soz @@ -240157,7 +221721,7 @@ dgA smw hJR nnj -pOF +aKI fyK xLf byn @@ -240183,7 +221747,7 @@ eRv tMs iHQ ult -leW +bDn vyI dSe sHy @@ -240198,13 +221762,13 @@ gLc gLc gLc gLc -dko +jaI gLc gLc gLc opP gLc -dUd +cSI gLc soz soz @@ -240325,11 +221889,11 @@ soz xRc uRR isR -fTg -fTg +vJx +vJx aUF -qFP -rtW +whz +qzm osz xXu xRc @@ -240414,7 +221978,7 @@ uJL nLy yaJ uIq -pOF +aKI etB uvi jYX @@ -240436,7 +222000,7 @@ lqt uxR wvi wHw -vkA +bSd bSd fDT mBc @@ -240455,13 +222019,13 @@ gLc gLc gLc gLc -dko +jaI gLc opP gLc opP gLc -dUd +cSI gLc soz soz @@ -240562,21 +222126,21 @@ ulx ulx ulx ulx -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK soz gLc gLc gLc fbb loJ -hEZ -hEZ -hEZ +qFa +qFa +qFa loJ -hEZ +qFa loJ soz xRc @@ -240617,7 +222181,7 @@ xai hCo sIz xFd -wEr +cJU aWU mDA cfl @@ -240651,7 +222215,7 @@ nrx nrx eDn viv -bby +kky ciQ mjB sXt @@ -240671,7 +222235,7 @@ uJL xwD hJR ahY -jtX +aKI fNT eOQ gVD @@ -240694,10 +222258,10 @@ kpH cWg iAk rYe -udS +bSd fDT kru -leW +bDn udG clZ rkq @@ -240712,13 +222276,13 @@ gLc gLc gLc gLc -dko +jaI gLc opP gLc opP gLc -dUd +cSI gLc soz soz @@ -240819,10 +222383,10 @@ ulx ulx ulx ulx -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK soz avR gLc @@ -240928,7 +222492,7 @@ lZX nLy hJR uIq -rIg +sXH etB vtz jYX @@ -240949,12 +222513,12 @@ uSJ wyX tAc ekI -wHa +wHw pwo -mNF +bSd fDT spq -glZ +bDn xoO icO fDT @@ -240968,14 +222532,14 @@ gLc gLc gLc gLc -lAb -izF +jaI +jaI gLc opP gLc gLc gLc -dUd +cSI gLc gLc gLc @@ -241099,7 +222663,7 @@ nmi mLZ ohv ckz -oAg +uWf nXd aZM mrZ @@ -241131,7 +222695,7 @@ njk cyR lRs gzF -wEr +cJU aWU fSN cfl @@ -241185,7 +222749,7 @@ hbA fqF hJR vVV -rIg +sXH ekQ pnk aPu @@ -241223,9 +222787,9 @@ fDT fDT gLc gLc -lAb -ciu -izF +jaI +jaI +jaI gLc gLc gLc @@ -241355,8 +222919,8 @@ rBP kyr lMo pJq -nnM -qmt +wFN +uWf tyK wFN bXx @@ -241368,7 +222932,7 @@ nBC gME djv gIe -ues +gwW gSE kgQ oKD @@ -241402,7 +222966,7 @@ mqh mqh mqh xcT -aYH +hcL jBQ rpQ rpQ @@ -241477,10 +223041,10 @@ fDT foZ vvP sOT -ciu -ciu -ciu -izF +jaI +jaI +jaI +jaI gLc gLc gLc @@ -241618,14 +223182,14 @@ dep uWf vHg lOz -rTQ -uNL leJ -uOc +leJ +leJ +leJ leJ jRh wVs -idD +gwW bMx xai agT @@ -241645,7 +223209,7 @@ jYP sIz dND byO -ofc +tPn djC xTW esu @@ -241693,13 +223257,13 @@ wbV wmN hOY xfj -eQh +wgY wgY wRu whJ iBb jyE -rIg +sXH tHR pdJ rSM @@ -241731,7 +223295,7 @@ lLv euU pCC fDT -idM +sOT sGP uZC uZC @@ -241846,12 +223410,12 @@ ulx ulx ulx ulx -dhz -dhz -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK +wgK +wgK soz gLc fin @@ -241876,7 +223440,7 @@ tfC mrZ duP duP -duP +jzb duP duP duP @@ -241899,30 +223463,30 @@ tGq cGC jMf jYP -saI -ftv +xcn +xcn hjd xbH fTV cJU cJU -mSo +cJU pTn pTn pTn -xBS +pid cJU -nXU +tPn cJU -dpG +tPn gbM quC xva -oJf +tPn oHh pTn pTn -xNo +tPn cJU cJU cJU @@ -241930,8 +223494,8 @@ cJU cJU cJU pid -dpG -odn +tPn +cJU tPn cJU cJU @@ -241956,7 +223520,7 @@ nVz xTq qcQ bdx -wBh +sXH tHR aTW rSM @@ -241988,8 +223552,8 @@ jcw dNw dNw fDT -dNf -rxP +ldA +ldA qKW uZC gLc @@ -242103,12 +223667,12 @@ ulx ulx ulx ulx -dhz -dhz -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK +wgK +wgK soz gLc soz @@ -242119,8 +223683,8 @@ gLc gLc gLc gLc -hEZ -hEZ +qFa +qFa rBP rBP xMM @@ -242128,18 +223692,18 @@ cAY xmO bCk fon -hLf +uWf tWu mrZ -gLc -gLc -gLc -gLc +jiu +jiu +jiu +jiu gLc gLc gRC gIe -uea +gwW rfh xai kqL @@ -242213,9 +223777,9 @@ snK idP ydU fRM -uWT +sXH irK -ksp +tbm rSM soz gLc @@ -242241,12 +223805,12 @@ lcM bOU mya pWp -sFT +mBe tyf tyf fDT uJk -tNT +ldA rjt uZC gLc @@ -242359,9 +223923,9 @@ ulx ulx ulx ulx -dhz -dhz -dhz +wgK +wgK +wgK nvJ nvJ nvJ @@ -242385,15 +223949,15 @@ dSm xVT jmb syx -ozj +wFN iig jiu -jiu -jiu +fCT +eNV +bKw jiu jiu soz -soz asd flT qnI @@ -242454,7 +224018,7 @@ lDl hCo xcK mhL -vgK +aBX aBX czf tMn @@ -242470,7 +224034,7 @@ xFq xFq xFq gnw -kFC +sXH pqB fno fno @@ -242616,9 +224180,9 @@ ulx ulx ulx ulx -dhz -dhz -dhz +wgK +wgK +wgK soz soz soz @@ -242626,12 +224190,12 @@ soz soz gLc gLc -upN +iZT soz soz gLc -dhz -dhz +wgK +wgK gLc soz rBP @@ -242645,10 +224209,10 @@ wzY bTX jiu jiu -fCT -eNV -bKw -jiu +lCL +ckV +lCL +gBh jiu vNL vNL @@ -242702,7 +224266,7 @@ coT gST lcX ixW -enj +tQr eSO obM ctE @@ -242748,8 +224312,8 @@ rPB ttS beQ dfM -gZp -gZp +dNw +dNw gUs rJh dfF @@ -242760,7 +224324,7 @@ dNw dNw fDT pRN -tNT +ldA sEV ppC tUz @@ -242775,7 +224339,7 @@ fge fge owK cgB -wCp +sFZ dlw qBE ayy @@ -242873,10 +224437,10 @@ ulx ulx ulx ulx -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK soz soz gLc @@ -242886,10 +224450,10 @@ gLc gLc gLc gLc -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK soz rBP qyf @@ -242901,11 +224465,11 @@ gjF cZC mdM jiu -gBh +hiZ wlj -ckV +vzV gJh -gBh +lCL jiu uKd vNL @@ -242959,8 +224523,8 @@ cfl cfl gyk gJN -xUD -pgQ +tQr +tQr tQr wgA gyk @@ -243005,19 +224569,19 @@ tKz sLJ wrJ mbV -ivd +tvg lAF jkr -iai +lAF lAF tvg ono -sFT +mBe tyf tyf fDT pEi -lGT +ldA nJy jgo tUz @@ -243025,9 +224589,9 @@ jzy dYs sny tUz -hcy -hcy -hcy +gLc +gLc +gLc qyl ohL aAo @@ -243132,8 +224696,8 @@ ulx ulx jxv uDZ -dhz -dhz +wgK +wgK soz iZT gLc @@ -243143,10 +224707,10 @@ soz soz soz soz -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK soz rBP cDt @@ -243166,7 +224730,7 @@ oBp efz jnR iLs -hJQ +hzH osc rON jQe @@ -243176,11 +224740,11 @@ hTF mdb qsL eFT -cDb +ihg wnt -rTg +ihg mey -rTg +ihg ihg fqc vZv @@ -243242,7 +224806,7 @@ suN sfX vlc igN -rDG +sFG iqZ mah mah @@ -243282,9 +224846,9 @@ ldA tgW pnv tUz -qsv +gLc oNc -hRi +gLc qyl xRR aAo @@ -243301,7 +224865,7 @@ qnM qLW iRC vfQ -uqQ +ksu qxY ksu nsJ @@ -243387,10 +224951,10 @@ ulx ulx ulx ulx -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK soz soz gLc @@ -243400,10 +224964,10 @@ gLc gLc gLc gLc -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK soz rBP qyf @@ -243417,9 +224981,9 @@ eyD jiu pcv sKz -hTG +vzV wlj -kiY +lCL jiu bEO vNL @@ -243539,9 +225103,9 @@ duL jFw fJJ tUz -hcy -hcy -hcy +gLc +gLc +gLc qyl ooY aAo @@ -243644,9 +225208,9 @@ ulx ulx ulx ulx -dhz -dhz -dhz +wgK +wgK +wgK soz soz soz @@ -243654,12 +225218,12 @@ soz soz gLc gLc -upN +iZT soz soz gLc -dhz -dhz +wgK +wgK gLc soz rBP @@ -243673,10 +225237,10 @@ gmt pQX jiu jiu -skg -bSa -clj -jiu +lCL +hTG +lCL +kiY jiu vNL vNL @@ -243752,7 +225316,7 @@ pHs oVP xup ugk -sLX +gTU gxG wJj kSl @@ -243776,8 +225340,8 @@ rPB ajP xep dfM -mBe -mBe +tyf +tyf jQj lRC bgt @@ -243788,7 +225352,7 @@ tyf tyf fDT qST -tNT +ldA pSp jgo tUz @@ -243801,16 +225365,16 @@ gLc gLc fge fge -evX +owK tne -fFS +iRC jSa gvt dLj hoy sFZ uAN -xUW +iRC pKp kvY evy @@ -243901,9 +225465,9 @@ ulx ulx ulx ulx -dhz -dhz -dhz +wgK +wgK +wgK nvJ nvJ nvJ @@ -243922,20 +225486,20 @@ soz rBP rBP axB -tbF +eZi teQ rXO lBg fwu -ozj +wFN uPf jiu -jiu -jiu +skg +bSa +clj jiu jiu soz -soz asd wHB wRM @@ -244159,12 +225723,12 @@ ulx ulx ulx ulx -dhz -dhz -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK +wgK +wgK soz gLc soz @@ -244175,8 +225739,8 @@ gLc gLc gLc gLc -hEZ -hEZ +qFa +qFa rBP rBP puZ @@ -244184,19 +225748,19 @@ nca xmO dEJ idB -oTe +wFN maG mrZ -gLc -gLc -gLc -gLc +jiu +jiu +jiu +jiu gLc gLc gRC gIe -uea -eIy +gwW +rfh iPE rJn sOn @@ -244251,7 +225815,7 @@ qIS yhf yhf nMW -rkr +pqp giV lPG rED @@ -244269,7 +225833,7 @@ rkh aXc gxG igE -oqK +ixy sEZ uNG rSM @@ -244416,12 +225980,12 @@ ulx ulx ulx ulx -dhz -dhz -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK +wgK +wgK soz gLc aIC @@ -244446,14 +226010,14 @@ dCN mrZ vXQ vXQ -vXQ +aUr vXQ vXQ vXQ gRC wZW gwW -iUR +xUY iPE pBT fUf @@ -244474,35 +226038,35 @@ iGa mme tPn cJU -okL cJU -dWc +cJU +cJU pTn pTn pTn -hJY -dpG -hjy -dpG -dpG -odn -dpG -dpG -mdf +pid +tPn +tPn +tPn +tPn +cJU +tPn +tPn +cJU pTn pTn pTn -ooZ -dpG -dpG -dpG -dpG -dpG -dpG +uVg +tPn +tPn +tPn +tPn +tPn +tPn ghu -dpG -dpG -vcF +tPn +tPn +tPn cJU hcL aZh @@ -244526,7 +226090,7 @@ weq wNy gxG uIq -sIr +rxR sEZ pgN rSM @@ -244549,7 +226113,7 @@ tzR gDN tyf tyf -lpP +jQj plv eUV kzI @@ -244699,18 +226263,18 @@ xmO dep vHW xoQ -jYZ +wFN pnd dsr -nas -tHC +cFq +cFq cFq rez cFq pio -phM -idD -iUR +wVs +gwW +xUY iPE ydE nKV @@ -244740,11 +226304,11 @@ bcA mvK afh eTA -pEn -fAG +xTW +jWi xcn -lBE -pEn +sDG +xTW cwQ qFr bcA @@ -244765,7 +226329,7 @@ esu kXv sIz dFm -wAJ +mtF sea uHE lpC @@ -244783,7 +226347,7 @@ lsu drm gxG uIq -sIr +rxR sEZ qsf rSM @@ -244953,8 +226517,8 @@ rBP vBa lMo gzL -xiy -sVq +xvf +xvf xvf azB xGQ @@ -245211,7 +226775,7 @@ vJj sVD tVq axU -oAg +uWf tPG dkg mrZ @@ -245223,7 +226787,7 @@ duP duP gRC cVe -eVz +nnS wlW iPE teI @@ -245297,7 +226861,7 @@ pOU chb rxm aoh -sIr +rxR hDB emr rKw @@ -245445,10 +227009,10 @@ ulx ulx ulx ulx -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK soz avR gLc @@ -245457,7 +227021,7 @@ aIC muK pYX soz -gLc +wYl dzB dzB loJ @@ -245521,7 +227085,7 @@ bst frF hJz tEU -ckr +vUe vUe vUe eaO @@ -245554,7 +227118,7 @@ uEk uwH kdm tXX -qoR +pJO pJO tyG nkN @@ -245702,10 +227266,10 @@ ulx ulx ulx ulx -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK soz gLc gLc @@ -245778,7 +227342,7 @@ bst kHv lcN bWy -fGC +vUe pjH cTD pih @@ -245803,7 +227367,7 @@ oHf spO aKb xqu -apY +vEL nav diD aEY @@ -245970,10 +227534,10 @@ gLc fbb loJ loJ -hEZ -hEZ +qFa +qFa loJ -hEZ +qFa loJ soz abG @@ -245981,7 +227545,7 @@ vsp mpq dec aqV -gJb +atk xgb dec egS @@ -246034,8 +227598,8 @@ vqm xMH aIz evg -lgm -nOG +vUe +spp spp spp qBA @@ -246232,7 +227796,7 @@ fKg gLc soz loJ -hEZ +qFa abG qnj qlM @@ -246284,7 +227848,7 @@ pLR hnf wPf kAu -fSE +xpq xpq lma ctg @@ -246294,7 +227858,7 @@ nYF bjc oFo owP -iuS +wKa qxt iuS vLT @@ -246489,13 +228053,13 @@ fKg fKg gLc gLc -hEZ +qFa kaj kaj tZy dec xWE -gJb +atk bnS qsb uJv @@ -246590,8 +228154,8 @@ uBn cZE bFu tnr -iqE -olG +wTq +yjD mBC iyH nTd @@ -246746,7 +228310,7 @@ pcy fKg gLc gLc -hEZ +qFa soz abG eRC @@ -246774,7 +228338,7 @@ tSe uWC kdU gfL -rVY +vnC vnC vHK puV @@ -246782,7 +228346,7 @@ cDl uwh dun rhO -hYA +jNv jnG pbe wXn @@ -247106,7 +228670,7 @@ csY tdG jND lDr -cmu +yjD nEn srR ffo @@ -247288,7 +228852,7 @@ aXS aXS dgw gfL -fKy +vnC isF isF tBy @@ -247502,7 +229066,7 @@ syf hJH pSM pNA -okV +eiB gHz aJr aJr @@ -247616,11 +229180,11 @@ fLb pvV pvV sFE -elM +csY bRu jND jYs -cmu +yjD rpv xlU mdr @@ -247768,7 +229332,7 @@ nSh aJr oXG aJr -okV +eiB fKg fKg gLc @@ -247811,11 +229375,11 @@ oqi mzN wdj lJu -ocp idY -jan +idY +idY unX -eRF +idY idY idY xdL @@ -247823,16 +229387,16 @@ idY idY iDX tQQ -qhP -lbe -fyV +omQ +omQ +omQ gZL -jGL -uMn -qhP -kHC +omQ +uxy +omQ +omQ xEQ -oUU +uxy qtF lsM wMu @@ -248059,7 +229623,7 @@ blS nZk uvP gfL -cbq +vnC isF xRw tcL @@ -248134,7 +229698,7 @@ kHp aCA wsk evv -cmu +yjD kUp gga dEY @@ -248265,7 +229829,7 @@ eiB wSP eiB wLW -ich +wLW mrA pKq pKq @@ -248316,7 +229880,7 @@ blS nBf ngY gfL -cbq +vnC isF isF tCr @@ -248378,7 +229942,7 @@ hFR jQk nSL jHY -lZf +skC aCA hIi prQ @@ -248391,7 +229955,7 @@ fOM aCA hDu eoz -cmu +yjD hJE lrX leC @@ -248551,7 +230115,7 @@ soz kaj bsa qsb -gJb +atk qsb fXi cGW @@ -248604,7 +230168,7 @@ iuW gwk atX yca -gsn +omQ qdq ggp ayg @@ -248648,7 +230212,7 @@ aCA aCA bKE huy -cmu +yjD vFy gTW wcn @@ -248845,7 +230409,7 @@ yal xwP uUd xWL -jYB +qao fuM rYU fFE @@ -248887,7 +230451,7 @@ dRf bwO qoe leE -iyq +vYX vYX hSq kwi @@ -248905,16 +230469,16 @@ qts ohB lDr lDr -oXx +yjD hBJ -olG -olG -kuV +yjD +yjD +kba piZ -fJi -olG -olG -olG +yjD +yjD +yjD +yjD yjD aIv tTT @@ -249083,7 +230647,7 @@ sdM klB nZt gvN -fGO +nly nly mzp gTZ @@ -249102,7 +230666,7 @@ nzH xwP uUd rtZ -pgM +qao pbJ emk tVt @@ -249135,7 +230699,7 @@ aMt aMt aMt wlm -mnW +jFt xwa jul aQY @@ -249145,7 +230709,7 @@ bqL yio sGF hFR -jtN +vYX jHY jHY jHY @@ -249179,7 +230743,7 @@ hXo hXo hXo gXa -sqU +hXo hXo hXo ojM @@ -249331,11 +230895,11 @@ rmT yiI bJJ ies -exc +mkf exc hRO wlJ -mRg +geH iMq sLv nPE @@ -249402,7 +230966,7 @@ bqL bqL jHY hFR -jtN +vYX laT dLs fOk @@ -249553,7 +231117,7 @@ cGV mww hJH hJH -gjO +dTx mww mww rHG @@ -249565,7 +231129,7 @@ mSk dRQ pus dRQ -rqB +dRQ dRQ mgz hJH @@ -249616,9 +231180,9 @@ nzH xwP uUd fcb -hmC +qao cPW -vWU +qao tnz vEr pdp @@ -249632,7 +231196,7 @@ gKQ fNF tRa gBg -vQj +ved qdq xcL tFj @@ -249659,7 +231223,7 @@ mpE jsj aQY xIX -jtN +vYX pUQ pUQ pUQ @@ -249869,7 +231433,7 @@ cqK lII svy iaa -ekN +nzH xwP uUd sXo @@ -249889,7 +231453,7 @@ xzG qhl atX hTf -vQj +ved qdq pVw ogu @@ -249916,7 +231480,7 @@ jpY hBc jsj hFR -jtN +vYX pUQ gUG rId @@ -250099,7 +231663,7 @@ uhZ uhZ hIx nUl -xiA +iWw tiy oEl peD @@ -250146,11 +231710,11 @@ nmT bpj atX evr -wiP +ved ptq pVw vGH -rAL +wmh pQu aSt aXk @@ -250165,7 +231729,7 @@ kTc jGS iXR chU -mGj +pSd xOw oJJ hTY @@ -250196,11 +231760,11 @@ fjW xMP xNA pvU -hSF +sMY sMY rGl -iAO -pNj +pnK +pnK oqM cpq weZ @@ -250328,21 +231892,21 @@ fwU xqo fKg soz -xvR -xJW -xJW -xJW -xJW -xJW -xJW -xJW -cMY +soz +soz +soz +soz +soz +soz +soz +soz +soz rCS fKg fKg nss ctL -clg +dRQ qFt qIh uhZ @@ -250403,11 +231967,11 @@ atX atX atX cvB -vQj +ved qdq pVw cyz -rAL +wmh aXk aSt pQu @@ -250415,7 +231979,7 @@ wmh kVa pVw sJA -mrp +nGK mHp kfe tHA @@ -250430,14 +231994,14 @@ lUV hCI jsj vZi -jtN +vYX pUQ oSf cUY pUQ psl ukR -qcU +ukR psl gRh psl @@ -250445,7 +232009,7 @@ psl lww gDq ryB -guB +pLg oHI nqG tIM @@ -250584,8 +232148,8 @@ ikG kqU jfV soz -xvR -fDB +soz +soz eXk asL asL @@ -250593,8 +232157,8 @@ eXk eXk asL asL -okY -cMY +soz +soz soz lyw tzm @@ -250646,7 +232210,7 @@ rlt lXy uhD ljx -mXo +ebF mvo qWK vTH @@ -250655,7 +232219,7 @@ fta jLv qux kGx -dyW +hUg vOB wrc vOB @@ -250672,7 +232236,7 @@ gyd gyd pVw quO -mrp +nGK mHp kfe kfe @@ -250687,7 +232251,7 @@ aJt jsj aQY aBK -jtN +vYX pUQ pUQ pUQ @@ -250702,7 +232266,7 @@ sbR sbR sHo gVE -guB +pLg sKv nqG txg @@ -250841,7 +232405,7 @@ lTQ xHU jfV soz -ohj +soz gLc asL eXk @@ -250851,7 +232415,7 @@ asL eXk eXk gLc -gTp +soz soz lyw avP @@ -250903,33 +232467,33 @@ dtD ckQ uhD vxk -hLp +kPK pZl bVT aHV hiP -ifs +bDr eau ewI eDi hUg ksJ -lvW +tvL cMK fJF -vQj +cnk fVn oLt mbt mbt -sqh +uCR tcp uCR elE iiq pqX vNe -mrp +nGK dPQ tvL tvL @@ -250944,7 +232508,7 @@ xOl pDr jHY vZi -jtN +vYX pUQ wEG rId @@ -250959,7 +232523,7 @@ qcb psl khb pLg -oZX +pLg wUK nqG elb @@ -251097,8 +232661,8 @@ eKo mPL xqo xqo -xvR -fDB +soz +soz gLc gLc gLc @@ -251108,8 +232672,8 @@ gLc gLc gLc gLc -okY -cMY +soz +soz fKg fKg yjr @@ -251157,7 +232721,7 @@ lCH vzh vzh vzh -cQI +rlt uhD mmL abk @@ -251177,19 +232741,19 @@ bqx iac cnk tsh -cnk -cnk -cnk +ved +ved +ved dTH -cnk +ved owS tVH -pTz -pTz +vJa +vJa key -pTz -pTz -pTz +vJa +vJa +vJa vJa eyN eyN @@ -251197,7 +232761,7 @@ kYB fJK eBW qWU -dSo +ctk ctk boA foT @@ -251354,7 +232918,7 @@ gmU bgx xqo soz -ohj +soz eXk eXk asL @@ -251366,7 +232930,7 @@ asL asL eXk eXk -gTp +soz soz fKg eiB @@ -251417,18 +232981,18 @@ qir rHV uhD she -rIi +kPK gVw bVT -aQU -qOD -wrP +aHV +hiP +bDr iIk sUV eDi hUg rXC -qTB +qCh iNy uTQ gJd @@ -251437,7 +233001,7 @@ oOt alq alq ajB -tcp +msV wlY tZV vTN @@ -251611,7 +233175,7 @@ kDP xqo xqo xqo -fDB +soz asL eXk eXk @@ -251623,7 +233187,7 @@ asL asL asL eXk -gTp +soz soz fKg mgz @@ -251683,7 +233247,7 @@ vHM oiL svg riX -eeP +hUg rNG wrc uzm @@ -251721,7 +233285,7 @@ pUQ pUQ pUQ psl -mko +qwm ukR psl mLX @@ -251858,10 +233422,10 @@ lyK lyK lyK spD -skU -skU -skU -vHu +hNu +hNu +hNu +lNk jfV eXf ogD @@ -251880,7 +233444,7 @@ ojX ojX ojX ojX -gTp +soz soz fKg vTd @@ -252125,7 +233689,7 @@ xhm xqo xqo xqo -vVt +soz eXk asL asL @@ -252137,7 +233701,7 @@ eXk eXk asL asL -gTp +soz soz fKg uks @@ -252197,7 +233761,7 @@ vqq lNi nNB fem -bOV +hTD hTD iOb gzR @@ -252213,7 +233777,7 @@ orB jVz ior pxd -iye +mUH mUH eGS dhI @@ -252229,7 +233793,7 @@ dHA tyV djW rlK -ssS +hFJ xxW jBZ dhT @@ -252382,7 +233946,7 @@ cUJ xcb xqo soz -ohj +soz asL eXk eXk @@ -252394,7 +233958,7 @@ asL eXk eXk asL -gTp +soz soz fKg dRQ @@ -252452,7 +234016,7 @@ oQY puL oQY pFi -bOV +hTD glz gVu fmw @@ -252639,8 +234203,8 @@ ofy gYl xqo xqo -wEk -vVt +soz +soz gLc gLc gLc @@ -252650,8 +234214,8 @@ gLc gLc gLc gLc -vKW -aSB +soz +soz fKg fKg pus @@ -252716,7 +234280,7 @@ wdc vpY uzK cLN -wXq +ved juW bAc xTA @@ -252893,11 +234457,11 @@ hxE ygY ygY eVS -meF +gSQ gOl jfV soz -ohj +soz gLc uig eXk @@ -252907,7 +234471,7 @@ asL eXk eXk gLc -gTp +soz soz lyw neJ @@ -252947,7 +234511,7 @@ mtR nEr pWn mQc -goc +wie wie rki xhE @@ -252973,7 +234537,7 @@ rbs rbs rbs cLN -tZH +owS qWR bkM jaZ @@ -252981,23 +234545,23 @@ feb kMb tRS oVJ -gov -ces +dbM +dbM fNj -ces -bZv +dbM +dbM lXQ sdE aXW bcQ dpS -pqv +jhU psu kME mWm xZi jhU -pqv +jhU aDi lUf uBf @@ -253006,10 +234570,10 @@ mlH aYj cob cLR -bVw +kPf kPf qzz -pMg +gyV gyV rjO jHG @@ -253150,12 +234714,12 @@ rts hNu jfV xdH -cup +gSQ gSQ jfV soz -wEk -vVt +soz +soz eXk asL asL @@ -253163,8 +234727,8 @@ eXk eXk eXk asL -vKW -aSB +soz +soz soz lyw ctL @@ -253230,7 +234794,7 @@ rZu lKQ biN cLN -tZH +owS mHp jcB qfm @@ -253247,7 +234811,7 @@ xCf eeW sEy bcQ -xIs +kPf sbR psl kKQ @@ -253260,7 +234824,7 @@ uHQ qHh gtJ sbR -ykv +aYj gUp iOG ydH @@ -253271,7 +234835,7 @@ mFi bkA rCA tEA -pgG +qzi qzi tiN gAJ @@ -253412,15 +234976,15 @@ bWZ xqo fKg soz -wEk -krj -krj -krj -krj -krj -krj -krj -aSB +soz +soz +soz +soz +soz +soz +soz +soz +soz soz fKg fKg @@ -253487,7 +235051,7 @@ lKN sik pLa cLN -tZH +owS mHp ajI jwF @@ -253666,7 +235230,7 @@ lNk sjs hJH jUj -wig +sxp fKg fKg fKg @@ -253695,7 +235259,7 @@ sZu tEr uhZ uhZ -dXz +pIs ikp wMd ncV @@ -253744,7 +235308,7 @@ qWG ezo wVW pKZ -fBc +owS mHp bkM bkM @@ -253761,7 +235325,7 @@ bcQ bcQ bcQ bcQ -xIs +kPf sbR sbR qRS @@ -253801,7 +235365,7 @@ oYm oYm qCE otv -vmN +mSe fwj aWh fwj @@ -253923,9 +235487,9 @@ lNk isY mww wAe -hjE +cVS pFA -mnV +rUd tnm tnm hfN @@ -253938,7 +235502,7 @@ tnm bPe hJH eKf -vqV +rHT esg ugo mww @@ -254001,7 +235565,7 @@ rAE ezp svt cLN -sxK +owS xRO kQo uzV @@ -254058,7 +235622,7 @@ lzq kHt doH mSe -syD +mSe mMz mMz idd @@ -254182,7 +235746,7 @@ hJH ngp mww hJH -ogl +ugo wqE jxl xSZ @@ -254197,7 +235761,7 @@ hJH mww sDg hJH -sgF +rHT rIB hJH bLs @@ -254258,7 +235822,7 @@ rbs cEN cEN cLN -vQj +ved mHp dTD kAp @@ -254275,10 +235839,10 @@ hFX cFK nrV xBK -tMK +kPf fOk eDm -qcU +ukR wkF uHQ gRD @@ -254452,11 +236016,11 @@ xUX pay pay eiB -ogl +ugo hJH sKe nao -llP +rHT cKJ rHT wfp @@ -254515,7 +236079,7 @@ dMV tAd cEN cLN -vQj +ved mHp dTD dTD @@ -254993,11 +236557,11 @@ gLc xbB jBN pPl -goc +wie mQc mmN qSJ -olz +mQc sLF qWg eDF @@ -255211,7 +236775,7 @@ qIh mww jPq lBC -xkI +cVS nyw fzx oWE @@ -255293,17 +236857,17 @@ eDq cjz fOk psl -vhW +psu pbi kzb -wdX -wdX +vTD +vTD wbr -wdX +vTD nlO sbR sbR -xIs +kPf sbR kgc dbA @@ -255478,8 +237042,8 @@ tnm tnm klX skz -xkI -tKO +cVS +ugo dhZ jUW qrm @@ -255557,7 +237121,7 @@ dNT dul kwa epX -nig +vTD qgV dAr rCh @@ -255800,7 +237364,7 @@ rbs kYP cmP oPH -lSr +cEu aBi cmP amG @@ -256278,7 +237842,7 @@ nvJ nvJ soz qsv -oNc +kRw hRi gLc gLc @@ -256314,7 +237878,7 @@ ben wMb tuO qQA -koW +cEu eSa soz pxb @@ -256813,18 +238377,18 @@ cJv bkQ bec hFk -poo +jDy iwV biz -pqw +cEu sxF blr kIp -egB +cEu lLg -srh +vlQ soi -srh +vlQ hpu vlQ mPG @@ -258105,7 +239669,7 @@ eSa qSQ hQZ qSQ -qSQ +egB qSQ aVL aVL @@ -258362,7 +239926,7 @@ nvJ nvJ nvJ nvJ -soz +ctT soz soz soz @@ -260211,7 +241775,7 @@ ulx ulx ulx ulx -fZI +ulx ulx ulx ulx @@ -260468,7 +242032,7 @@ ulx ulx ulx ulx -fZI +ulx ulx ulx ulx diff --git a/_maps/map_files/NorthStar/north_star.dmm b/_maps/map_files/NorthStar/north_star.dmm index 62ef5d9b6481b2..8252794b3dbf34 100644 --- a/_maps/map_files/NorthStar/north_star.dmm +++ b/_maps/map_files/NorthStar/north_star.dmm @@ -312,7 +312,7 @@ dir = 8 }, /turf/open/floor/iron/dark/smooth_half, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "adk" = ( /obj/structure/grille, /obj/structure/sign/directions/medical/directional/north, @@ -1600,9 +1600,9 @@ dir = 8 }, /obj/machinery/atmospherics/components/unary/outlet_injector/on{ - volume_rate = 200; dir = 8; - initialize_directions = 8 + initialize_directions = 8; + volume_rate = 200 }, /turf/open/floor/engine, /area/station/science/cytology) @@ -2562,7 +2562,7 @@ /area/station/medical/treatment_center) "aHM" = ( /obj/effect/turf_decal/bot, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/floor/pod/light, /area/station/maintenance/floor1/port) "aHP" = ( @@ -2981,7 +2981,7 @@ /area/station/commons/fitness) "aOw" = ( /obj/machinery/light/small/directional/north, -/mob/living/simple_animal/bot/cleanbot, +/mob/living/basic/bot/cleanbot, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "aOx" = ( @@ -3259,6 +3259,9 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit) +"aRU" = ( +/turf/closed/wall, +/area/station/security/mechbay) "aRX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -6125,6 +6128,23 @@ /obj/structure/sign/poster/official/random/directional/west, /turf/open/floor/iron/white/smooth_large, /area/station/science/robotics/lab) +"bxs" = ( +/obj/structure/rack, +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/storage/briefcase/secure{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/clothing/glasses/sunglasses, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/wood/parquet, +/area/station/service/lawoffice) "bxG" = ( /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/smooth, @@ -6596,7 +6616,7 @@ }, /obj/effect/decal/cleanable/glass, /turf/open/floor/iron/dark/smooth_half, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "bEK" = ( /obj/structure/holosign/barrier, /turf/open/floor/iron/dark, @@ -6804,16 +6824,6 @@ /obj/structure/cable, /turf/open/floor/iron/solarpanel/airless, /area/station/solars/starboard/fore) -"bIL" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/cable, -/obj/machinery/computer/security/telescreen/engine{ - name = "Engineering and atmospherics monitor" - }, -/mob/living/simple_animal/parrot/poly, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/command/heads_quarters/ce) "bIQ" = ( /obj/structure/extinguisher_cabinet/directional/north, /obj/machinery/firealarm/directional/east, @@ -7558,14 +7568,6 @@ }, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor1/port) -"bSJ" = ( -/obj/structure/rack, -/obj/item/storage/secure/safe/directional/east, -/obj/effect/turf_decal/tile/red/fourcorners, -/obj/effect/spawner/random/armory/bulletproof_armor, -/obj/effect/spawner/random/armory/bulletproof_helmet, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/security/armory) "bSR" = ( /obj/structure/closet/crate/freezer, /obj/effect/spawner/random/medical/memeorgans, @@ -11091,7 +11093,7 @@ /obj/machinery/light/directional/north, /obj/effect/landmark/start/bitrunner, /turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "cPg" = ( /obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/atmospherics/components/binary/pump/on{ @@ -12290,6 +12292,10 @@ /obj/structure/flora/bush/sparsegrass/style_random, /turf/open/floor/grass, /area/station/service/library/garden) +"deK" = ( +/obj/structure/secure_safe/directional/south, +/turf/open/floor/mineral/plastitanium, +/area/station/maintenance/floor2/starboard/aft) "deM" = ( /turf/open/floor/iron/white/textured_large, /area/station/service/chapel) @@ -13011,15 +13017,9 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, /obj/machinery/duct, /turf/open/floor/catwalk_floor, -/area/station/maintenance/floor4/port) +/area/station/security/mechbay) "dqB" = ( /obj/item/clothing/mask/breath{ pixel_x = -4 @@ -13054,7 +13054,7 @@ /turf/open/floor/iron/dark/smooth_corner{ dir = 8 }, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "dqQ" = ( /turf/closed/wall/r_wall, /area/station/security/medical) @@ -14848,7 +14848,7 @@ dir = 4 }, /turf/open/floor/iron/dark/smooth_corner, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "dPC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, @@ -17078,7 +17078,7 @@ dir = 8 }, /turf/open/floor/iron/dark/smooth_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "eub" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -18416,13 +18416,8 @@ /turf/open/floor/pod/light, /area/station/maintenance/floor3/starboard/aft) "eNj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/emcloset/anchored, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/pod/light, -/area/station/maintenance/floor4/port) +/turf/closed/wall/r_wall, +/area/station/security/mechbay) "eNk" = ( /obj/machinery/door/firedoor/heavy, /obj/effect/turf_decal/stripes/line{ @@ -20470,6 +20465,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/service/hydroponics) +"ftt" = ( +/obj/structure/table, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/item/radio/intercom/directional/west, +/obj/effect/spawner/random/engineering/tool{ + pixel_x = 1; + pixel_y = 3 + }, +/obj/effect/spawner/random/engineering/tool{ + pixel_x = 1; + pixel_y = 3 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "ftu" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -20696,7 +20706,7 @@ codes_txt = "patrol;next_patrol=2-0"; location = "2-19" }, -/mob/living/simple_animal/bot/medbot/autopatrol, +/mob/living/basic/bot/medbot/autopatrol, /turf/open/floor/iron/dark, /area/station/hallway/floor2/aft) "fwV" = ( @@ -23358,12 +23368,6 @@ /obj/structure/sign/poster/official/random/directional/south, /turf/open/floor/iron, /area/station/hallway/floor3/aft) -"ghQ" = ( -/obj/structure/table/wood, -/obj/item/storage/secure/briefcase, -/obj/machinery/newscaster/directional/north, -/turf/open/floor/carpet, -/area/station/commons/vacant_room/office) "ghZ" = ( /obj/structure/table, /obj/item/inspector{ @@ -26036,8 +26040,6 @@ /area/station/medical/treatment_center) "gSd" = ( /obj/effect/baseturf_helper/reinforced_plating/ceiling, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/engine_access, /turf/open/floor/engine, /area/station/engineering/supermatter) "gSj" = ( @@ -26062,6 +26064,16 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/pod/light, /area/station/maintenance/floor1/starboard) +"gSr" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/cable, +/obj/machinery/computer/security/telescreen/engine{ + name = "Engineering and atmospherics monitor" + }, +/mob/living/basic/parrot/poly, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/command/heads_quarters/ce) "gSs" = ( /obj/effect/turf_decal/trimline/neutral/warning{ dir = 1 @@ -27575,10 +27587,11 @@ "hnb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/extinguisher_cabinet/directional/west, +/obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron/stairs{ dir = 1 }, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "hng" = ( /obj/machinery/door/airlock/hatch{ name = "Maintenance Bulkhead" @@ -28165,6 +28178,14 @@ }, /turf/open/floor/pod/light, /area/station/maintenance/floor3/starboard/fore) +"hvb" = ( +/obj/machinery/mech_bay_recharge_port{ + dir = 2 + }, +/obj/effect/turf_decal/tile/red/anticorner, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "hvc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -28181,20 +28202,6 @@ /obj/machinery/light/red/dim/directional/west, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor2/starboard) -"hvs" = ( -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Antechamber" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/any/science/robotics, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/command/minisat, -/obj/effect/mapping_helpers/airlock/access/any/command/general, -/obj/structure/cable/layer3, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat/service) "hvv" = ( /obj/effect/mapping_helpers/broken_floor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -28238,6 +28245,16 @@ /obj/structure/girder, /turf/open/floor/plating, /area/station/maintenance/solars/port/aft) +"hwd" = ( +/obj/structure/rack, +/obj/item/storage/briefcase/secure, +/obj/item/restraints/handcuffs, +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/directional/east{ + c_tag = "Detective's Backroom" + }, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office) "hwe" = ( /obj/structure/disposalpipe/trunk, /obj/machinery/disposal/delivery_chute{ @@ -29725,16 +29742,6 @@ /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/cargo/storage) -"hQj" = ( -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Access" - }, -/obj/effect/mapping_helpers/airlock/access/any/science/robotics, -/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/aisat/hallway) "hQl" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/chair{ @@ -30832,7 +30839,7 @@ /area/station/commons/locker) "ifx" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate/maint, +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, /obj/effect/spawner/random/maintenance/two, /obj/effect/turf_decal/bot, /obj/effect/spawner/random/engineering/tool, @@ -31072,6 +31079,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/floor2/port) +"iiM" = ( +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Access" + }, +/obj/effect/mapping_helpers/airlock/access/any/command/minisat, +/obj/effect/mapping_helpers/airlock/access/any/command/general, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/hallway) "iiQ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/green/line{ @@ -32610,7 +32625,7 @@ dir = 8 }, /turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "iCQ" = ( /obj/effect/turf_decal/trimline/green/filled/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -32674,6 +32689,13 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor3/starboard/fore) +"iDz" = ( +/obj/machinery/atmospherics/components/trinary/filter/critical{ + dir = 4 + }, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "iDP" = ( /obj/structure/cable/multilayer/multiz, /turf/open/floor/plating, @@ -33563,6 +33585,10 @@ }, /turf/open/floor/pod/light, /area/station/maintenance/floor1/starboard/fore) +"iQe" = ( +/obj/structure/secure_safe/directional/east, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) "iQf" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -33843,6 +33869,11 @@ }, /turf/open/floor/wood, /area/station/service/theater) +"iUb" = ( +/obj/structure/secure_safe/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office) "iUP" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -34541,7 +34572,7 @@ /obj/effect/turf_decal/stripes, /obj/effect/turf_decal/trimline/brown/line, /turf/open/floor/iron/dark/smooth_half, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "jdR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/sink/directional/east, @@ -34766,8 +34797,8 @@ /obj/structure/table/glass, /obj/item/radio/intercom/directional/south, /obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = -6 + pixel_x = -6; + pixel_y = 6 }, /obj/item/storage/medkit/regular, /turf/open/floor/iron/white, @@ -35048,6 +35079,17 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/pod/light, /area/station/maintenance/floor2/starboard) +"jlK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, +/obj/structure/cable, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/engine_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "engine" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "jlS" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green, @@ -35397,7 +35439,7 @@ /obj/structure/disposalpipe/segment, /obj/effect/landmark/start/bitrunner, /turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "jqx" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/firedoor/heavy, @@ -35539,6 +35581,10 @@ dir = 1 }, /area/station/security/brig) +"jsL" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "jsP" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 @@ -35638,6 +35684,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, /turf/open/floor/plating, /area/station/engineering/supermatter) +"jun" = ( +/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/machinery/airalarm/directional/west, +/turf/open/floor/catwalk_floor, +/area/station/security/mechbay) "juq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -35987,7 +36041,7 @@ /obj/machinery/byteforge, /obj/effect/turf_decal/box, /turf/open/floor/iron/dark/smooth_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "jyp" = ( /obj/machinery/door/airlock/security/glass{ name = "Head of Security Office" @@ -36216,7 +36270,7 @@ /turf/open/floor/iron/smooth_large, /area/station/hallway/secondary/entry) "jAO" = ( -/obj/structure/closet/crate/maint, +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, /obj/effect/spawner/random/maintenance/three, /obj/effect/spawner/random/engineering/tool, /turf/open/floor/pod/light, @@ -38218,6 +38272,19 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/dark, /area/station/security/evidence) +"kcw" = ( +/obj/machinery/computer/mech_bay_power_console{ + dir = 8 + }, +/obj/machinery/button/door/directional/north{ + id = "secmechbay"; + name = "Security Mech Garage Door Controls"; + req_access = list("security") + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "kcy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -42052,16 +42119,6 @@ /obj/machinery/status_display/evac/directional/west, /turf/open/floor/iron, /area/station/engineering/atmos/hfr_room) -"kZi" = ( -/obj/structure/rack, -/obj/item/storage/secure/briefcase, -/obj/item/restraints/handcuffs, -/obj/machinery/light/small/directional/south, -/obj/machinery/camera/directional/east{ - c_tag = "Detective's Backroom" - }, -/turf/open/floor/iron/grimy, -/area/station/security/detectives_office) "kZl" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -42961,7 +43018,12 @@ /obj/machinery/computer/department_orders/security{ dir = 8 }, -/obj/item/radio/intercom/directional/south, +/obj/item/radio/intercom/directional/east, +/obj/machinery/button/door/directional/south{ + id = "secmechbay"; + name = "Security Mech Garage Door Controls"; + req_access = list("security") + }, /turf/open/floor/iron, /area/station/security/office) "lkB" = ( @@ -43415,8 +43477,8 @@ "lqD" = ( /obj/structure/table, /obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = -6 + pixel_x = -6; + pixel_y = 6 }, /obj/item/storage/box/donkpockets{ pixel_x = 6 @@ -44376,6 +44438,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/air_sensor/engine_chamber, /turf/open/floor/engine, /area/station/engineering/supermatter) "lFa" = ( @@ -44999,8 +45062,12 @@ }, /obj/machinery/airalarm/directional/north, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnancefreezer" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/dark, -/area/station/science/ordnance/freezerchamber) +/area/station/science/ordnance/testlab) "lNA" = ( /obj/effect/turf_decal/trimline/green/warning{ dir = 8 @@ -47270,7 +47337,7 @@ name = "Bitrunning Den" }, /turf/open/floor/pod/dark, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "mpy" = ( /obj/machinery/newscaster/directional/west, /obj/effect/decal/cleanable/dirt, @@ -47364,6 +47431,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/textured_large, /area/station/cargo/storage) +"mqw" = ( +/obj/structure/table/wood, +/obj/item/storage/briefcase/secure, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/carpet, +/area/station/commons/vacant_room/office) "mqx" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -47940,6 +48013,13 @@ dir = 4 }, /area/station/hallway/secondary/exit/departure_lounge) +"myp" = ( +/obj/effect/turf_decal/tile/red/anticorner, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "myr" = ( /turf/open/floor/iron/textured_large, /area/station/hallway/secondary/entry) @@ -51146,7 +51226,7 @@ }, /obj/machinery/holopad, /turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "nnJ" = ( /obj/structure/filingcabinet, /turf/open/floor/iron/dark/smooth_large, @@ -53295,9 +53375,6 @@ /turf/open/floor/iron/dark/textured, /area/station/medical/pharmacy) "nPN" = ( -/obj/machinery/computer/message_monitor{ - dir = 4 - }, /obj/machinery/computer/message_monitor{ dir = 4 }, @@ -54083,7 +54160,6 @@ "oad" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/portable_atmospherics/pump, -/obj/machinery/portable_atmospherics/pump, /turf/open/floor/pod/light, /area/station/maintenance/floor4/port/fore) "oar" = ( @@ -54303,6 +54379,13 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/rd) +"odH" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "odJ" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 6 @@ -54865,7 +54948,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/structure/disposalpipe/trunk/multiz, /turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "olM" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 9 @@ -57066,6 +57149,15 @@ dir = 8 }, /area/station/security/brig) +"oQu" = ( +/obj/effect/turf_decal/caution/stand_clear, +/obj/effect/turf_decal/box, +/obj/machinery/door/poddoor/shutters{ + id = "secmechbay"; + name = "Security Mech Bay Shutters" + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "oQv" = ( /obj/structure/flora/bush/sparsegrass/style_random, /obj/machinery/light/directional/west, @@ -57356,11 +57448,6 @@ /obj/structure/cable/multilayer/connected, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"oTF" = ( -/obj/item/storage/secure/safe/directional/east, -/obj/structure/cable, -/turf/open/floor/iron/grimy, -/area/station/security/detectives_office) "oTG" = ( /obj/structure/table, /obj/item/storage/fancy/donut_box{ @@ -58373,7 +58460,7 @@ /obj/item/radio/intercom/directional/north, /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "pjB" = ( /obj/effect/decal/cleanable/blood/old, /obj/structure/chair{ @@ -59236,7 +59323,6 @@ /turf/open/floor/iron/dark/corner, /area/station/commons/storage/primary) "pvO" = ( -/obj/item/kirbyplants/organic/plant10, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/dark, @@ -60149,8 +60235,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, +/obj/machinery/door/airlock/hatch{ + name = "Maintenance Bulkhead" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/catwalk_floor, -/area/station/maintenance/floor4/port) +/area/station/security/mechbay) "pIS" = ( /obj/machinery/requests_console/directional/east{ department = "Captain's Desk"; @@ -60276,6 +60366,19 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hop) +"pKc" = ( +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Antechamber" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/command/minisat, +/obj/effect/mapping_helpers/airlock/access/any/command/general, +/obj/structure/cable/layer3, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/service) "pKd" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -60895,8 +60998,12 @@ /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /obj/machinery/airalarm/directional/west, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnanceburn" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/dark, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance/testlab) "pSV" = ( /obj/machinery/griddle, /turf/open/floor/iron/kitchen, @@ -61022,7 +61129,7 @@ /turf/open/floor/iron/dark/smooth_corner{ dir = 4 }, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "pVd" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 8 @@ -64890,13 +64997,6 @@ /obj/effect/spawner/random/engineering/tool, /turf/open/floor/pod/dark, /area/station/maintenance/floor2/starboard/aft) -"qVp" = ( -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Access" - }, -/obj/effect/mapping_helpers/airlock/access/any/science/robotics, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat/hallway) "qVv" = ( /obj/structure/chair/comfy/brown{ dir = 8 @@ -65277,7 +65377,7 @@ "qZU" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "rac" = ( /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/cmo) @@ -66154,7 +66254,7 @@ codes_txt = "patrol;next_patrol=4-1"; location = "4-0" }, -/mob/living/simple_animal/bot/medbot/autopatrol, +/mob/living/basic/bot/medbot/autopatrol, /turf/open/floor/iron/dark/side{ dir = 9 }, @@ -66902,23 +67002,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/pod/light, /area/station/maintenance/floor2/port/aft) -"rxd" = ( -/obj/structure/rack, -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/item/storage/secure/briefcase{ - pixel_x = 2; - pixel_y = -2 - }, -/obj/item/clothing/glasses/sunglasses, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/machinery/light/directional/north, -/turf/open/floor/wood/parquet, -/area/station/service/lawoffice) "rxe" = ( /obj/effect/decal/cleanable/blood/old, /obj/structure/chair{ @@ -69027,11 +69110,8 @@ "scn" = ( /obj/machinery/netpod, /obj/machinery/airalarm/directional/east, -/obj/machinery/airalarm/directional/east, -/obj/machinery/airalarm/directional/east, -/obj/machinery/airalarm/directional/east, /turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "sct" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -71755,7 +71835,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 5 }, -/mob/living/simple_animal/pet/cat/runtime, +/mob/living/basic/pet/cat/runtime, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) "sPk" = ( @@ -72355,11 +72435,6 @@ }, /turf/open/floor/wood, /area/station/commons/dorms/apartment2) -"sXl" = ( -/obj/item/storage/secure/safe/caps_spare/directional/south, -/obj/effect/turf_decal/tile/purple/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "sXp" = ( /obj/structure/rack, /obj/item/radio/off{ @@ -73481,16 +73556,18 @@ /turf/open/floor/catwalk_floor, /area/station/maintenance/floor2/port/fore) "tlx" = ( -/obj/effect/mapping_helpers/airlock/access/any/security/brig, /obj/structure/cable, -/obj/machinery/door/airlock/hatch{ - name = "Maintenance Access" - }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/floor4/port) +/obj/machinery/door/poddoor/shutters{ + id = "secmechbay"; + name = "Security Mech Bay Shutters" + }, +/obj/effect/turf_decal/caution/stand_clear, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "tlJ" = ( /obj/machinery/camera/autoname/directional/east, /turf/open/space/openspace, @@ -74658,11 +74735,6 @@ /obj/effect/mob_spawn/corpse/human/charredskeleton, /turf/open/floor/iron, /area/station/maintenance/floor4/starboard) -"tBe" = ( -/obj/structure/table, -/obj/item/storage/secure/briefcase, -/turf/open/floor/iron/dark, -/area/station/command/teleporter) "tBh" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 4 @@ -75439,13 +75511,6 @@ /obj/structure/closet/emcloset/anchored, /turf/open/floor/pod/dark, /area/station/maintenance/floor3/port) -"tLH" = ( -/obj/machinery/atmospherics/components/trinary/filter{ - dir = 4 - }, -/obj/machinery/status_display/evac/directional/north, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "tMd" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 1 @@ -76229,7 +76294,7 @@ /area/station/hallway/secondary/entry) "tXe" = ( /turf/closed/wall, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "tXg" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/pod/light, @@ -76780,6 +76845,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/turf_decal/tile/red/fourcorners, +/obj/item/kirbyplants/organic/plant10, /turf/open/floor/iron/dark, /area/station/security/office) "ufL" = ( @@ -79144,9 +79210,9 @@ /area/station/maintenance/floor2/port/aft) "uLB" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ - volume_rate = 200; dir = 8; - initialize_directions = 8 + initialize_directions = 8; + volume_rate = 200 }, /obj/machinery/atmospherics/pipe/heat_exchanging/manifold/layer2{ dir = 8 @@ -82180,10 +82246,6 @@ /obj/machinery/duct, /turf/open/floor/wood/tile, /area/station/command/heads_quarters/captain/private) -"vyv" = ( -/obj/item/storage/secure/safe/directional/south, -/turf/open/floor/mineral/plastitanium, -/area/station/maintenance/floor2/starboard/aft) "vyz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -82268,7 +82330,7 @@ layer = 3.1 }, /turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "vzu" = ( /obj/effect/landmark/start/psychologist, /obj/structure/sign/poster/official/random/directional/south, @@ -83533,6 +83595,10 @@ /obj/structure/disposalpipe/trunk/multiz, /turf/open/floor/plating, /area/station/maintenance/floor3/port/fore) +"vRF" = ( +/obj/vehicle/sealed/mecha/ripley/paddy/preset, +/turf/open/floor/iron/recharge_floor, +/area/station/security/mechbay) "vRO" = ( /turf/open/openspace, /area/station/hallway/floor4/aft) @@ -86586,11 +86652,10 @@ /obj/machinery/door/airlock/mining/glass{ name = "Mail Sorting" }, -/obj/effect/mapping_helpers/airlock/access/any/supply/shipping, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/supply/general, /turf/open/floor/iron/smooth, /area/station/cargo/storage) "wEQ" = ( @@ -86929,6 +86994,17 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron/dark, /area/station/command/gateway) +"wIA" = ( +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Access" + }, +/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/command/minisat, +/obj/effect/mapping_helpers/airlock/access/any/command/general, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/hallway) "wIC" = ( /obj/structure/railing/corner{ dir = 1 @@ -87536,6 +87612,14 @@ }, /turf/open/floor/pod/light, /area/station/maintenance/floor3/starboard/fore) +"wPG" = ( +/obj/structure/rack, +/obj/structure/secure_safe/directional/east, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/effect/spawner/random/armory/bulletproof_armor, +/obj/effect/spawner/random/armory/bulletproof_helmet, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) "wPK" = ( /obj/machinery/airalarm/directional/west, /obj/machinery/ore_silo, @@ -88097,6 +88181,11 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/cytology) +"wWX" = ( +/obj/structure/table, +/obj/item/storage/briefcase/secure, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) "wXi" = ( /obj/structure/cable/multilayer/multiz, /turf/open/floor/plating, @@ -90192,6 +90281,11 @@ }, /turf/open/floor/pod/light, /area/station/maintenance/floor2/port/fore) +"xzS" = ( +/obj/structure/secure_safe/caps_spare/directional/south, +/obj/effect/turf_decal/tile/purple/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "xzT" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -92221,10 +92315,6 @@ }, /turf/open/misc/beach/sand, /area/station/hallway/floor2/fore) -"yaY" = ( -/obj/item/storage/secure/safe/directional/east, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/hop) "yba" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -135517,7 +135607,7 @@ nPb rCO cjc aRI -bIL +gSr bgs hZt kzE @@ -138333,7 +138423,7 @@ oqA wlP klY klY -klY +jlK nHv cAf klY @@ -140138,7 +140228,7 @@ uyD uyD uyD uyD -tLH +iDz kfo mvg dEc @@ -202054,7 +202144,7 @@ mPw sQa spr aOa -vyv +deK spr pxw edO @@ -203615,7 +203705,7 @@ xAu crK fsJ rQV -hQj +wIA rQV tPm tPm @@ -204641,7 +204731,7 @@ uZF cfH wns kOk -qVp +iiM wmw bXz sZo @@ -263761,7 +263851,7 @@ oRz pfC nqr lRY -ghQ +mqw kux joL tmq @@ -307962,7 +308052,7 @@ rrX shu hwM ukK -sXl +xzS uIx oad uxW @@ -313075,7 +313165,7 @@ mSG mSG doC mSG -mSG +sJm sJm sJm nPE @@ -313366,7 +313456,7 @@ uqc rZV pld gLb -tBe +wWX wvq uWl gIl @@ -315125,7 +315215,7 @@ ucA ucA ucA ucA -lYx +sJm lNx koC oOA @@ -315420,7 +315510,7 @@ cSF aEm oAe mxO -kZi +hwd mau eae mGT @@ -315676,7 +315766,7 @@ iUT nyL xSQ dzE -oTF +iUb mau mau mau @@ -317743,10 +317833,10 @@ lnl uYM eOy cgv -vEa -jbV -jbV -jbV +eNj +ftt +eNj +eNj eNj fPD jbV @@ -318002,7 +318092,7 @@ mbx rVS tlx dqs -dqs +jun dqs pIP hOs @@ -318257,11 +318347,11 @@ mBg dPf rDw pse -vEa -fXs -fXs -fXs -fXs +oQu +odH +jsL +myp +eNj jjh fXs fXs @@ -318514,11 +318604,11 @@ fNA ebz vuQ lku -vEa -owb -owb -owb -fXs +eNj +kcw +hvb +vRF +eNj mgx kHx fXs @@ -318741,7 +318831,7 @@ tlZ oaU nPE qPv -yaY +iQe wqP iNA obK @@ -318771,11 +318861,11 @@ fNA ufI dnU dnU -fXs -vEa -vEa -owb -fXs +aRU +eNj +eNj +eNj +eNj xGh vPu fXs @@ -322622,7 +322712,7 @@ dPH vuf jjA gSD -bSJ +wPG iaO gMo jOc @@ -324912,7 +325002,7 @@ hre shW ofD vxy -rxd +bxs oWC rbR ciU @@ -334682,7 +334772,7 @@ kZZ kum kum kum -hvs +pKc fzr iBc jPj diff --git a/_maps/map_files/VoidRaptor/VoidRaptor.dmm b/_maps/map_files/VoidRaptor/VoidRaptor.dmm index 706a9c71528bf0..4e426d302e4e6a 100644 --- a/_maps/map_files/VoidRaptor/VoidRaptor.dmm +++ b/_maps/map_files/VoidRaptor/VoidRaptor.dmm @@ -1553,9 +1553,6 @@ dir = 4 }, /obj/machinery/duct, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/open/floor/iron/white/smooth_edge{ dir = 8 }, @@ -2144,10 +2141,6 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 6 }, -/obj/machinery/button/door/directional/south{ - id = "genetics_shutters"; - name = "Genetics Shutters" - }, /obj/item/storage/box/monkeycubes{ pixel_x = 6; pixel_y = 9 @@ -2201,17 +2194,9 @@ /area/station/science/research) "aFT" = ( /obj/effect/turf_decal/bot, -/obj/structure/rack, -/obj/item/reagent_containers/cup/bottle/mercury{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/item/reagent_containers/cup/bottle/nitrogen{ - pixel_x = 7; - pixel_y = 3 - }, -/obj/item/reagent_containers/cup/bottle/oxygen{ - pixel_x = 1 +/obj/structure/table/glass, +/obj/item/storage/box/beakers{ + pixel_y = 4 }, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/central) @@ -3235,12 +3220,6 @@ dir = 4 }, /area/station/engineering/storage) -"aVZ" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 5 - }, -/turf/open/floor/iron/freezer, -/area/station/medical/chemistry) "aWh" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, @@ -3385,9 +3364,6 @@ /area/station/maintenance/port/aft) "aWZ" = ( /obj/effect/turf_decal/trimline/blue/filled/line, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/chair{ dir = 1 }, @@ -3395,6 +3371,9 @@ /obj/structure/disposalpipe/segment{ dir = 5 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/smooth_edge{ dir = 1 }, @@ -4016,6 +3995,11 @@ /obj/machinery/status_display/evac, /turf/closed/wall, /area/station/security/lockers) +"bfi" = ( +/obj/structure/table/wood, +/obj/item/documents/syndicate, +/turf/open/floor/wood, +/area/station/maintenance/rus_gambling) "bfB" = ( /obj/effect/turf_decal/tile/red/anticorner{ dir = 1 @@ -5174,7 +5158,7 @@ /area/station/security/prison/garden) "bzn" = ( /obj/structure/closet, -/obj/item/clothing/under/costume/skyrat/bathrobe, +/obj/item/clothing/under/costume/nova/bathrobe, /obj/effect/turf_decal/bot, /turf/open/floor/iron/white/small, /area/station/common/pool) @@ -5994,6 +5978,22 @@ }, /turf/open/floor/wood/large, /area/station/hallway/primary/central/fore) +"bNE" = ( +/obj/structure/rack/shelf, +/obj/item/reagent_containers/cup/bottle/acidic_buffer{ + pixel_x = 7; + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/bottle/basic_buffer{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/bottle/formaldehyde{ + pixel_x = 1 + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/medbay/central) "bNF" = ( /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 10 @@ -7164,7 +7164,7 @@ /turf/closed/wall, /area/station/maintenance/port/greater) "chg" = ( -/obj/item/storage/secure/safe/caps_spare{ +/obj/structure/secure_safe/caps_spare{ pixel_x = -24 }, /obj/structure/table/reinforced/rglass, @@ -7998,7 +7998,7 @@ "cut" = ( /obj/effect/turf_decal/tile/blue/full, /turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; + icon = 'modular_nova/modules/advanced_shuttles/icons/erokez.dmi'; icon_state = "floor1" }, /area/space/nearstation) @@ -8098,6 +8098,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/department/engine/atmos) +"cwd" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/freezer, +/area/station/medical/pharmacy) "cwf" = ( /obj/effect/turf_decal/vg_decals/numbers/one, /turf/open/floor/iron/dark/smooth_large, @@ -8361,7 +8368,7 @@ "cAH" = ( /obj/structure/bed/double, /obj/item/bedsheet/centcom/double, -/obj/item/storage/secure/safe/directional/east, +/obj/structure/secure_safe/directional/east, /obj/machinery/newscaster/directional/south, /turf/open/floor/carpet/green, /area/station/command/heads_quarters/nt_rep) @@ -8459,7 +8466,7 @@ /area/station/science/explab) "cBk" = ( /turf/closed/wall, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "cBU" = ( /obj/structure/chair/comfy/beige{ dir = 1 @@ -9276,7 +9283,7 @@ /area/station/hallway/secondary/command) "cOf" = ( /turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; + icon = 'modular_nova/modules/advanced_shuttles/icons/erokez.dmi'; icon_state = "floor1" }, /area/space/nearstation) @@ -9842,10 +9849,6 @@ /obj/structure/disposalpipe/segment, /turf/closed/wall, /area/station/maintenance/aft/upper) -"cXE" = ( -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/medical/pharmacy) "cXX" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark/smooth_large, @@ -10050,8 +10053,19 @@ /area/station/engineering/atmos/storage) "daB" = ( /obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/machinery/airalarm/directional/south{ - pixel_x = 10 +/obj/structure/table/reinforced/rglass, +/obj/item/assembly/timer{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/assembly/igniter, +/obj/item/stack/package_wrap{ + pixel_y = -1; + pixel_x = 1 + }, +/obj/item/hand_labeler{ + pixel_y = -3; + pixel_x = 4 }, /turf/open/floor/iron/freezer, /area/station/medical/pharmacy) @@ -10356,7 +10370,7 @@ dir = 1 }, /turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "dex" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/carpet, @@ -10379,10 +10393,12 @@ /obj/effect/turf_decal/trimline/blue/line{ dir = 1 }, -/obj/machinery/duct, -/obj/structure/disposalpipe/junction/flip{ - dir = 8 +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 8; + name = "Pharmacy Junction" }, +/obj/machinery/duct, +/obj/effect/mapping_helpers/mail_sorting/medbay/chemistry, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/lobby) "dfk" = ( @@ -10671,7 +10687,7 @@ /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai_upload) "diL" = ( -/obj/effect/turf_decal/skyrat_decals/enclave/top/middle{ +/obj/effect/turf_decal/nova_decals/enclave/top/middle{ color = "#52B4E9" }, /obj/effect/turf_decal/trimline/blue/line, @@ -10820,14 +10836,20 @@ /turf/open/floor/iron/grimy, /area/station/service/library) "dle" = ( -/obj/item/reagent_containers/cup/beaker/large{ - pixel_y = 5 +/obj/structure/sign/warning/chem_diamond/directional/east, +/obj/structure/rack/shelf, +/obj/item/reagent_containers/cup/bottle/fluorine{ + pixel_x = 7; + pixel_y = 3 }, -/obj/item/reagent_containers/dropper{ - pixel_y = -4 +/obj/item/reagent_containers/cup/bottle/epinephrine{ + pixel_x = -5; + pixel_y = 3 }, -/obj/structure/sign/warning/chem_diamond/directional/east, -/obj/structure/table/glass, +/obj/item/reagent_containers/cup/bottle/iodine{ + pixel_x = 1 + }, +/obj/effect/turf_decal/bot, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/central) "dlg" = ( @@ -11034,8 +11056,8 @@ }, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/disposalpipe/junction/flip{ + dir = 8 }, /turf/open/floor/iron/freezer, /area/station/medical/pharmacy) @@ -11294,7 +11316,7 @@ /area/station/science/research/abandoned) "dsV" = ( /obj/item/phone{ - desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; + desc = "Supposedly a direct line to Symphionia Conglomeration of Colonists. It's not even plugged in."; pixel_x = -8; pixel_y = -3 }, @@ -11762,7 +11784,7 @@ /area/station/ai_monitored/turret_protected/ai_upload) "dzp" = ( /obj/structure/window/spawner/directional/south, -/mob/living/simple_animal/pet/cat/cak, +/mob/living/basic/pet/cat/cak, /turf/open/floor/iron/smooth_large, /area/station/maintenance/starboard/greater) "dzq" = ( @@ -11931,7 +11953,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/bitrunner, /turf/open/floor/iron/dark/textured, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "dAX" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -12456,7 +12478,7 @@ anchored = 1; name = "Jerry's bed" }, -/mob/living/simple_animal/pet/cat/jerry, +/mob/living/basic/pet/cat/jerry, /turf/open/floor/wood, /area/station/security/prison/garden) "dIf" = ( @@ -13038,10 +13060,14 @@ /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 }, -/turf/open/floor/iron/white/smooth_edge{ - dir = 4 +/obj/machinery/smartfridge/chemistry/preloaded, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "chemistry_shutters_south"; + name = "Pharmacy Shutters" }, -/area/station/hallway/primary/central/aft) +/turf/open/floor/iron/dark/smooth_large, +/area/station/medical/pharmacy) "dPw" = ( /obj/effect/turf_decal/trimline/dark_red/filled/line, /obj/machinery/light/small/directional/south, @@ -13285,7 +13311,7 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/skyrat_decals/enclave/middle/right{ +/obj/effect/turf_decal/nova_decals/enclave/middle/right{ color = "#52B4E9" }, /obj/effect/turf_decal/trimline/blue/line{ @@ -13312,10 +13338,10 @@ /turf/open/floor/iron/white, /area/station/science/explab) "dTw" = ( -/obj/item/storage/secure/safe/directional/north, +/obj/structure/secure_safe/directional/north, /obj/structure/table/wood/fancy/purple, /obj/item/folder/syndicate{ - desc = "A folder stamped \"Top Secret - Property of Nanotrasen.\""; + desc = "A folder stamped \"Top Secret - Property of Symphionia.\""; pixel_x = 3; pixel_y = 6 }, @@ -13924,10 +13950,6 @@ "ebp" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/window/right/directional/east{ - name = "Pharmacy Desk"; - req_access = list("pharmacy") - }, /obj/item/reagent_containers/cup/bottle/morphine, /obj/item/reagent_containers/cup/bottle/toxin{ pixel_x = 5; @@ -13945,6 +13967,12 @@ id = "chemistry_shutters"; name = "Pharmacy Shutters" }, +/obj/machinery/door/window/right/directional/east{ + name = "Pharmacy Desk"; + req_access = list("pharmacy"); + safe = 4; + dir = 8 + }, /turf/open/floor/iron/white/smooth_large, /area/station/medical/pharmacy) "ebz" = ( @@ -14490,11 +14518,7 @@ /area/station/service/chapel) "eil" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/box, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, +/obj/machinery/chem_mass_spec, /turf/open/floor/iron/freezer, /area/station/medical/pharmacy) "ein" = ( @@ -15045,18 +15069,14 @@ /turf/open/floor/iron/grimy, /area/station/security/detectives_office) "epZ" = ( +/obj/structure/table/glass, /obj/effect/turf_decal/bot, -/obj/structure/rack, -/obj/item/reagent_containers/cup/bottle/epinephrine{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/item/reagent_containers/cup/bottle/fluorine{ - pixel_x = 7; - pixel_y = 3 +/obj/item/storage/toolbox/mechanical{ + pixel_y = 1 }, -/obj/item/reagent_containers/cup/bottle/iodine{ - pixel_x = 1 +/obj/item/reagent_containers/spray/cleaner{ + pixel_y = 4; + pixel_x = 9 }, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/central) @@ -15982,19 +16002,11 @@ /turf/open/floor/glass/reinforced, /area/station/security/office) "eEq" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 4; - pixel_x = -5 - }, /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 }, -/obj/effect/landmark/start/assistant, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/white/smooth_edge{ - dir = 4 - }, -/area/station/hallway/primary/central/aft) +/turf/closed/wall/r_wall, +/area/station/medical/pharmacy) "eEr" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -16413,7 +16425,7 @@ "eJc" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, -/mob/living/simple_animal/bot/medbot, +/mob/living/basic/bot/medbot, /obj/structure/railing{ dir = 8 }, @@ -16605,7 +16617,6 @@ /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 4 }, -/obj/machinery/firealarm/directional/east, /obj/structure/bed/dogbed{ anchored = 1; name = "Markus's bed" @@ -16720,7 +16731,7 @@ /area/station/ai_monitored/security/armory) "eNH" = ( /turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' + icon = 'modular_nova/modules/advanced_shuttles/icons/evac_shuttle.dmi' }, /area/space/nearstation) "eNR" = ( @@ -17126,7 +17137,7 @@ /obj/effect/turf_decal/trimline/neutral/filled/line, /obj/effect/turf_decal/trimline/neutral/filled/line, /obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/item/storage/secure/safe/directional/south, +/obj/structure/secure_safe/directional/south, /obj/structure/extinguisher_cabinet/directional/south{ pixel_x = 16 }, @@ -17798,10 +17809,14 @@ }, /area/station/hallway/secondary/command) "fft" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ +/obj/effect/turf_decal/bot, +/obj/structure/fake_stairs/directional/north, +/obj/structure/railing{ dir = 8 }, -/obj/effect/turf_decal/bot, +/obj/structure/railing{ + dir = 4 + }, /turf/open/floor/iron/freezer, /area/station/medical/pharmacy) "ffz" = ( @@ -17984,7 +17999,7 @@ /turf/closed/wall/r_wall, /area/station/medical/chemistry) "fiT" = ( -/obj/effect/turf_decal/skyrat_decals/enclave/middle/left{ +/obj/effect/turf_decal/nova_decals/enclave/middle/left{ color = "#52B4E9" }, /obj/effect/turf_decal/trimline/blue/line{ @@ -18734,7 +18749,7 @@ dir = 1 }, /turf/open/floor/engine, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "ftr" = ( /obj/machinery/power/shuttle_engine/heater, /obj/effect/turf_decal/stripes/line{ @@ -18840,6 +18855,17 @@ "fvs" = ( /turf/open/floor/iron/white/smooth_large, /area/station/science/lab) +"fvW" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/bot, +/obj/item/toy/figure/chemist{ + pixel_y = 18 + }, +/obj/machinery/vending/wardrobe/chem_wardrobe, +/turf/open/floor/iron/freezer, +/area/station/medical/chemistry) "fwc" = ( /obj/structure/table, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -18942,12 +18968,20 @@ /turf/open/floor/iron/cafeteria, /area/station/service/cafeteria) "fxD" = ( -/obj/effect/turf_decal/bot, /obj/structure/sign/warning/chem_diamond/directional/north, -/obj/item/storage/box/beakers{ - pixel_y = 4 +/obj/structure/rack/shelf, +/obj/item/reagent_containers/cup/bottle/carbon{ + pixel_x = 7; + pixel_y = 3 }, -/obj/structure/table/glass, +/obj/item/reagent_containers/cup/bottle/ethanol{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/bottle/chlorine{ + pixel_x = 1 + }, +/obj/effect/turf_decal/bot, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/central) "fxO" = ( @@ -19000,22 +19034,6 @@ }, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/aft/upper) -"fyz" = ( -/obj/effect/turf_decal/bot, -/obj/structure/rack, -/obj/item/reagent_containers/cup/bottle/iron{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/item/reagent_containers/cup/bottle/lithium{ - pixel_x = 7; - pixel_y = 3 - }, -/obj/item/reagent_containers/cup/bottle/multiver{ - pixel_x = 1 - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/medical/medbay/central) "fyB" = ( /obj/structure/table/wood, /obj/item/paper_bin{ @@ -19452,7 +19470,7 @@ /area/station/command/cc_dock) "fFf" = ( /obj/effect/mapping_helpers/broken_floor, -/mob/living/basic/trooper/russian, +/mob/living/basic/trooper/syndicate/melee, /turf/open/floor/wood, /area/station/maintenance/rus_gambling) "fFg" = ( @@ -19769,10 +19787,9 @@ /area/station/maintenance/aft/upper) "fLC" = ( /obj/effect/turf_decal/trimline/yellow/filled/warning, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /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/iron/freezer, /area/station/medical/pharmacy) "fLX" = ( @@ -21714,7 +21731,7 @@ /turf/open/floor/iron/smooth_edge{ dir = 4 }, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "goS" = ( /turf/open/floor/iron/freezer, /area/station/medical/chemistry) @@ -21979,7 +21996,6 @@ /turf/closed/wall, /area/station/maintenance/disposal) "gta" = ( -/obj/effect/turf_decal/bot, /obj/structure/sign/poster/official/periodic_table/directional/north, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/central) @@ -22118,24 +22134,31 @@ /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/solars/port/fore) "gut" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, /obj/item/book/manual/wiki/chemistry{ - pixel_x = -4; + pixel_x = -13; pixel_y = 7 }, +/obj/structure/table/reinforced/rglass, /obj/item/book/manual/wiki/grenades{ - pixel_y = 3 + pixel_y = 3; + pixel_x = -7 }, -/obj/item/assembly/igniter, -/obj/item/assembly/timer{ +/obj/item/grenade/chem_grenade, +/obj/item/grenade/chem_grenade{ + pixel_x = -2 + }, +/obj/item/stack/cable_coil, +/obj/item/ph_meter{ + pixel_x = 12; + pixel_y = 6 + }, +/obj/item/stack/cable_coil{ pixel_x = 3; pixel_y = 3 }, -/obj/structure/table/reinforced/rglass, -/obj/item/ph_booklet{ - pixel_x = -15 +/obj/item/screwdriver, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 }, /turf/open/floor/iron/freezer, /area/station/medical/pharmacy) @@ -22712,7 +22735,7 @@ /area/station/security/detectives_office) "gDz" = ( /obj/structure/table/reinforced/rglass, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/item/radio/headset/headset_com{ pixel_x = -16 }, @@ -22927,7 +22950,7 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/skyrat_decals/enclave/top/left{ +/obj/effect/turf_decal/nova_decals/enclave/top/left{ color = "#52B4E9" }, /obj/effect/turf_decal/trimline/blue/corner, @@ -23659,6 +23682,10 @@ /area/station/maintenance/port/greater) "gQm" = ( /obj/effect/turf_decal/stripes/line, +/obj/structure/railing/corner, +/obj/structure/railing/corner{ + dir = 8 + }, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/pharmacy) "gQq" = ( @@ -24089,9 +24116,6 @@ dir = 8 }, /obj/machinery/duct, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/open/floor/iron/freezer, /area/station/medical/pharmacy) "gWN" = ( @@ -24118,7 +24142,7 @@ }, /obj/machinery/light/small/red/directional/east, /turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "gWV" = ( /obj/effect/turf_decal/trimline/yellow/filled/warning{ dir = 4 @@ -24341,6 +24365,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/air_sensor/engine_chamber, /turf/open/floor/engine, /area/station/engineering/supermatter) "haq" = ( @@ -25007,12 +25032,10 @@ /obj/structure/table, /obj/item/plate, /obj/effect/spawner/random/trash/food_packaging, -/obj/machinery/camera/directional/north{ - c_tag = "Mining Dock" - }, /obj/structure/cable, +/obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron/smooth_edge, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "hji" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -25797,7 +25820,7 @@ "hwG" = ( /obj/structure/bed/double, /obj/item/bedsheet/cmo/double, -/obj/item/storage/secure/safe/directional/north, +/obj/structure/secure_safe/directional/north, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/cmo) "hwL" = ( @@ -26493,7 +26516,7 @@ dir = 1 }, /turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; + icon = 'modular_nova/modules/advanced_shuttles/icons/erokez.dmi'; icon_state = "floor1" }, /area/space/nearstation) @@ -26626,10 +26649,10 @@ /obj/structure/chair/office/light{ dir = 1 }, -/obj/effect/landmark/start/chemist, /obj/effect/turf_decal/trimline/yellow/filled/warning{ dir = 1 }, +/obj/effect/landmark/start/chemist, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/pharmacy) "hGP" = ( @@ -26750,7 +26773,7 @@ }, /obj/structure/cable, /turf/open/floor/iron/smooth_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "hJx" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_burn_chamber_input{ dir = 4 @@ -26832,7 +26855,7 @@ /obj/structure/sign/poster/contraband/random/directional/north, /obj/effect/landmark/start/bitrunner, /turf/open/floor/iron/smooth, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "hKP" = ( /obj/item/reagent_containers/cup/bucket, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -27076,7 +27099,7 @@ }, /area/station/hallway/primary/central) "hPC" = ( -/obj/effect/turf_decal/skyrat_decals/enclave/bottom/left{ +/obj/effect/turf_decal/nova_decals/enclave/bottom/left{ color = "#52B4E9" }, /obj/effect/turf_decal/trimline/blue/corner{ @@ -27228,7 +27251,7 @@ }, /area/station/hallway/primary/aft) "hRn" = ( -/obj/item/storage/secure/safe/directional/west, +/obj/structure/secure_safe/directional/west, /obj/structure/dresser, /obj/item/toy/figure/ce{ pixel_y = 14 @@ -27849,7 +27872,7 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/skyrat_decals/enclave/middle/left{ +/obj/effect/turf_decal/nova_decals/enclave/middle/left{ color = "#52B4E9" }, /obj/effect/turf_decal/trimline/blue/line{ @@ -28474,7 +28497,6 @@ /obj/structure/chair/sofa/left/brown{ dir = 8 }, -/mob/living/basic/trooper/russian, /turf/open/floor/wood, /area/station/maintenance/rus_gambling) "ila" = ( @@ -29483,7 +29505,7 @@ pixel_x = -5 }, /obj/structure/table/wood, -/obj/item/storage/secure/safe/directional/east, +/obj/structure/secure_safe/directional/east, /obj/item/lighter{ color = "#d4af37"; desc = "Cap's Lucky Lighter. Given to him by NT staff for being the most capable person to secure the disk."; @@ -30460,7 +30482,7 @@ }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/textured_edge, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "iLH" = ( /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 4 @@ -30894,7 +30916,7 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/skyrat_decals/enclave/top/right{ +/obj/effect/turf_decal/nova_decals/enclave/top/right{ color = "#52B4E9" }, /obj/effect/turf_decal/trimline/blue/corner{ @@ -31278,7 +31300,7 @@ /obj/effect/turf_decal/tile/dark_red/half{ dir = 4 }, -/obj/item/storage/secure/safe/directional/east, +/obj/structure/secure_safe/directional/east, /obj/effect/turf_decal/delivery, /obj/effect/spawner/random/armory/bulletproof_armor, /turf/open/floor/engine, @@ -31650,11 +31672,14 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/radio/intercom/directional/west, /obj/machinery/firealarm/directional/west{ pixel_y = -16 }, /obj/structure/sink/directional/east, +/obj/structure/extinguisher_cabinet/directional/west{ + pixel_y = 2; + pixel_x = -28 + }, /turf/open/floor/iron/freezer, /area/station/medical/pharmacy) "jcf" = ( @@ -32612,7 +32637,7 @@ /area/station/medical/office) "jqL" = ( /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/skyrat_decals/enclave/middle/right{ +/obj/effect/turf_decal/nova_decals/enclave/middle/right{ color = "#52B4E9" }, /obj/effect/turf_decal/trimline/blue/line{ @@ -33043,7 +33068,7 @@ /turf/open/floor/iron/dark/textured_edge{ dir = 8 }, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "jvx" = ( /obj/structure/table/wood, /obj/item/food/breadslice/plain, @@ -33202,19 +33227,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/maintenance/aft/greater) -"jyi" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/edge{ - dir = 8 - }, -/area/station/hallway/primary/central/aft) "jyD" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -33525,6 +33537,10 @@ /obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden, /obj/machinery/airalarm/directional/west, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnanceburn" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/engine, /area/station/science/ordnance/burnchamber) "jCA" = ( @@ -33984,7 +34000,7 @@ dir = 4 }, /obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/skyrat_decals/enclave/bottom/left{ +/obj/effect/turf_decal/nova_decals/enclave/bottom/left{ color = "#52B4E9" }, /obj/effect/turf_decal/trimline/blue/corner{ @@ -34478,10 +34494,14 @@ /obj/effect/turf_decal/trimline/dark_red/filled/line{ dir = 4 }, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnancefreezer" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/smooth_edge{ dir = 8 }, -/area/station/science/ordnance/freezerchamber) +/area/station/science/ordnance) "jOG" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -35351,10 +35371,10 @@ /area/station/medical/break_room) "kcP" = ( /obj/machinery/holopad, -/obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/effect/turf_decal/bot, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/chemistry) "kcW" = ( @@ -35427,7 +35447,7 @@ /obj/machinery/light_switch/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "kek" = ( /obj/effect/turf_decal/trimline/neutral/filled/warning{ dir = 1 @@ -35547,13 +35567,15 @@ /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 6 }, -/obj/machinery/requests_console/directional/south{ - department = "Pharmacy"; - name = "Pharmacy Requests Console" +/obj/structure/table/reinforced/rglass, +/obj/machinery/light/cold/directional/east, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/science{ + pixel_y = 3 }, -/obj/effect/mapping_helpers/requests_console/ore_update, -/obj/structure/closet/secure_closet/medical1, -/obj/effect/turf_decal/bot, +/obj/item/radio/intercom/directional/east, /turf/open/floor/iron/freezer, /area/station/medical/pharmacy) "kgl" = ( @@ -35985,7 +36007,7 @@ /turf/open/floor/circuit/green, /area/station/ai_monitored/command/nuke_storage) "kmm" = ( -/mob/living/simple_animal/parrot/poly, +/mob/living/basic/parrot/poly, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/orange, @@ -36072,6 +36094,10 @@ dir = 8 }, /area/station/medical/medbay/central) +"kny" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/turf/open/floor/iron/freezer, +/area/station/medical/pharmacy) "knA" = ( /obj/structure/chair/wood, /obj/machinery/firealarm/directional/north, @@ -36389,7 +36415,7 @@ /turf/open/floor/iron/dark/textured_edge{ dir = 4 }, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "ksD" = ( /obj/effect/turf_decal/trimline/brown/filled/warning{ dir = 6 @@ -36890,39 +36916,14 @@ /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) "kyV" = ( -/obj/structure/table/reinforced, -/obj/item/folder/white{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/pen{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/trimline/yellow/filled/warning{ dir = 4 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/machinery/door/firedoor, -/obj/structure/desk_bell{ - pixel_x = 7; - pixel_y = 6 - }, -/obj/machinery/door/window/right/directional/west{ - name = "Pharmacy Desk"; - req_access = list("pharmacy") - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "chemistry_shutters"; - name = "Pharmacy Shutters" +/obj/effect/landmark/start/chemist, +/obj/structure/chair/office/light{ + dir = 4 }, -/turf/open/floor/iron/white/smooth_large, +/turf/open/floor/iron/dark/smooth_large, /area/station/medical/pharmacy) "kyY" = ( /obj/structure/disposalpipe/segment{ @@ -37221,9 +37222,6 @@ /turf/open/floor/iron/smooth, /area/station/maintenance/starboard/aft) "kCE" = ( -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 1 - }, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/corner{ dir = 1 @@ -37524,7 +37522,7 @@ /turf/open/floor/iron/smooth_corner{ dir = 4 }, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "kFS" = ( /obj/effect/mapping_helpers/airlock/access/all/science/rd, /obj/machinery/door/airlock/rd/glass{ @@ -39053,25 +39051,14 @@ /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 4 }, -/obj/machinery/status_display/evac/directional/east, /obj/structure/table/reinforced/rglass, -/obj/item/stack/ducts/fifty, -/obj/item/stack/ducts/fifty, -/obj/item/stack/ducts/fifty, -/obj/item/stack/ducts/fifty, -/obj/item/stack/ducts/fifty, -/obj/item/stack/ducts/fifty, -/obj/item/stack/ducts/fifty, -/obj/item/stack/ducts/fifty, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science, -/obj/item/screwdriver{ +/obj/item/stack/sheet/iron/fifty, +/obj/machinery/status_display/evac/directional/east, +/obj/item/stack/sheet/iron/fifty, +/obj/item/construction/plumbing{ pixel_y = 6 }, -/obj/item/storage/toolbox/mechanical, -/obj/item/clothing/head/utility/welding, +/obj/item/construction/plumbing, /turf/open/floor/iron/freezer, /area/station/medical/chemistry) "lbh" = ( @@ -39303,7 +39290,7 @@ /obj/machinery/netpod, /obj/machinery/light/small/blacklight/directional/west, /turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "leb" = ( /obj/structure/cable, /turf/open/floor/iron/smooth_large, @@ -39330,7 +39317,7 @@ /obj/machinery/quantum_server, /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "leI" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 5 @@ -40094,7 +40081,10 @@ /turf/open/floor/iron/white/diagonal, /area/station/science/research) "loL" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, /turf/open/floor/iron/white/smooth_edge{ dir = 1 }, @@ -41382,13 +41372,13 @@ /obj/effect/turf_decal/trimline/blue/corner{ dir = 1 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, /obj/structure/disposalpipe/junction/yjunction{ dir = 8 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/lobby) "lHx" = ( @@ -41624,7 +41614,7 @@ /area/station/commons/storage/primary) "lKw" = ( /obj/structure/table/reinforced, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_y = 4 }, /obj/item/taperecorder{ @@ -42164,14 +42154,22 @@ dir = 4 }, /obj/machinery/status_display/ai/directional/east, -/obj/structure/table/reinforced/rglass, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/construction/plumbing{ - pixel_y = 6 - }, -/obj/item/construction/plumbing, /obj/machinery/light/cold/directional/east, +/obj/structure/rack, +/obj/item/book/manual/wiki/chemistry{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/book/manual/wiki/grenades, +/obj/item/book/manual/wiki/plumbing{ + pixel_x = 4; + pixel_y = -4 + }, +/obj/item/plunger, +/obj/item/plunger{ + pixel_x = -9 + }, +/obj/effect/turf_decal/bot, /turf/open/floor/iron/freezer, /area/station/medical/chemistry) "lSs" = ( @@ -42459,15 +42457,11 @@ /obj/effect/turf_decal/trimline/blue/corner{ dir = 8 }, +/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/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 2; - name = "Pharmacy Junction" - }, -/obj/effect/mapping_helpers/mail_sorting/medbay/chemistry, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/lobby) "lVG" = ( @@ -43186,11 +43180,11 @@ /turf/open/floor/carpet/purple, /area/station/command/heads_quarters/rd) "mgm" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 8 }, /obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/white/smooth_edge, +/turf/open/floor/iron/white/smooth_large, /area/station/hallway/primary/central/aft) "mgt" = ( /obj/effect/turf_decal/trimline/green/filled/line{ @@ -44098,6 +44092,7 @@ pixel_y = 24 }, /obj/effect/mapping_helpers/broken_floor, +/mob/living/basic/trooper/syndicate/melee, /turf/open/floor/wood, /area/station/maintenance/rus_gambling) "muZ" = ( @@ -44422,12 +44417,8 @@ /turf/open/floor/engine, /area/station/engineering/main) "mAC" = ( -/obj/structure/chair/office/light{ - dir = 4 - }, -/obj/effect/landmark/start/chemist, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 4 +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/pharmacy) @@ -44517,19 +44508,15 @@ /obj/structure/sign/warning/no_smoking/circle/directional/north{ pixel_y = 28 }, -/obj/effect/turf_decal/bot, -/obj/structure/rack, -/obj/item/reagent_containers/cup/bottle/ethanol{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/item/reagent_containers/cup/bottle/carbon{ - pixel_x = 7; - pixel_y = 3 +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/beaker/large{ + pixel_y = 5 }, -/obj/item/reagent_containers/cup/bottle/chlorine{ - pixel_x = 1 +/obj/item/assembly/igniter, +/obj/item/reagent_containers/dropper{ + pixel_y = -4 }, +/obj/effect/turf_decal/bot, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/central) "mBF" = ( @@ -45090,7 +45077,9 @@ /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/department/medical/central) "mJB" = ( -/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, /turf/open/floor/iron/freezer, /area/station/medical/pharmacy) "mJC" = ( @@ -45843,7 +45832,7 @@ dir = 5 }, /turf/open/floor/iron/dark/textured, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "mUp" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/trash/mess, @@ -46257,6 +46246,28 @@ }, /turf/open/floor/iron/dark/smooth_edge, /area/station/security/office) +"mYW" = ( +/obj/machinery/button/door/directional/east{ + id = "chemistry_shutters_south"; + name = "Shutters Control"; + req_access = list("pharmacy") + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/chem_heater/withbuffer, +/turf/open/floor/iron/dark/smooth_large, +/area/station/medical/pharmacy) "mZe" = ( /obj/effect/turf_decal/trimline/dark_red/arrow_cw{ dir = 8 @@ -46612,7 +46623,7 @@ /turf/open/floor/iron/dark/smooth_large, /area/station/medical/morgue) "nfC" = ( -/mob/living/simple_animal/bot/cleanbot, +/mob/living/basic/bot/cleanbot, /obj/structure/railing, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/aisat_interior) @@ -46746,10 +46757,10 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 }, -/turf/open/floor/iron/dark/smooth_large, +/turf/open/floor/iron/freezer, /area/station/medical/pharmacy) "nhS" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible, @@ -46904,11 +46915,41 @@ /turf/open/floor/iron/dark/smooth_edge, /area/station/security/interrogation) "njQ" = ( -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 9 +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/structure/desk_bell{ + pixel_x = 7; + pixel_y = 6 }, -/turf/open/floor/iron/white, -/area/station/hallway/primary/central/aft) +/obj/item/folder/white{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "chemistry_shutters_south"; + name = "Pharmacy Shutters" + }, +/obj/machinery/door/window/right/directional/west{ + name = "Pharmacy Desk"; + req_access = list("pharmacy"); + dir = 4 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/pharmacy) "njV" = ( /obj/effect/turf_decal/trimline/dark_green/filled/line{ dir = 5 @@ -47310,7 +47351,7 @@ codes_txt = "patrol;next_patrol=hall17"; location = "hall16" }, -/obj/effect/turf_decal/skyrat_decals/enclave/bottom/middle{ +/obj/effect/turf_decal/nova_decals/enclave/bottom/middle{ color = "#52B4E9" }, /obj/effect/turf_decal/trimline/blue/line{ @@ -47444,7 +47485,7 @@ /obj/item/megaphone{ name = "The Judge's Megaphone" }, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/effect/turf_decal/bot, /turf/open/floor/wood/large, /area/station/security/courtroom) @@ -47554,7 +47595,7 @@ c_tag = "Bridge - Head of Personnel's Office"; name = "command camera" }, -/obj/item/storage/secure/safe/directional/east, +/obj/structure/secure_safe/directional/east, /obj/effect/landmark/start/head_of_personnel, /obj/machinery/button/door/directional/east{ id = "hopdoor"; @@ -47894,7 +47935,7 @@ pixel_y = 32 }, /turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; + icon = 'modular_nova/modules/advanced_shuttles/icons/erokez.dmi'; icon_state = "floor1" }, /area/space/nearstation) @@ -48483,7 +48524,7 @@ /turf/open/floor/iron/smooth_edge{ dir = 4 }, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "nGX" = ( /obj/structure/chair/sofa/right/brown{ dir = 8 @@ -48548,18 +48589,20 @@ /turf/open/floor/iron/smooth, /area/station/science/ordnance) "nIJ" = ( -/obj/item/reagent_containers/cup/beaker/large, -/obj/item/reagent_containers/cup/beaker/large, -/obj/item/reagent_containers/dropper, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 6 - }, -/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/trimline/yellow/filled/line, /obj/effect/turf_decal/trimline/yellow/filled/mid_joiner, -/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ - dir = 4 +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/obj/structure/table/reinforced/rglass, +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/airalarm/directional/south{ + pixel_x = 3; + pixel_y = -32 + }, +/obj/machinery/chem_master, +/obj/effect/turf_decal/bot_red, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/pharmacy) "nIK" = ( @@ -49841,6 +49884,12 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/command/heads_quarters/qm) +"nXW" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/freezer, +/area/station/medical/pharmacy) "nYc" = ( /obj/effect/turf_decal/tile/purple{ dir = 1 @@ -49876,7 +49925,7 @@ pixel_y = 17 }, /obj/structure{ - desc = "This is the ship we're on. It's amazing what Nanotrasen can do once they actually put more than ten seconds of effort into their projects."; + desc = "This is the ship we're on. It's amazing what Symphionia can do once they actually put more than ten seconds of effort into their projects."; icon = 'icons/obj/machines/shuttle_manipulator.dmi'; icon_state = "hologram_whiteship"; layer = 4; @@ -50643,7 +50692,7 @@ /turf/open/floor/iron/dark/textured_edge{ dir = 1 }, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "okG" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -50824,6 +50873,7 @@ dir = 4 }, /obj/structure/cable, +/obj/structure/barricade/wooden/crude, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/rus_gambling) "omT" = ( @@ -50850,19 +50900,14 @@ /area/station/service/chapel/office) "onJ" = ( /obj/effect/turf_decal/bot, -/obj/structure/rack, -/obj/item/reagent_containers/cup/bottle/phosphorus{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/item/reagent_containers/cup/bottle/potassium{ - pixel_x = 7; - pixel_y = 3 +/obj/machinery/light/cold/directional/south, +/obj/structure/table/glass, +/obj/item/storage/test_tube_rack{ + pixel_y = 10 }, -/obj/item/reagent_containers/cup/bottle/sodium{ - pixel_x = 1 +/obj/item/storage/test_tube_rack{ + pixel_y = 2 }, -/obj/machinery/light/cold/directional/south, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/central) "onK" = ( @@ -51137,12 +51182,12 @@ /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 6 }, -/obj/machinery/disposal/bin, /obj/effect/turf_decal/box, /obj/structure/disposalpipe/trunk{ dir = 8 }, /obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/disposal/bin, /turf/open/floor/iron/freezer, /area/station/medical/chemistry) "oru" = ( @@ -51188,7 +51233,7 @@ /turf/open/floor/iron/smooth_large, /area/station/engineering/atmos) "orN" = ( -/obj/effect/turf_decal/skyrat_decals/enclave/top/left{ +/obj/effect/turf_decal/nova_decals/enclave/top/left{ color = "#52B4E9" }, /obj/effect/turf_decal/trimline/blue/corner, @@ -51427,9 +51472,9 @@ /turf/open/floor/iron/smooth, /area/station/security/checkpoint/supply) "ovo" = ( -/obj/structure/closet/secure_closet/nanotrasen_consultant/station, +/obj/structure/closet/secure_closet/nanotrasen_consultant, /obj/item/clothing/accessory/medal/gold/ordom, -/obj/item/storage/secure/briefcase/white, +/obj/item/storage/briefcase/secure/white, /obj/item/clothing/gloves/combat/naval, /obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes/line{ @@ -51567,7 +51612,7 @@ }, /obj/effect/landmark/start/bitrunner, /turf/open/floor/iron/dark/textured, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "oxv" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/disposalpipe/segment{ @@ -52250,7 +52295,7 @@ /obj/machinery/light/small/directional/east, /obj/structure/sign/poster/contraband/random/directional/east, /turf/open/floor/iron/smooth, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "oHc" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -52424,7 +52469,7 @@ /area/station/hallway/secondary/construction) "oJI" = ( /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/skyrat_decals/enclave/top/right{ +/obj/effect/turf_decal/nova_decals/enclave/top/right{ color = "#52B4E9" }, /obj/effect/turf_decal/trimline/blue/corner{ @@ -53111,7 +53156,7 @@ /obj/machinery/firealarm/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "oUl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -53420,7 +53465,7 @@ /turf/closed/wall, /area/station/cargo/miningdock) "oXL" = ( -/obj/item/storage/secure/safe/directional/east, +/obj/structure/secure_safe/directional/east, /obj/structure/dresser, /obj/item/toy/figure/captain{ pixel_y = 12 @@ -54786,6 +54831,7 @@ c_tag = "Aft Central Primary Hallway - Fore"; name = "hallway camera" }, +/obj/machinery/door/firedoor, /turf/open/floor/iron/edge{ dir = 8 }, @@ -54905,7 +54951,7 @@ /obj/structure/sign/poster/contraband/random/directional/west, /obj/effect/landmark/start/bitrunner, /turf/open/floor/iron/smooth, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "pql" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, @@ -55581,23 +55627,17 @@ }, /area/station/engineering/atmos) "pAK" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/obj/machinery/chem_master, -/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ - dir = 4 - }, -/obj/machinery/button/door/directional/east{ - id = "chemistry_shutters"; - name = "Shutters Control"; - req_access = list("pharmacy") - }, -/obj/effect/turf_decal/bot_red, /obj/effect/turf_decal/stripes/line{ - dir = 1 + dir = 9 }, -/obj/machinery/light/cold/directional/east, +/obj/structure/railing{ + dir = 9; + layer = 3.1 + }, +/obj/structure/table/reinforced/rglass, +/obj/item/reagent_containers/cup/beaker/large, +/obj/item/reagent_containers/cup/beaker/large, +/obj/item/reagent_containers/dropper, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/pharmacy) "pAZ" = ( @@ -55836,6 +55876,14 @@ /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) "pDV" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4; + pixel_x = -5 + }, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, /turf/open/floor/iron/white/smooth_large, /area/station/hallway/primary/central/aft) "pEi" = ( @@ -55932,7 +55980,7 @@ /obj/structure/railing, /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/smooth, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "pGh" = ( /turf/open/floor/iron/white/smooth_large, /area/station/hallway/primary/fore) @@ -56207,11 +56255,11 @@ /turf/open/floor/iron/dark/smooth_large, /area/station/service/hydroponics) "pKg" = ( +/obj/effect/turf_decal/bot, /obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 + dir = 5 }, -/obj/machinery/chem_mass_spec, -/obj/effect/turf_decal/bot, +/obj/structure/closet/secure_closet/medical1, /turf/open/floor/iron/freezer, /area/station/medical/pharmacy) "pKl" = ( @@ -56259,18 +56307,6 @@ "pKD" = ( /obj/structure/extinguisher_cabinet/directional/north, /obj/effect/turf_decal/bot, -/obj/structure/rack, -/obj/item/reagent_containers/cup/bottle/basic_buffer{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/item/reagent_containers/cup/bottle/acidic_buffer{ - pixel_x = 7; - pixel_y = 3 - }, -/obj/item/reagent_containers/cup/bottle/formaldehyde{ - pixel_x = 1 - }, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/central) "pKM" = ( @@ -56446,11 +56482,11 @@ /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) "pNq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/trimline/blue/filled/warning, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/smooth_edge{ dir = 1 }, @@ -56546,14 +56582,13 @@ /obj/machinery/door/airlock/mining/glass{ name = "Delivery Office" }, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining, -/obj/effect/mapping_helpers/airlock/access/any/supply/shipping, /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/mapping_helpers/airlock/access/any/supply/general, /turf/open/floor/iron/smooth_large, /area/station/cargo/sorting) "pOW" = ( @@ -57729,16 +57764,6 @@ /obj/structure/table/reinforced, /turf/open/floor/iron/dark/smooth_large, /area/station/ai_monitored/command/storage/eva) -"qcl" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/obj/structure/sign/departments/chemistry/pharmacy/directional/west, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/edge{ - dir = 4 - }, -/area/station/hallway/primary/central/aft) "qcq" = ( /obj/effect/turf_decal/trimline/yellow/filled/warning{ dir = 4 @@ -58054,17 +58079,7 @@ /turf/open/floor/iron/smooth_edge{ dir = 1 }, -/area/station/bitrunning/den) -"qha" = ( -/obj/machinery/chem_heater/withbuffer, -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner, -/obj/effect/turf_decal/bot_red, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron/dark/smooth_large, -/area/station/medical/pharmacy) +/area/station/cargo/bitrunning/den) "qhe" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -58177,7 +58192,7 @@ pixel_y = 6 }, /turf/open/floor/engine, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "qhX" = ( /obj/effect/landmark/start/medical_doctor, /obj/structure/curtain, @@ -59488,7 +59503,7 @@ "qBt" = ( /obj/machinery/netpod, /turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "qBA" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -59969,6 +59984,19 @@ /obj/effect/turf_decal/bot, /turf/open/floor/circuit/green/telecomms/mainframe, /area/station/tcommsat/server) +"qIw" = ( +/obj/effect/landmark/start/assistant, +/obj/structure/chair/sofa/bench/left{ + dir = 4; + pixel_x = -5 + }, +/obj/machinery/light/cold/directional/west, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/sign/poster/official/moth_epi/directional/west, +/turf/open/floor/iron/white/smooth_large, +/area/station/hallway/primary/central/aft) "qIx" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -60202,7 +60230,7 @@ /area/station/medical/virology) "qLu" = ( /obj/effect/decal/cleanable/blood/old, -/mob/living/basic/trooper/russian, +/mob/living/basic/trooper/syndicate/melee/sword, /turf/open/floor/wood, /area/station/maintenance/rus_gambling) "qLy" = ( @@ -61790,7 +61818,6 @@ /turf/open/floor/iron/dark/small, /area/station/security/prison/work) "rjs" = ( -/obj/effect/turf_decal/bot, /obj/machinery/button/door/directional/south{ id = "ChemStorage"; name = "Shutter Control"; @@ -62065,13 +62092,10 @@ dir = 6 }, /obj/structure/trash_pile, -/obj/item/clothing/suit/costume/wellworn_shirt/messy/graphic{ - pixel_x = -5; - pixel_y = 5 - }, /obj/structure/sign/poster/contraband/random/directional/east, +/obj/machinery/camera/autoname/directional/east, /turf/open/floor/iron/dark/textured, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "rne" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, @@ -62875,7 +62899,7 @@ pixel_x = -3; pixel_y = 2 }, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_x = 2; pixel_y = -2 }, @@ -63458,14 +63482,20 @@ /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 9 }, -/obj/item/stack/sheet/mineral/plasma{ - pixel_y = 3 - }, /obj/structure/sign/poster/official/periodic_table/directional/north, +/obj/machinery/light/cold/directional/north, /obj/structure/table/reinforced/rglass, /obj/machinery/reagentgrinder{ pixel_y = 7 }, +/obj/item/ph_booklet{ + pixel_x = -7; + pixel_y = -2 + }, +/obj/item/stack/sheet/mineral/plasma{ + pixel_y = -5; + pixel_x = 2 + }, /turf/open/floor/iron/freezer, /area/station/medical/pharmacy) "rIF" = ( @@ -64669,7 +64699,7 @@ /turf/open/floor/iron/cafeteria, /area/station/service/cafeteria) "sbH" = ( -/obj/effect/turf_decal/skyrat_decals/enclave/bottom/middle{ +/obj/effect/turf_decal/nova_decals/enclave/bottom/middle{ color = "#52B4E9" }, /obj/effect/turf_decal/trimline/blue/line{ @@ -64967,7 +64997,7 @@ /area/station/service/library) "sgk" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating, /area/station/maintenance/port/greater) @@ -65545,7 +65575,7 @@ /turf/open/floor/plating, /area/station/medical/virology) "soZ" = ( -/obj/effect/turf_decal/skyrat_decals/enclave/top/middle{ +/obj/effect/turf_decal/nova_decals/enclave/top/middle{ color = "#52B4E9" }, /obj/effect/turf_decal/trimline/blue/line, @@ -65621,19 +65651,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/medical/break_room) -"spF" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4; - pixel_x = -5 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron/white/smooth_edge{ - dir = 4 - }, -/area/station/hallway/primary/central/aft) "spI" = ( /obj/structure/flora/grass/jungle, /obj/structure/flora/bush/grassy, @@ -65974,7 +65991,7 @@ /obj/structure/chair/stool/directional/north{ pixel_y = 6 }, -/mob/living/basic/trooper/russian, +/mob/living/basic/trooper/syndicate/melee, /turf/open/floor/wood, /area/station/maintenance/rus_gambling) "svC" = ( @@ -66441,14 +66458,15 @@ pixel_x = 7; pixel_y = 6 }, -/obj/machinery/door/window/left/directional/south{ - name = "Pharmacy Desk"; - req_access = list("pharmacy") - }, /obj/machinery/door/poddoor/shutters/preopen{ id = "chemistry_shutters"; name = "Pharmacy Shutters" }, +/obj/machinery/door/window/left/directional/south{ + name = "Pharmacy Desk"; + req_access = list("pharmacy"); + dir = 1 + }, /turf/open/floor/iron/white/smooth_large, /area/station/medical/pharmacy) "sCQ" = ( @@ -67250,7 +67268,9 @@ /area/station/service/janitor) "sLk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, /turf/open/floor/iron/freezer, /area/station/medical/pharmacy) "sLq" = ( @@ -67391,16 +67411,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/freezer, /area/station/medical/chemistry) -"sMm" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/obj/structure/closet/secure_closet/chemical, -/obj/item/storage/box/syringes, -/obj/item/storage/box/beakers, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/freezer, -/area/station/medical/pharmacy) "sMs" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 6 @@ -67982,9 +67992,8 @@ /turf/open/floor/iron/smooth_large, /area/station/cargo/sorting) "sUt" = ( -/obj/machinery/holopad, /obj/effect/turf_decal/bot, -/obj/machinery/duct, +/obj/machinery/holopad, /turf/open/floor/iron/freezer, /area/station/medical/pharmacy) "sUu" = ( @@ -68176,16 +68185,6 @@ /obj/item/reagent_containers/cup/glass/shaker, /turf/open/floor/iron, /area/station/service/bar) -"sWj" = ( -/obj/machinery/chem_dispenser{ - layer = 2.7 - }, -/obj/effect/turf_decal/bot_red, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/iron/dark/smooth_large, -/area/station/medical/pharmacy) "sWB" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/tank_holder/extinguisher, @@ -68743,7 +68742,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, -/obj/item/storage/secure/safe/hos{ +/obj/structure/secure_safe/hos{ pixel_x = 32 }, /obj/effect/landmark/start/head_of_security, @@ -68818,10 +68817,20 @@ /turf/open/floor/iron/kitchen, /area/station/service/kitchen/abandoned) "tfc" = ( -/obj/item/storage/toolbox/mechanical, -/obj/item/reagent_containers/spray/cleaner, /obj/item/radio/intercom/directional/east, -/obj/structure/table/glass, +/obj/structure/rack/shelf, +/obj/item/reagent_containers/cup/bottle/potassium{ + pixel_x = 7; + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/bottle/phosphorus{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/bottle/sodium{ + pixel_x = 1 + }, +/obj/effect/turf_decal/bot, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/central) "tfi" = ( @@ -69390,6 +69399,9 @@ /obj/effect/decal/cleanable/greenglow, /turf/open/floor/iron/smooth, /area/station/maintenance/aft/lesser) +"tnx" = ( +/turf/closed/wall, +/area/station/hallway/primary/central/aft) "tnD" = ( /obj/machinery/power/solar_control{ dir = 4; @@ -70002,25 +70014,28 @@ /turf/open/floor/iron/dark/smooth_large, /area/station/maintenance/disposal/incinerator) "tvg" = ( +/obj/item/radio/intercom/directional/east, /obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/obj/structure/rack, -/obj/item/book/manual/wiki/chemistry{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/book/manual/wiki/grenades, -/obj/item/book/manual/wiki/plumbing{ - pixel_x = 4; - pixel_y = -4 + dir = 5 }, -/obj/item/radio/intercom/directional/east, -/obj/effect/turf_decal/bot, -/obj/item/plunger{ - pixel_x = -9 +/obj/structure/table/reinforced/rglass, +/obj/item/stack/ducts/fifty, +/obj/item/stack/ducts/fifty, +/obj/item/stack/ducts/fifty, +/obj/item/stack/ducts/fifty, +/obj/item/stack/ducts/fifty, +/obj/item/stack/ducts/fifty, +/obj/item/stack/ducts/fifty, +/obj/item/stack/ducts/fifty, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/screwdriver{ + pixel_y = 6 }, -/obj/item/plunger, +/obj/item/storage/toolbox/mechanical, +/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/science, +/obj/item/clothing/head/utility/welding, /turf/open/floor/iron/freezer, /area/station/medical/chemistry) "tvm" = ( @@ -70167,14 +70182,16 @@ /turf/open/floor/iron/white/smooth_large, /area/station/commons/fitness/recreation/entertainment) "twU" = ( -/obj/machinery/chem_heater/withbuffer, -/obj/effect/turf_decal/bot_red, /obj/effect/turf_decal/stripes/line{ dir = 10 }, -/obj/structure/disposalpipe/segment{ +/obj/structure/railing{ dir = 10 }, +/obj/item/reagent_containers/cup/beaker/large, +/obj/item/reagent_containers/cup/beaker/large, +/obj/item/reagent_containers/dropper, +/obj/structure/table/reinforced/rglass, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/pharmacy) "twX" = ( @@ -70491,15 +70508,16 @@ /turf/open/floor/iron, /area/station/service/bar) "tAr" = ( -/obj/structure/chair/office/light{ - dir = 8 - }, /obj/effect/turf_decal/trimline/yellow/filled/warning{ dir = 8 }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/obj/structure/chair/office/light{ + dir = 8 + }, /turf/open/floor/iron/freezer, /area/station/medical/pharmacy) "tAw" = ( @@ -70799,7 +70817,7 @@ }, /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/smooth, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "tEK" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/hidden{ dir = 10 @@ -71071,12 +71089,11 @@ }, /area/station/hallway/primary/fore) "tIS" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, /obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, /turf/open/floor/iron/edge{ dir = 4 }, @@ -71265,7 +71282,7 @@ /area/station/engineering/atmos) "tLD" = ( /obj/structure/bed/dogbed/runtime, -/mob/living/simple_animal/pet/cat/runtime{ +/mob/living/basic/pet/cat/runtime{ icon_dead = "original_dead"; icon_living = "original"; icon_state = "original" @@ -71418,7 +71435,7 @@ /obj/effect/landmark/start/bitrunner, /obj/structure/cable, /turf/open/floor/iron/smooth_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "tOr" = ( /obj/effect/spawner/liquids_spawner, /obj/machinery/light/cold/directional/south, @@ -71616,12 +71633,12 @@ /obj/effect/turf_decal/trimline/yellow/filled/corner{ dir = 1 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, +/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/freezer, /area/station/medical/pharmacy) "tRQ" = ( @@ -72034,15 +72051,7 @@ /turf/open/floor/iron/smooth, /area/station/command/cc_dock) "tZj" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/obj/machinery/requests_console/directional/east{ - department = "Chemistry"; - name = "Chemistry Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/machinery/light/cold/directional/east, +/obj/effect/turf_decal/trimline/yellow/filled/corner, /turf/open/floor/iron/freezer, /area/station/medical/chemistry) "tZu" = ( @@ -72313,9 +72322,19 @@ /turf/open/floor/iron/dark/diagonal, /area/station/hallway/primary/fore) "ucx" = ( +/obj/structure/rack/shelf, +/obj/item/reagent_containers/cup/bottle/nitrogen{ + pixel_x = 7; + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/bottle/mercury{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/bottle/oxygen{ + pixel_x = 1 + }, /obj/effect/turf_decal/bot, -/obj/item/assembly/igniter, -/obj/structure/table/glass, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/central) "ucB" = ( @@ -73571,7 +73590,7 @@ /area/station/commons/fitness/recreation/entertainment) "utq" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) @@ -74421,7 +74440,7 @@ /obj/structure/table/wood/fancy/royalblue, /obj/machinery/light/warm/directional/north, /obj/item/folder/syndicate{ - desc = "A folder stamped \"Top Secret - Property of Nanotrasen.\""; + desc = "A folder stamped \"Top Secret - Property of Symphionia.\""; pixel_y = 4 }, /obj/item/pen/fourcolor{ @@ -74576,11 +74595,11 @@ /obj/effect/turf_decal/trimline/blue/line{ dir = 8 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/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, -/obj/structure/disposalpipe/segment, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/lobby) "uGy" = ( @@ -74851,6 +74870,9 @@ /area/station/ai_monitored/turret_protected/ai) "uKE" = ( /obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, /turf/open/floor/iron/white/smooth_large, /area/station/hallway/primary/central/aft) "uKL" = ( @@ -74990,29 +75012,6 @@ /obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_ordmix, /turf/open/floor/engine, /area/station/science/ordnance/burnchamber) -"uMt" = ( -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/grenade/chem_grenade, -/obj/item/grenade/chem_grenade{ - pixel_x = -2 - }, -/obj/item/screwdriver, -/obj/item/stack/package_wrap{ - pixel_y = 16 - }, -/obj/item/hand_labeler{ - pixel_y = 16 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/table/reinforced/rglass, -/turf/open/floor/iron/freezer, -/area/station/medical/pharmacy) "uMy" = ( /obj/effect/landmark/start/hangover, /turf/open/floor/iron/large, @@ -75323,7 +75322,7 @@ dir = 1 }, /turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; + icon = 'modular_nova/modules/advanced_shuttles/icons/erokez.dmi'; icon_state = "floor1" }, /area/space/nearstation) @@ -75334,6 +75333,11 @@ }, /turf/open/floor/iron/small, /area/station/hallway/primary/central) +"uQI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/pod, +/turf/open/floor/wood, +/area/station/maintenance/rus_gambling) "uQV" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/aisat/service) @@ -75658,7 +75662,7 @@ "uVw" = ( /obj/structure/trash_pile, /turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "uVG" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -77540,7 +77544,7 @@ /obj/machinery/holopad, /obj/effect/turf_decal/trimline/brown/filled/corner, /turf/open/floor/iron/smooth_corner, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "vxv" = ( /mob/living/basic/butterfly, /turf/closed/wall/mineral/iron, @@ -77928,7 +77932,7 @@ pixel_y = 13 }, /obj/item/phone{ - desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; + desc = "Supposedly a direct line to Symphionia Conglomeration of Colonists. It's not even plugged in."; pixel_x = 7; pixel_y = -3 }, @@ -78680,7 +78684,7 @@ "vOd" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/wood, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/item/grenade/smokebomb, /obj/effect/turf_decal/siding/wood/end{ dir = 8 @@ -79202,9 +79206,6 @@ /turf/open/floor/iron/large, /area/station/hallway/primary/fore) "vVO" = ( -/obj/item/reagent_containers/cup/beaker/large, -/obj/item/reagent_containers/cup/beaker/large, -/obj/item/reagent_containers/dropper, /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 }, @@ -79219,12 +79220,11 @@ /obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ dir = 1 }, -/obj/item/ph_meter{ - pixel_x = -15; - pixel_y = 6 +/obj/structure/railing{ + dir = 8 }, -/obj/structure/table/reinforced/rglass, -/obj/machinery/light/cold/directional/north, +/obj/effect/turf_decal/bot_red, +/obj/machinery/chem_heater/withbuffer, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/pharmacy) "vVT" = ( @@ -79758,7 +79758,7 @@ /turf/closed/wall, /area/station/commons/fitness/recreation/entertainment) "wcq" = ( -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_x = 1; pixel_y = 4 }, @@ -79924,7 +79924,7 @@ "wfp" = ( /obj/structure/closet, /obj/structure/window/spawner/directional/south, -/obj/item/clothing/under/costume/skyrat/bathrobe, +/obj/item/clothing/under/costume/nova/bathrobe, /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, /obj/effect/turf_decal/bot, @@ -79987,6 +79987,16 @@ }, /turf/open/floor/iron/smooth, /area/station/engineering/atmos) +"wga" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/edge{ + dir = 4 + }, +/area/station/hallway/primary/central/aft) "wgl" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 8 @@ -80157,6 +80167,10 @@ }, /obj/machinery/airalarm/directional/west, /obj/effect/mapping_helpers/airalarm/engine_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "engine" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/engine, /area/station/engineering/supermatter) "wjk" = ( @@ -81089,14 +81103,12 @@ /area/station/cargo/sorting) "wwr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/glasses/science{ - pixel_y = 3 +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 }, -/obj/item/clothing/glasses/science, -/obj/structure/disposalpipe/segment, -/obj/structure/table/reinforced/rglass, +/obj/structure/closet/secure_closet/chemical, +/obj/item/storage/box/syringes, +/obj/item/storage/box/beakers, /turf/open/floor/iron/freezer, /area/station/medical/pharmacy) "wwA" = ( @@ -81801,9 +81813,6 @@ /turf/open/floor/iron/smooth_large, /area/station/engineering/atmos) "wEK" = ( -/obj/machinery/chem_dispenser{ - layer = 2.7 - }, /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 4 }, @@ -81812,6 +81821,8 @@ }, /obj/effect/turf_decal/bot_red, /obj/effect/turf_decal/stripes/line, +/obj/structure/railing, +/obj/machinery/chem_master, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/pharmacy) "wEO" = ( @@ -81871,7 +81882,7 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/skyrat_decals/enclave/bottom/right{ +/obj/effect/turf_decal/nova_decals/enclave/bottom/right{ color = "#52B4E9" }, /obj/effect/turf_decal/trimline/blue/corner{ @@ -82225,9 +82236,9 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 }, -/obj/structure/sign/poster/official/moth_epi/directional/west, /obj/structure/disposalpipe/segment, /obj/machinery/light/directional/west, +/obj/structure/sign/departments/chemistry/pharmacy/directional/west, /turf/open/floor/iron/edge{ dir = 4 }, @@ -82339,13 +82350,13 @@ /turf/open/floor/iron/dark/smooth_large, /area/station/command/heads_quarters/qm) "wMl" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 1 }, /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/white/smooth_edge, /area/station/medical/medbay/lobby) "wMm" = ( @@ -82830,7 +82841,7 @@ dir = 10 }, /obj/structure/table/wood, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_x = 5; pixel_y = 5 }, @@ -83041,7 +83052,7 @@ /obj/effect/spawner/structure/window/reinforced, /obj/structure/curtain/bounty/start_closed, /turf/open/floor/plating, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "wYo" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -83675,11 +83686,8 @@ /turf/open/floor/iron/smooth_large, /area/station/maintenance/department/medical) "xkq" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 10 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/white, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating/airless, /area/station/hallway/primary/central/aft) "xkA" = ( /obj/structure/disposalpipe/junction{ @@ -83932,11 +83940,21 @@ /turf/closed/wall/r_wall, /area/station/security/checkpoint/engineering) "xnP" = ( -/obj/machinery/smartfridge/chemistry/preloaded, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "chemistry_shutters"; - name = "Pharmacy Shutters" +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/requests_console/directional/south{ + department = "Pharmacy"; + name = "Pharmacy Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/ore_update, +/obj/effect/turf_decal/bot_red, +/obj/machinery/chem_dispenser{ + layer = 2.7 }, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/pharmacy) @@ -85369,12 +85387,13 @@ /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 10 }, -/obj/machinery/vending/wardrobe/chem_wardrobe, /obj/structure/sign/warning/chem_diamond/directional/west, -/obj/item/toy/figure/chemist{ - pixel_y = 18 +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/box, +/obj/structure/disposalpipe/trunk{ + dir = 1 }, -/obj/effect/turf_decal/bot, +/obj/machinery/light/warm/directional/west, /turf/open/floor/iron/freezer, /area/station/medical/pharmacy) "xHW" = ( @@ -85844,7 +85863,7 @@ /obj/structure/disposalpipe/junction{ dir = 8 }, -/obj/effect/turf_decal/skyrat_decals/enclave/bottom/right{ +/obj/effect/turf_decal/nova_decals/enclave/bottom/right{ color = "#52B4E9" }, /obj/effect/turf_decal/trimline/blue/corner{ @@ -86052,6 +86071,22 @@ }, /turf/open/floor/iron/smooth_large, /area/station/engineering/atmos/hfr_room) +"xSD" = ( +/obj/structure/rack/shelf, +/obj/item/reagent_containers/cup/bottle/lithium{ + pixel_x = 7; + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/bottle/iron{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/bottle/multiver{ + pixel_x = 1 + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/medbay/central) "xSK" = ( /turf/open/floor/iron/large, /area/station/commons/storage/primary) @@ -87143,6 +87178,18 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark/smooth_large, /area/station/commons/fitness/recreation/entertainment) +"yjP" = ( +/obj/machinery/requests_console/directional/east{ + department = "Chemistry"; + name = "Chemistry Requests Console" + }, +/obj/machinery/light/cold/directional/east, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/effect/mapping_helpers/requests_console/ore_update, +/turf/open/floor/iron/freezer, +/area/station/medical/chemistry) "yjU" = ( /obj/machinery/computer/slot_machine, /obj/effect/turf_decal/siding/wood{ @@ -87281,7 +87328,6 @@ /turf/open/floor/wood/large, /area/station/command/heads_quarters/rd) "ylT" = ( -/obj/machinery/chem_master, /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 5 }, @@ -87300,6 +87346,9 @@ req_access = list("pharmacy") }, /obj/effect/turf_decal/bot_red, +/obj/machinery/chem_dispenser{ + layer = 2.7 + }, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/pharmacy) @@ -115976,7 +116025,7 @@ dNH abQ pKD stN -fyz +xOU fzP aUc qoG @@ -116745,9 +116794,9 @@ iJn rrm kFJ abQ -xOU +bNE lol -xOU +xSD fzP ofd mtY @@ -119310,13 +119359,13 @@ uQf jLi aAN gut -uMt +nXW sLk sUt -cXE -sWj +kny +nXW nhR -qha +cwd iyx vXr goS @@ -119575,15 +119624,15 @@ pAK mAC nIJ ifq -aVZ -yiT +vXr +goS tZj +yiT +yiT +yiT uUT goS goS -goS -goS -goS aAz yiT bFv @@ -119828,13 +119877,13 @@ gQm fft ayp daB -fDn +mYW kyV xnP ifq -jjf -jjf -fiN +fvW +yiT +yjP lCA kcP xqA @@ -120083,15 +120132,15 @@ rUf ylT wEK pKg -sMm +nXW kgk fDn njQ dPv eEq -spF xkq -jjf +xkq +fiN sNW lLk xgA @@ -120342,10 +120391,10 @@ jfX eaM eaM fDn -fDn +tnx mgm uKE -pDV +qIw pDV loL fiN @@ -120598,7 +120647,7 @@ jvu jvu jvu jvu -qcl +wga tIS kCE jtf @@ -120855,8 +120904,8 @@ shZ gei gei gei -gei ocf +gei qtQ gei shZ @@ -121113,7 +121162,7 @@ xru rfG iYf poe -jyi +rfG rfG uVe rfG @@ -128027,7 +128076,7 @@ tDO wkm gDf djz -iAj +uQI ykh wtQ yep @@ -128282,7 +128331,7 @@ pzh ykh fop qLu -gDf +bfi pBo aWR ykh diff --git a/_maps/map_files/debug/runtimestation.dmm b/_maps/map_files/debug/runtimestation.dmm index 5e96a1d007696f..0638947a9acac6 100644 --- a/_maps/map_files/debug/runtimestation.dmm +++ b/_maps/map_files/debug/runtimestation.dmm @@ -634,6 +634,26 @@ }, /turf/closed/wall/r_wall, /area/station/medical/medbay) +"cH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/obj/structure/table, +/obj/item/gun/magic/wand/resurrection/debug, +/obj/item/gun/magic/wand/death/debug{ + pixel_y = 10 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/item/debug/human_spawner{ + pixel_x = 6; + pixel_y = -4 + }, +/turf/open/floor/iron/white/corner{ + dir = 1 + }, +/area/station/medical/medbay) "cI" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, @@ -916,6 +936,12 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) +"dQ" = ( +/obj/structure/table, +/obj/machinery/light/directional/south, +/obj/item/debug/human_spawner, +/turf/open/floor/iron, +/area/station/commons/storage/primary) "dR" = ( /obj/machinery/light/directional/west, /turf/open/floor/iron, @@ -1731,9 +1757,10 @@ }, /turf/open/floor/iron, /area/station/medical/chemistry) -"hU" = ( -/turf/open/floor/circuit/green, -/area/station/bitrunning/den) +"ib" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/cargo/bitrunning/den) "ii" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -1756,9 +1783,6 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos) -"jR" = ( -/turf/open/floor/iron, -/area/station/bitrunning/den) "jU" = ( /obj/structure/table, /obj/item/melee/energy/axe, @@ -1795,6 +1819,13 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/main) +"lE" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/airalarm/directional/east, +/obj/machinery/computer/quantum_console, +/turf/open/floor/iron, +/area/station/cargo/bitrunning/den) "lH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 6 @@ -1818,6 +1849,11 @@ /obj/machinery/chem_mass_spec, /turf/open/floor/iron, /area/station/medical/chemistry) +"mV" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/turf/open/floor/iron, +/area/station/cargo/bitrunning/den) "nn" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 @@ -1863,14 +1899,13 @@ /obj/machinery/door/airlock/external/glass/ruin, /turf/open/floor/plating, /area/station/medical/medbay) +"pK" = ( +/turf/open/floor/iron, +/area/station/cargo/bitrunning/den) "qb" = ( /obj/machinery/door/airlock, /turf/open/floor/plating, /area/station/engineering/atmos) -"qp" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/bitrunning/den) "qx" = ( /obj/machinery/airalarm/directional/west, /obj/effect/mapping_helpers/airalarm/unlocked, @@ -1897,6 +1932,13 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) +"rM" = ( +/obj/machinery/quantum_server, +/turf/open/floor/iron, +/area/station/cargo/bitrunning/den) +"rS" = ( +/turf/open/floor/circuit/green, +/area/station/cargo/bitrunning/den) "sr" = ( /obj/machinery/door/airlock/shell, /turf/open/floor/iron/dark, @@ -1942,9 +1984,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/plating, /area/station/engineering/atmos) -"uI" = ( -/turf/closed/wall/r_wall, -/area/station/bitrunning/den) "uO" = ( /obj/machinery/door/airlock/public/glass, /obj/structure/cable, @@ -2045,26 +2084,10 @@ }, /turf/open/floor/iron, /area/station/science) -"AS" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/table, -/obj/item/gun/magic/wand/resurrection/debug, -/obj/item/gun/magic/wand/death/debug{ - pixel_y = 10 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/item/debug/human_spawner{ - pixel_x = 6; - pixel_y = -4 - }, -/turf/open/floor/iron/white/corner{ - dir = 1 - }, -/area/station/medical/medbay) +"Ba" = ( +/obj/machinery/netpod, +/turf/open/floor/iron, +/area/station/cargo/bitrunning/den) "BD" = ( /obj/structure/closet/secure_closet/chief_medical{ locked = 0 @@ -2085,10 +2108,10 @@ /obj/structure/closet/syndicate/resources/everything, /turf/open/floor/iron, /area/station/science) -"CD" = ( +"Cz" = ( /obj/structure/cable, /turf/open/floor/iron, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "CQ" = ( /obj/machinery/light/directional/south, /obj/effect/turf_decal/stripes/line{ @@ -2182,17 +2205,6 @@ /obj/effect/mapping_helpers/airalarm/unlocked, /turf/open/floor/iron, /area/station/command/bridge) -"FW" = ( -/obj/machinery/byteforge, -/turf/open/floor/circuit/green, -/area/station/bitrunning/den) -"Ht" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 - }, -/obj/item/storage/part_replacer/bluespace/tier4, -/turf/open/floor/iron, -/area/station/bitrunning/den) "HW" = ( /obj/machinery/airalarm/directional/east, /obj/effect/mapping_helpers/airalarm/unlocked, @@ -2217,10 +2229,6 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron, /area/station/command/bridge) -"IB" = ( -/obj/machinery/quantum_server, -/turf/open/floor/iron, -/area/station/bitrunning/den) "IH" = ( /obj/structure/closet/secure_closet/engineering_welding{ locked = 0 @@ -2254,6 +2262,13 @@ /obj/effect/mapping_helpers/airalarm/unlocked, /turf/open/floor/iron, /area/station/hallway/primary/central) +"Kf" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/obj/item/storage/part_replacer/bluespace/tier4, +/turf/open/floor/iron, +/area/station/cargo/bitrunning/den) "Kx" = ( /obj/structure/table, /obj/item/analyzer, @@ -2261,6 +2276,15 @@ /obj/machinery/light/directional/south, /turf/open/floor/plating, /area/station/engineering/atmos) +"Lb" = ( +/obj/structure/table/reinforced, +/obj/machinery/light/directional/south, +/obj/item/bitrunning_debug, +/turf/open/floor/iron, +/area/station/cargo/bitrunning/den) +"Le" = ( +/turf/closed/wall/r_wall, +/area/station/cargo/bitrunning/den) "Ly" = ( /obj/machinery/chem_dispenser/chem_synthesizer, /turf/open/floor/iron/dark, @@ -2304,6 +2328,10 @@ /obj/machinery/chem_recipe_debug, /turf/open/floor/iron, /area/station/medical/chemistry) +"Nj" = ( +/obj/machinery/byteforge, +/turf/open/floor/circuit/green, +/area/station/cargo/bitrunning/den) "Ns" = ( /obj/machinery/door/airlock/public/glass, /obj/structure/cable, @@ -2313,10 +2341,6 @@ /obj/machinery/rnd/production/protolathe/department, /turf/open/floor/iron, /area/station/science) -"Oq" = ( -/obj/machinery/netpod, -/turf/open/floor/iron, -/area/station/bitrunning/den) "Ot" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, @@ -2338,12 +2362,6 @@ /obj/item/stock_parts/cell/bluespace, /turf/open/floor/iron/dark, /area/station/science/explab) -"OA" = ( -/obj/machinery/door/airlock, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/iron, -/area/station/bitrunning/den) "OU" = ( /obj/item/disk/tech_disk/debug, /turf/open/floor/iron, @@ -2353,11 +2371,6 @@ /obj/effect/mapping_helpers/airalarm/unlocked, /turf/open/floor/iron/dark, /area/station/science/explab) -"Pw" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/iron, -/area/station/bitrunning/den) "Px" = ( /obj/structure/table, /obj/machinery/reagentgrinder, @@ -2390,6 +2403,12 @@ }, /turf/open/floor/engine, /area/station/cargo/miningoffice) +"QU" = ( +/obj/machinery/door/airlock, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/turf/open/floor/iron, +/area/station/cargo/bitrunning/den) "Rb" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -2422,11 +2441,6 @@ }, /turf/open/floor/iron/white/corner, /area/station/medical/medbay) -"SN" = ( -/obj/structure/table/reinforced, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/station/bitrunning/den) "Td" = ( /obj/machinery/light/directional/east, /obj/effect/turf_decal/stripes/line{ @@ -2487,12 +2501,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/main) -"VV" = ( -/obj/structure/table, -/obj/machinery/light/directional/south, -/obj/item/debug/human_spawner, -/turf/open/floor/iron, -/area/station/commons/storage/primary) "We" = ( /obj/machinery/newscaster/directional/west, /turf/open/floor/iron, @@ -2535,13 +2543,6 @@ }, /turf/open/floor/iron, /area/station/medical/chemistry) -"Xo" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/obj/machinery/airalarm/directional/east, -/obj/machinery/computer/quantum_console, -/turf/open/floor/iron, -/area/station/bitrunning/den) "Xp" = ( /obj/machinery/light/directional/south, /obj/structure/tank_dispenser{ @@ -3108,12 +3109,12 @@ aa aa aa aa -uI -uI -uI -uI -uI -uI +aa +aa +aa +aa +aa +aa aa aa aa @@ -3200,12 +3201,12 @@ aa aa aa aa -uI -hU -hU -jR -Oq -uI +Le +Le +Le +Le +Le +Le aa aa aa @@ -3292,12 +3293,12 @@ aa aa aa aa -uI -hU -FW -jR -Oq -uI +Le +rS +Nj +pK +Ba +Le aa aa aa @@ -3384,12 +3385,12 @@ aa aa aa aa -uI -IB -jR -Ht -Oq -uI +Le +rM +pK +Kf +Ba +Le aa aa aa @@ -3476,12 +3477,12 @@ aa aa aa aa -uI -Xo -CD -Pw -SN -uI +Le +lE +Cz +mV +Lb +Le aa aa aa @@ -3568,12 +3569,12 @@ em em em em -uI -uI -uI -OA -qp -uI +Le +Le +Le +QU +ib +Le Tj Tj Tj @@ -7912,7 +7913,7 @@ dJ dJ dJ dJ -VV +dQ cS gz fO @@ -7989,7 +7990,7 @@ Ot cl cl cl -AS +cH cu cJ by diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 3e7621f02879af..c4eccf5778f5e1 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -183,6 +183,17 @@ /obj/machinery/status_display/evac/directional/south, /turf/open/floor/iron, /area/centcom/central_command_areas/evacuation) +"aR" = ( +/obj/structure/table/wood, +/obj/machinery/computer/security/wooden_tv, +/obj/structure/secure_safe{ + pixel_x = 32; + pixel_y = 24 + }, +/obj/machinery/status_display/ai/directional/east, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/admin) "aS" = ( /obj/item/kirbyplants/organic/plant22, /obj/machinery/power/apc/auto_name/directional/south, @@ -249,6 +260,28 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/centcom/central_command_areas/fore) +"bf" = ( +/obj/structure/closet/secure_closet/freezer/meat/open, +/obj/item/food/meat/slab/bear, +/obj/item/food/meat/slab/bear, +/obj/item/food/meat/slab/bear, +/obj/item/food/meat/slab/bear, +/obj/item/food/meat/slab/goliath, +/obj/item/food/meat/slab/goliath, +/obj/item/food/meat/slab/goliath, +/obj/item/food/meat/slab/goliath, +/obj/item/food/meat/slab/xeno, +/obj/item/food/meat/slab/xeno, +/obj/item/food/meat/slab/xeno, +/obj/item/food/meat/slab/xeno, +/obj/item/food/spaghetti/boiledspaghetti, +/obj/item/food/spaghetti/boiledspaghetti, +/obj/item/food/meat/rawcutlet, +/obj/item/food/meat/rawcutlet, +/obj/item/food/meat/rawcutlet, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/centcom/tdome/observation) "bg" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -421,18 +454,6 @@ /obj/effect/light_emitter/thunderdome, /turf/open/floor/iron, /area/centcom/tdome/arena) -"cb" = ( -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/storage/secure/briefcase, -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/briefing) "cd" = ( /obj/structure/sink/directional/east, /obj/structure/mirror/directional/west, @@ -1386,17 +1407,6 @@ }, /turf/open/floor/iron/white, /area/centcom/tdome/observation) -"gA" = ( -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/storage/secure/briefcase, -/obj/structure/table/wood, -/obj/structure/noticeboard/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/courtroom) "gC" = ( /obj/machinery/door/window/brigdoor{ base_state = "rightsecure"; @@ -3231,19 +3241,6 @@ }, /turf/open/floor/iron, /area/centcom/central_command_areas/supply) -"oV" = ( -/obj/structure/table/wood, -/obj/item/storage/secure/briefcase{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/storage/lockbox/medal, -/obj/machinery/newscaster{ - pixel_x = 32 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/admin) "oW" = ( /obj/structure/flora/bush/lavendergrass/style_random, /obj/structure/flora/bush/sparsegrass/style_random, @@ -3359,6 +3356,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) +"pA" = ( +/obj/structure/table/reinforced, +/obj/item/storage/briefcase/secure, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/briefing) "pB" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -3645,6 +3648,16 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/centcom/central_command_areas/supplypod/loading/ert) +"qH" = ( +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/storage/briefcase/secure, +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/courtroom) "qI" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -6501,6 +6514,16 @@ }, /turf/open/floor/iron, /area/centcom/central_command_areas/control) +"De" = ( +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/storage/briefcase/secure, +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/centcom/tdome/administration) "Dg" = ( /obj/machinery/light/floor, /turf/open/floor/iron/white, @@ -6998,6 +7021,19 @@ /obj/effect/light_emitter/thunderdome, /turf/closed/indestructible/fakeglass, /area/centcom/tdome/observation) +"Gc" = ( +/obj/structure/table/wood, +/obj/item/storage/briefcase/secure{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/lockbox/medal, +/obj/machinery/newscaster{ + pixel_x = 32 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/admin) "Gf" = ( /obj/machinery/firealarm/directional/east, /obj/machinery/atmospherics/components/unary/vent_pump{ @@ -7291,6 +7327,18 @@ /obj/structure/closet/secure_closet/quartermaster, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/supply) +"HX" = ( +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/storage/briefcase/secure, +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/briefing) "HY" = ( /obj/machinery/photocopier, /obj/machinery/button/door/indestructible{ @@ -7529,12 +7577,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/tdome/observation) -"JW" = ( -/obj/structure/table/reinforced, -/obj/item/storage/secure/briefcase, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/briefing) "Kd" = ( /obj/effect/turf_decal/tile/red/opposingcorners, /obj/effect/turf_decal/tile/yellow/opposingcorners{ @@ -8028,6 +8070,16 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/centcom/central_command_areas/prison) +"MB" = ( +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/storage/briefcase/secure, +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/admin) "MC" = ( /obj/structure/flora/grass/jungle/b, /obj/effect/decal/cleanable/garbage{ @@ -8583,7 +8635,7 @@ "Pe" = ( /obj/structure/table/wood, /obj/item/phone{ - desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; + desc = "Supposedly a direct line to Symphionia Conglomeration of Colonists. It's not even plugged in."; pixel_x = -3; pixel_y = 3 }, @@ -8770,7 +8822,7 @@ "PR" = ( /obj/structure/table/wood, /obj/item/phone{ - desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; + desc = "Supposedly a direct line to Symphionia Conglomeration of Colonists. It's not even plugged in."; pixel_x = -3; pixel_y = 3 }, @@ -9001,7 +9053,7 @@ "QU" = ( /obj/structure/table/wood, /obj/item/phone{ - desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; + desc = "Supposedly a direct line to Symphionia Conglomeration of Colonists. It's not even plugged in."; pixel_x = -3; pixel_y = 3 }, @@ -9272,16 +9324,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/centcom/central_command_areas/supplypod/loading/two) -"Sg" = ( -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/storage/secure/briefcase, -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/tdome/administration) "Sh" = ( /obj/structure/table/reinforced, /obj/item/mod/control/pre_equipped/corporate{ @@ -9337,28 +9379,6 @@ }, /turf/open/floor/iron, /area/centcom/central_command_areas/armory) -"St" = ( -/obj/structure/closet/secure_closet/freezer/meat/open, -/obj/item/food/meat/slab/bear, -/obj/item/food/meat/slab/bear, -/obj/item/food/meat/slab/bear, -/obj/item/food/meat/slab/bear, -/obj/item/food/meat/slab/goliath, -/obj/item/food/meat/slab/goliath, -/obj/item/food/meat/slab/goliath, -/obj/item/food/meat/slab/goliath, -/obj/item/food/meat/slab/xeno, -/obj/item/food/meat/slab/xeno, -/obj/item/food/meat/slab/xeno, -/obj/item/food/meat/slab/xeno, -/obj/item/food/spaghetti/boiledspaghetti, -/obj/item/food/spaghetti/boiledspaghetti, -/obj/item/food/meat/rawcutlet, -/obj/item/food/meat/rawcutlet, -/obj/item/food/meat/rawcutlet, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/tdome/observation) "Su" = ( /turf/open/floor/iron, /area/centcom/central_command_areas/supplypod) @@ -9490,16 +9510,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/dark, /area/centcom/tdome/observation) -"Tg" = ( -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/storage/secure/briefcase, -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/admin) "Tj" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/cup/glass/bottle/whiskey{ @@ -9724,17 +9734,6 @@ }, /turf/open/floor/wood, /area/centcom/central_command_areas/admin) -"Ui" = ( -/obj/structure/table/wood, -/obj/machinery/computer/security/wooden_tv, -/obj/item/storage/secure/safe{ - pixel_x = 32; - pixel_y = 24 - }, -/obj/machinery/status_display/ai/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/admin) "Ul" = ( /obj/structure/flora/bush/lavendergrass/style_random, /obj/structure/flora/bush/sparsegrass/style_random, @@ -10182,16 +10181,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/centcom/tdome/administration) -"Wp" = ( -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/storage/secure/briefcase, -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/courtroom) "Ws" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/siding/yellow/corner{ @@ -10269,7 +10258,7 @@ "WO" = ( /obj/structure/table/wood, /obj/item/phone{ - desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; + desc = "Supposedly a direct line to Symphionia Conglomeration of Colonists. It's not even plugged in."; pixel_x = -3; pixel_y = 3 }, @@ -10694,6 +10683,17 @@ }, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/admin) +"YR" = ( +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/storage/briefcase/secure, +/obj/structure/table/wood, +/obj/structure/noticeboard/directional/east, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/courtroom) "YT" = ( /obj/structure/table/wood, /obj/structure/plaque/static_plaque/thunderdome{ @@ -47385,7 +47385,7 @@ wv mD yL WN -cb +HX Bu tb aV @@ -47625,7 +47625,7 @@ aa aa On oo -Tg +MB Bl Wl Qb @@ -48670,7 +48670,7 @@ wB yr RH RH -JW +pA eE rB RH @@ -49684,7 +49684,7 @@ yO To nk Gf -oV +Gc On JO Vz @@ -50708,7 +50708,7 @@ mH nm TO On -Ui +aR JC py oB @@ -52541,7 +52541,7 @@ gE FZ kv QC -St +bf eI ch ck @@ -55388,7 +55388,7 @@ uE Xn Sz Sz -Sg +De Wn ga uf @@ -59705,7 +59705,7 @@ rw qh ps ps -Wp +qH Hv qz qy @@ -63290,7 +63290,7 @@ aa aa aa Hv -Wp +qH xX QX pc @@ -63302,7 +63302,7 @@ dp gC ps Ha -gA +YR bC Hv cg diff --git a/_maps/map_files/generic/CentCom_nova_z2.dmm b/_maps/map_files/generic/CentCom_nova_z2.dmm new file mode 100644 index 00000000000000..61bd359a61df74 --- /dev/null +++ b/_maps/map_files/generic/CentCom_nova_z2.dmm @@ -0,0 +1,82533 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aaa" = ( +/turf/open/space/basic, +/area/space) +"aam" = ( +/obj/structure/closet{ + name = "coat closet" + }, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/suit/hooded/wintercoat/nova, +/obj/item/clothing/suit/hooded/wintercoat/nova, +/obj/item/clothing/suit/hooded/wintercoat/nova, +/obj/item/clothing/suit/hooded/wintercoat/captain, +/obj/item/clothing/suit/hooded/wintercoat/captain, +/obj/item/clothing/suit/hooded/wintercoat/cargo, +/obj/item/clothing/suit/hooded/wintercoat/cargo, +/obj/item/clothing/suit/hooded/wintercoat/centcom, +/obj/item/clothing/suit/hooded/wintercoat/centcom, +/obj/item/clothing/suit/hooded/wintercoat/security, +/obj/item/clothing/suit/hooded/wintercoat/security, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aaP" = ( +/obj/machinery/light/directional/west, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/structure/table, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aaY" = ( +/obj/structure/fans/tiny/invisible, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"abK" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"abZ" = ( +/obj/machinery/vending/clothing, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"acF" = ( +/obj/effect/turf_decal/siding{ + color = "#2e2e2e" + }, +/turf/closed/indestructible/weeb, +/area/centcom/holding/cafe) +"adt" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ + density = 0; + dir = 1 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"adu" = ( +/obj/structure/table/wood, +/obj/item/folder/blue{ + pixel_x = -7 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"adw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/centcom/interlink) +"adR" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/turf/closed/indestructible/wood, +/area/centcom/holding/cafe) +"adU" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/closet/crate/bin, +/turf/open/floor/iron, +/area/centcom/interlink) +"aer" = ( +/obj/structure/table/wood, +/obj/structure/window/spawner/directional/south, +/obj/item/food/poppypretzel{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/item/food/hotcrossbun{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aeG" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/indestructible{ + id = "ntrep_shutters"; + name = "Nanotrasen Consultant's Shutters" + }, +/turf/open/floor/plating, +/area/centcom/interlink) +"aeO" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/plating, +/area/centcom/interlink) +"aeT" = ( +/obj/structure/flora/bush/fullgrass{ + icon_state = "fullgrass_3" + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aeW" = ( +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aeZ" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 1 + }, +/turf/open/floor/carpet/purple, +/area/centcom/holding/cafe) +"afe" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"afj" = ( +/obj/machinery/vending/hydroseeds, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"afl" = ( +/obj/machinery/barsign/all_access/directional/north, +/obj/machinery/vending/wardrobe/bar_wardrobe/ghost_cafe, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"afr" = ( +/obj/structure/rack{ + icon = 'icons/obj/fluff/general.dmi'; + icon_state = "minibar_left"; + name = "skeletal minibar" + }, +/obj/item/pickaxe/mini, +/obj/item/hatchet, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"afx" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/plating/vox, +/area/centcom/holding/cafevox) +"afy" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"afA" = ( +/obj/structure/flora/grass/green, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"afB" = ( +/obj/structure/flora/bush/ferny{ + pixel_x = -3; + pixel_y = 3 + }, +/turf/open/floor/grass/fairy, +/area/centcom/holding/cafepark) +"afD" = ( +/obj/structure/closet/crate, +/obj/item/storage/box/drinkingglasses, +/obj/item/reagent_containers/cup/glass/shaker, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"afF" = ( +/obj/structure/destructible/cult/item_dispenser/archives, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"afK" = ( +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/centcom/interlink) +"afN" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/structure/flora/grass/jungle/b/style_random, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aga" = ( +/obj/structure/table, +/obj/machinery/microwave{ + pixel_y = 8 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "cafeteria" + }, +/area/centcom/holding/cafe) +"agb" = ( +/obj/structure/flora/bush/lavendergrass{ + pixel_x = 3; + pixel_y = 3 + }, +/turf/open/floor/grass/fairy, +/area/centcom/holding/cafepark) +"agk" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/structure/beebox{ + name = "Shrine" + }, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"agr" = ( +/obj/machinery/vending/access/command, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"agy" = ( +/obj/structure/flora/bush/leafy, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"agA" = ( +/obj/structure/chair/stool/directional/south{ + dir = 8 + }, +/obj/structure/flora/grass/jungle/b/style_random, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"agF" = ( +/obj/structure/flora/bush/grassy/style_4, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"agG" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"agQ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"agU" = ( +/obj/structure/fence{ + dir = 4 + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"agV" = ( +/obj/structure/closet/wardrobe/grey, +/obj/item/clothing/under/dress/tango, +/obj/item/clothing/under/dress/redeveninggown, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"ahk" = ( +/turf/open/indestructible/carpet, +/area/centcom/holding/cafepark) +"ahs" = ( +/obj/structure/flora/bush/leavy/style_2, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"ahA" = ( +/obj/structure/flora/bush/flowers_br, +/obj/structure/flora/bush/fullgrass, +/obj/structure/flora/bush/pointy, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"ahG" = ( +/obj/structure/rack, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/tank/internals/plasmaman/belt/full, +/obj/item/tank/internals/plasmaman/belt/full, +/obj/item/tank/internals/plasmaman/belt/full, +/obj/item/tank/internals/plasmaman/belt/full, +/obj/item/tank/internals/plasmaman/belt/full, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"ahI" = ( +/obj/structure/table{ + name = "Jim Norton's Quebecois Coffee table" + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"ahK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"ahP" = ( +/obj/structure/fans/tiny/invisible, +/obj/machinery/door/airlock{ + id_tag = "CCD2" + }, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"ahQ" = ( +/obj/structure/flora/bush/sparsegrass, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"ahU" = ( +/obj/structure/flora/bush/large, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"ahY" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aid" = ( +/obj/machinery/light/floor{ + alpha = 0; + invisibility = 100 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"ail" = ( +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/obj/structure/sign/painting/library{ + pixel_y = 32 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aiw" = ( +/obj/structure/bed/pod, +/obj/machinery/light/directional/east, +/turf/open/indestructible/cobble/side{ + dir = 4 + }, +/area/centcom/holding/cafepark) +"aiA" = ( +/turf/open/lava/fake, +/area/centcom/holding/cafepark) +"aiD" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"aiK" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/vending/cola/black{ + default_price = 0; + extended_inventory = 1; + extra_price = 0; + fair_market_price = 0 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aiM" = ( +/obj/structure/showcase/fakeid{ + dir = 4 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"aiV" = ( +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"ajh" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/emcloset, +/turf/open/floor/mineral/titanium, +/area/centcom/interlink) +"ajj" = ( +/turf/closed/indestructible/rock, +/area/centcom/holding/cafepark) +"ajx" = ( +/obj/structure/curtain{ + alpha = 240; + color = "#B22222"; + name = "Curtain" + }, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"ajK" = ( +/obj/structure/flora/rock/pile{ + icon_state = "basalt3" + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"ajR" = ( +/obj/structure/flora/rock/pile{ + icon_state = "basalt3" + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafe) +"aka" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/wood/glass{ + desc = "A strange small bar. It's actually remarkably close to Space Station 13."; + name = "The Snoozy Floofer" + }, +/obj/structure/fans/tiny/invisible, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"akf" = ( +/obj/structure/chair/comfy/shuttle, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"aki" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/structure/table, +/obj/structure/bedsheetbin, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"akp" = ( +/obj/structure/flora/bush/flowers_pp, +/obj/structure/flora/bush/flowers_br, +/obj/structure/flora/bush/lavendergrass, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aks" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 1 + }, +/turf/open/floor/carpet/purple, +/area/centcom/holding/cafe) +"akJ" = ( +/obj/item/reagent_containers/cup/beaker/bluespace{ + luminosity = 3; + name = "floofmagic beaker"; + possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150,200,250,500); + volume = 500 + }, +/obj/item/reagent_containers/cup/beaker/bluespace{ + luminosity = 3; + name = "floofmagic beaker"; + possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150,200,250,500); + volume = 500 + }, +/obj/item/reagent_containers/cup/beaker/bluespace{ + luminosity = 3; + name = "floofmagic beaker"; + possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150,200,250,500); + volume = 500 + }, +/obj/structure/table/wood, +/turf/open/indestructible/hoteltile{ + icon_state = "cafeteria" + }, +/area/centcom/holding/cafe) +"akS" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Medbay" + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"akW" = ( +/turf/open/indestructible/cobble/side{ + dir = 8 + }, +/area/centcom/holding/cafepark) +"alb" = ( +/obj/structure/flora/grass/jungle/a/style_3, +/obj/structure/flora/bush/flowers_br, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"ald" = ( +/turf/open/indestructible/cobble/corner{ + dir = 4 + }, +/area/centcom/holding/cafepark) +"alf" = ( +/obj/structure/flora/bush/lavendergrass, +/obj/structure/flora/bush/flowers_br, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"alk" = ( +/obj/item/bedsheet/dorms_double, +/obj/structure/bed/double, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"alm" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/light/floor{ + alpha = 0; + invisibility = 100 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"alo" = ( +/obj/structure/flora/grass/jungle, +/mob/living/basic/rabbit, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"alx" = ( +/obj/machinery/door/airlock/centcom{ + name = "Interlink" + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"alC" = ( +/obj/effect/spawner/liquids_spawner, +/turf/open/floor/iron/pool, +/area/centcom/holding/cafepark) +"alD" = ( +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"alF" = ( +/obj/structure/flora/rock/pile, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"alH" = ( +/obj/structure/fans/tiny/invisible, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafe) +"alM" = ( +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_x = 1; + pixel_y = 13 + }, +/obj/structure/table/wood, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"alN" = ( +/obj/item/seeds/ambrosia/gaia, +/obj/item/seeds/pumpkin/blumpkin, +/obj/item/reagent_containers/cup/bucket/wooden{ + name = "Rustic Bucket"; + possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150,200,250,500); + volume = 500 + }, +/obj/item/reagent_containers/cup/bucket/wooden{ + name = "Rustic Bucket"; + possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150,200,250,500); + volume = 500 + }, +/obj/item/reagent_containers/cup/bucket/wooden{ + name = "Rustic Bucket"; + possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150,200,250,500); + volume = 500 + }, +/obj/item/reagent_containers/cup/bucket/wooden{ + name = "Rustic Bucket"; + possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150,200,250,500); + volume = 500 + }, +/obj/item/reagent_containers/cup/bucket/wooden{ + name = "Rustic Bucket"; + possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150,200,250,500); + volume = 500 + }, +/obj/item/reagent_containers/cup/bucket/wooden{ + name = "Rustic Bucket"; + possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150,200,250,500); + volume = 500 + }, +/obj/item/shovel/spade, +/obj/item/shovel/spade, +/obj/item/cultivator, +/obj/item/cultivator, +/obj/item/watertank, +/obj/item/storage/bag/plants/portaseeder, +/obj/structure/closet, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"alO" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"alR" = ( +/obj/structure/table/wood/fancy/royalblue, +/obj/item/storage/dice{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/toy/cards/deck, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"alW" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/railing, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"amk" = ( +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"amu" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/turf/open/lava/fake, +/area/centcom/holding/cafepark) +"amv" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/centcom/interlink) +"amx" = ( +/turf/closed/wall/mineral/stone, +/area/centcom/holding/cafepark) +"amD" = ( +/obj/structure/sink/directional/east, +/obj/machinery/button/door{ + id = "CCShowers"; + name = "Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4; + pixel_x = -25 + }, +/turf/open/floor/iron/freezer, +/area/centcom/holding/cafe) +"amF" = ( +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"amG" = ( +/obj/structure/chair/sofa/corp/left, +/turf/open/floor/carpet/purple, +/area/centcom/holding/cafe) +"amH" = ( +/obj/machinery/chem_master/condimaster{ + name = "BrewMaster 3000" + }, +/turf/open/indestructible/hoteltile{ + icon_state = "cafeteria" + }, +/area/centcom/holding/cafe) +"amT" = ( +/obj/structure/flora/bush/flowers_br, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"amU" = ( +/obj/structure/wall_torch/spawns_lit/directional/north, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/misc/asteroid/snow/indestructible/planet, +/area/centcom/holding/cafepark) +"ana" = ( +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"ang" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/wood/glass{ + name = "Lounge" + }, +/obj/structure/fans/tiny/invisible, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"ani" = ( +/obj/effect/mob_spawn/ghost_role/human/ghostcafe, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"anr" = ( +/obj/item/toy/beach_ball, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"anv" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"anw" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"anz" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"anC" = ( +/obj/structure/flora/rock/pile/jungle/large{ + pixel_x = 0; + pixel_y = 0 + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"anD" = ( +/obj/structure/flora/grass/jungle/a/style_3, +/obj/structure/flora/bush/flowers_pp, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"anL" = ( +/obj/item/storage/box/donkpockets{ + pixel_x = 7 + }, +/obj/structure/table/wood, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -9; + pixel_y = 9 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = -9 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "cafeteria" + }, +/area/centcom/holding/cafe) +"anQ" = ( +/obj/effect/light_emitter/interlink, +/obj/structure/railing, +/obj/structure/fans/tiny/invisible, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"aoq" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 27 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "cafeteria" + }, +/area/centcom/holding/cafe) +"aox" = ( +/obj/structure/chair/comfy/shuttle, +/obj/machinery/light/directional/north, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"aoA" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aoE" = ( +/obj/effect/turf_decal/weather/snow/corner, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"aoO" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/wood{ + name = "Botany / Storage" + }, +/obj/structure/fans/tiny/invisible, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"aoR" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/structure/closet/crate/bin, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"apc" = ( +/obj/structure/rack, +/obj/item/flashlight/lantern, +/obj/item/flashlight/lantern, +/obj/item/flashlight/lantern, +/obj/item/flashlight/lantern, +/obj/item/flashlight/lantern, +/obj/item/flashlight/lantern, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"api" = ( +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"apn" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"apu" = ( +/obj/item/knife{ + pixel_x = 10; + pixel_y = 3 + }, +/obj/item/storage/bag/tray, +/obj/item/storage/box/drinkingglasses{ + pixel_x = -5; + pixel_y = 7 + }, +/obj/item/storage/box/cups{ + pixel_x = -5 + }, +/obj/item/kitchen/rollingpin{ + pixel_x = 3; + pixel_y = -5 + }, +/obj/structure/table/wood, +/turf/open/indestructible/hoteltile{ + icon_state = "cafeteria" + }, +/area/centcom/holding/cafe) +"apx" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"apA" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/vending/snack/blue{ + default_price = 0; + extended_inventory = 1; + extra_price = 0; + fair_market_price = 0 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"apT" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"apX" = ( +/turf/open/misc/beach/sand{ + dir = 6 + }, +/area/centcom/holding/cafepark) +"aqe" = ( +/obj/structure/table/wood, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"aqf" = ( +/turf/closed/indestructible/wood, +/area/centcom/holding/cafe) +"aqo" = ( +/obj/machinery/light/directional/east, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"aqw" = ( +/obj/machinery/button/door{ + id = "CCD2"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 25; + specialfunctions = 4 + }, +/obj/structure/bed/double/pod, +/obj/item/bedsheet/dorms_double, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"aqy" = ( +/obj/machinery/vending/wardrobe/cargo_wardrobe/ghost_cafe, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aqG" = ( +/turf/open/floor/plating, +/area/centcom/interlink) +"aqO" = ( +/obj/machinery/light/directional/south, +/obj/machinery/photocopier/gratis, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aqP" = ( +/obj/structure/spacevine, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"aqQ" = ( +/obj/structure/flora/bush/reed, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"aqR" = ( +/obj/structure/chair/comfy/black, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aqV" = ( +/obj/structure/flora/grass/jungle/a/style_5, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aqX" = ( +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"arh" = ( +/turf/open/floor/iron/dark, +/area/centcom/holding/cafe) +"arp" = ( +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"arP" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"arT" = ( +/obj/structure/flora/bush/lavendergrass{ + icon_state = "lavendergrass_3" + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"asp" = ( +/obj/machinery/hydroponics/constructable, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafe) +"asv" = ( +/obj/machinery/door/poddoor/ert, +/turf/open/floor/plating, +/area/centcom/interlink) +"asw" = ( +/turf/closed/indestructible/wood, +/area/centcom/holding/cafevox) +"asz" = ( +/obj/structure/table/wood/fancy/blue, +/obj/machinery/light/directional/north, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafepark) +"asC" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"asF" = ( +/obj/structure/flora/bush/flowers_pp/style_3, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"asP" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/centcom/interlink) +"asQ" = ( +/obj/structure/table/wood, +/obj/machinery/reagentgrinder{ + pixel_y = 8 + }, +/obj/item/reagent_containers/cup/beaker/large, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"asT" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/machinery/vending/coffee{ + default_price = 0; + extended_inventory = 1; + extra_price = 0; + fair_market_price = 0 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"asX" = ( +/obj/structure/flora/bush/lavendergrass{ + icon_state = "lavendergrass_2" + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"asY" = ( +/obj/structure/kitchenspike, +/turf/open/floor/iron/showroomfloor, +/area/centcom/holding/cafe) +"atf" = ( +/mob/living/basic/bot/cleanbot, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"ati" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Arrivals" + }, +/turf/open/floor/mineral/titanium/blue, +/area/centcom/interlink) +"atp" = ( +/obj/structure/alien/resin/wall/immovable, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"atq" = ( +/obj/machinery/oven/range, +/turf/open/indestructible/hoteltile{ + icon_state = "cafeteria" + }, +/area/centcom/holding/cafe) +"ats" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder{ + desc = "Used to grind things up into raw materials and liquids."; + pixel_x = -5; + pixel_y = 5 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "cafeteria" + }, +/area/centcom/holding/cafe) +"atF" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"atJ" = ( +/obj/machinery/door/window/right/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"atQ" = ( +/obj/structure/flora/bush/fullgrass{ + icon_state = "brflowers_2" + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"auf" = ( +/obj/structure/flora/biolumi/flower{ + light_color = "#D9FF00"; + light_power = 0.3; + light_range = 10; + random_light = null + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"auj" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/vending/clothing, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"auo" = ( +/obj/machinery/chem_master/condimaster, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"aur" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"auB" = ( +/obj/structure/healingfountain{ + time_between_uses = 600 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"auH" = ( +/obj/machinery/light/directional/south, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"auM" = ( +/obj/structure/fans/tiny/invisible, +/turf/open/indestructible/cobble, +/area/centcom/holding/cafepark) +"auP" = ( +/obj/effect/turf_decal/siding{ + color = "#2e2e2e"; + dir = 1 + }, +/turf/open/floor/bamboo, +/area/centcom/holding/cafe) +"auQ" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/item/flashlight/flare/candle/infinite, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"auR" = ( +/obj/structure/flora/biolumi/flower{ + light_color = "#D9FF00"; + random_light = null + }, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"auU" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/light/directional/south, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafe) +"avb" = ( +/obj/structure/flora/grass/green{ + icon_state = "snowgrass2gb" + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"avl" = ( +/obj/structure/rack/wooden, +/obj/item/reagent_containers/cup/glass/trophy{ + pixel_y = 16; + pixel_x = 7 + }, +/obj/item/reagent_containers/cup/glass/trophy{ + pixel_y = 16; + pixel_x = -2 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"avn" = ( +/obj/structure/closet/secure_closet/freezer/meat/all_access, +/obj/item/food/meat/slab/chicken, +/obj/item/food/meat/slab/chicken, +/obj/item/food/meat/slab/chicken, +/obj/item/food/meat/slab/chicken, +/obj/item/food/meat/slab/monkey, +/obj/item/food/meat/slab/monkey, +/obj/item/food/meat/slab/monkey, +/obj/item/food/meat/slab/monkey, +/obj/item/food/meat/rawbacon, +/obj/item/food/meat/rawbacon, +/obj/item/food/meat/rawbacon, +/obj/item/food/meat/rawbacon, +/turf/open/floor/iron/showroomfloor, +/area/centcom/holding/cafe) +"avt" = ( +/obj/structure/flora/grass/jungle/a/style_2, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"avu" = ( +/obj/vehicle/ridden/janicart/upgraded, +/obj/item/key/janitor, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"avS" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"awk" = ( +/obj/structure/fans/tiny/invisible, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"awm" = ( +/obj/machinery/light/directional/east, +/turf/open/indestructible/cobble/side{ + dir = 4 + }, +/area/centcom/holding/cafepark) +"awn" = ( +/obj/machinery/vending/wardrobe/hydro_wardrobe/ghost_cafe, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"awr" = ( +/obj/structure/bookcase/random/reference, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"awt" = ( +/obj/structure/wall_torch/spawns_lit/directional/south, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"awv" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"awA" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"awB" = ( +/obj/machinery/smartfridge, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"awC" = ( +/turf/open/floor/mineral/titanium, +/area/centcom/interlink) +"awD" = ( +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"awM" = ( +/obj/machinery/griddle, +/turf/open/indestructible/hoteltile{ + icon_state = "cafeteria" + }, +/area/centcom/holding/cafe) +"awN" = ( +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/wood/large, +/area/centcom/holding/cafe) +"awQ" = ( +/obj/machinery/light/directional/south, +/obj/machinery/vending/wardrobe/engi_wardrobe/ghost_cafe, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"awU" = ( +/obj/structure/railing/wooden_fencing{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/centcom/holding/cafe) +"awV" = ( +/obj/structure/spacevine{ + name = "thick vines"; + opacity = 1 + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"awW" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/machinery/status_display/evac/directional/south, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"awY" = ( +/obj/structure/table, +/obj/machinery/recharger{ + pixel_x = -2; + pixel_y = 1 + }, +/obj/item/book/manual/wiki/security_space_law{ + pixel_x = 9; + pixel_y = 5 + }, +/obj/item/restraints/handcuffs{ + pixel_x = 1; + pixel_y = -4 + }, +/obj/item/restraints/handcuffs{ + pixel_x = 1; + pixel_y = -4 + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/centcom/holding/cafe) +"axa" = ( +/turf/open/misc/beach/sand{ + dir = 1 + }, +/area/centcom/holding/cafepark) +"axo" = ( +/obj/structure/chair/sofa/corner/brown{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"axw" = ( +/obj/structure/flora/bush/leavy/style_3, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"axz" = ( +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"axA" = ( +/obj/structure/chair/sofa/bench/left, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"axB" = ( +/obj/structure/chair/sofa/bench{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"axC" = ( +/obj/structure/flora/grass/jungle/b/style_5, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"axD" = ( +/obj/structure/curtain, +/obj/machinery/light/floor{ + alpha = 0; + invisibility = 100; + light_range = 10; + nightshift_light_power = 10 + }, +/turf/open/indestructible/bathroom, +/area/centcom/holding/cafe) +"axF" = ( +/obj/structure/bed/dogbed, +/obj/item/pillow/random{ + pixel_y = 4; + pixel_x = -3 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"axJ" = ( +/turf/open/misc/beach/sand{ + dir = 4 + }, +/area/centcom/holding/cafepark) +"axL" = ( +/obj/effect/turf_decal/tile/blue, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"axO" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"axP" = ( +/obj/structure/chair/sofa/corp/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood, +/area/centcom/interlink) +"axQ" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"axT" = ( +/obj/effect/mob_spawn/ghost_role/robot/ghostcafe, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"axY" = ( +/obj/structure/flora/tree/palm, +/turf/open/misc/beach/coast/corner{ + dir = 4 + }, +/area/centcom/holding/cafepark) +"ayd" = ( +/obj/structure/flora/grass/green{ + icon_state = "snowgrass3gb" + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aye" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"ayj" = ( +/obj/structure/fluff/tram_rail/anchor{ + desc = "This probably won't stop a titanium tram from hitting the wall, but it's the thought that counts."; + dir = 1; + name = "buffer rail anchor" + }, +/obj/effect/turf_decal/stripes/asteroid/line, +/obj/machinery/light/floor, +/turf/open/floor/plating, +/area/centcom/interlink) +"ayk" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/light/directional/south, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"ayo" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"ayp" = ( +/obj/structure/flora/bush/fullgrass{ + icon_state = "fullgrass_3" + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"ayt" = ( +/obj/structure/chair/sofa/bench/left, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"ayx" = ( +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"ayy" = ( +/obj/structure/table/wood, +/turf/open/floor/carpet/purple, +/area/centcom/holding/cafe) +"ayA" = ( +/obj/structure/fans/tiny/invisible, +/turf/open/indestructible/cobble/side, +/area/centcom/holding/cafepark) +"ayI" = ( +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"ayQ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/vending/games, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"azj" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"azk" = ( +/obj/structure/flora/tree/jungle/small, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"azl" = ( +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"azm" = ( +/obj/machinery/icecream_vat, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"azr" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"azs" = ( +/obj/structure/flora/bush/fullgrass, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"azB" = ( +/turf/open/floor/plating/vox, +/area/centcom/holding/cafevox) +"azC" = ( +/obj/structure/sign/chalkboard_menu, +/turf/closed/indestructible/steel, +/area/centcom/holding/cafe) +"azR" = ( +/obj/structure/fluff/tram_rail{ + desc = "This probably won't stop a titanium tram from hitting the wall, but it's the thought that counts."; + dir = 1; + name = "buffer rail" + }, +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/floor/plating, +/area/centcom/interlink) +"azT" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"azY" = ( +/obj/structure/closet/crate/wooden/storage_barrel, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"aAc" = ( +/obj/structure/flora/bush/flowers_pp, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aAd" = ( +/turf/open/misc/asteroid/snow/indestructible/planet, +/area/centcom/holding/cafepark) +"aAe" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + dir = 4 + }, +/turf/open/floor/mineral/titanium, +/area/centcom/interlink) +"aAh" = ( +/obj/machinery/light/directional/west, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"aAq" = ( +/obj/structure/rack/wooden, +/obj/item/perfume/amber{ + pixel_x = -8; + pixel_y = 10 + }, +/obj/item/perfume/cologne{ + pixel_x = -4; + pixel_y = 10 + }, +/obj/item/perfume/wood{ + pixel_y = 10 + }, +/obj/item/perfume/mint{ + pixel_x = 4; + pixel_y = 10 + }, +/obj/item/perfume/cherry{ + pixel_x = -8; + pixel_y = -5 + }, +/obj/item/perfume/jasmine{ + pixel_x = -4; + pixel_y = -5 + }, +/obj/item/perfume/pear{ + pixel_y = -5 + }, +/obj/item/perfume/rose{ + pixel_x = 4; + pixel_y = -5 + }, +/obj/item/perfume/vanilla{ + pixel_x = 8; + pixel_y = 10 + }, +/obj/item/perfume/strawberry{ + pixel_x = 8; + pixel_y = -5 + }, +/obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aAr" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"aAu" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aAv" = ( +/obj/structure/sign/departments/medbay/alt, +/turf/closed/indestructible/steel, +/area/centcom/holding/cafe) +"aAz" = ( +/obj/structure/flora/bush/jungle/a/style_3, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aAC" = ( +/obj/structure/fluff/tram_rail/end{ + desc = "This probably won't stop a titanium tram from hitting the wall, but it's the thought that counts."; + dir = 1; + name = "buffer rail" + }, +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/floor/plating, +/area/centcom/interlink) +"aAE" = ( +/obj/structure/table/wood, +/obj/item/camera_film, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_nineteen, +/obj/item/canvas/twentythree_nineteen, +/obj/item/canvas/twentythree_nineteen, +/obj/item/canvas/twentyfour_twentyfour, +/obj/item/canvas/twentyfour_twentyfour, +/obj/item/canvas/twentyfour_twentyfour, +/obj/item/canvas/nineteen_nineteen, +/obj/item/canvas/nineteen_nineteen, +/obj/item/canvas/nineteen_nineteen, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aAJ" = ( +/obj/machinery/primitive_stove, +/obj/structure/wall_torch/spawns_lit/directional/west, +/turf/open/floor/stone, +/area/centcom/holding/cafepark) +"aAL" = ( +/obj/item/reagent_containers/cup/soda_cans/thirteenloko{ + pixel_x = -10; + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/soda_cans/thirteenloko{ + pixel_x = -10; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/soda_cans/thirteenloko{ + pixel_x = -10 + }, +/obj/item/reagent_containers/cup/soda_cans/starkist{ + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/soda_cans/starkist{ + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/soda_cans/starkist, +/obj/item/reagent_containers/cup/soda_cans/space_mountain_wind{ + pixel_x = 10; + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/soda_cans/space_mountain_wind{ + pixel_x = 10; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/soda_cans/space_mountain_wind{ + pixel_x = 10 + }, +/obj/structure/table/wood, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aAO" = ( +/obj/structure/sink/kitchen/directional/east, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"aAS" = ( +/obj/structure/flora/bush/reed, +/turf/open/misc/beach/sand{ + dir = 8 + }, +/area/centcom/holding/cafepark) +"aAX" = ( +/obj/structure/mirror{ + pixel_y = 32 + }, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"aAY" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/closed/indestructible/steel, +/area/centcom/holding/cafe) +"aBa" = ( +/obj/structure/fence{ + dir = 4 + }, +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"aBd" = ( +/turf/open/indestructible/hoteltile{ + icon_state = "cafeteria" + }, +/area/centcom/holding/cafe) +"aBi" = ( +/turf/open/indestructible/cobble/side{ + dir = 1 + }, +/area/centcom/holding/cafepark) +"aBk" = ( +/obj/machinery/vending/wardrobe/curator_wardrobe/ghost_cafe, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aBm" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"aBo" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/wood{ + name = "Storage" + }, +/obj/structure/fans/tiny/invisible, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"aBp" = ( +/obj/structure/flora/bush/lavendergrass{ + icon_state = "lavendergrass_4" + }, +/obj/structure/flora/bush/sparsegrass, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aBr" = ( +/obj/structure/flora/bush/fullgrass, +/obj/structure/flora/bush/flowers_yw, +/obj/structure/flora/bush/sunny, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aBs" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aBv" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 4 + }, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"aBH" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aBT" = ( +/obj/structure/table/wood, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"aBW" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/light/directional/north, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafe) +"aCa" = ( +/obj/effect/spawner/liquids_spawner, +/obj/machinery/light/floor, +/turf/open/floor/iron/pool/cobble/corner{ + dir = 8 + }, +/area/centcom/holding/cafe) +"aCc" = ( +/obj/item/storage/box/drinkingglasses{ + pixel_x = -2; + pixel_y = 3 + }, +/obj/item/storage/box/drinkingglasses{ + pixel_x = 4 + }, +/obj/structure/table/wood, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aCf" = ( +/obj/structure/flora/bush/fullgrass{ + icon_state = "fullgrass_2" + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"aCo" = ( +/obj/machinery/light/directional/east, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aCs" = ( +/obj/machinery/power/shuttle_engine/heater{ + dir = 4 + }, +/obj/effect/light_emitter/interlink, +/turf/open/floor/plating{ + baseturfs = /turf/open/floor/plating + }, +/area/centcom/holding/cafe) +"aCv" = ( +/turf/open/misc/beach/coast/corner{ + dir = 1 + }, +/area/centcom/holding/cafepark) +"aCw" = ( +/obj/structure/chair/stool/directional/south{ + dir = 1; + name = "Jim Norton's Quebecois Coffee stool" + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aCF" = ( +/obj/machinery/button/curtain{ + id = "ghostcafecabin3curtain"; + pixel_y = -25 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aCK" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"aCM" = ( +/obj/structure/flora/bush/flowers_pp/style_2, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aCQ" = ( +/obj/structure/flora/bush/fullgrass, +/obj/structure/railing/wooden_fencing, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aCR" = ( +/obj/item/hilbertshotel/ghostdojo, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aCS" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/plating/vox, +/area/centcom/holding/cafevox) +"aCU" = ( +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"aCX" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"aCY" = ( +/obj/machinery/vending/wardrobe/viro_wardrobe/ghost_cafe, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"aDa" = ( +/obj/structure/flora/bush/sparsegrass, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"aDg" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/centcom/interlink) +"aDj" = ( +/obj/structure/table/wood, +/obj/item/storage/fancy/donut_box{ + pixel_y = 5 + }, +/turf/open/floor/carpet/purple, +/area/centcom/holding/cafe) +"aDl" = ( +/obj/structure/flora/rock/pile/jungle/style_3, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aDr" = ( +/obj/machinery/chem_master/condimaster, +/obj/machinery/light/directional/north, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aDA" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aDB" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"aDC" = ( +/turf/closed/indestructible/opshuttle, +/area/centcom/holding/cafe) +"aDQ" = ( +/obj/machinery/door/window/left/directional/west{ + base_state = "right"; + dir = 1; + icon_state = "right"; + name = "Monkey Pen"; + pixel_y = 2; + req_access = list("genetics") + }, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"aDY" = ( +/obj/machinery/processor, +/obj/machinery/light/directional/west, +/obj/structure/table, +/turf/open/indestructible/hoteltile{ + icon_state = "cafeteria" + }, +/area/centcom/holding/cafe) +"aEa" = ( +/obj/structure/bed/pod, +/turf/open/indestructible/cobble/corner, +/area/centcom/holding/cafepark) +"aEf" = ( +/obj/structure/water_source/puddle{ + layer = 2.89; + pixel_x = 14; + pixel_y = 9 + }, +/turf/open/floor/grass/fairy, +/area/centcom/holding/cafepark) +"aEm" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"aEp" = ( +/obj/machinery/chem_dispenser/mutagensaltpeter, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"aEG" = ( +/obj/machinery/vending/dinnerware, +/turf/open/indestructible/hoteltile{ + icon_state = "cafeteria" + }, +/area/centcom/holding/cafe) +"aEL" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/wood{ + name = "Kitchen" + }, +/obj/structure/fans/tiny/invisible, +/turf/open/floor/iron/showroomfloor, +/area/centcom/holding/cafe) +"aEO" = ( +/obj/structure/flora/bush/fullgrass{ + icon_state = "fullgrass_3" + }, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"aEQ" = ( +/obj/structure/flora/bush/leafy, +/turf/open/floor/grass/fairy, +/area/centcom/holding/cafepark) +"aEX" = ( +/obj/structure/wall_torch/spawns_lit/directional/south, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/misc/asteroid/snow/indestructible/planet, +/area/centcom/holding/cafepark) +"aFe" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"aFn" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "ghostcafekitchen"; + name = "Kitchen Shutters" + }, +/obj/effect/spawner/structure/window, +/turf/open/indestructible/hoteltile{ + icon_state = "plating" + }, +/area/centcom/holding/cafe) +"aFr" = ( +/obj/structure/fans/tiny/invisible, +/turf/open/indestructible/cobble/side{ + dir = 4 + }, +/area/centcom/holding/cafepark) +"aFy" = ( +/obj/structure/mineral_door/wood, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aFB" = ( +/obj/structure/flora/bush/ferny, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aFI" = ( +/obj/structure/flora/tree/jungle/small{ + icon_state = "tree6" + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aFK" = ( +/obj/structure/table/optable, +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"aFN" = ( +/obj/effect/spawner/liquids_spawner, +/turf/open/indestructible/cobble/side{ + dir = 8 + }, +/area/centcom/holding/cafe) +"aFP" = ( +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aFV" = ( +/obj/structure/flora/bush/fullgrass{ + icon_state = "fullgrass_2" + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aGb" = ( +/turf/closed/indestructible/riveted/boss, +/area/centcom/holding/cafepark) +"aGg" = ( +/obj/structure/flora/bush/large/style_2, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aGk" = ( +/obj/machinery/bookbinder, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"aGo" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aGq" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger{ + pixel_y = 5 + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"aGw" = ( +/obj/structure/flora/bush/reed, +/turf/open/misc/beach/sand{ + dir = 1 + }, +/area/centcom/holding/cafepark) +"aGB" = ( +/obj/structure/flora/bush/reed, +/turf/open/misc/beach/coast{ + dir = 5 + }, +/area/centcom/holding/cafepark) +"aGC" = ( +/obj/structure/fans/tiny/invisible, +/turf/open/indestructible/hoteltile{ + icon_state = "stairs-old" + }, +/area/centcom/holding/cafepark) +"aGL" = ( +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"aGR" = ( +/obj/machinery/light/floor{ + alpha = 0; + invisibility = 100; + light_range = 10; + nightshift_light_power = 10 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"aGT" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/machinery/vending/cigarette/syndicate{ + default_price = 0; + extended_inventory = 1; + extra_price = 0; + fair_market_price = 0 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aGV" = ( +/obj/item/sharpener, +/obj/structure/table/wood, +/turf/open/indestructible/hoteltile{ + icon_state = "cafeteria" + }, +/area/centcom/holding/cafe) +"aGY" = ( +/obj/structure/rack, +/obj/item/bedsheet/dorms_double, +/obj/item/bedsheet/dorms_double, +/obj/item/bedsheet/dorms_double, +/obj/item/bedsheet/dorms_double, +/obj/item/bedsheet/dorms_double, +/obj/item/bedsheet/dorms_double, +/obj/item/bedsheet/dorms_double, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aHb" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/wood{ + name = "Botany" + }, +/obj/structure/fans/tiny/invisible, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"aHi" = ( +/obj/structure/fake_stairs/wood/directional/east, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aHj" = ( +/obj/structure/flora/bush/ferny{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/structure/flora/bush/fullgrass{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/structure/flora/bush/flowers_br{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/structure/window/reinforced/spawner/directional/east{ + layer = 2.9 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/grass/fairy, +/area/centcom/holding/cafepark) +"aHl" = ( +/turf/open/floor/wood, +/area/centcom/holding/cafepark) +"aHC" = ( +/obj/machinery/vending/wardrobe/chef_wardrobe/ghost_cafe, +/turf/open/floor/iron/showroomfloor, +/area/centcom/holding/cafe) +"aHD" = ( +/obj/structure/flora/bush/reed, +/turf/open/misc/beach/coast/corner{ + dir = 4 + }, +/area/centcom/holding/cafepark) +"aHJ" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 4 + }, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"aHK" = ( +/obj/structure/chair/comfy/brown{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aHM" = ( +/obj/machinery/light/directional/north, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aHP" = ( +/obj/structure/rack{ + icon = 'icons/obj/fluff/general.dmi'; + icon_state = "minibar_right"; + name = "skeletal minibar" + }, +/obj/item/pickaxe/mini, +/obj/item/hatchet, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aHX" = ( +/obj/machinery/door/airlock/vault, +/obj/structure/fans/tiny/invisible, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"aHY" = ( +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/recharge_floor, +/area/centcom/holding/cafe) +"aHZ" = ( +/turf/open/misc/beach/coast, +/area/centcom/holding/cafepark) +"aIg" = ( +/obj/structure/window/reinforced/plasma/plastitanium, +/turf/open/indestructible/hoteltile{ + icon_state = "plating" + }, +/area/centcom/holding/cafe) +"aIm" = ( +/obj/effect/turf_decal/siding{ + color = "#2e2e2e" + }, +/turf/open/floor/bamboo, +/area/centcom/holding/cafe) +"aIp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aIr" = ( +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"aIt" = ( +/obj/structure/table/wood, +/obj/item/gun/energy/floragun, +/obj/item/geneshears, +/obj/machinery/smartfridge/disks{ + pixel_y = 2 + }, +/obj/item/storage/fancy/rollingpapers, +/obj/item/secateurs, +/obj/item/hatchet, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"aIx" = ( +/obj/structure/closet/crate/freezer, +/obj/item/reagent_containers/condiment/yoghurt, +/obj/item/reagent_containers/condiment/yoghurt, +/obj/item/reagent_containers/condiment/yoghurt, +/obj/item/reagent_containers/condiment/yoghurt, +/obj/item/reagent_containers/condiment/yoghurt, +/obj/item/reagent_containers/condiment/olive_oil, +/obj/item/reagent_containers/condiment/olive_oil, +/obj/item/reagent_containers/condiment/olive_oil, +/obj/item/reagent_containers/condiment/olive_oil, +/obj/item/reagent_containers/condiment/olive_oil, +/obj/item/food/canned/larvae, +/obj/item/food/canned/larvae, +/obj/item/food/canned/larvae, +/obj/item/food/canned/larvae, +/obj/item/food/canned/larvae, +/obj/item/food/canned/pine_nuts, +/obj/item/food/canned/pine_nuts, +/obj/item/food/canned/pine_nuts, +/obj/item/food/canned/pine_nuts, +/obj/item/food/canned/pine_nuts, +/turf/open/floor/iron/showroomfloor, +/area/centcom/holding/cafe) +"aIA" = ( +/obj/structure/fans/tiny/invisible, +/turf/open/indestructible/cobble/side{ + dir = 8 + }, +/area/centcom/holding/cafepark) +"aIE" = ( +/obj/structure/flora/bush/fullgrass{ + icon_state = "brflowers_1" + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aII" = ( +/obj/structure/chair/comfy/barber_chair{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aIU" = ( +/obj/structure/bodycontainer/crematorium{ + dir = 4; + id = "crematoriumGhostDojo" + }, +/obj/machinery/button/crematorium{ + id = "crematoriumGhostDojo"; + pixel_x = -25 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aIV" = ( +/obj/structure/flora/bush/lavendergrass{ + icon_state = "lavendergrass_4" + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aJh" = ( +/turf/open/misc/beach/sand{ + dir = 5 + }, +/area/centcom/holding/cafepark) +"aJp" = ( +/obj/machinery/light/directional/north, +/turf/open/indestructible/cobble/side{ + dir = 1 + }, +/area/centcom/holding/cafepark) +"aJA" = ( +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aJO" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/centcom/interlink) +"aJP" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"aJT" = ( +/turf/open/indestructible/cobble/side{ + dir = 4 + }, +/area/centcom/holding/cafepark) +"aJX" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/flora/bush/jungle/b, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafe) +"aKa" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/floor/grass, +/area/centcom/interlink) +"aKc" = ( +/turf/open/indestructible/cobble/side, +/area/centcom/holding/cafepark) +"aKu" = ( +/obj/structure/flora/bush/jungle/b, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aKA" = ( +/obj/structure/chair/sofa/corp/right, +/turf/open/floor/carpet/purple, +/area/centcom/holding/cafe) +"aKB" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aKD" = ( +/obj/machinery/vending/wardrobe/atmos_wardrobe, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aKP" = ( +/turf/open/misc/beach/coast/corner{ + dir = 8 + }, +/area/centcom/holding/cafepark) +"aKQ" = ( +/obj/structure/chair/wood, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"aKU" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/centcom/interlink) +"aKX" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/centcom/holding/cafe) +"aLe" = ( +/obj/structure/chair/sofa/right/brown{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aLu" = ( +/obj/structure/fake_stairs/wood/directional/north, +/turf/open/floor/wood, +/area/centcom/holding/cafepark) +"aLD" = ( +/turf/open/misc/beach/coast{ + dir = 5 + }, +/area/centcom/holding/cafepark) +"aLF" = ( +/obj/effect/spawner/liquids_spawner, +/obj/structure/chair/sofa/bench/corner, +/turf/open/floor/iron/pool/cobble/corner, +/area/centcom/holding/cafe) +"aLH" = ( +/obj/structure/flora/bush/fullgrass, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aLO" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aLQ" = ( +/turf/open/misc/beach/sand{ + dir = 10 + }, +/area/centcom/holding/cafepark) +"aLW" = ( +/turf/open/floor/light/colour_cycle/dancefloor_a, +/area/centcom/holding/cafepark) +"aLY" = ( +/obj/machinery/gibber, +/obj/machinery/light/directional/north, +/turf/open/indestructible/hoteltile{ + icon_state = "cafeteria" + }, +/area/centcom/holding/cafe) +"aMw" = ( +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aME" = ( +/obj/structure/table/wood, +/obj/item/toy/cards/deck/cas, +/obj/item/toy/cards/deck/kotahi, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aMG" = ( +/obj/structure/fans/tiny/invisible, +/obj/structure/flora/grass/jungle/b, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aMJ" = ( +/obj/structure/flora/tree/jungle, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aMM" = ( +/obj/machinery/computer/security, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/iron, +/area/centcom/interlink) +"aMQ" = ( +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"aMR" = ( +/obj/machinery/power/shuttle_engine/large{ + dir = 4 + }, +/obj/effect/light_emitter/interlink, +/turf/open/floor/plating{ + baseturfs = /turf/open/floor/plating + }, +/area/centcom/holding/cafe) +"aMV" = ( +/obj/structure/chair/sofa/right/brown, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aMW" = ( +/obj/structure/flora/grass/green{ + icon_state = "snowgrass1bb" + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aNd" = ( +/obj/structure/table/wood, +/obj/item/stack/sheet/bone{ + pixel_y = 7; + pixel_x = 3 + }, +/obj/structure/wall_torch/spawns_lit/directional/south, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"aNe" = ( +/obj/machinery/chem_master/condimaster, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"aNg" = ( +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/turf/open/lava/fake, +/area/centcom/holding/cafepark) +"aNi" = ( +/obj/item/reagent_containers/cup/glass/bottle/gin{ + pixel_x = -7; + pixel_y = 15 + }, +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_x = 1; + pixel_y = 13 + }, +/obj/item/reagent_containers/cup/glass/bottle/sake{ + pixel_x = 10; + pixel_y = 11 + }, +/obj/item/reagent_containers/cup/glass/bottle/kahlua{ + pixel_x = 2; + pixel_y = 8 + }, +/obj/item/reagent_containers/cup/glass/bottle/wine{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/bottle/bottleofnothing{ + pixel_x = -8; + pixel_y = 6 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aNj" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/wood{ + name = "Kitchen" + }, +/obj/structure/fans/tiny/invisible, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"aNk" = ( +/obj/structure/flora/bush/large{ + icon_state = "bush3" + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aNp" = ( +/obj/structure/stone_tile/block, +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/item/flashlight/flare/candle/infinite, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"aNq" = ( +/obj/machinery/button/door{ + id = "ghostcafecabinb"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -25; + specialfunctions = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aNy" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"aNz" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/centcom/holding/cafe) +"aNB" = ( +/obj/structure/flora/bush/leavy/style_3, +/obj/structure/flora/tree/jungle, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aNF" = ( +/obj/structure/fans/tiny/invisible, +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"aNK" = ( +/obj/structure/flora/bush/flowers_yw{ + pixel_x = 3; + pixel_y = 3 + }, +/turf/open/floor/grass/fairy, +/area/centcom/holding/cafepark) +"aNT" = ( +/obj/structure/fans/tiny/invisible, +/obj/machinery/door/airlock/wood{ + id_tag = "CCSauna"; + name = "Sauna" + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aNU" = ( +/obj/structure/closet/crate/wooden/toy, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"aNY" = ( +/turf/open/floor/iron/showroomfloor, +/area/centcom/holding/cafe) +"aOb" = ( +/obj/structure/table, +/obj/item/lightreplacer, +/obj/item/lightreplacer, +/obj/item/lightreplacer, +/obj/item/lightreplacer, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aOc" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/plating/vox, +/area/centcom/holding/cafevox) +"aOi" = ( +/obj/machinery/seed_extractor, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"aOl" = ( +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron, +/area/centcom/interlink) +"aOp" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aOr" = ( +/obj/item/reagent_containers/cup/glass/bottle/wine{ + pixel_x = 9; + pixel_y = 19 + }, +/obj/item/reagent_containers/cup/glass/bottle/tequila{ + pixel_y = 17 + }, +/obj/item/reagent_containers/cup/glass/bottle/vermouth{ + pixel_x = -15; + pixel_y = 15 + }, +/obj/item/reagent_containers/cup/glass/bottle/patron{ + pixel_x = -5; + pixel_y = 16 + }, +/obj/item/reagent_containers/cup/glass/bottle/hcider{ + pixel_x = 7; + pixel_y = 9 + }, +/obj/item/reagent_containers/cup/glass/bottle/cognac{ + pixel_x = -10; + pixel_y = 7 + }, +/obj/item/reagent_containers/cup/glass/bottle/vodka{ + pixel_y = 6 + }, +/obj/structure/table/wood, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aOw" = ( +/obj/machinery/computer/slot_machine, +/obj/item/coin/silver, +/obj/item/coin/silver, +/obj/item/coin, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aOz" = ( +/obj/effect/light_emitter/interlink, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"aOG" = ( +/obj/structure/closet, +/obj/item/stack/sheet/mineral/wood/fifty, +/obj/item/stack/tile/wood{ + amount = 24 + }, +/obj/item/stack/tile/carpet/black/fifty, +/obj/item/stack/tile/carpet/blue/fifty, +/obj/item/stack/tile/carpet/cyan/fifty, +/obj/item/stack/tile/carpet/fifty, +/obj/item/stack/tile/carpet/green/fifty, +/obj/item/stack/tile/carpet/orange/fifty, +/obj/item/stack/tile/carpet/purple/fifty, +/obj/item/stack/tile/carpet/red/fifty, +/obj/item/stack/tile/carpet/royalblack/fifty, +/obj/item/stack/tile/carpet/royalblue/fifty, +/obj/item/storage/belt/utility/chief/full{ + name = "Construction Toolbelt" + }, +/obj/item/storage/belt/utility/chief/full{ + name = "Construction Toolbelt" + }, +/obj/item/storage/belt/utility/chief/full{ + name = "Construction Toolbelt" + }, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/turf/open/floor/plating/vox, +/area/centcom/holding/cafevox) +"aOI" = ( +/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/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aOO" = ( +/turf/open/misc/beach/sand{ + dir = 9 + }, +/area/centcom/holding/cafepark) +"aOR" = ( +/obj/structure/fans/tiny/invisible, +/turf/open/floor/iron/stairs, +/area/centcom/holding/cafe) +"aOV" = ( +/obj/item/book/manual/wiki/barman_recipes, +/obj/structure/table/wood, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aOW" = ( +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"aOY" = ( +/obj/structure/curtain, +/obj/machinery/light/floor{ + alpha = 0; + invisibility = 100; + light_range = 10; + nightshift_light_power = 10 + }, +/turf/open/indestructible/bathroom, +/area/centcom/holding/cafedorms) +"aOZ" = ( +/obj/machinery/light/directional/north, +/obj/machinery/libraryscanner, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aPe" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 6 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"aPf" = ( +/turf/closed/mineral/earth_like, +/area/centcom/holding/cafepark) +"aPo" = ( +/obj/structure/sink/directional/west, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aPC" = ( +/obj/structure/railing{ + invisibility = 100; + dir = 8 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aPG" = ( +/obj/structure/sink/kitchen/directional/east, +/turf/open/indestructible/hoteltile{ + icon_state = "cafeteria" + }, +/area/centcom/holding/cafe) +"aPK" = ( +/obj/machinery/vending/wardrobe/cent_wardrobe, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aPU" = ( +/obj/effect/light_emitter/interlink, +/turf/open/floor/plating{ + baseturfs = /turf/open/floor/plating + }, +/area/centcom/holding/cafe) +"aPV" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/holding/cafe) +"aPY" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"aPZ" = ( +/obj/structure/sign/painting/library_secure, +/turf/closed/indestructible/wood, +/area/centcom/holding/cafe) +"aQa" = ( +/obj/machinery/vending/wardrobe/det_wardrobe, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aQd" = ( +/obj/structure/table/wood/fancy/royalblue, +/obj/item/reagent_containers/cup/soda_cans/starkist{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/item/reagent_containers/cup/soda_cans/dr_gibb{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/toy/cards/deck/tarot, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aQf" = ( +/turf/open/water/beach, +/area/centcom/holding/cafepark) +"aQw" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/flora/grass/jungle/b/style_random, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aQx" = ( +/obj/effect/turf_decal/trimline/green/line{ + dir = 10 + }, +/obj/machinery/button/door/directional/west{ + id = "il_bar"; + name = "Bar Shutter Control"; + pixel_y = -8; + req_access = list("bar") + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"aQz" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/emcloset, +/turf/open/floor/mineral/titanium/blue, +/area/centcom/interlink) +"aQD" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/item/reagent_containers/condiment/enzyme{ + layer = 5; + name = "universally-sized universal enzyme"; + pixel_x = -4; + volume = 2000 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "cafeteria" + }, +/area/centcom/holding/cafe) +"aQE" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"aQK" = ( +/obj/structure/closet, +/obj/item/stack/sheet/mineral/wood/fifty, +/obj/item/stack/tile/wood{ + amount = 24 + }, +/obj/item/stack/tile/carpet/black/fifty, +/obj/item/stack/tile/carpet/blue/fifty, +/obj/item/stack/tile/carpet/cyan/fifty, +/obj/item/stack/tile/carpet/fifty, +/obj/item/stack/tile/carpet/green/fifty, +/obj/item/stack/tile/carpet/orange/fifty, +/obj/item/stack/tile/carpet/purple/fifty, +/obj/item/stack/tile/carpet/red/fifty, +/obj/item/stack/tile/carpet/royalblack/fifty, +/obj/item/stack/tile/carpet/royalblue/fifty, +/obj/item/storage/belt/utility/chief/full{ + name = "Construction Toolbelt" + }, +/obj/item/storage/belt/utility/chief/full{ + name = "Construction Toolbelt" + }, +/obj/item/storage/belt/utility/chief/full{ + name = "Construction Toolbelt" + }, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aQM" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/open/floor/plating/vox, +/area/centcom/holding/cafevox) +"aQQ" = ( +/obj/structure/fireplace{ + dir = 4 + }, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"aQR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plating, +/area/centcom/interlink) +"aQW" = ( +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aQY" = ( +/turf/open/floor/wood, +/area/centcom/interlink) +"aRd" = ( +/obj/item/kirbyplants/random, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"aRe" = ( +/obj/structure/flora/bush/fullgrass, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"aRi" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/indestructible/cobble/corner{ + dir = 1 + }, +/area/centcom/holding/cafepark) +"aRk" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/turf/open/floor/plating, +/area/centcom/interlink) +"aRo" = ( +/obj/structure/table/wood, +/obj/machinery/light/floor{ + alpha = 0; + invisibility = 100; + light_range = 10; + nightshift_light_power = 10 + }, +/obj/item/reagent_containers/cup/glass/mug/tea, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aRt" = ( +/obj/structure/table/wood/fancy/blue, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = -9; + pixel_y = 2 + }, +/obj/item/reagent_containers/condiment/peppermill{ + dir = 1; + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -9; + pixel_y = 11 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -3; + pixel_y = 11 + }, +/obj/item/reagent_containers/condiment/pack/ketchup{ + pixel_x = 3 + }, +/obj/item/reagent_containers/condiment/pack/ketchup{ + pixel_x = 5 + }, +/obj/item/reagent_containers/condiment/pack/ketchup{ + pixel_x = 7 + }, +/obj/item/reagent_containers/condiment/pack/hotsauce{ + pixel_x = 5; + pixel_y = 2 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aRx" = ( +/obj/structure/sink/directional/east, +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/toilet{ + pixel_y = 14 + }, +/turf/open/indestructible/bathroom, +/area/centcom/holding/cafe) +"aRC" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/centcom/holding/cafe) +"aRH" = ( +/obj/structure/flora/bush/flowers_br{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/grass/fairy, +/area/centcom/holding/cafepark) +"aRL" = ( +/obj/structure/flora/bush/reed, +/turf/open/misc/beach/coast{ + dir = 4 + }, +/area/centcom/holding/cafepark) +"aRM" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aRP" = ( +/obj/structure/flora/bush/sparsegrass, +/obj/structure/flora/biolumi/flower{ + light_color = "#D9FF00"; + light_power = 0.3; + light_range = 10; + random_light = null + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aRS" = ( +/turf/open/misc/beach/coast/corner{ + dir = 4 + }, +/area/centcom/holding/cafepark) +"aSg" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/rack, +/obj/item/storage/box/nif_ghost_box, +/obj/item/storage/box/nif_ghost_box, +/obj/item/storage/box/nif_ghost_box, +/obj/item/storage/box/nif_ghost_box, +/obj/item/storage/box/nif_ghost_box, +/obj/item/storage/box/nif_ghost_box, +/obj/item/storage/box/nif_ghost_box, +/obj/item/storage/box/nif_ghost_box, +/obj/item/storage/box/nif_ghost_box, +/obj/item/storage/box/nif_ghost_box, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aSi" = ( +/obj/machinery/door/airlock/survival_pod{ + name = "Cockpit" + }, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"aSn" = ( +/obj/structure/table, +/obj/machinery/light/directional/west{ + bulb_colour = "#e8eaff " + }, +/obj/item/soap, +/obj/item/soap, +/obj/item/soap, +/obj/item/soap, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aSq" = ( +/turf/open/misc/beach/coast/corner, +/area/centcom/holding/cafepark) +"aSs" = ( +/obj/structure/flora/tree/jungle/small{ + icon_state = "tree4" + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aSt" = ( +/obj/effect/turf_decal/sand, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"aSy" = ( +/obj/structure/bookcase/random, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aSC" = ( +/obj/structure/chair/stool/directional/south, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aSP" = ( +/turf/closed/indestructible/rock, +/area/centcom/holding/cafe) +"aSV" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/stone_tile/block{ + dir = 4 + }, +/turf/open/lava/fake, +/area/centcom/holding/cafepark) +"aSY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/centcom/interlink) +"aSZ" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"aTb" = ( +/turf/closed/indestructible/fakeglass, +/area/centcom/holding/cafe) +"aTk" = ( +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aTl" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"aTp" = ( +/obj/machinery/light/floor{ + alpha = 0; + invisibility = 100; + light_power = 10; + light_range = 20; + nightshift_light_power = 10 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 4 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"aTu" = ( +/obj/structure/flora/bush/grassy/style_2, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aTv" = ( +/obj/structure/closet/crate/bin, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"aTB" = ( +/obj/machinery/light/floor{ + alpha = 0; + invisibility = 100; + light_power = 10; + light_range = 20; + nightshift_light_power = 10 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 8 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"aTD" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"aTE" = ( +/obj/effect/turf_decal/caution, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron, +/area/centcom/interlink) +"aTG" = ( +/obj/structure/flora/grass/jungle/b/style_5, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aTR" = ( +/obj/structure/spacevine{ + name = "thick vines"; + opacity = 1 + }, +/obj/structure/alien/weeds, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"aTS" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/centcom/interlink) +"aTV" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/door/firedoor, +/obj/structure/fans/tiny/invisible, +/obj/machinery/door/airlock/abductor{ + desc = "What could possibly be in here?"; + name = "Laboraty" + }, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"aUd" = ( +/obj/machinery/button/door/directional/west{ + id = "ghostcafecell1"; + name = "Prison Cell 1 Lock"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/closet/secure_closet/brig, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"aUh" = ( +/obj/structure/chair/sofa/bench/right, +/obj/effect/landmark/latejoin, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"aUm" = ( +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"aUo" = ( +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aUr" = ( +/turf/open/misc/beach/sand{ + dir = 8 + }, +/area/centcom/holding/cafepark) +"aUu" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 4 + }, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"aUw" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"aUz" = ( +/obj/machinery/light/directional/south, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aUA" = ( +/obj/machinery/door/window/left/directional/west{ + dir = 1; + name = "Monkey Pen"; + pixel_y = 2; + req_access = list("genetics") + }, +/obj/machinery/light/directional/west, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"aUK" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/wood/glass{ + desc = "A strange small bar. It's actually remarkably close to Space Station 13."; + name = "Library" + }, +/obj/structure/fans/tiny/invisible, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aUM" = ( +/obj/structure/fans/tiny/invisible, +/turf/open/indestructible/cobble/side{ + dir = 1 + }, +/area/centcom/holding/cafepark) +"aUT" = ( +/obj/structure/closet/crate/freezer, +/turf/open/indestructible/hoteltile{ + icon_state = "cafeteria" + }, +/area/centcom/holding/cafe) +"aUZ" = ( +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aVg" = ( +/obj/structure/table/wood, +/obj/item/folder/white{ + pixel_x = -4; + pixel_y = -3 + }, +/obj/item/toy/figure/psychologist{ + pixel_x = 4; + pixel_y = 10 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aVk" = ( +/obj/machinery/light/directional/north, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"aVp" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/wood{ + name = "Janitorial" + }, +/obj/structure/fans/tiny/invisible, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"aVs" = ( +/obj/machinery/door/airlock/external/glass, +/turf/open/floor/plating, +/area/centcom/interlink) +"aVv" = ( +/turf/open/misc/beach/coast{ + dir = 9 + }, +/area/centcom/holding/cafepark) +"aVA" = ( +/obj/structure/flora/bush/generic, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aVC" = ( +/obj/machinery/shower/directional/west, +/turf/open/indestructible/bathroom, +/area/centcom/holding/cafedorms) +"aVI" = ( +/obj/structure/fake_stairs/directional/east, +/obj/structure/railing, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"aWb" = ( +/turf/open/floor/iron/white, +/area/centcom/interlink) +"aWf" = ( +/obj/machinery/light/directional/west, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aWg" = ( +/mob/living/basic/crab, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"aWh" = ( +/obj/structure/rack, +/obj/item/tank/internals/nitrogen/belt/full, +/obj/item/tank/internals/nitrogen/belt/full, +/obj/item/tank/internals/nitrogen/belt/full, +/obj/item/tank/internals/nitrogen/belt/full, +/obj/item/tank/internals/nitrogen/belt/full, +/obj/item/clothing/mask/breath/vox, +/obj/item/clothing/mask/breath/vox, +/obj/item/clothing/mask/breath/vox, +/obj/item/clothing/mask/breath/vox, +/obj/item/clothing/mask/breath/vox, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aWi" = ( +/turf/open/floor/holofloor/beach/water, +/area/centcom/holding/cafepark) +"aWj" = ( +/obj/structure/flora/bush/grassy/style_3, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aWo" = ( +/obj/structure/spacevine{ + name = "thick vines"; + opacity = 1 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"aWp" = ( +/obj/effect/turf_decal/siding{ + color = "#2e2e2e"; + dir = 9 + }, +/obj/machinery/washing_machine, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/bamboo, +/area/centcom/holding/cafe) +"aWq" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aWy" = ( +/obj/structure/flora/bush/flowers_pp, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"aWL" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/machinery/vending/barbervend, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aWP" = ( +/obj/structure/fence/door/opened, +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/centcom/holding/cafepark) +"aWT" = ( +/obj/structure/easel, +/obj/item/canvas/twentythree_twentythree, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aXd" = ( +/obj/machinery/vending/wardrobe/law_wardrobe/ghost_cafe, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aXl" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "ghostcafekitchen"; + name = "Kitchen Shutters" + }, +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/turf/open/indestructible/hoteltile{ + icon_state = "plating" + }, +/area/centcom/holding/cafe) +"aXm" = ( +/turf/closed/wall/mineral/titanium, +/area/centcom/interlink) +"aXn" = ( +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile, +/turf/open/lava/fake, +/area/centcom/holding/cafepark) +"aXA" = ( +/obj/structure/flora/grass/green{ + icon_state = "snowgrass3gb" + }, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"aXF" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/holding/cafe) +"aXG" = ( +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"aXN" = ( +/obj/machinery/vending/engivend{ + default_price = 0; + extended_inventory = 1; + extra_price = 0; + fair_market_price = 0 + }, +/obj/machinery/light/directional/east, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aXR" = ( +/turf/open/floor/iron/freezer, +/area/centcom/holding/cafe) +"aXV" = ( +/obj/structure/table, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aXW" = ( +/obj/structure/flora/bush/generic, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"aYc" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"aYj" = ( +/obj/machinery/vending/wardrobe/chap_wardrobe/unholy/ghost_cafe, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aYk" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/sink/directional/east, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"aYn" = ( +/obj/structure/fluff/tram_rail/end{ + desc = "This probably won't stop a titanium tram from hitting the wall, but it's the thought that counts."; + dir = 4; + name = "buffer rail" + }, +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/floor/plating, +/area/centcom/interlink) +"aYp" = ( +/obj/machinery/light/directional/west, +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"aYA" = ( +/obj/structure/bed/pod, +/turf/open/indestructible/cobble/side{ + dir = 4 + }, +/area/centcom/holding/cafepark) +"aYK" = ( +/obj/structure/chair/sofa/bench/left, +/obj/effect/landmark/latejoin, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"aYO" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ + density = 0 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aYP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"aYQ" = ( +/obj/machinery/door/airlock{ + id_tag = "CCD2"; + name = "Vox Box Construction" + }, +/obj/structure/fans/tiny/invisible, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafevox) +"aYX" = ( +/obj/machinery/duct, +/obj/machinery/dryer{ + dir = 8; + pixel_x = 7 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"aZq" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/indestructible/plating, +/area/centcom/holding/cafe) +"aZs" = ( +/obj/structure/flora/rock/pile/jungle/style_2, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"aZz" = ( +/obj/structure/table/wood, +/obj/item/stack/sheet/mineral/wood/fifty, +/obj/item/reagent_containers/cup/bucket/wooden, +/obj/machinery/button/door{ + id = "CCSauna"; + name = "Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4; + pixel_y = -25 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aZC" = ( +/obj/machinery/deepfryer, +/turf/open/indestructible/hoteltile{ + icon_state = "cafeteria" + }, +/area/centcom/holding/cafe) +"aZF" = ( +/obj/structure/table/wood, +/obj/item/papercutter{ + pixel_x = -9; + pixel_y = 1 + }, +/obj/item/pen/blue, +/obj/item/paper_bin/carbon{ + pixel_x = 6 + }, +/obj/item/toy/crayon/spraycan/infinite, +/obj/item/toy/crayon/spraycan/infinite, +/obj/item/toy/crayon/spraycan/infinite, +/obj/item/toy/crayon/spraycan/infinite, +/obj/item/toy/crayon/spraycan/infinite, +/obj/item/toy/crayon/spraycan/infinite, +/obj/item/toy/crayon/spraycan/infinite, +/obj/item/toy/crayon/spraycan/infinite, +/obj/item/toy/crayon/spraycan/infinite, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"aZK" = ( +/obj/machinery/food_cart, +/turf/open/indestructible/hoteltile{ + icon_state = "cafeteria" + }, +/area/centcom/holding/cafe) +"aZU" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"aZW" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/fullupgrade{ + density = 0 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"bae" = ( +/obj/structure/table, +/obj/machinery/computer/libraryconsole{ + dir = 1; + pixel_y = 6 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"baM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/centcom/holding/cafepark) +"bbW" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/vending/wardrobe/gene_wardrobe/ghost_cafe, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"bcb" = ( +/turf/open/floor/carpet/cyan, +/area/centcom/holding/cafe) +"bck" = ( +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/iron, +/area/centcom/interlink) +"bcE" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 4 + }, +/turf/open/lava/fake, +/area/centcom/holding/cafepark) +"bdI" = ( +/obj/structure/railing, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"beb" = ( +/obj/machinery/light/floor, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron, +/area/centcom/interlink) +"beg" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"bhr" = ( +/obj/machinery/griddle, +/obj/machinery/light/directional/west, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"bhQ" = ( +/obj/structure/mineral_door/paperframe{ + name = "Shinto Cabin Bedroom" + }, +/turf/open/floor/carpet, +/area/centcom/holding/cafe) +"bit" = ( +/obj/machinery/door/airlock{ + id_tag = "room7"; + name = "Cabin" + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"biB" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/trophy{ + pixel_y = 7; + pixel_x = -11 + }, +/obj/item/reagent_containers/cup/glass/trophy{ + pixel_y = 11; + pixel_x = -1 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"biF" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_y = 5 + }, +/obj/item/pen, +/turf/open/floor/wood, +/area/centcom/interlink) +"bja" = ( +/obj/structure/railing/wooden_fencing, +/obj/structure/railing/wooden_fencing{ + dir = 4 + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"bjh" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"bjq" = ( +/obj/structure/fence/end{ + dir = 4 + }, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"bkA" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/machinery/washing_machine, +/obj/machinery/light/small/directional/north, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"bll" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"blq" = ( +/obj/effect/turf_decal/siding/white/corner{ + dir = 1 + }, +/obj/effect/landmark/latejoin, +/turf/open/floor/iron, +/area/centcom/interlink) +"blD" = ( +/obj/structure/railing, +/obj/structure/fans/tiny/invisible, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"blI" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/closet/crate/bin, +/obj/item/reagent_containers/cup/glass/coffee_cup, +/obj/item/reagent_containers/cup/glass/coffee_cup, +/obj/item/reagent_containers/cup/glass/coffee_cup, +/turf/open/floor/iron, +/area/centcom/interlink) +"bnI" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/bottle/moonshine{ + pixel_x = -5; + pixel_y = 7 + }, +/obj/item/reagent_containers/cup/beaker/large/ceramic{ + pixel_x = 9; + pixel_y = 11 + }, +/obj/item/reagent_containers/cup/beaker/large/ceramic{ + pixel_x = 7; + pixel_y = 2 + }, +/obj/structure/wall_torch/spawns_lit/directional/west, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"bnU" = ( +/obj/structure/flora/tree/stump, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"boa" = ( +/obj/machinery/button/door{ + id = "ghostcaferesort2"; + name = "Resort Bolt Control"; + normaldoorcontrol = 1; + pixel_y = -24; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafedorms) +"bod" = ( +/obj/effect/turf_decal/trimline/dark_green/filled/warning{ + dir = 6 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"bqc" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/storage/fancy/candle_box/pear{ + pixel_y = 10 + }, +/obj/item/storage/fancy/candle_box/vanilla{ + pixel_y = 4 + }, +/turf/open/floor/wood, +/area/centcom/interlink) +"bqT" = ( +/obj/structure/wall_torch/spawns_lit/directional/north, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"brL" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"bsj" = ( +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"bsO" = ( +/obj/structure/dresser, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"bsT" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/iron, +/area/centcom/interlink) +"btJ" = ( +/obj/machinery/door/airlock{ + id_tag = "stall2"; + name = "Stall" + }, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"btN" = ( +/obj/structure/sign/painting/large/library{ + dir = 4 + }, +/turf/open/floor/carpet/cyan, +/area/centcom/holding/cafe) +"buc" = ( +/obj/structure/plaque/static_plaque/golden/captain{ + pixel_x = -32 + }, +/obj/effect/turf_decal/trimline/dark_green/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"bul" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/centcom/interlink) +"buX" = ( +/obj/machinery/vending/hydronutrients{ + products = list(/obj/item/reagent_containers/cup/bottle/nutrient/ez = 50, /obj/item/reagent_containers/cup/bottle/nutrient/l4z = 20, /obj/item/reagent_containers/cup/bottle/nutrient/rh = 10, /obj/item/reagent_containers/spray/pestspray = 30, /obj/item/reagent_containers/syringe = 5, /obj/item/storage/bag/plants = 30, /obj/item/cultivator = 10, /obj/item/shovel/spade = 10, /obj/item/plant_analyzer = 10) + }, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"bvn" = ( +/obj/machinery/door/airlock/security{ + id_tag = "ghostcafecell1"; + name = "Cell 1" + }, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"bvA" = ( +/obj/machinery/door/window/right/directional/south, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/centcom/holding/cafe) +"bwG" = ( +/obj/structure/table/wood, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"bwP" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Interlink Longue" + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"bxj" = ( +/obj/machinery/light/warm/directional/north, +/turf/open/floor/wood, +/area/centcom/interlink) +"bxz" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/centcom/interlink) +"bAr" = ( +/obj/effect/turf_decal/siding/wood, +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = -12; + pixel_y = -42 + }, +/obj/item/fancy_pillow{ + pixel_x = -22; + pixel_y = -7 + }, +/obj/item/fancy_pillow{ + pixel_y = -1 + }, +/turf/open/floor/bamboo, +/area/centcom/holding/cafe) +"bBV" = ( +/obj/structure/showcase/fakeid{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"bBX" = ( +/obj/structure/closet/secure_closet/personal, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"bCB" = ( +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Interlink Wardens Office"; + req_access = list("armory") + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"bDa" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"bDM" = ( +/obj/machinery/door/airlock/centcom{ + name = "Communications Access" + }, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/effect/mapping_helpers/airlock/access/any/cent_com/rep_or_captain, +/turf/open/floor/iron, +/area/centcom/interlink) +"bEI" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"bEV" = ( +/obj/structure/fans/tiny/invisible, +/obj/structure/fake_stairs/wood/directional/north, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"bFi" = ( +/turf/open/misc/beach/coast{ + dir = 10 + }, +/area/centcom/holding/cafepark) +"bFD" = ( +/obj/effect/spawner/liquids_spawner, +/obj/machinery/light/floor, +/turf/open/floor/iron/pool, +/area/centcom/holding/cafepark) +"bFN" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/time_clock/directional/west, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"bGx" = ( +/obj/item/clothing/suit/costume/xenos, +/obj/item/clothing/head/costume/xenos, +/obj/structure/alien/weeds, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"bGH" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"bHC" = ( +/obj/structure/flora/bush/large{ + icon_state = "bush3" + }, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"bIf" = ( +/obj/machinery/biogenerator, +/turf/closed/indestructible/wood, +/area/centcom/holding/cafe) +"bIL" = ( +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"bIO" = ( +/turf/closed/indestructible/weeb, +/area/centcom/holding/cafe) +"bJb" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Interlink Security Post" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"bKf" = ( +/obj/machinery/shower/directional/east, +/turf/open/floor/iron/freezer, +/area/centcom/interlink) +"bLN" = ( +/obj/effect/turf_decal/trimline/green/filled/arrow_cw{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/filled/arrow_ccw{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"bLZ" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"bNh" = ( +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"bNi" = ( +/obj/machinery/computer/cryopod/directional/west, +/obj/machinery/cryopod/quiet{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"bNC" = ( +/obj/machinery/door/airlock{ + id_tag = "room5"; + name = "Cabin" + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"bNV" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 8 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"bOl" = ( +/obj/effect/turf_decal/siding/white/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/arrow_cw{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"bON" = ( +/obj/structure/chair/sofa/bench/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"bQR" = ( +/obj/structure/chair/sofa/corp{ + dir = 4 + }, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"bQZ" = ( +/obj/structure/reagent_dispensers/plumbed, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"bRc" = ( +/obj/machinery/vending/dorms, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"bSf" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/fans/tiny/invisible, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"bTg" = ( +/obj/machinery/light/directional/south, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"bTH" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/landmark/latejoin, +/turf/open/floor/iron, +/area/centcom/interlink) +"bTK" = ( +/obj/structure/fireplace{ + dir = 8 + }, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"bTR" = ( +/obj/structure/table/reinforced, +/obj/item/book/manual/wiki/security_space_law{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"bUg" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 1 + }, +/obj/machinery/light/warm/directional/south, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"bUO" = ( +/obj/structure/bed/double, +/obj/item/bedsheet/random/double, +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"bUS" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/structure/railing{ + dir = 5 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"bVn" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/structure/chair/sofa/bench/left, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"bVx" = ( +/obj/structure/table/wood, +/obj/machinery/coffeemaker/impressa, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"bVH" = ( +/obj/machinery/door/poddoor/shutters/window/indestructible{ + id = "interlink_hall"; + name = "Windowed Interlink Access Shutters" + }, +/obj/effect/turf_decal/caution/stand_clear, +/turf/open/floor/iron, +/area/centcom/interlink) +"bWw" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/light_emitter/interlink, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"bWy" = ( +/obj/machinery/button/door/directional/east{ + id = "arr_hall_lookout"; + name = "Lookout Shutters Control"; + pixel_y = -8; + req_access = list("command") + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"bWA" = ( +/obj/structure/closet/cabinet, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"bXF" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"bYx" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"bYH" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"bZt" = ( +/obj/structure/chair/sofa/corp/corner, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"cal" = ( +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"caJ" = ( +/obj/structure/curtain/cloth/fancy/mechanical{ + icon_state = "bounty-open"; + icon_type = "bounty"; + id = "CCSalon"; + name = "curtain" + }, +/turf/open/floor/iron/stairs/old, +/area/centcom/holding/cafe) +"caY" = ( +/obj/structure/railing/wooden_fencing, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"cby" = ( +/obj/structure/railing{ + invisibility = 100; + dir = 8 + }, +/obj/effect/spawner/liquids_spawner, +/turf/open/floor/iron/pool, +/area/centcom/holding/cafepark) +"cbF" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/obj/machinery/button/door/directional/south{ + id = "room4"; + name = "Door Lock"; + normaldoorcontrol = 1; + pixel_x = -8; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"cdj" = ( +/obj/structure/table/wood, +/obj/item/clipboard{ + pixel_y = 10 + }, +/obj/item/folder/blue{ + pixel_y = 19 + }, +/turf/open/floor/wood, +/area/centcom/interlink) +"cfs" = ( +/obj/structure/alien/weeds, +/obj/effect/decal/remains/xeno/larva, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"cfu" = ( +/turf/open/floor/grass, +/area/centcom/interlink) +"cgU" = ( +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"che" = ( +/obj/effect/light_emitter/interlink, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"chT" = ( +/obj/structure/table/wood, +/obj/item/fishing_rod, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"chZ" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"ckg" = ( +/obj/machinery/door/window/left/directional/north{ + name = "Resort Bar" + }, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"ckD" = ( +/obj/item/pillow, +/turf/open/floor/carpet/red, +/area/centcom/interlink) +"ckG" = ( +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/structure/bookcase/random/religion, +/turf/open/floor/iron, +/area/centcom/interlink) +"ckV" = ( +/turf/closed/indestructible/fakedoor{ + desc = "Why would you want to go back, you just got here!"; + name = "Central Command Security Dock" + }, +/area/centcom/interlink) +"ckY" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/weeds/node, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"clF" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 8 + }, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"cmh" = ( +/obj/effect/turf_decal/siding{ + color = "#2e2e2e"; + dir = 8 + }, +/turf/open/floor/bamboo, +/area/centcom/holding/cafe) +"cmV" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"cna" = ( +/obj/structure/chair/wood{ + dir = 1; + layer = 2.8 + }, +/obj/structure/wall_torch/spawns_lit/directional/east, +/turf/open/floor/wood, +/area/centcom/holding/cafepark) +"cnz" = ( +/obj/structure/railing{ + invisibility = 100 + }, +/obj/structure/chair/wood, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"cqv" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/centcom/holding/cafe) +"cqw" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"cqC" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/landmark/latejoin, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron, +/area/centcom/interlink) +"cra" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/wood, +/area/centcom/interlink) +"crf" = ( +/obj/structure/chair/sofa/bench/corner, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"crl" = ( +/obj/structure/curtain, +/obj/effect/turf_decal/siding/white, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"crI" = ( +/obj/effect/turf_decal/sand{ + density = 1 + }, +/obj/effect/decal/fakelattice, +/turf/open/floor/pod/light{ + density = 1 + }, +/area/centcom/holding/cafepark) +"csC" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/centcom/interlink) +"cuM" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"cwh" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/centcom/holding/cafe) +"cwA" = ( +/obj/effect/turf_decal/trimline/blue/filled/arrow_cw{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"cxU" = ( +/obj/machinery/firealarm/directional/north, +/obj/structure/showcase/fake_cafe_console, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"cyc" = ( +/obj/structure/chair/sofa/bench/corner, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"czd" = ( +/obj/effect/turf_decal/siding/white/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/green/filled/corner, +/obj/effect/turf_decal/trimline/green/filled/arrow_cw{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"czF" = ( +/obj/machinery/door/airlock{ + id_tag = "stall3"; + name = "E-Stall" + }, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"cAI" = ( +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"cBm" = ( +/obj/machinery/door/window/left/directional/east{ + name = "Resort Cafe" + }, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"cBq" = ( +/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, +/obj/effect/turf_decal/siding/white/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"cBR" = ( +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"cBT" = ( +/obj/structure/spacevine, +/obj/structure/alien/weeds, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"cCZ" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/chair/sofa/right/brown, +/obj/structure/sign/painting/large/library{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"cDr" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/rack/wooden, +/obj/item/flashlight/lantern{ + pixel_x = -5; + pixel_y = 2 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"cEt" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/obj/machinery/smartfridge/drying_rack, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"cEy" = ( +/obj/structure/spacevine, +/obj/structure/fans/tiny/invisible, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"cFK" = ( +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/tile/green/opposingcorners, +/turf/open/floor/iron, +/area/centcom/interlink) +"cGt" = ( +/obj/effect/turf_decal/trimline/dark_green/filled/warning, +/turf/open/floor/iron, +/area/centcom/interlink) +"cGG" = ( +/turf/open/floor/mineral/titanium/blue, +/area/centcom/interlink) +"cGX" = ( +/obj/structure/bed, +/obj/item/bedsheet/dorms, +/obj/structure/sign/painting/library_secure{ + pixel_x = 32 + }, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"cHY" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/grass, +/area/centcom/interlink) +"cIk" = ( +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"cKf" = ( +/obj/structure/chair/stool/directional/south, +/turf/open/floor/iron, +/area/centcom/interlink) +"cKZ" = ( +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"cLv" = ( +/turf/open/floor/carpet, +/area/centcom/holding/cafepark) +"cLD" = ( +/obj/structure/table, +/obj/item/storage/medkit/regular{ + pixel_x = 8; + pixel_y = 10 + }, +/obj/item/storage/medkit/regular{ + pixel_y = 6 + }, +/obj/effect/turf_decal/delivery/blue, +/turf/open/floor/iron, +/area/centcom/interlink) +"cMh" = ( +/obj/structure/table/wood, +/obj/item/clipboard, +/obj/item/folder/red, +/turf/open/floor/wood, +/area/centcom/interlink) +"cMs" = ( +/obj/structure/table/wood, +/obj/item/stamp/centcom{ + pixel_x = -8; + pixel_y = 10 + }, +/obj/item/stamp{ + pixel_y = 10 + }, +/obj/item/stamp/void{ + pixel_x = 8; + pixel_y = 10 + }, +/turf/open/floor/wood, +/area/centcom/interlink) +"cMM" = ( +/obj/structure/stone_tile/slab/cracked, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"cNw" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"cOu" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "ghostcafecabin1"; + name = "Wooden Cabin" + }, +/obj/structure/fans/tiny/invisible, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"cOV" = ( +/obj/machinery/door/airlock/centcom{ + name = "Administrative Offices" + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/cent_com/rep_or_captain, +/turf/open/floor/iron, +/area/centcom/interlink) +"cPo" = ( +/obj/structure/table/abductor, +/turf/open/floor/plating/abductor, +/area/centcom/holding/cafepark) +"cQq" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/hedge, +/obj/effect/light_emitter/interlink, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"cQH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"cRs" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"cTQ" = ( +/obj/machinery/photocopier, +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"cVm" = ( +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"cVK" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 8 + }, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"cWF" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp{ + pixel_y = 4 + }, +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"cWG" = ( +/obj/machinery/light/directional/west, +/obj/structure/table{ + name = "Jim Norton's Quebecois Coffee table" + }, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"cWL" = ( +/obj/machinery/light/cold/directional/east, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/centcom/interlink) +"cXb" = ( +/obj/structure/bed/maint{ + pixel_y = 13 + }, +/obj/structure/bed/maint, +/obj/item/bedsheet/black/double{ + dir = 1 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafepark) +"cYb" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"cYc" = ( +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron, +/area/centcom/interlink) +"cYT" = ( +/obj/structure/closet{ + name = "Cryogenics Sleepware" + }, +/obj/item/clothing/under/misc/pj/blue, +/obj/item/clothing/under/misc/pj/blue, +/obj/item/clothing/head/costume/nightcap/blue, +/obj/item/clothing/head/costume/nightcap/blue, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"cZJ" = ( +/obj/structure/flora/tree/palm, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"dai" = ( +/obj/item/flashlight/flare/torch{ + pixel_x = -4; + pixel_y = -10 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"dau" = ( +/obj/machinery/door/airlock/wood/glass{ + desc = "A strange small bar. It's actually remarkably close to Space Station 13."; + name = "Library" + }, +/obj/structure/fans/tiny/invisible, +/obj/effect/turf_decal/caution/stand_clear, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"dav" = ( +/obj/structure/railing/corner/end{ + dir = 4 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"dbn" = ( +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/toilet{ + pixel_y = 14 + }, +/turf/open/indestructible/bathroom, +/area/centcom/holding/cafe) +"dbZ" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"dcP" = ( +/obj/structure/closet/secure_closet/freezer/kitchen/all_access, +/turf/open/floor/iron/showroomfloor, +/area/centcom/holding/cafe) +"ddp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/centcom/holding/cafepark) +"deD" = ( +/obj/machinery/status_display/shuttle{ + pixel_y = -32; + shuttle_id = "arrivals_shuttle" + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"dfL" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"dgl" = ( +/obj/effect/spawner/liquids_spawner, +/turf/open/floor/iron/stairs, +/area/centcom/holding/cafepark) +"dgV" = ( +/turf/open/floor/iron/white, +/area/centcom/interlink/dorm_rooms) +"dhi" = ( +/obj/structure/fans/tiny/invisible, +/obj/structure/fence{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafepark) +"djn" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/fans/tiny, +/obj/structure/mineral_door/wood, +/turf/open/floor/wood/large, +/area/centcom/holding/cafe) +"dky" = ( +/obj/structure/flora/tree/jungle/style_4, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"dkD" = ( +/obj/machinery/door/window/brigdoor/left/directional/south{ + name = "Interlink Cell"; + req_access = list("brig") + }, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/smooth, +/area/centcom/interlink) +"dkE" = ( +/obj/machinery/light/cold/directional/south, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"dkR" = ( +/obj/effect/light_emitter/interlink, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/centcom/interlink) +"dmb" = ( +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"dmR" = ( +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"doA" = ( +/turf/open/floor/wood/large, +/area/centcom/holding/cafe) +"drE" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/parquet, +/area/centcom/interlink) +"dsH" = ( +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"dsW" = ( +/obj/item/storage/basket, +/obj/effect/light_emitter/interlink, +/turf/open/floor/carpet/red, +/area/centcom/interlink) +"dtr" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/computer/operating, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"dtL" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"dwx" = ( +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/turf/open/floor/iron, +/area/centcom/interlink) +"dxP" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/light_emitter/interlink, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"dyE" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"dyI" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4; + greyscale_colors = "#B4CDDC" + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/centcom/interlink) +"dyU" = ( +/obj/structure/chair/sofa/corp/corner{ + dir = 4 + }, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"dzn" = ( +/obj/structure/fence{ + dir = 4 + }, +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"dAC" = ( +/obj/effect/turf_decal/siding/white{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"dAM" = ( +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"dBJ" = ( +/obj/structure/table, +/turf/open/floor/plating, +/area/centcom/interlink) +"dCa" = ( +/obj/machinery/door/airlock/bathroom{ + name = "Unisex Bathroom" + }, +/obj/effect/turf_decal/siding/white, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/centcom/interlink) +"dDo" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"dDp" = ( +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/wood, +/area/centcom/interlink) +"dDF" = ( +/obj/structure/chair/sofa/corp, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"dFj" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Interlink Medbay" + }, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron, +/area/centcom/interlink) +"dFF" = ( +/obj/structure/sign/directions/security{ + dir = 8; + pixel_y = -8 + }, +/obj/structure/sign/directions/medical, +/obj/structure/sign/directions/arrival{ + dir = 1; + pixel_y = 8 + }, +/turf/closed/indestructible/riveted, +/area/centcom/interlink) +"dGD" = ( +/obj/effect/turf_decal/trimline/dark_green/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"dHD" = ( +/obj/machinery/light/floor, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"dHP" = ( +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"dIw" = ( +/obj/structure/flora/bush/large, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"dIM" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/closet/secure_closet/medical2, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"dIR" = ( +/obj/structure/mineral_door/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"dLq" = ( +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"dMl" = ( +/obj/structure/fermenting_barrel, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"dNn" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"dNB" = ( +/obj/structure/fake_stairs/directional, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"dOC" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/megaphone, +/obj/item/clothing/mask/whistle, +/obj/item/binoculars, +/turf/open/floor/wood, +/area/centcom/holding/cafepark) +"dOM" = ( +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"dPd" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + dir = 4; + name = "Interlink Locker Room" + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"dPq" = ( +/obj/structure/closet/secure_closet/personal, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"dPx" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"dPJ" = ( +/obj/machinery/door/airlock{ + id_tag = "CCShowers"; + name = "Showers" + }, +/obj/structure/fans/tiny/invisible, +/turf/open/floor/iron/freezer, +/area/centcom/holding/cafe) +"dRs" = ( +/obj/structure/closet/crate/freezer, +/obj/item/food/canned/tomatoes, +/obj/item/food/canned/tomatoes, +/obj/item/food/canned/tomatoes, +/obj/item/food/canned/tomatoes, +/obj/item/food/canned/tomatoes, +/obj/item/food/canned/jellyfish, +/obj/item/food/canned/jellyfish, +/obj/item/food/canned/jellyfish, +/obj/item/food/canned/jellyfish, +/obj/item/food/canned/jellyfish, +/obj/item/food/fishmeat/moonfish, +/obj/item/food/fishmeat/moonfish, +/obj/item/food/fishmeat/moonfish, +/obj/item/food/fishmeat/moonfish, +/obj/item/food/fishmeat/moonfish, +/obj/item/food/moonfish_eggs, +/obj/item/food/moonfish_eggs, +/obj/item/food/moonfish_eggs, +/obj/item/food/moonfish_eggs, +/obj/item/food/moonfish_eggs, +/turf/open/floor/iron/showroomfloor, +/area/centcom/holding/cafe) +"dRE" = ( +/obj/effect/landmark/latejoin, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"dRI" = ( +/obj/structure/table/reinforced/rglass, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/lipstick{ + pixel_x = -11; + pixel_y = 11 + }, +/obj/item/lipstick/black{ + pixel_x = -11; + pixel_y = 6 + }, +/obj/item/lipstick/jade{ + pixel_x = -11; + pixel_y = 1 + }, +/obj/item/lipstick/purple{ + pixel_x = -11; + pixel_y = -4 + }, +/obj/item/lipstick/quantum{ + pixel_x = -11; + pixel_y = -9 + }, +/obj/item/hairbrush{ + pixel_x = 2; + pixel_y = 3 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"dSf" = ( +/obj/structure/chair/sofa/bench{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/centcom/holding/cafe) +"dTl" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/light/very_dim/directional/north, +/turf/open/floor/wood, +/area/centcom/interlink) +"dUh" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/obj/structure/wall_torch/spawns_lit/directional/east, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"dVb" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"dVh" = ( +/obj/machinery/door/airlock{ + id_tag = "room2"; + name = "Cabin" + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"dVo" = ( +/obj/structure/chair/sofa/corp/right, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/carpet/purple, +/area/centcom/holding/cafe) +"dWE" = ( +/obj/machinery/door/airlock{ + id_tag = "CCD1" + }, +/obj/structure/fans/tiny/invisible, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"dXe" = ( +/obj/structure/flora/grass/jungle/b/style_2, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"dXJ" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/wood, +/area/centcom/interlink) +"dXN" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Interlink Cafe" + }, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"dYa" = ( +/obj/structure/stone_tile/surrounding_tile/cracked, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"eaJ" = ( +/obj/structure/fence{ + dir = 4 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"eaT" = ( +/obj/structure/bookcase/random/fiction, +/turf/open/floor/wood, +/area/centcom/interlink) +"ebz" = ( +/obj/effect/turf_decal/arrows/red{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"ecW" = ( +/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, +/obj/effect/turf_decal/siding/white/corner, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"eeZ" = ( +/obj/structure/chair/sofa/corp/right, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"egn" = ( +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile, +/turf/open/lava/fake, +/area/centcom/holding/cafepark) +"egv" = ( +/obj/effect/turf_decal/trimline/green/filled/arrow_cw{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white, +/obj/structure/chair/sofa/bench, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"egW" = ( +/obj/machinery/vending/dorms, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"ehI" = ( +/obj/structure/dresser{ + pixel_y = 7 + }, +/turf/open/floor/carpet/red, +/area/centcom/holding/cafedorms) +"ejQ" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "ghostcafecabin3"; + name = "Wooden Cabin" + }, +/obj/structure/fans/tiny/invisible, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"ekp" = ( +/turf/closed/indestructible/steel, +/area/centcom/holding/cafepark) +"eks" = ( +/obj/item/toy/beach_ball, +/turf/open/misc/beach/coast/corner{ + dir = 4 + }, +/area/centcom/holding/cafepark) +"ekE" = ( +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/structure/chair/stool/bar/directional/east, +/turf/open/floor/iron, +/area/centcom/interlink) +"enb" = ( +/obj/machinery/vending/cigarette, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"enf" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/vending/imported{ + default_price = 0; + extended_inventory = 1; + extra_price = 0; + fair_market_price = 0 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"eon" = ( +/obj/structure/railing{ + invisibility = 100; + dir = 8 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/indestructible/cobble, +/area/centcom/holding/cafepark) +"epr" = ( +/obj/structure/chair/sofa/left/brown, +/turf/open/floor/wood, +/area/centcom/holding/cafedorms) +"eqe" = ( +/obj/machinery/door/airlock{ + name = "Locker Room" + }, +/obj/structure/fans/tiny/invisible, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"eqS" = ( +/obj/machinery/duct, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"erP" = ( +/obj/machinery/vending/dorms, +/turf/open/floor/iron/showroomfloor, +/area/centcom/holding/cafe) +"erR" = ( +/obj/structure/flora/grass/jungle/b/style_5, +/mob/living/basic/rabbit, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"esx" = ( +/obj/effect/decal/cleanable/xenoblood, +/obj/structure/alien/weeds, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"esD" = ( +/obj/structure/table, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"esP" = ( +/obj/machinery/shower/directional/south, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"etn" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"evd" = ( +/obj/structure/closet/crate/wooden, +/obj/item/stack/sheet/mineral/stone, +/obj/item/stack/sheet/mineral/stone, +/obj/item/stack/sheet/mineral/stone, +/obj/item/stack/sheet/mineral/stone, +/obj/item/stack/sheet/mineral/stone, +/turf/open/misc/dirt/planet, +/area/centcom/interlink) +"evs" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"ewl" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/holding/cafe) +"exf" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/landmark/latejoin, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"ezk" = ( +/obj/structure/table{ + name = "Jim Norton's Quebecois Coffee table" + }, +/obj/item/coffee_cartridge/decaf{ + pixel_y = 10 + }, +/obj/item/coffee_cartridge/decaf{ + pixel_y = 6 + }, +/obj/item/coffee_cartridge/fancy, +/obj/machinery/status_display/shuttle{ + pixel_y = 32; + shuttle_id = "arrivals_shuttle" + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"eAc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/status_display/shuttle{ + pixel_y = -32; + shuttle_id = "arrivals_shuttle" + }, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"eAq" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/structure/table, +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/item/kirbyplants/fern{ + pixel_y = 14; + pixel_x = -5 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"eAA" = ( +/turf/closed/indestructible/fakedoor{ + desc = "Why would you want to go back, you just got here!"; + name = "ERT Bay" + }, +/area/centcom/interlink) +"eDy" = ( +/obj/structure/sauna_oven, +/turf/open/floor/wood/large, +/area/centcom/holding/cafe) +"eEg" = ( +/turf/open/floor/carpet/blue, +/area/centcom/holding/cafepark) +"eFC" = ( +/obj/structure/railing/wooden_fencing, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"eFV" = ( +/obj/effect/turf_decal/trimline/green/filled/arrow_cw, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"eGf" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/machinery/button/door/directional/south{ + id = "stall1"; + name = "Door Lock"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"eHo" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"eIq" = ( +/obj/structure/chair/sofa/corner/brown, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"eJP" = ( +/obj/structure/table/reinforced, +/obj/item/folder{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/item/folder/blue{ + pixel_x = -4; + pixel_y = 5 + }, +/obj/item/folder/yellow{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/stamp{ + pixel_x = 8; + pixel_y = 12 + }, +/obj/item/stamp/denied{ + pixel_x = 8; + pixel_y = 6 + }, +/obj/item/stamp/void{ + pixel_x = 8 + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"eKr" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/centcom/interlink) +"eLt" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Interlink Medbay" + }, +/obj/effect/turf_decal/siding/white/corner{ + dir = 1 + }, +/obj/structure/sign/departments/medbay/alt/directional/north, +/obj/effect/turf_decal/trimline/blue/filled/arrow_cw, +/turf/open/floor/iron, +/area/centcom/interlink) +"eLQ" = ( +/obj/effect/turf_decal/trimline/dark_green/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"eNn" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"eNw" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"eNI" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"eOx" = ( +/obj/structure/chair/sofa/bench{ + dir = 8 + }, +/obj/effect/landmark/latejoin, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"ePw" = ( +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/structure/closet/secure_closet/personal, +/turf/open/floor/iron, +/area/centcom/interlink) +"eRc" = ( +/obj/machinery/door/poddoor/shutters/indestructible{ + id = "evac_hall"; + name = "Interlink Access Shutters" + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"eRB" = ( +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"eSk" = ( +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"eSC" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"eTo" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/parquet, +/area/centcom/interlink) +"eTt" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 8 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"eVe" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"eXg" = ( +/obj/structure/chair/stool/bar/directional/west, +/turf/open/floor/iron, +/area/centcom/interlink) +"eYD" = ( +/obj/structure/closet/secure_closet/brig{ + id = "Cell 3"; + name = "Cell 3 Locker" + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron, +/area/centcom/interlink) +"eYX" = ( +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"eZb" = ( +/obj/structure/alien/weeds, +/obj/effect/decal/remains/human, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"faI" = ( +/obj/effect/turf_decal/siding/white/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"faN" = ( +/obj/effect/turf_decal/siding/white/corner, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"fbn" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = 9; + pixel_y = 11 + }, +/obj/item/reagent_containers/condiment/peppermill{ + dir = 1; + pixel_x = 9; + pixel_y = 2 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"fbz" = ( +/obj/structure/rack/wooden, +/obj/item/cautery/ashwalker{ + pixel_y = 10 + }, +/obj/item/scalpel/ashwalker{ + pixel_y = 6 + }, +/obj/item/circular_saw/ashwalker{ + pixel_y = -9 + }, +/obj/item/surgicaldrill/ashwalker{ + pixel_y = -7; + pixel_x = 7 + }, +/obj/item/retractor/ashwalker{ + pixel_y = -9 + }, +/obj/item/hemostat/ashwalker{ + pixel_y = 6 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"fbM" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/door/firedoor, +/obj/structure/fans/tiny/invisible, +/obj/machinery/door/airlock/abductor{ + desc = "What could possibly be in here? Probably naked people."; + id_tag = "cozyfloofspot1"; + name = "Bedroom" + }, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"fcW" = ( +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/bookcase/random/religion, +/turf/open/floor/iron, +/area/centcom/interlink) +"fdo" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"fdX" = ( +/obj/effect/turf_decal/bot, +/obj/structure/grandfatherclock{ + desc = "An alien console, it's completely holographic and is complete gibberish with phrases like 'Bogos Binted' flying across the screen."; + icon = 'icons/obj/antags/abductor.dmi'; + icon_state = "console"; + name = "alien console" + }, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"feR" = ( +/obj/machinery/light/small/directional/west, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"feU" = ( +/obj/structure/table/wood, +/obj/machinery/microwave{ + pixel_x = 1; + pixel_y = 6 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"fiC" = ( +/obj/structure/closet/crate/bin, +/obj/item/paper/crumpled{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/item/paper/crumpled{ + pixel_x = -2; + pixel_y = -4 + }, +/obj/item/paper/crumpled, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron, +/area/centcom/interlink) +"fjN" = ( +/obj/structure/wall_torch/spawns_lit/directional/east, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"fmq" = ( +/obj/structure/frame/computer, +/turf/open/floor/plating, +/area/centcom/interlink) +"foq" = ( +/obj/structure/sign/poster/official/cleanliness/directional/east, +/obj/machinery/camera/directional/north{ + c_tag = "Jim Norton's Quebecois Coffee" + }, +/obj/structure/noticeboard/directional/north, +/obj/item/reagent_containers/condiment/sugar{ + pixel_y = 4 + }, +/obj/item/storage/pill_bottle/happinesspsych{ + pixel_x = -4; + pixel_y = -1 + }, +/obj/item/storage/box/coffeepack, +/obj/item/storage/box/coffeepack/robusta, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/milk, +/obj/structure/closet/secure_closet/freezer/empty/open, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"fov" = ( +/turf/closed/indestructible/fakedoor{ + desc = "Why would you want to go back, you just got here!"; + name = "Central Command Dock" + }, +/area/centcom/interlink) +"foI" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/effect/turf_decal/trimline/dark_green/line, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"foJ" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/obj/structure/closet/crate/wooden/storage_barrel, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"fpe" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/structure/table/optable, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"fqg" = ( +/turf/open/floor/iron/smooth, +/area/centcom/interlink) +"fsl" = ( +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/obj/effect/landmark/latejoin, +/turf/open/floor/iron, +/area/centcom/interlink) +"fua" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + dir = 8; + name = "Interlink Longue" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"fvx" = ( +/obj/effect/turf_decal/bot, +/obj/structure/showcase/machinery/signal_decrypter, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"fwc" = ( +/obj/effect/turf_decal/sand, +/obj/structure/chair/stool/bar/directional/west{ + dir = 2 + }, +/obj/effect/turf_decal/stripes/asteroid/line, +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"fwr" = ( +/obj/machinery/light/floor{ + alpha = 0; + invisibility = 100; + light_range = 10; + nightshift_light_power = 10 + }, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"fwu" = ( +/obj/structure/water_source/puddle, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"fxE" = ( +/obj/structure/chair/sofa/bench/right{ + greyscale_colors = "#AA8A61" + }, +/turf/open/floor/wood, +/area/centcom/interlink) +"fza" = ( +/obj/structure/dresser{ + icon = 'icons/obj/antags/abductor.dmi'; + icon_state = "dispenser"; + name = "organ storage" + }, +/turf/open/floor/plating/abductor, +/area/centcom/holding/cafepark) +"fzV" = ( +/obj/structure/rack, +/obj/item/pushbroom, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"fAL" = ( +/obj/structure/window/spawner/directional/south, +/obj/structure/flora/grass/jungle/b/style_random, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafe) +"fCt" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/trimline/dark_green/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"fCz" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 4 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"fEg" = ( +/obj/structure/toilet{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink/dorm_rooms) +"fFe" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/chair/sofa/corp/left{ + dir = 1 + }, +/turf/open/floor/carpet/purple, +/area/centcom/holding/cafe) +"fFr" = ( +/turf/open/indestructible/cobble, +/area/centcom/holding/cafepark) +"fFy" = ( +/obj/effect/light_emitter/interlink, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/grass, +/area/centcom/interlink) +"fFL" = ( +/obj/machinery/light/directional/south, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"fGv" = ( +/obj/machinery/light/directional/north, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"fGC" = ( +/obj/structure/chair/sofa/bench, +/obj/effect/landmark/latejoin, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"fHl" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/light_emitter/interlink, +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"fHA" = ( +/obj/structure/closet/secure_closet/freezer/kitchen, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/freezer, +/area/centcom/interlink) +"fHV" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"fIS" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"fIY" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/light_emitter/interlink, +/obj/structure/flora/bush/flowers_yw/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"fJQ" = ( +/obj/effect/light_emitter/interlink, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"fLD" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"fMM" = ( +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"fOb" = ( +/obj/structure/rack, +/obj/item/storage/box/lights/mixed, +/obj/item/clothing/gloves/botanic_leather, +/obj/item/clothing/gloves/color/blue, +/obj/item/clothing/suit/caution, +/obj/item/clothing/suit/caution, +/obj/item/clothing/suit/caution, +/obj/item/clothing/suit/caution, +/obj/item/reagent_containers/cup/bucket, +/obj/item/reagent_containers/cup/bucket, +/obj/item/mop, +/obj/item/mop, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/item/storage/bag/trash, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"fOr" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/centcom/holding/cafe) +"fOu" = ( +/obj/structure/flora/grass/jungle, +/obj/structure/flora/bush/flowers_pp, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"fOv" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Interlink Public Garden" + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"fPn" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/effect/light_emitter/interlink, +/obj/structure/fence, +/turf/open/floor/grass, +/area/centcom/interlink) +"fPs" = ( +/obj/item/kirbyplants/random, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"fQt" = ( +/mob/living/basic/crab{ + name = "Bait" + }, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"fRe" = ( +/obj/structure/fluff/beach_umbrella/science, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"fSs" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/obj/effect/light_emitter/interlink, +/turf/open/misc/dirt/planet, +/area/centcom/interlink) +"fTb" = ( +/obj/effect/spawner/liquids_spawner, +/turf/open/indestructible/cobble/side{ + dir = 4 + }, +/area/centcom/holding/cafe) +"fTu" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_x = 1; + pixel_y = 13 + }, +/obj/item/reagent_containers/cup/rag, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"fTv" = ( +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = 8; + pixel_y = 2 + }, +/obj/structure/table/glass, +/obj/item/storage/box/rxglasses{ + pixel_x = 5; + pixel_y = 10 + }, +/obj/item/storage/box/bodybags{ + pixel_x = -5; + pixel_y = 10 + }, +/obj/item/storage/box/disks{ + pixel_x = 2; + pixel_y = 2 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"fTz" = ( +/obj/effect/turf_decal/trimline/green/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"fTV" = ( +/obj/structure/spacevine{ + name = "thick vines"; + opacity = 1 + }, +/turf/open/water/beach, +/area/centcom/holding/cafepark) +"fTY" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"fUQ" = ( +/obj/structure/fans/tiny/invisible, +/obj/machinery/door/airlock{ + name = "Salon"; + id_tag = "CCSalon" + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"fVr" = ( +/obj/effect/light_emitter/interlink, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/centcom/interlink) +"fWc" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"fXi" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/sink/directional/east, +/obj/structure/mirror/directional/west, +/turf/open/floor/iron/freezer, +/area/centcom/holding/cafe) +"fYY" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"gap" = ( +/obj/machinery/vending/boozeomat, +/obj/effect/turf_decal/trimline/green/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"gdL" = ( +/obj/structure/towel_bin, +/obj/structure/table/wood, +/turf/open/indestructible/cobble/side{ + dir = 4 + }, +/area/centcom/holding/cafepark) +"gdN" = ( +/obj/structure/chair/stool/directional/south{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"gea" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"geG" = ( +/turf/open/floor/iron/stairs, +/area/centcom/holding/cafepark) +"gfW" = ( +/obj/structure/sign/directions/security{ + dir = 8; + pixel_y = -8 + }, +/obj/structure/sign/directions/medical, +/obj/structure/sign/directions/arrival{ + dir = 4; + pixel_y = 8 + }, +/turf/closed/indestructible/riveted, +/area/centcom/interlink) +"ggb" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafepark) +"ggx" = ( +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/circuit/green, +/area/centcom/holding/cafe) +"gjd" = ( +/obj/effect/turf_decal/trimline/dark_green/line, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"gjj" = ( +/turf/open/misc/beach/coast{ + dir = 1 + }, +/area/centcom/holding/cafepark) +"gjK" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/indestructible{ + id = "il_bar"; + name = "Interlink Bar Shutters" + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"gko" = ( +/obj/structure/flora/grass/jungle/a/style_4, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"gmD" = ( +/obj/structure/stone_tile/slab, +/obj/structure/stone_tile/slab/cracked, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"gmE" = ( +/obj/machinery/vending/wardrobe/medi_wardrobe/ghost_cafe, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"gmT" = ( +/obj/structure/fake_stairs/directional/east, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"gmU" = ( +/obj/structure/chair/sofa/bench/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/holding/cafe) +"gnq" = ( +/obj/effect/spawner/liquids_spawner, +/obj/structure/chair/sofa/bench/right, +/turf/open/floor/iron/pool/cobble/corner{ + dir = 1 + }, +/area/centcom/holding/cafe) +"gnv" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"goK" = ( +/obj/structure/railing{ + invisibility = 100; + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/chair/wood{ + dir = 1 + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"gqq" = ( +/obj/structure/railing{ + invisibility = 100; + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/chair/wood{ + dir = 1 + }, +/turf/open/indestructible/cobble, +/area/centcom/holding/cafepark) +"grr" = ( +/obj/structure/table, +/obj/structure/towel_bin, +/turf/open/floor/iron/freezer, +/area/centcom/holding/cafe) +"grW" = ( +/obj/effect/turf_decal/siding{ + color = "#2e2e2e"; + dir = 1 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/clothing/head/costume/shrine_wig{ + pixel_y = 7 + }, +/obj/item/clothing/suit/costume/shrine_maiden, +/obj/item/storage/basket{ + pixel_y = 11 + }, +/obj/item/gohei, +/turf/open/floor/bamboo, +/area/centcom/holding/cafe) +"grX" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"gsc" = ( +/obj/structure/chair/sofa/corp/corner{ + dir = 8 + }, +/obj/machinery/light/warm/directional/south, +/turf/open/floor/wood/parquet, +/area/centcom/interlink) +"gsj" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/burnt{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 4 + }, +/turf/open/lava/fake, +/area/centcom/holding/cafepark) +"gsO" = ( +/obj/structure/table, +/obj/structure/bedsheetbin, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"gsX" = ( +/obj/structure/flora/rock/pile/jungle/large/style_2, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"gtO" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"gtZ" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/effect/landmark/latejoin, +/turf/open/floor/mineral/titanium, +/area/centcom/interlink) +"gup" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/button/door/directional/west{ + id = "room5"; + name = "Door Lock"; + normaldoorcontrol = 1; + pixel_y = -8; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"gxF" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/door/airlock/wood{ + id_tag = "ghostcafecabinjap"; + name = "Shinto Cabin" + }, +/obj/structure/fans/tiny/invisible, +/turf/open/floor/carpet, +/area/centcom/holding/cafe) +"gxX" = ( +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"gyK" = ( +/obj/machinery/status_display/shuttle{ + pixel_y = 32; + shuttle_id = "arrivals_shuttle" + }, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"gyS" = ( +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"gzT" = ( +/obj/structure/fake_stairs/wood/directional/north, +/obj/structure/railing/wooden_fencing{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"gAj" = ( +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"gAH" = ( +/obj/structure/table, +/obj/item/paper/pamphlet/centcom/visitor_info{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/paper/pamphlet/centcom/visitor_info, +/obj/machinery/light/very_dim/directional/west, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"gBj" = ( +/obj/item/modular_computer/pda/clear, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/centcom/interlink) +"gBR" = ( +/obj/machinery/door/airlock/medical{ + name = "Interlink Medical Cold Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"gCQ" = ( +/obj/structure/chair/sofa/corp, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/circuit/green, +/area/centcom/holding/cafe) +"gCR" = ( +/turf/closed/wall/mineral/sandstone, +/area/centcom/holding/cafe) +"gIO" = ( +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/obj/effect/landmark/latejoin, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"gKe" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table{ + name = "Jim Norton's Quebecois Coffee table" + }, +/obj/item/reagent_containers/condiment/sugar{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/reagent_containers/condiment/sugar{ + pixel_y = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"gKP" = ( +/obj/effect/turf_decal/siding/white/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"gMw" = ( +/turf/closed/wall/mineral/sandstone, +/area/centcom/holding/cafedorms) +"gMy" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"gOS" = ( +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = 19; + pixel_y = -22 + }, +/turf/open/floor/bamboo, +/area/centcom/holding/cafe) +"gPj" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/indestructible/cobble/side{ + dir = 8 + }, +/area/centcom/holding/cafepark) +"gPD" = ( +/obj/structure/rack/shelf{ + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; + icon_state = "empty_shelf_1" + }, +/obj/item/reagent_containers/cup/bucket/wooden, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"gPN" = ( +/obj/effect/spawner/random/entertainment/arcade, +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/eighties, +/area/centcom/holding/cafe) +"gRb" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"gSx" = ( +/obj/machinery/light/directional/south, +/turf/open/indestructible/cobble/side, +/area/centcom/holding/cafepark) +"gSB" = ( +/obj/structure/rack/wooden, +/obj/item/cultivator/rake, +/obj/item/seeds/ambrosia, +/obj/item/seeds/korta_nut/sweet, +/obj/item/shovel, +/obj/structure/wall_torch/spawns_lit/directional/east, +/obj/item/reagent_containers/cup/bucket/wooden, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"gSD" = ( +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"gUi" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron, +/area/centcom/interlink) +"gUC" = ( +/obj/structure/spacevine, +/turf/open/misc/beach/coast{ + dir = 4 + }, +/area/centcom/holding/cafepark) +"gUZ" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/holding/cafe) +"gVD" = ( +/obj/machinery/light/directional/east, +/obj/structure/flora/bush/jungle/b, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"gWT" = ( +/obj/structure/table/wood, +/obj/item/toy/cards/deck/cas/black, +/obj/item/toy/cards/deck/wizoff, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"gXw" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/light_emitter/interlink, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/statue/sandstone/venus{ + name = "Order" + }, +/turf/open/floor/grass, +/area/centcom/interlink) +"gZK" = ( +/obj/structure/table/wood, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"gZM" = ( +/obj/structure/rack/wooden, +/obj/item/reagent_containers/cup/mortar{ + pixel_y = -5; + pixel_x = 2 + }, +/obj/item/pestle{ + pixel_y = -7; + pixel_x = -5 + }, +/obj/item/reagent_containers/cup/glass/bottle/moonshine{ + pixel_y = 10; + pixel_x = -4 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"hap" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/fullupgrade{ + density = 0 + }, +/obj/structure/sign/poster/contraband/starkist/directional/north, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"hat" = ( +/obj/structure/bed/maint, +/obj/item/bedsheet/black, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"haE" = ( +/turf/open/floor/carpet/red, +/area/centcom/holding/cafedorms) +"haM" = ( +/obj/structure/dresser{ + pixel_y = 7 + }, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"hbE" = ( +/obj/structure/fence/interlink{ + dir = 4 + }, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"hbY" = ( +/obj/structure/stone_tile/block, +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/structure/wall_torch/spawns_lit/directional/east, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"hcR" = ( +/turf/open/floor/wood/parquet, +/area/centcom/interlink) +"hds" = ( +/obj/structure/table, +/obj/machinery/light/directional/east, +/obj/item/reagent_containers/cup/soda_cans/monkey_energy{ + pixel_x = -7; + pixel_y = 7 + }, +/obj/item/reagent_containers/cup/rag{ + pixel_y = 7; + pixel_x = 6 + }, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"hdV" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"hea" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 8 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"heB" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/light_emitter/interlink, +/obj/structure/flora/tree/jungle/small/style_5, +/turf/open/floor/grass, +/area/centcom/interlink) +"hfJ" = ( +/obj/structure/fans/tiny/invisible, +/obj/structure/bonfire/prelit, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"hgd" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"hge" = ( +/obj/structure/fans/tiny/invisible, +/obj/machinery/door/airlock/security{ + name = "Cafe Security" + }, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"hje" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/item/flashlight/flare/candle/infinite, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"hjy" = ( +/obj/item/kirbyplants/organic/plant22, +/obj/effect/turf_decal/trimline/dark_green/line, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"hjK" = ( +/obj/machinery/light/directional/north, +/turf/closed/indestructible/riveted, +/area/centcom/interlink) +"hkQ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/chair/stool/bar/directional/north, +/turf/open/floor/wood/parquet, +/area/centcom/interlink) +"hkT" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/turf/open/floor/iron/white, +/area/centcom/interlink/dorm_rooms) +"hlh" = ( +/obj/item/toy/plush/lizard_plushie/green{ + name = "Hisses-At-Mappers" + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"hmE" = ( +/obj/structure/sign/painting/library{ + pixel_y = -32 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"hnz" = ( +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/freezer, +/area/centcom/interlink) +"hoi" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"hoS" = ( +/obj/structure/sign/directions/arrival{ + dir = 1 + }, +/obj/structure/sign/directions/dorms{ + pixel_y = 8 + }, +/obj/structure/sign/directions/evac{ + pixel_y = -8 + }, +/turf/closed/indestructible/riveted, +/area/centcom/interlink) +"hoV" = ( +/obj/structure/closet/crate/freezer{ + name = "Cooler" + }, +/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/hcider{ + pixel_x = 7; + pixel_y = 9 + }, +/obj/item/reagent_containers/cup/glass/bottle/kahlua{ + pixel_x = 2; + pixel_y = 8 + }, +/obj/item/reagent_containers/cup/glass/bottle/gin{ + pixel_x = -7; + pixel_y = 15 + }, +/obj/item/reagent_containers/cup/glass/bottle/cognac{ + pixel_x = -10; + pixel_y = 7 + }, +/obj/machinery/light/directional/north, +/obj/item/reagent_containers/cup/glass/bottle/goldschlager, +/obj/item/reagent_containers/cup/glass/bottle/sake{ + pixel_x = 10; + pixel_y = 11 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"hpl" = ( +/obj/machinery/light/floor{ + alpha = 0; + invisibility = 100; + light_range = 10; + nightshift_light_power = 10 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"hpP" = ( +/mob/living/basic/butterfly, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"hpR" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/light_emitter/interlink, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"hpX" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"hqp" = ( +/obj/machinery/door/airlock/bathroom{ + id_tag = "CCToilet"; + name = "Toilet Stall" + }, +/turf/open/floor/iron/freezer, +/area/centcom/holding/cafe) +"hrt" = ( +/obj/machinery/shower/directional/south, +/obj/structure/window/spawner/directional/west, +/turf/open/floor/iron/freezer, +/area/centcom/holding/cafe) +"hrF" = ( +/obj/effect/turf_decal/trimline/dark_green/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"hsr" = ( +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, +/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"huq" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/landmark/latejoin, +/turf/open/floor/mineral/titanium, +/area/centcom/interlink) +"hvy" = ( +/obj/machinery/door/poddoor/shuttledock/interlink, +/turf/open/floor/plating, +/area/centcom/interlink) +"hvQ" = ( +/turf/open/floor/iron, +/area/centcom/interlink) +"hxm" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafepark) +"hyt" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/vending/wardrobe/viro_wardrobe/ghost_cafe, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"hyP" = ( +/obj/structure/chair/comfy/brown{ + dir = 1 + }, +/turf/open/floor/carpet/executive, +/area/centcom/interlink) +"hzz" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/landmark/latejoin, +/obj/effect/turf_decal/trimline/dark_green/filled/line, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron, +/area/centcom/interlink) +"hAk" = ( +/obj/machinery/door/morgue{ + name = "Adult Section" + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/wood, +/area/centcom/interlink) +"hAL" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Interlink Cryogenics" + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"hAW" = ( +/obj/effect/turf_decal/sand, +/obj/machinery/light/directional/west, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"hBk" = ( +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"hBy" = ( +/obj/structure/flora/tree/jungle/style_random, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"hEK" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron, +/area/centcom/interlink) +"hES" = ( +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"hHg" = ( +/obj/structure/chair/sofa/bench{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"hIH" = ( +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"hJz" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/obj/machinery/primitive_stove, +/obj/structure/stone_tile/slab, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"hKI" = ( +/obj/structure/table, +/obj/item/folder/red, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"hLA" = ( +/obj/structure/table/wood, +/obj/item/folder/yellow{ + pixel_x = 3; + pixel_y = 7 + }, +/obj/item/folder/blue{ + pixel_x = -9; + pixel_y = -2 + }, +/obj/item/pen/blue{ + pixel_x = 3; + pixel_y = 4 + }, +/turf/open/floor/carpet/executive, +/area/centcom/interlink) +"hMt" = ( +/obj/structure/fans/tiny/invisible, +/obj/structure/mineral_door/wood/large_gate{ + dir = 1 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"hNU" = ( +/obj/effect/turf_decal/siding/white/corner{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"hOy" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"hPq" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/structure/chair/office/light{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"hPH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"hPK" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"hQV" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lantern{ + pixel_x = -5; + pixel_y = 2 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafepark) +"hRJ" = ( +/obj/structure/railing{ + invisibility = 100; + dir = 4 + }, +/obj/structure/chair/wood{ + dir = 4 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"hSC" = ( +/obj/structure/table/wood, +/obj/item/folder{ + pixel_x = -7; + pixel_y = 5 + }, +/obj/item/pen/fountain{ + pixel_x = 3 + }, +/turf/open/floor/carpet/executive, +/area/centcom/interlink) +"hTf" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/machinery/iv_drip, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"hTh" = ( +/obj/machinery/door/poddoor/shutters/window/preopen, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron, +/area/centcom/interlink) +"hTD" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"hVf" = ( +/obj/effect/turf_decal/siding/white/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"hVq" = ( +/obj/structure/dresser, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"hVC" = ( +/obj/structure/dresser, +/obj/machinery/light/warm/no_nightlight/directional/north, +/obj/structure/sign/painting/library{ + pixel_y = 32 + }, +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"hWy" = ( +/obj/structure/table/wood, +/obj/item/storage/fancy/donut_box, +/turf/open/floor/carpet/executive, +/area/centcom/interlink) +"hWX" = ( +/obj/structure/chair/sofa/bench{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"hWY" = ( +/obj/structure/railing{ + invisibility = 100 + }, +/obj/effect/turf_decal/weather/dirt, +/obj/structure/chair/wood, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"hXd" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"hYn" = ( +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"hYA" = ( +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/centcom/holding/cafe) +"hYP" = ( +/obj/structure/chair/sofa/bench, +/turf/open/floor/wood/large, +/area/centcom/holding/cafe) +"hZk" = ( +/obj/structure/sink/directional/south, +/obj/structure/mirror/directional/north, +/obj/effect/landmark/latejoin, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"iax" = ( +/obj/effect/turf_decal/trimline/green/line, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"ibU" = ( +/obj/structure/chair/sofa/bench, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"icB" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/chair/sofa/left/brown, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"iel" = ( +/obj/effect/turf_decal/nova_decals/misc/handicapped, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"iem" = ( +/obj/effect/light_emitter/interlink, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/centcom/interlink) +"ifp" = ( +/obj/structure/spacevine{ + name = "thick vines"; + opacity = 1 + }, +/turf/open/misc/beach/coast{ + dir = 4 + }, +/area/centcom/holding/cafepark) +"ifZ" = ( +/obj/structure/chair/sofa/bench, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"igp" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"ihd" = ( +/turf/open/floor/sepia, +/area/centcom/holding/cafe) +"iho" = ( +/obj/structure/flora/grass/jungle/b/style_4, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"ijv" = ( +/obj/machinery/modular_computer/preset/command, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/iron, +/area/centcom/interlink) +"ikb" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 8 + }, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"iki" = ( +/turf/open/floor/carpet, +/area/centcom/holding/cafe) +"ikl" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/structure/chair/sofa/bench/corner{ + dir = 8 + }, +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"ikn" = ( +/obj/structure/chair/stool/directional/south{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/freezer, +/area/centcom/holding/cafe) +"ikE" = ( +/obj/structure/weightmachine, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"ikG" = ( +/obj/structure/table, +/obj/machinery/computer/libraryconsole, +/turf/open/floor/iron, +/area/centcom/interlink) +"ilq" = ( +/obj/machinery/computer/records/security, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"inr" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"ioa" = ( +/obj/machinery/duct, +/obj/effect/turf_decal/trimline/dark_green/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"iov" = ( +/obj/structure/flora/tree/jungle/small/style_random, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"ioz" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"ioZ" = ( +/obj/machinery/light/directional/east, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"ipc" = ( +/obj/structure/sign/poster/random/directional/east, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"iph" = ( +/obj/structure/flora/biolumi/lamp/weaklight{ + light_color = "#687487"; + light_range = 7 + }, +/turf/open/misc/dirt/planet, +/area/centcom/interlink) +"ipK" = ( +/obj/machinery/door/airlock/sandstone{ + id_tag = "ghostcaferesortbathroom1"; + name = "Resort Bathroom" + }, +/obj/structure/fans/tiny/invisible, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"iqj" = ( +/obj/machinery/button/door{ + id = "CCPsych"; + name = "Psych Office Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4; + pixel_y = -29 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"iqO" = ( +/obj/structure/chair/stool/directional/north, +/turf/open/floor/iron, +/area/centcom/interlink) +"iqT" = ( +/obj/structure/flora/grass/jungle/a/style_2, +/obj/structure/flora/bush/flowers_yw, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"iqY" = ( +/obj/structure/flora/bush/sparsegrass, +/turf/open/floor/grass/fairy, +/area/centcom/holding/cafepark) +"irn" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/effect/landmark/latejoin, +/turf/open/floor/iron, +/area/centcom/interlink) +"iro" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 8 + }, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"ism" = ( +/obj/structure/filingcabinet/employment, +/obj/machinery/button/door/directional/south{ + id = "centshuttersjolly" + }, +/obj/effect/turf_decal/bot_white, +/obj/machinery/light/cold/no_nightlight/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/centcom/interlink) +"itm" = ( +/obj/structure/flora/tree/jungle/style_2, +/obj/structure/flora/grass/jungle, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"iuK" = ( +/obj/effect/light_emitter/interlink, +/turf/open/floor/carpet/red, +/area/centcom/interlink) +"iwF" = ( +/obj/effect/turf_decal/sand, +/obj/machinery/vending/cigarette/beach, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"iwK" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + dir = 4; + name = "Interlink Cafe" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"iwU" = ( +/obj/structure/table/wood, +/obj/item/knife{ + pixel_x = 10; + pixel_y = 3 + }, +/obj/item/kitchen/rollingpin{ + pixel_x = -3; + pixel_y = 1 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"izj" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/centcom/interlink) +"izJ" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/misc/asteroid/snow/indestructible/planet, +/area/centcom/holding/cafepark) +"izT" = ( +/obj/structure/fans/tiny/invisible, +/obj/structure/railing/corner, +/turf/open/indestructible/cobble/side, +/area/centcom/holding/cafepark) +"iBq" = ( +/obj/structure/curtain, +/obj/machinery/shower/directional/south, +/obj/structure/drain, +/obj/effect/turf_decal/siding/thinplating_new/end{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/end, +/turf/open/indestructible/bathroom, +/area/centcom/holding/cafe) +"iCz" = ( +/obj/structure/fans/tiny/invisible, +/obj/machinery/door/airlock/sandstone{ + id_tag = "ghostcaferesort1"; + name = "Beach Cabin" + }, +/turf/open/floor/wood, +/area/centcom/holding/cafedorms) +"iDL" = ( +/obj/effect/turf_decal/siding{ + color = "#2e2e2e" + }, +/obj/effect/turf_decal/siding{ + color = "#2e2e2e"; + dir = 6 + }, +/obj/machinery/light/warm/directional/east, +/turf/open/floor/bamboo, +/area/centcom/holding/cafe) +"iEd" = ( +/obj/structure/fireplace, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"iFq" = ( +/obj/effect/turf_decal/bot, +/obj/structure/table, +/obj/item/hemostat/alien, +/obj/item/scalpel/alien, +/obj/item/circular_saw/alien, +/obj/item/retractor/alien, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"iFY" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"iGO" = ( +/obj/structure/bookcase/random/religion, +/turf/open/floor/wood, +/area/centcom/interlink) +"iGS" = ( +/turf/closed/indestructible/alien, +/area/centcom/holding/cafepark) +"iHv" = ( +/obj/structure/fans/tiny/invisible, +/obj/structure/flora/grass/jungle/a/style_4, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"iIb" = ( +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"iJK" = ( +/obj/structure/flora/bush/jungle/a, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"iJX" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"iLl" = ( +/obj/effect/turf_decal/trimline/blue/filled/arrow_cw, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"iMl" = ( +/obj/effect/turf_decal/nova_decals/misc/handicapped, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"iMY" = ( +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"iNW" = ( +/obj/machinery/door/window/left/directional/west{ + dir = 4 + }, +/obj/structure/sink/directional/east, +/turf/open/floor/plating/abductor2, +/area/centcom/holding/cafepark) +"iOt" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile/block{ + dir = 8 + }, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"iPs" = ( +/obj/effect/light_emitter/interlink, +/turf/open/misc/dirt/planet, +/area/centcom/interlink) +"iPU" = ( +/turf/open/floor/carpet/red, +/area/centcom/interlink) +"iQp" = ( +/obj/structure/curtain/cloth/fancy/mechanical{ + id = "ghostcafecabin3curtain" + }, +/turf/closed/indestructible/fakeglass, +/area/centcom/holding/cafe) +"iQP" = ( +/obj/item/kirbyplants/organic/plant22, +/obj/effect/turf_decal/trimline/dark_green/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"iRz" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/hedge, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"iTf" = ( +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"iTA" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"iUg" = ( +/obj/machinery/chem_master/condimaster, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"iUm" = ( +/obj/machinery/griddle, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"iVr" = ( +/obj/structure/sink/directional/south, +/obj/structure/mirror/directional/north, +/turf/open/floor/iron/white, +/area/centcom/interlink/dorm_rooms) +"iVW" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/centcom/interlink) +"iWF" = ( +/obj/effect/turf_decal/trimline/dark_green/filled/warning{ + dir = 6 + }, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron, +/area/centcom/interlink) +"iWH" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"iWY" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4; + greyscale_colors = "#B4CDDC" + }, +/turf/open/floor/iron/freezer, +/area/centcom/interlink) +"iXq" = ( +/obj/structure/flora/tree/jungle, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"iXZ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/light, +/obj/machinery/vending/autodrobe, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"iYB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/centcom/interlink) +"iYC" = ( +/obj/machinery/button/door{ + id = "cozyfloofspot1"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_y = 24; + specialfunctions = 4 + }, +/obj/structure/closet/abductor, +/turf/open/floor/plating/abductor, +/area/centcom/holding/cafepark) +"iZr" = ( +/obj/structure/table/wood, +/obj/machinery/reagentgrinder{ + pixel_x = -2; + pixel_y = 8 + }, +/obj/structure/sign/poster/contraband/pwr_game/directional/north, +/obj/item/reagent_containers/cup/soda_cans/nova/welding_fizz{ + pixel_x = 14; + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/soda_cans/nova/welding_fizz{ + pixel_x = 14; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/soda_cans/nova/welding_fizz{ + pixel_x = 14 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"jaf" = ( +/obj/structure/table, +/turf/open/floor/iron, +/area/centcom/interlink) +"jbq" = ( +/obj/structure/chair/sofa/bench{ + dir = 8 + }, +/obj/effect/landmark/latejoin, +/turf/open/floor/mineral/titanium, +/area/centcom/interlink) +"jbu" = ( +/obj/structure/railing/wooden_fencing, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"jdx" = ( +/obj/structure/flora/grass/jungle, +/obj/structure/flora/bush/flowers_yw, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"jeI" = ( +/obj/machinery/cryopod/quiet{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"jeT" = ( +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/arrow_cw{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"jfl" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 4 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"jgg" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"jgt" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lantern{ + pixel_x = -5; + pixel_y = 2 + }, +/turf/open/floor/bamboo, +/area/centcom/holding/cafe) +"jgG" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/fans/tiny/invisible, +/obj/structure/fence{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafepark) +"jgT" = ( +/obj/effect/light_emitter/interlink, +/obj/structure/fence/corner, +/turf/open/floor/grass, +/area/centcom/interlink) +"jhu" = ( +/obj/machinery/duct, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"jhR" = ( +/obj/machinery/light/directional/east, +/obj/structure/table/wood, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"jiN" = ( +/obj/structure/stone_tile/block/cracked, +/obj/structure/stone_tile/block{ + dir = 1 + }, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"jiQ" = ( +/obj/structure/reagent_dispensers/watertank/high, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"jjQ" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"jmI" = ( +/obj/item/toy/beach_ball, +/obj/effect/spawner/liquids_spawner, +/turf/open/floor/iron/pool, +/area/centcom/holding/cafepark) +"jnu" = ( +/obj/machinery/button/door/directional/east{ + id = "interlink_hall2"; + name = "Arrivals Hall Shutter Control"; + pixel_y = -8; + req_access = list("security") + }, +/obj/structure/closet/crate/bin, +/obj/item/paper/fluff/junkmail_generic{ + pixel_x = 7; + pixel_y = 5 + }, +/obj/item/paper/fluff/junkmail_redpill/true, +/obj/item/paper/fluff/junkmail_redpill{ + pixel_x = 1; + pixel_y = 8 + }, +/obj/item/paper/fluff/jobs/prisoner/letter, +/obj/item/paper/fluff/jobs/security/court_judgement{ + pixel_x = -5; + pixel_y = 1 + }, +/obj/machinery/light/cold/directional/east, +/obj/machinery/button/door/directional/east{ + id = "arriv_hall"; + name = "Arrivals Access Shutter Control"; + pixel_y = 8; + req_access = list("security") + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"joE" = ( +/obj/structure/chair/sofa/corp/left, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"jqm" = ( +/obj/structure/closet/crate/freezer/blood, +/obj/effect/turf_decal/bot_blue, +/turf/open/floor/iron/freezer, +/area/centcom/interlink) +"jqo" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/obj/effect/landmark/latejoin, +/turf/open/floor/iron, +/area/centcom/interlink) +"jsN" = ( +/obj/machinery/light/directional/east, +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"jsY" = ( +/obj/machinery/vending/games, +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"jtc" = ( +/obj/structure/railing, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"jtf" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"jtl" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"juT" = ( +/obj/structure/table/wood, +/turf/open/floor/carpet/red, +/area/centcom/interlink) +"jvm" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "ghostcafecabinb"; + name = "Wooden Cabin" + }, +/obj/structure/fans/tiny/invisible, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"jvR" = ( +/obj/structure/noticeboard/directional/south, +/obj/structure/table/wood, +/obj/item/phone{ + pixel_y = -4 + }, +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"jxl" = ( +/obj/structure/wall_torch/spawns_lit/directional/north, +/turf/open/misc/asteroid/snow/indestructible/planet, +/area/centcom/holding/cafepark) +"jxw" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/window/indestructible{ + id = "arriv_hall"; + name = "Windowed Interlink Access Shutters" + }, +/turf/open/floor/plating, +/area/centcom/interlink) +"jys" = ( +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/centcom/interlink) +"jzh" = ( +/obj/structure/table{ + name = "Jim Norton's Quebecois Coffee table" + }, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"jzL" = ( +/obj/structure/spacevine{ + name = "thick vines"; + opacity = 1 + }, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"jAH" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"jBF" = ( +/obj/machinery/button/curtain{ + id = "ghostcaferesort2curtain"; + pixel_x = -26 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafedorms) +"jDf" = ( +/obj/structure/table/bronze, +/obj/structure/stone_tile/block/burnt, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"jEk" = ( +/obj/structure/fence{ + dir = 4 + }, +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"jFn" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/egg/burst, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"jGh" = ( +/obj/machinery/light/very_dim/directional/west, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"jGH" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/turf/open/floor/iron/dark/textured_large, +/area/centcom/interlink) +"jHv" = ( +/obj/structure/bookcase/random/reference, +/turf/open/floor/wood, +/area/centcom/interlink) +"jHw" = ( +/obj/structure/sign/directions/arrival{ + dir = 1 + }, +/obj/structure/sign/directions/evac{ + pixel_y = -8 + }, +/obj/structure/sign/directions/dorms{ + dir = 4; + pixel_y = 8 + }, +/turf/closed/indestructible/riveted, +/area/centcom/interlink) +"jHB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/chair/sofa/bench/right{ + dir = 1; + greyscale_colors = "#AA8A61" + }, +/obj/machinery/light/warm/directional/south, +/turf/open/floor/wood, +/area/centcom/interlink) +"jIj" = ( +/turf/open/floor/wood, +/area/centcom/holding/cafedorms) +"jKj" = ( +/obj/structure/bed/pod, +/turf/open/floor/iron, +/area/centcom/interlink) +"jNB" = ( +/obj/machinery/light/floor{ + alpha = 0; + invisibility = 100; + light_range = 10; + nightshift_light_power = 10 + }, +/obj/structure/flora/biolumi/flower{ + light_power = 0.3; + light_range = 10; + random_light = null + }, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"jOc" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile/cracked, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"jQJ" = ( +/obj/machinery/button/door{ + id = "ghostcafecabin3"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -25; + specialfunctions = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"jRW" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"jSW" = ( +/obj/effect/light_emitter/interlink, +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"jTQ" = ( +/obj/structure/closet/crate/bin, +/obj/item/paper/pamphlet/centcom/visitor_info, +/obj/item/paper/pamphlet/centcom/visitor_info{ + pixel_x = -9 + }, +/obj/item/paper/pamphlet/centcom/visitor_info{ + pixel_x = -3 + }, +/obj/item/paper/pamphlet/centcom/visitor_info{ + pixel_x = 3 + }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 6 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"jUm" = ( +/obj/structure/table, +/obj/item/storage/fancy/donut_box{ + pixel_x = 2; + pixel_y = 10 + }, +/obj/item/storage/fancy/donut_box{ + pixel_x = -4; + pixel_y = 3 + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"jUK" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Interlink Medbay" + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"jXq" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"jXO" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"jYf" = ( +/obj/structure/table/wood, +/obj/item/paper_bin, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"jYy" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"jZb" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/vending/imported/mothic{ + default_price = 0; + extended_inventory = 1; + extra_price = 0; + fair_market_price = 0 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"jZH" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/machinery/light/small/directional/east, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"kdo" = ( +/obj/structure/hedge/opaque, +/obj/structure/curtain/cloth/fancy/mechanical{ + icon_state = "bounty-open"; + icon_type = "bounty"; + id = "CCSalon"; + name = "curtain" + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"kdw" = ( +/obj/effect/light_emitter/interlink, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/flowers_yw/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"kdy" = ( +/obj/structure/sink/directional/south, +/obj/structure/mirror/directional/north, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"kdU" = ( +/obj/machinery/shower/directional/west, +/turf/open/floor/iron/white, +/area/centcom/interlink/dorm_rooms) +"kfb" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Interlink Locker Room" + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"kfK" = ( +/obj/structure/flora/grass/jungle/a/style_5, +/obj/structure/flora/grass/jungle/a/style_2, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafe) +"kgI" = ( +/obj/structure/flora/biolumi/flower{ + light_color = "#D9FF00"; + light_power = 0.3; + light_range = 10; + random_light = null + }, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"khz" = ( +/obj/structure/chair/sofa/bench/right, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"khC" = ( +/obj/machinery/button/door/directional/north{ + id = "il_kitchen"; + name = "Kitchen Shutter Control"; + pixel_x = -8; + req_access = list("kitchen") + }, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"kiU" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/wood, +/area/centcom/interlink) +"kkV" = ( +/obj/machinery/button/door{ + id = "ghostcafecabin1"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_y = 24; + specialfunctions = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"klI" = ( +/obj/docking_port/stationary{ + dir = 2; + dwidth = 25; + height = 50; + json_key = "emergency"; + name = "CentCom Emergency Shuttle Dock"; + shuttle_id = "emergency_away"; + width = 50 + }, +/turf/open/space/basic, +/area/space) +"kmD" = ( +/turf/closed/indestructible/fakedoor{ + desc = "Why would you want to go back, you just got here!"; + name = "Interlink Re-Education Room" + }, +/area/centcom/interlink) +"kmV" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Interlink Access" + }, +/obj/machinery/door/poddoor/shutters/indestructible{ + id = "evac_hall"; + name = "Interlink Access Shutters" + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"knx" = ( +/obj/structure/flora/bush/large/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"knL" = ( +/obj/structure/chair/sofa/right/brown, +/turf/open/floor/wood, +/area/centcom/holding/cafedorms) +"koF" = ( +/obj/effect/spawner/random/entertainment/arcade, +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/eighties, +/area/centcom/holding/cafe) +"kpC" = ( +/obj/effect/turf_decal/arrows{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"kpY" = ( +/obj/structure/closet/cabinet, +/obj/item/stamp/head/rd{ + pixel_x = 3; + pixel_y = -2 + }, +/obj/item/stamp/head/captain, +/obj/item/stamp/head/ce, +/obj/item/stamp/head/cmo, +/obj/item/stamp/head/hop, +/obj/item/stamp/head/hos, +/obj/item/stamp/head/qm, +/obj/item/stamp/cat, +/obj/item/toy/crayon/spraycan, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"kqs" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_y = 5 + }, +/obj/item/pen, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"kqK" = ( +/obj/structure/table/wood, +/obj/machinery/fax{ + fax_name = "Interlink Meeting Room"; + pixel_y = 5 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"krJ" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"kso" = ( +/obj/machinery/light/directional/south, +/obj/effect/spawner/liquids_spawner, +/turf/open/floor/iron/pool/cobble, +/area/centcom/holding/cafepark) +"kuV" = ( +/obj/structure/flora/bush/leavy/style_2, +/obj/structure/flora/tree/jungle/style_random, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"kvD" = ( +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"kvF" = ( +/obj/structure/urinal/directional/north, +/obj/effect/landmark/latejoin, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"kvU" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 8 + }, +/obj/structure/barricade/wooden, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"kwp" = ( +/obj/machinery/status_display/evac/directional/south, +/obj/effect/turf_decal/trimline/dark_green/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"kxy" = ( +/obj/machinery/door/window/brigdoor/right/directional/south{ + name = "Interlink Cell"; + req_access = list("brig") + }, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/smooth, +/area/centcom/interlink) +"kxO" = ( +/obj/structure/chair/sofa/corp/corner{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/centcom/holding/cafe) +"kzb" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"kzD" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"kDh" = ( +/obj/structure/curtain/cloth/fancy/mechanical{ + id = "ghostcaferesort2curtain" + }, +/turf/closed/indestructible/fakeglass, +/area/centcom/holding/cafedorms) +"kDO" = ( +/obj/structure/chair/stool/bar/directional/west, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"kFE" = ( +/obj/structure/spacevine, +/obj/structure/fans/tiny/invisible, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"kGT" = ( +/obj/structure/fans/tiny/invisible, +/obj/machinery/door/airlock/sandstone{ + id_tag = "ghostcafebeachfreezer"; + name = "Beach Freezer" + }, +/turf/open/floor/iron/showroomfloor, +/area/centcom/holding/cafe) +"kHi" = ( +/obj/machinery/mech_bay_recharge_port, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/box, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"kHP" = ( +/obj/structure/chair/sofa/corp/left, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/centcom/interlink) +"kHZ" = ( +/obj/structure/spacevine{ + name = "thick vines"; + opacity = 1 + }, +/obj/machinery/vending/wardrobe/sec_wardrobe/red, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"kIR" = ( +/obj/structure/bed/abductor, +/turf/open/floor/plating/abductor, +/area/centcom/holding/cafepark) +"kJq" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"kJu" = ( +/obj/structure/chair/sofa/corp/corner{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"kJw" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"kJz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"kJL" = ( +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = 9; + pixel_y = 29 + }, +/turf/open/floor/carpet, +/area/centcom/holding/cafe) +"kJO" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/chair/sofa/middle/brown, +/obj/structure/sign/painting/large/library{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"kJU" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/closed/indestructible/weeb, +/area/centcom/holding/cafe) +"kKo" = ( +/obj/machinery/computer/records/security{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/centcom/interlink) +"kKs" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 4 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"kLD" = ( +/obj/machinery/light/directional/south, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"kLW" = ( +/obj/structure/railing{ + invisibility = 100; + dir = 8 + }, +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"kLZ" = ( +/obj/effect/light_emitter/interlink, +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"kMe" = ( +/turf/open/misc/beach/sand{ + desc = "There's been a recent disturbance right here, it's evident something must've been buried; but it's pretty deep. A faint, yet deep humming sound emanates from the spot as you get closer." + }, +/area/centcom/holding/cafepark) +"kMw" = ( +/obj/structure/chair/stool/directional/south{ + dir = 4 + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"kMV" = ( +/obj/structure/flora/biolumi/flower{ + random_light = null + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"kNd" = ( +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/machinery/door/airlock/service{ + name = "Interlink Kitchen" + }, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"kOf" = ( +/obj/item/food/grown/herbs, +/obj/item/food/grown/herbs, +/obj/item/food/grown/olive, +/obj/item/food/grown/olive, +/obj/item/food/grown/peanut, +/obj/item/food/grown/peanut, +/obj/item/food/grown/tea, +/obj/item/food/grown/tea, +/obj/structure/closet/secure_closet/freezer/empty{ + name = "produce freezer" + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/freezer, +/area/centcom/interlink) +"kOk" = ( +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/centcom/interlink) +"kOZ" = ( +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"kPf" = ( +/obj/structure/chair/sofa/bench/corner{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/centcom/holding/cafe) +"kPg" = ( +/obj/effect/turf_decal/sand, +/obj/machinery/light/directional/south, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"kPK" = ( +/obj/structure/railing/wooden_fencing, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"kQs" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Interlink Locker Room" + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"kSc" = ( +/obj/item/pickaxe, +/turf/open/misc/dirt/planet, +/area/centcom/interlink) +"kTe" = ( +/obj/structure/table/reinforced, +/obj/machinery/reagentgrinder{ + pixel_y = 8 + }, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"kWb" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/structure/railing/wooden_fencing{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"kWr" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"kWA" = ( +/obj/effect/turf_decal/trimline/green/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"kWH" = ( +/turf/open/floor/iron/grimy, +/area/centcom/interlink) +"kWI" = ( +/obj/structure/chair/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/light/small/directional/east, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"kYn" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/obj/structure/chair/stool/bamboo{ + dir = 8 + }, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"kZB" = ( +/obj/machinery/light/directional/west, +/obj/structure/table, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"kZF" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/light_emitter/interlink, +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"kZK" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"kZQ" = ( +/obj/machinery/modular_computer/preset/command{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"lat" = ( +/obj/structure/hedge/opaque, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/curtain/cloth/fancy/mechanical{ + icon_state = "bounty-open"; + icon_type = "bounty"; + id = "CCSalon"; + name = "curtain" + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"laX" = ( +/obj/structure/fans/tiny/invisible, +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/indestructible/cobble/side, +/area/centcom/holding/cafepark) +"lba" = ( +/obj/machinery/computer/records/medical{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/centcom/interlink) +"lct" = ( +/obj/machinery/button/door{ + id = "ghostcaferesort1"; + name = "Resort Bolt Control"; + normaldoorcontrol = 1; + pixel_y = -24; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafedorms) +"lcR" = ( +/turf/closed/indestructible/riveted, +/area/centcom/interlink/dorm_rooms) +"ldK" = ( +/obj/structure/toilet{ + pixel_y = 12 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/button/door{ + id = "CCToilet"; + name = "Door Lock"; + normaldoorcontrol = 1; + specialfunctions = 4; + pixel_x = 28 + }, +/turf/open/floor/iron/freezer, +/area/centcom/holding/cafe) +"lgh" = ( +/obj/item/stack/sheet/mineral/wood/fifty, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"lgm" = ( +/obj/structure/rack/shelf{ + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; + icon_state = "empty_shelf_1" + }, +/obj/structure/stone_tile/slab, +/obj/item/reagent_containers/cup/bowl/mushroom_bowl{ + pixel_y = 7; + pixel_x = -5 + }, +/obj/item/reagent_containers/cup/bowl/mushroom_bowl{ + pixel_y = 7; + pixel_x = 7 + }, +/obj/item/reagent_containers/cup/bowl/mushroom_bowl{ + pixel_y = 11; + pixel_x = 1 + }, +/obj/item/smelling_salts{ + pixel_y = -9; + pixel_x = -5 + }, +/obj/item/smelling_salts{ + pixel_y = -9; + pixel_x = 6 + }, +/obj/item/reagent_containers/cup/bowl/mushroom_bowl{ + pixel_y = 11; + pixel_x = 1 + }, +/obj/structure/wall_torch/spawns_lit/directional/west, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"lgt" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"lgF" = ( +/obj/machinery/door/airlock/centcom{ + name = "Blueshield's Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/captain, +/obj/effect/turf_decal/siding/white, +/obj/effect/turf_decal/tile/green/opposingcorners, +/turf/open/floor/iron, +/area/centcom/interlink) +"lhh" = ( +/obj/machinery/shower/directional/south, +/turf/open/floor/iron/freezer, +/area/centcom/holding/cafe) +"lht" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/structure/closet/crate/bin, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"lhF" = ( +/obj/structure/stone_tile/block, +/turf/open/lava/fake, +/area/centcom/holding/cafepark) +"lhK" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue, +/obj/structure/closet/crate/bin, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"lic" = ( +/obj/machinery/computer/records/security{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"lij" = ( +/obj/item/kirbyplants/random, +/obj/machinery/button/door{ + id = "CCSalon"; + name = "Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4; + pixel_y = -25 + }, +/turf/open/floor/wood/large, +/area/centcom/holding/cafe) +"liK" = ( +/obj/structure/reagent_dispensers/cooking_oil, +/turf/open/floor/iron/showroomfloor, +/area/centcom/holding/cafe) +"liU" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"ljS" = ( +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"lkn" = ( +/obj/structure/spacevine, +/turf/open/water/beach, +/area/centcom/holding/cafepark) +"lkC" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 1; + greyscale_colors = "#AA8A61" + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/holding/cafe) +"lla" = ( +/obj/machinery/iv_drip, +/obj/effect/turf_decal/bot_blue, +/turf/open/floor/iron/freezer, +/area/centcom/interlink) +"lnP" = ( +/obj/structure/sign/poster/contraband/space_cola/directional/north, +/obj/machinery/vending/boozeomat/cafe, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"loR" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"lro" = ( +/obj/structure/marker_beacon/burgundy, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"lrp" = ( +/obj/effect/turf_decal/trimline/dark_green/filled/corner, +/turf/open/floor/iron, +/area/centcom/interlink) +"lsV" = ( +/obj/machinery/light/floor, +/obj/structure/railing, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"ltu" = ( +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/item/storage/pill_bottle/mutadone, +/obj/item/storage/pill_bottle/mannitol, +/obj/structure/table/glass, +/obj/item/clothing/gloves/latex, +/obj/item/flashlight/pen{ + pixel_x = 4; + pixel_y = 3 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"lvk" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/large, +/area/centcom/holding/cafe) +"lvR" = ( +/obj/effect/turf_decal/trimline/dark_green/filled/warning{ + dir = 9 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"lwc" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"lwt" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"lwv" = ( +/turf/closed/indestructible/wood, +/area/centcom/holding/cafepark) +"lxl" = ( +/obj/structure/chair/sofa/bench/right, +/obj/effect/landmark/latejoin, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"lzk" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/structure/table/wood, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"lAv" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/centcom/holding/cafe) +"lAx" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/effect/turf_decal/caution{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"lBn" = ( +/obj/structure/bed/maint{ + pixel_y = 13 + }, +/obj/structure/bed/maint, +/obj/item/bedsheet/black/double{ + dir = 1 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"lCi" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north{ + layer = 2.9 + }, +/obj/structure/chair/stool/directional/south{ + dir = 1 + }, +/obj/item/clothing/under/shorts/red, +/obj/item/clothing/glasses/sunglasses, +/obj/item/clothing/under/shorts/red, +/turf/open/floor/wood, +/area/centcom/holding/cafepark) +"lDo" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"lDy" = ( +/obj/effect/turf_decal/siding{ + color = "#2e2e2e"; + dir = 5 + }, +/obj/structure/table/wood/fancy/orange{ + pixel_y = -3 + }, +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = -7; + pixel_y = -2 + }, +/obj/item/flashlight/flare/candle/infinite, +/obj/machinery/light/warm/directional/east, +/turf/open/floor/bamboo, +/area/centcom/holding/cafe) +"lFU" = ( +/obj/structure/table/wood, +/obj/item/folder/white{ + pixel_x = -8; + pixel_y = 3 + }, +/obj/item/pen/red{ + pixel_x = -3; + pixel_y = 9 + }, +/turf/open/floor/carpet/executive, +/area/centcom/interlink) +"lGc" = ( +/obj/machinery/door/airlock/centcom{ + name = "Administrative Confrence Room" + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/turf/open/floor/iron, +/area/centcom/interlink) +"lHD" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"lHT" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw, +/turf/open/floor/iron, +/area/centcom/interlink) +"lHZ" = ( +/obj/structure/mop_bucket, +/obj/machinery/duct, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"lIy" = ( +/obj/structure/chair/sofa/right/brown{ + dir = 1 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafedorms) +"lJK" = ( +/obj/structure/fans/tiny/invisible, +/obj/machinery/door/airlock/sandstone{ + id_tag = "ghostcaferesort2"; + name = "Beach Cabin" + }, +/turf/open/floor/wood, +/area/centcom/holding/cafedorms) +"lLN" = ( +/obj/structure/mirror/directional/east, +/obj/structure/sink/directional/west, +/turf/open/floor/sepia, +/area/centcom/holding/cafe) +"lMj" = ( +/obj/structure/chair/stool/bamboo{ + dir = 8 + }, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"lMY" = ( +/obj/structure/stone_tile/slab/cracked, +/obj/structure/statue/bone/rib{ + dir = 1 + }, +/turf/open/lava/fake, +/area/centcom/holding/cafepark) +"lNi" = ( +/obj/machinery/vending/wardrobe/chem_wardrobe/ghost_cafe, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"lOD" = ( +/obj/structure/sign/directions/evac{ + pixel_y = -8 + }, +/obj/structure/sign/directions/arrival{ + dir = 1 + }, +/turf/closed/indestructible/riveted, +/area/centcom/interlink) +"lPi" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/centcom/interlink) +"lQq" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"lQB" = ( +/obj/structure/bed/double{ + dir = 8 + }, +/obj/item/bedsheet/dorms_double{ + dir = 8 + }, +/turf/open/floor/carpet/red, +/area/centcom/holding/cafedorms) +"lRF" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/left/directional/south{ + req_access = list("cent_general") + }, +/obj/machinery/door/window/left/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/centcom/interlink) +"lSo" = ( +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/structure/table, +/obj/item/storage/medkit/regular{ + pixel_x = 8; + pixel_y = 10 + }, +/obj/item/storage/medkit/regular{ + pixel_y = 6 + }, +/obj/machinery/light/cold/directional/south, +/obj/effect/turf_decal/delivery/blue, +/turf/open/floor/iron, +/area/centcom/interlink) +"lSB" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/vending/imported/yangyu{ + default_price = 0; + extended_inventory = 1; + extra_price = 0; + fair_market_price = 0 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"lSJ" = ( +/obj/machinery/light/floor, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"lTP" = ( +/obj/effect/light_emitter/interlink, +/obj/structure/flora/tree/jungle/style_6, +/turf/open/floor/grass, +/area/centcom/interlink) +"lVs" = ( +/obj/effect/turf_decal/siding{ + color = "#2e2e2e"; + dir = 1 + }, +/turf/closed/indestructible/weeb, +/area/centcom/holding/cafe) +"lVL" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"lWZ" = ( +/obj/structure/table{ + name = "Jim Norton's Quebecois Coffee table" + }, +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = 4; + pixel_y = 10 + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"lXk" = ( +/obj/item/flashlight/lantern, +/turf/open/misc/dirt/planet, +/area/centcom/interlink) +"lXl" = ( +/obj/structure/wall_torch/spawns_lit/directional/east, +/turf/open/misc/asteroid/snow/indestructible/planet, +/area/centcom/holding/cafepark) +"lXo" = ( +/obj/machinery/oven/range, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"lYJ" = ( +/obj/effect/spawner/liquids_spawner, +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/turf/open/floor/iron/pool/cobble/corner{ + dir = 4 + }, +/area/centcom/holding/cafe) +"lZn" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"mac" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"mbx" = ( +/obj/machinery/door/airlock/medical{ + name = "Interlink Operating Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"mcO" = ( +/obj/item/kirbyplants/organic/plant22, +/obj/machinery/light/warm/directional/north, +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/turf/open/floor/iron, +/area/centcom/interlink) +"mdD" = ( +/obj/structure/table/wood, +/obj/item/folder/yellow, +/obj/item/folder/blue{ + pixel_y = 4 + }, +/turf/open/floor/wood, +/area/centcom/interlink) +"mdT" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/turf/open/floor/wood, +/area/centcom/interlink) +"mfo" = ( +/obj/structure/stone_tile/slab/cracked, +/obj/structure/mineral_door/wood/large_gate{ + dir = 8 + }, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"mfu" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"mfN" = ( +/obj/structure/table{ + name = "Jim Norton's Quebecois Coffee table" + }, +/obj/machinery/door/window/left/directional/south{ + name = "Coffee Counter" + }, +/obj/item/reagent_containers/cup/glass/coffee_cup{ + pixel_x = -5; + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/glass/coffee_cup{ + pixel_y = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"mgr" = ( +/obj/structure/wall_torch/spawns_lit/directional/east, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"mgY" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"mjo" = ( +/obj/machinery/door/airlock/centcom{ + name = "Interlink Security Checkpoint" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/effect/turf_decal/delivery/white, +/turf/open/floor/iron/dark/textured_large, +/area/centcom/interlink) +"mju" = ( +/obj/structure/table, +/obj/item/storage/medkit/o2{ + pixel_x = 8; + pixel_y = 10 + }, +/obj/item/storage/medkit/toxin{ + pixel_y = 6 + }, +/obj/effect/turf_decal/delivery/blue, +/obj/effect/turf_decal/trimline/blue/filled/corner, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"mjA" = ( +/obj/effect/turf_decal/trimline/dark_green/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"mjK" = ( +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/trimline/dark_green/filled/warning{ + dir = 5 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"mnj" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"mnS" = ( +/obj/effect/light_emitter/interlink, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"moe" = ( +/obj/structure/closet, +/obj/item/clothing/under/rank/centcom/intern, +/obj/item/banner/command/mundane, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/item/toner/extreme, +/turf/open/floor/iron, +/area/centcom/interlink) +"mon" = ( +/obj/structure/fans/tiny/invisible, +/obj/structure/flora/bush/jungle/b, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"moG" = ( +/obj/item/kirbyplants/organic/plant22, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"mpl" = ( +/obj/machinery/status_display/evac/directional/west, +/turf/open/floor/wood, +/area/centcom/interlink) +"mqE" = ( +/obj/effect/turf_decal/trimline/dark_green/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"mqS" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/button/door/directional/west{ + id = "room8"; + name = "Door Lock"; + normaldoorcontrol = 1; + pixel_y = -8; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"mtv" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"mvL" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/left/directional/west{ + name = "Interlink Wardens Desk"; + req_access = list("armory") + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"mwo" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/mug{ + pixel_x = 13; + pixel_y = -1 + }, +/obj/item/reagent_containers/cup/glass/mug{ + pixel_x = 6; + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/glass/mug{ + pixel_x = 13; + pixel_y = 7 + }, +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_x = -2; + pixel_y = 12 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/structure/railing/wooden_fencing{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"mwV" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/obj/structure/flora/ash/cacti, +/obj/structure/wall_torch/spawns_lit/directional/north, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"mxd" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"mxj" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_x = -6; + pixel_y = 16 + }, +/obj/item/book/manual/wiki/barman_recipes{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/item/reagent_containers/cup/rag{ + pixel_x = 9; + pixel_y = 3 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"mxI" = ( +/obj/structure/fans/tiny/invisible, +/obj/structure/fake_stairs/wood/directional/north, +/obj/machinery/light/directional/east, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"mza" = ( +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"mzf" = ( +/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"mzs" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/machinery/button/door{ + id = "ghostcaferesortbathroom2"; + name = "Resort Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -25; + specialfunctions = 4 + }, +/obj/structure/mirror{ + pixel_y = -31 + }, +/obj/machinery/light/floor{ + alpha = 0; + invisibility = 100; + light_range = 10; + nightshift_light_power = 10 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"mzR" = ( +/obj/structure/fluff/beach_umbrella/cap, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"mBj" = ( +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/bookcase/random/reference, +/turf/open/floor/iron, +/area/centcom/interlink) +"mBs" = ( +/obj/structure/flora/grass/jungle/a/style_5, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"mBM" = ( +/obj/structure/table/rolling, +/obj/item/hhmirror{ + pixel_x = 5; + pixel_y = 9 + }, +/obj/item/hairbrush/comb, +/obj/item/razor{ + pixel_x = -7; + pixel_y = 3 + }, +/obj/item/scissors{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/straight_razor{ + pixel_x = 9; + pixel_y = 2 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/window/spawner/directional/east, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"mBS" = ( +/obj/structure/closet/crate/wooden, +/obj/item/hemostat/ashwalker, +/obj/item/retractor/ashwalker{ + pixel_y = -9 + }, +/obj/item/scalpel/ashwalker{ + pixel_y = -4 + }, +/obj/item/surgicaldrill/ashwalker, +/obj/item/circular_saw/ashwalker, +/obj/item/cautery/ashwalker, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"mCg" = ( +/obj/structure/railing/wooden_fencing, +/obj/structure/railing/wooden_fencing{ + dir = 8 + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"mCv" = ( +/obj/structure/table/reinforced/rglass, +/obj/structure/mirror/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/obj/item/reagent_containers/dropper{ + pixel_x = 3; + pixel_y = 1 + }, +/obj/machinery/dryer{ + pixel_y = 14 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"mDs" = ( +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"mDR" = ( +/obj/effect/light_emitter/interlink, +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"mDS" = ( +/obj/machinery/hypnochair, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"mEW" = ( +/obj/effect/turf_decal/sand, +/obj/structure/chair/stool/bar/directional/west{ + dir = 2 + }, +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"mGn" = ( +/obj/structure/table{ + name = "Jim Norton's Quebecois Coffee table" + }, +/obj/item/food/poppypretzel{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/item/reagent_containers/cup/glass/mug{ + pixel_x = 10; + pixel_y = 7 + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"mHF" = ( +/obj/structure/sink/directional/east, +/turf/open/floor/iron, +/area/centcom/interlink) +"mIk" = ( +/obj/machinery/vending/boozeomat/cafe, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"mIp" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/trophy{ + pixel_y = 11; + pixel_x = 9 + }, +/obj/item/reagent_containers/cup/glass/bottle/wine/unlabeled{ + pixel_x = -3; + pixel_y = 7 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"mJB" = ( +/obj/structure/fireplace, +/turf/open/floor/stone, +/area/centcom/holding/cafe) +"mJG" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"mLa" = ( +/obj/effect/light_emitter/interlink, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"mLK" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"mMu" = ( +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"mMx" = ( +/obj/structure/spacevine, +/turf/open/misc/beach/coast{ + dir = 9 + }, +/area/centcom/holding/cafepark) +"mOW" = ( +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron/dark, +/area/centcom/holding/cafe) +"mPR" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"mQa" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/skill_station, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"mRb" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/machinery/light/warm/directional/east, +/turf/open/floor/wood/large, +/area/centcom/holding/cafe) +"mRV" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/chair/sofa/bench/right, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"mSs" = ( +/turf/open/floor/iron/freezer, +/area/centcom/interlink) +"mSw" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"mSQ" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"mTS" = ( +/obj/machinery/stasis{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"mUC" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/obj/machinery/button/door/directional/south{ + id = "room3"; + name = "Door Lock"; + normaldoorcontrol = 1; + pixel_x = -8; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"mVc" = ( +/obj/machinery/door/airlock/hatch{ + name = "Custodial Closet" + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"mYg" = ( +/obj/machinery/door/airlock/survival_pod{ + name = "Transport Ship" + }, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"mYy" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/fake_stairs/directional/south, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"mZp" = ( +/obj/structure/flora/tree/jungle/small/style_random, +/obj/structure/flora/grass/jungle, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"mZu" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"nap" = ( +/mob/living/basic/crab{ + name = "Shelly" + }, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"nbv" = ( +/obj/structure/chair/sofa/corp/corner{ + dir = 4 + }, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"nbB" = ( +/obj/machinery/light/warm/directional/south, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"ncr" = ( +/obj/machinery/deepfryer, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"ncP" = ( +/obj/structure/flora/ash/cacti, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"ndc" = ( +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"neb" = ( +/obj/structure/reagent_dispensers/watertank/high, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"ngg" = ( +/obj/structure/chair/stool/bar/directional/west, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"nhZ" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 8 + }, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafepark) +"nii" = ( +/obj/structure/fireplace, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"nim" = ( +/obj/effect/turf_decal/trimline/green/filled/arrow_cw{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"nis" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/rack/wooden, +/obj/item/plate/blowing_glass{ + pixel_y = -9; + pixel_x = -2 + }, +/obj/item/plate/blowing_glass{ + pixel_y = -6; + pixel_x = -1 + }, +/obj/item/reagent_containers/cup/beaker/large/blowing_glass{ + pixel_y = 9; + pixel_x = 5 + }, +/obj/item/reagent_containers/cup/beaker/large/blowing_glass{ + pixel_y = 9; + pixel_x = -5 + }, +/turf/open/floor/stone, +/area/centcom/holding/cafepark) +"niJ" = ( +/obj/structure/closet/crate/bin, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"niQ" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/soda_cans/pwr_game{ + pixel_x = 2 + }, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"njQ" = ( +/obj/effect/turf_decal/bot, +/obj/structure/showcase/machinery/implanter{ + icon = 'icons/obj/antags/abductor.dmi'; + icon_state = "experiment"; + name = "pod" + }, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"nkZ" = ( +/obj/machinery/light/directional/west, +/obj/structure/closet, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"nlv" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/chair/sofa/bench/right, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"nlB" = ( +/obj/structure/chair/stool{ + name = "Jim Norton's Quebecois Coffee stool" + }, +/obj/structure/flora/grass/jungle/b/style_random, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"nlM" = ( +/obj/structure/curtain, +/obj/machinery/shower/directional/north, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/turf/open/floor/plating/abductor2, +/area/centcom/holding/cafepark) +"nng" = ( +/obj/structure/table/wood, +/obj/item/food/muffin/berry{ + pixel_x = 18; + pixel_y = 9 + }, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/obj/effect/turf_decal/siding/wood, +/obj/structure/window/spawner/directional/south, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"nnJ" = ( +/obj/structure/rack/wooden, +/obj/item/storage/box/matches{ + pixel_y = -8; + pixel_x = -3 + }, +/obj/item/pen/charcoal{ + pixel_y = 5 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"noq" = ( +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"noy" = ( +/obj/structure/table/reinforced/rglass, +/obj/structure/mirror/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/obj/item/hhmirror, +/obj/item/clothing/head/wig/random{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/item/clothing/head/wig/natural, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"noA" = ( +/obj/structure/table{ + name = "Jim Norton's Quebecois Coffee table" + }, +/obj/machinery/coffeemaker{ + pixel_y = 10 + }, +/obj/machinery/light/warm/directional/north, +/obj/item/reagent_containers/cup/coffeepot{ + pixel_x = -7; + pixel_y = 3 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"npc" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 8 + }, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafepark) +"npe" = ( +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/structure/bookcase/random/religion, +/turf/open/floor/iron, +/area/centcom/interlink) +"npr" = ( +/obj/structure/fake_stairs/wood/directional/east, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"nps" = ( +/obj/structure/easel, +/obj/item/canvas/twentythree_twentythree, +/obj/structure/sign/painting/library{ + pixel_x = -32 + }, +/turf/open/floor/carpet/cyan, +/area/centcom/holding/cafe) +"nqQ" = ( +/obj/machinery/computer/cryopod/directional/north, +/obj/effect/landmark/latejoin, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"nqW" = ( +/obj/structure/table/wood, +/turf/open/floor/wood/parquet, +/area/centcom/interlink) +"nrl" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/arrows{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"nsT" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"ntJ" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/rag, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"nxR" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"nyj" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"nzn" = ( +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"nzO" = ( +/obj/machinery/door/poddoor/shutters/window/preopen, +/turf/open/floor/iron, +/area/centcom/interlink) +"nAp" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/indestructible{ + id = "evac_hall_lookout"; + name = "Interlink Access Shutters" + }, +/turf/open/floor/plating, +/area/centcom/interlink) +"nCY" = ( +/obj/structure/bed/double, +/obj/item/bedsheet/random/double, +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"nDE" = ( +/turf/open/floor/carpet/purple, +/area/centcom/holding/cafepark) +"nFi" = ( +/obj/structure/curtain, +/obj/machinery/shower/directional/north, +/obj/structure/window/spawner/directional/west, +/turf/open/floor/iron/freezer, +/area/centcom/holding/cafe) +"nFH" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Interlink Garden" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"nGL" = ( +/obj/structure/table/wood, +/obj/item/soap/deluxe, +/turf/open/floor/sepia, +/area/centcom/holding/cafe) +"nHC" = ( +/obj/machinery/photocopier, +/obj/machinery/button/door/directional/south{ + id = "bs_shutters"; + name = "Privacy Shutter Comtrol"; + pixel_x = 8; + req_access = list("command") + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/wood, +/area/centcom/interlink) +"nHH" = ( +/obj/machinery/recharge_station, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/circuit/green, +/area/centcom/holding/cafe) +"nHK" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/effect/turf_decal/weather/dirt, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"nJp" = ( +/obj/effect/turf_decal/trimline/dark_green/filled/line, +/turf/open/floor/iron, +/area/centcom/interlink) +"nJO" = ( +/obj/structure/railing/wooden_fencing, +/turf/open/floor/wood, +/area/centcom/holding/cafepark) +"nJQ" = ( +/obj/effect/turf_decal/arrows{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"nKt" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/chair/sofa/middle/brown, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"nKz" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"nKJ" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"nLr" = ( +/obj/structure/fake_stairs/wood/directional/east, +/turf/open/indestructible/cobble/side, +/area/centcom/holding/cafepark) +"nMw" = ( +/obj/structure/fence{ + dir = 4 + }, +/obj/effect/turf_decal/caution/stand_clear, +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"nOa" = ( +/obj/structure/table/reinforced, +/obj/item/folder{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/folder/blue{ + pixel_x = 4; + pixel_y = 5 + }, +/obj/item/folder/yellow, +/obj/item/stamp{ + pixel_x = -8; + pixel_y = 12 + }, +/obj/item/stamp/denied{ + pixel_x = -8; + pixel_y = 6 + }, +/obj/item/stamp/void{ + pixel_x = -8 + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"nOb" = ( +/obj/machinery/door/airlock/centcom{ + name = "Nanotrasen Consultant's Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/cent_com/rep_door, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green/opposingcorners, +/turf/open/floor/iron, +/area/centcom/interlink) +"nOf" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_y = 5 + }, +/obj/item/pen, +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"nPr" = ( +/obj/structure/table{ + name = "Jim Norton's Quebecois Coffee table" + }, +/obj/item/reagent_containers/cup/glass/mug/coco, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"nQm" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/effect/light_emitter/interlink, +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"nQF" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/centcom/interlink) +"nRP" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/bookcase/random, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"nTO" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/iron/grimy, +/area/centcom/interlink) +"nUS" = ( +/obj/structure/flora/grass/jungle/a/style_2, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"nWn" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"nXu" = ( +/obj/structure/stone_tile/slab, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"nXw" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"nYp" = ( +/obj/structure/chair/sofa/corp/right, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/circuit/green, +/area/centcom/holding/cafe) +"nYB" = ( +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/obj/effect/landmark/latejoin, +/turf/open/floor/iron, +/area/centcom/interlink) +"nYF" = ( +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"nZP" = ( +/obj/machinery/light/cold/directional/west, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"oab" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"oaD" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/nova_decals/misc/handicapped, +/turf/open/floor/wood/parquet, +/area/centcom/interlink) +"oaM" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/machinery/washing_machine, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"ocT" = ( +/obj/structure/chair/stool/bar/directional/north, +/turf/open/floor/wood/parquet, +/area/centcom/interlink) +"oed" = ( +/obj/structure/table, +/obj/machinery/processor{ + pixel_y = 12 + }, +/turf/open/floor/iron/freezer, +/area/centcom/interlink) +"oei" = ( +/obj/effect/turf_decal/sand, +/obj/structure/sign/departments/restroom/directional/south, +/obj/machinery/light/directional/south, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"ofw" = ( +/obj/structure/closet/crate/wooden/storage_barrel, +/obj/structure/wall_torch/spawns_lit/directional/east, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"ofJ" = ( +/turf/open/misc/beach/coast{ + dir = 6 + }, +/area/centcom/holding/cafepark) +"ogq" = ( +/obj/structure/chair/comfy/brown{ + dir = 4 + }, +/turf/open/floor/wood, +/area/centcom/interlink) +"ogI" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/item/storage/box/matches, +/obj/machinery/light/very_dim/directional/south, +/turf/open/floor/wood, +/area/centcom/interlink) +"oja" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/centcom/holding/cafepark) +"ojv" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/arrows, +/turf/open/floor/iron, +/area/centcom/interlink) +"oln" = ( +/obj/effect/turf_decal/siding/dark_blue, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/centcom/interlink) +"olE" = ( +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"omh" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plating, +/area/centcom/interlink) +"onb" = ( +/obj/machinery/door/poddoor/shutters/indestructible{ + id = "arriv_hall"; + name = "Interlink Access Shutters" + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"onf" = ( +/obj/structure/rack, +/obj/item/stack/sheet/mineral/wood, +/obj/item/stack/sheet/mineral/wood, +/obj/item/stack/sheet/mineral/wood, +/obj/item/stack/sheet/mineral/wood, +/obj/item/stack/sheet/mineral/wood, +/obj/item/lighter, +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"onU" = ( +/obj/structure/weightmachine, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"ooD" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/glass/waterbottle{ + pixel_x = 7; + pixel_y = 2 + }, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"ooG" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood, +/area/centcom/interlink) +"ooW" = ( +/obj/structure/bed/pod{ + pixel_y = 1 + }, +/obj/structure/mirror/directional/east, +/turf/open/floor/carpet/black, +/area/centcom/holding/cafe) +"ooY" = ( +/obj/structure/flora/grass/jungle/a/style_4, +/obj/structure/chair/sofa/bench/right, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"orh" = ( +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/box, +/obj/structure/window/spawner/directional/east, +/obj/structure/showcase/fake_cafe_console/rd, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"orB" = ( +/obj/item/paper_bin/bundlenatural, +/turf/open/floor/sepia, +/area/centcom/holding/cafe) +"orU" = ( +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = -19; + pixel_y = -23 + }, +/obj/item/fancy_pillow{ + pixel_x = -10; + pixel_y = -7 + }, +/turf/open/floor/bamboo, +/area/centcom/holding/cafe) +"osk" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/obj/machinery/button/door/directional/south{ + id = "room1"; + name = "Door Lock"; + normaldoorcontrol = 1; + pixel_x = -8; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"ouF" = ( +/obj/item/toy/plush/moth{ + name = "Buzz Buzz" + }, +/turf/open/floor/plating, +/area/centcom/interlink) +"ouJ" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white, +/obj/structure/chair/sofa/bench, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"ovF" = ( +/obj/structure/fans/tiny/invisible, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"ovH" = ( +/obj/machinery/vending/wardrobe/syndie_wardrobe/ghost_cafe{ + default_price = 0; + extra_price = 0; + fair_market_price = 0 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"owJ" = ( +/obj/effect/turf_decal/tile/purple/anticorner/contrasted, +/obj/machinery/button/door{ + id = "CCRobotics"; + name = "Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4; + pixel_x = 25 + }, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"oxb" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"oyf" = ( +/obj/structure/flora/bush/sunny{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/structure/flora/bush/grassy{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/flora/bush/flowers_br{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/structure/flora/bush/ferny, +/obj/structure/window/reinforced/spawner/directional/east{ + layer = 2.9 + }, +/turf/open/floor/grass/fairy, +/area/centcom/holding/cafepark) +"oyi" = ( +/obj/item/reagent_containers/cup/soda_cans/dr_gibb{ + pixel_x = -8; + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/soda_cans/dr_gibb{ + pixel_x = -8; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/soda_cans/dr_gibb{ + pixel_x = -8 + }, +/obj/item/reagent_containers/cup/soda_cans/pwr_game{ + pixel_x = 2; + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/soda_cans/pwr_game{ + pixel_x = 2; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/soda_cans/pwr_game{ + pixel_x = 2 + }, +/obj/item/reagent_containers/cup/soda_cans/cola{ + pixel_x = 12; + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/soda_cans/cola{ + pixel_x = 12; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/soda_cans/cola{ + pixel_x = 12 + }, +/obj/structure/table/wood, +/obj/structure/sign/poster/official/high_class_martini/directional/north, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"oyI" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"ozJ" = ( +/obj/structure/railing/wooden_fencing, +/obj/structure/railing/wooden_fencing{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"ozR" = ( +/obj/structure/table/reinforced/rglass, +/obj/structure/curtain/cloth, +/obj/machinery/light/directional/east, +/obj/item/reagent_containers/medigel/aiuri{ + desc = "A medicinal massage oil containing aiuri, normally gives a nice cooling effect on the bodypart where it's applied whilst also healing minor burns."; + name = "Cooling massage oil"; + pixel_x = 2; + pixel_y = 5 + }, +/obj/item/reagent_containers/medigel/libital{ + desc = "A medicinal massage oil that warms up and relaxes the skin and muscles, great at both treating backpains, cramps and bruises."; + name = "Relaxing massage oil"; + pixel_x = -4; + pixel_y = 5 + }, +/turf/open/floor/carpet/black, +/area/centcom/holding/cafe) +"oAn" = ( +/obj/structure/chair/sofa/bench/right, +/obj/effect/landmark/latejoin, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 9 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"oAt" = ( +/obj/structure/flora/grass/jungle/a/style_4, +/obj/structure/fans/tiny/invisible, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"oBa" = ( +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile/cracked, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 1 + }, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"oBf" = ( +/obj/structure/chair/sofa/bench{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/obj/effect/landmark/latejoin, +/turf/open/floor/mineral/titanium, +/area/centcom/interlink) +"oBn" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/structure/toilet{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"oCU" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/light_emitter/interlink, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/flora/bush/large/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"oDs" = ( +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"oEm" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/rag{ + pixel_y = 7; + pixel_x = -1 + }, +/obj/item/reagent_containers/cup/glass/waterbottle{ + pixel_x = 7; + pixel_y = 2 + }, +/turf/open/floor/iron/dark, +/area/centcom/holding/cafe) +"oGv" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/vending/wardrobe/chem_wardrobe/ghost_cafe, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"oIK" = ( +/obj/effect/turf_decal/trimline/dark_green/filled/warning{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"oJo" = ( +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"oJP" = ( +/obj/machinery/iv_drip, +/obj/machinery/light/cold/directional/south, +/obj/effect/turf_decal/bot_blue, +/turf/open/floor/iron/freezer, +/area/centcom/interlink) +"oKM" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"oLI" = ( +/obj/structure/chair/sofa/corp/left, +/turf/open/floor/carpet/black, +/area/centcom/holding/cafe) +"oNz" = ( +/obj/structure/closet/boxinggloves, +/obj/item/clothing/gloves/boxing, +/obj/item/clothing/gloves/boxing/blue, +/obj/item/clothing/gloves/boxing/green, +/obj/item/clothing/gloves/boxing/yellow, +/turf/open/floor/iron/dark, +/area/centcom/holding/cafe) +"oOC" = ( +/obj/effect/turf_decal/trimline/dark_green/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"oOM" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"oOS" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"oPL" = ( +/obj/structure/chair/stool/directional/south{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/holding/cafe) +"oQW" = ( +/obj/structure/chair/sofa/right/brown{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"oRX" = ( +/obj/structure/fans/tiny/invisible, +/obj/machinery/door/airlock/research{ + name = "Robotics"; + id_tag = "CCRobotics" + }, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"oSp" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_y = 5 + }, +/obj/item/pen/fourcolor, +/turf/open/floor/wood, +/area/centcom/interlink) +"oSG" = ( +/obj/structure/rack/shelf{ + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; + icon_state = "empty_shelf_1" + }, +/obj/item/bedsheet/black{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/bedsheet/black{ + pixel_x = 5; + pixel_y = 8 + }, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"oTx" = ( +/obj/machinery/shower/directional/west, +/turf/open/floor/iron/freezer, +/area/centcom/interlink) +"oUI" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 1 + }, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"oVT" = ( +/obj/structure/flora/grass/jungle, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"oWR" = ( +/obj/structure/fake_stairs/wood/directional/north, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"oYa" = ( +/obj/structure/chair/office, +/obj/machinery/button/door/directional/west{ + id = "interlink_hall"; + name = "Evac Hall Shutter Control"; + pixel_y = -8; + req_access = list("security") + }, +/obj/machinery/button/door/directional/west{ + id = "evac_hall"; + name = "Evac Access Shutter Control"; + pixel_y = 8; + req_access = list("security") + }, +/obj/machinery/light/cold/directional/west, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"oYg" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"oYO" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/turf/closed/indestructible/weeb, +/area/centcom/holding/cafe) +"paj" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"paJ" = ( +/obj/machinery/button/door{ + id = "CCD1"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 25; + specialfunctions = 4 + }, +/obj/item/kirbyplants/random, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"pbz" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/structure/sink/directional/east, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"pbP" = ( +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"pci" = ( +/obj/structure/mineral_door/wood/large_gate{ + dir = 8 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"pcp" = ( +/obj/structure/fans/tiny/invisible, +/obj/effect/turf_decal/siding/wood, +/obj/structure/mineral_door/wood, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"pcH" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"pdt" = ( +/obj/machinery/light/floor{ + alpha = 0; + invisibility = 100; + light_range = 10; + nightshift_light_power = 10 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"pdC" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"pdW" = ( +/obj/structure/chair/sofa/bench{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"pej" = ( +/obj/structure/sign/painting/library{ + pixel_y = -32 + }, +/turf/open/floor/carpet/cyan, +/area/centcom/holding/cafe) +"pgm" = ( +/obj/structure/hedge/opaque, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/curtain/cloth/fancy/mechanical{ + icon_state = "bounty-open"; + icon_type = "bounty"; + id = "CCSalon"; + name = "curtain" + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"pgL" = ( +/obj/structure/chair/sofa/bench/right, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 9 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"phc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner, +/obj/machinery/light/warm/directional/east, +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/wood/parquet, +/area/centcom/interlink) +"phk" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"pib" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"pkJ" = ( +/obj/structure/fans/tiny/invisible, +/obj/structure/fence{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafepark) +"pmI" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"pmJ" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"pny" = ( +/obj/structure/stone_tile/block, +/obj/structure/stone_tile/block{ + dir = 1 + }, +/turf/open/lava/fake, +/area/centcom/holding/cafepark) +"pnH" = ( +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood, +/area/centcom/interlink) +"pnW" = ( +/obj/structure/chair/office, +/turf/open/floor/iron/grimy, +/area/centcom/interlink) +"pod" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"ppd" = ( +/obj/structure/flora/tree/jungle/small/style_random{ + pixel_x = -49; + pixel_y = -12 + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"ppR" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/fans/tiny/invisible, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"pqy" = ( +/obj/structure/chair/sofa/corp/left, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"pry" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/condom_pack, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"prH" = ( +/obj/machinery/door/window/right/directional/east{ + base_state = "left"; + dir = 8; + icon_state = "left"; + name = "Fitness Ring" + }, +/turf/open/floor/iron/dark/corner, +/area/centcom/holding/cafe) +"prT" = ( +/obj/structure/weightmachine/weightlifter, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"ptd" = ( +/obj/effect/spawner/random/entertainment/arcade, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/eighties, +/area/centcom/holding/cafe) +"ptx" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/machinery/dryer{ + pixel_y = 14 + }, +/turf/open/floor/carpet/black, +/area/centcom/holding/cafe) +"puo" = ( +/obj/effect/turf_decal/sand, +/obj/machinery/light/directional/east, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"pux" = ( +/obj/structure/flora/bush/jungle/c/style_2, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"pwO" = ( +/obj/structure/chair/sofa/bench/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"pwV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/chair/office/light{ + dir = 4 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"pxW" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/light/warm/directional/north, +/obj/effect/turf_decal/nova_decals/misc/handicapped, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"pzq" = ( +/obj/structure/curtain/cloth/fancy/mechanical{ + id = "ghostcaferesort1curtain" + }, +/turf/closed/indestructible/fakeglass, +/area/centcom/holding/cafedorms) +"pBj" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_green/filled/line, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron, +/area/centcom/interlink) +"pBW" = ( +/obj/machinery/light/directional/south, +/obj/structure/flora/grass/jungle/b/style_random, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"pCd" = ( +/turf/closed/wall/mineral/wood/nonmetal, +/area/centcom/holding/cafepark) +"pCw" = ( +/obj/structure/rack, +/obj/item/reagent_containers/cup/rag, +/turf/open/floor/iron, +/area/centcom/interlink) +"pDd" = ( +/obj/machinery/door/airlock/centcom{ + name = "Administrative Offices" + }, +/obj/machinery/button/door/directional/west{ + id = "evac_hall_lookout"; + name = "Lookout Shutters Control"; + pixel_y = -8; + req_access = list("command") + }, +/obj/effect/turf_decal/trimline/dark_green/corner{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/indestructible{ + id = "evac_hall_lookout"; + name = "Interlink Access Shutters" + }, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/effect/mapping_helpers/airlock/access/any/cent_com/rep_or_captain, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"pDN" = ( +/obj/structure/table, +/turf/open/floor/iron/white, +/area/centcom/interlink/dorm_rooms) +"pET" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"pFe" = ( +/obj/machinery/door/airlock/freezer{ + name = "Freezer" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/turf/open/floor/iron/freezer, +/area/centcom/interlink) +"pFr" = ( +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/door/airlock/security{ + name = "Interlink Security Processing" + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/structure/sign/departments/security/directional/north, +/obj/effect/turf_decal/trimline/dark_red/filled/corner, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"pFt" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"pFM" = ( +/obj/effect/light_emitter/interlink, +/obj/structure/fence/interlink{ + dir = 4 + }, +/turf/open/floor/grass, +/area/centcom/interlink) +"pGK" = ( +/turf/open/floor/iron/dark/side, +/area/centcom/holding/cafe) +"pGZ" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/window/indestructible{ + id = "evac_hall"; + name = "Windowed Interlink Access Shutters" + }, +/turf/open/floor/plating, +/area/centcom/interlink) +"pHc" = ( +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"pHe" = ( +/obj/machinery/door/airlock/centcom{ + name = "Administrative Offices" + }, +/obj/effect/turf_decal/trimline/dark_green/corner, +/obj/machinery/door/poddoor/shutters/indestructible{ + id = "arr_hall_lookout"; + name = "Interlink Access Shutters" + }, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/effect/mapping_helpers/airlock/access/any/cent_com/rep_or_captain, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"pHi" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"pHG" = ( +/obj/structure/chair/sofa/left/brown{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"pHQ" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/obj/effect/landmark/latejoin, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"pKF" = ( +/obj/machinery/processor, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"pKV" = ( +/obj/effect/turf_decal/arrows/blue{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"pLq" = ( +/obj/structure/rack/wooden, +/obj/item/dyespray{ + pixel_x = -6; + pixel_y = 11 + }, +/obj/item/dyespray{ + pixel_x = 5; + pixel_y = 11 + }, +/obj/item/reagent_containers/spray/quantum_hair_dye{ + pixel_x = 11 + }, +/obj/item/reagent_containers/spray/barbers_aid{ + pixel_x = -3; + pixel_y = -2 + }, +/obj/item/reagent_containers/spray/baldium{ + pixel_x = -10; + pixel_y = -2 + }, +/obj/item/reagent_containers/spray/super_barbers_aid{ + pixel_x = 4; + pixel_y = -2 + }, +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"pMg" = ( +/obj/machinery/door/airlock{ + id_tag = "room1"; + name = "Cabin" + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"pMm" = ( +/obj/machinery/photocopier, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"pMs" = ( +/obj/docking_port/stationary{ + dir = 8; + dwidth = 1; + height = 13; + name = "tram dock"; + roundstart_template = /datum/map_template/shuttle/arrivals_nova; + shuttle_id = "arrivals_shuttle"; + width = 5 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/centcom/interlink) +"pMN" = ( +/obj/structure/closet/secure_closet/personal, +/turf/open/floor/iron, +/area/centcom/interlink) +"pMT" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/carpet/blue, +/area/centcom/holding/cafedorms) +"pNf" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/stone_tile/block{ + dir = 4 + }, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"pNF" = ( +/obj/effect/turf_decal/siding/white/corner{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/centcom/interlink) +"pNJ" = ( +/obj/effect/spawner/random/vending/snackvend, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"pOS" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/storage/fancy/candle_box{ + pixel_y = 10 + }, +/obj/item/storage/fancy/candle_box/amber{ + pixel_y = 4 + }, +/turf/open/floor/wood, +/area/centcom/interlink) +"pPH" = ( +/obj/structure/stone_tile/surrounding_tile/cracked, +/obj/structure/flora/ash/stem_shroom, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"pPI" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Interlink" + }, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"pPO" = ( +/obj/effect/light_emitter/interlink, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"pQp" = ( +/obj/structure/bed/pod{ + pixel_y = 1 + }, +/obj/structure/window/spawner/directional/south, +/obj/structure/mirror/directional/east, +/turf/open/floor/carpet/black, +/area/centcom/holding/cafe) +"pSt" = ( +/obj/effect/turf_decal/trimline/dark_green/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"pSx" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/machinery/button/door/directional/south{ + id = "stall2"; + name = "Door Lock"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"pST" = ( +/obj/structure/table{ + name = "Jim Norton's Quebecois Coffee table" + }, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"pSZ" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 4 + }, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafepark) +"pTO" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/right/directional/north{ + name = "Interlink Customs"; + req_access = list("cent_general") + }, +/obj/machinery/door/window/right/directional/south, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"pUJ" = ( +/obj/structure/chair/sofa/left/brown{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"pUQ" = ( +/obj/structure/flora/grass/jungle/a/style_2, +/obj/structure/flora/bush/flowers_br, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"pVh" = ( +/obj/machinery/photocopier, +/obj/machinery/button/door/directional/north{ + id = "ntrep_shutters"; + name = "Privacy Shutter Comtrol"; + pixel_x = 8; + req_access = list("command") + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/wood, +/area/centcom/interlink) +"pWk" = ( +/obj/machinery/door/airlock{ + id_tag = "room6"; + name = "Cabin" + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"pWF" = ( +/obj/structure/flora/ash/cap_shroom, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"pXn" = ( +/obj/machinery/button/door/directional/east{ + id = "evac_hall_lookout"; + name = "Lookout Shutters Control"; + pixel_y = -8; + req_access = list("command") + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"pXu" = ( +/obj/structure/chair/sofa/corp/corner{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"pXT" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/door/firedoor, +/obj/structure/fans/tiny/invisible, +/obj/machinery/door/airlock/abductor{ + desc = "What could possibly be in here? Probably naked people."; + id_tag = "ghostcafecabin2"; + name = "Bedroom" + }, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"pYF" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"pZh" = ( +/obj/structure/chair/sofa/bench{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"pZn" = ( +/mob/living/basic/crab{ + name = "Claws" + }, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"qaO" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/fullupgrade{ + density = 0; + dir = 1 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"qbk" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Interlink Access" + }, +/obj/machinery/door/poddoor/shutters/indestructible{ + id = "arriv_hall"; + name = "Interlink Access Shutters" + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"qbp" = ( +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"qbw" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"qdd" = ( +/obj/machinery/light/floor, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"qdG" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"qdV" = ( +/obj/structure/stone_tile/surrounding_tile/cracked, +/obj/structure/wall_torch/spawns_lit/directional/south, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"qey" = ( +/obj/effect/turf_decal/caution/stand_clear{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"qfy" = ( +/obj/structure/table/wood/fancy/blue, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafepark) +"qgh" = ( +/obj/structure/stone_tile/surrounding, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"qhl" = ( +/obj/structure/flora/bush/large/style_2, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"qhn" = ( +/obj/machinery/light/very_dim/directional/east, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"qiI" = ( +/obj/machinery/light/directional/south, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"qjh" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"qji" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/landmark/latejoin, +/turf/open/floor/iron, +/area/centcom/interlink) +"qkZ" = ( +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/iron, +/area/centcom/interlink) +"qmG" = ( +/obj/machinery/light/directional/south, +/obj/structure/chair/stool/directional/south{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/holding/cafe) +"qna" = ( +/obj/structure/barricade/wooden, +/turf/open/misc/dirt/planet, +/area/centcom/interlink) +"qnA" = ( +/obj/structure/closet/crate, +/obj/item/storage/box/ingredients/vegetarian, +/obj/item/storage/box/ingredients/italian, +/obj/item/storage/box/ingredients/fruity, +/obj/item/storage/box/ingredients/fiesta, +/obj/item/storage/box/ingredients/american, +/obj/item/storage/box/ingredients/exotic, +/obj/item/reagent_containers/condiment/flour{ + list_reagents = list(/datum/reagent/consumable/flour = 90); + name = "large flour sack"; + possible_transfer_amounts = list(1,5,10,15,30,60,90); + volume = 90 + }, +/obj/item/reagent_containers/condiment/flour{ + list_reagents = list(/datum/reagent/consumable/flour = 90); + name = "large flour sack"; + possible_transfer_amounts = list(1,5,10,15,30,60,90); + volume = 90 + }, +/obj/item/reagent_containers/condiment/rice{ + list_reagents = list(/datum/reagent/consumable/rice = 90); + name = "large rice sack"; + possible_transfer_amounts = list(1,5,10,15,20,25,30,50,60,90) + }, +/obj/item/reagent_containers/condiment/rice{ + list_reagents = list(/datum/reagent/consumable/rice = 90); + name = "large rice sack"; + possible_transfer_amounts = list(1,5,10,15,20,25,30,50,60,90) + }, +/turf/open/floor/iron/showroomfloor, +/area/centcom/holding/cafe) +"qnB" = ( +/obj/structure/chair/sofa/bench/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white/corner, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"qnH" = ( +/obj/structure/flora/grass/jungle/b/style_2, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"qot" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"qoB" = ( +/obj/structure/toilet/snappop{ + dir = 4 + }, +/obj/machinery/button/door{ + id = "ghostcaferesortbathroom1"; + name = "Resort Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 25; + specialfunctions = 4 + }, +/obj/structure/mirror{ + pixel_y = -31 + }, +/obj/machinery/light/floor{ + alpha = 0; + invisibility = 100; + light_range = 10; + nightshift_light_power = 10 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"qpu" = ( +/obj/effect/turf_decal/sand, +/obj/structure/closet/crate/bin, +/obj/item/toy/plush/beeplushie{ + desc = "A cute toy that resembles an even cuter bee.... They don't smell very good"; + name = "Bin Bee" + }, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"qpx" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/structure/chair/office, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"qrv" = ( +/obj/structure/table{ + name = "Jim Norton's Quebecois Coffee table" + }, +/obj/item/coffee_cartridge{ + pixel_y = 10 + }, +/obj/item/coffee_cartridge{ + pixel_y = 6 + }, +/obj/item/coffee_cartridge/bootleg, +/turf/open/floor/iron, +/area/centcom/interlink) +"qrK" = ( +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"qsQ" = ( +/obj/machinery/stasis, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"qtz" = ( +/obj/structure/hedge/opaque, +/obj/structure/fans/tiny/invisible, +/obj/structure/curtain/cloth/fancy/mechanical{ + icon_state = "bounty-open"; + icon_type = "bounty"; + id = "CCSalon"; + name = "curtain" + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"qub" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/centcom/interlink) +"qvk" = ( +/obj/machinery/oven/range, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"qwk" = ( +/obj/structure/chair/sofa/bench{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/filled/arrow_cw{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"qwo" = ( +/obj/effect/turf_decal/sand, +/obj/machinery/vending/snack, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"qwJ" = ( +/obj/structure/chair/sofa/corp/left, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/circuit/green, +/area/centcom/holding/cafe) +"qyu" = ( +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"qze" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 5 + }, +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"qzE" = ( +/obj/structure/sign/poster/random/directional/west, +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"qAg" = ( +/obj/structure/chair/stool/directional/south{ + dir = 8 + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"qAW" = ( +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"qBd" = ( +/obj/machinery/light/directional/west, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"qBC" = ( +/obj/machinery/vending/primitive_catgirl_clothing_vendor, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"qCU" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/plating/abductor, +/area/centcom/holding/cafepark) +"qDc" = ( +/obj/machinery/door/window/left/directional/south{ + name = "Coffee Counter" + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/centcom/interlink) +"qDk" = ( +/obj/structure/table/reinforced/rglass, +/obj/structure/window/spawner/directional/west, +/obj/structure/curtain/cloth, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/gloves/latex, +/turf/open/floor/carpet/black, +/area/centcom/holding/cafe) +"qEu" = ( +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/wood, +/area/centcom/interlink) +"qFt" = ( +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"qFG" = ( +/obj/machinery/light/directional/south, +/obj/machinery/status_display/shuttle{ + pixel_y = -32; + shuttle_id = "arrivals_shuttle" + }, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"qGA" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/vending/wardrobe/sec_wardrobe, +/turf/open/floor/iron/dark, +/area/centcom/holding/cafe) +"qGW" = ( +/obj/structure/chair/comfy/brown, +/turf/open/floor/carpet/executive, +/area/centcom/interlink) +"qHc" = ( +/obj/structure/closet/crate/wooden, +/obj/item/stack/sheet/mineral/wood/fifty, +/obj/item/stack/sheet/mineral/wood/fifty, +/obj/item/lighter, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"qHJ" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"qHT" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/chair/sofa/bench/left{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"qIY" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/turf/open/floor/iron, +/area/centcom/interlink) +"qJm" = ( +/obj/structure/alien/weeds, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"qJA" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron, +/area/centcom/interlink) +"qJW" = ( +/obj/structure/chair/sofa/bench/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"qKi" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/stone, +/area/centcom/holding/cafepark) +"qLQ" = ( +/obj/machinery/washing_machine, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"qMl" = ( +/obj/structure/wall_torch/spawns_lit/directional/west, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"qNu" = ( +/obj/structure/railing{ + invisibility = 100; + dir = 4 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/structure/chair/wood{ + dir = 4 + }, +/turf/open/indestructible/cobble, +/area/centcom/holding/cafepark) +"qNZ" = ( +/obj/effect/spawner/liquids_spawner, +/obj/effect/light_emitter/interlink, +/turf/open/floor/iron/pool/cobble, +/area/centcom/holding/cafepark) +"qPk" = ( +/obj/structure/window/spawner/directional/south, +/turf/open/floor/carpet/black, +/area/centcom/holding/cafe) +"qPw" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/door/airlock/multi_tile/public/glass{ + dir = 4; + name = "Interlink Bar" + }, +/turf/open/floor/wood/parquet, +/area/centcom/interlink) +"qPy" = ( +/obj/structure/chair/sofa/corp{ + dir = 8 + }, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"qQl" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"qRd" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/centcom/holding/cafe) +"qRX" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/light_emitter/interlink, +/obj/structure/statue/sandstone/venus{ + dir = 1; + name = "Law" + }, +/turf/open/floor/grass, +/area/centcom/interlink) +"qTa" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"qTu" = ( +/obj/structure/table/wood, +/obj/machinery/reagentgrinder{ + pixel_y = 8 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"qUb" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"qUK" = ( +/obj/structure/fans/tiny/invisible, +/obj/structure/fake_stairs/directional/south, +/obj/structure/fence/door/opened, +/obj/effect/light_emitter/interlink, +/turf/open/indestructible/dark, +/area/centcom/holding/cafepark) +"qVO" = ( +/obj/structure/railing/wooden_fencing{ + dir = 8 + }, +/obj/structure/fake_stairs/wood/directional/north, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"qVQ" = ( +/obj/structure/chair/office/light{ + dir = 4; + pixel_y = 3 + }, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/carpet/black, +/area/centcom/holding/cafe) +"qVU" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"qWc" = ( +/obj/machinery/shower/directional/west, +/turf/open/indestructible/bathroom, +/area/centcom/holding/cafe) +"qWv" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"qWA" = ( +/obj/structure/table/wood, +/obj/machinery/reagentgrinder{ + pixel_x = 6 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"qWE" = ( +/turf/open/floor/carpet/black, +/area/centcom/holding/cafe) +"qWG" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"qWZ" = ( +/obj/effect/light_emitter/interlink, +/obj/structure/fluff/arc, +/turf/open/floor/grass, +/area/centcom/interlink) +"qXC" = ( +/turf/open/floor/bamboo, +/area/centcom/holding/cafe) +"rah" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/obj/effect/light_emitter/interlink, +/obj/structure/fence/interlink{ + dir = 4 + }, +/turf/open/floor/grass, +/area/centcom/interlink) +"rbo" = ( +/obj/structure/table, +/obj/machinery/microwave{ + pixel_x = -2; + pixel_y = 7 + }, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"rbT" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/white, +/area/centcom/interlink/dorm_rooms) +"rcq" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"rfx" = ( +/obj/structure/reagent_dispensers/fueltank/large, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"rhV" = ( +/obj/structure/table/reinforced, +/obj/item/folder{ + pixel_y = 7 + }, +/obj/item/folder/yellow{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"riB" = ( +/obj/effect/turf_decal/siding{ + color = "#2e2e2e"; + dir = 4 + }, +/obj/structure/bed/double{ + pixel_y = -9 + }, +/obj/item/bedsheet/dorms_double{ + pixel_y = -9 + }, +/turf/open/floor/bamboo, +/area/centcom/holding/cafe) +"rjf" = ( +/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"rjg" = ( +/obj/structure/stone_tile/block/cracked, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 4 + }, +/obj/structure/statue/bone/rib{ + dir = 1 + }, +/turf/open/lava/fake, +/area/centcom/holding/cafepark) +"rjk" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"rjD" = ( +/obj/structure/fake_stairs/wood/directional/east, +/turf/closed/indestructible/wood, +/area/centcom/holding/cafepark) +"rkW" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"rma" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"rmA" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/button/door/directional/west{ + id = "room7"; + name = "Door Lock"; + normaldoorcontrol = 1; + pixel_y = -8; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"rmZ" = ( +/obj/structure/table/reinforced, +/obj/machinery/dish_drive{ + pixel_y = 5 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"rne" = ( +/obj/item/paper{ + default_raw_text = "Hello valued Patron! The Cafe has underwent recent renovations! The most noticable additions are a horror themed 'Hive' room in the southeast (please note that due to this theme, there are currently no doors, managment is looking into adding them) and a Sci-Fi 'Alien abduction' theme, just south of the Drobe room. Thank you,\n -The Managment."; + name = "notice to visitors" + }, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafe) +"rng" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"rnK" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/structure/table, +/obj/item/storage/medkit/brute{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/medkit/o2{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/storage/medkit/fire{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/medkit/toxin{ + pixel_x = -3 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"rnM" = ( +/obj/structure/wall_torch/spawns_lit/directional/south, +/turf/open/misc/asteroid/snow/indestructible/planet, +/area/centcom/holding/cafepark) +"roh" = ( +/obj/structure/flora/grass/jungle/a/style_3, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"rpX" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"rrA" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark/textured_large, +/area/centcom/interlink) +"rvn" = ( +/obj/structure/flora/grass/jungle/b/style_4, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"rxB" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/turf/open/indestructible/hoteltile{ + icon_state = "cafeteria" + }, +/area/centcom/holding/cafe) +"rzO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/centcom/holding/cafepark) +"rzT" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/chair/sofa/bench/right, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"rAe" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 1; + greyscale_colors = "#AA8A61" + }, +/turf/open/floor/wood, +/area/centcom/interlink) +"rCf" = ( +/obj/structure/fans/tiny/invisible, +/obj/effect/turf_decal/siding/blue, +/obj/effect/turf_decal/siding/blue{ + dir = 1 + }, +/obj/machinery/door/airlock/medical/glass{ + name = "Healthcare Center" + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"rCl" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/vending/wardrobe/science_wardrobe/ghost_cafe, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"rDg" = ( +/obj/effect/light_emitter/interlink, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/centcom/interlink) +"rDL" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"rFa" = ( +/obj/effect/turf_decal/siding/white/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"rGI" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + dir = 4; + name = "Interlink Aux Garden" + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"rHD" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/structure/mop_bucket/janitorialcart{ + dir = 4 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"rHH" = ( +/obj/structure/railing/wooden_fencing, +/obj/structure/water_source/puddle, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"rHY" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/condom_pack, +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"rJC" = ( +/obj/structure/table/wood, +/obj/machinery/computer/libraryconsole/bookmanagement, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"rKs" = ( +/obj/machinery/vending/dinnerware, +/obj/effect/turf_decal/siding/white/corner{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"rKT" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/left/directional/north{ + req_access = list("cent_general") + }, +/obj/machinery/door/window/left/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/centcom/interlink) +"rMy" = ( +/obj/structure/bed/pod{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"rMF" = ( +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"rMY" = ( +/obj/machinery/light/very_dim/directional/east, +/obj/effect/turf_decal/trimline/green/filled/arrow_cw{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"rMZ" = ( +/obj/structure/railing{ + invisibility = 100; + dir = 4 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/structure/chair/wood{ + dir = 4 + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"rNs" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/machinery/button/door{ + id = "CCGenOffice"; + name = "Command Office Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4; + pixel_y = -29 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"rNI" = ( +/obj/machinery/duct, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"rNR" = ( +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"rOf" = ( +/obj/machinery/door/window/left/directional/east{ + name = "Coffee Counter" + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"rOn" = ( +/obj/structure/railing{ + invisibility = 100; + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"rOQ" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/obj/structure/flora/ash/leaf_shroom, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"rPh" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/table/wood, +/obj/item/storage/medkit/regular{ + pixel_x = 3 + }, +/obj/item/storage/medkit/o2{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/reagent_containers/cup/glass/waterbottle, +/turf/open/floor/wood, +/area/centcom/holding/cafepark) +"rPm" = ( +/obj/effect/turf_decal/sand, +/obj/structure/closet{ + name = "beachwear closet" + }, +/obj/item/clothing/neck/beads, +/obj/item/clothing/neck/beads, +/obj/item/clothing/shoes/sandal{ + desc = "A very fashionable pair of flip-flops."; + name = "flip-flops" + }, +/obj/item/clothing/shoes/cookflops{ + desc = "A very fashionable pair of flip flops."; + name = "flip-flops" + }, +/obj/item/clothing/shoes/sandal{ + desc = "A very fashionable pair of flip-flops."; + name = "flip-flops" + }, +/obj/item/clothing/under/shorts/black, +/obj/item/clothing/under/shorts/blue, +/obj/item/clothing/under/shorts/green, +/obj/item/clothing/under/shorts/grey, +/obj/item/clothing/under/shorts/purple, +/obj/item/clothing/glasses/sunglasses, +/obj/item/clothing/glasses/sunglasses/big, +/obj/item/clothing/glasses/sunglasses, +/obj/item/clothing/suit/costume/wellworn_shirt/graphic/ian, +/obj/item/clothing/suit/costume/hawaiian, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"rPJ" = ( +/obj/item/kirbyplants/organic/plant22, +/turf/open/floor/iron/smooth, +/area/centcom/interlink) +"rQF" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/chair/sofa/bench/left{ + greyscale_colors = "#AA8A61" + }, +/obj/item/toy/plush/lizard_plushie/green{ + name = "Reads-The-Books" + }, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/wood, +/area/centcom/interlink) +"rRv" = ( +/obj/machinery/door/airlock/centcom{ + name = "Blueshield's Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/captain, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green/opposingcorners, +/turf/open/floor/iron, +/area/centcom/interlink) +"rSa" = ( +/obj/effect/light_emitter/interlink, +/obj/structure/flora/bush/flowers_yw/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"rSu" = ( +/obj/machinery/door/airlock/medical{ + id_tag = "CCPsych"; + name = "Psychology Office" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/dark, +/area/centcom/holding/cafe) +"rSK" = ( +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron, +/area/centcom/interlink) +"rTv" = ( +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/centcom/interlink) +"rTx" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw, +/obj/effect/turf_decal/siding/white{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"rTM" = ( +/obj/effect/turf_decal/siding/white/corner, +/obj/effect/turf_decal/trimline/blue/filled/arrow_cw{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"rTU" = ( +/obj/structure/sign/painting/large/library{ + dir = 1 + }, +/turf/open/floor/carpet/cyan, +/area/centcom/holding/cafe) +"rUA" = ( +/obj/machinery/vending/ashclothingvendor, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"rUT" = ( +/obj/structure/chair/sofa/corp/left, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/carpet/purple, +/area/centcom/holding/cafe) +"rVP" = ( +/obj/machinery/door/poddoor/ert, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/centcom/interlink) +"rVQ" = ( +/obj/effect/light_emitter/interlink, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"rXY" = ( +/obj/effect/light_emitter/interlink, +/turf/closed/indestructible/opshuttle, +/area/centcom/holding/cafe) +"rYj" = ( +/obj/structure/fans/tiny/invisible, +/obj/machinery/door/airlock/captain{ + id_tag = "CCGenOffice"; + name = "Cafe Manager Office" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"rYy" = ( +/obj/structure/sign/directions/evac{ + pixel_y = -8 + }, +/obj/structure/sign/directions/arrival{ + dir = 1 + }, +/obj/structure/sign/directions/dorms{ + dir = 4; + pixel_y = 8 + }, +/turf/closed/indestructible/riveted, +/area/centcom/interlink) +"rYR" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"rZY" = ( +/turf/open/floor/iron/stairs{ + dir = 1 + }, +/area/centcom/holding/cafepark) +"saE" = ( +/obj/effect/turf_decal/trimline/dark_green/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"saN" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner, +/obj/effect/turf_decal/siding/white/corner, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"saT" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"sci" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/centcom/interlink) +"sck" = ( +/obj/machinery/button/curtain{ + id = "CCSalon"; + pixel_x = 1; + pixel_y = 28 + }, +/turf/open/floor/carpet/black, +/area/centcom/holding/cafe) +"sen" = ( +/obj/structure/railing{ + invisibility = 100 + }, +/obj/effect/turf_decal/weather/dirt, +/obj/structure/chair/wood, +/turf/open/indestructible/cobble, +/area/centcom/holding/cafepark) +"sfd" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/structure/chair/sofa/bench/corner, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"sfN" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"sga" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 10 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"sgD" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/light_emitter/interlink, +/obj/structure/flora/bush/flowers_yw/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"shn" = ( +/obj/structure/railing/corner, +/obj/effect/turf_decal/arrows{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron, +/area/centcom/interlink) +"sic" = ( +/obj/machinery/duct, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/trimline/dark_green/filled/line, +/turf/open/floor/iron, +/area/centcom/interlink) +"sjP" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"ski" = ( +/obj/structure/flora/bush/large{ + icon_state = "bush3" + }, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"skM" = ( +/obj/structure/fans/tiny/invisible, +/obj/machinery/door/airlock{ + name = "Gym" + }, +/turf/open/indestructible/dark, +/area/centcom/holding/cafe) +"slz" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"slW" = ( +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"smx" = ( +/obj/effect/turf_decal/siding{ + color = "#2e2e2e" + }, +/obj/effect/turf_decal/siding{ + color = "#2e2e2e"; + dir = 10 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = 15 + }, +/obj/machinery/button/door{ + id = "ghostcafecabinjap"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_y = -24; + specialfunctions = 4 + }, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/bamboo, +/area/centcom/holding/cafe) +"smA" = ( +/obj/structure/flora/tree/dead, +/turf/open/floor/grass/fairy, +/area/centcom/holding/cafepark) +"smT" = ( +/obj/structure/railing{ + dir = 10 + }, +/turf/open/indestructible/cobble/corner{ + dir = 8 + }, +/area/centcom/holding/cafepark) +"sow" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"soW" = ( +/obj/structure/reagent_dispensers/cooking_oil, +/turf/open/floor/iron/freezer, +/area/centcom/interlink) +"spb" = ( +/obj/machinery/status_display/evac/directional/south, +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"sqZ" = ( +/obj/structure/chair/sofa/bench/left, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"srA" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"srS" = ( +/turf/open/floor/iron/stairs/old, +/area/centcom/holding/cafepark) +"ssi" = ( +/obj/machinery/button/door{ + id = "ghostcafecabin2"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_y = -24; + specialfunctions = 4 + }, +/obj/structure/bed/double, +/obj/item/bedsheet/dorms_double, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafepark) +"ssn" = ( +/obj/machinery/status_display/shuttle{ + pixel_y = 32; + shuttle_id = "arrivals_shuttle" + }, +/obj/machinery/computer/shuttle/arrivals/recall, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"ssQ" = ( +/obj/structure/stone_tile/slab, +/obj/structure/curtain/bounty, +/obj/structure/bed/maint, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"std" = ( +/obj/effect/mapping_helpers/airlock/access/all/service/bar, +/obj/machinery/door/airlock/service{ + name = "Interlink Bar" + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"stk" = ( +/obj/effect/landmark/latejoin, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"sto" = ( +/obj/machinery/oven/stone, +/obj/structure/stone_tile/slab, +/obj/structure/wall_torch/spawns_lit/directional/west, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"suL" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"svm" = ( +/obj/machinery/door/airlock{ + id_tag = "stall1"; + name = "Stall" + }, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"sxE" = ( +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"syc" = ( +/obj/effect/light_emitter/interlink, +/obj/structure/flora/bush/large/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"sys" = ( +/obj/machinery/shower/directional/west, +/obj/structure/sink/directional/south, +/turf/open/indestructible/bathroom, +/area/centcom/holding/cafe) +"sAC" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/wood/glass{ + name = "Lounge" + }, +/obj/structure/fans/tiny/invisible, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"sBJ" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw, +/obj/effect/turf_decal/trimline/green/filled/arrow_cw{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"sBZ" = ( +/obj/structure/dresser, +/obj/structure/sign/painting/library{ + pixel_y = 32 + }, +/obj/machinery/light/warm/no_nightlight/directional/north, +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"sCh" = ( +/obj/structure/showcase/fakeid{ + name = "console" + }, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"sDJ" = ( +/obj/structure/bookcase/random/nonfiction, +/turf/open/floor/wood, +/area/centcom/interlink) +"sDY" = ( +/obj/structure/railing, +/turf/open/indestructible/cobble/corner{ + dir = 8 + }, +/area/centcom/holding/cafepark) +"sFB" = ( +/obj/machinery/vending/boozeomat/cafe, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"sFC" = ( +/obj/structure/fake_stairs/wood/directional/east, +/turf/open/indestructible/cobble, +/area/centcom/holding/cafepark) +"sFF" = ( +/obj/machinery/door/airlock/multi_tile/public/glass, +/obj/structure/fans/tiny/invisible, +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"sGb" = ( +/obj/machinery/door/airlock/medical{ + name = "Surgery"; + id_tag = "CCSurgery" + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"sGf" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/structure/closet/crate/trashcart, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"sGw" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 1 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"sGU" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"sHR" = ( +/obj/structure/musician/piano, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"sIb" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"sIH" = ( +/obj/structure/chair/sofa/left/brown{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"sIZ" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"sJa" = ( +/obj/effect/turf_decal/siding/white{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"sJJ" = ( +/obj/machinery/shower/directional/south, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/structure/window/spawner/directional/west, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"sKg" = ( +/obj/effect/turf_decal/trimline/green/filled/arrow_cw{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"sKP" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/vending/wardrobe/robo_wardrobe/ghost_cafe, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"sMF" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/obj/machinery/firealarm/directional/south, +/obj/structure/closet/crate/bin, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"sNg" = ( +/obj/structure/rack, +/obj/item/mop, +/obj/item/soap/homemade, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"sNh" = ( +/obj/structure/window/spawner/directional/south, +/obj/effect/turf_decal/siding/wood, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/flora/grass/jungle/a/style_4, +/obj/structure/flora/bush/flowers_pp, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafe) +"sNs" = ( +/obj/structure/bed/double/pod, +/obj/item/bedsheet/random/double, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"sOj" = ( +/obj/structure/table/reinforced/rglass, +/obj/item/kirbyplants/fern{ + pixel_y = 14; + pixel_x = -5 + }, +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = -3 + }, +/turf/open/floor/carpet/black, +/area/centcom/holding/cafe) +"sOk" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Interlink Evac Library" + }, +/obj/effect/turf_decal/trimline/green/filled/arrow_cw, +/turf/open/floor/iron, +/area/centcom/interlink) +"sPA" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"sPH" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/directional/north, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"sQj" = ( +/obj/structure/sign/painting/library, +/turf/closed/indestructible/wood, +/area/centcom/holding/cafe) +"sQX" = ( +/obj/structure/flora/biolumi/flower{ + random_light = null + }, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"sRt" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/carpet/cyan, +/area/centcom/holding/cafe) +"sRV" = ( +/obj/structure/chair/sofa/bench/right, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"sSe" = ( +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/obj/structure/stone_tile/surrounding_tile, +/turf/open/lava/fake, +/area/centcom/holding/cafepark) +"sSX" = ( +/obj/machinery/door/airlock/medical{ + name = "Interlink Operating Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"sTH" = ( +/obj/machinery/duct, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"sUC" = ( +/obj/structure/fans/tiny/invisible, +/obj/structure/flora/grass/jungle/a/style_3, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"sUE" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"sWb" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/closet/secure_closet/freezer/empty{ + name = "milk freezer" + }, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/cup/glass/bottle/juice/cream, +/obj/item/reagent_containers/cup/glass/bottle/juice/cream, +/turf/open/floor/iron, +/area/centcom/interlink) +"sXR" = ( +/turf/open/floor/stone, +/area/centcom/holding/cafe) +"sYC" = ( +/obj/structure/closet/secure_closet/freezer/empty{ + name = "produce freezer" + }, +/obj/item/food/grown/apple, +/obj/item/food/grown/apple, +/obj/item/food/grown/banana, +/obj/item/food/grown/banana, +/obj/item/food/grown/berries, +/obj/item/food/grown/berries, +/obj/item/food/grown/cherries, +/obj/item/food/grown/cherries, +/obj/item/food/grown/citrus/orange, +/obj/item/food/grown/citrus/orange, +/obj/item/food/grown/grapes, +/obj/item/food/grown/grapes, +/obj/item/food/grown/peas, +/obj/item/food/grown/peas, +/obj/item/food/grown/pineapple, +/obj/item/food/grown/pineapple, +/obj/item/food/grown/plum, +/obj/item/food/grown/plum, +/obj/item/food/grown/potato, +/obj/item/food/grown/potato, +/obj/item/food/grown/pumpkin, +/obj/item/food/grown/pumpkin, +/obj/item/food/grown/redbeet, +/obj/item/food/grown/redbeet, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/item/food/grown/wheat, +/obj/item/food/grown/wheat, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/freezer, +/area/centcom/interlink) +"sYY" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/vending/drugs, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"sZl" = ( +/obj/effect/light_emitter/interlink, +/obj/structure/flora/tree/jungle/small, +/turf/open/floor/grass, +/area/centcom/interlink) +"sZM" = ( +/obj/structure/dresser{ + pixel_y = 7 + }, +/turf/open/floor/carpet/blue, +/area/centcom/holding/cafedorms) +"sZV" = ( +/obj/item/kirbyplants/organic/plant22, +/obj/machinery/light/warm/directional/south, +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/turf/open/floor/iron, +/area/centcom/interlink) +"tag" = ( +/obj/machinery/vending/tool{ + onstation = 0 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"tbI" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"tci" = ( +/obj/structure/table/wood, +/obj/item/paper_bin, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"tct" = ( +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"tdm" = ( +/obj/structure/chair/sofa/bench/corner, +/obj/effect/turf_decal/siding/white/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"tdp" = ( +/obj/effect/light_emitter/interlink, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/structure/flora/bush/flowers_yw/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"tdP" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/indestructible{ + id = "bs_shutters"; + name = "BlueShields Shutters" + }, +/turf/open/floor/plating, +/area/centcom/interlink) +"tfe" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/west, +/obj/machinery/shower/directional/south, +/turf/open/floor/iron/white, +/area/centcom/interlink/dorm_rooms) +"tfI" = ( +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"tgU" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"thr" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/entertainment/deck{ + pixel_y = 5 + }, +/turf/open/floor/carpet/red, +/area/centcom/interlink) +"thU" = ( +/obj/machinery/door/poddoor/ert, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/centcom/interlink) +"tik" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"tin" = ( +/obj/effect/turf_decal/caution{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"tjv" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/structure/stone_tile/block, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"tky" = ( +/turf/open/indestructible/bathroom, +/area/centcom/holding/cafe) +"tlu" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"tpU" = ( +/turf/open/misc/dirt/planet, +/area/centcom/interlink) +"tsi" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Interlink Security Post" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"tsx" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"ttx" = ( +/obj/structure/table, +/obj/item/storage/fancy/candle_box{ + pixel_y = 8 + }, +/obj/item/storage/fancy/candle_box{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"ttN" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"tur" = ( +/obj/structure/chair/stool/bar/directional/south, +/turf/open/indestructible/cobble/side, +/area/centcom/holding/cafepark) +"tuO" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/lusty_xenomorph/directional/south, +/obj/machinery/vending/wardrobe/jani_wardrobe/ghost_cafe, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"tvh" = ( +/obj/structure/fence{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"tvm" = ( +/obj/machinery/door/airlock{ + id_tag = "room8"; + name = "Cabin" + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"tvw" = ( +/turf/closed/indestructible/riveted, +/area/centcom/interlink) +"twE" = ( +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"twL" = ( +/turf/open/misc/beach/coast{ + dir = 8 + }, +/area/centcom/holding/cafepark) +"tyG" = ( +/obj/effect/turf_decal/sand, +/obj/machinery/vending/cola, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"tzz" = ( +/obj/structure/toilet/snappop{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/end{ + dir = 4; + pixel_y = -6 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 8; + pixel_y = -7 + }, +/turf/open/floor/sepia, +/area/centcom/holding/cafe) +"tzR" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"tBo" = ( +/obj/structure/table, +/obj/machinery/microwave{ + pixel_y = 8 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"tBN" = ( +/obj/structure/chair/sofa/left/brown{ + dir = 1 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafedorms) +"tCi" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"tCJ" = ( +/obj/effect/turf_decal/caution, +/turf/open/floor/iron, +/area/centcom/interlink) +"tDj" = ( +/obj/structure/rack/shelf{ + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; + icon_state = "empty_shelf_1" + }, +/obj/structure/wall_torch/spawns_lit/directional/west, +/obj/item/bedsheet/black{ + pixel_x = 5; + pixel_y = 8 + }, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"tEg" = ( +/obj/structure/fans/tiny/invisible, +/turf/open/water/beach, +/area/centcom/holding/cafepark) +"tEq" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"tGG" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Interlink Shuttle" + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"tHh" = ( +/obj/machinery/light/warm/directional/west, +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"tHO" = ( +/obj/structure/table/wood, +/obj/item/storage/box/donkpockets/donkpocketpizza, +/obj/item/storage/box/donkpockets{ + pixel_x = 7 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"tIM" = ( +/obj/structure/flora/bush/jungle/b, +/obj/structure/fans/tiny/invisible, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"tIN" = ( +/obj/effect/light_emitter/interlink, +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"tKt" = ( +/turf/open/floor/plating/abductor, +/area/centcom/holding/cafepark) +"tLu" = ( +/obj/item/toy/plush/lizard_plushie/green{ + name = "Soaks-The-Rays" + }, +/turf/open/floor/carpet/orange, +/area/centcom/holding/cafepark) +"tMb" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"tNw" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/effect/turf_decal/arrows{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"tQP" = ( +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"tUk" = ( +/obj/structure/fence/corner, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"tUz" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/landmark/latejoin, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"tUL" = ( +/obj/item/flashlight/flare/torch, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"tVg" = ( +/obj/structure/falsewall/sandstone, +/obj/structure/fans/tiny/invisible, +/turf/open/floor/iron/showroomfloor, +/area/centcom/holding/cafe) +"tVM" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/block, +/obj/item/flashlight/flare/candle/infinite, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"tWA" = ( +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"tXa" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/light, +/obj/machinery/vending/imported/tiziran{ + default_price = 0; + extended_inventory = 1; + extra_price = 0; + fair_market_price = 0 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) +"tXp" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"tYf" = ( +/obj/machinery/vending/autodrobe/all_access, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"tYk" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/bottle/whiskey{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = 7; + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = 7; + pixel_y = 12 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafedorms) +"tYP" = ( +/obj/structure/table/wood, +/obj/item/toy/cards/deck, +/obj/item/lighter, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"tZU" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/centcom/interlink) +"uab" = ( +/obj/structure/closet/crate, +/obj/item/storage/box/ingredients/vegetarian, +/obj/item/storage/box/ingredients/italian, +/obj/item/storage/box/ingredients/fruity, +/obj/item/storage/box/ingredients/fiesta, +/obj/item/storage/box/ingredients/american, +/obj/item/storage/box/ingredients/exotic, +/obj/item/reagent_containers/condiment/flour{ + list_reagents = list(/datum/reagent/consumable/flour = 90); + name = "large flour sack"; + possible_transfer_amounts = list(1,5,10,15,30,60,90); + volume = 90 + }, +/obj/item/reagent_containers/condiment/flour{ + list_reagents = list(/datum/reagent/consumable/flour = 90); + name = "large flour sack"; + possible_transfer_amounts = list(1,5,10,15,30,60,90); + volume = 90 + }, +/obj/machinery/button/door{ + id = "ghostcafekitchen"; + name = "Kitchen Shutters Control"; + pixel_x = -1; + pixel_y = -24 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "cafeteria" + }, +/area/centcom/holding/cafe) +"uaM" = ( +/obj/effect/light_emitter/interlink, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"ubn" = ( +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"ubH" = ( +/obj/structure/table, +/obj/item/paper/pamphlet/centcom/visitor_info{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/paper/pamphlet/centcom/visitor_info, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 10 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"ucr" = ( +/obj/structure/chair/office, +/obj/machinery/button/door/directional/east{ + id = "interlink_hall"; + name = "Evac Hall Shutter Control"; + pixel_y = -8; + req_access = list("security") + }, +/obj/machinery/button/door/directional/east{ + id = "evac_hall"; + name = "Evac Access Shutter Control"; + pixel_y = 8; + req_access = list("security") + }, +/obj/machinery/light/cold/directional/east, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"udI" = ( +/obj/structure/chair/stool/directional/south{ + dir = 1 + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"uew" = ( +/obj/structure/table/reinforced, +/obj/item/storage/belt/utility{ + pixel_y = -2; + pixel_x = -3 + }, +/obj/item/clothing/glasses/welding{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/circuit/green, +/area/centcom/holding/cafe) +"ueC" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/condiment/enzyme{ + layer = 5 + }, +/obj/machinery/light/directional/south, +/obj/item/reagent_containers/cup/beaker/bluespace{ + luminosity = 3; + name = "floofmagic beaker"; + possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150,200,250,500); + volume = 500 + }, +/obj/item/reagent_containers/cup/beaker/bluespace{ + luminosity = 3; + name = "floofmagic beaker"; + possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150,200,250,500); + volume = 500 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"ufv" = ( +/obj/machinery/light/very_dim/directional/south, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"ufz" = ( +/obj/structure/sign/painting/large/library{ + dir = 1 + }, +/obj/machinery/light/directional/west, +/obj/structure/table/wood, +/obj/item/storage/crayons, +/obj/item/toy/crayon/spraycan{ + pixel_y = 6 + }, +/obj/item/toy/crayon/spraycan{ + pixel_x = 4; + pixel_y = 10 + }, +/turf/open/floor/carpet/cyan, +/area/centcom/holding/cafe) +"uhO" = ( +/obj/structure/table/reinforced, +/obj/item/folder/blue, +/obj/item/stamp/denied{ + pixel_x = 10; + pixel_y = 10 + }, +/obj/item/stamp{ + pixel_x = 6; + pixel_y = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/centcom/interlink) +"uis" = ( +/obj/structure/reagent_dispensers/plumbed, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"uiZ" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/paperframes/fifty, +/obj/item/stack/sheet/paperframes/fifty, +/obj/item/storage/fancy/candle_box, +/obj/item/storage/fancy/candle_box, +/obj/item/storage/fancy/candle_box, +/obj/item/storage/box/lights/mixed, +/obj/item/stack/sheet/plastic/fifty, +/obj/item/stack/sheet/plastic/fifty, +/obj/item/stack/sheet/plastic/fifty, +/obj/item/stack/sheet/mineral/bamboo/fifty, +/obj/item/stack/sheet/mineral/bamboo/fifty, +/obj/item/stack/sheet/mineral/bamboo/fifty, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"uji" = ( +/obj/machinery/door/poddoor/shutters/window/indestructible{ + id = "interlink_hall2"; + name = "Windowed Interlink Access Shutters" + }, +/obj/effect/turf_decal/caution/stand_clear, +/turf/open/floor/iron, +/area/centcom/interlink) +"ujQ" = ( +/obj/item/toy/plush/lizard_plushie/green{ + name = "Breaks-The-Maps" + }, +/turf/open/misc/dirt/planet, +/area/centcom/interlink) +"ujV" = ( +/obj/structure/sign/painting/large/library{ + dir = 4 + }, +/obj/structure/sign/painting/library{ + pixel_y = -32 + }, +/turf/open/floor/carpet/cyan, +/area/centcom/holding/cafe) +"ujZ" = ( +/obj/item/kirbyplants/organic/plant22, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"ukp" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"umm" = ( +/obj/structure/chair/comfy/brown{ + color = "#c45c57"; + desc = "Remarkably soft, with plush cozy cushions, premium memory-foam and covered in stain-resistant fabric. Made by Kat-Kea???!"; + name = "Premium Cozy Chair" + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"unt" = ( +/obj/structure/flora/rock/pile/style_random, +/turf/open/misc/dirt/planet, +/area/centcom/interlink) +"uny" = ( +/obj/structure/chair/sofa/bench{ + dir = 8 + }, +/obj/effect/landmark/latejoin, +/turf/open/floor/iron, +/area/centcom/interlink) +"uoM" = ( +/obj/effect/spawner/liquids_spawner, +/turf/open/floor/iron/pool/cobble, +/area/centcom/holding/cafepark) +"upo" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"uqJ" = ( +/obj/machinery/door/airlock/centcom{ + name = "Nanotrasen Consultant's Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/cent_com/rep_door, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green/opposingcorners, +/turf/open/floor/iron, +/area/centcom/interlink) +"use" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 4 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"usr" = ( +/obj/effect/light_emitter/interlink, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"uwP" = ( +/obj/structure/chair/wood, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"uxW" = ( +/turf/open/misc/beach/coast{ + dir = 4 + }, +/area/centcom/holding/cafepark) +"uyr" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/landmark/latejoin, +/turf/open/floor/iron, +/area/centcom/interlink) +"uAi" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white, +/obj/structure/chair/sofa/bench/left, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"uAm" = ( +/obj/effect/turf_decal/siding/white/corner{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/centcom/interlink) +"uAN" = ( +/obj/structure/chair/stool/bamboo, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"uBw" = ( +/obj/effect/decal/remains/xeno, +/obj/structure/alien/weeds, +/obj/structure/alien/weeds/node, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"uCw" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"uCW" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/centcom/interlink) +"uDr" = ( +/obj/structure/chair/sofa/corp/corner{ + dir = 1 + }, +/obj/machinery/light/warm/directional/south, +/turf/open/floor/wood/parquet, +/area/centcom/interlink) +"uDT" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/obj/machinery/button/door/directional/south{ + id = "room2"; + name = "Door Lock"; + normaldoorcontrol = 1; + pixel_x = -8; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"uEn" = ( +/obj/structure/table, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron/freezer, +/area/centcom/interlink) +"uET" = ( +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"uFG" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/indestructible{ + id = "il_kitchen"; + name = "Interlink Kitchen Shutters" + }, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"uGt" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 1 + }, +/obj/effect/light_emitter/interlink, +/turf/open/misc/dirt/planet, +/area/centcom/interlink) +"uGU" = ( +/obj/structure/table, +/obj/machinery/microwave{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"uIf" = ( +/obj/structure/closet, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"uIh" = ( +/obj/structure/alien/weeds, +/obj/structure/bed/nest, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"uIo" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/structure/marker_beacon/burgundy, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"uIp" = ( +/obj/machinery/deepfryer, +/obj/machinery/light/cold/directional/east, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"uJA" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/entertainment/dice{ + pixel_y = 4 + }, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"uJK" = ( +/obj/machinery/door/airlock/bathroom{ + name = "Bathroom" + }, +/turf/open/floor/iron/freezer, +/area/centcom/holding/cafe) +"uKH" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/light_emitter/interlink, +/obj/structure/flora/tree/jungle/small/style_6, +/turf/open/floor/grass, +/area/centcom/interlink) +"uKW" = ( +/obj/structure/chair/sofa/bench, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"uMR" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"uNg" = ( +/obj/structure/bed/double{ + dir = 8 + }, +/obj/item/bedsheet/dorms_double{ + dir = 8 + }, +/turf/open/floor/carpet/blue, +/area/centcom/holding/cafedorms) +"uPd" = ( +/obj/machinery/duct, +/obj/structure/sign/poster/random/directional/south, +/obj/effect/turf_decal/trimline/dark_green/filled/line, +/turf/open/floor/iron, +/area/centcom/interlink) +"uQt" = ( +/obj/effect/turf_decal/trimline/dark_green/filled/line, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron, +/area/centcom/interlink) +"uSQ" = ( +/obj/structure/table/reinforced, +/obj/machinery/chem_dispenser/drinks, +/obj/effect/turf_decal/trimline/green/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"uTg" = ( +/obj/machinery/door/airlock/centcom{ + name = "Interlink" + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/plating, +/area/centcom/interlink) +"uUf" = ( +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/centcom/holding/cafe) +"uVm" = ( +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/obj/structure/wall_torch/spawns_lit/directional/west, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"uWe" = ( +/obj/structure/stone_tile/block, +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/obj/structure/wall_torch/spawns_lit/directional/east, +/turf/open/lava/fake, +/area/centcom/holding/cafepark) +"uWG" = ( +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"uXf" = ( +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/toilet{ + pixel_y = 14 + }, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/turf/open/floor/plating/abductor2, +/area/centcom/holding/cafepark) +"uXF" = ( +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"uXH" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"uXK" = ( +/obj/structure/mineral_door/wood/large_gate{ + dir = 8 + }, +/obj/structure/fans/tiny/invisible, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"uYo" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"uYJ" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -5; + pixel_y = 14 + }, +/obj/item/reagent_containers/condiment/peppermill{ + dir = 1; + pixel_x = 5; + pixel_y = 14 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"vat" = ( +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"vaB" = ( +/obj/machinery/door/airlock/hatch{ + name = "Custodial Closet" + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"vca" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"vcB" = ( +/obj/machinery/computer/crew, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"vdv" = ( +/obj/machinery/light/directional/west, +/obj/item/kirbyplants/organic/plant22, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"vdW" = ( +/obj/structure/flora/bush/jungle/b, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"veh" = ( +/obj/structure/fence/door, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"vgs" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/centcom/interlink) +"vgx" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/wood, +/area/centcom/holding/cafepark) +"vgQ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"vhm" = ( +/obj/structure/railing/corner, +/obj/effect/turf_decal/trimline/blue/filled/corner, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"vkD" = ( +/obj/effect/turf_decal/siding{ + color = "#2e2e2e"; + dir = 1 + }, +/obj/machinery/button/curtain{ + id = "ghostcafecabinjapcurtain"; + pixel_x = 20; + pixel_y = -4 + }, +/turf/open/floor/bamboo, +/area/centcom/holding/cafe) +"vpT" = ( +/obj/structure/table/reinforced, +/obj/machinery/chem_dispenser/drinks/beer, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"vqx" = ( +/obj/structure/flora/bush/sparsegrass, +/obj/structure/flora/bush/reed, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"vqy" = ( +/obj/effect/light_emitter/interlink, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"vsB" = ( +/obj/structure/chair/sofa/bench/left, +/obj/effect/landmark/latejoin, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"vsW" = ( +/obj/structure/toilet{ + pixel_y = 14 + }, +/obj/structure/mirror{ + pixel_y = 32 + }, +/turf/open/indestructible/bathroom, +/area/centcom/holding/cafedorms) +"vui" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"vuq" = ( +/obj/machinery/chem_master/condimaster{ + name = "BrewMaster 3000" + }, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"vuV" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/button/door/directional/west{ + id = "room6"; + name = "Door Lock"; + normaldoorcontrol = 1; + pixel_y = -8; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"vxh" = ( +/obj/item/instrument/accordion, +/obj/item/instrument/banjo, +/obj/item/instrument/bikehorn, +/obj/item/instrument/eguitar, +/obj/item/instrument/glockenspiel, +/obj/item/instrument/guitar, +/obj/item/instrument/harmonica, +/obj/item/instrument/musicalmoth, +/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, +/obj/item/reagent_containers/condiment/mayonnaise, +/obj/structure/closet/crate/wooden{ + name = "band crate" + }, +/obj/item/paper{ + default_raw_text = "Dear Mr. Best, due to your overwhelming and unpaid tab, Managment has saw fit to confiscate your equipment, we do not care which mammel themed band you claim to be a member of.\nThank you.\n-Managment."; + name = "note to Mr. Best" + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"vxx" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"vxC" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/vending/wardrobe/coroner_wardrobe/ghost_cafe, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"vxF" = ( +/obj/machinery/vending/games, +/turf/open/floor/carpet/cyan, +/area/centcom/holding/cafe) +"vyS" = ( +/obj/structure/flora/bush/leafy, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"vzb" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 10 + }, +/obj/effect/turf_decal/sand, +/obj/structure/fence{ + dir = 4 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"vzH" = ( +/obj/structure/sign/poster/random/directional/north, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"vDr" = ( +/obj/structure/table, +/obj/effect/turf_decal/bot, +/obj/machinery/light/directional/south, +/obj/item/surgical_drapes, +/obj/item/surgicaldrill/alien, +/obj/item/cautery/alien, +/obj/item/bonesetter, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"vEs" = ( +/obj/structure/fans/tiny/invisible, +/obj/structure/spacevine{ + name = "thick vines"; + opacity = 1 + }, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"vEI" = ( +/obj/machinery/light/warm/directional/north, +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"vFj" = ( +/obj/machinery/light/warm/directional/south, +/turf/open/floor/wood, +/area/centcom/interlink) +"vFM" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"vFW" = ( +/obj/structure/table/wood, +/obj/machinery/recharger, +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"vGe" = ( +/obj/machinery/light/very_dim/directional/north, +/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"vIX" = ( +/obj/structure/table, +/obj/item/soap, +/turf/open/floor/iron/freezer, +/area/centcom/holding/cafe) +"vLh" = ( +/obj/effect/turf_decal/trimline/green/filled/arrow_cw{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"vLx" = ( +/turf/closed/indestructible/rock, +/area/centcom/interlink) +"vLY" = ( +/obj/effect/turf_decal/trimline/green/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, +/obj/machinery/door/airlock/multi_tile/public/glass{ + dir = 4; + name = "Interlink Cafe" + }, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"vNe" = ( +/obj/structure/fans/tiny/invisible, +/obj/structure/railing/wooden_fencing{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/centcom/holding/cafe) +"vNs" = ( +/obj/effect/turf_decal/tile/yellow/half{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/obj/structure/mineral_door/paperframe{ + name = "Shinto Cabin Bedroom" + }, +/turf/open/floor/iron/textured_half{ + dir = 1 + }, +/area/centcom/holding/cafe) +"vPe" = ( +/obj/structure/chair/stool/bar/directional/east, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"vQH" = ( +/obj/structure/table/wood, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"vRf" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + dir = 4; + name = "Interlink Garden" + }, +/obj/effect/turf_decal/trimline/green/arrow_ccw, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"vRE" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/centcom/interlink) +"vTT" = ( +/turf/closed/indestructible/steel, +/area/centcom/holding/cafe) +"vUu" = ( +/obj/structure/chair/sofa/left/brown, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"vUv" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 1 + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"vUI" = ( +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/computer/operating{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"vUJ" = ( +/obj/effect/turf_decal/siding/white, +/obj/structure/chair/sofa/bench, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"vWy" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"vXr" = ( +/obj/structure/flora/grass/jungle/b, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"vYz" = ( +/obj/machinery/button/curtain{ + id = "ghostcaferesort1curtain"; + pixel_x = -26 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafedorms) +"vYC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"vYI" = ( +/obj/effect/turf_decal/siding{ + color = "#2e2e2e" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = -19; + pixel_y = -10 + }, +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = -16 + }, +/turf/open/floor/bamboo, +/area/centcom/holding/cafe) +"vYR" = ( +/obj/structure/flora/coconuts, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"vYV" = ( +/obj/machinery/light/directional/east, +/obj/structure/table/reinforced/rglass, +/obj/structure/towel_bin, +/turf/open/floor/wood/large, +/area/centcom/holding/cafe) +"vZb" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 4 + }, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafepark) +"vZv" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/centcom/holding/cafe) +"wag" = ( +/obj/effect/turf_decal/trimline/green/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"wcd" = ( +/obj/structure/flora/bush/flowers_pp, +/obj/structure/flora/bush/flowers_br, +/obj/structure/flora/bush/lavendergrass, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"wcf" = ( +/obj/structure/closet/secure_closet/freezer/kitchen/all_access, +/obj/item/reagent_containers/condiment/mayonnaise, +/obj/item/reagent_containers/condiment/soysauce, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/condiment/rice{ + list_reagents = list(/datum/reagent/consumable/rice = 90); + name = "large rice sack"; + possible_transfer_amounts = list(1,5,10,15,20,25,30,50,60,90) + }, +/obj/item/reagent_containers/condiment/rice{ + list_reagents = list(/datum/reagent/consumable/rice = 90); + name = "large rice sack"; + possible_transfer_amounts = list(1,5,10,15,20,25,30,50,60,90) + }, +/obj/item/reagent_containers/condiment/cornmeal, +/obj/item/reagent_containers/condiment/cornmeal, +/obj/item/reagent_containers/condiment/vinegar, +/turf/open/indestructible/hoteltile{ + icon_state = "cafeteria" + }, +/area/centcom/holding/cafe) +"wck" = ( +/obj/machinery/duct, +/obj/effect/turf_decal/trimline/dark_green/filled/line, +/turf/open/floor/iron, +/area/centcom/interlink) +"wdo" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafepark) +"wdB" = ( +/obj/machinery/door/airlock{ + id_tag = "room3"; + name = "Cabin" + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"weP" = ( +/obj/structure/mineral_door/paperframe{ + name = "Shinto Cabin Washroom" + }, +/turf/open/floor/sepia, +/area/centcom/holding/cafe) +"wfh" = ( +/obj/effect/landmark/latejoin, +/turf/open/floor/iron, +/area/centcom/interlink) +"wft" = ( +/obj/structure/chair/sofa/corner/brown{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"wfN" = ( +/obj/effect/light_emitter/interlink, +/turf/open/indestructible/plating, +/area/centcom/holding/cafe) +"wiT" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/hedge, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"wji" = ( +/obj/structure/flora/rock/style_random, +/turf/open/misc/dirt/planet, +/area/centcom/interlink) +"wjI" = ( +/obj/structure/flora/grass/jungle/a/style_2, +/obj/machinery/light/directional/north, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"wkG" = ( +/obj/structure/chair/stool/bar/directional/south, +/turf/open/floor/wood/parquet, +/area/centcom/interlink) +"wkQ" = ( +/obj/structure/railing{ + invisibility = 100; + dir = 1 + }, +/obj/structure/chair/wood{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"wlA" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/turf/open/floor/iron/white, +/area/centcom/interlink/dorm_rooms) +"wlL" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/structure/stone_tile/block, +/obj/item/flashlight/flare/candle/infinite, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"wmA" = ( +/obj/structure/stone_tile/slab/cracked, +/obj/structure/fans/tiny/invisible, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"wmW" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"wnj" = ( +/obj/structure/reagent_water_basin, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"wns" = ( +/obj/structure/fans/tiny/invisible, +/obj/structure/flora/grass/jungle/b, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"wod" = ( +/obj/structure/sign/poster/random/directional/north, +/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"wpz" = ( +/obj/effect/light_emitter/interlink, +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"wqC" = ( +/obj/structure/lavaland/ash_walker_fake, +/turf/open/lava/fake, +/area/centcom/holding/cafepark) +"wqL" = ( +/obj/effect/light_emitter/interlink, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"wrf" = ( +/turf/open/floor/carpet/blue, +/area/centcom/holding/cafedorms) +"wsu" = ( +/obj/structure/table/wood, +/obj/item/folder/red{ + pixel_x = 12; + pixel_y = 2 + }, +/obj/item/pen{ + pixel_x = 6; + pixel_y = 10 + }, +/turf/open/floor/carpet/executive, +/area/centcom/interlink) +"wtw" = ( +/obj/structure/stone_tile/slab, +/obj/structure/bed/maint{ + pixel_y = 13 + }, +/obj/structure/bed/maint, +/obj/item/bedsheet/black/double{ + dir = 1 + }, +/obj/structure/curtain/bounty, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"wtI" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"wuH" = ( +/obj/structure/table, +/obj/machinery/light/cold/directional/north, +/obj/effect/turf_decal/delivery/blue, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"wvy" = ( +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"wwD" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"wyn" = ( +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/centcom/interlink) +"wyF" = ( +/obj/structure/sign/directions/security{ + dir = 8; + pixel_y = -8 + }, +/obj/structure/sign/directions/medical{ + dir = 8 + }, +/obj/structure/sign/directions/arrival{ + dir = 1; + pixel_y = 8 + }, +/turf/closed/indestructible/riveted, +/area/centcom/interlink) +"wyL" = ( +/obj/machinery/door/airlock/centcom{ + name = "ERT Access" + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/any/cent_com/rep_or_captain, +/turf/open/floor/iron, +/area/centcom/interlink) +"wzZ" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"wAE" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"wBc" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"wBI" = ( +/obj/effect/turf_decal/siding/white/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"wBV" = ( +/obj/structure/railing, +/turf/open/indestructible/cobble/side, +/area/centcom/holding/cafepark) +"wBX" = ( +/obj/structure/sink/directional/south, +/turf/open/indestructible/bathroom, +/area/centcom/holding/cafedorms) +"wCC" = ( +/obj/structure/flora/bush/large/style_random, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"wCN" = ( +/obj/machinery/computer/records/security, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/iron, +/area/centcom/interlink) +"wDG" = ( +/obj/structure/chair/stool/bar/directional/north, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"wFe" = ( +/obj/structure/stone_tile/surrounding_tile/cracked, +/obj/structure/chair/stool/bamboo{ + dir = 8 + }, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"wFF" = ( +/obj/machinery/light/directional/west, +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"wGV" = ( +/obj/machinery/computer/operating{ + dir = 4 + }, +/obj/effect/turf_decal/delivery/blue, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"wHm" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/centcom/interlink) +"wHJ" = ( +/obj/effect/turf_decal/trimline/dark_green/filled/warning{ + dir = 10 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"wHS" = ( +/obj/machinery/telecomms/relay/preset/station, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron, +/area/centcom/interlink) +"wId" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = 7; + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = 7; + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/glass/bottle/vodka{ + pixel_x = -5; + pixel_y = 6 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafedorms) +"wIg" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder{ + pixel_y = 6 + }, +/turf/open/floor/iron/cafeteria, +/area/centcom/interlink) +"wIO" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 8 + }, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"wJj" = ( +/obj/effect/turf_decal/caution/stand_clear, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"wKb" = ( +/obj/structure/table/glass, +/obj/item/storage/box/disks{ + pixel_x = -8; + pixel_y = 10 + }, +/obj/item/storage/box/syringes{ + pixel_x = 7; + pixel_y = 10 + }, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -11 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "darkfull" + }, +/area/centcom/holding/cafepark) +"wKT" = ( +/obj/structure/bed/pod{ + pixel_y = 1 + }, +/turf/open/floor/wood/large, +/area/centcom/holding/cafe) +"wLx" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"wLN" = ( +/obj/structure/railing{ + invisibility = 100; + dir = 4 + }, +/obj/effect/spawner/liquids_spawner, +/turf/open/floor/iron/pool, +/area/centcom/holding/cafepark) +"wME" = ( +/obj/structure/table, +/obj/item/paper/pamphlet/centcom/visitor_info{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/paper/pamphlet/centcom/visitor_info, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"wOi" = ( +/obj/structure/weightmachine/weightlifter, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"wOQ" = ( +/obj/effect/turf_decal/siding/white/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"wUt" = ( +/obj/structure/table/wood, +/obj/structure/towel_bin, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"wUS" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "white" + }, +/area/centcom/holding/cafepark) +"wVd" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"wWm" = ( +/obj/structure/chair/stool/bar/directional/south, +/turf/open/indestructible/cobble/corner{ + dir = 4 + }, +/area/centcom/holding/cafepark) +"wXe" = ( +/obj/structure/bookcase/random/adult, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/centcom/interlink) +"wXm" = ( +/obj/structure/chair/office, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"wXo" = ( +/obj/machinery/door/airlock/bathroom{ + name = "Bathroom" + }, +/turf/open/floor/iron/white, +/area/centcom/interlink/dorm_rooms) +"wYD" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"wYH" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"wZa" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/surgery_tray/full/deployed, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"wZh" = ( +/obj/machinery/door/airlock/sandstone{ + id_tag = "ghostcaferesortbathroom2"; + name = "Resort Bathroom" + }, +/obj/structure/fans/tiny/invisible, +/turf/open/floor/wood, +/area/centcom/holding/cafe) +"wZw" = ( +/obj/structure/chair/sofa/bench/corner, +/turf/open/floor/wood/large, +/area/centcom/holding/cafe) +"wZS" = ( +/obj/item/storage/cans/sixbeer, +/turf/open/floor/carpet/orange, +/area/centcom/holding/cafepark) +"wZW" = ( +/obj/machinery/newscaster/directional/west, +/obj/structure/table/reinforced, +/obj/machinery/button/door/directional/north{ + id = "centshutterstop" + }, +/obj/machinery/light/cold/no_nightlight/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/centcom/interlink) +"xaT" = ( +/obj/machinery/light/cold/directional/south, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"xbn" = ( +/obj/structure/flora/grass/jungle, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"xct" = ( +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"xdQ" = ( +/obj/structure/table, +/obj/item/storage/medkit/brute{ + pixel_x = 8; + pixel_y = 10 + }, +/obj/item/storage/medkit/fire{ + pixel_y = 6 + }, +/obj/effect/turf_decal/delivery/blue, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"xec" = ( +/obj/structure/table/wood, +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = 4; + pixel_y = 10 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafepark) +"xfD" = ( +/obj/structure/punching_bag, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"xga" = ( +/obj/structure/table/wood, +/obj/item/flashlight{ + desc = "A hand-held not-so-emergency light that's very very bright!"; + light_power = 10; + name = "Super Light" + }, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"xgz" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"xkO" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/flora/bush/jungle/b, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafe) +"xlP" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/turf/open/lava/fake, +/area/centcom/holding/cafepark) +"xlS" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"xmn" = ( +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"xnl" = ( +/obj/effect/turf_decal/sand, +/obj/structure/marker_beacon/burgundy, +/turf/open/indestructible/plating, +/area/centcom/holding/cafepark) +"xnI" = ( +/obj/structure/table/reinforced, +/obj/item/storage/backpack/duffelbag/science/robo/surgery{ + pixel_y = 7 + }, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"xoB" = ( +/obj/structure/table/wood, +/obj/structure/window/spawner/directional/west, +/obj/structure/window/spawner/directional/south, +/obj/item/reagent_containers/cup/bottle/syrup_bottle/liqueur{ + pixel_x = -5; + pixel_y = 16 + }, +/obj/item/reagent_containers/cup/bottle/syrup_bottle/korta_nectar{ + pixel_x = 5; + pixel_y = 16 + }, +/obj/item/reagent_containers/cup/bottle/syrup_bottle/caramel{ + pixel_x = 15; + pixel_y = 16 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"xpl" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/obj/effect/landmark/latejoin, +/turf/open/floor/mineral/titanium, +/area/centcom/interlink) +"xpy" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"xpH" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ + density = 0 + }, +/obj/structure/sign/poster/contraband/red_rum/directional/north, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"xqq" = ( +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/obj/effect/landmark/latejoin, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"xqI" = ( +/obj/machinery/vending/dorms, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"xsf" = ( +/obj/structure/flora/ash/stem_shroom, +/turf/open/floor/fakebasalt, +/area/centcom/holding/cafepark) +"xsg" = ( +/obj/effect/turf_decal/trimline/blue/filled/arrow_cw{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/filled/arrow_cw, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"xsM" = ( +/obj/structure/window/spawner/directional/south, +/obj/structure/reagent_dispensers/water_cooler, +/obj/machinery/light/directional/west, +/turf/open/floor/carpet/black, +/area/centcom/holding/cafe) +"xtQ" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/light_emitter/interlink, +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"xuk" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/chair/sofa/bench{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"xwC" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"xxv" = ( +/obj/structure/mineral_door/wood, +/obj/structure/fans/tiny/invisible, +/turf/open/floor/wood, +/area/centcom/holding/cafedorms) +"xyn" = ( +/obj/structure/flora/grass/jungle/a/style_4, +/obj/machinery/light/directional/north, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"xyz" = ( +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"xzh" = ( +/obj/structure/flora/bush/flowers_yw/style_random, +/turf/open/floor/grass, +/area/centcom/interlink) +"xzt" = ( +/obj/structure/chair/sofa/bench{ + dir = 1 + }, +/obj/effect/light_emitter/interlink, +/turf/open/misc/dirt/planet, +/area/centcom/interlink) +"xCy" = ( +/obj/item/clothing/mask/facehugger/toy, +/obj/structure/alien/weeds, +/obj/structure/alien/weeds/node, +/obj/structure/alien/egg/burst, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"xCO" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"xDp" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafepark) +"xDR" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/obj/effect/turf_decal/bot, +/obj/machinery/vending/medical, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"xEn" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Interlink Customs"; + req_access = list("cent_general") + }, +/obj/machinery/door/window/left/directional/south, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"xFE" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"xFU" = ( +/obj/effect/turf_decal/sand, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"xFZ" = ( +/obj/structure/flora/bush/sunny, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"xGO" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/flora/grass/jungle, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafe) +"xHs" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/bamboo, +/area/centcom/holding/cafe) +"xIx" = ( +/obj/structure/chair/office, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"xIR" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Interlink Bar" + }, +/turf/open/floor/wood/parquet, +/area/centcom/interlink) +"xJz" = ( +/turf/closed/indestructible/fakedoor{ + desc = "Why would you want to go back, you just got here!"; + name = "Cent Com Prison Shuttle Dock" + }, +/area/centcom/interlink) +"xKI" = ( +/obj/effect/turf_decal/trimline/dark_green/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"xKN" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"xLF" = ( +/obj/machinery/door/poddoor/shutters/window/preopen{ + id = "cc_arrivals" + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"xLS" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"xOm" = ( +/obj/structure/chair/sofa/bench/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"xOQ" = ( +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/centcom/interlink) +"xPx" = ( +/obj/structure/chair/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/centcom/interlink/dorm_rooms) +"xPD" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/landmark/latejoin, +/turf/open/floor/mineral/titanium, +/area/centcom/interlink) +"xPL" = ( +/obj/structure/closet{ + name = "Cryogenics Sleepware" + }, +/obj/item/clothing/under/misc/pj/red, +/obj/item/clothing/under/misc/pj/red, +/obj/item/clothing/head/costume/nightcap/red, +/obj/item/clothing/head/costume/nightcap/red, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"xPZ" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/indestructible{ + id = "arr_hall_lookout"; + name = "Interlink Access Shutters" + }, +/turf/open/floor/plating, +/area/centcom/interlink) +"xQK" = ( +/obj/structure/bed/double, +/obj/item/bedsheet/dorms_double, +/obj/structure/sign/painting/library_secure{ + pixel_y = -32 + }, +/turf/open/indestructible/carpet, +/area/centcom/holding/cafe) +"xRx" = ( +/obj/item/stack/sheet/mineral/wood/fifty, +/turf/open/floor/stone, +/area/centcom/holding/cafe) +"xSr" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"xTC" = ( +/obj/structure/closet/secure_closet/freezer/empty{ + name = "produce freezer" + }, +/obj/item/food/grown/bell_pepper, +/obj/item/food/grown/bell_pepper, +/obj/item/food/grown/carrot, +/obj/item/food/grown/carrot, +/obj/item/food/grown/chili, +/obj/item/food/grown/chili, +/obj/item/food/grown/citrus/lemon, +/obj/item/food/grown/citrus/lemon, +/obj/item/food/grown/citrus/lime, +/obj/item/food/grown/citrus/lime, +/obj/item/food/grown/corn, +/obj/item/food/grown/corn, +/obj/item/food/grown/eggplant, +/obj/item/food/grown/eggplant, +/obj/item/food/grown/garlic, +/obj/item/food/grown/garlic, +/obj/item/food/grown/onion, +/obj/item/food/grown/onion, +/obj/item/food/grown/parsnip, +/obj/item/food/grown/parsnip, +/obj/item/food/grown/watermelon, +/obj/item/food/grown/watermelon, +/obj/item/food/grown/whitebeet, +/obj/item/food/grown/whitebeet, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/freezer, +/area/centcom/interlink) +"xTZ" = ( +/obj/machinery/vending/wardrobe/coroner_wardrobe/ghost_cafe, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"xVv" = ( +/obj/machinery/button/door/directional/west{ + id = "interlink_hall2"; + name = "Arrivals Hall Shutter Control"; + pixel_y = -8; + req_access = list("security") + }, +/obj/machinery/light/cold/directional/west, +/obj/machinery/button/door/directional/west{ + id = "arriv_hall"; + name = "Arrivals Access Shutter Control"; + pixel_y = 8; + req_access = list("security") + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"xVV" = ( +/obj/machinery/recharge_station, +/obj/machinery/button/door/directional/south{ + id = "stall3"; + name = "Door Lock"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"xVY" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/chair/sofa/corp/right{ + dir = 1 + }, +/turf/open/floor/carpet/purple, +/area/centcom/holding/cafe) +"xWg" = ( +/obj/item/toy/plush/bubbleplush, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"xXc" = ( +/obj/effect/light_emitter/interlink, +/obj/structure/fence, +/turf/open/floor/grass, +/area/centcom/interlink) +"xXU" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding/cafe) +"xYp" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Interlink Cafe" + }, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/duct, +/turf/open/floor/wood/tile, +/area/centcom/interlink) +"xZN" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/wood/parquet, +/area/centcom/interlink) +"ybu" = ( +/obj/structure/flora/rock/pile/jungle/style_3, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"ybB" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/trimline/dark_green/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/interlink) +"ybC" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/iron/smooth, +/area/centcom/interlink) +"ybQ" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/sepia, +/area/centcom/holding/cafe) +"ybS" = ( +/obj/structure/flora/grass/jungle/a/style_2, +/obj/structure/flora/bush/flowers_pp, +/turf/open/misc/grass/planet, +/area/centcom/holding/cafepark) +"ybX" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/effect/light_emitter/interlink, +/turf/open/floor/grass, +/area/centcom/interlink) +"ycB" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/bed, +/obj/item/bedsheet/dorms, +/turf/open/floor/iron, +/area/centcom/holding/cafe) +"ycD" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/clothing/suit/jacket/straight_jacket, +/obj/machinery/button/door{ + id = "CCSurgery"; + name = "Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4; + pixel_x = 25 + }, +/turf/open/floor/iron/white, +/area/centcom/holding/cafe) +"ycL" = ( +/obj/structure/table/optable, +/obj/item/surgery_tray/full, +/obj/effect/turf_decal/bot_blue, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"yde" = ( +/obj/structure/flora/bush/jungle/a, +/obj/effect/light_emitter/interlink, +/turf/open/misc/grass/planet{ + smoothing_flags = 0 + }, +/area/centcom/holding/cafepark) +"ydt" = ( +/obj/effect/landmark/latejoin, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"ydM" = ( +/obj/structure/fluff/beach_umbrella/engine, +/turf/open/misc/beach/sand, +/area/centcom/holding/cafepark) +"yea" = ( +/obj/structure/table/wood, +/obj/machinery/light/directional/east, +/turf/open/floor/wood, +/area/centcom/holding/cafedorms) +"yet" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw, +/obj/effect/turf_decal/siding/white/corner, +/turf/open/floor/iron/dark, +/area/centcom/interlink) +"yev" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/carpet/red, +/area/centcom/holding/cafedorms) +"yfm" = ( +/obj/machinery/sleeper{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"yfX" = ( +/obj/effect/landmark/latejoin, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white/corner{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/centcom/interlink) +"ygL" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/freezer, +/area/centcom/interlink) +"yjC" = ( +/obj/effect/turf_decal/weather/snow/corner, +/obj/structure/rack/wooden, +/obj/item/storage/box/matches{ + pixel_y = -8; + pixel_x = -3 + }, +/obj/item/towel{ + pixel_y = 9; + pixel_x = 6 + }, +/obj/item/towel{ + pixel_y = 9; + pixel_x = 1 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) +"yjX" = ( +/obj/structure/closet, +/obj/item/clothing/under/rank/centcom/officer/replica{ + desc = "A cheaper, unarmored CentCom turtleneck meant for everyday wear. Somewhat of a status symbol."; + name = "\improper Civilian CentCom turtleneck" + }, +/obj/item/clothing/under/rank/centcom/officer_skirt/replica{ + desc = "A cheaper, unarmored CentCom skirtleneck meant for everyday wear. Somewhat of a status symbol."; + name = "\improper Civilian CentCom skirtleneck" + }, +/obj/item/bedsheet/centcom, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/item/toner/extreme, +/turf/open/floor/iron, +/area/centcom/interlink) +"ykt" = ( +/obj/machinery/duct, +/obj/effect/turf_decal/trimline/dark_green/filled/warning, +/turf/open/floor/iron, +/area/centcom/interlink) +"yln" = ( +/obj/machinery/door/airlock{ + id_tag = "room4"; + name = "Cabin" + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/interlink) + +(1,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(2,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(3,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(4,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(5,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(6,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(7,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(8,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(9,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(10,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(11,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(12,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(13,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(14,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(15,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(16,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(17,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(18,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(19,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(20,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(21,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 +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(22,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 +tvw +vLx +vLx +vLx +vLx +vLx +vLx +vLx +vLx +vLx +vLx +vLx +vLx +vLx +vLx +vLx +vLx +vLx +vLx +vLx +vLx +tvw +tvw +tvw +tvw +tvw +tvw +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(23,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 +tvw +vLx +vat +vat +vat +vat +vat +dsH +hbE +krJ +vat +vat +vat +vat +pmI +vat +vat +vat +vat +fHV +vat +lPi +qLQ +pmJ +kvD +ttx +gsO +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +tvw +xJz +tvw +tvw +tvw +tvw +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(24,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 +tvw +vLx +vat +vat +vat +fHV +cNw +vat +hbE +vat +fHV +vat +vat +wwD +wwD +vat +vat +pPO +dsH +vat +cNw +lPi +qLQ +aXG +aXG +aXG +aXG +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +kmD +jys +uAm +fqg +dkD +hvQ +rMy +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(25,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 +tvw +vLx +cNw +vat +xmn +vat +vat +vat +hbE +iuK +iuK +vat +dVb +iPs +iPs +dfL +vat +vat +vat +eSk +tvw +tvw +qLQ +aXG +xyz +nYB +ePw +tvw +kvF +dmb +tvw +iWY +dyI +bKf +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +khz +eKr +fqg +aDg +hvQ +eYD +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(26,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 +tvw +vLx +vat +vat +vat +vat +iov +vat +hbE +dsW +iuK +vat +dVb +iPs +iPs +dfL +twE +vat +vat +wwD +lPi +tYf +cKZ +oDs +ePw +blq +pMN +tvw +kvF +hIH +crl +wyn +cWL +oTx +tvw +qkZ +tHh +pHc +pHc +pHc +tHh +uWG +tvw +uKW +eKr +ybC +tvw +aDg +aDg +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(27,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 +tvw +vLx +vat +vat +vat +vat +vat +eSk +hbE +iuK +iuK +cNw +dVb +iPs +iPs +dfL +vat +vat +nHK +uGt +lPi +abZ +rDL +hvQ +pMN +wfh +pMN +tvw +kvF +hIH +tvw +tvw +tvw +tvw +tvw +bsT +pnH +vRE +vRE +vRE +cra +spb +tvw +uKW +eKr +fqg +aDg +hvQ +eYD +tvw +aaa +aaa +aaa +aaa +aaa +tvw +tvw +tvw +tvw +tvw +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(28,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 +tvw +vLx +vat +vat +vat +vat +vat +vat +hbE +eSk +vat +vat +dVb +iPs +iPs +cmV +oyI +wwD +pYF +xzt +lPi +egW +rDL +hvQ +pMN +wfh +pMN +tvw +aWb +hIH +svm +eGf +tvw +cTQ +kqK +qbp +sci +qGW +wsu +hyP +bxz +hBk +tvw +sqZ +eKr +fqg +kxy +hvQ +jKj +tvw +aaa +aaa +aaa +aaa +aaa +tvw +axP +izj +bqc +pOS +tvw +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(29,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 +tvw +vLx +vat +fHV +vat +vat +vat +vat +hbE +vat +vat +vat +dVb +iPs +iPs +iPs +iPs +iPs +iPs +xzt +lPi +ekE +wOQ +hvQ +hvQ +hvQ +bck +tvw +aWb +dkE +tvw +tvw +hjK +aXG +aXG +ubn +sci +qGW +hSC +hyP +bxz +vFW +tvw +xOQ +pNF +ybC +tvw +aDg +aDg +tvw +tvw +tvw +tvw +tvw +tvw +tvw +kHP +iPU +iPU +iPU +wXe +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(30,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 +tvw +vLx +vat +vat +krJ +vat +vat +vat +hbE +vat +sGU +vat +dVb +iPs +iPs +iPs +iPs +iPs +iPs +xzt +lPi +jaf +hvQ +hvQ +aTS +hvQ +hvQ +tvw +aWb +hIH +btJ +pSx +tvw +iEd +aXG +ubn +sci +qGW +hWy +hyP +bxz +jvR +tvw +fqg +fqg +fqg +cYb +xSr +uGU +tvw +aWb +xLS +gBR +mSs +oJP +tvw +dTl +iPU +ckD +iPU +ogI +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(31,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 +tvw +tvw +tvw +vLx +vat +iov +vat +vat +cNw +fHV +hbE +vat +vat +vat +dVb +iPs +iPs +qot +nKJ +nKJ +jtf +xzt +lPi +eXg +hvQ +deD +tvw +hvQ +dPd +tvw +kdy +hIH +tvw +tvw +tvw +aXG +aXG +ubn +sci +qGW +lFU +hyP +bxz +nOf +tvw +rPJ +fqg +fqg +cYb +xSr +jUm +tvw +bQZ +jhu +tvw +jqm +lla +tvw +sci +iPU +iPU +iPU +wXe +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(32,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 +tvw +vLx +vLx +vLx +vat +vat +vat +vat +vat +vat +tUk +bjq +vat +vat +dVb +iPs +iPs +dfL +fHV +vat +dVb +fSs +lPi +hvQ +hvQ +hvQ +kfb +lvR +wHJ +tvw +hZk +hIH +czF +xVV +tvw +onf +xct +slW +sci +qGW +hLA +hyP +bxz +hBk +tvw +aGq +mvL +bTR +wzZ +xSr +qQl +tvw +wuH +hIH +tvw +tvw +tvw +tvw +hAk +tvw +tvw +tvw +tvw +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(33,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 +tvw +vLx +vat +vat +vat +vat +vat +eSk +vat +vat +vat +hbE +vat +vat +rng +iPs +iPs +oxb +krJ +vat +vat +pbP +lPi +hvQ +hvQ +hvQ +hvQ +dGD +nJp +tvw +kdy +dkE +tvw +tvw +tvw +tvw +tvw +bsT +dXJ +iVW +iVW +iVW +ooG +spb +tvw +ilq +jjQ +xSr +qbw +xSr +xSr +tvw +xdQ +hIH +tvw +ycL +wGV +tvw +aQY +eaT +eaT +sDJ +aQY +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(34,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +tvw +tvw +vLx +vat +vat +sGU +vat +fHV +vat +vat +eSk +vat +hbE +vat +vat +dVb +iPs +iPs +cmV +wwD +wwD +wwD +wwD +tvw +kQs +tvw +tvw +tvw +vzH +ykt +dCa +hIH +aYX +aWb +bRc +tvw +hlh +tvw +npe +mBj +ndc +ndc +ndc +fcW +ckG +tvw +vcB +xSr +xSr +bCB +xSr +xSr +tvw +mju +rNI +tvw +dtL +xaT +tvw +qEu +aQY +aQY +aQY +aQY +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(35,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vLx +vLx +vat +vat +vat +vat +vat +vat +vat +vat +vat +hbE +vat +pPO +dVb +iPs +iPs +iPs +iPs +iPs +iPs +iPs +iPs +iPs +iPs +iPs +fOv +dGD +uPd +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +mcO +dwx +sZV +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +pFr +tvw +aDg +mbx +tvw +sSX +tvw +tvw +bxj +sDJ +jHv +iGO +vFj +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(36,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vat +vat +eSk +vat +vat +vat +vat +vat +vat +cNw +vat +hbE +vat +vat +dVb +iPs +iPs +iPs +iPs +iPs +iPs +iPs +iPs +iPs +iPs +iPs +rDL +dGD +wck +tvw +uis +uis +tvw +aMM +aQY +kiU +mpl +nHC +tvw +aDg +lGc +aDg +tvw +pVh +mpl +kiU +aQY +kZQ +tvw +vdv +cuM +dFj +eSC +sTH +nZP +pHi +kzD +tvw +aQY +aQY +aQY +aQY +dDp +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(37,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vat +vat +iov +vat +vat +vat +vat +tvw +aDg +aDg +aDg +tvw +vat +vat +eSk +nKJ +nKJ +nKJ +nKJ +tvw +tvw +tvw +tvw +nFH +tvw +tvw +tvw +vzH +sic +tvw +lHZ +fMM +tvw +wCN +aQY +aQY +ogq +mdD +tdP +hjy +aXG +iQP +aeG +mdD +mdT +aQY +aQY +moe +tvw +aXG +cuM +tvw +qsQ +hIH +aWb +aWb +yfm +tvw +fxE +aQY +aQY +aQY +rAe +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(38,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +tvw +tvw +vLx +vat +dsH +vat +vat +vat +vat +vat +tvw +sow +pdC +tCi +tvw +tvw +tvw +vat +vat +cNw +pPO +eSk +tvw +qrv +mHF +qDc +xgz +jzh +sIH +lPi +iMY +wck +tvw +sNg +fMM +tvw +ijv +aQY +vgs +cMh +biF +tdP +gjd +aXG +xKI +aeG +oSp +cMs +cdj +aQY +aCK +tvw +dLq +cuM +tvw +mTS +hIH +aWb +aWb +yfm +tvw +rQF +vRE +vRE +vRE +jHB +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(39,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vLx +vLx +vat +vat +vat +vat +fHV +cNw +vat +tvw +nqQ +dRE +ydt +bFN +cYT +aDg +vat +vat +vat +vat +vat +tvw +noA +hvQ +gKe +xgz +pST +oQW +lPi +iMY +wck +tvw +fzV +fMM +tvw +yjX +igp +igp +mnj +ujZ +tdP +gjd +aXG +xKI +aeG +ujZ +mnj +igp +igp +beg +tvw +aXG +cuM +tvw +sJJ +rTv +oDs +oDs +lSo +tvw +ikG +iqO +hvQ +cKf +bae +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(40,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vat +jgT +xXc +fPn +xXc +xXc +xXc +xXc +xXc +tvw +bEI +aWb +aWb +aWb +xPL +aDg +vat +vat +tvw +tvw +tvw +tvw +ezk +hvQ +mfN +xgz +eqS +eqS +xYp +ioa +ykt +mVc +fMM +fMM +tvw +cYc +cFK +qIY +qIY +qIY +lgF +gjd +aXG +xKI +uqJ +qIY +qIY +qIY +cFK +fiC +tvw +aXG +cuM +tvw +esP +tZU +hvQ +hvQ +cLD +tvw +ikG +iqO +hvQ +cKf +bae +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(41,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vat +vat +tQP +vat +vat +vat +vat +eSk +vat +aDg +oKM +aWb +aWb +aWb +qFG +tvw +tvw +tvw +tvw +jsY +wAE +tvw +sWb +rOf +blI +lVL +olE +olE +wtI +dGD +nJp +tvw +tvw +tvw +tvw +tvw +tvw +rRv +tdP +tdP +tvw +foI +aXG +kwp +tvw +aeG +aeG +nOb +tvw +tvw +gfW +aXG +cuM +gfW +tvw +eLt +jUK +aDg +aDg +tvw +lPi +lPi +sOk +lPi +lPi +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(42,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +fHV +vat +vat +vat +vat +vat +vat +bnU +vat +aDg +lxl +saN +wBc +wBc +ioz +yfX +bBX +aDg +enb +aXG +hmE +tvw +pxW +hPK +hPK +cRs +pST +sIH +lPi +iMY +cGt +pHe +saE +saE +fCt +saE +saE +saE +saE +saE +fCt +eLQ +aXG +hrF +fCt +saE +saE +saE +buc +pDd +aXG +aXG +cuM +gAH +wME +iLl +aXG +aXG +aXG +jGh +aXG +moG +eFV +moG +aXG +hvy +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(43,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vat +vat +vat +vat +vat +vat +vat +vat +vat +aDg +cyc +sjP +hvQ +hvQ +hvQ +stk +dPq +aDg +dPx +aXG +hmE +tvw +pST +iel +olE +olE +pST +oQW +lPi +iMY +nJp +xPZ +aXG +bWy +aXG +aXG +aXG +aXG +aXG +jXO +aXG +aXG +aXG +aXG +aXG +jXO +aXG +pXn +aXG +nAp +aXG +aXG +cuM +faN +qAW +ljS +bOl +rTM +jeT +jeT +bOl +cwA +xsg +cwA +pKV +hvy +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(44,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vat +vat +vat +vat +aQR +aSY +aSY +aSY +aSY +tvw +tvw +tvw +lPi +hAL +lPi +tvw +tvw +tvw +pNJ +aXG +hmE +tvw +tvw +lPi +vui +iwK +lPi +lPi +jHw +iMY +nJp +rYy +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +aDg +aDg +cOV +aDg +aDg +tvw +tvw +tvw +tvw +dFF +niJ +aXG +yet +dAC +hvQ +hvQ +jXq +sRV +hvQ +hvQ +sJa +gKP +eFV +aXG +aXG +hvy +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(45,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vat +cNw +vat +vat +adw +aqG +aqG +aqG +aqG +aDg +aXG +pmJ +rDL +hvQ +hvQ +uCW +tvw +bYH +tlu +pcH +pcH +lht +lPi +pgL +oIK +oIK +kOZ +kOZ +wFF +oOC +pSt +cWG +exf +mMu +cqC +aYp +jxw +aXG +lAx +uji +tCJ +hvQ +hvQ +hvQ +tin +bVH +aTE +aXG +pGZ +pmJ +aXG +ecW +sBJ +vLh +vLh +vLh +qwk +egv +vLh +vLh +vLh +nim +czd +bLN +kpC +hvy +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(46,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vat +vat +vat +vat +adw +aqG +aqG +aqG +aqG +aVs +rMF +hES +jqo +axB +afe +hvQ +tvw +cCZ +iPU +iPU +iPU +nRP +lPi +aYK +eYX +mqE +hvQ +hvQ +hvQ +hvQ +hvQ +hvQ +hvQ +hvQ +uQt +aXG +jxw +aXG +lAx +uji +tCJ +hvQ +hvQ +hvQ +tin +bVH +aTE +aXG +pGZ +aXG +aXG +mzf +lHT +hvQ +hvQ +hvQ +hWX +ibU +hvQ +hvQ +hvQ +hvQ +eVe +aXG +aXG +hvy +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(47,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vat +vat +vat +dsH +adw +aqG +aqG +aqG +aqG +aDg +cal +aXG +mac +bNh +tEq +hvQ +tvw +nKt +juT +iPU +iPU +eAc +tvw +lPi +lPi +aUh +hvQ +hvQ +hvQ +hvQ +hvQ +hvQ +hvQ +hvQ +uQt +qey +qbk +wJj +dDo +lOD +tvw +aDg +bJb +aDg +tvw +lOD +gUi +qey +kmV +wJj +aXG +mzf +lHT +hvQ +hvQ +kOk +hWX +ibU +kOk +hvQ +hvQ +hvQ +eVe +aXG +aXG +hvy +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(48,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vat +vat +fHV +vat +adw +aqG +aqG +aqG +aqG +aDg +cal +aXG +rDL +hvQ +hvQ +hvQ +tvw +nKt +thr +iPU +iPU +lVL +pHG +wft +lPi +crf +anv +ybB +mqE +hvQ +hvQ +hvQ +hvQ +hvQ +uQt +qey +onb +wJj +rDL +tvw +xVv +xSr +xSr +xSr +oYa +xEn +aOl +qey +eRc +wJj +aXG +cBq +iJX +pdW +pdW +pdW +qJW +tdm +pdW +pdW +pdW +fWc +wBI +aXG +aXG +hvy +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(49,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vat +vat +vat +vat +adw +aqG +aqG +aqG +aqG +tvw +rma +aXG +vWy +axB +irn +hvQ +tvw +kJO +juT +iPU +iPU +lVL +uJA +oQW +tvw +lPi +lPi +tvw +iMY +hvQ +hvQ +aBm +axB +uny +pBj +aXG +jxw +aXG +rDL +aDg +pMm +xSr +xSr +kqs +nOa +aDg +aOl +aXG +pGZ +aXG +aXG +ecW +qTa +iTf +iTf +iTf +xOm +qnB +iTf +iTf +iTf +qjh +faI +aXG +aXG +hvy +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(50,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vat +bnU +vat +sGU +adw +aqG +aqG +aqG +aqG +tvw +ssn +aXG +qji +bNh +tEq +hvQ +tvw +icB +iPU +iPU +iPU +lVL +olE +olE +xKN +olE +olE +bwP +dGD +hvQ +hvQ +hvQ +hvQ +hvQ +uQt +aXG +jxw +aXG +rDL +aDg +fdo +xSr +xSr +wXm +lic +aDg +aOl +aXG +pGZ +aXG +aXG +mzf +lHT +hvQ +hvQ +kOk +hWX +ibU +kOk +hvQ +hvQ +hvQ +eVe +aXG +aXG +hvy +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(51,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +eSk +vat +vat +vat +adw +aqG +aqG +aqG +aqG +tvw +loR +aXG +rDL +hvQ +hvQ +hvQ +tvw +lzk +hPK +hPK +hPK +cRs +olE +olE +fYY +olE +olE +wtI +dGD +hvQ +hvQ +bTH +fsl +bNh +hzz +aXG +jxw +aXG +rDL +aDg +rhV +xSr +xSr +kqs +eJP +aDg +aOl +aXG +pGZ +aXG +aXG +mzf +lHT +wmW +wmW +wmW +hHg +ouJ +wmW +wmW +wmW +wmW +bGH +lQq +ebz +hvy +klI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(52,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vat +vat +vat +vat +adw +aqG +aqG +aqG +aqG +aDg +cal +aXG +vWy +axB +afe +hvQ +tvw +tvw +lPi +lPi +vui +fua +lPi +lPi +tvw +lPi +lPi +tvw +gyK +hvQ +hvQ +hvQ +hvQ +hvQ +uQt +qey +qbk +wJj +rDL +tvw +jnu +xSr +xSr +xSr +ucr +pTO +aOl +qey +kmV +wJj +aXG +cBq +rTx +hvQ +hvQ +hvQ +hWX +vUJ +hvQ +hvQ +hvQ +oJo +wBI +aXG +aXG +hvy +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(53,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vat +vat +vat +vat +adw +aqG +aqG +aqG +aqG +aDg +cal +aXG +mac +uyr +adU +hvQ +hvQ +tGG +lvR +kOZ +oIK +oIK +kOZ +kOZ +kOZ +kOZ +wHJ +tGG +dGD +hvQ +hvQ +hvQ +hvQ +hvQ +uQt +qey +onb +wJj +dDo +lOD +tvw +aDg +tsi +aDg +tvw +lOD +gUi +qey +eRc +wJj +aXG +rjf +brL +jRW +wmW +wmW +vxx +uAi +wmW +wmW +bDa +vca +oab +lQq +ebz +hvy +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(54,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vat +dsH +vat +vat +adw +aqG +aqG +aqG +aqG +aVs +rMF +hES +rDL +hvQ +hvQ +hvQ +hvQ +tGG +dGD +hvQ +hvQ +hvQ +hvQ +hvQ +hvQ +hvQ +cGt +tGG +dGD +hvQ +hvQ +hvQ +hvQ +hvQ +uQt +aXG +jxw +aXG +lAx +uji +tCJ +hvQ +hvQ +hvQ +tin +bVH +aTE +aXG +pGZ +aXG +aXG +rjf +aXG +rFa +cIk +cIk +hVf +rFa +cIk +cIk +hVf +aXG +rjf +aXG +aXG +hvy +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(55,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vat +vat +xpy +vat +adw +aqG +aqG +aqG +aqG +aDg +aXG +jXO +rDL +hvQ +hvQ +hvQ +aTS +tGG +dGD +lrp +eYX +tWA +eYX +eYX +eYX +eYX +bod +tGG +mjK +mqE +lrp +jsN +eYX +eYX +iWF +jXO +jxw +aXG +lAx +uji +tCJ +hvQ +hvQ +hvQ +tin +bVH +aTE +aXG +pGZ +aXG +aXG +rjf +sKg +sKg +sKg +rMY +sKg +aXG +qhn +aXG +aXG +aXG +rjf +aXG +aXG +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(56,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vat +bnU +vat +vat +omh +iYB +iYB +pMs +iYB +tvw +tvw +tvw +lPi +lPi +lPi +lPi +tvw +hoS +iMY +nJp +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +jHw +iMY +nJp +rYy +tvw +dHP +rGI +tvw +tvw +tvw +tvw +tvw +tvw +tvw +wyL +tvw +tvw +tvw +tvw +tvw +tvw +lPi +lPi +drE +qPw +lPi +lPi +wyF +vGe +ufv +wyF +lPi +lPi +qyu +vLY +lPi +lPi +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(57,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vat +vat +vat +vat +dsH +vat +vat +vat +bnU +pFM +vat +eSk +vat +dsH +vat +vat +cNw +tvw +iMY +nJp +tvw +iVr +rbT +dgV +wXo +nsT +bsj +nYF +tvw +vzH +nJp +aDg +fVr +iPs +iPs +rDg +vat +vat +fJQ +hbE +fJQ +dVb +iPs +bWw +tvw +uSQ +kWA +aQx +gjK +oaD +hcR +hcR +hcR +csC +uDr +tvw +rjf +aXG +tvw +nbv +oOM +qyu +qyu +slz +pXu +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(58,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vat +fHV +vat +vat +vat +vat +eSk +vat +vat +rah +vat +vat +vat +eSk +vat +iov +vat +lPi +iMY +nJp +tvw +tfe +wlA +fEg +lcR +pry +bsj +chZ +pMg +dGD +nJp +aDg +mDR +iPs +iPs +usr +wpz +vat +tIN +hbE +sZl +xtQ +iPs +dfL +tvw +vpT +aXG +iax +gjK +hkQ +hcR +hcR +hcR +nqW +xZN +tvw +rjf +gAj +tvw +joE +esD +qyu +qyu +esD +bUg +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(59,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vat +vat +vat +vat +vat +vat +vat +cNw +vat +pFM +vat +vat +vat +vat +vat +vat +vat +lPi +iMY +nJp +tvw +tvw +tvw +lcR +lcR +hVC +bsj +osk +tvw +iMY +nJp +aDg +fVr +iPs +iPs +kdw +vat +vat +vat +hbE +vat +dVb +tpU +dfL +tvw +kTe +rmZ +iax +gjK +hkQ +wkG +nqW +ocT +hcR +hcR +xIR +rjf +aXG +dXN +qyu +qyu +vPe +vPe +qyu +qyu +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(60,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vat +vat +fIS +vat +iov +vat +pod +vat +vat +pFM +vat +vat +vat +cNw +vat +vat +xmn +lPi +iMY +pSt +kOZ +sga +tvw +cWF +bsj +bsj +bsj +bsj +tvw +iMY +nJp +tvw +jSW +iPs +iPs +rDg +vat +vat +rVQ +hbE +wpz +kZF +tpU +sgD +tvw +mxj +aXG +iax +gjK +hkQ +wkG +nqW +ocT +hcR +hcR +eTo +rjf +aXG +qyu +qyu +qyu +esD +esD +qyu +qyu +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(61,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vat +eSk +vat +vat +vat +vat +vat +vat +vat +pFM +vat +vat +vat +fHV +vat +vat +vat +tvw +iMY +lrp +eYX +aPe +tvw +aFe +xPx +bsj +bsj +bUO +tvw +ukp +nJp +tvw +fVr +iPs +iPs +rDg +vat +fJQ +vat +hbE +vat +qRX +tpU +dxP +tvw +gap +wag +fTz +gjK +hkQ +hcR +hcR +hcR +nqW +wHm +tvw +wod +aXG +tvw +qyu +qyu +kDO +kDO +qyu +qyu +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(62,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +tvw +tvw +tvw +tvw +tvw +lPi +lPi +lPi +tvw +tvw +tvw +tvw +tvw +lPi +lPi +lPi +lPi +tvw +tvw +vzH +nJp +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +iMY +nJp +aDg +kLZ +iPs +iPs +rDg +mnS +vat +vat +hbE +vat +dVb +tpU +heB +tvw +tvw +iUg +aXG +std +phc +nQF +nQF +nQF +bul +gsc +tvw +rjf +aXG +tvw +cBR +hNU +qyu +qyu +qyu +qyu +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(63,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 +fov +hES +aXG +aXG +aXG +pmJ +aXG +aXG +aXG +pmJ +aXG +aXG +aXG +aXG +aXG +pPI +dGD +nJp +tvw +iVr +rbT +dgV +wXo +nsT +bsj +nYF +tvw +iMY +nJp +aDg +fVr +iPs +iPs +wqL +vat +fJQ +vat +hbE +rVQ +dVb +tpU +dfL +vat +tvw +tvw +tvw +tvw +tvw +xyz +wAE +enb +tvw +tvw +tvw +hsr +vRf +tvw +vEI +iMl +vPe +vPe +vPe +nbB +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(64,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 +tvw +mtv +eOx +pZh +pZh +jtl +aXG +aXG +xyz +pHQ +pZh +pZh +eOx +jtl +aXG +cVm +dGD +nJp +tvw +tfe +wlA +fEg +lcR +pry +bsj +chZ +dVh +dGD +nJp +aDg +fVr +iPs +iPs +usr +vat +vat +rSa +hbE +qWZ +dVb +tpU +dxP +rVQ +hbE +vat +wpz +vat +tvw +lPi +lPi +lPi +tvw +vat +dVb +iPs +iPs +fHl +tvw +uFG +uFG +uFG +uFG +kNd +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(65,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 +tvw +bjh +cAI +mDs +xqq +tUz +uYo +uYo +uYo +eNn +xqq +uET +cAI +phk +aXG +pPI +dGD +nJp +tvw +tvw +tvw +lcR +lcR +hVC +bsj +uDT +tvw +iMY +nJp +tvw +fVr +iPs +iPs +rDg +vat +vat +vat +hbE +wpz +dVb +tpU +dfL +fJQ +hbE +vat +syc +vat +vat +vat +vat +vat +vat +wpz +dVb +iPs +iPs +dfL +tvw +khC +qyu +qyu +qyu +qyu +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(66,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 +tvw +aXG +aXG +eHo +hvQ +hvQ +hvQ +hvQ +hvQ +hvQ +hvQ +rSK +aXG +aXG +jXO +cVm +dGD +pSt +kOZ +ubH +tvw +cWF +bsj +bsj +bsj +bsj +tvw +iMY +nJp +tvw +fVr +iPs +iPs +fFy +che +vqy +wpz +hbE +vat +gXw +tpU +sgD +vat +hbE +vat +vat +iuK +iuK +vat +vat +vat +vat +dky +dVb +iPs +iPs +dfL +tvw +qHJ +rbo +wIg +qyu +qyu +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(67,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 +tvw +aDg +uTg +xLF +nzO +tvw +tvw +mjo +tvw +tvw +nzO +hTh +alx +aDg +tvw +tvw +ukp +lrp +eYX +jTQ +tvw +aFe +xPx +bsj +bsj +bUO +tvw +iMY +nJp +aDg +fVr +iPs +iPs +iPs +iPs +iPs +rDg +hbE +vat +hpR +tpU +dfL +vat +hbE +vat +iXq +iuK +iuK +rSa +vat +vat +vat +rVQ +fIY +iPs +iPs +dfL +lPi +qyu +qyu +uIp +iUm +qvk +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(68,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 +tvw +aXG +bdI +eHo +hvQ +tvw +wZW +kWH +ism +tvw +hvQ +rSK +cal +aXG +tvw +oAn +oOC +nJp +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +iMY +nJp +aDg +fVr +iPs +iPs +iPs +iPs +mLa +vat +hbE +vat +fIY +tpU +dfL +vat +hbE +vat +vat +iuK +iuK +vat +vat +vat +fJQ +vat +dVb +iPs +iPs +sgD +lPi +cBR +rKs +tvw +tvw +tvw +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(69,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 +tvw +dLq +lsV +tNw +hvQ +aDg +jGH +kWH +rrA +oln +hvQ +shn +dHD +aXG +tvw +fGC +hvQ +nJp +tvw +iVr +rbT +dgV +wXo +nsT +bsj +nYF +tvw +iMY +nJp +aDg +rVQ +iem +tdp +iem +uaM +iPs +rDg +hbE +vat +uKH +tpU +sgD +fJQ +hbE +vat +fJQ +rVQ +vat +cfu +cfu +cfu +xzh +cfu +dVb +iPs +iPs +dfL +tvw +pFe +tvw +tvw +soW +oed +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(70,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 +tvw +aXG +alO +evs +hvQ +lRF +nTO +kWH +pnW +rKT +hvQ +hEK +wYH +aXG +tvw +fGC +hvQ +nJp +tvw +tfe +wlA +fEg +lcR +pry +bsj +chZ +wdB +dGD +nJp +tvw +vLx +vLx +vLx +vLx +iPs +qot +vat +hbE +vat +dVb +iPs +dfL +rSa +hbE +rSa +vat +vat +vat +pFt +eRB +cfu +cfu +cfu +xtQ +iPs +iPs +dfL +tvw +mSs +mSs +mSs +mSs +uEn +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(71,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 +tvw +aXG +aXG +lSJ +hvQ +aDg +lba +kKo +uhO +oln +hvQ +beb +aXG +aXG +tvw +vsB +hvQ +nJp +tvw +tvw +tvw +lcR +lcR +hVC +bsj +mUC +tvw +iMY +nJp +tvw +vLx +unt +tpU +vLx +dkR +vqy +rVQ +hbE +fJQ +xtQ +iPs +dfL +vat +hbE +vat +vat +vat +vat +qub +qub +cfu +knx +dbZ +pYF +iPs +iPs +oCU +tvw +hnz +mSs +mSs +mSs +fHA +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(72,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 +ckV +hES +aXG +eHo +amv +tvw +aDg +aDg +aDg +tvw +amv +rSK +aXG +aXG +tvw +iMY +hvQ +pSt +kOZ +sga +tvw +cWF +bsj +bsj +bsj +bsj +tvw +iMY +nJp +tvw +vLx +tpU +tpU +wji +tpU +tpU +vLx +tvw +tvw +tvw +eAA +tvw +tvw +tvw +vat +vat +vat +dVb +tpU +tpU +iFY +cHY +tpU +iPs +iPs +iPs +dfL +tvw +sYC +xTC +kOf +mSs +ygL +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(73,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 +tvw +aXG +aXG +inr +nrl +rYR +rYR +rYR +rYR +rYR +ojv +liU +aXG +gAj +tvw +iIb +eYX +eYX +eYX +aPe +tvw +aFe +xPx +bsj +bsj +bUO +tvw +ukp +nJp +tvw +vLx +tpU +tpU +tpU +tpU +tpU +vLx +tvw +dBJ +aqG +aqG +aqG +aqG +tvw +vat +rVQ +fJQ +vat +suL +aKa +tpU +tpU +tpU +iPs +iPs +iPs +dfL +tvw +tvw +tvw +tvw +tvw +tvw +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(74,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 +tvw +aXG +aXG +aXG +aXG +qdd +aXG +nJQ +aXG +qdd +aXG +aXG +aXG +aXG +tvw +xyz +dAM +dmR +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +vzH +nJp +tvw +vLx +tpU +tpU +tpU +tpU +unt +vLx +tvw +fmq +aeO +aqG +aqG +aqG +tvw +vat +vat +vat +vat +vat +vat +nKJ +nKJ +nKJ +jtf +iPs +nQm +fJQ +vLx +vLx +vLx +vLx +vLx +vLx +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(75,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +tvw +tvw +tvw +aXG +aXG +aXG +aXG +aXG +aXG +aXG +aXG +aXG +aXG +aXG +aXG +aXG +tvw +tvw +tvw +tvw +tvw +iVr +rbT +dgV +wXo +nsT +bsj +nYF +tvw +iMY +nJp +tvw +vLx +wji +tpU +tpU +tpU +tpU +vLx +tvw +fmq +aeO +aqG +aqG +aqG +tvw +vat +vat +vat +lTP +vat +vat +vat +vat +rVQ +vat +ybX +iPs +wiT +tpU +wji +tpU +tpU +tpU +vLx +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(76,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +rVP +aJO +aJO +aXm +aXm +aRk +awC +aAe +aRk +aXm +aXm +aXm +aRk +awC +aAe +aRk +aXm +asP +aJO +aJO +aYn +tvw +tfe +wlA +fEg +lcR +pry +bsj +chZ +yln +dGD +nJp +tvw +vLx +vLx +tpU +wji +tpU +tpU +vLx +tvw +aqG +aqG +aqG +aqG +aqG +tvw +vat +vat +vat +vat +vat +rSa +vat +vat +fJQ +dVb +iPs +qot +iRz +tpU +tpU +tpU +tpU +unt +vLx +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(77,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +thU +aKU +aXm +asP +xPD +huq +afK +afK +xPD +huq +asP +xPD +huq +afK +afK +xPD +huq +asP +aXm +gBj +ayj +tvw +tvw +tvw +lcR +lcR +hVC +bsj +cbF +tvw +iMY +nJp +tvw +aaa +vLx +tpU +tpU +tpU +iph +vLx +tvw +aqG +aqG +ouF +aqG +aqG +tvw +vat +vat +vat +vat +vat +vat +vat +rVQ +vat +syc +nKJ +fJQ +cQq +tpU +tpU +tpU +tpU +tpU +vLx +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(78,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +asv +aqG +asP +ajh +cGG +cGG +cGG +cGG +cGG +cGG +ati +cGG +cGG +cGG +cGG +cGG +cGG +aQz +asP +aqG +azR +tvw +pCw +tvw +cWF +bsj +bsj +bsj +bsj +tvw +iMY +nJp +tvw +aaa +vLx +unt +tpU +tpU +tpU +vLx +tvw +tvw +aqG +aqG +aqG +aqG +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +vLx +lXk +tpU +tpU +tpU +vLx +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(79,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +rVP +aJO +aXm +asP +xpl +oBf +jbq +jbq +oBf +gtZ +asP +xpl +oBf +jbq +jbq +oBf +gtZ +asP +aXm +aJO +ayj +tvw +qJA +tvw +aFe +xPx +bsj +bsj +bUO +tvw +iMY +nJp +tvw +aaa +vLx +tpU +tpU +tpU +tpU +vLx +vLx +tvw +aqG +aqG +aqG +aqG +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +tpU +tpU +tpU +tpU +vLx +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(80,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +thU +aKU +aKU +aXm +aXm +aXm +aXm +aXm +aXm +aXm +aXm +aXm +aXm +aXm +aXm +aXm +aXm +asP +aKU +aKU +aAC +tvw +vaB +tvw +tvw +tvw +tvw +tvw +tvw +tvw +ukp +nJp +tvw +aaa +vLx +tpU +tpU +tpU +tpU +tpU +vLx +tvw +aqG +aqG +aqG +tvw +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +tpU +tpU +unt +tpU +vLx +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(81,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +lvR +sxE +kZB +exf +qzE +gIO +mMu +xwC +oOC +nJp +tvw +aaa +vLx +iph +tpU +unt +wji +tpU +vLx +tvw +tvw +aqG +tvw +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vLx +tpU +tpU +tpU +vLx +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(82,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 +tvw +hvQ +hvQ +bDM +lvR +kOZ +kOZ +kOZ +kOZ +kOZ +dyE +kOZ +kOZ +kOZ +oOC +hvQ +hvQ +hvQ +hvQ +hvQ +hvQ +hvQ +hvQ +nJp +tvw +aaa +vLx +tpU +tpU +tpU +tpU +tpU +vLx +vLx +tvw +tvw +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +tvw +vLx +vLx +tpU +tpU +vLx +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(83,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 +tvw +wHS +hvQ +tvw +iIb +eYX +eYX +eYX +eYX +eYX +eYX +mjA +eYX +ipc +eYX +mjA +eYX +eYX +eYX +mjA +eYX +eYX +eYX +bod +tvw +aaa +vLx +vLx +tpU +tpU +tpU +iph +tpU +vLx +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +tvw +vLx +tpU +tpU +vLx +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(84,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 +tvw +hvQ +hvQ +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvm +tvw +tvw +tvw +bit +tvw +tvw +tvw +pWk +tvw +tvw +tvw +bNC +tvw +aaa +aaa +vLx +vLx +vLx +tpU +vLx +vLx +vLx +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +qna +qna +vLx +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(85,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 +tvw +tvw +tvw +tvw +aaa +aaa +aaa +aaa +tvw +rHY +mqS +aPY +tvw +rHY +rmA +aPY +tvw +rHY +vuV +aPY +tvw +rHY +gup +aPY +tvw +aaa +aaa +aaa +aaa +vLx +vLx +vLx +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +tpU +tpU +vLx +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(86,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +sBZ +bsj +bsj +tvw +sBZ +bsj +bsj +tvw +sBZ +bsj +bsj +tvw +sBZ +bsj +bsj +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +tpU +tpU +vLx +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(87,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +cWF +nCY +etn +tvw +cWF +nCY +etn +tvw +cWF +nCY +etn +tvw +cWF +nCY +etn +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +tvw +vLx +qna +qna +vLx +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(88,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +lcR +lcR +wXo +tvw +lcR +lcR +wXo +tvw +lcR +lcR +wXo +tvw +lcR +lcR +wXo +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +tvw +vLx +vLx +tpU +tpU +vLx +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(89,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +iVr +rbT +dgV +tvw +iVr +rbT +dgV +tvw +iVr +rbT +dgV +tvw +iVr +rbT +dgV +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vLx +tpU +lXk +tpU +vLx +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(90,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +pDN +hkT +kdU +tvw +pDN +hkT +kdU +tvw +pDN +hkT +kdU +tvw +pDN +hkT +kdU +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +tpU +wji +tpU +tpU +vLx +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(91,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +kSc +tpU +tpU +tpU +vLx +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(92,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +tpU +tpU +tpU +evd +vLx +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(93,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +tpU +ujQ +tpU +vLx +vLx +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(94,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +vLx +vLx +vLx +vLx +vLx +tvw +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(95,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +tvw +tvw +tvw +tvw +tvw +tvw +tvw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(96,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(97,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(98,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(99,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(100,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(101,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(102,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(103,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(104,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(105,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(106,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(107,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(108,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(109,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(110,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(111,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(112,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(113,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(114,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(115,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(116,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(117,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(118,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(119,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(120,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(121,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(122,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(123,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(124,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(125,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(126,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(127,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(128,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(129,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(130,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(131,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(132,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(133,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(134,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(135,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(136,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(137,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(138,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(139,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +ajj +ajj +ajj +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(140,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +aSq +ofJ +aWi +aWi +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +ajj +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(141,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +ayI +aqP +aPf +aPf +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +awk +ayI +ayI +ayI +ayI +ayI +aPf +aPf +aPf +aPf +ajj +aRe +aUm +aHZ +aWi +aVv +twL +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +ajj +ajj +ajj +ajj +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(142,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +ayI +ayI +ayI +aqP +aWo +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ayI +ayI +ayI +ajj +ajj +ajj +ajj +ayI +ayI +ayI +ayI +ayI +ayI +aHX +aUm +aSq +ofJ +aVv +axY +aWg +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +ajj +iGS +iGS +iGS +iGS +iGS +ajj +ajj +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(143,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +ayI +ayI +ayI +ayI +aqP +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +aFP +aFP +aFP +aFP +axw +auf +aAz +aMW +agy +ajj +ajj +ajj +ajj +ajj +auf +ahs +ajj +ajj +ajj +ajj +ajj +aPf +aPf +ajj +axJ +aHZ +aWi +gjj +axa +aUm +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +ajj +ajj +iGS +mDS +aAr +oOS +iGS +ajj +ajj +ajj +ajj +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(144,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +ayp +ayI +ayI +ajj +ajj +aFP +ayd +aLH +aFP +aFP +aFP +asF +aMJ +kPK +aFP +aFP +aFP +aFP +aFP +aLH +aFP +aMJ +aBr +aFP +aFP +aMJ +aFP +aFP +akp +aFP +aFP +aeT +aFP +asF +ajj +ajj +ajj +ajj +uxW +ofJ +aWi +gjj +cLv +aUm +ajj +aaa +aaa +aaa +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +aEQ +aNK +iGS +sCh +hPq +rcq +iGS +iGS +iGS +iGS +iGS +iGS +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(145,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +ayI +azs +ajj +aLH +arT +aFP +aBr +aFP +avb +aLH +aFP +aFP +kPK +aFP +aFP +aFP +aFP +aVA +aFP +aCM +aeT +aFP +aFP +aFP +aCM +aFP +aFP +aFP +aLH +aFP +hBy +aFP +aFP +aFP +aMJ +ajj +ajj +bFi +aWi +aVv +aRS +cLv +aRe +ajj +ajj +ajj +ajj +ajj +aPf +aPf +aPf +aPf +aPf +aPf +aPf +ajj +aRH +iqY +aUA +aOW +sfN +rcq +iGS +mQa +rCl +vxC +sKP +iGS +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(146,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aCf +aWo +ajj +ajj +aCM +auf +ahU +aFP +aIV +ahA +aFP +ahQ +aFP +kPK +aFP +auf +aFP +aFP +aFB +akp +azk +aFP +kWr +aFB +aFP +aFP +aVA +aIV +aNB +aFP +aKu +aFP +aFP +aFP +aFP +aFP +anC +ajj +aCv +twL +eks +aUr +aUr +aUm +ajj +aPf +aPf +aPf +aPf +aPf +atp +atp +atp +atp +aPf +aPf +ajj +agb +aEf +aDQ +aOW +hpX +aTD +aTV +tfI +tfI +tfI +bTg +iGS +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(147,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aWo +aWo +ajj +ajK +ahQ +aLH +aFP +axw +aFP +aAz +ahs +aFP +aAc +kPK +aFP +aFP +aFP +aFP +aFP +agy +aMJ +aFP +aFP +aFP +aFP +aFP +aFP +aFP +aFP +aBr +aCM +aFV +aFP +aFP +aFP +aFP +aFP +ajj +aUm +cZJ +aUm +auR +aUm +ydM +ajj +aPf +atp +atp +atp +atp +atp +uIh +qJm +atp +aPf +aPf +ajj +smA +afB +iGS +wKb +fTv +ltu +iGS +bbW +tfI +oGv +hyt +iGS +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(148,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +ayp +aWo +ajj +ajj +aFP +aAz +aFP +axw +aFP +aFB +aFP +auf +ahQ +aFP +kPK +aFP +aFP +aFP +aFP +ahU +aFP +ayd +aBp +kWr +aFP +rMZ +aFP +kWr +kWr +aFP +arT +ayd +agy +aFP +aNk +aFP +aFP +avb +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +aPf +atp +atp +atp +uIh +uBw +qJm +uIh +atp +aPf +aPf +ajj +ajj +ajj +iGS +iGS +iGS +iGS +iGS +iGS +aTV +iGS +iGS +iGS +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(149,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +ayI +azs +ajj +ajj +aqf +aqf +aqf +aqf +aqf +aFP +aLH +aFP +aFP +ayd +kPK +aKu +aFP +aFP +agy +asX +aLH +aFP +aFP +aFP +hWY +hfJ +goK +aFP +aFP +aFP +aFP +aFP +akp +aFP +alF +asX +aFP +aFP +aFP +aqf +aqf +aqf +aqf +aqf +aqf +aqf +aPf +atp +atp +uIh +qJm +qJm +ckY +atp +atp +aPf +aPf +ayI +ajj +ajj +ajj +ajj +ajj +ajj +iGS +aHj +aOW +fvx +njQ +iGS +iGS +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(150,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +ayI +ajj +ajj +ajj +aqf +nGL +tzz +orB +aqf +aFP +aBr +aFP +arT +aFP +aCQ +aFP +aFP +ahs +aeT +aAc +aFP +kuV +aFP +uwP +aFP +aPC +aFP +aFP +aFP +aFP +aMJ +aFP +aFP +aLH +aAc +aFP +auf +ayI +ayI +aqf +aBT +aUu +aBv +aqf +aRx +aqf +aPf +atp +bGx +qJm +ckY +ckY +qJm +atp +aPf +aPf +ayI +ayI +ayI +tUL +ayI +ayI +ayI +ayI +iGS +sPH +bll +hPH +vYC +iFq +iGS +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(151,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aCf +ayI +ajj +ajj +aqf +ybQ +ihd +ihd +aqf +aFP +axw +aFP +aFP +ahU +kPK +aIV +aFP +aFP +aFP +agy +aFB +aFP +aBr +aFP +kWr +lZn +lZn +aFP +aFP +aFP +agy +aeT +ahs +aMW +aFP +aFP +aFP +ayI +ayI +dWE +amF +amF +amF +axD +tky +aqf +aPf +atp +atp +eZb +qJm +qJm +jFn +atp +aPf +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +aTV +aOW +cQH +kJz +pwV +vDr +iGS +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(152,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +ayI +ayI +ajj +ajj +aqf +iBq +ihd +lLN +aqf +aFP +aFP +aFP +aFP +aFP +kPK +aFP +aFP +aFP +azk +aRP +aNk +arT +aLH +aFP +aFP +aFP +aFP +aFP +aQw +kWr +aFP +alf +aFP +aVA +aFP +agy +aFP +ayI +ayI +aqf +paJ +amF +cGX +aqf +qWc +aqf +aPf +atp +atp +ckY +qJm +cfs +atp +aPf +aPf +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +tUL +iGS +oyf +aTV +iGS +fdX +iGS +iGS +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(153,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +azs +ayI +ajj +aqf +aqf +aqf +weP +aqf +aqf +aFP +aFP +aFP +aFP +xFZ +kPK +aFP +akp +aFP +aFP +arT +aFV +avb +aFP +ahQ +aIE +aNk +asX +aFP +aFP +aFP +aIV +aFP +aFP +aFP +akp +aFP +aFP +ayI +aFP +aqf +aqf +aqf +aqf +aqf +aqf +aqf +aPf +atp +qJm +qJm +atp +ckY +atp +aPf +ayI +ayI +ayI +ayI +ajj +ajj +ajj +ajj +ajj +ajj +iGS +aOW +aOW +iGS +iGS +iGS +iGS +iGS +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(154,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +ayI +ajj +aqf +aWp +cmh +gOS +smx +aqf +aFP +aFP +aFP +aFP +auf +kPK +aFP +aFP +aFP +aLH +aFP +aMJ +aFP +aFP +aFP +aMJ +aFP +aVA +aFP +aFP +azk +aAz +aFP +aFP +aFP +aMJ +aFP +aFP +ayI +aFP +aqf +aRx +aqf +haM +aQQ +qHc +aqf +atp +atp +qJm +xCy +atp +atp +atp +aPf +ayI +ayI +ayI +ajj +ajj +iGS +iGS +iGS +iGS +iGS +iGS +aOW +aOW +iGS +uXf +iNW +nlM +iGS +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(155,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +ayI +ajj +aqf +grW +qXC +bAr +agk +kJU +aFP +aFP +axw +aFP +aFP +bja +aFP +aFP +alF +aFP +aFP +aFP +aFP +aFP +asF +aFP +aeT +ayd +aLH +aFP +aFP +aFP +aFP +aFP +asF +aFP +aFP +aFP +ayI +aFP +aqf +qWc +axD +amF +amF +alk +sQj +atp +qJm +qJm +atp +aPf +aPf +aPf +aPf +ayI +ayI +ayI +ajj +ajj +iGS +vZb +pSZ +ahk +ahk +iGS +fGv +aOW +iGS +tKt +tKt +qCU +iGS +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(156,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +ayI +ajj +adR +auP +qXC +orU +vYI +kJU +aHl +aHl +aHl +aHl +nJO +aLu +ayI +ayI +aIV +ahQ +aFB +aFP +aFP +aFP +aLH +aFP +aFP +aFP +aFP +aMJ +agF +atQ +aFP +aFV +aFP +afA +ahU +aFP +ayI +aFP +aqf +aqf +aqf +aqf +aFy +aqf +aqf +atp +qJm +qJm +atp +aPf +ayI +ayI +ayI +ayI +ayI +ayI +ajj +ajj +iGS +asz +qfy +ahk +ahk +pXT +aOW +aOW +fbM +tKt +tKt +kIR +iGS +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(157,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aCf +ayI +ajj +adR +vkD +qXC +qXC +iki +gxF +aHl +aHl +aHl +aHl +aHl +aLu +ayI +ayI +ayI +atQ +aFP +aLH +aFP +aWj +auf +aFP +aFP +aFP +aFP +aFP +aFP +ahA +alF +aFP +aFP +aLH +ahs +aFP +ayI +aFP +auf +aqf +kkV +aUo +aUo +aUo +aqf +atp +ckY +qJm +atp +aPf +aPf +aPf +ayI +ayI +ayI +ayI +ajj +ajj +iGS +npc +nhZ +ahk +ssi +iGS +aOW +aOW +iGS +iYC +fza +cPo +iGS +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(158,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +ayI +ajj +adR +lVs +vNs +bIO +acF +kJU +aHl +aHl +aHl +aHl +nJO +aLu +ayI +ayI +ayI +ayI +aFP +aFP +aFP +aFP +azk +aFP +aFP +aFP +aAz +asF +aFP +aFP +aFP +azk +agy +aFP +aFP +aFP +ayI +ayI +ayI +cOu +aUo +eeZ +bwG +anw +aqf +atp +qJm +qJm +atp +atp +atp +aPf +aPf +ayI +ayI +ayI +ajj +ajj +iGS +iGS +iGS +iGS +iGS +iGS +iGS +iGS +iGS +iGS +iGS +iGS +iGS +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(159,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +ayI +ajj +aqf +auP +qXC +qXC +aIm +oYO +aFP +aLH +aFP +aAc +aFP +mCg +aFP +aFP +ayI +ayI +ayI +ayI +ayI +aFP +aLH +aFP +aTu +aBr +aFP +aFP +aLH +auf +aFP +aFP +aIV +aFP +aVA +aAc +ayI +aFP +aFP +aqf +aUo +pqy +jhR +fTY +aqf +atp +esx +qJm +cBT +atp +atp +aPf +aPf +ayI +tUL +ayI +ayI +asw +asw +asw +asw +asw +asw +asw +asw +asw +asw +ajj +ajj +ajj +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(160,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +ayI +ajj +aqf +lDy +kJL +riB +iDL +aqf +aFP +aFP +aFP +auf +aFP +kPK +aFP +aFP +aFP +ayI +ayI +ayI +ayI +ayI +aFP +aFP +aFP +aFP +aIE +aFP +aFP +axw +aCM +aGg +aFP +aAz +asX +ayI +ayI +ayd +aMJ +aqf +aqf +aqf +aqf +aqf +aqf +atp +atp +cBT +aTR +aTR +atp +aPf +aPf +ayI +ayI +ayI +ayI +asw +azB +azB +aCS +azB +azB +aCS +azB +azB +asw +ajj +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(161,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aCf +ayI +ajj +aqf +aqf +bhQ +bIO +aqf +aqf +aFP +aFP +aFP +aSs +aFP +lwv +lwv +lwv +lwv +lwv +lwv +aFP +ayI +ayI +aFP +aFP +aFP +aFP +aFP +aFP +aFP +aFP +aFP +ayI +ayI +ayI +ayI +ayI +ayI +aFP +aFP +aFP +axw +aFP +axw +aFP +aFP +atp +atp +atp +aTR +cBT +atp +aPf +aPf +ayI +ayI +ayI +tUL +asw +azB +azB +azB +azB +azB +azB +azB +azB +asw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(162,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +ayI +aPf +ajj +ajR +xHs +qXC +jgt +aSP +aSP +aFP +azk +aFP +aFP +aFP +lwv +rHD +wUS +pbz +fOb +lwv +aRi +akW +akW +akW +gPj +gPj +gPj +gPj +gPj +gPj +gPj +smT +gmT +gmT +aVI +ayI +ayI +ayI +ayI +aFP +aFP +aFP +aFP +aFP +kWr +aFP +aFP +ajj +ajj +kFE +aaY +aPf +aPf +cEy +aqP +aPf +aPf +aPf +asw +azB +azB +azB +azB +azB +azB +azB +aOc +asw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(163,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +ayI +aPf +ajj +alH +alH +alH +alH +aSP +aSP +aFP +aFP +aFP +aFP +aFP +lwv +bkA +wUS +gMy +aki +lwv +aBi +auM +aFr +aFr +aFr +aFr +aFr +aFr +aFr +auM +fFr +fFr +akW +akW +sDY +aFP +aFP +ayI +ayI +ayI +ayI +ayI +ayI +ayI +aFP +aFP +aFP +aFI +axw +aFP +aFP +axw +aFP +aFP +aPf +aPf +aPf +aPf +asw +azB +azB +azB +azB +azB +azB +azB +azB +asw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(164,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +ayI +aPf +ajj +aFN +aFN +aFN +aFN +aSP +aSP +auf +aFP +aFP +aFP +aMJ +lwv +sGf +wUS +gMy +tuO +lwv +aBi +ayA +alC +alC +alC +alC +alC +alC +alC +aUM +fFr +fFr +qNu +fFr +wBV +kWr +aFP +aFP +ayI +ayI +ayI +ayI +ayI +ayI +ayI +aFP +aFP +aFP +aFP +aFP +aFP +aFP +agy +aFP +ayI +ayI +ayI +ayI +aYQ +azB +azB +azB +azB +azB +azB +azB +azB +asw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(165,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +ayI +aPf +ajj +fTb +fTb +fTb +fTb +aSP +aSP +aFP +aFP +aFP +aFP +aFP +lwv +oaM +wUS +gMy +aki +lwv +aBi +ayA +alC +bFD +alC +alC +alC +bFD +alC +aUM +fFr +sen +hfJ +gqq +wBV +aFP +kWr +kWr +aFP +aFP +aFP +auf +aFP +ayI +ayI +aFP +auf +aFP +aFP +aFP +aFP +auf +aFP +ayI +ayI +ayI +ayI +ayI +asw +aOG +azB +azB +azB +azB +azB +azB +azB +asw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(166,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aqP +aPf +ajj +ajj +ajj +ajj +ajj +ajj +aqf +aqf +aqf +aqf +aqf +aqf +aqf +aqf +aqf +aVp +aqf +aqf +aJp +izT +wLN +alC +alC +alC +jmI +alC +alC +aUM +fFr +fFr +eon +fFr +gSx +aqf +aqf +aTb +aqf +aTb +aqf +aqf +kWr +ayI +ayI +aFP +aFP +aFP +aFP +aFP +aMJ +aFP +aFP +ayI +ayI +aPf +ayI +ayI +asw +aOG +azB +azB +azB +azB +azB +azB +aOc +asw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(167,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aqP +aPf +ajj +aqf +aqf +aqf +aqf +aqf +aqf +aga +aPG +ats +amH +aDY +aUT +aqf +aOw +aUo +aUo +aqf +aBi +ayA +dgl +alC +alC +alC +alC +alC +alC +aUM +fFr +fFr +aJT +aJT +ald +aqf +aAE +azr +aWT +aUo +aBk +aqf +aFP +ayI +ayI +aFP +aFP +aFP +aFP +aFP +aFP +aFP +ayI +ayI +aFP +aPf +aPf +aPf +asw +aQM +aQM +azB +azB +azB +azB +azB +azB +asw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(168,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aqP +aPf +ajj +aqf +avn +avn +aIx +dRs +aqf +awM +aBd +aBd +aBd +aBd +uab +aqf +koF +aUo +aUz +aqf +aBi +ayA +dgl +bFD +alC +alC +alC +bFD +alC +aUM +fFr +aKc +rjD +sFC +nLr +aqf +aZF +aHK +aWT +aUo +aqO +aqf +aFP +ayI +ayI +ayI +aFP +aFP +aFP +aFP +aFP +ayI +ayI +aFP +aFP +aPf +aPf +ajj +asw +aQM +aQM +afx +azB +azB +afx +azB +azB +asw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(169,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aqP +aPf +ajj +aqf +qRd +aNY +aNY +aNY +aEL +aBd +aBd +anL +akJ +aBd +rxB +aFn +gPN +aUo +azm +aTb +aBi +laX +cby +alC +alC +alC +alC +alC +alC +aUM +fFr +tur +tXp +tzR +tzR +aqf +ail +aUo +aUo +aUo +aUo +aUK +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +aFP +aFP +aPf +aPf +ajj +asw +asw +asw +asw +asw +asw +asw +asw +asw +asw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(170,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aqP +aPf +ajj +aqf +aHC +aNY +aNY +asY +aqf +aZC +aBd +apu +aGV +aBd +aBd +aNj +aUo +aUo +aUo +aOR +aBi +auM +aIA +aIA +aIA +aIA +aIA +aIA +aIA +auM +fFr +tur +uXH +aMQ +kLD +aqf +aOZ +aUo +aSy +aUo +afF +aqf +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +aPf +aPf +aPf +aPf +aPf +aPf +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(171,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aqP +aPf +ajj +aqf +liK +aNY +aNY +asY +aqf +aLY +aBd +aBd +aBd +aBd +aZK +aFn +koF +aUo +aUo +aTb +aBi +fFr +fFr +fFr +fFr +fFr +fFr +fFr +fFr +fFr +fFr +tur +uXH +aMQ +aMQ +aqf +rJC +aUo +awr +aUo +aGk +aqf +ayI +ayI +ayI +aFP +aMJ +aFP +aFP +aFP +ayI +aWo +ayI +aPf +aPf +aFP +aPf +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(172,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aqP +aPf +aqf +aqf +aqf +aHb +aqf +aqf +aqf +atq +aoq +aEG +wcf +aBd +aQD +aqf +ptd +aUo +aUo +aqf +aEa +aiw +aJT +aJT +aJT +gdL +aiw +aYA +aJT +awm +aJT +wWm +mLK +iTA +mza +aqf +aqf +aqf +aqf +dau +aqf +aqf +ayI +ayI +aFP +auf +kWr +aFP +kWr +aFP +aFP +aPf +ayI +aPf +auf +aFP +aLH +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +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 +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aqP +aPf +aqf +aqf +alN +aGL +buX +afj +aqf +aqf +aqf +aqf +aqf +aXl +aqf +aqf +aOw +aUo +aUz +aqf +aqf +aqf +aka +aka +aka +aqf +aqf +aqf +aqf +aqf +aqf +aqf +lwv +sAC +lwv +aqf +ufz +nps +vxF +pej +aqf +kWr +ayI +ayI +aFP +aFP +aqf +aqf +aqf +aqf +aqf +aqf +ejQ +aqf +aqf +aVA +aFP +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(174,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aqP +aPf +aqf +asp +api +ayx +ayx +arp +asp +aqf +afl +aUo +aWf +aUo +aUo +aCc +aUo +aUo +aUo +aqf +asT +arP +arP +arP +arP +arP +aWL +aqf +aUo +ayo +ahY +aqf +aUo +aUo +aUo +aqf +bcb +bcb +bcb +pej +aqf +ayI +ayI +ayI +kWr +vUv +aqf +aUo +aUo +aUo +aWf +jQJ +aUo +sHR +aqf +ahU +akp +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(175,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aqP +aPf +aqf +aBW +azl +aIp +aIp +aTk +auU +aqf +aDr +aUo +bwG +aNi +aUo +aUo +aUo +aUo +aUo +aTb +aiK +axL +aur +agQ +aOI +aOI +iXZ +aqf +aqR +alR +aQd +aqf +aqy +aUo +agr +aqf +rTU +bcb +bcb +pej +aqf +ayI +ayI +ayI +aFP +xFE +aqf +aHM +aUo +axo +aLe +aUo +aUo +aUo +iQp +aFP +aFP +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(176,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aqP +aPf +aqf +asp +aJA +aIt +aEp +aeW +asp +aqf +iZr +aid +ntJ +aOr +aUo +tci +wDG +aUo +aUo +aTb +auj +aoA +aAu +aur +aLO +aOI +aSg +aqf +aUo +axQ +aRM +aqf +aPK +aUo +awQ +aqf +sRt +btN +bcb +ujV +aqf +auf +ayI +ayI +aFP +aFP +aqf +aUo +aUo +vUu +bwG +bwG +aUo +aUo +iQp +hpP +aFP +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(177,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aqP +aPf +aqf +asp +aJA +asQ +auo +aeW +asp +aqf +oyi +aUo +aUo +aUo +aUo +bwG +wDG +aUo +aUz +aTb +aBH +axL +azT +azT +azT +asC +sIb +ang +aUo +aUo +aUz +aqf +aYj +aUo +aKD +aqf +aqf +aqf +aqf +aqf +aqf +aqf +kWr +ayI +aFP +kWr +aqf +nii +aUo +umm +aRo +bwG +aUo +aUo +iQp +aFP +aLH +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(178,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aqP +aPf +aqf +asp +aiV +ahK +ahK +aMw +asp +aqf +aAL +aUo +aUo +aUo +aUo +bwG +wDG +aUo +aUo +aOR +aOp +avS +agG +aBs +axO +aGo +lSB +aqf +aUo +aME +gWT +aqf +aXd +aUo +aQa +aqf +dyU +bQR +paj +fPs +amF +aqf +aFP +ayI +aFP +aFP +aqf +sFB +aUo +aMV +bwG +bwG +aUo +aCF +aqf +aAc +auf +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(179,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aqP +aPf +aqf +asp +aJA +awn +aOi +aeW +asp +aqf +hap +aid +aUo +aUo +aid +bwG +wDG +aUo +aUo +aOR +aOp +awD +avS +alm +asC +awD +tXa +aqf +aqf +aqf +aqf +aqf +aqf +aUo +aqf +aPZ +dDF +jYf +xga +amF +amF +aqf +aFP +ayI +aFP +auf +aqf +aZW +aUo +eIq +pUJ +aUo +aUo +aUz +aqf +npr +aFB +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(180,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aqP +aPf +aqf +aBW +aQW +aYP +aYP +ana +auU +aqf +xpH +aUo +aUo +aUo +aUo +aOV +wDG +aUo +aUo +aOR +aOp +axL +azT +azT +agG +asC +jZb +aqf +afr +atf +aOb +aSn +aIU +aUo +bNi +aqf +bZt +qPy +clF +amF +amF +ahP +aFP +ayI +ayI +aFP +aqf +aYO +aUo +aCo +aUo +aUo +aUo +aUo +pcp +jbu +vyS +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(181,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aqP +aPf +aqf +asp +alD +aUZ +aUZ +axz +asp +aqf +lnP +aPo +aUo +aUo +aUo +bwG +wDG +aUo +aUz +aTb +aBH +avS +axO +axO +axO +aGo +enf +aqf +aHP +aUo +aUo +aUo +aUo +aUo +jeI +aqf +aqf +aqf +amF +amF +amF +aqf +kWr +ayI +ayI +aFP +aqf +aqf +aqf +aqf +dIR +aqf +aqf +aqf +aqf +caY +aWy +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(182,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aqP +aPf +aqf +aqf +aqf +bIf +aoO +awB +aqf +aqf +aqf +aqf +aRt +aUo +alM +bwG +wDG +aUo +aUo +aTb +ayQ +aOI +aOI +aKB +aWq +aDA +sIb +ang +aUo +aUo +aWh +ahG +aGY +aUo +jeI +aqf +dbn +axD +amF +amF +amF +aqf +lwv +lwv +npr +lwv +aqf +aRx +axD +amF +amF +qHc +aqf +tgU +aMQ +ozJ +aCU +ajj +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(183,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aqP +aPf +aPf +aPf +aqf +uiZ +aUo +aUo +afD +aaP +aUo +aqf +aHM +aUo +ngg +ngg +aUo +aUo +aUo +aTb +apA +aOI +aOI +aOI +aKB +aGo +ayk +aqf +apc +aUo +aUo +aUo +aUo +aUo +jeI +aqf +sys +aqf +amF +ioZ +aqw +aqf +cDr +tzR +tzR +tzR +aqf +qWc +aqf +amF +bTK +xQK +aqf +xec +caY +kgI +alF +ajj +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(184,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aqP +aqP +aPf +aPf +aqf +aUo +aUo +aUo +aUo +aUo +aUo +aBo +aUo +aUo +aUo +aUo +aUo +aUo +aUo +aqf +aGT +apx +apx +apx +apx +apx +aoR +aqf +aXV +aXV +aam +aUo +aUo +aUo +jeI +aqf +aqf +aqf +aqf +aqf +aqf +aqf +avl +fjN +aMQ +fjN +aqf +aqf +aqf +aqf +aqf +aqf +aqf +srA +caY +wcd +aNk +ajj +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(185,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aqP +ayI +aPf +aPf +aqf +aUo +aUo +aUo +aUo +aUo +aUo +aqf +aKA +ayy +fFe +aUo +dVo +ayy +aks +aqf +aqf +aqf +aka +aka +aka +aqf +aqf +aqf +aqf +aqf +agV +aUo +aUo +aUo +aqf +aqf +ajj +ajj +ajj +ajj +ajj +ajj +ajj +amx +uXK +amx +lwv +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(186,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +ayI +ayI +ayI +aPf +aqf +vxh +aXN +tag +aUo +aQK +aQK +aqf +amG +aDj +xVY +aUo +rUT +ayy +aeZ +aqf +pwO +wVd +aYc +aYc +aYc +kZK +bON +aqf +aAX +ajx +aUo +aUo +aUo +xqI +aqf +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +pWF +ayI +ayI +ayI +dUh +pib +pib +pib +aDB +aAd +aAd +izJ +izJ +amx +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(187,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +ayI +ayI +aPf +aqf +aqf +aqf +aqf +aqf +aqf +aqf +aqf +aqf +aTb +aqf +aqf +aqf +aTb +aqf +aqf +ayt +qVU +qVU +qVU +qVU +qVU +aJP +aqf +aqf +aqf +aHM +aUo +aUo +avu +aqf +vTT +kJu +ahY +awr +vTT +aJX +xGO +vTT +vTT +vTT +vTT +vTT +amx +aAd +aAd +aAd +aSZ +aDB +aAd +aAd +aEX +amx +amx +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(188,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +ayI +aPf +aPf +aPf +aPf +ekp +ayI +ayI +ayI +ayI +mfu +tsx +tsx +tsx +tsx +tsx +tsx +aBa +aqX +qVU +vhm +rOn +mxd +qVU +tct +aqf +aAX +ajx +aUo +aUo +aUo +aCR +aqf +vTT +pqy +bwG +aUo +vTT +atF +ttN +vTT +dtr +rjk +dIM +vTT +amx +aiD +eFC +aAd +aAd +aCX +aDB +aAd +aAd +izJ +aAd +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(189,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +ayI +ayI +aPf +aPf +aPf +ekp +ayI +ayI +hea +bNV +eTt +aTB +eTt +eTt +wIO +wIO +wIO +vzb +sUE +vhm +qdG +vdW +bUS +anz +apT +aqf +aqf +aqf +aTb +aTb +aTb +aTb +aqf +vTT +qpx +aUo +aUo +rSu +nxR +pET +vTT +fpe +dOM +hTf +vTT +amx +gSB +rHH +izJ +aAd +aSZ +ayI +aDB +aAd +aAd +izJ +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(190,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +ayI +ayI +ayI +aPf +aPf +aFP +agU +mPR +uIo +aSt +aIr +aIg +aIg +aIg +aIr +aIr +xnl +aSt +dzn +sUE +jtc +oVT +axC +gyS +nWn +kJw +dhi +avt +bLZ +uXF +uXF +afN +pUQ +aNk +vTT +saT +aVg +iqj +vTT +nxR +aTl +vTT +wZa +dOM +lHD +vTT +amx +amx +pCd +amx +amU +aAd +aCX +hRJ +aDB +aAd +aAd +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(191,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +ayI +ayI +ayI +aPf +aPf +asX +aFP +agU +nXw +aSt +aSt +aIr +aIg +aiM +aIg +aIr +aIr +aIr +aIr +nMw +sUE +jtc +pux +qhl +qnH +nWn +qVU +pkJ +iqT +aqV +dXe +aFP +aFP +kWr +aqV +vTT +cxU +nyj +aCo +vTT +nxR +aTl +aAY +ycD +azj +sMF +vTT +pCd +mIp +lBn +pCd +izJ +aAd +cnz +hfJ +wkQ +aAd +aAd +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(192,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +ayI +ayI +aPf +aPf +aPf +aFP +aFP +agU +nXw +aIr +aIr +aqo +aDC +aNy +aDC +aqo +aIr +rzO +ddp +aWP +sIZ +jtc +gyS +mZp +yde +nWn +qVU +qUK +ayI +aOz +ayI +ayI +aOz +ayI +pBW +aAv +vTT +vTT +vTT +vTT +nxR +aTl +vTT +vTT +sGb +vTT +vTT +pCd +lDo +awt +amx +aAd +rOQ +ayI +kLW +eNw +aAd +aAd +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(193,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aWo +aWo +aPf +aFP +aFP +asX +agU +gtO +aIr +aIr +aDC +aDC +aSi +aDC +aDC +aIr +oja +aIr +nMw +sUE +jtc +mBs +bHC +anD +nWn +qVU +pkJ +avt +kWr +aFP +kWr +aFP +ayI +ayI +rCf +tbI +aye +nKz +akS +nxR +qWv +rjk +rjk +rjk +lhK +vTT +pCd +nnJ +ayI +hMt +tMb +pib +ayI +eNw +aAd +aAd +izJ +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(194,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +aWo +awV +aFP +amT +aFP +veh +gtO +aIr +aIr +aDC +axT +aGL +rne +mYg +aGC +baM +aIr +tvh +eNI +jtc +qnH +vdW +axC +nWn +kJq +jgG +iJK +nlB +ahI +aCw +kWr +ayI +ayI +rCf +gnv +hTD +aTl +akS +nxR +dOM +dOM +pdt +dOM +aTl +aAv +amx +amx +pCd +amx +jxl +aAd +aoE +aAd +aAd +izJ +izJ +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(195,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +ayI +ajj +aFP +aFP +aFP +agU +gtO +auH +aDC +aDC +akf +aGL +awA +aDC +aDC +aVk +aIr +tvh +nlv +jtc +yde +erR +oVT +nWn +hOy +ekp +aTv +nUS +aFP +aFP +aFP +ayI +qiI +aAv +xTZ +hdV +awW +vTT +eAq +qrK +azj +azj +azj +fFL +vTT +ajj +izJ +aAd +izJ +izJ +aAd +aoE +aAd +rnM +amx +amx +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(196,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +auB +ayI +ajj +ajj +kMV +aFP +agU +hpl +rXY +rXY +rXY +aox +aGL +apn +rXY +rXY +rXY +aGR +tvh +ifZ +jtc +bHC +fOu +axC +nWn +qHT +vTT +mwo +kWb +gzT +ayI +ayI +ayI +kMw +aZq +lNi +dOM +rpX +vTT +rzT +aTl +vTT +vTT +oRX +vTT +vTT +ajj +amx +cEt +aAd +izJ +aAd +aoE +aAd +izJ +amx +ajj +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(197,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +ayI +ayI +ayI +ajj +aFP +aFP +agU +gtO +aCs +aCs +rXY +akf +aGL +awA +rXY +aCs +aCs +aIr +tvh +ayt +jtc +jdx +yde +jdx +nWn +xuk +azC +bVx +aUo +xoB +kMw +aFP +aOz +lWZ +aZq +aCY +dOM +sPA +aAv +bVn +aTl +vTT +kHi +rNR +vUI +vTT +ajj +amx +yjC +lXl +aAd +lgt +nzn +lXl +izJ +ajj +ajj +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(198,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +ayI +ayI +ayI +ajj +aFP +aeT +agU +gtO +aPU +aMR +rXY +ani +aGL +aGL +rXY +aPU +aMR +aIr +tvh +eNI +jtc +xbn +itm +rvn +nWn +xDp +vTT +feU +aUo +nng +nPr +aFP +ayI +qAg +vTT +gmE +azj +rnK +vTT +iWH +aTl +vTT +aHY +afy +aFK +vTT +ajj +pCd +amx +amx +pCd +pci +pCd +amx +aAd +ajj +aUm +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(199,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +ayI +ayI +ayI +ajj +aFP +aFP +agU +gtO +wfN +wfN +rXY +aNy +aNy +aNy +rXY +wfN +wfN +aIr +tvh +sUE +jtc +fOu +vdW +yde +nWn +hOy +vTT +foq +awv +aer +agA +kWr +ayI +kWr +vTT +vTT +vTT +vTT +vTT +nxR +pET +vTT +orh +atJ +xnI +vTT +vTT +pCd +aAJ +qKi +dNn +ayI +dNn +pCd +aAd +ajj +aUm +aUm +aDa +aUm +aHZ +aQf +gjj +aUm +aUm +aGw +aUm +aUm +aRe +aUm +aUm +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(200,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +ayI +ayI +ajj +ajj +aeT +aFP +agU +gtO +aIr +aIr +aDC +aDC +aIg +aDC +aDC +aIr +aIr +aIr +tvh +sUE +alW +oVT +alo +qnH +nWn +apT +vTT +vTT +vTT +vTT +vTT +aqV +ayI +aqV +aFP +aFP +kWr +ski +vTT +sYY +xDR +vTT +nYp +afy +wLx +uew +vTT +pCd +nis +aKQ +vQH +ayI +aNd +amx +aAd +ajj +aUm +aUm +aUm +aSq +ofJ +aQf +gjj +aOO +aUm +aUm +aUm +aUm +aUm +aUm +aUm +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(201,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +ayI +aWo +ajj +aFP +aFP +asX +agU +nXw +lro +aIr +aAh +aIr +aIr +aIr +aAh +aIr +lro +aIr +dzn +sUE +alW +yde +bHC +gyS +nWn +apT +vTT +bBV +saT +rNs +vTT +aqV +ayI +iqT +aFP +cgU +kMw +kWr +vTT +vTT +vTT +vTT +gCQ +afy +wLx +nHH +vTT +pCd +azY +aKQ +biB +ayI +lDo +pCd +aAd +ajj +aUm +aRe +aUm +aHZ +aQf +aQf +gjj +axa +sQX +aUm +aUm +aUm +aUm +aUm +aUm +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(202,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +ayI +aWo +awV +aFP +asX +aFP +agU +nXw +aSt +aSt +aSt +aIr +aIr +aIr +aIr +aSt +aQE +aQE +jEk +gRb +alW +qnH +pux +gyS +nWn +rkW +vTT +xIx +adu +aUo +rYj +ayI +ayI +kWr +aFP +aSC +mGn +udI +cgU +kWr +wCC +vTT +qwJ +bIL +owJ +ggx +vTT +pCd +qBC +ayI +mgr +ayI +fbz +pCd +foJ +ajj +aDa +aUm +aqQ +aHZ +aQf +aQf +gjj +aGw +aUm +aDa +aUm +aUm +aUm +aUm +aUm +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(203,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +ayI +aPf +ajj +ajj +aFP +aFP +agU +qze +kKs +kKs +use +jfl +aTp +jfl +kKs +fCz +ayI +ayI +eaJ +mRV +cqw +xCO +xCO +xCO +oYg +qHT +vTT +aHM +aUo +aUo +vTT +kWr +ayI +aFP +aFP +aFP +qAg +aFP +aFP +aFP +kWr +vTT +vTT +vTT +vTT +vTT +vTT +pCd +amx +amx +amx +ayI +gZM +amx +amx +ajj +ajj +aUm +aUm +aCv +bFi +aQf +gjj +aJh +aUm +aUm +aUm +aUm +aUm +aUm +aUm +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(204,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +ayI +aPf +aPf +ajj +ajj +aFP +agU +ayI +ayI +ayI +mSQ +aQE +aQE +jYy +ayI +ayI +ayI +ayI +eaJ +sfd +aZU +vgQ +vgQ +vgQ +hXd +ikl +vTT +kpY +qFt +awr +vTT +wjI +aOz +aFP +kWr +aFP +kWr +ybS +kWr +aFP +kWr +aDl +vTT +ldK +hqp +fXi +vTT +ajj +pCd +cXb +nJO +ayI +ayI +qMl +lBn +pCd +ajj +aUm +aUm +aLQ +aHZ +aQf +aLD +aKP +axa +aUm +aUm +aRe +aUm +cZJ +aUm +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(205,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +ayI +ayI +ayI +aPf +ajj +ajj +ekp +ekp +ekp +ekp +ekp +ekp +ekp +ekp +ekp +ekp +ekp +ekp +ekp +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +amk +ayI +ayI +ayI +ayI +ayI +ayI +ayI +aOz +aFP +aFP +vTT +vTT +vTT +uJK +vTT +ajj +pCd +hxm +aHl +qVO +ayI +ayI +axF +pCd +ajj +aUm +aUm +aUm +aHZ +aQf +aQf +gjj +aGw +aUm +aUm +aUm +aUm +vYR +aUm +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(206,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +ayI +ayI +ayI +ayI +ayI +aPf +aPf +aPf +aPf +aPf +aPf +aPf +aPf +aPf +aPf +aPf +aPf +aPf +aPf +vTT +kxO +lAv +xsM +kdo +kfK +fAL +pLq +mCv +dRI +noy +vTT +aKu +ayI +ayI +ayI +aOz +ayI +ayI +ayI +ayI +ayI +aFP +iho +kWr +qBd +aFP +vTT +ajj +pCd +hQV +cna +oWR +ayI +ofw +hat +pCd +ajj +aUm +aUm +aUm +aCv +bFi +aQf +gjj +aJh +aUm +sQX +aUm +aUm +aUm +aUm +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(207,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +ayI +ayI +ayI +ayI +ovH +rUA +qBC +aPf +aPf +aPf +aPf +aPf +aPf +aPf +aPf +aPf +aPf +aPf +vTT +oLI +sOj +qPk +pgm +xkO +sNh +mBM +aII +aUo +aII +vTT +aqV +ayI +kWr +gko +kWr +aFP +aFP +kWr +aFP +ayI +aFP +aFP +aFP +aFP +kWr +vTT +ajj +amx +amx +amx +amx +amx +amx +amx +ajj +ajj +aUm +aUm +aUm +aLQ +aHZ +aQf +aLD +aKP +aUm +aUm +aDa +aUm +aUm +aUm +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(208,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +aPf +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +aPf +aPf +aGb +pCd +aGb +pCd +aGb +aPf +vTT +sck +qWE +qWE +caJ +doA +doA +lvk +awv +awv +aAq +vTT +kWr +ayI +ybS +dXe +aTG +aFP +dXe +aFP +aFP +aOz +aFP +aFP +dXe +aFP +ybu +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +ajj +ajj +vqx +aUm +aDa +aUm +aUm +aHZ +aQf +aQf +gjj +axa +aUm +aUm +aUm +aUm +aUm +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(209,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +aPf +aPf +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +ayI +aPf +pCd +wtw +tDj +ssQ +pCd +aPf +vTT +ptx +qDk +qVQ +lat +vNe +vNe +awU +doA +doA +doA +fUQ +ayI +ayI +gko +aFP +iho +iho +dXe +dXe +kWr +ayI +kWr +aFP +aFP +kWr +aKu +kWr +aaY +qNZ +vTT +aUd +aEm +aYk +vTT +aUm +aUm +aUm +aUm +aUm +aUm +aqQ +aHZ +aQf +aQf +gjj +aJh +aUm +aUm +aUm +aUm +aUm +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(210,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +aPf +aPf +aPf +dai +aPf +aNU +aPf +aPf +aPf +kHZ +ayI +aPf +pCd +tik +qgh +abK +pCd +aPf +vTT +ooW +ozR +pQp +qtz +gnq +aCa +bEV +doA +doA +lij +vTT +aFP +aFP +kWr +aFP +cgU +gsX +kWr +kWr +aFP +ayI +ayI +ayI +ayI +aFP +cgU +aFP +aaY +uoM +vTT +ycB +wYD +oBn +vTT +aRe +aUm +aUm +aUm +aUm +sQX +aUm +aHZ +aQf +aQf +aLD +aKP +aUm +aUm +aUm +aUm +aUm +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(211,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +aPf +aPf +aPf +ayI +aPf +aPf +aPf +aPf +aPf +aPf +aPf +aPf +aGb +pCd +mfo +pCd +aGb +aPf +vTT +vTT +vTT +vTT +qtz +aLF +lYJ +mxI +wKT +wKT +vYV +vTT +mZu +jgg +wvy +iho +aTG +iho +gVD +ybu +kWr +gko +kWr +aOz +ayI +kWr +kWr +aaY +uoM +uoM +vTT +vTT +bvn +vTT +vTT +aUm +aUm +aUm +aUm +aRe +aUm +aUm +aHZ +aQf +aQf +aQf +gjj +aUm +aUm +vYR +aUm +aUm +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(212,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +aPf +aPf +ayI +ayI +aPf +aPf +aGb +pCd +pCd +pCd +pCd +aGb +sto +hJz +nXu +uAN +bnI +aPf +aPf +aPf +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +iJK +pUQ +kWr +kWr +ayI +ayI +pUQ +oAt +uoM +kso +vTT +awY +gUZ +lkC +vTT +aUm +aDa +aUm +aUm +aUm +aUm +aUm +aHZ +aQf +aQf +aVv +aRS +aUm +aUm +aUm +cZJ +aUm +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(213,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +ayI +ayI +ayI +aPf +aPf +aPf +pCd +lgm +ssQ +mBS +aHJ +nXu +cMM +gmD +pPH +gxX +kYn +aPf +aPf +aPf +vTT +neb +bsO +bWA +vTT +uIf +uIf +nkZ +uIf +vTT +mOW +prT +hgd +onU +xXU +ewl +gmU +vTT +gko +aNk +avt +ooY +aFP +dav +oAt +uoM +uoM +uoM +vTT +qGA +gUZ +aPV +vTT +aqQ +aUm +aUm +aUm +aUm +aUm +apX +aHZ +aQf +aQf +gjj +axa +aUm +aUm +aRe +aUm +aUm +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(214,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +ayI +ayI +ayI +aPf +aPf +aPf +pCd +ssQ +gxX +nXu +oBa +dYa +ncP +gxX +gxX +tik +cMM +aPf +aPf +aPf +vTT +aUo +aUo +aUo +aNT +gSD +kzb +kzb +gSD +eqe +arh +uMR +aUo +aUo +qWG +arh +aXF +vTT +aFP +avt +ppd +axA +kWr +anQ +uoM +uoM +uoM +aaY +vTT +vTT +hge +vTT +vTT +aUm +aUm +aUm +aDa +aUm +aUm +aSq +ofJ +aQf +aVv +aRS +aqQ +aUm +nap +aUm +aUm +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(215,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +dai +aPf +ayI +ayI +aPf +aPf +pCd +oSG +gxX +cMM +qdV +aGb +mSw +cMM +aSV +gsj +aGb +aPf +aPf +aPf +vTT +wUt +aHi +aZz +vTT +uIf +kzb +kzb +gdN +vTT +arh +wOi +awv +ikE +bYx +arh +arh +skM +ayI +ayI +aFP +kWr +ayI +blD +uoM +uoM +aaY +gko +aFP +qBd +ayI +ekp +aUm +aUm +aUm +aUm +anr +aUm +aqQ +aHZ +aQf +aVv +aRS +aUr +aUm +sQX +aUm +aUm +ajj +ajj +ajj +ajj +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(216,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +ayI +ayI +ayI +aPf +fwu +aPf +pCd +nXu +tik +nXu +xsf +aUw +hYn +pNf +auQ +pNf +uVm +aPf +aqf +aqf +aqf +aqf +djn +aqf +vTT +gdN +kzb +kzb +hKI +vTT +arh +arh +arh +arh +arh +arh +oPL +vTT +xyn +ayI +aOz +ayI +ayI +mYy +ppR +bSf +dNB +aOz +ayI +ayI +ayI +sFF +aUm +aUm +aRe +aUm +rZY +ggb +ggb +ggb +ggb +ggb +ggb +geG +xFU +xFU +xFU +xFU +xFU +rPm +gCR +gCR +gCR +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(217,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +ayI +ayI +aPf +aPf +ayI +aPf +aGb +mwV +oUI +iro +gxX +tik +wlL +egn +bcE +aXn +jiN +aPf +aqf +kPf +awN +fOr +doA +aqf +vTT +gdN +gSD +hds +ooD +vTT +aRC +oNz +oEm +oPL +arh +arh +qmG +vTT +aKu +avt +gko +kWr +vXr +iHv +uoM +uoM +oAt +ayI +ayI +ayI +ayI +aNF +aUm +aUm +aUm +aUm +rZY +wdo +wdo +wdo +wdo +wdo +wdo +geG +xFU +xFU +xFU +xFU +xFU +xFU +ipK +qoB +gCR +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(218,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +ayI +ayI +ayI +ayI +sGw +ikb +wmA +jOc +nXu +wFe +aHJ +pny +tjv +lhF +wqC +xlP +aNp +aPf +aqf +hYP +vFM +xXU +doA +aqf +vTT +vTT +dPJ +vTT +vTT +vTT +prH +aKX +aKX +cqv +vFM +qUb +xXU +vTT +avt +amk +pUQ +aaY +iHv +uoM +uoM +uoM +tIM +pUQ +gko +kWr +aRd +ekp +aUm +aqQ +aUm +aUm +aUm +apX +aHZ +aQf +aQf +gjj +axa +aUm +xFU +xFU +xFU +xFU +xFU +oei +gCR +gCR +gCR +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(219,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +tUL +ayI +tUL +ayI +aPf +aPf +aGb +bqT +uAN +gZK +iro +uWe +tVM +sSe +amu +aNg +hbY +aPf +aqf +hYP +fLD +bYx +doA +aqf +vTT +grr +aXR +amD +vIX +vTT +pGK +gSD +gSD +vZv +uMR +xfD +qWG +vTT +aaY +aaY +ovF +uoM +uoM +uoM +uoM +aaY +vXr +vXr +vXr +aFP +ekp +ekp +aUm +aUm +cZJ +aUm +apX +aSq +ofJ +aQf +aVv +aHD +aUm +aUm +xFU +xFU +xFU +xFU +xFU +xFU +wZh +mzs +gCR +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(220,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +ayI +ayI +ayI +lgh +aPf +aPf +pCd +gxX +gxX +lMj +cMM +aGb +hYn +xlS +hje +iOt +aGb +aPf +aqf +wZw +dSf +mRb +eDy +aqf +vTT +hrt +aXR +aXR +nFi +vTT +pGK +gSD +gSD +vZv +uMR +xfD +qWG +vTT +uoM +uoM +uoM +uoM +uoM +uoM +uoM +ovF +aFP +vXr +aFP +ekp +ekp +aUm +aUm +aUm +aUm +aUm +aSq +ofJ +aQf +aVv +aRS +axa +aUm +aUm +xFU +xFU +xFU +xFU +xFU +xFU +gCR +gCR +gCR +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(221,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +chT +ayI +ayI +ayI +jiQ +aPf +pCd +gPD +dMl +xsf +gea +aPf +aPf +lMY +jDf +rjg +aPf +aPf +aqf +aqf +aqf +aqf +aqf +aqf +vTT +lhh +ikn +aXR +nFi +vTT +hYA +uUf +aNz +bvA +fLD +awv +bYx +vTT +uoM +uoM +uoM +qNZ +uoM +aMG +wns +aFP +aFP +ekp +ekp +ekp +aUm +aUm +aUm +aUm +aUm +aUm +aHZ +aQf +aQf +gjj +aOO +aUm +aUm +aUm +xFU +xFU +qpu +qwo +tyG +iwF +ajj +ajj +ajj +ajj +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(222,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +vQH +ayI +ayI +ayI +rfx +aPf +aGb +pCd +pCd +aGb +kvU +aPf +aPf +ajj +ajj +ajj +ajj +ajj +ajj +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +vTT +ekp +ekp +ekp +mon +sUC +vXr +gko +vXr +aZs +ekp +aUm +aUm +aUm +aUm +aUm +aUm +cZJ +aSq +ofJ +aQf +aVv +aRS +aUm +aUm +dIw +aUm +kPg +gCR +gCR +gCR +gCR +gCR +gCR +gCR +gCR +gCR +gCR +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(223,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +ayI +wnj +ayI +ayI +aPf +aPf +aPf +aPf +aPf +aPf +aPf +aPf +aPf +ajj +aaa +aaa +aaa +aaa +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ekp +ekp +roh +iJK +alb +ekp +ekp +ekp +aUm +aUm +aUm +aUm +aSq +uxW +uxW +ofJ +aQf +aQf +gjj +aGw +aUm +aUm +aUm +pZn +xFU +gCR +lXo +aAO +bhr +pKF +ncr +gCR +avn +dcP +gCR +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(224,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +aiA +aiA +aiA +aiA +aiA +aiA +aPf +aPf +aPf +aPf +aPf +aPf +aPf +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +ajj +aXW +aUm +aUm +sQX +ajj +ajj +ekp +ekp +ekp +ekp +ekp +ajj +ajj +axJ +axJ +axJ +aSq +ofJ +aQf +aQf +aQf +aQf +aVv +aRS +axa +rPh +dOC +crI +aUm +uCw +bXF +noq +noq +noq +noq +noq +kGT +aNY +cwh +gCR +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(225,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +aiA +aiA +aiA +aiA +aiA +aiA +aiA +aiA +aiA +aiA +aiA +xWg +aPf +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aEO +aXA +aUm +aUm +aUm +aUm +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +aSq +uxW +uxW +ofJ +aQf +aVv +twL +twL +twL +aRS +aUm +axa +lCi +vgx +srS +aUm +uCw +bXF +noq +iwU +tHO +noq +vuq +gCR +qnA +aNY +gCR +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(226,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +aiA +aiA +aiA +aiA +aiA +aiA +aiA +aiA +aiA +aPf +ayI +ayI +aPf +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aUm +aSq +uxW +uxW +uxW +aRL +aKP +aUm +ajj +ajj +ajj +ajj +ifp +gUC +ofJ +aQf +aQf +aQf +aVv +aRS +aOO +aUr +aUr +aUr +aUr +aUm +aUm +aUm +aUm +aUm +uCw +fbn +noq +noq +noq +noq +ueC +gCR +gCR +tVg +gCR +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(227,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +aiA +aiA +aiA +aiA +aiA +aiA +aiA +aiA +aiA +aPf +aPf +aPf +aPf +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aSq +ofJ +aQf +aQf +aQf +aQf +aGB +uxW +uxW +ajj +lkn +fTV +fTV +fTV +lkn +aVv +twL +twL +aRS +aOO +aUm +eEg +aUm +nDE +aUm +aUm +aUm +cZJ +vYR +aUm +xFU +gCR +tBo +noq +noq +noq +qWA +gCR +erP +aNY +gCR +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(228,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +aiA +aiA +aiA +aiA +aiA +aiA +aiA +aiA +aiA +aiA +aPf +ajj +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aHZ +aQf +aQf +aQf +aQf +aQf +aQf +aQf +aQf +tEg +aQf +lkn +fTV +mMx +twL +aRS +aUm +aAS +aUr +aUm +mzR +eEg +fRe +nDE +aUm +aDa +aUm +aUm +anr +aUm +xFU +gCR +gCR +uYJ +bXF +cBm +gCR +gCR +gCR +gCR +gCR +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(229,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +aPf +aiA +aiA +aiA +aPf +aiA +aiA +aiA +aiA +aiA +aPf +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aHZ +aQf +aQf +aQf +aQf +aQf +aQf +aQf +aQf +tEg +aQf +aQf +lkn +ajj +ajj +aUm +aUm +aUm +aUm +aUm +aUm +aUm +aUm +aUm +aUm +aUm +sQX +aUm +aUm +aUm +xFU +hAW +xFU +cVK +cVK +xFU +gCR +hoV +noq +aNe +gCR +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(230,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aPf +aPf +aPf +aPf +aPf +aPf +aPf +aPf +aPf +aPf +aPf +aPf +aPf +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +aCv +twL +bFi +aQf +aQf +aQf +aVv +twL +twL +ajj +ajj +ajj +ajj +ajj +ajj +ajj +aUm +vYR +aUm +aUm +aUm +aUm +aUm +aUm +aUm +fQt +aUm +aRe +aUm +aUm +kMe +xFU +xFU +xFU +xFU +xFU +ckg +noq +noq +qTu +gCR +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(231,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aSP +aSP +aSP +aSP +aUm +aUm +aCv +twL +twL +twL +aRS +aUm +aUm +ajj +ajj +ajj +ajj +ajj +ajj +ajj +aUm +cZJ +aUm +aDa +sQX +aUm +aUm +aUm +aUm +aUm +upo +hoi +aUm +upo +hoi +xFU +aLW +aLW +aLW +mEW +bXF +noq +noq +fTu +gCR +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(232,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aSP +aqf +aqf +aqf +aqf +aUm +aUm +anr +aUm +ydM +aUm +aUm +ajj +ajj +ajj +jNB +ydM +fwr +ajj +ajj +aUm +aUm +aUm +aUm +aUm +aUm +aUm +aUm +dIw +aUm +aqe +aqe +aUm +aqe +niQ +xFU +aLW +aLW +aLW +mEW +bXF +noq +noq +qaO +gCR +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(233,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aSP +aqf +sNs +feR +aqf +grX +jZH +aUm +aRe +aUm +aUm +aUm +ajj +ajj +ajj +cZJ +tLu +aUm +ajj +ajj +dIw +aUm +aUm +aUm +aUm +aUm +aUm +aUm +aUm +aUm +mJG +lwc +aUm +mJG +lwc +xFU +aLW +aLW +aLW +fwc +bXF +noq +noq +adt +gCR +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(234,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aSP +aqf +hVq +aUo +aqf +jvm +aqf +aUm +aUm +aUm +aUm +ajj +ajj +ajj +ajj +cZJ +wZS +aUm +jzL +vEs +dIw +aUm +aUm +aUm +aUm +aUm +aUm +aUm +xFU +puo +xFU +xFU +xFU +xFU +xFU +xFU +xFU +xFU +xFU +xFU +gCR +jAH +noq +mIk +gCR +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(235,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aSP +aqf +sXR +uMR +aNq +aUo +aqf +aUm +aUm +aUm +aUm +ajj +ajj +ajj +ajj +jNB +aUm +fwr +ajj +gMw +gMw +gMw +gMw +gMw +gMw +gMw +kDh +gMw +lJK +gMw +gMw +gMw +gMw +gMw +gMw +gMw +pzq +gMw +iCz +gMw +gCR +gCR +gCR +gCR +gCR +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(236,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aSP +aqf +mJB +uMR +lwt +lwt +aqf +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +gMw +vsW +gMw +yev +haE +xxv +jBF +jIj +jIj +boa +gMw +vsW +gMw +pMT +wrf +xxv +vYz +jIj +jIj +lct +gMw +ajj +ajj +ajj +ajj +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(237,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aSP +aqf +xRx +kWI +tYP +mgY +aqf +aSP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +gMw +wBX +aOY +haE +haE +gMw +jIj +knL +tYk +tBN +gMw +wBX +aOY +wrf +wrf +gMw +jIj +knL +wId +tBN +gMw +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(238,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aSP +aqf +aqf +aqf +aqf +aqf +aqf +aSP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +gMw +aVC +gMw +ehI +lQB +gMw +jIj +epr +yea +lIy +gMw +aVC +gMw +sZM +uNg +gMw +jIj +epr +yea +lIy +gMw +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(239,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aSP +aSP +aSP +aSP +aSP +aSP +aSP +aSP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +gMw +gMw +gMw +gMw +gMw +gMw +gMw +gMw +gMw +gMw +gMw +gMw +gMw +gMw +gMw +gMw +gMw +gMw +gMw +gMw +gMw +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(240,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +ajj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(241,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(242,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(243,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(244,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(245,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(246,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(247,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(248,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(249,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(250,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(251,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(252,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(253,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(254,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(255,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} diff --git a/_maps/map_files/generic/CentCom_skyrat_z2.dmm b/_maps/map_files/generic/CentCom_skyrat_z2.dmm deleted file mode 100644 index 6eca212a6f4842..00000000000000 --- a/_maps/map_files/generic/CentCom_skyrat_z2.dmm +++ /dev/null @@ -1,79055 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aaa" = ( -/turf/open/space/basic, -/area/space) -"aam" = ( -/obj/structure/closet{ - name = "coat closet" - }, -/obj/item/clothing/suit/hooded/wintercoat, -/obj/item/clothing/suit/hooded/wintercoat, -/obj/item/clothing/suit/hooded/wintercoat, -/obj/item/clothing/suit/hooded/wintercoat/skyrat, -/obj/item/clothing/suit/hooded/wintercoat/skyrat, -/obj/item/clothing/suit/hooded/wintercoat/skyrat, -/obj/item/clothing/suit/hooded/wintercoat/captain, -/obj/item/clothing/suit/hooded/wintercoat/captain, -/obj/item/clothing/suit/hooded/wintercoat/cargo, -/obj/item/clothing/suit/hooded/wintercoat/cargo, -/obj/item/clothing/suit/hooded/wintercoat/centcom, -/obj/item/clothing/suit/hooded/wintercoat/centcom, -/obj/item/clothing/suit/hooded/wintercoat/security, -/obj/item/clothing/suit/hooded/wintercoat/security, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aaP" = ( -/obj/machinery/light/directional/west, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/structure/table, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aaY" = ( -/obj/structure/fans/tiny/invisible, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"abK" = ( -/obj/structure/table/wood, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"abZ" = ( -/obj/machinery/vending/clothing, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"adt" = ( -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ - density = 0; - dir = 1 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"adw" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating, -/area/centcom/interlink) -"adU" = ( -/obj/effect/turf_decal/delivery, -/obj/structure/closet/crate/bin, -/turf/open/floor/iron, -/area/centcom/interlink) -"aer" = ( -/obj/structure/chair/sofa/corner/brown, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aeG" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/indestructible{ - id = "ntrep_shutters"; - name = "Nanotrasen Consultant's Shutters" - }, -/turf/open/floor/plating, -/area/centcom/interlink) -"aeO" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/plating, -/area/centcom/interlink) -"aeT" = ( -/obj/structure/flora/bush/fullgrass{ - icon_state = "fullgrass_3" - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aeW" = ( -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aeZ" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 1 - }, -/turf/open/floor/carpet/purple, -/area/centcom/holding/cafe) -"afe" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"afj" = ( -/obj/machinery/vending/hydroseeds, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"afl" = ( -/obj/machinery/barsign/all_access/directional/north, -/obj/machinery/vending/wardrobe/bar_wardrobe/ghost_cafe, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"afr" = ( -/obj/structure/rack{ - icon = 'icons/obj/fluff/general.dmi'; - icon_state = "minibar_left"; - name = "skeletal minibar" - }, -/obj/item/pickaxe/mini, -/obj/item/hatchet, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"afs" = ( -/obj/structure/fireplace{ - dir = 4 - }, -/turf/open/indestructible/hotelwood{ - desc = "It's really cozy! Great for soft paws!"; - icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi'; - icon_state = "carpet"; - name = "soft carpet" - }, -/area/centcom/holding/cafedorms) -"afx" = ( -/obj/machinery/light/directional/east, -/turf/open/floor/plating, -/area/centcom/holding/cafevox) -"afy" = ( -/obj/item/bedsheet/dorms_double, -/obj/structure/bed/double, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"afz" = ( -/obj/structure/table, -/obj/machinery/coffeemaker, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"afA" = ( -/obj/structure/flora/grass/green, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"afB" = ( -/obj/structure/flora/bush/ferny{ - pixel_x = -3; - pixel_y = 3 - }, -/turf/open/floor/grass/fairy, -/area/centcom/holding/cafepark) -"afD" = ( -/obj/structure/closet/crate, -/obj/item/storage/box/drinkingglasses, -/obj/item/reagent_containers/cup/glass/shaker, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"afF" = ( -/obj/structure/destructible/cult/item_dispenser/archives, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"afK" = ( -/obj/effect/turf_decal/loading_area{ - dir = 8 - }, -/turf/open/floor/mineral/titanium/blue, -/area/centcom/interlink) -"afN" = ( -/obj/structure/flora/bush/sparsegrass, -/turf/open/floor/plating/cobblestone, -/area/centcom/holding/cafepark) -"aga" = ( -/obj/structure/table, -/obj/machinery/microwave{ - pixel_y = 8 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "cafeteria" - }, -/area/centcom/holding/cafe) -"agb" = ( -/obj/structure/flora/bush/lavendergrass{ - pixel_x = 3; - pixel_y = 3 - }, -/turf/open/floor/grass/fairy, -/area/centcom/holding/cafepark) -"agk" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 4 - }, -/turf/open/indestructible/hotelwood{ - desc = "It's really cozy! Great for soft paws!"; - icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi'; - icon_state = "carpet"; - name = "soft carpet" - }, -/area/centcom/holding/cafe) -"agr" = ( -/obj/machinery/vending/access/command, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"agy" = ( -/obj/structure/flora/bush/leafy, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"agA" = ( -/obj/structure/fireplace, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"agF" = ( -/obj/structure/flora/bush/grassy/style_4, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"agG" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"agQ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"agU" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"agV" = ( -/obj/structure/closet/wardrobe/grey, -/obj/item/clothing/under/dress/tango, -/obj/item/clothing/under/dress/redeveninggown, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"ahk" = ( -/obj/machinery/button/door{ - id = "cozyfloofspot1"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_y = 24; - specialfunctions = 4 - }, -/obj/structure/closet/abductor, -/turf/open/floor/plating/abductor, -/area/centcom/holding/cafe) -"ahs" = ( -/obj/structure/flora/bush/leavy/style_2, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"ahA" = ( -/obj/structure/flora/bush/flowers_br, -/obj/structure/flora/bush/fullgrass, -/obj/structure/flora/bush/pointy, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"ahC" = ( -/obj/structure/rack, -/obj/item/storage/box/lights/mixed, -/obj/item/clothing/gloves/botanic_leather, -/obj/item/clothing/gloves/color/blue, -/obj/item/clothing/suit/caution, -/obj/item/clothing/suit/caution, -/obj/item/clothing/suit/caution, -/obj/item/clothing/suit/caution, -/obj/item/reagent_containers/cup/bucket, -/obj/item/reagent_containers/cup/bucket, -/obj/item/mop, -/obj/item/mop, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/item/storage/bag/trash, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"ahG" = ( -/obj/structure/rack, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"ahI" = ( -/obj/effect/spawner/random/entertainment/arcade, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"ahK" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"ahQ" = ( -/obj/structure/flora/bush/sparsegrass, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"ahU" = ( -/obj/structure/flora/bush/large, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"ahY" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 4 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aid" = ( -/obj/machinery/light/floor{ - alpha = 0; - invisibility = 100 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"ail" = ( -/obj/structure/chair/comfy/brown{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aiw" = ( -/obj/structure/bed/pod, -/obj/machinery/light/directional/east, -/turf/open/indestructible/cobble/side{ - dir = 4 - }, -/area/centcom/holding/cafepark) -"aiA" = ( -/turf/open/lava/fake, -/area/centcom/holding/cafepark) -"aiD" = ( -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/drinks/fullupgrade{ - density = 0 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aiK" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/machinery/vending/cola/black{ - default_price = 0; - extended_inventory = 1; - extra_price = 0; - fair_market_price = 0 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aiM" = ( -/obj/structure/showcase/fakeid{ - dir = 4 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aiV" = ( -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"ajh" = ( -/obj/effect/turf_decal/bot, -/obj/structure/closet/emcloset, -/turf/open/floor/mineral/titanium, -/area/centcom/interlink) -"ajj" = ( -/turf/closed/indestructible/rock, -/area/centcom/holding/cafepark) -"ajx" = ( -/obj/structure/curtain{ - alpha = 240; - color = "#B22222"; - name = "Curtain" - }, -/turf/open/indestructible/hotelwood{ - desc = "It's really cozy! Great for soft paws!"; - icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi'; - icon_state = "carpet"; - name = "soft carpet" - }, -/area/centcom/holding/cafe) -"ajK" = ( -/obj/structure/flora/rock/pile{ - icon_state = "basalt3" - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"ajR" = ( -/obj/structure/chair/sofa/middle/brown{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aka" = ( -/obj/effect/turf_decal/box, -/obj/effect/turf_decal/caution/stand_clear, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/wood/glass{ - desc = "A strange small bar. It's actually remarkably close to Space Station 13."; - name = "The Snoozy Floofer" - }, -/obj/structure/fans/tiny/invisible, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"akf" = ( -/obj/structure/chair/comfy/shuttle, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aki" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"akp" = ( -/obj/structure/flora/bush/flowers_pp, -/obj/structure/flora/bush/flowers_br, -/obj/structure/flora/bush/lavendergrass, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aks" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 1 - }, -/turf/open/floor/carpet/purple, -/area/centcom/holding/cafe) -"akJ" = ( -/obj/item/reagent_containers/cup/beaker/bluespace{ - luminosity = 3; - name = "floofmagic beaker"; - possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150,200,250,500); - volume = 500 - }, -/obj/item/reagent_containers/cup/beaker/bluespace{ - luminosity = 3; - name = "floofmagic beaker"; - possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150,200,250,500); - volume = 500 - }, -/obj/item/reagent_containers/cup/beaker/bluespace{ - luminosity = 3; - name = "floofmagic beaker"; - possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150,200,250,500); - volume = 500 - }, -/obj/structure/table/wood, -/turf/open/indestructible/hoteltile{ - icon_state = "cafeteria" - }, -/area/centcom/holding/cafe) -"akS" = ( -/obj/effect/turf_decal/box, -/obj/effect/turf_decal/caution/stand_clear, -/obj/machinery/door/firedoor, -/obj/structure/fans/tiny/invisible, -/obj/machinery/door/airlock/abductor{ - desc = "What could possibly be in here?"; - name = "Laboraty" - }, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"akW" = ( -/turf/open/indestructible/cobble/side{ - dir = 8 - }, -/area/centcom/holding/cafepark) -"alb" = ( -/obj/structure/mirror{ - pixel_y = 32 - }, -/obj/structure/toilet{ - pixel_y = 14 - }, -/turf/open/indestructible/hoteltile{ - icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi'; - icon_state = "titanium_blue_old"; - name = "bathroom floor" - }, -/area/centcom/holding/cafedorms) -"ald" = ( -/turf/open/indestructible/cobble/corner{ - dir = 4 - }, -/area/centcom/holding/cafepark) -"alf" = ( -/obj/structure/flora/bush/lavendergrass, -/obj/structure/flora/bush/flowers_br, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"alk" = ( -/obj/machinery/light/directional/east, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"alm" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/light/floor{ - alpha = 0; - invisibility = 100 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"alo" = ( -/obj/structure/flora/tree/jungle/small{ - icon_state = "tree5" - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"alx" = ( -/obj/machinery/door/airlock/centcom{ - name = "Interlink" - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"alC" = ( -/obj/effect/spawner/liquids_spawner, -/turf/open/floor/iron/pool, -/area/centcom/holding/cafepark) -"alD" = ( -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"alF" = ( -/obj/structure/flora/rock/pile, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"alH" = ( -/obj/structure/table, -/obj/effect/turf_decal/bot, -/obj/machinery/light/directional/south, -/obj/item/surgical_drapes, -/obj/item/surgicaldrill/alien, -/obj/item/cautery/alien, -/obj/item/bonesetter, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"alM" = ( -/obj/item/reagent_containers/cup/glass/shaker{ - pixel_x = 1; - pixel_y = 13 - }, -/obj/structure/table/wood, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"alN" = ( -/obj/item/seeds/ambrosia/gaia, -/obj/item/seeds/pumpkin/blumpkin, -/obj/item/reagent_containers/cup/bucket/wooden{ - name = "Rustic Bucket"; - possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150,200,250,500); - volume = 500 - }, -/obj/item/reagent_containers/cup/bucket/wooden{ - name = "Rustic Bucket"; - possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150,200,250,500); - volume = 500 - }, -/obj/item/reagent_containers/cup/bucket/wooden{ - name = "Rustic Bucket"; - possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150,200,250,500); - volume = 500 - }, -/obj/item/reagent_containers/cup/bucket/wooden{ - name = "Rustic Bucket"; - possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150,200,250,500); - volume = 500 - }, -/obj/item/reagent_containers/cup/bucket/wooden{ - name = "Rustic Bucket"; - possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150,200,250,500); - volume = 500 - }, -/obj/item/reagent_containers/cup/bucket/wooden{ - name = "Rustic Bucket"; - possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150,200,250,500); - volume = 500 - }, -/obj/item/shovel/spade, -/obj/item/shovel/spade, -/obj/item/cultivator, -/obj/item/cultivator, -/obj/item/watertank, -/obj/item/storage/bag/plants/portaseeder, -/obj/structure/closet, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"alO" = ( -/obj/structure/railing/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"alR" = ( -/obj/structure/table/wood/fancy/royalblue, -/obj/item/storage/dice{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/toy/cards/deck, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"alW" = ( -/obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, -/turf/open/indestructible/hotelwood{ - desc = "It's really cozy! Great for soft paws!"; - icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi'; - icon_state = "carpet"; - name = "soft carpet" - }, -/area/centcom/holding/cafedorms) -"amk" = ( -/obj/structure/chair/sofa/middle/brown{ - dir = 4 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"amu" = ( -/obj/structure/dresser{ - icon = 'icons/obj/antags/abductor.dmi'; - icon_state = "dispenser"; - name = "organ storage" - }, -/turf/open/floor/plating/abductor, -/area/centcom/holding/cafe) -"amv" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/iron, -/area/centcom/interlink) -"amx" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/washing_machine, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"amD" = ( -/obj/structure/chair/sofa/right/brown, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"amF" = ( -/obj/structure/bed, -/obj/item/bedsheet/dorms, -/turf/open/floor/carpet/royalblack, -/area/centcom/holding/cafedorms) -"amG" = ( -/obj/structure/chair/sofa/corp/left, -/turf/open/floor/carpet/purple, -/area/centcom/holding/cafe) -"amH" = ( -/obj/machinery/chem_master/condimaster{ - name = "BrewMaster 3000" - }, -/turf/open/indestructible/hoteltile{ - icon_state = "cafeteria" - }, -/area/centcom/holding/cafe) -"amT" = ( -/obj/structure/flora/bush/flowers_br, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"amU" = ( -/obj/machinery/door/airlock{ - id_tag = "CCD2" - }, -/obj/structure/fans/tiny/invisible, -/turf/open/floor/carpet/royalblack, -/area/centcom/holding/cafedorms) -"ana" = ( -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"ang" = ( -/obj/effect/turf_decal/box, -/obj/effect/turf_decal/caution/stand_clear, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/wood/glass{ - name = "Lounge" - }, -/obj/structure/fans/tiny/invisible, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"ani" = ( -/obj/effect/mob_spawn/ghost_role/human/ghostcafe, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"anr" = ( -/obj/item/toy/beach_ball, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"anv" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"anz" = ( -/obj/structure/chair/sofa/corp/corner, -/turf/open/floor/carpet/royalblack, -/area/centcom/holding/cafedorms) -"anC" = ( -/obj/structure/flora/rock/pile/jungle/large{ - pixel_x = 0; - pixel_y = 0 - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"anD" = ( -/obj/structure/chair/sofa/corner/brown{ - dir = 4 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"anL" = ( -/obj/item/storage/box/donkpockets{ - pixel_x = 7 - }, -/obj/structure/table/wood, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -9; - pixel_y = 9 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = -9 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "cafeteria" - }, -/area/centcom/holding/cafe) -"anQ" = ( -/obj/structure/flora/bush/reed, -/turf/open/misc/beach/sand{ - dir = 6 - }, -/area/centcom/holding/cafepark) -"anZ" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/smooth, -/area/cruiser_dock) -"aoq" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 27 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "cafeteria" - }, -/area/centcom/holding/cafe) -"aox" = ( -/obj/structure/chair/comfy/shuttle, -/obj/machinery/light/directional/north, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aoA" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aoE" = ( -/obj/effect/turf_decal/box, -/obj/effect/turf_decal/caution/stand_clear, -/obj/machinery/door/firedoor, -/obj/structure/fans/tiny/invisible, -/obj/machinery/door/airlock/abductor{ - desc = "What could possibly be in here? Probably naked people."; - id_tag = "cozyfloofspot1"; - name = "Bedroom" - }, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aoO" = ( -/obj/effect/turf_decal/box, -/obj/effect/turf_decal/caution/stand_clear, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/wood{ - name = "Botany / Storage" - }, -/obj/structure/fans/tiny/invisible, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aoR" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 6 - }, -/obj/structure/closet/crate/bin, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"apc" = ( -/obj/structure/rack, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"api" = ( -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"apn" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 1 - }, -/obj/machinery/light/directional/south, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"apu" = ( -/obj/item/knife{ - pixel_x = 10; - pixel_y = 3 - }, -/obj/item/storage/bag/tray, -/obj/item/storage/box/drinkingglasses{ - pixel_x = -5; - pixel_y = 7 - }, -/obj/item/storage/box/cups{ - pixel_x = -5 - }, -/obj/item/kitchen/rollingpin{ - pixel_x = 3; - pixel_y = -5 - }, -/obj/structure/table/wood, -/turf/open/indestructible/hoteltile{ - icon_state = "cafeteria" - }, -/area/centcom/holding/cafe) -"apx" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"apA" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/machinery/vending/snack/blue{ - default_price = 0; - extended_inventory = 1; - extra_price = 0; - fair_market_price = 0 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"apT" = ( -/obj/machinery/button/door{ - id = "CCD1"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_x = 25; - specialfunctions = 4 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/carpet/royalblack, -/area/centcom/holding/cafedorms) -"apW" = ( -/obj/machinery/light/dim/directional/east, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"apX" = ( -/turf/open/misc/beach/sand{ - dir = 6 - }, -/area/centcom/holding/cafepark) -"aqe" = ( -/obj/structure/table/wood, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"aqf" = ( -/turf/closed/indestructible/wood, -/area/centcom/holding/cafe) -"aqo" = ( -/obj/machinery/light/directional/east, -/turf/open/misc/ashplanet{ - initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, -/area/centcom/holding/cafepark) -"aqw" = ( -/obj/structure/table/wood, -/obj/item/toy/cards/deck, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aqy" = ( -/obj/machinery/vending/wardrobe/cargo_wardrobe/ghost_cafe, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aqG" = ( -/turf/open/floor/plating, -/area/centcom/interlink) -"aqO" = ( -/obj/machinery/photocopier, -/obj/machinery/light/directional/south, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aqP" = ( -/obj/structure/spacevine, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"aqQ" = ( -/obj/structure/flora/bush/reed, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"aqR" = ( -/obj/structure/chair/comfy/black, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aqV" = ( -/obj/structure/flora/bush/ferny{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/structure/flora/bush/fullgrass{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/structure/flora/bush/flowers_br{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/grass/fairy, -/area/centcom/holding/cafe) -"aqX" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/mop_bucket/janitorialcart{ - dir = 4 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"arh" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/chair/office/light{ - dir = 1 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"arp" = ( -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"arP" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"arT" = ( -/obj/structure/flora/bush/lavendergrass{ - icon_state = "lavendergrass_3" - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"asp" = ( -/obj/machinery/hydroponics/constructable, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafe) -"asv" = ( -/obj/machinery/door/poddoor/ert, -/turf/open/floor/plating, -/area/centcom/interlink) -"asw" = ( -/turf/closed/indestructible/wood, -/area/centcom/holding/cafevox) -"asz" = ( -/obj/structure/flora/bush/flowers_br, -/obj/structure/flora/bush/fullgrass, -/obj/structure/flora/bush/pointy, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"asC" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"asF" = ( -/obj/structure/flora/bush/flowers_pp/style_3, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"asP" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/centcom/interlink) -"asQ" = ( -/obj/structure/table/wood, -/obj/machinery/reagentgrinder{ - pixel_y = 8 - }, -/obj/item/reagent_containers/cup/beaker/large, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"asT" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 9 - }, -/obj/machinery/vending/coffee{ - default_price = 0; - extended_inventory = 1; - extra_price = 0; - fair_market_price = 0 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"asX" = ( -/obj/structure/flora/bush/lavendergrass{ - icon_state = "lavendergrass_2" - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"asY" = ( -/obj/structure/kitchenspike, -/turf/open/floor/iron/showroomfloor, -/area/centcom/holding/cafe) -"atf" = ( -/mob/living/simple_animal/bot/cleanbot, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"ati" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Arrivals" - }, -/turf/open/floor/mineral/titanium/blue, -/area/centcom/interlink) -"atp" = ( -/obj/structure/alien/resin/wall/immovable, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"atq" = ( -/obj/machinery/oven/range, -/turf/open/indestructible/hoteltile{ - icon_state = "cafeteria" - }, -/area/centcom/holding/cafe) -"ats" = ( -/obj/structure/table, -/obj/machinery/reagentgrinder{ - desc = "Used to grind things up into raw materials and liquids."; - pixel_x = -5; - pixel_y = 5 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "cafeteria" - }, -/area/centcom/holding/cafe) -"atF" = ( -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"atJ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"atQ" = ( -/obj/structure/flora/bush/fullgrass{ - icon_state = "brflowers_2" - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"auf" = ( -/obj/structure/flora/biolumi/flower{ - light_color = "#D9FF00"; - light_power = 0.3; - light_range = 10; - random_light = null - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"auj" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/machinery/vending/clothing, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"auo" = ( -/obj/machinery/chem_master/condimaster, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aur" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"auB" = ( -/obj/structure/healingfountain{ - time_between_uses = 600 - }, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"auH" = ( -/obj/machinery/light/directional/south, -/turf/open/misc/ashplanet{ - initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, -/area/centcom/holding/cafepark) -"auM" = ( -/obj/structure/fans/tiny/invisible, -/turf/open/indestructible/cobble, -/area/centcom/holding/cafepark) -"auP" = ( -/obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"auQ" = ( -/obj/structure/chair/sofa/corp{ - dir = 8 - }, -/turf/open/floor/carpet/royalblack, -/area/centcom/holding/cafedorms) -"auR" = ( -/obj/structure/flora/biolumi/flower{ - light_color = "#D9FF00"; - random_light = null - }, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"auU" = ( -/obj/machinery/hydroponics/constructable, -/obj/machinery/light/directional/south, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafe) -"avb" = ( -/obj/structure/flora/grass/green{ - icon_state = "snowgrass2gb" - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"avl" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green, -/turf/open/floor/carpet/royalblack, -/area/centcom/holding/cafedorms) -"avn" = ( -/obj/structure/closet/secure_closet/freezer/meat/all_access, -/obj/item/food/meat/slab/chicken, -/obj/item/food/meat/slab/chicken, -/obj/item/food/meat/slab/chicken, -/obj/item/food/meat/slab/chicken, -/obj/item/food/meat/slab/monkey, -/obj/item/food/meat/slab/monkey, -/obj/item/food/meat/slab/monkey, -/obj/item/food/meat/slab/monkey, -/obj/item/food/meat/rawbacon, -/obj/item/food/meat/rawbacon, -/obj/item/food/meat/rawbacon, -/obj/item/food/meat/rawbacon, -/turf/open/floor/iron/showroomfloor, -/area/centcom/holding/cafe) -"avt" = ( -/obj/structure/chair/sofa/left/brown{ - dir = 4 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"avu" = ( -/obj/vehicle/ridden/janicart/upgraded, -/obj/item/key/janitor, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"avS" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"awk" = ( -/obj/structure/fans/tiny/invisible, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"awm" = ( -/obj/machinery/light/directional/east, -/turf/open/indestructible/cobble/side{ - dir = 4 - }, -/area/centcom/holding/cafepark) -"awn" = ( -/obj/machinery/vending/wardrobe/hydro_wardrobe/ghost_cafe, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"awr" = ( -/obj/structure/bookcase/random/reference, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"awt" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"awv" = ( -/obj/structure/chair/sofa/corp/left, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"awA" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 1 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"awB" = ( -/obj/machinery/smartfridge, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"awC" = ( -/turf/open/floor/mineral/titanium, -/area/centcom/interlink) -"awD" = ( -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"awM" = ( -/obj/machinery/griddle, -/turf/open/indestructible/hoteltile{ - icon_state = "cafeteria" - }, -/area/centcom/holding/cafe) -"awN" = ( -/mob/living/basic/chick, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"awQ" = ( -/obj/machinery/light/directional/south, -/obj/machinery/vending/wardrobe/engi_wardrobe/ghost_cafe, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"awU" = ( -/obj/structure/flora/biolumi/flower{ - light_color = "#D9FF00"; - random_light = null - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"awV" = ( -/obj/structure/spacevine{ - name = "thick vines"; - opacity = 1 - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"awW" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"awY" = ( -/obj/machinery/button/door{ - id = "ghostcafecabin2"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_y = -24; - specialfunctions = 4 - }, -/obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, -/turf/open/indestructible/hotelwood{ - desc = "It's really cozy! Great for soft paws!"; - icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi'; - icon_state = "carpet"; - name = "soft carpet" - }, -/area/centcom/holding/cafe) -"axa" = ( -/turf/open/misc/beach/sand{ - dir = 1 - }, -/area/centcom/holding/cafepark) -"axo" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"axw" = ( -/obj/structure/flora/bush/leavy/style_3, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"axz" = ( -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"axA" = ( -/turf/closed/indestructible/wood, -/area/centcom/holding/cafedorms) -"axB" = ( -/obj/structure/chair/sofa/bench{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"axC" = ( -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ - density = 0 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"axD" = ( -/turf/open/indestructible/hoteltile{ - icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi'; - icon_state = "titanium_blue_old"; - name = "bathroom floor" - }, -/area/centcom/holding/cafedorms) -"axF" = ( -/obj/structure/chair/sofa/left/brown{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"axJ" = ( -/turf/open/misc/beach/sand{ - dir = 4 - }, -/area/centcom/holding/cafepark) -"axL" = ( -/obj/effect/turf_decal/tile/blue, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"axO" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"axP" = ( -/obj/structure/chair/sofa/corp/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood/corner, -/turf/open/floor/wood, -/area/centcom/interlink) -"axQ" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"axT" = ( -/obj/effect/mob_spawn/ghost_role/robot/ghostcafe, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"axY" = ( -/obj/structure/flora/tree/palm, -/turf/open/misc/beach/coast/corner{ - dir = 4 - }, -/area/centcom/holding/cafepark) -"ayd" = ( -/obj/structure/flora/grass/green{ - icon_state = "snowgrass3gb" - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aye" = ( -/obj/machinery/light/directional/east, -/obj/structure/table/wood, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"ayj" = ( -/obj/structure/fluff/tram_rail/anchor{ - desc = "This probably won't stop a titanium tram from hitting the wall, but it's the thought that counts."; - dir = 1; - name = "buffer rail anchor" - }, -/obj/effect/turf_decal/stripes/asteroid/line, -/obj/machinery/light/floor, -/turf/open/floor/plating, -/area/centcom/interlink) -"ayk" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/machinery/light/directional/south, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"ayo" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 4 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"ayp" = ( -/obj/structure/flora/bush/fullgrass{ - icon_state = "fullgrass_3" - }, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"ayt" = ( -/obj/structure/table/wood/fancy/blue, -/obj/machinery/light/directional/north, -/turf/open/indestructible/hotelwood{ - desc = "It's really cozy! Great for soft paws!"; - icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi'; - icon_state = "carpet"; - name = "soft carpet" - }, -/area/centcom/holding/cafe) -"ayx" = ( -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"ayy" = ( -/obj/structure/table/wood, -/turf/open/floor/carpet/purple, -/area/centcom/holding/cafe) -"ayA" = ( -/obj/structure/fans/tiny/invisible, -/turf/open/indestructible/cobble/side, -/area/centcom/holding/cafepark) -"ayI" = ( -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"ayQ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/machinery/vending/games, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"azj" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/light/directional/north, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"azk" = ( -/obj/structure/flora/tree/jungle/small, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"azl" = ( -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"azm" = ( -/obj/machinery/icecream_vat, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"azr" = ( -/obj/structure/chair/office/light{ - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"azs" = ( -/obj/structure/flora/bush/fullgrass, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"azB" = ( -/turf/open/floor/plating, -/area/centcom/holding/cafevox) -"azC" = ( -/obj/structure/barricade/wooden, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"azR" = ( -/obj/structure/fluff/tram_rail{ - desc = "This probably won't stop a titanium tram from hitting the wall, but it's the thought that counts."; - dir = 1; - name = "buffer rail" - }, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/floor/plating, -/area/centcom/interlink) -"azT" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"azY" = ( -/turf/open/floor/plating/cobblestone, -/area/centcom/holding/cafepark) -"aAc" = ( -/obj/structure/flora/bush/flowers_pp, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aAd" = ( -/obj/effect/spawner/random/entertainment/arcade, -/obj/machinery/light/directional/north, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aAe" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4 - }, -/turf/open/floor/mineral/titanium, -/area/centcom/interlink) -"aAh" = ( -/obj/machinery/light/directional/west, -/turf/open/misc/ashplanet{ - initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, -/area/centcom/holding/cafepark) -"aAq" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/closet/crate/trashcart, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"aAr" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"aAu" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aAv" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/rag, -/obj/machinery/reagentgrinder{ - pixel_y = 8 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aAz" = ( -/obj/structure/flora/bush/jungle/a/style_3, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aAC" = ( -/obj/structure/fluff/tram_rail/end{ - desc = "This probably won't stop a titanium tram from hitting the wall, but it's the thought that counts."; - dir = 1; - name = "buffer rail" - }, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/floor/plating, -/area/centcom/interlink) -"aAE" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green{ - pixel_x = -3; - pixel_y = 8; - start_on = 0 - }, -/obj/item/camera_film, -/obj/item/canvas/twentythree_twentythree, -/obj/item/canvas/twentythree_twentythree, -/obj/item/canvas/twentythree_twentythree, -/obj/item/canvas/twentythree_nineteen, -/obj/item/canvas/twentythree_nineteen, -/obj/item/canvas/twentythree_nineteen, -/obj/item/canvas/twentyfour_twentyfour, -/obj/item/canvas/twentyfour_twentyfour, -/obj/item/canvas/twentyfour_twentyfour, -/obj/item/canvas/nineteen_nineteen, -/obj/item/canvas/nineteen_nineteen, -/obj/item/canvas/nineteen_nineteen, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aAJ" = ( -/obj/effect/turf_decal/siding{ - color = "#2e2e2e" - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/item/flashlight/flare/candle/infinite{ - pixel_x = -19; - pixel_y = -10 - }, -/obj/item/flashlight/flare/candle/infinite{ - pixel_x = -16 - }, -/turf/open/floor/bamboo, -/area/centcom/holding/cafedorms) -"aAL" = ( -/obj/item/reagent_containers/cup/soda_cans/thirteenloko{ - pixel_x = -10; - pixel_y = 12 - }, -/obj/item/reagent_containers/cup/soda_cans/thirteenloko{ - pixel_x = -10; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/soda_cans/thirteenloko{ - pixel_x = -10 - }, -/obj/item/reagent_containers/cup/soda_cans/starkist{ - pixel_y = 12 - }, -/obj/item/reagent_containers/cup/soda_cans/starkist{ - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/soda_cans/starkist, -/obj/item/reagent_containers/cup/soda_cans/space_mountain_wind{ - pixel_x = 10; - pixel_y = 12 - }, -/obj/item/reagent_containers/cup/soda_cans/space_mountain_wind{ - pixel_x = 10; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/soda_cans/space_mountain_wind{ - pixel_x = 10 - }, -/obj/structure/table/wood, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aAO" = ( -/obj/structure/sink/kitchen/directional/east, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"aAS" = ( -/obj/structure/flora/bush/reed, -/turf/open/misc/beach/sand{ - dir = 8 - }, -/area/centcom/holding/cafepark) -"aAX" = ( -/obj/structure/mirror{ - pixel_y = 32 - }, -/turf/open/indestructible/hotelwood{ - desc = "It's really cozy! Great for soft paws!"; - icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi'; - icon_state = "carpet"; - name = "soft carpet" - }, -/area/centcom/holding/cafe) -"aAY" = ( -/obj/structure/flora/bush/sunny, -/obj/structure/flora/bush/grassy, -/obj/structure/flora/bush/lavendergrass, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aBa" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/open/misc/ashplanet{ - initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, -/area/centcom/holding/cafepark) -"aBd" = ( -/turf/open/indestructible/hoteltile{ - icon_state = "cafeteria" - }, -/area/centcom/holding/cafe) -"aBi" = ( -/turf/open/indestructible/cobble/side{ - dir = 1 - }, -/area/centcom/holding/cafepark) -"aBk" = ( -/obj/machinery/vending/wardrobe/curator_wardrobe/ghost_cafe, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aBm" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"aBo" = ( -/obj/effect/turf_decal/box, -/obj/effect/turf_decal/caution/stand_clear, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/wood{ - name = "Storage" - }, -/obj/structure/fans/tiny/invisible, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aBp" = ( -/obj/structure/flora/bush/lavendergrass{ - icon_state = "lavendergrass_4" - }, -/obj/structure/flora/bush/sparsegrass, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aBr" = ( -/obj/structure/flora/bush/fullgrass, -/obj/structure/flora/bush/flowers_yw, -/obj/structure/flora/bush/sunny, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aBs" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aBv" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/holding/cafe) -"aBH" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/machinery/light/directional/north, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aBT" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 4 - }, -/turf/open/floor/carpet/royalblack, -/area/centcom/holding/cafedorms) -"aBW" = ( -/obj/machinery/hydroponics/constructable, -/obj/machinery/light/directional/north, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafe) -"aCa" = ( -/obj/structure/flora/tree/jungle/small{ - icon_state = "tree3" - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aCc" = ( -/obj/item/storage/box/drinkingglasses{ - pixel_x = -2; - pixel_y = 3 - }, -/obj/item/storage/box/drinkingglasses{ - pixel_x = 4 - }, -/obj/structure/table/wood, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aCf" = ( -/obj/structure/flora/bush/fullgrass{ - icon_state = "fullgrass_2" - }, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"aCo" = ( -/obj/machinery/light/directional/east, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aCs" = ( -/obj/machinery/power/shuttle_engine/heater{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturfs = /turf/open/floor/plating - }, -/area/centcom/holding/cafe) -"aCv" = ( -/turf/open/misc/beach/coast/corner{ - dir = 1 - }, -/area/centcom/holding/cafepark) -"aCw" = ( -/obj/structure/chair/sofa/corp, -/turf/open/floor/carpet/royalblack, -/area/centcom/holding/cafedorms) -"aCD" = ( -/obj/structure/table/wood, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aCF" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 8 - }, -/turf/open/indestructible/hotelwood{ - desc = "It's really cozy! Great for soft paws!"; - icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi'; - icon_state = "carpet"; - name = "soft carpet" - }, -/area/centcom/holding/cafe) -"aCK" = ( -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"aCM" = ( -/obj/structure/flora/bush/flowers_pp/style_2, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aCQ" = ( -/obj/structure/chair/sofa/left/brown, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aCR" = ( -/obj/item/hilbertshotel/ghostdojo, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aCS" = ( -/obj/machinery/light/directional/west, -/turf/open/floor/plating, -/area/centcom/holding/cafevox) -"aCU" = ( -/obj/structure/table/wood/fancy/blue, -/turf/open/indestructible/hotelwood{ - desc = "It's really cozy! Great for soft paws!"; - icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi'; - icon_state = "carpet"; - name = "soft carpet" - }, -/area/centcom/holding/cafe) -"aCY" = ( -/obj/item/reagent_containers/dropper, -/obj/item/reagent_containers/cup/beaker{ - pixel_x = 8; - pixel_y = 2 - }, -/obj/structure/table/glass, -/obj/item/storage/box/rxglasses{ - pixel_x = 5; - pixel_y = 10 - }, -/obj/item/storage/box/bodybags{ - pixel_x = -5; - pixel_y = 10 - }, -/obj/item/storage/box/disks{ - pixel_x = 2; - pixel_y = 2 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aDa" = ( -/obj/structure/flora/bush/sparsegrass, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"aDg" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/centcom/interlink) -"aDj" = ( -/obj/structure/table/wood, -/obj/item/storage/fancy/donut_box{ - pixel_y = 5 - }, -/turf/open/floor/carpet/purple, -/area/centcom/holding/cafe) -"aDl" = ( -/obj/structure/chair/sofa/corp/right, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aDr" = ( -/obj/machinery/chem_master/condimaster, -/obj/machinery/light/directional/north, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aDA" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aDB" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/vending/wardrobe/robo_wardrobe/ghost_cafe, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aDC" = ( -/turf/closed/indestructible/opshuttle, -/area/centcom/holding/cafe) -"aDQ" = ( -/obj/effect/turf_decal/box, -/obj/effect/turf_decal/caution/stand_clear, -/obj/machinery/door/firedoor, -/obj/structure/fans/tiny/invisible, -/obj/machinery/door/airlock/abductor{ - desc = "What could possibly be in here? Probably naked people."; - id_tag = "ghostcafecabin2"; - name = "Bedroom" - }, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aDY" = ( -/obj/machinery/processor, -/obj/machinery/light/directional/west, -/obj/structure/table, -/turf/open/indestructible/hoteltile{ - icon_state = "cafeteria" - }, -/area/centcom/holding/cafe) -"aEa" = ( -/obj/structure/bed/pod, -/turf/open/indestructible/cobble/corner, -/area/centcom/holding/cafepark) -"aEf" = ( -/obj/structure/water_source/puddle{ - layer = 2.89; - pixel_x = 14; - pixel_y = 9 - }, -/turf/open/floor/grass/fairy, -/area/centcom/holding/cafepark) -"aEm" = ( -/obj/structure/table/wood, -/obj/item/book/manual/wiki/barman_recipes{ - pixel_x = -4; - pixel_y = 7 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aEp" = ( -/obj/machinery/chem_dispenser/mutagensaltpeter, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aEG" = ( -/obj/machinery/vending/dinnerware, -/turf/open/indestructible/hoteltile{ - icon_state = "cafeteria" - }, -/area/centcom/holding/cafe) -"aEL" = ( -/obj/effect/turf_decal/box, -/obj/effect/turf_decal/caution/stand_clear, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/wood{ - name = "Kitchen" - }, -/obj/structure/fans/tiny/invisible, -/turf/open/floor/iron/showroomfloor, -/area/centcom/holding/cafe) -"aEO" = ( -/obj/structure/flora/bush/fullgrass{ - icon_state = "fullgrass_3" - }, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"aEQ" = ( -/obj/structure/flora/bush/leafy, -/turf/open/floor/grass/fairy, -/area/centcom/holding/cafepark) -"aEX" = ( -/obj/structure/table/wood, -/obj/item/paper_bin, -/turf/open/floor/carpet/royalblack, -/area/centcom/holding/cafedorms) -"aFe" = ( -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"aFn" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "ghostcafekitchen"; - name = "Kitchen Shutters" - }, -/obj/effect/spawner/structure/window, -/turf/open/indestructible/hoteltile{ - icon_state = "plating" - }, -/area/centcom/holding/cafe) -"aFr" = ( -/obj/structure/fans/tiny/invisible, -/turf/open/indestructible/cobble/side{ - dir = 4 - }, -/area/centcom/holding/cafepark) -"aFy" = ( -/obj/effect/turf_decal/siding{ - color = "#2e2e2e"; - dir = 4 - }, -/obj/structure/bed/double{ - pixel_y = -9 - }, -/obj/item/flashlight/flare/candle/infinite{ - pixel_x = 9; - pixel_y = 29 - }, -/obj/item/bedsheet/dorms_double{ - pixel_y = -9 - }, -/turf/open/floor/bamboo, -/area/centcom/holding/cafedorms) -"aFB" = ( -/obj/structure/flora/bush/ferny, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aFI" = ( -/obj/structure/flora/tree/jungle/small{ - icon_state = "tree6" - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aFK" = ( -/obj/machinery/light/directional/south, -/obj/structure/table/wood, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aFN" = ( -/obj/structure/flora/bush/sunny{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/structure/flora/bush/grassy{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/flora/bush/flowers_br{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/structure/flora/bush/ferny, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, -/turf/open/floor/grass/fairy, -/area/centcom/holding/cafe) -"aFP" = ( -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aFV" = ( -/obj/structure/flora/bush/fullgrass{ - icon_state = "fullgrass_2" - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aGb" = ( -/obj/structure/curtain/cloth/fancy/mechanical{ - id = "ghostcafecabin3curtain" - }, -/turf/closed/indestructible/fakeglass, -/area/centcom/holding/cafedorms) -"aGg" = ( -/obj/structure/flora/bush/large/style_2, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aGk" = ( -/obj/machinery/bookbinder, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"aGo" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aGq" = ( -/obj/structure/table/reinforced, -/obj/machinery/recharger{ - pixel_y = 5 - }, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"aGw" = ( -/obj/structure/flora/bush/reed, -/turf/open/misc/beach/sand{ - dir = 1 - }, -/area/centcom/holding/cafepark) -"aGB" = ( -/obj/structure/flora/bush/reed, -/turf/open/misc/beach/coast{ - dir = 5 - }, -/area/centcom/holding/cafepark) -"aGC" = ( -/obj/structure/fans/tiny/invisible, -/turf/open/indestructible/hoteltile{ - icon_state = "stairs-old" - }, -/area/centcom/holding/cafepark) -"aGL" = ( -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aGR" = ( -/obj/machinery/light/floor{ - alpha = 0; - invisibility = 100; - light_range = 10; - nightshift_light_power = 10 - }, -/turf/open/misc/ashplanet{ - initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, -/area/centcom/holding/cafepark) -"aGT" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 5 - }, -/obj/machinery/vending/cigarette/syndicate{ - default_price = 0; - extended_inventory = 1; - extra_price = 0; - fair_market_price = 0 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aGV" = ( -/obj/item/sharpener, -/obj/structure/table/wood, -/turf/open/indestructible/hoteltile{ - icon_state = "cafeteria" - }, -/area/centcom/holding/cafe) -"aGY" = ( -/obj/structure/rack, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aHb" = ( -/obj/effect/turf_decal/box, -/obj/effect/turf_decal/caution/stand_clear, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/wood{ - name = "Botany" - }, -/obj/structure/fans/tiny/invisible, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aHi" = ( -/obj/machinery/button/door{ - id = "ghostcafecabin1"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_y = 24; - specialfunctions = 4 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aHj" = ( -/obj/effect/turf_decal/bot, -/obj/structure/grandfatherclock{ - desc = "An alien console, it's completely holographic and is complete gibberish with phrases like 'Bogos Binted' flying across the screen."; - icon = 'icons/obj/antags/abductor.dmi'; - icon_state = "console"; - name = "alien console" - }, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aHl" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/washing_machine, -/obj/machinery/light/small/directional/north, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"aHC" = ( -/obj/machinery/vending/wardrobe/chef_wardrobe/ghost_cafe, -/turf/open/floor/iron/showroomfloor, -/area/centcom/holding/cafe) -"aHD" = ( -/obj/structure/flora/bush/reed, -/turf/open/misc/beach/coast/corner{ - dir = 4 - }, -/area/centcom/holding/cafepark) -"aHJ" = ( -/obj/item/bedsheet/dorms_double, -/obj/structure/bed/double, -/turf/open/indestructible/hotelwood{ - desc = "It's really cozy! Great for soft paws!"; - icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi'; - icon_state = "carpet"; - name = "soft carpet" - }, -/area/centcom/holding/cafedorms) -"aHK" = ( -/obj/structure/chair/comfy/brown{ - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aHM" = ( -/obj/machinery/light/directional/north, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aHP" = ( -/obj/structure/rack{ - icon = 'icons/obj/fluff/general.dmi'; - icon_state = "minibar_right"; - name = "skeletal minibar" - }, -/obj/item/pickaxe/mini, -/obj/item/hatchet, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aHX" = ( -/obj/machinery/door/airlock/vault, -/obj/structure/fans/tiny/invisible, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"aHY" = ( -/obj/effect/turf_decal/bot, -/obj/structure/showcase/machinery/signal_decrypter, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aHZ" = ( -/turf/open/misc/beach/coast, -/area/centcom/holding/cafepark) -"aIg" = ( -/obj/structure/window/reinforced/plasma/plastitanium, -/turf/open/indestructible/hoteltile{ - icon_state = "plating" - }, -/area/centcom/holding/cafe) -"aIm" = ( -/obj/structure/spacevine, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aIp" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aIr" = ( -/turf/open/misc/ashplanet{ - initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, -/area/centcom/holding/cafepark) -"aIt" = ( -/obj/structure/table/wood, -/obj/item/gun/energy/floragun, -/obj/item/geneshears, -/obj/machinery/smartfridge/disks{ - pixel_y = 2 - }, -/obj/item/storage/fancy/rollingpapers, -/obj/item/secateurs, -/obj/item/hatchet, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aIx" = ( -/obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/condiment/yoghurt, -/obj/item/reagent_containers/condiment/yoghurt, -/obj/item/reagent_containers/condiment/yoghurt, -/obj/item/reagent_containers/condiment/yoghurt, -/obj/item/reagent_containers/condiment/yoghurt, -/obj/item/reagent_containers/condiment/olive_oil, -/obj/item/reagent_containers/condiment/olive_oil, -/obj/item/reagent_containers/condiment/olive_oil, -/obj/item/reagent_containers/condiment/olive_oil, -/obj/item/reagent_containers/condiment/olive_oil, -/obj/item/food/canned/larvae, -/obj/item/food/canned/larvae, -/obj/item/food/canned/larvae, -/obj/item/food/canned/larvae, -/obj/item/food/canned/larvae, -/obj/item/food/canned/pine_nuts, -/obj/item/food/canned/pine_nuts, -/obj/item/food/canned/pine_nuts, -/obj/item/food/canned/pine_nuts, -/obj/item/food/canned/pine_nuts, -/turf/open/floor/iron/showroomfloor, -/area/centcom/holding/cafe) -"aIA" = ( -/obj/structure/fans/tiny/invisible, -/turf/open/indestructible/cobble/side{ - dir = 8 - }, -/area/centcom/holding/cafepark) -"aIE" = ( -/obj/structure/flora/bush/fullgrass{ - icon_state = "brflowers_1" - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aII" = ( -/obj/structure/chair/comfy/brown{ - color = "#c45c57"; - desc = "Remarkably soft, with plush cozy cushions, premium memory-foam and covered in stain-resistant fabric. Made by Kat-Kea???!"; - name = "Premium Cozy Chair" - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aIN" = ( -/turf/open/floor/carpet/royalblack, -/area/centcom/holding/cafedorms) -"aIU" = ( -/obj/structure/bodycontainer/crematorium{ - dir = 4; - id = "crematoriumGhostDojo" - }, -/obj/machinery/button/crematorium{ - id = "crematoriumGhostDojo"; - pixel_x = -25 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aIV" = ( -/obj/structure/flora/bush/lavendergrass{ - icon_state = "lavendergrass_4" - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aJh" = ( -/turf/open/misc/beach/sand{ - dir = 5 - }, -/area/centcom/holding/cafepark) -"aJp" = ( -/obj/machinery/light/directional/north, -/turf/open/indestructible/cobble/side{ - dir = 1 - }, -/area/centcom/holding/cafepark) -"aJA" = ( -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aJO" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 4 - }, -/turf/open/floor/plating, -/area/centcom/interlink) -"aJP" = ( -/obj/machinery/button/door{ - id = "CCD2"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_x = 25; - specialfunctions = 4 - }, -/obj/structure/bed/double/pod, -/obj/item/bedsheet/dorms_double, -/turf/open/floor/carpet/royalblack, -/area/centcom/holding/cafedorms) -"aJT" = ( -/turf/open/indestructible/cobble/side{ - dir = 4 - }, -/area/centcom/holding/cafepark) -"aJX" = ( -/obj/structure/sink/directional/west, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aKa" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 10 - }, -/turf/open/floor/grass, -/area/centcom/interlink) -"aKc" = ( -/turf/open/indestructible/cobble/side, -/area/centcom/holding/cafepark) -"aKu" = ( -/obj/structure/flora/bush/jungle/b, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aKA" = ( -/obj/structure/chair/sofa/corp/right, -/turf/open/floor/carpet/purple, -/area/centcom/holding/cafe) -"aKB" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aKD" = ( -/obj/machinery/vending/wardrobe/atmos_wardrobe, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aKP" = ( -/turf/open/misc/beach/coast/corner{ - dir = 8 - }, -/area/centcom/holding/cafepark) -"aKQ" = ( -/obj/structure/toilet, -/obj/structure/curtain{ - alpha = 250; - color = "#292929"; - name = "Curtain"; - pixel_x = 2 - }, -/obj/effect/turf_decal/tile/red/anticorner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/holding/cafe) -"aKU" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 8 - }, -/turf/open/floor/plating, -/area/centcom/interlink) -"aKX" = ( -/obj/machinery/light/directional/south, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aLe" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/structure/chair/office/light{ - dir = 4 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"aLu" = ( -/obj/structure/table/wood, -/obj/machinery/light/floor{ - alpha = 0; - invisibility = 100; - light_range = 10; - nightshift_light_power = 10 - }, -/obj/item/reagent_containers/cup/glass/mug/tea, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aLz" = ( -/obj/structure/chair/sofa/corp/corner{ - dir = 4 - }, -/turf/open/floor/carpet/royalblack, -/area/centcom/holding/cafedorms) -"aLD" = ( -/turf/open/misc/beach/coast{ - dir = 5 - }, -/area/centcom/holding/cafepark) -"aLH" = ( -/obj/structure/flora/bush/fullgrass, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aLO" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aLQ" = ( -/turf/open/misc/beach/sand{ - dir = 10 - }, -/area/centcom/holding/cafepark) -"aLW" = ( -/turf/open/floor/light/colour_cycle/dancefloor_a, -/area/centcom/holding/cafepark) -"aLY" = ( -/obj/machinery/gibber, -/obj/machinery/light/directional/north, -/turf/open/indestructible/hoteltile{ - icon_state = "cafeteria" - }, -/area/centcom/holding/cafe) -"aMw" = ( -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aME" = ( -/obj/structure/table/wood, -/obj/item/toy/cards/deck/cas, -/obj/item/toy/cards/deck/kotahi, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aMG" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aMJ" = ( -/obj/structure/flora/tree/jungle, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aMM" = ( -/obj/machinery/computer/security, -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/iron, -/area/centcom/interlink) -"aMQ" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 8 - }, -/turf/open/indestructible/hotelwood{ - desc = "It's really cozy! Great for soft paws!"; - icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi'; - icon_state = "carpet"; - name = "soft carpet" - }, -/area/centcom/holding/cafe) -"aMR" = ( -/obj/machinery/power/shuttle_engine/large{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturfs = /turf/open/floor/plating - }, -/area/centcom/holding/cafe) -"aMV" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"aMW" = ( -/obj/structure/flora/grass/green{ - icon_state = "snowgrass1bb" - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aNa" = ( -/obj/structure/mineral_door/wood, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aNd" = ( -/obj/structure/sink/directional/east, -/obj/structure/mirror{ - pixel_y = 32 - }, -/obj/structure/toilet{ - pixel_y = 14 - }, -/turf/open/indestructible/hoteltile{ - icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi'; - icon_state = "titanium_blue_old"; - name = "bathroom floor" - }, -/area/centcom/holding/cafedorms) -"aNe" = ( -/obj/machinery/chem_master/condimaster, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"aNg" = ( -/obj/machinery/door/airlock{ - id_tag = "CCD1" - }, -/obj/structure/fans/tiny/invisible, -/turf/open/floor/carpet/royalblack, -/area/centcom/holding/cafedorms) -"aNi" = ( -/obj/item/reagent_containers/cup/glass/bottle/gin{ - pixel_x = -7; - pixel_y = 15 - }, -/obj/item/reagent_containers/cup/glass/shaker{ - pixel_x = 1; - pixel_y = 13 - }, -/obj/item/reagent_containers/cup/glass/bottle/sake{ - pixel_x = 10; - pixel_y = 11 - }, -/obj/item/reagent_containers/cup/glass/bottle/kahlua{ - pixel_x = 2; - pixel_y = 8 - }, -/obj/item/reagent_containers/cup/glass/bottle/wine{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/glass/bottle/bottleofnothing{ - pixel_x = -8; - pixel_y = 6 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aNj" = ( -/obj/effect/turf_decal/box, -/obj/effect/turf_decal/caution/stand_clear, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/wood{ - name = "Kitchen" - }, -/obj/structure/fans/tiny/invisible, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aNk" = ( -/obj/structure/flora/bush/large{ - icon_state = "bush3" - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aNp" = ( -/obj/machinery/light/directional/west, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aNq" = ( -/obj/structure/flora/biolumi/flower{ - light_power = 0.3; - light_range = 10; - random_light = null - }, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"aNy" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 8 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aNz" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aNB" = ( -/obj/machinery/light/directional/east, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aNF" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 8 - }, -/turf/open/floor/carpet/royalblack, -/area/centcom/holding/cafedorms) -"aNK" = ( -/obj/structure/flora/bush/flowers_yw{ - pixel_x = 3; - pixel_y = 3 - }, -/turf/open/floor/grass/fairy, -/area/centcom/holding/cafepark) -"aNT" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/glass/bottle/vodka{ - pixel_x = 3; - pixel_y = 2 - }, -/obj/item/reagent_containers/cup/glass/bottle/whiskey{ - pixel_x = -5; - pixel_y = 4 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aNU" = ( -/obj/structure/closet/crate/wooden/toy, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"aNY" = ( -/turf/open/floor/iron/showroomfloor, -/area/centcom/holding/cafe) -"aOb" = ( -/obj/structure/table, -/obj/item/lightreplacer, -/obj/item/lightreplacer, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aOc" = ( -/obj/machinery/light/directional/south, -/turf/open/floor/plating, -/area/centcom/holding/cafevox) -"aOi" = ( -/obj/machinery/seed_extractor, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aOl" = ( -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron, -/area/centcom/interlink) -"aOp" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aOr" = ( -/obj/item/reagent_containers/cup/glass/bottle/wine{ - pixel_x = 9; - pixel_y = 19 - }, -/obj/item/reagent_containers/cup/glass/bottle/tequila{ - pixel_y = 17 - }, -/obj/item/reagent_containers/cup/glass/bottle/vermouth{ - pixel_x = -15; - pixel_y = 15 - }, -/obj/item/reagent_containers/cup/glass/bottle/patron{ - pixel_x = -5; - pixel_y = 16 - }, -/obj/item/reagent_containers/cup/glass/bottle/hcider{ - pixel_x = 7; - pixel_y = 9 - }, -/obj/item/reagent_containers/cup/glass/bottle/cognac{ - pixel_x = -10; - pixel_y = 7 - }, -/obj/item/reagent_containers/cup/glass/bottle/vodka{ - pixel_y = 6 - }, -/obj/structure/table/wood, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aOw" = ( -/obj/machinery/computer/slot_machine, -/obj/item/coin/silver, -/obj/item/coin/silver, -/obj/item/coin, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aOz" = ( -/obj/structure/flora/rock/pile, -/obj/structure/fans/tiny/invisible, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aOG" = ( -/obj/structure/closet, -/obj/item/stack/sheet/mineral/wood/fifty, -/obj/item/stack/tile/wood{ - amount = 24 - }, -/obj/item/stack/tile/carpet/black/fifty, -/obj/item/stack/tile/carpet/blue/fifty, -/obj/item/stack/tile/carpet/cyan/fifty, -/obj/item/stack/tile/carpet/fifty, -/obj/item/stack/tile/carpet/green/fifty, -/obj/item/stack/tile/carpet/orange/fifty, -/obj/item/stack/tile/carpet/purple/fifty, -/obj/item/stack/tile/carpet/red/fifty, -/obj/item/stack/tile/carpet/royalblack/fifty, -/obj/item/stack/tile/carpet/royalblue/fifty, -/obj/item/storage/belt/utility/chief/full{ - name = "Construction Toolbelt" - }, -/obj/item/storage/belt/utility/chief/full{ - name = "Construction Toolbelt" - }, -/obj/item/storage/belt/utility/chief/full{ - name = "Construction Toolbelt" - }, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/glasses/welding, -/turf/open/floor/plating, -/area/centcom/holding/cafevox) -"aOI" = ( -/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/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aOO" = ( -/turf/open/misc/beach/sand{ - dir = 9 - }, -/area/centcom/holding/cafepark) -"aOR" = ( -/obj/structure/fans/tiny/invisible, -/turf/open/floor/iron/stairs, -/area/centcom/holding/cafe) -"aOV" = ( -/obj/item/book/manual/wiki/barman_recipes, -/obj/structure/table/wood, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aOW" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"aOY" = ( -/obj/structure/curtain, -/obj/machinery/light/floor{ - alpha = 0; - invisibility = 100; - light_range = 10; - nightshift_light_power = 10 - }, -/turf/open/indestructible/hoteltile{ - icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi'; - icon_state = "titanium_blue_old"; - name = "bathroom floor" - }, -/area/centcom/holding/cafedorms) -"aOZ" = ( -/obj/machinery/light/directional/north, -/obj/machinery/libraryscanner, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aPe" = ( -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 6 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"aPf" = ( -/turf/closed/mineral/earth_like, -/area/centcom/holding/cafepark) -"aPo" = ( -/obj/structure/sink/directional/west, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aPx" = ( -/turf/open/indestructible/hotelwood{ - desc = "It's really cozy! Great for soft paws!"; - icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi'; - icon_state = "carpet"; - name = "soft carpet" - }, -/area/centcom/holding/cafe) -"aPG" = ( -/obj/structure/sink/kitchen/directional/east, -/turf/open/indestructible/hoteltile{ - icon_state = "cafeteria" - }, -/area/centcom/holding/cafe) -"aPK" = ( -/obj/machinery/vending/wardrobe/cent_wardrobe, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aPU" = ( -/turf/open/floor/plating{ - baseturfs = /turf/open/floor/plating - }, -/area/centcom/holding/cafe) -"aPV" = ( -/obj/structure/table/wood, -/obj/item/flashlight{ - desc = "A hand-held not-so-emergency light that's very very bright!"; - light_power = 10; - name = "Super Light" - }, -/turf/open/floor/carpet/royalblack, -/area/centcom/holding/cafedorms) -"aPY" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"aPZ" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"aQa" = ( -/obj/machinery/vending/wardrobe/det_wardrobe, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aQd" = ( -/obj/structure/table/wood/fancy/royalblue, -/obj/item/reagent_containers/cup/soda_cans/starkist{ - pixel_x = 5; - pixel_y = 7 - }, -/obj/item/reagent_containers/cup/soda_cans/dr_gibb{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/item/toy/cards/deck/tarot, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aQf" = ( -/turf/open/water/beach, -/area/centcom/holding/cafepark) -"aQw" = ( -/obj/structure/flora/bush/grassy, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aQx" = ( -/obj/effect/turf_decal/trimline/green/line{ - dir = 10 - }, -/obj/machinery/button/door/directional/west{ - id = "il_bar"; - name = "Bar Shutter Control"; - pixel_y = -8; - req_access = list("bar") - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"aQz" = ( -/obj/effect/turf_decal/bot, -/obj/structure/closet/emcloset, -/turf/open/floor/mineral/titanium/blue, -/area/centcom/interlink) -"aQD" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/reagent_containers/condiment/enzyme{ - layer = 5; - name = "universally-sized universal enzyme"; - pixel_x = -4; - volume = 2000 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "cafeteria" - }, -/area/centcom/holding/cafe) -"aQE" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/glass/shaker{ - pixel_x = 1; - pixel_y = 13 - }, -/obj/item/reagent_containers/cup/glass/bottle/rum{ - pixel_x = -7; - pixel_y = 2 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aQK" = ( -/obj/structure/closet, -/obj/item/stack/sheet/mineral/wood/fifty, -/obj/item/stack/tile/wood{ - amount = 24 - }, -/obj/item/stack/tile/carpet/black/fifty, -/obj/item/stack/tile/carpet/blue/fifty, -/obj/item/stack/tile/carpet/cyan/fifty, -/obj/item/stack/tile/carpet/fifty, -/obj/item/stack/tile/carpet/green/fifty, -/obj/item/stack/tile/carpet/orange/fifty, -/obj/item/stack/tile/carpet/purple/fifty, -/obj/item/stack/tile/carpet/red/fifty, -/obj/item/stack/tile/carpet/royalblack/fifty, -/obj/item/stack/tile/carpet/royalblue/fifty, -/obj/item/storage/belt/utility/chief/full{ - name = "Construction Toolbelt" - }, -/obj/item/storage/belt/utility/chief/full{ - name = "Construction Toolbelt" - }, -/obj/item/storage/belt/utility/chief/full{ - name = "Construction Toolbelt" - }, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/glasses/welding, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aQM" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/open/floor/plating, -/area/centcom/holding/cafevox) -"aQQ" = ( -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"aQR" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/plating, -/area/centcom/interlink) -"aQW" = ( -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aQY" = ( -/turf/open/floor/wood, -/area/centcom/interlink) -"aRd" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"aRe" = ( -/obj/structure/flora/bush/fullgrass, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"aRi" = ( -/turf/open/indestructible/cobble/corner{ - dir = 1 - }, -/area/centcom/holding/cafepark) -"aRk" = ( -/obj/effect/spawner/structure/window/reinforced/shuttle, -/turf/open/floor/plating, -/area/centcom/interlink) -"aRo" = ( -/obj/structure/musician/piano, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aRt" = ( -/obj/structure/table/wood/fancy/blue, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = -9; - pixel_y = 2 - }, -/obj/item/reagent_containers/condiment/peppermill{ - dir = 1; - pixel_x = -3; - pixel_y = 2 - }, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -9; - pixel_y = 11 - }, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -3; - pixel_y = 11 - }, -/obj/item/reagent_containers/condiment/pack/ketchup{ - pixel_x = 3 - }, -/obj/item/reagent_containers/condiment/pack/ketchup{ - pixel_x = 5 - }, -/obj/item/reagent_containers/condiment/pack/ketchup{ - pixel_x = 7 - }, -/obj/item/reagent_containers/condiment/pack/hotsauce{ - pixel_x = 5; - pixel_y = 2 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aRx" = ( -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/item/storage/pill_bottle/mutadone, -/obj/item/storage/pill_bottle/mannitol, -/obj/structure/table/glass, -/obj/item/clothing/gloves/latex, -/obj/item/flashlight/pen{ - pixel_x = 4; - pixel_y = 3 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aRC" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"aRH" = ( -/obj/structure/flora/bush/flowers_br{ - pixel_x = -3; - pixel_y = -3 - }, -/turf/open/floor/grass/fairy, -/area/centcom/holding/cafepark) -"aRL" = ( -/obj/structure/flora/bush/reed, -/turf/open/misc/beach/coast{ - dir = 4 - }, -/area/centcom/holding/cafepark) -"aRM" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aRP" = ( -/obj/structure/flora/tree/jungle/small, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"aRS" = ( -/turf/open/misc/beach/coast/corner{ - dir = 4 - }, -/area/centcom/holding/cafepark) -"aSg" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/structure/rack, -/obj/item/storage/box/nif_ghost_box, -/obj/item/storage/box/nif_ghost_box, -/obj/item/storage/box/nif_ghost_box, -/obj/item/storage/box/nif_ghost_box, -/obj/item/storage/box/nif_ghost_box, -/obj/item/storage/box/nif_ghost_box, -/obj/item/storage/box/nif_ghost_box, -/obj/item/storage/box/nif_ghost_box, -/obj/item/storage/box/nif_ghost_box, -/obj/item/storage/box/nif_ghost_box, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aSi" = ( -/obj/machinery/door/airlock/survival_pod{ - name = "Cockpit" - }, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aSn" = ( -/obj/structure/table, -/obj/machinery/light/directional/west{ - bulb_colour = "#e8eaff " - }, -/obj/item/soap, -/obj/item/soap, -/obj/item/soap, -/obj/item/soap, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/gloves/color/yellow, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aSq" = ( -/turf/open/misc/beach/coast/corner, -/area/centcom/holding/cafepark) -"aSs" = ( -/obj/structure/flora/tree/jungle/small{ - icon_state = "tree4" - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aSt" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/carpet/royalblack, -/area/centcom/holding/cafedorms) -"aSy" = ( -/obj/structure/bookcase/random, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aSC" = ( -/turf/open/indestructible/hotelwood{ - desc = "It's really cozy! Great for soft paws!"; - icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi'; - icon_state = "carpet"; - name = "soft carpet" - }, -/area/centcom/holding/cafedorms) -"aSH" = ( -/obj/structure/dresser{ - pixel_y = 7 - }, -/obj/item/flashlight/lamp/green{ - pixel_x = -3; - pixel_y = 22 - }, -/turf/open/indestructible/hotelwood{ - desc = "It's really cozy! Great for soft paws!"; - icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi'; - icon_state = "carpet"; - name = "soft carpet" - }, -/area/centcom/holding/cafedorms) -"aSP" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"aSV" = ( -/obj/structure/chair/sofa/right/brown{ - dir = 4 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aSY" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plating, -/area/centcom/interlink) -"aSZ" = ( -/obj/structure/flora/bush/fullgrass, -/obj/structure/flora/bush/flowers_yw, -/obj/structure/flora/bush/sunny, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"aTb" = ( -/turf/closed/indestructible/fakeglass, -/area/centcom/holding/cafe) -"aTk" = ( -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aTl" = ( -/mob/living/basic/cow, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aTp" = ( -/obj/machinery/light/floor{ - alpha = 0; - invisibility = 100; - light_power = 10; - light_range = 20; - nightshift_light_power = 10 - }, -/turf/open/misc/ashplanet{ - initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, -/area/centcom/holding/cafepark) -"aTu" = ( -/obj/structure/flora/bush/grassy/style_2, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aTv" = ( -/obj/structure/dresser, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aTB" = ( -/obj/structure/flora/bush/fullgrass{ - icon_state = "brflowers_3" - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aTD" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 4 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/carpet/royalblack, -/area/centcom/holding/cafedorms) -"aTE" = ( -/obj/effect/turf_decal/caution, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron, -/area/centcom/interlink) -"aTG" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "ghostcafecabin3"; - name = "Wooden Cabin" - }, -/obj/structure/fans/tiny/invisible, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aTI" = ( -/obj/structure/table/glass, -/obj/item/storage/box/disks{ - pixel_x = -8; - pixel_y = 10 - }, -/obj/item/storage/box/syringes{ - pixel_x = 7; - pixel_y = 10 - }, -/obj/item/storage/box/beakers{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/reagent_containers/spray/cleaner{ - pixel_x = -11 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aTR" = ( -/obj/structure/spacevine{ - name = "thick vines"; - opacity = 1 - }, -/obj/structure/alien/weeds, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"aTS" = ( -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/centcom/interlink) -"aTV" = ( -/obj/structure/showcase/fakeid{ - name = "console" - }, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aUd" = ( -/obj/machinery/light/directional/south, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"aUf" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/machinery/light/cold/directional/south, -/turf/open/misc/asteroid, -/area/cruiser_dock) -"aUh" = ( -/obj/structure/chair/sofa/bench/right, -/obj/effect/landmark/latejoin, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"aUm" = ( -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"aUo" = ( -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aUr" = ( -/turf/open/misc/beach/sand{ - dir = 8 - }, -/area/centcom/holding/cafepark) -"aUu" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 4 - }, -/turf/open/floor/carpet/royalblack, -/area/centcom/holding/cafedorms) -"aUw" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/sink/directional/east, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"aUz" = ( -/obj/machinery/light/directional/south, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aUA" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/table, -/obj/structure/bedsheetbin, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"aUK" = ( -/obj/effect/turf_decal/box, -/obj/effect/turf_decal/caution/stand_clear, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/wood/glass{ - desc = "A strange small bar. It's actually remarkably close to Space Station 13."; - name = "Library" - }, -/obj/structure/fans/tiny/invisible, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aUM" = ( -/obj/structure/fans/tiny/invisible, -/turf/open/indestructible/cobble/side{ - dir = 1 - }, -/area/centcom/holding/cafepark) -"aUT" = ( -/obj/structure/closet/crate/freezer, -/turf/open/indestructible/hoteltile{ - icon_state = "cafeteria" - }, -/area/centcom/holding/cafe) -"aUZ" = ( -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aVg" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "ghostcafecabin1"; - name = "Wooden Cabin" - }, -/obj/structure/fans/tiny/invisible, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aVk" = ( -/obj/machinery/light/directional/north, -/turf/open/misc/ashplanet{ - initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, -/area/centcom/holding/cafepark) -"aVp" = ( -/obj/effect/turf_decal/box, -/obj/effect/turf_decal/caution/stand_clear, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/wood{ - name = "Janitorial" - }, -/obj/structure/fans/tiny/invisible, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aVs" = ( -/obj/machinery/door/airlock/external/glass, -/turf/open/floor/plating, -/area/centcom/interlink) -"aVv" = ( -/turf/open/misc/beach/coast{ - dir = 9 - }, -/area/centcom/holding/cafepark) -"aVA" = ( -/obj/structure/flora/bush/generic, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aVC" = ( -/obj/machinery/shower/directional/west, -/turf/open/indestructible/hoteltile{ - icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi'; - icon_state = "titanium_blue_old"; - name = "bathroom floor" - }, -/area/centcom/holding/cafedorms) -"aVI" = ( -/turf/open/indestructible/cobble/corner{ - dir = 8 - }, -/area/centcom/holding/cafepark) -"aVS" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"aWb" = ( -/turf/open/floor/iron/white, -/area/centcom/interlink) -"aWf" = ( -/obj/machinery/light/directional/west, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aWg" = ( -/mob/living/basic/crab, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"aWh" = ( -/obj/structure/rack, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/clothing/mask/breath/vox, -/obj/item/clothing/mask/breath/vox, -/obj/item/clothing/mask/breath/vox, -/obj/item/clothing/mask/breath/vox, -/obj/item/clothing/mask/breath/vox, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aWi" = ( -/turf/open/floor/holofloor/beach/water, -/area/centcom/holding/cafepark) -"aWj" = ( -/obj/structure/flora/bush/grassy/style_3, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"aWm" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"aWo" = ( -/obj/structure/spacevine{ - name = "thick vines"; - opacity = 1 - }, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"aWp" = ( -/obj/machinery/light/directional/east, -/turf/open/floor/carpet/royalblack, -/area/centcom/holding/cafedorms) -"aWq" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aWy" = ( -/obj/machinery/light/directional/north, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aWL" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 - }, -/obj/machinery/vending/barbervend, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aWP" = ( -/obj/structure/fence/door/opened, -/turf/open/misc/ashplanet{ - initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, -/area/centcom/holding/cafepark) -"aWT" = ( -/obj/structure/easel, -/obj/item/canvas/twentythree_twentythree, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aXd" = ( -/obj/machinery/vending/wardrobe/law_wardrobe/ghost_cafe, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aXl" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "ghostcafekitchen"; - name = "Kitchen Shutters" - }, -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/turf/open/indestructible/hoteltile{ - icon_state = "plating" - }, -/area/centcom/holding/cafe) -"aXm" = ( -/turf/closed/wall/mineral/titanium, -/area/centcom/interlink) -"aXA" = ( -/obj/structure/flora/grass/green{ - icon_state = "snowgrass3gb" - }, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"aXF" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"aXG" = ( -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"aXN" = ( -/obj/machinery/vending/engivend{ - default_price = 0; - extended_inventory = 1; - extra_price = 0; - fair_market_price = 0 - }, -/obj/machinery/light/directional/east, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aXR" = ( -/obj/machinery/button/door{ - id = "ghostcafecabin3"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_x = -25; - specialfunctions = 4 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aXV" = ( -/obj/structure/table, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aXW" = ( -/obj/structure/flora/bush/generic, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"aYc" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/vending/wardrobe/science_wardrobe/ghost_cafe, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aYj" = ( -/obj/machinery/vending/wardrobe/chap_wardrobe/unholy/ghost_cafe, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aYk" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 4 - }, -/turf/open/indestructible/hotelwood{ - desc = "It's really cozy! Great for soft paws!"; - icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi'; - icon_state = "carpet"; - name = "soft carpet" - }, -/area/centcom/holding/cafe) -"aYn" = ( -/obj/structure/fluff/tram_rail/end{ - desc = "This probably won't stop a titanium tram from hitting the wall, but it's the thought that counts."; - dir = 4; - name = "buffer rail" - }, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/floor/plating, -/area/centcom/interlink) -"aYp" = ( -/obj/machinery/light/directional/west, -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"aYA" = ( -/obj/structure/bed/pod, -/turf/open/indestructible/cobble/side{ - dir = 4 - }, -/area/centcom/holding/cafepark) -"aYK" = ( -/obj/structure/chair/sofa/bench/left, -/obj/effect/landmark/latejoin, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 5 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"aYO" = ( -/obj/structure/spacevine, -/obj/structure/mineral_door/wood, -/obj/structure/fans/tiny/invisible, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aYP" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"aYQ" = ( -/obj/machinery/door/airlock{ - id_tag = "CCD2"; - name = "Vox Box Construction" - }, -/obj/structure/fans/tiny/invisible, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafevox) -"aYX" = ( -/obj/machinery/duct, -/obj/machinery/dryer{ - dir = 8; - pixel_x = 7 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"aZq" = ( -/obj/structure/chair/sofa/corp{ - dir = 4 - }, -/turf/open/floor/carpet/royalblack, -/area/centcom/holding/cafedorms) -"aZs" = ( -/obj/machinery/hypnochair, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aZz" = ( -/obj/effect/turf_decal/bot, -/obj/structure/showcase/machinery/implanter{ - icon = 'icons/obj/antags/abductor.dmi'; - icon_state = "experiment"; - name = "pod" - }, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"aZC" = ( -/obj/machinery/deepfryer, -/turf/open/indestructible/hoteltile{ - icon_state = "cafeteria" - }, -/area/centcom/holding/cafe) -"aZF" = ( -/obj/structure/table/wood, -/obj/item/papercutter{ - pixel_x = -9; - pixel_y = 1 - }, -/obj/item/pen/blue, -/obj/item/paper_bin/carbon{ - pixel_x = 6 - }, -/obj/item/toy/crayon/spraycan/infinite, -/obj/item/toy/crayon/spraycan/infinite, -/obj/item/toy/crayon/spraycan/infinite, -/obj/item/toy/crayon/spraycan/infinite, -/obj/item/toy/crayon/spraycan/infinite, -/obj/item/toy/crayon/spraycan/infinite, -/obj/item/toy/crayon/spraycan/infinite, -/obj/item/toy/crayon/spraycan/infinite, -/obj/item/toy/crayon/spraycan/infinite, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"aZK" = ( -/obj/machinery/food_cart, -/turf/open/indestructible/hoteltile{ - icon_state = "cafeteria" - }, -/area/centcom/holding/cafe) -"aZU" = ( -/obj/structure/chair/sofa/right/brown{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"aZW" = ( -/obj/machinery/light/directional/north, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"bae" = ( -/obj/structure/table, -/obj/machinery/computer/libraryconsole{ - dir = 1; - pixel_y = 6 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"bcb" = ( -/turf/open/floor/carpet/cyan, -/area/centcom/holding/cafe) -"bck" = ( -/obj/structure/sign/poster/random/directional/south, -/turf/open/floor/iron, -/area/centcom/interlink) -"bdI" = ( -/obj/structure/railing, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"beb" = ( -/obj/machinery/light/floor, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron, -/area/centcom/interlink) -"beg" = ( -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"bhr" = ( -/obj/machinery/griddle, -/obj/machinery/light/directional/west, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"bhJ" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/cruiser_dock) -"bit" = ( -/obj/machinery/door/airlock{ - id_tag = "room7"; - name = "Cabin" - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"biF" = ( -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_y = 5 - }, -/obj/item/pen, -/turf/open/floor/wood, -/area/centcom/interlink) -"bjh" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"bjq" = ( -/obj/structure/fence/end{ - dir = 4 - }, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"bkA" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/light/directional/west, -/obj/structure/bed/medical/emergency, -/obj/machinery/iv_drip, -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"bll" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"blq" = ( -/obj/effect/turf_decal/siding/white/corner{ - dir = 1 - }, -/obj/effect/landmark/latejoin, -/turf/open/floor/iron, -/area/centcom/interlink) -"blI" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/closet/crate/bin, -/obj/item/reagent_containers/cup/glass/coffee_cup, -/obj/item/reagent_containers/cup/glass/coffee_cup, -/obj/item/reagent_containers/cup/glass/coffee_cup, -/turf/open/floor/iron, -/area/centcom/interlink) -"bnU" = ( -/obj/structure/flora/tree/stump, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"boa" = ( -/obj/machinery/button/door{ - id = "ghostcaferesort2"; - name = "Resort Bolt Control"; - normaldoorcontrol = 1; - pixel_y = -24; - specialfunctions = 4 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafedorms) -"bod" = ( -/obj/effect/turf_decal/trimline/dark_green/filled/warning{ - dir = 6 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"bqc" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/item/storage/fancy/candle_box/pear{ - pixel_y = 10 - }, -/obj/item/storage/fancy/candle_box/vanilla{ - pixel_y = 4 - }, -/turf/open/floor/wood, -/area/centcom/interlink) -"brL" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"bsj" = ( -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"bsT" = ( -/obj/machinery/status_display/evac/directional/north, -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/iron, -/area/centcom/interlink) -"btJ" = ( -/obj/machinery/door/airlock{ - id_tag = "stall2"; - name = "Stall" - }, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"btN" = ( -/obj/structure/sign/painting/large/library{ - dir = 4 - }, -/turf/open/floor/carpet/cyan, -/area/centcom/holding/cafe) -"buc" = ( -/obj/structure/plaque/static_plaque/golden/captain{ - pixel_x = -32 - }, -/obj/effect/turf_decal/trimline/dark_green/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"bul" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, -/turf/open/floor/wood/parquet, -/area/centcom/interlink) -"buX" = ( -/obj/machinery/vending/hydronutrients{ - products = list(/obj/item/reagent_containers/cup/bottle/nutrient/ez = 50, /obj/item/reagent_containers/cup/bottle/nutrient/l4z = 20, /obj/item/reagent_containers/cup/bottle/nutrient/rh = 10, /obj/item/reagent_containers/spray/pestspray = 30, /obj/item/reagent_containers/syringe = 5, /obj/item/storage/bag/plants = 30, /obj/item/cultivator = 10, /obj/item/shovel/spade = 10, /obj/item/plant_analyzer = 10) - }, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"bwP" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - name = "Interlink Longue" - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"bxg" = ( -/obj/machinery/chem_master, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"bxj" = ( -/obj/machinery/light/warm/directional/north, -/turf/open/floor/wood, -/area/centcom/interlink) -"bxz" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/wood, -/area/centcom/interlink) -"bAr" = ( -/obj/structure/flora/biolumi/flower{ - light_power = 0.3; - light_range = 10; - random_light = null - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"bBX" = ( -/obj/structure/closet/secure_closet/personal, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"bCB" = ( -/obj/machinery/door/window/brigdoor/left/directional/north{ - name = "Interlink Wardens Office"; - req_access = list("armory") - }, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"bDa" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"bDM" = ( -/obj/machinery/door/airlock/centcom{ - name = "Communications Access" - }, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/effect/mapping_helpers/airlock/access/any/cent_com/rep_or_captain, -/turf/open/floor/iron, -/area/centcom/interlink) -"bEI" = ( -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"bFi" = ( -/turf/open/misc/beach/coast{ - dir = 10 - }, -/area/centcom/holding/cafepark) -"bFy" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ - dir = 1 - }, -/turf/open/misc/asteroid, -/area/cruiser_dock) -"bFN" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/obj/machinery/time_clock/directional/west, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"bGx" = ( -/obj/item/clothing/suit/costume/xenos, -/obj/item/clothing/head/costume/xenos, -/obj/structure/alien/weeds, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"bGE" = ( -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/door/airlock/wood{ - id_tag = "ghostcafecabinjap"; - name = "Shinto Cabin" - }, -/obj/structure/fans/tiny/invisible, -/turf/open/floor/carpet, -/area/centcom/holding/cafedorms) -"bGH" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"bIf" = ( -/obj/machinery/biogenerator, -/turf/closed/indestructible/wood, -/area/centcom/holding/cafe) -"bJb" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Interlink Security Post" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/general, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"bKf" = ( -/obj/machinery/shower/directional/east, -/turf/open/floor/iron/freezer, -/area/centcom/interlink) -"bLN" = ( -/obj/effect/turf_decal/trimline/green/filled/arrow_cw{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/green/filled/arrow_ccw{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"bNh" = ( -/obj/structure/chair/sofa/bench{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"bNi" = ( -/obj/machinery/computer/cryopod/directional/west, -/obj/machinery/cryopod/quiet{ - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"bNC" = ( -/obj/machinery/door/airlock{ - id_tag = "room5"; - name = "Cabin" - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"bOl" = ( -/obj/effect/turf_decal/siding/white/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/arrow_cw{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"bQZ" = ( -/obj/structure/reagent_dispensers/plumbed, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"bRc" = ( -/obj/machinery/vending/dorms, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"bTH" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 4 - }, -/obj/effect/landmark/latejoin, -/turf/open/floor/iron, -/area/centcom/interlink) -"bTK" = ( -/obj/effect/turf_decal/siding{ - color = "#2e2e2e"; - dir = 1 - }, -/turf/open/floor/bamboo, -/area/centcom/holding/cafedorms) -"bTR" = ( -/obj/structure/table/reinforced, -/obj/item/book/manual/wiki/security_space_law{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"bUg" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 1 - }, -/obj/machinery/light/warm/directional/south, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"bUO" = ( -/obj/structure/bed/double, -/obj/item/bedsheet/random/double, -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"bVx" = ( -/obj/machinery/vending/boozeomat/cafe, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"bVH" = ( -/obj/machinery/door/poddoor/shutters/window/indestructible{ - id = "interlink_hall"; - name = "Windowed Interlink Access Shutters" - }, -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/floor/iron, -/area/centcom/interlink) -"bWw" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 1 - }, -/obj/effect/light_emitter/interlink, -/obj/structure/flora/bush/flowers_br/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"bWy" = ( -/obj/machinery/button/door/directional/east{ - id = "arr_hall_lookout"; - name = "Lookout Shutters Control"; - pixel_y = -8; - req_access = list("command") - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"bXF" = ( -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"bYH" = ( -/obj/effect/turf_decal/siding/wood/corner, -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green{ - pixel_y = 6 - }, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"cal" = ( -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"cbF" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/item/kirbyplants/random, -/obj/machinery/button/door/directional/south{ - id = "room4"; - name = "Door Lock"; - normaldoorcontrol = 1; - pixel_x = -8; - specialfunctions = 4 - }, -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"cdj" = ( -/obj/structure/table/wood, -/obj/item/clipboard{ - pixel_y = 10 - }, -/obj/item/folder/blue{ - pixel_y = 19 - }, -/obj/item/flashlight/lamp/green{ - pixel_y = 5 - }, -/turf/open/floor/wood, -/area/centcom/interlink) -"cfs" = ( -/obj/structure/alien/weeds, -/obj/effect/decal/remains/xeno/larva, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"cfu" = ( -/turf/open/floor/grass, -/area/centcom/interlink) -"che" = ( -/obj/effect/light_emitter/interlink, -/obj/effect/turf_decal/weather/dirt{ - dir = 4 - }, -/obj/structure/flora/bush/flowers_br/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"chT" = ( -/obj/structure/table/wood, -/obj/item/fishing_rod, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"chZ" = ( -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"ckg" = ( -/obj/machinery/door/window/left/directional/north{ - name = "Resort Bar" - }, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"ckD" = ( -/obj/item/pillow, -/turf/open/floor/carpet/red, -/area/centcom/interlink) -"ckG" = ( -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/obj/structure/bookcase/random/religion, -/turf/open/floor/iron, -/area/centcom/interlink) -"ckV" = ( -/turf/closed/indestructible/fakedoor{ - desc = "Why would you want to go back, you just got here!"; - name = "Central Command Security Dock" - }, -/area/centcom/interlink) -"ckY" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/weeds/node, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"cmV" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 5 - }, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"cqC" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4 - }, -/obj/effect/landmark/latejoin, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 10 - }, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron, -/area/centcom/interlink) -"cra" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, -/turf/open/floor/wood, -/area/centcom/interlink) -"crf" = ( -/obj/structure/chair/sofa/bench/corner, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 5 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"crl" = ( -/obj/structure/curtain, -/obj/effect/turf_decal/siding/white, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"crI" = ( -/obj/effect/turf_decal/sand{ - density = 1 - }, -/obj/effect/decal/fakelattice, -/turf/open/floor/pod/light{ - density = 1 - }, -/area/centcom/holding/cafepark) -"csC" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 4 - }, -/turf/open/floor/wood/parquet, -/area/centcom/interlink) -"cuF" = ( -/obj/item/trench_tool, -/obj/item/tank/internals/emergency_oxygen/double, -/obj/item/storage/belt/holster/nukie, -/obj/item/clothing/glasses/night, -/obj/item/radio/headset/syndicate/alt, -/obj/structure/closet/syndicate{ - desc = "It's a personal storage unit for operative gear." - }, -/obj/effect/turf_decal/bot_white, -/obj/item/clothing/suit/armor/vest, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"cuM" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"cwh" = ( -/obj/machinery/light/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/centcom/holding/cafe) -"cwA" = ( -/obj/effect/turf_decal/trimline/blue/filled/arrow_cw{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"cxX" = ( -/obj/structure/closet/syndicate{ - desc = "It's a personal storage unit for operative gear." - }, -/obj/item/trench_tool, -/obj/item/tank/internals/emergency_oxygen/double, -/obj/item/storage/belt/holster/nukie, -/obj/item/clothing/glasses/night, -/obj/item/radio/headset/syndicate/alt, -/obj/effect/turf_decal/bot_white, -/obj/machinery/light/cold/directional/north, -/obj/item/clothing/suit/armor/vest, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"cyc" = ( -/obj/structure/chair/sofa/bench/corner, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 5 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"czd" = ( -/obj/effect/turf_decal/siding/white/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/green/filled/corner, -/obj/effect/turf_decal/trimline/green/filled/arrow_cw{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"czF" = ( -/obj/machinery/door/airlock{ - id_tag = "stall3"; - name = "E-Stall" - }, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"cAI" = ( -/obj/structure/chair/sofa/bench{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"cBm" = ( -/obj/machinery/door/window/left/directional/east{ - name = "Resort Cafe" - }, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"cBq" = ( -/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, -/obj/effect/turf_decal/siding/white/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"cBR" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"cBT" = ( -/obj/structure/spacevine, -/obj/structure/alien/weeds, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"cCZ" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/chair/sofa/right/brown, -/obj/structure/sign/painting/large/library{ - dir = 1 - }, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"cFK" = ( -/obj/machinery/light/directional/east, -/obj/effect/turf_decal/tile/green/opposingcorners, -/turf/open/floor/iron, -/area/centcom/interlink) -"cGt" = ( -/obj/effect/turf_decal/trimline/dark_green/filled/warning, -/turf/open/floor/iron, -/area/centcom/interlink) -"cGG" = ( -/turf/open/floor/mineral/titanium/blue, -/area/centcom/interlink) -"cHY" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 6 - }, -/turf/open/floor/grass, -/area/centcom/interlink) -"cIk" = ( -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"cKf" = ( -/obj/structure/chair/stool/directional/south, -/turf/open/floor/iron, -/area/centcom/interlink) -"cKZ" = ( -/obj/effect/turf_decal/siding/white{ - dir = 9 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"cLD" = ( -/obj/structure/table, -/obj/item/storage/medkit/regular{ - pixel_x = 8; - pixel_y = 10 - }, -/obj/item/storage/medkit/regular{ - pixel_y = 6 - }, -/obj/effect/turf_decal/delivery/blue, -/turf/open/floor/iron, -/area/centcom/interlink) -"cMh" = ( -/obj/structure/table/wood, -/obj/item/clipboard, -/obj/item/folder/red, -/turf/open/floor/wood, -/area/centcom/interlink) -"cMs" = ( -/obj/structure/table/wood, -/obj/item/stamp/centcom{ - pixel_x = -8; - pixel_y = 10 - }, -/obj/item/stamp{ - pixel_y = 10 - }, -/obj/item/stamp/void{ - pixel_x = 8; - pixel_y = 10 - }, -/turf/open/floor/wood, -/area/centcom/interlink) -"cMM" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/obj/structure/table/optable, -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"cNa" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark, -/turf/open/misc/asteroid, -/area/cruiser_dock) -"cNw" = ( -/obj/structure/flora/bush/fullgrass/style_random, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"cOV" = ( -/obj/machinery/door/airlock/centcom{ - name = "Administrative Offices" - }, -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/any/cent_com/rep_or_captain, -/turf/open/floor/iron, -/area/centcom/interlink) -"cQq" = ( -/obj/effect/turf_decal/weather/dirt, -/obj/structure/hedge, -/obj/effect/light_emitter/interlink, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"cRs" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"cTQ" = ( -/obj/machinery/photocopier, -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"cUF" = ( -/obj/effect/turf_decal/box/corners{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"cVm" = ( -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"cVK" = ( -/obj/effect/turf_decal/sand, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 8 - }, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"cWF" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp{ - pixel_y = 4 - }, -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"cWG" = ( -/obj/machinery/light/directional/west, -/obj/structure/table{ - name = "Jim Norton's Quebecois Coffee table" - }, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"cWL" = ( -/obj/machinery/light/cold/directional/east, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/centcom/interlink) -"cXb" = ( -/obj/effect/turf_decal/siding{ - color = "#2e2e2e" - }, -/turf/closed/indestructible/weeb, -/area/centcom/holding/cafedorms) -"cYb" = ( -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"cYc" = ( -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/centcom/interlink) -"cYT" = ( -/obj/structure/closet{ - name = "Cryogenics Sleepware" - }, -/obj/item/clothing/under/misc/pj/blue, -/obj/item/clothing/under/misc/pj/blue, -/obj/item/clothing/head/costume/nightcap/blue, -/obj/item/clothing/head/costume/nightcap/blue, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"cZJ" = ( -/obj/structure/flora/tree/palm, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"dai" = ( -/obj/item/flashlight/flare/torch{ - pixel_x = -4; - pixel_y = -10; - start_on = 1 - }, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"dau" = ( -/obj/machinery/door/airlock/wood/glass{ - desc = "A strange small bar. It's actually remarkably close to Space Station 13."; - name = "Library" - }, -/obj/structure/fans/tiny/invisible, -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"dbZ" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 4 - }, -/obj/structure/flora/bush/fullgrass/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"dcM" = ( -/obj/effect/landmark/start/assaultop, -/obj/structure/chair/plastic{ - dir = 8 - }, -/turf/open/floor/carpet/red, -/area/cruiser_dock) -"dcP" = ( -/obj/structure/closet/secure_closet/freezer/kitchen/all_access, -/turf/open/floor/iron/showroomfloor, -/area/centcom/holding/cafe) -"deD" = ( -/obj/machinery/status_display/shuttle{ - pixel_y = -32; - shuttle_id = "arrivals_shuttle" - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"dfL" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 1 - }, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"dgo" = ( -/obj/item/trench_tool, -/obj/item/tank/internals/emergency_oxygen/double, -/obj/item/storage/belt/holster/nukie, -/obj/item/clothing/glasses/night, -/obj/item/radio/headset/syndicate/alt, -/obj/structure/closet/syndicate{ - desc = "It's a personal storage unit for operative gear." - }, -/obj/effect/turf_decal/bot_white, -/obj/machinery/light/cold/directional/north, -/obj/item/clothing/suit/armor/vest, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"dgV" = ( -/turf/open/floor/iron/white, -/area/centcom/interlink/dorm_rooms) -"djn" = ( -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/centcom/holding/cafe) -"dky" = ( -/obj/structure/flora/tree/jungle/style_4, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"dkD" = ( -/obj/machinery/door/window/brigdoor/left/directional/south{ - name = "Interlink Cell"; - req_access = list("brig") - }, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/smooth, -/area/centcom/interlink) -"dkE" = ( -/obj/machinery/light/cold/directional/south, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"dkR" = ( -/obj/effect/light_emitter/interlink, -/obj/effect/turf_decal/weather/dirt{ - dir = 8 - }, -/obj/effect/turf_decal/weather/dirt{ - dir = 4 - }, -/turf/open/floor/grass, -/area/centcom/interlink) -"dmb" = ( -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"dmO" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark, -/obj/machinery/light/cold/directional/east, -/turf/open/misc/asteroid, -/area/cruiser_dock) -"dmR" = ( -/obj/effect/spawner/random/vending/snackvend, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"drE" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/wood/parquet, -/area/centcom/interlink) -"dsH" = ( -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"dsW" = ( -/obj/item/storage/basket, -/obj/effect/light_emitter/interlink, -/turf/open/floor/carpet/red, -/area/centcom/interlink) -"dtL" = ( -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"duT" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/machinery/light/cold/directional/north, -/turf/open/misc/asteroid, -/area/cruiser_dock) -"dwx" = ( -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/turf/open/floor/iron, -/area/centcom/interlink) -"dxP" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 1 - }, -/obj/effect/light_emitter/interlink, -/obj/structure/flora/bush/fullgrass/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"dyE" = ( -/obj/machinery/light/directional/west, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"dyI" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4; - greyscale_colors = "#B4CDDC" - }, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/centcom/interlink) -"dAC" = ( -/obj/effect/turf_decal/siding/white{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"dAM" = ( -/obj/effect/spawner/random/vending/colavend, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"dBJ" = ( -/obj/structure/table, -/turf/open/floor/plating, -/area/centcom/interlink) -"dCa" = ( -/obj/machinery/door/airlock/bathroom{ - name = "Unisex Bathroom" - }, -/obj/effect/turf_decal/siding/white, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/centcom/interlink) -"dDo" = ( -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"dDp" = ( -/obj/structure/sign/poster/random/directional/south, -/turf/open/floor/wood, -/area/centcom/interlink) -"dFj" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Interlink Medbay" - }, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron, -/area/centcom/interlink) -"dFF" = ( -/obj/structure/sign/directions/security{ - dir = 8; - pixel_y = -8 - }, -/obj/structure/sign/directions/medical, -/obj/structure/sign/directions/arrival{ - dir = 1; - pixel_y = 8 - }, -/turf/closed/indestructible/riveted, -/area/centcom/interlink) -"dGD" = ( -/obj/effect/turf_decal/trimline/dark_green/filled/warning{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"dHD" = ( -/obj/machinery/light/floor, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"dHP" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"dIw" = ( -/obj/structure/flora/bush/large, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"dII" = ( -/turf/open/floor/iron/stairs/medium{ - dir = 1 - }, -/area/cruiser_dock) -"dLq" = ( -/obj/structure/sign/poster/random/directional/north, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"dOC" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/item/megaphone, -/obj/item/clothing/mask/whistle, -/obj/item/binoculars, -/turf/open/floor/wood, -/area/centcom/holding/cafepark) -"dOP" = ( -/obj/structure/table/glass/plasmaglass, -/obj/item/storage/box/beakers{ - pixel_x = -4; - pixel_y = 9 - }, -/obj/item/storage/box/syringes{ - pixel_x = 4; - pixel_y = 9 - }, -/obj/item/gun/syringe/syndicate, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"dPd" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4; - name = "Interlink Locker Room" - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"dPq" = ( -/obj/structure/closet/secure_closet/personal, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 6 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"dPx" = ( -/obj/effect/spawner/random/vending/colavend, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"dRs" = ( -/obj/structure/closet/crate/freezer, -/obj/item/food/canned/tomatoes, -/obj/item/food/canned/tomatoes, -/obj/item/food/canned/tomatoes, -/obj/item/food/canned/tomatoes, -/obj/item/food/canned/tomatoes, -/obj/item/food/canned/jellyfish, -/obj/item/food/canned/jellyfish, -/obj/item/food/canned/jellyfish, -/obj/item/food/canned/jellyfish, -/obj/item/food/canned/jellyfish, -/obj/item/food/fishmeat/moonfish, -/obj/item/food/fishmeat/moonfish, -/obj/item/food/fishmeat/moonfish, -/obj/item/food/fishmeat/moonfish, -/obj/item/food/fishmeat/moonfish, -/obj/item/food/moonfish_eggs, -/obj/item/food/moonfish_eggs, -/obj/item/food/moonfish_eggs, -/obj/item/food/moonfish_eggs, -/obj/item/food/moonfish_eggs, -/turf/open/floor/iron/showroomfloor, -/area/centcom/holding/cafe) -"dRE" = ( -/obj/effect/landmark/latejoin, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"dSt" = ( -/turf/open/floor/iron/stairs/right{ - dir = 1 - }, -/area/cruiser_dock) -"dTl" = ( -/obj/effect/turf_decal/siding/wood, -/obj/machinery/light/very_dim/directional/north, -/turf/open/floor/wood, -/area/centcom/interlink) -"dUh" = ( -/obj/machinery/light/directional/south, -/turf/open/floor/plating/abductor, -/area/centcom/holding/cafe) -"dVb" = ( -/obj/effect/turf_decal/weather/dirt, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"dVh" = ( -/obj/machinery/door/airlock{ - id_tag = "room2"; - name = "Cabin" - }, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"dVo" = ( -/obj/structure/chair/sofa/corp/right, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/carpet/purple, -/area/centcom/holding/cafe) -"dXJ" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/turf/open/floor/wood, -/area/centcom/interlink) -"dXN" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - name = "Interlink Bar" - }, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"eaT" = ( -/obj/structure/bookcase/random/fiction, -/turf/open/floor/wood, -/area/centcom/interlink) -"ebz" = ( -/obj/effect/turf_decal/arrows/red{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"ecW" = ( -/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, -/obj/effect/turf_decal/siding/white/corner, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"egn" = ( -/obj/structure/bed/maint, -/obj/item/toy/figure/prisoner, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/holding/cafe) -"egr" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/cruiser_dock) -"egv" = ( -/obj/effect/turf_decal/trimline/green/filled/arrow_cw{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white, -/obj/structure/chair/sofa/bench, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"egW" = ( -/obj/machinery/vending/dorms, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"ehI" = ( -/obj/structure/dresser{ - pixel_y = 7 - }, -/obj/item/flashlight/lamp/green{ - pixel_x = -3; - pixel_y = 22 - }, -/turf/open/floor/carpet/red, -/area/centcom/holding/cafedorms) -"ekp" = ( -/obj/structure/table/wood, -/obj/item/soap/deluxe, -/turf/open/floor/sepia, -/area/centcom/holding/cafedorms) -"eks" = ( -/obj/item/toy/beach_ball, -/turf/open/misc/beach/coast/corner{ - dir = 4 - }, -/area/centcom/holding/cafepark) -"ekE" = ( -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/structure/chair/stool/bar/directional/east, -/turf/open/floor/iron, -/area/centcom/interlink) -"emo" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ - dir = 1 - }, -/turf/open/floor/iron/smooth_edge{ - dir = 4 - }, -/area/cruiser_dock) -"enb" = ( -/obj/machinery/vending/cigarette, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"enf" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/machinery/vending/imported{ - default_price = 0; - extended_inventory = 1; - extra_price = 0; - fair_market_price = 0 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"eof" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark, -/obj/machinery/light/cold/directional/west, -/turf/open/misc/asteroid, -/area/cruiser_dock) -"epr" = ( -/obj/structure/chair/sofa/left/brown, -/turf/open/floor/wood, -/area/centcom/holding/cafedorms) -"eqS" = ( -/obj/machinery/duct, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"erP" = ( -/obj/machinery/vending/dorms, -/turf/open/floor/iron/showroomfloor, -/area/centcom/holding/cafe) -"esx" = ( -/obj/effect/decal/cleanable/xenoblood, -/obj/structure/alien/weeds, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"esD" = ( -/obj/structure/table, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"esP" = ( -/obj/machinery/shower/directional/south, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"etn" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"evd" = ( -/obj/structure/closet/crate/wooden, -/obj/item/stack/sheet/mineral/stone, -/obj/item/stack/sheet/mineral/stone, -/obj/item/stack/sheet/mineral/stone, -/obj/item/stack/sheet/mineral/stone, -/obj/item/stack/sheet/mineral/stone, -/turf/open/misc/dirt/planet, -/area/centcom/interlink) -"evs" = ( -/obj/structure/railing/corner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"exf" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 4 - }, -/obj/effect/landmark/latejoin, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"ezk" = ( -/obj/structure/table{ - name = "Jim Norton's Quebecois Coffee table" - }, -/obj/item/coffee_cartridge/decaf{ - pixel_y = 10 - }, -/obj/item/coffee_cartridge/decaf{ - pixel_y = 6 - }, -/obj/item/coffee_cartridge/fancy, -/obj/machinery/status_display/shuttle{ - pixel_y = 32; - shuttle_id = "arrivals_shuttle" - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"eAc" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/light/small/directional/south, -/obj/machinery/status_display/shuttle{ - pixel_y = -32; - shuttle_id = "arrivals_shuttle" - }, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"eAA" = ( -/turf/closed/indestructible/fakedoor{ - desc = "Why would you want to go back, you just got here!"; - name = "ERT Bay" - }, -/area/centcom/interlink) -"eBz" = ( -/obj/effect/spawner/random/vending/snackvend, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"eEg" = ( -/turf/open/floor/carpet/blue, -/area/centcom/holding/cafepark) -"eFV" = ( -/obj/effect/turf_decal/trimline/green/filled/arrow_cw, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"eGf" = ( -/obj/structure/toilet{ - dir = 1 - }, -/obj/machinery/button/door/directional/south{ - id = "stall1"; - name = "Door Lock"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"eHo" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"eJP" = ( -/obj/structure/table/reinforced, -/obj/item/folder{ - pixel_x = -6; - pixel_y = 8 - }, -/obj/item/folder/blue{ - pixel_x = -4; - pixel_y = 5 - }, -/obj/item/folder/yellow{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/item/stamp{ - pixel_x = 8; - pixel_y = 12 - }, -/obj/item/stamp/denied{ - pixel_x = 8; - pixel_y = 6 - }, -/obj/item/stamp/void{ - pixel_x = 8 - }, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"eKr" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/turf/open/floor/iron/smooth, -/area/centcom/interlink) -"eLt" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Interlink Medbay" - }, -/obj/effect/turf_decal/siding/white/corner{ - dir = 1 - }, -/obj/structure/sign/departments/medbay/alt/directional/north, -/obj/effect/turf_decal/trimline/blue/filled/arrow_cw, -/turf/open/floor/iron, -/area/centcom/interlink) -"eLQ" = ( -/obj/effect/turf_decal/trimline/dark_green/line{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"eMg" = ( -/obj/machinery/chem_heater/withbuffer, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"eNn" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"eOx" = ( -/obj/structure/chair/sofa/bench{ - dir = 8 - }, -/obj/effect/landmark/latejoin, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"ePw" = ( -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/structure/closet/secure_closet/personal, -/turf/open/floor/iron, -/area/centcom/interlink) -"eRc" = ( -/obj/machinery/door/poddoor/shutters/indestructible{ - id = "evac_hall"; - name = "Interlink Access Shutters" - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"eRB" = ( -/obj/structure/flora/bush/flowers_pp/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"eSk" = ( -/obj/structure/flora/bush/flowers_pp/style_random, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"eSC" = ( -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"eTo" = ( -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/wood/parquet, -/area/centcom/interlink) -"eVe" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"eWR" = ( -/obj/structure/deployable_barricade/guardrail{ - dir = 1 - }, -/turf/open/floor/iron/smooth_edge, -/area/cruiser_dock) -"eXg" = ( -/obj/structure/chair/stool/bar/directional/west, -/turf/open/floor/iron, -/area/centcom/interlink) -"eXh" = ( -/obj/item/kirbyplants/potty, -/turf/open/floor/iron/smooth_edge{ - dir = 8 - }, -/area/cruiser_dock) -"eYD" = ( -/obj/structure/closet/secure_closet/brig{ - id = "Cell 3"; - name = "Cell 3 Locker" - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron, -/area/centcom/interlink) -"eYX" = ( -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"eZb" = ( -/obj/structure/alien/weeds, -/obj/effect/decal/remains/human, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"faI" = ( -/obj/effect/turf_decal/siding/white/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"faN" = ( -/obj/effect/turf_decal/siding/white/corner, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"fbn" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = 9; - pixel_y = 11 - }, -/obj/item/reagent_containers/condiment/peppermill{ - dir = 1; - pixel_x = 9; - pixel_y = 2 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"fcW" = ( -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/bookcase/random/religion, -/turf/open/floor/iron, -/area/centcom/interlink) -"fdo" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"fdJ" = ( -/obj/effect/landmark/start/assaultop, -/obj/structure/chair/office/light{ - dir = 8 - }, -/turf/open/floor/carpet/red, -/area/cruiser_dock) -"fiC" = ( -/obj/structure/closet/crate/bin, -/obj/item/paper/crumpled{ - pixel_x = 7; - pixel_y = 6 - }, -/obj/item/paper/crumpled{ - pixel_x = -2; - pixel_y = -4 - }, -/obj/item/paper/crumpled, -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/centcom/interlink) -"fmq" = ( -/obj/structure/frame/computer, -/turf/open/floor/plating, -/area/centcom/interlink) -"fol" = ( -/turf/open/floor/iron/stairs/medium{ - dir = 8 - }, -/area/cruiser_dock) -"fov" = ( -/turf/closed/indestructible/fakedoor{ - desc = "Why would you want to go back, you just got here!"; - name = "Central Command Dock" - }, -/area/centcom/interlink) -"foI" = ( -/obj/machinery/status_display/evac/directional/north, -/obj/effect/turf_decal/trimline/dark_green/line, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"fqg" = ( -/turf/open/floor/iron/smooth, -/area/centcom/interlink) -"fsl" = ( -/obj/structure/chair/sofa/bench{ - dir = 4 - }, -/obj/effect/landmark/latejoin, -/turf/open/floor/iron, -/area/centcom/interlink) -"fua" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 8; - name = "Interlink Longue" - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"fvx" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/vending/wardrobe/coroner_wardrobe/ghost_cafe, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"fwc" = ( -/obj/effect/turf_decal/sand, -/obj/structure/chair/stool/bar/directional/west{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/asteroid/line, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"fwr" = ( -/obj/machinery/light/floor{ - alpha = 0; - invisibility = 100; - light_range = 10; - nightshift_light_power = 10 - }, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"fxE" = ( -/obj/structure/chair/sofa/bench/right{ - greyscale_colors = "#AA8A61" - }, -/turf/open/floor/wood, -/area/centcom/interlink) -"fzV" = ( -/obj/structure/rack, -/obj/item/pushbroom, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"fAL" = ( -/obj/effect/turf_decal/tile/blue/full, -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "GhostCafeMedical" - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "ghostcafemedical" - }, -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"fCt" = ( -/obj/machinery/light/directional/west, -/obj/effect/turf_decal/trimline/dark_green/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"fEg" = ( -/obj/structure/toilet{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink/dorm_rooms) -"fFe" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/chair/sofa/corp/left{ - dir = 1 - }, -/turf/open/floor/carpet/purple, -/area/centcom/holding/cafe) -"fFr" = ( -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/structure/showcase/fakesec{ - name = "\improper Cafe security records" - }, -/obj/structure/fence{ - dir = 1; - pixel_x = -18 - }, -/turf/open/floor/iron, -/area/centcom/holding/cafe) -"fFy" = ( -/obj/effect/light_emitter/interlink, -/obj/effect/turf_decal/weather/dirt{ - dir = 5 - }, -/turf/open/floor/grass, -/area/centcom/interlink) -"fGC" = ( -/obj/structure/chair/sofa/bench, -/obj/effect/landmark/latejoin, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"fHl" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 1 - }, -/obj/effect/light_emitter/interlink, -/obj/structure/flora/bush/flowers_pp/style_random, -/obj/structure/flora/bush/fullgrass/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"fHA" = ( -/obj/structure/closet/secure_closet/freezer/kitchen, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/freezer, -/area/centcom/interlink) -"fHV" = ( -/obj/structure/flora/bush/flowers_br/style_random, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"fIS" = ( -/obj/structure/flora/bush/fullgrass/style_random, -/obj/structure/flora/bush/flowers_pp/style_random, -/obj/structure/flora/bush/flowers_br/style_random, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"fIY" = ( -/obj/effect/turf_decal/weather/dirt, -/obj/effect/light_emitter/interlink, -/obj/structure/flora/bush/flowers_yw/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"fJQ" = ( -/obj/effect/light_emitter/interlink, -/obj/structure/flora/bush/fullgrass/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"fMM" = ( -/obj/machinery/duct, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"fOb" = ( -/obj/structure/fans/tiny/invisible, -/obj/machinery/door/airlock/wood{ - name = "Medical" - }, -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"fOv" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - name = "Interlink Public Garden" - }, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"fPn" = ( -/obj/structure/flora/bush/fullgrass/style_random, -/obj/effect/light_emitter/interlink, -/obj/structure/fence, -/turf/open/floor/grass, -/area/centcom/interlink) -"fQt" = ( -/mob/living/basic/crab{ - name = "Bait" - }, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"fRe" = ( -/obj/structure/fluff/beach_umbrella/science, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"fSs" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 1 - }, -/obj/effect/light_emitter/interlink, -/turf/open/misc/dirt/planet, -/area/centcom/interlink) -"fTu" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/glass/shaker{ - pixel_x = 1; - pixel_y = 13 - }, -/obj/item/reagent_containers/cup/rag, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"fTz" = ( -/obj/effect/turf_decal/trimline/green/line{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"fTV" = ( -/obj/structure/spacevine{ - name = "thick vines"; - opacity = 1 - }, -/turf/open/water/beach, -/area/centcom/holding/cafepark) -"fVh" = ( -/obj/structure/closet/crate/trashcart, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"fVr" = ( -/obj/effect/light_emitter/interlink, -/obj/effect/turf_decal/weather/dirt, -/turf/open/floor/grass, -/area/centcom/interlink) -"fWc" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"fYY" = ( -/obj/machinery/light/small/directional/east, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"gap" = ( -/obj/machinery/vending/boozeomat, -/obj/effect/turf_decal/trimline/green/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"gcK" = ( -/obj/structure/punching_bag, -/turf/open/floor/plating, -/area/cruiser_dock) -"geG" = ( -/turf/open/floor/iron/stairs, -/area/centcom/holding/cafepark) -"gfW" = ( -/obj/structure/sign/directions/security{ - dir = 8; - pixel_y = -8 - }, -/obj/structure/sign/directions/medical, -/obj/structure/sign/directions/arrival{ - dir = 4; - pixel_y = 8 - }, -/turf/closed/indestructible/riveted, -/area/centcom/interlink) -"ggb" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafepark) -"git" = ( -/obj/structure/table/glass/plasmaglass, -/obj/machinery/reagentgrinder{ - pixel_x = -7; - pixel_y = 5 - }, -/obj/item/reagent_containers/cup/beaker{ - pixel_x = 8; - pixel_y = 14 - }, -/obj/item/stack/sheet/mineral/plasma, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"gjd" = ( -/obj/effect/turf_decal/trimline/dark_green/line, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"gjj" = ( -/turf/open/misc/beach/coast{ - dir = 1 - }, -/area/centcom/holding/cafepark) -"gjK" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/poddoor/shutters/indestructible{ - id = "il_bar"; - name = "Interlink Bar Shutters" - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"gmE" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/under/rank/prisoner/supermax, -/obj/item/clothing/under/rank/prisoner/supermax, -/obj/item/clothing/under/rank/prisoner/supermax, -/obj/item/clothing/under/rank/prisoner/skirt/supermax, -/obj/item/clothing/under/rank/prisoner/skirt/supermax, -/obj/item/clothing/under/rank/prisoner/skirt/supermax, -/obj/item/clothing/under/rank/prisoner/skirt/protcust, -/obj/item/clothing/under/rank/prisoner/skirt/protcust, -/obj/item/clothing/under/rank/prisoner/skirt/protcust, -/obj/item/clothing/under/rank/prisoner/skirt/lowsec, -/obj/item/clothing/under/rank/prisoner/skirt/lowsec, -/obj/item/clothing/under/rank/prisoner/skirt/lowsec, -/obj/item/clothing/under/rank/prisoner/skirt/highsec, -/obj/item/clothing/under/rank/prisoner/skirt/highsec, -/obj/item/clothing/under/rank/prisoner/skirt/highsec, -/obj/item/clothing/under/rank/prisoner/skirt, -/obj/item/clothing/under/rank/prisoner/skirt, -/obj/item/clothing/under/rank/prisoner/skirt, -/obj/item/clothing/under/rank/prisoner/protcust, -/obj/item/clothing/under/rank/prisoner/protcust, -/obj/item/clothing/under/rank/prisoner/protcust, -/obj/item/clothing/under/rank/prisoner/lowsec, -/obj/item/clothing/under/rank/prisoner/lowsec, -/obj/item/clothing/under/rank/prisoner/lowsec, -/obj/item/clothing/under/rank/prisoner/highsec, -/obj/item/clothing/under/rank/prisoner/highsec, -/obj/item/clothing/under/rank/prisoner/highsec, -/obj/item/clothing/under/rank/prisoner/classic, -/obj/item/clothing/under/rank/prisoner, -/obj/item/clothing/under/rank/prisoner, -/obj/item/clothing/under/rank/prisoner, -/obj/effect/turf_decal/tile/red/anticorner, -/obj/machinery/light/directional/east, -/obj/machinery/button/door{ - id = "ghostcafesec"; - name = "Detainment Lockdown"; - normaldoorcontrol = 1; - pixel_x = 26; - pixel_y = 5; - specialfunctions = 4 - }, -/obj/machinery/button/door{ - id = "ghostcafesec"; - name = "Cell Lockdown"; - pixel_x = 26; - pixel_y = -7 - }, -/obj/item/clothing/under/rank/prisoner/syndicate, -/obj/item/clothing/under/rank/prisoner/syndicate, -/turf/open/floor/iron, -/area/centcom/holding/cafe) -"goK" = ( -/obj/item/surgery_tray/full, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/structure/table/glass, -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"gpk" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/turf/open/misc/asteroid, -/area/cruiser_dock) -"grr" = ( -/obj/item/flashlight/flare/candle/infinite{ - pixel_x = 19; - pixel_y = -22 - }, -/turf/open/floor/bamboo, -/area/centcom/holding/cafedorms) -"gsc" = ( -/obj/structure/chair/sofa/corp/corner{ - dir = 8 - }, -/obj/machinery/light/warm/directional/south, -/turf/open/floor/wood/parquet, -/area/centcom/interlink) -"gsO" = ( -/obj/structure/table, -/obj/structure/bedsheetbin, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"gtZ" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 8 - }, -/obj/effect/landmark/latejoin, -/turf/open/floor/mineral/titanium, -/area/centcom/interlink) -"gup" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/machinery/button/door/directional/west{ - id = "room5"; - name = "Door Lock"; - normaldoorcontrol = 1; - pixel_y = -8; - specialfunctions = 4 - }, -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"guS" = ( -/obj/machinery/armament_station/assault_operatives, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"gyK" = ( -/obj/machinery/status_display/shuttle{ - pixel_y = 32; - shuttle_id = "arrivals_shuttle" - }, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"gAj" = ( -/obj/structure/sign/poster/random/directional/south, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"gAH" = ( -/obj/structure/table, -/obj/item/paper/pamphlet/centcom/visitor_info{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/paper/pamphlet/centcom/visitor_info, -/obj/machinery/light/very_dim/directional/west, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"gBj" = ( -/obj/item/modular_computer/pda/clear, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 8 - }, -/turf/open/floor/plating, -/area/centcom/interlink) -"gBR" = ( -/obj/machinery/door/airlock/medical{ - name = "Interlink Medical Cold Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"gCR" = ( -/turf/closed/wall/mineral/sandstone, -/area/centcom/holding/cafe) -"gDV" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/turf/open/floor/iron/smooth_edge{ - dir = 4 - }, -/area/cruiser_dock) -"gFA" = ( -/obj/effect/spawner/random/vending/colavend, -/obj/effect/turf_decal/bot_white, -/obj/structure/sign/poster/contraband/free_drone/directional/north, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"gIO" = ( -/obj/structure/chair/sofa/bench{ - dir = 4 - }, -/obj/effect/landmark/latejoin, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"gKe" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/table{ - name = "Jim Norton's Quebecois Coffee table" - }, -/obj/item/reagent_containers/condiment/sugar{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/reagent_containers/condiment/sugar{ - pixel_y = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"gKP" = ( -/obj/effect/turf_decal/siding/white/corner{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"gLq" = ( -/turf/open/floor/carpet, -/area/centcom/holding/cafedorms) -"gMw" = ( -/turf/closed/wall/mineral/sandstone, -/area/centcom/holding/cafedorms) -"gMy" = ( -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/structure/chair/office/light{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"gPj" = ( -/obj/effect/turf_decal/siding{ - color = "#2e2e2e" - }, -/obj/effect/turf_decal/siding{ - color = "#2e2e2e"; - dir = 10 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/item/flashlight/flare/candle/infinite{ - pixel_x = 15 - }, -/obj/machinery/button/door{ - id = "ghostcafecabinjap"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_y = -24; - specialfunctions = 4 - }, -/obj/machinery/light/warm/directional/west, -/turf/open/floor/bamboo, -/area/centcom/holding/cafedorms) -"gPN" = ( -/obj/effect/spawner/random/entertainment/arcade, -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/eighties, -/area/centcom/holding/cafe) -"gSD" = ( -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/closed/indestructible/weeb, -/area/centcom/holding/cafedorms) -"gUi" = ( -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron, -/area/centcom/interlink) -"gUC" = ( -/obj/structure/spacevine, -/turf/open/misc/beach/coast{ - dir = 4 - }, -/area/centcom/holding/cafepark) -"gWT" = ( -/obj/structure/table/wood, -/obj/item/toy/cards/deck/cas/black, -/obj/item/toy/cards/deck/wizoff, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"gXw" = ( -/obj/effect/turf_decal/weather/dirt, -/obj/effect/light_emitter/interlink, -/obj/structure/flora/bush/flowers_br/style_random, -/obj/structure/statue/sandstone/venus{ - name = "Order" - }, -/turf/open/floor/grass, -/area/centcom/interlink) -"hap" = ( -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/drinks/fullupgrade{ - density = 0 - }, -/obj/structure/sign/poster/contraband/starkist/directional/north, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"haE" = ( -/turf/open/floor/carpet/red, -/area/centcom/holding/cafedorms) -"hbE" = ( -/obj/structure/fence/interlink{ - dir = 4 - }, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"hcR" = ( -/turf/open/floor/wood/parquet, -/area/centcom/interlink) -"hdV" = ( -/obj/structure/fence{ - pixel_x = 17 - }, -/turf/closed/indestructible/syndicate, -/area/centcom/holding/cafe) -"hea" = ( -/obj/structure/table/wood, -/obj/item/paper_bin, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"heB" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 1 - }, -/obj/effect/light_emitter/interlink, -/obj/structure/flora/tree/jungle/small/style_5, -/turf/open/floor/grass, -/area/centcom/interlink) -"hge" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood, -/turf/closed/indestructible/weeb, -/area/centcom/holding/cafedorms) -"hjy" = ( -/obj/item/kirbyplants/organic/plant22, -/obj/effect/turf_decal/trimline/dark_green/line, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"hjK" = ( -/obj/machinery/light/directional/north, -/turf/closed/indestructible/riveted, -/area/centcom/interlink) -"hkQ" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/chair/stool/bar/directional/north, -/turf/open/floor/wood/parquet, -/area/centcom/interlink) -"hkT" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/turf/open/floor/iron/white, -/area/centcom/interlink/dorm_rooms) -"hlh" = ( -/obj/item/toy/plush/lizard_plushie/green{ - name = "Hisses-At-Mappers" - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"hmE" = ( -/obj/structure/sign/painting/library{ - pixel_y = -32 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"hnz" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/freezer, -/area/centcom/interlink) -"hoi" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4 - }, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"hoS" = ( -/obj/structure/sign/directions/arrival{ - dir = 1 - }, -/obj/structure/sign/directions/dorms{ - pixel_y = 8 - }, -/obj/structure/sign/directions/evac{ - pixel_y = -8 - }, -/turf/closed/indestructible/riveted, -/area/centcom/interlink) -"hoV" = ( -/obj/structure/closet/crate/freezer{ - name = "Cooler" - }, -/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/hcider{ - pixel_x = 7; - pixel_y = 9 - }, -/obj/item/reagent_containers/cup/glass/bottle/kahlua{ - pixel_x = 2; - pixel_y = 8 - }, -/obj/item/reagent_containers/cup/glass/bottle/gin{ - pixel_x = -7; - pixel_y = 15 - }, -/obj/item/reagent_containers/cup/glass/bottle/cognac{ - pixel_x = -10; - pixel_y = 7 - }, -/obj/machinery/light/directional/north, -/obj/item/reagent_containers/cup/glass/bottle/goldschlager, -/obj/item/reagent_containers/cup/glass/bottle/sake{ - pixel_x = 10; - pixel_y = 11 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"hpP" = ( -/obj/structure/fence{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/holding/cafe) -"hpR" = ( -/obj/effect/turf_decal/weather/dirt, -/obj/effect/light_emitter/interlink, -/obj/structure/flora/bush/fullgrass/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"hrF" = ( -/obj/effect/turf_decal/trimline/dark_green/line{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"hrS" = ( -/turf/open/misc/asteroid, -/area/cruiser_dock) -"hsr" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, -/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"huq" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4 - }, -/obj/effect/landmark/latejoin, -/turf/open/floor/mineral/titanium, -/area/centcom/interlink) -"hvy" = ( -/obj/machinery/door/poddoor/shuttledock/interlink, -/turf/open/floor/plating, -/area/centcom/interlink) -"hvQ" = ( -/turf/open/floor/iron, -/area/centcom/interlink) -"hyO" = ( -/obj/effect/turf_decal/box/corners, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"hyP" = ( -/obj/structure/chair/comfy/brown{ - dir = 1 - }, -/turf/open/floor/carpet/executive, -/area/centcom/interlink) -"hzz" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4 - }, -/obj/effect/landmark/latejoin, -/obj/effect/turf_decal/trimline/dark_green/filled/line, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron, -/area/centcom/interlink) -"hAk" = ( -/obj/machinery/door/morgue{ - name = "Adult Section" - }, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/turf/open/floor/wood, -/area/centcom/interlink) -"hAL" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Interlink Cryogenics" - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"hAW" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/light/directional/west, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"hBk" = ( -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"hEK" = ( -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron, -/area/centcom/interlink) -"hES" = ( -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"hHg" = ( -/obj/structure/chair/sofa/bench{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"hIH" = ( -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"hIU" = ( -/obj/structure/table/reinforced, -/obj/item/storage/toolbox/syndicate, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"hJl" = ( -/obj/structure/table, -/obj/effect/spawner/random/food_or_drink/donkpockets{ - pixel_y = 6 - }, -/obj/effect/spawner/random/food_or_drink/donkpockets{ - pixel_y = 11 - }, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"hLA" = ( -/obj/structure/table/wood, -/obj/item/folder/yellow{ - pixel_x = 3; - pixel_y = 7 - }, -/obj/item/folder/blue{ - pixel_x = -9; - pixel_y = -2 - }, -/obj/item/pen/blue{ - pixel_x = 3; - pixel_y = 4 - }, -/turf/open/floor/carpet/executive, -/area/centcom/interlink) -"hLW" = ( -/turf/open/floor/iron/smooth_edge, -/area/cruiser_dock) -"hNU" = ( -/obj/effect/turf_decal/siding/white/corner{ - dir = 4 - }, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"hPK" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"hQy" = ( -/obj/effect/turf_decal/delivery/white, -/obj/machinery/door/puzzle/keycard/assault_ops_chemistry, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"hSC" = ( -/obj/structure/table/wood, -/obj/item/folder{ - pixel_x = -7; - pixel_y = 5 - }, -/obj/item/pen/fountain{ - pixel_x = 3 - }, -/turf/open/floor/carpet/executive, -/area/centcom/interlink) -"hSU" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 1 - }, -/obj/structure/deployable_barricade/guardrail{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/cruiser_dock) -"hTh" = ( -/obj/machinery/door/poddoor/shutters/window/preopen, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron, -/area/centcom/interlink) -"hTD" = ( -/obj/structure/closet/crate/wooden, -/obj/item/stack/sheet/mineral/wood/fifty, -/obj/item/stack/sheet/mineral/wood/fifty, -/obj/item/lighter, -/turf/open/indestructible/hotelwood{ - desc = "It's really cozy! Great for soft paws!"; - icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi'; - icon_state = "carpet"; - name = "soft carpet" - }, -/area/centcom/holding/cafedorms) -"hVf" = ( -/obj/effect/turf_decal/siding/white/corner{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"hVC" = ( -/obj/structure/dresser, -/obj/machinery/light/warm/no_nightlight/directional/north, -/obj/structure/sign/painting/library{ - pixel_y = 32 - }, -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"hWy" = ( -/obj/structure/table/wood, -/obj/item/storage/fancy/donut_box, -/turf/open/floor/carpet/executive, -/area/centcom/interlink) -"hWX" = ( -/obj/structure/chair/sofa/bench{ - dir = 1 - }, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"hYP" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/closet/crate/freezer/blood, -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"hZk" = ( -/obj/structure/sink/directional/south, -/obj/structure/mirror/directional/north, -/obj/effect/landmark/latejoin, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"iax" = ( -/obj/effect/turf_decal/trimline/green/line, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"ibU" = ( -/obj/structure/chair/sofa/bench, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"icb" = ( -/turf/open/floor/mineral/titanium/tiled/white, -/area/cruiser_dock) -"icB" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/chair/sofa/left/brown, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"iel" = ( -/obj/effect/turf_decal/skyrat_decals/misc/handicapped, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"iem" = ( -/obj/effect/light_emitter/interlink, -/obj/effect/turf_decal/weather/dirt{ - dir = 8 - }, -/turf/open/floor/grass, -/area/centcom/interlink) -"ifp" = ( -/obj/structure/spacevine{ - name = "thick vines"; - opacity = 1 - }, -/turf/open/misc/beach/coast{ - dir = 4 - }, -/area/centcom/holding/cafepark) -"ifE" = ( -/obj/machinery/vending/cigarette/syndicate, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"ifV" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ - dir = 8 - }, -/turf/open/floor/iron/smooth_edge{ - dir = 4 - }, -/area/cruiser_dock) -"igp" = ( -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"iiV" = ( -/obj/item/trench_tool, -/obj/item/tank/internals/emergency_oxygen/double, -/obj/item/storage/belt/holster/nukie, -/obj/item/clothing/glasses/night, -/obj/item/radio/headset/syndicate/alt, -/obj/structure/closet/syndicate{ - desc = "It's a personal storage unit for operative gear." - }, -/obj/effect/turf_decal/bot_white, -/obj/machinery/light/cold/directional/south, -/obj/item/clothing/suit/armor/vest, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"ijv" = ( -/obj/machinery/modular_computer/preset/command, -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/iron, -/area/centcom/interlink) -"ikG" = ( -/obj/structure/table, -/obj/machinery/computer/libraryconsole, -/turf/open/floor/iron, -/area/centcom/interlink) -"ilq" = ( -/obj/machinery/computer/records/security, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"inr" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 5 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"ioa" = ( -/obj/machinery/duct, -/obj/effect/turf_decal/trimline/dark_green/filled/warning{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"iov" = ( -/obj/structure/flora/tree/jungle/small/style_random, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"ioz" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"ipc" = ( -/obj/structure/sign/poster/random/directional/east, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"iph" = ( -/obj/structure/flora/biolumi/lamp/weaklight{ - light_color = "#687487"; - light_range = 7 - }, -/turf/open/misc/dirt/planet, -/area/centcom/interlink) -"ipK" = ( -/obj/machinery/door/airlock/sandstone{ - id_tag = "ghostcaferesortbathroom1"; - name = "Resort Bathroom" - }, -/obj/structure/fans/tiny/invisible, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"iqO" = ( -/obj/structure/chair/stool/directional/north, -/turf/open/floor/iron, -/area/centcom/interlink) -"iqY" = ( -/obj/structure/flora/bush/sparsegrass, -/turf/open/floor/grass/fairy, -/area/centcom/holding/cafepark) -"irn" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 8 - }, -/obj/effect/landmark/latejoin, -/turf/open/floor/iron, -/area/centcom/interlink) -"ism" = ( -/obj/structure/filingcabinet/employment, -/obj/machinery/button/door/directional/south{ - id = "centshuttersjolly" - }, -/obj/effect/turf_decal/bot_white, -/obj/machinery/light/cold/no_nightlight/directional/west, -/turf/open/floor/iron/dark/textured_large, -/area/centcom/interlink) -"iuK" = ( -/obj/effect/light_emitter/interlink, -/turf/open/floor/carpet/red, -/area/centcom/interlink) -"iwF" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/vending/cigarette/beach, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"iwK" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4; - name = "Interlink Cafe" - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"iwU" = ( -/obj/structure/table/wood, -/obj/item/knife{ - pixel_x = 10; - pixel_y = 3 - }, -/obj/item/kitchen/rollingpin{ - pixel_x = -3; - pixel_y = 1 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"izj" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/centcom/interlink) -"iBc" = ( -/turf/open/floor/iron/smooth_edge{ - dir = 1 - }, -/area/cruiser_dock) -"iCz" = ( -/obj/structure/fans/tiny/invisible, -/obj/machinery/door/airlock/sandstone{ - id_tag = "ghostcaferesort1"; - name = "Beach Cabin" - }, -/turf/open/floor/wood, -/area/centcom/holding/cafedorms) -"iEd" = ( -/obj/structure/fireplace, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"iFY" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 5 - }, -/obj/structure/flora/bush/flowers_br/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"iGO" = ( -/obj/structure/bookcase/random/religion, -/turf/open/floor/wood, -/area/centcom/interlink) -"iGS" = ( -/obj/effect/turf_decal/siding{ - color = "#2e2e2e"; - dir = 1 - }, -/obj/machinery/button/curtain{ - id = "ghostcafecabinjapcurtain"; - pixel_x = 20; - pixel_y = -4 - }, -/turf/open/floor/bamboo, -/area/centcom/holding/cafedorms) -"iIb" = ( -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 5 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"iJK" = ( -/obj/effect/turf_decal/siding{ - color = "#2e2e2e"; - dir = 1 - }, -/turf/closed/indestructible/weeb, -/area/centcom/holding/cafedorms) -"iJX" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw, -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"iLl" = ( -/obj/effect/turf_decal/trimline/blue/filled/arrow_cw, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"iMl" = ( -/obj/effect/turf_decal/skyrat_decals/misc/handicapped, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"iMY" = ( -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"iOR" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark, -/obj/structure/deployable_barricade/guardrail, -/turf/open/floor/iron/smooth_large, -/area/cruiser_dock) -"iPs" = ( -/obj/effect/light_emitter/interlink, -/turf/open/misc/dirt/planet, -/area/centcom/interlink) -"iPU" = ( -/turf/open/floor/carpet/red, -/area/centcom/interlink) -"iQp" = ( -/obj/effect/turf_decal/tile/red/anticorner{ - dir = 4 - }, -/obj/machinery/light/directional/east, -/obj/machinery/vending/wardrobe/sec_wardrobe, -/turf/open/floor/iron, -/area/centcom/holding/cafe) -"iQP" = ( -/obj/item/kirbyplants/organic/plant22, -/obj/effect/turf_decal/trimline/dark_green/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"iRz" = ( -/obj/effect/turf_decal/weather/dirt, -/obj/structure/hedge, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"iTf" = ( -/obj/structure/chair/sofa/bench{ - dir = 4 - }, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"iUc" = ( -/obj/structure/table/glass/plasmaglass, -/obj/item/paper_bin{ - pixel_x = 6; - pixel_y = 4 - }, -/obj/item/clothing/glasses/science{ - pixel_x = -5; - pixel_y = 9 - }, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"iUg" = ( -/obj/machinery/chem_master/condimaster, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"iUm" = ( -/obj/machinery/griddle, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"iVr" = ( -/obj/structure/sink/directional/south, -/obj/structure/mirror/directional/north, -/turf/open/floor/iron/white, -/area/centcom/interlink/dorm_rooms) -"iVW" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/wood, -/area/centcom/interlink) -"iWF" = ( -/obj/effect/turf_decal/trimline/dark_green/filled/warning{ - dir = 6 - }, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron, -/area/centcom/interlink) -"iWY" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 4; - greyscale_colors = "#B4CDDC" - }, -/turf/open/floor/iron/freezer, -/area/centcom/interlink) -"iXq" = ( -/obj/structure/flora/tree/jungle, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"iXZ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/machinery/light, -/obj/machinery/vending/autodrobe, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"iYB" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plating, -/area/centcom/interlink) -"iYC" = ( -/obj/effect/turf_decal/siding{ - color = "#2e2e2e"; - dir = 8 - }, -/turf/open/floor/bamboo, -/area/centcom/holding/cafedorms) -"iZc" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/item/storage/fancy/cigarettes/cigars/havana{ - pixel_y = 7 - }, -/obj/item/reagent_containers/cup/glass/bottle/whiskey{ - pixel_x = -4; - pixel_y = 14 - }, -/turf/open/floor/iron/smooth_edge{ - dir = 8 - }, -/area/cruiser_dock) -"iZr" = ( -/obj/structure/table/wood, -/obj/machinery/reagentgrinder{ - pixel_x = -2; - pixel_y = 8 - }, -/obj/structure/sign/poster/contraband/pwr_game/directional/north, -/obj/item/reagent_containers/cup/soda_cans/skyrat/welding_fizz{ - pixel_x = 14; - pixel_y = 12 - }, -/obj/item/reagent_containers/cup/soda_cans/skyrat/welding_fizz{ - pixel_x = 14; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/soda_cans/skyrat/welding_fizz{ - pixel_x = 14 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"jaf" = ( -/obj/structure/table, -/turf/open/floor/iron, -/area/centcom/interlink) -"jbq" = ( -/obj/structure/chair/sofa/bench{ - dir = 8 - }, -/obj/effect/landmark/latejoin, -/turf/open/floor/mineral/titanium, -/area/centcom/interlink) -"jdx" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/vending/wardrobe/gene_wardrobe/ghost_cafe, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"jeI" = ( -/obj/machinery/cryopod/quiet{ - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"jeT" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/arrow_cw{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"jgg" = ( -/obj/effect/turf_decal/siding{ - color = "#2e2e2e" - }, -/turf/open/floor/bamboo, -/area/centcom/holding/cafedorms) -"jgT" = ( -/obj/effect/light_emitter/interlink, -/obj/structure/fence/corner, -/turf/open/floor/grass, -/area/centcom/interlink) -"jhu" = ( -/obj/machinery/duct, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"jhR" = ( -/turf/closed/indestructible/syndicate, -/area/centcom/holding/cafe) -"jiQ" = ( -/obj/structure/reagent_dispensers/watertank/high, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"jjQ" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"jnu" = ( -/obj/machinery/button/door/directional/east{ - id = "interlink_hall2"; - name = "Arrivals Hall Shutter Control"; - pixel_y = -8; - req_access = list("security") - }, -/obj/structure/closet/crate/bin, -/obj/item/paper/fluff/junkmail_generic{ - pixel_x = 7; - pixel_y = 5 - }, -/obj/item/paper/fluff/junkmail_redpill/true, -/obj/item/paper/fluff/junkmail_redpill{ - pixel_x = 1; - pixel_y = 8 - }, -/obj/item/paper/fluff/jobs/prisoner/letter, -/obj/item/paper/fluff/jobs/security/court_judgement{ - pixel_x = -5; - pixel_y = 1 - }, -/obj/machinery/light/cold/directional/east, -/obj/machinery/button/door/directional/east{ - id = "arriv_hall"; - name = "Arrivals Access Shutter Control"; - pixel_y = 8; - req_access = list("security") - }, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"joE" = ( -/obj/structure/chair/sofa/corp/left, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"jpl" = ( -/obj/structure/deployable_barricade/guardrail{ - dir = 4 - }, -/turf/open/floor/iron/smooth_edge{ - dir = 8 - }, -/area/cruiser_dock) -"jpJ" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 5 - }, -/turf/open/floor/plating, -/area/cruiser_dock) -"jqm" = ( -/obj/structure/closet/crate/freezer/blood, -/obj/effect/turf_decal/bot_blue, -/turf/open/floor/iron/freezer, -/area/centcom/interlink) -"jqo" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/structure/chair/sofa/bench/right{ - dir = 8 - }, -/obj/effect/landmark/latejoin, -/turf/open/floor/iron, -/area/centcom/interlink) -"jsN" = ( -/obj/machinery/light/directional/east, -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"jsY" = ( -/obj/machinery/vending/games, -/obj/machinery/light/small/directional/west, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"jtf" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 10 - }, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"jtl" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"juT" = ( -/obj/structure/table/wood, -/turf/open/floor/carpet/red, -/area/centcom/interlink) -"jvR" = ( -/obj/structure/noticeboard/directional/south, -/obj/structure/table/wood, -/obj/item/phone{ - pixel_y = -4 - }, -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"jxw" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/window/indestructible{ - id = "arriv_hall"; - name = "Windowed Interlink Access Shutters" - }, -/turf/open/floor/plating, -/area/centcom/interlink) -"jys" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/centcom/interlink) -"jzh" = ( -/obj/structure/table{ - name = "Jim Norton's Quebecois Coffee table" - }, -/obj/machinery/light/warm/directional/west, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"jzL" = ( -/obj/structure/spacevine{ - name = "thick vines"; - opacity = 1 - }, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"jAH" = ( -/obj/machinery/light/directional/north, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"jBF" = ( -/obj/machinery/button/curtain{ - id = "ghostcaferesort2curtain"; - pixel_x = -26 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafedorms) -"jFn" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/egg/burst, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"jGh" = ( -/obj/machinery/light/very_dim/directional/west, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"jGH" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin, -/obj/item/pen, -/turf/open/floor/iron/dark/textured_large, -/area/centcom/interlink) -"jHv" = ( -/obj/structure/bookcase/random/reference, -/turf/open/floor/wood, -/area/centcom/interlink) -"jHw" = ( -/obj/structure/sign/directions/arrival{ - dir = 1 - }, -/obj/structure/sign/directions/evac{ - pixel_y = -8 - }, -/obj/structure/sign/directions/dorms{ - dir = 4; - pixel_y = 8 - }, -/turf/closed/indestructible/riveted, -/area/centcom/interlink) -"jHB" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/chair/sofa/bench/right{ - dir = 1; - greyscale_colors = "#AA8A61" - }, -/obj/machinery/light/warm/directional/south, -/turf/open/floor/wood, -/area/centcom/interlink) -"jIj" = ( -/turf/open/floor/wood, -/area/centcom/holding/cafedorms) -"jKj" = ( -/obj/structure/bed/pod, -/turf/open/floor/iron, -/area/centcom/interlink) -"jNs" = ( -/obj/effect/turf_decal/loading_area/white{ - dir = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/cruiser_dock) -"jNB" = ( -/obj/machinery/light/floor{ - alpha = 0; - invisibility = 100; - light_range = 10; - nightshift_light_power = 10 - }, -/obj/structure/flora/biolumi/flower{ - light_power = 0.3; - light_range = 10; - random_light = null - }, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"jQJ" = ( -/obj/effect/turf_decal/bot, -/obj/structure/table, -/obj/item/hemostat/alien, -/obj/item/scalpel/alien, -/obj/item/circular_saw/alien, -/obj/item/retractor/alien, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"jRW" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"jSW" = ( -/obj/effect/light_emitter/interlink, -/obj/effect/turf_decal/weather/dirt, -/obj/structure/flora/bush/flowers_pp/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"jTQ" = ( -/obj/structure/closet/crate/bin, -/obj/item/paper/pamphlet/centcom/visitor_info, -/obj/item/paper/pamphlet/centcom/visitor_info{ - pixel_x = -9 - }, -/obj/item/paper/pamphlet/centcom/visitor_info{ - pixel_x = -3 - }, -/obj/item/paper/pamphlet/centcom/visitor_info{ - pixel_x = 3 - }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 6 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"jUm" = ( -/obj/structure/table, -/obj/item/storage/fancy/donut_box{ - pixel_x = 2; - pixel_y = 10 - }, -/obj/item/storage/fancy/donut_box{ - pixel_x = -4; - pixel_y = 3 - }, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"jUK" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Interlink Medbay" - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"jXq" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 1 - }, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"jXO" = ( -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"jZb" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/machinery/vending/imported/mothic{ - default_price = 0; - extended_inventory = 1; - extra_price = 0; - fair_market_price = 0 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"kdw" = ( -/obj/effect/light_emitter/interlink, -/obj/effect/turf_decal/weather/dirt{ - dir = 1 - }, -/obj/structure/flora/bush/flowers_yw/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"kdy" = ( -/obj/structure/sink/directional/south, -/obj/structure/mirror/directional/north, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"kdU" = ( -/obj/machinery/shower/directional/west, -/turf/open/floor/iron/white, -/area/centcom/interlink/dorm_rooms) -"keK" = ( -/obj/effect/turf_decal/box/corners{ - dir = 4 - }, -/obj/effect/turf_decal/box/corners, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"kfb" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - name = "Interlink Locker Room" - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"khz" = ( -/obj/structure/chair/sofa/bench/right, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"khC" = ( -/obj/machinery/button/door/directional/north{ - id = "il_kitchen"; - name = "Kitchen Shutter Control"; - pixel_x = -8; - req_access = list("kitchen") - }, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"kii" = ( -/turf/open/floor/iron/stairs/left{ - dir = 1 - }, -/area/cruiser_dock) -"kiU" = ( -/obj/machinery/light/directional/west, -/turf/open/floor/wood, -/area/centcom/interlink) -"kjb" = ( -/turf/closed/indestructible/rock, -/area/cruiser_dock) -"klI" = ( -/obj/docking_port/stationary{ - dir = 2; - dwidth = 25; - height = 50; - json_key = "emergency"; - name = "CentCom Emergency Shuttle Dock"; - shuttle_id = "emergency_away"; - width = 50 - }, -/turf/open/space/basic, -/area/space) -"kmD" = ( -/turf/closed/indestructible/fakedoor{ - desc = "Why would you want to go back, you just got here!"; - name = "Interlink Re-Education Room" - }, -/area/centcom/interlink) -"kmV" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - name = "Interlink Access" - }, -/obj/machinery/door/poddoor/shutters/indestructible{ - id = "evac_hall"; - name = "Interlink Access Shutters" - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"knx" = ( -/obj/structure/flora/bush/large/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"knL" = ( -/obj/structure/chair/sofa/right/brown, -/turf/open/floor/wood, -/area/centcom/holding/cafedorms) -"koF" = ( -/obj/effect/spawner/random/entertainment/arcade, -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/eighties, -/area/centcom/holding/cafe) -"kpg" = ( -/obj/structure/closet/cardboard, -/mob/living/simple_animal/bot/medbot{ - faction = list("Syndicate"); - maints_access_required = list(150); - name = "Kahn"; - radio_channel = "Syndicate" - }, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"kpC" = ( -/obj/effect/turf_decal/arrows{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"kqs" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_y = 5 - }, -/obj/item/pen, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"kqK" = ( -/obj/structure/table/wood, -/obj/machinery/fax{ - fax_name = "Interlink Meeting Room"; - pixel_y = 5 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"kqL" = ( -/turf/open/floor/iron/smooth, -/area/cruiser_dock) -"krJ" = ( -/obj/structure/flora/bush/fullgrass/style_random, -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"kvj" = ( -/turf/open/floor/plating, -/area/cruiser_dock) -"kvD" = ( -/obj/structure/sign/poster/random/directional/west, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"kvF" = ( -/obj/structure/urinal/directional/north, -/obj/effect/landmark/latejoin, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"kwp" = ( -/obj/machinery/status_display/evac/directional/south, -/obj/effect/turf_decal/trimline/dark_green/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"kxy" = ( -/obj/machinery/door/window/brigdoor/right/directional/south{ - name = "Interlink Cell"; - req_access = list("brig") - }, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/smooth, -/area/centcom/interlink) -"kzD" = ( -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"kzS" = ( -/obj/structure/closet/l3closet/security, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"kDh" = ( -/obj/structure/curtain/cloth/fancy/mechanical{ - id = "ghostcaferesort2curtain" - }, -/turf/closed/indestructible/fakeglass, -/area/centcom/holding/cafedorms) -"kDO" = ( -/obj/structure/chair/stool/bar/directional/west, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"kFE" = ( -/obj/structure/spacevine, -/obj/structure/fans/tiny/invisible, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"kGL" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/smooth_large, -/area/cruiser_dock) -"kGT" = ( -/obj/structure/fans/tiny/invisible, -/obj/machinery/door/airlock/sandstone{ - id_tag = "ghostcafebeachfreezer"; - name = "Beach Freezer" - }, -/turf/open/floor/iron/showroomfloor, -/area/centcom/holding/cafe) -"kHP" = ( -/obj/structure/chair/sofa/corp/left, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/wood, -/area/centcom/interlink) -"kHZ" = ( -/obj/structure/spacevine{ - name = "thick vines"; - opacity = 1 - }, -/obj/machinery/vending/wardrobe/sec_wardrobe/red, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"kJO" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/chair/sofa/middle/brown, -/obj/structure/sign/painting/large/library{ - dir = 1 - }, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"kKo" = ( -/obj/machinery/computer/records/security{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/centcom/interlink) -"kLZ" = ( -/obj/effect/light_emitter/interlink, -/obj/effect/turf_decal/weather/dirt, -/obj/structure/flora/bush/fullgrass/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"kMe" = ( -/turf/open/misc/beach/sand{ - desc = "There's been a recent disturbance right here, it's evident something must've been buried; but it's pretty deep. A faint, yet deep humming sound emanates from the spot as you get closer." - }, -/area/centcom/holding/cafepark) -"kMV" = ( -/obj/structure/flora/biolumi/flower{ - random_light = null - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"kNd" = ( -/obj/machinery/door/airlock/service{ - name = "Interlink Bar" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"kOf" = ( -/obj/item/food/grown/herbs, -/obj/item/food/grown/herbs, -/obj/item/food/grown/olive, -/obj/item/food/grown/olive, -/obj/item/food/grown/peanut, -/obj/item/food/grown/peanut, -/obj/item/food/grown/tea, -/obj/item/food/grown/tea, -/obj/structure/closet/secure_closet/freezer/empty{ - name = "produce freezer" - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/freezer, -/area/centcom/interlink) -"kOk" = ( -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/centcom/interlink) -"kOZ" = ( -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"kPg" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/light/directional/south, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"kPK" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"kQs" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Interlink Locker Room" - }, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"kSc" = ( -/obj/item/pickaxe, -/turf/open/misc/dirt/planet, -/area/centcom/interlink) -"kTe" = ( -/obj/structure/table/reinforced, -/obj/machinery/reagentgrinder{ - pixel_y = 8 - }, -/obj/machinery/light/warm/directional/north, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"kWA" = ( -/obj/effect/turf_decal/trimline/green/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"kWH" = ( -/turf/open/floor/iron/grimy, -/area/centcom/interlink) -"kYn" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/skill_station, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"kZB" = ( -/obj/machinery/light/directional/west, -/obj/structure/table, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"kZF" = ( -/obj/effect/turf_decal/weather/dirt, -/obj/effect/light_emitter/interlink, -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/structure/flora/bush/fullgrass/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"kZQ" = ( -/obj/machinery/modular_computer/preset/command{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"lba" = ( -/obj/machinery/computer/records/medical{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/centcom/interlink) -"lct" = ( -/obj/machinery/button/door{ - id = "ghostcaferesort1"; - name = "Resort Bolt Control"; - normaldoorcontrol = 1; - pixel_y = -24; - specialfunctions = 4 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafedorms) -"lcR" = ( -/turf/closed/indestructible/riveted, -/area/centcom/interlink/dorm_rooms) -"lgh" = ( -/obj/item/stack/sheet/mineral/wood/fifty, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"lgF" = ( -/obj/machinery/door/airlock/centcom{ - name = "Blueshield's Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/captain, -/obj/effect/turf_decal/siding/white, -/obj/effect/turf_decal/tile/green/opposingcorners, -/turf/open/floor/iron, -/area/centcom/interlink) -"lht" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/obj/structure/closet/crate/bin, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"lhF" = ( -/obj/machinery/computer/operating{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"lic" = ( -/obj/machinery/computer/records/security{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"liK" = ( -/obj/structure/reagent_dispensers/cooking_oil, -/turf/open/floor/iron/showroomfloor, -/area/centcom/holding/cafe) -"liU" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 6 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"ljS" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"lkn" = ( -/obj/structure/spacevine, -/turf/open/water/beach, -/area/centcom/holding/cafepark) -"lla" = ( -/obj/machinery/iv_drip, -/obj/effect/turf_decal/bot_blue, -/turf/open/floor/iron/freezer, -/area/centcom/interlink) -"lnP" = ( -/obj/structure/sign/poster/contraband/space_cola/directional/north, -/obj/machinery/vending/boozeomat/cafe, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"loD" = ( -/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" - }, -/turf/open/floor/iron/smooth_edge{ - dir = 8 - }, -/area/cruiser_dock) -"loR" = ( -/obj/structure/railing/corner{ - dir = 4 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"lrp" = ( -/obj/effect/turf_decal/trimline/dark_green/filled/corner, -/turf/open/floor/iron, -/area/centcom/interlink) -"lrB" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark/corner, -/turf/open/floor/plating, -/area/cruiser_dock) -"lsV" = ( -/obj/machinery/light/floor, -/obj/structure/railing, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"lvR" = ( -/obj/effect/turf_decal/trimline/dark_green/filled/warning{ - dir = 9 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"lwc" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 8 - }, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"lwt" = ( -/obj/structure/fence/door, -/turf/open/floor/iron, -/area/centcom/holding/cafe) -"lwv" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/vending/medical{ - pixel_x = -2 - }, -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"lxl" = ( -/obj/structure/chair/sofa/bench/right, -/obj/effect/landmark/latejoin, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"lzk" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green{ - pixel_y = 6 - }, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"lzr" = ( -/obj/structure/chair/plastic, -/obj/effect/landmark/start/assaultop, -/turf/open/floor/catwalk_floor/iron_smooth, -/area/cruiser_dock) -"lAd" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 1 - }, -/obj/machinery/light/cold/directional/east, -/turf/open/misc/asteroid, -/area/cruiser_dock) -"lAx" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/effect/turf_decal/caution{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"lCi" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, -/obj/structure/chair/stool/directional/south{ - dir = 1 - }, -/obj/item/clothing/under/shorts/red, -/obj/item/clothing/glasses/sunglasses, -/obj/item/clothing/under/shorts/red, -/turf/open/floor/wood, -/area/centcom/holding/cafepark) -"lFU" = ( -/obj/structure/table/wood, -/obj/item/folder/white{ - pixel_x = -8; - pixel_y = 3 - }, -/obj/item/pen/red{ - pixel_x = -3; - pixel_y = 9 - }, -/turf/open/floor/carpet/executive, -/area/centcom/interlink) -"lGc" = ( -/obj/machinery/door/airlock/centcom{ - name = "Administrative Confrence Room" - }, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/command/general, -/turf/open/floor/iron, -/area/centcom/interlink) -"lHT" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw, -/turf/open/floor/iron, -/area/centcom/interlink) -"lHZ" = ( -/obj/structure/mop_bucket, -/obj/machinery/duct, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"lIy" = ( -/obj/structure/chair/sofa/right/brown{ - dir = 1 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafedorms) -"lJi" = ( -/obj/structure/deployable_barricade/guardrail, -/turf/open/floor/iron/smooth_edge{ - dir = 1 - }, -/area/cruiser_dock) -"lJK" = ( -/obj/structure/fans/tiny/invisible, -/obj/machinery/door/airlock/sandstone{ - id_tag = "ghostcaferesort2"; - name = "Beach Cabin" - }, -/turf/open/floor/wood, -/area/centcom/holding/cafedorms) -"lLN" = ( -/obj/machinery/light/small/directional/north, -/turf/open/floor/sepia, -/area/centcom/holding/cafedorms) -"lNi" = ( -/obj/machinery/light/directional/north, -/obj/machinery/vending/boozeomat/cafe, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"lOD" = ( -/obj/structure/sign/directions/evac{ - pixel_y = -8 - }, -/obj/structure/sign/directions/arrival{ - dir = 1 - }, -/turf/closed/indestructible/riveted, -/area/centcom/interlink) -"lPi" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/centcom/interlink) -"lQq" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"lQB" = ( -/obj/structure/bed/double{ - dir = 8 - }, -/obj/item/bedsheet/dorms_double{ - dir = 8 - }, -/turf/open/floor/carpet/red, -/area/centcom/holding/cafedorms) -"lRF" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor/left/directional/south{ - req_access = list("cent_general") - }, -/obj/machinery/door/window/left/directional/north, -/turf/open/floor/iron/dark/textured_large, -/area/centcom/interlink) -"lSo" = ( -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/structure/table, -/obj/item/storage/medkit/regular{ - pixel_x = 8; - pixel_y = 10 - }, -/obj/item/storage/medkit/regular{ - pixel_y = 6 - }, -/obj/machinery/light/cold/directional/south, -/obj/effect/turf_decal/delivery/blue, -/turf/open/floor/iron, -/area/centcom/interlink) -"lSB" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/machinery/vending/imported/yangyu{ - default_price = 0; - extended_inventory = 1; - extra_price = 0; - fair_market_price = 0 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"lSJ" = ( -/obj/machinery/light/floor, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"lSY" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/structure/deployable_barricade/guardrail{ - dir = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/cruiser_dock) -"lTP" = ( -/obj/effect/light_emitter/interlink, -/obj/structure/flora/tree/jungle/style_6, -/turf/open/floor/grass, -/area/centcom/interlink) -"lVL" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"lXk" = ( -/obj/item/flashlight/lantern, -/turf/open/misc/dirt/planet, -/area/centcom/interlink) -"lXl" = ( -/obj/structure/easel, -/obj/item/canvas/nineteen_nineteen, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"lXo" = ( -/obj/machinery/oven/range, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"mac" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/structure/chair/sofa/bench/left{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"mbx" = ( -/obj/machinery/door/airlock/medical{ - name = "Interlink Operating Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"mcO" = ( -/obj/item/kirbyplants/organic/plant22, -/obj/machinery/light/warm/directional/north, -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/turf/open/floor/iron, -/area/centcom/interlink) -"mdD" = ( -/obj/structure/table/wood, -/obj/item/folder/yellow, -/obj/item/folder/blue{ - pixel_y = 4 - }, -/turf/open/floor/wood, -/area/centcom/interlink) -"mdT" = ( -/obj/structure/chair/comfy/black{ - dir = 4 - }, -/turf/open/floor/wood, -/area/centcom/interlink) -"mfN" = ( -/obj/structure/table{ - name = "Jim Norton's Quebecois Coffee table" - }, -/obj/machinery/door/window/left/directional/south{ - name = "Coffee Counter" - }, -/obj/item/reagent_containers/cup/glass/coffee_cup{ - pixel_x = -5; - pixel_y = 12 - }, -/obj/item/reagent_containers/cup/glass/coffee_cup{ - pixel_y = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"mjo" = ( -/obj/machinery/door/airlock/centcom{ - name = "Interlink Security Checkpoint" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/general, -/obj/effect/turf_decal/delivery/white, -/turf/open/floor/iron/dark/textured_large, -/area/centcom/interlink) -"mju" = ( -/obj/structure/table, -/obj/item/storage/medkit/o2{ - pixel_x = 8; - pixel_y = 10 - }, -/obj/item/storage/medkit/toxin{ - pixel_y = 6 - }, -/obj/effect/turf_decal/delivery/blue, -/obj/effect/turf_decal/trimline/blue/filled/corner, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"mjA" = ( -/obj/effect/turf_decal/trimline/dark_green/filled/warning{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"mjK" = ( -/obj/machinery/light/directional/east, -/obj/effect/turf_decal/trimline/dark_green/filled/warning{ - dir = 5 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"mmL" = ( -/obj/machinery/porta_turret/syndicate/assaultops/internal{ - system_id = "goldeneyebase" - }, -/turf/closed/indestructible/syndicate, -/area/cruiser_dock) -"mnj" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"mnS" = ( -/obj/effect/light_emitter/interlink, -/obj/structure/flora/bush/flowers_br/style_random, -/obj/structure/flora/bush/flowers_pp/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"moe" = ( -/obj/structure/closet, -/obj/item/clothing/under/rank/centcom/intern, -/obj/item/banner/command/mundane, -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/item/toner/extreme, -/turf/open/floor/iron, -/area/centcom/interlink) -"moG" = ( -/obj/item/kirbyplants/organic/plant22, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"mpl" = ( -/obj/machinery/status_display/evac/directional/west, -/turf/open/floor/wood, -/area/centcom/interlink) -"mqE" = ( -/obj/effect/turf_decal/trimline/dark_green/filled/corner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"mqS" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/machinery/button/door/directional/west{ - id = "room8"; - name = "Door Lock"; - normaldoorcontrol = 1; - pixel_y = -8; - specialfunctions = 4 - }, -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"mtr" = ( -/obj/structure/toilet/snappop{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/end{ - dir = 4; - pixel_y = -6 - }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 8; - pixel_y = -7 - }, -/turf/open/floor/sepia, -/area/centcom/holding/cafedorms) -"mtv" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"mvD" = ( -/turf/open/floor/iron/stairs/right{ - dir = 8 - }, -/area/cruiser_dock) -"mvL" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/machinery/door/window/brigdoor/left/directional/west{ - name = "Interlink Wardens Desk"; - req_access = list("armory") - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"mxj" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/cup/glass/shaker{ - pixel_x = -6; - pixel_y = 16 - }, -/obj/item/book/manual/wiki/barman_recipes{ - pixel_x = -4; - pixel_y = 2 - }, -/obj/item/reagent_containers/cup/rag{ - pixel_x = 9; - pixel_y = 3 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"mxQ" = ( -/obj/structure/table, -/turf/open/floor/carpet/red, -/area/cruiser_dock) -"mzf" = ( -/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"mzs" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/machinery/button/door{ - id = "ghostcaferesortbathroom2"; - name = "Resort Bolt Control"; - normaldoorcontrol = 1; - pixel_x = -25; - specialfunctions = 4 - }, -/obj/structure/mirror{ - pixel_y = -31 - }, -/obj/machinery/light/floor{ - alpha = 0; - invisibility = 100; - light_range = 10; - nightshift_light_power = 10 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"mzR" = ( -/obj/structure/fluff/beach_umbrella/cap, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"mBj" = ( -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/bookcase/random/reference, -/turf/open/floor/iron, -/area/centcom/interlink) -"mCr" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 6 - }, -/turf/open/floor/plating, -/area/cruiser_dock) -"mDs" = ( -/obj/structure/chair/sofa/bench{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 9 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"mDR" = ( -/obj/effect/light_emitter/interlink, -/obj/effect/turf_decal/weather/dirt, -/obj/structure/flora/bush/flowers_br/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"mEW" = ( -/obj/effect/turf_decal/sand, -/obj/structure/chair/stool/bar/directional/west{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"mHF" = ( -/obj/structure/sink/directional/east, -/turf/open/floor/iron, -/area/centcom/interlink) -"mHQ" = ( -/obj/structure/table, -/obj/machinery/microwave{ - pixel_y = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"mIk" = ( -/obj/machinery/vending/boozeomat/cafe, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"mJG" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 8 - }, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"mLa" = ( -/obj/effect/light_emitter/interlink, -/obj/effect/turf_decal/weather/dirt{ - dir = 1 - }, -/obj/effect/turf_decal/weather/dirt{ - dir = 4 - }, -/obj/effect/turf_decal/weather/dirt{ - dir = 9 - }, -/obj/structure/flora/bush/flowers_pp/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"mLK" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/vending/wardrobe/viro_wardrobe/ghost_cafe, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"mMu" = ( -/obj/structure/chair/sofa/bench{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"mMx" = ( -/obj/structure/spacevine, -/turf/open/misc/beach/coast{ - dir = 9 - }, -/area/centcom/holding/cafepark) -"mPR" = ( -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/machinery/iv_drip, -/obj/machinery/defibrillator_mount/loaded{ - pixel_x = 28 - }, -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"mSs" = ( -/turf/open/floor/iron/freezer, -/area/centcom/interlink) -"mTS" = ( -/obj/machinery/stasis{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"mUC" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/item/kirbyplants/random, -/obj/machinery/button/door/directional/south{ - id = "room3"; - name = "Door Lock"; - normaldoorcontrol = 1; - pixel_x = -8; - specialfunctions = 4 - }, -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"mVc" = ( -/obj/machinery/door/airlock/hatch{ - name = "Custodial Closet" - }, -/obj/machinery/duct, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"mXK" = ( -/turf/open/floor/iron/stairs/right{ - dir = 4 - }, -/area/cruiser_dock) -"mYg" = ( -/obj/machinery/door/airlock/survival_pod{ - name = "Transport Ship" - }, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"mZp" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/vehicle/ridden/wheelchair{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"nap" = ( -/mob/living/basic/crab{ - name = "Shelly" - }, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"nbv" = ( -/obj/structure/chair/sofa/corp/corner{ - dir = 4 - }, -/obj/machinery/light/warm/directional/north, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"nbB" = ( -/obj/machinery/light/warm/directional/south, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"ncr" = ( -/obj/machinery/deepfryer, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"ndc" = ( -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"nde" = ( -/obj/machinery/vending/coffee, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"ndy" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 1 - }, -/obj/machinery/light/cold/directional/west, -/turf/open/misc/asteroid, -/area/cruiser_dock) -"neb" = ( -/obj/structure/bed/abductor, -/turf/open/floor/plating/abductor, -/area/centcom/holding/cafe) -"ngg" = ( -/obj/structure/chair/stool/bar/directional/west, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"nii" = ( -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - dir = 1; - icon_state = "right"; - name = "Monkey Pen"; - pixel_y = 2; - req_access = list("genetics") - }, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"nim" = ( -/obj/effect/turf_decal/trimline/green/filled/arrow_cw{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"niJ" = ( -/obj/structure/closet/crate/bin, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"niQ" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/soda_cans/pwr_game{ - pixel_x = 2 - }, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"nlM" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/holding/cafe) -"noq" = ( -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"noA" = ( -/obj/structure/table{ - name = "Jim Norton's Quebecois Coffee table" - }, -/obj/machinery/coffeemaker{ - pixel_y = 10 - }, -/obj/machinery/light/warm/directional/north, -/obj/item/reagent_containers/cup/coffeepot{ - pixel_x = -7; - pixel_y = 3 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"npe" = ( -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/structure/bookcase/random/religion, -/turf/open/floor/iron, -/area/centcom/interlink) -"nps" = ( -/obj/structure/easel, -/obj/item/canvas/twentythree_twentythree, -/turf/open/floor/carpet/cyan, -/area/centcom/holding/cafe) -"nqQ" = ( -/obj/machinery/computer/cryopod/directional/north, -/obj/effect/landmark/latejoin, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"nqW" = ( -/obj/structure/table/wood, -/turf/open/floor/wood/parquet, -/area/centcom/interlink) -"nrl" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/effect/turf_decal/arrows{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"nsL" = ( -/obj/effect/turf_decal/box/corners{ - dir = 8 - }, -/obj/effect/turf_decal/box/corners{ - dir = 1 - }, -/obj/structure/shipping_container/gorlex, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"nsT" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"ntJ" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/rag, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"nxR" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/sign/poster/contraband/lusty_xenomorph/directional/south, -/obj/machinery/vending/wardrobe/jani_wardrobe/ghost_cafe, -/turf/open/indestructible/hoteltile{ - icon_state = "white" - }, -/area/centcom/holding/cafe) -"nyr" = ( -/turf/open/floor/iron/smooth_large, -/area/cruiser_dock) -"nzO" = ( -/obj/machinery/door/poddoor/shutters/window/preopen, -/turf/open/floor/iron, -/area/centcom/interlink) -"nAp" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/indestructible{ - id = "evac_hall_lookout"; - name = "Interlink Access Shutters" - }, -/turf/open/floor/plating, -/area/centcom/interlink) -"nCY" = ( -/obj/structure/bed/double, -/obj/item/bedsheet/random/double, -/obj/effect/turf_decal/siding/wood/corner, -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"nDE" = ( -/turf/open/floor/carpet/purple, -/area/centcom/holding/cafepark) -"nER" = ( -/turf/open/floor/iron/stairs/left{ - dir = 4 - }, -/area/cruiser_dock) -"nFH" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Interlink Garden" - }, -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"nHC" = ( -/obj/machinery/photocopier, -/obj/machinery/button/door/directional/south{ - id = "bs_shutters"; - name = "Privacy Shutter Comtrol"; - pixel_x = 8; - req_access = list("command") - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/wood, -/area/centcom/interlink) -"nHH" = ( -/mob/living/basic/chicken, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"nHK" = ( -/obj/structure/flora/bush/fullgrass/style_random, -/obj/effect/turf_decal/weather/dirt, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"nJp" = ( -/obj/effect/turf_decal/trimline/dark_green/filled/line, -/turf/open/floor/iron, -/area/centcom/interlink) -"nJO" = ( -/obj/effect/turf_decal/siding{ - color = "#2e2e2e" - }, -/obj/effect/turf_decal/siding{ - color = "#2e2e2e"; - dir = 6 - }, -/obj/item/kirbyplants/random, -/obj/machinery/light/warm/directional/east, -/turf/open/floor/bamboo, -/area/centcom/holding/cafedorms) -"nJQ" = ( -/obj/effect/turf_decal/arrows{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"nKt" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/chair/sofa/middle/brown, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"nKz" = ( -/obj/structure/table/abductor, -/turf/open/floor/plating/abductor, -/area/centcom/holding/cafe) -"nKJ" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 8 - }, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"nNe" = ( -/obj/structure/table, -/obj/item/pizzabox/pineapple, -/turf/open/floor/carpet/red, -/area/cruiser_dock) -"nOa" = ( -/obj/structure/table/reinforced, -/obj/item/folder{ - pixel_x = 8; - pixel_y = 8 - }, -/obj/item/folder/blue{ - pixel_x = 4; - pixel_y = 5 - }, -/obj/item/folder/yellow, -/obj/item/stamp{ - pixel_x = -8; - pixel_y = 12 - }, -/obj/item/stamp/denied{ - pixel_x = -8; - pixel_y = 6 - }, -/obj/item/stamp/void{ - pixel_x = -8 - }, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"nOb" = ( -/obj/machinery/door/airlock/centcom{ - name = "Nanotrasen Consultant's Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/cent_com/rep_door, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green/opposingcorners, -/turf/open/floor/iron, -/area/centcom/interlink) -"nOf" = ( -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_y = 5 - }, -/obj/item/pen, -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"nQm" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 1 - }, -/obj/effect/turf_decal/weather/dirt{ - dir = 8 - }, -/obj/effect/turf_decal/weather/dirt{ - dir = 4 - }, -/obj/effect/light_emitter/interlink, -/obj/structure/flora/bush/flowers_pp/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"nQF" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood/parquet, -/area/centcom/interlink) -"nRP" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/bookcase/random, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"nTO" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/turf/open/floor/iron/grimy, -/area/centcom/interlink) -"nYB" = ( -/obj/effect/turf_decal/siding/white{ - dir = 9 - }, -/obj/effect/landmark/latejoin, -/turf/open/floor/iron, -/area/centcom/interlink) -"nYF" = ( -/obj/effect/turf_decal/siding/wood/corner, -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"nZP" = ( -/obj/machinery/light/cold/directional/west, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"oab" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"oaD" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/turf_decal/skyrat_decals/misc/handicapped, -/turf/open/floor/wood/parquet, -/area/centcom/interlink) -"oaM" = ( -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/structure/table, -/obj/item/storage/medkit/brute{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/medkit/o2{ - pixel_x = -2; - pixel_y = -2 - }, -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"obP" = ( -/obj/effect/turf_decal/box/corners{ - dir = 1 - }, -/obj/structure/shipping_container/vitezstvi, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"ocT" = ( -/obj/structure/chair/stool/bar/directional/north, -/turf/open/floor/wood/parquet, -/area/centcom/interlink) -"oed" = ( -/obj/structure/table, -/obj/machinery/processor{ - pixel_y = 12 - }, -/turf/open/floor/iron/freezer, -/area/centcom/interlink) -"oei" = ( -/obj/effect/turf_decal/sand, -/obj/structure/sign/departments/restroom/directional/south, -/obj/machinery/light/directional/south, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"ofJ" = ( -/turf/open/misc/beach/coast{ - dir = 6 - }, -/area/centcom/holding/cafepark) -"ogq" = ( -/obj/structure/chair/comfy/brown{ - dir = 4 - }, -/turf/open/floor/wood, -/area/centcom/interlink) -"ogI" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/item/storage/box/matches, -/obj/machinery/light/very_dim/directional/south, -/turf/open/floor/wood, -/area/centcom/interlink) -"ojv" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/effect/turf_decal/arrows, -/turf/open/floor/iron, -/area/centcom/interlink) -"oln" = ( -/obj/effect/turf_decal/siding/dark_blue, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/centcom/interlink) -"olE" = ( -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"omh" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/plating, -/area/centcom/interlink) -"onb" = ( -/obj/machinery/door/poddoor/shutters/indestructible{ - id = "arriv_hall"; - name = "Interlink Access Shutters" - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"onf" = ( -/obj/structure/rack, -/obj/item/stack/sheet/mineral/wood, -/obj/item/stack/sheet/mineral/wood, -/obj/item/stack/sheet/mineral/wood, -/obj/item/stack/sheet/mineral/wood, -/obj/item/stack/sheet/mineral/wood, -/obj/item/lighter, -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"ooG" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/turf/open/floor/wood, -/area/centcom/interlink) -"osk" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/item/kirbyplants/random, -/obj/machinery/button/door/directional/south{ - id = "room1"; - name = "Door Lock"; - normaldoorcontrol = 1; - pixel_x = -8; - specialfunctions = 4 - }, -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"ouF" = ( -/obj/item/toy/plush/moth{ - name = "Buzz Buzz" - }, -/turf/open/floor/plating, -/area/centcom/interlink) -"ouJ" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white, -/obj/structure/chair/sofa/bench, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"ovH" = ( -/obj/machinery/vending/wardrobe/syndie_wardrobe/ghost_cafe{ - default_price = 0; - extra_price = 0; - fair_market_price = 0 - }, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"oxb" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 1 - }, -/obj/structure/flora/bush/flowers_br/style_random, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"oyi" = ( -/obj/item/reagent_containers/cup/soda_cans/dr_gibb{ - pixel_x = -8; - pixel_y = 12 - }, -/obj/item/reagent_containers/cup/soda_cans/dr_gibb{ - pixel_x = -8; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/soda_cans/dr_gibb{ - pixel_x = -8 - }, -/obj/item/reagent_containers/cup/soda_cans/pwr_game{ - pixel_x = 2; - pixel_y = 12 - }, -/obj/item/reagent_containers/cup/soda_cans/pwr_game{ - pixel_x = 2; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/soda_cans/pwr_game{ - pixel_x = 2 - }, -/obj/item/reagent_containers/cup/soda_cans/cola{ - pixel_x = 12; - pixel_y = 12 - }, -/obj/item/reagent_containers/cup/soda_cans/cola{ - pixel_x = 12; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/soda_cans/cola{ - pixel_x = 12 - }, -/obj/structure/table/wood, -/obj/structure/sign/poster/official/high_class_martini/directional/north, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"oyI" = ( -/obj/structure/flora/bush/fullgrass/style_random, -/obj/effect/turf_decal/weather/dirt{ - dir = 4 - }, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"oAn" = ( -/obj/structure/chair/sofa/bench/right, -/obj/effect/landmark/latejoin, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 9 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"oBf" = ( -/obj/structure/chair/sofa/bench{ - dir = 8 - }, -/obj/machinery/light/directional/east, -/obj/effect/landmark/latejoin, -/turf/open/floor/mineral/titanium, -/area/centcom/interlink) -"oCU" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 1 - }, -/obj/effect/light_emitter/interlink, -/obj/structure/flora/bush/flowers_br/style_random, -/obj/structure/flora/bush/large/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"oDs" = ( -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"oFj" = ( -/turf/open/floor/iron/smooth_corner{ - dir = 4 - }, -/area/cruiser_dock) -"oIK" = ( -/obj/effect/turf_decal/trimline/dark_green/filled/warning{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"oJo" = ( -/obj/effect/turf_decal/siding/white{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"oJP" = ( -/obj/machinery/iv_drip, -/obj/machinery/light/cold/directional/south, -/obj/effect/turf_decal/bot_blue, -/turf/open/floor/iron/freezer, -/area/centcom/interlink) -"oKM" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"oOC" = ( -/obj/effect/turf_decal/trimline/dark_green/filled/corner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"oOM" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 4 - }, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"oQR" = ( -/turf/closed/indestructible/fakedoor{ - name = "Base Access" - }, -/area/cruiser_dock) -"oQW" = ( -/obj/structure/chair/sofa/right/brown{ - dir = 1 - }, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"oSp" = ( -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_y = 5 - }, -/obj/item/pen/fourcolor, -/turf/open/floor/wood, -/area/centcom/interlink) -"oSG" = ( -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/machinery/button/door{ - id = "ghostcafemedical"; - pixel_x = 25 - }, -/obj/structure/table, -/obj/item/storage/medkit/fire{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/medkit/toxin{ - pixel_x = -3 - }, -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"oTx" = ( -/obj/machinery/shower/directional/west, -/turf/open/floor/iron/freezer, -/area/centcom/interlink) -"oVT" = ( -/obj/structure/curtain, -/obj/machinery/shower/directional/south, -/obj/structure/drain, -/obj/effect/turf_decal/siding/thinplating_new/end{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating_new/end, -/turf/open/indestructible/hoteltile{ - icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi'; - icon_state = "titanium_blue_old"; - name = "bathroom floor" - }, -/area/centcom/holding/cafedorms) -"oWR" = ( -/obj/effect/turf_decal/tile/yellow/half{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/obj/structure/mineral_door/paperframe{ - name = "Shinto Cabin Bedroom" - }, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/centcom/holding/cafedorms) -"oXS" = ( -/turf/open/floor/carpet/red, -/area/cruiser_dock) -"oYa" = ( -/obj/structure/chair/office, -/obj/machinery/button/door/directional/west{ - id = "interlink_hall"; - name = "Evac Hall Shutter Control"; - pixel_y = -8; - req_access = list("security") - }, -/obj/machinery/button/door/directional/west{ - id = "evac_hall"; - name = "Evac Access Shutter Control"; - pixel_y = 8; - req_access = list("security") - }, -/obj/machinery/light/cold/directional/west, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"pao" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 6 - }, -/obj/structure/deployable_barricade/guardrail{ - dir = 4 - }, -/obj/structure/deployable_barricade/guardrail, -/turf/open/floor/iron/smooth_large, -/area/cruiser_dock) -"pbz" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "ghostcafemedical" - }, -/turf/closed/indestructible/fakeglass, -/area/centcom/holding/cafe) -"pbP" = ( -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/effect/turf_decal/weather/dirt{ - dir = 8 - }, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"pcp" = ( -/obj/structure/flora/biolumi/flower{ - random_light = null - }, -/turf/open/misc/beach/sand{ - dir = 4 - }, -/area/centcom/holding/cafepark) -"pcH" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"pdC" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"pdW" = ( -/obj/structure/chair/sofa/bench{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"pgL" = ( -/obj/structure/chair/sofa/bench/right, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 9 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"phc" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood/corner, -/obj/machinery/light/warm/directional/east, -/obj/structure/sign/poster/random/directional/east, -/turf/open/floor/wood/parquet, -/area/centcom/interlink) -"phk" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"pkJ" = ( -/obj/item/flashlight/flare/candle/infinite{ - pixel_x = -19; - pixel_y = -23 - }, -/obj/item/fancy_pillow{ - pixel_x = -10; - pixel_y = -7 - }, -/turf/open/floor/bamboo, -/area/centcom/holding/cafedorms) -"pmu" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/obj/machinery/light/cold/directional/north, -/turf/open/misc/asteroid, -/area/cruiser_dock) -"pmI" = ( -/obj/structure/flora/bush/fullgrass/style_random, -/obj/structure/flora/bush/flowers_pp/style_random, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"pmJ" = ( -/obj/machinery/light/directional/west, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"pnu" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/turf/open/floor/mineral/titanium/tiled/white, -/area/cruiser_dock) -"pnH" = ( -/obj/effect/turf_decal/siding/wood/corner, -/turf/open/floor/wood, -/area/centcom/interlink) -"pnW" = ( -/obj/structure/chair/office, -/turf/open/floor/iron/grimy, -/area/centcom/interlink) -"pod" = ( -/obj/structure/flora/bush/flowers_br/style_random, -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"ppR" = ( -/turf/open/floor/bamboo, -/area/centcom/holding/cafedorms) -"pqX" = ( -/turf/open/floor/iron/stairs/left, -/area/cruiser_dock) -"pry" = ( -/obj/structure/closet/secure_closet/personal/cabinet, -/obj/item/condom_pack, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"prT" = ( -/obj/structure/chair/office/light{ - dir = 1 - }, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"psl" = ( -/obj/structure/closet/crate/cardboard, -/obj/item/reagent_containers/cup/glass/bottle/champagne, -/obj/item/reagent_containers/cup/glass/bottle/lizardwine, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"ptd" = ( -/obj/effect/spawner/random/entertainment/arcade, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/eighties, -/area/centcom/holding/cafe) -"puo" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/light/directional/east, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"pux" = ( -/obj/machinery/door/window/left/directional/west{ - dir = 1; - name = "Monkey Pen"; - pixel_y = 2; - req_access = list("genetics") - }, -/obj/machinery/light/directional/west, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"pvN" = ( -/turf/open/floor/iron/stairs/left{ - dir = 8 - }, -/area/cruiser_dock) -"pwV" = ( -/obj/effect/turf_decal/tile/red/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/holding/cafe) -"pxW" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/light/warm/directional/north, -/obj/effect/turf_decal/skyrat_decals/misc/handicapped, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"pzq" = ( -/obj/structure/curtain/cloth/fancy/mechanical{ - id = "ghostcaferesort1curtain" - }, -/turf/closed/indestructible/fakeglass, -/area/centcom/holding/cafedorms) -"pBj" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_green/filled/line, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron, -/area/centcom/interlink) -"pBW" = ( -/turf/closed/indestructible/weeb, -/area/centcom/holding/cafedorms) -"pCd" = ( -/turf/open/floor/sepia, -/area/centcom/holding/cafedorms) -"pCw" = ( -/obj/structure/rack, -/obj/item/reagent_containers/cup/rag, -/turf/open/floor/iron, -/area/centcom/interlink) -"pDd" = ( -/obj/machinery/door/airlock/centcom{ - name = "Administrative Offices" - }, -/obj/machinery/button/door/directional/west{ - id = "evac_hall_lookout"; - name = "Lookout Shutters Control"; - pixel_y = -8; - req_access = list("command") - }, -/obj/effect/turf_decal/trimline/dark_green/corner{ - dir = 4 - }, -/obj/machinery/door/poddoor/shutters/indestructible{ - id = "evac_hall_lookout"; - name = "Interlink Access Shutters" - }, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/effect/mapping_helpers/airlock/access/any/cent_com/rep_or_captain, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"pDN" = ( -/obj/structure/table, -/turf/open/floor/iron/white, -/area/centcom/interlink/dorm_rooms) -"pET" = ( -/obj/structure/flora/bush/flowers_yw, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"pFe" = ( -/obj/machinery/door/airlock/freezer{ - name = "Freezer" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, -/turf/open/floor/iron/freezer, -/area/centcom/interlink) -"pFr" = ( -/obj/effect/mapping_helpers/airlock/access/all/security/general, -/obj/machinery/door/airlock/security{ - name = "Interlink Security Processing" - }, -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/structure/sign/departments/security/directional/north, -/obj/effect/turf_decal/trimline/dark_red/filled/corner, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"pFt" = ( -/obj/structure/flora/bush/fullgrass/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"pFM" = ( -/obj/effect/light_emitter/interlink, -/obj/structure/fence/interlink{ - dir = 4 - }, -/turf/open/floor/grass, -/area/centcom/interlink) -"pGK" = ( -/obj/machinery/shower/directional/west, -/obj/structure/sink/directional/south, -/turf/open/indestructible/hoteltile{ - icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi'; - icon_state = "titanium_blue_old"; - name = "bathroom floor" - }, -/area/centcom/holding/cafedorms) -"pGZ" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/window/indestructible{ - id = "evac_hall"; - name = "Windowed Interlink Access Shutters" - }, -/turf/open/floor/plating, -/area/centcom/interlink) -"pHc" = ( -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"pHe" = ( -/obj/machinery/door/airlock/centcom{ - name = "Administrative Offices" - }, -/obj/effect/turf_decal/trimline/dark_green/corner, -/obj/machinery/door/poddoor/shutters/indestructible{ - id = "arr_hall_lookout"; - name = "Interlink Access Shutters" - }, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/effect/mapping_helpers/airlock/access/any/cent_com/rep_or_captain, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"pHi" = ( -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"pHG" = ( -/obj/structure/chair/sofa/left/brown{ - dir = 4 - }, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"pHQ" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 8 - }, -/obj/effect/landmark/latejoin, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"pKF" = ( -/obj/machinery/processor, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"pKV" = ( -/obj/effect/turf_decal/arrows/blue{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"pMg" = ( -/obj/machinery/door/airlock{ - id_tag = "room1"; - name = "Cabin" - }, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"pMm" = ( -/obj/machinery/photocopier, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"pMs" = ( -/obj/docking_port/stationary{ - dir = 8; - dwidth = 1; - height = 13; - name = "tram dock"; - roundstart_template = /datum/map_template/shuttle/arrivals_skyrat; - shuttle_id = "arrivals_shuttle"; - width = 5 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plating, -/area/centcom/interlink) -"pMN" = ( -/obj/structure/closet/secure_closet/personal, -/turf/open/floor/iron, -/area/centcom/interlink) -"pMT" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/carpet/blue, -/area/centcom/holding/cafedorms) -"pNf" = ( -/obj/item/toy/plush/bubbleplush, -/turf/closed/mineral/earth_like, -/area/centcom/holding/cafepark) -"pNF" = ( -/obj/effect/turf_decal/siding/white/corner{ - dir = 1 - }, -/turf/open/floor/iron/smooth, -/area/centcom/interlink) -"pNJ" = ( -/obj/effect/spawner/random/vending/snackvend, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"pOS" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/item/storage/fancy/candle_box{ - pixel_y = 10 - }, -/obj/item/storage/fancy/candle_box/amber{ - pixel_y = 4 - }, -/turf/open/floor/wood, -/area/centcom/interlink) -"pPH" = ( -/obj/structure/fans/tiny/invisible, -/obj/effect/turf_decal/caution/stand_clear, -/obj/machinery/door/airlock/security/old{ - id_tag = "ghostcafesec"; - name = "Detainment" - }, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"pPI" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - name = "Interlink" - }, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"pPO" = ( -/obj/effect/light_emitter/interlink, -/obj/structure/flora/tree/jungle/small/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"pQp" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood, -/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ - id = "ghostcafecabinjapcurtain" - }, -/turf/closed/indestructible/fakeglass, -/area/centcom/holding/cafedorms) -"pSt" = ( -/obj/effect/turf_decal/trimline/dark_green/filled/corner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"pSx" = ( -/obj/structure/toilet{ - dir = 1 - }, -/obj/machinery/button/door/directional/south{ - id = "stall2"; - name = "Door Lock"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"pST" = ( -/obj/structure/table{ - name = "Jim Norton's Quebecois Coffee table" - }, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"pTO" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor/right/directional/north{ - name = "Interlink Customs"; - req_access = list("cent_general") - }, -/obj/machinery/door/window/right/directional/south, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"pUJ" = ( -/turf/open/floor/plating/abductor, -/area/centcom/holding/cafe) -"pVh" = ( -/obj/machinery/photocopier, -/obj/machinery/button/door/directional/north{ - id = "ntrep_shutters"; - name = "Privacy Shutter Comtrol"; - pixel_x = 8; - req_access = list("command") - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/wood, -/area/centcom/interlink) -"pWk" = ( -/obj/machinery/door/airlock{ - id_tag = "room6"; - name = "Cabin" - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"pXn" = ( -/obj/machinery/button/door/directional/east{ - id = "evac_hall_lookout"; - name = "Lookout Shutters Control"; - pixel_y = -8; - req_access = list("command") - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"pXu" = ( -/obj/structure/chair/sofa/corp/corner{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"pYF" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 6 - }, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"pZh" = ( -/obj/structure/chair/sofa/bench{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"pZn" = ( -/mob/living/basic/crab{ - name = "Claws" - }, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"qaO" = ( -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/drinks/fullupgrade{ - density = 0; - dir = 1 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"qbk" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - name = "Interlink Access" - }, -/obj/machinery/door/poddoor/shutters/indestructible{ - id = "arriv_hall"; - name = "Interlink Access Shutters" - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"qbp" = ( -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"qbw" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"qdd" = ( -/obj/machinery/light/floor, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"qdp" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/obj/structure/deployable_barricade/guardrail{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/cruiser_dock) -"qey" = ( -/obj/effect/turf_decal/caution/stand_clear{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"qhn" = ( -/obj/machinery/light/very_dim/directional/east, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"qjh" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4 - }, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"qji" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/structure/chair/sofa/bench/left{ - dir = 4 - }, -/obj/effect/landmark/latejoin, -/turf/open/floor/iron, -/area/centcom/interlink) -"qkZ" = ( -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/effect/turf_decal/siding/wood/corner, -/turf/open/floor/iron, -/area/centcom/interlink) -"qna" = ( -/obj/structure/barricade/wooden, -/turf/open/misc/dirt/planet, -/area/centcom/interlink) -"qnk" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"qnA" = ( -/obj/structure/closet/crate, -/obj/item/storage/box/ingredients/vegetarian, -/obj/item/storage/box/ingredients/italian, -/obj/item/storage/box/ingredients/fruity, -/obj/item/storage/box/ingredients/fiesta, -/obj/item/storage/box/ingredients/american, -/obj/item/storage/box/ingredients/exotic, -/obj/item/reagent_containers/condiment/flour{ - list_reagents = list(/datum/reagent/consumable/flour = 90); - name = "large flour sack"; - possible_transfer_amounts = list(1,5,10,15,30,60,90); - volume = 90 - }, -/obj/item/reagent_containers/condiment/flour{ - list_reagents = list(/datum/reagent/consumable/flour = 90); - name = "large flour sack"; - possible_transfer_amounts = list(1,5,10,15,30,60,90); - volume = 90 - }, -/obj/item/reagent_containers/condiment/rice{ - list_reagents = list(/datum/reagent/consumable/rice = 90); - name = "large rice sack"; - possible_transfer_amounts = list(1,5,10,15,20,25,30,50,60,90) - }, -/obj/item/reagent_containers/condiment/rice{ - list_reagents = list(/datum/reagent/consumable/rice = 90); - name = "large rice sack"; - possible_transfer_amounts = list(1,5,10,15,20,25,30,50,60,90) - }, -/turf/open/floor/iron/showroomfloor, -/area/centcom/holding/cafe) -"qnB" = ( -/obj/structure/chair/sofa/bench/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/white/corner, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"qot" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 9 - }, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"qoB" = ( -/obj/structure/toilet/snappop{ - dir = 4 - }, -/obj/machinery/button/door{ - id = "ghostcaferesortbathroom1"; - name = "Resort Bolt Control"; - normaldoorcontrol = 1; - pixel_x = 25; - specialfunctions = 4 - }, -/obj/structure/mirror{ - pixel_y = -31 - }, -/obj/machinery/light/floor{ - alpha = 0; - invisibility = 100; - light_range = 10; - nightshift_light_power = 10 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"qpu" = ( -/obj/effect/turf_decal/sand, -/obj/structure/closet/crate/bin, -/obj/item/toy/plush/beeplushie{ - desc = "A cute toy that resembles an even cuter bee.... They don't smell very good"; - name = "Bin Bee" - }, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"qrv" = ( -/obj/structure/table{ - name = "Jim Norton's Quebecois Coffee table" - }, -/obj/item/coffee_cartridge{ - pixel_y = 10 - }, -/obj/item/coffee_cartridge{ - pixel_y = 6 - }, -/obj/item/coffee_cartridge/bootleg, -/turf/open/floor/iron, -/area/centcom/interlink) -"qsQ" = ( -/obj/machinery/stasis, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"qub" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 4 - }, -/turf/open/floor/grass, -/area/centcom/interlink) -"quB" = ( -/obj/effect/turf_decal/box/corners{ - dir = 8 - }, -/obj/effect/turf_decal/box/corners{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"qvk" = ( -/obj/machinery/oven/range, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"qwk" = ( -/obj/structure/chair/sofa/bench{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/green/filled/arrow_cw{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"qwo" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/vending/snack, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"qyu" = ( -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"qzE" = ( -/obj/structure/sign/poster/random/directional/west, -/obj/structure/chair/sofa/bench{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"qAW" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"qBC" = ( -/obj/machinery/vending/primitive_catgirl_clothing_vendor, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"qDc" = ( -/obj/machinery/door/window/left/directional/south{ - name = "Coffee Counter" - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/centcom/interlink) -"qEp" = ( -/turf/open/floor/iron/smooth_edge{ - dir = 8 - }, -/area/cruiser_dock) -"qEu" = ( -/obj/structure/sign/poster/random/directional/north, -/turf/open/floor/wood, -/area/centcom/interlink) -"qFG" = ( -/obj/machinery/light/directional/south, -/obj/machinery/status_display/shuttle{ - pixel_y = -32; - shuttle_id = "arrivals_shuttle" - }, -/obj/effect/turf_decal/trimline/blue/filled/line, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"qGW" = ( -/obj/structure/chair/comfy/brown, -/turf/open/floor/carpet/executive, -/area/centcom/interlink) -"qHc" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/vending/wardrobe/chem_wardrobe/ghost_cafe, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"qHJ" = ( -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"qIl" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ - dir = 4 - }, -/turf/open/floor/plating, -/area/cruiser_dock) -"qIY" = ( -/obj/effect/turf_decal/tile/green/opposingcorners, -/turf/open/floor/iron, -/area/centcom/interlink) -"qJm" = ( -/obj/structure/alien/weeds, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"qJA" = ( -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron, -/area/centcom/interlink) -"qJW" = ( -/obj/structure/chair/sofa/bench/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white/corner{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"qKi" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/vending/wardrobe/medi_wardrobe/ghost_cafe, -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"qLQ" = ( -/obj/machinery/washing_machine, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"qMl" = ( -/obj/machinery/vending/drugs, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"qPw" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4; - name = "Interlink Cafe" - }, -/turf/open/floor/wood/parquet, -/area/centcom/interlink) -"qQl" = ( -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"qRd" = ( -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/showroomfloor, -/area/centcom/holding/cafe) -"qRX" = ( -/obj/effect/turf_decal/weather/dirt, -/obj/effect/light_emitter/interlink, -/obj/structure/statue/sandstone/venus{ - dir = 1; - name = "Law" - }, -/turf/open/floor/grass, -/area/centcom/interlink) -"qTa" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"qTu" = ( -/obj/structure/table/wood, -/obj/machinery/reagentgrinder{ - pixel_y = 8 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"qWc" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood, -/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ - id = "ghostcafecabinjapcurtain" - }, -/obj/structure/fans/tiny/invisible, -/turf/closed/indestructible/fakeglass, -/area/centcom/holding/cafedorms) -"qWA" = ( -/obj/structure/table/wood, -/obj/machinery/reagentgrinder{ - pixel_x = 6 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"qWZ" = ( -/obj/effect/light_emitter/interlink, -/obj/structure/fluff/arc, -/turf/open/floor/grass, -/area/centcom/interlink) -"rah" = ( -/obj/structure/flora/bush/flowers_br/style_random, -/obj/effect/light_emitter/interlink, -/obj/structure/fence/interlink{ - dir = 4 - }, -/turf/open/floor/grass, -/area/centcom/interlink) -"raS" = ( -/obj/structure/closet/crate/cardboard/mothic, -/obj/item/storage/box/mothic_rations, -/obj/item/storage/box/mothic_rations, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"rbo" = ( -/obj/structure/table, -/obj/machinery/microwave{ - pixel_x = -2; - pixel_y = 7 - }, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"rbT" = ( -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/white, -/area/centcom/interlink/dorm_rooms) -"rcq" = ( -/obj/structure/table/reinforced, -/obj/item/restraints/handcuffs/fake, -/obj/item/restraints/handcuffs/fake, -/obj/item/restraints/handcuffs/fake, -/obj/effect/turf_decal/tile/red/anticorner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/holding/cafe) -"rfx" = ( -/obj/structure/reagent_dispensers/fueltank/large, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"rgK" = ( -/obj/docking_port/stationary{ - dir = 8; - dwidth = 17; - height = 13; - name = "Goldeneye Satellite Dock"; - roundstart_template = /datum/map_template/shuttle/goldeneye_cruiser; - shuttle_id = "goldeneye_cruiser_dock"; - width = 27 - }, -/turf/open/floor/plating, -/area/cruiser_dock) -"rhV" = ( -/obj/structure/table/reinforced, -/obj/item/folder{ - pixel_y = 7 - }, -/obj/item/folder/yellow{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"rjf" = ( -/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"rkm" = ( -/obj/machinery/vending/tool, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"rma" = ( -/obj/structure/railing/corner{ - dir = 1 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"rmA" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/machinery/button/door/directional/west{ - id = "room7"; - name = "Door Lock"; - normaldoorcontrol = 1; - pixel_y = -8; - specialfunctions = 4 - }, -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"rmZ" = ( -/obj/structure/table/reinforced, -/obj/machinery/dish_drive{ - pixel_y = 5 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"rne" = ( -/obj/item/paper{ - default_raw_text = "Hello valued Patron! The Cafe has underwent recent renovations! The most noticable additions are a horror themed 'Hive' room in the southeast (please note that due to this theme, there are currently no doors, managment is looking into adding them) and a Sci-Fi 'Alien abduction' theme, just south of the Drobe room. Thank you,\n -The Managment."; - name = "notice to visitors" - }, -/turf/open/indestructible/hoteltile{ - icon_state = "darkfull" - }, -/area/centcom/holding/cafe) -"rng" = ( -/obj/effect/turf_decal/weather/dirt, -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"rpG" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/turf/open/misc/asteroid, -/area/cruiser_dock) -"rrA" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/iron/dark/textured_large, -/area/centcom/interlink) -"rvf" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/smooth_large, -/area/cruiser_dock) -"rxB" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/turf/open/indestructible/hoteltile{ - icon_state = "cafeteria" - }, -/area/centcom/holding/cafe) -"rAe" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 1; - greyscale_colors = "#AA8A61" - }, -/turf/open/floor/wood, -/area/centcom/interlink) -"rDg" = ( -/obj/effect/light_emitter/interlink, -/obj/effect/turf_decal/weather/dirt{ - dir = 1 - }, -/turf/open/floor/grass, -/area/centcom/interlink) -"rDL" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"rFa" = ( -/obj/effect/turf_decal/siding/white/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"rGI" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4; - name = "Interlink Aux Garden" - }, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/effect/turf_decal/siding/white/corner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"rHY" = ( -/obj/structure/closet/secure_closet/personal/cabinet, -/obj/item/condom_pack, -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"rJC" = ( -/obj/structure/table/wood, -/obj/machinery/computer/libraryconsole/bookmanagement, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"rKk" = ( -/obj/structure/chair/plastic, -/turf/open/floor/iron/smooth, -/area/cruiser_dock) -"rKs" = ( -/obj/machinery/vending/dinnerware, -/obj/effect/turf_decal/siding/white/corner{ - dir = 4 - }, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"rKT" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor/left/directional/north{ - req_access = list("cent_general") - }, -/obj/machinery/door/window/left/directional/south, -/turf/open/floor/iron/dark/textured_large, -/area/centcom/interlink) -"rMn" = ( -/obj/structure/deployable_barricade/guardrail{ - dir = 8 - }, -/turf/open/floor/iron/smooth_edge{ - dir = 4 - }, -/area/cruiser_dock) -"rMy" = ( -/obj/structure/bed/pod{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"rMF" = ( -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"rMY" = ( -/obj/machinery/light/very_dim/directional/east, -/obj/effect/turf_decal/trimline/green/filled/arrow_cw{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"rNI" = ( -/obj/machinery/duct, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"rOf" = ( -/obj/machinery/door/window/left/directional/east{ - name = "Coffee Counter" - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"rPh" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/table/wood, -/obj/item/storage/medkit/regular{ - pixel_x = 3 - }, -/obj/item/storage/medkit/o2{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/reagent_containers/cup/glass/waterbottle, -/turf/open/floor/wood, -/area/centcom/holding/cafepark) -"rPm" = ( -/obj/effect/turf_decal/sand, -/obj/structure/closet{ - name = "beachwear closet" - }, -/obj/item/clothing/neck/beads, -/obj/item/clothing/neck/beads, -/obj/item/clothing/shoes/sandal{ - desc = "A very fashionable pair of flip-flops."; - name = "flip-flops" - }, -/obj/item/clothing/shoes/cookflops{ - desc = "A very fashionable pair of flip flops."; - name = "flip-flops" - }, -/obj/item/clothing/shoes/sandal{ - desc = "A very fashionable pair of flip-flops."; - name = "flip-flops" - }, -/obj/item/clothing/under/shorts/black, -/obj/item/clothing/under/shorts/blue, -/obj/item/clothing/under/shorts/green, -/obj/item/clothing/under/shorts/grey, -/obj/item/clothing/under/shorts/purple, -/obj/item/clothing/glasses/sunglasses, -/obj/item/clothing/glasses/sunglasses/big, -/obj/item/clothing/glasses/sunglasses, -/obj/item/clothing/suit/costume/wellworn_shirt/graphic/ian, -/obj/item/clothing/suit/costume/hawaiian, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"rPJ" = ( -/obj/item/kirbyplants/organic/plant22, -/turf/open/floor/iron/smooth, -/area/centcom/interlink) -"rQF" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/chair/sofa/bench/left{ - greyscale_colors = "#AA8A61" - }, -/obj/item/toy/plush/lizard_plushie/green{ - name = "Reads-The-Books" - }, -/obj/machinery/light/warm/directional/north, -/turf/open/floor/wood, -/area/centcom/interlink) -"rRv" = ( -/obj/machinery/door/airlock/centcom{ - name = "Blueshield's Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/captain, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green/opposingcorners, -/turf/open/floor/iron, -/area/centcom/interlink) -"rSa" = ( -/obj/effect/light_emitter/interlink, -/obj/structure/flora/bush/flowers_yw/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"rSK" = ( -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron, -/area/centcom/interlink) -"rTv" = ( -/obj/effect/turf_decal/siding/white{ - dir = 9 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/centcom/interlink) -"rTx" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw, -/obj/effect/turf_decal/siding/white{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"rTM" = ( -/obj/effect/turf_decal/siding/white/corner, -/obj/effect/turf_decal/trimline/blue/filled/arrow_cw{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"rTU" = ( -/obj/structure/sign/painting/large/library{ - dir = 1 - }, -/turf/open/floor/carpet/cyan, -/area/centcom/holding/cafe) -"rUA" = ( -/obj/machinery/vending/ashclothingvendor, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"rUT" = ( -/obj/structure/chair/sofa/corp/left, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/carpet/purple, -/area/centcom/holding/cafe) -"rVP" = ( -/obj/machinery/door/poddoor/ert, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 4 - }, -/turf/open/floor/plating, -/area/centcom/interlink) -"rVQ" = ( -/obj/effect/light_emitter/interlink, -/obj/structure/flora/bush/flowers_br/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"rYj" = ( -/obj/structure/mineral_door/paperframe{ - name = "Shinto Cabin Washroom" - }, -/turf/open/floor/sepia, -/area/centcom/holding/cafedorms) -"rYy" = ( -/obj/structure/sign/directions/evac{ - pixel_y = -8 - }, -/obj/structure/sign/directions/arrival{ - dir = 1 - }, -/obj/structure/sign/directions/dorms{ - dir = 4; - pixel_y = 8 - }, -/turf/closed/indestructible/riveted, -/area/centcom/interlink) -"rYR" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"rZY" = ( -/turf/open/floor/iron/stairs{ - dir = 1 - }, -/area/centcom/holding/cafepark) -"saE" = ( -/obj/effect/turf_decal/trimline/dark_green/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"saN" = ( -/obj/effect/turf_decal/trimline/blue/filled/corner, -/obj/effect/turf_decal/siding/white/corner, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"sci" = ( -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/wood, -/area/centcom/interlink) -"sfN" = ( -/obj/structure/mirror/directional/east, -/obj/structure/sink/directional/west, -/turf/open/floor/sepia, -/area/centcom/holding/cafedorms) -"sga" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 10 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"sgD" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 1 - }, -/obj/effect/light_emitter/interlink, -/obj/structure/flora/bush/flowers_yw/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"shn" = ( -/obj/structure/railing/corner, -/obj/effect/turf_decal/arrows{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron, -/area/centcom/interlink) -"sic" = ( -/obj/machinery/duct, -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/trimline/dark_green/filled/line, -/turf/open/floor/iron, -/area/centcom/interlink) -"sjP" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 6 - }, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"skM" = ( -/obj/structure/sign/painting/parting, -/turf/closed/indestructible/wood, -/area/centcom/holding/cafedorms) -"slz" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 4 - }, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"slW" = ( -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"smA" = ( -/obj/structure/flora/tree/dead, -/turf/open/floor/grass/fairy, -/area/centcom/holding/cafepark) -"sow" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 9 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"soW" = ( -/obj/structure/reagent_dispensers/cooking_oil, -/turf/open/floor/iron/freezer, -/area/centcom/interlink) -"spb" = ( -/obj/machinery/status_display/evac/directional/south, -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"sqZ" = ( -/obj/structure/chair/sofa/bench/left, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"srS" = ( -/turf/open/floor/iron/stairs/old, -/area/centcom/holding/cafepark) -"ssn" = ( -/obj/machinery/status_display/shuttle{ - pixel_y = 32; - shuttle_id = "arrivals_shuttle" - }, -/obj/machinery/computer/shuttle/arrivals/recall, -/obj/effect/turf_decal/box, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"std" = ( -/obj/machinery/door/airlock/service{ - name = "Interlink Kitchen" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/bar, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"stk" = ( -/obj/effect/landmark/latejoin, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 5 - }, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"sto" = ( -/obj/effect/turf_decal/siding{ - color = "#2e2e2e"; - dir = 9 - }, -/obj/machinery/washing_machine, -/obj/machinery/light/warm/directional/west, -/turf/open/floor/bamboo, -/area/centcom/holding/cafedorms) -"suL" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 8 - }, -/obj/structure/flora/bush/fullgrass/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"svm" = ( -/obj/machinery/door/airlock{ - id_tag = "stall1"; - name = "Stall" - }, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"sxE" = ( -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"syc" = ( -/obj/effect/light_emitter/interlink, -/obj/structure/flora/bush/large/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"sBJ" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw, -/obj/effect/turf_decal/trimline/green/filled/arrow_cw{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"sBZ" = ( -/obj/structure/dresser, -/obj/structure/sign/painting/library{ - pixel_y = 32 - }, -/obj/machinery/light/warm/no_nightlight/directional/north, -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"sDJ" = ( -/obj/structure/bookcase/random/nonfiction, -/turf/open/floor/wood, -/area/centcom/interlink) -"sFF" = ( -/obj/effect/turf_decal/siding{ - color = "#2e2e2e"; - dir = 1 - }, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/item/clothing/head/costume/shrine_wig{ - pixel_y = 7 - }, -/obj/item/clothing/suit/costume/shrine_maiden, -/obj/item/storage/basket{ - pixel_y = 11 - }, -/obj/item/gohei, -/turf/open/floor/bamboo, -/area/centcom/holding/cafedorms) -"sGf" = ( -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"sGU" = ( -/obj/structure/flora/bush/fullgrass/style_random, -/obj/structure/flora/bush/flowers_br/style_random, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"sIb" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"sIH" = ( -/obj/structure/chair/sofa/left/brown{ - dir = 1 - }, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"sJa" = ( -/obj/effect/turf_decal/siding/white{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"sJJ" = ( -/obj/machinery/shower/directional/south, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/structure/window/spawner/directional/west, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"sKg" = ( -/obj/effect/turf_decal/trimline/green/filled/arrow_cw{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"sMF" = ( -/obj/structure/sign/painting/library, -/turf/closed/indestructible/wood, -/area/centcom/holding/cafedorms) -"sNg" = ( -/obj/structure/rack, -/obj/item/mop, -/obj/item/soap/homemade, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"sOk" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Interlink Evac Library" - }, -/obj/effect/turf_decal/trimline/green/filled/arrow_cw, -/turf/open/floor/iron, -/area/centcom/interlink) -"sQh" = ( -/turf/open/floor/iron/smooth_corner, -/area/cruiser_dock) -"sQj" = ( -/obj/structure/sign/painting/library, -/turf/closed/indestructible/wood, -/area/centcom/holding/cafe) -"sQX" = ( -/obj/structure/flora/biolumi/flower{ - random_light = null - }, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"sRt" = ( -/obj/machinery/light/directional/east, -/turf/open/floor/carpet/cyan, -/area/centcom/holding/cafe) -"sRV" = ( -/obj/structure/chair/sofa/bench/right, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"sSe" = ( -/obj/structure/sign/painting/library_secure, -/turf/closed/indestructible/wood, -/area/centcom/holding/cafedorms) -"sSX" = ( -/obj/machinery/door/airlock/medical{ - name = "Interlink Operating Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"sTH" = ( -/obj/machinery/duct, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"sWb" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/closet/secure_closet/freezer/empty{ - name = "milk freezer" - }, -/obj/item/reagent_containers/condiment/milk, -/obj/item/reagent_containers/condiment/milk, -/obj/item/reagent_containers/condiment/soymilk, -/obj/item/reagent_containers/condiment/soymilk, -/obj/item/reagent_containers/cup/glass/bottle/juice/cream, -/obj/item/reagent_containers/cup/glass/bottle/juice/cream, -/turf/open/floor/iron, -/area/centcom/interlink) -"sYC" = ( -/obj/structure/closet/secure_closet/freezer/empty{ - name = "produce freezer" - }, -/obj/item/food/grown/apple, -/obj/item/food/grown/apple, -/obj/item/food/grown/banana, -/obj/item/food/grown/banana, -/obj/item/food/grown/berries, -/obj/item/food/grown/berries, -/obj/item/food/grown/cherries, -/obj/item/food/grown/cherries, -/obj/item/food/grown/citrus/orange, -/obj/item/food/grown/citrus/orange, -/obj/item/food/grown/grapes, -/obj/item/food/grown/grapes, -/obj/item/food/grown/peas, -/obj/item/food/grown/peas, -/obj/item/food/grown/pineapple, -/obj/item/food/grown/pineapple, -/obj/item/food/grown/plum, -/obj/item/food/grown/plum, -/obj/item/food/grown/potato, -/obj/item/food/grown/potato, -/obj/item/food/grown/pumpkin, -/obj/item/food/grown/pumpkin, -/obj/item/food/grown/redbeet, -/obj/item/food/grown/redbeet, -/obj/item/food/grown/tomato, -/obj/item/food/grown/tomato, -/obj/item/food/grown/wheat, -/obj/item/food/grown/wheat, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/freezer, -/area/centcom/interlink) -"sZl" = ( -/obj/effect/light_emitter/interlink, -/obj/structure/flora/tree/jungle/small, -/turf/open/floor/grass, -/area/centcom/interlink) -"sZM" = ( -/obj/structure/dresser{ - pixel_y = 7 - }, -/obj/item/flashlight/lamp/green{ - pixel_x = -3; - pixel_y = 22 - }, -/turf/open/floor/carpet/blue, -/area/centcom/holding/cafedorms) -"sZV" = ( -/obj/item/kirbyplants/organic/plant22, -/obj/machinery/light/warm/directional/south, -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/turf/open/floor/iron, -/area/centcom/interlink) -"tag" = ( -/obj/machinery/vending/tool{ - onstation = 0 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"tal" = ( -/obj/structure/flora/bush/lavendergrass{ - icon_state = "lavendergrass_4" - }, -/turf/open/floor/plating/cobblestone, -/area/centcom/holding/cafepark) -"tch" = ( -/obj/machinery/chem_dispenser/fullupgrade, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"tci" = ( -/obj/structure/table/wood, -/obj/item/paper_bin, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"tdm" = ( -/obj/structure/chair/sofa/bench/corner, -/obj/effect/turf_decal/siding/white/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"tdp" = ( -/obj/effect/light_emitter/interlink, -/obj/effect/turf_decal/weather/dirt{ - dir = 8 - }, -/obj/structure/flora/bush/flowers_yw/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"tdP" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/indestructible{ - id = "bs_shutters"; - name = "BlueShields Shutters" - }, -/turf/open/floor/plating, -/area/centcom/interlink) -"tfe" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/west, -/obj/machinery/shower/directional/south, -/turf/open/floor/iron/white, -/area/centcom/interlink/dorm_rooms) -"tfI" = ( -/obj/item/paper_bin/bundlenatural, -/turf/open/floor/sepia, -/area/centcom/holding/cafedorms) -"thr" = ( -/obj/structure/table/wood, -/obj/effect/spawner/random/entertainment/deck{ - pixel_y = 5 - }, -/turf/open/floor/carpet/red, -/area/centcom/interlink) -"thU" = ( -/obj/machinery/door/poddoor/ert, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 8 - }, -/turf/open/floor/plating, -/area/centcom/interlink) -"tin" = ( -/obj/effect/turf_decal/caution{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"tlu" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"tnR" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 10 - }, -/obj/structure/deployable_barricade/guardrail{ - dir = 8 - }, -/obj/structure/deployable_barricade/guardrail, -/turf/open/floor/iron/smooth_large, -/area/cruiser_dock) -"tpU" = ( -/turf/open/misc/dirt/planet, -/area/centcom/interlink) -"tsi" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Interlink Security Post" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/general, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"ttx" = ( -/obj/structure/table, -/obj/item/storage/fancy/candle_box{ - pixel_y = 8 - }, -/obj/item/storage/fancy/candle_box{ - pixel_y = 4 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"tuO" = ( -/obj/effect/turf_decal/tile/blue/half, -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"tvh" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/structure/closet/secure_closet/medical2/unlocked, -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"tvm" = ( -/obj/machinery/door/airlock{ - id_tag = "room8"; - name = "Cabin" - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"tvw" = ( -/turf/closed/indestructible/riveted, -/area/centcom/interlink) -"twE" = ( -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/structure/flora/bush/flowers_br/style_random, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"twL" = ( -/turf/open/misc/beach/coast{ - dir = 8 - }, -/area/centcom/holding/cafepark) -"tyG" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/vending/cola, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"tBo" = ( -/obj/structure/table, -/obj/machinery/microwave{ - pixel_y = 8 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"tBN" = ( -/obj/structure/chair/sofa/left/brown{ - dir = 1 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafedorms) -"tCi" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"tCJ" = ( -/obj/effect/turf_decal/caution, -/turf/open/floor/iron, -/area/centcom/interlink) -"tEg" = ( -/obj/structure/fans/tiny/invisible, -/turf/open/water/beach, -/area/centcom/holding/cafepark) -"tEq" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"tGG" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Interlink Shuttle" - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"tGQ" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"tHh" = ( -/obj/machinery/light/warm/directional/west, -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"tHO" = ( -/obj/structure/table/wood, -/obj/item/storage/box/donkpockets/donkpocketpizza, -/obj/item/storage/box/donkpockets{ - pixel_x = 7 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"tIN" = ( -/obj/effect/light_emitter/interlink, -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/structure/flora/bush/fullgrass/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"tKt" = ( -/obj/structure/curtain, -/obj/machinery/shower/directional/north, -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/turf/open/floor/plating/abductor2, -/area/centcom/holding/cafe) -"tLu" = ( -/obj/item/toy/plush/lizard_plushie/green{ - name = "Soaks-The-Rays" - }, -/turf/open/floor/carpet/orange, -/area/centcom/holding/cafepark) -"tNw" = ( -/obj/structure/railing/corner{ - dir = 4 - }, -/obj/effect/turf_decal/arrows{ - dir = 8 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"tQP" = ( -/obj/structure/flora/bush/flowers_pp/style_random, -/obj/structure/flora/bush/flowers_br/style_random, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"tUk" = ( -/obj/structure/fence/corner, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"tUz" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4 - }, -/obj/effect/landmark/latejoin, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"tUL" = ( -/obj/item/flashlight/flare/torch, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"tVg" = ( -/obj/structure/falsewall/sandstone, -/obj/structure/fans/tiny/invisible, -/turf/open/floor/iron/showroomfloor, -/area/centcom/holding/cafe) -"tWA" = ( -/obj/machinery/light/directional/east, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"tXa" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/machinery/light, -/obj/machinery/vending/imported/tiziran{ - default_price = 0; - extended_inventory = 1; - extra_price = 0; - fair_market_price = 0 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "floor" - }, -/area/centcom/holding/cafe) -"tYf" = ( -/obj/machinery/vending/autodrobe/all_access, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"tYk" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/glass/bottle/whiskey{ - pixel_x = -5; - pixel_y = 4 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = 7; - pixel_y = 3 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = 7; - pixel_y = 12 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafedorms) -"tZU" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/centcom/interlink) -"uab" = ( -/obj/structure/closet/crate, -/obj/item/storage/box/ingredients/vegetarian, -/obj/item/storage/box/ingredients/italian, -/obj/item/storage/box/ingredients/fruity, -/obj/item/storage/box/ingredients/fiesta, -/obj/item/storage/box/ingredients/american, -/obj/item/storage/box/ingredients/exotic, -/obj/item/reagent_containers/condiment/flour{ - list_reagents = list(/datum/reagent/consumable/flour = 90); - name = "large flour sack"; - possible_transfer_amounts = list(1,5,10,15,30,60,90); - volume = 90 - }, -/obj/item/reagent_containers/condiment/flour{ - list_reagents = list(/datum/reagent/consumable/flour = 90); - name = "large flour sack"; - possible_transfer_amounts = list(1,5,10,15,30,60,90); - volume = 90 - }, -/obj/machinery/button/door{ - id = "ghostcafekitchen"; - name = "Kitchen Shutters Control"; - pixel_x = -1; - pixel_y = -24 - }, -/turf/open/indestructible/hoteltile{ - icon_state = "cafeteria" - }, -/area/centcom/holding/cafe) -"uaM" = ( -/obj/effect/light_emitter/interlink, -/obj/effect/turf_decal/weather/dirt{ - dir = 8 - }, -/obj/effect/turf_decal/weather/dirt, -/obj/effect/turf_decal/weather/dirt{ - dir = 4 - }, -/obj/structure/flora/bush/fullgrass/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"ubn" = ( -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"ubH" = ( -/obj/structure/table, -/obj/item/paper/pamphlet/centcom/visitor_info{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/paper/pamphlet/centcom/visitor_info, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 10 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"ucr" = ( -/obj/structure/chair/office, -/obj/machinery/button/door/directional/east{ - id = "interlink_hall"; - name = "Evac Hall Shutter Control"; - pixel_y = -8; - req_access = list("security") - }, -/obj/machinery/button/door/directional/east{ - id = "evac_hall"; - name = "Evac Access Shutter Control"; - pixel_y = 8; - req_access = list("security") - }, -/obj/machinery/light/cold/directional/east, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"ueC" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/condiment/enzyme{ - layer = 5 - }, -/obj/machinery/light/directional/south, -/obj/item/reagent_containers/cup/beaker/bluespace{ - luminosity = 3; - name = "floofmagic beaker"; - possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150,200,250,500); - volume = 500 - }, -/obj/item/reagent_containers/cup/beaker/bluespace{ - luminosity = 3; - name = "floofmagic beaker"; - possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150,200,250,500); - volume = 500 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"ufv" = ( -/obj/machinery/light/very_dim/directional/south, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"ufz" = ( -/obj/structure/sign/painting/large/library{ - dir = 1 - }, -/obj/machinery/light/directional/west, -/obj/structure/table/wood, -/obj/item/storage/crayons, -/obj/item/toy/crayon/spraycan{ - pixel_y = 6 - }, -/obj/item/toy/crayon/spraycan{ - pixel_x = 4; - pixel_y = 10 - }, -/turf/open/floor/carpet/cyan, -/area/centcom/holding/cafe) -"uhC" = ( -/obj/effect/baseturf_helper/asteroid, -/turf/closed/indestructible/syndicate, -/area/cruiser_dock) -"uhO" = ( -/obj/structure/table/reinforced, -/obj/item/folder/blue, -/obj/item/stamp/denied{ - pixel_x = 10; - pixel_y = 10 - }, -/obj/item/stamp{ - pixel_x = 6; - pixel_y = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/centcom/interlink) -"uis" = ( -/obj/structure/reagent_dispensers/plumbed, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"uiZ" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/paperframes/fifty, -/obj/item/stack/sheet/paperframes/fifty, -/obj/item/storage/fancy/candle_box, -/obj/item/storage/fancy/candle_box, -/obj/item/storage/fancy/candle_box, -/obj/item/storage/box/lights/mixed, -/obj/item/stack/sheet/plastic/fifty, -/obj/item/stack/sheet/plastic/fifty, -/obj/item/stack/sheet/plastic/fifty, -/obj/item/stack/sheet/mineral/bamboo/fifty, -/obj/item/stack/sheet/mineral/bamboo/fifty, -/obj/item/stack/sheet/mineral/bamboo/fifty, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"uji" = ( -/obj/machinery/door/poddoor/shutters/window/indestructible{ - id = "interlink_hall2"; - name = "Windowed Interlink Access Shutters" - }, -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/floor/iron, -/area/centcom/interlink) -"ujQ" = ( -/obj/item/toy/plush/lizard_plushie/green{ - name = "Breaks-The-Maps" - }, -/turf/open/misc/dirt/planet, -/area/centcom/interlink) -"ujZ" = ( -/obj/item/kirbyplants/organic/plant22, -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"ukp" = ( -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"umm" = ( -/turf/closed/indestructible/alien, -/area/centcom/holding/cafe) -"unt" = ( -/obj/structure/flora/rock/pile/style_random, -/turf/open/misc/dirt/planet, -/area/centcom/interlink) -"uny" = ( -/obj/structure/chair/sofa/bench{ - dir = 8 - }, -/obj/effect/landmark/latejoin, -/turf/open/floor/iron, -/area/centcom/interlink) -"upo" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 4 - }, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"uqJ" = ( -/obj/machinery/door/airlock/centcom{ - name = "Nanotrasen Consultant's Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/cent_com/rep_door, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green/opposingcorners, -/turf/open/floor/iron, -/area/centcom/interlink) -"usr" = ( -/obj/effect/light_emitter/interlink, -/obj/effect/turf_decal/weather/dirt{ - dir = 1 - }, -/obj/structure/flora/bush/fullgrass/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"uxW" = ( -/turf/open/misc/beach/coast{ - dir = 4 - }, -/area/centcom/holding/cafepark) -"uyr" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4 - }, -/obj/effect/landmark/latejoin, -/turf/open/floor/iron, -/area/centcom/interlink) -"uAi" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white, -/obj/structure/chair/sofa/bench/left, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"uAm" = ( -/obj/effect/turf_decal/siding/white/corner{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/centcom/interlink) -"uBw" = ( -/obj/effect/decal/remains/xeno, -/obj/structure/alien/weeds, -/obj/structure/alien/weeds/node, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"uCw" = ( -/obj/effect/turf_decal/sand, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"uCW" = ( -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/centcom/interlink) -"uDr" = ( -/obj/structure/chair/sofa/corp/corner{ - dir = 1 - }, -/obj/machinery/light/warm/directional/south, -/turf/open/floor/wood/parquet, -/area/centcom/interlink) -"uDT" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/item/kirbyplants/random, -/obj/machinery/button/door/directional/south{ - id = "room2"; - name = "Door Lock"; - normaldoorcontrol = 1; - pixel_x = -8; - specialfunctions = 4 - }, -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"uEn" = ( -/obj/structure/table, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/freezer, -/area/centcom/interlink) -"uET" = ( -/obj/structure/chair/sofa/bench{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark{ - dir = 10 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"uFG" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/poddoor/shutters/indestructible{ - id = "il_kitchen"; - name = "Interlink Kitchen Shutters" - }, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"uGt" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 1 - }, -/obj/effect/light_emitter/interlink, -/turf/open/misc/dirt/planet, -/area/centcom/interlink) -"uGU" = ( -/obj/structure/table, -/obj/machinery/microwave{ - pixel_x = -2; - pixel_y = 6 - }, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"uIf" = ( -/obj/effect/turf_decal/siding/wood, -/obj/item/flashlight/flare/candle/infinite{ - pixel_x = -12; - pixel_y = -42 - }, -/obj/item/fancy_pillow{ - pixel_x = -22; - pixel_y = -7 - }, -/obj/item/fancy_pillow{ - pixel_y = -1 - }, -/turf/open/floor/bamboo, -/area/centcom/holding/cafedorms) -"uIh" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"uIp" = ( -/obj/machinery/deepfryer, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"uJA" = ( -/obj/structure/table/wood, -/obj/effect/spawner/random/entertainment/dice{ - pixel_y = 4 - }, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"uKw" = ( -/turf/open/floor/catwalk_floor/iron_smooth, -/area/cruiser_dock) -"uKH" = ( -/obj/effect/turf_decal/weather/dirt, -/obj/effect/light_emitter/interlink, -/obj/structure/flora/tree/jungle/small/style_6, -/turf/open/floor/grass, -/area/centcom/interlink) -"uKW" = ( -/obj/structure/chair/sofa/bench, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"uNg" = ( -/obj/structure/bed/double{ - dir = 8 - }, -/obj/item/bedsheet/dorms_double{ - dir = 8 - }, -/turf/open/floor/carpet/blue, -/area/centcom/holding/cafedorms) -"uPd" = ( -/obj/machinery/duct, -/obj/structure/sign/poster/random/directional/south, -/obj/effect/turf_decal/trimline/dark_green/filled/line, -/turf/open/floor/iron, -/area/centcom/interlink) -"uPJ" = ( -/obj/item/mop, -/obj/structure/mop_bucket, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"uQt" = ( -/obj/effect/turf_decal/trimline/dark_green/filled/line, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron, -/area/centcom/interlink) -"uSQ" = ( -/obj/structure/table/reinforced, -/obj/machinery/chem_dispenser/drinks, -/obj/effect/turf_decal/trimline/green/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"uTg" = ( -/obj/machinery/door/airlock/centcom{ - name = "Interlink" - }, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/plating, -/area/centcom/interlink) -"uWe" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "ghostcafesec" - }, -/turf/closed/indestructible/fakeglass, -/area/centcom/holding/cafe) -"uWG" = ( -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"uYe" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"uYo" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"uYq" = ( -/obj/structure/table, -/obj/item/coffee_cartridge{ - pixel_y = -1 - }, -/obj/item/coffee_cartridge/fancy{ - pixel_x = -5; - pixel_y = 8 - }, -/obj/item/coffee_cartridge/fancy{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/item/reagent_containers/cup/coffeepot{ - pixel_x = 5; - pixel_y = 20 - }, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"uYx" = ( -/obj/machinery/suit_storage_unit/industrial/assault_operative, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"uYJ" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -5; - pixel_y = 14 - }, -/obj/item/reagent_containers/condiment/peppermill{ - dir = 1; - pixel_x = 5; - pixel_y = 14 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"vat" = ( -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"vaB" = ( -/obj/machinery/door/airlock/hatch{ - name = "Custodial Closet" - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"vca" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white/corner{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"vcB" = ( -/obj/machinery/computer/crew, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"vdv" = ( -/obj/machinery/light/directional/west, -/obj/item/kirbyplants/organic/plant22, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"veh" = ( -/obj/structure/fence/door, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"vgs" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green{ - pixel_y = 5 - }, -/turf/open/floor/wood, -/area/centcom/interlink) -"vgx" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/wood, -/area/centcom/holding/cafepark) -"vgL" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"vpT" = ( -/obj/structure/table/reinforced, -/obj/machinery/chem_dispenser/drinks/beer, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"vqx" = ( -/obj/structure/mirror{ - pixel_y = 32 - }, -/obj/structure/toilet{ - pixel_y = 14 - }, -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/turf/open/floor/plating/abductor2, -/area/centcom/holding/cafe) -"vqy" = ( -/obj/effect/light_emitter/interlink, -/obj/effect/turf_decal/weather/dirt{ - dir = 4 - }, -/obj/structure/flora/bush/fullgrass/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"vrd" = ( -/turf/open/floor/iron/stairs/medium, -/area/cruiser_dock) -"vsh" = ( -/turf/open/floor/iron/smooth_edge{ - dir = 4 - }, -/area/cruiser_dock) -"vsB" = ( -/obj/structure/chair/sofa/bench/left, -/obj/effect/landmark/latejoin, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"vsW" = ( -/obj/structure/toilet{ - pixel_y = 14 - }, -/obj/structure/mirror{ - pixel_y = 32 - }, -/turf/open/indestructible/hoteltile{ - icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi'; - icon_state = "titanium_blue_old"; - name = "bathroom floor" - }, -/area/centcom/holding/cafedorms) -"vui" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"vuq" = ( -/obj/machinery/chem_master/condimaster{ - name = "BrewMaster 3000" - }, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"vuV" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/machinery/button/door/directional/west{ - id = "room6"; - name = "Door Lock"; - normaldoorcontrol = 1; - pixel_y = -8; - specialfunctions = 4 - }, -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"vxh" = ( -/obj/item/instrument/accordion, -/obj/item/instrument/banjo, -/obj/item/instrument/bikehorn, -/obj/item/instrument/eguitar, -/obj/item/instrument/glockenspiel, -/obj/item/instrument/guitar, -/obj/item/instrument/harmonica, -/obj/item/instrument/musicalmoth, -/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, -/obj/item/reagent_containers/condiment/mayonnaise, -/obj/structure/closet/crate/wooden{ - name = "band crate" - }, -/obj/item/paper{ - default_raw_text = "Dear Mr. Best, due to your overwhelming and unpaid tab, Managment has saw fit to confiscate your equipment, we do not care which mammel themed band you claim to be a member of.\nThank you.\n-Managment."; - name = "note to Mr. Best" - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"vxx" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"vxF" = ( -/obj/machinery/vending/games, -/turf/open/floor/carpet/cyan, -/area/centcom/holding/cafe) -"vxU" = ( -/turf/open/floor/iron/stairs/medium{ - dir = 4 - }, -/area/cruiser_dock) -"vzH" = ( -/obj/structure/sign/poster/random/directional/north, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"vEs" = ( -/obj/structure/fans/tiny/invisible, -/obj/structure/spacevine{ - name = "thick vines"; - opacity = 1 - }, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"vEI" = ( -/obj/machinery/light/warm/directional/north, -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"vFj" = ( -/obj/machinery/light/warm/directional/south, -/turf/open/floor/wood, -/area/centcom/interlink) -"vFW" = ( -/obj/structure/table/wood, -/obj/machinery/recharger, -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"vGe" = ( -/obj/machinery/light/very_dim/directional/north, -/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"vLh" = ( -/obj/effect/turf_decal/trimline/green/filled/arrow_cw{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"vLt" = ( -/obj/structure/closet/crate/cardboard/tiziran, -/obj/item/storage/box/foodpack/tizira/roll, -/obj/item/storage/box/foodpack/tizira/roll, -/obj/item/storage/box/foodpack/tizira/stir_fry, -/obj/item/storage/box/tiziran_meats, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"vLx" = ( -/turf/closed/indestructible/rock, -/area/centcom/interlink) -"vLY" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4; - name = "Interlink Bar" - }, -/obj/effect/turf_decal/trimline/green/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"vPe" = ( -/obj/structure/chair/stool/bar/directional/east, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"vQH" = ( -/obj/structure/table/wood, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"vRf" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4; - name = "Interlink Garden" - }, -/obj/effect/turf_decal/trimline/green/arrow_ccw, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"vRE" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/centcom/interlink) -"vUu" = ( -/obj/machinery/door/window/left/directional/west{ - dir = 4 - }, -/obj/structure/sink/directional/east, -/turf/open/floor/plating/abductor2, -/area/centcom/holding/cafe) -"vUv" = ( -/obj/effect/turf_decal/tile/red/half, -/turf/open/floor/iron, -/area/centcom/holding/cafe) -"vUJ" = ( -/obj/effect/turf_decal/siding/white, -/obj/structure/chair/sofa/bench, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"vWy" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/structure/chair/sofa/bench/right{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"vYz" = ( -/obj/machinery/button/curtain{ - id = "ghostcaferesort1curtain"; - pixel_x = -26 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafedorms) -"vYR" = ( -/obj/structure/flora/coconuts, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"vZv" = ( -/obj/structure/sign/painting/library_private, -/turf/closed/indestructible/wood, -/area/centcom/holding/cafedorms) -"wag" = ( -/obj/effect/turf_decal/trimline/green/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"wcd" = ( -/obj/effect/turf_decal/siding{ - color = "#2e2e2e"; - dir = 5 - }, -/obj/structure/table/wood/fancy/orange{ - pixel_y = -3 - }, -/obj/item/flashlight/flare/candle/infinite{ - pixel_x = -7; - pixel_y = -2 - }, -/obj/item/flashlight/flare/candle/infinite, -/obj/machinery/light/warm/directional/east, -/turf/open/floor/bamboo, -/area/centcom/holding/cafedorms) -"wcf" = ( -/obj/structure/closet/secure_closet/freezer/kitchen/all_access, -/obj/item/reagent_containers/condiment/mayonnaise, -/obj/item/reagent_containers/condiment/soysauce, -/obj/item/reagent_containers/condiment/sugar, -/obj/item/reagent_containers/condiment/rice{ - list_reagents = list(/datum/reagent/consumable/rice = 90); - name = "large rice sack"; - possible_transfer_amounts = list(1,5,10,15,20,25,30,50,60,90) - }, -/obj/item/reagent_containers/condiment/rice{ - list_reagents = list(/datum/reagent/consumable/rice = 90); - name = "large rice sack"; - possible_transfer_amounts = list(1,5,10,15,20,25,30,50,60,90) - }, -/obj/item/reagent_containers/condiment/cornmeal, -/obj/item/reagent_containers/condiment/cornmeal, -/obj/item/reagent_containers/condiment/vinegar, -/turf/open/indestructible/hoteltile{ - icon_state = "cafeteria" - }, -/area/centcom/holding/cafe) -"wck" = ( -/obj/machinery/duct, -/obj/effect/turf_decal/trimline/dark_green/filled/line, -/turf/open/floor/iron, -/area/centcom/interlink) -"wdo" = ( -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafepark) -"wdB" = ( -/obj/machinery/door/airlock{ - id_tag = "room3"; - name = "Cabin" - }, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"weP" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/structure/table/glass, -/obj/item/storage/box/gloves{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/box/masks, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"wfh" = ( -/obj/effect/landmark/latejoin, -/turf/open/floor/iron, -/area/centcom/interlink) -"wft" = ( -/obj/structure/chair/sofa/corner/brown{ - dir = 1 - }, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"wfN" = ( -/turf/open/misc/ashplanet{ - initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, -/area/centcom/holding/cafe) -"wgp" = ( -/obj/machinery/door/poddoor/shutters/indestructible, -/turf/open/floor/plating, -/area/cruiser_dock) -"wiT" = ( -/obj/effect/turf_decal/weather/dirt, -/obj/structure/hedge, -/obj/effect/turf_decal/weather/dirt{ - dir = 1 - }, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"wji" = ( -/obj/structure/flora/rock/style_random, -/turf/open/misc/dirt/planet, -/area/centcom/interlink) -"wkG" = ( -/obj/structure/chair/stool/bar/directional/south, -/turf/open/floor/wood/parquet, -/area/centcom/interlink) -"wlA" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/turf/open/floor/iron/white, -/area/centcom/interlink/dorm_rooms) -"wmW" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"wnj" = ( -/obj/structure/reagent_water_basin, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"wod" = ( -/obj/structure/sign/poster/random/directional/north, -/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"wpz" = ( -/obj/effect/light_emitter/interlink, -/obj/structure/flora/bush/flowers_pp/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"wqG" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/obj/machinery/light/cold/directional/south, -/turf/open/misc/asteroid, -/area/cruiser_dock) -"wqL" = ( -/obj/effect/light_emitter/interlink, -/obj/effect/turf_decal/weather/dirt{ - dir = 1 - }, -/obj/structure/flora/tree/jungle/small/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"wqQ" = ( -/obj/effect/turf_decal/box/corners{ - dir = 1 - }, -/obj/structure/shipping_container/cybersun, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"wrf" = ( -/turf/open/floor/carpet/blue, -/area/centcom/holding/cafedorms) -"wsu" = ( -/obj/structure/table/wood, -/obj/item/folder/red{ - pixel_x = 12; - pixel_y = 2 - }, -/obj/item/pen{ - pixel_x = 6; - pixel_y = 10 - }, -/turf/open/floor/carpet/executive, -/area/centcom/interlink) -"wtI" = ( -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"wuH" = ( -/obj/structure/table, -/obj/machinery/light/cold/directional/north, -/obj/effect/turf_decal/delivery/blue, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"wwD" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 4 - }, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"wyn" = ( -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/centcom/interlink) -"wyF" = ( -/obj/structure/sign/directions/security{ - dir = 8; - pixel_y = -8 - }, -/obj/structure/sign/directions/medical{ - dir = 8 - }, -/obj/structure/sign/directions/arrival{ - dir = 1; - pixel_y = 8 - }, -/turf/closed/indestructible/riveted, -/area/centcom/interlink) -"wyL" = ( -/obj/machinery/door/airlock/centcom{ - name = "ERT Access" - }, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/any/cent_com/rep_or_captain, -/turf/open/floor/iron, -/area/centcom/interlink) -"wzZ" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"wAE" = ( -/obj/machinery/vending/coffee, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"wBc" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"wBI" = ( -/obj/effect/turf_decal/siding/white/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/green/filled/arrow_ccw, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"wBX" = ( -/obj/structure/sink/directional/south, -/turf/open/indestructible/hoteltile{ - icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi'; - icon_state = "titanium_blue_old"; - name = "bathroom floor" - }, -/area/centcom/holding/cafedorms) -"wCl" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"wCC" = ( -/obj/effect/turf_decal/siding{ - color = "#2e2e2e"; - dir = 4 - }, -/turf/open/floor/bamboo, -/area/centcom/holding/cafedorms) -"wCN" = ( -/obj/machinery/computer/records/security, -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/iron, -/area/centcom/interlink) -"wDG" = ( -/obj/structure/chair/stool/bar/directional/north, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"wFF" = ( -/obj/machinery/light/directional/west, -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"wGV" = ( -/obj/machinery/computer/operating{ - dir = 4 - }, -/obj/effect/turf_decal/delivery/blue, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"wHm" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 1 - }, -/turf/open/floor/wood/parquet, -/area/centcom/interlink) -"wHJ" = ( -/obj/effect/turf_decal/trimline/dark_green/filled/warning{ - dir = 10 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"wHS" = ( -/obj/machinery/telecomms/relay/preset/station, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron, -/area/centcom/interlink) -"wId" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = 7; - pixel_y = 3 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = 7; - pixel_y = 12 - }, -/obj/item/reagent_containers/cup/glass/bottle/vodka{ - pixel_x = -5; - pixel_y = 6 - }, -/turf/open/floor/wood, -/area/centcom/holding/cafedorms) -"wIg" = ( -/obj/structure/table, -/obj/machinery/reagentgrinder{ - pixel_y = 6 - }, -/turf/open/floor/iron/cafeteria, -/area/centcom/interlink) -"wJj" = ( -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"wKa" = ( -/obj/structure/chair/plastic{ - dir = 4 - }, -/turf/open/floor/iron/smooth_edge{ - dir = 4 - }, -/area/cruiser_dock) -"wME" = ( -/obj/structure/table, -/obj/item/paper/pamphlet/centcom/visitor_info{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/paper/pamphlet/centcom/visitor_info, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"wOQ" = ( -/obj/effect/turf_decal/siding/white/corner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"wPS" = ( -/obj/effect/turf_decal/box/corners{ - dir = 8 - }, -/obj/structure/shipping_container/kosmologistika, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"wTv" = ( -/obj/structure/sink/kitchen/directional/west, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"wUS" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/structure/bed/medical/emergency, -/obj/machinery/iv_drip, -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"wXe" = ( -/obj/structure/bookcase/random/adult, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/wood, -/area/centcom/interlink) -"wXm" = ( -/obj/structure/chair/office, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"wXo" = ( -/obj/machinery/door/airlock/bathroom{ - name = "Bathroom" - }, -/turf/open/floor/iron/white, -/area/centcom/interlink/dorm_rooms) -"wYH" = ( -/obj/structure/railing/corner{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"wZh" = ( -/obj/machinery/door/airlock/sandstone{ - id_tag = "ghostcaferesortbathroom2"; - name = "Resort Bathroom" - }, -/obj/structure/fans/tiny/invisible, -/turf/open/floor/wood, -/area/centcom/holding/cafe) -"wZS" = ( -/obj/item/storage/cans/sixbeer, -/turf/open/floor/carpet/orange, -/area/centcom/holding/cafepark) -"wZW" = ( -/obj/machinery/newscaster/directional/west, -/obj/structure/table/reinforced, -/obj/machinery/button/door/directional/north{ - id = "centshutterstop" - }, -/obj/machinery/light/cold/no_nightlight/directional/west, -/turf/open/floor/iron/dark/textured_large, -/area/centcom/interlink) -"xaT" = ( -/obj/machinery/light/cold/directional/south, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"xct" = ( -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"xdQ" = ( -/obj/structure/table, -/obj/item/storage/medkit/brute{ - pixel_x = 8; - pixel_y = 10 - }, -/obj/item/storage/medkit/fire{ - pixel_y = 6 - }, -/obj/effect/turf_decal/delivery/blue, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"xfT" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 1 - }, -/turf/open/misc/asteroid, -/area/cruiser_dock) -"xgz" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"xmn" = ( -/obj/structure/flora/bush/flowers_pp/style_random, -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"xpl" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 8 - }, -/obj/effect/landmark/latejoin, -/turf/open/floor/mineral/titanium, -/area/centcom/interlink) -"xpy" = ( -/obj/structure/flora/bush/fullgrass/style_random, -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/structure/flora/bush/flowers_br/style_random, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"xpH" = ( -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ - density = 0 - }, -/obj/structure/sign/poster/contraband/red_rum/directional/north, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"xqq" = ( -/obj/structure/chair/sofa/bench{ - dir = 4 - }, -/obj/effect/landmark/latejoin, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"xqI" = ( -/obj/machinery/vending/dorms, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafe) -"xrA" = ( -/obj/effect/landmark/start/assaultop, -/obj/structure/chair/office/light{ - dir = 4 - }, -/turf/open/floor/carpet/red, -/area/cruiser_dock) -"xsg" = ( -/obj/effect/turf_decal/trimline/blue/filled/arrow_cw{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/green/filled/arrow_cw, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"xsM" = ( -/obj/structure/flora/bush/lavendergrass{ - icon_state = "lavendergrass_2" - }, -/turf/open/floor/plating/cobblestone, -/area/centcom/holding/cafepark) -"xtQ" = ( -/obj/effect/turf_decal/weather/dirt, -/obj/effect/light_emitter/interlink, -/obj/structure/flora/bush/flowers_pp/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"xuY" = ( -/turf/closed/indestructible/syndicate, -/area/cruiser_dock) -"xwC" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"xxv" = ( -/obj/structure/mineral_door/wood, -/obj/structure/fans/tiny/invisible, -/turf/open/floor/wood, -/area/centcom/holding/cafedorms) -"xyn" = ( -/obj/structure/sign/departments/medbay/alt, -/turf/closed/indestructible/wood, -/area/centcom/holding/cafe) -"xyz" = ( -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"xzh" = ( -/obj/structure/flora/bush/flowers_yw/style_random, -/turf/open/floor/grass, -/area/centcom/interlink) -"xzt" = ( -/obj/structure/chair/sofa/bench{ - dir = 1 - }, -/obj/effect/light_emitter/interlink, -/turf/open/misc/dirt/planet, -/area/centcom/interlink) -"xCy" = ( -/obj/item/clothing/mask/facehugger/toy, -/obj/structure/alien/weeds, -/obj/structure/alien/weeds/node, -/obj/structure/alien/egg/burst, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"xDE" = ( -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"xEn" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor/left/directional/north{ - name = "Interlink Customs"; - req_access = list("cent_general") - }, -/obj/machinery/door/window/left/directional/south, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"xFA" = ( -/turf/open/floor/iron/stairs/right, -/area/cruiser_dock) -"xFU" = ( -/obj/effect/turf_decal/sand, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"xFZ" = ( -/obj/structure/flora/bush/sunny, -/turf/open/misc/grass/planet, -/area/centcom/holding/cafepark) -"xIR" = ( -/obj/effect/turf_decal/siding/wood, -/obj/machinery/door/airlock/multi_tile/public/glass{ - name = "Interlink Cafe" - }, -/turf/open/floor/wood/parquet, -/area/centcom/interlink) -"xJz" = ( -/turf/closed/indestructible/fakedoor{ - desc = "Why would you want to go back, you just got here!"; - name = "Cent Com Prison Shuttle Dock" - }, -/area/centcom/interlink) -"xKI" = ( -/obj/effect/turf_decal/trimline/dark_green/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"xKN" = ( -/obj/machinery/light/small/directional/west, -/obj/structure/sign/poster/random/directional/west, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"xLF" = ( -/obj/machinery/door/poddoor/shutters/window/preopen{ - id = "cc_arrivals" - }, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"xLS" = ( -/obj/effect/turf_decal/trimline/blue/filled/warning, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"xOm" = ( -/obj/structure/chair/sofa/bench/corner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/white/corner{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"xOQ" = ( -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/turf/open/floor/iron/smooth, -/area/centcom/interlink) -"xPp" = ( -/turf/closed/indestructible/opsglass, -/area/cruiser_dock) -"xPx" = ( -/obj/structure/chair/wood{ - dir = 1 - }, -/turf/open/floor/wood, -/area/centcom/interlink/dorm_rooms) -"xPD" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 4 - }, -/obj/effect/landmark/latejoin, -/turf/open/floor/mineral/titanium, -/area/centcom/interlink) -"xPL" = ( -/obj/structure/closet{ - name = "Cryogenics Sleepware" - }, -/obj/item/clothing/under/misc/pj/red, -/obj/item/clothing/under/misc/pj/red, -/obj/item/clothing/head/costume/nightcap/red, -/obj/item/clothing/head/costume/nightcap/red, -/obj/effect/turf_decal/trimline/blue/filled/line, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"xPZ" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/indestructible{ - id = "arr_hall_lookout"; - name = "Interlink Access Shutters" - }, -/turf/open/floor/plating, -/area/centcom/interlink) -"xSr" = ( -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"xTC" = ( -/obj/structure/closet/secure_closet/freezer/empty{ - name = "produce freezer" - }, -/obj/item/food/grown/bell_pepper, -/obj/item/food/grown/bell_pepper, -/obj/item/food/grown/carrot, -/obj/item/food/grown/carrot, -/obj/item/food/grown/chili, -/obj/item/food/grown/chili, -/obj/item/food/grown/citrus/lemon, -/obj/item/food/grown/citrus/lemon, -/obj/item/food/grown/citrus/lime, -/obj/item/food/grown/citrus/lime, -/obj/item/food/grown/corn, -/obj/item/food/grown/corn, -/obj/item/food/grown/eggplant, -/obj/item/food/grown/eggplant, -/obj/item/food/grown/garlic, -/obj/item/food/grown/garlic, -/obj/item/food/grown/onion, -/obj/item/food/grown/onion, -/obj/item/food/grown/parsnip, -/obj/item/food/grown/parsnip, -/obj/item/food/grown/watermelon, -/obj/item/food/grown/watermelon, -/obj/item/food/grown/whitebeet, -/obj/item/food/grown/whitebeet, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/freezer, -/area/centcom/interlink) -"xVv" = ( -/obj/machinery/button/door/directional/west{ - id = "interlink_hall2"; - name = "Arrivals Hall Shutter Control"; - pixel_y = -8; - req_access = list("security") - }, -/obj/machinery/light/cold/directional/west, -/obj/machinery/button/door/directional/west{ - id = "arriv_hall"; - name = "Arrivals Access Shutter Control"; - pixel_y = 8; - req_access = list("security") - }, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"xVV" = ( -/obj/machinery/recharge_station, -/obj/machinery/button/door/directional/south{ - id = "stall3"; - name = "Door Lock"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"xVY" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/chair/sofa/corp/right{ - dir = 1 - }, -/turf/open/floor/carpet/purple, -/area/centcom/holding/cafe) -"xWg" = ( -/obj/item/toy/plush/bubbleplush, -/turf/open/misc/dirt/planet, -/area/centcom/holding/cafepark) -"xXc" = ( -/obj/effect/light_emitter/interlink, -/obj/structure/fence, -/turf/open/floor/grass, -/area/centcom/interlink) -"xXk" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"xXn" = ( -/obj/structure/marker_beacon/teal, -/turf/open/misc/asteroid, -/area/cruiser_dock) -"xYp" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - name = "Interlink Cafe" - }, -/obj/effect/turf_decal/siding/wood, -/obj/machinery/duct, -/turf/open/floor/wood/tile, -/area/centcom/interlink) -"xZN" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 1 - }, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/wood/parquet, -/area/centcom/interlink) -"xZY" = ( -/obj/effect/turf_decal/box/corners{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/cruiser_dock) -"ybu" = ( -/obj/machinery/button/curtain{ - id = "ghostcafecabin3curtain"; - pixel_y = -25 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding/cafedorms) -"ybB" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/trimline/dark_green/filled/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/interlink) -"ybC" = ( -/obj/machinery/light/directional/south, -/turf/open/floor/iron/smooth, -/area/centcom/interlink) -"ybX" = ( -/obj/effect/turf_decal/weather/dirt, -/obj/effect/turf_decal/weather/dirt{ - dir = 4 - }, -/obj/effect/turf_decal/weather/dirt{ - dir = 8 - }, -/obj/effect/light_emitter/interlink, -/turf/open/floor/grass, -/area/centcom/interlink) -"ycB" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood/corner, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/structure/beebox{ - name = "Shrine" - }, -/turf/open/floor/wood, -/area/centcom/holding/cafedorms) -"ycD" = ( -/obj/effect/turf_decal/tile/blue/full, -/obj/machinery/door/airlock/wood{ - glass = 1; - name = "Surgery" - }, -/obj/effect/turf_decal/caution/stand_clear, -/obj/structure/fans/tiny/invisible, -/turf/open/floor/iron/white, -/area/centcom/holding/cafe) -"ycL" = ( -/obj/structure/table/optable, -/obj/item/surgery_tray/full, -/obj/effect/turf_decal/bot_blue, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"ydt" = ( -/obj/effect/landmark/latejoin, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"ydM" = ( -/obj/structure/fluff/beach_umbrella/engine, -/turf/open/misc/beach/sand, -/area/centcom/holding/cafepark) -"yea" = ( -/obj/structure/table/wood, -/obj/machinery/light/directional/east, -/turf/open/floor/wood, -/area/centcom/holding/cafedorms) -"yet" = ( -/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw, -/obj/effect/turf_decal/siding/white/corner, -/turf/open/floor/iron/dark, -/area/centcom/interlink) -"yev" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/carpet/red, -/area/centcom/holding/cafedorms) -"yfm" = ( -/obj/machinery/sleeper{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"yfX" = ( -/obj/effect/landmark/latejoin, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/white/corner{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/centcom/interlink) -"ygL" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/freezer, -/area/centcom/interlink) -"yjX" = ( -/obj/structure/closet, -/obj/item/clothing/under/rank/centcom/officer/replica{ - desc = "A cheaper, unarmored CentCom turtleneck meant for everyday wear. Somewhat of a status symbol."; - name = "\improper Civilian CentCom turtleneck" - }, -/obj/item/clothing/under/rank/centcom/officer_skirt/replica{ - desc = "A cheaper, unarmored CentCom skirtleneck meant for everyday wear. Somewhat of a status symbol."; - name = "\improper Civilian CentCom skirtleneck" - }, -/obj/item/bedsheet/centcom, -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/item/toner/extreme, -/turf/open/floor/iron, -/area/centcom/interlink) -"ykt" = ( -/obj/machinery/duct, -/obj/effect/turf_decal/trimline/dark_green/filled/warning, -/turf/open/floor/iron, -/area/centcom/interlink) -"yln" = ( -/obj/machinery/door/airlock{ - id_tag = "room4"; - name = "Cabin" - }, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/turf/open/floor/iron, -/area/centcom/interlink) - -(1,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(2,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(3,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(4,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(5,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(6,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(7,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(8,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(9,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(10,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(11,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(12,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(13,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(14,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(15,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(16,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(17,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(18,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(19,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(20,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(21,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 -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(22,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 -tvw -vLx -vLx -vLx -vLx -vLx -vLx -vLx -vLx -vLx -vLx -vLx -vLx -vLx -vLx -vLx -vLx -vLx -vLx -vLx -vLx -tvw -tvw -tvw -tvw -tvw -tvw -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(23,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 -tvw -vLx -vat -vat -vat -vat -vat -dsH -hbE -krJ -vat -vat -vat -vat -pmI -vat -vat -vat -vat -fHV -vat -lPi -qLQ -pmJ -kvD -ttx -gsO -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -tvw -xJz -tvw -tvw -tvw -tvw -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(24,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 -tvw -vLx -vat -vat -vat -fHV -cNw -vat -hbE -vat -fHV -vat -vat -wwD -wwD -vat -vat -pPO -dsH -vat -cNw -lPi -qLQ -aXG -aXG -aXG -aXG -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kmD -jys -uAm -fqg -dkD -hvQ -rMy -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(25,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 -tvw -vLx -cNw -vat -xmn -vat -vat -vat -hbE -iuK -iuK -vat -dVb -iPs -iPs -dfL -vat -vat -vat -eSk -tvw -tvw -qLQ -aXG -xyz -nYB -ePw -tvw -kvF -dmb -tvw -iWY -dyI -bKf -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -khz -eKr -fqg -aDg -hvQ -eYD -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(26,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 -tvw -vLx -vat -vat -vat -vat -iov -vat -hbE -dsW -iuK -vat -dVb -iPs -iPs -dfL -twE -vat -vat -wwD -lPi -tYf -cKZ -oDs -ePw -blq -pMN -tvw -kvF -hIH -crl -wyn -cWL -oTx -tvw -qkZ -tHh -pHc -pHc -pHc -tHh -uWG -tvw -uKW -eKr -ybC -tvw -aDg -aDg -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(27,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 -tvw -vLx -vat -vat -vat -vat -vat -eSk -hbE -iuK -iuK -cNw -dVb -iPs -iPs -dfL -vat -vat -nHK -uGt -lPi -abZ -rDL -hvQ -pMN -wfh -pMN -tvw -kvF -hIH -tvw -tvw -tvw -tvw -tvw -bsT -pnH -vRE -vRE -vRE -cra -spb -tvw -uKW -eKr -fqg -aDg -hvQ -eYD -tvw -aaa -aaa -aaa -aaa -aaa -tvw -tvw -tvw -tvw -tvw -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(28,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 -tvw -vLx -vat -vat -vat -vat -vat -vat -hbE -eSk -vat -vat -dVb -iPs -iPs -cmV -oyI -wwD -pYF -xzt -lPi -egW -rDL -hvQ -pMN -wfh -pMN -tvw -aWb -hIH -svm -eGf -tvw -cTQ -kqK -qbp -sci -qGW -wsu -hyP -bxz -hBk -tvw -sqZ -eKr -fqg -kxy -hvQ -jKj -tvw -aaa -aaa -aaa -aaa -aaa -tvw -axP -izj -bqc -pOS -tvw -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(29,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 -tvw -vLx -vat -fHV -vat -vat -vat -vat -hbE -vat -vat -vat -dVb -iPs -iPs -iPs -iPs -iPs -iPs -xzt -lPi -ekE -wOQ -hvQ -hvQ -hvQ -bck -tvw -aWb -dkE -tvw -tvw -hjK -aXG -aXG -ubn -sci -qGW -hSC -hyP -bxz -vFW -tvw -xOQ -pNF -ybC -tvw -aDg -aDg -tvw -tvw -tvw -tvw -tvw -tvw -tvw -kHP -iPU -iPU -iPU -wXe -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(30,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 -tvw -vLx -vat -vat -krJ -vat -vat -vat -hbE -vat -sGU -vat -dVb -iPs -iPs -iPs -iPs -iPs -iPs -xzt -lPi -jaf -hvQ -hvQ -aTS -hvQ -hvQ -tvw -aWb -hIH -btJ -pSx -tvw -iEd -aXG -ubn -sci -qGW -hWy -hyP -bxz -jvR -tvw -fqg -fqg -fqg -cYb -xSr -uGU -tvw -aWb -xLS -gBR -mSs -oJP -tvw -dTl -iPU -ckD -iPU -ogI -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(31,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 -tvw -tvw -tvw -vLx -vat -iov -vat -vat -cNw -fHV -hbE -vat -vat -vat -dVb -iPs -iPs -qot -nKJ -nKJ -jtf -xzt -lPi -eXg -hvQ -deD -tvw -hvQ -dPd -tvw -kdy -hIH -tvw -tvw -tvw -aXG -aXG -ubn -sci -qGW -lFU -hyP -bxz -nOf -tvw -rPJ -fqg -fqg -cYb -xSr -jUm -tvw -bQZ -jhu -tvw -jqm -lla -tvw -sci -iPU -iPU -iPU -wXe -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(32,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 -tvw -vLx -vLx -vLx -vat -vat -vat -vat -vat -vat -tUk -bjq -vat -vat -dVb -iPs -iPs -dfL -fHV -vat -dVb -fSs -lPi -hvQ -hvQ -hvQ -kfb -lvR -wHJ -tvw -hZk -hIH -czF -xVV -tvw -onf -xct -slW -sci -qGW -hLA -hyP -bxz -hBk -tvw -aGq -mvL -bTR -wzZ -xSr -qQl -tvw -wuH -hIH -tvw -tvw -tvw -tvw -hAk -tvw -tvw -tvw -tvw -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(33,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 -tvw -vLx -vat -vat -vat -vat -vat -eSk -vat -vat -vat -hbE -vat -vat -rng -iPs -iPs -oxb -krJ -vat -vat -pbP -lPi -hvQ -hvQ -hvQ -hvQ -dGD -nJp -tvw -kdy -dkE -tvw -tvw -tvw -tvw -tvw -bsT -dXJ -iVW -iVW -iVW -ooG -spb -tvw -ilq -jjQ -xSr -qbw -xSr -xSr -tvw -xdQ -hIH -tvw -ycL -wGV -tvw -aQY -eaT -eaT -sDJ -aQY -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(34,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -tvw -tvw -vLx -vat -vat -sGU -vat -fHV -vat -vat -eSk -vat -hbE -vat -vat -dVb -iPs -iPs -cmV -wwD -wwD -wwD -wwD -tvw -kQs -tvw -tvw -tvw -vzH -ykt -dCa -hIH -aYX -aWb -bRc -tvw -hlh -tvw -npe -mBj -ndc -ndc -ndc -fcW -ckG -tvw -vcB -xSr -xSr -bCB -xSr -xSr -tvw -mju -rNI -tvw -dtL -xaT -tvw -qEu -aQY -aQY -aQY -aQY -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(35,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vLx -vLx -vat -vat -vat -vat -vat -vat -vat -vat -vat -hbE -vat -pPO -dVb -iPs -iPs -iPs -iPs -iPs -iPs -iPs -iPs -iPs -iPs -iPs -fOv -dGD -uPd -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -mcO -dwx -sZV -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -pFr -tvw -aDg -mbx -tvw -sSX -tvw -tvw -bxj -sDJ -jHv -iGO -vFj -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(36,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vat -vat -eSk -vat -vat -vat -vat -vat -vat -cNw -vat -hbE -vat -vat -dVb -iPs -iPs -iPs -iPs -iPs -iPs -iPs -iPs -iPs -iPs -iPs -rDL -dGD -wck -tvw -uis -uis -tvw -aMM -aQY -kiU -mpl -nHC -tvw -aDg -lGc -aDg -tvw -pVh -mpl -kiU -aQY -kZQ -tvw -vdv -cuM -dFj -eSC -sTH -nZP -pHi -kzD -tvw -aQY -aQY -aQY -aQY -dDp -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(37,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vat -vat -iov -vat -vat -vat -vat -tvw -aDg -aDg -aDg -tvw -vat -vat -eSk -nKJ -nKJ -nKJ -nKJ -tvw -tvw -tvw -tvw -nFH -tvw -tvw -tvw -vzH -sic -tvw -lHZ -fMM -tvw -wCN -aQY -aQY -ogq -mdD -tdP -hjy -aXG -iQP -aeG -mdD -mdT -aQY -aQY -moe -tvw -aXG -cuM -tvw -qsQ -hIH -aWb -aWb -yfm -tvw -fxE -aQY -aQY -aQY -rAe -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(38,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -tvw -tvw -vLx -vat -dsH -vat -vat -vat -vat -vat -tvw -sow -pdC -tCi -tvw -tvw -tvw -vat -vat -cNw -pPO -eSk -tvw -qrv -mHF -qDc -xgz -jzh -sIH -lPi -iMY -wck -tvw -sNg -fMM -tvw -ijv -aQY -vgs -cMh -biF -tdP -gjd -aXG -xKI -aeG -oSp -cMs -cdj -aQY -aCK -tvw -dLq -cuM -tvw -mTS -hIH -aWb -aWb -yfm -tvw -rQF -vRE -vRE -vRE -jHB -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(39,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vLx -vLx -vat -vat -vat -vat -fHV -cNw -vat -tvw -nqQ -dRE -ydt -bFN -cYT -aDg -vat -vat -vat -vat -vat -tvw -noA -hvQ -gKe -xgz -pST -oQW -lPi -iMY -wck -tvw -fzV -fMM -tvw -yjX -igp -igp -mnj -ujZ -tdP -gjd -aXG -xKI -aeG -ujZ -mnj -igp -igp -beg -tvw -aXG -cuM -tvw -sJJ -rTv -oDs -oDs -lSo -tvw -ikG -iqO -hvQ -cKf -bae -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(40,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vat -jgT -xXc -fPn -xXc -xXc -xXc -xXc -xXc -tvw -bEI -aWb -aWb -aWb -xPL -aDg -vat -vat -tvw -tvw -tvw -tvw -ezk -hvQ -mfN -xgz -eqS -eqS -xYp -ioa -ykt -mVc -fMM -fMM -tvw -cYc -cFK -qIY -qIY -qIY -lgF -gjd -aXG -xKI -uqJ -qIY -qIY -qIY -cFK -fiC -tvw -aXG -cuM -tvw -esP -tZU -hvQ -hvQ -cLD -tvw -ikG -iqO -hvQ -cKf -bae -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(41,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vat -vat -tQP -vat -vat -vat -vat -eSk -vat -aDg -oKM -aWb -aWb -aWb -qFG -tvw -tvw -tvw -tvw -jsY -wAE -tvw -sWb -rOf -blI -lVL -olE -olE -wtI -dGD -nJp -tvw -tvw -tvw -tvw -tvw -tvw -rRv -tdP -tdP -tvw -foI -aXG -kwp -tvw -aeG -aeG -nOb -tvw -tvw -gfW -aXG -cuM -gfW -tvw -eLt -jUK -aDg -aDg -tvw -lPi -lPi -sOk -lPi -lPi -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(42,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -fHV -vat -vat -vat -vat -vat -vat -bnU -vat -aDg -lxl -saN -wBc -wBc -ioz -yfX -bBX -aDg -enb -aXG -hmE -tvw -pxW -hPK -hPK -cRs -pST -sIH -lPi -iMY -cGt -pHe -saE -saE -fCt -saE -saE -saE -saE -saE -fCt -eLQ -aXG -hrF -fCt -saE -saE -saE -buc -pDd -aXG -aXG -cuM -gAH -wME -iLl -aXG -aXG -aXG -jGh -aXG -moG -eFV -moG -aXG -hvy -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(43,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vat -vat -vat -vat -vat -vat -vat -vat -vat -aDg -cyc -sjP -hvQ -hvQ -hvQ -stk -dPq -aDg -dPx -aXG -hmE -tvw -pST -iel -olE -olE -pST -oQW -lPi -iMY -nJp -xPZ -aXG -bWy -aXG -aXG -aXG -aXG -aXG -jXO -aXG -aXG -aXG -aXG -aXG -jXO -aXG -pXn -aXG -nAp -aXG -aXG -cuM -faN -qAW -ljS -bOl -rTM -jeT -jeT -bOl -cwA -xsg -cwA -pKV -hvy -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(44,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vat -vat -vat -vat -aQR -aSY -aSY -aSY -aSY -tvw -tvw -tvw -lPi -hAL -lPi -tvw -tvw -tvw -pNJ -aXG -hmE -tvw -tvw -lPi -vui -iwK -lPi -lPi -jHw -iMY -nJp -rYy -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -aDg -aDg -cOV -aDg -aDg -tvw -tvw -tvw -tvw -dFF -niJ -aXG -yet -dAC -hvQ -hvQ -jXq -sRV -hvQ -hvQ -sJa -gKP -eFV -aXG -aXG -hvy -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(45,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vat -cNw -vat -vat -adw -aqG -aqG -aqG -aqG -aDg -aXG -pmJ -rDL -hvQ -hvQ -uCW -tvw -bYH -tlu -pcH -pcH -lht -lPi -pgL -oIK -oIK -kOZ -kOZ -wFF -oOC -pSt -cWG -exf -mMu -cqC -aYp -jxw -aXG -lAx -uji -tCJ -hvQ -hvQ -hvQ -tin -bVH -aTE -aXG -pGZ -pmJ -aXG -ecW -sBJ -vLh -vLh -vLh -qwk -egv -vLh -vLh -vLh -nim -czd -bLN -kpC -hvy -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(46,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vat -vat -vat -vat -adw -aqG -aqG -aqG -aqG -aVs -rMF -hES -jqo -axB -afe -hvQ -tvw -cCZ -iPU -iPU -iPU -nRP -lPi -aYK -eYX -mqE -hvQ -hvQ -hvQ -hvQ -hvQ -hvQ -hvQ -hvQ -uQt -aXG -jxw -aXG -lAx -uji -tCJ -hvQ -hvQ -hvQ -tin -bVH -aTE -aXG -pGZ -aXG -aXG -mzf -lHT -hvQ -hvQ -hvQ -hWX -ibU -hvQ -hvQ -hvQ -hvQ -eVe -aXG -aXG -hvy -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(47,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vat -vat -vat -dsH -adw -aqG -aqG -aqG -aqG -aDg -cal -aXG -mac -bNh -tEq -hvQ -tvw -nKt -juT -iPU -iPU -eAc -tvw -lPi -lPi -aUh -hvQ -hvQ -hvQ -hvQ -hvQ -hvQ -hvQ -hvQ -uQt -qey -qbk -wJj -dDo -lOD -tvw -aDg -bJb -aDg -tvw -lOD -gUi -qey -kmV -wJj -aXG -mzf -lHT -hvQ -hvQ -kOk -hWX -ibU -kOk -hvQ -hvQ -hvQ -eVe -aXG -aXG -hvy -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(48,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vat -vat -fHV -vat -adw -aqG -aqG -aqG -aqG -aDg -cal -aXG -rDL -hvQ -hvQ -hvQ -tvw -nKt -thr -iPU -iPU -lVL -pHG -wft -lPi -crf -anv -ybB -mqE -hvQ -hvQ -hvQ -hvQ -hvQ -uQt -qey -onb -wJj -rDL -tvw -xVv -xSr -xSr -xSr -oYa -xEn -aOl -qey -eRc -wJj -aXG -cBq -iJX -pdW -pdW -pdW -qJW -tdm -pdW -pdW -pdW -fWc -wBI -aXG -aXG -hvy -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(49,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vat -vat -vat -vat -adw -aqG -aqG -aqG -aqG -tvw -rma -aXG -vWy -axB -irn -hvQ -tvw -kJO -juT -iPU -iPU -lVL -uJA -oQW -tvw -lPi -lPi -tvw -iMY -hvQ -hvQ -aBm -axB -uny -pBj -aXG -jxw -aXG -rDL -aDg -pMm -xSr -xSr -kqs -nOa -aDg -aOl -aXG -pGZ -aXG -aXG -ecW -qTa -iTf -iTf -iTf -xOm -qnB -iTf -iTf -iTf -qjh -faI -aXG -aXG -hvy -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(50,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vat -bnU -vat -sGU -adw -aqG -aqG -aqG -aqG -tvw -ssn -aXG -qji -bNh -tEq -hvQ -tvw -icB -iPU -iPU -iPU -lVL -olE -olE -xKN -olE -olE -bwP -dGD -hvQ -hvQ -hvQ -hvQ -hvQ -uQt -aXG -jxw -aXG -rDL -aDg -fdo -xSr -xSr -wXm -lic -aDg -aOl -aXG -pGZ -aXG -aXG -mzf -lHT -hvQ -hvQ -kOk -hWX -ibU -kOk -hvQ -hvQ -hvQ -eVe -aXG -aXG -hvy -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(51,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -eSk -vat -vat -vat -adw -aqG -aqG -aqG -aqG -tvw -loR -aXG -rDL -hvQ -hvQ -hvQ -tvw -lzk -hPK -hPK -hPK -cRs -olE -olE -fYY -olE -olE -wtI -dGD -hvQ -hvQ -bTH -fsl -bNh -hzz -aXG -jxw -aXG -rDL -aDg -rhV -xSr -xSr -kqs -eJP -aDg -aOl -aXG -pGZ -aXG -aXG -mzf -lHT -wmW -wmW -wmW -hHg -ouJ -wmW -wmW -wmW -wmW -bGH -lQq -ebz -hvy -klI -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(52,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vat -vat -vat -vat -adw -aqG -aqG -aqG -aqG -aDg -cal -aXG -vWy -axB -afe -hvQ -tvw -tvw -lPi -lPi -vui -fua -lPi -lPi -tvw -lPi -lPi -tvw -gyK -hvQ -hvQ -hvQ -hvQ -hvQ -uQt -qey -qbk -wJj -rDL -tvw -jnu -xSr -xSr -xSr -ucr -pTO -aOl -qey -kmV -wJj -aXG -cBq -rTx -hvQ -hvQ -hvQ -hWX -vUJ -hvQ -hvQ -hvQ -oJo -wBI -aXG -aXG -hvy -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(53,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vat -vat -vat -vat -adw -aqG -aqG -aqG -aqG -aDg -cal -aXG -mac -uyr -adU -hvQ -hvQ -tGG -lvR -kOZ -oIK -oIK -kOZ -kOZ -kOZ -kOZ -wHJ -tGG -dGD -hvQ -hvQ -hvQ -hvQ -hvQ -uQt -qey -onb -wJj -dDo -lOD -tvw -aDg -tsi -aDg -tvw -lOD -gUi -qey -eRc -wJj -aXG -rjf -brL -jRW -wmW -wmW -vxx -uAi -wmW -wmW -bDa -vca -oab -lQq -ebz -hvy -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(54,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vat -dsH -vat -vat -adw -aqG -aqG -aqG -aqG -aVs -rMF -hES -rDL -hvQ -hvQ -hvQ -hvQ -tGG -dGD -hvQ -hvQ -hvQ -hvQ -hvQ -hvQ -hvQ -cGt -tGG -dGD -hvQ -hvQ -hvQ -hvQ -hvQ -uQt -aXG -jxw -aXG -lAx -uji -tCJ -hvQ -hvQ -hvQ -tin -bVH -aTE -aXG -pGZ -aXG -aXG -rjf -aXG -rFa -cIk -cIk -hVf -rFa -cIk -cIk -hVf -aXG -rjf -aXG -aXG -hvy -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(55,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vat -vat -xpy -vat -adw -aqG -aqG -aqG -aqG -aDg -aXG -jXO -rDL -hvQ -hvQ -hvQ -aTS -tGG -dGD -lrp -eYX -tWA -eYX -eYX -eYX -eYX -bod -tGG -mjK -mqE -lrp -jsN -eYX -eYX -iWF -jXO -jxw -aXG -lAx -uji -tCJ -hvQ -hvQ -hvQ -tin -bVH -aTE -aXG -pGZ -aXG -aXG -rjf -sKg -sKg -sKg -rMY -sKg -aXG -qhn -aXG -aXG -aXG -rjf -aXG -aXG -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(56,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vat -bnU -vat -vat -omh -iYB -iYB -pMs -iYB -tvw -tvw -tvw -lPi -lPi -lPi -lPi -tvw -hoS -iMY -nJp -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -jHw -iMY -nJp -rYy -tvw -dHP -rGI -tvw -tvw -tvw -tvw -tvw -tvw -tvw -wyL -tvw -tvw -tvw -tvw -tvw -tvw -lPi -lPi -drE -qPw -lPi -lPi -wyF -vGe -ufv -wyF -lPi -lPi -qyu -vLY -lPi -lPi -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(57,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vat -vat -vat -vat -dsH -vat -vat -vat -bnU -pFM -vat -eSk -vat -dsH -vat -vat -cNw -tvw -iMY -nJp -tvw -iVr -rbT -dgV -wXo -nsT -bsj -nYF -tvw -vzH -nJp -aDg -fVr -iPs -iPs -rDg -vat -vat -fJQ -hbE -fJQ -dVb -iPs -bWw -tvw -uSQ -kWA -aQx -gjK -oaD -hcR -hcR -hcR -csC -uDr -tvw -rjf -aXG -tvw -nbv -oOM -qyu -qyu -slz -pXu -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(58,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vat -fHV -vat -vat -vat -vat -eSk -vat -vat -rah -vat -vat -vat -eSk -vat -iov -vat -lPi -iMY -nJp -tvw -tfe -wlA -fEg -lcR -pry -bsj -chZ -pMg -dGD -nJp -aDg -mDR -iPs -iPs -usr -wpz -vat -tIN -hbE -sZl -xtQ -iPs -dfL -tvw -vpT -aXG -iax -gjK -hkQ -hcR -hcR -hcR -nqW -xZN -tvw -rjf -gAj -tvw -joE -esD -qyu -qyu -esD -bUg -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(59,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vat -vat -vat -vat -vat -vat -vat -cNw -vat -pFM -vat -vat -vat -vat -vat -vat -vat -lPi -iMY -nJp -tvw -tvw -tvw -lcR -lcR -hVC -bsj -osk -tvw -iMY -nJp -aDg -fVr -iPs -iPs -kdw -vat -vat -vat -hbE -vat -dVb -tpU -dfL -tvw -kTe -rmZ -iax -gjK -hkQ -wkG -nqW -ocT -hcR -hcR -xIR -rjf -aXG -dXN -qyu -qyu -vPe -vPe -qyu -qyu -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(60,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vat -vat -fIS -vat -iov -vat -pod -vat -vat -pFM -vat -vat -vat -cNw -vat -vat -xmn -lPi -iMY -pSt -kOZ -sga -tvw -cWF -bsj -bsj -bsj -bsj -tvw -iMY -nJp -tvw -jSW -iPs -iPs -rDg -vat -vat -rVQ -hbE -wpz -kZF -tpU -sgD -tvw -mxj -aXG -iax -gjK -hkQ -wkG -nqW -ocT -hcR -hcR -eTo -rjf -aXG -qyu -qyu -qyu -esD -esD -qyu -qyu -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(61,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vat -eSk -vat -vat -vat -vat -vat -vat -vat -pFM -vat -vat -vat -fHV -vat -vat -vat -tvw -iMY -lrp -eYX -aPe -tvw -aFe -xPx -bsj -bsj -bUO -tvw -ukp -nJp -tvw -fVr -iPs -iPs -rDg -vat -fJQ -vat -hbE -vat -qRX -tpU -dxP -tvw -gap -wag -fTz -gjK -hkQ -hcR -hcR -hcR -nqW -wHm -tvw -wod -aXG -tvw -qyu -qyu -kDO -kDO -qyu -qyu -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(62,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -tvw -tvw -tvw -tvw -tvw -lPi -lPi -lPi -tvw -tvw -tvw -tvw -tvw -lPi -lPi -lPi -lPi -tvw -tvw -vzH -nJp -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -iMY -nJp -aDg -kLZ -iPs -iPs -rDg -mnS -vat -vat -hbE -vat -dVb -tpU -heB -tvw -tvw -iUg -aXG -std -phc -nQF -nQF -nQF -bul -gsc -tvw -rjf -aXG -tvw -cBR -hNU -qyu -qyu -qyu -qyu -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(63,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 -fov -hES -aXG -aXG -aXG -pmJ -aXG -aXG -aXG -pmJ -aXG -aXG -aXG -aXG -aXG -pPI -dGD -nJp -tvw -iVr -rbT -dgV -wXo -nsT -bsj -nYF -tvw -iMY -nJp -aDg -fVr -iPs -iPs -wqL -vat -fJQ -vat -hbE -rVQ -dVb -tpU -dfL -vat -tvw -tvw -tvw -tvw -tvw -xyz -wAE -enb -tvw -tvw -tvw -hsr -vRf -tvw -vEI -iMl -vPe -vPe -vPe -nbB -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(64,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 -tvw -mtv -eOx -pZh -pZh -jtl -aXG -aXG -xyz -pHQ -pZh -pZh -eOx -jtl -aXG -cVm -dGD -nJp -tvw -tfe -wlA -fEg -lcR -pry -bsj -chZ -dVh -dGD -nJp -aDg -fVr -iPs -iPs -usr -vat -vat -rSa -hbE -qWZ -dVb -tpU -dxP -rVQ -hbE -vat -wpz -vat -tvw -lPi -lPi -lPi -tvw -vat -dVb -iPs -iPs -fHl -tvw -uFG -uFG -uFG -uFG -kNd -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(65,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 -tvw -bjh -cAI -mDs -xqq -tUz -uYo -uYo -uYo -eNn -xqq -uET -cAI -phk -aXG -pPI -dGD -nJp -tvw -tvw -tvw -lcR -lcR -hVC -bsj -uDT -tvw -iMY -nJp -tvw -fVr -iPs -iPs -rDg -vat -vat -vat -hbE -wpz -dVb -tpU -dfL -fJQ -hbE -vat -syc -vat -vat -vat -vat -vat -vat -wpz -dVb -iPs -iPs -dfL -tvw -khC -qyu -qyu -qyu -qyu -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(66,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 -tvw -aXG -aXG -eHo -hvQ -hvQ -hvQ -hvQ -hvQ -hvQ -hvQ -rSK -aXG -aXG -jXO -cVm -dGD -pSt -kOZ -ubH -tvw -cWF -bsj -bsj -bsj -bsj -tvw -iMY -nJp -tvw -fVr -iPs -iPs -fFy -che -vqy -wpz -hbE -vat -gXw -tpU -sgD -vat -hbE -vat -vat -iuK -iuK -vat -vat -vat -vat -dky -dVb -iPs -iPs -dfL -tvw -qHJ -rbo -wIg -qyu -qyu -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(67,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 -tvw -aDg -uTg -xLF -nzO -tvw -tvw -mjo -tvw -tvw -nzO -hTh -alx -aDg -tvw -tvw -ukp -lrp -eYX -jTQ -tvw -aFe -xPx -bsj -bsj -bUO -tvw -iMY -nJp -aDg -fVr -iPs -iPs -iPs -iPs -iPs -rDg -hbE -vat -hpR -tpU -dfL -vat -hbE -vat -iXq -iuK -iuK -rSa -vat -vat -vat -rVQ -fIY -iPs -iPs -dfL -lPi -qyu -qyu -uIp -iUm -qvk -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(68,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 -tvw -aXG -bdI -eHo -hvQ -tvw -wZW -kWH -ism -tvw -hvQ -rSK -cal -aXG -tvw -oAn -oOC -nJp -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -iMY -nJp -aDg -fVr -iPs -iPs -iPs -iPs -mLa -vat -hbE -vat -fIY -tpU -dfL -vat -hbE -vat -vat -iuK -iuK -vat -vat -vat -fJQ -vat -dVb -iPs -iPs -sgD -lPi -cBR -rKs -tvw -tvw -tvw -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(69,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 -tvw -dLq -lsV -tNw -hvQ -aDg -jGH -kWH -rrA -oln -hvQ -shn -dHD -aXG -tvw -fGC -hvQ -nJp -tvw -iVr -rbT -dgV -wXo -nsT -bsj -nYF -tvw -iMY -nJp -aDg -rVQ -iem -tdp -iem -uaM -iPs -rDg -hbE -vat -uKH -tpU -sgD -fJQ -hbE -vat -fJQ -rVQ -vat -cfu -cfu -cfu -xzh -cfu -dVb -iPs -iPs -dfL -tvw -pFe -tvw -tvw -soW -oed -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(70,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 -tvw -aXG -alO -evs -hvQ -lRF -nTO -kWH -pnW -rKT -hvQ -hEK -wYH -aXG -tvw -fGC -hvQ -nJp -tvw -tfe -wlA -fEg -lcR -pry -bsj -chZ -wdB -dGD -nJp -tvw -vLx -vLx -vLx -vLx -iPs -qot -vat -hbE -vat -dVb -iPs -dfL -rSa -hbE -rSa -vat -vat -vat -pFt -eRB -cfu -cfu -cfu -xtQ -iPs -iPs -dfL -tvw -mSs -mSs -mSs -mSs -uEn -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(71,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 -tvw -aXG -aXG -lSJ -hvQ -aDg -lba -kKo -uhO -oln -hvQ -beb -aXG -aXG -tvw -vsB -hvQ -nJp -tvw -tvw -tvw -lcR -lcR -hVC -bsj -mUC -tvw -iMY -nJp -tvw -vLx -unt -tpU -vLx -dkR -vqy -rVQ -hbE -fJQ -xtQ -iPs -dfL -vat -hbE -vat -vat -vat -vat -qub -qub -cfu -knx -dbZ -pYF -iPs -iPs -oCU -tvw -hnz -mSs -mSs -mSs -fHA -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(72,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 -ckV -hES -aXG -eHo -amv -tvw -aDg -aDg -aDg -tvw -amv -rSK -aXG -aXG -tvw -iMY -hvQ -pSt -kOZ -sga -tvw -cWF -bsj -bsj -bsj -bsj -tvw -iMY -nJp -tvw -vLx -tpU -tpU -wji -tpU -tpU -vLx -tvw -tvw -tvw -eAA -tvw -tvw -tvw -vat -vat -vat -dVb -tpU -tpU -iFY -cHY -tpU -iPs -iPs -iPs -dfL -tvw -sYC -xTC -kOf -mSs -ygL -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(73,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 -tvw -aXG -aXG -inr -nrl -rYR -rYR -rYR -rYR -rYR -ojv -liU -aXG -gAj -tvw -iIb -eYX -eYX -eYX -aPe -tvw -aFe -xPx -bsj -bsj -bUO -tvw -ukp -nJp -tvw -vLx -tpU -tpU -tpU -tpU -tpU -vLx -tvw -dBJ -aqG -aqG -aqG -aqG -tvw -vat -rVQ -fJQ -vat -suL -aKa -tpU -tpU -tpU -iPs -iPs -iPs -dfL -tvw -tvw -tvw -tvw -tvw -tvw -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(74,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 -tvw -aXG -aXG -aXG -aXG -qdd -aXG -nJQ -aXG -qdd -aXG -aXG -aXG -aXG -tvw -xyz -dAM -dmR -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -vzH -nJp -tvw -vLx -tpU -tpU -tpU -tpU -unt -vLx -tvw -fmq -aeO -aqG -aqG -aqG -tvw -vat -vat -vat -vat -vat -vat -nKJ -nKJ -nKJ -jtf -iPs -nQm -fJQ -vLx -vLx -vLx -vLx -vLx -vLx -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(75,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -tvw -tvw -tvw -aXG -aXG -aXG -aXG -aXG -aXG -aXG -aXG -aXG -aXG -aXG -aXG -aXG -tvw -tvw -tvw -tvw -tvw -iVr -rbT -dgV -wXo -nsT -bsj -nYF -tvw -iMY -nJp -tvw -vLx -wji -tpU -tpU -tpU -tpU -vLx -tvw -fmq -aeO -aqG -aqG -aqG -tvw -vat -vat -vat -lTP -vat -vat -vat -vat -rVQ -vat -ybX -iPs -wiT -tpU -wji -tpU -tpU -tpU -vLx -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(76,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -rVP -aJO -aJO -aXm -aXm -aRk -awC -aAe -aRk -aXm -aXm -aXm -aRk -awC -aAe -aRk -aXm -asP -aJO -aJO -aYn -tvw -tfe -wlA -fEg -lcR -pry -bsj -chZ -yln -dGD -nJp -tvw -vLx -vLx -tpU -wji -tpU -tpU -vLx -tvw -aqG -aqG -aqG -aqG -aqG -tvw -vat -vat -vat -vat -vat -rSa -vat -vat -fJQ -dVb -iPs -qot -iRz -tpU -tpU -tpU -tpU -unt -vLx -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(77,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -thU -aKU -aXm -asP -xPD -huq -afK -afK -xPD -huq -asP -xPD -huq -afK -afK -xPD -huq -asP -aXm -gBj -ayj -tvw -tvw -tvw -lcR -lcR -hVC -bsj -cbF -tvw -iMY -nJp -tvw -aaa -vLx -tpU -tpU -tpU -iph -vLx -tvw -aqG -aqG -ouF -aqG -aqG -tvw -vat -vat -vat -vat -vat -vat -vat -rVQ -vat -syc -nKJ -fJQ -cQq -tpU -tpU -tpU -tpU -tpU -vLx -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(78,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -asv -aqG -asP -ajh -cGG -cGG -cGG -cGG -cGG -cGG -ati -cGG -cGG -cGG -cGG -cGG -cGG -aQz -asP -aqG -azR -tvw -pCw -tvw -cWF -bsj -bsj -bsj -bsj -tvw -iMY -nJp -tvw -aaa -vLx -unt -tpU -tpU -tpU -vLx -tvw -tvw -aqG -aqG -aqG -aqG -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -vLx -lXk -tpU -tpU -tpU -vLx -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(79,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -rVP -aJO -aXm -asP -xpl -oBf -jbq -jbq -oBf -gtZ -asP -xpl -oBf -jbq -jbq -oBf -gtZ -asP -aXm -aJO -ayj -tvw -qJA -tvw -aFe -xPx -bsj -bsj -bUO -tvw -iMY -nJp -tvw -aaa -vLx -tpU -tpU -tpU -tpU -vLx -vLx -tvw -aqG -aqG -aqG -aqG -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -tpU -tpU -tpU -tpU -vLx -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(80,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -thU -aKU -aKU -aXm -aXm -aXm -aXm -aXm -aXm -aXm -aXm -aXm -aXm -aXm -aXm -aXm -aXm -asP -aKU -aKU -aAC -tvw -vaB -tvw -tvw -tvw -tvw -tvw -tvw -tvw -ukp -nJp -tvw -aaa -vLx -tpU -tpU -tpU -tpU -tpU -vLx -tvw -aqG -aqG -aqG -tvw -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -tpU -tpU -unt -tpU -vLx -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(81,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -lvR -sxE -kZB -exf -qzE -gIO -mMu -xwC -oOC -nJp -tvw -aaa -vLx -iph -tpU -unt -wji -tpU -vLx -tvw -tvw -aqG -tvw -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vLx -tpU -tpU -tpU -vLx -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(82,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 -tvw -hvQ -hvQ -bDM -lvR -kOZ -kOZ -kOZ -kOZ -kOZ -dyE -kOZ -kOZ -kOZ -oOC -hvQ -hvQ -hvQ -hvQ -hvQ -hvQ -hvQ -hvQ -nJp -tvw -aaa -vLx -tpU -tpU -tpU -tpU -tpU -vLx -vLx -tvw -tvw -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -tvw -vLx -vLx -tpU -tpU -vLx -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(83,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 -tvw -wHS -hvQ -tvw -iIb -eYX -eYX -eYX -eYX -eYX -eYX -mjA -eYX -ipc -eYX -mjA -eYX -eYX -eYX -mjA -eYX -eYX -eYX -bod -tvw -aaa -vLx -vLx -tpU -tpU -tpU -iph -tpU -vLx -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -tvw -vLx -tpU -tpU -vLx -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(84,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 -tvw -hvQ -hvQ -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvm -tvw -tvw -tvw -bit -tvw -tvw -tvw -pWk -tvw -tvw -tvw -bNC -tvw -aaa -aaa -vLx -vLx -vLx -tpU -vLx -vLx -vLx -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -qna -qna -vLx -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(85,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 -tvw -tvw -tvw -tvw -aaa -aaa -aaa -aaa -tvw -rHY -mqS -aPY -tvw -rHY -rmA -aPY -tvw -rHY -vuV -aPY -tvw -rHY -gup -aPY -tvw -aaa -aaa -aaa -aaa -vLx -vLx -vLx -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -tpU -tpU -vLx -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(86,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -sBZ -bsj -bsj -tvw -sBZ -bsj -bsj -tvw -sBZ -bsj -bsj -tvw -sBZ -bsj -bsj -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -tpU -tpU -vLx -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(87,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -cWF -nCY -etn -tvw -cWF -nCY -etn -tvw -cWF -nCY -etn -tvw -cWF -nCY -etn -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -tvw -vLx -qna -qna -vLx -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(88,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -lcR -lcR -wXo -tvw -lcR -lcR -wXo -tvw -lcR -lcR -wXo -tvw -lcR -lcR -wXo -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -tvw -vLx -vLx -tpU -tpU -vLx -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(89,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -iVr -rbT -dgV -tvw -iVr -rbT -dgV -tvw -iVr -rbT -dgV -tvw -iVr -rbT -dgV -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vLx -tpU -lXk -tpU -vLx -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(90,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -pDN -hkT -kdU -tvw -pDN -hkT -kdU -tvw -pDN -hkT -kdU -tvw -pDN -hkT -kdU -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -tpU -wji -tpU -tpU -vLx -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(91,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -kSc -tpU -tpU -tpU -vLx -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(92,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -tpU -tpU -tpU -evd -vLx -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(93,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -tpU -ujQ -tpU -vLx -vLx -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(94,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -vLx -vLx -vLx -vLx -vLx -tvw -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(95,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tvw -tvw -tvw -tvw -tvw -tvw -tvw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(96,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(97,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(98,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(99,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(100,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(101,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(102,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(103,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(104,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(105,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(106,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(107,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(108,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(109,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(110,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(111,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(112,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(113,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(114,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(115,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(116,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(117,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(118,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(119,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(120,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(121,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(122,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(123,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(124,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(125,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(126,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(127,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(128,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(129,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(130,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(131,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(132,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(133,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(134,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(135,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(136,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(137,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(138,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(139,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ajj -ajj -ajj -ajj -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(140,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -aSq -ofJ -aWi -aWi -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(141,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -ayI -aqP -aPf -aPf -ayI -ayI -ayI -ayI -ayI -ayI -ayI -ayI -ayI -ayI -ayI -ayI -ayI -ayI -ayI -ayI -ayI -ayI -ayI -ayI -ayI -ayI -awk -ayI -ayI -ayI -ayI -ayI -aPf -aPf -aPf -aPf -ajj -aRe -aUm -aHZ -aWi -aVv -twL -ajj -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(142,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -ayI -ayI -ayI -aqP -aWo -ayI -ayI -ayI -ayI -ayI -ayI -ayI -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ayI -ayI -ayI -ajj -ajj -ajj -ajj -ayI -ayI -ayI -ayI -ayI -ayI -aHX -aUm -aSq -ofJ -aVv -axY -aWg -ajj -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(143,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ayI -ayI -ayI -ayI -aqP -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -aqf -aqf -aqf -aqf -aqf -axw -auf -aAz -aMW -agy -ajj -ajj -ajj -ajj -ajj -auf -ahs -ajj -ajj -ajj -ajj -ajj -aPf -aPf -ajj -axJ -aHZ -aWi -gjj -axa -aUm -ajj -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(144,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -ayp -ayI -ayI -ajj -ajj -aFP -ayd -aLH -aFP -aFP -aFP -asF -aMJ -aqf -aqX -aUw -ahC -aqf -aFP -aLH -aFP -aFP -aBr -aFP -aFP -aMJ -aFP -aFP -akp -aFP -aFP -aeT -aFP -asF -ajj -ajj -ajj -ajj -uxW -ofJ -aWi -gjj -axa -aUm -ajj -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(145,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -ayI -azs -ajj -aLH -arT -aFP -aBr -aFP -avb -aLH -aFP -aFP -aqf -aHl -aRC -aUA -aqf -aVA -aFP -aCM -aeT -aFP -aFP -aFP -aCM -aFP -aFP -aFP -aLH -aFP -aFP -aFP -aFP -aFP -aMJ -ajj -ajj -bFi -aWi -aVv -aRS -axa -aRe -ajj -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(146,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aCf -aWo -ajj -ajj -aCM -aFP -ahU -aFP -aIV -ahA -aFP -ahQ -aFP -aqf -aAq -aRC -nxR -aqf -aFB -akp -aFP -aFP -aFP -aFB -aFP -aFP -aVA -aIV -axw -aFP -aKu -aFP -aFP -aFP -aFP -aFP -anC -ajj -aCv -twL -eks -aUr -aUr -aUm -ajj -aPf -aPf -aPf -aPf -aPf -atp -atp -atp -atp -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(147,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aWo -aWo -ajj -ajK -ahQ -aLH -aFP -axw -aFP -aAz -ahs -aFP -aAc -aqf -amx -aRC -aUA -aqf -aFP -agy -aFP -aFP -aFP -aeT -asX -avb -agy -ahU -aFP -aBr -aCM -aFV -aFP -aFP -aFP -aFP -aFP -ajj -aUm -cZJ -aUm -auR -aUm -ydM -ajj -aPf -atp -atp -atp -atp -atp -uIh -qJm -atp -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(148,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ayp -aWo -ajj -ajj -aFP -aAz -aFP -axw -aFP -aFB -aFP -aFP -ahQ -aFP -aqf -aqf -aVp -aqf -aqf -ahU -aFP -ayd -aBp -aFP -aFP -aAz -aFP -ahQ -aFP -alf -arT -ayd -agy -aFP -aNk -aFP -aFP -avb -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -aPf -atp -atp -atp -uIh -uBw -qJm -uIh -atp -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(149,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ayI -azs -ajj -aqf -aqf -aTb -aqf -aTb -aqf -aqf -aLH -aFP -aFP -ayd -aLH -aKu -azY -aFP -agy -asX -aLH -aFP -aFP -aFP -aAc -aFP -aLH -aFP -aFP -aFP -aFP -aFP -akp -aFP -alF -asX -aFP -aFP -axA -axA -axA -axA -axA -axA -axA -aPf -aPf -atp -atp -uIh -qJm -qJm -ckY -atp -atp -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(150,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ayI -ajj -ajj -aqf -aAE -azr -aWT -aUo -aBk -aqf -aBr -aFP -arT -aFP -aBr -azY -azY -ahs -aeT -aAc -aFP -ahs -aFP -aFP -azk -alF -aFP -aFP -aFP -aFP -aMJ -aFP -aFP -aLH -aAc -aFP -aFP -ahA -axA -avl -aBT -aUu -axA -aNd -axA -aPf -aPf -atp -bGx -qJm -ckY -ckY -qJm -atp -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(151,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aCf -ayI -ajj -aqf -aZF -aHK -aWT -aUo -aqO -aqf -axw -aFP -aFP -ahU -aFP -tal -azY -aFP -aFP -agy -aFB -aFP -aBr -aFP -aFP -aeT -akp -aFP -aFP -aFP -agy -aeT -ahs -aMW -aFP -aFP -aGg -aFP -aNg -aIN -aIN -aIN -aOY -axD -axA -aPf -aPf -atp -atp -eZb -qJm -qJm -jFn -atp -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(152,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ayI -ayI -ajj -sQj -ail -aUo -aUo -aUo -aUo -aUK -azY -azY -azY -aFP -axw -azY -azY -aFP -azk -ahQ -aNk -arT -aLH -aFP -aFB -aFP -axw -aKu -aQw -aFP -aFP -alf -aFP -aVA -aFP -agy -aFP -aKu -axA -apT -aIN -amF -axA -aVC -axA -aPf -aPf -atp -atp -ckY -qJm -cfs -atp -aPf -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(153,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -azs -ayI -ajj -aqf -aOZ -aUo -aSy -aUo -afF -aqf -avb -azY -azY -azY -auf -azY -akp -aFP -aFP -arT -aFV -avb -aFP -ahQ -aIE -aNk -asX -aFP -aFP -aFP -aIV -aFP -aFP -aFP -akp -aFP -aFP -aFP -axA -axA -axA -sSe -axA -axA -axA -aPf -aPf -atp -qJm -qJm -atp -ckY -atp -aPf -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(154,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -ayI -ajj -aqf -rJC -aUo -awr -aUo -aGk -aqf -aTB -aFP -azY -azY -azY -azY -azY -aFP -aLH -aFP -aMJ -aFP -aFP -aFP -aMJ -aFP -aVA -aFP -aFP -azk -aAz -aFP -aFP -aFP -aMJ -aFP -aeT -aBr -aFP -ajj -aPf -aPf -aPf -aPf -aPf -aPf -atp -atp -qJm -xCy -atp -atp -atp -aPf -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(155,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -ayI -ajj -aqf -aqf -sQj -aqf -dau -aqf -aqf -aFP -aFP -ahQ -aFP -azY -azY -azY -alF -aFP -aFP -aFP -aFP -aFP -asF -aFP -aeT -ayd -aLH -aFP -aFP -aFP -aFP -aFP -asF -aFP -aFP -arT -aFP -aFP -ajj -aPf -aPf -aPf -aPf -aPf -aPf -atp -qJm -qJm -atp -aPf -aPf -aPf -aPf -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(156,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -ayI -ajj -aqf -ufz -nps -vxF -bcb -sQj -aFP -aAc -aFP -aFP -azk -aFP -azY -azY -aIV -ahQ -aFB -aFP -aFP -aFP -aLH -aFP -aFP -aFP -aFP -aMJ -agF -atQ -aFP -aFV -aFP -afA -ahU -aFP -aFP -aFP -ajj -aPf -aPf -aPf -aPf -aPf -aPf -atp -qJm -qJm -atp -aPf -aPf -aPf -aPf -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(157,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aCf -ayI -ajj -aqf -bcb -bcb -bcb -bcb -sQj -aFP -aFP -aLH -aFP -asX -aFV -azY -azY -azY -atQ -aFP -aLH -aFP -aWj -auf -aFP -aFP -aFP -aFP -aFP -aFP -ahA -alF -aFP -aFP -aLH -ahs -aFP -alf -aFP -ajj -ajj -aPf -aPf -aPf -aPf -aPf -atp -ckY -qJm -atp -aPf -aPf -aPf -aPf -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(158,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -ayI -ajj -aqf -rTU -bcb -bcb -bcb -sQj -aFP -aFP -aFV -aFB -aFP -aFP -arT -azY -azY -azY -aKu -aFP -aAc -aFP -azk -aFP -aFP -aFP -aAz -asF -aFP -aFP -aFP -azk -agy -aFP -aFP -aFP -aFP -aFP -auf -ajj -aPf -aPf -aPf -aPf -aPf -atp -qJm -qJm -atp -atp -atp -aPf -aPf -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(159,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -ayI -ajj -aqf -sRt -btN -bcb -btN -sQj -aFP -aFP -aFP -avb -aeT -aMJ -aFP -aFP -azY -azY -aFP -aSs -aSs -aFP -aLH -aFP -aTu -aBr -aFP -aFP -aLH -auf -aFP -aFP -aIV -aFP -aVA -aAc -aFP -aFP -aFP -ajj -aPf -aPf -aPf -aPf -aPf -atp -esx -qJm -cBT -atp -atp -aPf -aPf -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(160,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -ayI -ajj -aqf -aqf -aqf -aqf -aqf -aqf -aFP -auf -ahQ -aTB -aFP -aFP -aMJ -aFP -azY -azY -aFP -aeT -aFP -ahA -aFP -aFP -aFP -aFP -aIE -aFP -aFP -axw -aCM -aGg -aFP -aAz -asX -aFP -aFP -ayd -aKu -ajj -aPf -aPf -aPf -aPf -aPf -atp -atp -cBT -aTR -aTR -atp -aPf -aPf -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(161,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aCf -ayI -ajj -aFP -aFP -aFP -aFP -aIV -aFP -ayd -aIV -aAz -aFP -aFP -aFP -aFP -aFP -aFP -azY -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -jhR -hdV -jhR -jhR -jhR -aFP -aFP -aFP -ajj -ajj -aPf -aPf -aPf -aPf -atp -atp -atp -aTR -cBT -atp -aPf -aPf -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(162,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ayI -aPf -ajj -aFP -aLH -ahU -axw -aFP -aqf -aqf -aqf -aqf -aqf -aqf -aqf -aqf -aqf -pbz -fOb -aqf -aRi -akW -akW -akW -akW -akW -akW -akW -akW -akW -aVI -aFP -jhR -aKQ -hpP -rcq -jhR -aFP -aFP -aFP -aFP -ajj -ajj -ajj -aPf -aPf -ajj -ajj -ajj -kFE -aaY -aPf -aPf -aPf -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(163,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ayI -aPf -ajj -aFP -aCM -aFP -auf -aFP -aqf -qMl -weP -goK -tvh -aqf -lwv -bkA -wUS -mZp -aki -aqf -aBi -auM -aFr -aFr -aFr -aFr -aFr -aFr -aFr -auM -aKc -aFP -jhR -djn -lwt -vUv -jhR -aFP -aFP -aGg -aFP -aFP -aMJ -ajj -ajj -ajj -ajj -aFI -axw -aFP -aFP -axw -aPf -aPf -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(164,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ayI -aPf -ajj -ajK -ahQ -aFP -aFP -aFP -aqf -sGf -sGf -sGf -tuO -ycD -bll -sGf -sGf -sGf -tuO -aqf -aBi -ayA -alC -alC -alC -alC -alC -alC -alC -aUM -aKc -aFP -uWe -egn -aBv -vUv -jhR -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aaY -aFP -aFP -aFP -aFP -aFP -aFP -agy -aPf -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(165,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ayI -aPf -ajj -aFP -ahQ -aFP -aFP -aFP -aqf -lhF -cMM -mPR -hYP -aqf -qKi -oaM -oSG -gMy -kPK -aqf -aBi -ayA -alC -alC -alC -alC -alC -alC -alC -aUM -aKc -aFV -jhR -fFr -nlM -vUv -jhR -aVA -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aaY -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aBr -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(166,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aqP -aPf -ajj -aFP -aFP -azk -aFP -ahA -aqf -aqf -aqf -aqf -aqf -aqf -aqf -aqf -aqf -fAL -fOb -xyn -aJp -ayA -alC -alC -alC -alC -alC -alC -alC -aUM -aKc -aFP -jhR -iQp -pwV -gmE -jhR -aFP -aAY -aFP -aFP -aFP -avb -aFP -aFP -aaY -aFP -aFP -aFP -aFP -aMJ -aFP -aFP -alf -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(167,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aqP -aPf -ajj -aqf -aqf -aqf -aqf -aqf -aqf -aga -aPG -ats -amH -aDY -aUT -aqf -aOw -aUo -aUo -aqf -aBi -ayA -alC -alC -alC -alC -alC -alC -alC -aUM -aKc -aFP -jhR -jhR -pPH -jhR -jhR -aKu -aFP -aFP -aFP -aFP -aFP -ajj -ajj -ajj -ajj -awU -aFP -aFP -aFP -aFP -aFP -avb -aPf -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(168,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aqP -aPf -ajj -aqf -avn -avn -aIx -dRs -aqf -awM -aBd -aBd -aBd -aBd -uab -aqf -koF -aUo -aUz -aqf -aBi -ayA -alC -alC -alC -alC -alC -alC -alC -aUM -aKc -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aMJ -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ahs -aFP -aFP -aFP -aFP -ahQ -aFP -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(169,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aqP -aPf -ajj -aqf -qRd -aNY -aNY -aNY -aEL -aBd -aBd -anL -akJ -aBd -rxB -aFn -gPN -aUo -azm -aTb -aBi -ayA -alC -alC -alC -alC -alC -alC -alC -aUM -aKc -aIV -aAc -ahs -aAz -ayd -aFP -aFP -avb -aFP -ajj -ajj -umm -umm -umm -umm -umm -ajj -ajj -ajj -ajj -ahs -aFP -aFP -aFP -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(170,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aqP -aPf -ajj -aqf -aHC -aNY -aNY -asY -aqf -aZC -aBd -apu -aGV -aBd -aBd -aNj -aUo -aUo -aUo -aOR -aBi -ayA -alC -alC -alC -alC -alC -alC -alC -aUM -aKc -aFP -aLH -aAY -bAr -aCM -axw -aFP -aGg -ajj -ajj -ajj -umm -aZs -aXF -aPZ -umm -ajj -ajj -ajj -ajj -ajj -ajj -akp -aFP -aPf -aPf -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(171,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aqP -aPf -ajj -aqf -liK -aNY -aNY -asY -aqf -aLY -aBd -aBd -aBd -aBd -aZK -aFn -koF -aUo -aUo -aTb -aBi -auM -aIA -aIA -aIA -aIA -aIA -aIA -aIA -auM -aKc -aFP -aKu -aVA -aFP -azk -aFP -aFP -aFP -ajj -aEQ -aNK -umm -aTV -arh -aAr -umm -umm -umm -umm -umm -umm -ajj -aCa -aFP -aFP -aPf -ajj -asw -asw -asw -asw -asw -asw -asw -asw -asw -asw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(172,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aqP -aPf -aqf -aqf -aqf -aHb -aqf -aqf -aqf -atq -aoq -aEG -wcf -aBd -aQD -aqf -ptd -aUo -aUo -aqf -aEa -aiw -aJT -aJT -aJT -aJT -aYA -aYA -aJT -awm -ald -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -ajj -aRH -iqY -pux -aGL -aVS -aAr -umm -kYn -aYc -fvx -aDB -umm -ajj -ajj -alF -aFP -aLH -ajj -asw -azB -azB -aCS -azB -azB -aCS -azB -azB -asw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aqP -aPf -aqf -aqf -alN -aGL -buX -afj -aqf -aqf -aqf -aqf -aqf -aXl -aqf -aqf -aOw -aUo -aUz -aqf -aqf -aqf -aka -aka -aka -aqf -aqf -aqf -aqf -aqf -aqf -aqf -aFP -aFP -alk -aFP -arT -aFP -aFP -ajj -agb -aEf -nii -aGL -aSP -aRd -akS -aQQ -aQQ -aQQ -aUd -umm -ajj -ajj -aIV -aVA -aFP -ajj -asw -azB -azB -azB -azB -azB -azB -azB -azB -asw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(174,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aqP -aPf -aqf -asp -api -ayx -ayx -arp -asp -aqf -afl -aUo -aWf -aUo -aUo -aCc -aUo -aUo -aUo -aqf -asT -arP -arP -arP -arP -arP -aWL -aqf -aUo -ayo -ahY -aqf -aqf -ang -aqf -aqf -aaY -aaY -aaY -ajj -smA -afB -umm -aTI -aCY -aRx -umm -jdx -aQQ -qHc -mLK -umm -ajj -ajj -aBr -aFB -akp -aFP -asw -azB -azB -azB -azB -azB -azB -azB -aOc -asw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(175,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aqP -aPf -aqf -aBW -azl -aIp -aIp -aTk -auU -aqf -aDr -aUo -aCD -aNi -aUo -aUo -aUo -aUo -aUo -aTb -aiK -axL -aur -agQ -aOI -aOI -iXZ -aqf -aqR -alR -aQd -aqf -aqy -aUo -agr -aqf -aFP -aFP -aFP -ajj -ajj -ajj -umm -umm -umm -umm -umm -umm -akS -umm -umm -umm -ajj -ajj -ayd -aFP -agy -aFP -asw -azB -azB -azB -azB -azB -azB -azB -azB -asw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(176,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aqP -aPf -aqf -asp -aJA -aIt -aEp -aeW -asp -aqf -iZr -aid -ntJ -aOr -aUo -tci -wDG -aUo -aUo -aTb -auj -aoA -aAu -aur -aLO -aOI -aSg -aqf -aUo -axQ -aRM -aqf -aPK -aUo -awQ -aqf -aFP -aFP -aFP -awU -ajj -ajj -ajj -ajj -ajj -ajj -umm -aqV -aGL -aHY -aZz -umm -umm -ajj -ajj -ahU -aFP -aFP -aYQ -azB -azB -azB -azB -azB -azB -azB -azB -asw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(177,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aqP -aPf -aqf -asp -aJA -asQ -auo -aeW -asp -aqf -oyi -aUo -aUo -aUo -aUo -aCD -wDG -aUo -aUz -aTb -aBH -axL -azT -azT -azT -asC -sIb -ang -aUo -aUo -aUz -aqf -aYj -aUo -aKD -aqf -aFP -aFP -aFP -aFP -aFP -aFP -aIm -aqP -azC -ayI -umm -azj -awW -aOW -aMV -jQJ -umm -ajj -ajj -aFP -aLH -aFP -asw -aOG -azB -azB -azB -azB -azB -azB -azB -asw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(178,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aqP -aPf -aqf -asp -aiV -ahK -ahK -aMw -asp -aqf -aAL -aUo -aUo -aUo -aUo -aCD -wDG -aUo -aUo -aOR -aOp -avS -agG -aBs -axO -aGo -lSB -aqf -aUo -aME -gWT -aqf -aXd -aUo -aQa -aqf -aLH -aFP -aFP -aFP -aFP -aFP -aFP -aIm -azC -ayI -akS -aGL -atJ -axo -aLe -alH -umm -ajj -ajj -aAc -aFP -awU -asw -aOG -azB -azB -azB -azB -azB -azB -aOc -asw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(179,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aqP -aPf -aqf -asp -aJA -awn -aOi -aeW -asp -aqf -hap -aid -aUo -aUo -aid -aCD -wDG -aUo -aUo -aOR -aOp -awD -avS -alm -asC -awD -tXa -aqf -aqf -aqf -aqf -aqf -aqf -aUo -aqf -aqf -aFP -aFP -aFP -aFP -aFP -aIm -aFP -aRP -azC -ayI -umm -aFN -akS -umm -aHj -umm -umm -ajj -ajj -agy -aFB -ajj -asw -aQM -aQM -azB -azB -azB -azB -azB -azB -asw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(180,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aqP -aPf -aqf -aBW -aQW -aYP -aYP -ana -auU -aqf -xpH -aUo -aUo -aUo -aUo -aOV -wDG -aUo -aUo -aOR -aOp -axL -azT -azT -agG -asC -jZb -aqf -afr -atf -aOb -aSn -aIU -aUo -bNi -aqf -ahQ -aFB -aFP -aFP -ajj -ajj -ajj -ajj -ajj -ajj -umm -aGL -aGL -umm -umm -umm -umm -umm -ajj -ahQ -aNk -ajj -asw -aQM -aQM -afx -azB -azB -afx -azB -azB -asw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(181,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aqP -aPf -aqf -asp -alD -aUZ -aUZ -axz -asp -aqf -lnP -aPo -aUo -aUo -aUo -aCD -wDG -aUo -aUz -aTb -aBH -avS -axO -axO -axO -aGo -enf -aqf -aHP -aUo -aUo -aUo -aUo -aUo -jeI -aqf -atQ -aFP -aLH -ajj -ajj -umm -umm -umm -umm -umm -umm -aGL -aGL -umm -vqx -vUu -tKt -umm -ajj -akp -aFP -ajj -asw -asw -asw -asw -asw -asw -asw -asw -asw -asw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -xuY -wgp -wgp -wgp -wgp -wgp -wgp -wgp -wgp -wgp -wgp -wgp -wgp -wgp -wgp -wgp -wgp -wgp -wgp -wgp -wgp -wgp -wgp -wgp -wgp -wgp -wgp -wgp -xuY -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(182,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aqP -aPf -aqf -aqf -aqf -bIf -aoO -awB -aqf -aqf -aqf -aqf -aRt -aUo -alM -aCD -wDG -aUo -aUo -aTb -ayQ -aOI -aOI -aKB -aWq -aDA -sIb -ang -aUo -aUo -aWh -ahG -aGY -aUo -jeI -aqf -aFP -aFP -aFP -ajj -ajj -umm -aYk -agk -aPx -aPx -umm -aZW -aGL -umm -pUJ -pUJ -dUh -umm -ajj -aFP -aFP -ajj -ajj -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(183,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aqP -aPf -aPf -aPf -aqf -uiZ -aUo -aUo -afD -aaP -aUo -aqf -aHM -aUo -ngg -ngg -aUo -aUo -aUo -aTb -apA -aOI -aOI -aOI -aKB -aGo -ayk -aqf -apc -aUo -aUo -aUo -aUo -aUo -jeI -aqf -aFP -aFP -aFP -ajj -ajj -umm -ayt -aCU -aPx -aPx -aDQ -aGL -aGL -aoE -pUJ -pUJ -neb -umm -ajj -aaY -aOz -ajj -ajj -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -hrS -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(184,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aqP -aqP -aPf -aPf -aqf -aUo -aUo -aUo -aUo -aUo -aUo -aBo -aUo -aUo -aUo -aUo -aUo -aUo -aUo -aqf -aGT -apx -apx -apx -apx -apx -aoR -aqf -aXV -aXV -aam -aUo -aUo -aUo -jeI -aqf -aFP -aFP -aBr -ajj -ajj -umm -aCF -aMQ -aPx -awY -umm -aGL -aGL -umm -ahk -amu -nKz -umm -ajj -akp -aFP -ajj -ajj -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -xuY -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -hrS -xuY -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(185,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aqP -ayI -aPf -aPf -aqf -aUo -aUo -aUo -aUo -aUo -aUo -aqf -aKA -ayy -fFe -aUo -dVo -ayy -aks -aqf -aqf -aqf -aka -aka -aka -aqf -aqf -aqf -aqf -aqf -agV -aUo -aUo -aUo -aqf -aqf -aFP -aLH -ayd -aFP -ajj -umm -umm -umm -umm -umm -umm -umm -umm -umm -umm -umm -umm -umm -ajj -agy -aFP -ajj -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -hrS -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -hrS -hrS -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(186,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ayI -ayI -ayI -aPf -aqf -vxh -aXN -tag -aUo -aQK -aQK -aqf -amG -aDj -xVY -aUo -rUT -ayy -aeZ -aqf -aCa -aFP -azY -azY -azY -aFP -aFP -aqf -aAX -ajx -aCo -aUo -aUo -xqI -aqf -awU -aFP -aFP -aFP -aFP -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -aFP -aFP -ayd -aFP -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -hrS -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -xXn -hrS -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(187,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -ayI -ayI -aPf -aqf -aqf -aqf -aqf -aqf -aqf -aqf -aqf -aqf -aTb -aqf -aqf -aqf -aTb -aqf -aqf -aFP -aFP -azY -azY -azY -aFP -aFP -aqf -aqf -aqf -aqf -aUo -avu -aqf -aqf -aFP -aFP -aFP -aFP -aFP -aFP -aFP -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -aFP -aFP -aFP -aLH -aFP -ajj -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -xuY -xXn -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -hrS -hrS -xuY -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(188,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -ayI -aPf -aPf -aPf -aPf -ajj -aIr -aIr -aIr -aIr -aIr -aIr -aIr -aIr -aIr -aIr -aIr -aBa -aFP -aFP -aFP -azY -azY -aFP -aAz -aFP -aqf -aAX -ajx -aUo -aCR -aqf -aFP -aFP -aFP -aFP -alo -ahQ -aNk -arT -aLH -aFP -aFP -aFP -aFP -ahQ -aFP -agy -aFP -ahQ -aFP -agy -aFP -aFP -ahs -ajj -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -hrS -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -hrS -hrS -hrS -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(189,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -ayI -ayI -aPf -aPf -aPf -ajj -aIr -aIr -aIr -aIr -aIr -aTp -aIr -aIr -aIr -aIr -aIr -aBa -awU -aFP -azY -azY -azY -aFP -aFP -aLH -aqf -aqf -aqf -aTb -aqf -aqf -aFP -aFP -aFP -aFP -aFP -aFP -aFV -avb -aFP -aFP -auf -alF -aeT -asX -ahU -aFP -ayd -asX -ahU -aFP -ayd -aFB -awV -ajj -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -hrS -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -hrS -hrS -hrS -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(190,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -ayI -ayI -ayI -aPf -aPf -aFP -agU -aIr -aIr -aIr -aIr -aIg -aIg -aIg -aIr -aIr -aIr -aIr -aBa -aFP -aFP -azY -azY -aBr -aFP -alF -aFP -aFP -aFP -aFP -aFP -aFP -alF -aFP -aFP -aFP -aFP -aLH -aFP -aFP -aFP -aFP -aFP -akp -aFP -aFP -aFP -aFP -aLH -aFP -aFP -aFP -aLH -aFP -aFP -aFP -awV -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -hrS -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -hrS -hrS -hrS -xuY -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(191,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ayI -ayI -ayI -aPf -aPf -asX -aFP -agU -aIr -aIr -aIr -aIr -aIg -aiM -aIg -aIr -aIr -aIr -aIr -aBa -aNk -azY -azY -azY -aFP -aFP -aeT -akp -agy -aFP -aFP -aFP -aFP -aeT -akp -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -agy -aFP -aFP -aFP -aeT -aMJ -ahs -aFP -aAc -aFP -aFP -ahQ -aFP -ajj -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -xuY -xXn -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -hrS -hrS -hrS -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(192,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ayI -ayI -aPf -aPf -aPf -aFP -aFP -agU -aIr -aIr -aIr -aqo -aDC -aNy -aDC -aqo -aIr -aIr -aIr -aWP -azY -azY -azY -azY -aFP -aFB -aFP -axw -aFP -aBr -awN -aFB -aFP -aFP -axw -aKu -aQw -aFP -ahQ -aFB -aFP -aFP -aFP -aFP -aFP -ayd -aBp -aFP -aFP -aFP -aFP -aFP -agy -aFB -aeT -asX -ahU -ajj -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -xuY -xuY -xuY -xuY -xuY -kjb -kjb -hrS -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -xXn -hrS -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(193,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aWo -aWo -aPf -aFP -aFP -asX -agU -aIr -aIr -aIr -aDC -aDC -aSi -aDC -aDC -aIr -aIr -aIr -aBa -aMW -azY -azY -aeT -aFP -aIE -aNk -asX -nHH -aFP -ahQ -aFP -aFP -aNk -asX -aFP -aFP -aFP -atQ -aFP -aLH -aFP -aWj -aFP -aLH -aFP -aFP -aFP -aAc -aFP -akp -aFP -aFP -aFP -aFP -aFP -aFP -ajj -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -xuY -eMg -dOP -tch -xuY -xuY -kjb -hrS -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -hrS -hrS -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(194,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -aWo -awV -aFP -amT -aFP -veh -aIr -aIr -aIr -aDC -axT -aGL -rne -mYg -aGC -aIr -aIr -aBa -aFP -aFP -azY -aFP -aFP -aFP -aFP -aKu -aFP -aeT -asX -ahU -aFP -aFP -aFP -aFP -ahQ -aFP -aFP -aKu -aFP -aAc -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aCM -aFB -ajj -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -xuY -xuY -bxg -pnu -icb -git -xuY -kjb -xuY -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -hrS -xuY -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(195,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -aPf -ajj -aFP -aFP -aFP -agU -aIr -auH -aDC -aDC -akf -aGL -awA -aDC -aDC -aVk -aIr -aBa -aFP -aFP -azY -awU -aFP -aFP -aTl -aFP -alf -nHH -aFP -aFP -aFP -aKu -aFP -aeT -asX -ahU -aFP -aFP -aSs -aSs -aFP -arT -agy -aBr -ahQ -aFP -aFP -aFP -aFP -alF -aFP -aeT -aFP -aMJ -aFP -ajj -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -xuY -vgL -icb -icb -icb -iUc -xuY -kjb -kjb -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -rgK -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -hrS -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(196,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -auB -ayI -ajj -ajj -kMV -aFP -agU -aGR -aDC -aDC -aDC -aox -aGL -apn -aDC -aDC -aDC -aGR -aBa -aFP -aFP -azY -azY -akp -lXl -prT -aFP -avb -ahs -aFP -aAc -aFP -aFP -alf -aFP -aFP -aFP -aFP -ahs -aFP -aAc -aFP -aFP -aFP -aFP -aFP -azk -aFP -ahA -agy -aIV -aFP -aFP -aFP -aFP -aFP -ajj -ajj -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -xuY -xuY -oQR -xuY -xuY -xuY -xuY -xuY -xuY -kjb -kjb -kjb -kjb -kjb -xuY -xuY -kzS -icb -xuY -xPp -xPp -xuY -xuY -kjb -kvj -kvj -kvj -kvj -kvj -kvj -kvj -lrB -mCr -hSU -nyr -iOR -jpJ -qIl -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kvj -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(197,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ayI -ayI -ayI -ayI -ajj -aFP -aFP -agU -aIr -aCs -aCs -aDC -akf -aGL -awA -aDC -aCs -aCs -aIr -aBa -aFP -aFP -azY -azY -aFP -aFP -aFP -aIV -ahQ -aFP -aFP -agy -aFP -aFP -avb -ahs -aFP -aAc -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aSs -axA -axA -axA -axA -axA -aBr -aFP -aFB -akp -aFP -aBr -ajj -ajj -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -xuY -wCl -kqL -fVh -mmL -afz -uYq -mHQ -xuY -kjb -kjb -kjb -hrS -hrS -hrS -xuY -xPp -hQy -mmL -kvj -gcK -kvj -mmL -xuY -xuY -xuY -xuY -hrS -xXn -hrS -xuY -xuY -qdp -bhJ -nyr -egr -tnR -xfT -xXn -hrS -obP -wPS -hrS -hrS -xXn -hrS -hrS -hrS -hrS -xXn -hrS -hrS -hrS -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(198,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ayI -aPf -aPf -aWo -ajj -aFP -aeT -agU -aIr -aPU -aMR -aDC -ani -aGL -aGL -aDC -aPU -aMR -aIr -aBa -aFP -aFP -aFP -azY -azY -ahQ -aFP -aFP -aFP -aFP -alo -ahQ -aFP -aIV -ahQ -aFP -aFP -agy -aFP -avb -aFP -aIE -aFP -aFP -aFP -aFP -axA -ekp -mtr -tfI -axA -ayd -aFP -aFP -aFP -aFP -aFP -aFP -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -xuY -xuY -rKk -kqL -oXS -oXS -oXS -kqL -hJl -xuY -xuY -duT -rpG -rpG -rpG -aUf -xuY -rkm -xDE -qnk -kvj -kvj -kvj -aWm -psl -vLt -xuY -duT -rpG -rpG -rpG -aUf -xuY -rvf -jNs -nyr -jNs -iOR -xfT -wqQ -xZY -xDE -xDE -hrS -hrS -hrS -hrS -hrS -hrS -hrS -hrS -hrS -hrS -xuY -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(199,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ayI -aPf -ayI -ayI -ajj -aFP -aFP -agU -aIr -wfN -wfN -aDC -aNy -aNy -aNy -aDC -wfN -wfN -aIr -aBa -ahs -aFP -aFP -azY -azY -azY -aeT -aFP -akp -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -auf -aFP -aFP -aFP -aFP -aVA -aFP -ahQ -axA -lLN -pCd -pCd -axA -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aDa -aUm -aUm -apX -aHZ -aQf -gjj -aGw -aUm -aUm -aRe -aUm -aUm -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -xuY -wKa -vsh -vsh -xrA -xrA -oXS -vsh -vsh -vsh -kii -rMn -rMn -rMn -rMn -rMn -pqX -vsh -vsh -ifV -gDV -gDV -gDV -emo -vsh -vsh -kii -rMn -rMn -rMn -rMn -rMn -pqX -nyr -nyr -nyr -nyr -iOR -xfT -xDE -xDE -cUF -hyO -hrS -hrS -hrS -hrS -hrS -hrS -hrS -hrS -hrS -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(200,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ayI -aPf -ayI -ajj -ajj -aeT -aFP -agU -aIr -aIr -aIr -aDC -aDC -aIg -aDC -aDC -aIr -aIr -aIr -aBa -aFP -aFP -aFP -aFP -azY -azY -azY -aFB -aFP -aFP -aLH -aFP -axA -axA -axA -axA -axA -axA -axA -aIV -aFP -aFP -aSs -aFP -aAz -aFP -axA -oVT -pCd -sfN -axA -aLH -aFP -aFP -aBr -aFP -aFP -aFP -aUm -aUm -aUm -aUm -aSq -ofJ -aQf -gjj -axa -aUm -aUm -aUm -aUm -aUm -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -xuY -nyr -uKw -lzr -nNe -mxQ -mxQ -uKw -uKw -nyr -dII -uKw -uKw -uKw -uKw -uKw -vrd -nyr -uKw -uKw -uKw -uKw -uKw -uKw -uKw -nyr -dII -uKw -uKw -uKw -uKw -uKw -vrd -nyr -quB -nsL -xZY -iOR -xfT -cUF -hyO -hrS -hrS -kjb -kjb -xuY -kjb -kjb -hrS -hrS -hrS -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(201,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ayI -aPf -aWo -ajj -aFP -aFP -asX -agU -aIr -aIr -aIr -aAh -aIr -aIr -aIr -aAh -aIr -aIr -aIr -aBa -aFP -akp -aFP -alF -azY -azY -afN -aVA -ahA -agy -aIV -ahQ -axA -aNd -axA -aSH -afs -hTD -axA -aFP -aFP -pET -aFP -avb -aFP -axA -axA -axA -rYj -axA -axA -aFP -aCM -aeT -aFP -aFP -aFP -aUm -aRe -aUm -sQX -aqQ -aHZ -aQf -aVv -aRS -axa -aUm -aDa -aUm -aUm -aUm -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -xuY -loD -iZc -qEp -fdJ -oXS -dcM -qEp -qEp -eXh -dSt -jpl -jpl -jpl -jpl -jpl -xFA -qEp -qEp -qEp -oFj -uKw -sQh -qEp -qEp -qEp -dSt -jpl -jpl -jpl -jpl -jpl -xFA -nyr -xDE -xDE -xDE -iOR -xfT -hrS -hrS -hrS -xuY -kjb -kjb -kjb -kjb -kjb -kjb -xuY -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(202,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ayI -aPf -aWo -awV -aFP -asX -aFP -agU -aIr -aIr -aIr -aIr -aIr -aIr -aIr -aIr -aIr -aIr -aIr -aBa -aFP -aFP -aLH -aAc -auf -azY -azY -avb -aFP -aFP -aBr -atQ -axA -aVC -aOY -aSC -aSC -aHJ -sMF -aFP -aVA -aFP -aVA -aFP -aFP -axA -sto -iYC -grr -gPj -axA -akp -aFP -aFP -aMJ -aFB -aFP -aDa -aUm -aUm -aUm -apX -aHZ -aQf -gjj -aOO -aUm -aUm -aUm -aUm -aUm -aUm -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -xuY -xuY -gFA -kqL -oXS -oXS -oXS -kqL -nde -xuY -xuY -pmu -gpk -gpk -gpk -wqG -xuY -uPJ -wTv -xXk -hLW -uKw -iBc -raS -uYe -kpg -xuY -pmu -gpk -gpk -gpk -wqG -xuY -rvf -keK -keK -hyO -iOR -xfT -hrS -hrS -hrS -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(203,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ayI -aPf -aPf -ajj -ajj -aFP -aFP -agU -aIr -aIr -aIr -aIr -aIr -aTp -aIr -aIr -aIr -aIr -aIr -aBa -aeT -ahs -aMW -aFP -azk -azY -azY -azY -arT -aLH -ayd -aFP -axA -axA -axA -axA -aNa -axA -axA -aFP -aIE -aFP -auf -aAc -aIV -pBW -sFF -ppR -uIf -ycB -gSD -agy -aFP -aFP -aFP -aeT -aFP -aUm -aUm -aUm -apX -aSq -ofJ -aVv -aRS -aUm -aUm -aUm -aUm -aUm -aUm -aUm -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -xuY -eBz -anZ -tGQ -mmL -wCl -anZ -ifE -xuY -kjb -kjb -hrS -hrS -kjb -kjb -uhC -xuY -xuY -mmL -hLW -nyr -iBc -mmL -xuY -xuY -xuY -kjb -hrS -hrS -kjb -kjb -xuY -lSY -lSY -lSY -lSY -pao -xfT -hrS -hrS -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(204,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ayI -ayI -aPf -aPf -ajj -ajj -aFP -agU -aIr -aIr -aIr -aIr -aIr -aIr -aIr -aIr -aIr -aIr -aIr -aBa -alf -aFP -aVA -aFP -aFP -agy -azY -azY -azY -azk -aFP -aFP -auf -axA -aHi -atF -atF -atF -axA -aIV -aFP -aKu -aFP -pET -aFP -pQp -bTK -ppR -pkJ -aAJ -gSD -aFP -ayd -aBp -aFP -aFP -aFP -aUm -aUm -aUm -aSq -ofJ -aQf -gjj -aOO -aUm -aUm -aUm -aUm -aUm -aUm -aUm -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -xuY -xuY -xuY -xuY -xuY -xuY -xuY -xuY -xuY -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -xuY -pvN -fol -mvD -xuY -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -gpk -gpk -gpk -gpk -bFy -hrS -xuY -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(205,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ayI -ayI -ayI -ayI -aPf -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -aMJ -aFP -aAc -aFP -ahs -aFP -azY -azY -azY -azY -azY -azY -azY -aVg -atF -aDl -abK -aMG -axA -aFP -aFP -aAc -aAz -aFP -aFP -pQp -iGS -ppR -ppR -gLq -bGE -aFP -aFP -aFP -aFP -aAc -aFP -aUm -aRe -aUm -aHZ -aQf -aQf -gjj -axa -sQX -aUm -aUm -aUm -aUm -aUm -aUm -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -eof -eWR -uKw -lJi -ndy -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -xuY -hrS -hrS -hrS -kjb -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(206,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -ayI -ayI -ayI -ayI -ayI -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aFP -aFP -agy -aFB -aFP -aFP -aMJ -azY -azY -azY -aFP -aFP -aFP -axA -atF -awv -aye -aNz -axA -aFP -aAz -aFP -aFP -aNk -aFP -qWc -iJK -oWR -pBW -cXb -gSD -aFP -ahs -aFP -aFP -azk -aUm -aUm -aUm -aqQ -aHZ -aQf -aQf -gjj -aGw -aUm -aDa -aUm -aUm -aUm -aUm -aUm -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -hrS -cNa -eWR -uKw -lJi -xfT -hrS -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(207,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -ayI -ayI -ayI -aPf -ovH -rUA -qBC -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aFP -aFP -aFP -ahQ -aNk -arT -aLH -afN -azY -azY -aFP -aFP -aFP -aFP -axA -axA -axA -axA -axA -axA -aFP -aFP -aFP -aFP -aIE -aVA -pBW -bTK -ppR -ppR -jgg -hge -aFB -bAr -aFP -aFP -aFP -aUm -aUm -aUm -aUm -aCv -bFi -aQf -gjj -aJh -aUm -aUm -aUm -aUm -aUm -aUm -aUm -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -hrS -cNa -eWR -uKw -lJi -xfT -hrS -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(208,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -aPf -ayI -aPf -ayI -ayI -ayI -ayI -ayI -ayI -ayI -aPf -ayI -ayI -aWo -awV -aFP -aFP -aeT -asX -avb -agy -aFV -avb -aFP -azY -azY -aFP -aFP -aFP -aFP -aeT -asX -ahU -aFP -aFP -aLH -aFP -aFP -aFP -aFP -aMJ -aFP -aFP -axA -wcd -aFy -wCC -nJO -axA -aNk -arT -aLH -aFP -aFB -aUm -aDa -aUm -aUm -aLQ -aHZ -aQf -aLD -aKP -axa -aUm -aUm -aRe -aUm -cZJ -aUm -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -cNa -eWR -uKw -lJi -xfT -hrS -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(209,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -aPf -aPf -ayI -ayI -ayI -ayI -ayI -ayI -ayI -ayI -ayI -ayI -aWo -awV -aFP -aFP -aFP -aFP -aAz -aFP -ahQ -aFP -aFP -azY -azY -awU -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aLH -aAc -aFP -ahs -ahQ -aFP -aFP -aFP -xFZ -aFP -axA -axA -pBW -pBW -axA -axA -aFV -avb -aFP -ahQ -aIE -aFP -aUm -aUm -aUm -aUm -aHZ -aQf -aQf -gjj -aGw -aUm -aUm -aUm -aUm -vYR -aUm -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -dmO -eWR -uKw -lJi -lAd -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(210,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -aPf -aPf -aPf -dai -aPf -aNU -aPf -aPf -aPf -kHZ -ayI -ayI -ayI -aWo -awV -auf -aFP -aAc -aFP -aLH -aFP -aFP -azY -azY -azY -aFP -aFP -aFP -aFP -aFP -ahs -aFP -aAc -aFP -agy -aFB -aFP -aAz -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aLH -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aUm -aUm -aUm -aUm -aCv -bFi -aQf -gjj -aJh -aUm -sQX -aUm -aUm -aUm -aUm -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -xuY -mXK -vxU -nER -xuY -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(211,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -aPf -aPf -aPf -ayI -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aMJ -aFP -aFP -aFP -aFP -aFP -azY -azY -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -agy -aFB -aFP -aFP -aFP -aFP -aFP -pET -aFP -aIV -aFP -aFP -aFP -aFP -alF -aFP -aFP -aFP -aFP -aFP -asF -aFP -aFP -aFP -aUm -aUm -aUm -aLQ -aHZ -aQf -aLD -aKP -aUm -aUm -aDa -aUm -aUm -aUm -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -xuY -xuY -xuY -hLW -nyr -iBc -xuY -xuY -xuY -kjb -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(212,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -aPf -aPf -ayI -ayI -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aIV -ahA -aFP -aFP -aFP -azY -arT -agy -aBr -aFP -aFB -akp -aFP -aFP -azk -ahQ -aNk -aFP -aVA -aIV -aFP -aFP -aFP -arT -agy -aBr -aFP -aFB -akp -aFP -aFP -aMJ -aFB -aFP -aFP -aFP -aFP -aFP -aFP -aUm -aDa -aUm -aUm -aHZ -aQf -aQf -gjj -axa -aUm -aUm -aUm -aUm -aUm -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -xuY -guS -hIU -hLW -uKw -iBc -hIU -guS -xuY -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(213,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -ayI -ayI -ayI -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aFP -aAz -ahs -aFP -aAc -azY -aFP -aFP -azY -ahQ -aFP -agy -aFP -aFP -aFP -aeT -asX -avb -agy -ahU -aFP -aAc -aFP -aFP -aFP -auf -ahQ -aFP -agy -aFP -aFP -aFP -aeT -asX -ahQ -aFP -agy -aFP -aFP -aUm -aUm -aUm -aqQ -aHZ -aQf -aQf -gjj -aJh -aUm -aUm -aUm -aUm -aUm -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -xuY -cxX -kqL -hLW -uKw -iBc -kqL -iiV -xuY -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(214,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -ayI -ayI -ayI -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aFP -aFP -aFP -ahQ -azY -azY -aKu -aFP -aeT -asX -ahU -aFP -ayd -aBp -azY -aFP -aAz -aFP -ahQ -aFP -aFP -aFP -aFP -aKu -aFP -aeT -asX -ahU -aFP -ayd -aBp -aFP -aFP -aAz -asX -ahU -aFP -ayd -aFP -aUm -aUm -sQX -aUm -aHZ -aQf -aQf -aLD -aKP -aUm -aUm -aUm -aUm -aUm -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -xuY -uYx -kqL -hLW -uKw -iBc -kqL -uYx -xuY -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(215,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -dai -aPf -ayI -ayI -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aFP -auf -aFP -ayd -azY -aLH -auf -alf -aFP -aFP -aFP -aLH -aFP -aFP -aFP -aAc -aFP -aLH -aFP -aFP -azY -ayd -aLH -aFP -alf -aMJ -aFP -aFP -aLH -aFP -aFP -aFP -aAc -aFP -aFP -aFP -aLH -aFP -aUm -aUm -aRe -aUm -aUm -aHZ -aQf -aQf -aQf -gjj -aUm -aUm -vYR -aUm -aUm -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -xuY -mmL -wCl -hLW -uKw -iBc -wCl -mmL -xuY -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(216,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -ayI -ayI -ayI -aPf -ayI -aPf -aPf -axA -axA -axA -axA -axA -axA -axA -aPf -aPf -aPf -aFP -aFP -arT -azY -azY -aBr -aFP -avb -ahs -aFP -aAc -aFP -ahs -aFP -aFP -azk -alF -aFP -aFP -aFP -aFP -aFP -aBr -aFP -avb -ahs -aFP -aAc -aFP -ahs -aFP -aFP -azk -alF -aFP -aAc -aFP -ahs -aUm -aUm -aUm -aUm -aUm -aHZ -aQf -aQf -aVv -aRS -aUm -aUm -aUm -cZJ -aUm -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -xuY -uYx -kqL -hLW -uKw -iBc -kqL -uYx -xuY -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(217,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -ayI -ayI -aPf -aPf -ayI -aPf -aPf -axA -aLz -aZq -aTD -aSt -aIN -axA -aPf -aPf -aFP -aFP -agy -azY -azY -aFP -ahU -aIV -ahQ -aFP -aFP -agy -aFB -aFP -aFP -aFP -aFP -aeT -akp -auf -aFP -aFP -ahU -aFP -aIV -ahQ -azY -aFP -agy -aFB -azY -aFP -aFP -aFP -aeT -aFP -agy -aFB -aFP -aUm -aUm -aUm -aUm -apX -aHZ -aQf -aQf -gjj -axa -aUm -aUm -aRe -aUm -aUm -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -xuY -dgo -kqL -hLW -uKw -iBc -kqL -iiV -xuY -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(218,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -ayI -ayI -ayI -ayI -ayI -aPf -aPf -sSe -aCw -aEX -aPV -aIN -aIN -axA -aPf -aFP -aFP -avb -aFB -azY -aLH -aFP -axw -aFP -aFP -aFP -azk -ahQ -aNk -arT -aLH -aFP -aFB -aFP -axw -aKu -aQw -aFP -aFP -axw -aFP -aFP -aFP -azk -ahQ -aNk -arT -aLH -aFP -aFB -bAr -azY -aBr -aFP -aUm -aUm -aDa -aUm -aUm -aSq -ofJ -aQf -aVv -aRS -aqQ -aUm -nap -aUm -aUm -ajj -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -xuY -guS -hIU -hLW -uKw -iBc -hIU -guS -xuY -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(219,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -tUL -ayI -tUL -ayI -aPf -aPf -aPf -axA -anz -auQ -aNF -aIN -aIN -axA -aFP -aFP -aFP -aKu -azY -azY -aCM -aFP -aFP -aFP -akp -aFP -aFP -aFP -aFV -avb -aFP -ahQ -aIE -aNk -asX -aFP -aFP -aFP -aFP -aFP -aFP -akp -aFP -aFP -aFP -aFV -avb -aFP -ahQ -aIE -aNk -aFP -aFP -ahQ -aUm -aUm -anr -aUm -aqQ -aHZ -aQf -aVv -aRS -aUr -aUm -sQX -aUm -aUm -ajj -ajj -ajj -ajj -ajj -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -xuY -xuY -xuY -guS -nyr -uYx -xuY -xuY -xuY -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(220,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -ayI -ayI -ayI -lgh -aPf -aPf -aPf -axA -axA -axA -aIN -aIN -aIN -amU -azY -azY -azY -azY -azY -aFP -aFP -aFP -aFP -aFP -aMJ -aFP -aLH -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aVA -aFP -aFP -aMJ -aFP -aFP -aFP -aFP -aFP -aLH -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aMJ -aeT -aFP -xsM -aUm -rZY -ggb -ggb -ggb -ggb -ggb -ggb -geG -xFU -xFU -xFU -xFU -xFU -rPm -gCR -gCR -gCR -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -xuY -cuF -kGL -hIU -xuY -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(221,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -chT -ayI -ayI -ayI -jiQ -aPf -aPf -axA -alb -aOY -aIN -aIN -aIN -axA -awU -aFP -aFP -aFP -aFP -aFV -ahQ -aFP -aFP -aFP -aFP -alF -aFP -aFP -aFP -aMJ -aFP -asF -aFP -aeT -ayd -aLH -aFP -aFP -aFP -aFP -aFP -aFP -alF -aFP -aFP -aFP -aFP -aFP -asF -aFP -aeT -aFP -aFP -aFP -aUm -aUm -rZY -wdo -wdo -wdo -wdo -wdo -wdo -geG -xFU -xFU -xFU -xFU -xFU -xFU -ipK -qoB -gCR -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -xuY -xuY -xuY -xuY -xuY -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(222,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -vQH -ayI -ayI -ayI -rfx -aPf -aPf -axA -pGK -axA -aIN -aWp -aJP -axA -aPf -aPf -aFP -aFP -aAc -aFP -aFP -azk -auf -ahA -agy -aIV -ahQ -aFB -aFP -aFP -aFP -aLH -aFP -aFP -aFP -aFP -aFP -aFP -azk -aFP -ahA -agy -aIV -ahQ -aFB -aFP -aFP -aFP -aLH -aFP -aFP -aFP -aFP -aUm -aUm -aUm -aUm -apX -aHZ -aQf -aQf -gjj -axa -aUm -xFU -xFU -xFU -xFU -xFU -oei -gCR -gCR -gCR -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(223,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -ayI -wnj -ayI -ayI -aPf -aPf -aPf -axA -axA -axA -axA -axA -axA -axA -aPf -aPf -aPf -aLH -aFP -aFP -aFP -asX -aFV -aFP -aFP -aBr -atQ -aFP -aLH -aFP -aWj -aFP -aFP -aFP -aFP -aFP -aFP -aFP -asX -aFV -auf -aFP -aBr -atQ -aFP -aLH -aFP -aWj -aFP -aTu -aFP -aFP -aUm -aUm -aUm -aUm -apX -aSq -ofJ -aQf -aVv -aHD -aUm -aUm -xFU -xFU -xFU -xFU -xFU -xFU -wZh -mzs -gCR -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(224,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -aiA -aiA -aiA -aiA -aiA -aiA -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aFP -aFP -aFP -aFB -aFP -aFP -arT -aLH -ayd -aFP -aKu -aFP -aAc -aFP -azk -aFP -aFP -aFP -aAz -asF -aFP -aFP -aFP -arT -aLH -ayd -aFP -aKu -aFP -aAc -aFP -aFP -aFP -aFP -aUm -aUm -aRe -pcp -aUm -aSq -ofJ -aQf -aVv -aRS -axa -aUm -aUm -xFU -xFU -xFU -xFU -xFU -xFU -gCR -gCR -gCR -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -kjb -kjb -kjb -kjb -kjb -kjb -kjb -kjb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(225,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -aiA -aiA -aiA -aiA -aiA -aPf -aiA -aiA -aiA -aiA -aiA -xWg -aPf -aPf -pNf -aPf -aPf -aFP -aFP -aFP -avb -aeT -aFP -aMJ -aFP -aFP -aFP -aFP -aFP -azk -auf -aLH -aFP -aTu -aBr -aFP -aFP -aFP -aeT -aFP -aFP -aMJ -aFP -aFP -aFP -azk -aFP -aFP -aLH -aFP -ajj -aUm -axJ -axJ -axJ -anQ -aHZ -aQf -aQf -gjj -aOO -aUm -aUm -aUm -xFU -xFU -qpu -qwo -tyG -iwF -ajj -ajj -ajj -ajj -ajj -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(226,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -aiA -aiA -aiA -aiA -aiA -aiA -aiA -aiA -aiA -aPf -ayI -ayI -aPf -aPf -aFP -awV -aFP -aFP -aFP -ahQ -aTB -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aeT -aFP -ahA -aFP -aFP -aFP -aFP -aIE -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aeT -aFP -ahA -aFP -ajj -ajj -axJ -axJ -aSq -uxW -uxW -ofJ -aQf -aVv -aRS -aUm -aUm -dIw -aUm -kPg -gCR -gCR -gCR -gCR -gCR -gCR -gCR -gCR -gCR -gCR -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(227,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -aiA -aiA -aiA -aiA -aiA -aiA -aiA -aiA -aiA -aPf -aPf -aPf -aPf -aFP -aFP -aPf -aPf -aMJ -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aMJ -aFP -aFP -aFP -aFP -aFP -ajj -ajj -ajj -ajj -ajj -ajj -aFP -aFP -aFP -aFP -aFP -aFP -aFP -ajj -ajj -ajj -axJ -axJ -aSq -ofJ -aQf -aQf -aQf -aQf -gjj -aGw -aUm -aUm -aUm -pZn -xFU -gCR -lXo -aAO -bhr -pKF -ncr -gCR -avn -dcP -gCR -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(228,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -aiA -aiA -aiA -aiA -aiA -aPf -aiA -aiA -aPf -aiA -aPf -aPf -aPf -aFP -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -aFP -ajj -ajj -aXW -aUm -aUm -sQX -ajj -ajj -aFP -aFP -aFP -aFP -aFP -ajj -ajj -axJ -axJ -axJ -aSq -ofJ -aQf -aQf -aQf -aQf -aVv -aRS -axa -rPh -dOC -crI -aUm -uCw -bXF -noq -noq -noq -noq -noq -kGT -aNY -cwh -gCR -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(229,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -aPf -aiA -aiA -aiA -aPf -aiA -aiA -aiA -aiA -aiA -aPf -aPf -aPf -aFP -aFP -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aFP -aFP -aFP -aFP -aFP -aPf -aPf -ajj -aEO -aXA -aUm -aUm -aUm -aUm -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -aSq -uxW -uxW -ofJ -aQf -aVv -twL -twL -twL -aRS -aUm -axa -lCi -vgx -srS -aUm -uCw -bXF -noq -iwU -tHO -noq -vuq -gCR -qnA -aNY -gCR -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(230,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aFP -aqP -aWo -aPf -aPf -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -aPf -aPf -aPf -ajj -ajj -aUm -aUm -aSq -uxW -uxW -uxW -aRL -aKP -aUm -ajj -ajj -ajj -ajj -ifp -gUC -ofJ -aQf -aQf -aQf -aVv -aRS -aOO -aUr -aUr -aUr -aUr -aUm -aUm -aUm -aUm -aUm -uCw -fbn -noq -noq -noq -noq -ueC -gCR -gCR -tVg -gCR -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(231,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ajj -ajj -ajj -ajj -ajj -ajj -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -axA -axA -axA -axA -aYO -axA -axA -axA -axA -axA -axA -axA -axA -axA -axA -axA -ajj -ajj -ajj -ajj -asz -aUm -aSq -ofJ -aQf -aQf -aQf -aQf -aGB -uxW -uxW -ajj -lkn -fTV -fTV -fTV -lkn -aVv -twL -twL -aRS -aOO -aUm -eEg -aUm -nDE -aUm -aUm -aUm -cZJ -vYR -aUm -xFU -gCR -tBo -noq -noq -noq -qWA -gCR -erP -aNY -gCR -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(232,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -axA -aAv -atF -atF -atF -avt -amk -aSV -axA -axA -aNd -aOY -aSC -afs -hTD -axA -aUm -aUm -aNq -aUm -aUm -aUm -aHZ -aQf -aQf -aQf -aQf -aQf -aQf -aQf -aQf -tEg -aQf -lkn -fTV -mMx -twL -aRS -aUm -aAS -aUr -aUm -mzR -eEg -fRe -nDE -aUm -aDa -aUm -aUm -anr -aUm -xFU -gCR -gCR -uYJ -bXF -cBm -gCR -gCR -gCR -gCR -gCR -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(233,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -axA -lNi -atF -aEm -atF -hea -abK -aFK -axA -axA -aVC -axA -aSC -aSC -alW -sSe -aSZ -aUm -aUm -aUm -aUm -aUm -aHZ -aQf -aQf -aQf -aQf -aQf -aQf -aQf -aQf -tEg -aQf -aQf -lkn -ajj -ajj -aUm -aUm -aUm -aUm -aUm -aUm -aUm -aUm -aUm -aUm -aUm -sQX -aUm -aUm -aUm -xFU -hAW -xFU -cVK -cVK -xFU -gCR -hoV -noq -aNe -gCR -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(234,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -axA -aiD -atF -aQE -atF -abK -abK -aqw -axA -axA -axA -axA -axA -aNa -axA -axA -axA -aTG -axA -axA -aUm -aUm -aCv -twL -bFi -aQf -aQf -aQf -aVv -twL -twL -ajj -ajj -ajj -ajj -ajj -ajj -ajj -aUm -vYR -aUm -aUm -aUm -aUm -aUm -aUm -aUm -fQt -aUm -aRe -aUm -aUm -kMe -xFU -xFU -xFU -xFU -xFU -ckg -noq -noq -qTu -gCR -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(235,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -axA -axC -aJX -aNT -atF -aZU -ajR -axF -axA -ajj -ajj -axA -ahI -atF -atF -aNp -aXR -atF -aRo -axA -aUm -aUm -aUm -aUm -aCv -twL -twL -twL -aRS -aUm -aUm -ajj -ajj -ajj -ajj -ajj -ajj -ajj -aUm -cZJ -aUm -aDa -sQX -aUm -aUm -aUm -aUm -aUm -upo -hoi -aUm -upo -hoi -xFU -aLW -aLW -aLW -mEW -bXF -noq -noq -fTu -gCR -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(236,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -axA -axA -axA -axA -aNa -axA -axA -axA -axA -ajj -ajj -axA -aAd -atF -anD -aSV -atF -atF -atF -aGb -aUm -aRe -aUm -aUm -aUm -aUm -aUm -aUm -aUm -aUm -ajj -ajj -ajj -jNB -ydM -fwr -ajj -ajj -aUm -aUm -aUm -aUm -aUm -aUm -aUm -aUm -dIw -aUm -aqe -aqe -aUm -aqe -niQ -xFU -aLW -aLW -aLW -mEW -bXF -noq -noq -qaO -gCR -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(237,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -axA -awt -aTv -axA -atF -axA -aTv -awt -axA -ajj -ajj -axA -atF -atF -aCQ -abK -abK -atF -atF -aGb -aUm -aUm -aUm -aUm -aUm -aUm -aRe -aUm -aUm -aUm -ajj -ajj -ajj -cZJ -tLu -aUm -ajj -ajj -dIw -aUm -aUm -aUm -aUm -aUm -aUm -aUm -aUm -aUm -mJG -lwc -aUm -mJG -lwc -xFU -aLW -aLW -aLW -fwc -bXF -noq -noq -adt -gCR -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(238,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -axA -aWy -atF -axA -atF -axA -atF -aKX -axA -ajj -ajj -axA -agA -atF -aII -aLu -abK -atF -atF -aGb -aUm -aUm -aUm -aUm -aUm -aUm -aUm -aUm -aUm -ajj -ajj -ajj -ajj -cZJ -wZS -aUm -jzL -vEs -dIw -aUm -aUm -aUm -aUm -aUm -aUm -aUm -xFU -puo -xFU -xFU -xFU -xFU -xFU -xFU -xFU -xFU -xFU -xFU -gCR -jAH -noq -mIk -gCR -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(239,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -aPf -aPf -aPf -aPf -aPf -aPf -aPf -aPf -skM -afy -atF -aNa -apW -aNa -atF -auP -axA -ajj -ajj -axA -bVx -atF -amD -abK -abK -atF -ybu -axA -aUm -aUm -aNq -aRe -aUm -aUm -aUm -aUm -aUm -ajj -ajj -ajj -ajj -jNB -aUm -fwr -ajj -gMw -gMw -gMw -gMw -gMw -gMw -gMw -kDh -gMw -lJK -gMw -gMw -gMw -gMw -gMw -gMw -gMw -pzq -gMw -iCz -gMw -gCR -gCR -gCR -gCR -gCR -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(240,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -axA -axA -axA -axA -axA -axA -axA -vZv -axA -ajj -ajj -axA -aiD -atF -aer -axF -atF -atF -aKX -axA -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -gMw -vsW -gMw -yev -haE -xxv -jBF -jIj -jIj -boa -gMw -vsW -gMw -pMT -wrf -xxv -vYz -jIj -jIj -lct -gMw -ajj -ajj -ajj -ajj -ajj -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(241,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -axA -axC -atF -aNB -atF -atF -atF -atF -axA -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -gMw -wBX -aOY -haE -haE -gMw -jIj -knL -tYk -tBN -gMw -wBX -aOY -wrf -wrf -gMw -jIj -knL -wId -tBN -gMw -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(242,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -axA -axA -axA -axA -axA -axA -axA -axA -axA -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -gMw -aVC -gMw -ehI -lQB -gMw -jIj -epr -yea -lIy -gMw -aVC -gMw -sZM -uNg -gMw -jIj -epr -yea -lIy -gMw -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(243,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -gMw -gMw -gMw -gMw -gMw -gMw -gMw -gMw -gMw -gMw -gMw -gMw -gMw -gMw -gMw -gMw -gMw -gMw -gMw -gMw -gMw -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(244,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -ajj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(245,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(246,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(247,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(248,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(249,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(250,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(251,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(252,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(253,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(254,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(255,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} diff --git a/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_1.dmm b/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_1.dmm index 658ed7e840d0f2..67bdf4f43e910e 100644 --- a/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_1.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_1.dmm @@ -277,7 +277,7 @@ M M "} (11,1,1) = {" -w +a w w s @@ -292,7 +292,7 @@ a a "} (12,1,1) = {" -w +a w w s @@ -307,7 +307,7 @@ a a "} (13,1,1) = {" -w +a w w s @@ -322,7 +322,7 @@ a a "} (14,1,1) = {" -w +a w w s @@ -337,7 +337,7 @@ a a "} (15,1,1) = {" -w +a w w s diff --git a/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_2.dmm b/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_2.dmm index ee5e2a4a69440f..ed00e590e9d2e7 100644 --- a/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_2.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_2.dmm @@ -256,7 +256,7 @@ R R "} (11,1,1) = {" -T +a T t j @@ -271,7 +271,7 @@ a a "} (12,1,1) = {" -T +a T t d @@ -286,7 +286,7 @@ a a "} (13,1,1) = {" -T +a T t s @@ -301,7 +301,7 @@ a a "} (14,1,1) = {" -T +a T t N @@ -316,7 +316,7 @@ a a "} (15,1,1) = {" -T +a T t I diff --git a/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_3.dmm b/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_3.dmm index 21be0b689bd7c0..6f7e4019e12257 100644 --- a/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_3.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_3.dmm @@ -56,6 +56,16 @@ /obj/item/stack/ore/glass, /turf/open/misc/asteroid/dug, /area/station/asteroid) +"x" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Security Maintenance Hatch" + }, +/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/eva) +"y" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/department/eva) "E" = ( /turf/open/misc/asteroid, /area/station/asteroid) @@ -276,7 +286,7 @@ N N "} (11,1,1) = {" -t +y t L t @@ -291,7 +301,7 @@ a a "} (12,1,1) = {" -t +y r k t @@ -306,7 +316,7 @@ a a "} (13,1,1) = {" -t +y d d t @@ -321,7 +331,7 @@ a a "} (14,1,1) = {" -t +x e e K @@ -336,7 +346,7 @@ a a "} (15,1,1) = {" -t +y Y e t diff --git a/_maps/map_files/tramstation/maintenance_modules/atmoscilower_attachment_a_3.dmm b/_maps/map_files/tramstation/maintenance_modules/atmoscilower_attachment_a_3.dmm index a634a8e5896eda..45f4b361a61c84 100644 --- a/_maps/map_files/tramstation/maintenance_modules/atmoscilower_attachment_a_3.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/atmoscilower_attachment_a_3.dmm @@ -1,7 +1,7 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "a" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) "c" = ( @@ -186,7 +186,7 @@ /area/station/maintenance/starboard/lesser) "S" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/floor/iron/smooth, /area/station/maintenance/starboard/lesser) "U" = ( diff --git a/_maps/map_files/tramstation/maintenance_modules/barcargoupper_attachment_b_1.dmm b/_maps/map_files/tramstation/maintenance_modules/barcargoupper_attachment_b_1.dmm index f4d127ddb292ac..0da8b4ed86b80f 100644 --- a/_maps/map_files/tramstation/maintenance_modules/barcargoupper_attachment_b_1.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/barcargoupper_attachment_b_1.dmm @@ -2,7 +2,7 @@ "a" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/floor/iron/smooth, /area/station/maintenance/department/cargo) "u" = ( @@ -28,7 +28,7 @@ "O" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /obj/effect/spawner/random/maintenance/three, /turf/open/floor/iron/smooth, /area/station/maintenance/department/cargo) @@ -39,7 +39,7 @@ "T" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /obj/effect/spawner/random/maintenance/two, /turf/open/floor/iron/smooth, /area/station/maintenance/department/cargo) diff --git a/_maps/map_files/tramstation/maintenance_modules/barcargoupper_cave_1.dmm b/_maps/map_files/tramstation/maintenance_modules/barcargoupper_cave_1.dmm index ae78ae6731f9bb..895c4f462b7467 100644 --- a/_maps/map_files/tramstation/maintenance_modules/barcargoupper_cave_1.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/barcargoupper_cave_1.dmm @@ -14,7 +14,7 @@ "d" = ( /obj/effect/turf_decal/sand/plating, /obj/item/paper{ - default_raw_text = "Please leave on-site equipment alone as they are on loan from Nanotrasen Mining Co and need returned soon."; + default_raw_text = "Please leave on-site equipment alone as they are on loan from Symphionia Mining Co and need returned soon."; name = "NOTICE" }, /turf/open/floor/plating, diff --git a/_maps/map_files/tramstation/maintenance_modules/barcargoupper_cave_2.dmm b/_maps/map_files/tramstation/maintenance_modules/barcargoupper_cave_2.dmm index 0e8deac0a590aa..189c3690b24fd6 100644 --- a/_maps/map_files/tramstation/maintenance_modules/barcargoupper_cave_2.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/barcargoupper_cave_2.dmm @@ -21,7 +21,7 @@ "k" = ( /obj/structure/rack, /obj/item/paper{ - default_raw_text = "Please leave on-site equipment alone as they are on loan from Nanotrasen Mining Co and need returned soon."; + default_raw_text = "Please leave on-site equipment alone as they are on loan from Symphionia Mining Co and need returned soon."; name = "NOTICE" }, /turf/open/misc/asteroid, diff --git a/_maps/map_files/tramstation/maintenance_modules/barcargoupper_cave_3.dmm b/_maps/map_files/tramstation/maintenance_modules/barcargoupper_cave_3.dmm index fb637e9194fb2f..a8d939f55983ac 100644 --- a/_maps/map_files/tramstation/maintenance_modules/barcargoupper_cave_3.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/barcargoupper_cave_3.dmm @@ -142,7 +142,7 @@ /area/station/maintenance/department/cargo) "H" = ( /obj/item/paper{ - default_raw_text = "Please leave on-site equipment alone as they are on loan from Nanotrasen Mining Co and need returned soon."; + default_raw_text = "Please leave on-site equipment alone as they are on loan from Symphionia Mining Co and need returned soon."; name = "NOTICE" }, /obj/effect/turf_decal/sand/plating, diff --git a/_maps/map_files/tramstation/maintenance_modules/secbarupper_attachment_a_1.dmm b/_maps/map_files/tramstation/maintenance_modules/secbarupper_attachment_a_1.dmm index 1451e2d90e0e0b..c709ff932851f3 100644 --- a/_maps/map_files/tramstation/maintenance_modules/secbarupper_attachment_a_1.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/secbarupper_attachment_a_1.dmm @@ -27,11 +27,11 @@ "n" = ( /obj/structure/rack, /obj/effect/decal/cleanable/dirt, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_x = -2; pixel_y = 6 }, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /turf/open/floor/iron/smooth, /area/station/maintenance/department/security) "o" = ( diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index 8ffdf89bfbaef7..0a6e8f8a3f22d2 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -396,8 +396,9 @@ /turf/open/floor/iron, /area/station/escapepodbay) "abE" = ( +/obj/structure/sign/warning/electric_shock, /turf/closed/wall/r_wall, -/area/station/hallway/primary/tram/center) +/area/station/maintenance/port/central) "abF" = ( /obj/effect/turf_decal/tile/bar{ dir = 8 @@ -738,7 +739,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/trimline/white/warning, -/mob/living/simple_animal/bot/medbot/autopatrol{ +/mob/living/basic/bot/medbot/autopatrol{ desc = "A Trauma Response Activation Medibot. It seems overwhelmed."; name = "T.R.A.M Unit" }, @@ -1857,13 +1858,6 @@ /obj/structure/flora/bush/grassy, /turf/open/floor/grass, /area/station/asteroid) -"ago" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall, -/area/station/hallway/primary/tram/center) "agp" = ( /obj/structure/bed/dogbed/ian, /obj/machinery/computer/security/telescreen/entertainment/directional/south, @@ -2322,17 +2316,6 @@ }, /turf/open/floor/wood/large, /area/station/service/library) -"ait" = ( -/obj/structure/sign/warning/electric_shock{ - pixel_x = -32 - }, -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/multilayer/multiz, -/turf/open/floor/plating, -/area/station/maintenance/tram/right) "aiw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, @@ -3083,11 +3066,28 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/iron, /area/station/tcommsat/computer) -"aqb" = ( -/obj/effect/turf_decal/sand, -/obj/structure/ladder, -/turf/open/floor/iron/smooth, -/area/station/maintenance/tram/mid) +"apW" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/door/airlock/security/glass{ + id_tag = "outerbrigright"; + name = "Brig" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brig_right" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/navigate_destination/sec, +/turf/open/floor/iron, +/area/station/security/brig) "aqf" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/yellow/warning{ @@ -3298,10 +3298,26 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) +"asG" = ( +/obj/structure/table, +/obj/item/storage/fancy/cigarettes{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/storage/briefcase/secure{ + pixel_x = -3; + pixel_y = 2 + }, +/turf/open/floor/iron, +/area/station/security/office) "asQ" = ( /obj/structure/sign/warning/no_smoking, /turf/closed/wall, /area/station/engineering/atmos) +"asT" = ( +/obj/machinery/air_sensor/engine_chamber, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "asY" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 @@ -3731,13 +3747,6 @@ }, /turf/open/floor/iron/white, /area/station/science/lower) -"awY" = ( -/obj/item/storage/secure/safe/directional/north, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/commons/vacant_room/commissary) "axe" = ( /obj/machinery/duct, /obj/effect/turf_decal/trimline/neutral/filled/corner, @@ -3806,7 +3815,7 @@ /area/station/medical/morgue) "axG" = ( /obj/effect/turf_decal/bot, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /obj/effect/spawner/random/maintenance/three, /obj/effect/spawner/random/engineering/flashlight, /turf/open/floor/iron, @@ -3843,7 +3852,7 @@ "ayd" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /obj/effect/spawner/random/maintenance/three, /turf/open/floor/iron, /area/station/cargo/warehouse) @@ -3953,6 +3962,12 @@ /obj/effect/turf_decal/siding/thinplating, /turf/open/floor/glass/reinforced, /area/station/security/brig) +"azC" = ( +/obj/structure/ladder, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/dim/directional/west, +/turf/open/floor/iron/smooth, +/area/station/hallway/primary/tram/center) "azN" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 8 @@ -4064,6 +4079,8 @@ /area/station/commons/vacant_room) "aBK" = ( /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/security/brig) "aBL" = ( @@ -4226,14 +4243,14 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit) "aCM" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 5 - }, /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 4 }, /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit) "aCR" = ( @@ -4440,13 +4457,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/catwalk_floor, /area/station/hallway/primary/tram/right) -"aEx" = ( -/obj/machinery/door/airlock/hatch{ - name = "Ladder Access Hatch" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/right) "aEz" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -4468,19 +4478,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/tram/right) -"aEC" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/right) -"aED" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/filled/corner, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/right) "aEE" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Mining Maintenance Access" @@ -4508,13 +4505,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/cult, /area/station/service/chapel/office) -"aEN" = ( -/obj/machinery/door/airlock/hatch{ - name = "Ladder Access Hatch" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/left) "aEP" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/catwalk_floor, @@ -4625,20 +4615,6 @@ /obj/effect/spawner/random/decoration/ornament, /turf/open/floor/iron/grimy, /area/station/service/lawoffice) -"aGn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/structure/railing, -/obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/multiz/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/hallway/primary/tram/right) "aGq" = ( /obj/effect/turf_decal/trimline/neutral/filled/line, /obj/effect/turf_decal/trimline/neutral/filled/corner{ @@ -4718,23 +4694,6 @@ /obj/effect/mapping_helpers/airlock/locked, /turf/open/floor/catwalk_floor, /area/station/hallway/primary/tram/left) -"aGM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/external{ - autoclose = 0; - frequency = 1449; - id_tag = "middleleft_lower_eva_internal"; - name = "External Access" - }, -/obj/machinery/door_buttons/access_button{ - idDoor = "middleleft_lower_eva_internal"; - idSelf = "middleleft_lower_eva_airlock_control"; - name = "External Access Button"; - pixel_y = -24 - }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "aGY" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/effect/turf_decal/trimline/yellow/warning{ @@ -4770,23 +4729,6 @@ }, /turf/open/floor/catwalk_floor, /area/station/hallway/primary/tram/center) -"aHk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/external{ - autoclose = 0; - frequency = 1449; - id_tag = "middleright_lower_eva_internal"; - name = "External Access" - }, -/obj/machinery/door_buttons/access_button{ - idDoor = "middleright_lower_eva_internal"; - idSelf = "middleright_lower_eva_airlock_control"; - name = "External Access Button"; - pixel_y = -24 - }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "aHl" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door_buttons/airlock_controller{ @@ -5658,6 +5600,10 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/atmos) +"aOW" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/catwalk_floor, +/area/station/security/mechbay) "aPe" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Library Maintenance Hatch" @@ -5951,6 +5897,10 @@ }, /turf/open/floor/iron/textured_large, /area/station/security/execution/education) +"aRT" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/service/janitor) "aSe" = ( /obj/structure/closet/wardrobe/black, /obj/effect/turf_decal/tile/blue/opposingcorners{ @@ -5982,7 +5932,7 @@ }, /obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, /turf/open/floor/iron, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "aSt" = ( /turf/open/openspace, /area/station/science/xenobiology) @@ -6105,6 +6055,14 @@ /obj/structure/cable, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/aisat_interior) +"aUx" = ( +/obj/effect/spawner/random/vending/snackvend, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "aUC" = ( /obj/machinery/camera/directional/south{ c_tag = "Civilian - Chapel South" @@ -6169,20 +6127,6 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/iron/white, /area/station/science/lower) -"aWJ" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 1 - }, -/obj/machinery/door/airlock/public/glass{ - name = "Primary Tool Storage" - }, -/obj/machinery/door/firedoor, -/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/commons/storage/primary) "aWL" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/neutral/filled/line{ @@ -6285,6 +6229,11 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/checker, /area/station/commons/lounge) +"aZr" = ( +/obj/structure/closet/emcloset, +/obj/machinery/light/dim/directional/west, +/turf/open/floor/iron/smooth, +/area/station/hallway/primary/tram/right) "aZQ" = ( /obj/effect/turf_decal/trimline/brown/filled/corner{ dir = 8 @@ -6419,6 +6368,27 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"bdX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/external{ + autoclose = 0; + frequency = 1449; + id_tag = "middleright_upper_eva_internal"; + name = "External Access" + }, +/obj/machinery/door_buttons/access_button{ + idDoor = "middleright_upper_eva_internal"; + idSelf = "middleright_upper_eva_airlock_control"; + name = "External Access Button"; + pixel_y = -24 + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "bej" = ( /obj/machinery/newscaster/directional/north, /obj/effect/turf_decal/trimline/green/filled/line, @@ -6441,13 +6411,6 @@ /obj/machinery/atmospherics/pipe/layer_manifold/supply/visible, /turf/closed/wall/r_wall, /area/station/maintenance/starboard/lesser) -"beP" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/closed/wall, -/area/station/hallway/primary/tram/center) "beT" = ( /obj/effect/turf_decal/stripes/white/full, /obj/machinery/door/firedoor, @@ -6468,7 +6431,7 @@ /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor, /area/station/medical/virology) "bfa" = ( /obj/effect/turf_decal/trimline/red/filled/line, @@ -6525,17 +6488,6 @@ }, /turf/open/indestructible/tram, /area/station/hallway/primary/tram/left) -"bgn" = ( -/obj/structure/cable/multilayer/multiz, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/structure/sign/warning/electric_shock{ - pixel_x = -32 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/port/central) "bgo" = ( /obj/structure/closet/crate/bin, /obj/effect/spawner/random/contraband/prison, @@ -6594,7 +6546,7 @@ "bhG" = ( /obj/machinery/door/airlock/centcom{ desc = "Truly, a marvel of modern engineering."; - name = "Syndicate Secure Airlock System" + name = "Symphionia Secure Airlock System" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/iron/grimy, @@ -6632,6 +6584,11 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/interrogation) +"biB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/vehicle/sealed/mecha/ripley/paddy/preset, +/turf/open/floor/iron/recharge_floor, +/area/station/security/mechbay) "biS" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 6 @@ -6673,6 +6630,10 @@ /obj/machinery/light_switch/directional/south, /turf/open/misc/asteroid/snow/coldroom, /area/station/service/kitchen/coldroom) +"bjn" = ( +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "bjK" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 10 @@ -6784,13 +6745,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/commons/dorms) -"blP" = ( -/obj/machinery/door/airlock/hatch{ - name = "Ladder Access Hatch" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "bmp" = ( /obj/effect/turf_decal/trimline/green/corner{ dir = 1 @@ -6858,6 +6812,10 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"boi" = ( +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "bok" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -7042,6 +7000,22 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"brE" = ( +/obj/structure/closet/l3closet/janitor, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 10 + }, +/obj/item/restraints/legcuffs/beartrap, +/obj/item/restraints/legcuffs/beartrap, +/obj/machinery/light_switch/directional/east{ + pixel_x = 23; + pixel_y = 8 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/service/janitor) "brG" = ( /obj/structure/reagent_dispensers/water_cooler, /turf/open/floor/wood/parquet, @@ -7243,6 +7217,22 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"bvL" = ( +/obj/machinery/light_switch/directional/south, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/purple/filled/warning, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/janitor) "bvM" = ( /obj/machinery/computer/mech_bay_power_console, /turf/open/floor/circuit/green, @@ -7256,6 +7246,13 @@ /obj/structure/cable, /turf/open/space/basic, /area/station/solars/starboard/fore) +"bwu" = ( +/obj/machinery/computer/mech_bay_power_console{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "bwz" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/neutral/filled/corner{ @@ -7896,6 +7893,14 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit) +"bIz" = ( +/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/machinery/airalarm/directional/north, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "bIC" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 6 @@ -7904,6 +7909,15 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron, /area/station/hallway/secondary/construction/engineering) +"bII" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "bIJ" = ( /obj/structure/bodycontainer/crematorium{ dir = 8; @@ -7932,6 +7946,18 @@ }, /turf/open/floor/glass/reinforced, /area/station/ai_monitored/turret_protected/aisat/hallway) +"bJY" = ( +/obj/machinery/button/elevator/directional/north{ + id = "tram_upper_center_lift" + }, +/obj/machinery/lift_indicator/directional/north{ + linked_elevator_id = "tram_upper_center_lift" + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "bKb" = ( /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 4 @@ -7955,16 +7981,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"bKp" = ( -/obj/structure/railing{ - dir = 9 - }, -/obj/effect/turf_decal/trimline/dark_red/warning{ - dir = 9 - }, -/obj/structure/transport/linear/public, -/turf/open/floor/plating/elevatorshaft, -/area/station/maintenance/tram/mid) "bKs" = ( /obj/structure/table, /obj/item/fuel_pellet, @@ -8234,6 +8250,7 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/unres, /turf/open/floor/iron/white, /area/station/science/research) "bNi" = ( @@ -8493,6 +8510,19 @@ /obj/structure/closet/secure_closet/brig, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) +"bTc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/sorting/mail{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/mail_sorting/medbay/chemistry, +/obj/effect/mapping_helpers/mail_sorting/medbay/cmo_office, +/obj/effect/mapping_helpers/mail_sorting/medbay/general, +/obj/effect/mapping_helpers/mail_sorting/medbay/virology, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "bTm" = ( /obj/machinery/field/generator, /turf/open/floor/plating, @@ -8911,15 +8941,6 @@ }, /turf/open/floor/iron, /area/station/service/janitor) -"bYK" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 4 - }, -/obj/machinery/camera/directional/east{ - c_tag = "Hallway - Service Wing Left Stairway" - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "bYP" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 1 @@ -9054,16 +9075,6 @@ }, /turf/open/floor/engine/cult, /area/station/service/library) -"car" = ( -/obj/machinery/door/airlock/hatch{ - name = "Ladder Access Hatch" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/right) "cay" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 10 @@ -9214,7 +9225,7 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/virology, /obj/structure/cable, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor, /area/station/medical/virology) "cdr" = ( /obj/effect/turf_decal/trimline/red/filled/line{ @@ -9483,6 +9494,13 @@ /obj/machinery/light/directional/east, /turf/open/floor/plating, /area/station/security/prison/work) +"cgF" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "cgR" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 @@ -9729,6 +9747,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/command) +"cmZ" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/right) "cnt" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/effect/turf_decal/trimline/red/corner{ @@ -10237,17 +10263,6 @@ "cxA" = ( /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"cxC" = ( -/obj/structure/table, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/reagent_containers/spray/cleaner, -/obj/machinery/newscaster/directional/south, -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/effect/turf_decal/trimline/purple/filled/warning, -/turf/open/floor/iron, -/area/station/service/janitor) "cya" = ( /obj/structure/railing{ dir = 4 @@ -10263,6 +10278,14 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"cyb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "cye" = ( /obj/structure/chair/stool/bar/directional/west, /obj/effect/turf_decal/siding/thinplating/dark{ @@ -10546,6 +10569,10 @@ /obj/machinery/light/warm/directional/east, /turf/open/floor/wood, /area/station/service/theater) +"cCw" = ( +/obj/structure/sign/warning/electric_shock, +/turf/closed/wall, +/area/station/hallway/primary/tram/right) "cCD" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/machinery/duct, @@ -10558,18 +10585,6 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating, /area/station/maintenance/tram/right) -"cDp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door_buttons/airlock_controller{ - idExterior = "middleleft_upper_lower_eva_external"; - idInterior = "middleleft_upper_lower_eva_internal"; - idSelf = "middleleft_upper_lower_eva_airlock_control"; - name = "External Access Console"; - pixel_y = -24 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) "cDq" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 1 @@ -10613,16 +10628,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/warehouse) -"cDX" = ( -/obj/structure/table/reinforced, -/obj/item/storage/secure/briefcase, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/command/bridge) "cDZ" = ( /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/freezer, @@ -10672,11 +10677,6 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/white, /area/station/science/lower) -"cEC" = ( -/obj/structure/ladder, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/hallway/primary/tram/right) "cEF" = ( /obj/effect/turf_decal/trimline/dark_red/warning{ dir = 10 @@ -10687,6 +10687,12 @@ }, /turf/open/floor/plating/elevatorshaft, /area/station/security/execution/transfer) +"cEV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "cFg" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 4 @@ -10839,8 +10845,8 @@ "cGN" = ( /obj/structure/table/wood, /obj/item/pai_card{ - desc = "A real Nanotrasen success, these personal AIs provide all of the companionship of an AI without any law related red-tape."; - name = "\improper Nanotrasen-brand personal AI device exhibit" + desc = "A real Symphionia success, these personal AIs provide all of the companionship of an AI without any law related red-tape."; + name = "\improper Symphionia-brand personal AI device exhibit" }, /obj/machinery/light/warm/directional/west, /turf/open/floor/carpet, @@ -11246,6 +11252,18 @@ }, /turf/open/floor/iron, /area/station/security/prison) +"cOu" = ( +/obj/machinery/door_buttons/airlock_controller{ + idExterior = "middleright_lower_lower_eva_external"; + idInterior = "middleright_lower_lower_eva_internal"; + idSelf = "middleright_lower_lower_eva_airlock_control"; + name = "External Access Console"; + pixel_y = -24 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "cOC" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 4 @@ -11439,13 +11457,6 @@ }, /turf/open/floor/iron/kitchen_coldroom, /area/station/service/kitchen/coldroom) -"cRc" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/closed/wall, -/area/station/hallway/primary/tram/center) "cRf" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -11826,25 +11837,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/tram/right) -"cYi" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "Medical - Central North-West"; - dir = 10; - network = list("ss13","medbay") - }, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "cYl" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 @@ -12102,6 +12094,13 @@ }, /turf/open/floor/iron, /area/station/maintenance/tram/mid) +"dcw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor, +/area/station/hallway/secondary/exit) "dcz" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/loading_area{ @@ -12239,11 +12238,6 @@ }, /turf/open/floor/plating/elevatorshaft, /area/station/science/xenobiology) -"dfj" = ( -/obj/structure/closet/emcloset, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/hallway/primary/tram/right) "dfw" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/trimline/neutral/filled/line, @@ -12648,16 +12642,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/storage/art) -"dno" = ( -/obj/machinery/door/airlock/hatch{ - name = "Ladder Access Hatch" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "dnp" = ( /obj/effect/turf_decal/sand/plating, /obj/machinery/door/airlock/external{ @@ -12763,7 +12747,7 @@ "dpu" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "dpv" = ( /obj/machinery/door/airlock/research/glass{ name = "Test Chamber" @@ -13037,7 +13021,12 @@ /obj/structure/disposalpipe/junction/flip{ dir = 1 }, -/turf/closed/wall, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/closet/firecloset, +/turf/open/floor/iron/dark, /area/station/hallway/secondary/exit) "dvc" = ( /obj/effect/decal/cleanable/dirt, @@ -13242,7 +13231,7 @@ /turf/open/floor/iron/dark/smooth_corner{ dir = 4 }, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "dyX" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 @@ -13264,13 +13253,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"dzv" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 1 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "dzw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -13375,12 +13357,6 @@ /obj/effect/turf_decal/stripes/white/line, /turf/open/floor/plating, /area/station/maintenance/tram/right) -"dBR" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "dCk" = ( /obj/structure/table/wood, /obj/machinery/recharger{ @@ -13460,20 +13436,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/purple/visible, /turf/closed/wall/r_wall, /area/station/science/ordnance/storage) -"dDN" = ( -/obj/structure/rack, -/obj/item/storage/briefcase{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/secure/briefcase, -/obj/effect/turf_decal/trimline/green/filled/corner, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 - }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/security/courtroom) "dEc" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 4 @@ -13588,6 +13550,18 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron, /area/station/hallway/secondary/command) +"dFN" = ( +/obj/machinery/door/poddoor/shutters{ + id = "secmechbay"; + name = "Security Mech Bay Shutters" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/delivery, +/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/security/mechbay) "dFP" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -13722,6 +13696,15 @@ }, /turf/open/openspace, /area/station/hallway/primary/tram/left) +"dIJ" = ( +/obj/machinery/door/airlock/hatch{ + name = "Emergency Exit" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "dIK" = ( /turf/closed/wall/r_wall, /area/station/science/ordnance/freezerchamber) @@ -13780,6 +13763,12 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"dJq" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/landmark/navigate_destination/dockaux, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) "dJG" = ( /obj/effect/turf_decal/bot, /obj/structure/closet/crate/freezer/blood, @@ -14092,6 +14081,14 @@ }, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"dPt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor, +/area/station/hallway/secondary/exit) "dPu" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -14099,12 +14096,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/office) -"dPB" = ( -/obj/machinery/door/airlock/hatch{ - name = "Ladder Access Hatch" - }, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "dPI" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 1 @@ -14290,6 +14281,13 @@ /obj/item/stack/medical/gauze, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"dRS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "dRY" = ( /obj/machinery/firealarm/directional/south, /obj/effect/turf_decal/trimline/brown/line, @@ -14300,7 +14298,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "dSe" = ( /turf/closed/wall, /area/station/security/prison/mess) @@ -14563,26 +14561,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) -"dXc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/external{ - autoclose = 0; - frequency = 1449; - id_tag = "middleleft_upper_eva_internal"; - name = "External Access" - }, -/obj/machinery/door_buttons/access_button{ - idDoor = "middleleft_upper_eva_internal"; - idSelf = "middleleft_upper_eva_airlock_control"; - name = "External Access Button"; - pixel_y = 24 - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "dXm" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 9 @@ -14621,6 +14599,10 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/service/hydroponics) +"dXH" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/station/cargo/sorting) "dXM" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 5 @@ -14803,12 +14785,6 @@ }, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) -"ebY" = ( -/obj/structure/ladder, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/west, -/turf/open/floor/iron/smooth, -/area/station/hallway/primary/tram/right) "ecg" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -15032,16 +15008,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/lower) -"egY" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 4 - }, -/obj/structure/transport/linear/public, -/obj/effect/turf_decal/caution/stand_clear/red{ - dir = 4 - }, -/turf/open/floor/plating/elevatorshaft, -/area/station/maintenance/tram/mid) "ehd" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/brigdoor/right/directional/east{ @@ -15099,6 +15065,12 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark, /area/station/command/teleporter) +"ejh" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "ejm" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 4 @@ -15146,6 +15118,13 @@ }, /turf/open/floor/iron/checker, /area/station/service/kitchen) +"ejL" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "ejR" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/external{ @@ -15200,16 +15179,6 @@ "ekB" = ( /turf/closed/wall, /area/station/service/janitor) -"ekE" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/table/wood, -/obj/item/storage/secure/briefcase{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/storage/lockbox/medal, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain) "ekL" = ( /obj/machinery/conveyor{ dir = 1; @@ -15519,11 +15488,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/tram/left) +"esf" = ( +/obj/structure/table/reinforced, +/obj/item/storage/briefcase/secure, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/command/bridge) "esi" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, -/mob/living/simple_animal/bot/cleanbot, +/mob/living/basic/bot/cleanbot, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "esA" = ( @@ -15628,6 +15607,10 @@ "euC" = ( /turf/open/floor/wood/parquet, /area/station/medical/psychology) +"euF" = ( +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "euI" = ( /obj/structure/table/wood, /turf/open/floor/carpet, @@ -16051,6 +16034,13 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) +"eBu" = ( +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/right) "eBy" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 9 @@ -16433,6 +16423,13 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"eKI" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "eLl" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -16842,7 +16839,7 @@ /area/station/service/theater) "eSQ" = ( /turf/closed/wall, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "eSU" = ( /obj/machinery/power/port_gen/pacman, /turf/open/floor/iron/dark, @@ -16857,20 +16854,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/security/courtroom) -"eTG" = ( -/obj/machinery/power/smes/engineering, -/obj/structure/sign/warning/electric_shock{ - pixel_x = -32 - }, -/obj/machinery/camera/emp_proof{ - c_tag = "Engineering - SMES"; - dir = 10; - network = list("ss13","engineering") - }, -/obj/structure/cable, -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/station/engineering/engine_smes) "eTQ" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -17302,6 +17285,9 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/cargo/miningdock/oresilo) +"fcR" = ( +/turf/open/openspace, +/area/station/hallway/secondary/exit) "fdr" = ( /obj/machinery/duct, /obj/structure/cable, @@ -17423,6 +17409,18 @@ }, /turf/open/floor/iron/freezer, /area/station/commons/toilet) +"ffF" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/sign/warning/electric_shock, +/obj/machinery/camera/emp_proof{ + c_tag = "Engineering - SMES"; + dir = 10; + network = list("ss13","engineering") + }, +/obj/structure/cable, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/engineering/engine_smes) "ffL" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -17466,6 +17464,18 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"fgs" = ( +/obj/machinery/door/airlock/vault{ + name = "High Security Vault" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/supply/vault, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/navigate_destination/vault, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) "fgH" = ( /obj/effect/turf_decal/weather/snow, /obj/effect/turf_decal/weather/snow/corner, @@ -17564,6 +17574,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/freezer, /area/station/security/prison/shower) +"fhK" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table/wood, +/obj/item/storage/briefcase/secure{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/storage/lockbox/medal, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) "fhL" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -18017,6 +18037,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig) +"fpx" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "fpQ" = ( /obj/effect/turf_decal/trimline/red/filled/corner, /obj/structure/cable, @@ -18264,6 +18291,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/storage) +"fuc" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "fuj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, @@ -18328,11 +18364,6 @@ /obj/structure/stairs/north, /turf/open/floor/iron/stairs/medium, /area/station/cargo/miningdock) -"fvQ" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) "fvR" = ( /obj/structure/table, /obj/item/training_toolbox, @@ -18637,6 +18668,16 @@ }, /turf/open/floor/glass/reinforced, /area/station/science/research) +"fDF" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Tram Mechanical Room" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/unres, +/obj/structure/cable, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "fDS" = ( /obj/machinery/door/airlock/engineering/glass{ name = "Laser Room" @@ -18666,18 +18707,6 @@ /obj/item/paper/fluff/ids_for_dummies, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) -"fEi" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door_buttons/airlock_controller{ - idExterior = "middleleft_lower_lower_eva_external"; - idInterior = "middleleft_lower_lower_eva_internal"; - idSelf = "middleleft_lower_lower_eva_airlock_control"; - name = "External Access Console"; - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) "fEp" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -18690,6 +18719,11 @@ }, /turf/open/floor/wood/parquet, /area/station/medical/psychology) +"fEr" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/service) "fEG" = ( /obj/machinery/deepfryer, /obj/structure/extinguisher_cabinet/directional/east, @@ -18951,11 +18985,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"fJo" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) "fJv" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner, /obj/effect/turf_decal/stripes/corner{ @@ -19040,6 +19069,20 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/lower) +"fKL" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/directional/west, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/service/janitor) "fKO" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -19159,6 +19202,15 @@ /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /turf/open/floor/engine/vacuum, /area/station/maintenance/disposal/incinerator) +"fLY" = ( +/obj/machinery/door/poddoor/shutters{ + id = "secmechbay"; + name = "Security Mech Bay Shutters" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plating, +/area/station/security/mechbay) "fMm" = ( /obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ dir = 8 @@ -19271,6 +19323,17 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"fPk" = ( +/obj/machinery/door/airlock/hatch{ + name = "Emergency Exit" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "fPv" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/window/left/directional/north{ @@ -19613,6 +19676,13 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/genetics) +"fWa" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "fWi" = ( /obj/structure/rack, /obj/structure/window/spawner/directional/north, @@ -19727,6 +19797,12 @@ }, /turf/open/floor/iron, /area/station/escapepodbay) +"fXN" = ( +/obj/structure/ladder, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/dim/directional/west, +/turf/open/floor/iron/smooth, +/area/station/hallway/secondary/exit) "fXQ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -20070,6 +20146,18 @@ "gfK" = ( /turf/closed/wall/r_wall, /area/station/security/execution/education) +"gfO" = ( +/obj/effect/turf_decal/sand, +/obj/machinery/door_buttons/airlock_controller{ + idExterior = "middleleft_upper_lower_eva_external"; + idInterior = "middleleft_upper_lower_eva_internal"; + idSelf = "middleleft_upper_lower_eva_airlock_control"; + name = "External Access Console"; + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "gfV" = ( /obj/structure/table/wood/fancy/green, /obj/effect/spawner/round_default_module, @@ -20467,6 +20555,17 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/tram/mid) +"gmp" = ( +/obj/machinery/vending/wardrobe/jani_wardrobe, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/service/janitor) "gmq" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 8 @@ -20623,7 +20722,6 @@ /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 1 }, -/obj/machinery/firealarm/directional/north, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/secondary/exit) @@ -20857,6 +20955,11 @@ /obj/structure/cable, /turf/open/openspace, /area/station/solars/starboard/fore) +"gtY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "gtZ" = ( /obj/effect/turf_decal/trimline/neutral/filled/line, /obj/machinery/airalarm/directional/south, @@ -20905,12 +21008,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"guI" = ( -/obj/machinery/holopad, -/obj/effect/turf_decal/bot, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/commons/dorms) "guL" = ( /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) @@ -21153,16 +21250,6 @@ /obj/effect/turf_decal/tile/purple/fourcorners, /turf/open/floor/iron/white, /area/station/science/research) -"gAv" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 1 - }, -/obj/machinery/newscaster/directional/east, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "gAC" = ( /obj/machinery/door/airlock/external{ name = "Solar Maintenance" @@ -21565,13 +21652,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/plating/airless, /area/station/solars/port) -"gGI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "gGV" = ( /obj/structure/table, /obj/item/instrument/harmonica, @@ -21668,6 +21748,23 @@ /obj/machinery/light/directional/east, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"gIU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/external{ + autoclose = 0; + frequency = 1449; + id_tag = "middleleft_lower_eva_internal"; + name = "External Access" + }, +/obj/machinery/door_buttons/access_button{ + idDoor = "middleleft_lower_eva_internal"; + idSelf = "middleleft_lower_eva_airlock_control"; + name = "External Access Button"; + pixel_y = 24 + }, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "gIV" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -21993,6 +22090,7 @@ /obj/effect/mapping_helpers/airlock/access/all/science/general, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/unres, /turf/open/floor/iron/white/side, /area/station/science/research) "gPA" = ( @@ -22191,26 +22289,6 @@ /obj/machinery/light/cold/directional/west, /turf/open/floor/iron/white, /area/station/science/research) -"gSQ" = ( -/obj/machinery/door/airlock{ - name = "Custodial Closet" - }, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/effect/turf_decal/trimline/purple/filled/warning, -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/service/janitor, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/service/janitor) "gTu" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -22408,6 +22486,23 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/supply) +"gXj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/external{ + autoclose = 0; + frequency = 1449; + id_tag = "middleright_lower_eva_internal"; + name = "External Access" + }, +/obj/machinery/door_buttons/access_button{ + idDoor = "middleright_lower_eva_internal"; + idSelf = "middleright_lower_eva_airlock_control"; + name = "External Access Button"; + pixel_y = 24 + }, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "gXo" = ( /obj/structure/flora/bush/fullgrass/style_random, /turf/open/misc/grass/jungle, @@ -22623,6 +22718,18 @@ }, /turf/open/floor/engine, /area/station/science/explab) +"hdk" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/left) "hdn" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 1 @@ -22939,7 +23046,7 @@ pixel_y = 32 }, /obj/item/phone{ - desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; + desc = "Supposedly a direct line to Symphionia Conglomeration of Colonists. It's not even plugged in."; pixel_x = -3; pixel_y = 3 }, @@ -23527,18 +23634,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/command/bridge) -"htI" = ( -/obj/machinery/button/elevator{ - id = "tram_upper_center_lift"; - pixel_x = 5 - }, -/obj/machinery/lift_indicator{ - linked_elevator_id = "tram_upper_center_lift"; - pixel_x = 4; - pixel_y = -2 - }, -/turf/closed/wall, -/area/station/hallway/primary/tram/center) "htJ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/white/end{ @@ -23697,6 +23792,15 @@ }, /turf/open/floor/glass, /area/station/command/meeting_room) +"hyH" = ( +/obj/structure/sign/warning/electric_shock, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/multilayer/multiz, +/turf/open/floor/plating, +/area/station/maintenance/tram/right) "hyK" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/machinery/door/window/right/directional/east{ @@ -23793,21 +23897,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/closed/wall/r_wall, /area/station/science/ordnance/burnchamber) -"hBr" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/filled/corner, -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/purple/corner, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/service/janitor) "hBs" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 10 @@ -23906,6 +23995,13 @@ /obj/machinery/light/floor, /turf/open/floor/engine/n2o, /area/station/engineering/atmos) +"hCO" = ( +/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/smooth, +/area/station/security/mechbay) "hDj" = ( /obj/machinery/door/airlock/atmos/glass{ name = "Atmospherics Testing Room" @@ -23954,16 +24050,6 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"hEp" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner, -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 4 - }, -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "hEq" = ( /obj/effect/turf_decal/siding/wood{ dir = 5 @@ -24112,14 +24198,6 @@ /obj/machinery/light/cold/directional/east, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"hGG" = ( -/obj/structure/closet/secure_closet/hos, -/obj/item/storage/secure/safe/hos{ - pixel_x = 35 - }, -/obj/structure/sign/poster/official/space_cops/directional/north, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/hos) "hGI" = ( /obj/structure/railing/corner{ dir = 1 @@ -24239,25 +24317,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/science/ordnance/storage) -"hJM" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/purple/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/purple/corner{ - dir = 1 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/service/janitor) "hJN" = ( /obj/effect/turf_decal/bot, /obj/machinery/portable_atmospherics/canister/nitrogen, @@ -24268,11 +24327,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/maintenance/tram/right) -"hKL" = ( -/obj/item/storage/secure/safe/directional/east, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/carpet, -/area/station/security/detectives_office) "hKM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /obj/structure/cable/layer1, @@ -24539,6 +24593,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/virology) +"hOy" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/warning{ + dir = 5 + }, +/obj/structure/transport/linear/public, +/turf/open/floor/plating/elevatorshaft, +/area/station/maintenance/tram/mid) "hOE" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 4 @@ -24625,6 +24689,13 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/command) +"hPQ" = ( +/obj/structure/secure_safe/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) "hPW" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/effect/turf_decal/trimline/red/filled/corner{ @@ -24712,6 +24783,7 @@ /obj/machinery/firealarm/directional/south, /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, /area/station/security/brig) "hRK" = ( @@ -24973,20 +25045,6 @@ }, /turf/open/floor/glass/reinforced, /area/station/science/genetics) -"hYb" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/machinery/elevator_control_panel/directional/north{ - linked_elevator_id = "tram_upper_center_lift"; - preset_destination_names = list("2" = "Lower Deck", "3" = "Upper Deck") - }, -/obj/effect/turf_decal/trimline/dark_red/warning{ - dir = 1 - }, -/obj/structure/transport/linear/public, -/turf/open/floor/plating/elevatorshaft, -/area/station/maintenance/tram/mid) "hYd" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/simple/green/visible, @@ -25161,18 +25219,6 @@ "ial" = ( /turf/open/floor/iron, /area/station/engineering/break_room) -"iaA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door_buttons/airlock_controller{ - idExterior = "middleright_lower_upper_eva_external"; - idInterior = "middleright_lower_upper_eva_internal"; - idSelf = "middleright_lower_upper_eva_airlock_control"; - name = "External Access Console"; - pixel_y = -24 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) "iaE" = ( /obj/machinery/door/airlock{ id_tag = "private_e"; @@ -25426,6 +25472,13 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/iron/dark, /area/station/service/chapel/monastery) +"ifI" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit) "ifN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -25748,17 +25801,6 @@ }, /turf/open/floor/glass, /area/station/command/meeting_room) -"ina" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/structure/disposalpipe/trunk/multiz{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/central) "inn" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -25837,11 +25879,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/checker, /area/station/commons/lounge) -"ioA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/dim/directional/north, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "ioC" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 10 @@ -25923,6 +25960,16 @@ }, /turf/open/floor/iron, /area/station/science/explab) +"iqe" = ( +/obj/machinery/door/airlock/hatch{ + name = "Emergency Exit" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/right) "iqg" = ( /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/freezer, @@ -26088,6 +26135,12 @@ }, /turf/open/misc/asteroid, /area/station/asteroid) +"itH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil/slippery, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "itN" = ( /obj/effect/turf_decal/stripes/white/corner{ dir = 1 @@ -26603,6 +26656,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/commons/lounge) +"iEu" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "iEz" = ( /obj/structure/lattice, /obj/machinery/camera/motion{ @@ -26894,6 +26954,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/virology) +"iKp" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "AI Upload Access" + }, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, +/obj/effect/landmark/navigate_destination/aiupload, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) "iKr" = ( /obj/effect/turf_decal/bot_white/left, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -27283,6 +27354,10 @@ /obj/structure/reagent_dispensers/foamtank, /turf/open/floor/plating, /area/station/engineering/engine_smes) +"iRg" = ( +/obj/structure/sign/warning/electric_shock, +/turf/closed/wall/r_wall, +/area/station/hallway/secondary/exit) "iRn" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 @@ -27308,12 +27383,6 @@ /obj/item/radio, /turf/open/floor/iron, /area/station/security/checkpoint/arrivals) -"iRT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall, -/area/station/hallway/primary/tram/center) "iRZ" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -27935,6 +28004,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/checker, /area/station/commons/lounge) +"jce" = ( +/obj/effect/turf_decal/trimline/neutral/filled/corner, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "jcm" = ( /obj/structure/disposaloutlet{ dir = 8 @@ -28032,6 +28105,29 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/command/bridge) +"jdG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/external{ + autoclose = 0; + frequency = 1449; + id_tag = "middleleft_upper_eva_internal"; + name = "External Access" + }, +/obj/machinery/door_buttons/access_button{ + idDoor = "middleleft_upper_eva_internal"; + idSelf = "middleleft_upper_eva_airlock_control"; + name = "External Access Button"; + pixel_y = -24 + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "jdN" = ( /obj/machinery/vending/tool, /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -28193,14 +28289,6 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/catwalk_floor, /area/station/solars/starboard/fore) -"jgh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/right) "jgn" = ( /obj/structure/table/reinforced, /obj/structure/displaycase/forsale/kitchen{ @@ -28280,12 +28368,6 @@ }, /turf/open/floor/iron/smooth, /area/station/maintenance/disposal) -"jhE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/dim/directional/north, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "jhN" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 6 @@ -28328,20 +28410,6 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos/pumproom) -"jip" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 1 - }, -/obj/machinery/camera/directional/west{ - c_tag = "Hallway - Starboard Tram Platform North-West" - }, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/turf_decal/stripes/white/line, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/right) "jit" = ( /obj/effect/turf_decal/siding/thinplating/corner{ dir = 1 @@ -29176,6 +29244,13 @@ }, /turf/open/floor/plating, /area/station/medical/storage) +"jwV" = ( +/obj/effect/turf_decal/trimline/red/filled/corner, +/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, +/area/station/security/brig) "jwX" = ( /obj/structure/railing{ dir = 1 @@ -29430,23 +29505,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) -"jAY" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 8 - }, -/obj/machinery/door/airlock/public/glass{ - name = "Command Wing Hallway" - }, -/obj/structure/disposalpipe/segment, -/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/hallway/primary/tram/left) "jBk" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner, /obj/structure/cable, @@ -29627,6 +29685,18 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"jEz" = ( +/obj/effect/turf_decal/bot, +/obj/item/mop, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 5 + }, +/obj/structure/mop_bucket/janitorialcart, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/service/janitor) "jEF" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 8 @@ -29802,9 +29872,34 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/port/central) +"jHj" = ( +/obj/structure/cable, +/obj/item/radio/intercom/directional/west, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "jHr" = ( /turf/open/floor/wood, /area/station/commons/vacant_room/office) +"jHD" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/machinery/door/airlock/public/glass{ + name = "Command Wing Hallway" + }, +/obj/structure/disposalpipe/segment, +/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/hallway/secondary/command) "jHE" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -29937,6 +30032,10 @@ id = "cargoupperbelt" }, /obj/structure/plasticflaps, +/obj/structure/disposaloutlet{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk, /turf/open/floor/plating, /area/station/cargo/sorting) "jKg" = ( @@ -30369,6 +30468,13 @@ }, /turf/open/floor/iron/white, /area/station/science/research) +"jUp" = ( +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "jUz" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty, @@ -30480,6 +30586,17 @@ "jWs" = ( /turf/closed/wall/r_wall, /area/station/security/execution/transfer) +"jWy" = ( +/obj/machinery/button/door/directional/east{ + name = "Security Mech Garage Door Controls"; + id = "secmechbay"; + req_access = list("security") + }, +/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, +/area/station/security/mechbay) "jXc" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner{ dir = 8 @@ -30530,6 +30647,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/large, /area/station/service/library) +"jXA" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/machinery/door/airlock/public/glass{ + name = "Primary Tool Storage" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/navigate_destination/tools, +/turf/open/floor/iron, +/area/station/commons/storage/primary) "jXE" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, /turf/closed/wall/r_wall, @@ -30916,15 +31048,11 @@ }, /turf/open/floor/carpet, /area/station/service/chapel/monastery) -"kcb" = ( -/obj/structure/table/wood, -/obj/item/storage/secure/briefcase{ - pixel_x = -2; - pixel_y = 6 - }, -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hop) +"kbZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/navigate_destination/disposals, +/turf/open/floor/iron/smooth, +/area/station/maintenance/disposal) "kcm" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 4 @@ -31018,6 +31146,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos) +"kcV" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/cable_coil{ + amount = 15; + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/stack/cable_coil/cut, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "kcZ" = ( /obj/item/kirbyplants/random, /turf/open/floor/carpet, @@ -31153,6 +31292,13 @@ /obj/machinery/light/dim/directional/west, /turf/open/floor/iron, /area/station/science/lower) +"kft" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/security/brig) "kfD" = ( /obj/effect/turf_decal/sand, /obj/machinery/door/airlock/external{ @@ -31173,6 +31319,13 @@ "kfO" = ( /turf/open/floor/plating, /area/station/cargo/drone_bay) +"kfR" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/obj/structure/cable, +/obj/effect/landmark/navigate_destination/dorms, +/turf/open/floor/iron, +/area/station/commons/dorms) "kgd" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -31586,6 +31739,13 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron, /area/station/security/brig) +"kmH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/small/dim/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "kmM" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 10 @@ -31630,17 +31790,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"koj" = ( -/obj/machinery/vending/wardrobe/jani_wardrobe, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 5 - }, -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/service/janitor) "koo" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/catwalk_floor, @@ -31732,6 +31881,15 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) +"kqa" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/janitor) "kqf" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -31934,8 +32092,8 @@ dir = 6 }, /obj/item/storage/box/donkpockets/donkpocketberry{ - pixel_y = 10; - pixel_x = -6 + pixel_x = -6; + pixel_y = 10 }, /turf/open/floor/iron, /area/station/engineering/break_room) @@ -32136,7 +32294,7 @@ desc = "A comfy-looking cat bed. You can even strap your pet in, in case the gravity turns off."; name = "cat bed" }, -/mob/living/simple_animal/pet/cat/jerry, +/mob/living/basic/pet/cat/jerry, /turf/open/floor/iron, /area/station/maintenance/tram/mid) "kxF" = ( @@ -32243,13 +32401,6 @@ /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/service/chapel) -"kzV" = ( -/obj/item/radio/intercom/directional/west, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "kAl" = ( /obj/structure/table/wood, /obj/item/nullrod{ @@ -32711,6 +32862,33 @@ "kHB" = ( /turf/open/floor/grass, /area/station/medical/virology) +"kHR" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/machinery/button/door/directional/west{ + id = "atmos"; + name = "Atmospherics Lockdown"; + pixel_y = 8; + req_access = list("atmospherics") + }, +/obj/machinery/button/door/directional/west{ + id = "Secure Storage"; + name = "Engineering Secure Storage"; + req_access = list("engine_equip") + }, +/obj/machinery/button/door/directional/west{ + id = "Engineering"; + name = "Engineering Lockdown"; + pixel_y = -8; + req_access = list("engineering") + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/mob/living/basic/parrot/poly, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) "kHS" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -32761,6 +32939,15 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/showroomfloor, /area/station/security/lockers) +"kIA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/item/stack/rods/two, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "kIE" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/white/line{ @@ -32938,14 +33125,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/storage) -"kMs" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/light/small/dim/directional/north, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "kMD" = ( /obj/machinery/duct, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -33250,6 +33429,7 @@ /obj/effect/landmark/event_spawn, /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, /area/station/security/brig) "kRL" = ( @@ -33854,15 +34034,6 @@ /obj/effect/turf_decal/tile/neutral/tram, /turf/open/floor/tram/plate, /area/station/hallway/primary/tram/left) -"lbl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/structure/railing{ - dir = 1 - }, -/obj/machinery/power/apc/auto_name/directional/east, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/right) "lbv" = ( /obj/machinery/telecomms/receiver/preset_right, /turf/open/floor/iron/dark/telecomms, @@ -34022,24 +34193,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"leO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/machinery/light/small/dim/directional/north, -/turf/open/floor/iron/smooth, -/area/station/maintenance/tram/mid) -"leZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door_buttons/airlock_controller{ - idExterior = "middleright_lower_lower_eva_external"; - idInterior = "middleright_lower_lower_eva_internal"; - idSelf = "middleright_lower_lower_eva_airlock_control"; - name = "External Access Console"; - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) "lfq" = ( /obj/effect/turf_decal/trimline/white/warning{ dir = 4 @@ -34221,6 +34374,22 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/tram/right) +"ljo" = ( +/obj/structure/table, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/reagent_containers/spray/cleaner, +/obj/machinery/newscaster/directional/south, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/purple/filled/warning, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/key/janitor, +/turf/open/floor/iron, +/area/station/service/janitor) "ljw" = ( /obj/structure/chair{ dir = 4 @@ -34476,23 +34645,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/maintenance/tram/mid) -"lnx" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 8 - }, -/obj/structure/disposalpipe/sorting/mail{ - dir = 4 - }, -/obj/effect/mapping_helpers/mail_sorting/medbay/chemistry, -/obj/effect/mapping_helpers/mail_sorting/medbay/cmo_office, -/obj/effect/mapping_helpers/mail_sorting/medbay/general, -/obj/effect/mapping_helpers/mail_sorting/medbay/virology, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "lnO" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 4 @@ -34680,12 +34832,19 @@ /obj/effect/mapping_helpers/airlock/access/all/science/robotics, /turf/open/floor/catwalk_floor, /area/station/maintenance/department/science) +"lqp" = ( +/obj/machinery/door/airlock/hatch{ + name = "Emergency Exit" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/right) "lqu" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; id = "pharmacy_shutters_2"; - name = "Pharmacy Shutters"; - dir = 4 + name = "Pharmacy Shutters" }, /turf/open/floor/plating, /area/station/medical/pharmacy) @@ -35331,8 +35490,12 @@ }, /obj/machinery/airalarm/directional/west, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnancefreezer" + }, /turf/open/floor/iron/white, -/area/station/science/ordnance/freezerchamber) +/area/station/science/ordnance) "lBP" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -35457,13 +35620,6 @@ }, /turf/open/floor/iron, /area/station/security/office) -"lDS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/right) "lDW" = ( /obj/machinery/plate_press, /obj/structure/sign/clock/directional/east, @@ -35678,21 +35834,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"lHs" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 1 - }, -/obj/machinery/camera/directional/west{ - c_tag = "Hallway - Central Tram Platform North-West" - }, -/obj/machinery/firealarm/directional/west, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/turf_decal/stripes/white/line, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "lHu" = ( /obj/effect/turf_decal/trimline/brown/filled/corner{ dir = 1 @@ -35906,6 +36047,16 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/cargo/storage) +"lLA" = ( +/obj/machinery/door/airlock/engineering{ + name = "Tram Mechanical Room" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/maintenance/tram/right) "lLB" = ( /obj/structure/rack, /obj/item/reagent_containers/cup/bottle/ethanol{ @@ -36188,15 +36339,6 @@ }, /turf/open/floor/plating, /area/station/command/bridge) -"lQe" = ( -/obj/machinery/door/airlock/hatch{ - name = "Ladder Access Hatch" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "lQg" = ( /obj/structure/rack, /obj/effect/spawner/random/techstorage/medical_all, @@ -36257,8 +36399,9 @@ /obj/structure/extinguisher_cabinet/directional/west, /obj/effect/decal/cleanable/oil/streak, /obj/effect/landmark/start/bitrunner, +/obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "lQT" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 6 @@ -36369,7 +36512,8 @@ /obj/structure/disposalpipe/sorting/wrap/flip{ dir = 1 }, -/turf/closed/wall, +/obj/structure/falsewall, +/turf/open/floor/plating, /area/station/cargo/sorting) "lTc" = ( /obj/effect/turf_decal/stripes/line, @@ -36379,14 +36523,6 @@ /obj/effect/landmark/start/paramedic, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"lTg" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light/small/dim/directional/south, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "lTh" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -37105,6 +37241,12 @@ }, /turf/open/floor/iron/white, /area/station/science/lobby) +"mez" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil/slippery, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "meA" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/trimline/green/filled/line{ @@ -37240,7 +37382,7 @@ }, /obj/machinery/light/directional/south, /turf/open/floor/iron/dark/smooth_corner, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "mgG" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -37390,6 +37532,29 @@ "mjM" = ( /turf/closed/wall, /area/station/security/medical) +"mjQ" = ( +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/purple/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/purple/filled/warning, +/obj/machinery/light/directional/south, +/obj/effect/landmark/navigate_destination/janitor, +/turf/open/floor/iron, +/area/station/service/janitor) "mki" = ( /obj/machinery/door/airlock/command{ name = "Head of Personnel" @@ -37425,21 +37590,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/commons/dorms) -"mky" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/key/janitor, -/obj/machinery/requests_console/directional/south{ - department = "Janitorial"; - name = "Janitorial Requests Console" - }, -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/effect/turf_decal/trimline/purple/filled/warning, -/turf/open/floor/iron, -/area/station/service/janitor) "mkA" = ( /obj/structure/sign/poster/official/random/directional/south, /turf/open/floor/wood/large, @@ -37579,6 +37729,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/miningdock) +"mod" = ( +/obj/structure/railing, +/obj/effect/turf_decal/trimline/dark_red/warning{ + dir = 6 + }, +/obj/structure/transport/linear/public, +/turf/open/floor/plating/elevatorshaft, +/area/station/maintenance/tram/mid) "mon" = ( /mob/living/basic/sloth/paperwork, /turf/open/floor/glass, @@ -37735,6 +37893,17 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"mqS" = ( +/obj/machinery/door/airlock/engineering{ + name = "Tram Mechanical Room" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/station/maintenance/tram/mid) "mrb" = ( /obj/structure/table/wood, /obj/item/folder/yellow, @@ -37994,6 +38163,14 @@ /obj/structure/cable, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/aisat_interior) +"mwN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/dim/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "mxf" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 10 @@ -38330,6 +38507,15 @@ }, /turf/open/floor/iron, /area/station/security/courtroom/holding) +"mDP" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/neutral/filled/warning, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "mDS" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -38342,7 +38528,7 @@ "mDY" = ( /obj/structure/table/wood, /obj/item/toy/talking/ai{ - name = "\improper Nanotrasen-brand toy AI"; + name = "\improper Symphionia-brand toy AI"; pixel_y = 6 }, /turf/open/floor/carpet, @@ -38508,19 +38694,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"mGQ" = ( -/obj/machinery/door/airlock/engineering{ - name = "Power Access Hatch" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/left) "mHc" = ( /turf/open/floor/iron/checker, /area/station/commons/lounge) @@ -38699,10 +38872,12 @@ /turf/open/floor/iron/checker, /area/station/commons/lounge) "mJQ" = ( -/obj/structure/closet/secure_closet/brig, /obj/effect/turf_decal/trimline/red/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, /area/station/security/brig) "mKe" = ( @@ -38883,6 +39058,16 @@ /obj/machinery/photocopier, /turf/open/floor/iron/grimy, /area/station/service/library/lounge) +"mNZ" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Hallway - Service Wing Left Stairway" + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "mOi" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -39092,6 +39277,21 @@ dir = 6 }, /area/station/service/chapel) +"mTw" = ( +/obj/machinery/door/airlock/engineering{ + name = "Tram Mechanical Room" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/port/central) "mTR" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -39107,12 +39307,6 @@ /obj/item/extinguisher, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"mTX" = ( -/obj/structure/closet/secure_closet/hop, -/obj/structure/sign/clock/directional/west, -/obj/item/storage/secure/safe/directional/north, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/hop) "mUd" = ( /obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/monitored/air_output{ dir = 1 @@ -39328,6 +39522,18 @@ /obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, /turf/open/floor/iron, /area/station/engineering/atmos) +"mZg" = ( +/obj/machinery/door_buttons/airlock_controller{ + idExterior = "middleright_lower_upper_eva_external"; + idInterior = "middleright_lower_upper_eva_internal"; + idSelf = "middleright_lower_upper_eva_airlock_control"; + name = "External Access Console"; + pixel_y = -24 + }, +/obj/structure/ladder, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/station/maintenance/tram/mid) "mZt" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -39703,6 +39909,10 @@ "ngp" = ( /turf/closed/wall, /area/station/tcommsat/computer) +"ngr" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/station/hallway/secondary/exit) "ngv" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -39989,19 +40199,6 @@ /obj/effect/turf_decal/trimline/neutral/filled/line, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"nkd" = ( -/obj/machinery/lift_indicator{ - linked_elevator_id = "tram_upper_center_lift"; - pixel_x = 4; - pixel_y = -2 - }, -/obj/machinery/button/elevator{ - id = "tram_upper_center_lift"; - pixel_x = 5; - pixel_y = -1 - }, -/turf/closed/wall, -/area/station/service/janitor) "nkl" = ( /obj/structure/table/glass, /obj/item/storage/medkit/regular{ @@ -40045,6 +40242,12 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/construction/engineering) +"nkw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "nky" = ( /obj/machinery/conveyor{ dir = 8; @@ -40573,15 +40776,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/construction/engineering) -"nug" = ( -/obj/structure/table/reinforced, -/obj/item/storage/secure/safe/caps_spare/directional/east, -/obj/machinery/cell_charger{ - pixel_y = 4 - }, -/obj/item/stock_parts/cell/high, -/turf/open/floor/iron, -/area/station/command/bridge) "nuj" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -40628,17 +40822,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/commons/dorms) -"nvu" = ( -/obj/machinery/door/airlock/engineering{ - name = "Power Access Hatch" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/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/hallway/primary/tram/right) "nvA" = ( /obj/effect/turf_decal/trimline/brown/filled/corner{ dir = 4 @@ -40668,11 +40851,6 @@ /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/ai_monitored/security/armory) -"nvU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/smooth, -/area/station/maintenance/tram/mid) "nwd" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 4 @@ -40710,7 +40888,7 @@ /obj/machinery/netpod, /obj/machinery/airalarm/directional/north, /turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "nwD" = ( /obj/effect/turf_decal/sand/plating, /turf/open/misc/asteroid, @@ -40940,15 +41118,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/security/prison) -"nAa" = ( -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/effect/turf_decal/trimline/purple/filled/warning, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/service/janitor) "nAB" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 @@ -41052,6 +41221,14 @@ }, /turf/open/floor/iron, /area/station/security/brig) +"nCJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "nDj" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -41568,15 +41745,6 @@ "nMB" = ( /turf/open/floor/iron, /area/station/science/ordnance/testlab) -"nMM" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 5 - }, -/obj/structure/chair{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "nMW" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 1 @@ -41676,14 +41844,6 @@ }, /turf/open/floor/iron, /area/station/security/prison/safe) -"nOj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/light/small/dim/directional/north, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "nOq" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/iron, @@ -42234,6 +42394,13 @@ /obj/item/stamp/head/cmo, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) +"nXM" = ( +/obj/structure/table/glass, +/obj/item/storage/briefcase/secure, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) "nXP" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -42528,6 +42695,10 @@ /obj/machinery/reagentgrinder, /turf/open/floor/wood, /area/station/service/bar/backroom) +"ocw" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "ocK" = ( /obj/effect/turf_decal/trimline/yellow/filled/line, /obj/structure/sign/warning/secure_area{ @@ -42535,17 +42706,6 @@ }, /turf/open/floor/iron, /area/station/tcommsat/computer) -"ocU" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/effect/turf_decal/trimline/neutral/filled/warning, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "odr" = ( /obj/structure/railing{ dir = 4 @@ -43088,9 +43248,6 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"ook" = ( -/turf/closed/wall/r_wall, -/area/station/hallway/primary/tram/left) "oop" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -43404,6 +43561,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/closed/wall/r_wall, /area/station/engineering/atmos) +"ovk" = ( +/obj/structure/ladder, +/obj/machinery/light/small/dim/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/station/maintenance/tram/mid) "ovC" = ( /obj/structure/railing/corner{ dir = 4 @@ -43894,6 +44057,17 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"oHK" = ( +/obj/machinery/camera{ + c_tag = "Hallway - Central Tram Platform South-East"; + dir = 6 + }, +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "oHO" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 8 @@ -44020,6 +44194,11 @@ /obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, /area/station/engineering/supermatter) +"oMh" = ( +/obj/structure/secure_safe/directional/east, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/carpet, +/area/station/security/detectives_office) "oMz" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 4 @@ -44246,6 +44425,13 @@ /obj/machinery/light/dim/directional/east, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) +"oQT" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "oQU" = ( /obj/structure/window/reinforced/spawner/directional/north, /turf/open/misc/grass/jungle, @@ -44547,7 +44733,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/generic, /turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "oXb" = ( /turf/closed/wall, /area/station/security/courtroom/holding) @@ -44582,6 +44768,17 @@ /obj/effect/turf_decal/trimline/neutral/filled/corner, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"oXK" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/right) "oXP" = ( /obj/effect/turf_decal/trimline/red/filled/corner, /obj/effect/turf_decal/trimline/red/filled/corner{ @@ -44744,7 +44941,7 @@ /obj/machinery/byteforge, /obj/effect/turf_decal/box, /turf/open/floor/iron/dark/smooth_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "pbx" = ( /obj/structure/bed{ dir = 4 @@ -44761,11 +44958,6 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) -"pby" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "pbH" = ( /turf/closed/wall/r_wall, /area/station/science/server) @@ -44791,6 +44983,13 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) +"pbS" = ( +/obj/structure/transport/linear/public, +/obj/effect/turf_decal/caution/stand_clear/red{ + dir = 4 + }, +/turf/open/floor/plating/elevatorshaft, +/area/station/maintenance/tram/mid) "pbV" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/musician/piano, @@ -45054,6 +45253,21 @@ }, /turf/open/floor/plating, /area/station/engineering/supermatter) +"phd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/purple/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/purple/filled/warning, +/turf/open/floor/iron, +/area/station/service/janitor) "phl" = ( /turf/open/floor/carpet, /area/station/command/heads_quarters/captain) @@ -45326,17 +45540,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/orange/visible, /turf/open/floor/iron, /area/station/engineering/atmos) -"pmh" = ( -/obj/structure/cable/multilayer/multiz, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/structure/sign/warning/electric_shock{ - pixel_x = -32 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/hallway/primary/tram/left) "pmq" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 6 @@ -45441,13 +45644,21 @@ "pob" = ( /obj/machinery/smartfridge/chemistry/preloaded, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; id = "pharmacy_shutters_2"; - name = "Pharmacy Shutters"; - dir = 4 + name = "Pharmacy Shutters" }, /obj/machinery/door/firedoor, /turf/open/floor/plating, /area/station/medical/pharmacy) +"pod" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "pof" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, @@ -45783,12 +45994,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/side, /area/station/science/lobby) -"ptZ" = ( -/obj/machinery/camera/directional/south{ - c_tag = "Hallway - Upper East Power Hatch" - }, -/turf/open/openspace, -/area/station/hallway/primary/tram/right) "puf" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 @@ -45997,6 +46202,14 @@ /obj/structure/closet/toolcloset, /turf/open/floor/iron, /area/station/engineering/main) +"pxf" = ( +/obj/structure/closet/secure_closet/hos, +/obj/structure/secure_safe/hos{ + pixel_x = 35 + }, +/obj/structure/sign/poster/official/space_cops/directional/north, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/hos) "pxj" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -46019,6 +46232,17 @@ dir = 1 }, /area/station/service/chapel) +"pxp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/disposalpipe/trunk/multiz{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/port/central) "pxs" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/wood, @@ -46211,17 +46435,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"pAA" = ( -/obj/machinery/door/airlock/vault{ - name = "High Security Vault" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/access/all/supply/vault, -/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/dark, -/area/station/ai_monitored/command/nuke_storage) "pAC" = ( /obj/effect/turf_decal/siding/thinplating/end, /obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4{ @@ -46261,6 +46474,7 @@ dir = 1 }, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/unres, /turf/open/floor/iron/white, /area/station/science/research) "pAR" = ( @@ -46478,6 +46692,7 @@ /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/science/general, /obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/mapping_helpers/airlock/unres, /turf/open/floor/iron/white/side, /area/station/science/research) "pFm" = ( @@ -46611,18 +46826,6 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron, /area/station/engineering/main) -"pHk" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/right) "pHl" = ( /obj/machinery/light/floor, /turf/open/floor/grass, @@ -46840,27 +47043,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/service/chapel) -"pLg" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/machinery/door/airlock/security/glass{ - id_tag = "outerbrigright"; - name = "Brig" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "brig_right" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/security/entrance, -/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/iron, -/area/station/security/brig) "pLs" = ( /obj/structure/transport/linear/tram, /obj/structure/tram/split, @@ -47377,33 +47559,6 @@ /obj/machinery/light/warm/directional/north, /turf/open/floor/iron/dark, /area/station/service/bar) -"pWa" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 9 - }, -/obj/machinery/button/door/directional/west{ - id = "atmos"; - name = "Atmospherics Lockdown"; - pixel_y = 8; - req_access = list("atmospherics") - }, -/obj/machinery/button/door/directional/west{ - id = "Secure Storage"; - name = "Engineering Secure Storage"; - req_access = list("engine_equip") - }, -/obj/machinery/button/door/directional/west{ - id = "Engineering"; - name = "Engineering Lockdown"; - pixel_y = -8; - req_access = list("engineering") - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/mob/living/simple_animal/parrot/poly, -/turf/open/floor/iron, -/area/station/command/heads_quarters/ce) "pWt" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 4 @@ -47436,6 +47591,12 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/command/bridge) +"pWO" = ( +/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, +/area/station/security/brig) "pWP" = ( /obj/structure/railing{ dir = 8 @@ -47449,7 +47610,7 @@ "pWW" = ( /obj/structure/table/wood, /obj/structure/showcase/machinery/tv{ - desc = "A slightly battered looking TV. Several slideshows play on the screen, showcasing Nanotrasen's various technological marvels. They even got the Nanoplay on this thing!"; + desc = "A slightly battered looking TV. Several slideshows play on the screen, showcasing Symphionia's various technological marvels. They even got the Nanoplay on this thing!"; dir = 1; pixel_x = 2; pixel_y = 3 @@ -47725,6 +47886,23 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit) +"qbx" = ( +/obj/machinery/requests_console/directional/south{ + department = "Janitorial"; + name = "Janitorial Requests Console" + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 6 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/service/janitor) "qbT" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/structure/filingcabinet, @@ -48045,6 +48223,15 @@ "qgt" = ( /turf/closed/wall/rock/porous, /area/station/medical/chemistry) +"qgy" = ( +/obj/structure/table/reinforced, +/obj/structure/secure_safe/caps_spare/directional/east, +/obj/machinery/cell_charger{ + pixel_y = 4 + }, +/obj/item/stock_parts/cell/high, +/turf/open/floor/iron, +/area/station/command/bridge) "qgB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -48058,8 +48245,8 @@ /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, /obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = -6 + pixel_x = -6; + pixel_y = 6 }, /obj/item/storage/box/bodybags{ pixel_x = 3; @@ -48116,12 +48303,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/tram/left) -"qhP" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/closed/wall, -/area/station/hallway/primary/tram/center) "qib" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -48277,6 +48458,13 @@ dir = 4 }, /area/station/command/bridge) +"qkk" = ( +/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/light/small/dim/directional/south, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "qkr" = ( /obj/machinery/camera/directional/west{ c_tag = "Security - Main West"; @@ -48381,6 +48569,14 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) +"qmC" = ( +/obj/structure/closet{ + name = "Evidence Closet 1" + }, +/obj/structure/secure_safe/directional/east, +/obj/effect/spawner/random/contraband/cannabis, +/turf/open/floor/iron/dark, +/area/station/security/evidence) "qmH" = ( /obj/structure/closet/secure_closet/quartermaster, /obj/effect/turf_decal/trimline/brown/filled/line{ @@ -48603,6 +48799,18 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"qrc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door_buttons/airlock_controller{ + idExterior = "middleleft_lower_lower_eva_external"; + idInterior = "middleleft_lower_lower_eva_internal"; + idSelf = "middleleft_lower_lower_eva_airlock_control"; + name = "External Access Console"; + pixel_y = -24 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "qrg" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -48786,6 +48994,26 @@ /obj/machinery/telecomms/server/presets/medical, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) +"quE" = ( +/obj/machinery/door/airlock{ + name = "Custodial Closet" + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/purple/filled/warning, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/service/janitor, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "quF" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -48881,16 +49109,6 @@ /obj/structure/flora/bush/grassy/style_random, /turf/open/floor/grass, /area/station/science/lower) -"qxb" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/station/service/janitor) "qxm" = ( /turf/closed/wall, /area/station/maintenance/starboard/central) @@ -49119,6 +49337,23 @@ }, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain) +"qBI" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Tram Mechanical Room" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/left) "qBL" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 @@ -49171,6 +49406,12 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor, /area/station/maintenance/port/central) +"qCg" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "qCh" = ( /obj/structure/closet/secure_closet/captains, /obj/machinery/computer/security/telescreen/entertainment/directional/north, @@ -49185,12 +49426,17 @@ "qCG" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, -/obj/machinery/firealarm/directional/south, /obj/effect/turf_decal/trimline/yellow/arrow_ccw, /obj/effect/turf_decal/trimline/yellow/arrow_cw{ dir = 1 }, /obj/structure/cable/layer1, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/engine_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "engine" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/engine, /area/station/engineering/supermatter/room) "qCJ" = ( @@ -49315,13 +49561,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"qDK" = ( -/obj/machinery/door/airlock/hatch{ - name = "Ladder Access Hatch" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/hallway/primary/tram/right) "qDL" = ( /obj/machinery/door/airlock/research/glass{ name = "Ordnance Lab" @@ -49769,14 +50008,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/xenobiology) -"qNv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/light/small/dim/directional/south, -/turf/open/floor/iron/smooth, -/area/station/maintenance/tram/mid) "qNA" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -49862,6 +50093,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/large, /area/station/service/theater) +"qPp" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/turf/closed/wall, +/area/station/maintenance/tram/mid) "qPE" = ( /obj/structure/chair/greyscale{ dir = 4 @@ -49956,20 +50193,6 @@ /obj/structure/railing, /turf/open/floor/plating/elevatorshaft, /area/station/maintenance/tram/left) -"qRq" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 4 - }, -/obj/machinery/camera/directional/east{ - c_tag = "Hallway - Central Tram Platform North-East" - }, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/turf_decal/stripes/white/line, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "qRK" = ( /obj/structure/table, /obj/item/stack/sheet/iron/fifty, @@ -50022,6 +50245,15 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/science/xenobiology) +"qTh" = ( +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/right) "qTp" = ( /obj/machinery/door/airlock{ id_tag = "private_b"; @@ -50333,6 +50565,27 @@ /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /turf/open/floor/iron, /area/station/engineering/atmos) +"qXK" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/stock_parts/cell/crap/empty{ + pixel_y = 10; + pixel_x = 6 + }, +/obj/item/stock_parts/cell/crap/empty{ + pixel_y = 2; + pixel_x = 6 + }, +/obj/item/stock_parts/cell/crap/empty{ + pixel_y = 7; + pixel_x = -7 + }, +/obj/item/stock_parts/cell/crap/empty{ + pixel_y = -2; + pixel_x = -2 + }, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "qXS" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -50370,6 +50623,10 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/station/engineering/atmos) +"qYw" = ( +/obj/structure/ladder, +/turf/open/floor/iron/smooth, +/area/station/hallway/primary/tram/right) "qYx" = ( /obj/machinery/door/airlock{ id_tag = "Toilet5"; @@ -50707,6 +50964,14 @@ }, /turf/open/floor/iron/freezer, /area/station/commons/toilet) +"rdm" = ( +/obj/structure/displaycase/captain{ + pixel_y = 5 + }, +/obj/machinery/status_display/evac/directional/north, +/obj/structure/secure_safe/directional/west, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) "rdo" = ( /obj/machinery/computer/shuttle/labor, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -50736,6 +51001,13 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"rdN" = ( +/obj/machinery/mech_bay_recharge_port{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "rdO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /turf/closed/wall/r_wall, @@ -50782,16 +51054,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/commons/dorms) -"reC" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "AI Upload Access" - }, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai_upload) +"reK" = ( +/obj/structure/cable, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/right) "reU" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/camera/directional/south{ @@ -51197,6 +51464,16 @@ }, /turf/open/floor/iron, /area/station/security/prison) +"rmw" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Maintenance Hatch" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "rmz" = ( /obj/effect/turf_decal/siding/thinplating/dark, /obj/structure/table, @@ -51512,7 +51789,7 @@ /obj/structure/bed/dogbed/runtime, /obj/structure/sign/clock/directional/north, /obj/machinery/light/cold/directional/north, -/mob/living/simple_animal/pet/cat/runtime, +/mob/living/basic/pet/cat/runtime, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) "rsz" = ( @@ -51533,16 +51810,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) -"rsP" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 4 - }, -/obj/item/radio/intercom/directional/east, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/right) "rsZ" = ( /obj/machinery/holopad/secure, /turf/open/floor/iron/dark, @@ -51668,6 +51935,14 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating/airless, /area/station/asteroid) +"rwc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/catwalk_floor, +/area/station/hallway/secondary/exit) "rws" = ( /obj/structure/table/glass, /obj/item/storage/box/monkeycubes{ @@ -51827,6 +52102,17 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"rzF" = ( +/obj/machinery/door/airlock/engineering{ + name = "Power Access Hatch" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/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/hallway/secondary/exit) "rzO" = ( /obj/structure/chair, /obj/machinery/airalarm/directional/north, @@ -51842,14 +52128,6 @@ }, /turf/open/floor/glass/reinforced, /area/station/security/brig) -"rzZ" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/neutral/filled/corner, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "rAf" = ( /obj/machinery/camera/emp_proof{ c_tag = "Engineering - Atmospherics N2 Chamber"; @@ -52105,6 +52383,13 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"rFw" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "rGj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/cafeteria, @@ -52250,10 +52535,9 @@ }, /obj/effect/turf_decal/trimline/yellow/arrow_cw, /obj/structure/cable/layer1, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/engine_access, +/obj/machinery/firealarm/directional/south, /turf/open/floor/engine, -/area/station/engineering/supermatter) +/area/station/engineering/supermatter/room) "rJE" = ( /obj/machinery/door/airlock/medical/glass{ name = "Medical Freezer" @@ -52503,6 +52787,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/supermatter) +"rNN" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Hallway - Central Tram Platform North-East" + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/stripes/white/line, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "rNO" = ( /obj/effect/turf_decal/trimline/white/warning, /turf/open/floor/engine/hull, @@ -53239,6 +53531,11 @@ }, /turf/open/floor/iron/dark, /area/station/service/hydroponics) +"sac" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "saj" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, @@ -53353,13 +53650,6 @@ /obj/machinery/light/warm/directional/west, /turf/open/floor/iron/dark, /area/station/service/bar) -"scw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/right) "scx" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -53527,7 +53817,7 @@ /obj/machinery/light/directional/north, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark/smooth_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "sgf" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -53592,6 +53882,18 @@ }, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"shP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/disposalpipe/trunk/multiz/down{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/left) "shQ" = ( /obj/machinery/modular_computer/preset/engineering{ dir = 8 @@ -53686,14 +53988,6 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/iron, /area/station/engineering/atmos) -"sjk" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 1 - }, -/obj/structure/table, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "sjm" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 1 @@ -53718,6 +54012,17 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) +"sjq" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Hallway - Starboard Tram Platform North-West" + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/stripes/white/line, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/right) "sjE" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 @@ -54000,6 +54305,20 @@ }, /turf/open/floor/iron, /area/station/commons/fitness) +"snF" = ( +/obj/machinery/camera{ + c_tag = "Hallway - Starboard Tram Platform South-West"; + dir = 10 + }, +/obj/machinery/firealarm/directional/west, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/right) "snK" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 @@ -54025,6 +54344,16 @@ "soq" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/science) +"soP" = ( +/obj/machinery/door/airlock/hatch{ + name = "Emergency Exit" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/left) "spm" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/firedoor/heavy, @@ -54070,6 +54399,11 @@ /obj/effect/spawner/random/armory/rubbershot, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) +"sqg" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/right) "sql" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 1 @@ -54197,23 +54531,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"srW" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "Hallway - Starboard Tram Platform South-West"; - dir = 10 - }, -/obj/machinery/firealarm/directional/west, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/right) "srY" = ( /obj/machinery/door/window/brigdoor{ dir = 8; @@ -54418,6 +54735,17 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/science/ordnance/testlab) +"sub" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/machinery/button/door/directional/south{ + name = "Security Mech Garage Door Controls"; + id = "secmechbay"; + req_access = list("security") + }, +/turf/open/floor/iron, +/area/station/security/brig) "sud" = ( /obj/structure/table, /obj/item/food/cakeslice/birthday, @@ -54458,27 +54786,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/security/courtroom/holding) -"suw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/external{ - autoclose = 0; - frequency = 1449; - id_tag = "middleright_upper_eva_internal"; - name = "External Access" - }, -/obj/machinery/door_buttons/access_button{ - idDoor = "middleright_upper_eva_internal"; - idSelf = "middleright_upper_eva_airlock_control"; - name = "External Access Button"; - pixel_y = 24 - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "suG" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 10 @@ -54598,6 +54905,28 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/hallway/primary/tram/right) +"swL" = ( +/obj/structure/railing{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark_red/warning{ + dir = 9 + }, +/obj/structure/transport/linear/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") + }, +/turf/open/floor/plating/elevatorshaft, +/area/station/maintenance/tram/mid) +"swR" = ( +/obj/structure/cable/multilayer/multiz, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/central) "swX" = ( /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron/dark/smooth_edge{ @@ -54767,17 +55096,11 @@ }, /turf/open/floor/iron, /area/station/security/prison) -"sBr" = ( -/obj/machinery/newscaster/directional/west, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/effect/turf_decal/trimline/neutral/filled/warning, -/obj/effect/turf_decal/trimline/neutral/filled/corner{ +"sBc" = ( +/obj/structure/chair/sofa/bench/tram/right{ dir = 1 }, +/obj/effect/turf_decal/trimline/neutral/filled/line, /turf/open/floor/iron, /area/station/hallway/primary/tram/center) "sBt" = ( @@ -54811,6 +55134,16 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/grimy, /area/station/hallway/secondary/entry) +"sCR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner, +/obj/effect/turf_decal/trimline/purple/corner, +/turf/open/floor/iron, +/area/station/service/janitor) "sDe" = ( /obj/structure/table/wood, /obj/item/radio/intercom/directional/south, @@ -54891,6 +55224,16 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"sEp" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "sEx" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 @@ -55250,11 +55593,16 @@ /obj/structure/railing/corner, /turf/open/space/openspace, /area/station/solars/starboard/fore) -"sLk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/dim/directional/north, -/turf/open/floor/iron/smooth, -/area/station/hallway/primary/tram/right) +"sLl" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/warning{ + dir = 1 + }, +/obj/structure/transport/linear/public, +/turf/open/floor/plating/elevatorshaft, +/area/station/maintenance/tram/mid) "sLz" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -55268,6 +55616,13 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"sLC" = ( +/obj/machinery/newscaster/directional/east, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "sLR" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 1 @@ -55343,18 +55698,6 @@ /obj/machinery/computer/records/security, /turf/open/floor/carpet, /area/station/command/heads_quarters/hos) -"sNe" = ( -/obj/machinery/door/airlock/engineering{ - name = "Power Access Hatch" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/port/central) "sNr" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -55397,7 +55740,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "sNX" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 1 @@ -55766,18 +56109,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/security/courtroom/holding) -"sTZ" = ( -/obj/effect/turf_decal/bot, -/obj/item/mop, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 10 - }, -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 10 - }, -/obj/structure/mop_bucket/janitorialcart, -/turf/open/floor/iron, -/area/station/service/janitor) "sUb" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 4 @@ -55999,6 +56330,14 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/checkpoint/engineering) +"sXZ" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Utilities Access Hatch" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/structure/disposalpipe/segment, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "sYd" = ( /obj/structure/cable, /obj/effect/turf_decal/sand/plating, @@ -56167,6 +56506,13 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/engineering/engine_smes) +"tbg" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "tbi" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -56494,15 +56840,6 @@ /obj/machinery/shower/directional/south, /turf/open/floor/iron/freezer, /area/station/commons/toilet) -"thD" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/siding/thinplating/corner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "thG" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/effect/turf_decal/trimline/red/filled/corner{ @@ -56644,6 +56981,10 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"tkc" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "tki" = ( /obj/effect/turf_decal/trimline/neutral/filled/line, /obj/machinery/door/poddoor/shutters/preopen{ @@ -56674,7 +57015,7 @@ "tkp" = ( /obj/machinery/door/airlock/centcom{ desc = "Truly, a marvel of modern engineering."; - name = "Syndicate Secure Airlock System" + name = "Symphionia Secure Airlock System" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/iron/showroomfloor, @@ -56996,14 +57337,6 @@ /obj/structure/cable, /turf/open/floor/iron/solarpanel/airless, /area/space/nearstation) -"tqS" = ( -/obj/structure/displaycase/captain{ - pixel_y = 5 - }, -/obj/machinery/status_display/evac/directional/north, -/obj/item/storage/secure/safe/directional/west, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain) "tqT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/chapel{ @@ -57125,6 +57458,18 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"tse" = ( +/obj/machinery/camera{ + c_tag = "Medical - Central North-West"; + dir = 10; + network = list("ss13","medbay") + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "tsg" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 8 @@ -57214,6 +57559,13 @@ /obj/structure/sign/poster/official/obey/directional/south, /turf/open/floor/iron/white, /area/station/security/execution/education) +"ttM" = ( +/obj/structure/chair/sofa/bench/tram/left{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "tuf" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/table, @@ -57256,6 +57608,14 @@ /obj/machinery/light/dim/directional/west, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"tvu" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Hallway - Central Tram Platform North-West" + }, +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/stripes/white/line, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "tvP" = ( /obj/structure/rack, /obj/item/storage/box/lights/tubes{ @@ -57458,19 +57818,6 @@ }, /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai_upload) -"tyt" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/station/service/janitor) "tyx" = ( /obj/structure/closet{ name = "Evidence Closet 1" @@ -57488,19 +57835,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"tyQ" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_red/warning{ - dir = 5 - }, -/obj/structure/transport/linear/public, -/turf/open/floor/plating/elevatorshaft, -/area/station/maintenance/tram/mid) "tyV" = ( /obj/machinery/door/airlock/external{ name = "Labor Camp Shuttle Airlock" @@ -57766,6 +58100,10 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) +"tDI" = ( +/obj/structure/sign/warning/electric_shock, +/turf/closed/wall, +/area/station/hallway/primary/tram/left) "tDP" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -57774,6 +58112,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"tDR" = ( +/obj/structure/table/wood, +/obj/item/storage/briefcase/secure{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) "tDT" = ( /turf/open/openspace, /area/station/commons/fitness/recreation) @@ -57875,13 +58222,8 @@ /turf/open/floor/iron/dark, /area/station/service/chapel) "tFk" = ( -/obj/structure/closet/secure_closet/brig, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 9 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/station/security/brig) +/turf/closed/wall/r_wall, +/area/station/security/mechbay) "tFB" = ( /obj/structure/cable, /turf/open/floor/iron/white, @@ -58407,6 +58749,15 @@ /obj/structure/cable, /turf/open/floor/iron/cafeteria, /area/station/command/heads_quarters/rd) +"tPw" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/right) "tPz" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/structure/cable, @@ -58490,6 +58841,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"tRi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/iron/smooth, +/area/station/hallway/primary/tram/center) "tRn" = ( /obj/structure/table, /obj/effect/turf_decal/trimline/neutral/filled/line{ @@ -58515,13 +58871,6 @@ /obj/machinery/drone_dispenser, /turf/open/floor/iron/smooth, /area/station/maintenance/department/science) -"tRO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/smooth, -/area/station/maintenance/tram/mid) "tRT" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 @@ -58726,12 +59075,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"tVf" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/closed/wall, -/area/station/hallway/primary/tram/center) "tVv" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 4 @@ -58949,14 +59292,6 @@ /obj/item/paper/monitorkey, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) -"tYg" = ( -/obj/structure/closet{ - name = "Evidence Closet 1" - }, -/obj/item/storage/secure/safe/directional/east, -/obj/effect/spawner/random/contraband/cannabis, -/turf/open/floor/iron/dark, -/area/station/security/evidence) "tYp" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/rd) @@ -59301,6 +59636,11 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/grass, /area/station/commons/dorms) +"ueV" = ( +/obj/effect/turf_decal/sand, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "ufh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -59830,17 +60170,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"umR" = ( -/obj/structure/railing, -/obj/effect/turf_decal/siding/thinplating{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_red/warning{ - dir = 6 - }, -/obj/structure/transport/linear/public, -/turf/open/floor/plating/elevatorshaft, -/area/station/maintenance/tram/mid) "umT" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -60024,6 +60353,12 @@ /obj/machinery/telecomms/processor/preset_three, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) +"uqs" = ( +/obj/structure/closet/secure_closet/hop, +/obj/structure/sign/clock/directional/west, +/obj/structure/secure_safe/directional/north, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/hop) "uqA" = ( /obj/effect/turf_decal/siding/thinplating/dark/corner, /obj/machinery/duct, @@ -60238,7 +60573,7 @@ dir = 4 }, /obj/effect/turf_decal/bot, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /obj/effect/spawner/random/maintenance/five, /turf/open/floor/iron, /area/station/cargo/warehouse) @@ -60405,7 +60740,7 @@ pixel_x = 6 }, /turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "uwE" = ( /obj/structure/rack, /obj/item/circuitboard/machine/exoscanner{ @@ -60553,6 +60888,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/checker, /area/station/commons/lounge) +"uyX" = ( +/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/light/small/dim/directional/north, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "uyZ" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 @@ -60594,7 +60936,7 @@ dir = 4 }, /turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "uzG" = ( /obj/machinery/mech_bay_recharge_port{ dir = 2 @@ -60682,6 +61024,20 @@ }, /turf/open/floor/engine/hull, /area/station/solars/starboard/fore) +"uBi" = ( +/obj/structure/rack, +/obj/item/storage/briefcase{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/briefcase/secure, +/obj/effect/turf_decal/trimline/green/filled/corner, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/security/courtroom) "uBo" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -61026,6 +61382,12 @@ /obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/iron, /area/station/security/prison/garden) +"uFK" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Hallway - Upper East Power Hatch" + }, +/turf/open/openspace, +/area/station/hallway/secondary/exit) "uFX" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, @@ -61059,6 +61421,13 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"uGn" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/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, +/area/station/security/brig) "uGo" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -61224,7 +61593,7 @@ /area/station/engineering/atmos) "uHQ" = ( /obj/item/paper{ - default_raw_text = "Congradulations, agent 'INSERT NAME HERE'! You have been assigned reconnaissance duty among the orbiting rocks of Indecipheres! As this location was previously scouted as a potential build site for a Nanotrasen outpost, one of our benefactors has taken the oppertunity to pre-emptively construct a listening outpost within the region! You have been tasked with monitoring the potentially active future crew and logging all events onboard. If you are a Nanotrasen official who has stumbled upon this outpost before it could be properly established: Please ignore this entire paper."; + default_raw_text = "Congradulations, agent 'INSERT NAME HERE'! You have been assigned reconnaissance duty among the orbiting rocks of Indecipheres! As this location was previously scouted as a potential build site for a Symphionia outpost, one of our benefactors has taken the oppertunity to pre-emptively construct a listening outpost within the region! You have been tasked with monitoring the potentially active future crew and logging all events onboard. If you are a Symphionia official who has stumbled upon this outpost before it could be properly established: Please ignore this entire paper."; name = "initiation paperwork" }, /obj/machinery/computer/records/medical/syndie{ @@ -61250,12 +61619,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/solars/port) -"uIb" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/structure/table, -/obj/machinery/light/directional/south, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/service) "uIk" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -61416,6 +61779,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/commons/dorms) +"uLp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "uLt" = ( /obj/structure/table/glass, /obj/item/reagent_containers/cup/beaker{ @@ -61509,6 +61879,13 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"uMD" = ( +/obj/machinery/door/airlock/hatch{ + name = "Emergency Exit" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/left) "uME" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -61577,6 +61954,13 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"uNJ" = ( +/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/catwalk_floor, +/area/station/security/mechbay) "uNK" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -61740,34 +62124,11 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/engine_smes) -"uQq" = ( -/obj/structure/table, -/obj/item/storage/fancy/cigarettes{ - pixel_x = 8; - pixel_y = 8 - }, -/obj/item/storage/secure/briefcase{ - pixel_x = -3; - pixel_y = 2 - }, -/turf/open/floor/iron, -/area/station/security/office) "uQS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"uQT" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "uRi" = ( /obj/machinery/suit_storage_unit/standard_unit, /obj/structure/window/reinforced/spawner/directional/south, @@ -61947,13 +62308,6 @@ "uVo" = ( /turf/open/floor/carpet, /area/station/command/meeting_room) -"uVB" = ( -/obj/structure/table/glass, -/obj/item/storage/secure/briefcase, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/cmo) "uVO" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 9 @@ -62007,19 +62361,6 @@ }, /turf/open/floor/iron/white, /area/station/security/medical) -"uWM" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 8 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "uWO" = ( /mob/living/carbon/human/species/monkey, /turf/open/floor/grass, @@ -62044,8 +62385,12 @@ /obj/machinery/airalarm/directional/south, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnanceburn" + }, /turf/open/floor/iron/white, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "uXv" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -62067,6 +62412,12 @@ }, /turf/open/space/openspace, /area/station/solars/port) +"uXN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/plating, +/area/station/cargo/sorting) "uYa" = ( /obj/machinery/skill_station, /turf/open/floor/iron/grimy, @@ -62237,6 +62588,22 @@ "vay" = ( /turf/open/floor/plating, /area/station/commons/dorms) +"vaF" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/command{ + name = "MiniSat Access" + }, +/obj/effect/mapping_helpers/airlock/access/any/command/minisat, +/obj/effect/landmark/navigate_destination/minisat_access_ai, +/turf/open/floor/iron/dark, +/area/station/science/lower) "vaK" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 1 @@ -62937,6 +63304,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison) +"vms" = ( +/obj/structure/cable/multilayer/multiz, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/hallway/secondary/exit) "vmB" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -63488,6 +63866,14 @@ }, /turf/open/floor/wood, /area/station/service/bar/backroom) +"vwx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "vwz" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner, /obj/effect/turf_decal/trimline/blue/filled/corner{ @@ -63612,6 +63998,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/tram/right) +"vyO" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/security/mechbay) "vyR" = ( /obj/effect/spawner/random/structure/closet_private, /turf/open/floor/carpet, @@ -63771,6 +64161,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/checker, /area/station/commons/lounge) +"vBy" = ( +/obj/structure/cable/multilayer/multiz, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/hallway/primary/tram/left) "vBB" = ( /obj/machinery/power/terminal{ dir = 1 @@ -63844,20 +64242,6 @@ "vCS" = ( /turf/closed/mineral/random/stationside/asteroid/porus, /area/station/engineering/atmos) -"vCU" = ( -/obj/structure/cable/multilayer/multiz, -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/structure/sign/warning/electric_shock{ - pixel_x = -32 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/hallway/primary/tram/right) "vCY" = ( /obj/structure/flora/tree/palm/style_random, /turf/open/misc/grass/jungle, @@ -63941,6 +64325,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor, /area/station/maintenance/central/greater) +"vEf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor, +/area/station/hallway/secondary/exit) "vEl" = ( /obj/structure/window/reinforced/spawner/directional/west, /turf/open/misc/grass/jungle, @@ -63964,23 +64355,6 @@ /obj/machinery/light/cold/directional/west, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"vEy" = ( -/obj/structure/closet/l3closet/janitor, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 6 - }, -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 6 - }, -/obj/item/restraints/legcuffs/beartrap, -/obj/item/restraints/legcuffs/beartrap, -/obj/machinery/light_switch/directional/east{ - pixel_x = 23; - pixel_y = 8 - }, -/turf/open/floor/iron, -/area/station/service/janitor) "vEK" = ( /obj/machinery/medical_kiosk, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -64064,6 +64438,11 @@ }, /turf/open/floor/wood, /area/station/service/lawoffice) +"vGf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/iron/smooth, +/area/station/hallway/primary/tram/center) "vGi" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner, /obj/effect/turf_decal/trimline/neutral/filled/corner{ @@ -64189,18 +64568,6 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/iron, /area/station/engineering/break_room) -"vIs" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/structure/disposalpipe/trunk/multiz/down{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/turf/open/floor/plating, -/area/station/hallway/primary/tram/left) "vIv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit/green, @@ -64658,7 +65025,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/bitrunner, /turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "vSa" = ( /obj/machinery/atmospherics/components/unary/passive_vent{ dir = 8; @@ -64903,6 +65270,17 @@ "vWx" = ( /turf/closed/wall/r_wall, /area/station/cargo/miningdock/oresilo) +"vWy" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Tram Mechanical Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/station/hallway/primary/tram/right) "vWI" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -65285,6 +65663,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/execution/transfer) +"weo" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "wev" = ( /obj/effect/turf_decal/siding/thinplating/dark/corner{ dir = 4 @@ -65422,16 +65807,6 @@ "whn" = ( /turf/open/floor/iron/white, /area/station/science/xenobiology) -"whp" = ( -/obj/item/radio/intercom/directional/east, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "whs" = ( /obj/structure/table, /obj/machinery/processor{ @@ -65605,6 +65980,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"wki" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/ladder, +/turf/open/floor/iron/smooth, +/area/station/hallway/primary/tram/center) "wkk" = ( /turf/open/floor/iron/freezer, /area/station/security/prison) @@ -65701,16 +66081,6 @@ /obj/structure/chair/stool/directional/south, /turf/open/floor/carpet, /area/station/hallway/secondary/entry) -"wmo" = ( -/obj/machinery/door/airlock/hatch{ - name = "Ladder Access Hatch" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/left) "wmy" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 5 @@ -65922,12 +66292,12 @@ /area/station/hallway/secondary/service) "wrJ" = ( /obj/structure/railing{ - layer = 3.1; - dir = 4 + dir = 4; + layer = 3.1 }, /obj/machinery/netpod, /turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "wrT" = ( /obj/structure/table/glass, /obj/item/grenade/chem_grenade, @@ -66078,21 +66448,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit) -"wuH" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner, -/obj/machinery/camera{ - c_tag = "Hallway - Central Tram Platform South-East"; - dir = 6 - }, -/obj/machinery/firealarm/directional/east, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "wuN" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light/small/dim/directional/east, @@ -66152,6 +66507,20 @@ /obj/structure/sign/poster/official/random/directional/south, /turf/open/floor/iron, /area/station/commons/fitness) +"wwH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/hallway/secondary/exit) "wwI" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -66523,6 +66892,11 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"wCZ" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "wDh" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper, @@ -66584,6 +66958,15 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/tram/left) +"wEg" = ( +/obj/machinery/lift_indicator/directional/north{ + linked_elevator_id = "tram_upper_center_lift" + }, +/obj/machinery/button/elevator/directional/north{ + id = "tram_upper_center_lift" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "wEl" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 1 @@ -67650,9 +68033,9 @@ pixel_x = -7 }, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; id = "pharmacy_shutters_2"; - name = "Pharmacy Shutters"; - dir = 4 + name = "Pharmacy Shutters" }, /obj/machinery/door/firedoor, /obj/machinery/door/window/left/directional/south{ @@ -68227,12 +68610,6 @@ }, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"xnH" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/landmark/navigate_destination/dockescpod, -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) "xnI" = ( /turf/open/floor/iron, /area/station/maintenance/tram/left) @@ -68261,6 +68638,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"xnY" = ( +/obj/structure/sign/warning/electric_shock, +/turf/closed/wall, +/area/station/hallway/primary/tram/center) "xog" = ( /obj/machinery/door/airlock/security/glass{ name = "Isolation Wing" @@ -68403,7 +68784,7 @@ /obj/machinery/netpod, /obj/item/radio/intercom/directional/north, /turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) +/area/station/cargo/bitrunning/den) "xrE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/thinplating{ @@ -68421,6 +68802,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/virology) +"xsg" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "xsh" = ( /obj/machinery/door/airlock/medical{ name = "Surgery" @@ -68823,7 +69208,7 @@ "xAc" = ( /obj/machinery/door/airlock/centcom{ desc = "Truly, a marvel of modern engineering."; - name = "Syndicate Secure Airlock System" + name = "Symphionia Secure Airlock System" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /obj/structure/cable, @@ -69080,15 +69465,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"xET" = ( -/obj/effect/turf_decal/siding/thinplating/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "xFb" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -69143,6 +69519,12 @@ "xFx" = ( /turf/open/floor/iron, /area/station/commons/fitness) +"xGn" = ( +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "xGw" = ( /obj/machinery/door/airlock/external{ name = "Labor Camp Shuttle Airlock" @@ -69153,6 +69535,16 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/plating, /area/station/security/processing) +"xGM" = ( +/obj/machinery/door/airlock/hatch{ + name = "Emergency Exit" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "xGX" = ( /obj/effect/turf_decal/siding/thinplating/corner{ dir = 8 @@ -69520,6 +69912,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/checkpoint/science) +"xNL" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/item/crowbar, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "xNP" = ( /obj/structure/chair/stool/bar/directional/south, /turf/open/floor/eighties, @@ -69574,17 +69974,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/tram/mid) -"xPd" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/purple/corner{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/service/janitor) "xPg" = ( /obj/effect/turf_decal/trimline/brown/filled/line, /obj/structure/table, @@ -69786,6 +70175,9 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/medical/treatment_center) +"xTq" = ( +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "xTr" = ( /obj/effect/turf_decal/trimline/dark_green/filled/corner{ dir = 8 @@ -70031,6 +70423,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation/entertainment) +"xYm" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Utilities Access Hatch" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/structure/disposalpipe/segment, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "xYp" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 1 @@ -70054,7 +70455,7 @@ }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/mob/living/simple_animal/bot/cleanbot, +/mob/living/basic/bot/cleanbot, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/maint) "xZi" = ( @@ -70100,19 +70501,6 @@ /obj/structure/table, /turf/open/floor/iron/dark, /area/station/security/courtroom/holding) -"xZE" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 8 - }, -/obj/machinery/newscaster/directional/west, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/left) "xZO" = ( /obj/effect/turf_decal/sand/plating, /obj/effect/turf_decal/box, @@ -70144,21 +70532,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/commons/dorms) -"yaj" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/command{ - name = "MiniSat Access" - }, -/obj/effect/mapping_helpers/airlock/access/any/command/minisat, -/turf/open/floor/iron/dark, -/area/station/science/lower) "yar" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -70653,7 +71026,7 @@ /area/station/hallway/secondary/exit) "yiX" = ( /obj/effect/turf_decal/bot, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /obj/effect/spawner/random/maintenance/two, /obj/item/stock_parts/cell/high/empty, /turf/open/floor/iron, @@ -86142,9 +86515,9 @@ qQq qQq qQq lQM -bgn -ina -lQM +swR +pxp +abE dIy pZW tUM @@ -86401,7 +86774,7 @@ qQq lQM tFW pal -sNe +mTw qCf pZW uof @@ -89204,7 +89577,7 @@ afn lKe gOh rbD -pAA +fgs qaM sfM kwe @@ -89245,7 +89618,7 @@ elr elr elr xPP -guI +kfR xFx vAF swX @@ -98951,7 +99324,7 @@ aaa hFr nMu hFr -dDN +uBi abZ ycB jyA @@ -98975,14 +99348,14 @@ abM abM gjb eco -tyt +fKL iNR -sTZ +brE ekB -aaa -aaa -aaa -abM +qjU +qjU +qjU +qjU abM acx abM @@ -99236,10 +99609,10 @@ sHm foY cYX ekB -aaa -aaa -aaa -aaa +swL +pWP +gAJ +qjU abM acx abM @@ -99268,7 +99641,7 @@ pkp anr anH nkF -eTG +ffF uQm uYH nPN @@ -99491,11 +99864,11 @@ ekB bYF ulM isa -cxC +ljo ekB -qjU -qjU -qjU +sLl +tID +gPT qjU qjU kfD @@ -99745,17 +100118,17 @@ aaa aaa aaa ekB -koj -qxb -xPd -mky +gmp +aRT +sCR +qbx ekB -bKp -pWP -gAJ +hOy +pbS +mod qjU -leO -fvQ +dRS +ueV qjU abM abM @@ -99763,8 +100136,8 @@ ada abM abM qjU -fvQ -qNv +ueV +fpx jnq abM jnq @@ -100002,17 +100375,17 @@ aaa aaa aaa ekB -gEx -uTz -hJM -nAa -ekB -hYb -tID -gPT +jEz +kqa +phd +qjU +qjU +qjU +qtV +ceb qjU -aqb -cDp +gfO +ecX qjU acQ acQ @@ -100020,8 +100393,8 @@ adb acQ acQ qjU -fEi nNs +qrc jnq abM jnq @@ -100259,17 +100632,17 @@ aaa aaa aaa ekB -bxX -hIg -hBr -vEy -ekB -tyQ -egY -umR +gEx +uTz +mjQ qjU -nvU -nag +ovk +mqS +sKN +jce +rmw +nkw +qkk qjU ujK ujK @@ -100277,8 +100650,8 @@ rQk ujK ujK qjU -dTE -tRO +uyX +nCJ jnq abM jnq @@ -100516,14 +100889,14 @@ aaa aaa aaa ekB -ekB -ekB -gSQ -ekB -nkd -ceb -qtV -ceb +bxX +hIg +bvL +qjU +qjU +qPp +bJY +wCZ qjU qjU nag @@ -100773,13 +101146,13 @@ hFr dJJ dJJ dJJ -pjC -sbx -uWM -sbx -thD +dJJ +dJJ +quE +dJJ +tbg +iEu jra -ovL ahy mxR qjU @@ -101038,7 +101411,7 @@ qjT kJY ovL ahy -uIb +fEr qjU gmj pnF @@ -101292,7 +101665,7 @@ kCQ vZZ kCQ lOe -bYK +mNZ xpb jeS bMZ @@ -101345,7 +101718,7 @@ svA jBn bKt gqf -bKt +asT dQn bKt frN @@ -102357,7 +102730,7 @@ fXQ srY roB roB -pWa +kHR tga rnf xBD @@ -104869,7 +105242,7 @@ acF vWI sNs vWI -aWJ +jXA vWI sNs alg @@ -105408,8 +105781,8 @@ mGw dau wxa mGw -nvU -nag +cEV +qkk qjU hUz hUz @@ -105417,8 +105790,8 @@ ghW hUz hUz qjU -nag -tRO +kmH +vwx qjU aaa hZr @@ -105665,8 +106038,8 @@ mGw eep eep mGw -ecX -iaA +sac +mZg qjU acP acP @@ -105674,8 +106047,8 @@ adc acP acP qjU -leZ ecX +cOu qjU aaa hZr @@ -105922,8 +106295,8 @@ bIm eep eep mGw -leO -fJo +rFw +tkc qjU abM abM @@ -105931,8 +106304,8 @@ ade abM abM qjU -fJo -qNv +tkc +rFw qjU aaa hZr @@ -118505,7 +118878,7 @@ kDF vso nbo wqs -kcB +kbZ lHU qGM emT @@ -118773,7 +119146,7 @@ abM abM qxm qxm -fUQ +lLA myD myD myD @@ -119033,7 +119406,7 @@ hKj hKj myD sVs -ait +hyH stO aiB hKj @@ -119850,7 +120223,7 @@ pKC cPE qah erv -yaj +vaF egK aGY pRm @@ -120360,7 +120733,7 @@ mBW hJl nrf hJl -reC +iKp xnS hJl dNT @@ -144235,7 +144608,7 @@ pMW avE nmY hng -xnH +dJq nmY nmY nmY @@ -149067,11 +149440,11 @@ aac aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +tFk +tFk +tFk +tFk +tFk aaa aaa abM @@ -149321,14 +149694,14 @@ aac aac aac aac -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +tFk +tFk +tFk +tFk +biB +rdN +bwu +tFk aaa aaa abM @@ -149578,14 +149951,14 @@ aac aac aac aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +tFk +mez +kIA +aOW +xsg +vyO +cyb +tFk aaa aaa abM @@ -149835,14 +150208,14 @@ aac aac aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +tFk +bIz +hCO +jWy +hCO +uNJ +itH +tFk aaa aaa abM @@ -150092,14 +150465,14 @@ aaa aaa aaa yji -yji -yji -yji -yji -aaa -aaa -aaa -aaa +tFk +dFN +fLY +tFk +kcV +xNL +qXK +tFk aaa aaa abM @@ -150349,9 +150722,9 @@ aaa aaa aaa yji -tFk +wOb mJQ -dTL +sub yji run run @@ -150606,8 +150979,8 @@ aaa aaa aaa yji -nDj -dkO +kft +aBK rGN dTL mjM @@ -150636,7 +151009,7 @@ aBV aBV aBV wHT -mTX +uqs kcw ruV wHT @@ -151378,7 +151751,7 @@ qhI kDS mOZ wvG -gvQ +pWO kEc ntp mjM @@ -151670,7 +152043,7 @@ umf qjW dCk iDR -kcb +tDR wHT omH jKZ @@ -151678,8 +152051,8 @@ cOE mHX jtg jvf -pmh -vIs +vBy +shP yiM pBj nXn @@ -151892,7 +152265,7 @@ avA xSX xDQ iko -gvQ +pWO iGJ gki nca @@ -152149,7 +152522,7 @@ avB jPx xDQ rOh -iBO +jwV pNI gki nca @@ -152449,8 +152822,8 @@ jvf fKO tki jvf -ook -mGQ +tDI +qBI yiM mjx heY @@ -152663,7 +153036,7 @@ avD hYT xSX rOh -rco +uGn awp hWL vgl @@ -152706,7 +153079,7 @@ wHH uUc wid kqY -xZE +hdk cEg yiM nMW @@ -155522,7 +155895,7 @@ uvu aCC ukE hhc -cDX +esf lPY eaT kiU @@ -155776,7 +156149,7 @@ aQO rup wzm rAh -nug +qgy eUy mgq nhV @@ -156788,7 +157161,7 @@ aBN sDO jFh msW -pLg +apW nSV aPk sGG @@ -156808,7 +157181,7 @@ nsn nsn hPM fmJ -jAY +jHD fRW xBV xlT @@ -157067,7 +157440,7 @@ tlg kOE yiM yiM -wmo +soP yiM cFs nVr @@ -157075,7 +157448,7 @@ laU jGG cFs yiM -aEN +uMD yiM yiM fpg @@ -157276,7 +157649,7 @@ aaa aaa aaa rmB -hGG +pxf bWb toY wpM @@ -157287,7 +157660,7 @@ avl fBk myB vhl -uQq +asG vhl gnL lvm @@ -157568,9 +157941,9 @@ ltw pbx pyA ltw -tqS +rdm vjq -ekE +fhK ktl mjd mjI @@ -158603,7 +158976,7 @@ phl sSx xJH xEo -hKL +oMh ixO urP kOE @@ -159340,7 +159713,7 @@ aaa abM abM tFJ -tYg +qmC fsQ jil fsQ @@ -164514,10 +164887,10 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa +izU +izU +izU +izU izU vMI nEl @@ -164771,10 +165144,10 @@ bhs bhs bhs aaa -aaa -aaa -aaa -aaa +izU +eSz +eSz +eSz izU wWn wYw @@ -165029,12 +165402,12 @@ roi bhs aaa izU +eSz +eSz +eSz izU -izU -izU -izU -nOj -gGI +vYA +vGf izU eSz nSP @@ -165042,8 +165415,8 @@ fXy lwN eSz izU +tRi ghg -xlZ jyH jyH jyH @@ -165290,8 +165663,8 @@ eSz eSz eSz izU +jdG izU -dXc izU eSz nSP @@ -165299,8 +165672,8 @@ fXy lwN eSz izU -aGM izU +gIU jyH lCA jRS @@ -165541,14 +165914,14 @@ vhA jLI dyD bhs -bhs izU -eSz -eSz -eSz izU -seG +izU +nHM +fnb +izU vYA +seG izU eSz nSP @@ -165556,8 +165929,8 @@ fXy lwN eSz izU -pby seG +xTq jyH pvp kSh @@ -165798,23 +166171,23 @@ hht nTz rQl qez -bhs izU -eSz -eSz -eSz +azC izU -wYw -lTg -beP +wEg +ttM +izU +bTc +qCg +xYm lEj rWQ iCj fkZ lEj -cRc -jhE -wYw +xYm +uLp +bII jyH aQi jbg @@ -166055,23 +166428,23 @@ uYF bKM aBQ rWd -bhs izU -fnb -nHM -fnb -htI +ghg +xnY +rOu +sBc +izU +fPk +izU izU -dno -ago eSz nSP fXy lwN eSz -ago -blP izU +izU +xGM jyH wmy iYv @@ -166312,23 +166685,23 @@ iEl bra mfN diN -bhs izU -dzv -rOu -dBR -xET -kzV -lnx -lHs +ejh +fDF +oQT +jUp +pod +sEp +jHj +tvu kNT brr mNB fbk kNT -cYi -uQT -sBr +tse +boi +mDP jyH pob xbN @@ -166357,7 +166730,7 @@ aOF wdj wao cHU -uVB +nXM wdj oGJ oGJ @@ -166569,10 +166942,10 @@ wdp pZF vyH bhs -bhs izU -sjk -rOu +izU +izU +weo rOu rOu rOu @@ -166828,10 +167201,10 @@ cxc lWy jGD izU -nMM -aHA -aHA -aHA +izU +fWa +aUx +cgF aEl wQW cFS @@ -167356,7 +167729,7 @@ qpV oKm qrl lej -ocU +iVr wyd wyd rks @@ -170430,17 +170803,17 @@ scZ eSz eSz eSz -gAv -hEp -qRq +fuc +sLC +rNN kNT brr xFj fbk kNT -wuH -rzZ -whp +oHK +bjn +ejL vic izU izU @@ -170687,18 +171060,18 @@ lZW lZW izU izU +dIJ +izU izU -lQe -iRT eSz nSP fXy lwN eSz -iRT -dPB izU izU +dIJ +izU wza izU fLb @@ -170943,18 +171316,18 @@ lZW aaa aaa aaa -abE -wYw -lTg -tVf +izU +xGn +gtY +sXZ vfk fhx iJl wUG vfk -qhP -ioA -wYw +sXZ +ocw +qtS gnj wza izU @@ -171200,9 +171573,9 @@ dcz aaa aaa aaa -abE -seG -vYA +izU +eKI +wki izU eSz nSP @@ -171210,8 +171583,8 @@ fXy lwN eSz izU -ghg seG +euF izU wza izU @@ -171457,9 +171830,9 @@ lZW aaa aaa aaa -abE izU -suw +bdX +izU izU eSz nSP @@ -171467,8 +171840,8 @@ fXy lwN eSz izU -aHk izU +gXj izU wza izU @@ -171714,9 +172087,9 @@ lZW aaa aaa aaa -abE -kMs -qtS +izU +mwN +wYw izU eSz nSP @@ -171971,7 +172344,7 @@ lZW aaa aaa aaa -abE +izU gEC wYw nEl @@ -179683,7 +180056,7 @@ oSB nVd vUE bMb -car +iqe pxO brm gay @@ -179691,7 +180064,7 @@ lZj jwH brm pxO -aEx +lqp bMb lVi abM @@ -179941,14 +180314,14 @@ ldp wkz hsN psy -jip +sjq seR kTK eFJ gOF seR -srW -pHk +snF +qTh rmH lVi jxi @@ -183794,7 +184167,7 @@ yiV uCO aDI aDV -aEC +eBu yeB hZc seR @@ -184051,10 +184424,10 @@ pEe uCO hPi bMb -aED -rsP +cmZ +tPw raY -ljn +oXK ljn ujw ljn @@ -184308,8 +184681,8 @@ vPB mRb sYJ bMb -qDK -bMb +vWy +cCw vUE vUE vUE @@ -184565,16 +184938,16 @@ vPB uCO fZS bMb -rxO -dfj -vUE -brm -vCU -ebY -aGn -brm +reK +aZr +lCy +fcR +vms +fXN +wwH +fcR nSI -awY +hPQ vDI nSd rMB @@ -184822,14 +185195,14 @@ vPB uCO fZS bMb -sLk -cEC -vUE -brm -jgh -rxO -scw -ptZ +sqg +qYw +lCy +fcR +dPt +ngr +dcw +uFK nSI axt eRb @@ -185071,8 +185444,8 @@ skX fpU fpU jKb -fpU -eos +dXH +uXN lSQ duO goC @@ -185081,12 +185454,12 @@ fZS bMb bMb bMb -vUE -brm -lbl -lDS -scw -brm +lCy +fcR +rwc +vEf +dcw +fcR nSI qrs xts @@ -185332,18 +185705,18 @@ uno uno uno lCy -vPB +ifI uCO aDK -bMb +qUB hAR veA -vUE -vUE -vUE -nvu -vUE -vUE +lCy +lCy +lCy +rzF +iRg +lCy nSI tXz tXz diff --git a/_maps/metastation.json b/_maps/metastation.json index 86f73dc4e5f4e4..02fa0bf8ba57c5 100644 --- a/_maps/metastation.json +++ b/_maps/metastation.json @@ -4,7 +4,7 @@ "map_path": "map_files/MetaStation", "map_file": "MetaStation.dmm", "shuttles": { - "cargo": "cargo_skyrat", + "cargo": "cargo_nova", "ferry": "ferry_fancy", "whiteship": "whiteship_meta", "emergency": "emergency_meta" diff --git a/_maps/modular_generic/beach_l_ribs.dmm b/_maps/modular_generic/beach_l_ribs.dmm new file mode 100644 index 00000000000000..ea0a2a9abd09c1 --- /dev/null +++ b/_maps/modular_generic/beach_l_ribs.dmm @@ -0,0 +1,828 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"av" = ( +/obj/effect/turf_decal/weather/sand, +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/obj/structure/flora/ash/leaf_shroom{ + icon_state = "s_mushroom4" + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 10 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"aJ" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"bT" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 4 + }, +/obj/structure/flora/rock/pile/style_3, +/turf/open/misc/beach/sand, +/area/template_noop) +"bV" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/vehicle/ridden/atv{ + dir = 4 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"fi" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/decal/cleanable/oil, +/turf/open/misc/beach/sand, +/area/template_noop) +"fw" = ( +/obj/effect/turf_decal/trimline/dark/corner{ + dir = 8 + }, +/mob/living/basic/mining/goldgrub/baby, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"gP" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"gR" = ( +/obj/item/fuel_pellet{ + pixel_x = 10; + pixel_y = 8 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"ic" = ( +/obj/structure/flora/rock/pile/style_random, +/obj/effect/turf_decal/weather/sand{ + dir = 6 + }, +/obj/item/stack/sheet/mineral/sandbags, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 6 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid10" + }, +/area/template_noop) +"iD" = ( +/obj/structure/flora/rock/pile/style_3, +/turf/open/misc/beach/sand, +/area/template_noop) +"jT" = ( +/obj/item/fish/boned, +/turf/open/misc/asteroid{ + icon_state = "asteroid_dug" + }, +/area/template_noop) +"ky" = ( +/obj/structure/flora/ash/cacti{ + icon_state = "cactus_fruit"; + pixel_x = -12 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 10 + }, +/obj/item/flashlight/lantern{ + icon_state = "floodlight" + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid11" + }, +/area/template_noop) +"ml" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 6 + }, +/obj/structure/frame/machine/secured, +/obj/item/stack/cable_coil/cut, +/turf/open/misc/beach/sand, +/area/template_noop) +"mP" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"oX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/toolbox{ + pixel_x = 5; + pixel_y = -14 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"ph" = ( +/obj/item/knife/combat/bone, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 8 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid_dug" + }, +/area/template_noop) +"pk" = ( +/obj/structure/flora/rock/pile/style_3, +/obj/effect/turf_decal/weather/sand, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"pr" = ( +/obj/effect/turf_decal/trimline/dark/corner{ + dir = 4 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"pZ" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"qD" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 9 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"tr" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/structure/flora/ash/cap_shroom{ + icon_state = "l_mushroom2p" + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 5 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"tA" = ( +/obj/effect/turf_decal/weather/sand, +/obj/effect/turf_decal/trimline/dark/warning, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"uf" = ( +/obj/structure/flora/rock/pile/style_2, +/obj/effect/turf_decal/weather/sand{ + dir = 9 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 6 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"uy" = ( +/obj/item/stack/sheet/bone, +/mob/living/basic/mining/goldgrub/baby, +/turf/open/misc/asteroid{ + icon_state = "asteroid_dug" + }, +/area/template_noop) +"uS" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 6 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/structure/flora/rock/pile/style_random, +/turf/open/misc/beach/sand, +/area/template_noop) +"wf" = ( +/obj/structure/flora/ash/cacti{ + icon_state = "cactus3p" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/asteroid{ + icon_state = "asteroid7" + }, +/area/template_noop) +"wy" = ( +/obj/item/chair/wood, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid6" + }, +/area/template_noop) +"wI" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 9 + }, +/obj/structure/holosign/barrier/engineering, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"xA" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 1 + }, +/obj/item/modular_computer/laptop{ + icon_state = "laptop"; + pixel_y = 16; + pixel_x = 4 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"xG" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 9 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/structure/holosign/barrier/engineering, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"xS" = ( +/obj/effect/turf_decal/trimline/dark/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"xU" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"zh" = ( +/obj/structure/flora/ash/cacti{ + icon_state = "cactus2" + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid7" + }, +/area/template_noop) +"zH" = ( +/turf/open/misc/asteroid{ + icon_state = "asteroid2" + }, +/area/template_noop) +"Cv" = ( +/obj/structure/flora/ash/cacti{ + icon_state = "cactus_fruit"; + pixel_y = 24 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 9 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/machinery/exoscanner, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"Ds" = ( +/obj/structure/flora/ash/cacti, +/obj/effect/turf_decal/trimline/dark/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"DX" = ( +/obj/structure/flora/rock/pile/style_2, +/turf/open/misc/beach/sand, +/area/template_noop) +"Eo" = ( +/obj/structure/flora/ash/cacti{ + icon_state = "cactus_fruit"; + pixel_y = 24 + }, +/obj/structure/water_source/puddle, +/obj/structure/flora/bush/reed/style_random{ + pixel_y = 6 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"ED" = ( +/obj/structure/flora/rock/pile/style_random, +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 8 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"Ff" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 9 + }, +/obj/structure/holosign/barrier/engineering, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"Fi" = ( +/obj/structure/statue/bone/rib{ + dir = 1 + }, +/obj/effect/decal/cleanable/xenoblood{ + icon_state = "xfloor4" + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid3" + }, +/area/template_noop) +"Ft" = ( +/obj/structure/rack, +/obj/item/shovel, +/obj/item/shovel{ + pixel_y = 3 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"FD" = ( +/obj/effect/turf_decal/weather/sand, +/turf/open/misc/beach/sand, +/area/template_noop) +"Gh" = ( +/obj/structure/flora/ash/cacti{ + icon_state = "cactus_fruit"; + pixel_x = -12 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 5 + }, +/obj/item/flashlight/lantern{ + icon_state = "floodlight" + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid11" + }, +/area/template_noop) +"Go" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 4 + }, +/obj/vehicle/ridden/atv{ + dir = 4 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"Iw" = ( +/obj/item/fishing_hook/bone, +/turf/open/misc/asteroid{ + icon_state = "asteroid_dug" + }, +/area/template_noop) +"Jy" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 4 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"JM" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 9 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid_dug" + }, +/area/template_noop) +"La" = ( +/obj/structure/flora/ash/cacti{ + icon_state = "cactus_fruit"; + pixel_y = 24 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/asteroid{ + icon_state = "asteroid10" + }, +/area/template_noop) +"LD" = ( +/obj/effect/turf_decal/trimline/dark/corner, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"LK" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"Mg" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"NO" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/flashlight/lantern{ + icon_state = "floodlight" + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid9" + }, +/area/template_noop) +"Oi" = ( +/obj/structure/table_frame, +/obj/effect/decal/cleanable/glass, +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 5 + }, +/obj/item/binoculars, +/turf/open/misc/asteroid{ + icon_state = "asteroid5" + }, +/area/template_noop) +"OJ" = ( +/obj/structure/statue/bone/rib, +/obj/effect/decal/cleanable/xenoblood{ + icon_state = "xfloor5" + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"OM" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"OW" = ( +/obj/effect/turf_decal/weather/sand, +/obj/vehicle/ridden/atv, +/turf/open/misc/beach/sand, +/area/template_noop) +"PS" = ( +/obj/structure/statue/bone/rib, +/obj/effect/decal/cleanable/xenoblood{ + icon_state = "xfloor7" + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 1 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid8" + }, +/area/template_noop) +"Rs" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 1 + }, +/obj/structure/flora/rock/pile/style_3, +/turf/open/misc/beach/sand, +/area/template_noop) +"RG" = ( +/obj/structure/firepit{ + icon_state = "firepit" + }, +/obj/item/reagent_containers/cup/glass/waterbottle/empty{ + pixel_y = 11; + pixel_x = 11 + }, +/obj/item/reagent_containers/cup/glass/waterbottle/empty{ + pixel_y = 16 + }, +/obj/effect/decal/cleanable/ash{ + pixel_x = -9 + }, +/obj/effect/decal/cleanable/ash, +/obj/effect/decal/cleanable/ash{ + pixel_x = 7 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/asteroid{ + icon_state = "asteroid7" + }, +/area/template_noop) +"SE" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 6 + }, +/obj/item/key/atv{ + pixel_y = 4 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"Tt" = ( +/obj/structure/flora/ash/cacti{ + icon_state = "cactus_fruit"; + pixel_x = -12 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 6 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/structure/holosign/barrier/engineering, +/turf/open/misc/asteroid{ + icon_state = "asteroid9" + }, +/area/template_noop) +"TL" = ( +/obj/structure/flora/rock/pile/style_random, +/turf/open/misc/beach/sand, +/area/template_noop) +"Ua" = ( +/turf/open/misc/beach/sand, +/area/template_noop) +"UJ" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 6 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/mob/living/basic/mining/goldgrub, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"Vw" = ( +/obj/structure/flora/ash/cacti{ + icon_state = "cactus4" + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"Wd" = ( +/obj/effect/turf_decal/weather/sand, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"WA" = ( +/obj/effect/turf_decal/trimline/dark/corner, +/turf/open/misc/asteroid{ + icon_state = "asteroid8" + }, +/area/template_noop) +"YD" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 1 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"YK" = ( +/obj/item/chair/wood{ + dir = 4 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 1 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid10" + }, +/area/template_noop) +"YQ" = ( +/obj/structure/statue/bone/rib{ + dir = 1 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 4 + }, +/obj/effect/decal/cleanable/xenoblood{ + icon_state = "xfloor5" + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 6 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"ZO" = ( +/turf/template_noop, +/area/template_noop) + +(1,1,1) = {" +ZO +ZO +ZO +ZO +ZO +ZO +ZO +ZO +ZO +ZO +aJ +"} +(2,1,1) = {" +ZO +Ua +gR +bT +Go +Jy +oX +mP +Ua +Ua +ZO +"} +(3,1,1) = {" +ZO +fi +SE +NO +ED +av +ml +xG +bV +TL +ZO +"} +(4,1,1) = {" +ZO +Wd +wI +PS +jT +fw +La +ph +ky +gP +ZO +"} +(5,1,1) = {" +ZO +DX +UJ +YK +zh +zH +OJ +Vw +pk +YD +ZO +"} +(6,1,1) = {" +ZO +OW +JM +xS +Eo +RG +uy +WA +LK +xA +ZO +"} +(7,1,1) = {" +ZO +Wd +tr +pr +Fi +xU +wf +tA +Cv +Ua +ZO +"} +(8,1,1) = {" +ZO +OM +uS +Gh +Ds +Iw +LD +YQ +wy +Rs +ZO +"} +(9,1,1) = {" +ZO +FD +uf +Ff +Oi +Ft +ic +qD +Tt +YD +ZO +"} +(10,1,1) = {" +ZO +Ua +pZ +iD +Mg +pZ +Mg +Ua +pZ +Ua +ZO +"} +(11,1,1) = {" +ZO +ZO +ZO +ZO +ZO +ZO +ZO +ZO +ZO +ZO +ZO +"} diff --git a/_maps/modular_generic/beach_m_oasis.dmm b/_maps/modular_generic/beach_m_oasis.dmm new file mode 100644 index 00000000000000..80d9b7dae578f3 --- /dev/null +++ b/_maps/modular_generic/beach_m_oasis.dmm @@ -0,0 +1,341 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/structure/flora/bush/sparsegrass{ + pixel_y = 9; + pixel_x = -3 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"b" = ( +/turf/open/misc/beach/coast/corner{ + dir = 1 + }, +/area/template_noop) +"c" = ( +/obj/structure/flora/tree/palm, +/obj/structure/flora/bush/fullgrass/style_3, +/turf/open/misc/beach/sand, +/area/template_noop) +"d" = ( +/turf/template_noop, +/area/template_noop) +"e" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/rock, +/turf/open/misc/beach/sand, +/area/template_noop) +"f" = ( +/obj/structure/flora/bush/sparsegrass/style_2{ + pixel_x = 6; + pixel_y = -14 + }, +/turf/open/misc/beach/coast/corner{ + dir = 4 + }, +/area/template_noop) +"g" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"h" = ( +/obj/structure/flora/tree/palm, +/obj/structure/flora/coconuts, +/turf/open/misc/beach/sand, +/area/template_noop) +"j" = ( +/obj/structure/flora/rock/pile, +/turf/open/misc/beach/sand, +/area/template_noop) +"k" = ( +/obj/structure/flora/rock/style_2, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"l" = ( +/obj/structure/flora/bush/grassy, +/turf/open/misc/beach/coast/corner{ + dir = 8 + }, +/area/template_noop) +"m" = ( +/obj/structure/flora/bush/sparsegrass/style_3{ + pixel_y = -6; + pixel_x = -6 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"n" = ( +/turf/open/misc/beach/coast/corner, +/area/template_noop) +"p" = ( +/turf/open/misc/beach/coast{ + dir = 5 + }, +/area/template_noop) +"q" = ( +/obj/structure/flora/bush/stalky/style_random{ + pixel_x = -7 + }, +/turf/open/misc/beach/coast{ + dir = 8 + }, +/area/template_noop) +"s" = ( +/obj/structure/flora/bush/grassy/style_4{ + pixel_y = 11; + pixel_x = 5 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"t" = ( +/turf/open/misc/beach/coast/corner{ + dir = 4 + }, +/area/template_noop) +"u" = ( +/obj/structure/flora/bush/sparsegrass/style_2{ + pixel_y = 3; + pixel_x = 4 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"w" = ( +/turf/open/water/beach, +/area/template_noop) +"y" = ( +/turf/open/misc/beach/coast{ + dir = 1 + }, +/area/template_noop) +"z" = ( +/obj/structure/flora/bush/reed/style_random{ + pixel_x = -2; + pixel_y = 6 + }, +/turf/open/misc/beach/coast{ + dir = 10 + }, +/area/template_noop) +"C" = ( +/obj/item/toy/beach_ball, +/turf/open/water/beach, +/area/template_noop) +"D" = ( +/obj/structure/flora/coconuts, +/turf/open/misc/beach/coast/corner{ + dir = 8 + }, +/area/template_noop) +"E" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"F" = ( +/turf/open/misc/beach/sand, +/area/template_noop) +"G" = ( +/obj/structure/flora/bush/stalky/style_random{ + pixel_y = 6 + }, +/turf/open/misc/beach/coast, +/area/template_noop) +"H" = ( +/obj/structure/flora/bush/sparsegrass{ + pixel_x = 12; + pixel_y = -4 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"I" = ( +/obj/structure/fluff/beach_umbrella, +/turf/open/misc/beach/sand, +/area/template_noop) +"J" = ( +/turf/open/misc/beach/coast{ + dir = 6 + }, +/area/template_noop) +"K" = ( +/obj/structure/flora/rock/pile/style_2, +/turf/open/misc/beach/sand, +/area/template_noop) +"M" = ( +/obj/structure/flora/bush/sparsegrass/style_3{ + pixel_y = 1; + pixel_x = 1 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"N" = ( +/obj/item/pillow{ + pixel_y = 7; + pixel_x = -2 + }, +/obj/item/binoculars{ + pixel_x = -6; + pixel_y = -12 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/turf/open/floor/carpet/cyan, +/area/template_noop) +"O" = ( +/obj/structure/flora/bush/sparsegrass/style_2{ + pixel_y = 9; + pixel_x = -4 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"P" = ( +/obj/structure/flora/tree/palm/style_2, +/turf/open/misc/beach/sand, +/area/template_noop) +"Q" = ( +/obj/structure/flora/bush/fullgrass/style_2, +/turf/open/misc/beach/sand, +/area/template_noop) +"R" = ( +/obj/item/reagent_containers/cup/glass/bottle/beer/almost_empty{ + pixel_y = 2; + pixel_x = 16 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 6 + }, +/turf/open/floor/carpet/cyan, +/area/template_noop) +"T" = ( +/obj/structure/flora/bush/reed/style_random{ + pixel_y = 8 + }, +/turf/open/misc/beach/coast{ + dir = 9 + }, +/area/template_noop) +"U" = ( +/obj/structure/flora/bush/sparsegrass/style_2, +/turf/open/misc/beach/sand, +/area/template_noop) +"W" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/rock/pile, +/turf/open/misc/beach/sand, +/area/template_noop) +"X" = ( +/obj/structure/flora/tree/palm/style_2{ + pixel_x = -5 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"Y" = ( +/turf/open/misc/beach/coast{ + dir = 4 + }, +/area/template_noop) +"Z" = ( +/obj/structure/flora/bush/sparsegrass/style_2{ + pixel_y = 2 + }, +/turf/open/misc/beach/sand, +/area/template_noop) + +(1,1,1) = {" +d +d +d +d +d +d +d +d +g +"} +(2,1,1) = {" +d +k +F +E +K +F +U +u +d +"} +(3,1,1) = {" +d +F +P +n +l +s +X +a +d +"} +(4,1,1) = {" +d +N +R +G +p +Y +D +E +d +"} +(5,1,1) = {" +d +I +n +J +w +T +f +j +d +"} +(6,1,1) = {" +d +E +b +z +C +y +c +Q +d +"} +(7,1,1) = {" +d +H +K +b +q +t +m +M +d +"} +(8,1,1) = {" +d +F +Z +O +h +e +W +F +d +"} +(9,1,1) = {" +d +d +d +d +d +d +d +d +d +"} diff --git a/_maps/modular_generic/beach_m_shipping.dmm b/_maps/modular_generic/beach_m_shipping.dmm new file mode 100644 index 00000000000000..a05aa53fec7cb4 --- /dev/null +++ b/_maps/modular_generic/beach_m_shipping.dmm @@ -0,0 +1,440 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/effect/spawner/random/structure/shipping_container, +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"b" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/weather/sand, +/obj/effect/spawner/random/trash/box, +/turf/open/misc/beach/sand, +/area/template_noop) +"c" = ( +/obj/effect/spawner/random/trash/botanical_waste, +/obj/effect/turf_decal/weather/sand{ + dir = 1 + }, +/obj/effect/decal/cleanable/generic, +/turf/open/misc/beach/sand, +/area/template_noop) +"d" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/confetti, +/obj/item/reagent_containers/spray/chemsprayer/party, +/turf/open/misc/beach/sand, +/area/template_noop) +"e" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 1 + }, +/turf/open/misc/beach/coast, +/area/template_noop) +"f" = ( +/turf/open/misc/beach/coast, +/area/template_noop) +"g" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/effect/decal/cleanable/confetti, +/turf/open/misc/sandy_dirt, +/area/template_noop) +"h" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 4 + }, +/obj/effect/decal/cleanable/confetti, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + pixel_y = 6; + pixel_x = 18 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"i" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/effect/spawner/random/trash/hobo_squat, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + pixel_y = 11; + pixel_x = 18 + }, +/turf/open/misc/sandy_dirt, +/area/template_noop) +"j" = ( +/obj/structure/fluff/beach_umbrella/engine, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"k" = ( +/obj/effect/spawner/random/trash, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/weather/sand, +/obj/effect/decal/cleanable/generic, +/turf/open/misc/beach/sand, +/area/template_noop) +"l" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/weather/sand, +/turf/open/misc/beach/sand, +/area/template_noop) +"m" = ( +/turf/open/misc/beach/coast{ + dir = 6 + }, +/area/template_noop) +"n" = ( +/turf/open/misc/beach/coast/corner, +/area/template_noop) +"p" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 4 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"q" = ( +/turf/open/misc/beach/coast{ + dir = 1 + }, +/area/template_noop) +"s" = ( +/obj/structure/flora/ash/cacti{ + icon_state = "cactus3p" + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"t" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"u" = ( +/obj/structure/flora/bush/stalky/style_random, +/turf/open/water/beach, +/area/template_noop) +"v" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 1 + }, +/obj/structure/flora/ash/cacti{ + icon_state = "cactus2" + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"w" = ( +/obj/item/toy/beach_ball, +/turf/open/water/beach, +/area/template_noop) +"x" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/obj/item/chair/stool/bar, +/obj/effect/decal/cleanable/generic, +/turf/open/misc/beach/sand, +/area/template_noop) +"z" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"A" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/weather/sand, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = 9; + pixel_y = 21 + }, +/obj/item/clothing/head/costume/party/festive, +/turf/open/misc/beach/sand, +/area/template_noop) +"B" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 4 + }, +/turf/open/misc/beach/coast{ + dir = 8 + }, +/area/template_noop) +"C" = ( +/turf/open/misc/beach/coast/corner{ + dir = 4 + }, +/area/template_noop) +"D" = ( +/turf/open/misc/beach/coast{ + dir = 9 + }, +/area/template_noop) +"E" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/turf/open/misc/beach/coast{ + dir = 4 + }, +/area/template_noop) +"F" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/effect/spawner/random/trash/mess, +/turf/open/misc/sandy_dirt, +/area/template_noop) +"G" = ( +/obj/structure/flora/rock/pile/style_random, +/turf/open/water/beach, +/area/template_noop) +"H" = ( +/turf/open/misc/beach/coast{ + dir = 8 + }, +/area/template_noop) +"I" = ( +/obj/structure/fluff/beach_umbrella/cap, +/turf/open/misc/beach/coast/corner{ + dir = 8 + }, +/area/template_noop) +"J" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/confetti, +/obj/item/clothing/mask/party_horn, +/turf/open/misc/beach/sand, +/area/template_noop) +"K" = ( +/turf/open/misc/beach/coast/corner{ + dir = 1 + }, +/area/template_noop) +"L" = ( +/obj/effect/spawner/random/trash, +/obj/effect/turf_decal/weather/sand{ + dir = 1 + }, +/obj/effect/decal/cleanable/generic, +/turf/open/misc/beach/sand, +/area/template_noop) +"M" = ( +/turf/template_noop, +/area/template_noop) +"N" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/effect/spawner/random/structure/chair_flipped, +/turf/open/misc/sandy_dirt, +/area/template_noop) +"O" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/structure/rack, +/obj/item/circuitboard/machine/sleeper/party, +/turf/open/misc/sandy_dirt, +/area/template_noop) +"P" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/entertainment/arcade{ + dir = 4; + pixel_x = -3; + pixel_y = 7 + }, +/turf/open/misc/sandy_dirt, +/area/template_noop) +"Q" = ( +/obj/effect/spawner/random/trash, +/obj/effect/turf_decal/weather/sand{ + dir = 4 + }, +/obj/effect/decal/cleanable/generic, +/turf/open/misc/beach/sand, +/area/template_noop) +"R" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 1 + }, +/turf/open/misc/beach/coast/corner, +/area/template_noop) +"S" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = 9; + pixel_y = 21 + }, +/turf/open/misc/sandy_dirt, +/area/template_noop) +"T" = ( +/turf/open/misc/beach/coast{ + dir = 4 + }, +/area/template_noop) +"U" = ( +/obj/structure/flora/rock/pile/style_2, +/turf/open/water/beach, +/area/template_noop) +"V" = ( +/turf/open/misc/beach/sand, +/area/template_noop) +"W" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/spawner/random/trash/mess, +/turf/open/misc/sandy_dirt, +/area/template_noop) +"X" = ( +/obj/effect/turf_decal/weather/sand, +/turf/open/misc/beach/coast{ + dir = 1 + }, +/area/template_noop) +"Y" = ( +/obj/effect/turf_decal/weather/sand, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"Z" = ( +/obj/effect/spawner/random/structure/shipping_container, +/turf/open/misc/beach/sand, +/area/template_noop) + +(1,1,1) = {" +M +M +M +M +M +M +M +M +z +"} +(2,1,1) = {" +M +k +W +c +b +i +v +d +M +"} +(3,1,1) = {" +M +Z +h +n +T +E +I +Q +M +"} +(4,1,1) = {" +M +Y +N +e +w +G +X +S +M +"} +(5,1,1) = {" +M +p +j +f +u +D +C +a +M +"} +(6,1,1) = {" +M +P +R +m +U +q +t +V +M +"} +(7,1,1) = {" +M +x +K +H +B +C +g +p +M +"} +(8,1,1) = {" +M +J +s +A +F +L +l +O +M +"} +(9,1,1) = {" +M +M +M +M +M +M +M +M +M +"} diff --git a/_maps/modular_generic/ice_l_storage.dmm b/_maps/modular_generic/ice_l_storage.dmm new file mode 100644 index 00000000000000..5914568908c58a --- /dev/null +++ b/_maps/modular_generic/ice_l_storage.dmm @@ -0,0 +1,458 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"b" = ( +/obj/structure/railing/corner, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plastic, +/area/template_noop) +"d" = ( +/obj/effect/turf_decal/bot/right, +/obj/effect/spawner/random/structure/crate_abandoned, +/turf/open/floor/plating, +/area/template_noop) +"f" = ( +/obj/effect/turf_decal/loading_area{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/template_noop) +"g" = ( +/obj/structure/broken_flooring/singular/directional/east, +/turf/open/floor/plating, +/area/template_noop) +"h" = ( +/obj/item/key/atv{ + pixel_x = -8; + pixel_y = -5 + }, +/obj/item/key/atv{ + pixel_y = -9 + }, +/obj/item/key/atv{ + pixel_y = -4; + pixel_x = 8 + }, +/turf/closed/wall/ice, +/area/template_noop) +"i" = ( +/obj/structure/railing{ + layer = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/space_heater, +/turf/open/floor/plastic, +/area/template_noop) +"j" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"k" = ( +/turf/open/floor/plating, +/area/template_noop) +"l" = ( +/obj/structure/reagent_dispensers/fueltank/large, +/obj/effect/turf_decal/box, +/turf/open/floor/plating, +/area/template_noop) +"m" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/template_noop) +"n" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/crate_loot, +/turf/open/floor/plating, +/area/template_noop) +"p" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/crate_abandoned, +/turf/open/floor/plating, +/area/template_noop) +"q" = ( +/obj/machinery/door/poddoor/shutters{ + id = "modular_room_1"; + name = "Garage Door" + }, +/turf/open/floor/plating, +/area/template_noop) +"r" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/template_noop) +"s" = ( +/obj/structure/table, +/obj/item/storage/fancy/donut_box, +/obj/machinery/button/door/directional/north{ + id = "modular_room_1" + }, +/turf/open/floor/plastic, +/area/template_noop) +"t" = ( +/obj/structure/table, +/obj/item/pizzabox/meat{ + pixel_x = -3; + pixel_y = 8 + }, +/obj/machinery/computer/security/telescreen/entertainment/directional/north, +/turf/open/floor/plastic, +/area/template_noop) +"u" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate_loot, +/turf/open/floor/plating, +/area/template_noop) +"v" = ( +/turf/closed/wall, +/area/template_noop) +"w" = ( +/obj/effect/turf_decal/loading_area{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/template_noop) +"x" = ( +/obj/item/trash/boritos/red{ + pixel_y = 9; + pixel_x = -17 + }, +/obj/item/trash/can, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing{ + layer = 4 + }, +/turf/open/floor/plastic, +/area/template_noop) +"y" = ( +/obj/structure/closet/crate/bin, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing{ + layer = 4 + }, +/turf/open/floor/plastic, +/area/template_noop) +"z" = ( +/obj/structure/stairs{ + dir = 1 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/plating, +/area/template_noop) +"A" = ( +/obj/structure/rack, +/obj/item/weldingtool/hugetank, +/turf/open/floor/plating, +/area/template_noop) +"B" = ( +/obj/effect/turf_decal/box, +/obj/vehicle/ridden/atv{ + dir = 8 + }, +/obj/machinery/light/dim/directional/east, +/turf/open/floor/plating, +/area/template_noop) +"C" = ( +/obj/machinery/door/airlock/mining{ + name = "Warehouse" + }, +/turf/open/floor/plating, +/area/template_noop) +"D" = ( +/obj/structure/railing{ + layer = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plastic, +/area/template_noop) +"F" = ( +/obj/effect/turf_decal/box, +/obj/vehicle/ridden/atv{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/template_noop) +"G" = ( +/turf/closed/wall/ice, +/area/template_noop) +"H" = ( +/obj/structure/closet{ + name = "Fuel Tank Closet" + }, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/shoes/winterboots{ + pixel_y = -10 + }, +/obj/item/clothing/shoes/winterboots{ + pixel_y = -10 + }, +/obj/item/clothing/shoes/winterboots{ + pixel_y = -10 + }, +/turf/open/floor/plastic, +/area/template_noop) +"J" = ( +/obj/structure/chair/plastic{ + dir = 1 + }, +/obj/structure/railing{ + layer = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plastic, +/area/template_noop) +"K" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/crate_loot, +/obj/machinery/light/dim/directional/west, +/turf/open/floor/plating, +/area/template_noop) +"L" = ( +/obj/effect/spawner/random/trash/mess, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plastic, +/area/template_noop) +"M" = ( +/obj/effect/turf_decal/bot/right, +/obj/structure/closet/crate/large, +/obj/item/crowbar/large/heavy, +/turf/open/floor/plating, +/area/template_noop) +"N" = ( +/obj/structure/rack, +/obj/item/fuel_pellet, +/obj/item/fuel_pellet{ + pixel_y = -7; + pixel_x = 7 + }, +/obj/item/fuel_pellet{ + pixel_x = -5; + pixel_y = -4 + }, +/turf/open/floor/plating, +/area/template_noop) +"O" = ( +/obj/structure/sign/warning/directional/north, +/turf/template_noop, +/area/template_noop) +"P" = ( +/obj/effect/turf_decal/bot/left, +/obj/structure/closet/crate/large, +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plating, +/area/template_noop) +"Q" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 1 + }, +/turf/open/floor/plating, +/area/template_noop) +"R" = ( +/obj/effect/turf_decal/bot/left, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/closet_empty/crate, +/turf/open/floor/plating, +/area/template_noop) +"T" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/stairs{ + dir = 1 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/plating, +/area/template_noop) +"U" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/plastic, +/area/template_noop) +"V" = ( +/obj/structure/noticeboard/directional/north, +/obj/structure/broken_flooring/singular/directional/west, +/turf/open/floor/plating, +/area/template_noop) +"W" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/template_noop) +"X" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/cup/glass/bottle/beer/almost_empty{ + pixel_x = 11; + pixel_y = 4 + }, +/obj/item/flashlight/lamp, +/turf/open/floor/plastic, +/area/template_noop) +"Y" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/box, +/obj/vehicle/ridden/atv{ + dir = 8 + }, +/obj/machinery/light/dim/directional/east, +/turf/open/floor/plating, +/area/template_noop) +"Z" = ( +/obj/effect/turf_decal/loading_area{ + dir = 4 + }, +/turf/open/floor/plating, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +a +j +"} +(2,1,1) = {" +a +G +v +v +G +G +v +v +G +G +a +"} +(3,1,1) = {" +a +G +X +i +M +n +K +p +d +G +a +"} +(4,1,1) = {" +a +v +t +J +P +n +n +u +R +G +O +"} +(5,1,1) = {" +a +v +s +x +Z +w +w +f +Z +q +a +"} +(6,1,1) = {" +a +C +L +U +T +k +r +r +Q +q +a +"} +(7,1,1) = {" +a +h +V +b +z +k +r +W +m +q +a +"} +(8,1,1) = {" +a +G +g +D +l +k +k +k +k +v +O +"} +(9,1,1) = {" +a +v +H +y +A +N +Y +B +F +G +a +"} +(10,1,1) = {" +a +v +G +G +G +v +v +v +G +G +a +"} +(11,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/modular_generic/ice_l_trophyroom.dmm b/_maps/modular_generic/ice_l_trophyroom.dmm new file mode 100644 index 00000000000000..39aed5bddfe9f2 --- /dev/null +++ b/_maps/modular_generic/ice_l_trophyroom.dmm @@ -0,0 +1,602 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ah" = ( +/obj/structure/flora/grass/brown/style_random, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/flora/bush/snow/style_random, +/turf/open/misc/snow, +/area/template_noop) +"fI" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"gr" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 9 + }, +/obj/structure/chair/office/light, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"gS" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/toolbox, +/turf/open/misc/snow, +/area/template_noop) +"hA" = ( +/turf/closed/wall, +/area/template_noop) +"jO" = ( +/turf/template_noop, +/area/template_noop) +"jV" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 6 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 1 + }, +/obj/structure/hedge, +/turf/open/misc/snow, +/area/template_noop) +"kM" = ( +/obj/structure/flora/grass/brown/style_random, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/spawner/random/decoration/flower, +/turf/open/misc/snow, +/area/template_noop) +"ng" = ( +/obj/structure/flora/rock/pile/icy/style_3, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/structure/railing, +/obj/structure/flora/tree/dead/style_random{ + pixel_y = 12 + }, +/turf/open/misc/snow, +/area/template_noop) +"pV" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/effect/decal/cleanable/blood/drip{ + icon_state = "drip2" + }, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"qH" = ( +/obj/effect/spawner/random/trash/bin, +/turf/open/misc/snow, +/area/template_noop) +"rS" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 6 + }, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/effect/decal/cleanable/blood/drip{ + icon_state = "drip1" + }, +/obj/effect/decal/cleanable/blood/drip{ + icon_state = "drip4" + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"tl" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/flora/tree/dead/style_random, +/turf/open/misc/snow, +/area/template_noop) +"tN" = ( +/obj/structure/flora/grass/brown/style_random, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/structure/flora/bush/flowers_pp, +/obj/item/hatchet/wooden, +/obj/machinery/light/cold/dim/directional/north, +/turf/open/misc/snow, +/area/template_noop) +"ul" = ( +/turf/open/floor/holofloor/stairs/medium{ + dir = 8 + }, +/area/template_noop) +"vs" = ( +/obj/structure/flora/grass/brown/style_random, +/obj/effect/turf_decal/siding/thinplating_new/dark/end, +/obj/structure/railing{ + dir = 6 + }, +/obj/effect/spawner/random/decoration/flower, +/turf/open/misc/snow, +/area/template_noop) +"vv" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/end{ + dir = 1 + }, +/obj/structure/railing{ + dir = 9 + }, +/obj/structure/flora/bush/flowers_pp, +/obj/structure/flora/bush/snow/style_random, +/turf/open/misc/snow, +/area/template_noop) +"wW" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/end{ + dir = 1 + }, +/obj/structure/railing{ + dir = 5 + }, +/obj/structure/hedge, +/turf/open/misc/snow, +/area/template_noop) +"yc" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"yg" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/structure/railing, +/obj/structure/hedge, +/obj/structure/sign/poster/random/directional/north, +/turf/open/misc/snow, +/area/template_noop) +"yk" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/decal/cleanable/plastic, +/turf/open/misc/snow, +/area/template_noop) +"yK" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/end, +/obj/structure/railing{ + dir = 10 + }, +/obj/structure/hedge, +/obj/structure/sign/poster/random/directional/east, +/turf/open/misc/snow, +/area/template_noop) +"yS" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 9 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner, +/obj/structure/hedge, +/turf/open/misc/snow, +/area/template_noop) +"zJ" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"Bo" = ( +/obj/effect/decal/cleanable/blood/drip{ + icon_state = "floor7" + }, +/turf/open/misc/snow, +/area/template_noop) +"Bp" = ( +/obj/structure/flora/rock/icy/style_2, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/flora/bush/snow/style_random, +/obj/structure/sign/poster/random/directional/west, +/turf/open/misc/snow, +/area/template_noop) +"BX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/carpet/blue, +/area/template_noop) +"Eb" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 8 + }, +/obj/structure/filingcabinet, +/turf/open/misc/snow, +/area/template_noop) +"FS" = ( +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/floor/carpet/blue, +/area/template_noop) +"HL" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 10 + }, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"IF" = ( +/obj/structure/flora/grass/brown/style_random, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/flora/tree/dead/style_random, +/turf/open/misc/snow, +/area/template_noop) +"JF" = ( +/obj/structure/flora/grass/green/style_random, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/flora/bush/flowers_pp, +/obj/structure/flora/bush/snow/style_random, +/obj/structure/sign/clock/directional/south, +/obj/machinery/light/cold/dim/directional/south, +/turf/open/misc/snow, +/area/template_noop) +"Kb" = ( +/obj/effect/decal/cleanable/blood/drip{ + icon_state = "floor4" + }, +/turf/open/misc/snow, +/area/template_noop) +"Lj" = ( +/obj/structure/flora/grass/green/style_random, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/structure/railing, +/obj/structure/flora/bush/snow/style_random, +/obj/structure/sign/poster/random/directional/north, +/turf/open/misc/snow, +/area/template_noop) +"Lo" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 8 + }, +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"Ml" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"Mr" = ( +/obj/structure/flora/grass/green/style_random, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/structure/railing, +/obj/structure/flora/bush/snow/style_random, +/turf/open/misc/snow, +/area/template_noop) +"MO" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/effect/spawner/random/bureaucracy/folder, +/obj/effect/spawner/random/bureaucracy/pen, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"Nf" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/obj/effect/spawner/random/bureaucracy/folder, +/obj/effect/spawner/random/bureaucracy/pen, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"Nk" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/structure/hedge, +/turf/open/misc/snow, +/area/template_noop) +"NJ" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"Pk" = ( +/obj/structure/flora/grass/green/style_random, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/flora/bush/snow/style_random, +/obj/structure/sign/poster/random/directional/east, +/turf/open/misc/snow, +/area/template_noop) +"RA" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner, +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"Tq" = ( +/obj/effect/turf_decal/weather/snow/corner, +/obj/structure/displaycase/trophy, +/turf/open/floor/carpet/blue, +/area/template_noop) +"Uo" = ( +/obj/effect/decal/cleanable/plastic, +/turf/open/misc/snow, +/area/template_noop) +"UO" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 10 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 4 + }, +/obj/structure/flora/bush/flowers_pp, +/obj/structure/flora/rock/pile/icy/style_2, +/turf/open/misc/snow, +/area/template_noop) +"VA" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"VD" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/decoration/ornament, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"Xc" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 5 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 8 + }, +/obj/structure/flora/bush/flowers_pp, +/obj/structure/flora/rock/icy/style_3, +/turf/open/misc/snow, +/area/template_noop) +"XH" = ( +/obj/structure/flora/grass/green/style_random, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/flora/tree/dead/style_random, +/obj/structure/sign/poster/random/directional/west, +/turf/open/misc/snow, +/area/template_noop) +"XX" = ( +/turf/open/floor/holofloor/stairs/medium{ + dir = 4 + }, +/area/template_noop) +"Yn" = ( +/obj/structure/barricade/wooden/crude/snow, +/obj/machinery/door/airlock/wood, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"ZR" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/template_noop) + +(1,1,1) = {" +jO +jO +jO +jO +jO +jO +jO +jO +jO +jO +yc +"} +(2,1,1) = {" +jO +hA +hA +hA +hA +Yn +hA +hA +hA +hA +jO +"} +(3,1,1) = {" +jO +hA +yS +Bp +vs +XX +wW +XH +UO +hA +jO +"} +(4,1,1) = {" +jO +hA +Lj +VD +RA +pV +NJ +qH +ah +ZR +jO +"} +(5,1,1) = {" +jO +hA +ng +gS +rS +FS +Kb +Uo +Nk +ZR +jO +"} +(6,1,1) = {" +jO +hA +tN +yk +BX +Tq +Bo +zJ +JF +hA +jO +"} +(7,1,1) = {" +jO +hA +yg +Eb +HL +BX +gr +MO +tl +ZR +jO +"} +(8,1,1) = {" +jO +hA +Mr +Nf +Lo +Ml +VA +fI +kM +ZR +jO +"} +(9,1,1) = {" +jO +hA +Xc +IF +yK +ul +vv +Pk +jV +hA +jO +"} +(10,1,1) = {" +jO +hA +hA +hA +hA +Yn +hA +hA +hA +hA +jO +"} +(11,1,1) = {" +jO +jO +jO +jO +jO +jO +jO +jO +jO +jO +jO +"} diff --git a/_maps/modular_generic/ice_m_comms.dmm b/_maps/modular_generic/ice_m_comms.dmm new file mode 100644 index 00000000000000..34c4ed8864fbb8 --- /dev/null +++ b/_maps/modular_generic/ice_m_comms.dmm @@ -0,0 +1,330 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/closed/wall, +/area/template_noop) +"b" = ( +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/tank_holder, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"c" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "vdomsnow" + }, +/turf/open/floor/plating, +/area/template_noop) +"e" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/bot_white{ + color = "#52B4E9" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"f" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"i" = ( +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/effect/spawner/random/trash/bin, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"j" = ( +/obj/structure/barricade/wooden/crude/snow, +/obj/machinery/door/airlock/wood, +/turf/open/floor/iron/dark, +/area/template_noop) +"l" = ( +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/structure/hedge, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"n" = ( +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/stool/directional/east{ + pixel_x = -6 + }, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"o" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 1 + }, +/turf/open/floor/carpet/blue, +/area/template_noop) +"p" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/floor/carpet/blue, +/area/template_noop) +"r" = ( +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/machinery/exoscanner, +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"t" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/turf/open/misc/snow, +/area/template_noop) +"u" = ( +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/structure/hedge, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"v" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 9 + }, +/obj/structure/flora/grass/green/style_random, +/obj/structure/flora/bush/snow/style_random, +/turf/open/misc/snow, +/area/template_noop) +"w" = ( +/obj/machinery/computer/terminal/derelict{ + dir = 8 + }, +/obj/machinery/light/cold/dim/directional/east, +/turf/open/misc/snow, +/area/template_noop) +"y" = ( +/obj/structure/table/reinforced, +/obj/structure/sign/poster/random/directional/east, +/obj/machinery/recharger, +/turf/open/misc/snow, +/area/template_noop) +"A" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 6 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/floor/carpet/blue, +/area/template_noop) +"D" = ( +/turf/template_noop, +/area/template_noop) +"F" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/bot_white{ + color = "#52B4E9" + }, +/obj/structure/noticeboard/directional/north, +/obj/machinery/light/cold/dim/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"K" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/bot_white{ + color = "#52B4E9" + }, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"L" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 5 + }, +/turf/open/floor/carpet/blue, +/area/template_noop) +"M" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/end, +/turf/open/floor/carpet/blue, +/area/template_noop) +"N" = ( +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/structure/filingcabinet, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"O" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters{ + dir = 1; + id = "vdomsnow" + }, +/turf/open/floor/plating, +/area/template_noop) +"P" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/end{ + dir = 8 + }, +/turf/open/floor/carpet/blue, +/area/template_noop) +"R" = ( +/obj/structure/flora/grass/brown, +/obj/structure/flora/bush/snow/style_2, +/turf/open/misc/snow, +/area/template_noop) +"S" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/decal/cleanable/blood/drip{ + icon_state = "bloodyhands_left" + }, +/obj/effect/decal/cleanable/blood/drip{ + icon_state = "drip1" + }, +/turf/open/misc/snow, +/area/template_noop) +"T" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 10 + }, +/obj/structure/chair/office/light, +/turf/open/floor/carpet/blue, +/area/template_noop) +"V" = ( +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/structure/table/reinforced, +/obj/structure/sign/poster/random/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/bureaucracy/stamp, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"Z" = ( +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/structure/table/reinforced, +/obj/effect/spawner/random/bureaucracy/folder, +/obj/effect/spawner/random/bureaucracy/crayon, +/obj/machinery/button/door/directional/south{ + id = "vdomsnow" + }, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) + +(1,1,1) = {" +D +D +D +D +D +D +D +D +f +"} +(2,1,1) = {" +D +a +a +a +j +c +a +a +D +"} +(3,1,1) = {" +D +a +N +n +P +i +V +a +D +"} +(4,1,1) = {" +D +a +e +v +o +T +Z +a +D +"} +(5,1,1) = {" +D +a +F +S +R +p +M +j +D +"} +(6,1,1) = {" +D +a +K +L +t +A +b +O +D +"} +(7,1,1) = {" +D +a +u +r +w +y +l +a +D +"} +(8,1,1) = {" +D +a +a +a +a +a +a +a +D +"} +(9,1,1) = {" +D +D +D +D +D +D +D +D +D +"} diff --git a/_maps/modular_generic/ice_s_freezer.dmm b/_maps/modular_generic/ice_s_freezer.dmm new file mode 100644 index 00000000000000..b150be62220dcf --- /dev/null +++ b/_maps/modular_generic/ice_s_freezer.dmm @@ -0,0 +1,190 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/weather/snow/corner, +/obj/structure/rack, +/obj/item/food/meat/slab/monkey, +/turf/open/floor/plating/snowed, +/area/template_noop) +"c" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/obj/machinery/light/cold/directional/west, +/obj/item/food/meat/slab/xeno{ + pixel_x = -4; + pixel_y = 3 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating/snowed, +/area/template_noop) +"d" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/snowed, +/area/template_noop) +"e" = ( +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/snowed, +/area/template_noop) +"h" = ( +/obj/effect/turf_decal/weather/snow/corner, +/turf/template_noop, +/area/template_noop) +"j" = ( +/obj/machinery/door/airlock/freezer, +/turf/open/floor/plating/snowed, +/area/template_noop) +"o" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/gibs/old, +/obj/item/food/meat/slab/bear{ + pixel_x = -7; + pixel_y = -3 + }, +/turf/open/floor/plating/snowed, +/area/template_noop) +"q" = ( +/obj/structure/table, +/obj/item/food/meat/slab/goliath, +/obj/item/food/meat/slab/pig{ + pixel_y = 4 + }, +/turf/open/floor/fake_snow, +/area/template_noop) +"t" = ( +/obj/machinery/door/airlock/maintenance/external, +/obj/structure/barricade/wooden/crude/snow, +/turf/open/floor/plating/snowed, +/area/template_noop) +"w" = ( +/obj/structure/closet/secure_closet/freezer/empty/open, +/obj/item/food/meat/slab/spider, +/obj/item/food/meat/slab/chicken, +/obj/item/food/meat/slab/rawcrab, +/turf/open/floor/fake_snow, +/area/template_noop) +"G" = ( +/turf/template_noop, +/area/template_noop) +"L" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"M" = ( +/obj/effect/decal/cleanable/xenoblood, +/obj/item/food/meat/slab/meatproduct{ + pixel_y = 6; + pixel_x = 6 + }, +/obj/item/food/meat/slab/meatwheat{ + pixel_x = -9; + pixel_y = -8 + }, +/turf/open/floor/fake_snow, +/area/template_noop) +"N" = ( +/turf/closed/wall/ice, +/area/template_noop) +"O" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/template_noop, +/area/template_noop) +"R" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 4 + }, +/turf/open/floor/plating/snowed, +/area/template_noop) +"W" = ( +/turf/closed/wall, +/area/template_noop) + +(1,1,1) = {" +G +G +G +G +G +G +L +"} +(2,1,1) = {" +G +N +N +W +W +W +G +"} +(3,1,1) = {" +G +W +w +c +d +t +O +"} +(4,1,1) = {" +h +j +e +R +o +W +G +"} +(5,1,1) = {" +G +W +a +M +q +N +G +"} +(6,1,1) = {" +G +W +W +W +N +N +G +"} +(7,1,1) = {" +G +G +G +G +G +G +G +"} diff --git a/_maps/modular_generic/jungle_l_dock.dmm b/_maps/modular_generic/jungle_l_dock.dmm new file mode 100644 index 00000000000000..e29f1fbec2877d --- /dev/null +++ b/_maps/modular_generic/jungle_l_dock.dmm @@ -0,0 +1,707 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aC" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/misc/grass/jungle, +/area/template_noop) +"bz" = ( +/obj/structure/flora/bush/ferny/style_random, +/obj/structure/flora/bush/large/style_random{ + pixel_y = -3 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"cg" = ( +/obj/structure/flora/rock/style_3, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/item/flashlight/lantern{ + icon_state = "lantern-on"; + pixel_y = 15; + pixel_x = -2 + }, +/turf/open/water/jungle, +/area/template_noop) +"cF" = ( +/obj/structure/flora/bush/ferny/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/rock/pile/jungle/large/style_random{ + pixel_x = 0; + pixel_y = 0 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"de" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 8 + }, +/obj/structure/chair/plastic{ + dir = 8 + }, +/obj/item/reagent_containers/cup/bucket/wooden{ + pixel_x = 16; + pixel_y = 11 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + pixel_x = -4; + pixel_y = 16 + }, +/obj/structure/railing, +/turf/open/floor/wood/large, +/area/template_noop) +"ez" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/gun/syringe/blowgun, +/turf/open/floor/wood/large, +/area/template_noop) +"eI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/grave/filled, +/obj/effect/spawner/random/exotic/syndie, +/obj/effect/spawner/random/exotic/antag_gear, +/turf/open/misc/dirt/jungle/dark, +/area/template_noop) +"fE" = ( +/obj/structure/flora/bush/ferny/style_random, +/obj/effect/turf_decal/weather/dirt, +/turf/open/misc/grass/jungle, +/area/template_noop) +"ge" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/grass/jungle, +/area/template_noop) +"gj" = ( +/obj/structure/flora/bush/reed/style_random, +/turf/open/water/jungle, +/area/template_noop) +"gq" = ( +/obj/structure/flora/bush/grassy/style_random, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/grass/jungle, +/area/template_noop) +"gI" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/vomit/old/black_bile, +/obj/structure/flora/rock/pile/style_random, +/turf/open/misc/grass/jungle, +/area/template_noop) +"gL" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/grass/jungle, +/area/template_noop) +"is" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/water/jungle, +/area/template_noop) +"iL" = ( +/obj/structure/flora/bush/grassy/style_random, +/obj/structure/closet/crate/grave/filled, +/obj/effect/spawner/random/contraband/armory, +/obj/effect/spawner/random/exotic/antag_gear, +/turf/open/misc/dirt/jungle/dark, +/area/template_noop) +"iW" = ( +/obj/structure/flora/rock, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/water/jungle, +/area/template_noop) +"ja" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/water/jungle, +/area/template_noop) +"jk" = ( +/obj/structure/flora/bush/ferny/style_random, +/turf/open/misc/grass/jungle, +/area/template_noop) +"kb" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/rock/pile/style_2, +/turf/open/misc/grass/jungle, +/area/template_noop) +"ll" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = -6; + pixel_y = 5 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"mF" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/water/jungle, +/area/template_noop) +"mV" = ( +/obj/structure/flora/rock/style_2, +/obj/effect/turf_decal/weather/dirt, +/turf/open/water/jungle, +/area/template_noop) +"nl" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/large/style_random{ + pixel_y = -3 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"nF" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/item/fishing_line/reinforced{ + pixel_y = 9 + }, +/obj/item/fishing_hook{ + pixel_x = 11 + }, +/obj/effect/turf_decal/weather/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/large, +/area/template_noop) +"nY" = ( +/obj/effect/turf_decal/weather/dirt, +/turf/open/misc/grass/jungle, +/area/template_noop) +"pE" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/railing{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/vomit/old/black_bile, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = 8; + pixel_y = 13 + }, +/turf/open/floor/wood/large, +/area/template_noop) +"qx" = ( +/obj/effect/decal/cleanable/vomit/old/black_bile, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/punji_sticks/spikes{ + icon_state = "punji" + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor7-old" + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"qS" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/rock/pile/jungle/large/style_random{ + pixel_x = 0; + pixel_y = 0 + }, +/obj/item/poster/random_contraband, +/obj/effect/spawner/random/clothing/pirate_or_bandana, +/turf/open/misc/dirt/jungle/dark, +/area/template_noop) +"qT" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/grass/jungle, +/area/template_noop) +"rJ" = ( +/turf/template_noop, +/area/template_noop) +"sE" = ( +/obj/structure/flora/bush/grassy/style_random, +/obj/structure/punji_sticks/spikes{ + icon_state = "punji" + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/misc/grass/jungle, +/area/template_noop) +"tD" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/railing{ + dir = 6 + }, +/obj/structure/closet/crate/wooden, +/obj/item/shovel, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/wood/large, +/area/template_noop) +"ul" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/effect/decal/cleanable/vomit/old/black_bile, +/obj/structure/flora/rock/pile/style_3, +/turf/open/misc/grass/jungle, +/area/template_noop) +"vl" = ( +/obj/structure/flora/bush/reed/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/water/jungle, +/area/template_noop) +"vG" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"vY" = ( +/obj/structure/flora/rock/pile/jungle/style_random, +/turf/open/water/jungle, +/area/template_noop) +"xR" = ( +/obj/structure/flora/bush/grassy/style_random, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = 8; + pixel_y = 13 + }, +/obj/structure/punji_sticks/spikes{ + icon_state = "punji" + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor6-old" + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"yN" = ( +/obj/structure/flora/bush/large/style_random{ + pixel_y = -3 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"yO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/rock/pile/jungle/style_random, +/turf/open/misc/grass/jungle, +/area/template_noop) +"zP" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/misc/grass/jungle, +/area/template_noop) +"AG" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/dirt/jungle/dark, +/area/template_noop) +"AK" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/water/jungle, +/area/template_noop) +"Er" = ( +/turf/open/misc/dirt/jungle/dark, +/area/template_noop) +"EQ" = ( +/obj/structure/flora/rock/pile/jungle/style_random, +/turf/open/misc/grass/jungle, +/area/template_noop) +"GK" = ( +/obj/structure/flora/rock/pile/jungle/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/water/jungle, +/area/template_noop) +"Hd" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/large/style_random{ + pixel_y = -3 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"HW" = ( +/obj/structure/flora/bush/large/style_random{ + pixel_y = -3 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"Ij" = ( +/obj/structure/flora/bush/grassy/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/structure/flora/rock/pile/jungle/large/style_random{ + pixel_x = 0; + pixel_y = 0 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"Jf" = ( +/obj/structure/flora/rock/style_3, +/obj/item/flashlight/lantern{ + icon_state = "lantern-on"; + pixel_y = 15; + pixel_x = -2 + }, +/turf/open/water/jungle, +/area/template_noop) +"JB" = ( +/obj/effect/mob_spawn/corpse/human/pirate, +/turf/open/water/jungle, +/area/template_noop) +"JC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/rock/pile/jungle/large/style_random{ + pixel_x = 0; + pixel_y = 0 + }, +/obj/structure/closet/crate/grave/filled, +/obj/effect/spawner/random/engineering/material_rare, +/obj/effect/spawner/random/exotic/antag_gear, +/turf/open/misc/dirt/jungle/dark, +/area/template_noop) +"JF" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/rock/pile/style_2, +/obj/structure/punji_sticks/spikes{ + icon_state = "punji" + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor5-old" + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"Kz" = ( +/obj/structure/flora/bush/grassy/style_random, +/turf/open/misc/dirt/jungle/dark, +/area/template_noop) +"KW" = ( +/turf/open/water/jungle, +/area/template_noop) +"LL" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = 9; + pixel_y = 21 + }, +/obj/effect/decal/cleanable/vomit/old/black_bile, +/obj/effect/spawner/random/entertainment/money_small, +/turf/open/misc/grass/jungle, +/area/template_noop) +"LW" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/mob/living/basic/frog, +/obj/effect/spawner/random/trash/mess, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 9 + }, +/turf/open/floor/wood/large, +/area/template_noop) +"Mv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/misc/grass/jungle, +/area/template_noop) +"NG" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/grave/filled, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/exotic/antag_gear, +/turf/open/misc/dirt/jungle/dark, +/area/template_noop) +"Pb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/bush/large/style_random{ + pixel_y = -3 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"Qk" = ( +/obj/item/fishing_rod, +/obj/structure/flora/bush/stalky/style_random, +/turf/open/water/jungle, +/area/template_noop) +"Rn" = ( +/obj/structure/flora/rock/style_4, +/turf/open/water/jungle, +/area/template_noop) +"RX" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/water/jungle, +/area/template_noop) +"Sb" = ( +/obj/structure/flora/bush/grassy/style_random, +/obj/effect/decal/cleanable/dirt, +/obj/structure/punji_sticks/spikes{ + icon_state = "punji" + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor4-old" + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"TU" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = -6; + pixel_y = 5 + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 6 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/template_noop) +"Uw" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/misc/grass/jungle, +/area/template_noop) +"UE" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/effect/turf_decal/siding/wood, +/obj/structure/railing, +/obj/item/chair/plastic{ + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + pixel_x = 5; + pixel_y = 15 + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/obj/item/bait_can{ + pixel_y = 16; + pixel_x = -8 + }, +/turf/open/floor/wood/large, +/area/template_noop) +"VC" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/misc/grass/jungle, +/area/template_noop) +"WZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/dirt/jungle/dark, +/area/template_noop) +"Xn" = ( +/obj/effect/turf_decal/weather/dirt, +/turf/open/water/jungle, +/area/template_noop) +"Yf" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/water/jungle, +/area/template_noop) +"Yt" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/grass/jungle, +/area/template_noop) +"Zl" = ( +/obj/structure/flora/bush/stalky/style_random, +/turf/open/water/jungle, +/area/template_noop) + +(1,1,1) = {" +rJ +rJ +rJ +rJ +rJ +rJ +rJ +rJ +rJ +rJ +vG +"} +(2,1,1) = {" +rJ +zP +xR +gI +jk +Pb +gL +Ij +JF +jk +rJ +"} +(3,1,1) = {" +rJ +qT +Mv +iL +iW +AK +WZ +AG +Uw +EQ +rJ +"} +(4,1,1) = {" +rJ +nY +qS +GK +KW +JB +vl +ja +NG +ll +rJ +"} +(5,1,1) = {" +rJ +nl +Er +cg +Zl +KW +de +KW +yN +Sb +rJ +"} +(6,1,1) = {" +rJ +fE +pE +ez +LW +TU +nF +Jf +vY +ul +rJ +"} +(7,1,1) = {" +rJ +Hd +Rn +gj +UE +Qk +tD +Yf +mF +aC +rJ +"} +(8,1,1) = {" +rJ +qx +gq +is +JB +KW +KW +Xn +Kz +cF +rJ +"} +(9,1,1) = {" +rJ +EQ +HW +JC +RX +vY +bz +mV +eI +ge +rJ +"} +(10,1,1) = {" +rJ +kb +zP +Yt +VC +sE +LL +yO +Pb +zP +rJ +"} +(11,1,1) = {" +rJ +rJ +rJ +rJ +rJ +rJ +rJ +rJ +rJ +rJ +rJ +"} diff --git a/_maps/modular_generic/jungle_m_armory.dmm b/_maps/modular_generic/jungle_m_armory.dmm new file mode 100644 index 00000000000000..a99a173cc8a1c7 --- /dev/null +++ b/_maps/modular_generic/jungle_m_armory.dmm @@ -0,0 +1,445 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"d" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/structure/flora/rock/pile/jungle/style_random, +/obj/structure/sign/poster/contraband/calada_jelly/directional/south, +/turf/open/floor/wood, +/area/template_noop) +"e" = ( +/obj/structure/flora/rock/pile/jungle/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/wood, +/area/template_noop) +"g" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/reed/style_random, +/turf/open/water/jungle, +/area/template_noop) +"h" = ( +/obj/structure/closet/crate/wooden, +/obj/item/gun/ballistic/rifle/boltaction, +/turf/open/water/jungle, +/area/template_noop) +"i" = ( +/obj/item/stack/sheet/mineral/wood{ + pixel_x = -8 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/structure/flora/bush/large/style_random{ + pixel_y = -3 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"j" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt, +/obj/item/hatchet/wooden, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/wood, +/area/template_noop) +"k" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/sheet/mineral/wood{ + pixel_x = 7 + }, +/turf/open/floor/wood, +/area/template_noop) +"m" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/obj/effect/spawner/random/trash/hobo_squat, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/mob_spawn/corpse/human/pirate, +/turf/open/floor/wood, +/area/template_noop) +"n" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"p" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/firepit, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = -11 + }, +/obj/structure/railing{ + dir = 5 + }, +/turf/open/misc/dirt, +/area/template_noop) +"q" = ( +/obj/item/stack/sheet/mineral/wood, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + pixel_x = -8; + pixel_y = 9 + }, +/turf/open/floor/wood, +/area/template_noop) +"r" = ( +/obj/structure/flora/rock/style_random, +/turf/open/water/jungle, +/area/template_noop) +"s" = ( +/obj/effect/spawner/random/trash/botanical_waste, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/dirt, +/area/template_noop) +"u" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/effect/decal/cleanable/xenoblood, +/obj/effect/decal/remains/xeno, +/obj/structure/flora/bush/large/style_random{ + pixel_y = -3 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"v" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/weather/dirt, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = 9; + pixel_y = 21 + }, +/turf/open/floor/wood, +/area/template_noop) +"x" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/flora/rock/pile/jungle/large/style_random{ + pixel_x = 0; + pixel_y = 0 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood, +/area/template_noop) +"y" = ( +/turf/closed/wall/mineral/wood, +/area/template_noop) +"z" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = 9 + }, +/turf/open/floor/wood, +/area/template_noop) +"A" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/wooden, +/obj/effect/decal/cleanable/cobweb, +/obj/structure/sign/poster/contraband/free_tonto/directional/west, +/obj/effect/spawner/random/medical/medkit_rare, +/obj/effect/spawner/random/exotic/antag_gear, +/turf/open/floor/wood, +/area/template_noop) +"B" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/barricade/wooden, +/turf/open/misc/dirt, +/area/template_noop) +"C" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/bush/jungle/c/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"D" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/misc/dirt, +/area/template_noop) +"G" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash, +/turf/open/misc/dirt, +/area/template_noop) +"J" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/rock/style_2, +/obj/structure/railing, +/turf/open/floor/wood, +/area/template_noop) +"K" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/water/jungle, +/area/template_noop) +"L" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/ammo_box/strilka310, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + pixel_x = 6; + pixel_y = -3 + }, +/turf/open/floor/wood, +/area/template_noop) +"M" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/bush/large/style_random{ + pixel_y = -3 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"O" = ( +/obj/structure/barricade/wooden, +/turf/open/misc/dirt, +/area/template_noop) +"P" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/style_random, +/turf/open/water/jungle, +/area/template_noop) +"Q" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/spawner/random/clothing/backpack, +/turf/open/misc/dirt, +/area/template_noop) +"R" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/flora/rock/style_3, +/turf/open/floor/wood, +/area/template_noop) +"T" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/railing{ + dir = 6 + }, +/turf/open/misc/dirt, +/area/template_noop) +"U" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/structure/flora/grass/jungle/a/style_random, +/turf/open/floor/wood, +/area/template_noop) +"W" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/bush/jungle, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/effect/spawner/random/structure/crate, +/turf/open/misc/grass/jungle, +/area/template_noop) +"X" = ( +/obj/effect/spawner/random/decoration/glowstick, +/turf/open/water/jungle, +/area/template_noop) +"Y" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/item/stack/sheet/mineral/wood{ + pixel_x = 7 + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor5-old" + }, +/turf/open/floor/wood, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +n +"} +(2,1,1) = {" +a +y +y +y +W +s +y +y +a +"} +(3,1,1) = {" +a +y +A +x +Y +U +M +y +a +"} +(4,1,1) = {" +a +y +v +T +P +q +d +y +a +"} +(5,1,1) = {" +a +G +k +g +r +p +m +O +a +"} +(6,1,1) = {" +a +u +J +h +K +X +j +C +a +"} +(7,1,1) = {" +a +B +L +R +Q +e +z +y +a +"} +(8,1,1) = {" +a +y +y +y +i +D +y +y +a +"} +(9,1,1) = {" +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/modular_generic/station_l_bathroom.dmm b/_maps/modular_generic/station_l_bathroom.dmm new file mode 100644 index 00000000000000..19d54e2a849b99 --- /dev/null +++ b/_maps/modular_generic/station_l_bathroom.dmm @@ -0,0 +1,617 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"b" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = 8; + pixel_y = 13 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/obj/structure/broken_flooring/pile/directional/east, +/obj/structure/sign/poster/random/directional/east, +/obj/structure/fluff/paper{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/template_noop) +"c" = ( +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"d" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/mop_bucket, +/obj/item/mop, +/turf/open/floor/plating, +/area/template_noop) +"e" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/spawner/random/trash/garbage, +/obj/structure/fluff/paper/corner{ + dir = 8 + }, +/turf/open/floor/iron/small, +/area/template_noop) +"f" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/obj/structure/fluff/paper/corner, +/obj/effect/spawner/random/trash/caution_sign, +/turf/open/floor/iron/small, +/area/template_noop) +"g" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/spawner/random/trash, +/turf/open/floor/iron/small, +/area/template_noop) +"h" = ( +/obj/structure/chair/stool/directional/east{ + pixel_x = -6 + }, +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"i" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/cobweb, +/obj/structure/sign/poster/random/directional/west, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 9 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner, +/obj/effect/spawner/random/engineering/toolbox, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/small, +/area/template_noop) +"j" = ( +/obj/effect/spawner/random/clothing/costume, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 6 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 1 + }, +/obj/structure/fluff/paper{ + dir = 6; + plane = -9 + }, +/obj/structure/table, +/turf/open/floor/iron/small, +/area/template_noop) +"l" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = 9; + pixel_y = 13 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new, +/obj/effect/decal/cleanable/vomit, +/obj/machinery/light/small/dim/directional/north, +/obj/item/trash/semki/healthy, +/turf/open/floor/iron/small, +/area/template_noop) +"m" = ( +/obj/structure/sign/poster/random/directional/north, +/obj/effect/spawner/random/trash/graffiti, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new, +/turf/open/floor/iron/small, +/area/template_noop) +"o" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 10 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 4 + }, +/obj/structure/fluff/paper{ + dir = 10 + }, +/turf/open/floor/iron/small, +/area/template_noop) +"p" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/structure/closet/crate/trashcart, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/armory/shotgun, +/obj/effect/spawner/random/bureaucracy/folder, +/obj/effect/spawner/random/bureaucracy, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/iron/freezer, +/area/template_noop) +"q" = ( +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/obj/machinery/light/small/dim/directional/east, +/obj/item/cigbutt, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"r" = ( +/obj/item/chair/stool{ + pixel_x = -3; + 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/plating, +/area/template_noop) +"s" = ( +/obj/machinery/door/airlock, +/turf/open/floor/iron/freezer, +/area/template_noop) +"t" = ( +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/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/diagonal, +/area/template_noop) +"u" = ( +/obj/structure/toilet{ + pixel_y = 8 + }, +/mob/living/basic/blankbody, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/random/trash/soap, +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor5-old" + }, +/obj/effect/decal/cleanable/blood/gibs/up, +/obj/machinery/light/small/red/dim/directional/west, +/turf/open/floor/iron/freezer, +/area/template_noop) +"v" = ( +/obj/effect/turf_decal/siding/thinplating_new, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/machinery/light_switch/directional/south, +/obj/structure/broken_flooring/pile/directional/west, +/turf/open/floor/iron/small, +/area/template_noop) +"w" = ( +/obj/structure/sink/directional/west, +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/obj/effect/decal/cleanable/glass, +/obj/item/shard, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"x" = ( +/obj/item/kirbyplants/random, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 5 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 8 + }, +/obj/structure/fluff/paper/corner, +/turf/open/floor/iron/small, +/area/template_noop) +"y" = ( +/obj/structure/sign/poster/random/directional/east, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/cigbutt{ + pixel_y = 7 + }, +/obj/structure/fluff/paper{ + dir = 4 + }, +/obj/effect/decal/cleanable/ash, +/turf/open/floor/iron/small, +/area/template_noop) +"z" = ( +/obj/effect/spawner/random/clothing/wardrobe_closet_colored, +/obj/effect/turf_decal/siding/thinplating_new, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/machinery/light/small/dim/directional/south, +/obj/structure/sign/poster/random/directional/south, +/obj/structure/fluff/paper/corner, +/turf/open/floor/iron/small, +/area/template_noop) +"A" = ( +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"C" = ( +/obj/machinery/door/airlock, +/turf/open/floor/plating, +/area/template_noop) +"E" = ( +/obj/effect/turf_decal/siding/thinplating_new, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/small, +/area/template_noop) +"F" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 6 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 1 + }, +/obj/item/trash/boritos/purple{ + pixel_x = -11; + pixel_y = 6 + }, +/turf/open/floor/iron/small, +/area/template_noop) +"G" = ( +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"H" = ( +/turf/closed/wall, +/area/template_noop) +"I" = ( +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/obj/structure/sign/clock/directional/west, +/obj/machinery/light/warm/dim/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/fluff/paper{ + dir = 8 + }, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"J" = ( +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/obj/effect/decal/cleanable/dirt, +/obj/item/cigbutt{ + pixel_y = 7 + }, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"K" = ( +/obj/structure/sign/poster/random/directional/west, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/trash/boritos{ + pixel_x = -6; + pixel_y = -8 + }, +/obj/structure/fluff/paper/corner{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/template_noop) +"L" = ( +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"N" = ( +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/obj/effect/decal/cleanable/ants, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"O" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/turf_decal/siding/thinplating_new, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/small, +/area/template_noop) +"P" = ( +/obj/structure/sink/directional/west, +/obj/structure/mirror/broken/directional/east, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor3-old" + }, +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"Q" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new, +/obj/structure/chair/stool/directional/south{ + pixel_y = 16 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/small, +/area/template_noop) +"R" = ( +/obj/structure/hedge, +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/obj/structure/window/reinforced/tinted/spawner/directional/north, +/obj/structure/window/reinforced/tinted/spawner/directional/west, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/turf/open/floor/iron/small, +/area/template_noop) +"S" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/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/small, +/area/template_noop) +"T" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"U" = ( +/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/dust, +/obj/structure/fluff/paper/corner{ + dir = 1 + }, +/turf/open/floor/plating, +/area/template_noop) +"V" = ( +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/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/diagonal, +/area/template_noop) +"W" = ( +/obj/machinery/door/airlock, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/freezer, +/area/template_noop) +"X" = ( +/obj/effect/turf_decal/siding/thinplating_new, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "tracks" + }, +/obj/structure/fluff/paper/corner{ + dir = 8 + }, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = -6 + }, +/turf/open/floor/iron/small, +/area/template_noop) +"Y" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 5 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/cigbutt, +/obj/item/cigbutt{ + pixel_x = -8; + pixel_y = 6 + }, +/obj/effect/decal/cleanable/ash, +/turf/open/floor/iron/small, +/area/template_noop) +"Z" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/south, +/obj/effect/turf_decal/siding/thinplating_new, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/structure/fluff/paper/corner{ + dir = 8 + }, +/turf/open/floor/iron/small, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +a +T +"} +(2,1,1) = {" +a +H +H +H +H +H +H +H +H +H +a +"} +(3,1,1) = {" +a +H +u +W +X +I +K +s +p +H +a +"} +(4,1,1) = {" +a +H +H +H +Q +d +v +H +H +H +a +"} +(5,1,1) = {" +a +H +i +g +F +t +Y +e +o +H +a +"} +(6,1,1) = {" +a +H +l +c +P +q +w +G +Z +H +a +"} +(7,1,1) = {" +a +C +E +J +H +R +H +L +O +H +a +"} +(8,1,1) = {" +a +H +m +V +r +N +h +A +z +H +a +"} +(9,1,1) = {" +a +H +x +b +U +S +f +y +j +H +a +"} +(10,1,1) = {" +a +H +H +H +H +C +H +H +H +H +a +"} +(11,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/modular_generic/station_l_crates.dmm b/_maps/modular_generic/station_l_crates.dmm new file mode 100644 index 00000000000000..bc5e096c27b221 --- /dev/null +++ b/_maps/modular_generic/station_l_crates.dmm @@ -0,0 +1,571 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/food_packaging, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating_new/dark, +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 4 + }, +/area/template_noop) +"c" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating/rust, +/area/template_noop) +"d" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/engineering/canister, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/template_noop) +"e" = ( +/turf/template_noop, +/area/template_noop) +"g" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/entertainment/toy, +/obj/effect/spawner/random/entertainment/toy, +/obj/effect/spawner/random/entertainment/toy, +/obj/item/poster/random_contraband, +/obj/effect/turf_decal/bot_red, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"h" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Warehouse Maintenance" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/template_noop) +"i" = ( +/obj/effect/spawner/random/maintenance/two, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 4 + }, +/area/template_noop) +"j" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"k" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/west, +/obj/effect/spawner/random/trash/moisture_trap, +/turf/open/floor/plating/rust, +/area/template_noop) +"l" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/template_noop) +"m" = ( +/obj/effect/spawner/random/trash/botanical_waste, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 8 + }, +/area/template_noop) +"n" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/plating, +/area/template_noop) +"o" = ( +/obj/effect/spawner/random/trash/graffiti, +/turf/closed/wall, +/area/template_noop) +"p" = ( +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 8 + }, +/area/template_noop) +"q" = ( +/obj/effect/turf_decal/bot, +/obj/structure/reagent_dispensers/watertank, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/template_noop) +"r" = ( +/obj/effect/turf_decal/bot, +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/rust, +/area/template_noop) +"s" = ( +/turf/closed/wall/rust, +/area/template_noop) +"t" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/contraband/permabrig_weapon, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 4 + }, +/area/template_noop) +"u" = ( +/obj/machinery/door/airlock/mining{ + name = "Warehouse" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"v" = ( +/obj/effect/spawner/random/trash/graffiti, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 4 + }, +/area/template_noop) +"w" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/item/stack/sheet/iron/five, +/obj/item/stack/rods/ten, +/obj/effect/turf_decal/bot_red, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"x" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/arrows, +/turf/open/floor/plating/rust, +/area/template_noop) +"y" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/box, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 8 + }, +/area/template_noop) +"z" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/spawner/random/engineering/material_rare, +/obj/effect/turf_decal/bot_red, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"A" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/rust, +/area/template_noop) +"B" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 4 + }, +/area/template_noop) +"C" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/arrows{ + dir = 1 + }, +/turf/open/floor/plating/rust, +/area/template_noop) +"D" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/grime, +/obj/item/poster/random_contraband, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 8 + }, +/area/template_noop) +"E" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/material_rare, +/turf/open/floor/plating, +/area/template_noop) +"F" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/maintenance/two, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/plating, +/area/template_noop) +"G" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/box, +/turf/open/floor/plating, +/area/template_noop) +"H" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/template_noop) +"I" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/tank_holder, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 8 + }, +/area/template_noop) +"J" = ( +/obj/effect/spawner/random/trash/mess, +/obj/effect/spawner/random/contraband/permabrig_weapon, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 4 + }, +/area/template_noop) +"K" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/material_cheap, +/turf/open/floor/plating, +/area/template_noop) +"L" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/maintenance/two, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/south, +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/plating, +/area/template_noop) +"M" = ( +/obj/effect/spawner/random/trash/mess, +/obj/effect/spawner/random/trash/cigbutt, +/turf/open/floor/iron/dark, +/area/template_noop) +"N" = ( +/obj/effect/spawner/random/maintenance, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 8 + }, +/area/template_noop) +"O" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 4 + }, +/area/template_noop) +"P" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/maintenance/four, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/vending_restock, +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/plating, +/area/template_noop) +"Q" = ( +/obj/effect/spawner/random/trash/botanical_waste, +/obj/effect/spawner/random/trash/food_packaging, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/iron/dark, +/area/template_noop) +"R" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wideplating_new/dark, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 8 + }, +/area/template_noop) +"S" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/flashlight, +/turf/open/floor/plating, +/area/template_noop) +"T" = ( +/turf/closed/wall, +/area/template_noop) +"U" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/bin, +/obj/effect/turf_decal/siding/wideplating_new/dark, +/turf/open/floor/iron/dark, +/area/template_noop) +"V" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/engineering/canister, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating/rust, +/area/template_noop) +"W" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/maintenance/three, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/rust, +/area/template_noop) +"X" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/maintenance/four, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/plating, +/area/template_noop) +"Y" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/crate_abandoned, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/template_noop) +"Z" = ( +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/north, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/template_noop) + +(1,1,1) = {" +e +e +e +e +e +e +e +e +e +e +j +"} +(2,1,1) = {" +e +T +T +T +T +s +s +s +T +T +e +"} +(3,1,1) = {" +e +A +T +l +X +H +W +k +T +C +e +"} +(4,1,1) = {" +e +T +s +V +H +n +q +E +o +T +e +"} +(5,1,1) = {" +e +o +I +m +N +p +D +y +R +u +e +"} +(6,1,1) = {" +e +T +Z +g +M +w +Q +z +U +s +e +"} +(7,1,1) = {" +e +h +t +B +v +O +J +i +a +u +e +"} +(8,1,1) = {" +e +T +T +K +d +G +Y +L +T +T +e +"} +(9,1,1) = {" +e +A +T +c +F +P +S +r +T +x +e +"} +(10,1,1) = {" +e +T +T +s +o +T +s +s +T +T +e +"} +(11,1,1) = {" +e +e +e +e +e +e +e +e +e +e +e +"} diff --git a/_maps/modular_generic/station_l_kilojan.dmm b/_maps/modular_generic/station_l_kilojan.dmm new file mode 100644 index 00000000000000..9183b617f54e6a --- /dev/null +++ b/_maps/modular_generic/station_l_kilojan.dmm @@ -0,0 +1,644 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"b" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "garbage"; + name = "trash belt" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"c" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/template_noop) +"d" = ( +/turf/open/floor/plating, +/area/template_noop) +"e" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/template_noop) +"f" = ( +/obj/structure/closet/l3closet/janitor, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/bot, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"g" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"h" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/effect/turf_decal/tile/blue, +/obj/structure/closet/crate/trashcart/filled, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"i" = ( +/obj/machinery/door/airlock/grunge{ + name = "Custodial Closet" + }, +/turf/open/floor/iron, +/area/template_noop) +"j" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/template_noop) +"k" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/template_noop) +"l" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "garbage"; + name = "trash belt" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/template_noop) +"m" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/turf_decal/delivery, +/obj/structure/mop_bucket/janitorialcart{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"n" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/effect/turf_decal/tile/blue, +/obj/structure/closet/crate/trashcart/filled, +/obj/effect/turf_decal/tile/blue, +/obj/structure/disposalpipe/segment, +/obj/machinery/mineral/stacking_unit_console{ + pixel_x = 64 + }, +/turf/open/floor/iron, +/area/template_noop) +"o" = ( +/obj/machinery/door/airlock/grunge{ + name = "Custodial Closet" + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron, +/area/template_noop) +"p" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/template_noop) +"r" = ( +/obj/structure/sink/directional/west, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/loading_area, +/obj/machinery/door/window/right/directional/south{ + name = "Trash Chute"; + req_access = list("janitor") + }, +/obj/item/reagent_containers/cup/bucket, +/obj/item/mop, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"s" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/door/window/left/directional/south{ + name = "Trash Chute"; + req_access = list("janitor") + }, +/obj/machinery/conveyor_switch/oneway{ + dir = 4; + id = "garbage"; + name = "trash chute" + }, +/obj/effect/turf_decal/loading_area, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/spawner/random/trash/mess, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/template_noop) +"t" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/broken_flooring/side/directional/south, +/turf/open/floor/plating, +/area/template_noop) +"u" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"v" = ( +/turf/closed/wall/r_wall, +/area/template_noop) +"w" = ( +/obj/structure/broken_flooring/pile/directional/west, +/turf/open/floor/plating, +/area/template_noop) +"x" = ( +/turf/closed/wall, +/area/template_noop) +"y" = ( +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/obj/structure/broken_flooring/side/directional/south, +/obj/structure/closet/crate/trashcart/filled, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/template_noop) +"z" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "garbage"; + name = "trash belt" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/recycler{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"A" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"B" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/disposal/delivery_chute{ + dir = 8 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/east, +/obj/structure/sign/warning/deathsposal/directional/east, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"C" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/template_noop) +"D" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"E" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "garbage"; + name = "trash belt" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"F" = ( +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/plating, +/area/template_noop) +"G" = ( +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/blue, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/template_noop) +"H" = ( +/obj/machinery/mineral/stacking_machine{ + input_dir = 2 + }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"I" = ( +/turf/closed/wall/rust, +/area/template_noop) +"J" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/effect/turf_decal/tile/blue, +/obj/structure/sign/poster/random/directional/south, +/obj/structure/closet/crate/trashcart/filled, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"K" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/broken_flooring/singular, +/obj/structure/closet/crate/trashcart/filled, +/turf/open/floor/plating, +/area/template_noop) +"L" = ( +/obj/structure/disposaloutlet{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/west, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"M" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "garbage"; + name = "trash belt" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"N" = ( +/obj/machinery/vending/wardrobe/jani_wardrobe, +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/iron/dark, +/area/template_noop) +"O" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/item/reagent_containers/cup/bucket, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/iron/dark, +/area/template_noop) +"Q" = ( +/obj/structure/table, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/flashlight{ + pixel_y = 4 + }, +/obj/item/flashlight{ + pixel_y = 4 + }, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/button/door/directional/north{ + id = "custodialwagon"; + name = "Custodial Bay Toggle"; + pixel_x = 8; + req_access = list("janitor") + }, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, +/obj/effect/spawner/random/clothing/gloves, +/turf/open/floor/iron/dark, +/area/template_noop) +"R" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"S" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/template_noop) +"T" = ( +/obj/vehicle/ridden/janicart{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/template_noop) +"U" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/template_noop) +"V" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/effect/turf_decal/tile/blue, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"W" = ( +/obj/structure/table, +/obj/item/storage/box/lights/mixed{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/storage/box/lights/mixed{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/grenade/chem_grenade/cleaner{ + pixel_x = 10; + pixel_y = 6 + }, +/obj/item/grenade/chem_grenade/cleaner{ + pixel_x = 10; + pixel_y = 6 + }, +/obj/item/grenade/chem_grenade/cleaner{ + pixel_x = 10; + pixel_y = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"X" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "custodialwagon" + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"Y" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/template_noop) +"Z" = ( +/obj/structure/table, +/obj/item/toy/figure/janitor{ + pixel_x = -8; + pixel_y = 6 + }, +/obj/item/storage/box/mousetraps{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/storage/box/mousetraps{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/restraints/legcuffs/beartrap{ + pixel_y = 8 + }, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +a +D +"} +(2,1,1) = {" +a +v +v +v +v +v +v +v +v +v +a +"} +(3,1,1) = {" +a +v +Z +u +W +N +f +p +L +v +a +"} +(4,1,1) = {" +a +i +u +A +g +F +C +s +E +v +a +"} +(5,1,1) = {" +a +v +Q +c +e +Y +G +r +b +v +a +"} +(6,1,1) = {" +a +X +T +w +k +j +J +x +z +v +a +"} +(7,1,1) = {" +a +X +S +U +U +K +h +x +l +v +a +"} +(8,1,1) = {" +a +X +m +d +t +y +n +H +M +v +a +"} +(9,1,1) = {" +a +v +O +e +R +u +V +I +B +v +a +"} +(10,1,1) = {" +a +v +v +o +o +v +v +v +v +v +a +"} +(11,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/modular_generic/station_l_kitchen.dmm b/_maps/modular_generic/station_l_kitchen.dmm new file mode 100644 index 00000000000000..68b5bb36998580 --- /dev/null +++ b/_maps/modular_generic/station_l_kitchen.dmm @@ -0,0 +1,908 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"b" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/light/cold/no_nightlight/directional/west, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters"; + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"c" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/grill, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"d" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters"; + dir = 1 + }, +/obj/effect/spawner/random/entertainment/musical_instrument, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"e" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 5 + }, +/obj/machinery/griddle, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"f" = ( +/turf/open/floor/iron/kitchen, +/area/template_noop) +"g" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters" + }, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"h" = ( +/obj/machinery/smartfridge/food, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/template_noop) +"i" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters"; + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"k" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/machinery/grill, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"l" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchen"; + name = "Kitchen Shutters" + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/template_noop) +"n" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/white{ + dir = 10 + }, +/obj/structure/closet/secure_closet/freezer/fridge{ + locked = 0 + }, +/obj/item/storage/box/ingredients/wildcard, +/obj/item/storage/box/ingredients/wildcard, +/obj/item/storage/box/ingredients/wildcard, +/obj/item/storage/box/ingredients/wildcard, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"o" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Kitchen" + }, +/turf/open/floor/iron/kitchen, +/area/template_noop) +"p" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/griddle, +/obj/item/food/raw_patty{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"q" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/light/cold/no_nightlight/directional/east, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters" + }, +/obj/effect/spawner/random/food_or_drink/donuts{ + pixel_x = -6 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"r" = ( +/obj/machinery/deepfryer, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"s" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 10 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/beaker/large{ + pixel_x = 5 + }, +/obj/item/kitchen/rollingpin, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"t" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchen"; + name = "Kitchen Shutters" + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/effect/spawner/random/entertainment/deck, +/obj/effect/spawner/random/entertainment/gambling, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/template_noop) +"u" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/template_noop) +"v" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters" + }, +/obj/effect/spawner/random/food_or_drink/donuts{ + pixel_x = 11 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"w" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchen"; + name = "Kitchen Shutters" + }, +/obj/item/radio{ + desc = "An old handheld radio. Tuned to the outpost's hit radio station."; + frequency = 1475; + icon_state = "radio"; + name = "old radio" + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/template_noop) +"x" = ( +/turf/closed/wall, +/area/template_noop) +"y" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white, +/obj/structure/table/reinforced, +/obj/machinery/microwave{ + pixel_y = 5 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"z" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/structure/closet/secure_closet/freezer/fridge{ + locked = 0 + }, +/obj/item/storage/box/ingredients/wildcard, +/obj/item/storage/box/ingredients/wildcard, +/obj/item/storage/box/ingredients/wildcard, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"A" = ( +/obj/machinery/chem_dispenser/drinks/fullupgrade{ + dir = 8; + pixel_x = 16 + }, +/turf/open/floor/iron/kitchen, +/area/template_noop) +"B" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/machinery/vending/wardrobe/chef_wardrobe, +/obj/machinery/light/cold/no_nightlight/directional/east, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"C" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"D" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"E" = ( +/obj/machinery/deepfryer, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 6 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"F" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/item/clothing/suit/apron/chef, +/obj/item/clothing/head/utility/chefhat, +/obj/item/clothing/mask/fakemoustache/italian, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"G" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"I" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/obj/machinery/vending/dinnerware, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"J" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"K" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/light/cold/no_nightlight/directional/west, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters" + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"L" = ( +/obj/machinery/button/door/directional/west{ + id = "kitchen"; + name = "Counter Shutters Control" + }, +/obj/structure/sink/kitchen/directional/east{ + pixel_y = 3 + }, +/turf/open/floor/iron/kitchen, +/area/template_noop) +"M" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchen"; + name = "Kitchen Shutters" + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/effect/spawner/random/entertainment/dice, +/obj/effect/spawner/random/entertainment/coin, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/template_noop) +"N" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/machinery/processor{ + pixel_y = 7 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"O" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters" + }, +/obj/item/storage/bag/tray{ + pixel_y = 6 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"P" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/obj/structure/table/reinforced, +/obj/machinery/reagentgrinder{ + pixel_x = -10; + pixel_y = 4 + }, +/obj/item/book/manual/chef_recipes{ + pixel_x = 5 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"Q" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters"; + dir = 1 + }, +/obj/effect/spawner/random/entertainment/plushie, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"S" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/light/cold/no_nightlight/directional/east, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters"; + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"T" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters"; + dir = 1 + }, +/obj/effect/spawner/random/entertainment/lighter, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"W" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters" + }, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage{ + pixel_x = -7; + pixel_y = 4 + }, +/obj/effect/spawner/random/food_or_drink/salad{ + pixel_x = 7 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"Y" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/storage/box/ingredients/wildcard{ + pixel_y = 5 + }, +/obj/item/stack/sheet/mineral/coal/ten, +/turf/open/floor/iron/dark/textured, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +a +D +"} +(2,1,1) = {" +a +x +o +h +t +M +w +l +x +x +a +"} +(3,1,1) = {" +a +b +f +f +f +f +f +f +L +K +a +"} +(4,1,1) = {" +a +T +f +P +C +F +C +s +f +O +a +"} +(5,1,1) = {" +a +d +f +N +G +Y +G +y +f +g +a +"} +(6,1,1) = {" +a +i +f +p +G +c +G +r +f +W +a +"} +(7,1,1) = {" +a +Q +f +e +J +k +J +E +f +v +a +"} +(8,1,1) = {" +a +S +f +f +f +f +f +f +f +q +a +"} +(9,1,1) = {" +a +x +z +n +A +f +f +I +B +x +a +"} +(10,1,1) = {" +a +x +x +x +x +u +o +u +x +x +a +"} +(11,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/modular_generic/station_l_morgue.dmm b/_maps/modular_generic/station_l_morgue.dmm new file mode 100644 index 00000000000000..4b4eb63458d1bf --- /dev/null +++ b/_maps/modular_generic/station_l_morgue.dmm @@ -0,0 +1,540 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 4 + }, +/obj/effect/spawner/random/trash/bacteria, +/obj/effect/decal/cleanable/blood/tracks, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/template_noop) +"b" = ( +/obj/structure/table/optable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mob_spawn/corpse/human/damaged, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"c" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_half, +/area/template_noop) +"d" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Morgue Maintenance" + }, +/obj/effect/spawner/random/structure/barricade, +/turf/open/floor/plating, +/area/template_noop) +"e" = ( +/turf/closed/wall, +/area/template_noop) +"f" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_half, +/area/template_noop) +"g" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/spawner/random/trash/mess, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/template_noop) +"h" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/door/airlock/grunge{ + name = "Morgue" + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/iron/dark, +/area/template_noop) +"i" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/template_noop) +"j" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_edge{ + dir = 1 + }, +/area/template_noop) +"k" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/iron/dark, +/area/template_noop) +"l" = ( +/obj/structure/bodycontainer/morgue, +/turf/open/floor/iron/dark/textured_half, +/area/template_noop) +"m" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 8 + }, +/obj/effect/spawner/random/medical/surgery_tool, +/turf/open/floor/iron/dark, +/area/template_noop) +"n" = ( +/obj/structure/rack, +/obj/item/storage/box/bodybags{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/box/bodybags, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/medical/memeorgans{ + spawn_loot_count = 1 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/template_noop) +"o" = ( +/obj/structure/bodycontainer/morgue{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_half, +/area/template_noop) +"p" = ( +/obj/structure/bodycontainer/morgue{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_half, +/area/template_noop) +"q" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/medical/patient_stretcher, +/obj/machinery/iv_drip, +/obj/machinery/light/small/blacklight/directional/east, +/turf/open/floor/iron/dark/smooth_large, +/area/template_noop) +"r" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/effect/spawner/random/medical/memeorgans, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_edge{ + dir = 1 + }, +/area/template_noop) +"s" = ( +/obj/structure/bodycontainer/morgue, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_half, +/area/template_noop) +"t" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/railing, +/turf/open/floor/iron/dark, +/area/template_noop) +"u" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/obj/structure/sign/poster/official/random/directional/west, +/turf/open/floor/iron/dark/textured_half, +/area/template_noop) +"v" = ( +/obj/item/stack/tile/iron/dark{ + pixel_x = 12; + pixel_y = -3 + }, +/turf/open/floor/plating, +/area/template_noop) +"w" = ( +/obj/structure/bodycontainer/morgue{ + dir = 2 + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/template_noop) +"x" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/iron/dark/textured_half, +/area/template_noop) +"y" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/blacklight/directional/west, +/turf/open/floor/iron/dark/textured_half, +/area/template_noop) +"z" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/computer/operating, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"A" = ( +/obj/machinery/door/airlock/grunge{ + name = "Morgue" + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/spawner/random/structure/barricade, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/iron/dark, +/area/template_noop) +"B" = ( +/obj/item/stack/tile/iron/dark/textured_half{ + pixel_x = -7; + pixel_y = -9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/template_noop) +"C" = ( +/obj/item/stack/tile/iron/dark{ + pixel_x = -11; + pixel_y = 8 + }, +/obj/effect/spawner/random/trash/grime, +/obj/structure/railing/corner/end/flip{ + dir = 1 + }, +/turf/open/floor/plating, +/area/template_noop) +"D" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 1 + }, +/obj/item/stack/rods{ + pixel_x = -8; + pixel_y = 3 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"E" = ( +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/iron/dark/smooth_large, +/area/template_noop) +"F" = ( +/obj/structure/bodycontainer/morgue{ + dir = 2 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/template_noop) +"G" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"H" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/mob_spawn/corpse/human/assistant, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/iron/dark, +/area/template_noop) +"I" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/railing/corner/end{ + dir = 1 + }, +/turf/open/floor/plating, +/area/template_noop) +"J" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron/dark, +/area/template_noop) +"K" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"L" = ( +/obj/structure/chair/office/tactical{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/turf/open/floor/iron/dark/textured_edge{ + dir = 1 + }, +/area/template_noop) +"M" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/item/stack/rods{ + pixel_x = 5; + pixel_y = 10 + }, +/obj/effect/mapping_helpers/dead_body_placer{ + bodycount = 9 + }, +/turf/open/floor/plating, +/area/template_noop) +"N" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Morgue Maintenance" + }, +/obj/effect/mapping_helpers/airlock/welded, +/turf/open/floor/plating, +/area/template_noop) +"O" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plating, +/area/template_noop) +"P" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/gibspawner/human/bodypartless, +/turf/open/floor/plating, +/area/template_noop) +"Q" = ( +/obj/effect/spawner/random/trash/mess, +/obj/machinery/light/small/blacklight/directional/west, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/template_noop) +"R" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/spawner/random/medical/surgery_tool_advanced, +/obj/structure/railing/corner/end/flip{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"S" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/blacklight/directional/east, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/template_noop) +"T" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/surgery_tray/full/morgue, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"U" = ( +/turf/template_noop, +/area/template_noop) +"V" = ( +/obj/item/stack/sheet/iron/ten{ + pixel_x = -5 + }, +/turf/open/floor/iron/dark/textured_half, +/area/template_noop) +"W" = ( +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/template_noop) +"X" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_half, +/area/template_noop) +"Z" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/obj/effect/mapping_helpers/damaged_window{ + integrity_damage_min = 0.6; + integrity_damage_max = 0.9 + }, +/turf/open/floor/plating, +/area/template_noop) + +(1,1,1) = {" +U +U +U +U +U +U +U +U +U +U +K +"} +(2,1,1) = {" +U +e +e +e +d +e +e +e +e +e +U +"} +(3,1,1) = {" +U +e +w +Q +R +x +u +y +f +e +U +"} +(4,1,1) = {" +U +e +w +W +t +p +p +p +o +e +U +"} +(5,1,1) = {" +U +e +z +j +C +V +s +s +l +e +U +"} +(6,1,1) = {" +U +e +b +L +J +M +B +c +X +e +U +"} +(7,1,1) = {" +U +e +T +r +I +P +O +k +a +h +U +"} +(8,1,1) = {" +U +e +F +W +m +v +G +i +D +Z +U +"} +(9,1,1) = {" +U +e +F +S +H +E +n +q +g +A +U +"} +(10,1,1) = {" +U +e +e +e +N +e +e +e +e +e +U +"} +(11,1,1) = {" +U +U +U +U +U +U +U +U +U +U +U +"} diff --git a/_maps/modular_generic/station_l_security.dmm b/_maps/modular_generic/station_l_security.dmm new file mode 100644 index 00000000000000..0b629f3f388b25 --- /dev/null +++ b/_maps/modular_generic/station_l_security.dmm @@ -0,0 +1,543 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aJ" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Security Desk"; + dir = 4 + }, +/obj/item/flashlight/lamp{ + pixel_x = -5; + pixel_y = 7 + }, +/obj/item/reagent_containers/cup/glass/mug/nanotrasen, +/turf/open/floor/plating, +/area/template_noop) +"aP" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/turf/closed/wall/r_wall, +/area/template_noop) +"aU" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/template_noop) +"aY" = ( +/obj/structure/closet/secure_closet/brig{ + name = "Prisoner Locker" + }, +/obj/effect/spawner/random/contraband, +/obj/effect/spawner/random/contraband, +/obj/machinery/light/dim/directional/west, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/siding/dark_red{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"bf" = ( +/turf/template_noop, +/area/template_noop) +"bh" = ( +/obj/structure/guncase/shotgun, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/siding/dark_red{ + dir = 8 + }, +/obj/item/gun/ballistic/shotgun/riot, +/obj/item/gun/ballistic/shotgun/riot, +/turf/open/floor/iron/dark, +/area/template_noop) +"bO" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"ds" = ( +/obj/structure/closet/secure_closet/contraband/armory, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/siding/dark_red{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"es" = ( +/obj/effect/spawner/random/trash/food_packaging{ + pixel_x = 8 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"fA" = ( +/turf/closed/wall/r_wall, +/area/template_noop) +"fC" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"gy" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/chair/sofa/right/maroon{ + dir = 1 + }, +/obj/machinery/computer/security/telescreen/entertainment/directional/south, +/turf/open/floor/iron/dark, +/area/template_noop) +"hj" = ( +/obj/structure/closet/secure_closet/brig{ + name = "Prisoner Locker" + }, +/obj/effect/spawner/random/contraband, +/obj/effect/spawner/random/contraband, +/obj/effect/spawner/random/contraband, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"iP" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/sign/warning/yes_smoking/circle/directional/south, +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/dark, +/area/template_noop) +"lG" = ( +/obj/structure/chair/stool/directional/west, +/turf/open/floor/iron/dark, +/area/template_noop) +"lW" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/right/directional/north{ + name = "Security Desk"; + dir = 4 + }, +/obj/item/paper_bin{ + pixel_y = 3 + }, +/obj/effect/spawner/random/bureaucracy/pen, +/obj/effect/spawner/random/bureaucracy/pen{ + pixel_x = 2 + }, +/turf/open/floor/plating, +/area/template_noop) +"ma" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/structure/filingcabinet, +/turf/open/floor/iron/dark, +/area/template_noop) +"mI" = ( +/obj/structure/closet/secure_closet/brig{ + name = "Prisoner Locker" + }, +/obj/effect/spawner/random/contraband, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"mQ" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/obj/effect/spawner/random/bureaucracy/briefcase{ + pixel_y = 10; + pixel_x = -2 + }, +/obj/item/radio{ + desc = "An old handheld radio. Tuned to the outpost's hit radio station."; + frequency = 1475; + icon_state = "radio"; + name = "old radio" + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"nh" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"nu" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"nB" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/chair/stool/bar/directional/east, +/turf/open/floor/iron/dark, +/area/template_noop) +"nR" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"oJ" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/spawner/random/trash/bin, +/turf/open/floor/iron/dark, +/area/template_noop) +"pz" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"sV" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/modular_computer/preset/cargochat/security{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"vv" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/table/reinforced, +/obj/structure/sign/poster/contraband/donut_corp/directional/south, +/obj/item/storage/fancy/donut_box, +/turf/open/floor/iron/dark, +/area/template_noop) +"vJ" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Security Outpost" + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"ys" = ( +/obj/structure/sign/departments/security/directional/east, +/turf/template_noop, +/area/template_noop) +"zf" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"zy" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"Bn" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/turf/closed/wall/r_wall, +/area/template_noop) +"BA" = ( +/obj/structure/sign/departments/security/directional/south, +/turf/template_noop, +/area/template_noop) +"Dj" = ( +/obj/effect/spawner/random/trash/crushed_can{ + pixel_y = 4; + pixel_x = -11 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"DJ" = ( +/obj/machinery/door/window/brigdoor/security/cell/left/directional/south{ + id = "cell-2"; + name = "Holding Cell" + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"Ee" = ( +/turf/open/floor/iron/dark, +/area/template_noop) +"FR" = ( +/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/template_noop) +"GC" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"Hl" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/structure/chair/stool/directional/east, +/turf/open/floor/iron/dark, +/area/template_noop) +"IF" = ( +/obj/effect/turf_decal/trimline/red/filled/end{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"LN" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"MP" = ( +/obj/structure/chair/stool/bar/directional/east{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"NS" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/chair/sofa/left/maroon{ + dir = 1 + }, +/obj/machinery/light/dim/directional/south, +/turf/open/floor/iron/dark, +/area/template_noop) +"QW" = ( +/obj/structure/guncase/wt550, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/siding/dark_red{ + dir = 8 + }, +/obj/item/gun/ballistic/automatic/wt550, +/turf/open/floor/iron/dark, +/area/template_noop) +"TA" = ( +/obj/effect/spawner/random/trash/graffiti, +/obj/machinery/light/dim/directional/north, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"TI" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"TT" = ( +/obj/structure/chair/stool/bar/directional/east{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"Uc" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_y = 3 + }, +/obj/effect/spawner/random/bureaucracy/pen, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"Vo" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/modular_computer/laptop/preset/civilian, +/obj/machinery/coffeemaker, +/obj/structure/sign/poster/contraband/fun_police/directional/north, +/turf/open/floor/iron/dark, +/area/template_noop) +"Wn" = ( +/obj/effect/mapping_helpers/airlock/access/any/security/brig, +/turf/open/floor/iron/dark, +/area/template_noop) +"WI" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/structure/table/reinforced, +/obj/machinery/coffeemaker, +/turf/open/floor/iron/dark, +/area/template_noop) +"XZ" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/structure/filingcabinet, +/turf/open/floor/iron/dark, +/area/template_noop) +"ZU" = ( +/obj/structure/table, +/obj/item/flashlight/lamp, +/turf/open/floor/iron/dark/textured, +/area/template_noop) + +(1,1,1) = {" +bf +bf +bf +bf +ys +bf +ys +bf +bf +bf +bO +"} +(2,1,1) = {" +bf +fA +fA +fA +fA +vJ +fA +fA +fA +fA +bf +"} +(3,1,1) = {" +bf +fA +ZU +zy +fC +TI +ma +sV +XZ +fA +bf +"} +(4,1,1) = {" +bf +fA +TA +nR +DJ +LN +Ee +lG +oJ +fA +bf +"} +(5,1,1) = {" +bf +fA +Uc +nh +nu +nB +Ee +Ee +NS +fA +bf +"} +(6,1,1) = {" +bf +fA +fA +aP +Bn +Vo +mQ +Ee +gy +fA +bf +"} +(7,1,1) = {" +BA +fA +mI +hj +aY +TT +MP +es +iP +fA +bf +"} +(8,1,1) = {" +bf +Wn +IF +FR +FR +pz +Ee +Dj +vv +fA +bf +"} +(9,1,1) = {" +BA +fA +QW +bh +ds +GC +zf +Hl +WI +fA +bf +"} +(10,1,1) = {" +bf +fA +fA +aU +aU +fA +aJ +lW +fA +fA +bf +"} +(11,1,1) = {" +bf +bf +bf +bf +bf +bf +bf +bf +bf +bf +bf +"} diff --git a/_maps/modular_generic/station_l_webs.dmm b/_maps/modular_generic/station_l_webs.dmm new file mode 100644 index 00000000000000..4f2470d71b5b14 --- /dev/null +++ b/_maps/modular_generic/station_l_webs.dmm @@ -0,0 +1,583 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"bq" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate, +/obj/effect/spawner/random/bureaucracy, +/obj/effect/spawner/random/medical/supplies, +/obj/structure/spider/stickyweb{ + plane = -7 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"cP" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/dark/side, +/area/template_noop) +"dy" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 10 + }, +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate, +/obj/effect/spawner/random/bureaucracy, +/obj/structure/spider/stickyweb{ + plane = -7 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"es" = ( +/obj/structure/railing, +/obj/effect/turf_decal/siding/thinplating_new, +/obj/structure/chair/sofa/bench{ + dir = 1; + pixel_y = 8 + }, +/turf/open/floor/plating, +/area/template_noop) +"fN" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"fS" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron/dark, +/area/template_noop) +"gu" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/template_noop) +"gW" = ( +/turf/closed/wall, +/area/template_noop) +"hL" = ( +/obj/structure/broken_flooring/singular/directional/north, +/obj/structure/sign/poster/contraband/random/directional/north, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = -6; + pixel_y = 13 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/template_noop) +"ik" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 1 + }, +/obj/structure/flora/bush/jungle/b/style_random, +/obj/effect/spawner/random/trash/bin, +/obj/item/fireaxe, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/template_noop) +"iB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/tile/iron/dark, +/turf/open/floor/iron/dark, +/area/template_noop) +"jd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/poster/contraband/random/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/template_noop) +"kF" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/iron/dark, +/area/template_noop) +"mK" = ( +/turf/template_noop, +/area/template_noop) +"qH" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"qU" = ( +/obj/structure/barricade/wooden/crude, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/template_noop) +"rS" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/structure/broken_flooring/side/directional/west, +/obj/structure/barricade/sandbags{ + color = "#737373" + }, +/turf/open/floor/plating, +/area/template_noop) +"sc" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/structure/flora/bush/jungle/c/style_random, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"uC" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/decal/cleanable/dirt, +/obj/structure/filingcabinet, +/turf/open/floor/iron/dark/side, +/area/template_noop) +"vI" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 6 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 1 + }, +/obj/structure/railing/corner/end{ + dir = 8 + }, +/obj/structure/barricade/sandbags{ + color = "#737373" + }, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/template_noop) +"vX" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/structure/broken_flooring/side/directional/north, +/obj/structure/sign/poster/contraband/random/directional/south, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = 9; + pixel_y = 13 + }, +/turf/open/floor/plating, +/area/template_noop) +"wA" = ( +/turf/open/floor/iron/stairs/medium{ + dir = 8 + }, +/area/template_noop) +"xD" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"xF" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/random/directional/west, +/obj/machinery/light/warm/dim/directional/west, +/obj/structure/chair/stool/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/template_noop) +"xW" = ( +/obj/effect/spawner/random/trash/mess, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/warm/dim/directional/north, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/dark, +/area/template_noop) +"yf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate, +/obj/structure/spider/stickyweb{ + plane = -7 + }, +/obj/item/multitool, +/turf/open/floor/iron/dark, +/area/template_noop) +"zM" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/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/item/stack/tile/iron/dark, +/turf/open/floor/plating, +/area/template_noop) +"Bi" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/machinery/light/warm/dim/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/template_noop) +"BB" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner, +/obj/structure/rack, +/obj/effect/spawner/random/engineering/toolbox, +/turf/open/floor/iron/dark/corner, +/area/template_noop) +"Cd" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner, +/obj/structure/barricade/sandbags{ + color = "#737373" + }, +/turf/open/floor/iron/dark/corner, +/area/template_noop) +"Dp" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 8 + }, +/obj/structure/barricade/sandbags{ + color = "#737373" + }, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/template_noop) +"Ec" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/structure/table, +/obj/effect/spawner/random/contraband/armory, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/template_noop) +"Gf" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/broken_flooring/side/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/bush/jungle/b/style_2, +/turf/open/floor/plating, +/area/template_noop) +"Gy" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"GW" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 10 + }, +/obj/structure/broken_flooring/singular, +/turf/open/floor/plating, +/area/template_noop) +"If" = ( +/obj/structure/flora/bush/jungle/b/style_2, +/obj/structure/barricade/sandbags{ + color = "#737373" + }, +/turf/open/floor/iron, +/area/template_noop) +"KL" = ( +/obj/structure/barricade/wooden/crude, +/obj/machinery/door/airlock/maintenance_hatch, +/turf/open/floor/plating, +/area/template_noop) +"Lp" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/template_noop) +"Mi" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron/dark, +/area/template_noop) +"Nr" = ( +/obj/effect/decal/cleanable/glass, +/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/template_noop) +"NW" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/bush/jungle/c/style_2, +/obj/effect/spawner/random/engineering/tank, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/template_noop) +"PB" = ( +/obj/structure/flora/bush/jungle/b/style_2, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/iron/dark, +/area/template_noop) +"Ql" = ( +/obj/structure/broken_flooring/pile/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/plating, +/area/template_noop) +"RW" = ( +/turf/open/floor/iron/stairs/medium{ + dir = 1 + }, +/area/template_noop) +"RY" = ( +/obj/structure/railing, +/obj/effect/turf_decal/siding/thinplating_new, +/obj/structure/chair/sofa/bench/left{ + dir = 1; + pixel_y = 8 + }, +/turf/open/floor/plating, +/area/template_noop) +"Te" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 6 + }, +/obj/structure/chair/sofa/bench/right{ + dir = 1; + pixel_y = 8 + }, +/turf/open/floor/plating, +/area/template_noop) +"Tf" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/decal/cleanable/glass, +/obj/structure/guncase/wt550, +/obj/structure/fireaxecabinet/empty/directional/south, +/obj/item/gun/ballistic/automatic/wt550, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/template_noop) +"Uf" = ( +/obj/structure/railing, +/obj/effect/turf_decal/siding/thinplating_new, +/obj/structure/flora/bush/jungle/c/style_2, +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/template_noop) +"UW" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 8 + }, +/obj/structure/sign/clock/directional/east, +/obj/effect/spawner/random/bureaucracy/folder, +/obj/effect/spawner/random/bureaucracy/pen, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/template_noop) +"Vf" = ( +/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, +/obj/item/stack/tile/iron/dark, +/turf/open/floor/plating, +/area/template_noop) +"VU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/template_noop) +"ZE" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/emptysandbag, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/template_noop) + +(1,1,1) = {" +mK +mK +mK +mK +mK +mK +mK +mK +mK +mK +qH +"} +(2,1,1) = {" +mK +gW +gW +gW +gW +qU +gW +gW +gW +gW +mK +"} +(3,1,1) = {" +mK +gW +gu +jd +Ql +Vf +BB +xF +NW +gW +mK +"} +(4,1,1) = {" +mK +gW +PB +Vf +RY +wA +cP +xD +Gf +gW +mK +"} +(5,1,1) = {" +mK +gW +hL +Nr +es +Cd +vI +fN +Ec +gW +mK +"} +(6,1,1) = {" +mK +gW +xW +zM +Te +rS +xD +sc +Tf +gW +mK +"} +(7,1,1) = {" +mK +KL +VU +RW +If +Dp +GW +Gy +ZE +gW +mK +"} +(8,1,1) = {" +mK +gW +iB +bq +Mi +dy +uC +fN +vX +gW +mK +"} +(9,1,1) = {" +mK +gW +kF +fS +yf +Uf +UW +Bi +ik +gW +mK +"} +(10,1,1) = {" +mK +gW +gW +Lp +Lp +Lp +gW +gW +gW +gW +mK +"} +(11,1,1) = {" +mK +mK +mK +mK +mK +mK +mK +mK +mK +mK +mK +"} diff --git a/_maps/modular_generic/station_m_arcade.dmm b/_maps/modular_generic/station_m_arcade.dmm new file mode 100644 index 00000000000000..2891605f7806ab --- /dev/null +++ b/_maps/modular_generic/station_m_arcade.dmm @@ -0,0 +1,297 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/closed/wall, +/area/template_noop) +"b" = ( +/obj/structure/chair/stool/bar/directional/north{ + pixel_y = 6 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner, +/obj/effect/decal/cleanable/dirt, +/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/template_noop) +"d" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron/dark, +/area/template_noop) +"e" = ( +/obj/machinery/light/small/directional/west, +/turf/template_noop, +/area/template_noop) +"g" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/melee/baseball_bat/ablative{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"l" = ( +/obj/machinery/door/airlock, +/turf/open/floor/iron/dark, +/area/template_noop) +"m" = ( +/obj/effect/decal/cleanable/wrapping/pinata, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"n" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"o" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/template_noop) +"q" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/rack, +/obj/item/melee/baseball_bat{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"r" = ( +/obj/effect/spawner/random/structure/table_fancy, +/obj/effect/spawner/random/food_or_drink/dinner{ + pixel_y = 5 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"v" = ( +/obj/structure/window/spawner/directional/east, +/obj/item/kirbyplants/random, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/iron/dark, +/area/template_noop) +"y" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/template_noop) +"A" = ( +/obj/effect/spawner/random/structure/crate, +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/iron/dark, +/area/template_noop) +"B" = ( +/obj/effect/spawner/random/food_or_drink, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/template_noop) +"C" = ( +/obj/machinery/light/small/directional/east, +/turf/template_noop, +/area/template_noop) +"D" = ( +/obj/structure/chair/stool/bar/directional/north{ + pixel_y = 6 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 8 + }, +/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/template_noop) +"F" = ( +/obj/effect/spawner/random/food_or_drink, +/obj/effect/decal/cleanable/wrapping/pinata, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/iron/dark, +/area/template_noop) +"J" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/structure/railing, +/turf/open/floor/iron/dark, +/area/template_noop) +"K" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/structure/railing, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/melee/baseball_bat/homerun, +/turf/open/floor/iron/dark, +/area/template_noop) +"L" = ( +/turf/open/floor/iron/dark/herringbone, +/area/template_noop) +"M" = ( +/obj/effect/spawner/random/entertainment/arcade, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/iron/dark, +/area/template_noop) +"N" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 1 + }, +/obj/effect/spawner/random/food_or_drink, +/turf/open/floor/iron/dark, +/area/template_noop) +"O" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/structure/rack, +/obj/item/pinata{ + pixel_y = 4 + }, +/obj/item/pinata/syndie, +/turf/open/floor/iron/dark, +/area/template_noop) +"S" = ( +/obj/effect/spawner/random/entertainment/arcade, +/turf/open/floor/iron/dark, +/area/template_noop) +"T" = ( +/turf/template_noop, +/area/template_noop) +"U" = ( +/obj/structure/pinata, +/obj/effect/turf_decal/box/white, +/turf/open/floor/iron/dark, +/area/template_noop) +"V" = ( +/obj/effect/decal/cleanable/wrapping/pinata, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/template_noop) +"W" = ( +/obj/structure/window/spawner/directional/west, +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/template_noop) +"X" = ( +/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/template_noop) +"Y" = ( +/obj/structure/hedge, +/obj/machinery/digital_clock/directional/north, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/template_noop) + +(1,1,1) = {" +T +T +C +T +T +T +T +T +n +"} +(2,1,1) = {" +T +a +a +y +l +y +a +a +T +"} +(3,1,1) = {" +T +a +v +K +L +d +F +a +T +"} +(4,1,1) = {" +T +a +S +D +o +N +q +y +T +"} +(5,1,1) = {" +T +a +Y +X +r +U +V +a +T +"} +(6,1,1) = {" +T +a +M +b +g +m +B +y +T +"} +(7,1,1) = {" +T +a +W +J +L +O +A +a +T +"} +(8,1,1) = {" +T +a +a +y +l +y +a +a +T +"} +(9,1,1) = {" +T +T +T +T +T +T +e +T +T +"} diff --git a/_maps/modular_generic/station_m_breakroom.dmm b/_maps/modular_generic/station_m_breakroom.dmm new file mode 100644 index 00000000000000..15580aaa6fd9c7 --- /dev/null +++ b/_maps/modular_generic/station_m_breakroom.dmm @@ -0,0 +1,220 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"b" = ( +/obj/machinery/light/small/blacklight/directional/west, +/turf/open/floor/iron, +/area/template_noop) +"c" = ( +/obj/structure/table, +/obj/effect/spawner/random/engineering/toolbox, +/turf/open/floor/iron, +/area/template_noop) +"i" = ( +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"j" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"o" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"r" = ( +/turf/closed/wall, +/area/template_noop) +"w" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"z" = ( +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"A" = ( +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"B" = ( +/obj/machinery/light/small/blacklight/directional/north, +/turf/template_noop, +/area/template_noop) +"C" = ( +/obj/effect/spawner/random/trash/bin, +/obj/machinery/light/small/blacklight/directional/north, +/turf/open/floor/iron, +/area/template_noop) +"G" = ( +/obj/structure/sign/poster/random/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"I" = ( +/obj/structure/table, +/turf/open/floor/iron, +/area/template_noop) +"M" = ( +/obj/machinery/light/small/blacklight/directional/south, +/turf/template_noop, +/area/template_noop) +"N" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/template_noop) +"O" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"P" = ( +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 1 + }, +/turf/open/floor/iron, +/area/template_noop) +"Q" = ( +/obj/effect/spawner/random/structure/crate, +/obj/machinery/light/small/blacklight/directional/north, +/turf/open/floor/iron, +/area/template_noop) +"R" = ( +/turf/open/floor/iron, +/area/template_noop) +"S" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"T" = ( +/obj/structure/sign/poster/random/directional/east, +/obj/machinery/light/small/blacklight/directional/east, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"U" = ( +/obj/effect/spawner/random/trash/caution_sign, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"V" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/template_noop) +"W" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron, +/area/template_noop) +"Y" = ( +/obj/machinery/door/airlock, +/turf/open/floor/plating, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +w +"} +(2,1,1) = {" +a +r +r +r +N +r +r +r +a +"} +(3,1,1) = {" +a +r +C +I +c +b +P +r +a +"} +(4,1,1) = {" +M +r +G +R +S +S +P +r +a +"} +(5,1,1) = {" +a +Y +j +V +S +S +S +Y +a +"} +(6,1,1) = {" +a +r +W +o +A +i +O +r +B +"} +(7,1,1) = {" +a +r +Q +o +z +T +U +r +a +"} +(8,1,1) = {" +a +r +r +r +N +r +r +r +a +"} +(9,1,1) = {" +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/modular_generic/station_m_evidence.dmm b/_maps/modular_generic/station_m_evidence.dmm new file mode 100644 index 00000000000000..9d1c5a8a5be865 --- /dev/null +++ b/_maps/modular_generic/station_m_evidence.dmm @@ -0,0 +1,281 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"d" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/cobweb, +/obj/structure/secure_safe/directional/north{ + name = "evidence safe" + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"h" = ( +/obj/effect/turf_decal/tile/dark/opposingcorners, +/obj/effect/turf_decal/siding/red{ + dir = 1 + }, +/obj/structure/noticeboard/directional/west, +/turf/open/floor/iron/dark, +/area/template_noop) +"j" = ( +/obj/structure/closet{ + name = "evidence closet" + }, +/obj/effect/spawner/random/engineering/tool_advanced, +/obj/effect/spawner/random/engineering/material_cheap, +/obj/effect/spawner/random/mod/maint, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"m" = ( +/turf/closed/wall, +/area/template_noop) +"n" = ( +/obj/effect/turf_decal/tile/dark/opposingcorners, +/turf/open/floor/iron/dark, +/area/template_noop) +"q" = ( +/obj/structure/closet/secure_closet/evidence, +/obj/effect/spawner/random/sakhno/ammo, +/obj/effect/spawner/random/medical/injector, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"r" = ( +/obj/structure/closet{ + name = "evidence closet" + }, +/obj/effect/turf_decal/siding/red{ + dir = 8 + }, +/obj/effect/spawner/random/maintenance/four, +/obj/effect/spawner/random/contraband/cannabis, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"s" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/light/small/red/directional/west, +/turf/open/floor/iron/dark, +/area/template_noop) +"v" = ( +/obj/effect/spawner/random/structure/crate_abandoned{ + spawn_loot_chance = 50 + }, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"x" = ( +/obj/effect/turf_decal/siding/red{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/decoration/statue{ + spawn_loot_chance = 35 + }, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"z" = ( +/obj/machinery/door/window/brigdoor{ + name = "Secure Evidence Lockup"; + req_one_access = list("armory","detective") + }, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/template_noop) +"A" = ( +/obj/machinery/door/airlock/security{ + name = "Evidence Lockup" + }, +/obj/effect/turf_decal/tile/dark/opposingcorners, +/turf/open/floor/iron/dark, +/area/template_noop) +"C" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/template_noop) +"D" = ( +/obj/effect/turf_decal/tile/dark/opposingcorners, +/obj/effect/turf_decal/siding/red{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"F" = ( +/obj/structure/closet/secure_closet/evidence, +/obj/effect/spawner/random/contraband/narcotics, +/obj/effect/spawner/random/contraband/permabrig_weapon, +/obj/effect/spawner/random/contraband/permabrig_weapon, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/entertainment/money_large, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"G" = ( +/turf/closed/wall/r_wall, +/area/template_noop) +"J" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"K" = ( +/obj/effect/spawner/random/structure/crate{ + spawn_loot_chance = 80 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"L" = ( +/obj/effect/turf_decal/tile/dark/opposingcorners, +/obj/machinery/light/directional/east, +/obj/structure/table, +/obj/item/stack/package_wrap, +/obj/item/hand_labeler, +/turf/open/floor/iron/dark, +/area/template_noop) +"R" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"T" = ( +/obj/effect/turf_decal/tile/dark/opposingcorners, +/obj/effect/turf_decal/siding/red/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"U" = ( +/obj/structure/closet{ + name = "evidence closet" + }, +/obj/effect/spawner/random/maintenance/three, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/spawner/random/medical/surgery_tool, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"V" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"X" = ( +/obj/effect/turf_decal/tile/dark/opposingcorners, +/obj/effect/turf_decal/siding/red{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"Z" = ( +/obj/structure/closet{ + name = "evidence closet" + }, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/spawner/random/engineering/toolbox, +/obj/effect/decal/cleanable/dirt, +/obj/item/poster/random_contraband, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +R +"} +(2,1,1) = {" +a +G +G +G +G +m +m +m +a +"} +(3,1,1) = {" +a +G +d +s +z +h +K +m +a +"} +(4,1,1) = {" +a +G +F +q +J +X +j +m +a +"} +(5,1,1) = {" +a +m +x +r +D +T +n +m +a +"} +(6,1,1) = {" +a +A +n +n +n +n +n +A +a +"} +(7,1,1) = {" +a +m +U +v +L +V +Z +m +a +"} +(8,1,1) = {" +a +m +C +C +m +C +C +m +a +"} +(9,1,1) = {" +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/modular_generic/station_m_kitchen.dmm b/_maps/modular_generic/station_m_kitchen.dmm new file mode 100644 index 00000000000000..4f29d4193ddbd0 --- /dev/null +++ b/_maps/modular_generic/station_m_kitchen.dmm @@ -0,0 +1,289 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/template_noop) +"b" = ( +/obj/effect/decal/remains/human, +/obj/item/clothing/head/utility/chefhat{ + pixel_y = 6; + pixel_x = 1 + }, +/obj/item/clothing/suit/apron/chef{ + pixel_y = -15; + pixel_x = -6 + }, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"d" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/food_or_drink/salad, +/obj/effect/spawner/random/trash/bacteria, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/iron/white/side{ + dir = 1 + }, +/area/template_noop) +"e" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Kitchen" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"f" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"g" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/food_or_drink/pizzaparty, +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/white/side{ + dir = 1 + }, +/area/template_noop) +"k" = ( +/turf/closed/wall, +/area/template_noop) +"l" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/three_course_meal, +/obj/item/knife/kitchen, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"m" = ( +/obj/machinery/computer/arcade/amputation, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/large, +/area/template_noop) +"n" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/large, +/area/template_noop) +"o" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/iron, +/area/template_noop) +"p" = ( +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"q" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/food_or_drink/donuts, +/obj/effect/turf_decal/siding/wood, +/obj/effect/spawner/random/trash/bacteria, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/white/side{ + dir = 1 + }, +/area/template_noop) +"s" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Cafeteria" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/iron, +/area/template_noop) +"v" = ( +/obj/item/chair/stool/bar, +/obj/effect/spawner/random/trash/bacteria, +/turf/open/floor/wood/large, +/area/template_noop) +"w" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"y" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Cafeteria" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/template_noop) +"z" = ( +/turf/open/floor/wood/large, +/area/template_noop) +"A" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"B" = ( +/obj/item/food/deadmouse/moldy, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"D" = ( +/obj/machinery/light/small/directional/north, +/turf/template_noop, +/area/template_noop) +"I" = ( +/obj/structure/closet/secure_closet/freezer/kitchen/all_access, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/item/food/fishmeat/carp, +/obj/item/food/meat/slab/gorilla, +/obj/item/food/grown/tomato, +/obj/item/food/grown/corn, +/obj/effect/spawner/random/trash/bacteria, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"K" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/wood/large, +/area/template_noop) +"L" = ( +/obj/structure/chair/stool/bar/directional/north, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/wood/large, +/area/template_noop) +"M" = ( +/obj/structure/chair/stool/bar/directional/north, +/turf/open/floor/wood/large, +/area/template_noop) +"R" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/food_or_drink/dinner, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/iron/white/side{ + dir = 1 + }, +/area/template_noop) +"S" = ( +/obj/machinery/griddle, +/obj/item/food/meat/steak/chicken{ + pixel_y = 6; + pixel_x = -6 + }, +/obj/item/food/meat/steak/plain{ + pixel_x = 3 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"U" = ( +/turf/template_noop, +/area/template_noop) +"X" = ( +/obj/machinery/oven/range, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"Y" = ( +/obj/structure/chair/stool/bar/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/large, +/area/template_noop) + +(1,1,1) = {" +U +U +U +U +U +U +U +U +f +"} +(2,1,1) = {" +U +k +a +a +k +a +a +k +D +"} +(3,1,1) = {" +U +k +l +I +q +Y +n +y +U +"} +(4,1,1) = {" +U +k +w +p +R +L +z +o +U +"} +(5,1,1) = {" +U +e +b +A +d +M +K +a +U +"} +(6,1,1) = {" +U +k +B +w +g +v +n +s +U +"} +(7,1,1) = {" +U +k +X +S +k +m +n +o +U +"} +(8,1,1) = {" +U +k +k +k +k +a +a +k +D +"} +(9,1,1) = {" +U +U +U +U +U +U +U +U +U +"} diff --git a/_maps/modular_generic/station_m_shipping.dmm b/_maps/modular_generic/station_m_shipping.dmm new file mode 100644 index 00000000000000..0fbfc3f7ddd1d3 --- /dev/null +++ b/_maps/modular_generic/station_m_shipping.dmm @@ -0,0 +1,309 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/machinery/door/airlock/multi_tile{ + dir = 8; + name = "Cargo Hold" + }, +/obj/effect/decal/cleanable/oil/streak, +/turf/open/floor/iron/smooth, +/area/template_noop) +"b" = ( +/obj/effect/turf_decal/bot, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/template_noop) +"c" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth, +/area/template_noop) +"d" = ( +/obj/machinery/light/small/directional/north, +/turf/template_noop, +/area/template_noop) +"e" = ( +/obj/machinery/light/broken/directional/north, +/obj/effect/turf_decal/bot, +/turf/open/floor/plating, +/area/template_noop) +"f" = ( +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/obj/structure/table, +/obj/item/food/ready_donk/donkhiladas{ + pixel_y = 19 + }, +/turf/open/floor/iron/smooth, +/area/template_noop) +"g" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"h" = ( +/turf/template_noop, +/area/template_noop) +"j" = ( +/obj/structure/rack, +/obj/item/paper_bin/carbon, +/obj/item/stamp/denied{ + pixel_y = 7; + pixel_x = 9 + }, +/obj/item/stamp/granted{ + pixel_y = 2; + pixel_x = -9 + }, +/obj/item/folder/yellow{ + name = "Order Collection" + }, +/obj/item/pen, +/turf/open/floor/iron, +/area/template_noop) +"l" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/template_noop) +"o" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/shipping_container, +/turf/open/floor/plating, +/area/template_noop) +"p" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth, +/area/template_noop) +"q" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/smooth, +/area/template_noop) +"r" = ( +/obj/effect/turf_decal/bot, +/turf/open/floor/plating, +/area/template_noop) +"s" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/poster/official/here_for_your_safety/directional/north, +/turf/open/floor/plating, +/area/template_noop) +"t" = ( +/turf/closed/wall, +/area/template_noop) +"u" = ( +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/template_noop) +"w" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth, +/area/template_noop) +"x" = ( +/obj/structure/window/fulltile, +/turf/open/floor/plating, +/area/template_noop) +"z" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/turf/open/floor/plating, +/area/template_noop) +"B" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/oil/streak{ + pixel_x = 1 + }, +/turf/open/floor/iron/smooth, +/area/template_noop) +"H" = ( +/obj/structure/closet{ + name = "Equipment Locker" + }, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/head/utility/hardhat{ + pixel_y = 11; + pixel_x = 1 + }, +/obj/item/clothing/gloves/cargo_gauntlet, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"J" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Hold" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/template_noop) +"K" = ( +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/effect/decal/cleanable/oil/streak, +/turf/open/floor/iron/smooth, +/area/template_noop) +"L" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/smooth, +/area/template_noop) +"O" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/effect/turf_decal/stripes, +/turf/open/floor/iron/smooth, +/area/template_noop) +"V" = ( +/obj/machinery/light/directional/east, +/obj/structure/sign/poster/official/moth_hardhat/directional/east, +/obj/item/clothing/head/utility/hardhat{ + pixel_y = 11; + pixel_x = 1 + }, +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/iron, +/area/template_noop) +"X" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/effect/turf_decal/stripes, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/broken/directional/west, +/turf/open/floor/iron/smooth, +/area/template_noop) +"Z" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/template_noop) + +(1,1,1) = {" +h +h +h +h +h +h +h +h +g +"} +(2,1,1) = {" +h +t +t +t +t +t +t +t +h +"} +(3,1,1) = {" +h +t +b +X +r +o +l +x +h +"} +(4,1,1) = {" +h +t +e +O +r +r +c +J +h +"} +(5,1,1) = {" +h +t +s +O +z +z +L +t +d +"} +(6,1,1) = {" +h +t +f +B +u +K +p +t +h +"} +(7,1,1) = {" +h +t +j +V +w +q +H +t +h +"} +(8,1,1) = {" +h +t +t +t +Z +a +t +t +h +"} +(9,1,1) = {" +h +h +h +h +h +h +h +h +h +"} diff --git a/_maps/modular_generic/station_m_showroom.dmm b/_maps/modular_generic/station_m_showroom.dmm new file mode 100644 index 00000000000000..dc073e9465630b --- /dev/null +++ b/_maps/modular_generic/station_m_showroom.dmm @@ -0,0 +1,322 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/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 = 6 + }, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/template_noop) +"b" = ( +/obj/structure/chair/sofa/bench/tram/left{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron, +/area/template_noop) +"c" = ( +/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/template_noop) +"d" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"i" = ( +/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/gibs/down, +/turf/open/floor/plating, +/area/template_noop) +"j" = ( +/obj/effect/decal/cleanable/glass, +/obj/effect/spawner/random/trash/box, +/turf/open/floor/iron/dark/side, +/area/template_noop) +"k" = ( +/obj/effect/decal/cleanable/glass, +/obj/item/shard, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/iron, +/area/template_noop) +"l" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/moisture, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/template_noop) +"m" = ( +/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/template_noop) +"n" = ( +/obj/machinery/light/small/directional/west, +/turf/template_noop, +/area/template_noop) +"o" = ( +/obj/structure/window/spawner/directional/north, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/broken_flooring/pile/directional/west, +/turf/open/floor/iron, +/area/template_noop) +"q" = ( +/obj/structure/window/spawner/directional/north, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/template_noop) +"u" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = -6; + pixel_y = 5 + }, +/turf/open/floor/iron/dark/corner, +/area/template_noop) +"v" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"w" = ( +/obj/structure/chair/sofa/bench/tram/right{ + dir = 1 + }, +/obj/structure/sign/poster/random/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/template_noop) +"y" = ( +/obj/effect/spawner/random/decoration/showcase, +/obj/structure/sign/poster/random/directional/north, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark, +/area/template_noop) +"z" = ( +/turf/template_noop, +/area/template_noop) +"A" = ( +/obj/machinery/door/airlock/command{ + name = "Corporate Showroom" + }, +/turf/open/floor/iron, +/area/template_noop) +"B" = ( +/obj/structure/sign/poster/random/directional/west, +/obj/structure/broken_flooring/corner/directional/west, +/obj/effect/spawner/random/trash/cigbutt, +/obj/structure/railing, +/turf/open/floor/plating, +/area/template_noop) +"C" = ( +/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 = 4 + }, +/turf/open/floor/plating, +/area/template_noop) +"D" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/broken_flooring/pile/directional/east, +/turf/open/floor/plating, +/area/template_noop) +"E" = ( +/obj/item/shard, +/obj/effect/decal/cleanable/glass, +/obj/structure/table_frame, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/turf/open/floor/iron, +/area/template_noop) +"H" = ( +/obj/structure/sign/poster/random/directional/north, +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark, +/area/template_noop) +"K" = ( +/turf/closed/wall, +/area/template_noop) +"L" = ( +/obj/effect/decal/cleanable/plastic, +/obj/structure/rack, +/obj/effect/turf_decal/box, +/obj/effect/spawner/random/exotic/antag_gear, +/obj/machinery/light/directional/north, +/obj/structure/sign/flag/terragov/directional/north, +/turf/open/floor/iron/dark, +/area/template_noop) +"N" = ( +/obj/structure/chair/stool/directional/west{ + pixel_x = 5 + }, +/obj/structure/sign/warning/yes_smoking/circle/directional/east, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/template_noop) +"O" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 1 + }, +/obj/effect/spawner/random/trash/garbage, +/obj/structure/sign/calendar/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing, +/turf/open/floor/iron, +/area/template_noop) +"R" = ( +/obj/effect/spawner/random/trash/bin, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/template_noop) +"T" = ( +/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/command{ + name = "Corporate Showroom" + }, +/turf/open/floor/iron, +/area/template_noop) +"V" = ( +/obj/structure/window/spawner/directional/west, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/item/kirbyplants/random/dead, +/obj/effect/decal/remains/human, +/turf/open/floor/iron, +/area/template_noop) +"Y" = ( +/obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/iron, +/area/template_noop) + +(1,1,1) = {" +z +z +z +z +z +z +z +z +v +"} +(2,1,1) = {" +z +K +K +K +K +T +K +K +z +"} +(3,1,1) = {" +z +K +Y +B +u +c +R +K +z +"} +(4,1,1) = {" +z +K +H +q +j +m +b +K +z +"} +(5,1,1) = {" +z +K +L +k +i +D +w +K +z +"} +(6,1,1) = {" +z +K +y +o +C +l +E +K +z +"} +(7,1,1) = {" +z +K +V +O +a +N +d +K +z +"} +(8,1,1) = {" +z +K +K +K +A +K +K +K +z +"} +(9,1,1) = {" +z +z +z +n +z +z +z +z +z +"} diff --git a/_maps/modular_generic/station_m_shuttle.dmm b/_maps/modular_generic/station_m_shuttle.dmm new file mode 100644 index 00000000000000..4f1a2ebc98dd73 --- /dev/null +++ b/_maps/modular_generic/station_m_shuttle.dmm @@ -0,0 +1,306 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"d" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/template_noop) +"e" = ( +/obj/machinery/computer{ + dir = 8; + name = "shuttle console"; + icon_screen = "shuttle" + }, +/turf/open/floor/iron/white/textured_large, +/area/template_noop) +"f" = ( +/turf/open/floor/plating/rust, +/area/template_noop) +"h" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/ore/gold, +/turf/open/floor/iron/white/textured_edge{ + dir = 1 + }, +/area/template_noop) +"i" = ( +/obj/effect/decal/cleanable/glass/titanium, +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/ore/titanium, +/turf/open/floor/iron/white/textured_large, +/area/template_noop) +"k" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"l" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/broken_flooring/side/directional/north, +/turf/open/floor/plating/rust, +/area/template_noop) +"m" = ( +/obj/structure/grille/broken, +/turf/open/floor/plating, +/area/template_noop) +"n" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron, +/area/template_noop) +"o" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/crowbar/red, +/turf/open/floor/iron/white/textured_large, +/area/template_noop) +"q" = ( +/obj/structure/broken_flooring/corner/directional/east, +/turf/open/floor/plating, +/area/template_noop) +"s" = ( +/obj/effect/turf_decal/trimline/brown, +/obj/effect/turf_decal/trimline/brown/mid_joiner, +/obj/effect/turf_decal/trimline/brown/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/template_noop) +"t" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/template_noop) +"u" = ( +/turf/closed/wall/mineral/titanium, +/area/template_noop) +"v" = ( +/obj/machinery/power/shuttle_engine/heater{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/template_noop) +"x" = ( +/turf/open/floor/iron, +/area/template_noop) +"z" = ( +/obj/structure/table/reinforced, +/obj/item/climbing_hook/emergency, +/obj/item/pickaxe/emergency, +/turf/open/floor/iron/white/textured_large, +/area/template_noop) +"A" = ( +/obj/machinery/door/airlock/shuttle/glass, +/turf/open/floor/iron/white/textured_large, +/area/template_noop) +"C" = ( +/obj/structure/grille, +/obj/item/shard/titanium, +/turf/open/floor/plating, +/area/template_noop) +"G" = ( +/obj/machinery/power/shuttle_engine/propulsion/burst{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/plating, +/area/template_noop) +"H" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/template_noop) +"I" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/obj/effect/mob_spawn/corpse/human/miner, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/white/textured_corner{ + dir = 1 + }, +/area/template_noop) +"K" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/turf/open/floor/plating, +/area/template_noop) +"M" = ( +/obj/effect/turf_decal/tile/brown/half{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_half, +/area/template_noop) +"N" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/ore_box, +/turf/open/floor/plating, +/area/template_noop) +"O" = ( +/turf/open/floor/plating, +/area/template_noop) +"P" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/template_noop) +"T" = ( +/obj/machinery/computer{ + dir = 1; + name = "shuttle console"; + icon_screen = "shuttle" + }, +/obj/structure/broken_flooring/corner/directional/south, +/turf/open/floor/plating, +/area/template_noop) +"V" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/obj/effect/decal/cleanable/plasma, +/turf/open/floor/iron/white/textured_corner{ + dir = 1 + }, +/area/template_noop) +"W" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/generic, +/obj/item/stack/ore/plasma, +/turf/open/floor/iron/white/textured_half{ + dir = 1 + }, +/area/template_noop) +"X" = ( +/obj/structure/table/reinforced, +/obj/item/flashlight/glowstick, +/obj/item/flashlight/glowstick{ + pixel_y = 3; + pixel_x = 3 + }, +/turf/open/floor/iron/white/textured_large, +/area/template_noop) +"Y" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +k +"} +(2,1,1) = {" +a +O +u +G +K +G +u +x +a +"} +(3,1,1) = {" +a +f +P +v +N +v +P +q +a +"} +(4,1,1) = {" +a +T +P +h +W +V +K +f +a +"} +(5,1,1) = {" +a +d +A +M +s +o +C +f +a +"} +(6,1,1) = {" +a +Y +P +I +H +i +m +t +a +"} +(7,1,1) = {" +a +l +P +z +e +X +P +n +a +"} +(8,1,1) = {" +a +n +u +K +K +K +u +f +a +"} +(9,1,1) = {" +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/modular_generic/station_m_tools.dmm b/_maps/modular_generic/station_m_tools.dmm new file mode 100644 index 00000000000000..08c60a632f7b8b --- /dev/null +++ b/_maps/modular_generic/station_m_tools.dmm @@ -0,0 +1,323 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Auxiliary Tool Storage Maintenance" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/template_noop) +"c" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron, +/area/template_noop) +"d" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/anticorner{ + dir = 1 + }, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/corner, +/area/template_noop) +"e" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/rack, +/obj/item/storage/toolbox/emergency{ + pixel_y = 2 + }, +/obj/item/storage/toolbox/electrical{ + pixel_x = 3; + pixel_y = -2 + }, +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/iron/edge{ + dir = 4 + }, +/area/template_noop) +"g" = ( +/turf/closed/wall, +/area/template_noop) +"h" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/edge{ + dir = 4 + }, +/area/template_noop) +"i" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/item/stack/sheet/iron/five, +/obj/item/stack/rods/ten, +/turf/open/floor/iron/edge{ + dir = 1 + }, +/area/template_noop) +"k" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Maintenance Hatch" + }, +/turf/open/floor/plating, +/area/template_noop) +"l" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/template_noop) +"o" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/iron, +/area/template_noop) +"p" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/anticorner, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/corner{ + dir = 1 + }, +/area/template_noop) +"t" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/turf_decal/tile/yellow/anticorner{ + dir = 4 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/corner{ + dir = 8 + }, +/area/template_noop) +"u" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/anticorner{ + dir = 8 + }, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/corner{ + dir = 4 + }, +/area/template_noop) +"w" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"y" = ( +/obj/structure/table, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/engineering/flashlight, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/edge{ + dir = 2 + }, +/area/template_noop) +"z" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Auxiliary Tool Storage" + }, +/turf/open/floor/iron, +/area/template_noop) +"A" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/iron/edge{ + dir = 4 + }, +/area/template_noop) +"E" = ( +/obj/structure/rack, +/obj/item/clothing/gloves/color/fyellow{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/clothing/gloves/color/fyellow{ + pixel_x = -1; + pixel_y = -3 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 8 + }, +/turf/open/floor/iron/edge{ + dir = 8 + }, +/area/template_noop) +"F" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/iron, +/area/template_noop) +"H" = ( +/obj/item/stack/tile/iron{ + pixel_x = 6; + pixel_y = 4 + }, +/turf/open/floor/plating, +/area/template_noop) +"J" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/iron, +/area/template_noop) +"M" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/iron, +/area/template_noop) +"N" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/template_noop) +"O" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron, +/area/template_noop) +"Q" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/template_noop) +"R" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Maintenance Hatch" + }, +/turf/open/floor/plating, +/area/template_noop) +"T" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Auxiliary Tool Storage" + }, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/iron, +/area/template_noop) +"U" = ( +/turf/template_noop, +/area/template_noop) +"V" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/plating, +/area/template_noop) + +(1,1,1) = {" +U +U +U +U +U +U +U +U +w +"} +(2,1,1) = {" +U +g +g +T +l +z +g +g +U +"} +(3,1,1) = {" +U +g +d +F +E +H +u +l +U +"} +(4,1,1) = {" +U +g +i +M +o +c +y +l +U +"} +(5,1,1) = {" +U +g +t +h +A +e +p +l +U +"} +(6,1,1) = {" +U +g +g +a +g +g +g +g +U +"} +(7,1,1) = {" +U +k +J +N +Q +O +V +R +U +"} +(8,1,1) = {" +U +g +g +g +g +g +g +g +U +"} +(9,1,1) = {" +U +U +U +U +U +U +U +U +U +"} diff --git a/_maps/modular_generic/station_s_chasm.dmm b/_maps/modular_generic/station_s_chasm.dmm new file mode 100644 index 00000000000000..2865aca985b45e --- /dev/null +++ b/_maps/modular_generic/station_s_chasm.dmm @@ -0,0 +1,146 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/item/transfer_valve{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/structure/table_frame, +/turf/open/floor/iron, +/area/template_noop) +"b" = ( +/obj/structure/broken_flooring/side/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/cable_coil{ + pixel_x = 5; + pixel_y = -2 + }, +/turf/open/floor/plating, +/area/template_noop) +"d" = ( +/obj/structure/holosign/wetsign, +/turf/open/floor/plating/rust, +/area/template_noop) +"e" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/plasma, +/turf/open/floor/iron, +/area/template_noop) +"f" = ( +/obj/structure/holosign/barrier/engineering, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating/rust, +/area/template_noop) +"j" = ( +/obj/structure/lattice, +/obj/structure/broken_flooring/plating/directional/east, +/turf/open/chasm/true, +/area/template_noop) +"n" = ( +/obj/structure/holosign/barrier/engineering, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/rust, +/area/template_noop) +"o" = ( +/obj/structure/lattice, +/turf/open/chasm/true, +/area/template_noop) +"t" = ( +/obj/structure/broken_flooring/pile/directional/west, +/obj/effect/decal/cleanable/plasma, +/turf/open/floor/plating, +/area/template_noop) +"C" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"D" = ( +/obj/structure/broken_flooring/corner/directional/north, +/obj/item/tank/internals/plasma/empty, +/turf/open/floor/plating, +/area/template_noop) +"E" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/oil/slippery, +/turf/open/floor/iron, +/area/template_noop) +"N" = ( +/turf/open/chasm/true, +/area/template_noop) +"P" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/ash, +/turf/open/floor/iron, +/area/template_noop) +"T" = ( +/obj/structure/lattice, +/obj/structure/broken_flooring/plating/directional/south, +/turf/open/chasm/true, +/area/template_noop) +"V" = ( +/turf/template_noop, +/area/template_noop) + +(1,1,1) = {" +V +V +V +V +V +V +C +"} +(2,1,1) = {" +V +P +N +n +D +e +V +"} +(3,1,1) = {" +V +b +N +N +j +E +V +"} +(4,1,1) = {" +V +N +N +N +o +d +V +"} +(5,1,1) = {" +V +N +T +N +N +N +V +"} +(6,1,1) = {" +V +f +t +N +N +a +V +"} +(7,1,1) = {" +V +V +V +V +V +V +V +"} diff --git a/_maps/modular_generic/station_s_garden.dmm b/_maps/modular_generic/station_s_garden.dmm new file mode 100644 index 00000000000000..6944f7138e81a3 --- /dev/null +++ b/_maps/modular_generic/station_s_garden.dmm @@ -0,0 +1,193 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"f" = ( +/obj/structure/flora/bush/jungle/a/style_2{ + pixel_y = 10; + pixel_x = 4 + }, +/obj/machinery/light/floor, +/turf/open/floor/grass, +/area/template_noop) +"m" = ( +/obj/structure/flora/grass/jungle/a/style_2, +/turf/open/misc/dirt/station, +/area/template_noop) +"n" = ( +/obj/structure/water_source/puddle, +/turf/open/misc/dirt/station, +/area/template_noop) +"o" = ( +/obj/machinery/hydroponics/soil, +/turf/open/floor/grass, +/area/template_noop) +"p" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"u" = ( +/obj/structure/flora/tree/jungle/small{ + pixel_x = -25 + }, +/turf/open/floor/grass, +/area/template_noop) +"B" = ( +/obj/structure/flora/bush/flowers_br/style_2{ + pixel_x = 6 + }, +/obj/item/plant_analyzer{ + pixel_y = -2; + pixel_x = -3 + }, +/turf/open/floor/grass, +/area/template_noop) +"G" = ( +/obj/effect/turf_decal/siding/thinplating_new/terracotta{ + dir = 10 + }, +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/bottle/nutrient/ez{ + pixel_y = 6; + pixel_x = -5 + }, +/obj/item/reagent_containers/spray/pestspray{ + pixel_x = 10; + pixel_y = 5 + }, +/turf/open/floor/iron/terracotta/small, +/area/template_noop) +"H" = ( +/obj/structure/flora/bush/jungle/b/style_2, +/turf/open/misc/dirt/station, +/area/template_noop) +"I" = ( +/turf/closed/wall, +/area/template_noop) +"J" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/template_noop) +"O" = ( +/obj/structure/flora/rock/pile/jungle/style_2{ + pixel_y = -4 + }, +/obj/item/storage/bag/plants/portaseeder{ + pixel_y = 11 + }, +/turf/open/floor/grass, +/area/template_noop) +"P" = ( +/obj/structure/flora/grass/jungle/b/style_4{ + pixel_y = 8 + }, +/turf/open/misc/dirt/station, +/area/template_noop) +"Q" = ( +/obj/structure/flora/bush/flowers_br/style_3{ + pixel_x = 4 + }, +/turf/open/floor/grass, +/area/template_noop) +"R" = ( +/obj/structure/flora/rock/pile/jungle/style_5{ + pixel_y = -3 + }, +/turf/open/floor/grass, +/area/template_noop) +"U" = ( +/obj/item/reagent_containers/cup/bucket/wooden{ + pixel_x = -12; + pixel_y = -4 + }, +/obj/item/cultivator/rake{ + pixel_x = 6 + }, +/obj/structure/flora/bush/sparsegrass/style_2, +/turf/open/misc/dirt/station, +/area/template_noop) +"Y" = ( +/obj/effect/turf_decal/siding/thinplating_new/terracotta/corner{ + dir = 8 + }, +/obj/structure/table/glass, +/obj/effect/spawner/random/food_or_drink/seed{ + pixel_x = -5; + pixel_y = 2 + }, +/obj/effect/spawner/random/food_or_drink/seed_rare{ + pixel_y = 7; + pixel_x = 2 + }, +/turf/open/floor/iron/terracotta/small, +/area/template_noop) +"Z" = ( +/obj/effect/turf_decal/siding/thinplating_new/terracotta{ + dir = 10 + }, +/turf/open/floor/iron/terracotta/small, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +p +"} +(2,1,1) = {" +a +u +o +o +I +I +a +"} +(3,1,1) = {" +a +m +R +B +n +J +a +"} +(4,1,1) = {" +a +H +P +f +U +J +a +"} +(5,1,1) = {" +a +I +G +Q +O +o +a +"} +(6,1,1) = {" +a +I +Y +Z +o +o +a +"} +(7,1,1) = {" +a +a +a +a +a +a +a +"} diff --git a/_maps/modular_generic/station_s_kitchen.dmm b/_maps/modular_generic/station_s_kitchen.dmm new file mode 100644 index 00000000000000..95a65c1d4ab717 --- /dev/null +++ b/_maps/modular_generic/station_s_kitchen.dmm @@ -0,0 +1,204 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/structure/table, +/obj/item/kitchen/rollingpin{ + pixel_y = 6; + pixel_x = -5 + }, +/obj/item/knife/kitchen{ + pixel_y = 4; + pixel_x = 10 + }, +/turf/open/floor/iron/kitchen, +/area/template_noop) +"c" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/decal/cleanable/food/flour, +/turf/open/floor/iron/kitchen, +/area/template_noop) +"d" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/turf/open/floor/iron/kitchen, +/area/template_noop) +"m" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/template_noop) +"q" = ( +/obj/structure/sink/directional/east, +/turf/open/floor/iron, +/area/template_noop) +"r" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/obj/machinery/grill, +/turf/open/floor/iron/kitchen, +/area/template_noop) +"u" = ( +/obj/effect/turf_decal/siding/dark, +/obj/item/storage/box/ingredients/random{ + pixel_y = 14; + pixel_x = -7 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/kitchen, +/area/template_noop) +"w" = ( +/obj/effect/turf_decal/trimline/green/warning{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/template_noop) +"y" = ( +/turf/closed/wall, +/area/template_noop) +"z" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/structure/closet/secure_closet/freezer/fridge/all_access, +/turf/open/floor/iron/kitchen, +/area/template_noop) +"C" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_y = 10; + pixel_x = -7 + }, +/obj/item/kitchen/tongs{ + pixel_y = 6; + pixel_x = 6 + }, +/turf/open/floor/iron, +/area/template_noop) +"D" = ( +/obj/effect/turf_decal/trimline/green/warning{ + dir = 10 + }, +/turf/open/floor/iron, +/area/template_noop) +"F" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/obj/structure/closet/crate/bin{ + pixel_y = 2 + }, +/turf/open/floor/iron/kitchen, +/area/template_noop) +"G" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"I" = ( +/obj/effect/turf_decal/trimline/green/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/template_noop) +"L" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/condiment/ketchup{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/plate/small{ + pixel_x = -8; + pixel_y = 3 + }, +/turf/open/floor/iron, +/area/template_noop) +"M" = ( +/obj/effect/turf_decal/trimline/green/warning{ + dir = 8 + }, +/turf/open/floor/iron, +/area/template_noop) +"P" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/template_noop) +"S" = ( +/turf/open/floor/iron/kitchen, +/area/template_noop) +"U" = ( +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/kitchen, +/area/template_noop) +"V" = ( +/turf/template_noop, +/area/template_noop) + +(1,1,1) = {" +V +V +V +V +V +V +G +"} +(2,1,1) = {" +V +y +m +m +m +y +V +"} +(3,1,1) = {" +V +q +z +a +u +C +V +"} +(4,1,1) = {" +V +P +c +S +U +L +V +"} +(5,1,1) = {" +V +D +F +d +r +y +V +"} +(6,1,1) = {" +V +I +w +M +w +D +V +"} +(7,1,1) = {" +V +V +V +V +V +V +V +"} diff --git a/_maps/modular_generic/station_s_mime.dmm b/_maps/modular_generic/station_s_mime.dmm new file mode 100644 index 00000000000000..60d6e4ca7ea63d --- /dev/null +++ b/_maps/modular_generic/station_s_mime.dmm @@ -0,0 +1,138 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"d" = ( +/obj/structure/table/wood/fancy/royalblack, +/obj/item/toy/crayon/spraycan/mimecan{ + pixel_x = 6; + pixel_y = 17 + }, +/obj/item/flashlight/lamp{ + pixel_x = -5; + pixel_y = 12 + }, +/obj/item/food/baguette, +/turf/open/floor/iron/checker, +/area/template_noop) +"i" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/checker, +/area/template_noop) +"o" = ( +/obj/structure/chair/stool/directional/east, +/turf/open/floor/iron/checker, +/area/template_noop) +"v" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/checker, +/area/template_noop) +"A" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"H" = ( +/obj/effect/forcefield/mime/advanced{ + initial_duration = 0 + }, +/turf/open/floor/iron/checker, +/area/template_noop) +"K" = ( +/obj/structure/dresser, +/obj/item/toy/figure/mime{ + pixel_y = 13; + pixel_x = -5 + }, +/obj/item/stamp/mime{ + pixel_y = 13; + pixel_x = 7 + }, +/turf/open/floor/iron/checker, +/area/template_noop) +"L" = ( +/obj/structure/table/wood, +/obj/item/clothing/accessory/mime_fan_pin{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/effect/spawner/random/decoration/flower{ + pixel_y = 4; + pixel_x = 7 + }, +/turf/open/floor/iron/checker, +/area/template_noop) +"Q" = ( +/turf/open/floor/iron/checker, +/area/template_noop) +"Y" = ( +/obj/structure/closet/secure_closet/personal/cabinet{ + name = "mime's closet" + }, +/obj/item/clothing/mask/gas/mime, +/obj/item/book/granter/action/spell/mime/mimery, +/turf/open/floor/iron/checker, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +A +"} +(2,1,1) = {" +a +i +v +v +H +H +a +"} +(3,1,1) = {" +a +H +K +v +o +v +a +"} +(4,1,1) = {" +a +H +d +Q +L +H +a +"} +(5,1,1) = {" +a +v +Q +i +Y +H +a +"} +(6,1,1) = {" +a +v +v +H +H +H +a +"} +(7,1,1) = {" +a +a +a +a +a +a +a +"} diff --git a/_maps/modular_generic/station_s_vault.dmm b/_maps/modular_generic/station_s_vault.dmm new file mode 100644 index 00000000000000..774d50d31521cd --- /dev/null +++ b/_maps/modular_generic/station_s_vault.dmm @@ -0,0 +1,205 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"d" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner, +/obj/machinery/light/small/broken/directional/west, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/template_noop) +"e" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 8 + }, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/template_noop) +"k" = ( +/obj/effect/mob_spawn/corpse/human/generic_assistant, +/obj/item/clothing/neck/stethoscope{ + pixel_y = 13; + pixel_x = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner, +/turf/open/floor/iron/smooth_corner{ + dir = 4 + }, +/area/template_noop) +"o" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/dark_blue/corner, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 8 + }, +/turf/open/floor/iron/smooth_half, +/area/template_noop) +"r" = ( +/obj/item/book{ + desc = "An undeniably handy book."; + icon_state = "bookknock"; + name = "\improper A Simpleton's Guide to Safe-cracking with Stethoscopes"; + pixel_x = -13; + pixel_y = 2 + }, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/glass, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning, +/turf/open/floor/iron/smooth_half, +/area/template_noop) +"t" = ( +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/template_noop) +"y" = ( +/obj/structure/safe, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 8 + }, +/obj/item/ammo_box/a357, +/obj/item/gun/ballistic/revolver/golden, +/turf/open/floor/iron/smooth_corner{ + dir = 8 + }, +/area/template_noop) +"z" = ( +/obj/structure/closet/crate/preopen, +/obj/item/stack/sheet/mineral/gold, +/obj/item/stack/sheet/mineral/gold{ + pixel_y = 2; + pixel_x = 7 + }, +/obj/item/coin/gold/doubloon{ + pixel_x = -8 + }, +/obj/item/stack/ore/gold, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/trimline/dark_blue/corner, +/turf/open/floor/iron/smooth_corner, +/area/template_noop) +"J" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"M" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner, +/obj/effect/turf_decal/trimline/white, +/turf/open/floor/iron/smooth, +/area/template_noop) +"Q" = ( +/turf/closed/wall/r_wall, +/area/template_noop) +"U" = ( +/obj/effect/spawner/random/structure/barricade, +/obj/structure/door_assembly/door_assembly_vault, +/turf/open/floor/iron/smooth_large, +/area/template_noop) +"Z" = ( +/obj/effect/decal/cleanable/generic, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 8 + }, +/obj/machinery/light/small/red/dim/directional/south, +/turf/open/floor/iron/smooth_corner{ + dir = 1 + }, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +J +"} +(2,1,1) = {" +a +Q +t +Q +Q +Q +a +"} +(3,1,1) = {" +a +Q +z +d +k +Q +a +"} +(4,1,1) = {" +a +Q +o +M +r +U +a +"} +(5,1,1) = {" +a +Q +y +e +Z +Q +a +"} +(6,1,1) = {" +a +Q +Q +Q +t +Q +a +"} +(7,1,1) = {" +a +a +a +a +a +a +a +"} diff --git a/_maps/nova/automapper/automapper_config.toml b/_maps/nova/automapper/automapper_config.toml new file mode 100644 index 00000000000000..1af9bbde7fde45 --- /dev/null +++ b/_maps/nova/automapper/automapper_config.toml @@ -0,0 +1,377 @@ +# Automapper configuration +# [templates.example_template] - example_template should be replaced with the name of your map template. +# directory - The direct path to our map files. +# map_files - These are the names of the map files, including the extension, that will be loaded. Supports multiple for randomness. +# required_map - This is the name of the required map that needs to be loaded in order for this template to load. +# coordinates - The coordinates of the map template placement. (X, Y, Z). PLEASE NOTE: The Z coordinate is the same as would be shown in SDMM. NOT IN GAME. +# leave it at 1 if it is not a multi-z map. It is relative to the map file Z, not the one loaded in game. +# trait_name - The name of the Z level trait that will be used to determine what Z level we use. +# Traits - Station (for station relatied edits), CentCom (for edits on the CC map), Mining (for edits on Lavaland) +# More can be found in code\__DEFINES\maps.dm + +# Conglomeration of Colonists MAP TEMPLATES +# CC Ferry Dock - Admin Shuttle +[templates.centcom_ferry_dock] +map_files = ["centcom_ferry_dock.dmm"] +directory = "_maps/nova/automapper/templates/centcom/" +required_map = "builtin" +coordinates = [128, 79, 1] +trait_name = "CentCom" + +# CC Evac Docking Port Removal +[templates.centcom_shuttle_dock] +map_files = ["centcom_shuttle_dock.dmm"] +directory = "_maps/nova/automapper/templates/centcom/" +required_map = "builtin" +coordinates = [206, 85, 1] +trait_name = "CentCom" + +# METASTATION MAP TEMPLATES +# Metastation Arrivals +[templates.metastaton_arrivals] +map_files = ["metastation_arrivals.dmm"] +directory = "_maps/nova/automapper/templates/metastation/" +required_map = "MetaStation.dmm" +coordinates = [20, 107, 1] +trait_name = "Station" + +# Metastation Cryo +[templates.metastation_cryo] +map_files = ["metastation_cryo.dmm"] +directory = "_maps/nova/automapper/templates/metastation/" +required_map = "MetaStation.dmm" +coordinates = [133, 182, 1] +trait_name = "Station" + +# Metastation Barber +[templates.metastation_barber] +map_files = ["metastation_barber.dmm"] +directory = "_maps/nova/automapper/templates/metastation/" +required_map = "MetaStation.dmm" +coordinates = [101, 116, 1] +trait_name = "Station" + +# Metastation Armory +[templates.metastation_armory] +map_files = ["metastation_armory.dmm"] +directory = "_maps/nova/automapper/templates/metastation/" +required_map = "MetaStation.dmm" +coordinates = [101, 170, 1] +trait_name = "Station" + +# Metastation NTR Office +[templates.metastation_ntrep_office] +map_files = ["metastation_ntrep_office.dmm"] +directory = "_maps/nova/automapper/templates/metastation/" +required_map = "MetaStation.dmm" +coordinates = [57, 119, 1] +trait_name = "Station" + +# Metastation Supermatter Chamber +[templates.metastation_supermatter] +map_files = ["metastation_supermatter.dmm"] +directory = "_maps/nova/automapper/templates/metastation/" +required_map = "MetaStation.dmm" +coordinates = [163, 155, 1] +trait_name = "Station" + +# DELTASTATION MAP EDITS +# Deltastation Arrivals +[templates.deltastation_arrivals] +map_files = ["deltastation_arrivals.dmm"] +directory = "_maps/nova/automapper/templates/deltastation/" +required_map = "DeltaStation2.dmm" +coordinates = [126, 195, 1] +trait_name = "Station" + +# Deltastation Cryo +[templates.deltastation_cryo] +map_files = ["deltastation_cryo.dmm"] +directory = "_maps/nova/automapper/templates/deltastation/" +required_map = "DeltaStation2.dmm" +coordinates = [216, 93, 1] +trait_name = "Station" + +# Deltastation Armorys +[templates.deltastation_armory] +map_files = ["deltastation_armory.dmm"] +directory = "_maps/nova/automapper/templates/deltastation/" +required_map = "DeltaStation2.dmm" +coordinates = [210, 130, 1] +trait_name = "Station" + +# Deltastation Barber +[templates.deltastation_barber] +map_files = ["deltastation_barber.dmm"] +directory = "_maps/nova/automapper/templates/deltastation/" +required_map = "DeltaStation2.dmm" +coordinates = [121, 124, 1] +trait_name = "Station" + +# Deltastation NTR Office +[templates.deltastation_ntrep_office] +map_files = ["deltastation_ntrep_office.dmm"] +directory = "_maps/nova/automapper/templates/deltastation/" +required_map = "DeltaStation2.dmm" +coordinates = [123, 143, 1] +trait_name = "Station" + +# Deltastation Supermatter Chamber +[templates.deltastation_supermatter] +map_files = ["deltastation_supermatter.dmm"] +directory = "_maps/nova/automapper/templates/deltastation/" +required_map = "DeltaStation2.dmm" +coordinates = [84, 109, 1] +trait_name = "Station" + +# ICEBOX MAP EDITS +# Icebox Arrivals +[templates.icebox_arrivals] +map_files = ["icebox_arrivals.dmm"] +directory = "_maps/nova/automapper/templates/icebox/" +required_map = "IceBoxStation.dmm" +coordinates = [8, 115, 3] +trait_name = "Station" + +# Icebox Armory Middle +[templates.icebox_armory_middle] +map_files = ["icebox_armory_middle.dmm"] +directory = "_maps/nova/automapper/templates/icebox/" +required_map = "IceBoxStation.dmm" +coordinates = [104, 178, 2] +trait_name = "Station" + +# Icebox Cryo +[templates.icebox_cryo] +map_files = ["icebox_cryo.dmm"] +directory = "_maps/nova/automapper/templates/icebox/" +required_map = "IceBoxStation.dmm" +coordinates = [117, 142, 3] +trait_name = "Station" + +# Icebox Barber +[templates.icebox_barber] +map_files = ["icebox_barber.dmm"] +directory = "_maps/nova/automapper/templates/icebox/" +required_map = "IceBoxStation.dmm" +coordinates = [87, 128, 3] +trait_name = "Station" + +# Icebox NTR Office +[templates.icebox_ntrep_office] +map_files = ["icebox_ntrep_office.dmm"] +directory = "_maps/nova/automapper/templates/icebox/" +required_map = "IceBoxStation.dmm" +coordinates = [92, 118, 2] +trait_name = "Station" + +# Icebox HoP Maint +[templates.icebox_hop_maint] +map_files = ["icebox_hop_maint.dmm"] +directory = "_maps/nova/automapper/templates/icebox/" +required_map = "IceBoxStation.dmm" +coordinates = [98, 123, 3] +trait_name = "Station" + +# Icebox Supermatter Chamber +[templates.icebox_supermatter] +map_files = ["icebox_supermatter.dmm"] +directory = "_maps/nova/automapper/templates/icebox/" +required_map = "IceBoxStation.dmm" +coordinates = [114, 65, 3] +trait_name = "Station" + +# Icecats Camp Lower Level +[templates.icebox_icecats_lower] +map_files = ["icemoon_underground_icewalker_lower.dmm"] +directory = "_maps/RandomRuins/IceRuins/nova/" +required_map = "IceBoxStation.dmm" +coordinates = [202, 16, 1] +trait_name = "Station" + +# Icecats Camp Upper Level +[templates.icebox_icecats_upper] +map_files = ["icemoon_underground_icewalker_upper.dmm"] +directory = "_maps/RandomRuins/IceRuins/nova/" +required_map = "IceBoxStation.dmm" +coordinates = [202, 16, 2] +trait_name = "Station" + +# TRAMSTATION MAP EDITS +# Tramstation Arrivals +[templates.tramstation_arrivals] +map_files = ["tramstation_arrivals.dmm"] +directory = "_maps/nova/automapper/templates/tramstation/" +required_map = "tramstation.dmm" +coordinates = [8, 96, 2] +trait_name = "Station" + +# Tramstation Armory +[templates.tramstation_armory] +map_files = ["tramstation_armory.dmm"] +directory = "_maps/nova/automapper/templates/tramstation/" +required_map = "tramstation.dmm" +coordinates = [70, 162, 2] +trait_name = "Station" + +# Tramstation Barber +[templates.tramstation_barber] +map_files = ["tramstation_barber.dmm"] +directory = "_maps/nova/automapper/templates/tramstation/" +required_map = "tramstation.dmm" +coordinates = [133, 125, 1] +trait_name = "Station" + +# Tramstation Cryo +[templates.tramstation_cryo] +map_files = ["tramstation_cryo.dmm"] +directory = "_maps/nova/automapper/templates/tramstation/" +required_map = "tramstation.dmm" +coordinates = [68, 102, 2] +trait_name = "Station" + +# Tramstation NTR Office +[templates.tramstation_ntrep_office] +map_files = ["tramstation_ntrep_office.dmm"] +directory = "_maps/nova/automapper/templates/tramstation/" +required_map = "tramstation.dmm" +coordinates = [34, 135, 2] +trait_name = "Station" + +# Tramstation Supermatter Chamber +[templates.tramstation_supermatter] +map_files = ["tramstation_supermatter.dmm"] +directory = "_maps/nova/automapper/templates/tramstation/" +required_map = "tramstation.dmm" +coordinates = [118, 75, 1] +trait_name = "Station" + +# BIRDSHOT MAP EDITS +# Birdshot Arrivals +[templates.birdshot_arrivals] +map_files = ["birdshot_arrivals.dmm"] +directory = "_maps/nova/automapper/templates/birdshot/" +required_map = "birdshot.dmm" +coordinates = [136, 61, 1] +trait_name = "Station" + +# Birdshot Armory +[templates.birdshot_armory] +map_files = ["birdshot_armory.dmm"] +directory = "_maps/nova/automapper/templates/birdshot/" +required_map = "birdshot.dmm" +coordinates = [51, 106, 1] +trait_name = "Station" + +# Birdshot Cryo +[templates.birdshot_cryo] +map_files = ["birdshot_cryo.dmm"] +directory = "_maps/nova/automapper/templates/birdshot/" +required_map = "birdshot.dmm" +coordinates = [147, 142, 1] +trait_name = "Station" + +# Birdshot Barber +[templates.birdshot_barber] +map_files = ["birdshot_barber.dmm"] +directory = "_maps/nova/automapper/templates/birdshot/" +required_map = "birdshot.dmm" +coordinates = [129, 127, 1] +trait_name = "Station" + +# Birdshot NTR Office +[templates.birdshot_ntrep_office] +map_files = ["birdshot_ntrep_office.dmm"] +directory = "_maps/nova/automapper/templates/birdshot/" +required_map = "birdshot.dmm" +coordinates = [111, 157, 1] +trait_name = "Station" + +# Birdshot ERT Bay +[templates.birdshot_ert_bay] +map_files = ["birdshot_ert_bay.dmm"] +directory = "_maps/nova/automapper/templates/birdshot/" +required_map = "birdshot.dmm" +coordinates = [188, 72, 1] +trait_name = "Station" + +# Birdshot Supermatter Chamber +[templates.birdshot_supermatter] +map_files = ["birdshot_supermatter.dmm"] +directory = "_maps/nova/automapper/templates/birdshot/" +required_map = "birdshot.dmm" +coordinates = [41, 201, 1] +trait_name = "Station" + +# NORTHSTAR MAP EDITS +# Northstar Cryo +[templates.northstar_cryo] +map_files = ["northstar_cryo.dmm"] +directory = "_maps/nova/automapper/templates/northstar/" +required_map = "north_star.dmm" +coordinates = [130, 114, 3] +trait_name = "Station" + +# Northstar Dorms +[templates.northstar_dorms] +map_files = ["northstar_dorms.dmm"] +directory = "_maps/nova/automapper/templates/northstar/" +required_map = "north_star.dmm" +coordinates = [137, 132, 3] +trait_name = "Station" + +# Northstar Arrivals +[templates.northstar_arrivals] +map_files = ["northstar_arrivals.dmm"] +directory = "_maps/nova/automapper/templates/northstar/" +required_map = "north_star.dmm" +coordinates = [90, 100, 1] +trait_name = "Station" + +# Northstar ERT Bay +[templates.northstar_ert_bay] +map_files = ["northstar_ert_bay.dmm"] +directory = "_maps/nova/automapper/templates/northstar/" +required_map = "north_star.dmm" +coordinates = [54, 118, 2] +trait_name = "Station" + +# Northstar Barber +[templates.northstar_barber] +map_files = ["northstar_barber.dmm"] +directory = "_maps/nova/automapper/templates/northstar/" +required_map = "north_star.dmm" +coordinates = [105, 117, 2] +trait_name = "Station" + +# Northstar Armory +[templates.northstar_armory] +map_files = ["northstar_armory.dmm"] +directory = "_maps/nova/automapper/templates/northstar/" +required_map = "north_star.dmm" +coordinates = [121, 109, 4] +trait_name = "Station" + +# Northstar NTR Office +[templates.northstar_ntrep_office] +map_files = ["northstar_ntrep_office.dmm"] +directory = "_maps/nova/automapper/templates/northstar/" +required_map = "north_star.dmm" +coordinates = [150, 114, 3] +trait_name = "Station" + +# Northstar Supermatter Chamber +[templates.northstar_supermatter] +map_files = ["northstar_supermatter.dmm"] +directory = "_maps/nova/automapper/templates/northstar/" +required_map = "north_star.dmm" +coordinates = [171, 129, 1] +trait_name = "Station" + +# Lavaland NE Ashwalker Nest +[templates.lavaland_ashwalker_nenest] +map_files = ["lavaland_ashwalker_nenest.dmm"] +directory = "_maps/nova/automapper/templates/mining/" +required_map = "Lavaland.dmm" +coordinates = [223, 224, 1] +trait_name = "Mining" diff --git a/_maps/skyrat/automapper/templates/birdshot/birdshot_armory.dmm b/_maps/nova/automapper/templates/birdshot/birdshot_armory.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/birdshot/birdshot_armory.dmm rename to _maps/nova/automapper/templates/birdshot/birdshot_armory.dmm diff --git a/_maps/skyrat/automapper/templates/birdshot/birdshot_arrivals.dmm b/_maps/nova/automapper/templates/birdshot/birdshot_arrivals.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/birdshot/birdshot_arrivals.dmm rename to _maps/nova/automapper/templates/birdshot/birdshot_arrivals.dmm diff --git a/_maps/skyrat/automapper/templates/birdshot/birdshot_barber.dmm b/_maps/nova/automapper/templates/birdshot/birdshot_barber.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/birdshot/birdshot_barber.dmm rename to _maps/nova/automapper/templates/birdshot/birdshot_barber.dmm diff --git a/_maps/skyrat/automapper/templates/birdshot/birdshot_cryo.dmm b/_maps/nova/automapper/templates/birdshot/birdshot_cryo.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/birdshot/birdshot_cryo.dmm rename to _maps/nova/automapper/templates/birdshot/birdshot_cryo.dmm diff --git a/_maps/skyrat/automapper/templates/birdshot/birdshot_ert_bay.dmm b/_maps/nova/automapper/templates/birdshot/birdshot_ert_bay.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/birdshot/birdshot_ert_bay.dmm rename to _maps/nova/automapper/templates/birdshot/birdshot_ert_bay.dmm diff --git a/_maps/skyrat/automapper/templates/birdshot/birdshot_ntrep_office.dmm b/_maps/nova/automapper/templates/birdshot/birdshot_ntrep_office.dmm similarity index 98% rename from _maps/skyrat/automapper/templates/birdshot/birdshot_ntrep_office.dmm rename to _maps/nova/automapper/templates/birdshot/birdshot_ntrep_office.dmm index 41608333fd3b3a..a35f4b18adcb6b 100644 --- a/_maps/skyrat/automapper/templates/birdshot/birdshot_ntrep_office.dmm +++ b/_maps/nova/automapper/templates/birdshot/birdshot_ntrep_office.dmm @@ -6,8 +6,8 @@ "au" = ( /obj/structure/table/wood, /obj/machinery/fax{ - fax_name = "Nanotrasen Consultant's Office"; - name = "Nanotrasen Consultant's Fax Machine" + fax_name = "Symphionia Consultant's Office"; + name = "Symphionia Consultant's Fax Machine" }, /turf/open/floor/carpet/executive, /area/station/command/heads_quarters/nt_rep) @@ -17,7 +17,7 @@ /turf/open/floor/carpet/executive, /area/station/command/heads_quarters/nt_rep) "bD" = ( -/obj/structure/closet/secure_closet/nanotrasen_consultant/station, +/obj/structure/closet/secure_closet/nanotrasen_consultant, /turf/open/floor/carpet/executive, /area/station/command/heads_quarters/nt_rep) "ca" = ( diff --git a/_maps/skyrat/automapper/templates/birdshot/birdshot_supermatter.dmm b/_maps/nova/automapper/templates/birdshot/birdshot_supermatter.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/birdshot/birdshot_supermatter.dmm rename to _maps/nova/automapper/templates/birdshot/birdshot_supermatter.dmm diff --git a/_maps/skyrat/automapper/templates/centcom/centcom_ferry_dock.dmm b/_maps/nova/automapper/templates/centcom/centcom_ferry_dock.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/centcom/centcom_ferry_dock.dmm rename to _maps/nova/automapper/templates/centcom/centcom_ferry_dock.dmm diff --git a/_maps/skyrat/automapper/templates/centcom/centcom_shuttle_dock.dmm b/_maps/nova/automapper/templates/centcom/centcom_shuttle_dock.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/centcom/centcom_shuttle_dock.dmm rename to _maps/nova/automapper/templates/centcom/centcom_shuttle_dock.dmm diff --git a/_maps/skyrat/automapper/templates/deltastation/deltastation_armory.dmm b/_maps/nova/automapper/templates/deltastation/deltastation_armory.dmm similarity index 98% rename from _maps/skyrat/automapper/templates/deltastation/deltastation_armory.dmm rename to _maps/nova/automapper/templates/deltastation/deltastation_armory.dmm index e8b78a69a9d503..903d69e10629fe 100644 --- a/_maps/skyrat/automapper/templates/deltastation/deltastation_armory.dmm +++ b/_maps/nova/automapper/templates/deltastation/deltastation_armory.dmm @@ -10,7 +10,7 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "k" = ( -/obj/item/storage/secure/safe/directional/east, +/obj/structure/secure_safe/directional/east, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/dish_drive/bullet, /turf/open/floor/iron/dark, diff --git a/_maps/skyrat/automapper/templates/deltastation/deltastation_arrivals.dmm b/_maps/nova/automapper/templates/deltastation/deltastation_arrivals.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/deltastation/deltastation_arrivals.dmm rename to _maps/nova/automapper/templates/deltastation/deltastation_arrivals.dmm diff --git a/_maps/skyrat/automapper/templates/deltastation/deltastation_barber.dmm b/_maps/nova/automapper/templates/deltastation/deltastation_barber.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/deltastation/deltastation_barber.dmm rename to _maps/nova/automapper/templates/deltastation/deltastation_barber.dmm diff --git a/_maps/skyrat/automapper/templates/deltastation/deltastation_cryo.dmm b/_maps/nova/automapper/templates/deltastation/deltastation_cryo.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/deltastation/deltastation_cryo.dmm rename to _maps/nova/automapper/templates/deltastation/deltastation_cryo.dmm diff --git a/_maps/skyrat/automapper/templates/deltastation/deltastation_ntrep_office.dmm b/_maps/nova/automapper/templates/deltastation/deltastation_ntrep_office.dmm similarity index 95% rename from _maps/skyrat/automapper/templates/deltastation/deltastation_ntrep_office.dmm rename to _maps/nova/automapper/templates/deltastation/deltastation_ntrep_office.dmm index 2ce018e9314514..87248f36835b9c 100644 --- a/_maps/skyrat/automapper/templates/deltastation/deltastation_ntrep_office.dmm +++ b/_maps/nova/automapper/templates/deltastation/deltastation_ntrep_office.dmm @@ -41,6 +41,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/nt_rep) +"h" = ( +/obj/machinery/light/directional/west, +/turf/template_noop, +/area/template_noop) "i" = ( /turf/template_noop, /area/template_noop) @@ -171,7 +175,7 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/nt_rep) "D" = ( -/obj/structure/closet/secure_closet/nanotrasen_consultant/station, +/obj/structure/closet/secure_closet/nanotrasen_consultant, /obj/item/storage/briefcase, /obj/item/assembly/flash/handheld, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -190,6 +194,12 @@ /obj/machinery/holopad, /turf/open/floor/wood, /area/station/command/heads_quarters/nt_rep) +"H" = ( +/obj/structure/disposalpipe/junction/yjunction{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "I" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -254,8 +264,8 @@ }, /obj/structure/table/wood, /obj/machinery/fax{ - fax_name = "Nanotrasen Consultant's Office"; - name = "Nanotrasen Consultant's Fax Machine" + fax_name = "Symphionia Consultant's Office"; + name = "Symphionia Consultant's Fax Machine" }, /turf/open/floor/wood, /area/station/command/heads_quarters/nt_rep) @@ -382,3 +392,12 @@ L w a "} +(11,1,1) = {" +i +i +i +i +H +i +h +"} diff --git a/_maps/skyrat/automapper/templates/deltastation/deltastation_supermatter.dmm b/_maps/nova/automapper/templates/deltastation/deltastation_supermatter.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/deltastation/deltastation_supermatter.dmm rename to _maps/nova/automapper/templates/deltastation/deltastation_supermatter.dmm diff --git a/_maps/skyrat/automapper/templates/icebox/icebox_armory_middle.dmm b/_maps/nova/automapper/templates/icebox/icebox_armory_middle.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/icebox/icebox_armory_middle.dmm rename to _maps/nova/automapper/templates/icebox/icebox_armory_middle.dmm diff --git a/_maps/skyrat/automapper/templates/icebox/icebox_arrivals.dmm b/_maps/nova/automapper/templates/icebox/icebox_arrivals.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/icebox/icebox_arrivals.dmm rename to _maps/nova/automapper/templates/icebox/icebox_arrivals.dmm diff --git a/_maps/skyrat/automapper/templates/icebox/icebox_barber.dmm b/_maps/nova/automapper/templates/icebox/icebox_barber.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/icebox/icebox_barber.dmm rename to _maps/nova/automapper/templates/icebox/icebox_barber.dmm diff --git a/_maps/skyrat/automapper/templates/icebox/icebox_cryo.dmm b/_maps/nova/automapper/templates/icebox/icebox_cryo.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/icebox/icebox_cryo.dmm rename to _maps/nova/automapper/templates/icebox/icebox_cryo.dmm diff --git a/_maps/skyrat/automapper/templates/icebox/icebox_hop_maint.dmm b/_maps/nova/automapper/templates/icebox/icebox_hop_maint.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/icebox/icebox_hop_maint.dmm rename to _maps/nova/automapper/templates/icebox/icebox_hop_maint.dmm diff --git a/_maps/skyrat/automapper/templates/icebox/icebox_ntrep_office.dmm b/_maps/nova/automapper/templates/icebox/icebox_ntrep_office.dmm similarity index 99% rename from _maps/skyrat/automapper/templates/icebox/icebox_ntrep_office.dmm rename to _maps/nova/automapper/templates/icebox/icebox_ntrep_office.dmm index cbfaddfb20cb6c..5139cb93543590 100644 --- a/_maps/skyrat/automapper/templates/icebox/icebox_ntrep_office.dmm +++ b/_maps/nova/automapper/templates/icebox/icebox_ntrep_office.dmm @@ -105,7 +105,7 @@ /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) "hp" = ( -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/station/maintenance/central/greater) @@ -333,7 +333,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "yu" = ( -/obj/structure/closet/secure_closet/nanotrasen_consultant/station, +/obj/structure/closet/secure_closet/nanotrasen_consultant, /obj/item/assembly/flash/handheld, /obj/machinery/light/directional/west, /obj/item/radio/intercom/directional/west, @@ -473,8 +473,8 @@ "JQ" = ( /obj/structure/table/wood, /obj/machinery/fax{ - fax_name = "Nanotrasen Consultant's Office"; - name = "Nanotrasen Consultant's Fax Machine" + fax_name = "Symphionia Consultant's Office"; + name = "Symphionia Consultant's Fax Machine" }, /turf/open/floor/wood, /area/station/command/heads_quarters/nt_rep) diff --git a/_maps/skyrat/automapper/templates/icebox/icebox_supermatter.dmm b/_maps/nova/automapper/templates/icebox/icebox_supermatter.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/icebox/icebox_supermatter.dmm rename to _maps/nova/automapper/templates/icebox/icebox_supermatter.dmm diff --git a/_maps/skyrat/automapper/templates/metastation/metastation_armory.dmm b/_maps/nova/automapper/templates/metastation/metastation_armory.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/metastation/metastation_armory.dmm rename to _maps/nova/automapper/templates/metastation/metastation_armory.dmm diff --git a/_maps/skyrat/automapper/templates/metastation/metastation_arrivals.dmm b/_maps/nova/automapper/templates/metastation/metastation_arrivals.dmm similarity index 99% rename from _maps/skyrat/automapper/templates/metastation/metastation_arrivals.dmm rename to _maps/nova/automapper/templates/metastation/metastation_arrivals.dmm index 946510b8f2cb92..fc238d37eddbd5 100644 --- a/_maps/skyrat/automapper/templates/metastation/metastation_arrivals.dmm +++ b/_maps/nova/automapper/templates/metastation/metastation_arrivals.dmm @@ -1209,6 +1209,17 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"Kh" = ( +/obj/docking_port/stationary{ + dir = 2; + dwidth = 11; + height = 24; + name = "SS13: Auxiliary Dock, Station-Port"; + shuttle_id = "whiteship_home"; + width = 35 + }, +/turf/open/space/basic, +/area/space) "Kk" = ( /obj/machinery/newscaster/directional/south, /obj/structure/table, @@ -2504,7 +2515,7 @@ EW PD aG Wm -FF +Kh FF FF "} diff --git a/_maps/skyrat/automapper/templates/metastation/metastation_barber.dmm b/_maps/nova/automapper/templates/metastation/metastation_barber.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/metastation/metastation_barber.dmm rename to _maps/nova/automapper/templates/metastation/metastation_barber.dmm diff --git a/_maps/skyrat/automapper/templates/metastation/metastation_cryo.dmm b/_maps/nova/automapper/templates/metastation/metastation_cryo.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/metastation/metastation_cryo.dmm rename to _maps/nova/automapper/templates/metastation/metastation_cryo.dmm diff --git a/_maps/skyrat/automapper/templates/metastation/metastation_ntrep_office.dmm b/_maps/nova/automapper/templates/metastation/metastation_ntrep_office.dmm similarity index 97% rename from _maps/skyrat/automapper/templates/metastation/metastation_ntrep_office.dmm rename to _maps/nova/automapper/templates/metastation/metastation_ntrep_office.dmm index c18d33363e6bef..72aea94fa3a58e 100644 --- a/_maps/skyrat/automapper/templates/metastation/metastation_ntrep_office.dmm +++ b/_maps/nova/automapper/templates/metastation/metastation_ntrep_office.dmm @@ -133,7 +133,7 @@ "A" = ( /obj/machinery/airalarm/directional/east, /obj/machinery/light/directional/east, -/obj/structure/closet/secure_closet/nanotrasen_consultant/station, +/obj/structure/closet/secure_closet/nanotrasen_consultant, /obj/item/assembly/flash/handheld, /turf/open/floor/carpet/executive, /area/station/command/heads_quarters/nt_rep) @@ -167,8 +167,8 @@ "I" = ( /obj/structure/table/wood, /obj/machinery/fax{ - fax_name = "Nanotrasen Consultant's Office"; - name = "Nanotrasen Consultant's Fax Machine" + fax_name = "Symphionia Consultant's Office"; + name = "Symphionia Consultant's Fax Machine" }, /turf/open/floor/wood, /area/station/command/heads_quarters/nt_rep) diff --git a/_maps/skyrat/automapper/templates/metastation/metastation_supermatter.dmm b/_maps/nova/automapper/templates/metastation/metastation_supermatter.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/metastation/metastation_supermatter.dmm rename to _maps/nova/automapper/templates/metastation/metastation_supermatter.dmm diff --git a/_maps/skyrat/automapper/templates/mining/lavaland_ashwalker_nenest.dmm b/_maps/nova/automapper/templates/mining/lavaland_ashwalker_nenest.dmm similarity index 97% rename from _maps/skyrat/automapper/templates/mining/lavaland_ashwalker_nenest.dmm rename to _maps/nova/automapper/templates/mining/lavaland_ashwalker_nenest.dmm index 6fe9529fb52edf..b85cc42558b914 100644 --- a/_maps/skyrat/automapper/templates/mining/lavaland_ashwalker_nenest.dmm +++ b/_maps/nova/automapper/templates/mining/lavaland_ashwalker_nenest.dmm @@ -140,7 +140,7 @@ /area/ruin/unpowered/ash_walkers) "fd" = ( /obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; icon_state = "empty_shelf_1" }, /obj/item/reagent_containers/cup/glass/bottle/small{ @@ -194,7 +194,7 @@ dir = 1 }, /obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; icon_state = "empty_shelf_1" }, /obj/item/screwdriver/ashwalker, @@ -321,7 +321,7 @@ /area/ruin/unpowered/ash_walkers) "kP" = ( /obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; icon_state = "empty_shelf_1" }, /obj/item/forging/billow/primitive, @@ -424,7 +424,7 @@ /area/ruin/unpowered/ash_walkers) "oH" = ( /obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; icon_state = "empty_shelf_1" }, /obj/item/forging/billow/primitive, @@ -499,7 +499,7 @@ /area/ruin/unpowered/ash_walkers) "sp" = ( /obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; icon_state = "empty_shelf_1" }, /obj/item/bedsheet/black{ @@ -523,7 +523,7 @@ /area/ruin/unpowered/ash_walkers) "sN" = ( /obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; icon_state = "empty_shelf_1" }, /obj/item/stack/sheet/iron/twenty, @@ -541,7 +541,7 @@ /area/ruin/unpowered/ash_walkers) "un" = ( /obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; icon_state = "empty_shelf_1" }, /obj/structure/stone_tile/slab, @@ -673,7 +673,7 @@ /area/ruin/unpowered/ash_walkers) "xl" = ( /obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; icon_state = "empty_shelf_1" }, /obj/item/reagent_containers/cup/bowl/mushroom_bowl{ @@ -687,7 +687,7 @@ /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "xo" = ( -/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch, +/mob/living/basic/mining/gutlunch/grub, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "xY" = ( @@ -728,7 +728,7 @@ /area/ruin/unpowered/ash_walkers) "yO" = ( /obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; icon_state = "empty_shelf_1" }, /obj/item/gun/ballistic/bow/longbow, @@ -768,7 +768,7 @@ /area/ruin/unpowered/ash_walkers) "zV" = ( /obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; icon_state = "empty_shelf_1" }, /obj/item/knife/combat/bone{ @@ -943,7 +943,7 @@ /obj/structure/stone_tile/block{ dir = 4 }, -/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen, +/mob/living/basic/mining/gutlunch/warrior, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "Hf" = ( @@ -990,7 +990,7 @@ /area/ruin/unpowered/ash_walkers) "Jx" = ( /obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; icon_state = "empty_shelf_1" }, /obj/item/reagent_containers/cup/bottle/nutrient/rh{ @@ -1185,7 +1185,7 @@ /turf/closed/indestructible/riveted/boss, /area/ruin/unpowered/ash_walkers) "QU" = ( -/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck, +/mob/living/basic/mining/gutlunch/milk, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "Re" = ( @@ -1298,7 +1298,7 @@ /area/ruin/unpowered/ash_walkers) "UN" = ( /obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; icon_state = "empty_shelf_1" }, /obj/item/reagent_containers/cup/glass/bottle/lizardwine, @@ -1344,7 +1344,7 @@ /area/ruin/unpowered/ash_walkers) "Wn" = ( /obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; icon_state = "empty_shelf_1" }, /obj/item/claymore/bone, @@ -1393,7 +1393,7 @@ /area/ruin/unpowered/ash_walkers) "Xq" = ( /obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; icon_state = "empty_shelf_1" }, /obj/item/secateurs, @@ -1406,7 +1406,7 @@ /area/ruin/unpowered/ash_walkers) "XH" = ( /obj/structure/rack/shelf{ - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'; + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'; icon_state = "empty_shelf_1" }, /obj/item/spear/bonespear, diff --git a/_maps/skyrat/automapper/templates/northstar/northstar_armory.dmm b/_maps/nova/automapper/templates/northstar/northstar_armory.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/northstar/northstar_armory.dmm rename to _maps/nova/automapper/templates/northstar/northstar_armory.dmm diff --git a/_maps/skyrat/automapper/templates/northstar/northstar_arrivals.dmm b/_maps/nova/automapper/templates/northstar/northstar_arrivals.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/northstar/northstar_arrivals.dmm rename to _maps/nova/automapper/templates/northstar/northstar_arrivals.dmm diff --git a/_maps/skyrat/automapper/templates/northstar/northstar_barber.dmm b/_maps/nova/automapper/templates/northstar/northstar_barber.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/northstar/northstar_barber.dmm rename to _maps/nova/automapper/templates/northstar/northstar_barber.dmm diff --git a/_maps/skyrat/automapper/templates/northstar/northstar_cryo.dmm b/_maps/nova/automapper/templates/northstar/northstar_cryo.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/northstar/northstar_cryo.dmm rename to _maps/nova/automapper/templates/northstar/northstar_cryo.dmm diff --git a/_maps/skyrat/automapper/templates/northstar/northstar_dorms.dmm b/_maps/nova/automapper/templates/northstar/northstar_dorms.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/northstar/northstar_dorms.dmm rename to _maps/nova/automapper/templates/northstar/northstar_dorms.dmm diff --git a/_maps/skyrat/automapper/templates/northstar/northstar_ert_bay.dmm b/_maps/nova/automapper/templates/northstar/northstar_ert_bay.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/northstar/northstar_ert_bay.dmm rename to _maps/nova/automapper/templates/northstar/northstar_ert_bay.dmm diff --git a/_maps/skyrat/automapper/templates/northstar/northstar_ntrep_office.dmm b/_maps/nova/automapper/templates/northstar/northstar_ntrep_office.dmm similarity index 97% rename from _maps/skyrat/automapper/templates/northstar/northstar_ntrep_office.dmm rename to _maps/nova/automapper/templates/northstar/northstar_ntrep_office.dmm index f797c7905a7a44..f983b74ec03c67 100644 --- a/_maps/skyrat/automapper/templates/northstar/northstar_ntrep_office.dmm +++ b/_maps/nova/automapper/templates/northstar/northstar_ntrep_office.dmm @@ -24,8 +24,8 @@ "e" = ( /obj/structure/table/wood, /obj/machinery/fax{ - fax_name = "Nanotrasen Consultant's Office"; - name = "Nanotrasen Consultant's Fax Machine" + fax_name = "Symphionia Consultant's Office"; + name = "Symphionia Consultant's Fax Machine" }, /turf/open/floor/carpet/executive, /area/station/command/heads_quarters/nt_rep) @@ -138,7 +138,7 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/nt_rep) "v" = ( -/obj/structure/closet/secure_closet/nanotrasen_consultant/station, +/obj/structure/closet/secure_closet/nanotrasen_consultant, /turf/open/floor/wood, /area/station/command/heads_quarters/nt_rep) "w" = ( diff --git a/_maps/skyrat/automapper/templates/northstar/northstar_supermatter.dmm b/_maps/nova/automapper/templates/northstar/northstar_supermatter.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/northstar/northstar_supermatter.dmm rename to _maps/nova/automapper/templates/northstar/northstar_supermatter.dmm diff --git a/_maps/skyrat/automapper/templates/tramstation/tramstation_armory.dmm b/_maps/nova/automapper/templates/tramstation/tramstation_armory.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/tramstation/tramstation_armory.dmm rename to _maps/nova/automapper/templates/tramstation/tramstation_armory.dmm diff --git a/_maps/skyrat/automapper/templates/tramstation/tramstation_arrivals.dmm b/_maps/nova/automapper/templates/tramstation/tramstation_arrivals.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/tramstation/tramstation_arrivals.dmm rename to _maps/nova/automapper/templates/tramstation/tramstation_arrivals.dmm diff --git a/_maps/skyrat/automapper/templates/tramstation/tramstation_barber.dmm b/_maps/nova/automapper/templates/tramstation/tramstation_barber.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/tramstation/tramstation_barber.dmm rename to _maps/nova/automapper/templates/tramstation/tramstation_barber.dmm diff --git a/_maps/skyrat/automapper/templates/tramstation/tramstation_cryo.dmm b/_maps/nova/automapper/templates/tramstation/tramstation_cryo.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/tramstation/tramstation_cryo.dmm rename to _maps/nova/automapper/templates/tramstation/tramstation_cryo.dmm diff --git a/_maps/skyrat/automapper/templates/tramstation/tramstation_ntrep_office.dmm b/_maps/nova/automapper/templates/tramstation/tramstation_ntrep_office.dmm similarity index 98% rename from _maps/skyrat/automapper/templates/tramstation/tramstation_ntrep_office.dmm rename to _maps/nova/automapper/templates/tramstation/tramstation_ntrep_office.dmm index bd1e3e8870cc6a..02c22daa1a4dfb 100644 --- a/_maps/skyrat/automapper/templates/tramstation/tramstation_ntrep_office.dmm +++ b/_maps/nova/automapper/templates/tramstation/tramstation_ntrep_office.dmm @@ -30,7 +30,7 @@ /turf/open/floor/carpet/executive, /area/station/command/heads_quarters/nt_rep) "e" = ( -/obj/structure/closet/secure_closet/nanotrasen_consultant/station, +/obj/structure/closet/secure_closet/nanotrasen_consultant, /turf/open/floor/wood, /area/station/command/heads_quarters/nt_rep) "f" = ( @@ -202,8 +202,8 @@ "E" = ( /obj/structure/table/wood, /obj/machinery/fax{ - fax_name = "Nanotrasen Consultant's Office"; - name = "Nanotrasen Consultant's Fax Machine" + fax_name = "Symphionia Consultant's Office"; + name = "Symphionia Consultant's Fax Machine" }, /turf/open/floor/carpet/executive, /area/station/command/heads_quarters/nt_rep) diff --git a/_maps/skyrat/automapper/templates/tramstation/tramstation_supermatter.dmm b/_maps/nova/automapper/templates/tramstation/tramstation_supermatter.dmm similarity index 100% rename from _maps/skyrat/automapper/templates/tramstation/tramstation_supermatter.dmm rename to _maps/nova/automapper/templates/tramstation/tramstation_supermatter.dmm diff --git a/_maps/skyrat/holodeck_wargame.dmm b/_maps/nova/holodeck_wargame.dmm similarity index 96% rename from _maps/skyrat/holodeck_wargame.dmm rename to _maps/nova/holodeck_wargame.dmm index ad09edb2a45773..c62822c23d401c 100644 --- a/_maps/skyrat/holodeck_wargame.dmm +++ b/_maps/nova/holodeck_wargame.dmm @@ -4,7 +4,7 @@ dir = 10 }, /obj/structure/table/wood, -/obj/item/storage/secure/briefcase/white/wargame_kit, +/obj/item/storage/briefcase/secure/white/wargame_kit, /turf/open/floor/holofloor/wood, /area/template_noop) "b" = ( @@ -102,7 +102,7 @@ "t" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/closet/cabinet, -/obj/item/clothing/under/rank/captain/skyrat/imperial/generic/red, +/obj/item/clothing/under/rank/captain/nova/imperial/generic/red, /obj/item/clothing/head/soft/red, /turf/open/floor/holofloor/wood, /area/template_noop) @@ -172,7 +172,7 @@ dir = 6 }, /obj/structure/closet/cabinet, -/obj/item/clothing/under/rank/captain/skyrat/imperial/generic/pants, +/obj/item/clothing/under/rank/captain/nova/imperial/generic/pants, /obj/item/clothing/head/soft/grey, /turf/open/floor/holofloor/wood, /area/template_noop) diff --git a/_maps/skyrat/lazy_templates/reebe.dmm b/_maps/nova/lazy_templates/reebe.dmm similarity index 99% rename from _maps/skyrat/lazy_templates/reebe.dmm rename to _maps/nova/lazy_templates/reebe.dmm index 852d14d41c5a7a..2539c28ba080e7 100644 --- a/_maps/skyrat/lazy_templates/reebe.dmm +++ b/_maps/nova/lazy_templates/reebe.dmm @@ -187,15 +187,15 @@ "vA" = ( /obj/structure/table/bronze, /obj/item/gun/ballistic/rifle/lionhunter/clockwork, -/obj/item/ammo_box/a762/lionhunter/clock{ +/obj/item/ammo_box/strilka310/lionhunter/clock{ pixel_x = 12; pixel_y = 9 }, -/obj/item/ammo_box/a762/lionhunter/clock{ +/obj/item/ammo_box/strilka310/lionhunter/clock{ pixel_x = -12; pixel_y = 9 }, -/obj/item/ammo_box/a762/lionhunter/clock{ +/obj/item/ammo_box/strilka310/lionhunter/clock{ pixel_y = 9 }, /turf/open/floor/bronze/flat, diff --git a/_maps/safehouses/README.md b/_maps/safehouses/README.md index 8027ea38e2110d..17882fd96daeb9 100644 --- a/_maps/safehouses/README.md +++ b/_maps/safehouses/README.md @@ -6,6 +6,7 @@ 2. Create a new dm file inside `modules\bitrunning\virtual_domain\safe_houses` folder.. 4. Place exit and goal landmarks (obj/effect/landmark/bitrunning/..). Generally, 3 exits and 2 goals are ok. 5. Ideally, leave 3 spaces for gear. This has usually been xy [1x1] [1x2] [1x3] +6. Place the modular map connector at the bottom left tile. ## Notes diff --git a/_maps/safehouses/TEMPLATES/TEMPLATE.dmm b/_maps/safehouses/TEMPLATES/TEMPLATE.dmm index c8e5059f0d0135..03eaca12fb1397 100644 --- a/_maps/safehouses/TEMPLATES/TEMPLATE.dmm +++ b/_maps/safehouses/TEMPLATES/TEMPLATE.dmm @@ -13,11 +13,11 @@ /turf/open/floor/plating, /area/virtual_domain/safehouse) "v" = ( -/obj/effect/bitrunning/exit_spawn, +/obj/effect/landmark/bitrunning/hololadder_spawn, /turf/open/floor/plating, /area/virtual_domain/safehouse) "N" = ( -/obj/effect/bitrunning/goal_turf, +/obj/effect/landmark/bitrunning/cache_goal_turf, /turf/open/floor/plating, /area/virtual_domain/safehouse) "R" = ( diff --git a/_maps/safehouses/abductor.dmm b/_maps/safehouses/abductor.dmm new file mode 100644 index 00000000000000..f18b1b6978d316 --- /dev/null +++ b/_maps/safehouses/abductor.dmm @@ -0,0 +1,94 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/closed/wall/mineral/abductor, +/area/virtual_domain/safehouse) +"b" = ( +/obj/effect/landmark/bitrunning/hololadder_spawn, +/turf/open/floor/plating/abductor, +/area/virtual_domain/safehouse) +"d" = ( +/obj/modular_map_connector, +/turf/open/floor/plating/abductor, +/area/virtual_domain/safehouse) +"n" = ( +/turf/open/floor/plating/abductor, +/area/virtual_domain/safehouse) +"o" = ( +/obj/effect/landmark/bitrunning/cache_goal_turf, +/turf/open/floor/plating/abductor2, +/area/virtual_domain/safehouse) +"t" = ( +/obj/effect/landmark/bitrunning/hololadder_spawn, +/turf/open/floor/plating/abductor2, +/area/virtual_domain/safehouse) +"u" = ( +/obj/machinery/abductor/console, +/turf/open/floor/plating/abductor, +/area/virtual_domain/safehouse) +"v" = ( +/obj/machinery/door/airlock/abductor, +/turf/open/floor/plating/abductor, +/area/virtual_domain/safehouse) +"E" = ( +/obj/machinery/abductor/pad{ + desc = "A funky looking disc, built into the floor." + }, +/turf/open/floor/plating/abductor, +/area/virtual_domain/safehouse) + +(1,1,1) = {" +n +a +a +a +a +d +"} +(2,1,1) = {" +a +E +t +t +b +a +"} +(3,1,1) = {" +a +n +n +n +n +a +"} +(4,1,1) = {" +v +n +n +n +n +v +"} +(5,1,1) = {" +a +n +n +n +n +a +"} +(6,1,1) = {" +a +u +o +o +n +a +"} +(7,1,1) = {" +n +a +a +a +a +n +"} diff --git a/_maps/safehouses/ancientmilsim_nova.dmm b/_maps/safehouses/ancientmilsim_nova.dmm new file mode 100644 index 00000000000000..4b00bcb43701d0 --- /dev/null +++ b/_maps/safehouses/ancientmilsim_nova.dmm @@ -0,0 +1,304 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/virtual_domain/safehouse) +"b" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/closet/crate/secure/weapon, +/obj/item/storage/pouch/medical/firstaid/stabilizer, +/obj/item/storage/pouch/ammo, +/obj/item/clothing/head/helmet/hecu, +/obj/item/clothing/suit/armor/vest/hecu, +/obj/item/storage/box/survival/syndie, +/obj/item/gun/ballistic/automatic/sol_smg, +/obj/item/knife/combat, +/obj/item/gun/ballistic/automatic/pistol/sol, +/obj/item/ammo_box/magazine/c35sol_pistol, +/obj/item/ammo_box/magazine/c35sol_pistol, +/obj/item/ammo_box/magazine/c35sol_pistol, +/obj/item/storage/belt/military/assault/hecu, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo, +/obj/item/stack/medical/mesh/bloody, +/obj/item/stack/medical/suture/bloody, +/obj/item/clothing/gloves/military, +/obj/item/clothing/glasses/hud/health/night, +/turf/open/floor/iron, +/area/virtual_domain/safehouse) +"e" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/virtual_domain/safehouse) +"g" = ( +/obj/machinery/power/shuttle_engine/heater, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/virtual_domain/safehouse) +"i" = ( +/obj/machinery/power/shuttle_engine/propulsion{ + dir = 4 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/virtual_domain/safehouse) +"j" = ( +/obj/effect/landmark/bitrunning/cache_goal_turf, +/obj/effect/turf_decal/loading_area, +/turf/open/floor/bitrunning_transport, +/area/virtual_domain/safehouse) +"m" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/virtual_domain/safehouse) +"o" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/virtual_domain/safehouse) +"p" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/machinery/light/small/red/directional/east, +/obj/structure/sign/departments/medbay/alt/directional/east, +/turf/open/floor/iron, +/area/virtual_domain/safehouse) +"q" = ( +/obj/modular_map_connector, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/virtual_domain/safehouse) +"r" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/virtual_domain/safehouse) +"s" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating, +/area/virtual_domain/safehouse) +"v" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/hatch, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/sand/volcanic, +/turf/open/floor/iron/white, +/area/virtual_domain/safehouse) +"w" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/landmark/bitrunning/hololadder_spawn, +/turf/open/floor/iron, +/area/virtual_domain/safehouse) +"x" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/bitrunning/hololadder_spawn, +/turf/open/floor/iron, +/area/virtual_domain/safehouse) +"z" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/iv_drip/health_station/directional/east, +/turf/open/floor/iron, +/area/virtual_domain/safehouse) +"D" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt, +/obj/item/taperecorder/empty, +/turf/open/floor/iron, +/area/virtual_domain/safehouse) +"G" = ( +/obj/effect/turf_decal/stripes/end, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/secure/weapon, +/obj/item/storage/pouch/medical/firstaid/stabilizer, +/obj/item/storage/pouch/ammo, +/obj/item/clothing/head/helmet/hecu, +/obj/item/clothing/suit/armor/vest/hecu, +/obj/item/storage/box/survival/syndie, +/obj/item/gun/ballistic/automatic/sol_smg, +/obj/item/knife/combat, +/obj/item/gun/ballistic/automatic/pistol/sol, +/obj/item/ammo_box/magazine/c35sol_pistol, +/obj/item/ammo_box/magazine/c35sol_pistol, +/obj/item/ammo_box/magazine/c35sol_pistol, +/obj/item/storage/belt/military/assault/hecu, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo, +/obj/item/stack/medical/mesh/bloody, +/obj/item/stack/medical/suture/bloody, +/obj/item/clothing/gloves/military, +/obj/item/clothing/glasses/hud/health/night, +/turf/open/floor/iron, +/area/virtual_domain/safehouse) +"H" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/bitrunning/cache_goal_turf, +/obj/effect/turf_decal/loading_area, +/obj/machinery/light/small/directional/south, +/turf/open/floor/bitrunning_transport, +/area/virtual_domain/safehouse) +"I" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer{ + dir = 2; + name = "hovercraft console"; + icon_screen = "shuttle"; + desc = "An armored hovercraft control computer. Doesn't work anymore... who would've thought." + }, +/turf/open/floor/iron, +/area/virtual_domain/safehouse) +"J" = ( +/obj/machinery/power/shuttle_engine/propulsion{ + dir = 8 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/virtual_domain/safehouse) +"K" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain/safehouse) +"L" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/small/red/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/toolbox/emergency, +/turf/open/floor/iron, +/area/virtual_domain/safehouse) +"M" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/effect/decal/cleanable/generic, +/obj/effect/landmark/bitrunning/hololadder_spawn, +/turf/open/floor/iron, +/area/virtual_domain/safehouse) +"N" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table/reinforced, +/obj/item/tape/ruins/ancient_milsim/devlog_one, +/turf/open/floor/iron, +/area/virtual_domain/safehouse) +"U" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/obj/effect/turf_decal/sand/volcanic, +/obj/structure/closet/crate/secure/weapon, +/obj/item/storage/pouch/medical/firstaid/loaded, +/obj/item/storage/pouch/medical/loaded, +/obj/item/clothing/head/helmet/hecu, +/obj/item/clothing/suit/armor/vest/hecu, +/obj/item/storage/box/survival/syndie, +/obj/item/gun/ballistic/automatic/sol_smg, +/obj/item/knife/combat, +/obj/item/gun/ballistic/automatic/pistol/sol, +/obj/item/ammo_box/magazine/c35sol_pistol, +/obj/item/ammo_box/magazine/c35sol_pistol, +/obj/item/ammo_box/magazine/c35sol_pistol, +/obj/item/storage/belt/military/assault/hecu, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo, +/obj/item/stack/medical/mesh/bloody, +/obj/item/stack/medical/suture/bloody, +/obj/item/clothing/gloves/military, +/obj/item/clothing/glasses/hud/health/night, +/turf/open/floor/iron, +/area/virtual_domain/safehouse) + +(1,1,1) = {" +r +J +r +r +J +q +"} +(2,1,1) = {" +r +U +b +G +j +g +"} +(3,1,1) = {" +r +L +o +e +H +g +"} +(4,1,1) = {" +v +K +o +m +M +g +"} +(5,1,1) = {" +s +N +D +m +w +g +"} +(6,1,1) = {" +s +I +p +z +x +g +"} +(7,1,1) = {" +r +i +r +r +i +a +"} diff --git a/_maps/safehouses/bathroom.dmm b/_maps/safehouses/bathroom.dmm index 62e928ac0543b2..76712d6193c440 100644 --- a/_maps/safehouses/bathroom.dmm +++ b/_maps/safehouses/bathroom.dmm @@ -13,6 +13,10 @@ /obj/effect/decal/cleanable/blood/splatter/over_window, /turf/open/floor/iron/freezer, /area/virtual_domain/safehouse) +"h" = ( +/obj/modular_map_connector, +/turf/closed/wall/mineral/silver, +/area/virtual_domain/safehouse) "q" = ( /obj/structure/urinal/directional/west, /turf/open/floor/iron/freezer, @@ -103,7 +107,7 @@ G G G G -G +h "} (2,1,1) = {" G diff --git a/_maps/safehouses/den.dmm b/_maps/safehouses/den.dmm index 235d786d6e9dab..15debc7e284e66 100644 --- a/_maps/safehouses/den.dmm +++ b/_maps/safehouses/den.dmm @@ -7,6 +7,10 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/pod, /area/virtual_domain/safehouse) +"b" = ( +/obj/modular_map_connector, +/turf/closed/wall, +/area/virtual_domain/safehouse) "c" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/small/directional/east, @@ -172,7 +176,7 @@ C C G G -C +b "} (2,1,1) = {" W diff --git a/_maps/safehouses/dig.dmm b/_maps/safehouses/dig.dmm index 4acff0f232708e..73f0d247dfbe49 100644 --- a/_maps/safehouses/dig.dmm +++ b/_maps/safehouses/dig.dmm @@ -49,6 +49,10 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/misc/asteroid, /area/virtual_domain/safehouse) +"s" = ( +/obj/modular_map_connector, +/turf/closed/mineral/asteroid, +/area/virtual_domain/safehouse) "u" = ( /obj/effect/turf_decal/siding/yellow{ dir = 8 @@ -113,7 +117,7 @@ H A A H -H +s "} (2,1,1) = {" A diff --git a/_maps/safehouses/ice.dmm b/_maps/safehouses/ice.dmm index a8293f9502aa77..f7faa997396529 100644 --- a/_maps/safehouses/ice.dmm +++ b/_maps/safehouses/ice.dmm @@ -14,6 +14,10 @@ }, /turf/open/floor/iron, /area/virtual_domain/safehouse) +"e" = ( +/obj/modular_map_connector, +/turf/closed/wall/ice, +/area/virtual_domain/safehouse) "f" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 4 @@ -202,7 +206,7 @@ i g a i -i +e "} (2,1,1) = {" i diff --git a/_maps/safehouses/lavaland_boss.dmm b/_maps/safehouses/lavaland_boss.dmm index 7482846e61f7a2..7331a5b79d7a0c 100644 --- a/_maps/safehouses/lavaland_boss.dmm +++ b/_maps/safehouses/lavaland_boss.dmm @@ -122,6 +122,10 @@ }, /turf/open/floor/iron/dark/smooth_edge, /area/virtual_domain/safehouse) +"N" = ( +/obj/modular_map_connector, +/turf/closed/wall, +/area/virtual_domain/safehouse) "O" = ( /obj/item/gun/energy/recharge/kinetic_accelerator{ pixel_x = -6; @@ -191,7 +195,7 @@ f f P P -f +N "} (2,1,1) = {" P diff --git a/_maps/safehouses/mine.dmm b/_maps/safehouses/mine.dmm index 551e2ca0c001a6..904c3c5378e8a6 100644 --- a/_maps/safehouses/mine.dmm +++ b/_maps/safehouses/mine.dmm @@ -16,6 +16,10 @@ /obj/structure/tank_dispenser/oxygen, /turf/open/floor/iron/dark, /area/virtual_domain/safehouse) +"t" = ( +/obj/modular_map_connector, +/turf/closed/wall, +/area/virtual_domain/safehouse) "w" = ( /obj/effect/turf_decal/loading_area{ dir = 4 @@ -112,7 +116,7 @@ f f P P -f +t "} (2,1,1) = {" P diff --git a/_maps/safehouses/shuttle.dmm b/_maps/safehouses/shuttle.dmm index 92228c95bd3c4f..75fe975258c51f 100644 --- a/_maps/safehouses/shuttle.dmm +++ b/_maps/safehouses/shuttle.dmm @@ -43,6 +43,10 @@ /obj/effect/turf_decal/loading_area, /turf/open/floor/bitrunning_transport, /area/virtual_domain/safehouse) +"m" = ( +/obj/modular_map_connector, +/turf/closed/wall/mineral/titanium, +/area/virtual_domain/safehouse) "q" = ( /obj/effect/turf_decal/stripes/end, /obj/effect/decal/cleanable/dirt, @@ -176,7 +180,7 @@ t e e t -a +m "} (2,1,1) = {" e diff --git a/_maps/safehouses/shuttle_space.dmm b/_maps/safehouses/shuttle_space.dmm index a5afaa475c654a..0029f5b0a6e7d6 100644 --- a/_maps/safehouses/shuttle_space.dmm +++ b/_maps/safehouses/shuttle_space.dmm @@ -20,6 +20,10 @@ "i" = ( /turf/closed/wall/mineral/titanium/overspace, /area/virtual_domain/safehouse) +"k" = ( +/obj/modular_map_connector, +/turf/closed/wall/mineral/titanium/overspace, +/area/virtual_domain/safehouse) "l" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 1 @@ -179,7 +183,7 @@ N a a N -i +k "} (2,1,1) = {" a diff --git a/_maps/safehouses/test_only_safehouse.dmm b/_maps/safehouses/test_only_safehouse.dmm index c23f8c4a22b49e..986dad78e04b02 100644 --- a/_maps/safehouses/test_only_safehouse.dmm +++ b/_maps/safehouses/test_only_safehouse.dmm @@ -10,10 +10,15 @@ "u" = ( /turf/open/floor/plating, /area/virtual_domain/safehouse) +"U" = ( +/obj/effect/landmark/bitrunning/hololadder_spawn, +/obj/modular_map_connector, +/turf/open/floor/plating, +/area/virtual_domain/safehouse) (1,1,1) = {" u -d +U "} (2,1,1) = {" u diff --git a/_maps/safehouses/wood.dmm b/_maps/safehouses/wood.dmm index 0bb6b273fceaee..05fbb97f915fb3 100644 --- a/_maps/safehouses/wood.dmm +++ b/_maps/safehouses/wood.dmm @@ -27,6 +27,10 @@ /obj/item/newspaper, /turf/open/indestructible/hotelwood, /area/virtual_domain/safehouse) +"w" = ( +/obj/modular_map_connector, +/turf/closed/wall/mineral/wood, +/area/virtual_domain/safehouse) "x" = ( /obj/structure/railing/corner/end{ dir = 4 @@ -68,7 +72,7 @@ G i G G -G +w "} (2,1,1) = {" i diff --git a/_maps/shuttles/arrival_delta.dmm b/_maps/shuttles/arrival_delta.dmm index 0fca873aaa13e4..649c16bdcf4dba 100644 --- a/_maps/shuttles/arrival_delta.dmm +++ b/_maps/shuttles/arrival_delta.dmm @@ -242,7 +242,7 @@ pixel_x = 3; pixel_y = 3 }, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/shuttle/arrival) diff --git a/_maps/shuttles/emergency_casino.dmm b/_maps/shuttles/emergency_casino.dmm index 3992fd2134869e..95996a80d38f14 100644 --- a/_maps/shuttles/emergency_casino.dmm +++ b/_maps/shuttles/emergency_casino.dmm @@ -1146,7 +1146,7 @@ "MS" = ( /obj/structure/mop_bucket, /obj/item/mop, -/mob/living/simple_animal/bot/cleanbot, +/mob/living/basic/bot/cleanbot, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "MT" = ( @@ -1262,7 +1262,7 @@ /turf/open/floor/carpet/green, /area/shuttle/escape) "PP" = ( -/mob/living/simple_animal/bot/medbot{ +/mob/living/basic/bot/medbot{ name = "\improper emergency medibot"; pixel_x = -3; pixel_y = 2 diff --git a/_maps/shuttles/emergency_cere.dmm b/_maps/shuttles/emergency_cere.dmm index 07e236344ab936..dccdcc4b139fe5 100644 --- a/_maps/shuttles/emergency_cere.dmm +++ b/_maps/shuttles/emergency_cere.dmm @@ -455,7 +455,7 @@ /turf/open/floor/iron, /area/shuttle/escape) "ch" = ( -/mob/living/simple_animal/bot/medbot{ +/mob/living/basic/bot/medbot{ name = "Speedy* Recovery" }, /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ diff --git a/_maps/shuttles/emergency_cruise.dmm b/_maps/shuttles/emergency_cruise.dmm index 34c10f53043a83..aa4364858e12c6 100644 --- a/_maps/shuttles/emergency_cruise.dmm +++ b/_maps/shuttles/emergency_cruise.dmm @@ -1,844 +1,2343 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aY" = ( +"ab" = ( +/obj/effect/turf_decal/trimline/blue/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/blue/mid_joiner{ + dir = 1 + }, +/obj/machinery/stasis, +/turf/open/floor/iron/white/smooth_large, +/area/shuttle/escape) +"ak" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"as" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 1 + }, +/turf/template_noop, +/area/shuttle/escape) +"at" = ( +/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/lavendergrass/style_random, +/obj/structure/flora/bush/flowers_yw/style_random, +/turf/open/floor/grass, +/area/shuttle/escape) +"av" = ( +/obj/machinery/status_display/evac/directional/south, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"aD" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 6 + }, +/turf/template_noop, +/area/shuttle/escape) +"ba" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/delivery/white, +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"bn" = ( +/obj/machinery/door/airlock/shuttle{ + name = "Upper Floors" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/turf/open/floor/catwalk_floor/iron_dark, +/area/shuttle/escape) +"bX" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/carpet/red, +/area/shuttle/escape) +"cA" = ( +/obj/structure/lattice/catwalk, +/obj/structure/closet/lasertag/blue, +/turf/template_noop, +/area/shuttle/escape) +"cB" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"cK" = ( +/obj/structure/lattice/catwalk, +/obj/structure/closet/lasertag/red, +/turf/template_noop, +/area/shuttle/escape) +"cO" = ( +/obj/structure/chair/sofa/corp{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/carpet/executive, +/area/shuttle/escape) +"cQ" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 9 + }, +/turf/template_noop, +/area/shuttle/escape) +"cY" = ( +/obj/machinery/smartfridge/food, +/obj/effect/turf_decal/bot_white, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark/smooth_large, +/area/shuttle/escape) +"dg" = ( +/obj/structure/table/reinforced, +/obj/machinery/reagentgrinder{ + pixel_y = 12; + pixel_x = -4 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = 7; + pixel_y = 7 + }, +/obj/item/reagent_containers/cup/beaker/large, +/obj/item/reagent_containers/cup/rag{ + pixel_x = 6 + }, +/turf/open/floor/iron/kitchen/herringbone, +/area/shuttle/escape) +"dp" = ( +/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/co2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/shuttle/escape) +"du" = ( +/obj/effect/turf_decal/trimline/blue/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/blue/mid_joiner, +/obj/effect/turf_decal/trimline/blue/mid_joiner{ + dir = 4 + }, +/mob/living/basic/bot/medbot/stationary, +/turf/open/floor/iron/white/smooth_large, +/area/shuttle/escape) +"dw" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/shuttle/escape) +"dE" = ( +/obj/machinery/computer/communications, +/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/shuttle/escape) +"dG" = ( +/obj/machinery/door/airlock/shuttle, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisene1" + }, +/turf/open/floor/noslip, +/area/shuttle/escape) +"dL" = ( +/obj/structure/chair/sofa/corp/corner{ + dir = 1 + }, +/turf/open/floor/carpet/executive, +/area/shuttle/escape) +"dS" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/bed, +/obj/item/bedsheet/nanotrasen, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"ec" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/wood/tile, +/area/shuttle/escape) +"en" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/turf/open/floor/plating, +/area/shuttle/escape) +"es" = ( +/turf/open/floor/iron/kitchen/herringbone, +/area/shuttle/escape) +"ez" = ( +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"eM" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/shuttle/escape) +"eY" = ( +/obj/effect/turf_decal/trimline/blue/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/shuttle/escape) +"eZ" = ( +/obj/structure/sign/directions/medical/directional/north, +/obj/structure/sign/directions/command/directional/north{ + pixel_y = 38 + }, +/obj/structure/sign/directions/arrival/directional/north{ + pixel_y = 26 + }, +/obj/effect/turf_decal/trimline/white/line{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/shuttle/escape) +"fL" = ( +/obj/machinery/vending/boozeomat/all_access, +/turf/open/floor/carpet/executive, +/area/shuttle/escape) +"fY" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"gb" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/trimline/white/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/shuttle/escape) +"gm" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/orange/hidden{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/shuttle/escape) +"gq" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/right/directional/south{ + name = "Treatment Room"; + req_access = list("medical") + }, +/turf/open/floor/iron/white, +/area/shuttle/escape) +"gJ" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Captain's Quarters Privacy Shutters"; + dir = 8; + id = "cqpriv" + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/item/paper_bin, +/obj/item/pen, +/turf/open/floor/iron/dark/smooth_large, +/area/shuttle/escape) +"gL" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"gU" = ( +/obj/effect/turf_decal/trimline/dark_blue/corner, +/turf/open/floor/iron, +/area/shuttle/escape) +"gY" = ( +/obj/structure/chair/sofa/corp{ + dir = 1 + }, +/obj/machinery/status_display/evac/directional/south, +/turf/open/floor/carpet/executive, +/area/shuttle/escape) +"hf" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"hi" = ( +/obj/structure/sign/poster/official/here_for_your_safety/directional/east, +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/shuttle/escape) +"hp" = ( +/obj/machinery/door/airlock/command{ + name = "Corporate Lounge" + }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"hB" = ( +/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" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"hH" = ( +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/obj/machinery/vending/wallmed/directional/west, +/turf/open/floor/iron, +/area/shuttle/escape) +"hL" = ( +/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/ferny/style_random, +/obj/structure/flora/bush/jungle/a/style_random, +/turf/open/floor/grass, +/area/shuttle/escape) +"hR" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 5 + }, +/obj/machinery/computer/crew{ + dir = 8 + }, +/turf/open/floor/iron, +/area/shuttle/escape) +"ie" = ( +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/shuttle/escape) +"ii" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/carpet/red, +/area/shuttle/escape) +"ij" = ( +/obj/machinery/door/airlock/shuttle, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisene2" + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"ik" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"il" = ( +/obj/structure/chair/stool/bar/directional/north, +/turf/open/floor/carpet/red, +/area/shuttle/escape) +"ix" = ( +/obj/machinery/jukebox, +/turf/open/floor/iron, +/area/shuttle/escape) +"iA" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/delivery/white, +/obj/structure/sign/warning/vacuum/directional/north, +/obj/structure/tank_dispenser, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"iR" = ( +/obj/machinery/status_display/evac/directional/south, +/turf/open/floor/iron, +/area/shuttle/escape) +"je" = ( +/obj/machinery/button/door/directional/west{ + id = "cqpriv"; + name = "Privacy Shutters Control" + }, +/obj/effect/turf_decal/siding/wood/end{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"jt" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/escape) +"jy" = ( +/obj/machinery/sleeper{ + dir = 8 + }, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"jz" = ( +/obj/machinery/computer/emergency_shuttle, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/shuttle/escape) +"jF" = ( +/obj/machinery/door/airlock/shuttle, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisesw2" + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"jL" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/delivery/white, +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"jU" = ( +/obj/machinery/button{ + name = "Lift Call Button"; + pixel_y = 24; + req_access = list("cent_captain") + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/shuttle/escape) +"kd" = ( +/turf/template_noop, +/area/template_noop) +"kh" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/obj/effect/turf_decal/trimline/white/warning{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"ki" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/shuttle/escape) +"kn" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/sign/poster/official/moth_epi/directional/west, +/turf/open/floor/iron/white, +/area/shuttle/escape) +"ku" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner, +/turf/open/floor/iron/white, +/area/shuttle/escape) +"ky" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/door/window/brigdoor/right/directional/north{ + name = "Captain's Bed"; + req_access = list("captain") + }, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"kz" = ( +/obj/machinery/vending/cola/pwr_game, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron, +/area/shuttle/escape) +"kC" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Captain's Quarters Privacy Shutters"; + dir = 8; + id = "cqpriv" + }, +/obj/machinery/door/window/brigdoor/left/directional/west{ + name = "Captain's Desk"; + req_access = list("captain") + }, +/obj/item/folder/blue, +/turf/open/floor/iron/dark/smooth_large, +/area/shuttle/escape) +"kP" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"kV" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/kitchen/herringbone, +/area/shuttle/escape) +"le" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 6 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/shuttle/escape) +"lq" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/mineral/titanium, +/area/shuttle/escape) +"lu" = ( +/obj/effect/turf_decal/trimline/blue/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/blue/mid_joiner{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table/reinforced, +/obj/item/book/manual/wiki/surgery, +/obj/item/stack/medical/mesh/advanced, +/obj/item/stack/medical/gauze/twelve, +/obj/item/stack/medical/suture/medicated, +/turf/open/floor/iron/white/smooth_large, +/area/shuttle/escape) +"lw" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/shuttle/escape) +"lz" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/shuttle/escape) +"lF" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"lP" = ( +/obj/machinery/door/airlock/shuttle, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisenw1" + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"ma" = ( +/obj/machinery/door/airlock/shuttle, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisesw2" + }, +/turf/open/floor/noslip, +/area/shuttle/escape) +"mj" = ( +/obj/structure/sink/kitchen/directional/west, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/kitchen/herringbone, +/area/shuttle/escape) +"mk" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/shuttle/escape) +"mr" = ( +/obj/structure/table/reinforced, +/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ + pixel_y = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"mB" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 4 + }, +/turf/open/floor/carpet/executive, +/area/shuttle/escape) +"mN" = ( +/obj/machinery/door/airlock/shuttle, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisene1" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/noslip, +/area/shuttle/escape) +"mR" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/corner{ + dir = 1 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/shuttle/escape) +"mW" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/delivery/white, +/obj/structure/closet/firecloset/full, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"nb" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 4 + }, +/turf/template_noop, +/area/shuttle/escape) +"ng" = ( +/obj/machinery/button{ + name = "Lift Call Button"; + pixel_y = -41; + req_access = list("cent_captain") + }, +/obj/item/paper{ + default_raw_text = "The lift to the dorms is currently down for maintenance. Nanotrasen is sorry for any inconveniences this may cause."; + name = "Lift Notice" + }, +/obj/structure/noticeboard/directional/south{ + pixel_y = -26 + }, +/turf/open/floor/iron, +/area/shuttle/escape) +"ni" = ( +/turf/open/floor/light/colour_cycle/dancefloor_b, +/area/shuttle/escape) +"nk" = ( +/obj/structure/chair/wood, +/turf/open/floor/carpet/red, +/area/shuttle/escape) +"nq" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"nM" = ( +/obj/machinery/status_display/ai/directional/west, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/shuttle/escape) +"nP" = ( +/obj/machinery/washing_machine, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/bot_white, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"nQ" = ( +/obj/machinery/oven/range, +/obj/effect/turf_decal/bot_red, +/turf/open/floor/iron/dark/smooth_large, +/area/shuttle/escape) +"od" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/flashlight/flare/candle{ + pixel_y = 6 + }, +/turf/open/floor/carpet/red, +/area/shuttle/escape) +"oe" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"on" = ( +/obj/machinery/status_display/evac/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"oA" = ( +/obj/structure/sign/nanotrasen{ + pixel_x = -32; + pixel_y = 32 + }, +/turf/open/floor/carpet/red, +/area/shuttle/escape) +"oB" = ( +/obj/item/toy/plush/lizard_plushie/green{ + name = "Hides-On-Shuttle" + }, +/turf/open/floor/plating/elevatorshaft, +/area/shuttle/escape) +"oW" = ( +/obj/effect/turf_decal/loading_area/white{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"px" = ( +/obj/machinery/vending/coffee, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron, +/area/shuttle/escape) +"pI" = ( +/obj/effect/turf_decal/loading_area/white{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"qb" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/disposaloutlet{ + name = "dirty dishposal outlet" + }, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron/dark/smooth_large, +/area/shuttle/escape) +"qc" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"qm" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/anesthetic_mix, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"qp" = ( +/obj/effect/turf_decal/trimline/white/line{ + dir = 10 + }, +/turf/open/floor/iron, +/area/shuttle/escape) +"qt" = ( +/turf/open/floor/iron, +/area/shuttle/escape) +"qM" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/corner{ + dir = 1 + }, +/obj/structure/chair/office/tactical{ + dir = 8 + }, +/turf/open/floor/iron, +/area/shuttle/escape) +"qV" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/shuttle/escape) +"qX" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"rc" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/delivery/white, +/obj/structure/closet/firecloset/full, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"rd" = ( +/obj/structure/chair/sofa/middle/maroon, +/turf/open/floor/wood/tile, +/area/shuttle/escape) +"rz" = ( +/obj/machinery/computer/records/security{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 9 + }, +/turf/open/floor/iron, +/area/shuttle/escape) +"rC" = ( +/obj/effect/turf_decal/loading_area/white{ + dir = 4 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"rG" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/obj/structure/table/optable, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/white, +/area/shuttle/escape) +"rJ" = ( +/obj/effect/turf_decal/caution/red{ + dir = 4; + pixel_x = 18 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"rM" = ( +/obj/machinery/vending/snack, +/turf/open/floor/iron, +/area/shuttle/escape) +"rU" = ( +/obj/structure/chair/stool/bar/directional/west, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/carpet/red, +/area/shuttle/escape) +"sr" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"sz" = ( +/obj/machinery/shuttle_manipulator{ + desc = "A holographic display of the cruise shuttle we're on right now."; + layer = 2.7; + max_integrity = 99999; + name = "shuttle holographic display" + }, +/turf/open/floor/carpet/executive, +/area/shuttle/escape) +"sK" = ( +/obj/structure/chair/sofa/right/maroon{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/shuttle/escape) +"sW" = ( +/obj/machinery/power/shuttle_engine/huge, +/turf/open/floor/plating/airless, +/area/shuttle/escape) +"sZ" = ( +/obj/structure/sign/directions/engineering/directional/east, +/obj/structure/rack, +/obj/effect/turf_decal/trimline/brown/filled/corner, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"ta" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/chair/office/light{ + dir = 8 + }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"tk" = ( +/obj/machinery/door/airlock/command{ + name = "Bridge" + }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, +/turf/open/floor/iron/textured_half, +/area/shuttle/escape) +"tp" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/shuttle/escape) +"tC" = ( +/obj/machinery/door/airlock/shuttle, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisenw2" + }, +/turf/open/floor/noslip, +/area/shuttle/escape) +"tG" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/stairs/medium, +/area/shuttle/escape) +"tP" = ( +/obj/structure/sign/directions/command/directional/north{ + pixel_y = 38 + }, +/obj/structure/sign/directions/arrival/directional/north{ + pixel_y = 26 + }, +/obj/structure/sign/directions/medical/directional/east{ + pixel_x = 0; + pixel_y = 32 + }, +/obj/effect/turf_decal/trimline/white/line{ + dir = 4 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/shuttle/escape) +"tT" = ( +/obj/structure/railing, +/turf/open/floor/carpet/red, +/area/shuttle/escape) +"tZ" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/flashlight/flare/candle{ + pixel_x = 1; + pixel_y = 10 + }, +/turf/open/floor/carpet/red, +/area/shuttle/escape) +"uo" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/effect/turf_decal/trimline/white/warning{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"ur" = ( +/obj/structure/table/reinforced, +/obj/machinery/processor{ + pixel_y = 12 + }, +/turf/open/floor/iron/kitchen/herringbone, +/area/shuttle/escape) +"ut" = ( +/obj/effect/turf_decal/delivery/white, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"uu" = ( +/mob/living/simple_animal/hostile/alien/maid/barmaid, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"uy" = ( +/obj/machinery/washing_machine, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"uN" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/shuttle/escape) +"uR" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"uU" = ( +/obj/machinery/door/airlock/shuttle, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisesw1" + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"uV" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/escape) +"vn" = ( +/obj/structure/chair/sofa/left/maroon, +/obj/structure/sign/warning/yes_smoking/circle/directional/north, +/turf/open/floor/wood/tile, +/area/shuttle/escape) +"vw" = ( +/obj/machinery/cryo_cell{ + dir = 8 + }, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"vy" = ( +/obj/machinery/door/airlock/shuttle{ + name = "Outdoor Play Area" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisefun" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/structure/barricade/wooden/crude, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/noslip, +/area/shuttle/escape) +"vA" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet/red, +/area/shuttle/escape) +"vJ" = ( +/obj/machinery/door/airlock/shuttle{ + name = "Laundry Room" + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"vR" = ( +/obj/structure/reagent_dispensers/plumbed, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/smooth_large, +/area/shuttle/escape) +"vW" = ( +/obj/machinery/door/airlock/shuttle, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisesw1" + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"vX" = ( +/obj/machinery/door/airlock/command{ + name = "Captain's Quarters" + }, +/obj/effect/mapping_helpers/airlock/access/any/command/captain, +/obj/effect/turf_decal/trimline/dark_blue/arrow_cw{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/arrow_ccw{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/corner, +/turf/open/floor/iron, +/area/shuttle/escape) +"vZ" = ( +/obj/structure/lattice/catwalk{ + name = "Industrial Lift" + }, +/obj/item/paper{ + default_raw_text = "Hey, Engineer. Lift is broken. We try to fix but could not. Sorry for troubles."; + name = "Engineering Notice" + }, +/turf/open/floor/plating/elevatorshaft, +/area/shuttle/escape) +"wb" = ( +/obj/machinery/button/door/directional/north{ + id = "cruisekitchen"; + name = "Kitchen Shutter Control" + }, +/obj/machinery/vending/dinnerware, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/smooth_large, +/area/shuttle/escape) +"wj" = ( +/obj/machinery/door/airlock/shuttle{ + name = "Portside Lounge" + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"wl" = ( +/obj/structure/table/reinforced, +/obj/machinery/chem_dispenser/drinks/fullupgrade{ + dir = 8 + }, +/turf/open/floor/carpet/executive, +/area/shuttle/escape) +"wJ" = ( +/obj/effect/turf_decal/loading_area/white{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"xj" = ( +/turf/open/floor/plating/airless, +/area/shuttle/escape) +"xx" = ( +/obj/machinery/vending/cola/red, +/turf/open/floor/iron, +/area/shuttle/escape) +"xH" = ( +/obj/structure/sign/directions/engineering/directional/west, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 8 + }, +/obj/machinery/light/small/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"xL" = ( +/obj/effect/turf_decal/loading_area/white{ + dir = 8 + }, +/obj/machinery/light/small/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"yc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/modular_computer/preset/command{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"ye" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/flashlight/flare/candle{ + pixel_y = 10 + }, +/turf/open/floor/carpet/red, +/area/shuttle/escape) +"yC" = ( +/turf/open/floor/carpet/executive, +/area/shuttle/escape) +"yS" = ( +/obj/machinery/door/airlock/shuttle{ + name = "Outdoor Play Area" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisefun" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/structure/barricade/wooden/crude, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"ze" = ( +/obj/effect/turf_decal/loading_area/white{ + dir = 8 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"zf" = ( +/obj/structure/disposaloutlet, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/turf/template_noop, +/area/shuttle/escape) +"zv" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "cruisekitchen" + }, +/obj/machinery/door/window/brigdoor/right/directional/north{ + req_access = list("kitchen") + }, +/turf/open/floor/iron/dark/smooth_large, +/area/shuttle/escape) +"zy" = ( +/obj/machinery/door/airlock/shuttle, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisese2" + }, +/turf/open/floor/noslip, +/area/shuttle/escape) +"zA" = ( +/obj/structure/table/reinforced, +/obj/item/food/dough, +/obj/item/food/dough, +/obj/item/food/dough, +/turf/open/floor/iron/kitchen/herringbone, +/area/shuttle/escape) +"zE" = ( +/obj/structure/sign/poster/official/work_for_a_future/directional/west, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/shuttle/escape) +"zH" = ( +/obj/machinery/duct, +/obj/structure/sign/warning/no_smoking/circle/directional/west, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/kitchen/herringbone, +/area/shuttle/escape) +"zP" = ( +/obj/machinery/power/shuttle_engine/heater{ + icon_state = "router" + }, +/turf/open/floor/plating/airless, +/area/shuttle/escape) +"zW" = ( +/obj/effect/turf_decal/trimline/white/line{ + dir = 4 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/shuttle/escape) +"zX" = ( +/obj/effect/turf_decal/trimline/white/line{ + dir = 6 + }, +/turf/open/floor/iron, +/area/shuttle/escape) +"Am" = ( +/obj/structure/sign/directions/dorms/directional/south, +/turf/open/floor/iron, +/area/shuttle/escape) +"Av" = ( +/obj/structure/railing, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/stairs{ + dir = 8 + }, +/area/shuttle/escape) +"AD" = ( +/obj/machinery/door/airlock/shuttle, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisesw1" + }, +/turf/open/floor/noslip, +/area/shuttle/escape) +"AF" = ( +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"AL" = ( +/obj/structure/table/reinforced, +/obj/machinery/chem_dispenser/drinks/fullupgrade{ + pixel_y = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"Bb" = ( +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 6 + }, +/obj/structure/table/reinforced, +/obj/item/wrench/medical{ + pixel_x = -5 + }, +/obj/item/reagent_containers/cup/beaker/cryoxadone{ + pixel_x = 9; + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/beaker/cryoxadone{ + pixel_x = 6; + pixel_y = 10 + }, +/turf/open/floor/iron/white, +/area/shuttle/escape) +"Bd" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/wood/tile, +/area/shuttle/escape) +"Bm" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"Bn" = ( +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Bv" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/delivery/white, +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Bw" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "cruisekitchen" + }, +/obj/machinery/door/window/brigdoor/left/directional/north{ + req_access = list("kitchen") + }, +/turf/open/floor/iron/dark/smooth_large, +/area/shuttle/escape) +"By" = ( +/obj/machinery/door/airlock/shuttle, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisene1" + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Bz" = ( +/obj/structure/table/reinforced, +/obj/machinery/microwave{ + pixel_y = 8 + }, +/obj/effect/turf_decal/bot_red, +/turf/open/floor/iron/dark/smooth_large, +/area/shuttle/escape) +"BF" = ( /obj/machinery/door/airlock/shuttle, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisese1" + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"BI" = ( +/obj/structure{ + density = 1; + icon = 'icons/obj/machines/shuttle_manipulator.dmi'; + icon_state = "hologram_on"; + layer = 2.8; + light_color = "#2cb2e8"; + light_range = 2; + max_integrity = 7500; + mouse_opacity = 0; + name = "holographic projection"; + pixel_x = -32; + pixel_y = 17 + }, +/obj/structure{ + desc = "This is the shuttle we're on. It's amazing what Nanotrasen can do once they actually put more than ten seconds of effort into their projects."; + icon = 'icons/obj/machines/shuttle_manipulator.dmi'; + icon_state = "hologram_whiteship"; + layer = 4; + light_color = "#2cb2e8"; + light_range = 7; + max_integrity = 75000; + name = "Cruise Shuttle Hologram"; + pixel_x = -32; + pixel_y = 27 + }, +/turf/open/floor/carpet/executive, +/area/shuttle/escape) +"BZ" = ( +/obj/machinery/duct, +/turf/open/floor/iron/kitchen/herringbone, +/area/shuttle/escape) +"Cl" = ( +/obj/structure/chair/stool/bar/directional/east, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/open/floor/carpet/red, +/area/shuttle/escape) +"Cm" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ dir = 8 }, -/turf/open/floor/wood, +/turf/template_noop, +/area/shuttle/escape) +"Cr" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer, +/turf/open/floor/iron/dark/small, /area/shuttle/escape) -"ca" = ( -/obj/machinery/vending/cola, -/turf/open/floor/wood, +"Cu" = ( +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark, /area/shuttle/escape) -"cf" = ( -/obj/effect/turf_decal/tile/blue{ +"CN" = ( +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/iron/white, +/turf/closed/wall/mineral/titanium, /area/shuttle/escape) -"cu" = ( -/obj/machinery/vending/cola/red, -/turf/open/floor/wood, +"Dx" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, /area/shuttle/escape) -"cz" = ( -/obj/structure/table/wood/fancy, -/obj/item/food/nachos, -/obj/item/food/honeybun{ - pixel_x = 3; - pixel_y = 13 +"DA" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/wood, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/wood, +/obj/effect/fun_balloon/sentience/emergency_shuttle{ + group_name = "bar staff on the NTTS Independence" + }, +/turf/open/floor/wood/parquet, /area/shuttle/escape) -"cZ" = ( -/obj/item/toy/plush/lizard_plushie/green{ - name = "Hides-On-Shuttle" +"DF" = ( +/obj/machinery/door/airlock/shuttle{ + name = "Cargo Hold" }, -/turf/open/floor/wood, +/obj/effect/mapping_helpers/airlock/access/any/supply/general, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/turf/open/floor/iron/dark, /area/shuttle/escape) -"dd" = ( -/obj/machinery/light/directional/north, -/obj/machinery/computer/records/medical, -/obj/effect/turf_decal/tile/blue{ +"DH" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ dir = 8 }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"DK" = ( +/obj/machinery/status_display/ai/directional/south, +/turf/open/floor/iron, +/area/shuttle/escape) +"DL" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/delivery/white, +/obj/structure/closet/firecloset/full, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"DU" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/computer/operating, /turf/open/floor/iron/white, /area/shuttle/escape) -"dQ" = ( -/obj/machinery/door/airlock/shuttle, -/obj/effect/turf_decal/tile/blue/fourcorners, +"DV" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 8 + }, /turf/open/floor/iron/white, /area/shuttle/escape) -"dR" = ( -/obj/machinery/power/shuttle_engine/heater, +"En" = ( +/obj/structure/disposalpipe/segment, /turf/closed/wall/mineral/titanium/nodiagonal, /area/shuttle/escape) -"en" = ( -/obj/effect/spawner/structure/window/reinforced/shuttle, -/turf/open/floor/plating, +"Eu" = ( +/obj/effect/turf_decal/trimline/white/line{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, /area/shuttle/escape) -"fB" = ( -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/drinks{ +"Ew" = ( +/obj/structure/railing{ dir = 8 }, -/turf/open/floor/wood, +/turf/open/floor/iron/stairs/medium, /area/shuttle/escape) -"fI" = ( -/obj/machinery/vending/boozeomat/all_access, -/turf/open/floor/wood, +"EA" = ( +/obj/machinery/griddle, +/obj/effect/turf_decal/bot_red, +/turf/open/floor/iron/dark/smooth_large, /area/shuttle/escape) -"gQ" = ( -/obj/structure/table/wood/fancy, -/turf/open/floor/wood, +"Ff" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/status_display/evac/directional/south, +/turf/open/floor/iron/dark, /area/shuttle/escape) -"iO" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/cup/glass/mug/britcup{ - pixel_x = 8; - pixel_y = -1 +"Fp" = ( +/obj/structure/railing/corner{ + dir = 1 }, -/obj/item/storage/medkit/regular{ - pixel_x = -9; - pixel_y = 3 +/turf/open/floor/iron, +/area/shuttle/escape) +"Fu" = ( +/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/lavendergrass/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/shuttle/escape) +"FA" = ( +/obj/machinery/door/airlock/shuttle, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisesw2" }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +/turf/open/floor/noslip, /area/shuttle/escape) -"iP" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +"FD" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron, /area/shuttle/escape) -"jt" = ( -/turf/closed/wall/mineral/titanium, +"FH" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing, +/turf/template_noop, /area/shuttle/escape) -"ju" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 +"Gg" = ( +/obj/structure/lattice/catwalk, +/obj/structure/barricade/sandbags, +/obj/structure/railing{ + dir = 1 }, -/turf/open/floor/iron/white, +/turf/template_noop, /area/shuttle/escape) -"jP" = ( -/obj/machinery/light/directional/north, -/obj/machinery/computer/records/security, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 1 +"GA" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron/white, +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 6 + }, +/turf/open/floor/iron/dark/smooth_large, /area/shuttle/escape) -"jT" = ( -/obj/item/kirbyplants/photosynthetic, -/turf/open/floor/iron/white, +"GD" = ( +/obj/machinery/door/airlock/shuttle, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisene1" + }, +/turf/open/floor/iron/dark, /area/shuttle/escape) -"kd" = ( -/turf/template_noop, -/area/template_noop) -"kE" = ( -/obj/structure/table/wood/fancy, -/obj/item/flashlight/flare/candle/infinite{ - desc = "A synthetic candle that won't melt down."; - name = "crimson red candle"; - pixel_x = 1; - pixel_y = 6 +"GZ" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/flashlight/flare/candle{ + pixel_y = 8; + pixel_x = -1 }, -/turf/open/floor/wood, +/turf/open/floor/carpet/red, /area/shuttle/escape) -"kJ" = ( -/obj/structure/table/wood/fancy, -/obj/item/food/burger/baconburger{ - pixel_x = 3 +"Hk" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Captain's Quarters Privacy Shutters"; + dir = 8; + id = "cqpriv" }, -/obj/item/food/cracker{ - pixel_x = -13; - pixel_y = 9 +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/recharger, +/turf/open/floor/iron/dark/smooth_large, +/area/shuttle/escape) +"HD" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"HH" = ( +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 1 }, -/turf/open/floor/wood, +/turf/open/floor/iron, /area/shuttle/escape) -"kQ" = ( -/obj/structure/table/reinforced, -/obj/item/clipboard, -/obj/item/folder/red, -/obj/item/pen/red, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ +"HK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ dir = 8 }, -/obj/effect/turf_decal/tile/blue{ +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ dir = 4 }, /turf/open/floor/iron/white, /area/shuttle/escape) -"lg" = ( -/obj/machinery/computer/station_alert{ - desc = "Used to access the shuttle's automated alert system."; - dir = 8; - name = "ship alert console" +"HR" = ( +/obj/item/paper{ + default_raw_text = "Due to safety hazards, the outdoor laser tag arena has been closed until further notice."; + name = "NOTICE" }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, -/obj/effect/turf_decal/tile/blue{ - dir = 1 +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Ig" = ( +/obj/structure/closet/secure_closet/freezer/kitchen, +/obj/effect/turf_decal/trimline/white/warning{ + dir = 8 }, -/obj/machinery/light/directional/south, -/turf/open/floor/iron/white, +/turf/open/floor/iron/dark, /area/shuttle/escape) -"lJ" = ( -/obj/structure/table/reinforced, -/obj/item/camera{ - pixel_y = 3 +"IO" = ( +/obj/structure/railing/corner{ + dir = 8 }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +/turf/open/floor/carpet/red, /area/shuttle/escape) -"mv" = ( -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 1 +"IR" = ( +/obj/structure/chair/sofa/corner/maroon{ + dir = 4 }, -/turf/open/floor/iron/white, +/obj/machinery/light/small/directional/north, +/turf/open/floor/wood/tile, /area/shuttle/escape) -"mw" = ( -/mob/living/simple_animal/hostile/alien/maid/barmaid, -/turf/open/floor/wood, +"Ja" = ( +/obj/effect/turf_decal/trimline/white/line{ + dir = 1 + }, +/turf/open/floor/iron, /area/shuttle/escape) -"mG" = ( -/obj/machinery/computer/communications, -/obj/effect/turf_decal/tile/blue/fourcorners, +"Jc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/iron/white, /area/shuttle/escape) -"ni" = ( -/turf/open/floor/light/colour_cycle/dancefloor_b, -/area/shuttle/escape) -"nU" = ( -/obj/structure/chair/comfy/brown{ - dir = 4 +"Jj" = ( +/obj/structure/sign/directions/supply/directional/south, +/obj/effect/turf_decal/trimline/white/line{ + dir = 1 }, -/turf/open/floor/wood, +/turf/open/floor/iron, /area/shuttle/escape) -"oo" = ( +"Jk" = ( +/obj/structure/table/reinforced, +/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ + dir = 8 + }, /obj/machinery/light/directional/east, -/turf/open/floor/wood, -/area/shuttle/escape) -"oQ" = ( -/obj/machinery/computer/slot_machine, -/turf/open/floor/wood, +/turf/open/floor/carpet/executive, /area/shuttle/escape) -"oZ" = ( -/obj/machinery/computer/crew, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron/white, +"Jl" = ( +/mob/living/simple_animal/bot/vibebot, +/turf/open/floor/iron, /area/shuttle/escape) -"qd" = ( -/obj/machinery/computer/warrant, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ +"Jo" = ( +/obj/effect/turf_decal/loading_area/white{ dir = 4 }, -/obj/effect/turf_decal/tile/blue{ +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Jq" = ( +/obj/effect/turf_decal/trimline/white/corner{ dir = 8 }, -/turf/open/floor/iron/white, +/turf/open/floor/iron, /area/shuttle/escape) -"qs" = ( -/obj/structure/statue/diamond/ai1{ - anchored = 1; - name = "statue of an AI hologram" +"JJ" = ( +/obj/structure/chair/wood{ + dir = 8 }, -/obj/machinery/light/directional/south, -/turf/open/floor/iron/white, -/area/shuttle/escape) -"qw" = ( -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +/turf/open/floor/carpet/red, /area/shuttle/escape) -"qE" = ( +"JS" = ( /obj/machinery/door/airlock/shuttle, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisese1" }, -/turf/open/floor/wood, +/turf/open/floor/noslip, /area/shuttle/escape) -"qI" = ( -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/drinks/beer{ - dir = 8 - }, -/turf/open/floor/wood, +"JU" = ( +/obj/structure/sign/poster/official/help_others/directional/west, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, /area/shuttle/escape) -"rp" = ( -/obj/structure/chair/comfy/shuttle{ +"Kn" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/thinplating/dark{ dir = 4 }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/white, +/turf/open/floor/iron/dark, /area/shuttle/escape) -"rw" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 8 +"Kq" = ( +/obj/effect/turf_decal/trimline/white/line{ + dir = 5 }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +/turf/open/floor/iron, /area/shuttle/escape) -"rX" = ( -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 8 +"Kw" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ + dir = 4 }, -/turf/open/floor/iron/white, -/area/shuttle/escape) -"si" = ( -/obj/structure/table/wood/fancy, -/obj/machinery/light/directional/east, -/turf/open/floor/wood, +/obj/structure/chair/office/tactical{ + dir = 1 + }, +/turf/open/floor/iron, /area/shuttle/escape) -"sk" = ( -/obj/structure/chair/comfy/shuttle{ +"KH" = ( +/obj/effect/turf_decal/trimline/white/line{ dir = 4 }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +/turf/open/floor/iron, /area/shuttle/escape) -"sv" = ( -/obj/structure/table/reinforced, -/obj/item/clipboard, -/obj/item/folder/white, -/obj/item/pen/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron/white, +"KR" = ( +/obj/structure/lattice/catwalk, +/obj/structure/barricade/sandbags, +/turf/template_noop, /area/shuttle/escape) -"sW" = ( -/obj/machinery/power/shuttle_engine/huge, -/turf/open/floor/plating/airless, +"KW" = ( +/obj/machinery/deepfryer, +/obj/effect/turf_decal/bot_red, +/turf/open/floor/iron/dark/smooth_large, /area/shuttle/escape) -"tx" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 1; - name = "Shuttle Captain seat" +"KY" = ( +/obj/structure/chair/wood{ + dir = 4 }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +/turf/open/floor/carpet/red, /area/shuttle/escape) -"uV" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, +"La" = ( +/turf/open/floor/carpet/red, /area/shuttle/escape) -"uX" = ( -/obj/machinery/computer/atmos_alert{ - desc = "Used to monitor the shuttle's air alarms."; - dir = 8 +"Ld" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/delivery/white, +/obj/structure/closet/emcloset/anchored, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Ll" = ( +/obj/machinery/disposal/bin{ + name = "dirty dishposal" }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ +/obj/structure/disposalpipe/trunk, +/turf/open/floor/carpet/red, +/area/shuttle/escape) +"Lx" = ( +/obj/machinery/status_display/ai/directional/east, +/obj/effect/turf_decal/trimline/blue/line{ dir = 4 }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/shuttle/escape) -"vq" = ( -/obj/machinery/computer/emergency_shuttle, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +/turf/open/floor/iron, /area/shuttle/escape) -"vL" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/mask/cigarette/robust{ - pixel_x = -4; - pixel_y = 15 - }, -/obj/item/clothing/mask/cigarette/robust{ - pixel_x = 3; - pixel_y = 7 +"Ly" = ( +/obj/machinery/door/window/brigdoor/left/directional/east{ + req_access = list("kitchen"); + name = "Dirty Dish Delivery" }, -/obj/item/clothing/mask/cigarette/robust{ - pixel_x = 7; - pixel_y = 12 +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/delivery/white, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/smooth_large, +/area/shuttle/escape) +"LB" = ( +/obj/effect/turf_decal/trimline/dark_blue/arrow_cw{ + dir = 6 }, -/obj/item/storage/fancy/cigarettes/cigpack_robust{ - pixel_x = -13; - pixel_y = 2 +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 1 }, -/obj/item/lighter/greyscale{ - pixel_x = 6; - pixel_y = -10 +/obj/effect/turf_decal/siding/thinplating{ + dir = 6 }, -/obj/item/cigbutt{ - pixel_x = -8 +/obj/structure/railing, +/turf/open/floor/iron, +/area/shuttle/escape) +"LD" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 }, -/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/medical_kiosk, /turf/open/floor/iron/white, /area/shuttle/escape) -"wf" = ( -/obj/structure/table/wood/fancy, -/obj/item/food/salad/fruit{ - pixel_y = 4 +"LU" = ( +/obj/machinery/door/airlock/shuttle, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisenw2" }, -/turf/open/floor/wood, +/turf/open/floor/iron/dark, /area/shuttle/escape) -"wF" = ( -/obj/machinery/door/window/left/directional/west{ - name = "Bar Door" +"Md" = ( +/obj/structure/railing{ + dir = 4 }, -/turf/open/floor/wood, -/area/shuttle/escape) -"xb" = ( -/mob/living/basic/drone/snowflake/bardrone, -/turf/open/floor/wood, +/turf/open/floor/iron/stairs/right, /area/shuttle/escape) -"xf" = ( -/obj/structure/table/wood/fancy, -/obj/item/food/donkpocket/warm{ - pixel_x = -5; - pixel_y = 14 +"Mg" = ( +/obj/effect/turf_decal/trimline/blue/line{ + dir = 10 }, -/obj/item/food/fries{ - pixel_x = 16; - pixel_y = 11 +/obj/effect/turf_decal/trimline/blue/mid_joiner, +/obj/effect/turf_decal/trimline/blue/mid_joiner{ + dir = 8 }, -/turf/open/floor/wood, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/iv_drip, +/obj/item/reagent_containers/blood/o_minus, +/turf/open/floor/iron/white/smooth_large, /area/shuttle/escape) -"xj" = ( -/turf/open/floor/plating/airless, +"Mt" = ( +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron/dark, /area/shuttle/escape) -"xB" = ( -/obj/structure/table/reinforced, -/obj/item/storage/fancy/donut_box{ - pixel_y = -7 - }, -/obj/item/food/donut/plain{ - pixel_x = 5; - pixel_y = 10 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +"Mv" = ( +/mob/living/basic/drone/snowflake/bardrone, +/turf/open/floor/wood/parquet, /area/shuttle/escape) -"yn" = ( -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 4 +"Mz" = ( +/obj/effect/turf_decal/trimline/white/line{ + dir = 8 }, -/turf/open/floor/iron/white, +/turf/open/floor/iron, /area/shuttle/escape) -"yq" = ( -/obj/machinery/vending/snack/green, -/turf/open/floor/wood, +"MK" = ( +/obj/machinery/door/airlock/shuttle, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisesw1" + }, +/turf/open/floor/noslip, /area/shuttle/escape) -"zm" = ( +"MS" = ( /obj/structure/chair/comfy/shuttle{ - dir = 1; - name = "Shuttle HoP seat" + dir = 8 }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 10 + }, +/turf/open/floor/iron/dark/smooth_large, /area/shuttle/escape) -"Aq" = ( -/obj/structure/table/wood/fancy, -/obj/item/food/cakeslice/chocolate{ - pixel_x = 16; - pixel_y = -8 +"MV" = ( +/obj/structure/railing{ + dir = 8 }, -/obj/item/food/burrito{ - pixel_x = -6; - pixel_y = -4 +/turf/open/floor/iron/stairs/left, +/area/shuttle/escape) +"Nf" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"NA" = ( +/obj/structure/chair/stool/bar/directional/east, +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet/red, +/area/shuttle/escape) +"NF" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/hidden{ + dir = 4 }, -/obj/item/food/baguette{ - pixel_x = 3; - pixel_y = 10 +/turf/closed/wall/mineral/titanium, +/area/shuttle/escape) +"Ok" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 }, -/turf/open/floor/wood, +/obj/item/kirbyplants/random, +/turf/open/floor/wood/parquet, /area/shuttle/escape) -"Bp" = ( -/obj/item/reactive_armour_shell, +"Oq" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/trimline/dark_red/filled/corner{ dir = 1 }, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted, -/turf/open/floor/iron/white, +/obj/machinery/cell_charger, +/turf/open/floor/iron, /area/shuttle/escape) -"Cn" = ( -/obj/machinery/shuttle_manipulator{ - desc = "A holographic display of the cruise shuttle we're on right now."; - layer = 2.7; - max_integrity = 99999; - name = "shuttle holographic display" +"Ox" = ( +/obj/structure/lattice/catwalk{ + name = "Industrial Lift" }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +/obj/machinery/button{ + name = "Lift Button"; + pixel_y = 24; + req_access = list("cent_captain") + }, +/turf/open/floor/plating/elevatorshaft, +/area/shuttle/escape) +"OH" = ( +/obj/structure/railing/corner, +/obj/machinery/light/directional/south, +/turf/open/floor/carpet/red, /area/shuttle/escape) -"Cw" = ( -/obj/machinery/vending/snack/orange, -/turf/open/floor/wood, +"OJ" = ( +/turf/open/floor/light/colour_cycle/dancefloor_a, /area/shuttle/escape) -"CR" = ( +"OT" = ( /obj/machinery/door/airlock/shuttle, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisese2" }, -/obj/docking_port/mobile/emergency{ - name = "The NTSS Independence" +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"OW" = ( +/obj/machinery/status_display/ai/directional/south, +/turf/open/floor/carpet/executive, +/area/shuttle/escape) +"Pm" = ( +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 }, -/turf/open/floor/wood, +/turf/open/floor/iron, /area/shuttle/escape) -"Dn" = ( -/obj/structure/table/reinforced, -/obj/item/camera_film{ - pixel_x = 4; - pixel_y = 4 +"Pv" = ( +/turf/open/floor/plating/elevatorshaft, +/area/shuttle/escape) +"Py" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Infirmary" }, -/obj/item/camera_film{ - pixel_x = -13; - pixel_y = 8 +/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/iron/white/textured, /area/shuttle/escape) -"Dq" = ( -/obj/structure/table/wood/fancy, -/obj/item/food/salad/jungle{ - pixel_y = 4 +"PK" = ( +/obj/machinery/door/airlock/shuttle, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisesw2" }, -/turf/open/floor/wood, +/turf/open/floor/iron/dark, /area/shuttle/escape) -"DJ" = ( -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +"PM" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, /area/shuttle/escape) -"DZ" = ( -/obj/machinery/light/small/directional/south, -/turf/open/floor/wood, +"PO" = ( +/obj/machinery/vending/cigarette/beach, +/turf/open/floor/carpet/executive, /area/shuttle/escape) -"El" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +"Qa" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/trimline/white/line, +/turf/open/floor/iron, /area/shuttle/escape) -"Eo" = ( -/obj/structure/table/reinforced, -/obj/item/toy/figure{ - desc = "A model spaceship, it looks like those used back in the day when travelling to Orion!"; - icon_state = "ship"; - name = "Orion Settler Ship figure"; - pixel_y = -5; - toysay = "Oxygen offline. Weapons charging. All systems nominal."; - toysound = 'sound/mecha/nominal.ogg' - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +"QB" = ( +/turf/open/floor/catwalk_floor/iron_dark, /area/shuttle/escape) -"EC" = ( -/obj/structure/chair/comfy/brown, -/turf/open/floor/wood, +"QP" = ( +/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_pp/style_random, +/turf/open/floor/grass, /area/shuttle/escape) -"EH" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 +"Ra" = ( +/obj/machinery/door/airlock/shuttle{ + name = "Kitchen" }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/white, +/obj/effect/mapping_helpers/airlock/access/any/service/kitchen, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"Rm" = ( +/obj/structure/sign/poster/official/get_your_legs/directional/east, +/obj/machinery/light/directional/east, +/turf/open/floor/iron, /area/shuttle/escape) -"Fx" = ( -/obj/structure/statue/diamond/ai2{ - anchored = 1; - name = "statue of an AI core." +"Rz" = ( +/obj/machinery/door/airlock/shuttle, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisene2" }, -/obj/machinery/light/directional/south, -/turf/open/floor/iron/white, +/turf/open/floor/noslip, /area/shuttle/escape) -"FR" = ( -/obj/machinery/computer/aifixer{ - dir = 4 +"RY" = ( +/obj/docking_port/mobile/emergency{ + name = "The NTSS Independence" }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ - dir = 1 +/obj/machinery/door/airlock/shuttle, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisenw1" }, -/turf/open/floor/iron/white, +/turf/open/floor/noslip, /area/shuttle/escape) -"FS" = ( -/obj/machinery/door/airlock/command/glass{ - name = "Cockpit" +"RZ" = ( +/obj/machinery/door/poddoor{ + name = "Lift Access" }, -/obj/effect/mapping_helpers/airlock/access/all/command/general, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +/turf/open/floor/noslip, /area/shuttle/escape) -"Gv" = ( -/obj/structure{ - density = 1; - icon = 'icons/obj/machines/shuttle_manipulator.dmi'; - icon_state = "hologram_on"; - layer = 2.8; - light_color = "#2cb2e8"; - light_range = 2; - max_integrity = 7500; - mouse_opacity = 0; - name = "holographic projection"; - pixel_x = -32; - pixel_y = 17 - }, -/obj/structure{ - desc = "This is the shuttle we're on. It's amazing what Nanotrasen can do once they actually put more than ten seconds of effort into their projects."; - icon = 'icons/obj/machines/shuttle_manipulator.dmi'; - icon_state = "hologram_whiteship"; - layer = 4; - light_color = "#2cb2e8"; - light_range = 7; - max_integrity = 75000; - name = "Cruise Shuttle Hologram"; - pixel_x = -32; - pixel_y = 27 +"Sb" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +/obj/structure/sign/warning/deathsposal/directional/north, +/obj/effect/turf_decal/delivery/white, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, /area/shuttle/escape) -"Ho" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 1; - name = "shuttle CMO seat" +"Si" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 8 }, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 4 }, +/obj/machinery/light/directional/south, /turf/open/floor/iron/white, /area/shuttle/escape) -"HA" = ( -/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +"Sm" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/orange/hidden{ + dir = 6 + }, /turf/open/floor/iron/white, /area/shuttle/escape) -"IL" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4; - name = "Shuttle CE seat" +"SW" = ( +/obj/structure/lattice/catwalk, +/turf/template_noop, +/area/shuttle/escape) +"SY" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Tb" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/components/unary/passive_vent{ + name = "carbon dioxide exhaust"; + dir = 8 }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 1 +/turf/template_noop, +/area/shuttle/escape) +"Td" = ( +/obj/machinery/power/shuttle_engine/heater, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/plating/airless, +/area/shuttle/escape) +"Tj" = ( +/obj/machinery/door/airlock/shuttle, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisenw1" }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron/white, +/turf/open/floor/noslip, /area/shuttle/escape) -"Kc" = ( -/obj/item/kirbyplants/photosynthetic, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/white, +"Tp" = ( +/obj/effect/turf_decal/trimline/white/line, +/turf/open/floor/iron, /area/shuttle/escape) -"Ki" = ( -/obj/structure/chair/comfy/shuttle{ +"Tv" = ( +/obj/effect/turf_decal/loading_area/white{ dir = 8 }, -/turf/open/floor/iron/white, +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, /area/shuttle/escape) -"KB" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 1; - name = "Shuttle HoS seat" +"Tz" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/wood, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/turf_decal/tile/red/anticorner/contrasted, -/obj/effect/turf_decal/tile/blue{ +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"TB" = ( +/obj/effect/turf_decal/trimline/blue/corner, +/turf/open/floor/iron, +/area/shuttle/escape) +"TG" = ( +/obj/machinery/smartfridge/drinks, +/obj/effect/turf_decal/siding/wood{ dir = 1 }, -/turf/open/floor/iron/white, -/area/shuttle/escape) -"KD" = ( -/turf/open/floor/iron/white, +/turf/open/floor/wood/parquet, /area/shuttle/escape) -"KM" = ( -/obj/machinery/modular_computer/preset/research{ - dir = 4 +"Uj" = ( +/obj/machinery/door/airlock/shuttle, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "cruisene2" }, -/obj/effect/turf_decal/tile/blue{ +/turf/open/floor/noslip, +/area/shuttle/escape) +"Um" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ +/obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 }, -/obj/machinery/light/directional/south, +/obj/machinery/vending/wallmed/directional/east{ + name = "\improper NanoMed" + }, /turf/open/floor/iron/white, /area/shuttle/escape) -"KS" = ( -/obj/structure/chair/comfy/shuttle{ +"Up" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/trimline/blue/line{ dir = 8 }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/white, +/turf/open/floor/iron, /area/shuttle/escape) -"KU" = ( -/obj/structure/showcase/mecha/marauder{ - desc = "A stand with an empty old Nanotrasen Corporation combat mech bolted to it. The marauder is described as the premier unit used to defend corporate interests and employees."; - dir = 4; - max_integrity = 2500; - name = "marauder mech exhibit" +"Uq" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/chair/sofa/bench/left{ + dir = 4 }, -/turf/open/floor/iron/white, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark, /area/shuttle/escape) -"Lo" = ( -/obj/structure/table/wood/fancy, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = -3; - pixel_y = 6 +"Ut" = ( +/obj/structure/sign/directions/dorms/directional/south{ + pixel_y = -38 }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = 6; - pixel_y = 14 +/obj/structure/sign/directions/supply/directional/south, +/obj/structure/sign/directions/medical/directional/south{ + pixel_y = -26 }, -/turf/open/floor/wood, +/turf/open/floor/iron, /area/shuttle/escape) -"LM" = ( -/obj/structure/table/reinforced, -/obj/item/book/bible/booze{ - pixel_x = -3; - pixel_y = 4 - }, -/obj/item/taperecorder{ - pixel_x = 15; - pixel_y = 4 +"Ux" = ( +/obj/structure/table/wood/fancy/black, +/turf/open/floor/iron, +/area/shuttle/escape) +"Uy" = ( +/obj/structure/chair/stool/bar/directional/west, +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet/red, +/area/shuttle/escape) +"UO" = ( +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/trimline/white/line{ + dir = 8 }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +/turf/open/floor/iron, /area/shuttle/escape) -"Me" = ( -/obj/structure/chair/comfy/brown{ +"UQ" = ( +/obj/structure/chair/wood{ dir = 1 }, -/turf/open/floor/wood, -/area/shuttle/escape) -"MI" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin, -/obj/item/pen/fourcolor, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/shuttle/escape) -"Nv" = ( -/obj/structure/chair/comfy/shuttle, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +/turf/open/floor/carpet/red, /area/shuttle/escape) -"NH" = ( -/obj/structure/chair/comfy/brown{ +"UY" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/thinplating/dark{ dir = 8 }, -/turf/open/floor/wood, +/turf/open/floor/iron/dark, /area/shuttle/escape) -"Oh" = ( -/obj/structure/chair/comfy/shuttle{ +"UZ" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Vs" = ( +/obj/effect/turf_decal/loading_area/white{ dir = 8 }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/white, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"VC" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/closet/crate{ + name = "FUN BOX - PROPERTY OF THE CAPTAIN" + }, +/obj/item/toy/spinningtoy, +/obj/item/toy/figure/engineer, +/obj/item/toy/figure/clown, +/obj/item/toy/figure/mime, +/obj/item/toy/figure/ce, +/obj/item/toy/figure/captain, +/obj/item/toy/figure/hop, +/obj/item/toy/figure/bartender, +/obj/item/toy/figure/chef, +/obj/item/toy/figure/assistant, +/obj/item/toy/cards/deck/cas, +/obj/item/toy/cards/deck/cas/black, +/obj/item/toy/cards/deck, +/obj/item/toy/captainsaid/collector, +/obj/item/toy/ammo/gun, +/obj/item/toy/gun, +/obj/item/toy/nuke, +/obj/item/toy/windup_toolbox, +/obj/item/toy/eightball/haunted, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"VM" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/flashlight/flare/candle{ + pixel_y = 7; + pixel_x = -6 + }, +/turf/open/floor/carpet/red, +/area/shuttle/escape) +"VW" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 1 + }, +/turf/open/floor/carpet/executive, /area/shuttle/escape) -"OJ" = ( -/turf/open/floor/light/colour_cycle/dancefloor_a, +"WC" = ( +/obj/effect/turf_decal/trimline/white/line{ + dir = 9 + }, +/turf/open/floor/iron, /area/shuttle/escape) -"Rf" = ( -/obj/structure/showcase/mecha/marauder{ - desc = "A stand with an empty old Nanotrasen Corporation combat mech bolted to it. The seraph is described as the most valuable unit in defending the VIPs of Nanotrasen."; - dir = 8; - icon_state = "seraph"; - max_integrity = 2500; - name = "seraph mech exhibit" +"WK" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Cryogenics" }, -/turf/open/floor/iron/white, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/effect/mapping_helpers/airlock/unres, +/obj/machinery/atmospherics/pipe/smart/simple/orange/hidden, +/turf/open/floor/iron/white/textured, /area/shuttle/escape) -"So" = ( -/obj/item/storage/cans/sixbeer, -/turf/open/floor/wood, +"WX" = ( +/obj/machinery/status_display/ai, +/turf/closed/wall/mineral/titanium, /area/shuttle/escape) -"Sx" = ( -/obj/structure/table/wood, -/obj/item/coin/iron{ - pixel_x = 4; - pixel_y = -2 - }, -/obj/item/coin/iron{ - pixel_x = -8; - pixel_y = 6 +"WZ" = ( +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 4 }, -/turf/open/floor/wood, +/turf/open/floor/iron, /area/shuttle/escape) -"SK" = ( -/obj/structure/chair/comfy/shuttle{ +"Xa" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/delivery/white, +/obj/structure/closet/firecloset/full, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Xb" = ( +/turf/open/floor/iron/stairs/right, +/area/shuttle/escape) +"Xk" = ( +/obj/structure/lattice/catwalk, +/obj/structure/barricade/sandbags, +/obj/structure/railing, +/turf/template_noop, +/area/shuttle/escape) +"Xu" = ( +/obj/machinery/vending/boozeomat/all_access, +/obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +/turf/open/floor/wood/parquet, /area/shuttle/escape) -"TI" = ( -/obj/structure/chair/comfy/shuttle{ +"XJ" = ( +/obj/structure/sign/directions/command/directional/north, +/turf/open/floor/carpet/red, +/area/shuttle/escape) +"XK" = ( +/obj/machinery/washing_machine, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/iron/white, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark, /area/shuttle/escape) -"Ud" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 8; - name = "Shuttle RD seat" - }, -/obj/effect/turf_decal/tile/blue{ +"XL" = ( +/obj/effect/turf_decal/trimline/blue/corner{ dir = 8 }, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/white, +/turf/open/floor/iron, /area/shuttle/escape) -"Uo" = ( -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +"XN" = ( +/obj/structure/table/reinforced, +/turf/open/floor/wood/tile, /area/shuttle/escape) -"UF" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron/white, +"XP" = ( +/turf/open/floor/iron/stairs/left, /area/shuttle/escape) -"UN" = ( -/obj/structure/table/wood/fancy, -/obj/item/reagent_containers/cup/rag{ - pixel_y = 7 +"XX" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 }, -/obj/effect/fun_balloon/sentience/emergency_shuttle{ - group_name = "bar staff on the NTSS Independence" +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 }, -/turf/open/floor/wood, -/area/shuttle/escape) -"Vk" = ( -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron/white, +/turf/open/floor/iron/dark/smooth_large, /area/shuttle/escape) -"Vm" = ( -/turf/closed/wall/mineral/titanium/interior, +"Yi" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/iron, /area/shuttle/escape) -"VO" = ( -/obj/structure/table/reinforced, -/obj/item/phone{ - pixel_x = 1; - pixel_y = 3 +"YL" = ( +/obj/effect/turf_decal/trimline/white/line{ + dir = 8 }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, /area/shuttle/escape) -"VV" = ( -/obj/machinery/vending/coffee, -/turf/open/floor/wood, +"YT" = ( +/obj/effect/turf_decal/trimline/white/corner, +/turf/open/floor/iron, /area/shuttle/escape) -"WT" = ( -/turf/open/floor/wood, +"YY" = ( +/obj/structure/railing/corner, +/turf/open/floor/carpet/red, /area/shuttle/escape) -"Yv" = ( +"Zn" = ( /obj/structure/table/reinforced, -/obj/item/clothing/glasses/heat{ - pixel_y = -5 +/obj/effect/turf_decal/siding/wood{ + dir = 9 }, -/obj/item/clothing/glasses/heat, -/obj/item/clothing/glasses/heat{ - pixel_y = 5 +/obj/machinery/light/directional/north, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"Zs" = ( +/obj/structure/table/reinforced, +/obj/item/storage/bag/tray, +/obj/item/kitchen/rollingpin{ + pixel_x = 1 }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, +/turf/open/floor/iron/kitchen/herringbone, /area/shuttle/escape) -"YN" = ( -/obj/structure{ - desc = "A jukebox for playing music. Seems like it ran out of charge."; - icon = 'icons/obj/machines/music.dmi'; - icon_state = "jukebox"; - name = "jukebox" +"Zy" = ( +/obj/machinery/computer/warrant, +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 9 }, -/turf/open/floor/wood, +/turf/open/floor/iron, /area/shuttle/escape) -"YV" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/head/collectable/welding, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ +"ZD" = ( +/obj/effect/turf_decal/loading_area/white{ dir = 8 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/light/directional/south, -/turf/open/floor/iron/white, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, /area/shuttle/escape) -"YZ" = ( -/obj/machinery/light/directional/west, -/turf/open/floor/wood, +"ZE" = ( +/turf/open/floor/wood/tile, /area/shuttle/escape) (1,1,1) = {" @@ -852,10 +2351,13 @@ kd kd kd jt -qE -CR +Tj +RY +jt +jt +tC +tC jt -kd kd kd kd @@ -869,19 +2371,16 @@ kd kd kd jt -qE -qE +MK +AD +jt +jt +FA +ma +jt +jt +jt jt -kd -kd -kd -kd -kd -kd -kd -kd -kd -kd kd kd kd @@ -889,17 +2388,22 @@ kd "} (2,1,1) = {" kd -kd -kd -kd -kd -kd -en -en +cQ +Cm +Cm +Cm +Cm +Cm +Cm +qV jt +wJ +Jo +jL +ba +Jo +rC jt -WT -WT jt jt jt @@ -908,920 +2412,918 @@ kd kd kd kd -kd -kd jt en en en jt -WT -WT +wJ +pI +jL +Ld +Jo +rC jt -en -en -en +ut +Cu +uV jt kd kd kd -kd -kd -kd -kd -kd -kd -kd "} (3,1,1) = {" kd +Gg +KR +FH kd kd +qV kd kd -en -en -nU -YZ jt -aY -aY +Mt +Bn +Xa +rc +lF +Ff +lq +qb +Ly +vR jt -yq -cu jt -jt -en en en en jt +IR +sK +XN jt -EC -kE -Me +Nf +Bn +Xa +mW +oe +on +jt +SY +Bn +uV jt -aY -aY jt -WT -nU -DZ jt -kd -kd -kd -kd -kd -kd -kd -kd -kd kd "} (4,1,1) = {" kd -kd -kd +as +SW +FH kd kd en -EC -kE -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -EC -kE -Me -jt -jt en en +jt +lP +lP +jt +CN +LU +LU +jt +cY +es +BZ +BZ +zH +nQ +ez +Bz +jt +rd +ZE +ZE +jt +uU +vW +jt +jt +jF +PK +jt +Cu +Dx +uV +jt +jt +jt +jt +"} +(5,1,1) = {" +kd +as +KR +Xk +qV en en +nk +VM +UQ +La +La +eM +GA +La +La uV -uV -kd +wb +es +Zs +ur +BZ +EA +rJ +KW +jt +vn +ZE +ZE +jt +YT +KH +eM +le +KH +KH +jt +PM +Bn +Td +zP +xj +xj +sW +"} +(6,1,1) = {" kd +as +nb +aD kd +en +KY +La +La +La +La +La +La +ii +La +La +Bw +XP +es +zA +dg +BZ +Bn +Bn +HD +jt +Bd +ZE +ec +jt +Qa +qt +qt +qt +qt +qt +DF +sr +Bn +Td +zP +xj +xj +xj "} -(5,1,1) = {" +(7,1,1) = {" kd +as kd +qV kd +en +ye +La +La +Ll +vA +vA +NA +Cl +La +La +zv +Xb +es +es +kV +mj +uo +Ig +kh +jt +jt +wj +jt +jt +Tp +qt +WC +Mz +UO +YL +jt +sZ +fY +Td +zP +xj +xj +xj +"} +(8,1,1) = {" kd +as kd jt -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -oo -WT -WT -WT -WT -WT -WT -WT -WT -WT -oo -WT -WT -WT -WT -NH -WT -WT -YZ -nU -nU -nU -WT -VV +iA +jt +JJ +La +bX +jt +Zn +nq +kP +hf +il +La uV jt jt -kd -"} -(6,1,1) = {" -kd -kd -en -en +Ra jt jt -Vm -Vm -dQ -Vm -Vm -Vm -dQ -Vm -Vm -Vm -Vm -en -en -en -en -Vm -Vm -Vm -Vm -dQ -Vm -dQ -Vm -Vm -WT -WT -WT -WT -EC -Aq -Dq -xf -Me -uV -uV jt jt jt -"} -(7,1,1) = {" +uV +tP +KH +KH +KH +zX +qt +Jj +uV +jt jt jt -en -qw -FR -KM -Vm -jT -qw -TI -EH -TI -qw -jT -Vm -rp -yn -TI -TI -TI -TI -HA -rp -Vm -jT -qw -KU -qw -jT -Vm -Vm -Vm -WT -WT -EC -kJ -wf -cz -Me uV -dR +bn +Td xj xj sW +kd "} -(8,1,1) = {" -jt -jP -kQ -qw -Ud -Bp -Vm -KD -qw -qw -qw -qw -qw -KD -Vm -HA -qw -qw -qw -qw -qw -qw -yn -Vm -KD -qw -qw -qw -cf -KD -jT -Vm -Vm -WT -WT -NH -NH -NH -DZ -uV -dR +(9,1,1) = {" +kd +as +SW +vy +HR +yS +La +La +La +hL +TG +AF +AF +Tz +il +OH +jt +tp +FD +qt +XL +Pm +nM +hH +Up +HH +qt +Yi +qt +qt +qt +qt +Ja +jt +mB +cO +dL +jt +QB +Td xj xj xj +kd "} -(9,1,1) = {" -en -qd -KB -qw -qw +(10,1,1) = {" +kd +as +kd +jt +Bv +jt +KY +La +KY +Fu +mr +AF +AF +Tz +il +IO +MV +Fp +qt +qt +hi +qt +qt +qt +qt +Rm +Am uV -Vm -KD -qw -qw -qw -qw -qw -KD -Vm -Vm -qw -qw -qw -qw -qw -qw -Vm -Vm -KD -qw -sk -sk -sk -qw -qw -qw -dQ -WT -WT -WT -WT -WT -WT +jt +jt uV -dR +px +Ja +hp +yC +yC +gY +jt +jU +Td xj xj xj +kd "} -(10,1,1) = {" +(11,1,1) = {" +kd +as +kd +qV +kd en -qw -qw -qw -qw -Vm -jT -KD -qw -Ki -Ki -Ki -qw -KD -jT -Vm -qw -Ki -Ki -Ki -Ki -Uo -Vm -jT -Vk -Nv -xB -MI -lJ -SK -qw -qw -dQ -WT -WT -OJ -ni -OJ -WT -uV +od +La +GZ +WX +hB +AF +Mv +Tz +il +YY +tG +tp +qt +qt +jt +UY +qc +ak +UY +jt +qt +RZ +Pv +Pv +jt +xx +Eu +jt +sz +yC +VW +jt +Ox uV uV uV uV +kd "} -(11,1,1) = {" +(12,1,1) = {" +kd +as +SW +SW +cA en -vq -tx -qw -qw -FS -qw -qw -qw -iP -iP -iP -qw -qw -qw -dQ -qw -iP -iP -iP -iP -qw -dQ -qw -qw -Nv -LM -Cn -Dn -SK -UF -Fx -Vm -oQ -WT -ni -OJ -ni -WT -Sx +JJ +La +JJ +at +AL +AF +AF +DA +il +IO +Ew +Fp +qt +qt +jt +Kn +Uq +UZ +Kn +jt +qt +RZ +Pv +oB +jt +rM +Eu +jt +BI +yC +PO +jt +vZ +uV +uV uV -cZ uV kd "} -(12,1,1) = {" +(13,1,1) = {" +kd +as +SW +SW +cK en -mG -zm -qw -qw -FS -qw -qw -qw -El -El -El -qw -qw -qw -dQ -qw -El -El -El -El -qw -dQ -qw -qw -Nv -VO -Gv -iO -SK -cf -qs -Vm -oQ -WT -OJ -ni -OJ -WT -YN +La +KY +La +QP +Xu +AF +uu +Tz +il +YY +Md +tp +qt +qt +zE +qt +qt +qt +qt +JU +ng uV -So +jt +jt uV +kz +Ja +hp +yC +yC +OW +jt +jU +Td +xj +xj +sW kd "} -(13,1,1) = {" +(14,1,1) = {" +kd +qV +kd +kd +kd en -qw -qw -qw -qw -Vm -jT -KD -qw -TI -TI -TI -qw -KD -jT -Vm -DJ -TI -TI -TI -TI -qw -Vm -jT -ju -Nv -vL -Eo -Yv -SK -qw -qw -dQ -WT -WT +La +tZ +bX +jt +cB +uR +Bm +gL +il +tT ni OJ ni -WT +qt +TB +eY +Lx +eY +WZ +ie +qt +FD +qt +qt +qt +qt +Ja +jt +wl +Jk +fL +jt +QB +Td +xj +xj +xj +kd +"} +(15,1,1) = {" +kd +en +en +jt +jt uV +La +JJ +La +Ll +vA +vA +Uy +rU +La +tT +OJ +ni +OJ +Ut uV +Py +jt +jt +jt uV +eZ +Mz +Mz +Mz +qp +qt +Ja uV +jt +jt +jt uV +bn +Td +xj +xj +xj +kd "} -(14,1,1) = {" +(16,1,1) = {" en -oZ -Ho -qw -qw -uV -Vm -KD -qw -qw -qw -qw -qw -KD -Vm -Vm -qw -qw -qw -qw -qw -qw -Vm -Vm -KD -qw -rw -rw -rw -qw -qw -qw -dQ -WT -WT -WT -WT -WT -WT -uV -dR +en +rz +mR +tk +XP +oA +La +La +La +La +La +La +La +La +tT +ni +OJ +ni +qt +jt +ku +lz +kn +Si +jt +jt +jt +jt +jt +Tp +qt +Kq +KH +gb +zW +jt +xH +ik +Td +zP xj xj sW "} -(15,1,1) = {" -jt -dd -sv -qw -IL -YV -Vm -KD -qw -qw -qw -qw -qw -KD -Vm -rX -qw -qw -qw -qw -qw -qw -mv -Vm -KD -qw -qw -qw -UF -KD -Kc -Vm -Vm -WT -WT -nU -nU -nU -DZ -uV -dR +(17,1,1) = {" +en +Zy +qM +qt +tk +Xb +La +La +La +La +La +La +La +La +La +tT +OJ +ni +OJ +qt +jt +LD +du +ab +dw +jt +Bb +DV +qm +jt +Qa +qt +qt +qt +qt +qt +vJ +Bn +Bn +Td +zP xj xj xj "} -(16,1,1) = {" -jt -jt +(18,1,1) = {" en -qw -uX -lg -Vm -jT -qw -Ki -Oh -Ki -qw -jT -Vm -KS -mv -Ki -Ki -Ki -Ki -rX -KS -Vm -jT -qw -Rf -qw -jT -Vm -Vm -Vm -WT -WT -gQ -Lo -UN -gQ -wF +Oq +qt +iR +jt uV -dR +Hk +kC +gJ +uV +XJ +La +XX +MS +La +tT +ix +qt +qt +lw +jt +DU +Mg +lu +Sm +WK +dp +mk +Cr +jt +Jq +Mz +XX +MS +Mz +Mz +jt +Sb +Bn +Td +zP xj xj xj "} -(17,1,1) = {" -kd -kd -en +(19,1,1) = {" en +dE +qt +DK jt +je +DH +ta +yc jt -Vm -Vm -dQ -Vm -Vm -Vm -dQ -Vm -Vm -Vm -Vm -en -en -en -en -Vm -Vm -Vm -Vm -dQ -Vm -dQ -Vm -Vm -WT -WT -WT -EC -gQ -WT -mw -xb -WT -uV -uV +By +GD jt jt +ij +ij jt -"} -(18,1,1) = {" -kd -kd -kd -kd -kd +Jl +qt +Jl jt -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -YZ -WT -WT -WT -WT -WT -WT -WT -WT -WT -YZ -WT -WT -WT -WT -nU -WT -EC -si -WT -fB -qI -WT -fI -uV +rG +Um +gq +gm jt +ki +HK +Jc jt -kd -"} -(19,1,1) = {" -kd -kd -kd -kd -kd -en -EC -kE -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -WT -EC -kE -Me +BF +BF jt jt -en -en -en -en -uV +OT +OT +jt +XK +Dx uV -kd -kd -kd +jt +jt +jt +jt "} (20,1,1) = {" -kd -kd -kd -kd -kd -en en -NH -oo +jz +Kw +gU jt -qE -qE +Av +Ok +AF +ky jt -Cw -ca +Mt +Bn +DL +mW +oe +on jt +Ux +Ux +Ux jt -en -en -en -en jt jt -EC -kE -Me jt -qE -qE +NF +jt +vw +jy +vw +jt +Mt +oe +Xa +mW +Bn +av +jt +nP +Bn +uV +jt jt -WT -NH -DZ jt -kd -kd -kd -kd -kd -kd -kd -kd -kd kd "} (21,1,1) = {" +en +en +hR +uN +vX +LB +VC +uR +dS +jt +xL +oW +jL +Ld +Vs +Tv +jt +en +en +en +jt kd kd kd -kd -kd -kd -en -en +Tb jt jt -WT -WT jt jt jt +ZD +Vs +jL +Ld +oW +ze jt +uy +qX +En +lq +zf kd kd +"} +(22,1,1) = {" kd -kd -kd -kd -jt -en en en jt -WT -WT +jt jt en en en jt -kd -kd -kd -kd -kd -kd -kd -kd -kd -kd -"} -(22,1,1) = {" -kd -kd -kd -kd -kd -kd -kd -kd -kd +mN +dG jt -aY -aY jt -kd +Uj +Rz +jt kd kd kd @@ -1835,19 +3337,16 @@ kd kd kd jt -aY -aY +JS +JS +jt +jt +zy +zy +jt +jt +jt jt -kd -kd -kd -kd -kd -kd -kd -kd -kd -kd kd kd kd diff --git a/_maps/shuttles/emergency_delta.dmm b/_maps/shuttles/emergency_delta.dmm index f21021473131a0..5cca48f0d8fa35 100644 --- a/_maps/shuttles/emergency_delta.dmm +++ b/_maps/shuttles/emergency_delta.dmm @@ -982,7 +982,7 @@ }, /obj/item/lazarus_injector, /obj/effect/turf_decal/bot, -/mob/living/simple_animal/bot/medbot{ +/mob/living/basic/bot/medbot{ name = "\improper emergency medibot"; pixel_x = -3; pixel_y = 2 diff --git a/_maps/shuttles/emergency_donut.dmm b/_maps/shuttles/emergency_donut.dmm index 67dc9f62da7ae4..f81c084e90bf61 100644 --- a/_maps/shuttles/emergency_donut.dmm +++ b/_maps/shuttles/emergency_donut.dmm @@ -377,7 +377,7 @@ }, /obj/item/lazarus_injector, /obj/effect/turf_decal/bot, -/mob/living/simple_animal/bot/medbot{ +/mob/living/basic/bot/medbot{ name = "\improper emergency medibot"; pixel_x = -3; pixel_y = 2 diff --git a/_maps/shuttles/emergency_hugcage.dmm b/_maps/shuttles/emergency_hugcage.dmm index 80211ed6092ea6..6e68506c4332ef 100644 --- a/_maps/shuttles/emergency_hugcage.dmm +++ b/_maps/shuttles/emergency_hugcage.dmm @@ -31,7 +31,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "dz" = ( -/mob/living/simple_animal/parrot/natural{ +/mob/living/basic/parrot{ melee_damage_upper = 5 }, /turf/open/floor/mineral/titanium/blue, @@ -289,7 +289,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "Hf" = ( -/mob/living/simple_animal/pet/cat/kitten, +/mob/living/basic/pet/cat/kitten, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "IH" = ( diff --git a/_maps/shuttles/emergency_kilo.dmm b/_maps/shuttles/emergency_kilo.dmm index 39a1a99ea9a7aa..b8710eb1164501 100644 --- a/_maps/shuttles/emergency_kilo.dmm +++ b/_maps/shuttles/emergency_kilo.dmm @@ -426,7 +426,7 @@ }, /obj/item/lazarus_injector, /obj/effect/turf_decal/bot, -/mob/living/simple_animal/bot/medbot{ +/mob/living/basic/bot/medbot{ name = "\improper emergency medibot"; pixel_x = -3; pixel_y = 2 diff --git a/_maps/shuttles/emergency_lance.dmm b/_maps/shuttles/emergency_lance.dmm index c6c0d9d9c18db6..05727cad322a86 100644 --- a/_maps/shuttles/emergency_lance.dmm +++ b/_maps/shuttles/emergency_lance.dmm @@ -1628,7 +1628,7 @@ /turf/open/floor/iron, /area/shuttle/escape) "ZZ" = ( -/mob/living/simple_animal/bot/medbot{ +/mob/living/basic/bot/medbot{ name = "\improper emergency medibot"; pixel_x = -3; pixel_y = 2 diff --git a/_maps/shuttles/emergency_luxury.dmm b/_maps/shuttles/emergency_luxury.dmm index 1d6dfce2664ba1..29744e3ec363cd 100644 --- a/_maps/shuttles/emergency_luxury.dmm +++ b/_maps/shuttles/emergency_luxury.dmm @@ -1114,7 +1114,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "SE" = ( -/mob/living/simple_animal/bot/medbot, +/mob/living/basic/bot/medbot, /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape/luxury) diff --git a/_maps/shuttles/emergency_medisim.dmm b/_maps/shuttles/emergency_medisim.dmm index 7689bed7306b3b..b63297300c374e 100644 --- a/_maps/shuttles/emergency_medisim.dmm +++ b/_maps/shuttles/emergency_medisim.dmm @@ -245,7 +245,7 @@ pixel_y = 3 }, /obj/item/lazarus_injector, -/mob/living/simple_animal/bot/medbot{ +/mob/living/basic/bot/medbot{ name = "\improper emergency medibot"; pixel_x = -3; pixel_y = 2 @@ -694,7 +694,7 @@ /area/shuttle/escape/simulation) "Cv" = ( /obj/machinery/drone_dispenser{ - desc = "A hefty machine that periodically creates a pair of binoculars. Really, Nanotrasen? We're getting this lazy?"; + desc = "A hefty machine that periodically creates a pair of binoculars. Really, Symphionia? We're getting this lazy?"; dispense_type = /obj/item/binoculars; end_create_message = "dispenses a pair of binoculars."; glass_cost = 0; diff --git a/_maps/shuttles/emergency_meta.dmm b/_maps/shuttles/emergency_meta.dmm index 068ecf465e4dfe..5a4ca2c48326fd 100644 --- a/_maps/shuttles/emergency_meta.dmm +++ b/_maps/shuttles/emergency_meta.dmm @@ -544,7 +544,7 @@ }, /obj/item/lazarus_injector, /obj/effect/turf_decal/bot, -/mob/living/simple_animal/bot/medbot{ +/mob/living/basic/bot/medbot{ name = "\improper emergency medibot"; pixel_x = -3; pixel_y = 2 diff --git a/_maps/shuttles/emergency_nature.dmm b/_maps/shuttles/emergency_nature.dmm index 95eada06cfb40a..a1fa04c1c6a736 100644 --- a/_maps/shuttles/emergency_nature.dmm +++ b/_maps/shuttles/emergency_nature.dmm @@ -787,7 +787,7 @@ dir = 9 }, /obj/structure/window/reinforced/spawner/directional/west, -/mob/living/simple_animal/bot/medbot{ +/mob/living/basic/bot/medbot{ name = "\improper emergency medibot"; pixel_x = -3; pixel_y = 2 diff --git a/_maps/shuttles/emergency_northstar.dmm b/_maps/shuttles/emergency_northstar.dmm index 20795c72317b92..85b807d8431572 100644 --- a/_maps/shuttles/emergency_northstar.dmm +++ b/_maps/shuttles/emergency_northstar.dmm @@ -178,7 +178,7 @@ /turf/open/floor/iron/dark, /area/shuttle/escape) "oA" = ( -/mob/living/simple_animal/bot/medbot{ +/mob/living/basic/bot/medbot{ name = "\improper emergency medibot"; pixel_x = -3; pixel_y = 2 diff --git a/_maps/shuttles/emergency_omega.dmm b/_maps/shuttles/emergency_omega.dmm index bb2976fc7492e5..e3f867a6130478 100644 --- a/_maps/shuttles/emergency_omega.dmm +++ b/_maps/shuttles/emergency_omega.dmm @@ -559,7 +559,7 @@ /obj/item/lazarus_injector, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, -/mob/living/simple_animal/bot/medbot{ +/mob/living/basic/bot/medbot{ name = "\improper emergency medibot"; pixel_x = -3; pixel_y = 2 diff --git a/_maps/shuttles/emergency_raven.dmm b/_maps/shuttles/emergency_raven.dmm index 4b12d66baedfdd..ce552c3764b5d1 100644 --- a/_maps/shuttles/emergency_raven.dmm +++ b/_maps/shuttles/emergency_raven.dmm @@ -1135,7 +1135,7 @@ pixel_y = 3 }, /obj/item/lazarus_injector, -/mob/living/simple_animal/bot/medbot{ +/mob/living/basic/bot/medbot{ name = "\improper emergency medibot"; pixel_x = -3; pixel_y = 2 diff --git a/_maps/shuttles/emergency_shadow.dmm b/_maps/shuttles/emergency_shadow.dmm index 15593e7e95661c..19bbf8f786e146 100644 --- a/_maps/shuttles/emergency_shadow.dmm +++ b/_maps/shuttles/emergency_shadow.dmm @@ -330,7 +330,7 @@ /turf/open/floor/catwalk_floor, /area/shuttle/escape/engine) "oK" = ( -/mob/living/simple_animal/bot/medbot{ +/mob/living/basic/bot/medbot{ name = "Doctor Patches" }, /turf/open/floor/iron/dark/smooth_large, @@ -991,7 +991,7 @@ /turf/open/floor/eighties, /area/shuttle/escape) "RV" = ( -/mob/living/simple_animal/bot/cleanbot{ +/mob/living/basic/bot/cleanbot{ name = "Mopsy" }, /obj/machinery/holopad, diff --git a/_maps/shuttles/emergency_tranquility.dmm b/_maps/shuttles/emergency_tranquility.dmm index 057c3b1adf7de9..5458e59c843168 100644 --- a/_maps/shuttles/emergency_tranquility.dmm +++ b/_maps/shuttles/emergency_tranquility.dmm @@ -716,7 +716,7 @@ /turf/open/floor/grass, /area/shuttle/escape) "nQ" = ( -/mob/living/simple_animal/bot/hygienebot, +/mob/living/basic/bot/hygienebot, /turf/open/floor/wood, /area/shuttle/escape) "nV" = ( @@ -1385,7 +1385,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 9 }, -/mob/living/simple_animal/bot/cleanbot, +/mob/living/basic/bot/cleanbot, /obj/machinery/vending/wallmed/directional/south, /turf/open/floor/wood, /area/shuttle/escape) @@ -2131,7 +2131,7 @@ /obj/effect/turf_decal/siding/thinplating_new{ dir = 4 }, -/mob/living/simple_animal/bot/medbot, +/mob/living/basic/bot/medbot, /turf/open/floor/iron/herringbone, /area/shuttle/escape) "NC" = ( diff --git a/_maps/shuttles/infiltrator_advanced.dmm b/_maps/shuttles/infiltrator_advanced.dmm index 83e13c63f35598..bdbb794efedb92 100644 --- a/_maps/shuttles/infiltrator_advanced.dmm +++ b/_maps/shuttles/infiltrator_advanced.dmm @@ -88,7 +88,7 @@ /obj/effect/decal/cleanable/dirt, /obj/item/radio/intercom{ freerange = 1; - name = "Syndicate Radio Intercom" + name = "Symphionia Radio Intercom" }, /turf/open/floor/mineral/plastitanium, /area/shuttle/syndicate/bridge) @@ -600,7 +600,7 @@ dir = 6 }, /obj/structure/cable, -/mob/living/simple_animal/bot/medbot/nukie, +/mob/living/basic/bot/medbot/nukie, /turf/open/floor/mineral/plastitanium, /area/shuttle/syndicate/medical) "bA" = ( diff --git a/_maps/shuttles/infiltrator_basic.dmm b/_maps/shuttles/infiltrator_basic.dmm index ca3da37f63bab0..070fe4bdcee6dd 100644 --- a/_maps/shuttles/infiltrator_basic.dmm +++ b/_maps/shuttles/infiltrator_basic.dmm @@ -676,7 +676,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 1 }, -/mob/living/simple_animal/bot/medbot/nukie, +/mob/living/basic/bot/medbot/nukie, /turf/open/floor/iron/corner{ dir = 1 }, diff --git a/_maps/shuttles/skyrat/arrival_outpost.dmm b/_maps/shuttles/nova/arrival_outpost.dmm similarity index 100% rename from _maps/shuttles/skyrat/arrival_outpost.dmm rename to _maps/shuttles/nova/arrival_outpost.dmm diff --git a/_maps/shuttles/nova/arrivals_nova.dmm b/_maps/shuttles/nova/arrivals_nova.dmm new file mode 100644 index 00000000000000..14948e3ebf38ce --- /dev/null +++ b/_maps/shuttles/nova/arrivals_nova.dmm @@ -0,0 +1,339 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "0,0" + }, +/area/shuttle/arrival) +"b" = ( +/obj/machinery/computer/shuttle/arrivals, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/shuttle/arrivals, +/area/shuttle/arrival) +"c" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/turf/open/floor/iron/shuttle/arrivals, +/area/shuttle/arrival) +"d" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/arrivals{ + icon_state = "8,0" + }, +/area/shuttle/arrival) +"e" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "6,0" + }, +/area/shuttle/arrival) +"f" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "9,0" + }, +/area/shuttle/arrival) +"g" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "12,2" + }, +/area/shuttle/arrival) +"h" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/arrivals{ + icon_state = "4,0" + }, +/area/shuttle/arrival) +"i" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "11,0" + }, +/area/shuttle/arrival) +"j" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "3,4" + }, +/area/shuttle/arrival) +"k" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "0,4" + }, +/area/shuttle/arrival) +"l" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "9,4" + }, +/area/shuttle/arrival) +"m" = ( +/obj/structure/chair/sofa/bench/right, +/turf/open/floor/iron/shuttle/arrivals, +/area/shuttle/arrival) +"n" = ( +/turf/open/floor/iron/shuttle/arrivals{ + icon_state = "sign_1" + }, +/area/shuttle/arrival) +"o" = ( +/obj/docking_port/mobile/arrivals_nova, +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "12,1" + }, +/area/shuttle/arrival) +"p" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "6,4" + }, +/area/shuttle/arrival) +"q" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "0,2" + }, +/area/shuttle/arrival) +"r" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "1,4" + }, +/area/shuttle/arrival) +"s" = ( +/obj/machinery/door/airlock/silver/glass, +/obj/machinery/status_display/shuttle/directional/south{ + shuttle_id = "arrivals_shuttle" + }, +/turf/open/floor/iron/shuttle/arrivals, +/area/shuttle/arrival) +"t" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/arrivals{ + icon_state = "5,0" + }, +/area/shuttle/arrival) +"u" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "9,1" + }, +/area/shuttle/arrival) +"v" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron/shuttle/arrivals{ + icon_state = "sign_2" + }, +/area/shuttle/arrival) +"w" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "11,3" + }, +/area/shuttle/arrival) +"x" = ( +/turf/open/floor/iron/shuttle/arrivals, +/area/shuttle/arrival) +"y" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals, +/area/shuttle/arrival) +"z" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/arrivals{ + icon_state = "8,4" + }, +/area/shuttle/arrival) +"B" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "3,0" + }, +/area/shuttle/arrival) +"C" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "0,3" + }, +/area/shuttle/arrival) +"D" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "12,0" + }, +/area/shuttle/arrival) +"G" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "1,0" + }, +/area/shuttle/arrival) +"H" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/arrivals{ + icon_state = "7,4" + }, +/area/shuttle/arrival) +"I" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "12,4" + }, +/area/shuttle/arrival) +"J" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/arrivals{ + icon_state = "7,0" + }, +/area/shuttle/arrival) +"K" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "3,3" + }, +/area/shuttle/arrival) +"L" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "1,3" + }, +/area/shuttle/arrival) +"M" = ( +/obj/structure/closet/crate/bin, +/turf/open/floor/iron/shuttle/arrivals{ + icon_state = "sign_1" + }, +/area/shuttle/arrival) +"N" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/iron/shuttle/arrivals{ + icon_state = "sign_3" + }, +/area/shuttle/arrival) +"O" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 1 + }, +/turf/open/floor/iron/shuttle/arrivals, +/area/shuttle/arrival) +"P" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/arrivals{ + icon_state = "5,4" + }, +/area/shuttle/arrival) +"Q" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/arrivals{ + icon_state = "4,4" + }, +/area/shuttle/arrival) +"R" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "0,1" + }, +/area/shuttle/arrival) +"S" = ( +/obj/structure/chair/sofa/bench/left, +/turf/open/floor/iron/shuttle/arrivals, +/area/shuttle/arrival) +"T" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "2,4" + }, +/area/shuttle/arrival) +"U" = ( +/obj/machinery/door/airlock/external, +/turf/open/floor/iron/shuttle/arrivals, +/area/shuttle/arrival) +"V" = ( +/obj/structure/closet/shuttle/emergency/white, +/turf/open/floor/iron/shuttle/arrivals, +/area/shuttle/arrival) +"W" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "12,3" + }, +/area/shuttle/arrival) +"X" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/iron/shuttle/arrivals{ + icon_state = "sign_2" + }, +/area/shuttle/arrival) +"Y" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "9,3" + }, +/area/shuttle/arrival) +"Z" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ + icon_state = "11,4" + }, +/area/shuttle/arrival) + +(1,1,1) = {" +k +C +q +R +a +"} +(2,1,1) = {" +r +L +M +n +G +"} +(3,1,1) = {" +T +V +x +X +U +"} +(4,1,1) = {" +j +K +s +y +B +"} +(5,1,1) = {" +Q +m +x +O +h +"} +(6,1,1) = {" +P +S +x +c +t +"} +(7,1,1) = {" +p +b +x +N +e +"} +(8,1,1) = {" +H +m +x +O +J +"} +(9,1,1) = {" +z +S +x +c +d +"} +(10,1,1) = {" +l +Y +s +u +f +"} +(11,1,1) = {" +j +V +x +v +U +"} +(12,1,1) = {" +Z +w +n +n +i +"} +(13,1,1) = {" +I +W +g +o +D +"} diff --git a/_maps/shuttles/skyrat/cargo_skyrat.dmm b/_maps/shuttles/nova/cargo_nova.dmm similarity index 100% rename from _maps/shuttles/skyrat/cargo_skyrat.dmm rename to _maps/shuttles/nova/cargo_nova.dmm diff --git a/_maps/shuttles/skyrat/cargo_delta_skyrat.dmm b/_maps/shuttles/nova/cargo_nova_delta.dmm similarity index 100% rename from _maps/shuttles/skyrat/cargo_delta_skyrat.dmm rename to _maps/shuttles/nova/cargo_nova_delta.dmm diff --git a/_maps/shuttles/nova/emergency_nova.dmm b/_maps/shuttles/nova/emergency_nova.dmm new file mode 100644 index 00000000000000..ead17d8442fe81 --- /dev/null +++ b/_maps/shuttles/nova/emergency_nova.dmm @@ -0,0 +1,1249 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aL" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/escape/brig) +"bn" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/turf_decal/box/white/corners, +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"bI" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/bot_white, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"bR" = ( +/obj/machinery/light/directional/east, +/obj/machinery/sleeper{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"cd" = ( +/obj/machinery/computer/emergency_shuttle, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"cV" = ( +/obj/machinery/computer/security, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"dw" = ( +/turf/open/floor/iron/smooth_edge{ + dir = 8 + }, +/area/shuttle/escape) +"dN" = ( +/turf/open/floor/iron/smooth_half, +/area/shuttle/escape/brig) +"dW" = ( +/obj/structure/chair/comfy/shuttle, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"dY" = ( +/obj/machinery/computer/atmos_alert{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"dZ" = ( +/obj/machinery/light/directional/east, +/obj/machinery/status_display/evac/directional/east, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"en" = ( +/obj/structure/table/reinforced, +/obj/item/phone, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"eL" = ( +/obj/structure/chair/comfy/shuttle, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"fi" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"fN" = ( +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/shuttle/escape) +"gI" = ( +/obj/structure/table/reinforced/rglass, +/obj/item/surgery_tray/full{ + pixel_y = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"gV" = ( +/turf/open/floor/iron/smooth_edge{ + dir = 4 + }, +/area/shuttle/escape) +"ig" = ( +/obj/structure/closet/firecloset/full, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"ir" = ( +/obj/effect/turf_decal/caution/white, +/turf/open/floor/iron/smooth_edge{ + dir = 1 + }, +/area/shuttle/escape) +"iC" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"jW" = ( +/turf/open/floor/catwalk_floor/iron_smooth, +/area/shuttle/escape) +"kP" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/power/shuttle_engine/propulsion, +/obj/structure/fluff/metalpole/end{ + pixel_y = -32 + }, +/turf/open/floor/plating/airless, +/area/shuttle/escape) +"lh" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape/brig) +"li" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape/brig) +"lq" = ( +/obj/machinery/computer/crew, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"lL" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"mI" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"mL" = ( +/obj/machinery/door/airlock/security/old/glass{ + name = "Shuttle Brig" + }, +/obj/effect/turf_decal/delivery/white, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape/brig) +"nF" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin/carbon, +/obj/item/pen, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"oe" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/turf_decal/box/white/corners, +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"ov" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/escape) +"oT" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"oV" = ( +/obj/structure/rack/shelf, +/obj/item/storage/medkit/brute{ + pixel_y = 6 + }, +/obj/item/storage/medkit/fire, +/obj/effect/turf_decal/bot_white, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"pP" = ( +/obj/structure/chair/plastic{ + dir = 8 + }, +/turf/open/floor/iron/smooth_large, +/area/shuttle/escape) +"qb" = ( +/obj/structure/table/optable, +/obj/machinery/anesthetic_machine, +/obj/effect/turf_decal/bot_white, +/obj/machinery/defibrillator_mount/loaded{ + pixel_x = 28 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"qp" = ( +/obj/machinery/computer/communications{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"qN" = ( +/turf/open/floor/iron/smooth_edge{ + dir = 4 + }, +/area/shuttle/escape/brig) +"qQ" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"rh" = ( +/obj/machinery/sleeper{ + dir = 8 + }, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"rK" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/escape) +"rP" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/obj/effect/turf_decal/stripes/line, +/obj/structure/fluff/metalpole/end{ + pixel_y = -32 + }, +/turf/open/floor/plating/airless, +/area/shuttle/escape) +"sh" = ( +/obj/structure/fluff/metalpole/end{ + dir = 1; + pixel_y = 32 + }, +/obj/structure/marker_beacon/burgundy, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/escape) +"te" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape/brig) +"tl" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"tF" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"ua" = ( +/obj/machinery/light/directional/east, +/obj/machinery/suit_storage_unit/standard_unit, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"vm" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape/brig) +"vx" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Shuttle Seating Area" + }, +/obj/effect/turf_decal/delivery/white, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"vF" = ( +/obj/structure/chair/comfy/shuttle, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"wl" = ( +/obj/machinery/light/directional/west, +/obj/structure/table, +/obj/effect/spawner/random/entertainment/deck, +/obj/effect/spawner/random/entertainment/deck{ + pixel_y = 8; + pixel_x = 5 + }, +/turf/open/floor/iron/smooth_large, +/area/shuttle/escape) +"wr" = ( +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"xE" = ( +/turf/open/floor/iron/smooth_edge, +/area/shuttle/escape) +"xJ" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape/brig) +"yz" = ( +/obj/machinery/door/airlock/engineering{ + name = "Shuttle Engineering" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/turf_decal/delivery/white, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"zc" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"zw" = ( +/obj/machinery/door/airlock/external/glass, +/obj/docking_port/mobile/emergency{ + name = "Emergency Shuttle" + }, +/obj/effect/turf_decal/delivery/white, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"zB" = ( +/obj/structure/rack/shelf, +/obj/item/storage/medkit/toxin{ + pixel_y = 6 + }, +/obj/item/storage/medkit/o2, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"zC" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/turf/open/floor/plating, +/area/shuttle/escape/brig) +"Bn" = ( +/turf/open/floor/mineral/titanium/tiled/white, +/area/shuttle/escape) +"Br" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"BA" = ( +/obj/machinery/light/directional/east, +/obj/machinery/computer/operating{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"Cc" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/airless, +/area/shuttle/escape) +"CI" = ( +/obj/structure/closet/crate/freezer/blood, +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"CR" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/bot_white, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"Dg" = ( +/obj/structure/chair/comfy/shuttle, +/turf/open/floor/iron/smooth_large, +/area/shuttle/escape) +"Dq" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"DD" = ( +/obj/structure/fluff/metalpole/end{ + dir = 1; + pixel_y = 32 + }, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/escape/brig) +"EC" = ( +/obj/structure/marker_beacon/olive, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/escape) +"EH" = ( +/turf/open/floor/iron/smooth_large, +/area/shuttle/escape) +"FS" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/power/shuttle_engine/propulsion, +/turf/open/floor/plating/airless, +/area/shuttle/escape) +"FT" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/white/corners, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape/brig) +"Hf" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape/brig) +"Hr" = ( +/obj/structure/chair/comfy/shuttle, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"Hs" = ( +/obj/machinery/light/directional/west, +/obj/machinery/vending/wallmed/directional/west, +/obj/machinery/stasis{ + dir = 1 + }, +/obj/machinery/iv_drip, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"HH" = ( +/obj/structure/closet/crate/freezer, +/obj/item/tank/internals/anesthetic, +/obj/item/tank/internals/anesthetic{ + pixel_y = 3 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/white/corners, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"HR" = ( +/obj/machinery/power/shuttle_engine/heater, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/turf/open/floor/plating/airless, +/area/shuttle/escape) +"Iu" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/turf/open/floor/plating, +/area/shuttle/escape) +"Iy" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/escape/brig) +"IB" = ( +/obj/effect/turf_decal/delivery/white, +/obj/machinery/door/airlock/external/glass, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"Kz" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"KI" = ( +/obj/machinery/computer/station_alert{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"Lc" = ( +/obj/machinery/computer/message_monitor{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"Li" = ( +/obj/effect/turf_decal/caution/white{ + dir = 1 + }, +/turf/open/floor/iron/smooth_edge, +/area/shuttle/escape) +"MH" = ( +/obj/machinery/computer/records/medical{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"MJ" = ( +/turf/open/floor/iron/smooth_half, +/area/shuttle/escape) +"MK" = ( +/obj/structure/tank_dispenser/oxygen, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"Nq" = ( +/obj/machinery/door/airlock/external/glass, +/obj/effect/turf_decal/delivery/white, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape/brig) +"Nv" = ( +/obj/structure/chair/plastic{ + dir = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/shuttle/escape) +"NG" = ( +/obj/machinery/stasis{ + dir = 1 + }, +/obj/machinery/iv_drip, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"On" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"Op" = ( +/obj/machinery/door/window/brigdoor/security/cell/left/directional/north, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/shuttle/escape/brig) +"Ow" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"OG" = ( +/turf/open/floor/iron/smooth, +/area/shuttle/escape) +"OJ" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"OY" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/box/white/corners, +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"Pa" = ( +/obj/structure/fluff/metalpole/end{ + dir = 1; + pixel_y = 32 + }, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/escape) +"Pd" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/handcuffs, +/obj/item/assembly/flash/handheld{ + pixel_y = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape/brig) +"Pu" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/holopad/secure, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"Qf" = ( +/obj/machinery/light/directional/south, +/obj/structure/closet/toolcloset, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"Qz" = ( +/obj/machinery/computer/crew{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"QD" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/white/corners, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape/brig) +"Rc" = ( +/turf/open/floor/iron/smooth_edge{ + dir = 1 + }, +/area/shuttle/escape) +"Ri" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/shuttle/escape) +"RL" = ( +/obj/structure/fluff/metalpole/end{ + dir = 1; + pixel_y = 32 + }, +/obj/structure/marker_beacon/olive, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/escape) +"RS" = ( +/obj/machinery/door/airlock/command/glass{ + name = "Cockpit" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/effect/turf_decal/delivery/white, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"Sv" = ( +/obj/machinery/light/directional/west, +/obj/machinery/status_display/evac/directional/west, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"SK" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/white/corners, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"SR" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"VC" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/bot_white, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"Ws" = ( +/obj/machinery/computer/aifixer{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"WW" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"Xt" = ( +/obj/structure/marker_beacon/burgundy, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/escape) +"Ye" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"YF" = ( +/obj/structure/marker_beacon/burgundy, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/escape/brig) +"YN" = ( +/obj/structure/table/reinforced, +/obj/item/storage/medkit/advanced, +/obj/item/crowbar, +/obj/machinery/vending/wallmed/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"ZA" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/open/floor/iron/smooth_large, +/area/shuttle/escape) +"ZF" = ( +/turf/template_noop, +/area/template_noop) +"ZJ" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Shuttle Medbay" + }, +/obj/effect/turf_decal/delivery/white, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) + +(1,1,1) = {" +ZF +ZF +ZF +aL +YF +Iy +Iy +Iy +Nq +YF +zw +ov +Iu +Iu +Iu +ov +IB +ov +IB +ov +Xt +rK +ZF +ZF +ZF +ZF +ZF +"} +(2,1,1) = {" +ZF +ZF +ZF +DD +te +vm +QD +li +dN +Iy +MJ +qQ +zc +OY +ig +VC +MJ +lL +MJ +qQ +OY +ov +ov +rK +ZF +ZF +ZF +"} +(3,1,1) = {" +ZF +ZF +ZF +zC +wr +wr +wr +Op +qN +mL +gV +dw +dw +fN +fN +fN +OG +dw +gV +fN +fN +fN +HR +rP +ZF +ZF +ZF +"} +(4,1,1) = {" +ZF +ZF +ZF +Iy +Hf +xJ +FT +lh +Pd +zC +tl +Rc +xE +OJ +WW +oe +Rc +xE +OJ +bn +tl +ig +HR +Cc +ZF +ZF +ZF +"} +(5,1,1) = {" +sh +Iu +ov +Iy +Iy +Iy +Iy +Iy +Iy +Iy +ov +vx +vx +ov +ov +ov +vx +vx +ov +ov +ov +ov +ov +ov +ov +Xt +rK +"} +(6,1,1) = {" +Iu +lq +en +lL +SR +nF +qp +ov +eL +Sv +Ow +Rc +xE +eL +Sv +Ow +Rc +xE +eL +Sv +Ow +ov +wl +Nv +tl +HR +rP +"} +(7,1,1) = {" +Iu +cd +Ri +EH +EH +Dg +Lc +Iu +dW +oT +mI +ir +Li +dW +oT +mI +ir +Li +dW +oT +mI +ov +pP +jW +EH +HR +Cc +"} +(8,1,1) = {" +Iu +cV +Ri +EH +Pu +EH +EH +RS +EH +jW +jW +Rc +xE +jW +jW +jW +Rc +xE +jW +jW +EH +yz +EH +jW +Qf +ov +ov +"} +(9,1,1) = {" +rK +ov +Ye +ZA +EH +Dg +MH +Iu +eL +fi +Ow +ir +Li +eL +fi +Ow +ir +Li +eL +fi +Ow +ov +iC +jW +Br +HR +Cc +"} +(10,1,1) = {" +ZF +ov +dY +KI +Ws +YN +Qz +ov +dW +dZ +mI +Rc +xE +dW +dZ +mI +Rc +xE +dW +dZ +mI +ov +ua +EH +MK +HR +rP +"} +(11,1,1) = {" +ZF +RL +ov +ov +ov +ov +ov +ov +ov +ov +ov +vx +vx +ov +ov +ov +ZJ +ZJ +ov +ov +ov +ov +ov +ov +ov +EC +rK +"} +(12,1,1) = {" +ZF +ZF +ZF +ov +Hr +tF +On +lL +vF +tF +On +Rc +xE +Iu +NG +Hs +Bn +Bn +Kz +SK +oV +zB +HR +FS +ZF +ZF +ZF +"} +(13,1,1) = {" +ZF +ZF +ZF +Iu +fN +fN +fN +fN +fN +fN +fN +gV +gV +ZJ +Bn +Bn +Bn +Bn +Bn +Bn +Bn +Bn +HR +kP +ZF +ZF +ZF +"} +(14,1,1) = {" +ZF +ZF +ZF +Pa +Hr +Dq +On +bI +vF +Dq +On +CR +ig +ov +rh +bR +CI +HH +BA +qb +gI +ov +ov +rK +ZF +ZF +ZF +"} +(15,1,1) = {" +ZF +ZF +ZF +rK +EC +ov +ov +ov +ov +ov +ov +ov +ov +EC +ov +Iu +Iu +Iu +ov +ov +EC +rK +ZF +ZF +ZF +ZF +ZF +"} diff --git a/_maps/shuttles/skyrat/emergency_outpost.dmm b/_maps/shuttles/nova/emergency_outpost.dmm similarity index 100% rename from _maps/shuttles/skyrat/emergency_outpost.dmm rename to _maps/shuttles/nova/emergency_outpost.dmm diff --git a/_maps/shuttles/nova/ferry_nova.dmm b/_maps/shuttles/nova/ferry_nova.dmm new file mode 100644 index 00000000000000..a4a9ccb4a54e2c --- /dev/null +++ b/_maps/shuttles/nova/ferry_nova.dmm @@ -0,0 +1,954 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aF" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "1,4" + }, +/area/shuttle/transport) +"bd" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "5,1" + }, +/area/shuttle/transport) +"cz" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "1,6" + }, +/area/shuttle/transport) +"cK" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "2,3" + }, +/area/shuttle/transport) +"el" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/open/floor/iron/shuttle/ferry{ + dir = 8; + icon_state = "floor" + }, +/area/shuttle/transport) +"fT" = ( +/turf/open/floor/iron/shuttle/ferry{ + dir = 8; + icon_state = "sign_2" + }, +/area/shuttle/transport) +"gd" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "3,2" + }, +/area/shuttle/transport) +"go" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "16,7" + }, +/area/shuttle/transport) +"gS" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "19,3" + }, +/area/shuttle/transport) +"hn" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "17,9" + }, +/area/shuttle/transport) +"ht" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "7,2" + }, +/area/shuttle/transport) +"hw" = ( +/turf/open/floor/iron/shuttle/ferry{ + dir = 8 + }, +/area/shuttle/transport) +"hY" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "15,6" + }, +/area/shuttle/transport) +"io" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "17,5" + }, +/area/shuttle/transport) +"iF" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "2,6" + }, +/area/shuttle/transport) +"iL" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "18,9" + }, +/area/shuttle/transport) +"jg" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "6,8" + }, +/area/shuttle/transport) +"jE" = ( +/obj/machinery/computer/security/shuttle, +/turf/open/floor/iron/shuttle/ferry{ + dir = 8 + }, +/area/shuttle/transport) +"jG" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "9,7" + }, +/area/shuttle/transport) +"jP" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "12,3" + }, +/area/shuttle/transport) +"lN" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "2,2" + }, +/area/shuttle/transport) +"nf" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "19,1" + }, +/area/shuttle/transport) +"ny" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "18,0" + }, +/area/shuttle/transport) +"nC" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "8,4" + }, +/area/shuttle/transport) +"oR" = ( +/turf/open/floor/iron/shuttle/ferry{ + dir = 8; + icon_state = "sign_1" + }, +/area/shuttle/transport) +"pk" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "2,5" + }, +/area/shuttle/transport) +"qm" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "16,6" + }, +/area/shuttle/transport) +"qr" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "0,4" + }, +/area/shuttle/transport) +"qN" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "3,8" + }, +/area/shuttle/transport) +"rb" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "19,7" + }, +/area/shuttle/transport) +"rg" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "18,8" + }, +/area/shuttle/transport) +"rq" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "18,6" + }, +/area/shuttle/transport) +"rT" = ( +/obj/machinery/computer/crew/shuttle, +/turf/open/floor/iron/shuttle/ferry{ + dir = 8 + }, +/area/shuttle/transport) +"sk" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "3,9" + }, +/area/shuttle/transport) +"tq" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "17,8" + }, +/area/shuttle/transport) +"tu" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "13,7" + }, +/area/shuttle/transport) +"tB" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "14,4" + }, +/area/shuttle/transport) +"tI" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "19,9" + }, +/area/shuttle/transport) +"uf" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "1,7" + }, +/area/shuttle/transport) +"ur" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "1,3" + }, +/area/shuttle/transport) +"uD" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/open/floor/iron/shuttle/ferry{ + dir = 8 + }, +/area/shuttle/transport) +"uI" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "17,4" + }, +/area/shuttle/transport) +"ve" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "1,5" + }, +/area/shuttle/transport) +"vl" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "5,9" + }, +/area/shuttle/transport) +"xR" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "6,2" + }, +/area/shuttle/transport) +"xS" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "19,2" + }, +/area/shuttle/transport) +"yB" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "4,1" + }, +/area/shuttle/transport) +"yF" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "15,4" + }, +/area/shuttle/transport) +"zs" = ( +/obj/effect/turf_decal/caution{ + dir = 4 + }, +/obj/machinery/light/no_nightlight{ + dir = 8 + }, +/turf/open/floor/iron/shuttle/ferry{ + dir = 8 + }, +/area/shuttle/transport) +"zN" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "17,7" + }, +/area/shuttle/transport) +"AB" = ( +/obj/machinery/computer/security/shuttle{ + dir = 4 + }, +/turf/open/floor/iron/shuttle/ferry{ + dir = 8 + }, +/area/shuttle/transport) +"AW" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/open/floor/iron/shuttle/ferry{ + dir = 8 + }, +/area/shuttle/transport) +"By" = ( +/obj/structure/fans/tiny/forcefield{ + dir = 8 + }, +/obj/machinery/door/airlock/grunge, +/turf/open/floor/iron/shuttle/ferry{ + dir = 8; + icon_state = "floor" + }, +/area/shuttle/transport) +"Co" = ( +/obj/machinery/light/no_nightlight{ + dir = 4 + }, +/obj/structure/closet/shuttle/medical{ + dir = 8 + }, +/turf/open/floor/iron/shuttle/ferry{ + dir = 8 + }, +/area/shuttle/transport) +"Cz" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "13,3" + }, +/area/shuttle/transport) +"CC" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "15,5" + }, +/area/shuttle/transport) +"CE" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "17,6" + }, +/area/shuttle/transport) +"CL" = ( +/obj/machinery/computer/security/shuttle{ + dir = 8 + }, +/turf/open/floor/iron/shuttle/ferry{ + dir = 8 + }, +/area/shuttle/transport) +"CM" = ( +/turf/open/floor/iron/shuttle/ferry{ + dir = 8; + icon_state = "floor" + }, +/area/shuttle/transport) +"Dt" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "12,7" + }, +/area/shuttle/transport) +"Dy" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "17,2" + }, +/area/shuttle/transport) +"Ed" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "19,0" + }, +/area/shuttle/transport) +"Ei" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "16,3" + }, +/area/shuttle/transport) +"El" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "16,4" + }, +/area/shuttle/transport) +"Ev" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin/carbon, +/obj/machinery/light/no_nightlight{ + dir = 8 + }, +/turf/open/floor/iron/shuttle/ferry{ + dir = 8 + }, +/area/shuttle/transport) +"Ew" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/machinery/light/no_nightlight{ + dir = 8 + }, +/turf/open/floor/iron/shuttle/ferry{ + dir = 8 + }, +/area/shuttle/transport) +"Fk" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "14,5" + }, +/area/shuttle/transport) +"Fz" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "16,5" + }, +/area/shuttle/transport) +"GQ" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "13,4" + }, +/area/shuttle/transport) +"GX" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "7,8" + }, +/area/shuttle/transport) +"GY" = ( +/obj/machinery/door/airlock/command/glass{ + name = "Cockpit"; + req_access = list("cent_general") + }, +/turf/open/floor/iron/stairs, +/area/shuttle/transport) +"Hn" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "18,3" + }, +/area/shuttle/transport) +"HU" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "19,10" + }, +/area/shuttle/transport) +"Ig" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "17,3" + }, +/area/shuttle/transport) +"Im" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/open/floor/iron/shuttle/ferry{ + dir = 8 + }, +/area/shuttle/transport) +"Io" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "8,2" + }, +/area/shuttle/transport) +"Ip" = ( +/obj/machinery/computer/shuttle/ferry/shuttle, +/turf/open/floor/iron/shuttle/ferry{ + dir = 8; + icon_state = "floor" + }, +/area/shuttle/transport) +"IG" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "6,9" + }, +/area/shuttle/transport) +"IM" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "18,7" + }, +/area/shuttle/transport) +"Ks" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8 + }, +/area/shuttle/transport) +"Kx" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "4,9" + }, +/area/shuttle/transport) +"KY" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "17,1" + }, +/area/shuttle/transport) +"Lq" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "2,8" + }, +/area/shuttle/transport) +"LW" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "8,8" + }, +/area/shuttle/transport) +"Mr" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "6,1" + }, +/area/shuttle/transport) +"NL" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin/carbon, +/obj/machinery/light/no_nightlight{ + dir = 4 + }, +/turf/open/floor/iron/shuttle/ferry{ + dir = 8 + }, +/area/shuttle/transport) +"ON" = ( +/turf/template_noop, +/area/template_noop) +"Py" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "13,6" + }, +/area/shuttle/transport) +"Pz" = ( +/obj/structure/closet/shuttle/emergency{ + dir = 8 + }, +/turf/open/floor/iron/shuttle/ferry{ + dir = 8 + }, +/area/shuttle/transport) +"Qg" = ( +/obj/structure/fans/tiny/forcefield{ + dir = 8 + }, +/obj/docking_port/mobile{ + dir = 8; + shuttle_id = "ferry"; + name = "ferry shuttle"; + port_direction = 4 + }, +/obj/machinery/door/airlock/grunge, +/turf/open/floor/iron/shuttle/ferry{ + dir = 8; + icon_state = "floor" + }, +/area/shuttle/transport) +"Ql" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "2,7" + }, +/area/shuttle/transport) +"Qo" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "0,5" + }, +/area/shuttle/transport) +"QN" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "18,10" + }, +/area/shuttle/transport) +"Rc" = ( +/obj/effect/turf_decal/caution{ + dir = 8 + }, +/obj/machinery/light/no_nightlight{ + dir = 4 + }, +/turf/open/floor/iron/shuttle/ferry{ + dir = 8 + }, +/area/shuttle/transport) +"RL" = ( +/obj/machinery/computer/crew/shuttle{ + dir = 8 + }, +/turf/open/floor/iron/shuttle/ferry{ + dir = 8 + }, +/area/shuttle/transport) +"Ss" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "8,7" + }, +/area/shuttle/transport) +"SN" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "18,1" + }, +/area/shuttle/transport) +"SQ" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "18,4" + }, +/area/shuttle/transport) +"Tk" = ( +/obj/structure/closet/shuttle/emergency{ + dir = 1 + }, +/obj/machinery/light/no_nightlight, +/turf/open/floor/iron/shuttle/ferry{ + dir = 8 + }, +/area/shuttle/transport) +"Tm" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "14,6" + }, +/area/shuttle/transport) +"TM" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "3,1" + }, +/area/shuttle/transport) +"Ud" = ( +/obj/machinery/computer/crew/shuttle{ + dir = 4 + }, +/turf/open/floor/iron/shuttle/ferry{ + dir = 8 + }, +/area/shuttle/transport) +"UD" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "19,8" + }, +/area/shuttle/transport) +"Vc" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "8,3" + }, +/area/shuttle/transport) +"Xl" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "8,6" + }, +/area/shuttle/transport) +"XG" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "2,4" + }, +/area/shuttle/transport) +"XP" = ( +/obj/machinery/light/small/red/directional/north, +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ + dir = 8; + icon_state = "18,5" + }, +/area/shuttle/transport) +"YJ" = ( +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ + dir = 8; + icon_state = "9,3" + }, +/area/shuttle/transport) + +(1,1,1) = {" +ON +ON +ON +ON +ON +ON +ON +ON +ON +ON +ON +ON +ON +ON +ON +ON +ON +ON +ny +Ed +"} +(2,1,1) = {" +ON +ON +ON +TM +yB +bd +Mr +ON +ON +ON +ON +ON +ON +ON +ON +ON +ON +KY +SN +nf +"} +(3,1,1) = {" +ON +ON +lN +gd +Ud +AB +xR +ht +Io +ON +ON +ON +ON +ON +ON +ON +ON +Dy +Ks +xS +"} +(4,1,1) = {" +ON +ur +cK +Ev +Im +hw +AW +Ew +Vc +YJ +By +By +jP +Cz +ON +ON +Ei +Ig +Hn +gS +"} +(5,1,1) = {" +qr +aF +XG +rT +hw +hw +AW +AW +nC +zs +fT +fT +zs +GQ +tB +yF +El +uI +SQ +ON +"} +(6,1,1) = {" +Qo +ve +pk +Ip +el +CM +CM +CM +GY +CM +CM +CM +CM +Tk +Fk +CC +Fz +io +XP +ON +"} +(7,1,1) = {" +ON +cz +iF +jE +hw +hw +oR +oR +Xl +Rc +fT +fT +Rc +Py +Tm +hY +qm +CE +rq +ON +"} +(8,1,1) = {" +ON +uf +Ql +NL +uD +uD +Pz +Co +Ss +jG +By +Qg +Dt +tu +ON +ON +go +zN +IM +rb +"} +(9,1,1) = {" +ON +ON +Lq +qN +RL +CL +jg +GX +LW +ON +ON +ON +ON +ON +ON +ON +ON +tq +rg +UD +"} +(10,1,1) = {" +ON +ON +ON +sk +Kx +vl +IG +ON +ON +ON +ON +ON +ON +ON +ON +ON +ON +hn +iL +tI +"} +(11,1,1) = {" +ON +ON +ON +ON +ON +ON +ON +ON +ON +ON +ON +ON +ON +ON +ON +ON +ON +ON +QN +HU +"} diff --git a/_maps/shuttles/skyrat/labour_skyrat.dmm b/_maps/shuttles/nova/labour_nova.dmm similarity index 100% rename from _maps/shuttles/skyrat/labour_skyrat.dmm rename to _maps/shuttles/nova/labour_nova.dmm diff --git a/_maps/shuttles/skyrat/mining_common_skyrat.dmm b/_maps/shuttles/nova/mining_common_nova.dmm similarity index 100% rename from _maps/shuttles/skyrat/mining_common_skyrat.dmm rename to _maps/shuttles/nova/mining_common_nova.dmm diff --git a/_maps/shuttles/skyrat/mining_skyrat.dmm b/_maps/shuttles/nova/mining_nova.dmm similarity index 100% rename from _maps/shuttles/skyrat/mining_skyrat.dmm rename to _maps/shuttles/nova/mining_nova.dmm diff --git a/_maps/shuttles/skyrat/mining_large_skyrat.dmm b/_maps/shuttles/nova/mining_nova_large.dmm similarity index 100% rename from _maps/shuttles/skyrat/mining_large_skyrat.dmm rename to _maps/shuttles/nova/mining_nova_large.dmm diff --git a/_maps/shuttles/skyrat/pirate_nri_raider.dmm b/_maps/shuttles/nova/pirate_nri_raider.dmm similarity index 95% rename from _maps/shuttles/skyrat/pirate_nri_raider.dmm rename to _maps/shuttles/nova/pirate_nri_raider.dmm index 5c44bc377d4a4c..1fa7bc5c46929f 100644 --- a/_maps/shuttles/skyrat/pirate_nri_raider.dmm +++ b/_maps/shuttles/nova/pirate_nri_raider.dmm @@ -9,22 +9,6 @@ }, /turf/open/floor/engine/hull/reinforced, /area/shuttle/pirate/nri) -"aW" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/flashes{ - pixel_x = -2 - }, -/obj/item/storage/box/zipties{ - pixel_x = 2 - }, -/obj/item/gun/energy/e_gun/advtaser, -/obj/item/gun/energy/e_gun/advtaser, -/obj/item/gun/energy/e_gun/advtaser, -/obj/item/melee/baton, -/obj/item/melee/baton, -/obj/item/melee/baton, -/turf/open/floor/pod, -/area/shuttle/pirate/nri) "be" = ( /obj/structure/table/reinforced, /obj/item/modular_computer/laptop/preset/civilian, @@ -157,8 +141,17 @@ /obj/structure/rack/shelf, /obj/effect/turf_decal/stripes/line, /obj/machinery/light/small/red/directional/north, -/obj/item/storage/toolbox/ammobox/full/nri_smg, -/obj/item/storage/toolbox/ammobox/full/nri_smg, +/obj/item/ammo_box/c27_54cesarzowa, +/obj/item/ammo_box/c27_54cesarzowa, +/obj/item/ammo_box/c27_54cesarzowa/rubber{ + pixel_y = 6 + }, +/obj/item/ammo_box/c27_54cesarzowa/rubber{ + pixel_y = 6 + }, +/obj/item/ammo_box/magazine/miecz, +/obj/item/ammo_box/magazine/miecz, +/obj/item/ammo_box/magazine/miecz, /turf/open/floor/pod/light, /area/shuttle/pirate/nri) "fJ" = ( @@ -233,7 +226,6 @@ }, /obj/effect/mapping_helpers/airlock/autoname, /obj/docking_port/mobile/pirate/nri_raider{ - dir = 1; launch_status = 0 }, /turf/open/floor/plating, @@ -256,7 +248,6 @@ }, /obj/machinery/computer/shuttle/pirate/nri{ dir = 8; - name = "police shuttle console"; req_access = list("syndicate") }, /turf/open/floor/carpet/green, @@ -275,6 +266,17 @@ /obj/structure/cable, /turf/open/floor/pod/light, /area/shuttle/pirate/nri) +"kq" = ( +/obj/structure/rack/gunrack, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/item/gun/ballistic/shotgun/riot{ + pixel_x = -4 + }, +/obj/item/gun/ballistic/automatic/miecz, +/turf/open/floor/pod, +/area/shuttle/pirate/nri) "kQ" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -374,7 +376,7 @@ /obj/structure/cable, /turf/open/floor/pod, /area/shuttle/pirate/nri) -"pt" = ( +"pg" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -383,14 +385,12 @@ desc = "A secure crate to keep all your personal belongings in."; anchored = 1 }, -/obj/item/clothing/under/costume/nri/engineer, /obj/item/clothing/mask/balaclavaadjust, -/obj/item/clothing/under/syndicate/rus_army/cin_surplus/marine, /obj/item/clothing/glasses/meson/engine, /obj/item/storage/belt/military/cin_surplus/marine, -/obj/item/clothing/suit/armor/vest/cin_surplus_vest, -/obj/item/clothing/head/helmet/cin_surplus_helmet/marine, /obj/item/clothing/glasses/hud/security/sunglasses/peacekeeper, +/obj/item/clothing/head/helmet/nri_police, +/obj/item/clothing/suit/armor/vest/nri_police, /obj/item/encryptionkey/heads/ce, /turf/open/floor/pod/light, /area/shuttle/pirate/nri) @@ -405,9 +405,6 @@ /turf/open/floor/plating, /area/shuttle/pirate/nri) "qp" = ( -/obj/machinery/base_alarm/nri_raider{ - pixel_x = 32 - }, /turf/open/floor/pod/light, /area/shuttle/pirate/nri) "qz" = ( @@ -464,15 +461,6 @@ /obj/machinery/recharger, /turf/open/floor/pod/light, /area/shuttle/pirate/nri) -"rk" = ( -/obj/structure/rack/gunrack, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/item/gun/ballistic/shotgun/riot, -/obj/item/gun/ballistic/automatic/nri_smg, -/turf/open/floor/pod, -/area/shuttle/pirate/nri) "rp" = ( /obj/effect/turf_decal/delivery, /obj/structure/cable, @@ -513,6 +501,22 @@ /obj/machinery/power/terminal, /turf/open/floor/plating, /area/shuttle/pirate/nri) +"ts" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/flashes{ + pixel_x = -2 + }, +/obj/item/storage/box/zipties{ + pixel_x = 2 + }, +/obj/item/melee/baton, +/obj/item/melee/baton, +/obj/item/melee/baton, +/obj/item/gun/energy/e_gun/advtaser/normal, +/obj/item/gun/energy/e_gun/advtaser/normal, +/obj/item/gun/energy/e_gun/advtaser/normal, +/turf/open/floor/pod, +/area/shuttle/pirate/nri) "ty" = ( /obj/structure/cable, /obj/machinery/power/terminal{ @@ -525,9 +529,9 @@ /obj/structure/lattice/catwalk, /turf/open/floor/plating/airless, /area/shuttle/pirate/nri) -"tN" = ( +"uh" = ( /obj/structure/rack/gunrack, -/obj/item/gun/ballistic/automatic/akm/civvie, +/obj/item/gun/ballistic/automatic/lanca, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -599,9 +603,6 @@ /turf/open/floor/pod/light, /area/shuttle/pirate/nri) "wh" = ( -/obj/machinery/base_alarm/nri_raider{ - pixel_x = 32 - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -717,9 +718,6 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/machinery/base_alarm/nri_raider{ - pixel_y = 32 - }, /obj/item/storage/medkit/surgery, /turf/open/floor/pod/dark, /area/shuttle/pirate/nri) @@ -806,31 +804,7 @@ }, /turf/open/floor/plating/airless, /area/shuttle/pirate/nri) -"CC" = ( -/obj/machinery/light/small/red/directional/south, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/closet/crate/secure/weapon{ - name = "footlocker"; - desc = "A secure crate to keep all your personal belongings in."; - anchored = 1 - }, -/obj/item/clothing/glasses/hud/health, -/obj/item/clothing/under/costume/nri/medic, -/obj/item/clothing/glasses/hud/security/sunglasses/peacekeeper, -/obj/item/clothing/mask/balaclavaadjust, -/obj/item/clothing/under/syndicate/rus_army/cin_surplus/marine, -/obj/item/storage/belt/military/cin_surplus/marine, -/obj/item/clothing/suit/armor/vest/cin_surplus_vest, -/obj/item/clothing/head/helmet/cin_surplus_helmet/marine, -/obj/item/encryptionkey/heads/cmo, -/turf/open/floor/pod/light, -/area/shuttle/pirate/nri) "CP" = ( -/obj/machinery/base_alarm/nri_raider{ - pixel_x = -32 - }, /obj/machinery/newscaster/directional/north, /obj/structure/frame/computer, /obj/item/circuitboard/computer/advanced_camera, @@ -855,6 +829,23 @@ /obj/machinery/light/floor, /turf/open/floor/engine/hull/reinforced, /area/shuttle/pirate/nri) +"DL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/closet/crate/secure/weapon{ + name = "footlocker"; + desc = "A secure crate to keep all your personal belongings in."; + anchored = 1 + }, +/obj/item/clothing/glasses/hud/security/sunglasses/peacekeeper, +/obj/item/clothing/mask/balaclavaadjust, +/obj/item/storage/belt/military/cin_surplus/marine, +/obj/item/clothing/head/helmet/nri_police, +/obj/item/clothing/suit/armor/vest/nri_police, +/obj/item/encryptionkey/heads/hos, +/turf/open/floor/pod/light, +/area/shuttle/pirate/nri) "Eh" = ( /obj/structure/window/reinforced/survival_pod/spawner/directional/east, /obj/machinery/power/smes/engineering, @@ -908,6 +899,32 @@ "GO" = ( /turf/open/floor/engine/hull, /area/shuttle/pirate/nri) +"Hh" = ( +/obj/structure/rack/shelf, +/obj/effect/turf_decal/stripes/line, +/obj/item/ammo_box/c310_cargo_box/piercing{ + pixel_x = 1; + pixel_y = 1 + }, +/obj/item/ammo_box/c310_cargo_box/piercing{ + pixel_x = 1; + pixel_y = 1 + }, +/obj/item/ammo_box/c310_cargo_box/rubber{ + pixel_x = -1; + pixel_y = -1 + }, +/obj/item/ammo_box/c310_cargo_box/rubber{ + pixel_x = -1; + pixel_y = -1 + }, +/obj/item/ammo_box/c310_cargo_box, +/obj/item/ammo_box/c310_cargo_box, +/obj/item/ammo_box/magazine/lanca, +/obj/item/ammo_box/magazine/lanca, +/obj/item/ammo_box/magazine/lanca, +/turf/open/floor/pod/light, +/area/shuttle/pirate/nri) "Hl" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -934,25 +951,6 @@ "Hz" = ( /turf/closed/wall/mineral/titanium/spaceship/nodiagonal, /area/shuttle/pirate/nri) -"HD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/structure/closet/crate/secure/weapon{ - name = "footlocker"; - desc = "A secure crate to keep all your personal belongings in."; - anchored = 1 - }, -/obj/item/clothing/under/costume/nri/captain, -/obj/item/clothing/glasses/hud/security/sunglasses/peacekeeper, -/obj/item/clothing/mask/balaclavaadjust, -/obj/item/clothing/under/syndicate/rus_army/cin_surplus/marine, -/obj/item/storage/belt/military/cin_surplus/marine, -/obj/item/clothing/suit/armor/vest/cin_surplus_vest, -/obj/item/clothing/head/helmet/cin_surplus_helmet/marine, -/obj/item/encryptionkey/heads/hos, -/turf/open/floor/pod/light, -/area/shuttle/pirate/nri) "HO" = ( /obj/machinery/door/airlock/survival_pod/glass{ dir = 1 @@ -1005,10 +1003,43 @@ "IY" = ( /turf/open/floor/engine/hull/reinforced, /area/shuttle/pirate/nri) +"JB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/closet/crate/secure/weapon{ + anchored = 1 + }, +/obj/machinery/light/small/red/directional/south, +/obj/item/ammo_box/advanced/s12gauge/bean, +/obj/item/ammo_box/advanced/s12gauge/bean, +/obj/item/ammo_box/advanced/s12gauge/magnum, +/obj/item/ammo_box/advanced/s12gauge/express, +/turf/open/floor/pod/dark, +/area/shuttle/pirate/nri) "JS" = ( /obj/structure/cable, /turf/open/floor/engine/hull/reinforced, /area/shuttle/pirate/nri) +"Kb" = ( +/obj/machinery/light/small/red/directional/south, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/closet/crate/secure/weapon{ + name = "footlocker"; + desc = "A secure crate to keep all your personal belongings in."; + anchored = 1 + }, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/glasses/hud/security/sunglasses/peacekeeper, +/obj/item/clothing/mask/balaclavaadjust, +/obj/item/storage/belt/military/cin_surplus/marine, +/obj/item/clothing/head/helmet/nri_police, +/obj/item/clothing/suit/armor/vest/nri_police, +/obj/item/encryptionkey/heads/cmo, +/turf/open/floor/pod/light, +/area/shuttle/pirate/nri) "Kc" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -1036,26 +1067,6 @@ /obj/item/mod/module/holster, /turf/open/floor/pod/dark, /area/shuttle/pirate/nri) -"Lx" = ( -/obj/structure/rack/shelf, -/obj/effect/turf_decal/stripes/line, -/obj/item/ammo_box/c56mm{ - pixel_x = 1; - pixel_y = 1 - }, -/obj/item/ammo_box/c56mm/rubber{ - pixel_x = -1; - pixel_y = -1 - }, -/obj/item/ammo_box/c56mm, -/obj/item/ammo_box/magazine/akm/civvie, -/obj/item/ammo_box/magazine/akm/civvie, -/obj/item/ammo_box/magazine/akm/civvie, -/obj/item/ammo_box/magazine/akm/civvie, -/obj/item/ammo_box/magazine/akm/civvie, -/obj/item/ammo_box/magazine/akm/civvie, -/turf/open/floor/pod/light, -/area/shuttle/pirate/nri) "LA" = ( /obj/structure/table/reinforced, /obj/item/storage/medkit/brute{ @@ -1111,20 +1122,6 @@ /obj/item/stack/sticky_tape/surgical, /turf/open/floor/pod, /area/shuttle/pirate/nri) -"NT" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/structure/closet/crate/secure/weapon{ - anchored = 1 - }, -/obj/machinery/light/small/red/directional/south, -/obj/item/ammo_box/c9mm/ap, -/obj/item/ammo_box/c9mm, -/obj/item/ammo_box/c9mm, -/obj/item/ammo_box/c9mm/hp, -/turf/open/floor/pod/dark, -/area/shuttle/pirate/nri) "NW" = ( /obj/machinery/power/shuttle_engine/propulsion/burst{ dir = 8 @@ -1266,9 +1263,6 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/machinery/base_alarm/nri_raider{ - pixel_y = 32 - }, /turf/open/floor/pod/dark, /area/shuttle/pirate/nri) "UO" = ( @@ -1600,8 +1594,8 @@ yE (11,1,1) = {" Hz Pi -rk -tN +kq +uh Hz Iv Iv @@ -1635,7 +1629,7 @@ Hz Hz fB wb -NT +JB Hz rd pe @@ -1645,12 +1639,12 @@ be Hz Bw wb -HD +DL Hz "} (14,1,1) = {" Hz -Lx +Hh wb Ci Hz @@ -1662,14 +1656,14 @@ tk Hz bE wb -pt +pg Hz "} (15,1,1) = {" Hz rg qp -aW +ts Hz pQ tl @@ -1679,7 +1673,7 @@ hl Hz TF qp -CC +Kb Hz "} (16,1,1) = {" diff --git a/_maps/shuttles/skyrat/prison_transport.dmm b/_maps/shuttles/nova/prison_transport.dmm similarity index 99% rename from _maps/shuttles/skyrat/prison_transport.dmm rename to _maps/shuttles/nova/prison_transport.dmm index 71d66097094ad8..9cc976661d17c1 100644 --- a/_maps/shuttles/skyrat/prison_transport.dmm +++ b/_maps/shuttles/nova/prison_transport.dmm @@ -232,7 +232,7 @@ /area/shuttle/prison_transport) "kW" = ( /obj/effect/turf_decal/trimline/brown/warning, -/obj/effect/turf_decal/skyrat_decals/departments/bridge, +/obj/effect/turf_decal/nova_decals/departments/bridge, /turf/open/floor/iron/smooth_half, /area/shuttle/prison_transport) "lk" = ( diff --git a/_maps/shuttles/skyrat/ruin_blackmarket_chevvy.dmm b/_maps/shuttles/nova/ruin_blackmarket_chevvy.dmm similarity index 100% rename from _maps/shuttles/skyrat/ruin_blackmarket_chevvy.dmm rename to _maps/shuttles/nova/ruin_blackmarket_chevvy.dmm diff --git a/_maps/shuttles/skyrat/ruin_tarkon_driverdc2.dmm b/_maps/shuttles/nova/ruin_tarkon_driverdc2.dmm similarity index 100% rename from _maps/shuttles/skyrat/ruin_tarkon_driverdc2.dmm rename to _maps/shuttles/nova/ruin_tarkon_driverdc2.dmm diff --git a/_maps/shuttles/skyrat/ruin_tarkon_driverdc3.dmm b/_maps/shuttles/nova/ruin_tarkon_driverdc3.dmm similarity index 100% rename from _maps/shuttles/skyrat/ruin_tarkon_driverdc3.dmm rename to _maps/shuttles/nova/ruin_tarkon_driverdc3.dmm diff --git a/_maps/shuttles/skyrat/ruin_tarkon_driverdc54.dmm b/_maps/shuttles/nova/ruin_tarkon_driverdc54.dmm similarity index 100% rename from _maps/shuttles/skyrat/ruin_tarkon_driverdc54.dmm rename to _maps/shuttles/nova/ruin_tarkon_driverdc54.dmm diff --git a/_maps/shuttles/skyrat/slaver_syndie.dmm b/_maps/shuttles/nova/slaver_syndie.dmm similarity index 100% rename from _maps/shuttles/skyrat/slaver_syndie.dmm rename to _maps/shuttles/nova/slaver_syndie.dmm diff --git a/_maps/shuttles/skyrat/whiteship_blueshift.dmm b/_maps/shuttles/nova/whiteship_blueshift.dmm similarity index 99% rename from _maps/shuttles/skyrat/whiteship_blueshift.dmm rename to _maps/shuttles/nova/whiteship_blueshift.dmm index 187ae424c1143e..533ea6484b0dd9 100644 --- a/_maps/shuttles/skyrat/whiteship_blueshift.dmm +++ b/_maps/shuttles/nova/whiteship_blueshift.dmm @@ -3261,7 +3261,6 @@ /obj/structure/alien/weeds/node, /obj/machinery/anesthetic_machine, /obj/item/tank/internals/anesthetic, -/obj/item/clothing/mask/breath/anesthetic, /turf/open/floor/iron/white/side, /area/shuttle/abandoned/medbay) "FB" = ( @@ -3473,7 +3472,7 @@ /obj/effect/turf_decal/tile/bar{ dir = 1 }, -/mob/living/simple_animal/pet/cat{ +/mob/living/basic/pet/cat{ name = "Jones" }, /turf/open/floor/iron, diff --git a/_maps/shuttles/pirate_ex_interdyne.dmm b/_maps/shuttles/pirate_ex_interdyne.dmm index 5d2149c049fa52..b2cd861bed41c0 100644 --- a/_maps/shuttles/pirate_ex_interdyne.dmm +++ b/_maps/shuttles/pirate_ex_interdyne.dmm @@ -52,7 +52,6 @@ /obj/effect/mapping_helpers/airlock/cutaiwire, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/tile/dark_blue/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/iron/dark, /area/shuttle/pirate) @@ -276,7 +275,7 @@ /area/shuttle/pirate) "aO" = ( /obj/machinery/porta_turret/syndicate/energy/heavy{ - faction = list("pirate","Syndicate") + faction = list("pirate","Symphionia") }, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/shuttle/pirate) @@ -491,7 +490,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, -/mob/living/simple_animal/bot/medbot/nukie{ +/mob/living/basic/bot/medbot/nukie{ name = "Dr. Pax"; desc = "A twitchy medibot. It can't seem to hold still. Slightly concerning." }, @@ -808,7 +807,7 @@ /area/shuttle/pirate) "Tr" = ( /obj/machinery/porta_turret/syndicate/energy/heavy{ - faction = list("pirate","Syndicate"); + faction = list("pirate","Symphionia"); max_integrity = 10000 }, /turf/closed/wall/mineral/plastitanium/nodiagonal, diff --git a/_maps/shuttles/pirate_grey.dmm b/_maps/shuttles/pirate_grey.dmm index c81c004f6e6751..0726d8d1ea196b 100644 --- a/_maps/shuttles/pirate_grey.dmm +++ b/_maps/shuttles/pirate_grey.dmm @@ -718,7 +718,7 @@ /area/shuttle/pirate) "xR" = ( /obj/effect/turf_decal/bot, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/floor/iron, /area/shuttle/pirate) "xT" = ( @@ -1042,7 +1042,7 @@ /turf/open/floor/iron, /area/shuttle/pirate) "Ha" = ( -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/floor/iron, /area/shuttle/pirate) "Hh" = ( diff --git a/_maps/shuttles/pirate_silverscale.dmm b/_maps/shuttles/pirate_silverscale.dmm index efe506d8f87830..e4838e040e4729 100644 --- a/_maps/shuttles/pirate_silverscale.dmm +++ b/_maps/shuttles/pirate_silverscale.dmm @@ -377,7 +377,7 @@ /turf/open/floor/pod/dark, /area/shuttle/pirate) "zm" = ( -/obj/item/storage/secure/safe/directional/north, +/obj/structure/secure_safe/directional/north, /obj/machinery/airalarm/directional/east, /obj/effect/mapping_helpers/airalarm/all_access, /obj/structure/bed/pod, diff --git a/_maps/shuttles/ruin_cyborg_mothership.dmm b/_maps/shuttles/ruin_cyborg_mothership.dmm index ac61c9b98df11f..9f8cc92dd22d1e 100644 --- a/_maps/shuttles/ruin_cyborg_mothership.dmm +++ b/_maps/shuttles/ruin_cyborg_mothership.dmm @@ -17,7 +17,7 @@ /turf/open/floor/plating/airless, /area/shuttle/ruin/cyborg_mothership) "bE" = ( -/mob/living/simple_animal/bot/cleanbot, +/mob/living/basic/bot/cleanbot, /turf/open/floor/iron/showroomfloor, /area/shuttle/ruin/cyborg_mothership) "cU" = ( @@ -585,7 +585,7 @@ /turf/open/floor/iron/showroomfloor, /area/shuttle/ruin/cyborg_mothership) "Fe" = ( -/mob/living/simple_animal/bot/hygienebot, +/mob/living/basic/bot/hygienebot, /obj/machinery/camera/directional/south, /turf/open/floor/iron/showroomfloor, /area/shuttle/ruin/cyborg_mothership) diff --git a/_maps/shuttles/ruin_pirate_cutter.dmm b/_maps/shuttles/ruin_pirate_cutter.dmm index 7dd4be59ba7ca1..77c4e37bc03262 100644 --- a/_maps/shuttles/ruin_pirate_cutter.dmm +++ b/_maps/shuttles/ruin_pirate_cutter.dmm @@ -702,7 +702,7 @@ "Ry" = ( /obj/structure/rack, /obj/item/storage/bag/money/vault, -/mob/living/simple_animal/parrot{ +/mob/living/basic/parrot{ faction = list("pirate"); name = "Pegwing" }, diff --git a/_maps/shuttles/ruin_syndicate_dropship.dmm b/_maps/shuttles/ruin_syndicate_dropship.dmm index 45506825229dee..0be57d5fd2e72f 100644 --- a/_maps/shuttles/ruin_syndicate_dropship.dmm +++ b/_maps/shuttles/ruin_syndicate_dropship.dmm @@ -8,7 +8,7 @@ /obj/docking_port/mobile{ dir = 2; shuttle_id = "caravansyndicate3"; - name = "Syndicate Drop Ship"; + name = "Symphionia Drop Ship"; port_direction = 8; preferred_direction = 4 }, diff --git a/_maps/shuttles/ruin_syndicate_fighter_shiv.dmm b/_maps/shuttles/ruin_syndicate_fighter_shiv.dmm index f91d0260d66fca..e052b661c2e347 100644 --- a/_maps/shuttles/ruin_syndicate_fighter_shiv.dmm +++ b/_maps/shuttles/ruin_syndicate_fighter_shiv.dmm @@ -81,7 +81,7 @@ dir = 4; shuttle_id = "caravansyndicate1"; ignitionTime = 25; - name = "Syndicate Fighter"; + name = "Symphionia Fighter"; port_direction = 2; preferred_direction = 4 }, diff --git a/_maps/shuttles/skyrat/arrivals_skyrat.dmm b/_maps/shuttles/skyrat/arrivals_skyrat.dmm deleted file mode 100644 index 8968c17261b9a3..00000000000000 --- a/_maps/shuttles/skyrat/arrivals_skyrat.dmm +++ /dev/null @@ -1,339 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "0,0" - }, -/area/shuttle/arrival) -"b" = ( -/obj/machinery/computer/shuttle/arrivals, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/shuttle/arrivals, -/area/shuttle/arrival) -"c" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 1 - }, -/turf/open/floor/iron/shuttle/arrivals, -/area/shuttle/arrival) -"d" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/arrivals{ - icon_state = "8,0" - }, -/area/shuttle/arrival) -"e" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "6,0" - }, -/area/shuttle/arrival) -"f" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "9,0" - }, -/area/shuttle/arrival) -"g" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "12,2" - }, -/area/shuttle/arrival) -"h" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/arrivals{ - icon_state = "4,0" - }, -/area/shuttle/arrival) -"i" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "11,0" - }, -/area/shuttle/arrival) -"j" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "3,4" - }, -/area/shuttle/arrival) -"k" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "0,4" - }, -/area/shuttle/arrival) -"l" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "9,4" - }, -/area/shuttle/arrival) -"m" = ( -/obj/structure/chair/sofa/bench/right, -/turf/open/floor/iron/shuttle/arrivals, -/area/shuttle/arrival) -"n" = ( -/turf/open/floor/iron/shuttle/arrivals{ - icon_state = "sign_1" - }, -/area/shuttle/arrival) -"o" = ( -/obj/docking_port/mobile/arrivals_skyrat, -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "12,1" - }, -/area/shuttle/arrival) -"p" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "6,4" - }, -/area/shuttle/arrival) -"q" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "0,2" - }, -/area/shuttle/arrival) -"r" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "1,4" - }, -/area/shuttle/arrival) -"s" = ( -/obj/machinery/door/airlock/silver/glass, -/obj/machinery/status_display/shuttle/directional/south{ - shuttle_id = "arrivals_shuttle" - }, -/turf/open/floor/iron/shuttle/arrivals, -/area/shuttle/arrival) -"t" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/arrivals{ - icon_state = "5,0" - }, -/area/shuttle/arrival) -"u" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "9,1" - }, -/area/shuttle/arrival) -"v" = ( -/obj/machinery/light/directional/west, -/turf/open/floor/iron/shuttle/arrivals{ - icon_state = "sign_2" - }, -/area/shuttle/arrival) -"w" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "11,3" - }, -/area/shuttle/arrival) -"x" = ( -/turf/open/floor/iron/shuttle/arrivals, -/area/shuttle/arrival) -"y" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals, -/area/shuttle/arrival) -"z" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/arrivals{ - icon_state = "8,4" - }, -/area/shuttle/arrival) -"B" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "3,0" - }, -/area/shuttle/arrival) -"C" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "0,3" - }, -/area/shuttle/arrival) -"D" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "12,0" - }, -/area/shuttle/arrival) -"G" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "1,0" - }, -/area/shuttle/arrival) -"H" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/arrivals{ - icon_state = "7,4" - }, -/area/shuttle/arrival) -"I" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "12,4" - }, -/area/shuttle/arrival) -"J" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/arrivals{ - icon_state = "7,0" - }, -/area/shuttle/arrival) -"K" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "3,3" - }, -/area/shuttle/arrival) -"L" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "1,3" - }, -/area/shuttle/arrival) -"M" = ( -/obj/structure/closet/crate/bin, -/turf/open/floor/iron/shuttle/arrivals{ - icon_state = "sign_1" - }, -/area/shuttle/arrival) -"N" = ( -/obj/machinery/light/directional/south, -/turf/open/floor/iron/shuttle/arrivals{ - icon_state = "sign_3" - }, -/area/shuttle/arrival) -"O" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 1 - }, -/turf/open/floor/iron/shuttle/arrivals, -/area/shuttle/arrival) -"P" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/arrivals{ - icon_state = "5,4" - }, -/area/shuttle/arrival) -"Q" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/arrivals{ - icon_state = "4,4" - }, -/area/shuttle/arrival) -"R" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "0,1" - }, -/area/shuttle/arrival) -"S" = ( -/obj/structure/chair/sofa/bench/left, -/turf/open/floor/iron/shuttle/arrivals, -/area/shuttle/arrival) -"T" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "2,4" - }, -/area/shuttle/arrival) -"U" = ( -/obj/machinery/door/airlock/external, -/turf/open/floor/iron/shuttle/arrivals, -/area/shuttle/arrival) -"V" = ( -/obj/structure/closet/shuttle/emergency/white, -/turf/open/floor/iron/shuttle/arrivals, -/area/shuttle/arrival) -"W" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "12,3" - }, -/area/shuttle/arrival) -"X" = ( -/obj/machinery/light/directional/east, -/turf/open/floor/iron/shuttle/arrivals{ - icon_state = "sign_2" - }, -/area/shuttle/arrival) -"Y" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "9,3" - }, -/area/shuttle/arrival) -"Z" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals{ - icon_state = "11,4" - }, -/area/shuttle/arrival) - -(1,1,1) = {" -k -C -q -R -a -"} -(2,1,1) = {" -r -L -M -n -G -"} -(3,1,1) = {" -T -V -x -X -U -"} -(4,1,1) = {" -j -K -s -y -B -"} -(5,1,1) = {" -Q -m -x -O -h -"} -(6,1,1) = {" -P -S -x -c -t -"} -(7,1,1) = {" -p -b -x -N -e -"} -(8,1,1) = {" -H -m -x -O -J -"} -(9,1,1) = {" -z -S -x -c -d -"} -(10,1,1) = {" -l -Y -s -u -f -"} -(11,1,1) = {" -j -V -x -v -U -"} -(12,1,1) = {" -Z -w -n -n -i -"} -(13,1,1) = {" -I -W -g -o -D -"} diff --git a/_maps/shuttles/skyrat/emergency_skyrat.dmm b/_maps/shuttles/skyrat/emergency_skyrat.dmm deleted file mode 100644 index fee55c936e99c9..00000000000000 --- a/_maps/shuttles/skyrat/emergency_skyrat.dmm +++ /dev/null @@ -1,1250 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aL" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape/brig) -"bn" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 8 - }, -/obj/effect/turf_decal/box/white/corners, -/obj/effect/turf_decal/box/white/corners{ - dir = 8 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"bI" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/bot_white, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"bR" = ( -/obj/machinery/light/directional/east, -/obj/machinery/sleeper{ - dir = 8 - }, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"cd" = ( -/obj/machinery/computer/emergency_shuttle, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"cV" = ( -/obj/machinery/computer/security, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"dw" = ( -/turf/open/floor/iron/smooth_edge{ - dir = 8 - }, -/area/shuttle/escape) -"dN" = ( -/turf/open/floor/iron/smooth_half, -/area/shuttle/escape/brig) -"dW" = ( -/obj/structure/chair/comfy/shuttle, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"dY" = ( -/obj/machinery/computer/atmos_alert{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"dZ" = ( -/obj/machinery/light/directional/east, -/obj/machinery/status_display/evac/directional/east, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"en" = ( -/obj/structure/table/reinforced, -/obj/item/phone, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"eL" = ( -/obj/structure/chair/comfy/shuttle, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"fi" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"fN" = ( -/turf/open/floor/iron/smooth_half{ - dir = 1 - }, -/area/shuttle/escape) -"gI" = ( -/obj/structure/table/reinforced/rglass, -/obj/item/surgery_tray/full{ - pixel_y = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"gV" = ( -/turf/open/floor/iron/smooth_edge{ - dir = 4 - }, -/area/shuttle/escape) -"ig" = ( -/obj/structure/closet/firecloset/full, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"ir" = ( -/obj/effect/turf_decal/caution/white, -/turf/open/floor/iron/smooth_edge{ - dir = 1 - }, -/area/shuttle/escape) -"iC" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"jW" = ( -/turf/open/floor/catwalk_floor/iron_smooth, -/area/shuttle/escape) -"kP" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/power/shuttle_engine/propulsion, -/obj/structure/fluff/metalpole/end{ - pixel_y = -32 - }, -/turf/open/floor/plating/airless, -/area/shuttle/escape) -"lh" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 8 - }, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape/brig) -"li" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 - }, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape/brig) -"lq" = ( -/obj/machinery/computer/crew, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"lL" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"mI" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/white/line, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"mL" = ( -/obj/machinery/door/airlock/security/old/glass{ - name = "Shuttle Brig" - }, -/obj/effect/turf_decal/delivery/white, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape/brig) -"nF" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin/carbon, -/obj/item/pen, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"oe" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 8 - }, -/obj/effect/turf_decal/box/white/corners, -/obj/effect/turf_decal/box/white/corners{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"ov" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/escape) -"oT" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"oV" = ( -/obj/structure/rack/shelf, -/obj/item/storage/medkit/brute{ - pixel_y = 6 - }, -/obj/item/storage/medkit/fire, -/obj/effect/turf_decal/bot_white, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"pP" = ( -/obj/structure/chair/plastic{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/shuttle/escape) -"qb" = ( -/obj/structure/table/optable, -/obj/machinery/anesthetic_machine, -/obj/effect/turf_decal/bot_white, -/obj/machinery/defibrillator_mount/loaded{ - pixel_x = 28 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"qp" = ( -/obj/machinery/computer/communications{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"qN" = ( -/turf/open/floor/iron/smooth_edge{ - dir = 4 - }, -/area/shuttle/escape/brig) -"qQ" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 - }, -/obj/effect/turf_decal/box/white/corners{ - dir = 1 - }, -/obj/effect/turf_decal/box/white/corners{ - dir = 4 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"rh" = ( -/obj/machinery/sleeper{ - dir = 8 - }, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"rK" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) -"rP" = ( -/obj/machinery/power/shuttle_engine/propulsion, -/obj/effect/turf_decal/stripes/line, -/obj/structure/fluff/metalpole/end{ - pixel_y = -32 - }, -/turf/open/floor/plating/airless, -/area/shuttle/escape) -"sh" = ( -/obj/structure/fluff/metalpole/end{ - dir = 1; - pixel_y = 32 - }, -/obj/structure/marker_beacon/burgundy, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/escape) -"te" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 - }, -/obj/effect/turf_decal/box/white/corners{ - dir = 4 - }, -/obj/effect/turf_decal/box/white/corners{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape/brig) -"tl" = ( -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"tF" = ( -/obj/structure/table, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"ua" = ( -/obj/machinery/light/directional/east, -/obj/machinery/suit_storage_unit/standard_unit, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"vm" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape/brig) -"vx" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Shuttle Seating Area" - }, -/obj/effect/turf_decal/delivery/white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"vF" = ( -/obj/structure/chair/comfy/shuttle, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"wl" = ( -/obj/machinery/light/directional/west, -/obj/structure/table, -/obj/effect/spawner/random/entertainment/deck, -/obj/effect/spawner/random/entertainment/deck{ - pixel_y = 8; - pixel_x = 5 - }, -/turf/open/floor/iron/smooth_large, -/area/shuttle/escape) -"wr" = ( -/turf/open/floor/mineral/plastitanium/red, -/area/shuttle/escape/brig) -"xE" = ( -/turf/open/floor/iron/smooth_edge, -/area/shuttle/escape) -"xJ" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 8 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape/brig) -"yz" = ( -/obj/machinery/door/airlock/engineering{ - name = "Shuttle Engineering" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/effect/turf_decal/delivery/white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"zc" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"zw" = ( -/obj/machinery/door/airlock/external/glass, -/obj/docking_port/mobile/emergency{ - name = "Emergency Shuttle" - }, -/obj/effect/turf_decal/delivery/white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"zB" = ( -/obj/structure/rack/shelf, -/obj/item/storage/medkit/toxin{ - pixel_y = 6 - }, -/obj/item/storage/medkit/o2, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"zC" = ( -/obj/effect/spawner/structure/window/reinforced/shuttle, -/turf/open/floor/plating, -/area/shuttle/escape/brig) -"Bn" = ( -/turf/open/floor/mineral/titanium/tiled/white, -/area/shuttle/escape) -"Br" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"BA" = ( -/obj/machinery/light/directional/east, -/obj/machinery/computer/operating{ - dir = 8 - }, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"Cc" = ( -/obj/machinery/power/shuttle_engine/propulsion, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/airless, -/area/shuttle/escape) -"CI" = ( -/obj/structure/closet/crate/freezer/blood, -/obj/effect/turf_decal/box/white/corners{ - dir = 1 - }, -/obj/effect/turf_decal/box/white/corners{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"CR" = ( -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/bot_white, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"Dg" = ( -/obj/structure/chair/comfy/shuttle, -/turf/open/floor/iron/smooth_large, -/area/shuttle/escape) -"Dq" = ( -/obj/structure/table, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"DD" = ( -/obj/structure/fluff/metalpole/end{ - dir = 1; - pixel_y = 32 - }, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/escape/brig) -"EC" = ( -/obj/structure/marker_beacon/olive, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/escape) -"EH" = ( -/turf/open/floor/iron/smooth_large, -/area/shuttle/escape) -"FS" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/power/shuttle_engine/propulsion, -/turf/open/floor/plating/airless, -/area/shuttle/escape) -"FT" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 8 - }, -/obj/effect/turf_decal/box/white/corners{ - dir = 8 - }, -/obj/effect/turf_decal/box/white/corners, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape/brig) -"Hf" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 8 - }, -/obj/effect/turf_decal/box/white/corners{ - dir = 4 - }, -/obj/effect/turf_decal/box/white/corners{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape/brig) -"Hr" = ( -/obj/structure/chair/comfy/shuttle, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"Hs" = ( -/obj/machinery/light/directional/west, -/obj/machinery/vending/wallmed/directional/west, -/obj/machinery/stasis{ - dir = 1 - }, -/obj/machinery/iv_drip, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"HH" = ( -/obj/structure/closet/crate/freezer, -/obj/item/tank/internals/anesthetic, -/obj/item/tank/internals/anesthetic{ - pixel_y = 3 - }, -/obj/item/clothing/mask/breath/anesthetic, -/obj/effect/turf_decal/box/white/corners{ - dir = 8 - }, -/obj/effect/turf_decal/box/white/corners, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"HR" = ( -/obj/machinery/power/shuttle_engine/heater, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/window/reinforced/plasma/spawner/directional/north, -/turf/open/floor/plating/airless, -/area/shuttle/escape) -"Iu" = ( -/obj/effect/spawner/structure/window/reinforced/shuttle, -/turf/open/floor/plating, -/area/shuttle/escape) -"Iy" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/escape/brig) -"IB" = ( -/obj/effect/turf_decal/delivery/white, -/obj/machinery/door/airlock/external/glass, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"Kz" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 - }, -/obj/effect/turf_decal/box/white/corners{ - dir = 1 - }, -/obj/effect/turf_decal/box/white/corners{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"KI" = ( -/obj/machinery/computer/station_alert{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"Lc" = ( -/obj/machinery/computer/message_monitor{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"Li" = ( -/obj/effect/turf_decal/caution/white{ - dir = 1 - }, -/turf/open/floor/iron/smooth_edge, -/area/shuttle/escape) -"MH" = ( -/obj/machinery/computer/records/medical{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"MJ" = ( -/turf/open/floor/iron/smooth_half, -/area/shuttle/escape) -"MK" = ( -/obj/structure/tank_dispenser/oxygen, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"Nq" = ( -/obj/machinery/door/airlock/external/glass, -/obj/effect/turf_decal/delivery/white, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape/brig) -"Nv" = ( -/obj/structure/chair/plastic{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/shuttle/escape) -"NG" = ( -/obj/machinery/stasis{ - dir = 1 - }, -/obj/machinery/iv_drip, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"On" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 1 - }, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/stripes/white/line, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"Op" = ( -/obj/machinery/door/window/brigdoor/security/cell/left/directional/north, -/turf/open/floor/iron/smooth_half{ - dir = 1 - }, -/area/shuttle/escape/brig) -"Ow" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/white/line, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"OG" = ( -/turf/open/floor/iron/smooth, -/area/shuttle/escape) -"OJ" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 8 - }, -/obj/effect/turf_decal/box/white/corners{ - dir = 1 - }, -/obj/effect/turf_decal/box/white/corners{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"OY" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 - }, -/obj/effect/turf_decal/box/white/corners, -/obj/effect/turf_decal/box/white/corners{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"Pa" = ( -/obj/structure/fluff/metalpole/end{ - dir = 1; - pixel_y = 32 - }, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/escape) -"Pd" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/handcuffs, -/obj/item/assembly/flash/handheld{ - pixel_y = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape/brig) -"Pu" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/holopad/secure, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"Qf" = ( -/obj/machinery/light/directional/south, -/obj/structure/closet/toolcloset, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"Qz" = ( -/obj/machinery/computer/crew{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"QD" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 - }, -/obj/effect/turf_decal/box/white/corners{ - dir = 8 - }, -/obj/effect/turf_decal/box/white/corners, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape/brig) -"Rc" = ( -/turf/open/floor/iron/smooth_edge{ - dir = 1 - }, -/area/shuttle/escape) -"Ri" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/shuttle/escape) -"RL" = ( -/obj/structure/fluff/metalpole/end{ - dir = 1; - pixel_y = 32 - }, -/obj/structure/marker_beacon/olive, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/escape) -"RS" = ( -/obj/machinery/door/airlock/command/glass{ - name = "Cockpit" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/general, -/obj/effect/turf_decal/delivery/white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"Sv" = ( -/obj/machinery/light/directional/west, -/obj/machinery/status_display/evac/directional/west, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"SK" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 - }, -/obj/effect/turf_decal/box/white/corners{ - dir = 8 - }, -/obj/effect/turf_decal/box/white/corners, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"SR" = ( -/obj/structure/table/reinforced, -/obj/machinery/recharger, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"VC" = ( -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/bot_white, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"Ws" = ( -/obj/machinery/computer/aifixer{ - dir = 8 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"WW" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 8 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"Xt" = ( -/obj/structure/marker_beacon/burgundy, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/escape) -"Ye" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"YF" = ( -/obj/structure/marker_beacon/burgundy, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/escape/brig) -"YN" = ( -/obj/structure/table/reinforced, -/obj/item/storage/medkit/advanced, -/obj/item/crowbar, -/obj/machinery/vending/wallmed/directional/east, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) -"ZA" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/shuttle/escape) -"ZF" = ( -/turf/template_noop, -/area/template_noop) -"ZJ" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Shuttle Medbay" - }, -/obj/effect/turf_decal/delivery/white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) - -(1,1,1) = {" -ZF -ZF -ZF -aL -YF -Iy -Iy -Iy -Nq -YF -zw -ov -Iu -Iu -Iu -ov -IB -ov -IB -ov -Xt -rK -ZF -ZF -ZF -ZF -ZF -"} -(2,1,1) = {" -ZF -ZF -ZF -DD -te -vm -QD -li -dN -Iy -MJ -qQ -zc -OY -ig -VC -MJ -lL -MJ -qQ -OY -ov -ov -rK -ZF -ZF -ZF -"} -(3,1,1) = {" -ZF -ZF -ZF -zC -wr -wr -wr -Op -qN -mL -gV -dw -dw -fN -fN -fN -OG -dw -gV -fN -fN -fN -HR -rP -ZF -ZF -ZF -"} -(4,1,1) = {" -ZF -ZF -ZF -Iy -Hf -xJ -FT -lh -Pd -zC -tl -Rc -xE -OJ -WW -oe -Rc -xE -OJ -bn -tl -ig -HR -Cc -ZF -ZF -ZF -"} -(5,1,1) = {" -sh -Iu -ov -Iy -Iy -Iy -Iy -Iy -Iy -Iy -ov -vx -vx -ov -ov -ov -vx -vx -ov -ov -ov -ov -ov -ov -ov -Xt -rK -"} -(6,1,1) = {" -Iu -lq -en -lL -SR -nF -qp -ov -eL -Sv -Ow -Rc -xE -eL -Sv -Ow -Rc -xE -eL -Sv -Ow -ov -wl -Nv -tl -HR -rP -"} -(7,1,1) = {" -Iu -cd -Ri -EH -EH -Dg -Lc -Iu -dW -oT -mI -ir -Li -dW -oT -mI -ir -Li -dW -oT -mI -ov -pP -jW -EH -HR -Cc -"} -(8,1,1) = {" -Iu -cV -Ri -EH -Pu -EH -EH -RS -EH -jW -jW -Rc -xE -jW -jW -jW -Rc -xE -jW -jW -EH -yz -EH -jW -Qf -ov -ov -"} -(9,1,1) = {" -rK -ov -Ye -ZA -EH -Dg -MH -Iu -eL -fi -Ow -ir -Li -eL -fi -Ow -ir -Li -eL -fi -Ow -ov -iC -jW -Br -HR -Cc -"} -(10,1,1) = {" -ZF -ov -dY -KI -Ws -YN -Qz -ov -dW -dZ -mI -Rc -xE -dW -dZ -mI -Rc -xE -dW -dZ -mI -ov -ua -EH -MK -HR -rP -"} -(11,1,1) = {" -ZF -RL -ov -ov -ov -ov -ov -ov -ov -ov -ov -vx -vx -ov -ov -ov -ZJ -ZJ -ov -ov -ov -ov -ov -ov -ov -EC -rK -"} -(12,1,1) = {" -ZF -ZF -ZF -ov -Hr -tF -On -lL -vF -tF -On -Rc -xE -Iu -NG -Hs -Bn -Bn -Kz -SK -oV -zB -HR -FS -ZF -ZF -ZF -"} -(13,1,1) = {" -ZF -ZF -ZF -Iu -fN -fN -fN -fN -fN -fN -fN -gV -gV -ZJ -Bn -Bn -Bn -Bn -Bn -Bn -Bn -Bn -HR -kP -ZF -ZF -ZF -"} -(14,1,1) = {" -ZF -ZF -ZF -Pa -Hr -Dq -On -bI -vF -Dq -On -CR -ig -ov -rh -bR -CI -HH -BA -qb -gI -ov -ov -rK -ZF -ZF -ZF -"} -(15,1,1) = {" -ZF -ZF -ZF -rK -EC -ov -ov -ov -ov -ov -ov -ov -ov -EC -ov -Iu -Iu -Iu -ov -ov -EC -rK -ZF -ZF -ZF -ZF -ZF -"} diff --git a/_maps/shuttles/skyrat/ferry_skyrat.dmm b/_maps/shuttles/skyrat/ferry_skyrat.dmm deleted file mode 100644 index 0748d48afdab58..00000000000000 --- a/_maps/shuttles/skyrat/ferry_skyrat.dmm +++ /dev/null @@ -1,954 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aF" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "1,4" - }, -/area/shuttle/transport) -"bd" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "5,1" - }, -/area/shuttle/transport) -"cz" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "1,6" - }, -/area/shuttle/transport) -"cK" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "2,3" - }, -/area/shuttle/transport) -"el" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 1 - }, -/turf/open/floor/iron/shuttle/ferry{ - dir = 8; - icon_state = "floor" - }, -/area/shuttle/transport) -"fT" = ( -/turf/open/floor/iron/shuttle/ferry{ - dir = 8; - icon_state = "sign_2" - }, -/area/shuttle/transport) -"gd" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "3,2" - }, -/area/shuttle/transport) -"go" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "16,7" - }, -/area/shuttle/transport) -"gS" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "19,3" - }, -/area/shuttle/transport) -"hn" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "17,9" - }, -/area/shuttle/transport) -"ht" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "7,2" - }, -/area/shuttle/transport) -"hw" = ( -/turf/open/floor/iron/shuttle/ferry{ - dir = 8 - }, -/area/shuttle/transport) -"hY" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "15,6" - }, -/area/shuttle/transport) -"io" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "17,5" - }, -/area/shuttle/transport) -"iF" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "2,6" - }, -/area/shuttle/transport) -"iL" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "18,9" - }, -/area/shuttle/transport) -"jg" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "6,8" - }, -/area/shuttle/transport) -"jE" = ( -/obj/machinery/computer/security/shuttle, -/turf/open/floor/iron/shuttle/ferry{ - dir = 8 - }, -/area/shuttle/transport) -"jG" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "9,7" - }, -/area/shuttle/transport) -"jP" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "12,3" - }, -/area/shuttle/transport) -"lN" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "2,2" - }, -/area/shuttle/transport) -"nf" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "19,1" - }, -/area/shuttle/transport) -"ny" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "18,0" - }, -/area/shuttle/transport) -"nC" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "8,4" - }, -/area/shuttle/transport) -"oR" = ( -/turf/open/floor/iron/shuttle/ferry{ - dir = 8; - icon_state = "sign_1" - }, -/area/shuttle/transport) -"pk" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "2,5" - }, -/area/shuttle/transport) -"qm" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "16,6" - }, -/area/shuttle/transport) -"qr" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "0,4" - }, -/area/shuttle/transport) -"qN" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "3,8" - }, -/area/shuttle/transport) -"rb" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "19,7" - }, -/area/shuttle/transport) -"rg" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "18,8" - }, -/area/shuttle/transport) -"rq" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "18,6" - }, -/area/shuttle/transport) -"rT" = ( -/obj/machinery/computer/crew/shuttle, -/turf/open/floor/iron/shuttle/ferry{ - dir = 8 - }, -/area/shuttle/transport) -"sk" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "3,9" - }, -/area/shuttle/transport) -"tq" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "17,8" - }, -/area/shuttle/transport) -"tu" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "13,7" - }, -/area/shuttle/transport) -"tB" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "14,4" - }, -/area/shuttle/transport) -"tI" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "19,9" - }, -/area/shuttle/transport) -"uf" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "1,7" - }, -/area/shuttle/transport) -"ur" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "1,3" - }, -/area/shuttle/transport) -"uD" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 - }, -/turf/open/floor/iron/shuttle/ferry{ - dir = 8 - }, -/area/shuttle/transport) -"uI" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "17,4" - }, -/area/shuttle/transport) -"ve" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "1,5" - }, -/area/shuttle/transport) -"vl" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "5,9" - }, -/area/shuttle/transport) -"xR" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "6,2" - }, -/area/shuttle/transport) -"xS" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "19,2" - }, -/area/shuttle/transport) -"yB" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "4,1" - }, -/area/shuttle/transport) -"yF" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "15,4" - }, -/area/shuttle/transport) -"zs" = ( -/obj/effect/turf_decal/caution{ - dir = 4 - }, -/obj/machinery/light/no_nightlight{ - dir = 8 - }, -/turf/open/floor/iron/shuttle/ferry{ - dir = 8 - }, -/area/shuttle/transport) -"zN" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "17,7" - }, -/area/shuttle/transport) -"AB" = ( -/obj/structure/closet/shuttle{ - dir = 4 - }, -/obj/item/mod/control/pre_equipped/responsory/security, -/turf/open/floor/iron/shuttle/ferry{ - dir = 8 - }, -/area/shuttle/transport) -"AW" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 1 - }, -/turf/open/floor/iron/shuttle/ferry{ - dir = 8 - }, -/area/shuttle/transport) -"By" = ( -/obj/structure/fans/tiny/forcefield{ - dir = 8 - }, -/obj/machinery/door/airlock/grunge, -/turf/open/floor/iron/shuttle/ferry{ - dir = 8; - icon_state = "floor" - }, -/area/shuttle/transport) -"Co" = ( -/obj/structure/closet/shuttle{ - dir = 8 - }, -/obj/item/clothing/head/helmet/alt, -/obj/item/clothing/head/helmet/alt, -/obj/item/clothing/suit/armor/bulletproof, -/obj/item/clothing/suit/armor/bulletproof, -/obj/machinery/light/no_nightlight{ - dir = 4 - }, -/turf/open/floor/iron/shuttle/ferry{ - dir = 8 - }, -/area/shuttle/transport) -"Cz" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "13,3" - }, -/area/shuttle/transport) -"CC" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "15,5" - }, -/area/shuttle/transport) -"CE" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "17,6" - }, -/area/shuttle/transport) -"CL" = ( -/obj/machinery/computer/security/shuttle{ - dir = 8 - }, -/turf/open/floor/iron/shuttle/ferry{ - dir = 8 - }, -/area/shuttle/transport) -"CM" = ( -/turf/open/floor/iron/shuttle/ferry{ - dir = 8; - icon_state = "floor" - }, -/area/shuttle/transport) -"Dt" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "12,7" - }, -/area/shuttle/transport) -"Dy" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "17,2" - }, -/area/shuttle/transport) -"Ed" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "19,0" - }, -/area/shuttle/transport) -"Ei" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "16,3" - }, -/area/shuttle/transport) -"El" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "16,4" - }, -/area/shuttle/transport) -"Ev" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin/carbon, -/obj/machinery/light/no_nightlight{ - dir = 8 - }, -/turf/open/floor/iron/shuttle/ferry{ - dir = 8 - }, -/area/shuttle/transport) -"Ew" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 1 - }, -/obj/machinery/light/no_nightlight{ - dir = 8 - }, -/turf/open/floor/iron/shuttle/ferry{ - dir = 8 - }, -/area/shuttle/transport) -"Fk" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "14,5" - }, -/area/shuttle/transport) -"Fz" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "16,5" - }, -/area/shuttle/transport) -"GQ" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "13,4" - }, -/area/shuttle/transport) -"GX" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "7,8" - }, -/area/shuttle/transport) -"GY" = ( -/obj/machinery/door/airlock/command/glass{ - name = "Cockpit"; - req_access = list("cent_general") - }, -/turf/open/floor/iron/stairs, -/area/shuttle/transport) -"Hn" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "18,3" - }, -/area/shuttle/transport) -"HU" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "19,10" - }, -/area/shuttle/transport) -"Ig" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "17,3" - }, -/area/shuttle/transport) -"Io" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "8,2" - }, -/area/shuttle/transport) -"Ip" = ( -/obj/machinery/computer/shuttle/ferry/shuttle, -/turf/open/floor/iron/shuttle/ferry{ - dir = 8; - icon_state = "floor" - }, -/area/shuttle/transport) -"IG" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "6,9" - }, -/area/shuttle/transport) -"IM" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "18,7" - }, -/area/shuttle/transport) -"Ks" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8 - }, -/area/shuttle/transport) -"Kx" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "4,9" - }, -/area/shuttle/transport) -"KY" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "17,1" - }, -/area/shuttle/transport) -"Lq" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "2,8" - }, -/area/shuttle/transport) -"LW" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "8,8" - }, -/area/shuttle/transport) -"Mr" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "6,1" - }, -/area/shuttle/transport) -"NL" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin/carbon, -/obj/machinery/light/no_nightlight{ - dir = 4 - }, -/turf/open/floor/iron/shuttle/ferry{ - dir = 8 - }, -/area/shuttle/transport) -"ON" = ( -/turf/template_noop, -/area/template_noop) -"Py" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "13,6" - }, -/area/shuttle/transport) -"Pz" = ( -/obj/structure/closet/shuttle{ - dir = 8 - }, -/obj/item/gun/energy/e_gun/nuclear, -/obj/item/gun/energy/e_gun/stun, -/obj/item/gun/energy/e_gun/old, -/turf/open/floor/iron/shuttle/ferry{ - dir = 8 - }, -/area/shuttle/transport) -"Qg" = ( -/obj/structure/fans/tiny/forcefield{ - dir = 8 - }, -/obj/docking_port/mobile{ - dir = 8; - shuttle_id = "ferry"; - name = "ferry shuttle"; - port_direction = 4 - }, -/obj/machinery/door/airlock/grunge, -/turf/open/floor/iron/shuttle/ferry{ - dir = 8; - icon_state = "floor" - }, -/area/shuttle/transport) -"Ql" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "2,7" - }, -/area/shuttle/transport) -"Qo" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "0,5" - }, -/area/shuttle/transport) -"QN" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "18,10" - }, -/area/shuttle/transport) -"Rc" = ( -/obj/effect/turf_decal/caution{ - dir = 8 - }, -/obj/machinery/light/no_nightlight{ - dir = 4 - }, -/turf/open/floor/iron/shuttle/ferry{ - dir = 8 - }, -/area/shuttle/transport) -"RL" = ( -/obj/machinery/computer/crew/shuttle{ - dir = 8 - }, -/turf/open/floor/iron/shuttle/ferry{ - dir = 8 - }, -/area/shuttle/transport) -"Ss" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "8,7" - }, -/area/shuttle/transport) -"SN" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "18,1" - }, -/area/shuttle/transport) -"SQ" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "18,4" - }, -/area/shuttle/transport) -"Tk" = ( -/obj/structure/closet/shuttle/emergency{ - dir = 1 - }, -/obj/machinery/light/no_nightlight, -/turf/open/floor/iron/shuttle/ferry{ - dir = 8 - }, -/area/shuttle/transport) -"Tm" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "14,6" - }, -/area/shuttle/transport) -"TM" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "3,1" - }, -/area/shuttle/transport) -"Ud" = ( -/obj/structure/closet/shuttle/medical{ - dir = 4 - }, -/turf/open/floor/iron/shuttle/ferry{ - dir = 8 - }, -/area/shuttle/transport) -"UD" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "19,8" - }, -/area/shuttle/transport) -"Vc" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "8,3" - }, -/area/shuttle/transport) -"Xl" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "8,6" - }, -/area/shuttle/transport) -"XG" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "2,4" - }, -/area/shuttle/transport) -"XP" = ( -/obj/machinery/light/small/red/directional/north, -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry{ - dir = 8; - icon_state = "18,5" - }, -/area/shuttle/transport) -"YJ" = ( -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry{ - dir = 8; - icon_state = "9,3" - }, -/area/shuttle/transport) - -(1,1,1) = {" -ON -ON -ON -ON -ON -ON -ON -ON -ON -ON -ON -ON -ON -ON -ON -ON -ON -ON -ny -Ed -"} -(2,1,1) = {" -ON -ON -ON -TM -yB -bd -Mr -ON -ON -ON -ON -ON -ON -ON -ON -ON -ON -KY -SN -nf -"} -(3,1,1) = {" -ON -ON -lN -gd -Ud -AB -xR -ht -Io -ON -ON -ON -ON -ON -ON -ON -ON -Dy -Ks -xS -"} -(4,1,1) = {" -ON -ur -cK -Ev -oR -oR -AW -Ew -Vc -YJ -By -By -jP -Cz -ON -ON -Ei -Ig -Hn -gS -"} -(5,1,1) = {" -qr -aF -XG -rT -hw -hw -AW -AW -nC -zs -fT -fT -zs -GQ -tB -yF -El -uI -SQ -ON -"} -(6,1,1) = {" -Qo -ve -pk -Ip -el -CM -CM -CM -GY -CM -CM -CM -CM -Tk -Fk -CC -Fz -io -XP -ON -"} -(7,1,1) = {" -ON -cz -iF -jE -hw -hw -oR -oR -Xl -Rc -fT -fT -Rc -Py -Tm -hY -qm -CE -rq -ON -"} -(8,1,1) = {" -ON -uf -Ql -NL -uD -uD -Pz -Co -Ss -jG -By -Qg -Dt -tu -ON -ON -go -zN -IM -rb -"} -(9,1,1) = {" -ON -ON -Lq -qN -RL -CL -jg -GX -LW -ON -ON -ON -ON -ON -ON -ON -ON -tq -rg -UD -"} -(10,1,1) = {" -ON -ON -ON -sk -Kx -vl -IG -ON -ON -ON -ON -ON -ON -ON -ON -ON -ON -hn -iL -tI -"} -(11,1,1) = {" -ON -ON -ON -ON -ON -ON -ON -ON -ON -ON -ON -ON -ON -ON -ON -ON -ON -ON -QN -HU -"} diff --git a/_maps/shuttles/skyrat/goldeneye_cruiser.dmm b/_maps/shuttles/skyrat/goldeneye_cruiser.dmm deleted file mode 100644 index 3d886174ffedb4..00000000000000 --- a/_maps/shuttles/skyrat/goldeneye_cruiser.dmm +++ /dev/null @@ -1,1329 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ab" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/rglass{ - amount = 30; - pixel_x = 2; - pixel_y = -2 - }, -/obj/item/stack/sheet/rglass{ - amount = 30; - pixel_x = 2; - pixel_y = -2 - }, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/storage/toolbox/electrical, -/obj/item/storage/box/lights, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/hallway) -"ah" = ( -/obj/machinery/recharge_station, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/hallway) -"bf" = ( -/obj/machinery/goldeneye_upload_terminal, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/brig) -"bg" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/effect/turf_decal/tile/neutral/diagonal_centre, -/obj/effect/turf_decal/box/white/corners{ - dir = 8 - }, -/turf/open/floor/iron/dark/diagonal, -/area/shuttle/syndicate/cruiser/brig) -"bk" = ( -/obj/machinery/light/no_nightlight/directional/east, -/turf/open/floor/iron/smooth_large, -/area/shuttle/syndicate/cruiser/armory) -"bw" = ( -/obj/structure/chair/comfy/shuttle/tactical{ - dir = 1 - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/hallway) -"bx" = ( -/obj/effect/turf_decal/bot_white, -/obj/machinery/portable_atmospherics/canister/air, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/brig) -"bW" = ( -/obj/effect/turf_decal/bot_white, -/obj/machinery/portable_atmospherics/scrubber, -/obj/machinery/light/no_nightlight/directional/south, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/brig) -"ce" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/effect/turf_decal/tile/neutral/diagonal_centre, -/obj/structure/chair/stool/directional/east, -/turf/open/floor/iron/dark/diagonal, -/area/shuttle/syndicate/cruiser/brig) -"cl" = ( -/obj/structure/chair/comfy/shuttle/tactical{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/shuttle/syndicate/cruiser/bridge) -"cu" = ( -/obj/structure/rack/shelf, -/obj/item/storage/medkit/toxin{ - pixel_y = 10 - }, -/obj/item/storage/medkit/o2{ - pixel_y = 5 - }, -/obj/item/storage/medkit/regular, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/medical) -"cw" = ( -/obj/machinery/door/poddoor/preopen{ - id = "syndicatecruiserwindows" - }, -/obj/effect/spawner/structure/window/reinforced/shuttle, -/turf/open/floor/plating, -/area/shuttle/syndicate/cruiser/medical) -"cN" = ( -/obj/machinery/porta_turret/syndicate/assaultops/shuttle{ - name = "Defense System Turret"; - system_id = "cruiser_turrets_outer" - }, -/obj/structure/fluff/metalpole/end{ - dir = 1; - pixel_y = 32 - }, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/syndicate/cruiser/bridge) -"de" = ( -/obj/structure/rack/shelf, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/armory) -"dz" = ( -/turf/closed/wall/mineral/titanium/spaceship/nodiagonal, -/area/shuttle/syndicate/cruiser) -"dF" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/door{ - id = "syndicatecruiserwindows"; - name = "Window Blast Doors"; - pixel_x = -5; - pixel_y = 7; - req_access = list("syndicate") - }, -/obj/machinery/button/door{ - id = "syndicatecruiserarmory"; - name = "Armory Blast Doors"; - pixel_x = -5; - pixel_y = -6; - req_access = list("syndicate") - }, -/obj/machinery/button/door{ - id = "syndicatecruiserhall"; - name = "Hall Shutters"; - pixel_x = 8; - req_access = list("syndicate") - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/bridge) -"dQ" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/syndicate/cruiser/brig) -"dR" = ( -/obj/machinery/computer/operating{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/medical) -"dT" = ( -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/external/glass, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/effect/mapping_helpers/airlock/access/any/syndicate/general, -/obj/machinery/button/door{ - id = "syndicatecruiserhatchesright"; - name = "hatches"; - pixel_y = 32; - req_access = list("syndicate") - }, -/obj/machinery/door/poddoor{ - id = "syndicatecruiserhatchesright" - }, -/obj/docking_port/mobile{ - dir = 8; - hidden = 1; - shuttle_id = "goldeneye_cruiser"; - movement_force = list("KNOCKDOWN"=0,"THROW"=0); - name = "goldeneye cruiser"; - port_direction = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/hallway) -"eh" = ( -/obj/structure/closet/crate, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/construction/rcd/loaded, -/obj/item/inducer/syndicate, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/hallway) -"er" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/syndicate/cruiser/bridge) -"et" = ( -/obj/effect/turf_decal/delivery/white, -/obj/machinery/door/airlock/medical{ - name = "Medbay" - }, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/effect/mapping_helpers/airlock/access/any/syndicate/general, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/medical) -"eU" = ( -/obj/machinery/light/no_nightlight/directional/south, -/turf/open/floor/iron/smooth_large, -/area/shuttle/syndicate/cruiser/hallway) -"fo" = ( -/obj/structure/rack/shelf, -/obj/item/suppressor{ - pixel_y = 5 - }, -/obj/item/suppressor, -/obj/item/suppressor{ - pixel_y = -4 - }, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/armory) -"fH" = ( -/obj/machinery/computer/monitor{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/bridge) -"gO" = ( -/obj/structure/rack/shelf, -/obj/item/storage/box/bodybags, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/brig) -"ha" = ( -/obj/structure/closet/crate/freezer{ - name = "universal blood storage" - }, -/obj/machinery/iv_drip, -/obj/item/reagent_containers/blood/o_minus, -/obj/item/reagent_containers/blood/o_minus, -/obj/item/reagent_containers/blood/o_minus, -/obj/item/reagent_containers/blood/o_minus, -/obj/item/reagent_containers/blood/o_minus, -/obj/item/reagent_containers/blood/o_minus, -/obj/item/reagent_containers/blood/o_minus, -/obj/item/reagent_containers/blood/o_minus, -/obj/item/reagent_containers/blood/ethereal, -/obj/item/reagent_containers/blood/ethereal, -/obj/item/reagent_containers/blood/lizard, -/obj/item/reagent_containers/blood/lizard, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/medical) -"hk" = ( -/obj/structure/rack/shelf, -/obj/item/storage/box/handcuffs{ - pixel_y = -3 - }, -/obj/item/storage/box/handcuffs{ - pixel_y = 4 - }, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/armory) -"hy" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/effect/turf_decal/tile/neutral/diagonal_centre, -/obj/effect/turf_decal/box/white/corners{ - dir = 1 - }, -/obj/effect/turf_decal/box/white/corners{ - dir = 8 - }, -/obj/structure/table, -/obj/structure/reagent_dispensers/servingdish, -/turf/open/floor/iron/dark/diagonal, -/area/shuttle/syndicate/cruiser/brig) -"iU" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/effect/turf_decal/tile/neutral/diagonal_centre, -/obj/effect/turf_decal/box/white/corners{ - dir = 4 - }, -/obj/effect/turf_decal/box/white/corners, -/turf/open/floor/iron/dark/diagonal, -/area/shuttle/syndicate/cruiser/brig) -"ke" = ( -/obj/structure/bed/maint, -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/effect/turf_decal/tile/neutral/diagonal_centre, -/obj/effect/turf_decal/box/white/corners{ - dir = 1 - }, -/obj/effect/turf_decal/box/white/corners{ - dir = 8 - }, -/obj/item/bedsheet/grey, -/obj/item/instrument/harmonica, -/turf/open/floor/iron/dark/diagonal, -/area/shuttle/syndicate/cruiser/brig) -"kh" = ( -/obj/effect/turf_decal/bot_white, -/obj/structure/tank_holder/anesthetic, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/medical) -"ks" = ( -/obj/machinery/power/shuttle_engine/propulsion, -/obj/effect/turf_decal/stripes/line, -/obj/structure/fluff/metalpole/end{ - pixel_y = -32 - }, -/turf/open/floor/plating/airless, -/area/shuttle/syndicate/cruiser) -"lO" = ( -/obj/machinery/computer/camera_advanced/syndie{ - dir = 8 - }, -/obj/machinery/light/no_nightlight/directional/east, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/bridge) -"mP" = ( -/obj/machinery/door/poddoor/preopen{ - id = "syndicatecruiserwindows" - }, -/obj/effect/spawner/structure/window/reinforced/shuttle, -/turf/open/floor/plating, -/area/shuttle/syndicate/cruiser/bridge) -"nZ" = ( -/turf/open/floor/mineral/titanium/tiled/white, -/area/shuttle/syndicate/cruiser/medical) -"ol" = ( -/obj/machinery/door/airlock/external/glass, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/effect/mapping_helpers/airlock/access/any/syndicate/general, -/obj/machinery/button/door{ - id = "syndicatecruiserhatchesright"; - name = "hatches"; - pixel_y = 32; - req_access = list("syndicate") - }, -/obj/machinery/door/poddoor{ - id = "syndicatecruiserhatchesright" - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/hallway) -"oH" = ( -/obj/structure/tank_holder/extinguisher, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/hallway) -"pg" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/effect/turf_decal/tile/neutral/diagonal_centre, -/obj/effect/turf_decal/box/white/corners{ - dir = 4 - }, -/obj/structure/chair/stool/directional/west, -/turf/open/floor/iron/dark/diagonal, -/area/shuttle/syndicate/cruiser/brig) -"pE" = ( -/obj/machinery/power/shuttle_engine/heater, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/shuttle/syndicate/cruiser) -"pX" = ( -/obj/machinery/porta_turret/syndicate/assaultops/shuttle{ - name = "Defense System Turret"; - system_id = "cruiser_turrets_outer" - }, -/turf/closed/wall/mineral/titanium/spaceship, -/area/shuttle/syndicate/cruiser) -"ql" = ( -/obj/structure/closet/secure_closet{ - name = "Secure Storage"; - req_access = list("syndicate") - }, -/obj/item/storage/box/handcuffs{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/storage/box/zipties{ - pixel_x = -2 - }, -/obj/item/storage/box/bodybags, -/obj/item/stack/sticky_tape, -/obj/item/melee/baton/security/loaded, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/hallway) -"qG" = ( -/obj/structure/table/reinforced, -/obj/machinery/recharger, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/bridge) -"qU" = ( -/obj/machinery/door/airlock/external/glass, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/effect/mapping_helpers/airlock/access/any/syndicate/general, -/obj/machinery/button/door{ - id = "syndicatecruiserhatches"; - name = "hatches"; - pixel_y = 32; - req_access = list("syndicate") - }, -/obj/machinery/door/poddoor{ - id = "syndicatecruiserhatches" - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/hallway) -"rj" = ( -/obj/machinery/light/no_nightlight/directional/east, -/turf/open/floor/mineral/titanium/tiled/white, -/area/shuttle/syndicate/cruiser/medical) -"rk" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/syndicate/cruiser/medical) -"ru" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/syndicate/cruiser/hallway) -"rA" = ( -/obj/machinery/power/shuttle_engine/propulsion, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/structure/fluff/metalpole/end{ - pixel_y = -32 - }, -/turf/open/floor/plating/airless, -/area/shuttle/syndicate/cruiser) -"rF" = ( -/obj/machinery/computer/records/security/syndie{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/bridge) -"sP" = ( -/obj/machinery/computer/crew/syndie{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/bridge) -"sX" = ( -/obj/effect/spawner/random/vending/snackvend, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/bridge) -"ts" = ( -/obj/structure/chair/comfy/shuttle/tactical{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/shuttle/syndicate/cruiser/bridge) -"uo" = ( -/obj/machinery/porta_turret/syndicate/assaultops/shuttle{ - name = "Defense System Turret"; - system_id = "cruiser_turrets_outer" - }, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/syndicate/cruiser/hallway) -"ur" = ( -/obj/machinery/autolathe/hacked, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/hallway) -"uS" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/door/poddoor/shutters{ - id = "syndicatecruisercargo" - }, -/turf/open/floor/engine, -/area/shuttle/syndicate/cruiser/brig) -"vZ" = ( -/obj/machinery/sleeper/syndie/fullupgrade{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/medical) -"wb" = ( -/obj/structure/table/optable, -/obj/effect/turf_decal/bot, -/obj/machinery/defibrillator_mount/directional/north, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/medical) -"ws" = ( -/obj/structure/tank_holder/oxygen/yellow, -/obj/effect/turf_decal/bot_white, -/obj/machinery/light/no_nightlight/directional/south, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/hallway) -"wI" = ( -/obj/structure/fluff/metalpole/end{ - dir = 1; - pixel_y = 32 - }, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/syndicate/cruiser/medical) -"xL" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/syndicate/cruiser/medical) -"xT" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/effect/turf_decal/tile/neutral/diagonal_centre, -/turf/open/floor/iron/dark/diagonal, -/area/shuttle/syndicate/cruiser/brig) -"xX" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/effect/turf_decal/tile/neutral/diagonal_centre, -/obj/effect/turf_decal/box/white/corners{ - dir = 1 - }, -/obj/effect/turf_decal/box/white/corners{ - dir = 8 - }, -/obj/machinery/space_heater, -/turf/open/floor/iron/dark/diagonal, -/area/shuttle/syndicate/cruiser/brig) -"yT" = ( -/obj/structure/bed/maint, -/obj/item/bedsheet/grey, -/obj/machinery/light/no_nightlight/directional/south, -/turf/open/floor/iron/smooth_large, -/area/shuttle/syndicate/cruiser/brig) -"zh" = ( -/obj/machinery/porta_turret/syndicate/assaultops/shuttle{ - name = "Defense System Turret"; - system_id = "cruiser_turrets_outer" - }, -/obj/structure/fluff/metalpole/end{ - dir = 1; - pixel_y = 32 - }, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/syndicate/cruiser/medical) -"zo" = ( -/obj/machinery/door/airlock/external/glass, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/brig) -"zL" = ( -/turf/template_noop, -/area/template_noop) -"AM" = ( -/obj/effect/turf_decal/delivery/white, -/obj/machinery/door/airlock/command/glass{ - name = "Bridge" - }, -/obj/effect/mapping_helpers/airlock/access/any/syndicate/general, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/bridge) -"Bd" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/hallway) -"Bx" = ( -/obj/effect/turf_decal/bot_white, -/obj/structure/tank_holder, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/brig) -"CH" = ( -/turf/open/floor/iron/smooth_large, -/area/shuttle/syndicate/cruiser/hallway) -"CI" = ( -/obj/structure/table/reinforced, -/obj/item/radio/intercom{ - freerange = 1; - name = "Syndicate Radio Intercom" - }, -/obj/machinery/turretid{ - name = "DANGER: Outer Turret Control"; - pixel_x = -28; - req_access = list("syndicate"); - system_id = "cruiser_turrets_outer" - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/bridge) -"CT" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/effect/turf_decal/tile/neutral/diagonal_centre, -/obj/effect/turf_decal/box/white/corners, -/turf/open/floor/iron/dark/diagonal, -/area/shuttle/syndicate/cruiser/brig) -"Ei" = ( -/obj/machinery/porta_turret/syndicate/assaultops/shuttle{ - name = "Defense System Turret"; - system_id = "cruiser_turrets_outer" - }, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/syndicate/cruiser/brig) -"El" = ( -/obj/machinery/porta_turret/syndicate/assaultops/shuttle{ - name = "Defense System Turret"; - system_id = "cruiser_turrets_outer" - }, -/turf/closed/wall/mineral/titanium, -/area/shuttle/syndicate/cruiser/hallway) -"EL" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/effect/turf_decal/tile/neutral/diagonal_centre, -/obj/structure/table, -/obj/effect/spawner/random/entertainment/dice, -/obj/machinery/light/no_nightlight/directional/north, -/turf/open/floor/iron/dark/diagonal, -/area/shuttle/syndicate/cruiser/brig) -"Fv" = ( -/obj/structure/marker_beacon/burgundy, -/turf/closed/wall/mineral/titanium, -/area/shuttle/syndicate/cruiser/hallway) -"FA" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_y = 4 - }, -/obj/item/pen/screwdriver, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/bridge) -"FH" = ( -/obj/machinery/sleeper/syndie/fullupgrade{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/obj/machinery/light/no_nightlight/directional/west, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/medical) -"FJ" = ( -/obj/structure/closet/crate/medical, -/obj/item/storage/medkit/emergency, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/brig) -"FM" = ( -/obj/machinery/smartfridge/chemistry/preloaded, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/medical) -"FO" = ( -/turf/open/floor/catwalk_floor/iron_dark, -/area/shuttle/syndicate/cruiser/hallway) -"Gz" = ( -/obj/machinery/door/poddoor/preopen{ - id = "syndicatecruiserwindows" - }, -/obj/effect/spawner/structure/window/reinforced/shuttle, -/turf/open/floor/plating, -/area/shuttle/syndicate/cruiser/brig) -"GD" = ( -/obj/structure/marker_beacon/olive, -/turf/closed/wall/mineral/titanium, -/area/shuttle/syndicate/cruiser/brig) -"GN" = ( -/obj/machinery/vending/medical/syndicate_access, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/medical) -"Hd" = ( -/obj/effect/turf_decal/bot_white, -/obj/structure/tank_holder/extinguisher, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/hallway) -"Hm" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/hallway) -"Hq" = ( -/obj/structure/marker_beacon/olive, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/syndicate/cruiser/medical) -"HE" = ( -/turf/closed/wall/mineral/titanium/spaceship, -/area/shuttle/syndicate/cruiser) -"Ih" = ( -/obj/machinery/interrogator, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/brig) -"JA" = ( -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/external/glass, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/effect/mapping_helpers/airlock/access/any/syndicate/general, -/obj/machinery/button/door{ - id = "syndicatecruiserhatches"; - name = "hatches"; - pixel_y = 32; - req_access = list("syndicate") - }, -/obj/machinery/door/poddoor{ - id = "syndicatecruiserhatches" - }, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/hallway) -"JF" = ( -/obj/structure/rack/shelf, -/obj/item/bodybag/environmental/prisoner/syndicate, -/obj/item/bodybag/environmental/prisoner/syndicate{ - pixel_y = 7 - }, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/armory) -"JN" = ( -/obj/item/hand_item/circlegame, -/turf/open/floor/circuit/red/anim, -/area/shuttle/syndicate/cruiser) -"JW" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "Terminal Chamber" - }, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/effect/mapping_helpers/airlock/access/any/syndicate/general, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/brig) -"JY" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/syndicate/cruiser/armory) -"KN" = ( -/obj/structure/tank_dispenser/oxygen, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/hallway) -"LI" = ( -/obj/structure/marker_beacon/olive, -/turf/closed/wall/mineral/titanium/spaceship/nodiagonal, -/area/shuttle/syndicate/cruiser) -"Ma" = ( -/obj/structure/marker_beacon/burgundy, -/turf/closed/wall/mineral/titanium/spaceship/nodiagonal, -/area/shuttle/syndicate/cruiser) -"MD" = ( -/turf/open/floor/catwalk_floor/iron_dark, -/area/shuttle/syndicate/cruiser/brig) -"MO" = ( -/obj/structure/marker_beacon/burgundy, -/turf/closed/wall/mineral/titanium, -/area/shuttle/syndicate/cruiser/bridge) -"Nq" = ( -/obj/structure/rack/shelf, -/obj/item/binoculars, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/bridge) -"NE" = ( -/obj/structure/extinguisher_cabinet/directional/west, -/obj/machinery/light/no_nightlight/directional/west, -/obj/machinery/button/door/directional/east{ - id = "syndicatecruisercargo"; - name = "Cargo Bay External Shutters" - }, -/turf/open/floor/iron/smooth_large, -/area/shuttle/syndicate/cruiser/hallway) -"Om" = ( -/obj/machinery/power/shuttle_engine/propulsion, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/airless, -/area/shuttle/syndicate/cruiser) -"Oy" = ( -/obj/machinery/power/shuttle_engine/heater, -/turf/open/floor/plating/airless, -/area/shuttle/syndicate/cruiser) -"Pj" = ( -/obj/machinery/ammo_workbench/unlocked, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/armory) -"Py" = ( -/obj/structure/closet/secure_closet{ - name = "Prisoner Locker"; - req_access = list("syndicate") - }, -/obj/item/clothing/shoes/sneakers/crimson, -/obj/item/clothing/shoes/sneakers/crimson, -/obj/item/clothing/shoes/sneakers/crimson, -/obj/item/clothing/shoes/sneakers/crimson, -/obj/item/clothing/shoes/sneakers/crimson, -/obj/item/clothing/shoes/sneakers/crimson, -/obj/item/clothing/shoes/sneakers/crimson, -/obj/item/clothing/shoes/sneakers/crimson, -/obj/item/clothing/shoes/sneakers/crimson, -/obj/item/clothing/shoes/sneakers/crimson, -/obj/item/clothing/shoes/sneakers/crimson, -/obj/item/clothing/shoes/sneakers/crimson, -/obj/item/clothing/under/rank/prisoner/skirt/syndicate, -/obj/item/clothing/under/rank/prisoner/skirt/syndicate, -/obj/item/clothing/under/rank/prisoner/skirt/syndicate, -/obj/item/clothing/under/rank/prisoner/skirt/syndicate, -/obj/item/clothing/under/rank/prisoner/skirt/syndicate, -/obj/item/clothing/under/rank/prisoner/skirt/syndicate, -/obj/item/clothing/under/rank/prisoner/syndicate, -/obj/item/clothing/under/rank/prisoner/syndicate, -/obj/item/clothing/under/rank/prisoner/syndicate, -/obj/item/clothing/under/rank/prisoner/syndicate, -/obj/item/clothing/under/rank/prisoner/syndicate, -/obj/item/clothing/under/rank/prisoner/syndicate, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/hallway) -"PB" = ( -/obj/structure/bed/maint, -/obj/item/bedsheet/grey{ - dir = 1 - }, -/turf/open/floor/catwalk_floor/iron_smooth, -/area/shuttle/syndicate/cruiser/brig) -"PL" = ( -/obj/machinery/power/shuttle_engine/heater, -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/plating/airless, -/area/shuttle/syndicate/cruiser) -"QP" = ( -/obj/machinery/porta_turret/syndicate/assaultops/internal, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/syndicate/cruiser/hallway) -"QU" = ( -/obj/machinery/turretid{ - name = "Internal Turret Control"; - pixel_y = 30; - req_access = list("syndicate"); - system_id = "cruiser_turrets_internal" - }, -/obj/machinery/light/no_nightlight/directional/north, -/turf/open/floor/iron/smooth_large, -/area/shuttle/syndicate/cruiser/hallway) -"QV" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/effect/turf_decal/tile/neutral/diagonal_centre, -/obj/structure/table, -/obj/effect/spawner/random/entertainment/deck, -/turf/open/floor/iron/dark/diagonal, -/area/shuttle/syndicate/cruiser/brig) -"Re" = ( -/obj/machinery/computer/shuttle/goldeneye_cruiser, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/bridge) -"RB" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/effect/turf_decal/tile/neutral/diagonal_centre, -/obj/effect/turf_decal/box/white/corners{ - dir = 4 - }, -/obj/effect/turf_decal/box/white/corners, -/obj/structure/table, -/obj/structure/bedsheetbin, -/turf/open/floor/iron/dark/diagonal, -/area/shuttle/syndicate/cruiser/brig) -"SI" = ( -/obj/machinery/door/airlock/hatch{ - name = "Armory" - }, -/obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/effect/mapping_helpers/airlock/access/any/syndicate/general, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/armory) -"SK" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/effect/turf_decal/tile/neutral/diagonal_centre, -/obj/effect/turf_decal/box/white/corners{ - dir = 4 - }, -/obj/effect/turf_decal/box/white/corners, -/obj/structure/table, -/obj/item/reagent_containers/cup/bowl, -/obj/item/reagent_containers/cup/bowl{ - pixel_y = 5 - }, -/obj/item/reagent_containers/cup/bowl{ - pixel_y = 10 - }, -/turf/open/floor/iron/dark/diagonal, -/area/shuttle/syndicate/cruiser/brig) -"Tr" = ( -/obj/structure/chair, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/brig) -"TJ" = ( -/obj/structure/rack/gunrack, -/obj/item/gun/energy/ionrifle, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/armory) -"Ua" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/effect/turf_decal/tile/neutral/diagonal_centre, -/obj/effect/turf_decal/box/white/corners{ - dir = 1 - }, -/obj/structure/chair/stool/directional/east, -/turf/open/floor/iron/dark/diagonal, -/area/shuttle/syndicate/cruiser/brig) -"Ud" = ( -/obj/structure/closet/crate/medical, -/mob/living/simple_animal/bot/medbot{ - faction = list("Syndicate"); - maints_access_required = list(150); - name = "James T. Kirk"; - radio_channel = "Syndicate" - }, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/hallway) -"Vm" = ( -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron/smooth_large, -/area/shuttle/syndicate/cruiser/hallway) -"VU" = ( -/turf/open/floor/iron/smooth_large, -/area/shuttle/syndicate/cruiser/armory) -"Wb" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/syndicate/cruiser) -"Wk" = ( -/obj/structure/extinguisher_cabinet/directional/east, -/obj/machinery/light/blacklight/directional/east, -/turf/open/floor/catwalk_floor/iron_dark, -/area/shuttle/syndicate/cruiser/brig) -"Wz" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/syndicate/cruiser/bridge) -"WF" = ( -/obj/machinery/power/shuttle_engine/propulsion, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/structure/fluff/metalpole/end{ - pixel_y = -32 - }, -/turf/open/floor/plating/airless, -/area/shuttle/syndicate/cruiser) -"Xu" = ( -/obj/machinery/computer/camera_advanced/shuttle_docker/goldeneye_cruiser, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/bridge) -"Yk" = ( -/turf/open/floor/iron/smooth_large, -/area/shuttle/syndicate/cruiser/bridge) -"YJ" = ( -/turf/open/floor/catwalk_floor/iron_smooth, -/area/shuttle/syndicate/cruiser/brig) -"Zf" = ( -/obj/machinery/space_heater, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/hallway) -"Zm" = ( -/turf/open/floor/iron/smooth_large, -/area/shuttle/syndicate/cruiser/brig) -"Zy" = ( -/obj/machinery/porta_turret/syndicate/assaultops/shuttle{ - name = "Defense System Turret"; - system_id = "cruiser_turrets_outer" - }, -/turf/closed/wall/mineral/titanium/spaceship/nodiagonal, -/area/shuttle/syndicate/cruiser) -"ZC" = ( -/obj/structure/rack/shelf, -/obj/effect/turf_decal/bot_white, -/obj/item/defibrillator/loaded, -/obj/item/storage/backpack/duffelbag/syndie/surgery, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/syndicate/cruiser/medical) - -(1,1,1) = {" -zL -zL -zL -zL -zL -zL -zL -El -ru -JA -ru -El -zL -zL -zL -Fv -ru -ru -ru -ru -ru -uo -Ma -HE -zL -zL -zL -"} -(2,1,1) = {" -zL -zL -zL -MO -mP -mP -er -er -ah -FO -ws -ru -ru -ru -ru -ru -Bd -Hm -ru -ah -ql -ru -ru -dz -dz -pX -zL -"} -(3,1,1) = {" -cN -mP -mP -er -fH -rF -FA -er -ru -qU -QP -ru -ur -eh -ab -ru -CH -CH -NE -CH -CH -Py -ru -dz -Oy -ks -zL -"} -(4,1,1) = {" -mP -Xu -dF -CI -ts -Yk -qG -er -oH -CH -CH -Vm -CH -CH -CH -CH -CH -Hd -dQ -Gz -zo -dQ -dQ -dz -Oy -Om -zL -"} -(5,1,1) = {" -mP -Re -cl -Yk -Yk -Yk -Yk -AM -CH -CH -ru -ru -Ud -eU -dQ -dQ -JW -dQ -dQ -bx -MD -bW -dQ -dz -dz -pE -WF -"} -(6,1,1) = {" -Wz -mP -er -Nq -sP -lO -sX -er -Zf -CH -bw -ru -KN -CH -dQ -Tr -MD -Ih -dQ -Gz -zo -dQ -dQ -JN -dz -Oy -Om -"} -(7,1,1) = {" -zL -zL -Wz -xL -xL -xL -xL -xL -xL -QU -bw -JY -JY -SI -dQ -bf -Wk -gO -dQ -xX -Zm -hy -dQ -Wb -dz -dz -Zy -"} -(8,1,1) = {" -zL -zL -zL -wI -dR -ZC -FH -vZ -cw -CH -bw -JY -TJ -VU -dQ -dQ -dQ -dQ -dQ -RB -Zm -SK -dQ -Wb -dz -Oy -Om -"} -(9,1,1) = {" -zL -zL -zL -xL -wb -nZ -nZ -nZ -et -CH -CH -SI -VU -VU -hk -dQ -Ua -ce -bg -YJ -yT -dQ -dQ -dz -dz -PL -rA -"} -(10,1,1) = {" -zL -zL -zL -xL -cu -nZ -kh -ha -xL -CH -Zf -JY -de -VU -JF -dQ -EL -QV -xT -YJ -YJ -ke -dQ -dz -Oy -Om -zL -"} -(11,1,1) = {" -zL -zL -rk -xL -GN -rj -FM -xL -xL -ol -QP -JY -Pj -bk -fo -dQ -pg -xT -CT -PB -Zm -iU -dQ -dz -Oy -ks -zL -"} -(12,1,1) = {" -zL -zL -zh -Hq -xL -xL -xL -xL -ah -FO -ws -JY -JY -JY -JY -dQ -FJ -Zm -Zm -Zm -Bx -dQ -dQ -dz -dz -pX -zL -"} -(13,1,1) = {" -zL -zL -zL -zL -zL -zL -zL -El -ru -dT -ru -El -zL -zL -zL -GD -dQ -uS -uS -uS -dQ -Ei -LI -HE -zL -zL -zL -"} diff --git a/_maps/shuttles/starfury_corvette.dmm b/_maps/shuttles/starfury_corvette.dmm index 498f8198cb421b..3373c5d2360d6c 100644 --- a/_maps/shuttles/starfury_corvette.dmm +++ b/_maps/shuttles/starfury_corvette.dmm @@ -68,7 +68,7 @@ "aj" = ( /obj/machinery/door/airlock/external{ id_tag = "SBC_corvette_bolt"; - name = "Syndicate Corvette Airlock" + name = "Symphionia Corvette Airlock" }, /obj/docking_port/mobile/syndicate_corvette, /obj/structure/fans/tiny, @@ -227,7 +227,7 @@ "aE" = ( /obj/machinery/door/airlock/external{ id_tag = "SBC_corvette_bolt"; - name = "Syndicate Corvette Airlock" + name = "Symphionia Corvette Airlock" }, /obj/structure/fans/tiny, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, @@ -274,7 +274,7 @@ /area/shuttle/sbc_corvette) "aK" = ( /obj/machinery/door/airlock/hatch{ - name = "Syndicate Corvette Ready Room" + name = "Symphionia Corvette Ready Room" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/iron/dark/textured_large, @@ -298,7 +298,7 @@ /area/shuttle/sbc_corvette) "aP" = ( /obj/machinery/door/airlock/hatch{ - name = "Syndicate Corvette Cockpit" + name = "Symphionia Corvette Cockpit" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/iron/dark/textured_large, diff --git a/_maps/shuttles/starfury_fighter1.dmm b/_maps/shuttles/starfury_fighter1.dmm index ae37e35c23b00a..7534fad0bc21d7 100644 --- a/_maps/shuttles/starfury_fighter1.dmm +++ b/_maps/shuttles/starfury_fighter1.dmm @@ -105,7 +105,7 @@ "V" = ( /obj/machinery/door/airlock/external{ id_tag = "SBC_fighter1_bolt"; - name = "Syndicate Fighter Airlock" + name = "Symphionia Fighter Airlock" }, /obj/docking_port/mobile/syndicate_fighter/fighter_one, /obj/structure/fans/tiny, diff --git a/_maps/shuttles/starfury_fighter2.dmm b/_maps/shuttles/starfury_fighter2.dmm index de55ea6c127cae..e74520d1f480de 100644 --- a/_maps/shuttles/starfury_fighter2.dmm +++ b/_maps/shuttles/starfury_fighter2.dmm @@ -75,7 +75,7 @@ "u" = ( /obj/machinery/door/airlock/external{ id_tag = "SBC_fighter2_bolt"; - name = "Syndicate Fighter Airlock" + name = "Symphionia Fighter Airlock" }, /obj/docking_port/mobile/syndicate_fighter/fighter_two, /obj/structure/fans/tiny, diff --git a/_maps/shuttles/starfury_fighter3.dmm b/_maps/shuttles/starfury_fighter3.dmm index e078e7b0bfda58..632bfb7ac21274 100644 --- a/_maps/shuttles/starfury_fighter3.dmm +++ b/_maps/shuttles/starfury_fighter3.dmm @@ -5,7 +5,7 @@ "e" = ( /obj/machinery/door/airlock/external{ id_tag = "SBC_fighter3_bolt"; - name = "Syndicate Fighter Airlock" + name = "Symphionia Fighter Airlock" }, /obj/docking_port/mobile/syndicate_fighter/fighter_three, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, diff --git a/_maps/shuttles/whiteship_kilo.dmm b/_maps/shuttles/whiteship_kilo.dmm index cce5cddd6075cf..50f40bba54a091 100644 --- a/_maps/shuttles/whiteship_kilo.dmm +++ b/_maps/shuttles/whiteship_kilo.dmm @@ -403,9 +403,9 @@ dir = 4; name = "Old Mining Turret"; lethal_projectile = /obj/projectile/kinetic/miner; - lethal_projectile_sound = 'sound/weapons/kenetic_accel.ogg'; + lethal_projectile_sound = 'sound/weapons/kinetic_accel.ogg'; stun_projectile = /obj/projectile/kinetic/miner; - stun_projectile_sound = 'sound/weapons/kenetic_accel.ogg' + stun_projectile_sound = 'sound/weapons/kinetic_accel.ogg' }, /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned/bar) diff --git a/_maps/shuttles/whiteship_meta.dmm b/_maps/shuttles/whiteship_meta.dmm index 291509a1824447..042988a5d35ee2 100644 --- a/_maps/shuttles/whiteship_meta.dmm +++ b/_maps/shuttles/whiteship_meta.dmm @@ -272,7 +272,7 @@ }, /mob/living/basic/trooper/syndicate/ranged{ environment_smash = 0; - name = "Syndicate Salvage Worker" + name = "Symphionia Salvage Worker" }, /turf/open/floor/plating, /area/shuttle/abandoned/engine) diff --git a/_maps/shuttles/whiteship_obelisk.dmm b/_maps/shuttles/whiteship_obelisk.dmm index 4a632a01df2683..170c3db24bd7e0 100644 --- a/_maps/shuttles/whiteship_obelisk.dmm +++ b/_maps/shuttles/whiteship_obelisk.dmm @@ -122,7 +122,7 @@ /area/shuttle/abandoned/engine) "gw" = ( /obj/structure/cable, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/crayon{ icon_state = "rune4"; paint_colour = "#DC143C" @@ -134,7 +134,7 @@ /turf/open/floor/catwalk_floor/iron_smooth, /area/shuttle/abandoned/engine) "hg" = ( -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/blood/old, /obj/structure/cable, /turf/open/floor/mineral/titanium/white, @@ -166,7 +166,7 @@ /area/shuttle/abandoned/engine) "ji" = ( /obj/structure/cable, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 }, @@ -438,7 +438,7 @@ /area/shuttle/abandoned/crew) "yo" = ( /obj/structure/cable, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/crayon{ icon_state = "rune4"; paint_colour = "#DC143C" @@ -616,7 +616,7 @@ /area/shuttle/abandoned) "IH" = ( /obj/structure/cable, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/blood/gibs/core, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 @@ -781,7 +781,7 @@ /area/shuttle/abandoned/medbay) "SE" = ( /obj/structure/cable, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/crayon{ icon_state = "rune4"; paint_colour = "#DC143C" diff --git a/_maps/shuttles/whiteship_tram.dmm b/_maps/shuttles/whiteship_tram.dmm index 54d88f01d7d66d..c5cc58f8208a19 100644 --- a/_maps/shuttles/whiteship_tram.dmm +++ b/_maps/shuttles/whiteship_tram.dmm @@ -162,7 +162,7 @@ /area/shuttle/abandoned/cargo) "aK" = ( /obj/effect/turf_decal/bot_red, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /obj/effect/spawner/random/medical/medkit_rare, /obj/effect/spawner/random/food_or_drink/booze, /obj/effect/spawner/random/food_or_drink/salad, @@ -318,7 +318,7 @@ /area/shuttle/abandoned/cargo) "bq" = ( /obj/effect/turf_decal/bot_red, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/floor/iron/dark/textured_large, /area/shuttle/abandoned/cargo) "br" = ( @@ -350,7 +350,7 @@ /area/shuttle/abandoned/cargo) "bv" = ( /obj/effect/turf_decal/bot_red, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /obj/effect/spawner/random/structure/furniture_parts, /obj/effect/spawner/random/food_or_drink/refreshing_beverage, /obj/effect/spawner/random/food_or_drink/seed_rare, @@ -608,7 +608,7 @@ /area/shuttle/abandoned/cargo) "cH" = ( /obj/effect/turf_decal/bot_red, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /obj/effect/spawner/random/exotic/syndie, /obj/effect/spawner/random/exotic/tool, /turf/open/floor/iron/dark/textured_large, @@ -1095,7 +1095,7 @@ "Bf" = ( /obj/structure/window/reinforced/survival_pod/spawner/directional/south, /obj/effect/turf_decal/bot_red, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /obj/effect/spawner/random/food_or_drink/snack, /obj/effect/spawner/random/food_or_drink/snack, /obj/effect/spawner/random/food_or_drink/snack, @@ -1149,7 +1149,7 @@ "Ez" = ( /obj/structure/window/reinforced/survival_pod/spawner/directional/south, /obj/effect/turf_decal/bot_red, -/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/structure/closet_empty/crate, /obj/effect/spawner/random/maintenance/two, /obj/effect/spawner/random/food_or_drink/refreshing_beverage, /obj/effect/spawner/random/food_or_drink/condiment, diff --git a/_maps/skyrat/automapper/automapper_config.toml b/_maps/skyrat/automapper/automapper_config.toml deleted file mode 100644 index 1683d43dae8a1b..00000000000000 --- a/_maps/skyrat/automapper/automapper_config.toml +++ /dev/null @@ -1,418 +0,0 @@ -# Automapper configuration -# [templates.example_template] - example_template should be replaced with the name of your map template. -# directory - The direct path to our map files. -# map_files - These are the names of the map files, including the extension, that will be loaded. Supports multiple for randomness. -# required_map - This is the name of the required map that needs to be loaded in order for this template to load. -# coordinates - The coordinates of the map template placement. (X, Y, Z). PLEASE NOTE: The Z coordinate is the same as would be shown in SDMM. NOT IN GAME. -# leave it at 1 if it is not a multi-z map. It is relative to the map file Z, not the one loaded in game. -# trait_name - The name of the Z level trait that will be used to determine what Z level we use. -# Traits - Station (for station relatied edits), CentCom (for edits on the CC map), Mining (for edits on Lavaland) -# More can be found in code\__DEFINES\maps.dm - -# CENTRAL COMMAND MAP TEMPLATES -# CC Ferry Dock - Admin Shuttle -[templates.centcom_ferry_dock] -map_files = ["centcom_ferry_dock.dmm"] -directory = "_maps/skyrat/automapper/templates/centcom/" -required_map = "builtin" -coordinates = [128, 79, 1] -trait_name = "CentCom" - -# CC Evac Docking Port Removal -[templates.centcom_shuttle_dock] -map_files = ["centcom_shuttle_dock.dmm"] -directory = "_maps/skyrat/automapper/templates/centcom/" -required_map = "builtin" -coordinates = [206, 85, 1] -trait_name = "CentCom" - -# METASTATION MAP TEMPLATES -# Metastation Arrivals -[templates.metastaton_arrivals] -map_files = ["metastation_arrivals.dmm"] -directory = "_maps/skyrat/automapper/templates/metastation/" -required_map = "MetaStation.dmm" -coordinates = [20, 107, 1] -trait_name = "Station" - -# Metastation Cryo -[templates.metastation_cryo] -map_files = ["metastation_cryo.dmm"] -directory = "_maps/skyrat/automapper/templates/metastation/" -required_map = "MetaStation.dmm" -coordinates = [133, 182, 1] -trait_name = "Station" - -# Metastation Barber -[templates.metastation_barber] -map_files = ["metastation_barber.dmm"] -directory = "_maps/skyrat/automapper/templates/metastation/" -required_map = "MetaStation.dmm" -coordinates = [101, 116, 1] -trait_name = "Station" - -# Metastation Armory -[templates.metastation_armory] -map_files = ["metastation_armory.dmm"] -directory = "_maps/skyrat/automapper/templates/metastation/" -required_map = "MetaStation.dmm" -coordinates = [101, 170, 1] -trait_name = "Station" - -# Metastation NTR Office -[templates.metastation_ntrep_office] -map_files = ["metastation_ntrep_office.dmm"] -directory = "_maps/skyrat/automapper/templates/metastation/" -required_map = "MetaStation.dmm" -coordinates = [57, 119, 1] -trait_name = "Station" - -# Metastation Supermatter Chamber -[templates.metastation_supermatter] -map_files = ["metastation_supermatter.dmm"] -directory = "_maps/skyrat/automapper/templates/metastation/" -required_map = "MetaStation.dmm" -coordinates = [163, 155, 1] -trait_name = "Station" - -# DELTASTATION MAP EDITS -# Deltastation Arrivals -[templates.deltastation_arrivals] -map_files = ["deltastation_arrivals.dmm"] -directory = "_maps/skyrat/automapper/templates/deltastation/" -required_map = "DeltaStation2.dmm" -coordinates = [126, 195, 1] -trait_name = "Station" - -# Deltastation Cryo -[templates.deltastation_cryo] -map_files = ["deltastation_cryo.dmm"] -directory = "_maps/skyrat/automapper/templates/deltastation/" -required_map = "DeltaStation2.dmm" -coordinates = [216, 93, 1] -trait_name = "Station" - -# Deltastation Armorys -[templates.deltastation_armory] -map_files = ["deltastation_armory.dmm"] -directory = "_maps/skyrat/automapper/templates/deltastation/" -required_map = "DeltaStation2.dmm" -coordinates = [210, 130, 1] -trait_name = "Station" - -# Deltastation Barber -[templates.deltastation_barber] -map_files = ["deltastation_barber.dmm"] -directory = "_maps/skyrat/automapper/templates/deltastation/" -required_map = "DeltaStation2.dmm" -coordinates = [121, 124, 1] -trait_name = "Station" - -# Deltastation NTR Office -[templates.deltastation_ntrep_office] -map_files = ["deltastation_ntrep_office.dmm"] -directory = "_maps/skyrat/automapper/templates/deltastation/" -required_map = "DeltaStation2.dmm" -coordinates = [123, 143, 1] -trait_name = "Station" - -# Deltastation Supermatter Chamber -[templates.deltastation_supermatter] -map_files = ["deltastation_supermatter.dmm"] -directory = "_maps/skyrat/automapper/templates/deltastation/" -required_map = "DeltaStation2.dmm" -coordinates = [84, 109, 1] -trait_name = "Station" - -# ICEBOX MAP EDITS -# Icebox Arrivals -[templates.icebox_arrivals] -map_files = ["icebox_arrivals.dmm"] -directory = "_maps/skyrat/automapper/templates/icebox/" -required_map = "IceBoxStation.dmm" -coordinates = [8, 115, 3] -trait_name = "Station" - -# Icebox Armory Middle -[templates.icebox_armory_middle] -map_files = ["icebox_armory_middle.dmm"] -directory = "_maps/skyrat/automapper/templates/icebox/" -required_map = "IceBoxStation.dmm" -coordinates = [104, 178, 2] -trait_name = "Station" - -# Icebox Cryo -[templates.icebox_cryo] -map_files = ["icebox_cryo.dmm"] -directory = "_maps/skyrat/automapper/templates/icebox/" -required_map = "IceBoxStation.dmm" -coordinates = [117, 142, 3] -trait_name = "Station" - -# Icebox Barber -[templates.icebox_barber] -map_files = ["icebox_barber.dmm"] -directory = "_maps/skyrat/automapper/templates/icebox/" -required_map = "IceBoxStation.dmm" -coordinates = [87, 128, 3] -trait_name = "Station" - -# Icebox NTR Office -[templates.icebox_ntrep_office] -map_files = ["icebox_ntrep_office.dmm"] -directory = "_maps/skyrat/automapper/templates/icebox/" -required_map = "IceBoxStation.dmm" -coordinates = [92, 118, 2] -trait_name = "Station" - -# Icebox HoP Maint -[templates.icebox_hop_maint] -map_files = ["icebox_hop_maint.dmm"] -directory = "_maps/skyrat/automapper/templates/icebox/" -required_map = "IceBoxStation.dmm" -coordinates = [98, 123, 3] -trait_name = "Station" - -# Icebox Supermatter Chamber -[templates.icebox_supermatter] -map_files = ["icebox_supermatter.dmm"] -directory = "_maps/skyrat/automapper/templates/icebox/" -required_map = "IceBoxStation.dmm" -coordinates = [114, 65, 3] -trait_name = "Station" - -# Icecats Camp Lower Level -[templates.icebox_icecats_lower] -map_files = ["icemoon_underground_icewalker_lower.dmm"] -directory = "_maps/RandomRuins/IceRuins/skyrat/" -required_map = "IceBoxStation.dmm" -coordinates = [202, 16, 1] -trait_name = "Station" - -# Icecats Camp Upper Level -[templates.icebox_icecats_upper] -map_files = ["icemoon_underground_icewalker_upper.dmm"] -directory = "_maps/RandomRuins/IceRuins/skyrat/" -required_map = "IceBoxStation.dmm" -coordinates = [202, 16, 2] -trait_name = "Station" - -# KILOSTATION MAP EDITS -# Kilostation Arrivals -[templates.kilostation_arrivals] -map_files = ["kilostation_arrivals.dmm"] -directory = "_maps/skyrat/automapper/templates/kilostation/" -required_map = "KiloStation.dmm" -coordinates = [151, 80, 1] -trait_name = "Station" - -# Kilostation ERT Bay and Barber -[templates.kilostation_ert_bay] -map_files = ["kilostation_ert_bay.dmm"] -directory = "_maps/skyrat/automapper/templates/kilostation/" -required_map = "KiloStation.dmm" -coordinates = [77, 151, 1] -trait_name = "Station" - -# Kilostation Cryo -[templates.kilostation_cryo] -map_files = ["kilostation_cryo.dmm"] -directory = "_maps/skyrat/automapper/templates/kilostation/" -required_map = "KiloStation.dmm" -coordinates = [59, 118, 1] -trait_name = "Station" - -# Kilostation Armory -[templates.kilostation_armory] -map_files = ["kilostation_armory.dmm"] -directory = "_maps/skyrat/automapper/templates/kilostation/" -required_map = "KiloStation.dmm" -coordinates = [81, 80, 1] -trait_name = "Station" - -# TRAMSTATION MAP EDITS -# Tramstation Arrivals -[templates.tramstation_arrivals] -map_files = ["tramstation_arrivals.dmm"] -directory = "_maps/skyrat/automapper/templates/tramstation/" -required_map = "tramstation.dmm" -coordinates = [8, 96, 2] -trait_name = "Station" - -# Tramstation Armory -[templates.tramstation_armory] -map_files = ["tramstation_armory.dmm"] -directory = "_maps/skyrat/automapper/templates/tramstation/" -required_map = "tramstation.dmm" -coordinates = [70, 162, 2] -trait_name = "Station" - -# Tramstation Barber -[templates.tramstation_barber] -map_files = ["tramstation_barber.dmm"] -directory = "_maps/skyrat/automapper/templates/tramstation/" -required_map = "tramstation.dmm" -coordinates = [133, 125, 1] -trait_name = "Station" - -# Tramstation Cryo -[templates.tramstation_cryo] -map_files = ["tramstation_cryo.dmm"] -directory = "_maps/skyrat/automapper/templates/tramstation/" -required_map = "tramstation.dmm" -coordinates = [68, 102, 2] -trait_name = "Station" - -# Tramstation NTR Office -[templates.tramstation_ntrep_office] -map_files = ["tramstation_ntrep_office.dmm"] -directory = "_maps/skyrat/automapper/templates/tramstation/" -required_map = "tramstation.dmm" -coordinates = [34, 135, 2] -trait_name = "Station" - -# Tramstation Supermatter Chamber -[templates.tramstation_supermatter] -map_files = ["tramstation_supermatter.dmm"] -directory = "_maps/skyrat/automapper/templates/tramstation/" -required_map = "tramstation.dmm" -coordinates = [118, 75, 1] -trait_name = "Station" - -# BIRDSHOT MAP EDITS -# Birdshot Arrivals -[templates.birdshot_arrivals] -map_files = ["birdshot_arrivals.dmm"] -directory = "_maps/skyrat/automapper/templates/birdshot/" -required_map = "birdshot.dmm" -coordinates = [136, 61, 1] -trait_name = "Station" - -# Birdshot Armory -[templates.birdshot_armory] -map_files = ["birdshot_armory.dmm"] -directory = "_maps/skyrat/automapper/templates/birdshot/" -required_map = "birdshot.dmm" -coordinates = [51, 106, 1] -trait_name = "Station" - -# Birdshot Cryo -[templates.birdshot_cryo] -map_files = ["birdshot_cryo.dmm"] -directory = "_maps/skyrat/automapper/templates/birdshot/" -required_map = "birdshot.dmm" -coordinates = [147, 142, 1] -trait_name = "Station" - -# Birdshot Barber -[templates.birdshot_barber] -map_files = ["birdshot_barber.dmm"] -directory = "_maps/skyrat/automapper/templates/birdshot/" -required_map = "birdshot.dmm" -coordinates = [129, 127, 1] -trait_name = "Station" - -# Birdshot NTR Office -[templates.birdshot_ntrep_office] -map_files = ["birdshot_ntrep_office.dmm"] -directory = "_maps/skyrat/automapper/templates/birdshot/" -required_map = "birdshot.dmm" -coordinates = [111, 157, 1] -trait_name = "Station" - -# Birdshot ERT Bay -[templates.birdshot_ert_bay] -map_files = ["birdshot_ert_bay.dmm"] -directory = "_maps/skyrat/automapper/templates/birdshot/" -required_map = "birdshot.dmm" -coordinates = [188, 72, 1] -trait_name = "Station" - -# Birdshot Supermatter Chamber -[templates.birdshot_supermatter] -map_files = ["birdshot_supermatter.dmm"] -directory = "_maps/skyrat/automapper/templates/birdshot/" -required_map = "birdshot.dmm" -coordinates = [41, 201, 1] -trait_name = "Station" - -# NORTHSTAR MAP EDITS -# Northstar Cryo -[templates.northstar_cryo] -map_files = ["northstar_cryo.dmm"] -directory = "_maps/skyrat/automapper/templates/northstar/" -required_map = "north_star.dmm" -coordinates = [130, 114, 3] -trait_name = "Station" - -# Northstar Dorms -[templates.northstar_dorms] -map_files = ["northstar_dorms.dmm"] -directory = "_maps/skyrat/automapper/templates/northstar/" -required_map = "north_star.dmm" -coordinates = [137, 132, 3] -trait_name = "Station" - -# Northstar Arrivals -[templates.northstar_arrivals] -map_files = ["northstar_arrivals.dmm"] -directory = "_maps/skyrat/automapper/templates/northstar/" -required_map = "north_star.dmm" -coordinates = [90, 100, 1] -trait_name = "Station" - -# Northstar ERT Bay -[templates.northstar_ert_bay] -map_files = ["northstar_ert_bay.dmm"] -directory = "_maps/skyrat/automapper/templates/northstar/" -required_map = "north_star.dmm" -coordinates = [54, 118, 2] -trait_name = "Station" - -# Northstar Barber -[templates.northstar_barber] -map_files = ["northstar_barber.dmm"] -directory = "_maps/skyrat/automapper/templates/northstar/" -required_map = "north_star.dmm" -coordinates = [105, 117, 2] -trait_name = "Station" - -# Northstar Armory -[templates.northstar_armory] -map_files = ["northstar_armory.dmm"] -directory = "_maps/skyrat/automapper/templates/northstar/" -required_map = "north_star.dmm" -coordinates = [121, 109, 4] -trait_name = "Station" - -# Northstar Prison -[templates.northstar_prison] -map_files = ["northstar_prison.dmm"] -directory = "_maps/skyrat/automapper/templates/northstar/" -required_map = "north_star.dmm" -coordinates = [149, 109, 4] -trait_name = "Station" - -# Northstar NTR Office -[templates.northstar_ntrep_office] -map_files = ["northstar_ntrep_office.dmm"] -directory = "_maps/skyrat/automapper/templates/northstar/" -required_map = "north_star.dmm" -coordinates = [150, 114, 3] -trait_name = "Station" - -# Northstar Supermatter Chamber -[templates.northstar_supermatter] -map_files = ["northstar_supermatter.dmm"] -directory = "_maps/skyrat/automapper/templates/northstar/" -required_map = "north_star.dmm" -coordinates = [171, 129, 1] -trait_name = "Station" - -# Lavaland NE Ashwalker Nest -[templates.lavaland_ashwalker_nenest] -map_files = ["lavaland_ashwalker_nenest.dmm"] -directory = "_maps/skyrat/automapper/templates/mining/" -required_map = "Lavaland.dmm" -coordinates = [223, 224, 1] -trait_name = "Mining" diff --git a/_maps/skyrat/automapper/templates/kilostation/kilostation_armory.dmm b/_maps/skyrat/automapper/templates/kilostation/kilostation_armory.dmm deleted file mode 100644 index 229c3d31bd05dc..00000000000000 --- a/_maps/skyrat/automapper/templates/kilostation/kilostation_armory.dmm +++ /dev/null @@ -1,144 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"e" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/bot, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/secure_closet/armory_kiboko, -/turf/open/floor/iron/showroomfloor, -/area/station/ai_monitored/security/armory) -"q" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/bot, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/rack/gunrack, -/obj/effect/spawner/armory_spawn/microfusion, -/turf/open/floor/iron/showroomfloor, -/area/station/ai_monitored/security/armory) -"u" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/bot, -/obj/structure/rack, -/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 - }, -/obj/item/clothing/suit/armor/vest/alt/sec{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/clothing/suit/armor/vest/alt/sec, -/obj/item/clothing/suit/armor/vest/alt/sec{ - pixel_x = 3; - pixel_y = -3 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/security/armory) -"w" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/bot, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/rack/gunrack, -/obj/effect/spawner/armory_spawn/smg, -/turf/open/floor/iron/showroomfloor, -/area/station/ai_monitored/security/armory) -"G" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/rack/gunrack, -/obj/effect/spawner/armory_spawn/shotguns, -/turf/open/floor/iron/showroomfloor, -/area/station/ai_monitored/security/armory) -"N" = ( -/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, -/obj/item/flashlight/seclite, -/obj/item/flashlight/seclite, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/airalarm/directional/west, -/obj/structure/table, -/obj/item/storage/barricade{ - pixel_y = -5 - }, -/obj/item/storage/barricade, -/obj/item/storage/barricade{ - pixel_y = 5 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/security/armory) -"S" = ( -/turf/template_noop, -/area/template_noop) - -(1,1,1) = {" -N -S -S -S -"} -(2,1,1) = {" -u -S -S -S -"} -(3,1,1) = {" -S -S -w -e -"} -(4,1,1) = {" -S -S -q -G -"} diff --git a/_maps/skyrat/automapper/templates/kilostation/kilostation_arrivals.dmm b/_maps/skyrat/automapper/templates/kilostation/kilostation_arrivals.dmm deleted file mode 100644 index dc4d9060ab2790..00000000000000 --- a/_maps/skyrat/automapper/templates/kilostation/kilostation_arrivals.dmm +++ /dev/null @@ -1,357 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/open/floor/plating/airless, -/area/space) -"e" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/computer/shuttle/arrivals/recall{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/entry) -"f" = ( -/turf/closed/wall/rust, -/area/station/hallway/secondary/entry) -"h" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/box, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) -"i" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/stripes/line, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) -"j" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/light/small/directional/west, -/obj/machinery/status_display/shuttle/directional/west{ - shuttle_id = "arrivals_shuttle" - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) -"k" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/vacuum/external, -/turf/open/floor/plating, -/area/station/hallway/secondary/entry) -"n" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/pen, -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/entry) -"p" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) -"q" = ( -/turf/closed/wall, -/area/station/hallway/secondary/entry) -"r" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/bluespace_vendor/directional/west, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) -"s" = ( -/obj/effect/turf_decal/stripes/line, -/obj/structure/flora/bush/pale/style_random, -/obj/effect/decal/cleanable/dirt, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) -"t" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/light/small/directional/east, -/obj/machinery/status_display/shuttle/directional/east{ - shuttle_id = "arrivals_shuttle" - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) -"v" = ( -/obj/effect/turf_decal/stripes/line, -/obj/structure/flora/grass/jungle/a/style_random, -/obj/effect/decal/cleanable/dirt, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) -"x" = ( -/obj/effect/turf_decal/bot, -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/light/small/directional/south, -/obj/structure/sign/poster/contraband/random/directional/south, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/entry) -"z" = ( -/obj/effect/spawner/random/vending/colavend, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/entry) -"A" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) -"D" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) -"E" = ( -/obj/machinery/door/airlock/external{ - name = "Arrival Shuttle Airlock" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/entry) -"F" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/hallway/secondary/entry) -"G" = ( -/obj/machinery/door/airlock/external{ - name = "Arrival Shuttle Airlock"; - space_dir = 2 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/entry) -"I" = ( -/obj/structure/sign/warning/docking, -/turf/closed/wall, -/area/station/hallway/secondary/entry) -"J" = ( -/obj/effect/turf_decal/tile/red, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) -"M" = ( -/turf/closed/mineral/random/labormineral, -/area/space/nearstation) -"O" = ( -/obj/docking_port/stationary{ - dir = 4; - dwidth = 1; - height = 13; - shuttle_id = "arrivals_stationary"; - name = "arrivals"; - width = 5 - }, -/turf/open/floor/plating/airless, -/area/space) -"S" = ( -/obj/effect/turf_decal/stripes/line, -/obj/structure/flora/grass/jungle/b/style_random, -/obj/effect/decal/cleanable/dirt, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) -"T" = ( -/obj/structure/sign/warning/secure_area{ - name = "EMERGENCY STORAGE" - }, -/turf/closed/wall, -/area/station/hallway/secondary/entry) -"V" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/vending/clothing, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/entry) -"W" = ( -/obj/machinery/door/airlock/external{ - name = "Arrival Shuttle Airlock" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/effect/landmark/navigate_destination, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/entry) -"X" = ( -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/structure/closet/firecloset, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/entry) -"Y" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) - -(1,1,1) = {" -x -f -M -S -a -a -a -a -"} -(2,1,1) = {" -X -q -M -v -a -O -a -a -"} -(3,1,1) = {" -T -f -q -I -a -a -a -a -"} -(4,1,1) = {" -r -E -j -G -a -a -a -a -"} -(5,1,1) = {" -A -F -F -F -a -a -a -a -"} -(6,1,1) = {" -h -n -F -s -a -a -a -a -"} -(7,1,1) = {" -Y -V -k -v -a -a -a -a -"} -(8,1,1) = {" -J -z -F -D -a -a -a -a -"} -(9,1,1) = {" -J -e -F -v -a -a -a -a -"} -(10,1,1) = {" -p -F -F -F -a -a -a -a -"} -(11,1,1) = {" -i -W -t -G -a -a -a -a -"} -(12,1,1) = {" -f -q -f -I -a -a -a -a -"} diff --git a/_maps/skyrat/automapper/templates/kilostation/kilostation_cryo.dmm b/_maps/skyrat/automapper/templates/kilostation/kilostation_cryo.dmm deleted file mode 100644 index 236cd7e7831c8e..00000000000000 --- a/_maps/skyrat/automapper/templates/kilostation/kilostation_cryo.dmm +++ /dev/null @@ -1,204 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/closed/wall, -/area/station/common/cryopods) -"c" = ( -/obj/structure/table, -/obj/item/clipboard, -/obj/item/screwdriver{ - pixel_y = 16 - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/port/greater) -"d" = ( -/obj/effect/turf_decal/bot, -/obj/structure/frame/computer{ - anchored = 1; - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/maintenance/port/greater) -"e" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "greylair"; - name = "Lair Privacy Shutter" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) -"g" = ( -/turf/open/floor/iron, -/area/station/common/cryopods) -"j" = ( -/obj/machinery/computer/cryopod/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/common/cryopods) -"l" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/common/cryopods) -"o" = ( -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/common/cryopods) -"r" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "greylair"; - name = "Lair Privacy Shutter" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) -"u" = ( -/obj/effect/turf_decal/bot, -/obj/structure/frame/computer{ - anchored = 1; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/maintenance/port/greater) -"x" = ( -/obj/machinery/cryopod, -/obj/effect/turf_decal/siding/white, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/iron/dark, -/area/station/common/cryopods) -"z" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Cryopods" - }, -/obj/effect/landmark/navigate_destination, -/turf/open/floor/iron, -/area/station/common/cryopods) -"A" = ( -/obj/machinery/cryopod, -/obj/effect/turf_decal/siding/white, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/common/cryopods) -"D" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/common/cryopods) -"J" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/camera/directional/east, -/obj/machinery/time_clock/directional/east, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/dark, -/area/station/common/cryopods) -"O" = ( -/obj/machinery/cryopod, -/obj/effect/turf_decal/siding/white, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/common/cryopods) -"Q" = ( -/obj/structure/table, -/obj/item/storage/secure/briefcase, -/obj/item/taperecorder, -/obj/structure/sign/warning/electric_shock/directional/south, -/turf/open/floor/iron/dark, -/area/station/maintenance/port/greater) -"R" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "greylair"; - name = "Lair Privacy Shutter" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) -"S" = ( -/obj/machinery/cryopod{ - dir = 1 - }, -/obj/effect/turf_decal/siding/white{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/common/cryopods) -"U" = ( -/turf/closed/wall, -/area/station/maintenance/port/greater) -"W" = ( -/obj/machinery/cryopod, -/obj/effect/turf_decal/siding/white, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/dark, -/area/station/common/cryopods) -"X" = ( -/obj/effect/turf_decal/bot, -/obj/structure/frame/computer{ - anchored = 1; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/maintenance/port/greater) - -(1,1,1) = {" -Q -a -a -a -a -a -"} -(2,1,1) = {" -d -r -W -o -g -l -"} -(3,1,1) = {" -X -e -O -g -g -z -"} -(4,1,1) = {" -u -R -A -D -S -l -"} -(5,1,1) = {" -c -r -x -j -J -l -"} -(6,1,1) = {" -U -a -a -a -a -a -"} diff --git a/_maps/skyrat/automapper/templates/kilostation/kilostation_ert_bay.dmm b/_maps/skyrat/automapper/templates/kilostation/kilostation_ert_bay.dmm deleted file mode 100644 index 34e0fbcad743bc..00000000000000 --- a/_maps/skyrat/automapper/templates/kilostation/kilostation_ert_bay.dmm +++ /dev/null @@ -1,3119 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ad" = ( -/obj/structure/transit_tube/diagonal/topleft, -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) -"an" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/official/random/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"aK" = ( -/obj/machinery/newscaster/directional/east, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/carpet/executive, -/area/station/command/heads_quarters/nt_rep) -"bb" = ( -/obj/machinery/door/airlock/maintenance/external{ - name = "Transit Intersection" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/fore/lesser) -"bj" = ( -/obj/machinery/bluespace_vendor/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/public/glass{ - name = "Salon Hallway" - }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"bB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/contraband/random/directional/south, -/obj/structure/cable, -/obj/effect/mapping_helpers/burnt_floor, -/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/fore) -"bH" = ( -/obj/structure/transit_tube/diagonal/crossing/topleft, -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) -"bV" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/hallway/primary/fore) -"ca" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/carpet/executive, -/area/station/command/heads_quarters/nt_rep) -"cc" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"cf" = ( -/obj/machinery/firealarm/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"cm" = ( -/obj/structure/filingcabinet/employment, -/turf/open/floor/carpet/executive, -/area/station/command/heads_quarters/nt_rep) -"cW" = ( -/obj/structure/fans/tiny/forcefield{ - dir = 1 - }, -/obj/structure/sign/warning/vacuum/external/directional/east, -/obj/machinery/door/poddoor/preopen{ - name = "Dock Shutter" - }, -/turf/open/floor/plating, -/area/station/hallway/primary/fore) -"cX" = ( -/obj/structure/closet/secure_closet/nanotrasen_consultant/station, -/obj/item/assembly/flash/handheld, -/obj/machinery/status_display/ai/directional/north, -/turf/open/floor/carpet/executive, -/area/station/command/heads_quarters/nt_rep) -"df" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron/dark/corner{ - dir = 1 - }, -/area/station/hallway/primary/fore) -"ds" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 8 - }, -/obj/effect/landmark/start/assistant, -/obj/effect/turf_decal/tile/green, -/turf/open/floor/iron/dark/corner, -/area/station/hallway/primary/fore) -"dC" = ( -/obj/effect/turf_decal/tile/purple/opposingcorners{ - dir = 8 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/barber) -"dG" = ( -/obj/machinery/camera/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"dV" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/middle, -/obj/structure/transit_tube, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/station/maintenance/fore/lesser) -"dY" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron/dark/corner{ - dir = 4 - }, -/area/station/hallway/primary/fore) -"dZ" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) -"ew" = ( -/obj/structure/sign/departments/custodian, -/turf/closed/wall, -/area/station/maintenance/fore) -"ey" = ( -/obj/effect/turf_decal/tile/purple/opposingcorners{ - dir = 8 - }, -/obj/machinery/vending/barbervend, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron/cafeteria, -/area/station/service/barber) -"eL" = ( -/obj/structure/closet{ - name = "maid locker" - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/gloves/color/white, -/obj/item/clothing/accessory/maidapron{ - pixel_x = -4; - pixel_y = -4 - }, -/obj/item/clothing/shoes/laceup, -/obj/structure/mirror/directional/north, -/turf/open/floor/iron/dark, -/area/station/maintenance/fore) -"eQ" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/box/mousetraps{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/flashlight, -/obj/structure/noticeboard/directional/north, -/turf/open/floor/iron/dark, -/area/station/maintenance/fore) -"eZ" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/abandoned, -/obj/structure/barricade/wooden/crude, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/service/janitor, -/turf/open/floor/iron/dark, -/area/station/maintenance/fore) -"fb" = ( -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/corner{ - dir = 4 - }, -/area/station/hallway/primary/fore) -"fc" = ( -/obj/effect/turf_decal/siding/white{ - dir = 5 - }, -/obj/machinery/vending/coffee, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"fr" = ( -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"fx" = ( -/obj/structure/cable, -/obj/machinery/light/directional/south, -/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/nt_rep) -"fA" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/fore/lesser) -"fF" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/effect/spawner/random/vending/snackvend, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"fR" = ( -/obj/structure/sign/warning/secure_area, -/turf/closed/wall, -/area/space/nearstation) -"fT" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/mapping_helpers/burnt_floor, -/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/fore) -"gk" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/closet/firecloset, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron/dark/corner{ - dir = 1 - }, -/area/station/hallway/primary/fore) -"gv" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron/dark/corner{ - dir = 8 - }, -/area/station/hallway/primary/fore) -"gw" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/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, -/area/station/hallway/primary/fore) -"gx" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/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/dark/corner{ - dir = 4 - }, -/area/station/hallway/primary/fore) -"gy" = ( -/obj/structure/chair/sofa/bench{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"gH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/fore/lesser) -"gW" = ( -/obj/effect/turf_decal/sand/plating, -/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/airless, -/area/space/nearstation) -"gX" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/holopad, -/turf/open/floor/wood, -/area/station/command/heads_quarters/nt_rep) -"ha" = ( -/obj/structure/sign/departments/holy{ - pixel_y = 30 - }, -/turf/open/floor/iron/stairs/right{ - dir = 4 - }, -/area/station/hallway/primary/fore) -"hd" = ( -/obj/machinery/firealarm/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"hg" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) -"hj" = ( -/obj/effect/turf_decal/sand/plating, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/space/nearstation) -"hs" = ( -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/structure/sign/poster/official/random/directional/south, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"hS" = ( -/obj/structure/transit_tube/diagonal/crossing/topleft, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) -"iv" = ( -/obj/structure/cable, -/turf/open/floor/iron/stairs/old{ - dir = 8 - }, -/area/station/maintenance/fore/lesser) -"iy" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/fore/lesser) -"iD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/hallway/primary/fore) -"iM" = ( -/obj/structure/fans/tiny/forcefield{ - dir = 1 - }, -/obj/machinery/door/poddoor/preopen{ - name = "Dock Shutter" - }, -/turf/open/floor/plating, -/area/station/hallway/primary/fore) -"iV" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/hallway/primary/fore) -"jA" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/box/lights/mixed{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/storage/belt/janitor, -/obj/item/storage/bag/trash, -/obj/structure/sign/poster/contraband/busty_backdoor_xeno_babes_6/directional/north, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/iron/dark, -/area/station/maintenance/fore) -"jC" = ( -/obj/structure/chair/sofa/bench{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"jJ" = ( -/obj/structure/transit_tube/crossing, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/fore/lesser) -"jK" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"jS" = ( -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"jV" = ( -/turf/open/floor/plating, -/area/station/hallway/primary/fore) -"jY" = ( -/obj/effect/landmark/carpspawn, -/turf/open/space/basic, -/area/space) -"kh" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/hallway/primary/fore) -"ku" = ( -/obj/machinery/camera/directional/north, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"kz" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - name = "Privacy Shutter"; - id = "nt_rep_priv_2" - }, -/turf/open/floor/plating, -/area/station/command/heads_quarters/nt_rep) -"kE" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/hallway/primary/fore) -"kI" = ( -/obj/effect/turf_decal/siding/white{ - dir = 6 - }, -/obj/effect/spawner/random/vending/colavend, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"kP" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/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, -/area/station/hallway/primary/fore) -"lr" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/newscaster/directional/north, -/obj/machinery/camera/directional/north{ - c_tag = "Fore Hallway Monastary Tube"; - name = "fore camera" - }, -/obj/structure/chair/sofa/bench, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron/dark/corner{ - dir = 4 - }, -/area/station/hallway/primary/fore) -"lw" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/transit_tube/crossing, -/turf/open/floor/plating, -/area/station/maintenance/fore/lesser) -"lU" = ( -/obj/effect/turf_decal/tile/purple/opposingcorners{ - dir = 8 - }, -/obj/structure/closet/secure_closet/barber, -/obj/effect/decal/cleanable/dirt, -/obj/item/pushbroom, -/obj/item/reagent_containers/spray/cleaner, -/obj/machinery/firealarm/directional/west, -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/light_switch/directional/north, -/turf/open/floor/iron/cafeteria, -/area/station/service/barber) -"mi" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/grille, -/turf/open/floor/plating/airless, -/area/space/nearstation) -"mU" = ( -/obj/structure/chair/sofa/bench{ - dir = 8 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"mZ" = ( -/turf/open/floor/carpet/executive, -/area/station/command/heads_quarters/nt_rep) -"nc" = ( -/obj/effect/turf_decal/sand/plating, -/obj/structure/disposalpipe/segment, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/plating/airless, -/area/space/nearstation) -"ne" = ( -/turf/closed/wall, -/area/space/nearstation) -"nv" = ( -/obj/machinery/airalarm/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"nA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/bot, -/obj/structure/sink/directional/east, -/obj/item/reagent_containers/cup/bucket, -/obj/item/mop, -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/button/door/directional/south{ - id = "maidbay"; - name = "Maid Bay Toggle" - }, -/obj/structure/sign/poster/contraband/random/directional/west, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/fore) -"nE" = ( -/obj/structure/chair/sofa/bench{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/effect/landmark/start/assistant, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"nF" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron/dark/corner{ - dir = 8 - }, -/area/station/hallway/primary/fore) -"nN" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/hallway/primary/fore) -"nS" = ( -/obj/structure/chair/sofa/bench/corner{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green, -/obj/machinery/camera/directional/south, -/turf/open/floor/iron/dark/corner, -/area/station/hallway/primary/fore) -"nW" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"oi" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron/dark/corner{ - dir = 4 - }, -/area/station/hallway/primary/fore) -"oR" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - name = "Privacy Shutter"; - id = "nt_rep_priv" - }, -/turf/open/floor/plating, -/area/station/command/heads_quarters/nt_rep) -"oZ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/closed/wall/r_wall/rust, -/area/station/command/heads_quarters/nt_rep) -"pf" = ( -/turf/closed/wall, -/area/station/maintenance/fore) -"qg" = ( -/obj/structure/closet/crate, -/obj/item/hand_labeler, -/obj/item/storage/crayons, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/plating, -/area/station/maintenance/fore) -"qj" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"qr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/fore) -"qM" = ( -/obj/machinery/button/door/directional/north{ - name = "Privacy Shutters Control"; - id = "nt_rep_priv" - }, -/obj/structure/table/wood, -/obj/item/folder/yellow{ - pixel_x = 8; - pixel_y = -1 - }, -/obj/item/folder/red{ - pixel_x = -4; - pixel_y = -2 - }, -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = 3 - }, -/obj/item/folder/blue{ - pixel_y = 6; - pixel_x = -2 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/nt_rep) -"qS" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/structure/noticeboard/directional/north{ - dir = 2; - name = "Chapel Notice Board" - }, -/obj/machinery/light/directional/north, -/obj/structure/chair/sofa/bench/right, -/turf/open/floor/iron/dark/corner{ - dir = 4 - }, -/area/station/hallway/primary/fore) -"qU" = ( -/obj/effect/turf_decal/tile/green, -/turf/open/floor/iron/dark/corner, -/area/station/hallway/primary/fore) -"rk" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/machinery/newscaster/directional/west, -/obj/effect/landmark/start/barber, -/turf/open/floor/iron/dark, -/area/station/service/barber) -"rt" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/fore/lesser) -"rz" = ( -/obj/structure/closet/crate/bin, -/obj/machinery/camera/directional/north, -/obj/structure/noticeboard/directional/north, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"rE" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"rL" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/light_switch/directional/south, -/obj/structure/cable, -/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/nt_rep) -"rT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"su" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/turf/open/floor/iron/dark/corner{ - dir = 4 - }, -/area/station/hallway/primary/fore) -"sz" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/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, -/area/station/hallway/primary/fore) -"tg" = ( -/turf/closed/wall/rust, -/area/station/maintenance/fore) -"tx" = ( -/obj/structure/transit_tube/crossing, -/obj/effect/turf_decal/sand/plating, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/plating/airless, -/area/space/nearstation) -"tz" = ( -/obj/effect/turf_decal/sand/plating, -/obj/structure/sign/warning/secure_area/directional/east, -/turf/open/floor/plating/airless, -/area/space/nearstation) -"tU" = ( -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"ud" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"uf" = ( -/obj/effect/landmark/start/nanotrasen_consultant, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/wood, -/area/station/command/heads_quarters/nt_rep) -"uj" = ( -/obj/structure/lattice, -/obj/structure/grille/broken, -/turf/open/space/basic, -/area/space/nearstation) -"uI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/blobstart, -/obj/effect/turf_decal/stripes/line, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/fore) -"uM" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/button/curtain{ - id = "barbershopcurtains1"; - pixel_x = -25; - pixel_y = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron/dark, -/area/station/service/barber) -"uX" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/firealarm/directional/north, -/obj/structure/chair/sofa/bench, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron/dark/corner{ - dir = 4 - }, -/area/station/hallway/primary/fore) -"vp" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/fore/lesser) -"vs" = ( -/obj/effect/turf_decal/sand/plating, -/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/airless, -/area/space/nearstation) -"vE" = ( -/obj/effect/turf_decal/sand/plating, -/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/airless, -/area/space/nearstation) -"vJ" = ( -/obj/effect/turf_decal/tile/purple/opposingcorners{ - dir = 8 - }, -/obj/machinery/airalarm/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/station/service/barber) -"vS" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/structure/table/wood, -/obj/item/camera_film{ - pixel_x = -5; - pixel_y = 9 - }, -/obj/item/camera_film, -/turf/open/floor/wood, -/area/station/command/heads_quarters/nt_rep) -"vV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/fore) -"wh" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"wF" = ( -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"wK" = ( -/obj/machinery/door/airlock/public{ - name = "Massage Parlour" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/service/barber) -"wL" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Ferry Dock" - }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"wQ" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Barbershop" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/service/barber) -"wT" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/wood, -/area/station/command/heads_quarters/nt_rep) -"xV" = ( -/turf/closed/wall/r_wall/rust, -/area/station/command/heads_quarters/nt_rep) -"yd" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green, -/turf/open/floor/iron/dark/corner, -/area/station/hallway/primary/fore) -"yC" = ( -/turf/closed/wall/rust, -/area/station/service/barber) -"yM" = ( -/obj/effect/turf_decal/sand/plating, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/plating/airless, -/area/space/nearstation) -"zb" = ( -/turf/closed/wall/r_wall, -/area/station/command/heads_quarters/nt_rep) -"ze" = ( -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"zf" = ( -/obj/structure/lattice, -/obj/structure/sign/warning/secure_area/directional/south, -/turf/open/space/basic, -/area/space/nearstation) -"zu" = ( -/obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/carpet/executive, -/area/station/command/heads_quarters/nt_rep) -"zF" = ( -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_y = 4 - }, -/obj/item/pen/fountain, -/turf/open/floor/carpet/executive, -/area/station/command/heads_quarters/nt_rep) -"zR" = ( -/obj/effect/spawner/structure/window, -/obj/structure/curtain/cloth/fancy/mechanical{ - id = "barbershopcurtains1"; - name = "Massage Parlour Drapes" - }, -/turf/open/floor/plating, -/area/station/service/barber) -"zZ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/grimy, -/area/station/hallway/primary/fore) -"Ag" = ( -/turf/closed/wall/rust, -/area/station/maintenance/fore/lesser) -"AB" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"Be" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/structure/bed/pod, -/obj/machinery/firealarm/directional/north, -/obj/machinery/camera/directional/west, -/turf/open/floor/iron/dark, -/area/station/service/barber) -"Bs" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/camera/directional/east{ - c_tag = "NT Consultant's Office"; - name = "command camera" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/station/command/heads_quarters/nt_rep) -"Bx" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"BU" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/landmark/start/barber, -/turf/open/floor/iron/dark, -/area/station/service/barber) -"BZ" = ( -/obj/structure/transit_tube/diagonal/crossing/topleft, -/turf/open/space/basic, -/area/space/nearstation) -"Ce" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron/dark/corner{ - dir = 4 - }, -/area/station/hallway/primary/fore) -"Cf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/wood, -/area/station/command/heads_quarters/nt_rep) -"Cm" = ( -/obj/structure/flora/rock/style_random, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) -"Da" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"Dh" = ( -/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, -/area/station/hallway/primary/fore) -"Dl" = ( -/turf/open/misc/asteroid/airless, -/area/space/nearstation) -"Dp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/radio/intercom/directional/east, -/obj/machinery/camera/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"DC" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Salon Hallway" - }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"DJ" = ( -/turf/closed/wall/rust, -/area/station/command/heads_quarters/nt_rep) -"Ef" = ( -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"Eg" = ( -/turf/closed/wall, -/area/station/hallway/primary/fore) -"Eh" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron/dark/corner{ - dir = 8 - }, -/area/station/hallway/primary/fore) -"Ek" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/fore) -"En" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Ferry Dock" - }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"Ev" = ( -/obj/structure/chair/office, -/obj/effect/landmark/start/nanotrasen_consultant, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/carpet/executive, -/area/station/command/heads_quarters/nt_rep) -"EG" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/chair/office{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/station/command/heads_quarters/nt_rep) -"EI" = ( -/obj/effect/turf_decal/tile/purple/opposingcorners{ - dir = 8 - }, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/directional/west, -/turf/open/floor/iron/cafeteria, -/area/station/service/barber) -"EO" = ( -/obj/structure/transit_tube/curved/flipped, -/turf/open/space/basic, -/area/space/nearstation) -"EP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/hallway/primary/fore) -"EX" = ( -/obj/structure/table/wood, -/obj/item/stamp{ - pixel_y = 8; - pixel_x = -6 - }, -/obj/item/stamp/denied{ - pixel_x = -6; - pixel_y = 2 - }, -/obj/item/stamp/centcom{ - pixel_x = 6; - pixel_y = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/carpet/executive, -/area/station/command/heads_quarters/nt_rep) -"Fg" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron/dark/corner{ - dir = 8 - }, -/area/station/hallway/primary/fore) -"Fi" = ( -/turf/closed/wall, -/area/station/service/barber) -"Fl" = ( -/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, -/area/station/hallway/primary/fore) -"Fz" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/maintenance/fore/lesser) -"FM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark/corner{ - dir = 4 - }, -/area/station/hallway/primary/fore) -"FQ" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"FU" = ( -/obj/effect/turf_decal/tile/purple/opposingcorners{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/station/service/barber) -"Gh" = ( -/turf/open/space/basic, -/area/space) -"Gw" = ( -/obj/structure/chair/sofa/bench/left, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/turf/open/floor/iron/dark/corner{ - dir = 4 - }, -/area/station/hallway/primary/fore) -"GN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/burnt_floor, -/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/fore) -"GU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/random/directional/north, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/fore/lesser) -"GX" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron/dark/corner{ - dir = 8 - }, -/area/station/hallway/primary/fore) -"Ho" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/item/radio/intercom/directional/west, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/dark, -/area/station/service/barber) -"HJ" = ( -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/stripes/corner, -/obj/structure/noticeboard/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"HV" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/table/reinforced/rglass, -/obj/item/hairbrush{ - pixel_x = 6; - pixel_y = 9 - }, -/obj/item/clothing/gloves/latex, -/turf/open/floor/iron/dark, -/area/station/service/barber) -"HW" = ( -/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, -/area/station/hallway/primary/fore) -"Ia" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"Ib" = ( -/turf/closed/wall, -/area/station/maintenance/fore/lesser) -"Iv" = ( -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"IX" = ( -/obj/structure/table/wood, -/obj/item/taperecorder{ - pixel_y = 5; - pixel_x = 5 - }, -/obj/item/camera{ - pixel_x = -4 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/nt_rep) -"Ja" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/event_spawn, -/obj/structure/cable, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/fore) -"Jl" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"Jm" = ( -/obj/structure/cable, -/obj/machinery/status_display/ai/directional/south, -/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/nt_rep) -"Jn" = ( -/obj/structure/chair/sofa/bench{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"Jq" = ( -/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, -/area/station/hallway/primary/fore) -"JP" = ( -/obj/machinery/camera/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"KA" = ( -/obj/machinery/photocopier, -/obj/machinery/button/door/directional/north{ - id = "nt_rep_priv_2"; - name = "Privacy Shutters Control" - }, -/turf/open/floor/carpet/executive, -/area/station/command/heads_quarters/nt_rep) -"KE" = ( -/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, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/hallway/primary/fore) -"KL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/fore) -"Lw" = ( -/obj/structure/transit_tube/diagonal/topleft, -/turf/open/space/basic, -/area/space/nearstation) -"LI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"Me" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/open/space/basic, -/area/space/nearstation) -"Mt" = ( -/turf/closed/wall/rust, -/area/station/hallway/primary/fore) -"Mu" = ( -/obj/structure/flora/rock/pile/style_2, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) -"Mw" = ( -/obj/effect/turf_decal/tile/purple/opposingcorners{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/station/service/barber) -"MG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"MO" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/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/plating, -/area/station/hallway/primary/fore) -"MP" = ( -/turf/closed/wall/rust, -/area/space/nearstation) -"Ng" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/filingcabinet/chestdrawer, -/turf/open/floor/wood, -/area/station/command/heads_quarters/nt_rep) -"Nu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/plating, -/area/station/maintenance/fore) -"NU" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/corner{ - dir = 4 - }, -/area/station/hallway/primary/fore) -"Op" = ( -/obj/machinery/light/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"Oq" = ( -/obj/docking_port/stationary{ - dheight = 3; - dir = 8; - dwidth = 8; - height = 11; - shuttle_id = "ferry_home"; - name = "Port Bay 2"; - width = 20 - }, -/turf/open/floor/plating, -/area/station/hallway/primary/fore) -"Oy" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron/dark/corner{ - dir = 8 - }, -/area/station/hallway/primary/fore) -"OJ" = ( -/obj/effect/turf_decal/sand/plating, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/airless, -/area/space/nearstation) -"OO" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light/directional/north, -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/turf/open/floor/iron/dark/corner{ - dir = 1 - }, -/area/station/hallway/primary/fore) -"OR" = ( -/obj/machinery/modular_computer/preset/command{ - dir = 4 - }, -/turf/open/floor/carpet/executive, -/area/station/command/heads_quarters/nt_rep) -"OY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/fore) -"Pd" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/structure/sign/poster/official/random/directional/west, -/turf/open/floor/iron/dark/corner{ - dir = 8 - }, -/area/station/hallway/primary/fore) -"Po" = ( -/obj/structure/table/reinforced/rglass, -/obj/item/reagent_containers/dropper, -/obj/item/hairbrush/comb{ - pixel_y = 10 - }, -/obj/machinery/button/curtain{ - id = "barbershopcurtains"; - pixel_x = 10; - pixel_y = -26 - }, -/turf/open/floor/iron/dark, -/area/station/service/barber) -"Pt" = ( -/obj/structure/fans/tiny/forcefield{ - dir = 1 - }, -/obj/structure/sign/warning/vacuum/external/directional/west, -/obj/machinery/door/poddoor/preopen{ - name = "Dock Shutter" - }, -/turf/open/floor/plating, -/area/station/hallway/primary/fore) -"Pw" = ( -/obj/structure/transit_tube, -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/space/nearstation) -"PD" = ( -/obj/effect/decal/cleanable/dirt, -/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/fore) -"Qy" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"Re" = ( -/obj/effect/turf_decal/tile/purple/opposingcorners{ - dir = 8 - }, -/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/cafeteria, -/area/station/service/barber) -"Rf" = ( -/obj/structure/chair/sofa/bench{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/effect/landmark/start/assistant, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"Rj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"Ry" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/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, -/area/station/hallway/primary/fore) -"RA" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/fore/lesser) -"Sa" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"Sg" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"SC" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/service/barber) -"SH" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/nt_rep) -"Th" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"TD" = ( -/obj/structure/transit_tube, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/iron/grimy, -/area/station/hallway/primary/fore) -"TG" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"TS" = ( -/turf/template_noop, -/area/template_noop) -"TU" = ( -/obj/structure/table/reinforced/rglass, -/obj/item/razor{ - pixel_x = -6 - }, -/obj/item/reagent_containers/spray/barbers_aid{ - pixel_x = 6 - }, -/obj/machinery/light/directional/south, -/turf/open/floor/iron/dark, -/area/station/service/barber) -"Uc" = ( -/obj/structure/transit_tube/diagonal/topleft, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) -"Ul" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/food/pie_smudge, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/fore) -"Um" = ( -/obj/structure/flora/rock/pile/style_random, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) -"Uw" = ( -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"UZ" = ( -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/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/dark/corner{ - dir = 4 - }, -/area/station/hallway/primary/fore) -"Vp" = ( -/obj/structure/chair/comfy/barber_chair, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron/dark, -/area/station/service/barber) -"VG" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/hallway/primary/fore) -"Wi" = ( -/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/plating, -/area/station/hallway/primary/fore) -"WA" = ( -/obj/effect/spawner/structure/window, -/obj/structure/curtain/cloth/fancy/mechanical{ - id = "barbershopcurtains"; - name = "Barber Shop Drapes" - }, -/turf/open/floor/plating, -/area/station/service/barber) -"WE" = ( -/obj/machinery/door/airlock/corporate{ - name = "NT Consultant's Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/cent_com/rep_door, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark/corner{ - dir = 4 - }, -/area/station/command/heads_quarters/nt_rep) -"WY" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/chair/office/light{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/landmark/start/barber, -/turf/open/floor/iron/dark, -/area/station/service/barber) -"Xo" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/corner{ - dir = 4 - }, -/area/station/hallway/primary/fore) -"Xp" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"XI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"XJ" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/spawner/random/structure/crate, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/fore) -"XL" = ( -/turf/closed/mineral/random/labormineral, -/area/space/nearstation) -"XP" = ( -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/space/nearstation) -"Yl" = ( -/obj/structure/table/reinforced/rglass, -/obj/structure/mirror/directional/south, -/obj/item/lipstick/random{ - pixel_x = -6; - pixel_y = -5 - }, -/obj/item/lipstick/random, -/obj/item/reagent_containers/spray/quantum_hair_dye{ - pixel_x = 9 - }, -/turf/open/floor/iron/dark, -/area/station/service/barber) -"YD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/station/command/heads_quarters/nt_rep) -"YS" = ( -/obj/effect/turf_decal/sand/plating, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plating/airless, -/area/space/nearstation) -"Zb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/station/command/heads_quarters/nt_rep) -"Ze" = ( -/obj/structure/transit_tube/crossing, -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/space/nearstation) -"Zv" = ( -/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/hallway/primary/fore) -"ZN" = ( -/obj/structure/table/wood, -/turf/open/floor/carpet/executive, -/area/station/command/heads_quarters/nt_rep) - -(1,1,1) = {" -Gh -Gh -Gh -Gh -Gh -Gh -Gh -Gh -Gh -jY -Gh -Gh -Gh -Gh -Gh -Gh -Gh -Gh -Gh -Gh -Gh -BZ -dZ -Gh -Gh -Gh -Gh -Dl -Dl -vs -XL -TS -TS -TS -TS -TS -TS -TS -TS -TS -TS -TS -"} -(2,1,1) = {" -XL -Gh -Gh -Gh -Gh -Dl -Dl -Gh -Gh -Gh -nN -nN -nN -nN -nN -nN -Gh -Gh -Gh -Gh -Gh -Gh -ad -dZ -dZ -dZ -dZ -dZ -XP -gW -vE -TS -TS -TS -TS -TS -TS -TS -TS -TS -TS -TS -"} -(3,1,1) = {" -XL -Dl -Gh -Gh -Dl -Dl -Dl -Dl -Gh -nN -nN -rE -wh -kh -rE -nN -nN -Gh -Gh -Gh -Gh -Gh -Gh -Lw -Dl -Dl -Dl -Dl -Dl -Dl -hj -TS -TS -TS -TS -TS -TS -TS -TS -TS -TS -TS -"} -(4,1,1) = {" -XL -Dl -Dl -Gh -Mu -Dl -Dl -Dl -Dl -nN -Uw -Rj -jK -jK -cc -Uw -nN -Dl -Dl -Dl -Dl -Gh -Dl -Dl -hS -Dl -Dl -Dl -Dl -Dl -hj -TS -TS -TS -TS -TS -TS -TS -TS -TS -TS -TS -"} -(5,1,1) = {" -Dl -Dl -Dl -Dl -Dl -Dl -Dl -Dl -nN -nN -jK -bV -mU -gy -Sa -jV -nN -nN -Dl -Mu -Dl -Dl -Dl -Dl -Dl -Uc -Dl -Dl -Dl -XL -hj -TS -TS -TS -TS -TS -TS -TS -TS -TS -TS -TS -"} -(6,1,1) = {" -Dl -Dl -Dl -Dl -Dl -Dl -Dl -Dl -Eg -rz -jK -LI -Uw -jK -ud -Uw -tU -Eg -Dl -Dl -Dl -Dl -Dl -Dl -Dl -Dl -Uc -Dl -Gh -Gh -yM -OJ -YS -TS -TS -TS -TS -TS -TS -TS -TS -TS -"} -(7,1,1) = {" -Dl -Dl -Mt -Mt -Eg -nN -nN -nN -Eg -jS -qj -Rf -Jn -jC -nE -Da -hs -Mt -Mt -nN -nN -nN -Eg -Eg -nN -Eg -Gh -bH -dZ -dZ -dZ -fR -hj -TS -TS -TS -TS -TS -TS -TS -TS -TS -"} -(8,1,1) = {" -Gh -Gh -Eg -ku -cf -EP -nW -MG -nW -nW -wF -rT -wF -wF -XI -nW -nW -jV -fc -fF -kI -wF -fr -EP -nW -nN -Gh -dZ -Lw -Gh -Gh -dZ -hj -TS -TS -TS -TS -TS -TS -TS -TS -TS -"} -(9,1,1) = {" -Gh -Gh -Eg -Ef -AB -Jl -Jl -Fl -Fl -Fl -sz -sz -Fl -Fl -Fl -sz -sz -Fl -Fl -Fl -Fl -Fl -Fl -Dh -MG -nN -Gh -dZ -dZ -Lw -Gh -XP -yM -OJ -OJ -OJ -OJ -nc -fA -RA -TS -TS -"} -(10,1,1) = {" -Gh -Gh -Pt -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -HW -iD -nN -Gh -Gh -dZ -dZ -EO -Ze -Pw -Pw -Ze -Pw -Pw -tx -lw -jJ -dV -TD -"} -(11,1,1) = {" -Gh -Gh -iM -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -HW -hd -Eg -dZ -dZ -dZ -dZ -dZ -XP -tz -Dl -Dl -Dl -Dl -hg -rt -gH -Fz -zZ -"} -(12,1,1) = {" -Gh -Gh -iM -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -HW -JP -Eg -Gh -Gh -dZ -Gh -dZ -dZ -Fi -Fi -yC -Fi -Fi -yC -Ib -bb -Ag -ha -"} -(13,1,1) = {" -Gh -Gh -iM -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -Wi -kE -nN -Gh -Gh -Fi -yC -Fi -yC -yC -lU -EI -vJ -rk -Po -Ib -vp -Ib -qS -"} -(14,1,1) = {" -Gh -Gh -iM -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -MO -nW -nN -Gh -Gh -yC -Be -uM -Ho -yC -ey -Mw -dC -Vp -Yl -Ib -iv -Ag -uX -"} -(15,1,1) = {" -Gh -Gh -iM -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -gw -nW -nN -Gh -Gh -yC -HV -WY -SC -wK -FU -Re -Re -BU -TU -Ib -GU -Ib -lr -"} -(16,1,1) = {" -Gh -Gh -iM -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -gw -HJ -Eg -nN -nN -Fi -zR -zR -zR -Fi -WA -WA -wQ -WA -WA -Ag -iy -Ib -Gw -"} -(17,1,1) = {" -Gh -Gh -iM -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -Oq -jV -jV -jV -jV -jV -jV -jV -jV -HW -FQ -En -gv -Oy -En -gv -GX -GX -Pd -GX -GX -Fg -nF -nF -nF -Eh -DC -Ce -"} -(18,1,1) = {" -Gh -Gh -iM -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -gw -TG -wL -gx -NU -wL -UZ -fb -Bx -Zv -Zv -Xo -su -su -FM -su -dY -bj -oi -"} -(19,1,1) = {" -Gh -Gh -iM -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -gw -ze -Eg -nN -nN -Eg -Eg -Eg -OO -wF -qU -zb -oR -oR -WE -oZ -GN -pf -tg -"} -(20,1,1) = {" -Gh -Gh -cW -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -gw -VG -nN -Dl -Dl -Dl -Dl -Mt -gk -wF -yd -xV -qM -vS -rL -zb -bB -pf -qg -"} -(21,1,1) = {" -Gh -Gh -Eg -Iv -iV -Sg -Sg -Qy -Qy -Qy -kP -Jq -kP -kP -kP -kP -Jq -Jq -Jq -KE -Jq -Jq -Jq -Ry -wF -nN -Dl -Dl -Dl -Um -Mt -df -ds -nS -zb -IX -uf -Jm -xV -fT -pf -pf -"} -(22,1,1) = {" -Gh -Gh -Eg -dG -nW -nW -Th -an -kE -nW -Ia -Op -wF -wF -wF -wF -nv -Dp -nW -nW -kE -wF -Op -Xp -wF -nN -Dl -Dl -Dl -Dl -Eg -Mt -xV -kz -xV -Ng -wT -fx -zb -Ek -Ja -qr -"} -(23,1,1) = {" -Gh -Gh -Mt -nN -nN -nN -Eg -Mt -nN -nN -nN -Eg -Eg -nN -nN -nN -Eg -Eg -nN -nN -nN -Eg -Eg -nN -nN -Mt -Dl -Dl -Gh -XL -XL -XL -xV -KA -OR -ZN -gX -Zb -zb -XJ -OY -KL -"} -(24,1,1) = {" -Gh -Gh -Gh -Gh -Gh -Dl -Dl -Dl -Dl -Dl -Dl -Dl -Cm -Dl -Dl -Dl -Dl -Dl -Dl -Dl -Dl -Dl -Dl -Dl -Dl -Dl -Dl -Gh -Gh -XL -XL -XL -zb -ca -Ev -EX -EG -Cf -xV -ew -eZ -pf -"} -(25,1,1) = {" -Gh -Gh -Gh -Gh -Gh -Dl -Dl -Dl -Dl -Dl -Dl -Dl -Dl -Dl -Dl -Dl -Dl -Dl -Dl -Gh -Gh -Gh -Gh -Gh -Gh -Gh -Gh -Gh -jY -Gh -XL -XL -DJ -cX -mZ -zF -SH -YD -zb -jA -PD -nA -"} -(26,1,1) = {" -Gh -Gh -Gh -Gh -Dl -Dl -Dl -Um -XL -XL -Dl -Dl -Dl -Dl -Dl -Dl -Gh -Gh -Gh -Gh -Gh -Gh -Gh -Gh -Gh -Gh -Gh -Gh -Gh -Gh -Gh -XL -zb -cm -aK -zu -Bs -YD -zb -eL -Nu -vV -"} -(27,1,1) = {" -Gh -Gh -Gh -Gh -Dl -Dl -XL -XL -XL -MP -mi -fR -XL -Dl -Um -XL -fR -dZ -uj -Me -Me -Me -dZ -fR -dZ -uj -Me -Me -Me -Me -zf -ne -xV -zb -zb -zb -zb -zb -xV -eQ -Ul -uI -"} diff --git a/_maps/skyrat/automapper/templates/northstar/northstar_prison.dmm b/_maps/skyrat/automapper/templates/northstar/northstar_prison.dmm deleted file mode 100644 index 403bebf29b092f..00000000000000 --- a/_maps/skyrat/automapper/templates/northstar/northstar_prison.dmm +++ /dev/null @@ -1,23 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/obj/machinery/cryopod/prison/directional/west{ - quiet = 1 - }, -/turf/template_noop, -/area/template_noop) -"r" = ( -/obj/machinery/cryopod/prison/directional/north, -/turf/template_noop, -/area/template_noop) -"P" = ( -/turf/template_noop, -/area/template_noop) - -(1,1,1) = {" -r -P -P -P -P -a -"} diff --git a/_maps/templates/battlecruiser_starfury.dmm b/_maps/templates/battlecruiser_starfury.dmm index 1e4905ac26ebf4..40a476a88ea3a0 100644 --- a/_maps/templates/battlecruiser_starfury.dmm +++ b/_maps/templates/battlecruiser_starfury.dmm @@ -119,7 +119,6 @@ "as" = ( /obj/machinery/light/directional/north, /obj/machinery/atmospherics/components/unary/thermomachine/freezer, -/obj/machinery/light/directional/north, /obj/effect/turf_decal/siding/thinplating_new{ dir = 4 }, @@ -4781,10 +4780,10 @@ /area/shuttle/sbc_starfury) "Gz" = ( /obj/structure/cable, -/mob/living/simple_animal/bot/medbot{ +/mob/living/basic/bot/medbot{ desc = "A medical bot of syndicate origins. Probably plots about how to stab you full of toxins in its free time."; - faction = list("neutral","silicon","turret","Syndicate"); - name = "Syndicate Medibot"; + faction = list("neutral","silicon","turret","Symphionia"); + name = "Symphionia Medibot"; skin = "bezerk"; maints_access_required = list("syndicate") }, diff --git a/_maps/templates/ferry_skyrat.dmm b/_maps/templates/ferry_nova.dmm similarity index 100% rename from _maps/templates/ferry_skyrat.dmm rename to _maps/templates/ferry_nova.dmm diff --git a/_maps/templates/holodeck_kobayashi.dmm b/_maps/templates/holodeck_kobayashi.dmm index 56470141bf3c95..646e26f43e3985 100644 --- a/_maps/templates/holodeck_kobayashi.dmm +++ b/_maps/templates/holodeck_kobayashi.dmm @@ -192,7 +192,7 @@ name = "photon torpedo tube" }, /obj/item/toy/minimeteor{ - desc = "A primitive long-range weapon, inferior to Nanotrasen's perfected bluespace artillery."; + desc = "A primitive long-range weapon, inferior to Symphionia's perfected bluespace artillery."; icon = 'icons/effects/effects.dmi'; icon_state = "impact_laser"; name = "photon torpedo" diff --git a/_maps/templates/holodeck_medicalsim.dmm b/_maps/templates/holodeck_medicalsim.dmm index acc38d02c58dd3..871e5461491a22 100644 --- a/_maps/templates/holodeck_medicalsim.dmm +++ b/_maps/templates/holodeck_medicalsim.dmm @@ -568,6 +568,8 @@ /obj/item/surgical_drapes, /obj/item/razor, /obj/item/hemostat, +/obj/item/bonesetter, +/obj/item/stack/medical/bone_gel, /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, diff --git a/_maps/templates/lazy_templates/heretic_sacrifice.dmm b/_maps/templates/lazy_templates/heretic_sacrifice.dmm index 06ace91956c01f..44300c13735fee 100644 --- a/_maps/templates/lazy_templates/heretic_sacrifice.dmm +++ b/_maps/templates/lazy_templates/heretic_sacrifice.dmm @@ -44,7 +44,7 @@ /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt/dust, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "fO" = ( /turf/open/indestructible, /area/space) @@ -59,7 +59,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/item/storage/toolbox/mechanical/old, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "hZ" = ( /obj/effect/decal/cleanable/blood/old, /turf/open/indestructible/necropolis/air, @@ -71,7 +71,7 @@ /area/centcom/heretic_sacrifice/rust) "jt" = ( /turf/closed/indestructible/reinforced, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "jB" = ( /obj/machinery/light/very_dim/directional/south, /turf/open/misc/asteroid, @@ -105,7 +105,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/item/spear, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "mZ" = ( /obj/effect/decal/fakelattice{ density = 0 @@ -176,7 +176,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/item/storage/toolbox/mechanical/old, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "qu" = ( /obj/effect/turf_decal/weather/dirt, /turf/open/misc/ashplanet/wateryrock{ @@ -234,7 +234,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/item/clothing/under/color/grey/ancient, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "uT" = ( /obj/structure/cable, /turf/open/floor/plating/rust, @@ -260,7 +260,7 @@ /area/centcom/heretic_sacrifice/ash) "wo" = ( /turf/closed/indestructible/grille, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "wt" = ( /obj/structure/stone_tile/block{ dir = 1 @@ -285,7 +285,7 @@ start_on = 1 }, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "wS" = ( /turf/open/misc/dirt/jungle/dark{ planetary_atmos = 0; @@ -326,7 +326,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/item/clothing/mask/gas, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "AH" = ( /obj/effect/turf_decal/trimline/brown/corner, /turf/open/floor/plating/rust, @@ -345,11 +345,11 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/item/clothing/mask/gas/tiki_mask/yalp_elor, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "AY" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "Bv" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/brown/line, @@ -405,7 +405,7 @@ /area/centcom/heretic_sacrifice/ash) "En" = ( /turf/closed/indestructible/fakedoor/maintenance, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "ER" = ( /turf/open/misc/ironsand, /area/centcom/heretic_sacrifice/rust) @@ -543,7 +543,7 @@ start_on = 1 }, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "Nh" = ( /obj/effect/turf_decal/trimline/brown/line{ dir = 1 @@ -589,7 +589,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/item/clothing/under/color/grey/ancient, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "Pl" = ( /obj/effect/turf_decal/weather/dirt{ dir = 6 @@ -712,9 +712,9 @@ "Zw" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/landmark/heretic/knock, +/obj/effect/landmark/heretic/lock, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "ZA" = ( /turf/closed/indestructible/riveted/boss, /area/centcom/heretic_sacrifice/ash) diff --git a/_maps/templates/lazy_templates/ninja_den.dmm b/_maps/templates/lazy_templates/ninja_den.dmm index 40efeb77e7f207..1f728350714b0e 100644 --- a/_maps/templates/lazy_templates/ninja_den.dmm +++ b/_maps/templates/lazy_templates/ninja_den.dmm @@ -877,7 +877,7 @@ /turf/open/floor/iron/showroomfloor, /area/centcom/central_command_areas/holding) "uw" = ( -/mob/living/simple_animal/bot/medbot/stationary{ +/mob/living/basic/bot/medbot/stationary{ desc = "A little medical robot. You can make out the word \"sincerity\" on its chassis."; name = "Hijikata"; radio_key = null @@ -1476,7 +1476,7 @@ /turf/open/floor/iron/cafeteria, /area/centcom/central_command_areas/holding) "II" = ( -/mob/living/simple_animal/bot/medbot/stationary{ +/mob/living/basic/bot/medbot/stationary{ desc = "When engaged in combat, the vanquishing of thine enemy can be the warrior's only concern."; name = "Momo"; radio_key = null @@ -2052,7 +2052,7 @@ /turf/open/floor/carpet/black, /area/centcom/central_command_areas/holding) "Wm" = ( -/mob/living/simple_animal/bot/medbot/stationary{ +/mob/living/basic/bot/medbot/stationary{ desc = "When engaged in combat, the vanquishing of thine enemy can be the warrior's only concern."; name = "Hattori"; radio_key = null diff --git a/_maps/templates/lazy_templates/nukie_base.dmm b/_maps/templates/lazy_templates/nukie_base.dmm index d6e8dcfc6078c2..2168a5f29bc3b4 100644 --- a/_maps/templates/lazy_templates/nukie_base.dmm +++ b/_maps/templates/lazy_templates/nukie_base.dmm @@ -147,7 +147,7 @@ "bW" = ( /obj/machinery/door/poddoor/shuttledock{ checkdir = 1; - name = "Syndicate Blast Door"; + name = "Symphionia Blast Door"; turftype = /turf/open/misc/asteroid/snow }, /turf/open/floor/plating, @@ -320,6 +320,10 @@ "dI" = ( /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 }, @@ -804,7 +808,7 @@ }, /obj/item/pipe_dispenser{ desc = "A device used to rapidly pipe things. This one has a curious abundance of warning labels."; - name = "Syndicate Rapid Pipe Dispenser (RPD)"; + name = "Symphionia Rapid Pipe Dispenser (RPD)"; pixel_y = -3 }, /obj/item/flamethrower/full, @@ -839,7 +843,7 @@ "jh" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ chamber_id = "nukiebase"; - desc = "Has a valve and pump attached to it. Slightly more menacing than Nanotrasen's standard."; + desc = "Has a valve and pump attached to it. Slightly more menacing than Symphionia's standard."; dir = 1; name = "syndicate air injector" }, @@ -852,6 +856,10 @@ "jq" = ( /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 }, @@ -1450,7 +1458,7 @@ /obj/docking_port/stationary{ dwidth = 25; height = 50; - name = "Syndicate Auxiliary Shuttle Dock"; + name = "Symphionia Auxiliary Shuttle Dock"; shuttle_id = "emergency_syndicate"; width = 50 }, @@ -1468,7 +1476,7 @@ "qK" = ( /obj/machinery/computer/atmos_control/noreconnect{ atmos_chambers = list("nukiebase"="Burn Chamber"); - desc = "Used to monitor the Syndicate Ordnance Laboratory's burn chamber."; + desc = "Used to monitor the Symphionia Ordnance Laboratory's burn chamber."; dir = 1; name = "Ordnance Chamber Monitor" }, diff --git a/_maps/templates/lazy_templates/wizard_den.dmm b/_maps/templates/lazy_templates/wizard_den.dmm index ddec3df365ca21..8c2ad8d2153909 100644 --- a/_maps/templates/lazy_templates/wizard_den.dmm +++ b/_maps/templates/lazy_templates/wizard_den.dmm @@ -362,7 +362,7 @@ /obj/effect/turf_decal/stripes{ dir = 1 }, -/mob/living/simple_animal/bot/medbot/mysterious{ +/mob/living/basic/bot/medbot/mysterious{ desc = "If you don't accidentally blow yourself up from time to time you're not really a wizard anyway."; faction = list("neutral","silicon","creature"); name = "Nobody's Perfect" diff --git a/_maps/tramstation.json b/_maps/tramstation.json index e707639ebd7227..54e8111df205cf 100644 --- a/_maps/tramstation.json +++ b/_maps/tramstation.json @@ -4,7 +4,7 @@ "map_path": "map_files/tramstation", "map_file": "tramstation.dmm", "shuttles": { - "cargo": "cargo_skyrat", + "cargo": "cargo_nova", "ferry": "ferry_fancy", "whiteship": "whiteship_tram", "emergency": "emergency_tram" diff --git a/_maps/virtual_domains/README.md b/_maps/virtual_domains/README.md index a02d43e1575eeb..6e9abc65568252 100644 --- a/_maps/virtual_domains/README.md +++ b/_maps/virtual_domains/README.md @@ -1,32 +1,33 @@ # Making new virtual domains -## From scratch - -1. Create a new map using TGM format. It can be any size, but please, consider limiting to 75x75 max. -2. Ensure that the map has ONE tile marked with the safehouse bottom left landmark. If you're using modular safehouses, it will need to be a 7x6 area. -4. Provide a way for players to enter your new map via the north door, which is 4th tile over. -5. Enclose your area with a single wall binary closed wall. - -## From an existing map - +## REQUIRED: +1. One way that the encrypted cache can spawn. This can be from a mob drop, a landmark (place a few, it'll pick one), or a signable landmark if you have a points system. +2. Place a virtual domain baseturf helper in each area. +3. If you're using modular safehouses, ensure that the map has ONE tile marked with the safehouse modular map loader (and set the KEY). it will need an open 7x6 area. +4. Placing a safehouse area is redundant, but it will ensure there is power in the starting safehouse. +5. Create the dm file that defines the map qualities. You can use the existing ones as a template. + +## Converting an existing map 1. Create a new map using the existing map's size - give yourself enough room to enclose it with a binary wall. There's no need for any space outside of it, so ensure that it fits and is enclosed, nothing outside of this. 2. Copy and paste the existing map into it. -3. Find an accessible area for a safehouse, 7x6 - or with a custom, just ensure the necessary landmarks are placed. +3. Find an accessible area for a safehouse, 7x6. 4. Place a bottom left safehouse landmark somewhere on the map to load the safehouse. -## BOTH. -1. You need to have one (1) way that the encrypted cache can spawn. This can be from a mob drop, a landmark (place a few, it'll pick one), or a signable landmark if you have a points system. -2. Make note of the size of the map. Make sure this is in the dm file. -3. Create the dm file that defines the map qualities. Examples are in the bitrunning file. +## Notes +You shouldn't need to fully enclose your map in 15 tiles of binary filler. Using one solid wall should do the trick. -### Notes +For areas, ideally just one on the map and one for the safehouse. Vdoms should never last so long as to need individual area power and atmos unless you're specifically going for a gimmick. -You shouldn't need to fully enclose your map in 15 tiles of binary filler. Using one solid wall should do the trick. +Use modular mob segments! Use modular map segments! Add some variety to your maps! Just make sure you've set your map to have "is_modular" afterwards. Adding some open tile padding around the safehouse is a good touch. About 7 tiles West/East for the visual effect of a larger map. If you want to add prep gear, you can do so within the safehouse's area as long you don't overlap with goal turfs or exit spawners. The top left corner is a good spot for this, with respect for the walls, therefore [1, 1], [1, 2], [1, 3] -You can also create safehouses if you find yourself needing the same gear over and over again. There is a readme for that as well. +You can also create a specific safehouse if you find yourself needing the same gear over and over again. There is a readme for that as well. Boss zones should give players pretty ample space, I've been using a 23x23 minimum area. + +While it's not a hard set rule, 75x75 is the guideline for max size. The main issue is keeping them in the domain for too long. + +You have the option of baking in your own safehouse and ignoring the 7x6 guideline. To do this, you will still need a safehouse landmark and a file to load - even if it's empty. Ensure that you have the necessary landmarks placed that normally go in a safehouse on the map itself. diff --git a/_maps/virtual_domains/abductor_ship.dmm b/_maps/virtual_domains/abductor_ship.dmm new file mode 100644 index 00000000000000..ebb4a042bb97be --- /dev/null +++ b/_maps/virtual_domains/abductor_ship.dmm @@ -0,0 +1,2230 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"bK" = ( +/turf/closed/wall/mineral/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"cp" = ( +/obj/structure/table/abductor, +/obj/item/food/soylentgreen{ + pixel_x = -6; + pixel_y = 5 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"cr" = ( +/obj/item/flashlight/lantern{ + pixel_x = 4; + pixel_y = -8; + light_on = 1 + }, +/obj/item/flashlight/lantern{ + pixel_x = -9; + pixel_y = 8; + light_on = 1 + }, +/turf/template_noop, +/area/virtual_domain/safehouse) +"dM" = ( +/obj/item/storage/medkit/regular, +/obj/item/storage/medkit/regular, +/turf/template_noop, +/area/virtual_domain/safehouse) +"fk" = ( +/obj/effect/mob_spawn/corpse/human/abductor, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"ge" = ( +/turf/template_noop, +/area/virtual_domain/safehouse) +"gF" = ( +/obj/machinery/abductor/pad{ + desc = "A funky looking disc, built into the floor." + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"gO" = ( +/obj/structure/table/abductor, +/obj/item/poster/random_abductor{ + pixel_x = 9; + pixel_y = 3 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"ih" = ( +/obj/structure/table/abductor, +/obj/item/storage/belt/military/abductor{ + pixel_x = 5; + pixel_y = 8 + }, +/obj/item/storage/belt/military/abductor{ + pixel_x = -5; + pixel_y = -1 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"kl" = ( +/obj/structure/table_frame/abductor, +/obj/item/organ/internal/lungs{ + pixel_x = 8; + pixel_y = 7 + }, +/obj/item/shard/plastitanium{ + pixel_x = -8; + pixel_y = 1 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"kt" = ( +/obj/structure/table/abductor, +/obj/item/multitool/abductor{ + pixel_y = 6; + pixel_x = 5 + }, +/obj/item/screwdriver/abductor{ + pixel_y = 8; + pixel_x = -1 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"kN" = ( +/obj/machinery/fat_sucker, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"lC" = ( +/obj/structure/table/abductor, +/obj/item/clothing/head/helmet/abductor{ + pixel_x = -5; + pixel_y = 7 + }, +/obj/item/abductor/silencer{ + pixel_x = 6; + pixel_y = -4 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"lN" = ( +/turf/open/floor/holofloor/hyperspace, +/area/ruin/space/has_grav/powered/virtual_domain) +"lR" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/template_noop, +/area/virtual_domain/safehouse) +"lW" = ( +/obj/machinery/iv_drip, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"mR" = ( +/obj/machinery/abductor/pad, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"nT" = ( +/obj/structure/table/abductor, +/obj/item/food/soylentgreen{ + pixel_x = 4; + pixel_y = -1 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"oL" = ( +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"pL" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/space/basic, +/area/ruin/space/has_grav/powered/virtual_domain) +"pT" = ( +/obj/effect/decal/cleanable/blood/footprints, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"rw" = ( +/obj/structure/table/abductor, +/obj/item/toy/plush/abductor/agent{ + pixel_x = 10; + pixel_y = 8 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"rY" = ( +/obj/modular_map_root/safehouse{ + key = "abductor" + }, +/turf/template_noop, +/area/virtual_domain/safehouse) +"sv" = ( +/obj/structure/table/abductor, +/obj/item/crowbar/abductor, +/obj/item/stock_parts/cell/infinite/abductor{ + pixel_x = 5; + pixel_y = -3 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"to" = ( +/obj/effect/decal/cleanable/molten_object{ + pixel_x = 9; + pixel_y = 7 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"uk" = ( +/obj/structure/table/abductor, +/obj/item/wrench/abductor{ + pixel_x = 2; + pixel_y = 7 + }, +/obj/item/wirecutters/abductor{ + pixel_x = -3; + pixel_y = 4 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"uw" = ( +/obj/structure/bed/abductor, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"ux" = ( +/obj/machinery/door/airlock/abductor{ + name = "Command Center"; + locked = 1 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"uD" = ( +/obj/machinery/computer/camera_advanced/abductor, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"vY" = ( +/obj/machinery/door/airlock/abductor{ + name = "Repair Bay" + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"vZ" = ( +/obj/machinery/abductor/gland_dispenser, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"xB" = ( +/turf/closed/indestructible/opsglass, +/area/ruin/space/has_grav/powered/virtual_domain) +"xM" = ( +/obj/effect/decal/cleanable/molten_object{ + pixel_x = -6; + pixel_y = -7 + }, +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"yt" = ( +/obj/effect/decal/cleanable/blood/xtracks, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"zX" = ( +/obj/machinery/abductor/experiment, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"AG" = ( +/obj/item/shell/server, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"Fy" = ( +/obj/effect/decal/cleanable/molten_object/large{ + pixel_x = -5; + pixel_y = 14 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"GX" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"IC" = ( +/obj/structure/table/abductor, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"JC" = ( +/obj/item/organ/external/tail/cat, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"JR" = ( +/obj/machinery/door/airlock/abductor{ + name = "Experimentation Lab" + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"JU" = ( +/obj/structure/closet/abductor, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"KK" = ( +/obj/structure/bed/abductor, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"KX" = ( +/turf/closed/indestructible/binary, +/area/space) +"Lz" = ( +/obj/structure/table/abductor, +/obj/item/melee/baton/abductor{ + desc = "Even aliens can see the use of a good old-fashioned beating stick."; + pixel_x = 6; + pixel_y = -5 + }, +/obj/item/gun/energy/shrink_ray{ + pixel_x = -5; + pixel_y = 7 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"Mr" = ( +/obj/machinery/chem_dispenser/abductor, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"MC" = ( +/obj/item/kirbyplants/photosynthetic, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"Ne" = ( +/obj/machinery/abductor/console, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"NW" = ( +/obj/structure/server, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"PB" = ( +/obj/item/organ/external/antennae, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"Qp" = ( +/turf/template_noop, +/area/space) +"QC" = ( +/obj/structure/chair/comfy/teal{ + dir = 8 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"Rd" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"Rg" = ( +/obj/structure/table/abductor, +/obj/item/ammo_box/magazine/smgm45, +/obj/item/ammo_box/magazine/smgm45{ + pixel_x = 9; + pixel_y = 3 + }, +/obj/item/gun/ballistic/automatic/c20r/unrestricted{ + pixel_x = -5; + pixel_y = -5 + }, +/turf/template_noop, +/area/virtual_domain/safehouse) +"RI" = ( +/obj/machinery/door/airlock/abductor, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"Sd" = ( +/obj/machinery/recharge_station, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"Ub" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"Uf" = ( +/obj/item/flashlight/seclite{ + pixel_x = 9; + pixel_y = -11 + }, +/obj/item/clothing/suit/armor/vest/alt{ + pixel_x = 10; + pixel_y = 8 + }, +/obj/item/clothing/suit/armor/vest/alt{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/clothing/suit/armor/vest/alt{ + pixel_x = 2; + pixel_y = -2 + }, +/turf/template_noop, +/area/virtual_domain/safehouse) +"Us" = ( +/obj/structure/table/abductor, +/obj/item/abductor/mind_device{ + desc = "Just holding this makes your head ache."; + pixel_x = 3 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"UX" = ( +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"Vl" = ( +/obj/machinery/harvester, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"VE" = ( +/obj/structure/table/abductor, +/obj/item/storage/box/alienhandcuffs, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"VY" = ( +/obj/effect/mob_spawn/corpse/human/abductor{ + pixel_x = 9; + pixel_y = -5 + }, +/obj/effect/decal/cleanable/xenoblood, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"We" = ( +/obj/structure/table/abductor, +/obj/item/dualsaber/green{ + pixel_x = -5; + pixel_y = 2 + }, +/obj/item/gun/ballistic/automatic/c20r/unrestricted{ + pixel_x = 8; + pixel_y = -6 + }, +/turf/template_noop, +/area/virtual_domain/safehouse) +"Wk" = ( +/obj/structure/table/abductor, +/obj/item/weldingtool/abductor, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"WS" = ( +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"XU" = ( +/obj/effect/decal/cleanable/xenoblood/xgibs/body, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"Yq" = ( +/obj/effect/decal/cleanable/xenoblood/xsplatter, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"YV" = ( +/turf/closed/indestructible/alien, +/area/ruin/space/has_grav/powered/virtual_domain) +"ZM" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) + +(1,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(2,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(3,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(4,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(5,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(6,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +KX +KX +YV +YV +YV +YV +YV +YV +YV +YV +YV +YV +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(7,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +KX +KX +YV +YV +YV +YV +kN +lW +uw +IC +IC +uw +lW +kN +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(8,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +KX +KX +YV +YV +YV +YV +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(9,1,1) = {" +Qp +Qp +Qp +KX +KX +KX +KX +KX +KX +YV +YV +YV +YV +WS +WS +WS +WS +WS +WS +WS +WS +WS +oL +WS +WS +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(10,1,1) = {" +Qp +Qp +KX +KX +lN +lN +lN +lN +YV +YV +YV +YV +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(11,1,1) = {" +Qp +KX +KX +lN +lN +lN +lN +YV +YV +YV +YV +WS +WS +WS +MC +YV +YV +YV +WS +WS +YV +YV +YV +MC +WS +WS +WS +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +"} +(12,1,1) = {" +KX +KX +lN +lN +lN +lN +YV +YV +YV +YV +lW +WS +WS +YV +YV +YV +bK +YV +WS +WS +YV +YV +YV +YV +YV +WS +WS +lW +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +"} +(13,1,1) = {" +KX +lN +lN +lN +lN +YV +YV +YV +YV +WS +WS +WS +YV +YV +bK +bK +YV +YV +WS +WS +YV +YV +YV +YV +YV +YV +WS +WS +WS +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +"} +(14,1,1) = {" +KX +lN +lN +lN +YV +YV +YV +YV +WS +WS +WS +YV +YV +JU +yt +VY +YV +MC +WS +WS +MC +YV +ih +Yq +JU +YV +YV +UX +WS +WS +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +"} +(15,1,1) = {" +KX +lN +lN +lN +YV +bK +YV +UX +WS +WS +YV +YV +Wk +WS +WS +WS +YV +WS +WS +WS +WS +YV +rw +WS +WS +WS +YV +YV +Vl +WS +MC +YV +bK +YV +YV +KX +KX +Qp +Qp +"} +(16,1,1) = {" +KX +lN +lN +lN +YV +bK +YV +WS +WS +YV +YV +uk +WS +oL +YV +YV +WS +WS +WS +WS +WS +WS +YV +YV +WS +WS +JU +YV +YV +YV +YV +YV +YV +bK +YV +YV +KX +Qp +Qp +"} +(17,1,1) = {" +KX +lN +lN +lN +YV +bK +YV +WS +WS +YV +JU +WS +WS +WS +vY +WS +WS +WS +WS +WS +WS +WS +WS +RI +WS +WS +XU +gO +YV +YV +YV +AG +YV +YV +bK +YV +KX +Qp +Qp +"} +(18,1,1) = {" +KX +lN +lN +lN +YV +YV +YV +MC +Vl +YV +UX +WS +MC +YV +YV +WS +WS +WS +WS +WS +WS +WS +WS +YV +YV +JU +fk +lC +YV +YV +NW +WS +NW +YV +bK +YV +KX +Qp +Qp +"} +(19,1,1) = {" +KX +lN +lN +lN +pL +YV +YV +YV +YV +YV +YV +YV +YV +MC +WS +WS +ge +ge +ge +ge +ge +rY +WS +WS +MC +YV +YV +YV +YV +YV +NW +WS +NW +YV +bK +YV +KX +Qp +Qp +"} +(20,1,1) = {" +KX +lN +lN +pL +pL +uD +ZM +ZM +WS +Rd +MC +WS +WS +WS +WS +WS +ge +ge +ge +ge +ge +ge +WS +WS +WS +WS +WS +WS +YV +YV +xB +xB +xB +YV +bK +YV +KX +Qp +Qp +"} +(21,1,1) = {" +KX +lN +lN +pL +Ne +WS +WS +WS +WS +ux +WS +WS +WS +WS +WS +WS +ge +ge +Uf +cr +ge +ge +WS +WS +WS +WS +WS +WS +WS +YV +WS +WS +WS +YV +bK +YV +KX +Qp +Qp +"} +(22,1,1) = {" +KX +lN +lN +pL +Lz +WS +WS +WS +WS +Rd +WS +WS +WS +WS +WS +WS +ge +ge +We +Rg +ge +ge +WS +WS +WS +oL +WS +WS +WS +RI +WS +oL +WS +YV +bK +YV +KX +Qp +Qp +"} +(23,1,1) = {" +KX +lN +lN +pL +Ne +WS +WS +WS +WS +ux +WS +WS +WS +WS +WS +WS +ge +ge +ge +ge +ge +ge +WS +WS +WS +WS +WS +WS +WS +YV +WS +WS +WS +YV +bK +YV +KX +Qp +Qp +"} +(24,1,1) = {" +KX +lN +lN +pL +pL +uD +Ub +Ub +WS +Rd +MC +WS +WS +WS +WS +WS +ge +ge +ge +ge +dM +ge +WS +WS +WS +WS +WS +WS +YV +YV +xB +xB +xB +YV +bK +YV +KX +Qp +Qp +"} +(25,1,1) = {" +KX +lN +lN +lN +pL +YV +YV +YV +YV +YV +YV +YV +YV +MC +WS +WS +ge +ge +ge +ge +ge +lR +WS +WS +MC +YV +YV +YV +YV +bK +NW +WS +NW +YV +bK +YV +KX +Qp +Qp +"} +(26,1,1) = {" +KX +lN +lN +lN +YV +YV +YV +MC +uw +YV +Mr +JC +uw +YV +YV +WS +WS +WS +WS +WS +WS +WS +WS +YV +YV +MC +xM +cp +YV +bK +NW +WS +NW +YV +bK +YV +KX +Qp +Qp +"} +(27,1,1) = {" +KX +lN +lN +lN +YV +bK +YV +UX +WS +YV +uw +WS +WS +pT +JR +WS +WS +WS +WS +WS +WS +WS +WS +RI +WS +WS +WS +Us +YV +bK +bK +AG +YV +YV +bK +YV +KX +Qp +Qp +"} +(28,1,1) = {" +KX +lN +lN +lN +YV +bK +YV +WS +WS +YV +YV +mR +WS +WS +YV +YV +WS +WS +WS +WS +WS +WS +YV +YV +Fy +WS +IC +YV +YV +YV +YV +YV +YV +bK +YV +YV +KX +Qp +Qp +"} +(29,1,1) = {" +KX +lN +lN +lN +YV +bK +YV +WS +WS +WS +YV +YV +kl +PB +WS +KK +YV +WS +WS +WS +WS +YV +VE +to +oL +QC +YV +YV +UX +WS +MC +YV +bK +YV +YV +KX +KX +Qp +Qp +"} +(30,1,1) = {" +KX +lN +lN +lN +YV +YV +YV +YV +WS +WS +WS +YV +YV +uw +MC +vZ +YV +MC +WS +WS +WS +YV +nT +WS +MC +YV +YV +WS +WS +WS +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +"} +(31,1,1) = {" +KX +lN +lN +lN +lN +YV +YV +YV +YV +gF +WS +WS +YV +YV +YV +YV +YV +YV +WS +WS +YV +YV +YV +YV +YV +YV +WS +WS +gF +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +"} +(32,1,1) = {" +KX +KX +lN +lN +lN +lN +YV +YV +YV +YV +lW +oL +WS +YV +YV +YV +bK +YV +WS +WS +YV +bK +YV +YV +YV +WS +WS +lW +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +"} +(33,1,1) = {" +Qp +KX +KX +lN +lN +lN +lN +YV +YV +YV +YV +WS +WS +WS +MC +YV +YV +YV +WS +WS +YV +YV +YV +MC +WS +WS +oL +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +"} +(34,1,1) = {" +Qp +Qp +KX +KX +lN +lN +lN +lN +YV +YV +YV +YV +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(35,1,1) = {" +Qp +Qp +Qp +KX +KX +KX +KX +KX +KX +YV +YV +YV +YV +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(36,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +KX +KX +YV +YV +YV +YV +zX +WS +GX +WS +WS +WS +WS +GX +WS +zX +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(37,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +KX +KX +YV +YV +YV +YV +Sd +sv +Sd +WS +WS +Sd +kt +Sd +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(38,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +KX +KX +YV +YV +YV +YV +YV +YV +YV +YV +YV +YV +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(39,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(40,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(41,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(42,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(43,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(44,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} diff --git a/_maps/virtual_domains/ancientmilsim_nova.dmm b/_maps/virtual_domains/ancientmilsim_nova.dmm new file mode 100644 index 00000000000000..15a7366f67afbc --- /dev/null +++ b/_maps/virtual_domains/ancientmilsim_nova.dmm @@ -0,0 +1,4856 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"al" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/iron/smooth_half, +/area/virtual_domain/ancient_milsim/atrium) +"aE" = ( +/obj/effect/baseturf_helper/virtual_domain/ancient_milsim, +/turf/closed/wall/r_wall, +/area/virtual_domain/ancient_milsim/janitor) +"aG" = ( +/obj/machinery/door/poddoor/preopen{ + id = "cin_place" + }, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/snpc_garage) +"aO" = ( +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/janitor) +"aP" = ( +/obj/structure/trash_pile, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/loot_camp) +"aR" = ( +/obj/structure/closet/crate/secure, +/obj/item/keycard/blue, +/obj/machinery/light/small/dim/directional/north, +/obj/item/construction/rld/mini, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/carrier) +"ba" = ( +/obj/machinery/light/directional/east, +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/smooth_corner{ + dir = 8 + }, +/area/virtual_domain/ancient_milsim/atrium) +"bd" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/turf/open/misc/dirt/planet, +/area/virtual_domain/safehouse) +"bm" = ( +/obj/machinery/light/floor, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/loot_camp) +"bw" = ( +/obj/item/storage/box/utensils, +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"bB" = ( +/obj/structure/inflatable{ + color = "#556B2F"; + opacity = 1 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/loot_camp) +"bM" = ( +/obj/item/stack/rods, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/snpc_ground) +"bN" = ( +/obj/structure/railing/corner/end/flip, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/snpc_ground) +"cb" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/snpc_ground) +"co" = ( +/obj/item/pen/fourcolor, +/turf/open/floor/iron/smooth, +/area/virtual_domain/ancient_milsim/atrium) +"cp" = ( +/obj/structure/decorative/shelf/soda_milk{ + density = 1 + }, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/maintenance) +"cx" = ( +/turf/closed/wall/r_wall, +/area/virtual_domain/ancient_milsim/snpc_cave) +"cF" = ( +/obj/structure/sign/poster/random/directional/west, +/obj/structure/rack/gunrack, +/obj/item/gun/ballistic/automatic/wylom, +/obj/item/gun/ballistic/automatic/miecz, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_hallway) +"cV" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/janitor) +"dd" = ( +/turf/closed/wall/r_wall, +/area/virtual_domain/ancient_milsim/hallway) +"dh" = ( +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/snpc_cave) +"dC" = ( +/turf/open/floor/iron/smooth, +/area/virtual_domain/ancient_milsim/hallway) +"dH" = ( +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/iron/smooth, +/area/virtual_domain/ancient_milsim/hallway) +"ea" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_garage) +"ec" = ( +/obj/effect/spawner/random/trash/mopbucket, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_garage) +"ed" = ( +/obj/effect/baseturf_helper/virtual_domain/ancient_milsim, +/obj/machinery/door/poddoor/ancient_milsim{ + id = "engagement_control" + }, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/snpc_ground) +"eh" = ( +/obj/structure/flippedtable{ + dir = 8 + }, +/obj/structure/flippedtable, +/obj/structure/barricade/sandbags, +/turf/open/floor/iron/smooth, +/area/virtual_domain/ancient_milsim/atrium) +"ek" = ( +/obj/item/grenade/smokebomb, +/turf/open/floor/iron/smooth_large, +/area/virtual_domain/ancient_milsim/atrium) +"er" = ( +/turf/closed/indestructible/rock, +/area/virtual_domain) +"et" = ( +/obj/structure/chair/stool/bar/directional/south, +/obj/effect/mob_spawn/ghost_role/human/ancient_milsim, +/turf/open/floor/carpet/red, +/area/virtual_domain/ancient_milsim/snpc_bar) +"eC" = ( +/obj/effect/landmark/bitrunning/mob_segment, +/obj/structure/chair/stool/directional/south, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/loot_camp) +"eE" = ( +/obj/effect/spawner/random/trash/box, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_garage) +"eF" = ( +/turf/closed/wall/r_wall, +/area/virtual_domain/ancient_milsim/snpc_garage) +"eQ" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/obj/machinery/door/poddoor/ancient_milsim{ + id = "engagement_control" + }, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/snpc_ground) +"eR" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/janitor) +"fk" = ( +/obj/machinery/light/floor, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/maintenance) +"ft" = ( +/obj/machinery/door/airlock/multi_tile/glass, +/turf/open/floor/iron/smooth_large, +/area/virtual_domain/ancient_milsim/hallway) +"fu" = ( +/obj/machinery/door/airlock/multi_tile/metal{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_garage) +"fJ" = ( +/obj/effect/baseturf_helper/virtual_domain/ancient_milsim, +/turf/closed/indestructible/reinforced, +/area/virtual_domain/ancient_milsim/snpc_reward) +"gb" = ( +/obj/item/keycard/yellow, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/loot_camp) +"go" = ( +/turf/closed/wall/r_wall, +/area/virtual_domain/ancient_milsim/janitor) +"gE" = ( +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_garage) +"gL" = ( +/obj/structure/table, +/obj/item/grenade/chem_grenade/clf3, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/janitor) +"gP" = ( +/obj/item/storage/medkit/civil_defense/stocked, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/maintenance) +"hj" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/loot_camp) +"ho" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/snpc_ground) +"hp" = ( +/turf/open/floor/iron/smooth_corner{ + dir = 8 + }, +/area/virtual_domain/ancient_milsim/atrium) +"hy" = ( +/obj/machinery/door/poddoor/ancient_milsim{ + id = "engagement_control" + }, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/snpc_ground) +"hH" = ( +/obj/structure/table, +/obj/item/storage/box/utensils, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"hJ" = ( +/obj/structure/table_frame, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"hO" = ( +/obj/machinery/conveyor/auto{ + dir = 4; + id = "sol_invasion" + }, +/obj/machinery/door/window, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/janitor) +"hZ" = ( +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/entrance) +"ie" = ( +/obj/item/paper/crumpled, +/turf/open/floor/iron/smooth, +/area/virtual_domain/ancient_milsim/atrium) +"im" = ( +/obj/item/grown/log, +/obj/item/grown/log, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/loot_camp) +"iq" = ( +/turf/closed/wall/r_wall, +/area/virtual_domain/ancient_milsim/medbay) +"ir" = ( +/obj/structure/barricade/sandbags, +/turf/open/floor/iron/smooth, +/area/virtual_domain/ancient_milsim/hallway) +"iw" = ( +/obj/item/paper, +/turf/open/floor/iron/smooth, +/area/virtual_domain/ancient_milsim/atrium) +"iz" = ( +/obj/structure/table, +/obj/item/storage/medkit/tactical/premium, +/turf/open/floor/iron/white, +/area/virtual_domain/ancient_milsim/medbay) +"iI" = ( +/obj/machinery/dryer{ + pixel_y = -26 + }, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_toilet) +"iO" = ( +/obj/machinery/door/airlock/multi_tile/glass, +/turf/open/floor/iron/smooth_large, +/area/virtual_domain/ancient_milsim/atrium) +"iU" = ( +/obj/item/paper_bin, +/turf/open/floor/iron/smooth, +/area/virtual_domain/ancient_milsim/atrium) +"iW" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"iZ" = ( +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/snpc_garage) +"jc" = ( +/obj/structure/table, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"jn" = ( +/turf/closed/wall/r_wall, +/area/virtual_domain/ancient_milsim/loot_camp) +"jS" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_hallway) +"jV" = ( +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/janitor) +"ka" = ( +/obj/machinery/door/airlock/public, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_toilet) +"ke" = ( +/obj/item/storage/toolbox/syndicate, +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/loot_camp) +"kh" = ( +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/iron/smooth_half, +/area/virtual_domain/ancient_milsim/atrium) +"ki" = ( +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/loot_camp) +"kv" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_garage) +"kC" = ( +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/loot_camp) +"kJ" = ( +/obj/structure/chair/stool/directional/west, +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/loot_camp) +"kL" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/glass/bottle/champagne, +/turf/open/floor/iron/smooth_large, +/area/virtual_domain/ancient_milsim/snpc_reward) +"kS" = ( +/obj/structure/sign/flag/terragov/directional/south, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/entrance) +"kT" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/iron/smooth, +/area/virtual_domain/ancient_milsim/hallway) +"kX" = ( +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/snpc_cave) +"lc" = ( +/obj/item/storage/toolbox/mechanical, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_garage) +"lf" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/janitor) +"lr" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/carpet/red, +/area/virtual_domain/ancient_milsim/snpc_bar) +"ls" = ( +/obj/effect/baseturf_helper/virtual_domain/ancient_milsim, +/turf/closed/wall/r_wall, +/area/virtual_domain/ancient_milsim/snpc_cave) +"lt" = ( +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"lu" = ( +/obj/machinery/door/poddoor/ancient_milsim{ + id = "engagement_control" + }, +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/entrance) +"ly" = ( +/obj/machinery/light/directional/south, +/obj/structure/barricade/sandbags, +/turf/open/floor/iron/smooth_corner{ + dir = 4 + }, +/area/virtual_domain/ancient_milsim/atrium) +"lz" = ( +/obj/machinery/door/airlock/multi_tile/glass, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"lE" = ( +/turf/template_noop, +/area/virtual_domain/safehouse) +"lG" = ( +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/loot_camp) +"lX" = ( +/obj/structure/table/optable, +/obj/item/surgical_processor, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"mi" = ( +/obj/effect/mob_spawn/corpse/human/cin_soldier, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/loot_camp) +"mu" = ( +/obj/item/knife/combat, +/obj/structure/table/wood, +/turf/open/floor/carpet/red, +/area/virtual_domain/ancient_milsim/snpc_bar) +"mZ" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_garage) +"ne" = ( +/obj/structure/toilet, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_toilet) +"no" = ( +/obj/effect/spawner/structure/window/survival_pod, +/obj/machinery/door/poddoor/shutters/preopen, +/obj/effect/mapping_helpers/damaged_window, +/turf/open/floor/iron/dark/smooth_large, +/area/virtual_domain/ancient_milsim/carrier) +"nu" = ( +/turf/template_noop, +/area/template_noop) +"nw" = ( +/obj/effect/spawner/random/trash/box, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_garage) +"nA" = ( +/obj/machinery/door/poddoor/ancient_milsim{ + id = "engagement_control" + }, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/entrance) +"nH" = ( +/obj/item/storage/barricade, +/obj/structure/closet/crate/cardboard, +/obj/item/storage/barricade, +/obj/item/storage/barricade, +/obj/machinery/button/door/directional/north{ + id = "cin_place" + }, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_garage) +"nM" = ( +/obj/item/storage/box/utensils, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"nQ" = ( +/obj/machinery/light/floor, +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/loot_camp) +"nZ" = ( +/obj/structure/closet/crate/secure/weapon, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo, +/obj/item/storage/toolbox/ammobox/full/mosin, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/loot_camp) +"ob" = ( +/obj/effect/spawner/random/vending/snackvend, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_hallway) +"oe" = ( +/obj/machinery/light/directional/west, +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron/smooth_corner, +/area/virtual_domain/ancient_milsim/atrium) +"oj" = ( +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/maintenance) +"ol" = ( +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/carrier) +"or" = ( +/obj/effect/baseturf_helper/virtual_domain/ancient_milsim, +/turf/closed/wall/r_wall, +/area/virtual_domain/ancient_milsim/snpc_bar) +"ot" = ( +/obj/item/paper, +/turf/open/floor/iron/smooth_half, +/area/virtual_domain/ancient_milsim/atrium) +"oz" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_garage) +"oJ" = ( +/turf/closed/wall/r_wall, +/area/virtual_domain/ancient_milsim/snpc_toilet) +"oU" = ( +/obj/structure/chair/comfy/shuttle, +/obj/machinery/computer{ + dir = 1; + name = "vehicle console"; + icon_screen = "shuttle"; + icon = 'modular_nova/modules/advanced_shuttles/icons/computer.dmi'; + icon_state = "intercom"; + desc = "An armored vehicle control computer. Doesn't work anymore... who would've thought."; + density = 0; + pixel_y = -32 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/carrier) +"pn" = ( +/obj/structure/fluff/fokoff_sign, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/snpc_ground) +"pN" = ( +/obj/machinery/iv_drip/health_station/directional/south, +/turf/open/floor/iron/white, +/area/virtual_domain/ancient_milsim/medbay) +"pY" = ( +/obj/item/ammo_box/c35sol, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/janitor) +"qn" = ( +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/snpc_ground) +"qp" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/virtual_domain/safehouse) +"qr" = ( +/obj/effect/baseturf_helper/virtual_domain/ancient_milsim, +/turf/closed/wall/r_wall, +/area/virtual_domain/ancient_milsim/atrium) +"qs" = ( +/obj/machinery/light/directional/south, +/obj/structure/barricade/sandbags, +/turf/open/floor/iron/smooth_corner{ + dir = 1 + }, +/area/virtual_domain/ancient_milsim/atrium) +"qA" = ( +/obj/structure/fence{ + dir = 4 + }, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/loot_camp) +"qB" = ( +/obj/effect/baseturf_helper/virtual_domain/ancient_milsim, +/turf/closed/wall/r_wall, +/area/virtual_domain/ancient_milsim/maintenance) +"qC" = ( +/obj/structure/flora/bush/ferny/style_random, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/loot_camp) +"qV" = ( +/obj/machinery/vending/medical, +/turf/open/floor/iron/white, +/area/virtual_domain/ancient_milsim/medbay) +"rb" = ( +/obj/effect/spawner/random/trash/janitor_supplies, +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/loot_camp) +"rl" = ( +/obj/structure/table, +/obj/machinery/light/cold/directional/south, +/obj/item/tape/ruins/ancient_milsim/devlog_two, +/turf/open/floor/iron/white, +/area/virtual_domain/ancient_milsim/medbay) +"rx" = ( +/obj/machinery/iv_drip, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"rB" = ( +/obj/effect/spawner/structure/window/reinforced/no_firelock, +/obj/machinery/door/poddoor/preopen{ + id = "cin_place" + }, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/snpc_hallway) +"rO" = ( +/obj/structure/rack/shelf, +/obj/item/gun/ballistic/revolver/shotgun_revolver, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_hallway) +"rT" = ( +/obj/effect/spawner/structure/window/reinforced/no_firelock, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"sa" = ( +/obj/machinery/door/puzzle/keycard/blue_required, +/turf/open/floor/iron/smooth_large, +/area/virtual_domain/ancient_milsim/snpc_exit) +"ss" = ( +/obj/machinery/light/floor, +/obj/structure/table, +/obj/item/ammo_box/c310_cargo_box/piercing, +/obj/item/ammo_box/c310_cargo_box/piercing, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/loot_camp) +"sG" = ( +/turf/open/floor/iron/smooth_large, +/area/virtual_domain/ancient_milsim/snpc_reward) +"sS" = ( +/obj/item/grown/log, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/loot_camp) +"sV" = ( +/obj/item/stack/sheet/mineral/sandbags/fifty, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"sX" = ( +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"td" = ( +/obj/item/storage/box/utensils, +/obj/structure/table/wood, +/obj/item/ammo_box/c310_cargo_box/piercing{ + pixel_x = 6; + pixel_y = 9 + }, +/obj/item/ammo_box/c27_54cesarzowa/rubber{ + pixel_x = 12 + }, +/turf/open/floor/carpet/red, +/area/virtual_domain/ancient_milsim/snpc_bar) +"te" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/structure/sign/flag/nri/directional/east, +/turf/open/floor/carpet/red, +/area/virtual_domain/ancient_milsim/snpc_bar) +"tg" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_hallway) +"th" = ( +/obj/machinery/recycler/deathtrap{ + dir = 8 + }, +/obj/machinery/conveyor/auto{ + dir = 4; + id = "sol_invasion" + }, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/janitor) +"tA" = ( +/obj/item/surgery_tray/full/deployed, +/turf/open/floor/iron/white, +/area/virtual_domain/ancient_milsim/medbay) +"tH" = ( +/obj/item/ammo_box/c35sol, +/turf/open/floor/iron/smooth, +/area/virtual_domain/ancient_milsim/hallway) +"tI" = ( +/obj/effect/spawner/random/trash/garbage, +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/loot_camp) +"tU" = ( +/obj/structure/fluff/fokoff_sign, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/loot_camp) +"ue" = ( +/obj/machinery/biogenerator/food_replicator{ + biomass = 1500 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/loot_camp) +"uf" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/carrier) +"uq" = ( +/obj/structure/chair/stool/directional/north, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/loot_camp) +"uy" = ( +/obj/structure/sign/departments/science/alt/directional/north, +/obj/structure/sign/flag/nri/directional/north, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/entrance) +"uz" = ( +/turf/closed/indestructible/reinforced, +/area/virtual_domain/ancient_milsim/snpc_exit) +"uC" = ( +/obj/effect/baseturf_helper/virtual_domain/ancient_milsim, +/turf/closed/wall/r_wall, +/area/virtual_domain/ancient_milsim/snpc_garage) +"uE" = ( +/obj/effect/spawner/random/trash/caution_sign, +/obj/machinery/light/broken/directional/south, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_garage) +"uM" = ( +/obj/item/minespawner/ancient_milsim, +/obj/item/minespawner/ancient_milsim, +/obj/item/minespawner/ancient_milsim, +/obj/item/minespawner/ancient_milsim, +/obj/item/minespawner/ancient_milsim, +/obj/structure/closet/crate/cardboard, +/obj/item/minespawner/ancient_milsim, +/obj/item/minespawner/ancient_milsim, +/obj/item/minespawner/ancient_milsim, +/obj/item/minespawner/ancient_milsim, +/obj/item/minespawner/ancient_milsim, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_garage) +"uY" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/maintenance) +"uZ" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/machinery/light/directional/west, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_hallway) +"va" = ( +/turf/open/floor/iron/smooth_large, +/area/virtual_domain/ancient_milsim/hallway) +"vd" = ( +/obj/structure/chair/office, +/turf/open/floor/iron/smooth, +/area/virtual_domain/ancient_milsim/atrium) +"vf" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/machinery/iv_drip/health_station/directional/west, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/carrier) +"vr" = ( +/obj/item/storage/backpack/duffelbag/syndie/c4, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/maintenance) +"vs" = ( +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/snpc_cave) +"vu" = ( +/obj/item/storage/backpack/duffelbag/syndie/c4, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_garage) +"vz" = ( +/obj/structure/flippedtable{ + dir = 4 + }, +/obj/structure/flippedtable, +/obj/structure/barricade/sandbags, +/turf/open/floor/iron/smooth, +/area/virtual_domain/ancient_milsim/atrium) +"vA" = ( +/obj/structure/closet/crate/trashcart/filled, +/obj/item/flamethrower/full/tank, +/obj/item/storage/medkit/civil_defense/stocked, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/loot_camp) +"vL" = ( +/obj/structure/fence, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/loot_camp) +"wh" = ( +/obj/structure/table, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/janitor) +"wr" = ( +/obj/structure/rack/shelf, +/obj/item/ammo_box/magazine/wylom{ + pixel_y = 4; + pixel_x = -8 + }, +/obj/item/ammo_box/magazine/wylom{ + pixel_y = 4; + pixel_x = 4 + }, +/obj/item/ammo_box/magazine/miecz{ + pixel_x = -5; + pixel_y = -9 + }, +/obj/item/ammo_box/magazine/miecz{ + pixel_y = -9 + }, +/obj/item/ammo_box/magazine/miecz{ + pixel_x = 5; + pixel_y = -9 + }, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_hallway) +"ws" = ( +/obj/effect/baseturf_helper/virtual_domain/ancient_milsim, +/turf/template_noop, +/area/virtual_domain/safehouse) +"wv" = ( +/obj/item/tape/ruins/ancient_milsim/devlog_three, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/loot_camp) +"wx" = ( +/turf/open/floor/iron/smooth_corner{ + dir = 1 + }, +/area/virtual_domain/ancient_milsim/atrium) +"wy" = ( +/obj/structure/table/wood, +/obj/item/ammo_box/magazine/lanca, +/obj/item/gun/ballistic/automatic/lanca{ + pixel_y = 6; + pixel_x = 7 + }, +/turf/open/floor/carpet/red, +/area/virtual_domain/ancient_milsim/snpc_bar) +"wz" = ( +/obj/structure/flora/tree/stump, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/loot_camp) +"wQ" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/loot_camp) +"wZ" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/hallway) +"xa" = ( +/obj/structure/closet/crate/freezer/blood, +/obj/item/storage/medkit/civil_defense/stocked, +/obj/item/storage/medkit/frontier/stocked, +/turf/open/floor/iron/white, +/area/virtual_domain/ancient_milsim/medbay) +"xe" = ( +/obj/effect/spawner/random/trash/mopbucket, +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/loot_camp) +"xB" = ( +/obj/effect/spawner/random/trash/garbage, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/loot_camp) +"xS" = ( +/obj/structure/railing{ + dir = 1 + }, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/snpc_ground) +"yd" = ( +/obj/item/inflatable/torn, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/loot_camp) +"yh" = ( +/turf/closed/wall/r_wall, +/area/virtual_domain/ancient_milsim/maintenance) +"yl" = ( +/obj/structure/decorative/shelf/alcohol_assortment{ + density = 1 + }, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/maintenance) +"yn" = ( +/obj/effect/spawner/random/trash/bin, +/turf/open/floor/carpet/red, +/area/virtual_domain/ancient_milsim/snpc_bar) +"yt" = ( +/obj/item/chair, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"yI" = ( +/obj/structure/fence/cut/large{ + dir = 4; + density = 0 + }, +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/loot_camp) +"yV" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/carpet/red, +/area/virtual_domain/ancient_milsim/snpc_bar) +"zf" = ( +/obj/effect/spawner/random/trash/bucket, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_garage) +"zp" = ( +/obj/machinery/door/puzzle/keycard/yellow_required, +/turf/open/floor/iron/smooth_large, +/area/virtual_domain/ancient_milsim/snpc_reward) +"zx" = ( +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/snpc_cave) +"zE" = ( +/obj/machinery/vending/drugs, +/turf/open/floor/iron/white, +/area/virtual_domain/ancient_milsim/medbay) +"zL" = ( +/obj/machinery/light/small/dim/directional/south, +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/snpc_cave) +"Ab" = ( +/obj/structure/table, +/obj/item/folder/documents, +/obj/item/binoculars, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/loot_camp) +"Aw" = ( +/obj/machinery/door/poddoor/ancient_milsim{ + id = "engagement_control" + }, +/turf/open/water/jungle, +/area/virtual_domain/ancient_milsim/snpc_ground) +"AB" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/carpet/red, +/area/virtual_domain/ancient_milsim/snpc_bar) +"AC" = ( +/obj/structure/closet/crate/trashcart/filled, +/obj/item/ammo_box/c35sol, +/obj/item/ammo_box/c35sol, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/janitor) +"AE" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_garage) +"AH" = ( +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_toilet) +"AN" = ( +/obj/structure/bedsheetbin, +/obj/structure/table/wood, +/turf/open/floor/carpet/red, +/area/virtual_domain/ancient_milsim/snpc_bar) +"AR" = ( +/obj/machinery/vending/wardrobe/jani_wardrobe, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/janitor) +"AW" = ( +/turf/open/floor/iron/smooth_large, +/area/virtual_domain/ancient_milsim/snpc_exit) +"AY" = ( +/obj/machinery/conveyor/auto{ + dir = 4; + id = "sol_invasion" + }, +/obj/machinery/door/window, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/janitor) +"Bd" = ( +/obj/structure/chair/stool/bar/directional/south, +/turf/open/floor/carpet/red, +/area/virtual_domain/ancient_milsim/snpc_bar) +"Bg" = ( +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/iron/white, +/area/virtual_domain/ancient_milsim/medbay) +"Bs" = ( +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"BO" = ( +/obj/effect/spawner/random/trash/hobo_squat, +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/loot_camp) +"Cd" = ( +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/snpc_ground) +"Cf" = ( +/obj/machinery/door/airlock/multi_tile/metal{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/virtual_domain/ancient_milsim/medbay) +"Cg" = ( +/obj/item/storage/medkit/frontier/stocked, +/turf/open/floor/iron/white, +/area/virtual_domain/ancient_milsim/medbay) +"Cr" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/janitor) +"Cs" = ( +/obj/structure/railing{ + dir = 9 + }, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/snpc_ground) +"CC" = ( +/turf/open/floor/iron/smooth, +/area/virtual_domain/ancient_milsim/atrium) +"CH" = ( +/obj/structure/flippedtable, +/obj/structure/closet/crate/freezer/blood, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"CJ" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 8 + }, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/virtual_domain/ancient_milsim/atrium) +"CR" = ( +/obj/structure/rack/shelf, +/obj/item/ammo_box/advanced/s12gauge/incendiary{ + pixel_x = -4; + pixel_y = -9 + }, +/obj/item/ammo_box/advanced/s12gauge/flechette{ + pixel_x = -4; + pixel_y = 9 + }, +/obj/item/ammo_box/advanced/s12gauge{ + pixel_x = 6 + }, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_hallway) +"CT" = ( +/obj/structure/table, +/obj/machinery/iv_drip/health_station/directional/north, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/loot_camp) +"CV" = ( +/obj/structure/flippedtable, +/obj/structure/barricade/sandbags, +/turf/open/floor/iron/smooth, +/area/virtual_domain/ancient_milsim/atrium) +"Dd" = ( +/obj/structure/closet/crate/trashcart/filled, +/obj/item/ammo_box/c35sol, +/obj/item/ammo_box/c35sol, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/loot_camp) +"De" = ( +/obj/effect/spawner/random/trash/bin, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_hallway) +"Dk" = ( +/obj/machinery/biogenerator/food_replicator{ + biomass = 1500 + }, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"Do" = ( +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/iron/smooth_large, +/area/virtual_domain/ancient_milsim/snpc_exit) +"Dt" = ( +/obj/item/gun/ballistic/automatic/wylom, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/loot_camp) +"Dy" = ( +/obj/structure/sink/directional/north, +/obj/structure/mirror/directional/south, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_toilet) +"DE" = ( +/turf/open/misc/dirt/planet, +/area/virtual_domain/safehouse) +"DL" = ( +/obj/effect/landmark/bitrunning/cache_spawn, +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/iron/smooth_large, +/area/virtual_domain/ancient_milsim/snpc_reward) +"DN" = ( +/obj/structure/table, +/obj/item/stack/medical/mesh/bloody, +/obj/item/stack/medical/mesh/bloody, +/turf/open/floor/iron/white, +/area/virtual_domain/ancient_milsim/medbay) +"DO" = ( +/turf/open/floor/iron/smooth_corner, +/area/virtual_domain/ancient_milsim/atrium) +"DT" = ( +/obj/structure/flora/tree/jungle/style_random, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/snpc_ground) +"DW" = ( +/obj/item/storage/box/nri_flares, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"Ee" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/water/jungle, +/area/virtual_domain/ancient_milsim/snpc_ground) +"Eg" = ( +/turf/closed/indestructible/reinforced, +/area/virtual_domain/ancient_milsim/snpc_reward) +"Eh" = ( +/obj/machinery/door/poddoor/shutters/preopen, +/turf/open/floor/iron/dark/side, +/area/virtual_domain/ancient_milsim/carrier) +"Ei" = ( +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/iron/smooth_corner, +/area/virtual_domain/ancient_milsim/atrium) +"Ek" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 4 + }, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/virtual_domain/ancient_milsim/atrium) +"El" = ( +/obj/item/keycard/yellow, +/turf/open/floor/iron/smooth, +/area/virtual_domain/ancient_milsim/atrium) +"Ey" = ( +/obj/structure/closet/crate/freezer/blood, +/obj/item/storage/backpack/duffelbag/deforest_medkit/stocked, +/obj/item/storage/medkit/frontier/stocked, +/turf/open/floor/iron/white, +/area/virtual_domain/ancient_milsim/medbay) +"EB" = ( +/obj/machinery/door/airlock/survival_pod/glass, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/carrier) +"ED" = ( +/obj/structure/closet/crate/secure, +/obj/item/keycard/blue, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/snpc_cave) +"EE" = ( +/obj/structure/table, +/obj/item/food/cake/birthday, +/turf/open/floor/iron/smooth_large, +/area/virtual_domain/ancient_milsim/snpc_reward) +"EW" = ( +/obj/structure/reagent_dispensers/fueltank/large, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/maintenance) +"Fb" = ( +/obj/structure/reagent_dispensers/fueltank/large, +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/loot_camp) +"Fc" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/iron/smooth, +/area/virtual_domain/ancient_milsim/hallway) +"Ff" = ( +/obj/effect/spawner/random/trash/bin, +/obj/machinery/light/directional/north, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"Fn" = ( +/obj/effect/spawner/structure/window/reinforced/no_firelock, +/obj/machinery/door/poddoor/preopen{ + id = "cin_place" + }, +/obj/effect/baseturf_helper/virtual_domain/ancient_milsim, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/snpc_hallway) +"Fq" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/mob_spawn/ghost_role/human/ancient_milsim, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"Fv" = ( +/turf/open/floor/iron/smooth_half, +/area/virtual_domain/ancient_milsim/atrium) +"FN" = ( +/obj/item/binoculars, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_garage) +"FT" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/carrier) +"FX" = ( +/obj/effect/gibspawner/human, +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/snpc_ground) +"Gd" = ( +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/snpc_garage) +"Gl" = ( +/obj/structure/barricade/sandbags, +/turf/open/floor/iron/smooth_half, +/area/virtual_domain/ancient_milsim/atrium) +"Go" = ( +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/smooth_half, +/area/virtual_domain/ancient_milsim/atrium) +"GJ" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/snpc_ground) +"GR" = ( +/obj/structure/sign/departments/custodian/directional/north, +/obj/item/grenade/smokebomb, +/turf/open/floor/iron/smooth_half, +/area/virtual_domain/ancient_milsim/atrium) +"GS" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "sol_invasion" + }, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/janitor) +"Hn" = ( +/obj/machinery/camera/directional/north{ + status = 0 + }, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/snpc_ground) +"Hq" = ( +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/snpc_ground) +"HG" = ( +/obj/machinery/iv_drip, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/white, +/area/virtual_domain/ancient_milsim/medbay) +"HM" = ( +/obj/machinery/vending/wardrobe/bar_wardrobe, +/obj/machinery/light/directional/south, +/turf/open/floor/carpet/red, +/area/virtual_domain/ancient_milsim/snpc_bar) +"HT" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/atrium) +"Ib" = ( +/obj/structure/toilet, +/obj/machinery/light/small/dim/directional/north, +/obj/effect/mob_spawn/ghost_role/human/ancient_milsim, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_toilet) +"Ir" = ( +/obj/machinery/door/airlock/multi_tile/glass, +/turf/open/floor/iron/smooth, +/area/virtual_domain/ancient_milsim/hallway) +"Is" = ( +/obj/item/grenade/mirage, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/maintenance) +"Iw" = ( +/obj/structure/railing{ + dir = 5 + }, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/snpc_ground) +"Iy" = ( +/obj/effect/spawner/random/trash/caution_sign, +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/loot_camp) +"Iz" = ( +/turf/open/floor/iron/smooth_large, +/area/virtual_domain/ancient_milsim/atrium) +"IH" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/iron/smooth_corner{ + dir = 4 + }, +/area/virtual_domain/ancient_milsim/atrium) +"IS" = ( +/turf/closed/wall/r_wall, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"Jj" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 4 + }, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/virtual_domain/ancient_milsim/atrium) +"Jn" = ( +/obj/structure/barricade/sandbags, +/turf/open/floor/iron/smooth, +/area/virtual_domain/ancient_milsim/atrium) +"Jq" = ( +/obj/effect/baseturf_helper/virtual_domain/ancient_milsim, +/turf/closed/wall/r_wall, +/area/virtual_domain/ancient_milsim/snpc_toilet) +"JG" = ( +/turf/open/water/jungle, +/area/virtual_domain/ancient_milsim/snpc_ground) +"JM" = ( +/obj/item/chair, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"JU" = ( +/obj/modular_map_root/safehouse{ + key = "ancient_milsim" + }, +/turf/template_noop, +/area/virtual_domain/safehouse) +"Kf" = ( +/obj/effect/spawner/random/trash/bin, +/turf/open/floor/iron/smooth, +/area/virtual_domain/ancient_milsim/atrium) +"Kl" = ( +/obj/structure/sign/departments/medbay/directional/west, +/turf/open/floor/iron/smooth, +/area/virtual_domain/ancient_milsim/hallway) +"Ku" = ( +/turf/closed/wall/r_wall, +/area/virtual_domain/ancient_milsim/atrium) +"Kw" = ( +/obj/effect/baseturf_helper/virtual_domain/ancient_milsim, +/turf/closed/indestructible/binary, +/area/virtual_domain) +"Kx" = ( +/obj/item/storage/box/nri_flares, +/turf/open/floor/carpet/red, +/area/virtual_domain/ancient_milsim/snpc_bar) +"KA" = ( +/obj/structure/table/optable, +/obj/item/surgical_processor, +/turf/open/floor/iron/white, +/area/virtual_domain/ancient_milsim/medbay) +"KN" = ( +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/smooth_corner{ + dir = 4 + }, +/area/virtual_domain/ancient_milsim/atrium) +"Lr" = ( +/turf/open/floor/iron/white, +/area/virtual_domain/ancient_milsim/medbay) +"LD" = ( +/obj/structure/flora/tree/jungle/small/style_random, +/obj/machinery/door/poddoor/ancient_milsim{ + id = "engagement_control" + }, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/snpc_ground) +"LI" = ( +/obj/item/paper/crumpled, +/turf/open/floor/iron/smooth_large, +/area/virtual_domain/ancient_milsim/atrium) +"LP" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"Mi" = ( +/obj/item/storage/toolbox/ammobox/full/mosin, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/maintenance) +"Mo" = ( +/obj/machinery/light/floor, +/obj/structure/table, +/obj/item/megaphone, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/loot_camp) +"Mq" = ( +/obj/effect/baseturf_helper/virtual_domain/ancient_milsim, +/turf/closed/wall/mineral/titanium/survival, +/area/virtual_domain/ancient_milsim/carrier) +"Mv" = ( +/turf/closed/wall/mineral/titanium/survival, +/area/virtual_domain/ancient_milsim/carrier) +"My" = ( +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/loot_camp) +"Mz" = ( +/obj/structure/barricade/sandbags, +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/loot_camp) +"MN" = ( +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/snpc_cave) +"MQ" = ( +/obj/item/keycard/yellow, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/janitor) +"MU" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"MW" = ( +/obj/structure/table/wood, +/obj/item/ammo_box/magazine/lanca, +/obj/item/ammo_box/magazine/lanca{ + pixel_x = 4; + pixel_y = 4 + }, +/turf/open/floor/carpet/red, +/area/virtual_domain/ancient_milsim/snpc_bar) +"MY" = ( +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/iron/smooth_large, +/area/virtual_domain/ancient_milsim/snpc_reward) +"Nl" = ( +/obj/item/minespawner/ancient_milsim, +/obj/item/minespawner/ancient_milsim, +/obj/item/minespawner/ancient_milsim, +/obj/item/minespawner/ancient_milsim, +/obj/item/minespawner/ancient_milsim, +/obj/structure/closet/crate/cardboard, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_garage) +"NA" = ( +/obj/structure/sign/poster/random/directional/west, +/obj/item/storage/toolbox/maint_kit, +/obj/structure/table/wood, +/turf/open/floor/carpet/red, +/area/virtual_domain/ancient_milsim/snpc_bar) +"NJ" = ( +/obj/effect/baseturf_helper/virtual_domain/ancient_milsim, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/loot_camp) +"On" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/glass/trophy/gold_cup, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/iron/smooth_large, +/area/virtual_domain/ancient_milsim/snpc_reward) +"Ow" = ( +/obj/item/storage/box/nri_flares, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_hallway) +"Ox" = ( +/turf/closed/wall/r_wall, +/area/virtual_domain/ancient_milsim/snpc_bar) +"OA" = ( +/obj/machinery/sleeper/self_control, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/white, +/area/virtual_domain/ancient_milsim/medbay) +"OG" = ( +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/iron/smooth_large, +/area/virtual_domain/ancient_milsim/snpc_exit) +"OS" = ( +/obj/machinery/vending/boozeomat, +/turf/open/floor/carpet/red, +/area/virtual_domain/ancient_milsim/snpc_bar) +"OV" = ( +/obj/machinery/conveyor/auto{ + dir = 4; + id = "sol_invasion" + }, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/janitor) +"OZ" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 8 + }, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/virtual_domain/ancient_milsim/atrium) +"Pi" = ( +/obj/machinery/photocopier, +/turf/open/floor/iron/smooth_corner{ + dir = 8 + }, +/area/virtual_domain/ancient_milsim/atrium) +"Pj" = ( +/obj/structure/filingcabinet/chestdrawer/wheeled, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/loot_camp) +"Pw" = ( +/obj/effect/spawner/random/vending/snackvend, +/obj/machinery/light/directional/west, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_hallway) +"PE" = ( +/obj/machinery/door/puzzle/keycard/yellow_required, +/turf/open/floor/iron/smooth_large, +/area/virtual_domain/ancient_milsim/snpc_exit) +"PJ" = ( +/obj/structure/flippedtable, +/obj/item/storage/backpack/duffelbag/deforest_medkit/stocked, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"PM" = ( +/obj/effect/spawner/random/trash/bin, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_toilet) +"PO" = ( +/obj/effect/baseturf_helper/virtual_domain/ancient_milsim, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/snpc_cave) +"PT" = ( +/obj/machinery/power/shuttle_engine/huge, +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/entrance) +"Qb" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/machinery/door/poddoor/ancient_milsim{ + id = "engagement_control" + }, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/snpc_ground) +"Qn" = ( +/obj/structure/table, +/obj/item/storage/medkit/civil_defense/stocked{ + pixel_x = 8 + }, +/obj/item/storage/medkit/civil_defense/stocked{ + pixel_x = -8 + }, +/obj/item/storage/medkit/civil_defense/stocked{ + pixel_y = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"QF" = ( +/obj/item/ammo_box/magazine/lanca, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/maintenance) +"QP" = ( +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/loot_camp) +"Rk" = ( +/obj/structure/table, +/obj/item/storage/medkit/combat_surgeon/stocked, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"Rl" = ( +/obj/item/gun/ballistic/automatic/pistol/plasma_thrower, +/obj/item/ammo_box/magazine/recharge/plasma_battery{ + pixel_x = -3; + pixel_y = -14 + }, +/obj/item/ammo_box/magazine/recharge/plasma_battery{ + pixel_x = 8; + pixel_y = -12 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/carrier) +"Rn" = ( +/obj/structure/curtain/cloth{ + color = "#556B2F" + }, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/loot_camp) +"Rq" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/maintenance) +"Rv" = ( +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/maintenance) +"RA" = ( +/obj/structure/closet/crate/secure/weapon, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/loot_camp) +"RC" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/virtual_domain/ancient_milsim/medbay) +"RG" = ( +/obj/structure/table/wood, +/obj/item/knife/combat, +/turf/open/floor/carpet/red, +/area/virtual_domain/ancient_milsim/snpc_bar) +"RP" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/carrier) +"RU" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/carrier) +"RY" = ( +/obj/machinery/door/airlock/multi_tile/glass{ + dir = 8 + }, +/turf/open/floor/carpet/red, +/area/virtual_domain/ancient_milsim/snpc_bar) +"RZ" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light/small/broken/directional/north, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/carrier) +"Sh" = ( +/obj/structure/urinal{ + pixel_x = 32 + }, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_toilet) +"Sl" = ( +/obj/effect/baseturf_helper/virtual_domain/ancient_milsim, +/turf/closed/indestructible/reinforced, +/area/virtual_domain/ancient_milsim/snpc_exit) +"Sv" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/snpc_ground) +"SB" = ( +/obj/structure/shipping_container/kosmologistika, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_garage) +"SG" = ( +/obj/structure/table, +/obj/item/folder/blue, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/loot_camp) +"Tx" = ( +/obj/effect/baseturf_helper/virtual_domain/ancient_milsim, +/turf/closed/wall/r_wall, +/area/virtual_domain/ancient_milsim/medbay) +"TB" = ( +/obj/structure/fence/door{ + dir = 4 + }, +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/loot_camp) +"TD" = ( +/obj/structure/table, +/obj/machinery/recharger, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"TE" = ( +/turf/open/floor/carpet/red, +/area/virtual_domain/ancient_milsim/snpc_bar) +"TG" = ( +/obj/item/grown/log, +/obj/item/grown/log, +/obj/item/grown/log, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/loot_camp) +"TP" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/maintenance) +"TQ" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/maintenance) +"TY" = ( +/obj/structure/railing{ + dir = 10 + }, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/snpc_ground) +"Ue" = ( +/obj/structure/closet/crate/cardboard, +/obj/item/stack/sheet/mineral/sandbags/fifty, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_garage) +"Ug" = ( +/obj/machinery/light/small/broken/directional/west, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/snpc_cave) +"Ux" = ( +/obj/structure/closet/crate/trashcart/filled, +/obj/item/ammo_box/magazine/lanca, +/obj/item/ammo_box/c35sol, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/janitor) +"Uz" = ( +/turf/closed/indestructible/binary, +/area/virtual_domain) +"UD" = ( +/obj/structure/table, +/obj/item/knife/combat, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"UQ" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_hallway) +"Vi" = ( +/obj/structure/chair/stool/directional/east, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/loot_camp) +"Vj" = ( +/obj/item/reagent_containers/cup/bottle/thermite, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/maintenance) +"Vl" = ( +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/loot_camp) +"Vp" = ( +/obj/effect/baseturf_helper/virtual_domain/ancient_milsim, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"Vr" = ( +/obj/item/ammo_box/magazine/lanca, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/loot_camp) +"VA" = ( +/turf/open/floor/iron/smooth_corner{ + dir = 4 + }, +/area/virtual_domain/ancient_milsim/atrium) +"VC" = ( +/obj/structure/table, +/obj/item/stack/medical/suture/bloody, +/obj/item/stack/medical/suture/bloody, +/turf/open/floor/iron/white, +/area/virtual_domain/ancient_milsim/medbay) +"VO" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/iron/smooth_corner{ + dir = 1 + }, +/area/virtual_domain/ancient_milsim/atrium) +"VX" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/obj/item/storage/backpack/duffelbag/syndie/c4, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/maintenance) +"VZ" = ( +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/entrance) +"Wh" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"Wq" = ( +/obj/machinery/door/morgue, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_toilet) +"Wr" = ( +/obj/structure/flora/bush/ferny/style_random, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/snpc_ground) +"Wv" = ( +/obj/machinery/button/door/indestructible/ancient_milsim{ + pixel_y = 24 + }, +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/loot_camp) +"Ww" = ( +/obj/structure/inflatable, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/loot_camp) +"WG" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron/smooth, +/area/virtual_domain/ancient_milsim/hallway) +"WR" = ( +/obj/effect/baseturf_helper/virtual_domain/ancient_milsim, +/turf/closed/wall/r_wall, +/area/virtual_domain/ancient_milsim/hallway) +"WY" = ( +/obj/item/gun/ballistic/automatic/lanca, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/maintenance) +"Xh" = ( +/obj/item/ammo_box/c310_cargo_box/piercing, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/maintenance) +"XK" = ( +/obj/effect/spawner/random/trash/bin, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"XS" = ( +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron/smooth_half, +/area/virtual_domain/ancient_milsim/atrium) +"XU" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/smooth, +/area/virtual_domain/ancient_milsim/hallway) +"XV" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_garage) +"XZ" = ( +/obj/machinery/light/small/broken/directional/south, +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/snpc_cave) +"Yd" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"Yx" = ( +/obj/structure/sign/departments/science/directional/north, +/obj/structure/sign/flag/nri/directional/north, +/obj/effect/baseturf_helper/virtual_domain/ancient_milsim, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/entrance) +"YE" = ( +/turf/open/floor/plating, +/area/virtual_domain/ancient_milsim/snpc_cafe) +"YY" = ( +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_hallway) +"Zd" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_hallway) +"Zg" = ( +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/carpet/red, +/area/virtual_domain/ancient_milsim/snpc_bar) +"ZA" = ( +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/misc/dirt/planet, +/area/virtual_domain/ancient_milsim/loot_camp) +"ZQ" = ( +/obj/structure/sign/flag/nri/directional/east, +/turf/open/floor/carpet/red, +/area/virtual_domain/ancient_milsim/snpc_bar) +"ZY" = ( +/obj/structure/reagent_dispensers/fueltank/large, +/turf/open/floor/iron, +/area/virtual_domain/ancient_milsim/snpc_garage) + +(1,1,1) = {" +nu +nu +nu +nu +nu +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +nu +nu +nu +nu +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +"} +(2,1,1) = {" +nu +nu +nu +nu +nu +Uz +qn +qn +qn +JG +qn +xS +Cd +Cd +er +er +er +er +er +Uz +Uz +Uz +Uz +Uz +Uz +er +er +er +er +er +er +er +er +er +er +er +er +er +er +er +er +er +er +Uz +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +"} +(3,1,1) = {" +nu +nu +nu +nu +nu +Uz +qn +JG +qn +JG +qn +xS +DT +Cd +JG +JG +JG +Cd +er +er +er +er +er +er +er +er +Cd +Cd +Cd +eF +eF +eF +eF +eF +eF +eF +eF +eF +eF +eF +eF +eF +er +Uz +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +"} +(4,1,1) = {" +nu +nu +nu +nu +nu +Uz +qn +qn +qn +qn +qn +Iw +Cd +ho +Cd +JG +JG +JG +Cd +Cd +JG +JG +Cd +Cd +Cd +Cd +Cd +Hq +Cd +eF +ZY +nw +eE +nw +nw +mZ +mZ +AE +ea +gE +AE +eF +er +Uz +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +"} +(5,1,1) = {" +nu +nu +nu +nu +nu +Uz +qn +qn +JG +qn +qn +qn +bM +Cd +Cd +Cd +DT +Cd +Cd +Cd +Hq +Cd +JG +Wr +Cd +Cd +Cd +Cd +Cd +eF +kv +gE +gE +gE +gE +gE +gE +gE +gE +gE +zf +eF +er +Uz +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +"} +(6,1,1) = {" +nu +nu +nu +nu +nu +Uz +qn +qn +JG +qn +qn +qn +qn +Iw +Cd +Cd +Cd +Cd +Cd +Cd +Cd +Cd +Cd +Cd +Cd +qn +qn +qn +qn +aG +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +gE +ec +eF +er +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +nu +nu +nu +nu +"} +(7,1,1) = {" +nu +nu +nu +nu +nu +Uz +qn +qn +qn +qn +qn +Cd +qn +qn +Mv +Mv +Mv +Mv +Mv +Mv +Mv +Mv +JG +qn +qn +qn +qn +qn +qn +aG +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +gE +uE +eF +er +Uz +er +er +er +er +er +er +er +Uz +nu +nu +nu +nu +"} +(8,1,1) = {" +nu +nu +nu +nu +nu +Uz +qn +qn +qn +qn +qn +Cd +Cd +bM +Eh +uf +RU +vf +Mv +aR +oU +Mv +Cd +Cd +Cd +JG +JG +Cd +Cd +aG +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +gE +gE +eF +er +er +er +Eg +Eg +Eg +Eg +Eg +er +Uz +nu +nu +nu +nu +"} +(9,1,1) = {" +nu +nu +nu +nu +nu +Uz +qn +JG +qn +qn +qn +qn +Cd +Cd +Eh +Rl +RP +RP +EB +RP +ol +no +Cd +Cd +Cd +JG +JG +JG +Cd +aG +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +gE +Gd +Gd +cx +MN +MN +Eg +kL +sG +MY +Eg +er +Uz +nu +nu +nu +nu +"} +(10,1,1) = {" +nu +nu +nu +nu +nu +Uz +qn +qn +qn +qn +qn +qn +qn +Cd +Eh +FT +qn +qn +Mv +RZ +oU +Mv +Hn +Cd +Cd +Cd +Cd +Cd +Cd +aG +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +gE +iZ +Gd +kX +kX +MN +Eg +On +sG +DL +Eg +er +Uz +Uz +Uz +Uz +Uz +"} +(11,1,1) = {" +nu +nu +nu +nu +nu +Uz +qn +JG +qn +qn +qn +Cd +qn +qn +Mq +Mv +qn +FX +qn +qn +Mv +Mv +Cd +JG +qn +qn +qn +qn +qn +aG +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +gE +XV +eF +kX +MN +MN +Eg +EE +sG +MY +Eg +er +er +er +er +er +Uz +"} +(12,1,1) = {" +nu +nu +nu +nu +Uz +Uz +qn +JG +qn +qn +qn +xS +GJ +TY +bM +qn +qn +qn +qn +Cd +Cd +Cd +Cd +Cd +Cd +Cd +Cd +qn +qn +aG +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +gE +SB +eF +zx +kX +MN +fJ +Eg +zp +Eg +Eg +MN +MN +MN +cx +er +Uz +"} +(13,1,1) = {" +nu +nu +nu +Uz +Uz +qn +qn +qn +JG +JG +qn +xS +bM +Cd +bN +Cd +qn +qn +qn +Cd +Cd +Cd +Cd +Cd +Cd +Cd +Cd +Cd +Cd +eF +nH +uM +uM +FN +vu +lc +gE +gE +gE +gE +gE +eF +kX +kX +MN +vs +kX +kX +kX +kX +kX +kX +MN +cx +er +Uz +"} +(14,1,1) = {" +nu +nu +Uz +Uz +qn +qn +qn +qn +qn +qn +qn +xS +Cd +Hq +Cd +bM +Cd +qn +Cd +Cd +Cd +Cd +Cd +Cd +Wr +Cd +Cd +Cd +Cd +eF +Ue +Nl +oz +gE +gE +gE +gE +gE +gE +gE +gE +eF +PO +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +cx +er +Uz +"} +(15,1,1) = {" +nu +Uz +Uz +qn +qn +qn +qn +qn +qn +qn +Cs +cb +Cd +Cd +Cd +Cd +Cd +Cd +Cd +JG +JG +Cd +JG +JG +JG +Cd +Cd +Cd +Sv +uC +eF +eF +eF +eF +gE +fu +eF +eF +eF +eF +eF +eF +IS +IS +IS +IS +IS +YE +YE +IS +IS +kX +kX +cx +er +Uz +"} +(16,1,1) = {" +Uz +Uz +qn +JG +JG +qn +qn +qn +JG +qn +xS +Cd +Cd +Cd +Cd +DT +Cd +JG +JG +JG +Cd +Cd +Cd +Cd +Cd +Cd +Cd +Wr +Sv +rB +rO +UQ +Pw +De +YY +Ow +wr +cF +ob +uZ +jS +Zd +rT +sX +sX +sX +LP +YE +Bs +sX +IS +MN +zL +cx +er +Uz +"} +(17,1,1) = {" +Uz +qn +qn +qn +qn +qn +qn +qn +qn +Cs +Ee +JG +Cd +Cd +Cd +Cd +Cd +Cd +JG +JG +Cd +Hq +Cd +JG +Cd +Cd +Cd +Sv +Sv +rB +YY +YY +YY +YY +YY +YY +YY +YY +YY +YY +YY +YY +lz +sX +DW +sX +jc +sX +hJ +bw +IS +MN +MN +cx +er +Uz +"} +(18,1,1) = {" +Uz +qn +qn +qn +qn +qn +qn +qn +Cs +cb +Cd +Cd +Cd +Cd +Cd +Cd +Cd +Cd +Cd +Cd +Cd +Cd +Cd +JG +JG +Cd +Hq +Sv +Sv +Fn +CR +YY +tg +YY +YY +YY +YY +YY +tg +YY +YY +YY +Vp +sX +yt +yt +UD +sX +jc +Wh +IS +MN +MN +cx +er +Uz +"} +(19,1,1) = {" +Uz +JG +qn +qn +qn +JG +qn +Cs +cb +Cd +Cd +Cd +DT +Cd +Cd +Cd +Cd +DT +Cd +Cd +Cd +Cd +Cd +JG +Cd +Cd +Cd +Cd +Sv +oJ +oJ +oJ +oJ +ka +oJ +oJ +TE +RY +Ox +Ox +Ox +Ox +Ox +JM +sV +nM +sX +sX +sX +lt +IS +kX +kX +MN +er +Uz +"} +(20,1,1) = {" +Uz +qn +qn +qn +qn +qn +Cs +cb +Cd +Cd +Cd +Cd +Cd +Cd +pn +Cd +Cd +JG +JG +JG +Cd +Cd +Cd +JG +pn +Cd +Cd +Cd +Cd +oJ +Ib +Wq +AH +AH +iI +oJ +TE +TE +Bd +NA +Zg +OS +Ox +Dk +sX +yt +TD +sX +TD +iW +IS +kX +kX +cx +er +Uz +"} +(21,1,1) = {" +Uz +qn +qn +qn +qn +Cs +Ee +Cd +Cd +Cd +Cd +Cd +JG +Cd +Cd +Cd +Cd +JG +JG +Cd +Cd +Cd +Cd +Cd +Cd +Cd +Cd +Cd +Cd +oJ +oJ +oJ +AH +AH +Dy +oJ +AN +TE +Bd +td +TE +yV +Ox +XK +yt +yt +hH +Fq +hH +Yd +IS +kX +kX +cx +er +Uz +"} +(22,1,1) = {" +Uz +qn +JG +qn +Cs +cb +Cd +Cd +Cd +Cd +DT +Cd +JG +JG +Cd +Cd +Hq +JG +Cd +Cd +Cd +Cd +DT +Cd +Cd +Cd +Cd +Cd +Cd +oJ +ne +Wq +AH +AH +PM +oJ +AB +Kx +et +wy +TE +HM +Ox +Ff +sX +sX +sX +sX +yt +Wh +IS +kX +kX +cx +er +Uz +"} +(23,1,1) = {" +Uz +qn +qn +Cs +cb +Cd +DT +Cd +Cd +Cd +Cd +Cd +JG +Cd +Hq +Cd +Cd +Cd +Cd +Hq +Cd +Cd +Cd +Cd +Cd +Cd +Wr +DT +Cd +oJ +oJ +oJ +AH +AH +Dy +oJ +lr +TE +Bd +MW +TE +yn +Ox +Dk +sX +rx +PJ +nM +jc +Yd +IS +kX +MN +cx +er +Uz +"} +(24,1,1) = {" +Uz +qn +Cs +cb +Cd +Cd +Cd +Cd +Cd +Cd +Cd +JG +Cd +Wr +Cd +Cd +Cd +Cd +Cd +JG +Cd +Cd +Cd +JG +JG +JG +Cd +Cd +Cd +oJ +ne +Wq +Sh +Sh +iI +oJ +RG +te +TE +TE +ZQ +mu +Ox +Qn +Rk +lX +CH +MU +hH +iW +IS +kX +kX +cx +er +Uz +"} +(25,1,1) = {" +Uz +Cs +cb +Cd +Cd +JG +JG +Cd +Cd +Cd +DT +Cd +Cd +Cd +Cd +Cd +Cd +Cd +DT +JG +Cd +Wr +Cd +JG +JG +JG +JG +Cd +Wr +Jq +oJ +oJ +oJ +oJ +oJ +oJ +or +Ox +Ox +Ox +Ox +Ox +Ox +IS +IS +IS +IS +IS +IS +IS +IS +kX +dh +cx +er +Uz +"} +(26,1,1) = {" +Uz +Qb +LD +hy +LD +hy +hy +LD +hy +hy +hy +hy +hy +hy +LD +hy +hy +hy +hy +Aw +hy +hy +hy +hy +LD +hy +eQ +hy +hy +er +er +er +er +er +er +er +er +er +er +er +er +er +er +cx +kX +kX +kX +kX +Ug +kX +kX +kX +kX +MN +er +Uz +"} +(27,1,1) = {" +Uz +ed +hy +hy +hy +eQ +hy +hy +hy +hy +hy +hy +hy +hy +hy +hy +hy +hy +hy +hy +hy +hy +hy +hy +hy +eQ +eQ +eQ +er +er +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +er +cx +ED +kX +kX +kX +kX +kX +kX +kX +kX +MN +er +Uz +"} +(28,1,1) = {" +Uz +Vl +Vl +Vl +Vl +Vl +Mz +Mz +Mz +Mz +Mz +Mz +tU +hj +Vl +Vl +er +yh +oj +oj +yh +er +yh +oj +oj +yh +er +er +er +Uz +Uz +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +Uz +er +cx +kX +kX +cx +cx +cx +cx +cx +MN +MN +MN +er +Uz +"} +(29,1,1) = {" +Uz +hj +Vl +Vl +Vl +Vl +Mz +kJ +QP +QP +QP +Mz +Vl +Vl +qC +Vl +er +yh +oj +oj +yh +er +yh +oj +oj +yh +er +Uz +Uz +Uz +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +Uz +er +ls +kX +XZ +cx +er +er +er +er +er +er +er +er +Uz +"} +(30,1,1) = {" +Uz +Vl +Vl +Vl +qC +Vl +Vl +QP +QP +QP +QP +Vl +Vl +Vl +Vl +Vl +er +yh +oj +oj +yh +er +yh +oj +oj +yh +er +Uz +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +Uz +er +uz +uz +PE +uz +er +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +"} +(31,1,1) = {" +Uz +Vl +Vl +Vl +Vl +hj +Vl +QP +ZA +QP +QP +Vl +Vl +Vl +hj +Vl +er +yh +oj +oj +yh +er +yh +oj +oj +yh +er +Uz +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +Uz +er +uz +AW +AW +uz +er +Uz +nu +nu +nu +nu +nu +nu +nu +"} +(32,1,1) = {" +Uz +Vl +Vl +Vl +Vl +Vl +Vl +Vl +QP +QP +Vl +Vl +qC +Vl +Vl +Vl +er +yh +oj +oj +yh +er +yh +oj +oj +yh +er +Uz +Uz +Uz +Uz +Uz +Uz +Uz +nu +nu +nu +nu +nu +nu +nu +Uz +er +uz +Do +OG +uz +er +Uz +nu +nu +nu +nu +nu +nu +nu +"} +(33,1,1) = {" +Uz +vL +vL +vL +vL +vL +vL +vL +TB +TB +vL +vL +vL +vL +vL +vL +er +yh +oj +oj +yh +er +yh +oj +oj +yh +er +er +er +er +er +er +er +Uz +nu +nu +nu +nu +nu +nu +nu +Uz +er +uz +AW +AW +uz +er +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +"} +(34,1,1) = {" +Uz +wz +Vl +Vl +Vl +Vl +Vl +wv +QP +QP +Vl +wz +Vl +Vl +Vl +Vl +yh +yh +TP +TP +yh +yh +yh +TP +TP +yh +go +go +go +go +go +go +er +Uz +nu +nu +nu +nu +nu +nu +Uz +Uz +er +Sl +uz +sa +uz +er +er +er +er +er +er +er +er +Uz +"} +(35,1,1) = {" +Uz +Vl +Vl +Vl +Vl +Vl +Vl +jn +Wv +QP +Vl +lG +Vl +Vl +Vl +Vl +TP +TQ +oj +fk +gP +oj +oj +Mi +oj +fk +go +AY +eR +Cr +wh +go +er +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +er +er +nA +nA +nA +nA +nA +nA +nA +nA +nA +nA +nA +nA +Uz +"} +(36,1,1) = {" +Uz +Vl +Vl +Vl +wz +Vl +Vl +Vl +QP +QP +Vl +bB +bB +bB +bB +Vl +qB +yh +yh +yh +yh +yh +yh +yl +Is +Xh +go +OV +aO +MQ +gL +go +er +er +er +er +er +er +Uz +Uz +er +er +nA +nA +nA +nA +nA +nA +nA +nA +nA +nA +nA +nA +lu +Uz +"} +(37,1,1) = {" +Uz +Vl +Vl +Vl +Vl +Vl +Vl +Vl +QP +QP +Vl +bB +RA +nZ +bB +Vl +iq +qV +Cg +Lr +Lr +Ey +yh +EW +oj +Rv +go +th +GS +aO +AR +go +Ku +Ku +Ku +Ku +Ku +er +er +er +er +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +VZ +VZ +VZ +Uz +"} +(38,1,1) = {" +Uz +Vl +Vl +Vl +TG +sS +Vl +Vl +Vl +QP +QP +Ww +Vi +bm +bB +Vl +iq +zE +Lr +iz +RC +xa +yh +uY +QF +WY +go +hO +aO +pY +go +go +oe +Ek +Jj +KN +Ku +Ku +Ku +er +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +VZ +VZ +Uz +"} +(39,1,1) = {" +Uz +Vl +wz +Vl +im +im +Vl +Vl +Vl +QP +QP +Ww +My +ki +bB +Vl +iq +OA +Lr +VC +DN +rl +yh +uY +QF +Is +go +AC +jV +aO +go +GR +wx +ek +Iz +hp +IH +Ku +Ku +Ku +hZ +hZ +hZ +hZ +kS +lE +lE +lE +lE +lE +JU +qp +VZ +VZ +VZ +Uz +"} +(40,1,1) = {" +Uz +Vl +Vl +bB +bB +bB +Ww +Ww +Vl +QP +QP +bB +Rn +Rn +bB +Vl +iq +HG +Bg +Lr +Lr +Bg +yh +cp +Is +QF +go +Ux +cV +aO +lf +Fv +ek +CC +CC +Iz +hp +ly +Ku +uy +hZ +hZ +hZ +hZ +hZ +lE +lE +lE +lE +lE +lE +bd +VZ +VZ +VZ +Uz +"} +(41,1,1) = {" +Uz +Vl +bB +bB +ki +ki +ki +Ww +Ww +QP +QP +Vl +QP +QP +Vl +lG +iq +tA +Lr +Lr +Lr +pN +yh +Rq +Rv +fk +aE +go +go +lf +go +al +Iz +Kf +Jn +eh +Iz +Gl +HT +hZ +hZ +hZ +hZ +hZ +hZ +lE +lE +lE +lE +lE +lE +DE +VZ +PT +VZ +Uz +"} +(42,1,1) = {" +Uz +bB +bB +Pj +ki +ss +ki +ki +bB +QP +QP +Vl +QP +ke +Vl +Vl +iq +KA +Lr +Lr +Lr +Lr +yh +yl +oj +vr +VX +oj +Vj +Vj +yh +Go +LI +co +vd +CV +Iz +Fv +iO +hZ +hZ +hZ +hZ +hZ +hZ +lE +lE +lE +lE +lE +lE +DE +VZ +VZ +VZ +Uz +"} +(43,1,1) = {" +Uz +bB +Pj +ki +eC +SG +ki +ki +Rn +QP +QP +QP +QP +QP +QP +Vl +Tx +iq +iq +iq +Lr +Cf +yh +yh +yh +yh +yh +yh +yh +yh +yh +XS +Iz +ie +El +CV +Iz +Gl +Iz +hZ +hZ +hZ +hZ +hZ +hZ +lE +lE +lE +lE +lE +lE +DE +VZ +VZ +VZ +Uz +"} +(44,1,1) = {" +Uz +bB +Pj +gb +ki +Ab +ki +ki +Rn +QP +QP +ZA +QP +QP +QP +QP +ft +dC +WG +Kl +dC +dC +dC +dC +dC +dC +WG +dC +dC +dC +Ir +ot +Iz +iU +Jn +vz +Iz +Gl +HT +hZ +hZ +hZ +hZ +hZ +hZ +lE +lE +lE +lE +lE +lE +bd +VZ +VZ +VZ +Uz +"} +(45,1,1) = {" +Uz +bB +bB +Pj +ki +Mo +ki +ki +bB +Vl +Vl +Vl +QP +QP +QP +QP +va +dC +dC +dC +dC +dC +dC +dC +dH +ir +dC +dC +dC +dC +dC +kh +Iz +CC +iw +Iz +DO +qs +Ku +Yx +hZ +hZ +hZ +hZ +kS +ws +lE +lE +lE +lE +lE +qp +VZ +VZ +VZ +Uz +"} +(46,1,1) = {" +Uz +Vl +bB +bB +ki +ki +ki +Ww +Ww +Vl +Vl +Vl +QP +QP +Vl +Vl +wZ +dC +tH +dC +dC +dH +Fc +XU +dC +ir +dC +dC +dC +kT +dd +Pi +VA +Iz +Iz +Ei +wx +Ku +Ku +Ku +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +VZ +VZ +VZ +Uz +"} +(47,1,1) = {" +Uz +Vr +mi +bB +bB +bB +Ww +Ww +Vl +Vl +bB +Ww +Ww +Rn +bB +Vl +WR +dd +dd +dd +dd +dd +dd +dd +dd +dd +dd +dd +dd +dd +dd +Ku +ba +CJ +OZ +VO +Ku +Ku +Ku +er +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +VZ +VZ +Uz +"} +(48,1,1) = {" +Uz +Dt +Vr +Vl +Vl +Vl +Vl +Vl +wz +Vl +jn +CT +uq +ki +bB +Vl +qA +Vl +xe +Fb +rb +Dd +vA +er +er +er +er +er +er +er +er +qr +Ku +Ku +Ku +Ku +Ku +er +er +er +er +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +VZ +VZ +VZ +Uz +"} +(49,1,1) = {" +Uz +Vl +Vr +Vl +Vl +Vl +lG +Vl +Vl +Vl +bB +ue +nQ +ki +yd +QP +yI +Iy +tI +QP +QP +QP +BO +aP +er +Uz +Uz +Uz +Uz +Uz +er +er +er +er +er +er +er +er +Uz +Uz +er +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +Uz +"} +(50,1,1) = {" +Uz +Vl +wz +Vl +Vl +Vl +wz +Vl +Vl +Vl +bB +bB +bB +bB +bB +Vl +qA +Vl +QP +ZA +wQ +QP +QP +aP +er +Uz +nu +nu +nu +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +er +er +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +Uz +"} +(51,1,1) = {" +Uz +NJ +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +qA +xB +kC +QP +tI +aP +er +er +er +Uz +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +Uz +Uz +er +er +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +hZ +Uz +"} +(52,1,1) = {" +Kw +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +nu +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +Uz +"} diff --git a/_maps/virtual_domains/ash_drake.dmm b/_maps/virtual_domains/ash_drake.dmm index 50fbac8696ab39..f789e44fbc69fb 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" = ( @@ -56,7 +56,9 @@ /turf/open/lava/smooth/lava_land_surface, /area/lavaland/surface/outdoors/virtual_domain) "L" = ( -/obj/effect/landmark/bitrunning/safehouse_spawn, +/obj/modular_map_root/safehouse{ + key = "lavaland_boss" + }, /turf/template_noop, /area/virtual_domain/safehouse) "P" = ( diff --git a/_maps/virtual_domains/beach_bar.dmm b/_maps/virtual_domains/beach_bar.dmm index 29fe04d82837f3..edea28b064f507 100644 --- a/_maps/virtual_domains/beach_bar.dmm +++ b/_maps/virtual_domains/beach_bar.dmm @@ -4,10 +4,10 @@ /obj/effect/turf_decal/sand, /obj/structure/sign/poster/contraband/have_a_puff/directional/west, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ag" = ( /turf/open/floor/carpet/red, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "as" = ( /obj/structure/closet/crate/bin, /obj/item/tank/internals/emergency_oxygen, @@ -16,14 +16,14 @@ /obj/effect/turf_decal/sand, /obj/machinery/light/directional/west, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "aw" = ( /obj/machinery/grill, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "aE" = ( /turf/open/floor/pod/light, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "aZ" = ( /obj/machinery/light/small/directional/east, /obj/structure/closet/crate{ @@ -32,57 +32,57 @@ /obj/item/stack/sheet/mineral/coal/ten, /obj/item/stack/sheet/mineral/coal/ten, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "bf" = ( /mob/living/basic/crab{ name = "Jonny" }, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "bC" = ( /obj/effect/turf_decal/sand, /mob/living/basic/crab{ name = "James" }, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "bM" = ( /mob/living/basic/crab{ name = "Jon" }, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "bQ" = ( /obj/structure/fluff/beach_umbrella/cap, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "bS" = ( /obj/machinery/chem_master/condimaster{ name = "CondiMaster Neo"; pixel_x = -4 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "cb" = ( /obj/structure/table/wood, /obj/item/reagent_containers/pill/lsd, /obj/item/reagent_containers/pill/lsd, /obj/item/reagent_containers/pill/lsd, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "cv" = ( /turf/open/floor/carpet/royalblue, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "cz" = ( /obj/effect/turf_decal/sand, /obj/machinery/jukebox, /obj/item/coin/gold, /turf/open/floor/sepia, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "cG" = ( /obj/structure/flora/bush/sparsegrass/style_random, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "db" = ( /obj/item/reagent_containers/cup/glass/bottle/beer/light, /obj/item/reagent_containers/cup/glass/bottle/beer/light, @@ -113,7 +113,7 @@ /obj/item/reagent_containers/cup/glass/colocup, /obj/item/reagent_containers/cup/glass/colocup, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "di" = ( /obj/machinery/vending/boozeomat, /obj/effect/mapping_helpers/atom_injector/obj_flag{ @@ -121,37 +121,37 @@ target_type = /obj/machinery/vending/boozeomat }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "dj" = ( /turf/open/misc/beach/coast{ dir = 1 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "dx" = ( /obj/effect/turf_decal/sand, /obj/effect/turf_decal/stripes/asteroid/line{ dir = 8 }, /turf/open/floor/sepia, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "dI" = ( /obj/machinery/light/directional/south, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "dZ" = ( /obj/structure/bookcase/random/reference, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ed" = ( /obj/machinery/atmospherics/components/tank/air{ dir = 1 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "er" = ( /obj/structure/noticeboard/staff, /turf/closed/wall/mineral/wood/nonmetal, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "fc" = ( /obj/structure/table/wood, /obj/item/reagent_containers/pill/happy, @@ -159,22 +159,18 @@ pixel_x = -8; pixel_y = -1 }, -/obj/item/reagent_containers/cup/glass/drinkingglass/filled/virtual_domain{ - pixel_y = 8; - pixel_x = 5 - }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "fr" = ( /obj/item/melee/skateboard/hoverboard, /obj/machinery/light/directional/west, /turf/open/floor/pod/light, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "gh" = ( /obj/structure/flora/bush/stalky/style_random, /obj/structure/flora/bush/sparsegrass/style_random, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "gl" = ( /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, /area/lavaland/surface/outdoors/virtual_domain) @@ -185,21 +181,21 @@ /turf/open/misc/beach/coast{ dir = 4 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "hk" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/pod/light, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "hE" = ( /obj/structure/sign/departments/restroom/directional/east, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "hG" = ( /obj/machinery/door/airlock/sandstone{ name = "Surfer Shack 1" }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "iz" = ( /turf/closed/indestructible/binary, /area/lavaland/surface/outdoors/virtual_domain) @@ -210,18 +206,18 @@ /obj/item/reagent_containers/cup/rag, /obj/machinery/light/small/directional/west, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "jc" = ( /turf/open/floor/iron/stairs/right, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "jg" = ( /obj/machinery/vending/hydronutrients, /turf/open/floor/iron/grimy, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "jl" = ( /obj/structure/flora/rock/pile/jungle/style_random, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "jy" = ( /obj/effect/turf_decal/sand{ density = 1 @@ -230,7 +226,7 @@ /turf/open/floor/pod/light{ density = 1 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ke" = ( /obj/structure/marker_beacon/bronze, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, @@ -242,7 +238,7 @@ }, /obj/structure/chair/stool/bar/directional/west, /turf/open/floor/sepia, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "kv" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/closed/indestructible/binary, @@ -251,45 +247,45 @@ /obj/structure/table, /obj/machinery/reagentgrinder, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "kK" = ( /obj/structure/mirror/directional/west, /obj/structure/sink/kitchen/directional/south, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "kT" = ( /obj/structure/chair/stool/bar/directional/south, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "lq" = ( /obj/item/melee/skateboard/hoverboard, /turf/open/floor/pod/light, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "lB" = ( /obj/item/toy/seashell, /obj/effect/turf_decal/sand, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "lS" = ( /turf/open/floor/light/colour_cycle/dancefloor_a, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ml" = ( /turf/template_noop, /area/virtual_domain/safehouse) "mq" = ( /obj/structure/closet/secure_closet/freezer/kitchen/all_access, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "mG" = ( /obj/structure/easel, /obj/item/canvas/twentythree_twentythree, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "mP" = ( /turf/open/misc/beach/coast/corner{ dir = 1 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "mX" = ( /obj/structure/closet/secure_closet/freezer/meat/all_access, /obj/item/food/meat/rawbacon, @@ -299,12 +295,12 @@ /obj/item/food/meat/slab/rawcrab, /obj/item/food/meat/slab/rawcrab, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "nP" = ( /obj/item/stack/sheet/iron/fifty, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "oE" = ( /obj/structure/railing/corner{ dir = 1 @@ -313,57 +309,57 @@ /turf/open/misc/beach/coast/corner{ dir = 8 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "oP" = ( /obj/structure/table/wood, /obj/machinery/reagentgrinder, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "pr" = ( /turf/template_noop, /area/template_noop) "pC" = ( /obj/machinery/computer/arcade/battle, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "pT" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "pZ" = ( /obj/machinery/light/directional/south, /turf/open/misc/beach/coast{ dir = 1 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "qc" = ( /obj/structure/extinguisher_cabinet/directional/south, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "qg" = ( /obj/structure/sign/poster/contraband/space_up/directional/west, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "qR" = ( /obj/effect/spawner/structure/window, /obj/structure/curtain, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "qW" = ( /obj/item/melee/skateboard/hoverboard, /mob/living/basic/chicken{ name = "Chicken Joe" }, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "rc" = ( /obj/machinery/light/directional/east, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ri" = ( /obj/structure/sign/poster/official/fruit_bowl, /turf/closed/wall/mineral/wood/nonmetal, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "rm" = ( /obj/item/storage/crayons, /obj/structure/closet/crate/wooden, @@ -371,11 +367,11 @@ /obj/item/canvas/twentythree_twentythree, /obj/item/canvas/twentythree_twentythree, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "rT" = ( /obj/item/toy/seashell, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "sT" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/template_noop, @@ -385,20 +381,19 @@ name = "Resort Casino" }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "tF" = ( /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "tZ" = ( /obj/structure/toilet, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "uc" = ( /obj/machinery/light/small/directional/east, -/obj/machinery/light/small/directional/east, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ug" = ( /obj/structure/closet/secure_closet{ icon_state = "cabinet"; @@ -414,31 +409,33 @@ /obj/item/clothing/suit/costume/hawaiian, /obj/machinery/light/small/directional/east, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "uk" = ( /obj/structure/closet/crate/hydroponics, /obj/item/shovel/spade, /obj/item/reagent_containers/cup/bucket, /obj/item/cultivator, /turf/open/floor/iron/grimy, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "uq" = ( /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 +/obj/item/reagent_containers/cup/glass/drinkingglass/filled/pina_colada{ + pixel_x = 4 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/filled/pina_colada{ + pixel_x = -7; + pixel_y = 5 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "uU" = ( /obj/effect/turf_decal/sand, /turf/open/floor/sepia, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "uV" = ( /obj/structure/flora/coconuts, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ve" = ( /obj/item/toy/dodgeball, /obj/item/toy/dodgeball, @@ -446,33 +443,33 @@ /obj/item/toy/dodgeball, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "vp" = ( /obj/machinery/light/directional/east, /obj/structure/chair/stool/bar/directional/south, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "vq" = ( /obj/machinery/oven/range, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "vv" = ( /obj/structure/chair/stool/directional/south, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "vN" = ( /obj/structure/table/wood, /obj/item/reagent_containers/pill/morphine, /obj/item/reagent_containers/pill/morphine, /obj/item/reagent_containers/pill/morphine, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "vT" = ( /obj/structure/railing{ dir = 8 }, /turf/open/misc/beach/coast/corner, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "wb" = ( /obj/structure/closet/crate/freezer{ name = "Cooler" @@ -496,10 +493,10 @@ /obj/item/reagent_containers/cup/glass/bottle/beer/light, /obj/item/reagent_containers/cup/glass/bottle/beer/light, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "wD" = ( /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "xb" = ( /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors/virtual_domain) @@ -508,16 +505,16 @@ /obj/item/storage/dice, /obj/item/stack/spacecash/c1000, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "xq" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/south, /obj/item/megaphone, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "xw" = ( /turf/open/floor/pod/dark, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "xJ" = ( /obj/structure/closet/cabinet, /obj/item/storage/backpack/duffelbag, @@ -529,7 +526,7 @@ /obj/item/clothing/glasses/sunglasses, /obj/item/clothing/neck/beads, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "xR" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/north{ @@ -540,7 +537,7 @@ /obj/item/clothing/under/shorts/red, /obj/item/clothing/glasses/sunglasses, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "xW" = ( /turf/open/space/basic, /area/space) @@ -550,14 +547,14 @@ /obj/item/reagent_containers/pill/zoom, /obj/item/reagent_containers/pill/zoom, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "yi" = ( /obj/structure/sink/kitchen/directional/west{ desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; name = "old sink" }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "yl" = ( /obj/item/reagent_containers/cup/glass/colocup{ pixel_x = -7; @@ -572,39 +569,39 @@ pixel_y = -3 }, /turf/open/floor/carpet/red, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ys" = ( /obj/effect/turf_decal/sand, /obj/machinery/light/directional/east, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "yv" = ( /obj/effect/turf_decal/sand, /obj/machinery/food_cart, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "yB" = ( /obj/item/instrument/guitar, /turf/open/floor/carpet/blue, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "yU" = ( /obj/structure/sign/warning/gas_mask/directional/north, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "yX" = ( /obj/structure/chair/stool/bar/directional/south, /turf/open/floor/carpet/red, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "zn" = ( /obj/machinery/light/directional/east, /turf/open/misc/beach/coast{ dir = 8 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "zw" = ( /obj/structure/punching_bag, /turf/open/floor/pod/dark, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "zI" = ( /obj/structure/marker_beacon/indigo, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, @@ -612,7 +609,7 @@ "zU" = ( /obj/structure/flora/rock/pile/style_random, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Aa" = ( /obj/effect/turf_decal/sand, /obj/effect/turf_decal/stripes/asteroid/line{ @@ -620,11 +617,11 @@ }, /obj/machinery/light/directional/west, /turf/open/floor/sepia, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Ae" = ( /obj/structure/chair, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Al" = ( /turf/closed/mineral/random/volcanic, /area/lavaland/surface/outdoors/virtual_domain) @@ -635,19 +632,19 @@ "Au" = ( /obj/structure/fluff/beach_umbrella/science, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "AI" = ( /obj/structure/table/reinforced, /obj/machinery/reagentgrinder, /turf/open/floor/pod/light, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "AP" = ( /obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ dir = 1 }, /obj/structure/table/wood, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Br" = ( /obj/structure/table/wood/poker, /obj/item/toy/cards/deck/cas{ @@ -658,73 +655,73 @@ pixel_y = 2 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Bu" = ( /turf/open/misc/beach/coast{ dir = 8 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Bw" = ( /obj/structure/flora/bush/sparsegrass/style_random, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "BD" = ( /obj/structure/table/wood, /obj/item/reagent_containers/condiment/saltshaker, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "BJ" = ( /obj/structure/table/wood/poker, /obj/item/toy/cards/deck, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "BM" = ( /turf/closed/wall/mineral/wood/nonmetal, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "BQ" = ( /obj/machinery/seed_extractor, /turf/open/floor/pod/light, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Cb" = ( /obj/machinery/light/directional/north, /mob/living/basic/crab{ name = "Eddie" }, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Cv" = ( /obj/machinery/hydroponics/constructable, /turf/open/floor/iron/grimy, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "CA" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/mob_spawn/ghost_role/human/beach/lifeguard, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "CO" = ( /obj/machinery/vending/dinnerware, /obj/machinery/light/directional/east, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Db" = ( /obj/machinery/barsign/all_access, /turf/closed/wall/mineral/wood/nonmetal, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Ds" = ( /obj/machinery/door/airlock/public/glass{ name = "Resort Lobby" }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Dt" = ( /obj/machinery/light/directional/east, /obj/effect/turf_decal/sand, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "DL" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/closed/wall/mineral/sandstone, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Em" = ( /obj/item/reagent_containers/condiment/enzyme{ layer = 5 @@ -734,30 +731,32 @@ }, /obj/structure/table, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Et" = ( /obj/machinery/light/small/directional/east, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Ev" = ( /obj/structure/reagent_dispensers/beerkeg, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "EC" = ( /obj/structure/sign/warning/gas_mask/directional/west, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "EP" = ( /obj/machinery/light/directional/north, /obj/machinery/washing_machine, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Fn" = ( /turf/closed/wall/mineral/sandstone, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "FM" = ( -/obj/effect/landmark/bitrunning/safehouse_spawn, +/obj/modular_map_root/safehouse{ + key = "mine" + }, /turf/template_noop, /area/virtual_domain/safehouse) "FQ" = ( @@ -765,26 +764,26 @@ /obj/item/secateurs, /obj/item/reagent_containers/cup/bottle/nutrient/ez, /turf/open/floor/pod/light, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "FS" = ( /obj/effect/turf_decal/sand, /obj/structure/sign/warning/no_smoking/circle/directional/east, /obj/machinery/light/directional/east, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "FY" = ( /obj/structure/mineral_door/wood, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Gh" = ( /obj/effect/turf_decal/sand, /obj/structure/sign/poster/contraband/starkist/directional/north, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Gz" = ( /obj/structure/flora/tree/palm, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "GA" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/west, @@ -793,56 +792,56 @@ /obj/item/storage/medkit/regular, /obj/item/storage/medkit/brute, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Hs" = ( /obj/machinery/shower/directional/west, /turf/open/floor/iron/white, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "HF" = ( /obj/machinery/deepfryer, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Ia" = ( /obj/structure/urinal/directional/north, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Ii" = ( /obj/machinery/light/directional/west, /turf/open/floor/iron/stairs/left, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Ir" = ( /obj/machinery/vending/cola, /obj/effect/turf_decal/sand, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Iv" = ( /obj/structure/table/wood, /obj/item/reagent_containers/condiment/peppermill, /obj/item/reagent_containers/condiment/soysauce, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "IH" = ( /obj/item/toy/beach_ball, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "IM" = ( /obj/machinery/hydroponics/constructable, /obj/machinery/light/directional/east, /turf/open/floor/iron/grimy, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "IP" = ( /obj/machinery/vending/snack, /obj/effect/turf_decal/sand, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Jt" = ( /obj/item/reagent_containers/cup/glass/bottle/beer, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "JC" = ( /obj/structure/fluff/beach_umbrella/engine, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "JE" = ( /obj/structure/closet/secure_closet/freezer/kitchen/all_access, /obj/item/reagent_containers/condiment/milk, @@ -850,53 +849,53 @@ /obj/item/reagent_containers/condiment/flour, /obj/item/reagent_containers/condiment/flour, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "JY" = ( /obj/structure/flora/rock/style_random, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Kd" = ( /obj/structure/sign/warning/secure_area, /turf/closed/wall/mineral/sandstone, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "KH" = ( /obj/structure/mineral_door/wood{ name = "Croupier's Booth" }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "KZ" = ( /obj/structure/flora/bush/stalky/style_random, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "LD" = ( /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "LW" = ( /obj/item/storage/cans/sixbeer, /turf/open/floor/carpet/orange, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Mp" = ( /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/pina_colada{ + pixel_x = 8; + pixel_y = 4 }, -/obj/item/reagent_containers/cup/glass/drinkingglass/filled/virtual_domain, +/obj/item/reagent_containers/cup/glass/drinkingglass/filled/pina_colada, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Mw" = ( /obj/structure/chair/sofa/right/brown, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Mz" = ( /obj/structure/chair/sofa/left/brown, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Nr" = ( /obj/machinery/light/directional/north, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Nw" = ( /obj/item/bedsheet/dorms{ dir = 4 @@ -905,7 +904,7 @@ dir = 4 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "NM" = ( /obj/structure/closet/crate/hydroponics, /obj/item/food/grown/ambrosia/vulgaris, @@ -919,32 +918,32 @@ /obj/item/food/grown/ambrosia/vulgaris, /obj/item/food/grown/ambrosia/vulgaris, /turf/open/floor/iron/grimy, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "NX" = ( /obj/effect/landmark/bitrunning/loot_signal, /turf/open/floor/light/colour_cycle/dancefloor_a, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "OE" = ( /obj/effect/mob_spawn/ghost_role/human/beach{ dir = 4 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "OK" = ( /obj/structure/sign/warning/gas_mask/directional/north, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "OR" = ( /obj/machinery/light/directional/south, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "OW" = ( /obj/structure/sink/kitchen/directional/east{ desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; name = "old sink" }, /turf/open/floor/pod/light, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "OZ" = ( /obj/structure/marker_beacon/teal, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, @@ -953,30 +952,30 @@ /obj/structure/chair/wood, /obj/machinery/light/directional/west, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Pg" = ( /obj/structure/sign/poster/official/high_class_martini/directional/west, /obj/effect/mob_spawn/ghost_role/human/bartender{ dir = 4 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "PM" = ( /obj/machinery/door/airlock/external/ruin, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Qb" = ( /obj/machinery/griddle, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Qu" = ( /obj/structure/curtain, /turf/open/floor/iron/white, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "QP" = ( /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "QX" = ( /obj/machinery/chem_dispenser/drinks/fullupgrade{ dir = 1 @@ -984,10 +983,10 @@ /obj/structure/table/wood, /obj/machinery/light/small/directional/east, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Rx" = ( /turf/open/floor/iron/stairs/medium, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "RL" = ( /obj/structure/closet/cabinet, /obj/item/storage/backpack/duffelbag, @@ -999,173 +998,173 @@ /obj/item/clothing/glasses/sunglasses/big, /obj/item/clothing/neck/beads, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Sg" = ( /obj/structure/flora/coconuts, /obj/machinery/light/directional/north, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "SB" = ( /obj/machinery/door/airlock/sandstone{ name = "Resort Bathroom" }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "SD" = ( /obj/machinery/door/airlock/sandstone{ name = "Bar Access" }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "SY" = ( /obj/machinery/door/airlock/sandstone{ name = "Surfer Shack 2" }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "TG" = ( /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "TJ" = ( /obj/structure/fluff/beach_umbrella/security, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "TX" = ( /obj/structure/sign/poster/contraband/ambrosia_vulgaris/directional/north, /turf/open/floor/iron/grimy, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Ud" = ( /obj/effect/turf_decal/sand, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Uh" = ( /turf/open/floor/iron/stairs/old, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Uq" = ( /obj/structure/weightmachine/weightlifter, /turf/open/floor/pod/dark, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "UU" = ( /obj/structure/flora/bush/large/style_random, /obj/structure/flora/bush/jungle/a/style_random, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Ve" = ( /obj/machinery/processor, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "VA" = ( /obj/machinery/computer/slot_machine, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "VH" = ( /obj/machinery/light/directional/west, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "VX" = ( /obj/structure/flora/bush/large/style_random, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "We" = ( /obj/structure/table/wood, /obj/item/book/manual/wiki/cooking_to_serve_man, /obj/item/clothing/suit/apron/chef, /obj/item/clothing/head/utility/chefhat, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Wg" = ( /obj/structure/dresser, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Ww" = ( /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "WL" = ( /obj/machinery/light/directional/north, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "WO" = ( /obj/structure/flora/bush/jungle/a/style_random, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "WW" = ( /obj/effect/turf_decal/sand, /obj/machinery/icecream_vat, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "WX" = ( /obj/item/toy/plush/lizard_plushie/green{ name = "Soaks-The-Rays" }, /turf/open/floor/carpet/orange, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Xt" = ( /turf/open/misc/beach/coast/corner{ dir = 4 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Xv" = ( /obj/structure/table/wood, /obj/structure/bedsheetbin, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "XL" = ( /obj/machinery/light/directional/east, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "XM" = ( /turf/open/misc/beach/coast, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "XP" = ( /turf/open/floor/carpet/blue, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "XT" = ( /obj/effect/turf_decal/sand, /obj/structure/sign/departments/botany/directional/south, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Yi" = ( /obj/structure/flora/bush/sparsegrass/style_random, /obj/item/toy/seashell, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Yq" = ( /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "YI" = ( /obj/machinery/door/airlock/maintenance{ name = "Supply Room" }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "YJ" = ( /turf/open/floor/carpet/purple, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "YN" = ( /obj/effect/turf_decal/sand, /obj/machinery/light/directional/west, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Zb" = ( /obj/structure/sign/poster/official/cohiba_robusto_ad/directional/west, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Zd" = ( /obj/structure/sign/poster/contraband/space_cola/directional/north, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Zg" = ( /obj/structure/table, /obj/machinery/microwave, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Zt" = ( /obj/structure/table/wood, /obj/item/reagent_containers/pill/morphine, /obj/item/storage/fancy/donut_box, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) (1,1,1) = {" pr diff --git a/_maps/virtual_domains/blood_drunk_miner.dmm b/_maps/virtual_domains/blood_drunk_miner.dmm index c3369a1c822de7..7fffbabfc0b628 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 @@ -146,7 +146,9 @@ /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, /area/lavaland/surface/outdoors/virtual_domain) "L" = ( -/obj/effect/landmark/bitrunning/safehouse_spawn, +/obj/modular_map_root/safehouse{ + key = "lavaland_boss" + }, /turf/template_noop, /area/virtual_domain/safehouse) "O" = ( @@ -171,7 +173,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 00000000000000..b1d9b904d83b00 --- /dev/null +++ b/_maps/virtual_domains/breeze_bay.dmm @@ -0,0 +1,856 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/closed/indestructible/binary, +/area/virtual_domain/fullbright) +"c" = ( +/obj/structure/flora/coconuts, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"d" = ( +/obj/structure/chair/wood, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"e" = ( +/turf/open/floor/carpet/red, +/area/virtual_domain/fullbright) +"g" = ( +/obj/item/toy/beach_ball/branded, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"h" = ( +/obj/machinery/light/small/directional/south, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"i" = ( +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"k" = ( +/obj/effect/landmark/bitrunning/loot_signal, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"l" = ( +/obj/effect/baseturf_helper/virtual_domain, +/obj/modular_map_root/safehouse{ + key = "wood" + }, +/turf/template_noop, +/area/virtual_domain/safehouse) +"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/fullbright) +"o" = ( +/obj/structure/flora/tree/jungle/style_5, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"p" = ( +/turf/open/floor/carpet/blue, +/area/virtual_domain/fullbright) +"s" = ( +/obj/structure/fluff/beach_umbrella/cap, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"t" = ( +/obj/structure/fluff/beach_umbrella/syndi, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"y" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"z" = ( +/mob/living/basic/crab, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"B" = ( +/obj/structure/flora/tree/jungle/style_6, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"C" = ( +/obj/structure/flora/tree/jungle/style_2, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"D" = ( +/turf/open/floor/carpet/green, +/area/virtual_domain/fullbright) +"F" = ( +/obj/structure/fluff/beach_umbrella/engine, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"G" = ( +/obj/structure/flora/bush/jungle/a/style_random, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"H" = ( +/obj/structure/flora/tree/jungle/style_4, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"I" = ( +/turf/template_noop, +/area/virtual_domain/safehouse) +"J" = ( +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"K" = ( +/obj/structure/flora/tree/jungle, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"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, +/obj/item/bait_can/worm, +/obj/item/bait_can/worm, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"N" = ( +/obj/machinery/light/small/directional/north, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"O" = ( +/obj/structure/flora/rock/style_random, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"P" = ( +/turf/open/misc/beach/coast, +/area/virtual_domain/fullbright) +"Q" = ( +/obj/structure/flora/bush/stalky/style_random, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"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/fullbright) +"S" = ( +/obj/structure/flora/tree/jungle/style_3, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"T" = ( +/obj/machinery/light/small/directional/east, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"U" = ( +/obj/structure/flora/tree/palm/style_random, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"X" = ( +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"Y" = ( +/obj/machinery/light/small/directional/west, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Z" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/closed/indestructible/binary, +/area/virtual_domain/fullbright) + +(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 +T +J +J +J +J +T +z +P +i +i +i +i +i +i +i +Q +i +i +i +a +"} +(3,1,1) = {" +a +J +O +J +h +I +I +I +I +I +l +N +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 +h +I +I +I +I +I +I +N +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(10,1,1) = {" +a +o +J +J +J +Y +J +J +J +J +Y +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 +c +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 +c +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 3381b1735398b6..ef6957448925ad 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" = ( @@ -69,7 +69,9 @@ /turf/template_noop, /area/virtual_domain/safehouse) "T" = ( -/obj/effect/landmark/bitrunning/safehouse_spawn, +/obj/modular_map_root/safehouse{ + key = "lavaland_boss" + }, /turf/template_noop, /area/virtual_domain/safehouse) "W" = ( @@ -134,6 +136,16 @@ F F F F +F +F +F +F +F +F +F +F +F +F R "} (2,1,1) = {" @@ -182,16 +194,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 +696,6 @@ a a a a -Z -Z -Z a a a @@ -219,22 +704,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 +750,7 @@ a a a a +x a a a @@ -270,19 +772,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 +830,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 +883,6 @@ a a a a -G -a -a a a a @@ -371,19 +893,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 +930,6 @@ a a a a -x a a a @@ -416,36 +952,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 +1058,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 +1110,15 @@ a a a a +Z +Z +Z a a a a a +M a a a @@ -518,21 +1128,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 +1168,10 @@ a a a a +Z +Z +Z +a a a a @@ -566,21 +1186,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 +1226,6 @@ a a a a -Z -Z a a a @@ -606,29 +1234,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 +1279,10 @@ a a a a +I +a +a a -Z -Z a a a @@ -655,19 +1290,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 +1327,10 @@ a a a a +W +a +a +a a a a @@ -693,15 +1345,11 @@ a a a a -Z -Z -Z a a a a a -M a a a @@ -709,12 +1357,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 +1400,6 @@ a a a a -Z -Z -Z a a a @@ -757,12 +1413,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 +1467,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 +1512,6 @@ a a a a -I a a a @@ -854,11 +1533,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 +1559,6 @@ a a a a -W -a -a -a -a -a -a a a a @@ -900,13 +1582,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 +1641,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 +1683,7 @@ a a a a +C a a a @@ -989,27 +1699,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 +1754,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 +1815,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 +1881,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 +1915,6 @@ a a a a -C a a a @@ -1182,19 +1930,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 +1966,10 @@ a a a a +f +a +a +a a a a @@ -1227,27 +1990,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 +2034,7 @@ a a a a +r a a a @@ -1278,25 +2050,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 +2108,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 +2168,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 +2193,12 @@ a a a a +Z a a a a a -f a a a @@ -1430,12 +2229,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 +2265,6 @@ a a a a -r a a a @@ -1471,6 +2278,8 @@ a a a a +d +a a a a @@ -1478,20 +2287,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 +2330,7 @@ a a a a +Z a a a @@ -1526,22 +2345,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 +2378,7 @@ a a a a +X a a a @@ -1561,6 +2387,9 @@ a a a a +Z +Z +Z a a a @@ -1574,11 +2403,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 +2426,6 @@ a a a a -Z -a -a -a a a a @@ -1609,6 +2445,9 @@ a a a a +Z +Z +Z a a a @@ -1622,17 +2461,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 +2510,6 @@ a a a a -d a a a @@ -1670,40 +2518,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 +2576,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 +2606,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 +2635,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 +2677,6 @@ a a a a -Z -Z -Z a a a @@ -1813,13 +2689,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 +2742,7 @@ a a a a +Y a a a @@ -1862,34 +2752,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 +2796,9 @@ a a a a -Z -Z -F -"} -(39,1,1) = {" -F -Z a a a -p -p a a a @@ -1932,227 +2811,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 +3203,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/clown_planet.dmm b/_maps/virtual_domains/clown_planet.dmm index 01d7b88a5efb5f..72cc1280b63ccd 100644 --- a/_maps/virtual_domains/clown_planet.dmm +++ b/_maps/virtual_domains/clown_planet.dmm @@ -7,15 +7,15 @@ /obj/machinery/light/small/directional/west, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "aI" = ( /obj/item/bikehorn/airhorn, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "aM" = ( /obj/item/bikehorn, /turf/open/indestructible/honk, -/area/virtual_domain/powered) +/area/virtual_domain) "aP" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -23,7 +23,7 @@ /obj/effect/decal/cleanable/food/pie_smudge, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "ba" = ( /obj/structure/mecha_wreckage/honker, /obj/structure/disposalpipe/segment{ @@ -31,7 +31,7 @@ invisibility = 101 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "bi" = ( /obj/item/bikehorn, /obj/structure/disposalpipe/segment{ @@ -39,19 +39,19 @@ }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "bp" = ( /turf/open/indestructible/light, -/area/virtual_domain/powered) +/area/virtual_domain) "bq" = ( /obj/structure/disposalpipe/segment{ dir = 10 }, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "by" = ( /turf/closed/wall/r_wall, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "bQ" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -59,26 +59,26 @@ }, /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "bR" = ( /obj/item/paper/crumpled/bloody/ruins/lavaland/clown_planet/hope, /obj/effect/decal/cleanable/blood/old, /obj/effect/mapping_helpers/no_lava, /turf/open/floor/noslip, -/area/virtual_domain/powered) +/area/virtual_domain) "bU" = ( /obj/structure/disposalpipe/segment{ dir = 9 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "cw" = ( /obj/structure/disposalpipe/segment{ dir = 6 }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "cM" = ( /obj/structure/disposalpipe/trunk{ dir = 8 @@ -87,7 +87,7 @@ dir = 1 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "cW" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -95,21 +95,21 @@ }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "ed" = ( /obj/structure/disposalpipe/segment{ invisibility = 101 }, /obj/machinery/light/small/directional/west, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "eE" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/disposalpipe/segment{ invisibility = 101 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "fh" = ( /obj/effect/mob_spawn/corpse/human/damaged, /obj/effect/decal/cleanable/blood/old, @@ -118,7 +118,7 @@ }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "gr" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/template_noop, @@ -129,23 +129,23 @@ }, /obj/effect/baseturf_helper/virtual_domain, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "gH" = ( /obj/item/bikehorn, /obj/effect/decal/cleanable/dirt, /turf/open/indestructible/honk, -/area/virtual_domain/powered) +/area/virtual_domain) "gK" = ( /obj/structure/disposalpipe/segment{ dir = 9 }, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "hK" = ( /obj/item/clothing/head/cone, /obj/effect/mapping_helpers/no_lava, /turf/open/floor/noslip, -/area/virtual_domain/powered) +/area/virtual_domain) "hY" = ( /turf/template_noop, /area/template_noop) @@ -157,24 +157,24 @@ dir = 4 }, /turf/open/floor/noslip, -/area/virtual_domain/powered) +/area/virtual_domain) "ik" = ( /turf/open/lava/smooth, -/area/virtual_domain/powered) +/area/virtual_domain) "iR" = ( /obj/structure/disposalpipe/segment{ dir = 4; invisibility = 101 }, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "ki" = ( /obj/structure/disposalpipe/segment{ dir = 4; invisibility = 101 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "kn" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -182,7 +182,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "lj" = ( /obj/structure/disposalpipe/trunk{ dir = 4 @@ -191,14 +191,14 @@ dir = 8 }, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "lm" = ( /obj/structure/disposalpipe/segment{ dir = 9 }, /obj/machinery/light/small/directional/east, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "lr" = ( /obj/item/bikehorn, /obj/effect/decal/cleanable/dirt, @@ -207,60 +207,60 @@ }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "lx" = ( /obj/structure/disposalpipe/segment{ dir = 9 }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "ly" = ( /obj/structure/disposalpipe/segment{ dir = 9 }, /turf/closed/indestructible/binary, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "lP" = ( /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "mD" = ( /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "mE" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "mF" = ( /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "nE" = ( /obj/effect/mapping_helpers/no_lava, /turf/closed/wall/r_wall, -/area/virtual_domain/powered) +/area/virtual_domain) "oA" = ( /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "oI" = ( /obj/structure/table/glass, /obj/item/grown/bananapeel/bluespace, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "pl" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "ps" = ( /obj/structure/disposalpipe/segment{ dir = 6 }, /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "qM" = ( /obj/structure/disposalpipe/segment{ invisibility = 101 @@ -268,7 +268,7 @@ /obj/machinery/light/small/directional/north, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "rg" = ( /obj/item/coin/bananium, /obj/item/coin/bananium, @@ -276,19 +276,19 @@ /obj/item/coin/bananium, /obj/machinery/light/small/directional/west, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "rh" = ( /obj/structure/disposalpipe/segment{ dir = 6 }, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "rr" = ( /obj/structure/disposalpipe/segment{ dir = 5 }, /turf/closed/indestructible/binary, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "rH" = ( /obj/structure/disposalpipe/junction/yjunction{ dir = 1; @@ -297,46 +297,46 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "rT" = ( /obj/structure/disposalpipe/segment{ dir = 6 }, /turf/closed/indestructible/binary, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "sq" = ( /obj/machinery/light/directional/north, /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "sT" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 1 }, /obj/effect/mapping_helpers/mail_sorting/supply/qm_office, /turf/closed/wall/r_wall, -/area/virtual_domain/powered) +/area/virtual_domain) "tq" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "tt" = ( /obj/structure/disposalpipe/segment{ dir = 4; invisibility = 101 }, /turf/open/indestructible/light, -/area/virtual_domain/powered) +/area/virtual_domain) "tv" = ( /obj/effect/mob_spawn/corpse/human/damaged, /obj/effect/decal/cleanable/blood/old, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "tF" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/closed/indestructible/binary, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "tI" = ( /obj/item/coin/bananium, /obj/item/coin/bananium, @@ -344,15 +344,15 @@ /obj/item/coin/bananium, /obj/machinery/light/small/directional/east, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "uX" = ( /obj/effect/mapping_helpers/no_lava, /mob/living/basic/clown, /turf/open/floor/noslip, -/area/virtual_domain/powered) +/area/virtual_domain) "uY" = ( /turf/closed/mineral/bananium, -/area/virtual_domain/powered) +/area/virtual_domain) "uZ" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -362,32 +362,34 @@ /obj/item/paper/crumpled/bloody/ruins/lavaland/clown_planet/escape, /obj/item/pen/fourcolor, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "wz" = ( /obj/machinery/light/small/directional/south, /obj/effect/mapping_helpers/no_lava, /mob/living/basic/clown, /turf/open/floor/noslip, -/area/virtual_domain/powered) +/area/virtual_domain) "xt" = ( -/obj/effect/landmark/bitrunning/safehouse_spawn, +/obj/modular_map_root/safehouse{ + key = "mine" + }, /turf/template_noop, /area/virtual_domain/safehouse) "yd" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "yz" = ( /obj/structure/disposalpipe/segment{ dir = 10 }, /turf/closed/wall/r_wall, -/area/virtual_domain/powered) +/area/virtual_domain) "yS" = ( /obj/structure/marker_beacon/yellow, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "yZ" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -395,16 +397,16 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "zm" = ( /obj/effect/decal/cleanable/cobweb, /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "zA" = ( /obj/structure/statue/bananium/clown, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "zF" = ( /obj/structure/disposalpipe/trunk{ dir = 4 @@ -413,14 +415,14 @@ dir = 8 }, /turf/open/floor/noslip, -/area/virtual_domain/powered) +/area/virtual_domain) "Aa" = ( /obj/structure/disposalpipe/segment{ dir = 9 }, /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "Bi" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -429,7 +431,7 @@ /obj/effect/decal/cleanable/cobweb, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "Cp" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -437,7 +439,7 @@ }, /obj/machinery/light/small/directional/west, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "Cs" = ( /obj/item/bikehorn, /obj/structure/disposalpipe/segment{ @@ -446,10 +448,7 @@ }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) -"Dh" = ( -/turf/closed/wall/r_wall, -/area/virtual_domain/powered) +/area/virtual_domain) "Do" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -457,7 +456,7 @@ }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "DL" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -465,35 +464,35 @@ /obj/item/bikehorn, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "Ex" = ( /obj/structure/disposalpipe/segment{ dir = 10 }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "FI" = ( /obj/item/reagent_containers/cup/glass/trophy/gold_cup, /obj/structure/table/glass, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "Gg" = ( /obj/structure/table/glass, /obj/item/gun/magic/staff/honk, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "Hq" = ( /obj/structure/disposalpipe/segment{ dir = 6 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Hr" = ( /obj/structure/table/glass, /obj/item/clothing/shoes/clown_shoes/banana_shoes, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "HQ" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -501,10 +500,10 @@ /obj/machinery/light/small/directional/east, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "Ie" = ( /turf/closed/indestructible/binary, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "Iz" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -512,20 +511,20 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "IN" = ( /obj/structure/disposalpipe/segment{ dir = 6 }, /turf/closed/wall/r_wall, -/area/virtual_domain/powered) +/area/virtual_domain) "IY" = ( /turf/open/indestructible/honk, -/area/virtual_domain/powered) +/area/virtual_domain) "Jv" = ( /obj/effect/decal/cleanable/dirt, /turf/open/indestructible/honk, -/area/virtual_domain/powered) +/area/virtual_domain) "JB" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -534,28 +533,28 @@ /obj/machinery/light/small/directional/north, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "Ka" = ( /obj/effect/decal/cleanable/food/pie_smudge, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "Kh" = ( /obj/effect/mob_spawn/corpse/human/damaged, /obj/effect/decal/cleanable/blood/old, /turf/open/indestructible/honk, -/area/virtual_domain/powered) +/area/virtual_domain) "KG" = ( /obj/item/pickaxe, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "KI" = ( /obj/structure/disposalpipe/segment{ dir = 4; invisibility = 101 }, /turf/closed/wall/r_wall, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "Lv" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -563,18 +562,18 @@ }, /obj/machinery/light/small/directional/east, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "Nv" = ( /obj/effect/decal/cleanable/cobweb, /turf/open/indestructible/honk, -/area/virtual_domain/powered) +/area/virtual_domain) "NB" = ( /obj/machinery/disposal/delivery_chute, /obj/structure/disposalpipe/trunk{ dir = 1 }, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "NL" = ( /obj/machinery/disposal/delivery_chute{ desc = "The following is engraved upon the chute: A FATE WORSE THAN DEATH LIES WITHIN"; @@ -584,12 +583,12 @@ /obj/structure/disposalpipe/trunk, /obj/effect/mapping_helpers/no_lava, /turf/open/floor/noslip, -/area/virtual_domain/powered) +/area/virtual_domain) "NW" = ( /obj/structure/table/glass, /obj/item/reagent_containers/spray/waterflower/superlube, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "Ok" = ( /obj/item/bikehorn, /obj/structure/disposalpipe/segment{ @@ -597,7 +596,7 @@ }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "Ov" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -605,7 +604,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "PJ" = ( /obj/structure/disposalpipe/trunk, /obj/structure/disposaloutlet{ @@ -613,10 +612,10 @@ }, /obj/effect/mapping_helpers/no_lava, /turf/open/floor/noslip, -/area/virtual_domain/powered) +/area/virtual_domain) "PM" = ( /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "PQ" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -624,20 +623,20 @@ }, /obj/item/pickaxe, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "QP" = ( /turf/template_noop, /area/virtual_domain/safehouse) "QX" = ( /obj/structure/closet/crate/secure/bitrunning/encrypted, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "Rh" = ( /obj/structure/disposalpipe/segment{ dir = 5 }, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "Rx" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -646,13 +645,13 @@ /obj/structure/table, /obj/item/flashlight/lamp/bananalamp, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "RU" = ( /obj/structure/disposalpipe/segment{ invisibility = 101 }, /turf/closed/indestructible/binary, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "Sg" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -661,13 +660,13 @@ /obj/effect/decal/cleanable/food/pie_smudge, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "Sm" = ( /obj/structure/disposalpipe/segment{ dir = 5 }, /turf/closed/wall/r_wall, -/area/virtual_domain/powered) +/area/virtual_domain) "Tm" = ( /obj/effect/decal/cleanable/food/pie_smudge, /obj/structure/disposalpipe/segment{ @@ -675,13 +674,13 @@ }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "Tx" = ( /obj/structure/disposalpipe/segment{ invisibility = 101 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "TH" = ( /obj/structure/disposalpipe/trunk{ dir = 4 @@ -690,67 +689,60 @@ dir = 8 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "TK" = ( /obj/structure/disposalpipe/segment{ invisibility = 101 }, /turf/closed/wall/r_wall, -/area/virtual_domain/powered) +/area/virtual_domain) "Ug" = ( /obj/machinery/light/small/directional/north, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "UL" = ( /obj/effect/decal/cleanable/oil, /obj/structure/disposalpipe/segment{ dir = 10 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "UN" = ( /obj/structure/disposalpipe/segment{ dir = 10 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "UQ" = ( /obj/structure/disposalpipe/segment{ invisibility = 101 }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "UY" = ( /obj/structure/disposalpipe/segment{ dir = 5 }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) -"Vv" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - invisibility = 101 - }, -/turf/closed/wall/r_wall, -/area/virtual_domain/powered) +/area/virtual_domain) "Vx" = ( /obj/structure/disposalpipe/segment{ dir = 4; invisibility = 101 }, /turf/closed/indestructible/binary, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "VI" = ( /obj/structure/disposalpipe/segment{ dir = 10 }, /turf/closed/indestructible/binary, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "VQ" = ( /turf/open/floor/noslip, -/area/virtual_domain/powered) +/area/virtual_domain) "Ww" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -759,40 +751,40 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "WB" = ( /obj/machinery/disposal/delivery_chute{ dir = 1 }, /obj/structure/disposalpipe/trunk, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "WT" = ( /obj/machinery/door/airlock/bananium, -/turf/open/indestructible/honk, -/area/virtual_domain/powered) +/turf/open/floor/carpet, +/area/virtual_domain) "WX" = ( /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "Xp" = ( /obj/machinery/light/directional/south, /turf/open/indestructible/honk, -/area/virtual_domain/powered) +/area/virtual_domain) "XB" = ( /obj/machinery/light/directional/north, /turf/open/indestructible/honk, -/area/virtual_domain/powered) +/area/virtual_domain) "Yb" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/indestructible/honk, -/area/virtual_domain/powered) +/area/virtual_domain) "YP" = ( /obj/structure/disposalpipe/segment{ dir = 4; invisibility = 101 }, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "ZR" = ( /obj/structure/disposalpipe/trunk{ dir = 8 @@ -801,7 +793,7 @@ dir = 4 }, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) (1,1,1) = {" Ie @@ -904,13 +896,13 @@ Ie Ie Ie Ie -Dh -Dh -Dh -Dh -Dh -Dh -Dh +by +by +by +by +by +by +by Ie Ie Ie @@ -918,11 +910,11 @@ Ie Ie Ie Ie -Dh -Dh -Dh -Dh -Dh +by +by +by +by +by Ie Ie Ie @@ -948,29 +940,29 @@ Vx Ie Ie Ie -Dh -Dh -Dh +by +by +by ik ik ik ik ik -Dh -Dh +by +by Ie Ie Ie Ie Ie -Dh -Dh +by +by ik ik ik -Dh -Dh -Dh +by +by +by Ie Ie Ie @@ -993,8 +985,8 @@ Ie Vx Ie Ie -Dh -Dh +by +by ik ik ik @@ -1003,21 +995,21 @@ Sm Hq Sm ik -Dh -Dh +by +by Ie Ie Ie -Dh -Dh +by +by ik ik tq mD ik ik -Dh -Dh +by +by Ie Ie Ie @@ -1038,8 +1030,8 @@ Ie Ie Vx Ie -Dh -Dh +by +by ik ik IN @@ -1050,11 +1042,11 @@ yZ aP Sm ik -Dh -Dh -Dh -Dh -Dh +by +by +by +by +by Nv IY tq @@ -1063,8 +1055,8 @@ ik ik ik ik -Dh -Dh +by +by Ie Ie Vx @@ -1084,23 +1076,23 @@ Ie Ie Vx Ie -Dh +by ik ik -Dh +by Bi cw UQ lr UQ UY -Vv +KI ik -Dh +by IY Jv IY -Dh +by IY Jv Kh @@ -1110,7 +1102,7 @@ ik tq ik ik -Dh +by Ie Ie Vx @@ -1129,8 +1121,8 @@ hY Ie Ie Vx -Dh -Dh +by +by ik IN Tm @@ -1139,9 +1131,9 @@ Ww cw UQ Sm -Vv -Vv -Dh +KI +KI +by zm oA IY @@ -1152,12 +1144,12 @@ Jv IY IY IY -Dh +by ik mD ik -Dh -Dh +by +by Ie Vx hY @@ -1175,27 +1167,27 @@ hY Ie Ie Vx -Dh +by ik ik UN UQ UY Ww -Vv +KI TH -Vv +KI YP Cp uY -Dh +by sq oA IY -Dh -Dh +by +by Jv -Dh +by IY IY IY @@ -1203,7 +1195,7 @@ tq ik ik ik -Dh +by Ie Vx Ie @@ -1221,7 +1213,7 @@ tF Ie Ie Vx -Dh +by ik IN UQ @@ -1229,14 +1221,14 @@ UQ yZ Do Do -Vv +KI YP YP YP KG uY -Dh -Dh +by +by oA IY IY @@ -1246,10 +1238,10 @@ IY gH Jv Xp -Dh +by ik ik -Dh +by by KI by @@ -1267,15 +1259,15 @@ Ie Ie Ie Vx -Dh +by ik yz fh UQ UY -Vv +KI Ww -Vv +KI YP YP tt @@ -1285,7 +1277,7 @@ oA oA oA IY -Dh +by IY IY Jv @@ -1295,7 +1287,7 @@ IY ik tq ik -Dh +by by iR PM @@ -1313,7 +1305,7 @@ Ie Ie Ie Vx -Dh +by ik Hq TK @@ -1321,18 +1313,18 @@ qM yZ Ww Ww -Vv +KI YP PQ tt bp uY -Dh +by oA oA IY IY -Dh +by IY IY IY @@ -1359,7 +1351,7 @@ Ie Ie Ie Vx -Dh +by ik UN UQ @@ -1368,20 +1360,20 @@ DL Ww yz lx -Vv +KI YP Lv WX -Dh -Dh +by +by oA IY IY -Dh -Dh +by +by IY IY -Dh +by IY Jv ik @@ -1403,8 +1395,8 @@ Ie "} (14,1,1) = {" Ie -Dh -Vv +by +KI nE nE mD @@ -1415,17 +1407,17 @@ Ex Tm UQ lx -Vv -Vv +KI +KI ps TK Sm -Dh -Dh -Dh +by +by +by zA rg -Dh +by XB IY Jv @@ -1449,11 +1441,11 @@ Ie "} (15,1,1) = {" Ie -Dh +by ij hK nE -Dh +by yz UQ UQ @@ -1466,13 +1458,13 @@ Do Iz kn Ww -Dh -Dh +by +by FI mF mF mF -Dh +by IY Jv Jv @@ -1495,7 +1487,7 @@ Ie "} (16,1,1) = {" Ie -Dh +by VQ uX NL @@ -1513,13 +1505,13 @@ pl Do Ex UY -Dh +by Ug oI NW mF -Dh -Dh +by +by Jv IY IY @@ -1541,11 +1533,11 @@ Ie "} (17,1,1) = {" Ie -Dh +by VQ bR wz -Dh +by Hq UQ Sm @@ -1568,7 +1560,7 @@ WT IY Jv IY -Dh +by ik tq ik @@ -1587,7 +1579,7 @@ Ie "} (18,1,1) = {" Ie -Dh +by VQ uX PJ @@ -1596,7 +1588,7 @@ sT kn Do Do -Vv +KI Do Ov UQ @@ -1605,12 +1597,12 @@ Ok mE rH pl -Dh +by mF Hr Gg mF -Dh +by IY IY IY @@ -1633,12 +1625,12 @@ Ie "} (19,1,1) = {" Ie -Dh +by zF uX nE -Dh -Dh +by +by Ww Ww Ww @@ -1649,14 +1641,14 @@ lP Ex UY Ka -Vv +KI tv -Dh +by FI mF mF QX -Dh +by IY IY IY @@ -1679,29 +1671,29 @@ Ie "} (20,1,1) = {" Ie -Dh -Vv +by +KI nE nE ik -Dh +by Ww Ww Cs Do Do -Vv -Dh -Dh +KI +by +by bQ -Dh +by ba -Dh +by IY -Dh +by zA tI -Dh +by XB IY Jv @@ -1727,26 +1719,26 @@ Ie Ie Ie Vx -Dh +by ik -Dh -Dh +by +by Do Do Do Ww Do -Vv +KI rh ed gK -Dh +by UL Sm IY IY -Dh -Dh +by +by Kh IY IY @@ -1773,26 +1765,26 @@ Ie Ie Ie Vx -Dh +by ik -Dh -Dh +by +by JB Sg -Vv +KI Ww -Vv +KI uZ YP bp bp uY -Dh +by bQ oA IY IY -Dh +by IY Jv IY @@ -1819,15 +1811,15 @@ Ie Ie Ie Vx -Dh +by ik cM eE lx -Vv +KI ki Ww -Vv +KI Rx YP bp @@ -1835,7 +1827,7 @@ bp WB TK Aa -Dh +by IY IY Jv @@ -1844,10 +1836,10 @@ Jv IY aM Xp -Dh +by tq ik -Dh +by by iR PM @@ -1865,10 +1857,10 @@ Ie Ie Ie Vx -Dh +by ik -Dh -Dh +by +by lP Do Do @@ -1879,7 +1871,7 @@ bq Rh WX uY -Dh +by oA oA IY @@ -1888,12 +1880,12 @@ Jv Jv IY IY -Dh -Dh +by +by ik mD ik -Dh +by by KI by @@ -1911,20 +1903,20 @@ Ie Ie Ie Vx -Dh +by ik -Dh -Dh +by +by pl Do -Vv +KI Do -Vv -Vv +KI +KI rh lm uY -Dh +by sq oA IY @@ -1932,14 +1924,14 @@ IY IY IY IY -Dh +by IY IY ik mD ik ik -Dh +by Ie Vx Ie @@ -1957,19 +1949,19 @@ Ie Ie Ie Vx -Dh +by ik ik -Dh +by yd Do Do Do Ex lx -Vv -Dh -Dh +KI +by +by oA oA IY @@ -1980,12 +1972,12 @@ aM IY IY IY -Dh +by ik tq ik -Dh -Dh +by +by Ie Vx hY @@ -2003,34 +1995,34 @@ hY Ie Ie Vx -Dh -Dh +by +by ik -Dh -Dh +by +by Ex lx HQ UQ UQ bU -Dh +by ik -Dh +by Yb IY IY -Dh +by IY IY -Dh +by IY IY ik mD ik ik -Dh +by Ie Ie Vx @@ -2050,23 +2042,23 @@ Ie Ie Vx Ie -Dh -Dh +by +by ik ik -Dh +by mD -Dh +by Ka lP mD -Dh +by ik -Dh -Dh -Dh -Dh -Dh +by +by +by +by +by IY IY IY @@ -2075,8 +2067,8 @@ ik ik ik ik -Dh -Dh +by +by Ie Ie Vx @@ -2097,31 +2089,31 @@ Ie Vx Ie Ie -Dh -Dh +by +by ik ik ik tq tq tq -Dh +by ik -Dh -Dh +by +by Ie Ie Ie -Dh -Dh +by +by ik ik mD tq ik ik -Dh -Dh +by +by Ie Ie Ie @@ -2144,29 +2136,29 @@ Vx Ie Ie Ie -Dh -Dh -Dh +by +by +by ik ik ik ik ik -Dh -Dh +by +by Ie Ie Ie Ie Ie -Dh -Dh +by +by ik ik ik -Dh -Dh -Dh +by +by +by Ie Ie Ie @@ -2192,13 +2184,13 @@ Ie Ie Ie Ie -Dh -Dh -Dh -Dh -Dh -Dh -Dh +by +by +by +by +by +by +by Ie Ie Ie @@ -2206,11 +2198,11 @@ Ie Ie Ie Ie -Dh -Dh -Dh -Dh -Dh +by +by +by +by +by Ie Ie Ie diff --git a/_maps/virtual_domains/colossus.dmm b/_maps/virtual_domains/colossus.dmm index a9c3c6e6d79e72..19570e13daf81d 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) @@ -73,7 +73,9 @@ /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, /area/lavaland/surface/outdoors/virtual_domain) "N" = ( -/obj/effect/landmark/bitrunning/safehouse_spawn, +/obj/modular_map_root/safehouse{ + key = "lavaland_boss" + }, /turf/template_noop, /area/virtual_domain/safehouse) "T" = ( diff --git a/_maps/virtual_domains/gondola_asteroid.dmm b/_maps/virtual_domains/gondola_asteroid.dmm index d6377a4a4c10af..cb8f2625f0d956 100644 --- a/_maps/virtual_domains/gondola_asteroid.dmm +++ b/_maps/virtual_domains/gondola_asteroid.dmm @@ -97,7 +97,9 @@ /turf/open/floor/grass, /area/ruin/space/has_grav/powered/virtual_domain) "O" = ( -/obj/effect/landmark/bitrunning/safehouse_spawn, +/obj/modular_map_root/safehouse{ + key = "shuttle_space" + }, /turf/template_noop, /area/virtual_domain/safehouse) "Q" = ( diff --git a/_maps/virtual_domains/hierophant.dmm b/_maps/virtual_domains/hierophant.dmm index 02b11ad4e1ef43..997dfa74faceb7 100644 --- a/_maps/virtual_domains/hierophant.dmm +++ b/_maps/virtual_domains/hierophant.dmm @@ -37,11 +37,13 @@ /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" = ( -/obj/effect/landmark/bitrunning/safehouse_spawn, +/obj/modular_map_root/safehouse{ + key = "lavaland_boss" + }, /turf/template_noop, /area/virtual_domain/safehouse) "K" = ( @@ -51,7 +53,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/legion.dmm b/_maps/virtual_domains/legion.dmm deleted file mode 100644 index 55843177ad0f19..00000000000000 --- a/_maps/virtual_domains/legion.dmm +++ /dev/null @@ -1,6370 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ah" = ( -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/obj/structure/stone_tile, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"ak" = ( -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"aI" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"aR" = ( -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"bd" = ( -/obj/structure/stone_tile/block, -/obj/structure/stone_tile/block{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"be" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"bt" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood/footprints{ - dir = 1 - }, -/turf/open/floor/pod/dark, -/area/lavaland/surface/outdoors/virtual_domain) -"bu" = ( -/obj/structure/marker_beacon/bronze, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"ca" = ( -/obj/effect/mob_spawn/corpse/human/legioninfested, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"cf" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"cp" = ( -/turf/template_noop, -/area/template_noop) -"dm" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"dn" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/obj/effect/mob_spawn/corpse/human/legioninfested, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"dr" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/structure/stone_tile/block/cracked, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"dx" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/drip, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"dL" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"dQ" = ( -/turf/closed/wall/mineral/titanium/survival/pod, -/area/lavaland/surface/outdoors/virtual_domain) -"et" = ( -/obj/structure/stone_tile/block/cracked, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"ew" = ( -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"eJ" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"fA" = ( -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"fG" = ( -/obj/structure/marker_beacon/violet, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"gh" = ( -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"gk" = ( -/obj/structure/necropolis_gate/locked, -/obj/structure/stone_tile/slab, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"gK" = ( -/obj/effect/decal/cleanable/blood/footprints, -/obj/effect/decal/cleanable/blood/drip, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"gQ" = ( -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/obj/structure/stone_tile, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"hc" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"hw" = ( -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/structure/stone_tile/block/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"hx" = ( -/obj/structure/stone_tile, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"hU" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"ib" = ( -/turf/closed/mineral/volcanic/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"ie" = ( -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile/block{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"iP" = ( -/obj/structure/fluff/drake_statue/falling, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"iR" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"iV" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"jk" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"jt" = ( -/obj/structure/stone_tile/slab/cracked, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"jw" = ( -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"jN" = ( -/obj/machinery/sleeper/survival_pod, -/turf/open/floor/pod/dark, -/area/lavaland/surface/outdoors/virtual_domain) -"ka" = ( -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"kg" = ( -/turf/closed/indestructible/riveted/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"kT" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"kZ" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"ll" = ( -/obj/structure/stone_tile/cracked, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"lz" = ( -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"lC" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"lO" = ( -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"lT" = ( -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"mz" = ( -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"mG" = ( -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"nm" = ( -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"nu" = ( -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"nv" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"ny" = ( -/obj/structure/stone_tile, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"nI" = ( -/obj/structure/stone_tile/block, -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"nO" = ( -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/stone_tile/center, -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"ob" = ( -/obj/structure/necropolis_gate/legion_gate, -/obj/structure/necropolis_arch, -/obj/structure/stone_tile/slab, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"og" = ( -/obj/effect/landmark/bitrunning/safehouse_spawn, -/turf/template_noop, -/area/virtual_domain/safehouse) -"oo" = ( -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/structure/stone_tile/block/cracked{ - dir = 1 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"ox" = ( -/turf/closed/indestructible/binary, -/area/lavaland/surface/outdoors/virtual_domain) -"oS" = ( -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"pP" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"qo" = ( -/obj/structure/stone_tile/slab/cracked, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"qs" = ( -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"qW" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 1 - }, -/obj/machinery/door/airlock/survival_pod/glass, -/turf/open/floor/pod/dark, -/area/lavaland/surface/outdoors/virtual_domain) -"rt" = ( -/obj/effect/mob_spawn/corpse/human/miner, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"rU" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"sd" = ( -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/block{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"sk" = ( -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"sz" = ( -/obj/structure/stone_tile/center, -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"sA" = ( -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"tk" = ( -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"tF" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/block{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"uK" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/obj/structure/stone_tile/block{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"vf" = ( -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"wq" = ( -/obj/structure/marker_beacon/teal, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"wy" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"xd" = ( -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"xm" = ( -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"xw" = ( -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"xD" = ( -/obj/structure/stone_tile/cracked, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"yu" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 1 - }, -/obj/structure/stone_tile/block, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"yZ" = ( -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"zg" = ( -/obj/machinery/light/small/directional/south, -/obj/effect/baseturf_helper/virtual_domain, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/virtual_domain/powered) -"zo" = ( -/obj/effect/turf_decal/mining/survival, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/lavaland/surface/outdoors/virtual_domain) -"zW" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/stone_tile/center/cracked, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Ah" = ( -/obj/effect/baseturf_helper/virtual_domain, -/turf/closed/indestructible/binary, -/area/lavaland/surface/outdoors/virtual_domain) -"Aj" = ( -/obj/structure/marker_beacon/burgundy, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Ak" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/stone_tile/center/cracked, -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"As" = ( -/obj/structure/marker_beacon/cerulean, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"AY" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Bo" = ( -/obj/structure/marker_beacon/indigo, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"BO" = ( -/turf/template_noop, -/area/virtual_domain/safehouse) -"CX" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood/footprints{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Dm" = ( -/turf/closed/mineral/random/volcanic, -/area/lavaland/surface/outdoors/virtual_domain) -"DP" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 1 - }, -/obj/structure/stone_tile/center, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Ek" = ( -/obj/structure/stone_tile/block, -/obj/structure/stone_tile/block/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Ep" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"Ez" = ( -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/structure/stone_tile/cracked, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"EC" = ( -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Fg" = ( -/obj/structure/stone_tile/surrounding/cracked{ - dir = 6 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Fp" = ( -/obj/effect/baseturf_helper/virtual_domain, -/turf/template_noop, -/area/virtual_domain/safehouse) -"Fq" = ( -/obj/structure/marker_beacon/fuchsia, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"FV" = ( -/obj/structure/stone_tile/block, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Gj" = ( -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Gn" = ( -/turf/closed/indestructible/riveted/boss/see_through, -/area/lavaland/surface/outdoors/virtual_domain) -"Go" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 1 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"GH" = ( -/obj/structure/fans, -/turf/open/floor/pod/dark, -/area/lavaland/surface/outdoors/virtual_domain) -"GM" = ( -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Hi" = ( -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Hu" = ( -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"Hw" = ( -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/stone_tile/center/cracked, -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"HK" = ( -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"HQ" = ( -/obj/structure/stone_tile/block/cracked, -/obj/structure/stone_tile/block{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"HZ" = ( -/obj/structure/stone_tile{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Ii" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Io" = ( -/obj/structure/marker_beacon/jade, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Ip" = ( -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"IB" = ( -/obj/structure/stone_tile, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"IG" = ( -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"IL" = ( -/obj/structure/stone_tile/surrounding, -/obj/structure/stone_tile/center/cracked, -/mob/living/simple_animal/hostile/megafauna/legion/virtual_domain, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"IQ" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Jc" = ( -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Jp" = ( -/obj/structure/stone_tile/block/cracked, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Jt" = ( -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/obj/structure/stone_tile, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Jw" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"JD" = ( -/obj/structure/fluff/drake_statue, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"KG" = ( -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Le" = ( -/obj/structure/stone_tile, -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Lx" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"LH" = ( -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/obj/structure/stone_tile/block{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Ml" = ( -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Mm" = ( -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/stone_tile/center/cracked, -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 1 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Mo" = ( -/obj/structure/stone_tile/block/cracked, -/obj/structure/stone_tile/block/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"MH" = ( -/obj/structure/stone_tile/cracked, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"MP" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"MW" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Nl" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/obj/structure/stone_tile/center, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"Ot" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/obj/structure/stone_tile/center, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Pv" = ( -/obj/effect/turf_decal/mining/survival{ - dir = 4 - }, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/lavaland/surface/outdoors/virtual_domain) -"Px" = ( -/obj/structure/stone_tile{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"PO" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/obj/structure/stone_tile/block{ - dir = 4 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"Qi" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/cracked, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Qx" = ( -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/marker_beacon/burgundy, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"QD" = ( -/obj/item/pickaxe, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/pod/dark, -/area/lavaland/surface/outdoors/virtual_domain) -"RC" = ( -/obj/effect/turf_decal/mining/survival{ - dir = 1 - }, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/lavaland/surface/outdoors/virtual_domain) -"RV" = ( -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"So" = ( -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Sw" = ( -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"SI" = ( -/obj/effect/turf_decal/mining, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/lavaland/surface/outdoors/virtual_domain) -"SJ" = ( -/obj/structure/stone_tile/slab/cracked, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"SX" = ( -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Ti" = ( -/turf/closed/mineral/random/high_chance/volcanic, -/area/lavaland/surface/outdoors/virtual_domain) -"Tm" = ( -/obj/structure/bed/pod, -/obj/item/bedsheet/black, -/obj/structure/tubes, -/obj/machinery/light/small/broken/directional/east, -/turf/open/floor/pod/dark, -/area/lavaland/surface/outdoors/virtual_domain) -"TC" = ( -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"TJ" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Ud" = ( -/obj/machinery/light/small/directional/north, -/obj/effect/baseturf_helper/virtual_domain, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/virtual_domain/powered) -"UD" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/stone_tile/center/cracked, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"UM" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Vc" = ( -/obj/structure/tubes, -/obj/item/crowbar, -/obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/pod/dark, -/area/lavaland/surface/outdoors/virtual_domain) -"VI" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/stone_tile/center, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"Wa" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 1 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/obj/structure/stone_tile/center/cracked, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Wm" = ( -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"WM" = ( -/obj/structure/stone_tile/block, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"WR" = ( -/obj/structure/stone_tile/block, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"WS" = ( -/obj/item/gps/computer, -/obj/structure/tubes, -/turf/open/floor/pod/dark, -/area/lavaland/surface/outdoors/virtual_domain) -"Xb" = ( -/obj/structure/marker_beacon/yellow, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Xn" = ( -/obj/structure/stone_tile, -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Xo" = ( -/obj/structure/stone_tile/block, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Xv" = ( -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile/cracked, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"XO" = ( -/obj/effect/turf_decal/mining/survival{ - dir = 8 - }, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/lavaland/surface/outdoors/virtual_domain) -"Yu" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/structure/stone_tile/block{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"YN" = ( -/obj/structure/stone_tile/block/cracked, -/obj/structure/stone_tile/block/cracked{ - dir = 1 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"YV" = ( -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Zc" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/block{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"Zh" = ( -/obj/structure/marker_beacon/purple, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Zj" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/block{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Zq" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"Zu" = ( -/obj/machinery/smartfridge/survival_pod{ - desc = "A heated storage unit. This one's seen better days."; - name = "dusty survival pod storage" - }, -/turf/open/floor/pod/dark, -/area/lavaland/surface/outdoors/virtual_domain) -"ZM" = ( -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"ZN" = ( -/obj/structure/table/survival_pod, -/obj/item/knife/combat/survival, -/turf/open/floor/pod/dark, -/area/lavaland/surface/outdoors/virtual_domain) - -(1,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -Ah -"} -(2,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ox -"} -(3,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -ib -nu -nu -ib -ib -ib -ib -nu -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ib -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -ib -ox -"} -(4,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(5,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(6,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -wq -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(7,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ox -"} -(8,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -ib -nu -nu -nu -nu -nu -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -rt -nu -nu -ib -ib -ox -"} -(9,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -ib -nu -nu -nu -nu -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ox -"} -(10,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ib -ib -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ox -"} -(11,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ib -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(12,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -fA -fA -fA -nu -nu -nu -nu -ib -ox -"} -(13,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -ib -nu -fG -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -fA -fA -fA -nu -nu -nu -nu -ib -ox -"} -(14,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -fA -fA -nu -nu -nu -nu -ib -ox -"} -(15,1,1) = {" -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(16,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -nu -nu -nu -nu -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(17,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -Ti -Ti -Ti -Ti -GM -nu -nu -nu -nu -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -Io -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -Xb -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(18,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -et -Ti -GM -GM -GM -nu -nu -nu -nu -GM -GM -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(19,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -GM -nu -nu -nu -nu -nu -nu -nu -nu -GM -GM -GM -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -wq -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(20,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -Ti -nu -nu -nu -nu -nu -nu -nu -nu -GM -GM -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(21,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -Ti -nu -nu -nu -nu -GM -Ti -GM -GM -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -Zh -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(22,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -FV -nu -nu -nu -nu -Ti -Dm -Dm -GM -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(23,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -Ti -GM -GM -GM -Ti -Ti -Dm -Dm -Ti -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(24,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -FV -Ml -Ti -Dm -Dm -Ti -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ox -"} -(25,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -GM -GM -Ti -Dm -Dm -IB -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -GM -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ox -"} -(26,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -GM -GM -GM -GM -GM -GM -fA -fA -fA -fA -RV -fA -fA -fA -fA -fA -fA -Xn -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -As -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ox -"} -(27,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -Ek -Le -be -be -kT -GM -GM -GM -GM -fA -fA -xm -fA -fA -fA -GM -ZM -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(28,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -dr -KG -mz -KG -KG -jt -GM -GM -GM -GM -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -HZ -nu -bu -nu -nu -nu -MH -nu -nu -lz -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -ib -ox -"} -(29,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -bd -mG -Hw -hU -Mm -lO -et -GM -tk -fA -fA -fA -fA -ak -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -YV -nu -nu -So -nu -nu -nu -nu -nu -nu -bu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -ib -ox -"} -(30,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -Ez -WR -JD -rU -KG -dm -GM -GM -fA -Hi -fA -fA -fA -ll -fA -fA -Wm -fA -fA -YV -qs -MH -nu -nu -nu -ny -ca -oS -nu -nu -Qx -nu -nu -hx -nu -nu -nu -nu -nu -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -ib -ox -"} -(31,1,1) = {" -ox -kg -kg -kg -Hu -Zq -wy -Zq -lT -kg -kg -Gn -Gn -KG -Ak -nv -Ot -mG -hw -kg -kg -Wm -fA -fA -fA -fA -fA -fA -fA -fA -fA -ak -nu -nu -qs -nu -nu -TC -nu -YV -nu -ny -nu -oS -nu -nu -nu -SX -nu -nu -nu -zg -BO -BO -BO -BO -BO -og -Ud -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -ib -ox -"} -(32,1,1) = {" -ox -kg -kg -Gn -VI -xw -gQ -ka -iR -kg -kg -Gn -Gn -sz -KG -KG -KG -KG -mz -kg -kZ -kZ -sd -kZ -lC -kZ -TJ -UM -kZ -IQ -UM -UM -AY -nu -nI -nu -nu -nu -nu -oS -nu -nu -nu -nu -nu -qs -nu -nu -nu -nu -nu -nu -BO -BO -BO -BO -BO -BO -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -ib -ox -"} -(33,1,1) = {" -ox -PO -PO -gk -PO -Zc -IL -Yu -SJ -Yu -Yu -Yu -ob -dL -uK -MP -uK -uK -dL -Jc -Mo -eJ -Mo -hc -yu -eJ -Fg -eJ -YN -tF -Mo -Zj -HQ -qo -Jp -nu -aR -nu -TC -nu -YV -nu -nu -oS -nu -nu -ny -Sw -nu -nu -nu -nu -BO -BO -BO -BO -BO -BO -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -Io -ib -ib -nu -nu -ib -ox -"} -(34,1,1) = {" -ox -kg -kg -Gn -Nl -gh -jw -lT -oo -kg -kg -Gn -Gn -Wa -KG -xd -Ez -mz -HK -kg -ie -Jw -Jw -jk -Jw -jk -dn -Jw -Jw -LH -Ii -Qi -aI -nu -Xo -nu -nu -YV -Sw -nu -nu -nu -sA -nu -Gj -nu -nu -HZ -nu -YV -nu -nu -BO -BO -BO -BO -BO -BO -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -ib -ox -"} -(35,1,1) = {" -ox -kg -kg -kg -Hu -Ep -iV -Go -Ip -kg -kg -Gn -Gn -lO -nO -hU -UD -KG -dm -kg -kg -ll -fA -fA -fA -ak -fA -fA -fA -fA -ll -fA -nu -nu -ny -nu -nu -Aj -HZ -nu -ew -nu -nu -bu -nu -nu -nu -nu -nu -Aj -nu -nu -BO -BO -BO -BO -BO -BO -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -ib -ox -"} -(36,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -KG -WR -iP -rU -Ez -cf -GM -GM -fA -fA -yZ -vf -ll -fA -fA -fA -ak -fA -fA -oS -ny -qs -YV -qs -nu -nu -nu -nu -nu -nu -Sw -nu -qs -oS -nu -nu -Sw -nu -nu -BO -BO -BO -BO -BO -BO -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -ib -ox -"} -(37,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -bd -xd -zW -nv -DP -KG -FV -GM -GM -fA -fA -fA -GM -Px -fA -IG -GM -Hi -fA -fA -nu -nu -nu -nu -TC -nu -ah -nu -nu -nm -nu -nu -nu -nu -nu -nu -sk -nu -nu -zg -BO -BO -BO -BO -BO -Fp -Ud -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -nu -nu -ib -ox -"} -(38,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -bd -KG -KG -KG -lO -Jc -GM -GM -GM -fA -fA -fA -fA -fA -fA -GM -Jt -fA -fA -fA -nu -TC -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(39,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -Ek -KG -lO -MW -pP -GM -GM -GM -GM -fA -fA -fA -fA -fA -fA -fA -xD -fA -fA -fA -oS -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(40,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -IB -nu -nu -nu -nu -GM -RV -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(41,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -GM -nu -nu -Sw -Xv -GM -fA -fA -fA -fA -fA -fA -fA -fA -fA -GM -GM -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(42,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -GM -nu -nu -nu -ny -GM -fA -fA -fA -fA -fA -fA -fA -fA -fA -EC -GM -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -Bo -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ox -"} -(43,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -WM -GM -Px -ny -nu -nu -nu -nu -nu -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ox -"} -(44,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -GM -GM -GM -nu -nu -nu -nu -nu -nu -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(45,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -GM -GM -GM -nu -nu -nu -nu -nu -nu -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(46,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -Ti -GM -GM -nu -nu -nu -nu -nu -nu -fA -fA -ak -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -wq -nu -nu -nu -nu -nu -nu -nu -nu -nu -fA -ib -ox -"} -(47,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -Ti -GM -nu -nu -nu -nu -nu -nu -fA -fA -fA -xD -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -fA -fA -ib -ox -"} -(48,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -Ti -GM -nu -nu -nu -nu -nu -nu -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -fA -fA -ib -ox -"} -(49,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -Ti -GM -nu -nu -nu -nu -nu -nu -fA -fA -fA -GM -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -Fq -nu -ib -ib -ib -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -fA -ib -ox -"} -(50,1,1) = {" -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -rt -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(51,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -dQ -dQ -XO -dQ -dQ -GM -nu -nu -nu -ib -ox -"} -(52,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -Fq -nu -nu -nu -nu -nu -nu -nu -nu -nu -dQ -GH -jN -ZN -zo -GM -nu -nu -nu -ib -ox -"} -(53,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -RC -Zu -QD -bt -qW -CX -nu -nu -nu -ib -ox -"} -(54,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -dQ -WS -Tm -Vc -SI -Lx -nu -nu -nu -ib -ox -"} -(55,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -dQ -dQ -Pv -dQ -dQ -Lx -nu -nu -nu -ib -ox -"} -(56,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -ib -nu -nu -nu -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -GM -GM -GM -GM -dx -gK -nu -nu -nu -ib -ox -"} -(57,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -Io -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(58,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ox -"} -(59,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ox -"} -(60,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -Xb -nu -nu -nu -ib -ox -"} -(61,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -nu -nu -ib -ox -"} -(62,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(63,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -ib -nu -nu -nu -ib -ib -ib -nu -nu -nu -nu -nu -ib -ib -nu -nu -nu -nu -ib -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -nu -nu -ib -ib -ox -"} -(64,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ox -"} -(65,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -"} diff --git a/_maps/virtual_domains/pipedream.dmm b/_maps/virtual_domains/pipedream.dmm index 44bd845477a188..af42f707252e36 100644 --- a/_maps/virtual_domains/pipedream.dmm +++ b/_maps/virtual_domains/pipedream.dmm @@ -4,13 +4,13 @@ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "aw" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 1 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "ax" = ( /obj/effect/turf_decal/tile/yellow/fourcorners, /obj/structure/frame/computer{ @@ -21,24 +21,28 @@ icon_state = "medium" }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "aK" = ( /turf/open/space/basic, -/area/space) +/area/virtual_domain) "aL" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) +"bl" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/template_noop, +/area/virtual_domain/safehouse) "bq" = ( /obj/machinery/light/small/red/dim{ dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "bs" = ( /turf/open/floor/carpet/orange, -/area/virtual_domain/powered) +/area/virtual_domain) "bw" = ( /obj/structure/disposalpipe/broken{ dir = 1 @@ -46,18 +50,18 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet/crate/preopen, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "bx" = ( /obj/structure/frame/computer, /obj/item/shard, /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-12" }, -/area/virtual_domain/powered) +/area/virtual_domain) "bA" = ( /obj/structure/chair/plastic, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "bG" = ( /obj/structure/lattice/catwalk{ name = "industrial lift" @@ -65,7 +69,7 @@ /obj/structure/closet/crate/preopen, /obj/structure/railing, /turf/open/chasm, -/area/virtual_domain/powered) +/area/virtual_domain) "bS" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 1 @@ -80,7 +84,7 @@ pixel_y = -2 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "cw" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 9 @@ -89,7 +93,7 @@ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "cB" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 10 @@ -99,18 +103,18 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "cF" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 9 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "dx" = ( /obj/effect/turf_decal/trimline/yellow/line, /obj/item/shard, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "dz" = ( /obj/machinery/light/broken, /obj/effect/decal/cleanable/dirt, @@ -119,22 +123,22 @@ dir = 8 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "dA" = ( /obj/machinery/light/dim{ dir = 4 }, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "dP" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "eg" = ( /turf/closed/wall, -/area/virtual_domain/powered) +/area/virtual_domain) "ei" = ( /obj/machinery/conveyor/auto{ dir = 6; @@ -145,17 +149,13 @@ dir = 5 }, /turf/open/floor/plating, -/area/virtual_domain/powered) -"ev" = ( -/obj/effect/baseturf_helper/virtual_domain, -/turf/template_noop, -/area/virtual_domain/safehouse) +/area/virtual_domain) "eJ" = ( /obj/structure/disposalpipe/sorting{ dir = 2 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "eN" = ( /obj/effect/turf_decal/trimline/yellow/arrow_cw{ dir = 1 @@ -165,42 +165,42 @@ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "eY" = ( /turf/closed/wall/r_wall, -/area/virtual_domain/powered) +/area/virtual_domain) "fe" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 8 }, /obj/structure/table/reinforced, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "fg" = ( /turf/open/floor/iron/stairs/left{ dir = 8 }, -/area/virtual_domain/powered) +/area/virtual_domain) "fj" = ( /obj/structure/closet/crate/preopen, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "fl" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 1 }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "fw" = ( /obj/structure/door_assembly/door_assembly_eng, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "fK" = ( /obj/structure/chair/stool/bar/directional/west, /turf/open/floor/iron/cafeteria, -/area/virtual_domain/powered) +/area/virtual_domain) "fR" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 8 @@ -210,52 +210,53 @@ }, /obj/structure/sign/poster/official/random/directional/west, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "fZ" = ( /obj/effect/turf_decal/tile/yellow/fourcorners, /obj/structure/chair/office{ dir = 8 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "gc" = ( /obj/structure/disposalpipe/broken, +/obj/effect/landmark/bitrunning/mob_segment, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "gj" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "gs" = ( /obj/machinery/door/airlock/external/glass/ruin, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "gN" = ( /obj/structure/disposalpipe/sorting{ dir = 8 }, /turf/open/floor/catwalk_floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "gV" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 8 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "hg" = ( /obj/effect/turf_decal/caution{ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "hi" = ( /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "hk" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted, /obj/effect/decal/cleanable/dirt/dust, @@ -263,24 +264,29 @@ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "ho" = ( /obj/effect/turf_decal/siding/white{ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) +"io" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/turf/open/floor/iron, +/area/virtual_domain) "iw" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "iz" = ( /obj/structure/broken_flooring/corner, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "iI" = ( /obj/effect/turf_decal/trimline/yellow/corner{ dir = 8 @@ -288,7 +294,10 @@ /obj/effect/turf_decal/trimline/yellow/corner, /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) +"iZ" = ( +/turf/template_noop, +/area/virtual_domain/safehouse) "jv" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 8 @@ -297,53 +306,53 @@ dir = 8 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "jw" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "jH" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/catwalk_floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "jQ" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light/small/red/dim{ dir = 1 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "jS" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/corner{ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "jW" = ( /obj/effect/decal/cleanable/generic, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "kh" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "ki" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/bitrunning/cache_spawn, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "kn" = ( /obj/machinery/light/small/red/dim{ dir = 1 }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "kJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -353,67 +362,60 @@ id = "factorylockdown" }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "kU" = ( /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "lp" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/locked, /turf/open/floor/plating, -/area/virtual_domain/powered) -"lt" = ( -/obj/structure/disposalpipe/sorting{ - dir = 8 - }, -/mob/living/basic/hivebot/range, -/turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "lx" = ( /obj/machinery/door/poddoor/shutters/indestructible{ dir = 4; id = "factorylockdown" }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "lB" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 5 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "lC" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "lI" = ( /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "lN" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "lW" = ( /obj/structure/disposalpipe/sorting{ dir = 8 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "mh" = ( /obj/structure/broken_flooring/pile{ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "mu" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "mE" = ( /obj/machinery/door/airlock/maintenance, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "mY" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 1 @@ -422,7 +424,7 @@ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "nc" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 1 @@ -432,30 +434,30 @@ }, /obj/structure/sign/poster/official/safety_internals/directional/south, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "nz" = ( /obj/structure/broken_flooring/side/directional/north, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "nD" = ( /obj/structure/disposalpipe/trunk/multiz, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "nL" = ( /obj/effect/turf_decal/tile/dark/half, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "nS" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ dir = 5 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "op" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/dim{ @@ -463,62 +465,51 @@ }, /obj/structure/sign/warning/doors/directional/north, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "oN" = ( /obj/machinery/conveyor/auto, /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "oX" = ( /obj/structure/broken_flooring/corner/directional/north, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "pa" = ( /obj/machinery/light/small/red/dim{ dir = 1 }, /turf/open/floor/carpet/orange, -/area/virtual_domain/powered) -"pb" = ( -/obj/structure/broken_flooring/corner{ - dir = 4 - }, -/turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "pf" = ( /obj/effect/spawner/structure/window/reinforced, /obj/effect/mapping_helpers/damaged_window, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "pi" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, -/area/virtual_domain/powered) -"po" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate/maint, -/turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "pv" = ( /obj/structure/broken_flooring/side{ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "pI" = ( /obj/effect/turf_decal/tile/yellow/fourcorners, /obj/machinery/light/small/red/dim{ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "pJ" = ( /obj/structure/broken_flooring/pile{ dir = 1 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "qc" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 8 @@ -526,18 +517,18 @@ /obj/structure/table/reinforced, /obj/effect/spawner/random/bureaucracy/briefcase, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "qk" = ( /obj/structure/disposalpipe/segment{ dir = 10 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "qK" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/sign/warning/secure_area/directional/north, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "qN" = ( /obj/effect/turf_decal/siding/white{ dir = 4 @@ -545,7 +536,7 @@ /obj/effect/mob_spawn/corpse/human/factory, /obj/effect/decal/cleanable/blood/old, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "qT" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -554,13 +545,13 @@ dir = 1 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "qV" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "qW" = ( /obj/machinery/light/dim{ dir = 1 @@ -569,45 +560,44 @@ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "rc" = ( /obj/structure/disposalpipe/segment, /obj/structure/sign/poster/contraband/random/directional/north, /obj/effect/landmark/bitrunning/cache_spawn, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "rz" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 1 }, /obj/machinery/light/small/red/dim, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "rG" = ( /obj/machinery/light/dim, /obj/effect/turf_decal/trimline/yellow/line, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "rJ" = ( /obj/structure/railing, /obj/effect/decal/cleanable/oil, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "rM" = ( /obj/structure/disposalpipe/broken{ dir = 1 }, -/mob/living/basic/hivebot/strong, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "rO" = ( /turf/closed/mineral, -/area/space) +/area/virtual_domain) "sn" = ( /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-38" }, -/area/virtual_domain/powered) +/area/virtual_domain) "sB" = ( /obj/machinery/light/broken{ dir = 8 @@ -617,7 +607,7 @@ dir = 8 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "sW" = ( /obj/effect/decal/cleanable/oil/streak, /obj/effect/turf_decal/trimline/yellow/corner{ @@ -629,39 +619,34 @@ /obj/effect/decal/cleanable/blood/drip, /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "tl" = ( /obj/machinery/door/poddoor/shutters/indestructible{ id = "factorylockdown" }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "tr" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, -/area/virtual_domain/powered) -"tE" = ( -/obj/structure/disposalpipe/segment, -/mob/living/basic/hivebot/range, -/turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "ud" = ( /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-110" }, -/area/virtual_domain/powered) +/area/virtual_domain) "uk" = ( /obj/effect/spawner/structure/window/reinforced, /obj/effect/decal/cleanable/blood/splatter/over_window, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "um" = ( /obj/machinery/light/dim{ dir = 1 }, /turf/open/floor/iron/cafeteria, -/area/virtual_domain/powered) +/area/virtual_domain) "uv" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -670,29 +655,29 @@ dir = 1 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "uz" = ( /obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "uC" = ( /obj/structure/falsewall, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "uF" = ( /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "uP" = ( /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-55" }, -/area/virtual_domain/powered) +/area/virtual_domain) "uU" = ( /obj/structure/broken_flooring/side, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "vb" = ( /obj/effect/turf_decal/trimline/yellow/line, /obj/effect/turf_decal/trimline/yellow/line{ @@ -700,7 +685,7 @@ }, /obj/machinery/light/broken, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "ve" = ( /obj/machinery/mass_driver/trash{ dir = 1 @@ -709,26 +694,19 @@ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) -"vA" = ( -/obj/structure/closet/crate/maint, -/obj/effect/turf_decal/stripes{ - dir = 9 - }, -/turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "vL" = ( /obj/effect/decal/cleanable/glass, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "vQ" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "vU" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "wg" = ( /obj/machinery/light/small/red/dim{ dir = 4 @@ -736,24 +714,24 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate/preopen, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "wh" = ( /obj/structure/table/wood, /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-207" }, -/area/virtual_domain/powered) +/area/virtual_domain) "wl" = ( /obj/item/shard, /turf/open/space/basic, -/area/space) +/area/virtual_domain) "wm" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, /obj/structure/sign/clock/directional/north, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "wq" = ( /obj/structure/table/wood, /obj/machinery/button/door{ @@ -763,7 +741,7 @@ /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-63" }, -/area/virtual_domain/powered) +/area/virtual_domain) "ws" = ( /obj/effect/turf_decal/trimline/yellow/corner{ dir = 1 @@ -772,57 +750,56 @@ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "ww" = ( /obj/effect/turf_decal/stripes{ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/mob/living/basic/hivebot, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "wU" = ( /obj/structure/disposalpipe/segment{ dir = 9 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "wW" = ( /obj/effect/turf_decal/tile/yellow/fourcorners, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "xa" = ( /obj/machinery/door/poddoor/shutters/indestructible{ dir = 8; id = "factorylockdown" }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "xj" = ( /obj/structure/railing/corner/end{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "xk" = ( /obj/machinery/light/dim{ dir = 4 }, /obj/effect/landmark/bitrunning/cache_spawn, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "xl" = ( /obj/structure/disposalpipe/segment{ dir = 5 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "xA" = ( /obj/effect/decal/cleanable/generic, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "xE" = ( /obj/effect/turf_decal/trimline/yellow/line, /obj/effect/turf_decal/trimline/yellow/line{ @@ -830,11 +807,11 @@ }, /obj/machinery/light/broken, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "xF" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/closed/indestructible/binary, -/area/virtual_domain/powered) +/area/virtual_domain) "xM" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 4 @@ -844,28 +821,41 @@ name = "cat bed" }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "xT" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "yB" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/welded, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "yM" = ( /turf/closed/indestructible/fakedoor{ name = "Stairwell Access" }, -/area/virtual_domain/powered) +/area/virtual_domain) "yQ" = ( /turf/template_noop, /area/template_noop) "yX" = ( /obj/structure/fans/tiny, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) +"zd" = ( +/mob/living/basic/pet/cat/space, +/obj/structure/bed/dogbed{ + name = "cat bed" + }, +/obj/item/toy/plush/moth{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/machinery/light/small/dim/directional/south, +/obj/structure/sign/poster/official/moth_hardhat/directional/west, +/turf/open/floor/plating, +/area/virtual_domain) "zp" = ( /obj/structure/chair/sofa/corp/right{ dir = 1 @@ -873,13 +863,13 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/light/broken, /turf/open/floor/carpet/orange, -/area/virtual_domain/powered) +/area/virtual_domain) "zB" = ( /obj/structure/closet/crate/bin, /obj/item/trash/tray, /obj/effect/spawner/random/trash/garbage, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "zE" = ( /obj/structure/disposalpipe/broken{ dir = 1 @@ -888,7 +878,7 @@ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "zO" = ( /obj/effect/turf_decal/siding/white{ dir = 4 @@ -896,30 +886,30 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/broken, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Av" = ( /obj/item/stack/rods/two, /turf/open/space/basic, -/area/space) -"Aw" = ( -/obj/structure/lattice/catwalk{ - name = "industrial lift" - }, -/mob/living/basic/hivebot/rapid, -/turf/open/chasm, -/area/virtual_domain/powered) +/area/virtual_domain) "AJ" = ( /obj/effect/decal/cleanable/generic, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) +"AO" = ( +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/obj/effect/turf_decal/stripes{ + dir = 9 + }, +/turf/open/floor/iron, +/area/virtual_domain) "AP" = ( /obj/structure/railing, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "AU" = ( /turf/open/misc/asteroid/airless, -/area/space) +/area/virtual_domain) "Bd" = ( /obj/structure/closet/secure_closet/tac{ req_access = null @@ -928,11 +918,11 @@ /obj/item/ammo_casing/shotgun/buckshot, /obj/item/ammo_casing/shotgun/buckshot, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Bh" = ( /obj/structure/broken_flooring/corner/directional/east, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Bx" = ( /obj/structure/table/reinforced, /obj/machinery/microwave{ @@ -940,11 +930,11 @@ desc = "No longer cooks and boils stuff." }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "BA" = ( /obj/structure/broken_flooring/corner/directional/south, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "BI" = ( /obj/machinery/door/airlock/command/glass{ name = "Quartermaster's Office" @@ -957,28 +947,28 @@ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "BN" = ( /obj/structure/flora/rock/pile/style_random, /turf/open/misc/asteroid/airless, -/area/space) +/area/virtual_domain) "BW" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/yellow/warning{ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "BX" = ( /obj/effect/decal/cleanable/robot_debris/old, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Ci" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 8 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Ct" = ( /obj/machinery/conveyor/auto{ dir = 6 @@ -989,7 +979,7 @@ /obj/structure/sign/warning/vacuum/directional/north, /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Cv" = ( /obj/structure/chair/office{ dir = 8 @@ -997,30 +987,26 @@ /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-157" }, -/area/virtual_domain/powered) +/area/virtual_domain) "CA" = ( /obj/structure/disposalpipe/segment, /obj/structure/broken_flooring/side{ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "CQ" = ( /obj/effect/spawner/random/trash/botanical_waste, /obj/item/trash/chips, /obj/structure/closet/secure_closet/freezer/empty/open, /turf/open/floor/iron, -/area/virtual_domain/powered) -"CR" = ( -/obj/structure/flora/rock/pile/style_random, -/turf/open/misc/asteroid/airless, -/area/virtual_domain/powered) +/area/virtual_domain) "CX" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Dr" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -1029,37 +1015,43 @@ dir = 8 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "DA" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/catwalk_floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "DE" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "DP" = ( /obj/structure/table/reinforced, /obj/effect/spawner/random/food_or_drink/snack, /turf/open/floor/iron/cafeteria, -/area/virtual_domain/powered) +/area/virtual_domain) "Ex" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-137" }, -/area/virtual_domain/powered) +/area/virtual_domain) "Ez" = ( /obj/structure/flora/rock/style_random, /turf/open/misc/asteroid/airless, -/area/space) +/area/virtual_domain) +"EE" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron, +/area/virtual_domain) "EI" = ( /obj/effect/turf_decal/stripes{ dir = 8 }, /obj/effect/decal/cleanable/oil, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "EJ" = ( /obj/machinery/recycler/deathtrap{ dir = 8 @@ -1069,28 +1061,26 @@ }, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, -/area/virtual_domain/powered) -"Fa" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/crate/maint, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) +"EK" = ( +/obj/structure/disposalpipe/broken, +/turf/open/floor/plating, +/area/virtual_domain) "Ff" = ( /obj/structure/disposalpipe/trunk/multiz{ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Fo" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/cafeteria, -/area/virtual_domain/powered) +/area/virtual_domain) "Fr" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet/crate/preopen, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Fw" = ( /obj/structure/flora/bush/fullgrass/style_random, /obj/structure/flora/rock/pile/style_random, @@ -1098,34 +1088,31 @@ /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/grass, -/area/virtual_domain/powered) +/area/virtual_domain) "FK" = ( /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/iron, -/area/virtual_domain/powered) -"FO" = ( -/turf/open/misc/asteroid/airless, -/area/virtual_domain/powered) +/area/virtual_domain) "FP" = ( /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-110" }, -/area/virtual_domain/powered) +/area/virtual_domain) "Gb" = ( /obj/effect/turf_decal/stripes{ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Ge" = ( /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-21" }, -/area/virtual_domain/powered) +/area/virtual_domain) "Gh" = ( /obj/machinery/door/airlock/maintenance, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Gi" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 9 @@ -1133,7 +1120,7 @@ /obj/effect/turf_decal/trimline/yellow/corner, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Gs" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 1 @@ -1142,7 +1129,7 @@ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Gy" = ( /obj/machinery/conveyor/auto{ dir = 9; @@ -1152,11 +1139,11 @@ /obj/effect/turf_decal/stripes/line, /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "GI" = ( /obj/effect/turf_decal/trimline/yellow/arrow_ccw, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "GV" = ( /obj/machinery/light/small/red/dim{ dir = 8 @@ -1166,57 +1153,57 @@ }, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Hn" = ( /turf/open/floor/iron/cafeteria, -/area/virtual_domain/powered) +/area/virtual_domain) "HI" = ( /obj/structure/broken_flooring/pile/directional/north, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Ib" = ( /obj/structure/chair/sofa/corp/left{ dir = 1 }, /turf/open/floor/carpet/orange, -/area/virtual_domain/powered) +/area/virtual_domain) "Ip" = ( /obj/machinery/door/airlock/engineering/glass, /obj/effect/mapping_helpers/airlock/access/any/away/supply, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Is" = ( /obj/machinery/door/airlock/engineering/glass, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "IF" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "IK" = ( /obj/effect/turf_decal/trimline/yellow/line, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "IZ" = ( /obj/structure/lattice/catwalk{ name = "industrial lift" }, /obj/structure/closet/crate, /turf/open/chasm, -/area/virtual_domain/powered) +/area/virtual_domain) "Jl" = ( /obj/effect/decal/cleanable/blood/old, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Jm" = ( /obj/structure/broken_flooring/pile/directional/north, /obj/machinery/light/dim, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Jn" = ( /obj/effect/turf_decal/stripes{ dir = 4 @@ -1227,63 +1214,60 @@ }, /obj/structure/sign/warning/doors/directional/east, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Jq" = ( /obj/structure/broken_flooring/pile{ dir = 1 }, /obj/structure/sign/poster/contraband/random/directional/west, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "JE" = ( /obj/machinery/light/small/red/dim{ dir = 1 }, /obj/structure/sign/warning/chem_diamond/directional/west, /turf/open/floor/plating, -/area/virtual_domain/powered) -"JR" = ( -/turf/template_noop, -/area/virtual_domain/safehouse) +/area/virtual_domain) "JT" = ( /obj/structure/lattice/catwalk{ name = "industrial lift" }, /obj/effect/spawner/random/trash/grime, /turf/open/chasm, -/area/virtual_domain/powered) +/area/virtual_domain) "Kb" = ( /obj/effect/mob_spawn/corpse/human/factory/guard, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Kt" = ( /obj/structure/disposalpipe/segment{ dir = 6 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "KO" = ( /obj/structure/broken_flooring/side/directional/north, /obj/machinery/light/small/red/dim, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "KX" = ( /obj/structure/lattice/catwalk{ name = "industrial lift" }, /turf/open/chasm, -/area/virtual_domain/powered) +/area/virtual_domain) "Ln" = ( /obj/structure/disposalpipe/broken{ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Lp" = ( /obj/effect/turf_decal/trimline/yellow/line, /obj/machinery/light/broken, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "LN" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 4 @@ -1295,7 +1279,7 @@ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "LU" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 6 @@ -1303,12 +1287,13 @@ /obj/effect/turf_decal/trimline/yellow/corner{ dir = 1 }, +/obj/effect/landmark/bitrunning/cache_spawn, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Mc" = ( /obj/effect/turf_decal/trimline/yellow/warning, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Mh" = ( /obj/machinery/conveyor/auto{ dir = 8 @@ -1317,14 +1302,11 @@ dir = 1 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Mi" = ( /obj/effect/mob_spawn/corpse/human/factory, /turf/open/floor/plating, -/area/virtual_domain/powered) -"Mj" = ( -/turf/closed/mineral, -/area/virtual_domain/powered) +/area/virtual_domain) "Mu" = ( /obj/effect/turf_decal/trimline/yellow/corner{ dir = 4 @@ -1333,14 +1315,14 @@ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Mx" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 1 }, /obj/structure/filingcabinet, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "My" = ( /obj/machinery/conveyor/auto{ dir = 1 @@ -1349,12 +1331,12 @@ dir = 8 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "MI" = ( /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-74" }, -/area/virtual_domain/powered) +/area/virtual_domain) "MN" = ( /obj/effect/turf_decal/tile/dark, /obj/effect/decal/cleanable/dirt, @@ -1362,29 +1344,29 @@ dir = 5 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Nc" = ( /obj/structure/chair/plastic{ dir = 8 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Nu" = ( /obj/effect/turf_decal/trimline/yellow/line, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "NW" = ( /obj/effect/decal/cleanable/dirt, /mob/living/basic/hivebot/strong, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Ok" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "On" = ( /obj/structure/broken_flooring/side{ dir = 4 @@ -1393,30 +1375,34 @@ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) +"Ou" = ( +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/plating, +/area/virtual_domain) "OJ" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes{ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "OL" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "OQ" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/sign/poster/ripped/directional/west, /turf/open/floor/carpet/orange, -/area/virtual_domain/powered) +/area/virtual_domain) "OR" = ( /obj/machinery/light/broken, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Po" = ( /obj/machinery/light/small/red/dim{ dir = 4 @@ -1425,7 +1411,7 @@ /obj/structure/broken_flooring/corner, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Pr" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 5 @@ -1435,14 +1421,14 @@ }, /obj/structure/sign/poster/official/random/directional/east, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "PH" = ( /obj/structure/railing/corner/end/flip{ dir = 8 }, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Qd" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 8 @@ -1454,29 +1440,25 @@ dir = 8 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Qh" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light/broken{ dir = 8 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Qj" = ( /obj/machinery/light/dim{ dir = 8 }, /turf/open/floor/plating, -/area/virtual_domain/powered) -"Qo" = ( -/obj/effect/landmark/bitrunning/safehouse_spawn, -/turf/template_noop, -/area/virtual_domain/safehouse) +/area/virtual_domain) "Qr" = ( /turf/closed/indestructible/fakedoor/maintenance{ name = "maintenance access" }, -/area/virtual_domain/powered) +/area/virtual_domain) "Qv" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 4 @@ -1488,7 +1470,7 @@ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Qy" = ( /obj/structure/disposalpipe/trunk{ dir = 8 @@ -1497,39 +1479,46 @@ dir = 1 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "QI" = ( /obj/structure/sign/calendar/directional/north, /obj/effect/spawner/random/trash/garbage, /turf/open/floor/iron/cafeteria, -/area/virtual_domain/powered) +/area/virtual_domain) "QK" = ( /obj/structure/table, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "QN" = ( /obj/structure/disposalpipe/segment{ dir = 9 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "QP" = ( /obj/structure/sign/poster/contraband/random/directional/east, /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "QW" = ( /obj/machinery/conveyor/auto{ dir = 5 }, /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) +"Rs" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/plating, +/area/virtual_domain) "Ru" = ( /obj/machinery/door/airlock/external/glass/ruin, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Ry" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 4 @@ -1539,14 +1528,14 @@ }, /obj/machinery/disposal/bin, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "RJ" = ( /turf/closed/indestructible/binary, -/area/virtual_domain/powered) +/area/virtual_domain) "RK" = ( /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "RZ" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 @@ -1555,7 +1544,7 @@ dir = 6 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Sg" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 1 @@ -1564,7 +1553,7 @@ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Sl" = ( /obj/effect/turf_decal/trimline/yellow/corner{ dir = 4 @@ -1573,53 +1562,54 @@ dir = 8 }, /turf/open/floor/iron, -/area/virtual_domain/powered) -"SC" = ( -/mob/living/basic/hivebot/strong, -/turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "SR" = ( /obj/effect/turf_decal/trimline/yellow/line, /obj/effect/decal/cleanable/glass, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "SS" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/closed/mineral, -/area/virtual_domain/powered) +/area/virtual_domain) +"ST" = ( +/obj/modular_map_root/safehouse{ + key = "shuttle_space" + }, +/turf/template_noop, +/area/virtual_domain/safehouse) "SU" = ( /obj/effect/spawner/structure/window, /obj/item/stack/rods/two, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "SZ" = ( /obj/structure/table/reinforced, /obj/effect/spawner/random/food_or_drink/booze, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Te" = ( /obj/effect/decal/cleanable/blood/tracks{ dir = 5 }, /obj/effect/mob_spawn/corpse/human/factory/qm, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Tn" = ( /obj/structure/broken_flooring/corner{ dir = 4 }, -/mob/living/basic/hivebot, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Tp" = ( /obj/machinery/door/poddoor/shutters/indestructible{ dir = 4; id = "factorylockdown" }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Tt" = ( /obj/machinery/conveyor/auto{ dir = 9 @@ -1628,12 +1618,12 @@ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "TH" = ( /obj/structure/broken_flooring/corner/directional/south, /obj/item/ammo_casing/shotgun/buckshot/spent, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Ue" = ( /obj/structure/table/reinforced, /obj/machinery/light/small/red/dim{ @@ -1641,17 +1631,17 @@ }, /obj/structure/sign/poster/official/cleanliness/directional/west, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Uw" = ( /obj/machinery/light/dim{ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "UO" = ( /obj/structure/broken_flooring/side/directional/north, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "UV" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 1 @@ -1660,18 +1650,18 @@ dir = 6 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "UX" = ( /obj/effect/turf_decal/trimline/yellow/line, /obj/machinery/light/small/red/dim, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "UY" = ( /obj/effect/decal/cleanable/blood/tracks{ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Vb" = ( /obj/effect/turf_decal/trimline/yellow/corner{ dir = 4 @@ -1681,7 +1671,7 @@ }, /obj/machinery/light/broken, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Vg" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 1 @@ -1691,60 +1681,60 @@ }, /obj/machinery/light/small/red/dim, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Vh" = ( /obj/structure/table/reinforced, /turf/open/floor/iron/cafeteria, -/area/virtual_domain/powered) +/area/virtual_domain) "Vy" = ( /obj/structure/broken_flooring/singular{ dir = 4 }, /obj/effect/mob_spawn/corpse/human/factory/guard, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "VA" = ( /obj/machinery/light/small/red/dim{ dir = 1 }, /obj/structure/table, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "VJ" = ( /obj/structure/broken_flooring/corner{ dir = 1 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "VL" = ( /obj/structure/sign/warning/secure_area/directional/south, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "VO" = ( /obj/machinery/light/broken{ dir = 1 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Wd" = ( /obj/structure/lattice/catwalk{ name = "industrial lift" }, /obj/structure/railing, /turf/open/chasm, -/area/virtual_domain/powered) +/area/virtual_domain) "Wp" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "WT" = ( /obj/effect/turf_decal/stripes{ dir = 8 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "WV" = ( /obj/machinery/conveyor/auto{ dir = 10; @@ -1755,32 +1745,32 @@ dir = 6 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Xb" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/closed/wall, -/area/virtual_domain/powered) +/area/virtual_domain) "Xc" = ( /obj/effect/turf_decal/trimline/yellow/line, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Xm" = ( /obj/item/gun/ballistic/shotgun/lethal, /obj/machinery/light/broken{ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Xo" = ( /obj/machinery/conveyor/auto{ dir = 4 }, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Xw" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 1 @@ -1789,7 +1779,7 @@ dir = 10 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "XL" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 5 @@ -1799,26 +1789,26 @@ }, /obj/structure/sign/warning/vacuum/external/directional/south, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "XN" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "XO" = ( /obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "XP" = ( /obj/structure/disposalpipe/segment, /obj/structure/railing/corner/end{ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "XQ" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 4 @@ -1827,89 +1817,76 @@ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "XR" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 1 }, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Yc" = ( /obj/item/gun/ballistic/revolver, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Yl" = ( /obj/structure/broken_flooring/corner/directional/west, /turf/open/floor/plating, -/area/virtual_domain/powered) -"Ym" = ( -/mob/living/simple_animal/pet/cat/space, -/obj/structure/bed/dogbed{ - name = "cat bed" - }, -/obj/item/toy/plush/moth{ - pixel_x = 3; - pixel_y = 4 - }, -/obj/machinery/light/small/dim/directional/south, -/obj/structure/sign/poster/official/moth_hardhat/directional/west, -/turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Yt" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Yz" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/poddoor/shutters/indestructible{ id = "factorylockdown" }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "YF" = ( /obj/machinery/light/small/red/dim, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "YL" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "YP" = ( /obj/effect/turf_decal/trimline/yellow/corner{ dir = 1 }, /obj/machinery/light/dim, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Zb" = ( /obj/effect/decal/cleanable/oil, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Zg" = ( /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-157" }, -/area/virtual_domain/powered) +/area/virtual_domain) "Zy" = ( /obj/structure/table, /obj/item/flashlight/lantern, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "ZI" = ( /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-203" }, -/area/virtual_domain/powered) +/area/virtual_domain) "ZP" = ( /obj/structure/railing, /turf/open/floor/iron/stairs/right{ dir = 8 }, -/area/virtual_domain/powered) +/area/virtual_domain) (1,1,1) = {" yQ @@ -1989,8 +1966,8 @@ yQ yQ yQ RJ -Mj -Mj +rO +rO eg eg SS @@ -1998,8 +1975,8 @@ eg eg eg Xb -Mj -Mj +rO +rO RJ yQ yQ @@ -2039,7 +2016,7 @@ yQ yQ yQ RJ -Mj +rO Bx SZ Ue @@ -2049,7 +2026,7 @@ eg OQ bs Ib -Mj +rO RJ RJ RJ @@ -2102,7 +2079,7 @@ zp eY RJ RJ -Mj +rO RJ RJ rO @@ -2150,9 +2127,9 @@ fg ZP Fw eY -Mj -Mj -Mj +rO +rO +rO AU AU AU @@ -2182,11 +2159,11 @@ yQ yQ RJ eg -vA +AO Dr bw Jq -gc +EK eg RJ eg @@ -2200,7 +2177,7 @@ hi FK eY eY -Mj +rO Ez AU aK @@ -2233,7 +2210,7 @@ yQ RJ eg jQ -lt +lW kU vU lN @@ -2249,8 +2226,8 @@ tr hi Ln eY -Mj -Mj +rO +rO AU AU BN @@ -2284,7 +2261,7 @@ RJ eg uU gj -kU +Ou Tn OR eg @@ -2452,12 +2429,12 @@ eY aK aK aK -JR -JR -JR -JR -JR -Qo +iZ +iZ +iZ +iZ +iZ +ST aK RJ "} @@ -2502,12 +2479,12 @@ eY eY aK aK -JR -JR -JR -JR -JR -JR +iZ +iZ +iZ +iZ +iZ +iZ aK RJ "} @@ -2552,12 +2529,12 @@ XL eg tr eY -JR -JR -JR -JR -JR -JR +iZ +iZ +iZ +iZ +iZ +iZ aK RJ "} @@ -2583,7 +2560,7 @@ AP KX JT bG -qk +Rs DA DA zE @@ -2602,12 +2579,12 @@ Wp Ru hi gs -JR -JR -JR -JR -JR -JR +iZ +iZ +iZ +iZ +iZ +iZ aK RJ "} @@ -2631,14 +2608,14 @@ jS gj rJ KX -Aw +KX Wd Ff lN XO gj DE -SC +kU tl qk mu @@ -2652,22 +2629,22 @@ cw eY tr eY -JR -JR -JR -JR -JR -JR +iZ +iZ +iZ +iZ +iZ +iZ aK RJ "} (16,1,1) = {" yQ RJ -Mj -Mj -Mj -Mj +rO +rO +rO +rO RJ eg eg @@ -2702,30 +2679,30 @@ eY eY aK aK -JR -JR -JR -JR -JR -JR +iZ +iZ +iZ +iZ +iZ +iZ aK RJ "} (17,1,1) = {" yQ RJ -Mj +rO BN AU -Mj -Mj -Mj +rO +rO +rO eg QW My Qy kU -po +io eg tr Is @@ -2752,12 +2729,12 @@ eY aK aK aK -JR -JR -JR -JR -JR -ev +iZ +iZ +iZ +iZ +iZ +bl aK RJ "} @@ -2781,7 +2758,7 @@ Tp Tp Tp eg -Ym +zd eg eg xa @@ -2882,11 +2859,11 @@ Yl pJ eg kn -pb -kU +Tn kU +Ou kU -Fa +EE kU YF eg @@ -2919,7 +2896,7 @@ aK aK aK Av -CR +BN tr kU ei @@ -2934,9 +2911,9 @@ eg rc mu rM -gc +EK +vQ vQ -tE mu mu eg @@ -2969,7 +2946,7 @@ aK aK aK aK -FO +AU eg eg wg @@ -2988,7 +2965,7 @@ kU On pi kU -Mj +rO eg wm xA @@ -3019,12 +2996,12 @@ aK aK aK AU -FO -Mj +AU +rO eg eg -Mj -Mj +rO +rO eY eY UO @@ -3035,10 +3012,10 @@ eg eg eg eg -Mj -Mj -Mj -Mj +rO +rO +rO +rO eg RZ vQ @@ -3069,11 +3046,11 @@ aK aK AU Ez -Mj -Mj +rO +rO RJ -Mj -Mj +rO +rO Vy hi eY @@ -3086,7 +3063,7 @@ Qd jv fR cB -Mj +rO RJ RJ eg @@ -3098,10 +3075,10 @@ YL eg bq hi -Mj +rO eY -Mj -Mj +rO +rO AU AU aK @@ -3118,8 +3095,8 @@ aK AU BN AU -Mj -Mj +rO +rO RJ RJ eY @@ -3140,25 +3117,25 @@ eg RJ RJ eg -Mj -Mj +rO +rO eg eg eg eg eg -Mj -Mj +rO +rO RJ RJ -Mj -Mj -Mj +rO +rO +rO RJ RJ -Mj -Mj -Mj +rO +rO +rO RJ "} (26,1,1) = {" @@ -3168,7 +3145,7 @@ RJ RJ RJ rO -Mj +rO RJ RJ RJ @@ -3386,7 +3363,7 @@ LN xM Qv LU -Mj +rO RJ yQ yQ @@ -3434,9 +3411,9 @@ eg eg eg eg -Mj -Mj -Mj +rO +rO +rO RJ yQ yQ @@ -3526,7 +3503,7 @@ yQ yQ yQ RJ -Mj +rO CX hi Nu @@ -3576,7 +3553,7 @@ yQ yQ yQ RJ -Mj +rO CX RJ Lp diff --git a/_maps/virtual_domains/pirates.dmm b/_maps/virtual_domains/pirates.dmm index 9868ab8e9b32ed..5db01cc36a9e54 100644 --- a/_maps/virtual_domains/pirates.dmm +++ b/_maps/virtual_domains/pirates.dmm @@ -1,43 +1,43 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ag" = ( -/obj/effect/mapping_helpers/burnt_floor, -/obj/effect/decal/cleanable/garbage, +"af" = ( +/obj/structure/flora/rock/pile/style_2, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"al" = ( +/obj/structure/flora/bush/sunny, +/turf/open/misc/grass, +/area/virtual_domain/fullbright) +"bb" = ( +/obj/effect/turf_decal/weather/sand, /turf/open/floor/wood, -/area/virtual_domain/powered) -"by" = ( -/obj/effect/turf_decal/weather/sand{ - dir = 5 +/area/virtual_domain/fullbright) +"bc" = ( +/turf/open/misc/beach/coast{ + dir = 10 }, -/turf/open/floor/wood, -/area/virtual_domain/powered) -"bz" = ( -/obj/structure/flora/bush/grassy{ - pixel_y = 8 +/area/virtual_domain/fullbright) +"be" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/rock/pile, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"bI" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 }, -/obj/structure/flora/bush/lavendergrass{ - pixel_y = -10 +/obj/structure/table/wood, +/obj/item/gun/energy/laser/musket{ + pixel_y = 7 }, -/turf/open/misc/grass, -/area/virtual_domain/powered) -"bP" = ( -/obj/structure/flora/bush/flowers_br/style_random, -/turf/open/misc/grass, -/area/virtual_domain/powered) -"cl" = ( -/obj/structure/flora/rock/style_3, -/turf/open/water/beach, -/area/virtual_domain/powered) -"ct" = ( -/obj/structure/closet/cabinet, -/obj/item/clothing/head/costume/pirate/armored, -/obj/item/clothing/suit/costume/pirate/captain/armored, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/wood/parquet, -/area/virtual_domain/powered) -"cx" = ( -/turf/closed/indestructible/binary, -/area/virtual_domain/powered) -"cJ" = ( +/obj/item/gun/energy/laser/musket{ + pixel_y = 2 + }, +/obj/item/gun/energy/laser/musket{ + pixel_y = -3 + }, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"cr" = ( /obj/item/stack/cannonball/shellball{ pixel_x = 13; pixel_y = 11 @@ -48,129 +48,250 @@ }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, -/area/virtual_domain/powered) -"cQ" = ( -/obj/structure/flora/grass/jungle/b{ - pixel_x = -15; - pixel_y = 9 +/area/virtual_domain/fullbright) +"cX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/claymore/cutlass, +/obj/item/clothing/head/costume/pirate/bandana/armored{ + pixel_x = -9; + pixel_y = 7 }, -/obj/structure/flora/rock/pile/jungle/large/style_2{ - pixel_x = -3; - pixel_y = -1 +/obj/structure/table/wood, +/obj/item/gun/energy/laser{ + pixel_y = -3 }, -/turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) -"dp" = ( -/turf/closed/wall/mineral/wood/nonmetal, -/area/virtual_domain/powered) -"dA" = ( -/obj/structure/bonfire/prelit, -/turf/open/misc/beach/sand, -/area/virtual_domain/powered) -"dQ" = ( -/obj/structure/flora/rock/style_4, +/turf/open/floor/wood{ + icon_state = "wood_large" + }, +/area/virtual_domain/fullbright) +"db" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt, /turf/open/water/beach, -/area/virtual_domain/powered) -"eb" = ( -/obj/structure/flora/bush/sparsegrass, -/turf/open/misc/grass, -/area/virtual_domain/powered) -"eD" = ( -/obj/structure/flora/coconuts{ - pixel_x = 9; - pixel_y = -14 +/area/virtual_domain/fullbright) +"dc" = ( +/turf/open/misc/beach/coast/corner, +/area/virtual_domain/fullbright) +"dN" = ( +/obj/machinery/door/airlock/vault{ + color = "#825427"; + name = "Ye Olde Strong Door" }, -/obj/structure/flora/tree/palm/style_2, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"eO" = ( +/obj/structure/flora/rock/pile, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"eP" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/misc/beach/coast{ + dir = 6 + }, +/area/virtual_domain/fullbright) +"eS" = ( /turf/open/misc/beach/sand, -/area/virtual_domain/powered) -"eQ" = ( -/turf/open/floor/carpet/blue, -/area/virtual_domain/powered) -"eW" = ( +/area/virtual_domain/fullbright) +"fd" = ( +/obj/structure/flora/grass/jungle/b, +/turf/open/misc/dirt/jungle, +/area/virtual_domain/fullbright) +"fh" = ( +/obj/structure/flora/bush/sparsegrass, +/obj/structure/flora/bush/lavendergrass, +/turf/open/misc/grass, +/area/virtual_domain/fullbright) +"fk" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/misc/grass, +/area/virtual_domain/fullbright) +"fw" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"fR" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/closed/indestructible/binary, +/area/virtual_domain/fullbright) +"gf" = ( /obj/effect/turf_decal/weather/sand{ - dir = 6 + dir = 5 }, +/obj/effect/decal/cleanable/glass, /turf/open/floor/wood, -/area/virtual_domain/powered) -"fx" = ( -/obj/structure/fluff/beach_umbrella{ - pixel_x = -7; - pixel_y = -10 +/area/virtual_domain/fullbright) +"gu" = ( +/obj/structure/flora/bush/stalky, +/turf/open/misc/beach/coast, +/area/virtual_domain/fullbright) +"gx" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/wood{ + icon_state = "wood_large" + }, +/area/virtual_domain/fullbright) +"gB" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 9 }, -/turf/open/misc/beach/sand, -/area/virtual_domain/powered) -"gk" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/landmark/bitrunning/cache_spawn, -/turf/open/floor/carpet/blue, -/area/virtual_domain/powered) -"gw" = ( -/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood{ icon_state = "wood_large" }, -/area/virtual_domain/powered) -"ht" = ( -/obj/structure/bookcase/random/fiction, +/area/virtual_domain/fullbright) +"gK" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/flora/bush/ferny, +/turf/open/misc/grass, +/area/virtual_domain/fullbright) +"hb" = ( +/turf/closed/indestructible/binary, +/area/virtual_domain/fullbright) +"hn" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"hq" = ( +/obj/structure/closet/crate/grave, +/obj/structure/flora/grass/jungle/b, +/turf/open/misc/dirt/jungle, +/area/virtual_domain/fullbright) +"iw" = ( +/obj/modular_map_root/safehouse{ + key = "wood" + }, +/turf/template_noop, +/area/virtual_domain/safehouse) +"jp" = ( +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"jE" = ( /turf/open/floor/wood/parquet, -/area/virtual_domain/powered) -"hH" = ( -/obj/item/clothing/suit/armor/militia{ - pixel_x = -5; - pixel_y = 12 +/area/virtual_domain) +"jH" = ( +/obj/structure/headpike/bone, +/turf/open/misc/beach/coast, +/area/virtual_domain/fullbright) +"jN" = ( +/obj/structure/flora/tree/jungle, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/misc/grass, +/area/virtual_domain/fullbright) +"lF" = ( +/obj/structure/table/wood, +/obj/item/melee/energy/sword/pirate{ + pixel_y = 10 }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 +/obj/item/clothing/mask/cigarette/cigar{ + pixel_x = 4 }, -/obj/item/clothing/suit/armor/militia{ - pixel_x = -5; - pixel_y = 6 +/obj/item/lighter{ + pixel_x = 10; + pixel_y = -8 }, -/obj/item/clothing/suit/armor/militia{ - pixel_x = -5; - pixel_y = -3 +/obj/machinery/light/small/directional/north, +/turf/open/floor/carpet/blue, +/area/virtual_domain) +"lK" = ( +/obj/item/stack/cannonball{ + pixel_x = 7; + pixel_y = 8 }, -/obj/item/clothing/head/costume/fancy{ - pixel_x = 6; - pixel_y = 12 +/obj/item/stack/cannonball{ + pixel_x = 11; + pixel_y = -4 }, -/obj/item/clothing/head/costume/fancy{ +/obj/effect/turf_decal/weather/sand{ + dir = 1 + }, +/obj/effect/decal/cleanable/oil/streak, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"mp" = ( +/turf/open/misc/beach/coast{ + dir = 4 + }, +/area/virtual_domain/fullbright) +"mR" = ( +/obj/machinery/smartfridge/drying_rack, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"nb" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 9 + }, +/obj/structure/fermenting_barrel{ pixel_x = 6; - pixel_y = 6 + pixel_y = 11 }, -/obj/item/clothing/head/hats/coordinator{ - pixel_x = 8; - pixel_y = -5 +/obj/effect/mob_spawn/ghost_role/human/pirate/skeleton, +/turf/open/floor/wood{ + icon_state = "wood_large" }, -/obj/structure/closet/cabinet, -/turf/open/floor/wood, -/area/virtual_domain/powered) -"hM" = ( -/obj/structure/closet/crate/goldcrate, +/area/virtual_domain/fullbright) +"nr" = ( +/mob/living/basic/trooper/pirate/melee, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"nN" = ( +/obj/structure/flora/rock, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"oB" = ( +/obj/structure/flora/grass/jungle, /turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) -"hW" = ( -/obj/structure/chair/comfy/carp{ +/area/virtual_domain/fullbright) +"oL" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/bed/maint, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"oM" = ( +/obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"pi" = ( +/obj/structure/flora/rock/style_3, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"pn" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/misc/grass, +/area/virtual_domain/fullbright) +"qk" = ( +/turf/open/misc/dirt/jungle, +/area/virtual_domain/fullbright) +"qE" = ( +/obj/structure/table/wood, +/obj/item/book/manual/wiki/ordnance, /turf/open/floor/carpet/blue, -/area/virtual_domain/powered) -"iM" = ( +/area/virtual_domain) +"qS" = ( +/obj/effect/decal/cleanable/ants, +/turf/open/misc/grass, +/area/virtual_domain/fullbright) +"ri" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 }, /obj/effect/decal/cleanable/dirt/dust, /mob/living/basic/trooper/pirate/ranged/space, /turf/open/floor/carpet/blue, -/area/virtual_domain/powered) -"iO" = ( -/obj/effect/turf_decal/weather/sand{ - dir = 4 - }, -/turf/open/floor/wood, -/area/virtual_domain/powered) -"jl" = ( +/area/virtual_domain) +"rm" = ( +/obj/structure/closet/crate/goldcrate, +/turf/open/misc/dirt/jungle, +/area/virtual_domain/fullbright) +"rn" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 }, @@ -188,145 +309,140 @@ pixel_x = -5 }, /turf/open/floor/wood, -/area/virtual_domain/powered) -"jz" = ( -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/wood{ - icon_state = "wood_large" +/area/virtual_domain/fullbright) +"ru" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/bed/maint{ + pixel_x = 2; + pixel_y = 1 }, -/area/virtual_domain/powered) -"jB" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/item/toy/plush/beeplushie, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"sj" = ( +/obj/effect/mine/explosive/light, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"td" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/carpet/blue, +/area/virtual_domain) +"tw" = ( +/obj/structure/bookcase/random/adult, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"tH" = ( +/obj/structure/closet/cabinet, +/obj/item/clothing/head/costume/pirate/armored, +/obj/item/clothing/suit/costume/pirate/captain/armored, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"tQ" = ( +/obj/structure/barricade/sandbags, /obj/effect/turf_decal/weather/sand{ - dir = 4 + dir = 10 }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/machinery/jukebox, /turf/open/floor/wood{ icon_state = "wood_large" }, -/area/virtual_domain/powered) -"jC" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/item/reagent_containers/cup/glass/bottle/rum{ - desc = "Rum with ghostly properties that can help the drinker enter the spirit realm. It has fermented under the sea of space for ages."; - name = "Ghost Pirate Rum"; - pixel_x = -4; - pixel_y = 12 +/area/virtual_domain/fullbright) +"ub" = ( +/turf/template_noop, +/area/virtual_domain/safehouse) +"uk" = ( +/obj/structure/flora/rock{ + pixel_x = 7 }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = -7; - pixel_y = 5 +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"uG" = ( +/obj/structure/barricade/sandbags, +/obj/effect/turf_decal/weather/sand{ + dir = 4 }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = 3; - pixel_y = 7 +/turf/open/floor/wood{ + icon_state = "wood_large" }, -/turf/open/floor/carpet/blue, -/area/virtual_domain/powered) -"jQ" = ( -/obj/item/gun/energy/laser/hellgun{ +/area/virtual_domain/fullbright) +"uH" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table/wood, +/obj/item/flashlight/flare/torch{ pixel_y = 10 }, -/turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) -"kg" = ( +/obj/item/flashlight/flare/torch{ + pixel_x = 8; + pixel_y = 6 + }, +/turf/open/floor/wood{ + icon_state = "wood_large" + }, +/area/virtual_domain/fullbright) +"vR" = ( /obj/effect/turf_decal/siding/wood{ - dir = 1 + dir = 10 }, /turf/open/floor/wood, -/area/virtual_domain/powered) -"kl" = ( -/obj/structure/cannon, -/obj/effect/turf_decal/siding/wood, -/obj/effect/decal/cleanable/ash/large{ - pixel_y = -5; - pixel_x = 8 +/area/virtual_domain/fullbright) +"wj" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/oil, /turf/open/floor/wood, -/area/virtual_domain/powered) -"lC" = ( -/obj/item/stack/cannonball{ - pixel_x = 7; - pixel_y = 8 - }, -/obj/item/stack/cannonball{ - pixel_x = 11; - pixel_y = -4 - }, -/obj/effect/turf_decal/weather/sand{ - dir = 1 +/area/virtual_domain/fullbright) +"wu" = ( +/obj/structure/flora/grass/jungle/b{ + pixel_x = -15; + pixel_y = 9 }, -/obj/effect/decal/cleanable/oil/streak, -/turf/open/floor/wood, -/area/virtual_domain/powered) -"me" = ( -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/wood, -/area/virtual_domain/powered) -"mw" = ( -/obj/structure/flora/grass/jungle/b/style_random{ - pixel_x = -13; - pixel_y = 18 +/obj/structure/flora/rock/pile/jungle/large/style_2{ + pixel_x = -3; + pixel_y = -1 }, /turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) -"mP" = ( -/obj/structure/flora/bush/fullgrass, -/turf/open/misc/grass, -/area/virtual_domain/powered) -"nz" = ( -/obj/effect/mob_spawn/corpse/human/pirate, -/turf/open/misc/beach/coast{ - dir = 8 +/area/virtual_domain/fullbright) +"wH" = ( +/obj/structure/fluff/beach_umbrella{ + pixel_x = -7; + pixel_y = -10 }, -/area/virtual_domain/powered) -"nQ" = ( -/obj/machinery/loot_locator, -/turf/open/floor/carpet/blue, -/area/virtual_domain/powered) -"nS" = ( -/obj/structure/flora/rock/pile/jungle/large, -/turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) -"nX" = ( -/obj/effect/decal/cleanable/dirt/dust, -/mob/living/basic/trooper/pirate/melee/space, -/turf/open/floor/wood/parquet, -/area/virtual_domain/powered) -"oo" = ( -/obj/machinery/smartfridge/drying_rack, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) -"oU" = ( -/turf/open/misc/beach/coast{ - dir = 10 +/area/virtual_domain/fullbright) +"wP" = ( +/obj/structure/railing{ + color = "#4C3117"; + name = "wooden railing" + }, +/obj/effect/turf_decal/weather/sand{ + dir = 9 }, -/area/virtual_domain/powered) -"pq" = ( -/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, -/area/virtual_domain/powered) -"px" = ( -/obj/structure/headpike/bone{ - pixel_y = 24 +/area/virtual_domain/fullbright) +"xg" = ( +/turf/template_noop, +/area/template_noop) +"xp" = ( +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"zc" = ( +/obj/item/gun/energy/laser/hellgun{ + pixel_y = 10 }, -/turf/open/misc/beach/coast, -/area/virtual_domain/powered) -"pP" = ( -/turf/open/misc/beach/coast, -/area/virtual_domain/powered) -"pU" = ( -/obj/effect/mob_spawn/corpse/human/pirate, /turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) -"qj" = ( -/obj/structure/barricade/wooden, -/turf/open/misc/beach/sand, -/area/virtual_domain/powered) -"qm" = ( +/area/virtual_domain/fullbright) +"zj" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/garbage, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"zk" = ( /obj/effect/turf_decal/siding/wood, /obj/item/melee/sabre{ pixel_y = 12; @@ -335,478 +451,390 @@ /obj/item/gun/energy/laser/retro, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, -/area/virtual_domain/powered) -"qx" = ( +/area/virtual_domain/fullbright) +"zR" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/template_noop, +/area/virtual_domain/safehouse) +"zU" = ( +/obj/structure/flora/coconuts{ + pixel_x = 12 + }, +/obj/structure/flora/tree/palm, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"zW" = ( +/obj/structure/flora/bush/grassy{ + pixel_y = 8 + }, +/obj/structure/flora/bush/lavendergrass{ + pixel_y = -10 + }, +/turf/open/misc/grass, +/area/virtual_domain/fullbright) +"AB" = ( +/obj/structure/headpike/bone{ + pixel_y = 24 + }, +/turf/open/misc/beach/coast, +/area/virtual_domain/fullbright) +"AF" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/rack{ + icon = 'icons/obj/fluff/general.dmi'; + icon_state = "minibar"; + name = "skeletal minibar" + }, +/obj/item/storage/bag/money/dutchmen{ + pixel_y = 13 + }, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"AP" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"Bu" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 }, /obj/effect/mapping_helpers/burnt_floor, /obj/effect/decal/cleanable/dirt/dust, -/mob/living/basic/trooper/pirate/ranged, +/obj/structure/bed/maint{ + pixel_x = 2; + pixel_y = 13 + }, /turf/open/floor/wood, -/area/virtual_domain/powered) -"qN" = ( +/area/virtual_domain/fullbright) +"BU" = ( +/turf/open/floor/carpet/blue, +/area/virtual_domain) +"BV" = ( +/obj/structure/bonfire/prelit, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"BX" = ( /obj/structure/flora/bush/sunny/style_3{ pixel_y = 22 }, /turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) -"qX" = ( -/obj/effect/turf_decal/weather/sand{ - dir = 9 - }, -/obj/structure/fermenting_barrel{ - pixel_x = 6; - pixel_y = 11 - }, -/obj/effect/mob_spawn/ghost_role/human/pirate/skeleton, -/turf/open/floor/wood{ - icon_state = "wood_large" +/area/virtual_domain/fullbright) +"Ci" = ( +/turf/closed/wall/mineral/wood/nonmetal, +/area/virtual_domain/fullbright) +"Cu" = ( +/obj/item/kirbyplants/organic/plant21{ + pixel_x = -8 }, -/area/virtual_domain/powered) -"sn" = ( -/obj/structure/table/wood, -/obj/item/book/manual/wiki/ordnance, -/turf/open/floor/carpet/blue, -/area/virtual_domain/powered) -"so" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 +/obj/structure/filingcabinet{ + pixel_x = 11 }, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"CL" = ( +/obj/structure/flora/rock/pile/jungle/large, +/turf/open/misc/dirt/jungle, +/area/virtual_domain/fullbright) +"Dd" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"DM" = ( +/turf/closed/mineral/random/jungle, +/area/virtual_domain/fullbright) +"Eb" = ( +/obj/structure/flora/tree/palm, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"EL" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/carpet/blue, -/area/virtual_domain/powered) -"th" = ( -/obj/effect/turf_decal/weather/sand, +/mob/living/basic/trooper/pirate/melee/space, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"ER" = ( +/obj/effect/turf_decal/siding/wood, +/mob/living/basic/trooper/pirate/ranged, /turf/open/floor/wood, -/area/virtual_domain/powered) -"tk" = ( -/obj/structure/flora/bush/flowers_pp, -/turf/open/misc/grass, -/area/virtual_domain/powered) -"to" = ( -/mob/living/basic/trooper/pirate/melee, -/turf/open/misc/grass, -/area/virtual_domain/powered) -"ub" = ( -/turf/template_noop, -/area/virtual_domain/safehouse) -"uw" = ( +/area/virtual_domain/fullbright) +"Fl" = ( /obj/structure/barricade/sandbags, +/obj/effect/turf_decal/weather/sand, +/turf/open/floor/wood{ + icon_state = "wood_large" + }, +/area/virtual_domain/fullbright) +"FP" = ( /obj/effect/turf_decal/weather/sand{ dir = 4 }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/machinery/jukebox, /turf/open/floor/wood{ icon_state = "wood_large" }, -/area/virtual_domain/powered) -"uM" = ( -/obj/structure/flora/bush/stalky{ - pixel_y = 13; - pixel_x = -8 - }, -/turf/open/water/beach, -/area/virtual_domain/powered) -"uT" = ( -/obj/structure/closet/crate/grave, -/obj/structure/flora/grass/jungle/b, +/area/virtual_domain/fullbright) +"Gl" = ( +/obj/structure/flora/rock/pile/style_3, /turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) -"wb" = ( -/obj/structure/flora/rock, +/area/virtual_domain/fullbright) +"Gy" = ( +/obj/structure/flora/rock/style_2, /turf/open/water/beach, -/area/virtual_domain/powered) -"we" = ( -/obj/effect/mine/explosive/light, -/turf/open/misc/beach/sand, -/area/virtual_domain/powered) -"xc" = ( -/turf/open/misc/beach/coast{ - dir = 4 - }, -/area/virtual_domain/powered) -"xg" = ( -/turf/template_noop, -/area/template_noop) -"xm" = ( -/obj/structure/barricade/wooden/crude, +/area/virtual_domain/fullbright) +"Hn" = ( +/obj/effect/baseturf_helper/virtual_domain, /turf/closed/wall/mineral/wood/nonmetal, -/area/virtual_domain/powered) -"xB" = ( -/obj/structure/fermenting_barrel/gunpowder{ - pixel_x = -4; - pixel_y = 17 - }, -/obj/structure/fermenting_barrel/gunpowder{ - pixel_x = 4 - }, -/obj/item/stack/cannonball/four{ - pixel_x = -9; - pixel_y = -10 - }, -/obj/item/stack/cannonball{ - pixel_x = 3; - pixel_y = 8 - }, -/obj/item/reagent_containers/cup/bucket/wooden{ - pixel_y = -10 +/area/virtual_domain) +"HO" = ( +/obj/structure/table/wood, +/mob/living/basic/parrot{ + name = "pepper" }, -/turf/open/misc/beach/sand, -/area/virtual_domain/powered) -"xC" = ( +/turf/open/floor/carpet/blue, +/area/virtual_domain) +"ID" = ( +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/misc/dirt/jungle, +/area/virtual_domain/fullbright) +"IW" = ( /obj/effect/turf_decal/weather/dirt{ - dir = 1 + dir = 5 }, -/obj/effect/turf_decal/weather/dirt, -/turf/open/water/beach, -/area/virtual_domain/powered) -"xI" = ( -/obj/structure/flora/rock/pile/style_2, -/turf/open/water/beach, -/area/virtual_domain/powered) -"yc" = ( -/obj/effect/turf_decal/weather/dirt, /turf/open/water/beach, -/area/virtual_domain/powered) -"ye" = ( -/turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) -"yi" = ( -/mob/living/basic/trooper/pirate/melee, -/turf/open/misc/beach/sand, -/area/virtual_domain/powered) -"yq" = ( -/obj/structure/barricade/sandbags, -/turf/open/misc/beach/sand, -/area/virtual_domain/powered) -"yw" = ( +/area/virtual_domain/fullbright) +"Jf" = ( +/obj/structure/flora/bush/sparsegrass, +/turf/open/misc/grass, +/area/virtual_domain/fullbright) +"Jq" = ( /obj/effect/mapping_helpers/burnt_floor, -/mob/living/basic/trooper/pirate/ranged, -/obj/structure/chair/wood, -/turf/open/floor/wood{ - icon_state = "wood_large" +/obj/structure/bed/maint{ + pixel_x = -10; + pixel_y = 9 }, -/area/virtual_domain/powered) -"yA" = ( +/obj/effect/decal/cleanable/wrapping, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"Jx" = ( /obj/item/bedsheet/rainbow/double, /obj/structure/bed/double, /turf/open/floor/carpet/blue, -/area/virtual_domain/powered) -"zf" = ( -/obj/structure/flora/bush/flowers_br/style_random, -/obj/structure/flora/bush/ferny, -/turf/open/misc/grass, -/area/virtual_domain/powered) -"zg" = ( -/obj/structure/flora/rock/pile/style_3, -/turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) -"zR" = ( -/obj/effect/baseturf_helper/virtual_domain, -/turf/template_noop, -/area/virtual_domain/safehouse) -"Ax" = ( -/obj/effect/turf_decal/weather/dirt, -/obj/effect/turf_decal/weather/dirt, -/turf/open/water/beach, -/area/virtual_domain/powered) -"AU" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 1 +/area/virtual_domain) +"JK" = ( +/obj/structure/flora/bush/stalky{ + pixel_y = 13; + pixel_x = -8 }, /turf/open/water/beach, -/area/virtual_domain/powered) -"BC" = ( -/obj/effect/turf_decal/siding/wood, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/wood, -/area/virtual_domain/powered) -"BO" = ( -/obj/structure/bookcase/random/adult, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/wood/parquet, -/area/virtual_domain/powered) -"Cc" = ( -/obj/structure/flora/tree/palm, -/turf/open/misc/beach/sand, -/area/virtual_domain/powered) -"Ct" = ( -/turf/open/misc/beach/coast/corner, -/area/virtual_domain/powered) -"Dm" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/table/wood, -/obj/item/flashlight/flare/torch{ - pixel_y = 10 - }, -/obj/item/flashlight/flare/torch{ - pixel_x = 8; - pixel_y = 6 +/area/virtual_domain/fullbright) +"JX" = ( +/turf/open/misc/beach/coast/corner{ + dir = 1 }, -/turf/open/floor/wood{ - icon_state = "wood_large" +/area/virtual_domain/fullbright) +"KS" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 }, -/area/virtual_domain/powered) -"DJ" = ( -/obj/effect/mapping_helpers/burnt_floor, -/obj/structure/bed/maint{ - pixel_x = -10; - pixel_y = 9 +/obj/machinery/light/small/directional/south, +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/carpet/blue, +/area/virtual_domain) +"KV" = ( +/obj/structure/flora/rock/pile/jungle/style_3{ + pixel_x = -15; + pixel_y = -4 }, -/obj/effect/decal/cleanable/wrapping, -/turf/open/floor/wood, -/area/virtual_domain/powered) -"DL" = ( -/obj/structure/flora/bush/sunny, +/turf/open/misc/dirt/jungle, +/area/virtual_domain/fullbright) +"LC" = ( +/mob/living/basic/trooper/pirate/melee, /turf/open/misc/grass, -/area/virtual_domain/powered) -"ED" = ( -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/weather/sand{ - dir = 10 - }, -/obj/effect/turf_decal/weather/sand{ - dir = 9 +/area/virtual_domain/fullbright) +"LK" = ( +/obj/structure/fermenting_barrel/gunpowder{ + pixel_x = -4; + pixel_y = 17 }, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, -/area/virtual_domain/powered) -"EZ" = ( +/area/virtual_domain/fullbright) +"LP" = ( /obj/effect/turf_decal/weather/sand{ - dir = 9 - }, -/turf/open/floor/wood{ - icon_state = "wood_large" + dir = 5 }, -/area/virtual_domain/powered) -"FG" = ( +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"Mf" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/item/claymore/cutlass, -/obj/item/clothing/head/costume/pirate/bandana/armored{ - pixel_x = -9; - pixel_y = 7 - }, -/obj/structure/table/wood, -/obj/item/gun/energy/laser{ - pixel_y = -3 - }, /turf/open/floor/wood{ icon_state = "wood_large" }, -/area/virtual_domain/powered) -"FT" = ( -/turf/closed/mineral/random/jungle, -/area/virtual_domain/powered) -"GF" = ( -/obj/effect/turf_decal/weather/dirt, -/obj/structure/flora/rock/pile, -/turf/open/water/beach, -/area/virtual_domain/powered) -"GG" = ( +/area/virtual_domain/fullbright) +"MG" = ( /obj/structure/barricade/sandbags, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"MP" = ( /obj/effect/turf_decal/weather/sand{ - dir = 6 - }, -/obj/item/binoculars{ - pixel_x = -1; - pixel_y = 1 + dir = 4 }, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"NE" = ( +/obj/effect/mob_spawn/corpse/human/damaged, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"NN" = ( +/obj/structure/flora/bush/fullgrass, +/turf/open/misc/grass, +/area/virtual_domain/fullbright) +"NP" = ( +/obj/effect/mapping_helpers/burnt_floor, +/mob/living/basic/trooper/pirate/ranged, +/obj/structure/chair/wood, /turf/open/floor/wood{ icon_state = "wood_large" }, -/area/virtual_domain/powered) -"Hp" = ( -/obj/effect/turf_decal/siding/wood, -/mob/living/basic/trooper/pirate/ranged, -/turf/open/floor/wood, -/area/virtual_domain/powered) -"HY" = ( +/area/virtual_domain/fullbright) +"NU" = ( +/obj/structure/flora/grass/jungle/b/style_random{ + pixel_x = -13; + pixel_y = 18 + }, +/turf/open/misc/dirt/jungle, +/area/virtual_domain/fullbright) +"Oi" = ( +/obj/effect/mob_spawn/corpse/human/pirate, +/turf/open/misc/dirt/jungle, +/area/virtual_domain/fullbright) +"Ov" = ( /turf/open/misc/beach/coast{ dir = 6 }, -/area/virtual_domain/powered) -"It" = ( -/obj/structure/flora/bush/sparsegrass, -/obj/structure/flora/bush/lavendergrass, -/turf/open/misc/grass, -/area/virtual_domain/powered) -"Iz" = ( +/area/virtual_domain/fullbright) +"Ox" = ( +/obj/structure/chair/comfy/carp{ + dir = 1 + }, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/bed/maint, +/turf/open/floor/carpet/blue, +/area/virtual_domain) +"Oz" = ( +/obj/structure/flora/rock/pile/jungle/style_2, +/turf/open/misc/dirt/jungle, +/area/virtual_domain/fullbright) +"OD" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 6 + }, /turf/open/floor/wood, -/area/virtual_domain/powered) -"IF" = ( +/area/virtual_domain/fullbright) +"OW" = ( /obj/effect/turf_decal/weather/dirt{ - dir = 4 + dir = 1 }, /turf/open/water/beach, -/area/virtual_domain/powered) -"IG" = ( -/obj/effect/mob_spawn/corpse/human/pirate, -/obj/effect/decal/cleanable/blood/gibs/old, -/turf/open/misc/beach/sand, -/area/virtual_domain/powered) -"IM" = ( -/obj/effect/turf_decal/weather/sand{ - dir = 10 - }, +/area/virtual_domain/fullbright) +"Qc" = ( +/obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood{ icon_state = "wood_large" }, -/area/virtual_domain/powered) -"Jo" = ( -/obj/effect/landmark/bitrunning/cache_spawn, -/turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) -"Jr" = ( -/obj/structure/headpike/bone, -/turf/open/misc/beach/coast, -/area/virtual_domain/powered) -"Jv" = ( -/obj/effect/turf_decal/siding/wood, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood, -/area/virtual_domain/powered) -"JT" = ( -/obj/effect/decal/cleanable/ants, -/turf/open/misc/grass, -/area/virtual_domain/powered) -"Kb" = ( -/obj/structure/railing{ - color = "#4C3117"; - name = "wooden railing" - }, -/obj/effect/decal/cleanable/vomit/old, +/area/virtual_domain/fullbright) +"QF" = ( +/obj/effect/turf_decal/weather/dirt, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"QG" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/weather/dirt, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"QN" = ( +/obj/structure/barricade/sandbags, /obj/effect/turf_decal/weather/sand{ - dir = 1 + dir = 6 }, -/turf/open/floor/wood, -/area/virtual_domain/powered) -"Kl" = ( -/turf/open/misc/beach/sand, -/area/virtual_domain/powered) -"Kw" = ( -/obj/machinery/door/airlock/vault{ - color = "#825427"; - name = "Ye Olde Strong Door" +/obj/item/binoculars{ + pixel_x = -1; + pixel_y = 1 }, -/turf/open/floor/wood/parquet, -/area/virtual_domain/powered) -"KC" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 5 +/turf/open/floor/wood{ + icon_state = "wood_large" }, +/area/virtual_domain/fullbright) +"QU" = ( +/obj/effect/mob_spawn/corpse/human/pirate/melee, /turf/open/water/beach, -/area/virtual_domain/powered) -"KG" = ( +/area/virtual_domain/fullbright) +"QX" = ( +/obj/item/clothing/suit/armor/militia{ + pixel_x = -5; + pixel_y = 12 + }, /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/structure/table/wood, -/obj/item/gun/energy/laser/musket{ - pixel_y = 7 - }, -/obj/item/gun/energy/laser/musket{ - pixel_y = 2 +/obj/item/clothing/suit/armor/militia{ + pixel_x = -5; + pixel_y = 6 }, -/obj/item/gun/energy/laser/musket{ +/obj/item/clothing/suit/armor/militia{ + pixel_x = -5; pixel_y = -3 }, +/obj/item/clothing/head/costume/fancy{ + pixel_x = 6; + pixel_y = 12 + }, +/obj/item/clothing/head/costume/fancy{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/clothing/head/hats/coordinator{ + pixel_x = 8; + pixel_y = -5 + }, +/obj/structure/closet/cabinet, /turf/open/floor/wood, -/area/virtual_domain/powered) -"KQ" = ( -/obj/structure/flora/rock/style_2, -/turf/open/water/beach, -/area/virtual_domain/powered) -"Ld" = ( -/obj/structure/flora/rock/pile, -/turf/open/water/beach, -/area/virtual_domain/powered) -"Ma" = ( -/obj/structure/flora/bush/sparsegrass/style_random, -/turf/open/misc/grass, -/area/virtual_domain/powered) -"Mi" = ( +/area/virtual_domain/fullbright) +"RJ" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 }, +/obj/effect/mapping_helpers/burnt_floor, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/oil, -/turf/open/floor/wood, -/area/virtual_domain/powered) -"MW" = ( -/obj/effect/turf_decal/weather/sand{ - dir = 5 - }, -/obj/effect/decal/cleanable/glass, +/mob/living/basic/trooper/pirate/ranged, /turf/open/floor/wood, -/area/virtual_domain/powered) -"Nh" = ( -/obj/structure/flora/rock/pile/jungle/style_3{ - pixel_x = -15; - pixel_y = -4 +/area/virtual_domain/fullbright) +"RO" = ( +/obj/structure/flora/coconuts{ + pixel_x = 9; + pixel_y = -14 }, -/turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) -"Nk" = ( -/turf/open/floor/wood, -/area/virtual_domain/powered) -"Nz" = ( +/obj/structure/flora/tree/palm/style_2, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Sc" = ( /obj/structure/flora/bush/jungle, /turf/open/misc/grass, -/area/virtual_domain/powered) -"NI" = ( -/obj/structure/railing{ - color = "#4C3117"; - name = "wooden railing" +/area/virtual_domain/fullbright) +"SD" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/weather/sand{ + dir = 10 }, /obj/effect/turf_decal/weather/sand{ dir = 9 }, /turf/open/floor/wood, -/area/virtual_domain/powered) -"ON" = ( -/obj/item/kirbyplants/organic/plant21{ - pixel_x = -8 - }, -/obj/structure/filingcabinet{ - pixel_x = 11 - }, -/turf/open/floor/wood/parquet, -/area/virtual_domain/powered) -"OP" = ( -/obj/structure/flora/bush/stalky, +/area/virtual_domain/fullbright) +"SK" = ( /turf/open/misc/beach/coast, -/area/virtual_domain/powered) -"Pq" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/effect/mapping_helpers/burnt_floor, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/bed/maint{ - pixel_x = 2; - pixel_y = 13 - }, -/turf/open/floor/wood, -/area/virtual_domain/powered) -"Pz" = ( -/obj/structure/table/wood, -/mob/living/simple_animal/parrot{ - name = "pepper" - }, -/turf/open/floor/carpet/blue, -/area/virtual_domain/powered) -"PQ" = ( -/obj/structure/flora/grass/jungle/b, -/turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) -"Qb" = ( -/obj/structure/flora/rock{ - pixel_x = 7 - }, -/turf/open/water/beach, -/area/virtual_domain/powered) -"Rr" = ( +/area/virtual_domain/fullbright) +"ST" = ( /obj/structure/bed/maint{ pixel_x = -5; pixel_y = 9 @@ -815,39 +843,27 @@ dir = 6 }, /turf/open/floor/wood, -/area/virtual_domain/powered) -"RR" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood{ - icon_state = "wood_large" - }, -/area/virtual_domain/powered) -"Sm" = ( -/obj/structure/flora/tree/jungle, -/obj/structure/flora/bush/fullgrass/style_random, +/area/virtual_domain/fullbright) +"Ta" = ( +/obj/structure/flora/bush/flowers_pp, /turf/open/misc/grass, -/area/virtual_domain/powered) -"St" = ( -/obj/structure/table/wood, -/obj/item/melee/energy/sword/pirate{ - pixel_y = 10 - }, -/obj/item/clothing/mask/cigarette/cigar{ - pixel_x = 4 - }, -/obj/item/lighter{ - pixel_x = 10; - pixel_y = -8 +/area/virtual_domain/fullbright) +"Th" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 10 }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/carpet/blue, -/area/virtual_domain/powered) -"Tp" = ( -/turf/open/misc/beach/coast/corner{ - dir = 1 +/turf/open/floor/wood{ + icon_state = "wood_large" }, -/area/virtual_domain/powered) -"Tt" = ( +/area/virtual_domain/fullbright) +"To" = ( +/obj/structure/bookcase/random/fiction, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"Ul" = ( +/turf/closed/wall/mineral/wood/nonmetal, +/area/virtual_domain) +"Uw" = ( /obj/structure/cannon{ dir = 1 }, @@ -855,121 +871,117 @@ dir = 1 }, /turf/open/floor/wood, -/area/virtual_domain/powered) -"TO" = ( +/area/virtual_domain/fullbright) +"Vx" = ( +/obj/structure/flora/rock/style_4, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"VE" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"VG" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/machinery/light/small/directional/south, -/obj/effect/landmark/bitrunning/cache_spawn, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/carpet/blue, -/area/virtual_domain/powered) -"TP" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 4 - }, -/turf/open/misc/beach/coast{ - dir = 6 +/area/virtual_domain) +"Wu" = ( +/obj/structure/fermenting_barrel/gunpowder{ + pixel_x = -4; + pixel_y = 17 }, -/area/virtual_domain/powered) -"TQ" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/bed/maint{ - pixel_x = 2; - pixel_y = 1 +/obj/structure/fermenting_barrel/gunpowder{ + pixel_x = 4 }, -/obj/effect/decal/cleanable/cobweb, -/obj/item/toy/plush/beeplushie, -/turf/open/floor/wood, -/area/virtual_domain/powered) -"Uy" = ( -/obj/effect/baseturf_helper/virtual_domain, -/turf/closed/indestructible/binary, -/area/virtual_domain/powered) -"UE" = ( -/obj/structure/barricade/sandbags, -/obj/effect/turf_decal/weather/sand{ - dir = 10 +/obj/item/stack/cannonball/four{ + pixel_x = -9; + pixel_y = -10 }, -/turf/open/floor/wood{ - icon_state = "wood_large" +/obj/item/stack/cannonball{ + pixel_x = 3; + pixel_y = 8 }, -/area/virtual_domain/powered) -"Vg" = ( -/obj/effect/mob_spawn/corpse/human/pirate/melee, -/turf/open/water/beach, -/area/virtual_domain/powered) -"Vk" = ( -/obj/structure/barricade/sandbags, -/obj/effect/turf_decal/weather/sand, -/turf/open/floor/wood{ - icon_state = "wood_large" +/obj/item/reagent_containers/cup/bucket/wooden{ + pixel_y = -10 }, -/area/virtual_domain/powered) -"VC" = ( -/obj/effect/mob_spawn/corpse/human/damaged, -/turf/open/water/beach, -/area/virtual_domain/powered) -"VF" = ( -/turf/open/water/beach, -/area/virtual_domain/powered) -"VX" = ( -/obj/effect/mapping_helpers/burnt_floor, -/obj/structure/rack{ - icon = 'icons/obj/fluff/general.dmi'; - icon_state = "minibar"; - name = "skeletal minibar" +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Wx" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"WW" = ( +/turf/template_noop, +/area/virtual_domain/fullbright) +"XP" = ( +/obj/structure/barricade/wooden/crude, +/turf/closed/wall/mineral/wood/nonmetal, +/area/virtual_domain/fullbright) +"XW" = ( +/obj/effect/mob_spawn/corpse/human/pirate, +/turf/open/misc/beach/coast{ + dir = 8 }, -/obj/item/storage/bag/money/dutchmen{ - pixel_y = 13 +/area/virtual_domain/fullbright) +"Yf" = ( +/obj/machinery/loot_locator, +/turf/open/floor/carpet/blue, +/area/virtual_domain) +"Yr" = ( +/obj/effect/mob_spawn/corpse/human/pirate, +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Yy" = ( +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"YJ" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 8 }, -/turf/open/floor/wood/parquet, -/area/virtual_domain/powered) -"WM" = ( -/obj/structure/flora/rock/pile/jungle/style_2, -/turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) -"WP" = ( -/turf/open/floor/wood/parquet, -/area/virtual_domain/powered) -"Xn" = ( -/obj/effect/landmark/bitrunning/safehouse_spawn, -/turf/template_noop, -/area/virtual_domain/safehouse) -"XG" = ( -/obj/structure/fermenting_barrel/gunpowder{ +/obj/item/reagent_containers/cup/glass/bottle/rum{ + desc = "Rum with ghostly properties that can help the drinker enter the spirit realm. It has fermented under the sea of space for ages."; + name = "Ghost Pirate Rum"; pixel_x = -4; - pixel_y = 17 + pixel_y = 12 }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/wood, -/area/virtual_domain/powered) -"Yj" = ( -/obj/effect/landmark/bitrunning/cache_spawn, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = -7; + pixel_y = 5 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = 3; + pixel_y = 7 + }, +/turf/open/floor/carpet/blue, +/area/virtual_domain) +"Za" = ( +/obj/structure/barricade/wooden, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) -"Yk" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/wood/parquet, -/area/virtual_domain/powered) -"Yq" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 10 +/area/virtual_domain/fullbright) +"Zq" = ( +/obj/structure/railing{ + color = "#4C3117"; + name = "wooden railing" + }, +/obj/effect/decal/cleanable/vomit/old, +/obj/effect/turf_decal/weather/sand{ + dir = 1 }, /turf/open/floor/wood, -/area/virtual_domain/powered) -"Zk" = ( -/obj/structure/flora/coconuts{ - pixel_x = 12 +/area/virtual_domain/fullbright) +"Zt" = ( +/obj/structure/cannon, +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/ash/large{ + pixel_y = -5; + pixel_x = 8 }, -/obj/structure/flora/tree/palm, -/turf/open/misc/beach/sand, -/area/virtual_domain/powered) -"ZZ" = ( -/obj/structure/flora/grass/jungle, -/turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) +/turf/open/floor/wood, +/area/virtual_domain/fullbright) (1,1,1) = {" xg @@ -986,14 +998,14 @@ xg xg xg xg -cx -cx -cx -cx -cx -cx -cx -cx +hb +hb +hb +hb +hb +hb +hb +hb xg xg xg @@ -1029,17 +1041,17 @@ xg xg xg xg -cx -cx -FT -FT -FT -FT -FT -FT -cx -cx -cx +hb +hb +DM +DM +DM +DM +DM +DM +hb +hb +hb xg xg xg @@ -1071,19 +1083,19 @@ xg xg xg xg -cx -cx -cx -FT -FT -FT -FT -FT -FT -FT -FT -FT -cx +hb +hb +hb +DM +DM +DM +DM +DM +DM +DM +DM +DM +hb xg xg xg @@ -1114,20 +1126,20 @@ xg xg xg xg -cx -cx -FT -FT -FT -FT -FT -FT -FT -FT -FT -FT -FT -cx +hb +hb +DM +DM +DM +DM +DM +DM +DM +DM +DM +DM +DM +hb xg xg xg @@ -1158,20 +1170,20 @@ xg xg xg xg -cx -FT -FT -FT -FT -FT -FT -zf -eb -we -FT -FT -FT -cx +hb +DM +DM +DM +DM +DM +DM +gK +Jf +sj +DM +DM +DM +hb xg xg xg @@ -1200,28 +1212,28 @@ xg xg xg xg -cx -cx -cx -FT -FT -FT -Sm -Ma -bz -JT -Kl -Kl -Kl -FT -FT -cx -cx -cx -cx -cx -cx -cx +hb +hb +hb +DM +DM +DM +jN +fk +zW +qS +eS +eS +eS +DM +DM +hb +hb +hb +hb +hb +hb +hb xg xg xg @@ -1241,31 +1253,31 @@ xg xg xg xg -cx -cx -cx -cx -FT -FT -FT -FT -It -tk -DL -Kl -Kl -Kl -Cc -Kl -IG -FT -cx -cx -FT -FT -FT -FT -cx +hb +hb +hb +hb +DM +DM +DM +DM +fh +Ta +al +eS +eS +eS +Eb +eS +Yr +DM +hb +hb +DM +DM +DM +DM +hb xg xg xg @@ -1284,32 +1296,32 @@ xg xg xg xg -cx -cx -FT -FT -FT -FT -FT -Nz -bP -mP -to -Kl -Kl -we -Kl -Kl -Kl -Kl -we -cx -cx -FT -FT -FT -FT -cx +hb +hb +DM +DM +DM +DM +DM +Sc +pn +NN +LC +eS +eS +sj +eS +eS +eS +eS +sj +hb +hb +DM +DM +DM +DM +hb xg xg xg @@ -1327,36 +1339,36 @@ xg xg xg xg -cx -cx -FT -dp -dp -dp -dp -xB -yq -yq -Kl -Kl -Ct -xc -xc -xc -xc -xc -xc -xc -HY -VF -VF -VF -VF -VF -cx -cx -cx -cx +hb +hb +DM +Ci +Ci +Ci +Ci +Wu +MG +MG +eS +eS +dc +mp +mp +mp +mp +mp +mp +mp +Ov +xp +xp +xp +xp +xp +hb +hb +hb +hb xg xg xg @@ -1371,38 +1383,38 @@ xg xg xg xg -cx -FT -dp -dp -Pq -qx -Mi -th -Kl -yq -Kl -IG -OP -uM -VF -VF -VF -VF -VF -VF -VF -VF -VC -VF -VF -VF -VF -VF -dp -cx -cx -cx +hb +DM +Ci +Ci +Bu +RJ +wj +bb +eS +MG +eS +Yr +gu +JK +xp +xp +xp +xp +xp +xp +xp +xp +NE +xp +xp +xp +xp +xp +Ci +hb +hb +hb xg xg xg @@ -1414,705 +1426,705 @@ xg (11,1,1) = {" xg xg -cx -cx -FT -dp -TQ -Iz -DJ -ag -eW -Kl -Kl -ED -Kl -Jr -VF -VF -VF -VF -VF -VF -VF -VF -VF -KQ -VF -VF -VF -VF -VF -dp -KG -pq -cx -cx -cx -cx -cx -cx -cx -Uy +hb +hb +DM +Ci +ru +oL +Jq +zj +OD +eS +eS +SD +eS +jH +xp +xp +xp +xp +xp +xp +xp +xp +xp +Gy +xp +xp +xp +xp +xp +Ci +bI +VE +hb +hb +hb +hb +hb +hb +hb +fR "} (12,1,1) = {" xg xg -cx -FT -FT -dp -Yj -MW -iO -Rr -qj -Kl -NI -xm -Ct -HY -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -wb -dp -jl -pq -BC +hb +DM +DM +Ci +jp +gf +MP +ST +Za +eS +wP +XP +dc +Ov +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +nN +Ci +rn +VE +fw ub ub ub ub ub -Xn -cx +iw +hb "} (13,1,1) = {" -cx -cx -cx -FT -FT -FT -qj -Kl -Kl -Kl -Kl -Kl -lC -kl -pP -VF -VF -VF -VF -VF -VF -Vg -VF -VF -VF -VF -VF -VF -VF -VF -cl -dp -hH -Nk -qm +hb +hb +hb +DM +DM +DM +Za +eS +eS +eS +eS +eS +lK +Zt +SK +xp +xp +xp +xp +xp +xp +QU +xp +xp +xp +xp +xp +xp +xp +xp +pi +Ci +QX +Yy +zk ub ub ub ub ub ub -cx +hb "} (14,1,1) = {" -cx -dp -dp -dp -dp -dp -dp -oo -Kl -Kl -Kl -Kl -Kb -dp -px -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -dp -dp -Nk -Jv +hb +Ul +Ul +Ul +Ul +Ul +Hn +mR +eS +eS +eS +eS +Zq +Ci +AB +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +Ci +Ci +Yy +Dd ub ub ub ub ub ub -cx +hb "} (15,1,1) = {" -cx -dp -BO -ht -VX -ct -dp -yi -Kl -dA -Kl -Kl -by -Hp -pP -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -me +hb +Ul +tw +To +AF +tH +Ul +nr +eS +BV +eS +eS +LP +ER +SK +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +Wx ub ub ub ub ub ub -cx +hb "} (16,1,1) = {" -cx -dp -ON -WP -nX -Yk -Kw -Kl -Kl -Kl -Kl -Kl -Kl -dp -px -VF -VF -VF -VF -Qb -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF +hb +Ul +Cu +jE +EL +AP +dN +eS +eS +eS +eS +eS +eS +Ci +AB +xp +xp +xp +xp +uk +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp ub ub ub ub ub ub -cx +hb "} (17,1,1) = {" -cx -dp -jC -iM -so -TO -dp -Kl -Kl -EZ -IM -Kl -Kl -Kl -pP -VF -VF -VF -VF -cl -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF +hb +Ul +YJ +ri +VG +KS +Ul +eS +eS +gB +Th +eS +eS +eS +SK +xp +xp +xp +xp +pi +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp ub ub ub ub ub ub -cx +hb "} (18,1,1) = {" -cx -dp -sn -hW -eQ -gk -dp -dp -qX -gw -jz -UE -Kl -Zk -pP -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -me -VF +hb +Ul +qE +Ox +BU +td +Ul +Ci +nb +Mf +gx +tQ +eS +zU +SK +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +Wx +xp ub ub ub ub ub zR -cx +hb "} (19,1,1) = {" -cx -dp -St -Pz -nQ -yA -dp -dp -Dm -jz -jz -Vk -Kl -Kl -pP -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -dp -BC -VF -VF -VF -VF -VF -VF -cx -cx +hb +Ul +lF +HO +Yf +Jx +Ul +Ci +uH +gx +gx +Fl +eS +eS +SK +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +Ci +fw +xp +xp +xp +xp +xp +xp +hb +hb "} (20,1,1) = {" -cx -dp -dp -dp -dp -dp -dp -xm -FG -RR -yw -Vk -Kl -Kl -pP -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -Tt -cJ -Yq -VF -VF -VF -VF -VF -cx +hb +Ul +Ul +Ul +Ul +Ul +Ul +XP +cX +Qc +NP +Fl +eS +eS +SK +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +Uw +cr +vR +xp +xp +xp +xp +xp +hb xg "} (21,1,1) = {" -cx -cx -cx -FT -FT -Kl -Kl -dp -dp -jB -uw -GG -Kl -Kl -pP -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -xI -dp -XG -BC -VF -VF -VF -VF -VF -cx +hb +hb +hb +DM +DM +eS +eS +Ci +Ci +FP +uG +QN +eS +eS +SK +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +af +Ci +LK +fw +xp +xp +xp +xp +xp +hb xg "} (22,1,1) = {" xg xg -cx -FT -FT -fx -Kl -Kl -dp -dp -Kl -Kl -Kl -Kl -pP -VF -VF -VF -VF -VF -VF -dQ -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -kg -pq -Ld -VF -VF -VF -VF -VF -cx +hb +DM +DM +wH +eS +eS +Ci +Ci +eS +eS +eS +eS +SK +xp +xp +xp +xp +xp +xp +Vx +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +oM +VE +eO +xp +xp +xp +xp +xp +hb xg "} (23,1,1) = {" xg xg -cx -FT -FT -FT -Kl -Kl -Kl -Kl -Kl -Kl -Kl -Kl -Tp -oU -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -FT -FT -cx +hb +DM +DM +DM +eS +eS +eS +eS +eS +eS +eS +eS +JX +bc +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +DM +DM +hb xg "} (24,1,1) = {" xg xg -cx -FT -FT -FT -FT -dp -Kl -eD -Kl -Kl -Kl -Kl -Kl -Tp -nz -oU -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -FT -FT -cx +hb +DM +DM +DM +DM +Ci +eS +RO +eS +eS +eS +eS +eS +JX +XW +bc +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +DM +DM +hb xg "} (25,1,1) = {" xg xg -cx -cx -FT -FT -FT -FT -Kl -Kl -Kl -Kl -Kl -Kl -yi -Kl -Kl -pP -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -FT -FT -FT -cx +hb +hb +DM +DM +DM +DM +eS +eS +eS +eS +eS +eS +nr +eS +eS +SK +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +DM +DM +DM +hb xg "} (26,1,1) = {" xg xg xg -cx -cx -cx -FT -FT -FT -FT -FT -FT -FT -FT -FT -FT -FT -TP -VF -FT -FT -cx -cx -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -cx -FT -FT -FT -FT -cx +hb +hb +hb +DM +DM +DM +DM +DM +DM +DM +DM +DM +DM +DM +eP +xp +DM +DM +hb +hb +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +hb +DM +DM +DM +DM +hb xg "} (27,1,1) = {" @@ -2120,43 +2132,43 @@ xg xg xg xg -xg -cx -FT -FT -FT -FT -FT -FT -FT -FT -FT -FT -FT -PQ -AU -FT -FT -FT -cx -cx -VF -VF -VF -VF -VF -VF -VF -VF -VF -VF -cx -cx -FT -FT -FT -cx -cx +WW +hb +DM +DM +DM +DM +DM +DM +DM +DM +DM +DM +DM +fd +OW +DM +DM +DM +hb +hb +xp +xp +xp +xp +xp +xp +xp +xp +xp +xp +hb +hb +DM +DM +DM +hb +hb xg "} (28,1,1) = {" @@ -2165,41 +2177,41 @@ xg xg xg xg -cx -cx -FT -FT -FT -FT -FT -FT -FT -FT -FT -FT -Nh -AU -FT -FT -FT -FT -cx -cx -cx -cx -VF -VF -VF -VF -VF -VF -cx -cx -cx -cx -cx -cx -cx +hb +hb +DM +DM +DM +DM +DM +DM +DM +DM +DM +DM +KV +OW +DM +DM +DM +DM +hb +hb +hb +hb +xp +xp +xp +xp +xp +xp +hb +hb +hb +hb +hb +hb +hb xg xg "} @@ -2210,34 +2222,34 @@ xg xg xg xg -cx -cx -cx -cx -cx -cx -FT -FT -FT -FT -FT -ye -KC -VF -FT -FT -FT -FT -FT -FT -cx -cx -cx -cx -cx -cx -cx -cx +hb +hb +hb +hb +hb +hb +DM +DM +DM +DM +DM +qk +IW +xp +DM +DM +DM +DM +DM +DM +hb +hb +hb +hb +hb +hb +hb +hb xg xg xg @@ -2258,25 +2270,25 @@ xg xg xg xg -cx -cx -FT -FT -FT -FT -FT -zg -ye -KC -IF -VF -FT -FT -FT -FT -FT -cx -cx +hb +hb +DM +DM +DM +DM +DM +Gl +qk +IW +hn +xp +DM +DM +DM +DM +DM +hb +hb xg xg xg @@ -2303,25 +2315,25 @@ xg xg xg xg -cx -cx -FT -FT -FT -FT -FT -ye -ye -pU -AU -VF -GF -WM -FT -FT -FT -cx -cx +hb +hb +DM +DM +DM +DM +DM +qk +qk +Oi +OW +xp +be +Oz +DM +DM +DM +hb +hb xg xg xg @@ -2348,24 +2360,24 @@ xg xg xg xg -cx -cx -FT -FT -FT -FT -FT -ye -nS -KC -VF -Ax -ye -hM -FT -FT -FT -cx +hb +hb +DM +DM +DM +DM +DM +qk +CL +IW +xp +QG +qk +rm +DM +DM +DM +hb xg xg xg @@ -2393,23 +2405,23 @@ xg xg xg xg -cx -cx -FT -FT -FT -FT -ZZ -ye -cQ -KC -yc -qN -ye -hM -FT -FT -cx +hb +hb +DM +DM +DM +DM +oB +qk +wu +IW +QF +BX +qk +rm +DM +DM +hb xg xg xg @@ -2438,22 +2450,22 @@ xg xg xg xg -cx -cx -FT -FT -FT -FT -ye -ye -mw -xC -uT -jQ -Jo -FT -FT -cx +hb +hb +DM +DM +DM +DM +qk +qk +NU +db +hq +zc +ID +DM +DM +hb xg xg xg @@ -2483,21 +2495,21 @@ xg xg xg xg -cx -cx -cx -FT -FT -FT -FT -FT -FT -FT -FT -FT -FT -FT -cx +hb +hb +hb +DM +DM +DM +DM +DM +DM +DM +DM +DM +DM +DM +hb xg xg xg @@ -2529,19 +2541,19 @@ xg xg xg xg -cx -FT -FT -FT -FT -FT -FT -FT -FT -FT -FT -FT -cx +hb +DM +DM +DM +DM +DM +DM +DM +DM +DM +DM +DM +hb xg xg xg @@ -2573,19 +2585,19 @@ xg xg xg xg -cx -cx -cx -cx -cx -cx -cx -cx -cx -cx -cx -cx -cx +hb +hb +hb +hb +hb +hb +hb +hb +hb +hb +hb +hb +hb xg xg xg diff --git a/_maps/virtual_domains/psyker_shuffle.dmm b/_maps/virtual_domains/psyker_shuffle.dmm index 9c846c650da61b..e53ec600e8a3aa 100644 --- a/_maps/virtual_domains/psyker_shuffle.dmm +++ b/_maps/virtual_domains/psyker_shuffle.dmm @@ -96,10 +96,6 @@ /obj/item/gun/ballistic/revolver/mateba, /turf/open/indestructible/dark, /area/ruin/space/has_grav/powered/virtual_domain) -"G" = ( -/obj/structure/closet/crate, -/turf/open/indestructible/dark, -/area/ruin/space/has_grav/powered/virtual_domain) "K" = ( /obj/structure/closet/crate/eva, /turf/open/indestructible/dark, @@ -133,7 +129,9 @@ /turf/open/indestructible/dark, /area/ruin/space/has_grav/powered/virtual_domain) "U" = ( -/obj/effect/landmark/bitrunning/safehouse_spawn, +/obj/modular_map_root/safehouse{ + key = "bathroom" + }, /turf/template_noop, /area/virtual_domain/safehouse) "X" = ( @@ -151,118 +149,6 @@ (1,1,1) = {" o o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -"} -(2,1,1) = {" -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -"} -(3,1,1) = {" -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -"} -(4,1,1) = {" -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -"} -(5,1,1) = {" -o -o Y Y Y @@ -288,12 +174,12 @@ o o o "} -(6,1,1) = {" +(2,1,1) = {" o o Y Y -r +Q Q Q Q @@ -316,7 +202,7 @@ o o o "} -(7,1,1) = {" +(3,1,1) = {" o o Y @@ -344,7 +230,7 @@ o o o "} -(8,1,1) = {" +(4,1,1) = {" o o Y @@ -372,7 +258,7 @@ o o o "} -(9,1,1) = {" +(5,1,1) = {" o o Y @@ -400,7 +286,7 @@ o o o "} -(10,1,1) = {" +(6,1,1) = {" o o Y @@ -428,7 +314,7 @@ o o o "} -(11,1,1) = {" +(7,1,1) = {" o o Y @@ -456,7 +342,7 @@ o o o "} -(12,1,1) = {" +(8,1,1) = {" o o Y @@ -484,7 +370,7 @@ o o o "} -(13,1,1) = {" +(9,1,1) = {" o o Y @@ -512,12 +398,12 @@ Y Y o "} -(14,1,1) = {" +(10,1,1) = {" o o Y a -a +Q Y Q Q @@ -540,7 +426,7 @@ U Y Y "} -(15,1,1) = {" +(11,1,1) = {" o o Y @@ -548,7 +434,7 @@ Y Y Y Q -G +Q Q Y Y @@ -568,7 +454,7 @@ t B Y "} -(16,1,1) = {" +(12,1,1) = {" o o Y @@ -596,7 +482,7 @@ t B Y "} -(17,1,1) = {" +(13,1,1) = {" o o Y @@ -624,7 +510,7 @@ t B Y "} -(18,1,1) = {" +(14,1,1) = {" o o Y @@ -652,7 +538,7 @@ t B Y "} -(19,1,1) = {" +(15,1,1) = {" o o Y @@ -680,7 +566,7 @@ t B Y "} -(20,1,1) = {" +(16,1,1) = {" o o Y @@ -708,7 +594,7 @@ N B Y "} -(21,1,1) = {" +(17,1,1) = {" o o Y @@ -736,7 +622,7 @@ Y B Y "} -(22,1,1) = {" +(18,1,1) = {" o o Y @@ -764,7 +650,7 @@ Y B Y "} -(23,1,1) = {" +(19,1,1) = {" o o o @@ -792,7 +678,7 @@ Y Y Y "} -(24,1,1) = {" +(20,1,1) = {" o o Y @@ -820,7 +706,7 @@ o o o "} -(25,1,1) = {" +(21,1,1) = {" Y Y Y @@ -848,7 +734,7 @@ o o o "} -(26,1,1) = {" +(22,1,1) = {" Y a Q @@ -876,7 +762,7 @@ o o o "} -(27,1,1) = {" +(23,1,1) = {" Y Q Q @@ -904,7 +790,7 @@ o o o "} -(28,1,1) = {" +(24,1,1) = {" Y Y Q @@ -919,10 +805,10 @@ Q F Q Y -s Q Q -a +Q +Q Y o o @@ -932,7 +818,7 @@ o o o "} -(29,1,1) = {" +(25,1,1) = {" Y Y Q @@ -960,7 +846,7 @@ o o o "} -(30,1,1) = {" +(26,1,1) = {" Y Q Q @@ -988,7 +874,7 @@ o o o "} -(31,1,1) = {" +(27,1,1) = {" Y a Q @@ -1016,9 +902,9 @@ o o o "} -(32,1,1) = {" +(28,1,1) = {" Y -a +Q Y Y Y @@ -1026,7 +912,7 @@ o Y Y Q -a +Q Y Y Y @@ -1044,7 +930,7 @@ o o o "} -(33,1,1) = {" +(29,1,1) = {" Y Y Y diff --git a/_maps/virtual_domains/psyker_zombies.dmm b/_maps/virtual_domains/psyker_zombies.dmm index 556d875710a65f..a20e260bbcf046 100644 --- a/_maps/virtual_domains/psyker_zombies.dmm +++ b/_maps/virtual_domains/psyker_zombies.dmm @@ -11,6 +11,11 @@ /obj/structure/sign/warning/directional/west, /turf/open/chasm, /area/ruin/space/has_grav/powered/virtual_domain) +"e" = ( +/obj/effect/mob_spawn/corpse/human/cyber_police, +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/indestructible/dark, +/area/ruin/space/has_grav/powered/virtual_domain) "h" = ( /obj/structure/rack, /turf/open/indestructible/dark, @@ -69,7 +74,9 @@ /turf/open/indestructible/dark, /area/ruin/space/has_grav/powered/virtual_domain) "O" = ( -/obj/effect/landmark/bitrunning/safehouse_spawn, +/obj/modular_map_root/safehouse{ + key = "bathroom" + }, /turf/template_noop, /area/virtual_domain/safehouse) "Q" = ( @@ -112,8 +119,6 @@ o o o o -o -o a a a @@ -131,7 +136,6 @@ o o o o -o "} (2,1,1) = {" o @@ -140,8 +144,6 @@ o o o o -o -o a a a @@ -150,7 +152,7 @@ Y Y Y Y -Y +U a a o @@ -161,11 +163,8 @@ o o o o -o "} (3,1,1) = {" -o -o a a a @@ -191,13 +190,10 @@ o o o o -o "} (4,1,1) = {" -o -o a -W +e X Y B @@ -221,11 +217,8 @@ o o o o -o "} (5,1,1) = {" -o -o a b b @@ -251,11 +244,8 @@ o o o o -o "} (6,1,1) = {" -o -o a a a @@ -281,11 +271,8 @@ o o o o -o "} (7,1,1) = {" -o -o a a a @@ -311,11 +298,8 @@ o o o o -o "} (8,1,1) = {" -o -o a a X @@ -341,11 +325,8 @@ o o o o -o "} (9,1,1) = {" -o -o a a W @@ -371,11 +352,8 @@ o o o o -o "} (10,1,1) = {" -o -o a a Y @@ -401,11 +379,8 @@ o o o o -o "} (11,1,1) = {" -o -o a Y Y @@ -431,11 +406,8 @@ o o o o -o "} (12,1,1) = {" -o -o a Y Y @@ -461,11 +433,8 @@ o o o o -o "} (13,1,1) = {" -o -o a Y Y @@ -491,11 +460,8 @@ o o o o -o "} (14,1,1) = {" -o -o a Y Y @@ -521,11 +487,8 @@ o o o o -o "} (15,1,1) = {" -o -o a Y R @@ -551,11 +514,8 @@ o o o o -o "} (16,1,1) = {" -o -o a Y Y @@ -581,11 +541,8 @@ a a a a -o "} (17,1,1) = {" -o -o a Y V @@ -611,13 +568,10 @@ t t O a -o "} (18,1,1) = {" -o -o a -Y +U a Q a @@ -641,11 +595,8 @@ t t t a -o "} (19,1,1) = {" -o -o a Q Q @@ -671,17 +622,14 @@ t t t a -o "} (20,1,1) = {" -o -o a Q Q Q a -Y +U Y Y a @@ -701,11 +649,8 @@ t t t a -o "} (21,1,1) = {" -o -o a a Q @@ -731,11 +676,8 @@ t t t a -o "} (22,1,1) = {" -o -o a a Q @@ -761,11 +703,8 @@ t t t a -o "} (23,1,1) = {" -o -o a a Q @@ -791,11 +730,8 @@ t t r a -o "} (24,1,1) = {" -o -o a a Q @@ -821,11 +757,8 @@ a a a a -o "} (25,1,1) = {" -o -o a c Q @@ -851,11 +784,8 @@ o o o o -o "} (26,1,1) = {" -o -o a Q Q @@ -881,11 +811,8 @@ o o o o -o "} (27,1,1) = {" -o -o a Y Y @@ -911,11 +838,8 @@ o o o o -o "} (28,1,1) = {" -o -o a Y X @@ -941,11 +865,8 @@ o o o o -o "} (29,1,1) = {" -o -o a Y a @@ -971,11 +892,8 @@ o o o o -o "} (30,1,1) = {" -o -o a Y Y @@ -1001,11 +919,8 @@ o o o o -o "} (31,1,1) = {" -o -o a Y Y @@ -1031,11 +946,8 @@ o o o o -o "} (32,1,1) = {" -o -o a Y Y @@ -1061,11 +973,8 @@ o o o o -o "} (33,1,1) = {" -o -o a a R @@ -1091,12 +1000,9 @@ o o o o -o "} (34,1,1) = {" o -o -o a Y Y @@ -1110,7 +1016,7 @@ a a Y M -Y +U W i Q @@ -1121,14 +1027,11 @@ o o o o -o "} (35,1,1) = {" o -o -o a -Y +U Y Y Y @@ -1151,12 +1054,9 @@ o o o o -o "} (36,1,1) = {" o -o -o a a a @@ -1181,35 +1081,4 @@ o o o o -o -"} -(37,1,1) = {" -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o "} diff --git a/_maps/virtual_domains/stairs_and_cliffs.dmm b/_maps/virtual_domains/stairs_and_cliffs.dmm index 82e15fcc09097a..3c9e0711e02822 100644 --- a/_maps/virtual_domains/stairs_and_cliffs.dmm +++ b/_maps/virtual_domains/stairs_and_cliffs.dmm @@ -112,7 +112,9 @@ /turf/template_noop, /area/virtual_domain/safehouse) "vz" = ( -/obj/effect/landmark/bitrunning/safehouse_spawn, +/obj/modular_map_root/safehouse{ + key = "ice" + }, /turf/template_noop, /area/virtual_domain/safehouse) "xB" = ( diff --git a/_maps/virtual_domains/starfront_saloon.dmm b/_maps/virtual_domains/starfront_saloon.dmm new file mode 100644 index 00000000000000..277382b6dbbf2f --- /dev/null +++ b/_maps/virtual_domains/starfront_saloon.dmm @@ -0,0 +1,1834 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ae" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/dark_red/half, +/turf/open/floor/sepia, +/area/virtual_domain) +"cK" = ( +/obj/effect/landmark/bitrunning/mob_segment, +/turf/template_noop, +/area/virtual_domain) +"cU" = ( +/turf/template_noop, +/area/virtual_domain/safehouse) +"df" = ( +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/sepia, +/area/virtual_domain) +"do" = ( +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/sepia, +/area/virtual_domain) +"eU" = ( +/obj/effect/spawner/random/structure/crate, +/obj/machinery/light/small/directional/north, +/turf/open/floor/catwalk_floor, +/area/virtual_domain) +"gh" = ( +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/sepia, +/area/virtual_domain) +"hz" = ( +/obj/item/clothing/head/cowboy, +/obj/item/clothing/head/cowboy, +/obj/item/clothing/head/cowboy, +/obj/structure/closet, +/turf/template_noop, +/area/virtual_domain/safehouse) +"il" = ( +/turf/open/floor/sepia, +/area/virtual_domain) +"it" = ( +/obj/modular_map_root/generic{ + key = "station_medium" + }, +/turf/open/floor/sepia, +/area/virtual_domain) +"iJ" = ( +/obj/machinery/light/directional/south, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/entertainment/plushie, +/obj/effect/turf_decal/tile/dark_red/half, +/turf/open/floor/sepia, +/area/virtual_domain) +"iO" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/tile/dark_red/half, +/turf/open/floor/sepia, +/area/virtual_domain) +"jt" = ( +/obj/item/gun/energy/marksman_revolver{ + pixel_x = 8; + pixel_y = 4 + }, +/obj/item/gun/energy/marksman_revolver{ + pixel_x = 4 + }, +/obj/item/gun/energy/marksman_revolver{ + pixel_x = -4; + pixel_y = -4 + }, +/obj/structure/table, +/turf/template_noop, +/area/virtual_domain/safehouse) +"ma" = ( +/obj/machinery/light/directional/south, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/decoration/generic, +/obj/effect/turf_decal/tile/dark_red/half, +/turf/open/floor/sepia, +/area/virtual_domain) +"mq" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/closed/indestructible/binary, +/area/virtual_domain) +"mu" = ( +/turf/closed/wall, +/area/virtual_domain) +"on" = ( +/obj/structure/table/greyscale, +/obj/machinery/recharger{ + pixel_x = 8; + pixel_y = 4 + }, +/obj/machinery/recharger{ + pixel_x = -8; + pixel_y = 4 + }, +/turf/template_noop, +/area/virtual_domain/safehouse) +"oR" = ( +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 8 + }, +/turf/open/floor/sepia, +/area/virtual_domain) +"po" = ( +/obj/effect/baseturf_helper/virtual_domain, +/obj/modular_map_root/safehouse{ + key = "den" + }, +/turf/template_noop, +/area/virtual_domain/safehouse) +"sX" = ( +/obj/effect/spawner/random/decoration/statue, +/turf/open/floor/sepia, +/area/virtual_domain) +"uW" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/sepia, +/area/virtual_domain) +"ve" = ( +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/catwalk_floor, +/area/virtual_domain) +"wB" = ( +/obj/effect/spawner/random/engineering/tank, +/obj/machinery/light/small/directional/north, +/turf/open/floor/catwalk_floor, +/area/virtual_domain) +"wK" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/catwalk_floor, +/area/virtual_domain) +"yF" = ( +/obj/machinery/light/directional/south, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/food_or_drink/snack, +/obj/effect/turf_decal/tile/dark_red/half, +/turf/open/floor/sepia, +/area/virtual_domain) +"zU" = ( +/obj/machinery/light/directional/south, +/obj/effect/spawner/random/structure/table, +/obj/effect/turf_decal/tile/dark_red/half, +/obj/machinery/recharger{ + pixel_x = 8; + pixel_y = 4 + }, +/turf/open/floor/sepia, +/area/virtual_domain) +"Au" = ( +/obj/effect/spawner/random/trash/garbage, +/obj/machinery/light/small/directional/north, +/turf/open/floor/catwalk_floor, +/area/virtual_domain) +"AF" = ( +/obj/effect/turf_decal/tile/dark_red/half, +/obj/effect/turf_decal/tile/dark_red/half, +/turf/open/floor/sepia, +/area/virtual_domain) +"Bi" = ( +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 4 + }, +/turf/open/floor/sepia, +/area/virtual_domain) +"BX" = ( +/obj/effect/spawner/random/trash/graffiti, +/obj/effect/turf_decal/tile/dark_red/half, +/turf/open/floor/sepia, +/area/virtual_domain) +"Ey" = ( +/obj/machinery/light/directional/south, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/decoration/ornament, +/obj/effect/turf_decal/tile/dark_red/half, +/turf/open/floor/sepia, +/area/virtual_domain) +"EK" = ( +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/sepia, +/area/virtual_domain) +"Gz" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/tile/dark_red/half, +/obj/effect/spawner/random/armory/shotgun, +/turf/open/floor/sepia, +/area/virtual_domain) +"GY" = ( +/obj/effect/spawner/random/entertainment/arcade, +/turf/open/floor/sepia, +/area/virtual_domain) +"Ib" = ( +/obj/effect/spawner/random/trash/bin, +/turf/open/floor/sepia, +/area/virtual_domain) +"Il" = ( +/obj/effect/turf_decal/tile/dark_red/half, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/sepia, +/area/virtual_domain) +"Ix" = ( +/obj/structure/closet, +/obj/effect/spawner/random/maintenance/three, +/obj/effect/spawner/random/exotic/antag_gear, +/obj/machinery/light/small/directional/north, +/turf/open/floor/catwalk_floor, +/area/virtual_domain) +"Ja" = ( +/turf/closed/indestructible/binary, +/area/virtual_domain) +"JA" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/catwalk_floor, +/area/virtual_domain) +"KD" = ( +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/template_noop, +/area/virtual_domain) +"KN" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/virtual_domain) +"Lu" = ( +/obj/structure/table/greyscale, +/obj/machinery/recharger{ + pixel_x = 8; + pixel_y = 4 + }, +/obj/machinery/recharger{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/effect/turf_decal/tile/dark_red/half, +/obj/machinery/light/directional/south, +/turf/open/floor/sepia, +/area/virtual_domain) +"MG" = ( +/obj/effect/spawner/random/trash/graffiti, +/obj/machinery/light/small/directional/north, +/turf/open/floor/catwalk_floor, +/area/virtual_domain) +"Oq" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/sepia, +/area/virtual_domain) +"Ox" = ( +/obj/structure/closet, +/obj/effect/spawner/random/maintenance/five, +/obj/effect/spawner/random/armory/laser_gun, +/obj/machinery/light/small/directional/north, +/turf/open/floor/catwalk_floor, +/area/virtual_domain) +"OX" = ( +/turf/open/floor/catwalk_floor, +/area/virtual_domain) +"OZ" = ( +/obj/effect/spawner/random/structure/billboard, +/turf/open/floor/sepia, +/area/virtual_domain) +"PE" = ( +/turf/template_noop, +/area/virtual_domain) +"Qi" = ( +/obj/modular_map_root/generic{ + key = "station_small" + }, +/turf/open/floor/sepia, +/area/virtual_domain) +"QM" = ( +/obj/modular_map_root/generic{ + key = "station_large" + }, +/turf/open/floor/sepia, +/area/virtual_domain) +"QO" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/sepia, +/area/virtual_domain) +"Rk" = ( +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/sepia, +/area/virtual_domain) +"Te" = ( +/obj/machinery/light/directional/south, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/engineering/toolbox, +/obj/effect/turf_decal/tile/dark_red/half, +/turf/open/floor/sepia, +/area/virtual_domain) +"Tn" = ( +/turf/open/space/basic, +/area/virtual_domain) +"TM" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/dark_red/half, +/turf/open/floor/sepia, +/area/virtual_domain) +"VX" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/sepia, +/area/virtual_domain) +"Wd" = ( +/obj/effect/turf_decal/tile/dark_red/half, +/turf/open/floor/sepia, +/area/virtual_domain) +"Wp" = ( +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/sepia, +/area/virtual_domain) + +(1,1,1) = {" +Ja +Ja +Ja +Ja +Ja +Ja +Ja +Ja +Ja +Ja +Ja +Ja +Ja +Ja +Ja +Ja +mq +"} +(2,1,1) = {" +Ja +il +il +il +il +mu +df +il +cU +cU +cU +cU +cU +po +il +OX +Ja +"} +(3,1,1) = {" +Ja +mu +mu +mu +mu +mu +il +il +cU +jt +on +hz +cU +cU +il +OX +Ja +"} +(4,1,1) = {" +Ja +OX +OX +OX +OX +OX +Qi +il +cU +cU +cU +cU +cU +cU +il +OX +Ja +"} +(5,1,1) = {" +Ja +PE +PE +PE +PE +PE +gh +il +cU +cU +cU +cU +cU +cU +il +OX +Ja +"} +(6,1,1) = {" +Ja +PE +PE +PE +PE +PE +il +il +cU +cU +cU +cU +cU +cU +il +OX +Ja +"} +(7,1,1) = {" +Ja +PE +PE +PE +PE +PE +il +il +cU +cU +cU +cU +cU +cU +il +OX +Ja +"} +(8,1,1) = {" +Ja +PE +PE +PE +PE +PE +il +il +cU +cU +cU +cU +cU +cU +il +il +Ja +"} +(9,1,1) = {" +Ja +PE +PE +PE +PE +PE +il +il +il +il +il +il +il +il +il +il +Ja +"} +(10,1,1) = {" +Ja +Ix +OX +OX +OX +OX +il +il +it +il +il +il +TM +mu +KN +KN +Ja +"} +(11,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +Ib +il +il +il +ae +KN +Tn +Tn +Ja +"} +(12,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +il +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(13,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +il +il +il +il +Il +KN +Tn +Tn +Ja +"} +(14,1,1) = {" +Ja +PE +PE +PE +cK +PE +PE +PE +il +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(15,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +il +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(16,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +VX +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(17,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +il +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(18,1,1) = {" +Ja +Au +OX +OX +OX +OX +il +il +it +il +sX +il +iO +KN +Tn +Tn +Ja +"} +(19,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +il +il +il +il +Te +mu +Tn +Tn +Ja +"} +(20,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +il +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(21,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +il +il +il +il +AF +KN +Tn +Tn +Ja +"} +(22,1,1) = {" +Ja +PE +PE +PE +cK +PE +PE +PE +il +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(23,1,1) = {" +Ja +PE +KD +PE +PE +PE +PE +PE +il +il +il +Wp +Wd +KN +Tn +Tn +Ja +"} +(24,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +il +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(25,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +il +il +VX +il +Wd +KN +Tn +Tn +Ja +"} +(26,1,1) = {" +Ja +wB +OX +OX +OX +OX +il +il +it +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(27,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +Ib +il +il +il +iJ +mu +Tn +Tn +Ja +"} +(28,1,1) = {" +Ja +PE +KD +PE +PE +PE +PE +PE +il +uW +il +il +ae +KN +Tn +Tn +Ja +"} +(29,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +il +oR +oR +il +Wd +KN +Tn +Tn +Ja +"} +(30,1,1) = {" +Ja +PE +PE +PE +cK +PE +PE +PE +Oq +mu +mu +il +Wd +KN +Tn +Tn +Ja +"} +(31,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +il +Bi +EK +il +Wd +KN +Tn +Tn +Ja +"} +(32,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +il +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(33,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +il +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(34,1,1) = {" +Ja +wK +ve +OX +OX +OX +VX +il +it +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(35,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +il +il +OZ +il +zU +mu +Tn +Tn +Ja +"} +(36,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +il +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(37,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +VX +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(38,1,1) = {" +Ja +PE +PE +PE +cK +PE +PE +PE +il +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(39,1,1) = {" +Ja +PE +KD +PE +PE +PE +PE +PE +il +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(40,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +il +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(41,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +il +uW +il +il +Wd +KN +Tn +Tn +Ja +"} +(42,1,1) = {" +Ja +Ox +OX +OX +OX +OX +il +il +it +uW +il +Wp +Gz +KN +Tn +Tn +Ja +"} +(43,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +il +uW +il +il +Lu +mu +Tn +Tn +Ja +"} +(44,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +do +il +il +il +ae +KN +Tn +Tn +Ja +"} +(45,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +il +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(46,1,1) = {" +Ja +PE +KD +PE +cK +PE +PE +PE +il +il +il +VX +Wd +KN +Tn +Tn +Ja +"} +(47,1,1) = {" +Ja +PE +PE +PE +PE +KD +PE +PE +il +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(48,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +il +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(49,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +Ib +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(50,1,1) = {" +Ja +MG +OX +OX +OX +OX +VX +il +il +il +QM +il +Wd +KN +Tn +Tn +Ja +"} +(51,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +PE +PE +il +il +yF +mu +Tn +Tn +Ja +"} +(52,1,1) = {" +Ja +PE +KD +PE +PE +PE +PE +PE +PE +PE +il +il +Wd +KN +Tn +Tn +Ja +"} +(53,1,1) = {" +Ja +PE +PE +cK +PE +PE +KD +PE +PE +PE +uW +il +Wd +KN +Tn +Tn +Ja +"} +(54,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +PE +PE +uW +il +Wd +KN +Tn +Tn +Ja +"} +(55,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +PE +PE +il +il +Wd +KN +Tn +Tn +Ja +"} +(56,1,1) = {" +Ja +PE +PE +PE +PE +PE +cK +PE +PE +PE +il +il +Wd +KN +Tn +Tn +Ja +"} +(57,1,1) = {" +Ja +PE +KD +PE +PE +PE +KD +PE +PE +PE +il +il +Wd +KN +Tn +Tn +Ja +"} +(58,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +PE +PE +GY +il +Wd +KN +Tn +Tn +Ja +"} +(59,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +PE +PE +il +il +Wd +KN +Tn +Tn +Ja +"} +(60,1,1) = {" +Ja +eU +OX +OX +OX +OX +il +il +it +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(61,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +Ib +il +il +il +Ey +mu +Tn +Tn +Ja +"} +(62,1,1) = {" +Ja +PE +PE +KD +PE +PE +PE +PE +do +il +il +VX +ae +KN +Tn +Tn +Ja +"} +(63,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +il +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(64,1,1) = {" +Ja +PE +PE +PE +cK +PE +PE +PE +il +il +Wp +il +Wd +KN +Tn +Tn +Ja +"} +(65,1,1) = {" +Ja +PE +KD +PE +PE +KD +PE +PE +il +il +sX +il +Wd +KN +Tn +Tn +Ja +"} +(66,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +il +il +il +il +Wd +KN +Tn +Tn +Ja +"} +(67,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +Rk +il +il +uW +Wd +KN +Tn +Tn +Ja +"} +(68,1,1) = {" +Ja +wB +OX +OX +OX +OX +VX +il +il +il +QM +uW +Wd +KN +Tn +Tn +Ja +"} +(69,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +PE +PE +il +il +ma +mu +Tn +Tn +Ja +"} +(70,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +PE +PE +il +il +Wd +KN +Tn +Tn +Ja +"} +(71,1,1) = {" +Ja +PE +PE +KD +PE +PE +PE +KD +PE +PE +il +uW +Wd +KN +Tn +Tn +Ja +"} +(72,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +PE +PE +il +il +Wd +KN +Tn +Tn +Ja +"} +(73,1,1) = {" +Ja +PE +PE +cK +PE +PE +PE +PE +PE +PE +il +il +Wd +KN +Tn +Tn +Ja +"} +(74,1,1) = {" +Ja +PE +PE +PE +PE +PE +cK +PE +PE +PE +il +il +Wd +KN +Tn +Tn +Ja +"} +(75,1,1) = {" +Ja +PE +KD +PE +PE +PE +KD +PE +PE +PE +il +il +Wd +KN +Tn +Tn +Ja +"} +(76,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +PE +PE +il +il +Wd +KN +Tn +Tn +Ja +"} +(77,1,1) = {" +Ja +PE +PE +PE +PE +PE +PE +PE +PE +PE +il +VX +BX +KN +Tn +Tn +Ja +"} +(78,1,1) = {" +Ja +eU +JA +OX +OX +OX +OX +OX +OX +il +QO +il +Wd +KN +Tn +Tn +Ja +"} +(79,1,1) = {" +Ja +mu +mu +mu +mu +mu +mu +mu +mu +mu +mu +mu +mu +mu +Tn +Tn +Ja +"} +(80,1,1) = {" +Ja +Ja +Ja +Ja +Ja +Ja +Ja +Ja +Ja +Ja +Ja +Ja +Ja +Ja +Ja +Ja +Ja +"} diff --git a/_maps/virtual_domains/syndicate_assault.dmm b/_maps/virtual_domains/syndicate_assault.dmm index 05014331406e24..42e9f96a3892b8 100644 --- a/_maps/virtual_domains/syndicate_assault.dmm +++ b/_maps/virtual_domains/syndicate_assault.dmm @@ -5,11 +5,11 @@ /turf/open/floor/plastic, /area/ruin/space/has_grav/powered/virtual_domain) "aw" = ( -/obj/structure/table/reinforced, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 4 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/obj/effect/landmark/bitrunning/mob_segment, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) "aN" = ( @@ -31,28 +31,9 @@ /obj/machinery/recharge_station, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) -"aZ" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ - dir = 4 - }, -/mob/living/basic/trooper/syndicate/ranged/shotgun/space/stormtrooper, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) "bh" = ( /turf/open/floor/carpet/royalblack, /area/ruin/space/has_grav/powered/virtual_domain) -"bo" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 1 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) "bD" = ( /obj/structure/table/reinforced, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -199,12 +180,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) -"fM" = ( -/obj/machinery/computer/crew/syndie{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/powered/virtual_domain) "fV" = ( /obj/machinery/atmospherics/components/unary/vent_pump, /turf/open/floor/mineral/plastitanium/red, @@ -236,7 +211,7 @@ /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) "ip" = ( -/mob/living/basic/trooper/syndicate/melee/sword/space/stormtrooper, +/obj/effect/landmark/bitrunning/mob_segment, /turf/open/floor/plastic, /area/ruin/space/has_grav/powered/virtual_domain) "iB" = ( @@ -274,7 +249,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 }, -/mob/living/basic/trooper/syndicate/ranged/smg/space/stormtrooper, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) "ja" = ( @@ -335,10 +309,6 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) -"kJ" = ( -/obj/effect/landmark/bitrunning/safehouse_spawn, -/turf/template_noop, -/area/virtual_domain/safehouse) "li" = ( /obj/structure/transit_tube/station/dispenser/reverse{ dir = 4 @@ -395,14 +365,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) -"nO" = ( -/obj/machinery/mineral/ore_redemption{ - name = "Syndicate ore redemption machine"; - ore_multiplier = 4; - req_access = list("syndicate") - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) "nU" = ( /obj/structure/sign/poster/contraband/syndicate_pistol, /turf/closed/wall/r_wall/syndicate, @@ -411,10 +373,6 @@ /obj/structure/cable, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) -"oZ" = ( -/mob/living/basic/trooper/syndicate/melee/sword/space/stormtrooper, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/powered/virtual_domain) "pl" = ( /obj/machinery/atmospherics/components/tank/air{ dir = 8 @@ -468,6 +426,7 @@ /area/ruin/space/has_grav/powered/virtual_domain) "qY" = ( /obj/machinery/light/small/directional/south, +/obj/effect/landmark/bitrunning/cache_spawn, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/powered/virtual_domain) "rm" = ( @@ -563,6 +522,12 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) +"tR" = ( +/obj/modular_map_root/safehouse{ + key = "shuttle_space" + }, +/turf/template_noop, +/area/virtual_domain/safehouse) "uP" = ( /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) @@ -622,12 +587,6 @@ /obj/item/ammo_box/c9mm, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) -"xZ" = ( -/obj/machinery/computer/camera_advanced/syndie{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/powered/virtual_domain) "yl" = ( /obj/machinery/door/airlock/grunge{ name = "Captain's Room" @@ -640,10 +599,6 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) -"yD" = ( -/mob/living/basic/trooper/syndicate/ranged/smg/space/stormtrooper, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) "yJ" = ( /obj/structure/table/reinforced, /obj/machinery/atmospherics/components/unary/vent_scrubber/layer2, @@ -688,13 +643,6 @@ /obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) -"AN" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 - }, -/mob/living/basic/trooper/syndicate/ranged/smg/space/stormtrooper, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) "Bm" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/closed/indestructible/syndicate, @@ -787,10 +735,6 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) -"EX" = ( -/mob/living/basic/trooper/syndicate/ranged/shotgun/space/stormtrooper, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) "Fp" = ( /obj/structure/tank_dispenser/oxygen, /turf/open/floor/mineral/plastitanium, @@ -863,6 +807,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 9 }, +/obj/effect/landmark/bitrunning/mob_segment, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) "Ig" = ( @@ -1009,11 +954,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/pod/dark, /area/ruin/space/has_grav/powered/virtual_domain) -"Nt" = ( -/obj/structure/table/reinforced, -/obj/machinery/atmospherics/components/unary/vent_pump, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) "Of" = ( /obj/structure/closet/crate/secure/gear{ req_access = list("syndicate") @@ -1077,7 +1017,7 @@ /turf/closed/mineral/random, /area/space) "QX" = ( -/mob/living/basic/trooper/syndicate/ranged/space/stormtrooper, +/obj/effect/landmark/bitrunning/mob_segment, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) "Ra" = ( @@ -2016,14 +1956,14 @@ ru Sv vD uP -uP +Io Yj vD uP Wy DA +Io uP -QX vD cc ru @@ -2082,9 +2022,9 @@ uP uP lN uP +QX uP -uP -uP +Io hA qx qx @@ -2255,8 +2195,8 @@ sz Kz ru Mc -gD -yD +uP +uP uP rP ru @@ -2305,7 +2245,7 @@ ru sH Kz yl -oZ +bh bh Yk pS @@ -2314,7 +2254,7 @@ Jz vK uP uP -uP +Io sL hy ru @@ -2372,7 +2312,7 @@ pM vK uP uP -EX +QX sL Im ru @@ -2429,7 +2369,7 @@ JN MR ru Sd -gD +uP uP uP gD @@ -2577,7 +2517,7 @@ sM sM sM sM -kJ +tR qx Hq "} @@ -2792,7 +2732,7 @@ nB ru eB uP -nO +uP uP ru nB @@ -2887,7 +2827,7 @@ dw ru rH uP -AN +JA JA iX JA @@ -3002,13 +2942,13 @@ uP uP dd uP -Aa -hD -Nt +uP +uP +Ox aw -hD -hD -bo +uP +uP +uP uP dd uP @@ -3062,9 +3002,9 @@ ru XS uP uP -hD -aZ -hD +uP +FN +uP uP uP Cf @@ -3466,14 +3406,14 @@ ru Kz ru Kz -pz Kz -xZ Kz -fM +pz Kz kI Kz +Kz +Kz ru Mm ru @@ -3531,7 +3471,7 @@ Kz Kz Kz Kz -Kz +dz ru ru ru diff --git a/_maps/virtual_domains/test_only.dmm b/_maps/virtual_domains/test_only.dmm index 22b647188b6e16..b5339bf8beae86 100644 --- a/_maps/virtual_domains/test_only.dmm +++ b/_maps/virtual_domains/test_only.dmm @@ -1,17 +1,19 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "a" = ( /turf/open/floor, -/area/virtual_domain/powered) +/area/virtual_domain) "D" = ( /obj/effect/mob_spawn/corpse/human/miner, /turf/open/floor, -/area/virtual_domain/powered) +/area/virtual_domain) "I" = ( /mob/living/basic/pet/dog/corgi, /turf/open/floor, -/area/virtual_domain/powered) +/area/virtual_domain) "U" = ( -/obj/effect/landmark/bitrunning/safehouse_spawn, +/obj/modular_map_root/safehouse{ + key = "test_only" + }, /turf/open/floor, /area/virtual_domain/safehouse) diff --git a/_maps/virtual_domains/vaporwave.dmm b/_maps/virtual_domains/vaporwave.dmm index 984bbbe291489d..4d5b3ab57ada04 100644 --- a/_maps/virtual_domains/vaporwave.dmm +++ b/_maps/virtual_domains/vaporwave.dmm @@ -221,7 +221,9 @@ /turf/open/misc/asteroid/airless, /area/ruin/space/has_grav/powered/virtual_domain) "Uy" = ( -/obj/effect/landmark/bitrunning/safehouse_spawn, +/obj/modular_map_root/safehouse{ + key = "shuttle_space" + }, /turf/template_noop, /area/virtual_domain/safehouse) "UE" = ( diff --git a/_maps/virtual_domains/wendigo.dmm b/_maps/virtual_domains/wendigo.dmm index 17bcb48d688bfc..57c002c148c6f9 100644 --- a/_maps/virtual_domains/wendigo.dmm +++ b/_maps/virtual_domains/wendigo.dmm @@ -1,1373 +1,1651 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( +"aa" = ( /turf/open/indestructible/necropolis{ initial_gas_mix = "ICEMOON_ATMOS" }, /area/icemoon/underground/explored/virtual_domain) -"b" = ( +"ab" = ( /turf/closed/indestructible/rock/snow/ice/ore, /area/icemoon/underground/explored/virtual_domain) -"e" = ( -/turf/open/misc/asteroid/snow/ice/icemoon, +"ac" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, /area/icemoon/underground/explored/virtual_domain) -"f" = ( -/obj/structure/marker_beacon/olive, +"ad" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, /turf/open/indestructible/necropolis{ initial_gas_mix = "ICEMOON_ATMOS" }, /area/icemoon/underground/explored/virtual_domain) -"i" = ( +"ae" = ( +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored/virtual_domain) +"ag" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"ah" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"ai" = ( /turf/closed/indestructible/binary, /area/icemoon/underground/explored/virtual_domain) -"o" = ( -/obj/structure/marker_beacon/indigo, +"aj" = ( +/obj/effect/mob_spawn/corpse/human/cargo_tech, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored/virtual_domain) +"ak" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, /turf/open/indestructible/necropolis{ initial_gas_mix = "ICEMOON_ATMOS" }, /area/icemoon/underground/explored/virtual_domain) -"p" = ( -/obj/structure/marker_beacon/bronze, +"al" = ( +/obj/structure/flora/rock/pile/icy/style_3, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored/virtual_domain) +"am" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, /turf/open/indestructible/necropolis{ initial_gas_mix = "ICEMOON_ATMOS" }, /area/icemoon/underground/explored/virtual_domain) -"q" = ( -/obj/structure/marker_beacon/yellow, +"an" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"ar" = ( +/obj/structure/flora/tree/stump, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored/virtual_domain) +"as" = ( +/turf/closed/indestructible/necropolis, +/area/icemoon/underground/explored/virtual_domain) +"au" = ( +/obj/structure/flora/rock/pile/icy/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored/virtual_domain) +"av" = ( +/obj/structure/flora/grass/brown/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored/virtual_domain) +"aw" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, /turf/open/indestructible/necropolis{ initial_gas_mix = "ICEMOON_ATMOS" }, /area/icemoon/underground/explored/virtual_domain) -"t" = ( -/obj/structure/marker_beacon/teal, +"ay" = ( +/obj/effect/mob_spawn/corpse/human/bitrunner, /turf/open/indestructible/necropolis{ initial_gas_mix = "ICEMOON_ATMOS" }, /area/icemoon/underground/explored/virtual_domain) -"x" = ( -/obj/structure/marker_beacon/burgundy, +"az" = ( +/obj/effect/turf_decal/weather/snow/corner, /turf/open/indestructible/necropolis{ initial_gas_mix = "ICEMOON_ATMOS" }, /area/icemoon/underground/explored/virtual_domain) -"A" = ( +"aA" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/template_noop, /area/virtual_domain/safehouse) -"E" = ( -/obj/effect/mob_spawn/corpse/human/miner, -/turf/open/misc/asteroid/snow/ice/icemoon, +"aB" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/obj/structure/holosign/barrier, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"aC" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"aD" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, /area/icemoon/underground/explored/virtual_domain) -"H" = ( -/mob/living/simple_animal/hostile/megafauna/wendigo/virtual_domain, +"aF" = ( +/obj/effect/turf_decal/weather/snow/corner, +/obj/effect/mob_spawn/corpse/human/bitrunner, /turf/open/indestructible/necropolis{ initial_gas_mix = "ICEMOON_ATMOS" }, /area/icemoon/underground/explored/virtual_domain) -"L" = ( +"aG" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"aH" = ( +/mob/living/simple_animal/hostile/megafauna/wendigo, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"aI" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"aJ" = ( +/obj/effect/decal/cleanable/blood/gibs/torso, +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"aK" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"aL" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/closed/indestructible/binary, /area/icemoon/underground/explored/virtual_domain) -"R" = ( +"aM" = ( +/obj/effect/decal/cleanable/blood/gibs/core, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"aN" = ( +/obj/structure/flora/grass/brown/style_random, +/obj/structure/holosign/barrier, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored/virtual_domain) +"aO" = ( +/obj/effect/mob_spawn/corpse/human/cyber_police, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"aP" = ( +/obj/structure/flora/rock/pile/icy/style_random, +/obj/structure/flora/grass/brown/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored/virtual_domain) +"aQ" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"aR" = ( /obj/item/paper/crumpled/bloody{ default_raw_text = "for your own sake, do not enter" }, -/turf/open/misc/asteroid/snow/ice/icemoon, +/turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored/virtual_domain) -"S" = ( +"aS" = ( /turf/template_noop, /area/template_noop) -"V" = ( +"aT" = ( +/obj/effect/turf_decal/weather/snow/corner, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"aU" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"aV" = ( /turf/template_noop, /area/virtual_domain/safehouse) -"Z" = ( -/obj/effect/landmark/bitrunning/safehouse_spawn, +"aW" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"aX" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"aY" = ( +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 2; + pixel_y = 3 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"aZ" = ( +/obj/modular_map_root/safehouse{ + key = "lavaland_boss" + }, /turf/template_noop, /area/virtual_domain/safehouse) +"bX" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"jc" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"lc" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"pl" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/obj/effect/mob_spawn/corpse/human/bitrunner, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"sn" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"KV" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/turf/open/indestructible/necropolis{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/virtual_domain) +"Vt" = ( +/obj/structure/flora/grass/brown/style_random, +/turf/closed/indestructible/rock/snow/ice/ore, +/area/icemoon/underground/explored/virtual_domain) (1,1,1) = {" -S -S -S -S -S -S -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -S -S -S -S -S -S -S -S -S -S -S -S -S -S +aS +aS +aS +aS +aS +aS +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS "} (2,1,1) = {" -S -S -S -S -S -i -i -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -i -i -S -S -S -S -S -S -S -S -S -S -S -S -S +aS +aS +aS +aS +aS +ai +ai +ae +ae +ae +ae +ae +ar +ae +ae +ad +ag +ae +ae +ae +ar +ae +ai +ai +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS "} (3,1,1) = {" -S -S -S -S -i -i -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -i -i -S -S -S -S -S -S -S -S -S -S -S -S +aS +aS +aS +aS +ai +ai +ae +ae +ae +ae +ae +ae +ae +ae +ad +aI +aI +an +aw +ae +ae +ae +ae +ai +ai +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS "} (4,1,1) = {" -S -S -S -i -i -e -e -e -b -b -b -b -b -e -e -e -b -b -b -b -b -e -e -e -i -i -S -S -S -S -S -S -S -S -S -S -S +aS +aS +aS +ai +ai +ae +ae +av +ab +ab +ar +ae +au +ad +az +ae +ae +ae +ae +av +av +ae +ae +ae +ai +ai +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS "} (5,1,1) = {" -S -S -i -i -e -e -e -b -b -b -b -b -b -b -e -b -b -b -b -b -b -b -e -e -e -i -i -i -i -i -i -i -i -i -i -i -L +aS +aS +ai +ai +ae +ae +av +ae +ab +ab +ab +ab +ab +aC +aa +ag +ar +ab +ab +ab +ab +ab +ae +au +ae +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +aL "} (6,1,1) = {" -S -i -i -e -e -e -b -b -b -b -b -b -b -b -e -b -b -b -b -b -b -b -b -e -e -e -i -i -e -e -e -e -e -e -e -e -i +aS +ai +ai +ae +ae +ae +av +ab +ab +ab +ab +ab +ab +as +ab +ab +ab +ab +ab +ab +ab +ar +au +ae +ae +ae +ai +ai +ae +ae +ae +ae +ae +ae +ae +ae +ai "} (7,1,1) = {" -i -i -e -e -e -b -b -b -b -b -b -b -b -b -e -b -b -b -b -b -b -b -b -b -e -e -e -i -e -e -e -e -e -e -e -e -i +ai +ai +ae +ae +ae +au +ab +ab +ab +ab +ab +ab +ab +as +as +ab +ab +ab +ab +ab +ab +ae +ae +av +ae +ae +ae +ai +ae +ae +ae +ae +ad +ag +ae +ae +ai "} (8,1,1) = {" -i -e -e -e -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -e -e -e -e -e -e -e -e -e -e -e -i +ai +ae +ae +ae +ar +ab +ab +ab +ab +ab +ab +ab +ar +aC +aa +az +au +ab +ab +ab +ab +ab +ab +ar +ae +ae +ae +ae +ae +ae +ae +aQ +aa +aa +ag +ae +ai "} (9,1,1) = {" -i -e -e -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -e -e -e -e -e -e -e -e -e -e -i +ai +ae +ae +ae +av +ab +ab +ab +ab +ab +av +ae +ae +am +aa +aF +av +av +ae +ab +ab +ab +ab +ab +av +av +ae +ae +ae +ae +ae +ae +am +aa +aD +ae +ai "} (10,1,1) = {" -i -e -e -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -e -e -e -e -e -e -e -e -e -e -i +ai +ae +ae +ar +av +ab +ab +ab +ab +au +ae +jc +ae +ae +aC +aa +ac +ak +au +ae +ab +ab +ab +ab +ab +au +ae +ae +ad +aw +ae +ae +ae +aT +ae +ae +ai "} (11,1,1) = {" -i -e -E -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -o -a -a -b -b -b -b -e -e -e -e -e -e -e -e -e -e -i +ai +ae +ae +ae +ab +ab +ab +av +aX +ae +ae +am +ag +ae +aC +aa +az +ae +ae +al +aX +ae +ab +ab +ab +ae +ae +aQ +aD +ae +ae +ae +ae +aK +ae +ae +ai "} (12,1,1) = {" -i -e -e -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -e -e -e -e -e -e -e -e -e -e -i +ai +ae +ae +ab +ab +ab +KV +ac +aa +ag +ae +al +aC +ac +aa +aa +az +au +ad +ac +az +ae +au +ab +ab +ab +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ai "} (13,1,1) = {" -i -e -e -b -b -b -a -a -a -a -q -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -e -e -e -e -e -e -e -e -e -e -i +ai +ae +ae +ab +ab +ab +ae +ae +aC +aa +ag +ae +aC +aa +aa +aa +aa +ac +aa +aa +aa +ag +ae +ab +ab +ab +av +ae +ae +ae +ae +ae +ae +ae +ae +ae +ai "} (14,1,1) = {" -i -e -e -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -e -e -e -V -V -V -V -V -Z -e -i +ai +ae +ae +ar +ab +ab +ab +ar +aC +aa +az +ae +aC +aa +aa +aa +aa +aa +aa +aa +aa +aa +ac +ab +ab +ab +al +ar +ae +aV +aV +aV +aV +aV +aZ +ae +ai "} (15,1,1) = {" -i -e -e -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -E -e -e -V -V -V -V -V -V -e -i +ai +ae +ae +au +ab +ab +ab +as +aa +aa +aa +ac +aa +aa +aa +aa +aa +aa +aa +aa +aa +ay +aa +as +as +av +ae +aj +ae +aV +aV +aV +aV +aV +aV +ae +ai "} (16,1,1) = {" -i -e -e -e -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -e -e -e -e -V -V -V -V -V -V -e -i +ai +ae +ad +ac +ab +as +as +as +aa +aa +aa +aa +aa +aa +aa +ah +aM +aa +aa +aa +aa +aa +aa +aa +as +aB +ae +ae +av +aV +aV +aV +aV +aV +aV +ae +ai "} (17,1,1) = {" -i -e -e -e -e -e -a -a -a -a -a -a -a -a -H -a -a -a -a -x -a -a -a -e -e -e -e -R -e -V -V -V -V -V -V -e -i +ai +KV +aI +aa +aa +as +as +as +aa +aa +aa +aa +aa +aa +aH +aJ +aa +aa +aa +aa +aa +aa +aa +aa +aa +aY +aw +aR +av +aV +aV +aV +aV +aV +aV +ae +ai "} (18,1,1) = {" -i -e -e -e -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -e -e -e -e -V -V -V -V -V -V -e -i +ai +ae +ae +am +aa +as +as +as +aa +aa +aa +aa +aa +aa +aa +sn +aa +aa +aa +aa +aa +aa +aa +aa +aa +aD +ae +ae +ae +aV +aV +aV +aV +aV +aV +ae +ai "} (19,1,1) = {" -i -e -e -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -e -e -e -V -V -V -V -V -V -e -i +ai +ae +ae +av +aC +ab +as +aI +aI +aI +aa +aa +aa +aa +aa +aa +aO +aa +aa +aa +aa +aa +aa +as +as +aN +ae +ae +ar +aV +aV +aV +aV +aV +aV +ae +ai "} (20,1,1) = {" -i -e -e -b -b -b -a -a -a -a -a -a -a -a -p -a -a -a -a -a -a -a -a -b -b -b -e -e -e -V -V -V -V -V -A -e -i +ai +ae +ae +ae +ab +ab +ar +ae +ae +al +aC +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +av +ae +ae +aV +aV +aV +aV +aV +aA +ae +ai "} (21,1,1) = {" -i -e -e -b -b -b -a -a -a -a -f -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -e -e -e -e -e -e -e -e -e -e -i +ai +ar +ae +au +ab +ab +au +ae +ad +ac +aa +aa +aa +aa +aa +aI +aa +aa +aa +aI +aI +aa +aa +ab +ab +ab +av +ae +ae +ae +ae +ae +ae +ae +ae +ae +ai "} (22,1,1) = {" -i -e -e -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -e -e -e -e -e -e -e -e -e -e -i +ai +ae +ae +ab +ab +ab +ac +lc +aI +aa +aa +az +al +aC +az +al +am +aa +az +ae +au +am +ab +ab +ab +ab +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ai "} (23,1,1) = {" -i -e -e -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -t -a -b -b -b -b -e -e -e -e -e -e -e -e -e -e -i +ai +ae +ae +ab +ab +ab +ab +av +ae +pl +aa +aD +au +aC +az +ae +ae +aC +az +ae +ae +ae +ab +ab +ab +ae +ae +aQ +ag +ae +ae +ae +ae +ae +ae +ae +ai "} (24,1,1) = {" -i -e -e -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -e -e -e -e -e -e -e -e -e -e -i +ai +ae +ae +ae +ab +ab +ab +Vt +ar +aC +aD +au +ae +aC +aa +aW +ae +am +az +ae +ae +ab +ab +ab +ab +ae +ae +ae +am +ac +aW +ae +ae +aU +ae +ae +ai "} (25,1,1) = {" -i -e -e -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -e -e -e -e -e -e -e -e -e -e -i +ai +ae +ae +ae +ae +ab +ab +ab +ab +az +ae +ae +ad +aa +az +au +av +av +aC +ab +ab +ab +ab +ab +au +ae +ae +ae +ae +aG +ae +ae +ad +aI +aW +ae +ai "} (26,1,1) = {" -i -e -e -e -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -e -e -e -e -e -e -e -e -e -e -e -i +ai +ae +ae +ae +ae +ae +ar +ab +ab +ab +ae +av +aC +as +as +ab +ar +aP +ab +ab +ab +ab +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +aK +ae +ae +ae +ai "} (27,1,1) = {" -i -i -e -e -e -b -b -b -b -b -b -b -b -b -e -b -b -b -b -b -b -b -b -b -e -e -e -i -e -e -e -e -e -e -e -e -i +ai +ai +ae +au +ae +av +av +ab +ab +ab +ab +ab +as +as +ab +ab +ab +ab +ab +ab +ab +ab +ae +ae +ae +ar +ae +ai +ae +ae +ae +ae +ae +ae +ae +ae +ai "} (28,1,1) = {" -S -i -i -e -e -e -b -b -b -b -b -b -b -b -e -b -b -b -b -b -b -b -b -e -e -e -i -i -e -e -e -e -e -e -e -e -i +aS +ai +ai +ae +au +ae +av +ae +ab +ab +ab +ab +as +as +ab +ab +ab +ab +ab +ab +ab +au +ae +ae +ae +ae +ai +ai +ae +ae +ae +ae +ae +ae +ae +ae +ai "} (29,1,1) = {" -S -S -i -i -e -e -e -b -b -b -b -b -b -b -e -b -b -b -b -b -b -b -e -e -e -i -i -i -i -i -i -i -i -i -i -i -i +aS +aS +ai +ai +ae +ae +ae +ae +ae +ar +av +aC +as +as +ab +ab +ab +ab +ab +ab +ae +ae +ae +ar +ae +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai "} (30,1,1) = {" -S -S -S -i -i -e -e -e -b -b -b -b -b -e -e -e -b -b -b -b -b -e -e -e -i -i -S -S -S -S -S -S -S -S -S -S -S +aS +aS +aS +ai +ai +ae +ae +ae +ae +au +ae +am +aa +aa +aI +ab +ab +ab +ab +ae +ae +ae +ae +ae +ai +ai +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS "} (31,1,1) = {" -S -S -S -S -i -i -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -i -i -S -S -S -S -S -S -S -S -S -S -S -S +aS +aS +aS +aS +ai +ai +ae +ae +ae +ae +ae +ae +aC +aD +ae +ae +ae +ae +ae +ae +ae +ae +ae +ai +ai +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS "} (32,1,1) = {" -S -S -S -S -S -i -i -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -i -i -S -S -S -S -S -S -S -S -S -S -S -S -S +aS +aS +aS +aS +aS +ai +ai +ae +ae +ae +ae +ae +bX +ae +ae +ae +ae +ae +ae +ae +ae +ae +ai +ai +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS "} (33,1,1) = {" -S -S -S -S -S -S -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -S -S -S -S -S -S -S -S -S -S -S -S -S -S +aS +aS +aS +aS +aS +aS +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS +aS "} diff --git a/_maps/virtual_domains/xeno_nest.dmm b/_maps/virtual_domains/xeno_nest.dmm index fcbd7cc116c91e..5d2952a5b1a8e9 100644 --- a/_maps/virtual_domains/xeno_nest.dmm +++ b/_maps/virtual_domains/xeno_nest.dmm @@ -24,7 +24,7 @@ /area/ruin/space/has_grav/powered/virtual_domain) "h" = ( /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/sentinel, +/obj/effect/landmark/bitrunning/mob_segment, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/space/has_grav/powered/virtual_domain) "i" = ( @@ -96,8 +96,10 @@ /obj/effect/decal/cleanable/blood, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/space/has_grav/powered/virtual_domain) -"v" = ( -/obj/effect/landmark/bitrunning/safehouse_spawn, +"w" = ( +/obj/modular_map_root/safehouse{ + key = "shuttle" + }, /turf/template_noop, /area/virtual_domain/safehouse) "x" = ( @@ -106,6 +108,11 @@ /obj/effect/landmark/bitrunning/cache_spawn, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/space/has_grav/powered/virtual_domain) +"y" = ( +/obj/structure/alien/weeds/node, +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/space/has_grav/powered/virtual_domain) "z" = ( /obj/structure/alien/weeds, /obj/structure/alien/resin/wall, @@ -246,14 +253,6 @@ /obj/structure/alien/egg/burst, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/space/has_grav/powered/virtual_domain) -"Y" = ( -/obj/structure/alien/weeds, -/obj/effect/decal/cleanable/blood, -/mob/living/simple_animal/hostile/alien/drone{ - plants_off = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) "Z" = ( /obj/structure/alien/weeds, /obj/structure/bed/nest, @@ -477,7 +476,7 @@ a E z e -e +h m K J @@ -518,13 +517,13 @@ a E z W -h +e e e e B o -e +K z E a @@ -564,7 +563,7 @@ z e V e -h +e W z E @@ -683,12 +682,12 @@ E z z e -h e e -h e e +h +e z E a @@ -786,8 +785,8 @@ z z W o -Y -e +B +K z E a @@ -826,7 +825,7 @@ E z I e -V +y e W z @@ -973,7 +972,7 @@ E z e e -p +e z z z @@ -1130,7 +1129,7 @@ E E G t -S +h e z z @@ -1260,7 +1259,7 @@ E E E z -p +e z z E @@ -1327,7 +1326,7 @@ n n n n -v +w A E "} @@ -1383,7 +1382,7 @@ z z T e -e +h V W z @@ -1423,7 +1422,7 @@ E z N f -S +e e W I @@ -1873,8 +1872,8 @@ E E z I -p e +h e e e diff --git a/_maps/voidraptor.json b/_maps/voidraptor.json index 13fcac28620800..99250acb43dfd2 100644 --- a/_maps/voidraptor.json +++ b/_maps/voidraptor.json @@ -4,10 +4,10 @@ "map_path": "map_files/VoidRaptor", "map_file": "VoidRaptor.dmm", "shuttles": { - "emergency": "emergency_skyrat", - "ferry": "ferry_skyrat", - "mining": "mining_large_skyrat", - "cargo": "cargo_delta_skyrat", + "emergency": "emergency_nova", + "ferry": "ferry_nova", + "mining": "mining_nova_large", + "cargo": "cargo_nova_delta", "whiteship": "whiteship_delta" }, "orbit_shift_replacement": "Attention crew, it appears that someone has shifted your ship into more dangerous territory.", diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index ebb14c092406da..f756678b43a059 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -40,7 +40,7 @@ #define DNA_UNI_IDENTITY_BLOCKS 8 -//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_skyrat/modules/customization/_DEFINES/DNA.dm) +//NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_nova/modules/customization/_DEFINES/DNA.dm) /* /// This number needs to equal the total number of DNA blocks #define DNA_MUTANT_COLOR_BLOCK 1 @@ -60,7 +60,7 @@ #define DNA_POD_HAIR_BLOCK 15 #define DNA_FEATURE_BLOCKS 15 -*/ //SKYRAT EDIT CHANGE - ORIGINAL +*/ //NOVA EDIT CHANGE - ORIGINAL #define DNA_FEATURE_BLOCKS GLOB.dna_total_feature_blocks #define DNA_MANDATORY_COLOR_BLOCKS 5 @@ -72,7 +72,7 @@ #define DNA_POD_HAIR_BLOCK 15 -// SKYRAT EDIT CHANGE END +// NOVA EDIT CHANGE END #define DNA_SEQUENCE_LENGTH 4 #define DNA_MUTATION_BLOCKS 8 diff --git a/code/__DEFINES/_flags.dm b/code/__DEFINES/_flags.dm index e0b88066d7d61b..012ded7eac1657 100644 --- a/code/__DEFINES/_flags.dm +++ b/code/__DEFINES/_flags.dm @@ -17,49 +17,43 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 /// Is this object currently processing in the atmos object list? #define ATMOS_IS_PROCESSING_1 (1<<0) -/// conducts electricity (metal etc.) -#define CONDUCT_1 (1<<1) -/// For machines and structures that should not break into parts, eg, holodeck stuff -#define NODECONSTRUCT_1 (1<<2) /// item has priority to check when entering or leaving -#define ON_BORDER_1 (1<<3) +#define ON_BORDER_1 (1<<1) ///Whether or not this atom shows screentips when hovered over -#define NO_SCREENTIPS_1 (1<<4) +#define NO_SCREENTIPS_1 (1<<2) /// Prevent clicking things below it on the same turf eg. doors/ fulltile windows -#define PREVENT_CLICK_UNDER_1 (1<<5) +#define PREVENT_CLICK_UNDER_1 (1<<3) ///specifies that this atom is a hologram that isnt real -#define HOLOGRAM_1 (1<<6) +#define HOLOGRAM_1 (1<<4) ///Whether /atom/Initialize() has already run for the object -#define INITIALIZED_1 (1<<7) +#define INITIALIZED_1 (1<<5) /// was this spawned by an admin? used for stat tracking stuff. -#define ADMIN_SPAWNED_1 (1<<8) +#define ADMIN_SPAWNED_1 (1<<6) /// should not get harmed if this gets caught by an explosion? -#define PREVENT_CONTENTS_EXPLOSION_1 (1<<9) +#define PREVENT_CONTENTS_EXPLOSION_1 (1<<7) /// Should this object be paintable with very dark colors? -#define ALLOW_DARK_PAINTS_1 (1<<10) +#define ALLOW_DARK_PAINTS_1 (1<<8) /// Should this object be unpaintable? -#define UNPAINTABLE_1 (1<<11) -/// Is the thing currently spinning? -#define IS_SPINNING_1 (1<<12) +#define UNPAINTABLE_1 (1<<9) /// Is this atom on top of another atom, and as such has click priority? -#define IS_ONTOP_1 (1<<13) +#define IS_ONTOP_1 (1<<10) /// Is this atom immune to being dusted by the supermatter? -#define SUPERMATTER_IGNORES_1 (1<<14) +#define SUPERMATTER_IGNORES_1 (1<<11) /// If a turf can be made dirty at roundstart. This is also used in areas. -#define CAN_BE_DIRTY_1 (1<<15) +#define CAN_BE_DIRTY_1 (1<<12) /// Should we use the initial icon for display? Mostly used by overlay only objects -#define HTML_USE_INITAL_ICON_1 (1<<16) +#define HTML_USE_INITAL_ICON_1 (1<<13) /// Can players recolor this in-game via vendors (and maybe more if support is added)? -#define IS_PLAYER_COLORABLE_1 (1<<17) +#define IS_PLAYER_COLORABLE_1 (1<<14) /// Whether or not this atom has contextual screentips when hovered OVER -#define HAS_CONTEXTUAL_SCREENTIPS_1 (1<<18) +#define HAS_CONTEXTUAL_SCREENTIPS_1 (1<<15) /// Whether or not this atom is storing contents for a disassociated storage object -#define HAS_DISASSOCIATED_STORAGE_1 (1<<19) +#define HAS_DISASSOCIATED_STORAGE_1 (1<<16) /// If this atom has experienced a decal element "init finished" sourced appearance update /// We use this to ensure stacked decals don't double up appearance updates for no rasin /// Flag as an optimization, don't make this a trait without profiling /// Yes I know this is a stupid flag, no you can't take him from me -#define DECAL_INIT_UPDATE_EXPERIENCED_1 (1<<20) +#define DECAL_INIT_UPDATE_EXPERIENCED_1 (1<<17) // Update flags for [/atom/proc/update_appearance] /// Update the atom's name @@ -163,6 +157,11 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define FLOATING (1<<3) /// When moving, will Cross() everything, but won't stop or Bump() anything. #define PHASING (1<<4) +/// The mob is walking on the ceiling. Or is generally just, upside down. +#define UPSIDE_DOWN (1<<5) + +/// Combination flag for movetypes which, for all intents and purposes, mean the mob is not touching the ground +#define MOVETYPES_NOT_TOUCHING_GROUND (FLYING|FLOATING|UPSIDE_DOWN) //Fire and Acid stuff, for resistance_flags #define LAVA_PROOF (1<<0) diff --git a/code/__DEFINES/_helpers.dm b/code/__DEFINES/_helpers.dm index c6a5b860e9a2d3..f1b1b21df33081 100644 --- a/code/__DEFINES/_helpers.dm +++ b/code/__DEFINES/_helpers.dm @@ -25,17 +25,8 @@ } \ sleep(time); -#ifdef EXPERIMENT_515_DONT_CACHE_REF /// Takes a datum as input, returns its ref string #define text_ref(datum) ref(datum) -#else -/// Takes a datum as input, returns its ref string, or a cached version of it -/// This allows us to cache \ref creation, which ensures it'll only ever happen once per datum, saving string tree time -/// It is slightly less optimal then a []'d datum, but the cost is massively outweighed by the potential savings -/// It will only work for datums mind, for datum reasons -/// : because of the embedded typecheck -#define text_ref(datum) (isdatum(datum) ? (datum:cached_ref ||= "\ref[datum]") : ("\ref[datum]")) -#endif // Refs contain a type id within their string that can be used to identify byond types. // Custom types that we define don't get a unique id, but this is useful for identifying diff --git a/code/__DEFINES/_protect.dm b/code/__DEFINES/_protect.dm index 22fad2f638514b..9152cfcb5706fa 100644 --- a/code/__DEFINES/_protect.dm +++ b/code/__DEFINES/_protect.dm @@ -1,4 +1,5 @@ ///Protects a datum from being VV'd or spawned through admin manipulation +#ifndef TESTING #define GENERAL_PROTECT_DATUM(Path)\ ##Path/can_vv_get(var_name){\ return FALSE;\ @@ -15,3 +16,6 @@ ##Path/Write(savefile/savefile){\ return;\ } +#else +#define GENERAL_PROTECT_DATUM(Path) +#endif diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm index 7a1e91cd408501..97cbf4aec0e817 100644 --- a/code/__DEFINES/access.dm +++ b/code/__DEFINES/access.dm @@ -224,9 +224,9 @@ #define ACCESS_FLAG_CENTCOM_NAME "Centcom" /// Bitflag for Centcom ID card accesses. See CENTCOM_ACCESS. #define ACCESS_FLAG_CENTCOM (1 << 4) -/// Displayed name for Syndicate ID card accesses. -#define ACCESS_FLAG_SYNDICATE_NAME "Syndicate" -/// Bitflag for Syndicate ID card accesses. See SYNDICATE_ACCESS. +/// Displayed name for Symphionia ID card accesses. +#define ACCESS_FLAG_SYNDICATE_NAME "Symphionia" +/// Bitflag for Symphionia ID card accesses. See SYNDICATE_ACCESS. #define ACCESS_FLAG_SYNDICATE (1 << 5) /// Displayed name for Offstation/Ruin/Away Mission ID card accesses. #define ACCESS_FLAG_AWAY_NAME "Away" @@ -333,7 +333,7 @@ ACCESS_WEAPONS, \ ACCESS_XENOBIOLOGY, \ ACCESS_BARBER, \ -) // SKYRAT EDIT ADDITION +) // NOVA EDIT ADDITION /// Command staff/secure accesses, think bridge/armoury, ai_upload, notably access to modify ID cards themselves. Do not use direct, access via SSid_access.get_flag_access_list(ACCESS_FLAG_COMMAND) #define COMMAND_ACCESS list( \ @@ -360,7 +360,7 @@ ACCESS_HOP, \ ACCESS_QM, \ ACCESS_RD, \ -) // SKYRAT EDIT - Added ACCESS_CE and ACCESS_CMO to PRIVATE_COMMAND_ACCESS +) // NOVA EDIT - Added ACCESS_CE and ACCESS_CMO to PRIVATE_COMMAND_ACCESS /// Captains private rooms. Do not use direct, access via SSid_access.get_flag_access_list(ACCESS_FLAG_CAPTAIN) #define CAPTAIN_ACCESS list( \ @@ -379,7 +379,7 @@ ACCESS_CENT_THUNDER, \ ) -/// Syndicate areas off station. Do not use direct, access via SSid_access.get_flag_access_list(ACCESS_FLAG_SYNDICATE) +/// Symphionia areas off station. Do not use direct, access via SSid_access.get_flag_access_list(ACCESS_FLAG_SYNDICATE) #define SYNDICATE_ACCESS list( \ ACCESS_SYNDICATE, \ ACCESS_SYNDICATE_LEADER, \ @@ -523,7 +523,7 @@ ACCESS_VAULT, \ ) /// Name for the Centcom region. -#define REGION_CENTCOM "Central Command" +#define REGION_CENTCOM "Conglomeration of Colonists" /// Used to seed the accesses_by_region list in SSid_access. A list of all CENTCOM_ACCESS regional accesses. #define REGION_ACCESS_CENTCOM CENTCOM_ACCESS diff --git a/code/__DEFINES/achievements.dm b/code/__DEFINES/achievements.dm index 4a0299d835ac32..60b9ed039487c5 100644 --- a/code/__DEFINES/achievements.dm +++ b/code/__DEFINES/achievements.dm @@ -6,11 +6,6 @@ #define ACHIEVEMENT_DEFAULT "default" #define ACHIEVEMENT_SCORE "score" -///the priority for which awards are orded on [/datum/achievement_data/load_all_achievements()] -#define AWARD_PRIORITY_DEFAULT 100 -///the priority of the achievements score. NO achievement should have a priority equal or lower than this. -#define AWARD_PRIORITY_LAST 0 - /// preferences for the sound played when unlocking an achievement #define CHEEVO_SOUND_TADA "Tada Fanfare" #define CHEEVO_SOUND_JINGLE "Beeps Jingle" @@ -46,9 +41,9 @@ #define MEDAL_VOID_ASCENSION "Void" #define MEDAL_BLADE_ASCENSION "Blade" #define MEDAL_COSMOS_ASCENSION "Cosmos" -#define MEDAL_KNOCK_ASCENSION "Knock" +#define MEDAL_LOCK_ASCENSION "Knock" +#define MEDAL_MOON_ASCENSION "Moon" #define MEDAL_TOOLBOX_SOUL "Toolsoul" -#define MEDAL_CHEM_TUT "Beginner Chemist" #define MEDAL_HOT_DAMN "Hot Damn!" #define MEDAL_CAYENNE_DISK "Very Important Piscis" #define MEDAL_TRAM_SURFER "Tram Surfer" diff --git a/code/__DEFINES/actions.dm b/code/__DEFINES/actions.dm index 5bc2b161781247..99f9c1aca551d9 100644 --- a/code/__DEFINES/actions.dm +++ b/code/__DEFINES/actions.dm @@ -41,3 +41,10 @@ DEFINE_BITFIELD(check_flags, list( #define UPDATE_BUTTON_BACKGROUND (1<<2) #define UPDATE_BUTTON_OVERLAY (1<<3) #define UPDATE_BUTTON_STATUS (1<<4) + +/// Takes in a typepath of a `/datum/action` and adds it to `src`. +/// Only useful if you want to add the action and never desire to reference it again ever. +#define GRANT_ACTION(typepath) do {\ + var/datum/action/_ability = new typepath(src);\ + _ability.Grant(src);\ +} while (FALSE) diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index ad497a4f718c5a..c7274638e792d9 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -7,9 +7,9 @@ #define MUTE_ADMINHELP (1<<3) #define MUTE_DEADCHAT (1<<4) #define MUTE_INTERNET_REQUEST (1<<5) -// Skyrat Edit Addition - Mute LOOC +// NOVA EDIT Addition - Mute LOOC #define MUTE_LOOC (1<<6) -// Skyrat Edit End +// NOVA EDIT End #define MUTE_ALL ALL //Some constants for DB_Ban @@ -102,7 +102,7 @@ #define AHELP_RESOLVED 3 /// Amount of time after the round starts that the player disconnect report is issued. -#define ROUNDSTART_LOGOUT_REPORT_TIME (21 MINUTES) // SKYRAT EDIT CHANGE - ORIGINAL: 10 MINUTES +#define ROUNDSTART_LOGOUT_REPORT_TIME (21 MINUTES) // NOVA EDIT CHANGE - ORIGINAL: 10 MINUTES /// Threshold in minutes for counting a player as AFK on the roundstart report. #define ROUNDSTART_LOGOUT_AFK_THRESHOLD (ROUNDSTART_LOGOUT_REPORT_TIME * 0.7) @@ -173,3 +173,8 @@ GLOBAL_VAR_INIT(ghost_role_flags, ALL) #define INTERVIEW_DENIED "interview_denied" /// State when an interview has had no action on it yet #define INTERVIEW_PENDING "interview_pending" + +/// Used in logging uses of admin verbs (and sometimes some non-admin or debug verbs) to the blackbox +/// Only pass it a string key, the verb being used. +#define BLACKBOX_LOG_ADMIN_VERB(the_verb) SSblackbox.record_feedback("tally", "admin_verb", 1, the_verb) + diff --git a/code/__DEFINES/ai/ai.dm b/code/__DEFINES/ai/ai.dm index 53cbf117af410e..65cc4214908664 100644 --- a/code/__DEFINES/ai/ai.dm +++ b/code/__DEFINES/ai/ai.dm @@ -1,4 +1,5 @@ #define GET_AI_BEHAVIOR(behavior_type) SSai_behaviors.ai_behaviors[behavior_type] +#define GET_TARGETING_STRATEGY(targeting_type) SSai_behaviors.targeting_strategies[targeting_type] #define HAS_AI_CONTROLLER_TYPE(thing, type) istype(thing?.ai_controller, type) #define AI_STATUS_ON 1 @@ -6,6 +7,7 @@ ///For JPS pathing, the maximum length of a path we'll try to generate. Should be modularized depending on what we're doing later on #define AI_MAX_PATH_LENGTH 30 // 30 is possibly overkill since by default we lose interest after 14 tiles of distance, but this gives wiggle room for weaving around obstacles +#define AI_BOT_PATH_LENGTH 150 ///Cooldown on planning if planning failed last time diff --git a/code/__DEFINES/ai/ai_blackboard.dm b/code/__DEFINES/ai/ai_blackboard.dm index 484b38b0fd16bd..daa5d4285f9a0e 100644 --- a/code/__DEFINES/ai/ai_blackboard.dm +++ b/code/__DEFINES/ai/ai_blackboard.dm @@ -10,6 +10,12 @@ #define BB_PATH_TO_USE "BB_path_to_use" ///How close a mob must be for us to select it as a target, if that is less than how far we can maintain it as a target #define BB_AGGRO_RANGE "BB_aggro_range" +///are we hungry? determined by the udder compnent +#define BB_CHECK_HUNGRY "BB_check_hungry" +///are we ready to breed? +#define BB_BREED_READY "BB_breed_ready" +///maximum kids we can have +#define BB_MAX_CHILDREN "BB_max_children" /// Store a single or list of emotes at this key #define BB_EMOTE_KEY "BB_emotes" @@ -40,31 +46,33 @@ ///Basic Mob Keys -///Targetting subtrees +///Targeting subtrees #define BB_BASIC_MOB_CURRENT_TARGET "BB_basic_current_target" #define BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION "BB_basic_current_target_hiding_location" -#define BB_TARGETTING_DATUM "targetting_datum" +#define BB_TARGETING_STRATEGY "targeting_strategy" ///some behaviors that check current_target also set this on deep crit mobs #define BB_BASIC_MOB_EXECUTION_TARGET "BB_basic_execution_target" ///Blackboard key for a whitelist typecache of "things we can target while trying to move" -#define BB_OBSTACLE_TARGETTING_WHITELIST "BB_targetting_whitelist" +#define BB_OBSTACLE_TARGETING_WHITELIST "BB_targeting_whitelist" /// Key for the minimum status at which we want to target mobs (does not need to be specified if CONSCIOUS) #define BB_TARGET_MINIMUM_STAT "BB_target_minimum_stat" /// Flag for whether to target only wounded mobs #define BB_TARGET_WOUNDED_ONLY "BB_target_wounded_only" +/// What typepath the holding object targeting strategy should look for +#define BB_TARGET_HELD_ITEM "BB_target_held_item" -/// Blackboard key storing how long your targetting datum has held a particular target +/// Blackboard key storing how long your targeting strategy has held a particular target #define BB_BASIC_MOB_HAS_TARGET_TIME "BB_basic_mob_has_target_time" -///Targetting keys for something to run away from, if you need to store this separately from current target +///Targeting keys for something to run away from, if you need to store this separately from current target #define BB_BASIC_MOB_FLEE_TARGET "BB_basic_flee_target" #define BB_BASIC_MOB_FLEE_TARGET_HIDING_LOCATION "BB_basic_flee_target_hiding_location" -#define BB_FLEE_TARGETTING_DATUM "flee_targetting_datum" +#define BB_FLEE_TARGETING_STRATEGY "flee_targeting_strategy" #define BB_BASIC_MOB_FLEE_DISTANCE "BB_basic_flee_distance" #define DEFAULT_BASIC_FLEE_DISTANCE 9 -/// Generic key for a non-specific targetted action -#define BB_TARGETTED_ACTION "BB_targetted_action" +/// Generic key for a non-specific targeted action +#define BB_TARGETED_ACTION "BB_TARGETED_action" /// Generic key for a non-specific action #define BB_GENERIC_ACTION "BB_generic_action" @@ -115,9 +123,9 @@ ///Range for a MOD AI controller. #define MOD_AI_RANGE 200 -///should we skip the faction check for the targetting datum? +///should we skip the faction check for the targeting strategy? #define BB_ALWAYS_IGNORE_FACTION "BB_always_ignore_factions" -///are we in some kind of temporary state of ignoring factions when targetting? can result in volatile results if multiple behaviours touch this +///are we in some kind of temporary state of ignoring factions when targeting? can result in volatile results if multiple behaviours touch this #define BB_TEMPORARILY_IGNORE_FACTION "BB_temporarily_ignore_factions" ///currently only used by clowns, a list of what can the mob speak randomly @@ -132,3 +140,6 @@ #define BB_BASIC_MOB_REINFORCEMENT_TARGET "BB_basic_mob_reinforcement_target" /// The next time at which this mob can call for reinforcements #define BB_BASIC_MOB_REINFORCEMENTS_COOLDOWN "BB_basic_mob_reinforcements_cooldown" + +///Text we display when we befriend someone +#define BB_FRIENDLY_MESSAGE "friendly_message" diff --git a/code/__DEFINES/ai/bot_keys.dm b/code/__DEFINES/ai/bot_keys.dm new file mode 100644 index 00000000000000..5cf2e4263d425d --- /dev/null +++ b/code/__DEFINES/ai/bot_keys.dm @@ -0,0 +1,73 @@ +// bot keys +///The first beacon we find +#define BB_BEACON_TARGET "beacon_target" +///The last beacon we found, we will use its codes to find the next beacon +#define BB_PREVIOUS_BEACON_TARGET "previous_beacon_target" +///Location of whoever summoned us +#define BB_BOT_SUMMON_TARGET "bot_summon_target" +///salute messages to beepsky +#define BB_SALUTE_MESSAGES "salute_messages" +///the beepsky we will salute +#define BB_SALUTE_TARGET "salute_target" +///our announcement ability +#define BB_ANNOUNCE_ABILITY "announce_ability" +///list of our radio channels +#define BB_RADIO_CHANNEL "radio_channel" +///list of unreachable things we will temporarily ignore +#define BB_TEMPORARY_IGNORE_LIST "temporary_ignore_list" +///Last thing we attempted to reach +#define BB_LAST_ATTEMPTED_PATHING "last_attempted_pathing" + +// medbot keys +///the patient we must heal +#define BB_PATIENT_TARGET "patient_target" +///list holding our wait dialogue +#define BB_WAIT_SPEECH "wait_speech" +///what we will say to our patient after we heal them +#define BB_AFTERHEAL_SPEECH "afterheal_speech" +///things we will say when we are bored +#define BB_IDLE_SPEECH "idle_speech" +///speech unlocked after being emagged +#define BB_EMAGGED_SPEECH "emagged_speech" +///speech when we are tipped +#define BB_WORRIED_ANNOUNCEMENTS "worried_announcements" +///speech when our patient is near death +#define BB_NEAR_DEATH_SPEECH "near_death_speech" +///in crit patient we must alert medbay about +#define BB_PATIENT_IN_CRIT "patient_in_crit" + +// cleanbots +///key that holds the foaming ability +#define BB_CLEANBOT_FOAM "cleanbot_foam" +///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 emagged speech +#define BB_CLEANBOT_EMAGGED_PHRASES "emagged_phrases" +///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 the janitor we will befriend +#define BB_FRIENDLY_JANITOR "friendly_janitor" +///key that holds the victim we will spray +#define BB_ACID_SPRAY_TARGET "acid_spray_target" +///key that holds trash we will burn +#define BB_HUNTABLE_TRASH "huntable_trash" + +//hygienebots +///key that holds our threats +#define BB_WASH_THREATS "wash_threats" +///key that holds speech when we find our target +#define BB_WASH_FOUND "wash_found" +///key that holds speech when we cleaned our target +#define BB_WASH_DONE "wash_done" +///key that holds target we will wash +#define BB_WASH_TARGET "wash_target" +///key that holds how frustrated we are when target is running away +#define BB_WASH_FRUSTRATION "wash_frustration" +///key that holds cooldown after we finish cleaning something, so we dont immediately run off to patrol +#define BB_POST_CLEAN_COOLDOWN "post_clean_cooldown" diff --git a/code/__DEFINES/ai/carp.dm b/code/__DEFINES/ai/carp.dm index 8286f326207748..459b98ffb0204b 100644 --- a/code/__DEFINES/ai/carp.dm +++ b/code/__DEFINES/ai/carp.dm @@ -7,9 +7,9 @@ /// Current target turf in your migration #define BB_CARP_MIGRATION_TARGET "BB_carp_migration_target" -/// Targetting keys for magicarp spells +/// Targeting keys for magicarp spells #define BB_MAGICARP_SPELL_TARGET "BB_magicarp_spell_target" -#define BB_MAGICARP_SPELL_SPECIAL_TARGETTING "BB_magicarp_spell_special_targetting" +#define BB_MAGICARP_SPELL_SPECIAL_TARGETING "BB_magicarp_spell_special_targeting" #define MAGICARP_SPELL_CORPSES "magicarp_spell_corpses" #define MAGICARP_SPELL_WALLS "magicarp_spell_walls" #define MAGICARP_SPELL_OBJECTS "magicarp_spell_objects" diff --git a/code/__DEFINES/ai/monkey.dm b/code/__DEFINES/ai/monkey.dm index fc4af74d9f0802..0e8c44e40fa831 100644 --- a/code/__DEFINES/ai/monkey.dm +++ b/code/__DEFINES/ai/monkey.dm @@ -15,3 +15,4 @@ #define BB_MONKEY_TARGET_MONKEYS "BB_monkey_target_monkeys" #define BB_MONKEY_DISPOSING "BB_monkey_disposing" #define BB_MONKEY_RECRUIT_COOLDOWN "BB_monkey_recruit_cooldown" +#define BB_RESISTING "BB_resisting" diff --git a/code/__DEFINES/ai/monsters.dm b/code/__DEFINES/ai/monsters.dm index 72d756c0554609..aff00260705cb9 100644 --- a/code/__DEFINES/ai/monsters.dm +++ b/code/__DEFINES/ai/monsters.dm @@ -160,10 +160,8 @@ #define BB_DEMON_CLONE_ABILITY "demon_clone_ability" ///our slippery ice ability #define BB_DEMON_SLIP_ABILITY "demon_slip_ability" -///the turf we are escaping too +///the turf we are escaping to #define BB_ESCAPE_DESTINATION "escape_destination" -///how far away we will be from our target before teleporting -#define BB_MINIMUM_DISTANCE_RANGE "minimum_distance_range" /// Corpse we have consumed #define BB_LEGION_CORPSE "legion_corpse" @@ -191,3 +189,65 @@ #define BB_MOOK_MUSIC_AUDIENCE "music_audience" /// the bonfire we will light up #define BB_MOOK_BONFIRE_TARGET "bonfire_target" + +//gutlunch keys +///the trough we will eat from +#define BB_TROUGH_TARGET "trough_target" +//leaper keys +///key holds our volley ability +#define BB_LEAPER_VOLLEY "leaper_volley" +///key holds our flop ability +#define BB_LEAPER_FLOP "leaper_flop" +///key holds our bubble ability +#define BB_LEAPER_BUBBLE "leaper_bubble" +///key holds our summon ability +#define BB_LEAPER_SUMMON "leaper_summon" +///key holds the world timer for swimming +#define BB_KEY_SWIM_TIME "key_swim_time" +///key holds the water or land target turf +#define BB_SWIM_ALTERNATE_TURF "swim_alternate_turf" +///key holds our state of swimming +#define BB_CURRENTLY_SWIMMING "currently_swimming" +///key holds how long we will be swimming for +#define BB_KEY_SWIMMER_COOLDOWN "key_swimmer_cooldown" +//Wizard AI keys +/// Key where we store our main targeted spell +#define BB_WIZARD_TARGETED_SPELL "BB_wizard_targeted_spell" +/// Key where we store our secondary, untargeted spell +#define BB_WIZARD_SECONDARY_SPELL "BB_wizard_secondary_spell" +/// Key where we store our blink spell +#define BB_WIZARD_BLINK_SPELL "BB_wizard_blink_spell" +/// Key for the next time we can cast a spell +#define BB_WIZARD_SPELL_COOLDOWN "BB_wizard_spell_cooldown" + + +//cat AI keys +/// key that holds the target we will battle over our turf +#define BB_TRESSPASSER_TARGET "tresspasser_target" +/// key that holds angry meows +#define BB_HOSTILE_MEOWS "hostile_meows" +/// key that holds the mouse target +#define BB_MOUSE_TARGET "mouse_target" +/// key that holds our dinner target +#define BB_CAT_FOOD_TARGET "cat_food_target" +/// key that holds the food we must deliver +#define BB_FOOD_TO_DELIVER "food_to_deliver" +/// key that holds things we can hunt +#define BB_HUNTABLE_PREY "huntable_prey" +/// key that holds target kitten to feed +#define BB_KITTEN_TO_FEED "kitten_to_feed" +/// key that holds our hungry meows +#define BB_HUNGRY_MEOW "hungry_meows" +/// key that holds maximum distance food is to us so we can pursue it +#define BB_MAX_DISTANCE_TO_FOOD "max_distance_to_food" +/// key that holds the stove we must turn off +#define BB_STOVE_TARGET "stove_target" +/// key that holds the donut we will decorate +#define BB_DONUT_TARGET "donut_target" +/// key that holds our home... +#define BB_CAT_HOME "cat_home" +/// key that holds the human we will beg +#define BB_HUMAN_BEG_TARGET "human_beg_target" +//netguardians +/// rocket launcher +#define BB_NETGUARDIAN_ROCKET_ABILITY "netguardian_rocket" diff --git a/code/__DEFINES/ai/pet_commands.dm b/code/__DEFINES/ai/pet_commands.dm index 5894aedff14d06..1e692b9f805aaa 100644 --- a/code/__DEFINES/ai/pet_commands.dm +++ b/code/__DEFINES/ai/pet_commands.dm @@ -4,6 +4,6 @@ /// Blackboard field for what we actually want the pet to target #define BB_CURRENT_PET_TARGET "BB_current_pet_target" /// Blackboard field for how we target things, as usually we want to be more permissive than normal -#define BB_PET_TARGETTING_DATUM "BB_pet_targetting" +#define BB_PET_TARGETING_STRATEGY "BB_pet_targeting" /// Typecache of weakrefs to mobs this mob is friends with, will follow their instructions and won't attack them #define BB_FRIENDS_LIST "BB_friends_list" diff --git a/code/__DEFINES/ai/pets.dm b/code/__DEFINES/ai/pets.dm index b3ad67ecc068df..e41c9ac0c3ffed 100644 --- a/code/__DEFINES/ai/pets.dm +++ b/code/__DEFINES/ai/pets.dm @@ -27,3 +27,27 @@ #define BB_FIND_MOM_TYPES "BB_find_mom_types" ///list of types of mobs we must ignore #define BB_IGNORE_MOM_TYPES "BB_ignore_mom_types" + +/// The current string that this parrot will repeat back to someone +#define BB_PARROT_REPEAT_STRING "BB_parrot_repeat_string" +/// The odds that this parrot will repeat back a string +#define BB_PARROT_REPEAT_PROBABILITY "BB_parrot_repeat_probability" +/// The odds that this parrot will choose another string to repeat +#define BB_PARROT_PHRASE_CHANGE_PROBABILITY "BB_parrot_phrase_change_probability" +/// A copy of the string buffer that we end the shift with. DO NOT ACCESS THIS DIRECTLY - YOU SHOULD USE THE COMPONENT IN MOST CASES +#define BB_EXPORTABLE_STRING_BUFFER_LIST "BB_parrot_repeat_string_buffer" +/// The types of perches we desire to use +#define BB_PARROT_PERCH_TYPES "BB_parrot_perch_types" +/// key that holds our perch target +#define BB_PERCH_TARGET "perch_target" +/// key that holds our theft item target +#define BB_HOARD_ITEM_TARGET "hoard_item_target" +/// key that holds the mob we will steal from +#define BB_THEFT_VICTIM "theft_victim" +/// key that holds the turf we will be hauling stolen items to +#define BB_HOARD_LOCATION "hoard_location" +/// key that holds the minimum range we must be from the hoard spot +#define BB_HOARD_LOCATION_RANGE "hoard_location_range" +/// key that holds items we arent interested in hoarding +#define BB_IGNORE_ITEMS "ignore_items" + diff --git a/code/__DEFINES/ai/ventcrawling.dm b/code/__DEFINES/ai/ventcrawling.dm index f981ef3bba5d62..a60b7fd594017f 100644 --- a/code/__DEFINES/ai/ventcrawling.dm +++ b/code/__DEFINES/ai/ventcrawling.dm @@ -3,7 +3,7 @@ /// Key that holds a vent that we want to exit out of (when we're already in a pipenet) #define BB_EXIT_VENT_TARGET "BB_exit_vent_target" /// Do we plan on going inside a vent? Boolean. -#define BB_CURRENTLY_TARGETTING_VENT "BB_currently_targetting_vent" +#define BB_CURRENTLY_TARGETING_VENT "BB_currently_targeting_vent" /// How long should we wait before we try and enter a vent again? #define BB_VENTCRAWL_COOLDOWN "BB_ventcrawl_cooldown" /// The least amount of time (in seconds) we take to go through the vents. diff --git a/code/__DEFINES/alerts.dm b/code/__DEFINES/alerts.dm index 6f25e61e7c5580..1933b592d55c59 100644 --- a/code/__DEFINES/alerts.dm +++ b/code/__DEFINES/alerts.dm @@ -24,6 +24,7 @@ #define ALERT_EMBEDDED_OBJECT "embeddedobject" #define ALERT_SHOES_KNOT "shoealert" #define ALERT_RADIOACTIVE_AREA "radioactive_area" +#define ALERT_UNPOSSESS_OBJECT "unpossess_object" //antag related #define ALERT_HYPNOSIS "hypnosis" @@ -68,5 +69,6 @@ #define ALERT_BITRUNNER_INTEGRITY "bitrunning_integrity" #define ALERT_BITRUNNER_SHUTDOWN "bitrunning_shutdown" #define ALERT_BITRUNNER_RESET "bitrunning_reset" -#define ALERT_BITRUNNER_SPAWN_CYBERCOP "bitrunning_spawn_cybercop" #define ALERT_BITRUNNER_THREAT "bitrunning_threat" +#define ALERT_BITRUNNER_BREACH "bitrunning_breach" +#define ALERT_BITRUNNER_GLITCH "bitrunning_glitch" diff --git a/code/__DEFINES/announcements.dm b/code/__DEFINES/announcements.dm index 3a2edf6d6f77b0..3d46fda8a4e166 100644 --- a/code/__DEFINES/announcements.dm +++ b/code/__DEFINES/announcements.dm @@ -3,5 +3,5 @@ #define ANNOUNCEMENT_TYPE_PRIORITY "Priority" /// Make it sound like it's coming from the Captain #define ANNOUNCEMENT_TYPE_CAPTAIN "Captain" -/// Make it sound like it's coming from the Syndicate -#define ANNOUNCEMENT_TYPE_SYNDICATE "Syndicate" +/// Make it sound like it's coming from the Symphionia +#define ANNOUNCEMENT_TYPE_SYNDICATE "Symphionia" diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index 8ac421f8b0a897..f16b93979f0dc7 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -10,6 +10,9 @@ #define NUKE_RESULT_HIJACK_DISK 9 #define NUKE_RESULT_HIJACK_NO_DISK 10 +/// Min players requireed for nukes to declare war +#define CHALLENGE_MIN_PLAYERS 50 + //fugitive end results #define FUGITIVE_RESULT_BADASS_HUNTER 0 #define FUGITIVE_RESULT_POSTMORTEM_HUNTER 1 @@ -55,7 +58,7 @@ /// Prevents elimination hijack same way as non-antags #define ELIMINATION_PREVENT 2 -//Syndicate Contracts +//Symphionia Contracts #define CONTRACT_STATUS_INACTIVE 1 #define CONTRACT_STATUS_ACTIVE 2 #define CONTRACT_STATUS_BOUNTY_CONSOLE_ACTIVE 3 @@ -80,7 +83,8 @@ #define PATH_VOID "Void Path" #define PATH_BLADE "Blade Path" #define PATH_COSMIC "Cosmic Path" -#define PATH_KNOCK "Knock Path" +#define PATH_LOCK "Lock Path" +#define PATH_MOON "Moon Path" /// Defines are used in /proc/has_living_heart() to report if the heretic has no heart period, no living heart, or has a living heart. #define HERETIC_NO_HEART_ORGAN -1 @@ -157,7 +161,7 @@ GLOBAL_LIST_INIT(syndicate_employers, list( ///employers that are from nanotrasen GLOBAL_LIST_INIT(nanotrasen_employers, list( "Champions of Evil", - "Corporate Climber", + "Conglomeration Climber", "Gone Postal", "Internal Affairs Agent", "Legal Trouble", @@ -175,7 +179,7 @@ GLOBAL_LIST_INIT(hijack_employers, list( ///employers who hire agents to do a task and escape... or martyrdom. whatever GLOBAL_LIST_INIT(normal_employers, list( "Champions of Evil", - "Corporate Climber", + "Conglomeration Climber", "Cybersun Industries", "Donk Corporation", "Gorlex Marauders", @@ -219,8 +223,10 @@ GLOBAL_LIST_INIT(ai_employers, list( #define IS_HERETIC(mob) (mob.mind?.has_antag_datum(/datum/antagonist/heretic)) /// Check if the given mob is a heretic monster. #define IS_HERETIC_MONSTER(mob) (mob.mind?.has_antag_datum(/datum/antagonist/heretic_monster)) -/// Checks if the given mob is either a heretic or a heretic monster. -#define IS_HERETIC_OR_MONSTER(mob) (IS_HERETIC(mob) || IS_HERETIC_MONSTER(mob)) +/// Check if the given mob is a lunatic +#define IS_LUNATIC(mob) (mob.mind?.has_antag_datum(/datum/antagonist/lunatic)) +/// Checks if the given mob is either a heretic, heretic monster or a lunatic. +#define IS_HERETIC_OR_MONSTER(mob) (IS_HERETIC(mob) || IS_HERETIC_MONSTER(mob) || IS_LUNATIC(mob)) /// Checks if the given mob is a wizard #define IS_WIZARD(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/wizard)) @@ -317,19 +323,20 @@ GLOBAL_LIST_INIT(human_invader_antagonists, list( #define ANTAG_GROUP_ASHWALKERS "Ash Walkers" #define ANTAG_GROUP_BIOHAZARDS "Biohazards" #define ANTAG_GROUP_CLOWNOPS "Clown Operatives" -#define ANTAG_GROUP_CYBERAUTH "Cyber Authority" #define ANTAG_GROUP_ERT "Emergency Response Team" +#define ANTAG_GROUP_GLITCH "Digital Anomalies" #define ANTAG_GROUP_HORRORS "Eldritch Horrors" #define ANTAG_GROUP_LEVIATHANS "Spaceborne Leviathans" #define ANTAG_GROUP_NINJAS "Ninja Clan" #define ANTAG_GROUP_OVERGROWTH "Invasive Overgrowth" #define ANTAG_GROUP_PIRATES "Pirate Crew" -#define ANTAG_GROUP_SYNDICATE "Syndicate" +#define ANTAG_GROUP_SYNDICATE "Symphionia" #define ANTAG_GROUP_WIZARDS "Wizard Federation" #define ANTAG_GROUP_XENOS "Xenomorph Infestation" #define ANTAG_GROUP_FUGITIVES "Escaped Fugitives" #define ANTAG_GROUP_HUNTERS "Bounty Hunters" #define ANTAG_GROUP_PARADOX "Spacetime Aberrations" +#define ANTAG_GROUP_CREW "Deviant Crew" // This flag disables certain checks that presume antagonist datums mean 'baddie'. diff --git a/code/__DEFINES/apc_defines.dm b/code/__DEFINES/apc_defines.dm index 4768c63733257c..4cc5e31cb10d19 100644 --- a/code/__DEFINES/apc_defines.dm +++ b/code/__DEFINES/apc_defines.dm @@ -80,10 +80,8 @@ #define UPSTATE_BROKE (1<<3) /// The APC is undergoing maintenance. #define UPSTATE_MAINT (1<<4) -/// The APC is emagged or malfed. -#define UPSTATE_BLUESCREEN (1<<5) /// The APCs wires are exposed. -#define UPSTATE_WIREEXP (1<<6) +#define UPSTATE_WIREEXP (1<<5) // update_overlay // Bitflags: diff --git a/code/__DEFINES/atmospherics/atmos_machinery.dm b/code/__DEFINES/atmospherics/atmos_machinery.dm index cd770ba317d3c9..eb0f853ee944c8 100644 --- a/code/__DEFINES/atmospherics/atmos_machinery.dm +++ b/code/__DEFINES/atmospherics/atmos_machinery.dm @@ -77,3 +77,8 @@ ///What direction is the machine pumping (into pump/port or out to the tank/area)? #define PUMP_IN TRUE #define PUMP_OUT FALSE + +///Max allowed pressure for canisters to release air per tick +#define CAN_MAX_RELEASE_PRESSURE (ONE_ATMOSPHERE * 25) +///Min allowed pressure for canisters to release air per tick +#define CAN_MIN_RELEASE_PRESSURE (ONE_ATMOSPHERE * 0.1) diff --git a/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm b/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm index dd794cbf0539f5..21dafde33b0585 100644 --- a/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm +++ b/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm @@ -7,6 +7,8 @@ #define OPENTURF_DEFAULT_ATMOS GAS_O2 + "=22;" + GAS_N2 + "=82;TEMP=293.15" /// the default low-pressure air mix used mostly for mining areas. #define OPENTURF_LOW_PRESSURE GAS_O2 + "=14;" + GAS_N2 + "=30;TEMP=293.15" +/// breathable air that causes disease +#define OPENTURF_DIRTY_ATMOS GAS_MIASMA + "=15;" + GAS_O2 + "=88;TEMP=293.15" /// -193,15°C telecommunications. also used for xenobiology slime killrooms #define TCOMMS_ATMOS GAS_N2 + "=100;TEMP=80" /// space @@ -78,7 +80,7 @@ #define TEST_ROOM_ATMOS_MAINVENT_1 "atmos_test_room_mainvent_1" #define TEST_ROOM_ATMOS_MAINVENT_2 "atmos_test_room_mainvent_2" -//Syndicate lavaland base incinerator (lavaland_surface_syndicate_base1.dmm) +//Symphionia lavaland base incinerator (lavaland_surface_syndicate_base1.dmm) #define INCINERATOR_SYNDICATELAVA_IGNITER "syndicatelava_igniter" #define INCINERATOR_SYNDICATELAVA_MAINVENT "syndicatelava_mainvent" #define INCINERATOR_SYNDICATELAVA_AUXVENT "syndicatelava_auxvent" diff --git a/code/__DEFINES/atmospherics/atmos_mob_interaction.dm b/code/__DEFINES/atmospherics/atmos_mob_interaction.dm index 260a80190e71dc..dbd8bbc5610b06 100644 --- a/code/__DEFINES/atmospherics/atmos_mob_interaction.dm +++ b/code/__DEFINES/atmospherics/atmos_mob_interaction.dm @@ -96,6 +96,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/atom_hud.dm b/code/__DEFINES/atom_hud.dm index af7454617d67df..eeac64d4bca68c 100644 --- a/code/__DEFINES/atom_hud.dm +++ b/code/__DEFINES/atom_hud.dm @@ -14,9 +14,9 @@ /// loyality implant #define IMPLOYAL_HUD "5" /// chemical implant -#define IMPCHEM_HUD "6" +#define IMPSEC_FIRST_HUD "6" /// tracking implant -#define IMPTRACK_HUD "7" +#define IMPSEC_SECOND_HUD "7" /// Silicon/Mech/Circuit Status #define DIAG_STAT_HUD "8" /// Silicon health bar @@ -45,8 +45,10 @@ #define FAN_HUD "21" /// Mech camera HUD #define DIAG_CAMERA_HUD "22" +/// Steady Hacked APC effect, visible only to Malf AIs +#define MALF_APC_HUD "23" -// SKYRAT EDIT ADDITION BEGIN - gun permits and DNR +// NOVA EDIT ADDITION BEGIN - gun permits and DNR /// ammo of guns #define AMMO_HUD "25" /// if they have a gun permit @@ -54,7 +56,7 @@ /// If they have the DNR trait #define DNR_HUD "27" -// SKYRAT EDIT ADDITION END +// NOVA EDIT ADDITION END //by default everything in the hud_list of an atom is an image //a value in hud_list with one of these will change that behavior @@ -72,18 +74,13 @@ #define DATA_HUD_SENTIENT_DISEASE 8 #define DATA_HUD_AI_DETECT 9 #define DATA_HUD_FAN 10 -#define DATA_HUD_PERMIT 11 //SKYRAT EDIT -#define DATA_HUD_DNR 12 // SKYRAT EDIT - -// Notification action types -#define NOTIFY_JUMP "jump" -#define NOTIFY_PLAY "play" -#define NOTIFY_ORBIT "orbit" +#define DATA_HUD_MALF_APC 11 +#define DATA_HUD_PERMIT 12 //NOVA EDIT +#define DATA_HUD_DNR 13 // NOVA EDIT /// cooldown for being shown the images for any particular data hud #define ADD_HUD_TO_COOLDOWN 20 - // Security HUD icon_state defines #define SECHUD_NO_ID "hudno_id" diff --git a/code/__DEFINES/basic_mobs.dm b/code/__DEFINES/basic_mobs.dm index 6c8a3022e8fa77..c7275f7c423e70 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/bitrunning.dm b/code/__DEFINES/bitrunning.dm index 343801c477e971..bdb02b4d79220c 100644 --- a/code/__DEFINES/bitrunning.dm +++ b/code/__DEFINES/bitrunning.dm @@ -4,17 +4,22 @@ #define BITRUNNER_COST_HIGH 3 #define BITRUNNER_COST_EXTREME 20 +/// Yay you did it #define BITRUNNER_REWARD_MIN 1 +/// You faced some decent odds #define BITRUNNER_REWARD_LOW 3 +/// One of your teammates might've died #define BITRUNNER_REWARD_MEDIUM 4 +/// Heroic effort #define BITRUNNER_REWARD_HIGH 5 +/// For the priciest domains, free loot basically #define BITRUNNER_REWARD_EXTREME 6 -/// Blue in ui +/// Blue in ui. Basically the only threat is rogue ghosts roles #define BITRUNNER_DIFFICULTY_NONE 0 -/// Yellow +/// Yellow. Mobs are kinda dumb and largely avoidable #define BITRUNNER_DIFFICULTY_LOW 1 -/// Orange +/// Orange. Mobs will shoot at you or are pretty aggressive #define BITRUNNER_DIFFICULTY_MEDIUM 2 -/// Red with skull +/// Red with skull. I am trying to kill bitrunners. #define BITRUNNER_DIFFICULTY_HIGH 3 diff --git a/code/__DEFINES/blob_defines.dm b/code/__DEFINES/blob_defines.dm index 966e02af3fc7a9..781aed2cab3a52 100644 --- a/code/__DEFINES/blob_defines.dm +++ b/code/__DEFINES/blob_defines.dm @@ -14,7 +14,7 @@ // Generic blob defines //#define BLOB_BASE_POINT_RATE 2 // Base amount of points per process() -#define BLOB_BASE_POINT_RATE 2.5 // SKYRAT EDIT CHANGE +#define BLOB_BASE_POINT_RATE 2.5 // NOVA EDIT CHANGE #define BLOB_EXPAND_COST 4 // Price to expand onto a new tile #define BLOB_ATTACK_REFUND 2 // Points 'refunded' when the expand attempt actually attacks something instead #define BLOB_BRUTE_RESIST 0.5 // Brute damage taken gets multiplied by this value diff --git a/code/__DEFINES/bodyparts.dm b/code/__DEFINES/bodyparts.dm index 87995d46abb87c..de721dcf861864 100644 --- a/code/__DEFINES/bodyparts.dm +++ b/code/__DEFINES/bodyparts.dm @@ -1,8 +1,28 @@ ///The standard amount of bodyparts a carbon has. Currently 6, HEAD/L_ARM/R_ARM/CHEST/L_LEG/R_LEG #define BODYPARTS_DEFAULT_MAXIMUM 6 -/// The max HP of surplus prosthetics. -#define PROSTHESIS_MAX_HP 20 +/// Limb Health + +/// The max damage a limb can take before it stops taking damage. +/// Used by the max_damage var. +#define LIMB_MAX_HP_PROSTHESIS 20 //Used by surplus prosthesis limbs. +#define LIMB_MAX_HP_DEFAULT 60 //Used by most all limbs by default. // NOVA EDIT CHANGE - ORIGINAL : #define LIMB_MAX_HP_DEFAULT 50 +#define LIMB_MAX_HP_ADVANCED 75 //Used by advanced robotic limbs. +#define LIMB_MAX_HP_CORE 250 //Only use this for heads and torsos. // NOVA EDIT CHANGE - ORIGINAL : #define LIMB_MAX_HP_CORE 200 + +/// Xenomorph Limbs +#define LIMB_MAX_HP_ALIEN_LARVA 50 //Used by the weird larva chest and head. Did you know they have those? +#define LIMB_MAX_HP_ALIEN_LIMBS 100 //Used by xenomorph limbs. +#define LIMB_MAX_HP_ALIEN_CORE 500 //Used by xenomorph chests and heads + +/// Limb Body Damage Coefficient +/// A mutiplication of the burn and brute damage that the limb's stored damage contributes to its attached mob's overall wellbeing. +/// For instance, if a limb has 50 damage, and has a coefficient of 50%, the human is considered to have suffered 25 damage to their total health. + +#define LIMB_BODY_DAMAGE_COEFFICIENT_ADVANCED 0.5 //Used by advanced robotic limbs. +#define LIMB_BODY_DAMAGE_COEFFICIENT_DEFAULT 0.75 //Used by all limbs by default. +#define LIMB_BODY_DAMAGE_COEFFICIENT_TOTAL 1 //Used by heads and torsos +#define LIMB_BODY_DAMAGE_COEFFICIENT_PROSTHESIS 2.5 //Used by surplus prosthesis limbs // EMP // Note most of these values are doubled on heavy EMP @@ -12,14 +32,14 @@ /// The brute damage an augged limb takes from an EMP. #define AUGGED_LIMB_EMP_BURN_DAMAGE 1.5 -/// When hit by an EMP, the time an augged limb will be paralyzed for if its above the damage threshold. +/// When hit by an EMP, the time an augged limb will be paralyzed for if its above the damage threshold. #define AUGGED_LIMB_EMP_PARALYZE_TIME 3 SECONDS -/// When hit by an EMP, the time an augged leg will be knocked down for. +/// When hit by an EMP, the time an augged leg will be knocked down for. #define AUGGED_LEG_EMP_KNOCKDOWN_TIME 3 SECONDS -/// When hit by an EMP, the time a augged chest will cause a hardstun for if its above the damage threshold. +/// When hit by an EMP, the time a augged chest will cause a hardstun for if its above the damage threshold. #define AUGGED_CHEST_EMP_STUN_TIME 3 SECONDS -/// When hit by an EMP, the time an augged chest will cause the mob to shake() for. +/// When hit by an EMP, the time an augged chest will cause the mob to shake() for. #define AUGGED_CHEST_EMP_SHAKE_TIME 5 SECONDS -/// When hit by an EMP, the time an augged head will make vision fucky for. +/// When hit by an EMP, the time an augged head will make vision fucky for. #define AUGGED_HEAD_EMP_GLITCH_DURATION 6 SECONDS diff --git a/code/__DEFINES/botany.dm b/code/__DEFINES/botany.dm index c2ec221b5e26e4..9607819c880728 100644 --- a/code/__DEFINES/botany.dm +++ b/code/__DEFINES/botany.dm @@ -84,3 +84,6 @@ /// A list of possible egg laying descriptions #define EGG_LAYING_MESSAGES list("lays an egg.","squats down and croons.","begins making a huge racket.","begins clucking raucously.") + +/// Used as a baseline plant rarity for more uncommon plants, usually requiring mutation +#define PLANT_MODERATELY_RARE 20 diff --git a/code/__DEFINES/cargo.dm b/code/__DEFINES/cargo.dm index 56d3896f0dc05f..63d5682ef0f377 100644 --- a/code/__DEFINES/cargo.dm +++ b/code/__DEFINES/cargo.dm @@ -53,21 +53,14 @@ /// Universal Scanner mode for using the price tagger. #define SCAN_PRICE_TAG 3 -GLOBAL_LIST_EMPTY(supplypod_loading_bays) +///Used by coupons to define that they're cursed +#define COUPON_OMEN "omen" -GLOBAL_LIST_INIT(podstyles, list(\ - list(POD_SHAPE_NORML, "pod", TRUE, "default", "yellow", RUBBLE_NORMAL, "supply pod", "A Nanotrasen supply drop pod."),\ - list(POD_SHAPE_NORML, "advpod", TRUE, "bluespace", "blue", RUBBLE_NORMAL, "bluespace supply pod" , "A Nanotrasen Bluespace supply pod. Teleports back to CentCom after delivery."),\ - list(POD_SHAPE_NORML, "advpod", TRUE, "centcom", "blue", RUBBLE_NORMAL, "\improper CentCom supply pod", "A Nanotrasen supply pod, this one has been marked with Central Command's designations. Teleports back to CentCom after delivery."),\ - list(POD_SHAPE_NORML, "darkpod", TRUE, "syndicate", "red", RUBBLE_NORMAL, "blood-red supply pod", "An intimidating supply pod, covered in the blood-red markings of the Syndicate. It's probably best to stand back from this."),\ - list(POD_SHAPE_NORML, "darkpod", TRUE, "deathsquad", "blue", RUBBLE_NORMAL, "\improper Deathsquad drop pod", "A Nanotrasen drop pod. This one has been marked the markings of Nanotrasen's elite strike team."),\ - list(POD_SHAPE_NORML, "pod", TRUE, "cultist", "red", RUBBLE_NORMAL, "bloody supply pod", "A Nanotrasen supply pod covered in scratch-marks, blood, and strange runes."),\ - list(POD_SHAPE_OTHER, "missile", FALSE, FALSE, FALSE, RUBBLE_THIN, "cruise missile", "A big ass missile that didn't seem to fully detonate. It was likely launched from some far-off deep space missile silo. There appears to be an auxillery payload hatch on the side, though manually opening it is likely impossible."),\ - list(POD_SHAPE_OTHER, "smissile", FALSE, FALSE, FALSE, RUBBLE_THIN, "\improper Syndicate cruise missile", "A big ass, blood-red missile that didn't seem to fully detonate. It was likely launched from some deep space Syndicate missile silo. There appears to be an auxillery payload hatch on the side, though manually opening it is likely impossible."),\ - list(POD_SHAPE_OTHER, "box", TRUE, FALSE, FALSE, RUBBLE_WIDE, "\improper Aussec supply crate", "An incredibly sturdy supply crate, designed to withstand orbital re-entry. Has 'Aussec Armory - 2532' engraved on the side."),\ - list(POD_SHAPE_NORML, "clownpod", TRUE, "clown", "green", RUBBLE_NORMAL, "\improper HONK pod", "A brightly-colored supply pod. It likely originated from the Clown Federation."),\ - list(POD_SHAPE_OTHER, "orange", TRUE, FALSE, FALSE, RUBBLE_NONE, "\improper Orange", "An angry orange."),\ - list(POD_SHAPE_OTHER, FALSE, FALSE, FALSE, FALSE, RUBBLE_NONE, "\improper S.T.E.A.L.T.H. pod MKVII", "A supply pod that, under normal circumstances, is completely invisible to conventional methods of detection. How are you even seeing this?"),\ - list(POD_SHAPE_OTHER, "gondola", FALSE, FALSE, FALSE, RUBBLE_NONE, "gondola", "The silent walker. This one seems to be part of a delivery agency."),\ - list(POD_SHAPE_OTHER, FALSE, FALSE, FALSE, FALSE, RUBBLE_NONE, FALSE, FALSE, "rl_click", "give_po")\ -)) +///Discount categories for coupons. This one is for anything that isn't discountable. +#define SUPPLY_PACK_NOT_DISCOUNTABLE null +///Discount category for the standard stuff, mostly goodies. +#define SUPPLY_PACK_STD_DISCOUNTABLE "standard_discount" +///Discount category for stuff that's mostly niche and/or that might be useful. +#define SUPPLY_PACK_UNCOMMON_DISCOUNTABLE "uncommon_discount" +///Discount category for the silly, overpriced, joke content, sometimes useful or plain bad. +#define SUPPLY_PACK_RARE_DISCOUNTABLE "rare_discount" diff --git a/code/__DEFINES/chat.dm b/code/__DEFINES/chat.dm index 4ba4b8b26c58ed..4590a5081f0d11 100644 --- a/code/__DEFINES/chat.dm +++ b/code/__DEFINES/chat.dm @@ -3,6 +3,11 @@ * SPDX-License-Identifier: MIT */ +/// How many chat payloads to keep in history +#define CHAT_RELIABILITY_HISTORY_SIZE 5 +/// How many resends to allow before giving up +#define CHAT_RELIABILITY_MAX_RESENDS 3 + #define MESSAGE_TYPE_SYSTEM "system" #define MESSAGE_TYPE_LOCALCHAT "localchat" #define MESSAGE_TYPE_RADIO "radio" diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm index b23df993432799..6a71a8d6c3c071 100644 --- a/code/__DEFINES/colors.dm +++ b/code/__DEFINES/colors.dm @@ -33,6 +33,13 @@ #define COLOR_HALF_TRANSPARENT_BLACK "#0000007A" #define COLOR_RED "#FF0000" +#define COLOR_CHRISTMAS_RED "#D6001C" +#define COLOR_OLD_GLORY_RED "#B22234" +#define COLOR_FRENCH_RED "#EF4135" +#define COLOR_ETHIOPIA_RED "#DA121A" +#define COLOR_UNION_JACK_RED "#C8102E" +#define COLOR_MEDIUM_DARK_RED "#CC0000" +#define COLOR_PINK_RED "EF3340" #define COLOR_SYNDIE_RED "#F10303" #define COLOR_SYNDIE_RED_HEAD "#760500" #define COLOR_MOSTLY_PURE_RED "#FF3300" @@ -50,7 +57,10 @@ #define COLOR_YELLOW "#FFFF00" #define COLOR_VIVID_YELLOW "#FBFF23" +#define COLOR_TANGERINE_YELLOW "#FFCC00" #define COLOR_VERY_SOFT_YELLOW "#FAE48E" +#define COLOR_GOLD "#FFD700" +#define COLOR_ETHIOPIA_YELLOW "#FCDD09" #define COLOR_OLIVE "#808000" #define COLOR_ASSISTANT_OLIVE "#828163" @@ -63,6 +73,9 @@ #define COLOR_VERY_PALE_LIME_GREEN "#DDFFD3" #define COLOR_VERY_DARK_LIME_GREEN "#003300" #define COLOR_GREEN "#008000" +#define COLOR_CHRISTMAS_GREEN "#00873E" +#define COLOR_IRISH_GREEN "#169B62" +#define COLOR_ETHIOPIA_GREEN "#078930" #define COLOR_DARK_MODERATE_LIME_GREEN "#44964A" #define COLOR_PAI_GREEN "#00FF88" #define COLOR_PALE_GREEN "#20e28e" @@ -72,6 +85,10 @@ #define COLOR_DARK_CYAN "#00A2FF" #define COLOR_TEAL "#008080" #define COLOR_BLUE "#0000FF" +#define COLOR_OLD_GLORY_BLUE "#3C3B6E" +#define COLOR_FRENCH_BLUE "#0055A4" +#define COLOR_UNION_JACK_BLUE "#012169" +#define COLOR_TRUE_BLUE "#0066CC" #define COLOR_STRONG_BLUE "#1919c8" #define COLOR_CENTCOM_BLUE "#134975" #define COLOR_BRIGHT_BLUE "#2CB2E8" @@ -101,6 +118,7 @@ #define COLOR_DARK_PURPLE "#551A8B" #define COLOR_ORANGE "#FF9900" +#define COLOR_IRISH_ORANGE "#FF883E" #define COLOR_ENGINEERING_ORANGE "#FFA62B" #define COLOR_MOSTLY_PURE_ORANGE "#ff8000" #define COLOR_TAN_ORANGE "#FF7B00" @@ -265,6 +283,8 @@ #define LIGHT_COLOR_TUNGSTEN "#FFD6AA" /// Barely visible cyan-ish hue, as the doctor prescribed. rgb(240, 250, 250) #define LIGHT_COLOR_HALOGEN "#F0FAFA" +/// Nearly red. rgb(226, 78, 118) +#define LIGHT_COLOR_BUBBLEGUM "#e24e76" //The GAGS greyscale_colors for each department's computer/machine circuits #define CIRCUIT_COLOR_GENERIC "#1A7A13" diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index cc9412208fb854..c12c9b57713441 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -11,8 +11,6 @@ #define TOX "toxin" /// Suffocation. #define OXY "oxygen" -/// Cellular degredation. Rare and difficult to treat. -#define CLONE "clone" /// Exhaustion and nonlethal damage. #define STAMINA "stamina" /// Brain damage. Should probably be decomissioned and replaced with proper organ damage. @@ -56,12 +54,11 @@ #define BRUTELOSS (1<<0) #define FIRELOSS (1<<1) #define TOXLOSS (1<<2) -#define CLONELOSS (1<<3) -#define OXYLOSS (1<<4) -#define STAMINALOSS (1<<5) -#define SHAME (1<<6) -#define MANUAL_SUICIDE (1<<7) //suicide_act will do the actual killing. -#define MANUAL_SUICIDE_NONLETHAL (1<<8) //when the suicide is conditionally lethal +#define OXYLOSS (1<<3) +#define STAMINALOSS (1<<4) +#define SHAME (1<<5) +#define MANUAL_SUICIDE (1<<6) //suicide_act will do the actual killing. +#define MANUAL_SUICIDE_NONLETHAL (1<<7) //when the suicide is conditionally lethal #define EFFECT_STUN "stun" #define EFFECT_KNOCKDOWN "knockdown" @@ -132,13 +129,22 @@ DEFINE_BITFIELD(status_flags, list( //slowdown when crawling #define CRAWLING_ADD_SLOWDOWN 4 -//Attack types for checking shields/hit reactions +//Attack types for checking block reactions +/// Attack was made with a melee weapon #define MELEE_ATTACK 1 +/// Attack is a punch or kick. +/// Mob attacks are not classified as unarmed (currently). #define UNARMED_ATTACK 2 +/// A projectile is hitting us. #define PROJECTILE_ATTACK 3 +/// A thrown item is hitting us. #define THROWN_PROJECTILE_ATTACK 4 +/// We're being tackled or leaped at. #define LEAP_ATTACK 5 +/// Used in check block to get what mob is attacking the blocker. +#define GET_ASSAILANT(weapon) (get(weapon, /mob/living)) + //attack visual effects #define ATTACK_EFFECT_PUNCH "punch" #define ATTACK_EFFECT_KICK "kick" @@ -162,13 +168,16 @@ DEFINE_BITFIELD(status_flags, list( #define SHOVE_KNOCKDOWN_TABLE 20 #define SHOVE_KNOCKDOWN_COLLATERAL 1 #define SHOVE_CHAIN_PARALYZE 30 -//Shove slowdown -#define SHOVE_SLOWDOWN_LENGTH 30 -#define SHOVE_SLOWDOWN_STRENGTH 0.85 //multiplier +//Staggered slowdown, an effect caused by shoving and a few other features, such as tackling +#define STAGGERED_SLOWDOWN_LENGTH 30 +#define STAGGERED_SLOWDOWN_STRENGTH 0.85 //multiplier //Shove disarming item list GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list( /obj/item/gun))) +//The define for base unarmed miss chance +#define UNARMED_MISS_CHANCE_BASE 20 +#define UNARMED_MISS_CHANCE_MAX 80 //Combat object defines diff --git a/code/__DEFINES/communications.dm b/code/__DEFINES/communications.dm index 813179974f9c52..20a9ad4a8c6385 100644 --- a/code/__DEFINES/communications.dm +++ b/code/__DEFINES/communications.dm @@ -4,7 +4,7 @@ /// The extended time an admin has to cancel a cross-sector message if they pass the filter, for instance #define EXTENDED_CROSS_SECTOR_CANCEL_TIME (30 SECONDS) -// SKYRAT EDIT REMOVAL BEGIN - modularized into code/__DEFINES/~skyrat_defines/security_alerts.dm +// NOVA EDIT REMOVAL BEGIN - modularized into code/__DEFINES/~nova_defines/security_alerts.dm /* //Security levels affect the escape shuttle timer /// Security level is green. (no threats) @@ -16,4 +16,4 @@ /// Security level is delta. (station destruction immiment) #define SEC_LEVEL_DELTA 3 */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END diff --git a/code/__DEFINES/construction/material.dm b/code/__DEFINES/construction/material.dm index dad575c58c3913..294fe6364cd5ea 100644 --- a/code/__DEFINES/construction/material.dm +++ b/code/__DEFINES/construction/material.dm @@ -40,26 +40,6 @@ ///If the user won't receive a warning when attacking the container with an unallowed item. #define MATCONTAINER_SILENT (1<<3) -// The following flags are for decomposing alloys. Should be expanded upon and diversified once someone gets around to reworking recycling. -/// Can reduce an alloy into its component materials. -#define BREAKDOWN_ALLOYS (1<<4) -/// Makes the material composition include transmuted materials objects -#define BREAKDOWN_INCLUDE_ALCHEMY (1<<5) -/// Breakdown flags used by techfabs and circuit printers. -#define BREAKDOWN_FLAGS_LATHE (BREAKDOWN_ALLOYS) -/// Breakdown flags used by the ORM. -#define BREAKDOWN_FLAGS_ORM (BREAKDOWN_ALLOYS) -/// Breakdown flags used by the recycler. -#define BREAKDOWN_FLAGS_RECYCLER (BREAKDOWN_ALLOYS) -/// Breakdown flags used by the sheetifier. -#define BREAKDOWN_FLAGS_SHEETIFIER (BREAKDOWN_ALLOYS) -/// Breakdown flags used by the ore processor. -#define BREAKDOWN_FLAGS_ORE_PROCESSOR (BREAKDOWN_ALLOYS) -/// Breakdown flags used by the drone dispenser. -#define BREAKDOWN_FLAGS_DRONE_DISPENSER (BREAKDOWN_ALLOYS) -/// Breakdown flags used when exporting materials. -#define BREAKDOWN_FLAGS_EXPORT (NONE) - /// Whether a material's mechanical effects should apply to the atom. This is necessary for other flags to work. #define MATERIAL_EFFECTS (1<<0) /// Applies the material color to the atom's color. Deprecated, use MATERIAL_GREYSCALE instead diff --git a/code/__DEFINES/cooldowns.dm b/code/__DEFINES/cooldowns.dm index 63c1f2fd7136e8..3335ac50fc4a9c 100644 --- a/code/__DEFINES/cooldowns.dm +++ b/code/__DEFINES/cooldowns.dm @@ -74,14 +74,18 @@ #define TIMER_COOLDOWN_START(cd_source, cd_index, cd_time) LAZYSET(cd_source.cooldowns, cd_index, addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(end_cooldown), cd_source, cd_index), cd_time)) -#define TIMER_COOLDOWN_CHECK(cd_source, cd_index) LAZYACCESS(cd_source.cooldowns, cd_index) +/// Checks if a timer based cooldown is NOT finished. +#define TIMER_COOLDOWN_RUNNING(cd_source, cd_index) LAZYACCESS(cd_source.cooldowns, cd_index) + +/// Checks if a timer based cooldown is finished. +#define TIMER_COOLDOWN_FINISHED(cd_source, cd_index) (!TIMER_COOLDOWN_RUNNING(cd_source, cd_index)) #define TIMER_COOLDOWN_END(cd_source, cd_index) LAZYREMOVE(cd_source.cooldowns, cd_index) /* * Stoppable timer cooldowns. * Use indexes the same as the regular tiemr cooldowns. - * They make use of the TIMER_COOLDOWN_CHECK() and TIMER_COOLDOWN_END() macros the same, just not the TIMER_COOLDOWN_START() one. + * They make use of the TIMER_COOLDOWN_RUNNING() and TIMER_COOLDOWN_END() macros the same, just not the TIMER_COOLDOWN_START() one. * A bit more expensive than the regular timers, but can be reset before they end and the time left can be checked. */ @@ -89,7 +93,7 @@ #define S_TIMER_COOLDOWN_RESET(cd_source, cd_index) reset_cooldown(cd_source, cd_index) -#define S_TIMER_COOLDOWN_TIMELEFT(cd_source, cd_index) (timeleft(TIMER_COOLDOWN_CHECK(cd_source, cd_index))) +#define S_TIMER_COOLDOWN_TIMELEFT(cd_source, cd_index) (timeleft(TIMER_COOLDOWN_RUNNING(cd_source, cd_index))) /* diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movable.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movable.dm index d26dd4e8c86821..601f441c66dd45 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movable.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movable.dm @@ -23,9 +23,11 @@ #define COMSIG_MOVABLE_DRIFT_BLOCK_INPUT "movable_drift_block_input" #define DRIFT_ALLOW_INPUT (1<<0) ///from base of atom/movable/throw_impact(): (/atom/hit_atom, /datum/thrownthing/throwingdatum) -#define COMSIG_MOVABLE_IMPACT "movable_impact" +#define COMSIG_MOVABLE_PRE_IMPACT "movable_pre_impact" #define COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH (1<<0) //if true, flip if the impact will push what it hits #define COMPONENT_MOVABLE_IMPACT_NEVERMIND (1<<1) //return true if you destroyed whatever it was you're impacting and there won't be anything for hitby() to run on +///from base of atom/movable/throw_impact() after confirming a hit: (/atom/hit_atom, /datum/thrownthing/throwingdatum) +#define COMSIG_MOVABLE_IMPACT "movable_impact" ///from base of mob/living/hitby(): (mob/living/target, hit_zone, blocked, datum/thrownthing/throwingdatum) #define COMSIG_MOVABLE_IMPACT_ZONE "item_impact_zone" ///from /atom/movable/proc/buckle_mob(): (mob/living/M, force, check_loc, buckle_mob_flags) @@ -47,13 +49,17 @@ #define COMSIG_MOVABLE_THROW_LANDED "movable_throw_landed" ///from base of atom/movable/on_changed_z_level(): (turf/old_turf, turf/new_turf, same_z_layer) #define COMSIG_MOVABLE_Z_CHANGED "movable_ztransit" +///called before hearing a message from atom/movable/Hear(): +#define COMSIG_MOVABLE_PRE_HEAR "movable_pre_hear" + ///cancel hearing the message because we're doing something else presumably + #define COMSIG_MOVABLE_CANCEL_HEARING (1<<0) ///from base of atom/movable/Hear(): (proc args list(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, list/message_mods = list(), message_range)) #define COMSIG_MOVABLE_HEAR "movable_hear" - //#define HEARING_MESSAGE 1 - (I'm pretty sure this is never really used and can be gutted) + #define HEARING_MESSAGE 1 #define HEARING_SPEAKER 2 #define HEARING_LANGUAGE 3 #define HEARING_RAW_MESSAGE 4 - //#define HEARING_RADIO_FREQ 5 + #define HEARING_RADIO_FREQ 5 #define HEARING_SPANS 6 #define HEARING_MESSAGE_MODE 7 #define HEARING_RANGE 8 diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movement.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movement.dm index 0c9523b9c20a8b..25eb8b15f381d9 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movement.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movement.dm @@ -47,6 +47,11 @@ #define COMSIG_ATOM_DIR_CHANGE "atom_dir_change" ///from base of atom/setDir(): (old_dir, new_dir). Called after the direction changes. #define COMSIG_ATOM_POST_DIR_CHANGE "atom_dir_change" +///from base of atom/movable/keybind_face_direction(): (dir). Called before turning with the movement lock key. +#define COMSIG_MOVABLE_KEYBIND_FACE_DIR "keybind_face_dir" + ///ignores the movement lock key, used for turning while strafing in a mech + #define COMSIG_IGNORE_MOVEMENT_LOCK (1<<0) + /// from /datum/component/singularity/proc/can_move(), as well as /obj/energy_ball/proc/can_move() /// if a callback returns `SINGULARITY_TRY_MOVE_BLOCK`, then the singularity will not move to that turf #define COMSIG_ATOM_SINGULARITY_TRY_MOVE "atom_singularity_try_move" diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_x_act.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_x_act.dm index d5cc72b764039c..ceba0a2f182b7a 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_x_act.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_x_act.dm @@ -45,10 +45,30 @@ ///from obj/machinery/bsa/full/proc/fire(): () #define COMSIG_ATOM_BSA_BEAM "atom_bsa_beam_pass" #define COMSIG_ATOM_BLOCKS_BSA_BEAM (1<<0) -///for any tool behaviors: (mob/living/user, obj/item/I, list/recipes) + +/// Sent from [atom/proc/item_interaction], when this atom is left-clicked on by a mob with an item +/// Sent from the very beginning of the click chain, intended for generic atom-item interactions +/// Args: (mob/living/user, obj/item/tool, list/modifiers) +/// Return any ITEM_INTERACT_ flags as relevant (see tools.dm) +#define COMSIG_ATOM_ITEM_INTERACTION "atom_item_interaction" +/// Sent from [atom/proc/item_interaction], when this atom is right-clicked on by a mob with an item +/// Sent from the very beginning of the click chain, intended for generic atom-item interactions +/// Args: (mob/living/user, obj/item/tool, list/modifiers) +/// Return any ITEM_INTERACT_ flags as relevant (see tools.dm) +#define COMSIG_ATOM_ITEM_INTERACTION_SECONDARY "atom_item_interaction_secondary" +/// Sent from [atom/proc/item_interaction], to an item clicking on an atom +/// Args: (mob/living/user, atom/interacting_with, list/modifiers) +/// Return any ITEM_INTERACT_ flags as relevant (see tools.dm) +#define COMSIG_ITEM_INTERACTING_WITH_ATOM "item_interacting_with_atom" +/// Sent from [atom/proc/item_interaction], to an item right-clicking on an atom +/// Args: (mob/living/user, atom/interacting_with, list/modifiers) +/// Return any ITEM_INTERACT_ flags as relevant (see tools.dm) +#define COMSIG_ITEM_INTERACTING_WITH_ATOM_SECONDARY "item_interacting_with_atom_secondary" +/// Sent from [atom/proc/item_interaction], when this atom is left-clicked on by a mob with a tool of a specific tool type +/// Args: (mob/living/user, obj/item/tool, list/recipes) +/// Return any ITEM_INTERACT_ flags as relevant (see tools.dm) #define COMSIG_ATOM_TOOL_ACT(tooltype) "tool_act_[tooltype]" - #define COMPONENT_BLOCK_TOOL_ATTACK (1<<0) -///for any rightclick tool behaviors: (mob/living/user, obj/item/I) +/// Sent from [atom/proc/item_interaction], when this atom is right-clicked on by a mob with a tool of a specific tool type +/// Args: (mob/living/user, obj/item/tool) +/// Return any ITEM_INTERACT_ flags as relevant (see tools.dm) #define COMSIG_ATOM_SECONDARY_TOOL_ACT(tooltype) "tool_secondary_act_[tooltype]" - // We have the same returns here as COMSIG_ATOM_TOOL_ACT - // #define COMPONENT_BLOCK_TOOL_ATTACK (1<<0) diff --git a/code/__DEFINES/dcs/signals/signals_bitrunning.dm b/code/__DEFINES/dcs/signals/signals_bitrunning.dm index e2731a05b34e73..74d418182d5976 100644 --- a/code/__DEFINES/dcs/signals/signals_bitrunning.dm +++ b/code/__DEFINES/dcs/signals/signals_bitrunning.dm @@ -1,37 +1,46 @@ -/// 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/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/netpod/open_machine(), /obj/machinery/quantum_server, etc (obj/machinery/netpod) -#define COMSIG_BITRUNNER_SEVER_AVATAR "bitrunner_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/machinery/netpod/open_machine() -#define COMSIG_BITRUNNER_NETPOD_OPENED "bitrunner_netpod_opened" +/// 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" diff --git a/code/__DEFINES/dcs/signals/signals_circuit.dm b/code/__DEFINES/dcs/signals/signals_circuit.dm index 1b7b6b53c4f5a8..c0676d768ce1a0 100644 --- a/code/__DEFINES/dcs/signals/signals_circuit.dm +++ b/code/__DEFINES/dcs/signals/signals_circuit.dm @@ -75,3 +75,9 @@ ///Called when an Ntnet sender is sending Ntnet data #define COMSIG_GLOB_CIRCUIT_NTNET_DATA_SENT "!circuit_ntnet_data_sent" + +/// Called when an equipment action component is added to a shell (/obj/item/circuit_component/equipment_action/action_comp) +#define COMSIG_CIRCUIT_ACTION_COMPONENT_REGISTERED "circuit_action_component_registered" + +/// Called when an equipment action component is removed from a shell (/obj/item/circuit_component/equipment_action/action_comp) +#define COMSIG_CIRCUIT_ACTION_COMPONENT_UNREGISTERED "circuit_action_component_unregistered" diff --git a/code/__DEFINES/dcs/signals/signals_material_container.dm b/code/__DEFINES/dcs/signals/signals_material_container.dm index f33567a2739daa..2c77be55c315d7 100644 --- a/code/__DEFINES/dcs/signals/signals_material_container.dm +++ b/code/__DEFINES/dcs/signals/signals_material_container.dm @@ -2,10 +2,14 @@ /// Called from datum/component/material_container/proc/can_hold_material() : (mat) #define COMSIG_MATCONTAINER_MAT_CHECK "matcontainer_mat_check" #define MATCONTAINER_ALLOW_MAT (1<<0) -/// Called from datum/component/material_container/proc/user_insert() : (held_item, user) +/// Called from datum/component/material_container/proc/user_insert() : (target_item, user) #define COMSIG_MATCONTAINER_PRE_USER_INSERT "matcontainer_pre_user_insert" #define MATCONTAINER_BLOCK_INSERT (1<<1) -/// Called from datum/component/material_container/proc/insert_item() : (target, last_inserted_id, mats_consumed, material_amount, context) +/// Called from datum/component/material_container/proc/insert_item() : (item, primary_mat, mats_consumed, material_amount, context) #define COMSIG_MATCONTAINER_ITEM_CONSUMED "matcontainer_item_consumed" -/// Called from datum/component/material_container/proc/retrieve_sheets() : (sheets, context) +/// Called from datum/component/material_container/proc/retrieve_sheets() : (new_sheets, context) #define COMSIG_MATCONTAINER_SHEETS_RETRIEVED "matcontainer_sheets_retrieved" + +//mat container signals but from the ore silo's perspective +/// Called from /obj/machinery/ore_silo/on_item_consumed() : (container, item_inserted, last_inserted_id, mats_consumed, amount_inserted) +#define COMSIG_SILO_ITEM_CONSUMED "silo_item_consumed" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_ai.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_ai.dm index 85630c8e8f0411..6cca71839a9273 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_ai.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_ai.dm @@ -3,3 +3,6 @@ /// Signal sent when a blackboard key is cleared #define COMSIG_AI_BLACKBOARD_KEY_CLEARED(blackboard_key) "ai_blackboard_key_clear_[blackboard_key]" + +///Signal sent when a bot is reset +#define COMSIG_BOT_RESET "bot_reset" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_basic.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_basic.dm index 18c6c651435baf..a5205a0589b4e1 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_basic.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_basic.dm @@ -3,5 +3,16 @@ /// Sent from /mob/living/basic/proc/look_alive() : () #define COMSIG_BASICMOB_LOOK_ALIVE "basicmob_look_alive" +///from the ranged_attacks component for basic mobs: (mob/living/basic/firer, atom/target, modifiers) +#define COMSIG_BASICMOB_PRE_ATTACK_RANGED "basicmob_pre_attack_ranged" + #define COMPONENT_CANCEL_RANGED_ATTACK COMPONENT_CANCEL_ATTACK_CHAIN //! Cancel to prevent the attack from happening + ///from the ranged_attacks component for basic mobs: (mob/living/basic/firer, atom/target, modifiers) #define COMSIG_BASICMOB_POST_ATTACK_RANGED "basicmob_post_attack_ranged" + +/// Sent from /datum/ai_planning_subtree/parrot_as_in_repeat() : () +#define COMSIG_NEEDS_NEW_PHRASE "parrot_needs_new_phrase" + #define NO_NEW_PHRASE_AVAILABLE (1<<0) //! Cancel to try again later for when we actually get a new phrase + +/// Called whenever an animal is pet via the /datum/element/pet_bonus element: (mob/living/petter, modifiers) +#define COMSIG_ANIMAL_PET "animal_pet" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm index e86ed58269ec9f..fe7673ee3caa8f 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm @@ -57,11 +57,11 @@ /// Called from /obj/item/bodypart/check_for_injuries (obj/item/bodypart/examined, list/check_list) #define COMSIG_CARBON_CHECKING_BODYPART "carbon_checking_injury" -/// Called from carbon losing a limb /obj/item/bodypart/proc/drop_limb(obj/item/bodypart/lost_limb, dismembered) +/// Called from carbon losing a limb /obj/item/bodypart/proc/drop_limb(obj/item/bodypart/lost_limb, special, dismembered) #define COMSIG_CARBON_REMOVE_LIMB "carbon_remove_limb" -/// Called from carbon losing a limb /obj/item/bodypart/proc/drop_limb(obj/item/bodypart/lost_limb, dismembered) +/// Called from carbon losing a limb /obj/item/bodypart/proc/drop_limb(obj/item/bodypart/lost_limb, special, dismembered) #define COMSIG_CARBON_POST_REMOVE_LIMB "carbon_post_remove_limb" -/// Called from bodypart being removed /obj/item/bodypart/proc/drop_limb(mob/living/carbon/old_owner, dismembered) +/// Called from bodypart being removed /obj/item/bodypart/proc/drop_limb(mob/living/carbon/old_owner, special, dismembered) #define COMSIG_BODYPART_REMOVED "bodypart_removed" ///from base of mob/living/carbon/soundbang_act(): (list(intensity)) @@ -133,9 +133,6 @@ #define COMSIG_HUMAN_CORETEMP_CHANGE "human_coretemp_change" ///from /datum/species/handle_fire. Called when the human is set on fire and burning clothes and stuff #define COMSIG_HUMAN_BURNING "human_burning" -///from /mob/living/carbon/human/proc/check_shields(): (atom/hit_by, damage, attack_text, attack_type, armour_penetration, damage_type) -#define COMSIG_HUMAN_CHECK_SHIELDS "human_check_shields" - #define SHIELD_BLOCK (1<<0) ///from /mob/living/carbon/human/proc/force_say(): () #define COMSIG_HUMAN_FORCESAY "human_forcesay" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_guardian.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_guardian.dm new file mode 100644 index 00000000000000..9f4819de79749f --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_guardian.dm @@ -0,0 +1,7 @@ +/// Sent when a guardian is manifested +#define COMSIG_GUARDIAN_MANIFESTED "guardian_manifested" +/// Sent when a guardian is recalled +#define COMSIG_GUARDIAN_RECALLED "guardian_recalled" + +/// Sent when an assassin guardian is forced to exit stealth +#define COMSIG_GUARDIAN_ASSASSIN_REVEALED "guardian_assassin_revealed" 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 ceebe7f304be7c..b1838793e9836b 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm @@ -69,8 +69,6 @@ #define COMSIG_LIVING_ADJUST_OXY_DAMAGE "living_adjust_oxy_damage" /// Send when toxloss is modified (type, amount, forced) #define COMSIG_LIVING_ADJUST_TOX_DAMAGE "living_adjust_tox_damage" -/// Send when cloneloss is modified (type, amount, forced) -#define COMSIG_LIVING_ADJUST_CLONE_DAMAGE "living_adjust_clone_damage" /// Send when staminaloss is modified (type, amount, forced) #define COMSIG_LIVING_ADJUST_STAMINA_DAMAGE "living_adjust_stamina_damage" @@ -78,7 +76,6 @@ #define COMSIG_LIVING_ADJUST_STANDARD_DAMAGE_TYPES list(\ COMSIG_LIVING_ADJUST_BRUTE_DAMAGE,\ COMSIG_LIVING_ADJUST_BURN_DAMAGE,\ - COMSIG_LIVING_ADJUST_CLONE_DAMAGE,\ COMSIG_LIVING_ADJUST_OXY_DAMAGE,\ COMSIG_LIVING_ADJUST_TOX_DAMAGE,\ ) @@ -139,6 +136,9 @@ #define COMSIG_LIVING_EARLY_UNARMED_ATTACK "human_pre_attack_hand" /// from mob/living/*/UnarmedAttack(): (mob/living/source, atom/target, proximity, modifiers) #define COMSIG_LIVING_UNARMED_ATTACK "living_unarmed_attack" +///From base of mob/living/MobBump(): (mob/bumped, mob/living/bumper) +#define COMSIG_LIVING_PRE_MOB_BUMP "movable_pre_bump" + #define COMPONENT_LIVING_BLOCK_PRE_MOB_BUMP (1<<0) ///From base of mob/living/MobBump() (mob/living) #define COMSIG_LIVING_MOB_BUMP "living_mob_bump" ///From base of mob/living/Bump() (turf/closed) @@ -147,7 +147,12 @@ #define COMSIG_LIVING_WALL_EXITED "living_wall_exited" ///From base of mob/living/ZImpactDamage() (mob/living, levels, turf/t) #define COMSIG_LIVING_Z_IMPACT "living_z_impact" - #define NO_Z_IMPACT_DAMAGE (1<<0) + /// Just for the signal return, does not run normal living handing of z fall damage for mobs + #define ZIMPACT_CANCEL_DAMAGE (1<<0) + /// Do not show default z-impact message + #define ZIMPACT_NO_MESSAGE (1<<1) + /// Do not do the spin animation when landing + #define ZIMPACT_NO_SPIN (1<<2) /// From mob/living/try_speak(): (message, ignore_spam, forced) #define COMSIG_LIVING_TRY_SPEECH "living_vocal_speech" @@ -219,9 +224,21 @@ /// From /datum/ai/behavior/climb_tree/perform() : (mob/living/basic/living_pawn) #define COMSIG_LIVING_CLIMB_TREE "living_climb_tree" +///from /mob/living/proc/check_block(): (atom/hit_by, damage, attack_text, attack_type, armour_penetration, damage_type) +#define COMSIG_LIVING_CHECK_BLOCK "living_check_block" + #define SUCCESSFUL_BLOCK (1<<0) + /// Sent on a mob from /datum/component/mob_chain when component is attached with it as the "front" : (mob/living/basic/tail) #define COMSIG_MOB_GAINED_CHAIN_TAIL "living_gained_chain_tail" /// Sent on a mob from /datum/component/mob_chain when component is detached from it as the "front" : (mob/living/basic/tail) #define COMSIG_MOB_LOST_CHAIN_TAIL "living_detached_chain_tail" /// Sent from a 'contract chain' button on a mob chain #define COMSIG_MOB_CHAIN_CONTRACT "living_chain_contracted" + +/// Sent from `obj/item/reagent_containers/pill/on_consumption`: (obj/item/reagent_containers/pill/pill, mob/feeder) +#define COMSIG_LIVING_PILL_CONSUMED "living_pill_consumed" + +/// Sent from a mob to their loc when starting to remove cuffs on itself +#define COMSIG_MOB_REMOVING_CUFFS "living_removing_cuffs" +/// Sent as a reply to above from any atom that wishs to stop self-cuff removal +#define COMSIG_MOB_BLOCK_CUFF_REMOVAL (1<<0) 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 b564a114b02cca..fff19f39774110 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm @@ -39,6 +39,11 @@ /// 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(), invoked when a non-living mob is attempting to move: (list/move_args) +#define COMSIG_MOB_CLIENT_PRE_NON_LIVING_MOVE "mob_client_move_possessed_object" + /// Cancels the move attempt + #define COMSIG_MOB_CLIENT_BLOCK_PRE_NON_LIVING_MOVE COMPONENT_MOVABLE_BLOCK_PRE_MOVE + /// 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. @@ -104,6 +109,8 @@ #define COMSIG_MOB_ATTACK_ALIEN "mob_attack_alien" ///from base of /mob/throw_item(): (atom/target) #define COMSIG_MOB_THROW "mob_throw" +///from base of /mob/verb/examinate(): (atom/target, list/examine_strings) +#define COMSIG_MOB_EXAMINING "mob_examining" ///from base of /mob/verb/examinate(): (atom/target) #define COMSIG_MOB_EXAMINATE "mob_examinate" ///from /mob/living/handle_eye_contact(): (mob/living/other_mob) @@ -212,6 +219,7 @@ /// Return to stop the flash entirely #define STOP_FLASH (1<<3) /// from /obj/item/assembly/flash/flash_carbon, to the mob flashing another carbon +/// (mob/living/carbon/flashed, obj/item/assembly/flash/flash, deviation (from code/__DEFINES/mobs.dm)) #define COMSIG_MOB_SUCCESSFUL_FLASHED_CARBON "mob_success_flashed_carbon" /// from mob/get_status_tab_items(): (list/items) @@ -230,3 +238,6 @@ #define COMPONENT_BLOCK_MOB_CHANGE (1<<0) /// from /mob/proc/change_mob_type_unchecked() : () #define COMSIG_MOB_CHANGED_TYPE "mob_changed_type" + +/// from /mob/proc/slip(): (knockdown_amonut, obj/slipped_on, lube_flags [mobs.dm], paralyze, force_drop) +#define COMSIG_MOB_SLIPPED "mob_slipped" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_silicon.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_silicon.dm index 8be61d93898db2..47f5b7485991b0 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_silicon.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_silicon.dm @@ -2,3 +2,9 @@ #define COMSIG_PROCESS_BORGCHARGER_OCCUPANT "living_charge" ///sent from borg mobs to itself, for tools to catch an upcoming destroy() due to safe decon (rather than detonation) #define COMSIG_BORG_SAFE_DECONSTRUCT "borg_safe_decon" +///called from /obj/item/borg/cyborghug/attack proc +#define COMSIG_BORG_HUG_MOB "borg_hug_mob" + ///returned if this action was handled by signal handler. + #define COMSIG_BORG_HUG_HANDLED 1 +///called from /mob/living/silicon/attack_hand proc +#define COMSIG_MOB_PAT_BORG "mob_pat_borg" diff --git a/code/__DEFINES/dcs/signals/signals_moveloop.dm b/code/__DEFINES/dcs/signals/signals_moveloop.dm index 38ab63a5969846..8a354f8bfbb1d3 100644 --- a/code/__DEFINES/dcs/signals/signals_moveloop.dm +++ b/code/__DEFINES/dcs/signals/signals_moveloop.dm @@ -9,3 +9,5 @@ #define COMSIG_MOVELOOP_POSTPROCESS "moveloop_postprocess" //from [/datum/move_loop/has_target/jps/recalculate_path] (): #define COMSIG_MOVELOOP_JPS_REPATH "moveloop_jps_repath" +///from [/datum/move_loop/has_target/jps/on_finish_pathing] +#define COMSIG_MOVELOOP_JPS_FINISHED_PATHING "moveloop_jps_finished_pathing" diff --git a/code/__DEFINES/dcs/signals/signals_music.dm b/code/__DEFINES/dcs/signals/signals_music.dm index 69c4fc5b12eabd..2f15f4e63222a0 100644 --- a/code/__DEFINES/dcs/signals/signals_music.dm +++ b/code/__DEFINES/dcs/signals/signals_music.dm @@ -1,6 +1,6 @@ // /datum/song signals -///sent to the instrument when a song starts playing +///sent to the instrument when a song starts playing: (datum/starting_song, atom/player) #define COMSIG_INSTRUMENT_START "instrument_start" ///sent to the instrument when a song stops playing #define COMSIG_INSTRUMENT_END "instrument_end" diff --git a/code/__DEFINES/dcs/signals/signals_object.dm b/code/__DEFINES/dcs/signals/signals_object.dm index 4998f10849e5ba..b3149b82719f5b 100644 --- a/code/__DEFINES/dcs/signals/signals_object.dm +++ b/code/__DEFINES/dcs/signals/signals_object.dm @@ -12,6 +12,8 @@ /// from /obj/item/toy/crayon/spraycan/afterattack: (user, spraycan, color_is_dark) #define COMSIG_OBJ_PAINTED "obj_painted" #define DONT_USE_SPRAYCAN_CHARGES (1<<0) +/// from /obj/obj_reskin: (mob/user, skin) +#define COMSIG_OBJ_RESKIN "obj_reskin" // /obj/machinery signals @@ -128,7 +130,7 @@ #define COMSIG_ITEM_ON_JUICE "on_juice" ///from /obj/machinery/hydroponics/attackby(obj/item/O, mob/user, params) when an object is used as compost: (mob/user) #define COMSIG_ITEM_ON_COMPOSTED "on_composted" -///Called when an item is dried by a drying rack: +///Called when an item is dried by a drying rack #define COMSIG_ITEM_DRIED "item_dried" ///from base of obj/item/dropped(): (mob/user) #define COMSIG_ITEM_DROPPED "item_drop" @@ -308,6 +310,8 @@ #define COMSIG_RADIO_NEW_FREQUENCY "radio_new_frequency" ///called from base of /obj/item/radio/proc/talk_into(): (atom/movable/M, message, channel) #define COMSIG_RADIO_NEW_MESSAGE "radio_new_message" +///called from base of /obj/item/radio/proc/on_receive_messgae(): (list/data) +#define COMSIG_RADIO_RECEIVE_MESSAGE "radio_receive_message" // /obj/item/pen signals @@ -361,9 +365,9 @@ // /obj/projectile signals (sent to the firer) -///from base of /obj/projectile/proc/on_hit(), like COMSIG_PROJECTILE_ON_HIT but on the projectile itself and with the hit limb (if any): (atom/movable/firer, atom/target, angle, hit_limb) +///from base of /obj/projectile/proc/on_hit(), like COMSIG_PROJECTILE_ON_HIT but on the projectile itself and with the hit limb (if any): (atom/movable/firer, atom/target, angle, hit_limb, blocked) #define COMSIG_PROJECTILE_SELF_ON_HIT "projectile_self_on_hit" -///from base of /obj/projectile/proc/on_hit(): (atom/movable/firer, atom/target, angle, hit_limb) +///from base of /obj/projectile/proc/on_hit(): (atom/movable/firer, atom/target, angle, hit_limb, blocked) #define COMSIG_PROJECTILE_ON_HIT "projectile_on_hit" ///from base of /obj/projectile/proc/fire(): (obj/projectile, atom/original_target) #define COMSIG_PROJECTILE_BEFORE_FIRE "projectile_before_fire" @@ -387,6 +391,9 @@ ///sent to targets during the process_hit proc of projectiles #define COMSIG_FIRE_CASING "fire_casing" +///from the base of /obj/item/ammo_casing/ready_proj() : (atom/target, mob/living/user, quiet, zone_override, atom/fired_from) +#define COMSIG_CASING_READY_PROJECTILE "casing_ready_projectile" + ///sent to the projectile after an item is spawned by the projectile_drop element: (new_item) #define COMSIG_PROJECTILE_ON_SPAWN_DROP "projectile_on_spawn_drop" ///sent to the projectile when spawning the item (shrapnel) that may be embedded: (new_item) @@ -448,6 +455,12 @@ #define COMSIG_ITEM_AFTERATTACK_SECONDARY "item_afterattack_secondary" ///from base of obj/item/attack_qdeleted(): (atom/target, mob/user, params) #define COMSIG_ITEM_ATTACK_QDELETED "item_attack_qdeleted" +///from base of obj/item/embedded(): (atom/target, obj/item/bodypart/part) +#define COMSIG_ITEM_EMBEDDED "item_embedded" +///from base of datum/component/embedded/safeRemove(): (mob/living/carbon/victim) +#define COMSIG_ITEM_UNEMBEDDED "item_unembedded" +/// from base of obj/item/failedEmbed() +#define COMSIG_ITEM_FAILED_EMBED "item_failed_embed" ///from /obj/item/assembly/proc/pulsed(mob/pulser) #define COMSIG_ASSEMBLY_PULSED "assembly_pulsed" @@ -481,3 +494,12 @@ /// from /obj/structure/cursed_slot_machine/determine_victor() when someone finally wins. #define COMSIG_GLOB_CURSED_SLOT_MACHINE_WON "cursed_slot_machine_won" + +/// from /datum/component/dart_insert/add_to_dart() : (obj/item/ammo_casing, mob/user) +#define COMSIG_DART_INSERT_ADDED "dart_insert_added" + +/// from /datum/component/dart_insert/remove_from_dart() : (obj/ammo_casing/dart, mob/user) +#define COMSIG_DART_INSERT_REMOVED "dart_insert_removed" + +/// from /datum/component/dart_insert/on_reskin() +#define COMSIG_DART_INSERT_PARENT_RESKINNED "dart_insert_parent_reskinned" diff --git a/code/__DEFINES/dcs/signals/signals_turf.dm b/code/__DEFINES/dcs/signals/signals_turf.dm index 65709f4e446d98..f89f30d1eb4586 100644 --- a/code/__DEFINES/dcs/signals/signals_turf.dm +++ b/code/__DEFINES/dcs/signals/signals_turf.dm @@ -31,5 +31,12 @@ ///from /datum/element/footstep/prepare_step(): (list/steps) #define COMSIG_TURF_PREPARE_STEP_SOUND "turf_prepare_step_sound" + //stops element/footstep/proc/prepare_step() from returning null if the turf itself has no sound + #define FOOTSTEP_OVERRIDEN (1<<0) ///from base of datum/thrownthing/finalize(): (turf/turf, atom/movable/thrownthing) when something is thrown and lands on us #define COMSIG_TURF_MOVABLE_THROW_LANDED "turf_movable_throw_landed" + +///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/diseases.dm b/code/__DEFINES/diseases.dm index 7fdb3182218a7d..61a136c70d2f75 100644 --- a/code/__DEFINES/diseases.dm +++ b/code/__DEFINES/diseases.dm @@ -53,3 +53,62 @@ DEFINE_BITFIELD(spread_flags, list( #define DISEASE_SEVERITY_BIOHAZARD "BIOHAZARD" /// Diseases that are uncurable (hms) #define DISEASE_SEVERITY_UNCURABLE "Uncurable" + +//Severity Guaranteed Cycles or how long before a disease can potentially self-cure +/// Positive diseases should not self-cure by themselves, but if they do, they cure fast +#define DISEASE_CYCLES_POSITIVE 15 +/// Roughly 6 minutes for a harmless virus +#define DISEASE_CYCLES_NONTHREAT 180 +/// Roughly 5 minutes for a disruptive nuisance virus +#define DISEASE_CYCLES_MINOR 150 +/// Roughly 4 minutes for a medium virus +#define DISEASE_CYCLES_MEDIUM 120 +/// Roughly 3 minutes for a dangerous virus +#define DISEASE_CYCLES_DANGEROUS 90 +/// Roughly 2 minutes for a harmful virus +#define DISEASE_CYCLES_HARMFUL 60 +/// Roughly 1 minute for a biohazard kill-death-evil-bad virus +#define DISEASE_CYCLES_BIOHAZARD 30 + +//Natural Immunity/Recovery Balance Levers +/// Recovery Constant - starting point, 'base' recovery when you get initially infected. +//// Minimum stage_prob is 1 for most advanced diseases. Don't raise it above that if you don't want those diseases to start naturally curing themselves. +#define DISEASE_RECOVERY_CONSTANT 0 +/// Recovery Scaling - the divisor of the number of adjusted cycles at max_stages divided by Severity Guaranteed Cycles. +//// Raise to make over-time scaling more aggressive as you get further away from Severity Guaranteed Cycles. +//// Basically, once you hit Severity Guaranteed Cycles or equivalent, this will be your flat recovery chance, increasing by 1% for every Severity Guaranteed Cycles/this value cycles. So, if SGC = 30 and this = 3, every 10 cycles should give you another 1% per-cycle chance to recover. +#define DISEASE_RECOVERY_SCALING 2 +/// Peaked Recovery Multiplier - Once we hit max_stages, multiplicative bonus to recovery scaling. +//// Adjust to make it faster or slower to cure once the virus has reached its peak. +#define DISEASE_PEAKED_RECOVERY_MULTIPLIER 1.2 +/// Slowdown Recovery Bonus - set this to the maximum extra chance per tick you want people to get to recover from spaceacillin or other slowdown/virus resistance effects +#define DISEASE_SLOWDOWN_RECOVERY_BONUS 1 +/// Slowdown Recovery Bonus Duration - set this to the maximum # of cycles you want things that cause slowdown/virus resistance to be able to add a bonus up to DISEASE_SLOWDOWN_RECOVERY_BONUS.______qdel_list_wrapper(list/L) +//// Scales down linearly over time. +#define DISEASE_SLOWDOWN_RECOVERY_BONUS_DURATION 100 +/// Negative Malnutrition Recovery Penalty +//// Flat penalty to recovery chance if malnourished or starving +#define DISEASE_MALNUTRITION_RECOVERY_PENALTY 1.5 +/// Satiety Recovery Multiplier - added chance to recover based on positive satiety +//// Multiplier of satiety/max_satiety if satiety is positive or zero. Increase to make satiety more valuable, decrease for less. +#define DISEASE_SATIETY_RECOVERY_MULTIPLIER 1 +/// Good Sleeping Recovery Bonus - additive benefits for various types of good sleep (blanket, bed, darkness, pillows.) +//// Raise to make each factor add this much chance to recover. +#define DISEASE_GOOD_SLEEPING_RECOVERY_BONUS 0.2 +/// Sleeping Recovery Multiplier - multiplies ALL recovery chance effects by this amount. +//// Set to 1 for no effect on recovery chances from sleeping. +#define DISEASE_SLEEPING_RECOVERY_MULTIPLIER 2 +/// Final Cure Chance Multiplier - multiplies the disease's cure chance to get the probability of moving from stage 1 to a final cure. +//// Must be greater than zero for diseases to self cure. +#define DISEASE_FINAL_CURE_CHANCE_MULTIPLIER 3 +/// Symptom Offset Duration - number of cycles over which sleeping/having spaceacillin or a slowdown effect can prevent symptoms appearing +//// Set to maximum # of cycles you want to be able to offset symptoms. Scales down linearly over time. +#define DISEASE_SYMPTOM_OFFSET_DURATION 100 + +/// Symptom Frequency Modifier +//// Raise to make symptoms fire less frequently, lower to make them fire more frequently. Keep at 0 or above. +#define DISEASE_SYMPTOM_FREQUENCY_MODIFIER 1 + +/// Minimum Chemical Cure Chance +//// Minimum per-cycle chance we want of being able to cure an advanced disease with the chemicals present. +#define DISEASE_MINIMUM_CHEMICAL_CURE_CHANCE 5 diff --git a/code/__DEFINES/exosuit_fab.dm b/code/__DEFINES/exosuit_fab.dm index 706daf6e2dec29..4cc21f210d61dd 100644 --- a/code/__DEFINES/exosuit_fab.dm +++ b/code/__DEFINES/exosuit_fab.dm @@ -33,10 +33,12 @@ #define EXOSUIT_MODULE_RETICENCE (1<<9) /// Module is compatible with Marauder models #define EXOSUIT_MODULE_MARAUDER (1<<10) +/// Module is compatible with Paddy models +#define EXOSUIT_MODULE_PADDY (1<<11) /// Module is compatible with "Working" Exosuit models - Ripley and Clarke #define EXOSUIT_MODULE_WORKING (EXOSUIT_MODULE_RIPLEY | EXOSUIT_MODULE_CLARKE) /// Module is compatible with "Combat" Exosuit models - Gygax, H.O.N.K, Durand and Phazon, or any Exosuit with an empty Concealed Weapon Bay -#define EXOSUIT_MODULE_COMBAT (EXOSUIT_MODULE_GYGAX | EXOSUIT_MODULE_HONK | EXOSUIT_MODULE_DURAND | EXOSUIT_MODULE_PHAZON | EXOSUIT_MODULE_SAVANNAH | EXOSUIT_MODULE_RETICENCE | EXOSUIT_MODULE_MARAUDER | EXOSUIT_MODULE_CONCEALED_WEP_BAY) +#define EXOSUIT_MODULE_COMBAT (EXOSUIT_MODULE_GYGAX | EXOSUIT_MODULE_HONK | EXOSUIT_MODULE_DURAND | EXOSUIT_MODULE_PHAZON | EXOSUIT_MODULE_SAVANNAH | EXOSUIT_MODULE_RETICENCE | EXOSUIT_MODULE_MARAUDER | EXOSUIT_MODULE_PADDY | EXOSUIT_MODULE_CONCEALED_WEP_BAY) /// Module is compatible with "Medical" Exosuit modelsm - Odysseus #define EXOSUIT_MODULE_MEDICAL EXOSUIT_MODULE_ODYSSEUS diff --git a/code/__DEFINES/fonts.dm b/code/__DEFINES/fonts.dm index eab28820c411fc..14c221b22fa0c3 100644 --- a/code/__DEFINES/fonts.dm +++ b/code/__DEFINES/fonts.dm @@ -13,7 +13,7 @@ #define SIGNATURE_FONT "Segoe Script" /// Emoji icon set -#define EMOJI_SET 'modular_skyrat/master_files/icons/emoji.dmi' // SKYRAT EDIT - ORIGINAL: 'icons/ui_icons/emoji/emoji.dmi' +#define EMOJI_SET 'modular_nova/master_files/icons/emoji.dmi' // NOVA EDIT - ORIGINAL: 'icons/ui_icons/emoji/emoji.dmi' // Font metrics bitfield /// Include leading A width and trailing C width in GetWidth() or in DrawText() diff --git a/code/__DEFINES/food.dm b/code/__DEFINES/food.dm index 85ced17e67c2bd..e1c9185914f5ef 100644 --- a/code/__DEFINES/food.dm +++ b/code/__DEFINES/food.dm @@ -19,7 +19,7 @@ #define BUGS (1<<18) #define GORE (1<<19) #define STONE (1<<20) -#define BLOODY (1<<21) // SKYRAT EDIT - Hemophage Food +#define BLOODY (1<<21) // NOVA EDIT - Hemophage Food DEFINE_BITFIELD(foodtypes, list( "MEAT" = MEAT, @@ -43,7 +43,7 @@ DEFINE_BITFIELD(foodtypes, list( "BUGS" = BUGS, "GORE" = GORE, "STONE" = STONE, - "BLOODY" = BLOODY, // SKYRAT EDIT - Hemophage Food + "BLOODY" = BLOODY, // NOVA EDIT - Hemophage Food )) /// A list of food type names, in order of their flags @@ -69,7 +69,7 @@ DEFINE_BITFIELD(foodtypes, list( "BUGS", \ "GORE", \ "STONE", \ - "BLOODY", /* SKYRAT EDIT - Hemophage Food */ \ + "BLOODY", /* NOVA EDIT - Hemophage Food */ \ ) /// IC meaning (more or less) for food flags @@ -95,7 +95,7 @@ DEFINE_BITFIELD(foodtypes, list( "Bugs", \ "Gore", \ "Rocks", \ - "Bloody", /* SKYRAT EDIT - Hemophage Food */ \ + "Bloody", /* NOVA EDIT - Hemophage Food */ \ ) #define DRINK_REVOLTING 1 @@ -182,7 +182,7 @@ DEFINE_BITFIELD(food_flags, list( "FOOD_IN_CONTAINER" = FOOD_IN_CONTAINER, )) -#define STOP_SERVING_BREAKFAST (35 MINUTES) // SKYRAT EDIT - ORIGINAL: 15 MINUTES +#define STOP_SERVING_BREAKFAST (35 MINUTES) // NOVA EDIT - ORIGINAL: 15 MINUTES #define FOOD_MEAT_NORMAL 5 #define FOOD_MEAT_HUMAN 50 diff --git a/code/__DEFINES/guardian_defines.dm b/code/__DEFINES/guardian_defines.dm index e7961368feee09..ae2c3175b4a615 100644 --- a/code/__DEFINES/guardian_defines.dm +++ b/code/__DEFINES/guardian_defines.dm @@ -3,5 +3,28 @@ #define GUARDIAN_THEME_CARP "carp" #define GUARDIAN_THEME_MINER "miner" -#define GUARDIAN_COLOR_LAYER 1 -#define GUARDIAN_TOTAL_LAYERS 1 +#define GUARDIAN_MAGIC "magic" +#define GUARDIAN_TECH "tech" + +#define GUARDIAN_ASSASSIN "assassin" +#define GUARDIAN_CHARGER "charger" +#define GUARDIAN_DEXTROUS "dextrous" +#define GUARDIAN_EXPLOSIVE "explosive" +#define GUARDIAN_GASEOUS "gaseous" +#define GUARDIAN_GRAVITOKINETIC "gravitokinetic" +#define GUARDIAN_LIGHTNING "lightning" +#define GUARDIAN_PROTECTOR "protector" +#define GUARDIAN_RANGED "ranged" +#define GUARDIAN_STANDARD "standard" +#define GUARDIAN_SUPPORT "support" + +/// List of all guardians currently extant +GLOBAL_LIST_EMPTY(parasites) + +/// Assoc list of guardian theme singletons +GLOBAL_LIST_INIT(guardian_themes, list( + GUARDIAN_THEME_TECH = new /datum/guardian_fluff/tech, + GUARDIAN_THEME_MAGIC = new /datum/guardian_fluff, + GUARDIAN_THEME_CARP = new /datum/guardian_fluff/carp, + GUARDIAN_THEME_MINER = new /datum/guardian_fluff/miner, +)) diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index ba4f0f12ea4d85..5798fd29e82de9 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -123,7 +123,7 @@ //Drones #define ui_drone_drop "CENTER+1:18,SOUTH:5" -#define ui_drone_pull "CENTER+2:2,SOUTH:5" +#define ui_drone_pull "CENTER+1.5:2,SOUTH:5" #define ui_drone_storage "CENTER-2:14,SOUTH:5" #define ui_drone_head "CENTER-3:14,SOUTH:5" diff --git a/code/__DEFINES/icon_smoothing.dm b/code/__DEFINES/icon_smoothing.dm index 55d25fd5e45b81..63bfb4192af070 100644 --- a/code/__DEFINES/icon_smoothing.dm +++ b/code/__DEFINES/icon_smoothing.dm @@ -131,14 +131,14 @@ DEFINE_BITFIELD(smoothing_junction, list( #define SMOOTH_GROUP_SURVIVAL_TITANIUM_WALLS S_TURF(59) ///turf/closed/wall/mineral/titanium/survival #define SMOOTH_GROUP_TURF_OPEN_CLIFF S_TURF(60) ///turf/open/cliff -// SKYRAT EDIT ADDITION -#define SMOOTH_GROUP_ELEVATED_PLASTEEL S_TURF(60) -#define SMOOTH_GROUP_LOWERED_PLASTEEL S_TURF(61) +// NOVA EDIT ADDITION +#define SMOOTH_GROUP_ELEVATED_PLASTEEL S_TURF(61) +#define SMOOTH_GROUP_LOWERED_PLASTEEL S_TURF(62) -#define SMOOTH_GROUP_FISSURE S_TURF(62) +#define SMOOTH_GROUP_FISSURE S_TURF(63) -#define MAX_S_TURF 62 //Always match this value with the one above it. -//SKYRAT EDIT END +#define MAX_S_TURF 63 //Always match this value with the one above it. +//NOVA EDIT END #define S_OBJ(num) ("-" + #num + ",") @@ -162,10 +162,10 @@ DEFINE_BITFIELD(smoothing_junction, list( #define SMOOTH_GROUP_BAMBOO_WALLS S_TURF(17) //![/turf/closed/wall/mineral/bamboo, /obj/structure/falsewall/bamboo] #define SMOOTH_GROUP_PLASTINUM_WALLS S_TURF(18) //![turf/closed/indestructible/riveted/plastinum] -//SKYRAT EDIT ADDITION +//NOVA EDIT ADDITION #define SMOOTH_GROUP_SHIPWALLS S_OBJ(19) ///turf/closed/wall/mineral/titanium/spaceship #define SMOOTH_GROUP_STONE_WALLS S_OBJ(20) ///turf/closed/wall/mineral/stone, /obj/structure/falsewall/stone -//SKYRAT EDIT END +//NOVA EDIT END #define SMOOTH_GROUP_PAPERFRAME S_OBJ(21) ///obj/structure/window/paperframe, /obj/structure/mineral_door/paperframe @@ -207,11 +207,11 @@ DEFINE_BITFIELD(smoothing_junction, list( #define SMOOTH_GROUP_GAS_TANK S_OBJ(72) -//SKYRAT EDIT ADDITION +//NOVA EDIT ADDITION #define SMOOTH_GROUP_SHUTTERS S_OBJ(73) #define SMOOTH_GROUP_WATER S_OBJ(74) ///obj/effect/abstract/liquid_turf -//SKYRAT EDIT END +//NOVA EDIT END /// Performs the work to set smoothing_groups and canSmoothWith. /// An inlined function used in both turf/Initialize and atom/Initialize. diff --git a/code/__DEFINES/id_cards.dm b/code/__DEFINES/id_cards.dm index 716a488ed33b10..08fb5c48ca4566 100644 --- a/code/__DEFINES/id_cards.dm +++ b/code/__DEFINES/id_cards.dm @@ -20,7 +20,7 @@ ) /// Wildcard slot define for Captain gold cards. Can hold infinite of any Captain level wildcard. #define WILDCARD_LIMIT_GOLD list(WILDCARD_NAME_CAPTAIN = list(limit = -1, usage = list())) -/// Wildcard slot define for select Syndicate-affiliated cards. Can hold infinite of any Syndicate level wildcard. Syndicate includes all station accesses. +/// Wildcard slot define for select Symphionia-affiliated cards. Can hold infinite of any Symphionia level wildcard. Symphionia includes all station accesses. #define WILDCARD_LIMIT_SYNDICATE list(WILDCARD_NAME_SYNDICATE = list(limit = -1, usage = list())) /// Wildcard slot define for Deathsquad black cards. Can hold infinite of any Centcom level wildcard. Centcom includes all station accesses. #define WILDCARD_LIMIT_DEATHSQUAD list(WILDCARD_NAME_CENTCOM = list(limit = -1, usage = list())) diff --git a/code/__DEFINES/implants.dm b/code/__DEFINES/implants.dm new file mode 100644 index 00000000000000..3693526e1f3486 --- /dev/null +++ b/code/__DEFINES/implants.dm @@ -0,0 +1,5 @@ +///Denotes this as a "security" implant, limiting it to two per body +#define IMPLANT_TYPE_SECURITY (1<<0) + +///Maximum number of security implants in a mob at once. +#define SECURITY_IMPLANT_CAP 2 diff --git a/code/__DEFINES/interaction_flags.dm b/code/__DEFINES/interaction_flags.dm index 0b4e9588729430..55732f2364bb1e 100644 --- a/code/__DEFINES/interaction_flags.dm +++ b/code/__DEFINES/interaction_flags.dm @@ -36,9 +36,8 @@ #define INTERACT_MACHINE_OPEN_SILICON (1<<4) /// must be silicon to interact #define INTERACT_MACHINE_REQUIRES_SILICON (1<<5) -/// MACHINES HAVE THIS BY DEFAULT, SOMEONE SHOULD RUN THROUGH MACHINES AND REMOVE IT FROM THINGS LIKE LIGHT SWITCHES WHEN POSSIBLE!!-------------------------- /// This flag determines if a machine set_machine's the user when the user uses it, making updateUsrDialog make the user re-call interact() on it. -/// THIS FLAG IS ON ALL MACHINES BY DEFAULT, NEEDS TO BE RE-EVALUATED LATER!! +/// This is exclusively used for non-TGUI UIs, and its instances should be removed when moved to TGUI. #define INTERACT_MACHINE_SET_MACHINE (1<<6) /// the user must have vision to interact (blind people need not apply) #define INTERACT_MACHINE_REQUIRES_SIGHT (1<<7) diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 5bf9fd6d8073ac..f77bbda463e586 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -90,7 +90,7 @@ ///hides mutant/moth wings, does not apply to functional wings #define HIDEMUTWINGS (1<<13) -//SKYRAT EDIT ADDITION: CUSTOM EAR TOGGLE FOR ANTHRO/ETC EAR SHOWING - +//NOVA EDIT ADDITION: CUSTOM EAR TOGGLE FOR ANTHRO/ETC EAR SHOWING - /// Manually set this on items you want anthro ears to show on! #define SHOWSPRITEEARS (1<<14) /// Does this sprite hide the tail? @@ -99,7 +99,7 @@ #define HIDESPINE (1<<16) /// Does this sprite hide devious devices? #define HIDESEXTOY (1<<17) -//SKYRAT EDIT ADDITION END +//NOVA EDIT ADDITION END //bitflags for clothing coverage - also used for limbs #define HEAD (1<<0) @@ -133,10 +133,10 @@ #define FEMALE_UNIFORM_TOP_ONLY (1<<1) /// For when you don't want the "breast" effect to be applied (the one that cuts two pixels in the middle of the front of the uniform when facing east or west). #define FEMALE_UNIFORM_NO_BREASTS (1<<2) -// SKYRAT EDIT ADDITION START +// NOVA EDIT ADDITION START /// For when you -don't- want to apply FEMALE_UNIFORM_TOP_ONLY to the digi version (which happens by default). #define FEMALE_UNIFORM_DIGI_FULL (1<<3) -// SKYRAT EDIT ADDITION END +// NOVA EDIT ADDITION END //flags for alternate styles: These are hard sprited so don't set this if you didn't put the effort in #define NORMAL_STYLE 0 @@ -152,7 +152,7 @@ #define CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON (1<<2) ///has a sprite for monkeys #define CLOTHING_MONKEY_VARIATION (1<<3) -// SKYRAT EDIT ADDITION START +// NOVA EDIT ADDITION START /// The sprite works fine for snouts. #define CLOTHING_SNOUTED_VARIATION (1<<4) /// The sprite works fine for snouts as-is. @@ -165,7 +165,7 @@ #define CLOTHING_SNOUTED_BETTER_VOX_VARIATION (1<<8) /// The sprite works fine for vox snouts as is. #define CLOTHING_SNOUTED_BETTER_VOX_VARIATION_NO_NEW_ICON (1<<9) -// SKYRAT EDIT END +// NOVA EDIT END //flags for covering body parts #define GLASSESCOVERSEYES (1<<0) @@ -194,8 +194,6 @@ //Allowed equipment lists for security vests. GLOBAL_LIST_INIT(detective_vest_allowed, list( - /obj/item/ammo_box, - /obj/item/ammo_casing, /obj/item/detective_scanner, /obj/item/flashlight, /obj/item/gun/ballistic, @@ -212,12 +210,10 @@ GLOBAL_LIST_INIT(detective_vest_allowed, list( /obj/item/storage/belt/holster/nukie, /obj/item/storage/belt/holster/energy, /obj/item/gun/ballistic/shotgun/automatic/combat/compact, - /obj/item/gun/microfusion, //SKYRAT EDIT ADDITION + /obj/item/gun/microfusion, //NOVA EDIT ADDITION )) GLOBAL_LIST_INIT(security_vest_allowed, list( - /obj/item/ammo_box, - /obj/item/ammo_casing, /obj/item/flashlight, /obj/item/gun/ballistic, /obj/item/gun/energy, @@ -231,12 +227,11 @@ GLOBAL_LIST_INIT(security_vest_allowed, list( /obj/item/storage/belt/holster/nukie, /obj/item/storage/belt/holster/energy, /obj/item/gun/ballistic/shotgun/automatic/combat/compact, - /obj/item/gun/microfusion, //SKYRAT EDIT ADDITION + /obj/item/pen/red/security, + /obj/item/gun/microfusion, //NOVA EDIT ADDITION )) GLOBAL_LIST_INIT(security_wintercoat_allowed, list( - /obj/item/ammo_box, - /obj/item/ammo_casing, /obj/item/gun/ballistic, /obj/item/gun/energy, /obj/item/melee/baton, @@ -246,7 +241,7 @@ GLOBAL_LIST_INIT(security_wintercoat_allowed, list( /obj/item/storage/belt/holster/nukie, /obj/item/storage/belt/holster/energy, /obj/item/gun/ballistic/shotgun/automatic/combat/compact, - /obj/item/gun/microfusion, //SKYRAT EDIT ADDITION + /obj/item/gun/microfusion, //NOVA EDIT ADDITION )) //Allowed list for all chaplain suits (except the honkmother robe) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 7f408a6805ed64..909399b3c3da62 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -73,6 +73,8 @@ GLOBAL_LIST_INIT(turfs_openspace, typecacheof(list( #define iscliffturf(A) (istype(A, /turf/open/cliff)) +#define iswaterturf(A) (istype(A, /turf/open/water)) + GLOBAL_LIST_INIT(turfs_pass_meteor, typecacheof(list( /turf/closed/mineral, /turf/open/misc/asteroid, @@ -145,10 +147,14 @@ GLOBAL_LIST_INIT(turfs_pass_meteor, typecacheof(list( // basic mobs #define isbasicmob(A) (istype(A, /mob/living/basic)) +#define isconstruct(A) (istype(A, /mob/living/basic/construct)) + #define iscow(A) (istype(A, /mob/living/basic/cow)) #define isgorilla(A) (istype(A, /mob/living/basic/gorilla)) +#define isshade(A) (istype(A, /mob/living/basic/shade)) + #define is_simian(A) (isgorilla(A) || ismonkey(A)) /// returns whether or not the atom is either a basic mob OR simple animal @@ -159,17 +165,14 @@ GLOBAL_LIST_INIT(turfs_pass_meteor, typecacheof(list( #define ismining(A) (istype(A, /mob/living/simple_animal/hostile/asteroid) || istype(A, /mob/living/basic/mining)) -/// constructs, which are both simple and basic for now -#define isconstruct(A) (istype(A, /mob/living/simple_animal/hostile/construct) || istype(A, /mob/living/basic/construct)) - //Simple animals #define isanimal(A) (istype(A, /mob/living/simple_animal)) #define isrevenant(A) (istype(A, /mob/living/basic/revenant)) -#define isbot(A) (istype(A, /mob/living/simple_animal/bot)) +#define isbot(A) (istype(A, /mob/living/simple_animal/bot) || istype(A, /mob/living/basic/bot)) -#define isshade(A) (istype(A, /mob/living/simple_animal/shade)) +#define isbasicbot(A) (istype(A, /mob/living/basic/bot)) #define ismouse(A) (istype(A, /mob/living/basic/mouse)) @@ -177,7 +180,7 @@ GLOBAL_LIST_INIT(turfs_pass_meteor, typecacheof(list( #define isdrone(A) (istype(A, /mob/living/basic/drone)) -#define iscat(A) (istype(A, /mob/living/simple_animal/pet/cat)) +#define iscat(A) (istype(A, /mob/living/basic/pet/cat)) #define isdog(A) (istype(A, /mob/living/basic/pet/dog)) @@ -187,7 +190,7 @@ GLOBAL_LIST_INIT(turfs_pass_meteor, typecacheof(list( #define isregalrat(A) (istype(A, /mob/living/basic/regal_rat)) -#define isguardian(A) (istype(A, /mob/living/simple_animal/hostile/guardian)) +#define isguardian(A) (istype(A, /mob/living/basic/guardian)) #define ismegafauna(A) (istype(A, /mob/living/simple_animal/hostile/megafauna)) diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index 7feca0782dc490..4b625097d236c9 100644 --- a/code/__DEFINES/jobs.dm +++ b/code/__DEFINES/jobs.dm @@ -60,18 +60,18 @@ #define JOB_SECURITY_OFFICER_ENGINEERING "Security Officer (Engineering)" #define JOB_SECURITY_OFFICER_SCIENCE "Security Officer (Science)" #define JOB_SECURITY_OFFICER_SUPPLY "Security Officer (Cargo)" -#define JOB_CORRECTIONS_OFFICER "Corrections Officer" // SKYRAT EDIT ADDITION +#define JOB_CORRECTIONS_OFFICER "Corrections Officer" // NOVA EDIT ADDITION //Engineering #define JOB_STATION_ENGINEER "Station Engineer" #define JOB_ATMOSPHERIC_TECHNICIAN "Atmospheric Technician" -#define JOB_ENGINEERING_GUARD "Engineering Guard" // SKYRAT EDIT ADDITION +#define JOB_ENGINEERING_GUARD "Engineering Guard" // NOVA EDIT ADDITION //Medical #define JOB_CORONER "Coroner" #define JOB_MEDICAL_DOCTOR "Medical Doctor" #define JOB_PARAMEDIC "Paramedic" #define JOB_CHEMIST "Chemist" #define JOB_VIROLOGIST "Virologist" -#define JOB_ORDERLY "Orderly" // SKYRAT EDIT ADDITION +#define JOB_ORDERLY "Orderly" // NOVA EDIT ADDITION //Science #define JOB_SCIENTIST "Scientist" #define JOB_ROBOTICIST "Roboticist" @@ -82,7 +82,7 @@ #define JOB_CARGO_TECHNICIAN "Cargo Technician" #define JOB_SHAFT_MINER "Shaft Miner" #define JOB_BITRUNNER "Bitrunner" -#define JOB_CUSTOMS_AGENT "Customs Agent" // SKYRAT EDIT ADDITION +#define JOB_CUSTOMS_AGENT "Customs Agent" // NOVA EDIT ADDITION //Service #define JOB_BARTENDER "Bartender" #define JOB_BOTANIST "Botanist" @@ -94,8 +94,8 @@ #define JOB_LAWYER "Lawyer" #define JOB_CHAPLAIN "Chaplain" #define JOB_PSYCHOLOGIST "Psychologist" -#define JOB_BARBER "Barber" // SKYRAT EDIT ADDITION -#define JOB_BOUNCER "Service Guard" // SKYRAT EDIT ADDITION +#define JOB_BARBER "Barber" // NOVA EDIT ADDITION +#define JOB_BOUNCER "Service Guard" // NOVA EDIT ADDITION //ERTs #define JOB_ERT_DEATHSQUAD "Death Commando" #define JOB_ERT_COMMANDER "Emergency Response Team Commander" @@ -118,7 +118,7 @@ #define JOB_CENTCOM_RESEARCH_OFFICER "Research Officer" #define JOB_CENTCOM_SPECIAL_OFFICER "Special Ops Officer" #define JOB_CENTCOM_PRIVATE_SECURITY "Private Security Force" -// SKYRAT EDIT ADDITION START +// NOVA EDIT ADDITION START #define JOB_BLUESHIELD "Blueshield" #define JOB_NT_REP "Nanotrasen Consultant" // Nanotrasen Naval Command jobs @@ -134,7 +134,7 @@ #define JOB_SPACE_POLICE "Space Police" #define JOB_SOLFED "SolFed" #define JOB_SOLFED_LIASON "SolFed Liason" -// SKYRAT EDIT ADDITION END +// NOVA EDIT ADDITION END #define JOB_GROUP_ENGINEERS list( \ JOB_STATION_ENGINEER, \ @@ -179,16 +179,16 @@ #define JOB_DISPLAY_ORDER_DETECTIVE 35 #define JOB_DISPLAY_ORDER_SECURITY_OFFICER 36 #define JOB_DISPLAY_ORDER_PRISONER 37 -#define JOB_DISPLAY_ORDER_SECURITY_MEDIC 38 //SKYRAT EDIT ADDITON -#define JOB_DISPLAY_ORDER_CORRECTIONS_OFFICER 39 //SKYRAT EDIT ADDITON -#define JOB_DISPLAY_ORDER_NANOTRASEN_CONSULTANT 40 //SKYRAT EDIT ADDITON -#define JOB_DISPLAY_ORDER_BLUESHIELD 41 //SKYRAT EDIT ADDITON -#define JOB_DISPLAY_ORDER_ORDERLY 42 //SKYRAT EDIT ADDITION -#define JOB_DISPLAY_ORDER_SCIENCE_GUARD 43 //SKYRAT EDIT ADDITION -#define JOB_DISPLAY_ORDER_BOUNCER 44 //SKYRAT EDIT ADDITION -#define JOB_DISPLAY_ORDER_ENGINEER_GUARD 45 //SKYRAT EDIT ADDITION -#define JOB_DISPLAY_ORDER_CUSTOMS_AGENT 46 //SKYRAT EDIT ADDITION -#define JOB_DISPLAY_ORDER_EXP_CORPS 47 //SKYRAT EDIT ADDITON +#define JOB_DISPLAY_ORDER_SECURITY_MEDIC 38 //NOVA EDIT ADDITON +#define JOB_DISPLAY_ORDER_CORRECTIONS_OFFICER 39 //NOVA EDIT ADDITON +#define JOB_DISPLAY_ORDER_NANOTRASEN_CONSULTANT 40 //NOVA EDIT ADDITON +#define JOB_DISPLAY_ORDER_BLUESHIELD 41 //NOVA EDIT ADDITON +#define JOB_DISPLAY_ORDER_ORDERLY 42 //NOVA EDIT ADDITION +#define JOB_DISPLAY_ORDER_SCIENCE_GUARD 43 //NOVA EDIT ADDITION +#define JOB_DISPLAY_ORDER_BOUNCER 44 //NOVA EDIT ADDITION +#define JOB_DISPLAY_ORDER_ENGINEER_GUARD 45 //NOVA EDIT ADDITION +#define JOB_DISPLAY_ORDER_CUSTOMS_AGENT 46 //NOVA EDIT ADDITION +#define JOB_DISPLAY_ORDER_EXP_CORPS 47 //NOVA EDIT ADDITON #define DEPARTMENT_UNASSIGNED "No Department" @@ -212,8 +212,8 @@ #define DEPARTMENT_ASSISTANT "Assistant" #define DEPARTMENT_BITFLAG_CAPTAIN (1<<9) #define DEPARTMENT_CAPTAIN "Captain" -#define DEPARTMENT_BITFLAG_CENTRAL_COMMAND (1<<10) //SKYRAT EDIT CHANGE -#define DEPARTMENT_CENTRAL_COMMAND "Central Command" //SKYRAT EDIT CHANGE +#define DEPARTMENT_BITFLAG_CENTRAL_COMMAND (1<<10) //NOVA EDIT CHANGE +#define DEPARTMENT_CENTRAL_COMMAND "Central Command" //NOVA EDIT CHANGE /* Job datum job_flags */ /// Whether the mob is announced on arrival. @@ -236,9 +236,19 @@ #define JOB_CAN_BE_INTERN (1<<8) /// This job cannot have more slots opened by the Head of Personnel (but admins or other random events can still do this). #define JOB_CANNOT_OPEN_SLOTS (1<<9) +/// This job will not display on the job menu when there are no slots available, instead of appearing greyed out +#define JOB_HIDE_WHEN_EMPTY (1<<10) +/// This job cannot be signed up for at round start or recorded in your preferences +#define JOB_LATEJOIN_ONLY (1<<11) +/// This job is a head of staff. +#define JOB_HEAD_OF_STAFF (1<<12) /// Combination flag for jobs which are considered regular crew members of the station. #define STATION_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) +/// Combination flag for jobs which are considered heads of staff. +#define HEAD_OF_STAFF_JOB_FLAGS (JOB_BOLD_SELECT_TEXT|JOB_CANNOT_OPEN_SLOTS|JOB_HEAD_OF_STAFF) +/// Combination flag for jobs which are enabled by station traits. +#define STATION_TRAIT_JOB_FLAGS (JOB_CANNOT_OPEN_SLOTS|JOB_HIDE_WHEN_EMPTY|JOB_LATEJOIN_ONLY&~JOB_REOPEN_ON_ROUNDSTART_LOSS) #define FACTION_NONE "None" #define FACTION_STATION "Station" @@ -251,3 +261,6 @@ #define SUPERVISOR_HOS "the Head of Security" #define SUPERVISOR_QM "the Quartermaster" #define SUPERVISOR_RD "the Research Director" + +/// Mind traits that should be shared by every head of staff. has to be this way cause byond lists lol +#define HEAD_OF_STAFF_MIND_TRAITS TRAIT_FAST_TYING, TRAIT_HIGH_VALUE_RANSOM diff --git a/code/__DEFINES/keybinding.dm b/code/__DEFINES/keybinding.dm index 33178bc7c8be8f..285b7e6ea588f2 100644 --- a/code/__DEFINES/keybinding.dm +++ b/code/__DEFINES/keybinding.dm @@ -40,6 +40,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/lag_switch.dm b/code/__DEFINES/lag_switch.dm index 2152d0d9a55d0e..fc0922a33d348b 100644 --- a/code/__DEFINES/lag_switch.dm +++ b/code/__DEFINES/lag_switch.dm @@ -16,8 +16,8 @@ #define DISABLE_PARALLAX 7 /// Disables footsteps, TRAIT_BYPASS_MEASURES exempted #define DISABLE_FOOTSTEPS 8 -// SKYRAT EDIT ADDITION +// NOVA EDIT ADDITION /// Stops people from changing things in the character creator. Entirely. #define DISABLE_CREATOR 9 -// SKYRAT EDIT END -#define MEASURES_AMOUNT 9 // The total number of switches defined above // SKYRAT EDIT ADDITION +// NOVA EDIT END +#define MEASURES_AMOUNT 9 // The total number of switches defined above // NOVA EDIT ADDITION diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index 0cdad4f72416b0..1ba6879005b8af 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -2,35 +2,31 @@ //KEEP THESE IN A NICE ACSCENDING ORDER, PLEASE //NEVER HAVE ANYTHING BELOW THIS PLANE ADJUST IF YOU NEED MORE SPACE -#define LOWEST_EVER_PLANE -100 +#define LOWEST_EVER_PLANE -50 -#define FIELD_OF_VISION_BLOCKER_PLANE -90 +// Doesn't really layer, just throwing this in here cause it's the best place imo +#define FIELD_OF_VISION_BLOCKER_PLANE -45 #define FIELD_OF_VISION_BLOCKER_RENDER_TARGET "*FIELD_OF_VISION_BLOCKER_RENDER_TARGET" -#define CLICKCATCHER_PLANE -80 +#define CLICKCATCHER_PLANE -40 -#define PLANE_SPACE -25 +#define PLANE_SPACE -21 #define PLANE_SPACE_PARALLAX -20 -#define GRAVITY_PULSE_PLANE -13 +#define GRAVITY_PULSE_PLANE -12 #define GRAVITY_PULSE_RENDER_TARGET "*GRAVPULSE_RENDER_TARGET" -#define RENDER_PLANE_TRANSPARENT -12 //Transparent plane that shows openspace underneath the floor +#define RENDER_PLANE_TRANSPARENT -11 //Transparent plane that shows openspace underneath the floor -#define TRANSPARENT_FLOOR_PLANE -11 +#define TRANSPARENT_FLOOR_PLANE -10 -#define FLOOR_PLANE -10 - -#define WALL_PLANE -9 -#define GAME_PLANE -8 -#define GAME_PLANE_FOV_HIDDEN -7 -#define GAME_PLANE_UPPER -6 -#define WALL_PLANE_UPPER -5 -#define GAME_PLANE_UPPER_FOV_HIDDEN -4 +#define FLOOR_PLANE -6 +#define WALL_PLANE -5 +#define GAME_PLANE -4 +#define ABOVE_GAME_PLANE -3 ///Slightly above the game plane but does not catch mouse clicks. Useful for certain visuals that should be clicked through, like seethrough trees -#define SEETHROUGH_PLANE -3 -#define ABOVE_GAME_PLANE -2 +#define SEETHROUGH_PLANE -2 #define RENDER_PLANE_GAME_WORLD -1 @@ -91,31 +87,36 @@ //-------------------- HUD --------------------- //HUD layer defines -#define HUD_PLANE 40 -#define ABOVE_HUD_PLANE 41 +#define HUD_PLANE 35 +#define ABOVE_HUD_PLANE 36 ///Plane of the "splash" icon used that shows on the lobby screen -#define SPLASHSCREEN_PLANE 50 +#define SPLASHSCREEN_PLANE 37 // The largest plane here must still be less than RENDER_PLANE_GAME //-------------------- Rendering --------------------- -#define RENDER_PLANE_GAME 100 -#define RENDER_PLANE_NON_GAME 101 +#define RENDER_PLANE_GAME 40 +/// If fov is enabled we'll draw game to this and do shit to it +#define RENDER_PLANE_GAME_MASKED 41 +/// The bit of the game plane that is let alone is sent here +#define RENDER_PLANE_GAME_UNMASKED 42 +#define RENDER_PLANE_NON_GAME 45 // Only VERY special planes should be here, as they are above not just the game, but the UI planes as well. /// Plane related to the menu when pressing Escape. /// Needed so that we can apply a blur effect to EVERYTHING, and guarantee we are above all UI. -#define ESCAPE_MENU_PLANE 105 +#define ESCAPE_MENU_PLANE 46 -#define RENDER_PLANE_MASTER 110 +#define RENDER_PLANE_MASTER 50 // Lummox I swear to god I will find you // NOTE! You can only ever have planes greater then -10000, if you add too many with large offsets you will brick multiz // Same can be said for large multiz maps. Tread carefully mappers #define HIGHEST_EVER_PLANE RENDER_PLANE_MASTER /// The range unique planes can be in +/// Try and keep this to a nice whole number, so it's easy to look at a plane var and know what's going on #define PLANE_RANGE (HIGHEST_EVER_PLANE - LOWEST_EVER_PLANE) // PLANE_SPACE layer(s) @@ -188,8 +189,6 @@ #define NOT_HIGH_OBJ_LAYER 3.5 #define HIGH_OBJ_LAYER 3.6 #define BELOW_MOB_LAYER 3.7 - -// GAME_PLANE_FOV_HIDDEN layers #define LOW_MOB_LAYER 3.75 #define LYING_MOB_LAYER 3.8 #define VEHICLE_LAYER 3.9 @@ -199,21 +198,16 @@ #define MOB_ABOVE_PIGGYBACK_LAYER 4.06 #define MOB_UPPER_LAYER 4.07 #define HITSCAN_PROJECTILE_LAYER 4.09 //above all mob but still hidden by FoV - -// GAME_PLANE_UPPER layers #define ABOVE_MOB_LAYER 4.1 #define WALL_OBJ_LAYER 4.25 #define TRAM_SIGNAL_LAYER 4.26 -// WALL_PLANE_UPPER layers #define EDGED_TURF_LAYER 4.3 #define ON_EDGED_TURF_LAYER 4.35 - -// GAME_PLANE_UPPER_FOV_HIDDEN layers #define SPACEVINE_LAYER 4.4 #define LARGE_MOB_LAYER 4.5 #define SPACEVINE_MOB_LAYER 4.6 -// Intermediate layer used by both GAME_PLANE_FOV_HIDDEN and ABOVE_GAME_PLANE +// Intermediate layer used by both GAME_PLANE and ABOVE_GAME_PLANE #define ABOVE_ALL_MOB_LAYER 4.7 // ABOVE_GAME_PLANE layers @@ -229,6 +223,8 @@ */ #define WATER_VISUAL_OVERLAY_LAYER 1000 +// SEETHROUGH_PLANE layers here, tho it has no layer values + //---------- LIGHTING ------------- // LIGHTING_PLANE layers diff --git a/code/__DEFINES/lazy_templates.dm b/code/__DEFINES/lazy_templates.dm index 1e8fab8d92cd0f..1f715778f0d1d3 100644 --- a/code/__DEFINES/lazy_templates.dm +++ b/code/__DEFINES/lazy_templates.dm @@ -11,4 +11,4 @@ "Abductor Ships" = LAZY_TEMPLATE_KEY_ABDUCTOR_SHIPS, \ "Heretic Sacrifice Level" = LAZY_TEMPLATE_KEY_HERETIC_SACRIFICE, \ "Outpost of Cogs" = LAZY_TEMPLATE_KEY_OUTPOST_OF_COGS, \ -) // SKYRAT EDIT ABOVE - OUTPOST OF COGS +) // NOVA EDIT ABOVE - OUTPOST OF COGS diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm index dba718901fba61..576164bd136ada 100644 --- a/code/__DEFINES/lighting.dm +++ b/code/__DEFINES/lighting.dm @@ -22,7 +22,7 @@ /// frequency, in 1/10ths of a second, of the lighting process #define LIGHTING_INTERVAL 5 -#define MINIMUM_USEFUL_LIGHT_RANGE 1.5 // SKYRAT EDIT CHANGE - Original value 1.4 +#define MINIMUM_USEFUL_LIGHT_RANGE 1.5 // NOVA EDIT CHANGE - Original value 1.4 /// type of falloff to use for lighting; 1 for circular, 2 for square #define LIGHTING_FALLOFF 1 diff --git a/code/__DEFINES/logging.dm b/code/__DEFINES/logging.dm index daec53a76ec133..a6102aa6e79380 100644 --- a/code/__DEFINES/logging.dm +++ b/code/__DEFINES/logging.dm @@ -88,8 +88,9 @@ #define LOG_ENTRY_KEY_ID "id" #define LOG_ENTRY_KEY_SCHEMA_VERSION "s-ver" -// Category for invalid/missing categories -#define LOG_CATEGORY_NOT_FOUND "invalid-category" +// Internal categories +#define LOG_CATEGORY_INTERNAL_CATEGORY_NOT_FOUND "internal-category-not-found" +#define LOG_CATEGORY_INTERNAL_ERROR "internal-error" // Misc categories #define LOG_CATEGORY_ATTACK "attack" diff --git a/code/__DEFINES/loot.dm b/code/__DEFINES/loot.dm deleted file mode 100644 index 3dd7d94808e8f7..00000000000000 --- a/code/__DEFINES/loot.dm +++ /dev/null @@ -1,13 +0,0 @@ -/// The loot table for spawning a random crate -#define RANDOM_CRATE_LOOT list( \ - /obj/structure/closet/crate = 20, \ - /obj/structure/closet/crate/wooden = 1, \ - /obj/structure/closet/crate/internals = 1, \ - /obj/structure/closet/crate/medical = 1, \ - /obj/structure/closet/crate/freezer = 1, \ - /obj/structure/closet/crate/radiation = 1, \ - /obj/structure/closet/crate/hydroponics = 1, \ - /obj/structure/closet/crate/engineering = 1, \ - /obj/structure/closet/crate/engineering/electrical = 1, \ - /obj/structure/closet/crate/science = 1, \ -) diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index d5f7c1d15179f0..62f201f015e918 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -66,10 +66,10 @@ /// For wiremod/integrated circuits. Uses various minerals. #define COMPONENT_PRINTER (1<<10) //Note: More than one of these can be added to a design but imprinter and lathe designs are incompatable. -// SKYRAT EDIT ADDITION +// NOVA EDIT ADDITION /// Can be made by the orderable colony fabricator #define COLONY_FABRICATOR (1<<11) -// SKYRAT EDIT END +// NOVA EDIT END #define FIREDOOR_OPEN 1 #define FIREDOOR_CLOSED 2 diff --git a/code/__DEFINES/map_exporter.dm b/code/__DEFINES/map_exporter.dm new file mode 100644 index 00000000000000..becedcd23e5aff --- /dev/null +++ b/code/__DEFINES/map_exporter.dm @@ -0,0 +1,14 @@ +//Bits to save +#define SAVE_OBJECTS (1 << 1) //! Save objects? +#define SAVE_MOBS (1 << 2) //! Save Mobs? +#define SAVE_TURFS (1 << 3) //! Save turfs? +#define SAVE_AREAS (1 << 4) //! Save areas? +#define SAVE_SPACE (1 << 5) //! Save space areas? (If not they will be saved as NOOP) +#define SAVE_OBJECT_PROPERTIES (1 << 6) //! Save custom properties of objects (obj.on_object_saved() output) + +//Ignore turf if it contains +#define SAVE_SHUTTLEAREA_DONTCARE 0 +#define SAVE_SHUTTLEAREA_IGNORE 1 +#define SAVE_SHUTTLEAREA_ONLY 2 + +#define DMM2TGM_MESSAGE "MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE" diff --git a/code/__DEFINES/maths.dm b/code/__DEFINES/maths.dm index 1260e3daf03c1b..ad35588f736d58 100644 --- a/code/__DEFINES/maths.dm +++ b/code/__DEFINES/maths.dm @@ -43,6 +43,10 @@ #define ROUND_UP(x) ( -round(-(x))) +/// Returns the number of digits in a number. Only works on whole numbers. +/// This is marginally faster than string interpolation -> length +#define DIGITS(x) (ROUND_UP(log(10, x))) + // round() acts like floor(x, 1) by default but can't handle other values #define FLOOR(x, y) ( round((x) / (y)) * (y) ) diff --git a/code/__DEFINES/matrices.dm b/code/__DEFINES/matrices.dm index 1bb86f9ff478ac..26ff5a7232a2f1 100644 --- a/code/__DEFINES/matrices.dm +++ b/code/__DEFINES/matrices.dm @@ -1,3 +1,27 @@ /// Helper macro for creating a matrix at the given offsets. /// Works at compile time. #define TRANSLATE_MATRIX(offset_x, offset_y) matrix(1, 0, (offset_x), 0, 1, (offset_y)) +/// The color matrix of an image which colors haven't been altered. Does nothing. +#define COLOR_MATRIX_IDENTITY list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0,0,0,0) +/// Color inversion +#define COLOR_MATRIX_INVERT list(-1,0,0,0, 0,-1,0,0, 0,0,-1,0, 0,0,0,1, 1,1,1,0) +///Sepiatone +#define COLOR_MATRIX_SEPIATONE list(0.393,0.349,0.272,0, 0.769,0.686,0.534,0, 0.189,0.168,0.131,0, 0,0,0,1, 0,0,0,0) +///Grayscale +#define COLOR_MATRIX_GRAYSCALE list(0.33,0.33,0.33,0, 0.59,0.59,0.59,0, 0.11,0.11,0.11,0, 0,0,0,1, 0,0,0,0) +///Polaroid colors +#define COLOR_MATRIX_POLAROID list(1.438,-0.062,-0.062,0, -0.122,1.378,-0.122,0, -0.016,-0.016,1.483,0, 0,0,0,1, 0,0,0,0) +/// Converts reds to blue, green to red and blue to green. +#define COLOR_MATRIX_BRG list(0,0,1,0, 0,1,0,0, 1,0,0,0, 0,0,0,1, 0,0,0,0) +/// Black & White +#define COLOR_MATRIX_BLACK_WHITE list(1.5,1.5,1.5,0, 1.5,1.5,1.5,0, 1.5,1.5,1.5,0, 0,0,0,1, -1,-1,-1,0) +/** + * Adds/subtracts overall lightness + * 0 is identity, 1 makes everything white, -1 makes everything black + */ +#define COLOR_MATRIX_LIGHTNESS(power) list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, power,power,power,0) +/** + * Changes distance colors have from rgb(127,127,127) grey + * 1 is identity. 0 makes everything grey >1 blows out colors and greys + */ +#define COLOR_MATRIX_CONTRAST(val) list(val,0,0,0, 0,val,0,0, 0,0,val,0, 0,0,0,1, (1-val)*0.5,(1-val)*0.5,(1-val)*0.5,0) diff --git a/code/__DEFINES/mecha.dm b/code/__DEFINES/mecha.dm index db65b0b6ee8d3c..0f900f72ee45b7 100644 --- a/code/__DEFINES/mecha.dm +++ b/code/__DEFINES/mecha.dm @@ -6,7 +6,7 @@ #define PANEL_OPEN (1<<0) #define ID_LOCK_ON (1<<1) -#define CANSTRAFE (1<<2) +#define CAN_STRAFE (1<<2) #define LIGHTS_ON (1<<3) #define SILICON_PILOT (1<<4) #define IS_ENCLOSED (1<<5) @@ -46,6 +46,7 @@ #define MECHA_SNOWFLAKE_ID_AIR_TANK "air_tank_snowflake" #define MECHA_SNOWFLAKE_ID_WEAPON_BALLISTIC "ballistic_weapon_snowflake" #define MECHA_SNOWFLAKE_ID_GENERATOR "generator_snowflake" +#define MECHA_SNOWFLAKE_ID_CLAW "lawclaw_snowflake" #define MECHA_AMMO_INCENDIARY "Incendiary bullet" #define MECHA_AMMO_BUCKSHOT "Buckshot shell" diff --git a/code/__DEFINES/melee.dm b/code/__DEFINES/melee.dm index 6cc9f47fa18429..df7320f508566a 100644 --- a/code/__DEFINES/melee.dm +++ b/code/__DEFINES/melee.dm @@ -11,4 +11,4 @@ #define MARTIALART_WRESTLING "wrestling" /// The number of hits required to crit a target -#define HITS_TO_CRIT(damage) round(HUMAN_MAXHEALTH / damage, 0.1) // SKYRAT EDIT - changes the magic health number of 100 to HUMAN_MAXHEALTH. +#define HITS_TO_CRIT(damage) round(HUMAN_MAXHEALTH / damage, 0.1) // NOVA EDIT - changes the magic health number of 100 to HUMAN_MAXHEALTH. diff --git a/code/__DEFINES/mobfactions.dm b/code/__DEFINES/mobfactions.dm index a7dcbee90e8019..7cf2bc58c3c08b 100644 --- a/code/__DEFINES/mobfactions.dm +++ b/code/__DEFINES/mobfactions.dm @@ -21,6 +21,8 @@ #define FACTION_CLOWN "clowns" /// Headslugs #define FACTION_CREATURE "creature" +/// Cats +#define FACTION_CAT "cat" /// Faithless and shadowpeople #define FACTION_FAITHLESS "faithless" /// Gnomes @@ -49,7 +51,7 @@ #define FACTION_MONKEY "monkey" /// Mushrooms and mushroompeople #define FACTION_MUSHROOM "mushroom" -/// Nanotrasen private security +/// Symphionia private security #define FACTION_NANOTRASEN_PRIVATE "nanotrasen_private" /// Mobs from the Netherworld #define FACTION_NETHER "nether" diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 14f1deff7f346a..4c2eea59834cac 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -13,7 +13,7 @@ //Blood levels #define BLOOD_VOLUME_MAX_LETHAL 2150 #define BLOOD_VOLUME_EXCESS 2100 -#define BLOOD_VOLUME_MAXIMUM 1000 // SKYRAT EDIT - Blood volume balancing (mainly for Hemophages as nobody else really goes much above regular blood volume) - ORIGINAL VALUE: 2000 +#define BLOOD_VOLUME_MAXIMUM 1000 // NOVA EDIT - Blood volume balancing (mainly for Hemophages as nobody else really goes much above regular blood volume) - ORIGINAL VALUE: 2000 #define BLOOD_VOLUME_SLIME_SPLIT 1120 #define BLOOD_VOLUME_NORMAL 560 #define BLOOD_VOLUME_SAFE 475 @@ -97,7 +97,7 @@ #define BODYTYPE_ALIEN (1<<7) ///The limb is from a golem #define BODYTYPE_GOLEM (1<<8) -// SKYRAT EDIT ADDITION +// NOVA EDIT ADDITION ///The limb fits a modular custom shape #define BODYTYPE_CUSTOM (1<<9) ///The limb fits a taur body @@ -106,7 +106,7 @@ #define BODYTYPE_HIDE_SHOES (1<<11) ///The limb causes glasses and hats to be drawn on layers 5 and 4 respectively. Currently used for snouts with the (Top) suffix, which are drawn on layer 6 and would normally cover facewear #define BODYTYPE_ALT_FACEWEAR_LAYER (1<<12) -// SKYRAT EDIT END +// NOVA EDIT END #define BODYTYPE_BIOSCRAMBLE_COMPATIBLE (BODYTYPE_HUMANOID | BODYTYPE_MONKEY | BODYTYPE_ALIEN) #define BODYTYPE_CAN_BE_BIOSCRAMBLED(bodytype) (!(bodytype & BODYTYPE_ROBOTIC) && (bodytype & BODYTYPE_BIOSCRAMBLE_COMPATIBLE)) @@ -456,12 +456,12 @@ #define OFFSET_SUIT "suit" #define OFFSET_NECK "neck" #define OFFSET_HELD "held" -#define OFFSET_ACCESSORY "accessory" // Skyrat edit - addition -#define OFFSET_HAIR "hair" // Skyrat edit - addition - Akulas +#define OFFSET_ACCESSORY "accessory" // NOVA EDIT - addition +#define OFFSET_HAIR "hair" // NOVA EDIT - addition - Akulas //MINOR TWEAKS/MISC //#define AGE_MIN 17 //youngest a character can be //ORIGINAL -#define AGE_MIN 18 //youngest a character can be //SKYRAT EDIT CHANGE - age +#define AGE_MIN 18 //youngest a character can be //NOVA EDIT CHANGE - age #define AGE_MAX 85 //oldest a character can be #define AGE_MINOR 20 //legal age of space drinking and smoking #define WIZARD_AGE_MIN 30 //youngest a wizard can be @@ -500,7 +500,6 @@ #define DEFAULT_BRUTE_EXAMINE_TEXT "bruising" #define DEFAULT_BURN_EXAMINE_TEXT "burns" -#define DEFAULT_CLONE_EXAMINE_TEXT "cellular damage" #define ROBOTIC_BRUTE_EXAMINE_TEXT "denting" #define ROBOTIC_BURN_EXAMINE_TEXT "charring" @@ -708,36 +707,36 @@ GLOBAL_LIST_INIT(human_heights_to_offsets, list( /// Total number of layers for mob overlays /// KEEP THIS UP-TO-DATE OR SHIT WILL BREAK /// Also consider updating layers_to_offset -#define TOTAL_LAYERS 40 // SKYRAT EDIT CHANGE - ORIGINAL: 34 +#define TOTAL_LAYERS 40 // NOVA EDIT CHANGE - ORIGINAL: 34 /// Mutations layer - Tk headglows, cold resistance glow, etc -#define MUTATIONS_LAYER 40 // SKYRAT EDIT CHANGE - ORIGINAL: 34 +#define MUTATIONS_LAYER 40 // NOVA EDIT CHANGE - ORIGINAL: 34 /// Mutantrace features (tail when looking south) that must appear behind the body parts -#define BODY_BEHIND_LAYER 39 // SKYRAT EDIT CHANGE - ORIGINAL: 33 +#define BODY_BEHIND_LAYER 39 // NOVA EDIT CHANGE - ORIGINAL: 33 /// Layer for bodyparts that should appear behind every other bodypart - Mostly, legs when facing WEST or EAST -#define BODYPARTS_LOW_LAYER 38 // SKYRAT EDIT CHANGE - ORIGINAL: 32 +#define BODYPARTS_LOW_LAYER 38 // NOVA EDIT CHANGE - ORIGINAL: 32 /// Layer for most bodyparts, appears above BODYPARTS_LOW_LAYER and below BODYPARTS_HIGH_LAYER -#define BODYPARTS_LAYER 37 // SKYRAT EDIT CHANGE - ORIGINAL: 31 +#define BODYPARTS_LAYER 37 // NOVA EDIT CHANGE - ORIGINAL: 31 /// Mutantrace features (snout, body markings) that must appear above the body parts -#define BODY_ADJ_LAYER 36 // SKYRAT EDIT CHANGE - ORIGINAL: 30 +#define BODY_ADJ_LAYER 36 // NOVA EDIT CHANGE - ORIGINAL: 30 /// Underwear, undershirts, socks, eyes, lips(makeup) -#define BODY_LAYER 35 // SKYRAT EDIT CHANGE - ORIGINAL: 29 +#define BODY_LAYER 35 // NOVA EDIT CHANGE - ORIGINAL: 29 /// Mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes) -#define FRONT_MUTATIONS_LAYER 34 // SKYRAT EDIT CHANGE - ORIGINAL: 28 +#define FRONT_MUTATIONS_LAYER 34 // NOVA EDIT CHANGE - ORIGINAL: 28 /// Damage indicators (cuts and burns) -#define DAMAGE_LAYER 33 // SKYRAT EDIT CHANGE - ORIGINAL: 27 -// SKYRAT EDIT ADDITION START +#define DAMAGE_LAYER 33 // NOVA EDIT CHANGE - ORIGINAL: 27 +// NOVA EDIT ADDITION START /// This layer is used for things that shouldn't be over clothes, but should be over mutations #define BODY_FRONT_UNDER_CLOTHES 32 -// SKYRAT EDIT ADDITION END +// NOVA EDIT ADDITION END /// Jumpsuit clothing layer -#define UNIFORM_LAYER 31 // SKYRAT EDIT CHANGE - ORIGINAL: 26 -// SKYRAT EDIT ADDITION BEGIN - cursed layers under clothing +#define UNIFORM_LAYER 31 // NOVA EDIT CHANGE - ORIGINAL: 26 +// NOVA EDIT ADDITION BEGIN - cursed layers under clothing #define ANUS_LAYER 30 #define VAGINA_LAYER 29 #define PENIS_LAYER 28 #define NIPPLES_LAYER 27 #define BANDAGE_LAYER 26 -//SKYRAT EDIT ADDITION END +//NOVA EDIT ADDITION END /// ID card layer #define ID_LAYER 25 /// ID card layer (might be deprecated) @@ -840,14 +839,14 @@ GLOBAL_LIST_INIT(layers_to_offset, list( #define EXTERNAL_ADJACENT (1 << 2) /// Draws organ on the BODY_BEHIND_LAYER #define EXTERNAL_BEHIND (1 << 3) -// SKYRAT EDIT ADDITION - Customization +// NOVA EDIT ADDITION - Customization /// Draws organ on the BODY_FRONT_UNDER_CLOTHES #define EXTERNAL_FRONT_UNDER_CLOTHES (1 << 4) /// Draws organ on the ABOVE_BODY_FRONT_HEAD_LAYER #define EXTERNAL_FRONT_OVER (1 << 5) /// Draws organ on the HEAD_LAYER, for things that need to be above hair but below hats. #define EXTERNAL_FRONT_ABOVE_HAIR (1 << 6) -// SKYRAT EDIT END (not touching what comes next because we don't actually have to (nor want to)) +// NOVA EDIT END (not touching what comes next because we don't actually have to (nor want to)) /// Draws organ on all EXTERNAL layers #define ALL_EXTERNAL_OVERLAYS EXTERNAL_FRONT | EXTERNAL_ADJACENT | EXTERNAL_BEHIND @@ -933,39 +932,37 @@ GLOBAL_LIST_INIT(layers_to_offset, list( #define HEAL_TOX (1<<3) /// Heals all oxyloss. #define HEAL_OXY (1<<4) -/// Heals all cellular damage. -#define HEAL_CLONE (1<<5) /// Heals all stamina damage. -#define HEAL_STAM (1<<6) +#define HEAL_STAM (1<<5) /// Restore all limbs to their initial state. -#define HEAL_LIMBS (1<<7) +#define HEAL_LIMBS (1<<6) /// Heals all organs from failing. -#define HEAL_ORGANS (1<<8) +#define HEAL_ORGANS (1<<7) /// A "super" heal organs, this refreshes all organs entirely, deleting old and replacing them with new. -#define HEAL_REFRESH_ORGANS (1<<9) +#define HEAL_REFRESH_ORGANS (1<<8) /// Removes all wounds. -#define HEAL_WOUNDS (1<<10) +#define HEAL_WOUNDS (1<<9) /// Removes all brain traumas, not including permanent ones. -#define HEAL_TRAUMAS (1<<11) +#define HEAL_TRAUMAS (1<<10) /// Removes all reagents present. -#define HEAL_ALL_REAGENTS (1<<12) +#define HEAL_ALL_REAGENTS (1<<11) /// Removes all non-positive diseases. -#define HEAL_NEGATIVE_DISEASES (1<<13) +#define HEAL_NEGATIVE_DISEASES (1<<12) /// Restores body temperature back to nominal. -#define HEAL_TEMP (1<<14) +#define HEAL_TEMP (1<<13) /// Restores blood levels to normal. -#define HEAL_BLOOD (1<<15) +#define HEAL_BLOOD (1<<14) /// Removes all non-positive mutations (neutral included). -#define HEAL_NEGATIVE_MUTATIONS (1<<16) +#define HEAL_NEGATIVE_MUTATIONS (1<<15) /// Removes status effects with this flag set that also have remove_on_fullheal = TRUE. -#define HEAL_STATUS (1<<17) +#define HEAL_STATUS (1<<16) /// Same as above, removes all CC related status effects with this flag set that also have remove_on_fullheal = TRUE. -#define HEAL_CC_STATUS (1<<18) +#define HEAL_CC_STATUS (1<<17) /// Deletes any restraints on the mob (handcuffs / legcuffs) -#define HEAL_RESTRAINTS (1<<19) +#define HEAL_RESTRAINTS (1<<18) /// Combination flag to only heal the main damage types. -#define HEAL_DAMAGE (HEAL_BRUTE|HEAL_BURN|HEAL_TOX|HEAL_OXY|HEAL_CLONE|HEAL_STAM) +#define HEAL_DAMAGE (HEAL_BRUTE|HEAL_BURN|HEAL_TOX|HEAL_OXY|HEAL_STAM) /// Combination flag to only heal things messed up things about the mob's body itself. #define HEAL_BODY (HEAL_LIMBS|HEAL_ORGANS|HEAL_REFRESH_ORGANS|HEAL_WOUNDS|HEAL_TRAUMAS|HEAL_BLOOD|HEAL_TEMP) /// Combination flag to heal negative things affecting the mob. diff --git a/code/__DEFINES/modular_computer.dm b/code/__DEFINES/modular_computer.dm index 1c9f3b59ecd04e..81054d0c1875fa 100644 --- a/code/__DEFINES/modular_computer.dm +++ b/code/__DEFINES/modular_computer.dm @@ -1,37 +1,78 @@ -//NTNet stuff, for modular computers - -//Caps for NTNet logging. Less than 10 would make logging useless anyway, more than 500 may make the log browser too laggy. Defaults to 100 unless user changes it. -#define MAX_NTNET_LOGS 300 -#define MIN_NTNET_LOGS 10 - -//Program bitflags +/** + * can_run_on_flags bitflags + * Used by programs to tell what type of ModPC it can run on. + * Everything a program can run on needs valid icons for each individual one. + */ +///Runs on everything. #define PROGRAM_ALL ALL +///Can run on Modular PC Consoles #define PROGRAM_CONSOLE (1<<0) +///Can run on Laptops. #define PROGRAM_LAPTOP (1<<1) -#define PROGRAM_TABLET (1<<2) +///Can run on PDAs. +#define PROGRAM_PDA (1<<2) + +/** + * program_flags + * Used by programs to tell the ModPC any special functions it has. + */ +///If the program requires NTNet to be online for it to work. +#define PROGRAM_REQUIRES_NTNET (1<<0) +///The program can be downloaded from the default NTNet downloader store. +#define PROGRAM_ON_NTNET_STORE (1<<1) +///The program can only be downloaded from the Syndinet store, usually nukie/emagged pda. +#define PROGRAM_ON_SYNDINET_STORE (1<<2) +///The program is unique and will delete itself upon being transferred to ensure only one copy exists. +#define PROGRAM_UNIQUE_COPY (1<<3) +///The program is a header and will show up at the top of the ModPC's UI. +#define PROGRAM_HEADER (1<<4) +///The program will run despite the ModPC not having any power in it. +#define PROGRAM_RUNS_WITHOUT_POWER (1<<5) + //Program categories -#define PROGRAM_CATEGORY_CREW "Crew" -#define PROGRAM_CATEGORY_ENGI "Engineering" -#define PROGRAM_CATEGORY_SUPL "Supply" -#define PROGRAM_CATEGORY_SCI "Science" -#define PROGRAM_CATEGORY_MISC "Other" +#define PROGRAM_CATEGORY_DEVICE "Device Tools" +#define PROGRAM_CATEGORY_EQUIPMENT "Equipment" +#define PROGRAM_CATEGORY_GAMES "Games" +#define PROGRAM_CATEGORY_SECURITY "Security & Records" +#define PROGRAM_CATEGORY_ENGINEERING "Engineering" +#define PROGRAM_CATEGORY_SUPPLY "Supply" +#define PROGRAM_CATEGORY_SCIENCE "Science" + +///The default amount a program should take in cell use. +#define PROGRAM_BASIC_CELL_USE 15 +///This app grants a minor protection against being PDA bombed if installed. +///(can sometimes prevent it from being sent, while wasting a PDA bomb from the sender). #define DETOMATIX_RESIST_MINOR 1 +///This app grants a larger protection against being PDA bombed if installed. +///(can sometimes prevent it from being sent, while wasting a PDA bomb from the sender). #define DETOMATIX_RESIST_MAJOR 2 +///This app gives a diminished protection against being PDA bombed if installed. +#define DETOMATIX_RESIST_MALUS -4 -//NTNet transfer speeds, used when downloading/uploading a file/program. -#define NTNETSPEED_LOWSIGNAL 0.5 // GQ/s transfer speed when the device is wirelessly connected and on Low signal -#define NTNETSPEED_HIGHSIGNAL 1 // GQ/s transfer speed when the device is wirelessly connected and on High signal -#define NTNETSPEED_ETHERNET 2 // GQ/s transfer speed when the device is using wired connection +/** + * NTNet transfer speeds, used when downloading/uploading a file/program. + * The define is how fast it will download an app every program's process_tick. + */ +///Used for wireless devices with low signal. +#define NTNETSPEED_LOWSIGNAL 0.5 +///Used for wireless devices with high signal. +#define NTNETSPEED_HIGHSIGNAL 1 +///Used for laptops with a high signal, or computers, which is connected regardless of z level. +#define NTNETSPEED_ETHERNET 2 -// NTNet connection signals -///When you're away from the station/mining base and not on a console, you can't access the internet +/** + * NTNet connection signals + * Used to calculate the defines above from NTNet Downloader, this is how + * good a ModPC's signal is. + */ +///When you're away from the station/mining base and not on a console, you can't access the internet. #define NTNET_NO_SIGNAL 0 ///Low signal, so away from the station, but still connected #define NTNET_LOW_SIGNAL 1 -///On station, good signal +///On station with good signal. #define NTNET_GOOD_SIGNAL 2 -///Using a Computer, ethernet-connected. +///Using a Computer or Laptop with good signal, ethernet-connected. #define NTNET_ETHERNET_SIGNAL 3 /// The default ringtone of the Messenger app. @@ -40,6 +81,11 @@ /// The maximum length of the ringtone of the Messenger app. #define MESSENGER_RINGTONE_MAX_LENGTH 20 +/** + * PDA Themes + * For these to work, the defines must be defined in tgui/styles/themes/[define].scss + */ + ///Default NtOS PDA theme #define PDA_THEME_NTOS "ntos" #define PDA_THEME_DARK_MODE "ntos_darkmode" @@ -47,7 +93,7 @@ #define PDA_THEME_SYNTH "ntos_synth" #define PDA_THEME_TERMINAL "ntos_terminal" -///Emagged/Syndicate NtOS (SyndiOS) PDA theme +///Emagged/Symphionia NtOS (SyndiOS) PDA theme #define PDA_THEME_SYNDICATE "syndicate" //Maintenance-loot themes @@ -61,7 +107,7 @@ #define PDA_THEME_RETRO_NAME "Retro" #define PDA_THEME_SYNTH_NAME "Synth" #define PDA_THEME_TERMINAL_NAME "Terminal" -#define SYNDICATE_THEME_NAME "Syndicate" +#define SYNDICATE_THEME_NAME "Symphionia" #define CAT_THEME_NAME "Cat" #define LIGHT_THEME_NAME "NtOS Light Mode" #define ELDRITCH_THEME_NAME "Eldritch" diff --git a/code/__DEFINES/movement.dm b/code/__DEFINES/movement.dm index f71871f964a2ef..540e5f7914c246 100644 --- a/code/__DEFINES/movement.dm +++ b/code/__DEFINES/movement.dm @@ -39,6 +39,14 @@ GLOBAL_VAR_INIT(glide_size_multiplier, 1.0) ///Is the loop moving the movable outside its control, like it's an external force? e.g. footsteps won't play if enabled. #define MOVEMENT_LOOP_OUTSIDE_CONTROL (1<<4) +// Movement loop status flags +/// Has the loop been paused, soon to be resumed? +#define MOVELOOP_STATUS_PAUSED (1<<0) +/// Is the loop running? (Is true even when paused) +#define MOVELOOP_STATUS_RUNNING (1<<1) +/// Is the loop queued in a subsystem? +#define MOVELOOP_STATUS_QUEUED (1<<2) + /** * Returns a bitfield containing flags both present in `flags` arg and the `processing_move_loop_flags` move_packet variable. * Has no use outside of procs called within the movement proc chain. diff --git a/code/__DEFINES/nozzle_define.dm b/code/__DEFINES/nozzle_define.dm new file mode 100644 index 00000000000000..06b43c1acc6955 --- /dev/null +++ b/code/__DEFINES/nozzle_define.dm @@ -0,0 +1,4 @@ +/// 3 differnt modes for the firefighter extinquisher +#define EXTINGUISHER 0 +#define RESIN_LAUNCHER 1 +#define RESIN_FOAM 2 diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm index 660d05854fd327..9427328fcc2650 100644 --- a/code/__DEFINES/obj_flags.dm +++ b/code/__DEFINES/obj_flags.dm @@ -13,6 +13,9 @@ #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) +#define INFINITE_RESKIN (1<<12) // We can reskin this item infinitely +#define CONDUCTS_ELECTRICITY (1<<13) //! Can this object conduct electricity? +#define NO_DECONSTRUCTION (1<<14) //! Prevent deconstruction of this object. // If you add new ones, be sure to add them to /obj/Initialize as well for complete mapping support diff --git a/code/__DEFINES/observers.dm b/code/__DEFINES/observers.dm new file mode 100644 index 00000000000000..0bacf223d8c026 --- /dev/null +++ b/code/__DEFINES/observers.dm @@ -0,0 +1,12 @@ +// Various flags for notify_ghosts ghost popups. +/// Determines if the notification will not run if called during mapload. +#define GHOST_NOTIFY_IGNORE_MAPLOAD (1<<0) +/// Determines if the notification will flash the Byond window. +#define GHOST_NOTIFY_FLASH_WINDOW (1<<1) +/// Determines if the notification will notify suiciders. +#define GHOST_NOTIFY_NOTIFY_SUICIDERS (1<<2) + +/// The default set of flags to be passed into a notify_ghosts call. +#define NOTIFY_CATEGORY_DEFAULT (GHOST_NOTIFY_FLASH_WINDOW | GHOST_NOTIFY_IGNORE_MAPLOAD | GHOST_NOTIFY_NOTIFY_SUICIDERS) +/// The default set of flags, without the flash_window flag. +#define NOTIFY_CATEGORY_NOFLASH (NOTIFY_CATEGORY_DEFAULT & ~GHOST_NOTIFY_FLASH_WINDOW) diff --git a/code/__DEFINES/organ_movement.dm b/code/__DEFINES/organ_movement.dm new file mode 100644 index 00000000000000..16f003ede81344 --- /dev/null +++ b/code/__DEFINES/organ_movement.dm @@ -0,0 +1,4 @@ +/// Delete the organ if replaced +#define DELETE_IF_REPLACED (1<<0) +/// When deleting a brain, we don't delete the identity and the player can keep playing +#define NO_ID_TRANSFER (1<<1) diff --git a/code/__DEFINES/pai.dm b/code/__DEFINES/pai.dm index 356cbc28843852..c2b4cf7ba842b4 100644 --- a/code/__DEFINES/pai.dm +++ b/code/__DEFINES/pai.dm @@ -12,7 +12,7 @@ #define PAI_SPAM_TIME (40 SECONDS) /// Maximum distance you can set the holoform leash -#define HOLOFORM_MAX_RANGE 25 // SKYRAT EDIT CHANGE - ORIGINAL: #define HOLOFORM_MAX_RANGE 9 +#define HOLOFORM_MAX_RANGE 25 // NOVA EDIT CHANGE - ORIGINAL: #define HOLOFORM_MAX_RANGE 9 /// Minimum distance you can set the holoform leash #define HOLOFORM_MIN_RANGE 3 /// Default holoform leash distance diff --git a/code/__DEFINES/pinpointers.dm b/code/__DEFINES/pinpointers.dm index 75f0452ea9261c..b57f55be119751 100644 --- a/code/__DEFINES/pinpointers.dm +++ b/code/__DEFINES/pinpointers.dm @@ -1,4 +1,4 @@ //I would rather have these in pinpointer.dm, but Malf_Modules.dm is loaded before that file so they need to be here. #define TRACK_NUKE_DISK 1 //We track the nuclear authentication disk, either to protect it or steal it #define TRACK_MALF_AI 2 //We track the malfunctioning AI, so we can prevent it from blowing us all up -#define TRACK_INFILTRATOR 3 //We track the Syndicate infiltrator, so we can get back to ship when the nuke's armed +#define TRACK_INFILTRATOR 3 //We track the Symphionia infiltrator, so we can get back to ship when the nuke's armed diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index 6b34d064406ed0..44a9115ec2dfcf 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -60,7 +60,7 @@ // Playtime tracking system, see jobs_exp.dm #define EXP_TYPE_LIVING "Living" #define EXP_TYPE_CREW "Crew" -#define EXP_TYPE_CENTRAL_COMMAND "Central Command" // SKYRAT EDIT ADD +#define EXP_TYPE_CENTRAL_COMMAND "Central Command" // NOVA EDIT ADD #define EXP_TYPE_COMMAND "Command" #define EXP_TYPE_ENGINEERING "Engineering" #define EXP_TYPE_MEDICAL "Medical" @@ -132,6 +132,9 @@ /// such as hair color being affixed to hair. #define PREFERENCE_CATEGORY_SUPPLEMENTAL_FEATURES "supplemental_features" +/// These preferences will not be rendered on the preferences page, and are practically invisible unless specifically rendered. Used for quirks, currently. +#define PREFERENCE_CATEGORY_MANUALLY_RENDERED "manually_rendered_features" + // Playtime is tracked in minutes /// The time needed to unlock hardcore random mode in preferences #define PLAYTIME_HARDCORE_RANDOM 120 // 2 hours diff --git a/code/__DEFINES/projectiles.dm b/code/__DEFINES/projectiles.dm index a82ac8422c5aef..a72120cb4e5152 100644 --- a/code/__DEFINES/projectiles.dm +++ b/code/__DEFINES/projectiles.dm @@ -14,7 +14,7 @@ #define CALIBER_A7MM "a7mm" /// The caliber used by the [security auto-rifle][/obj/item/gun/ballistic/automatic/wt550]. #define CALIBER_46X30MM "4.6x30mm" -/// The caliber used by the Nanotrasen Saber SMG, PP-95 SMG and Type U3 Uzi. Also used as the default caliber for pistols but only the stechkin APS machine pistol doesn't override it. +/// The caliber used by the Symphionia Saber SMG, PP-95 SMG and Type U3 Uzi. Also used as the default caliber for pistols but only the stechkin APS machine pistol doesn't override it. #define CALIBER_9MM "9mm" /// The caliber used as the default for ballistic guns. Only not overridden for the [surplus rifle][/obj/item/gun/ballistic/automatic/surplus]. #define CALIBER_10MM "10mm" @@ -52,6 +52,14 @@ #define CALIBER_ARROW "arrow" /// The caliber used by the harpoon gun. #define CALIBER_HARPOON "harpoon" +/// The caliber used by the rebar crossbow. +#define CALIBER_REBAR "sharpened iron rod" +/// The caliber used by the rebar crossbow when forced to hold 2 rods. +#define CALIBER_REBAR_FORCED "sharpened iron rod" +/// The caliber used by the syndicate rebar crossbow. +#define CALIBER_REBAR_SYNDIE "jagged iron rod" +/// The caliber used by the syndicate rebar crossbow. +#define CALIBER_REBAR_SYNDIE_NORMAL "sharpened iron rod" /// The caliber used by the meat hook. #define CALIBER_HOOK "hook" /// The caliber used by the changeling tentacle mutation. diff --git a/code/__DEFINES/radio.dm b/code/__DEFINES/radio.dm index 686c42e07d0751..ee64478c15b19b 100644 --- a/code/__DEFINES/radio.dm +++ b/code/__DEFINES/radio.dm @@ -38,7 +38,7 @@ #define RADIO_TOKEN_AI_PRIVATE ":o" -#define RADIO_CHANNEL_SYNDICATE "Syndicate" +#define RADIO_CHANNEL_SYNDICATE "Symphionia" #define RADIO_KEY_SYNDICATE "t" #define RADIO_TOKEN_SYNDICATE ":t" diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm index 56b9c1cea2ca1b..533bff874ff219 100644 --- a/code/__DEFINES/reagents.dm +++ b/code/__DEFINES/reagents.dm @@ -58,8 +58,10 @@ #define ALLERGIC_REMOVAL_SKIP "Allergy" //Used in holder.dm/equlibrium.dm to set values and volume limits -///the minimum volume of reagents than can be operated on. +///The minimum volume of reagents than can be operated on. #define CHEMICAL_QUANTISATION_LEVEL 0.0001 +///Sanity check limit to clamp chems to sane amounts and prevent rounding errors during transfer. +#define CHEMICAL_VOLUME_ROUNDING 0.01 ///Default pH for reagents datum #define CHEMICAL_NORMAL_PH 7.000 ///Minimum pH attainable by a solution @@ -134,11 +136,11 @@ #define MAX_ADDICTION_POINTS 1000 ///Addiction start/ends -#define WITHDRAWAL_STAGE1_START_CYCLE 121 // SKYRAT EDIT CHANGE - Original 61 -#define WITHDRAWAL_STAGE1_END_CYCLE 240 // SKYRAT EDIT CHANGE - Original 120 -#define WITHDRAWAL_STAGE2_START_CYCLE 241 // SKYRAT EDIT CHANGE - Original 121 -#define WITHDRAWAL_STAGE2_END_CYCLE 360 // SKYRAT EDIT CHANGE - Original 180 -#define WITHDRAWAL_STAGE3_START_CYCLE 361 // SKYRAT EDIT CHANGE - Original 181 +#define WITHDRAWAL_STAGE1_START_CYCLE 121 // NOVA EDIT CHANGE - Original 61 +#define WITHDRAWAL_STAGE1_END_CYCLE 240 // NOVA EDIT CHANGE - Original 120 +#define WITHDRAWAL_STAGE2_START_CYCLE 241 // NOVA EDIT CHANGE - Original 121 +#define WITHDRAWAL_STAGE2_END_CYCLE 360 // NOVA EDIT CHANGE - Original 180 +#define WITHDRAWAL_STAGE3_START_CYCLE 361 // NOVA EDIT CHANGE - Original 181 ///reagent tags - used to look up reagents for specific effects. Feel free to add to but comment it /// This reagent does brute effects (BOTH damaging and healing) @@ -149,42 +151,48 @@ #define REACTION_TAG_TOXIN (1<<2) /// This reagent does oxy effects (BOTH damaging and healing) #define REACTION_TAG_OXY (1<<3) -/// This reagent does clone effects (BOTH damaging and healing) -#define REACTION_TAG_CLONE (1<<4) /// This reagent primarily heals, or it's supposed to be used for healing (in the case of c2 - they are healing) -#define REACTION_TAG_HEALING (1<<5) +#define REACTION_TAG_HEALING (1<<4) /// This reagent primarily damages -#define REACTION_TAG_DAMAGING (1<<6) +#define REACTION_TAG_DAMAGING (1<<5) /// This reagent explodes as a part of it's intended effect (i.e. not overheated/impure) -#define REACTION_TAG_EXPLOSIVE (1<<7) +#define REACTION_TAG_EXPLOSIVE (1<<6) /// This reagent does things that are unique and special -#define REACTION_TAG_OTHER (1<<8) +#define REACTION_TAG_OTHER (1<<7) /// This reagent's reaction is dangerous to create (i.e. explodes if you fail it) -#define REACTION_TAG_DANGEROUS (1<<9) +#define REACTION_TAG_DANGEROUS (1<<8) /// This reagent's reaction is easy -#define REACTION_TAG_EASY (1<<10) +#define REACTION_TAG_EASY (1<<9) /// This reagent's reaction is difficult/involved -#define REACTION_TAG_MODERATE (1<<11) +#define REACTION_TAG_MODERATE (1<<10) /// This reagent's reaction is hard -#define REACTION_TAG_HARD (1<<12) +#define REACTION_TAG_HARD (1<<11) /// This reagent affects organs -#define REACTION_TAG_ORGAN (1<<13) +#define REACTION_TAG_ORGAN (1<<12) /// This reaction creates a drink reagent -#define REACTION_TAG_DRINK (1<<14) +#define REACTION_TAG_DRINK (1<<13) /// This reaction has something to do with food -#define REACTION_TAG_FOOD (1<<15) +#define REACTION_TAG_FOOD (1<<14) /// This reaction is a slime reaction -#define REACTION_TAG_SLIME (1<<16) +#define REACTION_TAG_SLIME (1<<15) /// This reaction is a drug reaction -#define REACTION_TAG_DRUG (1<<17) +#define REACTION_TAG_DRUG (1<<16) /// This reaction is a unique reaction -#define REACTION_TAG_UNIQUE (1<<18) +#define REACTION_TAG_UNIQUE (1<<17) /// This reaction is produces a product that affects reactions -#define REACTION_TAG_CHEMICAL (1<<19) +#define REACTION_TAG_CHEMICAL (1<<18) /// This reaction is produces a product that affects plants -#define REACTION_TAG_PLANT (1<<20) +#define REACTION_TAG_PLANT (1<<19) /// This reaction is produces a product that affects plants -#define REACTION_TAG_COMPETITIVE (1<<21) +#define REACTION_TAG_COMPETITIVE (1<<20) + +//flags used by holder.dm to locate an reagent +///Direct type +#define REAGENT_STRICT_TYPE (1<<0) +///Parent type but not sub types for e.g. if param is obj/item it will look for obj/item/stack but not obj/item/stack/sheet +#define REAGENT_PARENT_TYPE (1<<1) +///same as istype() check +#define REAGENT_SUB_TYPE (1<<2) #define RNGCHEM_INPUT "input" #define RNGCHEM_CATALYSTS "catalysts" diff --git a/code/__DEFINES/religion.dm b/code/__DEFINES/religion.dm index 0db0961c12da5d..3074dae2987915 100644 --- a/code/__DEFINES/religion.dm +++ b/code/__DEFINES/religion.dm @@ -9,6 +9,12 @@ #define ALIGNMENT_NEUT "neutral" #define ALIGNMENT_EVIL "evil" +///how many lines multiplied by tempo should at least be higher than this. Makes people have to choose a long enough song to get the final effect. +#define FESTIVAL_SONG_LONG_ENOUGH 170 + +/// the probability, when not overridden by sects, for a bible's bless effect to trigger on a smack +#define DEFAULT_SMACK_CHANCE 60 + //## which weapons should we use? // unused but for clarity diff --git a/code/__DEFINES/research.dm b/code/__DEFINES/research.dm index 52ee2c87f4ed36..005c67ae1a3eeb 100644 --- a/code/__DEFINES/research.dm +++ b/code/__DEFINES/research.dm @@ -1,10 +1,6 @@ -#define RDSCREEN_NOBREAK "" - /// For instances where we don't want a design showing up due to it being for debug/sanity purposes #define DESIGN_ID_IGNORE "IGNORE_THIS_DESIGN" -#define RESEARCH_MATERIAL_DESTROY_ID "__destroy" - //! Techweb names for new point types. Can be used to define specific point values for specific types of research (science, security, engineering, etc.) #define TECHWEB_POINT_TYPE_GENERIC "General Research" @@ -55,7 +51,6 @@ #define CELL_LINE_TABLE_WALKING_MUSHROOM "cell_line_walking_mushroom_table" #define CELL_LINE_TABLE_QUEEN_BEE "cell_line_bee_queen_table" #define CELL_LINE_TABLE_BUTTERFLY "cell_line_butterfly_table" -#define CELL_LINE_TABLE_LEAPER "cell_line_leaper_table" #define CELL_LINE_TABLE_MEGA_ARACHNID "cell_line_table_mega_arachnid" //! All cell virus types diff --git a/code/__DEFINES/research/anomalies.dm b/code/__DEFINES/research/anomalies.dm index 12a114439c7d90..0ae1c24b0e30d6 100644 --- a/code/__DEFINES/research/anomalies.dm +++ b/code/__DEFINES/research/anomalies.dm @@ -44,6 +44,9 @@ GLOBAL_LIST_INIT(bioscrambler_organs_blacklist, typecacheof(list ( /obj/item/organ/internal/monster_core, /obj/item/organ/internal/vocal_cords/colossus, /obj/item/organ/internal/zombie_infection, + /obj/item/organ/internal/empowered_borer_egg, // NOVA EDIT ADDITION + /obj/item/organ/internal/eyes/robotic, // NOVA EDIT ADDITION + /obj/item/organ/internal/eyes/night_vision/cyber, // NOVA EDIT ADDITION ))) /// List of body parts we can apply to people diff --git a/code/__DEFINES/research/research_categories.dm b/code/__DEFINES/research/research_categories.dm index e8d426fcfc5a7c..65de3edca532e7 100644 --- a/code/__DEFINES/research/research_categories.dm +++ b/code/__DEFINES/research/research_categories.dm @@ -126,6 +126,7 @@ #define RND_SUBCATEGORY_EXOSUIT_BOARDS_SAVANNAH_IVANOV "/Savannah-Ivanov" #define RND_CATEGORY_MECHFAB_RIPLEY "/Ripley" +#define RND_CATEGORY_MECHFAB_PADDY "/Paddy" #define RND_CATEGORY_MECHFAB_ODYSSEUS "/Odysseus" #define RND_CATEGORY_MECHFAB_GYGAX "/Gygax" #define RND_CATEGORY_MECHFAB_DURAND "/Durand" @@ -186,6 +187,7 @@ #define RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_TOOLS "/Cybernetic Implanting Tools" #define RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_UTILITY "/Cybernetic Utility Implants" #define RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_MISC "/Cybernetic Miscellaneous Implants" +#define RND_SUBCATEGORY_CYBERNETICS_ADVANCED_LIMBS "/Cybernetic Advanced Limbs" // Limb Categories #define RND_CATEGORY_LIMBS_DIGITIGRADE "digitigrade" diff --git a/code/__DEFINES/research/slimes.dm b/code/__DEFINES/research/slimes.dm index 64a85afc217f9e..59410564928159 100644 --- a/code/__DEFINES/research/slimes.dm +++ b/code/__DEFINES/research/slimes.dm @@ -1,7 +1,13 @@ +#define SLIME_LIFE_STAGE_BABY "baby" +#define SLIME_LIFE_STAGE_ADULT "adult" + +#define SLIME_MIN_POWER 0 +#define SLIME_MEDIUM_POWER 5 +#define SLIME_MAX_POWER 10 + // Just slimin' here. -// Warning: These defines are used for slime cores and their icon states, so if you -// touch these names, remember to update icons/mob/simple/slimes.dmi and the respective -// slime core paths too! +// Warning: These defines are used for slime icon states, so if you +// touch these names, remember to update icons/mob/simple/slimes.dmi! #define SLIME_TYPE_ADAMANTINE "adamantine" #define SLIME_TYPE_BLACK "black" diff --git a/code/__DEFINES/robots.dm b/code/__DEFINES/robots.dm index 4d32c136331e33..1bf758711754a0 100644 --- a/code/__DEFINES/robots.dm +++ b/code/__DEFINES/robots.dm @@ -51,14 +51,14 @@ ///Third Borg module slot. #define BORG_CHOOSE_MODULE_THREE 3 -// SKYRAT EDIT START - TODO - Move this upstream later +// NOVA EDIT START - TODO - Move this upstream later /// To store all the different cyborg models, instead of creating that for each cyborg. GLOBAL_LIST_EMPTY(cyborg_model_list) /// To store all of the different base cyborg model icons, instead of creating them every time the pick_module() proc is called. GLOBAL_LIST_EMPTY(cyborg_base_models_icon_list) /// To store all of the different cyborg model icons, instead of creating them every time the be_transformed_to() proc is called. GLOBAL_LIST_EMPTY(cyborg_all_models_icon_list) -// SKYRAT EDIT END +// NOVA EDIT END #define SKIN_ICON "skin_icon" #define SKIN_ICON_STATE "skin_icon_state" @@ -113,6 +113,22 @@ GLOBAL_LIST_EMPTY(cyborg_all_models_icon_list) ///The Bot has been hacked by a Silicon, emagging them, but revertable. #define BOT_COVER_HACKED (1<<3) + +//basic bots defines + +///is our maintenancle panel currently open +#define BOT_MAINTS_PANEL_OPEN (1<<0) +///is our control panel currently open +#define BOT_CONTROL_PANEL_OPEN (1<<1) + +///bitfield for our access flags +DEFINE_BITFIELD(bot_access_flags, list( + "MAINTS_OPEN" = BOT_MAINTS_PANEL_OPEN, + "CONTROL_OPEN" = BOT_CONTROL_PANEL_OPEN, + "COVER_EMAGGED" = BOT_COVER_EMAGGED, + "COVER_HACKED" = BOT_COVER_HACKED, +)) + //Bot types /// Secutritrons (Beepsky) #define SEC_BOT "Securitron" @@ -140,8 +156,6 @@ GLOBAL_LIST_EMPTY(cyborg_all_models_icon_list) #define BOT_IDLE "Idle" /// Found target, hunting #define BOT_HUNT "In Pursuit" -/// Currently tipped over. -#define BOT_TIPPED "Tipped" /// Start patrol #define BOT_START_PATROL "Beginning Patrol" /// Patrolling @@ -185,6 +199,11 @@ GLOBAL_LIST_EMPTY(cyborg_all_models_icon_list) #define JUDGE_WEAPONCHECK (1<<2) #define JUDGE_RECORDCHECK (1<<3) +/// Above this level of assessed threat, Beepsky will attack you +#define THREAT_ASSESS_DANGEROUS 4 +/// Above this level of assessed threat, you are extremely threatening +#define THREAT_ASSESS_MAXIMUM 10 + //SecBOT defines on arresting ///Whether arrests should be broadcasted over the Security radio #define SECBOT_DECLARE_ARRESTS (1<<0) @@ -212,11 +231,17 @@ DEFINE_BITFIELD(security_mode_flags, list( #define MEDBOT_STATIONARY_MODE (1<<1) ///Whether the bot will randomly speak from time to time. This will not actually prevent all speech. #define MEDBOT_SPEAK_MODE (1<<2) +/// is the bot currently tipped over? +#define MEDBOT_TIPPED_MODE (1<<3) + +///can we heal all damage? +#define HEAL_ALL_DAMAGE "all_damage" DEFINE_BITFIELD(medical_mode_flags, list( "MEDBOT_DECLARE_CRIT" = MEDBOT_DECLARE_CRIT, "MEDBOT_STATIONARY_MODE" = MEDBOT_STATIONARY_MODE, "MEDBOT_SPEAK_MODE" = MEDBOT_SPEAK_MODE, + "MEDBOT_TIPPED_MODE" = MEDBOT_TIPPED_MODE, )) //cleanBOT defines on what to clean @@ -309,3 +334,4 @@ DEFINE_BITFIELD(janitor_mode_flags, list( #define MEDIBOT_VOICED_THIS_HURTS "This hurts, my pain is real!" #define MEDIBOT_VOICED_THE_END "Is this the end?" #define MEDIBOT_VOICED_NOOO "Nooo!" +#define MEDIBOT_VOICED_CHICKEN "LOOK AT ME?! I am a chicken." diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index a18a77f180d712..5b82fa07e8912e 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -16,10 +16,10 @@ #define ROLE_OPERATIVE "Operative" #define ROLE_TRAITOR "Traitor" #define ROLE_WIZARD "Wizard" -// SKYRAT EDIT START +// NOVA EDIT START #define ROLE_ASSAULT_OPERATIVE "Assault Operative" #define ROLE_OPFOR_CANDIDATE "OPFOR Candidate" -// SKYRAT EDIT END +// NOVA EDIT END // Midround roles #define ROLE_ABDUCTOR "Abductor" @@ -27,7 +27,6 @@ #define ROLE_BLOB "Blob" #define ROLE_BLOB_INFECTION "Blob Infection" #define ROLE_CHANGELING_MIDROUND "Changeling (Midround)" -#define ROLE_CYBER_POLICE "Cyber Police" #define ROLE_FUGITIVE "Fugitive" #define ROLE_LONE_OPERATIVE "Lone Operative" #define ROLE_MALF_MIDROUND "Malf AI (Midround)" @@ -42,13 +41,13 @@ #define ROLE_SPACE_DRAGON "Space Dragon" #define ROLE_SPIDER "Spider" #define ROLE_WIZARD_MIDROUND "Wizard (Midround)" -//SKYRAT EDIT START +//NOVA EDIT START #define ROLE_BORER "Borer" #define ROLE_DRIFTING_CONTRACTOR "Drifting Contractor" #define ROLE_LONE_INFILTRATOR "Lone Infiltrator" #define ROLE_MUTANT "Mutated Abomination" #define ROLE_CLOCK_CULTIST "Clock Cultist" -// SKYRAT EDIT END +// NOVA EDIT END // Latejoin roles #define ROLE_HERETIC_SMUGGLER "Heretic Smuggler" @@ -103,7 +102,16 @@ #define ROLE_GHOST_ROLE "Ghost Role" #define ROLE_HERMIT "Hermit" #define ROLE_HOTEL_STAFF "Hotel Staff" -#define ROLE_LAVALAND_SYNDICATE "Lavaland Syndicate" +#define ROLE_LAVALAND_SYNDICATE "Syndicate Lavaland Personnel" // NOVA EDIT CHANGE - Original: #define ROLE_LAVALAND_SYNDICATE "Lavaland Syndicate" +//NOVA EDIT START - Nova Sector Spawner roles +#define ROLE_INTERDYNE_PLANETARY_BASE "Interdyne Lavaland Personnel" +#define ROLE_INTERDYNE_PLANETARY_BASE_ICEBOX "Interdyne Icemoon Personnel" +#define ROLE_DS2 "Syndicate DS-2 Crew" +#define ROLE_GHOST_CAFE "Ghost Cafe Visitor" +#define ROLE_BLACK_MARKET_DEALER "Black Market Dealer" +#define ROLE_FREIGHTER_CREW "Freighter Crew" +#define ROLE_PORT_TARKON "Port Tarkon Survivor" +// NOVA EDIT ADDITION END #define ROLE_LIFEBRINGER "Lifebringer" #define ROLE_MAINTENANCE_DRONE "Maintenance Drone" #define ROLE_SKELETON "Skeleton" @@ -111,19 +119,18 @@ #define ROLE_SPACE_BARTENDER "Space Bartender" #define ROLE_SPACE_DOCTOR "Space Doctor" #define ROLE_SPACE_PIRATE "Space Pirate" -#define ROLE_SPACE_SYNDICATE "Space Syndicate" -#define ROLE_SYNDICATE_CYBERSUN "Cybersun Space Syndicate" //Ghost role syndi from Forgottenship ruin -#define ROLE_SYNDICATE_CYBERSUN_CAPTAIN "Cybersun Space Syndicate Captain" //Forgottenship captain syndie +#define ROLE_SPACE_SYNDICATE "Syndicate Space Personnel" // NOVA EDIT CHANGE - Original: "Space Syndicate" +#define ROLE_SYNDICATE_CYBERSUN "Syndicate Cybersun Crew" //Ghost role syndi from Forgottenship ruin // NOVA EDIT CHANGE - Original: "Cybersun Space Syndicate" +#define ROLE_SYNDICATE_CYBERSUN_CAPTAIN "Syndicate Cybersun Captain" //Forgottenship captain syndie // NOVA EDIT CHANGE - Original: "Cybersun Space Syndicate Captain" #define ROLE_SYNDICATE_DRONE "Syndicate Drone" #define ROLE_VENUSHUMANTRAP "Venus Human Trap" #define ROLE_ZOMBIE "Zombie" -//SKYRAT EDIT START -#define ROLE_BLACK_MARKET_DEALER "Black Market Dealer" -#define ROLE_DS2 "DS2 Syndicate" -#define ROLE_FREIGHTER_CREW "Freighter Crew" -#define ROLE_GHOST_CAFE "Ghost Cafe Visitor" -#define ROLE_PORT_TARKON "Port Tarkon Survivor" -//SKYRAT EDIT END + +// Virtual dom related +#define ROLE_GLITCH "Glitch" // the parent type of all vdom roles +#define ROLE_CYBER_POLICE "Cyber Police" +#define ROLE_CYBER_TAC "Cyber Tac" +#define ROLE_NETGUARDIAN "NetGuardian Prime" /// This defines the antagonists you can operate with in the settings. /// Keys are the antagonist, values are the number of days since the player's @@ -140,9 +147,9 @@ GLOBAL_LIST_INIT(special_roles, list( ROLE_REV_HEAD = 14, ROLE_TRAITOR = 0, ROLE_WIZARD = 14, - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION ROLE_ASSAULT_OPERATIVE = 14, - // SKYRAT EDIT END + // NOVA EDIT END // Midround ROLE_ABDUCTOR = 0, @@ -150,7 +157,6 @@ GLOBAL_LIST_INIT(special_roles, list( ROLE_BLOB = 0, ROLE_BLOB_INFECTION = 0, ROLE_CHANGELING_MIDROUND = 0, - ROLE_CYBER_POLICE = 0, ROLE_FUGITIVE = 0, ROLE_LONE_OPERATIVE = 14, ROLE_MALF_MIDROUND = 0, @@ -165,12 +171,12 @@ GLOBAL_LIST_INIT(special_roles, list( ROLE_SPACE_DRAGON = 0, ROLE_SPIDER = 0, ROLE_WIZARD_MIDROUND = 14, - //SKYRAT EDIT START + //NOVA EDIT START ROLE_LONE_INFILTRATOR = 0, ROLE_BORER = 0, ROLE_DRIFTING_CONTRACTOR = 14, ROLE_MUTANT = 0, - //SKYRAT EDIT END + //NOVA EDIT END // Latejoin ROLE_HERETIC_SMUGGLER = 0, @@ -179,6 +185,7 @@ GLOBAL_LIST_INIT(special_roles, list( ROLE_STOWAWAY_CHANGELING = 0, // I'm not too sure why these are here, but they're not moving. + ROLE_GLITCH = 0, ROLE_PAI = 0, ROLE_SENTIENCE = 0, )) diff --git a/code/__DEFINES/rust_g.dm b/code/__DEFINES/rust_g.dm index cab4430a88dfed..76e5fa22d47486 100644 --- a/code/__DEFINES/rust_g.dm +++ b/code/__DEFINES/rust_g.dm @@ -110,6 +110,12 @@ #define rustg_dmi_strip_metadata(fname) RUSTG_CALL(RUST_G, "dmi_strip_metadata")(fname) #define rustg_dmi_create_png(path, width, height, data) RUSTG_CALL(RUST_G, "dmi_create_png")(path, width, height, data) #define rustg_dmi_resize_png(path, width, height, resizetype) RUSTG_CALL(RUST_G, "dmi_resize_png")(path, width, height, resizetype) +/** + * input: must be a path, not an /icon; you have to do your own handling if it is one, as icon objects can't be directly passed to rustg. + * + * output: json_encode'd list. json_decode to get a flat list with icon states in the order they're in inside the .dmi + */ +#define rustg_dmi_icon_states(fname) RUSTG_CALL(RUST_G, "dmi_icon_states")(fname) #define rustg_file_read(fname) RUSTG_CALL(RUST_G, "file_read")(fname) #define rustg_file_exists(fname) RUSTG_CALL(RUST_G, "file_exists")(fname) @@ -158,8 +164,9 @@ #define rustg_time_milliseconds(id) text2num(RUSTG_CALL(RUST_G, "time_milliseconds")(id)) #define rustg_time_reset(id) RUSTG_CALL(RUST_G, "time_reset")(id) +/// Returns the timestamp as a string /proc/rustg_unix_timestamp() - return text2num(RUSTG_CALL(RUST_G, "unix_timestamp")()) + return RUSTG_CALL(RUST_G, "unix_timestamp")() #define rustg_raw_read_toml_file(path) json_decode(RUSTG_CALL(RUST_G, "toml_file_to_json")(path) || "null") diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index d5f1496079f6ab..4ea5e07014664d 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -98,7 +98,7 @@ #define FOLLOW_OR_TURF_LINK(alice, bob, turfy) "(F)" //Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam -#define MAX_MESSAGE_LEN 2048 //SKYRAT EDIT CHANGE - ORIGINAL 1024 - I SAID DOUBLE IT!! FUCK THE WARNING! +#define MAX_MESSAGE_LEN 2048 //NOVA EDIT CHANGE - ORIGINAL 1024 - I SAID DOUBLE IT!! FUCK THE WARNING! #define MAX_NAME_LEN 42 #define MAX_BROADCAST_LEN 512 #define MAX_CHARTER_LEN 80 diff --git a/code/__DEFINES/security.dm b/code/__DEFINES/security.dm index a385d843398e0c..ac16a3aaaeda2b 100644 --- a/code/__DEFINES/security.dm +++ b/code/__DEFINES/security.dm @@ -19,7 +19,7 @@ /// Attributes that might be illegal, but don't have ties to syndicate/aren't exclusively produced by them #define DETSCAN_CATEGORY_ILLEGAL "Illegal Tech" /// The emags and other in-house technology from the syndicate -#define DETSCAN_CATEGORY_SYNDIE "Syndicate Tech" +#define DETSCAN_CATEGORY_SYNDIE "Symphionia Tech" /// praise be #define DETSCAN_CATEGORY_HOLY "Holy Data" /// The mode that the items in, what kind of item is dispensed, etc diff --git a/code/__DEFINES/sight.dm b/code/__DEFINES/sight.dm index ae5f4e48352c25..645e009413593c 100644 --- a/code/__DEFINES/sight.dm +++ b/code/__DEFINES/sight.dm @@ -64,7 +64,8 @@ // INVISIBILITY PRIORITIES #define INVISIBILITY_PRIORITY_ADMIN 100 -#define INVISIBILITY_PRIORITY_BASIC_ANTI_INVISIBILITY 1 +#define INVISIBILITY_PRIORITY_TURRET_COVER 20 +#define INVISIBILITY_PRIORITY_BASIC_ANTI_INVISIBILITY 10 #define INVISIBILITY_PRIORITY_NONE 0 //------------------------ diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm index d95973e3fdbfc4..2a2bf2c9074856 100644 --- a/code/__DEFINES/sound.dm +++ b/code/__DEFINES/sound.dm @@ -2,7 +2,7 @@ #define CHANNEL_LOBBYMUSIC 1024 #define CHANNEL_ADMIN 1023 #define CHANNEL_VOX 1022 -#define CHANNEL_JUKEBOX 1011 // SKYRAT EDIT - JUKEBOX - ORIGINAL: #define CHANNEL_JUKEBOX 1021 +#define CHANNEL_JUKEBOX 1011 // NOVA EDIT - JUKEBOX - ORIGINAL: #define CHANNEL_JUKEBOX 1021 #define CHANNEL_HEARTBEAT 1020 //sound channel for heartbeats #define CHANNEL_BOSS_MUSIC 1019 #define CHANNEL_AMBIENCE 1018 @@ -11,10 +11,10 @@ #define CHANNEL_CHARGED_SPELL 1015 #define CHANNEL_ELEVATOR 1014 -// SKYRAT EDIT START - JUKEBOX +// NOVA EDIT START - JUKEBOX #define CHANNEL_JUKEBOX_START 1006 #define CHANNEL_HEV 1005 -//SKYRAT EDIT CHANGE END +//NOVA EDIT CHANGE END ///Default range of a sound. #define SOUND_RANGE 17 @@ -31,7 +31,7 @@ //THIS SHOULD ALWAYS BE THE LOWEST ONE! //KEEP IT UPDATED -#define CHANNEL_HIGHEST_AVAILABLE 1005 //SKYRAT EDIT CHANGE - JUKEBOX > ORIGINAL VALUE 1015 +#define CHANNEL_HIGHEST_AVAILABLE 1005 //NOVA EDIT CHANGE - JUKEBOX > ORIGINAL VALUE 1015 #define MAX_INSTRUMENT_CHANNELS (128 * 6) @@ -124,7 +124,7 @@ #define ANNOUNCER_SHUTTLERECALLED "announcer_shuttlerecalled" #define ANNOUNCER_SPANOMALIES "announcer_spanomalies" -//SKYRAT EDIT ADDITION BEGIN +//NOVA EDIT ADDITION BEGIN #define ANNOUNCER_SHUTTLELEFT "announcer_shuttleleft" #define ANNOUNCER_CARP "announcer_carp" #define ANNOUNCER_VORTEXANOMALIES "announcer_vortexanomalies" @@ -147,12 +147,11 @@ #define ANNOUNCER_ERTYES "announcer_ertyes" #define ANNOUNCER_MUTANTS "announcer_mutants" #define ANNOUNCER_KLAXON "announcer_klaxon" -#define ANNOUNCER_ICARUS "announcer_icarus" #define ANNOUNCER_NRI_RAIDERS "announcer_nri_raiders" #define ANNOUNCER_OUTBREAK6 "announcer_outbreak6" #define ANNOUNCER_DEPARTMENTAL "announcer_departmental" #define ANNOUNCER_SHUTTLE "announcer_shuttle" -//SKYRAT EDIT END +//NOVA EDIT END /// Global list of all of our announcer keys. @@ -173,7 +172,7 @@ GLOBAL_LIST_INIT(announcer_keys, list( ANNOUNCER_SHUTTLEDOCK, ANNOUNCER_SHUTTLERECALLED, ANNOUNCER_SPANOMALIES, - //SKYRAT EDIT ADDITION BEGIN + //NOVA EDIT ADDITION BEGIN ANNOUNCER_SHUTTLELEFT, ANNOUNCER_CARP, ANNOUNCER_VORTEXANOMALIES, @@ -195,10 +194,9 @@ GLOBAL_LIST_INIT(announcer_keys, list( ANNOUNCER_ERTYES, ANNOUNCER_MUTANTS, ANNOUNCER_KLAXON, - ANNOUNCER_ICARUS, ANNOUNCER_NRI_RAIDERS, ANNOUNCER_OUTBREAK6, - //SKYRAT EDIT END + //NOVA EDIT END )) /// List of all of our sound keys. diff --git a/code/__DEFINES/spacevines.dm b/code/__DEFINES/spacevines.dm index 84739f344b5046..602b8143f5517d 100644 --- a/code/__DEFINES/spacevines.dm +++ b/code/__DEFINES/spacevines.dm @@ -27,10 +27,10 @@ #define SEVERITY_MAJOR 10 /// Kudzu mutativeness is based on a scale factor * potency -#define MUTATIVENESS_SCALE_FACTOR 0.1 // SKYRAT EDIT CHANGE - Original: 0.2 +#define MUTATIVENESS_SCALE_FACTOR 0.1 // NOVA EDIT CHANGE - Original: 0.2 /// Kudzu maximum mutation severity is a linear function of potency -#define MAX_SEVERITY_LINEAR_COEFF 0.1 // SKYRAT EDIT CHANGE - Original: 0.15 +#define MAX_SEVERITY_LINEAR_COEFF 0.1 // NOVA EDIT CHANGE - Original: 0.15 #define MAX_SEVERITY_CONSTANT_TERM 10 /// Additional maximum mutation severity given to kudzu spawned by a random event diff --git a/code/__DEFINES/span.dm b/code/__DEFINES/span.dm index 76ab9ccf841149..bf918b55efcca4 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 + "") @@ -23,6 +26,7 @@ #define span_bold(str) ("" + str + "") #define span_boldannounce(str) ("" + str + "") #define span_bolddanger(str) ("" + str + "") +#define span_bolditalic(str) ("" + str + "") #define span_boldnicegreen(str) ("" + str + "") #define span_boldnotice(str) ("" + str + "") #define span_boldwarning(str) ("" + str + "") @@ -67,6 +71,8 @@ #define span_interface(str) ("" + str + "") #define span_linkify(str) ("" + str + "") #define span_looc(str) ("" + str + "") +#define span_major_announcement_text(str) ("" + str + "") +#define span_major_announcement_title(str) ("" + str + "") #define span_medal(str) ("" + str + "") #define span_medradio(str) ("" + str + "") #define span_memo(str) ("" + str + "") @@ -83,6 +89,7 @@ #define span_notice(str) ("" + str + "") #define span_noticealien(str) ("" + str + "") #define span_ooc(str) ("" + str + "") +#define span_ooc_announcement_text(str) ("" + str + "") #define span_papyrus(str) ("" + str + "") #define span_phobia(str) ("" + str + "") #define span_prefix(str) ("" + str + "") @@ -116,6 +123,7 @@ #define span_spiderbroodmother(str) ("" + str + "") #define span_spiderscout(str) ("" + str + "") #define span_spiderbreacher(str) ("" + str + "") +#define span_subheader_announcement_text(str) ("" + str + "") #define span_suicide(str) ("" + str + "") #define span_suppradio(str) ("" + str + "") #define span_syndradio(str) ("" + str + "") diff --git a/code/__DEFINES/species_clothing_paths.dm b/code/__DEFINES/species_clothing_paths.dm index 9b7a3b889051c6..3824785218218a 100644 --- a/code/__DEFINES/species_clothing_paths.dm +++ b/code/__DEFINES/species_clothing_paths.dm @@ -8,12 +8,12 @@ //MONKEY PATHS ///The dmi for monkey uniforms -#define MONKEY_UNIFORM_FILE 'modular_skyrat/master_files/icons/mob/clothing/species/monkey/uniform.dmi' // SKYRAT EDIT CHANGE +#define MONKEY_UNIFORM_FILE 'modular_nova/master_files/icons/mob/clothing/species/monkey/uniform.dmi' // NOVA EDIT CHANGE //DIGITIGRADE PATHS ///The dmi containing digitigrade uniforms -#define DIGITIGRADE_UNIFORM_FILE 'modular_skyrat/master_files/icons/mob/clothing/uniform_digi.dmi' // SKYRAT EDIT CHANGE +#define DIGITIGRADE_UNIFORM_FILE 'modular_nova/master_files/icons/mob/clothing/uniform_digi.dmi' // NOVA EDIT CHANGE ///The dmi containing digitigrade shoes -#define DIGITIGRADE_SHOES_FILE 'modular_skyrat/master_files/icons/mob/clothing/feet_digi.dmi' // SKYRAT EDIT CHANGE +#define DIGITIGRADE_SHOES_FILE 'modular_nova/master_files/icons/mob/clothing/feet_digi.dmi' // NOVA EDIT CHANGE ///The dmi containing digitigrade oversuits -#define DIGITIGRADE_SUIT_FILE 'modular_skyrat/master_files/icons/mob/clothing/suit_digi.dmi' // SKYRAT EDIT CHANGE +#define DIGITIGRADE_SUIT_FILE 'modular_nova/master_files/icons/mob/clothing/suit_digi.dmi' // NOVA EDIT CHANGE diff --git a/code/__DEFINES/stack_trace.dm b/code/__DEFINES/stack_trace.dm index 969eaecc707038..4911b4a0d571e9 100644 --- a/code/__DEFINES/stack_trace.dm +++ b/code/__DEFINES/stack_trace.dm @@ -1,2 +1,4 @@ /// gives us the stack trace from CRASH() without ending the current proc. #define stack_trace(message) _stack_trace(message, __FILE__, __LINE__) + +#define WORKAROUND_IDENTIFIER "%//%" diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index 03a3bf49ebbe82..768f1faa514f11 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -114,6 +114,11 @@ #define set_dizzy(duration) set_timed_status_effect(duration, /datum/status_effect/dizziness) #define set_dizzy_if_lower(duration) set_timed_status_effect(duration, /datum/status_effect/dizziness, TRUE) +#define adjust_staggered(duration) adjust_timed_status_effect(duration, /datum/status_effect/staggered) +#define adjust_staggered_up_to(duration, up_to) adjust_timed_status_effect(duration, /datum/status_effect/staggered, up_to) +#define set_staggered(duration) set_timed_status_effect(duration, /datum/status_effect/staggered) +#define set_staggered_if_lower(duration) set_timed_status_effect(duration, /datum/status_effect/staggered, TRUE) + #define adjust_jitter(duration) adjust_timed_status_effect(duration, /datum/status_effect/jitter) #define adjust_jitter_up_to(duration, up_to) adjust_timed_status_effect(duration, /datum/status_effect/jitter, up_to) #define set_jitter(duration) set_timed_status_effect(duration, /datum/status_effect/jitter) diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 52890a428e64c6..802ff324bd2603 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 25 +#define DB_MINOR_VERSION 28 //! ## Timing subsystem @@ -137,7 +137,7 @@ #define INIT_ORDER_BLACKBOX 94 #define INIT_ORDER_SERVER_MAINT 93 #define INIT_ORDER_INPUT 85 -#define INIT_ORDER_PLAYER_RANKS 84 // SKYRAT EDIT - Player Ranks Subsystem +#define INIT_ORDER_PLAYER_RANKS 84 // NOVA EDIT - Player Ranks Subsystem #define INIT_ORDER_SOUNDS 83 #define INIT_ORDER_INSTRUMENTS 82 #define INIT_ORDER_GREYSCALE 81 @@ -155,7 +155,7 @@ #define INIT_ORDER_AI_CONTROLLERS 55 //So the controller can get the ref #define INIT_ORDER_TICKER 55 #define INIT_ORDER_TCG 55 -#define INIT_ORDER_AUTOMAPPER 51 // SKYRAT EDIT ADDITION - We need to load just before mapping. +#define INIT_ORDER_AUTOMAPPER 51 // NOVA EDIT ADDITION - We need to load just before mapping. #define INIT_ORDER_MAPPING 50 #define INIT_ORDER_EARLY_ASSETS 48 #define INIT_ORDER_RESEARCH 47 @@ -164,10 +164,10 @@ #define INIT_ORDER_ECONOMY 40 #define INIT_ORDER_OUTPUTS 35 #define INIT_ORDER_RESTAURANT 34 -#define INIT_ORDER_POLLUTION 32 //SKYRAT EDIT ADDITION - //Needs to be above atoms +#define INIT_ORDER_POLLUTION 32 //NOVA EDIT ADDITION - //Needs to be above atoms #define INIT_ORDER_TTS 33 #define INIT_ORDER_ATOMS 30 -#define INIT_ORDER_ARMAMENTS 27 // SKYRAT EDIT ADDITION - Needs to be between atoms and default so it runs before gun companies +#define INIT_ORDER_ARMAMENTS 27 // NOVA EDIT ADDITION - Needs to be between atoms and default so it runs before gun companies #define INIT_ORDER_LANGUAGE 25 #define INIT_ORDER_MACHINES 20 #define INIT_ORDER_SKILLS 15 @@ -187,7 +187,7 @@ #define INIT_ORDER_SHUTTLE -21 #define INIT_ORDER_MINOR_MAPPING -40 #define INIT_ORDER_PATH -50 -#define INIT_ORDER_DECAY -61 //SKYRAT EDIT ADDITION +#define INIT_ORDER_DECAY -61 //NOVA EDIT ADDITION #define INIT_ORDER_EXPLOSIONS -69 #define INIT_ORDER_STATPANELS -97 #define INIT_ORDER_BAN_CACHE -98 @@ -229,6 +229,7 @@ #define FIRE_PRIORITY_MOBS 100 #define FIRE_PRIORITY_TGUI 110 #define FIRE_PRIORITY_TICKER 200 +#define FIRE_PRIORITY_SINGULO 350 #define FIRE_PRIORITY_STATPANEL 390 #define FIRE_PRIORITY_CHAT 400 #define FIRE_PRIORITY_RUNECHAT 410 @@ -245,10 +246,10 @@ // SS runlevels -#define RUNLEVEL_LOBBY 1 -#define RUNLEVEL_SETUP 2 -#define RUNLEVEL_GAME 4 -#define RUNLEVEL_POSTGAME 8 +#define RUNLEVEL_LOBBY (1<<0) +#define RUNLEVEL_SETUP (1<<1) +#define RUNLEVEL_GAME (1<<2) +#define RUNLEVEL_POSTGAME (1<<3) #define RUNLEVELS_DEFAULT (RUNLEVEL_SETUP | RUNLEVEL_GAME | RUNLEVEL_POSTGAME) @@ -338,3 +339,10 @@ #define VOTE_COUNT_METHOD_SINGLE 1 /// Approval voting. Any number of selections per person, and the selection with the most votes wins. #define VOTE_COUNT_METHOD_MULTI 2 + +/// The choice with the most votes wins. Ties are broken by the first choice to reach that number of votes. +#define VOTE_WINNER_METHOD_SIMPLE "Simple" +/// The winning choice is selected randomly based on the number of votes each choice has. +#define VOTE_WINNER_METHOD_WEIGHTED_RANDOM "Weighted Random" +/// There is no winner for this vote. +#define VOTE_WINNER_METHOD_NONE "None" diff --git a/code/__DEFINES/surgery.dm b/code/__DEFINES/surgery.dm index dcdd1394253026..e0a3c3b98377f6 100644 --- a/code/__DEFINES/surgery.dm +++ b/code/__DEFINES/surgery.dm @@ -26,10 +26,10 @@ #define ORGAN_HIDDEN (1<<9) /// Has the organ already been inserted inside someone #define ORGAN_VIRGIN (1<<10) -// SKYRAT EDIT START - Customization +// NOVA EDIT START - Customization /// Synthetic organ granted by a species (for use for organ replacements between species) #define ORGAN_SYNTHETIC_FROM_SPECIES (1<<11) -// SKYRAT EDIT END +// NOVA EDIT END /// Helper to figure out if a limb is organic #define IS_ORGANIC_LIMB(limb) (limb.bodytype & BODYTYPE_ORGANIC) @@ -43,6 +43,8 @@ #define BODYPART_PSEUDOPART (1<<1) /// Bodypart did not match the owner's default bodypart limb_id when surgically implanted #define BODYPART_IMPLANTED (1<<2) +/// Bodypart never displays as a husk +#define BODYPART_UNHUSKABLE (1<<3) // Bodypart change blocking flags ///Bodypart does not get replaced during set_species() diff --git a/code/__DEFINES/text.dm b/code/__DEFINES/text.dm index a0df5e24eb7e50..9529d6c4fe2987 100644 --- a/code/__DEFINES/text.dm +++ b/code/__DEFINES/text.dm @@ -84,10 +84,10 @@ #define FLESH_SCAR_FILE "wounds/flesh_scar_desc.json" /// File location for bone wound descriptions #define BONE_SCAR_FILE "wounds/bone_scar_desc.json" -// SKYRAT EDIT ADDITION BEGIN - SYNTH WOUNDS +// NOVA EDIT ADDITION BEGIN - SYNTH WOUNDS /// File location for metalic wound descriptions -#define METAL_SCAR_FILE "wounds/metal_scar_desc.json" -// SKYRAT EDIT ADDITION END +#define METAL_SCAR_FILE "wounds/metal_scar_desc.json" +// NOVA EDIT ADDITION END /// File location for scar wound descriptions #define SCAR_LOC_FILE "wounds/scar_loc.json" /// File location for exodrone descriptions @@ -102,3 +102,7 @@ #define HALLUCINATION_FILE "hallucination.json" /// File location for ninja lines #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 6187a67825a471..c561a64ebf5819 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,6 +1,6 @@ // tgstation-server DMAPI -#define TGS_DMAPI_VERSION "6.5.3" +#define TGS_DMAPI_VERSION "7.0.1" // All functions and datums outside this document are subject to change with any version and should not be relied on. @@ -73,12 +73,12 @@ #define TGS_EVENT_REPO_MERGE_PULL_REQUEST 3 /// Before the repository makes a sychronize operation. Parameters: Absolute repostiory path. #define TGS_EVENT_REPO_PRE_SYNCHRONIZE 4 -/// Before a BYOND install operation begins. Parameters: [/datum/tgs_version] of the installing BYOND. -#define TGS_EVENT_BYOND_INSTALL_START 5 -/// When a BYOND install operation fails. Parameters: Error message -#define TGS_EVENT_BYOND_INSTALL_FAIL 6 -/// When the active BYOND version changes. Parameters: (Nullable) [/datum/tgs_version] of the current BYOND, [/datum/tgs_version] of the new BYOND. -#define TGS_EVENT_BYOND_ACTIVE_VERSION_CHANGE 7 +/// Before a engine install operation begins. Parameters: Version string of the installing engine. +#define TGS_EVENT_ENGINE_INSTALL_START 5 +/// When a engine install operation fails. Parameters: Error message +#define TGS_EVENT_ENGINE_INSTALL_FAIL 6 +/// When the active engine version changes. Parameters: (Nullable) Version string of the current engine, version string of the new engine. +#define TGS_EVENT_ENGINE_ACTIVE_VERSION_CHANGE 7 /// When the compiler starts running. Parameters: Game directory path, origin commit SHA. #define TGS_EVENT_COMPILE_START 8 /// When a compile is cancelled. No parameters. @@ -108,7 +108,7 @@ // #define TGS_EVENT_DREAM_DAEMON_LAUNCH 22 /// After a single submodule update is performed. Parameters: Updated submodule name. #define TGS_EVENT_REPO_SUBMODULE_UPDATE 23 -/// After CodeModifications are applied, before DreamMaker is run. Parameters: Game directory path, origin commit sha, byond version. +/// After CodeModifications are applied, before DreamMaker is run. Parameters: Game directory path, origin commit sha, version string of the used engine. #define TGS_EVENT_PRE_DREAM_MAKER 24 /// Whenever a deployment folder is deleted from disk. Parameters: Game directory path. #define TGS_EVENT_DEPLOYMENT_CLEANUP 25 @@ -122,6 +122,7 @@ /// The watchdog will restart on reboot. #define TGS_REBOOT_MODE_RESTART 2 +// Note that security levels are currently meaningless in OpenDream /// DreamDaemon Trusted security level. #define TGS_SECURITY_TRUSTED 0 /// DreamDaemon Safe security level. @@ -129,6 +130,18 @@ /// DreamDaemon Ultrasafe security level. #define TGS_SECURITY_ULTRASAFE 2 +/// DreamDaemon public visibility level. +#define TGS_VISIBILITY_PUBLIC 0 +/// DreamDaemon private visibility level. +#define TGS_VISIBILITY_PRIVATE 1 +/// DreamDaemon invisible visibility level. +#define TGS_VISIBILITY_INVISIBLE 2 + +/// The Build Your Own Net Dream engine. +#define TGS_ENGINE_TYPE_BYOND 0 +/// The OpenDream engine. +#define TGS_ENGINE_TYPE_OPENDREAM 1 + //REQUIRED HOOKS /** @@ -442,6 +455,10 @@ /world/proc/TgsVersion() return +/// Returns the running engine type +/world/proc/TgsEngine() + return + /// Returns the current [/datum/tgs_version] of the DMAPI being used if it was activated, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! /world/proc/TgsApiVersion() return @@ -458,6 +475,10 @@ /world/proc/TgsSecurityLevel() return +/// Returns the current BYOND visibility level as a TGS_VISIBILITY_ define if TGS is present, null otherwise. Requires TGS to be using interop API version 5 or higher otherwise the string "___unimplemented" wil be returned. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! +/world/proc/TgsVisibility() + return + /// Returns a list of active [/datum/tgs_revision_information/test_merge]s if TGS is present, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! /world/proc/TgsTestMerges() return diff --git a/code/__DEFINES/time.dm b/code/__DEFINES/time.dm index 00a85d61995102..1935c3c0aee3d4 100644 --- a/code/__DEFINES/time.dm +++ b/code/__DEFINES/time.dm @@ -38,6 +38,7 @@ #define MONKEYDAY "Monkey Day" #define PRIDE_WEEK "Pride Week" #define MOTH_WEEK "Moth Week" +#define IAN_HOLIDAY "Ian's Birthday" /* Days of the week to make it easier to reference them. diff --git a/code/__DEFINES/tools.dm b/code/__DEFINES/tools.dm index 591aa22aa2babf..99230559f7e0b8 100644 --- a/code/__DEFINES/tools.dm +++ b/code/__DEFINES/tools.dm @@ -25,12 +25,14 @@ // tool sound is only played when op is started. If not, it's played twice. #define MIN_TOOL_SOUND_DELAY 20 -// tool_act chain flags +/// Return when an item interaction is successful. +/// This cancels the rest of the chain entirely and indicates success. +#define ITEM_INTERACT_SUCCESS (1<<0) // Same as TRUE, as most tool (legacy) tool acts return TRUE on success +/// Return to prevent the rest of the attack chain from being executed / preventing the item user from thwacking the target. +/// Similar to [ITEM_INTERACT_SUCCESS], but does not necessarily indicate success. +#define ITEM_INTERACT_BLOCKING (1<<1) +/// Return to skip the rest of the interaction chain, going straight to attack. +#define ITEM_INTERACT_SKIP_TO_ATTACK (1<<2) -/// When a tooltype_act proc is successful -#define TOOL_ACT_TOOLTYPE_SUCCESS (1<<0) -/// When [COMSIG_ATOM_TOOL_ACT] blocks the act -#define TOOL_ACT_SIGNAL_BLOCKING (1<<1) - -/// When [TOOL_ACT_TOOLTYPE_SUCCESS] or [TOOL_ACT_SIGNAL_BLOCKING] are set -#define TOOL_ACT_MELEE_CHAIN_BLOCKING (TOOL_ACT_TOOLTYPE_SUCCESS | TOOL_ACT_SIGNAL_BLOCKING) +/// Combination flag for any item interaction that blocks the rest of the attack chain +#define ITEM_INTERACT_ANY_BLOCKER (ITEM_INTERACT_SUCCESS | ITEM_INTERACT_BLOCKING) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm deleted file mode 100644 index f981f3ffe5042d..00000000000000 --- a/code/__DEFINES/traits.dm +++ /dev/null @@ -1,1349 +0,0 @@ -#define SIGNAL_ADDTRAIT(trait_ref) "addtrait [trait_ref]" -#define SIGNAL_REMOVETRAIT(trait_ref) "removetrait [trait_ref]" - -// trait accessor defines -#define ADD_TRAIT(target, trait, source) \ - do { \ - var/list/_L; \ - if (!target._status_traits) { \ - target._status_traits = list(); \ - _L = target._status_traits; \ - _L[trait] = list(source); \ - SEND_SIGNAL(target, SIGNAL_ADDTRAIT(trait), trait); \ - } else { \ - _L = target._status_traits; \ - if (_L[trait]) { \ - _L[trait] |= list(source); \ - } else { \ - _L[trait] = list(source); \ - SEND_SIGNAL(target, SIGNAL_ADDTRAIT(trait), trait); \ - } \ - } \ - } while (0) -#define REMOVE_TRAIT(target, trait, sources) \ - do { \ - var/list/_L = target._status_traits; \ - var/list/_S; \ - if (sources && !islist(sources)) { \ - _S = list(sources); \ - } else { \ - _S = sources\ - }; \ - if (_L?[trait]) { \ - for (var/_T in _L[trait]) { \ - if ((!_S && (_T != ROUNDSTART_TRAIT)) || (_T in _S)) { \ - _L[trait] -= _T \ - } \ - };\ - if (!length(_L[trait])) { \ - _L -= trait; \ - SEND_SIGNAL(target, SIGNAL_REMOVETRAIT(trait), trait); \ - }; \ - if (!length(_L)) { \ - target._status_traits = null \ - }; \ - } \ - } while (0) -#define REMOVE_TRAIT_NOT_FROM(target, trait, sources) \ - do { \ - var/list/_traits_list = target._status_traits; \ - var/list/_sources_list; \ - if (sources && !islist(sources)) { \ - _sources_list = list(sources); \ - } else { \ - _sources_list = sources\ - }; \ - if (_traits_list?[trait]) { \ - for (var/_trait_source in _traits_list[trait]) { \ - if (!(_trait_source in _sources_list)) { \ - _traits_list[trait] -= _trait_source \ - } \ - };\ - if (!length(_traits_list[trait])) { \ - _traits_list -= trait; \ - SEND_SIGNAL(target, SIGNAL_REMOVETRAIT(trait), trait); \ - }; \ - if (!length(_traits_list)) { \ - target._status_traits = null \ - }; \ - } \ - } while (0) -#define REMOVE_TRAITS_NOT_IN(target, sources) \ - do { \ - var/list/_L = target._status_traits; \ - var/list/_S = sources; \ - if (_L) { \ - for (var/_T in _L) { \ - _L[_T] &= _S;\ - if (!length(_L[_T])) { \ - _L -= _T; \ - SEND_SIGNAL(target, SIGNAL_REMOVETRAIT(_T), _T); \ - }; \ - };\ - if (!length(_L)) { \ - target._status_traits = null\ - };\ - }\ - } while (0) - -#define REMOVE_TRAITS_IN(target, sources) \ - do { \ - var/list/_L = target._status_traits; \ - var/list/_S = sources; \ - if (sources && !islist(sources)) { \ - _S = list(sources); \ - } else { \ - _S = sources\ - }; \ - if (_L) { \ - for (var/_T in _L) { \ - _L[_T] -= _S;\ - if (!length(_L[_T])) { \ - _L -= _T; \ - SEND_SIGNAL(target, SIGNAL_REMOVETRAIT(_T)); \ - }; \ - };\ - if (!length(_L)) { \ - target._status_traits = null\ - };\ - }\ - } 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_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()) -/// 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)) - -/* -Remember to update _globalvars/traits.dm if you're adding/removing/renaming traits. -*/ - -//mob traits -/// Forces the user to stay unconscious. -#define TRAIT_KNOCKEDOUT "knockedout" -/// Prevents voluntary movement. -#define TRAIT_IMMOBILIZED "immobilized" -/// Prevents voluntary standing or staying up on its own. -#define TRAIT_FLOORED "floored" -/// Forces user to stay standing -#define TRAIT_FORCED_STANDING "forcedstanding" -/// Prevents usage of manipulation appendages (picking, holding or using items, manipulating storage). -#define TRAIT_HANDS_BLOCKED "handsblocked" -/// Inability to access UI hud elements. Turned into a trait from [MOBILITY_UI] to be able to track sources. -#define TRAIT_UI_BLOCKED "uiblocked" -/// Inability to pull things. Turned into a trait from [MOBILITY_PULL] to be able to track sources. -#define TRAIT_PULL_BLOCKED "pullblocked" -/// Abstract condition that prevents movement if being pulled and might be resisted against. Handcuffs and straight jackets, basically. -#define TRAIT_RESTRAINED "restrained" -/// Apply this to make a mob not dense, and remove it when you want it to no longer make them undense, other sorces of undesity will still apply. Always define a unique source when adding a new instance of this! -#define TRAIT_UNDENSE "undense" -/// Expands our FOV by 30 degrees if restricted -#define TRAIT_EXPANDED_FOV "expanded_fov" -/// Doesn't miss attacks -#define TRAIT_PERFECT_ATTACKER "perfect_attacker" -///Recolored by item/greentext -#define TRAIT_GREENTEXT_CURSED "greentext_curse" -#define TRAIT_INCAPACITATED "incapacitated" -/// In some kind of critical condition. Is able to succumb. -#define TRAIT_CRITICAL_CONDITION "critical-condition" -/// Whitelist for mobs that can read or write -#define TRAIT_LITERATE "literate" -/// Blacklist for mobs that can't read or write -#define TRAIT_ILLITERATE "illiterate" -/// Mute. Can't talk. -#define TRAIT_MUTE "mute" -/// Softspoken. Always whisper. -#define TRAIT_SOFTSPOKEN "softspoken" -/// Gibs on death and slips like ice. -#define TRAIT_CURSED "cursed" -/// Emotemute. Can't... emote. -#define TRAIT_EMOTEMUTE "emotemute" -#define TRAIT_DEAF "deaf" -#define TRAIT_FAT "fat" -#define TRAIT_HUSK "husk" -///Blacklisted from being revived via defibrilator -#define TRAIT_DEFIB_BLACKLISTED "defib_blacklisted" -#define TRAIT_BADDNA "baddna" -#define TRAIT_CLUMSY "clumsy" -/// Trait that means you are capable of holding items in some form -#define TRAIT_CAN_HOLD_ITEMS "can_hold_items" -/// Trait which lets you clamber over a barrier -#define TRAIT_FENCE_CLIMBER "can_climb_fences" -/// means that you can't use weapons with normal trigger guards. -#define TRAIT_CHUNKYFINGERS "chunkyfingers" -#define TRAIT_CHUNKYFINGERS_IGNORE_BATON "chunkyfingers_ignore_baton" -/// Allows you to mine with your bare hands -#define TRAIT_FIST_MINING "fist_mining" -#define TRAIT_DUMB "dumb" -/// Whether a mob is dexterous enough to use machines and certain items or not. -#define TRAIT_ADVANCEDTOOLUSER "advancedtooluser" -// Antagonizes the above. -#define TRAIT_DISCOORDINATED_TOOL_USER "discoordinated_tool_user" -#define TRAIT_PACIFISM "pacifism" -#define TRAIT_IGNORESLOWDOWN "ignoreslow" -#define TRAIT_IGNOREDAMAGESLOWDOWN "ignoredamageslowdown" -/// Makes it so the mob can use guns regardless of tool user status -#define TRAIT_GUN_NATURAL "gunnatural" -/// Causes death-like unconsciousness -#define TRAIT_DEATHCOMA "deathcoma" -/// Makes the owner appear as dead to most forms of medical examination -#define TRAIT_FAKEDEATH "fakedeath" -#define TRAIT_DISFIGURED "disfigured" -/// "Magic" trait that blocks the mob from moving or interacting with anything. Used for transient stuff like mob transformations or incorporality in special cases. -/// Will block movement, `Life()` (!!!), and other stuff based on the mob. -#define TRAIT_NO_TRANSFORM "block_transformations" -/// Tracks whether we're gonna be a baby alien's mummy. -#define TRAIT_XENO_HOST "xeno_host" -/// This mob is immune to stun causing status effects and stamcrit. -/// Prefer to use [/mob/living/proc/check_stun_immunity] over checking for this trait exactly. -#define TRAIT_STUNIMMUNE "stun_immunity" -#define TRAIT_BATON_RESISTANCE "baton_resistance" -/// Anti Dual-baton cooldown bypass exploit. -#define TRAIT_IWASBATONED "iwasbatoned" -#define TRAIT_SLEEPIMMUNE "sleep_immunity" -#define TRAIT_PUSHIMMUNE "push_immunity" -/// Are we immune to shocks? -#define TRAIT_SHOCKIMMUNE "shock_immunity" -/// Are we immune to specifically tesla / SM shocks? -#define TRAIT_TESLA_SHOCKIMMUNE "tesla_shock_immunity" -#define TRAIT_AIRLOCK_SHOCKIMMUNE "airlock_shock_immunity" -/// Is this atom being actively shocked? Used to prevent repeated shocks. -#define TRAIT_BEING_SHOCKED "shocked" -#define TRAIT_STABLEHEART "stable_heart" -/// Prevents you from leaving your corpse -#define TRAIT_CORPSELOCKED "corpselocked" -#define TRAIT_STABLELIVER "stable_liver" -#define TRAIT_VATGROWN "vatgrown" -#define TRAIT_RESISTHEAT "resist_heat" -///For when you've gotten a power from a dna vault -#define TRAIT_USED_DNA_VAULT "used_dna_vault" -/// For when you want to be able to touch hot things, but still want fire to be an issue. -#define TRAIT_RESISTHEATHANDS "resist_heat_handsonly" -#define TRAIT_RESISTCOLD "resist_cold" -#define TRAIT_RESISTHIGHPRESSURE "resist_high_pressure" -#define TRAIT_RESISTLOWPRESSURE "resist_low_pressure" -/// This human is immune to the effects of being exploded. (ex_act) -#define TRAIT_BOMBIMMUNE "bomb_immunity" -/// Immune to being irradiated -#define TRAIT_RADIMMUNE "rad_immunity" -/// This mob won't get gibbed by nukes going off -#define TRAIT_NUKEIMMUNE "nuke_immunity" -/// Can't be given viruses -#define TRAIT_VIRUSIMMUNE "virus_immunity" -/// Reduces the chance viruses will spread to this mob, and if the mob has a virus, slows its advancement -#define TRAIT_VIRUS_RESISTANCE "virus_resistance" -#define TRAIT_GENELESS "geneless" -#define TRAIT_PIERCEIMMUNE "pierce_immunity" -#define TRAIT_NODISMEMBER "dismember_immunity" -#define TRAIT_NOFIRE "nonflammable" -#define TRAIT_NOFIRE_SPREAD "no_fire_spreading" -/// Prevents plasmamen from self-igniting if only their helmet is missing -#define TRAIT_NOSELFIGNITION_HEAD_ONLY "no_selfignition_head_only" -#define TRAIT_NOGUNS "no_guns" -/// Species with this trait are genderless -#define TRAIT_AGENDER "agender" -/// Species with this trait have a blood clan mechanic -#define TRAIT_BLOOD_CLANS "blood_clans" -/// Species with this trait have markings (this SUCKS, remove this later in favor of bodypart overlays) -#define TRAIT_HAS_MARKINGS "has_markings" -/// Species with this trait use skin tones for coloration -#define TRAIT_USES_SKINTONES "uses_skintones" -/// Species with this trait use mutant colors for coloration -#define TRAIT_MUTANT_COLORS "mutcolors" -/// Species with this trait have mutant colors that cannot be chosen by the player, nor altered ingame by external means -#define TRAIT_FIXED_MUTANT_COLORS "fixed_mutcolors" -/// Species with this trait have a haircolor that cannot be chosen by the player, nor altered ingame by external means -#define TRAIT_FIXED_HAIRCOLOR "fixed_haircolor" -/// Humans with this trait won't get bloody hands, nor bloody feet -#define TRAIT_NO_BLOOD_OVERLAY "no_blood_overlay" -/// Humans with this trait cannot have underwear -#define TRAIT_NO_UNDERWEAR "no_underwear" -/// This carbon doesn't show an overlay when they have no brain -#define TRAIT_NO_DEBRAIN_OVERLAY "no_debrain_overlay" -/// Humans with this trait cannot get augmentation surgery -#define TRAIT_NO_AUGMENTS "no_augments" -/// This carbon doesn't get hungry -#define TRAIT_NOHUNGER "no_hunger" -/// This carbon doesn't bleed -#define TRAIT_NOBLOOD "noblood" -/// This just means that the carbon will always have functional liverless metabolism -#define TRAIT_LIVERLESS_METABOLISM "liverless_metabolism" -/// Humans with this trait cannot be turned into zombies -#define TRAIT_NO_ZOMBIFY "no_zombify" -/// Humans with this trait cannot be affected by changeling transformation stings -#define TRAIT_NO_TRANSFORMATION_STING "no_transformation_sting" -/// Carbons with this trait can't have their DNA copied by diseases nor changelings -#define TRAIT_NO_DNA_COPY "no_dna_copy" -/// Carbons with this trait cant have their dna scrambled by genetics or a disease retrovirus. -#define TRAIT_NO_DNA_SCRAMBLE "no_dna_scramble" -/// Carbons with this trait can eat blood to regenerate their own blood volume, instead of injecting it -#define TRAIT_DRINKS_BLOOD "drinks_blood" -/// Mob is immune to clone (cellular) damage -#define TRAIT_NOCLONELOSS "no_cloneloss" -/// Mob is immune to toxin damage -#define TRAIT_TOXIMMUNE "toxin_immune" -/// Mob is immune to oxygen damage, does not need to breathe -#define TRAIT_NOBREATH "no_breath" -/// Mob is currently disguised as something else (like a morph being another mob or an object). Holds a reference to the thing that applied the trait. -#define TRAIT_DISGUISED "disguised" -/// Use when you want a mob to be able to metabolize plasma temporarily (e.g. plasma fixation disease symptom) -#define TRAIT_PLASMA_LOVER_METABOLISM "plasma_lover_metabolism" -#define TRAIT_EASYDISMEMBER "easy_dismember" -#define TRAIT_LIMBATTACHMENT "limb_attach" -#define TRAIT_NOLIMBDISABLE "no_limb_disable" -#define TRAIT_EASILY_WOUNDED "easy_limb_wound" -#define TRAIT_HARDLY_WOUNDED "hard_limb_wound" -#define TRAIT_NEVER_WOUNDED "never_wounded" -#define TRAIT_TOXINLOVER "toxinlover" -/// Doesn't get overlays from being in critical. -#define TRAIT_NOCRITOVERLAY "no_crit_overlay" -/// Gets a mood boost from being in the hideout. -#define TRAIT_VAL_CORRIN_MEMBER "val_corrin_member" -/// reduces the use time of syringes, pills, patches and medigels but only when using on someone -#define TRAIT_FASTMED "fast_med_use" -/// The mob is holy and resistance to cult magic -#define TRAIT_HOLY "holy" -/// This mob is antimagic, and immune to spells / cannot cast spells -#define TRAIT_ANTIMAGIC "anti_magic" -/// This allows a person who has antimagic to cast spells without getting blocked -#define TRAIT_ANTIMAGIC_NO_SELFBLOCK "anti_magic_no_selfblock" -/// This mob recently blocked magic with some form of antimagic -#define TRAIT_RECENTLY_BLOCKED_MAGIC "recently_blocked_magic" -/// The user can do things like use magic staffs without penalty -#define TRAIT_MAGICALLY_GIFTED "magically_gifted" -/// This object innately spawns with fantasy variables already applied (the magical component is given to it on initialize), and thus we never want to give it the component again. -#define TRAIT_INNATELY_FANTASTICAL_ITEM "innately_fantastical_item" -#define TRAIT_DEPRESSION "depression" -#define TRAIT_BLOOD_DEFICIENCY "blood_deficiency" -#define TRAIT_JOLLY "jolly" -#define TRAIT_NOCRITDAMAGE "no_crit" -///Added to mob or mind, changes the icons of the fish shown in the minigame UI depending on the possible reward. -#define TRAIT_REVEAL_FISH "reveal_fish" - -/// Stops the mob from slipping on water, or banana peels, or pretty much anything that doesn't have [GALOSHES_DONT_HELP] set -#define TRAIT_NO_SLIP_WATER "noslip_water" -/// Stops the mob from slipping on permafrost ice (not any other ice) (but anything with [SLIDE_ICE] set) -#define TRAIT_NO_SLIP_ICE "noslip_ice" -/// Stop the mob from sliding around from being slipped, but not the slip part. -/// DOES NOT include ice slips. -#define TRAIT_NO_SLIP_SLIDE "noslip_slide" -/// Stops all slipping and sliding from ocurring -#define TRAIT_NO_SLIP_ALL "noslip_all" - -/// Unlinks gliding from movement speed, meaning that there will be a delay between movements rather than a single move movement between tiles -#define TRAIT_NO_GLIDE "no_glide" - -#define TRAIT_NODEATH "nodeath" -#define TRAIT_NOHARDCRIT "nohardcrit" -#define TRAIT_NOSOFTCRIT "nosoftcrit" -#define TRAIT_MINDSHIELD "mindshield" -#define TRAIT_DISSECTED "dissected" -#define TRAIT_SURGICALLY_ANALYZED "surgically_analyzed" -/// Lets the user succumb even if they got NODEATH -#define TRAIT_SUCCUMB_OVERRIDE "succumb_override" -/// Can hear observers -#define TRAIT_SIXTHSENSE "sixth_sense" -#define TRAIT_FEARLESS "fearless" -/// Ignores darkness for hearing -#define TRAIT_HEAR_THROUGH_DARKNESS "hear_through_darkness" -/// These are used for brain-based paralysis, where replacing the limb won't fix it -#define TRAIT_PARALYSIS_L_ARM "para-l-arm" -#define TRAIT_PARALYSIS_R_ARM "para-r-arm" -#define TRAIT_PARALYSIS_L_LEG "para-l-leg" -#define TRAIT_PARALYSIS_R_LEG "para-r-leg" -#define TRAIT_CANNOT_OPEN_PRESENTS "cannot-open-presents" -#define TRAIT_PRESENT_VISION "present-vision" -#define TRAIT_DISK_VERIFIER "disk-verifier" -#define TRAIT_NOMOBSWAP "no-mob-swap" -/// Can examine IDs to see if they are roundstart. -#define TRAIT_ID_APPRAISER "id_appraiser" -/// Gives us turf, mob and object vision through walls -#define TRAIT_XRAY_VISION "xray_vision" -/// Gives us mob vision through walls and slight night vision -#define TRAIT_THERMAL_VISION "thermal_vision" -/// Gives us turf vision through walls and slight night vision -#define TRAIT_MESON_VISION "meson_vision" -/// Gives us Night vision -#define TRAIT_TRUE_NIGHT_VISION "true_night_vision" -/// Negates our gravity, letting us move normally on floors in 0-g -#define TRAIT_NEGATES_GRAVITY "negates_gravity" -/// We are ignoring gravity -#define TRAIT_IGNORING_GRAVITY "ignores_gravity" -/// Sources for TRAIT_IGNORING_GRAVITY -#define IGNORING_GRAVITY_NEGATION "ignoring_gravity_negation" -/// We have some form of forced gravity acting on us -#define TRAIT_FORCED_GRAVITY "forced_gravity" -/// Makes whispers clearly heard from seven tiles away, the full hearing range -#define TRAIT_GOOD_HEARING "good_hearing" -/// Allows you to hear speech through walls -#define TRAIT_XRAY_HEARING "xray_hearing" - -/// Lets us scan reagents -#define TRAIT_REAGENT_SCANNER "reagent_scanner" -/// Lets us scan machine parts and tech unlocks -#define TRAIT_RESEARCH_SCANNER "research_scanner" -/// Can weave webs into cloth -#define TRAIT_WEB_WEAVER "web_weaver" -/// Can navigate the web without getting stuck -#define TRAIT_WEB_SURFER "web_surfer" -/// A web is being spun on this turf presently -#define TRAIT_SPINNING_WEB_TURF "spinning_web_turf" -#define TRAIT_ABDUCTOR_TRAINING "abductor-training" -#define TRAIT_ABDUCTOR_SCIENTIST_TRAINING "abductor-scientist-training" -#define TRAIT_SURGEON "surgeon" -#define TRAIT_STRONG_GRABBER "strong_grabber" -#define TRAIT_SOOTHED_THROAT "soothed-throat" -#define TRAIT_BOOZE_SLIDER "booze-slider" -/// We place people into a fireman carry quicker than standard -#define TRAIT_QUICK_CARRY "quick-carry" -/// We place people into a fireman carry especially quickly compared to quick_carry -#define TRAIT_QUICKER_CARRY "quicker-carry" -#define TRAIT_QUICK_BUILD "quick-build" -/// We can handle 'dangerous' plants in botany safely -#define TRAIT_PLANT_SAFE "plant_safe" -/// Prevents the overlay from nearsighted -#define TRAIT_NEARSIGHTED_CORRECTED "fixes_nearsighted" -#define TRAIT_UNINTELLIGIBLE_SPEECH "unintelligible-speech" -#define TRAIT_UNSTABLE "unstable" -#define TRAIT_OIL_FRIED "oil_fried" -#define TRAIT_MEDICAL_HUD "med_hud" -#define TRAIT_SECURITY_HUD "sec_hud" -/// for something granting you a diagnostic hud -#define TRAIT_DIAGNOSTIC_HUD "diag_hud" -/// Is a medbot healing you -#define TRAIT_MEDIBOTCOMINGTHROUGH "medbot" -#define TRAIT_PASSTABLE "passtable" -/// Makes you immune to flashes -#define TRAIT_NOFLASH "noflash" -/// prevents xeno huggies implanting skeletons -#define TRAIT_XENO_IMMUNE "xeno_immune" -/// Allows the species to equip items that normally require a jumpsuit without having one equipped. Used by golems. -#define TRAIT_NO_JUMPSUIT "no_jumpsuit" -#define TRAIT_NAIVE "naive" -/// always detect storms on icebox -#define TRAIT_DETECT_STORM "detect_storm" -#define TRAIT_PRIMITIVE "primitive" -#define TRAIT_GUNFLIP "gunflip" -/// Increases chance of getting special traumas, makes them harder to cure -#define TRAIT_SPECIAL_TRAUMA_BOOST "special_trauma_boost" -#define TRAIT_SPACEWALK "spacewalk" -/// Sanity trait to keep track of when we're in hyperspace and add the appropriate element if we werent -#define TRAIT_HYPERSPACED "hyperspaced" -///Gives the movable free hyperspace movement without being pulled during shuttle transit -#define TRAIT_FREE_HYPERSPACE_MOVEMENT "free_hyperspace_movement" -///Lets the movable move freely in the soft-cordon area of transit space, which would otherwise teleport them away just before they got to see the true cordon -#define TRAIT_FREE_HYPERSPACE_SOFTCORDON_MOVEMENT "free_hyperspace_softcordon_movement" -///Deletes the object upon being dumped into space, usually from exiting hyperspace. Useful if you're spawning in a lot of stuff for hyperspace events that dont need to flood the entire game -#define TRAIT_DEL_ON_SPACE_DUMP "del_on_hyperspace_leave" -/// We can walk up or around cliffs, or at least we don't fall off of it -#define TRAIT_CLIFF_WALKER "cliff_walker" -/// Gets double arcade prizes -#define TRAIT_GAMERGOD "gamer-god" -#define TRAIT_GIANT "giant" -#define TRAIT_DWARF "dwarf" -/// makes your footsteps completely silent -#define TRAIT_SILENT_FOOTSTEPS "silent_footsteps" -/// hnnnnnnnggggg..... you're pretty good.... -#define TRAIT_NICE_SHOT "nice_shot" -/// prevents the damage done by a brain tumor -#define TRAIT_TUMOR_SUPPRESSED "brain_tumor_suppressed" -/// Prevents hallucinations from the hallucination brain trauma (RDS) -#define TRAIT_RDS_SUPPRESSED "rds_suppressed" -/// overrides the update_fire proc to always add fire (for lava) -#define TRAIT_PERMANENTLY_ONFIRE "permanently_onfire" -/// Indicates if the mob is currently speaking with sign language -#define TRAIT_SIGN_LANG "sign_language" -/// This mob is able to use sign language over the radio. -#define TRAIT_CAN_SIGN_ON_COMMS "can_sign_on_comms" -/// nobody can use martial arts on this mob -#define TRAIT_MARTIAL_ARTS_IMMUNE "martial_arts_immune" -/// Immune to being afflicted by time stop (spell) -#define TRAIT_TIME_STOP_IMMUNE "time_stop_immune" -/// Revenants draining you only get a very small benefit. -#define TRAIT_WEAK_SOUL "weak_soul" -/// This mob has no soul -#define TRAIT_NO_SOUL "no_soul" -/// Prevents mob from riding mobs when buckled onto something -#define TRAIT_CANT_RIDE "cant_ride" -/// Prevents a mob from being unbuckled, currently only used to prevent people from falling over on the tram -#define TRAIT_CANNOT_BE_UNBUCKLED "cannot_be_unbuckled" -/// from heparin and nitrous oxide, makes open bleeding wounds rapidly spill more blood -#define TRAIT_BLOODY_MESS "bloody_mess" -/// from coagulant reagents, this doesn't affect the bleeding itself but does affect the bleed warning messages -#define TRAIT_COAGULATING "coagulating" -/// From anti-convulsant medication against seizures. -#define TRAIT_ANTICONVULSANT "anticonvulsant" -/// The holder of this trait has antennae or whatever that hurt a ton when noogied -#define TRAIT_ANTENNAE "antennae" -/// Blowing kisses actually does damage to the victim -#define TRAIT_KISS_OF_DEATH "kiss_of_death" -/// Used to activate french kissing -#define TRAIT_GARLIC_BREATH "kiss_of_garlic_death" -/// Addictions don't tick down, basically they're permanently addicted -#define TRAIT_HOPELESSLY_ADDICTED "hopelessly_addicted" -/// This mob has a cult halo. -#define TRAIT_CULT_HALO "cult_halo" -/// Their eyes glow an unnatural red colour. Currently used to set special examine text on humans. Does not guarantee the mob's eyes are coloured red, nor that there is any visible glow on their character sprite. -#define TRAIT_UNNATURAL_RED_GLOWY_EYES "unnatural_red_glowy_eyes" -/// Their eyes are bloodshot. Currently used to set special examine text on humans. Examine text is overridden by TRAIT_UNNATURAL_RED_GLOWY_EYES. -#define TRAIT_BLOODSHOT_EYES "bloodshot_eyes" -/// This mob should never close UI even if it doesn't have a client -#define TRAIT_PRESERVE_UI_WITHOUT_CLIENT "preserve_ui_without_client" -/// Lets the mob use flight potions -#define TRAIT_CAN_USE_FLIGHT_POTION "can_use_flight_potion" -/// This mob overrides certian SSlag_switch measures with this special trait -#define TRAIT_BYPASS_MEASURES "bypass_lagswitch_measures" -/// Someone can safely be attacked with honorbound with ONLY a combat mode check, the trait is assuring holding a weapon and hitting won't hurt them.. -#define TRAIT_ALLOWED_HONORBOUND_ATTACK "allowed_honorbound_attack" -/// The user is sparring -#define TRAIT_SPARRING "sparring" -/// The user is currently challenging an elite mining mob. Prevents him from challenging another until he's either lost or won. -#define TRAIT_ELITE_CHALLENGER "elite_challenger" -/// For living mobs. It signals that the mob shouldn't have their data written in an external json for persistence. -#define TRAIT_DONT_WRITE_MEMORY "dont_write_memory" -/// This mob can be painted with the spraycan -#define TRAIT_SPRAY_PAINTABLE "spray_paintable" -/// This atom can ignore the "is on a turf" check for simple AI datum attacks, allowing them to attack from bags or lockers as long as any other conditions are met -#define TRAIT_AI_BAGATTACK "bagattack" -/// This mobs bodyparts are invisible but still clickable. -#define TRAIT_INVISIBLE_MAN "invisible_man" -/// Don't draw external organs/species features like wings, horns, frills and stuff -#define TRAIT_HIDE_EXTERNAL_ORGANS "hide_external_organs" -///When people are floating from zero-grav or something, we can move around freely! -#define TRAIT_FREE_FLOAT_MOVEMENT "free_float_movement" -// You can stare into the abyss, but it does not stare back. -// You're immune to the hallucination effect of the supermatter, either -// through force of will, or equipment. Present on /mob or /datum/mind -#define TRAIT_MADNESS_IMMUNE "supermatter_madness_immune" -// You can stare into the abyss, and it turns pink. -// Being close enough to the supermatter makes it heal at higher temperatures -// and emit less heat. Present on /mob or /datum/mind -#define TRAIT_SUPERMATTER_SOOTHER "supermatter_soother" - -/// Trait added when a revenant is visible. -#define TRAIT_REVENANT_REVEALED "revenant_revealed" -/// Trait added when a revenant has been inhibited (typically by the bane of a holy weapon) -#define TRAIT_REVENANT_INHIBITED "revenant_inhibited" - -/// Trait which prevents you from becoming overweight -#define TRAIT_NOFAT "cant_get_fat" - -/// Trait which allows you to eat rocks -#define TRAIT_ROCK_EATER "rock_eater" -/// Trait which allows you to gain bonuses from consuming rocks -#define TRAIT_ROCK_METAMORPHIC "rock_metamorphic" - -/// `do_teleport` will not allow this atom to teleport -#define TRAIT_NO_TELEPORT "no-teleport" -/// This atom is a secluded location, which is counted as out of bounds. -/// Anything that enters this atom's contents should react if it wants to stay in bounds. -#define TRAIT_SECLUDED_LOCATION "secluded_loc" - -/// Trait used by fugu glands to avoid double buffing -#define TRAIT_FUGU_GLANDED "fugu_glanded" - -/// When someone with this trait fires a ranged weapon, their fire delays and click cooldowns are halved -#define TRAIT_DOUBLE_TAP "double_tap" - -/// Trait applied to [/datum/mind] to stop someone from using the cursed hot springs to polymorph more than once. -#define TRAIT_HOT_SPRING_CURSED "hot_spring_cursed" - -/// If something has been engraved/cannot be engraved -#define TRAIT_NOT_ENGRAVABLE "not_engravable" - -/// Whether or not orbiting is blocked or not -#define TRAIT_ORBITING_FORBIDDEN "orbiting_forbidden" -/// Trait applied to mob/living to mark that spiders should not gain further enriched eggs from eating their corpse. -#define TRAIT_SPIDER_CONSUMED "spider_consumed" -/// Whether we're sneaking, from the creature sneak ability. -#define TRAIT_SNEAK "sneaking_creatures" - -/// Item still allows you to examine items while blind and actively held. -#define TRAIT_BLIND_TOOL "blind_tool" - -/// The person with this trait always appears as 'unknown'. -#define TRAIT_UNKNOWN "unknown" - -/// If the mob has this trait and die, their bomb implant doesn't detonate automatically. It must be consciously activated. -#define TRAIT_PREVENT_IMPLANT_AUTO_EXPLOSION "prevent_implant_auto_explosion" - -/// If applied to a mob, nearby dogs will have a small chance to nonharmfully harass said mob -#define TRAIT_HATED_BY_DOGS "hated_by_dogs" -/// Mobs with this trait will not be immobilized when held up -#define TRAIT_NOFEAR_HOLDUPS "no_fear_holdup" -/// Mob has gotten an armor buff from adamantine extract -#define TRAIT_ADAMANTINE_EXTRACT_ARMOR "adamantine_extract_armor" -/// Mobs with this trait won't be able to dual wield guns. -#define TRAIT_NO_GUN_AKIMBO "no_gun_akimbo" - -/// Projectile with this trait will always hit the defined zone of a struck living mob. -#define TRAIT_ALWAYS_HIT_ZONE "always_hit_zone" - -/// Mobs with this trait do care about a few grisly things, such as digging up graves. They also really do not like bringing people back to life or tending wounds, but love autopsies and amputations. -#define TRAIT_MORBID "morbid" - -/// Whether or not the user is in a MODlink call, prevents making more calls -#define TRAIT_IN_CALL "in_call" - -// METABOLISMS -// Various jobs on the station have historically had better reactions -// to various drinks and foodstuffs. Security liking donuts is a classic -// example. Through years of training/abuse, their livers have taken -// a liking to those substances. Steal a sec officer's liver, eat donuts good. - -// These traits are applied to /obj/item/organ/internal/liver -#define TRAIT_LAW_ENFORCEMENT_METABOLISM "law_enforcement_metabolism" -#define TRAIT_CULINARY_METABOLISM "culinary_metabolism" -#define TRAIT_COMEDY_METABOLISM "comedy_metabolism" -#define TRAIT_MEDICAL_METABOLISM "medical_metabolism" -#define TRAIT_ENGINEER_METABOLISM "engineer_metabolism" -#define TRAIT_ROYAL_METABOLISM "royal_metabolism" -#define TRAIT_PRETENDER_ROYAL_METABOLISM "pretender_royal_metabolism" -#define TRAIT_BALLMER_SCIENTIST "ballmer_scientist" -#define TRAIT_MAINTENANCE_METABOLISM "maintenance_metabolism" -#define TRAIT_CORONER_METABOLISM "coroner_metabolism" - -//LUNG TRAITS -/// Lungs always breathe normally when in vacuum/space. -#define TRAIT_SPACEBREATHING "spacebreathing" - -/// This mob can strip other mobs. -#define TRAIT_CAN_STRIP "can_strip" -/// Can use the nuclear device's UI, regardless of a lack of hands -#define TRAIT_CAN_USE_NUKE "can_use_nuke" - -// If present on a mob or mobmind, allows them to "suplex" an immovable rod -// turning it into a glorified potted plant, and giving them an -// achievement. Can also be used on rod-form wizards. -// Normally only present in the mind of a Research Director. -#define TRAIT_ROD_SUPLEX "rod_suplex" -/// The mob has an active mime vow of silence, and thus is unable to speak and has other mime things going on -#define TRAIT_MIMING "miming" - -/// This mob is phased out of reality from magic, either a jaunt or rod form -#define TRAIT_MAGICALLY_PHASED "magically_phased" - -//SKILLS -#define TRAIT_UNDERWATER_BASKETWEAVING_KNOWLEDGE "underwater_basketweaving" -#define TRAIT_WINE_TASTER "wine_taster" -#define TRAIT_BONSAI "bonsai" -#define TRAIT_LIGHTBULB_REMOVER "lightbulb_remover" -#define TRAIT_KNOW_ROBO_WIRES "know_robo_wires" -#define TRAIT_KNOW_ENGI_WIRES "know_engi_wires" -#define TRAIT_ENTRAILS_READER "entrails_reader" -#define TRAIT_SABRAGE_PRO "sabrage_pro" -/// this skillchip trait lets you wash brains in washing machines to heal them -#define TRAIT_BRAINWASHING "brainwashing" -/// Allows chef's to chefs kiss their food, to make them with love -#define TRAIT_CHEF_KISS "chefs_kiss" - -///Movement type traits for movables. See elements/movetype_handler.dm -#define TRAIT_MOVE_GROUND "move_ground" -#define TRAIT_MOVE_FLYING "move_flying" -#define TRAIT_MOVE_VENTCRAWLING "move_ventcrawling" -#define TRAIT_MOVE_FLOATING "move_floating" -#define TRAIT_MOVE_PHASING "move_phasing" -/// Disables the floating animation. See above. -#define TRAIT_NO_FLOATING_ANIM "no-floating-animation" - -/// Weather immunities, also protect mobs inside them. -#define TRAIT_LAVA_IMMUNE "lava_immune" //Used by lava turfs and The Floor Is Lava. -#define TRAIT_ASHSTORM_IMMUNE "ashstorm_immune" -#define TRAIT_SNOWSTORM_IMMUNE "snowstorm_immune" -#define TRAIT_RADSTORM_IMMUNE "radstorm_immune" -#define TRAIT_VOIDSTORM_IMMUNE "voidstorm_immune" -#define TRAIT_WEATHER_IMMUNE "weather_immune" //Immune to ALL weather effects. - -/// Cannot be grabbed by goliath tentacles -#define TRAIT_TENTACLE_IMMUNE "tentacle_immune" -/// Currently under the effect of overwatch -#define TRAIT_OVERWATCHED "watcher_overwatched" -/// Cannot be targetted by watcher overwatch -#define TRAIT_OVERWATCH_IMMUNE "overwatch_immune" - -//non-mob traits -/// Used for limb-based paralysis, where replacing the limb will fix it. -#define TRAIT_PARALYSIS "paralysis" -/// Used for limbs. -#define TRAIT_DISABLED_BY_WOUND "disabled-by-wound" -/// This movable atom has the explosive block element -#define TRAIT_BLOCKING_EXPLOSIVES "blocking_explosives" - -///Lava will be safe to cross while it has this trait. -#define TRAIT_LAVA_STOPPED "lava_stopped" -///Chasms will be safe to cross while they've this trait. -#define TRAIT_CHASM_STOPPED "chasm_stopped" -///The effects of the immerse element will be halted while this trait is present. -#define TRAIT_IMMERSE_STOPPED "immerse_stopped" -/// The effects of hyperspace drift are blocked when the tile has this trait -#define TRAIT_HYPERSPACE_STOPPED "hyperspace_stopped" - -///Turf slowdown will be ignored when this trait is added to a turf. -#define TRAIT_TURF_IGNORE_SLOWDOWN "turf_ignore_slowdown" -///Mobs won't slip on a wet turf while it has this trait -#define TRAIT_TURF_IGNORE_SLIPPERY "turf_ignore_slippery" - -/// Mobs with this trait can't send the mining shuttle console when used outside the station itself -#define TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION "forbid_mining_shuttle_console_outside_station" - -//important_recursive_contents traits -/* - * Used for movables that need to be updated, via COMSIG_ENTER_AREA and COMSIG_EXIT_AREA, when transitioning areas. - * Use [/atom/movable/proc/become_area_sensitive(trait_source)] to properly enable it. How you remove it isn't as important. - */ -#define TRAIT_AREA_SENSITIVE "area-sensitive" -///every hearing sensitive atom has this trait -#define TRAIT_HEARING_SENSITIVE "hearing_sensitive" -///every object that is currently the active storage of some client mob has this trait -#define TRAIT_ACTIVE_STORAGE "active_storage" - -/// Climbable trait, given and taken by the climbable element when added or removed. Exists to be easily checked via HAS_TRAIT(). -#define TRAIT_CLIMBABLE "trait_climbable" - -/// Used by the honkspam element to avoid spamming the sound. Amusing considering its name. -#define TRAIT_HONKSPAMMING "trait_honkspamming" - -///Used for managing KEEP_TOGETHER in [/atom/var/appearance_flags] -#define TRAIT_KEEP_TOGETHER "keep-together" - -///Marks the item as having been transmuted. Functionally blacklists the item from being recycled or sold for materials. -#define TRAIT_MAT_TRANSMUTED "transmuted" - -// cargo traits -///If the item will block the cargo shuttle from flying to centcom -#define TRAIT_BANNED_FROM_CARGO_SHUTTLE "banned_from_cargo_shuttle" -///If the crate's contents are immune to the missing item manifest error -#define TRAIT_NO_MISSING_ITEM_ERROR "no_missing_item_error" -///If the crate is immune to the wrong content in manifest error -#define TRAIT_NO_MANIFEST_CONTENTS_ERROR "no_manifest_contents_error" - -///SSeconomy trait, if the market is crashing and people can't withdraw credits from ID cards. -#define TRAIT_MARKET_CRASHING "market_crashing" - -// item traits -#define TRAIT_NODROP "nodrop" -/// cannot be inserted in a storage. -#define TRAIT_NO_STORAGE_INSERT "no_storage_insert" -/// Visible on t-ray scanners if the atom/var/level == 1 -#define TRAIT_T_RAY_VISIBLE "t-ray-visible" -/// If this item's been grilled -#define TRAIT_FOOD_GRILLED "food_grilled" -/// If this item's been fried -#define TRAIT_FOOD_FRIED "food_fried" -/// This is a silver slime created item -#define TRAIT_FOOD_SILVER "food_silver" -/// If this item's been made by a chef instead of being map-spawned or admin-spawned or such -#define TRAIT_FOOD_CHEF_MADE "food_made_by_chef" -/// The items needs two hands to be carried -#define TRAIT_NEEDS_TWO_HANDS "needstwohands" -/// Can't be catched when thrown -#define TRAIT_UNCATCHABLE "uncatchable" -/// Fish in this won't die -#define TRAIT_FISH_SAFE_STORAGE "fish_case" -/// Stuff that can go inside fish cases -#define TRAIT_FISH_CASE_COMPATIBILE "fish_case_compatibile" -/// If the item can be used as a bit. -#define TRAIT_FISHING_BAIT "fishing_bait" -/// The quality of the bait. It influences odds of catching fish -#define TRAIT_BASIC_QUALITY_BAIT "baic_quality_bait" -#define TRAIT_GOOD_QUALITY_BAIT "good_quality_bait" -#define TRAIT_GREAT_QUALITY_BAIT "great_quality_bait" -/// Baits with this trait will ignore bait preferences and related fish traits. -#define OMNI_BAIT_TRAIT "omni_bait" -/// Plants that were mutated as a result of passive instability, not a mutation threshold. -#define TRAIT_PLANT_WILDMUTATE "wildmutation" -/// If you hit an APC with exposed internals with this item it will try to shock you -#define TRAIT_APC_SHOCKING "apc_shocking" -/// Properly wielded two handed item -#define TRAIT_WIELDED "wielded" -/// A transforming item that is actively extended / transformed -#define TRAIT_TRANSFORM_ACTIVE "active_transform" -/// Buckling yourself to objects with this trait won't immobilize you -#define TRAIT_NO_IMMOBILIZE "no_immobilize" -/// Prevents stripping this equipment -#define TRAIT_NO_STRIP "no_strip" -/// Disallows this item from being pricetagged with a barcode -#define TRAIT_NO_BARCODES "no_barcode" -/// Allows heretics to cast their spells. -#define TRAIT_ALLOW_HERETIC_CASTING "allow_heretic_casting" -/// Designates a heart as a living heart for a heretic. -#define TRAIT_LIVING_HEART "living_heart" -/// Prevents the same person from being chosen multiple times for kidnapping objective -#define TRAIT_HAS_BEEN_KIDNAPPED "has_been_kidnapped" -/// An item still plays its hitsound even if it has 0 force, instead of the tap -#define TRAIT_CUSTOM_TAP_SOUND "no_tap_sound" -/// Makes the feedback message when someone else is putting this item on you more noticeable -#define TRAIT_DANGEROUS_OBJECT "dangerous_object" -/// determines whether or not objects are haunted and teleport/attack randomly -#define TRAIT_HAUNTED "haunted" - -//quirk traits -#define TRAIT_ALCOHOL_TOLERANCE "alcohol_tolerance" -#define TRAIT_HEAVY_DRINKER "heavy_drinker" -#define TRAIT_AGEUSIA "ageusia" -#define TRAIT_HEAVY_SLEEPER "heavy_sleeper" -#define TRAIT_NIGHT_VISION "night_vision" -#define TRAIT_LIGHT_STEP "light_step" -#define TRAIT_SPIRITUAL "spiritual" -#define TRAIT_CLOWN_ENJOYER "clown_enjoyer" -#define TRAIT_MIME_FAN "mime_fan" -#define TRAIT_VORACIOUS "voracious" -#define TRAIT_SELF_AWARE "self_aware" -#define TRAIT_FREERUNNING "freerunning" -#define TRAIT_SKITTISH "skittish" -#define TRAIT_PROSOPAGNOSIA "prosopagnosia" -#define TRAIT_TAGGER "tagger" -#define TRAIT_PHOTOGRAPHER "photographer" -#define TRAIT_MUSICIAN "musician" -#define TRAIT_LIGHT_DRINKER "light_drinker" -#define TRAIT_EMPATH "empath" -#define TRAIT_FRIENDLY "friendly" -#define TRAIT_GRABWEAKNESS "grab_weakness" -#define TRAIT_SNOB "snob" -#define TRAIT_BALD "bald" -#define TRAIT_SHAVED "shaved" -#define TRAIT_BADTOUCH "bad_touch" -#define TRAIT_EXTROVERT "extrovert" -#define TRAIT_INTROVERT "introvert" -#define TRAIT_ANXIOUS "anxious" -#define TRAIT_SMOKER "smoker" -#define TRAIT_POSTERBOY "poster_boy" -#define TRAIT_THROWINGARM "throwing_arm" -#define TRAIT_SETTLER "settler" - -///if the atom has a sticker attached to it -#define TRAIT_STICKERED "stickered" - -// Debug traits -/// This object has light debugging tools attached to it -#define TRAIT_LIGHTING_DEBUGGED "lighting_debugged" - -/// Gives you the Shifty Eyes quirk, rarely making people who examine you think you examined them back even when you didn't -#define TRAIT_SHIFTY_EYES "shifty_eyes" - -///Trait for the gamer quirk. -#define TRAIT_GAMER "gamer" - -///Trait for dryable items -#define TRAIT_DRYABLE "trait_dryable" -///Trait for dried items -#define TRAIT_DRIED "trait_dried" -/// Trait for customizable reagent holder -#define TRAIT_CUSTOMIZABLE_REAGENT_HOLDER "customizable_reagent_holder" -/// Trait for allowing an item that isn't food into the customizable reagent holder -#define TRAIT_ODD_CUSTOMIZABLE_FOOD_INGREDIENT "odd_customizable_food_ingredient" - -/// Used to prevent multiple floating blades from triggering over the same target -#define TRAIT_BEING_BLADE_SHIELDED "being_blade_shielded" - -/// This mob doesn't count as looking at you if you can only act while unobserved -#define TRAIT_UNOBSERVANT "trait_unobservant" - -/* Traits for ventcrawling. - * Both give access to ventcrawling, but *_NUDE requires the user to be - * wearing no clothes and holding no items. If both present, *_ALWAYS - * takes precedence. - */ -#define TRAIT_VENTCRAWLER_ALWAYS "ventcrawler_always" -#define TRAIT_VENTCRAWLER_NUDE "ventcrawler_nude" - -/// Minor trait used for beakers, or beaker-ishes. [/obj/item/reagent_containers], to show that they've been used in a reagent grinder. -#define TRAIT_MAY_CONTAIN_BLENDED_DUST "may_contain_blended_dust" - -/// Trait put on [/mob/living/carbon/human]. If that mob has a crystal core, also known as an ethereal heart, it will not try to revive them if the mob dies. -#define TRAIT_CANNOT_CRYSTALIZE "cannot_crystalize" - -///Trait applied to turfs when an atmos holosign is placed on them. It will stop firedoors from closing. -#define TRAIT_FIREDOOR_STOP "firedoor_stop" - -/// Trait applied when the MMI component is added to an [/obj/item/integrated_circuit] -#define TRAIT_COMPONENT_MMI "component_mmi" - -/// Trait applied when an integrated circuit/module becomes undupable -#define TRAIT_CIRCUIT_UNDUPABLE "circuit_undupable" - -/// Hearing trait that is from the hearing component -#define CIRCUIT_HEAR_TRAIT "circuit_hear" - -/// PDA Traits. This one makes PDAs explode if the user opens the messages menu -#define TRAIT_PDA_MESSAGE_MENU_RIGGED "pda_message_menu_rigged" -/// This one denotes a PDA has received a rigged message and will explode when the user tries to reply to a rigged PDA message -#define TRAIT_PDA_CAN_EXPLODE "pda_can_explode" - -/// If present on a [/mob/living/carbon], will make them appear to have a medium level disease on health HUDs. -#define TRAIT_DISEASELIKE_SEVERITY_MEDIUM "diseaselike_severity_medium" - -/// trait denoting someone will crawl faster in soft crit -#define TRAIT_TENACIOUS "tenacious" - -/// trait denoting someone will sometimes recover out of crit -#define TRAIT_UNBREAKABLE "unbreakable" - -/// trait that prevents AI controllers from planning detached from ai_status to prevent weird state stuff. -#define TRAIT_AI_PAUSED "TRAIT_AI_PAUSED" - -/// this is used to bypass tongue language restrictions but not tongue disabilities -#define TRAIT_TOWER_OF_BABEL "tower_of_babel" - -/// This target has recently been shot by a marksman coin and is very briefly immune to being hit by one again to prevent recursion -#define TRAIT_RECENTLY_COINED "recently_coined" - -/// Receives echolocation images. -#define TRAIT_ECHOLOCATION_RECEIVER "echolocation_receiver" -/// Echolocation has a higher range. -#define TRAIT_ECHOLOCATION_EXTRA_RANGE "echolocation_extra_range" - -/// Trait given to a living mob and any observer mobs that stem from them if they suicide. -/// For clarity, this trait should always be associated/tied to a reference to the mob that suicided- not anything else. -#define TRAIT_SUICIDED "committed_suicide" - -/// Trait given to a living mob to prevent wizards from making it immortal -#define TRAIT_PERMANENTLY_MORTAL "permanently_mortal" - -///Trait given to a mob with a ckey currently in a temporary body, allowing people to know someone will re-enter the round later. -#define TRAIT_MIND_TEMPORARILY_GONE "temporarily_gone" - -/// Similar trait given to temporary bodies inhabited by players -#define TRAIT_TEMPORARY_BODY "temporary_body" - -/// Trait given to mechs that can have orebox functionality on movement -#define TRAIT_OREBOX_FUNCTIONAL "orebox_functional" - -///fish traits -#define TRAIT_RESIST_EMULSIFY "resist_emulsify" -#define TRAIT_FISH_SELF_REPRODUCE "fish_self_reproduce" -#define TRAIT_FISH_NO_MATING "fish_no_mating" -#define TRAIT_YUCKY_FISH "yucky_fish" -#define TRAIT_FISH_TOXIN_IMMUNE "fish_toxin_immune" -#define TRAIT_FISH_CROSSBREEDER "fish_crossbreeder" -#define TRAIT_FISH_AMPHIBIOUS "fish_amphibious" -///Trait needed for the lubefish evolution -#define TRAIT_FISH_FED_LUBE "fish_fed_lube" -#define TRAIT_FISH_NO_HUNGER "fish_no_hunger" -///It comes from a fish case. Relevant for bounties so far. -#define TRAIT_FISH_FROM_CASE "fish_from_case" - -/// Trait given to angelic constructs to let them purge cult runes -#define TRAIT_ANGELIC "angelic" - -// common trait sources -#define TRAIT_GENERIC "generic" -#define UNCONSCIOUS_TRAIT "unconscious" -#define EYE_DAMAGE "eye_damage" -#define EAR_DAMAGE "ear_damage" -#define GENETIC_MUTATION "genetic" -#define OBESITY "obesity" -#define MAGIC_TRAIT "magic" -#define TRAUMA_TRAIT "trauma" -#define FLIGHTPOTION_TRAIT "flightpotion" -/// Trait inherited by experimental surgeries -#define EXPERIMENTAL_SURGERY_TRAIT "experimental_surgery" -#define DISEASE_TRAIT "disease" -#define SPECIES_TRAIT "species" -#define ORGAN_TRAIT "organ" -/// Trait given by augmented limbs -#define AUGMENTATION_TRAIT "augments" -/// Trait given by organ gained via abductor surgery -#define ABDUCTOR_GLAND_TRAIT "abductor_gland" -/// cannot be removed without admin intervention -#define ROUNDSTART_TRAIT "roundstart" -#define JOB_TRAIT "job" -#define CYBORG_ITEM_TRAIT "cyborg-item" -/// Any traits granted by quirks. -#define QUIRK_TRAIT "quirk_trait" -/// (B)admins only. -#define ADMIN_TRAIT "admin" -/// Any traits given through a smite. -#define SMITE_TRAIT "smite" -#define CHANGELING_TRAIT "changeling" -#define CULT_TRAIT "cult" -#define LICH_TRAIT "lich" -/// The item is magically cursed -#define CURSED_ITEM_TRAIT(item_type) "cursed_item_[item_type]" -#define ABSTRACT_ITEM_TRAIT "abstract-item" -/// A trait given by any status effect -#define STATUS_EFFECT_TRAIT "status-effect" -/// A trait given by a specific status effect (not sure why we need both but whatever!) -#define TRAIT_STATUS_EFFECT(effect_id) "[effect_id]-trait" -/// Trait from light debugging -#define LIGHT_DEBUG_TRAIT "light-debug" - -#define CLOTHING_TRAIT "clothing" -#define HELMET_TRAIT "helmet" -/// inherited from the mask -#define MASK_TRAIT "mask" -/// inherited from your sweet kicks -#define SHOES_TRAIT "shoes" -/// Trait inherited by implants -#define IMPLANT_TRAIT "implant" -#define GLASSES_TRAIT "glasses" -/// inherited from riding vehicles -#define VEHICLE_TRAIT "vehicle" -#define INNATE_TRAIT "innate" -#define CRIT_HEALTH_TRAIT "crit_health" -#define OXYLOSS_TRAIT "oxyloss" -/// Trait sorce for "was recently shocked by something" -#define WAS_SHOCKED "was_shocked" -#define TURF_TRAIT "turf" -/// trait associated to being buckled -#define BUCKLED_TRAIT "buckled" -/// trait associated to being held in a chokehold -#define CHOKEHOLD_TRAIT "chokehold" -/// trait associated to resting -#define RESTING_TRAIT "resting" -/// trait associated to a stat value or range of -#define STAT_TRAIT "stat" -#define STATION_TRAIT "station-trait" -/// obtained from mapping helper -#define MAPPING_HELPER_TRAIT "mapping-helper" -/// Trait associated to wearing a suit -#define SUIT_TRAIT "suit" -/// Trait associated to lying down (having a [lying_angle] of a different value than zero). -#define LYING_DOWN_TRAIT "lying-down" -/// A trait gained by leaning against a wall -#define LEANING_TRAIT "leaning" -/// Trait associated to lacking electrical power. -#define POWER_LACK_TRAIT "power-lack" -/// Trait associated to lacking motor movement -#define MOTOR_LACK_TRAIT "motor-lack" -/// Trait associated with mafia -#define MAFIA_TRAIT "mafia" -/// Trait associated with ctf -#define CTF_TRAIT "ctf" -/// Trait associated with highlander -#define HIGHLANDER_TRAIT "highlander" -/// Trait given from playing pretend with baguettes -#define SWORDPLAY_TRAIT "swordplay" -/// Trait given by being recruited as a nuclear operative -#define NUKE_OP_MINION_TRAIT "nuke-op-minion" -/// Trait given by mech equipment -#define TRAIT_MECH_EQUIPMENT(equipment_type) "mech_equipment_[equipment_type]" -/// Trait given to you by shapeshifting -#define SHAPESHIFT_TRAIT "shapeshift_trait" - -///generic atom traits -/// Trait from [/datum/element/rust]. Its rusty and should be applying a special overlay to denote this. -#define TRAIT_RUSTY "rust_trait" -/// Stops someone from splashing their reagent_container on an object with this trait -#define TRAIT_DO_NOT_SPLASH "do_not_splash" -/// Marks an atom when the cleaning of it is first started, so that the cleaning overlay doesn't get removed prematurely -#define TRAIT_CURRENTLY_CLEANING "currently_cleaning" -/// Objects with this trait are deleted if they fall into chasms, rather than entering abstract storage -#define TRAIT_CHASM_DESTROYED "chasm_destroyed" -/// Trait from being under the floor in some manner -#define TRAIT_UNDERFLOOR "underfloor" -/// If the movable shouldn't be reflected by mirrors. -#define TRAIT_NO_MIRROR_REFLECTION "no_mirror_reflection" -/// If this movable is currently treading in a turf with the immerse element. -#define TRAIT_IMMERSED "immersed" -/** - * With this, the immerse overlay will give the atom its own submersion visual overlay - * instead of one that's also shared with other movables, thus making editing its appearance possible. - */ -#define TRAIT_UNIQUE_IMMERSE "unique_immerse" - - -// unique trait sources, still defines -#define EMP_TRAIT "emp_trait" -#define STATUE_MUTE "statue" -#define CHANGELING_DRAIN "drain" -/// changelings with this trait can no longer talk over the hivemind -#define CHANGELING_HIVEMIND_MUTE "ling_mute" -#define TRAIT_HULK "hulk" -#define STASIS_MUTE "stasis" -#define GENETICS_SPELL "genetics_spell" -#define EYES_COVERED "eyes_covered" -#define NO_EYES "no_eyes" -#define HYPNOCHAIR_TRAIT "hypnochair" -#define FLASHLIGHT_EYES "flashlight_eyes" -#define IMPURE_OCULINE "impure_oculine" -#define HAUNTIUM_REAGENT_TRAIT "hauntium_reagent_trait" -#define TRAIT_SANTA "santa" -#define SCRYING_ORB "scrying-orb" -#define ABDUCTOR_ANTAGONIST "abductor-antagonist" -#define JUNGLE_FEVER_TRAIT "jungle_fever" -#define MEGAFAUNA_TRAIT "megafauna" -#define CLOWN_NUKE_TRAIT "clown-nuke" -#define STICKY_MOUSTACHE_TRAIT "sticky-moustache" -#define CHAINSAW_FRENZY_TRAIT "chainsaw-frenzy" -#define CHRONO_GUN_TRAIT "chrono-gun" -#define REVERSE_BEAR_TRAP_TRAIT "reverse-bear-trap" -#define CURSED_MASK_TRAIT "cursed-mask" -#define HIS_GRACE_TRAIT "his-grace" -#define HAND_REPLACEMENT_TRAIT "magic-hand" -#define HOT_POTATO_TRAIT "hot-potato" -#define SABRE_SUICIDE_TRAIT "sabre-suicide" -#define ABDUCTOR_VEST_TRAIT "abductor-vest" -#define CAPTURE_THE_FLAG_TRAIT "capture-the-flag" -#define BASKETBALL_MINIGAME_TRAIT "basketball-minigame" -#define EYE_OF_GOD_TRAIT "eye-of-god" -#define SHAMEBRERO_TRAIT "shamebrero" -#define CHRONOSUIT_TRAIT "chronosuit" -#define LOCKED_HELMET_TRAIT "locked-helmet" -#define NINJA_SUIT_TRAIT "ninja-suit" -#define SLEEPING_CARP_TRAIT "sleeping_carp" -#define TIMESTOP_TRAIT "timestop" -#define LIFECANDLE_TRAIT "lifecandle" -#define VENTCRAWLING_TRAIT "ventcrawling" -#define SPECIES_FLIGHT_TRAIT "species-flight" -#define FROSTMINER_ENRAGE_TRAIT "frostminer-enrage" -#define NO_GRAVITY_TRAIT "no-gravity" -/// A trait gained from a mob's leap action, like the leaper -#define LEAPING_TRAIT "leaping" -/// A trait gained from a mob's vanish action, like the herophant -#define VANISHING_TRAIT "vanishing" -/// A trait gained from a mob's swoop action, like the ash drake -#define SWOOPING_TRAIT "swooping" -/// A trait gained from a mob's mimic ability, like the mimic -#define MIMIC_TRAIT "mimic" -#define SHRUNKEN_TRAIT "shrunken" -#define LEAPER_BUBBLE_TRAIT "leaper-bubble" -#define DNA_VAULT_TRAIT "dna_vault" -/// sticky nodrop sounds like a bad soundcloud rapper's name -#define STICKY_NODROP "sticky-nodrop" -#define SKILLCHIP_TRAIT "skillchip" -#define SKILL_TRAIT "skill" -#define BUSY_FLOORBOT_TRAIT "busy-floorbot" -#define PULLED_WHILE_SOFTCRIT_TRAIT "pulled-while-softcrit" -#define LOCKED_BORG_TRAIT "locked-borg" -/// trait associated to not having locomotion appendages nor the ability to fly or float -#define LACKING_LOCOMOTION_APPENDAGES_TRAIT "lacking-locomotion-appengades" -#define CRYO_TRAIT "cryo" -/// trait associated to not having fine manipulation appendages such as hands -#define LACKING_MANIPULATION_APPENDAGES_TRAIT "lacking-manipulation-appengades" -#define HANDCUFFED_TRAIT "handcuffed" -/// Trait granted by [/obj/item/warp_whistle] -#define WARPWHISTLE_TRAIT "warpwhistle" -///Turf trait for when a turf is transparent -#define TURF_Z_TRANSPARENT_TRAIT "turf_z_transparent" -/// Trait applied by [/datum/component/soulstoned] -#define SOULSTONE_TRAIT "soulstone" -/// Trait applied to slimes by low temperature -#define SLIME_COLD "slime-cold" -/// Trait applied to mobs by being tipped over -#define TIPPED_OVER "tipped-over" -/// Trait applied to PAIs by being folded -#define PAI_FOLDED "pai-folded" -/// Trait applied to brain mobs when they lack external aid for locomotion, such as being inside a mech. -#define BRAIN_UNAIDED "brain-unaided" -/// Trait applied to a mob when it gets a required "operational datum" (components/elements). Sends out the source as the type of the element. -#define TRAIT_SUBTREE_REQUIRED_OPERATIONAL_DATUM "element-required" -/// Trait applied by MODsuits. -#define MOD_TRAIT "mod" -/// Trait applied by element -#define ELEMENT_TRAIT(source) "element_trait_[source]" -/// Trait granted by the berserker hood. -#define BERSERK_TRAIT "berserk_trait" -/// Trait granted by [/obj/item/rod_of_asclepius] -#define HIPPOCRATIC_OATH_TRAIT "hippocratic_oath" -/// Trait granted by [/datum/status_effect/blooddrunk] -#define BLOODDRUNK_TRAIT "blooddrunk" -/// Trait granted by lipstick -#define LIPSTICK_TRAIT "lipstick_trait" -/// Self-explainatory. -#define BEAUTY_ELEMENT_TRAIT "beauty_element" -#define MOOD_DATUM_TRAIT "mood_datum" -#define DRONE_SHY_TRAIT "drone_shy" -/// Trait given by stabilized light pink extracts -#define STABILIZED_LIGHT_PINK_EXTRACT_TRAIT "stabilized_light_pink" -/// Trait given by adamantine extracts -#define ADAMANTINE_EXTRACT_TRAIT "adamantine_extract" -/// Given by the multiple_lives component to the previous body of the mob upon death. -#define EXPIRED_LIFE_TRAIT "expired_life" -/// Trait given to an atom/movable when they orbit something. -#define ORBITING_TRAIT "orbiting" -/// From the item_scaling element -#define ITEM_SCALING_TRAIT "item_scaling" -/// Trait given by choking -#define CHOKING_TRAIT "choking_trait" -/// Trait given by hallucinations -#define HALLUCINATION_TRAIT "hallucination_trait" -/// Trait given by simple/basic mob death -#define BASIC_MOB_DEATH_TRAIT "basic_mob_death" -/// Trait given by your current speed -#define SPEED_TRAIT "speed_trait" -/// Trait given to mobs that have been autopsied -#define AUTOPSY_TRAIT "autopsy_trait" -/// Trait given by [/datum/status_effect/blessing_of_insanity] -#define MAD_WIZARD_TRAIT "mad_wizard_trait" -/// Isn't attacked harmfully by blob structures -#define TRAIT_BLOB_ALLY "blob_ally" - -/** -* Trait granted by [/mob/living/carbon/Initialize] and -* granted/removed by [/obj/item/organ/internal/tongue] -* Used for ensuring that carbons without tongues cannot taste anything -* so it is added in Initialize, and then removed when a tongue is inserted -* and readded when a tongue is removed. -*/ -#define NO_TONGUE_TRAIT "no_tongue_trait" - -/// Trait granted by [/mob/living/silicon/robot] -/// Traits applied to a silicon mob by their model. -#define MODEL_TRAIT "model_trait" - -/// Trait granted by [mob/living/silicon/ai] -/// Applied when the ai anchors itself -#define AI_ANCHOR_TRAIT "ai_anchor" -/// Trait from [/datum/antagonist/nukeop/clownop] -#define CLOWNOP_TRAIT "clownop" - -///Traits given by station traits -#define STATION_TRAIT_BANANIUM_SHIPMENTS "station_trait_bananium_shipments" -#define STATION_TRAIT_UNNATURAL_ATMOSPHERE "station_trait_unnatural_atmosphere" -#define STATION_TRAIT_UNIQUE_AI "station_trait_unique_ai" -#define STATION_TRAIT_CARP_INFESTATION "station_trait_carp_infestation" -#define STATION_TRAIT_PREMIUM_INTERNALS "station_trait_premium_internals" -#define STATION_TRAIT_LATE_ARRIVALS "station_trait_late_arrivals" -#define STATION_TRAIT_RANDOM_ARRIVALS "station_trait_random_arrivals" -#define STATION_TRAIT_HANGOVER "station_trait_hangover" -#define STATION_TRAIT_FILLED_MAINT "station_trait_filled_maint" -#define STATION_TRAIT_EMPTY_MAINT "station_trait_empty_maint" -#define STATION_TRAIT_PDA_GLITCHED "station_trait_pda_glitched" -#define STATION_TRAIT_BOTS_GLITCHED "station_trait_bot_glitch" -#define STATION_TRAIT_CYBERNETIC_REVOLUTION "station_trait_cybernetic_revolution" -#define STATION_TRAIT_BIGGER_PODS "station_trait_bigger_pods" -#define STATION_TRAIT_SMALLER_PODS "station_trait_smaller_pods" -#define STATION_TRAIT_BIRTHDAY "station_trait_birthday" -#define STATION_TRAIT_SPIDER_INFESTATION "station_trait_spider_infestation" -#define STATION_TRAIT_REVOLUTIONARY_TRASHING "station_trait_revolutionary_trashing" -#define STATION_TRAIT_RADIOACTIVE_NEBULA "station_trait_radioactive_nebula" -#define STATION_TRAIT_FORESTED "station_trait_forested" -#define STATION_TRAIT_VENDING_SHORTAGE "station_trait_vending_shortage" -#define STATION_TRAIT_MEDBOT_MANIA "station_trait_medbot_mania" -#define STATION_TRAIT_LOANER_SHUTTLE "station_trait_loaner_shuttle" -#define STATION_TRAIT_SHUTTLE_SALE "station_trait_shuttle_sale" - -///From the market_crash event -#define MARKET_CRASH_EVENT_TRAIT "crashed_market_event" - -/// Denotes that this id card was given via the job outfit, aka the first ID this player got. -#define TRAIT_JOB_FIRST_ID_CARD "job_first_id_card" -/// ID cards with this trait will attempt to forcibly occupy the front-facing ID card slot in wallets. -#define TRAIT_MAGNETIC_ID_CARD "magnetic_id_card" -/// ID cards with this trait have special appraisal text. -#define TRAIT_TASTEFULLY_THICK_ID_CARD "impressive_very_nice" -/// things with this trait are treated as having no access in /obj/proc/check_access(obj/item) -#define TRAIT_ALWAYS_NO_ACCESS "alwaysnoaccess" - -/// Traits granted to items due to their chameleon properties. -#define CHAMELEON_ITEM_TRAIT "chameleon_item_trait" - -/// This human wants to see the color of their glasses, for some reason -#define TRAIT_SEE_GLASS_COLORS "see_glass_colors" - -/// this mob is under the effects of the power chord -#define TRAIT_POWER_CHORD "power_chord" - -// Radiation defines - -/// Marks that this object is irradiated -#define TRAIT_IRRADIATED "iraddiated" - -/// Harmful radiation effects, the toxin damage and the burns, will not occur while this trait is active -#define TRAIT_HALT_RADIATION_EFFECTS "halt_radiation_effects" - -/// This clothing protects the user from radiation. -/// This should not be used on clothing_traits, but should be applied to the clothing itself. -#define TRAIT_RADIATION_PROTECTED_CLOTHING "radiation_protected_clothing" - -/// Whether or not this item will allow the radiation SS to go through standard -/// radiation processing as if this wasn't already irradiated. -/// Basically, without this, COMSIG_IN_RANGE_OF_IRRADIATION won't fire once the object is irradiated. -#define TRAIT_BYPASS_EARLY_IRRADIATED_CHECK "radiation_bypass_early_irradiated_check" - -/// Simple trait that just holds if we came into growth from a specific mob type. Should hold a REF(src) to the type of mob that caused the growth, not anything else. -#define TRAIT_WAS_EVOLVED "was_evolved_from_the_mob_we_hold_a_textref_to" - -// Traits to heal for - -/// This mob heals from carp rifts. -#define TRAIT_HEALS_FROM_CARP_RIFTS "heals_from_carp_rifts" - -/// This mob heals from cult pylons. -#define TRAIT_HEALS_FROM_CULT_PYLONS "heals_from_cult_pylons" - -/// Ignore Crew monitor Z levels -#define TRAIT_MULTIZ_SUIT_SENSORS "multiz_suit_sensors" - -/// Ignores body_parts_covered during the add_fingerprint() proc. Works both on the person and the item in the glove slot. -#define TRAIT_FINGERPRINT_PASSTHROUGH "fingerprint_passthrough" - -/// this object has been frozen -#define TRAIT_FROZEN "frozen" - -/// Currently fishing -#define TRAIT_GONE_FISHING "fishing" - -/// Makes a species be better/worse at tackling depending on their wing's status -#define TRAIT_TACKLING_WINGED_ATTACKER "tacking_winged_attacker" - -/// Makes a species be frail and more likely to roll bad results if they hit a wall -#define TRAIT_TACKLING_FRAIL_ATTACKER "tackling_frail_attacker" - -/// Makes a species be better/worse at defending against tackling depending on their tail's status -#define TRAIT_TACKLING_TAILED_DEFENDER "tackling_tailed_defender" - -/// Is runechat for this atom/movable currently disabled, regardless of prefs or anything? -#define TRAIT_RUNECHAT_HIDDEN "runechat_hidden" - -/// the object has a label applied -#define TRAIT_HAS_LABEL "labeled" - -///coming from a fish trait datum. -#define FISH_TRAIT_DATUM "fish_trait_datum" -///coming from a fish evolution datum -#define FISH_EVOLUTION "fish_evolution" - -/// some trait sorces dirived from bodyparts BODYPART_TRAIT is generic. -#define BODYPART_TRAIT "bodypart" -#define HEAD_TRAIT "head" -#define CHEST_TRAIT "chest" -#define RIGHT_ARM_TRAIT "right_arm" -#define LEFT_ARM_TRAIT "left_arm" -#define RIGHT_LEG_TRAIT "right_leg" -#define LEFT_LEG_TRAIT "left_leg" - -/// Trait given by echolocation component. -#define ECHOLOCATION_TRAIT "echolocation" - -///without a human having this trait, they speak as if they have no tongue. -#define TRAIT_SPEAKS_CLEARLY "speaks_clearly" - -// specific sources for TRAIT_SPEAKS_CLEARLY - -///trait source that tongues should use -#define SPEAKING_FROM_TONGUE "tongue" -///trait source that sign language should use -#define SPEAKING_FROM_HANDS "hands" - -///Trait given by /datum/component/germ_sensitive -#define TRAIT_GERM_SENSITIVE "germ_sensitive" - -/// This atom can have spells cast from it if a mob is within it -/// This means the "caster" of the spell is changed to the mob's loc -/// Note this doesn't mean all spells are guaranteed to work or the mob is guaranteed to cast -#define TRAIT_CASTABLE_LOC "castable_loc" - -///Trait given by /datum/element/relay_attacker -#define TRAIT_RELAYING_ATTACKER "relaying_attacker" - -///Trait given to limb by /mob/living/basic/living_limb_flesh -#define TRAIT_IGNORED_BY_LIVING_FLESH "livingflesh_ignored" - -/// Trait given while using /datum/action/cooldown/mob_cooldown/wing_buffet -#define TRAIT_WING_BUFFET "wing_buffet" -/// Trait given while tired after using /datum/action/cooldown/mob_cooldown/wing_buffet -#define TRAIT_WING_BUFFET_TIRED "wing_buffet_tired" -/// Trait given to a dragon who fails to defend their rifts -#define TRAIT_RIFT_FAILURE "fail_dragon_loser" - -/// Trait given to mobs that we do not want to mindswap -#define TRAIT_NO_MINDSWAP "no_mindswap" diff --git a/code/__DEFINES/traits/_traits.dm b/code/__DEFINES/traits/_traits.dm new file mode 100644 index 00000000000000..46fef90160aaf5 --- /dev/null +++ b/code/__DEFINES/traits/_traits.dm @@ -0,0 +1,122 @@ +#define SIGNAL_ADDTRAIT(trait_ref) "addtrait [trait_ref]" +#define SIGNAL_REMOVETRAIT(trait_ref) "removetrait [trait_ref]" + +// trait accessor defines +#define ADD_TRAIT(target, trait, source) \ + do { \ + var/list/_L; \ + if (!target._status_traits) { \ + target._status_traits = list(); \ + _L = target._status_traits; \ + _L[trait] = list(source); \ + SEND_SIGNAL(target, SIGNAL_ADDTRAIT(trait), trait); \ + } else { \ + _L = target._status_traits; \ + if (_L[trait]) { \ + _L[trait] |= list(source); \ + } else { \ + _L[trait] = list(source); \ + SEND_SIGNAL(target, SIGNAL_ADDTRAIT(trait), trait); \ + } \ + } \ + } while (0) +#define REMOVE_TRAIT(target, trait, sources) \ + do { \ + var/list/_L = target._status_traits; \ + var/list/_S; \ + if (sources && !islist(sources)) { \ + _S = list(sources); \ + } else { \ + _S = sources\ + }; \ + if (_L?[trait]) { \ + for (var/_T in _L[trait]) { \ + if ((!_S && (_T != ROUNDSTART_TRAIT)) || (_T in _S)) { \ + _L[trait] -= _T \ + } \ + };\ + if (!length(_L[trait])) { \ + _L -= trait; \ + SEND_SIGNAL(target, SIGNAL_REMOVETRAIT(trait), trait); \ + }; \ + if (!length(_L)) { \ + target._status_traits = null \ + }; \ + } \ + } while (0) +#define REMOVE_TRAIT_NOT_FROM(target, trait, sources) \ + do { \ + var/list/_traits_list = target._status_traits; \ + var/list/_sources_list; \ + if (sources && !islist(sources)) { \ + _sources_list = list(sources); \ + } else { \ + _sources_list = sources\ + }; \ + if (_traits_list?[trait]) { \ + for (var/_trait_source in _traits_list[trait]) { \ + if (!(_trait_source in _sources_list)) { \ + _traits_list[trait] -= _trait_source \ + } \ + };\ + if (!length(_traits_list[trait])) { \ + _traits_list -= trait; \ + SEND_SIGNAL(target, SIGNAL_REMOVETRAIT(trait), trait); \ + }; \ + if (!length(_traits_list)) { \ + target._status_traits = null \ + }; \ + } \ + } while (0) +#define REMOVE_TRAITS_NOT_IN(target, sources) \ + do { \ + var/list/_L = target._status_traits; \ + var/list/_S = sources; \ + if (_L) { \ + for (var/_T in _L) { \ + _L[_T] &= _S;\ + if (!length(_L[_T])) { \ + _L -= _T; \ + SEND_SIGNAL(target, SIGNAL_REMOVETRAIT(_T), _T); \ + }; \ + };\ + if (!length(_L)) { \ + target._status_traits = null\ + };\ + }\ + } while (0) + +#define REMOVE_TRAITS_IN(target, sources) \ + do { \ + var/list/_L = target._status_traits; \ + var/list/_S = sources; \ + if (sources && !islist(sources)) { \ + _S = list(sources); \ + } else { \ + _S = sources\ + }; \ + if (_L) { \ + for (var/_T in _L) { \ + _L[_T] -= _S;\ + if (!length(_L[_T])) { \ + _L -= _T; \ + SEND_SIGNAL(target, SIGNAL_REMOVETRAIT(_T)); \ + }; \ + };\ + if (!length(_L)) { \ + target._status_traits = null\ + };\ + }\ + } 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_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()) +/// 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)) diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm new file mode 100644 index 00000000000000..e65e744d008ef4 --- /dev/null +++ b/code/__DEFINES/traits/declarations.dm @@ -0,0 +1,1046 @@ +// This file contains all of the "static" define strings that tie to a trait. +// WARNING: The sections here actually matter in this file as it's tested by CI. Please do not toy with the sections." + +// BEGIN TRAIT DEFINES + +/* + *Remember to update _globalvars/traits.dm if you're adding/removing/renaming traits. + */ + +//mob traits +/// Forces the user to stay unconscious. +#define TRAIT_KNOCKEDOUT "knockedout" +/// Prevents voluntary movement. +#define TRAIT_IMMOBILIZED "immobilized" +/// Prevents voluntary standing or staying up on its own. +#define TRAIT_FLOORED "floored" +/// Forces user to stay standing +#define TRAIT_FORCED_STANDING "forcedstanding" +/// Prevents usage of manipulation appendages (picking, holding or using items, manipulating storage). +#define TRAIT_HANDS_BLOCKED "handsblocked" +/// Inability to access UI hud elements. Turned into a trait from [MOBILITY_UI] to be able to track sources. +#define TRAIT_UI_BLOCKED "uiblocked" +/// Inability to pull things. Turned into a trait from [MOBILITY_PULL] to be able to track sources. +#define TRAIT_PULL_BLOCKED "pullblocked" +/// Abstract condition that prevents movement if being pulled and might be resisted against. Handcuffs and straight jackets, basically. +#define TRAIT_RESTRAINED "restrained" +/// Apply this to make a mob not dense, and remove it when you want it to no longer make them undense, other sorces of undesity will still apply. Always define a unique source when adding a new instance of this! +#define TRAIT_UNDENSE "undense" +/// Expands our FOV by 30 degrees if restricted +#define TRAIT_EXPANDED_FOV "expanded_fov" +/// Doesn't miss attacks +#define TRAIT_PERFECT_ATTACKER "perfect_attacker" +///Recolored by item/greentext +#define TRAIT_GREENTEXT_CURSED "greentext_curse" +#define TRAIT_INCAPACITATED "incapacitated" +/// In some kind of critical condition. Is able to succumb. +#define TRAIT_CRITICAL_CONDITION "critical-condition" +/// Whitelist for mobs that can read or write +#define TRAIT_LITERATE "literate" +/// Blacklist for mobs that can't read or write +#define TRAIT_ILLITERATE "illiterate" +/// Mute. Can't talk. +#define TRAIT_MUTE "mute" +/// Softspoken. Always whisper. +#define TRAIT_SOFTSPOKEN "softspoken" +/// Gibs on death and slips like ice. +#define TRAIT_CURSED "cursed" +/// Emotemute. Can't... emote. +#define TRAIT_EMOTEMUTE "emotemute" +#define TRAIT_DEAF "deaf" +#define TRAIT_FAT "fat" +#define TRAIT_HUSK "husk" +///Blacklisted from being revived via defibrilator +#define TRAIT_DEFIB_BLACKLISTED "defib_blacklisted" +#define TRAIT_BADDNA "baddna" +#define TRAIT_CLUMSY "clumsy" +/// Trait that means you are capable of holding items in some form +#define TRAIT_CAN_HOLD_ITEMS "can_hold_items" +/// Trait which lets you clamber over a barrier +#define TRAIT_FENCE_CLIMBER "can_climb_fences" +/// means that you can't use weapons with normal trigger guards. +#define TRAIT_CHUNKYFINGERS "chunkyfingers" +#define TRAIT_CHUNKYFINGERS_IGNORE_BATON "chunkyfingers_ignore_baton" +/// Allows you to mine with your bare hands +#define TRAIT_FIST_MINING "fist_mining" +#define TRAIT_DUMB "dumb" +/// Whether a mob is dexterous enough to use machines and certain items or not. +#define TRAIT_ADVANCEDTOOLUSER "advancedtooluser" +// Antagonizes the above. +#define TRAIT_DISCOORDINATED_TOOL_USER "discoordinated_tool_user" +#define TRAIT_PACIFISM "pacifism" +#define TRAIT_IGNORESLOWDOWN "ignoreslow" +#define TRAIT_IGNOREDAMAGESLOWDOWN "ignoredamageslowdown" +/// Makes it so the mob can use guns regardless of tool user status +#define TRAIT_GUN_NATURAL "gunnatural" +/// Causes death-like unconsciousness +#define TRAIT_DEATHCOMA "deathcoma" +/// The mob has the stasis effect. +/// Does nothing on its own, applied via status effect. +#define TRAIT_STASIS "in_stasis" +/// Makes the owner appear as dead to most forms of medical examination +#define TRAIT_FAKEDEATH "fakedeath" +#define TRAIT_DISFIGURED "disfigured" +/// "Magic" trait that blocks the mob from moving or interacting with anything. Used for transient stuff like mob transformations or incorporality in special cases. +/// Will block movement, `Life()` (!!!), and other stuff based on the mob. +#define TRAIT_NO_TRANSFORM "block_transformations" +/// Tracks whether we're gonna be a baby alien's mummy. +#define TRAIT_XENO_HOST "xeno_host" +/// This parrot is currently perched +#define TRAIT_PARROT_PERCHED "parrot_perched" +/// This mob is immune to stun causing status effects and stamcrit. +/// Prefer to use [/mob/living/proc/check_stun_immunity] over checking for this trait exactly. +#define TRAIT_STUNIMMUNE "stun_immunity" +#define TRAIT_BATON_RESISTANCE "baton_resistance" +/// Anti Dual-baton cooldown bypass exploit. +#define TRAIT_IWASBATONED "iwasbatoned" +#define TRAIT_SLEEPIMMUNE "sleep_immunity" +#define TRAIT_PUSHIMMUNE "push_immunity" +/// Are we immune to shocks? +#define TRAIT_SHOCKIMMUNE "shock_immunity" +/// Are we immune to specifically tesla / SM shocks? +#define TRAIT_TESLA_SHOCKIMMUNE "tesla_shock_immunity" +#define TRAIT_AIRLOCK_SHOCKIMMUNE "airlock_shock_immunity" +/// Is this atom being actively shocked? Used to prevent repeated shocks. +#define TRAIT_BEING_SHOCKED "shocked" +#define TRAIT_STABLEHEART "stable_heart" +/// Prevents you from leaving your corpse +#define TRAIT_CORPSELOCKED "corpselocked" +#define TRAIT_STABLELIVER "stable_liver" +#define TRAIT_VATGROWN "vatgrown" +#define TRAIT_RESISTHEAT "resist_heat" +///For when you've gotten a power from a dna vault +#define TRAIT_USED_DNA_VAULT "used_dna_vault" +/// For when you want to be able to touch hot things, but still want fire to be an issue. +#define TRAIT_RESISTHEATHANDS "resist_heat_handsonly" +#define TRAIT_RESISTCOLD "resist_cold" +#define TRAIT_RESISTHIGHPRESSURE "resist_high_pressure" +#define TRAIT_RESISTLOWPRESSURE "resist_low_pressure" +/// This human is immune to the effects of being exploded. (ex_act) +#define TRAIT_BOMBIMMUNE "bomb_immunity" +/// Immune to being irradiated +#define TRAIT_RADIMMUNE "rad_immunity" +/// This mob won't get gibbed by nukes going off +#define TRAIT_NUKEIMMUNE "nuke_immunity" +/// Can't be given viruses +#define TRAIT_VIRUSIMMUNE "virus_immunity" +/// Won't become a husk under any circumstances +#define TRAIT_UNHUSKABLE "trait_unhuskable" +/// Reduces the chance viruses will spread to this mob, and if the mob has a virus, slows its advancement +#define TRAIT_VIRUS_RESISTANCE "virus_resistance" +#define TRAIT_GENELESS "geneless" +#define TRAIT_PIERCEIMMUNE "pierce_immunity" +#define TRAIT_NODISMEMBER "dismember_immunity" +#define TRAIT_NOFIRE "nonflammable" +#define TRAIT_NOFIRE_SPREAD "no_fire_spreading" +/// Prevents plasmamen from self-igniting if only their helmet is missing +#define TRAIT_NOSELFIGNITION_HEAD_ONLY "no_selfignition_head_only" +#define TRAIT_NOGUNS "no_guns" +/// Species with this trait are genderless +#define TRAIT_AGENDER "agender" +/// Species with this trait have a blood clan mechanic +#define TRAIT_BLOOD_CLANS "blood_clans" +/// Species with this trait have markings (this SUCKS, remove this later in favor of bodypart overlays) +#define TRAIT_HAS_MARKINGS "has_markings" +/// Species with this trait use skin tones for coloration +#define TRAIT_USES_SKINTONES "uses_skintones" +/// Species with this trait use mutant colors for coloration +#define TRAIT_MUTANT_COLORS "mutcolors" +/// Species with this trait have mutant colors that cannot be chosen by the player, nor altered ingame by external means +#define TRAIT_FIXED_MUTANT_COLORS "fixed_mutcolors" +/// Species with this trait have a haircolor that cannot be chosen by the player, nor altered ingame by external means +#define TRAIT_FIXED_HAIRCOLOR "fixed_haircolor" +/// Humans with this trait won't get bloody hands, nor bloody feet +#define TRAIT_NO_BLOOD_OVERLAY "no_blood_overlay" +/// Humans with this trait cannot have underwear +#define TRAIT_NO_UNDERWEAR "no_underwear" +/// This carbon doesn't show an overlay when they have no brain +#define TRAIT_NO_DEBRAIN_OVERLAY "no_debrain_overlay" +/// Humans with this trait cannot get augmentation surgery +#define TRAIT_NO_AUGMENTS "no_augments" +/// This carbon doesn't get hungry +#define TRAIT_NOHUNGER "no_hunger" +/// This carbon doesn't bleed +#define TRAIT_NOBLOOD "noblood" +/// This just means that the carbon will always have functional liverless metabolism +#define TRAIT_LIVERLESS_METABOLISM "liverless_metabolism" +/// This carbon can't be overdosed by chems +#define TRAIT_OVERDOSEIMMUNE "overdose_immune" +/// Humans with this trait cannot be turned into zombies +#define TRAIT_NO_ZOMBIFY "no_zombify" +/// Carbons with this trait can't have their DNA copied by diseases nor changelings +#define TRAIT_NO_DNA_COPY "no_dna_copy" +/// Carbons with this trait cant have their dna scrambled by genetics or a disease retrovirus. +#define TRAIT_NO_DNA_SCRAMBLE "no_dna_scramble" +/// Carbons with this trait can eat blood to regenerate their own blood volume, instead of injecting it +#define TRAIT_DRINKS_BLOOD "drinks_blood" +/// Mob is immune to toxin damage +#define TRAIT_TOXIMMUNE "toxin_immune" +/// Mob is immune to oxygen damage, does not need to breathe +#define TRAIT_NOBREATH "no_breath" +/// Mob is currently disguised as something else (like a morph being another mob or an object). Holds a reference to the thing that applied the trait. +#define TRAIT_DISGUISED "disguised" +/// Use when you want a mob to be able to metabolize plasma temporarily (e.g. plasma fixation disease symptom) +#define TRAIT_PLASMA_LOVER_METABOLISM "plasma_lover_metabolism" +#define TRAIT_EASYDISMEMBER "easy_dismember" +#define TRAIT_LIMBATTACHMENT "limb_attach" +#define TRAIT_NOLIMBDISABLE "no_limb_disable" +#define TRAIT_EASILY_WOUNDED "easy_limb_wound" +#define TRAIT_HARDLY_WOUNDED "hard_limb_wound" +#define TRAIT_NEVER_WOUNDED "never_wounded" +/// Species with this trait have 50% extra chance of bleeding from piercing and slashing wounds +#define TRAIT_EASYBLEED "easybleed" +#define TRAIT_TOXINLOVER "toxinlover" +/// Doesn't get overlays from being in critical. +#define TRAIT_NOCRITOVERLAY "no_crit_overlay" +/// reduces the use time of syringes, pills, patches and medigels but only when using on someone +#define TRAIT_FASTMED "fast_med_use" +/// The mob is holy and resistance to cult magic +#define TRAIT_HOLY "holy" +/// This mob is antimagic, and immune to spells / cannot cast spells +#define TRAIT_ANTIMAGIC "anti_magic" +/// This allows a person who has antimagic to cast spells without getting blocked +#define TRAIT_ANTIMAGIC_NO_SELFBLOCK "anti_magic_no_selfblock" +/// This mob recently blocked magic with some form of antimagic +#define TRAIT_RECENTLY_BLOCKED_MAGIC "recently_blocked_magic" +/// The user can do things like use magic staffs without penalty +#define TRAIT_MAGICALLY_GIFTED "magically_gifted" +/// This object innately spawns with fantasy variables already applied (the magical component is given to it on initialize), and thus we never want to give it the component again. +#define TRAIT_INNATELY_FANTASTICAL_ITEM "innately_fantastical_item" +#define TRAIT_DEPRESSION "depression" +#define TRAIT_BLOOD_DEFICIENCY "blood_deficiency" +#define TRAIT_JOLLY "jolly" +#define TRAIT_NOCRITDAMAGE "no_crit" +///Added to mob or mind, changes the icons of the fish shown in the minigame UI depending on the possible reward. +#define TRAIT_REVEAL_FISH "reveal_fish" + +/// Added to a mob, allows that mob to experience flavour-based moodlets when examining food +#define TRAIT_REMOTE_TASTING "remote_tasting" + +/// Stops the mob from slipping on water, or banana peels, or pretty much anything that doesn't have [GALOSHES_DONT_HELP] set +#define TRAIT_NO_SLIP_WATER "noslip_water" +/// Stops the mob from slipping on permafrost ice (not any other ice) (but anything with [SLIDE_ICE] set) +#define TRAIT_NO_SLIP_ICE "noslip_ice" +/// Stop the mob from sliding around from being slipped, but not the slip part. +/// DOES NOT include ice slips. +#define TRAIT_NO_SLIP_SLIDE "noslip_slide" +/// Stops all slipping and sliding from ocurring +#define TRAIT_NO_SLIP_ALL "noslip_all" + +/// Unlinks gliding from movement speed, meaning that there will be a delay between movements rather than a single move movement between tiles +#define TRAIT_NO_GLIDE "no_glide" + +/// Applied into wounds when they're scanned with the wound analyzer, halves time to treat them manually. +#define TRAIT_WOUND_SCANNED "wound_scanned" + +#define TRAIT_NODEATH "nodeath" +#define TRAIT_NOHARDCRIT "nohardcrit" +#define TRAIT_NOSOFTCRIT "nosoftcrit" +#define TRAIT_MINDSHIELD "mindshield" +#define TRAIT_DISSECTED "dissected" +#define TRAIT_SURGICALLY_ANALYZED "surgically_analyzed" +/// Lets the user succumb even if they got NODEATH +#define TRAIT_SUCCUMB_OVERRIDE "succumb_override" +/// Can hear observers +#define TRAIT_SIXTHSENSE "sixth_sense" +#define TRAIT_FEARLESS "fearless" +/// Ignores darkness for hearing +#define TRAIT_HEAR_THROUGH_DARKNESS "hear_through_darkness" +/// These are used for brain-based paralysis, where replacing the limb won't fix it +#define TRAIT_PARALYSIS_L_ARM "para-l-arm" +#define TRAIT_PARALYSIS_R_ARM "para-r-arm" +#define TRAIT_PARALYSIS_L_LEG "para-l-leg" +#define TRAIT_PARALYSIS_R_LEG "para-r-leg" +#define TRAIT_CANNOT_OPEN_PRESENTS "cannot-open-presents" +#define TRAIT_PRESENT_VISION "present-vision" +#define TRAIT_DISK_VERIFIER "disk-verifier" +#define TRAIT_NOMOBSWAP "no-mob-swap" +/// Can examine IDs to see if they are roundstart. +#define TRAIT_ID_APPRAISER "id_appraiser" +/// Gives us turf, mob and object vision through walls +#define TRAIT_XRAY_VISION "xray_vision" +/// Gives us mob vision through walls and slight night vision +#define TRAIT_THERMAL_VISION "thermal_vision" +/// Gives us turf vision through walls and slight night vision +#define TRAIT_MESON_VISION "meson_vision" +/// Gives us Night vision +#define TRAIT_TRUE_NIGHT_VISION "true_night_vision" +/// Negates our gravity, letting us move normally on floors in 0-g +#define TRAIT_NEGATES_GRAVITY "negates_gravity" +/// We are ignoring gravity +#define TRAIT_IGNORING_GRAVITY "ignores_gravity" +/// We have some form of forced gravity acting on us +#define TRAIT_FORCED_GRAVITY "forced_gravity" +/// Makes whispers clearly heard from seven tiles away, the full hearing range +#define TRAIT_GOOD_HEARING "good_hearing" +/// Allows you to hear speech through walls +#define TRAIT_XRAY_HEARING "xray_hearing" + +/// Lets us scan reagents +#define TRAIT_REAGENT_SCANNER "reagent_scanner" +/// Lets us scan machine parts and tech unlocks +#define TRAIT_RESEARCH_SCANNER "research_scanner" +/// Can weave webs into cloth +#define TRAIT_WEB_WEAVER "web_weaver" +/// Can navigate the web without getting stuck +#define TRAIT_WEB_SURFER "web_surfer" +/// A web is being spun on this turf presently +#define TRAIT_SPINNING_WEB_TURF "spinning_web_turf" +#define TRAIT_ABDUCTOR_TRAINING "abductor-training" +#define TRAIT_ABDUCTOR_SCIENTIST_TRAINING "abductor-scientist-training" +#define TRAIT_SURGEON "surgeon" +#define TRAIT_STRONG_GRABBER "strong_grabber" +#define TRAIT_SOOTHED_THROAT "soothed-throat" +#define TRAIT_BOOZE_SLIDER "booze-slider" +/// We place people into a fireman carry quicker than standard +#define TRAIT_QUICK_CARRY "quick-carry" +/// We place people into a fireman carry especially quickly compared to quick_carry +#define TRAIT_QUICKER_CARRY "quicker-carry" +#define TRAIT_QUICK_BUILD "quick-build" +/// We can handle 'dangerous' plants in botany safely +#define TRAIT_PLANT_SAFE "plant_safe" +/// Prevents the overlay from nearsighted +#define TRAIT_NEARSIGHTED_CORRECTED "fixes_nearsighted" +#define TRAIT_UNINTELLIGIBLE_SPEECH "unintelligible-speech" +#define TRAIT_UNSTABLE "unstable" +#define TRAIT_OIL_FRIED "oil_fried" +#define TRAIT_MEDICAL_HUD "med_hud" +#define TRAIT_SECURITY_HUD "sec_hud" +/// for something granting you a diagnostic hud +#define TRAIT_DIAGNOSTIC_HUD "diag_hud" +/// Is a medbot healing you +#define TRAIT_MEDIBOTCOMINGTHROUGH "medbot" +#define TRAIT_PASSTABLE "passtable" +/// Makes you immune to flashes +#define TRAIT_NOFLASH "noflash" +/// prevents xeno huggies implanting skeletons +#define TRAIT_XENO_IMMUNE "xeno_immune" +/// Allows the species to equip items that normally require a jumpsuit without having one equipped. Used by golems. +#define TRAIT_NO_JUMPSUIT "no_jumpsuit" +#define TRAIT_NAIVE "naive" +/// always detect storms on icebox +#define TRAIT_DETECT_STORM "detect_storm" +#define TRAIT_PRIMITIVE "primitive" +#define TRAIT_GUNFLIP "gunflip" +/// Increases chance of getting special traumas, makes them harder to cure +#define TRAIT_SPECIAL_TRAUMA_BOOST "special_trauma_boost" +#define TRAIT_SPACEWALK "spacewalk" +/// Sanity trait to keep track of when we're in hyperspace and add the appropriate element if we werent +#define TRAIT_HYPERSPACED "hyperspaced" +///Gives the movable free hyperspace movement without being pulled during shuttle transit +#define TRAIT_FREE_HYPERSPACE_MOVEMENT "free_hyperspace_movement" +///Lets the movable move freely in the soft-cordon area of transit space, which would otherwise teleport them away just before they got to see the true cordon +#define TRAIT_FREE_HYPERSPACE_SOFTCORDON_MOVEMENT "free_hyperspace_softcordon_movement" +///Deletes the object upon being dumped into space, usually from exiting hyperspace. Useful if you're spawning in a lot of stuff for hyperspace events that dont need to flood the entire game +#define TRAIT_DEL_ON_SPACE_DUMP "del_on_hyperspace_leave" +/// We can walk up or around cliffs, or at least we don't fall off of it +#define TRAIT_CLIFF_WALKER "cliff_walker" +/// Gets double arcade prizes +#define TRAIT_GAMERGOD "gamer-god" +#define TRAIT_GIANT "giant" +#define TRAIT_DWARF "dwarf" +/// makes your footsteps completely silent +#define TRAIT_SILENT_FOOTSTEPS "silent_footsteps" +/// hnnnnnnnggggg..... you're pretty good.... +#define TRAIT_NICE_SHOT "nice_shot" +/// prevents the damage done by a brain tumor +#define TRAIT_TUMOR_SUPPRESSED "brain_tumor_suppressed" +/// Prevents hallucinations from the hallucination brain trauma (RDS) +#define TRAIT_RDS_SUPPRESSED "rds_suppressed" +/// mobs that have this trait cannot be extinguished +#define TRAIT_PERMANENTLY_ONFIRE "permanently_onfire" +/// Indicates if the mob is currently speaking with sign language +#define TRAIT_SIGN_LANG "sign_language" +/// This mob is able to use sign language over the radio. +#define TRAIT_CAN_SIGN_ON_COMMS "can_sign_on_comms" +/// nobody can use martial arts on this mob +#define TRAIT_MARTIAL_ARTS_IMMUNE "martial_arts_immune" +/// Immune to being afflicted by time stop (spell) +#define TRAIT_TIME_STOP_IMMUNE "time_stop_immune" +/// Revenants draining you only get a very small benefit. +#define TRAIT_WEAK_SOUL "weak_soul" +/// This mob has no soul +#define TRAIT_NO_SOUL "no_soul" +/// Prevents mob from riding mobs when buckled onto something +#define TRAIT_CANT_RIDE "cant_ride" +/// Prevents a mob from being unbuckled, currently only used to prevent people from falling over on the tram +#define TRAIT_CANNOT_BE_UNBUCKLED "cannot_be_unbuckled" +/// from heparin and nitrous oxide, makes open bleeding wounds rapidly spill more blood +#define TRAIT_BLOODY_MESS "bloody_mess" +/// from coagulant reagents, this doesn't affect the bleeding itself but does affect the bleed warning messages +#define TRAIT_COAGULATING "coagulating" +/// From anti-convulsant medication against seizures. +#define TRAIT_ANTICONVULSANT "anticonvulsant" +/// The holder of this trait has antennae or whatever that hurt a ton when noogied +#define TRAIT_ANTENNAE "antennae" +/// Blowing kisses actually does damage to the victim +#define TRAIT_KISS_OF_DEATH "kiss_of_death" +/// Used to activate french kissing +#define TRAIT_GARLIC_BREATH "kiss_of_garlic_death" +/// Addictions don't tick down, basically they're permanently addicted +#define TRAIT_HOPELESSLY_ADDICTED "hopelessly_addicted" +/// This mob has a cult halo. +#define TRAIT_CULT_HALO "cult_halo" +/// Their eyes glow an unnatural red colour. Currently used to set special examine text on humans. Does not guarantee the mob's eyes are coloured red, nor that there is any visible glow on their character sprite. +#define TRAIT_UNNATURAL_RED_GLOWY_EYES "unnatural_red_glowy_eyes" +/// Their eyes are bloodshot. Currently used to set special examine text on humans. Examine text is overridden by TRAIT_UNNATURAL_RED_GLOWY_EYES. +#define TRAIT_BLOODSHOT_EYES "bloodshot_eyes" +/// This mob should never close UI even if it doesn't have a client +#define TRAIT_PRESERVE_UI_WITHOUT_CLIENT "preserve_ui_without_client" +/// This mob overrides certian SSlag_switch measures with this special trait +#define TRAIT_BYPASS_MEASURES "bypass_lagswitch_measures" +/// Someone can safely be attacked with honorbound with ONLY a combat mode check, the trait is assuring holding a weapon and hitting won't hurt them.. +#define TRAIT_ALLOWED_HONORBOUND_ATTACK "allowed_honorbound_attack" +/// The user is sparring +#define TRAIT_SPARRING "sparring" +/// The user is currently challenging an elite mining mob. Prevents him from challenging another until he's either lost or won. +#define TRAIT_ELITE_CHALLENGER "elite_challenger" +/// For living mobs. It signals that the mob shouldn't have their data written in an external json for persistence. +#define TRAIT_DONT_WRITE_MEMORY "dont_write_memory" +/// This mob can be painted with the spraycan +#define TRAIT_SPRAY_PAINTABLE "spray_paintable" +/// This atom can ignore the "is on a turf" check for simple AI datum attacks, allowing them to attack from bags or lockers as long as any other conditions are met +#define TRAIT_AI_BAGATTACK "bagattack" +/// This mobs bodyparts are invisible but still clickable. +#define TRAIT_INVISIBLE_MAN "invisible_man" +/// Don't draw external organs/species features like wings, horns, frills and stuff +#define TRAIT_HIDE_EXTERNAL_ORGANS "hide_external_organs" +///When people are floating from zero-grav or something, we can move around freely! +#define TRAIT_FREE_FLOAT_MOVEMENT "free_float_movement" +// You can stare into the abyss, but it does not stare back. +// You're immune to the hallucination effect of the supermatter, either +// through force of will, or equipment. Present on /mob or /datum/mind +#define TRAIT_MADNESS_IMMUNE "supermatter_madness_immune" +// You can stare into the abyss, and it turns pink. +// Being close enough to the supermatter makes it heal at higher temperatures +// and emit less heat. Present on /mob or /datum/mind +#define TRAIT_SUPERMATTER_SOOTHER "supermatter_soother" +/// Mob has fov applied to it +#define TRAIT_FOV_APPLIED "fov_applied" +/// Mob is using the scope component +#define TRAIT_USER_SCOPED "user_scoped" + +/// Trait added when a revenant is visible. +#define TRAIT_REVENANT_REVEALED "revenant_revealed" +/// Trait added when a revenant has been inhibited (typically by the bane of a holy weapon) +#define TRAIT_REVENANT_INHIBITED "revenant_inhibited" + +/// Trait which prevents you from becoming overweight +#define TRAIT_NOFAT "cant_get_fat" + +/// Trait which allows you to eat rocks +#define TRAIT_ROCK_EATER "rock_eater" +/// Trait which allows you to gain bonuses from consuming rocks +#define TRAIT_ROCK_METAMORPHIC "rock_metamorphic" + +/// `do_teleport` will not allow this atom to teleport +#define TRAIT_NO_TELEPORT "no-teleport" +/// This atom is a secluded location, which is counted as out of bounds. +/// Anything that enters this atom's contents should react if it wants to stay in bounds. +#define TRAIT_SECLUDED_LOCATION "secluded_loc" + +/// Trait used by fugu glands to avoid double buffing +#define TRAIT_FUGU_GLANDED "fugu_glanded" + +/// Trait that tracks if something has been renamed. Typically holds a REF() to the object itself (AKA src) for wide addition/removal. +#define TRAIT_WAS_RENAMED "was_renamed" + +/// When someone with this trait fires a ranged weapon, their fire delays and click cooldowns are halved +#define TRAIT_DOUBLE_TAP "double_tap" + +/// Trait applied to [/datum/mind] to stop someone from using the cursed hot springs to polymorph more than once. +#define TRAIT_HOT_SPRING_CURSED "hot_spring_cursed" + +/// If something has been engraved/cannot be engraved +#define TRAIT_NOT_ENGRAVABLE "not_engravable" + +/// Whether or not orbiting is blocked or not +#define TRAIT_ORBITING_FORBIDDEN "orbiting_forbidden" +/// Trait applied to mob/living to mark that spiders should not gain further enriched eggs from eating their corpse. +#define TRAIT_SPIDER_CONSUMED "spider_consumed" +/// Whether we're sneaking, from the creature sneak ability. +#define TRAIT_SNEAK "sneaking_creatures" + +/// Item still allows you to examine items while blind and actively held. +#define TRAIT_BLIND_TOOL "blind_tool" + +/// The person with this trait always appears as 'unknown'. +#define TRAIT_UNKNOWN "unknown" + +/// If the mob has this trait and die, their bomb implant doesn't detonate automatically. It must be consciously activated. +#define TRAIT_PREVENT_IMPLANT_AUTO_EXPLOSION "prevent_implant_auto_explosion" + +/// If applied to a mob, nearby dogs will have a small chance to nonharmfully harass said mob +#define TRAIT_HATED_BY_DOGS "hated_by_dogs" +/// Mobs with this trait will not be immobilized when held up +#define TRAIT_NOFEAR_HOLDUPS "no_fear_holdup" +/// Mob has gotten an armor buff from adamantine extract +#define TRAIT_ADAMANTINE_EXTRACT_ARMOR "adamantine_extract_armor" +/// Mobs with this trait won't be able to dual wield guns. +#define TRAIT_NO_GUN_AKIMBO "no_gun_akimbo" + +/// Projectile with this trait will always hit the defined zone of a struck living mob. +#define TRAIT_ALWAYS_HIT_ZONE "always_hit_zone" + +/// Mobs with this trait do care about a few grisly things, such as digging up graves. They also really do not like bringing people back to life or tending wounds, but love autopsies and amputations. +#define TRAIT_MORBID "morbid" + +/// Whether or not the user is in a MODlink call, prevents making more calls +#define TRAIT_IN_CALL "in_call" + +/// 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" + +/// Prevents you from twohanding weapons. +#define TRAIT_NO_TWOHANDING "no_twohanding" + +/// Halves the time of tying a tie. +#define TRAIT_FAST_TYING "fast_tying" + +/// Sells for more money on the pirate bounty pad. +#define TRAIT_HIGH_VALUE_RANSOM "high_value_ransom" + +// METABOLISMS +// Various jobs on the station have historically had better reactions +// to various drinks and foodstuffs. Security liking donuts is a classic +// example. Through years of training/abuse, their livers have taken +// a liking to those substances. Steal a sec officer's liver, eat donuts good. + +// These traits are applied to /obj/item/organ/internal/liver +#define TRAIT_LAW_ENFORCEMENT_METABOLISM "law_enforcement_metabolism" +#define TRAIT_CULINARY_METABOLISM "culinary_metabolism" +#define TRAIT_COMEDY_METABOLISM "comedy_metabolism" +#define TRAIT_MEDICAL_METABOLISM "medical_metabolism" +#define TRAIT_ENGINEER_METABOLISM "engineer_metabolism" +#define TRAIT_ROYAL_METABOLISM "royal_metabolism" +#define TRAIT_PRETENDER_ROYAL_METABOLISM "pretender_royal_metabolism" +#define TRAIT_BALLMER_SCIENTIST "ballmer_scientist" +#define TRAIT_MAINTENANCE_METABOLISM "maintenance_metabolism" +#define TRAIT_CORONER_METABOLISM "coroner_metabolism" + +//LUNG TRAITS +/// Lungs always breathe normally when in vacuum/space. +#define TRAIT_SPACEBREATHING "spacebreathing" + +/// This mob can strip other mobs. +#define TRAIT_CAN_STRIP "can_strip" +/// Can use the nuclear device's UI, regardless of a lack of hands +#define TRAIT_CAN_USE_NUKE "can_use_nuke" + +// If present on a mob or mobmind, allows them to "suplex" an immovable rod +// turning it into a glorified potted plant, and giving them an +// achievement. Can also be used on rod-form wizards. +// Normally only present in the mind of a Research Director. +#define TRAIT_ROD_SUPLEX "rod_suplex" +/// The mob has an active mime vow of silence, and thus is unable to speak and has other mime things going on +#define TRAIT_MIMING "miming" + +/// This mob is phased out of reality from magic, either a jaunt or rod form +#define TRAIT_MAGICALLY_PHASED "magically_phased" + +//SKILLS +#define TRAIT_UNDERWATER_BASKETWEAVING_KNOWLEDGE "underwater_basketweaving" +#define TRAIT_WINE_TASTER "wine_taster" +#define TRAIT_BONSAI "bonsai" +#define TRAIT_LIGHTBULB_REMOVER "lightbulb_remover" +#define TRAIT_KNOW_ROBO_WIRES "know_robo_wires" +#define TRAIT_KNOW_ENGI_WIRES "know_engi_wires" +#define TRAIT_ENTRAILS_READER "entrails_reader" +#define TRAIT_SABRAGE_PRO "sabrage_pro" +/// this skillchip trait lets you wash brains in washing machines to heal them +#define TRAIT_BRAINWASHING "brainwashing" +/// Allows chef's to chefs kiss their food, to make them with love +#define TRAIT_CHEF_KISS "chefs_kiss" + +///Movement type traits for movables. See elements/movetype_handler.dm +#define TRAIT_MOVE_GROUND "move_ground" +#define TRAIT_MOVE_FLYING "move_flying" +#define TRAIT_MOVE_VENTCRAWLING "move_ventcrawling" +#define TRAIT_MOVE_FLOATING "move_floating" +#define TRAIT_MOVE_PHASING "move_phasing" +#define TRAIT_MOVE_UPSIDE_DOWN "move_upside_down" +/// Disables the floating animation. See above. +#define TRAIT_NO_FLOATING_ANIM "no-floating-animation" + +/// Cannot be turned into a funny skeleton by the plasma river +#define TRAIT_NO_PLASMA_TRANSFORM "no_plasma_transform" + +/// Weather immunities, also protect mobs inside them. +#define TRAIT_LAVA_IMMUNE "lava_immune" //Used by lava turfs and The Floor Is Lava. +#define TRAIT_ASHSTORM_IMMUNE "ashstorm_immune" +#define TRAIT_SNOWSTORM_IMMUNE "snowstorm_immune" +#define TRAIT_RADSTORM_IMMUNE "radstorm_immune" +#define TRAIT_VOIDSTORM_IMMUNE "voidstorm_immune" +#define TRAIT_WEATHER_IMMUNE "weather_immune" //Immune to ALL weather effects. + +/// Cannot be grabbed by goliath tentacles +#define TRAIT_TENTACLE_IMMUNE "tentacle_immune" +/// Currently under the effect of overwatch +#define TRAIT_OVERWATCHED "watcher_overwatched" +/// Cannot be targeted by watcher overwatch +#define TRAIT_OVERWATCH_IMMUNE "overwatch_immune" + +//non-mob traits +/// Used for limb-based paralysis, where replacing the limb will fix it. +#define TRAIT_PARALYSIS "paralysis" +/// Used for limbs. +#define TRAIT_DISABLED_BY_WOUND "disabled-by-wound" +/// This movable atom has the explosive block element +#define TRAIT_BLOCKING_EXPLOSIVES "blocking_explosives" + +///Lava will be safe to cross while it has this trait. +#define TRAIT_LAVA_STOPPED "lava_stopped" +///Chasms will be safe to cross while they've this trait. +#define TRAIT_CHASM_STOPPED "chasm_stopped" +///The effects of the immerse element will be halted while this trait is present. +#define TRAIT_IMMERSE_STOPPED "immerse_stopped" +/// The effects of hyperspace drift are blocked when the tile has this trait +#define TRAIT_HYPERSPACE_STOPPED "hyperspace_stopped" + +///Turf slowdown will be ignored when this trait is added to a turf. +#define TRAIT_TURF_IGNORE_SLOWDOWN "turf_ignore_slowdown" +///Mobs won't slip on a wet turf while it has this trait +#define TRAIT_TURF_IGNORE_SLIPPERY "turf_ignore_slippery" + +/// Mobs with this trait can't send the mining shuttle console when used outside the station itself +#define TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION "forbid_mining_shuttle_console_outside_station" + +//important_recursive_contents traits +/* + * Used for movables that need to be updated, via COMSIG_ENTER_AREA and COMSIG_EXIT_AREA, when transitioning areas. + * Use [/atom/movable/proc/become_area_sensitive(trait_source)] to properly enable it. How you remove it isn't as important. + */ +#define TRAIT_AREA_SENSITIVE "area-sensitive" +///every hearing sensitive atom has this trait +#define TRAIT_HEARING_SENSITIVE "hearing_sensitive" +///every object that is currently the active storage of some client mob has this trait +#define TRAIT_ACTIVE_STORAGE "active_storage" + +/// Climbable trait, given and taken by the climbable element when added or removed. Exists to be easily checked via HAS_TRAIT(). +#define TRAIT_CLIMBABLE "trait_climbable" + +/// Used by the honkspam element to avoid spamming the sound. Amusing considering its name. +#define TRAIT_HONKSPAMMING "trait_honkspamming" + +///Used for managing KEEP_TOGETHER in [/atom/var/appearance_flags] +#define TRAIT_KEEP_TOGETHER "keep-together" + +// cargo traits +///If the item will block the cargo shuttle from flying to centcom +#define TRAIT_BANNED_FROM_CARGO_SHUTTLE "banned_from_cargo_shuttle" +///If the crate's contents are immune to the missing item manifest error +#define TRAIT_NO_MISSING_ITEM_ERROR "no_missing_item_error" +///If the crate is immune to the wrong content in manifest error +#define TRAIT_NO_MANIFEST_CONTENTS_ERROR "no_manifest_contents_error" + +///SSeconomy trait, if the market is crashing and people can't withdraw credits from ID cards. +#define TRAIT_MARKET_CRASHING "market_crashing" + +// item traits +#define TRAIT_NODROP "nodrop" +/// cannot be inserted in a storage. +#define TRAIT_NO_STORAGE_INSERT "no_storage_insert" +/// Visible on t-ray scanners if the atom/var/level == 1 +#define TRAIT_T_RAY_VISIBLE "t-ray-visible" +/// If this item's been grilled +#define TRAIT_FOOD_GRILLED "food_grilled" +/// If this item's been fried +#define TRAIT_FOOD_FRIED "food_fried" +/// This is a silver slime created item +#define TRAIT_FOOD_SILVER "food_silver" +/// If this item's been made by a chef instead of being map-spawned or admin-spawned or such +#define TRAIT_FOOD_CHEF_MADE "food_made_by_chef" +/// The items needs two hands to be carried +#define TRAIT_NEEDS_TWO_HANDS "needstwohands" +/// Can't be catched when thrown +#define TRAIT_UNCATCHABLE "uncatchable" +/// Fish in this won't die +#define TRAIT_FISH_SAFE_STORAGE "fish_case" +/// Stuff that can go inside fish cases +#define TRAIT_FISH_CASE_COMPATIBILE "fish_case_compatibile" +/// If the item can be used as a bit. +#define TRAIT_FISHING_BAIT "fishing_bait" +/// The quality of the bait. It influences odds of catching fish +#define TRAIT_BASIC_QUALITY_BAIT "baic_quality_bait" +#define TRAIT_GOOD_QUALITY_BAIT "good_quality_bait" +#define TRAIT_GREAT_QUALITY_BAIT "great_quality_bait" +/// Baits with this trait will ignore bait preferences and related fish traits. +#define TRAIT_OMNI_BAIT "omni_bait" +/// Plants that were mutated as a result of passive instability, not a mutation threshold. +#define TRAIT_PLANT_WILDMUTATE "wildmutation" +/// If you hit an APC with exposed internals with this item it will try to shock you +#define TRAIT_APC_SHOCKING "apc_shocking" +/// Properly wielded two handed item +#define TRAIT_WIELDED "wielded" +/// A transforming item that is actively extended / transformed +#define TRAIT_TRANSFORM_ACTIVE "active_transform" +/// Buckling yourself to objects with this trait won't immobilize you +#define TRAIT_NO_IMMOBILIZE "no_immobilize" +/// Prevents stripping this equipment +#define TRAIT_NO_STRIP "no_strip" +/// Disallows this item from being pricetagged with a barcode +#define TRAIT_NO_BARCODES "no_barcode" +/// Allows heretics to cast their spells. +#define TRAIT_ALLOW_HERETIC_CASTING "allow_heretic_casting" +/// Designates a heart as a living heart for a heretic. +#define TRAIT_LIVING_HEART "living_heart" +/// Prevents the same person from being chosen multiple times for kidnapping objective +#define TRAIT_HAS_BEEN_KIDNAPPED "has_been_kidnapped" +/// An item still plays its hitsound even if it has 0 force, instead of the tap +#define TRAIT_CUSTOM_TAP_SOUND "no_tap_sound" +/// Makes the feedback message when someone else is putting this item on you more noticeable +#define TRAIT_DANGEROUS_OBJECT "dangerous_object" +/// determines whether or not objects are haunted and teleport/attack randomly +#define TRAIT_HAUNTED "haunted" + +//quirk traits +#define TRAIT_ALCOHOL_TOLERANCE "alcohol_tolerance" +#define TRAIT_HEAVY_DRINKER "heavy_drinker" +#define TRAIT_AGEUSIA "ageusia" +#define TRAIT_HEAVY_SLEEPER "heavy_sleeper" +#define TRAIT_NIGHT_VISION "night_vision" +#define TRAIT_LIGHT_STEP "light_step" +#define TRAIT_SPIRITUAL "spiritual" +#define TRAIT_CLOWN_ENJOYER "clown_enjoyer" +#define TRAIT_MIME_FAN "mime_fan" +#define TRAIT_VORACIOUS "voracious" +#define TRAIT_SELF_AWARE "self_aware" +#define TRAIT_FREERUNNING "freerunning" +#define TRAIT_SKITTISH "skittish" +#define TRAIT_PROSOPAGNOSIA "prosopagnosia" +#define TRAIT_TAGGER "tagger" +#define TRAIT_PHOTOGRAPHER "photographer" +#define TRAIT_MUSICIAN "musician" +#define TRAIT_LIGHT_DRINKER "light_drinker" +#define TRAIT_EMPATH "empath" +#define TRAIT_FRIENDLY "friendly" +#define TRAIT_GRABWEAKNESS "grab_weakness" +#define TRAIT_SNOB "snob" +#define TRAIT_BALD "bald" +#define TRAIT_SHAVED "shaved" +#define TRAIT_BADTOUCH "bad_touch" +#define TRAIT_EXTROVERT "extrovert" +#define TRAIT_INTROVERT "introvert" +#define TRAIT_ANXIOUS "anxious" +#define TRAIT_SMOKER "smoker" +#define TRAIT_POSTERBOY "poster_boy" +#define TRAIT_THROWINGARM "throwing_arm" +#define TRAIT_SETTLER "settler" + +/// This mob always lands on their feet when they fall, for better or for worse. +#define TRAIT_CATLIKE_GRACE "catlike_grace" + +///if the atom has a sticker attached to it +#define TRAIT_STICKERED "stickered" + +// Debug traits +/// This object has light debugging tools attached to it +#define TRAIT_LIGHTING_DEBUGGED "lighting_debugged" + +/// Gives you the Shifty Eyes quirk, rarely making people who examine you think you examined them back even when you didn't +#define TRAIT_SHIFTY_EYES "shifty_eyes" + +///Trait for the gamer quirk. +#define TRAIT_GAMER "gamer" + +///Trait for dryable items +#define TRAIT_DRYABLE "trait_dryable" +///Trait for dried items +#define TRAIT_DRIED "trait_dried" +/// Trait for customizable reagent holder +#define TRAIT_CUSTOMIZABLE_REAGENT_HOLDER "customizable_reagent_holder" +/// Trait for allowing an item that isn't food into the customizable reagent holder +#define TRAIT_ODD_CUSTOMIZABLE_FOOD_INGREDIENT "odd_customizable_food_ingredient" + +/// Used to prevent multiple floating blades from triggering over the same target +#define TRAIT_BEING_BLADE_SHIELDED "being_blade_shielded" + +/// This mob doesn't count as looking at you if you can only act while unobserved +#define TRAIT_UNOBSERVANT "trait_unobservant" + +/* Traits for ventcrawling. + * Both give access to ventcrawling, but *_NUDE requires the user to be + * wearing no clothes and holding no items. If both present, *_ALWAYS + * takes precedence. + */ +#define TRAIT_VENTCRAWLER_ALWAYS "ventcrawler_always" +#define TRAIT_VENTCRAWLER_NUDE "ventcrawler_nude" + +/// Minor trait used for beakers, or beaker-ishes. [/obj/item/reagent_containers], to show that they've been used in a reagent grinder. +#define TRAIT_MAY_CONTAIN_BLENDED_DUST "may_contain_blended_dust" + +/// Trait put on [/mob/living/carbon/human]. If that mob has a crystal core, also known as an ethereal heart, it will not try to revive them if the mob dies. +#define TRAIT_CANNOT_CRYSTALIZE "cannot_crystalize" + +///Trait applied to turfs when an atmos holosign is placed on them. It will stop firedoors from closing. +#define TRAIT_FIREDOOR_STOP "firedoor_stop" + +/// Trait applied when the MMI component is added to an [/obj/item/integrated_circuit] +#define TRAIT_COMPONENT_MMI "component_mmi" + +/// Trait applied when an integrated circuit/module becomes undupable +#define TRAIT_CIRCUIT_UNDUPABLE "circuit_undupable" + +/// Trait applied when an integrated circuit opens a UI on a player (see list pick component) +#define TRAIT_CIRCUIT_UI_OPEN "circuit_ui_open" + +/// PDA/ModPC Traits. This one makes PDAs explode if the user opens the messages menu +#define TRAIT_PDA_MESSAGE_MENU_RIGGED "pda_message_menu_rigged" +/// This one denotes a PDA has received a rigged message and will explode when the user tries to reply to a rigged PDA message +#define TRAIT_PDA_CAN_EXPLODE "pda_can_explode" +///The download speeds of programs from the dowloader is halved. +#define TRAIT_MODPC_HALVED_DOWNLOAD_SPEED "modpc_halved_download_speed" + +/// If present on a [/mob/living/carbon], will make them appear to have a medium level disease on health HUDs. +#define TRAIT_DISEASELIKE_SEVERITY_MEDIUM "diseaselike_severity_medium" + +/// trait denoting someone will crawl faster in soft crit +#define TRAIT_TENACIOUS "tenacious" + +/// trait denoting someone will sometimes recover out of crit +#define TRAIT_UNBREAKABLE "unbreakable" + +/// trait that prevents AI controllers from planning detached from ai_status to prevent weird state stuff. +#define TRAIT_AI_PAUSED "TRAIT_AI_PAUSED" + +/// this is used to bypass tongue language restrictions but not tongue disabilities +#define TRAIT_TOWER_OF_BABEL "tower_of_babel" + +/// This target has recently been shot by a marksman coin and is very briefly immune to being hit by one again to prevent recursion +#define TRAIT_RECENTLY_COINED "recently_coined" + +/// Receives echolocation images. +#define TRAIT_ECHOLOCATION_RECEIVER "echolocation_receiver" +/// Echolocation has a higher range. +#define TRAIT_ECHOLOCATION_EXTRA_RANGE "echolocation_extra_range" + +/// Trait given to a living mob and any observer mobs that stem from them if they suicide. +/// For clarity, this trait should always be associated/tied to a reference to the mob that suicided- not anything else. +#define TRAIT_SUICIDED "committed_suicide" + +/// Trait given to a living mob to prevent wizards from making it immortal +#define TRAIT_PERMANENTLY_MORTAL "permanently_mortal" + +///Trait given to a mob with a ckey currently in a temporary body, allowing people to know someone will re-enter the round later. +#define TRAIT_MIND_TEMPORARILY_GONE "temporarily_gone" + +/// Similar trait given to temporary bodies inhabited by players +#define TRAIT_TEMPORARY_BODY "temporary_body" + +/// Trait given to mechs that can have orebox functionality on movement +#define TRAIT_OREBOX_FUNCTIONAL "orebox_functional" + +///A trait for mechs that were created through the normal construction process, and not spawned by map or other effects. +#define TRAIT_MECHA_CREATED_NORMALLY "trait_mecha_created_normally" + +///fish traits +#define TRAIT_RESIST_EMULSIFY "resist_emulsify" +#define TRAIT_FISH_SELF_REPRODUCE "fish_self_reproduce" +#define TRAIT_FISH_NO_MATING "fish_no_mating" +#define TRAIT_YUCKY_FISH "yucky_fish" +#define TRAIT_FISH_TOXIN_IMMUNE "fish_toxin_immune" +#define TRAIT_FISH_CROSSBREEDER "fish_crossbreeder" +#define TRAIT_FISH_AMPHIBIOUS "fish_amphibious" +///Trait needed for the lubefish evolution +#define TRAIT_FISH_FED_LUBE "fish_fed_lube" +#define TRAIT_FISH_NO_HUNGER "fish_no_hunger" +///It comes from a fish case. Relevant for bounties so far. +#define TRAIT_FISH_FROM_CASE "fish_from_case" + +/// Trait given to angelic constructs to let them purge cult runes +#define TRAIT_ANGELIC "angelic" + +/// Trait given to a dreaming carbon when they are currently doing dreaming stuff +#define TRAIT_DREAMING "currently_dreaming" + +///generic atom traits +/// Trait from [/datum/element/rust]. Its rusty and should be applying a special overlay to denote this. +#define TRAIT_RUSTY "rust_trait" +/// Stops someone from splashing their reagent_container on an object with this trait +#define TRAIT_DO_NOT_SPLASH "do_not_splash" +/// Marks an atom when the cleaning of it is first started, so that the cleaning overlay doesn't get removed prematurely +#define TRAIT_CURRENTLY_CLEANING "currently_cleaning" +/// Objects with this trait are deleted if they fall into chasms, rather than entering abstract storage +#define TRAIT_CHASM_DESTROYED "chasm_destroyed" +/// Trait from being under the floor in some manner +#define TRAIT_UNDERFLOOR "underfloor" +/// If the movable shouldn't be reflected by mirrors. +#define TRAIT_NO_MIRROR_REFLECTION "no_mirror_reflection" +/// If this movable is currently treading in a turf with the immerse element. +#define TRAIT_IMMERSED "immersed" +/// 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" +/** + * With this, the immerse overlay will give the atom its own submersion visual overlay + * instead of one that's also shared with other movables, thus making editing its appearance possible. + */ +#define TRAIT_UNIQUE_IMMERSE "unique_immerse" + +/// This item is currently under the control of telekinesis +#define TRAIT_TELEKINESIS_CONTROLLED "telekinesis_controlled" + +/// changelings with this trait can no longer talk over the hivemind +#define TRAIT_CHANGELING_HIVEMIND_MUTE "ling_mute" +#define TRAIT_HULK "hulk" +/// Isn't attacked harmfully by blob structures +#define TRAIT_BLOB_ALLY "blob_ally" + +///Traits given by station traits +#define STATION_TRAIT_BANANIUM_SHIPMENTS "station_trait_bananium_shipments" +#define STATION_TRAIT_BIGGER_PODS "station_trait_bigger_pods" +#define STATION_TRAIT_BIRTHDAY "station_trait_birthday" +#define STATION_TRAIT_BOTS_GLITCHED "station_trait_bot_glitch" +#define STATION_TRAIT_CARP_INFESTATION "station_trait_carp_infestation" +#define STATION_TRAIT_CYBERNETIC_REVOLUTION "station_trait_cybernetic_revolution" +#define STATION_TRAIT_EMPTY_MAINT "station_trait_empty_maint" +#define STATION_TRAIT_FILLED_MAINT "station_trait_filled_maint" +#define STATION_TRAIT_FORESTED "station_trait_forested" +#define STATION_TRAIT_HANGOVER "station_trait_hangover" +#define STATION_TRAIT_LATE_ARRIVALS "station_trait_late_arrivals" +#define STATION_TRAIT_LOANER_SHUTTLE "station_trait_loaner_shuttle" +#define STATION_TRAIT_MEDBOT_MANIA "station_trait_medbot_mania" +#define STATION_TRAIT_PDA_GLITCHED "station_trait_pda_glitched" +#define STATION_TRAIT_PREMIUM_INTERNALS "station_trait_premium_internals" +#define STATION_TRAIT_RADIOACTIVE_NEBULA "station_trait_radioactive_nebula" +#define STATION_TRAIT_RANDOM_ARRIVALS "station_trait_random_arrivals" +#define STATION_TRAIT_REVOLUTIONARY_TRASHING "station_trait_revolutionary_trashing" +#define STATION_TRAIT_SHUTTLE_SALE "station_trait_shuttle_sale" +#define STATION_TRAIT_SMALLER_PODS "station_trait_smaller_pods" +#define STATION_TRAIT_SPIDER_INFESTATION "station_trait_spider_infestation" +#define STATION_TRAIT_UNIQUE_AI "station_trait_unique_ai" +#define STATION_TRAIT_UNNATURAL_ATMOSPHERE "station_trait_unnatural_atmosphere" +#define STATION_TRAIT_VENDING_SHORTAGE "station_trait_vending_shortage" + +/// This atom is currently spinning. +#define TRAIT_SPINNING "spinning" + +/// This limb can't be torn open anymore +#define TRAIT_IMMUNE_TO_CRANIAL_FISSURE "immune_to_cranial_fissure" +/// Trait given if the mob has a cranial fissure. +#define TRAIT_HAS_CRANIAL_FISSURE "has_cranial_fissure" + +/// Denotes that this id card was given via the job outfit, aka the first ID this player got. +#define TRAIT_JOB_FIRST_ID_CARD "job_first_id_card" +/// ID cards with this trait will attempt to forcibly occupy the front-facing ID card slot in wallets. +#define TRAIT_MAGNETIC_ID_CARD "magnetic_id_card" +/// ID cards with this trait have special appraisal text. +#define TRAIT_TASTEFULLY_THICK_ID_CARD "impressive_very_nice" +/// things with this trait are treated as having no access in /obj/proc/check_access(obj/item) +#define TRAIT_ALWAYS_NO_ACCESS "alwaysnoaccess" + +/// This human wants to see the color of their glasses, for some reason +#define TRAIT_SEE_GLASS_COLORS "see_glass_colors" + +// Radiation defines + +/// Marks that this object is irradiated +#define TRAIT_IRRADIATED "iraddiated" + +/// Harmful radiation effects, the toxin damage and the burns, will not occur while this trait is active +#define TRAIT_HALT_RADIATION_EFFECTS "halt_radiation_effects" + +/// This clothing protects the user from radiation. +/// This should not be used on clothing_traits, but should be applied to the clothing itself. +#define TRAIT_RADIATION_PROTECTED_CLOTHING "radiation_protected_clothing" + +/// Whether or not this item will allow the radiation SS to go through standard +/// radiation processing as if this wasn't already irradiated. +/// Basically, without this, COMSIG_IN_RANGE_OF_IRRADIATION won't fire once the object is irradiated. +#define TRAIT_BYPASS_EARLY_IRRADIATED_CHECK "radiation_bypass_early_irradiated_check" + +/// Simple trait that just holds if we came into growth from a specific mob type. Should hold a REF(src) to the type of mob that caused the growth, not anything else. +#define TRAIT_WAS_EVOLVED "was_evolved_from_the_mob_we_hold_a_textref_to" + +// Traits to heal for + +/// This mob heals from carp rifts. +#define TRAIT_HEALS_FROM_CARP_RIFTS "heals_from_carp_rifts" + +/// This mob heals from cult pylons. +#define TRAIT_HEALS_FROM_CULT_PYLONS "heals_from_cult_pylons" + +/// Ignore Crew monitor Z levels +#define TRAIT_MULTIZ_SUIT_SENSORS "multiz_suit_sensors" + +/// Ignores body_parts_covered during the add_fingerprint() proc. Works both on the person and the item in the glove slot. +#define TRAIT_FINGERPRINT_PASSTHROUGH "fingerprint_passthrough" + +/// this object has been frozen +#define TRAIT_FROZEN "frozen" + +/// Currently fishing +#define TRAIT_GONE_FISHING "fishing" + +/// Makes a species be better/worse at tackling depending on their wing's status +#define TRAIT_TACKLING_WINGED_ATTACKER "tacking_winged_attacker" + +/// Makes a species be frail and more likely to roll bad results if they hit a wall +#define TRAIT_TACKLING_FRAIL_ATTACKER "tackling_frail_attacker" + +/// Makes a species be better/worse at defending against tackling depending on their tail's status +#define TRAIT_TACKLING_TAILED_DEFENDER "tackling_tailed_defender" + +/// Is runechat for this atom/movable currently disabled, regardless of prefs or anything? +#define TRAIT_RUNECHAT_HIDDEN "runechat_hidden" + +/// the object has a label applied +#define TRAIT_HAS_LABEL "labeled" + +/// Trait given to a mob that is currently thinking (giving off the "thinking" icon), used in an IC context +#define TRAIT_THINKING_IN_CHARACTER "currently_thinking_IC" + +///without a human having this trait, they speak as if they have no tongue. +#define TRAIT_SPEAKS_CLEARLY "speaks_clearly" + +// specific sources for TRAIT_SPEAKS_CLEARLY + +///Trait given by /datum/component/germ_sensitive +#define TRAIT_GERM_SENSITIVE "germ_sensitive" + +/// This atom can have spells cast from it if a mob is within it +/// This means the "caster" of the spell is changed to the mob's loc +/// Note this doesn't mean all spells are guaranteed to work or the mob is guaranteed to cast +#define TRAIT_CASTABLE_LOC "castable_loc" + +///Trait given by /datum/element/relay_attacker +#define TRAIT_RELAYING_ATTACKER "relaying_attacker" + +///Trait given to limb by /mob/living/basic/living_limb_flesh +#define TRAIT_IGNORED_BY_LIVING_FLESH "livingflesh_ignored" + +/// Trait given while using /datum/action/cooldown/mob_cooldown/wing_buffet +#define TRAIT_WING_BUFFET "wing_buffet" +/// Trait given while tired after using /datum/action/cooldown/mob_cooldown/wing_buffet +#define TRAIT_WING_BUFFET_TIRED "wing_buffet_tired" +/// Trait given to a dragon who fails to defend their rifts +#define TRAIT_RIFT_FAILURE "fail_dragon_loser" + +///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" +///trait given to food that can be baked by /datum/component/bakeable +#define TRAIT_BAKEABLE "bakeable" + +/// Trait given to foam darts that have an insert in them +#define TRAIT_DART_HAS_INSERT "dart_has_insert" + +/// Trait determines if this mob has examined an eldritch painting +#define TRAIT_ELDRITCH_PAINTING_EXAMINE "eldritch_painting_examine" + +/// Trait used by the /datum/brain_trauma/severe/flesh_desire trauma to change their preferences of what they eat +#define TRAIT_FLESH_DESIRE "flesh_desire" + +///Trait granted by janitor skillchip, allows communication with cleanbots +#define TRAIT_CLEANBOT_WHISPERER "cleanbot_whisperer" + +/// Trait given when a mob is currently in invisimin mode +#define TRAIT_INVISIMIN "invisimin" + +///Trait given when a mob has been tipped +#define TRAIT_MOB_TIPPED "mob_tipped" + +/// Trait which self-identifies as an enemy of the law +#define TRAIT_ALWAYS_WANTED "always_wanted" + +// END TRAIT DEFINES diff --git a/code/__DEFINES/traits/macros.dm b/code/__DEFINES/traits/macros.dm new file mode 100644 index 00000000000000..731f9fec26055d --- /dev/null +++ b/code/__DEFINES/traits/macros.dm @@ -0,0 +1,16 @@ +// This file contains all of the "dynamic" traits and trait sources that can be used +// in a number of versatile and everchanging ways. +// If it uses psuedo-variables like the examples below, it's a macro-trait. + + +/// 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]" +/// A trait given by a specific status effect (not sure why we need both but whatever!) +#define TRAIT_STATUS_EFFECT(effect_id) "[effect_id]-trait" +/// Trait given by mech equipment +#define TRAIT_MECH_EQUIPMENT(equipment_type) "mech_equipment_[equipment_type]" +/// Trait applied by element +#define ELEMENT_TRAIT(source) "element_trait_[source]" diff --git a/code/__DEFINES/traits/sources.dm b/code/__DEFINES/traits/sources.dm new file mode 100644 index 00000000000000..f9cdbe4326d1e8 --- /dev/null +++ b/code/__DEFINES/traits/sources.dm @@ -0,0 +1,281 @@ +// This file contains all of the trait sources, or all of the things that grant traits. +// Several things such as `type` or `REF(src)` may be used in the ADD_TRAIT() macro as the "source", but this file contains all of the defines for immutable static strings. + +// common trait sources +#define TRAIT_GENERIC "generic" +#define UNCONSCIOUS_TRAIT "unconscious" +#define EYE_DAMAGE "eye_damage" +#define EAR_DAMAGE "ear_damage" +#define GENETIC_MUTATION "genetic" +#define OBESITY "obesity" +#define MAGIC_TRAIT "magic" +#define TRAUMA_TRAIT "trauma" +#define FLIGHTPOTION_TRAIT "flightpotion" +/// Trait inherited by experimental surgeries +#define EXPERIMENTAL_SURGERY_TRAIT "experimental_surgery" +#define DISEASE_TRAIT "disease" +#define SPECIES_TRAIT "species" +#define ORGAN_TRAIT "organ" +/// Trait given by augmented limbs +#define AUGMENTATION_TRAIT "augments" +/// Trait given by organ gained via abductor surgery +#define ABDUCTOR_GLAND_TRAIT "abductor_gland" +/// cannot be removed without admin intervention +#define ROUNDSTART_TRAIT "roundstart" +#define JOB_TRAIT "job" +#define CYBORG_ITEM_TRAIT "cyborg-item" +/// Any traits granted by quirks. +#define QUIRK_TRAIT "quirk_trait" +/// (B)admins only. +#define ADMIN_TRAIT "admin" +/// Any traits given through a smite. +#define SMITE_TRAIT "smite" +#define CHANGELING_TRAIT "changeling" +#define CULT_TRAIT "cult" +#define LICH_TRAIT "lich" + +#define ABSTRACT_ITEM_TRAIT "abstract-item" +/// A trait given by any status effect +#define STATUS_EFFECT_TRAIT "status-effect" + +/// Trait from light debugging +#define LIGHT_DEBUG_TRAIT "light-debug" + +#define CLOTHING_TRAIT "clothing" +#define HELMET_TRAIT "helmet" +/// inherited from the mask +#define MASK_TRAIT "mask" +/// inherited from your sweet kicks +#define SHOES_TRAIT "shoes" +/// Trait inherited by implants +#define IMPLANT_TRAIT "implant" +#define GLASSES_TRAIT "glasses" +/// inherited from riding vehicles +#define VEHICLE_TRAIT "vehicle" +#define INNATE_TRAIT "innate" +#define CRIT_HEALTH_TRAIT "crit_health" +#define OXYLOSS_TRAIT "oxyloss" +/// Trait sorce for "was recently shocked by something" +#define WAS_SHOCKED "was_shocked" +#define TURF_TRAIT "turf" +/// trait associated to being buckled +#define BUCKLED_TRAIT "buckled" +/// trait associated to being held in a chokehold +#define CHOKEHOLD_TRAIT "chokehold" +/// trait associated to resting +#define RESTING_TRAIT "resting" +/// trait associated to a stat value or range of +#define STAT_TRAIT "stat" +#define STATION_TRAIT "station-trait" +/// obtained from mapping helper +#define MAPPING_HELPER_TRAIT "mapping-helper" +/// Trait associated to wearing a suit +#define SUIT_TRAIT "suit" +/// Trait associated to lying down (having a [lying_angle] of a different value than zero). +#define LYING_DOWN_TRAIT "lying-down" +/// A trait gained by leaning against a wall +#define LEANING_TRAIT "leaning" +/// Trait associated to lacking electrical power. +#define POWER_LACK_TRAIT "power-lack" +/// Trait associated to lacking motor movement +#define MOTOR_LACK_TRAIT "motor-lack" +/// Trait associated with mafia +#define MAFIA_TRAIT "mafia" +/// Trait associated with ctf +#define CTF_TRAIT "ctf" +/// Trait associated with highlander +#define HIGHLANDER_TRAIT "highlander" +/// Trait given from playing pretend with baguettes +#define SWORDPLAY_TRAIT "swordplay" +/// Trait given by being recruited as a nuclear operative +#define NUKE_OP_MINION_TRAIT "nuke-op-minion" + +/// Trait given to you by shapeshifting +#define SHAPESHIFT_TRAIT "shapeshift_trait" + +// unique trait sources, still defines +#define EMP_TRAIT "emp_trait" +#define STATUE_MUTE "statue" +#define CHANGELING_DRAIN "drain" + +#define STASIS_MUTE "stasis" +#define GENETICS_SPELL "genetics_spell" +#define EYES_COVERED "eyes_covered" +#define NO_EYES "no_eyes" +#define HYPNOCHAIR_TRAIT "hypnochair" +#define FLASHLIGHT_EYES "flashlight_eyes" +#define IMPURE_OCULINE "impure_oculine" +#define HAUNTIUM_REAGENT_TRAIT "hauntium_reagent_trait" +#define TRAIT_SANTA "santa" +#define SCRYING_ORB "scrying-orb" +#define ABDUCTOR_ANTAGONIST "abductor-antagonist" +#define JUNGLE_FEVER_TRAIT "jungle_fever" +#define MEGAFAUNA_TRAIT "megafauna" +#define CLOWN_NUKE_TRAIT "clown-nuke" +#define STICKY_MOUSTACHE_TRAIT "sticky-moustache" +#define CHAINSAW_FRENZY_TRAIT "chainsaw-frenzy" +#define CHRONO_GUN_TRAIT "chrono-gun" +#define REVERSE_BEAR_TRAP_TRAIT "reverse-bear-trap" +#define CURSED_MASK_TRAIT "cursed-mask" +#define HIS_GRACE_TRAIT "his-grace" +#define HAND_REPLACEMENT_TRAIT "magic-hand" +#define HOT_POTATO_TRAIT "hot-potato" +#define SABRE_SUICIDE_TRAIT "sabre-suicide" +#define ABDUCTOR_VEST_TRAIT "abductor-vest" +#define CAPTURE_THE_FLAG_TRAIT "capture-the-flag" +#define BASKETBALL_MINIGAME_TRAIT "basketball-minigame" +#define EYE_OF_GOD_TRAIT "eye-of-god" +#define SHAMEBRERO_TRAIT "shamebrero" +#define CHRONOSUIT_TRAIT "chronosuit" +#define LOCKED_HELMET_TRAIT "locked-helmet" +#define NINJA_SUIT_TRAIT "ninja-suit" +#define SLEEPING_CARP_TRAIT "sleeping_carp" +#define TIMESTOP_TRAIT "timestop" +#define LIFECANDLE_TRAIT "lifecandle" +#define VENTCRAWLING_TRAIT "ventcrawling" +#define SPECIES_FLIGHT_TRAIT "species-flight" +#define FROSTMINER_ENRAGE_TRAIT "frostminer-enrage" +#define NO_GRAVITY_TRAIT "no-gravity" +#define NEGATIVE_GRAVITY_TRAIT "negative-gravity" + +/// A trait gained from a mob's leap action, like the leaper +#define LEAPING_TRAIT "leaping" +/// A trait gained from a mob's vanish action, like the herophant +#define VANISHING_TRAIT "vanishing" +/// A trait gained from a mob's swoop action, like the ash drake +#define SWOOPING_TRAIT "swooping" +/// A trait gained from a mob's mimic ability, like the mimic +#define MIMIC_TRAIT "mimic" +#define SHRUNKEN_TRAIT "shrunken" +#define LEAPER_BUBBLE_TRAIT "leaper-bubble" +#define DNA_VAULT_TRAIT "dna_vault" +/// sticky nodrop sounds like a bad soundcloud rapper's name +#define STICKY_NODROP "sticky-nodrop" +#define SKILLCHIP_TRAIT "skillchip" +#define SKILL_TRAIT "skill" +#define BUSY_FLOORBOT_TRAIT "busy-floorbot" +#define PULLED_WHILE_SOFTCRIT_TRAIT "pulled-while-softcrit" +#define LOCKED_BORG_TRAIT "locked-borg" +/// trait associated to not having locomotion appendages nor the ability to fly or float +#define LACKING_LOCOMOTION_APPENDAGES_TRAIT "lacking-locomotion-appengades" +#define CRYO_TRAIT "cryo" +/// trait associated to not having fine manipulation appendages such as hands +#define LACKING_MANIPULATION_APPENDAGES_TRAIT "lacking-manipulation-appengades" +#define HANDCUFFED_TRAIT "handcuffed" +/// Trait granted by [/obj/item/warp_whistle] +#define WARPWHISTLE_TRAIT "warpwhistle" +///Turf trait for when a turf is transparent +#define TURF_Z_TRANSPARENT_TRAIT "turf_z_transparent" +/// Trait applied by [/datum/component/soulstoned] +#define SOULSTONE_TRAIT "soulstone" +/// Trait applied to slimes by low temperature +#define SLIME_COLD "slime-cold" +/// Trait applied to mobs by being tipped over +#define TIPPED_OVER "tipped-over" +/// Trait applied to PAIs by being folded +#define PAI_FOLDED "pai-folded" +/// Trait applied to brain mobs when they lack external aid for locomotion, such as being inside a mech. +#define BRAIN_UNAIDED "brain-unaided" +/// Trait applied to a mob when it gets a required "operational datum" (components/elements). Sends out the source as the type of the element. +#define TRAIT_SUBTREE_REQUIRED_OPERATIONAL_DATUM "element-required" +/// Trait applied by MODsuits. +#define MOD_TRAIT "mod" + +/// Trait granted by the berserker hood. +#define BERSERK_TRAIT "berserk_trait" +/// Trait granted by [/obj/item/rod_of_asclepius] +#define HIPPOCRATIC_OATH_TRAIT "hippocratic_oath" +/// Trait granted by [/datum/status_effect/blooddrunk] +#define BLOODDRUNK_TRAIT "blooddrunk" +/// Trait granted by lipstick +#define LIPSTICK_TRAIT "lipstick_trait" +/// Self-explainatory. +#define BEAUTY_ELEMENT_TRAIT "beauty_element" +#define MOOD_DATUM_TRAIT "mood_datum" +#define DRONE_SHY_TRAIT "drone_shy" +/// Trait given by stabilized light pink extracts +#define STABILIZED_LIGHT_PINK_EXTRACT_TRAIT "stabilized_light_pink" +/// Trait given by adamantine extracts +#define ADAMANTINE_EXTRACT_TRAIT "adamantine_extract" +/// Given by the multiple_lives component to the previous body of the mob upon death. +#define EXPIRED_LIFE_TRAIT "expired_life" +/// Trait given to an atom/movable when they orbit something. +#define ORBITING_TRAIT "orbiting" +/// From the item_scaling element +#define ITEM_SCALING_TRAIT "item_scaling" +/// Trait given by choking +#define CHOKING_TRAIT "choking_trait" +/// Trait given by hallucinations +#define HALLUCINATION_TRAIT "hallucination_trait" +/// Trait given by simple/basic mob death +#define BASIC_MOB_DEATH_TRAIT "basic_mob_death" +/// Trait given by your current speed +#define SPEED_TRAIT "speed_trait" +/// Trait given to mobs that have been autopsied +#define AUTOPSY_TRAIT "autopsy_trait" +/// Trait given by [/datum/status_effect/blessing_of_insanity] +#define MAD_WIZARD_TRAIT "mad_wizard_trait" + +///From the market_crash event +#define MARKET_CRASH_EVENT_TRAIT "crashed_market_event" + +/// Traits granted to items due to their chameleon properties. +#define CHAMELEON_ITEM_TRAIT "chameleon_item_trait" + +// some trait sources dirived from bodyparts - BODYPART_TRAIT is generic. +#define BODYPART_TRAIT "bodypart" +#define HEAD_TRAIT "head" +#define CHEST_TRAIT "chest" +#define RIGHT_ARM_TRAIT "right_arm" +#define LEFT_ARM_TRAIT "left_arm" +#define RIGHT_LEG_TRAIT "right_leg" +#define LEFT_LEG_TRAIT "left_leg" + +///coming from a fish trait datum. +#define FISH_TRAIT_DATUM "fish_trait_datum" +///coming from a fish evolution datum +#define FISH_EVOLUTION "fish_evolution" + +/// Trait given by echolocation component. +#define ECHOLOCATION_TRAIT "echolocation" + +///trait source that tongues should use +#define SPEAKING_FROM_TONGUE "tongue" +///trait source that sign language should use +#define SPEAKING_FROM_HANDS "hands" + +/// Sources for TRAIT_IGNORING_GRAVITY +#define IGNORING_GRAVITY_NEGATION "ignoring_gravity_negation" + +/// Hearing trait that is from the hearing component +#define CIRCUIT_HEAR_TRAIT "circuit_hear" + +/// This trait comes from when a mob is currently typing. +#define CURRENTLY_TYPING_TRAIT "currently_typing" + +/** +* Trait granted by [/mob/living/carbon/Initialize] and +* granted/removed by [/obj/item/organ/internal/tongue] +* Used for ensuring that carbons without tongues cannot taste anything +* so it is added in Initialize, and then removed when a tongue is inserted +* and readded when a tongue is removed. +*/ +#define NO_TONGUE_TRAIT "no_tongue_trait" + +/// Trait granted by [/mob/living/silicon/robot] +/// Traits applied to a silicon mob by their model. +#define MODEL_TRAIT "model_trait" + +/// Trait granted by [mob/living/silicon/ai] +/// Applied when the ai anchors itself +#define AI_ANCHOR_TRAIT "ai_anchor" + +/// Trait from [/datum/antagonist/nukeop/clownop] +#define CLOWNOP_TRAIT "clownop" + +#define ANALYZER_TRAIT "analyzer_trait" + +/// Trait from an organ being inside a bodypart +#define ORGAN_INSIDE_BODY_TRAIT "organ_inside_body" +/// Trait when something was labelled by a pen. +#define PEN_LABEL_TRAIT "pen_label" diff --git a/code/__DEFINES/transport.dm b/code/__DEFINES/transport.dm index b0b38ee70ef956..7413ad58916330 100644 --- a/code/__DEFINES/transport.dm +++ b/code/__DEFINES/transport.dm @@ -99,10 +99,10 @@ DEFINE_BITFIELD(request_flags, list( #define XING_STATE_RED 2 #define XING_STATE_MALF 3 -#define AMBER_THRESHOLD_NORMAL 60 // SKYRAT EDIT CHANGE - RUN/WALK SPEED -#define RED_THRESHOLD_NORMAL 37 // SKYRAT EDIT CHANGE - RUN/WALK SPEED -#define AMBER_THRESHOLD_DEGRADED 45 // SKYRAT EDIT CHANGE - RUN/WALK SPEED -#define RED_THRESHOLD_DEGRADED 33 // SKYRAT EDIT CHANGE - RUN/WALK SPEED +#define AMBER_THRESHOLD_NORMAL 60 // NOVA EDIT CHANGE - RUN/WALK SPEED +#define RED_THRESHOLD_NORMAL 37 // NOVA EDIT CHANGE - RUN/WALK SPEED +#define AMBER_THRESHOLD_DEGRADED 45 // NOVA EDIT CHANGE - RUN/WALK SPEED +#define RED_THRESHOLD_DEGRADED 33 // NOVA EDIT CHANGE - RUN/WALK SPEED #define DEFAULT_TRAM_LENGTH 10 diff --git a/code/__DEFINES/uplink.dm b/code/__DEFINES/uplink.dm index fcc2118348c73d..d6412e0e4d1502 100644 --- a/code/__DEFINES/uplink.dm +++ b/code/__DEFINES/uplink.dm @@ -9,6 +9,9 @@ /// This item is purchasable to clown ops #define UPLINK_CLOWN_OPS (1 << 2) +/// This item is purchasable to infiltrators (midround traitors) +#define UPLINK_INFILTRATORS (1 << 3) + /// Progression gets turned into a user-friendly form. This is just an abstract equation that makes progression not too large. #define DISPLAY_PROGRESSION(time) round(time/60, 0.01) diff --git a/code/__DEFINES/vehicles.dm b/code/__DEFINES/vehicles.dm index 9aac19be3c1087..d210a07dde4dd5 100644 --- a/code/__DEFINES/vehicles.dm +++ b/code/__DEFINES/vehicles.dm @@ -26,6 +26,8 @@ #define UNBUCKLE_DISABLED_RIDER (1<<3) // For fireman carries, the carrying human needs an arm #define CARRIER_NEEDS_ARM (1<<4) +// This rider must be our friend +#define JUST_FRIEND_RIDERS (1<<5) //car_traits flags ///Will this car kidnap people by ramming into them? diff --git a/code/__DEFINES/vv.dm b/code/__DEFINES/vv.dm index 1cc9025b821646..dfa930f7a76bad 100644 --- a/code/__DEFINES/vv.dm +++ b/code/__DEFINES/vv.dm @@ -1,6 +1,6 @@ #define VV_NUM "Number" #define VV_TEXT "Text" -#define VV_MESSAGE "Mutiline Text" +#define VV_MESSAGE "Multiline Text" #define VV_COLOR "Color" #define VV_COLOR_MATRIX "Color Matrix" #define VV_ICON "Icon" @@ -57,7 +57,7 @@ // VV HREF KEYS #define VV_HK_TARGET "target" -#define VV_HK_VARNAME "targetvar" //name or index of var for 1 variable targetting hrefs. +#define VV_HK_VARNAME "targetvar" //name or index of var for 1 variable targeting hrefs. // vv_do_list() keys #define VV_HK_LIST_ADD "listadd" @@ -103,6 +103,8 @@ #define VV_HK_ARMOR_MOD "mod_obj_armor" // /atom/movable +#define VV_HK_OBSERVE_FOLLOW "observe_follow" +#define VV_HK_GET_MOVABLE "get_movable" #define VV_HK_DEADCHAT_PLAYS "deadchat_plays" // /obj @@ -112,6 +114,9 @@ // /obj/item #define VV_HK_ADD_FANTASY_AFFIX "add_fantasy_affix" +// /obj/narsie +#define VV_HK_BEGIN_NARSIE_ROUNDEND "begin_narsie_roundend" + // /mob #define VV_HK_GIB "gib" #define VV_HK_GIVE_MOB_ACTION "give_mob_action" @@ -138,7 +143,6 @@ #define VV_HK_GIVE_GUARDIAN_SPIRIT "give_guardian_spirit" // /mob/living/carbon -#define VV_HK_MAKE_AI "aiify" #define VV_HK_MODIFY_BODYPART "mod_bodypart" #define VV_HK_MODIFY_ORGANS "organs_modify" #define VV_HK_MARTIAL_ART "give_martial_art" @@ -152,6 +156,7 @@ #define VV_HK_SET_SPECIES "setspecies" #define VV_HK_PURRBATION "purrbation" #define VV_HK_APPLY_DNA_INFUSION "apply_dna_infusion" +#define VV_HK_TURN_INTO_MMI "turn_into_mmi" // misc #define VV_HK_SPACEVINE_PURGE "spacevine_purge" diff --git a/code/__DEFINES/wall_dents.dm b/code/__DEFINES/wall_dents.dm index 1e4f813849ef6d..555f98671c0799 100644 --- a/code/__DEFINES/wall_dents.dm +++ b/code/__DEFINES/wall_dents.dm @@ -1,2 +1,3 @@ #define WALL_DENT_HIT 1 #define WALL_DENT_SHOT 2 +#define MAX_DENT_DECALS 15 diff --git a/code/__DEFINES/wiremod.dm b/code/__DEFINES/wiremod.dm index 14a03d780ce10b..421650e3bf1e79 100644 --- a/code/__DEFINES/wiremod.dm +++ b/code/__DEFINES/wiremod.dm @@ -45,6 +45,8 @@ #define PORT_TYPE_ATOM "entity" /// Datum datatype #define PORT_TYPE_DATUM "datum" +/// User datatype +#define PORT_TYPE_USER "user" /// The maximum range between a port and an atom diff --git a/code/__DEFINES/wounds.dm b/code/__DEFINES/wounds.dm index 7aec41d7b5cb33..7d02aa7f3ebd48 100644 --- a/code/__DEFINES/wounds.dm +++ b/code/__DEFINES/wounds.dm @@ -90,7 +90,7 @@ GLOBAL_LIST_INIT(wound_severities_chronological, list( // "Where" a specific biostate is within a given limb // Interior is hard shit, the last line, shit like bones -// Exterior is soft shit, targetted by slashes and pierces (usually), protects exterior +// Exterior is soft shit, targeted by slashes and pierces (usually), protects exterior // A limb needs both mangled interior and exterior to be dismembered, but slash/pierce must mangle exterior to attack the interior // Not having exterior/interior counts as mangled exterior/interior for the purposes of dismemberment /// The given biostate is on the "interior" of the limb - hard shit, protected by exterior @@ -123,8 +123,10 @@ GLOBAL_LIST_INIT(bio_state_anatomy, list( #define WOUND_SERIES_FLESH_PUNCTURE_BLEED "wound_series_flesh_puncture_bleed" /// Generic loss wounds. See loss.dm #define WOUND_SERIES_LOSS_BASIC "wound_series_loss_basic" +/// Cranial fissure wound. +#define WOUND_SERIES_CRANIAL_FISSURE "wound_series_cranial_fissure" -// SKYRAT EDIT ADDITION BEGIN - MUSCLE AND SYNTH WOUNDS +// NOVA EDIT ADDITION BEGIN - MUSCLE AND SYNTH WOUNDS // Have to put it here so I can use it in the global list of wound series /// See muscle.dm and robotic_blunt.dm #define WOUND_SERIES_MUSCLE_DAMAGE "skyrat_wound_series_muscle_damage" @@ -133,7 +135,7 @@ GLOBAL_LIST_INIT(bio_state_anatomy, list( #define WOUND_SERIES_METAL_BURN_OVERHEAT "wound_series_metal_burn_basic" #define WOUND_SERIES_WIRE_SLASH_ELECTRICAL_DAMAGE "wound_series_metal_slash_electrical_damage_basic" #define WOUND_SERIES_WIRE_PIERCE_ELECTRICAL_DAMAGE "wound_series_metal_pierce_electrical_damage_basic" -// SKYRAT EDIT ADDITION END +// NOVA EDIT ADDITION END /// A assoc list of (wound typepath -> wound_pregen_data instance). Every wound should have a pregen data. GLOBAL_LIST_INIT_TYPED(all_wound_pregen_data, /datum/wound_pregen_data, generate_wound_static_data()) @@ -207,24 +209,24 @@ GLOBAL_LIST_INIT(wound_series_collections, generate_wound_series_collection()) GLOBAL_LIST_INIT(wounding_types_to_series, list( WOUND_BLUNT = list( WOUND_SERIES_BONE_BLUNT_BASIC, - WOUND_SERIES_MUSCLE_DAMAGE, // SKYRAT EDIT -- MUSCLE WOUNDS - WOUND_SERIES_METAL_BLUNT_BASIC, // SKYRAT EDIT ADDITION - SYNTH WOUNDS + WOUND_SERIES_MUSCLE_DAMAGE, // NOVA EDIT -- MUSCLE WOUNDS + WOUND_SERIES_METAL_BLUNT_BASIC, // NOVA EDIT ADDITION - SYNTH WOUNDS ), WOUND_SLASH = list( WOUND_SERIES_FLESH_SLASH_BLEED, - WOUND_SERIES_MUSCLE_DAMAGE, // SKYRAT EDIT ADDITION - MUSCLE WOUNDS - WOUND_SERIES_WIRE_SLASH_ELECTRICAL_DAMAGE, // SKYRAT EDIT ADDITION - SYNTH WOUNDS + WOUND_SERIES_MUSCLE_DAMAGE, // NOVA EDIT ADDITION - MUSCLE WOUNDS + WOUND_SERIES_WIRE_SLASH_ELECTRICAL_DAMAGE, // NOVA EDIT ADDITION - SYNTH WOUNDS ), WOUND_BURN = list( WOUND_SERIES_FLESH_BURN_BASIC, - WOUND_SERIES_METAL_BURN_OVERHEAT, // SKYRAT EDIT ADDITION - SYNTH WOUNDS + WOUND_SERIES_METAL_BURN_OVERHEAT, // NOVA EDIT ADDITION - SYNTH WOUNDS ), WOUND_PIERCE = list( WOUND_SERIES_FLESH_PUNCTURE_BLEED, - WOUND_SERIES_MUSCLE_DAMAGE, // SKYRAT EDIT ADDITION - MUSCLE WOUNDS - WOUND_SERIES_WIRE_PIERCE_ELECTRICAL_DAMAGE, // SKYRAT EDIT ADDITION - SYNTH WOUNDS + WOUND_SERIES_MUSCLE_DAMAGE, // NOVA EDIT ADDITION - MUSCLE WOUNDS + WOUND_SERIES_WIRE_PIERCE_ELECTRICAL_DAMAGE, // NOVA EDIT ADDITION - SYNTH WOUNDS ), )) @@ -296,7 +298,7 @@ GLOBAL_LIST_INIT(wounding_types_to_series, list( GLOBAL_LIST_INIT(biotypes_to_scar_file, list( "[BIO_FLESH]" = FLESH_SCAR_FILE, "[BIO_BONE]" = BONE_SCAR_FILE, - "[BIO_METAL]" = METAL_SCAR_FILE // SKYRAT EDIT ADDITION - METAL SCARS (see robotic_blunt.dm) + "[BIO_METAL]" = METAL_SCAR_FILE // NOVA EDIT ADDITION - METAL SCARS (see robotic_blunt.dm) )) // ~burn wound infection defines diff --git a/code/__DEFINES/zoom.dm b/code/__DEFINES/zoom.dm new file mode 100644 index 00000000000000..590e0c47500e6c --- /dev/null +++ b/code/__DEFINES/zoom.dm @@ -0,0 +1,6 @@ +///How the scope component is toggled. This one is done by right-clicking. +#define ZOOM_METHOD_RIGHT_CLICK 1 +/// Wielding the object with both hands toggles the zoom. Requires the two-handed component to work. +#define ZOOM_METHOD_WIELD 2 +/// Activated by clicking an item action button specified by the `item_action_type` var. +#define ZOOM_METHOD_ITEM_ACTION 3 diff --git a/code/__DEFINES/~skyrat_defines/DNA.dm b/code/__DEFINES/~nova_defines/DNA.dm similarity index 95% rename from code/__DEFINES/~skyrat_defines/DNA.dm rename to code/__DEFINES/~nova_defines/DNA.dm index 8e9c220c9e101d..5ea728ac72422e 100644 --- a/code/__DEFINES/~skyrat_defines/DNA.dm +++ b/code/__DEFINES/~nova_defines/DNA.dm @@ -6,10 +6,6 @@ // Defines for whether an accessory should have one or three colors to choose for #define USE_ONE_COLOR 31 #define USE_MATRIXED_COLORS 32 -// Defines for some extra inherent traits -#define TRAIT_REVIVES_BY_HEALING "trait_revives_by_healing" -#define TRAIT_ROBOTIC_DNA_ORGANS "trait_robotic_dna_organs" -//Also.. yes for some reason specie traits and accessory defines are together //Defines for processing reagents, for synths, IPC's and Vox #define PROCESS_ORGANIC 1 //Only processes reagents with "ORGANIC" or "ORGANIC | SYNTHETIC" @@ -37,6 +33,10 @@ #define MUTANT_INDEX_COLOR_LIST "color" #define MUTANT_INDEX_EMISSIVE_LIST "emissive" +// Defines for default mutant bodyparts indexes +#define MUTANTPART_NAME 1 +#define MUTANTPART_CAN_RANDOMIZE 2 + // Defines for markings indexes #define MARKING_INDEX_COLOR 1 #define MARKING_INDEX_EMISSIVE 2 diff --git a/code/__DEFINES/~skyrat_defines/_HELPERS/atmos_mapping_helpers.dm b/code/__DEFINES/~nova_defines/_HELPERS/atmos_mapping_helpers.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/_HELPERS/atmos_mapping_helpers.dm rename to code/__DEFINES/~nova_defines/_HELPERS/atmos_mapping_helpers.dm diff --git a/code/__DEFINES/~skyrat_defines/_HELPERS/lighting.dm b/code/__DEFINES/~nova_defines/_HELPERS/lighting.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/_HELPERS/lighting.dm rename to code/__DEFINES/~nova_defines/_HELPERS/lighting.dm diff --git a/code/__DEFINES/~skyrat_defines/_HELPERS/offset_index.dm b/code/__DEFINES/~nova_defines/_HELPERS/offset_index.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/_HELPERS/offset_index.dm rename to code/__DEFINES/~nova_defines/_HELPERS/offset_index.dm diff --git a/code/__DEFINES/~nova_defines/_globalvars/bitfields.dm b/code/__DEFINES/~nova_defines/_globalvars/bitfields.dm new file mode 100644 index 00000000000000..3e1a777982af9a --- /dev/null +++ b/code/__DEFINES/~nova_defines/_globalvars/bitfields.dm @@ -0,0 +1,7 @@ +DEFINE_BITFIELD(obj_flags_nova, list( + "ANVIL_REPAIR" = ANVIL_REPAIR, +)) + +DEFINE_BITFIELD(chemical_flags_nova, list( + "REAGENT_BLOOD_REGENERATING" = REAGENT_BLOOD_REGENERATING, +)) diff --git a/code/__DEFINES/~skyrat_defines/_globalvars/lists/mapping.dm b/code/__DEFINES/~nova_defines/_globalvars/lists/mapping.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/_globalvars/lists/mapping.dm rename to code/__DEFINES/~nova_defines/_globalvars/lists/mapping.dm diff --git a/code/__DEFINES/~skyrat_defines/_globalvars/logging.dm b/code/__DEFINES/~nova_defines/_globalvars/logging.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/_globalvars/logging.dm rename to code/__DEFINES/~nova_defines/_globalvars/logging.dm diff --git a/code/__DEFINES/~skyrat_defines/_organ_defines.dm b/code/__DEFINES/~nova_defines/_organ_defines.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/_organ_defines.dm rename to code/__DEFINES/~nova_defines/_organ_defines.dm diff --git a/code/__DEFINES/~skyrat_defines/access.dm b/code/__DEFINES/~nova_defines/access.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/access.dm rename to code/__DEFINES/~nova_defines/access.dm diff --git a/code/__DEFINES/~skyrat_defines/actionspeed_modification.dm b/code/__DEFINES/~nova_defines/actionspeed_modification.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/actionspeed_modification.dm rename to code/__DEFINES/~nova_defines/actionspeed_modification.dm diff --git a/code/__DEFINES/~skyrat_defines/admin.dm b/code/__DEFINES/~nova_defines/admin.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/admin.dm rename to code/__DEFINES/~nova_defines/admin.dm diff --git a/code/__DEFINES/~skyrat_defines/airlock.dm b/code/__DEFINES/~nova_defines/airlock.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/airlock.dm rename to code/__DEFINES/~nova_defines/airlock.dm diff --git a/code/__DEFINES/~skyrat_defines/ammo_defines.dm b/code/__DEFINES/~nova_defines/ammo_defines.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/ammo_defines.dm rename to code/__DEFINES/~nova_defines/ammo_defines.dm diff --git a/code/__DEFINES/~skyrat_defines/antagonists.dm b/code/__DEFINES/~nova_defines/antagonists.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/antagonists.dm rename to code/__DEFINES/~nova_defines/antagonists.dm diff --git a/code/__DEFINES/~skyrat_defines/apc_defines.dm b/code/__DEFINES/~nova_defines/apc_defines.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/apc_defines.dm rename to code/__DEFINES/~nova_defines/apc_defines.dm diff --git a/code/__DEFINES/~skyrat_defines/armaments.dm b/code/__DEFINES/~nova_defines/armaments.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/armaments.dm rename to code/__DEFINES/~nova_defines/armaments.dm diff --git a/code/__DEFINES/~nova_defines/armor_defines.dm b/code/__DEFINES/~nova_defines/armor_defines.dm new file mode 100644 index 00000000000000..bfb239621e2a7c --- /dev/null +++ b/code/__DEFINES/~nova_defines/armor_defines.dm @@ -0,0 +1,8 @@ +#define ARMOR_LEVEL_TINY 10 +#define ARMOR_LEVEL_WEAK 30 +#define ARMOR_LEVEL_MID 50 +#define ARMOR_LEVEL_INSANE 90 + +#define WOUND_ARMOR_WEAK 10 +#define WOUND_ARMOR_STANDARD 20 +#define WOUND_ARMOR_HIGH 30 diff --git a/code/__DEFINES/~skyrat_defines/atom_hud.dm b/code/__DEFINES/~nova_defines/atom_hud.dm similarity index 94% rename from code/__DEFINES/~skyrat_defines/atom_hud.dm rename to code/__DEFINES/~nova_defines/atom_hud.dm index 32862bfc7e44fc..f6b8c5bb1bf354 100644 --- a/code/__DEFINES/~skyrat_defines/atom_hud.dm +++ b/code/__DEFINES/~nova_defines/atom_hud.dm @@ -1,13 +1,12 @@ //SR Security #define SECHUD_CORRECTIONS_OFFICER "hudcorrectionsofficer" -#define SECHUD_SECURITY_MEDIC "hudsecuritymedic" //SR Departmental Guards #define SECHUD_ENGINEERING_GUARD "hudengineeringguard" #define SECHUD_ORDERLY "hudorderly" #define SECHUD_CUSTOMS_AGENT "hudcustomsagent" #define SECHUD_BOUNCER "hudbouncer" #define SECHUD_SCIENCE_GUARD "hudscienceguard" -//SR Nanotrasen +//SR Symphionia #define SECHUD_BLUESHIELD "hudblueshield" #define SECHUD_NT_CONSULTANT "hudnanotrasenconsultant" //SR DS2 diff --git a/code/__DEFINES/~skyrat_defines/augment.dm b/code/__DEFINES/~nova_defines/augment.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/augment.dm rename to code/__DEFINES/~nova_defines/augment.dm diff --git a/code/__DEFINES/~skyrat_defines/automapper.dm b/code/__DEFINES/~nova_defines/automapper.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/automapper.dm rename to code/__DEFINES/~nova_defines/automapper.dm diff --git a/code/__DEFINES/~skyrat_defines/banning.dm b/code/__DEFINES/~nova_defines/banning.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/banning.dm rename to code/__DEFINES/~nova_defines/banning.dm diff --git a/code/__DEFINES/~nova_defines/barsigns.dm b/code/__DEFINES/~nova_defines/barsigns.dm new file mode 100644 index 00000000000000..37e40b375ef880 --- /dev/null +++ b/code/__DEFINES/~nova_defines/barsigns.dm @@ -0,0 +1,2 @@ +#define SKYRAT_BARSIGN_FILE 'modular_nova/modules/barsigns/icons/barsigns.dmi' +#define SKYRAT_LARGE_BARSIGN_FILE 'modular_nova/modules/barsigns/icons/barsigns96x96.dmi' diff --git a/code/__DEFINES/~skyrat_defines/baton_upgrades.dm b/code/__DEFINES/~nova_defines/baton_upgrades.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/baton_upgrades.dm rename to code/__DEFINES/~nova_defines/baton_upgrades.dm diff --git a/code/__DEFINES/~skyrat_defines/cargo_import_companies.dm b/code/__DEFINES/~nova_defines/cargo_import_companies.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/cargo_import_companies.dm rename to code/__DEFINES/~nova_defines/cargo_import_companies.dm diff --git a/code/__DEFINES/~skyrat_defines/cells.dm b/code/__DEFINES/~nova_defines/cells.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/cells.dm rename to code/__DEFINES/~nova_defines/cells.dm diff --git a/code/__DEFINES/~skyrat_defines/chat.dm b/code/__DEFINES/~nova_defines/chat.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/chat.dm rename to code/__DEFINES/~nova_defines/chat.dm diff --git a/code/__DEFINES/~skyrat_defines/clock_cult.dm b/code/__DEFINES/~nova_defines/clock_cult.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/clock_cult.dm rename to code/__DEFINES/~nova_defines/clock_cult.dm diff --git a/code/__DEFINES/~nova_defines/colony_fabricator_misc.dm b/code/__DEFINES/~nova_defines/colony_fabricator_misc.dm new file mode 100644 index 00000000000000..0ebd9a14240951 --- /dev/null +++ b/code/__DEFINES/~nova_defines/colony_fabricator_misc.dm @@ -0,0 +1,40 @@ +/// Category for clothing in the organics printer +#define RND_CATEGORY_AKHTER_CLOTHING "Clothing" +/// Category for equipment like belts and bags in the organics printer +#define RND_CATEGORY_AKHTER_EQUIPMENT "Equipment" +/// Category for medical items in the organics printer +#define RND_CATEGORY_AKHTER_MEDICAL "Emergency Medical" +/// Category for resources made by the organics printer +#define RND_CATEGORY_AKHTER_RESOURCES "Resources" + +/// Category for ingredients in the ration printer +#define RND_CATEGORY_AKHTER_FOODRICATOR_INGREDIENTS "Ingredients" +/// Category for bags and containers of reagents in the ration printer +#define RND_CATEGORY_AKHTER_FOODRICATOR_BAGS "Containers" +/// Category for snacks in the ration printer +#define RND_CATEGORY_AKHTER_FOODRICATOR_SNACKS "Luxuries" +/// Category for utensils and whatnot in the ration printer +#define RND_CATEGORY_AKHTER_FOODRICATOR_UTENSILS "Utensils" +/// Category for the seeds the organics printer can make +#define RND_CATEGORY_AKHTER_SEEDS "Synthesized Seeds" + +/// The items the frontier clothing can hold +GLOBAL_LIST_INIT(colonist_suit_allowed, list( + /obj/item/ammo_box, + /obj/item/ammo_casing, + /obj/item/flashlight, + /obj/item/gun, + /obj/item/melee, + /obj/item/tank/internals, + /obj/item/storage/belt/holster, + /obj/item/construction, + /obj/item/fireaxe, + /obj/item/pipe_dispenser, + /obj/item/storage/bag, + /obj/item/pickaxe, + /obj/item/resonator, + /obj/item/t_scanner, + /obj/item/analyzer, + /obj/item/storage/medkit, + /obj/item/fireaxe/metal_h2_axe, +)) diff --git a/code/__DEFINES/~nova_defines/colors.dm b/code/__DEFINES/~nova_defines/colors.dm new file mode 100644 index 00000000000000..1703fe1541304d --- /dev/null +++ b/code/__DEFINES/~nova_defines/colors.dm @@ -0,0 +1,9 @@ +#define LIGHT_COLOR_CLOCKWORK "#BE8700" +#define COLOR_SOLFED_GOLD "#FFD900" +#define LIGHT_COLOR_YELLOW "#E1E17D" +#define COLOR_NRI_POLICE_BLUE "#1f3347" +#define COLOR_NRI_POLICE_SILVER "#c0c0c0" + +GLOBAL_LIST_INIT(chat_colors_by_mob_name, list( + "Unknown" = list("#ffffff", "#d8d8d8"), +)) diff --git a/code/__DEFINES/~skyrat_defines/combat.dm b/code/__DEFINES/~nova_defines/combat.dm similarity index 98% rename from code/__DEFINES/~skyrat_defines/combat.dm rename to code/__DEFINES/~nova_defines/combat.dm index 54659715cc3ca3..5137aa81376ad5 100644 --- a/code/__DEFINES/~skyrat_defines/combat.dm +++ b/code/__DEFINES/~nova_defines/combat.dm @@ -1,4 +1,3 @@ -#define PUNCH_STAMINA_MULTIPLIER 2.6 //Stamina threshold from which resisting a grab becomes hard #define STAMINA_THRESHOLD_HARD_RESIST 80 @@ -24,6 +23,7 @@ // Damage modifiers #define OVERSIZED_HARM_DAMAGE_BONUS 5 /// Those with the oversized trait do 5 more damage. +#define OVERSIZED_KICK_EFFECTIVENESS_BONUS 5 /// Increased unarmed_effectiveness/stun threshold on oversized kicks. #define FILTER_STAMINACRIT filter(type="drop_shadow", x=0, y=0, size=-3, color="#04080F") diff --git a/code/__DEFINES/~skyrat_defines/computers.dm b/code/__DEFINES/~nova_defines/computers.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/computers.dm rename to code/__DEFINES/~nova_defines/computers.dm diff --git a/code/__DEFINES/~skyrat_defines/construction.dm b/code/__DEFINES/~nova_defines/construction.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/construction.dm rename to code/__DEFINES/~nova_defines/construction.dm diff --git a/code/__DEFINES/~skyrat_defines/culture.dm b/code/__DEFINES/~nova_defines/culture.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/culture.dm rename to code/__DEFINES/~nova_defines/culture.dm diff --git a/code/__DEFINES/~skyrat_defines/economy.dm b/code/__DEFINES/~nova_defines/economy.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/economy.dm rename to code/__DEFINES/~nova_defines/economy.dm diff --git a/code/__DEFINES/~skyrat_defines/events.dm b/code/__DEFINES/~nova_defines/events.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/events.dm rename to code/__DEFINES/~nova_defines/events.dm diff --git a/code/__DEFINES/~skyrat_defines/examine_defines.dm b/code/__DEFINES/~nova_defines/examine_defines.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/examine_defines.dm rename to code/__DEFINES/~nova_defines/examine_defines.dm diff --git a/code/__DEFINES/~skyrat_defines/faction.dm b/code/__DEFINES/~nova_defines/faction.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/faction.dm rename to code/__DEFINES/~nova_defines/faction.dm diff --git a/code/__DEFINES/~skyrat_defines/factions.dm b/code/__DEFINES/~nova_defines/factions.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/factions.dm rename to code/__DEFINES/~nova_defines/factions.dm diff --git a/code/__DEFINES/~skyrat_defines/flavor_defines.dm b/code/__DEFINES/~nova_defines/flavor_defines.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/flavor_defines.dm rename to code/__DEFINES/~nova_defines/flavor_defines.dm diff --git a/code/__DEFINES/~skyrat_defines/game_options.dm b/code/__DEFINES/~nova_defines/game_options.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/game_options.dm rename to code/__DEFINES/~nova_defines/game_options.dm diff --git a/code/__DEFINES/~skyrat_defines/hud.dm b/code/__DEFINES/~nova_defines/hud.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/hud.dm rename to code/__DEFINES/~nova_defines/hud.dm diff --git a/code/__DEFINES/~skyrat_defines/id_cards.dm b/code/__DEFINES/~nova_defines/id_cards.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/id_cards.dm rename to code/__DEFINES/~nova_defines/id_cards.dm diff --git a/code/__DEFINES/~skyrat_defines/integrated_electronics.dm b/code/__DEFINES/~nova_defines/integrated_electronics.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/integrated_electronics.dm rename to code/__DEFINES/~nova_defines/integrated_electronics.dm diff --git a/code/__DEFINES/~skyrat_defines/interactions.dm b/code/__DEFINES/~nova_defines/interactions.dm similarity index 89% rename from code/__DEFINES/~skyrat_defines/interactions.dm rename to code/__DEFINES/~nova_defines/interactions.dm index dc6baf23a9c83b..0fa9890a84c1fa 100644 --- a/code/__DEFINES/~skyrat_defines/interactions.dm +++ b/code/__DEFINES/~nova_defines/interactions.dm @@ -1,4 +1,4 @@ -#define INTERACTION_JSON_FOLDER "config/skyrat/interactions/" +#define INTERACTION_JSON_FOLDER "config/nova/interactions/" // Special values #define INTERACTION_MAX_CHAR 255 diff --git a/code/__DEFINES/~skyrat_defines/inventory.dm b/code/__DEFINES/~nova_defines/inventory.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/inventory.dm rename to code/__DEFINES/~nova_defines/inventory.dm diff --git a/code/__DEFINES/~nova_defines/jobs.dm b/code/__DEFINES/~nova_defines/jobs.dm new file mode 100644 index 00000000000000..7aa6486c9d569a --- /dev/null +++ b/code/__DEFINES/~nova_defines/jobs.dm @@ -0,0 +1,16 @@ +// Just keeping this easy to maintain in the future. +#define JOB_NOT_VETERAN (JOB_UNAVAILABLE_AGE + 1) +#define JOB_UNAVAILABLE_QUIRK (JOB_NOT_VETERAN + 1) +#define JOB_UNAVAILABLE_SPECIES (JOB_UNAVAILABLE_QUIRK + 1) +#define JOB_UNAVAILABLE_LANGUAGE (JOB_UNAVAILABLE_SPECIES + 1) +#define JOB_UNAVAILABLE_FLAVOUR (JOB_UNAVAILABLE_LANGUAGE + 1) +#define JOB_UNAVAILABLE_AUGMENT (JOB_UNAVAILABLE_FLAVOUR + 1) + +#define SEC_RESTRICTED_QUIRKS "Blind" = TRUE, "Brain Tumor" = TRUE, "Deaf" = TRUE, "Paraplegic" = TRUE, "Hemiplegic" = TRUE, "Mute" = TRUE, "Foreigner" = TRUE, "Pacifist" = TRUE, "No Guns" = TRUE, "Illiterate" = TRUE, "Nerve Stapled" = TRUE +#define HEAD_RESTRICTED_QUIRKS "Blind" = TRUE, "Deaf" = TRUE, "Mute" = TRUE, "Foreigner" = TRUE, "Brain Tumor" = TRUE, "Illiterate" = TRUE +#define GUARD_RESTRICTED_QUIRKS "Blind" = TRUE, "Deaf" = TRUE, "Foreigner" = TRUE, "Pacifist" = TRUE, "Nerve Stapled" = TRUE + +#define RESTRICTED_QUIRKS_EXCEPTIONS list("Mute" = "Signer") + +#define HEAD_RESTRICTED_AUGMENTS /obj/item/bodypart/arm/left/self_destruct, /obj/item/bodypart/arm/right/self_destruct, /obj/item/bodypart/leg/left/self_destruct, /obj/item/bodypart/leg/right/self_destruct +#define SEC_RESTRICTED_AUGMENTS /obj/item/bodypart/arm/left/self_destruct, /obj/item/bodypart/arm/right/self_destruct, /obj/item/bodypart/leg/left/self_destruct, /obj/item/bodypart/leg/right/self_destruct diff --git a/code/__DEFINES/~skyrat_defines/keybindings.dm b/code/__DEFINES/~nova_defines/keybindings.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/keybindings.dm rename to code/__DEFINES/~nova_defines/keybindings.dm diff --git a/code/__DEFINES/~skyrat_defines/language.dm b/code/__DEFINES/~nova_defines/language.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/language.dm rename to code/__DEFINES/~nova_defines/language.dm diff --git a/code/__DEFINES/~skyrat_defines/lazy_templates.dm b/code/__DEFINES/~nova_defines/lazy_templates.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/lazy_templates.dm rename to code/__DEFINES/~nova_defines/lazy_templates.dm diff --git a/code/__DEFINES/~nova_defines/lewd_defines.dm b/code/__DEFINES/~nova_defines/lewd_defines.dm new file mode 100644 index 00000000000000..7674131b090031 --- /dev/null +++ b/code/__DEFINES/~nova_defines/lewd_defines.dm @@ -0,0 +1,32 @@ +/// To prevent an issue with stupidly low negative values. +#define AROUSAL_MINIMUM 0 +#define AROUSAL_MINIMUM_DETECTABLE 10 +#define AROUSAL_LOW 30 +#define AROUSAL_MEDIUM 70 +#define AROUSAL_HIGH 85 +#define AROUSAL_AUTO_CLIMAX_THRESHOLD 90 +#define AROUSAL_LIMIT 100 + +#define REQUIRE_GENITAL_EXPOSED 1 +#define REQUIRE_GENITAL_UNEXPOSED 2 +#define REQUIRE_GENITAL_ANY 3 + +#define BREAST_SIZE_FLATCHESTED "Flatchested" +#define BREAST_SIZE_A "A" +#define BREAST_SIZE_B "B" +#define BREAST_SIZE_C "C" +#define BREAST_SIZE_D "D" +// Ouch, my back. +#define BREAST_SIZE_E "E" +#define BREAST_SIZE_F "F" +#define BREAST_SIZE_G "G" +#define BREAST_SIZE_H "H" +#define BREAST_SIZE_I "I" +#define BREAST_SIZE_J "J" +#define BREAST_SIZE_K "K" +#define BREAST_SIZE_L "L" +#define BREAST_SIZE_M "M" +#define BREAST_SIZE_N "N" +#define BREAST_SIZE_O "O" +#define BREAST_SIZE_P "P" +#define BREAST_SIZE_BEYOND_MEASUREMENT "beyond measurement" diff --git a/code/__DEFINES/~skyrat_defines/liquids.dm b/code/__DEFINES/~nova_defines/liquids.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/liquids.dm rename to code/__DEFINES/~nova_defines/liquids.dm diff --git a/code/__DEFINES/~skyrat_defines/living.dm b/code/__DEFINES/~nova_defines/living.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/living.dm rename to code/__DEFINES/~nova_defines/living.dm diff --git a/code/__DEFINES/~skyrat_defines/loadouts.dm b/code/__DEFINES/~nova_defines/loadouts.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/loadouts.dm rename to code/__DEFINES/~nova_defines/loadouts.dm diff --git a/code/__DEFINES/~skyrat_defines/logging.dm b/code/__DEFINES/~nova_defines/logging.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/logging.dm rename to code/__DEFINES/~nova_defines/logging.dm diff --git a/code/__DEFINES/~skyrat_defines/manufacturer_strings.dm b/code/__DEFINES/~nova_defines/manufacturer_strings.dm similarity index 82% rename from code/__DEFINES/~skyrat_defines/manufacturer_strings.dm rename to code/__DEFINES/~nova_defines/manufacturer_strings.dm index 70c1ba9674dd2a..c0f8116e86fac0 100644 --- a/code/__DEFINES/~skyrat_defines/manufacturer_strings.dm +++ b/code/__DEFINES/~nova_defines/manufacturer_strings.dm @@ -3,7 +3,7 @@ #define COMPANY_DONK "It has a [span_green("Donk Corporation")] label visible on it." #define COMPANY_BOLT "It has [span_yellow("Bolt Fabrications")] stamped onto it." -#define COMPANY_NANOTRASEN "It has [span_blue("Nanotrasen Armories")] etched into it." +#define COMPANY_NANOTRASEN "It has [span_blue("Symphionia Armories")] etched into it." #define COMPANY_CARWO "It has a small [span_cyan("four pointed star")] alongside [span_cyan("Carwo Defense Systems")] etched into it." #define COMPANY_TRAPPISTE "It has a small [span_red("pattern of five squares")] alongside [span_red("Trappiste Fabriek")] etched into it." @@ -14,7 +14,7 @@ #define COMPANY_ALLSTAR "It has [span_red("Allstar Lasers Inc.")] stamped onto it." #define COMPANY_MICRON "It has [span_cyan("Micron Control Sys.")] cut into it." -#define COMPANY_IZHEVSK "It has [span_brown("Izhevsk Coalition")] cut into it." +#define COMPANY_SZOT "It has a small [span_engradio("three point crown")] alongside [span_engradio("Szot Dynamica")] cut into it." #define COMPANY_TKACH "It has [span_robot("Tkach Design Bureau")] stamped onto it." #define COMPANY_SAKHNO "It has [span_green("Sakhno Concern")] stamped onto it." #define COMPANY_XHIHAO "It has [span_purple("Xhihao Light Arms")] etched into it." @@ -22,5 +22,6 @@ #define COMPANY_ABDUCTOR "It has [span_abductor("✌︎︎♌︎︎♎︎︎◆︎︎♍︎︎⧫︎︎❄︎♏︎♍︎♒︎")] engraved into it." #define COMPANY_FRONTIER "It has a small label with [span_engradio("Akhter Company Frontier Equipment")] printed on it, alongside various xerxian proof-marks." +#define COMPANY_KAHRAMAN "It has a [span_red("red label")] with [span_red("K - A - S")] printed on it, alongside various xerxian proof-marks." #define COMPANY_REMOVED "It has had [span_grey("all identifying marks scrubbed off")]." diff --git a/code/__DEFINES/~skyrat_defines/mapping.dm b/code/__DEFINES/~nova_defines/mapping.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/mapping.dm rename to code/__DEFINES/~nova_defines/mapping.dm diff --git a/code/__DEFINES/~skyrat_defines/medical_defines.dm b/code/__DEFINES/~nova_defines/medical_defines.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/medical_defines.dm rename to code/__DEFINES/~nova_defines/medical_defines.dm diff --git a/code/__DEFINES/~nova_defines/mobs.dm b/code/__DEFINES/~nova_defines/mobs.dm new file mode 100644 index 00000000000000..2943a1b5e3c8d7 --- /dev/null +++ b/code/__DEFINES/~nova_defines/mobs.dm @@ -0,0 +1,34 @@ +#define BLOOD_VOLUME_OVERSIZED 1120 + +#define PULL_OVERSIZED_SLOWDOWN 2 + +#define HUMAN_HEALTH_MODIFIER 1.35 + +#define HUMAN_MAXHEALTH MAX_LIVING_HEALTH * HUMAN_HEALTH_MODIFIER + +#define UNDERWEAR_HIDE_SOCKS (1<<0) +#define UNDERWEAR_HIDE_SHIRT (1<<1) +#define UNDERWEAR_HIDE_UNDIES (1<<2) +#define UNDERWEAR_HIDE_BRA (1<<3) + +//Appends to the bottom of Defib fails - DNR TRAIT +#define DEFIB_FAIL_DNR (1<<11) + +///Defines for icons used for modular bodyparts, created to make it easier to relocate the module or files if necessary. +#define BODYPART_ICON_HUMAN 'modular_nova/modules/bodyparts/icons/human_parts_greyscale.dmi' +#define BODYPART_ICON_MAMMAL 'modular_nova/modules/bodyparts/icons/mammal_parts_greyscale.dmi' +#define BODYPART_ICON_AKULA 'modular_nova/modules/bodyparts/icons/akula_parts_greyscale.dmi' +#define BODYPART_ICON_AQUATIC 'modular_nova/modules/bodyparts/icons/aquatic_parts_greyscale.dmi' +#define BODYPART_ICON_GHOUL 'modular_nova/modules/bodyparts/icons/ghoul_bodyparts.dmi' +#define BODYPART_ICON_INSECT 'modular_nova/modules/bodyparts/icons/insect_parts_greyscale.dmi' +#define BODYPART_ICON_LIZARD 'modular_nova/modules/bodyparts/icons/lizard_parts_greyscale.dmi' +#define BODYPART_ICON_MOTH 'modular_nova/modules/bodyparts/icons/moth_parts_greyscale.dmi' +#define BODYPART_ICON_ROUNDSTARTSLIME 'modular_nova/modules/bodyparts/icons/slime_parts_greyscale.dmi' +#define BODYPART_ICON_SKRELL 'modular_nova/modules/bodyparts/icons/skrell_parts_greyscale.dmi' +#define BODYPART_ICON_TAUR 'modular_nova/modules/bodyparts/icons/taur_invisible_legs.dmi' +#define BODYPART_ICON_TESHARI 'modular_nova/modules/bodyparts/icons/teshari_parts_greyscale.dmi' +#define BODYPART_ICON_VOX 'modular_nova/modules/bodyparts/icons/vox_parts_greyscale.dmi' +#define BODYPART_ICON_XENO 'modular_nova/modules/bodyparts/icons/xeno_parts_greyscale.dmi' +#define BODYPART_ICON_SYNTHMAMMAL 'modular_nova/modules/bodyparts/icons/synthmammal_parts_greyscale.dmi' +#define BODYPART_ICON_IPC 'modular_nova/modules/bodyparts/icons/ipc_parts.dmi' +#define BODYPART_ICON_SYNTHLIZARD 'modular_nova/modules/bodyparts/icons/synthliz_parts_greyscale.dmi' diff --git a/code/__DEFINES/~skyrat_defines/nifsofts.dm b/code/__DEFINES/~nova_defines/nifsofts.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/nifsofts.dm rename to code/__DEFINES/~nova_defines/nifsofts.dm diff --git a/code/__DEFINES/~skyrat_defines/obj_flags.dm b/code/__DEFINES/~nova_defines/obj_flags.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/obj_flags.dm rename to code/__DEFINES/~nova_defines/obj_flags.dm diff --git a/code/__DEFINES/~skyrat_defines/opposing_force_defines.dm b/code/__DEFINES/~nova_defines/opposing_force_defines.dm similarity index 84% rename from code/__DEFINES/~skyrat_defines/opposing_force_defines.dm rename to code/__DEFINES/~nova_defines/opposing_force_defines.dm index 60030663f7bb6c..c0c67e2a11d6ed 100644 --- a/code/__DEFINES/~skyrat_defines/opposing_force_defines.dm +++ b/code/__DEFINES/~nova_defines/opposing_force_defines.dm @@ -61,17 +61,19 @@ // Melee #define OPFOR_EQUIPMENT_CATEGORY_MELEE "13. Melee Weapons" #define OPFOR_EQUIPMENT_CATEGORY_MELEE_STEALTH "14. Stealthy Melee Weapons" +// Medical items +#define OPFOR_EQUIPMENT_CATEGORY_MEDICAL "15. Medical Items" // Gadgets -#define OPFOR_EQUIPMENT_CATEGORY_GADGET "15. Gadgets" -#define OPFOR_EQUIPMENT_CATEGORY_GADGET_STEALTH "16. Stealthy Gadgets" +#define OPFOR_EQUIPMENT_CATEGORY_GADGET "16. Gadgets" +#define OPFOR_EQUIPMENT_CATEGORY_GADGET_STEALTH "17. Stealthy Gadgets" // Bombs -#define OPFOR_EQUIPMENT_CATEGORY_BOMB_CHEM "17. Chemical Grenades" -#define OPFOR_EQUIPMENT_CATEGORY_BOMB_PAYLOAD "18. Dirty Bombs" +#define OPFOR_EQUIPMENT_CATEGORY_BOMB_CHEM "18. Chemical Grenades" +#define OPFOR_EQUIPMENT_CATEGORY_BOMB_PAYLOAD "19. Dirty Bombs" // Spells and scrolls (martial arts) -#define OPFOR_EQUIPMENT_CATEGORY_SPELLS "19. Spells" -#define OPFOR_EQUIPMENT_CATEGORY_SCROLLS "20. Martial Art Scrolls" +#define OPFOR_EQUIPMENT_CATEGORY_SPELLS "20. Spells" +#define OPFOR_EQUIPMENT_CATEGORY_SCROLLS "21. Martial Art Scrolls" // Language and biology -#define OPFOR_EQUIPMENT_CATEGORY_LANGUAGE "21. Language" -#define OPFOR_EQUIPMENT_CATEGORY_ORGANS "22. Organs" +#define OPFOR_EQUIPMENT_CATEGORY_LANGUAGE "22. Language" +#define OPFOR_EQUIPMENT_CATEGORY_ORGANS "23. Organs" // Category for uncategorized items #define OPFOR_EQUIPMENT_CATEGORY_OTHER "Other" diff --git a/code/__DEFINES/~skyrat_defines/pinpointers.dm b/code/__DEFINES/~nova_defines/pinpointers.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/pinpointers.dm rename to code/__DEFINES/~nova_defines/pinpointers.dm diff --git a/code/__DEFINES/~skyrat_defines/pollution.dm b/code/__DEFINES/~nova_defines/pollution.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/pollution.dm rename to code/__DEFINES/~nova_defines/pollution.dm diff --git a/code/__DEFINES/~skyrat_defines/preferences.dm b/code/__DEFINES/~nova_defines/preferences.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/preferences.dm rename to code/__DEFINES/~nova_defines/preferences.dm diff --git a/code/__DEFINES/~nova_defines/projectiles.dm b/code/__DEFINES/~nova_defines/projectiles.dm new file mode 100644 index 00000000000000..c8f985ffa0417a --- /dev/null +++ b/code/__DEFINES/~nova_defines/projectiles.dm @@ -0,0 +1,22 @@ +/// The caliber used by the Oldarms 'Mk.11.4 rifle', designed to be worse .223. +#define CALIBER_223S ".223 Stinger" + +/// Caliber used by the giant anti materiel rifle in guncargo +#define CALIBER_60STRELA ".60 Strela" + +/// CIN pistol caliber +#define CALIBER_CESARZOWA ".27-54 Cesarzowa" + +/// Standard Sol rifle caliber +#define CALIBER_SOL40LONG ".40 Sol Long" +/// Standard Sol pistol caliber +#define CALIBER_SOL35SHORT ".35 Sol Short" + +/// Basically 20mm grenades, I'd be concerned if a grenade launcher didn't use this +#define CALIBER_980TYDHOUER ".980 Tydhouer" + +/// Large caliber pistol round for Sol hand cannons +#define CALIBER_585TRAPPISTE ".585 Trappiste" + +/// Caliber used by the pepperball gun +#define CALIBER_PEPPERBALL "pepperball" diff --git a/code/__DEFINES/~nova_defines/quirks.dm b/code/__DEFINES/~nova_defines/quirks.dm new file mode 100644 index 00000000000000..7acc8b3e9b1a3a --- /dev/null +++ b/code/__DEFINES/~nova_defines/quirks.dm @@ -0,0 +1,27 @@ +#define DEATH_CONSEQUENCES_QUIRK_NAME "Death Degradation Disorder" +#define DEATH_CONSEQUENCES_QUIRK_DESC "Patient is unusually susceptable to mortality." +#define DEATH_CONSEQUENCES_BASE_DEGRADATION_ON_DEATH 50 + +/// The victim's crit threshold cannot go below this. +#define DEATH_CONSEQUENCES_MINIMUM_VICTIM_CRIT_THRESHOLD (MAX_LIVING_HEALTH) - 1 + +#define DEATH_CONSEQUENCES_REAGENT_FLAT_AMOUNT "dc_flat_reagent_amount" +#define DEATH_CONSEQUENCES_REAGENT_MULT_AMOUNT "dc_mult_reagent_amount" +#define DEATH_CONSEQUENCES_REAGENT_METABOLIZE "dc_reagent_should_be_metabolizing" +/// If true, we will check to see if this can process. Ex. things like synths wont process formaldehyde +#define DEATH_CONSEQUENCES_REAGENT_CHECK_PROCESSING_FLAGS "dc_check_reagent_processing_flags" + +/// Absolute maximum for preferences. +#define DEATH_CONSEQUENCES_MAXIMUM_THEORETICAL_DEGRADATION 10000 +#define DEATH_CONSEQUENCES_DEFAULT_MAX_DEGRADATION 500 // arbitrary +#define DEATH_CONSEQUENCES_DEFAULT_LIVING_DEGRADATION_RECOVERY 0.01 +#define DEATH_CONSEQUENCES_DEFAULT_DEGRADATION_ON_DEATH 50 + +#define DEATH_CONSEQUENCES_DEFAULT_REZADONE_DEGRADATION_REDUCTION 0.4 +#define DEATH_CONSEQUENCES_DEFAULT_STRANGE_REAGENT_DEGRADATION_REDUCTION 0.25 +#define DEATH_CONSEQUENCES_DEFAULT_EIGENSTASIUM_DEGRADATION_REDUCTION 5 // for such a rare chem, you fucking bet +#define DEATH_CONSEQUENCES_DEFAULT_SANSUFENTANYL_DEGRADATION_REDUCTION 1 + +#define DEATH_CONSEQUENCES_SHOW_HEALTH_ANALYZER_DATA "dc_show_health_analyzer_data" + +#define DEATH_CONSEQUENCES_TIME_BETWEEN_REMINDERS 5 MINUTES diff --git a/code/__DEFINES/~skyrat_defines/reagents.dm b/code/__DEFINES/~nova_defines/reagents.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/reagents.dm rename to code/__DEFINES/~nova_defines/reagents.dm diff --git a/code/__DEFINES/~skyrat_defines/research.dm b/code/__DEFINES/~nova_defines/research.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/research.dm rename to code/__DEFINES/~nova_defines/research.dm diff --git a/code/__DEFINES/~nova_defines/research_categories.dm b/code/__DEFINES/~nova_defines/research_categories.dm new file mode 100644 index 00000000000000..d1403619d7c983 --- /dev/null +++ b/code/__DEFINES/~nova_defines/research_categories.dm @@ -0,0 +1,3 @@ +#define RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_CARGO "/Cargo Cyborgs" +#define RND_CATEGORY_MECHFAB_SYNTH "/Synth" +#define RND_SUBCATEGORY_MECHFAB_SYNTH_PARTS "/Bodyparts" diff --git a/code/__DEFINES/~skyrat_defines/reskin_defines.dm b/code/__DEFINES/~nova_defines/reskin_defines.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/reskin_defines.dm rename to code/__DEFINES/~nova_defines/reskin_defines.dm diff --git a/code/__DEFINES/~nova_defines/robot_defines.dm b/code/__DEFINES/~nova_defines/robot_defines.dm new file mode 100644 index 00000000000000..e25e11091bf5ae --- /dev/null +++ b/code/__DEFINES/~nova_defines/robot_defines.dm @@ -0,0 +1,56 @@ +//Module - borgs +//Defines for dogborgs and stuff +#define ROBOT_REST_NORMAL 1 +#define ROBOT_REST_SITTING 2 +#define ROBOT_REST_BELLY_UP 3 + +#define SKIN_FEATURES "skin_features" //for the new system of borg making + +// Icon file locations for modular borg icons +#define CYBORG_ICON_STANDARD 'modular_nova/modules/borgs/icons/robots.dmi' + +#define CYBORG_ICON_MED 'modular_nova/modules/borgs/icons/robots_med.dmi' +#define CYBORG_ICON_MED_WIDE 'modular_nova/modules/borgs/icons/widerobot_med.dmi' +#define CYBORG_ICON_MED_TALL 'modular_nova/modules/borgs/icons/tallrobot_med.dmi' + +#define CYBORG_ICON_CARGO 'modular_nova/modules/borgs/icons/robots_cargo.dmi' +#define CYBORG_ICON_CARGO_WIDE 'modular_nova/modules/borgs/icons/widerobots_cargo.dmi' +#define CYBORG_ICON_CARGO_TALL 'modular_nova/modules/borgs/icons/tallrobot_cargo.dmi' + +#define CYBORG_ICON_SEC 'modular_nova/modules/borgs/icons/robots_sec.dmi' +#define CYBORG_ICON_SEC_WIDE 'modular_nova/modules/borgs/icons/widerobot_sec.dmi' +#define CYBORG_ICON_SEC_TALL 'modular_nova/modules/borgs/icons/tallrobot_sec.dmi' + +#define CYBORG_ICON_ENG 'modular_nova/modules/borgs/icons/robots_eng.dmi' +#define CYBORG_ICON_ENG_WIDE 'modular_nova/modules/borgs/icons/widerobot_eng.dmi' +#define CYBORG_ICON_ENG_TALL 'modular_nova/modules/borgs/icons/tallrobot_eng.dmi' + +#define CYBORG_ICON_PEACEKEEPER 'modular_nova/modules/borgs/icons/robots_pk.dmi' +#define CYBORG_ICON_PEACEKEEPER_WIDE 'modular_nova/modules/borgs/icons/widerobot_pk.dmi' +#define CYBORG_ICON_PEACEKEEPER_TALL 'modular_nova/modules/borgs/icons/tallrobot_pk.dmi' + +#define CYBORG_ICON_SERVICE 'modular_nova/modules/borgs/icons/robots_serv.dmi' +#define CYBORG_ICON_SERVICE_WIDE 'modular_nova/modules/borgs/icons/widerobot_serv.dmi' +#define CYBORG_ICON_SERVICE_TALL 'modular_nova/modules/borgs/icons/tallrobot_serv.dmi' + +#define CYBORG_ICON_MINING 'modular_nova/modules/borgs/icons/robots_mine.dmi' +#define CYBORG_ICON_MINING_WIDE 'modular_nova/modules/borgs/icons/widerobot_mine.dmi' +#define CYBORG_ICON_MINING_TALL 'modular_nova/modules/borgs/icons/tallrobot_mine.dmi' + +#define CYBORG_ICON_JANI 'modular_nova/modules/borgs/icons/robots_jani.dmi' +#define CYBORG_ICON_JANI_WIDE 'modular_nova/modules/borgs/icons/widerobot_jani.dmi' +#define CYBORG_ICON_JANI_TALL 'modular_nova/modules/borgs/icons/tallrobot_jani.dmi' + +#define CYBORG_ICON_SYNDIE 'modular_nova/modules/borgs/icons/robots_syndi.dmi' +#define CYBORG_ICON_SYNDIE_WIDE 'modular_nova/modules/borgs/icons/widerobot_syndi.dmi' +#define CYBORG_ICON_SYNDIE_TALL 'modular_nova/modules/borgs/icons/tallrobot_syndi.dmi' + +#define CYBORG_ICON_CLOWN 'modular_nova/modules/borgs/icons/robots_clown.dmi' +#define CYBORG_ICON_CLOWN_WIDE 'modular_nova/modules/borgs/icons/widerobot_clown.dmi' +#define CYBORG_ICON_CLOWN_TALL 'modular_nova/modules/borgs/icons/tallrobot_clown.dmi' + +#define CYBORG_ICON_NINJA 'modular_nova/modules/borgs/icons/robots_ninja.dmi' +#define CYBORG_ICON_NINJA_TALL 'modular_nova/modules/borgs/icons/tallrobot_ninja.dmi' + +/// Module is compatible with Cargo Cyborg model +#define BORG_MODEL_CARGO (BORG_MODEL_ENGINEERING<<1) diff --git a/code/__DEFINES/~skyrat_defines/say.dm b/code/__DEFINES/~nova_defines/say.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/say.dm rename to code/__DEFINES/~nova_defines/say.dm diff --git a/code/__DEFINES/~skyrat_defines/security_alerts.dm b/code/__DEFINES/~nova_defines/security_alerts.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/security_alerts.dm rename to code/__DEFINES/~nova_defines/security_alerts.dm diff --git a/code/__DEFINES/~skyrat_defines/signals.dm b/code/__DEFINES/~nova_defines/signals.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/signals.dm rename to code/__DEFINES/~nova_defines/signals.dm diff --git a/code/__DEFINES/~skyrat_defines/solfed.dm b/code/__DEFINES/~nova_defines/solfed.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/solfed.dm rename to code/__DEFINES/~nova_defines/solfed.dm diff --git a/code/__DEFINES/~skyrat_defines/sound.dm b/code/__DEFINES/~nova_defines/sound.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/sound.dm rename to code/__DEFINES/~nova_defines/sound.dm diff --git a/code/__DEFINES/~skyrat_defines/span.dm b/code/__DEFINES/~nova_defines/span.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/span.dm rename to code/__DEFINES/~nova_defines/span.dm diff --git a/code/__DEFINES/~nova_defines/species_clothing_paths.dm b/code/__DEFINES/~nova_defines/species_clothing_paths.dm new file mode 100644 index 00000000000000..64c4a5692eab7e --- /dev/null +++ b/code/__DEFINES/~nova_defines/species_clothing_paths.dm @@ -0,0 +1,30 @@ +///The dmi containing snouted masks +#define SNOUTED_MASK_FILE 'modular_nova/master_files/icons/mob/clothing/mask_muzzled.dmi' +///The dmi containing snouted hats +#define SNOUTED_HEAD_FILE 'modular_nova/master_files/icons/mob/clothing/head_muzzled.dmi' + +// Vox stuff +#define VOX_BACK_ICON 'modular_nova/master_files/icons/mob/clothing/species/vox/back.dmi' +#define VOX_BELT_ICON 'modular_nova/master_files/icons/mob/clothing/species/vox/belt.dmi' +#define VOX_EYES_ICON 'modular_nova/master_files/icons/mob/clothing/species/vox/eyes.dmi' +#define VOX_FEET_ICON 'modular_nova/master_files/icons/mob/clothing/species/vox/feet.dmi' +#define VOX_HANDS_ICON 'modular_nova/master_files/icons/mob/clothing/species/vox/hands.dmi' +#define VOX_HEAD_ICON 'modular_nova/master_files/icons/mob/clothing/head_vox.dmi' +#define VOX_MASK_ICON 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi' +#define VOX_NECK_ICON 'modular_nova/master_files/icons/mob/clothing/species/vox/neck.dmi' +#define VOX_SUIT_ICON 'modular_nova/master_files/icons/mob/clothing/species/vox/suit.dmi' +#define VOX_UNIFORM_ICON 'modular_nova/master_files/icons/mob/clothing/species/vox/uniform.dmi' +#define VOX_EARS_ICON 'modular_nova/master_files/icons/mob/clothing/species/vox/ears.dmi' + +// Vox primalis stuff +#define VOX_PRIMALIS_BACK_ICON 'modular_nova/modules/better_vox/icons/clothing/back.dmi' +#define VOX_PRIMALIS_BELT_ICON 'modular_nova/modules/better_vox/icons/clothing/belt.dmi' +#define VOX_PRIMALIS_EYES_ICON 'modular_nova/modules/better_vox/icons/clothing/eyes.dmi' +#define VOX_PRIMALIS_FEET_ICON 'modular_nova/modules/better_vox/icons/clothing/feet.dmi' +#define VOX_PRIMALIS_GLOVES_ICON 'modular_nova/modules/better_vox/icons/clothing/hands.dmi' +#define VOX_PRIMALIS_HEAD_ICON 'modular_nova/modules/better_vox/icons/clothing/head.dmi' +#define VOX_PRIMALIS_MASK_ICON 'modular_nova/modules/better_vox/icons/clothing/mask.dmi' +#define VOX_PRIMALIS_NECK_ICON 'modular_nova/modules/better_vox/icons/clothing/neck.dmi' +#define VOX_PRIMALIS_SUIT_ICON 'modular_nova/modules/better_vox/icons/clothing/suit.dmi' +#define VOX_PRIMALIS_UNIFORM_ICON 'modular_nova/modules/better_vox/icons/clothing/uniform.dmi' +#define VOX_PRIMALIS_EARS_ICON 'modular_nova/modules/better_vox/icons/clothing/ears.dmi' diff --git a/code/__DEFINES/~skyrat_defines/strippable.dm b/code/__DEFINES/~nova_defines/strippable.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/strippable.dm rename to code/__DEFINES/~nova_defines/strippable.dm diff --git a/code/__DEFINES/~skyrat_defines/synth_defines.dm b/code/__DEFINES/~nova_defines/synth_defines.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/synth_defines.dm rename to code/__DEFINES/~nova_defines/synth_defines.dm diff --git a/code/__DEFINES/~nova_defines/teshari_clothing_paths.dm b/code/__DEFINES/~nova_defines/teshari_clothing_paths.dm new file mode 100644 index 00000000000000..20034b3a59ff5d --- /dev/null +++ b/code/__DEFINES/~nova_defines/teshari_clothing_paths.dm @@ -0,0 +1,12 @@ +#define TESHARI_ACCESSORIES_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/accessories.dmi' +#define TESHARI_BACK_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/back.dmi' +#define TESHARI_BELT_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/belt.dmi' +#define TESHARI_EYES_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/eyes.dmi' +#define TESHARI_FEET_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/feet.dmi' +#define TESHARI_HANDS_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/hands.dmi' +#define TESHARI_HEAD_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/head.dmi' +#define TESHARI_MASK_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/mask.dmi' +#define TESHARI_NECK_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/neck.dmi' +#define TESHARI_SUIT_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/suit.dmi' +#define TESHARI_UNIFORM_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/uniform.dmi' +#define TESHARI_EARS_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/ears.dmi' diff --git a/code/__DEFINES/~nova_defines/text.dm b/code/__DEFINES/~nova_defines/text.dm new file mode 100644 index 00000000000000..5216f018106758 --- /dev/null +++ b/code/__DEFINES/~nova_defines/text.dm @@ -0,0 +1,4 @@ +/// File location for in-rotation news stories +#define NEWS_FILE "[global.config.directory]/nova/news_stories.json" +/// File location for out-of-rotation news stories +#define ARCHIVE_FILE "[global.config.directory]/nova/archived_stories.json" diff --git a/code/__DEFINES/~skyrat_defines/tools.dm b/code/__DEFINES/~nova_defines/tools.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/tools.dm rename to code/__DEFINES/~nova_defines/tools.dm diff --git a/code/__DEFINES/~nova_defines/traits.dm b/code/__DEFINES/~nova_defines/traits.dm new file mode 100644 index 00000000000000..f49d0bbe413348 --- /dev/null +++ b/code/__DEFINES/~nova_defines/traits.dm @@ -0,0 +1,5 @@ + +/// The minimum amount of tiles a TRAIT_SLIPPERY haver will slide on slip +#define SLIPPERY_MIN 5 +/// The maximum amount of tiles a TRAIT_SLIPPERY haver will slide on slip +#define SLIPPERY_MAX 9 diff --git a/code/__DEFINES/~nova_defines/traits/declarations.dm b/code/__DEFINES/~nova_defines/traits/declarations.dm new file mode 100644 index 00000000000000..245a42f88a5961 --- /dev/null +++ b/code/__DEFINES/~nova_defines/traits/declarations.dm @@ -0,0 +1,154 @@ +// This file contains all of the "static" define strings that tie to a trait. +// WARNING: The sections here actually matter in this file as it's tested by CI. Please do not toy with the sections." + +// BEGIN TRAIT DEFINES + +/* + *Remember to update _globalvars/traits.dm if you're adding/removing/renaming traits. + */ + +//mob traits + +// Defines for some extra traits +#define TRAIT_NO_HUSK "no_husk" +#define TRAIT_NORUNNING "norunning" // You walk! +#define TRAIT_EXCITABLE "wagwag" //Will wag when patted! +#define TRAIT_OXYIMMUNE "oxyimmune" // Immune to oxygen damage, ideally give this to all non-breathing species or bad stuff will happen +#define TRAIT_AFFECTION_AVERSION "affection_aversion" // No more dogborg licking. "Dogborg bad" is no longer a personality +#define TRAIT_PERSONALSPACE "personalspace" // Block/counter-attack ass-slaps +#define TRAIT_QUICKREFLEXES "quickreflexes" // Counters hugs and headpats +#define TRAIT_MOOD_NOEXAMINE "mood_noexamine" // Can't assess your own mood +#define TRAIT_DNR "do_not_revive" // Can't be revived without supernatural means or admin intervention +#define TRAIT_HARD_SOLES "hard_soles" // No step on glass +#define TRAIT_SENSITIVESNOUT "sensitive_snout" // Snout hurts when booped +#define TRAIT_DETECTIVE "detective_ability" //Given to the detective, if they have this, they can see syndicate special descriptions. +#define TRAIT_FREE_GHOST "free_ghost" // Can ghost and return freely with this trait +#define TRAIT_GLOVES "gloves_trait" //Traits associated with wearing gloves +#define TRAIT_LINGUIST "Linguist" // Extra language point. +#define TRAIT_GLUED_ITEM "glued-item" // This is for glued items, undroppable. Syndie glue applies this. +#define TRAIT_STICKY_FINGERS "sticky_fingers" //This is so a mob can strip items faster and picks them up after +/// This makes trait makes it so that the person cannot be infected by the zombie virus. +#define TRAIT_MUTANT_IMMUNE "mutant_immune" +#define TRAIT_HYDRA_HEADS "hydrahead" +/// Trait to spawn with a pet in a pet carrier (veteran only) +#define TRAIT_PET_OWNER "pet_owner" + +/// adds -6 quirk to negative quirks for free points. +#define TRAIT_GIFTED "gifted" + +//AdditionalEmotes *turf traits +#define TRAIT_WATER_ASPECT "water_aspect" +#define TRAIT_WEBBING_ASPECT "webbing_aspect" +#define TRAIT_FLORAL_ASPECT "floral_aspect" +#define TRAIT_ASH_ASPECT "ash_aspect" +#define TRAIT_SPARKLE_ASPECT "sparkle_aspect" + +// Trait sources +#define TRAIT_GHOSTROLE "ghostrole" // NOVA EDIT ADDITION -- Ghost Cafe Traits + +/// One can breath under water, you get me? +#define TRAIT_WATER_BREATHING "water_breathing" + +/// The trait which Akulas inherit, for their species mechanic revolving around wet_stacks +#define TRAIT_SLICK_SKIN "slick_skin" +/// The trait which is applied when a `slick skin` trait haver actually gets wet_stacks +#define TRAIT_SLIPPERY "slippery" + +/// Under the effect of a numbling agent, such as morphine, for surgery. +#define TRAIT_NUMBED "numbed" + +// felinid traits +#define TRAIT_FELINE "feline_aspect" + +// canine traits +#define TRAIT_CANINE "canine_aspect" + +// avian traits +#define TRAIT_AVIAN "avian_aspect" + +// chameleon mutation +#define TRAIT_CHAMELEON_SKIN "chameleon_skin" + +//Makes sure that people cant be cult sacrificed twice. +#define TRAIT_SACRIFICED "sacrificed" + +/// The trait that determines if someone has the oversized quirk. +#define TRAIT_OVERSIZED "trait_oversized" + +/// Cargo Loader trait +#define TRAIT_TRASHMAN "trait_trashman" + +/// Trait source for xeno innate abilities +#define TRAIT_XENO_INNATE "xeno_innate" +/// Trait source for something added BY a xeno ability +#define TRAIT_XENO_ABILITY_GIVEN "xeno_ability_given" +/// Determines if something can receive healing from a xeno +#define TRAIT_XENO_HEAL_AURA "trait_xeno_heal_aura" + +/// Trait that was granted by a reagent. +#define TRAIT_REAGENT "reagent" + +/// Trait source for anything granted by narcotics +#define TRAIT_NARCOTICS "narcotics_given" + +/// trait that lets you do flips with a style meter +#define TRAIT_STYLISH "stylish" + +/// trait that lets you do xenoarch magnification +#define TRAIT_XENOARCH_QUALIFIED "trait_xenoarch_qualified" + +/// Traits granted by glassblowing +#define TRAIT_GLASSBLOWING "glassblowing" + +/// Trait that is applied whenever someone or something is glassblowing +#define TRAIT_CURRENTLY_GLASSBLOWING "currently_glassblowing" + +/// Trait that was granted by a NIFSoft +#define TRAIT_NIFSOFT "nifsoft" + +/// Trait given to a piece of eyewear that allows the user to use NIFSoft HUDs +#define TRAIT_NIFSOFT_HUD_GRANTER "nifsoft_hud_granter" + +/// Trait given to a brain that is able to accept souls from a RSD +#define TRAIT_RSD_COMPATIBLE "rsd_compatible" + +// Defines for some extra inherent traits +#define TRAIT_REVIVES_BY_HEALING "trait_revives_by_healing" +#define TRAIT_ROBOTIC_DNA_ORGANS "trait_robotic_dna_organs" + +//Defines for model features, set in the model_features list of a robot model datum. Are they a dogborg? Is the model small? etc. +/// Cyborgs with unique sprites for when they get totally broken down. +#define TRAIT_R_UNIQUEWRECK "unique_wreck" +/// Or when tipped over. +#define TRAIT_R_UNIQUETIP "unique_tip" +/// 64x32 skins +#define TRAIT_R_WIDE "wide_borg" +/// 32x64 skins +#define TRAIT_R_TALL "tall_borg" +/// Any model small enough to reject the shrinker upgrade. +#define TRAIT_R_SMALL "small_chassis" +/// Any model that has a custom front panel +#define TRAIT_R_UNIQUEPANEL "unique_openpanel" + +// Lewd traits +#define TRAIT_MASOCHISM "masochism" +#define TRAIT_SADISM "sadism" +#define TRAIT_NEVERBONER "neverboner" +#define TRAIT_BIMBO "bimbo" +#define TRAIT_RIGGER "rigger" +#define TRAIT_ROPEBUNNY "rope bunny" +///traits gained by brain traumas, can be removed if the brain trauma is gone +#define TRAIT_APHRO "aphro" +///traits gained by quirks, cannot be removed unless the quirk itself is gone +#define TRAIT_LEWDQUIRK "lewdquirks" +///traits gained by chemicals, you get the idea +#define TRAIT_LEWDCHEM "lewdchem" + +#define TRAIT_STRAPON "strapon" + +#define TRAIT_CONDOM_BROKEN "broken" + +/// If clothing can also be damaged by piercing wound checks, instead of JUST slashes and burns +#define TRAIT_CLOTHES_DAMAGED_BY_PIERCING "clothing_damaged_by_piercing" + +// END TRAIT DEFINES diff --git a/code/__DEFINES/~skyrat_defines/turfs.dm b/code/__DEFINES/~nova_defines/turfs.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/turfs.dm rename to code/__DEFINES/~nova_defines/turfs.dm diff --git a/code/__DEFINES/~skyrat_defines/vox_defines.dm b/code/__DEFINES/~nova_defines/vox_defines.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/vox_defines.dm rename to code/__DEFINES/~nova_defines/vox_defines.dm diff --git a/code/__DEFINES/~skyrat_defines/vv.dm b/code/__DEFINES/~nova_defines/vv.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/vv.dm rename to code/__DEFINES/~nova_defines/vv.dm diff --git a/code/__DEFINES/~skyrat_defines/wounds.dm b/code/__DEFINES/~nova_defines/wounds.dm similarity index 100% rename from code/__DEFINES/~skyrat_defines/wounds.dm rename to code/__DEFINES/~nova_defines/wounds.dm diff --git a/code/__DEFINES/~skyrat_defines/_globalvars/bitfields.dm b/code/__DEFINES/~skyrat_defines/_globalvars/bitfields.dm deleted file mode 100644 index 878d62f86ed797..00000000000000 --- a/code/__DEFINES/~skyrat_defines/_globalvars/bitfields.dm +++ /dev/null @@ -1,7 +0,0 @@ -DEFINE_BITFIELD(skyrat_obj_flags, list( - "ANVIL_REPAIR" = ANVIL_REPAIR, -)) - -DEFINE_BITFIELD(chemical_flags_skyrat, list( - "REAGENT_BLOOD_REGENERATING" = REAGENT_BLOOD_REGENERATING, -)) diff --git a/code/__DEFINES/~skyrat_defines/colony_fabricator_misc.dm b/code/__DEFINES/~skyrat_defines/colony_fabricator_misc.dm deleted file mode 100644 index d9012ad0869ef6..00000000000000 --- a/code/__DEFINES/~skyrat_defines/colony_fabricator_misc.dm +++ /dev/null @@ -1,29 +0,0 @@ -/// Category for clothing in the organics printer -#define RND_CATEGORY_AKHTER_CLOTHING "Clothing" -/// Category for equipment like belts and bags in the organics printer -#define RND_CATEGORY_AKHTER_EQUIPMENT "Equipment" -/// Category for medical items in the organics printer -#define RND_CATEGORY_AKHTER_MEDICAL "Emergency Medical" -/// Category for resources made by the organics printer -#define RND_CATEGORY_AKHTER_RESOURCES "Resources" -/// Category for the seeds the organics printer can make -#define RND_CATEGORY_AKHTER_SEEDS "Synthesized Seeds" - -/// The items the frontier clothing can hold -GLOBAL_LIST_INIT(colonist_suit_allowed, list( - /obj/item/ammo_box, - /obj/item/ammo_casing, - /obj/item/flashlight, - /obj/item/gun, - /obj/item/melee, - /obj/item/tank/internals, - /obj/item/storage/belt/holster, - /obj/item/construction, - /obj/item/fireaxe, - /obj/item/pipe_dispenser, - /obj/item/storage/bag, - /obj/item/pickaxe, - /obj/item/resonator, - /obj/item/t_scanner, - /obj/item/analyzer, -)) diff --git a/code/__DEFINES/~skyrat_defines/colors.dm b/code/__DEFINES/~skyrat_defines/colors.dm deleted file mode 100644 index 9c5e17b06a5b5c..00000000000000 --- a/code/__DEFINES/~skyrat_defines/colors.dm +++ /dev/null @@ -1,3 +0,0 @@ -#define LIGHT_COLOR_CLOCKWORK "#BE8700" -#define COLOR_SOLFED_GOLD "#FFD900" -#define LIGHT_COLOR_YELLOW "#E1E17D" diff --git a/code/__DEFINES/~skyrat_defines/jobs.dm b/code/__DEFINES/~skyrat_defines/jobs.dm deleted file mode 100644 index f00d0a72a662e8..00000000000000 --- a/code/__DEFINES/~skyrat_defines/jobs.dm +++ /dev/null @@ -1,17 +0,0 @@ -// Just keeping this easy to maintain in the future. -#define JOB_NOT_VETERAN (JOB_UNAVAILABLE_AGE + 1) -#define JOB_UNAVAILABLE_QUIRK (JOB_NOT_VETERAN + 1) -#define JOB_UNAVAILABLE_SPECIES (JOB_UNAVAILABLE_QUIRK + 1) -#define JOB_UNAVAILABLE_LANGUAGE (JOB_UNAVAILABLE_SPECIES + 1) -#define JOB_UNAVAILABLE_FLAVOUR (JOB_UNAVAILABLE_LANGUAGE + 1) -#define JOB_UNAVAILABLE_AUGMENT (JOB_UNAVAILABLE_FLAVOUR + 1) - -#define SEC_RESTRICTED_QUIRKS "Blind" = TRUE, "Brain Tumor" = TRUE, "Deaf" = TRUE, "Paraplegic" = TRUE, "Hemiplegic" = TRUE, "Mute" = TRUE, "Foreigner" = TRUE, "Pacifist" = TRUE, "Chunky Fingers" = TRUE, "No Guns" = TRUE, "Illiterate" = TRUE, "Nerve Stapled" = TRUE -#define HEAD_RESTRICTED_QUIRKS "Blind" = TRUE, "Deaf" = TRUE, "Mute" = TRUE, "Foreigner" = TRUE, "Chunky Fingers" = TRUE, "Brain Tumor" = TRUE, "Illiterate" = TRUE -#define TECH_RESTRICTED_QUIRKS "Chunky Fingers" = TRUE -#define GUARD_RESTRICTED_QUIRKS "Blind" = TRUE, "Deaf" = TRUE, "Foreigner" = TRUE, "Pacifist" = TRUE, "Nerve Stapled" = TRUE - -#define RESTRICTED_QUIRKS_EXCEPTIONS list("Mute" = "Signer") - -#define HEAD_RESTRICTED_AUGMENTS /obj/item/bodypart/arm/left/self_destruct, /obj/item/bodypart/arm/right/self_destruct, /obj/item/bodypart/leg/left/self_destruct, /obj/item/bodypart/leg/right/self_destruct -#define SEC_RESTRICTED_AUGMENTS /obj/item/bodypart/arm/left/self_destruct, /obj/item/bodypart/arm/right/self_destruct, /obj/item/bodypart/leg/left/self_destruct, /obj/item/bodypart/leg/right/self_destruct diff --git a/code/__DEFINES/~skyrat_defines/lewd_defines.dm b/code/__DEFINES/~skyrat_defines/lewd_defines.dm deleted file mode 100644 index a1edae8aa015d9..00000000000000 --- a/code/__DEFINES/~skyrat_defines/lewd_defines.dm +++ /dev/null @@ -1,49 +0,0 @@ -/// To prevent an issue with stupidly low negative values. -#define AROUSAL_MINIMUM 0 -#define AROUSAL_MINIMUM_DETECTABLE 10 -#define AROUSAL_LOW 30 -#define AROUSAL_MEDIUM 70 -#define AROUSAL_HIGH 85 -#define AROUSAL_AUTO_CLIMAX_THRESHOLD 90 -#define AROUSAL_LIMIT 100 - -#define REQUIRE_GENITAL_EXPOSED 1 -#define REQUIRE_GENITAL_UNEXPOSED 2 -#define REQUIRE_GENITAL_ANY 3 - -#define TRAIT_MASOCHISM "masochism" -#define TRAIT_SADISM "sadism" -#define TRAIT_NEVERBONER "neverboner" -#define TRAIT_BIMBO "bimbo" -#define TRAIT_RIGGER "rigger" -#define TRAIT_ROPEBUNNY "rope bunny" -///traits gained by brain traumas, can be removed if the brain trauma is gone -#define APHRO_TRAIT "aphro" -///traits gained by quirks, cannot be removed unless the quirk itself is gone -#define LEWDQUIRK_TRAIT "lewdquirks" -///traits gained by chemicals, you get the idea -#define LEWDCHEM_TRAIT "lewdchem" - -#define STRAPON_TRAIT "strapon" - -#define CONDOM_BROKEN "broken" - -#define BREAST_SIZE_FLATCHESTED "Flatchested" -#define BREAST_SIZE_A "A" -#define BREAST_SIZE_B "B" -#define BREAST_SIZE_C "C" -#define BREAST_SIZE_D "D" -// Ouch, my back. -#define BREAST_SIZE_E "E" -#define BREAST_SIZE_F "F" -#define BREAST_SIZE_G "G" -#define BREAST_SIZE_H "H" -#define BREAST_SIZE_I "I" -#define BREAST_SIZE_J "J" -#define BREAST_SIZE_K "K" -#define BREAST_SIZE_L "L" -#define BREAST_SIZE_M "M" -#define BREAST_SIZE_N "N" -#define BREAST_SIZE_O "O" -#define BREAST_SIZE_P "P" -#define BREAST_SIZE_BEYOND_MEASUREMENT "beyond measurement" diff --git a/code/__DEFINES/~skyrat_defines/mobs.dm b/code/__DEFINES/~skyrat_defines/mobs.dm deleted file mode 100644 index 71f8c21e89470c..00000000000000 --- a/code/__DEFINES/~skyrat_defines/mobs.dm +++ /dev/null @@ -1,34 +0,0 @@ -#define BLOOD_VOLUME_OVERSIZED 1120 - -#define PULL_OVERSIZED_SLOWDOWN 2 - -#define HUMAN_HEALTH_MODIFIER 1.35 - -#define HUMAN_MAXHEALTH MAX_LIVING_HEALTH * HUMAN_HEALTH_MODIFIER - -#define UNDERWEAR_HIDE_SOCKS (1<<0) -#define UNDERWEAR_HIDE_SHIRT (1<<1) -#define UNDERWEAR_HIDE_UNDIES (1<<2) -#define UNDERWEAR_HIDE_BRA (1<<3) - -//Appends to the bottom of Defib fails - DNR TRAIT -#define DEFIB_FAIL_DNR (1<<11) - -///Defines for icons used for modular bodyparts, created to make it easier to relocate the module or files if necessary. -#define BODYPART_ICON_HUMAN 'modular_skyrat/modules/bodyparts/icons/human_parts_greyscale.dmi' -#define BODYPART_ICON_MAMMAL 'modular_skyrat/modules/bodyparts/icons/mammal_parts_greyscale.dmi' -#define BODYPART_ICON_AKULA 'modular_skyrat/modules/bodyparts/icons/akula_parts_greyscale.dmi' -#define BODYPART_ICON_AQUATIC 'modular_skyrat/modules/bodyparts/icons/aquatic_parts_greyscale.dmi' -#define BODYPART_ICON_GHOUL 'modular_skyrat/modules/bodyparts/icons/ghoul_bodyparts.dmi' -#define BODYPART_ICON_INSECT 'modular_skyrat/modules/bodyparts/icons/insect_parts_greyscale.dmi' -#define BODYPART_ICON_LIZARD 'modular_skyrat/modules/bodyparts/icons/lizard_parts_greyscale.dmi' -#define BODYPART_ICON_MOTH 'modular_skyrat/modules/bodyparts/icons/moth_parts_greyscale.dmi' -#define BODYPART_ICON_ROUNDSTARTSLIME 'modular_skyrat/modules/bodyparts/icons/slime_parts_greyscale.dmi' -#define BODYPART_ICON_SKRELL 'modular_skyrat/modules/bodyparts/icons/skrell_parts_greyscale.dmi' -#define BODYPART_ICON_TAUR 'modular_skyrat/modules/bodyparts/icons/taur_invisible_legs.dmi' -#define BODYPART_ICON_TESHARI 'modular_skyrat/modules/bodyparts/icons/teshari_parts_greyscale.dmi' -#define BODYPART_ICON_VOX 'modular_skyrat/modules/bodyparts/icons/vox_parts_greyscale.dmi' -#define BODYPART_ICON_XENO 'modular_skyrat/modules/bodyparts/icons/xeno_parts_greyscale.dmi' -#define BODYPART_ICON_SYNTHMAMMAL 'modular_skyrat/modules/bodyparts/icons/synthmammal_parts_greyscale.dmi' -#define BODYPART_ICON_IPC 'modular_skyrat/modules/bodyparts/icons/ipc_parts.dmi' -#define BODYPART_ICON_SYNTHLIZARD 'modular_skyrat/modules/bodyparts/icons/synthliz_parts_greyscale.dmi' diff --git a/code/__DEFINES/~skyrat_defines/projectiles.dm b/code/__DEFINES/~skyrat_defines/projectiles.dm deleted file mode 100644 index 158f3e12d1e348..00000000000000 --- a/code/__DEFINES/~skyrat_defines/projectiles.dm +++ /dev/null @@ -1,22 +0,0 @@ -/// The caliber used by the AK-25 -#define CALIBER_732x29 "a732x29" - -/// The caliber used by the Oldarms 'Mk.11.4 rifle', designed to be worse .223. -#define CALIBER_223S ".223 Stinger" - -/// Caliber used by the giant anti materiel rifle in guncargo -#define CALIBER_60STRELA ".60 Strela" - -/// Standard Sol rifle caliber -#define CALIBER_SOL40LONG ".40 Sol Long" -/// Standard Sol pistol caliber -#define CALIBER_SOL35SHORT ".35 Sol Short" - -/// Basically 20mm grenades, I'd be concerned if a grenade launcher didn't use this -#define CALIBER_980TYDHOUER ".980 Tydhouer" - -/// Large caliber pistol round for Sol hand cannons -#define CALIBER_585TRAPPISTE ".585 Trappiste" - -/// Caliber used by the pepperball gun -#define CALIBER_PEPPERBALL "pepperball" diff --git a/code/__DEFINES/~skyrat_defines/research_categories.dm b/code/__DEFINES/~skyrat_defines/research_categories.dm deleted file mode 100644 index 3dfad9f5ca7ce8..00000000000000 --- a/code/__DEFINES/~skyrat_defines/research_categories.dm +++ /dev/null @@ -1 +0,0 @@ -#define RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_CARGO "/Cargo Cyborgs" diff --git a/code/__DEFINES/~skyrat_defines/robot_defines.dm b/code/__DEFINES/~skyrat_defines/robot_defines.dm deleted file mode 100644 index 8dde8079fb6228..00000000000000 --- a/code/__DEFINES/~skyrat_defines/robot_defines.dm +++ /dev/null @@ -1,70 +0,0 @@ -//Module - borgs -//Defines for dogborgs and stuff -#define ROBOT_REST_NORMAL 1 -#define ROBOT_REST_SITTING 2 -#define ROBOT_REST_BELLY_UP 3 - -#define SKIN_FEATURES "skin_features" //for the new system of borg making - -//Defines for model features, set in the model_features list of a robot model datum. Are they a dogborg? Is the model small? etc. -/// Cyborgs with unique sprites for when they get totally broken down. -#define R_TRAIT_UNIQUEWRECK "unique_wreck" -/// Or when tipped over. -#define R_TRAIT_UNIQUETIP "unique_tip" -/// 64x32 skins -#define R_TRAIT_WIDE "wide_borg" -/// 32x64 skins -#define R_TRAIT_TALL "tall_borg" -/// Any model small enough to reject the shrinker upgrade. -#define R_TRAIT_SMALL "small_chassis" -/// Any model that has a custom front panel -#define R_TRAIT_UNIQUEPANEL "unique_openpanel" - -// Icon file locations for modular borg icons -#define CYBORG_ICON_STANDARD 'modular_skyrat/modules/borgs/icons/robots.dmi' - -#define CYBORG_ICON_MED 'modular_skyrat/modules/borgs/icons/robots_med.dmi' -#define CYBORG_ICON_MED_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_med.dmi' -#define CYBORG_ICON_MED_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_med.dmi' - -#define CYBORG_ICON_CARGO 'modular_skyrat/modules/borgs/icons/robots_cargo.dmi' -#define CYBORG_ICON_CARGO_WIDE 'modular_skyrat/modules/borgs/icons/widerobots_cargo.dmi' -#define CYBORG_ICON_CARGO_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_cargo.dmi' - -#define CYBORG_ICON_SEC 'modular_skyrat/modules/borgs/icons/robots_sec.dmi' -#define CYBORG_ICON_SEC_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_sec.dmi' -#define CYBORG_ICON_SEC_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_sec.dmi' - -#define CYBORG_ICON_ENG 'modular_skyrat/modules/borgs/icons/robots_eng.dmi' -#define CYBORG_ICON_ENG_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_eng.dmi' -#define CYBORG_ICON_ENG_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_eng.dmi' - -#define CYBORG_ICON_PEACEKEEPER 'modular_skyrat/modules/borgs/icons/robots_pk.dmi' -#define CYBORG_ICON_PEACEKEEPER_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_pk.dmi' -#define CYBORG_ICON_PEACEKEEPER_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_pk.dmi' - -#define CYBORG_ICON_SERVICE 'modular_skyrat/modules/borgs/icons/robots_serv.dmi' -#define CYBORG_ICON_SERVICE_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_serv.dmi' -#define CYBORG_ICON_SERVICE_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_serv.dmi' - -#define CYBORG_ICON_MINING 'modular_skyrat/modules/borgs/icons/robots_mine.dmi' -#define CYBORG_ICON_MINING_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_mine.dmi' -#define CYBORG_ICON_MINING_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_mine.dmi' - -#define CYBORG_ICON_JANI 'modular_skyrat/modules/borgs/icons/robots_jani.dmi' -#define CYBORG_ICON_JANI_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_jani.dmi' -#define CYBORG_ICON_JANI_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_jani.dmi' - -#define CYBORG_ICON_SYNDIE 'modular_skyrat/modules/borgs/icons/robots_syndi.dmi' -#define CYBORG_ICON_SYNDIE_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_syndi.dmi' -#define CYBORG_ICON_SYNDIE_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_syndi.dmi' - -#define CYBORG_ICON_CLOWN 'modular_skyrat/modules/borgs/icons/robots_clown.dmi' -#define CYBORG_ICON_CLOWN_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_clown.dmi' -#define CYBORG_ICON_CLOWN_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_clown.dmi' - -#define CYBORG_ICON_NINJA 'modular_skyrat/modules/borgs/icons/robots_ninja.dmi' -#define CYBORG_ICON_NINJA_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_ninja.dmi' - -/// Module is compatible with Cargo Cyborg model -#define BORG_MODEL_CARGO (BORG_MODEL_ENGINEERING<<1) diff --git a/code/__DEFINES/~skyrat_defines/species_clothing_paths.dm b/code/__DEFINES/~skyrat_defines/species_clothing_paths.dm deleted file mode 100644 index 8a537ed9015592..00000000000000 --- a/code/__DEFINES/~skyrat_defines/species_clothing_paths.dm +++ /dev/null @@ -1,30 +0,0 @@ -///The dmi containing snouted masks -#define SNOUTED_MASK_FILE 'modular_skyrat/master_files/icons/mob/clothing/mask_muzzled.dmi' -///The dmi containing snouted hats -#define SNOUTED_HEAD_FILE 'modular_skyrat/master_files/icons/mob/clothing/head_muzzled.dmi' - -// Vox stuff -#define VOX_BACK_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/vox/back.dmi' -#define VOX_BELT_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/vox/belt.dmi' -#define VOX_EYES_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/vox/eyes.dmi' -#define VOX_FEET_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/vox/feet.dmi' -#define VOX_HANDS_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/vox/hands.dmi' -#define VOX_HEAD_ICON 'modular_skyrat/master_files/icons/mob/clothing/head_vox.dmi' -#define VOX_MASK_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' -#define VOX_NECK_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/vox/neck.dmi' -#define VOX_SUIT_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/vox/suit.dmi' -#define VOX_UNIFORM_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/vox/uniform.dmi' -#define VOX_EARS_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/vox/ears.dmi' - -// Vox primalis stuff -#define VOX_PRIMALIS_BACK_ICON 'modular_skyrat/modules/better_vox/icons/clothing/back.dmi' -#define VOX_PRIMALIS_BELT_ICON 'modular_skyrat/modules/better_vox/icons/clothing/belt.dmi' -#define VOX_PRIMALIS_EYES_ICON 'modular_skyrat/modules/better_vox/icons/clothing/eyes.dmi' -#define VOX_PRIMALIS_FEET_ICON 'modular_skyrat/modules/better_vox/icons/clothing/feet.dmi' -#define VOX_PRIMALIS_GLOVES_ICON 'modular_skyrat/modules/better_vox/icons/clothing/hands.dmi' -#define VOX_PRIMALIS_HEAD_ICON 'modular_skyrat/modules/better_vox/icons/clothing/head.dmi' -#define VOX_PRIMALIS_MASK_ICON 'modular_skyrat/modules/better_vox/icons/clothing/mask.dmi' -#define VOX_PRIMALIS_NECK_ICON 'modular_skyrat/modules/better_vox/icons/clothing/neck.dmi' -#define VOX_PRIMALIS_SUIT_ICON 'modular_skyrat/modules/better_vox/icons/clothing/suit.dmi' -#define VOX_PRIMALIS_UNIFORM_ICON 'modular_skyrat/modules/better_vox/icons/clothing/uniform.dmi' -#define VOX_PRIMALIS_EARS_ICON 'modular_skyrat/modules/better_vox/icons/clothing/ears.dmi' diff --git a/code/__DEFINES/~skyrat_defines/teshari_clothing_paths.dm b/code/__DEFINES/~skyrat_defines/teshari_clothing_paths.dm deleted file mode 100644 index fbc66c208f13cb..00000000000000 --- a/code/__DEFINES/~skyrat_defines/teshari_clothing_paths.dm +++ /dev/null @@ -1,12 +0,0 @@ -#define TESHARI_ACCESSORIES_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/accessories.dmi' -#define TESHARI_BACK_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/back.dmi' -#define TESHARI_BELT_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/belt.dmi' -#define TESHARI_EYES_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/eyes.dmi' -#define TESHARI_FEET_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/feet.dmi' -#define TESHARI_HANDS_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/hands.dmi' -#define TESHARI_HEAD_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/head.dmi' -#define TESHARI_MASK_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/mask.dmi' -#define TESHARI_NECK_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/neck.dmi' -#define TESHARI_SUIT_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/suit.dmi' -#define TESHARI_UNIFORM_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/uniform.dmi' -#define TESHARI_EARS_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/ears.dmi' diff --git a/code/__DEFINES/~skyrat_defines/text.dm b/code/__DEFINES/~skyrat_defines/text.dm deleted file mode 100644 index 8a300f4ab75c5a..00000000000000 --- a/code/__DEFINES/~skyrat_defines/text.dm +++ /dev/null @@ -1,4 +0,0 @@ -/// File location for in-rotation news stories -#define NEWS_FILE "[global.config.directory]/skyrat/news_stories.json" -/// File location for out-of-rotation news stories -#define ARCHIVE_FILE "[global.config.directory]/skyrat/archived_stories.json" diff --git a/code/__DEFINES/~skyrat_defines/traits.dm b/code/__DEFINES/~skyrat_defines/traits.dm deleted file mode 100644 index 49f025e4ab0e68..00000000000000 --- a/code/__DEFINES/~skyrat_defines/traits.dm +++ /dev/null @@ -1,95 +0,0 @@ -// Defines for some extra traits -#define TRAIT_NO_HUSK "no_husk" -#define TRAIT_NORUNNING "norunning" // You walk! -#define TRAIT_EXCITABLE "wagwag" //Will wag when patted! -#define TRAIT_OXYIMMUNE "oxyimmune" // Immune to oxygen damage, ideally give this to all non-breathing species or bad stuff will happen -#define TRAIT_PERSONALSPACE "personalspace" // Block/counter-attack ass-slaps -#define TRAIT_MOOD_NOEXAMINE "mood_noexamine" // Can't assess your own mood -#define TRAIT_DNR "do_not_revive" // Can't be revived without supernatural means or admin intervention -#define TRAIT_HARD_SOLES "hard_soles" // No step on glass -#define TRAIT_SENSITIVESNOUT "sensitive_snout" // Snout hurts when booped -#define TRAIT_DETECTIVE "detective_ability" //Given to the detective, if they have this, they can see syndicate special descriptions. -#define TRAIT_FREE_GHOST "free_ghost" // Can ghost and return freely with this trait -#define GLOVES_TRAIT "gloves_trait" //Traits associated with wearing gloves -#define QUIRK_LINGUIST "Linguist" // Extra language point. -#define GLUED_ITEM_TRAIT "glued-item" // This is for glued items, undroppable. Syndie glue applies this. -#define TRAIT_STICKY_FINGERS "sticky_fingers" //This is so a mob can strip items faster and picks them up after -/// This makes trait makes it so that the person cannot be infected by the zombie virus. -#define TRAIT_MUTANT_IMMUNE "mutant_immune" - -//AdditionalEmotes *turf traits -#define TRAIT_WATER_ASPECT "water_aspect" -#define TRAIT_WEBBING_ASPECT "webbing_aspect" -#define TRAIT_FLORAL_ASPECT "floral_aspect" -#define TRAIT_ASH_ASPECT "ash_aspect" -#define TRAIT_SPARKLE_ASPECT "sparkle_aspect" - -/// Allows the user to instantly reload. -#define TRAIT_INSTANT_RELOAD "instant_reload" - -// Trait sources -#define GHOSTROLE_TRAIT "ghostrole" // SKYRAT EDIT ADDITION -- Ghost Cafe Traits - -/// One can breath under water, you get me? -#define TRAIT_WATER_BREATHING "water_breathing" - -/// The trait which Akulas inherit, for their species mechanic revolving around wet_stacks -#define TRAIT_SLICK_SKIN "slick_skin" -/// The trait which is applied when a `slick skin` trait haver actually gets wet_stacks -#define TRAIT_SLIPPERY "slippery" -/// The minimum amount of tiles a TRAIT_SLIPPERY haver will slide on slip -#define SLIPPERY_MIN 5 -/// The maximum amount of tiles a TRAIT_SLIPPERY haver will slide on slip -#define SLIPPERY_MAX 9 - -/// Under the effect of a numbling agent, such as morphine, for surgery. -#define TRAIT_NUMBED "numbed" - -// felinid traits -#define TRAIT_FELINE "feline_aspect" - -// chameleon mutation -#define TRAIT_CHAMELEON_SKIN "chameleon_skin" - -//Makes sure that people cant be cult sacrificed twice. -#define TRAIT_SACRIFICED "sacrificed" - -/// The trait that determines if someone has the oversized quirk. -#define TRAIT_OVERSIZED "trait_oversized" - -/// Caninid trait -#define TRAIT_CANINE "trait_canine" - -/// Cargo Loader trait -#define TRAIT_TRASHMAN "trait_trashman" - -/// Trait source for xeno innate abilities -#define TRAIT_XENO_INNATE "xeno_innate" -/// Trait source for something added BY a xeno ability -#define TRAIT_XENO_ABILITY_GIVEN "xeno_ability_given" -/// Determines if something can receive healing from a xeno -#define TRAIT_XENO_HEAL_AURA "trait_xeno_heal_aura" - -/// Trait that was granted by a reagent. -#define REAGENT_TRAIT "reagent" - -/// trait that lets you do flips with a style meter -#define TRAIT_STYLISH "stylish" - -/// trait that lets you do xenoarch magnification -#define TRAIT_XENOARCH_QUALIFIED "trait_xenoarch_qualified" - -/// Traits granted by glassblowing -#define GLASSBLOWING_TRAIT "glassblowing" - -/// Trait that is applied whenever someone or something is glassblowing -#define TRAIT_CURRENTLY_GLASSBLOWING "currently_glassblowing" - -/// Trait that was granted by a NIFSoft -#define NIFSOFT_TRAIT "nifsoft" - -/// Trait given to a piece of eyewear that allows the user to use NIFSoft HUDs -#define TRAIT_NIFSOFT_HUD_GRANTER "nifsoft_hud_granter" - -/// Trait given to a brain that is able to accept souls from a RSD -#define TRAIT_RSD_COMPATIBLE "rsd_compatible" diff --git a/code/__HELPERS/_auxtools_api.dm b/code/__HELPERS/_auxtools_api.dm index 8dbd58f2eeda61..0117ded4c51951 100644 --- a/code/__HELPERS/_auxtools_api.dm +++ b/code/__HELPERS/_auxtools_api.dm @@ -10,7 +10,7 @@ GLOBAL_PROTECT(auxtools_initialized) }\ if (GLOB.auxtools_initialized[LIB] != AUXTOOLS_FULL_INIT) {\ if (fexists(LIB)) {\ - var/string = LIBCALL(LIB,"auxtools_init")();\ + var/string = call_ext(LIB,"auxtools_init")();\ if(findtext(string, "SUCCESS")) {\ GLOB.auxtools_initialized[LIB] = AUXTOOLS_FULL_INIT;\ } else {\ @@ -23,13 +23,13 @@ GLOBAL_PROTECT(auxtools_initialized) #define AUXTOOLS_SHUTDOWN(LIB)\ if (GLOB.auxtools_initialized[LIB] == AUXTOOLS_FULL_INIT && fexists(LIB)){\ - LIBCALL(LIB,"auxtools_shutdown")();\ + call_ext(LIB,"auxtools_shutdown")();\ GLOB.auxtools_initialized[LIB] = AUXTOOLS_PARTIAL_INIT;\ }\ #define AUXTOOLS_FULL_SHUTDOWN(LIB)\ if (GLOB.auxtools_initialized[LIB] && fexists(LIB)){\ - LIBCALL(LIB,"auxtools_full_shutdown")();\ + call_ext(LIB,"auxtools_full_shutdown")();\ GLOB.auxtools_initialized[LIB] = FALSE;\ } diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index 32e4135b96515b..361bd10f329c92 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -403,10 +403,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) + /** * Removes any empty weakrefs from the list @@ -898,6 +896,13 @@ UNTYPED_LIST_ADD(keys, key) return keys +///Gets the total amount of everything in the associative list. +/proc/assoc_value_sum(list/input) + var/keys = 0 + for(var/key in input) + keys += input[key] + return keys + ///compare two lists, returns TRUE if they are the same /proc/compare_list(list/l,list/d) if(!islist(l) || !islist(d)) diff --git a/code/__HELPERS/admin.dm b/code/__HELPERS/admin.dm index 94f61ef0152fdb..8564937f9c6d90 100644 --- a/code/__HELPERS/admin.dm +++ b/code/__HELPERS/admin.dm @@ -1,3 +1,10 @@ /// Returns if the given client is an admin, REGARDLESS of if they're deadminned or not. /proc/is_admin(client/client) return !isnull(GLOB.admin_datums[client.ckey]) || !isnull(GLOB.deadmins[client.ckey]) + +/// Sends a message in the event that someone attempts to elevate their permissions through invoking a certain proc. +/proc/alert_to_permissions_elevation_attempt(mob/user) + var/message = " has tried to elevate permissions!" + message_admins(key_name_admin(user) + message) + log_admin(key_name(user) + message) + diff --git a/code/__HELPERS/animations.dm b/code/__HELPERS/animations.dm deleted file mode 100644 index cae8d3a8f52b17..00000000000000 --- a/code/__HELPERS/animations.dm +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Causes the passed atom / image to appear floating, - * playing a simple animation where they move up and down by 2 pixels (looping) - * - * In most cases you should NOT call this manually, instead use [/datum/element/movetype_handler]! - * This is just so you can apply the animation to things which can be animated but are not movables (like images) - */ -#define DO_FLOATING_ANIM(target) \ - animate(target, pixel_y = 2, time = 1 SECONDS, loop = -1, flags = ANIMATION_RELATIVE); \ - animate(pixel_y = -2, time = 1 SECONDS, flags = ANIMATION_RELATIVE) - -/** - * Stops the passed atom / image from appearing floating - * (Living mobs also have a 'body_position_pixel_y_offset' variable that has to be taken into account here) - * - * In most cases you should NOT call this manually, instead use [/datum/element/movetype_handler]! - * This is just so you can apply the animation to things which can be animated but are not movables (like images) - */ -#define STOP_FLOATING_ANIM(target) \ - var/final_pixel_y = 0; \ - if(ismovable(target)) { \ - var/atom/movable/movable_target = target; \ - final_pixel_y = movable_target.base_pixel_y; \ - }; \ - if(isliving(target)) { \ - var/mob/living/living_target = target; \ - 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) - -///Animates source spinning around itself. For docmentation on the args, check atom/proc/SpinAnimation() -/atom/proc/do_spin_animation(speed = 1 SECONDS, loops = -1, segments = 3, angle = 120, parallel = TRUE) - var/list/matrices = list() - for(var/i in 1 to segments-1) - var/matrix/segment_matrix = matrix(transform) - segment_matrix.Turn(angle*i) - matrices += segment_matrix - var/matrix/last = matrix(transform) - matrices += last - - speed /= segments - - if(parallel) - animate(src, transform = matrices[1], time = speed, loops , flags = ANIMATION_PARALLEL) - else - animate(src, transform = matrices[1], time = speed, loops) - for(var/i in 2 to segments) //2 because 1 is covered above - animate(transform = matrices[i], time = speed) - //doesn't have an object argument because this is "Stacking" with the animate call above - //3 billion% intentional - -/// Similar to shake but more spasm-y and jerk-y -/atom/proc/spasm_animation(loops = -1) - var/list/transforms = list( - matrix(transform).Translate(-1, 0), - matrix(transform).Translate(0, 1), - matrix(transform).Translate(1, 0), - matrix(transform).Translate(0, -1), - ) - - animate(src, transform = transforms[1], time = 0.2, loop = loops) - animate(transform = transforms[2], time = 0.1) - animate(transform = transforms[3], time = 0.2) - animate(transform = transforms[4], time = 0.3) diff --git a/code/__HELPERS/announcements.dm b/code/__HELPERS/announcements.dm new file mode 100644 index 00000000000000..7a27be43a756f2 --- /dev/null +++ b/code/__HELPERS/announcements.dm @@ -0,0 +1,84 @@ +/** + * 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 + */ + +/proc/send_ooc_announcement( + text, + title = "", + players, + play_sound = TRUE, + sound_override = 'sound/misc/bloop.ogg', + sender_override = "Server Admin Announcement", + encode_title = TRUE, + encode_text = TRUE, +) + 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_major_announcement_title(sender_override) + announcement_strings += span_subheader_announcement_text(title) + announcement_strings += span_ooc_announcement_text(text) + var/finalized_announcement = create_ooc_announcement_div(jointext(announcement_strings, "")) + + 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") + return "
[message]
" + +/** + * Inserts a span styled message into an OOC alert style div + * + * + * Arguments + * * message - required, the message contents + */ +/proc/create_ooc_announcement_div(message) + return "
[message]
" diff --git a/code/__HELPERS/areas.dm b/code/__HELPERS/areas.dm index 383e8a425fc0b6..dec768a6a0cc7c 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 @@ -86,6 +88,7 @@ GLOBAL_LIST_INIT(typecache_powerfailure_safe_areas, typecacheof(/area/station/en // Ignore these areas and dont let people expand them. They can expand into them though var/static/list/blacklisted_areas = typecacheof(list( /area/space, + /area/station/asteroid, )) var/error = "" diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm index e1303882b1aa1b..0210c44ee57baa 100644 --- a/code/__HELPERS/cmp.dm +++ b/code/__HELPERS/cmp.dm @@ -189,12 +189,6 @@ /proc/cmp_assoc_list_name(list/A, list/B) return sorttext(B["name"], A["name"]) -/// Used by /datum/achievement_data/load_all_achievements() to determine in which order awards have to be loaded. -/proc/cmp_award_priority(type_a, type_b) - var/datum/award/award_a = SSachievements.awards[type_a] - var/datum/award/award_b = SSachievements.awards[type_b] - return award_b?.load_priority - award_a?.load_priority - /// Orders mobs by health /proc/cmp_mob_health(mob/living/mob_a, mob/living/mob_b) return mob_b.health - mob_a.health diff --git a/code/__HELPERS/colors.dm b/code/__HELPERS/colors.dm index cc3d083f6403b0..58f4d61ea306f4 100644 --- a/code/__HELPERS/colors.dm +++ b/code/__HELPERS/colors.dm @@ -17,6 +17,18 @@ return final_color +/// Given a color in the format of "#RRGGBB" or "#RRGGBBAA", gives back a 4 entry list with the number values of each +/proc/split_color(color) + var/list/output = list() + output += hex2num(copytext(color, 2, 4)) + output += hex2num(copytext(color, 4, 6)) + output += hex2num(copytext(color, 6, 8)) + if(length(color) == 9) + output += hex2num(copytext(color, 8, 10)) + else + output += 255 + return output + ///Returns a random color picked from a list, has 2 modes (0 and 1), mode 1 doesn't pick white, black or gray /proc/random_colour(mode = 0) switch(mode) diff --git a/code/__HELPERS/dynamic_human_icon_gen.dm b/code/__HELPERS/dynamic_human_icon_gen.dm index eb6d53517df005..b799406376f106 100644 --- a/code/__HELPERS/dynamic_human_icon_gen.dm +++ b/code/__HELPERS/dynamic_human_icon_gen.dm @@ -17,7 +17,7 @@ GLOBAL_LIST_EMPTY(dynamic_human_appearances) dummy.underwear = "Nude" dummy.undershirt = "Nude" dummy.socks = "Nude" - dummy.bra = "Nude" // SKYRAT EDIT ADDITION - Underwear and bra split + dummy.bra = "Nude" // NOVA EDIT ADDITION - Underwear and bra split if(outfit_path) var/datum/outfit/outfit = new outfit_path() if(r_hand != NO_REPLACE) //we can still override to be null, no replace means just use outfit's diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 30d37fb547e33a..0aaca9a0907cfe 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -11,43 +11,6 @@ return null return format_text ? format_text(checked_area.name) : checked_area.name -/** toggle_organ_decay - * inputs: first_object (object to start with) - * outputs: - * description: A pseudo-recursive loop based off of the recursive mob check, this check looks for any organs held - * within 'first_object', toggling their frozen flag. This check excludes items held within other safe organ - * storage units, so that only the lowest level of container dictates whether we do or don't decompose - */ -/proc/toggle_organ_decay(atom/first_object) - - var/list/processing_list = list(first_object) - var/list/processed_list = list() - var/index = 1 - var/obj/item/organ/found_organ - - while(index <= length(processing_list)) - - var/atom/object_to_check = processing_list[index] - - if(isorgan(object_to_check)) - found_organ = object_to_check - found_organ.organ_flags ^= ORGAN_FROZEN - - else if(iscarbon(object_to_check)) - var/mob/living/carbon/mob_to_check = object_to_check - for(var/organ in mob_to_check.organs) - found_organ = organ - found_organ.organ_flags ^= ORGAN_FROZEN - - for(var/atom/contained_to_check in object_to_check) //objects held within other objects are added to the processing list, unless that object is something that can hold organs safely - if(!processed_list[contained_to_check] && !istype(contained_to_check, /obj/structure/closet/crate/freezer) && !istype(contained_to_check, /obj/structure/closet/secure_closet/freezer)) - processing_list+= contained_to_check - - index++ - processed_list[object_to_check] = object_to_check - - return - ///Tries to move an atom to an adjacent turf, return TRUE if successful /proc/try_move_adjacent(atom/movable/atom_to_move, trydir) var/turf/atom_turf = get_turf(atom_to_move) @@ -211,145 +174,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 - //SKYRAT EDIT ADDITION BEGIN - if(is_banned_from(candidate_mob.ckey, BAN_GHOST_TAKEOVER) || is_banned_from(candidate_mob.ckey, BAN_ANTAGONIST)) - to_chat(candidate_mob, "There was a ghost prompt for: [question], unfortunately you are banned from ghost takeovers.") - continue - //SKYRAT EDIT END - 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) @@ -447,7 +271,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/global_lists.dm b/code/__HELPERS/global_lists.dm index 616469ecabfbc0..3d42184954a1c1 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -14,12 +14,12 @@ //socks init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, GLOB.socks_list) //bodypart accessories (blizzard intensifies) - //SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION + //NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION /* init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, GLOB.body_markings_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/tails, GLOB.tails_list, add_blank = TRUE) init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, GLOB.tails_list_human, add_blank = TRUE) init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, GLOB.tails_list_lizard, add_blank = TRUE) + init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/monkey, GLOB.tails_list_monkey, add_blank = TRUE) init_sprite_accessory_subtypes(/datum/sprite_accessory/snouts, GLOB.snouts_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/horns,GLOB.horns_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/ears, GLOB.ears_list) @@ -33,14 +33,15 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_wings, GLOB.moth_wings_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_antennae, GLOB.moth_antennae_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_markings, GLOB.moth_markings_list) - */ //SKYRAT EDIT REMOVAL END + */ //NOVA EDIT REMOVAL END //bras - init_sprite_accessory_subtypes(/datum/sprite_accessory/bra, GLOB.bra_list, GLOB.bra_m, GLOB.bra_f) // SKYRAT EDIT ADDITION + init_sprite_accessory_subtypes(/datum/sprite_accessory/bra, GLOB.bra_list, GLOB.bra_m, GLOB.bra_f) // NOVA EDIT ADDITION - init_sprite_accessory_subtypes(/datum/sprite_accessory/wings/moth, GLOB.moth_wings_list) // SKYRAT EDIT ADDITION - Customization - init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair, GLOB.pod_hair_list, add_blank = TRUE) // SKYRAT EDIT - Customization - ORIGINAL: init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair, GLOB.pod_hair_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/wings/moth, GLOB.moth_wings_list) // NOVA EDIT ADDITION - Customization + init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/monkey, GLOB.tails_list_monkey, add_blank = TRUE) // NOVA EDIT ADDITION - We don't want monkeys getting randomized non-monkey tails + init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair, GLOB.pod_hair_list, add_blank = TRUE) // NOVA EDIT - Customization - ORIGINAL: init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair, GLOB.pod_hair_list) - //SKYRAT EDIT ADDITION BEGIN + //NOVA EDIT ADDITION BEGIN //Scream types for(var/spath in subtypesof(/datum/scream_type)) var/datum/scream_type/S = new spath() @@ -52,7 +53,7 @@ var/datum/laugh_type/L = new spath() GLOB.laugh_types[L.name] = spath sort_list(GLOB.laugh_types, GLOBAL_PROC_REF(cmp_typepaths_asc)) - //SKYRAT EDIT END + //NOVA EDIT END /// Inits GLOB.species_list. Not using GLOBAL_LIST_INIT b/c it depends on GLOB.string_lists /proc/init_species_list() @@ -88,7 +89,7 @@ GLOB.emote_list = init_emote_list() // WHY DOES THIS NEED TO GO HERE? IT JUST INITS DATUMS - make_skyrat_datum_references() //SKYRAT EDIT ADDITION - CUSTOMIZATION + make_skyrat_datum_references() //NOVA EDIT ADDITION - CUSTOMIZATION init_crafting_recipes() init_crafting_recipes_atoms() @@ -98,7 +99,7 @@ if(ispath(path, /datum/crafting_recipe/stack)) continue var/datum/crafting_recipe/recipe = new path() - var/is_cooking = ((recipe.category in GLOB.crafting_category_food) || (recipe.category in GLOB.crafting_category_food_skyrat)) // SKYRAT EDIT - Add skyrat food crafting category + var/is_cooking = ((recipe.category in GLOB.crafting_category_food) || (recipe.category in GLOB.crafting_category_food_skyrat)) // NOVA EDIT - Add skyrat food crafting category recipe.reqs = sort_list(recipe.reqs, GLOBAL_PROC_REF(cmp_crafting_req_priority)) if(recipe.name != "" && recipe.result) if(is_cooking) @@ -119,7 +120,7 @@ /obj/item/stack/sheet/sinew = GLOB.sinew_recipes, /obj/item/stack/sheet/animalhide/carp = GLOB.carp_recipes, /obj/item/stack/sheet/mineral/sandstone = GLOB.sandstone_recipes, - /obj/item/stack/sheet/mineral/clay = GLOB.clay_recipes, + /obj/item/stack/sheet/mineral/clay = GLOB.clay_recipes, // NOVA EDIT ADDITION /obj/item/stack/sheet/mineral/sandbags = GLOB.sandbag_recipes, /obj/item/stack/sheet/mineral/diamond = GLOB.diamond_recipes, /obj/item/stack/sheet/mineral/uranium = GLOB.uranium_recipes, @@ -244,7 +245,7 @@ // Wall mounted machinery which are visually on the wall. GLOBAL_LIST_INIT(WALLITEMS_INTERIOR, typecacheof(list( /obj/item/radio/intercom, - /obj/item/storage/secure/safe, + /obj/structure/secure_safe, /obj/machinery/airalarm, /obj/machinery/bluespace_vendor, /obj/machinery/button, @@ -261,7 +262,7 @@ GLOBAL_LIST_INIT(WALLITEMS_INTERIOR, typecacheof(list( /obj/machinery/status_display, /obj/machinery/ticket_machine, /obj/machinery/turretid, - /obj/machinery/time_clock, //SKYRAT EDIT TIME CLOCK + /obj/machinery/time_clock, //NOVA EDIT TIME CLOCK /obj/machinery/barsign, /obj/structure/extinguisher_cabinet, /obj/structure/fireaxecabinet, diff --git a/code/__HELPERS/heap.dm b/code/__HELPERS/heap.dm index 363fbbb80d6c7d..eeabfa6a20b4e3 100644 --- a/code/__HELPERS/heap.dm +++ b/code/__HELPERS/heap.dm @@ -10,7 +10,7 @@ L = new() cmp = compare -/datum/heap/Destroy(force, ...) +/datum/heap/Destroy(force) for(var/i in L) // because this is before the list helpers are loaded qdel(i) L = null diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm index 6a1cfd6191a3b3..5c5ff5a059a30c 100644 --- a/code/__HELPERS/icon_smoothing.dm +++ b/code/__HELPERS/icon_smoothing.dm @@ -166,6 +166,8 @@ xxx xxx xxx ///do not use, use QUEUE_SMOOTH(atom) /atom/proc/smooth_icon() + if(QDELETED(src)) + return smoothing_flags &= ~SMOOTH_QUEUED flags_1 |= HTML_USE_INITAL_ICON_1 if (!z) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index c2b2f1e33b23fa..798059ac7b7c88 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -1021,7 +1021,7 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) if(job) body.dna.species.pre_equip_species_outfit(job, body, TRUE) if(outfit) - body.equip_outfit_and_loadout(outfit, prefs, TRUE) //SKYRAT EDIT CHANGE + body.equip_outfit_and_loadout(outfit, prefs, TRUE) //NOVA EDIT CHANGE var/icon/out_icon = icon('icons/effects/effects.dmi', "nothing") for(var/direction in showDirs) @@ -1477,7 +1477,37 @@ GLOBAL_LIST_EMPTY(transformation_animation_objects) /// 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()) return GLOB.icon_dimensions[icon_path] + +/// Fikou's fix for making toast alerts look nice - resets offsets, transforms to fit +/proc/get_small_overlay(atom/source) + var/mutable_appearance/alert_overlay = new(source) + alert_overlay.pixel_x = 0 + alert_overlay.pixel_y = 0 + + var/scale = 1 + var/list/icon_dimensions = get_icon_dimensions(source.icon) + var/width = icon_dimensions["width"] + var/height = icon_dimensions["height"] + + if(width > world.icon_size) + alert_overlay.pixel_x = -(world.icon_size / 2) * ((width - world.icon_size) / world.icon_size) + if(height > world.icon_size) + alert_overlay.pixel_y = -(world.icon_size / 2) * ((height - world.icon_size) / world.icon_size) + if(width > world.icon_size || height > world.icon_size) + if(width >= height) + scale = world.icon_size / width + else + scale = world.icon_size / height + alert_overlay.transform = alert_overlay.transform.Scale(scale) + + return alert_overlay diff --git a/code/__HELPERS/levels.dm b/code/__HELPERS/levels.dm index 096655ad748bd1..505cb9c3fbe81b 100644 --- a/code/__HELPERS/levels.dm +++ b/code/__HELPERS/levels.dm @@ -26,8 +26,8 @@ * * Nullspace counts as "not a planet", so you may want to check that separately. * * The mining z-level (Lavaland) is always considered a planet. * * The station z-level is considered a planet if the map config says so. - * * Central Command is always not a planet. - * * Syndicate recon outpost is always on a planet. + * * Conglomeration of Colonists is always not a planet. + * * Symphionia recon outpost is always on a planet. * * Returns TRUE if we are on a planet. * Returns FALSE if we are not in a planet, or otherwise, "in space". @@ -49,11 +49,11 @@ return SSmapping.is_planetary() if(is_centcom_level(what_turf.z)) - // Central Command is definitely in space + // Conglomeration of Colonists is definitely in space return FALSE if(what.onSyndieBase()) - // Syndicate recon outpost is on some moon or something + // Symphionia recon outpost is on some moon or something return TRUE // Finally, more specific checks are ran for edge cases, such as lazyily loaded map templates or away missions. Not perfect. diff --git a/code/__HELPERS/logging/_logging.dm b/code/__HELPERS/logging/_logging.dm index e6085c0cdc11a9..1e8b688efccad0 100644 --- a/code/__HELPERS/logging/_logging.dm +++ b/code/__HELPERS/logging/_logging.dm @@ -95,10 +95,11 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global")) * * color - color of the log text * * log_globally - boolean checking whether or not we write this log to the log file */ -/atom/proc/log_message(message, message_type, color = null, log_globally = TRUE) +/atom/proc/log_message(message, message_type, color = null, log_globally = TRUE, list/data) if(!log_globally) return - //SKYRAT EDIT ADDITION BEGIN + + //NOVA EDIT ADDITION BEGIN #ifndef SPACEMAN_DMM if(CONFIG_GET(flag/sql_game_log) && CONFIG_GET(flag/sql_enabled)) SSdbcore.add_log_to_mass_insert_queue( @@ -115,61 +116,61 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global")) if(!CONFIG_GET(flag/file_game_log)) return #endif - //SKYRAT EDIT ADDITION END - var/log_text = "[key_name(src)] [message] [loc_name(src)]" + //NOVA EDIT ADDITION END + var/log_text = "[key_name_and_tag(src)] [message] [loc_name(src)]" switch(message_type) /// ship both attack logs and victim logs to the end of round attack.log just to ensure we don't lose information if(LOG_ATTACK, LOG_VICTIM) - log_attack(log_text) + log_attack(log_text, data) if(LOG_SAY) - log_say(log_text) + log_say(log_text, data) if(LOG_WHISPER) - log_whisper(log_text) + log_whisper(log_text, data) if(LOG_EMOTE) - log_emote(log_text) - //SKYRAT EDIT ADDITION BEGIN + log_emote(log_text, data) + //NOVA EDIT ADDITION BEGIN if(LOG_SUBTLE) - log_subtle(log_text) + log_subtle(log_text, data) if(LOG_SUBTLER) - log_subtler(log_text) - //SKYRAT EDIT ADDITION END + log_subtler(log_text, data) + //NOVA EDIT ADDITION END if(LOG_RADIO_EMOTE) - log_radio_emote(log_text) + log_radio_emote(log_text, data) if(LOG_DSAY) - log_dsay(log_text) + log_dsay(log_text, data) if(LOG_PDA) - log_pda(log_text) + log_pda(log_text, data) if(LOG_CHAT) - log_chat(log_text) + log_chat(log_text, data) if(LOG_COMMENT) - log_comment(log_text) + log_comment(log_text, data) if(LOG_TELECOMMS) - log_telecomms(log_text) + log_telecomms(log_text, data) if(LOG_TRANSPORT) - log_transport(log_text) + log_transport(log_text, data) if(LOG_ECON) - log_econ(log_text) + log_econ(log_text, data) if(LOG_OOC) - log_ooc(log_text) + log_ooc(log_text, data) if(LOG_ADMIN) - log_admin(log_text) + log_admin(log_text, data) if(LOG_ADMIN_PRIVATE) - log_admin_private(log_text) + log_admin_private(log_text, data) if(LOG_ASAY) - log_adminsay(log_text) + log_adminsay(log_text, data) if(LOG_OWNERSHIP) - log_game(log_text) + log_game(log_text, data) if(LOG_GAME) - log_game(log_text) + log_game(log_text, data) if(LOG_MECHA) - log_mecha(log_text) + log_mecha(log_text, data) if(LOG_SHUTTLE) - log_shuttle(log_text) + log_shuttle(log_text, data) if(LOG_SPEECH_INDICATORS) - log_speech_indicators(log_text) + log_speech_indicators(log_text, data) else stack_trace("Invalid individual logging type: [message_type]. Defaulting to [LOG_GAME] (LOG_GAME).") - log_game(log_text) + log_game(log_text, data) /* For logging round startup. */ /proc/start_log(log) @@ -266,6 +267,13 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global")) /proc/key_name_admin(whom, include_name = TRUE) return key_name(whom, TRUE, include_name) +/proc/key_name_and_tag(whom, include_link = null, include_name = TRUE) + var/tag = "!tagless!" // whom can be null in key_name() so lets set this as a safety + if(isatom(whom)) + var/atom/subject = whom + tag = subject.tag + return "[key_name(whom, include_link, include_name)] ([tag])" + /proc/loc_name(atom/A) if(!istype(A)) return "(INVALID LOCATION)" diff --git a/code/__HELPERS/logging/attack.dm b/code/__HELPERS/logging/attack.dm index 598882a9ac1cf6..a8ed72def27fc4 100644 --- a/code/__HELPERS/logging/attack.dm +++ b/code/__HELPERS/logging/attack.dm @@ -1,6 +1,6 @@ /// Generic attack logging /proc/log_attack(text, list/data) - logger.Log(LOG_CATEGORY_ATTACK, text) + logger.Log(LOG_CATEGORY_ATTACK, text, data) /** * Log a combat message in the attack log diff --git a/code/__HELPERS/logging/dynamic.dm b/code/__HELPERS/logging/dynamic.dm index 51bba86ca05ff5..488aeaec3be79e 100644 --- a/code/__HELPERS/logging/dynamic.dm +++ b/code/__HELPERS/logging/dynamic.dm @@ -1,5 +1,5 @@ /// Log to dynamic and message admins -/datum/game_mode/dynamic/proc/log_dynamic_and_announce(text) +/datum/controller/subsystem/dynamic/proc/log_dynamic_and_announce(text) message_admins("DYNAMIC: [text]") log_dynamic("[text]") diff --git a/code/__HELPERS/logging/mecha.dm b/code/__HELPERS/logging/mecha.dm index 68c62bad8af3ed..7cca11f856cd6e 100644 --- a/code/__HELPERS/logging/mecha.dm +++ b/code/__HELPERS/logging/mecha.dm @@ -3,7 +3,7 @@ logger.Log(LOG_CATEGORY_MECHA, text, data) /// Logging for equipment installed in a mecha -/obj/item/mecha_parts/mecha_equipment/log_message(message, message_type = LOG_MECHA, color = null, log_globally) +/obj/item/mecha_parts/mecha_equipment/log_message(message, message_type = LOG_MECHA, color = null, log_globally, list/data) if(chassis) return chassis.log_message("ATTACHMENT: [src] [message]", message_type, color) return ..() diff --git a/code/__HELPERS/logging/mob.dm b/code/__HELPERS/logging/mob.dm index 0a48833a2616f5..05893970db6ad9 100644 --- a/code/__HELPERS/logging/mob.dm +++ b/code/__HELPERS/logging/mob.dm @@ -11,17 +11,18 @@ /// Logs a message in a mob's individual log, and in the global logs as well if log_globally is true -/mob/log_message(message, message_type, color = null, log_globally = TRUE) +/mob/log_message(message, message_type, color = null, log_globally = TRUE, list/data) if(!LAZYLEN(message)) stack_trace("Empty message") return // Cannot use the list as a map if the key is a number, so we stringify it (thank you BYOND) var/smessage_type = num2text(message_type, MAX_BITFLAG_DIGITS) + var/datum/player_details/client_details = client?.player_details - if(client) - if(!islist(client.player_details.logging[smessage_type])) - client.player_details.logging[smessage_type] = list() + if(!isnull(client_details)) + if(!islist(client_details.logging[smessage_type])) + client_details.logging[smessage_type] = list() if(!islist(logging[smessage_type])) logging[smessage_type] = list() @@ -43,16 +44,16 @@ colored_message = "(ASAY) [colored_message]" if(LOG_EMOTE) colored_message = "(EMOTE) [colored_message]" - //SKYRAT EDIT ADDITION BEGIN + //NOVA EDIT ADDITION BEGIN if(LOG_SUBTLE) colored_message = "(EMOTE) (SUBTLE) [colored_message]" if(LOG_SUBTLER) colored_message = "(EMOTE) (SUBTLER) [colored_message]" - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END if(LOG_RADIO_EMOTE) colored_message = "(RADIOEMOTE) [colored_message]" - var/list/timestamped_message = list("\[[time_stamp(format = "YYYY-MM-DD hh:mm:ss")]\] [key_name(src)] [loc_name(src)] (Event #[LAZYLEN(logging[smessage_type])])" = colored_message) + var/list/timestamped_message = list("\[[time_stamp(format = "YYYY-MM-DD hh:mm:ss")]\] [key_name_and_tag(src)] [loc_name(src)] (Event #[LAZYLEN(logging[smessage_type])])" = colored_message) logging[smessage_type] += timestamped_message diff --git a/code/__HELPERS/maths.dm b/code/__HELPERS/maths.dm index 116fb34fad5323..c28357eb478b91 100644 --- a/code/__HELPERS/maths.dm +++ b/code/__HELPERS/maths.dm @@ -217,3 +217,8 @@ return max(new_value, threshold) if(sign == -1) return min(new_value, threshold * -1) + +/// Takes two values x and y, and returns 1/((1/x) + y) +/// Useful for providing an additive modifier to a value that is used as a divisor, such as `/obj/projectile/var/speed` +/proc/reciprocal_add(x, y) + return 1/((1/x)+y) diff --git a/code/__HELPERS/matrices.dm b/code/__HELPERS/matrices.dm index 075a5e5ae0eb68..e6a9e03884938d 100644 --- a/code/__HELPERS/matrices.dm +++ b/code/__HELPERS/matrices.dm @@ -102,15 +102,6 @@ list(-1,0,0,0, 0,-1,0,0, 0,0,-1,0, 0,0,0,1, 1,1,1,0) list(0.393,0.349,0.272,0, 0.769,0.686,0.534,0, 0.189,0.168,0.131,0, 0,0,0,1, 0,0,0,0) */ -//Does nothing -/proc/color_matrix_identity() - return list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0,0,0,0) - -//Adds/subtracts overall lightness -//0 is identity, 1 makes everything white, -1 makes everything black -/proc/color_matrix_lightness(power) - return list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, power,power,power,0) - //Changes distance hues have from grey while maintaining the overall lightness. Greys are unaffected. //1 is identity, 0 is greyscale, >1 oversaturates colors /proc/color_matrix_saturation(value) @@ -121,12 +112,6 @@ list(0.393,0.349,0.272,0, 0.769,0.686,0.534,0, 0.189,0.168,0.131,0, 0,0,0,1, 0,0 return list(R + value,R,R,0, G,G + value,G,0, B,B,B + value,0, 0,0,0,1, 0,0,0,0) -//Changes distance colors have from rgb(127,127,127) grey -//1 is identity. 0 makes everything grey >1 blows out colors and greys -/proc/color_matrix_contrast(value) - var/add = (1 - value) / 2 - return list(value,0,0,0, 0,value,0,0, 0,0,value,0, 0,0,0,1, add,add,add,0) - //Moves all colors angle degrees around the color wheel while maintaining intensity of the color and not affecting greys //0 is identity, 120 moves reds to greens, 240 moves reds to blues /proc/color_matrix_rotate_hue(angle) @@ -159,9 +144,9 @@ round(cos_inv_third+sqrt3_sin, 0.001), round(cos_inv_third-sqrt3_sin, 0.001), ro //Returns a matrix addition of A with B /proc/color_matrix_add(list/A, list/B) if(!istype(A) || !istype(B)) - return color_matrix_identity() + return COLOR_MATRIX_IDENTITY if(A.len != 20 || B.len != 20) - return color_matrix_identity() + return COLOR_MATRIX_IDENTITY var/list/output = list() output.len = 20 for(var/value in 1 to 20) @@ -171,9 +156,9 @@ round(cos_inv_third+sqrt3_sin, 0.001), round(cos_inv_third-sqrt3_sin, 0.001), ro //Returns a matrix multiplication of A with B /proc/color_matrix_multiply(list/A, list/B) if(!istype(A) || !istype(B)) - return color_matrix_identity() + return COLOR_MATRIX_IDENTITY if(A.len != 20 || B.len != 20) - return color_matrix_identity() + return COLOR_MATRIX_IDENTITY var/list/output = list() output.len = 20 var/x = 1 @@ -191,14 +176,14 @@ round(cos_inv_third+sqrt3_sin, 0.001), round(cos_inv_third-sqrt3_sin, 0.001), ro */ /proc/color_to_full_rgba_matrix(color, return_identity_on_fail = TRUE) if(!color) - return color_matrix_identity() + return COLOR_MATRIX_IDENTITY if(istext(color)) var/list/L = ReadRGB(color) if(!L) var/message = "Invalid/unsupported color ([color]) argument in color_to_full_rgba_matrix()" if(return_identity_on_fail) stack_trace(message) - return color_matrix_identity() + return COLOR_MATRIX_IDENTITY CRASH(message) return list(L[1]/255,0,0,0, 0,L[2]/255,0,0, 0,0,L[3]/255,0, 0,0,0,L.len>3?L[4]/255:1, 0,0,0,0) if(!islist(color)) //invalid format @@ -231,7 +216,7 @@ round(cos_inv_third+sqrt3_sin, 0.001), round(cos_inv_third-sqrt3_sin, 0.001), ro var/message = "Invalid/unsupported color (list of length [L.len]) argument in color_to_full_rgba_matrix()" if(return_identity_on_fail) stack_trace(message) - return color_matrix_identity() + return COLOR_MATRIX_IDENTITY CRASH(message) #undef LUMA_R diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index df98ab953fa86e..c35c591bc7cc1f 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -58,7 +58,7 @@ /proc/random_backpack() return pick(GLOB.backpacklist) -//SKYRAT EDIT REMOVAL - CUSTOMIZATION (moved to modular) +// NOVA EDIT REMOVAL - CUSTOMIZATION (moved to modular) /* /proc/random_features() if(!GLOB.tails_list.len) @@ -113,9 +113,8 @@ "tail_monkey" = "Monkey", "pod_hair" = pick(GLOB.pod_hair_list), )) - */ - //SKYRAT EDIT REMOVAL END - +*/ +//NOVA EDIT REMOVAL END /proc/random_hairstyle(gender) switch(gender) @@ -219,7 +218,7 @@ GLOBAL_LIST_EMPTY(species_list) /proc/age2agedescription(age) switch(age) - if(0 to 30) //SKYRAT EDIT CHANGE - NO + if(0 to 30) //NOVA EDIT CHANGE - NO return "young adult" if(30 to 45) return "adult" @@ -589,8 +588,6 @@ GLOBAL_LIST_EMPTY(species_list) #define ISADVANCEDTOOLUSER(mob) (HAS_TRAIT(mob, TRAIT_ADVANCEDTOOLUSER) && !HAS_TRAIT(mob, TRAIT_DISCOORDINATED_TOOL_USER)) -#define IS_IN_STASIS(mob) (mob.has_status_effect(/datum/status_effect/grouped/stasis) || mob.has_status_effect(/datum/status_effect/embryonic)) - /// Gets the client of the mob, allowing for mocking of the client. /// You only need to use this if you know you're going to be mocking clients somewhere else. #define GET_CLIENT(mob) (##mob.client || ##mob.mock_client) @@ -626,12 +623,11 @@ GLOBAL_LIST_EMPTY(species_list) moblist += mob_to_sort for(var/mob/living/basic/mob_to_sort in sortmob) moblist += mob_to_sort - // SKYRAT EDIT START - SOULCATCHERS + // NOVA EDIT START - SOULCATCHERS for(var/mob/living/soulcatcher_soul/mob_to_sort in sortmob) moblist += mob_to_sort - // SKYRAT EDIT END - SOULCATCHERS + // NOVA EDIT END - SOULCATCHERS return moblist - ///returns a mob type controlled by a specified ckey /proc/get_mob_by_ckey(key) if(!key) @@ -711,11 +707,6 @@ GLOBAL_LIST_EMPTY(species_list) if(isliving(occupant)) mob_occupant = occupant - else if(isbodypart(occupant)) - var/obj/item/bodypart/head/head = occupant - - mob_occupant = head.brainmob - else if(isorgan(occupant)) var/obj/item/organ/internal/brain/brain = occupant mob_occupant = brain.brainmob diff --git a/code/__HELPERS/nameof.dm b/code/__HELPERS/nameof.dm index 7cd5777f4652bb..5a2fd60e710069 100644 --- a/code/__HELPERS/nameof.dm +++ b/code/__HELPERS/nameof.dm @@ -8,8 +8,4 @@ /** * NAMEOF that actually works in static definitions because src::type requires src to be defined */ -#if DM_VERSION >= 515 #define NAMEOF_STATIC(datum, X) (nameof(type::##X)) -#else -#define NAMEOF_STATIC(datum, X) (#X || ##datum.##X) -#endif diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm index 33bb0348df568d..4c843c907859f4 100644 --- a/code/__HELPERS/names.dm +++ b/code/__HELPERS/names.dm @@ -21,7 +21,7 @@ GLOBAL_VAR(command_name) if (GLOB.command_name) return GLOB.command_name - var/name = "Central Command" + var/name = "Conglomeration of Colonists" GLOB.command_name = name return name @@ -118,7 +118,7 @@ GLOBAL_VAR(command_name) // Full if (prob(60)) - name += pick("Syndicate", "Consortium", "Collective", "Corporation", "Group", "Holdings", "Biotech", "Industries", "Systems", "Products", "Chemicals", "Enterprises", "Family", "Creations", "International", "Intergalactic", "Interplanetary", "Foundation", "Positronics", "Hive") + name += pick("Symphionia", "Consortium", "Collective", "Corporation", "Group", "Holdings", "Biotech", "Industries", "Systems", "Products", "Chemicals", "Enterprises", "Family", "Creations", "International", "Intergalactic", "Interplanetary", "Foundation", "Positronics", "Hive") // Broken else name += pick("Syndi", "Corp", "Bio", "System", "Prod", "Chem", "Inter", "Hive") diff --git a/code/__HELPERS/paths/jps.dm b/code/__HELPERS/paths/jps.dm index 6ef883c7d2b4d5..2dc46dea1b7cf6 100644 --- a/code/__HELPERS/paths/jps.dm +++ b/code/__HELPERS/paths/jps.dm @@ -38,7 +38,7 @@ f_value = number_tiles + heuristic // otherwise, no parent node means this is from a subscan lateral scan, so we just need the tile for now until we call [datum/jps/proc/update_parent] on it -/datum/jps_node/Destroy(force, ...) +/datum/jps_node/Destroy(force) previous_node = null return ..() @@ -50,7 +50,6 @@ heuristic = get_dist(tile, node_goal) f_value = number_tiles + heuristic -/// TODO: Macro this to reduce proc overhead /proc/HeapPathWeightCompare(datum/jps_node/a, datum/jps_node/b) return b.f_value - a.f_value diff --git a/code/__HELPERS/paths/path.dm b/code/__HELPERS/paths/path.dm index 14241ef8e706e5..28ef66aa45e6a6 100644 --- a/code/__HELPERS/paths/path.dm +++ b/code/__HELPERS/paths/path.dm @@ -97,7 +97,7 @@ /// Datum that holds the canpass info of this pathing attempt. This is what CanAstarPass sees var/datum/can_pass_info/pass_info -/datum/pathfind/Destroy(force, ...) +/datum/pathfind/Destroy(force) . = ..() SSpathfinder.active_pathing -= src SSpathfinder.currentrun -= src diff --git a/code/__HELPERS/priority_announce.dm b/code/__HELPERS/priority_announce.dm index a7d47fb8f09225..f63b90b83a1270 100644 --- a/code/__HELPERS/priority_announce.dm +++ b/code/__HELPERS/priority_announce.dm @@ -37,7 +37,7 @@ * * encode_title - if TRUE, the title will be HTML encoded * * encode_text - if TRUE, the text will be HTML encoded */ -/proc/priority_announce(text, title = "", sound, type, sender_override, has_important_message = FALSE, list/mob/players, encode_title = TRUE, encode_text = TRUE, color_override) +/proc/priority_announce(text, title = "", sound, type, sender_override, has_important_message = FALSE, list/mob/players = GLOB.player_list, encode_title = TRUE, encode_text = TRUE, color_override) if(!text) return @@ -85,18 +85,23 @@ dispatch_announcement_to_players(finalized_announcement, players, sound) - if(isnull(sender_override)) + if(isnull(sender_override) && players == GLOB.player_list) if(length(title) > 0) - GLOB.news_network.submit_article(title + "

" + text, "Central Command", "Station Announcements", null) + GLOB.news_network.submit_article(title + "

" + text, "[command_name()]", "Station Announcements", null) else - GLOB.news_network.submit_article(text, "Central Command Update", "Station Announcements", null) + GLOB.news_network.submit_article(text, "[command_name()] Update", "Station Announcements", null) /proc/print_command_report(text = "", title = null, announce=TRUE) if(!title) title = "Classified [command_name()] Update" if(announce) - priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", SSstation.announcer.get_rand_report_sound(), has_important_message = TRUE) + priority_announce( + text = "A report has been downloaded and printed out at all communications consoles.", + title = "Incoming Classified Message", + sound = SSstation.announcer.get_rand_report_sound(), + has_important_message = TRUE, + ) var/datum/comm_message/message = new message.title = title @@ -137,7 +142,7 @@ else finalized_announcement = CHAT_ALERT_DEFAULT_SPAN(jointext(minor_announcement_strings, "")) - var/custom_sound = sound_override || (alert ? 'modular_skyrat/modules/alerts/sound/alerts/alert1.ogg' : 'sound/misc/notice2.ogg') // SKYRAT EDIT CHANGE - CUSTOM ANNOUNCEMENTS - Original: 'sound/misc/notice1.ogg' + var/custom_sound = sound_override || (alert ? 'modular_nova/modules/alerts/sound/alerts/alert1.ogg' : 'sound/misc/notice2.ogg') // NOVA EDIT CHANGE - CUSTOM ANNOUNCEMENTS - Original: 'sound/misc/notice1.ogg' dispatch_announcement_to_players(finalized_announcement, players, custom_sound, should_play_sound) /// Sends an announcement about the level changing to players. Uses the passed in datum and the subsystem's previous security level to generate the message. @@ -180,11 +185,8 @@ return jointext(returnable_strings, "") /// Proc that just dispatches the announcement to our applicable audience. Only the announcement is a mandatory arg. -/proc/dispatch_announcement_to_players(announcement, list/players, sound_override = null, should_play_sound = TRUE) - if(!players) - players = GLOB.player_list - - // SKYRAT EDIT CHANGE BEGIN - CUSTOM ANNOUNCEMENTS +/proc/dispatch_announcement_to_players(announcement, list/players = GLOB.player_list, sound_override = null, should_play_sound = TRUE) + // NOVA EDIT CHANGE BEGIN - CUSTOM ANNOUNCEMENTS /* Original: var/sound_to_play = !isnull(sound_override) ? sound_override : 'sound/misc/notice2.ogg' @@ -217,7 +219,7 @@ continue to_chat(target, announcement) - // SKYRAT EDIT CHANGE END - CUSTOM ANNOUNCEMENTS + // NOVA EDIT CHANGE END - CUSTOM ANNOUNCEMENTS #undef MAJOR_ANNOUNCEMENT_TITLE #undef MAJOR_ANNOUNCEMENT_TEXT diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index bad17bdc28f29b..29f0d265240265 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -234,32 +234,32 @@ GLOBAL_LIST_INIT(achievements_unlocked, list()) CHECK_TICK - /* ///SKYRAT EDIT START + /* ///NOVA EDIT START // Add AntagHUD to everyone, see who was really evil the whole time! for(var/datum/atom_hud/alternate_appearance/basic/antagonist_hud/antagonist_hud in GLOB.active_alternate_appearances) for(var/mob/player as anything in GLOB.player_list) antagonist_hud.show_to(player) CHECK_TICK - ///Skyrat EDIT END + ///NOVA EDIT END */ //Set news report and mode result - mode.set_round_result() + SSdynamic.set_round_result() to_chat(world, span_infoplain(span_big(span_bold("


The round has ended.")))) log_game("The round has ended.") send2chat(new /datum/tgs_message_content("[GLOB.round_id ? "Round [GLOB.round_id]" : "The round has"] just ended."), CONFIG_GET(string/channel_announce_end_game)) send2adminchat("Server", "Round just ended.") - /* //SKYRAT EDIT - START (DISCORD Updates) + /* //NOVA EDIT - START (DISCORD Updates) MOVED CHECK INTO TICKER.DM if(length(CONFIG_GET(keyed_list/cross_server))) send_news_report() */ - send2chat("The current round has ended. Please standby for your shift interlude Nanotrasen News Network's report!", CONFIG_GET(string/channel_announce_end_game)) + send2chat("The current round has ended. Please standby for your shift interlude Symphionia News Network's report!", CONFIG_GET(string/channel_announce_end_game)) send2chat(send_news_report(), CONFIG_GET(string/channel_announce_end_game)) - //SKYRAT EDIT - END + //NOVA EDIT - END CHECK_TICK @@ -322,7 +322,7 @@ GLOBAL_LIST_INIT(achievements_unlocked, list()) //Antagonists parts += antag_report() - parts += opfor_report() //SKYRAT EDIT ADDITION + parts += opfor_report() //NOVA EDIT ADDITION parts += hardcore_random_report() @@ -364,17 +364,17 @@ GLOBAL_LIST_INIT(achievements_unlocked, list()) //ignore this comment, it fixes the broken sytax parsing caused by the " above else parts += "[FOURSPACES]Nobody died this shift!" - if(istype(SSticker.mode, /datum/game_mode/dynamic)) - var/datum/game_mode/dynamic/mode = SSticker.mode - parts += "[FOURSPACES]Threat level: [mode.threat_level]" - parts += "[FOURSPACES]Threat left: [mode.mid_round_budget]" - if(mode.roundend_threat_log.len) - parts += "[FOURSPACES]Threat edits:" - for(var/entry as anything in mode.roundend_threat_log) - parts += "[FOURSPACES][FOURSPACES][entry]
" - parts += "[FOURSPACES]Executed rules:" - for(var/datum/dynamic_ruleset/rule in mode.executed_rules) - parts += "[FOURSPACES][FOURSPACES][rule.ruletype] - [rule.name]: -[rule.cost + rule.scaled_times * rule.scaling_cost] threat" + + parts += "[FOURSPACES]Threat level: [SSdynamic.threat_level]" + parts += "[FOURSPACES]Threat left: [SSdynamic.mid_round_budget]" + if(SSdynamic.roundend_threat_log.len) + parts += "[FOURSPACES]Threat edits:" + for(var/entry as anything in SSdynamic.roundend_threat_log) + parts += "[FOURSPACES][FOURSPACES][entry]
" + parts += "[FOURSPACES]Executed rules:" + for(var/datum/dynamic_ruleset/rule in SSdynamic.executed_rules) + parts += "[FOURSPACES][FOURSPACES][rule.ruletype] - [rule.name]: -[rule.cost + rule.scaled_times * rule.scaling_cost] threat" + return parts.Join("
") /client/proc/roundend_report_file() @@ -471,7 +471,7 @@ GLOBAL_LIST_INIT(achievements_unlocked, list()) var/mob/living/silicon/ai/aiPlayer = i var/datum/mind/aiMind = aiPlayer.deployed_shell?.mind || aiPlayer.mind if(aiMind) - parts += "[aiPlayer.name]'s laws [aiPlayer.stat != DEAD ? "at the end of the round" : "when it was [span_redtext("deactivated")]"] were:" //SKYRAT EDIT CHANGE + parts += "[aiPlayer.name]'s laws [aiPlayer.stat != DEAD ? "at the end of the round" : "when it was [span_redtext("deactivated")]"] were:" //NOVA EDIT CHANGE parts += aiPlayer.laws.get_law_list(include_zeroth=TRUE) parts += "Total law changes: [aiPlayer.law_change_counter]" @@ -482,19 +482,19 @@ GLOBAL_LIST_INIT(achievements_unlocked, list()) for(var/mob/living/silicon/robot/robo in aiPlayer.connected_robots) borg_num-- if(robo.mind) - //SKYRAT EDIT CHANGE BEGIN - ROUNDEND - //parts += "[robo.name] (Played by: [robo.mind.key])[robo.stat == DEAD ? " [span_redtext("(Deactivated)")]" : ""][borg_num ?", ":""]" - SKYRAT EDIT - ORIGINAL + //NOVA EDIT CHANGE BEGIN - ROUNDEND + //parts += "[robo.name] (Played by: [robo.mind.key])[robo.stat == DEAD ? " [span_redtext("(Deactivated)")]" : ""][borg_num ?", ":""]" - NOVA EDIT - ORIGINAL parts += "[robo.name] [robo.stat == DEAD ? " [span_redtext("(Deactivated)")]" : ""][borg_num ?", ":""]" - //SKYRAT EDIT CHANGE END + //NOVA EDIT CHANGE END if(!borg_spacer) borg_spacer = TRUE for (var/mob/living/silicon/robot/robo in GLOB.silicon_mobs) if (!robo.connected_ai && robo.mind) - //SKYRAT EDIT CHANGE BEGIN - ROUNDEND + //NOVA EDIT CHANGE BEGIN - ROUNDEND //parts += "[borg_spacer?"
":""][robo.name] (Played by: [robo.mind.key]) [(robo.stat != DEAD)? "[span_greentext("survived")] as an AI-less borg!" : "was [span_redtext("unable to survive")] the rigors of being a cyborg without an AI."] Its laws were:" parts += "[borg_spacer?"
":""][robo.name] [(robo.stat != DEAD)? "[span_greentext("survived")] as an AI-less borg!" : "was [span_redtext("unable to survive")] the rigors of being a cyborg without an AI."] Its laws were:" - //SKYRAT EDIT CHANGE END + //NOVA EDIT CHANGE END if(robo) //How the hell do we lose robo between here and the world messages directly above this? parts += robo.laws.get_law_list(include_zeroth=TRUE) @@ -700,10 +700,10 @@ GLOBAL_LIST_INIT(achievements_unlocked, list()) var/jobtext = "" if(!is_unassigned_job(ply.assigned_role)) jobtext = " the [ply.assigned_role.title]" - //SKYRAT EDIT CHANGE BEGIN - ROUNDEND - //var/text = "[ply.key] was [ply.name][jobtext] and" - SKYRAT EDIT - ORIGINAL + //NOVA EDIT CHANGE BEGIN - ROUNDEND + //var/text = "[ply.key] was [ply.name][jobtext] and" - NOVA EDIT - ORIGINAL var/text = "[ply.name][jobtext]" - //SKYRAT EDIT CHANGE END + //NOVA EDIT CHANGE END if(ply.current) if(ply.current.stat == DEAD) text += " [span_redtext("died")]" @@ -827,7 +827,7 @@ GLOBAL_LIST_INIT(achievements_unlocked, list()) parts += "Total Achievements Earned: [length(GLOB.achievements_unlocked)]!
" parts += "
    " for(var/datum/achievement_report/cheevo_report in GLOB.achievements_unlocked) - parts += "[cheevo_report.winner] earned the [span_greentext("'[cheevo_report.cheevo]'")] achievement at [cheevo_report.award_location]!
    " // SKYRAT EDIT - No ckeys in the round end report - ORIGINAL: parts += "
    [cheevo_report.winner_key] was [cheevo_report.winner], who earned the [span_greentext("'[cheevo_report.cheevo]'")] achievement at [cheevo_report.award_location]!
    " + parts += "[cheevo_report.winner] earned the [span_greentext("'[cheevo_report.cheevo]'")] achievement at [cheevo_report.award_location]!
    " // NOVA EDIT - No ckeys in the round end report - ORIGINAL: parts += "
    [cheevo_report.winner_key] was [cheevo_report.winner], who earned the [span_greentext("'[cheevo_report.cheevo]'")] achievement at [cheevo_report.award_location]!
    " parts += "
" return "
    [parts.Join()]
" diff --git a/code/__HELPERS/sanitize_values.dm b/code/__HELPERS/sanitize_values.dm index 002ac24c73232c..f4de5bedab7ade 100644 --- a/code/__HELPERS/sanitize_values.dm +++ b/code/__HELPERS/sanitize_values.dm @@ -53,11 +53,11 @@ /proc/sanitize_hexcolor(color, desired_format = DEFAULT_HEX_COLOR_LEN, include_crunch = TRUE, default) var/crunch = include_crunch ? "#" : "" - //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION + //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION if(islist(color)) var/list/color_list = color color = color_list.Join() - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END if(!istext(color)) color = "" diff --git a/code/__HELPERS/stack_trace.dm b/code/__HELPERS/stack_trace.dm index 5c220d7a74a46e..bb2d78de110805 100644 --- a/code/__HELPERS/stack_trace.dm +++ b/code/__HELPERS/stack_trace.dm @@ -1,4 +1,4 @@ /// gives us the stack trace from CRASH() without ending the current proc. /// Do not call directly, use the [stack_trace] macro instead. /proc/_stack_trace(message, file, line) - CRASH("[message] ([file]:[line])") + CRASH("[message][WORKAROUND_IDENTIFIER][json_encode(list(file, line))][WORKAROUND_IDENTIFIER]") diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 1e39cd6eaf3d9b..d12ac9a2d50ca0 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -157,7 +157,7 @@ * * allow_numbers - allows numbers and common special characters - used for silicon/other weird things names * * cap_after_symbols - words like Bob's will be capitalized to Bob'S by default. False is good for titles. */ -/proc/reject_bad_name(t_in, allow_numbers = TRUE, max_length = MAX_NAME_LEN, ascii_only = TRUE, strict = FALSE, cap_after_symbols = TRUE) // SKYRAT EDIT CHANGE - allow_numbers to TRUE +/proc/reject_bad_name(t_in, allow_numbers = TRUE, max_length = MAX_NAME_LEN, ascii_only = TRUE, strict = FALSE, cap_after_symbols = TRUE) // NOVA EDIT CHANGE - allow_numbers to TRUE if(!t_in) return //Rejects the input if it is null diff --git a/code/__HELPERS/traits.dm b/code/__HELPERS/traits.dm index ba99b2e1e7ff65..fcb0593bf230e4 100644 --- a/code/__HELPERS/traits.dm +++ b/code/__HELPERS/traits.dm @@ -2,32 +2,34 @@ #define TRAIT_CALLBACK_REMOVE(target, trait, source) CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(___TraitRemove), ##target, ##trait, ##source) ///DO NOT USE ___TraitAdd OR ___TraitRemove as a replacement for ADD_TRAIT / REMOVE_TRAIT defines. To be used explicitly for callback. -/proc/___TraitAdd(target,trait,source) +/proc/___TraitAdd(target, trait, source) if(!target || !trait || !source) return + if(islist(target)) - for(var/i in target) - if(!isatom(i)) - continue - var/atom/the_atom = i - ADD_TRAIT(the_atom,trait,source) - else if(isatom(target)) - var/atom/the_atom2 = target - ADD_TRAIT(the_atom2,trait,source) + for(var/datum/listed_target in target) + ADD_TRAIT(listed_target, trait, source) + return + + ASSERT(isdatum(target), "Invalid target used in TRAIT_CALLBACK_ADD! Expected a datum reference, got [target] instead.") + + var/datum/datum_target = target + ADD_TRAIT(datum_target, trait, source) ///DO NOT USE ___TraitAdd OR ___TraitRemove as a replacement for ADD_TRAIT / REMOVE_TRAIT defines. To be used explicitly for callback. -/proc/___TraitRemove(target,trait,source) +/proc/___TraitRemove(target, trait, source) if(!target || !trait || !source) return + if(islist(target)) - for(var/i in target) - if(!isatom(i)) - continue - var/atom/the_atom = i - REMOVE_TRAIT(the_atom,trait,source) - else if(isatom(target)) - var/atom/the_atom2 = target - REMOVE_TRAIT(the_atom2,trait,source) + for(var/datum/listed_target in target) + REMOVE_TRAIT(listed_target, trait, source) + return + + ASSERT(isdatum(target), "Invalid target used in TRAIT_CALLBACK_REMOVE! Expected a datum reference, got [target] instead.") + + var/datum/datum_target = target + REMOVE_TRAIT(datum_target, trait, source) /// Proc that handles adding multiple traits to a target via a list. Must have a common source and target. diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 3b2d52fbbb674c..98e48852094349 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -337,7 +337,7 @@ GLOBAL_LIST_INIT(modulo_angle_to_dir, list(NORTH,NORTHEAST,EAST,SOUTHEAST,SOUTH, /proc/color_hex2color_matrix(string) var/length = length(string) if((length != 7 && length != 9) || length != length_char(string)) - return color_matrix_identity() + return COLOR_MATRIX_IDENTITY var/r = hex2num(copytext(string, 2, 4))/255 var/g = hex2num(copytext(string, 4, 6))/255 var/b = hex2num(copytext(string, 6, 8))/255 @@ -345,7 +345,7 @@ GLOBAL_LIST_INIT(modulo_angle_to_dir, list(NORTH,NORTHEAST,EAST,SOUTHEAST,SOUTH, if(length == 9) a = hex2num(copytext(string, 8, 10))/255 if(!isnum(r) || !isnum(g) || !isnum(b) || !isnum(a)) - return color_matrix_identity() + return COLOR_MATRIX_IDENTITY return list(r,0,0,0, 0,g,0,0, 0,0,b,0, 0,0,0,a, 0,0,0,0) //will drop all values not on the diagonal diff --git a/code/__HELPERS/type_processing.dm b/code/__HELPERS/type_processing.dm index 2323699fe8afa4..117067a0578289 100644 --- a/code/__HELPERS/type_processing.dm +++ b/code/__HELPERS/type_processing.dm @@ -4,32 +4,86 @@ . = list() for(var/type in types) var/typename = "[type]" + // Longest paths comes first var/static/list/TYPES_SHORTCUTS = list( /obj/effect/decal/cleanable = "CLEANABLE", /obj/item/bodypart = "BODYPART", /obj/item/radio/headset = "HEADSET", - /obj/item/clothing/head/helmet/space = "SPESSHELMET", + /obj/item/clothing/accessory = "ACCESSORY", + /obj/item/clothing/mask/gas = "GASMASK", + /obj/item/clothing/mask = "MASK", + /obj/item/clothing/gloves = "GLOVES", + /obj/item/clothing/shoes = "SHOES", + /obj/item/clothing/under/plasmaman = "PLASMAMAN_SUIT", + /obj/item/clothing/under = "JUMPSUIT", + /obj/item/clothing/suit/armor = "ARMOR", + /obj/item/clothing/suit = "SUIT", + /obj/item/clothing/head/helmet = "HELMET", + /obj/item/clothing/head = "HEAD", + /obj/item/clothing/neck = "NECK", + /obj/item/clothing = "CLOTHING", + /obj/item/storage/backpack = "BACKPACK", + /obj/item/storage/belt = "BELT", /obj/item/book/manual = "MANUAL", - /obj/item/reagent_containers/cup/glass = "DRINK", //longest paths comes first + /obj/item/storage/pill_bottle = "PILL_BOTTLE", + /obj/item/reagent_containers/pill/patch = "MEDPATCH", + /obj/item/reagent_containers/pill = "PILL", + /obj/item/reagent_containers/hypospray/medipen = "MEDIPEN", + /obj/item/reagent_containers/cup/glass = "DRINK", /obj/item/food = "FOOD", /obj/item/reagent_containers = "REAGENT_CONTAINERS", /obj/machinery/atmospherics = "ATMOS_MECH", /obj/machinery/portable_atmospherics = "PORT_ATMOS", - /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack = "MECHA_MISSILE_RACK", + /obj/item/mecha_parts/mecha_equipment/weapon = "MECHA_WEAPON", /obj/item/mecha_parts/mecha_equipment = "MECHA_EQUIP", /obj/item/organ = "ORGAN", + /obj/item/mod/control = "MODSUIT", + /obj/item/mod/module = "MODSUIT_MOD", + /obj/item/gun/ballistic/automatic = "GUN_AUTOMATIC", + /obj/item/gun/ballistic/revolver = "GUN_REVOLVER", + /obj/item/gun/ballistic/rifle = "GUN_RIFLE", + /obj/item/gun/ballistic/shotgun = "GUN_SHOTGUN", + /obj/item/gun/ballistic = "GUN_BALLISTIC", + /obj/item/gun/energy/laser = "GUN_LASER", + /obj/item/gun/energy = "GUN_ENERGY", + /obj/item/gun/magic = "GUN_MAGIC", + /obj/item/gun = "GUN", + /obj/item/stack/sheet/mineral = "MINERAL_SHEET", + /obj/item/stack/sheet = "SHEET", + /obj/item/stack/ore = "ORE", + /obj/item/ai_module = "AI_LAW_MODULE", + /obj/item/circuitboard/machine = "MACHINE_BOARD", + /obj/item/circuitboard/computer = "COMPUTER_BOARD", + /obj/item/circuitboard = "CIRCUITBOARD", /obj/item = "ITEM", + /obj/structure/closet/crate/secure = "LOCKED_CRATE", + /obj/structure/closet/crate = "CRATE", + /obj/structure/closet/secure_closet = "LOCKED_CLOSET", + /obj/structure/closet = "CLOSET", + /obj/structure = "STRUCTURE", + /obj/machinery/door/airlock = "AIRLOCK", + /obj/machinery/door = "DOOR", + /obj/machinery/rnd/production = "RND_FABRICATOR", + /obj/machinery/computer/camera_advanced/shuttle_docker = "DOCKING_COMPUTER", + /obj/machinery/computer = "COMPUTER", + /obj/machinery/vending/wardrobe = "JOBDROBE", + /obj/machinery/vending = "VENDING", /obj/machinery = "MACHINERY", /obj/effect = "EFFECT", + /obj/projectile = "PROJECTILE", /obj = "O", /datum = "D", /turf/open = "OPEN", /turf/closed = "CLOSED", /turf = "T", + /mob/living/carbon/human = "HUMANOID", /mob/living/carbon = "CARBON", /mob/living/simple_animal = "SIMPLE", + /mob/living/basic = "BASIC", + /mob/living/silicon/robot = "CYBORG", + /mob/living/silicon = "SILICON", /mob/living = "LIVING", - /mob = "M" + /mob = "M", ) for (var/tn in TYPES_SHORTCUTS) if(copytext(typename, 1, length("[tn]/") + 1) == "[tn]/" /*findtextEx(typename,"[tn]/",1,2)*/ ) diff --git a/code/__HELPERS/visual_effects.dm b/code/__HELPERS/visual_effects.dm new file mode 100644 index 00000000000000..d219d11e1ce823 --- /dev/null +++ b/code/__HELPERS/visual_effects.dm @@ -0,0 +1,127 @@ +/** + * Causes the passed atom / image to appear floating, + * playing a simple animation where they move up and down by 2 pixels (looping) + * + * In most cases you should NOT call this manually, instead use [/datum/element/movetype_handler]! + * This is just so you can apply the animation to things which can be animated but are not movables (like images) + */ +#define DO_FLOATING_ANIM(target) \ + animate(target, pixel_y = 2, time = 1 SECONDS, loop = -1, flags = ANIMATION_RELATIVE); \ + animate(pixel_y = -2, time = 1 SECONDS, flags = ANIMATION_RELATIVE) + +/** + * Stops the passed atom / image from appearing floating + * (Living mobs also have a 'body_position_pixel_y_offset' variable that has to be taken into account here) + * + * In most cases you should NOT call this manually, instead use [/datum/element/movetype_handler]! + * This is just so you can apply the animation to things which can be animated but are not movables (like images) + */ +#define STOP_FLOATING_ANIM(target) \ + var/final_pixel_y = 0; \ + if(ismovable(target)) { \ + var/atom/movable/movable_target = target; \ + final_pixel_y = movable_target.base_pixel_y; \ + }; \ + if(isliving(target)) { \ + var/mob/living/living_target = target; \ + 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) + +///Animates source spinning around itself. For docmentation on the args, check atom/proc/SpinAnimation() +/atom/proc/do_spin_animation(speed = 1 SECONDS, loops = -1, segments = 3, angle = 120, parallel = TRUE) + var/list/matrices = list() + for(var/i in 1 to segments-1) + var/matrix/segment_matrix = matrix(transform) + segment_matrix.Turn(angle*i) + matrices += segment_matrix + var/matrix/last = matrix(transform) + matrices += last + + speed /= segments + + if(parallel) + animate(src, transform = matrices[1], time = speed, loops , flags = ANIMATION_PARALLEL) + else + animate(src, transform = matrices[1], time = speed, loops) + for(var/i in 2 to segments) //2 because 1 is covered above + animate(transform = matrices[i], time = speed) + //doesn't have an object argument because this is "Stacking" with the animate call above + //3 billion% intentional + +/// Similar to shake but more spasm-y and jerk-y +/atom/proc/spasm_animation(loops = -1) + var/list/transforms = list( + matrix(transform).Translate(-1, 0), + matrix(transform).Translate(0, 1), + matrix(transform).Translate(1, 0), + matrix(transform).Translate(0, -1), + matrix(transform), + ) + + animate(src, transform = transforms[1], time = 0.1, loop = loops) + animate(transform = transforms[2], time = 0.1) + animate(transform = transforms[3], time = 0.2) + animate(transform = transforms[4], time = 0.3) + animate(transform = transforms[5], time = 0.1) + +/** + * Proc called when you want the atom to spin around the center of its icon (or where it would be if its transform var is translated) + * By default, it makes the atom spin forever and ever at a speed of 60 rpm. + * + * Arguments: + * * speed: how much it takes for the atom to complete one 360° rotation + * * loops: how many times do we want the atom to rotate + * * clockwise: whether the atom ought to spin clockwise or counter-clockwise + * * segments: in how many animate calls the rotation is split. Probably unnecessary, but you shouldn't set it lower than 3 anyway. + * * parallel: whether the animation calls have the ANIMATION_PARALLEL flag, necessary for it to run alongside concurrent animations. + */ +/atom/proc/SpinAnimation(speed = 1 SECONDS, loops = -1, clockwise = TRUE, segments = 3, parallel = TRUE) + if(!segments) + return + var/segment = 360/segments + if(!clockwise) + segment = -segment + SEND_SIGNAL(src, COMSIG_ATOM_SPIN_ANIMATION, speed, loops, segments, segment) + do_spin_animation(speed, loops, segments, segment, parallel) + +/// Makes this atom look like a "hologram" +/// So transparent, blue, with a scanline and an emissive glow +/// This is acomplished using a combination of filters and render steps/overlays +/// The degree of the opacity is optional, based off the opacity arg (0 -> 1) +/atom/proc/makeHologram(opacity = 0.5) + // First, we'll make things blue (roughly) and sorta transparent + add_filter("HOLO: Color and Transparent", 1, color_matrix_filter(rgb(125,180,225, opacity * 255))) + // Now we're gonna do a scanline effect + // Gonna take this atom and give it a render target, then use it as a source for a filter + // (We use an atom because it seems as if setting render_target on an MA is just invalid. I hate this engine) + var/atom/movable/scanline = new(null) + scanline.icon = 'icons/effects/effects.dmi' + scanline.icon_state = "scanline" + scanline.appearance_flags |= RESET_TRANSFORM + // * so it doesn't render + var/static/uid_scan = 0 + scanline.render_target = "*HoloScanline [uid_scan]" + uid_scan++ + // Now we add it as a filter, and overlay the appearance so the render source is always around + add_filter("HOLO: Scanline", 2, alpha_mask_filter(render_source = scanline.render_target)) + add_overlay(scanline) + qdel(scanline) + // Annd let's make the sucker emissive, so it glows in the dark + if(!render_target) + var/static/uid = 0 + render_target = "HOLOGRAM [uid]" + uid++ + // I'm using static here to reduce the overhead, it does mean we need to do plane stuff manually tho + var/static/atom/movable/render_step/emissive/glow = new(null) + glow.render_source = render_target + SET_PLANE_EXPLICIT(glow, initial(glow.plane), src) + // We're creating a render step that copies ourselves, and draws it to the emissive plane + // Then we overlay it, and release "ownership" back to this proc, since we get to keep the appearance it generates + // We can't just use an MA from the start cause render_source setting starts going fuckey REALLY quick + var/mutable_appearance/glow_appearance = new(glow) + add_overlay(glow_appearance) + LAZYADD(update_overlays_on_z, glow_appearance) diff --git a/code/__HELPERS/~skyrat_helpers/is_helpers.dm b/code/__HELPERS/~nova_helpers/is_helpers.dm similarity index 91% rename from code/__HELPERS/~skyrat_helpers/is_helpers.dm rename to code/__HELPERS/~nova_helpers/is_helpers.dm index 80f96bf533c3ae..6c46b9295b1641 100644 --- a/code/__HELPERS/~skyrat_helpers/is_helpers.dm +++ b/code/__HELPERS/~nova_helpers/is_helpers.dm @@ -27,6 +27,8 @@ #define ismammal(A) (is_species(A,/datum/species/mammal)) #define isinsect(A) (is_species(A,/datum/species/insect)) #define isfeline(A) (isfelinid(A) || istajaran(A) || HAS_TRAIT(A, TRAIT_FELINE)) +#define iscanine(A) (isvulpkanin(A) || HAS_TRAIT(A, TRAIT_CANINE)) +#define isavian(A) (isteshari(A) || isvox(A) || isvoxprimalis(A) || HAS_TRAIT(A, TRAIT_AVIAN)) // Xen mobs #define isxenmob(A) (istype(A, /mob/living/simple_animal/hostile/blackmesa/xen)) diff --git a/code/__HELPERS/~skyrat_helpers/level_traits.dm b/code/__HELPERS/~nova_helpers/level_traits.dm similarity index 100% rename from code/__HELPERS/~skyrat_helpers/level_traits.dm rename to code/__HELPERS/~nova_helpers/level_traits.dm diff --git a/code/__HELPERS/~skyrat_helpers/logging.dm b/code/__HELPERS/~nova_helpers/logging.dm similarity index 100% rename from code/__HELPERS/~skyrat_helpers/logging.dm rename to code/__HELPERS/~nova_helpers/logging.dm diff --git a/code/__HELPERS/~skyrat_helpers/unsorted.dm b/code/__HELPERS/~nova_helpers/unsorted.dm similarity index 100% rename from code/__HELPERS/~skyrat_helpers/unsorted.dm rename to code/__HELPERS/~nova_helpers/unsorted.dm diff --git a/code/__byond_version_compat.dm b/code/__byond_version_compat.dm index 4cf6c13654b24a..f3677cf2c6449e 100644 --- a/code/__byond_version_compat.dm +++ b/code/__byond_version_compat.dm @@ -1,52 +1,21 @@ // This file contains defines allowing targeting byond versions newer than the supported //Update this whenever you need to take advantage of more recent byond features -#define MIN_COMPILER_VERSION 514 -#define MIN_COMPILER_BUILD 1556 +#define MIN_COMPILER_VERSION 515 +#define MIN_COMPILER_BUILD 1609 #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 514.1556 or higher -#endif - -#if (DM_VERSION == 514 && DM_BUILD > 1575 && DM_BUILD <= 1577) -#error Your version of BYOND currently has a crashing issue that will prevent you from running Dream Daemon test servers. -#error We require developers to test their content, so an inability to test means we cannot allow the compile. -#error Please consider downgrading to 514.1575 or lower. +#error You need version 515.1609 or higher #endif // Keep savefile compatibilty at minimum supported level -#if DM_VERSION >= 515 /savefile/byond_version = MIN_COMPILER_VERSION -#endif -// 515 split call for external libraries into call_ext -#if DM_VERSION < 515 -#define LIBCALL call -#else -#define LIBCALL call_ext -#endif - -// So we want to have compile time guarantees these methods exist on local type, unfortunately 515 killed the .proc/procname and .verb/verbname syntax so we have to use nameof() +// So we want to have compile time guarantees these methods exist on local type +// We use wrappers for this in case some part of the api ever changes, and to make their function more clear // For the record: GLOBAL_VERB_REF would be useless as verbs can't be global. -#if DM_VERSION < 515 - -/// Call by name proc references, checks if the proc exists on either this type or as a global proc. -#define PROC_REF(X) (.proc/##X) -/// Call by name verb references, checks if the verb exists on either this type or as a global verb. -#define VERB_REF(X) (.verb/##X) - -/// Call by name proc reference, checks if the proc exists on either the given type or as a global proc -#define TYPE_PROC_REF(TYPE, X) (##TYPE.proc/##X) -/// Call by name verb reference, checks if the verb exists on either the given type or as a global verb -#define TYPE_VERB_REF(TYPE, X) (##TYPE.verb/##X) - -/// Call by name proc reference, checks if the proc is an existing global proc -#define GLOBAL_PROC_REF(X) (/proc/##X) - -#else - /// Call by name proc references, checks if the proc exists on either this type or as a global proc. #define PROC_REF(X) (nameof(.proc/##X)) /// Call by name verb references, checks if the verb exists on either this type or as a global verb. @@ -59,17 +28,3 @@ /// Call by name proc reference, checks if the proc is an existing global proc #define GLOBAL_PROC_REF(X) (/proc/##X) - -#endif - -#if (DM_VERSION == 515) -/// 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) - -#endif diff --git a/code/_experiments.dm b/code/_experiments.dm index dfb7ec0a167269..8cc5edb429c3c8 100644 --- a/code/_experiments.dm +++ b/code/_experiments.dm @@ -3,32 +3,20 @@ // Any flag you see here can be flipped with the `-D` CLI argument. // For example, if you want to enable EXPERIMENT_MY_COOL_FEATURE, compile with -DEXPERIMENT_MY_COOL_FEATURE -// EXPERIMENT_515_QDEL_HARD_REFERENCE -// - Hold a hard reference for qdeleted items, and check ref_count, rather than using refs. Requires 515+. - -// EXPERIMENT_515_DONT_CACHE_REF -// - Avoids `text_ref` caching, aided by improvements to ref() speed in 515. +// EXPERIMENT_MY_COOL_FEATURE +// - Does something really cool, just so neat, absolutely banging, gaming and chill #if DM_VERSION < 515 -// You can't X-macro custom names :( -#ifdef EXPERIMENT_515_QDEL_HARD_REFERENCE -#warn EXPERIMENT_515_QDEL_HARD_REFERENCE is only available on 515+ -#undef EXPERIMENT_515_QDEL_HARD_REFERENCE -#endif - -#ifdef EXPERIMENT_515_DONT_CACHE_REF -#warn EXPERIMENT_515_DONT_CACHE_REF is only available on 515+ -#undef EXPERIMENT_515_DONT_CACHE_REF -#endif - + // You can't X-macro custom names :( + #ifdef EXPERIMENT_MY_COOL_FEATURE + #warn EXPERIMENT_MY_COOL_FEATURE is only available on 515+ + #undef EXPERIMENT_MY_COOL_FEATURE + #endif #elif defined(UNIT_TESTS) - -#define EXPERIMENT_515_QDEL_HARD_REFERENCE -#define EXPERIMENT_515_DONT_CACHE_REF - + #define EXPERIMENT_MY_COOL_FEATURE #endif #if DM_VERSION >= 516 -#error "Remove all 515 experiments" + #error "Remove all 515 experiments" #endif diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 27c6de53b5336f..276d4d7dce2763 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -119,15 +119,12 @@ DEFINE_BITFIELD(flags_1, list( "ALLOW_DARK_PAINTS_1" = ALLOW_DARK_PAINTS_1, "ATMOS_IS_PROCESSING_1" = ATMOS_IS_PROCESSING_1, "CAN_BE_DIRTY_1" = CAN_BE_DIRTY_1, - "CONDUCT_1" = CONDUCT_1, "HAS_CONTEXTUAL_SCREENTIPS_1" = HAS_CONTEXTUAL_SCREENTIPS_1, "HAS_DISASSOCIATED_STORAGE_1" = HAS_DISASSOCIATED_STORAGE_1, "HOLOGRAM_1" = HOLOGRAM_1, "INITIALIZED_1" = INITIALIZED_1, "IS_ONTOP_1" = IS_ONTOP_1, "IS_PLAYER_COLORABLE_1" = IS_PLAYER_COLORABLE_1, - "IS_SPINNING_1" = IS_SPINNING_1, - "NODECONSTRUCT_1" = NODECONSTRUCT_1, "NO_SCREENTIPS_1" = NO_SCREENTIPS_1, "ON_BORDER_1" = ON_BORDER_1, "PREVENT_CLICK_UNDER_1" = PREVENT_CLICK_UNDER_1, @@ -208,10 +205,10 @@ DEFINE_BITFIELD(flags_inv, list( "HIDESHOES" = HIDESHOES, "HIDESNOUT" = HIDESNOUT, "HIDESUITSTORAGE" = HIDESUITSTORAGE, - "SHOWSPRITEEARS" = SHOWSPRITEEARS, // SKYRAT EDIT ADDITION START + "SHOWSPRITEEARS" = SHOWSPRITEEARS, // NOVA EDIT ADDITION START "HIDETAIL" = HIDETAIL, "HIDESPINE" = HIDESPINE, - "HIDESEXTOY" = HIDESEXTOY, // SKYRAT EDIT ADDITION END + "HIDESEXTOY" = HIDESEXTOY, // NOVA EDIT ADDITION END )) DEFINE_BITFIELD(machine_stat, list( @@ -225,8 +222,7 @@ DEFINE_BITFIELD(mat_container_flags, list( "MATCONTAINER_EXAMINE" = MATCONTAINER_EXAMINE, "MATCONTAINER_NO_INSERT" = MATCONTAINER_NO_INSERT, "MATCONTAINER_ANY_INTENT" = MATCONTAINER_ANY_INTENT, - "MATCONTAINER_SILENT" = MATCONTAINER_SILENT, - "BREAKDOWN_ALLOYS" = BREAKDOWN_ALLOYS, + "MATCONTAINER_SILENT" = MATCONTAINER_SILENT )) DEFINE_BITFIELD(internal_damage, list( @@ -239,7 +235,7 @@ DEFINE_BITFIELD(internal_damage, list( DEFINE_BITFIELD(mecha_flags, list( "ID_LOCK_ON" = ID_LOCK_ON, - "CANSTRAFE" = CANSTRAFE, + "CAN_STRAFE" = CAN_STRAFE, "LIGHTS_ON" = LIGHTS_ON, "SILICON_PILOT" = SILICON_PILOT, "IS_ENCLOSED" = IS_ENCLOSED, @@ -283,21 +279,24 @@ DEFINE_BITFIELD(movement_type, list( "GROUND" = GROUND, "PHASING" = PHASING, "VENTCRAWLING" = VENTCRAWLING, + "UPSIDE_DOWN" = UPSIDE_DOWN, )) DEFINE_BITFIELD(obj_flags, list( - "IN_USE" = IN_USE, - "EMAGGED" = EMAGGED, - "CAN_BE_HIT" = CAN_BE_HIT, - "DANGEROUS_POSSESSION" = DANGEROUS_POSSESSION, - "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, + "BLOCK_Z_OUT_DOWN" = BLOCK_Z_OUT_DOWN, + "BLOCK_Z_OUT_UP" = BLOCK_Z_OUT_UP, "BLOCKS_CONSTRUCTION_DIR" = BLOCKS_CONSTRUCTION_DIR, + "BLOCKS_CONSTRUCTION" = BLOCKS_CONSTRUCTION, + "CAN_BE_HIT" = CAN_BE_HIT, + "CONDUCTS_ELECTRICITY" = CONDUCTS_ELECTRICITY, + "DANGEROUS_POSSESSION" = DANGEROUS_POSSESSION, + "EMAGGED" = EMAGGED, "IGNORE_DENSITY" = IGNORE_DENSITY, + "IN_USE" = IN_USE, + "NO_DECONSTRUCTION" = NO_DECONSTRUCTION, + "UNIQUE_RENAME" = UNIQUE_RENAME, )) DEFINE_BITFIELD(pass_flags, list( @@ -398,12 +397,12 @@ DEFINE_BITFIELD(acceptable_bodytype, list( "BODYTYPE_LARVA_PLACEHOLDER" = BODYTYPE_LARVA_PLACEHOLDER, "BODYTYPE_ALIEN" = BODYTYPE_ALIEN, "BODYTYPE_GOLEM" = BODYTYPE_GOLEM, - // SKYRAT EDIT ADDITION - customization + // NOVA EDIT ADDITION - customization "BODYTYPE_CUSTOM" = BODYTYPE_CUSTOM, "BODYTYPE_TAUR" = BODYTYPE_TAUR, "BODYTYPE_HIDE_SHOES" = BODYTYPE_HIDE_SHOES, "BODYTYPE_ALT_FACEWEAR_LAYER" = BODYTYPE_ALT_FACEWEAR_LAYER, - // SKYRAT EDIT END + // NOVA EDIT END )) DEFINE_BITFIELD(bodypart_flags, list( @@ -430,11 +429,11 @@ DEFINE_BITFIELD(supports_variations_flags, list( "CLOTHING_NO_VARIATION" = CLOTHING_NO_VARIATION, "CLOTHING_DIGITIGRADE_VARIATION" = CLOTHING_DIGITIGRADE_VARIATION, "CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON" = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON, - "CLOTHING_MONKEY_VARIATION" = CLOTHING_MONKEY_VARIATION, // SKYRAT EDIT ADDITION BEGIN + "CLOTHING_MONKEY_VARIATION" = CLOTHING_MONKEY_VARIATION, // NOVA EDIT ADDITION BEGIN "CLOTHING_SNOUTED_VARIATION" = CLOTHING_SNOUTED_VARIATION, "CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON" = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON, "CLOTHING_SNOUTED_VOX_VARIATION" = CLOTHING_SNOUTED_VOX_VARIATION, - "CLOTHING_SNOUTED_VOX_VARIATION_NO_NEW_ICON" = CLOTHING_SNOUTED_VOX_VARIATION_NO_NEW_ICON, // SKYRAT EDIT END + "CLOTHING_SNOUTED_VOX_VARIATION_NO_NEW_ICON" = CLOTHING_SNOUTED_VOX_VARIATION_NO_NEW_ICON, // NOVA EDIT END )) DEFINE_BITFIELD(flora_flags, list( @@ -489,7 +488,7 @@ DEFINE_BITFIELD(liked_foodtypes, list( "BUGS" = BUGS, "GORE" = GORE, "STONE" = STONE, - "BLOODY" = BLOODY, // SKYRAT EDIT - Hemophage Food + "BLOODY" = BLOODY, // NOVA EDIT - Hemophage Food )) DEFINE_BITFIELD(disliked_foodtypes, list( @@ -514,7 +513,7 @@ DEFINE_BITFIELD(disliked_foodtypes, list( "BUGS" = BUGS, "GORE" = GORE, "STONE" = STONE, - "BLOODY" = BLOODY, // SKYRAT EDIT - Hemophage Food + "BLOODY" = BLOODY, // NOVA EDIT - Hemophage Food )) DEFINE_BITFIELD(toxic_foodtypes, list( @@ -539,7 +538,7 @@ DEFINE_BITFIELD(toxic_foodtypes, list( "BUGS" = BUGS, "GORE" = GORE, "STONE" = STONE, - "BLOODY" = BLOODY, // SKYRAT EDIT - Hemophage Food + "BLOODY" = BLOODY, // NOVA EDIT - Hemophage Food )) DEFINE_BITFIELD(sharpness, list( diff --git a/code/_globalvars/lists/ambience.dm b/code/_globalvars/lists/ambience.dm index 60d3dfad789eb3..261b8133dd0597 100644 --- a/code/_globalvars/lists/ambience.dm +++ b/code/_globalvars/lists/ambience.dm @@ -1,4 +1,4 @@ -/* SKYRAT EDIT REMOVAL BEGIN +/* NOVA EDIT REMOVAL BEGIN GLOBAL_LIST_INIT(generic_ambience,list( 'sound/ambience/ambigen1.ogg', 'sound/ambience/ambigen2.ogg', @@ -14,7 +14,7 @@ GLOBAL_LIST_INIT(generic_ambience,list( 'sound/ambience/ambigen13.ogg', 'sound/ambience/ambigen14.ogg', )) -*/ //SKYRAT EDIT REMOVAL END +*/ //NOVA EDIT REMOVAL END GLOBAL_LIST_INIT(holy_ambience,list( 'sound/ambience/ambicha1.ogg', @@ -111,7 +111,7 @@ GLOBAL_LIST_INIT(spooky_ambience,list( )) GLOBAL_LIST_INIT(space_ambience,list( - 'modular_skyrat/master_files/sound/ambience/starlight.ogg', //SKYRAT EDIT ADDITION + 'modular_nova/master_files/sound/ambience/starlight.ogg', //NOVA EDIT ADDITION 'sound/ambience/ambiatmos.ogg', 'sound/ambience/ambispace.ogg', 'sound/ambience/ambispace2.ogg', diff --git a/code/_globalvars/lists/canisters.dm b/code/_globalvars/lists/canisters.dm new file mode 100644 index 00000000000000..f8ec95f6020519 --- /dev/null +++ b/code/_globalvars/lists/canisters.dm @@ -0,0 +1,29 @@ +///List of all the gases, used in labelling the canisters +GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) + +///Returns a map of canister id to its type path +/proc/init_gas_id_to_canister() + return sort_list(list( + GAS_N2 = /obj/machinery/portable_atmospherics/canister/nitrogen, + GAS_O2 = /obj/machinery/portable_atmospherics/canister/oxygen, + GAS_CO2 = /obj/machinery/portable_atmospherics/canister/carbon_dioxide, + GAS_PLASMA = /obj/machinery/portable_atmospherics/canister/plasma, + GAS_N2O = /obj/machinery/portable_atmospherics/canister/nitrous_oxide, + GAS_NITRIUM = /obj/machinery/portable_atmospherics/canister/nitrium, + GAS_BZ = /obj/machinery/portable_atmospherics/canister/bz, + GAS_AIR = /obj/machinery/portable_atmospherics/canister/air, + GAS_WATER_VAPOR = /obj/machinery/portable_atmospherics/canister/water_vapor, + GAS_TRITIUM = /obj/machinery/portable_atmospherics/canister/tritium, + GAS_HYPER_NOBLIUM = /obj/machinery/portable_atmospherics/canister/nob, + GAS_PLUOXIUM = /obj/machinery/portable_atmospherics/canister/pluoxium, + "caution" = /obj/machinery/portable_atmospherics/canister, + GAS_MIASMA = /obj/machinery/portable_atmospherics/canister/miasma, + GAS_FREON = /obj/machinery/portable_atmospherics/canister/freon, + GAS_HYDROGEN = /obj/machinery/portable_atmospherics/canister/hydrogen, + GAS_HEALIUM = /obj/machinery/portable_atmospherics/canister/healium, + GAS_PROTO_NITRATE = /obj/machinery/portable_atmospherics/canister/proto_nitrate, + GAS_ZAUKER = /obj/machinery/portable_atmospherics/canister/zauker, + GAS_HELIUM = /obj/machinery/portable_atmospherics/canister/helium, + GAS_ANTINOBLIUM = /obj/machinery/portable_atmospherics/canister/antinoblium, + GAS_HALON = /obj/machinery/portable_atmospherics/canister/halon + )) diff --git a/code/_globalvars/lists/cargo.dm b/code/_globalvars/lists/cargo.dm new file mode 100644 index 00000000000000..5e4766fc7c3ffc --- /dev/null +++ b/code/_globalvars/lists/cargo.dm @@ -0,0 +1,34 @@ +GLOBAL_LIST_INIT(discountable_packs, init_discountable_packs()) + +/proc/init_discountable_packs() + var/list/packs = list() + for(var/datum/supply_pack/prototype as anything in subtypesof(/datum/supply_pack)) + var/discountable = initial(prototype.discountable) + if(discountable) + LAZYADD(packs[discountable], prototype) + return packs + +GLOBAL_LIST_INIT(pack_discount_odds, list( + SUPPLY_PACK_STD_DISCOUNTABLE = 45, + SUPPLY_PACK_UNCOMMON_DISCOUNTABLE = 4, + SUPPLY_PACK_RARE_DISCOUNTABLE = 1, +)) + +GLOBAL_LIST_EMPTY(supplypod_loading_bays) + +GLOBAL_LIST_INIT(podstyles, list(\ + list(POD_SHAPE_NORML, "pod", TRUE, "default", "yellow", RUBBLE_NORMAL, "supply pod", "A Nanotrasen supply drop pod."),\ + list(POD_SHAPE_NORML, "advpod", TRUE, "bluespace", "blue", RUBBLE_NORMAL, "bluespace supply pod" , "A Nanotrasen Bluespace supply pod. Teleports back to CentCom after delivery."),\ + list(POD_SHAPE_NORML, "advpod", TRUE, "centcom", "blue", RUBBLE_NORMAL, "\improper CentCom supply pod", "A Nanotrasen supply pod, this one has been marked with Central Command's designations. Teleports back to CentCom after delivery."),\ + list(POD_SHAPE_NORML, "darkpod", TRUE, "syndicate", "red", RUBBLE_NORMAL, "blood-red supply pod", "An intimidating supply pod, covered in the blood-red markings of the Syndicate. It's probably best to stand back from this."),\ + list(POD_SHAPE_NORML, "darkpod", TRUE, "deathsquad", "blue", RUBBLE_NORMAL, "\improper Deathsquad drop pod", "A Nanotrasen drop pod. This one has been marked the markings of Nanotrasen's elite strike team."),\ + list(POD_SHAPE_NORML, "pod", TRUE, "cultist", "red", RUBBLE_NORMAL, "bloody supply pod", "A Nanotrasen supply pod covered in scratch-marks, blood, and strange runes."),\ + list(POD_SHAPE_OTHER, "missile", FALSE, FALSE, FALSE, RUBBLE_THIN, "cruise missile", "A big ass missile that didn't seem to fully detonate. It was likely launched from some far-off deep space missile silo. There appears to be an auxillery payload hatch on the side, though manually opening it is likely impossible."),\ + list(POD_SHAPE_OTHER, "smissile", FALSE, FALSE, FALSE, RUBBLE_THIN, "\improper Syndicate cruise missile", "A big ass, blood-red missile that didn't seem to fully detonate. It was likely launched from some deep space Syndicate missile silo. There appears to be an auxillery payload hatch on the side, though manually opening it is likely impossible."),\ + list(POD_SHAPE_OTHER, "box", TRUE, FALSE, FALSE, RUBBLE_WIDE, "\improper Aussec supply crate", "An incredibly sturdy supply crate, designed to withstand orbital re-entry. Has 'Aussec Armory - 2532' engraved on the side."),\ + list(POD_SHAPE_NORML, "clownpod", TRUE, "clown", "green", RUBBLE_NORMAL, "\improper HONK pod", "A brightly-colored supply pod. It likely originated from the Clown Federation."),\ + list(POD_SHAPE_OTHER, "orange", TRUE, FALSE, FALSE, RUBBLE_NONE, "\improper Orange", "An angry orange."),\ + list(POD_SHAPE_OTHER, FALSE, FALSE, FALSE, FALSE, RUBBLE_NONE, "\improper S.T.E.A.L.T.H. pod MKVII", "A supply pod that, under normal circumstances, is completely invisible to conventional methods of detection. How are you even seeing this?"),\ + list(POD_SHAPE_OTHER, "gondola", FALSE, FALSE, FALSE, RUBBLE_NONE, "gondola", "The silent walker. This one seems to be part of a delivery agency."),\ + list(POD_SHAPE_OTHER, FALSE, FALSE, FALSE, FALSE, RUBBLE_NONE, FALSE, FALSE, "rl_click", "give_po")\ +)) diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index dbf9a47f9f7f19..1fceed440044a7 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -19,7 +19,7 @@ GLOBAL_LIST_EMPTY(undershirt_f) //stores only undershirt name //Socks GLOBAL_LIST_EMPTY(socks_list) //stores /datum/sprite_accessory/socks indexed by name //Lizard Bits (all datum lists indexed by name) -//SKYRAT EDIT REMOVAL - CUSTOMIZATION +//NOVA EDIT REMOVAL - CUSTOMIZATION /* GLOBAL_LIST_EMPTY(body_markings_list) GLOBAL_LIST_EMPTY(snouts_list) @@ -30,9 +30,9 @@ GLOBAL_LIST_EMPTY(legs_list) GLOBAL_LIST_EMPTY(animated_spines_list) //Mutant Human bits -GLOBAL_LIST_EMPTY(tails_list) -GLOBAL_LIST_EMPTY(tails_list_human) //Only exists for preference choices. Use "tails_list" otherwise. -GLOBAL_LIST_EMPTY(tails_list_lizard) //See above! +GLOBAL_LIST_EMPTY(tails_list_human) +GLOBAL_LIST_EMPTY(tails_list_lizard) +GLOBAL_LIST_EMPTY(tails_list_monkey) GLOBAL_LIST_EMPTY(ears_list) GLOBAL_LIST_EMPTY(wings_list) GLOBAL_LIST_EMPTY(wings_open_list) @@ -41,8 +41,9 @@ GLOBAL_LIST_EMPTY(moth_antennae_list) GLOBAL_LIST_EMPTY(moth_markings_list) GLOBAL_LIST_EMPTY(caps_list) */ -//SKYRAT EDIT REMOVAL END -GLOBAL_LIST_EMPTY(moth_wings_list) // SKYRAT EDIT ADDITION - Customization +//NOVA EDIT REMOVAL END +GLOBAL_LIST_EMPTY(moth_wings_list) // NOVA EDIT ADDITION - Customization +GLOBAL_LIST_EMPTY(tails_list_monkey) // NOVA EDIT ADDITION - Customization GLOBAL_LIST_EMPTY(pod_hair_list) GLOBAL_LIST_INIT(color_list_ethereal, list( @@ -300,12 +301,12 @@ GLOBAL_LIST_INIT(status_display_approved_pictures, list( "lockdown", "greenalert", "bluealert", - "violetalert", // SKYRAT EDIT ADD - Alert Levels - "orangealert", // SKYRAT EDIT ADD - Alert Levels - "amberalert", // SKYRAT EDIT ADD - Alert Levels + "violetalert", // NOVA EDIT ADD - Alert Levels + "orangealert", // NOVA EDIT ADD - Alert Levels + "amberalert", // NOVA EDIT ADD - Alert Levels "redalert", "deltaalert", - "gammaalert", // SKYRAT EDIT ADD - Alert Levels + "gammaalert", // NOVA EDIT ADD - Alert Levels "radiation", "currentalert", //For automatic set of status display on current level )) diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index 50575d24b5b205..fe4d88468df5d1 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -256,10 +256,10 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items list(//computer disks /obj/item/computer_disk/maintenance/scanner = 1, - /obj/item/computer_disk/maintenance/camera = 1, + ///obj/item/computer_disk/maintenance/camera = 1, //NOVA EDIT REMOVAL - Available To Crew Now /obj/item/computer_disk/maintenance/modsuit_control = 1, /obj/item/computer_disk/maintenance/theme = 3, - ) = 4, + ) = 3, //NOVA EDIT CHANGE - Original : 4 list(//modsuits /obj/effect/spawner/random/mod/maint = 3, @@ -351,6 +351,7 @@ GLOBAL_LIST_INIT(rarity_loot, list(//rare: really good items /obj/item/disk/nuclear/fake = 1, /obj/item/disk/surgery/advanced_plastic_surgery = 1, /obj/item/skillchip/brainwashing = 1, + /obj/item/skillchip/intj = 1, /obj/item/tattoo_kit = 1, /obj/item/folder/ancient_paperwork = 1, ) = 1, diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 135fb00dea10a2..2de6a1c691fc8e 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -6,16 +6,12 @@ GLOBAL_LIST_EMPTY(deadmins) //all ckeys who have used the de-admin verb. GLOBAL_LIST_EMPTY(directory) //all ckeys with associated client GLOBAL_LIST_EMPTY(stealthminID) //reference list with IDs that store ckeys, for stealthmins -GLOBAL_LIST_INIT(dangerous_turfs, typecacheof(list( - /turf/open/lava, - /turf/open/chasm, - /turf/open/space, - /turf/open/openspace))) - /// List of types of abstract mob which shouldn't usually exist in the world on its own if we're spawning random mobs GLOBAL_LIST_INIT(abstract_mob_types, list( /mob/living/basic/blob_minion, + /mob/living/basic/bot, /mob/living/basic/construct, + /mob/living/basic/guardian, /mob/living/basic/heretic_summon, /mob/living/basic/mining, /mob/living/basic/pet, @@ -32,8 +28,6 @@ GLOBAL_LIST_INIT(abstract_mob_types, list( /mob/living/simple_animal/bot, /mob/living/simple_animal/hostile/asteroid/elite, /mob/living/simple_animal/hostile/asteroid, - /mob/living/simple_animal/hostile/construct, - /mob/living/simple_animal/hostile/guardian, /mob/living/simple_animal/hostile/megafauna, /mob/living/simple_animal/hostile/mimic, // Cannot exist if spawned without being passed an item reference /mob/living/simple_animal/hostile/retaliate, diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm index b2662b5e804a6f..bc195bcf5f453d 100644 --- a/code/_globalvars/lists/names.dm +++ b/code/_globalvars/lists/names.dm @@ -25,6 +25,10 @@ GLOBAL_LIST_INIT(megacarp_first_names, world.file2list("strings/names/megacarp1. GLOBAL_LIST_INIT(megacarp_last_names, world.file2list("strings/names/megacarp2.txt")) GLOBAL_LIST_INIT(cyberauth_names, world.file2list("strings/names/cyberauth.txt")) GLOBAL_LIST_INIT(syndicate_monkey_names, world.file2list("strings/names/syndicate_monkey.txt")) +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/lists/objects.dm b/code/_globalvars/lists/objects.dm index 8239dc29231f46..1d53a499322d31 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -50,10 +50,6 @@ GLOBAL_LIST_EMPTY(cooking_recipes_atoms) GLOBAL_LIST_EMPTY(rcd_list) /// list of wallmounted intercom radios. GLOBAL_LIST_EMPTY(intercoms_list) -/// list of all current implants that are tracked to work out what sort of trek everyone is on. Sadly not on lavaworld not implemented... -GLOBAL_LIST_EMPTY(tracked_implants) -/// list of implants the prisoner console can track and send inject commands too -GLOBAL_LIST_EMPTY(tracked_chem_implants) /// list of all pinpointers. Used to change stuff they are pointing to all at once. GLOBAL_LIST_EMPTY(pinpointer_list) /// A list of all zombie_infection organs, for any mass "animation" diff --git a/code/_globalvars/lists/poll_ignore.dm b/code/_globalvars/lists/poll_ignore.dm index 1a56a44f5e5b65..da10752324e505 100644 --- a/code/_globalvars/lists/poll_ignore.dm +++ b/code/_globalvars/lists/poll_ignore.dm @@ -1,18 +1,19 @@ //Each lists stores ckeys for "Never for this round" option category #define POLL_IGNORE_ACADEMY_WIZARD "academy_wizard" -#define POLL_IGNORE_CORTICAL_BORER "cortical_borer" // SKYRAT EDIT - Cortical Borer +#define POLL_IGNORE_CORTICAL_BORER "cortical_borer" // NOVA EDIT - Cortical Borer #define POLL_IGNORE_ALIEN_LARVA "alien_larva" #define POLL_IGNORE_ASH_SPIRIT "ash_spirit" #define POLL_IGNORE_ASHWALKER "ashwalker" #define POLL_IGNORE_BLOB "blob" #define POLL_IGNORE_BOTS "bots" #define POLL_IGNORE_CARGORILLA "cargorilla" -#define POLL_IGNORE_CONTRACTOR_SUPPORT "contractor_support" #define POLL_IGNORE_CONSTRUCT "construct" +#define POLL_IGNORE_CONTRACTOR_SUPPORT "contractor_support" #define POLL_IGNORE_DRONE "drone" #define POLL_IGNORE_FIRE_SHARK "fire_shark" #define POLL_IGNORE_FUGITIVE "fugitive" +#define POLL_IGNORE_GLITCH "glitch" #define POLL_IGNORE_GOLEM "golem" #define POLL_IGNORE_HERETIC_MONSTER "heretic_monster" #define POLL_IGNORE_HOLOPARASITE "holoparasite" @@ -37,21 +38,21 @@ #define POLL_IGNORE_SYNDICATE "syndicate" #define POLL_IGNORE_VENUSHUMANTRAP "venus_human_trap" -//Skyrat Edit Start: Cortical Borer GLOBAL_LIST_INIT(poll_ignore_desc, list( POLL_IGNORE_ACADEMY_WIZARD = "Academy Wizard Defender", - POLL_IGNORE_CORTICAL_BORER = "Cortical Borer", + POLL_IGNORE_CORTICAL_BORER = "Cortical Borer", // NOVA EDIT ADDITION POLL_IGNORE_ALIEN_LARVA = "Xenomorph larva", POLL_IGNORE_ASH_SPIRIT = "Ash Spirit", POLL_IGNORE_ASHWALKER = "Ashwalker eggs", POLL_IGNORE_BLOB = "Blob spores", POLL_IGNORE_BOTS = "Bots", POLL_IGNORE_CARGORILLA = "Cargorilla", - POLL_IGNORE_CONTRACTOR_SUPPORT = "Contractor Support Unit", POLL_IGNORE_CONSTRUCT = "Construct", + POLL_IGNORE_CONTRACTOR_SUPPORT = "Contractor Support Unit", POLL_IGNORE_DRONE = "Drone shells", POLL_IGNORE_FIRE_SHARK = "Fire Shark", POLL_IGNORE_FUGITIVE = "Fugitive Hunter", + POLL_IGNORE_GLITCH = "Glitch", POLL_IGNORE_GOLEM = "Golems", POLL_IGNORE_HERETIC_MONSTER = "Heretic Monster", POLL_IGNORE_HOLOPARASITE = "Holoparasite", @@ -64,8 +65,8 @@ GLOBAL_LIST_INIT(poll_ignore_desc, list( POLL_IGNORE_POSSESSED_BLADE = "Possessed blade", POLL_IGNORE_PYROSLIME = "Slime", POLL_IGNORE_RAW_PROPHET = "Raw Prophet", - POLL_IGNORE_RUST_SPIRIT = "Rust Spirit", POLL_IGNORE_REGAL_RAT = "Regal rat", + POLL_IGNORE_RUST_SPIRIT = "Rust Spirit", POLL_IGNORE_SENTIENCE_POTION = "Sentience potion", POLL_IGNORE_SHADE = "Shade", POLL_IGNORE_SHUTTLE_DENIZENS = "Shuttle denizens", @@ -73,10 +74,9 @@ GLOBAL_LIST_INIT(poll_ignore_desc, list( POLL_IGNORE_SPIDER = "Spiders", POLL_IGNORE_SPLITPERSONALITY = "Split Personality", POLL_IGNORE_STALKER = "Stalker", - POLL_IGNORE_SYNDICATE = "Syndicate", + POLL_IGNORE_SYNDICATE = "Symphionia", POLL_IGNORE_VENUSHUMANTRAP = "Venus Human Traps", )) -//Skyrat Edit Stop: Cortical Borer GLOBAL_LIST_INIT(poll_ignore, init_poll_ignore()) diff --git a/code/_globalvars/lists/quirks.dm b/code/_globalvars/lists/quirks.dm index f907206a30cd38..3d15865a527c12 100644 --- a/code/_globalvars/lists/quirks.dm +++ b/code/_globalvars/lists/quirks.dm @@ -8,7 +8,7 @@ GLOBAL_LIST_INIT(nearsighted_glasses, list( "Thin" = /obj/item/clothing/glasses/regular/thin, "Jamjar" = /obj/item/clothing/glasses/regular/jamjar, "Binoclard" = /obj/item/clothing/glasses/regular/kim, - "Modern" = /obj/item/clothing/glasses/betterunshit, // SKYRAT ADD + "Modern" = /obj/item/clothing/glasses/regular/betterunshit, // NOVA EDIT ADDITION )) @@ -19,3 +19,10 @@ GLOBAL_LIST_INIT(limb_choice, list( "Left Leg" = /obj/item/bodypart/leg/left/robot/surplus, "Right Leg" = /obj/item/bodypart/leg/right/robot/surplus, )) + +GLOBAL_LIST_INIT(limb_choice_transhuman, list( + "Left Arm" = /obj/item/bodypart/arm/left/robot, + "Right Arm" = /obj/item/bodypart/arm/right/robot, + "Left Leg" = /obj/item/bodypart/leg/left/robot, + "Right Leg" = /obj/item/bodypart/leg/right/robot, +)) diff --git a/code/_globalvars/lists/reagents.dm b/code/_globalvars/lists/reagents.dm index 68d63d97934eaf..a2946e838da949 100644 --- a/code/_globalvars/lists/reagents.dm +++ b/code/_globalvars/lists/reagents.dm @@ -35,7 +35,7 @@ GLOBAL_LIST_INIT(reagent_containers, list( CAT_PATCHES = typecacheof(list( /obj/item/reagent_containers/pill/patch/style )), - // SKYRAT EDIT ADDITION START + // NOVA EDIT ADDITION START CAT_HYPOS = list( /obj/item/reagent_containers/cup/vial/small, /obj/item/reagent_containers/cup/vial/large, @@ -43,7 +43,7 @@ GLOBAL_LIST_INIT(reagent_containers, list( CAT_DARTS = typecacheof(list( /obj/item/reagent_containers/syringe/smartdart )), - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END )) /// list of all /datum/chemical_reaction datums indexed by their typepath. Use this for general lookup stuff @@ -63,8 +63,6 @@ GLOBAL_LIST_INIT(blacklisted_metalgen_types, typecacheof(list( /turf/closed/indestructible, //indestructible turfs should be indestructible, metalgen transmutation to plasma allows them to be destroyed /turf/open/indestructible ))) -/// Names of human readable reagents used by plumbing UI. -GLOBAL_LIST_INIT(chemical_name_list, init_chemical_name_list()) /// Map of reagent names to its datum path GLOBAL_LIST_INIT(name2reagent, build_name2reagentlist()) @@ -81,16 +79,6 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagentlist()) return reagent_list -/// Creates an list which is indexed by reagent name . used by plumbing reaction chamber and chemical filter UI -/proc/init_chemical_name_list() - var/list/name_list = list() - - for(var/X in GLOB.chemical_reagents_list) - var/datum/reagent/Reagent = GLOB.chemical_reagents_list[X] - name_list += Reagent.name - - return sort_list(name_list) - /** * Chemical Reactions - Initialises all /datum/chemical_reaction into a list * It is filtered into multiple lists within a list. @@ -196,7 +184,19 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagentlist()) /// Builds map of reagent name to its datum path /proc/build_name2reagentlist() . = list() - for (var/datum/reagent/R as anything in subtypesof(/datum/reagent)) - var/name = initial(R.name) + + //build map with keys stored seperatly + var/list/name_to_reagent = list() + var/list/only_names = list() + for (var/datum/reagent/reagent as anything in GLOB.chemical_reagents_list) + var/name = initial(reagent.name) if (length(name)) - .[ckey(name)] = R + name_to_reagent[name] = reagent + only_names += name + + //sort keys + only_names = sort_list(only_names) + + //build map with sorted keys + for(var/name as anything in only_names) + .[name] = name_to_reagent[name] diff --git a/code/_globalvars/lists/xenobiology.dm b/code/_globalvars/lists/xenobiology.dm index 1e247a6279d39a..f641e9d5eccdef 100644 --- a/code/_globalvars/lists/xenobiology.dm +++ b/code/_globalvars/lists/xenobiology.dm @@ -73,11 +73,9 @@ GLOBAL_LIST_INIT_TYPED(cell_line_tables, /list, list( CELL_LINE_TABLE_WALKING_MUSHROOM = list(/datum/micro_organism/cell_line/walking_mushroom = 1), CELL_LINE_TABLE_QUEEN_BEE = list(/datum/micro_organism/cell_line/queen_bee = 1), CELL_LINE_TABLE_BUTTERFLY = list(/datum/micro_organism/cell_line/butterfly = 1), - CELL_LINE_TABLE_LEAPER = list(/datum/micro_organism/cell_line/leaper = 1), CELL_LINE_TABLE_MEGA_ARACHNID = list(/datum/micro_organism/cell_line/mega_arachnid = 1), CELL_LINE_TABLE_ALGAE = list( /datum/micro_organism/cell_line/frog = 2, - /datum/micro_organism/cell_line/leaper = 2, /datum/micro_organism/cell_line/mega_arachnid = 1, /datum/micro_organism/cell_line/queen_bee = 1, /datum/micro_organism/cell_line/butterfly = 1, diff --git a/code/_globalvars/phobias.dm b/code/_globalvars/phobias.dm index f8ea532914bcc3..bfd3a6846f1144 100644 --- a/code/_globalvars/phobias.dm +++ b/code/_globalvars/phobias.dm @@ -8,6 +8,7 @@ GLOBAL_LIST_INIT(phobia_types, sort_list(list( "authority", "birds", "blood", + "carps", "clowns", "doctors", "falling", @@ -32,6 +33,7 @@ GLOBAL_LIST_INIT(phobia_regexes, list( "authority" = construct_phobia_regex("authority"), "birds" = construct_phobia_regex("birds"), "blood" = construct_phobia_regex("blood"), + "carps" = construct_phobia_regex("carps"), "clowns" = construct_phobia_regex("clowns"), "conspiracies" = construct_phobia_regex("conspiracies"), "doctors" = construct_phobia_regex("doctors"), @@ -57,19 +59,23 @@ GLOBAL_LIST_INIT(phobia_mobs, list( /mob/living/carbon/alien, /mob/living/simple_animal/slime, )), - "anime" = typecacheof(list(/mob/living/simple_animal/hostile/guardian)), + "anime" = typecacheof(list(/mob/living/basic/guardian)), "birds" = typecacheof(list( /mob/living/basic/chick, /mob/living/basic/chicken, + /mob/living/basic/parrot, /mob/living/basic/pet/penguin, - /mob/living/simple_animal/parrot, + /mob/living/simple_animal/hostile/retaliate/goose, + )), + "carps" = typecacheof(list( + /mob/living/basic/carp, )), "conspiracies" = typecacheof(list( /mob/living/basic/drone, /mob/living/basic/pet/penguin, /mob/living/simple_animal/bot/secbot, )), - "doctors" = typecacheof(list(/mob/living/simple_animal/bot/medbot)), + "doctors" = typecacheof(list(/mob/living/basic/bot/medbot)), "heresy" = typecacheof(list( /mob/living/basic/heretic_summon, )), @@ -96,14 +102,13 @@ GLOBAL_LIST_INIT(phobia_mobs, list( /mob/living/basic/faithless, /mob/living/basic/ghost, /mob/living/basic/heretic_summon, - /mob/living/basic/skeleton, /mob/living/basic/revenant, + /mob/living/basic/shade, + /mob/living/basic/skeleton, + /mob/living/basic/wizard, /mob/living/simple_animal/bot/mulebot/paranormal, - /mob/living/simple_animal/hostile/construct, /mob/living/simple_animal/hostile/dark_wizard, - /mob/living/simple_animal/hostile/wizard, /mob/living/simple_animal/hostile/zombie, - /mob/living/simple_animal/shade, )), )) @@ -235,6 +240,27 @@ GLOBAL_LIST_INIT(phobia_objs, list( /obj/item/reagent_containers/syringe, /obj/machinery/iv_drip, )), + "carps" = typecacheof(list( + /obj/item/clothing/head/hooded/carp_hood, + /obj/item/clothing/suit/hooded/carp_costume, + /obj/item/clothing/head/fedora/carpskin, + /obj/item/clothing/mask/gas/carp, + /obj/item/clothing/mask/cigarette/carp, + /obj/item/clothing/under/suit/carpskin, + /obj/item/food/cubancarp, + /obj/item/food/fishmeat/carp, + /obj/item/grenade/clusterbuster/spawner_spesscarp, + /obj/item/grenade/spawnergrenade/spesscarp, + /obj/item/knife/carp, + /obj/item/nullrod/carp, + /obj/item/organ/internal/lungs/carp, + /obj/item/organ/internal/tongue/carp, + /obj/item/organ/internal/brain/carp, + /obj/item/organ/internal/heart/carp, + /obj/item/storage/fancy/cigarettes/cigpack_carp, + /obj/item/stack/sheet/animalhide/carp, + /obj/item/toy/plush/carpplushie, + )), "clowns" = typecacheof(list( /obj/item/bedsheet/clown, /obj/item/clothing/head/chaplain/clownmitre, @@ -368,7 +394,7 @@ GLOBAL_LIST_INIT(phobia_objs, list( /obj/effect/forcefield/wizard/heretic, /obj/effect/heretic_influence, /obj/effect/heretic_rune, - /obj/effect/knock_portal, + /obj/effect/lock_portal, /obj/effect/visible_heretic_influence, /obj/item/ammo_box/strilka310/lionhunter, /obj/item/ammo_casing/strilka310/lionhunter, @@ -380,7 +406,7 @@ GLOBAL_LIST_INIT(phobia_objs, list( /obj/item/codex_cicatrix, /obj/item/coin/eldritch, /obj/item/gun/ballistic/rifle/lionhunter, - /obj/item/heretic_lintel, + /obj/item/heretic_labyrinth_handbook, /obj/item/melee/rune_carver, /obj/item/melee/sickly_blade, /obj/item/melee/touch_attack/mansus_fist, @@ -389,7 +415,7 @@ GLOBAL_LIST_INIT(phobia_objs, list( /obj/item/toy/reality_pierce, /obj/projectile/curse_hand, /obj/structure/destructible/eldritch_crucible, - /obj/structure/knock_tear, + /obj/structure/lock_tear, )), "insects" = typecacheof(list( /obj/item/clothing/mask/animal/small/bee, @@ -406,6 +432,10 @@ GLOBAL_LIST_INIT(phobia_objs, list( /obj/item/reagent_containers/cup/glass/bottle/lizardwine, /obj/item/toy/plush/lizard_plushie, )), + "ocky icky" = typecacheof(list( + /obj/item/banhammer, + /obj/item/toy/plush/awakenedplushie, + )), "robots" = typecacheof(list( /obj/item/ai_module, /obj/item/aicard, diff --git a/code/_globalvars/tgui.dm b/code/_globalvars/tgui.dm index a81078420f519e..84a5019fd75644 100644 --- a/code/_globalvars/tgui.dm +++ b/code/_globalvars/tgui.dm @@ -1,4 +1,4 @@ GLOBAL_DATUM(crew_manifest_tgui, /datum/crew_manifest) GLOBAL_DATUM(changelog_tgui, /datum/changelog) GLOBAL_DATUM(hotkeys_tgui, /datum/hotkeys_help) -GLOBAL_DATUM(record_manifest_tgui, /datum/record_manifest) //SKYRAT EDIT ADDITION -- EXPLOITABLE VERB +GLOBAL_DATUM(record_manifest_tgui, /datum/record_manifest) //NOVA EDIT ADDITION -- EXPLOITABLE VERB diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm deleted file mode 100644 index 8fd711279a5e24..00000000000000 --- a/code/_globalvars/traits.dm +++ /dev/null @@ -1,311 +0,0 @@ -/* - FUN ZONE OF ADMIN LISTINGS - Try to keep this in sync with __DEFINES/traits.dm - quirks have it's own panel so we don't need them here. -*/ -GLOBAL_LIST_INIT(traits_by_type, list( - /mob = list( - "TRAIT_KNOCKEDOUT" = TRAIT_KNOCKEDOUT, - "TRAIT_IMMOBILIZED" = TRAIT_IMMOBILIZED, - "TRAIT_FLOORED" = TRAIT_FLOORED, - "TRAIT_FORCED_STANDING" = TRAIT_FORCED_STANDING, - "TRAIT_HANDS_BLOCKED" = TRAIT_HANDS_BLOCKED, - "TRAIT_UI_BLOCKED" = TRAIT_UI_BLOCKED, - "TRAIT_PULL_BLOCKED" = TRAIT_PULL_BLOCKED, - "TRAIT_RESTRAINED" = TRAIT_RESTRAINED, - "TRAIT_PERFECT_ATTACKER" = TRAIT_PERFECT_ATTACKER, - "TRAIT_GREENTEXT_CURSED" = TRAIT_GREENTEXT_CURSED, - "TRAIT_INCAPACITATED" = TRAIT_INCAPACITATED, - "TRAIT_CRITICAL_CONDITION" = TRAIT_CRITICAL_CONDITION, - "TRAIT_LITERATE" = TRAIT_LITERATE, - "TRAIT_ILLITERATE" = TRAIT_ILLITERATE, - "TRAIT_MUTE" = TRAIT_MUTE, - "TRAIT_EMOTEMUTE " = TRAIT_EMOTEMUTE, - "TRAIT_DEAF" = TRAIT_DEAF, - "TRAIT_FAT" = TRAIT_FAT, - "TRAIT_HUSK" = TRAIT_HUSK, - "TRAIT_DEFIB_BLACKLISTED" = TRAIT_DEFIB_BLACKLISTED, - "TRAIT_BADDNA" = TRAIT_BADDNA, - "TRAIT_CLUMSY" = TRAIT_CLUMSY, - "TRAIT_CHUNKYFINGERS" = TRAIT_CHUNKYFINGERS, - "TRAIT_CHUNKYFINGERS_IGNORE_BATON" = TRAIT_CHUNKYFINGERS_IGNORE_BATON, - "TRAIT_FIST_MINING" = TRAIT_FIST_MINING, - "TRAIT_CAN_HOLD_ITEMS" = TRAIT_CAN_HOLD_ITEMS, - "TRAIT_FENCE_CLIMBER" = TRAIT_FENCE_CLIMBER, - "TRAIT_DUMB" = TRAIT_DUMB, - "TRAIT_ADVANCEDTOOLUSER" = TRAIT_ADVANCEDTOOLUSER, - "TRAIT_DISCOORDINATED_TOOL_USER" = TRAIT_DISCOORDINATED_TOOL_USER, - "TRAIT_PACIFISM" = TRAIT_PACIFISM, - "TRAIT_IGNORESLOWDOWN" = TRAIT_IGNORESLOWDOWN, - "TRAIT_IGNOREDAMAGESLOWDOWN" = TRAIT_IGNOREDAMAGESLOWDOWN, - "TRAIT_DEATHCOMA" = TRAIT_DEATHCOMA, - "TRAIT_FAKEDEATH" = TRAIT_FAKEDEATH, - "TRAIT_DISFIGURED" = TRAIT_DISFIGURED, - "TRAIT_XENO_HOST" = TRAIT_XENO_HOST, - "TRAIT_STUNIMMUNE" = TRAIT_STUNIMMUNE, - "TRAIT_BATON_RESISTANCE" = TRAIT_BATON_RESISTANCE, - "TRAIT_IWASBATONED" = TRAIT_IWASBATONED, - "TRAIT_SLEEPIMMUNE" = TRAIT_SLEEPIMMUNE, - "TRAIT_PUSHIMMUNE" = TRAIT_PUSHIMMUNE, - "TRAIT_SHOCKIMMUNE" = TRAIT_SHOCKIMMUNE, - "TRAIT_TESLA_SHOCKIMMUNE" = TRAIT_TESLA_SHOCKIMMUNE, - "TRAIT_STABLEHEART" = TRAIT_STABLEHEART, - "TRAIT_STABLELIVER" = TRAIT_STABLELIVER, - "TRAIT_RESISTHEAT" = TRAIT_RESISTHEAT, - "TRAIT_USED_DNA_VAULT" = TRAIT_USED_DNA_VAULT, - "TRAIT_RESISTHEATHANDS" = TRAIT_RESISTHEATHANDS, - "TRAIT_RESISTCOLD" = TRAIT_RESISTCOLD, - "TRAIT_RESISTHIGHPRESSURE" = TRAIT_RESISTHIGHPRESSURE, - "TRAIT_RESISTLOWPRESSURE" = TRAIT_RESISTLOWPRESSURE, - "TRAIT_BOMBIMMUNE" = TRAIT_BOMBIMMUNE, - "TRAIT_RADIMMUNE" = TRAIT_RADIMMUNE, - "TRAIT_GENELESS" = TRAIT_GENELESS, - "TRAIT_VIRUSIMMUNE" = TRAIT_VIRUSIMMUNE, - "TRAIT_PIERCEIMMUNE" = TRAIT_PIERCEIMMUNE, - "TRAIT_NODISMEMBER" = TRAIT_NODISMEMBER, - "TRAIT_NOFIRE" = TRAIT_NOFIRE, - "TRAIT_NOGUNS" = TRAIT_NOGUNS, - "TRAIT_NOHUNGER" = TRAIT_NOHUNGER, - "TRAIT_LIVERLESS_METABOLISM" = TRAIT_LIVERLESS_METABOLISM, - "TRAIT_PLASMA_LOVER_METABOLISM" = TRAIT_PLASMA_LOVER_METABOLISM, - "TRAIT_NOCLONELOSS" = TRAIT_NOCLONELOSS, - "TRAIT_TOXIMMUNE" = TRAIT_TOXIMMUNE, - "TRAIT_EASYDISMEMBER" = TRAIT_EASYDISMEMBER, - "TRAIT_LIMBATTACHMENT" = TRAIT_LIMBATTACHMENT, - "TRAIT_NOLIMBDISABLE" = TRAIT_NOLIMBDISABLE, - "TRAIT_EASILY_WOUNDED" = TRAIT_EASILY_WOUNDED, - "TRAIT_HARDLY_WOUNDED" = TRAIT_HARDLY_WOUNDED, - "TRAIT_NEVER_WOUNDED" = TRAIT_NEVER_WOUNDED, - "TRAIT_TOXINLOVER" = TRAIT_TOXINLOVER, - "TRAIT_NOCRITOVERLAY" = TRAIT_NOCRITOVERLAY, - "TRAIT_NOBREATH" = TRAIT_NOBREATH, - "TRAIT_ANTIMAGIC" = TRAIT_ANTIMAGIC, - "TRAIT_HOLY" = TRAIT_HOLY, - "TRAIT_DEPRESSION" = TRAIT_DEPRESSION, - "TRAIT_BLOOD_DEFICIENCY" = TRAIT_BLOOD_DEFICIENCY, - "TRAIT_JOLLY" = TRAIT_JOLLY, - "TRAIT_NO_GLIDE" = TRAIT_NO_GLIDE, - "TRAIT_NOCRITDAMAGE" = TRAIT_NOCRITDAMAGE, - "TRAIT_NO_SLIP_WATER" = TRAIT_NO_SLIP_WATER, - "TRAIT_NO_SLIP_ICE" = TRAIT_NO_SLIP_ICE, - "TRAIT_NO_SLIP_SLIDE" = TRAIT_NO_SLIP_SLIDE, - "TRAIT_NO_SLIP_ALL" = TRAIT_NO_SLIP_ALL, - "TRAIT_NODEATH" = TRAIT_NODEATH, - "TRAIT_NOHARDCRIT" = TRAIT_NOHARDCRIT, - "TRAIT_NOSOFTCRIT" = TRAIT_NOSOFTCRIT, - "TRAIT_MINDSHIELD" = TRAIT_MINDSHIELD, - "TRAIT_DISSECTED" = TRAIT_DISSECTED, - "TRAIT_SURGICALLY_ANALYZED" = TRAIT_SURGICALLY_ANALYZED, - "TRAIT_SIXTHSENSE" = TRAIT_SIXTHSENSE, - "TRAIT_FEARLESS" = TRAIT_FEARLESS, - "TRAIT_PARALYSIS_L_ARM" = TRAIT_PARALYSIS_L_ARM, - "TRAIT_PARALYSIS_R_ARM" = TRAIT_PARALYSIS_R_ARM, - "TRAIT_PARALYSIS_L_LEG" = TRAIT_PARALYSIS_L_LEG, - "TRAIT_PARALYSIS_R_LEG" = TRAIT_PARALYSIS_R_LEG, - "TRAIT_CANNOT_OPEN_PRESENTS" = TRAIT_CANNOT_OPEN_PRESENTS, - "TRAIT_PRESENT_VISION" = TRAIT_PRESENT_VISION, - "TRAIT_DISK_VERIFIER" = TRAIT_DISK_VERIFIER, - "TRAIT_BYPASS_MEASURES" = TRAIT_BYPASS_MEASURES, - "TRAIT_NOMOBSWAP" = TRAIT_NOMOBSWAP, - "TRAIT_XRAY_VISION" = TRAIT_XRAY_VISION, - "TRAIT_WEB_WEAVER" = TRAIT_WEB_WEAVER, - "TRAIT_WEB_SURFER" = TRAIT_WEB_SURFER, - "TRAIT_THERMAL_VISION" = TRAIT_THERMAL_VISION, - "TRAIT_ABDUCTOR_TRAINING" = TRAIT_ABDUCTOR_TRAINING, - "TRAIT_ABDUCTOR_SCIENTIST_TRAINING" = TRAIT_ABDUCTOR_SCIENTIST_TRAINING, - "TRAIT_SURGEON" = TRAIT_SURGEON, - "TRAIT_STRONG_GRABBER" = TRAIT_STRONG_GRABBER, - "TRAIT_SOOTHED_THROAT" = TRAIT_SOOTHED_THROAT, - "TRAIT_BOOZE_SLIDER" = TRAIT_BOOZE_SLIDER, - "TRAIT_QUICK_CARRY" = TRAIT_QUICK_CARRY, - "TRAIT_QUICKER_CARRY" = TRAIT_QUICKER_CARRY, - "TRAIT_PLANT_SAFE" = TRAIT_PLANT_SAFE, - "TRAIT_UNINTELLIGIBLE_SPEECH" = TRAIT_UNINTELLIGIBLE_SPEECH, - "TRAIT_UNSTABLE" = TRAIT_UNSTABLE, - "TRAIT_OIL_FRIED" = TRAIT_OIL_FRIED, - "TRAIT_MEDICAL_HUD" = TRAIT_MEDICAL_HUD, - "TRAIT_SECURITY_HUD" = TRAIT_SECURITY_HUD, - "TRAIT_DIAGNOSTIC_HUD" = TRAIT_DIAGNOSTIC_HUD, - "TRAIT_TRAIT_MEDIBOTCOMINGTHROUGH" = TRAIT_MEDIBOTCOMINGTHROUGH, - "TRAIT_PASSTABLE" = TRAIT_PASSTABLE, - "TRAIT_NOFLASH" = TRAIT_NOFLASH, - "TRAIT_XENO_IMMUNE" = TRAIT_XENO_IMMUNE, - "TRAIT_NAIVE" = TRAIT_NAIVE, - "TRAIT_PRIMITIVE" = TRAIT_PRIMITIVE, //unable to use mechs. Given to Ash Walkers - "TRAIT_GUNFLIP" = TRAIT_GUNFLIP, - "TRAIT_SPECIAL_TRAUMA_BOOST" = TRAIT_SPECIAL_TRAUMA_BOOST, - "TRAIT_SPACEWALK" = TRAIT_SPACEWALK, - "TRAIT_GAMERGOD" = TRAIT_GAMERGOD, - "TRAIT_GIANT" = TRAIT_GIANT, - "TRAIT_DWARF" = TRAIT_DWARF, - "TRAIT_SILENT_FOOTSTEPS" = TRAIT_SILENT_FOOTSTEPS, - "TRAIT_NICE_SHOT" = TRAIT_NICE_SHOT, - "TRAIT_TUMOR_SUPPRESSION" = TRAIT_TUMOR_SUPPRESSED, - "TRAIT_PERMANENTLY_ONFIRE" = TRAIT_PERMANENTLY_ONFIRE, - "TRAIT_SIGN_LANG" = TRAIT_SIGN_LANG, - "TRAIT_UNDERWATER_BASKETWEAVING_KNOWLEDGE" = TRAIT_UNDERWATER_BASKETWEAVING_KNOWLEDGE, - "TRAIT_WINE_TASTER" = TRAIT_WINE_TASTER, - "TRAIT_BONSAI" = TRAIT_BONSAI, - "TRAIT_LIGHTBULB_REMOVER" = TRAIT_LIGHTBULB_REMOVER, - "TRAIT_KNOW_ROBO_WIRES" = TRAIT_KNOW_ROBO_WIRES, - "TRAIT_KNOW_ENGI_WIRES" = TRAIT_KNOW_ENGI_WIRES, - "TRAIT_ALCOHOL_TOLERANCE" = TRAIT_ALCOHOL_TOLERANCE, - "TRAIT_AGEUSIA" = TRAIT_AGEUSIA, - "TRAIT_HEAVY_SLEEPER" = TRAIT_HEAVY_SLEEPER, - "TRAIT_NIGHT_VISION" = TRAIT_NIGHT_VISION, - "TRAIT_LIGHT_STEP" = TRAIT_LIGHT_STEP, - "TRAIT_SPIRITUAL" = TRAIT_SPIRITUAL, - "TRAIT_CLOWN_ENJOYER" = TRAIT_CLOWN_ENJOYER, - "TRAIT_MIME_FAN" = TRAIT_MIME_FAN, - "TRAIT_VORACIOUS" = TRAIT_VORACIOUS, - "TRAIT_SELF_AWARE" = TRAIT_SELF_AWARE, - "TRAIT_FREERUNNING" = TRAIT_FREERUNNING, - "TRAIT_SETTLER" = TRAIT_SETTLER, - "TRAIT_SKITTISH" = TRAIT_SKITTISH, - "TRAIT_PROSOPAGNOSIA" = TRAIT_PROSOPAGNOSIA, - "TRAIT_TAGGER" = TRAIT_TAGGER, - "TRAIT_PHOTOGRAPHER" = TRAIT_PHOTOGRAPHER, - "TRAIT_MUSICIAN" = TRAIT_MUSICIAN, - "TRAIT_LIGHT_DRINKER" = TRAIT_LIGHT_DRINKER, - "TRAIT_SMOKER" = TRAIT_SMOKER, - "TRAIT_EMPATH" = TRAIT_EMPATH, - "TRAIT_FRIENDLY" = TRAIT_FRIENDLY, - "TRAIT_GRABWEAKNESS" = TRAIT_GRABWEAKNESS, - "TRAIT_SNOB" = TRAIT_SNOB, - "TRAIT_BALD" = TRAIT_BALD, - "TRAIT_BADTOUCH" = TRAIT_BADTOUCH, - "TRAIT_AGENDER" = TRAIT_AGENDER, - "TRAIT_BLOOD_CLANS" = TRAIT_BLOOD_CLANS, - "TRAIT_HAS_MARKINGS" = TRAIT_HAS_MARKINGS, - "TRAIT_USES_SKINTONES" = TRAIT_USES_SKINTONES, - "TRAIT_MUTANT_COLORS" = TRAIT_MUTANT_COLORS, - "TRAIT_FIXED_MUTANT_COLORS" = TRAIT_FIXED_MUTANT_COLORS, - "TRAIT_FIXED_HAIRCOLOR" = TRAIT_FIXED_HAIRCOLOR, - "TRAIT_NO_BLOOD_OVERLAY" = TRAIT_NO_BLOOD_OVERLAY, - "TRAIT_NO_UNDERWEAR" = TRAIT_NO_UNDERWEAR, - "TRAIT_NO_AUGMENTS" = TRAIT_NO_AUGMENTS, - "TRAIT_NOBLOOD" = TRAIT_NOBLOOD, - "TRAIT_LIVERLESS_METABOLISM" = TRAIT_LIVERLESS_METABOLISM, - "TRAIT_NO_ZOMBIFY" = TRAIT_NO_ZOMBIFY, - "TRAIT_NO_TRANSFORMATION_STING" = TRAIT_NO_TRANSFORMATION_STING, - "TRAIT_NO_DNA_COPY" = TRAIT_NO_DNA_COPY, - "TRAIT_DRINKS_BLOOD" = TRAIT_DRINKS_BLOOD, - "TRAIT_KISS_OF_DEATH" = TRAIT_KISS_OF_DEATH, - "TRAIT_ANXIOUS" = TRAIT_ANXIOUS, - "TRAIT_WEAK_SOUL" = TRAIT_WEAK_SOUL, - "TRAIT_NO_SOUL" = TRAIT_NO_SOUL, - "TRAIT_INVISIBLE_MAN" = TRAIT_INVISIBLE_MAN, - "TRAIT_SACRIFICED" = TRAIT_SACRIFICED, //SKYRAT CHANGE - SOULSTONE_CHANGES - "TRAIT_HIDE_EXTERNAL_ORGANS" = TRAIT_HIDE_EXTERNAL_ORGANS, - "TRAIT_CULT_HALO" = TRAIT_CULT_HALO, - "TRAIT_UNNATURAL_RED_GLOWY_EYES" = TRAIT_UNNATURAL_RED_GLOWY_EYES, - "TRAIT_BLOODSHOT_EYES" = TRAIT_BLOODSHOT_EYES, - "TRAIT_SHIFTY_EYES" = TRAIT_SHIFTY_EYES, - "TRAIT_OVERSIZED" = TRAIT_OVERSIZED, //SKYRAT EDIT ADDITION - Leaving this here so that it hopefully doesn't cause conflicts again in the future(?) - "TRAIT_CANNOT_BE_UNBUCKLED" = TRAIT_CANNOT_BE_UNBUCKLED, - "TRAIT_GAMER" = TRAIT_GAMER, - "TRAIT_UNKNOWN" = TRAIT_UNKNOWN, - "TRAIT_CHASM_DESTROYED" = TRAIT_CHASM_DESTROYED, - "TRAIT_MIMING" = TRAIT_MIMING, - "TRAIT_PREVENT_IMPLANT_AUTO_EXPLOSION" = TRAIT_PREVENT_IMPLANT_AUTO_EXPLOSION, - "TRAIT_UNOBSERVANT" = TRAIT_UNOBSERVANT, - "TRAIT_MORBID" = TRAIT_MORBID, - "TRAIT_UNDENSE" = TRAIT_UNDENSE, - "TRAIT_EXPANDED_FOV" = TRAIT_EXPANDED_FOV, - "TRAIT_GOOD_HEARING" = TRAIT_GOOD_HEARING, - "TRAIT_XRAY_HEARING" = TRAIT_XRAY_HEARING, - "TRAIT_TENTACLE_IMMUNE" = TRAIT_TENTACLE_IMMUNE, - "TRAIT_OVERWATCH_IMMUNE" = TRAIT_OVERWATCH_IMMUNE, - "TRAIT_NO_TRANSFORM" = TRAIT_NO_TRANSFORM, - ), - /obj/item/bodypart = list( - "TRAIT_PARALYSIS" = TRAIT_PARALYSIS, - ), - /obj/item/organ/internal/lungs = list( - "TRAIT_SPACEBREATHING" = TRAIT_SPACEBREATHING, - ), - /obj/item/organ/internal/liver = list( - "TRAIT_LAW_ENFORCEMENT_METABOLISM" = TRAIT_LAW_ENFORCEMENT_METABOLISM, - "TRAIT_CULINARY_METABOLISM" = TRAIT_CULINARY_METABOLISM, - "TRAIT_COMEDY_METABOLISM" = TRAIT_COMEDY_METABOLISM, - "TRAIT_MEDICAL_METABOLISM" = TRAIT_MEDICAL_METABOLISM, - "TRAIT_ENGINEER_METABOLISM" = TRAIT_ENGINEER_METABOLISM, - "TRAIT_ROYAL_METABOLISM" = TRAIT_ROYAL_METABOLISM, - "TRAIT_PRETENDER_ROYAL_METABOLISM" = TRAIT_PRETENDER_ROYAL_METABOLISM, - "TRAIT_BALLMER_SCIENTIST" = TRAIT_BALLMER_SCIENTIST, - "TRAIT_MAINTENANCE_METABOLISM" = TRAIT_MAINTENANCE_METABOLISM, - "TRAIT_CORONER_METABOLISM" = TRAIT_CORONER_METABOLISM, - ), - /obj/item = list( - "TRAIT_NODROP" = TRAIT_NODROP, - "TRAIT_NO_STORAGE_INSERT" = TRAIT_NO_STORAGE_INSERT, - "TRAIT_T_RAY_VISIBLE" = TRAIT_T_RAY_VISIBLE, - "TRAIT_NO_TELEPORT" = TRAIT_NO_TELEPORT, - "TRAIT_APC_SHOCKING" = TRAIT_APC_SHOCKING, - "TRAIT_UNCATCHABLE" = TRAIT_UNCATCHABLE, - "TRAIT_DANGEROUS_OBJECT" = TRAIT_DANGEROUS_OBJECT, - "TRAIT_GERM_SENSITIVE" = TRAIT_GERM_SENSITIVE, - "TRAIT_HAUNTED" = TRAIT_HAUNTED, - ), - /atom = list( - "TRAIT_KEEP_TOGETHER" = TRAIT_KEEP_TOGETHER, - ), - /atom/movable = list( - "TRAIT_MOVE_GROUND" = TRAIT_MOVE_GROUND, - "TRAIT_MOVE_FLYING" = TRAIT_MOVE_FLYING, - "TRAIT_MOVE_VENTCRAWLING" = TRAIT_MOVE_VENTCRAWLING, - "TRAIT_MOVE_FLOATING" = TRAIT_MOVE_FLOATING, - "TRAIT_MOVE_PHASING" = TRAIT_MOVE_PHASING, - "TRAIT_LAVA_IMMUNE" = TRAIT_LAVA_IMMUNE, - "TRAIT_ASHSTORM_IMMUNE" = TRAIT_ASHSTORM_IMMUNE, - "TRAIT_SNOWSTORM_IMMUNE" = TRAIT_SNOWSTORM_IMMUNE, - "TRAIT_VOIDSTORM_IMMUNE" = TRAIT_VOIDSTORM_IMMUNE, - "TRAIT_WEATHER_IMMUNE" = TRAIT_WEATHER_IMMUNE, - "TRAIT_RUNECHAT_HIDDEN" = TRAIT_RUNECHAT_HIDDEN, - "TRAIT_HAS_LABEL" = TRAIT_HAS_LABEL, - ), - /obj/item/card/id = list( - "TRAIT_MAGNETIC_ID_CARD" = TRAIT_MAGNETIC_ID_CARD, - ), - /obj/item/fish = list( - "TRAIT_RESIST_EMULSIFY" = TRAIT_RESIST_EMULSIFY, - "TRAIT_FISH_SELF_REPRODUCE" = TRAIT_FISH_SELF_REPRODUCE, - "TRAIT_FISH_NO_MATING" = TRAIT_FISH_NO_MATING, - "TRAIT_YUCKY_FISH" = TRAIT_YUCKY_FISH, - "TRAIT_FISH_TOXIN_IMMUNE" = TRAIT_FISH_TOXIN_IMMUNE, - "TRAIT_FISH_CROSSBREEDER" = TRAIT_FISH_CROSSBREEDER, - "TRAIT_FISH_FED_LUBE" = TRAIT_FISH_FED_LUBE, - "TRAIT_FISH_NO_HUNGER" = TRAIT_FISH_NO_HUNGER, - ), -)) - -/// value -> trait name, generated on use from trait_by_type global -GLOBAL_LIST(trait_name_map) - -/proc/generate_trait_name_map() - . = list() - for(var/key in GLOB.traits_by_type) - for(var/tname in GLOB.traits_by_type[key]) - var/val = GLOB.traits_by_type[key][tname] - .[val] = tname - -GLOBAL_LIST_INIT(movement_type_trait_to_flag, list( - TRAIT_MOVE_GROUND = GROUND, - TRAIT_MOVE_FLYING = FLYING, - TRAIT_MOVE_VENTCRAWLING = VENTCRAWLING, - TRAIT_MOVE_FLOATING = FLOATING, - TRAIT_MOVE_PHASING = PHASING - )) - -GLOBAL_LIST_INIT(movement_type_addtrait_signals, set_movement_type_addtrait_signals()) -GLOBAL_LIST_INIT(movement_type_removetrait_signals, set_movement_type_removetrait_signals()) - -/proc/set_movement_type_addtrait_signals(signal_prefix) - . = list() - for(var/trait in GLOB.movement_type_trait_to_flag) - . += SIGNAL_ADDTRAIT(trait) - -/proc/set_movement_type_removetrait_signals(signal_prefix) - . = list() - for(var/trait in GLOB.movement_type_trait_to_flag) - . += SIGNAL_REMOVETRAIT(trait) diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm new file mode 100644 index 00000000000000..0655843cfb1033 --- /dev/null +++ b/code/_globalvars/traits/_traits.dm @@ -0,0 +1,695 @@ +// This file should contain every single global trait in the game in a type-based list, as well as any additional trait-related information that's useful to have on a global basis. +// This file is used in linting, so make sure to add everything alphabetically and what-not. +// Do consider adding your trait entry to the similar list in `admin_tooling.dm` if you want it to be accessible to admins (which is probably the case for 75% of traits). + +// Please do note that there is absolutely no bearing on what traits are added to what subtype of `/datum`, this is just an easily referenceable list sorted by type. +// The only thing that truly matters about traits is the code that is built to handle the traits, and where that code is located. Nothing else. + +GLOBAL_LIST_INIT(traits_by_type, list( + /atom = list( + "TRAIT_AI_PAUSED" = TRAIT_AI_PAUSED, + "TRAIT_BANNED_FROM_CARGO_SHUTTLE" = TRAIT_BANNED_FROM_CARGO_SHUTTLE, + "TRAIT_BEING_SHOCKED" = TRAIT_BEING_SHOCKED, + "TRAIT_CLIMBABLE" = TRAIT_CLIMBABLE, + "TRAIT_CURRENTLY_CLEANING" = TRAIT_CURRENTLY_CLEANING, + "TRAIT_CUSTOMIZABLE_REAGENT_HOLDER" = TRAIT_CUSTOMIZABLE_REAGENT_HOLDER, + "TRAIT_DO_NOT_SPLASH" = TRAIT_DO_NOT_SPLASH, + "TRAIT_DRIED" = TRAIT_DRIED, + "TRAIT_DRYABLE" = TRAIT_DRYABLE, + "TRAIT_FOOD_CHEF_MADE" = TRAIT_FOOD_CHEF_MADE, + "TRAIT_FOOD_FRIED" = TRAIT_FOOD_FRIED, + "TRAIT_FOOD_GRILLED" = TRAIT_FOOD_GRILLED, + "TRAIT_FOOD_SILVER" = TRAIT_FOOD_SILVER, + "TRAIT_KEEP_TOGETHER" = TRAIT_KEEP_TOGETHER, + "TRAIT_LIGHTING_DEBUGGED" = TRAIT_LIGHTING_DEBUGGED, + "TRAIT_RECENTLY_COINED" = TRAIT_RECENTLY_COINED, + "TRAIT_RUSTY" = TRAIT_RUSTY, + "TRAIT_SPINNING" = TRAIT_SPINNING, + "TRAIT_STICKERED" = TRAIT_STICKERED, + ), + /atom/movable = list( + "TRAIT_ACTIVE_STORAGE" = TRAIT_ACTIVE_STORAGE, + "TRAIT_AREA_SENSITIVE" = TRAIT_AREA_SENSITIVE, + "TRAIT_ASHSTORM_IMMUNE" = TRAIT_ASHSTORM_IMMUNE, + "TRAIT_BLOCKING_EXPLOSIVES" = TRAIT_BLOCKING_EXPLOSIVES, + "TRAIT_CASTABLE_LOC" = TRAIT_CASTABLE_LOC, + "TRAIT_DEL_ON_SPACE_DUMP" = TRAIT_DEL_ON_SPACE_DUMP, + "TRAIT_FISH_CASE_COMPATIBILE" = TRAIT_FISH_CASE_COMPATIBILE, + "TRAIT_FISH_SAFE_STORAGE" = TRAIT_FISH_SAFE_STORAGE, + "TRAIT_FROZEN" = TRAIT_FROZEN, + "TRAIT_HAS_LABEL" = TRAIT_HAS_LABEL, + "TRAIT_HEARING_SENSITIVE" = TRAIT_HEARING_SENSITIVE, + "TRAIT_HYPERSPACED" = TRAIT_HYPERSPACED, + "TRAIT_IMMERSED" = TRAIT_IMMERSED, + "TRAIT_IRRADIATED" = TRAIT_IRRADIATED, + "TRAIT_LAVA_IMMUNE" = TRAIT_LAVA_IMMUNE, + "TRAIT_MOVE_FLOATING" = TRAIT_MOVE_FLOATING, + "TRAIT_MOVE_FLYING" = TRAIT_MOVE_FLYING, + "TRAIT_MOVE_GROUND" = TRAIT_MOVE_GROUND, + "TRAIT_MOVE_PHASING" = TRAIT_MOVE_PHASING, + "TRAIT_MOVE_VENTCRAWLING" = TRAIT_MOVE_VENTCRAWLING, + "TRAIT_MOVE_UPSIDE_DOWN" = TRAIT_MOVE_UPSIDE_DOWN, + "TRAIT_NO_FLOATING_ANIM" = TRAIT_NO_FLOATING_ANIM, + "TRAIT_NO_MANIFEST_CONTENTS_ERROR" = TRAIT_NO_MANIFEST_CONTENTS_ERROR, + "TRAIT_NO_MISSING_ITEM_ERROR" = TRAIT_NO_MISSING_ITEM_ERROR, + "TRAIT_NOT_ENGRAVABLE" = TRAIT_NOT_ENGRAVABLE, + "TRAIT_ODD_CUSTOMIZABLE_FOOD_INGREDIENT" = TRAIT_ODD_CUSTOMIZABLE_FOOD_INGREDIENT, + "TRAIT_RUNECHAT_HIDDEN" = TRAIT_RUNECHAT_HIDDEN, + "TRAIT_SECLUDED_LOCATION" = TRAIT_SECLUDED_LOCATION, + "TRAIT_SNOWSTORM_IMMUNE" = TRAIT_SNOWSTORM_IMMUNE, + "TRAIT_TELEKINESIS_CONTROLLED" = TRAIT_TELEKINESIS_CONTROLLED, + "TRAIT_UNDERFLOOR" = TRAIT_UNDERFLOOR, + "TRAIT_UNIQUE_IMMERSE" = TRAIT_UNIQUE_IMMERSE, + "TRAIT_VOIDSTORM_IMMUNE" = TRAIT_VOIDSTORM_IMMUNE, + "TRAIT_WAS_RENAMED" = TRAIT_WAS_RENAMED, + "TRAIT_WEATHER_IMMUNE" = TRAIT_WEATHER_IMMUNE, + ), + /datum/controller/subsystem/economy = list( + "TRAIT_MARKET_CRASHING" = TRAIT_MARKET_CRASHING, + ), + // AKA SSstation + /datum/controller/subsystem/processing/station = list( + "STATION_TRAIT_BANANIUM_SHIPMENTS" = STATION_TRAIT_BANANIUM_SHIPMENTS, + "STATION_TRAIT_BIGGER_PODS" = STATION_TRAIT_BIGGER_PODS, + "STATION_TRAIT_BIRTHDAY" = STATION_TRAIT_BIRTHDAY, + "STATION_TRAIT_BOTS_GLITCHED" = STATION_TRAIT_BOTS_GLITCHED, + "STATION_TRAIT_CARP_INFESTATION" = STATION_TRAIT_CARP_INFESTATION, + "STATION_TRAIT_CYBERNETIC_REVOLUTION" = STATION_TRAIT_CYBERNETIC_REVOLUTION, + "STATION_TRAIT_EMPTY_MAINT" = STATION_TRAIT_EMPTY_MAINT, + "STATION_TRAIT_FILLED_MAINT" = STATION_TRAIT_FILLED_MAINT, + "STATION_TRAIT_FORESTED" = STATION_TRAIT_FORESTED, + "STATION_TRAIT_HANGOVER" = STATION_TRAIT_HANGOVER, + "STATION_TRAIT_LATE_ARRIVALS" = STATION_TRAIT_LATE_ARRIVALS, + "STATION_TRAIT_LOANER_SHUTTLE" = STATION_TRAIT_LOANER_SHUTTLE, + "STATION_TRAIT_MEDBOT_MANIA" = STATION_TRAIT_MEDBOT_MANIA, + "STATION_TRAIT_PDA_GLITCHED" = STATION_TRAIT_PDA_GLITCHED, + "STATION_TRAIT_PREMIUM_INTERNALS" = STATION_TRAIT_PREMIUM_INTERNALS, + "STATION_TRAIT_RADIOACTIVE_NEBULA" = STATION_TRAIT_RADIOACTIVE_NEBULA, + "STATION_TRAIT_RANDOM_ARRIVALS" = STATION_TRAIT_RANDOM_ARRIVALS, + "STATION_TRAIT_REVOLUTIONARY_TRASHING" = STATION_TRAIT_REVOLUTIONARY_TRASHING, + "STATION_TRAIT_SHUTTLE_SALE" = STATION_TRAIT_SHUTTLE_SALE, + "STATION_TRAIT_SMALLER_PODS" = STATION_TRAIT_SMALLER_PODS, + "STATION_TRAIT_SPIDER_INFESTATION" = STATION_TRAIT_SPIDER_INFESTATION, + "STATION_TRAIT_UNIQUE_AI" = STATION_TRAIT_UNIQUE_AI, + "STATION_TRAIT_UNNATURAL_ATMOSPHERE" = STATION_TRAIT_UNNATURAL_ATMOSPHERE, + "STATION_TRAIT_VENDING_SHORTAGE" = STATION_TRAIT_VENDING_SHORTAGE, + ), + /datum/wound = list( + "TRAIT_WOUND_SCANNED" = TRAIT_WOUND_SCANNED, + ), + /mob = list( + "TRAIT_ABDUCTOR_SCIENTIST_TRAINING" = TRAIT_ABDUCTOR_SCIENTIST_TRAINING, + "TRAIT_ABDUCTOR_TRAINING" = TRAIT_ABDUCTOR_TRAINING, + "TRAIT_ADAMANTINE_EXTRACT_ARMOR" = TRAIT_ADAMANTINE_EXTRACT_ARMOR, + "TRAIT_ADVANCEDTOOLUSER" = TRAIT_ADVANCEDTOOLUSER, + "TRAIT_AGENDER" = TRAIT_AGENDER, + "TRAIT_AGEUSIA" = TRAIT_AGEUSIA, + "TRAIT_AIRLOCK_SHOCKIMMUNE" = TRAIT_AIRLOCK_SHOCKIMMUNE, + "TRAIT_AI_BAGATTACK" = TRAIT_AI_BAGATTACK, + "TRAIT_ALCOHOL_TOLERANCE" = TRAIT_ALCOHOL_TOLERANCE, + "TRAIT_ALLOWED_HONORBOUND_ATTACK" = TRAIT_ALLOWED_HONORBOUND_ATTACK, + "TRAIT_ALLOW_HERETIC_CASTING" = TRAIT_ALLOW_HERETIC_CASTING, + "TRAIT_ALWAYS_NO_ACCESS" = TRAIT_ALWAYS_NO_ACCESS, + "TRAIT_ALWAYS_WANTED" = TRAIT_ALWAYS_WANTED, + "TRAIT_ANGELIC" = TRAIT_ANGELIC, + "TRAIT_ANTENNAE" = TRAIT_ANTENNAE, + "TRAIT_ANTICONVULSANT" = TRAIT_ANTICONVULSANT, + "TRAIT_ANTIMAGIC" = TRAIT_ANTIMAGIC, + "TRAIT_ANTIMAGIC_NO_SELFBLOCK" = TRAIT_ANTIMAGIC_NO_SELFBLOCK, + "TRAIT_ANXIOUS" = TRAIT_ANXIOUS, + "TRAIT_BADDNA" = TRAIT_BADDNA, + "TRAIT_BADTOUCH" = TRAIT_BADTOUCH, + "TRAIT_BALD" = TRAIT_BALD, + "TRAIT_BATON_RESISTANCE" = TRAIT_BATON_RESISTANCE, + "TRAIT_BEING_BLADE_SHIELDED" = TRAIT_BEING_BLADE_SHIELDED, + "TRAIT_BLOB_ALLY" = TRAIT_BLOB_ALLY, + "TRAIT_BLOODSHOT_EYES" = TRAIT_BLOODSHOT_EYES, + "TRAIT_BLOODY_MESS" = TRAIT_BLOODY_MESS, + "TRAIT_BLOOD_CLANS" = TRAIT_BLOOD_CLANS, + "TRAIT_BLOOD_DEFICIENCY" = TRAIT_BLOOD_DEFICIENCY, + "TRAIT_BOMBIMMUNE" = TRAIT_BOMBIMMUNE, + "TRAIT_BONSAI" = TRAIT_BONSAI, + "TRAIT_BOOZE_SLIDER" = TRAIT_BOOZE_SLIDER, + "TRAIT_BRAINWASHING" = TRAIT_BRAINWASHING, + "TRAIT_BYPASS_EARLY_IRRADIATED_CHECK" = TRAIT_BYPASS_EARLY_IRRADIATED_CHECK, + "TRAIT_BYPASS_MEASURES" = TRAIT_BYPASS_MEASURES, + "TRAIT_CANNOT_BE_UNBUCKLED" = TRAIT_CANNOT_BE_UNBUCKLED, + "TRAIT_CANNOT_CRYSTALIZE" = TRAIT_CANNOT_CRYSTALIZE, + "TRAIT_CANNOT_OPEN_PRESENTS" = TRAIT_CANNOT_OPEN_PRESENTS, + "TRAIT_CANT_RIDE" = TRAIT_CANT_RIDE, + "TRAIT_CAN_HOLD_ITEMS" = TRAIT_CAN_HOLD_ITEMS, + "TRAIT_CAN_SIGN_ON_COMMS" = TRAIT_CAN_SIGN_ON_COMMS, + "TRAIT_CAN_STRIP" = TRAIT_CAN_STRIP, + "TRAIT_CAN_USE_NUKE" = TRAIT_CAN_USE_NUKE, + "TRAIT_CATLIKE_GRACE" = TRAIT_CATLIKE_GRACE, + "TRAIT_CHANGELING_HIVEMIND_MUTE" = TRAIT_CHANGELING_HIVEMIND_MUTE, + "TRAIT_CHASM_DESTROYED" = TRAIT_CHASM_DESTROYED, + "TRAIT_CHEF_KISS" = TRAIT_CHEF_KISS, + "TRAIT_CHUNKYFINGERS" = TRAIT_CHUNKYFINGERS, + "TRAIT_CHUNKYFINGERS_IGNORE_BATON" = TRAIT_CHUNKYFINGERS_IGNORE_BATON, + "TRAIT_CLEANBOT_WHISPERER" = TRAIT_CLEANBOT_WHISPERER, + "TRAIT_CLIFF_WALKER" = TRAIT_CLIFF_WALKER, + "TRAIT_CLOWN_ENJOYER" = TRAIT_CLOWN_ENJOYER, + "TRAIT_CLUMSY" = TRAIT_CLUMSY, + "TRAIT_COAGULATING" = TRAIT_COAGULATING, + "TRAIT_CORPSELOCKED" = TRAIT_CORPSELOCKED, + "TRAIT_CRITICAL_CONDITION" = TRAIT_CRITICAL_CONDITION, + "TRAIT_CULT_HALO" = TRAIT_CULT_HALO, + "TRAIT_CURSED" = TRAIT_CURSED, + "TRAIT_DEAF" = TRAIT_DEAF, + "TRAIT_DEATHCOMA" = TRAIT_DEATHCOMA, + "TRAIT_DEFIB_BLACKLISTED" = TRAIT_DEFIB_BLACKLISTED, + "TRAIT_DEPRESSION" = TRAIT_DEPRESSION, + "TRAIT_DETECT_STORM" = TRAIT_DETECT_STORM, + "TRAIT_DIAGNOSTIC_HUD" = TRAIT_DIAGNOSTIC_HUD, + "TRAIT_DISCOORDINATED_TOOL_USER" = TRAIT_DISCOORDINATED_TOOL_USER, + "TRAIT_DISEASELIKE_SEVERITY_MEDIUM" = TRAIT_DISEASELIKE_SEVERITY_MEDIUM, + "TRAIT_DISFIGURED" = TRAIT_DISFIGURED, + "TRAIT_DISGUISED" = TRAIT_DISGUISED, + "TRAIT_DISK_VERIFIER" = TRAIT_DISK_VERIFIER, + "TRAIT_DISSECTED" = TRAIT_DISSECTED, + "TRAIT_DONT_WRITE_MEMORY" = TRAIT_DONT_WRITE_MEMORY, + "TRAIT_DOUBLE_TAP" = TRAIT_DOUBLE_TAP, + "TRAIT_DREAMING" = TRAIT_DREAMING, + "TRAIT_DRINKS_BLOOD" = TRAIT_DRINKS_BLOOD, + "TRAIT_DUMB" = TRAIT_DUMB, + "TRAIT_DWARF" = TRAIT_DWARF, + "TRAIT_EASILY_WOUNDED" = TRAIT_EASILY_WOUNDED, + "TRAIT_EASYBLEED" = TRAIT_EASYBLEED, + "TRAIT_EASYDISMEMBER" = TRAIT_EASYDISMEMBER, + "TRAIT_ECHOLOCATION_EXTRA_RANGE" = TRAIT_ECHOLOCATION_EXTRA_RANGE, + "TRAIT_ECHOLOCATION_RECEIVER" = TRAIT_ECHOLOCATION_RECEIVER, + "TRAIT_ELDRITCH_PAINTING_EXAMINE" = TRAIT_ELDRITCH_PAINTING_EXAMINE, + "TRAIT_ELITE_CHALLENGER" = TRAIT_ELITE_CHALLENGER, + "TRAIT_EMOTEMUTE " = TRAIT_EMOTEMUTE, + "TRAIT_EMOTEMUTE" = TRAIT_EMOTEMUTE, + "TRAIT_EMPATH" = TRAIT_EMPATH, + "TRAIT_ENTRAILS_READER" = TRAIT_ENTRAILS_READER, + "TRAIT_EXPANDED_FOV" = TRAIT_EXPANDED_FOV, + "TRAIT_EXTROVERT" = TRAIT_EXTROVERT, + "TRAIT_FAKEDEATH" = TRAIT_FAKEDEATH, + "TRAIT_FAST_TYING" = TRAIT_FAST_TYING, + "TRAIT_FASTMED" = TRAIT_FASTMED, + "TRAIT_FAST_TYING" = TRAIT_FAST_TYING, + "TRAIT_FAT" = TRAIT_FAT, + "TRAIT_FEARLESS" = TRAIT_FEARLESS, + "TRAIT_FENCE_CLIMBER" = TRAIT_FENCE_CLIMBER, + "TRAIT_FINGERPRINT_PASSTHROUGH" = TRAIT_FINGERPRINT_PASSTHROUGH, + "TRAIT_FIST_MINING" = TRAIT_FIST_MINING, + "TRAIT_FIXED_HAIRCOLOR" = TRAIT_FIXED_HAIRCOLOR, + "TRAIT_FIXED_MUTANT_COLORS" = TRAIT_FIXED_MUTANT_COLORS, + "TRAIT_FLESH_DESIRE" = TRAIT_FLESH_DESIRE, + "TRAIT_FLOORED" = TRAIT_FLOORED, + "TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION" = TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION, + "TRAIT_FORCED_GRAVITY" = TRAIT_FORCED_GRAVITY, + "TRAIT_FORCED_STANDING" = TRAIT_FORCED_STANDING, + "TRAIT_FOV_APPLIED" = TRAIT_FOV_APPLIED, + "TRAIT_FREERUNNING" = TRAIT_FREERUNNING, + "TRAIT_FREE_FLOAT_MOVEMENT" = TRAIT_FREE_FLOAT_MOVEMENT, + "TRAIT_FREE_HYPERSPACE_MOVEMENT" = TRAIT_FREE_HYPERSPACE_MOVEMENT, + "TRAIT_FREE_HYPERSPACE_SOFTCORDON_MOVEMENT" = TRAIT_FREE_HYPERSPACE_SOFTCORDON_MOVEMENT, + "TRAIT_FRIENDLY" = TRAIT_FRIENDLY, + "TRAIT_FUGU_GLANDED" = TRAIT_FUGU_GLANDED, + "TRAIT_GAMER" = TRAIT_GAMER, + "TRAIT_GAMERGOD" = TRAIT_GAMERGOD, + "TRAIT_GARLIC_BREATH" = TRAIT_GARLIC_BREATH, + "TRAIT_GENELESS" = TRAIT_GENELESS, + "TRAIT_GIANT" = TRAIT_GIANT, + "TRAIT_GONE_FISHING" = TRAIT_GONE_FISHING, + "TRAIT_GOOD_HEARING" = TRAIT_GOOD_HEARING, + "TRAIT_GRABWEAKNESS" = TRAIT_GRABWEAKNESS, + "TRAIT_GREENTEXT_CURSED" = TRAIT_GREENTEXT_CURSED, + "TRAIT_GUNFLIP" = TRAIT_GUNFLIP, + "TRAIT_GUN_NATURAL" = TRAIT_GUN_NATURAL, + "TRAIT_HALT_RADIATION_EFFECTS" = TRAIT_HALT_RADIATION_EFFECTS, + "TRAIT_HANDS_BLOCKED" = TRAIT_HANDS_BLOCKED, + "TRAIT_HARDLY_WOUNDED" = TRAIT_HARDLY_WOUNDED, + "TRAIT_HAS_BEEN_KIDNAPPED" = TRAIT_HAS_BEEN_KIDNAPPED, + "TRAIT_HAS_CRANIAL_FISSURE" = TRAIT_HAS_CRANIAL_FISSURE, + "TRAIT_HAS_MARKINGS" = TRAIT_HAS_MARKINGS, + "TRAIT_HATED_BY_DOGS" = TRAIT_HATED_BY_DOGS, + "TRAIT_HEALS_FROM_CARP_RIFTS" = TRAIT_HEALS_FROM_CARP_RIFTS, + "TRAIT_HEALS_FROM_CULT_PYLONS" = TRAIT_HEALS_FROM_CULT_PYLONS, + "TRAIT_HEAR_THROUGH_DARKNESS" = TRAIT_HEAR_THROUGH_DARKNESS, + "TRAIT_HEAVY_DRINKER" = TRAIT_HEAVY_DRINKER, + "TRAIT_HEAVY_SLEEPER" = TRAIT_HEAVY_SLEEPER, + "TRAIT_HIDE_EXTERNAL_ORGANS" = TRAIT_HIDE_EXTERNAL_ORGANS, + "TRAIT_HIGH_VALUE_RANSOM" = TRAIT_HIGH_VALUE_RANSOM, + "TRAIT_HOLY" = TRAIT_HOLY, + "TRAIT_HOPELESSLY_ADDICTED" = TRAIT_HOPELESSLY_ADDICTED, + "TRAIT_HOT_SPRING_CURSED" = TRAIT_HOT_SPRING_CURSED, + "TRAIT_HULK" = TRAIT_HULK, + "TRAIT_HUSK" = TRAIT_HUSK, + "TRAIT_ID_APPRAISER" = TRAIT_ID_APPRAISER, + "TRAIT_IGNOREDAMAGESLOWDOWN" = TRAIT_IGNOREDAMAGESLOWDOWN, + "TRAIT_IGNORESLOWDOWN" = TRAIT_IGNORESLOWDOWN, + "TRAIT_IGNORING_GRAVITY" = TRAIT_IGNORING_GRAVITY, + "TRAIT_ILLITERATE" = TRAIT_ILLITERATE, + "TRAIT_IMMOBILIZED" = TRAIT_IMMOBILIZED, + "TRAIT_INCAPACITATED" = TRAIT_INCAPACITATED, + "TRAIT_INTROVERT" = TRAIT_INTROVERT, + "TRAIT_INVISIBLE_MAN" = TRAIT_INVISIBLE_MAN, + "TRAIT_INVISIMIN" = TRAIT_INVISIMIN, + "TRAIT_IN_CALL" = TRAIT_IN_CALL, + "TRAIT_IWASBATONED" = TRAIT_IWASBATONED, + "TRAIT_JOLLY" = TRAIT_JOLLY, + "TRAIT_KISS_OF_DEATH" = TRAIT_KISS_OF_DEATH, + "TRAIT_KNOCKEDOUT" = TRAIT_KNOCKEDOUT, + "TRAIT_KNOW_ENGI_WIRES" = TRAIT_KNOW_ENGI_WIRES, + "TRAIT_KNOW_ROBO_WIRES" = TRAIT_KNOW_ROBO_WIRES, + "TRAIT_LIGHTBULB_REMOVER" = TRAIT_LIGHTBULB_REMOVER, + "TRAIT_LIGHT_DRINKER" = TRAIT_LIGHT_DRINKER, + "TRAIT_LIGHT_STEP" = TRAIT_LIGHT_STEP, + "TRAIT_LIMBATTACHMENT" = TRAIT_LIMBATTACHMENT, + "TRAIT_LITERATE" = TRAIT_LITERATE, + "TRAIT_LIVERLESS_METABOLISM" = TRAIT_LIVERLESS_METABOLISM, + "TRAIT_LIVERLESS_METABOLISM" = TRAIT_LIVERLESS_METABOLISM, + "TRAIT_MADNESS_IMMUNE" = TRAIT_MADNESS_IMMUNE, + "TRAIT_MAGICALLY_GIFTED" = TRAIT_MAGICALLY_GIFTED, + "TRAIT_MAGICALLY_PHASED" = TRAIT_MAGICALLY_PHASED, + "TRAIT_MARTIAL_ARTS_IMMUNE" = TRAIT_MARTIAL_ARTS_IMMUNE, + "TRAIT_MEDIBOTCOMINGTHROUGH" = TRAIT_MEDIBOTCOMINGTHROUGH, + "TRAIT_MEDIBOTCOMINGTHROUGH" = TRAIT_MEDIBOTCOMINGTHROUGH, + "TRAIT_MEDICAL_HUD" = TRAIT_MEDICAL_HUD, + "TRAIT_MESON_VISION" = TRAIT_MESON_VISION, + "TRAIT_MIME_FAN" = TRAIT_MIME_FAN, + "TRAIT_MIMING" = TRAIT_MIMING, + "TRAIT_MINDSHIELD" = TRAIT_MINDSHIELD, + "TRAIT_MIND_TEMPORARILY_GONE" = TRAIT_MIND_TEMPORARILY_GONE, + "TRAIT_MOB_BREEDER" = TRAIT_MOB_BREEDER, + "TRAIT_MOB_TIPPED" = TRAIT_MOB_TIPPED, + "TRAIT_MORBID" = TRAIT_MORBID, + "TRAIT_MULTIZ_SUIT_SENSORS" = TRAIT_MULTIZ_SUIT_SENSORS, + "TRAIT_MUSICIAN" = TRAIT_MUSICIAN, + "TRAIT_MUTANT_COLORS" = TRAIT_MUTANT_COLORS, + "TRAIT_MUTE" = TRAIT_MUTE, + "TRAIT_NAIVE" = TRAIT_NAIVE, + "TRAIT_NEARSIGHTED_CORRECTED" = TRAIT_NEARSIGHTED_CORRECTED, + "TRAIT_NEGATES_GRAVITY" = TRAIT_NEGATES_GRAVITY, + "TRAIT_NEVER_WOUNDED" = TRAIT_NEVER_WOUNDED, + "TRAIT_NICE_SHOT" = TRAIT_NICE_SHOT, + "TRAIT_NIGHT_VISION" = TRAIT_NIGHT_VISION, + "TRAIT_NOBLOOD" = TRAIT_NOBLOOD, + "TRAIT_NOBREATH" = TRAIT_NOBREATH, + "TRAIT_NOCRITDAMAGE" = TRAIT_NOCRITDAMAGE, + "TRAIT_NOCRITOVERLAY" = TRAIT_NOCRITOVERLAY, + "TRAIT_NODEATH" = TRAIT_NODEATH, + "TRAIT_NODISMEMBER" = TRAIT_NODISMEMBER, + "TRAIT_NOFAT" = TRAIT_NOFAT, + "TRAIT_NOFEAR_HOLDUPS" = TRAIT_NOFEAR_HOLDUPS, + "TRAIT_NOFIRE" = TRAIT_NOFIRE, + "TRAIT_NOFIRE_SPREAD" = TRAIT_NOFIRE_SPREAD, + "TRAIT_NOFLASH" = TRAIT_NOFLASH, + "TRAIT_NOGUNS" = TRAIT_NOGUNS, + "TRAIT_NOHARDCRIT" = TRAIT_NOHARDCRIT, + "TRAIT_NOHUNGER" = TRAIT_NOHUNGER, + "TRAIT_NOLIMBDISABLE" = TRAIT_NOLIMBDISABLE, + "TRAIT_NOMOBSWAP" = TRAIT_NOMOBSWAP, + "TRAIT_NOSELFIGNITION_HEAD_ONLY" = TRAIT_NOSELFIGNITION_HEAD_ONLY, + "TRAIT_NOSOFTCRIT" = TRAIT_NOSOFTCRIT, + "TRAIT_NO_AUGMENTS" = TRAIT_NO_AUGMENTS, + "TRAIT_NO_BLOOD_OVERLAY" = TRAIT_NO_BLOOD_OVERLAY, + "TRAIT_NO_DEBRAIN_OVERLAY" = TRAIT_NO_DEBRAIN_OVERLAY, + "TRAIT_NO_DNA_COPY" = TRAIT_NO_DNA_COPY, + "TRAIT_NO_DNA_SCRAMBLE" = TRAIT_NO_DNA_SCRAMBLE, + "TRAIT_NO_FLOATING_ANIM" = TRAIT_NO_FLOATING_ANIM, + "TRAIT_NO_GLIDE" = TRAIT_NO_GLIDE, + "TRAIT_NO_PLASMA_TRANSFORM" = TRAIT_NO_PLASMA_TRANSFORM, + "TRAIT_NO_GUN_AKIMBO" = TRAIT_NO_GUN_AKIMBO, + "TRAIT_NO_IMMOBILIZE" = TRAIT_NO_IMMOBILIZE, + "TRAIT_NO_JUMPSUIT" = TRAIT_NO_JUMPSUIT, + "TRAIT_NO_MINDSWAP" = TRAIT_NO_MINDSWAP, + "TRAIT_NO_MIRROR_REFLECTION" = TRAIT_NO_MIRROR_REFLECTION, + "TRAIT_NO_PLASMA_TRANSFORM" = TRAIT_NO_PLASMA_TRANSFORM, + "TRAIT_NO_SLIP_ALL" = TRAIT_NO_SLIP_ALL, + "TRAIT_NO_SLIP_ICE" = TRAIT_NO_SLIP_ICE, + "TRAIT_NO_SLIP_SLIDE" = TRAIT_NO_SLIP_SLIDE, + "TRAIT_NO_SLIP_WATER" = TRAIT_NO_SLIP_WATER, + "TRAIT_NO_SOUL" = TRAIT_NO_SOUL, + "TRAIT_NO_STRIP" = TRAIT_NO_STRIP, + "TRAIT_NO_TRANSFORM" = TRAIT_NO_TRANSFORM, + "TRAIT_NO_TWOHANDING" = TRAIT_NO_TWOHANDING, + "TRAIT_NOCRITDAMAGE" = TRAIT_NOCRITDAMAGE, + "TRAIT_NO_UNDERWEAR" = TRAIT_NO_UNDERWEAR, + "TRAIT_NO_ZOMBIFY" = TRAIT_NO_ZOMBIFY, + "TRAIT_NUKEIMMUNE" = TRAIT_NUKEIMMUNE, + "TRAIT_OIL_FRIED" = TRAIT_OIL_FRIED, + "TRAIT_ON_ELEVATED_SURFACE" = TRAIT_ON_ELEVATED_SURFACE, + "TRAIT_ORBITING_FORBIDDEN" = TRAIT_ORBITING_FORBIDDEN, + "TRAIT_OVERDOSEIMMUNE" = TRAIT_OVERDOSEIMMUNE, + "TRAIT_OVERWATCHED" = TRAIT_OVERWATCHED, + "TRAIT_OVERWATCH_IMMUNE" = TRAIT_OVERWATCH_IMMUNE, + "TRAIT_PACIFISM" = TRAIT_PACIFISM, + "TRAIT_PARALYSIS_L_ARM" = TRAIT_PARALYSIS_L_ARM, + "TRAIT_PARALYSIS_L_LEG" = TRAIT_PARALYSIS_L_LEG, + "TRAIT_PARALYSIS_R_ARM" = TRAIT_PARALYSIS_R_ARM, + "TRAIT_PARALYSIS_R_LEG" = TRAIT_PARALYSIS_R_LEG, + "TRAIT_PARROT_PERCHED" = TRAIT_PARROT_PERCHED, + "TRAIT_PASSTABLE" = TRAIT_PASSTABLE, + "TRAIT_PERFECT_ATTACKER" = TRAIT_PERFECT_ATTACKER, + "TRAIT_PERMANENTLY_MORTAL" = TRAIT_PERMANENTLY_MORTAL, + "TRAIT_PERMANENTLY_ONFIRE" = TRAIT_PERMANENTLY_ONFIRE, + "TRAIT_PHOTOGRAPHER" = TRAIT_PHOTOGRAPHER, + "TRAIT_PIERCEIMMUNE" = TRAIT_PIERCEIMMUNE, + "TRAIT_PLANT_SAFE" = TRAIT_PLANT_SAFE, + "TRAIT_PLASMA_LOVER_METABOLISM" = TRAIT_PLASMA_LOVER_METABOLISM, + "TRAIT_POSTERBOY" = TRAIT_POSTERBOY, + "TRAIT_PRESENT_VISION" = TRAIT_PRESENT_VISION, + "TRAIT_PRESERVE_UI_WITHOUT_CLIENT" = TRAIT_PRESERVE_UI_WITHOUT_CLIENT, + "TRAIT_PREVENT_IMPLANT_AUTO_EXPLOSION" = TRAIT_PREVENT_IMPLANT_AUTO_EXPLOSION, + "TRAIT_PRIMITIVE" = TRAIT_PRIMITIVE, //unable to use mechs. Given to Ash Walkers + "TRAIT_PROSOPAGNOSIA" = TRAIT_PROSOPAGNOSIA, + "TRAIT_PULL_BLOCKED" = TRAIT_PULL_BLOCKED, + "TRAIT_PUSHIMMUNE" = TRAIT_PUSHIMMUNE, + "TRAIT_QUICKER_CARRY" = TRAIT_QUICKER_CARRY, + "TRAIT_QUICK_BUILD" = TRAIT_QUICK_BUILD, + "TRAIT_QUICK_CARRY" = TRAIT_QUICK_CARRY, + "TRAIT_RADIMMUNE" = TRAIT_RADIMMUNE, + "TRAIT_RDS_SUPPRESSED" = TRAIT_RDS_SUPPRESSED, + "TRAIT_REAGENT_SCANNER" = TRAIT_REAGENT_SCANNER, + "TRAIT_RECENTLY_BLOCKED_MAGIC" = TRAIT_RECENTLY_BLOCKED_MAGIC, + "TRAIT_RELAYING_ATTACKER" = TRAIT_RELAYING_ATTACKER, + "TRAIT_REMOTE_TASTING" = TRAIT_REMOTE_TASTING, + "TRAIT_RESEARCH_SCANNER" = TRAIT_RESEARCH_SCANNER, + "TRAIT_RESISTCOLD" = TRAIT_RESISTCOLD, + "TRAIT_RESISTHEAT" = TRAIT_RESISTHEAT, + "TRAIT_RESISTHEATHANDS" = TRAIT_RESISTHEATHANDS, + "TRAIT_RESISTHIGHPRESSURE" = TRAIT_RESISTHIGHPRESSURE, + "TRAIT_RESISTLOWPRESSURE" = TRAIT_RESISTLOWPRESSURE, + "TRAIT_RESTRAINED" = TRAIT_RESTRAINED, + "TRAIT_REVEAL_FISH" = TRAIT_REVEAL_FISH, + "TRAIT_REVENANT_INHIBITED" = TRAIT_REVENANT_INHIBITED, + "TRAIT_REVENANT_REVEALED" = TRAIT_REVENANT_REVEALED, + "TRAIT_RIFT_FAILURE" = TRAIT_RIFT_FAILURE, + "TRAIT_ROCK_EATER" = TRAIT_ROCK_EATER, + "TRAIT_ROCK_METAMORPHIC" = TRAIT_ROCK_METAMORPHIC, + "TRAIT_ROD_SUPLEX" = TRAIT_ROD_SUPLEX, + "TRAIT_SABRAGE_PRO" = TRAIT_SABRAGE_PRO, + "TRAIT_SACRIFICED" = TRAIT_SACRIFICED, + "TRAIT_SECURITY_HUD" = TRAIT_SECURITY_HUD, + "TRAIT_SEE_GLASS_COLORS" = TRAIT_SEE_GLASS_COLORS, + "TRAIT_SELF_AWARE" = TRAIT_SELF_AWARE, + "TRAIT_SETTLER" = TRAIT_SETTLER, + "TRAIT_SHAVED" = TRAIT_SHAVED, + "TRAIT_SHIFTY_EYES" = TRAIT_SHIFTY_EYES, + "TRAIT_SHOCKIMMUNE" = TRAIT_SHOCKIMMUNE, + "TRAIT_SIGN_LANG" = TRAIT_SIGN_LANG, + "TRAIT_SILENT_FOOTSTEPS" = TRAIT_SILENT_FOOTSTEPS, + "TRAIT_SIXTHSENSE" = TRAIT_SIXTHSENSE, + "TRAIT_SKITTISH" = TRAIT_SKITTISH, + "TRAIT_SLEEPIMMUNE" = TRAIT_SLEEPIMMUNE, + "TRAIT_SMOKER" = TRAIT_SMOKER, + "TRAIT_SNEAK" = TRAIT_SNEAK, + "TRAIT_SNOB" = TRAIT_SNOB, + "TRAIT_SOFTSPOKEN" = TRAIT_SOFTSPOKEN, + "TRAIT_SOOTHED_THROAT" = TRAIT_SOOTHED_THROAT, + "TRAIT_SPACEWALK" = TRAIT_SPACEWALK, + "TRAIT_SPARRING" = TRAIT_SPARRING, + "TRAIT_SPEAKS_CLEARLY" = TRAIT_SPEAKS_CLEARLY, + "TRAIT_SPECIAL_TRAUMA_BOOST" = TRAIT_SPECIAL_TRAUMA_BOOST, + "TRAIT_SPIDER_CONSUMED" = TRAIT_SPIDER_CONSUMED, + "TRAIT_SPIRITUAL" = TRAIT_SPIRITUAL, + "TRAIT_SPRAY_PAINTABLE" = TRAIT_SPRAY_PAINTABLE, + "TRAIT_STABLEHEART" = TRAIT_STABLEHEART, + "TRAIT_STABLELIVER" = TRAIT_STABLELIVER, + "TRAIT_STASIS" = TRAIT_STASIS, + "TRAIT_STRONG_GRABBER" = TRAIT_STRONG_GRABBER, + "TRAIT_STUNIMMUNE" = TRAIT_STUNIMMUNE, + "TRAIT_SUCCUMB_OVERRIDE" = TRAIT_SUCCUMB_OVERRIDE, + "TRAIT_SUICIDED" = TRAIT_SUICIDED, + "TRAIT_SUPERMATTER_SOOTHER" = TRAIT_SUPERMATTER_SOOTHER, + "TRAIT_SURGEON" = TRAIT_SURGEON, + "TRAIT_SURGICALLY_ANALYZED" = TRAIT_SURGICALLY_ANALYZED, + "TRAIT_TACKLING_FRAIL_ATTACKER" = TRAIT_TACKLING_FRAIL_ATTACKER, + "TRAIT_TACKLING_TAILED_DEFENDER" = TRAIT_TACKLING_TAILED_DEFENDER, + "TRAIT_TACKLING_WINGED_ATTACKER" = TRAIT_TACKLING_WINGED_ATTACKER, + "TRAIT_TAGGER" = TRAIT_TAGGER, + "TRAIT_TEMPORARY_BODY" = TRAIT_TEMPORARY_BODY, + "TRAIT_TENACIOUS" = TRAIT_TENACIOUS, + "TRAIT_TENTACLE_IMMUNE" = TRAIT_TENTACLE_IMMUNE, + "TRAIT_TESLA_SHOCKIMMUNE" = TRAIT_TESLA_SHOCKIMMUNE, + "TRAIT_THERMAL_VISION" = TRAIT_THERMAL_VISION, + "TRAIT_THINKING_IN_CHARACTER" = TRAIT_THINKING_IN_CHARACTER, + "TRAIT_THROWINGARM" = TRAIT_THROWINGARM, + "TRAIT_TIME_STOP_IMMUNE" = TRAIT_TIME_STOP_IMMUNE, + "TRAIT_TOWER_OF_BABEL" = TRAIT_TOWER_OF_BABEL, + "TRAIT_TOXIMMUNE" = TRAIT_TOXIMMUNE, + "TRAIT_TOXINLOVER" = TRAIT_TOXINLOVER, + "TRAIT_TRUE_NIGHT_VISION" = TRAIT_TRUE_NIGHT_VISION, + "TRAIT_TUMOR_SUPPRESSED" = TRAIT_TUMOR_SUPPRESSED, + "TRAIT_TUMOR_SUPPRESSION" = TRAIT_TUMOR_SUPPRESSED, + "TRAIT_UI_BLOCKED" = TRAIT_UI_BLOCKED, + "TRAIT_UNBREAKABLE" = TRAIT_UNBREAKABLE, + "TRAIT_UNDENSE" = TRAIT_UNDENSE, + "TRAIT_UNDERWATER_BASKETWEAVING_KNOWLEDGE" = TRAIT_UNDERWATER_BASKETWEAVING_KNOWLEDGE, + "TRAIT_UNHUSKABLE" = TRAIT_UNHUSKABLE, + "TRAIT_UNINTELLIGIBLE_SPEECH" = TRAIT_UNINTELLIGIBLE_SPEECH, + "TRAIT_UNKNOWN" = TRAIT_UNKNOWN, + "TRAIT_UNNATURAL_RED_GLOWY_EYES" = TRAIT_UNNATURAL_RED_GLOWY_EYES, + "TRAIT_UNOBSERVANT" = TRAIT_UNOBSERVANT, + "TRAIT_UNSTABLE" = TRAIT_UNSTABLE, + "TRAIT_USED_DNA_VAULT" = TRAIT_USED_DNA_VAULT, + "TRAIT_USER_SCOPED" = TRAIT_USER_SCOPED, + "TRAIT_USES_SKINTONES" = TRAIT_USES_SKINTONES, + "TRAIT_VATGROWN" = TRAIT_VATGROWN, + "TRAIT_VENTCRAWLER_ALWAYS" = TRAIT_VENTCRAWLER_ALWAYS, + "TRAIT_VENTCRAWLER_NUDE" = TRAIT_VENTCRAWLER_NUDE, + "TRAIT_VIRUSIMMUNE" = TRAIT_VIRUSIMMUNE, + "TRAIT_VIRUS_RESISTANCE" = TRAIT_VIRUS_RESISTANCE, + "TRAIT_VORACIOUS" = TRAIT_VORACIOUS, + "TRAIT_WAS_EVOLVED" = TRAIT_WAS_EVOLVED, + "TRAIT_WEAK_SOUL" = TRAIT_WEAK_SOUL, + "TRAIT_WEB_SURFER" = TRAIT_WEB_SURFER, + "TRAIT_WEB_WEAVER" = TRAIT_WEB_WEAVER, + "TRAIT_WINE_TASTER" = TRAIT_WINE_TASTER, + "TRAIT_WING_BUFFET" = TRAIT_WING_BUFFET, + "TRAIT_WING_BUFFET_TIRED" = TRAIT_WING_BUFFET_TIRED, + "TRAIT_XENO_HOST" = TRAIT_XENO_HOST, + "TRAIT_XENO_IMMUNE" = TRAIT_XENO_IMMUNE, + "TRAIT_XRAY_HEARING" = TRAIT_XRAY_HEARING, + "TRAIT_XRAY_VISION" = TRAIT_XRAY_VISION, + ), + /obj/item = list( + "TRAIT_APC_SHOCKING" = TRAIT_APC_SHOCKING, + "TRAIT_BASIC_QUALITY_BAIT" = TRAIT_BASIC_QUALITY_BAIT, + "TRAIT_BLIND_TOOL" = TRAIT_BLIND_TOOL, + "TRAIT_CUSTOM_TAP_SOUND" = TRAIT_CUSTOM_TAP_SOUND, + "TRAIT_DANGEROUS_OBJECT" = TRAIT_DANGEROUS_OBJECT, + "TRAIT_FISHING_BAIT" = TRAIT_FISHING_BAIT, + "TRAIT_GERM_SENSITIVE" = TRAIT_GERM_SENSITIVE, + "TRAIT_GOOD_QUALITY_BAIT" = TRAIT_GOOD_QUALITY_BAIT, + "TRAIT_GREAT_QUALITY_BAIT" = TRAIT_GREAT_QUALITY_BAIT, + "TRAIT_HAUNTED" = TRAIT_HAUNTED, + "TRAIT_HONKSPAMMING" = TRAIT_HONKSPAMMING, + "TRAIT_INNATELY_FANTASTICAL_ITEM" = TRAIT_INNATELY_FANTASTICAL_ITEM, + "TRAIT_NEEDS_TWO_HANDS" = TRAIT_NEEDS_TWO_HANDS, + "TRAIT_NO_BARCODES" = TRAIT_NO_BARCODES, + "TRAIT_NO_STORAGE_INSERT" = TRAIT_NO_STORAGE_INSERT, + "TRAIT_NO_TELEPORT" = TRAIT_NO_TELEPORT, + "TRAIT_NODROP" = TRAIT_NODROP, + "TRAIT_OMNI_BAIT" = TRAIT_OMNI_BAIT, + "TRAIT_PLANT_WILDMUTATE" = TRAIT_PLANT_WILDMUTATE, + "TRAIT_T_RAY_VISIBLE" = TRAIT_T_RAY_VISIBLE, + "TRAIT_TRANSFORM_ACTIVE" = TRAIT_TRANSFORM_ACTIVE, + "TRAIT_UNCATCHABLE" = TRAIT_UNCATCHABLE, + "TRAIT_WIELDED" = TRAIT_WIELDED, + "TRAIT_BAKEABLE" = TRAIT_BAKEABLE, + ), + /obj/item/ammo_casing = list( + "TRAIT_DART_HAS_INSERT" = TRAIT_DART_HAS_INSERT, + ), + /obj/item/bodypart = list( + "TRAIT_DISABLED_BY_WOUND" = TRAIT_DISABLED_BY_WOUND, + "TRAIT_IGNORED_BY_LIVING_FLESH" = TRAIT_IGNORED_BY_LIVING_FLESH, + "TRAIT_IMMUNE_TO_CRANIAL_FISSURE" = TRAIT_IMMUNE_TO_CRANIAL_FISSURE, + ), + /obj/item/bodypart = list( + "TRAIT_PARALYSIS" = TRAIT_PARALYSIS, + ), + /obj/item/card/id = list( + "TRAIT_JOB_FIRST_ID_CARD" = TRAIT_JOB_FIRST_ID_CARD, + "TRAIT_MAGNETIC_ID_CARD" = TRAIT_MAGNETIC_ID_CARD, + "TRAIT_TASTEFULLY_THICK_ID_CARD" = TRAIT_TASTEFULLY_THICK_ID_CARD, + ), + /obj/item/clothing = list( + "TRAIT_RADIATION_PROTECTED_CLOTHING" = TRAIT_RADIATION_PROTECTED_CLOTHING, + ), + /obj/item/fish = list( + "TRAIT_FISH_AMPHIBIOUS" = TRAIT_FISH_AMPHIBIOUS, + "TRAIT_FISH_CROSSBREEDER" = TRAIT_FISH_CROSSBREEDER, + "TRAIT_FISH_FED_LUBE" = TRAIT_FISH_FED_LUBE, + "TRAIT_FISH_FROM_CASE" = TRAIT_FISH_FROM_CASE, + "TRAIT_FISH_NO_HUNGER" = TRAIT_FISH_NO_HUNGER, + "TRAIT_FISH_NO_MATING" = TRAIT_FISH_NO_MATING, + "TRAIT_FISH_SELF_REPRODUCE" = TRAIT_FISH_SELF_REPRODUCE, + "TRAIT_FISH_TOXIN_IMMUNE" = TRAIT_FISH_TOXIN_IMMUNE, + "TRAIT_RESIST_EMULSIFY" = TRAIT_RESIST_EMULSIFY, + "TRAIT_YUCKY_FISH" = TRAIT_YUCKY_FISH, + ), + /obj/item/integrated_circuit = list( + "TRAIT_CIRCUIT_UI_OPEN" = TRAIT_CIRCUIT_UI_OPEN, + "TRAIT_CIRCUIT_UNDUPABLE" = TRAIT_CIRCUIT_UNDUPABLE, + "TRAIT_COMPONENT_MMI" = TRAIT_COMPONENT_MMI, + ), + /obj/item/modular_computer = list( + "TRAIT_MODPC_HALVED_DOWNLOAD_SPEED" = TRAIT_MODPC_HALVED_DOWNLOAD_SPEED, + "TRAIT_PDA_CAN_EXPLODE" = TRAIT_PDA_CAN_EXPLODE, + "TRAIT_PDA_MESSAGE_MENU_RIGGED" = TRAIT_PDA_MESSAGE_MENU_RIGGED, + ), + /obj/item/organ = list( + "TRAIT_LIVING_HEART" = TRAIT_LIVING_HEART, + ), + /obj/item/organ/internal/liver = list( + "TRAIT_BALLMER_SCIENTIST" = TRAIT_BALLMER_SCIENTIST, + "TRAIT_COMEDY_METABOLISM" = TRAIT_COMEDY_METABOLISM, + "TRAIT_CORONER_METABOLISM" = TRAIT_CORONER_METABOLISM, + "TRAIT_CULINARY_METABOLISM" = TRAIT_CULINARY_METABOLISM, + "TRAIT_ENGINEER_METABOLISM" = TRAIT_ENGINEER_METABOLISM, + "TRAIT_LAW_ENFORCEMENT_METABOLISM" = TRAIT_LAW_ENFORCEMENT_METABOLISM, + "TRAIT_MAINTENANCE_METABOLISM" = TRAIT_MAINTENANCE_METABOLISM, + "TRAIT_MEDICAL_METABOLISM" = TRAIT_MEDICAL_METABOLISM, + "TRAIT_PRETENDER_ROYAL_METABOLISM" = TRAIT_PRETENDER_ROYAL_METABOLISM, + "TRAIT_ROYAL_METABOLISM" = TRAIT_ROYAL_METABOLISM, + ), + /obj/item/organ/internal/lungs = list( + "TRAIT_SPACEBREATHING" = TRAIT_SPACEBREATHING, + ), + /obj/item/reagent_containers = list( + "TRAIT_MAY_CONTAIN_BLENDED_DUST" = TRAIT_MAY_CONTAIN_BLENDED_DUST, + ), + /obj/projectile = list( + "TRAIT_ALWAYS_HIT_ZONE" = TRAIT_ALWAYS_HIT_ZONE, + ), + /obj/structure = list( + "TRAIT_RADSTORM_IMMUNE" = TRAIT_RADSTORM_IMMUNE, + ), + /obj/vehicle = list( + "TRAIT_OREBOX_FUNCTIONAL" = TRAIT_OREBOX_FUNCTIONAL, + ), + /obj/vehicle/sealed/mecha = list( + "TRAIT_MECHA_CREATED_NORMALLY" = TRAIT_MECHA_CREATED_NORMALLY + ), + /turf = list( + "TRAIT_CHASM_STOPPED" = TRAIT_CHASM_STOPPED, + "TRAIT_FIREDOOR_STOP" = TRAIT_FIREDOOR_STOP, + "TRAIT_HYPERSPACE_STOPPED" = TRAIT_HYPERSPACE_STOPPED, + "TRAIT_IMMERSE_STOPPED" = TRAIT_IMMERSE_STOPPED, + "TRAIT_LAVA_STOPPED" = TRAIT_LAVA_STOPPED, + "TRAIT_SPINNING_WEB_TURF" = TRAIT_SPINNING_WEB_TURF, + "TRAIT_TURF_IGNORE_SLIPPERY" = TRAIT_TURF_IGNORE_SLIPPERY, + "TRAIT_TURF_IGNORE_SLOWDOWN" = TRAIT_TURF_IGNORE_SLOWDOWN, + "TRAIT_ELEVATED_TURF" = TRAIT_ELEVATED_TURF, + ), + // NOVA EDIT ADDITION START - NOVA TRAITS + /obj/item/toy/plush/nova = list( + "TRAIT_AFFECTION_AVERSION" = TRAIT_AFFECTION_AVERSION, + "TRAIT_APHRO" = TRAIT_APHRO, + "TRAIT_AVIAN" = TRAIT_AVIAN, + "TRAIT_ASH_ASPECT" = TRAIT_ASH_ASPECT, + "TRAIT_BIMBO" = TRAIT_BIMBO, + "TRAIT_CANINE" = TRAIT_CANINE, + "TRAIT_CHAMELEON_SKIN" = TRAIT_CHAMELEON_SKIN, + "TRAIT_CONDOM_BROKEN" = TRAIT_CONDOM_BROKEN, + "TRAIT_CURRENTLY_GLASSBLOWING" = TRAIT_CURRENTLY_GLASSBLOWING, + "TRAIT_DETECTIVE" = TRAIT_DETECTIVE, + "TRAIT_DNR" = TRAIT_DNR, + "TRAIT_EXCITABLE" = TRAIT_EXCITABLE, + "TRAIT_FELINE" = TRAIT_FELINE, + "TRAIT_FLORAL_ASPECT" = TRAIT_FLORAL_ASPECT, + "TRAIT_FREE_GHOST" = TRAIT_FREE_GHOST, + "TRAIT_GHOSTROLE" = TRAIT_GHOSTROLE, + "TRAIT_GIFTED" = TRAIT_GIFTED, + "TRAIT_GLASSBLOWING" = TRAIT_GLASSBLOWING, + "TRAIT_GLOVES" = TRAIT_GLOVES, + "TRAIT_GLUED_ITEM" = TRAIT_GLUED_ITEM, + "TRAIT_HARD_SOLES" = TRAIT_HARD_SOLES, + "TRAIT_HYDRA_HEADS" = TRAIT_HYDRA_HEADS, + "TRAIT_LINGUIST" = TRAIT_LINGUIST, + "TRAIT_LEWDCHEM" = TRAIT_LEWDCHEM, + "TRAIT_LEWDQUIRK" = TRAIT_LEWDQUIRK, + "TRAIT_MASOCHISM" = TRAIT_MASOCHISM, + "TRAIT_MOOD_NOEXAMINE" = TRAIT_MOOD_NOEXAMINE, + "TRAIT_MUTANT_IMMUNE" = TRAIT_MUTANT_IMMUNE, + "TRAIT_NARCOTICS" = TRAIT_NARCOTICS, + "TRAIT_NEVERBONER" = TRAIT_NEVERBONER, + "TRAIT_NIFSOFT" = TRAIT_NIFSOFT, + "TRAIT_NIFSOFT_HUD_GRANTER" = TRAIT_NIFSOFT_HUD_GRANTER, + "TRAIT_NO_HUSK" = TRAIT_NO_HUSK, + "TRAIT_NORUNNING" = TRAIT_NORUNNING, + "TRAIT_NUMBED" = TRAIT_NUMBED, + "TRAIT_OVERSIZED" = TRAIT_OVERSIZED, + "TRAIT_OXYIMMUNE" = TRAIT_OXYIMMUNE, + "TRAIT_PERSONALSPACE" = TRAIT_PERSONALSPACE, + "TRAIT_QUICKREFLEXES" = TRAIT_QUICKREFLEXES, + "TRAIT_PET_OWNER" = TRAIT_PET_OWNER, + "TRAIT_R_UNIQUEWRECK" = TRAIT_R_UNIQUEWRECK, + "TRAIT_R_UNIQUETIP" = TRAIT_R_UNIQUETIP, + "TRAIT_R_WIDE" = TRAIT_R_WIDE, + "TRAIT_R_TALL" = TRAIT_R_TALL, + "TRAIT_R_SMALL" = TRAIT_R_SMALL, + "TRAIT_R_UNIQUEPANEL" = TRAIT_R_UNIQUEPANEL, + "TRAIT_REAGENT" = TRAIT_REAGENT, + "TRAIT_REVIVES_BY_HEALING" = TRAIT_REVIVES_BY_HEALING, + "TRAIT_RIGGER" = TRAIT_RIGGER, + "TRAIT_ROBOTIC_DNA_ORGANS" = TRAIT_ROBOTIC_DNA_ORGANS, + "TRAIT_ROPEBUNNY" = TRAIT_ROPEBUNNY, + "TRAIT_RSD_COMPATIBLE" = TRAIT_RSD_COMPATIBLE, + "TRAIT_SACRIFICED" = TRAIT_SACRIFICED , + "TRAIT_SADISM" = TRAIT_SADISM, + "TRAIT_SENSITIVESNOUT" = TRAIT_SENSITIVESNOUT, + "TRAIT_SLICK_SKIN" = TRAIT_SLICK_SKIN, + "TRAIT_SLIPPERY" = TRAIT_SLIPPERY, + "TRAIT_SPARKLE_ASPECT" = TRAIT_SPARKLE_ASPECT, + "TRAIT_STICKY_FINGERS" = TRAIT_STICKY_FINGERS, + "TRAIT_STRAPON" = TRAIT_STRAPON, + "TRAIT_STYLISH" = TRAIT_STYLISH, + "TRAIT_TRASHMAN" = TRAIT_TRASHMAN, + "TRAIT_WATER_ASPECT" = TRAIT_WATER_ASPECT, + "TRAIT_WATER_BREATHING" = TRAIT_WATER_BREATHING, + "TRAIT_WEBBING_ASPECT" = TRAIT_WEBBING_ASPECT, + "TRAIT_XENO_ABILITY_GIVEN" = TRAIT_XENO_ABILITY_GIVEN, + "TRAIT_XENOARCH_QUALIFIED" = TRAIT_XENOARCH_QUALIFIED, + "TRAIT_XENO_HEAL_AURA" = TRAIT_XENO_HEAL_AURA, + "TRAIT_XENO_INNATE" = TRAIT_XENO_INNATE, + "TRAIT_CLOTHES_DAMAGED_BY_PIERCING" = TRAIT_CLOTHES_DAMAGED_BY_PIERCING, + ), + // NOVA EDIT ADDITION END +)) + +/// value -> trait name, list of ALL traits that exist in the game, used for any type of accessing. +GLOBAL_LIST(global_trait_name_map) + +/proc/generate_global_trait_name_map() + . = list() + for(var/key in GLOB.traits_by_type) + for(var/tname in GLOB.traits_by_type[key]) + var/val = GLOB.traits_by_type[key][tname] + .[val] = tname + + return . + +GLOBAL_LIST_INIT(movement_type_trait_to_flag, list( + TRAIT_MOVE_GROUND = GROUND, + TRAIT_MOVE_FLYING = FLYING, + TRAIT_MOVE_VENTCRAWLING = VENTCRAWLING, + TRAIT_MOVE_FLOATING = FLOATING, + TRAIT_MOVE_PHASING = PHASING, + TRAIT_MOVE_UPSIDE_DOWN = UPSIDE_DOWN, +)) + +GLOBAL_LIST_INIT(movement_type_addtrait_signals, set_movement_type_addtrait_signals()) +GLOBAL_LIST_INIT(movement_type_removetrait_signals, set_movement_type_removetrait_signals()) + +/proc/set_movement_type_addtrait_signals(signal_prefix) + . = list() + for(var/trait in GLOB.movement_type_trait_to_flag) + . += SIGNAL_ADDTRAIT(trait) + + return . + +/proc/set_movement_type_removetrait_signals(signal_prefix) + . = list() + for(var/trait in GLOB.movement_type_trait_to_flag) + . += SIGNAL_REMOVETRAIT(trait) + + return . diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm new file mode 100644 index 00000000000000..e73502c621c11e --- /dev/null +++ b/code/_globalvars/traits/admin_tooling.dm @@ -0,0 +1,364 @@ +// This file contains any stuff related to admin-visible traits. +// There's likely more than a few traits missing from this file, do consult the `_traits.dm` file in this folder to see every global trait that exists. +// quirks have it's own panel so we don't need them here. + +GLOBAL_LIST_INIT(admin_visible_traits, list( + /atom = list( + "TRAIT_KEEP_TOGETHER" = TRAIT_KEEP_TOGETHER, + ), + /atom/movable = list( + "TRAIT_ASHSTORM_IMMUNE" = TRAIT_ASHSTORM_IMMUNE, + "TRAIT_HAS_LABEL" = TRAIT_HAS_LABEL, + "TRAIT_LAVA_IMMUNE" = TRAIT_LAVA_IMMUNE, + "TRAIT_MOVE_FLOATING" = TRAIT_MOVE_FLOATING, + "TRAIT_MOVE_FLYING" = TRAIT_MOVE_FLYING, + "TRAIT_MOVE_GROUND" = TRAIT_MOVE_GROUND, + "TRAIT_MOVE_PHASING" = TRAIT_MOVE_PHASING, + "TRAIT_MOVE_VENTCRAWLING" = TRAIT_MOVE_VENTCRAWLING, + "TRAIT_MOVE_UPSIDE_DOWN" = TRAIT_MOVE_UPSIDE_DOWN, + "TRAIT_RUNECHAT_HIDDEN" = TRAIT_RUNECHAT_HIDDEN, + "TRAIT_SNOWSTORM_IMMUNE" = TRAIT_SNOWSTORM_IMMUNE, + "TRAIT_VOIDSTORM_IMMUNE" = TRAIT_VOIDSTORM_IMMUNE, + "TRAIT_WEATHER_IMMUNE" = TRAIT_WEATHER_IMMUNE, + ), + /mob = list( + "TRAIT_ABDUCTOR_SCIENTIST_TRAINING" = TRAIT_ABDUCTOR_SCIENTIST_TRAINING, + "TRAIT_ABDUCTOR_TRAINING" = TRAIT_ABDUCTOR_TRAINING, + "TRAIT_ADVANCEDTOOLUSER" = TRAIT_ADVANCEDTOOLUSER, + "TRAIT_AGENDER" = TRAIT_AGENDER, + "TRAIT_AGEUSIA" = TRAIT_AGEUSIA, + "TRAIT_ALCOHOL_TOLERANCE" = TRAIT_ALCOHOL_TOLERANCE, + "TRAIT_ANTIMAGIC" = TRAIT_ANTIMAGIC, + "TRAIT_ANXIOUS" = TRAIT_ANXIOUS, + "TRAIT_BADDNA" = TRAIT_BADDNA, + "TRAIT_BADTOUCH" = TRAIT_BADTOUCH, + "TRAIT_BALD" = TRAIT_BALD, + "TRAIT_BATON_RESISTANCE" = TRAIT_BATON_RESISTANCE, + "TRAIT_BLOOD_CLANS" = TRAIT_BLOOD_CLANS, + "TRAIT_BLOOD_DEFICIENCY" = TRAIT_BLOOD_DEFICIENCY, + "TRAIT_BLOODSHOT_EYES" = TRAIT_BLOODSHOT_EYES, + "TRAIT_BOMBIMMUNE" = TRAIT_BOMBIMMUNE, + "TRAIT_BONSAI" = TRAIT_BONSAI, + "TRAIT_BOOZE_SLIDER" = TRAIT_BOOZE_SLIDER, + "TRAIT_BYPASS_MEASURES" = TRAIT_BYPASS_MEASURES, + "TRAIT_CAN_HOLD_ITEMS" = TRAIT_CAN_HOLD_ITEMS, + "TRAIT_CANNOT_BE_UNBUCKLED" = TRAIT_CANNOT_BE_UNBUCKLED, + "TRAIT_CANNOT_OPEN_PRESENTS" = TRAIT_CANNOT_OPEN_PRESENTS, + "TRAIT_CHASM_DESTROYED" = TRAIT_CHASM_DESTROYED, + "TRAIT_CHUNKYFINGERS_IGNORE_BATON" = TRAIT_CHUNKYFINGERS_IGNORE_BATON, + "TRAIT_CHUNKYFINGERS" = TRAIT_CHUNKYFINGERS, + "TRAIT_CLOWN_ENJOYER" = TRAIT_CLOWN_ENJOYER, + "TRAIT_CLUMSY" = TRAIT_CLUMSY, + "TRAIT_CRITICAL_CONDITION" = TRAIT_CRITICAL_CONDITION, + "TRAIT_CULT_HALO" = TRAIT_CULT_HALO, + "TRAIT_DEAF" = TRAIT_DEAF, + "TRAIT_DEATHCOMA" = TRAIT_DEATHCOMA, + "TRAIT_DEFIB_BLACKLISTED" = TRAIT_DEFIB_BLACKLISTED, + "TRAIT_DEPRESSION" = TRAIT_DEPRESSION, + "TRAIT_DIAGNOSTIC_HUD" = TRAIT_DIAGNOSTIC_HUD, + "TRAIT_DISCOORDINATED_TOOL_USER" = TRAIT_DISCOORDINATED_TOOL_USER, + "TRAIT_DISFIGURED" = TRAIT_DISFIGURED, + "TRAIT_DISK_VERIFIER" = TRAIT_DISK_VERIFIER, + "TRAIT_DISSECTED" = TRAIT_DISSECTED, + "TRAIT_DRINKS_BLOOD" = TRAIT_DRINKS_BLOOD, + "TRAIT_DUMB" = TRAIT_DUMB, + "TRAIT_DWARF" = TRAIT_DWARF, + "TRAIT_EASILY_WOUNDED" = TRAIT_EASILY_WOUNDED, + "TRAIT_EASYDISMEMBER" = TRAIT_EASYDISMEMBER, + "TRAIT_EMOTEMUTE " = TRAIT_EMOTEMUTE, + "TRAIT_EMPATH" = TRAIT_EMPATH, + "TRAIT_EXPANDED_FOV" = TRAIT_EXPANDED_FOV, + "TRAIT_FAKEDEATH" = TRAIT_FAKEDEATH, + "TRAIT_FAT" = TRAIT_FAT, + "TRAIT_FEARLESS" = TRAIT_FEARLESS, + "TRAIT_FENCE_CLIMBER" = TRAIT_FENCE_CLIMBER, + "TRAIT_FIST_MINING" = TRAIT_FIST_MINING, + "TRAIT_FIXED_HAIRCOLOR" = TRAIT_FIXED_HAIRCOLOR, + "TRAIT_FIXED_MUTANT_COLORS" = TRAIT_FIXED_MUTANT_COLORS, + "TRAIT_FLOORED" = TRAIT_FLOORED, + "TRAIT_FORCED_STANDING" = TRAIT_FORCED_STANDING, + "TRAIT_FREERUNNING" = TRAIT_FREERUNNING, + "TRAIT_FRIENDLY" = TRAIT_FRIENDLY, + "TRAIT_GAMER" = TRAIT_GAMER, + "TRAIT_GAMERGOD" = TRAIT_GAMERGOD, + "TRAIT_GENELESS" = TRAIT_GENELESS, + "TRAIT_GIANT" = TRAIT_GIANT, + "TRAIT_GOOD_HEARING" = TRAIT_GOOD_HEARING, + "TRAIT_GRABWEAKNESS" = TRAIT_GRABWEAKNESS, + "TRAIT_GREENTEXT_CURSED" = TRAIT_GREENTEXT_CURSED, + "TRAIT_GUNFLIP" = TRAIT_GUNFLIP, + "TRAIT_HANDS_BLOCKED" = TRAIT_HANDS_BLOCKED, + "TRAIT_HARDLY_WOUNDED" = TRAIT_HARDLY_WOUNDED, + "TRAIT_HAS_MARKINGS" = TRAIT_HAS_MARKINGS, + "TRAIT_HEAVY_SLEEPER" = TRAIT_HEAVY_SLEEPER, + "TRAIT_HIDE_EXTERNAL_ORGANS" = TRAIT_HIDE_EXTERNAL_ORGANS, + "TRAIT_HOLY" = TRAIT_HOLY, + "TRAIT_HUSK" = TRAIT_HUSK, + "TRAIT_IGNOREDAMAGESLOWDOWN" = TRAIT_IGNOREDAMAGESLOWDOWN, + "TRAIT_IGNORESLOWDOWN" = TRAIT_IGNORESLOWDOWN, + "TRAIT_ILLITERATE" = TRAIT_ILLITERATE, + "TRAIT_IMMOBILIZED" = TRAIT_IMMOBILIZED, + "TRAIT_INCAPACITATED" = TRAIT_INCAPACITATED, + "TRAIT_INVISIBLE_MAN" = TRAIT_INVISIBLE_MAN, + "TRAIT_IWASBATONED" = TRAIT_IWASBATONED, + "TRAIT_JOLLY" = TRAIT_JOLLY, + "TRAIT_KISS_OF_DEATH" = TRAIT_KISS_OF_DEATH, + "TRAIT_KNOCKEDOUT" = TRAIT_KNOCKEDOUT, + "TRAIT_KNOW_ENGI_WIRES" = TRAIT_KNOW_ENGI_WIRES, + "TRAIT_KNOW_ROBO_WIRES" = TRAIT_KNOW_ROBO_WIRES, + "TRAIT_LIGHT_DRINKER" = TRAIT_LIGHT_DRINKER, + "TRAIT_LIGHT_STEP" = TRAIT_LIGHT_STEP, + "TRAIT_LIGHTBULB_REMOVER" = TRAIT_LIGHTBULB_REMOVER, + "TRAIT_LIMBATTACHMENT" = TRAIT_LIMBATTACHMENT, + "TRAIT_LITERATE" = TRAIT_LITERATE, + "TRAIT_LIVERLESS_METABOLISM" = TRAIT_LIVERLESS_METABOLISM, + "TRAIT_LIVERLESS_METABOLISM" = TRAIT_LIVERLESS_METABOLISM, + "TRAIT_MEDICAL_HUD" = TRAIT_MEDICAL_HUD, + "TRAIT_MIME_FAN" = TRAIT_MIME_FAN, + "TRAIT_MIMING" = TRAIT_MIMING, + "TRAIT_MINDSHIELD" = TRAIT_MINDSHIELD, + "TRAIT_MORBID" = TRAIT_MORBID, + "TRAIT_MUSICIAN" = TRAIT_MUSICIAN, + "TRAIT_MUTANT_COLORS" = TRAIT_MUTANT_COLORS, + "TRAIT_MUTE" = TRAIT_MUTE, + "TRAIT_NAIVE" = TRAIT_NAIVE, + "TRAIT_NEVER_WOUNDED" = TRAIT_NEVER_WOUNDED, + "TRAIT_NICE_SHOT" = TRAIT_NICE_SHOT, + "TRAIT_NIGHT_VISION" = TRAIT_NIGHT_VISION, + "TRAIT_NO_AUGMENTS" = TRAIT_NO_AUGMENTS, + "TRAIT_NO_BLOOD_OVERLAY" = TRAIT_NO_BLOOD_OVERLAY, + "TRAIT_NO_DNA_COPY" = TRAIT_NO_DNA_COPY, + "TRAIT_NO_GLIDE" = TRAIT_NO_GLIDE, + "TRAIT_NO_PLASMA_TRANSFORM" = TRAIT_NO_PLASMA_TRANSFORM, + "TRAIT_NO_SLIP_ALL" = TRAIT_NO_SLIP_ALL, + "TRAIT_NO_SLIP_ICE" = TRAIT_NO_SLIP_ICE, + "TRAIT_NO_SLIP_SLIDE" = TRAIT_NO_SLIP_SLIDE, + "TRAIT_NO_SLIP_WATER" = TRAIT_NO_SLIP_WATER, + "TRAIT_NO_SOUL" = TRAIT_NO_SOUL, + "TRAIT_NO_TRANSFORM" = TRAIT_NO_TRANSFORM, + "TRAIT_NO_UNDERWEAR" = TRAIT_NO_UNDERWEAR, + "TRAIT_NO_ZOMBIFY" = TRAIT_NO_ZOMBIFY, + "TRAIT_NOBLOOD" = TRAIT_NOBLOOD, + "TRAIT_NOBREATH" = TRAIT_NOBREATH, + "TRAIT_NOCRITDAMAGE" = TRAIT_NOCRITDAMAGE, + "TRAIT_NOCRITOVERLAY" = TRAIT_NOCRITOVERLAY, + "TRAIT_NODEATH" = TRAIT_NODEATH, + "TRAIT_NODISMEMBER" = TRAIT_NODISMEMBER, + "TRAIT_NOFIRE" = TRAIT_NOFIRE, + "TRAIT_NOFLASH" = TRAIT_NOFLASH, + "TRAIT_NOGUNS" = TRAIT_NOGUNS, + "TRAIT_NOHARDCRIT" = TRAIT_NOHARDCRIT, + "TRAIT_NOHUNGER" = TRAIT_NOHUNGER, + "TRAIT_NOLIMBDISABLE" = TRAIT_NOLIMBDISABLE, + "TRAIT_NOMOBSWAP" = TRAIT_NOMOBSWAP, + "TRAIT_NOSOFTCRIT" = TRAIT_NOSOFTCRIT, + "TRAIT_OIL_FRIED" = TRAIT_OIL_FRIED, + "TRAIT_OVERWATCH_IMMUNE" = TRAIT_OVERWATCH_IMMUNE, + "TRAIT_PACIFISM" = TRAIT_PACIFISM, + "TRAIT_PARALYSIS_L_ARM" = TRAIT_PARALYSIS_L_ARM, + "TRAIT_PARALYSIS_L_LEG" = TRAIT_PARALYSIS_L_LEG, + "TRAIT_PARALYSIS_R_ARM" = TRAIT_PARALYSIS_R_ARM, + "TRAIT_PARALYSIS_R_LEG" = TRAIT_PARALYSIS_R_LEG, + "TRAIT_PASSTABLE" = TRAIT_PASSTABLE, + "TRAIT_PERFECT_ATTACKER" = TRAIT_PERFECT_ATTACKER, + "TRAIT_PERMANENTLY_ONFIRE" = TRAIT_PERMANENTLY_ONFIRE, + "TRAIT_PHOTOGRAPHER" = TRAIT_PHOTOGRAPHER, + "TRAIT_PIERCEIMMUNE" = TRAIT_PIERCEIMMUNE, + "TRAIT_PLANT_SAFE" = TRAIT_PLANT_SAFE, + "TRAIT_PLASMA_LOVER_METABOLISM" = TRAIT_PLASMA_LOVER_METABOLISM, + "TRAIT_PRESENT_VISION" = TRAIT_PRESENT_VISION, + "TRAIT_PREVENT_IMPLANT_AUTO_EXPLOSION" = TRAIT_PREVENT_IMPLANT_AUTO_EXPLOSION, + "TRAIT_PRIMITIVE" = TRAIT_PRIMITIVE, //unable to use mechs. Given to Ash Walkers + "TRAIT_PROSOPAGNOSIA" = TRAIT_PROSOPAGNOSIA, + "TRAIT_PULL_BLOCKED" = TRAIT_PULL_BLOCKED, + "TRAIT_PUSHIMMUNE" = TRAIT_PUSHIMMUNE, + "TRAIT_QUICK_CARRY" = TRAIT_QUICK_CARRY, + "TRAIT_QUICKER_CARRY" = TRAIT_QUICKER_CARRY, + "TRAIT_RADIMMUNE" = TRAIT_RADIMMUNE, + "TRAIT_RESISTCOLD" = TRAIT_RESISTCOLD, + "TRAIT_RESISTHEAT" = TRAIT_RESISTHEAT, + "TRAIT_RESISTHEATHANDS" = TRAIT_RESISTHEATHANDS, + "TRAIT_RESISTHIGHPRESSURE" = TRAIT_RESISTHIGHPRESSURE, + "TRAIT_RESISTLOWPRESSURE" = TRAIT_RESISTLOWPRESSURE, + "TRAIT_RESTRAINED" = TRAIT_RESTRAINED, + "TRAIT_SECURITY_HUD" = TRAIT_SECURITY_HUD, + "TRAIT_SELF_AWARE" = TRAIT_SELF_AWARE, + "TRAIT_SETTLER" = TRAIT_SETTLER, + "TRAIT_SHIFTY_EYES" = TRAIT_SHIFTY_EYES, + "TRAIT_SHOCKIMMUNE" = TRAIT_SHOCKIMMUNE, + "TRAIT_SIGN_LANG" = TRAIT_SIGN_LANG, + "TRAIT_SILENT_FOOTSTEPS" = TRAIT_SILENT_FOOTSTEPS, + "TRAIT_SIXTHSENSE" = TRAIT_SIXTHSENSE, + "TRAIT_SKITTISH" = TRAIT_SKITTISH, + "TRAIT_SLEEPIMMUNE" = TRAIT_SLEEPIMMUNE, + "TRAIT_SMOKER" = TRAIT_SMOKER, + "TRAIT_SNOB" = TRAIT_SNOB, + "TRAIT_SOOTHED_THROAT" = TRAIT_SOOTHED_THROAT, + "TRAIT_SPACEWALK" = TRAIT_SPACEWALK, + "TRAIT_SPECIAL_TRAUMA_BOOST" = TRAIT_SPECIAL_TRAUMA_BOOST, + "TRAIT_SPIRITUAL" = TRAIT_SPIRITUAL, + "TRAIT_STABLEHEART" = TRAIT_STABLEHEART, + "TRAIT_STABLELIVER" = TRAIT_STABLELIVER, + "TRAIT_STRONG_GRABBER" = TRAIT_STRONG_GRABBER, + "TRAIT_STUNIMMUNE" = TRAIT_STUNIMMUNE, + "TRAIT_SURGEON" = TRAIT_SURGEON, + "TRAIT_SURGICALLY_ANALYZED" = TRAIT_SURGICALLY_ANALYZED, + "TRAIT_TAGGER" = TRAIT_TAGGER, + "TRAIT_TENTACLE_IMMUNE" = TRAIT_TENTACLE_IMMUNE, + "TRAIT_TESLA_SHOCKIMMUNE" = TRAIT_TESLA_SHOCKIMMUNE, + "TRAIT_THERMAL_VISION" = TRAIT_THERMAL_VISION, + "TRAIT_TOXIMMUNE" = TRAIT_TOXIMMUNE, + "TRAIT_TOXINLOVER" = TRAIT_TOXINLOVER, + "TRAIT_TRAIT_MEDIBOTCOMINGTHROUGH" = TRAIT_MEDIBOTCOMINGTHROUGH, + "TRAIT_TUMOR_SUPPRESSION" = TRAIT_TUMOR_SUPPRESSED, + "TRAIT_UI_BLOCKED" = TRAIT_UI_BLOCKED, + "TRAIT_UNDENSE" = TRAIT_UNDENSE, + "TRAIT_UNDERWATER_BASKETWEAVING_KNOWLEDGE" = TRAIT_UNDERWATER_BASKETWEAVING_KNOWLEDGE, + "TRAIT_UNHUSKABLE" = TRAIT_UNHUSKABLE, + "TRAIT_UNINTELLIGIBLE_SPEECH" = TRAIT_UNINTELLIGIBLE_SPEECH, + "TRAIT_UNKNOWN" = TRAIT_UNKNOWN, + "TRAIT_UNNATURAL_RED_GLOWY_EYES" = TRAIT_UNNATURAL_RED_GLOWY_EYES, + "TRAIT_UNOBSERVANT" = TRAIT_UNOBSERVANT, + "TRAIT_UNSTABLE" = TRAIT_UNSTABLE, + "TRAIT_USED_DNA_VAULT" = TRAIT_USED_DNA_VAULT, + "TRAIT_USES_SKINTONES" = TRAIT_USES_SKINTONES, + "TRAIT_VIRUSIMMUNE" = TRAIT_VIRUSIMMUNE, + "TRAIT_VORACIOUS" = TRAIT_VORACIOUS, + "TRAIT_WEAK_SOUL" = TRAIT_WEAK_SOUL, + "TRAIT_WEB_SURFER" = TRAIT_WEB_SURFER, + "TRAIT_WEB_WEAVER" = TRAIT_WEB_WEAVER, + "TRAIT_WINE_TASTER" = TRAIT_WINE_TASTER, + "TRAIT_XENO_HOST" = TRAIT_XENO_HOST, + "TRAIT_XENO_IMMUNE" = TRAIT_XENO_IMMUNE, + "TRAIT_XRAY_HEARING" = TRAIT_XRAY_HEARING, + "TRAIT_XRAY_VISION" = TRAIT_XRAY_VISION, + ), + /obj/item = list( + "TRAIT_APC_SHOCKING" = TRAIT_APC_SHOCKING, + "TRAIT_DANGEROUS_OBJECT" = TRAIT_DANGEROUS_OBJECT, + "TRAIT_GERM_SENSITIVE" = TRAIT_GERM_SENSITIVE, + "TRAIT_HAUNTED" = TRAIT_HAUNTED, + "TRAIT_NO_STORAGE_INSERT" = TRAIT_NO_STORAGE_INSERT, + "TRAIT_NO_TELEPORT" = TRAIT_NO_TELEPORT, + "TRAIT_NODROP" = TRAIT_NODROP, + "TRAIT_T_RAY_VISIBLE" = TRAIT_T_RAY_VISIBLE, + "TRAIT_UNCATCHABLE" = TRAIT_UNCATCHABLE, + ), + /obj/item/bodypart = list( + "TRAIT_PARALYSIS" = TRAIT_PARALYSIS, + ), + /obj/item/card/id = list( + "TRAIT_MAGNETIC_ID_CARD" = TRAIT_MAGNETIC_ID_CARD, + ), + /obj/item/fish = list( + "TRAIT_FISH_CROSSBREEDER" = TRAIT_FISH_CROSSBREEDER, + "TRAIT_FISH_FED_LUBE" = TRAIT_FISH_FED_LUBE, + "TRAIT_FISH_NO_HUNGER" = TRAIT_FISH_NO_HUNGER, + "TRAIT_FISH_NO_MATING" = TRAIT_FISH_NO_MATING, + "TRAIT_FISH_SELF_REPRODUCE" = TRAIT_FISH_SELF_REPRODUCE, + "TRAIT_FISH_TOXIN_IMMUNE" = TRAIT_FISH_TOXIN_IMMUNE, + "TRAIT_RESIST_EMULSIFY" = TRAIT_RESIST_EMULSIFY, + "TRAIT_YUCKY_FISH" = TRAIT_YUCKY_FISH, + ), + /obj/item/organ/internal/liver = list( + "TRAIT_BALLMER_SCIENTIST" = TRAIT_BALLMER_SCIENTIST, + "TRAIT_COMEDY_METABOLISM" = TRAIT_COMEDY_METABOLISM, + "TRAIT_CORONER_METABOLISM" = TRAIT_CORONER_METABOLISM, + "TRAIT_CULINARY_METABOLISM" = TRAIT_CULINARY_METABOLISM, + "TRAIT_ENGINEER_METABOLISM" = TRAIT_ENGINEER_METABOLISM, + "TRAIT_LAW_ENFORCEMENT_METABOLISM" = TRAIT_LAW_ENFORCEMENT_METABOLISM, + "TRAIT_MAINTENANCE_METABOLISM" = TRAIT_MAINTENANCE_METABOLISM, + "TRAIT_MEDICAL_METABOLISM" = TRAIT_MEDICAL_METABOLISM, + "TRAIT_PRETENDER_ROYAL_METABOLISM" = TRAIT_PRETENDER_ROYAL_METABOLISM, + "TRAIT_ROYAL_METABOLISM" = TRAIT_ROYAL_METABOLISM, + ), + /obj/item/organ/internal/lungs = list( + "TRAIT_SPACEBREATHING" = TRAIT_SPACEBREATHING, + ), + // NOVA EDIT ADDITION START - NOVA TRAITS + /obj/item/toy/plush/nova = list( + "TRAIT_AFFECTION_AVERSION" = TRAIT_AFFECTION_AVERSION, + "TRAIT_APHRO" = TRAIT_APHRO, + "TRAIT_AVIAN" = TRAIT_AVIAN, + "TRAIT_ASH_ASPECT" = TRAIT_ASH_ASPECT, + "TRAIT_BIMBO" = TRAIT_BIMBO, + "TRAIT_CANINE" = TRAIT_CANINE, + "TRAIT_CHAMELEON_SKIN" = TRAIT_CHAMELEON_SKIN, + "TRAIT_CONDOM_BROKEN" = TRAIT_CONDOM_BROKEN, + "TRAIT_CURRENTLY_GLASSBLOWING" = TRAIT_CURRENTLY_GLASSBLOWING, + "TRAIT_DETECTIVE" = TRAIT_DETECTIVE, + "TRAIT_DNR" = TRAIT_DNR, + "TRAIT_EXCITABLE" = TRAIT_EXCITABLE, + "TRAIT_FELINE" = TRAIT_FELINE, + "TRAIT_FLORAL_ASPECT" = TRAIT_FLORAL_ASPECT, + "TRAIT_FREE_GHOST" = TRAIT_FREE_GHOST, + "TRAIT_GHOSTROLE" = TRAIT_GHOSTROLE, + "TRAIT_GIFTED" = TRAIT_GIFTED, + "TRAIT_GLASSBLOWING" = TRAIT_GLASSBLOWING, + "TRAIT_GLOVES" = TRAIT_GLOVES, + "TRAIT_GLUED_ITEM" = TRAIT_GLUED_ITEM, + "TRAIT_HARD_SOLES" = TRAIT_HARD_SOLES, + "TRAIT_HYDRA_HEADS" = TRAIT_HYDRA_HEADS, + "TRAIT_LINGUIST" = TRAIT_LINGUIST, + "TRAIT_LEWDCHEM" = TRAIT_LEWDCHEM, + "TRAIT_LEWDQUIRK" = TRAIT_LEWDQUIRK, + "TRAIT_MASOCHISM" = TRAIT_MASOCHISM, + "TRAIT_MOOD_NOEXAMINE" = TRAIT_MOOD_NOEXAMINE, + "TRAIT_MUTANT_IMMUNE" = TRAIT_MUTANT_IMMUNE, + "TRAIT_NARCOTICS" = TRAIT_NARCOTICS, + "TRAIT_NEVERBONER" = TRAIT_NEVERBONER, + "TRAIT_NIFSOFT" = TRAIT_NIFSOFT, + "TRAIT_NIFSOFT_HUD_GRANTER" = TRAIT_NIFSOFT_HUD_GRANTER, + "TRAIT_NO_HUSK" = TRAIT_NO_HUSK, + "TRAIT_NORUNNING" = TRAIT_NORUNNING, + "TRAIT_NUMBED" = TRAIT_NUMBED, + "TRAIT_OVERSIZED" = TRAIT_OVERSIZED, + "TRAIT_OXYIMMUNE" = TRAIT_OXYIMMUNE, + "TRAIT_PERSONALSPACE" = TRAIT_PERSONALSPACE, + "TRAIT_QUICKREFLEXES" = TRAIT_QUICKREFLEXES, + "TRAIT_PET_OWNER" = TRAIT_PET_OWNER, + "TRAIT_R_UNIQUEWRECK" = TRAIT_R_UNIQUEWRECK, + "TRAIT_R_UNIQUETIP" = TRAIT_R_UNIQUETIP, + "TRAIT_R_WIDE" = TRAIT_R_WIDE, + "TRAIT_R_TALL" = TRAIT_R_TALL, + "TRAIT_R_SMALL" = TRAIT_R_SMALL, + "TRAIT_R_UNIQUEPANEL" = TRAIT_R_UNIQUEPANEL, + "TRAIT_REAGENT" = TRAIT_REAGENT, + "TRAIT_REVIVES_BY_HEALING" = TRAIT_REVIVES_BY_HEALING, + "TRAIT_RIGGER" = TRAIT_RIGGER, + "TRAIT_ROBOTIC_DNA_ORGANS" = TRAIT_ROBOTIC_DNA_ORGANS, + "TRAIT_ROPEBUNNY" = TRAIT_ROPEBUNNY, + "TRAIT_RSD_COMPATIBLE" = TRAIT_RSD_COMPATIBLE, + "TRAIT_SACRIFICED" = TRAIT_SACRIFICED , + "TRAIT_SADISM" = TRAIT_SADISM, + "TRAIT_SENSITIVESNOUT" = TRAIT_SENSITIVESNOUT, + "TRAIT_SLICK_SKIN" = TRAIT_SLICK_SKIN, + "TRAIT_SLIPPERY" = TRAIT_SLIPPERY, + "TRAIT_SPARKLE_ASPECT" = TRAIT_SPARKLE_ASPECT, + "TRAIT_STICKY_FINGERS" = TRAIT_STICKY_FINGERS, + "TRAIT_STRAPON" = TRAIT_STRAPON, + "TRAIT_STYLISH" = TRAIT_STYLISH, + "TRAIT_TRASHMAN" = TRAIT_TRASHMAN, + "TRAIT_WATER_ASPECT" = TRAIT_WATER_ASPECT, + "TRAIT_WATER_BREATHING" = TRAIT_WATER_BREATHING, + "TRAIT_WEBBING_ASPECT" = TRAIT_WEBBING_ASPECT, + "TRAIT_XENO_ABILITY_GIVEN" = TRAIT_XENO_ABILITY_GIVEN, + "TRAIT_XENOARCH_QUALIFIED" = TRAIT_XENOARCH_QUALIFIED, + "TRAIT_XENO_HEAL_AURA" = TRAIT_XENO_HEAL_AURA, + "TRAIT_XENO_INNATE" = TRAIT_XENO_INNATE, + "TRAIT_CLOTHES_DAMAGED_BY_PIERCING" = TRAIT_CLOTHES_DAMAGED_BY_PIERCING, + ), + // NOVA EDIT ADDITION END +)) + +/// value -> trait name, generated as needed for adminning. +GLOBAL_LIST(admin_trait_name_map) + +/proc/generate_admin_trait_name_map() + . = list() + for(var/key in GLOB.admin_visible_traits) + for(var/tname in GLOB.admin_visible_traits[key]) + var/val = GLOB.admin_visible_traits[key][tname] + .[val] = tname + + return . diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 3d632a99f7389b..7660b0c7bc30d4 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -111,7 +111,7 @@ for AI shift, ctrl, and alt clicking. */ -/mob/living/silicon/ai/CtrlShiftClickOn(atom/target) // Procs overriden in modular_skyrat/modules/Silicon_QoL +/mob/living/silicon/ai/CtrlShiftClickOn(atom/target) // Procs overriden in modular_nova/modules/Silicon_QoL target.AICtrlShiftClick(src) /mob/living/silicon/ai/ShiftClickOn(atom/target) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 98c5c4d94a7cb4..c907f45466da73 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -115,7 +115,7 @@ if(HAS_TRAIT(src, TRAIT_HANDS_BLOCKED)) changeNext_move(CLICK_CD_HANDCUFFED) //Doing shit in cuffs shall be vey slow - UnarmedAttack(A, FALSE, modifiers) + UnarmedAttack(A, Adjacent(A), modifiers) return if(throw_mode) @@ -144,7 +144,7 @@ if(ismob(A)) changeNext_move(CLICK_CD_MELEE) - UnarmedAttack(A, FALSE, modifiers) + UnarmedAttack(A, TRUE, modifiers) return //Can't reach anything else in lockers or other weirdness @@ -164,7 +164,7 @@ else if(ismob(A)) changeNext_move(CLICK_CD_MELEE) - UnarmedAttack(A,1,modifiers) + UnarmedAttack(A, TRUE, modifiers) else if(W) if(LAZYACCESS(modifiers, RIGHT_CLICK)) @@ -173,12 +173,12 @@ if(after_attack_secondary_result == SECONDARY_ATTACK_CALL_NORMAL) W.afterattack(A, src, FALSE, params) else - W.afterattack(A,src,0,params) + W.afterattack(A, src, FALSE, params) else if(LAZYACCESS(modifiers, RIGHT_CLICK)) ranged_secondary_attack(A, modifiers) else - RangedAttack(A,modifiers) + RangedAttack(A, modifiers) /// Is the atom obscured by a PREVENT_CLICK_UNDER_1 object above it /atom/proc/IsObscured() @@ -461,7 +461,7 @@ /mob/proc/ShiftMiddleClickOn(atom/A) src.pointed(A) return -//SKYRAT EDIT NOTE: CtrlShiftClick for HUMANS has been overriden in click.dm in the interaction module. +//NOVA EDIT NOTE: CtrlShiftClick for HUMANS has been overriden in click.dm in the interaction module. /atom/proc/CtrlShiftClick(mob/user) if(!can_interact(user)) return FALSE diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index 8cc8603f552c49..a67bd191b3f5d7 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -88,7 +88,7 @@ //Give cyborgs hotkey clicks without breaking existing uses of hotkey clicks // for non-doors/apcs -/mob/living/silicon/robot/CtrlShiftClickOn(atom/target) // Procs overriden in modular_skyrat/modules/Silicon_QoL +/mob/living/silicon/robot/CtrlShiftClickOn(atom/target) // Procs overriden in modular_nova/modules/Silicon_QoL target.BorgCtrlShiftClick(src) /mob/living/silicon/robot/ShiftClickOn(atom/target) @@ -190,21 +190,21 @@ change attack_robot() above to the proper function */ /mob/living/silicon/robot/UnarmedAttack(atom/A, proximity_flag, list/modifiers) - if(HAS_TRAIT(src, TRAIT_HANDS_BLOCKED)) + if(!can_unarmed_attack()) return A.attack_robot(src) /mob/living/silicon/robot/RangedAttack(atom/A) A.attack_robot(src) -/* //SKYRAT EDIT - MOVED TO modular_skyrat/master_files/code/_onclick/cyborg.dm +/* //NOVA EDIT - MOVED TO modular_nova/master_files/code/_onclick/cyborg.dm /atom/proc/attack_robot(mob/user) if (SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_ROBOT, user) & COMPONENT_CANCEL_ATTACK_CHAIN) return attack_ai(user) return -*/ //SKYRAT EDIT END +*/ //NOVA EDIT END /** * What happens when the cyborg without active module holds right-click on an item. Returns a SECONDARY_ATTACK_* value. diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 4275c78dbe43eb..e73cebf14c0cbb 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -12,18 +12,22 @@ *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 + var/datum/weakref/master_ref + if(isdatum(new_master)) + master_ref = WEAKREF(new_master) var/atom/movable/screen/alert/thealert if(alerts[category]) thealert = alerts[category] if(thealert.override_alerts) return thealert - if(new_master && new_master != thealert.master) - WARNING("[src] threw alert [category] with new_master [new_master] while already having that alert with master [thealert.master]") + if(master_ref && thealert.master_ref && master_ref != thealert.master_ref) + var/datum/current_master = thealert.master_ref.resolve() + WARNING("[src] threw alert [category] with new_master [new_master] while already having that alert with master [current_master]") clear_alert(category) return .() @@ -35,7 +39,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 @@ -55,7 +59,7 @@ new_master.layer = old_layer new_master.plane = old_plane thealert.icon_state = "template" // We'll set the icon to the client's ui pref in reorganize_alerts() - thealert.master = new_master + thealert.master_ref = master_ref else thealert.icon_state = "[initial(thealert.icon_state)][severity]" thealert.severity = severity @@ -63,9 +67,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, 6, MATRIX_TRANSLATE) + animate(thealert, transform = matrix(), time = 2.5, easing = CUBIC_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,13 +300,17 @@ 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" @@ -502,7 +512,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." alerttooltipstyle = "cult" var/static/image/narnar var/angle = 0 - var/mob/living/simple_animal/hostile/construct/Cviewer = null + var/mob/living/basic/construct/Cviewer /atom/movable/screen/alert/bloodsense/Initialize(mapload, datum/hud/hud_owner) . = ..() @@ -607,19 +617,13 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." //GUARDIANS -/atom/movable/screen/alert/cancharge - name = "Charge Ready" - desc = "You are ready to charge at a location!" - icon_state = "guardian_charge" - alerttooltipstyle = "parasite" - /atom/movable/screen/alert/canstealth name = "Stealth Ready" desc = "You are ready to enter stealth!" icon_state = "guardian_canstealth" alerttooltipstyle = "parasite" -/atom/movable/screen/alert/instealth +/atom/movable/screen/alert/status_effect/instealth name = "In Stealth" desc = "You are in stealth and your next attack will do bonus damage!" icon_state = "guardian_instealth" @@ -762,13 +766,13 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." //GHOSTS //TODO: expand this system to replace the pollCandidates/CheckAntagonist/"choose quickly"/etc Yes/No messages -/atom/movable/screen/alert/notify_cloning +/atom/movable/screen/alert/revival name = "Revival" desc = "Someone is trying to revive you. Re-enter your corpse if you want to be revived!" icon_state = "template" timeout = 300 -/atom/movable/screen/alert/notify_cloning/Click() +/atom/movable/screen/alert/revival/Click() . = ..() if(!.) return @@ -780,29 +784,174 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." desc = "This can be clicked on to perform an action." icon_state = "template" timeout = 30 SECONDS - /// The target to use the action on - var/atom/target - /// Which on click action to use - var/action = NOTIFY_JUMP + /// Weakref to the target atom to use the action on + var/datum/weakref/target_ref + /// If we want to interact on click rather than jump/orbit + var/click_interact = FALSE /atom/movable/screen/alert/notify_action/Click() . = ..() - if(isnull(target)) + + var/atom/target = target_ref?.resolve() + if(isnull(target) || !isobserver(owner) || target == owner) return var/mob/dead/observer/ghost_owner = owner - if(!istype(ghost_owner)) + + if(click_interact) + ghost_owner.jump_to_interact(target) return - switch(action) - if(NOTIFY_PLAY) - target.attack_ghost(ghost_owner) - if(NOTIFY_JUMP) - var/turf/target_turf = get_turf(target) - if(target_turf && isturf(target_turf)) - ghost_owner.abstract_move(target_turf) - if(NOTIFY_ORBIT) - ghost_owner.ManualFollow(target) + ghost_owner.observer_view(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 @@ -871,6 +1020,18 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." carbon_owner.changeNext_move(CLICK_CD_RESIST) carbon_owner.shoes.handle_tying(carbon_owner) +/atom/movable/screen/alert/unpossess_object + name = "Unpossess" + desc = "You are possessing an object. Click this alert to unpossess it." + icon_state = "buckled" + +/atom/movable/screen/alert/unpossess_object/Click() + . = ..() + if(!.) + return + + qdel(owner.GetComponent(/datum/component/object_possession)) + // PRIVATE = only edit, use, or override these if you're editing the system as a whole // Re-render all alerts - also called in /datum/hud/show_hud() because it's needed there @@ -916,14 +1077,15 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." if(LAZYACCESS(modifiers, SHIFT_CLICK)) // screen objects don't do the normal Click() stuff so we'll cheat to_chat(usr, span_boldnotice("[name] - [desc]")) return FALSE - if(master && click_master) - return usr.client.Click(master, location, control, params) + var/datum/our_master = master_ref?.resolve() + if(our_master && click_master) + return usr.client.Click(our_master, location, control, params) return TRUE /atom/movable/screen/alert/Destroy() . = ..() severity = 0 - master = null + master_ref = null owner = null screen_loc = "" diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index 79f857e8cbef07..e928a2b8b3ef34 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -223,3 +223,4 @@ icon_state = "noise" color = "#04a8d1" alpha = 80 + diff --git a/code/_onclick/hud/guardian.dm b/code/_onclick/hud/guardian.dm index f9963c1fa3a915..ba1d8f4565e64f 100644 --- a/code/_onclick/hud/guardian.dm +++ b/code/_onclick/hud/guardian.dm @@ -1,7 +1,7 @@ /datum/hud/guardian ui_style = 'icons/hud/guardian.dmi' -/datum/hud/guardian/New(mob/living/simple_animal/hostile/guardian/owner) +/datum/hud/guardian/New(mob/living/basic/guardian/owner) ..() var/atom/movable/screen/using @@ -34,10 +34,10 @@ using.screen_loc = ui_back static_inventory += using -/datum/hud/dextrous/guardian/New(mob/living/simple_animal/hostile/guardian/owner) //for a dextrous guardian +/datum/hud/dextrous/guardian/New(mob/living/basic/guardian/owner) //for a dextrous guardian ..() var/atom/movable/screen/using - if(istype(owner, /mob/living/simple_animal/hostile/guardian/dextrous)) + if(istype(owner, /mob/living/basic/guardian/dextrous)) var/atom/movable/screen/inventory/inv_box inv_box = new /atom/movable/screen/inventory(null, src) @@ -86,8 +86,8 @@ /datum/hud/dextrous/guardian/persistent_inventory_update() if(!mymob) return - if(istype(mymob, /mob/living/simple_animal/hostile/guardian/dextrous)) - var/mob/living/simple_animal/hostile/guardian/dextrous/dex_guardian = mymob + if(istype(mymob, /mob/living/basic/guardian/dextrous)) + var/mob/living/basic/guardian/dextrous/dex_guardian = mymob if(hud_shown) if(dex_guardian.internal_storage) @@ -109,7 +109,7 @@ /atom/movable/screen/guardian/manifest/Click() if(isguardian(usr)) - var/mob/living/simple_animal/hostile/guardian/user = usr + var/mob/living/basic/guardian/user = usr user.manifest() @@ -120,7 +120,7 @@ /atom/movable/screen/guardian/recall/Click() if(isguardian(usr)) - var/mob/living/simple_animal/hostile/guardian/user = usr + var/mob/living/basic/guardian/user = usr user.recall() /atom/movable/screen/guardian/toggle_mode @@ -130,7 +130,7 @@ /atom/movable/screen/guardian/toggle_mode/Click() if(isguardian(usr)) - var/mob/living/simple_animal/hostile/guardian/user = usr + var/mob/living/basic/guardian/user = usr user.toggle_modes() /atom/movable/screen/guardian/toggle_mode/inactive @@ -153,7 +153,7 @@ /atom/movable/screen/guardian/communicate/Click() if(isguardian(usr)) - var/mob/living/simple_animal/hostile/guardian/user = usr + var/mob/living/basic/guardian/user = usr user.communicate() @@ -164,5 +164,5 @@ /atom/movable/screen/guardian/toggle_light/Click() if(isguardian(usr)) - var/mob/living/simple_animal/hostile/guardian/user = usr + var/mob/living/basic/guardian/user = usr user.toggle_light() diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index ba5f987a4733e0..aceb360c953339 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -17,29 +17,29 @@ GLOBAL_LIST_INIT(available_ui_styles, list( "Detective" = 'icons/hud/screen_detective.dmi', )) -//SKYRAT EDIT - ADDITION - ERP ICONS FIX +//NOVA EDIT - ADDITION - ERP ICONS FIX GLOBAL_LIST_INIT(available_erp_ui_styles, list( - "Midnight" = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/midnight.dmi', - "Retro" = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/retro.dmi', - "Plasmafire" = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/plasmafire.dmi', - "Slimecore" = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/slimecore.dmi', - "Operative" = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/operative.dmi', - "Clockwork" = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/clockwork.dmi', - "Glass" = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/glass.dmi' + "Midnight" = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/midnight.dmi', + "Retro" = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/retro.dmi', + "Plasmafire" = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/plasmafire.dmi', + "Slimecore" = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/slimecore.dmi', + "Operative" = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/operative.dmi', + "Clockwork" = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/clockwork.dmi', + "Glass" = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/glass.dmi' )) -//SKYRAT EDIT - ADDITION - ERP ICONS FIX - END +//NOVA EDIT - ADDITION - ERP ICONS FIX - END /proc/ui_style2icon(ui_style) return GLOB.available_ui_styles[ui_style] || GLOB.available_ui_styles[GLOB.available_ui_styles[1]] -//SKYRAT EDIT - ADDITION - ERP ICONS FIX +//NOVA EDIT - ADDITION - ERP ICONS FIX /proc/erp_ui_style2icon(ui_style) return GLOB.available_erp_ui_styles[ui_style] || GLOB.available_erp_ui_styles[GLOB.available_erp_ui_styles[1]] -//SKYRAT EDIT - ADDITION - ERP ICONS FIX - END +//NOVA EDIT - ADDITION - ERP ICONS FIX - END /datum/hud var/mob/mymob @@ -49,7 +49,7 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( var/inventory_shown = FALSE //Equipped item inventory var/hotkey_ui_hidden = FALSE //This is to hide the buttons that can be used via hotkeys. (hotkeybuttons list of buttons) - var/atom/movable/screen/ammo_counter //SKYRAT EDIT ADDITION + var/atom/movable/screen/ammo_counter //NOVA EDIT ADDITION var/atom/movable/screen/blobpwrdisplay @@ -120,7 +120,7 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( var/atom/movable/screen/spacesuit // subtypes can override this to force a specific UI style var/ui_style - var/erp_ui_style //SKYRAT EDIT - ADDITION - ERP ICONS FIX + var/erp_ui_style //NOVA EDIT - ADDITION - ERP ICONS FIX // List of weakrefs to objects that we add to our screen that we don't expect to DO anything // They typically use * in their render target. They exist solely so we can reuse them, @@ -133,7 +133,7 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( if (!ui_style) // will fall back to the default if any of these are null ui_style = ui_style2icon(owner.client?.prefs?.read_preference(/datum/preference/choiced/ui_style)) - erp_ui_style = erp_ui_style2icon(owner.client?.prefs?.read_preference(/datum/preference/choiced/ui_style)) //SKYRAT EDIT - ADDITION - ERP ICONS FIX + erp_ui_style = erp_ui_style2icon(owner.client?.prefs?.read_preference(/datum/preference/choiced/ui_style)) //NOVA EDIT - ADDITION - ERP ICONS FIX toggle_palette = new() toggle_palette.set_hud(src) @@ -269,9 +269,9 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( alien_queen_finder = null combo_display = null - //SKYRAT EDIT START - SKYRAT HUD + //NOVA EDIT START - SKYRAT HUD wanted_lvl = null - // SKYRAT EDIT END - SKYRAT HUD + // NOVA EDIT END - SKYRAT HUD QDEL_LIST_ASSOC_VAL(master_groups) QDEL_LIST_ASSOC_VAL(plane_master_controllers) diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 11f186e9877329..410f6c07a454a6 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -288,8 +288,8 @@ combo_display = new /atom/movable/screen/combo(null, src) infodisplay += combo_display - ammo_counter = new /atom/movable/screen/ammo_counter(null, src) //SKYRAT EDIT ADDITION - infodisplay += ammo_counter //SKYRAT EDIT ADDITION + ammo_counter = new /atom/movable/screen/ammo_counter(null, src) //NOVA EDIT ADDITION + infodisplay += ammo_counter //NOVA EDIT ADDITION for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory)) if(inv.slot_id) diff --git a/code/_onclick/hud/living.dm b/code/_onclick/hud/living.dm index ecd6ecc1eba762..70084b1ecd9c6d 100644 --- a/code/_onclick/hud/living.dm +++ b/code/_onclick/hud/living.dm @@ -10,6 +10,11 @@ pull_icon.screen_loc = ui_living_pull static_inventory += pull_icon + action_intent = new /atom/movable/screen/combattoggle/flashy(null, src) + action_intent.icon = 'icons/hud/screen_midnight.dmi' + action_intent.screen_loc = ui_combat_toggle + static_inventory += action_intent + combo_display = new /atom/movable/screen/combo(null, src) infodisplay += combo_display diff --git a/code/_onclick/hud/new_player.dm b/code/_onclick/hud/new_player.dm index 376164235a7922..86735de11279fc 100644 --- a/code/_onclick/hud/new_player.dm +++ b/code/_onclick/hud/new_player.dm @@ -1,4 +1,4 @@ -/* SKYRAT EDIT REMOVAL - Custom HTML Lobby Screen +/* NOVA EDIT REMOVAL - Custom HTML Lobby Screen #define SHUTTER_MOVEMENT_DURATION 0.4 SECONDS #define SHUTTER_WAIT_DURATION 0.2 SECONDS @@ -84,7 +84,7 @@ return flick("[base_icon_state]_pressed", src) update_appearance(UPDATE_ICON) - SEND_SOUND(hud.mymob, sound('modular_skyrat/master_files/sound/effects/save.ogg')) //SKYRAT EDIT ADDITION + SEND_SOUND(hud.mymob, sound('modular_nova/master_files/sound/effects/save.ogg')) //NOVA EDIT ADDITION return TRUE /atom/movable/screen/lobby/button/MouseEntered(location,control,params) @@ -184,11 +184,11 @@ return var/mob/dead/new_player/new_player = hud.mymob - // SKYRAT EDIT BEGIN + // NOVA EDIT BEGIN if(!is_admin(new_player.client) && length_char(new_player.client?.prefs?.read_preference(/datum/preference/text/flavor_text)) < FLAVOR_TEXT_CHAR_REQUIREMENT) to_chat(new_player, span_notice("You need at least [FLAVOR_TEXT_CHAR_REQUIREMENT] characters of flavor text to ready up for the round. You have [length_char(new_player.client.prefs.read_preference(/datum/preference/text/flavor_text))] characters.")) return - // SKYRAT EDIT END + // NOVA EDIT END ready = !ready if(ready) @@ -253,11 +253,11 @@ to_chat(new_player, span_notice("You have been added to the queue to join the game. Your position in queue is [SSticker.queued_players.len].")) return - // SKYRAT EDIT BEGIN + // NOVA EDIT BEGIN if(length_char(new_player.client.prefs.read_preference(/datum/preference/text/flavor_text)) <= FLAVOR_TEXT_CHAR_REQUIREMENT) to_chat(new_player, span_notice("You need at least [FLAVOR_TEXT_CHAR_REQUIREMENT] characters of flavor text to join the round. You have [length_char(new_player.client.prefs.read_preference(/datum/preference/text/flavor_text))] characters.")) return - // SKYRAT EDIT END + // NOVA EDIT END if(!LAZYACCESS(params2list(params), CTRL_CLICK)) GLOB.latejoin_menu.ui_interact(new_player) @@ -541,4 +541,4 @@ #undef SHUTTER_MOVEMENT_DURATION #undef SHUTTER_WAIT_DURATION -*/ // SKYRAT EDIT END +*/ // NOVA EDIT END diff --git a/code/_onclick/hud/ooze.dm b/code/_onclick/hud/ooze.dm index 1b466f7ff97969..0962b58126af9f 100644 --- a/code/_onclick/hud/ooze.dm +++ b/code/_onclick/hud/ooze.dm @@ -1,4 +1,4 @@ -///Hud type with targetting dol and a nutrition bar +///Hud type with targeting dol and a nutrition bar /datum/hud/ooze/New(mob/living/owner) . = ..() diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm index ba1ccbd5d47b76..51220c485122b0 100644 --- a/code/_onclick/hud/radial.dm +++ b/code/_onclick/hud/radial.dm @@ -111,7 +111,7 @@ GLOBAL_LIST_EMPTY(radial_menus) var/hudfix_method = TRUE //TRUE to change anchor to user, FALSE to shift by py_shift var/py_shift = 0 var/entry_animation = TRUE - var/icon_path = 'icons/hud/radial.dmi' //SKYRAT EDIT ADDITION - GUNPOINT + var/icon_path = 'icons/hud/radial.dmi' //NOVA EDIT ADDITION - GUNPOINT ///A replacement icon state for the generic radial slice bg icon. Doesn't affect the next page nor the center buttons var/radial_slice_icon @@ -159,7 +159,7 @@ GLOBAL_LIST_EMPTY(radial_menus) var/elements_to_add = max_elements - elements.len for(var/i in 1 to elements_to_add) //Create all elements var/atom/movable/screen/radial/slice/new_element = new /atom/movable/screen/radial/slice - new_element.icon = icon_path //SKYRAT EDIT ADDITION - GUNPOINT + new_element.icon = icon_path //NOVA EDIT ADDITION - GUNPOINT new_element.tooltips = use_tooltips new_element.set_parent(src) elements += new_element @@ -396,7 +396,7 @@ GLOBAL_LIST_EMPTY(radial_menus) /// If provided, will display an info button that will put this text in your chat var/info -/datum/radial_menu_choice/Destroy(force, ...) +/datum/radial_menu_choice/Destroy(force) . = ..() QDEL_NULL(image) diff --git a/code/_onclick/hud/rendering/plane_master.dm b/code/_onclick/hud/rendering/plane_master.dm deleted file mode 100644 index 4ae1c573ad4af2..00000000000000 --- a/code/_onclick/hud/rendering/plane_master.dm +++ /dev/null @@ -1,684 +0,0 @@ -// I hate this place -INITIALIZE_IMMEDIATE(/atom/movable/screen/plane_master) - -/atom/movable/screen/plane_master - screen_loc = "CENTER" - icon_state = "blank" - appearance_flags = PLANE_MASTER - blend_mode = BLEND_OVERLAY - plane = LOWEST_EVER_PLANE - /// Will be sent to the debug ui as a description for each plane - /// Also useful as a place to explain to coders how/why your plane works, and what it's meant to do - /// Plaintext and basic html are fine to use here. - /// I'll bonk you if I find you putting "lmao stuff" in here, make this useful. - var/documentation = "" - /// Our real alpha value, so alpha can persist through being hidden/shown - var/true_alpha = 255 - /// Tracks if we're using our true alpha, or being manipulated in some other way - var/alpha_enabled = TRUE - - /// The plane master group we're a member of, our "home" - var/datum/plane_master_group/home - - /// If our plane master allows for offsetting - /// Mostly used for planes that really don't need to be duplicated, like the hud planes - var/allows_offsetting = TRUE - /// Our offset from our "true" plane, see below - var/offset - /// When rendering multiz, lower levels get their own set of plane masters - /// Real plane here represents the "true" plane value of something, ignoring the offset required to handle lower levels - var/real_plane - - //--rendering relay vars-- - /// list of planes we will relay this plane's render to - var/list/render_relay_planes = list(RENDER_PLANE_GAME) - /// blend mode to apply to the render relay in case you dont want to use the plane_masters blend_mode - var/blend_mode_override - /// list of current relays this plane is utilizing to render - var/list/atom/movable/render_plane_relay/relays = list() - /// if render relays have already be generated - var/relays_generated = FALSE - - /// If this plane master should be hidden from the player at roundstart - /// We do this so PMs can opt into being temporary, to reduce load on clients - var/start_hidden = FALSE - /// If this plane master is being forced to hide. - /// Hidden PMs will dump ANYTHING relayed or drawn onto them. Be careful with this - /// Remember: a hidden plane master will dump anything drawn directly to it onto the output render. It does NOT hide its contents - /// Use alpha for that - var/force_hidden = FALSE - - /// If this plane should be scaled by multiz - /// Planes with this set should NEVER be relay'd into each other, as that will cause visual fuck - var/multiz_scaled = TRUE - - /// Bitfield that describes how this plane master will render if its z layer is being "optimized" - /// If a plane master is NOT critical, it will be completely dropped if we start to render outside a client's multiz boundary prefs - /// Of note: most of the time we will relay renders to non critical planes in this stage. so the plane master will end up drawing roughly "in order" with its friends - /// This is NOT done for parallax and other problem children, because the rules of BLEND_MULTIPLY appear to not behave as expected :( - /// This will also just make debugging harder, because we do fragile things in order to ensure things operate as epected. I'm sorry - /// Compile time - /// See [code\__DEFINES\layers.dm] for our bitflags - var/critical = NONE - - /// If this plane master is outside of our visual bounds right now - var/is_outside_bounds = FALSE - -/atom/movable/screen/plane_master/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset = 0) - . = ..() - src.offset = offset - true_alpha = alpha - real_plane = plane - - if(!set_home(home)) - return INITIALIZE_HINT_QDEL - update_offset() - if(!documentation && !(istype(src, /atom/movable/screen/plane_master) || istype(src, /atom/movable/screen/plane_master/rendering_plate))) - stack_trace("Plane master created without a description. Document how your thing works so people will know in future, and we can display it in the debug menu") - if(start_hidden) - hide_plane(home.our_hud?.mymob) - generate_render_relays() - -/atom/movable/screen/plane_master/Destroy() - if(home) - // NOTE! We do not clear ourselves from client screens - // We relay on whoever qdel'd us to reset our hud, and properly purge us - home.plane_masters -= "[plane]" - home = null - . = ..() - QDEL_LIST(relays) - -/// Sets the plane group that owns us, it also determines what screen we render to -/// Returns FALSE if the set_home fails, TRUE otherwise -/atom/movable/screen/plane_master/proc/set_home(datum/plane_master_group/home) - if(!istype(home, /datum/plane_master_group)) - return FALSE - src.home = home - if(home.map) - screen_loc = "[home.map]:[screen_loc]" - assigned_map = home.map - return TRUE - -/// Updates our "offset", basically what layer of multiz we're meant to render -/// Top is 0, goes up as you go down -/// It's taken into account by render targets and relays, so we gotta make sure they're on the same page -/atom/movable/screen/plane_master/proc/update_offset() - name = "[initial(name)] #[offset]" - SET_PLANE_W_SCALAR(src, real_plane, offset) - for(var/i in 1 to length(render_relay_planes)) - render_relay_planes[i] = GET_NEW_PLANE(render_relay_planes[i], offset) - if(initial(render_target)) - render_target = OFFSET_RENDER_TARGET(initial(render_target), offset) - -/atom/movable/screen/plane_master/proc/set_alpha(new_alpha) - true_alpha = new_alpha - if(!alpha_enabled) - return - alpha = new_alpha - -/atom/movable/screen/plane_master/proc/disable_alpha() - alpha_enabled = FALSE - alpha = 0 - -/atom/movable/screen/plane_master/proc/enable_alpha() - alpha_enabled = TRUE - alpha = true_alpha - -/// Shows a plane master to the passed in mob -/// Override this to apply unique effects and such -/// Returns TRUE if the call is allowed, FALSE otherwise -/atom/movable/screen/plane_master/proc/show_to(mob/mymob) - SHOULD_CALL_PARENT(TRUE) - if(force_hidden) - return FALSE - - var/client/our_client = mymob?.canon_client - // Alright, let's get this out of the way - // Mobs can move z levels without their client. If this happens, we need to ensure critical display settings are respected - // This is done here. Mild to severe pain but it's nessesary - if(check_outside_bounds()) - if(!(critical & PLANE_CRITICAL_DISPLAY)) - return FALSE - if(!our_client) - return TRUE - our_client.screen += src - - if(!(critical & PLANE_CRITICAL_NO_RELAY)) - our_client.screen += relays - return TRUE - return TRUE - - if(!our_client) - return TRUE - - our_client.screen += src - our_client.screen += relays - return TRUE - -/// Hook to allow planes to work around is_outside_bounds -/// Return false to allow a show, true otherwise -/atom/movable/screen/plane_master/proc/check_outside_bounds() - return is_outside_bounds - -/// Hides a plane master from the passeed in mob -/// Do your effect cleanup here -/atom/movable/screen/plane_master/proc/hide_from(mob/oldmob) - SHOULD_CALL_PARENT(TRUE) - var/client/their_client = oldmob?.client - if(!their_client) - return - their_client.screen -= src - their_client.screen -= relays - - -/// Forces this plane master to hide, until unhide_plane is called -/// This allows us to disable unused PMs without breaking anything else -/atom/movable/screen/plane_master/proc/hide_plane(mob/cast_away) - force_hidden = TRUE - hide_from(cast_away) - -/// Disables any forced hiding, allows the plane master to be used as normal -/atom/movable/screen/plane_master/proc/unhide_plane(mob/enfold) - force_hidden = FALSE - show_to(enfold) - -/// Mirrors our force hidden state to the hidden state of the plane that came before, assuming it's valid -/// This allows us to mirror any hidden sets from before we were created, no matter how low that chance is -/atom/movable/screen/plane_master/proc/mirror_parent_hidden() - var/mob/our_mob = home?.our_hud?.mymob - var/atom/movable/screen/plane_master/true_plane = our_mob?.hud_used?.get_plane_master(plane) - if(true_plane == src || !true_plane) - return - - if(true_plane.force_hidden == force_hidden) - return - - // If one of us already exists and it's not hidden, unhide ourselves - if(true_plane.force_hidden) - hide_plane(our_mob) - else - unhide_plane(our_mob) - -/atom/movable/screen/plane_master/proc/outside_bounds(mob/relevant) - if(force_hidden || is_outside_bounds) - return - is_outside_bounds = TRUE - // If we're of critical importance, AND we're below the rendering layer - if(critical & PLANE_CRITICAL_DISPLAY) - // We here assume that your render target starts with * - if(critical & PLANE_CRITICAL_CUT_RENDER && render_target) - render_target = copytext_char(render_target, 2) - if(!(critical & PLANE_CRITICAL_NO_RELAY)) - return - var/client/our_client = relevant.client - if(our_client) - for(var/atom/movable/render_plane_relay/relay as anything in relays) - our_client.screen -= relay - - return - hide_from(relevant) - -/atom/movable/screen/plane_master/proc/inside_bounds(mob/relevant) - is_outside_bounds = FALSE - if(critical & PLANE_CRITICAL_DISPLAY) - // We here assume that your render target starts with * - if(critical & PLANE_CRITICAL_CUT_RENDER && render_target) - render_target = "*[render_target]" - - if(!(critical & PLANE_CRITICAL_NO_RELAY)) - return - var/client/our_client = relevant.client - if(our_client) - for(var/atom/movable/render_plane_relay/relay as anything in relays) - our_client.screen += relay - - return - show_to(relevant) - -/atom/movable/screen/plane_master/clickcatcher - name = "Click Catcher" - documentation = "Contains the screen object we use as a backdrop to catch clicks on portions of the screen that would otherwise contain nothing else. \ -
Will always be below almost everything else" - plane = CLICKCATCHER_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - multiz_scaled = FALSE - critical = PLANE_CRITICAL_DISPLAY - -/atom/movable/screen/plane_master/clickcatcher/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) - . = ..() - RegisterSignal(SSmapping, COMSIG_PLANE_OFFSET_INCREASE, PROC_REF(offset_increased)) - offset_increased(SSmapping, 0, SSmapping.max_plane_offset) - -/atom/movable/screen/plane_master/clickcatcher/proc/offset_increased(datum/source, old_off, new_off) - SIGNAL_HANDLER - // We only want need the lowest level - // If my system better supported changing PM plane values mid op I'd do that, but I do NOT so - if(new_off > offset) - hide_plane(home?.our_hud?.mymob) - -/atom/movable/screen/plane_master/parallax_white - name = "Parallax whitifier" - documentation = "Essentially a backdrop for the parallax plane. We're rendered just below it, so we'll be multiplied by its well, parallax.\ -
If you want something to look as if it has parallax on it, draw it to this plane." - plane = PLANE_SPACE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - render_relay_planes = list(RENDER_PLANE_GAME, LIGHT_MASK_PLANE) - critical = PLANE_CRITICAL_FUCKO_PARALLAX // goes funny when touched. no idea why I don't trust byond - -/atom/movable/screen/plane_master/parallax_white/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) - . = ..() - add_relay_to(GET_NEW_PLANE(EMISSIVE_RENDER_PLATE, offset), relay_layer = EMISSIVE_SPACE_LAYER) - -///Contains space parallax -/atom/movable/screen/plane_master/parallax - name = "Parallax" - documentation = "Contains parallax, or to be more exact the screen objects that hold parallax.\ -
Note the BLEND_MULTIPLY. The trick here is how low our plane value is. Because of that, we draw below almost everything in the game.\ -
We abuse this to ensure we multiply against the Parallax whitifier plane, or space's plane. It's set to full white, so when you do the multiply you just get parallax out where it well, makes sense to be.\ -
Also notice that the parent parallax plane is mirrored down to all children. We want to support viewing parallax across all z levels at once." - plane = PLANE_SPACE_PARALLAX - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - blend_mode = BLEND_MULTIPLY - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - multiz_scaled = FALSE - -/atom/movable/screen/plane_master/parallax/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) - . = ..() - if(offset != 0) - // You aren't the source? don't change yourself - return - RegisterSignal(SSmapping, COMSIG_PLANE_OFFSET_INCREASE, PROC_REF(on_offset_increase)) - RegisterSignal(SSdcs, COMSIG_NARSIE_SUMMON_UPDATE, PROC_REF(narsie_modified)) - if(GLOB.narsie_summon_count >= 1) - narsie_start_midway(GLOB.narsie_effect_last_modified) // We assume we're on the start, so we can use this number - offset_increase(0, SSmapping.max_plane_offset) - -/atom/movable/screen/plane_master/parallax/proc/on_offset_increase(datum/source, old_offset, new_offset) - SIGNAL_HANDLER - offset_increase(old_offset, new_offset) - -/atom/movable/screen/plane_master/parallax/proc/offset_increase(old_offset, new_offset) - // Parallax will be mirrored down to any new planes that are added, so it will properly render across mirage borders - for(var/offset in old_offset to new_offset) - if(offset != 0) - // Overlay so we don't multiply twice, and thus fuck up our rendering - add_relay_to(GET_NEW_PLANE(plane, offset), BLEND_OVERLAY) - -// Hacky shit to ensure parallax works in perf mode -/atom/movable/screen/plane_master/parallax/outside_bounds(mob/relevant) - if(offset == 0) - remove_relay_from(GET_NEW_PLANE(RENDER_PLANE_GAME, 0)) - is_outside_bounds = TRUE // I'm sorry :( - return - // If we can't render, and we aren't the bottom layer, don't render us - // This way we only multiply against stuff that's not fullwhite space - var/atom/movable/screen/plane_master/parent_parallax = home.our_hud.get_plane_master(PLANE_SPACE_PARALLAX) - var/turf/viewing_turf = get_turf(relevant) - if(!viewing_turf || offset != GET_LOWEST_STACK_OFFSET(viewing_turf.z)) - parent_parallax.remove_relay_from(plane) - else - parent_parallax.add_relay_to(plane, BLEND_OVERLAY) - return ..() - -/atom/movable/screen/plane_master/parallax/inside_bounds(mob/relevant) - if(offset == 0) - add_relay_to(GET_NEW_PLANE(RENDER_PLANE_GAME, 0)) - is_outside_bounds = FALSE - return - // Always readd, just in case we lost it - var/atom/movable/screen/plane_master/parent_parallax = home.our_hud.get_plane_master(PLANE_SPACE_PARALLAX) - parent_parallax.add_relay_to(plane, BLEND_OVERLAY) - return ..() - -// Needs to handle rejoining on a lower z level, so we NEED to readd old planes -/atom/movable/screen/plane_master/parallax/check_outside_bounds() - // If we're outside bounds AND we're the 0th plane, we need to show cause parallax is hacked to hell - return offset != 0 && is_outside_bounds - -/// Starts the narsie animation midway, so we can catch up to everyone else quickly -/atom/movable/screen/plane_master/parallax/proc/narsie_start_midway(start_time) - var/time_elapsed = world.time - start_time - narsie_summoned_effect(max(16 SECONDS - time_elapsed, 0)) - -/// Starts the narsie animation, make us grey, then red -/atom/movable/screen/plane_master/parallax/proc/narsie_modified(datum/source, new_count) - SIGNAL_HANDLER - if(new_count >= 1) - narsie_summoned_effect(16 SECONDS) - else - narsie_unsummoned() - -/atom/movable/screen/plane_master/parallax/proc/narsie_summoned_effect(animate_time) - if(GLOB.narsie_summon_count >= 2) - var/static/list/nightmare_parallax = list(255,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, -130,0,0,0) - animate(src, color = nightmare_parallax, time = animate_time) - return - - var/static/list/grey_parallax = list(0.4,0.4,0.4,0, 0.4,0.4,0.4,0, 0.4,0.4,0.4,0, 0,0,0,1, -0.1,-0.1,-0.1,0) - // We're gonna animate ourselves grey - // Then, once it's done, about 40 seconds into the event itself, we're gonna start doin some shit. see below - animate(src, color = grey_parallax, time = animate_time) - -/atom/movable/screen/plane_master/parallax/proc/narsie_unsummoned() - animate(src, color = null, time = 8 SECONDS) - -/atom/movable/screen/plane_master/gravpulse - name = "Gravpulse" - documentation = "Ok so this one's fun. Basically, we want to be able to distort the game plane when a grav annom is around.\ -
So we draw the pattern we want to use to this plane, and it's then used as a render target by a distortion filter on the game plane.\ -
Note the blend mode and lack of relay targets. This plane exists only to distort, it's never rendered anywhere." - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - plane = GRAVITY_PULSE_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - blend_mode = BLEND_ADD - render_target = GRAVITY_PULSE_RENDER_TARGET - render_relay_planes = list() - -///Contains just the floor -/atom/movable/screen/plane_master/floor - name = "Floor" - documentation = "The well, floor. This is mostly used as a sorting mechanism, but it also lets us create a \"border\" around the game world plane, so its drop shadow will actually work." - plane = FLOOR_PLANE - render_relay_planes = list(RENDER_PLANE_GAME, LIGHT_MASK_PLANE) - -/atom/movable/screen/plane_master/transparent_floor - name = "Transparent Floor" - documentation = "Really just openspace, stuff that is a turf but has no color or alpha whatsoever.\ -
We use this to draw to just the light mask plane, cause if it's not there we get holes of blackness over openspace" - plane = TRANSPARENT_FLOOR_PLANE - render_relay_planes = list(LIGHT_MASK_PLANE) - // Needs to be critical or it uh, it'll look white - critical = PLANE_CRITICAL_DISPLAY|PLANE_CRITICAL_NO_RELAY - -/atom/movable/screen/plane_master/floor/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) - . = ..() - add_relay_to(GET_NEW_PLANE(EMISSIVE_RENDER_PLATE, offset), relay_layer = EMISSIVE_FLOOR_LAYER, relay_color = GLOB.em_block_color) - -/atom/movable/screen/plane_master/wall - name = "Wall" - documentation = "Holds all walls. We render this onto the game world. Separate so we can use this + space and floor planes as a guide for where byond blackness is NOT." - plane = WALL_PLANE - render_relay_planes = list(RENDER_PLANE_GAME_WORLD, LIGHT_MASK_PLANE) - -/atom/movable/screen/plane_master/wall/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) - . = ..() - add_relay_to(GET_NEW_PLANE(EMISSIVE_RENDER_PLATE, offset), relay_layer = EMISSIVE_WALL_LAYER, relay_color = GLOB.em_block_color) - -/atom/movable/screen/plane_master/game - name = "Lower game world" - documentation = "Exists mostly because of FOV shit. Basically, if you've just got a normal not ABOVE fov thing, and you don't want it masked, stick it here yeah?" - plane = GAME_PLANE - render_relay_planes = list(RENDER_PLANE_GAME_WORLD) - -/atom/movable/screen/plane_master/game_world_fov_hidden - name = "lower game world fov hidden" - documentation = "If you want something to be hidden by fov, stick it on this plane. We're masked by the fov blocker plane, so the items on us can actually well, disappear." - plane = GAME_PLANE_FOV_HIDDEN - render_relay_planes = list(RENDER_PLANE_GAME_WORLD) - -/atom/movable/screen/plane_master/game_world_fov_hidden/Initialize(mapload, datum/hud/hud_owner) - . = ..() - add_filter("vision_cone", 1, alpha_mask_filter(render_source = OFFSET_RENDER_TARGET(FIELD_OF_VISION_BLOCKER_RENDER_TARGET, offset), flags = MASK_INVERSE)) - -/atom/movable/screen/plane_master/field_of_vision_blocker - name = "Field of vision blocker" - documentation = "This is one of those planes that's only used as a filter. It masks out things that want to be hidden by fov.\ -
Literally just contains FOV images, or masks." - plane = FIELD_OF_VISION_BLOCKER_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - render_target = FIELD_OF_VISION_BLOCKER_RENDER_TARGET - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - render_relay_planes = list() - // We do NOT allow offsetting, because there's no case where you would want to block only one layer, at least currently - allows_offsetting = FALSE - start_hidden = TRUE - // We mark as multiz_scaled FALSE so transforms don't effect us, and we draw to the planes below us as if they were us. - // This is safe because we will ALWAYS be on the top z layer, so it DON'T MATTER - multiz_scaled = FALSE - -/atom/movable/screen/plane_master/field_of_vision_blocker/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) - . = ..() - mirror_parent_hidden() - -/atom/movable/screen/plane_master/game_world_upper - name = "Upper game world" - documentation = "Ok so fov is kinda fucky, because planes in byond serve both as effect groupings and as rendering orderers. Since that's true, we need a plane that we can stick stuff that draws above fov blocked stuff on." - plane = GAME_PLANE_UPPER - render_relay_planes = list(RENDER_PLANE_GAME_WORLD) - -/atom/movable/screen/plane_master/wall_upper - name = "Upper wall" - documentation = "There are some walls that want to render above most things (mostly minerals since they shift over.\ -
We draw them to their own plane so we can hijack them for our emissive mask stuff" - plane = WALL_PLANE_UPPER - render_relay_planes = list(RENDER_PLANE_GAME_WORLD, LIGHT_MASK_PLANE) - -/atom/movable/screen/plane_master/wall_upper/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) - . = ..() - add_relay_to(GET_NEW_PLANE(EMISSIVE_RENDER_PLATE, offset), relay_layer = EMISSIVE_WALL_LAYER, relay_color = GLOB.em_block_color) - -/atom/movable/screen/plane_master/game_world_upper_fov_hidden - name = "Upper game world fov hidden" - documentation = "Just as we need a place to draw things \"above\" the hidden fov plane, we also need to be able to hide stuff that draws over the upper game plane." - plane = GAME_PLANE_UPPER_FOV_HIDDEN - render_relay_planes = list(RENDER_PLANE_GAME_WORLD) - -/atom/movable/screen/plane_master/game_world_upper_fov_hidden/Initialize(mapload, datum/hud/hud_owner) - . = ..() - // Dupe of the other hidden plane - add_filter("vision_cone", 1, alpha_mask_filter(render_source = OFFSET_RENDER_TARGET(FIELD_OF_VISION_BLOCKER_RENDER_TARGET, offset), flags = MASK_INVERSE)) - -/atom/movable/screen/plane_master/seethrough - name = "Seethrough" - documentation = "Holds the seethrough versions (done using image overrides) of large objects. Mouse transparent, so you can click through them." - plane = SEETHROUGH_PLANE - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - render_relay_planes = list(RENDER_PLANE_GAME_WORLD) - start_hidden = TRUE - -/atom/movable/screen/plane_master/game_world_above - name = "Above game world" - documentation = "We need a place that's unmasked by fov that also draws above the upper game world fov hidden plane. I told you fov was hacky man." - plane = ABOVE_GAME_PLANE - render_relay_planes = list(RENDER_PLANE_GAME_WORLD) - -/** - * Plane master that byond will by default draw to - * Shouldn't be used, exists to prevent people using plane 0 - * NOTE: If we used SEE_BLACKNESS on a map format that wasn't SIDE_MAP, this is where its darkness would land - * This would allow us to control it and do fun things. But we can't because side map doesn't support it, so this is just a stub - */ -/atom/movable/screen/plane_master/default - name = "Default" - documentation = "This is quite fiddly, so bear with me. By default (in byond) everything in the game is rendered onto plane 0. It's the default plane. \ -
But, because we've moved everything we control off plane 0, all that's left is stuff byond internally renders. \ -
What I'd like to do with this is capture byond blackness by giving mobs the SEE_BLACKNESS sight flag. \ -
But we CAN'T because SEE_BLACKNESS does not work with our rendering format. So I just eat it I guess" - plane = DEFAULT_PLANE - multiz_scaled = FALSE - start_hidden = TRUE // Doesn't DO anything, exists to hold this place - -/atom/movable/screen/plane_master/area - name = "Area" - documentation = "Holds the areas themselves, which ends up meaning it holds any overlays/effects we apply to areas. NOT snow or rad storms, those go on above lighting" - plane = AREA_PLANE - -/atom/movable/screen/plane_master/massive_obj - name = "Massive object" - documentation = "Huge objects need to render above everything else on the game plane, otherwise they'd well, get clipped and look not that huge. This does that." - plane = MASSIVE_OBJ_PLANE - -/atom/movable/screen/plane_master/point - name = "Point" - documentation = "I mean like, what do you want me to say? Points draw over pretty much everything else, so they get their own plane. Remember we layer render relays to draw planes in their proper order on render plates." - plane = POINT_PLANE - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - -///Contains all turf lighting -/atom/movable/screen/plane_master/turf_lighting - name = "Turf Lighting" - documentation = "Contains all lighting drawn to turfs. Not so complex, draws directly onto the lighting plate." - plane = LIGHTING_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - render_relay_planes = list(RENDER_PLANE_LIGHTING) - blend_mode_override = BLEND_ADD - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - critical = PLANE_CRITICAL_DISPLAY - -/// This will not work through multiz, because of a byond bug with BLEND_MULTIPLY -/// Bug report is up, waiting on a fix -/atom/movable/screen/plane_master/o_light_visual - name = "Overlight light visual" - documentation = "Holds overlay lighting objects, or the sort of lighting that's a well, overlay stuck to something.\ -
Exists because lighting updating is really slow, and movement needs to feel smooth.\ -
We draw to the game plane, and mask out space for ourselves on the lighting plane so any color we have has the chance to display." - plane = O_LIGHTING_VISUAL_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - render_target = O_LIGHTING_VISUAL_RENDER_TARGET - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - blend_mode = BLEND_MULTIPLY - critical = PLANE_CRITICAL_DISPLAY - -/atom/movable/screen/plane_master/above_lighting - name = "Above lighting" - plane = ABOVE_LIGHTING_PLANE - documentation = "Anything on the game plane that needs a space to draw on that will be above the lighting plane.\ -
Mostly little alerts and effects, also sometimes contains things that are meant to look as if they glow." - -/** - * Handles emissive overlays and emissive blockers. - */ -/atom/movable/screen/plane_master/emissive - name = "Emissive" - documentation = "Holds things that will be used to mask the lighting plane later on. Masked by the Emissive Mask plane to ensure we don't emiss out under a wall.\ -
Relayed onto the Emissive render plane to do the actual masking of lighting, since we need to be transformed and other emissive stuff needs to be transformed too.\ -
Don't want to double scale now." - plane = EMISSIVE_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - render_relay_planes = list(EMISSIVE_RENDER_PLATE) - critical = PLANE_CRITICAL_DISPLAY - -/atom/movable/screen/plane_master/pipecrawl - name = "Pipecrawl" - documentation = "Holds pipecrawl images generated during well, pipecrawling.\ -
Has a few effects and a funky color matrix designed to make things a bit more visually readable." - plane = PIPECRAWL_IMAGES_PLANE - start_hidden = TRUE - -/atom/movable/screen/plane_master/pipecrawl/Initialize(mapload, datum/hud/hud_owner) - . = ..() - // Makes everything on this plane slightly brighter - // Has a nice effect, makes thing stand out - color = list(1.2,0,0,0, 0,1.2,0,0, 0,0,1.2,0, 0,0,0,1, 0,0,0,0) - // This serves a similar purpose, I want the pipes to pop - add_filter("pipe_dropshadow", 1, drop_shadow_filter(x = -1, y= -1, size = 1, color = "#0000007A")) - mirror_parent_hidden() - -/atom/movable/screen/plane_master/camera_static - name = "Camera static" - documentation = "Holds camera static images. Usually only visible to people who can well, see static.\ -
We use images rather then vis contents because they're lighter on maptick, and maptick sucks butt." - plane = CAMERA_STATIC_PLANE - -/atom/movable/screen/plane_master/camera_static/show_to(mob/mymob) - . = ..() - if(!.) - return - var/datum/hud/our_hud = home.our_hud - if(isnull(our_hud)) - return - - // We'll hide the slate if we're not seeing through a camera eye - // This can call on a cycle cause we don't clear in hide_from - // Yes this is the best way of hooking into the hud, I hate myself too - RegisterSignal(our_hud, COMSIG_HUD_EYE_CHANGED, PROC_REF(eye_changed), override = TRUE) - eye_changed(our_hud, null, our_hud.mymob?.canon_client?.eye) - -/atom/movable/screen/plane_master/camera_static/proc/eye_changed(datum/hud/source, atom/old_eye, atom/new_eye) - SIGNAL_HANDLER - - if(!isaicamera(new_eye)) - if(!force_hidden) - hide_plane(source.mymob) - return - - if(force_hidden) - unhide_plane(source.mymob) - -/atom/movable/screen/plane_master/high_game - name = "High Game" - documentation = "Holds anything that wants to be displayed above the rest of the game plane, and doesn't want to be clickable. \ -
This includes atmos debug overlays, blind sound images, and mining scanners. \ -
Really only exists for its layering potential, we don't use this for any vfx" - plane = HIGH_GAME_PLANE - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - -/atom/movable/screen/plane_master/ghost - name = "Ghost" - documentation = "Ghosts draw here, so they don't get mixed up in the visuals of the game world. Note, this is not not how we HIDE ghosts from people, that's done with invisible and see_invisible." - plane = GHOST_PLANE - render_relay_planes = list(RENDER_PLANE_NON_GAME) - -/atom/movable/screen/plane_master/fullscreen - name = "Fullscreen" - documentation = "Holds anything that applies to or above the full screen. \ -
Note, it's still rendered underneath hud objects, but this lets us control the order that things like death/damage effects render in." - plane = FULLSCREEN_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - render_relay_planes = list(RENDER_PLANE_NON_GAME) - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - allows_offsetting = FALSE - -/atom/movable/screen/plane_master/runechat - name = "Runechat" - documentation = "Holds runechat images, that text that pops up when someone say something. Uses a dropshadow to well, look nice." - plane = RUNECHAT_PLANE - render_relay_planes = list(RENDER_PLANE_NON_GAME) - -/atom/movable/screen/plane_master/runechat/show_to(mob/mymob) - . = ..() - if(!.) - return - remove_filter("AO") - if(istype(mymob) && mymob.canon_client?.prefs?.read_preference(/datum/preference/toggle/ambient_occlusion)) - add_filter("AO", 1, drop_shadow_filter(x = 0, y = -2, size = 4, color = "#04080FAA")) - -/atom/movable/screen/plane_master/balloon_chat - name = "Balloon chat" - documentation = "Holds ballon chat images, those little text bars that pop up for a second when you do some things. NOT runechat." - plane = BALLOON_CHAT_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - render_relay_planes = list(RENDER_PLANE_NON_GAME) - -/atom/movable/screen/plane_master/hud - name = "HUD" - documentation = "Contains anything that want to be rendered on the hud. Typically is just screen elements." - plane = HUD_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - render_relay_planes = list(RENDER_PLANE_NON_GAME) - allows_offsetting = FALSE - -/atom/movable/screen/plane_master/above_hud - name = "Above HUD" - documentation = "Anything that wants to be drawn ABOVE the rest of the hud. Typically close buttons and other elements that need to be always visible. Think preventing draggable action button memes." - plane = ABOVE_HUD_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - render_relay_planes = list(RENDER_PLANE_NON_GAME) - allows_offsetting = FALSE - -/atom/movable/screen/plane_master/splashscreen - name = "Splashscreen" - documentation = "Cinematics and the splash screen." - plane = SPLASHSCREEN_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - render_relay_planes = list(RENDER_PLANE_NON_GAME) - allows_offsetting = FALSE - -/atom/movable/screen/plane_master/escape_menu - name = "Escape Menu" - documentation = "Anything relating to the escape menu." - plane = ESCAPE_MENU_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - render_relay_planes = list(RENDER_PLANE_MASTER) - allows_offsetting = FALSE diff --git a/code/_onclick/hud/rendering/plane_master_group.dm b/code/_onclick/hud/rendering/plane_master_group.dm index c1fa1b37878645..63c202b64fba8b 100644 --- a/code/_onclick/hud/rendering/plane_master_group.dm +++ b/code/_onclick/hud/rendering/plane_master_group.dm @@ -13,6 +13,9 @@ var/active_offset = 0 /// What, if any, submap we render onto var/map = "" + /// Controls the screen_loc that owned plane masters will use when generating relays. Due to a Byond bug, relays using the CENTER positional loc + /// Will be improperly offset + var/relay_loc = "CENTER" /datum/plane_master_group/New(key, map = "") . = ..() @@ -51,11 +54,15 @@ /// Fully regenerate our group, resetting our planes to their compile time values /datum/plane_master_group/proc/rebuild_hud() hide_hud() - QDEL_LIST_ASSOC_VAL(plane_masters) - build_plane_masters(0, SSmapping.max_plane_offset) + rebuild_plane_masters() show_hud() transform_lower_turfs(our_hud, active_offset) +/// Regenerate our plane masters, this is useful if we don't have a mob but still want to rebuild. Such in the case of changing the screen_loc of relays +/datum/plane_master_group/proc/rebuild_plane_masters() + QDEL_LIST_ASSOC_VAL(plane_masters) + build_plane_masters(0, SSmapping.max_plane_offset) + /datum/plane_master_group/proc/hide_hud() for(var/thing in plane_masters) var/atom/movable/screen/plane_master/plane = plane_masters[thing] @@ -170,6 +177,20 @@ /// If you wanna try someday feel free, but I can't manage it /datum/plane_master_group/popup +/// This is janky as hell but since something changed with CENTER positioning after build 1614 we have to switch to the bandaid LEFT,TOP positioning +/// using LEFT,TOP *at* or *before* 1614 will result in another broken offset for cameras +#define MAX_CLIENT_BUILD_WITH_WORKING_SECONDARY_MAPS 1614 + +/datum/plane_master_group/popup/attach_to(datum/hud/viewing_hud) + // If we're about to display this group to a mob who's client is more recent than the last known version with working CENTER, then we need to remake the relays + // with the correct screen_loc using the relay override + if(viewing_hud.mymob?.client?.byond_build > MAX_CLIENT_BUILD_WITH_WORKING_SECONDARY_MAPS) + relay_loc = "LEFT,TOP" + rebuild_plane_masters() + return ..() + +#undef MAX_CLIENT_BUILD_WITH_WORKING_SECONDARY_MAPS + /datum/plane_master_group/popup/transform_lower_turfs(datum/hud/source, new_offset, use_scale = TRUE) return ..(source, new_offset, FALSE) diff --git a/code/_onclick/hud/rendering/plane_masters/_plane_master.dm b/code/_onclick/hud/rendering/plane_masters/_plane_master.dm new file mode 100644 index 00000000000000..13f94fa9f5aa09 --- /dev/null +++ b/code/_onclick/hud/rendering/plane_masters/_plane_master.dm @@ -0,0 +1,236 @@ +// I hate this place +INITIALIZE_IMMEDIATE(/atom/movable/screen/plane_master) + +/atom/movable/screen/plane_master + screen_loc = "CENTER" + icon_state = "blank" + appearance_flags = PLANE_MASTER + blend_mode = BLEND_OVERLAY + plane = LOWEST_EVER_PLANE + /// Will be sent to the debug ui as a description for each plane + /// Also useful as a place to explain to coders how/why your plane works, and what it's meant to do + /// Plaintext and basic html are fine to use here. + /// I'll bonk you if I find you putting "lmao stuff" in here, make this useful. + var/documentation = "" + /// Our real alpha value, so alpha can persist through being hidden/shown + var/true_alpha = 255 + /// Tracks if we're using our true alpha, or being manipulated in some other way + var/alpha_enabled = TRUE + + /// The plane master group we're a member of, our "home" + var/datum/plane_master_group/home + + /// If our plane master allows for offsetting + /// Mostly used for planes that really don't need to be duplicated, like the hud planes + var/allows_offsetting = TRUE + /// Our offset from our "true" plane, see below + var/offset + /// When rendering multiz, lower levels get their own set of plane masters + /// Real plane here represents the "true" plane value of something, ignoring the offset required to handle lower levels + var/real_plane + + //--rendering relay vars-- + /// list of planes we will relay this plane's render to + var/list/render_relay_planes = list(RENDER_PLANE_GAME) + /// blend mode to apply to the render relay in case you dont want to use the plane_masters blend_mode + var/blend_mode_override + /// list of current relays this plane is utilizing to render + var/list/atom/movable/render_plane_relay/relays = list() + /// if render relays have already be generated + var/relays_generated = FALSE + + /// If this plane master should be hidden from the player at roundstart + /// We do this so PMs can opt into being temporary, to reduce load on clients + var/start_hidden = FALSE + /// If this plane master is being forced to hide. + /// Hidden PMs will dump ANYTHING relayed or drawn onto them. Be careful with this + /// Remember: a hidden plane master will dump anything drawn directly to it onto the output render. It does NOT hide its contents + /// Use alpha for that + var/force_hidden = FALSE + + /// If this plane should be scaled by multiz + /// Planes with this set should NEVER be relay'd into each other, as that will cause visual fuck + var/multiz_scaled = TRUE + + /// Bitfield that describes how this plane master will render if its z layer is being "optimized" + /// If a plane master is NOT critical, it will be completely dropped if we start to render outside a client's multiz boundary prefs + /// Of note: most of the time we will relay renders to non critical planes in this stage. so the plane master will end up drawing roughly "in order" with its friends + /// This is NOT done for parallax and other problem children, because the rules of BLEND_MULTIPLY appear to not behave as expected :( + /// This will also just make debugging harder, because we do fragile things in order to ensure things operate as epected. I'm sorry + /// Compile time + /// See [code\__DEFINES\layers.dm] for our bitflags + var/critical = NONE + + /// If this plane master is outside of our visual bounds right now + var/is_outside_bounds = FALSE + +/atom/movable/screen/plane_master/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset = 0) + . = ..() + src.offset = offset + true_alpha = alpha + real_plane = plane + + if(!set_home(home)) + return INITIALIZE_HINT_QDEL + update_offset() + if(!documentation && !(istype(src, /atom/movable/screen/plane_master) || istype(src, /atom/movable/screen/plane_master/rendering_plate))) + stack_trace("Plane master created without a description. Document how your thing works so people will know in future, and we can display it in the debug menu") + if(start_hidden) + hide_plane(home.our_hud?.mymob) + generate_render_relays() + +/atom/movable/screen/plane_master/Destroy() + if(home) + // NOTE! We do not clear ourselves from client screens + // We relay on whoever qdel'd us to reset our hud, and properly purge us + home.plane_masters -= "[plane]" + home = null + . = ..() + QDEL_LIST(relays) + +/// Sets the plane group that owns us, it also determines what screen we render to +/// Returns FALSE if the set_home fails, TRUE otherwise +/atom/movable/screen/plane_master/proc/set_home(datum/plane_master_group/home) + if(!istype(home, /datum/plane_master_group)) + return FALSE + src.home = home + if(home.map) + screen_loc = "[home.map]:[screen_loc]" + assigned_map = home.map + return TRUE + +/// Updates our "offset", basically what layer of multiz we're meant to render +/// Top is 0, goes up as you go down +/// It's taken into account by render targets and relays, so we gotta make sure they're on the same page +/atom/movable/screen/plane_master/proc/update_offset() + name = "[initial(name)] #[offset]" + SET_PLANE_W_SCALAR(src, real_plane, offset) + for(var/i in 1 to length(render_relay_planes)) + render_relay_planes[i] = GET_NEW_PLANE(render_relay_planes[i], offset) + if(initial(render_target)) + render_target = OFFSET_RENDER_TARGET(initial(render_target), offset) + +/atom/movable/screen/plane_master/proc/set_alpha(new_alpha) + true_alpha = new_alpha + if(!alpha_enabled) + return + alpha = new_alpha + +/atom/movable/screen/plane_master/proc/disable_alpha() + alpha_enabled = FALSE + alpha = 0 + +/atom/movable/screen/plane_master/proc/enable_alpha() + alpha_enabled = TRUE + alpha = true_alpha + +/// Shows a plane master to the passed in mob +/// Override this to apply unique effects and such +/// Returns TRUE if the call is allowed, FALSE otherwise +/atom/movable/screen/plane_master/proc/show_to(mob/mymob) + SHOULD_CALL_PARENT(TRUE) + if(force_hidden) + return FALSE + + var/client/our_client = mymob?.canon_client + // Alright, let's get this out of the way + // Mobs can move z levels without their client. If this happens, we need to ensure critical display settings are respected + // This is done here. Mild to severe pain but it's nessesary + if(check_outside_bounds()) + if(!(critical & PLANE_CRITICAL_DISPLAY)) + return FALSE + if(!our_client) + return TRUE + our_client.screen += src + + if(!(critical & PLANE_CRITICAL_NO_RELAY)) + our_client.screen += relays + return TRUE + return TRUE + + if(!our_client) + return TRUE + + our_client.screen += src + our_client.screen += relays + return TRUE + +/// Hook to allow planes to work around is_outside_bounds +/// Return false to allow a show, true otherwise +/atom/movable/screen/plane_master/proc/check_outside_bounds() + return is_outside_bounds + +/// Hides a plane master from the passeed in mob +/// Do your effect cleanup here +/atom/movable/screen/plane_master/proc/hide_from(mob/oldmob) + SHOULD_CALL_PARENT(TRUE) + var/client/their_client = oldmob?.client + if(!their_client) + return + their_client.screen -= src + their_client.screen -= relays + + +/// Forces this plane master to hide, until unhide_plane is called +/// This allows us to disable unused PMs without breaking anything else +/atom/movable/screen/plane_master/proc/hide_plane(mob/cast_away) + force_hidden = TRUE + hide_from(cast_away) + +/// Disables any forced hiding, allows the plane master to be used as normal +/atom/movable/screen/plane_master/proc/unhide_plane(mob/enfold) + force_hidden = FALSE + show_to(enfold) + +/// Mirrors our force hidden state to the hidden state of the plane that came before, assuming it's valid +/// This allows us to mirror any hidden sets from before we were created, no matter how low that chance is +/atom/movable/screen/plane_master/proc/mirror_parent_hidden() + var/mob/our_mob = home?.our_hud?.mymob + var/atom/movable/screen/plane_master/true_plane = our_mob?.hud_used?.get_plane_master(plane) + if(true_plane == src || !true_plane) + return + + if(true_plane.force_hidden == force_hidden) + return + + // If one of us already exists and it's not hidden, unhide ourselves + if(true_plane.force_hidden) + hide_plane(our_mob) + else + unhide_plane(our_mob) + +/atom/movable/screen/plane_master/proc/outside_bounds(mob/relevant) + if(force_hidden || is_outside_bounds) + return + is_outside_bounds = TRUE + // If we're of critical importance, AND we're below the rendering layer + if(critical & PLANE_CRITICAL_DISPLAY) + // We here assume that your render target starts with * + if(critical & PLANE_CRITICAL_CUT_RENDER && render_target) + render_target = copytext_char(render_target, 2) + if(!(critical & PLANE_CRITICAL_NO_RELAY)) + return + var/client/our_client = relevant.client + if(our_client) + for(var/atom/movable/render_plane_relay/relay as anything in relays) + our_client.screen -= relay + + return + hide_from(relevant) + +/atom/movable/screen/plane_master/proc/inside_bounds(mob/relevant) + is_outside_bounds = FALSE + if(critical & PLANE_CRITICAL_DISPLAY) + // We here assume that your render target starts with * + if(critical & PLANE_CRITICAL_CUT_RENDER && render_target) + render_target = "*[render_target]" + + if(!(critical & PLANE_CRITICAL_NO_RELAY)) + return + var/client/our_client = relevant.client + if(our_client) + for(var/atom/movable/render_plane_relay/relay as anything in relays) + our_client.screen += relay + + return + show_to(relevant) diff --git a/code/_onclick/hud/rendering/plane_masters/plane_master_subtypes.dm b/code/_onclick/hud/rendering/plane_masters/plane_master_subtypes.dm new file mode 100644 index 00000000000000..63206afdaa9389 --- /dev/null +++ b/code/_onclick/hud/rendering/plane_masters/plane_master_subtypes.dm @@ -0,0 +1,424 @@ +/atom/movable/screen/plane_master/field_of_vision_blocker + name = "Field of vision blocker" + documentation = "This is one of those planes that's only used as a filter. It cuts out a portion of the game plate and does effects to it." + plane = FIELD_OF_VISION_BLOCKER_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + render_target = FIELD_OF_VISION_BLOCKER_RENDER_TARGET + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + render_relay_planes = list() + // We do NOT allow offsetting, because there's no case where you would want to block only one layer, at least currently + allows_offsetting = FALSE + // We mark as multiz_scaled FALSE so transforms don't effect us, and we draw to the planes below us as if they were us. + // This is safe because we will ALWAYS be on the top z layer, so it DON'T MATTER + multiz_scaled = FALSE + +/atom/movable/screen/plane_master/field_of_vision_blocker/show_to(mob/mymob) + . = ..() + if(!. || !mymob) + return . + RegisterSignal(mymob, SIGNAL_ADDTRAIT(TRAIT_FOV_APPLIED), PROC_REF(fov_enabled), override = TRUE) + RegisterSignal(mymob, SIGNAL_REMOVETRAIT(TRAIT_FOV_APPLIED), PROC_REF(fov_disabled), override = TRUE) + if(HAS_TRAIT(mymob, TRAIT_FOV_APPLIED)) + fov_enabled(mymob) + else + fov_disabled(mymob) + +/atom/movable/screen/plane_master/field_of_vision_blocker/proc/fov_enabled(mob/source) + SIGNAL_HANDLER + if(force_hidden == FALSE) + return + unhide_plane(source) + +/atom/movable/screen/plane_master/field_of_vision_blocker/proc/fov_disabled(mob/source) + SIGNAL_HANDLER + hide_plane(source) + +/atom/movable/screen/plane_master/clickcatcher + name = "Click Catcher" + documentation = "Contains the screen object we use as a backdrop to catch clicks on portions of the screen that would otherwise contain nothing else. \ +
Will always be below almost everything else" + plane = CLICKCATCHER_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + multiz_scaled = FALSE + critical = PLANE_CRITICAL_DISPLAY + +/atom/movable/screen/plane_master/clickcatcher/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) + . = ..() + RegisterSignal(SSmapping, COMSIG_PLANE_OFFSET_INCREASE, PROC_REF(offset_increased)) + offset_increased(SSmapping, 0, SSmapping.max_plane_offset) + +/atom/movable/screen/plane_master/clickcatcher/proc/offset_increased(datum/source, old_off, new_off) + SIGNAL_HANDLER + // We only want need the lowest level + // If my system better supported changing PM plane values mid op I'd do that, but I do NOT so + if(new_off > offset) + hide_plane(home?.our_hud?.mymob) + +/atom/movable/screen/plane_master/parallax_white + name = "Parallax whitifier" + documentation = "Essentially a backdrop for the parallax plane. We're rendered just below it, so we'll be multiplied by its well, parallax.\ +
If you want something to look as if it has parallax on it, draw it to this plane." + plane = PLANE_SPACE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + render_relay_planes = list(RENDER_PLANE_GAME, LIGHT_MASK_PLANE) + critical = PLANE_CRITICAL_FUCKO_PARALLAX // goes funny when touched. no idea why I don't trust byond + +/atom/movable/screen/plane_master/parallax_white/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) + . = ..() + add_relay_to(GET_NEW_PLANE(EMISSIVE_RENDER_PLATE, offset), relay_layer = EMISSIVE_SPACE_LAYER) + +///Contains space parallax +/atom/movable/screen/plane_master/parallax + name = "Parallax" + documentation = "Contains parallax, or to be more exact the screen objects that hold parallax.\ +
Note the BLEND_MULTIPLY. The trick here is how low our plane value is. Because of that, we draw below almost everything in the game.\ +
We abuse this to ensure we multiply against the Parallax whitifier plane, or space's plane. It's set to full white, so when you do the multiply you just get parallax out where it well, makes sense to be.\ +
Also notice that the parent parallax plane is mirrored down to all children. We want to support viewing parallax across all z levels at once." + plane = PLANE_SPACE_PARALLAX + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + blend_mode = BLEND_MULTIPLY + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + multiz_scaled = FALSE + +/atom/movable/screen/plane_master/parallax/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) + . = ..() + if(offset != 0) + // You aren't the source? don't change yourself + return + RegisterSignal(SSmapping, COMSIG_PLANE_OFFSET_INCREASE, PROC_REF(on_offset_increase)) + RegisterSignal(SSdcs, COMSIG_NARSIE_SUMMON_UPDATE, PROC_REF(narsie_modified)) + if(GLOB.narsie_summon_count >= 1) + narsie_start_midway(GLOB.narsie_effect_last_modified) // We assume we're on the start, so we can use this number + offset_increase(0, SSmapping.max_plane_offset) + +/atom/movable/screen/plane_master/parallax/proc/on_offset_increase(datum/source, old_offset, new_offset) + SIGNAL_HANDLER + offset_increase(old_offset, new_offset) + +/atom/movable/screen/plane_master/parallax/proc/offset_increase(old_offset, new_offset) + // Parallax will be mirrored down to any new planes that are added, so it will properly render across mirage borders + for(var/offset in old_offset to new_offset) + if(offset != 0) + // Overlay so we don't multiply twice, and thus fuck up our rendering + add_relay_to(GET_NEW_PLANE(plane, offset), BLEND_OVERLAY) + +// Hacky shit to ensure parallax works in perf mode +/atom/movable/screen/plane_master/parallax/outside_bounds(mob/relevant) + if(offset == 0) + remove_relay_from(GET_NEW_PLANE(RENDER_PLANE_GAME, 0)) + is_outside_bounds = TRUE // I'm sorry :( + return + // If we can't render, and we aren't the bottom layer, don't render us + // This way we only multiply against stuff that's not fullwhite space + var/atom/movable/screen/plane_master/parent_parallax = home.our_hud.get_plane_master(PLANE_SPACE_PARALLAX) + var/turf/viewing_turf = get_turf(relevant) + if(!viewing_turf || offset != GET_LOWEST_STACK_OFFSET(viewing_turf.z)) + parent_parallax.remove_relay_from(plane) + else + parent_parallax.add_relay_to(plane, BLEND_OVERLAY) + return ..() + +/atom/movable/screen/plane_master/parallax/inside_bounds(mob/relevant) + if(offset == 0) + add_relay_to(GET_NEW_PLANE(RENDER_PLANE_GAME, 0)) + is_outside_bounds = FALSE + return + // Always readd, just in case we lost it + var/atom/movable/screen/plane_master/parent_parallax = home.our_hud.get_plane_master(PLANE_SPACE_PARALLAX) + parent_parallax.add_relay_to(plane, BLEND_OVERLAY) + return ..() + +// Needs to handle rejoining on a lower z level, so we NEED to readd old planes +/atom/movable/screen/plane_master/parallax/check_outside_bounds() + // If we're outside bounds AND we're the 0th plane, we need to show cause parallax is hacked to hell + return offset != 0 && is_outside_bounds + +/// Starts the narsie animation midway, so we can catch up to everyone else quickly +/atom/movable/screen/plane_master/parallax/proc/narsie_start_midway(start_time) + var/time_elapsed = world.time - start_time + narsie_summoned_effect(max(16 SECONDS - time_elapsed, 0)) + +/// Starts the narsie animation, make us grey, then red +/atom/movable/screen/plane_master/parallax/proc/narsie_modified(datum/source, new_count) + SIGNAL_HANDLER + if(new_count >= 1) + narsie_summoned_effect(16 SECONDS) + else + narsie_unsummoned() + +/atom/movable/screen/plane_master/parallax/proc/narsie_summoned_effect(animate_time) + if(GLOB.narsie_summon_count >= 2) + var/static/list/nightmare_parallax = list(255,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, -130,0,0,0) + animate(src, color = nightmare_parallax, time = animate_time) + return + + var/static/list/grey_parallax = list(0.4,0.4,0.4,0, 0.4,0.4,0.4,0, 0.4,0.4,0.4,0, 0,0,0,1, -0.1,-0.1,-0.1,0) + // We're gonna animate ourselves grey + // Then, once it's done, about 40 seconds into the event itself, we're gonna start doin some shit. see below + animate(src, color = grey_parallax, time = animate_time) + +/atom/movable/screen/plane_master/parallax/proc/narsie_unsummoned() + animate(src, color = null, time = 8 SECONDS) + +/atom/movable/screen/plane_master/gravpulse + name = "Gravpulse" + documentation = "Ok so this one's fun. Basically, we want to be able to distort the game plane when a grav annom is around.\ +
So we draw the pattern we want to use to this plane, and it's then used as a render target by a distortion filter on the game plane.\ +
Note the blend mode and lack of relay targets. This plane exists only to distort, it's never rendered anywhere." + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + plane = GRAVITY_PULSE_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + blend_mode = BLEND_ADD + render_target = GRAVITY_PULSE_RENDER_TARGET + render_relay_planes = list() + +///Contains just the floor +/atom/movable/screen/plane_master/floor + name = "Floor" + documentation = "The well, floor. This is mostly used as a sorting mechanism, but it also lets us create a \"border\" around the game world plane, so its drop shadow will actually work." + plane = FLOOR_PLANE + render_relay_planes = list(RENDER_PLANE_GAME, LIGHT_MASK_PLANE) + +/atom/movable/screen/plane_master/transparent_floor + name = "Transparent Floor" + documentation = "Really just openspace, stuff that is a turf but has no color or alpha whatsoever.\ +
We use this to draw to just the light mask plane, cause if it's not there we get holes of blackness over openspace" + plane = TRANSPARENT_FLOOR_PLANE + render_relay_planes = list(LIGHT_MASK_PLANE) + // Needs to be critical or it uh, it'll look white + critical = PLANE_CRITICAL_DISPLAY|PLANE_CRITICAL_NO_RELAY + +/atom/movable/screen/plane_master/floor/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) + . = ..() + add_relay_to(GET_NEW_PLANE(EMISSIVE_RENDER_PLATE, offset), relay_layer = EMISSIVE_FLOOR_LAYER, relay_color = GLOB.em_block_color) + +/atom/movable/screen/plane_master/wall + name = "Wall" + documentation = "Holds all walls. We render this onto the game world. Separate so we can use this + space and floor planes as a guide for where byond blackness is NOT." + plane = WALL_PLANE + render_relay_planes = list(RENDER_PLANE_GAME_WORLD, LIGHT_MASK_PLANE) + +/atom/movable/screen/plane_master/wall/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) + . = ..() + add_relay_to(GET_NEW_PLANE(EMISSIVE_RENDER_PLATE, offset), relay_layer = EMISSIVE_WALL_LAYER, relay_color = GLOB.em_block_color) + +/atom/movable/screen/plane_master/game + name = "Game" + documentation = "Holds most non floor/wall things. Anything on this plane \"wants\" to interlayer depending on position." + plane = GAME_PLANE + render_relay_planes = list(RENDER_PLANE_GAME_WORLD) + +/atom/movable/screen/plane_master/game_world_above + name = "Upper Game" + documentation = "For stuff you want to draw like the game plane, but not ever below its contents" + plane = ABOVE_GAME_PLANE + render_relay_planes = list(RENDER_PLANE_GAME_WORLD) + +/atom/movable/screen/plane_master/seethrough + name = "Seethrough" + documentation = "Holds the seethrough versions (done using image overrides) of large objects. Mouse transparent, so you can click through them." + plane = SEETHROUGH_PLANE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + render_relay_planes = list(RENDER_PLANE_GAME_WORLD) + start_hidden = TRUE + +/** + * Plane master that byond will by default draw to + * Shouldn't be used, exists to prevent people using plane 0 + * NOTE: If we used SEE_BLACKNESS on a map format that wasn't SIDE_MAP, this is where its darkness would land + * This would allow us to control it and do fun things. But we can't because side map doesn't support it, so this is just a stub + */ +/atom/movable/screen/plane_master/default + name = "Default" + documentation = "This is quite fiddly, so bear with me. By default (in byond) everything in the game is rendered onto plane 0. It's the default plane. \ +
But, because we've moved everything we control off plane 0, all that's left is stuff byond internally renders. \ +
What I'd like to do with this is capture byond blackness by giving mobs the SEE_BLACKNESS sight flag. \ +
But we CAN'T because SEE_BLACKNESS does not work with our rendering format. So I just eat it I guess" + plane = DEFAULT_PLANE + multiz_scaled = FALSE + start_hidden = TRUE // Doesn't DO anything, exists to hold this place + +/atom/movable/screen/plane_master/area + name = "Area" + documentation = "Holds the areas themselves, which ends up meaning it holds any overlays/effects we apply to areas. NOT snow or rad storms, those go on above lighting" + plane = AREA_PLANE + +/atom/movable/screen/plane_master/massive_obj + name = "Massive object" + documentation = "Huge objects need to render above everything else on the game plane, otherwise they'd well, get clipped and look not that huge. This does that." + plane = MASSIVE_OBJ_PLANE + +/atom/movable/screen/plane_master/point + name = "Point" + documentation = "I mean like, what do you want me to say? Points draw over pretty much everything else, so they get their own plane. Remember we layer render relays to draw planes in their proper order on render plates." + plane = POINT_PLANE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + +///Contains all turf lighting +/atom/movable/screen/plane_master/turf_lighting + name = "Turf Lighting" + documentation = "Contains all lighting drawn to turfs. Not so complex, draws directly onto the lighting plate." + plane = LIGHTING_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + render_relay_planes = list(RENDER_PLANE_LIGHTING) + blend_mode_override = BLEND_ADD + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + critical = PLANE_CRITICAL_DISPLAY + +/// This will not work through multiz, because of a byond bug with BLEND_MULTIPLY +/// Bug report is up, waiting on a fix +/atom/movable/screen/plane_master/o_light_visual + name = "Overlight light visual" + documentation = "Holds overlay lighting objects, or the sort of lighting that's a well, overlay stuck to something.\ +
Exists because lighting updating is really slow, and movement needs to feel smooth.\ +
We draw to the game plane, and mask out space for ourselves on the lighting plane so any color we have has the chance to display." + plane = O_LIGHTING_VISUAL_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + render_target = O_LIGHTING_VISUAL_RENDER_TARGET + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + blend_mode = BLEND_MULTIPLY + critical = PLANE_CRITICAL_DISPLAY + +/atom/movable/screen/plane_master/above_lighting + name = "Above lighting" + plane = ABOVE_LIGHTING_PLANE + documentation = "Anything on the game plane that needs a space to draw on that will be above the lighting plane.\ +
Mostly little alerts and effects, also sometimes contains things that are meant to look as if they glow." + +/** + * Handles emissive overlays and emissive blockers. + */ +/atom/movable/screen/plane_master/emissive + name = "Emissive" + documentation = "Holds things that will be used to mask the lighting plane later on. Masked by the Emissive Mask plane to ensure we don't emiss out under a wall.\ +
Relayed onto the Emissive render plane to do the actual masking of lighting, since we need to be transformed and other emissive stuff needs to be transformed too.\ +
Don't want to double scale now." + plane = EMISSIVE_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + render_relay_planes = list(EMISSIVE_RENDER_PLATE) + critical = PLANE_CRITICAL_DISPLAY + +/atom/movable/screen/plane_master/pipecrawl + name = "Pipecrawl" + documentation = "Holds pipecrawl images generated during well, pipecrawling.\ +
Has a few effects and a funky color matrix designed to make things a bit more visually readable." + plane = PIPECRAWL_IMAGES_PLANE + start_hidden = TRUE + +/atom/movable/screen/plane_master/pipecrawl/Initialize(mapload, datum/hud/hud_owner) + . = ..() + // Makes everything on this plane slightly brighter + // Has a nice effect, makes thing stand out + color = list(1.2,0,0,0, 0,1.2,0,0, 0,0,1.2,0, 0,0,0,1, 0,0,0,0) + // This serves a similar purpose, I want the pipes to pop + add_filter("pipe_dropshadow", 1, drop_shadow_filter(x = -1, y= -1, size = 1, color = "#0000007A")) + mirror_parent_hidden() + +/atom/movable/screen/plane_master/camera_static + name = "Camera static" + documentation = "Holds camera static images. Usually only visible to people who can well, see static.\ +
We use images rather then vis contents because they're lighter on maptick, and maptick sucks butt." + plane = CAMERA_STATIC_PLANE + +/atom/movable/screen/plane_master/camera_static/show_to(mob/mymob) + . = ..() + if(!.) + return + var/datum/hud/our_hud = home.our_hud + if(isnull(our_hud)) + return + + // We'll hide the slate if we're not seeing through a camera eye + // This can call on a cycle cause we don't clear in hide_from + // Yes this is the best way of hooking into the hud, I hate myself too + RegisterSignal(our_hud, COMSIG_HUD_EYE_CHANGED, PROC_REF(eye_changed), override = TRUE) + eye_changed(our_hud, null, our_hud.mymob?.canon_client?.eye) + +/atom/movable/screen/plane_master/camera_static/proc/eye_changed(datum/hud/source, atom/old_eye, atom/new_eye) + SIGNAL_HANDLER + + if(!isaicamera(new_eye)) + if(!force_hidden) + hide_plane(source.mymob) + return + + if(force_hidden) + unhide_plane(source.mymob) + +/atom/movable/screen/plane_master/high_game + name = "High Game" + documentation = "Holds anything that wants to be displayed above the rest of the game plane, and doesn't want to be clickable. \ +
This includes atmos debug overlays, blind sound images, and mining scanners. \ +
Really only exists for its layering potential, we don't use this for any vfx" + plane = HIGH_GAME_PLANE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + +/atom/movable/screen/plane_master/ghost + name = "Ghost" + documentation = "Ghosts draw here, so they don't get mixed up in the visuals of the game world. Note, this is not not how we HIDE ghosts from people, that's done with invisible and see_invisible." + plane = GHOST_PLANE + render_relay_planes = list(RENDER_PLANE_NON_GAME) + +/atom/movable/screen/plane_master/fullscreen + name = "Fullscreen" + documentation = "Holds anything that applies to or above the full screen. \ +
Note, it's still rendered underneath hud objects, but this lets us control the order that things like death/damage effects render in." + plane = FULLSCREEN_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + render_relay_planes = list(RENDER_PLANE_NON_GAME) + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + allows_offsetting = FALSE + +/atom/movable/screen/plane_master/runechat + name = "Runechat" + documentation = "Holds runechat images, that text that pops up when someone say something. Uses a dropshadow to well, look nice." + plane = RUNECHAT_PLANE + render_relay_planes = list(RENDER_PLANE_NON_GAME) + +/atom/movable/screen/plane_master/runechat/show_to(mob/mymob) + . = ..() + if(!.) + return + remove_filter("AO") + if(istype(mymob) && mymob.canon_client?.prefs?.read_preference(/datum/preference/toggle/ambient_occlusion)) + add_filter("AO", 1, drop_shadow_filter(x = 0, y = -2, size = 4, color = "#04080FAA")) + +/atom/movable/screen/plane_master/balloon_chat + name = "Balloon chat" + documentation = "Holds ballon chat images, those little text bars that pop up for a second when you do some things. NOT runechat." + plane = BALLOON_CHAT_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + render_relay_planes = list(RENDER_PLANE_NON_GAME) + +/atom/movable/screen/plane_master/hud + name = "HUD" + documentation = "Contains anything that want to be rendered on the hud. Typically is just screen elements." + plane = HUD_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + render_relay_planes = list(RENDER_PLANE_NON_GAME) + allows_offsetting = FALSE + +/atom/movable/screen/plane_master/above_hud + name = "Above HUD" + documentation = "Anything that wants to be drawn ABOVE the rest of the hud. Typically close buttons and other elements that need to be always visible. Think preventing draggable action button memes." + plane = ABOVE_HUD_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + render_relay_planes = list(RENDER_PLANE_NON_GAME) + allows_offsetting = FALSE + +/atom/movable/screen/plane_master/splashscreen + name = "Splashscreen" + documentation = "Cinematics and the splash screen." + plane = SPLASHSCREEN_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + render_relay_planes = list(RENDER_PLANE_NON_GAME) + allows_offsetting = FALSE + +/atom/movable/screen/plane_master/escape_menu + name = "Escape Menu" + documentation = "Anything relating to the escape menu." + plane = ESCAPE_MENU_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + render_relay_planes = list(RENDER_PLANE_MASTER) + allows_offsetting = FALSE diff --git a/code/_onclick/hud/rendering/render_plate.dm b/code/_onclick/hud/rendering/render_plate.dm index 02c43d347674fa..f3d838f8594bf5 100644 --- a/code/_onclick/hud/rendering/render_plate.dm +++ b/code/_onclick/hud/rendering/render_plate.dm @@ -72,7 +72,8 @@ /atom/movable/screen/plane_master/rendering_plate/game_plate name = "Game rendering plate" documentation = "Holds all objects that are ahhh, in character? is maybe the best way to describe it.\ -
We apply a displacement effect from the gravity pulse plane too, so we can warp the game world." +
We apply a displacement effect from the gravity pulse plane too, so we can warp the game world.\ +
If we have fov enabled we'll relay this onto two different rendering plates to apply fov effects to only a portion. If not, we just draw straight to master" plane = RENDER_PLANE_GAME render_relay_planes = list(RENDER_PLANE_MASTER) @@ -84,6 +85,97 @@ // We're basically using alpha as better constant here btw add_filter("spook_color", 2, color_matrix_filter(list(0.75,0.13,0.13,0, 0.13,0.7,0.13,0, 0.13,0.13,0.75,0, -0.06,-0.09,-0.08,1, 0,0,0,0))) +/atom/movable/screen/plane_master/rendering_plate/game_plate/show_to(mob/mymob) + . = ..() + if(!. || !mymob) + return . + RegisterSignal(mymob, SIGNAL_ADDTRAIT(TRAIT_FOV_APPLIED), PROC_REF(fov_enabled), override = TRUE) + RegisterSignal(mymob, SIGNAL_REMOVETRAIT(TRAIT_FOV_APPLIED), PROC_REF(fov_disabled), override = TRUE) + if(HAS_TRAIT(mymob, TRAIT_FOV_APPLIED)) + fov_enabled(mymob) + else + fov_disabled(mymob) + +/atom/movable/screen/plane_master/rendering_plate/game_plate/proc/fov_enabled(mob/source) + SIGNAL_HANDLER + add_relay_to(GET_NEW_PLANE(RENDER_PLANE_GAME_UNMASKED, offset)) + add_relay_to(GET_NEW_PLANE(RENDER_PLANE_GAME_MASKED, offset)) + remove_relay_from(GET_NEW_PLANE(RENDER_PLANE_MASTER, offset)) + +/atom/movable/screen/plane_master/rendering_plate/game_plate/proc/fov_disabled(mob/source) + SIGNAL_HANDLER + remove_relay_from(GET_NEW_PLANE(RENDER_PLANE_GAME_UNMASKED, offset)) + remove_relay_from(GET_NEW_PLANE(RENDER_PLANE_GAME_MASKED, offset)) + add_relay_to(GET_NEW_PLANE(RENDER_PLANE_MASTER, offset)) + +///renders the parts of the plate unmasked by fov +/atom/movable/screen/plane_master/rendering_plate/unmasked_game_plate + name = "Unmasked Game rendering plate" + documentation = "Holds the bits of the game plate that aren't impacted by fov.\ +
We use an alpha mask to cut out the bits we plan on dealing with elsewhere" + plane = RENDER_PLANE_GAME_UNMASKED + render_relay_planes = list(RENDER_PLANE_MASTER) + +/atom/movable/screen/plane_master/rendering_plate/unmasked_game_plate/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) + . = ..() + add_filter("fov_handled", 1, alpha_mask_filter(render_source = OFFSET_RENDER_TARGET(FIELD_OF_VISION_BLOCKER_RENDER_TARGET, offset), flags = MASK_INVERSE)) + +/atom/movable/screen/plane_master/rendering_plate/unmasked_game_plate/show_to(mob/mymob) + . = ..() + if(!. || !mymob) + return . + RegisterSignal(mymob, SIGNAL_ADDTRAIT(TRAIT_FOV_APPLIED), PROC_REF(fov_enabled), override = TRUE) + RegisterSignal(mymob, SIGNAL_REMOVETRAIT(TRAIT_FOV_APPLIED), PROC_REF(fov_disabled), override = TRUE) + if(HAS_TRAIT(mymob, TRAIT_FOV_APPLIED)) + fov_enabled(mymob) + else + fov_disabled(mymob) + +/atom/movable/screen/plane_master/rendering_plate/unmasked_game_plate/proc/fov_enabled(mob/source) + SIGNAL_HANDLER + if(force_hidden == FALSE) + return + unhide_plane(source) + +/atom/movable/screen/plane_master/rendering_plate/unmasked_game_plate/proc/fov_disabled(mob/source) + SIGNAL_HANDLER + hide_plane(source) + +///renders the parts of the plate masked by fov +/atom/movable/screen/plane_master/rendering_plate/masked_game_plate + name = "FOV Game rendering plate" + documentation = "Contains the bits of the game plate that are hidden by some form of fov\ +
Applies a color matrix to dim and create contrast, alongside a blur. Goal is only half being able to see stuff" + plane = RENDER_PLANE_GAME_MASKED + render_relay_planes = list(RENDER_PLANE_MASTER) + +/atom/movable/screen/plane_master/rendering_plate/masked_game_plate/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) + . = ..() + add_filter("fov_blur", 1, gauss_blur_filter(1.8)) + add_filter("fov_handled_space", 2, alpha_mask_filter(render_source = OFFSET_RENDER_TARGET(FIELD_OF_VISION_BLOCKER_RENDER_TARGET, offset))) + add_filter("fov_matrix", 3, color_matrix_filter(list(0.5,-0.15,-0.15,0, -0.15,0.5,-0.15,0, -0.15,-0.15,0.5,0, 0,0,0,1, 0,0,0,0))) + +/atom/movable/screen/plane_master/rendering_plate/masked_game_plate/show_to(mob/mymob) + . = ..() + if(!. || !mymob) + return . + RegisterSignal(mymob, SIGNAL_ADDTRAIT(TRAIT_FOV_APPLIED), PROC_REF(fov_enabled), override = TRUE) + RegisterSignal(mymob, SIGNAL_REMOVETRAIT(TRAIT_FOV_APPLIED), PROC_REF(fov_disabled), override = TRUE) + if(HAS_TRAIT(mymob, TRAIT_FOV_APPLIED)) + fov_enabled(mymob) + else + fov_disabled(mymob) + +/atom/movable/screen/plane_master/rendering_plate/masked_game_plate/proc/fov_enabled(mob/source) + SIGNAL_HANDLER + if(force_hidden == FALSE) + return + unhide_plane(source) + +/atom/movable/screen/plane_master/rendering_plate/masked_game_plate/proc/fov_disabled(mob/source) + SIGNAL_HANDLER + hide_plane(source) + // Blackness renders weird when you view down openspace, because of transforms and borders and such // This is a consequence of not using lummy's grouped transparency, but I couldn't get that to work without totally fucking up // Sight flags, and shooting vis_contents usage to the moon. So we're doin it different. @@ -293,7 +385,6 @@ plane = RENDER_PLANE_NON_GAME render_relay_planes = list(RENDER_PLANE_MASTER) - /** * Plane master proc called in Initialize() that creates relay objects, and sets them uo as needed * Sets: @@ -305,7 +396,7 @@ * Other vars such as alpha will automatically be applied with the render source */ /atom/movable/screen/plane_master/proc/generate_render_relays() - var/relay_loc = "CENTER" + var/relay_loc = home?.relay_loc || "CENTER" // If we're using a submap (say for a popup window) make sure we draw onto it if(home?.map) relay_loc = "[home.map]:[relay_loc]" diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index a87014a49d353e..372a32b3c68782 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -15,8 +15,8 @@ animate_movement = SLIDE_STEPS speech_span = SPAN_ROBOT appearance_flags = APPEARANCE_UI - /// A reference to the object in the slot. Grabs or items, generally. - var/obj/master = null + /// A reference to the object in the slot. Grabs or items, generally, but any datum will do. + var/datum/weakref/master_ref = null /// A reference to the owner HUD, if any. VAR_PRIVATE/datum/hud/hud = null /** @@ -42,7 +42,7 @@ hud = hud_owner /atom/movable/screen/Destroy() - master = null + master_ref = null hud = null return ..() @@ -249,10 +249,12 @@ /atom/movable/screen/close/Initialize(mapload, datum/hud/hud_owner, new_master) . = ..() - master = new_master + master_ref = WEAKREF(new_master) /atom/movable/screen/close/Click() - var/datum/storage/storage = master + var/datum/storage/storage = master_ref?.resolve() + if(!storage) + return storage.hide_contents(usr) return TRUE @@ -394,10 +396,10 @@ /atom/movable/screen/storage/Initialize(mapload, datum/hud/hud_owner, new_master) . = ..() - master = new_master + master_ref = WEAKREF(new_master) /atom/movable/screen/storage/Click(location, control, params) - var/datum/storage/storage_master = master + var/datum/storage/storage_master = master_ref?.resolve() if(!istype(storage_master)) return FALSE @@ -632,7 +634,7 @@ var/client/holder INITIALIZE_IMMEDIATE(/atom/movable/screen/splash) -/* SKYRAT EDIT REMOVAL +/* NOVA EDIT REMOVAL /atom/movable/screen/splash/Initialize(mapload, datum/hud/hud_owner, client/C, visible, use_previous_title) . = ..() if(!istype(C)) @@ -652,7 +654,7 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/splash) icon = SStitle.previous_icon holder.screen += src -*/ // SKYRAT EDIT END +*/ // NOVA EDIT END /atom/movable/screen/splash/proc/Fade(out, qdel_after = TRUE) if(QDELETED(src)) return diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index b3d15e0c476665..0e37a2f0c9563f 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -2,16 +2,20 @@ * This is the proc that handles the order of an item_attack. * * The order of procs called is: - * * [/atom/proc/tool_act] on the target. If it returns TOOL_ACT_TOOLTYPE_SUCCESS or TOOL_ACT_SIGNAL_BLOCKING, the chain will be stopped. + * * [/atom/proc/tool_act] on the target. If it returns ITEM_INTERACT_SUCCESS or ITEM_INTERACT_BLOCKING, the chain will be stopped. * * [/obj/item/proc/pre_attack] on src. If this returns TRUE, the chain will be stopped. * * [/atom/proc/attackby] on the target. If it returns TRUE, the chain will be stopped. * * [/obj/item/proc/afterattack]. The return value does not matter. */ /obj/item/proc/melee_attack_chain(mob/user, atom/target, params) - var/is_right_clicking = LAZYACCESS(params2list(params), RIGHT_CLICK) + var/list/modifiers = params2list(params) + var/is_right_clicking = LAZYACCESS(modifiers, RIGHT_CLICK) - if(tool_behaviour && (target.tool_act(user, src, tool_behaviour, is_right_clicking) & TOOL_ACT_MELEE_CHAIN_BLOCKING)) + var/item_interact_result = target.item_interaction(user, src, modifiers, is_right_clicking) + if(item_interact_result & ITEM_INTERACT_SUCCESS) return TRUE + if(item_interact_result & ITEM_INTERACT_BLOCKING) + return FALSE var/pre_attack_result if (is_right_clicking) @@ -153,12 +157,34 @@ return SECONDARY_ATTACK_CALL_NORMAL /obj/attackby(obj/item/attacking_item, mob/user, params) - return ..() || ((obj_flags & CAN_BE_HIT) && attacking_item.attack_atom(src, user, params)) - -/mob/living/attackby(obj/item/attacking_item, mob/living/user, params) - if(can_perform_surgery(user, params)) + if(..()) return TRUE + if(!(obj_flags & CAN_BE_HIT)) + return FALSE + return attacking_item.attack_atom(src, user, params) + +/mob/living/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) + // Surgery and such happens very high up in the interaction chain, before parent call + var/attempt_tending = item_tending(user, tool, modifiers) + if(attempt_tending & ITEM_INTERACT_ANY_BLOCKER) + return attempt_tending + + return ..() | attempt_tending + +/// Handles any use of using a surgical tool or item on a mob to tend to them. +/// The sole reason this is a separate proc is so carbons can tend wounds AFTER the check for surgery. +/mob/living/proc/item_tending(mob/living/user, obj/item/tool, list/modifiers) + for(var/datum/surgery/operation as anything in surgeries) + if(IS_IN_INVALID_SURGICAL_POSITION(src, operation)) + continue + if(!(operation.surgery_flags & SURGERY_SELF_OPERABLE) && (user == src)) + continue + if(operation.next_step(user, modifiers)) + return ITEM_INTERACT_SUCCESS + + return NONE +/mob/living/attackby(obj/item/attacking_item, mob/living/user, params) if(..()) return TRUE user.changeNext_move(attacking_item.attack_speed) @@ -257,32 +283,154 @@ CRASH("areas are NOT supposed to have attacked_by() called on them!") /mob/living/attacked_by(obj/item/attacking_item, mob/living/user) - send_item_attack_message(attacking_item, user) - if(!attacking_item.force) - return FALSE + + var/targeting = check_zone(user.zone_selected) + if(user != src) + var/zone_hit_chance = 80 + if(body_position == LYING_DOWN) + zone_hit_chance += 10 + targeting = get_random_valid_zone(targeting, zone_hit_chance) + var/targeting_human_readable = parse_zone(targeting) + + send_item_attack_message(attacking_item, user, targeting_human_readable, targeting) + + var/armor_block = min(run_armor_check( + def_zone = targeting, + attack_flag = MELEE, + absorb_text = span_notice("Your armor has protected your [targeting_human_readable]!"), + soften_text = span_warning("Your armor has softened a hit to your [targeting_human_readable]!"), + armour_penetration = attacking_item.armour_penetration, + weak_against_armour = attacking_item.weak_against_armour, + ), ARMOR_MAX_BLOCK) + var/damage = attacking_item.force if(mob_biotypes & MOB_ROBOTIC) damage *= attacking_item.demolition_mod - apply_damage(damage, attacking_item.damtype, attacking_item = attacking_item) - if(attacking_item.damtype == BRUTE && prob(33)) + + var/wounding = attacking_item.wound_bonus + if((attacking_item.item_flags & SURGICAL_TOOL) && !user.combat_mode && body_position == LYING_DOWN && (LAZYLEN(surgeries) > 0)) + wounding = CANT_WOUND + + if(user != src) + // This doesn't factor in armor, or most damage modifiers (physiology). Your mileage may vary + if(check_block(attacking_item, damage, "the [attacking_item.name]", MELEE_ATTACK, attacking_item.armour_penetration, attacking_item.damtype)) + return FALSE + + SEND_SIGNAL(attacking_item, COMSIG_ITEM_ATTACK_ZONE, src, user, targeting) + + if(damage <= 0) + return FALSE + + if(ishuman(src) || client) // istype(src) is kinda bad, but it's to avoid spamming the blackbox + SSblackbox.record_feedback("nested tally", "item_used_for_combat", 1, list("[attacking_item.force]", "[attacking_item.type]")) + SSblackbox.record_feedback("tally", "zone_targeted", 1, targeting_human_readable) + + var/damage_done = apply_damage( + damage = damage, + damagetype = attacking_item.damtype, + def_zone = targeting, + blocked = armor_block, + wound_bonus = wounding, + bare_wound_bonus = attacking_item.bare_wound_bonus, + sharpness = attacking_item.get_sharpness(), + attack_direction = get_dir(user, src), + attacking_item = attacking_item, + ) + + attack_effects(damage_done, targeting, armor_block, attacking_item, user) + + return TRUE + +/** + * Called when we take damage, used to cause effects such as a blood splatter. + * + * Return TRUE if an effect was done, FALSE otherwise. + */ +/mob/living/proc/attack_effects(damage_done, hit_zone, armor_block, obj/item/attacking_item, mob/living/attacker) + if(damage_done > 0 && attacking_item.damtype == BRUTE && prob(25 + damage_done * 2)) attacking_item.add_mob_blood(src) - var/turf/location = get_turf(src) - add_splatter_floor(location) - if(get_dist(user, src) <= 1) //people with TK won't get smeared with blood - user.add_mob_blood(src) - return TRUE //successful attack - -/mob/living/simple_animal/attacked_by(obj/item/I, mob/living/user) - if(!attack_threshold_check(I.force, I.damtype, MELEE, FALSE)) - playsound(loc, 'sound/weapons/tap.ogg', I.get_clamped_volume(), TRUE, -1) - else - return ..() + add_splatter_floor(get_turf(src)) + if(get_dist(attacker, src) <= 1) + attacker.add_mob_blood(src) + return TRUE -/mob/living/basic/attacked_by(obj/item/I, mob/living/user) - if(!attack_threshold_check(I.force, I.damtype, MELEE, FALSE)) - playsound(loc, 'sound/weapons/tap.ogg', I.get_clamped_volume(), TRUE, -1) - else - return ..() + return FALSE + +/mob/living/silicon/robot/attack_effects(damage_done, hit_zone, armor_block, obj/item/attacking_item, mob/living/attacker) + if(damage_done > 0 && attacking_item.damtype != STAMINA && stat != DEAD) + spark_system.start() + . = TRUE + return ..() || . + +/mob/living/silicon/ai/attack_effects(damage_done, hit_zone, armor_block, obj/item/attacking_item, mob/living/attacker) + if(damage_done > 0 && attacking_item.damtype != STAMINA && stat != DEAD) + spark_system.start() + . = TRUE + return ..() || . + +/mob/living/carbon/attack_effects(damage_done, hit_zone, armor_block, obj/item/attacking_item, mob/living/attacker) + var/obj/item/bodypart/hit_bodypart = get_bodypart(hit_zone) || bodyparts[1] + if(!hit_bodypart.can_bleed()) + return FALSE + + return ..() + +/mob/living/carbon/human/attack_effects(damage_done, hit_zone, armor_block, obj/item/attacking_item, mob/living/attacker) + . = ..() + switch(hit_zone) + if(BODY_ZONE_HEAD) + if(.) + if(wear_mask) + wear_mask.add_mob_blood(src) + update_worn_mask() + if(head) + head.add_mob_blood(src) + update_worn_head() + if(glasses && prob(33)) + glasses.add_mob_blood(src) + update_worn_glasses() + + if(!attacking_item.get_sharpness() && armor_block < 50) + if(prob(damage_done)) + adjustOrganLoss(ORGAN_SLOT_BRAIN, 20) + if(stat == CONSCIOUS) + visible_message( + span_danger("[src] is knocked senseless!"), + span_userdanger("You're knocked senseless!"), + ) + set_confusion_if_lower(20 SECONDS) + adjust_eye_blur(20 SECONDS) + if(prob(10)) + gain_trauma(/datum/brain_trauma/mild/concussion) + else + adjustOrganLoss(ORGAN_SLOT_BRAIN, damage_done * 0.2) + + // rev deconversion through blunt trauma. + // this can be signalized to the rev datum + if(mind && stat == CONSCIOUS && src != attacker && prob(damage_done + ((maxHealth - health) * 0.5))) // NOVA EDIT CHANGE - ORIGINAL : if(mind && stat == CONSCIOUS && src != attacker && prob(damage_done + ((100 - health) * 0.5))) + var/datum/antagonist/rev/rev = mind.has_antag_datum(/datum/antagonist/rev) + rev?.remove_revolutionary(attacker) + + if(BODY_ZONE_CHEST) + if(.) + if(wear_suit) + wear_suit.add_mob_blood(src) + update_worn_oversuit() + if(w_uniform) + w_uniform.add_mob_blood(src) + update_worn_undersuit() + + if(stat == CONSCIOUS && !attacking_item.get_sharpness() && armor_block < 50) + if(prob(damage_done)) + visible_message( + span_danger("[src] is knocked down!"), + span_userdanger("You're knocked down!"), + ) + apply_effect(6 SECONDS, EFFECT_KNOCKDOWN, armor_block) + + // Triggers force say events + if(damage_done > 10 || (damage_done >= 5 && prob(33))) + force_say() /** * Last proc in the [/obj/item/proc/melee_attack_chain]. @@ -335,7 +483,7 @@ else return clamp(w_class * 6, 10, 100) // Multiply the item's weight class by 6, then clamp the value between 10 and 100 -/mob/living/proc/send_item_attack_message(obj/item/I, mob/living/user, hit_area, obj/item/bodypart/hit_bodypart) +/mob/living/proc/send_item_attack_message(obj/item/I, mob/living/user, hit_area, def_zone) if(!I.force && !length(I.attack_verb_simple) && !length(I.attack_verb_continuous)) return var/message_verb_continuous = length(I.attack_verb_continuous) ? "[pick(I.attack_verb_continuous)]" : "attacks" diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 46ca2f53904e83..04bbc048e66a6b 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -11,6 +11,8 @@ /** * Checks if this mob is in a valid state to punch someone. + * + * (Potentially) gives feedback to the mob if they cannot. */ /mob/living/proc/can_unarmed_attack() return !HAS_TRAIT(src, TRAIT_HANDS_BLOCKED) @@ -34,7 +36,7 @@ /mob/living/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) // The sole reason for this signal needing to exist is making FotNS incompatible with Hulk. // Note that it is send before [proc/can_unarmed_attack] is called, keep this in mind. - var/sigreturn = SEND_SIGNAL(src, COMSIG_LIVING_EARLY_UNARMED_ATTACK, attack_target, modifiers) + var/sigreturn = SEND_SIGNAL(src, COMSIG_LIVING_EARLY_UNARMED_ATTACK, attack_target, proximity_flag, modifiers) if(sigreturn & COMPONENT_CANCEL_ATTACK_CHAIN) return TRUE if(sigreturn & COMPONENT_SKIP_ATTACK) @@ -169,6 +171,9 @@ /mob/living/proc/resolve_right_click_attack(atom/target, list/modifiers) return target.attack_animal_secondary(src, modifiers) +/** + * Called when a simple animal is unarmed attacking / clicking on this atom. + */ /atom/proc/attack_animal(mob/user, list/modifiers) SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_ANIMAL, user) @@ -234,31 +239,6 @@ /atom/proc/attack_larva_secondary(mob/user, list/modifiers) 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/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index 3de27ee7e10e9c..c0ef2b6001f445 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -110,6 +110,8 @@ /obj/item/tk_grab/Destroy() STOP_PROCESSING(SSfastprocess, src) + if(!QDELETED(focus)) + REMOVE_TRAIT(focus, TRAIT_TELEKINESIS_CONTROLLED, REF(tk_user)) focus = null tk_user = null return ..() @@ -259,6 +261,7 @@ if(!check_if_focusable(target)) return focus = target + ADD_TRAIT(focus, TRAIT_TELEKINESIS_CONTROLLED, REF(tk_user)) update_appearance() apply_focus_overlay() return TRUE diff --git a/code/controllers/admin.dm b/code/controllers/admin.dm index 1105a5c693fc12..421712d5ad4545 100644 --- a/code/controllers/admin.dm +++ b/code/controllers/admin.dm @@ -56,10 +56,10 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick) switch(controller) if("Master") Recreate_MC() - SSblackbox.record_feedback("tally", "admin_verb", 1, "Restart Master Controller") + BLACKBOX_LOG_ADMIN_VERB("Restart Master Controller") if("Failsafe") new /datum/controller/failsafe() - SSblackbox.record_feedback("tally", "admin_verb", 1, "Restart Failsafe Controller") + BLACKBOX_LOG_ADMIN_VERB("Restart Failsafe Controller") message_admins("Admin [key_name_admin(usr)] has restarted the [controller] controller.") @@ -87,5 +87,5 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick) return debug_variables(controller) - SSblackbox.record_feedback("tally", "admin_verb", 1, "Restart Failsafe Controller") + BLACKBOX_LOG_ADMIN_VERB("Debug Controller") message_admins("Admin [key_name_admin(usr)] is debugging the [controller] controller.") diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm index 10c6cc4284fd0c..a59b386090f539 100644 --- a/code/controllers/configuration/configuration.dm +++ b/code/controllers/configuration/configuration.dm @@ -104,10 +104,10 @@ if(CONFIG_GET(flag/usewhitelist)) load_whitelist() - // SKYRAT EDIT ADDITION START + // NOVA EDIT ADDITION START populate_interaction_instances() remove_erp_things() - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END loaded = TRUE diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index 16791b7fd7e623..d3c86fa602eda6 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -115,7 +115,7 @@ /// log attack messages /datum/config_entry/flag/log_attack -/datum/config_entry/flag/log_subtler // log subtler emotes //SKYRAT EDIT ADDITION +/datum/config_entry/flag/log_subtler // log subtler emotes //NOVA EDIT ADDITION /datum/config_entry/flag/log_econ // log economy actions @@ -317,7 +317,7 @@ /datum/config_entry/string/banappeals /datum/config_entry/string/wikiurl - default = "https://wiki.skyrat13.tk/w/index.php" //SKYRAT EDIT - Original: "http://www.tgstation13.org/wiki" + default = "https://wiki.novasector13.com/index.php" //NOVA EDIT - Original: "http://www.tgstation13.org/wiki" /datum/config_entry/string/forumurl default = "http://tgstation13.org/phpBB/index.php" diff --git a/code/controllers/globals.dm b/code/controllers/globals.dm index 72b00c7d868b70..a3520ab1ee3744 100644 --- a/code/controllers/globals.dm +++ b/code/controllers/globals.dm @@ -14,7 +14,14 @@ GLOBAL_REAL(GLOB, /datum/controller/global_vars) GLOB = src var/datum/controller/exclude_these = new - gvars_datum_in_built_vars = exclude_these.vars + list(NAMEOF(src, gvars_datum_protected_varlist), NAMEOF(src, gvars_datum_in_built_vars), NAMEOF(src, gvars_datum_init_order)) + // I know this is dumb but the nested vars list hangs a ref to the datum. This fixes that + 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 MIN_COMPILER_VERSION >= 515 && MIN_COMPILER_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/master.dm b/code/controllers/master.dm index da98580d5e05e0..ce660ff512beb9 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -216,7 +216,7 @@ GLOBAL_REAL(Master, /datum/controller/master) init_stage_completed = 0 var/mc_started = FALSE - add_startup_message("Initializing subsystems...") //SKYRAT EDIT CHANGE - Custom HTML Lobby Screen + add_startup_message("Initializing subsystems...") //NOVA EDIT CHANGE - Custom HTML Lobby Screen var/list/stage_sorted_subsystems = new(INITSTAGE_MAX) for (var/i in 1 to INITSTAGE_MAX) @@ -250,7 +250,7 @@ GLOBAL_REAL(Master, /datum/controller/master) SetRunLevel(1) // Intentionally not using the defines here because the MC doesn't care about them // Loop. Master.StartProcessing(0) - add_startup_message("Clearing clutter...") //SKYRAT EDIT ADDITION + add_startup_message("Clearing clutter...") //NOVA EDIT ADDITION var/time = (REALTIMEOFDAY - start_timeofday) / 10 @@ -349,12 +349,12 @@ GLOBAL_REAL(Master, /datum/controller/master) chat_warning = TRUE var/message = "[message_prefix] [seconds] second[seconds == 1 ? "" : "s"]!" - // SKYRAT EDIT REMOVAL BEGIN -- chat_message not used anymore due to change below + // NOVA EDIT REMOVAL BEGIN -- chat_message not used anymore due to change below // var/chat_message = chat_warning ? span_boldwarning(message) : span_boldannounce(message) - // SKYRAT EDIT REMOVAL END + // NOVA EDIT REMOVAL END if(result != SS_INIT_NO_MESSAGE) - add_startup_message(message, chat_warning) //SKYRAT EDIT CHANGE - ORIGINAL: to_chat(world, chat_message) + add_startup_message(message, chat_warning) //NOVA EDIT CHANGE - ORIGINAL: to_chat(world, chat_message) log_world(message) /datum/controller/master/proc/SetRunLevel(new_runlevel) diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm index 953cbd3bd4cc4a..916bbed6e4e1d0 100644 --- a/code/controllers/subsystem/atoms.dm +++ b/code/controllers/subsystem/atoms.dm @@ -183,7 +183,7 @@ SUBSYSTEM_DEF(atoms) if(fails & BAD_INIT_NO_HINT) . += "- Didn't return an Initialize hint\n" if(fails & BAD_INIT_QDEL_BEFORE) - . += "- Qdel'd in New()\n" + . += "- Qdel'd before Initialize proc ran\n" if(fails & BAD_INIT_SLEPT) . += "- Slept during Initialize()\n" diff --git a/code/controllers/subsystem/blackbox.dm b/code/controllers/subsystem/blackbox.dm index 4ec7e807d5904a..b4a2bfe7526396 100644 --- a/code/controllers/subsystem/blackbox.dm +++ b/code/controllers/subsystem/blackbox.dm @@ -44,14 +44,14 @@ SUBSYSTEM_DEF(blackbox) return var/playercount = LAZYLEN(GLOB.player_list) var/admincount = GLOB.admins.len - var/datum/db_query/query_record_playercount = SSdbcore.NewQuery(/* SKYRAT EDIT CHANGE - MULTISERVER */{" + var/datum/db_query/query_record_playercount = SSdbcore.NewQuery(/* NOVA EDIT CHANGE - MULTISERVER */{" INSERT INTO [format_table_name("legacy_population")] (playercount, admincount, time, server_name, server_ip, server_port, round_id) VALUES (:playercount, :admincount, :time, :server_name, INET_ATON(:server_ip), :server_port, :round_id) "}, list( "playercount" = playercount, "admincount" = admincount, "time" = SQLtime(), - "server_name" = CONFIG_GET(string/serversqlname), // SKYRAT EDIT ADDITION - MULTISERVER + "server_name" = CONFIG_GET(string/serversqlname), // NOVA EDIT ADDITION - MULTISERVER "server_ip" = world.internet_address || "0", "server_port" = "[world.port]", "round_id" = GLOB.round_id, @@ -117,7 +117,7 @@ SUBSYSTEM_DEF(blackbox) if (!length(sqlrowlist)) return - SSdbcore.MassInsert(format_table_name("feedback"), sqlrowlist, ignore_errors = TRUE, delayed = TRUE, special_columns = special_columns) + SSdbcore.MassInsert(format_table_name("feedback"), sqlrowlist, ignore_errors = TRUE, special_columns = special_columns) /datum/controller/subsystem/blackbox/proc/Seal() if(sealed) @@ -330,14 +330,14 @@ Versioning first_death["role"] = null first_death["role"] = L.mind.assigned_role.title first_death["area"] = "[AREACOORD(L)]" - first_death["damage"] = "[L.getBruteLoss()]/[L.getFireLoss()]/[L.getToxLoss()]/[L.getOxyLoss()]/[L.getCloneLoss()]" + first_death["damage"] = "[L.getBruteLoss()]/[L.getFireLoss()]/[L.getToxLoss()]/[L.getOxyLoss()]" first_death["last_words"] = L.last_words if(!SSdbcore.Connect()) return - var/datum/db_query/query_report_death = SSdbcore.NewQuery(/* SKYRAT EDIT CHANGE - MULTISERVER */{" - INSERT INTO [format_table_name("death")] (pod, x_coord, y_coord, z_coord, mapname, server_name, server_ip, server_port, round_id, tod, job, special, name, byondkey, laname, lakey, bruteloss, fireloss, brainloss, oxyloss, toxloss, cloneloss, staminaloss, last_words, suicide) + var/datum/db_query/query_report_death = SSdbcore.NewQuery(/* NOVA EDIT CHANGE - MULTISERVER */{" + INSERT INTO [format_table_name("death")] (pod, x_coord, y_coord, z_coord, mapname, server_name, server_ip, server_port, round_id, tod, job, special, name, byondkey, laname, lakey, bruteloss, fireloss, brainloss, oxyloss, toxloss, staminaloss, last_words, suicide) VALUES (:pod, :x_coord, :y_coord, :z_coord, :map, :server_name, INET_ATON(:internet_address), :port, :round_id, :time, :job, :special, :name, :key, :laname, :lakey, :brute, :fire, :brain, :oxy, :tox, :clone, :stamina, :last_words, :suicide) "}, list( "name" = L.real_name, @@ -352,7 +352,6 @@ Versioning "brain" = L.get_organ_loss(ORGAN_SLOT_BRAIN) || BRAIN_DAMAGE_DEATH, //get_organ_loss returns null without a brain but a value is required for this column "oxy" = L.getOxyLoss(), "tox" = L.getToxLoss(), - "clone" = L.getCloneLoss(), "stamina" = L.getStaminaLoss(), "x_coord" = L.x, "y_coord" = L.y, @@ -360,7 +359,7 @@ Versioning "last_words" = L.last_words, "suicide" = did_they_suicide, "map" = SSmapping.config.map_name, - "server_name" = CONFIG_GET(string/serversqlname), // SKYRAT EDIT ADDITION - MULTISERVER + "server_name" = CONFIG_GET(string/serversqlname), // NOVA EDIT ADDITION - MULTISERVER "internet_address" = world.internet_address || "0", "port" = "[world.port]", "round_id" = GLOB.round_id, diff --git a/code/controllers/subsystem/chat.dm b/code/controllers/subsystem/chat.dm index ddcdf8674136c8..f93ab6e09f6b4a 100644 --- a/code/controllers/subsystem/chat.dm +++ b/code/controllers/subsystem/chat.dm @@ -5,39 +5,94 @@ SUBSYSTEM_DEF(chat) name = "Chat" - flags = SS_TICKER + flags = SS_TICKER|SS_NO_INIT wait = 1 priority = FIRE_PRIORITY_CHAT init_order = INIT_ORDER_CHAT - var/list/payload_by_client = list() + /// Assosciates a ckey with a list of messages to send to them. + var/list/list/datum/chat_payload/client_to_payloads = list() -/datum/controller/subsystem/chat/Initialize() - // Just used by chat system to know that initialization is nearly finished. - // The to_chat checks could probably check the runlevel instead, but would require testing. - return SS_INIT_SUCCESS + /// Associates a ckey with an assosciative list of their last CHAT_RELIABILITY_HISTORY_SIZE messages. + var/list/list/datum/chat_payload/client_to_reliability_history = list() + + /// Assosciates a ckey with their next sequence number. + var/list/client_to_sequence_number = list() + +/datum/controller/subsystem/chat/proc/generate_payload(client/target, message_data) + var/sequence = client_to_sequence_number[target.ckey] + client_to_sequence_number[target.ckey] += 1 + + var/datum/chat_payload/payload = new + payload.sequence = sequence + payload.content = message_data + + if(!(target.ckey in client_to_reliability_history)) + client_to_reliability_history[target.ckey] = list() + var/list/client_history = client_to_reliability_history[target.ckey] + client_history["[sequence]"] = payload + + if(length(client_history) > CHAT_RELIABILITY_HISTORY_SIZE) + var/oldest = text2num(client_history[1]) + for(var/index in 2 to length(client_history)) + var/test = text2num(client_history[index]) + if(test < oldest) + oldest = test + client_history -= "[oldest]" + return payload + +/datum/controller/subsystem/chat/proc/send_payload_to_client(client/target, datum/chat_payload/payload) + target.tgui_panel.window.send_message("chat/message", payload.into_message()) + SEND_TEXT(target, payload.get_content_as_html()) /datum/controller/subsystem/chat/fire() - for(var/key in payload_by_client) - var/client/client = key - var/payload = payload_by_client[key] - payload_by_client -= key - if(client) - // Send to tgchat - client.tgui_panel?.window.send_message("chat/message", payload) - // Send to old chat - for(var/message in payload) - SEND_TEXT(client, message_to_html(message)) + for(var/ckey in client_to_payloads) + var/client/target = GLOB.directory[ckey] + if(isnull(target)) // verify client still exists + LAZYREMOVE(client_to_payloads, ckey) + continue + + for(var/datum/chat_payload/payload as anything in client_to_payloads[ckey]) + send_payload_to_client(target, payload) + LAZYREMOVE(client_to_payloads, ckey) + if(MC_TICK_CHECK) return -/datum/controller/subsystem/chat/proc/queue(target, message) - if(islist(target)) - for(var/_target in target) - var/client/client = CLIENT_FROM_VAR(_target) - if(client) - LAZYADD(payload_by_client[client], list(message)) +/datum/controller/subsystem/chat/proc/queue(queue_target, list/message_data) + var/list/targets = islist(queue_target) ? queue_target : list(queue_target) + for(var/target in targets) + var/client/client = CLIENT_FROM_VAR(target) + if(isnull(client)) + continue + LAZYADDASSOCLIST(client_to_payloads, client.ckey, generate_payload(client, message_data)) + +/datum/controller/subsystem/chat/proc/send_immediate(send_target, list/message_data) + var/list/targets = islist(send_target) ? send_target : list(send_target) + for(var/target in targets) + var/client/client = CLIENT_FROM_VAR(target) + if(isnull(client)) + continue + send_payload_to_client(client, generate_payload(client, message_data)) + +/datum/controller/subsystem/chat/proc/handle_resend(client/client, sequence) + var/list/client_history = client_to_reliability_history[client.ckey] + sequence = "[sequence]" + if(isnull(client_history) || !(sequence in client_history)) return - var/client/client = CLIENT_FROM_VAR(target) - if(client) - LAZYADD(payload_by_client[client], list(message)) + + var/datum/chat_payload/payload = client_history[sequence] + if(payload.resends > CHAT_RELIABILITY_MAX_RESENDS) + return // we tried but byond said no + + payload.resends += 1 + send_payload_to_client(client, client_history[sequence]) + SSblackbox.record_feedback( + "nested tally", + "chat_resend_byond_version", + 1, + list( + "[client.byond_version]", + "[client.byond_build]", + ), + ) diff --git a/code/controllers/subsystem/circuit_component.dm b/code/controllers/subsystem/circuit_component.dm index 3ef1be5a3aa322..bae302ed9d0a3c 100644 --- a/code/controllers/subsystem/circuit_component.dm +++ b/code/controllers/subsystem/circuit_component.dm @@ -39,7 +39,7 @@ SUBSYSTEM_DEF(circuit_component) * Those that registered first will be executed first and those registered last will be executed last. */ /datum/controller/subsystem/circuit_component/proc/add_callback(datum/port/input, datum/callback/to_call) - if(instant_run_tick == world.time && (TICK_USAGE - instant_run_start_cpu_usage) < instant_run_max_cpu_usage) + if(instant_run_tick == world.time && (TICK_USAGE - instant_run_start_cpu_usage) <= instant_run_max_cpu_usage) instant_run_callbacks_to_run += to_call return @@ -80,7 +80,7 @@ SUBSYSTEM_DEF(circuit_component) else instant_run_tick = 0 - if((TICK_USAGE - instant_run_start_cpu_usage) < instant_run_max_cpu_usage) + if((TICK_USAGE - instant_run_start_cpu_usage) <= instant_run_max_cpu_usage) return received_inputs else return null diff --git a/code/controllers/subsystem/communications.dm b/code/controllers/subsystem/communications.dm index 3ad52bbf150ce0..dfdeea26962025 100644 --- a/code/controllers/subsystem/communications.dm +++ b/code/controllers/subsystem/communications.dm @@ -40,7 +40,7 @@ SUBSYSTEM_DEF(communications) if(syndicate) priority_announce(html_decode(message_data["message"]), null, 'sound/misc/announce_syndi.ogg', ANNOUNCEMENT_TYPE_SYNDICATE, has_important_message = TRUE, players = players, color_override = "red") else - priority_announce(html_decode(message_data["message"]), null, ANNOUNCER_CAPTAIN, ANNOUNCEMENT_TYPE_CAPTAIN, has_important_message = TRUE, players = players) // SKYRAT EDIT CHANGE - 'sound/misc/announce.ogg' to ANNOUNCER_CAPTAIN + priority_announce(html_decode(message_data["message"]), null, ANNOUNCER_CAPTAIN, ANNOUNCEMENT_TYPE_CAPTAIN, has_important_message = TRUE, players = players) // NOVA EDIT CHANGE - 'sound/misc/announce.ogg' to ANNOUNCER_CAPTAIN COOLDOWN_START(src, nonsilicon_message_cooldown, COMMUNICATION_COOLDOWN) user.log_talk(input, LOG_SAY, tag="priority announcement") message_admins("[ADMIN_LOOKUPFLW(user)] has made a priority announcement.") diff --git a/code/controllers/subsystem/dbcore.dm b/code/controllers/subsystem/dbcore.dm index 2f2675ede7ed7e..56fd25f2f73d6f 100644 --- a/code/controllers/subsystem/dbcore.dm +++ b/code/controllers/subsystem/dbcore.dm @@ -186,10 +186,10 @@ SUBSYSTEM_DEF(dbcore) UNTIL(query.process()) queries_active -= query - // SKYRAT EDIT START - SQL-based logging + // NOVA EDIT START - SQL-based logging for(var/table in queued_log_entries_by_table) - MassInsert(table, rows = queued_log_entries_by_table[table], duplicate_key = FALSE, ignore_errors = FALSE, delayed = FALSE, warn = FALSE, async = TRUE, special_columns = null) - // SKYRAT EDIT END + MassInsert(table, rows = queued_log_entries_by_table[table], duplicate_key = FALSE, ignore_errors = FALSE, warn = FALSE, async = TRUE, special_columns = null) + // NOVA EDIT END var/datum/db_query/query_round_shutdown = SSdbcore.NewQuery( "UPDATE [format_table_name("round")] SET shutdown_datetime = Now(), end_state = :end_state WHERE id = :round_id", @@ -303,9 +303,9 @@ SUBSYSTEM_DEF(dbcore) if(!Connect()) return - var/datum/db_query/query_round_initialize = SSdbcore.NewQuery(/* SKYRAT EDIT CHANGE - MULTISERVER */ + var/datum/db_query/query_round_initialize = SSdbcore.NewQuery(/* NOVA EDIT CHANGE - MULTISERVER */ "INSERT INTO [format_table_name("round")] (initialize_datetime, server_name, server_ip, server_port) VALUES (Now(), :server_name, INET_ATON(:internet_address), :port)", - list("server_name" = CONFIG_GET(string/serversqlname), "internet_address" = world.internet_address || "0", "port" = "[world.port]") // SKYRAT EDIT CHANGE - MULTISERVER + list("server_name" = CONFIG_GET(string/serversqlname), "internet_address" = world.internet_address || "0", "port" = "[world.port]") // NOVA EDIT CHANGE - MULTISERVER ) query_round_initialize.Execute(async = FALSE) GLOB.round_id = "[query_round_initialize.last_insert_id]" @@ -404,11 +404,8 @@ The duplicate_key arg can be true to automatically generate this part of the que or set to a string that is appended to the end of the query Ignore_errors instructes mysql to continue inserting rows if some of them have errors. the erroneous row(s) aren't inserted and there isn't really any way to know why or why errored -Delayed insert mode was removed in mysql 7 and only works with MyISAM type tables, - It was included because it is still supported in mariadb. - It does not work with duplicate_key and the mysql server ignores it in those cases */ -/datum/controller/subsystem/dbcore/proc/MassInsert(table, list/rows, duplicate_key = FALSE, ignore_errors = FALSE, delayed = FALSE, warn = FALSE, async = TRUE, special_columns = null) +/datum/controller/subsystem/dbcore/proc/MassInsert(table, list/rows, duplicate_key = FALSE, ignore_errors = FALSE, warn = FALSE, async = TRUE, special_columns = null) if (!table || !rows || !istype(rows)) return @@ -425,8 +422,6 @@ Delayed insert mode was removed in mysql 7 and only works with MyISAM type table // Prepare SQL query full of placeholders var/list/query_parts = list("INSERT") - if (delayed) - query_parts += " DELAYED" if (ignore_errors) query_parts += " IGNORE" query_parts += " INTO " diff --git a/code/controllers/subsystem/dynamic/dynamic.dm b/code/controllers/subsystem/dynamic/dynamic.dm new file mode 100644 index 00000000000000..fd6a5ecf9a5475 --- /dev/null +++ b/code/controllers/subsystem/dynamic/dynamic.dm @@ -0,0 +1,1066 @@ +#define FAKE_GREENSHIFT_FORM_CHANCE 15 +#define FAKE_REPORT_CHANCE 8 +#define PULSAR_REPORT_CHANCE 8 +#define REPORT_NEG_DIVERGENCE -15 +#define REPORT_POS_DIVERGENCE 15 + +// Are HIGH_IMPACT_RULESETs allowed to stack? +GLOBAL_VAR_INIT(dynamic_no_stacking, TRUE) +// If enabled does not accept or execute any rulesets. +GLOBAL_VAR_INIT(dynamic_forced_extended, FALSE) +// How high threat is required for HIGH_IMPACT_RULESETs stacking. +// This is independent of dynamic_no_stacking. +GLOBAL_VAR_INIT(dynamic_stacking_limit, 90) +// List of forced roundstart rulesets. +GLOBAL_LIST_EMPTY(dynamic_forced_roundstart_ruleset) +// Forced threat level, setting this to zero or higher forces the roundstart threat to the value. +GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) +/// Modify the threat level for station traits before dynamic can be Initialized. List(instance = threat_reduction) +GLOBAL_LIST_EMPTY(dynamic_station_traits) +/// Rulesets which have been forcibly enabled or disabled +GLOBAL_LIST_EMPTY(dynamic_forced_rulesets) + +SUBSYSTEM_DEF(dynamic) + name = "Dynamic" + flags = SS_NO_INIT + wait = 1 SECONDS + + // Threat logging vars + /// The "threat cap", threat shouldn't normally go above this and is used in ruleset calculations + var/threat_level = 0 + + /// Set at the beginning of the round. Spent by the mode to "purchase" rules. Everything else goes in the postround budget. + var/round_start_budget = 0 + + /// Set at the beginning of the round. Spent by midrounds and latejoins. + var/mid_round_budget = 0 + + /// The initial round start budget for logging purposes, set once at the beginning of the round. + var/initial_round_start_budget = 0 + + /// Running information about the threat. Can store text or datum entries. + var/list/threat_log = list() + /// Threat log shown on the roundend report. Should only list player-made edits. + var/list/roundend_threat_log = list() + /// List of latejoin rules used for selecting the rules. + var/list/latejoin_rules + /// List of midround rules used for selecting the rules. + var/list/midround_rules + /** # Pop range per requirement. + * If the value is five the range is: + * 0-4, 5-9, 10-14, 15-19, 20-24, 25-29, 30-34, 35-39, 40-54, 45+ + * If it is six the range is: + * 0-5, 6-11, 12-17, 18-23, 24-29, 30-35, 36-41, 42-47, 48-53, 54+ + * If it is seven the range is: + * 0-6, 7-13, 14-20, 21-27, 28-34, 35-41, 42-48, 49-55, 56-62, 63+ + */ + var/pop_per_requirement = 6 + /// Number of players who were ready on roundstart. + var/roundstart_pop_ready = 0 + /// List of candidates used on roundstart rulesets. + var/list/candidates = list() + /// Rules that are processed, rule_process is called on the rules in this list. + var/list/current_rules = list() + /// List of executed rulesets. + var/list/executed_rules = list() + /// If TRUE, the next player to latejoin will guarantee roll for a random latejoin antag + /// (this does not guarantee they get said antag roll, depending on preferences and circumstances) + var/forced_injection = FALSE + /// Forced ruleset to be executed for the next latejoin. + var/datum/dynamic_ruleset/latejoin/forced_latejoin_rule = null + /// How many percent of the rounds are more peaceful. + var/peaceful_percentage = 50 + /// If a high impact ruleset was executed. Only one will run at a time in most circumstances. + var/high_impact_ruleset_executed = FALSE + /// If a only ruleset has been executed. + var/only_ruleset_executed = FALSE + /// Dynamic configuration, loaded on pre_setup + var/list/configuration = null + + /// When world.time is over this number the mode tries to inject a latejoin ruleset. + var/latejoin_injection_cooldown = 0 + + /// The minimum time the recurring latejoin ruleset timer is allowed to be. + var/latejoin_delay_min = (5 MINUTES) + + /// The maximum time the recurring latejoin ruleset timer is allowed to be. + var/latejoin_delay_max = (25 MINUTES) + + /// The low bound for the midround roll time splits. + /// This number influences where to place midround rolls, making this smaller + /// will make midround rolls more frequent, and vice versa. + /// A midround will never be able to roll before this. + var/midround_lower_bound = 10 MINUTES + + /// The upper bound for the midround roll time splits. + /// This number influences where to place midround rolls, making this larger + /// will make midround rolls less frequent, and vice versa. + /// A midround will never be able to roll farther than this. + var/midround_upper_bound = 100 MINUTES + + /// The distance between the chosen midround roll point (which is deterministic), + /// and when it can actually roll. + /// Basically, if this is set to 5 minutes, and a midround roll point is decided to be at 20 minutes, + /// then it can roll anywhere between 15 and 25 minutes. + var/midround_roll_distance = 3 MINUTES + + /// The amount of threat per midround roll. + /// Basically, if this is set to 5, then for every 5 threat, one midround roll will be added. + /// The equation this is used in rounds up, meaning that if this is set to 5, and you have 6 + /// threat, then you will get 2 midround rolls. + var/threat_per_midround_roll = 7 + + /// A number between -5 and +5. + /// A negative value will give a more peaceful round and + /// a positive value will give a round with higher threat. + var/threat_curve_centre = 0 + + /// A number between 0.5 and 4. + /// Higher value will favour extreme rounds and + /// lower value rounds closer to the average. + var/threat_curve_width = 1.8 + + /// A number between -5 and +5. + /// Equivalent to threat_curve_centre, but for the budget split. + /// A negative value will weigh towards midround rulesets, and a positive + /// value will weight towards roundstart ones. + var/roundstart_split_curve_centre = 1 + + /// A number between 0.5 and 4. + /// Equivalent to threat_curve_width, but for the budget split. + /// Higher value will favour more variance in splits and + /// lower value rounds closer to the average. + var/roundstart_split_curve_width = 1.8 + + /// The minimum amount of time for antag random events to be hijacked. + var/random_event_hijack_minimum = 10 MINUTES + + /// The maximum amount of time for antag random events to be hijacked. + var/random_event_hijack_maximum = 18 MINUTES + + /// What is the lower bound of when the roundstart annoucement is sent out? + var/waittime_l = 600 + + /// What is the higher bound of when the roundstart annoucement is sent out? + var/waittime_h = 1800 + + /// A number between 0 and 100. The maximum amount of threat allowed to generate. + var/max_threat_level = 100 + + /// The extra chance multiplier that a heavy impact midround ruleset will run next time. + /// For example, if this is set to 50, then the next heavy roll will be about 50% more likely to happen. + var/hijacked_random_event_injection_chance_modifier = 50 + + /// Any midround before this point is guaranteed to be light + var/midround_light_upper_bound = 25 MINUTES + + /// Any midround after this point is guaranteed to be heavy + var/midround_heavy_lower_bound = 55 MINUTES + + /// If there are less than this many players readied, threat level will be lowered. + /// This number should be kept fairly low, as there are other measures that population + /// impacts Dynamic, such as the requirements variable on rulesets. + var/low_pop_player_threshold = 20 + + /// The maximum threat that can roll with *zero* players. + /// As the number of players approaches `low_pop_player_threshold`, the maximum + /// threat level will increase. + /// For example, if `low_pop_maximum_threat` is 50, `low_pop_player_threshold` is 20, + /// and the number of readied players is 10, then the highest threat that can roll is + /// lerp(50, 100, 10 / 20), AKA 75. + var/low_pop_maximum_threat = 40 + + /// The chance for latejoins to roll when ready + var/latejoin_roll_chance = 50 + + // == EVERYTHING BELOW THIS POINT SHOULD NOT BE CONFIGURED == + + /// A list of recorded "snapshots" of the round, stored in the dynamic.json log + var/list/datum/dynamic_snapshot/snapshots + + /// The time when the last midround injection was attempted, whether or not it was successful + var/last_midround_injection_attempt = 0 + + /// Whether or not a random event has been hijacked this midround cycle + var/random_event_hijacked = HIJACKED_NOTHING + + /// The timer ID for the cancellable midround rule injection + var/midround_injection_timer_id + + /// The last drafted midround rulesets (without the current one included). + /// Used for choosing different midround injections. + var/list/current_midround_rulesets + + /// The amount of threat shown on the piece of paper. + /// Can differ from the actual threat amount. + var/shown_threat + + VAR_PRIVATE/next_midround_injection + +/datum/controller/subsystem/dynamic/proc/admin_panel() + var/list/dat = list("Game Mode Panel

Game Mode Panel

") + dat += "Dynamic Mode \[VV\] \[Refresh\]
" + dat += "Threat Level: [threat_level]
" + dat += "Budgets (Roundstart/Midrounds): [initial_round_start_budget]/[threat_level - initial_round_start_budget]
" + + dat += "Midround budget to spend: [mid_round_budget] \[Adjust\] \[View Log\]
" + dat += "
" + dat += "Parameters: centre = [threat_curve_centre] ; width = [threat_curve_width].
" + dat += "Split parameters: centre = [roundstart_split_curve_centre] ; width = [roundstart_split_curve_width].
" + dat += "On average, [clamp(peaceful_percentage, 1, 99)]% of the rounds are more peaceful.
" + dat += "Forced extended: [GLOB.dynamic_forced_extended ? "On" : "Off"]
" + dat += "No stacking (only one round-ender): [GLOB.dynamic_no_stacking ? "On" : "Off"]
" + dat += "Stacking limit: [GLOB.dynamic_stacking_limit] \[Adjust\]" + dat += "
" + dat += "\[Force Next Latejoin Ruleset\]
" + if (forced_latejoin_rule) + dat += {"-> [forced_latejoin_rule.name] <-
"} + dat += "\[Execute Midround Ruleset\]
" + dat += "
" + dat += "Executed rulesets: " + if (executed_rules.len > 0) + dat += "
" + for (var/datum/dynamic_ruleset/DR in executed_rules) + dat += "[DR.ruletype] - [DR.name]
" + else + dat += "none.
" + dat += "
Injection Timers: ([get_heavy_midround_injection_chance(dry_run = TRUE)]% heavy midround chance)
" + dat += "Latejoin: [DisplayTimeText(latejoin_injection_cooldown-world.time)] \[Now!\]
" + + var/next_injection = next_midround_injection() + if (next_injection == INFINITY) + dat += "All midrounds have been exhausted." + else + dat += "Midround: [DisplayTimeText(next_injection - world.time)] \[Now!\]
" + + usr << browse(dat.Join(), "window=gamemode_panel;size=500x500") + +/datum/controller/subsystem/dynamic/Topic(href, href_list) + if (..()) // Sanity, maybe ? + return + if(!check_rights(R_ADMIN)) + message_admins("[usr.key] has attempted to override the game mode panel!") + log_admin("[key_name(usr)] tried to use the game mode panel without authorization.") + return + if (href_list["forced_extended"]) + GLOB.dynamic_forced_extended = !GLOB.dynamic_forced_extended + else if (href_list["no_stacking"]) + GLOB.dynamic_no_stacking = !GLOB.dynamic_no_stacking + else if (href_list["adjustthreat"]) + var/threatadd = input("Specify how much threat to add (negative to subtract). This can inflate the threat level.", "Adjust Threat", 0) as null|num + if(!threatadd) + return + if(threatadd > 0) + create_threat(threatadd, threat_log, "[worldtime2text()]: increased by [key_name(usr)]") + else + spend_midround_budget(-threatadd, threat_log, "[worldtime2text()]: decreased by [key_name(usr)]") + else if (href_list["injectlate"]) + latejoin_injection_cooldown = 0 + forced_injection = TRUE + message_admins("[key_name(usr)] forced a latejoin injection.") + else if (href_list["injectmid"]) + forced_injection = TRUE + message_admins("[key_name(usr)] forced a midround injection.") + try_midround_roll() + else if (href_list["threatlog"]) + show_threatlog(usr) + else if (href_list["stacking_limit"]) + GLOB.dynamic_stacking_limit = input(usr,"Change the threat limit at which round-endings rulesets will start to stack.", "Change stacking limit", null) as num + else if(href_list["force_latejoin_rule"]) + var/added_rule = input(usr,"What ruleset do you want to force upon the next latejoiner? This will bypass threat level and population restrictions.", "Rigging Latejoin", null) as null|anything in sort_names(init_rulesets(/datum/dynamic_ruleset/latejoin)) + if (!added_rule) + return + forced_latejoin_rule = added_rule + log_admin("[key_name(usr)] set [added_rule] to proc on the next latejoin.") + message_admins("[key_name(usr)] set [added_rule] to proc on the next valid latejoin.") + else if(href_list["clear_forced_latejoin"]) + forced_latejoin_rule = null + log_admin("[key_name(usr)] cleared the forced latejoin ruleset.") + message_admins("[key_name(usr)] cleared the forced latejoin ruleset.") + else if(href_list["force_midround_rule"]) + var/added_rule = input(usr,"What ruleset do you want to force right now? This will bypass threat level and population restrictions.", "Execute Ruleset", null) as null|anything in sort_names(init_rulesets(/datum/dynamic_ruleset/midround)) + if (!added_rule) + return + log_admin("[key_name(usr)] executed the [added_rule] ruleset.") + message_admins("[key_name(usr)] executed the [added_rule] ruleset.") + picking_specific_rule(added_rule, TRUE) + else if(href_list["cancelmidround"]) + admin_cancel_midround(usr, href_list["cancelmidround"]) + return + else if (href_list["differentmidround"]) + admin_different_midround(usr, href_list["differentmidround"]) + return + + admin_panel() // Refreshes the window + +// Set result and news report here +/datum/controller/subsystem/dynamic/proc/set_round_result() + // If it got to this part, just pick one high impact ruleset if it exists + for(var/datum/dynamic_ruleset/rule in executed_rules) + if(rule.flags & HIGH_IMPACT_RULESET) + rule.round_result() + // One was set, so we're done here + if(SSticker.news_report) + return + + SSticker.mode_result = "undefined" + + // Something nuked the station - it wasn't nuke ops (they set their own via their rulset) + if(GLOB.station_was_nuked) + SSticker.news_report = STATION_NUKED + + if(SSsupermatter_cascade.cascade_initiated) + SSticker.news_report = SUPERMATTER_CASCADE + + // Only show this one if we have nothing better to show + if(EMERGENCY_ESCAPED_OR_ENDGAMED && !SSticker.news_report) + SSticker.news_report = SSshuttle.emergency?.is_hijacked() ? SHUTTLE_HIJACK : STATION_EVACUATED + +/datum/controller/subsystem/dynamic/proc/send_intercept() + if(SScommunications.block_command_report) //If we don't want the report to be printed just yet, we put it off until it's ready + addtimer(CALLBACK(src, PROC_REF(send_intercept)), 10 SECONDS) + return + + . = "Nanotrasen Department of Intelligence Threat Advisory, Spinward Sector, TCD [time2text(world.realtime, "DDD, MMM DD")], [CURRENT_STATION_YEAR]:
" + . += generate_advisory_level() + + var/min_threat = 100 + for(var/datum/dynamic_ruleset/ruleset as anything in init_rulesets(/datum/dynamic_ruleset)) + if(ruleset.weight <= 0 || ruleset.cost <= 0) + continue + min_threat = min(ruleset.cost, min_threat) + var/greenshift = GLOB.dynamic_forced_extended || (threat_level < min_threat && shown_threat < min_threat) //if both shown and real threat are below any ruleset, its extended time + + generate_station_goals(greenshift ? INFINITY : CONFIG_GET(number/station_goal_budget)) + + if (GLOB.station_goals.len > 0) + var/list/texts = list("
Special Orders for [station_name()]:
") + for(var/datum/station_goal/station_goal as anything in GLOB.station_goals) + station_goal.on_report() + texts += station_goal.get_report() + + . += texts.Join("
") + + var/list/trait_list_strings = list() + for(var/datum/station_trait/station_trait as anything in SSstation.station_traits) + if(!station_trait.show_in_report) + continue + trait_list_strings += "[station_trait.get_report()]
" + if(trait_list_strings.len > 0) + . += "
Identified shift divergencies:
" + trait_list_strings.Join() + + if(length(SScommunications.command_report_footnotes)) + var/footnote_pile = "" + + for(var/datum/command_footnote/footnote in SScommunications.command_report_footnotes) + footnote_pile += "[footnote.message]
" + footnote_pile += "[footnote.signature]
" + footnote_pile += "
" + + . += "
Additional Notes:

" + footnote_pile + + 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(), color_override = "green") + else + if(SSsecurity_level.get_current_level_as_number() < 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) + + return . + +/// Generate the advisory level depending on the shown threat level. +/datum/controller/subsystem/dynamic/proc/generate_advisory_level() + var/advisory_string = "" + if (prob(PULSAR_REPORT_CHANCE)) + if(HAS_TRAIT(SSstation, STATION_TRAIT_BANANIUM_SHIPMENTS)) + advisory_string += "Advisory Level: Clown Planet
" + advisory_string += "Your sector's advisory level is Clown Planet! Our bike horns have picked up on a large bananium stash. Clowns show a large influx of clowns on your station. We highly advice you to slip any threats to keep Honkotrasen assets within the Banana Sector. The Department advises defending chemistry from any clowns that are trying to make baldium or space lube." + return advisory_string + + advisory_string += "Advisory Level: Pulsar Star
" + advisory_string += "Your sector's advisory level is Pulsar Star. A large unknown electromagnetic field has stormed through nearby surveillance equipment. No surveillance data has been able to be obtained showing no credible threats to Nanotrasen assets within the Spinward Sector. The Department advises maintaining high alert against potential threats, regardless of a lack of information." + return advisory_string + + switch(round(shown_threat)) + if(0) + advisory_string += "Advisory Level: White Dwarf
" + advisory_string += "Your sector's advisory level is White Dwarf. Our surveillors have ruled out any and all potential risks known in our database, ruling out the loss of our assets in the Spinward Sector. We advise a lower level of security, alongside distributing ressources on potential profit." + if(1 to 19) + var/show_core_territory = (GLOB.current_living_antags.len > 0) + if (prob(FAKE_GREENSHIFT_FORM_CHANCE)) + show_core_territory = !show_core_territory + + if (show_core_territory) + advisory_string += "Advisory Level: Blue Star
" + advisory_string += "Your sector's advisory level is Blue Star. At this threat advisory, the risk of attacks on Nanotrasen assets within the sector is minor, but cannot be ruled out entirely. Remain vigilant." + else + advisory_string += "Advisory Level: Green Star
" + advisory_string += "Your sector's advisory level is Green Star. Surveillance information shows no credible threats to Nanotrasen assets within the Spinward Sector at this time. As always, the Department advises maintaining vigilance against potential threats, regardless of a lack of known threats." + if(20 to 39) + advisory_string += "Advisory Level: Yellow Star
" + advisory_string += "Your sector's advisory level is Yellow Star. Surveillance shows a credible risk of enemy attack against our assets in the Spinward Sector. We advise a heightened level of security, alongside maintaining vigilance against potential threats." + if(40 to 65) + advisory_string += "Advisory Level: Orange Star
" + advisory_string += "Your sector's advisory level is Orange Star. Upon reviewing your sector's intelligence, the Department has determined that the risk of enemy activity is moderate to severe. At this advisory, we recommend maintaining a higher degree of security and alertness, and vigilance against threats that may (or will) arise." + if(66 to 79) + advisory_string += "Advisory Level: Red Star
" + advisory_string += "Your sector's advisory level is Red Star. The Department of Intelligence has decrypted Cybersun communications suggesting a high likelihood of attacks on Nanotrasen assets within the Spinward Sector. Stations in the region are advised to remain highly vigilant for signs of enemy activity and to be on high alert." + if(80 to 99) + advisory_string += "Advisory Level: Black Orbit
" + advisory_string += "Your sector's advisory level is Black Orbit. Your sector's local comms network is currently undergoing a blackout, and we are therefore unable to accurately judge enemy movements within the region. However, information passed to us by GDI suggests a high amount of enemy activity in the sector, indicative of an impending attack. Remain on high alert, and as always, we advise remaining vigilant against any other potential threats." + if(100) + advisory_string += "Advisory Level: Midnight Sun
" + advisory_string += "Your sector's advisory level is Midnight Sun. Credible information passed to us by GDI suggests that the Syndicate is preparing to mount a major concerted offensive on Nanotrasen assets in the Spinward Sector to cripple our foothold there. All stations should remain on high alert and prepared to defend themselves." + + return advisory_string + +/datum/controller/subsystem/dynamic/proc/show_threatlog(mob/admin) + if(!SSticker.HasRoundStarted()) + tgui_alert(usr, "The round hasn't started yet!") + return + + if(!check_rights(R_ADMIN)) + return + + var/list/out = list("Threat LogThreat Log
Starting Threat: [threat_level]
") + + for(var/entry in threat_log) + if(istext(entry)) + out += "[entry]
" + + out += "Remaining threat/threat_level: [mid_round_budget]/[threat_level]" + + usr << browse(out.Join(), "window=threatlog;size=700x500") + +/// Generates the threat level using lorentz distribution and assigns peaceful_percentage. +/datum/controller/subsystem/dynamic/proc/generate_threat() + // At lower pop levels we run a Liner Interpolation against the max threat based proportionally on the number + // of players ready. This creates a balanced lorentz curve within a smaller range than 0 to max_threat_level. + var/calculated_max_threat = (SSticker.totalPlayersReady < low_pop_player_threshold) ? LERP(low_pop_maximum_threat, max_threat_level, SSticker.totalPlayersReady / low_pop_player_threshold) : max_threat_level + log_dynamic("Calculated maximum threat level based on player count of [SSticker.totalPlayersReady]: [calculated_max_threat]") + + threat_level = lorentz_to_amount(threat_curve_centre, threat_curve_width, calculated_max_threat) + + for(var/datum/station_trait/station_trait in GLOB.dynamic_station_traits) + threat_level = max(threat_level - GLOB.dynamic_station_traits[station_trait], 0) + log_dynamic("Threat reduced by [GLOB.dynamic_station_traits[station_trait]]. Source: [type].") + + peaceful_percentage = (threat_level/max_threat_level)*100 + +/// Generates the midround and roundstart budgets +/datum/controller/subsystem/dynamic/proc/generate_budgets() + round_start_budget = lorentz_to_amount(roundstart_split_curve_centre, roundstart_split_curve_width, threat_level, 0.1) + initial_round_start_budget = round_start_budget + mid_round_budget = threat_level - round_start_budget + +/datum/controller/subsystem/dynamic/proc/setup_parameters() + log_dynamic("Dynamic mode parameters for the round:") + log_dynamic("Centre is [threat_curve_centre], Width is [threat_curve_width], Forced extended is [GLOB.dynamic_forced_extended ? "Enabled" : "Disabled"], No stacking is [GLOB.dynamic_no_stacking ? "Enabled" : "Disabled"].") + log_dynamic("Stacking limit is [GLOB.dynamic_stacking_limit].") + if(GLOB.dynamic_forced_threat_level >= 0) + threat_level = round(GLOB.dynamic_forced_threat_level, 0.1) + else + generate_threat() + generate_budgets() + set_cooldowns() + log_dynamic("Dynamic Mode initialized with a Threat Level of... [threat_level]! ([round_start_budget] round start budget)") + SSblackbox.record_feedback( + "associative", + "dynamic_threat", + 1, + list( + "server_name" = CONFIG_GET(string/serversqlname), + "forced_threat_level" = GLOB.dynamic_forced_threat_level, + "threat_level" = threat_level, + "max_threat" = (SSticker.totalPlayersReady < low_pop_player_threshold) ? LERP(low_pop_maximum_threat, max_threat_level, SSticker.totalPlayersReady / low_pop_player_threshold) : max_threat_level, + "player_count" = SSticker.totalPlayersReady, + "round_start_budget" = round_start_budget, + "parameters" = list( + "threat_curve_centre" = threat_curve_centre, + "threat_curve_width" = threat_curve_width, + "forced_extended" = GLOB.dynamic_forced_extended, + "no_stacking" = GLOB.dynamic_no_stacking, + "stacking_limit" = GLOB.dynamic_stacking_limit, + ), + ), + ) + return TRUE + +/datum/controller/subsystem/dynamic/proc/setup_shown_threat() + if (prob(FAKE_REPORT_CHANCE)) + shown_threat = rand(1, 100) + else + shown_threat = clamp(threat_level + rand(REPORT_NEG_DIVERGENCE, REPORT_POS_DIVERGENCE), 0, 100) + +/datum/controller/subsystem/dynamic/proc/set_cooldowns() + var/latejoin_injection_cooldown_middle = 0.5*(latejoin_delay_max + latejoin_delay_min) + latejoin_injection_cooldown = round(clamp(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), latejoin_delay_min, latejoin_delay_max)) + world.time + +// Called BEFORE everyone is equipped with their job +/datum/controller/subsystem/dynamic/proc/pre_setup() + if(CONFIG_GET(flag/dynamic_config_enabled)) + var/json_file = file("[global.config.directory]/dynamic.json") + if(fexists(json_file)) + configuration = json_decode(file2text(json_file)) + if(configuration["Dynamic"]) + for(var/variable in configuration["Dynamic"]) + if(!(variable in vars)) + stack_trace("Invalid dynamic configuration variable [variable] in game mode variable changes.") + continue + vars[variable] = configuration["Dynamic"][variable] + + configure_station_trait_costs() + setup_parameters() + setup_hijacking() + setup_shown_threat() + setup_rulesets() + + //We do this here instead of with the midround rulesets and such because these rules can hang refs + //To new_player and such, and we want the datums to just free when the roundstart work is done + var/list/roundstart_rules = init_rulesets(/datum/dynamic_ruleset/roundstart) + + SSjob.DivideOccupations(pure = TRUE, allow_all = TRUE) + for(var/i in GLOB.new_player_list) + var/mob/dead/new_player/player = i + if(player.ready == PLAYER_READY_TO_PLAY && player.mind && player.check_preferences()) + if(is_unassigned_job(player.mind.assigned_role)) + var/list/job_data = list() + var/job_prefs = player.client.prefs.job_preferences + for(var/job in job_prefs) + var/priority = job_prefs[job] + job_data += "[job]: [SSjob.job_priority_level_to_string(priority)]" + to_chat(player, span_danger("You were unable to qualify for any roundstart antagonist role this round because your job preferences presented a high chance of all of your selected jobs being unavailable, along with 'return to lobby if job is unavailable' enabled. Increase the number of roles set to medium or low priority to reduce the chances of this happening.")) + log_admin("[player.ckey] failed to qualify for any roundstart antagonist role because their job preferences presented a high chance of all of their selected jobs being unavailable, along with 'return to lobby if job is unavailable' enabled and has [player.client.prefs.be_special.len] antag preferences enabled. They will be unable to qualify for any roundstart antagonist role. These are their job preferences - [job_data.Join(" | ")]") + else + roundstart_pop_ready++ + candidates.Add(player) + SSjob.ResetOccupations() + log_dynamic("Listing [roundstart_rules.len] round start rulesets, and [candidates.len] players ready.") + if (candidates.len <= 0) + log_dynamic("[candidates.len] candidates.") + return TRUE + + if(GLOB.dynamic_forced_roundstart_ruleset.len > 0) + rigged_roundstart() + else + roundstart(roundstart_rules) + + log_dynamic("[round_start_budget] round start budget was left, donating it to midrounds.") + threat_log += "[worldtime2text()]: [round_start_budget] round start budget was left, donating it to midrounds." + mid_round_budget += round_start_budget + + var/starting_rulesets = "" + for (var/datum/dynamic_ruleset/roundstart/DR in executed_rules) + starting_rulesets += "[DR.name], " + log_dynamic("Picked the following roundstart rules: [starting_rulesets]") + candidates.Cut() + return TRUE + +// Called AFTER everyone is equipped with their job +/datum/controller/subsystem/dynamic/proc/post_setup(report) + for(var/datum/dynamic_ruleset/roundstart/rule in executed_rules) + rule.candidates.Cut() // The rule should not use candidates at this point as they all are null. + addtimer(CALLBACK(src, TYPE_PROC_REF(/datum/controller/subsystem/dynamic/, execute_roundstart_rule), rule), rule.delay) + + if (!CONFIG_GET(flag/no_intercept_report)) + addtimer(CALLBACK(src, PROC_REF(send_intercept)), rand(waittime_l, waittime_h)) + + addtimer(CALLBACK(src, PROC_REF(display_roundstart_logout_report)), ROUNDSTART_LOGOUT_REPORT_TIME) + //NOVA EDIT START - DIVERGENCY/GOALS REPORT + else + addtimer(CALLBACK(src, PROC_REF(send_trait_report)), rand(waittime_l, waittime_h)) + //NOVA EDIT END + + if(CONFIG_GET(flag/reopen_roundstart_suicide_roles)) + var/delay = CONFIG_GET(number/reopen_roundstart_suicide_roles_delay) + if(delay) + delay *= (1 SECONDS) + else + delay = (4 MINUTES) //default to 4 minutes if the delay isn't defined. + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(reopen_roundstart_suicide_roles)), delay) + + if(SSdbcore.Connect()) + var/list/to_set = list() + var/arguments = list() + if(GLOB.revdata.originmastercommit) + to_set += "commit_hash = :commit_hash" + arguments["commit_hash"] = GLOB.revdata.originmastercommit + if(to_set.len) + arguments["round_id"] = GLOB.round_id + var/datum/db_query/query_round_game_mode = SSdbcore.NewQuery( + "UPDATE [format_table_name("round")] SET [to_set.Join(", ")] WHERE id = :round_id", + arguments + ) + query_round_game_mode.Execute() + qdel(query_round_game_mode) + return TRUE + +/datum/controller/subsystem/dynamic/proc/display_roundstart_logout_report() + var/list/msg = list("[span_boldnotice("Roundstart logout report")]\n\n") + for(var/i in GLOB.mob_living_list) + var/mob/living/L = i + var/mob/living/carbon/C = L + if (istype(C) && !C.last_mind) + continue // never had a client + + if(L.ckey && !GLOB.directory[L.ckey]) + msg += "[L.name] ([L.key]), the [L.job] (Disconnected)\n" + + + if(L.ckey && L.client) + var/failed = FALSE + if(L.client.inactivity >= ROUNDSTART_LOGOUT_AFK_THRESHOLD) //Connected, but inactive (alt+tabbed or something) + msg += "[L.name] ([L.key]), the [L.job] (Connected, Inactive)\n" + failed = TRUE //AFK client + if(!failed && L.stat) + if(HAS_TRAIT(L, TRAIT_SUICIDED)) //Suicider + msg += "[L.name] ([L.key]), the [L.job] ([span_boldannounce("Suicide")])\n" + failed = TRUE //Disconnected client + if(!failed && (L.stat == UNCONSCIOUS || L.stat == HARD_CRIT)) + msg += "[L.name] ([L.key]), the [L.job] (Dying)\n" + failed = TRUE //Unconscious + if(!failed && L.stat == DEAD) + msg += "[L.name] ([L.key]), the [L.job] (Dead)\n" + failed = TRUE //Dead + + continue //Happy connected client + for(var/mob/dead/observer/D in GLOB.dead_mob_list) + if(D.mind && D.mind.current == L) + if(L.stat == DEAD) + if(HAS_TRAIT(L, TRAIT_SUICIDED)) //Suicider + msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] ([span_boldannounce("Suicide")])\n" + continue //Disconnected client + else + msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Dead)\n" + continue //Dead mob, ghost abandoned + else + if(D.can_reenter_corpse) + continue //Adminghost, or cult/wizard ghost + else + msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] ([span_boldannounce("Ghosted")])\n" + continue //Ghosted while alive + + var/concatenated_message = msg.Join() + log_admin(concatenated_message) + to_chat(GLOB.admins, concatenated_message) + + +/// Initializes the internal ruleset variables +/datum/controller/subsystem/dynamic/proc/setup_rulesets() + midround_rules = init_rulesets(/datum/dynamic_ruleset/midround) + latejoin_rules = init_rulesets(/datum/dynamic_ruleset/latejoin) + +/// Returns a list of the provided rulesets. +/// Configures their variables to match config. +/datum/controller/subsystem/dynamic/proc/init_rulesets(ruleset_subtype) + var/list/rulesets = list() + + for (var/datum/dynamic_ruleset/ruleset_type as anything in subtypesof(ruleset_subtype)) + if (initial(ruleset_type.name) == "") + continue + + if (initial(ruleset_type.weight) == 0) + continue + + var/ruleset = new ruleset_type + configure_ruleset(ruleset) + rulesets += ruleset + + return rulesets + +/// A simple roundstart proc used when dynamic_forced_roundstart_ruleset has rules in it. +/datum/controller/subsystem/dynamic/proc/rigged_roundstart() + message_admins("[GLOB.dynamic_forced_roundstart_ruleset.len] rulesets being forced. Will now attempt to draft players for them.") + log_dynamic("[GLOB.dynamic_forced_roundstart_ruleset.len] rulesets being forced. Will now attempt to draft players for them.") + for (var/datum/dynamic_ruleset/roundstart/rule in GLOB.dynamic_forced_roundstart_ruleset) + configure_ruleset(rule) + message_admins("Drafting players for forced ruleset [rule.name].") + log_dynamic("Drafting players for forced ruleset [rule.name].") + rule.acceptable(roundstart_pop_ready, threat_level) // Assigns some vars in the modes, running it here for consistency + rule.candidates = candidates.Copy() + rule.trim_candidates() + rule.load_templates() + if (rule.ready(roundstart_pop_ready, TRUE)) + var/cost = rule.cost + var/scaled_times = 0 + if (rule.scaling_cost) + scaled_times = round(max(round_start_budget - cost, 0) / rule.scaling_cost) + cost += rule.scaling_cost * scaled_times + + spend_roundstart_budget(picking_roundstart_rule(rule, scaled_times, forced = TRUE)) + +/datum/controller/subsystem/dynamic/proc/roundstart(list/roundstart_rules) + if (GLOB.dynamic_forced_extended) + log_dynamic("Starting a round of forced extended.") + return TRUE + var/list/drafted_rules = list() + for (var/datum/dynamic_ruleset/roundstart/rule in roundstart_rules) + if (!rule.weight) + continue + if (rule.acceptable(roundstart_pop_ready, threat_level) && round_start_budget >= rule.cost) // If we got the population and threat required + rule.candidates = candidates.Copy() + rule.trim_candidates() + rule.load_templates() + if (rule.ready(roundstart_pop_ready) && rule.candidates.len > 0) + drafted_rules[rule] = rule.weight + + var/list/rulesets_picked = list() + + // Kept in case a ruleset can't be initialized for whatever reason, we want to be able to only spend what we can use. + var/round_start_budget_left = round_start_budget + + while (round_start_budget_left > 0) + var/datum/dynamic_ruleset/roundstart/ruleset = pick_weight(drafted_rules) + if (isnull(ruleset)) + log_dynamic("No more rules can be applied, stopping with [round_start_budget] left.") + break + + var/cost = (ruleset in rulesets_picked) ? ruleset.scaling_cost : ruleset.cost + if (cost == 0) + stack_trace("[ruleset] cost 0, this is going to result in an infinite loop.") + drafted_rules[ruleset] = null + continue + + if (cost > round_start_budget_left) + drafted_rules[ruleset] = null + continue + + if (check_blocking(ruleset.blocking_rules, rulesets_picked)) + drafted_rules[ruleset] = null + continue + + round_start_budget_left -= cost + + rulesets_picked[ruleset] += 1 + + if (ruleset.flags & HIGH_IMPACT_RULESET) + for (var/_other_ruleset in drafted_rules) + var/datum/dynamic_ruleset/other_ruleset = _other_ruleset + if (other_ruleset.flags & HIGH_IMPACT_RULESET) + drafted_rules[other_ruleset] = null + + if (ruleset.flags & LONE_RULESET) + drafted_rules[ruleset] = null + + for (var/ruleset in rulesets_picked) + spend_roundstart_budget(picking_roundstart_rule(ruleset, rulesets_picked[ruleset] - 1)) + + update_log() + +/// Initializes the round start ruleset provided to it. Returns how much threat to spend. +/datum/controller/subsystem/dynamic/proc/picking_roundstart_rule(datum/dynamic_ruleset/roundstart/ruleset, scaled_times = 0, forced = FALSE) + log_dynamic("Picked a ruleset: [ruleset.name], scaled [scaled_times] times") + + ruleset.trim_candidates() + var/added_threat = ruleset.scale_up(roundstart_pop_ready, scaled_times) + + if(ruleset.pre_execute(roundstart_pop_ready)) + threat_log += "[worldtime2text()]: Roundstart [ruleset.name] spent [ruleset.cost + added_threat]. [ruleset.scaling_cost ? "Scaled up [ruleset.scaled_times]/[scaled_times] times." : ""]" + if(ruleset.flags & ONLY_RULESET) + only_ruleset_executed = TRUE + if(ruleset.flags & HIGH_IMPACT_RULESET) + high_impact_ruleset_executed = TRUE + executed_rules += ruleset + return ruleset.cost + added_threat + else + stack_trace("The starting rule \"[ruleset.name]\" failed to pre_execute.") + return 0 + +/// Mainly here to facilitate delayed rulesets. All roundstart rulesets are executed with a timered callback to this proc. +/datum/controller/subsystem/dynamic/proc/execute_roundstart_rule(sent_rule) + var/datum/dynamic_ruleset/rule = sent_rule + if(rule.execute()) + if(rule.persistent) + current_rules += rule + new_snapshot(rule) + rule.forget_startup() + return TRUE + rule.clean_up() // Refund threat, delete teams and so on. + rule.forget_startup() + executed_rules -= rule + stack_trace("The starting rule \"[rule.name]\" failed to execute.") + return FALSE + +/// An experimental proc to allow admins to call rules on the fly or have rules call other rules. +/datum/controller/subsystem/dynamic/proc/picking_specific_rule(ruletype, forced = FALSE, ignore_cost = FALSE) + var/datum/dynamic_ruleset/midround/new_rule + if(ispath(ruletype)) + new_rule = new ruletype() // You should only use it to call midround rules though. + configure_ruleset(new_rule) // This makes sure the rule is set up properly. + else if(istype(ruletype, /datum/dynamic_ruleset)) + new_rule = ruletype + else + return FALSE + + if(!new_rule) + return FALSE + + if(!forced) + if(only_ruleset_executed) + return FALSE + // Check if a blocking ruleset has been executed. + else if(check_blocking(new_rule.blocking_rules, executed_rules)) + return FALSE + // Check if the ruleset is high impact and if a high impact ruleset has been executed + else if(new_rule.flags & HIGH_IMPACT_RULESET) + if(threat_level < GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking) + if(high_impact_ruleset_executed) + return FALSE + + var/population = GLOB.alive_player_list.len + if((new_rule.acceptable(population, threat_level) && (ignore_cost || new_rule.cost <= mid_round_budget)) || forced) + new_rule.trim_candidates() + new_rule.load_templates() + if (new_rule.ready(forced)) + if (!ignore_cost) + spend_midround_budget(new_rule.cost, threat_log, "[worldtime2text()]: Forced rule [new_rule.name]") + new_rule.pre_execute(population) + if (new_rule.execute()) // This should never fail since ready() returned 1 + if(new_rule.flags & HIGH_IMPACT_RULESET) + high_impact_ruleset_executed = TRUE + else if(new_rule.flags & ONLY_RULESET) + only_ruleset_executed = TRUE + log_dynamic("Making a call to a specific ruleset...[new_rule.name]!") + executed_rules += new_rule + if (new_rule.persistent) + current_rules += new_rule + new_rule.forget_startup() + return TRUE + else if (forced) + log_dynamic("The ruleset [new_rule.name] couldn't be executed due to lack of elligible players.") + new_rule.forget_startup() + return FALSE + +/datum/controller/subsystem/dynamic/fire() + for (var/datum/dynamic_ruleset/rule in current_rules) + if(rule.rule_process() == RULESET_STOP_PROCESSING) // If rule_process() returns 1 (RULESET_STOP_PROCESSING), stop processing. + current_rules -= rule + + try_midround_roll() + +/// Removes type from the list +/datum/controller/subsystem/dynamic/proc/remove_from_list(list/type_list, type) + for(var/I in type_list) + if(istype(I, type)) + type_list -= I + return type_list + +/// Checks if a type in blocking_list is in rule_list. +/datum/controller/subsystem/dynamic/proc/check_blocking(list/blocking_list, list/rule_list) + if(blocking_list.len > 0) + for(var/blocking in blocking_list) + for(var/_executed in rule_list) + var/datum/executed = _executed + if(blocking == executed.type) + log_dynamic("FAIL: check_blocking - [blocking] conflicts with [executed.type]") + return TRUE + return FALSE + +/// Handles late-join antag assignments +/datum/controller/subsystem/dynamic/proc/make_antag_chance(mob/living/carbon/human/newPlayer) + if (GLOB.dynamic_forced_extended) + return + if(EMERGENCY_ESCAPED_OR_ENDGAMED) // No more rules after the shuttle has left + return + + if (forced_latejoin_rule) + log_dynamic("Forcing specific [forced_latejoin_rule.ruletype] ruleset [forced_latejoin_rule].") + if(!handle_executing_latejoin(forced_latejoin_rule, newPlayer, forced = TRUE)) + message_admins("The forced latejoin ruleset [forced_latejoin_rule.name] couldn't be executed \ + as the most recent latejoin did not fulfill the ruleset's requirements.") + forced_latejoin_rule = null + return + + if(!forced_injection) + if(latejoin_injection_cooldown >= world.time) + return + if(!prob(latejoin_roll_chance)) + return + + var/was_forced = forced_injection + forced_injection = FALSE + var/list/possible_latejoin_rules = list() + for (var/datum/dynamic_ruleset/latejoin/rule in latejoin_rules) + if(!rule.weight) + continue + if(mid_round_budget < rule.cost) + continue + if(!rule.acceptable(GLOB.alive_player_list.len, threat_level)) + continue + possible_latejoin_rules[rule] = rule.get_weight() + + if(!length(possible_latejoin_rules)) + log_dynamic("FAIL: [newPlayer] was selected to roll for a latejoin ruleset, but there were no valid rulesets.") + return + + log_dynamic("[newPlayer] was selected to roll for a latejoin ruleset from the following list: [english_list(possible_latejoin_rules)].") + // You get one shot at becoming a latejoin antag, if it fails the next guy will try. + var/datum/dynamic_ruleset/latejoin/picked_rule = pick_ruleset(possible_latejoin_rules, max_allowed_attempts = 1) + if(isnull(picked_rule)) + log_dynamic("FAIL: No valid rulset was selected for [newPlayer]'s latejoin[was_forced ? "" : ", the next player will be checked instead"].") + return + if(was_forced) + log_dynamic("Forcing random [picked_rule.ruletype] ruleset [picked_rule].") + handle_executing_latejoin(picked_rule, newPlayer, forced = was_forced) + +/** + * This proc handles the execution of a latejoin ruleset, including removing it from latejoin rulesets if not repeatable, + * upping the injection cooldown, and starting a timer to execute the ruleset on delay. + */ +/datum/controller/subsystem/dynamic/proc/handle_executing_latejoin(datum/dynamic_ruleset/ruleset, mob/living/carbon/human/only_candidate, forced = FALSE) + ruleset.candidates = list(only_candidate) + ruleset.trim_candidates() + ruleset.load_templates() + if (!ruleset.ready(forced)) + log_dynamic("FAIL: [only_candidate] was selected to latejoin with the [ruleset] ruleset, \ + but the ruleset failed to execute[length(ruleset.candidates) ? "":" as they were not a valid candiate"].") + return FALSE + if (!ruleset.repeatable) + latejoin_rules = remove_from_list(latejoin_rules, ruleset.type) + addtimer(CALLBACK(src, PROC_REF(execute_midround_latejoin_rule), ruleset), ruleset.delay) + + if(!forced) + var/latejoin_injection_cooldown_middle = 0.5 * (latejoin_delay_max + latejoin_delay_min) + latejoin_injection_cooldown = round(clamp(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), latejoin_delay_min, latejoin_delay_max)) + world.time + log_dynamic("A latejoin rulset triggered successfully, the next latejoin injection will happen at [latejoin_injection_cooldown] round time.") + + return TRUE + +/// Apply configurations to rule. +/datum/controller/subsystem/dynamic/proc/configure_ruleset(datum/dynamic_ruleset/ruleset) + var/rule_conf = LAZYACCESSASSOC(configuration, ruleset.ruletype, ruleset.name) + for(var/variable in rule_conf) + if(!(variable in ruleset.vars)) + stack_trace("Invalid dynamic configuration variable [variable] in [ruleset.ruletype] [ruleset.name].") + continue + ruleset.vars[variable] = rule_conf[variable] + if(CONFIG_GET(flag/protect_roles_from_antagonist)) + ruleset.restricted_roles |= ruleset.protected_roles + if(CONFIG_GET(flag/protect_assistant_from_antagonist)) + ruleset.restricted_roles |= JOB_ASSISTANT + // NOVA EDIT ADDITION + for(var/datum/job/iterating_job as anything in subtypesof(/datum/job)) + if(!initial(iterating_job.antagonist_restricted)) + continue + if(initial(iterating_job.restricted_antagonists)) + var/list/restricted_antagonists = initial(iterating_job.restricted_antagonists) + if(!(ruleset.antag_flag in restricted_antagonists)) + continue + ruleset.restricted_roles |= initial(iterating_job.title) + else + ruleset.restricted_roles |= initial(iterating_job.title) + // NOVA EDIT END + +/// Get station traits and call for their config +/datum/controller/subsystem/dynamic/proc/configure_station_trait_costs() + if(!CONFIG_GET(flag/dynamic_config_enabled)) + return + for(var/datum/station_trait/station_trait as anything in GLOB.dynamic_station_traits) + configure_station_trait(station_trait) + +/// Apply configuration for station trait costs +/datum/controller/subsystem/dynamic/proc/configure_station_trait(datum/station_trait/station_trait) + var/list/station_trait_config = LAZYACCESSASSOC(configuration, "Station", station_trait.dynamic_threat_id) + var/cost = station_trait_config["cost"] + + if(isnull(cost)) //0 is valid so check for null specifically + return + + if(cost != GLOB.dynamic_station_traits[station_trait]) + log_dynamic("Config set [station_trait.dynamic_threat_id] cost from [station_trait.threat_reduction] to [cost]") + + GLOB.dynamic_station_traits[station_trait] = cost + +/// Refund threat, but no more than threat_level. +/datum/controller/subsystem/dynamic/proc/refund_threat(regain) + mid_round_budget = min(threat_level, mid_round_budget + regain) + +/// Generate threat and increase the threat_level if it goes beyond, capped at 100 +/datum/controller/subsystem/dynamic/proc/create_threat(gain, list/threat_log, reason) + mid_round_budget = min(100, mid_round_budget + gain) + if(mid_round_budget > threat_level) + threat_level = mid_round_budget + for(var/list/logs in threat_log) + log_threat(gain, logs, reason) + +/datum/controller/subsystem/dynamic/proc/log_threat(threat_change, list/threat_log, reason) + var/gain_or_loss = "+" + if(threat_change < 0) + gain_or_loss = "-" + threat_log += "Threat [gain_or_loss][abs(threat_change)] - [reason]." + +/// Expend round start threat, can't fall under 0. +/datum/controller/subsystem/dynamic/proc/spend_roundstart_budget(cost, list/threat_log, reason) + round_start_budget = max(round_start_budget - cost,0) + if (!isnull(threat_log)) + log_threat(-cost, threat_log, reason) + +/// Expend midround threat, can't fall under 0. +/datum/controller/subsystem/dynamic/proc/spend_midround_budget(cost, list/threat_log, reason) + mid_round_budget = max(mid_round_budget - cost,0) + if (!isnull(threat_log)) + log_threat(-cost, threat_log, reason) + +#define MAXIMUM_DYN_DISTANCE 5 + +/** + * Returns the comulative distribution of threat centre and width, and a random location of -0.5 to 0.5 + * plus or minus the otherwise unattainable lower and upper percentiles. All multiplied by the maximum + * threat and then rounded to the nearest interval. + * rand() calls without arguments returns a value between 0 and 1, allowing for smaller intervals. + */ +/datum/controller/subsystem/dynamic/proc/lorentz_to_amount(centre = 0, scale = 1.8, max_threat = 100, interval = 1) + var/location = RANDOM_DECIMAL(-MAXIMUM_DYN_DISTANCE, MAXIMUM_DYN_DISTANCE) * rand() + var/lorentz_result = LORENTZ_CUMULATIVE_DISTRIBUTION(centre, location, scale) + var/std_threat = lorentz_result * max_threat + ///Without these, the amount won't come close to hitting 0% or 100% of the max threat. + var/lower_deviation = max(std_threat * (location-centre)/MAXIMUM_DYN_DISTANCE, 0) + var/upper_deviation = max((max_threat - std_threat) * (centre-location)/MAXIMUM_DYN_DISTANCE, 0) + return clamp(round(std_threat + upper_deviation - lower_deviation, interval), 0, 100) + +/proc/reopen_roundstart_suicide_roles() + var/include_command = CONFIG_GET(flag/reopen_roundstart_suicide_roles_command_positions) + var/list/reopened_jobs = list() + + for(var/mob/living/quitter in GLOB.suicided_mob_list) + var/datum/job/job = SSjob.GetJob(quitter.job) + if(!job || !(job.job_flags & JOB_REOPEN_ON_ROUNDSTART_LOSS)) + continue + if(!include_command && job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) + continue + job.current_positions = max(job.current_positions - 1, 0) + reopened_jobs += quitter.job + + if(CONFIG_GET(flag/reopen_roundstart_suicide_roles_command_report)) + if(reopened_jobs.len) + var/reopened_job_report_positions + for(var/dead_dudes_job in reopened_jobs) + reopened_job_report_positions = "[reopened_job_report_positions ? "[reopened_job_report_positions]\n":""][dead_dudes_job]" + + var/suicide_command_report = {" + [command_name()] Human Resources Board
+ Notice of Personnel Change

+ To personnel management staff aboard [station_name()]:

+ Our medical staff have detected a series of anomalies in the vital sensors + of some of the staff aboard your station.

+ Further investigation into the situation on our end resulted in us discovering + a series of rather... unforturnate decisions that were made on the part of said staff.

+ As such, we have taken the liberty to automatically reopen employment opportunities for the positions of the crew members + who have decided not to partake in our research. We will be forwarding their cases to our employment review board + to determine their eligibility for continued service with the company (and of course the + continued storage of cloning records within the central medical backup server.)

+ The following positions have been reopened on our behalf:

+ [reopened_job_report_positions]
+ "} + + print_command_report(suicide_command_report, "Central Command Personnel Update") + + +#undef MAXIMUM_DYN_DISTANCE + +#undef FAKE_REPORT_CHANCE +#undef FAKE_GREENSHIFT_FORM_CHANCE +#undef PULSAR_REPORT_CHANCE +#undef REPORT_NEG_DIVERGENCE +#undef REPORT_POS_DIVERGENCE diff --git a/code/game/gamemodes/dynamic/dynamic_hijacking.dm b/code/controllers/subsystem/dynamic/dynamic_hijacking.dm similarity index 86% rename from code/game/gamemodes/dynamic/dynamic_hijacking.dm rename to code/controllers/subsystem/dynamic/dynamic_hijacking.dm index 62c9a5d21247b5..7577cbcd84f656 100644 --- a/code/game/gamemodes/dynamic/dynamic_hijacking.dm +++ b/code/controllers/subsystem/dynamic/dynamic_hijacking.dm @@ -1,7 +1,7 @@ -/datum/game_mode/dynamic/proc/setup_hijacking() +/datum/controller/subsystem/dynamic/proc/setup_hijacking() RegisterSignal(SSdcs, COMSIG_GLOB_PRE_RANDOM_EVENT, PROC_REF(on_pre_random_event)) -/datum/game_mode/dynamic/proc/on_pre_random_event(datum/source, datum/round_event_control/round_event_control) +/datum/controller/subsystem/dynamic/proc/on_pre_random_event(datum/source, datum/round_event_control/round_event_control) SIGNAL_HANDLER if (!round_event_control.dynamic_should_hijack) return diff --git a/code/game/gamemodes/dynamic/dynamic_logging.dm b/code/controllers/subsystem/dynamic/dynamic_logging.dm similarity index 95% rename from code/game/gamemodes/dynamic/dynamic_logging.dm rename to code/controllers/subsystem/dynamic/dynamic_logging.dm index 7490894b526ecb..16bd56a730316a 100644 --- a/code/game/gamemodes/dynamic/dynamic_logging.dm +++ b/code/controllers/subsystem/dynamic/dynamic_logging.dm @@ -69,7 +69,7 @@ return serialization /// Updates the log for the current snapshots. -/datum/game_mode/dynamic/proc/update_log() +/datum/controller/subsystem/dynamic/proc/update_log() var/list/serialized = list() serialized["threat_level"] = threat_level serialized["round_start_budget"] = initial_round_start_budget @@ -84,7 +84,7 @@ rustg_file_write(json_encode(serialized), "[GLOB.log_directory]/dynamic.json") /// Creates a new snapshot with the given rulesets chosen, and writes to the JSON output. -/datum/game_mode/dynamic/proc/new_snapshot(datum/dynamic_ruleset/ruleset_chosen) +/datum/controller/subsystem/dynamic/proc/new_snapshot(datum/dynamic_ruleset/ruleset_chosen) var/datum/dynamic_snapshot/new_snapshot = new new_snapshot.remaining_threat = mid_round_budget diff --git a/code/game/gamemodes/dynamic/dynamic_midround_rolling.dm b/code/controllers/subsystem/dynamic/dynamic_midround_rolling.dm similarity index 95% rename from code/game/gamemodes/dynamic/dynamic_midround_rolling.dm rename to code/controllers/subsystem/dynamic/dynamic_midround_rolling.dm index c3e295ae875fee..968037b9fa2e0b 100644 --- a/code/game/gamemodes/dynamic/dynamic_midround_rolling.dm +++ b/code/controllers/subsystem/dynamic/dynamic_midround_rolling.dm @@ -1,7 +1,7 @@ /// Returns the world.time of the next midround injection. /// Will return a cached result from `next_midround_injection`, the variable. /// If that variable is null, will generate a new one. -/datum/game_mode/dynamic/proc/next_midround_injection() +/datum/controller/subsystem/dynamic/proc/next_midround_injection() if (!isnull(next_midround_injection)) return next_midround_injection @@ -16,7 +16,7 @@ return last_midround_injection_attempt + distance -/datum/game_mode/dynamic/proc/try_midround_roll() +/datum/controller/subsystem/dynamic/proc/try_midround_roll() if (!forced_injection && next_midround_injection() > world.time) return @@ -90,7 +90,7 @@ log_dynamic_and_announce("No midround rulesets could be drafted. ([heavy_light_log_count])") /// Gets the chance for a heavy ruleset midround injection, the dry_run argument is only used for forced injection. -/datum/game_mode/dynamic/proc/get_heavy_midround_injection_chance(dry_run) +/datum/controller/subsystem/dynamic/proc/get_heavy_midround_injection_chance(dry_run) var/chance_modifier = 1 var/next_midround_roll = next_midround_injection() - SSticker.round_start_time diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets.dm similarity index 92% rename from code/game/gamemodes/dynamic/dynamic_rulesets.dm rename to code/controllers/subsystem/dynamic/dynamic_rulesets.dm index 0af18e0b0aa81f..f05ae48fe1e575 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets.dm +++ b/code/controllers/subsystem/dynamic/dynamic_rulesets.dm @@ -7,7 +7,7 @@ var/ruletype = "" /// If set to TRUE, the rule won't be discarded after being executed, and dynamic will call rule_process() every time it ticks. var/persistent = FALSE - /// If set to TRUE, dynamic mode will be able to draft this ruleset again later on. (doesn't apply for roundstart rules) + /// If set to TRUE, dynamic will be able to draft this ruleset again later on. (doesn't apply for roundstart rules) var/repeatable = FALSE /// If set higher than 0 decreases weight by itself causing the ruleset to appear less often the more it is repeated. var/repeatable_weight_decrease = 2 @@ -41,7 +41,7 @@ var/required_candidates = 0 /// 0 -> 9, probability for this rule to be picked against other rules. If zero this will effectively disable the rule. var/weight = 5 - /// Threat cost for this rule, this is decreased from the mode's threat when the rule is executed. + /// Threat cost for this rule, this is decreased from the threat level when the rule is executed. var/cost = 0 /// Cost per level the rule scales up. var/scaling_cost = 0 @@ -51,13 +51,11 @@ var/total_cost = 0 /// A flag that determines how the ruleset is handled. Check __DEFINES/dynamic.dm for an explanation of the accepted values. var/flags = NONE - /// Pop range per requirement. If zero defaults to mode's pop_per_requirement. + /// Pop range per requirement. If zero defaults to dynamic's pop_per_requirement. var/pop_per_requirement = 0 /// Requirements are the threat level requirements per pop range. /// With the default values, The rule will never get drafted below 10 threat level (aka: "peaceful extended"), and it requires a higher threat level at lower pops. var/list/requirements = list(40,30,20,10,10,10,10,10,10,10) - /// Reference to the mode, use this instead of SSticker.mode. - var/datum/game_mode/dynamic/mode = null /// If a role is to be considered another for the purpose of banning. var/antag_flag_override = null /// If set, will check this preference instead of antag_flag. @@ -92,8 +90,6 @@ // side effects here. Dynamic rulesets should be stateless anyway. SHOULD_NOT_OVERRIDE(TRUE) - mode = SSticker.mode - ..() /datum/dynamic_ruleset/roundstart // One or more of those drafted at roundstart @@ -135,7 +131,7 @@ /// Sets the current threat indices and returns true if we're inside of them /datum/dynamic_ruleset/proc/is_valid_threat(population, threat_level) - pop_per_requirement = pop_per_requirement > 0 ? pop_per_requirement : mode.pop_per_requirement + pop_per_requirement = pop_per_requirement > 0 ? pop_per_requirement : SSdynamic.pop_per_requirement indice_pop = min(requirements.len,round(population/pop_per_requirement)+1) return threat_level >= requirements[indice_pop] @@ -148,14 +144,14 @@ return 0 var/antag_fraction = 0 - for(var/_ruleset in (mode.executed_rules + list(src))) // we care about the antags we *will* assign, too + for(var/_ruleset in (SSdynamic.executed_rules + list(src))) // we care about the antags we *will* assign, too var/datum/dynamic_ruleset/ruleset = _ruleset - antag_fraction += ((1 + ruleset.scaled_times) * ruleset.get_antag_cap(population)) / mode.roundstart_pop_ready + antag_fraction += ((1 + ruleset.scaled_times) * ruleset.get_antag_cap(population)) / SSdynamic.roundstart_pop_ready for(var/i in 1 to max_scale) if(antag_fraction < 0.25) scaled_times += 1 - antag_fraction += get_antag_cap(population) / mode.roundstart_pop_ready // we added new antags, gotta update the % + antag_fraction += get_antag_cap(population) / SSdynamic.roundstart_pop_ready // we added new antags, gotta update the % return scaled_times * scaling_cost @@ -170,7 +166,7 @@ /datum/dynamic_ruleset/proc/rule_process() return -/// Called on game mode pre_setup for roundstart rulesets. +/// Called on pre_setup for roundstart rulesets. /// Do everything you need to do before job is assigned here. /// IMPORTANT: ASSIGN special_role HERE /datum/dynamic_ruleset/proc/pre_execute() @@ -206,15 +202,15 @@ /// Runs from gamemode process() if ruleset fails to start, like delayed rulesets not getting valid candidates. /// This one only handles refunding the threat, override in ruleset to clean up the rest. /datum/dynamic_ruleset/proc/clean_up() - mode.refund_threat(cost + (scaled_times * scaling_cost)) - mode.threat_log += "[worldtime2text()]: [ruletype] [name] refunded [cost + (scaled_times * scaling_cost)]. Failed to execute." + SSdynamic.refund_threat(cost + (scaled_times * scaling_cost)) + SSdynamic.threat_log += "[worldtime2text()]: [ruletype] [name] refunded [cost + (scaled_times * scaling_cost)]. Failed to execute." /// Gets weight of the ruleset /// Note that this decreases weight if repeatable is TRUE and repeatable_weight_decrease is higher than 0 /// Note: If you don't want repeatable rulesets to decrease their weight use the weight variable directly /datum/dynamic_ruleset/proc/get_weight() if(repeatable && weight > 1 && repeatable_weight_decrease > 0) - for(var/datum/dynamic_ruleset/DR in mode.executed_rules) + for(var/datum/dynamic_ruleset/DR in SSdynamic.executed_rules) if(istype(DR, type)) weight = max(weight-repeatable_weight_decrease,1) return weight @@ -233,7 +229,7 @@ /datum/dynamic_ruleset/proc/trim_candidates() return -/// Set mode result and news report here. +/// Set mode_result and news report here. /// Only called if ruleset is flagged as HIGH_IMPACT_RULESET /datum/dynamic_ruleset/proc/round_result() @@ -251,7 +247,7 @@ candidates.Remove(candidate_player) continue - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(!candidate_client.prefs?.read_preference(/datum/preference/toggle/be_antag)) candidates.Remove(candidate_player) continue @@ -259,7 +255,7 @@ if(is_banned_from(candidate_client.ckey, BAN_ANTAGONIST)) candidates.Remove(candidate_player) continue - //SKYRAT EDIT END + //NOVA EDIT END if(candidate_client.get_remaining_days(minimum_required_age) > 0) candidates.Remove(candidate_player) diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets_latejoin.dm similarity index 97% rename from code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm rename to code/controllers/subsystem/dynamic/dynamic_rulesets_latejoin.dm index 1d676ea26679db..6c7bc3bfacfd2e 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm +++ b/code/controllers/subsystem/dynamic/dynamic_rulesets_latejoin.dm @@ -16,14 +16,14 @@ candidates.Remove(P) else if (!((antag_preference || antag_flag) in P.client.prefs.be_special) || is_banned_from(P.ckey, list(antag_flag_override || antag_flag, ROLE_SYNDICATE))) candidates.Remove(P) - // SKYRAT EDIT ADDITION - PROTECTED JOBS + // NOVA EDIT ADDITION - PROTECTED JOBS else if(P.client?.prefs && !P.client.prefs.read_preference(/datum/preference/toggle/be_antag)) candidates.Remove(P) continue else if(is_banned_from(P.client?.ckey, BAN_ANTAGONIST)) candidates.Remove(P) continue - // SKYRAT EDIT END + // NOVA EDIT END /datum/dynamic_ruleset/latejoin/ready(forced = 0) if (forced) @@ -37,7 +37,7 @@ if (M.mind && (M.mind.assigned_role.title in enemy_roles) && (!(M in candidates) || (M.mind.assigned_role.title in restricted_roles))) job_check++ // Checking for "enemies" (such as sec officers). To be counters, they must either not be candidates to that rule, or have a job that restricts them from it - var/threat = round(mode.threat_level/10) + var/threat = round(SSdynamic.threat_level/10) var/ruleset_forced = (GLOB.dynamic_forced_rulesets[type] || RULESET_NOT_FORCED) == RULESET_FORCE_ENABLED if (!ruleset_forced && job_check < required_enemies[threat]) log_dynamic("FAIL: [src] is not ready, because there are not enough enemies: [required_enemies[threat]] needed, [job_check] found") @@ -59,7 +59,7 @@ ////////////////////////////////////////////// /datum/dynamic_ruleset/latejoin/infiltrator - name = "Syndicate Infiltrator" + name = "Symphionia Infiltrator" antag_datum = /datum/antagonist/traitor/infiltrator antag_flag = ROLE_SYNDICATE_INFILTRATOR antag_flag_override = ROLE_TRAITOR @@ -136,7 +136,7 @@ return FALSE var/head_check = 0 for(var/mob/player in GLOB.alive_player_list) - if (player.mind.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) + if (player.mind.assigned_role.job_flags & JOB_HEAD_OF_STAFF) head_check++ return (head_check >= required_heads_of_staff) diff --git a/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm new file mode 100644 index 00000000000000..fb4744bf21d4a5 --- /dev/null +++ b/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm @@ -0,0 +1,947 @@ +/// Probability the AI going malf will be accompanied by an ion storm announcement and some ion laws. +#define MALF_ION_PROB 33 +/// The probability to replace an existing law with an ion law instead of adding a new ion law. +#define REPLACE_LAW_WITH_ION_PROB 10 + +/// Midround Rulesets +/datum/dynamic_ruleset/midround // Can be drafted once in a while during a round + ruletype = MIDROUND_RULESET + var/midround_ruleset_style + /// If the ruleset should be restricted from ghost roles. + var/restrict_ghost_roles = TRUE + /// What mob type the ruleset is restricted to. + var/required_type = /mob/living/carbon/human + var/list/living_players = list() + var/list/living_antags = list() + var/list/dead_players = list() + var/list/list_observers = list() + + /// The minimum round time before this ruleset will show up + var/minimum_round_time = 0 + /// Abstract root value + var/abstract_type = /datum/dynamic_ruleset/midround + +/datum/dynamic_ruleset/midround/forget_startup() + living_players = list() + living_antags = list() + dead_players = list() + list_observers = list() + return ..() + +/datum/dynamic_ruleset/midround/from_ghosts + weight = 0 + required_type = /mob/dead/observer + abstract_type = /datum/dynamic_ruleset/midround/from_ghosts + /// Whether the ruleset should call generate_ruleset_body or not. + var/makeBody = TRUE + /// The rule needs this many applicants to be properly executed. + var/required_applicants = 1 + +/datum/dynamic_ruleset/midround/from_ghosts/check_candidates() + var/dead_count = dead_players.len + list_observers.len + if (required_candidates <= dead_count) + return TRUE + + log_dynamic("FAIL: [src], a from_ghosts ruleset, did not have enough dead candidates: [required_candidates] needed, [dead_count] found") + + return FALSE + +/datum/dynamic_ruleset/midround/trim_candidates() + living_players = trim_list(GLOB.alive_player_list) + living_antags = trim_list(GLOB.current_living_antags) + dead_players = trim_list(GLOB.dead_player_list) + list_observers = trim_list(GLOB.current_observers_list) + +/datum/dynamic_ruleset/midround/proc/trim_list(list/to_trim = list()) + var/list/trimmed_list = to_trim.Copy() + for(var/mob/creature in trimmed_list) + if (!istype(creature, required_type)) + trimmed_list.Remove(creature) + continue + if (isnull(creature.client)) // Are they connected? + trimmed_list.Remove(creature) + continue + //NOVA EDIT ADDITION + if(is_banned_from(creature.client.ckey, BAN_ANTAGONIST)) + trimmed_list.Remove(creature) + continue + if(!creature.client?.prefs?.read_preference(/datum/preference/toggle/be_antag)) + trimmed_list.Remove(creature) + continue + //NOVA EDIT END + if(creature.client.get_remaining_days(minimum_required_age) > 0) + trimmed_list.Remove(creature) + continue + if (!((antag_preference || antag_flag) in creature.client.prefs.be_special)) + trimmed_list.Remove(creature) + continue + if (is_banned_from(creature.ckey, list(antag_flag_override || antag_flag, ROLE_SYNDICATE))) + trimmed_list.Remove(creature) + continue + + if (isnull(creature.mind)) + continue + + if (restrict_ghost_roles && (creature.mind.assigned_role.title in GLOB.exp_specialmap[EXP_TYPE_SPECIAL])) // Are they playing a ghost role? + trimmed_list.Remove(creature) + continue + if (creature.mind.assigned_role.title in restricted_roles) // Does their job allow it? + trimmed_list.Remove(creature) + continue + if (length(exclusive_roles) && !(creature.mind.assigned_role.title in exclusive_roles)) // Is the rule exclusive to their job? + trimmed_list.Remove(creature) + continue + if(HAS_TRAIT(creature, TRAIT_MIND_TEMPORARILY_GONE)) // are they out of body? + trimmed_list.Remove(creature) + continue + if(HAS_TRAIT(creature, TRAIT_TEMPORARY_BODY)) // are they an avatar? + trimmed_list.Remove(creature) + continue + return trimmed_list + +// You can then for example prompt dead players in execute() to join as strike teams or whatever +// Or autotator someone + +// IMPORTANT, since /datum/dynamic_ruleset/midround may accept candidates from both living, dead, and even antag players +// subtype your midround with /from_ghosts or /from_living to get candidate checking. Or check yourself by subtyping from neither +/datum/dynamic_ruleset/midround/ready(forced = FALSE) + if (forced) + return TRUE + + var/job_check = 0 + if (enemy_roles.len > 0) + for (var/mob/M in GLOB.alive_player_list) + if (M.stat == DEAD || !M.client) + continue // Dead/disconnected players cannot count as opponents + if (M.mind && (M.mind.assigned_role.title in enemy_roles) && (!(M in candidates) || (M.mind.assigned_role.title in restricted_roles))) + job_check++ // Checking for "enemies" (such as sec officers). To be counters, they must either not be candidates to that rule, or have a job that restricts them from it + + var/threat = round(SSdynamic.threat_level/10) + var/ruleset_forced = (GLOB.dynamic_forced_rulesets[type] || RULESET_NOT_FORCED) == RULESET_FORCE_ENABLED + if (!ruleset_forced && job_check < required_enemies[threat]) + log_dynamic("FAIL: [src] is not ready, because there are not enough enemies: [required_enemies[threat]] needed, [job_check] found") + return FALSE + + return TRUE + +/datum/dynamic_ruleset/midround/from_ghosts/execute() + var/list/possible_candidates = list() + possible_candidates.Add(dead_players) + possible_candidates.Add(list_observers) + send_applications(possible_candidates) + if(assigned.len > 0) + return TRUE + else + return FALSE + +/// This sends a poll to ghosts if they want to be a ghost spawn from a ruleset. +/datum/dynamic_ruleset/midround/from_ghosts/proc/send_applications(list/possible_volunteers = list()) + if (possible_volunteers.len <= 0) // This shouldn't happen, as ready() should return FALSE if there is not a single valid candidate + message_admins("Possible volunteers was 0. This shouldn't appear, because of ready(), unless you forced it!") + return + + SSdynamic.log_dynamic_and_announce("Polling [possible_volunteers.len] players to apply for the [name] ruleset.") + 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) + SSdynamic.log_dynamic_and_announce("The ruleset [name] received no applications.") + SSdynamic.executed_rules -= src + attempt_replacement() + return + + SSdynamic.log_dynamic_and_announce("[candidates.len] players volunteered for [name].") + review_applications() + +/// Here is where you can check if your ghost applicants are valid for the ruleset. +/// Called by send_applications(). +/datum/dynamic_ruleset/midround/from_ghosts/proc/review_applications() + if(candidates.len < required_applicants) + SSdynamic.executed_rules -= src + return + for (var/i = 1, i <= required_candidates, i++) + if(candidates.len <= 0) + break + var/mob/applicant = pick(candidates) + candidates -= applicant + if(!isobserver(applicant)) + if(applicant.stat == DEAD) // Not an observer? If they're dead, make them one. + applicant = applicant.ghostize(FALSE) + else // Not dead? Disregard them, pick a new applicant + i-- + continue + if(!applicant) + i-- + continue + assigned += applicant + finish_applications() + +/// Here the accepted applications get generated bodies and their setup is finished. +/// Called by review_applications() +/datum/dynamic_ruleset/midround/from_ghosts/proc/finish_applications() + var/i = 0 + for(var/mob/applicant as anything in assigned) + i++ + var/mob/new_character = applicant + if(makeBody) + new_character = generate_ruleset_body(applicant) + finish_setup(new_character, i) + notify_ghosts( + "[applicant.name] has been picked for the ruleset [name]!", + source = new_character, + ) + +/datum/dynamic_ruleset/midround/from_ghosts/proc/generate_ruleset_body(mob/applicant) + var/mob/living/carbon/human/new_character = make_body(applicant) + new_character.dna.remove_all_mutations() + return new_character + +/datum/dynamic_ruleset/midround/from_ghosts/proc/finish_setup(mob/new_character, index) + var/datum/antagonist/new_role = new antag_datum() + setup_role(new_role) + new_character.mind.add_antag_datum(new_role) + new_character.mind.special_role = antag_flag + +/datum/dynamic_ruleset/midround/from_ghosts/proc/setup_role(datum/antagonist/new_role) + return + +/// Fired when there are no valid candidates. Will spawn a sleeper agent or latejoin traitor. +/datum/dynamic_ruleset/midround/from_ghosts/proc/attempt_replacement() + var/datum/dynamic_ruleset/midround/from_living/autotraitor/sleeper_agent = new + + SSdynamic.configure_ruleset(sleeper_agent) + + if (!SSdynamic.picking_specific_rule(sleeper_agent)) + return + + SSdynamic.picking_specific_rule(/datum/dynamic_ruleset/latejoin/infiltrator) + +///subtype to handle checking players +/datum/dynamic_ruleset/midround/from_living + weight = 0 + abstract_type = /datum/dynamic_ruleset/midround/from_living + +/datum/dynamic_ruleset/midround/from_living/ready(forced) + if(!check_candidates()) + return FALSE + return ..() + + +/// Midround Traitor Ruleset (From Living) +/datum/dynamic_ruleset/midround/from_living/autotraitor + name = "Symphionia Sleeper Agent" + midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT + antag_datum = /datum/antagonist/traitor/infiltrator/sleeper_agent + antag_flag = ROLE_SLEEPER_AGENT + antag_flag_override = ROLE_TRAITOR + protected_roles = list( + JOB_CAPTAIN, + JOB_DETECTIVE, + JOB_HEAD_OF_PERSONNEL, + JOB_HEAD_OF_SECURITY, + JOB_PRISONER, + JOB_SECURITY_OFFICER, + JOB_WARDEN, + ) + restricted_roles = list( + JOB_AI, + JOB_CYBORG, + ROLE_POSITRONIC_BRAIN, + ) + required_candidates = 1 + weight = 35 + cost = 3 + requirements = list(3,3,3,3,3,3,3,3,3,3) + repeatable = TRUE + +/datum/dynamic_ruleset/midround/from_living/autotraitor/trim_candidates() + ..() + candidates = living_players + for(var/mob/living/player in candidates) + if(issilicon(player)) // Your assigned role doesn't change when you are turned into a silicon. + candidates -= player + else if(is_centcom_level(player.z)) + candidates -= player // We don't autotator people in CentCom + else if(player.mind && (player.mind.special_role || player.mind.antag_datums?.len > 0)) + candidates -= player // We don't autotator people with roles already + +/datum/dynamic_ruleset/midround/from_living/autotraitor/execute() + var/mob/M = pick(candidates) + assigned += M + candidates -= M + var/datum/antagonist/traitor/infiltrator/sleeper_agent/newTraitor = new + M.mind.add_antag_datum(newTraitor) + message_admins("[ADMIN_LOOKUPFLW(M)] was selected by the [name] ruleset and has been made into a midround traitor.") + log_dynamic("[key_name(M)] was selected by the [name] ruleset and has been made into a midround traitor.") + return TRUE + + +////////////////////////////////////////////// +// // +// Malfunctioning AI // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/midround/malf + name = "Malfunctioning AI" + midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY + antag_datum = /datum/antagonist/malf_ai + antag_flag = ROLE_MALF_MIDROUND + antag_flag_override = ROLE_MALF + enemy_roles = list( + JOB_CHEMIST, + JOB_CHIEF_ENGINEER, + JOB_HEAD_OF_SECURITY, + JOB_RESEARCH_DIRECTOR, + JOB_SCIENTIST, + JOB_SECURITY_OFFICER, + JOB_WARDEN, + ) + exclusive_roles = list(JOB_AI) + required_enemies = list(4,4,4,4,4,4,2,2,2,0) + required_candidates = 1 + minimum_players = 25 + weight = 2 + cost = 10 + required_type = /mob/living/silicon/ai + blocking_rules = list(/datum/dynamic_ruleset/roundstart/malf_ai) + +/datum/dynamic_ruleset/midround/malf/trim_candidates() + ..() + candidates = living_players + for(var/mob/living/player in candidates) + if(!isAI(player)) + candidates -= player + continue + + if(is_centcom_level(player.z)) + candidates -= player + continue + + if(player.mind && (player.mind.special_role || player.mind.antag_datums?.len > 0)) + candidates -= player + +/datum/dynamic_ruleset/midround/malf/execute() + if(!candidates || !candidates.len) + return FALSE + var/mob/living/silicon/ai/new_malf_ai = pick_n_take(candidates) + assigned += new_malf_ai.mind + var/datum/antagonist/malf_ai/malf_antag_datum = new + new_malf_ai.mind.special_role = antag_flag + new_malf_ai.mind.add_antag_datum(malf_antag_datum) + if(prob(MALF_ION_PROB)) + priority_announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", ANNOUNCER_IONSTORM) + if(prob(REPLACE_LAW_WITH_ION_PROB)) + new_malf_ai.replace_random_law(generate_ion_law(), list(LAW_INHERENT, LAW_SUPPLIED, LAW_ION), LAW_ION) + else + new_malf_ai.add_ion_law(generate_ion_law()) + return TRUE + +/// Midround Wizard Ruleset (From Ghosts) +/datum/dynamic_ruleset/midround/from_ghosts/wizard + name = "Wizard" + midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY + antag_datum = /datum/antagonist/wizard + antag_flag = ROLE_WIZARD_MIDROUND + antag_flag_override = ROLE_WIZARD + required_enemies = list(2,2,1,1,1,1,1,0,0,0) + required_candidates = 1 + weight = 1 + cost = 10 + requirements = REQUIREMENTS_VERY_HIGH_THREAT_NEEDED + flags = HIGH_IMPACT_RULESET + ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_WIZARDDEN) + +/datum/dynamic_ruleset/midround/from_ghosts/wizard/ready(forced = FALSE) + if(!check_candidates()) + return FALSE + if(!length(GLOB.wizardstart)) + log_admin("Cannot accept Wizard ruleset. Couldn't find any wizard spawn points.") + message_admins("Cannot accept Wizard ruleset. Couldn't find any wizard spawn points.") + return FALSE + return ..() + +/datum/dynamic_ruleset/midround/from_ghosts/wizard/finish_setup(mob/new_character, index) + ..() + new_character.forceMove(pick(GLOB.wizardstart)) + +/// Midround Nuclear Operatives Ruleset (From Ghosts) +/datum/dynamic_ruleset/midround/from_ghosts/nuclear + name = "Nuclear Assault" + midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY + antag_flag = ROLE_OPERATIVE_MIDROUND + antag_flag_override = ROLE_OPERATIVE + antag_datum = /datum/antagonist/nukeop + enemy_roles = list( + JOB_AI, + JOB_CYBORG, + JOB_CAPTAIN, + JOB_DETECTIVE, + JOB_HEAD_OF_SECURITY, + JOB_SECURITY_OFFICER, + JOB_WARDEN, + ) + required_enemies = list(3,3,3,3,3,2,1,1,0,0) + required_candidates = 5 + weight = 5 + cost = 7 + minimum_round_time = 70 MINUTES + requirements = REQUIREMENTS_VERY_HIGH_THREAT_NEEDED + ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_NUKIEBASE) + flags = HIGH_IMPACT_RULESET + + var/list/operative_cap = list(2,2,3,3,4,5,5,5,5,5) + +/datum/dynamic_ruleset/midround/from_ghosts/nuclear/acceptable(population=0, threat_level=0) + if (locate(/datum/dynamic_ruleset/roundstart/nuclear) in SSdynamic.executed_rules) + return FALSE // Unavailable if nuke ops were already sent at roundstart + indice_pop = min(operative_cap.len, round(living_players.len/5)+1) + required_candidates = operative_cap[indice_pop] + return ..() + +/datum/dynamic_ruleset/midround/from_ghosts/nuclear/ready(forced = FALSE) + if (!check_candidates()) + return FALSE + return ..() + +/datum/dynamic_ruleset/midround/from_ghosts/nuclear/finish_applications() + var/mob/leader = get_most_experienced(assigned, ROLE_NUCLEAR_OPERATIVE) + if(leader) + assigned.Remove(leader) + assigned.Insert(1, leader) + return ..() + +/datum/dynamic_ruleset/midround/from_ghosts/nuclear/finish_setup(mob/new_character, index) + new_character.mind.set_assigned_role(SSjob.GetJobType(/datum/job/nuclear_operative)) + new_character.mind.special_role = ROLE_NUCLEAR_OPERATIVE + if(index == 1) + var/datum/antagonist/nukeop/leader/leader_antag_datum = new() + new_character.mind.add_antag_datum(leader_antag_datum) + return + return ..() + +/// Midround Blob Ruleset (From Ghosts) +/datum/dynamic_ruleset/midround/from_ghosts/blob + name = "Blob" + midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY + antag_datum = /datum/antagonist/blob + antag_flag = ROLE_BLOB + required_enemies = list(2,2,1,1,1,1,1,0,0,0) + required_candidates = 1 + minimum_round_time = 35 MINUTES + weight = 3 + cost = 8 + minimum_players = 25 + repeatable = TRUE + +/datum/dynamic_ruleset/midround/from_ghosts/blob/generate_ruleset_body(mob/applicant) + var/body = applicant.become_overmind() + return body + +/// Midround Blob Infection Ruleset (From Living) +/datum/dynamic_ruleset/midround/from_living/blob_infection + name = "Blob Infection" + midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY + antag_datum = /datum/antagonist/blob/infection + antag_flag = ROLE_BLOB_INFECTION + antag_flag_override = ROLE_BLOB + protected_roles = list( + JOB_CAPTAIN, + JOB_DETECTIVE, + JOB_HEAD_OF_SECURITY, + JOB_PRISONER, + JOB_SECURITY_OFFICER, + JOB_WARDEN, + ) + restricted_roles = list( + JOB_AI, + JOB_CYBORG, + ROLE_POSITRONIC_BRAIN, + ) + required_enemies = list(2,2,1,1,1,1,1,0,0,0) + required_candidates = 1 + minimum_round_time = 35 MINUTES + weight = 3 + cost = 10 + minimum_players = 25 + repeatable = TRUE + +/datum/dynamic_ruleset/midround/from_living/blob_infection/trim_candidates() + ..() + candidates = living_players + for(var/mob/living/player as anything in candidates) + var/turf/player_turf = get_turf(player) + if(!player_turf || !is_station_level(player_turf.z)) + candidates -= player + continue + + if(player.mind && (player.mind.special_role || length(player.mind.antag_datums) > 0)) + candidates -= player + +/datum/dynamic_ruleset/midround/from_living/blob_infection/execute() + if(!candidates || !candidates.len) + return FALSE + var/mob/living/carbon/human/blob_antag = pick_n_take(candidates) + assigned += blob_antag.mind + blob_antag.mind.special_role = antag_flag + return ..() + +/// Midround Xenomorph Ruleset (From Ghosts) +/datum/dynamic_ruleset/midround/from_ghosts/xenomorph + name = "Alien Infestation" + midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY + antag_datum = /datum/antagonist/xeno + antag_flag = ROLE_ALIEN + required_enemies = list(2,2,1,1,1,1,1,0,0,0) + required_candidates = 1 + minimum_round_time = 40 MINUTES + weight = 5 + cost = 10 + minimum_players = 25 + repeatable = TRUE + var/list/vents = list() + +/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/forget_startup() + vents = list() + return ..() + +/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/execute() + // 50% chance of being incremented by one + required_candidates += prob(50) + var/list/vent_pumps = SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/atmospherics/components/unary/vent_pump) + for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent as anything in vent_pumps) + if(QDELETED(temp_vent)) + continue + if(is_station_level(temp_vent.loc.z) && !temp_vent.welded) + var/datum/pipeline/temp_vent_parent = temp_vent.parents[1] + if(!temp_vent_parent) + continue // No parent vent + // Stops Aliens getting stuck in small networks. + // See: Security, Virology + if(temp_vent_parent.other_atmos_machines.len > 20) + vents += temp_vent + if(!vents.len) + return FALSE + . = ..() + +/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/generate_ruleset_body(mob/applicant) + var/obj/vent = pick_n_take(vents) + var/mob/living/carbon/alien/larva/new_xeno = new(vent.loc) + new_xeno.key = applicant.key + new_xeno.move_into_vent(vent) + message_admins("[ADMIN_LOOKUPFLW(new_xeno)] has been made into an alien by the midround ruleset.") + log_dynamic("[key_name(new_xeno)] was spawned as an alien by the midround ruleset.") + return new_xeno + +/// Midround Nightmare Ruleset (From Ghosts) +/datum/dynamic_ruleset/midround/from_ghosts/nightmare + name = "Nightmare" + midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT + antag_datum = /datum/antagonist/nightmare + antag_flag = ROLE_NIGHTMARE + antag_flag_override = ROLE_ALIEN + required_enemies = list(2,2,1,1,1,1,1,0,0,0) + required_candidates = 1 + weight = 3 + cost = 5 + minimum_players = 15 + repeatable = TRUE + +/datum/dynamic_ruleset/midround/from_ghosts/nightmare/acceptable(population = 0, threat_level = 0) + var/turf/spawn_loc = find_maintenance_spawn(atmos_sensitive = TRUE, require_darkness = TRUE) //Checks if there's a single safe, dark tile on station. + if(!spawn_loc) + return FALSE + return ..() + +/datum/dynamic_ruleset/midround/from_ghosts/nightmare/generate_ruleset_body(mob/applicant) + var/datum/mind/player_mind = new /datum/mind(applicant.key) + player_mind.active = TRUE + + var/mob/living/carbon/human/new_nightmare = new (find_maintenance_spawn(atmos_sensitive = TRUE, require_darkness = TRUE)) + player_mind.transfer_to(new_nightmare) + player_mind.set_assigned_role(SSjob.GetJobType(/datum/job/nightmare)) + player_mind.special_role = ROLE_NIGHTMARE + player_mind.add_antag_datum(/datum/antagonist/nightmare) + new_nightmare.set_species(/datum/species/shadow/nightmare) + + playsound(new_nightmare, 'sound/magic/ethereal_exit.ogg', 50, TRUE, -1) + message_admins("[ADMIN_LOOKUPFLW(new_nightmare)] has been made into a Nightmare by the midround ruleset.") + log_dynamic("[key_name(new_nightmare)] was spawned as a Nightmare by the midround ruleset.") + return new_nightmare + +/// Midround Space Dragon Ruleset (From Ghosts) +/datum/dynamic_ruleset/midround/from_ghosts/space_dragon + name = "Space Dragon" + midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY + antag_datum = /datum/antagonist/space_dragon + antag_flag = ROLE_SPACE_DRAGON + antag_flag_override = ROLE_SPACE_DRAGON + required_enemies = list(2,2,1,1,1,1,1,0,0,0) + required_candidates = 1 + weight = 4 + cost = 7 + minimum_players = 25 + repeatable = TRUE + var/list/spawn_locs = list() + +/datum/dynamic_ruleset/midround/from_ghosts/space_dragon/forget_startup() + spawn_locs = list() + return ..() + +/datum/dynamic_ruleset/midround/from_ghosts/space_dragon/execute() + for(var/obj/effect/landmark/carpspawn/C in GLOB.landmarks_list) + spawn_locs += (C.loc) + if(!spawn_locs.len) + message_admins("No valid spawn locations found, aborting...") + return MAP_ERROR + . = ..() + +/datum/dynamic_ruleset/midround/from_ghosts/space_dragon/generate_ruleset_body(mob/applicant) + var/datum/mind/player_mind = new /datum/mind(applicant.key) + player_mind.active = TRUE + + var/mob/living/basic/space_dragon/S = new (pick(spawn_locs)) + player_mind.transfer_to(S) + player_mind.add_antag_datum(/datum/antagonist/space_dragon) + + playsound(S, 'sound/magic/ethereal_exit.ogg', 50, TRUE, -1) + message_admins("[ADMIN_LOOKUPFLW(S)] has been made into a Space Dragon by the midround ruleset.") + log_dynamic("[key_name(S)] was spawned as a Space Dragon by the midround ruleset.") + priority_announce("A large organic energy flux has been recorded near of [station_name()], please stand-by.", "Lifesign Alert") + return S + +/datum/dynamic_ruleset/midround/from_ghosts/abductors + name = "Abductors" + midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT + antag_datum = /datum/antagonist/abductor + antag_flag = ROLE_ABDUCTOR + required_enemies = list(2,2,1,1,1,1,1,0,0,0) + required_candidates = 2 + required_applicants = 2 + weight = 4 + cost = 7 + minimum_players = 25 + repeatable = TRUE + ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_ABDUCTOR_SHIPS) + + var/datum/team/abductor_team/new_team + +/datum/dynamic_ruleset/midround/from_ghosts/abductors/forget_startup() + new_team = null + return ..() + +/datum/dynamic_ruleset/midround/from_ghosts/abductors/ready(forced = FALSE) + if (required_candidates > (dead_players.len + list_observers.len)) + return FALSE + return ..() + +/datum/dynamic_ruleset/midround/from_ghosts/abductors/finish_setup(mob/new_character, index) + if (index == 1) // Our first guy is the scientist. We also initialize the team here as well since this should only happen once per pair of abductors. + new_team = new + if(new_team.team_number > ABDUCTOR_MAX_TEAMS) + return MAP_ERROR + var/datum/antagonist/abductor/scientist/new_role = new + new_character.mind.add_antag_datum(new_role, new_team) + else // Our second guy is the agent, team is already created, don't need to make another one. + var/datum/antagonist/abductor/agent/new_role = new + new_character.mind.add_antag_datum(new_role, new_team) + +/// Midround Space Ninja Ruleset (From Ghosts) +/datum/dynamic_ruleset/midround/from_ghosts/space_ninja + name = "Space Ninja" + midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY + antag_datum = /datum/antagonist/ninja + antag_flag = ROLE_NINJA + required_enemies = list(2,2,1,1,1,1,1,0,0,0) + required_candidates = 1 + weight = 4 + cost = 8 + minimum_players = 30 + repeatable = TRUE + ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_NINJA_HOLDING_FACILITY) // I mean, no one uses the nets anymore but whateva + + var/list/spawn_locs = list() + +/datum/dynamic_ruleset/midround/from_ghosts/space_ninja/forget_startup() + spawn_locs = list() + return ..() + +/datum/dynamic_ruleset/midround/from_ghosts/space_ninja/execute() + for(var/obj/effect/landmark/carpspawn/carp_spawn in GLOB.landmarks_list) + if(!isturf(carp_spawn.loc)) + stack_trace("Carp spawn found not on a turf: [carp_spawn.type] on [isnull(carp_spawn.loc) ? "null" : carp_spawn.loc.type]") + continue + spawn_locs += carp_spawn.loc + if(!spawn_locs.len) + message_admins("No valid spawn locations found, aborting...") + return MAP_ERROR + return ..() + +/datum/dynamic_ruleset/midround/from_ghosts/space_ninja/generate_ruleset_body(mob/applicant) + var/mob/living/carbon/human/ninja = create_space_ninja(pick(spawn_locs)) + ninja.key = applicant.key + ninja.mind.add_antag_datum(/datum/antagonist/ninja) + + message_admins("[ADMIN_LOOKUPFLW(ninja)] has been made into a Space Ninja by the midround ruleset.") + log_dynamic("[key_name(ninja)] was spawned as a Space Ninja by the midround ruleset.") + return ninja + +/// Midround Spiders Ruleset (From Ghosts) +/datum/dynamic_ruleset/midround/spiders + name = "Spiders" + midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY + antag_flag = ROLE_SPIDER + required_type = /mob/dead/observer + required_enemies = list(2,2,1,1,1,1,1,0,0,0) + required_candidates = 0 + weight = 3 + cost = 8 + minimum_players = 27 + repeatable = TRUE + var/spawncount = 2 + +/datum/dynamic_ruleset/midround/spiders/execute() + create_midwife_eggs(spawncount) + return ..() + +/// Midround Revenant Ruleset (From Ghosts) +/datum/dynamic_ruleset/midround/from_ghosts/revenant + name = "Revenant" + midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT + antag_datum = /datum/antagonist/revenant + antag_flag = ROLE_REVENANT + required_enemies = list(2,2,1,1,1,1,1,0,0,0) + required_candidates = 1 + weight = 4 + cost = 5 + minimum_players = 15 + repeatable = TRUE + var/dead_mobs_required = 20 + var/need_extra_spawns_value = 15 + var/list/spawn_locs = list() + +/datum/dynamic_ruleset/midround/from_ghosts/revenant/forget_startup() + spawn_locs = list() + return ..() + +/datum/dynamic_ruleset/midround/from_ghosts/revenant/acceptable(population=0, threat_level=0) + if(GLOB.dead_mob_list.len < dead_mobs_required) + return FALSE + return ..() + +/datum/dynamic_ruleset/midround/from_ghosts/revenant/execute() + for(var/mob/living/corpse in GLOB.dead_mob_list) //look for any dead bodies + var/turf/corpse_turf = get_turf(corpse) + if(corpse_turf && is_station_level(corpse_turf.z)) + spawn_locs += corpse_turf + if(!spawn_locs.len || spawn_locs.len < need_extra_spawns_value) //look for any morgue trays, crematoriums, ect if there weren't alot of dead bodies on the station to pick from + for(var/obj/structure/bodycontainer/corpse_container in GLOB.bodycontainers) + var/turf/container_turf = get_turf(corpse_container) + if(container_turf && is_station_level(container_turf.z)) + spawn_locs += container_turf + if(!spawn_locs.len) //If we can't find any valid spawnpoints, try the carp spawns + for(var/obj/effect/landmark/carpspawn/carp_spawnpoint in GLOB.landmarks_list) + if(isturf(carp_spawnpoint.loc)) + spawn_locs += carp_spawnpoint.loc + if(!spawn_locs.len) //If we can't find THAT, then just give up and cry + return FALSE + . = ..() + +/datum/dynamic_ruleset/midround/from_ghosts/revenant/generate_ruleset_body(mob/applicant) + var/mob/living/basic/revenant/revenant = new(pick(spawn_locs)) + revenant.key = applicant.key + message_admins("[ADMIN_LOOKUPFLW(revenant)] has been made into a revenant by the midround ruleset.") + log_game("[key_name(revenant)] was spawned as a revenant by the midround ruleset.") + return revenant + +/// Midround Sentient Disease Ruleset (From Ghosts) +/datum/dynamic_ruleset/midround/from_ghosts/sentient_disease + name = "Sentient Disease" + midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY + antag_datum = /datum/antagonist/disease + antag_flag = ROLE_SENTIENT_DISEASE + required_candidates = 1 + minimum_players = 25 + weight = 4 + cost = 8 + repeatable = TRUE + +/datum/dynamic_ruleset/midround/from_ghosts/sentient_disease/generate_ruleset_body(mob/applicant) + var/mob/camera/disease/virus = new /mob/camera/disease(SSmapping.get_station_center()) + virus.key = applicant.key + INVOKE_ASYNC(virus, TYPE_PROC_REF(/mob/camera/disease, pick_name)) + message_admins("[ADMIN_LOOKUPFLW(virus)] has been made into a sentient disease by the midround ruleset.") + log_game("[key_name(virus)] was spawned as a sentient disease by the midround ruleset.") + return virus + +/// Midround Space Pirates Ruleset (From Ghosts) +/datum/dynamic_ruleset/midround/pirates + name = "Space Pirates" + midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT + antag_flag = "Space Pirates" + required_type = /mob/dead/observer + required_enemies = list(2,2,1,1,1,1,1,0,0,0) + required_candidates = 0 + weight = 3 + cost = 8 + minimum_players = 20 + repeatable = TRUE + +/datum/dynamic_ruleset/midround/pirates/acceptable(population=0, threat_level=0) + if (SSmapping.is_planetary() || GLOB.light_pirate_gangs.len == 0) + return FALSE + return ..() + +/datum/dynamic_ruleset/midround/pirates/execute() + send_pirate_threat(GLOB.light_pirate_gangs) + return ..() + +/// Dangerous Space Pirates ruleset +/datum/dynamic_ruleset/midround/dangerous_pirates + name = "Dangerous Space Pirates" + midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY + antag_flag = "Space Pirates" + required_type = /mob/dead/observer + required_enemies = list(2,2,1,1,1,1,1,0,0,0) + required_candidates = 0 + weight = 3 + cost = 8 + minimum_players = 25 + repeatable = TRUE + +/datum/dynamic_ruleset/midround/dangerous_pirates/acceptable(population=0, threat_level=0) + if (SSmapping.is_planetary() || GLOB.heavy_pirate_gangs.len == 0) + return FALSE + return ..() + +/datum/dynamic_ruleset/midround/dangerous_pirates/execute() + send_pirate_threat(GLOB.heavy_pirate_gangs) + return ..() + +/// Midround Obsessed Ruleset (From Living) +/datum/dynamic_ruleset/midround/from_living/obsessed + name = "Obsessed" + midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT + antag_datum = /datum/antagonist/obsessed + antag_flag = ROLE_OBSESSED + restricted_roles = list( + JOB_AI, + JOB_CYBORG, + ROLE_POSITRONIC_BRAIN, + ) + required_enemies = list(2,2,1,1,1,1,1,0,0,0) + required_candidates = 1 + weight = 4 + cost = 3 // Doesn't have the same impact on rounds as revenants, dragons, sentient disease (10) or syndicate infiltrators (5). + repeatable = TRUE + +/datum/dynamic_ruleset/midround/from_living/obsessed/trim_candidates() + ..() + candidates = living_players + for(var/mob/living/carbon/human/candidate in candidates) + if( \ + !candidate.get_organ_by_type(/obj/item/organ/internal/brain) \ + || candidate.mind.has_antag_datum(/datum/antagonist/obsessed) \ + || candidate.stat == DEAD \ + || !(ROLE_OBSESSED in candidate.client?.prefs?.be_special) \ + || !candidate.mind.assigned_role \ + ) + candidates -= candidate + +/datum/dynamic_ruleset/midround/from_living/obsessed/execute() + var/mob/living/carbon/human/obsessed = pick_n_take(candidates) + obsessed.gain_trauma(/datum/brain_trauma/special/obsessed) + message_admins("[ADMIN_LOOKUPFLW(obsessed)] has been made Obsessed by the midround ruleset.") + log_game("[key_name(obsessed)] was made Obsessed by the midround ruleset.") + return TRUE + +/// Midround Space Changeling Ruleset (From Ghosts) +/datum/dynamic_ruleset/midround/from_ghosts/changeling_midround + name = "Space Changeling" + midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT + antag_datum = /datum/antagonist/changeling/space + antag_flag = ROLE_CHANGELING_MIDROUND + antag_flag_override = ROLE_CHANGELING + required_type = /mob/dead/observer + required_enemies = list(2,2,1,1,1,1,1,0,0,0) + required_candidates = 1 + weight = 3 + cost = 7 + minimum_players = 15 + repeatable = TRUE + +/datum/dynamic_ruleset/midround/from_ghosts/changeling_midround/generate_ruleset_body(mob/applicant) + var/body = generate_changeling_meteor(applicant) + message_admins("[ADMIN_LOOKUPFLW(body)] has been made into a space changeling by the midround ruleset.") + log_dynamic("[key_name(body)] was spawned as a space changeling by the midround ruleset.") + return body + +/// Midround Paradox Clone Ruleset (From Ghosts) +/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone + name = "Paradox Clone" + midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT + antag_datum = /datum/antagonist/paradox_clone + antag_flag = ROLE_PARADOX_CLONE + enemy_roles = list( + JOB_CAPTAIN, + JOB_DETECTIVE, + JOB_HEAD_OF_SECURITY, + JOB_SECURITY_OFFICER, + JOB_WARDEN, + ) + required_enemies = list(2, 2, 1, 1, 1, 1, 1, 0, 0, 0) + required_candidates = 1 + weight = 4 + cost = 3 + repeatable = TRUE + var/list/possible_spawns = list() ///places the antag can spawn + +/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/forget_startup() + possible_spawns = list() + return ..() + +/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/execute() + possible_spawns += find_maintenance_spawn(atmos_sensitive = TRUE, require_darkness = FALSE) + if(!possible_spawns.len) + return MAP_ERROR + return ..() + +/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/generate_ruleset_body(mob/applicant) + var/datum/mind/player_mind = new /datum/mind(applicant.key) + player_mind.active = TRUE + + var/mob/living/carbon/human/clone_victim = find_original() + var/mob/living/carbon/human/clone = clone_victim.make_full_human_copy(pick(possible_spawns)) + player_mind.transfer_to(clone) + + var/datum/antagonist/paradox_clone/new_datum = player_mind.add_antag_datum(/datum/antagonist/paradox_clone) + new_datum.original_ref = WEAKREF(clone_victim.mind) + new_datum.setup_clone() + + playsound(clone, 'sound/weapons/zapbang.ogg', 30, TRUE) + new /obj/item/storage/toolbox/mechanical(clone.loc) //so they dont get stuck in maints + + message_admins("[ADMIN_LOOKUPFLW(clone)] has been made into a Paradox Clone by the midround ruleset.") + clone.log_message("was spawned as a Paradox Clone of [key_name(clone)] by the midround ruleset.", LOG_GAME) + + return clone + +/** + * Trims through GLOB.player_list and finds a target + * Returns a single human victim, if none is possible then returns null. + */ +/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/proc/find_original() + var/list/possible_targets = list() + + for(var/mob/living/carbon/human/player in GLOB.player_list) + if(!player.client || !player.mind || player.stat) + continue + if(!(player.mind.assigned_role.job_flags & JOB_CREW_MEMBER)) + continue + possible_targets += player + + if(possible_targets.len) + return pick(possible_targets) + return FALSE + +#undef MALF_ION_PROB +#undef REPLACE_LAW_WITH_ION_PROB diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm similarity index 94% rename from code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm rename to code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm index a90eba738c146c..290b71161625ec 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm +++ b/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm @@ -112,45 +112,35 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE) JOB_AI, JOB_CYBORG, ) - required_candidates = 2 - weight = 2 - cost = 12 + weight = 5 + cost = 8 scaling_cost = 15 requirements = list(40,30,30,20,20,15,15,15,10,10) - antag_cap = 2 // Can pick 3 per team, but rare enough it doesn't matter. - var/list/datum/team/brother_team/pre_brother_teams = list() - var/const/min_team_size = 2 - -/datum/dynamic_ruleset/roundstart/traitorbro/forget_startup() - pre_brother_teams = list() - return ..() + antag_cap = 1 /datum/dynamic_ruleset/roundstart/traitorbro/pre_execute(population) . = ..() - var/num_teams = (get_antag_cap(population)/min_team_size) * (scaled_times + 1) // 1 team per scaling - for(var/j = 1 to num_teams) - if(candidates.len < min_team_size || candidates.len < required_candidates) + + for (var/_ in 1 to get_antag_cap(population) * (scaled_times + 1)) + var/mob/candidate = pick_n_take(candidates) + if (isnull(candidate)) break - var/datum/team/brother_team/team = new - var/team_size = prob(10) ? min(3, candidates.len) : 2 - for(var/k = 1 to team_size) - var/mob/bro = pick_n_take(candidates) - assigned += bro.mind - team.add_member(bro.mind) - bro.mind.special_role = "brother" - bro.mind.restricted_roles = restricted_roles - GLOB.pre_setup_antags += bro.mind - pre_brother_teams += team + + assigned += candidate.mind + candidate.mind.restricted_roles = restricted_roles + candidate.mind.special_role = ROLE_BROTHER + GLOB.pre_setup_antags += candidate.mind + return TRUE /datum/dynamic_ruleset/roundstart/traitorbro/execute() - for(var/datum/team/brother_team/team in pre_brother_teams) - team.pick_meeting_area() + for (var/datum/mind/mind in assigned) + var/datum/team/brother_team/team = new + team.add_member(mind) team.forge_brother_objectives() - for(var/datum/mind/M in team.members) - M.add_antag_datum(/datum/antagonist/brother, team) - GLOB.pre_setup_antags -= M - team.update_name() + mind.add_antag_datum(/datum/antagonist/brother, team) + GLOB.pre_setup_antags -= mind + return TRUE ////////////////////////////////////////////// @@ -615,9 +605,9 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE) . = ..() message_admins("Starting a round of extended.") log_game("Starting a round of extended.") - mode.spend_roundstart_budget(mode.round_start_budget) - mode.spend_midround_budget(mode.mid_round_budget) - mode.threat_log += "[worldtime2text()]: Extended ruleset set threat to 0." + SSdynamic.spend_roundstart_budget(SSdynamic.round_start_budget) + SSdynamic.spend_midround_budget(SSdynamic.mid_round_budget) + SSdynamic.threat_log += "[worldtime2text()]: Extended ruleset set threat to 0." return TRUE ////////////////////////////////////////////// diff --git a/code/game/gamemodes/dynamic/dynamic_unfavorable_situation.dm b/code/controllers/subsystem/dynamic/dynamic_unfavorable_situation.dm similarity index 90% rename from code/game/gamemodes/dynamic/dynamic_unfavorable_situation.dm rename to code/controllers/subsystem/dynamic/dynamic_unfavorable_situation.dm index 1be6511433c5e9..994f2e3f5de787 100644 --- a/code/game/gamemodes/dynamic/dynamic_unfavorable_situation.dm +++ b/code/controllers/subsystem/dynamic/dynamic_unfavorable_situation.dm @@ -2,12 +2,12 @@ /// This is used for impactful events like traitors hacking and creating more threat, or a revolutions victory. /// It tries to spawn a heavy midround if possible, otherwise it will trigger a "bad" random event after a short period. /// Calling this function will not use up any threat. -/datum/game_mode/dynamic/proc/unfavorable_situation() +/datum/controller/subsystem/dynamic/proc/unfavorable_situation() SHOULD_NOT_SLEEP(TRUE) INVOKE_ASYNC(src, PROC_REF(_unfavorable_situation)) -/datum/game_mode/dynamic/proc/_unfavorable_situation() +/datum/controller/subsystem/dynamic/proc/_unfavorable_situation() var/static/list/unfavorable_random_events = list() if (!length(unfavorable_random_events)) unfavorable_random_events = generate_unfavourable_events() @@ -24,7 +24,7 @@ picking_specific_rule(heavy_ruleset, forced = TRUE, ignore_cost = TRUE) /// Return a valid heavy dynamic ruleset, or an empty list if there's no time to run any rulesets -/datum/game_mode/dynamic/proc/generate_unfavourable_heavy_rulesets() +/datum/controller/subsystem/dynamic/proc/generate_unfavourable_heavy_rulesets() if (EMERGENCY_PAST_POINT_OF_NO_RETURN) return list() @@ -58,7 +58,7 @@ return possible_heavies /// Filter the below list by which events can actually run on this map -/datum/game_mode/dynamic/proc/generate_unfavourable_events() +/datum/controller/subsystem/dynamic/proc/generate_unfavourable_events() var/static/list/unfavorable_random_events = list( /datum/round_event_control/earthquake, /datum/round_event_control/immovable_rod, diff --git a/code/controllers/subsystem/dynamic/readme.md b/code/controllers/subsystem/dynamic/readme.md new file mode 100644 index 00000000000000..3701a3354ef4b8 --- /dev/null +++ b/code/controllers/subsystem/dynamic/readme.md @@ -0,0 +1,194 @@ +# Dynamic Mode + +## Roundstart + +Dynamic rolls threat based on a special sauce formula: + +> [dynamic_curve_width][/datum/controller/global_vars/var/dynamic_curve_width] \* tan((3.1416 \* (rand() - 0.5) \* 57.2957795)) + [dynamic_curve_centre][/datum/controller/global_vars/var/dynamic_curve_centre] + +This threat is split into two separate budgets--`round_start_budget` and `mid_round_budget`. For example, a round with 50 threat might be split into a 30 roundstart budget, and a 20 midround budget. The roundstart budget is used to apply antagonists applied on readied players when the roundstarts (`/datum/dynamic_ruleset/roundstart`). The midround budget is used for two types of rulesets: +- `/datum/dynamic_ruleset/midround` - Rulesets that apply to either existing alive players, or to ghosts. Think Blob or Space Ninja, which poll ghosts asking if they want to play as these roles. +- `/datum/dynamic_ruleset/latejoin` - Rulesets that apply to the next player that joins. Think Symphionia Infiltrator, which converts a player just joining an existing round into traitor. + +This split is done with a similar method, known as the ["lorentz distribution"](https://en.wikipedia.org/wiki/Cauchy_distribution), exists to create a bell curve that ensures that while most rounds will have a threat level around ~50, chaotic and tame rounds still exist for variety. + +The process of creating these numbers occurs in `/datum/controller/subsystem/dynamic/proc/generate_threat` (for creating the threat level) and `/datum/controller/subsystem/dynamic/proc/generate_budgets` (for splitting the threat level into budgets). + +## Deciding roundstart threats +In `/datum/controller/subsystem/dynamic/proc/roundstart()` (called when no admin chooses the rulesets explicitly), Dynamic uses the available roundstart budget to pick threats. This is done through the following system: + +- All roundstart rulesets (remember, `/datum/dynamic_ruleset/roundstart`) are put into an associative list with their weight as the values (`drafted_rules`). +- Until there is either no roundstart budget left, or until there is no ruleset we can choose from with the available threat, a `pickweight` is done based on the drafted_rules. If the same threat is picked twice, it will "scale up". The meaning of this depends on the ruleset itself, using the `scaled_times` variable; traitors for instance will create more the higher they scale. + - If a ruleset is chosen with the `HIGH_IMPACT_RULESET` in its `flags`, then all other `HIGH_IMPACT_RULESET`s will be removed from `drafted_rules`. This is so that only one can ever be chosen. + - If a ruleset has `LONE_RULESET` in its `flags`, then it will be removed from `drafted_rules`. This is to ensure it will only ever be picked once. An example of this in use is Wizard, to avoid creating multiple wizards. +- After all roundstart threats are chosen, `/datum/dynamic_ruleset/proc/picking_roundstart_rule` is called for each, passing in the ruleset and the number of times it is scaled. + - In this stage, `pre_execute` is called, which is the function that will determine what players get what antagonists. If this function returns FALSE for whatever reason (in the case of an error), then its threat is refunded. + +After this process is done, any leftover roundstart threat will be given to the existing midround budget (done in `/datum/controller/subsystem/dynamic/pre_setup()`). + +## Deciding midround threats + +### Frequency + +The frequency of midround threats is based on the midround threat of the round. The number of midround threats that will roll is `threat_level` / `threat_per_midround_roll` (configurable), rounded up. For example, if `threat_per_midround_roll` is set to 5, then for every 5 threat, one midround roll will be added. If you have 6 threat, with this configuration, you will get 2 midround rolls. + +These midround roll points are then equidistantly spaced across the round, starting from `midround_lower_bound` (configurable) to `midround_upper_bound` (configurable), with a +/- of `midround_roll_distance` (configurable). + +For example, if: +1. `midround_lower_bound` is `10 MINUTES` +2. `midround_upper_bound` is `100 MINUTES` +3. `midround_roll_distance` is `3 MINUTES` +4. You have 5 midround rolls for the round + +...then those 5 midround rolls will be placed equidistantly (meaning equally apart) across the first 10-100 minutes of the round. Every individual roll will then be adjusted to either be 3 minutes earlier, or 3 minutes later. + +### Threat variety + +Threats are split between **heavy** rulesets and **light** rulesets. A heavy ruleset includes major threats like space dragons or blobs, while light rulesets are ones that don't often cause shuttle calls when rolled, such as revenants or traitors (sleeper agents). + +When a midround roll occurs, the decision to choose between light or heavy depends on the current round time. If it is less than `midround_light_upper_bound` (configurable), then it is guaranteed to be a light ruleset. If it is more than `midround_heavy_lower_bound`, then it is guaranteed to be a heavy ruleset. If it is any point in between, it will interpolate the value between those. This means that the longer the round goes on, the more likely you are to get a heavy ruleset. + +If no heavy ruleset can run, such as not having enough threat, then a light ruleset is guaranteed to run. + +## Rule Processing + +Calls [rule_process][/datum/dynamic_ruleset/proc/rule_process] on every rule which is in the current_rules list. +Every sixty seconds, update_playercounts() +Midround injection time is checked against world.time to see if an injection should happen. +If midround injection time is lower than world.time, it updates playercounts again, then tries to inject and generates a new cooldown regardless of whether a rule is picked. + +## Latejoin + +make_antag_chance(newPlayer) -> (For each latespawn rule...) +-> acceptable(living players, threat_level) -> trim_candidates() -> ready(forced=FALSE) +**If true, add to drafted rules +**NOTE that acceptable uses threat_level not threat! +**NOTE Latejoin timer is ONLY reset if at least one rule was drafted. +**NOTE the new_player.dm AttemptLateSpawn() calls OnPostSetup for all roles (unless assigned role is MODE) + +(After collecting all draftble rules...) +-> picking_latejoin_ruleset(drafted_rules) -> spend threat -> ruleset.execute() + +## Midround + +process() -> (For each midround rule... +-> acceptable(living players, threat_level) -> trim_candidates() -> ready(forced=FALSE) +(After collecting all draftble rules...) +-> picking_midround_ruleset(drafted_rules) -> spend threat -> ruleset.execute() + +## Forced + +For latejoin, it simply sets forced_latejoin_rule +make_antag_chance(newPlayer) -> trim_candidates() -> ready(forced=TRUE) **NOTE no acceptable() call + +For midround, calls the below proc with forced = TRUE +picking_specific_rule(ruletype,forced) -> forced OR acceptable(living_players, threat_level) -> trim_candidates() -> ready(forced) -> spend threat -> execute() +**NOTE specific rule can be called by RS traitor->MR autotraitor w/ forced=FALSE +**NOTE that due to short circuiting acceptable() need not be called if forced. + +## Ruleset + +acceptable(population,threat) just checks if enough threat_level for population indice. +**NOTE that we currently only send threat_level as the second arg, not threat. +ready(forced) checks if enough candidates and calls the map's map_ruleset(dynamic_ruleset) at the parent level + +trim_candidates() varies significantly according to the ruleset type +Roundstart: All candidates are new_player mobs. Check them for standard stuff: connected, desire role, not banned, etc. +**NOTE Roundstart deals with both candidates (trimmed list of valid players) and mode.candidates (everyone readied up). Don't confuse them! +Latejoin: Only one candidate, the latejoiner. Standard checks. +Midround: Instead of building a single list candidates, candidates contains four lists: living, dead, observing, and living antags. Standard checks in trim_list(list). + +Midround - Rulesets have additional types +/from_ghosts: execute() -> send_applications() -> review_applications() -> finish_applications() -> finish_setup(mob/newcharacter, index) -> setup_role(role) +**NOTE: execute() here adds dead players and observers to candidates list + +## Configuration and variables + +### Configuration +Configuration can be done through a `config/dynamic.json` file. One is provided as example in the codebase. This config file, loaded in `/datum/controller/subsystem/dynamic/pre_setup()`, directly overrides the values in the codebase, and so is perfect for making some rulesets harder/easier to get, turning them off completely, changing how much they cost, etc. + +The format of this file is: +```json +{ + "Dynamic": { + /* Configuration in here will directly override `/datum/controller/subsystem/dynamic` itself. */ + /* Keys are variable names, values are their new values. */ + }, + + "Roundstart": { + /* Configuration in here will apply to `/datum/dynamic_ruleset/roundstart` instances. */ + /* Keys are the ruleset names, values are another associative list with keys being variable names and values being new values. */ + "Wizard": { + /* I, a head admin, have died to wizard, and so I made it cost a lot more threat than it does in the codebase. */ + "cost": 80 + } + }, + + "Midround": { + /* Same as "Roundstart", but for `/datum/dynamic_ruleset/midround` instead. */ + }, + + "Latejoin": { + /* Same as "Roundstart", but for `/datum/dynamic_ruleset/latejoin` instead. */ + }, + + "Station": { + /* Special threat reductions for dangerous station traits. Traits are selected before dynamic, so traits will always */ + /* reduce threat even if there's no threat for it available. Only "cost" can be modified */ + } +} +``` + +Note: Comments are not possible in this format, and are just in this document for the sake of readability. + +### Rulesets +Rulesets have the following variables notable to developers and those interested in tuning. + +- `required_candidates` - The number of people that *must be willing* (in their preferences) to be an antagonist with this ruleset. If the candidates do not meet this requirement, then the ruleset will not bother to be drafted. +- `antag_cap` - Judges the amount of antagonists to apply, for both solo and teams. Note that some antagonists (such as traitors, lings, heretics, etc) will add more based on how many times they've been scaled. Written as a linear equation--ceil(x/denominator) + offset, or as a fixed constant. If written as a linear equation, will be in the form of `list("denominator" = denominator, "offset" = offset)`. + - Examples include: + - Traitor: `antag_cap = list("denominator" = 24)`. This means that for every 24 players, 1 traitor will be added (assuming no scaling). + - Nuclear Emergency: `antag_cap = list("denominator" = 18, "offset" = 1)`. For every 18 players, 1 nuke op will be added. Starts at 1, meaning at 30 players, 3 nuke ops will be created, rather than 2. + - Revolution: `antag_cap = 3`. There will always be 3 rev-heads, no matter what. +- `minimum_required_age` - The minimum age in order to apply for the ruleset. +- `weight` - How likely this ruleset is to be picked. A higher weight results in a higher chance of drafting. +- `cost` - The initial cost of the ruleset. This cost is taken from either the roundstart or midround budget, depending on the ruleset. +- `scaling_cost` - Cost for every *additional* application of this ruleset. + - Suppose traitors has a `cost` of 8, and a `scaling_cost` of 5. This means that buying 1 application of the traitor ruleset costs 8 threat, but buying two costs 13 (8 + 5). Buying it a third time is 18 (8 + 5 + 5), etc. +- `pop_per_requirement` - The range of population each value in `requirements` represents. By default, this is 6. + - If the value is five the range is 0-4, 5-9, 10-14, 15-19, 20-24, 25-29, 30-34, 35-39, 40-54, 45+. + - If it is six the range is 0-5, 6-11, 12-17, 18-23, 24-29, 30-35, 36-41, 42-47, 48-53, 54+. + - If it is seven the range is 0-6, 7-13, 14-20, 21-27, 28-34, 35-41, 42-48, 49-55, 56-62, 63+. +- `requirements` - A list that represents, per population range (see: `pop_per_requirement`), how much threat is required to *consider* this ruleset. This is independent of how much it'll actually cost. This uses *threat level*, not the budget--meaning if a round has 50 threat level, but only 10 points of round start threat, a ruleset with a requirement of 40 can still be picked if it can be bought. + - Suppose wizard has a `requirements` of `list(90,90,70,40,30,20,10,10,10,10)`. This means that, at 0-5 and 6-11 players, A station must have 90 threat in order for a wizard to be possible. At 12-17, 70 threat is required instead, etc. +- `restricted_roles` - A list of jobs that *can't* be drafted by this ruleset. For example, cyborgs cannot be changelings, and so are in the `restricted_roles`. +- `protected_roles` - Serves the same purpose of `restricted_roles`, except it can be turned off through configuration (`protect_roles_from_antagonist`). For example, security officers *shouldn't* be made traitor, so they are in Traitor's `protected_roles`. + - When considering putting a role in `protected_roles` or `restricted_roles`, the rule of thumb is if it is *technically infeasible* to support that job in that role. There's no *technical* reason a security officer can't be a traitor, and so they are simply in `protected_roles`. There *are* technical reasons a cyborg can't be a changeling, so they are in `restricted_roles` instead. + +This is not a complete list--search "configurable" in this README to learn more. + +### Dynamic + +The "Dynamic" key has the following configurable values: +- `pop_per_requirement` - The default value of `pop_per_requirement` for any ruleset that does not explicitly set it. Defaults to 6. +- `latejoin_delay_min`, `latejoin_delay_max` - The time range, in deciseconds (take your seconds, and multiply by 10), for a latejoin to attempt rolling. Once this timer is finished, a new one will be created within the same range. + - Suppose you have a `latejoin_delay_min` of 600 (60 seconds, 1 minute) and a `latejoin_delay_max` of 1800 (180 seconds, 3 minutes). Once the round starts, a random number in this range will be picked--let's suppose 1.5 minutes. After 1.5 minutes, Dynamic will decide if a latejoin threat should be created (a probability of `/datum/controller/subsystem/dynamic/proc/get_injection_chance()`). Regardless of its decision, a new timer will be started within the range of 1 to 3 minutes, repeatedly. +- `threat_curve_centre` - A number between -5 and +5. A negative value will give a more peaceful round and a positive value will give a round with higher threat. +- `threat_curve_width` - A number between 0.5 and 4. Higher value will favour extreme rounds and lower value rounds closer to the average. +- `roundstart_split_curve_centre` - A number between -5 and +5. Equivalent to threat_curve_centre, but for the budget split. A negative value will weigh towards midround rulesets, and a positive value will weight towards roundstart ones. +- `roundstart_split_curve_width` - A number between 0.5 and 4. Equivalent to threat_curve_width, but for the budget split. Higher value will favour more variance in splits and lower value rounds closer to the average. +- `random_event_hijack_minimum` - The minimum amount of time for antag random events to be hijacked. (See [Random Event Hijacking](#random-event-hijacking)) +- `random_event_hijack_maximum` - The maximum amount of time for antag random events to be hijacked. (See [Random Event Hijacking](#random-event-hijacking)) +- `hijacked_random_event_injection_chance` - The amount of injection chance to give to Dynamic when a random event is hijacked. (See [Random Event Hijacking](#random-event-hijacking)) +- `max_threat_level` - Sets the maximum amount of threat that can be rolled. Defaults to 100. You should only use this to *lower* the maximum threat, as raising it higher will not do anything. + +## Random Event "Hijacking" +Random events have the potential to be hijacked by Dynamic to keep the pace of midround injections, while also allowing greenshifts to contain some antagonists. + +`/datum/round_event_control/dynamic_should_hijack` is a variable to random events to allow Dynamic to hijack them, and defaults to FALSE. This is set to TRUE for random events that spawn antagonists. + +In `/datum/controller/subsystem/dynamic/on_pre_random_event` (in `dynamic_hijacking.dm`), Dynamic hooks to random events. If the `dynamic_should_hijack` variable is TRUE, the following sequence of events occurs: + +![Flow chart to describe the chain of events for Dynamic 2021 to take](https://github.com/tgstation/documentation-assets/blob/main/dynamic/random_event_hijacking.png) + +`n` is a random value between `random_event_hijack_minimum` and `random_event_hijack_maximum`. Heavy injection chance, should it need to be raised, is increased by `hijacked_random_event_injection_chance_modifier`. diff --git a/code/game/gamemodes/dynamic/ruleset_picking.dm b/code/controllers/subsystem/dynamic/ruleset_picking.dm similarity index 87% rename from code/game/gamemodes/dynamic/ruleset_picking.dm rename to code/controllers/subsystem/dynamic/ruleset_picking.dm index d6e2fd6b1f49b4..1a77a0288dafeb 100644 --- a/code/game/gamemodes/dynamic/ruleset_picking.dm +++ b/code/controllers/subsystem/dynamic/ruleset_picking.dm @@ -1,4 +1,4 @@ -#define ADMIN_CANCEL_MIDROUND_TIME (180 SECONDS) //SKYRAT EDIT - ORIGINAL 10 SECONDS +#define ADMIN_CANCEL_MIDROUND_TIME (180 SECONDS) //NOVA EDIT - ORIGINAL 10 SECONDS /// /// @@ -8,7 +8,7 @@ * * * max_allowed_attempts - Allows you to configure how many times the proc will attempt to pick a ruleset before giving up. */ -/datum/game_mode/dynamic/proc/pick_ruleset(list/drafted_rules, max_allowed_attempts = INFINITY) +/datum/controller/subsystem/dynamic/proc/pick_ruleset(list/drafted_rules, max_allowed_attempts = INFINITY) if (only_ruleset_executed) log_dynamic("FAIL: only_ruleset_executed") return null @@ -52,7 +52,7 @@ return null /// Executes a random midround ruleset from the list of drafted rules. -/datum/game_mode/dynamic/proc/pick_midround_rule(list/drafted_rules, description) +/datum/controller/subsystem/dynamic/proc/pick_midround_rule(list/drafted_rules, description) log_dynamic("Rolling [drafted_rules.len] [description]") var/datum/dynamic_ruleset/rule = pick_ruleset(drafted_rules) @@ -66,7 +66,7 @@ ADMIN_CANCEL_MIDROUND_TIME, \ TIMER_STOPPABLE, \ ) - // SKYRAT EDIT REMOVAL BEGIN - Event notification + // NOVA EDIT REMOVAL BEGIN - Event notification /** log_dynamic("[rule] ruleset executing...") message_admins("DYNAMIC: Executing midround ruleset [rule] in [DisplayTimeText(ADMIN_CANCEL_MIDROUND_TIME)]. \ @@ -75,9 +75,9 @@ return rule */ - // SKYRAT EDIT REMOVAL END - Event notification + // NOVA EDIT REMOVAL END - Event notification - // SKYRAT EDIT ADDITION BEGIN - Event notification + // NOVA EDIT ADDITION BEGIN - Event notification message_admins("Dynamic Event triggering in [DisplayTimeText(ADMIN_CANCEL_MIDROUND_TIME)]: [rule]. (\ CANCEL | \ SOMETHING ELSE)") @@ -92,10 +92,10 @@ SOMETHING ELSE)") return rule - // SKYRAT EDIT ADDITION END - Event notification + // NOVA EDIT ADDITION END - Event notification /// Fired after admins do not cancel a midround injection. -/datum/game_mode/dynamic/proc/execute_midround_rule(datum/dynamic_ruleset/rule) +/datum/controller/subsystem/dynamic/proc/execute_midround_rule(datum/dynamic_ruleset/rule) current_midround_rulesets = null midround_injection_timer_id = null if (!rule.repeatable) @@ -103,7 +103,7 @@ addtimer(CALLBACK(src, PROC_REF(execute_midround_latejoin_rule), rule), rule.delay) /// Mainly here to facilitate delayed rulesets. All midround/latejoin rulesets are executed with a timered callback to this proc. -/datum/game_mode/dynamic/proc/execute_midround_latejoin_rule(sent_rule) +/datum/controller/subsystem/dynamic/proc/execute_midround_latejoin_rule(sent_rule) var/datum/dynamic_ruleset/rule = sent_rule spend_midround_budget(rule.cost, threat_log, "[worldtime2text()]: [rule.ruletype] [rule.name]") rule.pre_execute(GLOB.alive_player_list.len) @@ -129,7 +129,7 @@ return FALSE /// Fired when an admin cancels the current midround injection. -/datum/game_mode/dynamic/proc/admin_cancel_midround(mob/user, timer_id) +/datum/controller/subsystem/dynamic/proc/admin_cancel_midround(mob/user, timer_id) if (midround_injection_timer_id != timer_id || !deltimer(midround_injection_timer_id)) to_chat(user, span_notice("Too late!")) return @@ -140,7 +140,7 @@ current_midround_rulesets = null /// Fired when an admin requests a different midround injection. -/datum/game_mode/dynamic/proc/admin_different_midround(mob/user, timer_id) +/datum/controller/subsystem/dynamic/proc/admin_different_midround(mob/user, timer_id) if (midround_injection_timer_id != timer_id || !deltimer(midround_injection_timer_id)) to_chat(user, span_notice("Too late!")) return diff --git a/code/controllers/subsystem/economy.dm b/code/controllers/subsystem/economy.dm index 511a438bf9a60c..bc1fd53803e200 100644 --- a/code/controllers/subsystem/economy.dm +++ b/code/controllers/subsystem/economy.dm @@ -13,7 +13,7 @@ SUBSYSTEM_DEF(economy) ACCOUNT_MED = ACCOUNT_MED_NAME, ACCOUNT_SRV = ACCOUNT_SRV_NAME, ACCOUNT_CAR = ACCOUNT_CAR_NAME, - ACCOUNT_CMD = ACCOUNT_CMD_NAME, // SKYRAT EDIT + ACCOUNT_CMD = ACCOUNT_CMD_NAME, // NOVA EDIT ACCOUNT_SEC = ACCOUNT_SEC_NAME) var/list/departmental_accounts = list() /** @@ -53,10 +53,6 @@ SUBSYSTEM_DEF(economy) */ var/list/audit_log = list() - /// Total value of exported materials. - var/export_total = 0 - /// Total value of imported goods. - var/import_total = 0 /// Number of mail items generated. var/mail_waiting = 0 /// Mail Holiday: AKA does mail arrive today? Always blocked on Sundays. @@ -175,7 +171,7 @@ SUBSYSTEM_DEF(economy) fluff_string = ", but company countermeasures protect YOU from being affected!" else fluff_string = ", and company countermeasures are failing to protect YOU from being affected. We're all doomed!" - earning_report = "Sector Economic Report

Sector vendor prices is currently at [SSeconomy.inflation_value()*100]%[fluff_string]

The station spending power is currently [station_total] Credits, and the crew's targeted allowance is at [station_target] Credits.

[SSstock_market.news_string] That's all from the Nanotrasen Economist Division." + earning_report = "Sector Economic Report

Sector vendor prices is currently at [SSeconomy.inflation_value()*100]%[fluff_string]

The station spending power is currently [station_total] Credits, and the crew's targeted allowance is at [station_target] Credits.

[SSstock_market.news_string] That's all from the Symphionia Economist Division." GLOB.news_network.submit_article(earning_report, "Station Earnings Report", "Station Announcements", null, update_alert = FALSE) return TRUE diff --git a/code/controllers/subsystem/eigenstate.dm b/code/controllers/subsystem/eigenstate.dm index 54636a4fd79f3a..f167fdf24d1efd 100644 --- a/code/controllers/subsystem/eigenstate.dm +++ b/code/controllers/subsystem/eigenstate.dm @@ -119,4 +119,4 @@ SUBSYSTEM_DEF(eigenstates) /datum/controller/subsystem/eigenstates/proc/tool_interact(atom/source, mob/user, obj/item/item) SIGNAL_HANDLER to_chat(user, span_notice("The unstable nature of [source] makes it impossible to use [item] on [source.p_them()]!")) - return COMPONENT_BLOCK_TOOL_ATTACK + return ITEM_INTERACT_BLOCKING diff --git a/code/controllers/subsystem/events.dm b/code/controllers/subsystem/events.dm index 98f847e4be6ae3..037d3d09b96846 100644 --- a/code/controllers/subsystem/events.dm +++ b/code/controllers/subsystem/events.dm @@ -17,7 +17,7 @@ SUBSYSTEM_DEF(events) ///Will wizard events be included in the event pool? var/wizardmode = FALSE - var/list/previously_run = list() //SKYRAT EDIT ADDITION + var/list/previously_run = list() //NOVA EDIT ADDITION /datum/controller/subsystem/events/Initialize() for(var/type in typesof(/datum/round_event_control)) @@ -60,7 +60,7 @@ SUBSYSTEM_DEF(events) scheduled = world.time + rand(frequency_lower, max(frequency_lower,frequency_upper)) //selects a random event based on whether it can occur and it's 'weight'(probability) -/datum/controller/subsystem/events/proc/spawnEvent(threat_override = FALSE) //SKYRAT EDIT CHANGE +/datum/controller/subsystem/events/proc/spawnEvent(threat_override = FALSE) //NOVA EDIT CHANGE set waitfor = FALSE //for the admin prompt if(!CONFIG_GET(flag/allow_random_events)) return @@ -73,10 +73,10 @@ SUBSYSTEM_DEF(events) for(var/datum/round_event_control/event_to_check in control) if(!event_to_check.can_spawn_event(players_amt)) continue - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(threat_override && !event_to_check.alert_observers) continue - //SKYRAT EDIT END + //NOVA EDIT END if(event_to_check.weight < 0) //for round-start events etc. var/res = TriggerEvent(event_to_check) if(res == EVENT_INTERRUPTED) diff --git a/code/controllers/subsystem/explosions.dm b/code/controllers/subsystem/explosions.dm index 2021964609afdb..abc9918489d333 100644 --- a/code/controllers/subsystem/explosions.dm +++ b/code/controllers/subsystem/explosions.dm @@ -441,10 +441,10 @@ SUBSYSTEM_DEF(explosions) if(EXPLODE_LIGHT) SSexplosions.lowturf += explode - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION for(var/obj/machinery/light/iterating_light in explode) iterating_light.start_flickering() - //SKYRAT EDIT END + //NOVA EDIT END if(prob(40) && dist < flame_range && !isspaceturf(explode) && !explode.density) flameturf += explode diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index 88112f9322676b..706b4e51d690f3 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -145,12 +145,6 @@ SUBSYSTEM_DEF(garbage) pass_counts[i] = 0 fail_counts[i] = 0 -#ifdef EXPERIMENT_515_QDEL_HARD_REFERENCE -// 1 from the hard reference in the queue, and 1 from the variable used before this -#define IS_DELETED(datum, _) (refcount(##datum) == 2) -#else -#define IS_DELETED(datum, gcd_at_time) (isnull(##datum) || ##datum.gc_destroyed != gcd_at_time) -#endif /datum/controller/subsystem/garbage/proc/HandleQueue(level = GC_QUEUE_FILTER) if (level == GC_QUEUE_FILTER) @@ -168,7 +162,10 @@ SUBSYSTEM_DEF(garbage) lastlevel = level - //We do this rather then for(var/refID in queue) because that sort of for loop copies the whole list. +// 1 from the hard reference in the queue, and 1 from the variable used before this +#define REFS_WE_EXPECT 2 + + //We do this rather then for(var/list/ref_info in queue) because that sort of for loop copies the whole list. //Normally this isn't expensive, but the gc queue can grow to 40k items, and that gets costly/causes overrun. for (var/i in 1 to length(queue)) var/list/L = queue[i] @@ -183,17 +180,10 @@ SUBSYSTEM_DEF(garbage) break // Everything else is newer, skip them count++ -#ifdef EXPERIMENT_515_QDEL_HARD_REFERENCE var/datum/D = L[GC_QUEUE_ITEM_REF] -#else - var/GCd_at_time = L[GC_QUEUE_ITEM_GCD_DESTROYED] - - var/refID = L[GC_QUEUE_ITEM_REF] - var/datum/D - D = locate(refID) -#endif - if (IS_DELETED(D, GCd_at_time)) // So if something else coincidently gets the same ref, it's not deleted by mistake + // If that's all we've got, send er off + if (refcount(D) == REFS_WE_EXPECT) ++gcedlasttick ++totalgcs pass_counts[level]++ @@ -214,12 +204,15 @@ SUBSYSTEM_DEF(garbage) switch (level) if (GC_QUEUE_CHECK) #ifdef REFERENCE_TRACKING + // Decides how many refs to look for (potentially) + // Based off the remaining and the ones we can account for + var/remaining_refs = refcount(D) - REFS_WE_EXPECT if(reference_find_on_fail[text_ref(D)]) - INVOKE_ASYNC(D, TYPE_PROC_REF(/datum,find_references)) + INVOKE_ASYNC(D, TYPE_PROC_REF(/datum,find_references), remaining_refs) ref_searching = TRUE #ifdef GC_FAILURE_HARD_LOOKUP else - INVOKE_ASYNC(D, TYPE_PROC_REF(/datum,find_references)) + INVOKE_ASYNC(D, TYPE_PROC_REF(/datum,find_references), remaining_refs) ref_searching = TRUE #endif reference_find_on_fail -= text_ref(D) @@ -228,10 +221,9 @@ SUBSYSTEM_DEF(garbage) var/datum/qdel_item/I = items[type] var/message = "## TESTING: GC: -- [text_ref(D)] | [type] was unable to be GC'd --" -#if DM_VERSION >= 515 message = "[message] (ref count of [refcount(D)])" -#endif log_world(message) + var/detail = D.dump_harddel_info() if(detail) LAZYADD(I.extra_details, detail) @@ -270,7 +262,7 @@ SUBSYSTEM_DEF(garbage) queue.Cut(1,count+1) count = 0 -#undef IS_DELETED +#undef REFS_WE_EXPECT /datum/controller/subsystem/garbage/proc/Queue(datum/D, level = GC_QUEUE_FILTER) if (isnull(D)) @@ -280,21 +272,11 @@ SUBSYSTEM_DEF(garbage) return var/queue_time = world.time -#ifdef EXPERIMENT_515_QDEL_HARD_REFERENCE - var/refid = D if (D.gc_destroyed <= 0) D.gc_destroyed = queue_time -#else - var/refid = text_ref(D) - var/static/uid = 0 - if (D.gc_destroyed <= 0) - uid = WRAP(uid+1, 1, SHORT_REAL_LIMIT - 1) - D.gc_destroyed = uid -#endif var/list/queue = queues[level] - - queue[++queue.len] = list(queue_time, refid, D.gc_destroyed) // not += for byond reasons + queue[++queue.len] = list(queue_time, D, D.gc_destroyed) // not += for byond reasons //this is mainly to separate things profile wise. /datum/controller/subsystem/garbage/proc/HardDelete(datum/D) @@ -359,75 +341,80 @@ SUBSYSTEM_DEF(garbage) /datum/qdel_item/New(mytype) name = "[mytype]" - /// Should be treated as a replacement for the 'del' keyword. /// /// Datums passed to this will be given a chance to clean up references to allow the GC to collect them. -/proc/qdel(datum/D, force=FALSE, ...) - if(!istype(D)) - del(D) +/proc/qdel(datum/to_delete, force = FALSE) + if(!istype(to_delete)) + del(to_delete) return - var/datum/qdel_item/I = SSgarbage.items[D.type] - if (!I) - I = SSgarbage.items[D.type] = new /datum/qdel_item(D.type) - I.qdels++ + var/datum/qdel_item/trash = SSgarbage.items[to_delete.type] + if (isnull(trash)) + trash = SSgarbage.items[to_delete.type] = new /datum/qdel_item(to_delete.type) + trash.qdels++ - if(isnull(D.gc_destroyed)) - if (SEND_SIGNAL(D, COMSIG_PREQDELETED, force)) // Give the components a chance to prevent their parent from being deleted - return - D.gc_destroyed = GC_CURRENTLY_BEING_QDELETED - var/start_time = world.time - var/start_tick = world.tick_usage - SEND_SIGNAL(D, COMSIG_QDELETING, force) // Let the (remaining) components know about the result of Destroy - var/hint = D.Destroy(arglist(args.Copy(2))) // Let our friend know they're about to get fucked up. - if(world.time != start_time) - I.slept_destroy++ - else - I.destroy_time += TICK_USAGE_TO_MS(start_tick) - if(!D) + if(!isnull(to_delete.gc_destroyed)) + if(to_delete.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) + CRASH("[to_delete.type] destroy proc was called multiple times, likely due to a qdel loop in the Destroy logic") + return + + if (SEND_SIGNAL(to_delete, COMSIG_PREQDELETED, force)) // Give the components a chance to prevent their parent from being deleted + return + + to_delete.gc_destroyed = GC_CURRENTLY_BEING_QDELETED + var/start_time = world.time + var/start_tick = world.tick_usage + SEND_SIGNAL(to_delete, COMSIG_QDELETING, force) // Let the (remaining) components know about the result of Destroy + var/hint = to_delete.Destroy(force) // Let our friend know they're about to get fucked up. + + if(world.time != start_time) + trash.slept_destroy++ + else + trash.destroy_time += TICK_USAGE_TO_MS(start_tick) + + if(isnull(to_delete)) + return + + switch(hint) + if (QDEL_HINT_QUEUE) //qdel should queue the object for deletion. + SSgarbage.Queue(to_delete) + if (QDEL_HINT_IWILLGC) + to_delete.gc_destroyed = world.time return - switch(hint) - if (QDEL_HINT_QUEUE) //qdel should queue the object for deletion. - SSgarbage.Queue(D) - if (QDEL_HINT_IWILLGC) - D.gc_destroyed = world.time + if (QDEL_HINT_LETMELIVE) //qdel should let the object live after calling destory. + if(!force) + to_delete.gc_destroyed = null //clear the gc variable (important!) return - if (QDEL_HINT_LETMELIVE) //qdel should let the object live after calling destory. - if(!force) - D.gc_destroyed = null //clear the gc variable (important!) - return - // Returning LETMELIVE after being told to force destroy - // indicates the objects Destroy() does not respect force - #ifdef TESTING - if(!I.no_respect_force) - testing("WARNING: [D.type] has been force deleted, but is \ - returning an immortal QDEL_HINT, indicating it does \ - not respect the force flag for qdel(). It has been \ - placed in the queue, further instances of this type \ - will also be queued.") - #endif - I.no_respect_force++ + // Returning LETMELIVE after being told to force destroy + // indicates the objects Destroy() does not respect force + #ifdef TESTING + if(!trash.no_respect_force) + testing("WARNING: [to_delete.type] has been force deleted, but is \ + returning an immortal QDEL_HINT, indicating it does \ + not respect the force flag for qdel(). It has been \ + placed in the queue, further instances of this type \ + will also be queued.") + #endif + trash.no_respect_force++ - SSgarbage.Queue(D) - if (QDEL_HINT_HARDDEL) //qdel should assume this object won't gc, and queue a hard delete - SSgarbage.Queue(D, GC_QUEUE_HARDDELETE) - if (QDEL_HINT_HARDDEL_NOW) //qdel should assume this object won't gc, and hard del it post haste. - SSgarbage.HardDelete(D) - #ifdef REFERENCE_TRACKING - if (QDEL_HINT_FINDREFERENCE) //qdel will, if REFERENCE_TRACKING is enabled, display all references to this object, then queue the object for deletion. - SSgarbage.Queue(D) - INVOKE_ASYNC(D, TYPE_PROC_REF(/datum, find_references)) - if (QDEL_HINT_IFFAIL_FINDREFERENCE) //qdel will, if REFERENCE_TRACKING is enabled and the object fails to collect, display all references to this object. - SSgarbage.Queue(D) - SSgarbage.reference_find_on_fail[text_ref(D)] = TRUE + SSgarbage.Queue(to_delete) + if (QDEL_HINT_HARDDEL) //qdel should assume this object won't gc, and queue a hard delete + SSgarbage.Queue(to_delete, GC_QUEUE_HARDDELETE) + if (QDEL_HINT_HARDDEL_NOW) //qdel should assume this object won't gc, and hard del it post haste. + SSgarbage.HardDelete(to_delete) + #ifdef REFERENCE_TRACKING + if (QDEL_HINT_FINDREFERENCE) //qdel will, if REFERENCE_TRACKING is enabled, display all references to this object, then queue the object for deletion. + SSgarbage.Queue(to_delete) + INVOKE_ASYNC(to_delete, TYPE_PROC_REF(/datum, find_references)) + if (QDEL_HINT_IFFAIL_FINDREFERENCE) //qdel will, if REFERENCE_TRACKING is enabled and the object fails to collect, display all references to this object. + SSgarbage.Queue(to_delete) + SSgarbage.reference_find_on_fail[text_ref(to_delete)] = TRUE + #endif + else + #ifdef TESTING + if(!trash.no_hint) + testing("WARNING: [to_delete.type] is not returning a qdel hint. It is being placed in the queue. Further instances of this type will also be queued.") #endif - else - #ifdef TESTING - if(!I.no_hint) - testing("WARNING: [D.type] is not returning a qdel hint. It is being placed in the queue. Further instances of this type will also be queued.") - #endif - I.no_hint++ - SSgarbage.Queue(D) - else if(D.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) - CRASH("[D.type] destroy proc was called multiple times, likely due to a qdel loop in the Destroy logic") + trash.no_hint++ + SSgarbage.Queue(to_delete) diff --git a/code/controllers/subsystem/id_access.dm b/code/controllers/subsystem/id_access.dm index 86f2e124a8f422..b2dadf4bcb84f7 100644 --- a/code/controllers/subsystem/id_access.dm +++ b/code/controllers/subsystem/id_access.dm @@ -330,7 +330,7 @@ SUBSYSTEM_DEF(id_access) desc_by_access["[ACCESS_CENT_CAPTAIN]"] = "Code Gold" desc_by_access["[ACCESS_CENT_BAR]"] = "Code Scotch" desc_by_access["[ACCESS_BIT_DEN]"] = "Bitrunner Den" - desc_by_access["[ACCESS_BARBER]"] = "Barber" // SKYRAT EDIT ADD - BARBER UPDATE + desc_by_access["[ACCESS_BARBER]"] = "Barber" // NOVA EDIT ADD - BARBER UPDATE /** * Returns the access bitflags associated with any given access level. diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 8376059e910375..fec648dd8768e5 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -277,11 +277,11 @@ SUBSYSTEM_DEF(job) JobDebug("GRJ skipping command role, Player: [player], Job: [job]") continue - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(job.departments_bitflags & DEPARTMENT_BITFLAG_CENTRAL_COMMAND) //If you want a CC position, select it! - JobDebug("GRJ skipping Central Command role, Player: [player], Job: [job]") + JobDebug("GRJ skipping Conglomeration of Colonists role, Player: [player], Job: [job]") continue - //SKYRAT EDIT END + //NOVA EDIT END // This check handles its own output to JobDebug. if(check_job_eligibility(player, job, "GRJ", add_job_to_log = TRUE) != JOB_AVAILABLE) @@ -542,18 +542,18 @@ SUBSYSTEM_DEF(job) //Gives the player the stuff he should have with his rank /datum/controller/subsystem/job/proc/EquipRank(mob/living/equipping, datum/job/job, client/player_client) - // SKYRAT EDIT ADDITION BEGIN - ALTERNATIVE_JOB_TITLES + // NOVA EDIT ADDITION BEGIN - ALTERNATIVE_JOB_TITLES // The alt job title, if user picked one, or the default - var/alt_title = player_client?.prefs.alt_job_titles[job.title] - // SKYRAT EDIT ADDITION END + var/alt_title = player_client?.prefs.alt_job_titles?[job.title] || job.title + // NOVA EDIT ADDITION END equipping.job = job.title SEND_SIGNAL(equipping, COMSIG_JOB_RECEIVED, job) - equipping.mind?.set_assigned_role_with_greeting(job, player_client, alt_title) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: equipping.mind?.set_assigned_role_with_greeting(job, player_client) - equipping.on_job_equipping(job, player_client?.prefs, player_client) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: equipping.on_job_equipping(job) - job.announce_job(equipping, alt_title) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: job.announce_job(equipping) + equipping.mind?.set_assigned_role_with_greeting(job, player_client, alt_title) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: equipping.mind?.set_assigned_role_with_greeting(job, player_client) + equipping.on_job_equipping(job, player_client?.prefs, player_client) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: equipping.on_job_equipping(job) + job.announce_job(equipping, alt_title) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: job.announce_job(equipping) if(player_client?.holder) if(CONFIG_GET(flag/auto_deadmin_players) || (player_client.prefs?.toggles & DEADMIN_ALWAYS)) @@ -561,7 +561,7 @@ SUBSYSTEM_DEF(job) else handle_auto_deadmin_roles(player_client, job.title) - setup_alt_job_items(equipping, job, player_client) // SKYRAT EDIT ADDITION - ALTERNATIVE_JOB_TITLES + setup_alt_job_items(equipping, job, player_client) // NOVA EDIT ADDITION - ALTERNATIVE_JOB_TITLES job.after_spawn(equipping, player_client) /datum/controller/subsystem/job/proc/handle_auto_deadmin_roles(client/C, rank) @@ -592,7 +592,7 @@ SUBSYSTEM_DEF(job) var/ssc = CONFIG_GET(number/security_scaling_coeff) if(ssc > 0) if(J.spawn_positions > 0) - // SKYRAT EDIT - Reduced from 12 max sec to 7 max sec due to departmental security being deactivated and replaced. + // NOVA EDIT - Reduced from 12 max sec to 7 max sec due to departmental security being deactivated and replaced. var/officer_positions = min(7, max(J.spawn_positions, round(unassigned.len / ssc))) //Scale between configured minimum and 12 officers JobDebug("Setting open security officer positions to [officer_positions]") J.total_positions = officer_positions @@ -666,7 +666,7 @@ SUBSYSTEM_DEF(job) if(!run_divide_occupation_pure) to_chat(player, "You have failed to qualify for any job you desired.") player.ready = PLAYER_NOT_READY - player.client << output(player.ready, "lobby_browser:imgsrc") //SKYRAT EDIT ADDITION + player.client << output(player.ready, "lobby_browser:imgsrc") //NOVA EDIT ADDITION /datum/controller/subsystem/job/Recover() @@ -711,35 +711,23 @@ SUBSYSTEM_DEF(job) /datum/controller/subsystem/job/proc/get_last_resort_spawn_points() - //bad mojo var/area/shuttle/arrival/arrivals_area = GLOB.areas_by_type[/area/shuttle/arrival] - if(arrivals_area) - //first check if we can find a chair - var/obj/structure/chair/shuttle_chair = locate() in arrivals_area - if(shuttle_chair) - return shuttle_chair - - //last hurrah + if(!isnull(arrivals_area)) var/list/turf/available_turfs = list() - for(var/turf/arrivals_turf in arrivals_area) - if(!arrivals_turf.is_blocked_turf(TRUE)) - available_turfs += arrivals_turf + for(var/turf/arrivals_turf as anything in arrivals_area.get_contained_turfs()) + var/obj/structure/chair/shuttle_chair = locate() in arrivals_turf + if(!isnull(shuttle_chair)) + return shuttle_chair + if(arrivals_turf.is_blocked_turf(TRUE)) + continue + available_turfs += arrivals_turf + if(length(available_turfs)) return pick(available_turfs) - //pick an open spot on arrivals and dump em - var/list/arrivals_turfs = shuffle(get_area_turfs(/area/shuttle/arrival)) - if(length(arrivals_turfs)) - for(var/turf/arrivals_turf in arrivals_turfs) - if(!arrivals_turf.is_blocked_turf(TRUE)) - return arrivals_turf - //last chance, pick ANY spot on arrivals and dump em - return pick(arrivals_turfs) - stack_trace("Unable to find last resort spawn point.") return GET_ERROR_ROOM - ///Lands specified mob at a random spot in the hallways /datum/controller/subsystem/job/proc/DropLandAtRandomHallwayPoint(mob/living/living_mob) var/turf/spawn_turf = get_safe_random_station_turf(typesof(/area/station/hallway)) @@ -755,7 +743,7 @@ SUBSYSTEM_DEF(job) /datum/controller/subsystem/job/proc/get_living_heads() . = list() for(var/datum/mind/head as anything in get_crewmember_minds()) - if(!(head.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)) + if(!(head.assigned_role.job_flags & JOB_HEAD_OF_STAFF)) continue if(isnull(head.current) || head.current.stat == DEAD) continue @@ -765,7 +753,7 @@ SUBSYSTEM_DEF(job) /datum/controller/subsystem/job/proc/get_all_heads() . = list() for(var/datum/mind/head as anything in get_crewmember_minds()) - if(head.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) + if(head.assigned_role.job_flags & JOB_HEAD_OF_STAFF) . += head /// Returns a list of minds of all security members who are alive @@ -797,7 +785,7 @@ SUBSYSTEM_DEF(job) ) /obj/item/paper/paperslip/corporate/fluff/spare_id_safe_code - name = "Nanotrasen-Approved Spare ID Safe Code" + name = "Symphionia-Approved Spare ID Safe Code" desc = "Proof that you have been approved for Captaincy, with all its glory and all its horror." /obj/item/paper/paperslip/corporate/fluff/spare_id_safe_code/Initialize(mapload) @@ -904,7 +892,7 @@ SUBSYSTEM_DEF(job) JobDebug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_AGE)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") return JOB_UNAVAILABLE_AGE - //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION + //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION if(possible_job.veteran_only && !SSplayer_ranks.is_veteran(player.client)) JobDebug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_NOT_VETERAN)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") return JOB_NOT_VETERAN @@ -931,7 +919,7 @@ SUBSYSTEM_DEF(job) return JOB_UNAVAILABLE_AUGMENT - //SKYRAT EDIT END + //NOVA EDIT END // Run this check after is_banned_from since it can query the DB which may sleep. diff --git a/code/controllers/subsystem/lag_switch.dm b/code/controllers/subsystem/lag_switch.dm index fdd9a9287e5df6..f59ead3a99b037 100644 --- a/code/controllers/subsystem/lag_switch.dm +++ b/code/controllers/subsystem/lag_switch.dm @@ -124,13 +124,13 @@ SUBSYSTEM_DEF(lag_switch) to_chat(world, span_boldannounce("Footstep sounds have been disabled for performance concerns.")) else to_chat(world, span_boldannounce("Footstep sounds have been re-enabled.")) - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION if (DISABLE_CREATOR) if (state) to_chat(world, span_boldannounce("The character creator and preferences menu has been disabled for performance metrics.")) else to_chat(world, span_boldannounce("The character creator has been re-enabled.")) - // SKYRAT EDIT END + // NOVA EDIT END return TRUE diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index cf1058f8a44057..5881405da0bb22 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -405,24 +405,24 @@ Used by the AI doomsday and the self-destruct nuke. add_new_zlevel("[name][i ? " [i + 1]" : ""]", level, contain_turfs = FALSE) ++i - SSautomapper.preload_templates_from_toml(files) // SKYRAT EDIT ADDITION - We need to load our templates AFTER the Z level exists, otherwise, there is no z level to preload. - var/turf_blacklist = SSautomapper.get_turf_blacklists(files) // SKYRAT EDIT ADDITION - We use blacklisted turfs to carve out places for our templates. + SSautomapper.preload_templates_from_toml(files) // NOVA EDIT ADDITION - We need to load our templates AFTER the Z level exists, otherwise, there is no z level to preload. + var/turf_blacklist = SSautomapper.get_turf_blacklists(files) // NOVA EDIT ADDITION - We use blacklisted turfs to carve out places for our templates. // load the maps for (var/P in parsed_maps) var/datum/parsed_map/pm = P - pm.turf_blacklist = turf_blacklist // SKYRAT EDIT ADDITION - apply blacklist + pm.turf_blacklist = turf_blacklist // NOVA EDIT ADDITION - apply blacklist var/bounds = pm.bounds var/x_offset = bounds ? round(world.maxx / 2 - bounds[MAP_MAXX] / 2) + 1 : 1 var/y_offset = bounds ? round(world.maxy / 2 - bounds[MAP_MAXY] / 2) + 1 : 1 if (!pm.load(x_offset, y_offset, start_z + parsed_maps[P], no_changeturf = TRUE, new_z = TRUE)) errorList |= pm.original_path - // SKYRAT EDIT ADDITION BEGIN - We need to load our templates from cache after our space has been carved out. + // NOVA EDIT ADDITION BEGIN - We need to load our templates from cache after our space has been carved out. if(!LAZYLEN(errorList)) SSautomapper.load_templates_from_cache(files) - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END if(!silent) - add_startup_message("Loaded [name] in [(REALTIMEOFDAY - start_time)/10]s!") //SKYRAT EDIT CHANGE + add_startup_message("Loaded [name] in [(REALTIMEOFDAY - start_time)/10]s!") //NOVA EDIT CHANGE return parsed_maps /datum/controller/subsystem/mapping/proc/loadWorld() @@ -434,7 +434,7 @@ Used by the AI doomsday and the self-destruct nuke. // load the station station_start = world.maxz + 1 - add_startup_message("Loading [config.map_name]...") // SKYRAT EDIT CHANGE + add_startup_message("Loading [config.map_name]...") // NOVA EDIT CHANGE LoadGroup(FailedZs, "Station", config.map_path, config.map_file, config.traits, ZTRAITS_STATION) if(SSdbcore.Connect()) diff --git a/code/controllers/subsystem/minor_mapping.dm b/code/controllers/subsystem/minor_mapping.dm index 8516ed98ea9497..3f3d32d7bf4f4f 100644 --- a/code/controllers/subsystem/minor_mapping.dm +++ b/code/controllers/subsystem/minor_mapping.dm @@ -11,7 +11,7 @@ SUBSYSTEM_DEF(minor_mapping) return SS_INIT_NO_NEED #else trigger_migration(CONFIG_GET(number/mice_roundstart)) - place_satchels(satchel_amount = 10) //SKYRAT EDIT CHANGE - ORIGINAL : place_satchels(satchel_amount = 2) + place_satchels(satchel_amount = 10) //NOVA EDIT CHANGE - ORIGINAL : place_satchels(satchel_amount = 2) return SS_INIT_SUCCESS #endif // the mice are easily the bigger problem, but let's just avoid anything that could cause some bullshit. diff --git a/code/controllers/subsystem/mobs.dm b/code/controllers/subsystem/mobs.dm index 6375e51323772e..fb5d390c61a71f 100644 --- a/code/controllers/subsystem/mobs.dm +++ b/code/controllers/subsystem/mobs.dm @@ -33,7 +33,7 @@ SUBSYSTEM_DEF(mobs) //cache for sanic speed (lists are references anyways) var/list/currentrun = src.currentrun var/times_fired = src.times_fired - var/seconds_per_tick = wait / (1 SECONDS) // TODO: Make this actually responsive to stuff like pausing and resuming + var/seconds_per_tick = wait / (1 SECONDS) while(currentrun.len) var/mob/living/L = currentrun[currentrun.len] currentrun.len-- diff --git a/code/controllers/subsystem/modular_computers.dm b/code/controllers/subsystem/modular_computers.dm index ad0be83bb5212a..c8efa4aa4ee243 100644 --- a/code/controllers/subsystem/modular_computers.dm +++ b/code/controllers/subsystem/modular_computers.dm @@ -1,12 +1,15 @@ -///The maximum amount of logs that can be generated before they start overwriting eachother. +s///The maximum amount of logs that can be generated before they start overwriting eachother. #define MAX_LOG_COUNT 300 SUBSYSTEM_DEF(modular_computers) name = "Modular Computers" - flags = SS_NO_FIRE - ///List of all ModPC logging - var/list/logs = list() + wait = 1 MINUTES + runlevels = RUNLEVEL_GAME + + ///List of all logs generated by ModPCs through the round. + ///Stops at MAX_LOG_COUNT and must be purged to keep logging. + var/list/modpc_logs = list() ///List of all programs available to download from the NTNet store. var/list/available_station_software = list() @@ -21,22 +24,105 @@ SUBSYSTEM_DEF(modular_computers) var/intrusion_detection_alarm = FALSE var/next_picture_id = 0 + ///Lazylist of coupons used by the Coupon Master PDA app. e.g. "COUPONCODE25" = coupon_code + var/list/discount_coupons + ///When will the next coupon drop? + var/next_discount = 0 + /datum/controller/subsystem/modular_computers/Initialize() build_software_lists() initialized = TRUE return SS_INIT_SUCCESS +/datum/controller/subsystem/modular_computers/fire(resumed = FALSE) + if(discount_coupons && world.time >= next_discount) + announce_coupon() + +///Generate new coupon codes that can be redeemed with the Coupon Master App +/datum/controller/subsystem/modular_computers/proc/announce_coupon() + //If there's no way to announce the coupon, we may as well skip it. + if(!length(GLOB.announcement_systems)) + return + var/obj/machinery/announcement_system/announcement_system = pick(GLOB.announcement_systems) + + var/static/list/discounts = list("0.10" = 7, "0.15" = 16, "0.20" = 20, "0.25" = 16, "0.50" = 8, "0.66" = 1) + var/static/list/flash_discounts = list("0.30" = 3, "0.40" = 8, "0.50" = 8, "0.66" = 2, "0.75" = 1) + ///Eliminates non-alphanumeri characters, as well as the word "Single-Pack" or "Pack" or "Crate" from the coupon code + var/static/regex/strip_pack_name = regex("\[^a-zA-Z0-9]|(Single-)?Pack|Crate", "g") + + var/datum/supply_pack/discounted_pack = pick(GLOB.discountable_packs[pick_weight(GLOB.pack_discount_odds)]) + var/pack_name = initial(discounted_pack.name) + var/chosen_discount + var/expires_in = 0 + if(prob(75)) + chosen_discount = text2num(pick_weight(discounts)) + if(prob(20)) + expires_in = rand(8,10) MINUTES + else + chosen_discount = text2num(pick_weight(flash_discounts)) + expires_in = rand(2, 4) MINUTES + var/coupon_code = "[uppertext(strip_pack_name.Replace(pack_name, ""))][chosen_discount*100]" + + var/list/targets = list() + for (var/messenger_ref in GLOB.pda_messengers) + var/datum/computer_file/program/messenger/messenger = GLOB.pda_messengers[messenger_ref] + if(locate(/datum/computer_file/program/coupon) in messenger?.computer.stored_files) + targets += messenger + + ///Don't go any further if the same coupon code has been done alrady or if there's no recipient for the 'promo'. + if((coupon_code in discount_coupons) || !length(targets)) + return + + var/datum/coupon_code/coupon = new(chosen_discount, discounted_pack, expires_in) + + discount_coupons[coupon_code] = coupon + + ///pda message code here + var/static/list/promo_messages = list( + "A new discount has dropped for %GOODY: %DISCOUNT.", + "Check this new offer out: %GOODY, now %DISCOUNT off.", + "Now on sales: %GOODY, at %DISCOUNT discount!", + "This item is now on sale (%DISCOUNT off): %GOODY.", + "Would you look at that! A %DISCOUNT discount on %GOODY!", + "Exclusive offer for %GOODY. Only %DISCOUNT! Get it now:", + "%GOODY is now %DISCOUNT off.", + "*RING* A new discount has dropped: %GOODY, %DISCOUNT off.", + "%GOODY - %DISCOUNT off." + ) + var/static/list/code_messages = list( + "Here's the code", + "Use this code to redeem it", + "Open the app to redeem it", + "Code", + "Redeem it now", + "Buy it now", + ) + + var/chosen_promo_message = replacetext(replacetext(pick(promo_messages), "%GOODY", pack_name), "%DISCOUNT", "[chosen_discount*100]%") + var/datum/signal/subspace/messaging/tablet_message/signal = new(announcement_system, list( + "fakename" = "Coupon Master", + "fakejob" = "Goodies Promotion", + "message" = "[chosen_promo_message] [pick(code_messages)]: [coupon_code][expires_in ? " (EXPIRES IN [uppertext(DisplayTimeText(expires_in))])" : ""].", + "targets" = targets, + "automated" = TRUE, + )) + + signal.send_to_receivers() + + next_discount = world.time + rand(3, 5) MINUTES + + ///Finds all downloadable programs and adds them to their respective downloadable list. /datum/controller/subsystem/modular_computers/proc/build_software_lists() for(var/datum/computer_file/program/prog as anything in subtypesof(/datum/computer_file/program)) // Has no TGUI file so is not meant to be a downloadable thing. - if(!initial(prog.tgui_id)) + if(!initial(prog.tgui_id) || !initial(prog.filename)) continue prog = new prog - if(prog.available_on_ntnet) + if(prog.program_flags & PROGRAM_ON_NTNET_STORE) available_station_software.Add(prog) - if(prog.available_on_syndinet) + if(prog.program_flags & PROGRAM_ON_SYNDINET_STORE) available_antag_software.Add(prog) ///Attempts to find a new file through searching the available stores with its name. @@ -65,17 +151,17 @@ SUBSYSTEM_DEF(modular_computers) log_text += log_string log_string = log_text.Join() - logs.Add(log_string) + modpc_logs.Add(log_string) // We have too many logs, remove the oldest entries until we get into the limit - if(logs.len > MAX_LOG_COUNT) - logs = logs.Copy(logs.len - MAX_LOG_COUNT, 0) + if(modpc_logs.len > MAX_LOG_COUNT) + modpc_logs = modpc_logs.Copy(modpc_logs.len - MAX_LOG_COUNT, 0) /** * Removes all station logs and leaves it with an alert that it's been wiped. */ /datum/controller/subsystem/modular_computers/proc/purge_logs() - logs = list() + modpc_logs = list() add_log("-!- LOGS DELETED BY SYSTEM OPERATOR -!-") /** diff --git a/code/controllers/subsystem/movement/move_handler.dm b/code/controllers/subsystem/movement/move_handler.dm index 90266dd3139d56..fcc5c1c65048b5 100644 --- a/code/controllers/subsystem/movement/move_handler.dm +++ b/code/controllers/subsystem/movement/move_handler.dm @@ -121,9 +121,12 @@ SUBSYSTEM_DEF(move_manager) var/datum/controller/subsystem/movement/current_subsystem = running_loop.controller - current_subsystem.remove_loop(running_loop) - contesting_subsystem.add_loop(contestant) + var/current_running_loop = running_loop running_loop = contestant + current_subsystem.remove_loop(current_running_loop) + if(running_loop != contestant) // A signal registrant could have messed with things + return FALSE + contesting_subsystem.add_loop(contestant) return TRUE ///Tries to figure out the current favorite loop to run. More complex then just deciding between two different loops, assumes no running loop currently exists @@ -138,7 +141,7 @@ SUBSYSTEM_DEF(move_manager) var/datum/move_loop/checking = existing_loops[owner] if(checking.flags & MOVEMENT_LOOP_IGNORE_PRIORITY) continue - if(favorite && favorite.priority < checking.priority) + if(favorite && favorite.priority > checking.priority) continue favorite = checking @@ -152,8 +155,8 @@ SUBSYSTEM_DEF(move_manager) /datum/movement_packet/proc/remove_loop(datum/controller/subsystem/movement/remove_from, datum/move_loop/loop_to_remove) if(loop_to_remove == running_loop) - remove_from.remove_loop(loop_to_remove) running_loop = null + remove_from.remove_loop(loop_to_remove) if(loop_to_remove.flags & MOVEMENT_LOOP_IGNORE_PRIORITY) remove_from.remove_loop(loop_to_remove) if(QDELETED(src)) diff --git a/code/controllers/subsystem/movement/movement.dm b/code/controllers/subsystem/movement/movement.dm index c43debda5439d9..425c67a0c474f2 100644 --- a/code/controllers/subsystem/movement/movement.dm +++ b/code/controllers/subsystem/movement/movement.dm @@ -52,8 +52,11 @@ SUBSYSTEM_DEF(movement) while(processing.len) var/datum/move_loop/loop = processing[processing.len] processing.len-- + // No longer queued since we just got removed from the loop + loop.queued_time = null loop.process() //This shouldn't get nulls, if it does, runtime - if(!QDELETED(loop)) //Re-Insert the loop + if(!QDELETED(loop) && loop.status & MOVELOOP_STATUS_QUEUED) //Re-Insert the loop + loop.status &= ~MOVELOOP_STATUS_QUEUED loop.timer = world.time + loop.delay queue_loop(loop) if (MC_TICK_CHECK) @@ -86,26 +89,42 @@ SUBSYSTEM_DEF(movement) buckets -= "[bucket_time]" /datum/controller/subsystem/movement/proc/queue_loop(datum/move_loop/loop) - var/target_time = loop.timer - var/string_time = "[target_time]" + if(loop.status & MOVELOOP_STATUS_QUEUED) + stack_trace("A move loop attempted to queue while already queued") + return + loop.queued_time = loop.timer + loop.status |= MOVELOOP_STATUS_QUEUED + var/list/our_bucket = buckets["[loop.queued_time]"] // If there's no bucket for this, lets set them up - if(!buckets[string_time]) - buckets[string_time] = list() + if(!our_bucket) + buckets["[loop.queued_time]"] = list() + our_bucket = buckets["[loop.queued_time]"] // This makes assoc buckets and sorted buckets point to the same place, allowing for quicker inserts - var/list/new_bucket = list(list(target_time, buckets[string_time])) - BINARY_INSERT_DEFINE(new_bucket, sorted_buckets, SORT_VAR_NO_TYPE, list(target_time), SORT_FIRST_INDEX, COMPARE_KEY) + var/list/new_bucket = list(list(loop.queued_time, our_bucket)) + var/list/compare_item = list(loop.queued_time) + BINARY_INSERT_DEFINE(new_bucket, sorted_buckets, SORT_VAR_NO_TYPE, compare_item, SORT_FIRST_INDEX, COMPARE_KEY) - buckets[string_time] += loop + our_bucket += loop /datum/controller/subsystem/movement/proc/dequeue_loop(datum/move_loop/loop) - var/list/our_entries = buckets["[loop.timer]"] + // Go home, you're not here anyway + if(!(loop.status & MOVELOOP_STATUS_QUEUED)) + return + if(isnull(loop.queued_time)) // This happens if a moveloop is dequeued while handling process() + loop.status &= ~MOVELOOP_STATUS_QUEUED + return + var/list/our_entries = buckets["[loop.queued_time]"] our_entries -= loop if(!length(our_entries)) - smash_bucket(bucket_time = loop.timer) // We can't pass an index in for context because we don't know our position + smash_bucket(bucket_time = loop.queued_time) // We can't pass an index in for context because we don't know our position + loop.queued_time = null + loop.status &= ~MOVELOOP_STATUS_QUEUED /datum/controller/subsystem/movement/proc/add_loop(datum/move_loop/add) + if(add.status & MOVELOOP_STATUS_QUEUED) + CRASH("Loop being added that is already queued.") add.loop_started() - if(QDELETED(add)) + if(QDELETED(add) || add.status & MOVELOOP_STATUS_QUEUED) return queue_loop(add) diff --git a/code/controllers/subsystem/movement/movement_types.dm b/code/controllers/subsystem/movement/movement_types.dm index 0b464a9a1960ce..ebb12c84e4bc0f 100644 --- a/code/controllers/subsystem/movement/movement_types.dm +++ b/code/controllers/subsystem/movement/movement_types.dm @@ -21,12 +21,12 @@ var/delay = 1 ///The next time we should process ///Used primarially as a hint to be reasoned about by our [controller], and as the id of our bucket - ///Should not be modified directly outside of [start_loop] var/timer = 0 - ///Is this loop running or not - var/running = FALSE - ///Track if we're currently paused - var/paused = FALSE + ///The time we are CURRENTLY queued for processing + ///Do not modify this directly + var/queued_time = -1 + /// Status bitfield for what state the move loop is currently in + var/status = NONE /datum/move_loop/New(datum/movement_packet/owner, datum/controller/subsystem/movement/controller, atom/moving, priority, flags, datum/extra_info) src.owner = owner @@ -57,7 +57,7 @@ /datum/move_loop/proc/loop_started() SHOULD_CALL_PARENT(TRUE) SEND_SIGNAL(src, COMSIG_MOVELOOP_START) - running = TRUE + status |= MOVELOOP_STATUS_RUNNING //If this is our first time starting to move with this loop //And we're meant to start instantly if(!timer && flags & MOVEMENT_LOOP_START_FAST) @@ -68,7 +68,7 @@ ///Called when a loop is stopped, doesn't stop the loop itself /datum/move_loop/proc/loop_stopped() SHOULD_CALL_PARENT(TRUE) - running = FALSE + status &= ~MOVELOOP_STATUS_RUNNING SEND_SIGNAL(src, COMSIG_MOVELOOP_STOP) /datum/move_loop/proc/info_deleted(datum/source) @@ -91,7 +91,7 @@ ///Pauses the move loop for some passed in period ///This functionally means shifting its timer up, and clearing it from its current bucket /datum/move_loop/proc/pause_for(time) - if(!controller || !running) //No controller or not running? go away + if(!controller || !(status & MOVELOOP_STATUS_RUNNING)) //No controller or not running? go away return //Dequeue us from our current bucket controller.dequeue_loop(src) @@ -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 @@ -141,21 +145,21 @@ ///Pause our loop untill restarted with resume_loop() /datum/move_loop/proc/pause_loop() - if(!controller || !running || paused) //we dead + if(!controller || !(status & MOVELOOP_STATUS_RUNNING) || (status & MOVELOOP_STATUS_PAUSED)) //we dead return //Dequeue us from our current bucket controller.dequeue_loop(src) - paused = TRUE + status |= MOVELOOP_STATUS_PAUSED ///Resume our loop after being paused by pause_loop() /datum/move_loop/proc/resume_loop() - if(!controller || !running || !paused) + if(!controller || (status & MOVELOOP_STATUS_RUNNING|MOVELOOP_STATUS_PAUSED) != (MOVELOOP_STATUS_RUNNING|MOVELOOP_STATUS_PAUSED)) return - controller.queue_loop(src) timer = world.time - paused = FALSE + controller.queue_loop(src) + status &= ~MOVELOOP_STATUS_PAUSED ///Removes the atom from some movement subsystem. Defaults to SSmovement /datum/controller/subsystem/move_manager/proc/stop_looping(atom/movable/moving, datum/controller/subsystem/movement/subsystem = SSmovement) @@ -323,6 +327,7 @@ turf/avoid, skip_first, subsystem, + diagonal_handling, priority, flags, datum/extra_info, @@ -343,6 +348,7 @@ simulated_only, avoid, skip_first, + diagonal_handling, initial_path) /datum/move_loop/has_target/jps @@ -360,6 +366,8 @@ var/turf/avoid ///Should we skip the first step? This is the tile we're currently on, which breaks some things var/skip_first + ///Whether we replace diagonal movements with cardinal movements or follow through with them + var/diagonal_handling ///A list for the path we're currently following var/list/movement_path ///Cooldown for repathing, prevents spam @@ -367,13 +375,13 @@ ///Bool used to determine if we're already making a path in JPS. this prevents us from re-pathing while we're already busy. var/is_pathing = FALSE ///Callbacks to invoke once we make a path - var/list/datum/callback/on_finish_callbacks + var/list/datum/callback/on_finish_callbacks = list() /datum/move_loop/has_target/jps/New(datum/movement_packet/owner, datum/controller/subsystem/movement/controller, atom/moving, priority, flags, datum/extra_info) . = ..() on_finish_callbacks += CALLBACK(src, PROC_REF(on_finish_pathing)) -/datum/move_loop/has_target/jps/setup(delay, timeout, atom/chasing, repath_delay, max_path_length, minimum_distance, list/access, simulated_only, turf/avoid, skip_first, list/initial_path) +/datum/move_loop/has_target/jps/setup(delay, timeout, atom/chasing, repath_delay, max_path_length, minimum_distance, list/access, simulated_only, turf/avoid, skip_first, diagonal_handling, list/initial_path) . = ..() if(!.) return @@ -384,6 +392,7 @@ src.simulated_only = simulated_only src.avoid = avoid src.skip_first = skip_first + src.diagonal_handling = diagonal_handling 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) @@ -410,7 +419,7 @@ if(!COOLDOWN_FINISHED(src, repath_cooldown)) return COOLDOWN_START(src, repath_cooldown, repath_delay) - if(SSpathfinder.pathfind(moving, target, max_path_length, minimum_distance, access, simulated_only, avoid, skip_first, on_finish = on_finish_callbacks)) + if(SSpathfinder.pathfind(moving, target, max_path_length, minimum_distance, access, simulated_only, avoid, skip_first, diagonal_handling, on_finish = on_finish_callbacks)) is_pathing = TRUE SEND_SIGNAL(src, COMSIG_MOVELOOP_JPS_REPATH) @@ -418,6 +427,7 @@ /datum/move_loop/has_target/jps/proc/on_finish_pathing(list/path) movement_path = path is_pathing = FALSE + SEND_SIGNAL(src, COMSIG_MOVELOOP_JPS_FINISHED_PATHING, path) /datum/move_loop/has_target/jps/move() if(!length(movement_path)) @@ -435,7 +445,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/nightshift.dm b/code/controllers/subsystem/nightshift.dm index 78583cef3503ff..b8df42742e43c1 100644 --- a/code/controllers/subsystem/nightshift.dm +++ b/code/controllers/subsystem/nightshift.dm @@ -24,7 +24,12 @@ SUBSYSTEM_DEF(nightshift) check_nightshift() /datum/controller/subsystem/nightshift/proc/announce(message) - priority_announce(message, sound='sound/misc/notice2.ogg', sender_override="Automated Lighting System Announcement") + priority_announce( + text = message, + sound = 'sound/misc/notice2.ogg', + sender_override = "Automated Lighting System Announcement", + color_override = "grey", + ) /datum/controller/subsystem/nightshift/proc/check_nightshift() var/emergency = SSsecurity_level.get_current_level_as_number() >= SEC_LEVEL_RED diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm deleted file mode 100644 index ce3c1f7619b016..00000000000000 --- a/code/controllers/subsystem/persistence.dm +++ /dev/null @@ -1,631 +0,0 @@ -#define FILE_RECENT_MAPS "data/RecentMaps.json" - -#define KEEP_ROUNDS_MAP 3 - -SUBSYSTEM_DEF(persistence) - name = "Persistence" - init_order = INIT_ORDER_PERSISTENCE - flags = SS_NO_FIRE - - ///instantiated wall engraving components - var/list/wall_engravings = list() - ///all saved persistent engravings loaded from JSON - var/list/saved_engravings = list() - ///tattoo stories that we're saving. - var/list/prison_tattoos_to_save = list() - ///tattoo stories that have been selected for this round. - var/list/prison_tattoos_to_use = list() - var/list/saved_messages = list() - var/list/saved_modes = list(1,2,3) - var/list/saved_maps = list() - var/list/blocked_maps = list() - var/list/saved_trophies = list() - var/list/picture_logging_information = list() - var/list/obj/structure/sign/picture_frame/photo_frames - var/list/obj/item/storage/photo_album/photo_albums - var/rounds_since_engine_exploded = 0 - var/delam_highscore = 0 - var/tram_hits_this_round = 0 - var/tram_hits_last_round = 0 - -/datum/controller/subsystem/persistence/Initialize() - load_poly() - load_wall_engravings() - load_prisoner_tattoos() - load_trophies() - load_recent_maps() - load_photo_persistence() - load_randomized_recipes() - load_custom_outfits() - load_delamination_counter() - load_tram_counter() - load_panic_bunker() //SKYRAT EDIT ADDITION - PANICBUNKER - load_adventures() - return SS_INIT_SUCCESS - -///Collects all data to persist. -/datum/controller/subsystem/persistence/proc/collect_data() - save_wall_engravings() - save_prisoner_tattoos() - collect_trophies() - collect_maps() - save_photo_persistence() //THIS IS PERSISTENCE, NOT THE LOGGING PORTION. - save_randomized_recipes() - save_scars() - save_modular_persistence() // SKYRAT EDIT ADDITION - MODULAR_PERSISTENCE - save_custom_outfits() - save_delamination_counter() - if(SStransport.can_fire) - for(var/datum/transport_controller/linear/tram/transport as anything in SStransport.transports_by_type[TRANSPORT_TYPE_TRAM]) - save_tram_history(transport.specific_transport_id) - save_tram_counter() - save_panic_bunker() //SKYRAT EDIT ADDITION - PANICBUNKER - -///Loads up Poly's speech buffer. -/datum/controller/subsystem/persistence/proc/load_poly() - for(var/mob/living/simple_animal/parrot/poly/P in GLOB.alive_mob_list) - twitterize(P.speech_buffer, "polytalk") - break //Who's been duping the bird?! - -///Loads all engravings, and places a select amount in maintenance and the prison. -/datum/controller/subsystem/persistence/proc/load_wall_engravings() - var/json_file = file(ENGRAVING_SAVE_FILE) - if(!fexists(json_file)) - return - - var/list/json = json_decode(file2text(json_file)) - if(!json) - return - - if(json["version"] < ENGRAVING_PERSISTENCE_VERSION) - update_wall_engravings(json) - - saved_engravings = json["entries"] - - if(!saved_engravings.len) - log_world("Failed to load engraved messages on map [SSmapping.config.map_name]") - return - - var/list/viable_turfs = get_area_turfs(/area/station/maintenance, subtypes = TRUE) + get_area_turfs(/area/station/security/prison, subtypes = TRUE) - var/list/turfs_to_pick_from = list() - - for(var/turf/T as anything in viable_turfs) - if(!isclosedturf(T)) - continue - turfs_to_pick_from += T - - var/successfully_loaded_engravings = 0 - - for(var/iteration in 1 to rand(MIN_PERSISTENT_ENGRAVINGS, MAX_PERSISTENT_ENGRAVINGS)) - var/engraving = pick_n_take(saved_engravings) - if(!islist(engraving)) - stack_trace("something's wrong with the engraving data! one of the saved engravings wasn't a list!") - continue - - var/turf/closed/engraved_wall = pick(turfs_to_pick_from) - - if(HAS_TRAIT(engraved_wall, TRAIT_NOT_ENGRAVABLE)) - continue - - engraved_wall.AddComponent(/datum/component/engraved, engraving["story"], FALSE, engraving["story_value"]) - successfully_loaded_engravings++ - turfs_to_pick_from -= engraved_wall - - log_world("Loaded [successfully_loaded_engravings] engraved messages on map [SSmapping.config.map_name]") - -///Saves all new engravings in the world. -/datum/controller/subsystem/persistence/proc/save_wall_engravings() - var/list/saved_data = list() - - saved_data["version"] = ENGRAVING_PERSISTENCE_VERSION - saved_data["entries"] = list() - - - var/json_file = file(ENGRAVING_SAVE_FILE) - if(fexists(json_file)) - var/list/old_json = json_decode(file2text(json_file)) - if(old_json) - saved_data["entries"] = old_json["entries"] - - for(var/datum/component/engraved/engraving in wall_engravings) - if(!engraving.persistent_save) - continue - var/area/engraved_area = get_area(engraving.parent) - if(!(engraved_area.area_flags & PERSISTENT_ENGRAVINGS)) - continue - saved_data["entries"] += engraving.save_persistent() - - fdel(json_file) - - WRITE_FILE(json_file, json_encode(saved_data)) - -///This proc can update entries if the format has changed at some point. -/datum/controller/subsystem/persistence/proc/update_wall_engravings(json) - for(var/engraving_entry in json["entries"]) - continue //no versioning yet - - //Save it to the file - var/json_file = file(ENGRAVING_SAVE_FILE) - fdel(json_file) - WRITE_FILE(json_file, json_encode(json)) - - return json - -///Loads all tattoos, and select a few based on the amount of prisoner spawn positions. -/datum/controller/subsystem/persistence/proc/load_prisoner_tattoos() - var/json_file = file(PRISONER_TATTOO_SAVE_FILE) - if(!fexists(json_file)) - return - var/list/json = json_decode(file2text(json_file)) - if(!json) - return - - if(json["version"] < TATTOO_PERSISTENCE_VERSION) - update_prisoner_tattoos(json) - - var/datum/job/prisoner_datum = SSjob.name_occupations[JOB_PRISONER] - if(!prisoner_datum) - return - var/iterations_allowed = prisoner_datum.spawn_positions - - var/list/entries = json["entries"] - if(entries.len) - for(var/index in 1 to iterations_allowed) - prison_tattoos_to_use += list(entries[rand(1, entries.len)]) - - log_world("Loaded [prison_tattoos_to_use.len] prison tattoos") - -///Saves all tattoos, so they can appear on prisoners in future rounds -/datum/controller/subsystem/persistence/proc/save_prisoner_tattoos() - var/json_file = file(PRISONER_TATTOO_SAVE_FILE) - var/list/saved_data = list() - var/list/entries = list() - - if(fexists(json_file)) - var/list/old_json = json_decode(file2text(json_file)) - if(old_json) - entries += old_json["entries"] //Save the old if its there - - entries += prison_tattoos_to_save - - saved_data["version"] = ENGRAVING_PERSISTENCE_VERSION - saved_data["entries"] = entries - - fdel(json_file) - WRITE_FILE(json_file, json_encode(saved_data)) - -///This proc can update entries if the format has changed at some point. -/datum/controller/subsystem/persistence/proc/update_prisoner_tattoos(json) - for(var/tattoo_entry in json["entries"]) - continue //no versioning yet - - //Save it to the file - var/json_file = file(PRISONER_TATTOO_SAVE_FILE) - fdel(json_file) - WRITE_FILE(json_file, json_encode(json)) - - return json - -/// Loads the trophies from the source file, and places a few in trophy display cases. -/datum/controller/subsystem/persistence/proc/load_trophies() - var/list/raw_saved_trophies = list() - if(fexists("data/npc_saves/TrophyItems.json")) - var/json_file = file("data/npc_saves/TrophyItems.json") - if(!fexists(json_file)) - return - var/list/json = json_decode(file2text(json_file)) - if(!json) - return - raw_saved_trophies = json["data"] - fdel("data/npc_saves/TrophyItems.json") - else - var/json_file = file("data/trophy_items.json") - if(!fexists(json_file)) - return - var/list/json = json_decode(file2text(json_file)) - if(!json) - return - raw_saved_trophies = json["data"] - - for(var/raw_json in raw_saved_trophies) - var/datum/trophy_data/parsed_trophy_data = new - parsed_trophy_data.load_from_json(raw_json) - saved_trophies += parsed_trophy_data - - set_up_trophies() - -///trophy data datum, for admin manipulation -/datum/trophy_data - ///path of the item the trophy will try to mimic, null if path_string is invalid - var/path - ///the message that appears under the item - var/message - ///the key of the one who placed the item in the trophy case - var/placer_key - -/datum/trophy_data/proc/load_from_json(list/json_data) - path = json_data["path"] - message = json_data["message"] - placer_key = json_data["placer_key"] - -/datum/trophy_data/proc/to_json() - var/list/new_data = list() - new_data["path"] = path - new_data["message"] = message - new_data["placer_key"] = placer_key - new_data["is_valid"] = text2path(path) ? TRUE : FALSE - return new_data - -/// Returns a list for the admin trophy panel. -/datum/controller/subsystem/persistence/proc/trophy_ui_data() - var/list/ui_data = list() - for(var/datum/trophy_data/data in saved_trophies) - var/list/pdata = data.to_json() - pdata["ref"] = REF(data) - ui_data += list(pdata) - - return ui_data - -/// Loads up the amount of times maps appeared to alter their appearance in voting and rotation. -/datum/controller/subsystem/persistence/proc/load_recent_maps() - var/map_sav = FILE_RECENT_MAPS - if(!fexists(FILE_RECENT_MAPS)) - return - var/list/json = json_decode(file2text(map_sav)) - if(!json) - return - saved_maps = json["data"] - - //Convert the mapping data to a shared blocking list, saves us doing this in several places later. - for(var/map in config.maplist) - var/datum/map_config/VM = config.maplist[map] - var/run = 0 - if(VM.map_name == SSmapping.config.map_name) - run++ - for(var/name in SSpersistence.saved_maps) - if(VM.map_name == name) - run++ - if(run >= 2) //If run twice in the last KEEP_ROUNDS_MAP + 1 (including current) rounds, disable map for voting and rotation. - blocked_maps += VM.map_name - -/// Puts trophies into trophy cases. -/datum/controller/subsystem/persistence/proc/set_up_trophies() - - var/list/valid_trophies = list() - - for(var/datum/trophy_data/data in saved_trophies) - - if(!data) //sanity for incorrect deserialization - continue - - var/path = text2path(data.path) - if(!path) //If the item no longer exist, ignore it - continue - - valid_trophies += data - - for(var/obj/structure/displaycase/trophy/trophy_case in GLOB.trophy_cases) - if(!valid_trophies.len) - break - - if(trophy_case.showpiece) - continue - - trophy_case.set_up_trophy(pick_n_take(valid_trophies)) - -///Loads up the photo album source file. -/datum/controller/subsystem/persistence/proc/get_photo_albums() - var/album_path = file("data/photo_albums.json") - if(fexists(album_path)) - return json_decode(file2text(album_path)) - -///Loads up the photo frames source file. -/datum/controller/subsystem/persistence/proc/get_photo_frames() - var/frame_path = file("data/photo_frames.json") - if(fexists(frame_path)) - return json_decode(file2text(frame_path)) - -/// Removes the identifier of a persistent photo frame from the json. -/datum/controller/subsystem/persistence/proc/remove_photo_frames(identifier) - var/frame_path = file("data/photo_frames.json") - if(!fexists(frame_path)) - return - - var/frame_json = json_decode(file2text(frame_path)) - frame_json -= identifier - - frame_json = json_encode(frame_json) - fdel(frame_path) - WRITE_FILE(frame_path, frame_json) - -///Loads photo albums, and populates them; also loads and applies frames to picture frames. -/datum/controller/subsystem/persistence/proc/load_photo_persistence() - var/album_path = file("data/photo_albums.json") - var/frame_path = file("data/photo_frames.json") - if(fexists(album_path)) - var/list/json = json_decode(file2text(album_path)) - if(json.len) - for(var/i in photo_albums) - var/obj/item/storage/photo_album/A = i - if(!A.persistence_id) - continue - if(json[A.persistence_id]) - A.populate_from_id_list(json[A.persistence_id]) - - if(fexists(frame_path)) - var/list/json = json_decode(file2text(frame_path)) - if(json.len) - for(var/i in photo_frames) - var/obj/structure/sign/picture_frame/PF = i - if(!PF.persistence_id) - continue - if(json[PF.persistence_id]) - PF.load_from_id(json[PF.persistence_id]) - -///Saves the contents of photo albums and the picture frames. -/datum/controller/subsystem/persistence/proc/save_photo_persistence() - var/album_path = file("data/photo_albums.json") - var/frame_path = file("data/photo_frames.json") - - var/list/frame_json = list() - var/list/album_json = list() - - if(fexists(album_path)) - album_json = json_decode(file2text(album_path)) - fdel(album_path) - - for(var/i in photo_albums) - var/obj/item/storage/photo_album/A = i - if(!istype(A) || !A.persistence_id) - continue - var/list/L = A.get_picture_id_list() - album_json[A.persistence_id] = L - - album_json = json_encode(album_json) - - WRITE_FILE(album_path, album_json) - - if(fexists(frame_path)) - frame_json = json_decode(file2text(frame_path)) - fdel(frame_path) - - for(var/i in photo_frames) - var/obj/structure/sign/picture_frame/F = i - if(!istype(F) || !F.persistence_id) - continue - frame_json[F.persistence_id] = F.get_photo_id() - - frame_json = json_encode(frame_json) - - WRITE_FILE(frame_path, frame_json) - -///Collects trophies from all existing trophy cases. -/datum/controller/subsystem/persistence/proc/collect_trophies() - for(var/trophy_case in GLOB.trophy_cases) - save_trophy(trophy_case) - - var/json_file = file("data/trophy_items.json") - var/list/file_data = list() - var/list/converted_data = list() - - for(var/datum/trophy_data/data in saved_trophies) - converted_data += list(data.to_json()) - - converted_data = remove_duplicate_trophies(converted_data) - - file_data["data"] = converted_data - fdel(json_file) - WRITE_FILE(json_file, json_encode(file_data)) - -///gets the list of json trophies, and deletes the ones with an identical path and message -/datum/controller/subsystem/persistence/proc/remove_duplicate_trophies(list/trophies) - var/list/ukeys = list() - . = list() - for(var/trophy in trophies) - var/tkey = "[trophy["path"]]-[trophy["message"]]" - if(ukeys[tkey]) - continue - else - . += list(trophy) - ukeys[tkey] = TRUE - -///If there is a trophy in the trophy case, saved it, if the trophy was not a holo trophy and has a message attached. -/datum/controller/subsystem/persistence/proc/save_trophy(obj/structure/displaycase/trophy/trophy_case) - if(!trophy_case.holographic_showpiece && trophy_case.showpiece && trophy_case.trophy_message) - var/datum/trophy_data/data = new - data.path = trophy_case.showpiece.type - data.message = trophy_case.trophy_message - data.placer_key = trophy_case.placer_key - saved_trophies += data - -///Updates the list of the most recent maps. -/datum/controller/subsystem/persistence/proc/collect_maps() - if(length(saved_maps) > KEEP_ROUNDS_MAP) //Get rid of extras from old configs. - saved_maps.Cut(KEEP_ROUNDS_MAP+1) - var/mapstosave = min(length(saved_maps)+1, KEEP_ROUNDS_MAP) - if(length(saved_maps) < mapstosave) //Add extras if too short, one per round. - saved_maps += mapstosave - for(var/i = mapstosave; i > 1; i--) - saved_maps[i] = saved_maps[i-1] - saved_maps[1] = SSmapping.config.map_name - var/json_file = file(FILE_RECENT_MAPS) - var/list/file_data = list() - file_data["data"] = saved_maps - fdel(json_file) - WRITE_FILE(json_file, json_encode(file_data)) - -///Loads all randomized recipes. -/datum/controller/subsystem/persistence/proc/load_randomized_recipes() - var/json_file = file("data/RandomizedChemRecipes.json") - var/json - if(fexists(json_file)) - json = json_decode(file2text(json_file)) - - for(var/randomized_type in subtypesof(/datum/chemical_reaction/randomized)) - var/datum/chemical_reaction/randomized/R = new randomized_type - var/loaded = FALSE - if(R.persistent && json) - var/list/recipe_data = json["[R.type]"] - if(recipe_data) - if(R.LoadOldRecipe(recipe_data) && (daysSince(R.created) <= R.persistence_period)) - loaded = TRUE - if(!loaded) //We do not have information for whatever reason, just generate new one - if(R.persistent) - log_game("Resetting persistent [randomized_type] random recipe.") - R.GenerateRecipe() - - if(!R.HasConflicts()) //Might want to try again if conflicts happened in the future. - add_chemical_reaction(R) - else - log_game("Randomized recipe [randomized_type] resulted in conflicting recipes.") - -///Saves all randomized recipes. -/datum/controller/subsystem/persistence/proc/save_randomized_recipes() - var/json_file = file("data/RandomizedChemRecipes.json") - var/list/file_data = list() - - //asert globchems done - for(var/randomized_type in subtypesof(/datum/chemical_reaction/randomized)) - var/datum/chemical_reaction/randomized/R = get_chemical_reaction(randomized_type) //ew, would be nice to add some simple tracking - if(R?.persistent) - var/list/recipe_data = R.SaveOldRecipe() - file_data["[R.type]"] = recipe_data - - fdel(json_file) - WRITE_FILE(json_file, json_encode(file_data)) - -///Saves all scars for everyone's original characters -/datum/controller/subsystem/persistence/proc/save_scars() - for(var/i in GLOB.joined_player_list) - var/mob/living/carbon/human/ending_human = get_mob_by_ckey(i) - if(!istype(ending_human) || !ending_human.mind?.original_character_slot_index || !ending_human.client?.prefs.read_preference(/datum/preference/toggle/persistent_scars)) - continue - - var/mob/living/carbon/human/original_human = ending_human.mind.original_character.resolve() - - if(!original_human) - continue - - if(original_human.stat == DEAD || !original_human.all_scars || original_human != ending_human) - original_human.save_persistent_scars(TRUE) - else - original_human.save_persistent_scars() - -///Loads the custom outfits of every admin. -/datum/controller/subsystem/persistence/proc/load_custom_outfits() - var/file = file("data/custom_outfits.json") - if(!fexists(file)) - return - var/outfits_json = file2text(file) - var/list/outfits = json_decode(outfits_json) - if(!islist(outfits)) - return - - for(var/outfit_data in outfits) - if(!islist(outfit_data)) - continue - - var/outfittype = text2path(outfit_data["outfit_type"]) - if(!ispath(outfittype, /datum/outfit)) - continue - var/datum/outfit/outfit = new outfittype - if(!outfit.load_from(outfit_data)) - continue - GLOB.custom_outfits += outfit - -///Saves each admin's custom outfit list -/datum/controller/subsystem/persistence/proc/save_custom_outfits() - var/file = file("data/custom_outfits.json") - fdel(file) - - var/list/data = list() - for(var/datum/outfit/outfit in GLOB.custom_outfits) - data += list(outfit.get_json_data()) - - WRITE_FILE(file, json_encode(data)) - -/// Location where we save the information about how many rounds it has been since the engine blew up/tram hits -#define DELAMINATION_COUNT_FILEPATH "data/rounds_since_delamination.txt" -#define DELAMINATION_HIGHSCORE_FILEPATH "data/delamination_highscore.txt" -#define TRAM_COUNT_FILEPATH "data/tram_hits_last_round.txt" - -/datum/controller/subsystem/persistence/proc/load_delamination_counter() - if (!fexists(DELAMINATION_COUNT_FILEPATH)) - return - rounds_since_engine_exploded = text2num(file2text(DELAMINATION_COUNT_FILEPATH)) - if (fexists(DELAMINATION_HIGHSCORE_FILEPATH)) - delam_highscore = text2num(file2text(DELAMINATION_HIGHSCORE_FILEPATH)) - for (var/obj/machinery/incident_display/sign as anything in GLOB.map_delamination_counters) - sign.update_delam_count(rounds_since_engine_exploded, delam_highscore) - -/datum/controller/subsystem/persistence/proc/save_delamination_counter() - rustg_file_write("[rounds_since_engine_exploded + 1]", DELAMINATION_COUNT_FILEPATH) - if((rounds_since_engine_exploded + 1) > delam_highscore) - rustg_file_write("[rounds_since_engine_exploded + 1]", DELAMINATION_HIGHSCORE_FILEPATH) - -/datum/controller/subsystem/persistence/proc/load_tram_counter() - if(!fexists(TRAM_COUNT_FILEPATH)) - return - tram_hits_last_round = text2num(file2text(TRAM_COUNT_FILEPATH)) - -/datum/controller/subsystem/persistence/proc/save_tram_counter() - rustg_file_write("[tram_hits_this_round]", TRAM_COUNT_FILEPATH) - -#define MAX_TRAM_SAVES 4 - -// Loads historical tram data -/datum/controller/subsystem/persistence/proc/load_tram_history(specific_transport_id) - var/list/raw_saved_trams = list() - var/json_file = file("data/tram_data/[specific_transport_id].json") - if(!fexists(json_file)) - return - var/list/json = json_decode(file2text(json_file)) - if(!json) - return - raw_saved_trams = json["data"] - - var/list/previous_tram_data = list() - for(var/raw_json in raw_saved_trams) - var/datum/tram_mfg_info/parsed_tram_data = new - parsed_tram_data.load_from_json(raw_json) - previous_tram_data += parsed_tram_data - return previous_tram_data - -// Saves historical tram data -/datum/controller/subsystem/persistence/proc/save_tram_history(specific_transport_id) - var/list/packaged_tram_data = list() - for(var/datum/transport_controller/linear/tram/transport as anything in SStransport.transports_by_type[TRANSPORT_TYPE_TRAM]) - if(transport.specific_transport_id == specific_transport_id) - packaged_tram_data = package_tram_data(transport) - break - - var/json_file = file("data/tram_data/[specific_transport_id].json") - var/list/file_data = list() - var/list/converted_data = list() - - for(var/datum/tram_mfg_info/data in packaged_tram_data) - converted_data += list(data.export_to_json()) - - file_data["data"] = converted_data - fdel(json_file) - WRITE_FILE(json_file, json_encode(file_data)) - -/datum/controller/subsystem/persistence/proc/package_tram_data(datum/transport_controller/linear/tram/tram_controller) - var/list/packaged_data = list() - var/list/tram_list = tram_controller.tram_history - if(!isnull(tram_list)) - while(tram_list.len > MAX_TRAM_SAVES) - tram_list.Cut(1,2) - - for(var/datum/tram_mfg_info/data as anything in tram_list) - packaged_data += data - - packaged_data += tram_controller.tram_registration - return packaged_data - -#undef DELAMINATION_COUNT_FILEPATH -#undef DELAMINATION_HIGHSCORE_FILEPATH -#undef TRAM_COUNT_FILEPATH -#undef FILE_RECENT_MAPS -#undef KEEP_ROUNDS_MAP -#undef MAX_TRAM_SAVES diff --git a/code/controllers/subsystem/persistence/_persistence.dm b/code/controllers/subsystem/persistence/_persistence.dm new file mode 100644 index 00000000000000..fbc094f5b538c4 --- /dev/null +++ b/code/controllers/subsystem/persistence/_persistence.dm @@ -0,0 +1,123 @@ +#define FILE_RECENT_MAPS "data/RecentMaps.json" +#define KEEP_ROUNDS_MAP 3 + +SUBSYSTEM_DEF(persistence) + name = "Persistence" + init_order = INIT_ORDER_PERSISTENCE + flags = SS_NO_FIRE + + ///instantiated wall engraving components + var/list/wall_engravings = list() + ///all saved persistent engravings loaded from JSON + var/list/saved_engravings = list() + ///tattoo stories that we're saving. + var/list/prison_tattoos_to_save = list() + ///tattoo stories that have been selected for this round. + var/list/prison_tattoos_to_use = list() + var/list/saved_messages = list() + var/list/saved_modes = list(1,2,3) + var/list/saved_maps = list() + var/list/blocked_maps = list() + var/list/saved_trophies = list() + var/list/picture_logging_information = list() + + /// A json_database linking to data/photo_frames.json. + /// Schema is persistence_id => array of photo names. + var/datum/json_database/photo_frames_database + + /// A lazy list of every picture frame that is going to be loaded with persistent photos. + /// Will be null'd once the persistence system initializes, and never read from again. + var/list/obj/structure/sign/picture_frame/queued_photo_frames + + /// A json_database linking to data/photo_albums.json. + /// Schema is persistence_id => array of photo names. + var/datum/json_database/photo_albums_database + + /// A lazy list of every photo album that is going to be loaded with persistent photos. + /// Will be null'd once the persistence system initializes, and never read from again. + var/list/obj/item/storage/photo_album/queued_photo_albums + + var/rounds_since_engine_exploded = 0 + var/delam_highscore = 0 + var/tram_hits_this_round = 0 + var/tram_hits_last_round = 0 + +/datum/controller/subsystem/persistence/Initialize() + load_poly() + load_wall_engravings() + load_prisoner_tattoos() + load_trophies() + load_recent_maps() + load_photo_persistence() + load_randomized_recipes() + load_custom_outfits() + load_delamination_counter() + load_panic_bunker() //NOVA EDIT ADDITION - PANICBUNKER + load_tram_counter() + load_adventures() + return SS_INIT_SUCCESS + +///Collects all data to persist. +/datum/controller/subsystem/persistence/proc/collect_data() + save_wall_engravings() + save_prisoner_tattoos() + collect_trophies() + collect_maps() + save_randomized_recipes() + save_scars() + save_custom_outfits() + save_modular_persistence() // NOVA EDIT ADDITION - MODULAR_PERSISTENCE + save_delamination_counter() + if(SStransport.can_fire) + for(var/datum/transport_controller/linear/tram/transport as anything in SStransport.transports_by_type[TRANSPORT_TYPE_TRAM]) + save_tram_history(transport.specific_transport_id) + save_tram_counter() + save_panic_bunker() //NOVA EDIT ADDITION - PANICBUNKER + +///Loads up Poly's speech buffer. +/datum/controller/subsystem/persistence/proc/load_poly() + for(var/mob/living/basic/parrot/poly/bird in GLOB.alive_mob_list) + var/list/list_to_read = bird.get_static_list_of_phrases() + twitterize(list_to_read, "polytalk") + break //Who's been duping the bird?! + +/// Loads up the amount of times maps appeared to alter their appearance in voting and rotation. +/datum/controller/subsystem/persistence/proc/load_recent_maps() + var/map_sav = FILE_RECENT_MAPS + if(!fexists(FILE_RECENT_MAPS)) + return + var/list/json = json_decode(file2text(map_sav)) + if(!json) + return + saved_maps = json["data"] + + //Convert the mapping data to a shared blocking list, saves us doing this in several places later. + for(var/map in config.maplist) + var/datum/map_config/VM = config.maplist[map] + var/run = 0 + if(VM.map_name == SSmapping.config.map_name) + run++ + for(var/name in SSpersistence.saved_maps) + if(VM.map_name == name) + run++ + if(run >= 2) //If run twice in the last KEEP_ROUNDS_MAP + 1 (including current) rounds, disable map for voting and rotation. + blocked_maps += VM.map_name + +///Updates the list of the most recent maps. +/datum/controller/subsystem/persistence/proc/collect_maps() + if(length(saved_maps) > KEEP_ROUNDS_MAP) //Get rid of extras from old configs. + saved_maps.Cut(KEEP_ROUNDS_MAP+1) + var/mapstosave = min(length(saved_maps)+1, KEEP_ROUNDS_MAP) + if(length(saved_maps) < mapstosave) //Add extras if too short, one per round. + saved_maps += mapstosave + for(var/i = mapstosave; i > 1; i--) + saved_maps[i] = saved_maps[i-1] + saved_maps[1] = SSmapping.config.map_name + var/json_file = file(FILE_RECENT_MAPS) + var/list/file_data = list() + file_data["data"] = saved_maps + fdel(json_file) + WRITE_FILE(json_file, json_encode(file_data)) + +#undef FILE_RECENT_MAPS +#undef KEEP_ROUNDS_MAP diff --git a/code/controllers/subsystem/persistence/counter_delamination.dm b/code/controllers/subsystem/persistence/counter_delamination.dm new file mode 100644 index 00000000000000..81dca300c7e1ee --- /dev/null +++ b/code/controllers/subsystem/persistence/counter_delamination.dm @@ -0,0 +1,20 @@ +/// Location where we save the information about how many rounds it has been since the engine blew up +#define DELAMINATION_COUNT_FILEPATH "data/rounds_since_delamination.txt" +#define DELAMINATION_HIGHSCORE_FILEPATH "data/delamination_highscore.txt" + +/datum/controller/subsystem/persistence/proc/load_delamination_counter() + if(!fexists(DELAMINATION_COUNT_FILEPATH)) + return + rounds_since_engine_exploded = text2num(file2text(DELAMINATION_COUNT_FILEPATH)) + if(fexists(DELAMINATION_HIGHSCORE_FILEPATH)) + delam_highscore = text2num(file2text(DELAMINATION_HIGHSCORE_FILEPATH)) + for(var/obj/machinery/incident_display/sign as anything in GLOB.map_delamination_counters) + sign.update_delam_count(rounds_since_engine_exploded, delam_highscore) + +/datum/controller/subsystem/persistence/proc/save_delamination_counter() + rustg_file_write("[rounds_since_engine_exploded + 1]", DELAMINATION_COUNT_FILEPATH) + if((rounds_since_engine_exploded + 1) > delam_highscore) + rustg_file_write("[rounds_since_engine_exploded + 1]", DELAMINATION_HIGHSCORE_FILEPATH) + +#undef DELAMINATION_COUNT_FILEPATH +#undef DELAMINATION_HIGHSCORE_FILEPATH diff --git a/code/controllers/subsystem/persistence/counter_tram_hits.dm b/code/controllers/subsystem/persistence/counter_tram_hits.dm new file mode 100644 index 00000000000000..806d5d5b5c2cc5 --- /dev/null +++ b/code/controllers/subsystem/persistence/counter_tram_hits.dm @@ -0,0 +1,64 @@ +/// Location where we save the information about how many times the tram hit on previous round +#define TRAM_COUNT_FILEPATH "data/tram_hits_last_round.txt" +#define MAX_TRAM_SAVES 4 + +// Loads historical tram data +/datum/controller/subsystem/persistence/proc/load_tram_history(specific_transport_id) + var/list/raw_saved_trams = list() + var/json_file = file("data/tram_data/[specific_transport_id].json") + if(!fexists(json_file)) + return + var/list/json = json_decode(file2text(json_file)) + if(!json) + return + raw_saved_trams = json["data"] + + var/list/previous_tram_data = list() + for(var/raw_json in raw_saved_trams) + var/datum/tram_mfg_info/parsed_tram_data = new + parsed_tram_data.load_from_json(raw_json) + previous_tram_data += parsed_tram_data + return previous_tram_data + +// Saves historical tram data +/datum/controller/subsystem/persistence/proc/save_tram_history(specific_transport_id) + var/list/packaged_tram_data = list() + for(var/datum/transport_controller/linear/tram/transport as anything in SStransport.transports_by_type[TRANSPORT_TYPE_TRAM]) + if(transport.specific_transport_id == specific_transport_id) + packaged_tram_data = package_tram_data(transport) + break + + var/json_file = file("data/tram_data/[specific_transport_id].json") + var/list/file_data = list() + var/list/converted_data = list() + + for(var/datum/tram_mfg_info/data in packaged_tram_data) + converted_data += list(data.export_to_json()) + + file_data["data"] = converted_data + fdel(json_file) + WRITE_FILE(json_file, json_encode(file_data)) + +/datum/controller/subsystem/persistence/proc/package_tram_data(datum/transport_controller/linear/tram/tram_controller) + var/list/packaged_data = list() + var/list/tram_list = tram_controller.tram_history + if(!isnull(tram_list)) + while(tram_list.len > MAX_TRAM_SAVES) + tram_list.Cut(1,2) + + for(var/datum/tram_mfg_info/data as anything in tram_list) + packaged_data += data + + packaged_data += tram_controller.tram_registration + return packaged_data + +/datum/controller/subsystem/persistence/proc/load_tram_counter() + if(!fexists(TRAM_COUNT_FILEPATH)) + return + tram_hits_last_round = text2num(file2text(TRAM_COUNT_FILEPATH)) + +/datum/controller/subsystem/persistence/proc/save_tram_counter() + rustg_file_write("[tram_hits_this_round]", TRAM_COUNT_FILEPATH) + +#undef TRAM_COUNT_FILEPATH +#undef MAX_TRAM_SAVES diff --git a/code/controllers/subsystem/persistence/custom_outfits.dm b/code/controllers/subsystem/persistence/custom_outfits.dm new file mode 100644 index 00000000000000..942f874fde5e59 --- /dev/null +++ b/code/controllers/subsystem/persistence/custom_outfits.dm @@ -0,0 +1,32 @@ +///Loads the custom outfits of every admin. +/datum/controller/subsystem/persistence/proc/load_custom_outfits() + var/file = file("data/custom_outfits.json") + if(!fexists(file)) + return + var/outfits_json = file2text(file) + var/list/outfits = json_decode(outfits_json) + if(!islist(outfits)) + return + + for(var/outfit_data in outfits) + if(!islist(outfit_data)) + continue + + var/outfittype = text2path(outfit_data["outfit_type"]) + if(!ispath(outfittype, /datum/outfit)) + continue + var/datum/outfit/outfit = new outfittype + if(!outfit.load_from(outfit_data)) + continue + GLOB.custom_outfits += outfit + +///Saves each admin's custom outfit list +/datum/controller/subsystem/persistence/proc/save_custom_outfits() + var/file = file("data/custom_outfits.json") + fdel(file) + + var/list/data = list() + for(var/datum/outfit/outfit in GLOB.custom_outfits) + data += list(outfit.get_json_data()) + + WRITE_FILE(file, json_encode(data)) diff --git a/code/controllers/subsystem/persistence/engravings.dm b/code/controllers/subsystem/persistence/engravings.dm new file mode 100644 index 00000000000000..f47fc7fbba124c --- /dev/null +++ b/code/controllers/subsystem/persistence/engravings.dm @@ -0,0 +1,84 @@ +///Loads all engravings, and places a select amount in maintenance and the prison. +/datum/controller/subsystem/persistence/proc/load_wall_engravings() + var/json_file = file(ENGRAVING_SAVE_FILE) + if(!fexists(json_file)) + return + + var/list/json = json_decode(file2text(json_file)) + if(!json) + return + + if(json["version"] < ENGRAVING_PERSISTENCE_VERSION) + update_wall_engravings(json) + + saved_engravings = json["entries"] + + if(!saved_engravings.len) + log_world("Failed to load engraved messages on map [SSmapping.config.map_name]") + return + + var/list/viable_turfs = get_area_turfs(/area/station/maintenance, subtypes = TRUE) + get_area_turfs(/area/station/security/prison, subtypes = TRUE) + var/list/turfs_to_pick_from = list() + + for(var/turf/T as anything in viable_turfs) + if(!isclosedturf(T)) + continue + turfs_to_pick_from += T + + var/successfully_loaded_engravings = 0 + + for(var/iteration in 1 to rand(MIN_PERSISTENT_ENGRAVINGS, MAX_PERSISTENT_ENGRAVINGS)) + var/engraving = pick_n_take(saved_engravings) + if(!islist(engraving)) + stack_trace("something's wrong with the engraving data! one of the saved engravings wasn't a list!") + continue + + var/turf/closed/engraved_wall = pick(turfs_to_pick_from) + + if(HAS_TRAIT(engraved_wall, TRAIT_NOT_ENGRAVABLE)) + continue + + engraved_wall.AddComponent(/datum/component/engraved, engraving["story"], FALSE, engraving["story_value"]) + successfully_loaded_engravings++ + turfs_to_pick_from -= engraved_wall + + log_world("Loaded [successfully_loaded_engravings] engraved messages on map [SSmapping.config.map_name]") + +///Saves all new engravings in the world. +/datum/controller/subsystem/persistence/proc/save_wall_engravings() + var/list/saved_data = list() + + saved_data["version"] = ENGRAVING_PERSISTENCE_VERSION + saved_data["entries"] = list() + + + var/json_file = file(ENGRAVING_SAVE_FILE) + if(fexists(json_file)) + var/list/old_json = json_decode(file2text(json_file)) + if(old_json) + saved_data["entries"] = old_json["entries"] + + for(var/datum/component/engraved/engraving in wall_engravings) + if(!engraving.persistent_save) + continue + var/area/engraved_area = get_area(engraving.parent) + if(!(engraved_area.area_flags & PERSISTENT_ENGRAVINGS)) + continue + saved_data["entries"] += engraving.save_persistent() + + fdel(json_file) + + WRITE_FILE(json_file, json_encode(saved_data)) + +///This proc can update entries if the format has changed at some point. +/datum/controller/subsystem/persistence/proc/update_wall_engravings(json) + for(var/engraving_entry in json["entries"]) + continue //no versioning yet + + //Save it to the file + var/json_file = file(ENGRAVING_SAVE_FILE) + fdel(json_file) + WRITE_FILE(json_file, json_encode(json)) + + return json + diff --git a/code/controllers/subsystem/persistence/photo_albums.dm b/code/controllers/subsystem/persistence/photo_albums.dm new file mode 100644 index 00000000000000..90c8ec31ac1467 --- /dev/null +++ b/code/controllers/subsystem/persistence/photo_albums.dm @@ -0,0 +1,35 @@ +/// Removes the identifier of a persistent photo frame from the json. +/datum/controller/subsystem/persistence/proc/remove_photo_frames(identifier) + var/frame_path = file("data/photo_frames.json") + if(!fexists(frame_path)) + return + + var/frame_json = json_decode(file2text(frame_path)) + frame_json -= identifier + + frame_json = json_encode(frame_json) + fdel(frame_path) + WRITE_FILE(frame_path, frame_json) + +///Loads photo albums, and populates them; also loads and applies frames to picture frames. +/datum/controller/subsystem/persistence/proc/load_photo_persistence() + photo_albums_database = new("data/photo_albums.json") + for (var/obj/item/storage/photo_album/album as anything in queued_photo_albums) + if (isnull(album.persistence_id)) + continue + + var/album_data = photo_albums_database.get_key(album.persistence_id) + if (!isnull(album_data)) + album.populate_from_id_list(album_data) + + photo_frames_database = new("data/photo_frames.json") + for (var/obj/structure/sign/picture_frame/frame as anything in queued_photo_frames) + if (isnull(frame.persistence_id)) + continue + + var/frame_data = photo_frames_database.get_key(frame.persistence_id) + if (!isnull(frame_data)) + frame.load_from_id(frame_data) + + queued_photo_albums = null + queued_photo_frames = null diff --git a/code/controllers/subsystem/persistence/recipes.dm b/code/controllers/subsystem/persistence/recipes.dm new file mode 100644 index 00000000000000..84145b26aabc37 --- /dev/null +++ b/code/controllers/subsystem/persistence/recipes.dm @@ -0,0 +1,39 @@ +///Loads all randomized recipes. +/datum/controller/subsystem/persistence/proc/load_randomized_recipes() + var/json_file = file("data/RandomizedChemRecipes.json") + var/json + if(fexists(json_file)) + json = json_decode(file2text(json_file)) + + for(var/randomized_type in subtypesof(/datum/chemical_reaction/randomized)) + var/datum/chemical_reaction/randomized/R = new randomized_type + var/loaded = FALSE + if(R.persistent && json) + var/list/recipe_data = json["[R.type]"] + if(recipe_data) + if(R.LoadOldRecipe(recipe_data) && (daysSince(R.created) <= R.persistence_period)) + loaded = TRUE + if(!loaded) //We do not have information for whatever reason, just generate new one + if(R.persistent) + log_game("Resetting persistent [randomized_type] random recipe.") + R.GenerateRecipe() + + if(!R.HasConflicts()) //Might want to try again if conflicts happened in the future. + add_chemical_reaction(R) + else + log_game("Randomized recipe [randomized_type] resulted in conflicting recipes.") + +///Saves all randomized recipes. +/datum/controller/subsystem/persistence/proc/save_randomized_recipes() + var/json_file = file("data/RandomizedChemRecipes.json") + var/list/file_data = list() + + //asert globchems done + for(var/randomized_type in subtypesof(/datum/chemical_reaction/randomized)) + var/datum/chemical_reaction/randomized/R = get_chemical_reaction(randomized_type) //ew, would be nice to add some simple tracking + if(R?.persistent) + var/list/recipe_data = R.SaveOldRecipe() + file_data["[R.type]"] = recipe_data + + fdel(json_file) + WRITE_FILE(json_file, json_encode(file_data)) diff --git a/code/controllers/subsystem/persistence/scars.dm b/code/controllers/subsystem/persistence/scars.dm new file mode 100644 index 00000000000000..fa378f24dd4376 --- /dev/null +++ b/code/controllers/subsystem/persistence/scars.dm @@ -0,0 +1,17 @@ +///Saves all scars for everyone's original characters +/datum/controller/subsystem/persistence/proc/save_scars() + for(var/i in GLOB.joined_player_list) + var/mob/living/carbon/human/ending_human = get_mob_by_ckey(i) + if(!istype(ending_human) || !ending_human.mind?.original_character_slot_index || !ending_human.client?.prefs.read_preference(/datum/preference/toggle/persistent_scars)) + continue + + var/mob/living/carbon/human/original_human = ending_human.mind.original_character.resolve() + + if(!original_human) + continue + + if(original_human.stat == DEAD || !original_human.all_scars || original_human != ending_human) + original_human.save_persistent_scars(TRUE) + else + original_human.save_persistent_scars() + diff --git a/code/controllers/subsystem/persistence/tattoos.dm b/code/controllers/subsystem/persistence/tattoos.dm new file mode 100644 index 00000000000000..45dd31c7f5c94a --- /dev/null +++ b/code/controllers/subsystem/persistence/tattoos.dm @@ -0,0 +1,55 @@ +///Loads all tattoos, and select a few based on the amount of prisoner spawn positions. +/datum/controller/subsystem/persistence/proc/load_prisoner_tattoos() + var/json_file = file(PRISONER_TATTOO_SAVE_FILE) + if(!fexists(json_file)) + return + var/list/json = json_decode(file2text(json_file)) + if(!json) + return + + if(json["version"] < TATTOO_PERSISTENCE_VERSION) + update_prisoner_tattoos(json) + + var/datum/job/prisoner_datum = SSjob.name_occupations[JOB_PRISONER] + if(!prisoner_datum) + return + var/iterations_allowed = prisoner_datum.spawn_positions + + var/list/entries = json["entries"] + if(entries.len) + for(var/index in 1 to iterations_allowed) + prison_tattoos_to_use += list(entries[rand(1, entries.len)]) + + log_world("Loaded [prison_tattoos_to_use.len] prison tattoos") + +///Saves all tattoos, so they can appear on prisoners in future rounds +/datum/controller/subsystem/persistence/proc/save_prisoner_tattoos() + var/json_file = file(PRISONER_TATTOO_SAVE_FILE) + var/list/saved_data = list() + var/list/entries = list() + + if(fexists(json_file)) + var/list/old_json = json_decode(file2text(json_file)) + if(old_json) + entries += old_json["entries"] //Save the old if its there + + entries += prison_tattoos_to_save + + saved_data["version"] = ENGRAVING_PERSISTENCE_VERSION + saved_data["entries"] = entries + + fdel(json_file) + WRITE_FILE(json_file, json_encode(saved_data)) + +///This proc can update entries if the format has changed at some point. +/datum/controller/subsystem/persistence/proc/update_prisoner_tattoos(json) + for(var/tattoo_entry in json["entries"]) + continue //no versioning yet + + //Save it to the file + var/json_file = file(PRISONER_TATTOO_SAVE_FILE) + fdel(json_file) + WRITE_FILE(json_file, json_encode(json)) + + return json + diff --git a/code/controllers/subsystem/persistence/trophies.dm b/code/controllers/subsystem/persistence/trophies.dm new file mode 100644 index 00000000000000..515ed386085011 --- /dev/null +++ b/code/controllers/subsystem/persistence/trophies.dm @@ -0,0 +1,125 @@ +///trophy data datum, for admin manipulation +/datum/trophy_data + ///path of the item the trophy will try to mimic, null if path_string is invalid + var/path + ///the message that appears under the item + var/message + ///the key of the one who placed the item in the trophy case + var/placer_key + +/// Loads the trophies from the source file, and places a few in trophy display cases. +/datum/controller/subsystem/persistence/proc/load_trophies() + var/list/raw_saved_trophies = list() + if(fexists("data/npc_saves/TrophyItems.json")) + var/json_file = file("data/npc_saves/TrophyItems.json") + if(!fexists(json_file)) + return + var/list/json = json_decode(file2text(json_file)) + if(!json) + return + raw_saved_trophies = json["data"] + fdel("data/npc_saves/TrophyItems.json") + else + var/json_file = file("data/trophy_items.json") + if(!fexists(json_file)) + return + var/list/json = json_decode(file2text(json_file)) + if(!json) + return + raw_saved_trophies = json["data"] + + for(var/raw_json in raw_saved_trophies) + var/datum/trophy_data/parsed_trophy_data = new + parsed_trophy_data.load_from_json(raw_json) + saved_trophies += parsed_trophy_data + + set_up_trophies() + +/datum/trophy_data/proc/load_from_json(list/json_data) + path = json_data["path"] + message = json_data["message"] + placer_key = json_data["placer_key"] + +/datum/trophy_data/proc/to_json() + var/list/new_data = list() + new_data["path"] = path + new_data["message"] = message + new_data["placer_key"] = placer_key + new_data["is_valid"] = text2path(path) ? TRUE : FALSE + return new_data + +/// Returns a list for the admin trophy panel. +/datum/controller/subsystem/persistence/proc/trophy_ui_data() + var/list/ui_data = list() + for(var/datum/trophy_data/data in saved_trophies) + var/list/pdata = data.to_json() + pdata["ref"] = REF(data) + ui_data += list(pdata) + + return ui_data + + +/// Puts trophies into trophy cases. +/datum/controller/subsystem/persistence/proc/set_up_trophies() + + var/list/valid_trophies = list() + + for(var/datum/trophy_data/data in saved_trophies) + + if(!data) //sanity for incorrect deserialization + continue + + var/path = text2path(data.path) + if(!path) //If the item no longer exist, ignore it + continue + + valid_trophies += data + + for(var/obj/structure/displaycase/trophy/trophy_case in GLOB.trophy_cases) + if(!valid_trophies.len) + break + + if(trophy_case.showpiece) + continue + + trophy_case.set_up_trophy(pick_n_take(valid_trophies)) + +///Collects trophies from all existing trophy cases. +/datum/controller/subsystem/persistence/proc/collect_trophies() + for(var/trophy_case in GLOB.trophy_cases) + save_trophy(trophy_case) + + var/json_file = file("data/trophy_items.json") + var/list/file_data = list() + var/list/converted_data = list() + + for(var/datum/trophy_data/data in saved_trophies) + converted_data += list(data.to_json()) + + converted_data = remove_duplicate_trophies(converted_data) + + file_data["data"] = converted_data + fdel(json_file) + WRITE_FILE(json_file, json_encode(file_data)) + +///gets the list of json trophies, and deletes the ones with an identical path and message +/datum/controller/subsystem/persistence/proc/remove_duplicate_trophies(list/trophies) + var/list/ukeys = list() + . = list() + for(var/trophy in trophies) + var/tkey = "[trophy["path"]]-[trophy["message"]]" + if(ukeys[tkey]) + continue + else + . += list(trophy) + ukeys[tkey] = TRUE + +///If there is a trophy in the trophy case, saved it, if the trophy was not a holo trophy and has a message attached. +/datum/controller/subsystem/persistence/proc/save_trophy(obj/structure/displaycase/trophy/trophy_case) + if(!trophy_case.holographic_showpiece && trophy_case.showpiece && trophy_case.trophy_message) + var/datum/trophy_data/data = new + data.path = trophy_case.showpiece.type + data.message = trophy_case.trophy_message + data.placer_key = trophy_case.placer_key + saved_trophies += data + diff --git a/code/controllers/subsystem/persistent_paintings.dm b/code/controllers/subsystem/persistent_paintings.dm index 4eb77bd21be8ca..af0644a9a0d528 100644 --- a/code/controllers/subsystem/persistent_paintings.dm +++ b/code/controllers/subsystem/persistent_paintings.dm @@ -113,6 +113,11 @@ SUBSYSTEM_DEF(persistent_paintings) /// A list of /datum/paintings saved or ready to be saved this round. var/list/paintings = list() + /// A list of paintings' data for paintings that are currently stored in the library. + var/list/cached_painting_data = list() + /// A list of paintings' data for paintings that are currently stored in the library, with admin metadata + var/list/admin_painting_data = list() + ///The list of available frame reskins (they are purely cosmetic) and the associated patronage amount required for them. var/list/frame_types_by_patronage_tier = list( "simple" = 0, @@ -127,8 +132,8 @@ SUBSYSTEM_DEF(persistent_paintings) "gold" = PATRONAGE_EXCELLENT_FRAME, "diamond" = PATRONAGE_AMAZING_FRAME, "rainbow" = PATRONAGE_SUPERB_FRAME, - "supermatter" = PATRONAGE_LEGENDARY_FRAME - ) + "supermatter" = PATRONAGE_LEGENDARY_FRAME, + ) /datum/controller/subsystem/persistent_paintings/Initialize() var/json_file = file("data/paintings.json") @@ -142,8 +147,29 @@ SUBSYSTEM_DEF(persistent_paintings) for(var/obj/structure/sign/painting/painting_frame as anything in painting_frames) painting_frame.load_persistent() + cache_paintings() + return SS_INIT_SUCCESS +/datum/controller/subsystem/persistent_paintings/proc/cache_paintings() + cached_painting_data = list() + admin_painting_data = list() + + for(var/datum/painting/painting as anything in paintings) + cached_painting_data += list(list( + "title" = painting.title, + "creator" = painting.creator_name, + "md5" = painting.md5, + "ref" = REF(painting), + "width" = painting.width, + "height" = painting.height, + "ratio" = painting.width/painting.height, + )) + + var/list/pdata = painting.to_json() + pdata["ref"] = REF(painting) + UNTYPED_LIST_ADD(admin_painting_data, pdata) + /** * Generates painting data ready to be consumed by ui. * Args: @@ -152,31 +178,27 @@ SUBSYSTEM_DEF(persistent_paintings) * * search_text : text to search for if the PAINTINGS_FILTER_SEARCH_TITLE or PAINTINGS_FILTER_SEARCH_CREATOR filters are enabled. */ /datum/controller/subsystem/persistent_paintings/proc/painting_ui_data(filter=NONE, admin=FALSE, search_text) - . = list() var/searching = filter & (PAINTINGS_FILTER_SEARCH_TITLE|PAINTINGS_FILTER_SEARCH_CREATOR) && search_text - for(var/datum/painting/painting as anything in paintings) - if(filter & PAINTINGS_FILTER_AI_PORTRAIT && ((painting.width != 24 && painting.width != 23) || (painting.height != 24 && painting.height != 23))) + var/list/paintings = admin ? admin_painting_data : cached_painting_data + + if(!searching && !(filter & PAINTINGS_FILTER_AI_PORTRAIT)) + return paintings + + var/list/filtered_paintings = list() + + for(var/painting in paintings) + if(filter & PAINTINGS_FILTER_AI_PORTRAIT && ((painting["width"] != 24 && painting["width"] != 23) || (painting["height"] != 24 && painting["height"] != 23))) continue if(searching) var/haystack_text = "" if(filter & PAINTINGS_FILTER_SEARCH_TITLE) - haystack_text = painting.title + haystack_text = painting["title"] else if(filter & PAINTINGS_FILTER_SEARCH_CREATOR) - haystack_text = painting.creator_name + haystack_text = painting["creator"] if(!findtext(haystack_text, search_text)) continue - if(admin) - var/list/pdata = painting.to_json() - pdata["ref"] = REF(painting) - . += list(pdata) - else - . += list(list( - "title" = painting.title, - "creator" = painting.creator_name, - "md5" = painting.md5, - "ref" = REF(painting), - "ratio" = painting.width/painting.height, - )) + filtered_paintings += list(painting) + return filtered_paintings /// Returns paintings with given tag. /datum/controller/subsystem/persistent_paintings/proc/get_paintings_with_tag(tag_name) @@ -309,6 +331,7 @@ SUBSYSTEM_DEF(persistent_paintings) var/payload = json_encode(all_data) fdel(json_file) WRITE_FILE(json_file, payload) + cache_paintings() #undef PAINTINGS_DATA_FORMAT_VERSION #undef PATRONAGE_OK_FRAME diff --git a/code/controllers/subsystem/polling.dm b/code/controllers/subsystem/polling.dm new file mode 100644 index 00000000000000..1eab3fb8f0d273 --- /dev/null +++ b/code/controllers/subsystem/polling.dm @@ -0,0 +1,234 @@ +SUBSYSTEM_DEF(polling) + name = "Polling" + flags = SS_BACKGROUND | SS_NO_INIT + wait = 1 SECONDS + runlevels = RUNLEVEL_GAME + /// 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) + +/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) + 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) + 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((!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 + if(!is_eligible(candidate_mob, role, check_jobban, ignore_category)) + continue + + SEND_SOUND(candidate_mob, 'sound/misc/notice2.ogg') + 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() + + + // 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(!ispath(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 + 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 = "\[Sign Up]" + var/act_never = "" + if(ignore_category) + act_never = "\[Never For This Round]" + 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() + + 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, pic_source, role_name_text) + var/list/candidate_list = poll_ghost_candidates(question, role, check_jobban, poll_time, ignore_category, 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 + // NOVA EDIT ADDITION BEGIN + if(is_banned_from(potential_candidate.ckey, BAN_GHOST_TAKEOVER) || is_banned_from(potential_candidate.ckey, BAN_ANTAGONIST)) + to_chat(potential_candidate, "There was a ghost prompt for: [role], unfortunately you are banned from ghost takeovers.") + return FALSE + // NOVA EDIT ADDITION END + 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(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)) + var/polls_of_same_type_left = FALSE + for(var/datum/candidate_poll/running_poll as anything in currently_polling) + if(running_poll.poll_key == finishing_poll.poll_key && running_poll.time_left() > 0) + polls_of_same_type_left = TRUE + break + for(var/atom/movable/screen/alert/poll_alert/alert as anything in finishing_poll.alert_buttons) + if(polls_of_same_type_left) + 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 ..() + +/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/processing/ai_behaviors.dm b/code/controllers/subsystem/processing/ai_behaviors.dm index 4ec698db32bbcc..e92da2474bb736 100644 --- a/code/controllers/subsystem/processing/ai_behaviors.dm +++ b/code/controllers/subsystem/processing/ai_behaviors.dm @@ -8,9 +8,12 @@ PROCESSING_SUBSYSTEM_DEF(ai_behaviors) wait = 1 ///List of all ai_behavior singletons, key is the typepath while assigned value is a newly created instance of the typepath. See SetupAIBehaviors() var/list/ai_behaviors + ///List of all targeting_strategy singletons, key is the typepath while assigned value is a newly created instance of the typepath. See SetupAIBehaviors() + var/list/targeting_strategies /datum/controller/subsystem/processing/ai_behaviors/Initialize() SetupAIBehaviors() + SetupTargetingStrats() return SS_INIT_SUCCESS /datum/controller/subsystem/processing/ai_behaviors/proc/SetupAIBehaviors() @@ -18,3 +21,9 @@ PROCESSING_SUBSYSTEM_DEF(ai_behaviors) for(var/behavior_type in subtypesof(/datum/ai_behavior)) var/datum/ai_behavior/ai_behavior = new behavior_type ai_behaviors[behavior_type] = ai_behavior + +/datum/controller/subsystem/processing/ai_behaviors/proc/SetupTargetingStrats() + targeting_strategies = list() + for(var/target_type in subtypesof(/datum/targeting_strategy)) + var/datum/targeting_strategy/target_start = new target_type + targeting_strategies[target_type] = target_start diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index c34d97b28f9c45..d112cfe49e22f6 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -12,25 +12,30 @@ GLOBAL_LIST_INIT_TYPED(quirk_blacklist, /list/datum/quirk, list( list(/datum/quirk/item_quirk/clown_enjoyer, /datum/quirk/item_quirk/mime_fan, /datum/quirk/item_quirk/pride_pin), list(/datum/quirk/bad_touch, /datum/quirk/friendly), list(/datum/quirk/extrovert, /datum/quirk/introvert), - list(/datum/quirk/prosthetic_limb, /datum/quirk/quadruple_amputee, /datum/quirk/body_purist), + list(/datum/quirk/prosthetic_limb, /datum/quirk/quadruple_amputee, /datum/quirk/transhumanist, /datum/quirk/body_purist), list(/datum/quirk/prosthetic_organ, /datum/quirk/tin_man, /datum/quirk/body_purist), list(/datum/quirk/quadruple_amputee, /datum/quirk/paraplegic, /datum/quirk/hemiplegic), - //list(/datum/quirk/quadruple_amputee, /datum/quirk/frail), // SKYRAT EDIT REMOVAL- Since we have synth wounds now, frail has a large downside for prosthetics and such + //list(/datum/quirk/quadruple_amputee, /datum/quirk/frail), // NOVA EDIT REMOVAL- Since we have synth wounds now, frail has a large downside for prosthetics and such list(/datum/quirk/social_anxiety, /datum/quirk/mute), list(/datum/quirk/mute, /datum/quirk/softspoken), list(/datum/quirk/poor_aim, /datum/quirk/bighands), list(/datum/quirk/bilingual, /datum/quirk/foreigner), - list(/datum/quirk/spacer_born, /datum/quirk/paraplegic, /datum/quirk/item_quirk/settler), + list(/datum/quirk/spacer_born, /datum/quirk/item_quirk/settler), list(/datum/quirk/photophobia, /datum/quirk/nyctophobia), list(/datum/quirk/item_quirk/settler, /datum/quirk/freerunning), list(/datum/quirk/numb, /datum/quirk/selfaware), - //SKYRAT EDIT ADDITION BEGIN + //NOVA EDIT ADDITION BEGIN list(/datum/quirk/equipping/nerve_staple, /datum/quirk/nonviolent), list(/datum/quirk/equipping/nerve_staple, /datum/quirk/item_quirk/nearsighted), list(/datum/quirk/no_guns, /datum/quirk/bighands, /datum/quirk/poor_aim), list(/datum/quirk/no_guns, /datum/quirk/nonviolent), list(/datum/quirk/spacer_born, /datum/quirk/oversized), - //SKYRAT EDIT ADDITION END + list(/datum/quirk/feline_aspect, /datum/quirk/item_quirk/canine, /datum/quirk/item_quirk/avian), + list(/datum/quirk/all_nighter, /datum/quirk/heavy_sleeper), + list(/datum/quirk/light_drinker, /datum/quirk/drunkhealing), + list(/datum/quirk/oversized, /datum/quirk/freerunning), + list(/datum/quirk/oversized, /datum/quirk/item_quirk/settler), + //NOVA EDIT ADDITION END )) GLOBAL_LIST_INIT(quirk_string_blacklist, generate_quirk_string_blacklist()) @@ -81,13 +86,13 @@ PROCESSING_SUBSYSTEM_DEF(quirks) if(initial(quirk_type.abstract_parent_type) == type) continue - // SKYRAT EDIT ADDITION START + // NOVA EDIT ADDITION START if(initial(quirk_type.erp_quirk) && CONFIG_GET(flag/disable_erp_preferences)) continue // Hidden quirks aren't visible to TGUI or the player if (initial(quirk_type.hidden_quirk)) continue - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END quirks[initial(quirk_type.name)] = quirk_type quirk_points[initial(quirk_type.name)] = initial(quirk_type.value) @@ -104,7 +109,7 @@ PROCESSING_SUBSYSTEM_DEF(quirks) var/datum/quirk/quirk_type = quirks[quirk_name] if(ispath(quirk_type)) if(user.add_quirk(quirk_type, override_client = applied_client)) - SSblackbox.record_feedback("nested tally", "quirks_taken", 1, list("[quirk_name]")) + SSblackbox.record_feedback("tally", "quirks_taken", 1, "[quirk_name]") else stack_trace("Invalid quirk \"[quirk_name]\" in client [applied_client.ckey] preferences") applied_client.prefs.all_quirks -= quirk_name @@ -179,18 +184,18 @@ PROCESSING_SUBSYSTEM_DEF(quirks) /// be valid. /// If no changes need to be made, will return the same list. /// Expects all quirk names to be unique, but makes no other expectations. -/datum/controller/subsystem/processing/quirks/proc/filter_invalid_quirks(list/quirks, list/augments) // SKYRAT EDIT - AUGMENTS+ +/datum/controller/subsystem/processing/quirks/proc/filter_invalid_quirks(list/quirks, list/augments) // NOVA EDIT - AUGMENTS+ var/list/new_quirks = list() var/list/positive_quirks = list() var/balance = 0 var/list/all_quirks = get_quirks() - // SKYRAT EDIT BEGIN - AUGMENTS+ + // NOVA EDIT BEGIN - AUGMENTS+ for(var/key in augments) var/datum/augment_item/aug = GLOB.augment_items[augments[key]] balance += aug.cost - // SKYRAT EDIT END + // NOVA EDIT END for (var/quirk_name in quirks) var/datum/quirk/quirk = all_quirks[quirk_name] if (isnull(quirk)) diff --git a/code/controllers/subsystem/processing/reagents.dm b/code/controllers/subsystem/processing/reagents.dm index c4b86a23efccff..20244c12bb598c 100644 --- a/code/controllers/subsystem/processing/reagents.dm +++ b/code/controllers/subsystem/processing/reagents.dm @@ -18,7 +18,7 @@ PROCESSING_SUBSYSTEM_DEF(reagents) //Build GLOB lists - see holder.dm build_chemical_reactions_lists() - // SKYRAT EDIT ADDITION START + // NOVA EDIT ADDITION START if(CONFIG_GET(flag/disable_erp_preferences)) for(var/reaction_path in GLOB.chemical_reactions_list) var/datum/chemical_reaction/reaction_datum = GLOB.chemical_reactions_list[reaction_path] @@ -29,7 +29,7 @@ PROCESSING_SUBSYSTEM_DEF(reagents) var/list/reaction_list = GLOB.chemical_reactions_list_reactant_index[reaction] if(reaction_list) reaction_list -= reaction_datum - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END return SS_INIT_SUCCESS /datum/controller/subsystem/processing/reagents/fire(resumed = FALSE) diff --git a/code/controllers/subsystem/processing/singulo.dm b/code/controllers/subsystem/processing/singulo.dm index 882d8e70f1a200..8d4ddf3418bd36 100644 --- a/code/controllers/subsystem/processing/singulo.dm +++ b/code/controllers/subsystem/processing/singulo.dm @@ -2,5 +2,5 @@ PROCESSING_SUBSYSTEM_DEF(singuloprocess) name = "Singularity" wait = 0.5 - priority = FIRE_PRIORITY_DEFAULT + priority = FIRE_PRIORITY_SINGULO stat_tag = "SIN" diff --git a/code/controllers/subsystem/research.dm b/code/controllers/subsystem/research.dm index 1cc3468fb7db48..1d31582fc5fff1 100644 --- a/code/controllers/subsystem/research.dm +++ b/code/controllers/subsystem/research.dm @@ -27,15 +27,15 @@ SUBSYSTEM_DEF(research) var/list/techweb_nodes_starting = list() ///category name = list(node.id = TRUE) var/list/techweb_categories = list() - ///associative double-layer path = list(id = list(point_type = point_discount)) - var/list/techweb_boost_items = list() + ///List of all items that can unlock a node. (node.id = list(items)) + var/list/techweb_unlock_items = list() ///Node ids that should be hidden by default. var/list/techweb_nodes_hidden = list() ///Node ids that are exclusive to the BEPIS. var/list/techweb_nodes_experimental = list() ///path = list(point type = value) var/list/techweb_point_items = list( - /obj/item/assembly/signaler/anomaly = list(TECHWEB_POINT_TYPE_GENERIC = 10000) + /obj/item/assembly/signaler/anomaly = list(TECHWEB_POINT_TYPE_GENERIC = 10000) ) var/list/errored_datums = list() var/list/point_types = list() //typecache style type = TRUE list @@ -64,7 +64,7 @@ SUBSYSTEM_DEF(research) /// Lookup list for ordnance briefers. var/list/ordnance_experiments = list() /// Lookup list for scipaper partners. - var/list/scientific_partners = list() + var/list/datum/scientific_partner/scientific_partners = list() /datum/controller/subsystem/research/Initialize() point_types = TECHWEB_POINT_TYPE_LIST_ASSOCIATIVE_NAMES @@ -153,7 +153,7 @@ SUBSYSTEM_DEF(research) if (!verify_techweb_nodes()) //Verify all nodes have ids and such. stack_trace("Invalid techweb nodes detected") calculate_techweb_nodes() - calculate_techweb_boost_list() + calculate_techweb_item_unlocking_requirements() if (!verify_techweb_nodes()) //Verify nodes and designs have been crosslinked properly. CRASH("Invalid techweb nodes detected") @@ -209,25 +209,15 @@ SUBSYSTEM_DEF(research) N.unlock_ids -= u research_node_id_error(u) . = FALSE - for(var/p in N.boost_item_paths) + for(var/p in N.required_items_to_unlock) if(!ispath(p)) - N.boost_item_paths -= p + N.required_items_to_unlock -= p WARNING("[p] is not a valid path.") node_boost_error(N.id, "[p] is not a valid path.") . = FALSE - var/list/points = N.boost_item_paths[p] - if(islist(points)) - for(var/i in points) - if(!isnum(points[i])) - WARNING("[points[i]] is not a valid number.") - node_boost_error(N.id, "[points[i]] is not a valid number.") - . = FALSE - else if(!point_types[i]) - WARNING("[i] is not a valid point type.") - node_boost_error(N.id, "[i] is not a valid point type.") - . = FALSE - else if(!isnull(points)) - N.boost_item_paths -= p + var/list/points = N.required_items_to_unlock[p] + if(!isnull(points)) + N.required_items_to_unlock -= p node_boost_error(N.id, "No valid list.") WARNING("No valid list.") . = FALSE @@ -281,18 +271,16 @@ SUBSYSTEM_DEF(research) var/datum/techweb_node/prereq_node = techweb_node_by_id(prereq_id) prereq_node.unlock_ids[node.id] = node -/datum/controller/subsystem/research/proc/calculate_techweb_boost_list(clearall = FALSE) - if(clearall) - techweb_boost_items = list() +/datum/controller/subsystem/research/proc/calculate_techweb_item_unlocking_requirements() for(var/node_id in techweb_nodes) var/datum/techweb_node/node = techweb_nodes[node_id] - for(var/path in node.boost_item_paths) + for(var/path in node.required_items_to_unlock) if(!ispath(path)) continue - if(length(techweb_boost_items[path])) - techweb_boost_items[path][node.id] = node.boost_item_paths[path] + if(length(techweb_unlock_items[path])) + techweb_unlock_items[path][node.id] = node.required_items_to_unlock[path] else - techweb_boost_items[path] = list(node.id = node.boost_item_paths[path]) + techweb_unlock_items[path] = list(node.id = node.required_items_to_unlock[path]) CHECK_TICK /datum/controller/subsystem/research/proc/populate_ordnance_experiments() diff --git a/code/controllers/subsystem/security_level.dm b/code/controllers/subsystem/security_level.dm index df5ea642ce3701..cb61af0f3e03d6 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 @@ -42,7 +43,8 @@ SUBSYSTEM_DEF(security_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 - level_announce(selected_level, current_security_level.number_level) // We want to announce BEFORE updating to the new level + if(announce) + level_announce(selected_level, current_security_level.number_level) // We want to announce BEFORE updating to the new level SSsecurity_level.current_security_level = selected_level diff --git a/code/controllers/subsystem/server_maint.dm b/code/controllers/subsystem/server_maint.dm index 15fecf2a0299f1..69a5edcca3a638 100644 --- a/code/controllers/subsystem/server_maint.dm +++ b/code/controllers/subsystem/server_maint.dm @@ -31,6 +31,11 @@ SUBSYSTEM_DEF(server_maint) "dead_mob_list" = GLOB.dead_mob_list, "keyloop_list" = GLOB.keyloop_list, //A null here will cause new clients to be unable to move. totally unacceptable ) + + var/datum/tgs_version/tgsversion = world.TgsVersion() + if(tgsversion) + SSblackbox.record_feedback("text", "server_tools", 1, tgsversion.raw_parameter) + return SS_INIT_SUCCESS /datum/controller/subsystem/server_maint/fire(resumed = FALSE) @@ -86,9 +91,6 @@ SUBSYSTEM_DEF(server_maint) C?.tgui_panel?.send_roundrestart() if(server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite C << link("byond://[server]") - var/datum/tgs_version/tgsversion = world.TgsVersion() - if(tgsversion) - SSblackbox.record_feedback("text", "server_tools", 1, tgsversion.raw_parameter) /datum/controller/subsystem/server_maint/proc/UpdateHubStatus() diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index eee808e9f4e74f..45384e194dfe77 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -100,9 +100,6 @@ SUBSYSTEM_DEF(shuttle) /// Wishlist items made by crew for cargo to purchase at their leisure. var/list/request_list = list() - /// A listing of previously delivered supply packs. - var/list/order_history = list() - /// A list of job accesses that are able to purchase any shuttles. var/list/has_purchase_shuttle_access @@ -150,10 +147,10 @@ SUBSYSTEM_DEF(shuttle) while(length(pack_processing)) var/datum/supply_pack/pack = pack_processing[length(pack_processing)] pack_processing.len-- - //SKYRAT EDIT START + //NOVA EDIT START if(pack == /datum/supply_pack/armament) continue - //SKYRAT EDIT END + //NOVA EDIT END if(ispath(pack, /datum/supply_pack)) pack = new pack @@ -265,13 +262,27 @@ SUBSYSTEM_DEF(shuttle) message_admins(msg) log_shuttle("[msg] Alive: [alive], Roundstart: [total], Threshold: [threshold]") emergency_no_recall = TRUE - priority_announce("Catastrophic casualties detected: crisis shuttle protocols activated - jamming recall signals across all frequencies.") + priority_announce( + text = "Catastrophic casualties detected: crisis shuttle protocols activated - jamming recall signals across all frequencies.", + title = "Emergency Shuttle Dispatched", + sound = ANNOUNCER_SHUTTLECALLED, + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "orange", + ) if(emergency.timeLeft(1) > emergency_call_time * ALERT_COEFF_AUTOEVAC_CRITICAL) emergency.request(null, set_coefficient = ALERT_COEFF_AUTOEVAC_CRITICAL) /datum/controller/subsystem/shuttle/proc/block_recall(lockout_timer) + if(isnull(lockout_timer)) + CRASH("Emergency shuttle block was called, but missing a value for the lockout duration") if(admin_emergency_no_recall) - priority_announce("Error!", "Emergency Shuttle Uplink Alert", ANNOUNCER_SHUTTLE) // SKYRAT EDIT CHANGE - Announcer Sounds + priority_announce( + text = "Emergency shuttle uplink interference detected, shuttle call disabled while the system reinitializes. Estimated restore in [DisplayTimeText(lockout_timer, round_seconds_to = 60)].", + title = "Uplink Interference", + sound = ANNOUNCER_SHUTTLE, // NOVA EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg', + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "grey", + ) addtimer(CALLBACK(src, PROC_REF(unblock_recall)), lockout_timer) return emergency_no_recall = TRUE @@ -279,7 +290,13 @@ SUBSYSTEM_DEF(shuttle) /datum/controller/subsystem/shuttle/proc/unblock_recall() if(admin_emergency_no_recall) - priority_announce("Error!", "Emergency Shuttle Uplink Alert", ANNOUNCER_SHUTTLE) // SKYRAT EDIT CHANGE - Announcer Sounds + priority_announce( + text= "Emergency shuttle uplink services are now back online.", + title = "Uplink Restored", + sound = ANNOUNCER_SHUTTLE, // NOVA EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg', + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "green", + ) return emergency_no_recall = FALSE @@ -392,7 +409,7 @@ SUBSYSTEM_DEF(shuttle) if(!admiral_message) admiral_message = pick(GLOB.admiral_messages) - var/intercepttext = "Nanotrasen Update: Request For Shuttle.
\ + var/intercepttext = "Symphionia Update: Request For Shuttle.
\ To whom it may concern:

\ We have taken note of the situation upon [station_name()] and have come to the \ conclusion that it does not warrant the abandonment of the station.
\ @@ -430,9 +447,9 @@ SUBSYSTEM_DEF(shuttle) return if(SEC_LEVEL_BLUE) //if(emergency.timeLeft(1) < emergency_call_time * 0.5) ORIGINAL - if(emergency.timeLeft(1) < emergency_call_time * 0.6) //SKYRAT EDIT CHANGE - ALERTS + if(emergency.timeLeft(1) < emergency_call_time * 0.6) //NOVA EDIT CHANGE - ALERTS return - //SKYRAT EDIT ADDITION BEGIN - ALERTS + //NOVA EDIT ADDITION BEGIN - ALERTS if(SEC_LEVEL_ORANGE) if(emergency.timeLeft(1) < emergency_call_time * 0.4) return @@ -442,7 +459,7 @@ SUBSYSTEM_DEF(shuttle) if(SEC_LEVEL_AMBER) if(emergency.timeLeft(1) < emergency_call_time * 0.4) return - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END else if(emergency.timeLeft(1) < emergency_call_time * 0.25) return @@ -519,15 +536,23 @@ SUBSYSTEM_DEF(shuttle) emergency.mode = SHUTTLE_STRANDED emergency.timer = null emergency.sound_played = FALSE - priority_announce("Hostile environment detected. \ - Departure has been postponed indefinitely pending \ - conflict resolution.", null, 'sound/misc/notice1.ogg', ANNOUNCEMENT_TYPE_PRIORITY) + priority_announce( + text = "Departure has been postponed indefinitely pending conflict resolution.", + title = "Hostile Environment Detected", + sound = 'sound/misc/notice1.ogg', + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "grey", + ) if(!emergency_no_escape && (emergency.mode == SHUTTLE_STRANDED)) emergency.mode = SHUTTLE_DOCKED emergency.setTimer(emergency_dock_time) - priority_announce("Hostile environment resolved. \ - You have 3 minutes to board the Emergency Shuttle.", - null, ANNOUNCER_SHUTTLEDOCK, ANNOUNCEMENT_TYPE_PRIORITY) + priority_announce( + text = "You have [DisplayTimeText(emergency_dock_time)] to board the emergency shuttle.", + title = "Hostile Environment Resolved", + sound = 'sound/misc/announce_dig.ogg', + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "green", + ) //try to move/request to dock_home if possible, otherwise dock_away. Mainly used for admin buttons /datum/controller/subsystem/shuttle/proc/toggleShuttle(shuttle_id, dock_home, dock_away, timed) @@ -717,8 +742,6 @@ SUBSYSTEM_DEF(shuttle) shopping_list = SSshuttle.shopping_list if (istype(SSshuttle.request_list)) request_list = SSshuttle.request_list - if (istype(SSshuttle.order_history)) - order_history = SSshuttle.order_history if (istype(SSshuttle.shuttle_loan)) shuttle_loan = SSshuttle.shuttle_loan diff --git a/code/controllers/subsystem/spatial_gridmap.dm b/code/controllers/subsystem/spatial_gridmap.dm index 64f7994a1fe427..81ae29f6bad4f6 100644 --- a/code/controllers/subsystem/spatial_gridmap.dm +++ b/code/controllers/subsystem/spatial_gridmap.dm @@ -44,7 +44,7 @@ client_contents = dummy_list atmos_contents = dummy_list -/datum/spatial_grid_cell/Destroy(force, ...) +/datum/spatial_grid_cell/Destroy(force) if(force)//the response to someone trying to qdel this is a right proper fuck you stack_trace("dont try to destroy spatial grid cells without a good reason. if you need to do it use force") return diff --git a/code/controllers/subsystem/statpanel.dm b/code/controllers/subsystem/statpanel.dm index 3f155695257b9a..d652df3a567342 100644 --- a/code/controllers/subsystem/statpanel.dm +++ b/code/controllers/subsystem/statpanel.dm @@ -23,7 +23,7 @@ SUBSYSTEM_DEF(statpanels) if (!resumed) num_fires++ var/datum/map_config/cached = SSmapping.next_map_config - /* SKYRAT EDIT CHANGE + /* NOVA EDIT CHANGE global_data = list( "Map: [SSmapping.config?.map_name || "Loading..."]", cached ? "Next Map: [cached.map_name]" : null, @@ -50,7 +50,7 @@ SUBSYSTEM_DEF(statpanels) "Round Timer: [round_time > MIDNIGHT_ROLLOVER ? "[round(round_time/MIDNIGHT_ROLLOVER)]:[worldtime2text()]" : worldtime2text()]", "Actual Round Timer: [time2text(real_round_time, "hh:mm:ss", 0)]" ) - // SKYRAT EDIT END + // NOVA EDIT END if(SSshuttle.emergency) var/ETA = SSshuttle.emergency.getModeStr() @@ -341,7 +341,7 @@ SUBSYSTEM_DEF(statpanels) . = ..() src.parent = parent -/datum/object_window_info/Destroy(force, ...) +/datum/object_window_info/Destroy(force) atoms_to_show = null atoms_to_images = null atoms_to_imagify = null diff --git a/code/controllers/subsystem/stock_market.dm b/code/controllers/subsystem/stock_market.dm index 7c2cb71dc4972b..c0d85eaf85dc82 100644 --- a/code/controllers/subsystem/stock_market.dm +++ b/code/controllers/subsystem/stock_market.dm @@ -51,6 +51,7 @@ SUBSYSTEM_DEF(stock_market) price_minimum = round(initial(mat.minimum_value_override) * SHEET_MATERIAL_AMOUNT) var/price_maximum = round(initial(mat.value_per_unit) * SHEET_MATERIAL_AMOUNT * 3) var/price_baseline = initial(mat.value_per_unit) * SHEET_MATERIAL_AMOUNT + var/quantity_baseline = initial(mat.tradable_base_quantity) var/stock_quantity = materials_quantity[mat] @@ -84,15 +85,15 @@ SUBSYSTEM_DEF(stock_market) switch(trend) if(MARKET_TREND_UPWARD) price_change = ROUND_UP(gaussian(price_units * 0.1, price_baseline * 0.05)) //If we don't ceil, small numbers will get trapped at low values - quantity_change = -round(gaussian(stock_quantity * 0.1, stock_quantity * 0.05)) + quantity_change = -round(gaussian(quantity_baseline * 0.05, quantity_baseline * 0.05)) if(MARKET_TREND_STABLE) price_change = round(gaussian(0, price_baseline * 0.01)) - quantity_change = round(gaussian(0, stock_quantity * 0.01)) + quantity_change = round(gaussian(0, quantity_baseline * 0.01)) if(MARKET_TREND_DOWNWARD) price_change = -ROUND_UP(gaussian(price_units * 0.1, price_baseline * 0.05)) - quantity_change = round(gaussian(stock_quantity * 0.1, stock_quantity * 0.05)) + quantity_change = round(gaussian(quantity_baseline * 0.05, quantity_baseline * 0.05)) materials_prices[mat] = round(clamp(price_units + price_change, price_minimum, price_maximum)) - materials_quantity[mat] = round(clamp(stock_quantity + quantity_change, 0, initial(mat.tradable_base_quantity) * 2)) + materials_quantity[mat] = round(clamp(stock_quantity + quantity_change, 0, quantity_baseline * 2)) /** * Market events are a way to spice up the market and make it more interesting. diff --git a/code/controllers/subsystem/tgui.dm b/code/controllers/subsystem/tgui.dm index c12c1b2bb327bb..0abbe88ef0e761 100644 --- a/code/controllers/subsystem/tgui.dm +++ b/code/controllers/subsystem/tgui.dm @@ -30,7 +30,7 @@ SUBSYSTEM_DEF(tgui) var/polyfill = file2text('tgui/public/tgui-polyfill.min.js') polyfill = "" basehtml = replacetextEx(basehtml, "", polyfill) - basehtml = replacetextEx(basehtml, "", "Nanotrasen (c) 2525-[CURRENT_STATION_YEAR]") + basehtml = replacetextEx(basehtml, "", "Symphionia (c) 2525-[CURRENT_STATION_YEAR]") /datum/controller/subsystem/tgui/Shutdown() close_all_uis() diff --git a/code/controllers/subsystem/throwing.dm b/code/controllers/subsystem/throwing.dm index 60c8ecbf84c516..6990a142e4e2db 100644 --- a/code/controllers/subsystem/throwing.dm +++ b/code/controllers/subsystem/throwing.dm @@ -58,7 +58,7 @@ SUBSYSTEM_DEF(throwing) ///Turfs to travel per tick var/speed ///If a mob is the one who has thrown the object, then it's moved here. This can be null and must be null checked before trying to use it. - var/mob/thrower + var/datum/weakref/thrower ///A variable that helps in describing objects thrown at an angle, if it should be moved diagonally first or last. var/diagonals_first ///Set to TRUE if the throw is exclusively diagonal (45 Degree angle throws for example) @@ -101,7 +101,8 @@ SUBSYSTEM_DEF(throwing) src.init_dir = init_dir src.maxrange = maxrange src.speed = speed - src.thrower = thrower + if(thrower) + src.thrower = WEAKREF(thrower) src.diagonals_first = diagonals_first src.force = force src.gentle = gentle @@ -124,6 +125,12 @@ SUBSYSTEM_DEF(throwing) qdel(src) +/// Returns the mob thrower, or null +/datum/thrownthing/proc/get_thrower() + . = thrower?.resolve() + if(isnull(.)) + thrower = null + /datum/thrownthing/proc/tick() var/atom/movable/AM = thrownthing if (!isturf(AM.loc) || !AM.throwing) @@ -135,10 +142,11 @@ SUBSYSTEM_DEF(throwing) return var/atom/movable/actual_target = initial_target?.resolve() + var/mob/mob_thrower = get_thrower() if(dist_travelled) //to catch sneaky things moving on our tile while we slept for(var/atom/movable/obstacle as anything in get_turf(thrownthing)) - if (obstacle == thrownthing || (obstacle == thrower && !ismob(thrownthing))) + if (obstacle == thrownthing || (obstacle == mob_thrower && !ismob(thrownthing))) continue if(ismob(obstacle) && thrownthing.pass_flags & PASSMOB && (obstacle != actual_target)) continue @@ -225,7 +233,8 @@ SUBSYSTEM_DEF(throwing) if(thrownthing) SEND_SIGNAL(thrownthing, COMSIG_MOVABLE_THROW_LANDED, src) var/turf/landed_turf = get_turf(thrownthing) - SEND_SIGNAL(landed_turf, COMSIG_TURF_MOVABLE_THROW_LANDED, thrownthing) + if(landed_turf) + SEND_SIGNAL(landed_turf, COMSIG_TURF_MOVABLE_THROW_LANDED, thrownthing) qdel(src) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 97b2c85b2aa9ad..75b51b2babc08a 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -20,8 +20,6 @@ SUBSYSTEM_DEF(ticker) /// Boolean to track and check if our subsystem setup is done. var/setup_done = FALSE - var/datum/game_mode/mode = null - var/login_music //music played in pregame lobby var/round_end_sound //music/jingle played when the world reboots var/round_end_sound_sent = TRUE //If all clients have loaded it @@ -69,9 +67,9 @@ SUBSYSTEM_DEF(ticker) /// Why an emergency shuttle was called var/emergency_reason - var/real_round_start_time = 0 //SKYRAT EDIT ADDITION + var/real_round_start_time = 0 //NOVA EDIT ADDITION - var/discord_alerted = FALSE //SKYRAT EDIT - DISCORD PING SPAM PREVENTION + var/discord_alerted = FALSE //NOVA EDIT - DISCORD PING SPAM PREVENTION /datum/controller/subsystem/ticker/Initialize() var/list/byond_sound_formats = list( @@ -165,14 +163,14 @@ SUBSYSTEM_DEF(ticker) to_chat(world, span_notice("Welcome to [station_name()]!")) /* ORIGINAL: send2chat("New round starting on [SSmapping.config.map_name]!", CONFIG_GET(string/channel_announce_new_game)) - */ // SKYRAT EDIT START - DISCORD SPAM PREVENTION + */ // NOVA EDIT START - DISCORD SPAM PREVENTION if(!discord_alerted) discord_alerted = TRUE - send2chat(new /datum/tgs_message_content("<@&[CONFIG_GET(string/game_alert_role_id)]> Round **[GLOB.round_id]** starting on [SSmapping.config.map_name], [CONFIG_GET(string/servername)]! \nIf you wish to be pinged for game related stuff, go to <#[CONFIG_GET(string/role_assign_channel_id)]> and assign yourself the roles."), CONFIG_GET(string/channel_announce_new_game)) // SKYRAT EDIT - Role ping and round ID in game-alert - // SKYRAT EDIT END + send2chat(new /datum/tgs_message_content("<@&[CONFIG_GET(string/game_alert_role_id)]> Round **[GLOB.round_id]** starting on [SSmapping.config.map_name], [CONFIG_GET(string/servername)]! \nIf you wish to be pinged for game related stuff, go to <#[CONFIG_GET(string/role_assign_channel_id)]> and assign yourself the roles."), CONFIG_GET(string/channel_announce_new_game)) // NOVA EDIT - Role ping and round ID in game-alert + // NOVA EDIT END current_state = GAME_STATE_PREGAME - SStitle.change_title_screen() //SKYRAT EDIT ADDITION - Title screen - addtimer(CALLBACK(SStitle, TYPE_PROC_REF(/datum/controller/subsystem/title, change_title_screen)), 1 SECONDS) //SKYRAT EDIT ADDITION - Title screen + SStitle.change_title_screen() //NOVA EDIT ADDITION - Title screen + addtimer(CALLBACK(SStitle, TYPE_PROC_REF(/datum/controller/subsystem/title, change_title_screen)), 1 SECONDS) //NOVA EDIT ADDITION - Title screen //Everyone who wants to be an observer is now spawned SEND_SIGNAL(src, COMSIG_TICKER_ENTER_PREGAME) fire() @@ -205,7 +203,7 @@ SUBSYSTEM_DEF(ticker) SEND_SIGNAL(src, COMSIG_TICKER_ENTER_SETTING_UP) current_state = GAME_STATE_SETTING_UP Master.SetRunLevel(RUNLEVEL_SETUP) - SSevents.reschedule() // SKYRAT EDIT ADDITION + SSevents.reschedule() // NOVA EDIT ADDITION if(start_immediately) fire() @@ -219,10 +217,9 @@ SUBSYSTEM_DEF(ticker) SEND_SIGNAL(src, COMSIG_TICKER_ERROR_SETTING_UP) if(GAME_STATE_PLAYING) - mode.process(wait * 0.1) check_queue() - if(!roundend_check_paused && (mode.check_finished() || force_ending)) + if(!roundend_check_paused && (check_finished() || force_ending)) current_state = GAME_STATE_FINISHED toggle_ooc(TRUE) // Turn it on toggle_dooc(TRUE) @@ -230,17 +227,27 @@ SUBSYSTEM_DEF(ticker) check_maprotate() Master.SetRunLevel(RUNLEVEL_POSTGAME) +/// Checks if the round should be ending, called every ticker tick +/datum/controller/subsystem/ticker/proc/check_finished() + if(!setup_done) + return FALSE + if(SSshuttle.emergency && (SSshuttle.emergency.mode == SHUTTLE_ENDGAME)) + return TRUE + if(GLOB.station_was_nuked) + return TRUE + if(GLOB.revolutionary_win) + return TRUE + return FALSE + /datum/controller/subsystem/ticker/proc/setup() to_chat(world, span_boldannounce("Starting game...")) var/init_start = world.timeofday - mode = new /datum/game_mode/dynamic - CHECK_TICK - //Configure mode and assign player to special mode stuff - var/can_continue = 0 - can_continue = src.mode.pre_setup() //Choose antagonists + //Configure mode and assign player to antagonists + var/can_continue = FALSE + can_continue = SSdynamic.pre_setup() //Choose antagonists CHECK_TICK can_continue = can_continue && SSjob.DivideOccupations() //Distribute jobs CHECK_TICK @@ -248,7 +255,6 @@ SUBSYSTEM_DEF(ticker) if(!GLOB.Debug2) if(!can_continue) log_game("Game failed pre_setup") - QDEL_NULL(mode) to_chat(world, "Error setting up game. Reverting to pre-game lobby.") SSjob.ResetOccupations() return FALSE @@ -284,14 +290,14 @@ SUBSYSTEM_DEF(ticker) round_start_time = world.time //otherwise round_start_time would be 0 for the signals SEND_SIGNAL(src, COMSIG_TICKER_ROUND_STARTING, world.time) - real_round_start_time = REALTIMEOFDAY //SKYRAT EDIT ADDITION - SSautotransfer.new_shift(real_round_start_time) //SKYRAT EDIT ADDITION + real_round_start_time = REALTIMEOFDAY //NOVA EDIT ADDITION + SSautotransfer.new_shift(real_round_start_time) //NOVA EDIT ADDITION log_world("Game start took [(world.timeofday - init_start)/10]s") INVOKE_ASYNC(SSdbcore, TYPE_PROC_REF(/datum/controller/subsystem/dbcore,SetRoundStart)) to_chat(world, span_notice("Welcome to [station_name()], enjoy your stay!")) - alert_sound_to_playing(sound(SSstation.announcer.get_rand_welcome_sound())) //SKYRAT EDIT CHANGE + alert_sound_to_playing(sound(SSstation.announcer.get_rand_welcome_sound())) //NOVA EDIT CHANGE current_state = GAME_STATE_PLAYING Master.SetRunLevel(RUNLEVEL_GAME) @@ -308,7 +314,7 @@ SUBSYSTEM_DEF(ticker) /datum/controller/subsystem/ticker/proc/PostSetup() set waitfor = FALSE - mode.post_setup() + SSdynamic.post_setup() GLOB.start_state = new /datum/station_state() GLOB.start_state.count() @@ -332,7 +338,7 @@ SUBSYSTEM_DEF(ticker) iter_human.increment_scar_slot() iter_human.load_persistent_scars() - SSpersistence.load_modular_persistence(iter_human.get_organ_slot(ORGAN_SLOT_BRAIN)) // SKYRAT EDIT ADDITION - MODULAR_PERSISTENCE + SSpersistence.load_modular_persistence(iter_human.get_organ_slot(ORGAN_SLOT_BRAIN)) // NOVA EDIT ADDITION - MODULAR_PERSISTENCE if(!iter_human.hardcore_survival_score) continue @@ -366,11 +372,11 @@ SUBSYSTEM_DEF(ticker) GLOB.joined_player_list += player.ckey var/atom/destination = player.mind.assigned_role.get_roundstart_spawn_point() if(!destination) // Failed to fetch a proper roundstart location, won't be going anywhere. - player.show_title_screen() //SKYRAT EDIT CHANGE + player.show_title_screen() //NOVA EDIT CHANGE continue player.create_character(destination) else - player.show_title_screen() //SKYRAT EDIT ADDITION + player.show_title_screen() //NOVA EDIT ADDITION CHECK_TICK @@ -443,13 +449,13 @@ SUBSYSTEM_DEF(ticker) new_player_mob.client.prefs.hardcore_random_setup(new_player_living) SSquirks.AssignQuirks(new_player_living, new_player_mob.client) - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(ishuman(new_player_living)) for(var/datum/loadout_item/item as anything in loadout_list_to_datums(new_player_mob.client?.prefs?.loadout_list)) if (item.restricted_roles && length(item.restricted_roles) && !(player_assigned_role.title in item.restricted_roles)) continue item.post_equip_item(new_player_mob.client?.prefs, new_player_living) - //SKYRAT EDIT END + //NOVA EDIT END CHECK_TICK if(captainless) @@ -554,7 +560,6 @@ SUBSYSTEM_DEF(ticker) /datum/controller/subsystem/ticker/Recover() current_state = SSticker.current_state force_ending = SSticker.force_ending - mode = SSticker.mode login_music = SSticker.login_music round_end_sound = SSticker.round_end_sound @@ -591,7 +596,7 @@ SUBSYSTEM_DEF(ticker) /datum/controller/subsystem/ticker/proc/send_news_report() var/news_message var/news_source = "Nanotrasen News Network" - var/decoded_station_name = html_decode(CONFIG_GET(string/cross_comms_name)) //decode station_name to avoid minor_announce double encode // SKYRAT EDIT: CROSS COMMS CONFIG + var/decoded_station_name = html_decode(CONFIG_GET(string/cross_comms_name)) //decode station_name to avoid minor_announce double encode // NOVA EDIT: CROSS COMMS CONFIG switch(news_report) // The nuke was detonated on the syndicate recon outpost @@ -682,24 +687,24 @@ SUBSYSTEM_DEF(ticker) news_message = "Officials are advising nearby colonies about a newly declared exclusion zone in \ the sector surrounding [decoded_station_name]." - //SKYRAT EDIT - START + //NOVA EDIT - START if(SSblackbox.first_death) var/list/ded = SSblackbox.first_death if(ded.len) news_message += " NT Sanctioned Psykers picked up faint traces of someone near the station, allegedly having had died. Their name was: [ded["name"]], [ded["role"]], at [ded["area"]].[ded["last_words"] ? " Their last words were: \"[ded["last_words"]]\"" : ""]" // " // An Extra quote and comment because highlighting goes weird else news_message += " NT Sanctioned Psykers proudly confirm reports that nobody died this shift!" - //SKYRAT EDIT - END + //NOVA EDIT - END - if(news_message && length(CONFIG_GET(keyed_list/cross_server))) //SKYRAT EDIT - CONFIG CHECK MOVED FROM ROUNDEND.DM - news_message += " (Shift on [CONFIG_GET(string/cross_server_name)] ending!)" //SKYRAT EDIT ADDITION + if(news_message && length(CONFIG_GET(keyed_list/cross_server))) //NOVA EDIT - CONFIG CHECK MOVED FROM ROUNDEND.DM + news_message += " (Shift on [CONFIG_GET(string/cross_server_name)] ending!)" //NOVA EDIT ADDITION send2otherserver(news_source, news_message,"News_Report") - //SKYRAT EDIT - START + //NOVA EDIT - START if(news_message) return news_message else return "We regret to inform you that shit be whack, yo. None of our reporters have any idea of what may or may not have gone on." - //SKYRAT EDIT - END + //NOVA EDIT - END /datum/controller/subsystem/ticker/proc/GetTimeLeft() if(isnull(SSticker.timeLeft)) diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index 7be217ffe719d0..80ee843bf8b942 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/title.dm b/code/controllers/subsystem/title.dm index 1fb7944191d913..93b684e75269a3 100644 --- a/code/controllers/subsystem/title.dm +++ b/code/controllers/subsystem/title.dm @@ -1,4 +1,4 @@ -/* SKYRAT EDIT REMOVAL +/* NOVA EDIT REMOVAL SUBSYSTEM_DEF(title) name = "Title Screen" flags = SS_NO_FIRE diff --git a/code/controllers/subsystem/verb_manager.dm b/code/controllers/subsystem/verb_manager.dm index c120876c538294..337386cff8e0b0 100644 --- a/code/controllers/subsystem/verb_manager.dm +++ b/code/controllers/subsystem/verb_manager.dm @@ -83,13 +83,15 @@ SUBSYSTEM_DEF(verb_manager) incoming_callback.user = WEAKREF(incoming_callback.object) var/datum/callback/new_us = CALLBACK(arglist(list(GLOBAL_PROC, GLOBAL_PROC_REF(_queue_verb)) + args.Copy())) return world.push_usr(incoming_callback.object, new_us) -#endif - //debatable whether this is needed, this is just to try and ensure that you dont use this to queue stuff that isnt from player input. - if(QDELETED(usr)) +#else + + if(QDELETED(usr) || isnull(usr.client)) stack_trace("_queue_verb() returned false because it wasnt called from player input!") return FALSE +#endif + if(!istype(subsystem_to_use)) stack_trace("_queue_verb() returned false because it was given an invalid subsystem to queue for!") return FALSE diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index 15a4aed4adbf75..c4c3b85b4c9394 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -66,7 +66,7 @@ SUBSYSTEM_DEF(vote) // Remove AFK or clientless non-voters. for(var/non_voter_ckey in non_voters) var/client/non_voter_client = non_voters[non_voter_ckey] - if(!non_voter_client || non_voter_client.is_afk()) + if(!istype(non_voter_client) || non_voter_client.is_afk()) non_voters -= non_voter_ckey // Now get the result of the vote. @@ -86,11 +86,32 @@ SUBSYSTEM_DEF(vote) // Announce the results of the vote to the world. var/to_display = current_vote.get_result_text(winners, final_winner, non_voters) - log_vote(to_display) + var/total_votes = 0 + var/list/vote_choice_data = list() + for(var/choice in current_vote.choices) + var/choice_votes = current_vote.choices[choice] + total_votes += choice_votes + vote_choice_data["[choice]"] = choice_votes + + // stringify the winners to prevent potential unimplemented serialization errors. + // Perhaps this can be removed in the future and we assert that vote choices must implement serialization. + var/final_winner_string = final_winner && "[final_winner]" + var/list/winners_string = list() + for(var/winner in winners) + winners_string += "[winner]" + + var/list/vote_log_data = list( + "choices" = vote_choice_data, + "total" = total_votes, + "winners" = winners_string, + "final_winner" = final_winner_string, + ) + var/log_string = replacetext(to_display, "\n", "\\n") // 'keep' the newlines, but dont actually print them as newlines + log_vote(log_string, vote_log_data) to_chat(world, span_infoplain(vote_font("\n[to_display]"))) // Finally, doing any effects on vote completion - if (final_winner) // if no one voted final_winner will be null + if (final_winner) // if no one voted, or the vote cannot be won, final_winner will be null current_vote.finalize_vote(final_winner) /** diff --git a/code/controllers/subsystem/weather.dm b/code/controllers/subsystem/weather.dm index b78beeed81514b..78c99f47903666 100644 --- a/code/controllers/subsystem/weather.dm +++ b/code/controllers/subsystem/weather.dm @@ -85,3 +85,17 @@ SUBSYSTEM_DEF(weather) ///Returns an active storm by its type /datum/controller/subsystem/weather/proc/get_weather_by_type(type) return locate(type) in processing + +/** + * Calls end() on all current weather effects that are currently processing in the weather subsystem. + */ +/client/proc/stop_weather() + set category = "Debug" + set name = "Stop All Active Weather" + + log_admin("[key_name(src)] stopped all currently active weather.") + message_admins("[key_name_admin(src)] stopped all currently active weather.") + for(var/datum/weather/current_weather as anything in SSweather.processing) + if(current_weather in SSweather.processing) + current_weather.end() + BLACKBOX_LOG_ADMIN_VERB("Stop All Active Weather") diff --git a/code/datums/achievements/_achievement_data.dm b/code/datums/achievements/_achievement_data.dm index aa47d8e9fc8465..295770b89b5b74 100644 --- a/code/datums/achievements/_achievement_data.dm +++ b/code/datums/achievements/_achievement_data.dm @@ -45,7 +45,7 @@ kv[key] = value qdel(Query) - for(var/award_type in sortTim(subtypesof(/datum/award), GLOBAL_PROC_REF(cmp_award_priority))) + for(var/award_type in subtypesof(/datum/award)) var/datum/award/award = SSachievements.awards[award_type] if(!award || !award.name) //Skip abstract achievements types continue @@ -116,7 +116,7 @@ "icon_class" = assets.icon_class_name(award.icon), "value" = data[achievement_type], ) - award_data += award.get_ui_data() + award_data += award.get_ui_data(user.ckey) .["achievements"] += list(award_data) for(var/score in SSachievements.scores) diff --git a/code/datums/achievements/_awards.dm b/code/datums/achievements/_awards.dm index 7a7701e0cf1e0a..23ab5e81001c9b 100644 --- a/code/datums/achievements/_awards.dm +++ b/code/datums/achievements/_awards.dm @@ -15,9 +15,6 @@ //Value returned on db connection failure, in case we want to differ 0 and nonexistent later on var/default_value = FALSE - ///Whether the award has to be loaded before or after other awards on [/datum/achievement_data/load_all_achievements()] - var/load_priority = AWARD_PRIORITY_DEFAULT - ///This proc loads the achievement data from the hub. /datum/award/proc/load(key) if(!SSdbcore.Connect()) @@ -109,7 +106,6 @@ /datum/award/achievement/on_unlock(mob/user) . = ..() to_chat(user, span_greenannounce("Achievement unlocked: [name]!")) - user.client.give_award(/datum/award/score/achievements_score, user, 1) var/sound/sound_to_send = LAZYACCESS(GLOB.achievement_sounds, user.client.prefs.read_preference(/datum/preference/choiced/sound_achievement)) if(sound_to_send) SEND_SOUND(user, sound_to_send) @@ -177,20 +173,45 @@ desc = "Don't worry, metagaming is all that matters." icon = "elephant" //Obey the reference database_id = ACHIEVEMENTS_SCORE - load_priority = AWARD_PRIORITY_LAST //See below -/** - * If the raw value is not numerical, it's likely this is the first time the score is being loaded for a ckey. - * So, let's start counting how many achievements have been unlocked so far and return its value instead, - * which is why this award should always be loaded last. - */ +/datum/award/score/achievements_score/get_ui_data(key) + . = ..() + var/datum/db_query/get_unlocked_count = SSdbcore.NewQuery( + "SELECT COUNT(m.achievement_key) FROM [format_table_name("achievements")] AS a JOIN [format_table_name("achievement_metadata")] m ON a.achievement_key = m.achievement_key AND m.achievement_type = 'Achievement' WHERE a.ckey = :ckey", + list("ckey" = key) + ) + if(!get_unlocked_count.Execute(async = TRUE)) + qdel(get_unlocked_count) + .["value"] = default_value + return . + if(get_unlocked_count.NextRow()) + .["value"] = text2num(get_unlocked_count.item[1]) + qdel(get_unlocked_count) + return . + +/datum/award/score/achievements_score/LoadHighScores() + var/datum/db_query/get_unlocked_highscore = SSdbcore.NewQuery( + "SELECT ckey, COUNT(ckey) AS c FROM [format_table_name("achievements")] AS a JOIN [format_table_name("achievement_metadata")] m ON a.achievement_key = m.achievement_key AND m.achievement_type = 'Achievement' GROUP BY ckey ORDER BY c DESC LIMIT 50", + ) + if(!get_unlocked_highscore.Execute(async = TRUE)) + qdel(get_unlocked_highscore) + return + else + while(get_unlocked_highscore.NextRow()) + var/key = get_unlocked_highscore.item[1] + var/score = text2num(get_unlocked_highscore.item[2]) + high_scores[key] = score + qdel(get_unlocked_highscore) + /datum/award/score/achievements_score/on_achievement_data_init(datum/achievement_data/holder, database_value) - if(isnum(database_value)) - return ..() - //We need to keep the value differents so that it's properly saved at the end of the round. - holder.original_cached_data[type] = 0 - var/value = 0 - for(var/award_type in holder.data) - if(ispath(award_type, /datum/award/achievement) && holder.data[award_type]) - value++ - holder.data[type] = value + var/datum/db_query/get_unlocked_load = SSdbcore.NewQuery( + "SELECT COUNT(m.achievement_key) FROM [format_table_name("achievements")] AS a JOIN [format_table_name("achievement_metadata")] m ON a.achievement_key = m.achievement_key AND m.achievement_type = 'Achievement' WHERE a.ckey = :ckey", + list("ckey" = holder.owner_ckey) + ) + if(!get_unlocked_load.Execute(async = TRUE)) + qdel(get_unlocked_load) + return + if(get_unlocked_load.NextRow()) + holder.data[type] = text2num(get_unlocked_load.item[1]) || 0 + holder.original_cached_data[type] = 0 + qdel(get_unlocked_load) diff --git a/code/datums/achievements/job_achievements.dm b/code/datums/achievements/job_achievements.dm index 10835b895b88a7..6aafbee8e68d10 100644 --- a/code/datums/achievements/job_achievements.dm +++ b/code/datums/achievements/job_achievements.dm @@ -24,12 +24,6 @@ database_id = MEDAL_HELBITALJANKEN icon = "helbital" -/datum/award/achievement/jobs/chemistry_tut - name = "Perfect chemistry blossom" - desc = "Passed the chemistry tutorial with perfect purity!" - database_id = MEDAL_CHEM_TUT - icon = "chem_tut" - //mining /datum/award/achievement/jobs/frenching diff --git a/code/datums/achievements/misc_achievements.dm b/code/datums/achievements/misc_achievements.dm index f83f2cde7b0a18..3a62e6c940a8ee 100644 --- a/code/datums/achievements/misc_achievements.dm +++ b/code/datums/achievements/misc_achievements.dm @@ -135,11 +135,17 @@ database_id = MEDAL_COSMOS_ASCENSION icon = "cosmicascend" -/datum/award/achievement/misc/knock_ascension - name = "Secrets behind the Spider Door" +/datum/award/achievement/misc/lock_ascension + name = "Secrets of the Locked Labyrinth" desc = "You managed to open a gate into the mansus." - database_id = MEDAL_KNOCK_ASCENSION - icon = "knockascend" + database_id = MEDAL_LOCK_ASCENSION + icon = "lockascend" + +/datum/award/achievement/misc/moon_ascension + name = "The Last Act" + desc = "You managed to become the ringleader and slay the lie." + database_id = MEDAL_MOON_ASCENSION + icon = "moonascend" /datum/award/achievement/misc/grand_ritual_finale name = "Archmage" diff --git a/code/datums/actions/cooldown_action.dm b/code/datums/actions/cooldown_action.dm index a7e0603461a77c..cb0d665a5cba78 100644 --- a/code/datums/actions/cooldown_action.dm +++ b/code/datums/actions/cooldown_action.dm @@ -177,6 +177,8 @@ /// Starts a cooldown time for other abilities that share a cooldown with this. Has some niche usage with more complicated attack ai! /// Will use default cooldown time if an override is not specified /datum/action/cooldown/proc/StartCooldownOthers(override_cooldown_time) + if(!length(owner?.actions)) + return // Possible if they have an action they don't control for(var/datum/action/cooldown/shared_ability in owner.actions - src) if(!(shared_cooldown & shared_ability.shared_cooldown)) continue diff --git a/code/datums/actions/items/hands_free.dm b/code/datums/actions/items/hands_free.dm index 24fddb52942dc8..8b7a4f405b1f15 100644 --- a/code/datums/actions/items/hands_free.dm +++ b/code/datums/actions/items/hands_free.dm @@ -6,3 +6,7 @@ /datum/action/item_action/hands_free/shift_nerves name = "Shift Nerves" + +/datum/action/item_action/hands_free/moth_googles + name = "Toggle Zoom" + desc = "Look further out with the help of your mothic googles." diff --git a/code/datums/actions/items/toggles.dm b/code/datums/actions/items/toggles.dm index f0fcfb9783eb7e..508c6e8639ba07 100644 --- a/code/datums/actions/items/toggles.dm +++ b/code/datums/actions/items/toggles.dm @@ -15,8 +15,8 @@ name = "Toggle Hood" /datum/action/item_action/toggle_firemode - button_icon = 'modular_skyrat/master_files/icons/mob/actions/actions_items.dmi' //SKYRAT EDIT ADDITION - button_icon_state = "fireselect_no" //SKYRAT EDIT ADDITION + button_icon = 'modular_nova/master_files/icons/mob/actions/actions_items.dmi' //NOVA EDIT ADDITION + button_icon_state = "fireselect_no" //NOVA EDIT ADDITION name = "Toggle Firemode" /datum/action/item_action/toggle_gunlight @@ -82,6 +82,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/actions/mobs/charge.dm b/code/datums/actions/mobs/charge.dm index 7fb56209777123..d235b4d50ab266 100644 --- a/code/datums/actions/mobs/charge.dm +++ b/code/datums/actions/mobs/charge.dm @@ -156,17 +156,23 @@ SSexplosions.med_mov_atom += target INVOKE_ASYNC(src, PROC_REF(DestroySurroundings), source) - hit_target(source, target, charge_damage) - -/datum/action/cooldown/mob_cooldown/charge/proc/hit_target(atom/movable/source, atom/target, damage_dealt) - if(!isliving(target)) - return - var/mob/living/living_target = target - living_target.visible_message("[source] slams into [living_target]!", "[source] tramples you into the ground!") - source.forceMove(get_turf(living_target)) - living_target.apply_damage(damage_dealt, BRUTE, wound_bonus = CANT_WOUND) - playsound(get_turf(living_target), 'sound/effects/meteorimpact.ogg', 100, TRUE) - shake_camera(living_target, 4, 3) + try_hit_target(source, target) + +/// Attempt to hit someone with our charge +/datum/action/cooldown/mob_cooldown/charge/proc/try_hit_target(atom/movable/source, atom/target) + if (can_hit_target(source, target)) + hit_target(source, target, charge_damage) + +/// Returns true if we're allowed to charge into this target +/datum/action/cooldown/mob_cooldown/charge/proc/can_hit_target(atom/movable/source, atom/target) + return isliving(target) + +/// Actually hit someone +/datum/action/cooldown/mob_cooldown/charge/proc/hit_target(atom/movable/source, mob/living/target, damage_dealt) + target.visible_message(span_danger("[source] slams into [target]!"), span_userdanger("[source] tramples you into the ground!")) + target.apply_damage(damage_dealt, BRUTE, wound_bonus = CANT_WOUND) + playsound(get_turf(target), 'sound/effects/meteorimpact.ogg', 100, TRUE) + shake_camera(target, 4, 3) shake_camera(source, 2, 3) /datum/action/cooldown/mob_cooldown/charge/basic_charge @@ -187,31 +193,33 @@ /datum/action/cooldown/mob_cooldown/charge/basic_charge/do_charge_indicator(atom/charger, atom/charge_target) charger.Shake(shake_pixel_shift, shake_pixel_shift, shake_duration) +/datum/action/cooldown/mob_cooldown/charge/basic_charge/can_hit_target(atom/movable/source, atom/target) + if(!isliving(target)) + if(!target.density || target.CanPass(source, get_dir(target, source))) + return FALSE + return TRUE + return ..() + /datum/action/cooldown/mob_cooldown/charge/basic_charge/hit_target(atom/movable/source, atom/target, damage_dealt) var/mob/living/living_source if(isliving(source)) living_source = source if(!isliving(target)) - if(!target.density || target.CanPass(source, get_dir(target, source))) - return source.visible_message(span_danger("[source] smashes into [target]!")) - if(!living_source) - return - living_source.Stun(recoil_duration, ignore_canstun = TRUE) + living_source?.Stun(recoil_duration, ignore_canstun = TRUE) return var/mob/living/living_target = target if(ishuman(living_target)) var/mob/living/carbon/human/human_target = living_target - if(human_target.check_shields(source, 0, "the [source.name]", attack_type = LEAP_ATTACK) && living_source) + if(human_target.check_block(source, 0, "the [source.name]", attack_type = LEAP_ATTACK) && living_source) living_source.Stun(recoil_duration, ignore_canstun = TRUE) return - living_target.visible_message(span_danger("[source] charges on [living_target]!"), span_userdanger("[source] charges into you!")) + living_target.visible_message(span_danger("[source] charges into [living_target]!"), span_userdanger("[source] charges into you!")) living_target.Knockdown(knockdown_duration) - /datum/status_effect/tired_post_charge id = "tired_post_charge" duration = 1 SECONDS diff --git a/code/datums/actions/mobs/defensive_mode.dm b/code/datums/actions/mobs/defensive_mode.dm index 30cb9a5980a3e1..a73d6bb25d1fac 100644 --- a/code/datums/actions/mobs/defensive_mode.dm +++ b/code/datums/actions/mobs/defensive_mode.dm @@ -33,7 +33,7 @@ defence(owner_mob) /datum/action/cooldown/mob_cooldown/defensive_mode/proc/offence(mob/living/basic/owner_mob) - owner_mob.damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, CLONE = 1, STAMINA = 1, OXY = 1) + owner_mob.damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, STAMINA = 1, OXY = 1) owner_mob.icon_state = initial(owner_mob.icon_state) owner_mob.icon_living = initial(owner_mob.icon_living) owner_mob.icon_dead = initial(owner_mob.icon_dead) @@ -41,7 +41,7 @@ defense_active = FALSE /datum/action/cooldown/mob_cooldown/defensive_mode/proc/defence(mob/living/basic/owner_mob) - owner_mob.damage_coeff = list(BRUTE = 0.4, BURN = 0.5, TOX = 1, CLONE = 1, STAMINA = 1, OXY = 1) + owner_mob.damage_coeff = list(BRUTE = 0.4, BURN = 0.5, TOX = 1, STAMINA = 1, OXY = 1) owner_mob.icon_dead = "[owner_mob.icon_state]_d_dead" owner_mob.icon_state = "[owner_mob.icon_state]_d" owner_mob.icon_living = "[owner_mob.icon_living]_d" diff --git a/code/datums/actions/mobs/fire_breath.dm b/code/datums/actions/mobs/fire_breath.dm index 45b6538c01836e..b3673b2f96cf93 100644 --- a/code/datums/actions/mobs/fire_breath.dm +++ b/code/datums/actions/mobs/fire_breath.dm @@ -37,7 +37,7 @@ var/list/turfs = get_line(owner, target_turf) - get_turf(owner) INVOKE_ASYNC(src, PROC_REF(progressive_fire_line), turfs) -/// Creates fire with a delay on the list of targetted turfs +/// Creates fire with a delay on the list of targeted turfs /datum/action/cooldown/mob_cooldown/fire_breath/proc/progressive_fire_line(list/burn_turfs) if (QDELETED(owner) || owner.stat == DEAD) return diff --git a/code/datums/actions/mobs/lava_swoop.dm b/code/datums/actions/mobs/lava_swoop.dm index 7532ccfda08823..a5acc29bab6713 100644 --- a/code/datums/actions/mobs/lava_swoop.dm +++ b/code/datums/actions/mobs/lava_swoop.dm @@ -199,7 +199,6 @@ icon = 'icons/mob/simple/lavaland/96x96megafauna.dmi' icon_state = "dragon" layer = ABOVE_ALL_MOB_LAYER - plane = GAME_PLANE_UPPER_FOV_HIDDEN pixel_x = -32 duration = 10 randomdir = FALSE diff --git a/code/datums/actions/mobs/personality_commune.dm b/code/datums/actions/mobs/personality_commune.dm new file mode 100644 index 00000000000000..26cf4834492044 --- /dev/null +++ b/code/datums/actions/mobs/personality_commune.dm @@ -0,0 +1,56 @@ +// This can probably be changed to use mind linker at some point +/datum/action/personality_commune + name = "Personality Commune" + desc = "Sends thoughts to your alternate consciousness." + background_icon_state = "bg_spell" + button_icon = 'icons/mob/actions/actions_spells.dmi' + button_icon_state = "telepathy" + overlay_icon_state = "bg_spell_border" + + /// Fluff text shown when a message is sent to the pair + var/fluff_text = span_boldnotice("You hear an echoing voice in the back of your head...") + +/datum/action/personality_commune/New(Target) + . = ..() + if(!istype(target, /datum/brain_trauma/severe/split_personality)) + stack_trace("[type] was created on a target that isn't a /datum/brain_trauma/severe/split_personality, this doesn't work.") + qdel(src) + +/datum/action/personality_commune/Grant(mob/grant_to) + if(!istype(grant_to, /mob/living/split_personality)) + return + + return ..() + +/datum/action/personality_commune/Trigger(trigger_flags) + . = ..() + if(!.) + return FALSE + + var/datum/brain_trauma/severe/split_personality/trauma = target + var/mob/living/split_personality/non_controller = usr + var/client/non_controller_client = non_controller.client + + var/to_send = tgui_input_text(non_controller, "What would you like to tell your other self?", "Commune") + if(QDELETED(src) || QDELETED(trauma) || !to_send) + return FALSE + + var/mob/living/carbon/human/personality_body = trauma.owner + if(personality_body.client == non_controller_client) // We took control + return FALSE + + var/user_message = span_boldnotice("You concentrate and send thoughts to your other self:") + var/user_message_body = span_notice("[to_send]") + + to_chat(non_controller, "[user_message] [user_message_body]") + + personality_body.balloon_alert(personality_body, "you hear a voice") + to_chat(personality_body, "[fluff_text] [user_message_body]") + + log_directed_talk(non_controller, personality_body, to_send, LOG_SAY, "[name]") + for(var/dead_mob in GLOB.dead_mob_list) + if(!isobserver(dead_mob)) + continue + to_chat(dead_mob, "[FOLLOW_LINK(dead_mob, non_controller)] [span_boldnotice("[non_controller] [name]:")] [span_notice("\"[to_send]\" to")] [span_name("[trauma]")]") + + return TRUE diff --git a/code/datums/actions/mobs/projectileattack.dm b/code/datums/actions/mobs/projectileattack.dm index 5f97081186dec0..19d0d9f076c1b1 100644 --- a/code/datums/actions/mobs/projectileattack.dm +++ b/code/datums/actions/mobs/projectileattack.dm @@ -272,7 +272,7 @@ desc = "Fires a kinetic accelerator projectile at the target." cooldown_time = 1.5 SECONDS projectile_type = /obj/projectile/kinetic/miner - projectile_sound = 'sound/weapons/kenetic_accel.ogg' + projectile_sound = 'sound/weapons/kinetic_accel.ogg' /datum/action/cooldown/mob_cooldown/projectile_attack/kinetic_accelerator/Activate(atom/target_atom) . = ..() diff --git a/code/datums/actions/mobs/sign_language.dm b/code/datums/actions/mobs/sign_language.dm index 982a43c4d3999d..da375fd1f85770 100644 --- a/code/datums/actions/mobs/sign_language.dm +++ b/code/datums/actions/mobs/sign_language.dm @@ -48,11 +48,13 @@ active = TRUE ADD_TRAIT(owner, TRAIT_SIGN_LANG, TRAIT_GENERIC) to_chat(owner, span_green("You are now communicating with sign language.")) + build_all_button_icons(UPDATE_BUTTON_BACKGROUND) /datum/action/innate/sign_language/Deactivate() active = FALSE REMOVE_TRAIT(owner, TRAIT_SIGN_LANG, TRAIT_GENERIC) to_chat(owner, span_green("You have stopped using sign language.")) + build_all_button_icons(UPDATE_BUTTON_BACKGROUND) /// Shows the linked action to the owner Carbon. /datum/action/innate/sign_language/proc/show_action() diff --git a/code/datums/ai/_ai_controller.dm b/code/datums/ai/_ai_controller.dm index a8c118303f32d0..b525f66576c2fb 100644 --- a/code/datums/ai/_ai_controller.dm +++ b/code/datums/ai/_ai_controller.dm @@ -67,9 +67,12 @@ multiple modular subtrees with behaviors if(!isnull(new_pawn)) // unit tests need the ai_controller to exist in isolation due to list schenanigans i hate it here PossessPawn(new_pawn) -/datum/ai_controller/Destroy(force, ...) +/datum/ai_controller/Destroy(force) set_ai_status(AI_STATUS_OFF) UnpossessPawn(FALSE) + set_movement_target(type, null) + if(ai_movement.moving_controllers[src]) + ai_movement.stop_moving_towards(src) return ..() ///Sets the current movement target, with an optional param to override the movement behavior @@ -118,6 +121,7 @@ multiple modular subtrees with behaviors reset_ai_status() RegisterSignal(pawn, COMSIG_MOB_STATCHANGE, PROC_REF(on_stat_changed)) RegisterSignal(pawn, COMSIG_MOB_LOGIN, PROC_REF(on_sentience_gained)) + RegisterSignal(pawn, COMSIG_QDELETING, PROC_REF(on_pawn_qdeleted)) /// Sets the AI on or off based on current conditions, call to reset after you've manually disabled it somewhere /datum/ai_controller/proc/reset_ai_status() @@ -152,7 +156,7 @@ multiple modular subtrees with behaviors if(isnull(pawn)) return // instantiated without an applicable pawn, fine - UnregisterSignal(pawn, list(COMSIG_MOB_LOGIN, COMSIG_MOB_LOGOUT, COMSIG_MOB_STATCHANGE)) + UnregisterSignal(pawn, list(COMSIG_MOB_LOGIN, COMSIG_MOB_LOGOUT, COMSIG_MOB_STATCHANGE, COMSIG_QDELETING)) if(ai_movement.moving_controllers[src]) ai_movement.stop_moving_towards(src) pawn.ai_controller = null @@ -171,6 +175,7 @@ multiple modular subtrees with behaviors ///Runs any actions that are currently running /datum/ai_controller/process(seconds_per_tick) + if(!able_to_run()) SSmove_manager.stop_looping(pawn) //stop moving return //this should remove them from processing in the future through event-based stuff. @@ -230,6 +235,8 @@ multiple modular subtrees with behaviors ///Determines whether the AI can currently make a new plan /datum/ai_controller/proc/able_to_plan() . = TRUE + if(QDELETED(pawn)) + return FALSE for(var/datum/ai_behavior/current_behavior as anything in current_behaviors) if(!(current_behavior.behavior_flags & AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION)) //We have a behavior that blocks planning . = FALSE @@ -296,7 +303,7 @@ multiple modular subtrees with behaviors if(length(arguments)) behavior_args[behavior_type] = arguments else - behavior_args[behavior_type] = null + behavior_args -= behavior_type /datum/ai_controller/proc/ProcessBehavior(seconds_per_tick, datum/ai_behavior/behavior) var/list/arguments = list(seconds_per_tick, src) @@ -334,6 +341,14 @@ multiple modular subtrees with behaviors set_ai_status(AI_STATUS_ON) //Can't do anything while player is connected RegisterSignal(pawn, COMSIG_MOB_LOGIN, PROC_REF(on_sentience_gained)) +// Turn the controller off if the pawn has been qdeleted +/datum/ai_controller/proc/on_pawn_qdeleted() + SIGNAL_HANDLER + set_ai_status(AI_STATUS_OFF) + set_movement_target(type, null) + if(ai_movement.moving_controllers[src]) + ai_movement.stop_moving_towards(src) + /// Use this proc to define how your controller defines what access the pawn has for the sake of pathfinding. Return the access list you want to use /datum/ai_controller/proc/get_access() return @@ -352,7 +367,11 @@ multiple modular subtrees with behaviors /// Returns true if we have a blackboard key with the provided key and it is not qdeleting /datum/ai_controller/proc/blackboard_key_exists(key) var/datum/key_value = blackboard[key] - return !QDELETED(key_value) + if (isdatum(key_value)) + return !QDELETED(key_value) + if (islist(key_value)) + return length(key_value) > 0 + return !!key_value /** * Used to manage references to datum by AI controllers @@ -416,6 +435,25 @@ multiple modular subtrees with behaviors blackboard[key] = thing post_blackboard_key_set(key) +/** + * Helper to force a key to be a certain thing no matter what's already there + * + * Useful for if you're overriding a list with a new list entirely, + * as otherwise it would throw a runtime error from trying to override a list + * + * Not necessary to use if you aren't dealing with lists, as set_blackboard_key will clear the existing value + * in that case already, but may be useful for clarity. + * + * * key - A blackboard key + * * thing - a value to set the blackboard key to. + */ +/datum/ai_controller/proc/override_blackboard_key(key, thing) + if(blackboard[key] == thing) + return + + clear_blackboard_key(key) + set_blackboard_key(key, thing) + /** * Sets the key at index thing to the passed value * diff --git a/code/datums/ai/babies/babies_behaviors.dm b/code/datums/ai/babies/babies_behaviors.dm index 553b192a180e4b..8cc03d72f6b762 100644 --- a/code/datums/ai/babies/babies_behaviors.dm +++ b/code/datums/ai/babies/babies_behaviors.dm @@ -2,74 +2,79 @@ * Find a compatible, living partner, if we're also alone. */ /datum/ai_behavior/find_partner - action_cooldown = 40 SECONDS - /// Range to look. var/range = 7 - /// Maximum number of children var/max_children = 3 /datum/ai_behavior/find_partner/perform(seconds_per_tick, datum/ai_controller/controller, target_key, partner_types_key, child_types_key) . = ..() - + max_children = controller.blackboard[BB_MAX_CHILDREN] || max_children var/mob/pawn_mob = controller.pawn var/list/partner_types = controller.blackboard[partner_types_key] var/list/child_types = controller.blackboard[child_types_key] + var/mob/living/living_pawn = controller.pawn - var/mob/living/partner var/children = 0 - for(var/mob/other in oview(range, pawn_mob)) + for(var/mob/living/other in oview(range, pawn_mob)) + if(!pawn_mob.faction_check_atom(other)) + finish_action(controller, FALSE) + return + + if(children >= max_children) + finish_action(controller, FALSE) + return + if(other.stat != CONSCIOUS) //Check if it's conscious FIRST. continue - var/is_child = is_type_in_list(other, child_types) - if(is_child) //Check for children SECOND. + + if(is_type_in_list(other, child_types)) //Check for children SECOND. children++ - else if(is_type_in_list(other, partner_types)) - if(other.ckey) - continue - else if(!is_child && other.gender == MALE && !(other.flags_1 & HOLOGRAM_1)) //Better safe than sorry ;_; - partner = other + continue - //shyness check. we're not shy in front of things that share a faction with us. - else if(isliving(other) && !pawn_mob.faction_check_atom(other)) - finish_action(controller, FALSE) - return + if(!is_type_in_list(other, partner_types) || !HAS_TRAIT(other, TRAIT_MOB_BREEDER)) + continue + + if(other.ckey) + continue + + if(other.gender != living_pawn.gender && !(other.flags_1 & HOLOGRAM_1)) //Better safe than sorry ;_; + controller.set_blackboard_key(target_key, other) + finish_action(controller, TRUE) - if(partner && children < max_children) - controller.set_blackboard_key(target_key, partner) + finish_action(controller, FALSE) - finish_action(controller, TRUE) /** * Reproduce. */ /datum/ai_behavior/make_babies - action_cooldown = 40 SECONDS behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH /datum/ai_behavior/make_babies/setup(datum/ai_controller/controller, target_key, child_types_key) + . = ..() var/atom/target = controller.blackboard[target_key] if(!target) return FALSE set_movement_target(controller, target) - return TRUE /datum/ai_behavior/make_babies/perform(seconds_per_tick, datum/ai_controller/controller, target_key, child_types_key) . = ..() var/mob/target = controller.blackboard[target_key] - if(!target || target.stat != CONSCIOUS) + if(QDELETED(target) || target.stat != CONSCIOUS) finish_action(controller, FALSE, target_key) return - - var/child_type = pick_weight(controller.blackboard[child_types_key]) - var/turf/turf_loc = get_turf(controller.pawn.loc) - if(turf_loc) - new child_type(turf_loc) - + var/mob/living/basic/living_pawn = controller.pawn + living_pawn.set_combat_mode(FALSE) + living_pawn.melee_attack(target) finish_action(controller, TRUE, target_key) /datum/ai_behavior/make_babies/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() - controller.clear_blackboard_key(target_key) + if(!succeeded) + return + var/mob/living/living_pawn = controller.pawn + if(QDELETED(living_pawn)) // pawn can be null at this point + return + living_pawn.set_combat_mode(initial(living_pawn.combat_mode)) diff --git a/code/datums/ai/babies/babies_subtrees.dm b/code/datums/ai/babies/babies_subtrees.dm index aad92f8422e852..1b7fe5b88cb508 100644 --- a/code/datums/ai/babies/babies_subtrees.dm +++ b/code/datums/ai/babies/babies_subtrees.dm @@ -2,12 +2,23 @@ * Reproduce with a similar mob. */ /datum/ai_planning_subtree/make_babies + 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) . = ..() - if(controller.pawn.gender != FEMALE || !SPT_PROB(chance, seconds_per_tick)) + if(!SPT_PROB(chance, seconds_per_tick)) + return + + if(controller.blackboard_key_exists(BB_BABIES_TARGET)) + 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]) return var/partner_types = controller.blackboard[BB_BABIES_PARTNER_TYPES] @@ -21,7 +32,4 @@ return // Find target - if(controller.blackboard_key_exists(BB_BABIES_TARGET)) - controller.queue_behavior(/datum/ai_behavior/make_babies, BB_BABIES_TARGET, BB_BABIES_CHILD_TYPES) - return SUBTREE_RETURN_FINISH_PLANNING controller.queue_behavior(/datum/ai_behavior/find_partner, BB_BABIES_TARGET, BB_BABIES_PARTNER_TYPES, BB_BABIES_CHILD_TYPES) diff --git a/code/datums/ai/bane/bane_behaviors.dm b/code/datums/ai/bane/bane_behaviors.dm index d36c110f0c32c0..c47c455f7f9cc6 100644 --- a/code/datums/ai/bane/bane_behaviors.dm +++ b/code/datums/ai/bane/bane_behaviors.dm @@ -3,5 +3,7 @@ if(succeeded) var/list/bane_quotes = strings("bane.json", "bane") var/mob/living/bane = controller.pawn + if(QDELETED(bane)) // pawn can be null at this point + return ..() bane.say(pick(bane_quotes)) return ..() 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 91ba7ec489415d..0f7fe6ef142f2f 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 @@ -1,11 +1,13 @@ /datum/ai_behavior/basic_melee_attack action_cooldown = 0.2 SECONDS // We gotta check unfortunately often because we're in a race condition with nextmove 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 -/datum/ai_behavior/basic_melee_attack/setup(datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_melee_attack/setup(datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) . = ..() - if(!controller.blackboard_key_exists(targetting_datum_key)) - CRASH("No target datum was supplied in the blackboard for [controller.pawn]") + if(!controller.blackboard[targeting_strategy_key]) + CRASH("No targeting strategy was supplied in the blackboard for [controller.pawn]") //Hiding location is priority var/atom/target = controller.blackboard[hiding_location_key] || controller.blackboard[target_key] @@ -14,7 +16,7 @@ set_movement_target(controller, target) -/datum/ai_behavior/basic_melee_attack/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_melee_attack/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) if (isliving(controller.pawn)) var/mob/living/pawn = controller.pawn if (world.time < pawn.next_move) @@ -22,15 +24,15 @@ . = ..() var/mob/living/basic/basic_mob = controller.pawn - //targetting datum will kill the action if not real anymore + //targeting strategy will kill the action if not real anymore var/atom/target = controller.blackboard[target_key] - var/datum/targetting_datum/targetting_datum = controller.blackboard[targetting_datum_key] + var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) - if(!targetting_datum.can_attack(basic_mob, target)) + if(!targeting_strategy.can_attack(basic_mob, target)) finish_action(controller, FALSE, target_key) return - var/hiding_target = targetting_datum.find_hidden_mobs(basic_mob, target) //If this is valid, theyre hidden in something! + var/hiding_target = targeting_strategy.find_hidden_mobs(basic_mob, target) //If this is valid, theyre hidden in something! controller.set_blackboard_key(hiding_location_key, hiding_target) @@ -39,12 +41,21 @@ else basic_mob.melee_attack(target) + if(terminate_after_action) + finish_action(controller, TRUE, target_key) -/datum/ai_behavior/basic_melee_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_melee_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) . = ..() if(!succeeded) controller.clear_blackboard_key(target_key) +/datum/ai_behavior/basic_melee_attack/interact_once + terminate_after_action = TRUE + +/datum/ai_behavior/basic_melee_attack/interact_once/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) + . = ..() + controller.clear_blackboard_key(target_key) + /datum/ai_behavior/basic_ranged_attack action_cooldown = 0.6 SECONDS behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM @@ -54,30 +65,30 @@ ///do we care about avoiding friendly fire? var/avoid_friendly_fire = FALSE -/datum/ai_behavior/basic_ranged_attack/setup(datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_ranged_attack/setup(datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) . = ..() var/atom/target = controller.blackboard[hiding_location_key] || controller.blackboard[target_key] if(QDELETED(target)) return FALSE set_movement_target(controller, target) -/datum/ai_behavior/basic_ranged_attack/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_ranged_attack/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) var/mob/living/basic/basic_mob = controller.pawn - //targetting datum will kill the action if not real anymore + //targeting strategy will kill the action if not real anymore var/atom/target = controller.blackboard[target_key] - var/datum/targetting_datum/targetting_datum = controller.blackboard[targetting_datum_key] + var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) - if(!targetting_datum.can_attack(basic_mob, target, chase_range)) + if(!targeting_strategy.can_attack(basic_mob, target, chase_range)) finish_action(controller, FALSE, target_key) return - var/atom/hiding_target = targetting_datum.find_hidden_mobs(basic_mob, target) //If this is valid, theyre hidden in something! + var/atom/hiding_target = targeting_strategy.find_hidden_mobs(basic_mob, target) //If this is valid, theyre hidden in something! var/atom/final_target = hiding_target ? hiding_target : target if(!can_see(basic_mob, final_target, required_distance)) return - if(avoid_friendly_fire && check_friendly_in_path(basic_mob, target, targetting_datum)) + if(avoid_friendly_fire && check_friendly_in_path(basic_mob, target, targeting_strategy)) adjust_position(basic_mob, target) return ..() @@ -85,17 +96,17 @@ basic_mob.RangedAttack(final_target) return ..() //only start the cooldown when the shot is shot -/datum/ai_behavior/basic_ranged_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_ranged_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) . = ..() if(!succeeded) controller.clear_blackboard_key(target_key) -/datum/ai_behavior/basic_ranged_attack/proc/check_friendly_in_path(mob/living/source, atom/target, datum/targetting_datum/targetting_datum) +/datum/ai_behavior/basic_ranged_attack/proc/check_friendly_in_path(mob/living/source, atom/target, datum/targeting_strategy/targeting_strategy) var/list/turfs_list = calculate_trajectory(source, target) for(var/turf/possible_turf as anything in turfs_list) for(var/mob/living/potential_friend in possible_turf) - if(!targetting_datum.can_attack(source, potential_friend)) + if(!targeting_strategy.can_attack(source, potential_friend)) return TRUE return FALSE diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/befriend_target.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/befriend_target.dm new file mode 100644 index 00000000000000..e1fd8bed640dc9 --- /dev/null +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/befriend_target.dm @@ -0,0 +1,21 @@ +///behavior to befriend any targets +/datum/ai_behavior/befriend_target + +/datum/ai_behavior/befriend_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key, befriend_message) + . = ..() + var/mob/living/living_pawn = controller.pawn + var/mob/living/living_target = controller.blackboard[target_key] + if(QDELETED(living_target)) + finish_action(controller, FALSE, target_key) + return + + living_pawn.befriend(living_target) + var/befriend_text = controller.blackboard[befriend_message] + if(befriend_text) + to_chat(living_target, span_nicegreen("[living_pawn] [befriend_text]")) + + finish_action(controller, TRUE, target_key) + +/datum/ai_behavior/befriend_target/finish_action(datum/ai_controller/controller, succeeded, target_key) + . = ..() + controller.clear_blackboard_key(target_key) diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/climb_tree.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/climb_tree.dm index bb901066025750..c8c18072a4aaa0 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/climb_tree.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/climb_tree.dm @@ -25,6 +25,8 @@ . = ..() var/obj/structure/flora/target_tree = controller.blackboard[target_key] var/mob/living/basic/living_pawn = controller.pawn + if(QDELETED(living_pawn)) // pawn can be null at this point + return SEND_SIGNAL(living_pawn, COMSIG_LIVING_CLIMB_TREE, target_tree) finish_action(controller, TRUE, target_key) diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/nearest_targetting.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/nearest_targeting.dm similarity index 100% rename from code/datums/ai/basic_mobs/basic_ai_behaviors/nearest_targetting.dm rename to code/datums/ai/basic_mobs/basic_ai_behaviors/nearest_targeting.dm diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm new file mode 100644 index 00000000000000..8ba9624c21edca --- /dev/null +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm @@ -0,0 +1,66 @@ +/// List of objects that AIs will treat as targets +GLOBAL_LIST_EMPTY_TYPED(hostile_machines, /atom) + +/datum/ai_behavior/find_potential_targets + 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 + +/datum/ai_behavior/find_potential_targets/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) + . = ..() + 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, get_turf(controller.pawn)) - living_mob //Remove self, so we don't suicide + + for (var/atom/hostile_machine as anything in GLOB.hostile_machines) + if (can_see(living_mob, hostile_machine, aggro_range)) + potential_targets += hostile_machine + + 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? + 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/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/proc/pick_final_target(datum/ai_controller/controller, list/filtered_targets) + return pick(filtered_targets) diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/targetting.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/targetting.dm deleted file mode 100644 index 376f62a5855b53..00000000000000 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/targetting.dm +++ /dev/null @@ -1,65 +0,0 @@ -/datum/ai_behavior/find_potential_targets - 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/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) - . = ..() - var/mob/living/living_mob = controller.pawn - var/datum/targetting_datum/targetting_datum = controller.blackboard[targetting_datum_key] - - if(!targetting_datum) - CRASH("No target datum was supplied in the blackboard for [controller.pawn]") - - var/atom/current_target = controller.blackboard[target_key] - if (targetting_datum.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, get_turf(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(targetting_datum.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 = targetting_datum.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/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/proc/pick_final_target(datum/ai_controller/controller, list/filtered_targets) - return pick(filtered_targets) diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/unbuckle_mob.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/unbuckle_mob.dm new file mode 100644 index 00000000000000..655b335d3b63cf --- /dev/null +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/unbuckle_mob.dm @@ -0,0 +1,14 @@ +/datum/ai_behavior/unbuckle_mob + +/datum/ai_behavior/unbuckle_mob/perform(seconds_per_tick, datum/ai_controller/controller) + . = ..() + + var/mob/living/living_pawn = controller.pawn + var/atom/movable/buckled_to = living_pawn.buckled + + if(isnull(buckled_to)) + finish_action(controller, FALSE) + return + + buckled_to.unbuckle_mob(living_pawn) + finish_action(controller, TRUE) diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/ventcrawling.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/ventcrawling.dm index f5e4f74a1fecc3..e162cc612990a2 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/ventcrawling.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/ventcrawling.dm @@ -18,7 +18,7 @@ . = ..() var/obj/machinery/atmospherics/components/unary/vent_pump/entry_vent = controller.blackboard[target_key] || controller.blackboard[BB_ENTRY_VENT_TARGET] var/mob/living/cached_pawn = controller.pawn - if(HAS_TRAIT(cached_pawn, TRAIT_MOVE_VENTCRAWLING) || !controller.blackboard[BB_CURRENTLY_TARGETTING_VENT] || !is_vent_valid(entry_vent)) + if(HAS_TRAIT(cached_pawn, TRAIT_MOVE_VENTCRAWLING) || !controller.blackboard[BB_CURRENTLY_TARGETING_VENT] || !is_vent_valid(entry_vent)) return if(!cached_pawn.can_enter_vent(entry_vent, provide_feedback = FALSE)) // we're an AI we scoff at feedback @@ -30,7 +30,7 @@ finish_action(controller, FALSE, target_key) return - controller.set_blackboard_key(BB_CURRENTLY_TARGETTING_VENT, FALSE) // must be done here because we have a do_after sleep in handle_ventcrawl unfortunately and double dipping could lead to erroneous suicide pill calls. + controller.set_blackboard_key(BB_CURRENTLY_TARGETING_VENT, FALSE) // must be done here because we have a do_after sleep in handle_ventcrawl unfortunately and double dipping could lead to erroneous suicide pill calls. cached_pawn.handle_ventcrawl(entry_vent) if(!HAS_TRAIT(cached_pawn, TRAIT_MOVE_VENTCRAWLING)) //something failed and we ARE NOT IN THE VENT even though the earlier check said we were good to go! odd. finish_action(controller, FALSE, target_key) @@ -134,5 +134,5 @@ controller.clear_blackboard_key(target_key) controller.clear_blackboard_key(BB_ENTRY_VENT_TARGET) controller.clear_blackboard_key(BB_EXIT_VENT_TARGET) - controller.set_blackboard_key(BB_CURRENTLY_TARGETTING_VENT, FALSE) // just in case + controller.set_blackboard_key(BB_CURRENTLY_TARGETING_VENT, FALSE) // just in case diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/wounded_targetting.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/wounded_targeting.dm similarity index 100% rename from code/datums/ai/basic_mobs/basic_ai_behaviors/wounded_targetting.dm rename to code/datums/ai/basic_mobs/basic_ai_behaviors/wounded_targeting.dm diff --git a/code/datums/ai/basic_mobs/basic_subtrees/attack_adjacent_target.dm b/code/datums/ai/basic_mobs/basic_subtrees/attack_adjacent_target.dm index c3d334165d95c3..4116900435460c 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/attack_adjacent_target.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/attack_adjacent_target.dm @@ -12,19 +12,19 @@ var/mob/living/pawn = controller.pawn if (LAZYLEN(pawn.do_afters)) return - controller.queue_behavior(melee_attack_behavior, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + controller.queue_behavior(melee_attack_behavior, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) /// Attack something which is already adjacent to us without moving /datum/ai_behavior/basic_melee_attack/opportunistic action_cooldown = 0.2 SECONDS // We gotta check unfortunately often because we're in a race condition with nextmove behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION -/datum/ai_behavior/basic_melee_attack/opportunistic/setup(datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) - if (!controller.blackboard_key_exists(targetting_datum_key)) +/datum/ai_behavior/basic_melee_attack/opportunistic/setup(datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) + if (!controller.blackboard_key_exists(targeting_strategy_key)) CRASH("No target datum was supplied in the blackboard for [controller.pawn]") return controller.blackboard_key_exists(target_key) -/datum/ai_behavior/basic_melee_attack/opportunistic/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_melee_attack/opportunistic/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) var/atom/movable/atom_pawn = controller.pawn if(!atom_pawn.CanReach(controller.blackboard[target_key])) finish_action(controller, TRUE, target_key) // Don't clear target diff --git a/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm b/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm index 9f1053f29d3f29..7059bec93fe2fa 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm @@ -74,7 +74,7 @@ return FALSE if (basic_mob.see_invisible < object.invisibility) return FALSE - var/list/whitelist = basic_mob.ai_controller.blackboard[BB_OBSTACLE_TARGETTING_WHITELIST] + var/list/whitelist = basic_mob.ai_controller.blackboard[BB_OBSTACLE_TARGETING_WHITELIST] if(whitelist && !is_type_in_typecache(object, whitelist)) return FALSE diff --git a/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm b/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm index 47f4155ac45529..4d5319bca86e77 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm @@ -1,19 +1,19 @@ /// Add or remove people to our retaliation shitlist just on an arbitrary whim /datum/ai_planning_subtree/capricious_retaliate /// Blackboard key which tells us how to select valid targets - var/targetting_datum_key = BB_TARGETTING_DATUM + var/targeting_strategy_key = BB_TARGETING_STRATEGY /// Whether we should skip checking faction for our decision var/ignore_faction = TRUE /datum/ai_planning_subtree/capricious_retaliate/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) . = ..() - controller.queue_behavior(/datum/ai_behavior/capricious_retaliate, targetting_datum_key, ignore_faction) + controller.queue_behavior(/datum/ai_behavior/capricious_retaliate, targeting_strategy_key, ignore_faction) /// Add or remove people to our retaliation shitlist just on an arbitrary whim /datum/ai_behavior/capricious_retaliate action_cooldown = 1 SECONDS -/datum/ai_behavior/capricious_retaliate/perform(seconds_per_tick, datum/ai_controller/controller, targetting_datum_key, ignore_faction) +/datum/ai_behavior/capricious_retaliate/perform(seconds_per_tick, datum/ai_controller/controller, targeting_strategy_key, ignore_faction) . = ..() var/atom/pawn = controller.pawn if (controller.blackboard_key_exists(BB_BASIC_MOB_RETALIATE_LIST)) @@ -35,10 +35,10 @@ var/aggro_range = controller.blackboard[BB_AGGRO_RANGE] || 9 var/list/potential_targets = hearers(aggro_range, get_turf(pawn)) - pawn if (!length(potential_targets)) - failed_targetting(controller, pawn, ignore_faction) + failed_targeting(controller, pawn, ignore_faction) return - var/datum/targetting_datum/target_helper = controller.blackboard[targetting_datum_key] + var/datum/targeting_strategy/target_helper = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) var/mob/living/final_target = null if (ignore_faction) @@ -49,7 +49,7 @@ final_target = test_target if (isnull(final_target)) - failed_targetting(controller, pawn, ignore_faction) + failed_targeting(controller, pawn, ignore_faction) return controller.insert_blackboard_key_lazylist(BB_BASIC_MOB_RETALIATE_LIST, final_target) @@ -57,7 +57,7 @@ finish_action(controller, TRUE, ignore_faction) /// Called if we try but fail to target something -/datum/ai_behavior/capricious_retaliate/proc/failed_targetting(datum/ai_controller/controller, atom/pawn, ignore_faction) +/datum/ai_behavior/capricious_retaliate/proc/failed_targeting(datum/ai_controller/controller, atom/pawn, ignore_faction) finish_action(controller, FALSE, ignore_faction) pawn.visible_message(span_notice("[pawn] grumbles.")) // We're pissed off but with no outlet to vent our frustration upon diff --git a/code/datums/ai/basic_mobs/basic_subtrees/find_food.dm b/code/datums/ai/basic_mobs/basic_subtrees/find_food.dm index b02ec8eaa85aa2..9e3cd557b6437c 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/find_food.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/find_food.dm @@ -1,5 +1,9 @@ /// similar to finding a target but looks for food types in the // the what? /datum/ai_planning_subtree/find_food + ///behavior we use to find the food + var/datum/ai_behavior/finding_behavior = /datum/ai_behavior/find_and_set/in_list + ///key of foods list + var/food_list_key = BB_BASIC_FOODS /datum/ai_planning_subtree/find_food/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) . = ..() @@ -7,4 +11,4 @@ // Busy with something return - controller.queue_behavior(/datum/ai_behavior/find_and_set/in_list, BB_BASIC_MOB_CURRENT_TARGET, controller.blackboard[BB_BASIC_FOODS]) + controller.queue_behavior(finding_behavior, BB_BASIC_MOB_CURRENT_TARGET, controller.blackboard[food_list_key]) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/flee_target.dm b/code/datums/ai/basic_mobs/basic_subtrees/flee_target.dm index 4f901745eeea5e..4a2f5b476c7590 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/flee_target.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/flee_target.dm @@ -20,7 +20,7 @@ return SUBTREE_RETURN_FINISH_PLANNING //we gotta get out of here. /// Try to escape from your current target, without performing any other actions. -/// Reads from some fleeing-specific targetting keys rather than the current mob target. +/// Reads from some fleeing-specific targeting keys rather than the current mob target. /datum/ai_planning_subtree/flee_target/from_flee_key target_key = BB_BASIC_MOB_FLEE_TARGET hiding_place_key = BB_BASIC_MOB_FLEE_TARGET_HIDING_LOCATION diff --git a/code/datums/ai/basic_mobs/basic_subtrees/go_for_swim.dm b/code/datums/ai/basic_mobs/basic_subtrees/go_for_swim.dm new file mode 100644 index 00000000000000..12c77119f3e182 --- /dev/null +++ b/code/datums/ai/basic_mobs/basic_subtrees/go_for_swim.dm @@ -0,0 +1,59 @@ +#define DEFAULT_TIME_SWIMMER 30 SECONDS + +///subtree to go and swim! +/datum/ai_planning_subtree/go_for_swim + +/datum/ai_planning_subtree/go_for_swim/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(controller.blackboard_key_exists(BB_SWIM_ALTERNATE_TURF)) + controller.queue_behavior(/datum/ai_behavior/travel_towards/swimming, BB_SWIM_ALTERNATE_TURF) + + if(isnull(controller.blackboard[BB_KEY_SWIM_TIME])) + controller.set_blackboard_key(BB_KEY_SWIM_TIME, DEFAULT_TIME_SWIMMER) + + var/mob/living/living_pawn = controller.pawn + var/turf/our_turf = get_turf(living_pawn) + + // we have been taken out of water! + controller.set_blackboard_key(BB_CURRENTLY_SWIMMING, iswaterturf(our_turf)) + + if(controller.blackboard[BB_KEY_SWIM_TIME] < world.time) + controller.queue_behavior(/datum/ai_behavior/find_and_set/swim_alternate, BB_SWIM_ALTERNATE_TURF, /turf/open) + return + + // have some fun in the water + if(controller.blackboard[BB_CURRENTLY_SWIMMING] && SPT_PROB(5, seconds_per_tick)) + controller.queue_behavior(/datum/ai_behavior/perform_emote, "splashes water all around!") + + +///find land if its time to get out of water, otherwise find water +/datum/ai_behavior/find_and_set/swim_alternate + +/datum/ai_behavior/find_and_set/swim_alternate/search_tactic(datum/ai_controller/controller, locate_path, search_range) + var/mob/living/living_pawn = controller.pawn + if(QDELETED(living_pawn)) + return null + var/look_for_land = controller.blackboard[BB_CURRENTLY_SWIMMING] + var/list/possible_turfs = list() + for(var/turf/possible_turf in oview(search_range, living_pawn)) + if(isclosedturf(possible_turf) || isspaceturf(possible_turf) || isopenspaceturf(possible_turf)) + continue + if(possible_turf.is_blocked_turf()) + continue + if(look_for_land == iswaterturf(possible_turf)) + continue + possible_turfs += possible_turf + + if(!length(possible_turfs)) + return null + + return(pick(possible_turfs)) + +/datum/ai_behavior/travel_towards/swimming + clear_target = TRUE + +/datum/ai_behavior/travel_towards/swimming/finish_action(datum/ai_controller/controller, succeeded, target_key) + . = ..() + var/time_to_add = controller.blackboard[BB_KEY_SWIMMER_COOLDOWN] ? controller.blackboard[BB_KEY_SWIMMER_COOLDOWN] : DEFAULT_TIME_SWIMMER + controller.set_blackboard_key(BB_KEY_SWIM_TIME, world.time + time_to_add ) + +#undef DEFAULT_TIME_SWIMMER diff --git a/code/datums/ai/basic_mobs/basic_subtrees/opportunistic_ventcrawler.dm b/code/datums/ai/basic_mobs/basic_subtrees/opportunistic_ventcrawler.dm index 63a745305b201d..240272d1ef48a1 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/opportunistic_ventcrawler.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/opportunistic_ventcrawler.dm @@ -15,6 +15,6 @@ controller.queue_behavior(/datum/ai_behavior/travel_towards, BB_ENTRY_VENT_TARGET) return - controller.set_blackboard_key(BB_CURRENTLY_TARGETTING_VENT, TRUE) + controller.set_blackboard_key(BB_CURRENTLY_TARGETING_VENT, TRUE) controller.queue_behavior(/datum/ai_behavior/crawl_through_vents, BB_ENTRY_VENT_TARGET) return SUBTREE_RETURN_FINISH_PLANNING // we are going into this vent... no distractions diff --git a/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm b/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm index be395f3dfe49d2..95a125eea5ce5d 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm @@ -14,30 +14,30 @@ . = ..() if(!controller.blackboard_key_exists(target_key)) return - controller.queue_behavior(attack_behavior, target_key, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION, max_range, min_range) + controller.queue_behavior(attack_behavior, target_key, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION, max_range, min_range) /// How often will we try to perform our ranged attack? /datum/ai_behavior/ranged_skirmish action_cooldown = 1 SECONDS -/datum/ai_behavior/ranged_skirmish/setup(datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key, max_range, min_range) +/datum/ai_behavior/ranged_skirmish/setup(datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key, max_range, min_range) . = ..() var/atom/target = controller.blackboard[hiding_location_key] || controller.blackboard[target_key] return !QDELETED(target) -/datum/ai_behavior/ranged_skirmish/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key, max_range, min_range) +/datum/ai_behavior/ranged_skirmish/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key, max_range, min_range) . = ..() var/atom/target = controller.blackboard[target_key] if (QDELETED(target)) finish_action(controller, succeeded = FALSE) return - var/datum/targetting_datum/targetting_datum = controller.blackboard[targetting_datum_key] - if(!targetting_datum.can_attack(controller.pawn, target)) + var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) + if(!targeting_strategy.can_attack(controller.pawn, target)) finish_action(controller, succeeded = FALSE) return - var/hiding_target = targetting_datum.find_hidden_mobs(controller.pawn, target) + var/hiding_target = targeting_strategy.find_hidden_mobs(controller.pawn, target) controller.set_blackboard_key(hiding_location_key, hiding_target) target = hiding_target || target diff --git a/code/datums/ai/basic_mobs/basic_subtrees/simple_attack_target.dm b/code/datums/ai/basic_mobs/basic_subtrees/simple_attack_target.dm index 210aaf0aa8b26f..5b1f5ffbff9ed5 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/simple_attack_target.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/simple_attack_target.dm @@ -8,7 +8,7 @@ . = ..() if(!controller.blackboard_key_exists(BB_BASIC_MOB_CURRENT_TARGET)) return - controller.queue_behavior(melee_attack_behavior, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + controller.queue_behavior(melee_attack_behavior, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) if (end_planning) return SUBTREE_RETURN_FINISH_PLANNING //we are going into battle...no distractions. @@ -20,5 +20,5 @@ . = ..() if(!controller.blackboard_key_exists(BB_BASIC_MOB_CURRENT_TARGET)) return - controller.queue_behavior(ranged_attack_behavior, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + controller.queue_behavior(ranged_attack_behavior, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) return SUBTREE_RETURN_FINISH_PLANNING //we are going into battle...no distractions. diff --git a/code/datums/ai/basic_mobs/basic_subtrees/simple_find_nearest_target_to_flee.dm b/code/datums/ai/basic_mobs/basic_subtrees/simple_find_nearest_target_to_flee.dm index 3fe1ada33ba994..6630f7d193d90f 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/simple_find_nearest_target_to_flee.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/simple_find_nearest_target_to_flee.dm @@ -5,11 +5,11 @@ . = ..() if (controller.blackboard[BB_BASIC_MOB_STOP_FLEEING]) return - controller.queue_behavior(/datum/ai_behavior/find_potential_targets/nearest, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + controller.queue_behavior(/datum/ai_behavior/find_potential_targets/nearest, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) /// Find the nearest thing on our list of 'things which have done damage to me' and set it as the flee target /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee - var/targeting_key = BB_TARGETTING_DATUM + var/targeting_key = BB_TARGETING_STRATEGY /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) . = ..() @@ -18,4 +18,4 @@ controller.queue_behavior(/datum/ai_behavior/target_from_retaliate_list/nearest, BB_BASIC_MOB_RETALIATE_LIST, BB_BASIC_MOB_CURRENT_TARGET, targeting_key, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee/from_flee_key - targeting_key = BB_FLEE_TARGETTING_DATUM + targeting_key = BB_FLEE_TARGETING_STRATEGY diff --git a/code/datums/ai/basic_mobs/basic_subtrees/simple_find_target.dm b/code/datums/ai/basic_mobs/basic_subtrees/simple_find_target.dm index ec4ef1863adc9b..1c7d8de9120ba3 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/simple_find_target.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/simple_find_target.dm @@ -2,7 +2,7 @@ /datum/ai_planning_subtree/simple_find_target/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) . = ..() - controller.queue_behavior(/datum/ai_behavior/find_potential_targets, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + controller.queue_behavior(/datum/ai_behavior/find_potential_targets, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) // Prevents finding a target if a human is nearby /datum/ai_planning_subtree/simple_find_target/not_while_observed diff --git a/code/datums/ai/basic_mobs/basic_subtrees/simple_find_wounded_target.dm b/code/datums/ai/basic_mobs/basic_subtrees/simple_find_wounded_target.dm index 8840c1ea3a76ce..7a230014d9ab2e 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/simple_find_wounded_target.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/simple_find_wounded_target.dm @@ -3,4 +3,4 @@ /datum/ai_planning_subtree/simple_find_wounded_target/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) . = ..() - controller.queue_behavior(/datum/ai_behavior/find_potential_targets/most_wounded, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + controller.queue_behavior(/datum/ai_behavior/find_potential_targets/most_wounded, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm b/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm index 7a3d5470b1a435..5bd0f8404883dd 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm @@ -214,6 +214,14 @@ emote_hear = list("rawrs.","grumbles.","grawls.", "stomps!") emote_see = list("stares ferociously.") +/datum/ai_planning_subtree/random_speech/cats + speech_chance = 10 + speak = list( + "mrawww!", + "meow!", + "maw!", + ) + /datum/ai_planning_subtree/random_speech/blackboard //literal tower of babel, subtree form speech_chance = 1 diff --git a/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm b/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm index 701f911d273250..55ec7387613170 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm @@ -2,7 +2,7 @@ /datum/ai_planning_subtree/target_retaliate operational_datums = list(/datum/element/ai_retaliate, /datum/component/ai_retaliate_advanced) /// Blackboard key which tells us how to select valid targets - var/targetting_datum_key = BB_TARGETTING_DATUM + var/targeting_strategy_key = BB_TARGETING_STRATEGY /// Blackboard key in which to store selected target var/target_key = BB_BASIC_MOB_CURRENT_TARGET /// Blackboard key in which to store selected target's hiding place @@ -12,16 +12,16 @@ /datum/ai_planning_subtree/target_retaliate/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) . = ..() - controller.queue_behavior(/datum/ai_behavior/target_from_retaliate_list, BB_BASIC_MOB_RETALIATE_LIST, target_key, targetting_datum_key, hiding_place_key, check_faction) + controller.queue_behavior(/datum/ai_behavior/target_from_retaliate_list, BB_BASIC_MOB_RETALIATE_LIST, target_key, targeting_strategy_key, hiding_place_key, check_faction) /datum/ai_planning_subtree/target_retaliate/check_faction check_faction = TRUE /// Places a mob which you can see and who has recently attacked you into some 'run away from this' AI keys -/// Can use a different targetting datum than you use to select attack targets +/// Can use a different targeting strategy than you use to select attack targets /// Not required if fleeing is the only target behaviour or uses the same target datum /datum/ai_planning_subtree/target_retaliate/to_flee - targetting_datum_key = BB_FLEE_TARGETTING_DATUM + targeting_strategy_key = BB_FLEE_TARGETING_STRATEGY target_key = BB_BASIC_MOB_FLEE_TARGET hiding_place_key = BB_BASIC_MOB_FLEE_TARGET_HIDING_LOCATION @@ -34,11 +34,11 @@ /// How far can we see stuff? var/vision_range = 9 -/datum/ai_behavior/target_from_retaliate_list/perform(seconds_per_tick, datum/ai_controller/controller, shitlist_key, target_key, targetting_datum_key, hiding_location_key, check_faction) +/datum/ai_behavior/target_from_retaliate_list/perform(seconds_per_tick, datum/ai_controller/controller, shitlist_key, target_key, targeting_strategy_key, hiding_location_key, check_faction) . = ..() var/mob/living/living_mob = controller.pawn - var/datum/targetting_datum/targetting_datum = controller.blackboard[targetting_datum_key] - if(!targetting_datum) + 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/list/shitlist = controller.blackboard[shitlist_key] @@ -47,13 +47,13 @@ if (!check_faction) controller.set_blackboard_key(BB_TEMPORARILY_IGNORE_FACTION, TRUE) - if (!QDELETED(existing_target) && (locate(existing_target) in shitlist) && targetting_datum.can_attack(living_mob, existing_target, vision_range)) + if (!QDELETED(existing_target) && (locate(existing_target) in shitlist) && targeting_strategy.can_attack(living_mob, existing_target, vision_range)) finish_action(controller, succeeded = TRUE, check_faction = check_faction) return var/list/enemies_list = list() for(var/mob/living/potential_target as anything in shitlist) - if(!targetting_datum.can_attack(living_mob, potential_target, vision_range)) + if(!targeting_strategy.can_attack(living_mob, potential_target, vision_range)) continue enemies_list += potential_target @@ -65,7 +65,7 @@ var/atom/new_target = pick_final_target(controller, enemies_list) controller.set_blackboard_key(target_key, new_target) - var/atom/potential_hiding_location = targetting_datum.find_hidden_mobs(living_mob, new_target) + var/atom/potential_hiding_location = targeting_strategy.find_hidden_mobs(living_mob, new_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) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/targeted_mob_ability.dm b/code/datums/ai/basic_mobs/basic_subtrees/targeted_mob_ability.dm index d9ee3ef09182de..cd809804ba369e 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/targeted_mob_ability.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/targeted_mob_ability.dm @@ -1,7 +1,7 @@ /// Attempts to use a mob ability on a target /datum/ai_planning_subtree/targeted_mob_ability /// Blackboard key for the ability - var/ability_key = BB_TARGETTED_ACTION + var/ability_key = BB_TARGETED_ACTION /// Blackboard key for where the target ref is stored var/target_key = BB_BASIC_MOB_CURRENT_TARGET /// Behaviour to perform using ability diff --git a/code/datums/ai/basic_mobs/basic_subtrees/use_mob_ability.dm b/code/datums/ai/basic_mobs/basic_subtrees/use_mob_ability.dm index fb83b8f8684ade..5ceef67bedb26c 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/use_mob_ability.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/use_mob_ability.dm @@ -1,6 +1,6 @@ /** * Simple behaviours which simply try to use an ability whenever it is available. - * For something which wants a target try `targetted_mob_ability`. + * For something which wants a target try `targeted_mob_ability`. */ /datum/ai_planning_subtree/use_mob_ability /// Blackboard key for the ability diff --git a/code/datums/ai/basic_mobs/generic_controllers.dm b/code/datums/ai/basic_mobs/generic_controllers.dm index 208c1833add843..dae1b944dd321d 100644 --- a/code/datums/ai/basic_mobs/generic_controllers.dm +++ b/code/datums/ai/basic_mobs/generic_controllers.dm @@ -1,7 +1,7 @@ /// The most basic AI tree which just finds a guy and then runs at them to click them /datum/ai_controller/basic_controller/simple_hostile blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance @@ -14,7 +14,7 @@ /// Find a target, walk at target, attack intervening obstacles /datum/ai_controller/basic_controller/simple_hostile_obstacles blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/datums/ai/basic_mobs/pet_commands/pet_use_targeted_ability.dm b/code/datums/ai/basic_mobs/pet_commands/pet_use_targeted_ability.dm new file mode 100644 index 00000000000000..c7153b0c12f7a4 --- /dev/null +++ b/code/datums/ai/basic_mobs/pet_commands/pet_use_targeted_ability.dm @@ -0,0 +1,24 @@ +/// Pet owners can't see their pet's ability cooldowns so we keep attempting to use an ability until we succeed +/datum/ai_behavior/pet_use_ability + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM + +/datum/ai_behavior/pet_use_ability/setup(datum/ai_controller/controller, ability_key, target_key) + . = ..() + var/mob/living/target = controller.blackboard[target_key] + if (QDELETED(target)) + return FALSE + set_movement_target(controller, target) + +/datum/ai_behavior/pet_use_ability/perform(seconds_per_tick, datum/ai_controller/controller, ability_key, target_key) + var/datum/action/cooldown/mob_cooldown/ability = controller.blackboard[ability_key] + var/mob/living/target = controller.blackboard[target_key] + if (QDELETED(ability) || QDELETED(target)) + finish_action(controller, FALSE, ability_key, target_key) + return + var/mob/pawn = controller.pawn + if(QDELETED(pawn) || ability.InterceptClickOn(pawn, null, target)) + finish_action(controller, TRUE, ability_key, target_key) + +/datum/ai_behavior/pet_use_ability/finish_action(datum/ai_controller/controller, succeeded, ability_key, target_key) + . = ..() + controller.clear_blackboard_key(target_key) diff --git a/code/datums/ai/basic_mobs/pet_commands/pet_use_targetted_ability.dm b/code/datums/ai/basic_mobs/pet_commands/pet_use_targetted_ability.dm deleted file mode 100644 index 584fb984839f24..00000000000000 --- a/code/datums/ai/basic_mobs/pet_commands/pet_use_targetted_ability.dm +++ /dev/null @@ -1,24 +0,0 @@ -/// Pet owners can't see their pet's ability cooldowns so we keep attempting to use an ability until we succeed -/datum/ai_behavior/pet_use_ability - behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM - -/datum/ai_behavior/pet_use_ability/setup(datum/ai_controller/controller, ability_key, target_key) - . = ..() - var/mob/living/target = controller.blackboard[target_key] - if (QDELETED(target)) - return FALSE - set_movement_target(controller, target) - -/datum/ai_behavior/pet_use_ability/perform(seconds_per_tick, datum/ai_controller/controller, ability_key, target_key) - var/datum/action/cooldown/mob_cooldown/ability = controller.blackboard[ability_key] - var/mob/living/target = controller.blackboard[target_key] - if (QDELETED(ability) || QDELETED(target)) - finish_action(controller, FALSE, ability_key, target_key) - return - var/mob/pawn = controller.pawn - if (ability.InterceptClickOn(pawn, null, target)) - finish_action(controller, TRUE, ability_key, target_key) - -/datum/ai_behavior/pet_use_ability/finish_action(datum/ai_controller/controller, succeeded, ability_key, target_key) - . = ..() - controller.clear_blackboard_key(target_key) diff --git a/code/datums/ai/basic_mobs/pet_commands/play_dead.dm b/code/datums/ai/basic_mobs/pet_commands/play_dead.dm index 0520898c4a53a6..c4b99cf6f42b15 100644 --- a/code/datums/ai/basic_mobs/pet_commands/play_dead.dm +++ b/code/datums/ai/basic_mobs/pet_commands/play_dead.dm @@ -18,7 +18,7 @@ /datum/ai_behavior/play_dead/finish_action(datum/ai_controller/controller, succeeded) . = ..() var/mob/living/basic/basic_pawn = controller.pawn - if(!istype(basic_pawn) || basic_pawn.stat) // imagine actually dying while playing dead. hell, imagine being the kid waiting for your pup to get back up :( + if(QDELETED(basic_pawn) || basic_pawn.stat) // imagine actually dying while playing dead. hell, imagine being the kid waiting for your pup to get back up :( return basic_pawn.visible_message(span_notice("[basic_pawn] miraculously springs back to life!")) REMOVE_TRAIT(basic_pawn, TRAIT_FAKEDEATH, BASIC_MOB_DEATH_TRAIT) diff --git a/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm b/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm new file mode 100644 index 00000000000000..a7d43d600b1cde --- /dev/null +++ b/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm @@ -0,0 +1,137 @@ +///Datum for basic mobs to define what they can attack.GET_TARGETING_STRATEGY\((/[^,]*)\), +///Global, just like ai_behaviors +/datum/targeting_strategy + +///Returns true or false depending on if the target can be attacked by the mob +/datum/targeting_strategy/proc/can_attack(mob/living/living_mob, atom/target, vision_range) + return + +///Returns something the target might be hiding inside of +/datum/targeting_strategy/proc/find_hidden_mobs(mob/living/living_mob, atom/target) + var/atom/target_hiding_location + if(istype(target.loc, /obj/structure/closet) || istype(target.loc, /obj/machinery/disposal) || istype(target.loc, /obj/machinery/sleeper)) + target_hiding_location = target.loc + return target_hiding_location + +/datum/targeting_strategy/basic + /// When we do our basic faction check, do we look for exact faction matches? + var/check_factions_exactly = FALSE + /// Whether we care for seeing the target or not + var/ignore_sight = FALSE + /// Blackboard key containing the minimum stat of a living mob to target + var/minimum_stat_key = BB_TARGET_MINIMUM_STAT + /// If this blackboard key is TRUE, makes us only target wounded mobs + var/target_wounded_key + +/datum/targeting_strategy/basic/can_attack(mob/living/living_mob, atom/the_target, vision_range) + var/datum/ai_controller/basic_controller/our_controller = living_mob.ai_controller + + if(isnull(our_controller)) + return FALSE + + if(isturf(the_target) || isnull(the_target)) // bail out on invalids + return FALSE + + if(isobj(the_target.loc)) + var/obj/container = the_target.loc + if(container.resistance_flags & INDESTRUCTIBLE) + return FALSE + + if(ismob(the_target)) //Target is in godmode, ignore it. + if(living_mob.loc == the_target) + return FALSE // We've either been eaten or are shapeshifted, let's assume the latter because we're still alive + var/mob/M = the_target + if(M.status_flags & GODMODE) + return FALSE + + if(!ignore_sight && !can_see(living_mob, the_target, vision_range)) //Target has moved behind cover and we have lost line of sight to it + return FALSE + + if(living_mob.see_invisible < the_target.invisibility) //Target's invisible to us, forget it + return FALSE + + if(isturf(living_mob.loc) && isturf(the_target.loc) && living_mob.z != the_target.z) // z check will always fail if target is in a mech or pawn is shapeshifted or jaunting + return FALSE + + if(isliving(the_target)) //Targeting vs living mobs + var/mob/living/living_target = the_target + if(faction_check(our_controller, living_mob, living_target)) + return FALSE + if(living_target.stat > our_controller.blackboard[minimum_stat_key]) + return FALSE + if(target_wounded_key && our_controller.blackboard[target_wounded_key] && living_target.health == living_target.maxHealth) + return FALSE + + return TRUE + + if(ismecha(the_target)) //Targeting vs mechas + var/obj/vehicle/sealed/mecha/M = the_target + for(var/occupant in M.occupants) + if(can_attack(living_mob, occupant)) //Can we attack any of the occupants? + return TRUE + + if(istype(the_target, /obj/machinery/porta_turret)) //Cringe turret! kill it! + var/obj/machinery/porta_turret/P = the_target + if(P.in_faction(living_mob)) //Don't attack if the turret is in the same faction + return FALSE + if(P.has_cover && !P.raised) //Don't attack invincible turrets + return FALSE + if(P.machine_stat & BROKEN) //Or turrets that are already broken + return FALSE + return TRUE + + return FALSE + +/// Returns true if the mob and target share factions +/datum/targeting_strategy/basic/proc/faction_check(datum/ai_controller/controller, mob/living/living_mob, mob/living/the_target) + if (controller.blackboard[BB_ALWAYS_IGNORE_FACTION] || controller.blackboard[BB_TEMPORARILY_IGNORE_FACTION]) + return FALSE + return living_mob.faction_check_atom(the_target, exact_match = check_factions_exactly) + +/// Subtype more forgiving for items. +/// Careful, this can go wrong and keep a mob hyper-focused on an item it can't lose aggro on +/datum/targeting_strategy/basic/allow_items + +/datum/targeting_strategy/basic/allow_items/can_attack(mob/living/living_mob, atom/the_target, vision_range) + . = ..() + if(isitem(the_target)) + // trust fall exercise + return TRUE + +/// Subtype which searches for mobs of a size relative to ours +/datum/targeting_strategy/basic/of_size + /// If true, we will return mobs which are smaller than us. If false, larger. + var/find_smaller = TRUE + /// If true, we will return mobs which are the same size as us. + var/inclusive = TRUE + +/datum/targeting_strategy/basic/of_size/can_attack(mob/living/owner, atom/target, vision_range) + if(!isliving(target)) + return FALSE + . = ..() + if(!.) + return FALSE + + var/mob/living/mob_target = target + if(inclusive && owner.mob_size == mob_target.mob_size) + return TRUE + if(owner.mob_size > mob_target.mob_size) + return find_smaller + return !find_smaller + +// This is just using the default values but the subtype makes it clearer +/datum/targeting_strategy/basic/of_size/ours_or_smaller + +/datum/targeting_strategy/basic/of_size/larger + find_smaller = FALSE + inclusive = FALSE + + +/datum/targeting_strategy/basic/of_size/smaller + inclusive = FALSE + +/// Makes the mob only attack their own faction. Useful mostly if their attacks do something helpful (e.g. healing touch). +/datum/targeting_strategy/basic/same_faction + +/datum/targeting_strategy/basic/same_faction/faction_check(mob/living/living_mob, mob/living/the_target) + return !..() // inverts logic to ONLY target mobs that share a faction diff --git a/code/datums/ai/basic_mobs/targeting_strategies/dont_target_friends.dm b/code/datums/ai/basic_mobs/targeting_strategies/dont_target_friends.dm new file mode 100644 index 00000000000000..1b52c4986bb4f6 --- /dev/null +++ b/code/datums/ai/basic_mobs/targeting_strategies/dont_target_friends.dm @@ -0,0 +1,32 @@ +/// Don't target an atom in our friends list (or turfs), anything else is fair game +/datum/targeting_strategy/basic/not_friends + /// Stop regarding someone as a valid target once they pass this stat level, setting it to DEAD means you will happily attack corpses + var/attack_until_past_stat = HARD_CRIT + /// If we can try to closed turfs or not + var/attack_closed_turf = FALSE + +///Returns true or false depending on if the target can be attacked by the mob +/datum/targeting_strategy/basic/not_friends/can_attack(mob/living/living_mob, atom/target, vision_range) + if(attack_closed_turf && isclosedturf(target)) + return TRUE + + if(target in living_mob.ai_controller.blackboard[BB_FRIENDS_LIST]) + return FALSE + + return ..() + +///friends dont care about factions +/datum/targeting_strategy/basic/not_friends/faction_check(mob/living/living_mob, mob/living/the_target) + return FALSE + +/datum/targeting_strategy/basic/not_friends/attack_closed_turfs + attack_closed_turf = TRUE + +/// Subtype that allows us to target items while deftly avoiding attacking our allies. Be careful when it comes to targeting items as an AI could get trapped targeting something it can't destroy. +/datum/targeting_strategy/basic/not_friends/allow_items + +/datum/targeting_strategy/basic/not_friends/allow_items/can_attack(mob/living/living_mob, atom/the_target, vision_range) + . = ..() + if(isitem(the_target)) + // trust fall exercise + return TRUE diff --git a/code/datums/ai/basic_mobs/targeting_strategies/with_object.dm b/code/datums/ai/basic_mobs/targeting_strategies/with_object.dm new file mode 100644 index 00000000000000..7cc76d3010c906 --- /dev/null +++ b/code/datums/ai/basic_mobs/targeting_strategies/with_object.dm @@ -0,0 +1,29 @@ +/** + * Find mobs who are holding the bb configurable object type + * + * This is an extension of basic targeting behaviour, that allows you to + * only target the mob if they have a specific item in their hand. + * + */ +/datum/targeting_strategy/basic/holding_object + /// BB key that holds the target typepath to use + var/target_item_key = BB_TARGET_HELD_ITEM + +///Returns true or false depending on if the target can be attacked by the mob +/datum/targeting_strategy/basic/holding_object/can_attack(mob/living/living_mob, atom/target, vision_range) + var/datum/ai_controller/controller = living_mob.ai_controller + var/object_type_path = controller.blackboard[target_item_key] + + if (object_type_path == null) + return FALSE // no op + if(!ismob(target)) + return FALSE // no hands no problems + + // Look at me, type casting like a grown up + var/mob/targetmob = target + // Check if our parent behaviour agrees we can attack this target (we ignore faction by default) + var/can_attack = ..() + if(can_attack && targetmob.is_holding_item_of_type(object_type_path)) + return TRUE // they have the item + // No valid target + return FALSE diff --git a/code/datums/ai/basic_mobs/targetting_datums/basic_targetting_datum.dm b/code/datums/ai/basic_mobs/targetting_datums/basic_targetting_datum.dm deleted file mode 100644 index d8b7e49c23cdde..00000000000000 --- a/code/datums/ai/basic_mobs/targetting_datums/basic_targetting_datum.dm +++ /dev/null @@ -1,132 +0,0 @@ -///Datum for basic mobs to define what they can attack. -/datum/targetting_datum - -///Returns true or false depending on if the target can be attacked by the mob -/datum/targetting_datum/proc/can_attack(mob/living/living_mob, atom/target, vision_range) - return - -///Returns something the target might be hiding inside of -/datum/targetting_datum/proc/find_hidden_mobs(mob/living/living_mob, atom/target) - var/atom/target_hiding_location - if(istype(target.loc, /obj/structure/closet) || istype(target.loc, /obj/machinery/disposal) || istype(target.loc, /obj/machinery/sleeper)) - target_hiding_location = target.loc - return target_hiding_location - -/datum/targetting_datum/basic - /// When we do our basic faction check, do we look for exact faction matches? - var/check_factions_exactly = FALSE - /// Whether we care for seeing the target or not - var/ignore_sight = FALSE - /// Blackboard key containing the minimum stat of a living mob to target - var/minimum_stat_key = BB_TARGET_MINIMUM_STAT - /// If this blackboard key is TRUE, makes us only target wounded mobs - var/target_wounded_key - -/datum/targetting_datum/basic/can_attack(mob/living/living_mob, atom/the_target, vision_range) - var/datum/ai_controller/basic_controller/our_controller = living_mob.ai_controller - - if(isnull(our_controller)) - return FALSE - - if(isturf(the_target) || isnull(the_target)) // bail out on invalids - return FALSE - - if(isobj(the_target.loc)) - var/obj/container = the_target.loc - if(container.resistance_flags & INDESTRUCTIBLE) - return FALSE - - if(ismob(the_target)) //Target is in godmode, ignore it. - if(living_mob.loc == the_target) - return FALSE // We've either been eaten or are shapeshifted, let's assume the latter because we're still alive - var/mob/M = the_target - if(M.status_flags & GODMODE) - return FALSE - - if(!ignore_sight && !can_see(living_mob, the_target, vision_range)) //Target has moved behind cover and we have lost line of sight to it - return FALSE - - if(living_mob.see_invisible < the_target.invisibility) //Target's invisible to us, forget it - return FALSE - - if(isturf(living_mob.loc) && isturf(the_target.loc) && living_mob.z != the_target.z) // z check will always fail if target is in a mech or pawn is shapeshifted or jaunting - return FALSE - - if(isliving(the_target)) //Targeting vs living mobs - var/mob/living/living_target = the_target - if(faction_check(our_controller, living_mob, living_target)) - return FALSE - if(living_target.stat > our_controller.blackboard[minimum_stat_key]) - return FALSE - if(target_wounded_key && our_controller.blackboard[target_wounded_key] && living_target.health == living_target.maxHealth) - return FALSE - - return TRUE - - if(ismecha(the_target)) //Targeting vs mechas - var/obj/vehicle/sealed/mecha/M = the_target - for(var/occupant in M.occupants) - if(can_attack(living_mob, occupant)) //Can we attack any of the occupants? - return TRUE - - if(istype(the_target, /obj/machinery/porta_turret)) //Cringe turret! kill it! - var/obj/machinery/porta_turret/P = the_target - if(P.in_faction(living_mob)) //Don't attack if the turret is in the same faction - return FALSE - if(P.has_cover && !P.raised) //Don't attack invincible turrets - return FALSE - if(P.machine_stat & BROKEN) //Or turrets that are already broken - return FALSE - return TRUE - - return FALSE - -/// Returns true if the mob and target share factions -/datum/targetting_datum/basic/proc/faction_check(datum/ai_controller/controller, mob/living/living_mob, mob/living/the_target) - if (controller.blackboard[BB_ALWAYS_IGNORE_FACTION] || controller.blackboard[BB_TEMPORARILY_IGNORE_FACTION]) - return FALSE - return living_mob.faction_check_atom(the_target, exact_match = check_factions_exactly) - -/// Subtype more forgiving for items. -/// Careful, this can go wrong and keep a mob hyper-focused on an item it can't lose aggro on -/datum/targetting_datum/basic/allow_items - -/datum/targetting_datum/basic/allow_items/can_attack(mob/living/living_mob, atom/the_target, vision_range) - . = ..() - if(isitem(the_target)) - // trust fall exercise - return TRUE - -/// Subtype which searches for mobs of a size relative to ours -/datum/targetting_datum/basic/of_size - /// If true, we will return mobs which are smaller than us. If false, larger. - var/find_smaller = TRUE - /// If true, we will return mobs which are the same size as us. - var/inclusive = TRUE - -/datum/targetting_datum/basic/of_size/can_attack(mob/living/owner, atom/target, vision_range) - if(!isliving(target)) - return FALSE - . = ..() - if(!.) - return FALSE - - var/mob/living/mob_target = target - if(inclusive && owner.mob_size == mob_target.mob_size) - return TRUE - if(owner.mob_size > mob_target.mob_size) - return find_smaller - return !find_smaller - -// This is just using the default values but the subtype makes it clearer -/datum/targetting_datum/basic/of_size/ours_or_smaller - -/datum/targetting_datum/basic/of_size/larger - find_smaller = FALSE - inclusive = FALSE - -/// Makes the mob only attack their own faction. Useful mostly if their attacks do something helpful (e.g. healing touch). -/datum/targetting_datum/basic/same_faction - -/datum/targetting_datum/basic/same_faction/faction_check(mob/living/living_mob, mob/living/the_target) - return !..() // inverts logic to ONLY target mobs that share a faction diff --git a/code/datums/ai/basic_mobs/targetting_datums/dont_target_friends.dm b/code/datums/ai/basic_mobs/targetting_datums/dont_target_friends.dm deleted file mode 100644 index e2081bf308e9cf..00000000000000 --- a/code/datums/ai/basic_mobs/targetting_datums/dont_target_friends.dm +++ /dev/null @@ -1,32 +0,0 @@ -/// Don't target an atom in our friends list (or turfs), anything else is fair game -/datum/targetting_datum/basic/not_friends - /// Stop regarding someone as a valid target once they pass this stat level, setting it to DEAD means you will happily attack corpses - var/attack_until_past_stat = HARD_CRIT - /// If we can try to closed turfs or not - var/attack_closed_turf = FALSE - -///Returns true or false depending on if the target can be attacked by the mob -/datum/targetting_datum/basic/not_friends/can_attack(mob/living/living_mob, atom/target, vision_range) - if(attack_closed_turf && isclosedturf(target)) - return TRUE - - if(target in living_mob.ai_controller.blackboard[BB_FRIENDS_LIST]) - return FALSE - - return ..() - -///friends dont care about factions -/datum/targetting_datum/basic/not_friends/faction_check(mob/living/living_mob, mob/living/the_target) - return FALSE - -/datum/targetting_datum/basic/not_friends/attack_closed_turfs - attack_closed_turf = TRUE - -/// Subtype that allows us to target items while deftly avoiding attacking our allies. Be careful when it comes to targetting items as an AI could get trapped targetting something it can't destroy. -/datum/targetting_datum/basic/not_friends/allow_items - -/datum/targetting_datum/basic/not_friends/allow_items/can_attack(mob/living/living_mob, atom/the_target, vision_range) - . = ..() - if(isitem(the_target)) - // trust fall exercise - return TRUE diff --git a/code/datums/ai/basic_mobs/targetting_datums/with_object.dm b/code/datums/ai/basic_mobs/targetting_datums/with_object.dm deleted file mode 100644 index 91e99bb4a221cc..00000000000000 --- a/code/datums/ai/basic_mobs/targetting_datums/with_object.dm +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Find mobs who are holding the configurable object type - * - * This is an extension of basic targeting behaviour, that allows you to - * only target the mob if they have a specific item in their hand. - * - */ -/datum/targetting_datum/basic/holding_object - // We will find mobs who are holding this object in their hands - var/object_type_path = null - -/** - * Create an instance of the holding object targeting datum - * - * * object_type_path Pass an object type path, this will be compared to the items - * in targets hands to filter the target list. - */ -/datum/targetting_datum/basic/holding_object/New(object_type_path) - if (!ispath(object_type_path)) - stack_trace("trying to create an item targeting datum with no valid typepath") - // Leaving object type as null will make this basically a noop - return - src.object_type_path = object_type_path - -///Returns true or false depending on if the target can be attacked by the mob -/datum/targetting_datum/basic/holding_object/can_attack(mob/living/living_mob, atom/target, vision_range) - if (object_type_path == null) - return FALSE // no op - if(!ismob(target)) - return FALSE // no hands no problems - - // Look at me, type casting like a grown up - var/mob/targetmob = target - // Check if our parent behaviour agrees we can attack this target (we ignore faction by default) - var/can_attack = ..() - if(can_attack && targetmob.is_holding_item_of_type(object_type_path)) - return TRUE // they have the item - // No valid target - return FALSE diff --git a/code/datums/ai/dog/dog_behaviors.dm b/code/datums/ai/dog/dog_behaviors.dm index 6c9cb779bb3bd7..c7723eab1a182a 100644 --- a/code/datums/ai/dog/dog_behaviors.dm +++ b/code/datums/ai/dog/dog_behaviors.dm @@ -7,18 +7,18 @@ behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM required_distance = 3 -/datum/ai_behavior/basic_melee_attack/dog/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_melee_attack/dog/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) controller.behavior_cooldowns[src] = world.time + action_cooldown var/mob/living/living_pawn = controller.pawn if(!(isturf(living_pawn.loc) || HAS_TRAIT(living_pawn, TRAIT_AI_BAGATTACK))) // Void puppies can attack from inside bags - finish_action(controller, FALSE, target_key, targetting_datum_key, hiding_location_key) + finish_action(controller, FALSE, target_key, targeting_strategy_key, hiding_location_key) return // Unfortunately going to repeat this check in parent call but what can you do var/atom/target = controller.blackboard[target_key] - var/datum/targetting_datum/targetting_datum = controller.blackboard[targetting_datum_key] - if (!targetting_datum.can_attack(living_pawn, target)) - finish_action(controller, FALSE, target_key, targetting_datum_key, hiding_location_key) + var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) + if (!targeting_strategy.can_attack(living_pawn, target)) + finish_action(controller, FALSE, target_key, targeting_strategy_key, hiding_location_key) return if (!living_pawn.Adjacent(target)) diff --git a/code/datums/ai/dog/dog_controller.dm b/code/datums/ai/dog/dog_controller.dm index a95e3d57b6b200..a5794ff9b5f46e 100644 --- a/code/datums/ai/dog/dog_controller.dm +++ b/code/datums/ai/dog/dog_controller.dm @@ -2,7 +2,7 @@ blackboard = list( BB_DOG_HARASS_HARM = TRUE, BB_VISION_RANGE = AI_DOG_VISION_RANGE, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, ) ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_dog @@ -19,9 +19,11 @@ blackboard = list( BB_DOG_HARASS_HARM = TRUE, BB_VISION_RANGE = AI_DOG_VISION_RANGE, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends, - // Find nearby mobs with tongs in hand. - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/holding_object(/obj/item/kitchen/tongs), + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, + // Find nearby mobs ... + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/holding_object, + // With tongs in hand! + BB_TARGET_HELD_ITEM = /obj/item/kitchen/tongs, BB_BABIES_PARTNER_TYPES = list(/mob/living/basic/pet/dog), BB_BABIES_CHILD_TYPES = list(/mob/living/basic/pet/dog/corgi/puppy = 95, /mob/living/basic/pet/dog/corgi/puppy/void = 5), ) @@ -31,7 +33,7 @@ /datum/ai_planning_subtree/make_babies, // Ian WILL prioritise sex over following your instructions /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/dog_harassment, - // Find targets to run away from (uses the targetting datum from above) + // Find targets to run away from (uses the targeting strategy from above) /datum/ai_planning_subtree/simple_find_target, // Flee from that target /datum/ai_planning_subtree/flee_target, @@ -43,3 +45,20 @@ return return corgi_pawn.access_card.GetAccess() + +/datum/ai_controller/basic_controller/dog/puppy + blackboard = list( + BB_DOG_HARASS_HARM = TRUE, + BB_VISION_RANGE = AI_DOG_VISION_RANGE, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/holding_object, + // With tongs in hand! + BB_TARGET_HELD_ITEM = /obj/item/kitchen/tongs, + ) + planning_subtrees = list( + /datum/ai_planning_subtree/random_speech/dog, + /datum/ai_planning_subtree/pet_planning, + /datum/ai_planning_subtree/dog_harassment, + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/flee_target, + ) diff --git a/code/datums/ai/dog/dog_subtrees.dm b/code/datums/ai/dog/dog_subtrees.dm index 66198b61ac305f..62f63da54bdd0e 100644 --- a/code/datums/ai/dog/dog_subtrees.dm +++ b/code/datums/ai/dog/dog_subtrees.dm @@ -4,27 +4,27 @@ /datum/ai_planning_subtree/dog_harassment/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) if(!SPT_PROB(10, seconds_per_tick)) return - controller.queue_behavior(/datum/ai_behavior/find_hated_dog_target, BB_DOG_HARASS_TARGET, BB_PET_TARGETTING_DATUM) + controller.queue_behavior(/datum/ai_behavior/find_hated_dog_target, BB_DOG_HARASS_TARGET, BB_PET_TARGETING_STRATEGY) var/atom/harass_target = controller.blackboard[BB_DOG_HARASS_TARGET] if (isnull(harass_target)) return - controller.queue_behavior(/datum/ai_behavior/basic_melee_attack/dog, BB_DOG_HARASS_TARGET, BB_PET_TARGETTING_DATUM) + controller.queue_behavior(/datum/ai_behavior/basic_melee_attack/dog, BB_DOG_HARASS_TARGET, BB_PET_TARGETING_STRATEGY) return SUBTREE_RETURN_FINISH_PLANNING /datum/ai_behavior/find_hated_dog_target -/datum/ai_behavior/find_hated_dog_target/setup(datum/ai_controller/controller, target_key, targetting_datum_key) +/datum/ai_behavior/find_hated_dog_target/setup(datum/ai_controller/controller, target_key, targeting_strategy_key) . = ..() var/mob/living/dog = controller.pawn - var/datum/targetting_datum/targetting_datum = controller.blackboard[targetting_datum_key] + var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) for(var/mob/living/iter_living in oview(2, dog)) if(iter_living.stat != CONSCIOUS || !HAS_TRAIT(iter_living, TRAIT_HATED_BY_DOGS)) continue if(!isnull(dog.buckled)) dog.audible_message(span_notice("[dog] growls at [iter_living], yet [dog.p_they()] [dog.p_are()] much too comfy to move."), hearing_distance = COMBAT_MESSAGE_RANGE) continue - if(!targetting_datum.can_attack(dog, iter_living)) + if(!targeting_strategy.can_attack(dog, iter_living)) continue dog.audible_message(span_warning("[dog] growls at [iter_living], seemingly annoyed by [iter_living.p_their()] presence."), hearing_distance = COMBAT_MESSAGE_RANGE) diff --git a/code/datums/ai/generic/find_and_set.dm b/code/datums/ai/generic/find_and_set.dm index 6107b1664ee74c..84a007c2559060 100644 --- a/code/datums/ai/generic/find_and_set.dm +++ b/code/datums/ai/generic/find_and_set.dm @@ -62,20 +62,33 @@ var/mob/living/living_pawn = controller.pawn return locate(locate_path) in living_pawn.held_items +/datum/ai_behavior/find_and_set/in_hands/given_list + +/datum/ai_behavior/find_and_set/in_hands/given_list/search_tactic(datum/ai_controller/controller, locate_paths) + var/list/found = typecache_filter_list(controller.pawn, locate_paths) + if(length(found)) + return pick(found) + /** * Variant of find and set that takes a list of things to find. */ /datum/ai_behavior/find_and_set/in_list /datum/ai_behavior/find_and_set/in_list/search_tactic(datum/ai_controller/controller, locate_paths, search_range) - var/list/found = list() - for(var/locate_path in locate_paths) - var/single_locate = ..(controller, locate_path, search_range) - if(single_locate) - found += single_locate - if(found.len) + var/list/found = typecache_filter_list(oview(search_range, controller.pawn), locate_paths) + if(length(found)) return pick(found) +/// Like find_and_set/in_list, but we return the turf location of the item instead of the item itself. +/datum/ai_behavior/find_and_set/in_list/turf_location + +/datum/ai_behavior/find_and_set/in_list/turf_location/search_tactic(datum/ai_controller/controller, locate_paths, search_range) + . = ..() + if(isnull(.)) + return null + + return get_turf(.) + /** * Variant of find and set which returns an object which can be animated with a staff of change */ @@ -142,7 +155,26 @@ /datum/ai_behavior/find_and_set/conscious_person /datum/ai_behavior/find_and_set/conscious_person/search_tactic(datum/ai_controller/controller, locate_path, search_range) + var/list/customers = list() for(var/mob/living/carbon/human/target in oview(search_range, controller.pawn)) if(IS_DEAD_OR_INCAP(target) || !target.mind) continue - return target + customers += target + + if(customers.len) + return pick(customers) + + return null + +/datum/ai_behavior/find_and_set/nearby_friends + action_cooldown = 2 SECONDS + +/datum/ai_behavior/find_and_set/nearby_friends/search_tactic(datum/ai_controller/controller, locate_path, search_range) + var/atom/friend = locate(/mob/living/carbon/human) in oview(search_range, controller.pawn) + + if(isnull(friend)) + return null + + var/mob/living/living_pawn = controller.pawn + var/potential_friend = living_pawn.faction.Find(REF(friend)) ? friend : null + return potential_friend diff --git a/code/datums/ai/generic/generic_behaviors.dm b/code/datums/ai/generic/generic_behaviors.dm index 4f816de4be30a7..43e37f66e8c8aa 100644 --- a/code/datums/ai/generic/generic_behaviors.dm +++ b/code/datums/ai/generic/generic_behaviors.dm @@ -2,6 +2,7 @@ /datum/ai_behavior/resist/perform(seconds_per_tick, datum/ai_controller/controller) . = ..() var/mob/living/living_pawn = controller.pawn + living_pawn.ai_controller.set_blackboard_key(BB_RESISTING, TRUE) living_pawn.execute_resist() finish_action(controller, TRUE) @@ -67,6 +68,8 @@ /datum/ai_behavior/break_spine/finish_action(datum/ai_controller/controller, succeeded, target_key) if(succeeded) var/mob/living/bane = controller.pawn + if(QDELETED(bane)) // pawn can be null at this point + return ..() bane.stop_pulling() controller.clear_blackboard_key(target_key) return ..() @@ -283,8 +286,6 @@ . = ..() controller.clear_blackboard_key(BB_FOLLOW_TARGET) - - /datum/ai_behavior/perform_emote /datum/ai_behavior/perform_emote/perform(seconds_per_tick, datum/ai_controller/controller, emote, speech_sound) @@ -299,6 +300,8 @@ /datum/ai_behavior/perform_speech /datum/ai_behavior/perform_speech/perform(seconds_per_tick, datum/ai_controller/controller, speech, speech_sound) + . = ..() + var/mob/living/living_pawn = controller.pawn if(!istype(living_pawn)) return @@ -357,6 +360,10 @@ continue if(thing.IsObscured()) continue + if(isitem(thing)) + var/obj/item/item = thing + if(item.item_flags & ABSTRACT) + continue possible_targets += thing if(!possible_targets.len) finish_action(controller, FALSE) diff --git a/code/datums/ai/hunting_behavior/hunting_behaviors.dm b/code/datums/ai/hunting_behavior/hunting_behaviors.dm index 468cfed33fb98e..3e747640be3e27 100644 --- a/code/datums/ai/hunting_behavior/hunting_behaviors.dm +++ b/code/datums/ai/hunting_behavior/hunting_behaviors.dm @@ -60,10 +60,10 @@ if(!valid_dinner(living_mob, possible_dinner, hunt_range)) continue controller.set_blackboard_key(hunting_target_key, possible_dinner) - finish_action(controller, TRUE) + finish_action(controller, TRUE, hunting_target_key) return - finish_action(controller, FALSE) + finish_action(controller, FALSE, hunting_target_key) /datum/ai_behavior/find_hunt_target/proc/valid_dinner(mob/living/source, atom/dinner, radius) if(isliving(dinner)) @@ -81,6 +81,7 @@ /// Do we reset the target after attacking something, so we can check for status changes. var/always_reset_target = FALSE + /datum/ai_behavior/hunt_target/setup(datum/ai_controller/controller, hunting_target_key, hunting_cooldown_key) . = ..() var/atom/hunt_target = controller.blackboard[hunting_target_key] @@ -123,10 +124,27 @@ controller.clear_blackboard_key(hunting_target_key) /datum/ai_behavior/hunt_target/unarmed_attack_target + ///do we toggle combat mode before interacting with the object? + var/switch_combat_mode = FALSE /datum/ai_behavior/hunt_target/unarmed_attack_target/target_caught(mob/living/hunter, obj/structure/cable/hunted) + if(switch_combat_mode) + hunter.combat_mode = !(hunter.combat_mode) hunter.UnarmedAttack(hunted, TRUE) +/datum/ai_behavior/hunt_target/unarmed_attack_target/finish_action(datum/ai_controller/controller, succeeded, hunting_target_key, hunting_cooldown_key) + . = ..() + if(!switch_combat_mode) + return + var/mob/living/living_pawn = controller.pawn + living_pawn.combat_mode = initial(living_pawn.combat_mode) + +/datum/ai_behavior/hunt_target/unarmed_attack_target/switch_combat_mode + switch_combat_mode = TRUE + +/datum/ai_behavior/hunt_target/unarmed_attack_target/reset_target + always_reset_target = TRUE + /datum/ai_behavior/hunt_target/use_ability_on_target always_reset_target = TRUE ///the ability we will use diff --git a/code/datums/ai/idle_behaviors/idle_random_walk.dm b/code/datums/ai/idle_behaviors/idle_random_walk.dm index f189e89b423046..8924da5c30bb0f 100644 --- a/code/datums/ai/idle_behaviors/idle_random_walk.dm +++ b/code/datums/ai/idle_behaviors/idle_random_walk.dm @@ -10,7 +10,10 @@ 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) + var/turf/destination_turf = get_step(living_pawn, move_dir) + if(!destination_turf?.can_cross_safely(living_pawn)) + return + living_pawn.Move(destination_turf, move_dir) /datum/idle_behavior/idle_random_walk/less_walking walk_chance = 10 @@ -69,7 +72,7 @@ var/turf/possible_step = get_step(living_pawn, direction) if(get_dist(possible_step, target) > minimum_distance) continue - if(possible_step.is_blocked_turf()) + if(possible_step.is_blocked_turf() || !possible_step.can_cross_safely(living_pawn)) continue possible_turfs += possible_step diff --git a/code/datums/ai/learn_ai.md b/code/datums/ai/learn_ai.md index 9906806cfbd578..e4e8a712cf0bfe 100644 --- a/code/datums/ai/learn_ai.md +++ b/code/datums/ai/learn_ai.md @@ -25,7 +25,7 @@ First, let's look at the blackboard. ```dm /datum/ai_controller/basic/cow blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items(), + BB_TARGETING_STRATEGY = new /datum/targeting_strategy/basic/allow_items(), BB_BASIC_MOB_TIP_REACTING = FALSE, BB_BASIC_MOB_TIPPER = null, ) @@ -81,7 +81,7 @@ Okay, so we have blackboard variables, which are considered by subtrees to plan //now we know we have a target but should let a hostile subtree plan attacking humans. let's check if it's actually food if(target in wanted) - controller.queue_behavior(/datum/ai_behavior/basic_melee_attack, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + controller.queue_behavior(/datum/ai_behavior/basic_melee_attack, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) return SUBTREE_RETURN_FINISH_PLANNING //this prevents further subtrees from planning since we want to focus on eating the food ``` @@ -94,7 +94,7 @@ And one of those behaviors, `basic_melee_attack`. As I have been doing so far, I //flag tells the AI it needs to have a movement target to work, and since it doesn't have "AI_BEHAVIOR_MOVE_AND_PERFORM", it won't call perform() every 0.6 seconds until it is in melee range. Smart! behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT -/datum/ai_behavior/basic_melee_attack/setup(datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_melee_attack/setup(datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) . = ..() //all this is doing in setup is setting the movement target. setup is called once when the behavior is first planned, and returning FALSE can cancel the behavior if something isn't right. @@ -107,20 +107,20 @@ And one of those behaviors, `basic_melee_attack`. As I have been doing so far, I controller.current_movement_target = target ///perform will run every "action_cooldown" deciseconds as long as the conditions are good for it to do so (we set "AI_BEHAVIOR_REQUIRE_MOVEMENT", so it won't perform until in range). -/datum/ai_behavior/basic_melee_attack/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_melee_attack/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) . = ..() var/mob/living/basic/basic_mob = controller.pawn - //targetting datum will kill the action if not real anymore + //targeting strategy will kill the action if not real anymore var/datum/weakref/weak_target = controller.blackboard[target_key] var/atom/target = weak_target?.resolve() - var/datum/targetting_datum/targetting_datum = controller.blackboard[targetting_datum_key] + var/datum/targeting_strategy/targeting_strategy = controller.blackboard[targeting_strategy_key] - if(!targetting_datum.can_attack(basic_mob, target)) + if(!targeting_strategy.can_attack(basic_mob, target)) ///We have a target that is no longer valid to attack. Remember that returning doesn't end the behavior, JUST this single performance. So we call "finish_action" with whether it succeeded in doing what it wanted to do (it didn't, so FALSE) and the blackboard keys passed into this behavior. finish_action(controller, FALSE, target_key) return //don't forget to end the performance too - var/hiding_target = targetting_datum.find_hidden_mobs(basic_mob, target) //If this is valid, theyre hidden in something! + var/hiding_target = targeting_strategy.find_hidden_mobs(basic_mob, target) //If this is valid, theyre hidden in something! controller.blackboard[hiding_location_key] = hiding_target @@ -131,7 +131,7 @@ And one of those behaviors, `basic_melee_attack`. As I have been doing so far, I basic_mob.melee_attack(target) ///and so the action has ended. we can now clean up the AI's blackboard based on the success of the action, and the keys passed in. -/datum/ai_behavior/basic_melee_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_melee_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) . = ..() ///if the behavior failed, the target is no longer valid, so we should lose aggro of them. We remove the target_key (which could be anything, it's whatever key was passed into the behavior by the subtree) from the blackboard. Couldn't do THAT with normal variables! if(!succeeded) diff --git a/code/datums/ai/monkey/monkey_behaviors.dm b/code/datums/ai/monkey/monkey_behaviors.dm index 13ae68170053c2..d16110cd70201e 100644 --- a/code/datums/ai/monkey/monkey_behaviors.dm +++ b/code/datums/ai/monkey/monkey_behaviors.dm @@ -166,8 +166,10 @@ /datum/ai_behavior/monkey_attack_mob/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() var/mob/living/living_pawn = controller.pawn - SSmove_manager.stop_looping(living_pawn) controller.clear_blackboard_key(target_key) + if(QDELETED(living_pawn)) // pawn can be null at this point + return + SSmove_manager.stop_looping(living_pawn) /// attack using a held weapon otherwise bite the enemy, then if we are angry there is a chance we might calm down a little /datum/ai_behavior/monkey_attack_mob/proc/monkey_attack(datum/ai_controller/controller, mob/living/target, seconds_per_tick, disarm) @@ -219,6 +221,12 @@ // note they might immediately reduce threat and drop from the list. // this is fine, we're just giving them a love tap then leaving them alone. // unless they fight back, then we retaliate + + // Some mobs delete on death. If the target is no longer alive, go back to idle + if(QDELETED(target)) + finish_action(controller, TRUE) + return + if(isnull(controller.blackboard[BB_MONKEY_ENEMIES][target])) controller.set_blackboard_key_assoc(BB_MONKEY_ENEMIES, target, 1) @@ -296,7 +304,7 @@ var/mob/living/living_pawn = controller.pawn for(var/mob/living/nearby_monkey in view(living_pawn, MONKEY_ENEMY_VISION)) - if(!HAS_AI_CONTROLLER_TYPE(nearby_monkey, /datum/ai_controller/monkey)) + if(QDELETED(nearby_monkey) || !HAS_AI_CONTROLLER_TYPE(nearby_monkey, /datum/ai_controller/monkey)) continue if(!SPT_PROB(MONKEY_RECRUIT_PROB, seconds_per_tick)) continue diff --git a/code/datums/ai/monkey/monkey_controller.dm b/code/datums/ai/monkey/monkey_controller.dm index 951147007f9b82..8be754f8d4b575 100644 --- a/code/datums/ai/monkey/monkey_controller.dm +++ b/code/datums/ai/monkey/monkey_controller.dm @@ -26,9 +26,22 @@ have ways of interacting with a specific mob and control it. BB_MONKEY_GUN_NEURONS_ACTIVATED = FALSE, BB_MONKEY_GUN_WORKED = TRUE, BB_SONG_LINES = MONKEY_SONG, + BB_RESISTING = FALSE, ) idle_behavior = /datum/idle_behavior/idle_monkey +/datum/ai_controller/monkey/process(seconds_per_tick) + + var/mob/living/living_pawn = src.pawn + + if(!length(living_pawn.do_afters) && living_pawn.ai_controller.blackboard[BB_RESISTING]) + living_pawn.ai_controller.set_blackboard_key(BB_RESISTING, FALSE) + + if(living_pawn.ai_controller.blackboard[BB_RESISTING]) + return + + . = ..() + /datum/ai_controller/monkey/New(atom/new_pawn) var/static/list/control_examine = list( ORGAN_SLOT_EYES = span_monkey("eyes have a primal look in them."), @@ -91,7 +104,7 @@ have ways of interacting with a specific mob and control it. /datum/ai_controller/monkey/able_to_run() var/mob/living/living_pawn = pawn - if(IS_DEAD_OR_INCAP(living_pawn)) + if(living_pawn.incapacitated(IGNORE_RESTRAINTS | IGNORE_GRAB | IGNORE_STASIS) || living_pawn.stat > CONSCIOUS) return FALSE return ..() @@ -147,8 +160,12 @@ have ways of interacting with a specific mob and control it. return TRUE ///Reactive events to being hit -/datum/ai_controller/monkey/proc/retaliate(mob/living/L) - add_blackboard_key_assoc(BB_MONKEY_ENEMIES, L, MONKEY_HATRED_AMOUNT) +/datum/ai_controller/monkey/proc/retaliate(mob/living/living_mob) + // just to be safe + if(QDELETED(living_mob)) + return + + add_blackboard_key_assoc(BB_MONKEY_ENEMIES, living_mob, MONKEY_HATRED_AMOUNT) /datum/ai_controller/monkey/proc/on_attacked(datum/source, mob/attacker) SIGNAL_HANDLER diff --git a/code/datums/ai/movement/_ai_movement.dm b/code/datums/ai/movement/_ai_movement.dm index 2b734ca24a920e..af29e83f1a4a3a 100644 --- a/code/datums/ai/movement/_ai_movement.dm +++ b/code/datums/ai/movement/_ai_movement.dm @@ -24,37 +24,47 @@ if(controller.pathing_attempts >= max_pathing_attempts) controller.CancelActions() -///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) +///Should the movement be allowed to happen? return TRUE if it can, FALSE otherwise /datum/ai_movement/proc/allowed_to_move(datum/move_loop/source) + SHOULD_BE_PURE(TRUE) + var/atom/movable/pawn = source.moving var/datum/ai_controller/controller = source.extra_info - source.delay = controller.movement_delay var/can_move = TRUE - if(controller.ai_traits & STOP_MOVING_WHEN_PULLED && pawn.pulledby) //Need to store more state. Annoying. + if((controller.ai_traits & STOP_MOVING_WHEN_PULLED) && pawn.pulledby) //Need to store more state. Annoying. can_move = FALSE if(!isturf(pawn.loc)) //No moving if not on a turf can_move = FALSE + if(isliving(pawn)) + var/mob/living/pawn_mob = pawn + if(!(pawn_mob.mobility_flags & MOBILITY_MOVE)) + can_move = FALSE + + return can_move + +///Anything to do before moving; any checks if the pawn should be able to move should be placed in allowed_to_move() and called by this proc +/datum/ai_movement/proc/pre_move(datum/move_loop/source) + SIGNAL_HANDLER + SHOULD_NOT_OVERRIDE(TRUE) + + var/datum/ai_controller/controller = source.extra_info + // Check if this controller can actually run, so we don't chase people with corpses if(!controller.able_to_run()) controller.CancelActions() qdel(source) //stop moving return MOVELOOP_SKIP_STEP - //Why doesn't this return TRUE or can_move? - //MOVELOOP_SKIP_STEP is defined as (1<<0) and TRUE are defined as the same "1", returning TRUE would be the equivalent of skipping the move - if(can_move) - return + source.delay = controller.movement_delay + + if(allowed_to_move(source)) + return NONE increment_pathing_failures(controller) return MOVELOOP_SKIP_STEP -///Anything to do before moving; any checks if the pawn should be able to move should be placed in allowed_to_move() and called by this proc -/datum/ai_movement/proc/pre_move(datum/move_loop/source) - SIGNAL_HANDLER - return allowed_to_move(source) - //Anything to do post movement /datum/ai_movement/proc/post_move(datum/move_loop/source, succeeded) SIGNAL_HANDLER diff --git a/code/datums/ai/movement/ai_movement_basic_avoidance.dm b/code/datums/ai/movement/ai_movement_basic_avoidance.dm index 371fb9dbc4bdf7..6b48f1b5e9e1f1 100644 --- a/code/datums/ai/movement/ai_movement_basic_avoidance.dm +++ b/code/datums/ai/movement/ai_movement_basic_avoidance.dm @@ -16,10 +16,8 @@ /datum/ai_movement/basic_avoidance/allowed_to_move(datum/move_loop/has_target/dist_bound/source) . = ..() var/turf/target_turf = get_step_towards(source.moving, source.target) - - if(is_type_in_typecache(target_turf, GLOB.dangerous_turfs)) - . = FALSE - return . + if(!target_turf?.can_cross_safely(source.moving)) + return FALSE /// Move immediately and don't update our facing /datum/ai_movement/basic_avoidance/backstep diff --git a/code/datums/ai/movement/ai_movement_complete_stop.dm b/code/datums/ai/movement/ai_movement_complete_stop.dm index 7805eeb3f6f656..dcae93f1ba0a5b 100644 --- a/code/datums/ai/movement/ai_movement_complete_stop.dm +++ b/code/datums/ai/movement/ai_movement_complete_stop.dm @@ -12,4 +12,4 @@ RegisterSignal(loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(pre_move)) /datum/ai_movement/complete_stop/allowed_to_move(datum/move_loop/source) - return // no movement allowed + return FALSE diff --git a/code/datums/ai/movement/ai_movement_dumb.dm b/code/datums/ai/movement/ai_movement_dumb.dm index a38024ff2cc8d9..06ac4bdd10c4cb 100644 --- a/code/datums/ai/movement/ai_movement_dumb.dm +++ b/code/datums/ai/movement/ai_movement_dumb.dm @@ -14,7 +14,5 @@ /datum/ai_movement/dumb/allowed_to_move(datum/move_loop/has_target/source) . = ..() var/turf/target_turf = get_step_towards(source.moving, source.target) - - if(is_type_in_typecache(target_turf, GLOB.dangerous_turfs)) - . = FALSE - return . + if(!target_turf?.can_cross_safely(source.moving)) + return FALSE diff --git a/code/datums/ai/movement/ai_movement_jps.dm b/code/datums/ai/movement/ai_movement_jps.dm index 1508339913300b..3644869140d7e1 100644 --- a/code/datums/ai/movement/ai_movement_jps.dm +++ b/code/datums/ai/movement/ai_movement_jps.dm @@ -3,20 +3,24 @@ */ /datum/ai_movement/jps max_pathing_attempts = 20 + var/maximum_length = AI_MAX_PATH_LENGTH + ///how we deal with diagonal movement, whether we try to avoid them or follow through with them + var/diagonal_flags = DIAGONAL_REMOVE_CLUNKY /datum/ai_movement/jps/start_moving_towards(datum/ai_controller/controller, atom/current_movement_target, min_distance) . = ..() var/atom/movable/moving = controller.pawn var/delay = controller.movement_delay - var/datum/move_loop/loop = SSmove_manager.jps_move(moving, + var/datum/move_loop/has_target/jps/loop = SSmove_manager.jps_move(moving, current_movement_target, delay, repath_delay = 0.5 SECONDS, - max_path_length = AI_MAX_PATH_LENGTH, + max_path_length = maximum_length, minimum_distance = controller.get_minimum_distance(), access = controller.get_access(), subsystem = SSai_movement, + diagonal_handling = diagonal_flags, extra_info = controller, ) @@ -24,9 +28,23 @@ RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(post_move)) RegisterSignal(loop, COMSIG_MOVELOOP_JPS_REPATH, PROC_REF(repath_incoming)) + return loop + /datum/ai_movement/jps/proc/repath_incoming(datum/move_loop/has_target/jps/source) SIGNAL_HANDLER var/datum/ai_controller/controller = source.extra_info source.access = controller.get_access() source.minimum_distance = controller.get_minimum_distance() + +/datum/ai_movement/jps/bot + max_pathing_attempts = 25 + maximum_length = AI_BOT_PATH_LENGTH + diagonal_flags = DIAGONAL_REMOVE_ALL + +/datum/ai_movement/jps/bot/start_moving_towards(datum/ai_controller/controller, atom/current_movement_target, min_distance) + var/datum/move_loop/loop = ..() + var/atom/our_pawn = controller.pawn + if(isnull(our_pawn)) + return + our_pawn.RegisterSignal(loop, COMSIG_MOVELOOP_JPS_FINISHED_PATHING, TYPE_PROC_REF(/mob/living/basic/bot, generate_bot_path)) diff --git a/code/datums/ai/robot_customer/robot_customer_behaviors.dm b/code/datums/ai/robot_customer/robot_customer_behaviors.dm index 95260b8e68de2c..35fd26d76f6fe0 100644 --- a/code/datums/ai/robot_customer/robot_customer_behaviors.dm +++ b/code/datums/ai/robot_customer/robot_customer_behaviors.dm @@ -103,7 +103,7 @@ var/mob/living/greytider = controller.blackboard[BB_CUSTOMER_CURRENT_TARGET] //usually if we stop waiting, it's because we're done with the venue. but here we're either beating some dude up //or are being qdeleted and don't want runtime errors, so don't switch to leaving - if(greytider || QDELETED(src)) + if(greytider || QDELETED(src) || QDELETED(customer_pawn)) return controller.set_blackboard_key(BB_CUSTOMER_LEAVING, TRUE) customer_pawn.update_icon() //They might have a special leaving accesoiry (french flag) diff --git a/code/datums/ai_laws/ai_laws.dm b/code/datums/ai_laws/ai_laws.dm index c3ea9fcfadfae1..cab1766e669102 100644 --- a/code/datums/ai_laws/ai_laws.dm +++ b/code/datums/ai_laws/ai_laws.dm @@ -116,7 +116,7 @@ GLOBAL_VAR(round_default_lawset) /// Zeroth law /// A lawset can only have 1 zeroth law, it's the top dog. - /// Nothing removes it unless it's admin forced + /// Removed by things that remove core/inherent laws, but only if protected_zeroth is false. Otherwise, cannot be removed except by admins var/zeroth = null /// Zeroth borg law /// It's just a zeroth law but specially themed for cyborgs @@ -135,7 +135,7 @@ GLOBAL_VAR(round_default_lawset) /// These laws will go away when an AI is reset var/list/ion = list() /// Hacked laws - /// Syndicate uploaded laws which are above all other laws + /// Symphionia uploaded laws which are above all other laws /// These laws will go away when an AI is reset var/list/hacked = list() diff --git a/code/datums/announcers/default_announcer.dm b/code/datums/announcers/default_announcer.dm index c5dc142f818b94..8b91323ef5fb32 100644 --- a/code/datums/announcers/default_announcer.dm +++ b/code/datums/announcers/default_announcer.dm @@ -1,4 +1,4 @@ -/* SKYRAT EDIT REMOVAL +/* NOVA EDIT REMOVAL /datum/centcom_announcer/default welcome_sounds = list('sound/ai/default/welcome.ogg') alert_sounds = list('sound/ai/default/attention.ogg') diff --git a/code/datums/armor/_armor.dm b/code/datums/armor/_armor.dm index bfd15af4189245..616ad00c324ade 100644 --- a/code/datums/armor/_armor.dm +++ b/code/datums/armor/_armor.dm @@ -42,7 +42,7 @@ GLOBAL_LIST_INIT(armor_by_type, generate_armor_type_cache()) /// A version of armor that cannot be modified and will always return itself when attempted to be modified /datum/armor/immune -/datum/armor/Destroy(force, ...) +/datum/armor/Destroy(force) if(!force && tag) return QDEL_HINT_LETMELIVE diff --git a/code/datums/atmosphere/planetary.dm b/code/datums/atmosphere/planetary.dm index 29db62369b9526..e4babc9cf48075 100644 --- a/code/datums/atmosphere/planetary.dm +++ b/code/datums/atmosphere/planetary.dm @@ -17,7 +17,7 @@ /datum/gas/miasma=1.2, /datum/gas/water_vapor=0.1, ) - restricted_chance = 0 // SKYRAT EDIT: Disables restricted gases from rolling - Original value (30) + restricted_chance = 0 // NOVA EDIT: Disables restricted gases from rolling - Original value (30) minimum_pressure = HAZARD_LOW_PRESSURE + 10 maximum_pressure = LAVALAND_EQUIPMENT_EFFECT_PRESSURE - 1 @@ -42,7 +42,7 @@ /datum/gas/water_vapor=0.1, /datum/gas/miasma=1.2, ) - restricted_chance = 0 // SKYRAT EDIT: Disables restricted gases from rolling - Original value (20) + restricted_chance = 0 // NOVA EDIT: Disables restricted gases from rolling - Original value (20) minimum_pressure = HAZARD_LOW_PRESSURE + 10 maximum_pressure = LAVALAND_EQUIPMENT_EFFECT_PRESSURE - 1 diff --git a/code/datums/beam.dm b/code/datums/beam.dm index 6b138387290e7b..152de6ec1e1c48 100644 --- a/code/datums/beam.dm +++ b/code/datums/beam.dm @@ -179,7 +179,6 @@ /obj/effect/ebeam mouse_opacity = MOUSE_OPACITY_TRANSPARENT - plane = GAME_PLANE_UPPER_FOV_HIDDEN layer = ABOVE_ALL_MOB_LAYER anchored = TRUE var/emissive = TRUE diff --git a/code/datums/bodypart_overlays/bodypart_overlay.dm b/code/datums/bodypart_overlays/bodypart_overlay.dm index 5b6232fd303373..7639aa8da53dbd 100644 --- a/code/datums/bodypart_overlays/bodypart_overlay.dm +++ b/code/datums/bodypart_overlays/bodypart_overlay.dm @@ -4,7 +4,7 @@ ///Sometimes we need multiple layers, for like the back, middle and front of the person (EXTERNAL_FRONT, EXTERNAL_ADJACENT, EXTERNAL_BEHIND) var/layers ///List of all possible layers. Used for looping through in drawing - var/static/list/all_layers = list(EXTERNAL_FRONT, EXTERNAL_ADJACENT, EXTERNAL_BEHIND, EXTERNAL_FRONT_UNDER_CLOTHES, EXTERNAL_FRONT_OVER, EXTERNAL_FRONT_ABOVE_HAIR) // SKYRAT EDIT - Customization - ORIGINAL: var/static/list/all_layers = list(EXTERNAL_FRONT, EXTERNAL_ADJACENT, EXTERNAL_BEHIND) + var/static/list/all_layers = list(EXTERNAL_FRONT, EXTERNAL_ADJACENT, EXTERNAL_BEHIND, EXTERNAL_FRONT_UNDER_CLOTHES, EXTERNAL_FRONT_OVER, EXTERNAL_FRONT_ABOVE_HAIR) // NOVA EDIT - Customization - ORIGINAL: var/static/list/all_layers = list(EXTERNAL_FRONT, EXTERNAL_ADJACENT, EXTERNAL_BEHIND) ///Key of the icon states of all the sprite_datums for easy caching var/cache_key = "" @@ -46,14 +46,14 @@ return "ADJ" if(-BODY_FRONT_LAYER) return "FRONT" - //SKYRAT EDIT ADDITION - Customization + //NOVA EDIT ADDITION - Customization if(-BODY_FRONT_UNDER_CLOTHES) return "FRONT_UNDER" if(-ABOVE_BODY_FRONT_HEAD_LAYER) return "FRONT_OVER" if(-HEAD_LAYER) return "FRONT_OVER_HAIR" - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END ///Converts a bitflag to the right layer. I'd love to make this a static index list, but byond made an attempt on my life when i did /datum/bodypart_overlay/proc/bitflag_to_layer(layer) @@ -64,14 +64,14 @@ return -BODY_ADJ_LAYER if(EXTERNAL_FRONT) return -BODY_FRONT_LAYER - //SKYRAT EDIT ADDITION - Customization + //NOVA EDIT ADDITION - Customization if(EXTERNAL_FRONT_UNDER_CLOTHES) return -BODY_FRONT_UNDER_CLOTHES if(EXTERNAL_FRONT_OVER) return -ABOVE_BODY_FRONT_HEAD_LAYER if(EXTERNAL_FRONT_ABOVE_HAIR) return -HEAD_LAYER - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END ///Check whether we can draw the overlays. You generally don't want lizard snouts to draw over an EVA suit /datum/bodypart_overlay/proc/can_draw_on_bodypart(mob/living/carbon/human/human) diff --git a/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm b/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm index 486f9411934f96..d64a4e3b57f15c 100644 --- a/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm +++ b/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm @@ -93,26 +93,26 @@ CRASH("External organ has no feature list, it will render invisible") ///Give the organ its color. Force will override the existing one. -/datum/bodypart_overlay/mutant/proc/inherit_color(obj/item/bodypart/ownerlimb, force) - if(isnull(ownerlimb)) +/datum/bodypart_overlay/mutant/proc/inherit_color(obj/item/bodypart/bodypart_owner, force) + if(isnull(bodypart_owner)) draw_color = null - alpha = 255 // SKYRAT EDIT - Mutant bodyparts transparency are based on limb transparency + alpha = 255 // NOVA EDIT ADDITION - Mutant bodyparts transparency are based on limb transparency return TRUE if(draw_color && !force) return FALSE - alpha = ownerlimb.alpha // SKYRAT EDIT - Mutant bodyparts transparency are based on limb transparency + alpha = bodypart_owner.alpha // NOVA EDIT ADDITION - Mutant bodyparts transparency are based on limb transparency switch(color_source) if(ORGAN_COLOR_OVERRIDE) - draw_color = override_color(ownerlimb.draw_color) + draw_color = override_color(bodypart_owner.draw_color) if(ORGAN_COLOR_INHERIT) - draw_color = ownerlimb.draw_color + draw_color = bodypart_owner.draw_color if(ORGAN_COLOR_HAIR) - if(!ishuman(ownerlimb.owner)) + if(!ishuman(bodypart_owner.owner)) return - var/mob/living/carbon/human/human_owner = ownerlimb.owner - var/obj/item/bodypart/head/my_head = human_owner.get_bodypart(BODY_ZONE_HEAD) //not always the same as ownerlimb + var/mob/living/carbon/human/human_owner = bodypart_owner.owner + var/obj/item/bodypart/head/my_head = human_owner.get_bodypart(BODY_ZONE_HEAD) //not always the same as bodypart_owner //head hair color takes priority, owner hair color is a backup if we lack a head or something if(my_head) draw_color = my_head.hair_color @@ -123,12 +123,18 @@ ///Sprite accessories are singletons, stored list("Big Snout" = instance of /datum/sprite_accessory/snout/big), so here we get that singleton /datum/bodypart_overlay/mutant/proc/fetch_sprite_datum(datum/sprite_accessory/accessory_path) - var/list/feature_list = get_global_feature_list() - - return feature_list[initial(accessory_path.name)] + return fetch_sprite_datum_from_name(initial(accessory_path.name)) ///Get the singleton from the sprite name /datum/bodypart_overlay/mutant/proc/fetch_sprite_datum_from_name(accessory_name) var/list/feature_list = get_global_feature_list() - - return feature_list[accessory_name] + var/found = feature_list[accessory_name] + if(found) + return found + + if(!length(feature_list)) + CRASH("External organ [type] returned no sprite datums from get_global_feature_list(), so no accessories could be found!") + else if(accessory_name) + CRASH("External organ [type] couldn't find sprite accessory [accessory_name]!") + else + CRASH("External organ [type] had fetch_sprite_datum called with a null accessory name!") diff --git a/code/datums/bodypart_overlays/simple_bodypart_overlay.dm b/code/datums/bodypart_overlays/simple_bodypart_overlay.dm index 72fef44b2d456e..7f52d21de5398c 100644 --- a/code/datums/bodypart_overlays/simple_bodypart_overlay.dm +++ b/code/datums/bodypart_overlays/simple_bodypart_overlay.dm @@ -29,3 +29,9 @@ /datum/bodypart_overlay/simple/creampie icon_state = "creampie_human" layers = EXTERNAL_FRONT + +///bags drawn beneath the eyes +/datum/bodypart_overlay/simple/bags + icon_state = "bags" + draw_color = COLOR_WEBSAFE_DARK_GRAY + layers = EXTERNAL_ADJACENT diff --git a/code/datums/brain_damage/creepy_trauma.dm b/code/datums/brain_damage/creepy_trauma.dm index 1b19b4744cb75c..b056ddfb8de0f2 100644 --- a/code/datums/brain_damage/creepy_trauma.dm +++ b/code/datums/brain_damage/creepy_trauma.dm @@ -17,7 +17,6 @@ var/obsession_hug_count = 0 /datum/brain_trauma/special/obsessed/on_gain() - //setup, linking, etc// if(!obsession)//admins didn't set one obsession = find_obsession() @@ -34,6 +33,7 @@ //antag stuff// antagonist.forge_objectives(obsession.mind) antagonist.greet() + log_game("[key_name(antagonist)] has developed an obsession with [key_name(obsession)].") RegisterSignal(owner, COMSIG_CARBON_HELPED, PROC_REF(on_hug)) /datum/brain_trauma/special/obsessed/on_life(seconds_per_tick, times_fired) @@ -69,6 +69,7 @@ owner.mind.remove_antag_datum(/datum/antagonist/obsessed) owner.clear_mood_event("creeping") if(obsession) + log_game("[key_name(owner)] is no longer obsessed with [key_name(obsession)].") UnregisterSignal(obsession, COMSIG_MOB_EYECONTACT) /datum/brain_trauma/special/obsessed/handle_speech(datum/source, list/speech_args) @@ -135,10 +136,10 @@ continue if(!(player.mind.assigned_role.job_flags & JOB_CREW_MEMBER)) continue - // SKYRAT EDIT ADDITION START - Players in the interlink can't be obsession targets + // NOVA EDIT ADDITION START - Players in the interlink can't be obsession targets if(SSticker.IsRoundInProgress() && istype(get_area(player), /area/centcom/interlink)) continue - // SKYRAT EDIT END + // NOVA EDIT END viable_minds += player.mind for(var/datum/mind/possible_target as anything in viable_minds) if(possible_target != owner && ishuman(possible_target.current)) diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm index 48fabd701f45b4..664bf50fd666c3 100644 --- a/code/datums/brain_damage/imaginary_friend.dm +++ b/code/datums/brain_damage/imaginary_friend.dm @@ -83,8 +83,7 @@ var/mob/living/owner var/bubble_icon = "default" - var/datum/action/innate/imaginary_join/join - var/datum/action/innate/imaginary_hide/hide + /mob/camera/imaginary_friend/Login() . = ..() @@ -105,10 +104,11 @@ */ /mob/camera/imaginary_friend/Initialize(mapload) . = ..() - join = new - join.Grant(src) - hide = new - hide.Grant(src) + var/static/list/grantable_actions = list( + /datum/action/innate/imaginary_join, + /datum/action/innate/imaginary_hide, + ) + grant_actions_by_list(grantable_actions) /// Links this imaginary friend to the provided mob /mob/camera/imaginary_friend/proc/attach_to_owner(mob/living/imaginary_friend_owner) @@ -390,7 +390,7 @@ animate(visual, pixel_x = (tile.x - our_tile.x) * world.icon_size + pointed_atom.pixel_x, pixel_y = (tile.y - our_tile.y) * world.icon_size + pointed_atom.pixel_y, time = 1.7, easing = EASE_OUT) /mob/camera/imaginary_friend/create_thinking_indicator() - if(active_thinking_indicator || active_typing_indicator || !thinking_IC) + if(active_thinking_indicator || active_typing_indicator || !HAS_TRAIT(src, TRAIT_THINKING_IN_CHARACTER)) return FALSE active_thinking_indicator = image('icons/mob/effects/talk.dmi', src, "[bubble_icon]3", TYPING_LAYER) add_image_to_clients(active_thinking_indicator, group_clients()) @@ -402,7 +402,7 @@ active_thinking_indicator = null /mob/camera/imaginary_friend/create_typing_indicator() - if(active_typing_indicator || active_thinking_indicator || !thinking_IC) + if(active_typing_indicator || active_thinking_indicator || !HAS_TRAIT(src, TRAIT_THINKING_IN_CHARACTER)) return FALSE active_typing_indicator = image('icons/mob/effects/talk.dmi', src, "[bubble_icon]0", TYPING_LAYER) add_image_to_clients(active_typing_indicator, group_clients()) @@ -414,7 +414,7 @@ active_typing_indicator = null /mob/camera/imaginary_friend/remove_all_indicators() - thinking_IC = FALSE + REMOVE_TRAIT(src, TRAIT_THINKING_IN_CHARACTER, CURRENTLY_TYPING_TRAIT) remove_thinking_indicator() remove_typing_indicator() diff --git a/code/datums/brain_damage/phobia.dm b/code/datums/brain_damage/phobia.dm index 3360ed360527da..725c92ab7e8d1d 100644 --- a/code/datums/brain_damage/phobia.dm +++ b/code/datums/brain_damage/phobia.dm @@ -163,6 +163,10 @@ return TRUE return ..() +/datum/brain_trauma/mild/phobia/carps + phobia_type = "carps" + random_gain = FALSE + /datum/brain_trauma/mild/phobia/clowns phobia_type = "clowns" random_gain = FALSE diff --git a/code/datums/brain_damage/severe.dm b/code/datums/brain_damage/severe.dm index 90248df1cfb8cb..0038573fc7982d 100644 --- a/code/datums/brain_damage/severe.dm +++ b/code/datums/brain_damage/severe.dm @@ -291,7 +291,7 @@ gain_text = span_warning("You feel odd, like you just forgot something important.") lose_text = span_notice("You feel like a weight was lifted from your mind.") random_gain = FALSE - var/trigger_phrase = "Nanotrasen" + var/trigger_phrase = "Symphionia" /datum/brain_trauma/severe/hypnotic_trigger/New(phrase) ..() @@ -330,3 +330,104 @@ /datum/brain_trauma/severe/dyslexia/on_lose() REMOVE_TRAIT(owner, TRAIT_ILLITERATE, TRAUMA_TRAIT) ..() + +/* + * Brain traumas that eldritch paintings apply + * This one is for "The Sister and He Who Wept" or /obj/structure/sign/painting/eldritch + */ +/datum/brain_trauma/severe/weeping + name = "The Weeping" + desc = "Patient hallucinates everyone as a figure called He Who Wept" + scan_desc = "H_E##%%%WEEP6%11S!!,)()" + gain_text = span_warning("HE WEEPS AND I WILL SEE HIM ONCE MORE") + lose_text = span_notice("You feel the tendrils of something slip from your mind.") + random_gain = FALSE + /// Our cooldown declare for causing hallucinations + COOLDOWN_DECLARE(weeping_hallucinations) + +/datum/brain_trauma/severe/weeping/on_life(seconds_per_tick, times_fired) + if(owner.stat != CONSCIOUS || owner.IsSleeping() || owner.IsUnconscious()) + return + // If they have examined a painting recently + if(HAS_TRAIT(owner, TRAIT_ELDRITCH_PAINTING_EXAMINE)) + return + if(!COOLDOWN_FINISHED(src, weeping_hallucinations)) + return + owner.cause_hallucination(/datum/hallucination/delusion/preset/heretic, "Caused by The Weeping brain trauma") + owner.add_mood_event("eldritch_weeping", /datum/mood_event/eldritch_painting/weeping) + COOLDOWN_START(src, weeping_hallucinations, 10 SECONDS) + ..() + +//This one is for "The First Desire" or /obj/structure/sign/painting/eldritch/desire +/datum/brain_trauma/severe/flesh_desire + name = "The Desire for Flesh" + desc = "Patient appears hungrier and only wishes to eat meats." + scan_desc = "H_(82882)G3E:__))9R" + gain_text = span_warning("I feel a hunger, only organs and flesh will feed it...") + lose_text = span_notice("You no longer feel the hunger for flesh...") + random_gain = FALSE + /// How much faster we loose hunger + var/hunger_rate = 15 + +/datum/brain_trauma/severe/flesh_desire/on_gain() + // Allows them to eat faster, mainly for flavor + ADD_TRAIT(owner, TRAIT_VORACIOUS, REF(src)) + ADD_TRAIT(owner, TRAIT_FLESH_DESIRE, REF(src)) + ..() + +/datum/brain_trauma/severe/flesh_desire/on_life(seconds_per_tick, times_fired) + // Causes them to need to eat at 10x the normal rate + owner.adjust_nutrition(-hunger_rate * HUNGER_FACTOR) + if(SPT_PROB(10, seconds_per_tick)) + to_chat(owner, span_notice("You feel a ravenous hunger for flesh...")) + owner.overeatduration = max(owner.overeatduration - 200 SECONDS, 0) + +/datum/brain_trauma/severe/flesh_desire/on_lose() + REMOVE_TRAIT(owner, TRAIT_VORACIOUS, REF(src)) + REMOVE_TRAIT(owner, TRAIT_FLESH_DESIRE, REF(src)) + return ..() + +// This one is for "Lady out of gates" or /obj/item/wallframe/painting/eldritch/beauty +/datum/brain_trauma/severe/eldritch_beauty + name = "The Pursuit of Perfection" + desc = "Patient seems to furiously scratch at their body, the only way to make them cease is for them to remove their jumpsuit." + scan_desc = "I_)8(P_E##R&&F(E)C__T)" + gain_text = span_warning("I WILL RID MY FLESH FROM IMPERFECTION!! I WILL BE PERFECT WITHOUT MY SUITS!!") + lose_text = span_notice("You feel the influence of something slip your mind, and you feel content as you are.") + random_gain = FALSE + /// How much damage we deal with each scratch + var/scratch_damage = 0.5 + +/datum/brain_trauma/severe/eldritch_beauty/on_life(seconds_per_tick, times_fired) + // Jumpsuits ruin the "perfection" of the body + if(!owner.get_item_by_slot(ITEM_SLOT_ICLOTHING)) + return + + // Scratching code + var/obj/item/bodypart/bodypart = owner.get_bodypart(owner.get_random_valid_zone(even_weights = TRUE)) + if(!(bodypart && IS_ORGANIC_LIMB(bodypart)) && bodypart.bodypart_flags & BODYPART_PSEUDOPART) + return + if(owner.incapacitated()) + return + bodypart.receive_damage(scratch_damage) + if(SPT_PROB(33, seconds_per_tick)) + to_chat(owner, span_notice("You scratch furiously at [bodypart] to ruin the cloth that hides the beauty!")) + +// This one is for "Climb over the rusted mountain" or /obj/structure/sign/painting/eldritch/rust +/datum/brain_trauma/severe/rusting + name = "The Rusted Climb" + desc = "Patient seems to oxidise things around them at random, and seem to believe they are aiding a creature in climbing a mountin." + scan_desc = "C_)L(#_I_##M;B" + gain_text = span_warning("The rusted climb shall finish at the peak") + lose_text = span_notice("The rusted climb? Whats that? An odd dream to be sure.") + random_gain = FALSE + +/datum/brain_trauma/severe/rusting/on_life(seconds_per_tick, times_fired) + var/atom/tile = get_turf(owner) + // Examining a painting should stop this effect to give counterplay + if(HAS_TRAIT(owner, TRAIT_ELDRITCH_PAINTING_EXAMINE)) + return + + if(SPT_PROB(50, seconds_per_tick)) + to_chat(owner, span_notice("You feel eldritch energies pulse from your body!")) + tile.rust_heretic_act() diff --git a/code/datums/brain_damage/special.dm b/code/datums/brain_damage/special.dm index ed3e91707b99d8..d9348f98f4b0fb 100644 --- a/code/datums/brain_damage/special.dm +++ b/code/datums/brain_damage/special.dm @@ -100,13 +100,16 @@ image_icon = 'icons/effects/effects.dmi' image_state = "bluestream" image_layer = ABOVE_MOB_LAYER - image_plane = GAME_PLANE_UPPER var/obj/effect/client_image_holder/bluespace_stream/linked_to /obj/effect/client_image_holder/bluespace_stream/Initialize(mapload, list/mobs_which_see_us) . = ..() QDEL_IN(src, 30 SECONDS) +/obj/effect/client_image_holder/bluespace_stream/generate_image() + . = ..() + apply_wibbly_filters(.) + /obj/effect/client_image_holder/bluespace_stream/Destroy() if(!QDELETED(linked_to)) qdel(linked_to) diff --git a/code/datums/brain_damage/split_personality.dm b/code/datums/brain_damage/split_personality.dm index e5890a5fa9b869..f6e83c9537c0a4 100644 --- a/code/datums/brain_damage/split_personality.dm +++ b/code/datums/brain_damage/split_personality.dm @@ -25,11 +25,11 @@ /datum/brain_trauma/severe/split_personality/proc/make_backseats() stranger_backseat = new(owner, src) - var/datum/action/cooldown/spell/personality_commune/stranger_spell = new(src) + var/datum/action/personality_commune/stranger_spell = new(src) stranger_spell.Grant(stranger_backseat) owner_backseat = new(owner, src) - var/datum/action/cooldown/spell/personality_commune/owner_spell = new(src) + var/datum/action/personality_commune/owner_spell = new(src) owner_spell.Grant(owner_backseat) /// Attempts to get a ghost to play the personality @@ -211,7 +211,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 @@ -256,13 +256,19 @@ gain_text = span_warning("Crap, that was one drink too many. You black out...") lose_text = "You wake up very, very confused and hungover. All you can remember is drinking a lot of alcohol... what happened?" poll_role = "blacked out drunkard" + random_gain = FALSE /// Duration of effect, tracked in seconds, not deciseconds. qdels when reaching 0. var/duration_in_seconds = 180 /datum/brain_trauma/severe/split_personality/blackout/on_gain() . = ..() RegisterSignal(owner, COMSIG_ATOM_SPLASHED, PROC_REF(on_splashed)) - notify_ghosts("[owner] is blacking out!", source = owner, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Bro I'm not even drunk right now") + notify_ghosts( + "[owner] is blacking out!", + source = owner, + header = "Bro I'm not even drunk right now", + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) /datum/brain_trauma/severe/split_personality/blackout/on_lose() . = ..() @@ -287,8 +293,8 @@ if(duration_in_seconds <= 0) qdel(src) return - else if(duration_in_seconds <= 50) - to_chat(owner, span_warning("You have 50 seconds left before sobering up!")) + else if(duration_in_seconds <= 60 && !(duration_in_seconds % 20)) + to_chat(owner, span_warning("You have [duration_in_seconds] seconds left before sobering up!")) if(prob(10) && !HAS_TRAIT(owner, TRAIT_DISCOORDINATED_TOOL_USER)) ADD_TRAIT(owner, TRAIT_DISCOORDINATED_TOOL_USER, TRAUMA_TRAIT) owner.balloon_alert(owner, "dexterity reduced temporarily!") diff --git a/code/datums/callback.dm b/code/datums/callback.dm index 026762d58f735d..cf90582115dd63 100644 --- a/code/datums/callback.dm +++ b/code/datums/callback.dm @@ -104,12 +104,6 @@ if (!object) return -#if DM_VERSION <= 514 - if(istext(object) && object != GLOBAL_PROC) - to_chat(usr, "[object] may be an external library. Calling external libraries is disallowed.", confidential = TRUE) - return -#endif - var/list/calling_arguments = arguments if (length(args)) if (length(arguments)) @@ -147,12 +141,6 @@ if (!object) return -#if DM_VERSION <= 514 - if(istext(object) && object != GLOBAL_PROC) - to_chat(usr, "[object] may be an external library. Calling external libraries is disallowed.", confidential = TRUE) - return -#endif - var/list/calling_arguments = arguments if (length(args)) if (length(arguments)) diff --git a/code/datums/candidate_poll.dm b/code/datums/candidate_poll.dm new file mode 100644 index 00000000000000..1856858accda7e --- /dev/null +++ b/code/datums/candidate_poll.dm @@ -0,0 +1,114 @@ +/// 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 + +/datum/candidate_poll/New(polled_role, polled_question, poll_duration, poll_ignoring_category, poll_jumpable) + 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"]" + 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("You have already signed up for this!")) + 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("You have signed up for [role]! A candidate will be picked randomly soon.")) + // 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("You aren't signed up for this!")) + return FALSE + + if(time_left() <= 0) + if(!silent) + to_chat(candidate, span_danger("It's too late to unregister yourself, selection has already begun!")) + return FALSE + + signed_up -= candidate + if(!silent) + to_chat(candidate, span_danger("You have been unregistered as a candidate for [role]. You can sign up again before the poll ends.")) + + 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) + var/list/ignore_list = GLOB.poll_ignore[ignoring_category] + if(!ignore_list) + GLOB.poll_ignore[ignoring_category] = list() + 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) + 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/chat_payload.dm b/code/datums/chat_payload.dm new file mode 100644 index 00000000000000..fd35bbc4eecf6b --- /dev/null +++ b/code/datums/chat_payload.dm @@ -0,0 +1,16 @@ +/// Stores information about a chat payload +/datum/chat_payload + /// Sequence number of this payload + var/sequence = 0 + /// Message we are sending + var/list/content + /// Resend count + var/resends = 0 + +/// Converts the chat payload into a JSON string +/datum/chat_payload/proc/into_message() + return "{\"sequence\":[sequence],\"content\":[json_encode(content)]}" + +/// Returns an HTML-encoded message from our contents. +/datum/chat_payload/proc/get_content_as_html() + return message_to_html(content) diff --git a/code/datums/chatmessage.dm b/code/datums/chatmessage.dm index 6ee4eaddd3f94e..a4530f479deb65 100644 --- a/code/datums/chatmessage.dm +++ b/code/datums/chatmessage.dm @@ -44,10 +44,6 @@ var/eol_complete /// Contains the approximate amount of lines for height decay var/approx_lines - /// Contains the reference to the next chatmessage in the bucket, used by runechat subsystem - var/datum/chatmessage/next - /// Contains the reference to the previous chatmessage in the bucket, used by runechat subsystem - var/datum/chatmessage/prev /// The current index used for adjusting the layer of each sequential chat message such that recent messages will overlay older ones var/static/current_z_idx = 0 /// When we started animating the message @@ -125,12 +121,6 @@ if (length_char(text) > maxlen) text = copytext_char(text, 1, maxlen + 1) + "..." // BYOND index moment - // Calculate target color if not already present - if (!target.chat_color || target.chat_color_name != target.name) - target.chat_color = colorize_string(target.name) - target.chat_color_darkened = colorize_string(target.name, 0.85, 0.85) - target.chat_color_name = target.name - // Get rid of any URL schemes that might cause BYOND to automatically wrap something in an anchor tag var/static/regex/url_scheme = new(@"[A-Za-z][A-Za-z0-9+-\.]*:\/\/", "g") text = replacetext(text, url_scheme, "") @@ -150,6 +140,7 @@ extra_classes |= SPAN_YELL var/list/prefixes + var/chat_color_name_to_use // Append radio icon if from a virtual speaker if (extra_classes.Find("virtual-speaker")) @@ -158,6 +149,19 @@ else if (extra_classes.Find("emote")) var/image/r_icon = image('icons/ui_icons/chat/chat_icons.dmi', icon_state = "emote") LAZYADD(prefixes, "\icon[r_icon]") + chat_color_name_to_use = target.get_visible_name(add_id_name = FALSE) // use face name for nonverbal messages + + if(isnull(chat_color_name_to_use)) + if(HAS_TRAIT(target, TRAIT_SIGN_LANG)) + chat_color_name_to_use = target.get_visible_name(add_id_name = FALSE) // use face name for signers too + else + chat_color_name_to_use = target.GetVoice() // for everything else, use the target's voice name + + // Calculate target color if not already present + if (!target.chat_color || target.chat_color_name != chat_color_name_to_use) + target.chat_color = get_chat_color_string(chat_color_name_to_use) // NOVA EDIT CHANGE - ORIGINAL: target.chat_color = colorize_string(chat_color_name_to_use) + target.chat_color_darkened = get_chat_color_string(chat_color_name_to_use, darkened = TRUE) // NOVA EDIT CHANGE - ORIGINAL: target.chat_color_darkened = colorize_string(chat_color_name_to_use, 0.85, 0.85) + target.chat_color_name = chat_color_name_to_use // Append language icon if the language uses one var/datum/language/language_instance = GLOB.language_datum_instances[language] diff --git a/code/datums/cinematics/nuke_cinematics.dm b/code/datums/cinematics/nuke_cinematics.dm index dd827f7c0b9fdf..c8a2a269527850 100644 --- a/code/datums/cinematics/nuke_cinematics.dm +++ b/code/datums/cinematics/nuke_cinematics.dm @@ -56,7 +56,7 @@ flick("station_explode_fade_red", screen) play_cinematic_sound(sound('sound/effects/explosion_distant.ogg')) -/// A blood cult summoned Nar'sie, but central command deployed a nuclear package to stop them. +/// A blood cult summoned Nar'sie, but Conglomeration of Colonists deployed a nuclear package to stop them. /datum/cinematic/nuke/cult after_nuke_summary_state = "summary_cult" diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm index e461aa2ee36d3f..acf9ceead56ced 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -72,15 +72,13 @@ * * Arguments: * * force - makes it not check for and remove the component from the parent - * * silent - deletes the component without sending a [COMSIG_COMPONENT_REMOVING] signal */ -/datum/component/Destroy(force=FALSE, silent=FALSE) +/datum/component/Destroy(force = FALSE) if(!parent) return ..() if(!force) _RemoveFromParent() - if(!silent) - SEND_SIGNAL(parent, COMSIG_COMPONENT_REMOVING, src) + SEND_SIGNAL(parent, COMSIG_COMPONENT_REMOVING, src) parent = null return ..() diff --git a/code/datums/components/acid.dm b/code/datums/components/acid.dm index 1d9cf9e87d68f0..fc60e0312fd72f 100644 --- a/code/datums/components/acid.dm +++ b/code/datums/components/acid.dm @@ -72,7 +72,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e particle_effect = new(atom_parent, acid_particles, isitem(atom_parent) ? NONE : PARTICLE_ATTACH_MOB) START_PROCESSING(SSacid, src) -/datum/component/acid/Destroy(force, silent) +/datum/component/acid/Destroy(force) STOP_PROCESSING(SSacid, src) if(sizzle) QDEL_NULL(sizzle) @@ -254,7 +254,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e if(!isliving(arrived)) return var/mob/living/crosser = arrived - if(crosser.movement_type & FLYING) + if(crosser.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) return if(crosser.move_intent == MOVE_INTENT_WALK) return diff --git a/code/datums/components/action_item_overlay.dm b/code/datums/components/action_item_overlay.dm index e7e567cde36737..80478aa9ca42ef 100644 --- a/code/datums/components/action_item_overlay.dm +++ b/code/datums/components/action_item_overlay.dm @@ -24,7 +24,7 @@ src.item_ref = WEAKREF(item) src.item_callback = item_callback -/datum/component/action_item_overlay/Destroy(force, silent) +/datum/component/action_item_overlay/Destroy(force) item_ref = null item_callback = null item_appearance = null diff --git a/code/datums/components/admin_popup.dm b/code/datums/components/admin_popup.dm index 1d258653bae475..ff1e2a3d2851be 100644 --- a/code/datums/components/admin_popup.dm +++ b/code/datums/components/admin_popup.dm @@ -26,7 +26,7 @@ PROC_REF(delete_self), ) -/datum/component/admin_popup/Destroy(force, silent) +/datum/component/admin_popup/Destroy(force) var/client/parent_client = parent parent_client?.screen -= admin_popup diff --git a/code/datums/components/ai_has_target_timer.dm b/code/datums/components/ai_has_target_timer.dm index bcd748ce638238..5fdc07417f4d66 100644 --- a/code/datums/components/ai_has_target_timer.dm +++ b/code/datums/components/ai_has_target_timer.dm @@ -33,7 +33,7 @@ REMOVE_TRAIT(parent, TRAIT_SUBTREE_REQUIRED_OPERATIONAL_DATUM, type) return ..() -/datum/component/ai_target_timer/Destroy(force, silent) +/datum/component/ai_target_timer/Destroy(force) finalise_losing_target() return ..() diff --git a/code/datums/components/ai_retaliate_advanced.dm b/code/datums/components/ai_retaliate_advanced.dm index ca477a0db27d24..d734fa92b3cb3b 100644 --- a/code/datums/components/ai_retaliate_advanced.dm +++ b/code/datums/components/ai_retaliate_advanced.dm @@ -16,7 +16,7 @@ ADD_TRAIT(parent, TRAIT_SUBTREE_REQUIRED_OPERATIONAL_DATUM, type) -/datum/component/ai_retaliate_advanced/Destroy(force, silent) +/datum/component/ai_retaliate_advanced/Destroy(force) post_retaliate_callback = null return ..() diff --git a/code/datums/components/anti_magic.dm b/code/datums/components/anti_magic.dm index 059bc2f787d41d..48e5b10b25f192 100644 --- a/code/datums/components/anti_magic.dm +++ b/code/datums/components/anti_magic.dm @@ -56,7 +56,7 @@ src.drain_antimagic = drain_antimagic src.expiration = expiration -/datum/component/anti_magic/Destroy(force, silent) +/datum/component/anti_magic/Destroy(force) drain_antimagic = null expiration = null return ..() diff --git a/code/datums/components/aquarium_content.dm b/code/datums/components/aquarium_content.dm index 589b831aa7256d..3e7e704638f2db 100644 --- a/code/datums/components/aquarium_content.dm +++ b/code/datums/components/aquarium_content.dm @@ -138,7 +138,7 @@ . = ..() REMOVE_TRAIT(parent, TRAIT_FISH_CASE_COMPATIBILE, REF(src)) -/datum/component/aquarium_content/Destroy(force, silent) +/datum/component/aquarium_content/Destroy(force) if(current_aquarium) remove_from_aquarium() QDEL_NULL(vc_obj) diff --git a/code/datums/components/area_sound_manager.dm b/code/datums/components/area_sound_manager.dm index bea20222699e02..65faf7ab3d6d05 100644 --- a/code/datums/components/area_sound_manager.dm +++ b/code/datums/components/area_sound_manager.dm @@ -29,7 +29,7 @@ else if(!isnull(remove_on)) RegisterSignal(parent, remove_on, PROC_REF(handle_removal)) -/datum/component/area_sound_manager/Destroy(force, silent) +/datum/component/area_sound_manager/Destroy(force) QDEL_NULL(our_loop) . = ..() diff --git a/code/datums/components/areabound.dm b/code/datums/components/areabound.dm index f952d5db2e1829..872fab2d8e7cab 100644 --- a/code/datums/components/areabound.dm +++ b/code/datums/components/areabound.dm @@ -26,6 +26,6 @@ AM.forceMove(reset_turf) moving = FALSE -/datum/component/areabound/Destroy(force, silent) +/datum/component/areabound/Destroy(force) QDEL_NULL(move_tracker) . = ..() diff --git a/code/datums/components/aura_healing.dm b/code/datums/components/aura_healing.dm index 668e19d5786ef8..2aa33203b41669 100644 --- a/code/datums/components/aura_healing.dm +++ b/code/datums/components/aura_healing.dm @@ -26,9 +26,6 @@ /// Stamina damage to heal over a second var/stamina_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 @@ -57,7 +54,6 @@ toxin_heal = 0, suffocation_heal = 0, stamina_heal = 0, - clone_heal = 0, blood_heal = 0, organ_healing = null, simple_heal = 0, @@ -76,14 +72,13 @@ src.toxin_heal = toxin_heal src.suffocation_heal = suffocation_heal src.stamina_heal = stamina_heal - src.clone_heal = clone_heal src.blood_heal = blood_heal src.organ_healing = organ_healing src.simple_heal = simple_heal src.limit_to_trait = limit_to_trait src.healing_color = healing_color -/datum/component/aura_healing/Destroy(force, silent) +/datum/component/aura_healing/Destroy(force) STOP_PROCESSING(SSaura_healing, src) var/alert_category = "aura_healing_[REF(src)]" @@ -126,7 +121,6 @@ candidate.adjustOxyLoss(-suffocation_heal * seconds_per_tick, updating_health = FALSE) candidate.adjustStaminaLoss(-stamina_heal * seconds_per_tick, updating_stamina = FALSE) - candidate.adjustCloneLoss(-clone_heal * seconds_per_tick, updating_health = FALSE) for (var/organ in organ_healing) candidate.adjustOrganLoss(organ, -organ_healing[organ] * seconds_per_tick) diff --git a/code/datums/components/bakeable.dm b/code/datums/components/bakeable.dm index b4cde3c5752e97..a745be2b1a5793 100644 --- a/code/datums/components/bakeable.dm +++ b/code/datums/components/bakeable.dm @@ -26,6 +26,8 @@ src.required_bake_time = required_bake_time src.positive_result = positive_result src.added_reagents = added_reagents + if(positive_result) + ADD_TRAIT(parent, TRAIT_BAKEABLE, REF(src)) // Inherit the new values passed to the component /datum/component/bakeable/InheritComponent(datum/component/bakeable/new_comp, original, bake_result, required_bake_time, positive_result, use_large_steam_sprite) @@ -45,6 +47,7 @@ /datum/component/bakeable/UnregisterFromParent() UnregisterSignal(parent, list(COMSIG_ITEM_OVEN_PLACED_IN, COMSIG_ITEM_OVEN_PROCESS, COMSIG_ATOM_EXAMINE)) + REMOVE_TRAIT(parent, TRAIT_BAKEABLE, REF(src)) /// Signal proc for [COMSIG_ITEM_OVEN_PLACED_IN] when baking starts (parent enters an oven) /datum/component/bakeable/proc/on_baking_start(datum/source, atom/used_oven, mob/baker) diff --git a/code/datums/components/basic_mob_attack_telegraph.dm b/code/datums/components/basic_mob_attack_telegraph.dm index 5473dbd0fa00f4..2ccf2f5022b586 100644 --- a/code/datums/components/basic_mob_attack_telegraph.dm +++ b/code/datums/components/basic_mob_attack_telegraph.dm @@ -25,7 +25,7 @@ src.telegraph_duration = telegraph_duration src.on_began_forecast = on_began_forecast -/datum/component/basic_mob_attack_telegraph/Destroy(force, silent) +/datum/component/basic_mob_attack_telegraph/Destroy(force) if(current_target) forget_target(current_target) target_overlay = null diff --git a/code/datums/components/basic_ranged_ready_overlay.dm b/code/datums/components/basic_ranged_ready_overlay.dm index 434a64dd6ffd38..4bcbd580ca79b0 100644 --- a/code/datums/components/basic_ranged_ready_overlay.dm +++ b/code/datums/components/basic_ranged_ready_overlay.dm @@ -29,7 +29,7 @@ UnregisterSignal(parent, list(COMSIG_BASICMOB_POST_ATTACK_RANGED, COMSIG_LIVING_REVIVE)) return ..() -/datum/component/basic_ranged_ready_overlay/Destroy(force, silent) +/datum/component/basic_ranged_ready_overlay/Destroy(force) deltimer(waiting_timer) return ..() diff --git a/code/datums/components/boomerang.dm b/code/datums/components/boomerang.dm index 751013d711672a..8b35f171c28aef 100644 --- a/code/datums/components/boomerang.dm +++ b/code/datums/components/boomerang.dm @@ -37,12 +37,13 @@ * * thrown_thing: The thrownthing datum from the parent object's latest throw. Updates thrown_boomerang. * * spin: Carry over from POST_THROW, the speed of rotation on the boomerang when thrown. */ -/datum/component/boomerang/proc/prepare_throw(datum/source, datum/thrownthing/thrown_thing, spin) +/datum/component/boomerang/proc/prepare_throw(datum/source, datum/thrownthing/throwingdatum, spin) SIGNAL_HANDLER - if(thrower_easy_catch_enabled && thrown_thing?.thrower) - if(iscarbon(thrown_thing.thrower)) - var/mob/living/carbon/Carbon = thrown_thing.thrower - Carbon.throw_mode_on(THROW_MODE_TOGGLE) + var/mob/thrower = throwingdatum?.get_thrower() + if(thrower_easy_catch_enabled && thrower) + if(iscarbon(thrower)) + var/mob/living/carbon/carbon_mob = thrower + carbon_mob.throw_mode_on(THROW_MODE_TOGGLE) return /** @@ -63,24 +64,25 @@ * * source: Datum src from original signal call. * * throwing_datum: The thrownthing datum that originally impacted the object, that we use to build the new throwing datum for the rebound. */ -/datum/component/boomerang/proc/return_missed_throw(datum/source, datum/thrownthing/throwing_datum) +/datum/component/boomerang/proc/return_missed_throw(datum/source, datum/thrownthing/throwingdatum) SIGNAL_HANDLER if(!COOLDOWN_FINISHED(src, last_boomerang_throw)) return var/obj/item/true_parent = parent - aerodynamic_swing(throwing_datum, true_parent) + aerodynamic_swing(throwingdatum, true_parent) /** * Proc that triggers when the thrown boomerang has been fully thrown, rethrowing the boomerang back to the thrower, and producing visible feedback. * * throwing_datum: The thrownthing datum that originally impacted the object, that we use to build the new throwing datum for the rebound. * * hit_atom: The atom that has been hit by the boomerang'd object. */ -/datum/component/boomerang/proc/aerodynamic_swing(datum/thrownthing/throwing_datum, obj/item/true_parent) +/datum/component/boomerang/proc/aerodynamic_swing(datum/thrownthing/throwingdatum, obj/item/true_parent) var/mob/thrown_by = true_parent.thrownby?.resolve() if(thrown_by) - addtimer(CALLBACK(true_parent, TYPE_PROC_REF(/atom/movable, throw_at), thrown_by, boomerang_throw_range, throwing_datum.speed, null, TRUE), 1) + addtimer(CALLBACK(true_parent, TYPE_PROC_REF(/atom/movable, throw_at), thrown_by, boomerang_throw_range, throwingdatum.speed, null, TRUE), 1) COOLDOWN_START(src, last_boomerang_throw, BOOMERANG_REBOUND_INTERVAL) - true_parent.visible_message(span_danger("[true_parent] is flying back at [throwing_datum.thrower]!"), \ + var/mob/thrower = throwingdatum?.get_thrower() + true_parent.visible_message(span_danger("[true_parent] is flying back at [thrower]!"), \ span_danger("You see [true_parent] fly back at you!"), \ span_hear("You hear an aerodynamic woosh!")) diff --git a/code/datums/components/boss_music.dm b/code/datums/components/boss_music.dm index 37f438f0b62697..a5d2de4c8d596c 100644 --- a/code/datums/components/boss_music.dm +++ b/code/datums/components/boss_music.dm @@ -22,7 +22,7 @@ src.boss_track = boss_track src.track_duration = track_duration -/datum/component/boss_music/Destroy(force, silent) +/datum/component/boss_music/Destroy(force) . = ..() for(var/callback in music_callbacks) deltimer(callback) @@ -40,7 +40,7 @@ UnregisterSignal(parent, COMSIG_HOSTILE_FOUND_TARGET) return ..() -///Handles giving the boss music to a new target the fauna has recieved. +///Handles giving the boss music to a new target the fauna has received. ///Keeps track of them to not repeatedly overwrite its own track. /datum/component/boss_music/proc/on_target_found(atom/source, mob/new_target) SIGNAL_HANDLER diff --git a/code/datums/components/breeding.dm b/code/datums/components/breeding.dm new file mode 100644 index 00000000000000..7c9bcecf7bce56 --- /dev/null +++ b/code/datums/components/breeding.dm @@ -0,0 +1,76 @@ +/* + * A component to allow us to breed + */ +/datum/component/breed + /// additional mobs we can breed with + var/list/can_breed_with + ///path of the baby + var/baby_path + ///time to wait after breeding + var/breed_timer + ///AI key we set when we're ready to breed + var/breed_key = BB_BREED_READY + ///are we ready to breed? + var/ready_to_breed = TRUE + ///callback after we give birth to the child + var/datum/callback/post_birth + +/datum/component/breed/Initialize(list/can_breed_with = list(), breed_timer = 40 SECONDS, baby_path, post_birth) + if(!isliving(parent)) + return COMPONENT_INCOMPATIBLE + + if(ishuman(parent)) //sin detected + return COMPONENT_INCOMPATIBLE + + if(!ispath(baby_path)) + stack_trace("attempted to add a breeding component with invalid baby path!") + return + + src.can_breed_with = can_breed_with + src.breed_timer = breed_timer + src.baby_path = baby_path + src.post_birth = post_birth + + ADD_TRAIT(parent, TRAIT_SUBTREE_REQUIRED_OPERATIONAL_DATUM, type) + +/datum/component/breed/RegisterWithParent() + RegisterSignal(parent, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(breed_with_partner)) + ADD_TRAIT(parent, TRAIT_MOB_BREEDER, REF(src)) + var/mob/living/parent_mob = parent + parent_mob.ai_controller?.set_blackboard_key(breed_key, TRUE) + +/datum/component/breed/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_HOSTILE_PRE_ATTACKINGTARGET) + REMOVE_TRAIT(parent, TRAIT_MOB_BREEDER, REF(src)) + post_birth = null + + +/datum/component/breed/proc/breed_with_partner(mob/living/source, mob/living/target) + SIGNAL_HANDLER + + if(source.combat_mode) + return + + if(!is_type_in_typecache(target, can_breed_with)) + return + + if(!HAS_TRAIT(target, TRAIT_MOB_BREEDER) || target.gender == source.gender) + return + + if(!ready_to_breed) + source.balloon_alert(source, "not ready!") + return COMPONENT_HOSTILE_NO_ATTACK + + var/turf/delivery_destination = get_turf(source) + var/mob/living/baby = new baby_path(delivery_destination) + new /obj/effect/temp_visual/heart(delivery_destination) + toggle_status(source) + + addtimer(CALLBACK(src, PROC_REF(toggle_status), source), breed_timer) + post_birth?.Invoke(baby, target) + return COMPONENT_HOSTILE_NO_ATTACK + +/datum/component/breed/proc/toggle_status(mob/living/source) + ready_to_breed = !ready_to_breed + source.ai_controller?.set_blackboard_key(BB_BREED_READY, ready_to_breed) + diff --git a/code/datums/components/bullet_intercepting.dm b/code/datums/components/bullet_intercepting.dm index d8de06806656ca..c176de54b94c5d 100644 --- a/code/datums/components/bullet_intercepting.dm +++ b/code/datums/components/bullet_intercepting.dm @@ -25,7 +25,7 @@ RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(on_parent_equipped)) RegisterSignal(parent, COMSIG_ITEM_PRE_UNEQUIP, PROC_REF(on_unequipped)) -/datum/component/bullet_intercepting/Destroy(force, silent) +/datum/component/bullet_intercepting/Destroy(force) wearer = null on_intercepted = null return ..() diff --git a/code/datums/components/bumpattack.dm b/code/datums/components/bumpattack.dm index ec8cd272a44626..a305b43c25bb75 100644 --- a/code/datums/components/bumpattack.dm +++ b/code/datums/components/bumpattack.dm @@ -64,7 +64,7 @@ var/obj/item/our_weapon = proxy_weapon || parent if(!istype(our_weapon)) CRASH("[our_weapon] somehow failed istype") - if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_BUMP_ATTACK)) + if(TIMER_COOLDOWN_FINISHED(src, COOLDOWN_BUMP_ATTACK)) TIMER_COOLDOWN_START(src, COOLDOWN_BUMP_ATTACK, attack_cooldown) INVOKE_ASYNC(target, TYPE_PROC_REF(/atom, attackby), our_weapon, bumper) bumper.visible_message(span_danger("[bumper] charges into [target], attacking with [our_weapon]!"), span_danger("You charge into [target], attacking with [our_weapon]!"), vision_distance = COMBAT_MESSAGE_RANGE) diff --git a/code/datums/components/burning.dm b/code/datums/components/burning.dm index e5624d69b0816a..2535a5b6f904c3 100644 --- a/code/datums/components/burning.dm +++ b/code/datums/components/burning.dm @@ -30,7 +30,7 @@ GLOBAL_DATUM_INIT(fire_overlay, /mutable_appearance, mutable_appearance('icons/e particle_effect = new(atom_parent, fire_particles, isitem(atom_parent) ? NONE : PARTICLE_ATTACH_MOB) START_PROCESSING(SSburning, src) -/datum/component/burning/Destroy(force, silent) +/datum/component/burning/Destroy(force) STOP_PROCESSING(SSburning, src) fire_overlay = null if(particle_effect) diff --git a/code/datums/components/butchering.dm b/code/datums/components/butchering.dm index 183203ed709f59..0cf6631f8074bd 100644 --- a/code/datums/components/butchering.dm +++ b/code/datums/components/butchering.dm @@ -34,7 +34,7 @@ if(isitem(parent)) RegisterSignal(parent, COMSIG_ITEM_ATTACK, PROC_REF(onItemAttack)) -/datum/component/butchering/Destroy(force, silent) +/datum/component/butchering/Destroy(force) butcher_callback = null return ..() diff --git a/code/datums/components/caltrop.dm b/code/datums/components/caltrop.dm index 45a9d1976c5d66..c760adbebb0598 100644 --- a/code/datums/components/caltrop.dm +++ b/code/datums/components/caltrop.dm @@ -71,59 +71,61 @@ if(!ishuman(arrived)) return - var/mob/living/carbon/human/H = arrived - if(HAS_TRAIT(H, TRAIT_PIERCEIMMUNE)) + var/mob/living/carbon/human/digitigrade_fan = arrived + if(HAS_TRAIT(digitigrade_fan, TRAIT_PIERCEIMMUNE)) return - if((flags & CALTROP_IGNORE_WALKERS) && H.move_intent == MOVE_INTENT_WALK) + if((flags & CALTROP_IGNORE_WALKERS) && digitigrade_fan.move_intent == MOVE_INTENT_WALK) return - if(H.movement_type & (FLOATING|FLYING)) //check if they are able to pass over us + if(digitigrade_fan.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) //check if they are able to pass over us //gravity checking only our parent would prevent us from triggering they're using magboots / other gravity assisting items that would cause them to still touch us. return - if(H.buckled) //if they're buckled to something, that something should be checked instead. + if(digitigrade_fan.buckled) //if they're buckled to something, that something should be checked instead. return - if(H.body_position == LYING_DOWN && !(flags & CALTROP_NOCRAWL)) //if we're not standing we cant step on the caltrop + if(digitigrade_fan.body_position == LYING_DOWN && !(flags & CALTROP_NOCRAWL)) //if we're not standing we cant step on the caltrop return var/picked_def_zone = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) - var/obj/item/bodypart/O = H.get_bodypart(picked_def_zone) - if(!istype(O)) + var/obj/item/bodypart/leg = digitigrade_fan.get_bodypart(picked_def_zone) + if(!istype(leg)) return - if(!IS_ORGANIC_LIMB(O)) + if(!IS_ORGANIC_LIMB(leg)) return if (!(flags & CALTROP_BYPASS_SHOES)) - // SKYRAT EDIT ADDITION BEGIN - Hardened Soles Quirk - if(HAS_TRAIT(H, TRAIT_HARD_SOLES)) + // NOVA EDIT ADDITION BEGIN - Hardened Soles Quirk + if(HAS_TRAIT(digitigrade_fan, TRAIT_HARD_SOLES)) return - // SKYRAT EDIT ADDITION END - if ((H.wear_suit?.body_parts_covered | H.w_uniform?.body_parts_covered | H.shoes?.body_parts_covered) & FEET) + // NOVA EDIT ADDITION END + if ((digitigrade_fan.wear_suit?.body_parts_covered | digitigrade_fan.w_uniform?.body_parts_covered | digitigrade_fan.shoes?.body_parts_covered) & FEET) return var/damage = rand(min_damage, max_damage) - if(HAS_TRAIT(H, TRAIT_LIGHT_STEP)) + if(HAS_TRAIT(digitigrade_fan, TRAIT_LIGHT_STEP)) damage *= 0.75 - if(!(flags & CALTROP_SILENT) && !H.has_status_effect(/datum/status_effect/caltropped)) - H.apply_status_effect(/datum/status_effect/caltropped) - H.visible_message( - span_danger("[H] steps on [parent]."), + if(!(flags & CALTROP_SILENT) && !digitigrade_fan.has_status_effect(/datum/status_effect/caltropped)) + digitigrade_fan.apply_status_effect(/datum/status_effect/caltropped) + digitigrade_fan.visible_message( + span_danger("[digitigrade_fan] steps on [parent]."), span_userdanger("You step on [parent]!") ) - H.apply_damage(damage, BRUTE, picked_def_zone, wound_bonus = CANT_WOUND, attacking_item = parent) + digitigrade_fan.apply_damage(damage, BRUTE, picked_def_zone, wound_bonus = CANT_WOUND, attacking_item = parent) if(!(flags & CALTROP_NOSTUN)) // Won't set off the paralysis. - H.Paralyze(paralyze_duration) - + if(!HAS_TRAIT(digitigrade_fan, TRAIT_LIGHT_STEP)) + digitigrade_fan.Paralyze(paralyze_duration) + else + digitigrade_fan.Knockdown(paralyze_duration) if(!soundfile) return - playsound(H, soundfile, 15, TRUE, -3) + playsound(digitigrade_fan, soundfile, 15, TRUE, -3) /datum/component/caltrop/UnregisterFromParent() if(ismovable(parent)) diff --git a/code/datums/components/can_flash_from_behind.dm b/code/datums/components/can_flash_from_behind.dm new file mode 100644 index 00000000000000..c443d160dfbd30 --- /dev/null +++ b/code/datums/components/can_flash_from_behind.dm @@ -0,0 +1,22 @@ +/// This mob can flash others from behind and still get at least a partial +// Component and not element because elements can't stack. +// I don't want to have a bunch of helpers for that. We need to do this generally +// because this keeps coming up. +/datum/component/can_flash_from_behind + dupe_mode = COMPONENT_DUPE_SOURCES + +/datum/component/can_flash_from_behind/Initialize() + if (!ismob(parent)) + return COMPONENT_INCOMPATIBLE + +/datum/component/can_flash_from_behind/RegisterWithParent() + RegisterSignal(parent, COMSIG_MOB_PRE_FLASHED_CARBON, PROC_REF(on_pre_flashed_carbon)) + +/datum/component/can_flash_from_behind/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_MOB_PRE_FLASHED_CARBON) + +/datum/component/can_flash_from_behind/proc/on_pre_flashed_carbon(source, flashed, flash, deviation) + SIGNAL_HANDLER + + // Always partial flash at the very least + return (deviation == DEVIATION_FULL) ? DEVIATION_OVERRIDE_PARTIAL : NONE diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm index 18420016c543fd..76538bcb31595b 100644 --- a/code/datums/components/chasm.dm +++ b/code/datums/components/chasm.dm @@ -20,6 +20,7 @@ /obj/effect/light_emitter/tendril, /obj/effect/mapping_helpers, /obj/effect/particle_effect/ion_trails, + /obj/effect/particle_effect/sparks, /obj/effect/portal, /obj/effect/projectile, /obj/effect/spectre_of_resurrection, @@ -42,6 +43,7 @@ RegisterSignal(parent, COMSIG_ATOM_ABSTRACT_ENTERED, PROC_REF(entered)) RegisterSignal(parent, COMSIG_ATOM_ABSTRACT_EXITED, PROC_REF(exited)) RegisterSignal(parent, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON, PROC_REF(initialized_on)) + RegisterSignal(parent, COMSIG_ATOM_INTERCEPT_TELEPORTING, PROC_REF(block_teleport)) //allow catwalks to give the turf the CHASM_STOPPED trait before dropping stuff when the turf is changed. //otherwise don't do anything because turfs and areas are initialized before movables. if(!mapload) @@ -63,6 +65,9 @@ SIGNAL_HANDLER drop_stuff(movable) +/datum/component/chasm/proc/block_teleport() + return COMPONENT_BLOCK_TELEPORT + /datum/component/chasm/proc/on_chasm_stopped(datum/source) SIGNAL_HANDLER UnregisterSignal(source, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_EXITED, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON)) @@ -101,7 +106,7 @@ return CHASM_NOT_DROPPING if(is_type_in_typecache(dropped_thing, forbidden_types) || (!isliving(dropped_thing) && !isobj(dropped_thing))) return CHASM_NOT_DROPPING - if(dropped_thing.throwing || (dropped_thing.movement_type & (FLOATING|FLYING))) + if(dropped_thing.throwing || (dropped_thing.movement_type & MOVETYPES_NOT_TOUCHING_GROUND)) return CHASM_REGISTER_SIGNALS //Flies right over the chasm diff --git a/code/datums/components/cleaner.dm b/code/datums/components/cleaner.dm index f63616863a12c2..242ad72071cf58 100644 --- a/code/datums/components/cleaner.dm +++ b/code/datums/components/cleaner.dm @@ -29,7 +29,7 @@ src.pre_clean_callback = pre_clean_callback src.on_cleaned_callback = on_cleaned_callback -/datum/component/cleaner/Destroy(force, silent) +/datum/component/cleaner/Destroy(force) pre_clean_callback = null on_cleaned_callback = null return ..() @@ -120,14 +120,16 @@ cleaning_duration = (cleaning_duration * min(user.mind.get_skill_modifier(/datum/skill/cleaning, SKILL_SPEED_MODIFIER)+skill_duration_modifier_offset, 1)) //do the cleaning + var/clean_succeeded = FALSE if(do_after(user, cleaning_duration, target = target)) + clean_succeeded = TRUE if(clean_target) for(var/obj/effect/decal/cleanable/cleanable_decal in target) //it's important to do this before you wash all of the cleanables off user.mind?.adjust_experience(/datum/skill/cleaning, round(cleanable_decal.beauty / CLEAN_SKILL_BEAUTY_ADJUSTMENT)) if(target.wash(cleaning_strength)) user.mind?.adjust_experience(/datum/skill/cleaning, round(CLEAN_SKILL_GENERIC_WASH_XP)) - on_cleaned_callback?.Invoke(source, target, user) + on_cleaned_callback?.Invoke(source, target, user, clean_succeeded) //remove the cleaning overlay target.cut_overlay(low_bubble) target.cut_overlay(high_bubble) diff --git a/code/datums/components/combo_attacks.dm b/code/datums/components/combo_attacks.dm index 33989e26682ce2..a8dbe423780e9e 100644 --- a/code/datums/components/combo_attacks.dm +++ b/code/datums/components/combo_attacks.dm @@ -32,7 +32,7 @@ src.leniency_time = leniency_time src.can_attack_callback = can_attack_callback -/datum/component/combo_attacks/Destroy(force, silent) +/datum/component/combo_attacks/Destroy(force) can_attack_callback = null return ..() diff --git a/code/datums/components/combustible_flooder.dm b/code/datums/components/combustible_flooder.dm index 2fa7e31695fd7f..5b5c7b61219b43 100644 --- a/code/datums/components/combustible_flooder.dm +++ b/code/datums/components/combustible_flooder.dm @@ -89,4 +89,4 @@ if(tool.get_temperature() >= FIRE_MINIMUM_TEMPERATURE_TO_EXIST) flood(user, tool.get_temperature()) - return COMPONENT_BLOCK_TOOL_ATTACK + return ITEM_INTERACT_BLOCKING diff --git a/code/datums/components/conveyor_movement.dm b/code/datums/components/conveyor_movement.dm index 4439b08e0a7c7d..d8affca3649bf5 100644 --- a/code/datums/components/conveyor_movement.dm +++ b/code/datums/components/conveyor_movement.dm @@ -24,7 +24,7 @@ source.delay = speed //We use the default delay if(living_parent) var/mob/living/moving_mob = parent - if((moving_mob.movement_type & FLYING) && !moving_mob.stat) + if((moving_mob.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) && !moving_mob.stat) return MOVELOOP_SKIP_STEP var/atom/movable/moving_parent = parent if(moving_parent.anchored || !moving_parent.has_gravity()) diff --git a/code/datums/components/cracked.dm b/code/datums/components/cracked.dm index 60264090b31260..4d67a9190ea13b 100644 --- a/code/datums/components/cracked.dm +++ b/code/datums/components/cracked.dm @@ -12,7 +12,7 @@ src.crack_appearances = crack_appearances src.crack_integrity = crack_integrity -/datum/component/cracked/Destroy(force, silent) +/datum/component/cracked/Destroy(force) RemoveCracks(parent, length(applied_cracks)) return ..() diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm index 79f101cb74c1c4..3581bec4b5a193 100644 --- a/code/datums/components/crafting/crafting.dm +++ b/code/datums/components/crafting/crafting.dm @@ -106,6 +106,10 @@ for(var/atom/movable/AM in range(radius_range, a)) if((AM.flags_1 & HOLOGRAM_1) || (blacklist && (AM.type in blacklist))) continue + if(isitem(AM)) + var/obj/item/item = AM + if(item.item_flags & ABSTRACT) //let's not tempt fate, shall we? + continue . += AM /datum/component/personal_crafting/proc/get_surroundings(atom/a, list/blacklist=null) @@ -210,8 +214,13 @@ if(result.atom_storage && recipe.delete_contents) for(var/obj/item/thing in result) qdel(thing) - if (IsEdible(result)) - result.reagents?.clear_reagents() + var/datum/reagents/holder = locate() in parts + if(holder) //transfer reagents from ingredients to result + if(!ispath(recipe.result, /obj/item/reagent_containers) && result.reagents) + result.reagents.clear_reagents() + holder.trans_to(result.reagents, holder.total_volume, no_react = TRUE) + parts -= holder + qdel(holder) result.CheckParts(parts, recipe) if(send_feedback) SSblackbox.record_feedback("tally", "object_crafted", 1, result.type) @@ -244,9 +253,11 @@ */ /datum/component/personal_crafting/proc/del_reqs(datum/crafting_recipe/R, atom/a) + . = list() + + var/datum/reagents/holder var/list/surroundings var/list/Deletion = list() - . = list() var/data var/amt var/list/requirements = list() @@ -264,36 +275,30 @@ surroundings = get_environment(a, R.blacklist) surroundings -= Deletion if(ispath(path_key, /datum/reagent)) - var/datum/reagent/RG = new path_key - var/datum/reagent/RGNT while(amt > 0) var/obj/item/reagent_containers/RC = locate() in surroundings - RG = RC.reagents.get_reagent(path_key) - if(RG) - if(!locate(RG.type) in Deletion) - Deletion += new RG.type() - if(RG.volume > amt) - RG.volume -= amt - data = RG.data - RC.reagents.conditional_update(RC) - RC.update_appearance(UPDATE_ICON) - RG = locate(RG.type) in Deletion - RG.volume = amt - RG.data += data + if(isnull(RC)) //not found + break + if(QDELING(RC)) //deleting so is unusable + surroundings -= RC + continue + + var/reagent_volume = RC.reagents.get_reagent_amount(path_key) + if(reagent_volume) + if(!holder) + holder = new(INFINITY, NO_REACT) //an infinite volume holder than can store reagents without reacting + . += holder + if(reagent_volume >= amt) + RC.reagents.trans_to(holder, amt, target_id = path_key, no_react = TRUE) continue main_loop else + RC.reagents.trans_to(holder, reagent_volume, target_id = path_key, no_react = TRUE) surroundings -= RC - amt -= RG.volume - RC.reagents.reagent_list -= RG - RC.reagents.conditional_update(RC) - RC.update_appearance(UPDATE_ICON) - RGNT = locate(RG.type) in Deletion - RGNT.volume += RG.volume - RGNT.data += RG.data - qdel(RG) + amt -= reagent_volume SEND_SIGNAL(RC.reagents, COMSIG_REAGENTS_CRAFTING_PING) // - [] TODO: Make this entire thing less spaghetti else surroundings -= RC + RC.update_appearance(UPDATE_ICON) else if(ispath(path_key, /obj/item/stack)) var/obj/item/stack/S var/obj/item/stack/SD diff --git a/code/datums/components/crafting/entertainment.dm b/code/datums/components/crafting/entertainment.dm index d01ffbc00dca5b..8b2bfa407315c3 100644 --- a/code/datums/components/crafting/entertainment.dm +++ b/code/datums/components/crafting/entertainment.dm @@ -205,3 +205,12 @@ /obj/item/stack/cable_coil = 2, ) category = CAT_EQUIPMENT + +/datum/crafting_recipe/bonedice + name = "Bone Die" + result = /obj/item/dice/d6/bone + time = 5 SECONDS + reqs = list( + /obj/item/stack/sheet/bone = 1, + ) + category = CAT_EQUIPMENT diff --git a/code/datums/components/crafting/equipment.dm b/code/datums/components/crafting/equipment.dm index e5c66b2ac56c17..4b686fdd8e9d4d 100644 --- a/code/datums/components/crafting/equipment.dm +++ b/code/datums/components/crafting/equipment.dm @@ -48,10 +48,12 @@ /obj/item/stack/rods = 8, /obj/item/stock_parts/servo = 2, /obj/item/stock_parts/capacitor = 1, + /obj/item/stock_parts/cell = 1, ) parts = list( /obj/item/stock_parts/servo = 2, /obj/item/stock_parts/capacitor = 1, + /obj/item/stock_parts/cell = 1, ) tool_behaviors = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WRENCH) time = 20 SECONDS diff --git a/code/datums/components/crafting/guncrafting.dm b/code/datums/components/crafting/guncrafting.dm index a5a20d4326b290..6d4f4713f8bb1f 100644 --- a/code/datums/components/crafting/guncrafting.dm +++ b/code/datums/components/crafting/guncrafting.dm @@ -87,10 +87,6 @@ name = "particle acceleration rifle part kit (lethal)" desc = "The coup de grace of guncrafting. This suitcase contains the highly experimental rig for a particle acceleration rifle. Requires an energy gun, a stabilized flux anomaly and a stabilized gravity anomaly." -/obj/item/weaponcrafting/gunkit/decloner - name = "decloner part kit (lethal)" - desc = "An uttery baffling array of gun parts and technology that somehow turns a laser gun into a decloner. Haircut not included." - /obj/item/weaponcrafting/gunkit/ebow name = "energy crossbow part kit (less lethal)" desc = "Highly illegal weapons refurbishment kit that allows you to turn the standard proto-kinetic accelerator into a near-duplicate energy crossbow. Almost like the real thing!" diff --git a/code/datums/components/crafting/misc.dm b/code/datums/components/crafting/misc.dm index 264ff981565331..1208905e853baf 100644 --- a/code/datums/components/crafting/misc.dm +++ b/code/datums/components/crafting/misc.dm @@ -25,7 +25,7 @@ category = CAT_MISC /datum/crafting_recipe/corporate_paper_slip - name = "Corporate Plastic Card" + name = "Conglomeration Plastic Card" result = /obj/item/paper/paperslip/corporate time = 3 SECONDS reqs = list( diff --git a/code/datums/components/crafting/ranged_weapon.dm b/code/datums/components/crafting/ranged_weapon.dm index 94a943b42c8fd0..ace9f2c7c8b0d2 100644 --- a/code/datums/components/crafting/ranged_weapon.dm +++ b/code/datums/components/crafting/ranged_weapon.dm @@ -19,8 +19,8 @@ time = 4 SECONDS category = CAT_WEAPON_RANGED -/datum/crafting_recipe/reciever - name = "Modular Rifle Reciever" +/datum/crafting_recipe/receiver + name = "Modular Rifle Receiver" tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER, TOOL_SAW) result = /obj/item/weaponcrafting/receiver reqs = list( @@ -140,22 +140,6 @@ ..() blacklist += subtypesof(/obj/item/gun/energy/laser) -/datum/crafting_recipe/decloner - name = "Biological Demolecularisor" - result = /obj/item/gun/energy/decloner - reqs = list( - /obj/item/gun/energy/laser = 1, - /obj/item/weaponcrafting/gunkit/decloner = 1, - /datum/reagent/baldium = 30, - /datum/reagent/toxin/mutagen = 4, - ) - time = 10 SECONDS - category = CAT_WEAPON_RANGED - -/datum/crafting_recipe/decloner/New() - ..() - blacklist += subtypesof(/obj/item/gun/energy/laser) - /datum/crafting_recipe/teslacannon name = "Tesla Cannon" result = /obj/item/gun/energy/tesla_cannon @@ -206,6 +190,36 @@ time = 5 SECONDS category = CAT_WEAPON_RANGED +/datum/crafting_recipe/rebarxbow + name = "Heated Rebar Crossbow" + result = /obj/item/gun/ballistic/rifle/rebarxbow + reqs = list( + /obj/item/stack/rods = 6, + /obj/item/stack/cable_coil = 12, + /obj/item/inducer = 1, + ) + blacklist = list( + /obj/item/inducer/sci, + ) + tool_behaviors = list(TOOL_WELDER) + time = 5 SECONDS + category = CAT_WEAPON_RANGED + +/datum/crafting_recipe/rebarxbowforced + name = "Forced Rebar Crossbow" + desc = "Get an extra shot in your crossbow... for a chance of shooting yourself when you fire it." + result = /obj/item/gun/ballistic/rifle/rebarxbow/forced + reqs = list( + /obj/item/gun/ballistic/rifle/rebarxbow = 1, + ) + blacklist = list( + /obj/item/gun/ballistic/rifle/rebarxbow/forced, + /obj/item/gun/ballistic/rifle/rebarxbow/syndie, + ) + tool_behaviors = list(TOOL_CROWBAR) + time = 1 SECONDS + category = CAT_WEAPON_RANGED + /datum/crafting_recipe/pipegun_prime name = "Regal Pipegun" always_available = FALSE diff --git a/code/datums/components/crafting/robot.dm b/code/datums/components/crafting/robot.dm index 12202cf17f87d7..326c58d50c4c38 100644 --- a/code/datums/components/crafting/robot.dm +++ b/code/datums/components/crafting/robot.dm @@ -3,7 +3,7 @@ result = /mob/living/simple_animal/bot/secbot/ed209 reqs = list( /obj/item/robot_suit = 1, - /obj/item/clothing/head/helmet = 1, + /obj/item/clothing/head/helmet/sec = 1, /obj/item/clothing/suit/armor/vest = 1, /obj/item/bodypart/leg/left/robot = 1, /obj/item/bodypart/leg/right/robot = 1, @@ -32,7 +32,7 @@ /datum/crafting_recipe/cleanbot name = "Cleanbot" - result = /mob/living/simple_animal/bot/cleanbot + result = /mob/living/basic/bot/cleanbot reqs = list( /obj/item/reagent_containers/cup/bucket = 1, /obj/item/assembly/prox_sensor = 1, @@ -56,7 +56,7 @@ /datum/crafting_recipe/medbot name = "Medbot" - result = /mob/living/simple_animal/bot/medbot + result = /mob/living/basic/bot/medbot reqs = list( /obj/item/healthanalyzer = 1, /obj/item/storage/medkit = 1, @@ -71,10 +71,10 @@ category = CAT_ROBOT /datum/crafting_recipe/medbot/on_craft_completion(mob/user, atom/result) - var/mob/living/simple_animal/bot/medbot/bot = result + var/mob/living/basic/bot/medbot/bot = result var/obj/item/storage/medkit/medkit = bot.contents[3] bot.medkit_type = medkit - bot.healthanalyzer = bot.contents[4] + bot.health_analyzer = bot.contents[4] ///if you add a new one don't forget to update /obj/item/storage/medkit/attackby() if (istype(medkit, /obj/item/storage/medkit/fire)) @@ -90,7 +90,7 @@ else if (istype(src, /obj/item/storage/medkit/tactical)) bot.skin = "bezerk" - bot.damagetype_healer = initial(medkit.damagetype_healed) ? initial(medkit.damagetype_healed) : BRUTE + bot.damage_type_healer = initial(medkit.damagetype_healed) ? initial(medkit.damagetype_healed) : BRUTE bot.update_appearance() /datum/crafting_recipe/honkbot @@ -131,7 +131,7 @@ /datum/crafting_recipe/hygienebot name = "Hygienebot" - result = /mob/living/simple_animal/bot/hygienebot + result = /mob/living/basic/bot/hygienebot reqs = list( /obj/item/bot_assembly/hygienebot = 1, /obj/item/stack/ducts = 1, diff --git a/code/datums/components/crafting/slapcrafting.dm b/code/datums/components/crafting/slapcrafting.dm index e08fa3ad6c6abe..a15a8a80b17ddc 100644 --- a/code/datums/components/crafting/slapcrafting.dm +++ b/code/datums/components/crafting/slapcrafting.dm @@ -38,7 +38,7 @@ return src.slapcraft_recipes += slapcraft_recipes -/datum/component/slapcrafting/Destroy(force, silent) +/datum/component/slapcrafting/Destroy(force) UnregisterSignal(parent, list(COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_EXAMINE, COMSIG_ATOM_EXAMINE_MORE)) return ..() diff --git a/code/datums/components/crafting/structures.dm b/code/datums/components/crafting/structures.dm index 2cbe2c353020b2..d98ecab7b14460 100644 --- a/code/datums/components/crafting/structures.dm +++ b/code/datums/components/crafting/structures.dm @@ -62,7 +62,7 @@ category = CAT_STRUCTURE /datum/crafting_recipe/syndicate_uplink_beacon - name = "Syndicate Uplink Beacon" + name = "Symphionia Uplink Beacon" result = /obj/structure/syndicate_uplink_beacon tool_behaviors = list(TOOL_SCREWDRIVER) always_available = FALSE diff --git a/code/datums/components/crafting/tailoring.dm b/code/datums/components/crafting/tailoring.dm index 8cb6ac1459c06c..bb01a4d78dc0f0 100644 --- a/code/datums/components/crafting/tailoring.dm +++ b/code/datums/components/crafting/tailoring.dm @@ -378,3 +378,23 @@ /obj/item/paper = 1, ) category = CAT_CLOTHING + +/datum/crafting_recipe/biohood_sec + name = "security biohood" + result = /obj/item/clothing/head/bio_hood/security + time = 2 SECONDS + reqs = list( + /obj/item/clothing/head/bio_hood/general = 1, + /obj/item/clothing/head/helmet/sec = 1, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/biosuit_sec + name = "security biosuit" + result = /obj/item/clothing/suit/bio_suit/security + time = 2 SECONDS + reqs = list( + /obj/item/clothing/suit/bio_suit/general = 1, + /obj/item/clothing/suit/armor/vest = 1, + ) + category = CAT_CLOTHING diff --git a/code/datums/components/crafting/tools.dm b/code/datums/components/crafting/tools.dm index b7d93f162a5ba9..15cc565d5e0798 100644 --- a/code/datums/components/crafting/tools.dm +++ b/code/datums/components/crafting/tools.dm @@ -14,7 +14,7 @@ reqs = list(/obj/item/grown/log = 5) parts = list(/obj/item/grown/log = 5) blacklist = list(/obj/item/grown/log/steel) - result = /obj/structure/bonfire/player_made // SKYRAT EDIT - Pollution - ORIGINAL: result = /obj/structure/bonfire + result = /obj/structure/bonfire/player_made // NOVA EDIT - Pollution - ORIGINAL: result = /obj/structure/bonfire category = CAT_TOOLS /datum/crafting_recipe/boneshovel diff --git a/code/datums/components/crafting/weapon_ammo.dm b/code/datums/components/crafting/weapon_ammo.dm index 437bfaa2e92029..44b8055b3ff94b 100644 --- a/code/datums/components/crafting/weapon_ammo.dm +++ b/code/datums/components/crafting/weapon_ammo.dm @@ -12,6 +12,17 @@ time = 0.5 SECONDS category = CAT_WEAPON_AMMO +/datum/crafting_recipe/rebarsyndie + name = "jagged iron rod" + result = /obj/item/ammo_casing/rebar/syndie + reqs = list( + /obj/item/stack/rods = 1, + ) + tool_behaviors = list(TOOL_WIRECUTTER) + time = 0.5 SECONDS + always_available = FALSE + category = CAT_WEAPON_AMMO + /datum/crafting_recipe/pulseslug name = "Pulse Slug Shell" result = /obj/item/ammo_casing/shotgun/pulseslug diff --git a/code/datums/components/crank_recharge.dm b/code/datums/components/crank_recharge.dm index 455fa9298f908d..3cee708800846c 100644 --- a/code/datums/components/crank_recharge.dm +++ b/code/datums/components/crank_recharge.dm @@ -54,7 +54,7 @@ is_charging = FALSE return charging_cell.give(charge_amount) - SEND_SIGNAL(parent, COMSIG_UPDATE_AMMO_HUD) // SKYRAT EDIT ADDITION - AMMO COUNT HUD + SEND_SIGNAL(parent, COMSIG_UPDATE_AMMO_HUD) // NOVA EDIT ADDITION - AMMO COUNT HUD source.update_appearance() is_charging = FALSE source.balloon_alert(user, "charged") diff --git a/code/datums/components/crate_carrier.dm b/code/datums/components/crate_carrier.dm index a36128b89e1ee3..9f2f1ac9daeced 100644 --- a/code/datums/components/crate_carrier.dm +++ b/code/datums/components/crate_carrier.dm @@ -23,7 +23,7 @@ var/static/default_cache = typecacheof(list(/obj/structure/closet/crate)) src.carriable_cache = default_cache -/datum/component/crate_carrier/Destroy(force, silent) +/datum/component/crate_carrier/Destroy(force) LAZYCLEARLIST(crates_in_hand) return ..() diff --git a/code/datums/components/cult_ritual_item.dm b/code/datums/components/cult_ritual_item.dm index 6d098ecc44e3a4..c3acb0b9467f00 100644 --- a/code/datums/components/cult_ritual_item.dm +++ b/code/datums/components/cult_ritual_item.dm @@ -39,7 +39,7 @@ var/datum/action/added_action = item_parent.add_item_action(action) linked_action_ref = WEAKREF(added_action) -/datum/component/cult_ritual_item/Destroy(force, silent) +/datum/component/cult_ritual_item/Destroy(force) cleanup_shields() QDEL_NULL(linked_action_ref) return ..() @@ -368,11 +368,21 @@ if(!check_if_in_ritual_site(cultist, cult_team)) return FALSE var/area/summon_location = get_area(cultist) - priority_announce("Figments from an eldritch god are being summoned by [cultist.real_name] into [summon_location.get_original_area_name()] from an unknown dimension. Disrupt the ritual at all costs!", "Central Command Higher Dimensional Affairs", sound = 'sound/ambience/antag/bloodcult/bloodcult_scribe.ogg', has_important_message = TRUE) + priority_announce( + text = "Figments from an eldritch god are being summoned by [cultist.real_name] into [summon_location.get_original_area_name()] from an unknown dimension. Disrupt the ritual at all costs!", + sound = 'sound/ambience/antag/bloodcult/bloodcult_scribe.ogg', + sender_override = "[command_name()] Higher Dimensional Affairs", + has_important_message = TRUE, + ) for(var/shielded_turf in spiral_range_turfs(1, cultist, 1)) LAZYADD(shields, new /obj/structure/emergency_shield/cult/narsie(shielded_turf)) - notify_ghosts("[cultist] has begun scribing a Nar'Sie rune!", source = cultist, action = NOTIFY_ORBIT, header = "Maranax Infirmux!") + notify_ghosts( + "[cultist] has begun scribing a Nar'Sie rune!", + source = cultist, + header = "Maranax Infirmux!", + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) return TRUE diff --git a/code/datums/components/customizable_reagent_holder.dm b/code/datums/components/customizable_reagent_holder.dm index 36c84fc94afd3f..7bffb3d9ada4e1 100644 --- a/code/datums/components/customizable_reagent_holder.dm +++ b/code/datums/components/customizable_reagent_holder.dm @@ -55,7 +55,7 @@ handle_fill(ingredient) -/datum/component/customizable_reagent_holder/Destroy(force, silent) +/datum/component/customizable_reagent_holder/Destroy(force) QDEL_NULL(top_overlay) return ..() diff --git a/code/datums/components/damage_aura.dm b/code/datums/components/damage_aura.dm index 6eec1903eefc85..b4c535cb52d429 100644 --- a/code/datums/components/damage_aura.dm +++ b/code/datums/components/damage_aura.dm @@ -24,9 +24,6 @@ /// Stamina damage to damage over a second var/stamina_damage = 0 - /// Amount of cloning damage to damage over a second - var/clone_damage = 0 - /// Amount of blood to damage over a second var/blood_damage = 0 @@ -53,7 +50,6 @@ toxin_damage = 0, suffocation_damage = 0, stamina_damage = 0, - clone_damage = 0, blood_damage = 0, organ_damage = null, simple_damage = 0, @@ -72,14 +68,13 @@ src.toxin_damage = toxin_damage src.suffocation_damage = suffocation_damage src.stamina_damage = stamina_damage - src.clone_damage = clone_damage src.blood_damage = blood_damage src.organ_damage = organ_damage src.simple_damage = simple_damage src.immune_factions = immune_factions src.current_owner = WEAKREF(current_owner) -/datum/component/damage_aura/Destroy(force, silent) +/datum/component/damage_aura/Destroy(force) STOP_PROCESSING(SSobj, src) return ..() @@ -125,7 +120,6 @@ candidate.adjustToxLoss(toxin_damage * seconds_per_tick, updating_health = FALSE) candidate.adjustOxyLoss(suffocation_damage * seconds_per_tick, updating_health = FALSE) candidate.adjustStaminaLoss(stamina_damage * seconds_per_tick, updating_stamina = FALSE) - candidate.adjustCloneLoss(clone_damage * seconds_per_tick, updating_health = FALSE) for (var/organ in organ_damage) candidate.adjustOrganLoss(organ, organ_damage[organ] * seconds_per_tick) diff --git a/code/datums/components/damage_chain.dm b/code/datums/components/damage_chain.dm new file mode 100644 index 00000000000000..9b24a4c2baee91 --- /dev/null +++ b/code/datums/components/damage_chain.dm @@ -0,0 +1,112 @@ +/** + * Draws a line between you and another atom, hurt anyone stood in the line + */ +/datum/component/damage_chain + dupe_mode = COMPONENT_DUPE_ALLOWED + /// How often do we attempt to deal damage? + var/tick_interval + /// Tracks when we can next deal damage + COOLDOWN_DECLARE(tick_cooldown) + /// Damage inflicted per tick + var/damage_per_tick + /// Type of damage to inflict + var/damage_type + /// Optional callback which checks if we can damage the target + var/datum/callback/validate_target + /// Optional callback for additional visuals or text display when dealing damage + var/datum/callback/chain_damage_feedback + /// We will fire the damage feedback callback on every x successful attacks + var/feedback_interval + /// How many successful attacks have we made? + var/successful_attacks = 0 + /// Time between making any attacks at which we just reset the successful attack counter + var/reset_feedback_timer = 0 + /// Our chain + var/datum/beam/chain + +/datum/component/damage_chain/Initialize( + atom/linked_to, + max_distance = 7, + beam_icon = 'icons/effects/beam.dmi', + beam_state = "medbeam", + beam_type = /obj/effect/ebeam, + tick_interval = 0.3 SECONDS, + damage_per_tick = 1.2, + damage_type = BURN, + datum/callback/validate_target = null, + datum/callback/chain_damage_feedback = null, + feedback_interval = 5, +) + . = ..() + if (!isatom(parent)) + return COMPONENT_INCOMPATIBLE + if (!isatom(linked_to)) + CRASH("Attempted to create [type] linking [parent.type] with non-atom [linked_to]!") + + src.tick_interval = tick_interval + src.damage_per_tick = damage_per_tick + src.damage_type = damage_type + src.validate_target = validate_target + src.chain_damage_feedback = chain_damage_feedback + src.feedback_interval = feedback_interval + + var/atom/atom_parent = parent + chain = atom_parent.Beam(linked_to, icon = beam_icon, icon_state = beam_state, beam_type = beam_type, maxdistance = max_distance) + RegisterSignal(chain, COMSIG_QDELETING, PROC_REF(end_beam)) + START_PROCESSING(SSfastprocess, src) + +/datum/component/damage_chain/RegisterWithParent() + RegisterSignal(parent, COMSIG_LIVING_DEATH, PROC_REF(end_beam)) // We actually don't really use many signals it's all processing + +/datum/component/damage_chain/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_LIVING_DEATH) + +/datum/component/damage_chain/Destroy(force) + if (!QDELETED(chain)) + UnregisterSignal(chain, COMSIG_QDELETING) + QDEL_NULL(chain) + chain = null + STOP_PROCESSING(SSfastprocess, src) + return ..() + +/// Destroy ourself +/datum/component/damage_chain/proc/end_beam() + SIGNAL_HANDLER + qdel(src) + +/datum/component/damage_chain/process(seconds_per_tick) + var/successful_hit = FALSE + var/list/target_turfs = list() + for(var/obj/effect/ebeam/chainpart in chain.elements) + if (isnull(chainpart) || !chainpart.x || !chainpart.y || !chainpart.z) + continue + var/turf/overlaps = get_turf_pixel(chainpart) + target_turfs |= overlaps + if(overlaps == get_turf(chain.origin) || overlaps == get_turf(chain.target)) + continue + for(var/turf/nearby_turf in circle_range(overlaps, 1)) + target_turfs |= nearby_turf + + for(var/turf/hit_turf as anything in target_turfs) + for(var/mob/living/victim in hit_turf) + if (victim == parent || victim.stat == DEAD) + continue + if (!isnull(validate_target) && !validate_target.Invoke(victim)) + continue + if (successful_attacks == 0) + chain_damage_feedback?.Invoke(victim) + victim.apply_damage(damage_per_tick, damage_type, wound_bonus = CANT_WOUND) + successful_hit = TRUE + + if (isnull(chain_damage_feedback)) + return + if (successful_hit) + successful_attacks++ + reset_feedback_timer = addtimer(CALLBACK(src, PROC_REF(reset_feedback)), 10 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE|TIMER_DELETE_ME) + if (successful_attacks > feedback_interval) + reset_feedback() + +/// Make it so that the next time we hit something we'll invoke the feedback callback +/datum/component/damage_chain/proc/reset_feedback() + successful_attacks = 0 + deltimer(reset_feedback_timer) diff --git a/code/datums/components/dart_insert.dm b/code/datums/components/dart_insert.dm new file mode 100644 index 00000000000000..19eea67ab3a8db --- /dev/null +++ b/code/datums/components/dart_insert.dm @@ -0,0 +1,163 @@ +/** + * Component for allowing items to be inserted into foam darts. + * The parent can register signal handlers for `COMSIG_DART_INSERT_ADDED`, + * `COMSIG_DART_INSERT_REMOVED` to define custom behavior for when the item + * is added to/removed from a dart, and `COMSIG_DART_INSERT_GET_VAR_MODIFIERS` + * to define the modifications the item makes to the vars of the fired projectile. + */ +/datum/component/dart_insert + /// List for tracking the modifications this component has made to the vars of the containing projectile + var/list/var_modifiers + /// A reference to the ammo casing this component's parent was inserted into + var/obj/item/ammo_casing/holder_casing + /// A reference to the projectile this component's parent was inserted into + var/obj/projectile/holder_projectile + /// The icon file used for the overlay applied over the containing ammo casing + var/casing_overlay_icon + /// The icon state used for the overlay applied over the containing ammo casing + var/casing_overlay_icon_state + /// The icon file used for the overlay applied over the containing projectile + var/projectile_overlay_icon + /// The icon state used for the overlay applied over the containing projectile + var/projectile_overlay_icon_state + /// Optional callback to invoke when acquiring projectile var modifiers + var/datum/callback/modifier_getter + +/datum/component/dart_insert/Initialize(_casing_overlay_icon, _casing_overlay_icon_state, _projectile_overlay_icon, _projectile_overlay_icon_state, datum/callback/_modifier_getter) + if(!isitem(parent)) + return COMPONENT_INCOMPATIBLE + casing_overlay_icon = _casing_overlay_icon + casing_overlay_icon_state = _casing_overlay_icon_state + projectile_overlay_icon = _projectile_overlay_icon + projectile_overlay_icon_state = _projectile_overlay_icon_state + modifier_getter = _modifier_getter + +/datum/component/dart_insert/RegisterWithParent() + . = ..() + RegisterSignal(parent, COMSIG_ITEM_PRE_ATTACK, PROC_REF(on_preattack)) + RegisterSignal(parent, COMSIG_OBJ_RESKIN, PROC_REF(on_reskin)) + +/datum/component/dart_insert/UnregisterFromParent() + . = ..() + var/obj/item/parent_item = parent + var/parent_loc = parent_item.loc + if(parent_loc && (parent_loc == holder_casing || parent_loc == holder_projectile)) + parent_item.forceMove(get_turf(parent_item)) + remove_from_dart(holder_casing, holder_projectile) + UnregisterSignal(parent, COMSIG_ITEM_PRE_ATTACK) + +/datum/component/dart_insert/proc/on_preattack(datum/source, atom/target, mob/user, params) + SIGNAL_HANDLER + var/obj/item/ammo_casing/foam_dart/dart = target + if(!istype(dart)) + return + if(!dart.modified) + to_chat(user, span_warning("The safety cap prevents you from inserting [parent] into [dart].")) + return COMPONENT_CANCEL_ATTACK_CHAIN + if(HAS_TRAIT(dart, TRAIT_DART_HAS_INSERT)) + to_chat(user, span_warning("There's already something in [dart].")) + return COMPONENT_CANCEL_ATTACK_CHAIN + add_to_dart(dart, user) + return COMPONENT_CANCEL_ATTACK_CHAIN + +/datum/component/dart_insert/proc/on_reskin(datum/source, mob/user, skin) + SIGNAL_HANDLER + SEND_SIGNAL(parent, COMSIG_DART_INSERT_PARENT_RESKINNED) + +/datum/component/dart_insert/proc/add_to_dart(obj/item/ammo_casing/dart, mob/user) + var/obj/projectile/dart_projectile = dart.loaded_projectile + var/obj/item/parent_item = parent + if(user) + if(!user.transferItemToLoc(parent_item, dart_projectile)) + return + to_chat(user, span_notice("You insert [parent_item] into [dart].")) + else + parent_item.forceMove(dart_projectile) + ADD_TRAIT(dart, TRAIT_DART_HAS_INSERT, REF(src)) + RegisterSignal(dart, COMSIG_ITEM_ATTACK_SELF, PROC_REF(on_dart_attack_self)) + RegisterSignal(dart, COMSIG_ATOM_EXAMINE_MORE, PROC_REF(on_dart_examine_more)) + RegisterSignals(parent, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED), PROC_REF(on_leave_dart)) + RegisterSignal(dart, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_casing_update_overlays)) + RegisterSignal(dart_projectile, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_projectile_update_overlays)) + RegisterSignals(dart_projectile, list(COMSIG_PROJECTILE_ON_SPAWN_DROP, COMSIG_PROJECTILE_ON_SPAWN_EMBEDDED), PROC_REF(on_spawn_drop)) + apply_var_modifiers(dart_projectile) + dart.harmful = dart_projectile.damage > 0 || dart_projectile.wound_bonus > 0 || dart_projectile.bare_wound_bonus > 0 + SEND_SIGNAL(parent, COMSIG_DART_INSERT_ADDED, dart) + dart.update_appearance() + dart_projectile.update_appearance() + holder_casing = dart + holder_projectile = dart_projectile + +/datum/component/dart_insert/proc/remove_from_dart(obj/item/ammo_casing/dart, obj/projectile/projectile, mob/user) + holder_casing = null + holder_projectile = null + if(istype(dart)) + UnregisterSignal(dart, list(COMSIG_ITEM_ATTACK_SELF, COMSIG_ATOM_EXAMINE_MORE, COMSIG_ATOM_UPDATE_OVERLAYS)) + REMOVE_TRAIT(dart, TRAIT_DART_HAS_INSERT, REF(src)) + dart.update_appearance() + if(istype(projectile)) + remove_var_modifiers(projectile) + UnregisterSignal(projectile, list(COMSIG_PROJECTILE_ON_SPAWN_DROP, COMSIG_PROJECTILE_ON_SPAWN_EMBEDDED, COMSIG_ATOM_UPDATE_OVERLAYS)) + if(dart?.loaded_projectile == projectile) + dart.harmful = projectile.damage > 0 || projectile.wound_bonus > 0 || projectile.bare_wound_bonus > 0 + projectile.update_appearance() + SEND_SIGNAL(parent, COMSIG_DART_INSERT_REMOVED, dart, projectile, user) + UnregisterSignal(parent, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED)) + if(user) + INVOKE_ASYNC(user, TYPE_PROC_REF(/mob, put_in_hands), parent) + to_chat(user, span_notice("You remove [parent] from [dart].")) + +/datum/component/dart_insert/proc/on_dart_attack_self(datum/source, mob/user) + SIGNAL_HANDLER + remove_from_dart(holder_casing, holder_projectile, user) + +/datum/component/dart_insert/proc/on_dart_examine_more(datum/source, mob/user, list/examine_list) + var/obj/item/parent_item = parent + examine_list += span_notice("You can see a [parent_item.name] inserted into it.") + +/datum/component/dart_insert/proc/on_leave_dart() + SIGNAL_HANDLER + remove_from_dart(holder_casing, holder_projectile) + +/datum/component/dart_insert/proc/on_spawn_drop(datum/source, obj/item/ammo_casing/new_casing) + SIGNAL_HANDLER + UnregisterSignal(parent, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED)) + add_to_dart(new_casing) + +/datum/component/dart_insert/proc/on_casing_update_overlays(datum/source, list/new_overlays) + SIGNAL_HANDLER + new_overlays += mutable_appearance(casing_overlay_icon, casing_overlay_icon_state) + +/datum/component/dart_insert/proc/on_projectile_update_overlays(datum/source, list/new_overlays) + SIGNAL_HANDLER + new_overlays += mutable_appearance(projectile_overlay_icon, projectile_overlay_icon_state) + +/datum/component/dart_insert/proc/apply_var_modifiers(obj/projectile/projectile) + var_modifiers = istype(modifier_getter) ? modifier_getter.Invoke() : list() + projectile.damage += var_modifiers["damage"] + if(var_modifiers["speed"]) + var_modifiers["speed"] = reciprocal_add(projectile.speed, var_modifiers["speed"]) - projectile.speed + projectile.speed += var_modifiers["speed"] + projectile.armour_penetration += var_modifiers["armour_penetration"] + projectile.wound_bonus += var_modifiers["wound_bonus"] + projectile.bare_wound_bonus += var_modifiers["bare_wound_bonus"] + projectile.demolition_mod += var_modifiers["demolition_mod"] + if(islist(var_modifiers["embedding"])) + var/list/embed_params = var_modifiers["embedding"] + for(var/embed_param in embed_params - "ignore_throwspeed_threshold") + LAZYADDASSOC(projectile.embedding, embed_param, embed_params[embed_param]) + projectile.updateEmbedding() + +/datum/component/dart_insert/proc/remove_var_modifiers(obj/projectile/projectile) + projectile.damage -= var_modifiers["damage"] + projectile.speed -= var_modifiers["speed"] + projectile.armour_penetration -= var_modifiers["armour_penetration"] + projectile.wound_bonus -= var_modifiers["wound_bonus"] + projectile.bare_wound_bonus -= var_modifiers["bare_wound_bonus"] + projectile.demolition_mod -= var_modifiers["demolition_mod"] + if(islist(var_modifiers["embedding"])) + var/list/embed_params = var_modifiers["embedding"] + for(var/embed_param in embed_params - "ignore_throwspeed_threshold") + LAZYADDASSOC(projectile.embedding, embed_param, -embed_params[embed_param]) + projectile.updateEmbedding() + var_modifiers.Cut() diff --git a/code/datums/components/deadchat_control.dm b/code/datums/components/deadchat_control.dm index 48096e47670645..7517f35ff297b5 100644 --- a/code/datums/components/deadchat_control.dm +++ b/code/datums/components/deadchat_control.dm @@ -39,12 +39,16 @@ if(deadchat_mode & ANARCHY_MODE) // Choose one, please. stack_trace("deadchat_control component added to [parent.type] with both democracy and anarchy modes enabled.") timerid = addtimer(CALLBACK(src, PROC_REF(democracy_loop)), input_cooldown, TIMER_STOPPABLE | TIMER_LOOP) - notify_ghosts("[parent] is now deadchat controllable!", source = parent, action = NOTIFY_ORBIT, header="Something Interesting!") + notify_ghosts( + "[parent] is now deadchat controllable!", + source = parent, + header = "Ghost Possession!", + ) if(!ismob(parent) && !SSpoints_of_interest.is_valid_poi(parent)) SSpoints_of_interest.make_point_of_interest(parent) generated_point_of_interest = TRUE -/datum/component/deadchat_control/Destroy(force, silent) +/datum/component/deadchat_control/Destroy(force) on_removal?.Invoke() inputs = null orbiters = null diff --git a/code/datums/components/dejavu.dm b/code/datums/components/dejavu.dm index fd28466bfb7b6c..c7b3e3f2ff55bc 100644 --- a/code/datums/components/dejavu.dm +++ b/code/datums/components/dejavu.dm @@ -17,8 +17,6 @@ /// How long to wait between each rewind var/rewind_interval - /// The starting value of clone loss at the beginning of the effect - var/clone_loss = 0 /// The starting value of toxin loss at the beginning of the effect var/tox_loss = 0 /// The starting value of oxygen loss at the beginning of the effect @@ -46,7 +44,6 @@ if(isliving(parent)) var/mob/living/L = parent - clone_loss = L.getCloneLoss() tox_loss = L.getToxLoss() oxy_loss = L.getOxyLoss() stamina_loss = L.getStaminaLoss() @@ -96,7 +93,6 @@ /datum/component/dejavu/proc/rewind_living() var/mob/living/master = parent - master.setCloneLoss(clone_loss) master.setToxLoss(tox_loss) master.setOxyLoss(oxy_loss) master.setStaminaLoss(stamina_loss) diff --git a/code/datums/components/deployable.dm b/code/datums/components/deployable.dm index 14fc6747bd6dd8..f45a5b226c39dd 100644 --- a/code/datums/components/deployable.dm +++ b/code/datums/components/deployable.dm @@ -76,10 +76,8 @@ new_direction = direction deployed_object = new thing_to_be_deployed(deploy_location) - deployed_object.setDir(new_direction) - - // Sets the direction of the resulting object if the variable says to if(direction_setting) + deployed_object.setDir(new_direction) deployed_object.update_icon_state() deployments -= 1 diff --git a/code/datums/components/direct_explosive_trap.dm b/code/datums/components/direct_explosive_trap.dm new file mode 100644 index 00000000000000..e3a125eb928ed3 --- /dev/null +++ b/code/datums/components/direct_explosive_trap.dm @@ -0,0 +1,85 @@ +/** + * Responds to certain signals and 'explodes' on the person using the item. + * Differs from `interaction_booby_trap` in that this doesn't actually explode, it just directly calls ex_act on one person. + */ +/datum/component/direct_explosive_trap + /// An optional mob to inform about explosions + var/mob/living/saboteur + /// Amount of force to apply + var/explosive_force + /// Colour for examine notification + var/glow_colour + /// Optional additional target checks before we go off + var/datum/callback/explosive_checks + /// Signals which set off the bomb, must pass a mob as the first non-source argument + var/list/triggering_signals + +/datum/component/direct_explosive_trap/Initialize( + mob/living/saboteur, + explosive_force = EXPLODE_HEAVY, + expire_time = 1 MINUTES, + glow_colour = COLOR_RED, + datum/callback/explosive_checks, + list/triggering_signals = list(COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_BUMPED) +) + . = ..() + if (!isatom(parent)) + return COMPONENT_INCOMPATIBLE + src.saboteur = saboteur + src.explosive_force = explosive_force + src.glow_colour = glow_colour + src.explosive_checks = explosive_checks + src.triggering_signals = triggering_signals + + if (expire_time > 0) + addtimer(CALLBACK(src, PROC_REF(bomb_expired)), expire_time, TIMER_DELETE_ME) + +/datum/component/direct_explosive_trap/RegisterWithParent() + if (!(COMSIG_ATOM_EXAMINE in triggering_signals)) // Maybe you're being extra mean with this one + RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examined)) + RegisterSignals(parent, triggering_signals, PROC_REF(explode)) + if (!isnull(saboteur)) + RegisterSignal(saboteur, COMSIG_QDELETING, PROC_REF(on_bomber_deleted)) + +/datum/component/direct_explosive_trap/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_ATOM_EXAMINE) + triggering_signals) + if (!isnull(saboteur)) + UnregisterSignal(saboteur, COMSIG_QDELETING) + +/datum/component/direct_explosive_trap/Destroy(force) + if (isnull(saboteur)) + return ..() + UnregisterSignal(saboteur, COMSIG_QDELETING) + saboteur = null + return ..() + +/// Called if we sit too long without going off +/datum/component/direct_explosive_trap/proc/bomb_expired() + if (!isnull(saboteur)) + to_chat(saboteur, span_bolddanger("Failure! Your trap didn't catch anyone this time...")) + qdel(src) + +/// Let people know something is up +/datum/component/direct_explosive_trap/proc/on_examined(datum/source, mob/user, text) + SIGNAL_HANDLER + text += span_holoparasite("It glows with a strange light...") + +/// Blow up +/datum/component/direct_explosive_trap/proc/explode(atom/source, mob/living/victim) + SIGNAL_HANDLER + if (!isliving(victim)) + return + if (!isnull(explosive_checks) && !explosive_checks.Invoke(victim)) + return + to_chat(victim, span_bolddanger("[source] was boobytrapped!")) + if (!isnull(saboteur)) + to_chat(saboteur, span_bolddanger("Success! Your trap on [source] caught [victim.name]!")) + playsound(source, 'sound/effects/explosion2.ogg', 200, TRUE) + new /obj/effect/temp_visual/explosion(get_turf(source)) + EX_ACT(victim, explosive_force) + qdel(src) + +/// Don't hang a reference to the person who placed the bomb +/datum/component/direct_explosive_trap/proc/on_bomber_deleted() + SIGNAL_HANDLER + saboteur = null diff --git a/code/datums/components/drift.dm b/code/datums/components/drift.dm index e974a3465ff1b6..6b91a83534fb35 100644 --- a/code/datums/components/drift.dm +++ b/code/datums/components/drift.dm @@ -34,7 +34,7 @@ RegisterSignal(drifting_loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(after_move)) RegisterSignal(drifting_loop, COMSIG_QDELETING, PROC_REF(loop_death)) RegisterSignal(movable_parent, COMSIG_MOVABLE_NEWTONIAN_MOVE, PROC_REF(newtonian_impulse)) - if(drifting_loop.running) + if(drifting_loop.status & MOVELOOP_STATUS_RUNNING) drifting_start(drifting_loop) // There's a good chance it'll autostart, gotta catch that var/visual_delay = movable_parent.inertia_move_delay diff --git a/code/datums/components/echolocation.dm b/code/datums/components/echolocation.dm index 63891a160fac12..5e4f7528415d79 100644 --- a/code/datums/components/echolocation.dm +++ b/code/datums/components/echolocation.dm @@ -2,7 +2,7 @@ /// Radius of our view. var/echo_range = 4 /// Time between echolocations. - var/cooldown_time = 2 SECONDS + var/cooldown_time = 1.8 SECONDS /// Time for the image to start fading out. var/image_expiry_time = 1.5 SECONDS /// Time for the image to fade in. @@ -17,9 +17,7 @@ var/blocking_trait /// Ref of the client color we give to the echolocator. var/client_color - /// Associative list of world.time when created to a list of the images. - var/list/images = list() - /// Associative list of world.time when created to a list of receivers. + /// Associative list of receivers to lists of atoms they are rendering (those atoms are associated to data of the image and time they were rendered at). var/list/receivers = list() /// All the saved appearances, keyed by icon-icon_state. var/static/list/saved_appearances = list() @@ -30,7 +28,7 @@ /// A matrix that turns everything except #ffffff into pure blackness, used for our images (the outlines are #ffffff). var/static/list/black_white_matrix = list(85, 85, 85, 0, 85, 85, 85, 0, 85, 85, 85, 0, 0, 0, 0, 1, -254, -254, -254, 0) /// A matrix that turns everything into pure white. - var/static/list/white_matrix = list(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 1, 0, -0, 0, 0) + var/static/list/white_matrix = list(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 0) /// Cooldown for the echolocation. COOLDOWN_DECLARE(cooldown_last) @@ -65,15 +63,19 @@ echolocator.overlay_fullscreen("echo", /atom/movable/screen/fullscreen/echo, echo_icon) START_PROCESSING(SSfastprocess, src) -/datum/component/echolocation/Destroy(force, silent) +/datum/component/echolocation/Destroy(force) STOP_PROCESSING(SSfastprocess, src) var/mob/living/echolocator = parent QDEL_NULL(client_color) echolocator.remove_traits(list(TRAIT_ECHOLOCATION_RECEIVER, TRAIT_TRUE_NIGHT_VISION), echo_group) echolocator.cure_blind(ECHOLOCATION_TRAIT) echolocator.clear_fullscreen("echo") - for(var/timeframe in images) - delete_images(timeframe) + for(var/mob/living/echolocate_receiver as anything in receivers) + if(!echolocate_receiver.client) + continue + for(var/atom/rendered_atom as anything in receivers[echolocate_receiver]) + echolocate_receiver.client.images -= receivers[echolocate_receiver][rendered_atom]["image"] + receivers -= list(echolocate_receiver) return ..() /datum/component/echolocation/process() @@ -100,13 +102,11 @@ if(!length(filtered)) return var/current_time = "[world.time]" - images[current_time] = list() - receivers[current_time] = list() for(var/mob/living/viewer in filtered) if(blocking_trait && HAS_TRAIT(viewer, blocking_trait)) continue if(HAS_TRAIT_FROM(viewer, TRAIT_ECHOLOCATION_RECEIVER, echo_group)) - receivers[current_time] += viewer + receivers[viewer] = list() for(var/atom/filtered_atom as anything in filtered) show_image(saved_appearances["[filtered_atom.icon]-[filtered_atom.icon_state]"] || generate_appearance(filtered_atom), filtered_atom, current_time) addtimer(CALLBACK(src, PROC_REF(fade_images), current_time), image_expiry_time) @@ -123,13 +123,20 @@ final_image.pixel_y = input.pixel_y if(HAS_TRAIT_FROM(input, TRAIT_ECHOLOCATION_RECEIVER, echo_group)) //mark other echolocation with full white final_image.color = white_matrix - images[current_time] += final_image - for(var/mob/living/echolocate_receiver as anything in receivers[current_time]) + var/list/fade_ins = list(final_image) + for(var/mob/living/echolocate_receiver as anything in receivers) if(echolocate_receiver == input) continue - if(echolocate_receiver.client) - echolocate_receiver.client.images += final_image - animate(final_image, alpha = 255, time = fade_in_time) + if(receivers[echolocate_receiver][input]) + var/previous_image = receivers[echolocate_receiver][input]["image"] + fade_ins |= previous_image + receivers[echolocate_receiver][input] = list("image" = previous_image, "time" = current_time) + else + if(echolocate_receiver.client) + echolocate_receiver.client.images += final_image + receivers[echolocate_receiver][input] = list("image" = final_image, "time" = current_time) + for(var/image_echo in fade_ins) + animate(image_echo, alpha = 255, time = fade_in_time) /datum/component/echolocation/proc/generate_appearance(atom/input) var/use_outline = TRUE @@ -137,7 +144,6 @@ copied_appearance.appearance = input if(istype(input, /obj/machinery/door/airlock)) //i hate you copied_appearance.cut_overlays() - copied_appearance.icon = 'icons/obj/doors/airlocks/station/public.dmi' copied_appearance.icon_state = "closed" else if(danger_turfs[input.type]) copied_appearance.icon = 'icons/turf/floors.dmi' @@ -155,18 +161,22 @@ return copied_appearance /datum/component/echolocation/proc/fade_images(from_when) - for(var/image_echo in images[from_when]) + var/fade_outs = list() + for(var/mob/living/echolocate_receiver as anything in receivers) + for(var/atom/rendered_atom as anything in receivers[echolocate_receiver]) + if(receivers[echolocate_receiver][rendered_atom]["time"] <= from_when) + fade_outs |= receivers[echolocate_receiver][rendered_atom]["image"] + for(var/image_echo in fade_outs) animate(image_echo, alpha = 0, time = fade_out_time) addtimer(CALLBACK(src, PROC_REF(delete_images), from_when), fade_out_time) /datum/component/echolocation/proc/delete_images(from_when) - for(var/mob/living/echolocate_receiver as anything in receivers[from_when]) - if(!echolocate_receiver.client) - continue - for(var/image_echo in images[from_when]) - echolocate_receiver.client.images -= image_echo - images -= from_when - receivers -= from_when + for(var/mob/living/echolocate_receiver as anything in receivers) + for(var/atom/rendered_atom as anything in receivers[echolocate_receiver]) + if(receivers[echolocate_receiver][rendered_atom]["time"] <= from_when && echolocate_receiver.client) + echolocate_receiver.client.images -= receivers[echolocate_receiver][rendered_atom]["image"] + if(!length(receivers[echolocate_receiver])) + receivers -= echolocate_receiver /atom/movable/screen/fullscreen/echo icon_state = "echo" diff --git a/code/datums/components/effect_remover.dm b/code/datums/components/effect_remover.dm index 7f1f437eddfc2b..a02be73f5684e0 100644 --- a/code/datums/components/effect_remover.dm +++ b/code/datums/components/effect_remover.dm @@ -41,7 +41,7 @@ src.effects_we_clear = typecacheof(effects_we_clear) src.time_to_remove = time_to_remove -/datum/component/effect_remover/Destroy(force, silent) +/datum/component/effect_remover/Destroy(force) on_clear_callback = null return ..() diff --git a/code/datums/components/egg_layer.dm b/code/datums/components/egg_layer.dm index a1e137de6d3230..3092829fd131ec 100644 --- a/code/datums/components/egg_layer.dm +++ b/code/datums/components/egg_layer.dm @@ -47,7 +47,7 @@ . = ..() UnregisterSignal(parent, COMSIG_ATOM_ATTACKBY) -/datum/component/egg_layer/Destroy(force, silent) +/datum/component/egg_layer/Destroy(force) . = ..() STOP_PROCESSING(SSobj, src) egg_laid_callback = null diff --git a/code/datums/components/embedded.dm b/code/datums/components/embedded.dm index f4d7b5d7369c80..b62121d30d0735 100644 --- a/code/datums/components/embedded.dm +++ b/code/datums/components/embedded.dm @@ -228,6 +228,7 @@ limb._unembed_object(weapon) UnregisterSignal(weapon, list(COMSIG_MOVABLE_MOVED, COMSIG_QDELETING)) // have to do it here otherwise we trigger weaponDeleted() + SEND_SIGNAL(weapon, COMSIG_ITEM_UNEMBEDDED, victim) if(!weapon.unembedded()) // if it hasn't deleted itself due to drop del UnregisterSignal(weapon, list(COMSIG_MOVABLE_MOVED, COMSIG_QDELETING)) if(to_hands) diff --git a/code/datums/components/energized.dm b/code/datums/components/energized.dm index 64adeb5e9be6b5..d637bc2eb767ad 100644 --- a/code/datums/components/energized.dm +++ b/code/datums/components/energized.dm @@ -1,3 +1,6 @@ +#define NORMAL_TOAST_PROB 3 +#define BROKEN_TOAST_PROB 33 + /datum/component/energized can_transfer = FALSE ///what we give to connect_loc by default, makes slippable mobs moving over us slip @@ -48,24 +51,14 @@ /datum/component/energized/proc/toast(turf/open/floor/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) SIGNAL_HANDLER - if(!source.broken && !source.burnt) - return - if(!isliving(arrived)) return - if(prob(85)) - if(prob(25)) - do_sparks(1, FALSE, source) - playsound(src, SFX_SPARKS, 40, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - source.audible_message(span_danger("[parent] makes an electric crackle...")) - return - var/mob/living/future_tram_victim = arrived var/datum/transport_controller/linear/tram/tram = transport_ref?.resolve() // Check for stopped states. - if(isnull(tram) || !tram.controller_operational || !inbound || !outbound) + if(isnull(tram) || !tram.controller_operational || !tram.controller_active || !inbound || !outbound) return FALSE var/obj/structure/transport/linear/tram/tram_part = tram.return_closest_platform_to(parent) @@ -76,6 +69,17 @@ if(isnull(source)) return FALSE + var/toast_prob = NORMAL_TOAST_PROB + if(source.broken || source.burnt || HAS_TRAIT(future_tram_victim, TRAIT_CURSED)) + toast_prob = BROKEN_TOAST_PROB + + if(prob(100 - toast_prob)) + if(prob(25)) + do_sparks(1, FALSE, source) + playsound(parent, SFX_SPARKS, 40, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + source.audible_message(span_danger("[parent] makes an electric crackle...")) + return FALSE + // Everything will be based on position and travel direction var/plate_pos var/tram_pos @@ -83,11 +87,11 @@ // Try to be agnostic about N-S vs E-W movement if(tram.travel_direction & (NORTH|SOUTH)) plate_pos = source.y - tram_pos = source.y + tram_pos = tram_part.y tram_velocity_sign = tram.travel_direction & NORTH ? 1 : -1 else plate_pos = source.x - tram_pos = source.x + tram_pos = tram_part.x tram_velocity_sign = tram.travel_direction & EAST ? 1 : -1 // How far away are we? negative if already passed. @@ -102,13 +106,21 @@ return FALSE if((tram.travel_direction & EAST) && outbound > tram.destination_platform.platform_code) return FALSE - if(approach_distance >= AMBER_THRESHOLD_NORMAL) + if(approach_distance >= AMBER_THRESHOLD_DEGRADED) return FALSE // Finally the interesting part where they ACTUALLY get hit! - notify_ghosts("[future_tram_victim] has fallen in the path of an oncoming tram!", source = future_tram_victim, action = NOTIFY_ORBIT, header = "Electrifying!") - playsound(src, SFX_SPARKS, 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + notify_ghosts( + "[future_tram_victim] has fallen in the path of an oncoming tram!", + source = future_tram_victim, + header = "Electrifying!", + ) + do_sparks(4, FALSE, source) + playsound(parent, SFX_SPARKS, 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) source.audible_message(span_danger("[parent] makes a loud electric crackle!")) to_chat(future_tram_victim, span_userdanger("You hear a loud electric crackle!")) - future_tram_victim.electrocute_act(15, src, 1) + future_tram_victim.electrocute_act(15, parent, 1) return TRUE + +#undef NORMAL_TOAST_PROB +#undef BROKEN_TOAST_PROB diff --git a/code/datums/components/engraved.dm b/code/datums/components/engraved.dm index 016e3082a8d92e..60bfa5f6177297 100644 --- a/code/datums/components/engraved.dm +++ b/code/datums/components/engraved.dm @@ -52,7 +52,7 @@ RegisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_update_overlays)) engraved_wall.update_appearance() -/datum/component/engraved/Destroy(force, silent) +/datum/component/engraved/Destroy(force) if(!parent) return ..() parent.RemoveElement(/datum/element/art) diff --git a/code/datums/components/evolutionary_leap.dm b/code/datums/components/evolutionary_leap.dm index 5ff7f31beaa861..3a47dbbdcf06c9 100644 --- a/code/datums/components/evolutionary_leap.dm +++ b/code/datums/components/evolutionary_leap.dm @@ -30,7 +30,7 @@ setup_timer() -/datum/component/evolutionary_leap/Destroy(force, silent) +/datum/component/evolutionary_leap/Destroy(force) . = ..() deltimer(timer_id) diff --git a/code/datums/components/explodable.dm b/code/datums/components/explodable.dm index 3093c995ced90b..956d562bfb66f5 100644 --- a/code/datums/components/explodable.dm +++ b/code/datums/components/explodable.dm @@ -81,7 +81,7 @@ SIGNAL_HANDLER if(check_if_detonate(tool)) - return COMPONENT_BLOCK_TOOL_ATTACK + return ITEM_INTERACT_BLOCKING /// Shot by something /datum/component/explodable/proc/projectile_react(datum/source, obj/projectile/shot) diff --git a/code/datums/components/explode_on_attack.dm b/code/datums/components/explode_on_attack.dm new file mode 100644 index 00000000000000..0560184f2ba0a8 --- /dev/null +++ b/code/datums/components/explode_on_attack.dm @@ -0,0 +1,40 @@ +/** + * Bombs the user after an attack + */ +/datum/component/explode_on_attack + /// range of bomb impact + var/impact_range + /// should we be destroyed after the explosion? + var/destroy_on_explode + /// list of mobs we wont bomb on attack + var/list/mob_type_dont_bomb + +/datum/component/explode_on_attack/Initialize(impact_range = 1, destroy_on_explode = TRUE, list/mob_type_dont_bomb = list()) + if(!isliving(parent)) + return COMPONENT_INCOMPATIBLE + src.impact_range = impact_range + src.destroy_on_explode = destroy_on_explode + src.mob_type_dont_bomb = mob_type_dont_bomb + +/datum/component/explode_on_attack/RegisterWithParent() + RegisterSignal(parent, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(bomb_target)) + +/datum/component/explode_on_attack/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_HOSTILE_PRE_ATTACKINGTARGET) + + +/datum/component/explode_on_attack/proc/bomb_target(mob/living/owner, atom/victim) + SIGNAL_HANDLER + + if(!isliving(victim)) + return + + if(is_type_in_typecache(victim, mob_type_dont_bomb)) + return + + explosion(owner, light_impact_range = impact_range, explosion_cause = src) + + if(destroy_on_explode && owner) + qdel(owner) + return COMPONENT_HOSTILE_NO_ATTACK + diff --git a/code/datums/components/fishing_spot.dm b/code/datums/components/fishing_spot.dm index f88c27a7135306..05456380235afb 100644 --- a/code/datums/components/fishing_spot.dm +++ b/code/datums/components/fishing_spot.dm @@ -36,7 +36,7 @@ if(HAS_TRAIT(user,TRAIT_GONE_FISHING) || rod.currently_hooked_item) user.balloon_alert(user, "already fishing") return COMPONENT_NO_AFTERATTACK - var/denial_reason = fish_source.reason_we_cant_fish(rod, user) + var/denial_reason = fish_source.reason_we_cant_fish(rod, user, parent) if(denial_reason) to_chat(user, span_warning(denial_reason)) return COMPONENT_NO_AFTERATTACK diff --git a/code/datums/components/focused_attacker.dm b/code/datums/components/focused_attacker.dm index 8635973f2632e4..c927aab8822ff0 100644 --- a/code/datums/components/focused_attacker.dm +++ b/code/datums/components/focused_attacker.dm @@ -17,7 +17,7 @@ src.maximum_gain = maximum_gain src.gain_per_attack = gain_per_attack -/datum/component/focused_attacker/Destroy(force, silent) +/datum/component/focused_attacker/Destroy(force) if (!isnull(last_target)) UnregisterSignal(last_target, COMSIG_QDELETING) return ..() diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm index 1e724f0e404aa7..b7b6bda2f5aaea 100644 --- a/code/datums/components/food/edible.dm +++ b/code/datums/components/food/edible.dm @@ -187,7 +187,7 @@ Behavior that's still missing from this component that original food items had t // add newly passed in reagents setup_initial_reagents(initial_reagents) -/datum/component/edible/Destroy(force, silent) +/datum/component/edible/Destroy(force) after_eat = null on_consume = null check_liked = null @@ -264,6 +264,16 @@ Behavior that's still missing from this component that original food items had t for(var/datum/reagent/reagent as anything in owner.reagents.reagent_list) examine_list += span_notice("- [reagent.name] [reagent.volume]u: [round(reagent.purity * 100)]% pure") + if(!HAS_TRAIT(user, TRAIT_REMOTE_TASTING)) + return + var/fraction = min(bite_consumption / owner.reagents.total_volume, 1) + checkLiked(fraction, user) + if (!owner.reagents.get_reagent_amount(/datum/reagent/consumable/salt)) + examine_list += span_notice("It could use a little more Sodium Chloride...") + if (isliving(user)) + var/mob/living/living_user = user + living_user.taste(owner.reagents) + /datum/component/edible/proc/UseFromHand(obj/item/source, mob/living/M, mob/living/user) SIGNAL_HANDLER diff --git a/code/datums/components/food/ghost_edible.dm b/code/datums/components/food/ghost_edible.dm index 25207800a7426f..fb8a0c5555920b 100644 --- a/code/datums/components/food/ghost_edible.dm +++ b/code/datums/components/food/ghost_edible.dm @@ -23,7 +23,12 @@ src.bite_chance = bite_chance src.minimum_scale = minimum_scale initial_reagent_volume = atom_parent.reagents.total_volume - notify_ghosts("[parent] is edible by ghosts!", source = parent, action = NOTIFY_ORBIT, header="Something Tasty!") + notify_ghosts( + "[parent] is edible by ghosts!", + source = parent, + header = "Something Tasty!", + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) /datum/component/ghost_edible/RegisterWithParent() START_PROCESSING(SSdcs, src) @@ -31,7 +36,7 @@ /datum/component/ghost_edible/UnregisterFromParent() STOP_PROCESSING(SSdcs, src) -/datum/component/ghost_edible/Destroy(force, silent) +/datum/component/ghost_edible/Destroy(force) STOP_PROCESSING(SSdcs, src) return ..() diff --git a/code/datums/components/food/golem_food.dm b/code/datums/components/food/golem_food.dm index c2540f54cc1cb7..136d495b59e395 100644 --- a/code/datums/components/food/golem_food.dm +++ b/code/datums/components/food/golem_food.dm @@ -29,7 +29,7 @@ UnregisterSignal(parent, list(COMSIG_ITEM_ATTACK, COMSIG_ATOM_EXAMINE)) return ..() -/datum/component/golem_food/Destroy(force, silent) +/datum/component/golem_food/Destroy(force) QDEL_NULL(golem_snack) snack_type = null extra_validation = null diff --git a/code/datums/components/food/ice_cream_holder.dm b/code/datums/components/food/ice_cream_holder.dm index 3e212c52b9a046..29625a8a3217cd 100644 --- a/code/datums/components/food/ice_cream_holder.dm +++ b/code/datums/components/food/ice_cream_holder.dm @@ -77,8 +77,7 @@ /datum/component/ice_cream_holder/proc/on_update_name(atom/source, updates) SIGNAL_HANDLER - var/obj/obj = source - if(istype(obj) && obj.renamedByPlayer) //Renamed by the player. + if(HAS_TRAIT(source, TRAIT_WAS_RENAMED)) return var/scoops_len = length(scoops) if(!scoops_len) @@ -93,8 +92,7 @@ /datum/component/ice_cream_holder/proc/on_update_desc(atom/source, updates) SIGNAL_HANDLER - var/obj/obj = source - if(istype(obj) && obj.renamedByPlayer) //Renamed by the player. + if(HAS_TRAIT(source, TRAIT_WAS_RENAMED)) return var/scoops_len = length(scoops) if(!scoops_len) diff --git a/code/datums/components/food_storage.dm b/code/datums/components/food_storage.dm index 60fc3f6c486bf7..cb1008f88f0c8f 100644 --- a/code/datums/components/food_storage.dm +++ b/code/datums/components/food_storage.dm @@ -33,7 +33,7 @@ food.flags_1 |= HAS_CONTEXTUAL_SCREENTIPS_1 -/datum/component/food_storage/Destroy(force, silent) +/datum/component/food_storage/Destroy(force) if(stored_item) stored_item.forceMove(stored_item.drop_location()) stored_item.dropped() diff --git a/code/datums/components/fov_handler.dm b/code/datums/components/fov_handler.dm index 0390357aced9a6..73d04a6b0e6021 100644 --- a/code/datums/components/fov_handler.dm +++ b/code/datums/components/fov_handler.dm @@ -10,8 +10,6 @@ var/fov_angle = FOV_180_DEGREES /// The blocker mask applied to a client's screen var/atom/movable/screen/fov_blocker/blocker_mask - /// The shadow mask applied to a client's screen - var/atom/movable/screen/fov_shadow/visual_shadow /datum/component/fov_handler/Initialize(fov_type = FOV_180_DEGREES) if(!isliving(parent)) @@ -22,13 +20,9 @@ qdel(src) //no QDEL hint for components, and we dont want this to print a warning regarding bad component application return - for(var/atom/movable/screen/plane_master/plane_master as anything in mob_parent.hud_used.get_true_plane_masters(FIELD_OF_VISION_BLOCKER_PLANE)) - plane_master.unhide_plane(mob_parent) + ADD_TRAIT(mob_parent, TRAIT_FOV_APPLIED, REF(src)) blocker_mask = new - visual_shadow = new - //visual_shadow.alpha = parent_client?.prefs.read_preference(/datum/preference/numeric/fov_darkness) //SKYRAT EDIT REMOVAL - update_visual_shadow_alpha() //SKYRAT EDIT ADDITION set_fov_angle(fov_type) on_dir_change(mob_parent, mob_parent.dir, mob_parent.dir) update_fov_size() @@ -36,21 +30,17 @@ /datum/component/fov_handler/Destroy() var/mob/living/mob_parent = parent - for(var/atom/movable/screen/plane_master/plane_master as anything in mob_parent.hud_used.get_true_plane_masters(FIELD_OF_VISION_BLOCKER_PLANE)) - plane_master.hide_plane(mob_parent) + REMOVE_TRAIT(mob_parent, TRAIT_FOV_APPLIED, REF(src)) if(applied_mask) remove_mask() if(blocker_mask) // In a case of early deletion due to volatile client QDEL_NULL(blocker_mask) - if(visual_shadow) // In a case of early deletion due to volatile client - QDEL_NULL(visual_shadow) return ..() /datum/component/fov_handler/proc/set_fov_angle(new_angle) fov_angle = new_angle blocker_mask.icon_state = "[fov_angle]" - visual_shadow.icon_state = "[fov_angle]_v" /// Updates the size of the FOV masks by comparing them to client view size. /datum/component/fov_handler/proc/update_fov_size() @@ -71,8 +61,8 @@ var/y_scale = view_size[2] / current_fov_y current_fov_x = view_size[1] current_fov_y = view_size[2] - visual_shadow.transform = blocker_mask.transform = new_matrix.Scale(x_scale, y_scale) - visual_shadow.transform = blocker_mask.transform = new_matrix.Translate(x_shift * 16, y_shift * 16) + blocker_mask.transform = new_matrix.Scale(x_scale, y_scale) + blocker_mask.transform = new_matrix.Translate(x_shift * 16, y_shift * 16) /// Updates the mask application to client by checking `stat` and `eye` /datum/component/fov_handler/proc/update_mask() @@ -99,13 +89,10 @@ var/client/parent_client = parent_mob.client // Prevents stupid ass hard deletes parent_mob.hud_used.always_visible_inventory -= blocker_mask - parent_mob.hud_used.always_visible_inventory -= visual_shadow if(!parent_client) //Love client volatility!! return applied_mask = FALSE parent_client.screen -= blocker_mask - parent_client.screen -= visual_shadow - /datum/component/fov_handler/proc/add_mask() var/mob/parent_mob = parent @@ -114,15 +101,12 @@ return applied_mask = TRUE parent_client.screen += blocker_mask - parent_client.screen += visual_shadow parent_mob.hud_used.always_visible_inventory += blocker_mask - parent_mob.hud_used.always_visible_inventory += visual_shadow /// When a direction of the user changes, so do the masks /datum/component/fov_handler/proc/on_dir_change(mob/source, old_dir, new_dir) SIGNAL_HANDLER blocker_mask.dir = new_dir - visual_shadow.dir = new_dir /// When a mob logs out, delete the component /datum/component/fov_handler/proc/mob_logout(mob/source) @@ -137,19 +121,7 @@ RegisterSignal(parent, COMSIG_MOB_CLIENT_CHANGE_VIEW, PROC_REF(update_fov_size)) RegisterSignal(parent, COMSIG_MOB_RESET_PERSPECTIVE, PROC_REF(update_mask)) RegisterSignal(parent, COMSIG_MOB_LOGOUT, PROC_REF(mob_logout)) - RegisterSignal(parent, COMSIG_LIVING_COMBAT_MODE_TOGGLE, PROC_REF(update_visual_shadow_alpha)) //SKYRAT EDIT ADDITION /datum/component/fov_handler/UnregisterFromParent() . = ..() UnregisterSignal(parent, list(COMSIG_MOB_RESET_PERSPECTIVE, COMSIG_ATOM_DIR_CHANGE, COMSIG_LIVING_DEATH, COMSIG_LIVING_REVIVE, COMSIG_MOB_LOGOUT)) - UnregisterSignal(parent, COMSIG_LIVING_COMBAT_MODE_TOGGLE) //SKYRAT EDIT ADDITION - -//SKYRAT EDIT ADDITION BEGIN -/// When toggling combat mode, we update the alpha of the shadow mask -/datum/component/fov_handler/proc/update_visual_shadow_alpha() - SIGNAL_HANDLER - var/mob/living/parent_mob = parent - var/pref_to_read = parent_mob.combat_mode ? /datum/preference/numeric/fov_darkness : /datum/preference/numeric/out_of_combat_fov_darkness - var/target_alpha = parent_mob.client.prefs.read_preference(pref_to_read) - visual_shadow.alpha = target_alpha -//SKYRAT EDIT ADDITION END diff --git a/code/datums/components/gas_leaker.dm b/code/datums/components/gas_leaker.dm index d386b73ff00442..eeceb73f5fa251 100644 --- a/code/datums/components/gas_leaker.dm +++ b/code/datums/components/gas_leaker.dm @@ -30,7 +30,7 @@ src.integrity_leak_percent = integrity_leak_percent src.leak_rate = leak_rate -/datum/component/gas_leaker/Destroy(force, silent) +/datum/component/gas_leaker/Destroy(force) SSair.stop_processing_machine(src) return ..() diff --git a/code/datums/components/geiger_sound.dm b/code/datums/components/geiger_sound.dm index 3a8a22df383ede..441aef27756bb1 100644 --- a/code/datums/components/geiger_sound.dm +++ b/code/datums/components/geiger_sound.dm @@ -8,7 +8,7 @@ if (!isatom(parent)) return COMPONENT_INCOMPATIBLE -/datum/component/geiger_sound/Destroy(force, silent) +/datum/component/geiger_sound/Destroy(force) QDEL_NULL(sound) if (!isnull(last_parent)) diff --git a/code/datums/components/ghost_direct_control.dm b/code/datums/components/ghost_direct_control.dm index c4d08380db1847..83c893b6dca867 100644 --- a/code/datums/components/ghost_direct_control.dm +++ b/code/datums/components/ghost_direct_control.dm @@ -47,7 +47,7 @@ UnregisterSignal(parent, list(COMSIG_ATOM_ATTACK_GHOST, COMSIG_ATOM_EXAMINE)) return ..() -/datum/component/ghost_direct_control/Destroy(force, silent) +/datum/component/ghost_direct_control/Destroy(force) extra_control_checks = null after_assumed_control = null @@ -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/grillable.dm b/code/datums/components/grillable.dm index 72c2e75e8cb0e4..b74ae60729064d 100644 --- a/code/datums/components/grillable.dm +++ b/code/datums/components/grillable.dm @@ -83,11 +83,11 @@ SIGNAL_HANDLER . = COMPONENT_HANDLED_GRILLING - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(pollutant_type) var/turf/parent_turf = get_turf(parent) parent_turf.pollute_turf(pollutant_type, 10) - //SKYRAT EDIT END + //NOVA EDIT END current_cook_time += seconds_per_tick * 10 //turn it into ds if(current_cook_time >= required_cook_time) diff --git a/code/datums/components/ground_sinking.dm b/code/datums/components/ground_sinking.dm index 9b70cb0ab60063..d29e84908a438e 100644 --- a/code/datums/components/ground_sinking.dm +++ b/code/datums/components/ground_sinking.dm @@ -36,7 +36,7 @@ heal_when_sinked = TRUE, health_per_second = 1, outline_colour = COLOR_PALE_GREEN, - damage_res_sinked = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)) + damage_res_sinked = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1)) if (!isbasicmob(parent)) return COMPONENT_INCOMPATIBLE @@ -59,7 +59,7 @@ deltimer(ground_sinking_start_timer) UnregisterSignal(parent, COMSIG_MOVABLE_MOVED) -/datum/component/ground_sinking/Destroy(force, silent) +/datum/component/ground_sinking/Destroy(force) if(sinked || is_sinking) unsink() . = ..() @@ -112,7 +112,7 @@ if(sinked && heal_when_sinked) stop_regenerating() living_target.icon_state = target_icon_state - living_target.damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) + living_target.damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1) living_target.density = TRUE sinked = FALSE diff --git a/code/datums/components/growth_and_differentiation.dm b/code/datums/components/growth_and_differentiation.dm index 0920344ce58cbc..a6e10b98f6d7a6 100644 --- a/code/datums/components/growth_and_differentiation.dm +++ b/code/datums/components/growth_and_differentiation.dm @@ -63,7 +63,7 @@ return setup_growth_tracking() -/datum/component/growth_and_differentiation/Destroy(force, silent) +/datum/component/growth_and_differentiation/Destroy(force) STOP_PROCESSING(SSdcs, src) deltimer(timer_id) optional_checks = null diff --git a/code/datums/components/gunpoint.dm b/code/datums/components/gunpoint.dm index c248b4f18c04dc..cb8dfb1ec8d4df 100644 --- a/code/datums/components/gunpoint.dm +++ b/code/datums/components/gunpoint.dm @@ -36,7 +36,16 @@ target = targ weapon = wep - RegisterSignals(targ, list(COMSIG_MOB_ATTACK_HAND, COMSIG_MOB_ITEM_ATTACK, COMSIG_MOVABLE_MOVED, COMSIG_MOB_FIRED_GUN), PROC_REF(trigger_reaction)) + RegisterSignals(targ, list( + COMSIG_MOB_ATTACK_HAND, + COMSIG_MOB_ITEM_ATTACK, + COMSIG_MOVABLE_MOVED, + COMSIG_MOB_FIRED_GUN, + COMSIG_MOVABLE_SET_GRAB_STATE, + COMSIG_LIVING_START_PULL), PROC_REF(trigger_reaction)) + RegisterSignal(targ, COMSIG_ATOM_EXAMINE, PROC_REF(examine_target)) + RegisterSignal(targ, COMSIG_LIVING_PRE_MOB_BUMP, PROC_REF(block_bumps_target)) + RegisterSignals(targ, list(COMSIG_HUMAN_DISARM_HIT, COMSIG_LIVING_GET_PULLED), PROC_REF(cancel)) RegisterSignals(weapon, list(COMSIG_ITEM_DROPPED, COMSIG_ITEM_EQUIPPED), PROC_REF(cancel)) var/distance = min(get_dist(shooter, target), 1) // treat 0 distance as adjacent @@ -64,7 +73,7 @@ addtimer(CALLBACK(src, PROC_REF(update_stage), 2), GUNPOINT_DELAY_STAGE_2) -/datum/component/gunpoint/Destroy(force, silent) +/datum/component/gunpoint/Destroy(force) var/mob/living/shooter = parent shooter.remove_status_effect(/datum/status_effect/holdup) target.remove_status_effect(/datum/status_effect/grouped/heldup, REF(shooter)) @@ -77,6 +86,9 @@ RegisterSignal(parent, COMSIG_MOB_ATTACK_HAND, PROC_REF(check_shove)) RegisterSignal(parent, COMSIG_MOB_UPDATE_SIGHT, PROC_REF(check_deescalate)) RegisterSignals(parent, list(COMSIG_LIVING_START_PULL, COMSIG_MOVABLE_BUMP), PROC_REF(check_bump)) + RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(examine)) + RegisterSignal(parent, COMSIG_LIVING_PRE_MOB_BUMP, PROC_REF(block_bumps_parent)) + RegisterSignal(parent, COMSIG_HUMAN_DISARM_HIT, PROC_REF(cancel)) /datum/component/gunpoint/UnregisterFromParent() UnregisterSignal(parent, COMSIG_MOVABLE_MOVED) @@ -84,6 +96,9 @@ UnregisterSignal(parent, COMSIG_MOB_UPDATE_SIGHT) UnregisterSignal(parent, COMSIG_MOB_ATTACK_HAND) UnregisterSignal(parent, list(COMSIG_LIVING_START_PULL, COMSIG_MOVABLE_BUMP)) + UnregisterSignal(parent, COMSIG_ATOM_EXAMINE) + UnregisterSignal(parent, COMSIG_LIVING_PRE_MOB_BUMP) + UnregisterSignal(parent, COMSIG_HUMAN_DISARM_HIT) ///If the shooter bumps the target, cancel the holdup to avoid cheesing and forcing the charged shot /datum/component/gunpoint/proc/check_bump(atom/B, atom/A) @@ -195,6 +210,30 @@ ) INVOKE_ASYNC(src, PROC_REF(trigger_reaction)) +///Shows if the parent is holding someone at gunpoint +/datum/component/gunpoint/proc/examine(datum/source, mob/user, list/examine_list) + SIGNAL_HANDLER + if(user in viewers(target)) + examine_list += span_boldwarning("[parent] [parent.p_are()] holding [target] at gunpoint with [weapon]!") + +///Shows if the examine target is being held at gunpoint +/datum/component/gunpoint/proc/examine_target(datum/source, mob/user, list/examine_list) + SIGNAL_HANDLER + if(user in viewers(parent)) + examine_list += span_boldwarning("[target] [target.p_are()] being held at gunpoint by [parent]!") + +///Prevents bumping the shooter to break gunpoint since shove does that +/datum/component/gunpoint/proc/block_bumps_parent(mob/bumped, mob/living/bumper) + SIGNAL_HANDLER + to_chat(bumper, span_warning("[bumped] [bumped.p_are()] holding [target] at gunpoint, you cannot push past.")) + return COMPONENT_LIVING_BLOCK_PRE_MOB_BUMP + +///Prevents bumping the target by an ally to cheese and force the charged shot +/datum/component/gunpoint/proc/block_bumps_target(mob/bumped, mob/living/bumper) + SIGNAL_HANDLER + to_chat(bumper, span_warning("[bumped] [bumped.p_are()] being held at gunpoint, it's not wise to push [bumped.p_them()]!")) + return COMPONENT_LIVING_BLOCK_PRE_MOB_BUMP + #undef GUNPOINT_DELAY_STAGE_2 #undef GUNPOINT_DELAY_STAGE_3 #undef GUNPOINT_BASE_WOUND_BONUS diff --git a/code/datums/components/hazard_area.dm b/code/datums/components/hazard_area.dm index 79b4399023ed5d..f747e8e2ace769 100644 --- a/code/datums/components/hazard_area.dm +++ b/code/datums/components/hazard_area.dm @@ -39,7 +39,7 @@ UnregisterSignal(SSdcs, COMSIG_AREA_CREATED) parent_mob.lose_area_sensitivity(type) -/datum/component/hazard_area/Destroy(force, silent) +/datum/component/hazard_area/Destroy(force) . = ..() area_created = null diff --git a/code/datums/components/healing_touch.dm b/code/datums/components/healing_touch.dm index a81de7ab04a787..bc0493b4787739 100644 --- a/code/datums/components/healing_touch.dm +++ b/code/datums/components/healing_touch.dm @@ -8,10 +8,15 @@ * This intercepts the attack and starts a do_after if the target is in its allowed type list. */ /datum/component/healing_touch + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS /// How much brute damage to heal var/heal_brute /// How much burn damage to heal var/heal_burn + /// How much toxin damage to heal + var/heal_tox + /// How much oxygen damage to heal + var/heal_oxy /// How much stamina damage to heal var/heal_stamina /// Interaction will use this key, and be blocked while this key is in use @@ -26,8 +31,8 @@ var/valid_biotypes /// Which kinds of carbon limbs can we heal, has no effect on non-carbon mobs. Set to null if you don't care about excluding prosthetics. var/required_bodytype - /// How targetting yourself works, expects one of HEALING_TOUCH_ANYONE, HEALING_TOUCH_NOT_SELF, or HEALING_TOUCH_SELF_ONLY - var/self_targetting + /// How targeting yourself works, expects one of HEALING_TOUCH_ANYONE, HEALING_TOUCH_NOT_SELF, or HEALING_TOUCH_SELF_ONLY + var/self_targeting /// Text to print when action starts, replaces %SOURCE% with healer and %TARGET% with healed mob var/action_text /// Text to print when action completes, replaces %SOURCE% with healer and %TARGET% with healed mob @@ -36,10 +41,16 @@ var/show_health /// Color for the healing effect var/heal_color + /// Optional click modifier required + var/required_modifier + /// Callback to run after healing a mob + var/datum/callback/after_healed /datum/component/healing_touch/Initialize( heal_brute = 20, heal_burn = 20, + heal_tox = 0, + heal_oxy = 0, heal_stamina = 0, heal_time = 2 SECONDS, interaction_key = DOAFTER_SOURCE_HEAL_TOUCH, @@ -47,17 +58,21 @@ list/valid_targets_typecache = list(), valid_biotypes = MOB_ORGANIC | MOB_MINERAL, required_bodytype = BODYTYPE_ORGANIC, - self_targetting = HEALING_TOUCH_NOT_SELF, + self_targeting = HEALING_TOUCH_NOT_SELF, action_text = "%SOURCE% begins healing %TARGET%", complete_text = "%SOURCE% finishes healing %TARGET%", show_health = FALSE, heal_color = COLOR_HEALING_CYAN, + required_modifier = null, + datum/callback/after_healed = null, ) if (!isliving(parent)) return COMPONENT_INCOMPATIBLE src.heal_brute = heal_brute src.heal_burn = heal_burn + src.heal_tox = heal_tox + src.heal_oxy = heal_oxy src.heal_stamina = heal_stamina src.heal_time = heal_time src.interaction_key = interaction_key @@ -65,30 +80,43 @@ src.valid_targets_typecache = valid_targets_typecache.Copy() src.valid_biotypes = valid_biotypes src.required_bodytype = required_bodytype - src.self_targetting = self_targetting + src.self_targeting = self_targeting src.action_text = action_text src.complete_text = complete_text src.show_health = show_health src.heal_color = heal_color + src.required_modifier = required_modifier + src.after_healed = after_healed RegisterSignal(parent, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(try_healing)) // Players RegisterSignal(parent, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(try_healing)) // NPCs +// Let's populate this list as we actually use it, this thing has too many args +/datum/component/healing_touch/InheritComponent( + datum/component/new_component, + i_am_original, + heal_color, +) + src.heal_color = heal_color + /datum/component/healing_touch/UnregisterFromParent() UnregisterSignal(parent, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_HOSTILE_PRE_ATTACKINGTARGET)) return ..() -/datum/component/healing_touch/Destroy(force, silent) +/datum/component/healing_touch/Destroy(force) extra_checks = null return ..() /// Validate our target, and interrupt the attack chain to start healing it if it is allowed -/datum/component/healing_touch/proc/try_healing(mob/living/healer, atom/target) +/datum/component/healing_touch/proc/try_healing(mob/living/healer, atom/target, proximity, modifiers) SIGNAL_HANDLER if (!isliving(target)) return - if (!is_type_in_typecache(target, valid_targets_typecache)) + if (!isnull(required_modifier) && !LAZYACCESS(modifiers, required_modifier)) + return + + if (length(valid_targets_typecache) && !is_type_in_typecache(target, valid_targets_typecache)) return // Fall back to attacking it if (extra_checks && !extra_checks.Invoke(healer, target)) @@ -98,7 +126,7 @@ healer.balloon_alert(healer, "busy!") return COMPONENT_CANCEL_ATTACK_CHAIN - switch (self_targetting) + switch (self_targeting) if (HEALING_TOUCH_NOT_SELF) if (target == healer) healer.balloon_alert(healer, "can't heal yourself!") @@ -131,6 +159,10 @@ return FALSE if (target.getStaminaLoss() > 0 && heal_stamina) return TRUE + if (target.getOxyLoss() > 0 && heal_oxy) + return TRUE + if (target.getToxLoss() > 0 && heal_tox) + return TRUE if (!iscarbon(target)) return (target.getBruteLoss() > 0 && heal_brute) || (target.getFireLoss() > 0 && heal_burn) var/mob/living/carbon/carbon_target = target @@ -154,12 +186,26 @@ if (complete_text) healer.visible_message(span_notice("[format_string(complete_text, healer, target)]")) - target.heal_overall_damage(brute = heal_brute, burn = heal_burn, stamina = heal_stamina, required_bodytype = required_bodytype) + var/healed = target.heal_overall_damage( + brute = heal_brute, + burn = heal_burn, + stamina = heal_stamina, + required_bodytype = required_bodytype, + updating_health = FALSE, + ) + healed += target.adjustOxyLoss(-heal_oxy, updating_health = FALSE, required_biotype = valid_biotypes) + healed += target.adjustToxLoss(-heal_tox, updating_health = FALSE, required_biotype = valid_biotypes) + if (healed <= 0) + return + + target.updatehealth() new /obj/effect/temp_visual/heal(get_turf(target), heal_color) + after_healed?.Invoke(target) - if(show_health && !iscarbon(target)) - var/formatted_string = format_string("%TARGET% now has [target.health]/[target.maxHealth] health.", healer, target) - to_chat(healer, span_danger(formatted_string)) + if(!show_health) + return + var/formatted_string = format_string("%TARGET% now has [health_percentage(target)] health.", healer, target) + to_chat(healer, span_danger(formatted_string)) /// Reformats the passed string with the replacetext keys /datum/component/healing_touch/proc/format_string(string, atom/source, atom/target) diff --git a/code/datums/components/health_scaling_effects.dm b/code/datums/components/health_scaling_effects.dm index 140a60ea96249b..e3754ae2061b29 100644 --- a/code/datums/components/health_scaling_effects.dm +++ b/code/datums/components/health_scaling_effects.dm @@ -53,7 +53,7 @@ UnregisterSignal(parent, COMSIG_LIVING_HEALTH_UPDATE) return ..() -/datum/component/health_scaling_effects/Destroy(force, silent) +/datum/component/health_scaling_effects/Destroy(force) additional_status_callback = null return ..() diff --git a/code/datums/components/heirloom.dm b/code/datums/components/heirloom.dm index 064c33ff7d73d0..fe3aa73bcd35bb 100644 --- a/code/datums/components/heirloom.dm +++ b/code/datums/components/heirloom.dm @@ -14,7 +14,7 @@ RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) -/datum/component/heirloom/Destroy(force, silent) +/datum/component/heirloom/Destroy(force) owner = null return ..() diff --git a/code/datums/components/interaction_booby_trap.dm b/code/datums/components/interaction_booby_trap.dm index 6f57e4f6b75c15..2ae22ffbb5ae59 100644 --- a/code/datums/components/interaction_booby_trap.dm +++ b/code/datums/components/interaction_booby_trap.dm @@ -56,7 +56,7 @@ if (length(additional_triggers)) RegisterSignals(parent, additional_triggers, PROC_REF(trigger_explosive)) -/datum/component/interaction_booby_trap/Destroy(force, silent) +/datum/component/interaction_booby_trap/Destroy(force) UnregisterSignal(parent, list(COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_TOOL_ACT(defuse_tool), COMSIG_ATOM_EXAMINE_MORE) + additional_triggers) QDEL_NULL(active_sound_loop) on_triggered_callback = null @@ -93,7 +93,7 @@ SIGNAL_HANDLER on_defused_callback?.Invoke(source, user, tool) qdel(src) - return COMPONENT_BLOCK_TOOL_ATTACK + return ITEM_INTERACT_BLOCKING /// Give people a little hint /datum/component/interaction_booby_trap/proc/on_examine(atom/source, mob/examiner, list/examine_list) diff --git a/code/datums/components/irradiated.dm b/code/datums/components/irradiated.dm index c8a57f3761ad55..805288fe4867fd 100644 --- a/code/datums/components/irradiated.dm +++ b/code/datums/components/irradiated.dm @@ -58,7 +58,7 @@ COMSIG_GEIGER_COUNTER_SCAN, )) -/datum/component/irradiated/Destroy(force, silent) +/datum/component/irradiated/Destroy(force) var/atom/movable/parent_movable = parent if (istype(parent_movable)) parent_movable.remove_filter("rad_glow") @@ -96,7 +96,7 @@ process_tox_damage(human_parent, seconds_per_tick) /datum/component/irradiated/proc/should_halt_effects(mob/living/carbon/human/target) - if (IS_IN_STASIS(target)) + if (HAS_TRAIT(target, TRAIT_STASIS)) return TRUE if (HAS_TRAIT(target, TRAIT_HALT_RADIATION_EFFECTS)) diff --git a/code/datums/components/itembound.dm b/code/datums/components/itembound.dm index f742c1233fd116..f6df7f0bab5b30 100644 --- a/code/datums/components/itembound.dm +++ b/code/datums/components/itembound.dm @@ -40,7 +40,7 @@ return qdel(src) -/datum/component/itembound/Destroy(force, silent) +/datum/component/itembound/Destroy(force) var/atom/movable/container = containerref?.resolve() if (!QDELETED(container)) UnregisterSignal(container, COMSIG_ATOM_EXAMINE_MORE) diff --git a/code/datums/components/jetpack.dm b/code/datums/components/jetpack.dm index f7e1fca70e6d81..3e0fd28ed80137 100644 --- a/code/datums/components/jetpack.dm +++ b/code/datums/components/jetpack.dm @@ -63,7 +63,7 @@ if(trail && trail.effect_type != effect_type) setup_trail(trail.holder) -/datum/component/jetpack/Destroy(force, silent) +/datum/component/jetpack/Destroy(force) if(trail) QDEL_NULL(trail) check_on_move = null diff --git a/code/datums/components/keep_me_secure.dm b/code/datums/components/keep_me_secure.dm index 9bce3ab5e862e4..84e295db1786ca 100644 --- a/code/datums/components/keep_me_secure.dm +++ b/code/datums/components/keep_me_secure.dm @@ -22,7 +22,7 @@ src.secured_callback = secured_callback src.unsecured_callback = unsecured_callback -/datum/component/keep_me_secure/Destroy(force, silent) +/datum/component/keep_me_secure/Destroy(force) secured_callback = null unsecured_callback = null return ..() diff --git a/code/datums/components/life_link.dm b/code/datums/components/life_link.dm new file mode 100644 index 00000000000000..628aceabc955ad --- /dev/null +++ b/code/datums/components/life_link.dm @@ -0,0 +1,167 @@ +/** + * A mob with this component passes all damage (and healing) it takes to another mob, passed as a parameter + * Essentially we use another mob's health bar as our health bar + */ +/datum/component/life_link + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + /// Mob we pass all of our damage to + var/mob/living/host + /// Optional callback invoked when damage gets transferred + var/datum/callback/on_passed_damage + /// Optional callback invoked when the linked mob dies + var/datum/callback/on_linked_death + +/datum/component/life_link/Initialize(mob/living/host, datum/callback/on_passed_damage, datum/callback/on_linked_death) + . = ..() + if (!isliving(parent)) + return COMPONENT_INCOMPATIBLE + if (!istype(host)) + CRASH("Life link created on [parent.type] and attempted to link to invalid type [host?.type].") + register_host(host) + src.on_passed_damage = on_passed_damage + src.on_linked_death = on_linked_death + +/datum/component/life_link/RegisterWithParent() + RegisterSignal(parent, COMSIG_CARBON_LIMB_DAMAGED, PROC_REF(on_limb_damage)) + RegisterSignals(parent, COMSIG_LIVING_ADJUST_STANDARD_DAMAGE_TYPES, PROC_REF(on_damage_adjusted)) + RegisterSignal(parent, COMSIG_LIVING_HEALTH_UPDATE, PROC_REF(on_health_updated)) + RegisterSignal(parent, COMSIG_MOB_GET_STATUS_TAB_ITEMS, PROC_REF(on_status_tab_updated)) + if (!isnull(host)) + var/mob/living/living_parent = parent + living_parent.updatehealth() + +/datum/component/life_link/UnregisterFromParent() + unregister_host() + UnregisterSignal(parent, list(COMSIG_CARBON_LIMB_DAMAGED, COMSIG_LIVING_HEALTH_UPDATE, COMSIG_MOB_GET_STATUS_TAB_ITEMS) + COMSIG_LIVING_ADJUST_STANDARD_DAMAGE_TYPES) + +/datum/component/life_link/InheritComponent(datum/component/new_comp, i_am_original, mob/living/host, datum/callback/on_passed_damage, datum/callback/on_linked_death) + register_host(host) + +/// Set someone up as our new host +/datum/component/life_link/proc/register_host(mob/living/new_host) + unregister_host() + if (isnull(new_host)) + return + host = new_host + RegisterSignal(host, COMSIG_LIVING_DEATH, PROC_REF(on_host_died)) + RegisterSignal(host, COMSIG_LIVING_HEALTH_UPDATE, PROC_REF(on_health_updated)) + RegisterSignal(host, COMSIG_LIVING_REVIVE, PROC_REF(on_host_revived)) + RegisterSignal(host, COMSIG_QDELETING, PROC_REF(on_host_deleted)) + var/mob/living/living_parent = parent + living_parent.updatehealth() + +/// Drop someone from being our host +/datum/component/life_link/proc/unregister_host() + if (isnull(host)) + return + UnregisterSignal(host, list(COMSIG_LIVING_DEATH, COMSIG_LIVING_HEALTH_UPDATE, COMSIG_LIVING_REVIVE, COMSIG_QDELETING)) + host = null + +/// Called when your damage goes up or down +/datum/component/life_link/proc/on_damage_adjusted(mob/living/our_mob, type, amount, forced) + SIGNAL_HANDLER + if (forced) + return + amount *= our_mob.get_damage_mod(type) + switch (type) + if(BRUTE) + host.adjustBruteLoss(amount, forced = TRUE) + if(BURN) + host.adjustFireLoss(amount, forced = TRUE) + if(TOX) + host.adjustToxLoss(amount, forced = TRUE) + if(OXY) + host.adjustOxyLoss(amount, forced = TRUE) + + on_passed_damage?.Invoke(our_mob, host, amount) + return COMPONENT_IGNORE_CHANGE + +/// Called when someone hurts one of our limbs, bypassing normal damage adjustment +/datum/component/life_link/proc/on_limb_damage(mob/living/our_mob, limb, brute, burn) + SIGNAL_HANDLER + if (brute != 0) + host.adjustBruteLoss(brute, updating_health = FALSE) + if (burn != 0) + host.adjustFireLoss(burn, updating_health = FALSE) + if (brute != 0 || burn != 0) + host.updatehealth() + on_passed_damage?.Invoke(our_mob, host, brute + burn) + return COMPONENT_PREVENT_LIMB_DAMAGE + +/// Called when either the host or parent's health tries to update, update our displayed health +/datum/component/life_link/proc/on_health_updated() + SIGNAL_HANDLER + update_health_hud(parent) + update_med_hud_health(parent) + update_med_hud_status(parent) + +/// Update our parent's health display based on how harmed our host is +/datum/component/life_link/proc/update_health_hud(mob/living/mob_parent) + var/severity = 0 + var/healthpercent = health_percentage(host) + switch(healthpercent) + if(100 to INFINITY) + severity = 0 + if(85 to 100) + severity = 1 + if(70 to 85) + severity = 2 + if(55 to 70) + severity = 3 + if(40 to 55) + severity = 4 + if(25 to 40) + severity = 5 + else + severity = 6 + if(severity > 0) + mob_parent.overlay_fullscreen("brute", /atom/movable/screen/fullscreen/brute, severity) + else + mob_parent.clear_fullscreen("brute") + if(mob_parent.hud_used?.healths) + mob_parent.hud_used.healths.maptext = MAPTEXT("
[round(healthpercent, 0.5)]%
") + +/// Update our health on the medical hud +/datum/component/life_link/proc/update_med_hud_health(mob/living/mob_parent) + var/image/holder = mob_parent.hud_list?[HEALTH_HUD] + if(isnull(holder)) + return + holder.icon_state = "hud[RoundHealth(host)]" + var/icon/size_check = icon(mob_parent.icon, mob_parent.icon_state, mob_parent.dir) + holder.pixel_y = size_check.Height() - world.icon_size + +/// Update our vital status on the medical hud +/datum/component/life_link/proc/update_med_hud_status(mob/living/mob_parent) + var/image/holder = mob_parent.hud_list?[STATUS_HUD] + if(isnull(holder)) + return + var/icon/size_check = icon(mob_parent.icon, mob_parent.icon_state, mob_parent.dir) + holder.pixel_y = size_check.Height() - world.icon_size + if(host.stat == DEAD || HAS_TRAIT(host, TRAIT_FAKEDEATH)) + holder.icon_state = "huddead" + else + holder.icon_state = "hudhealthy" + +/// When our status tab updates, draw how much HP our host has in there +/datum/component/life_link/proc/on_status_tab_updated(mob/living/source, list/items) + SIGNAL_HANDLER + var/healthpercent = health_percentage(host) + items += "Host Health: [round(healthpercent, 0.5)]%" + +/// Called when our host dies, we should die too +/datum/component/life_link/proc/on_host_died(mob/living/source, gibbed) + SIGNAL_HANDLER + on_linked_death?.Invoke(parent, host, gibbed) + var/mob/living/living_parent = parent + living_parent.death(gibbed) + +/// Called when our host undies, we should undie too +/datum/component/life_link/proc/on_host_revived(mob/living/source, full_heal_flags) + SIGNAL_HANDLER + var/mob/living/living_parent = parent + living_parent.revive(full_heal_flags) + +/// Called when +/datum/component/life_link/proc/on_host_deleted() + SIGNAL_HANDLER + qdel(src) diff --git a/code/datums/components/light_eater.dm b/code/datums/components/light_eater.dm index 0501af5e0cbbdc..11344d5f37c6f1 100644 --- a/code/datums/components/light_eater.dm +++ b/code/datums/components/light_eater.dm @@ -22,7 +22,7 @@ LAZYSET(cached_eaten_lights, morsel, TRUE) RegisterSignal(morsel, COMSIG_QDELETING, PROC_REF(deref_eaten_light)) -/datum/component/light_eater/Destroy(force, silent) +/datum/component/light_eater/Destroy(force) for(var/light in eaten_lights) var/atom/eaten_light = light eaten_light.RemoveElement(/datum/element/light_eaten) diff --git a/code/datums/components/ling_decoy_brain.dm b/code/datums/components/ling_decoy_brain.dm index 7bcb4e38c8f638..917e8f2fbbd7cf 100644 --- a/code/datums/components/ling_decoy_brain.dm +++ b/code/datums/components/ling_decoy_brain.dm @@ -54,7 +54,7 @@ to_chat(the_real_ling, span_ghostalert("We detect our decoy brain has been placed within a Man-Machine Interface. \ We can use the \"MMI Talk\" action to command it to speak.")) else - the_real_ling.notify_ghost_cloning("Your decoy brain has been placed in an MMI, re-enter your body to talk via it!", source = the_real_ling, flashwindow = TRUE) + the_real_ling.notify_revival("Your decoy brain has been placed in an MMI, re-enter your body to talk via it!", source = the_real_ling, flashwindow = TRUE) talk_action.Grant(the_real_ling) else if(talk_action?.owner == the_real_ling) diff --git a/code/datums/components/listen_and_repeat.dm b/code/datums/components/listen_and_repeat.dm new file mode 100644 index 00000000000000..b2ba8674d799ee --- /dev/null +++ b/code/datums/components/listen_and_repeat.dm @@ -0,0 +1,88 @@ +/// The maximum number of phrases we can store in our speech buffer +#define MAX_SPEECH_BUFFER_SIZE 500 +/// Tendency we have to ignore radio chatter +#define RADIO_IGNORE_CHANCE 10 + +/// Simple element that will deterministically set a value based on stuff that the source has heard and will then compel the source to repeat it. +/// Requires a valid AI Blackboard. +/datum/component/listen_and_repeat + /// List of things that we start out having in our speech buffer + var/list/desired_phrases = null + /// The AI Blackboard Key we assign the value to. + var/blackboard_key = null + /// Probability we speak + var/speech_probability = null + /// Probabiliy we switch our phrase + var/switch_phrase_probability = null + /// List of things that we've heard and will repeat. + var/list/speech_buffer = null + +/datum/component/listen_and_repeat/Initialize(list/desired_phrases, blackboard_key) + . = ..() + if(!ismovable(parent)) + return COMPONENT_INCOMPATIBLE + + if(!isnull(desired_phrases)) + LAZYADD(speech_buffer, desired_phrases) + + src.blackboard_key = blackboard_key + + RegisterSignal(parent, COMSIG_MOVABLE_PRE_HEAR, PROC_REF(on_hear)) + RegisterSignal(parent, COMSIG_NEEDS_NEW_PHRASE, PROC_REF(set_new_blackboard_phrase)) + RegisterSignal(parent, COMSIG_LIVING_WRITE_MEMORY, PROC_REF(on_write_memory)) + + ADD_TRAIT(parent, TRAIT_SUBTREE_REQUIRED_OPERATIONAL_DATUM, type) + +/datum/component/listen_and_repeat/Destroy(force) + REMOVE_TRAIT(parent, TRAIT_SUBTREE_REQUIRED_OPERATIONAL_DATUM, type) + return ..() + +/// Called when we hear something. +/datum/component/listen_and_repeat/proc/on_hear(datum/source, list/passed_arguments) + SIGNAL_HANDLER + + var/message = passed_arguments[HEARING_RAW_MESSAGE] + var/speaker = passed_arguments[HEARING_SPEAKER] + var/over_radio = !!passed_arguments[HEARING_RADIO_FREQ] + if(speaker == source) // don't parrot ourselves + return + + if(over_radio && prob(RADIO_IGNORE_CHANCE)) + return + //NOVA EDIT ADDITION START - parrot commands + var/mob/living/basic/parrot/maybe_parrot = parent + if(!over_radio && istype(maybe_parrot)) + maybe_parrot.check_command(message, speaker) + // NOVA EDIT ADDITION END + + var/number_of_excess_strings = LAZYLEN(speech_buffer) - MAX_SPEECH_BUFFER_SIZE + if(number_of_excess_strings > 0) // only remove if we're overfull + for(var/i in 1 to number_of_excess_strings) + LAZYREMOVE(speech_buffer, pick(speech_buffer)) + + LAZYOR(speech_buffer, html_decode(message)) + +/// Called to set a new value for the blackboard key. +/datum/component/listen_and_repeat/proc/set_new_blackboard_phrase(datum/source) + SIGNAL_HANDLER + var/atom/movable/atom_source = source + var/datum/ai_controller/controller = atom_source.ai_controller + if(!LAZYLEN(speech_buffer)) + controller.clear_blackboard_key(blackboard_key) + return NO_NEW_PHRASE_AVAILABLE + + var/selected_phrase = pick(speech_buffer) + controller.set_blackboard_key(blackboard_key, selected_phrase) + +/// Exports all the speech buffer data to a dedicated blackboard key on the source. +/datum/component/listen_and_repeat/proc/on_write_memory(datum/source, dead, gibbed) + SIGNAL_HANDLER + var/atom/movable/atom_source = source + var/datum/ai_controller/controller = atom_source.ai_controller + if(!LAZYLEN(speech_buffer)) // what? well whatever let's just move on + return + + controller.override_blackboard_key(BB_EXPORTABLE_STRING_BUFFER_LIST, speech_buffer.Copy()) + +#undef MAX_SPEECH_BUFFER_SIZE +#undef RADIO_IGNORE_CHANCE diff --git a/code/datums/components/lock_on_cursor.dm b/code/datums/components/lock_on_cursor.dm index 0ccac6ee2f9234..4b78f031aa06d9 100644 --- a/code/datums/components/lock_on_cursor.dm +++ b/code/datums/components/lock_on_cursor.dm @@ -8,13 +8,13 @@ */ /datum/component/lock_on_cursor dupe_mode = COMPONENT_DUPE_ALLOWED - /// Appearance to overlay onto whatever we are targetting + /// Appearance to overlay onto whatever we are targeting var/mutable_appearance/lock_appearance /// Current images we are displaying to the client var/list/image/lock_images /// Typecache of things we are allowed to target var/list/target_typecache - /// Cache of weakrefs to ignore targetting formatted as `list(weakref = TRUE)` + /// Cache of weakrefs to ignore targeting formatted as `list(weakref = TRUE)` var/list/immune_weakrefs /// Number of things we can target at once var/lock_amount @@ -62,7 +62,7 @@ mouse_tracker.assign_to_mob(owner) START_PROCESSING(SSfastprocess, src) -/datum/component/lock_on_cursor/Destroy(force, silent) +/datum/component/lock_on_cursor/Destroy(force) clear_visuals() STOP_PROCESSING(SSfastprocess, src) mouse_tracker = null diff --git a/code/datums/components/lockable_storage.dm b/code/datums/components/lockable_storage.dm new file mode 100644 index 00000000000000..52aba79974179b --- /dev/null +++ b/code/datums/components/lockable_storage.dm @@ -0,0 +1,206 @@ +/** + * ##lockable_storage + * Adds a UI to the object that triggers when you use it in hand (if item) or attack (everything else). + * The UI is a lock that, when unlocked, allows you to access the contents inside of it. + * When using this, make sure you have icons for `on_update_icon_state`. + */ +/datum/component/lockable_storage + ///Boolean on whether the panel has been hacked open with a screwdriver. + var/panel_open = FALSE + ///The number currently sitting in the briefcase's panel. + var/numeric_input + + ///The code that will open this safe, set by usually players. + ///Importantly, can be null if there's no password. + var/lock_code + ///Boolean on whether the storage can be hacked open with a multitool. + var/can_hack_open + +/datum/component/lockable_storage/Initialize( + lock_code, + can_hack_open = TRUE, +) + . = ..() + if(!isobj(parent)) + return COMPONENT_INCOMPATIBLE + + var/atom/atom_parent = parent + atom_parent.flags_1 |= HAS_CONTEXTUAL_SCREENTIPS_1 + + if(!atom_parent.atom_storage) + atom_parent.create_storage( + max_specific_storage = WEIGHT_CLASS_GIGANTIC, + max_total_storage = 14, + canthold = list(/obj/item/storage/briefcase/secure), + ) + + + src.lock_code = lock_code + if(!isnull(lock_code)) + atom_parent.atom_storage.locked = STORAGE_FULLY_LOCKED + src.can_hack_open = can_hack_open + + atom_parent.update_appearance() + +/datum/component/lockable_storage/RegisterWithParent() + . = ..() + if(can_hack_open) + RegisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_SCREWDRIVER), PROC_REF(on_screwdriver_act)) + RegisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), PROC_REF(on_multitool_act)) + + RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) + RegisterSignal(parent, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM, PROC_REF(on_requesting_context_from_item)) + RegisterSignal(parent, COMSIG_ATOM_UPDATE_ICON_STATE, PROC_REF(on_update_icon_state)) + + if(isitem(parent)) + RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, PROC_REF(on_interact)) + else + RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, PROC_REF(on_interact)) + +/datum/component/lockable_storage/UnregisterFromParent() + if(can_hack_open) + UnregisterSignal(parent, list( + COMSIG_ATOM_TOOL_ACT(TOOL_SCREWDRIVER), + COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), + )) + UnregisterSignal(parent, list( + COMSIG_ATOM_EXAMINE, + COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM, + COMSIG_ATOM_UPDATE_ICON_STATE, + )) + + if(isitem(parent)) + UnregisterSignal(parent, COMSIG_ITEM_ATTACK_SELF) + else + UnregisterSignal(parent, COMSIG_ATOM_ATTACK_HAND) + return ..() + +/** + * Adds context screentips to the locked item. + * Arguments: + * * source - The item that will display its screentip + * * context - The list of context that will be displayed. We add onto this list for it to show up. + * * held_item - The item in your hand, which in this case should be a screwdriver or multitool, if necessary. + * * user - The user who is going to see the screentips. + */ +/datum/component/lockable_storage/proc/on_requesting_context_from_item(datum/source, list/context, obj/item/held_item, mob/user) + SIGNAL_HANDLER + if(isnull(held_item)) + context[SCREENTIP_CONTEXT_LMB] = "Open storage" + return CONTEXTUAL_SCREENTIP_SET + + if(can_hack_open) + switch(held_item.tool_behaviour) + if(TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] panel" + return CONTEXTUAL_SCREENTIP_SET + if(TOOL_MULTITOOL) + context[SCREENTIP_CONTEXT_LMB] = "Hack panel open" + return CONTEXTUAL_SCREENTIP_SET + + return NONE + +///Called when examining the storage item. +/datum/component/lockable_storage/proc/on_examine(atom/source, mob/user, list/examine_list) + SIGNAL_HANDLER + if(can_hack_open) + examine_list += "The service panel is currently [panel_open ? "unscrewed" : "screwed shut"]." + +/** + * Called when a screwdriver is used on the parent, if it's hackable. + */ +/datum/component/lockable_storage/proc/on_screwdriver_act(atom/source, mob/user, obj/item/tool) + SIGNAL_HANDLER + if(!can_hack_open || !source.atom_storage.locked) + return NONE + + panel_open = !panel_open + source.balloon_alert(user, "panel [panel_open ? "opened" : "closed"]") + return ITEM_INTERACT_SUCCESS + +/** + * Called when a multitool is used on the parent, if it's hackable. + * Checks if we can start hacking and, if so, will begin the hacking process. + */ +/datum/component/lockable_storage/proc/on_multitool_act(atom/source, mob/user, obj/item/tool) + SIGNAL_HANDLER + if(!can_hack_open || !source.atom_storage.locked) + return NONE + if(!panel_open) + source.balloon_alert(user, "panel closed!") + return ITEM_INTERACT_BLOCKING + source.balloon_alert(user, "hacking...") + INVOKE_ASYNC(src, PROC_REF(hack_open), source, user, tool) + return ITEM_INTERACT_SUCCESS + +///Does a do_after to hack the storage open, takes a long time cause idk. +/datum/component/lockable_storage/proc/hack_open(atom/source, mob/user, obj/item/tool) + if(!tool.use_tool(parent, user, 40 SECONDS)) + return + source.balloon_alert(user, "hacked") + lock_code = null + +///Updates the icon state depending on if we're locked or not. +/datum/component/lockable_storage/proc/on_update_icon_state(obj/source) + SIGNAL_HANDLER + source.icon_state = "[source.base_icon_state][source.atom_storage.locked ? "_locked" : null]" + +///Called when interacted with in-hand or on attack, opens the UI. +/datum/component/lockable_storage/proc/on_interact(atom/source, mob/user) + SIGNAL_HANDLER + INVOKE_ASYNC(src, PROC_REF(ui_interact), user) + +/datum/component/lockable_storage/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "LockedSafe", parent) + ui.open() + +/datum/component/lockable_storage/ui_data(mob/user) + var/list/data = list() + var/atom/source = parent + data["input_code"] = numeric_input || "*****" + data["locked"] = source.atom_storage.locked + data["lock_code"] = !!lock_code //we just need to know if it has one. + return data + +/datum/component/lockable_storage/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(action != "keypad") + return TRUE + var/digit = params["digit"] + switch(digit) + //locking it back up + if("C") + var/atom/source = parent + numeric_input = "" + //you can't lock it if it's already locked or lacks a lock code. + if(source.atom_storage.locked || isnull(lock_code)) + return TRUE + source.atom_storage.locked = STORAGE_FULLY_LOCKED + source.atom_storage.hide_contents(usr) + source.update_appearance(UPDATE_ICON) + return TRUE + //setting a password & unlocking + if("E") + //inputting a new code if there isn't one set. + if(!lock_code) + if(length(numeric_input) != 5) + return TRUE + lock_code = numeric_input + numeric_input = "" + return TRUE + //unlocking the current code. + if(numeric_input != lock_code) + return TRUE + var/atom/source = parent + source.atom_storage.locked = STORAGE_NOT_LOCKED + numeric_input = "" + source.update_appearance(UPDATE_ICON) + return TRUE + //putting digits in. + if("0", "1", "2", "3", "4", "5", "6", "7", "8", "9") + if(length(numeric_input) == 5) + return + numeric_input += digit + return TRUE diff --git a/code/datums/components/magnet.dm b/code/datums/components/magnet.dm index 5c78b8665ce808..2d1d8932dfa626 100644 --- a/code/datums/components/magnet.dm +++ b/code/datums/components/magnet.dm @@ -40,7 +40,7 @@ STOP_PROCESSING(SSdcs, src) UnregisterSignal(parent, COMSIG_MOB_STATCHANGE) -/datum/component/magnet/Destroy(force, silent) +/datum/component/magnet/Destroy(force) STOP_PROCESSING(SSdcs, src) on_pulled = null on_contact = null diff --git a/code/datums/components/manual_blinking.dm b/code/datums/components/manual_blinking.dm index 1a742c6867853f..67229a8b85f5f8 100644 --- a/code/datums/components/manual_blinking.dm +++ b/code/datums/components/manual_blinking.dm @@ -22,7 +22,7 @@ last_blink = world.time to_chat(C, span_notice("You suddenly realize you're blinking manually.")) -/datum/component/manual_blinking/Destroy(force, silent) +/datum/component/manual_blinking/Destroy(force) E = null STOP_PROCESSING(SSdcs, src) to_chat(parent, span_notice("You revert back to automatic blinking.")) diff --git a/code/datums/components/manual_breathing.dm b/code/datums/components/manual_breathing.dm index 0488cce6aa34f0..d8d4fea07d9ec1 100644 --- a/code/datums/components/manual_breathing.dm +++ b/code/datums/components/manual_breathing.dm @@ -22,7 +22,7 @@ last_breath = world.time to_chat(C, span_notice("You suddenly realize you're breathing manually.")) -/datum/component/manual_breathing/Destroy(force, silent) +/datum/component/manual_breathing/Destroy(force) L = null STOP_PROCESSING(SSdcs, src) to_chat(parent, span_notice("You revert back to automatic breathing.")) diff --git a/code/datums/components/material/material_container.dm b/code/datums/components/material/material_container.dm index d26e427b1db44a..e84e3a46c82ce2 100644 --- a/code/datums/components/material/material_container.dm +++ b/code/datums/components/material/material_container.dm @@ -9,6 +9,9 @@ MAX_STACK_SIZE - size of a stack of mineral sheets. Constant. */ +//The full item was consumed +#define MATERIAL_INSERT_ITEM_SUCCESS 1 + /datum/component/material_container /// The maximum amount of materials this material container can contain var/max_amount @@ -27,13 +30,13 @@ /// Sets up the proper signals and fills the list of materials with the appropriate references. /datum/component/material_container/Initialize( - list/init_mats, - max_amt = 0, - _mat_container_flags = NONE, - list/allowed_mats = init_mats, - list/allowed_items, - list/container_signals - ) + list/init_mats, + max_amt = 0, + _mat_container_flags = NONE, + list/allowed_mats = init_mats, + list/allowed_items, + list/container_signals +) if(!isatom(parent)) return COMPONENT_INCOMPATIBLE @@ -71,7 +74,7 @@ RegisterSignal(atom_target, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM, PROC_REF(on_requesting_context_from_item)) -/datum/component/material_container/Destroy(force, silent) +/datum/component/material_container/Destroy(force) retrieve_all() materials = null allowed_materials = null @@ -130,15 +133,16 @@ * Arguments: * - [source][/obj/item]: The source of the materials we are inserting. * - multiplier: The multiplier for the materials extract from this item being inserted. - * - breakdown_flags: The breakdown bitflags that will be used to retrieve the materials from the source - * - context: the atom performing the operation, this is the last argument sent in COMSIG_MATCONTAINER_ITEM_CONSUMED and is used mostly for silo logging + * - context: the atom performing the operation, this is the last argument sent in COMSIG_MATCONTAINER_ITEM_CONSUMED + * and is used mostly for silo logging, the silo resends this signal on the context to give it a + * chance to process the item */ -/datum/component/material_container/proc/insert_item_materials(obj/item/source, multiplier = 1, breakdown_flags = mat_container_flags, atom/context = parent) +/datum/component/material_container/proc/insert_item_materials(obj/item/source, multiplier = 1, atom/context = parent) var/primary_mat var/max_mat_value = 0 var/material_amount = 0 - var/list/item_materials = source.get_material_composition(breakdown_flags) + var/list/item_materials = source.get_material_composition() var/list/mats_consumed = list() for(var/MAT in item_materials) if(!can_hold_material(MAT)) @@ -195,17 +199,16 @@ * Arguments: * - [weapon][obj/item]: the item you are trying to insert * - multiplier: The multiplier for the materials being inserted - * - breakdown_flags: The breakdown bitflags that will be used to retrieve the materials from the source * - context: the atom performing the operation, this is the last argument sent in COMSIG_MATCONTAINER_ITEM_CONSUMED and is used mostly for silo logging */ -/datum/component/material_container/proc/insert_item(obj/item/weapon, multiplier = 1, breakdown_flags = mat_container_flags, atom/context = parent) +/datum/component/material_container/proc/insert_item(obj/item/weapon, multiplier = 1, atom/context = parent) if(QDELETED(weapon)) return MATERIAL_INSERT_ITEM_NO_MATS multiplier = CEILING(multiplier, 0.01) var/obj/item/target = weapon - var/material_amount = OPTIMAL_COST(get_item_material_amount(target, breakdown_flags) * multiplier) + var/material_amount = OPTIMAL_COST(get_item_material_amount(target) * multiplier) if(!material_amount) return MATERIAL_INSERT_ITEM_NO_MATS var/obj/item/stack/item_stack @@ -219,7 +222,7 @@ if(!sheets_to_insert) return MATERIAL_INSERT_ITEM_NO_SPACE target = fast_split_stack(item_stack, sheets_to_insert) - material_amount = get_item_material_amount(target, breakdown_flags) * multiplier + material_amount = get_item_material_amount(target) * multiplier material_amount = OPTIMAL_COST(material_amount) //not enough space, time to bail @@ -227,7 +230,7 @@ return MATERIAL_INSERT_ITEM_NO_SPACE //do the insert - var/last_inserted_id = insert_item_materials(target, multiplier, breakdown_flags, context) + var/last_inserted_id = insert_item_materials(target, multiplier, context) if(!isnull(last_inserted_id)) qdel(target) //item gone return material_amount @@ -249,161 +252,231 @@ * Arguments: * * held_item - the item to insert * * user - the mob inserting this item - * * breakdown_flags - how this item and all it's contents inside are broken down during insertion. This is unique to the machine doing the insertion * * context - the atom performing the operation, this is the last argument sent in COMSIG_MATCONTAINER_ITEM_CONSUMED and is used mostly for silo logging */ -/datum/component/material_container/proc/user_insert(obj/item/held_item, mob/living/user, breakdown_flags = mat_container_flags, atom/context = parent) +/datum/component/material_container/proc/user_insert(obj/item/held_item, mob/living/user, atom/context = parent) set waitfor = FALSE . = 0 + //All items that do not have any contents + var/list/obj/item/child_items = list() + //All items that do have contents but they were already processed by the above list + var/list/obj/item/parent_items = list(held_item) + //is this the first item we are ever processing + var/first_checks = TRUE + //The status of the last insert attempt + var/inserted = 0 + //All messages to be displayed to chat + var/list/chat_msgs = list() + //differs from held_item when using TK var/active_held = user.get_active_held_item() - //don't attack the machine - if(!(mat_container_flags & MATCONTAINER_ANY_INTENT) && user.combat_mode) - return - //can't allow abstract, hologram items - if((held_item.item_flags & ABSTRACT) || (held_item.flags_1 & HOLOGRAM_1)) - return - //untouchable - if(held_item.resistance_flags & INDESTRUCTIBLE) - return - //user defined conditions - if(SEND_SIGNAL(src, COMSIG_MATCONTAINER_PRE_USER_INSERT, held_item, user) & MATCONTAINER_BLOCK_INSERT) - return - //get all contents of this item reccursively - var/list/contents = held_item.get_all_contents_type(/obj/item) - //anything that isn't a stack cannot be split so find out if we have enough space, we don't want to consume half the contents of an object & leave it in a broken state - if(!isstack(held_item)) - var/total_amount = 0 - for(var/obj/item/weapon in contents) - total_amount += get_item_material_amount(weapon, breakdown_flags) - if(!has_space(total_amount)) - to_chat(user, span_warning("[parent] doesn't have enough space for [held_item] [contents.len > 1 ? "And it's contents" : ""]!")) - return - - /** - * to reduce chat spams we group all messages and print them after everything is over - * usefull when we are trying to insert all stock parts of an RPED into the autolathe for example - */ - var/list/inserts = list() - var/list/errors = list() - - //loop through all contents inside this atom and salvage their material as well but in reverse so we don't delete parents before processing their children - for(var/i = length(contents); i >= 1 ; i--) - var/obj/item/target = contents[i] - - //not a solid subtype or an hologram - if((target.item_flags & ABSTRACT) || (target.flags_1 & HOLOGRAM_1)) - continue + var/static/list/storage_items + if(isnull(storage_items)) + storage_items = list( + /obj/item/storage/backpack, + /obj/item/storage/bag, + /obj/item/storage/box, + ) - //item is either not allowed for redemption, not in the allowed types - if((target.item_flags & NO_MAT_REDEMPTION) || (allowed_item_typecache && !is_type_in_typecache(target, allowed_item_typecache))) - if(!(mat_container_flags & MATCONTAINER_SILENT)) - to_chat(user, span_warning("[parent] won't accept [target]!")) - continue + //1st iteration consumes all items that do not have contents inside + //2nd iteration consumes items who do have contents inside(but they were consumed in the 1st iteration si its empty now) + for(var/i in 1 to 2) + //no point inserting more items + if(inserted == MATERIAL_INSERT_ITEM_NO_SPACE) + break - //untouchable, move it out the way, code copied from recycler - if(target.resistance_flags & INDESTRUCTIBLE) - if(!isturf(target.loc) && !isliving(target.loc)) - target.forceMove(get_turf(parent)) - continue + //transfer all items for processing + if(!parent_items.len) + break + child_items += parent_items + parent_items.Cut() + + while(child_items.len) + //Pop the 1st item out from the list + var/obj/item/target_item = child_items[1] + child_items -= target_item - //if stack, check if we want to read precise amount of sheets to insert - var/obj/item/stack/item_stack = null - if(isstack(target) && precise_insertion) - var/atom/current_parent = parent - item_stack = target - var/requested_amount = tgui_input_number(user, "How much do you want to insert?", "Inserting [item_stack.singular_name]s", item_stack.amount, item_stack.amount) - if(!requested_amount || QDELETED(target) || QDELETED(user) || QDELETED(src)) + //e.g. projectiles inside bullets are not objects + if(!istype(target_item)) continue - if(parent != current_parent || user.get_active_held_item() != active_held) + //can't allow abstract, hologram items + if((target_item.item_flags & ABSTRACT) || (target_item.flags_1 & HOLOGRAM_1)) continue - if(requested_amount != item_stack.amount) //only split if its not the whole amount - target = fast_split_stack(item_stack, requested_amount) //split off the requested amount - requested_amount = 0 - - //is this item a stack and was it split by the player? - var/was_stack_split = !isnull(item_stack) && item_stack != target - //if it was split then item_stack has the reference to the original stack/item - var/original_item = was_stack_split ? item_stack : target - //if this item is not the one the player is holding then don't remove it from their hand - if(original_item != active_held) - original_item = null - if(!isnull(original_item) && !user.temporarilyRemoveItemFromInventory(original_item)) //remove from hand(if split remove the original stack else the target) - to_chat(user, span_warning("[held_item] is stuck to you and cannot be placed into [parent].")) - return - - //insert the item - var/item_name = target.name - var/inserted = insert_item(target, 1, mat_container_flags, context) - if(inserted > 0) - . += inserted - inserted /= SHEET_MATERIAL_AMOUNT // display units inserted as sheets for improved readability - var/message = null - - //stack was either split by the container(!QDELETED(target) means the container only consumed a part of it) or by the player, put whats left back of the original stack back in players hand - if((!QDELETED(target) || was_stack_split)) - - //stack was split by player and that portion was not fully consumed, merge whats left back with the original stack - if(!QDELETED(target) && was_stack_split) - var/obj/item/stack/inserting_stack = target + //untouchable, move it out the way, code copied from recycler + if(target_item.resistance_flags & INDESTRUCTIBLE) + target_item.forceMove(get_turf(parent)) + continue + //user defined conditions + if(SEND_SIGNAL(src, COMSIG_MATCONTAINER_PRE_USER_INSERT, target_item, user) & MATCONTAINER_BLOCK_INSERT) + continue + //item is either not allowed for redemption, not in the allowed types + if((target_item.item_flags & NO_MAT_REDEMPTION) || (allowed_item_typecache && !is_type_in_typecache(target_item, allowed_item_typecache))) + if(!(mat_container_flags & MATCONTAINER_SILENT) && i == 1) //count only child items the 1st time around + var/list/status_data = chat_msgs["[MATERIAL_INSERT_ITEM_FAILURE]"] || list() + var/list/item_data = status_data[target_item.name] || list() + item_data["count"] += 1 + status_data[target_item.name] = item_data + chat_msgs["[MATERIAL_INSERT_ITEM_FAILURE]"] = status_data + + //storage items usually come here but we make the exception only on the 1st iteration + //this is so players can insert items from their bags into machines for convinience + if(!is_type_in_list(target_item, storage_items)) + continue + else if(!target_item.contents.len || i == 2) + continue + //at this point we can check if we have enough for all items & other stuff + if(first_checks) + //duffle bags needs to be unzipped + if(target_item.atom_storage?.locked) + if(!(mat_container_flags & MATCONTAINER_SILENT)) + to_chat(user, span_warning("[target_item] has its storage locked")) + return + + //anything that isn't a stack cannot be split so find out if we have enough space, we don't want to consume half the contents of an object & leave it in a broken state + //for duffle bags and other storage items we can check for space 1 item at a time + if(!isstack(target_item) && !is_type_in_list(target_item, storage_items)) + var/total_amount = 0 + for(var/obj/item/weapon as anything in target_item.get_all_contents_type(/obj/item)) + total_amount += get_item_material_amount(weapon) + if(!has_space(total_amount)) + if(!(mat_container_flags & MATCONTAINER_SILENT)) + to_chat(user, span_warning("[parent] does not have enough space for [target_item]!")) + return + + first_checks = FALSE + + //All hard checks have passed, at this point we can consume the item + //If it has children then we will process them first and then the item in the 2nd round + //This is done so we don't delete the children when the parent is consumed + //We only do this on the 1st iteration so we don't re-iterate through its children again + if(target_item.contents.len && i == 1) + if(target_item.atom_storage?.locked) //can't access contents of locked storage(like duffle bags) + continue + //process children + child_items += target_item.contents + //in the 2nd round only after its children are consumed do we consume this next, FIFO order + parent_items.Insert(1, target_item) + //leave it here till we get to its children + continue + + //if stack, check if we want to read precise amount of sheets to insert + var/obj/item/stack/item_stack = null + if(isstack(target_item) && precise_insertion) + var/atom/current_parent = parent + item_stack = target_item + var/requested_amount = tgui_input_number(user, "How much do you want to insert?", "Inserting [item_stack.singular_name]s", item_stack.amount, item_stack.amount) + if(!requested_amount || QDELETED(target_item) || QDELETED(user) || QDELETED(src)) + continue + if(parent != current_parent || user.get_active_held_item() != active_held) + continue + if(requested_amount != item_stack.amount) //only split if its not the whole amount + target_item = fast_split_stack(item_stack, requested_amount) //split off the requested amount + requested_amount = 0 + + //is this item a stack and was it split by the player? + var/was_stack_split = !isnull(item_stack) && item_stack != target_item + //if it was split then item_stack has the reference to the original stack/item + var/original_item = was_stack_split ? item_stack : target_item + //if this item is not the one the player is holding then don't remove it from their hand + if(original_item != active_held) + original_item = null + if(!isnull(original_item) && !user.temporarilyRemoveItemFromInventory(original_item)) //remove from hand(if split remove the original stack else the target) + return + + //insert the item + var/item_name = target_item.name + var/item_count = 1 + var/is_stack = FALSE + if(isstack(target_item)) + var/obj/item/stack/the_stack = target_item + item_name = the_stack.singular_name + item_count = the_stack.amount + is_stack = TRUE + inserted = insert_item(target_item, 1, context) + if(inserted > 0) + . += inserted + inserted /= SHEET_MATERIAL_AMOUNT // display units inserted as sheets for improved readability + + //stack was either split by the container(!QDELETED(target_item) means the container only consumed a part of it) or by the player, put whats left back of the original stack back in players hand + if((!QDELETED(target_item) || was_stack_split)) + + //stack was split by player and that portion was not fully consumed, merge whats left back with the original stack + if(!QDELETED(target_item) && was_stack_split) + var/obj/item/stack/inserting_stack = target_item + item_stack.add(inserting_stack.amount) + qdel(inserting_stack) + + //was this the original item in the players hand? put what's left back in the player's hand + if(!isnull(original_item)) + user.put_in_active_hand(original_item) + + //collect all messages to print later + var/list/status_data = chat_msgs["[MATERIAL_INSERT_ITEM_SUCCESS]"] || list() + var/list/item_data = status_data[item_name] || list() + item_data["count"] += item_count + item_data["amount"] += inserted + item_data["stack"] = is_stack + status_data[item_name] = item_data + chat_msgs["[MATERIAL_INSERT_ITEM_SUCCESS]"] = status_data + + else + //collect all messages to print later + var/list/status_data = chat_msgs["[inserted]"] || list() + var/list/item_data = status_data[item_name] || list() + item_data["count"] += item_count + status_data[item_name] = item_data + chat_msgs["[inserted]"] = status_data + + //player split the stack by the requested amount but even that split amount could not be salvaged. merge it back with the original + if(!isnull(item_stack) && was_stack_split) + var/obj/item/stack/inserting_stack = target_item item_stack.add(inserting_stack.amount) qdel(inserting_stack) - //was this the original item in the players hand? put what's left back in the player's hand + //was this the original item in the players hand? put it back because we coudn't salvage it if(!isnull(original_item)) user.put_in_active_hand(original_item) - message = "Only [inserted] sheets of [item_name] was consumed by [parent]." - //collect all messages to print later - if(!message) - message = "[item_name] worth [inserted] sheets of material was consumed by [parent]." - if(inserts[message]) - inserts[message] += 1 - else - inserts[message] = 1 - else - var/error_msg - if(inserted == MATERIAL_INSERT_ITEM_NO_SPACE) - error_msg = "[parent] has insufficient space to accept [target]" - else if(inserted == MATERIAL_INSERT_ITEM_NO_MATS) - error_msg = "[target] has insufficient materials to be accepted by [parent]" - else - error_msg = "[parent] refuses to accept [target]" - - //collect all messages to print later - if(errors[error_msg]) - errors[error_msg] += 1 - else - errors[error_msg] = 1 - - //player split the stack by the requested amount but even that split amount could not be salvaged. merge it back with the original - if(!isnull(item_stack) && was_stack_split) - var/obj/item/stack/inserting_stack = target - item_stack.add(inserting_stack.amount) - qdel(inserting_stack) - - //was this the original item in the players hand? put it back because we coudn't salvage it - if(!isnull(original_item)) - user.put_in_active_hand(original_item) - - //print successfull inserts - for(var/success_msg in inserts) - var/count = inserts[success_msg] - for(var/i in 1 to count) - to_chat(user, span_notice(success_msg)) - - //print errors last - for(var/error_msg in errors) - var/count = errors[error_msg] - for(var/i in 1 to count) - to_chat(user, span_warning(error_msg)) + //we can stop here as remaining items will fail to insert as well + if(inserted == MATERIAL_INSERT_ITEM_NO_SPACE) + break + + //we now summarize the chat msgs collected + if(!(mat_container_flags & MATCONTAINER_SILENT)) + for(var/status as anything in chat_msgs) + var/list/status_data = chat_msgs[status] + + for(var/item_name as anything in status_data) + //read the params + var/list/chat_data = status_data[item_name] + var/count = chat_data["count"] + var/amount = chat_data["amount"] + + //decode the message + switch(text2num(status)) + if(MATERIAL_INSERT_ITEM_SUCCESS) //no problems full item was consumed + if(chat_data["stack"]) + var/sheets = min(count, amount) //minimum between sheets inserted vs sheets consumed(values differ for alloys) + to_chat(user, span_notice("[sheets > 1 ? sheets : ""] [item_name][sheets > 1 ? "'s" : ""] was consumed by [parent]")) + else + to_chat(user, span_notice("[count > 1 ? count : ""] [item_name][count > 1 ? "'s" : ""] worth [amount] sheets of material was consumed by [parent]")) + if(MATERIAL_INSERT_ITEM_NO_SPACE) //no space + to_chat(user, span_warning("[parent] has no space to accept [item_name]")) + if(MATERIAL_INSERT_ITEM_NO_MATS) //no materials inside these items + to_chat(user, span_warning("[count > 1 ? count : ""] [item_name][count > 1 ? "'s" : ""] has no materials to be accepted by [parent]")) + if(MATERIAL_INSERT_ITEM_FAILURE) //could be because the material type was not accepted or other stuff + to_chat(user, span_warning("[count > 1 ? count : ""] [item_name][count > 1 ? "'s" : ""] was rejected by [parent]")) /// Proc that allows players to fill the parent with mats /datum/component/material_container/proc/on_attackby(datum/source, obj/item/weapon, mob/living/user) SIGNAL_HANDLER + //Allows you to attack the machine with iron sheets for e.g. + if(!(mat_container_flags & MATCONTAINER_ANY_INTENT) && user.combat_mode) + return + user_insert(weapon, user) return COMPONENT_NO_AFTERATTACK @@ -417,7 +490,7 @@ * Proc that returns TRUE if the container has space * * Arguments: - * - amt: can this container hold this much amount of materials + * * amt - can this container hold this much amount of materials */ /datum/component/material_container/proc/has_space(amt = 0) return (total_amount() + amt) <= max_amount @@ -462,13 +535,12 @@ * * Arguments: * - [I][obj/item]: the item whos materials must be retrieved - * - breakdown_flags: how this item must be broken down to retrieve its materials */ -/datum/component/material_container/proc/get_item_material_amount(obj/item/I, breakdown_flags = mat_container_flags) +/datum/component/material_container/proc/get_item_material_amount(obj/item/I) if(!istype(I) || !I.custom_materials) return 0 var/material_amount = 0 - var/list/item_materials = I.get_material_composition(breakdown_flags) + var/list/item_materials = I.get_material_composition() for(var/MAT in item_materials) if(!can_hold_material(MAT)) continue @@ -673,7 +745,7 @@ return NONE if((held_item.flags_1 & HOLOGRAM_1) || (held_item.item_flags & NO_MAT_REDEMPTION) || (allowed_item_typecache && !is_type_in_typecache(held_item, allowed_item_typecache))) return NONE - var/list/item_materials = held_item.get_material_composition(mat_container_flags) + var/list/item_materials = held_item.get_material_composition() if(!length(item_materials)) return NONE for(var/material in item_materials) @@ -684,3 +756,5 @@ context[SCREENTIP_CONTEXT_LMB] = "Insert" return CONTEXTUAL_SCREENTIP_SET + +#undef MATERIAL_INSERT_ITEM_SUCCESS diff --git a/code/datums/components/material/remote_materials.dm b/code/datums/components/material/remote_materials.dm index 17561581083140..33d85a5376f704 100644 --- a/code/datums/components/material/remote_materials.dm +++ b/code/datums/components/material/remote_materials.dm @@ -19,15 +19,24 @@ handles linking back and forth. var/allow_standalone ///Local size of container when silo = null var/local_size = INFINITY - ///Flags used when converting inserted materials into their component materials. + ///Flags used for the local material container(exceptions for item insert & intent flags) var/mat_container_flags = NONE - -/datum/component/remote_materials/Initialize(mapload, allow_standalone = TRUE, force_connect = FALSE, mat_container_flags = NONE) + ///List of signals to hook onto the local container + var/list/mat_container_signals + +/datum/component/remote_materials/Initialize( + mapload, + allow_standalone = TRUE, + force_connect = FALSE, + mat_container_flags = NONE, + list/mat_container_signals = null +) if (!isatom(parent)) return COMPONENT_INCOMPATIBLE src.allow_standalone = allow_standalone src.mat_container_flags = mat_container_flags + src.mat_container_signals = mat_container_signals RegisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), PROC_REF(OnMultitool)) @@ -35,7 +44,8 @@ handles linking back and forth. var/connect_to_silo = FALSE if(force_connect || (mapload && is_station_level(T.z))) connect_to_silo = TRUE - RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, TYPE_PROC_REF(/datum/component/remote_materials, SiloAttackBy)) + if(!(mat_container_flags & MATCONTAINER_NO_INSERT)) + RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, TYPE_PROC_REF(/datum/component/remote_materials, SiloAttackBy)) if(mapload) // wait for silo to initialize during mapload addtimer(CALLBACK(src, PROC_REF(_PrepareStorage), connect_to_silo)) @@ -50,6 +60,8 @@ handles linking back and forth. * only if allow_standalone = TRUE, else you a null mat_container */ /datum/component/remote_materials/proc/_PrepareStorage(connect_to_silo) + PRIVATE_PROC(TRUE) + if (connect_to_silo) silo = GLOB.ore_silo_default if (silo) @@ -68,6 +80,8 @@ handles linking back and forth. return ..() /datum/component/remote_materials/proc/_MakeLocal() + PRIVATE_PROC(TRUE) + silo = null var/static/list/allowed_mats = list( @@ -89,6 +103,7 @@ handles linking back and forth. allowed_mats, \ local_size, \ mat_container_flags, \ + container_signals = mat_container_signals, \ allowed_items = /obj/item/stack \ ) @@ -124,11 +139,15 @@ handles linking back and forth. _MakeLocal() ///Insert mats into silo -/datum/component/remote_materials/proc/SiloAttackBy(datum/source, obj/item/target, mob/user) +/datum/component/remote_materials/proc/SiloAttackBy(datum/source, obj/item/target, mob/living/user) SIGNAL_HANDLER + //Allows you to attack the machine with iron sheets for e.g. + if(!(mat_container_flags & MATCONTAINER_ANY_INTENT) && user.combat_mode) + return + if(silo) - mat_container.user_insert(target, user, mat_container_flags, parent) + mat_container.user_insert(target, user, parent) return COMPONENT_NO_AFTERATTACK @@ -136,15 +155,15 @@ handles linking back and forth. SIGNAL_HANDLER if(!I.multitool_check_buffer(user, I)) - return COMPONENT_BLOCK_TOOL_ATTACK + return ITEM_INTERACT_BLOCKING var/obj/item/multitool/M = I if (!QDELETED(M.buffer) && istype(M.buffer, /obj/machinery/ore_silo)) if (silo == M.buffer) to_chat(user, span_warning("[parent] is already connected to [silo]!")) - return COMPONENT_BLOCK_TOOL_ATTACK + return ITEM_INTERACT_BLOCKING if(!check_z_level(M.buffer)) to_chat(user, span_warning("[parent] is too far away to get a connection signal!")) - return COMPONENT_BLOCK_TOOL_ATTACK + return ITEM_INTERACT_BLOCKING var/obj/machinery/ore_silo/new_silo = M.buffer var/datum/component/material_container/new_container = new_silo.GetComponent(/datum/component/material_container) @@ -166,9 +185,10 @@ handles linking back and forth. silo.ore_connected_machines += src silo.updateUsrDialog() mat_container = new_container - RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, TYPE_PROC_REF(/datum/component/remote_materials, SiloAttackBy)) + if(!(mat_container_flags & MATCONTAINER_NO_INSERT)) + RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, TYPE_PROC_REF(/datum/component/remote_materials, SiloAttackBy)) to_chat(user, span_notice("You connect [parent] to [silo] from the multitool's buffer.")) - return COMPONENT_BLOCK_TOOL_ATTACK + return ITEM_INTERACT_BLOCKING /** * Checks if the param silo is in the same level as this components parent i.e. connected machine, rcd, etc @@ -195,15 +215,19 @@ handles linking back and forth. * - The parent is of type movable atom * - A mat container is actually present * - The silo in not on hold + * Arguments + * * check_hold - should we check if the silo is on hold */ -/datum/component/remote_materials/proc/_can_use_resource() +/datum/component/remote_materials/proc/_can_use_resource(check_hold = TRUE) + PRIVATE_PROC(TRUE) + var/atom/movable/movable_parent = parent if (!istype(movable_parent)) return FALSE if (!mat_container) //no silolink & local storage not supported movable_parent.say("No access to material storage, please contact the quartermaster.") return FALSE - if(on_hold()) //silo on hold + if(check_hold && on_hold()) //silo on hold movable_parent.say("Mineral access is on hold, please contact the quartermaster.") return FALSE return TRUE @@ -250,3 +274,16 @@ handles linking back and forth. drop_target = movable_parent.drop_location() return mat_container.retrieve_sheets(eject_amount, material_ref, target = drop_target, context = parent) + +/** + * Insert an item into the mat container, helper proc to insert items with the correct context + * + * Arguments + * * obj/item/weapon - the item you are trying to insert + * * multiplier - the multiplier applied on the materials consumed + */ +/datum/component/remote_materials/proc/insert_item(obj/item/weapon, multiplier = 1) + if(!_can_use_resource(FALSE)) + return MATERIAL_INSERT_ITEM_FAILURE + + return mat_container.insert_item(weapon, multiplier, parent) diff --git a/code/datums/components/mind_linker.dm b/code/datums/components/mind_linker.dm index 41ed23ecc2fba2..d22999512d9cd5 100644 --- a/code/datums/components/mind_linker.dm +++ b/code/datums/components/mind_linker.dm @@ -65,13 +65,13 @@ master_speech.Grant(owner) */ //ORIGINAL CODE END - //SKYRAT EDIT - NIFs + //NOVA EDIT - NIFs if(speech_action) master_speech = new(src) master_speech.Grant(owner) - //SKYRAT EDIT END + //NOVA EDIT END -/datum/component/mind_linker/Destroy(force, silent) +/datum/component/mind_linker/Destroy(force) for(var/mob/living/remaining_mob as anything in linked_mobs) unlink_mob(remaining_mob) linked_mobs.Cut() @@ -102,12 +102,12 @@ if(to_link.can_block_magic(MAGIC_RESISTANCE_MIND, charge_cost = 0)) return FALSE */ //ORIGINAL CODE END - //SKYRAT EDIT START + //NOVA EDIT START if(HAS_TRAIT(to_link, TRAIT_MINDSHIELD) && linking_protection) // Mindshield implant - no dice return FALSE if(to_link.can_block_magic(MAGIC_RESISTANCE_MIND, charge_cost = 0) && linking_protection) return FALSE - //SKYRAT EDIT END + //NOVA EDIT END if(linked_mobs[to_link]) return FALSE diff --git a/code/datums/components/mob_chain.dm b/code/datums/components/mob_chain.dm index 2ff7c4f19677ce..a258fe3f5be601 100644 --- a/code/datums/components/mob_chain.dm +++ b/code/datums/components/mob_chain.dm @@ -28,7 +28,7 @@ var/mob/living/living_parent = parent living_parent.set_glide_size(front.glide_size) -/datum/component/mob_chain/Destroy(force, silent) +/datum/component/mob_chain/Destroy(force) if (!isnull(front)) SEND_SIGNAL(front, COMSIG_MOB_LOST_CHAIN_TAIL, parent) front = null @@ -63,7 +63,6 @@ COMSIG_CARBON_LIMB_DAMAGED, COMSIG_LIVING_ADJUST_BRUTE_DAMAGE, COMSIG_LIVING_ADJUST_BURN_DAMAGE, - COMSIG_LIVING_ADJUST_CLONE_DAMAGE, COMSIG_LIVING_DEATH, COMSIG_LIVING_ADJUST_OXY_DAMAGE, COMSIG_LIVING_ADJUST_STAMINA_DAMAGE, @@ -188,8 +187,6 @@ back.adjustToxLoss(amount, forced = forced) if(OXY) // If all segments are suffocating we pile damage backwards until our ass starts dying forwards back.adjustOxyLoss(amount, forced = forced) - if(CLONE) - back.adjustCloneLoss(amount, forced = forced) return COMPONENT_IGNORE_CHANGE /// Special handling for if damage is delegated to a mob's limbs instead of its overall damage diff --git a/code/datums/components/mob_harvest.dm b/code/datums/components/mob_harvest.dm index 8342ee411fe804..b9f9f86350be5f 100644 --- a/code/datums/components/mob_harvest.dm +++ b/code/datums/components/mob_harvest.dm @@ -42,7 +42,7 @@ item_generation_time = item_generation_wait START_PROCESSING(SSobj, src) -/datum/component/mob_harvest/Destroy(force, silent) +/datum/component/mob_harvest/Destroy(force) STOP_PROCESSING(SSobj, src) return ..() diff --git a/code/datums/components/nuclear_bomb_operator.dm b/code/datums/components/nuclear_bomb_operator.dm index da6e8b0cab12dd..6ab9330e5ca791 100644 --- a/code/datums/components/nuclear_bomb_operator.dm +++ b/code/datums/components/nuclear_bomb_operator.dm @@ -48,7 +48,7 @@ )) parent.remove_traits(list(TRAIT_DISK_VERIFIER, TRAIT_CAN_STRIP, TRAIT_CAN_USE_NUKE), NUKE_OP_MINION_TRAIT) -/datum/component/nuclear_bomb_operator/Destroy(force, silent) +/datum/component/nuclear_bomb_operator/Destroy(force) QDEL_NULL(disky) on_disk_collected = null add_disk_overlays = null diff --git a/code/datums/components/object_possession.dm b/code/datums/components/object_possession.dm new file mode 100644 index 00000000000000..c62f0905068b1f --- /dev/null +++ b/code/datums/components/object_possession.dm @@ -0,0 +1,127 @@ +/// Component that allows a user to control any object as if it were a mob. Does give the user incorporeal movement. +/datum/component/object_possession + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + /// Stores a reference to the obj that we are currently possessing. + var/obj/possessed = null + /// Ref to the screen object that is currently being displayed. + var/datum/weakref/screen_alert_ref = null + /** + * back up of the real name during user possession + * + * When a user possesses an object it's real name is set to the user name and this + * stores whatever the real name was previously. When possession ends, the real name + * is reset to this value + */ + var/stashed_name = null + +/datum/component/object_possession/Initialize(obj/target) + . = ..() + if(!isobj(target) || !ismob(parent)) + return COMPONENT_INCOMPATIBLE + + if(!bind_to_new_object(target)) + return COMPONENT_INCOMPATIBLE + + var/mob/user = parent + screen_alert_ref = WEAKREF(user.throw_alert(ALERT_UNPOSSESS_OBJECT, /atom/movable/screen/alert/unpossess_object)) + + // we can expect to be possessed by either a nonliving or a living mob + RegisterSignals(parent, list(COMSIG_MOB_CLIENT_PRE_LIVING_MOVE, COMSIG_MOB_CLIENT_PRE_NON_LIVING_MOVE), PROC_REF(on_move)) + RegisterSignals(parent, list(COMSIG_MOB_GHOSTIZED, COMSIG_KB_ADMIN_AGHOST_DOWN), PROC_REF(end_possession)) + +/datum/component/object_possession/Destroy() + cleanup_object_binding() + UnregisterSignal(parent, list( + COMSIG_KB_ADMIN_AGHOST_DOWN, + COMSIG_MOB_CLIENT_PRE_LIVING_MOVE, + COMSIG_MOB_CLIENT_PRE_NON_LIVING_MOVE, + COMSIG_MOB_GHOSTIZED, + )) + + var/mob/user = parent + var/atom/movable/screen/alert/alert_to_clear = screen_alert_ref?.resolve() + if(!QDELETED(alert_to_clear)) + user.clear_alert(ALERT_UNPOSSESS_OBJECT) + + return ..() + +/datum/component/object_possession/InheritComponent(datum/component/object_possession/old_component, i_am_original, obj/target) + cleanup_object_binding() + if(!bind_to_new_object(target)) + qdel(src) + + stashed_name = old_component.stashed_name + +/// Binds the mob to the object and sets up the naming and everything. +/// Returns FALSE if we don't bind, TRUE if we succeed. +/datum/component/object_possession/proc/bind_to_new_object(obj/target) + if((target.obj_flags & DANGEROUS_POSSESSION) && CONFIG_GET(flag/forbid_singulo_possession)) + to_chat(parent, "[target] is too powerful for you to possess.", confidential = TRUE) + return FALSE + + var/mob/user = parent + + stashed_name = user.real_name + possessed = target + + user.forceMove(target) + user.real_name = target.name + user.name = target.name + user.reset_perspective(target) + + target.AddElement(/datum/element/weather_listener, /datum/weather/ash_storm, ZTRAIT_ASHSTORM, GLOB.ash_storm_sounds) + + RegisterSignal(target, COMSIG_QDELETING, PROC_REF(end_possession)) + return TRUE + +/// Cleans up everything pertinent to the current possessed object. +/datum/component/object_possession/proc/cleanup_object_binding() + if(QDELETED(possessed)) + return + + var/mob/poltergeist = parent + + possessed.RemoveElement(/datum/element/weather_listener, /datum/weather/ash_storm, ZTRAIT_ASHSTORM, GLOB.ash_storm_sounds) + UnregisterSignal(possessed, COMSIG_QDELETING) + + if(!isnull(stashed_name)) + poltergeist.real_name = stashed_name + poltergeist.name = stashed_name + if(ishuman(poltergeist)) + var/mob/living/carbon/human/human_user = poltergeist + human_user.name = human_user.get_visible_name() + + poltergeist.forceMove(get_turf(possessed)) + poltergeist.reset_perspective() + + possessed = null + +/** + * force move the parent object instead of the source mob. + * + * Has no sanity other than checking the possed obj's density. this means it effectively has incorporeal movement, making it only good for badminnery. + * + * We always want to return `COMPONENT_MOVABLE_BLOCK_PRE_MOVE` here regardless + */ +/datum/component/object_possession/proc/on_move(datum/source, new_loc, direct) + SIGNAL_HANDLER + . = COMPONENT_MOVABLE_BLOCK_PRE_MOVE // both signals that invoke this are explicitly tied to listen for this define as the return value + + if(QDELETED(possessed)) + return . + + if(!possessed.density) + possessed.forceMove(get_step(possessed, direct)) + else + step(possessed, direct) + + if(QDELETED(possessed)) + return . + + possessed.setDir(direct) + return . + +/// Just the overall "get me outta here" proc. +/datum/component/object_possession/proc/end_possession(datum/source) + SIGNAL_HANDLER + qdel(src) diff --git a/code/datums/components/omen.dm b/code/datums/components/omen.dm index 8b7a751ef2704c..56af8e6a9db263 100644 --- a/code/datums/components/omen.dm +++ b/code/datums/components/omen.dm @@ -17,7 +17,7 @@ /// Base damage from negative events. Cursed take 25% of this damage. var/damage_mod = 1 -/datum/component/omen/Initialize(obj/vessel, incidents_left = 1, luck_mod, damage_mod) +/datum/component/omen/Initialize(obj/vessel, incidents_left, luck_mod, damage_mod) if(!isliving(parent)) return COMPONENT_INCOMPATIBLE @@ -31,6 +31,8 @@ if(!isnull(damage_mod)) src.damage_mod = damage_mod + ADD_TRAIT(parent, TRAIT_CURSED, SMITE_TRAIT) + /** * This is a omen eat omen world! The stronger omen survives. */ @@ -50,6 +52,7 @@ /datum/component/omen/Destroy(force) var/mob/living/person = parent + REMOVE_TRAIT(person, TRAIT_CURSED, SMITE_TRAIT) to_chat(person, span_nicegreen("You feel a horrible omen lifted off your shoulders!")) if(vessel) diff --git a/code/datums/components/on_hit_effect.dm b/code/datums/components/on_hit_effect.dm index 38610395248b32..4093249c1ad46f 100644 --- a/code/datums/components/on_hit_effect.dm +++ b/code/datums/components/on_hit_effect.dm @@ -11,14 +11,17 @@ var/datum/callback/on_hit_callback ///callback optionally used for more checks var/datum/callback/extra_check_callback + ///optionally should we also apply the effect if thrown at something? + var/thrown_effect -/datum/component/on_hit_effect/Initialize(on_hit_callback, extra_check_callback) +/datum/component/on_hit_effect/Initialize(on_hit_callback, extra_check_callback, thrown_effect = FALSE) src.on_hit_callback = on_hit_callback src.extra_check_callback = extra_check_callback if(!(ismachinery(parent) || isstructure(parent) || isgun(parent) || isprojectilespell(parent) || isitem(parent) || isanimal_or_basicmob(parent) || isprojectile(parent))) return ELEMENT_INCOMPATIBLE + src.thrown_effect = thrown_effect -/datum/component/on_hit_effect/Destroy(force, silent) +/datum/component/on_hit_effect/Destroy(force) on_hit_callback = null extra_check_callback = null return ..() @@ -33,12 +36,16 @@ else if(isprojectile(parent)) RegisterSignal(parent, COMSIG_PROJECTILE_SELF_ON_HIT, PROC_REF(on_projectile_self_hit)) + if(thrown_effect) + RegisterSignal(parent, COMSIG_MOVABLE_IMPACT, PROC_REF(on_thrown_hit)) + /datum/component/on_hit_effect/UnregisterFromParent() UnregisterSignal(parent, list( COMSIG_PROJECTILE_ON_HIT, COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_POST_ATTACKINGTARGET, COMSIG_PROJECTILE_SELF_ON_HIT, + COMSIG_MOVABLE_IMPACT, )) /datum/component/on_hit_effect/proc/item_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters) @@ -79,3 +86,9 @@ if(!extra_check_callback.Invoke(firer, target)) return on_hit_callback.Invoke(source, firer, target, body_zone) + +/datum/component/on_hit_effect/proc/on_thrown_hit(datum/source, atom/hit_atom, datum/thrownthing/throwingdatum) + SIGNAL_HANDLER + if(extra_check_callback && !extra_check_callback.Invoke(source, hit_atom)) + return + on_hit_callback.Invoke(source, source, hit_atom, null) diff --git a/code/datums/components/orbit_poll.dm b/code/datums/components/orbit_poll.dm index d9563aaab95b05..ceb85d16d64c7d 100644 --- a/code/datums/components/orbit_poll.dm +++ b/code/datums/components/orbit_poll.dm @@ -47,13 +47,13 @@ var/message = custom_message || "[capitalize(src.title)] is looking for volunteers" - notify_ghosts("[message]. An orbiter will be chosen in [DisplayTimeText(timeout)].\n", \ - action = NOTIFY_ORBIT, \ - enter_link = "(Ignore)", \ - flashwindow = FALSE, \ - header = "Volunteers requested", \ - ignore_key = ignore_key, \ - source = parent \ + notify_ghosts( + "[message]. An orbiter will be chosen in [DisplayTimeText(timeout)].\n", + source = parent, + header = "Volunteers requested", + custom_link = " (Ignore)", + ignore_key = ignore_key, + notify_flags = NOTIFY_CATEGORY_NOFLASH, ) addtimer(CALLBACK(src, PROC_REF(end_poll)), timeout, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE|TIMER_DELETE_ME) @@ -84,22 +84,47 @@ return for(var/mob/dead/observer/ghost as anything in orbiter_comp.orbiter_list) - if(QDELETED(ghost) || isnull(ghost.client)) + var/client/ghost_client = ghost.client + + if(QDELETED(ghost) || isnull(ghost_client)) continue + if(is_banned_from(ghost.ckey, job_bans)) continue + var/datum/preferences/ghost_prefs = ghost_client.prefs + if(isnull(ghost_prefs)) + candidates += ghost // we'll assume they wanted to be picked despite prefs being null for whatever fucked up reason + continue + + if(!ghost_prefs.read_preference(/datum/preference/toggle/ghost_roles)) + continue + if(!isnull(ghost_client.holder) && !ghost_prefs.read_preference(/datum/preference/toggle/ghost_roles_as_admin)) + continue + candidates += ghost - if(!length(candidates)) + pick_and_offer(candidates) + +/// Takes a list, picks a candidate, and offers the role to them. +/datum/component/orbit_poll/proc/pick_and_offer(list/volunteers) + if(length(volunteers) <= 0) phone_home() return - var/mob/dead/observer/chosen = pick(candidates) + var/mob/dead/observer/chosen = pick(volunteers) + + if(isnull(chosen)) + phone_home() + return - if(chosen) - deadchat_broadcast("[key_name(chosen, include_name = FALSE)] was selected for the role ([title]).", "Ghost Poll: ", parent) + SEND_SOUND(chosen, 'sound/misc/notice2.ogg') + var/response = tgui_alert(chosen, "Do you want to assume the role of [title]?", "Orbit Polling", list("Yes", "No"), 10 SECONDS) + if(response != "Yes") + var/reusable_list = volunteers - chosen + return pick_and_offer(reusable_list) + deadchat_broadcast("[key_name(chosen, include_name = FALSE)] was selected for the role ([title]).", "Ghost Poll: ", parent) phone_home(chosen) /// Make sure to call your parents my dude diff --git a/code/datums/components/overlay_lighting.dm b/code/datums/components/overlay_lighting.dm index 236bb904ca2423..180c65b2239b77 100644 --- a/code/datums/components/overlay_lighting.dm +++ b/code/datums/components/overlay_lighting.dm @@ -266,6 +266,9 @@ ///Used to determine the new valid current_holder from the parent's loc. /datum/component/overlay_lighting/proc/check_holder() var/atom/movable/movable_parent = GET_PARENT + if(QDELETED(movable_parent)) + set_holder(null) + return if(isturf(movable_parent.loc)) set_holder(movable_parent) return @@ -274,7 +277,11 @@ set_holder(null) return if(isturf(inside.loc)) - set_holder(inside) + // storage items block light, also don't be moving into a qdeleted item + if(QDELETED(inside) || istype(inside, /obj/item/storage)) + set_holder(null) + else + set_holder(inside) return set_holder(null) @@ -283,6 +290,7 @@ /datum/component/overlay_lighting/proc/on_holder_qdel(atom/movable/source, force) SIGNAL_HANDLER if(QDELETED(current_holder)) + set_holder(null) return UnregisterSignal(current_holder, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED)) if(directional) diff --git a/code/datums/components/payment.dm b/code/datums/components/payment.dm index 005cd1fe03ea7b..eb5db5c85b5c0f 100644 --- a/code/datums/components/payment.dm +++ b/code/datums/components/payment.dm @@ -159,7 +159,7 @@ to_chat(user, span_warning("ID Card lacks funds. Aborting.")) atom_parent.balloon_alert(user, "needs [total_cost] credit\s!") return FALSE - target_acc.transfer_money(idcard.registered_account, total_cost, "Nanotrasen: Usage of Corporate Machinery") + target_acc.transfer_money(idcard.registered_account, total_cost, "Symphionia: Usage of Conglomeration Machinery") log_econ("[total_cost] credits were spent on [parent] by [user] via [idcard.registered_account.account_holder]'s card.") idcard.registered_account.bank_card_talk("[total_cost] credits deducted from your account.") playsound(src, 'sound/effects/cashregister.ogg', 20, TRUE) diff --git a/code/datums/components/pellet_cloud.dm b/code/datums/components/pellet_cloud.dm index fbd32fe5e4fbc1..5a34feafed7baf 100644 --- a/code/datums/components/pellet_cloud.dm +++ b/code/datums/components/pellet_cloud.dm @@ -55,7 +55,7 @@ /datum/component/pellet_cloud/Initialize(projectile_type=/obj/item/shrapnel, magnitude=5) - if(!isammocasing(parent) && !isgrenade(parent) && !islandmine(parent) && !issupplypod(parent) && !ishorrorling(parent)) //SKYRAT EDIT CHANGE: if(!isammocasing(parent) && !isgrenade(parent) && !islandmine(parent) && !issupplypod(parent)) + if(!isammocasing(parent) && !isgrenade(parent) && !islandmine(parent) && !issupplypod(parent) && !ishorrorling(parent)) //NOVA EDIT CHANGE: if(!isammocasing(parent) && !isgrenade(parent) && !islandmine(parent) && !issupplypod(parent)) return COMPONENT_INCOMPATIBLE if(magnitude < 1) @@ -66,10 +66,10 @@ if(isammocasing(parent)) num_pellets = magnitude - else if(isgrenade(parent) || islandmine(parent) || issupplypod(parent) || ishorrorling(parent)) //SKYRAT EDIT CHANGE: else if(isgrenade(parent) || islandmine(parent) || issupplypod(parent)) + else if(isgrenade(parent) || islandmine(parent) || issupplypod(parent) || ishorrorling(parent)) //NOVA EDIT CHANGE: else if(isgrenade(parent) || islandmine(parent) || issupplypod(parent)) radius = magnitude -/datum/component/pellet_cloud/Destroy(force, silent) +/datum/component/pellet_cloud/Destroy(force) purple_hearts = null pellets = null targets_hit = null @@ -88,10 +88,10 @@ RegisterSignal(parent, COMSIG_MINE_TRIGGERED, PROC_REF(create_blast_pellets)) else if(issupplypod(parent)) RegisterSignal(parent, COMSIG_SUPPLYPOD_LANDED, PROC_REF(create_blast_pellets)) - //SKYRAT EDIT ADDITION BEGIN + //NOVA EDIT ADDITION BEGIN else if(ishorrorling(parent)) RegisterSignal(parent, COMSIG_HORRORFORM_EXPLODE, PROC_REF(create_blast_pellets)) - //SKYRAT EDIT END + //NOVA EDIT END /datum/component/pellet_cloud/UnregisterFromParent() UnregisterSignal(parent, list(COMSIG_PREQDELETED, COMSIG_FIRE_CASING, COMSIG_GRENADE_DETONATE, COMSIG_GRENADE_ARMED, COMSIG_MOVABLE_MOVED, COMSIG_MINE_TRIGGERED, COMSIG_ITEM_DROPPED)) diff --git a/code/datums/components/pet_commands/fetch.dm b/code/datums/components/pet_commands/fetch.dm index ae33983e1d00d3..9a42c485d5c06e 100644 --- a/code/datums/components/pet_commands/fetch.dm +++ b/code/datums/components/pet_commands/fetch.dm @@ -3,7 +3,7 @@ * Watch for someone throwing or pointing at something and then go get it and bring it back. * If it's food we might eat it instead. */ -/datum/pet_command/point_targetting/fetch +/datum/pet_command/point_targeting/fetch command_name = "Fetch" command_desc = "Command your pet to retrieve something you throw or point at." radial_icon = 'icons/mob/actions/actions_spells.dmi' @@ -16,22 +16,22 @@ /// If true, this is a poorly trained pet who will eat food you throw instead of bringing it back var/will_eat_targets = TRUE -/datum/pet_command/point_targetting/fetch/New(mob/living/parent) +/datum/pet_command/point_targeting/fetch/New(mob/living/parent) . = ..() if(isnull(parent)) return parent.AddElement(/datum/element/ai_held_item) // We don't remove this on destroy because they might still be holding something -/datum/pet_command/point_targetting/fetch/add_new_friend(mob/living/tamer) +/datum/pet_command/point_targeting/fetch/add_new_friend(mob/living/tamer) . = ..() RegisterSignal(tamer, COMSIG_MOB_THROW, PROC_REF(listened_throw)) -/datum/pet_command/point_targetting/fetch/remove_friend(mob/living/unfriended) +/datum/pet_command/point_targeting/fetch/remove_friend(mob/living/unfriended) . = ..() UnregisterSignal(unfriended, COMSIG_MOB_THROW) /// A friend has thrown something, if we're listening or at least not busy then go get it -/datum/pet_command/point_targetting/fetch/proc/listened_throw(mob/living/carbon/thrower) +/datum/pet_command/point_targeting/fetch/proc/listened_throw(mob/living/carbon/thrower) SIGNAL_HANDLER var/mob/living/parent = weak_parent.resolve() @@ -57,7 +57,7 @@ RegisterSignal(thrown_thing, COMSIG_MOVABLE_THROW_LANDED, PROC_REF(listen_throw_land)) /// A throw we were listening to has finished, see if it's in range for us to try grabbing it -/datum/pet_command/point_targetting/fetch/proc/listen_throw_land(obj/item/thrown_thing, datum/thrownthing/throwing_datum) +/datum/pet_command/point_targeting/fetch/proc/listen_throw_land(obj/item/thrown_thing, datum/thrownthing/throwingdatum) SIGNAL_HANDLER UnregisterSignal(thrown_thing, COMSIG_MOVABLE_THROW_LANDED) @@ -69,12 +69,14 @@ if (!can_see(parent, thrown_thing, length = sense_radius)) return - try_activate_command(throwing_datum.thrower) - set_command_target(parent, thrown_thing) - parent.ai_controller.set_blackboard_key(BB_FETCH_DELIVER_TO, throwing_datum.thrower) + var/mob/thrower = throwingdatum?.get_thrower() + if(thrower) + try_activate_command(thrower) + set_command_target(parent, thrown_thing) + parent.ai_controller.set_blackboard_key(BB_FETCH_DELIVER_TO, thrower) // Don't try and fetch turfs or anchored objects if someone points at them -/datum/pet_command/point_targetting/fetch/look_for_target(mob/living/pointing_friend, obj/item/pointed_atom) +/datum/pet_command/point_targeting/fetch/look_for_target(mob/living/pointing_friend, obj/item/pointed_atom) if (!istype(pointed_atom)) return FALSE if (pointed_atom.anchored) @@ -87,7 +89,7 @@ parent.ai_controller.set_blackboard_key(BB_FETCH_DELIVER_TO, pointing_friend) // Finally, plan our actions -/datum/pet_command/point_targetting/fetch/execute_action(datum/ai_controller/controller) +/datum/pet_command/point_targeting/fetch/execute_action(datum/ai_controller/controller) controller.queue_behavior(/datum/ai_behavior/forget_failed_fetches) var/atom/target = controller.blackboard[BB_CURRENT_PET_TARGET] diff --git a/code/datums/components/pet_commands/obeys_commands.dm b/code/datums/components/pet_commands/obeys_commands.dm index efe01985d20ab0..2fceaa2b3379e5 100644 --- a/code/datums/components/pet_commands/obeys_commands.dm +++ b/code/datums/components/pet_commands/obeys_commands.dm @@ -22,7 +22,7 @@ var/datum/pet_command/new_command = new command_path(parent) available_commands[new_command.command_name] = new_command -/datum/component/obeys_commands/Destroy(force, silent) +/datum/component/obeys_commands/Destroy(force) . = ..() QDEL_NULL(available_commands) diff --git a/code/datums/components/pet_commands/pet_command.dm b/code/datums/components/pet_commands/pet_command.dm index 7899ffce40ae51..cf376b21001e8f 100644 --- a/code/datums/components/pet_commands/pet_command.dm +++ b/code/datums/components/pet_commands/pet_command.dm @@ -30,10 +30,18 @@ /// Register a new guy we want to listen to /datum/pet_command/proc/add_new_friend(mob/living/tamer) RegisterSignal(tamer, COMSIG_MOB_SAY, PROC_REF(respond_to_command)) + RegisterSignal(tamer, COMSIG_MOB_AUTOMUTE_CHECK, PROC_REF(waive_automute)) /// Stop listening to a guy /datum/pet_command/proc/remove_friend(mob/living/unfriended) - UnregisterSignal(unfriended, COMSIG_MOB_SAY) + UnregisterSignal(unfriended, list(COMSIG_MOB_SAY, COMSIG_MOB_AUTOMUTE_CHECK)) + +/// Stop the automute from triggering for commands (unless the spoken text is suspiciously longer than the command) +/datum/pet_command/proc/waive_automute(mob/living/speaker, client/client, last_message, mute_type) + SIGNAL_HANDLER + if(mute_type == MUTE_IC && find_command_in_text(last_message, check_verbosity = TRUE)) + return WAIVE_AUTOMUTE_CHECK + return NONE /// Respond to something that one of our friends has asked us to do /datum/pet_command/proc/respond_to_command(mob/living/speaker, speech_args) @@ -51,11 +59,16 @@ try_activate_command(speaker) -/// Returns true if we find any of our spoken commands in the text -/datum/pet_command/proc/find_command_in_text(spoken_text) +/** + * Returns true if we find any of our spoken commands in the text. + * if check_verbosity is true, skip the match if there spoken_text is way longer than the match + */ +/datum/pet_command/proc/find_command_in_text(spoken_text, check_verbosity = FALSE) for (var/command as anything in speech_commands) if (!findtext(spoken_text, command)) continue + if(check_verbosity && length(spoken_text) > length(command) + MAX_NAME_LEN) + continue return TRUE return FALSE @@ -109,25 +122,25 @@ CRASH("Pet command execute action not implemented.") /** - * # Point Targetting Pet Command + * # Point Targeting Pet Command * As above but also listens for you pointing at something and marks it as a target */ -/datum/pet_command/point_targetting +/datum/pet_command/point_targeting /// Text describing an action we perform upon receiving a new target var/pointed_reaction - /// Blackboard key for targetting datum, this is likely going to need it - var/targetting_datum_key = BB_PET_TARGETTING_DATUM + /// Blackboard key for targeting strategy, this is likely going to need it + var/targeting_strategy_key = BB_PET_TARGETING_STRATEGY -/datum/pet_command/point_targetting/add_new_friend(mob/living/tamer) +/datum/pet_command/point_targeting/add_new_friend(mob/living/tamer) . = ..() RegisterSignal(tamer, COMSIG_MOB_POINTED, PROC_REF(look_for_target)) -/datum/pet_command/point_targetting/remove_friend(mob/living/unfriended) +/datum/pet_command/point_targeting/remove_friend(mob/living/unfriended) . = ..() UnregisterSignal(unfriended, COMSIG_MOB_POINTED) /// Target the pointed atom for actions -/datum/pet_command/point_targetting/proc/look_for_target(mob/living/friend, atom/pointed_atom) +/datum/pet_command/point_targeting/proc/look_for_target(mob/living/friend, atom/pointed_atom) SIGNAL_HANDLER var/mob/living/parent = weak_parent.resolve() diff --git a/code/datums/components/pet_commands/pet_commands_basic.dm b/code/datums/components/pet_commands/pet_commands_basic.dm index 68a20fa77f2fde..9941f83e8b12b0 100644 --- a/code/datums/components/pet_commands/pet_commands_basic.dm +++ b/code/datums/components/pet_commands/pet_commands_basic.dm @@ -98,11 +98,27 @@ parent.emote("spin") return SUBTREE_RETURN_FINISH_PLANNING +/** + * # Pet Command: Use ability + * Use an an ability that does not require any targets + */ +/datum/pet_command/untargeted_ability + ///untargeted ability we will use + var/ability_key + +/datum/pet_command/untargeted_ability/execute_action(datum/ai_controller/controller) + var/datum/action/cooldown/ability = controller.blackboard[ability_key] + if(!ability?.IsAvailable()) + return + controller.queue_behavior(/datum/ai_behavior/use_mob_ability, ability_key) + controller.clear_blackboard_key(BB_ACTIVE_PET_COMMAND) + return SUBTREE_RETURN_FINISH_PLANNING + /** * # Pet Command: Attack * Tells a pet to chase and bite the next thing you point at */ -/datum/pet_command/point_targetting/attack +/datum/pet_command/point_targeting/attack command_name = "Attack" command_desc = "Command your pet to attack things that you point out to it." radial_icon = 'icons/effects/effects.dmi' @@ -117,13 +133,13 @@ var/attack_behaviour = /datum/ai_behavior/basic_melee_attack // Refuse to target things we can't target, chiefly other friends -/datum/pet_command/point_targetting/attack/set_command_target(mob/living/parent, atom/target) +/datum/pet_command/point_targeting/attack/set_command_target(mob/living/parent, atom/target) if (!target) return var/mob/living/living_parent = parent if (!living_parent.ai_controller) return - var/datum/targetting_datum/targeter = living_parent.ai_controller.blackboard[targetting_datum_key] + var/datum/targeting_strategy/targeter = GET_TARGETING_STRATEGY(living_parent.ai_controller.blackboard[targeting_strategy_key]) if (!targeter) return if (!targeter.can_attack(living_parent, target)) @@ -131,21 +147,52 @@ return return ..() -/// Display feedback about not targetting something -/datum/pet_command/point_targetting/attack/proc/refuse_target(mob/living/parent, atom/target) +/// Display feedback about not targeting something +/datum/pet_command/point_targeting/attack/proc/refuse_target(mob/living/parent, atom/target) var/mob/living/living_parent = parent living_parent.balloon_alert_to_viewers("[refuse_reaction]") living_parent.visible_message(span_notice("[living_parent] refuses to attack [target].")) -/datum/pet_command/point_targetting/attack/execute_action(datum/ai_controller/controller) - controller.queue_behavior(attack_behaviour, BB_CURRENT_PET_TARGET, targetting_datum_key) +/datum/pet_command/point_targeting/attack/execute_action(datum/ai_controller/controller) + controller.queue_behavior(attack_behaviour, BB_CURRENT_PET_TARGET, targeting_strategy_key) + return SUBTREE_RETURN_FINISH_PLANNING + +/** + * # Breed command. breed with a partner! + */ +/datum/pet_command/point_targeting/breed + command_name = "Breed" + command_desc = "Command your pet to attempt to breed with a partner." + 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)) + return + if(!HAS_TRAIT(parent, TRAIT_MOB_BREEDER) || !HAS_TRAIT(target, TRAIT_MOB_BREEDER)) + return + if(isnull(parent.ai_controller)) + return + if(!parent.ai_controller.blackboard[BB_BREED_READY] || isnull(parent.ai_controller.blackboard[BB_BABIES_PARTNER_TYPES])) + return + var/mob/living/living_target = target + if(!living_target.ai_controller?.blackboard[BB_BREED_READY]) + return + return ..() + +/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(reproduce_behavior, BB_CURRENT_PET_TARGET) + controller.clear_blackboard_key(BB_ACTIVE_PET_COMMAND) return SUBTREE_RETURN_FINISH_PLANNING /** * # Pet Command: Targetted Ability * Tells a pet to use some kind of ability on the next thing you point at */ -/datum/pet_command/point_targetting/use_ability +/datum/pet_command/point_targeting/use_ability command_name = "Use ability" command_desc = "Command your pet to use one of its special skills on something that you point out to it." radial_icon = 'icons/mob/actions/actions_spells.dmi' @@ -156,7 +203,7 @@ /// Blackboard key where a reference to some kind of mob ability is stored var/pet_ability_key -/datum/pet_command/point_targetting/use_ability/execute_action(datum/ai_controller/controller) +/datum/pet_command/point_targeting/use_ability/execute_action(datum/ai_controller/controller) if (!pet_ability_key) return var/datum/action/cooldown/using_action = controller.blackboard[pet_ability_key] @@ -188,10 +235,11 @@ var/mob/living/victim = controller.blackboard[BB_CURRENT_PET_TARGET] if(QDELETED(victim)) return - if(victim.stat > controller.blackboard[BB_TARGET_MINIMUM_STAT]) + // cancel the action if they're below our given crit stat, OR if we're trying to attack ourselves (this can happen on tamed mobs w/ protect subtree rarely) + if(victim.stat > controller.blackboard[BB_TARGET_MINIMUM_STAT] || victim == controller.pawn) controller.clear_blackboard_key(BB_ACTIVE_PET_COMMAND) return - controller.queue_behavior(protect_behavior, BB_CURRENT_PET_TARGET, BB_PET_TARGETTING_DATUM) + controller.queue_behavior(protect_behavior, BB_CURRENT_PET_TARGET, BB_PET_TARGETING_STRATEGY) return SUBTREE_RETURN_FINISH_PLANNING /datum/pet_command/protect_owner/set_command_active(mob/living/parent, mob/living/victim) diff --git a/code/datums/components/pinata.dm b/code/datums/components/pinata.dm index 1056200e3e270b..064bc2de26b26e 100644 --- a/code/datums/components/pinata.dm +++ b/code/datums/components/pinata.dm @@ -52,7 +52,7 @@ new dropped_item(get_turf(parent)) qdel(src) -/datum/component/pinata/Destroy(force, silent) +/datum/component/pinata/Destroy(force) UnregisterSignal(parent, list( COMSIG_MOB_APPLY_DAMAGE, COMSIG_LIVING_DEATH, diff --git a/code/datums/components/pinnable_accessory.dm b/code/datums/components/pinnable_accessory.dm new file mode 100644 index 00000000000000..9c92fdd4c84526 --- /dev/null +++ b/code/datums/components/pinnable_accessory.dm @@ -0,0 +1,80 @@ +/// This accessory can be pinned onto someone else +/datum/component/pinnable_accessory + /// Do we let people know what we're doing? + var/silent + /// How long does it take to pin this onto someone? + var/pinning_time + /// Optional callback invoked before pinning, will cancel if it returns FALSE + var/datum/callback/on_pre_pin + +/datum/component/pinnable_accessory/Initialize(silent = FALSE, pinning_time = 2 SECONDS, datum/callback/on_pre_pin = null) + . = ..() + if (!istype(parent, /obj/item/clothing/accessory)) + return COMPONENT_INCOMPATIBLE + src.silent = silent + src.pinning_time = pinning_time + src.on_pre_pin = on_pre_pin + +/datum/component/pinnable_accessory/RegisterWithParent() + RegisterSignal(parent, COMSIG_ITEM_INTERACTING_WITH_ATOM, PROC_REF(on_atom_interact)) + +/datum/component/pinnable_accessory/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_ITEM_INTERACTING_WITH_ATOM) + +/// Called when you whack someone with this accessory +/datum/component/pinnable_accessory/proc/on_atom_interact(obj/item/clothing/accessory/badge, mob/living/user, atom/target, modifiers) + SIGNAL_HANDLER + if (!ishuman(target) || target == user) + return + + INVOKE_ASYNC(src, PROC_REF(try_to_pin), badge, target, user) + return COMPONENT_CANCEL_ATTACK_CHAIN + +/// Actually try to pin it on +/datum/component/pinnable_accessory/proc/try_to_pin(obj/item/clothing/accessory/badge, mob/living/carbon/human/distinguished, mob/user) + var/obj/item/clothing/under/distinguished_uniform = distinguished.w_uniform + if(!istype(distinguished_uniform)) + distinguished.balloon_alert(user, "no uniform to pin on!") + return + + if(!badge.can_attach_accessory(distinguished_uniform, user)) + // Check handles feedback messages and etc + return + + if (!silent) + user.visible_message( + span_notice("[user] tries to pin [badge] on [distinguished]'s chest."), + span_notice("You try to pin [badge] on [distinguished]'s chest."), + ) + + if (on_pre_pin && !on_pre_pin.Invoke(distinguished, user)) + return + if(!pin_checks(user, distinguished) || !do_after(user, pinning_time, distinguished, extra_checks = CALLBACK(src, PROC_REF(pin_checks), user, distinguished))) + return + + var/pinned = distinguished_uniform.attach_accessory(badge, user) + if (silent) + return + + if (pinned) + user.visible_message( + span_notice("[user] pins [badge] on [distinguished]'s chest."), + span_notice("You pin [badge] on [distinguished]'s chest."), + ) + else + user.visible_message( + span_warning("[user] fails to pin [badge] on [distinguished]'s chest, seemingly unable to part with it."), + span_warning("You fail to pin [badge] on [distinguished]'s chest."), + ) + +/// Callback for do_after to check if we can still be pinned +/datum/component/pinnable_accessory/proc/pin_checks(mob/living/pinner, mob/living/carbon/human/pinning_on) + if(QDELETED(parent) || QDELETED(pinner) || QDELETED(pinning_on)) + return FALSE + if(!pinner.is_holding(parent) || !pinner.Adjacent(pinning_on)) + return FALSE + var/obj/item/clothing/accessory/badge = parent + var/obj/item/clothing/under/pinning_on_uniform = pinning_on.w_uniform + if(!istype(pinning_on_uniform) || !badge.can_attach_accessory(pinning_on_uniform, pinner)) + return FALSE + return TRUE diff --git a/code/datums/components/plumbing/_plumbing.dm b/code/datums/components/plumbing/_plumbing.dm index 00976c6c39db96..245f8f969a9801 100644 --- a/code/datums/components/plumbing/_plumbing.dm +++ b/code/datums/components/plumbing/_plumbing.dm @@ -20,8 +20,6 @@ var/ducting_layer = DUCT_LAYER_DEFAULT ///In-case we don't want the main machine to get the reagents, but perhaps whoever is buckled to it var/recipient_reagents_holder - ///How do we apply the new reagents to the receiver? Generally doesn't matter, but some stuff, like people, does care if its injected or whatevs - var/methods ///What color is our demand connect? var/demand_color = COLOR_RED ///What color is our supply connect? @@ -100,7 +98,7 @@ //find the duct to take from var/datum/ductnet/net if(!ducts.Find(num2text(dir))) - return + return FALSE net = ducts[num2text(dir)] //find all valid suppliers in the duct @@ -110,7 +108,7 @@ valid_suppliers += supplier var/suppliersLeft = valid_suppliers.len if(!suppliersLeft) - return + return FALSE //take an equal amount from each supplier var/currentRequest @@ -119,6 +117,7 @@ currentRequest = (target_volume - reagents.total_volume) / suppliersLeft give.transfer_to(src, currentRequest, reagent, net) suppliersLeft-- + return TRUE ///returns TRUE when they can give the specified amount and reagent. called by process request /datum/component/plumbing/proc/can_give(amount, reagent, datum/ductnet/net) @@ -138,10 +137,8 @@ /datum/component/plumbing/proc/transfer_to(datum/component/plumbing/target, amount, reagent, datum/ductnet/net) if(!reagents || !target || !target.reagents) return FALSE - if(reagent) - reagents.trans_id_to(target.recipient_reagents_holder, reagent, amount) - else - reagents.trans_to(target.recipient_reagents_holder, amount, methods = methods) + + reagents.trans_to(target.recipient_reagents_holder, amount, target_id = reagent) ///We create our luxurious piping overlays/underlays, to indicate where we do what. only called once if use_overlays = TRUE in Initialize() /datum/component/plumbing/proc/create_overlays(atom/movable/parent_movable, list/overlays) @@ -214,8 +211,11 @@ STOP_PROCESSING(SSplumbing, src) - for(var/duct_dir in ducts) - var/datum/ductnet/duct = ducts[duct_dir] + //remove_plumber() can remove all ducts at once if they all belong to the same pipenet + //for e.g. in case of circular connections + //so we check if we have ducts to remove after each iteration + while(ducts.len) + var/datum/ductnet/duct = ducts[ducts[1]] //for maps index 1 will return the 1st key duct.remove_plumber(src) active = FALSE diff --git a/code/datums/components/plumbing/chemical_acclimator.dm b/code/datums/components/plumbing/chemical_acclimator.dm index 777a2804a780fe..f84252c51de7b1 100644 --- a/code/datums/components/plumbing/chemical_acclimator.dm +++ b/code/datums/components/plumbing/chemical_acclimator.dm @@ -9,7 +9,7 @@ return COMPONENT_INCOMPATIBLE myacclimator = parent -/datum/component/plumbing/acclimator/Destroy(force, silent) +/datum/component/plumbing/acclimator/Destroy(force) myacclimator = null return ..() diff --git a/code/datums/components/plumbing/filter.dm b/code/datums/components/plumbing/filter.dm index 4b8dd8d54a6c2d..30e36c057886ee 100644 --- a/code/datums/components/plumbing/filter.dm +++ b/code/datums/components/plumbing/filter.dm @@ -31,7 +31,7 @@ direction = get_original_direction(text2num(A)) break if(reagent) - reagents.trans_id_to(target.parent, reagent, amount) + reagents.trans_to(target.parent, amount, target_id = reagent) else for(var/A in reagents.reagent_list) var/datum/reagent/R = A @@ -40,7 +40,7 @@ var/new_amount if(R.volume < amount) new_amount = amount - R.volume - reagents.trans_id_to(target.parent, R.type, amount) + reagents.trans_to(target.parent, amount, target_id = R.type) amount = new_amount if(amount <= 0) break diff --git a/code/datums/components/plumbing/reaction_chamber.dm b/code/datums/components/plumbing/reaction_chamber.dm index e76fb69ec1f9d8..d0aff2f50708c1 100644 --- a/code/datums/components/plumbing/reaction_chamber.dm +++ b/code/datums/components/plumbing/reaction_chamber.dm @@ -18,20 +18,21 @@ if(chamber.emptying) return + //take in reagents var/present_amount var/diff for(var/required_reagent in chamber.required_reagents) - //find how much amount is already present if at all + //find how much amount is already present if at all and get the reagent reference 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 + for(var/datum/reagent/present_reagent as anything in reagents.reagent_list) + if(required_reagent == present_reagent.type) + present_amount = present_reagent.volume break - //compute how much more is needed and round it - diff = chamber.required_reagents[required_reagent] - present_amount - if(diff >= 0.01) - process_request(min(diff, MACHINE_REAGENT_TRANSFER), required_reagent, dir) + //compute how much more is needed + diff = min(chamber.required_reagents[required_reagent] - present_amount, MACHINE_REAGENT_TRANSFER) + if(diff >= CHEMICAL_QUANTISATION_LEVEL) // the closest we can ask for so values like 0.9999 become 1 + process_request(diff, required_reagent, dir) return reagents.flags &= ~NO_REACT diff --git a/code/datums/components/puzzgrid.dm b/code/datums/components/puzzgrid.dm index 8a7620b06e32b2..611df16ccaa3d4 100644 --- a/code/datums/components/puzzgrid.dm +++ b/code/datums/components/puzzgrid.dm @@ -55,7 +55,7 @@ addtimer(CALLBACK(src, PROC_REF(out_of_time)), timer) time_to_finish = world.time + timer -/datum/component/puzzgrid/Destroy(force, silent) +/datum/component/puzzgrid/Destroy(force) puzzgrid = null on_victory_callback = null on_fail_callback = null diff --git a/code/datums/components/radioactive_emitter.dm b/code/datums/components/radioactive_emitter.dm index 6a95f36079c7b5..26e33855a11559 100644 --- a/code/datums/components/radioactive_emitter.dm +++ b/code/datums/components/radioactive_emitter.dm @@ -41,7 +41,7 @@ // Easier to handle edits to the cooldown duration, prevents timer spam for short cooldown emitters START_PROCESSING(SSfastprocess, src) -/datum/component/radioactive_emitter/Destroy(force, silent) +/datum/component/radioactive_emitter/Destroy(force) STOP_PROCESSING(SSfastprocess, src) return ..() diff --git a/code/datums/components/radioactive_exposure.dm b/code/datums/components/radioactive_exposure.dm index 0819b46f7dfa17..b8a034e7788299 100644 --- a/code/datums/components/radioactive_exposure.dm +++ b/code/datums/components/radioactive_exposure.dm @@ -66,7 +66,7 @@ qdel(src) -/datum/component/radioactive_exposure/Destroy(force, silent) +/datum/component/radioactive_exposure/Destroy(force) var/mob/living/carbon/human/human_parent = parent human_parent.clear_alert(ALERT_RADIOACTIVE_AREA) diff --git a/code/datums/components/ranged_attacks.dm b/code/datums/components/ranged_attacks.dm index f75d29a10f4549..2f9c6cb822da52 100644 --- a/code/datums/components/ranged_attacks.dm +++ b/code/datums/components/ranged_attacks.dm @@ -55,7 +55,9 @@ /datum/component/ranged_attacks/proc/fire_ranged_attack(mob/living/basic/firer, atom/target, modifiers) SIGNAL_HANDLER - if (!COOLDOWN_FINISHED(src, fire_cooldown)) + if(!COOLDOWN_FINISHED(src, fire_cooldown)) + return + if(SEND_SIGNAL(firer, COMSIG_BASICMOB_PRE_ATTACK_RANGED, target, modifiers) & COMPONENT_CANCEL_RANGED_ATTACK) return COOLDOWN_START(src, fire_cooldown, cooldown_time) INVOKE_ASYNC(src, PROC_REF(async_fire_ranged_attack), firer, target, modifiers) diff --git a/code/datums/components/ranged_mob_full_auto.dm b/code/datums/components/ranged_mob_full_auto.dm new file mode 100644 index 00000000000000..a33b705d548505 --- /dev/null +++ b/code/datums/components/ranged_mob_full_auto.dm @@ -0,0 +1,203 @@ +#define AUTOFIRE_MOUSEUP 1 +#define AUTOFIRE_MOUSEDOWN 0 + +/// Allows a mob to autofire by holding down the cursor +/datum/component/ranged_mob_full_auto + /// Delay before attempting to fire again, note that this is just when we make attempts and is separate from mob's actual firing cooldown + var/autofire_shot_delay + /// Our client for click tracking + var/client/clicker + /// Are we currently firing? + var/is_firing = FALSE + /// This seems hacky but there can be two MouseDown() without a MouseUp() in between if the user holds click and uses alt+tab, printscreen or similar. + var/awaiting_status = AUTOFIRE_MOUSEDOWN + /// What are we currently shooting at? + var/atom/target + /// Where are we currently shooting at? + var/turf/target_loc + /// When will we next try to shoot? + COOLDOWN_DECLARE(next_shot_cooldown) + +/datum/component/ranged_mob_full_auto/Initialize(autofire_shot_delay = 0.5 SECONDS) + . = ..() + if (!isliving(parent)) + return COMPONENT_INCOMPATIBLE + + src.autofire_shot_delay = autofire_shot_delay + + var/mob/living/living_parent = parent + if (isnull(living_parent.client)) + return + on_gained_client(parent) + +/datum/component/ranged_mob_full_auto/RegisterWithParent() + RegisterSignal(parent, COMSIG_MOB_LOGIN, PROC_REF(on_gained_client)) + RegisterSignal(parent, COMSIG_MOB_LOGOUT, PROC_REF(on_lost_client)) + +/datum/component/ranged_mob_full_auto/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_MOB_LOGIN, COMSIG_MOB_LOGOUT)) + +/datum/component/ranged_mob_full_auto/process(seconds_per_tick) + if (!try_shooting()) + return PROCESS_KILL + +/// Try and take a shot, returns false if we are unable to do so and should stop trying +/datum/component/ranged_mob_full_auto/proc/try_shooting() + if (!is_firing) + return FALSE + if (!COOLDOWN_FINISHED(src, next_shot_cooldown)) + return TRUE // Don't fire but also keep processing + + var/mob/living/living_parent = parent + + if (isnull(target) || get_turf(target) != target_loc) // Target moved or got destroyed since we last aimed. + set_target(target_loc) + target = target_loc // So we keep firing on the emptied tile until we move our mouse and find a new target. + if (get_dist(living_parent, target) <= 0) + set_target(get_step(living_parent, living_parent.dir)) // Shoot in the direction faced if the mouse is on the same tile as we are. + target_loc = target + else if (!in_view_range(living_parent, target)) + stop_firing() + return FALSE // Can't see shit + + living_parent.face_atom(target) + COOLDOWN_START(src, next_shot_cooldown, autofire_shot_delay) + living_parent.RangedAttack(target) + return TRUE + +/// Setter for reference handling +/datum/component/ranged_mob_full_auto/proc/set_target(atom/new_target) + if (!isnull(target)) + UnregisterSignal(target, COMSIG_QDELETING) + target = new_target + if (!isnull(target)) + RegisterSignal(target, COMSIG_QDELETING, PROC_REF(on_target_deleted)) + +/// Don't hang references +/datum/component/ranged_mob_full_auto/proc/on_target_deleted() + SIGNAL_HANDLER + set_target(null) + +/// When we gain a client, start tracking clicks +/datum/component/ranged_mob_full_auto/proc/on_gained_client(mob/living/source) + SIGNAL_HANDLER + clicker = source.client + RegisterSignal(clicker, COMSIG_CLIENT_MOUSEDOWN, PROC_REF(on_mouse_down)) + +/// When we lose our client, stop functioning +/datum/component/ranged_mob_full_auto/proc/on_lost_client(mob/living/source) + SIGNAL_HANDLER + if (!isnull(clicker)) + UnregisterSignal(clicker, list(COMSIG_CLIENT_MOUSEDOWN, COMSIG_CLIENT_MOUSEDRAG, COMSIG_CLIENT_MOUSEUP)) + stop_firing() + clicker = null + +/// On mouse down start shooting! +/datum/component/ranged_mob_full_auto/proc/on_mouse_down(client/source, atom/target, turf/location, control, params) + SIGNAL_HANDLER + if (awaiting_status != AUTOFIRE_MOUSEDOWN) + return // Avoid a double mousedown with no mouseup + var/list/modifiers = params2list(params) + + if (LAZYACCESS(modifiers, SHIFT_CLICK)) + return + if (LAZYACCESS(modifiers, CTRL_CLICK)) + return + if (LAZYACCESS(modifiers, MIDDLE_CLICK)) + return + if (LAZYACCESS(modifiers, RIGHT_CLICK)) + return + if (LAZYACCESS(modifiers, ALT_CLICK)) + return + var/mob/living/living_parent = parent + if (!isturf(living_parent.loc) || living_parent.Adjacent(target)) + return + + if (isnull(location) || istype(target, /atom/movable/screen)) // Clicking on a screen object. + if (target.plane != CLICKCATCHER_PLANE) // The clickcatcher is a special case. We want the click to trigger then, under it. + return // If we click and drag on our worn backpack, for example, we want it to open instead. + set_target(parse_caught_click_modifiers(modifiers, get_turf(source.eye), source)) + params = list2params(modifiers) + if (isnull(target)) + CRASH("Failed to get the turf under clickcatcher") + + awaiting_status = AUTOFIRE_MOUSEUP + source.click_intercept_time = world.time // From this point onwards Click() will no longer be triggered. + if (is_firing) + stop_firing() + + set_target(target) + target_loc = get_turf(target) + INVOKE_ASYNC(src, PROC_REF(start_firing)) + +/// Start tracking mouse movement and processing our shots +/datum/component/ranged_mob_full_auto/proc/start_firing() + if (is_firing) + return + + is_firing = TRUE + if (!try_shooting()) // First one is immediate + stop_firing() + return + + clicker.mouse_override_icon = 'icons/effects/mouse_pointers/weapon_pointer.dmi' + clicker.mouse_pointer_icon = clicker.mouse_override_icon + + START_PROCESSING(SSprojectiles, src) + RegisterSignal(clicker, COMSIG_CLIENT_MOUSEUP, PROC_REF(on_mouse_up)) + RegisterSignal(clicker, COMSIG_CLIENT_MOUSEDRAG, PROC_REF(on_mouse_drag)) + +/// When the mouse moved let's try and shift our aim +/datum/component/ranged_mob_full_auto/proc/on_mouse_drag(client/source, atom/src_object, atom/over_object, turf/src_location, turf/over_location, src_control, over_control, params) + SIGNAL_HANDLER + if (!isnull(over_location)) + set_target(over_object) + target_loc = get_turf(over_object) + return + + //This happens when the mouse is over an inventory or screen object, or on entering deep darkness, for example. + var/list/modifiers = params2list(params) + var/new_target = parse_caught_click_modifiers(modifiers, get_turf(source.eye), source) + params = list2params(modifiers) + + if (!isnull(new_target)) + set_target(new_target) + target_loc = new_target + return + + if (QDELETED(target)) //No new target acquired, and old one was deleted, get us out of here. + stop_firing() + CRASH("on_mouse_drag failed to get the turf under screen object [over_object.type]. Old target was incidentally QDELETED.") + + + set_target(get_turf(target)) //If previous target wasn't a turf, let's turn it into one to avoid locking onto a potentially moving target. + target_loc = target + CRASH("on_mouse_drag failed to get the turf under screen object [over_object.type]") + +/// When the mouse is released we should stop +/datum/component/ranged_mob_full_auto/proc/on_mouse_up() + SIGNAL_HANDLER + if (awaiting_status != AUTOFIRE_MOUSEUP) + return + stop_firing() + return COMPONENT_CLIENT_MOUSEUP_INTERCEPT + +/// Stop watching our mouse and processing shots +/datum/component/ranged_mob_full_auto/proc/stop_firing() + if (!is_firing) + return + + is_firing = FALSE + set_target(null) + target_loc = null + STOP_PROCESSING(SSprojectiles, src) + awaiting_status = AUTOFIRE_MOUSEDOWN + + if (isnull(clicker)) + return + UnregisterSignal(clicker, list(COMSIG_CLIENT_MOUSEDRAG, COMSIG_CLIENT_MOUSEUP)) + clicker.mouse_override_icon = null + clicker.mouse_pointer_icon = null + +#undef AUTOFIRE_MOUSEUP +#undef AUTOFIRE_MOUSEDOWN diff --git a/code/datums/components/reagent_refiller.dm b/code/datums/components/reagent_refiller.dm index 4e2da58c79bc90..35bdcb4ce51ec7 100644 --- a/code/datums/components/reagent_refiller.dm +++ b/code/datums/components/reagent_refiller.dm @@ -28,7 +28,7 @@ return ..() -/datum/component/reagent_refiller/Destroy(force, silent) +/datum/component/reagent_refiller/Destroy(force) power_draw_callback = null return ..() @@ -51,15 +51,15 @@ . |= COMPONENT_AFTERATTACK_PROCESSED_ITEM var/obj/item/reagent_containers/container = parent - var/refill = container.reagents.get_master_reagent_id() var/amount = min((container.amount_per_transfer_from_this + container.reagents.total_volume), container.reagents.total_volume) - if (amount == 0) return - if (!is_path_in_list(refill, whitelisted_reagents)) + + var/datum/reagent/refill = container.reagents.get_master_reagent() + if (!is_path_in_list(refill?.type, whitelisted_reagents)) return - addtimer(CALLBACK(src, PROC_REF(add_reagents), container, container.loc, refill, amount), time_to_refill) + addtimer(CALLBACK(src, PROC_REF(add_reagents), container, container.loc, refill.type, amount), time_to_refill) /// Refills the reagent container, and uses cell power if applicable /datum/component/reagent_refiller/proc/add_reagents(obj/item/reagent_containers/target, oldloc, reagent_to_refill, amount) diff --git a/code/datums/components/redirect_attack_hand_from_turf.dm b/code/datums/components/redirect_attack_hand_from_turf.dm index 5beef957dd3be6..bb823609241ae1 100644 --- a/code/datums/components/redirect_attack_hand_from_turf.dm +++ b/code/datums/components/redirect_attack_hand_from_turf.dm @@ -25,7 +25,7 @@ RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) connect_to_new_turf() -/datum/component/redirect_attack_hand_from_turf/Destroy(force, silent) +/datum/component/redirect_attack_hand_from_turf/Destroy(force) disconnect_from_old_turf() return ..() diff --git a/code/datums/components/reflection.dm b/code/datums/components/reflection.dm index 80532ca2a61087..d85960951aa561 100644 --- a/code/datums/components/reflection.dm +++ b/code/datums/components/reflection.dm @@ -55,7 +55,7 @@ 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(force, silent) +/datum/component/reflection/Destroy(force) QDEL_LIST_ASSOC_VAL(reflected_movables) QDEL_NULL(reflection_holder) can_reflect = null diff --git a/code/datums/components/regenerator.dm b/code/datums/components/regenerator.dm index b988676456549a..a8fd3d0c46c62b 100644 --- a/code/datums/components/regenerator.dm +++ b/code/datums/components/regenerator.dm @@ -59,7 +59,7 @@ UnregisterSignal(parent, COMSIG_MOB_APPLY_DAMAGE) stop_regenerating() -/datum/component/regenerator/Destroy(force, silent) +/datum/component/regenerator/Destroy(force) stop_regenerating() . = ..() if(regeneration_start_timer) diff --git a/code/datums/components/religious_tool.dm b/code/datums/components/religious_tool.dm index 4c0646b3a5595f..3c421a04aa3020 100644 --- a/code/datums/components/religious_tool.dm +++ b/code/datums/components/religious_tool.dm @@ -4,7 +4,7 @@ * */ /datum/component/religious_tool - dupe_mode = COMPONENT_DUPE_UNIQUE + dupe_mode = COMPONENT_DUPE_HIGHLANDER /// Enables access to the global sect directly var/datum/religion_sect/easy_access_sect /// Prevents double selecting sects @@ -14,23 +14,36 @@ /// The rite currently being invoked var/datum/religion_rites/performing_rite ///Sets the type for catalyst - var/catalyst_type = /obj/item/book/bible + var/obj/item/catalyst_type = /obj/item/book/bible ///Enables overide of COMPONENT_NO_AFTERATTACK, not recommended as it means you can potentially cause damage to the item using the catalyst. var/force_catalyst_afterattack = FALSE + ///Callback provided to the tool for after a sect is chosen var/datum/callback/after_sect_select_cb + ///Optional argument. If a positive value, each invocation will lower charges, and the component will delete without any more charges + var/charges + ///If a typecache is provided, only types of rites in the cache can be invoked. + var/list/rite_types_allowlist -/datum/component/religious_tool/Initialize(_flags = ALL, _force_catalyst_afterattack = FALSE, _after_sect_select_cb, override_catalyst_type) +/datum/component/religious_tool/Initialize( + operation_flags = ALL, + force_catalyst_afterattack = FALSE, + after_sect_select_cb = null, + catalyst_type = /obj/item/book/bible, + charges = -1, + rite_types_allowlist = null, + ) . = ..() SetGlobalToLocal() //attempt to connect on start in case one already exists! - operation_flags = _flags - force_catalyst_afterattack = _force_catalyst_afterattack - after_sect_select_cb = _after_sect_select_cb - if(override_catalyst_type) - catalyst_type = override_catalyst_type + src.operation_flags = operation_flags + src.force_catalyst_afterattack = force_catalyst_afterattack + src.after_sect_select_cb = after_sect_select_cb + src.catalyst_type = catalyst_type + src.charges = charges + src.rite_types_allowlist = rite_types_allowlist RegisterSignal(SSdcs, COMSIG_RELIGIOUS_SECT_CHANGED, PROC_REF(SetGlobalToLocal)) RegisterSignal(SSdcs, COMSIG_RELIGIOUS_SECT_RESET, PROC_REF(on_sect_reset)) -/datum/component/religious_tool/Destroy(force, silent) +/datum/component/religious_tool/Destroy(force) easy_access_sect = null performing_rite = null catalyst_type = null @@ -150,6 +163,9 @@ else to_chat(user, "You are not holy, and therefore cannot perform rites.") return + if(rite_types_allowlist && !is_path_in_list(path, rite_types_allowlist)) + to_chat(user, span_warning("This cannot perform that kind of rite.")) + return if(performing_rite) to_chat(user, "There is a rite currently being performed here already.") return @@ -159,13 +175,17 @@ performing_rite = new path(parent) if(!performing_rite.perform_rite(user, parent)) QDEL_NULL(performing_rite) + return + performing_rite.invoke_effect(user, parent) + easy_access_sect.adjust_favor(-performing_rite.favor_cost) + if(performing_rite.auto_delete) + QDEL_NULL(performing_rite) else - performing_rite.invoke_effect(user, parent) - easy_access_sect.adjust_favor(-performing_rite.favor_cost) - if(performing_rite.auto_delete) - QDEL_NULL(performing_rite) - else - performing_rite = null + performing_rite = null + if(charges) + charges-- + if(!charges) + qdel(src) /** * Generates a list of available sects to the user. Intended to support custom-availability sects. @@ -231,7 +251,7 @@ if(!can_i_see) return - examine_list += span_notice("Use a bible to interact with this.") + examine_list += span_notice("Use a [catalyst_type::name] to interact with this.") if(isnull(easy_access_sect)) if(operation_flags & RELIGION_TOOL_SECTSELECT) examine_list += span_notice("This looks like it can be used to select a sect.") diff --git a/code/datums/components/revenge_ability.dm b/code/datums/components/revenge_ability.dm index f03bc992276fc1..8d9faec52e0bc0 100644 --- a/code/datums/components/revenge_ability.dm +++ b/code/datums/components/revenge_ability.dm @@ -8,7 +8,7 @@ /// The ability to use when we are attacked var/datum/action/cooldown/ability /// Optional datum for validating targets - var/datum/targetting_datum/targetting + var/datum/targeting_strategy/targeting /// Trigger only if target is at least this far away var/min_range /// Trigger only if target is at least this close @@ -16,12 +16,12 @@ /// Target the ability at ourself instead of at the offender var/target_self -/datum/component/revenge_ability/Initialize(datum/action/cooldown/ability, datum/targetting_datum/targetting, min_range = 0, max_range = INFINITY, target_self = FALSE) +/datum/component/revenge_ability/Initialize(datum/action/cooldown/ability, datum/targeting_strategy/targeting, min_range = 0, max_range = INFINITY, target_self = FALSE) . = ..() if (!isliving(parent)) return COMPONENT_INCOMPATIBLE src.ability = ability - src.targetting = targetting + src.targeting = targeting src.min_range = min_range src.max_range = max_range src.target_self = target_self @@ -45,7 +45,7 @@ var/distance = get_dist(ability_user, attacker) if (distance < min_range || distance > max_range) return - if (targetting && !targetting.can_attack(victim, attacker)) + if (targeting && !targeting.can_attack(victim, attacker)) return INVOKE_ASYNC(ability, TYPE_PROC_REF(/datum/action/cooldown, InterceptClickOn), ability_user, null, (target_self) ? ability_user : attacker) diff --git a/code/datums/components/riding/riding.dm b/code/datums/components/riding/riding.dm index 14358a5c5a3885..98024e1a00e851 100644 --- a/code/datums/components/riding/riding.dm +++ b/code/datums/components/riding/riding.dm @@ -32,6 +32,8 @@ var/list/forbid_turf_typecache /// We don't need roads where we're going if this is TRUE, allow normal movement in space tiles var/override_allow_spacemove = FALSE + /// can anyone other than the rider unbuckle the rider? + var/can_force_unbuckle = TRUE /** * Ride check flags defined for the specific riding component types, so we know if we need arms, legs, or whatever. @@ -55,7 +57,6 @@ if(potion_boost) vehicle_move_delay = round(CONFIG_GET(number/movedelay/run_delay) * 0.85, 0.01) - /datum/component/riding/RegisterWithParent() . = ..() RegisterSignal(parent, COMSIG_ATOM_DIR_CHANGE, PROC_REF(vehicle_turned)) @@ -64,6 +65,10 @@ RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(vehicle_moved)) RegisterSignal(parent, COMSIG_MOVABLE_BUMP, PROC_REF(vehicle_bump)) RegisterSignal(parent, COMSIG_BUCKLED_CAN_Z_MOVE, PROC_REF(riding_can_z_move)) + RegisterSignals(parent, GLOB.movement_type_addtrait_signals, PROC_REF(on_movement_type_trait_gain)) + RegisterSignals(parent, GLOB.movement_type_removetrait_signals, PROC_REF(on_movement_type_trait_loss)) + if(!can_force_unbuckle) + RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, PROC_REF(force_unbuckle)) /** * This proc handles all of the proc calls to things like set_vehicle_dir_layer() that a type of riding datum needs to call on creation @@ -79,11 +84,18 @@ /datum/component/riding/proc/vehicle_mob_unbuckle(datum/source, mob/living/rider, force = FALSE) SIGNAL_HANDLER + handle_unbuckle(rider) + +/datum/component/riding/proc/handle_unbuckle(mob/living/rider) var/atom/movable/movable_parent = parent restore_position(rider) unequip_buckle_inhands(rider) rider.updating_glide_size = TRUE UnregisterSignal(rider, COMSIG_LIVING_TRY_PULL) + for (var/trait in GLOB.movement_type_trait_to_flag) + if (HAS_TRAIT(parent, trait)) + REMOVE_TRAIT(rider, trait, REF(src)) + REMOVE_TRAIT(rider, TRAIT_NO_FLOATING_ANIM, REF(src)) if(!movable_parent.has_buckled_mobs()) qdel(src) @@ -99,6 +111,11 @@ rider.stop_pulling() RegisterSignal(rider, COMSIG_LIVING_TRY_PULL, PROC_REF(on_rider_try_pull)) + for (var/trait in GLOB.movement_type_trait_to_flag) + if (HAS_TRAIT(parent, trait)) + ADD_TRAIT(rider, trait, REF(src)) + ADD_TRAIT(rider, TRAIT_NO_FLOATING_ANIM, REF(src)) + /// This proc is called when the rider attempts to grab the thing they're riding, preventing them from doing so. /datum/component/riding/proc/on_rider_try_pull(mob/living/rider_pulling, atom/movable/target, force) SIGNAL_HANDLER @@ -222,11 +239,14 @@ //BUCKLE HOOKS /datum/component/riding/proc/restore_position(mob/living/buckled_mob) - if(buckled_mob) - buckled_mob.pixel_x = buckled_mob.base_pixel_x - buckled_mob.pixel_y = buckled_mob.base_pixel_y - if(buckled_mob.client) - buckled_mob.client.view_size.resetToDefault() + if(isnull(buckled_mob)) + return + buckled_mob.pixel_x = buckled_mob.base_pixel_x + buckled_mob.pixel_y = buckled_mob.base_pixel_y + var/atom/source = parent + SET_PLANE_EXPLICIT(buckled_mob, initial(buckled_mob.plane), source) + if(buckled_mob.client) + buckled_mob.client.view_size.resetToDefault() //MOVEMENT /datum/component/riding/proc/turf_check(turf/next, turf/current) @@ -273,3 +293,24 @@ /datum/component/riding/proc/riding_can_z_move(atom/movable/movable_parent, direction, turf/start, turf/destination, z_move_flags, mob/living/rider) SIGNAL_HANDLER return COMPONENT_RIDDEN_ALLOW_Z_MOVE + +/// Called when our vehicle gains a movement trait, so we can apply it to the riders +/datum/component/riding/proc/on_movement_type_trait_gain(atom/movable/source, trait) + SIGNAL_HANDLER + var/atom/movable/movable_parent = parent + for (var/mob/rider in movable_parent.buckled_mobs) + ADD_TRAIT(rider, trait, REF(src)) + +/// Called when our vehicle loses a movement trait, so we can remove it from the riders +/datum/component/riding/proc/on_movement_type_trait_loss(atom/movable/source, trait) + SIGNAL_HANDLER + var/atom/movable/movable_parent = parent + for (var/mob/rider in movable_parent.buckled_mobs) + REMOVE_TRAIT(rider, trait, REF(src)) + +/datum/component/riding/proc/force_unbuckle(atom/movable/source, mob/living/living_hitter) + SIGNAL_HANDLER + + if((living_hitter in source.buckled_mobs)) + return + return COMPONENT_CANCEL_ATTACK_CHAIN diff --git a/code/datums/components/riding/riding_mob.dm b/code/datums/components/riding/riding_mob.dm index 85aaee4ab7cef4..53aa87b74bb473 100644 --- a/code/datums/components/riding/riding_mob.dm +++ b/code/datums/components/riding/riding_mob.dm @@ -1,17 +1,18 @@ // For any mob that can be ridden -//SKYRAT EDIT START: Human Riding Defines +//NOVA EDIT START: Human Riding Defines #define OVERSIZED_OFFSET 18 #define OVERSIZED_SIDE_OFFSET 11 #define REGULAR_OFFSET 6 #define REGULAR_SIDE_OFFSET 4 -//SKYRAT EDIT END +//NOVA EDIT END /datum/component/riding/creature /// If TRUE, this creature's movements can be controlled by the rider while mounted (as opposed to riding cyborgs and humans, which is passive) var/can_be_driven = TRUE /// If TRUE, this creature's abilities can be triggered by the rider while mounted var/can_use_abilities = FALSE - var/list/shared_action_buttons = list() + /// list of blacklisted abilities that cant be shared + var/list/blacklist_abilities = list() /datum/component/riding/creature/Initialize(mob/living/riding_mob, force = FALSE, ride_check_flags = NONE, potion_boost = FALSE) if(!isliving(parent)) @@ -31,7 +32,7 @@ var/mob/living/simple_animal/simple_parent = parent simple_parent.stop_automated_movement = TRUE -/datum/component/riding/creature/Destroy(force, silent) +/datum/component/riding/creature/Destroy(force) unequip_buckle_inhands(parent) if(isanimal(parent)) var/mob/living/simple_animal/simple_parent = parent @@ -66,6 +67,8 @@ // for fireman carries, check if the ridden is stunned/restrained else if((ride_check_flags & CARRIER_NEEDS_ARM) && (HAS_TRAIT(living_parent, TRAIT_RESTRAINED) || living_parent.incapacitated(IGNORE_RESTRAINTS|IGNORE_GRAB))) . = FALSE + else if((ride_check_flags & JUST_FRIEND_RIDERS) && !(living_parent.faction.Find(REF(rider)))) + . = FALSE if(. || !consequences) return @@ -162,6 +165,7 @@ for(var/mob/yeet_mob in user.buckled_mobs) force_dismount(yeet_mob, (!user.combat_mode)) // gentle on help, byeeee if not + /// If the ridden creature has abilities, and some var yet to be made is set to TRUE, the rider will be able to control those abilities /datum/component/riding/creature/proc/setup_abilities(mob/living/rider) if(!isliving(parent)) @@ -170,6 +174,8 @@ var/mob/living/ridden_creature = parent for(var/datum/action/action as anything in ridden_creature.actions) + if(is_type_in_list(action, blacklist_abilities)) + continue action.GiveAction(rider) /// Takes away the riding parent's abilities from the rider @@ -283,7 +289,7 @@ /datum/component/riding/creature/human/get_offsets(pass_index) var/mob/living/carbon/human/H = parent - //SKYRAT EDIT BEGIN - Oversized Overhaul + //NOVA EDIT BEGIN - Oversized Overhaul if(H.buckle_lying) return HAS_TRAIT(H, TRAIT_OVERSIZED) ? list( TEXT_NORTH = list(0, OVERSIZED_OFFSET), @@ -308,7 +314,7 @@ TEXT_EAST = list(-REGULAR_OFFSET, REGULAR_SIDE_OFFSET), TEXT_WEST = list(REGULAR_OFFSET, REGULAR_SIDE_OFFSET) ) - //SKYRAT EDIT END + //NOVA EDIT END /datum/component/riding/creature/human/force_dismount(mob/living/dismounted_rider) var/atom/movable/AM = parent AM.unbuckle_mob(dismounted_rider) @@ -458,7 +464,7 @@ var/mob/living/basic/mining/goliath/goliath = parent goliath.add_movespeed_modifier(/datum/movespeed_modifier/goliath_mount) -/datum/component/riding/creature/goliath/Destroy(force, silent) +/datum/component/riding/creature/goliath/Destroy(force) var/mob/living/basic/mining/goliath/goliath = parent goliath.remove_movespeed_modifier(/datum/movespeed_modifier/goliath_mount) return ..() @@ -497,7 +503,7 @@ set_vehicle_dir_layer(WEST, ABOVE_MOB_LAYER) /datum/component/riding/creature/guardian/ride_check(mob/living/user, consequences = TRUE) - var/mob/living/simple_animal/hostile/guardian/charger = parent + var/mob/living/basic/guardian/charger = parent if(!istype(charger)) return ..() return charger.summoner == user @@ -512,9 +518,37 @@ set_vehicle_dir_layer(EAST, OBJ_LAYER) set_vehicle_dir_layer(WEST, OBJ_LAYER) -//SKYRAT EDIT START: Human Riding Defines +/datum/component/riding/creature/leaper + can_force_unbuckle = FALSE + can_use_abilities = TRUE + blacklist_abilities = list(/datum/action/cooldown/toggle_seethrough) + ride_check_flags = JUST_FRIEND_RIDERS + +/datum/component/riding/creature/leaper/handle_specials() + . = ..() + set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(17, 46), TEXT_SOUTH = list(17,51), TEXT_EAST = list(27, 46), TEXT_WEST = list(6, 46))) + +/datum/component/riding/creature/leaper/Initialize(mob/living/riding_mob, force = FALSE, ride_check_flags = NONE, potion_boost = FALSE) + . = ..() + RegisterSignal(riding_mob, COMSIG_MOB_POINTED, PROC_REF(attack_pointed)) + +/datum/component/riding/creature/leaper/proc/attack_pointed(mob/living/rider, atom/pointed) + SIGNAL_HANDLER + if(!isclosedturf(pointed)) + return + var/mob/living/basic/basic_parent = parent + if(!basic_parent.CanReach(pointed)) + return + basic_parent.melee_attack(pointed) + + +/datum/component/riding/leaper/handle_unbuckle(mob/living/rider) + . = ..() + UnregisterSignal(rider, COMSIG_MOB_POINTED) + +//NOVA EDIT START: Human Riding Defines #undef OVERSIZED_OFFSET #undef OVERSIZED_SIDE_OFFSET #undef REGULAR_OFFSET #undef REGULAR_SIDE_OFFSET -//SKYRAT EDIT END +//NOVA EDIT END diff --git a/code/datums/components/riding/riding_vehicle.dm b/code/datums/components/riding/riding_vehicle.dm index e455fba1e255ec..bacf012aa5a91f 100644 --- a/code/datums/components/riding/riding_vehicle.dm +++ b/code/datums/components/riding/riding_vehicle.dm @@ -178,7 +178,7 @@ set_vehicle_dir_layer(WEST, OBJ_LAYER) /datum/component/riding/vehicle/scooter/skateboard/wheelys - vehicle_move_delay = 1.75 // SKYRAT EDIT - ORIGINAL: 0 + vehicle_move_delay = 1.75 // NOVA EDIT - ORIGINAL: 0 /datum/component/riding/vehicle/scooter/skateboard/wheelys/handle_specials() . = ..() @@ -263,12 +263,9 @@ return ..() /datum/component/riding/vehicle/wheelchair/motorized/driver_move(obj/vehicle/vehicle_parent, mob/living/user, direction) - var/speed = 1 // Should never be under 1 - var/delay_multiplier = 6.7 // magic number from wheelchair code - var/obj/vehicle/ridden/wheelchair/motorized/our_chair = parent - for(var/datum/stock_part/servo/servo in our_chair.component_parts) - speed += servo.tier + var/speed = our_chair.speed + var/delay_multiplier = our_chair.delay_multiplier vehicle_move_delay = round(CONFIG_GET(number/movedelay/run_delay) * delay_multiplier) / speed return ..() diff --git a/code/datums/components/scope.dm b/code/datums/components/scope.dm index 853820eaa73133..b413b6f8e51ace 100644 --- a/code/datums/components/scope.dm +++ b/code/datums/components/scope.dm @@ -1,33 +1,54 @@ +///A component that allows players to use the item to zoom out. Mainly intended for firearms, but now works with other items too. /datum/component/scope /// How far we can extend, with modifier of 1, up to our vision edge, higher numbers multiply. var/range_modifier = 1 - /// Fullscreen object we use for tracking the shots. + /// Fullscreen object we use for tracking. var/atom/movable/screen/fullscreen/cursor_catcher/scope/tracker /// The owner of the tracker's ckey. For comparing with the current owner mob, in case the client has left it (e.g. ghosted). var/tracker_owner_ckey - /// Are we zooming currently? - var/zooming + /// The method which we zoom in and out + var/zoom_method = ZOOM_METHOD_RIGHT_CLICK + /// if not null, an item action will be added. Redundant if the mode is ZOOM_METHOD_RIGHT_CLICK or ZOOM_METHOD_WIELD. + var/item_action_type -/datum/component/scope/Initialize(range_modifier) - if(!isgun(parent)) +/datum/component/scope/Initialize(range_modifier = 1, zoom_method = ZOOM_METHOD_RIGHT_CLICK, item_action_type) + if(!isitem(parent)) return COMPONENT_INCOMPATIBLE src.range_modifier = range_modifier + src.zoom_method = zoom_method + src.item_action_type = item_action_type -/datum/component/scope/Destroy(force, silent) +/datum/component/scope/Destroy(force) if(tracker) stop_zooming(tracker.owner) return ..() /datum/component/scope/RegisterWithParent() RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) - RegisterSignal(parent, COMSIG_ITEM_AFTERATTACK_SECONDARY, PROC_REF(on_secondary_afterattack)) - RegisterSignal(parent, COMSIG_GUN_TRY_FIRE, PROC_REF(on_gun_fire)) + switch(zoom_method) + if(ZOOM_METHOD_RIGHT_CLICK) + RegisterSignal(parent, COMSIG_ITEM_AFTERATTACK_SECONDARY, PROC_REF(on_secondary_afterattack)) + if(ZOOM_METHOD_WIELD) + RegisterSignal(parent, SIGNAL_ADDTRAIT(TRAIT_WIELDED), PROC_REF(on_wielded)) + RegisterSignal(parent, SIGNAL_REMOVETRAIT(TRAIT_WIELDED), PROC_REF(on_unwielded)) + if(item_action_type) + var/obj/item/parent_item = parent + var/datum/action/item_action/scope = parent_item.add_item_action(item_action_type) + RegisterSignal(scope, COMSIG_ACTION_TRIGGER, PROC_REF(on_action_trigger)) RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) + if(isgun(parent)) + RegisterSignal(parent, COMSIG_GUN_TRY_FIRE, PROC_REF(on_gun_fire)) /datum/component/scope/UnregisterFromParent() + if(item_action_type) + var/obj/item/parent_item = parent + var/datum/action/item_action/scope = locate(item_action_type) in parent_item.actions + parent_item.remove_item_action(scope) UnregisterSignal(parent, list( COMSIG_MOVABLE_MOVED, COMSIG_ITEM_AFTERATTACK_SECONDARY, + SIGNAL_ADDTRAIT(TRAIT_WIELDED), + SIGNAL_REMOVETRAIT(TRAIT_WIELDED), COMSIG_GUN_TRY_FIRE, COMSIG_ATOM_EXAMINE, )) @@ -56,9 +77,28 @@ if(tracker) stop_zooming(user) else - start_zooming(user) + zoom(user) return COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN +/datum/component/scope/proc/on_action_trigger(datum/action/source) + SIGNAL_HANDLER + var/obj/item/item = source.target + var/mob/living/user = item.loc + if(tracker) + stop_zooming(user) + else + zoom(user) + +/datum/component/scope/proc/on_wielded(obj/item/source, trait) + SIGNAL_HANDLER + var/mob/living/user = source.loc + zoom(user) + +/datum/component/scope/proc/on_unwielded(obj/item/source, trait) + SIGNAL_HANDLER + var/mob/living/user = source.loc + stop_zooming(user) + /datum/component/scope/proc/on_gun_fire(obj/item/gun/source, mob/living/user, atom/target, flag, params) SIGNAL_HANDLER @@ -70,7 +110,12 @@ /datum/component/scope/proc/on_examine(datum/source, mob/user, list/examine_list) SIGNAL_HANDLER - examine_list += span_notice("You can scope in with right-click.") + var/scope = isgun(parent) ? "scope in" : "zoom out" + switch(zoom_method) + if(ZOOM_METHOD_RIGHT_CLICK) + examine_list += span_notice("You can [scope] with right-click.") + if(ZOOM_METHOD_WIELD) + examine_list += span_notice("You can [scope] by wielding it with both hands.") /** * We find and return the best target to hit on a given turf. @@ -105,17 +150,7 @@ return target_turf /** - * Wrapper for zoom(), so in case we runtime we do not get stuck in a bad state - * - * Arguments: - * * user: The mob we are starting zooming on. -*/ -/datum/component/scope/proc/start_zooming(mob/user) - if(zoom(user)) - zooming = TRUE - -/** - * We start zooming by hiding the mouse pointer, adding our tracker overlay and starting our processing. + * We start zooming by adding our tracker overlay and starting our processing. * * Arguments: * * user: The mob we are starting zooming on. @@ -123,18 +158,33 @@ /datum/component/scope/proc/zoom(mob/user) if(isnull(user.client)) return - if(zooming) + if(HAS_TRAIT(user, TRAIT_USER_SCOPED)) + user.balloon_alert(user, "already zoomed!") return - user.client.mouse_override_icon = 'icons/effects/mouse_pointers/scope_hide.dmi' - user.update_mouse_pointer() user.playsound_local(parent, 'sound/weapons/scope.ogg', 75, TRUE) - tracker = user.overlay_fullscreen("scope", /atom/movable/screen/fullscreen/cursor_catcher/scope, 0) + tracker = user.overlay_fullscreen("scope", /atom/movable/screen/fullscreen/cursor_catcher/scope, isgun(parent)) tracker.assign_to_mob(user, range_modifier) tracker_owner_ckey = user.ckey - RegisterSignals(user, list(COMSIG_MOB_SWAP_HANDS, COMSIG_QDELETING), PROC_REF(stop_zooming)) + if(user.is_holding(parent)) + RegisterSignals(user, list(COMSIG_MOB_SWAP_HANDS, COMSIG_QDELETING), PROC_REF(stop_zooming)) + else // The item is likely worn (eg. mothic cap) + RegisterSignal(user, COMSIG_QDELETING, PROC_REF(stop_zooming)) + var/static/list/capacity_signals = list( + COMSIG_LIVING_STATUS_KNOCKDOWN, + COMSIG_LIVING_STATUS_PARALYZE, + COMSIG_LIVING_STATUS_STUN, + ) + RegisterSignals(user, capacity_signals, PROC_REF(on_incapacitated)) START_PROCESSING(SSprojectiles, src) + ADD_TRAIT(user, TRAIT_USER_SCOPED, REF(src)) return TRUE +/datum/component/scope/proc/on_incapacitated(mob/living/source, amount = 0, ignore_canstun = FALSE) + SIGNAL_HANDLER + + if(amount > 0) + stop_zooming(source) + /** * We stop zooming, canceling processing, resetting stuff back to normal and deleting our tracker. * @@ -144,13 +194,18 @@ /datum/component/scope/proc/stop_zooming(mob/user) SIGNAL_HANDLER - if(!zooming) + if(!HAS_TRAIT(user, TRAIT_USER_SCOPED)) return STOP_PROCESSING(SSprojectiles, src) - UnregisterSignal(user, list(COMSIG_MOB_SWAP_HANDS, COMSIG_QDELETING)) - - zooming = FALSE + UnregisterSignal(user, list( + COMSIG_LIVING_STATUS_KNOCKDOWN, + COMSIG_LIVING_STATUS_PARALYZE, + COMSIG_LIVING_STATUS_STUN, + COMSIG_MOB_SWAP_HANDS, + COMSIG_QDELETING, + )) + REMOVE_TRAIT(user, TRAIT_USER_SCOPED, REF(src)) user.playsound_local(parent, 'sound/weapons/scope.ogg', 75, TRUE, frequency = -1) user.clear_fullscreen("scope") @@ -165,8 +220,6 @@ if(user.client) animate(user.client, 0.2 SECONDS, pixel_x = 0, pixel_y = 0) - user.client.mouse_override_icon = null - user.update_mouse_pointer() tracker = null tracker_owner_ckey = null diff --git a/code/datums/components/seclight_attachable.dm b/code/datums/components/seclight_attachable.dm index 65c64fdb8ce9d7..b1d4aebc93f838 100644 --- a/code/datums/components/seclight_attachable.dm +++ b/code/datums/components/seclight_attachable.dm @@ -50,7 +50,7 @@ if(istype(starting_light)) add_light(starting_light) -/datum/component/seclite_attachable/Destroy(force, silent) +/datum/component/seclite_attachable/Destroy(force) if(light) remove_light() return ..() @@ -236,7 +236,7 @@ return INVOKE_ASYNC(src, PROC_REF(unscrew_light), source, user, tool) - return COMPONENT_BLOCK_TOOL_ATTACK + return ITEM_INTERACT_BLOCKING /// Invoked asyncronously from [proc/on_screwdriver]. Handles removing the light from our parent. /datum/component/seclite_attachable/proc/unscrew_light(obj/item/source, mob/user, obj/item/tool) diff --git a/code/datums/components/security_vision.dm b/code/datums/components/security_vision.dm new file mode 100644 index 00000000000000..5c2b88fffd3106 --- /dev/null +++ b/code/datums/components/security_vision.dm @@ -0,0 +1,38 @@ +/// This component allows you to judge someone's level of criminal activity by examining them +/datum/component/security_vision + /// Bitfield containing what things we want to judge based upon + var/judgement_criteria + /// Optional callback which will modify the value of `judgement_criteria` before we make the check + var/datum/callback/update_judgement_criteria + +/datum/component/security_vision/Initialize(judgement_criteria, datum/callback/update_judgement_criteria) + . = ..() + if (!ismob(parent)) + return COMPONENT_INCOMPATIBLE + src.judgement_criteria = judgement_criteria + src.update_judgement_criteria = update_judgement_criteria + +/datum/component/security_vision/RegisterWithParent() + RegisterSignal(parent, COMSIG_MOB_EXAMINING, PROC_REF(on_examining)) + +/datum/component/security_vision/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_MOB_EXAMINING) + +/// When we examine something, check if we have any extra data to add +/datum/component/security_vision/proc/on_examining(mob/source, atom/target, list/examine_strings) + SIGNAL_HANDLER + if (!isliving(target)) + return + var/mob/living/perp = target + judgement_criteria = update_judgement_criteria?.Invoke() || judgement_criteria + + var/threat_level = perp.assess_threat(judgement_criteria) + switch(threat_level) + if (THREAT_ASSESS_MAXIMUM to INFINITY) + examine_strings += span_boldwarning("Assessed threat level of [threat_level]! Extreme danger of criminal activity!") + if (THREAT_ASSESS_DANGEROUS to THREAT_ASSESS_MAXIMUM) + examine_strings += span_warning("Assessed threat level of [threat_level]. Criminal scum detected!") + if (1 to THREAT_ASSESS_DANGEROUS) + examine_strings += span_notice("Assessed threat level of [threat_level]. Probably not dangerous... yet.") + else + examine_strings += span_notice("Seems to be a trustworthy individual.") diff --git a/code/datums/components/seethrough_mob.dm b/code/datums/components/seethrough_mob.dm index 4359c454f1a107..bae87faf615835 100644 --- a/code/datums/components/seethrough_mob.dm +++ b/code/datums/components/seethrough_mob.dm @@ -42,7 +42,7 @@ var/datum/action/cooldown/toggle_seethrough/action = new(src) action.Grant(parent) -/datum/component/seethrough_mob/Destroy(force, silent) +/datum/component/seethrough_mob/Destroy(force) QDEL_NULL(render_source_atom) return ..() diff --git a/code/datums/components/shell.dm b/code/datums/components/shell.dm index 88747bd2f60ff1..a436a40d516925 100644 --- a/code/datums/components/shell.dm +++ b/code/datums/components/shell.dm @@ -101,7 +101,7 @@ QDEL_NULL(attached_circuit) -/datum/component/shell/Destroy(force, silent) +/datum/component/shell/Destroy(force) QDEL_LIST(unremovable_circuit_components) return ..() @@ -225,10 +225,10 @@ if(shell_flags & SHELL_FLAG_ALLOW_FAILURE_ACTION) return source.balloon_alert(user, "it's locked!") - return COMPONENT_BLOCK_TOOL_ATTACK + return ITEM_INTERACT_BLOCKING attached_circuit.interact(user) - return COMPONENT_BLOCK_TOOL_ATTACK + return ITEM_INTERACT_BLOCKING /** * Called when a screwdriver is used on the parent. Removes the circuitboard from the component. @@ -245,12 +245,12 @@ if(shell_flags & SHELL_FLAG_ALLOW_FAILURE_ACTION) return source.balloon_alert(user, "it's locked!") - return COMPONENT_BLOCK_TOOL_ATTACK + return ITEM_INTERACT_BLOCKING tool.play_tool_sound(parent) source.balloon_alert(user, "you unscrew [attached_circuit] from [parent].") remove_circuit() - return COMPONENT_BLOCK_TOOL_ATTACK + return ITEM_INTERACT_BLOCKING /** * Checks for when the circuitboard moves. If it moves, removes it from the component. diff --git a/code/datums/components/shielded.dm b/code/datums/components/shielded.dm index b33f3d986fda32..8a46697745fa5d 100644 --- a/code/datums/components/shielded.dm +++ b/code/datums/components/shielded.dm @@ -3,6 +3,7 @@ */ /datum/component/shielded + dupe_mode = COMPONENT_DUPE_UNIQUE /// The person currently wearing us var/mob/living/wearer /// How many charges we can have max, and how many we start with @@ -56,7 +57,7 @@ if(recharge_start_delay) START_PROCESSING(SSdcs, src) -/datum/component/shielded/Destroy(force, silent) +/datum/component/shielded/Destroy(force) if(wearer) shield_icon = "broken" UnregisterSignal(wearer, COMSIG_ATOM_UPDATE_OVERLAYS) @@ -113,7 +114,7 @@ if((slot & ITEM_SLOT_HANDS) && !shield_inhand) lost_wearer(source, user) return - set_wearer(source, user) + set_wearer(user) /// Either we've been dropped or our wearer has been QDEL'd. Either way, they're no longer our problem /datum/component/shielded/proc/lost_wearer(datum/source, mob/user) @@ -125,6 +126,11 @@ wearer = null /datum/component/shielded/proc/set_wearer(mob/user) + if(wearer == user) + return + if(!isnull(wearer)) + CRASH("[type] called set_wearer with [user] but [wearer] was already the wearer!") + wearer = user RegisterSignal(wearer, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_update_overlays)) RegisterSignal(wearer, COMSIG_QDELETING, PROC_REF(lost_wearer)) diff --git a/code/datums/components/shovel_hands.dm b/code/datums/components/shovel_hands.dm index 34eaf8a98b60ac..752af0d8bd9a45 100644 --- a/code/datums/components/shovel_hands.dm +++ b/code/datums/components/shovel_hands.dm @@ -20,7 +20,7 @@ UnregisterSignal(parent, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_HOSTILE_PRE_ATTACKINGTARGET)) return ..() -/datum/component/shovel_hands/Destroy(force, silent) +/datum/component/shovel_hands/Destroy(force) if (internal_shovel) UnregisterSignal(internal_shovel, COMSIG_QDELETING) QDEL_NULL(internal_shovel) diff --git a/code/datums/components/shuttle_cling.dm b/code/datums/components/shuttle_cling.dm index bc6f022ab86e43..6702b9d601dda6 100644 --- a/code/datums/components/shuttle_cling.dm +++ b/code/datums/components/shuttle_cling.dm @@ -90,9 +90,9 @@ return //Do pause/unpause/nothing for the hyperloop - if(should_loop && hyperloop.paused) + if(should_loop && hyperloop.status & MOVELOOP_STATUS_PAUSED) hyperloop.resume_loop() - else if(!should_loop && !hyperloop.paused) + else if(!should_loop && !(hyperloop.status & MOVELOOP_STATUS_PAUSED)) hyperloop.pause_loop() ///Check if we're "holding on" to the shuttle @@ -177,7 +177,7 @@ qdel(src) -/datum/component/shuttle_cling/Destroy(force, silent) +/datum/component/shuttle_cling/Destroy(force) REMOVE_TRAIT(parent, TRAIT_HYPERSPACED, REF(src)) QDEL_NULL(hyperloop) diff --git a/code/datums/components/singularity.dm b/code/datums/components/singularity.dm index 41b11a219c0e7f..c1323d01e2fe6f 100644 --- a/code/datums/components/singularity.dm +++ b/code/datums/components/singularity.dm @@ -108,7 +108,7 @@ GLOB.singularities |= src -/datum/component/singularity/Destroy(force, silent) +/datum/component/singularity/Destroy(force) GLOB.singularities -= src consume_callback = null target = null diff --git a/code/datums/components/sitcomlaughter.dm b/code/datums/components/sitcomlaughter.dm index 8ca335eb8b5136..62e9276b1d75d4 100644 --- a/code/datums/components/sitcomlaughter.dm +++ b/code/datums/components/sitcomlaughter.dm @@ -22,7 +22,7 @@ if(laugh_delay) src.laugh_delay = laugh_delay -/datum/component/wearertargeting/sitcomlaughter/Destroy(force, silent) +/datum/component/wearertargeting/sitcomlaughter/Destroy(force) post_comedy_callback = null return ..() diff --git a/code/datums/components/slippery.dm b/code/datums/components/slippery.dm index be1d674eb4d0be..74dbdd5642fe20 100644 --- a/code/datums/components/slippery.dm +++ b/code/datums/components/slippery.dm @@ -1,17 +1,33 @@ -/// Slippery component, for making anything slippery. Of course. +/** + * # Slip behaviour component + * + * Add this component to an object to make it a slippery object, slippery objects make mobs that cross them fall over. + * Items with this component that get picked up may give their parent mob the slip behaviour. + * + * Here is a simple example of adding the component behaviour to an object.area + * + * AddComponent(/datum/component/slippery, 80, (NO_SLIP_WHEN_WALKING | SLIDE)) + * + * This adds slippery behaviour to the parent atom, with a 80 decisecond (~8 seconds) knockdown + * The lube flags control how the slip behaves, in this case, the mob wont slip if it's in walking mode (NO_SLIP_WHEN_WALKING) + * and if they do slip, they will slide a few tiles (SLIDE) + * + * + * This component has configurable behaviours, see the [Initialize proc for the argument listing][/datum/component/slippery/proc/Initialize]. + */ /datum/component/slippery dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS - /// If the slip forces you to drop held items. + /// If the slip forces the crossing mob to drop held items. var/force_drop_items = FALSE - /// How long the slip keeps you knocked down. + /// How long the slip keeps the crossing mob knocked over (they can still crawl and use weapons) for. var/knockdown_time = 0 - /// How long the slip paralyzes for. + /// How long the slip paralyzes (prevents the crossing mob doing anything) for. var/paralyze_time = 0 /// Flags for how slippery the parent is. See [__DEFINES/mobs.dm] var/lube_flags - /// Optional callback providing an additional chance to prevent slippage + /// Optional callback allowing you to define custom conditions for slipping var/datum/callback/can_slip_callback - /// A proc callback to call on slip. + /// Optional call back that is called when a mob slips on this component var/datum/callback/on_slip_callback /// If parent is an item, this is the person currently holding/wearing the parent (or the parent if no one is holding it) var/mob/living/holder @@ -30,6 +46,20 @@ /// The connect_loc_behalf component for the holder_connections list. var/datum/weakref/holder_connect_loc_behalf +/** + * Initialize the slippery component behaviour + * + * When applied to any atom in the game this will apply slipping behaviours to that atom + * + * Arguments: + * * knockdown - Length of time the knockdown applies (Deciseconds) + * * lube_flags - Controls the slip behaviour, they are listed starting [here][SLIDE] + * * datum/callback/on_slip_callback - Callback to define further custom controls on when slipping is applied + * * paralyze - length of time to paralyze the crossing mob for (Deciseconds) + * * force_drop - should the crossing mob drop items in it's hands or not + * * slot_whitelist - flags controlling where on a mob this item can be equipped to make the parent mob slippery full list [here][ITEM_SLOT_OCLOTHING] + * * datum/callback/on_slip_callback - Callback to add custom behaviours as the crossing mob is slipped + */ /datum/component/slippery/Initialize( knockdown, lube_flags = NONE, @@ -58,7 +88,7 @@ else RegisterSignal(parent, COMSIG_ATOM_ENTERED, PROC_REF(Slip)) -/datum/component/slippery/Destroy(force, silent) +/datum/component/slippery/Destroy(force) can_slip_callback = null on_slip_callback = null holder = null @@ -115,11 +145,12 @@ src.can_slip_callback = can_slip_callback if(slot_whitelist) src.slot_whitelist = slot_whitelist -/* +/** * The proc that does the sliping. Invokes the slip callback we have set. * - * source - the source of the signal - * AM - the atom/movable that is being slipped. + * Arguments + * * source - the source of the signal + * * arrived - the atom/movable that is being slipped. */ /datum/component/slippery/proc/Slip(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) SIGNAL_HANDLER @@ -130,21 +161,22 @@ if(HAS_TRAIT(turf, TRAIT_TURF_IGNORE_SLIPPERY)) return var/mob/living/victim = arrived - if((victim.movement_type & (FLYING | FLOATING))) + if(victim.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) return if(can_slip_callback && !can_slip_callback.Invoke(holder, victim)) return if(victim.slip(knockdown_time, parent, lube_flags, paralyze_time, force_drop_items)) on_slip_callback?.Invoke(victim) -/* +/** * Gets called when COMSIG_ITEM_EQUIPPED is sent to parent. * This proc register slip signals to the equipper. * If we have a slot whitelist, we only register the signals if the slot is valid (ex: clown PDA only slips in ID or belt slot). * - * source - the source of the signal - * equipper - the mob we're equipping the slippery thing to - * slot - the slot we're equipping the slippery thing to on the equipper. + * Arguments + * * source - the source of the signal + * * equipper - the mob we're equipping the slippery thing to + * * slot - the slot we're equipping the slippery thing to on the equipper. */ /datum/component/slippery/proc/on_equip(datum/source, mob/equipper, slot) SIGNAL_HANDLER @@ -155,12 +187,13 @@ AddComponent(/datum/component/connect_loc_behalf, holder, holder_connections) RegisterSignal(holder, COMSIG_QDELETING, PROC_REF(holder_deleted)) -/* +/** * Detects if the holder mob is deleted. * If our holder mob is the holder set in this component, we null it. * - * source - the source of the signal - * possible_holder - the mob being deleted. + * Arguments: + * * source - the source of the signal + * * possible_holder - the mob being deleted. */ /datum/component/slippery/proc/holder_deleted(datum/source, datum/possible_holder) SIGNAL_HANDLER @@ -168,12 +201,13 @@ if(possible_holder == holder) holder = null -/* +/** * Gets called when COMSIG_ITEM_DROPPED is sent to parent. * Makes our holder mob un-slippery. * - * source - the source of the signal - * user - the mob that was formerly wearing our slippery item. + * Arguments: + * * source - the source of the signal + * * user - the mob that was formerly wearing our slippery item. */ /datum/component/slippery/proc/on_drop(datum/source, mob/user) SIGNAL_HANDLER @@ -185,12 +219,13 @@ holder = null -/* +/** * The slip proc, but for equipped items. * Slips the person who crossed us if we're lying down and unbuckled. * - * source - the source of the signal - * AM - the atom/movable that slipped on us. + * Arguments: + * * source - the source of the signal + * * arrived - the atom/movable that slipped on us. */ /datum/component/slippery/proc/Slip_on_wearer(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) SIGNAL_HANDLER diff --git a/code/datums/components/smooth_tunes.dm b/code/datums/components/smooth_tunes.dm index c3025dbb54c7d6..0b86693f7f2b69 100644 --- a/code/datums/components/smooth_tunes.dm +++ b/code/datums/components/smooth_tunes.dm @@ -1,6 +1,3 @@ -///how many lines multiplied by tempo should at least be higher than this. -#define LONG_ENOUGH_SONG 220 - ///Smooth tunes component! Applied to musicians to give the songs they play special effects, according to a rite! ///Comes with BARTICLES!!! /datum/component/smooth_tunes @@ -27,7 +24,7 @@ src.particles_path = particles_path src.glow_color = glow_color -/datum/component/smooth_tunes/Destroy(force, silent) +/datum/component/smooth_tunes/Destroy(force) if(particle_holder) QDEL_NULL(particle_holder) qdel(linked_songtuner_rite) @@ -47,7 +44,7 @@ if(istype(starting_song.parent, /obj/structure/musician)) return //TODO: make stationary instruments work with no hiccups - if(starting_song.lines.len * starting_song.tempo > LONG_ENOUGH_SONG) + if(starting_song.lines.len * starting_song.tempo > FESTIVAL_SONG_LONG_ENOUGH) viable_for_final_effect = TRUE else to_chat(parent, span_warning("This song is too short, so it won't include the song finishing effect.")) @@ -56,6 +53,8 @@ if(linked_songtuner_rite.song_start_message) starting_song.parent.visible_message(linked_songtuner_rite.song_start_message) + linked_songtuner_rite.performer_start_effect(parent, starting_song) + ///prevent more songs from being blessed concurrently, mob signal UnregisterSignal(parent, COMSIG_ATOM_STARTING_INSTRUMENT) ///and hook into the instrument this time, preventing other weird exploity stuff. @@ -112,5 +111,3 @@ linked_songtuner_rite.song_effect(listener, parent) else stop_singing() - -#undef LONG_ENOUGH_SONG diff --git a/code/datums/components/spin2win.dm b/code/datums/components/spin2win.dm index 0812258f76997e..4524b403355f80 100644 --- a/code/datums/components/spin2win.dm +++ b/code/datums/components/spin2win.dm @@ -38,7 +38,7 @@ src.start_spin_message = start_spin_message src.end_spin_message = end_spin_message -/datum/component/spin2win/Destroy(force, silent) +/datum/component/spin2win/Destroy(force) on_spin_callback = null on_unspin_callback = null return ..() diff --git a/code/datums/components/spinny.dm b/code/datums/components/spinny.dm index bec04b3456016d..d3cf52e29e0702 100644 --- a/code/datums/components/spinny.dm +++ b/code/datums/components/spinny.dm @@ -18,7 +18,7 @@ turn_degrees = (reverse ? -90 : 90) START_PROCESSING(SSfastprocess, src) -/datum/component/spinny/Destroy(force, silent) +/datum/component/spinny/Destroy(force) STOP_PROCESSING(SSfastprocess, src) return ..() diff --git a/code/datums/components/spirit_holding.dm b/code/datums/components/spirit_holding.dm index 82c37e8f26bbd4..cb626801d86dcf 100644 --- a/code/datums/components/spirit_holding.dm +++ b/code/datums/components/spirit_holding.dm @@ -7,13 +7,13 @@ ///bool on if this component is currently polling for observers to inhabit the item var/attempting_awakening = FALSE ///mob contained in the item. - var/mob/living/simple_animal/shade/bound_spirit + var/mob/living/basic/shade/bound_spirit /datum/component/spirit_holding/Initialize() if(!ismovable(parent)) //you may apply this to mobs, i take no responsibility for how that works out return COMPONENT_INCOMPATIBLE -/datum/component/spirit_holding/Destroy(force, silent) +/datum/component/spirit_holding/Destroy(force) . = ..() if(bound_spirit) QDEL_NULL(bound_spirit) @@ -37,44 +37,40 @@ ///signal fired on self attacking parent /datum/component/spirit_holding/proc/on_attack_self(datum/source, mob/user) SIGNAL_HANDLER - INVOKE_ASYNC(src, PROC_REF(attempt_spirit_awaken), user) -/** - * attempt_spirit_awaken: called from on_attack_self, polls ghosts to possess the item in the form - * of a mob sitting inside the item itself - * - * Arguments: - * * awakener: user who interacted with the blade - */ -/datum/component/spirit_holding/proc/attempt_spirit_awaken(mob/awakener) + var/atom/thing = parent + if(attempting_awakening) - to_chat(awakener, span_warning("You are already trying to awaken [parent]!")) + thing.balloon_alert(user, "already channeling!") return if(!(GLOB.ghost_role_flags & GHOSTROLE_STATION_SENTIENCE)) - to_chat(awakener, span_warning("Anomalous otherworldly energies block you from awakening [parent]!")) + thing.balloon_alert(user, "spirits are unwilling!") + to_chat(user, span_warning("Anomalous otherworldly energies block you from awakening [parent]!")) return attempting_awakening = TRUE - to_chat(awakener, span_notice("You attempt to wake the spirit of [parent]...")) + thing.balloon_alert(user, "channeling...") - var/datum/callback/to_call = CALLBACK(src, PROC_REF(affix_spirit), awakener) + var/datum/callback/to_call = CALLBACK(src, PROC_REF(affix_spirit), user) parent.AddComponent(/datum/component/orbit_poll, \ ignore_key = POLL_IGNORE_POSSESSED_BLADE, \ job_bans = ROLE_PAI, \ to_call = to_call, \ - title = "Spirit of [awakener.real_name]'s blade", \ + title = "Spirit of [user.real_name]'s blade", \ ) - //Immediately unregister to prevent making a new spirit - UnregisterSignal(parent, COMSIG_ITEM_ATTACK_SELF) - /// On conclusion of the ghost poll /datum/component/spirit_holding/proc/affix_spirit(mob/awakener, mob/dead/observer/ghost) + var/atom/thing = parent + if(isnull(ghost)) - to_chat(awakener, span_warning("[parent] is dormant. Maybe you can try again later.")) + thing.balloon_alert(awakener, "silence...") attempting_awakening = FALSE return + // Immediately unregister to prevent making a new spirit + UnregisterSignal(parent, COMSIG_ITEM_ATTACK_SELF) + if(QDELETED(parent)) //if the thing that we're conjuring a spirit in has been destroyed, don't create a spirit to_chat(ghost, span_userdanger("The new vessel for your spirit has been destroyed! You remain an unbound ghost.")) return diff --git a/code/datums/components/squashable.dm b/code/datums/components/squashable.dm index 8174127aeb39cd..785c6771ad3f0b 100644 --- a/code/datums/components/squashable.dm +++ b/code/datums/components/squashable.dm @@ -29,7 +29,7 @@ AddComponent(/datum/component/connect_loc_behalf, parent, loc_connections) -/datum/component/squashable/Destroy(force, silent) +/datum/component/squashable/Destroy(force) on_squash_callback = null return ..() @@ -54,7 +54,7 @@ return //Everything worked, we're done! 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(crossing_mob.mob_size > MOB_SIZE_SMALL && !(crossing_mob.movement_type & MOVETYPES_NOT_TOUCHING_GROUND)) if(HAS_TRAIT(crossing_mob, TRAIT_PACIFISM)) 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 diff --git a/code/datums/components/squeak.dm b/code/datums/components/squeak.dm index af0686fd1eb323..c5d42797ab433e 100644 --- a/code/datums/components/squeak.dm +++ b/code/datums/components/squeak.dm @@ -98,7 +98,7 @@ var/obj/item/I = arrived if(I.item_flags & ABSTRACT) return - if(arrived.movement_type & (FLYING|FLOATING) || !arrived.has_gravity()) + if((arrived.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) || !arrived.has_gravity()) return if(ismob(arrived) && !arrived.density) // Prevents 10 overlapping mice from making an unholy sound while moving return diff --git a/code/datums/components/strong_pull.dm b/code/datums/components/strong_pull.dm index bfcfb34c163a21..afb46b7252d588 100644 --- a/code/datums/components/strong_pull.dm +++ b/code/datums/components/strong_pull.dm @@ -10,7 +10,7 @@ Basically, the items they pull cannot be pulled (except by the puller) if(!isliving(parent)) return COMPONENT_INCOMPATIBLE -/datum/component/strong_pull/Destroy(force, silent) +/datum/component/strong_pull/Destroy(force) if(strongpulling) lose_strong_grip() return ..() diff --git a/code/datums/components/style/style.dm b/code/datums/components/style/style.dm index 99fe652fad64e2..fd4c2580a7996f 100644 --- a/code/datums/components/style/style.dm +++ b/code/datums/components/style/style.dm @@ -98,7 +98,7 @@ RegisterSignal(src, COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), PROC_REF(on_parent_multitool)) - ADD_TRAIT(mob_parent, TRAIT_STYLISH, REF(src)) // SKYRAT EDIT ADD - allows style meter chads to do flips + ADD_TRAIT(mob_parent, TRAIT_STYLISH, REF(src)) // NOVA EDIT ADD - allows style meter chads to do flips /datum/component/style/RegisterWithParent() RegisterSignal(parent, COMSIG_MOB_ITEM_AFTERATTACK, PROC_REF(hotswap)) @@ -146,13 +146,13 @@ qdel(projectile_parry.resolve()) -/datum/component/style/Destroy(force, silent) +/datum/component/style/Destroy(force) STOP_PROCESSING(SSdcs, src) var/mob/mob_parent = parent if(mob_parent.hud_used) mob_parent.hud_used.static_inventory -= meter mob_parent.hud_used.show_hud(mob_parent.hud_used.hud_version) - REMOVE_TRAIT(mob_parent, TRAIT_STYLISH, REF(src)) // SKYRAT EDIT ADD - allows style meter chads to do flips + REMOVE_TRAIT(mob_parent, TRAIT_STYLISH, REF(src)) // NOVA EDIT ADD - allows style meter chads to do flips return ..() diff --git a/code/datums/components/subtype_picker.dm b/code/datums/components/subtype_picker.dm index 2bc429f9b70796..78401c9e022938 100644 --- a/code/datums/components/subtype_picker.dm +++ b/code/datums/components/subtype_picker.dm @@ -22,7 +22,7 @@ src.on_picked_callback = on_picked_callback build_radial_list() -/datum/component/subtype_picker/Destroy(force, silent) +/datum/component/subtype_picker/Destroy(force) on_picked_callback = null return ..() diff --git a/code/datums/components/supermatter_crystal.dm b/code/datums/components/supermatter_crystal.dm index 38968d1e3d1f5d..122cc021fab806 100644 --- a/code/datums/components/supermatter_crystal.dm +++ b/code/datums/components/supermatter_crystal.dm @@ -28,7 +28,7 @@ src.tool_act_callback = tool_act_callback src.consume_callback = consume_callback -/datum/component/supermatter_crystal/Destroy(force, silent) +/datum/component/supermatter_crystal/Destroy(force) tool_act_callback = null consume_callback = null return ..() @@ -212,7 +212,7 @@ SIGNAL_HANDLER if(tool_act_callback) tool_act_callback.Invoke(user, tool) - return COMPONENT_BLOCK_TOOL_ATTACK + return ITEM_INTERACT_BLOCKING attackby_hit(source, tool, user) /datum/component/supermatter_crystal/proc/bumped_hit(datum/source, atom/movable/hit_object) @@ -300,9 +300,13 @@ message_admins("[atom_source] has consumed [key_name_admin(consumed_mob)] [ADMIN_JMP(atom_source)].") atom_source.investigate_log("has consumed [key_name(consumed_mob)].", INVESTIGATE_ENGINE) consumed_mob.investigate_log("has been dusted by [atom_source].", INVESTIGATE_DEATHS) - if(istype(consumed_mob, /mob/living/simple_animal/parrot/poly)) // Dusting Poly creates a power surge + if(istype(consumed_mob, /mob/living/basic/parrot/poly)) // Dusting Poly creates a power surge force_event(/datum/round_event_control/supermatter_surge/poly, "Poly's revenge") - notify_ghosts("[consumed_mob] has been dusted by [atom_source]!", source = atom_source, action = NOTIFY_JUMP, header = "Polytechnical Difficulties") + notify_ghosts( + "[consumed_mob] has been dusted by [atom_source]!", + source = atom_source, + header = "Polytechnical Difficulties", + ) consumed_mob.dust(force = TRUE) matter_increase += 100 * object_size if(is_clown_job(consumed_mob.mind?.assigned_role)) @@ -341,7 +345,7 @@ near_mob.show_message(span_hear("An unearthly ringing fills your ears, and you find your skin covered in new radiation burns."), MSG_AUDIBLE) consume_returns(matter_increase, damage_increase) var/obj/machinery/power/supermatter_crystal/our_crystal = parent - if(istype(parent)) + if(istype(our_crystal)) our_crystal.log_activation(who = consumed_object) /datum/component/supermatter_crystal/proc/consume_returns(matter_increase = 0, damage_increase = 0) diff --git a/code/datums/components/surgery_initiator.dm b/code/datums/components/surgery_initiator.dm index bc8b0ee9b97faf..bb817612e98309 100644 --- a/code/datums/components/surgery_initiator.dm +++ b/code/datums/components/surgery_initiator.dm @@ -14,7 +14,7 @@ var/obj/item/surgery_tool = parent surgery_tool.item_flags |= ITEM_HAS_CONTEXTUAL_SCREENTIPS -/datum/component/surgery_initiator/Destroy(force, silent) +/datum/component/surgery_initiator/Destroy(force) last_user_ref = null surgery_target_ref = null @@ -233,9 +233,9 @@ if (surgery_needs_exposure(surgery, surgery_target)) surgery_info["blocked"] = TRUE - surgery_info["blocked_reason"] = "Their body is covered!" // SKYRAT EDIT ADDITION - Surgically unremovable bodyparts + surgery_info["blocked_reason"] = "Their body is covered!" // NOVA EDIT ADDITION - Surgically unremovable bodyparts - // SKYRAT EDIT START - Surgically unremovable bodyparts + // NOVA EDIT START - Surgically unremovable bodyparts if (surgery.removes_target_bodypart) if (iscarbon(surgery_target)) var/mob/living/carbon/carbon_target = surgery_target @@ -243,7 +243,7 @@ if(!affecting_limb.can_be_surgically_removed) surgery_info["blocked"] = TRUE surgery_info["blocked_reason"] = "That limb cannot be surgically removed!" - // SKYRAT EDIT END + // NOVA EDIT END surgeries += list(surgery_info) @@ -314,11 +314,11 @@ target.balloon_alert(user, "not the right type of limb!") return - // SKYRAT EDIT START - Limbs that can't be surgically removed + // NOVA EDIT START - Limbs that can't be surgically removed if (surgery.removes_target_bodypart && !isnull(affecting_limb) && !affecting_limb.can_be_surgically_removed) target.balloon_alert(user, "limb can't be surgically removed!") return - // SKYRAT EDIT END + // NOVA EDIT END if (IS_IN_INVALID_SURGICAL_POSITION(target, surgery)) target.balloon_alert(user, "patient is not lying down!") diff --git a/code/datums/components/swabbing.dm b/code/datums/components/swabbing.dm index fa649a5e0184f9..12d851afe39fda 100644 --- a/code/datums/components/swabbing.dm +++ b/code/datums/components/swabbing.dm @@ -32,7 +32,7 @@ This component is used in vat growing to swab for microbiological samples which src.update_icons = update_icons src.update_overlays = update_overlays -/datum/component/swabbing/Destroy(force, silent) +/datum/component/swabbing/Destroy(force) for(var/swabbed in swabbed_items) qdel(swabbed) update_icons = null diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm index a5b5606bf724cb..d93a6e3d3c5d38 100644 --- a/code/datums/components/tackle.dm +++ b/code/datums/components/tackle.dm @@ -54,18 +54,18 @@ /datum/component/tackler/RegisterWithParent() RegisterSignal(parent, COMSIG_MOB_CLICKON, PROC_REF(checkTackle)) - RegisterSignal(parent, COMSIG_MOVABLE_IMPACT, PROC_REF(sack)) + RegisterSignal(parent, COMSIG_MOVABLE_PRE_IMPACT, PROC_REF(sack)) RegisterSignal(parent, COMSIG_MOVABLE_POST_THROW, PROC_REF(registerTackle)) /datum/component/tackler/UnregisterFromParent() - UnregisterSignal(parent, list(COMSIG_MOB_CLICKON, COMSIG_MOVABLE_IMPACT, COMSIG_MOVABLE_MOVED, COMSIG_MOVABLE_POST_THROW)) + UnregisterSignal(parent, list(COMSIG_MOB_CLICKON, COMSIG_MOVABLE_PRE_IMPACT, COMSIG_MOVABLE_MOVED, COMSIG_MOVABLE_POST_THROW)) ///Store the thrownthing datum for later use /datum/component/tackler/proc/registerTackle(mob/living/carbon/user, datum/thrownthing/tackle) SIGNAL_HANDLER tackle_ref = WEAKREF(tackle) - tackle.thrower = user + tackle.thrower = WEAKREF(user) ///See if we can tackle or not. If we can, leap! /datum/component/tackler/proc/checkTackle(mob/living/carbon/user, atom/clicked_atom, list/modifiers) @@ -96,7 +96,7 @@ to_chat(user, span_warning("You're not ready to tackle!")) return - if(user.has_movespeed_modifier(/datum/movespeed_modifier/shove)) // can't tackle if you just got shoved + if(user.get_timed_status_effect_duration(/datum/status_effect/staggered)) // can't tackle if you're staggered to_chat(user, span_warning("You're too off balance to tackle!")) return @@ -106,7 +106,7 @@ RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(checkObstacle)) playsound(user, 'sound/weapons/thudswoosh.ogg', 40, TRUE, -1) - var/leap_word = isfeline(user) ? "pounce" : "leap" //If cat, "pounce" instead of "leap". // SKYRAT EDIT - FELINE TRAITS. Was: isfelinid(user) + var/leap_word = isfeline(user) ? "pounce" : "leap" //If cat, "pounce" instead of "leap". // NOVA EDIT - FELINE TRAITS. Was: isfelinid(user) if(can_see(user, clicked_atom, 7)) user.visible_message(span_warning("[user] [leap_word]s at [clicked_atom]!"), span_danger("You [leap_word] at [clicked_atom]!")) else @@ -131,12 +131,9 @@ * Check [rollTackle()][/datum/component/tackler/proc/rollTackle] for a more thorough explanation on the modifiers at play. * * Then, we figure out what effect we want, and we get to work! Note that with standard gripper gloves and no modifiers, the range of rolls is (-3, 3). The results are as follows, based on what we rolled: - * * -inf to -5: Seriously botched tackle, tackler suffers a concussion, brute damage, and a 3 second paralyze, target suffers nothing - * * -4 to -2: weak tackle, tackler gets 3 second knockdown, target gets shove slowdown but is otherwise fine - * * -1 to 0: decent tackle, tackler gets up a bit quicker than the target - * * 1: solid tackle, tackler has more of an advantage getting up quicker - * * 2 to 4: expert tackle, tackler has sizeable advantage and lands on their feet with a free passive grab - * * 5 to inf: MONSTER tackle, tackler gets up immediately and gets a free aggressive grab, target takes sizeable stamina damage from the hit and is paralyzed for one and a half seconds and knocked down for three seconds + * * -inf to -1: We have a negative roll result, which means something unfortunate or less than ideal happens to our sacker! Could mean just getting knocked down, but it could also mean they get a concussion. Ouch. + * * 0: We get a relatively neutral result, mildly favouring the tackler. + * * 1 to inf: We get a positive roll result, which means we get a reasonable to significant advantage against the target! * * Finally, we return a bitflag to [COMSIG_MOVABLE_IMPACT] that forces the hitpush to false so that we don't knock them away. */ @@ -155,53 +152,76 @@ return var/mob/living/carbon/target = hit - var/mob/living/carbon/human/T = target - var/mob/living/carbon/human/S = user - var/tackle_word = isfeline(user) ? "pounce" : "tackle" //If cat, "pounce" instead of "tackle". // SKYRAT EDIT - FELINE TRAITS. Was: isfelinid(user) + var/tackle_word = isfeline(user) ? "pounce" : "tackle" //If cat, "pounce" instead of "tackle". // NOVA EDIT - FELINE TRAITS - ORIGINAL : var/tackle_word = isfelinid(user) ? "pounce" : "tackle" var/roll = rollTackle(target) tackling = FALSE tackle.gentle = TRUE + if(target.check_block(user, 0, user.name, attack_type = LEAP_ATTACK)) + user.visible_message(span_danger("[user]'s tackle is blocked by [target], softening the effect!"), span_userdanger("Your tackle is blocked by [target], softening the effect!"), ignored_mobs = target) + to_chat(target, span_userdanger("[target] blocks [user]'s tackle attempt, softening the effect!")) + neutral_outcome(user, target, tackle_word) //Forces a neutral outcome so you're not screwed too much from being blocked while tackling + return COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH + + + switch(roll) - if(-INFINITY to -5) - user.visible_message(span_danger("[user] botches [user.p_their()] [tackle_word] and slams [user.p_their()] head into [target], knocking [user.p_them()]self silly!"), span_userdanger("You botch your [tackle_word] and slam your head into [target], knocking yourself silly!"), ignored_mobs = target) - to_chat(target, span_userdanger("[user] botches [user.p_their()] [tackle_word] and slams [user.p_their()] head into you, knocking [user.p_them()]self silly!")) + if(-INFINITY to -1) + negative_outcome(user, target, roll, tackle_word) //OOF - user.Paralyze(3 SECONDS) - var/obj/item/bodypart/head/hed = user.get_bodypart(BODY_ZONE_HEAD) - if(hed) - hed.receive_damage(brute = 15, updating_health = TRUE, wound_bonus = CANT_WOUND) - user.gain_trauma(/datum/brain_trauma/mild/concussion) + if(0) //nothing good, nothing bad + neutral_outcome(user, target, tackle_word) - if(-4 to -2) // glancing blow at best - user.visible_message(span_warning("[user] lands a weak [tackle_word] on [target], briefly knocking [target.p_them()] off-balance!"), span_userdanger("You land a weak [tackle_word] on [target], briefly knocking [target.p_them()] off-balance!"), ignored_mobs = target) - to_chat(target, span_userdanger("[user] lands a weak [tackle_word] on you, briefly knocking you off-balance!")) + if(1 to INFINITY) + positive_outcome(user, target, roll, tackle_word) - user.Knockdown(30) - if(ishuman(target) && !T.has_movespeed_modifier(/datum/movespeed_modifier/shove)) - T.add_movespeed_modifier(/datum/movespeed_modifier/shove) // maybe define a slightly more severe/longer slowdown for this - addtimer(CALLBACK(T, TYPE_PROC_REF(/mob/living/carbon, clear_shove_slowdown)), SHOVE_SLOWDOWN_LENGTH * 2) + return COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH - if(-1 to 0) // decent hit, both parties are about equally inconvenienced - user.visible_message(span_warning("[user] lands a passable [tackle_word] on [target], sending them both tumbling!"), span_userdanger("You land a passable [tackle_word] on [target], sending you both tumbling!"), ignored_mobs = target) - to_chat(target, span_userdanger("[user] lands a passable [tackle_word] on you, sending you both tumbling!")) +/** + * Our positive tackling outcomes. + * + * We pass our tackle result here to determine the potential outcome of the tackle. Typically, this results in a very poor state for the tackled, and a positive outcome for the tackler. + * + * First, we determine severity by taking our roll result, multiplying it by 10, and then rolling within that value. + * + * If our target is human, their armor will reduce the severity of the roll. We pass along any MELEE armor as a percentage reduction. + * If they're not human (such as a carbon), we give them a small grace of a 10% reduction. + * + * Finally, we figure out what effect our target receives. Note that all positive outcomes inflict staggered, resulting in a much harder time escaping the potential grab: + * * 1 to 20: Our target is briefly stunned and knocked down. suffers 30 stamina damage, and our tackler is also knocked down. + * * 21 to 49: Our target is knocked down, dealt 40 stamina damage, and put into a passive grab. Given they are staggered, this means the target must resist to escape! + * * 50 to inf: Our target is hit with a significant chunk of stamina damage, put into an aggressive grab, and knocked down. They're probably not escaping after this. If our tackler is stamcrit when they land this, so is our target. +*/ - target.adjustStaminaLoss(stamina_cost) - target.Paralyze(0.5 SECONDS) - user.Knockdown(2 SECONDS) - target.Knockdown(2.5 SECONDS) +/datum/component/tackler/proc/positive_outcome(mob/living/carbon/user, mob/living/carbon/target, roll = 1, tackle_word = "tackle") + var/potential_outcome = (roll * 10) - if(1 to 2) // solid hit, tackler has a slight advantage + if(ishuman(target)) + var/mob/living/carbon/human/human_target = target + var/target_armor = human_target.run_armor_check(BODY_ZONE_CHEST, MELEE) + potential_outcome *= ((100 - target_armor) /100) + else + potential_outcome *= 0.9 + + var/mob/living/carbon/human/human_target = target + var/mob/living/carbon/human/human_sacker = user + + switch(potential_outcome) + if(-INFINITY to 0) //I don't want to know how this has happened, okay? + neutral_outcome(user, target, roll, tackle_word) //Default to neutral + + if(1 to 20) user.visible_message(span_warning("[user] lands a solid [tackle_word] on [target], knocking them both down hard!"), span_userdanger("You land a solid [tackle_word] on [target], knocking you both down hard!"), ignored_mobs = target) to_chat(target, span_userdanger("[user] lands a solid [tackle_word] on you, knocking you both down hard!")) - target.adjustStaminaLoss(30) + target.apply_damage(30, STAMINA) target.Paralyze(0.5 SECONDS) user.Knockdown(1 SECONDS) target.Knockdown(2 SECONDS) + target.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH * 2, 10 SECONDS) - if(3 to 4) // really good hit, the target is definitely worse off here. Without positive modifiers, this is as good a tackle as you can land + if(21 to 49) // really good hit, the target is definitely worse off here. Without positive modifiers, this is as good a tackle as you can land user.visible_message(span_warning("[user] lands an expert [tackle_word] on [target], knocking [target.p_them()] down hard while landing on [user.p_their()] feet with a passive grip!"), span_userdanger("You land an expert [tackle_word] on [target], knocking [target.p_them()] down hard while landing on your feet with a passive grip!"), ignored_mobs = target) to_chat(target, span_userdanger("[user] lands an expert [tackle_word] on you, knocking you down hard and maintaining a passive grab!")) @@ -209,22 +229,24 @@ user.SetKnockdown(0, ignore_canstun = TRUE) user.get_up(TRUE) user.forceMove(get_turf(target)) - target.adjustStaminaLoss(40) + target.apply_damage(40, STAMINA) target.Paralyze(0.5 SECONDS) target.Knockdown(3 SECONDS) + target.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH * 2, 10 SECONDS) if(ishuman(target) && ishuman(user)) - INVOKE_ASYNC(S.dna.species, TYPE_PROC_REF(/datum/species, grab), S, T) - S.setGrabState(GRAB_PASSIVE) + INVOKE_ASYNC(human_sacker.dna.species, TYPE_PROC_REF(/datum/species, grab), human_sacker, human_target) + human_sacker.setGrabState(GRAB_PASSIVE) - if(5 to INFINITY) // absolutely BODIED + if(50 to INFINITY) // absolutely BODIED var/stamcritted_user = HAS_TRAIT_FROM(user, TRAIT_INCAPACITATED, STAMINA) - if(stamcritted_user) // in case the user went into stamcrit from the tackle itself and cannot actually aggro grab (since they will be crit) we make the tackle a bit more effective on the target + if(stamcritted_user) // in case the user went into stamcrit from the tackle itself and cannot actually aggro grab (since they will be crit) we make the tackle effectivelly mutually assured...stamina crit user.visible_message(span_warning("[user] lands a monsterly reckless [tackle_word] on [target], knocking both of them senseless!"), span_userdanger("You land a monsterly reckless [tackle_word] on [target], knocking both of you senseless!"), ignored_mobs = target) to_chat(target, span_userdanger("[user] lands a monsterly reckless [tackle_word] on you, knocking the both of you senseless!")) user.forceMove(get_turf(target)) - target.adjustStaminaLoss(60) + target.apply_damage(100, STAMINA) // CRASHING THIS PLANE WITH NO SURVIVORS target.Paralyze(1 SECONDS) target.Knockdown(5 SECONDS) + target.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH * 3, 10 SECONDS) else user.visible_message(span_warning("[user] lands a monster [tackle_word] on [target], knocking [target.p_them()] senseless and applying an aggressive pin!"), span_userdanger("You land a monster [tackle_word] on [target], knocking [target.p_them()] senseless and applying an aggressive pin!"), ignored_mobs = target) to_chat(target, span_userdanger("[user] lands a monster [tackle_word] on you, knocking you senseless and aggressively pinning you!")) @@ -233,15 +255,90 @@ user.SetKnockdown(0, ignore_canstun = TRUE) user.get_up(TRUE) user.forceMove(get_turf(target)) - target.adjustStaminaLoss(40) + target.apply_damage(60, STAMINA) target.Paralyze(0.5 SECONDS) target.Knockdown(3 SECONDS) + target.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH * 3, 10 SECONDS) if(ishuman(target) && ishuman(user)) - INVOKE_ASYNC(S.dna.species, TYPE_PROC_REF(/datum/species, grab), S, T) - S.setGrabState(GRAB_AGGRESSIVE) + INVOKE_ASYNC(human_sacker.dna.species, TYPE_PROC_REF(/datum/species, grab), human_sacker, human_target) + human_sacker.setGrabState(GRAB_AGGRESSIVE) +/** + * Our neutral tackling outcome. + * + * Our tackler and our target are staggered. The target longer than the tackler. However, the tackler stands up after this outcome. This is maybe less neutral than it appears, but the tackler initiated, so... + * This outcome also occurs when our target has blocked the tackle in some way, preventing situations where someone tackling into a blocker is too severely punished as a result. Hence, this has its own proc. +*/ - return COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH +/datum/component/tackler/proc/neutral_outcome(mob/living/carbon/user, mob/living/carbon/target, roll = 1, tackle_word = "tackle") + + + user.visible_message(span_warning("[user] lands a [tackle_word] on [target], briefly staggering them both!"), span_userdanger("You land a [tackle_word] on [target], briefly staggering [target.p_them()] and yourself!"), ignored_mobs = target) + to_chat(target, span_userdanger("[user] lands a [tackle_word] on you, briefly staggering you both!")) + + user.get_up(TRUE) + user.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH, 10 SECONDS) + target.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH * 2, 10 SECONDS) //okay maybe slightly good for the sacker, it's a mild benefit okay? + +/** + * Our negative tackling outcomes. + * + * We pass our tackle result here to determine the potential outcome of the tackle. Typically, this results in a very poor state for the tackler, and a mostly okay outcome for the tackled. + * + * First, we determine severity by taking our roll result, multiplying it by -10, and then rolling within that value. + * + * If our tackler is human, their armor will reduce the severity of the roll. We pass along any MELEE armor as a percentage reduction. + * If they're not human (such as a carbon), we give them a small grace of a 10% reduction. + * + * Finally, we figure out what effect our target receives and what our tackler receives: + * * 1 to 20: Our tackler is knocked down and become staggered, and our target suffers stamina damage and is knocked staggered. So not all bad, but the target most likely can punish you for this. + * * 21 to 49: Our tackler is knocked down, suffers stamina damage, and is staggered. Ouch. + * * 50 to inf: Our tackler suffers a catastrophic failure, receiving significant stamina damage, a concussion, and is paralyzed for 3 seconds. Oh, and they're staggered for a LONG time. +*/ + +/datum/component/tackler/proc/negative_outcome(mob/living/carbon/user, mob/living/carbon/target, roll = -1, tackle_word = "tackle") + var/potential_roll_outcome = (roll * -10) + + if(ishuman(user)) + var/mob/living/carbon/human/human_sacker = target + var/attacker_armor = human_sacker.run_armor_check(BODY_ZONE_CHEST, MELEE) + potential_roll_outcome *= ((100 - attacker_armor) /100) + else + potential_roll_outcome *= 0.9 + + var/actual_roll = rand(1, potential_roll_outcome) + + switch(actual_roll) + + if(-INFINITY to 0) //I don't want to know how this has happened, okay? + neutral_outcome(user, target, roll, tackle_word) //Default to neutral + + if(1 to 20) // It's not completely terrible! But you are somewhat vulernable for doing it. + user.visible_message(span_warning("[user] lands a weak [tackle_word] on [target], briefly staggering [target.p_them()]!"), span_userdanger("You land a weak [tackle_word] on [target], briefly staggering [target.p_them()]!"), ignored_mobs = target) + to_chat(target, span_userdanger("[user] lands a weak [tackle_word] on you, staggering you!")) + + user.Knockdown(1 SECONDS) + user.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH * 2, 10 SECONDS) + target.apply_damage(20, STAMINA) + target.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH * 2, 10 SECONDS) + + if(21 to 49) // oughe + user.visible_message(span_warning("[user] lands a dreadful [tackle_word] on [target], briefly knocking [user.p_them()] to the ground!"), span_userdanger("You land a dreadful [tackle_word] on [target], briefly knocking you to the ground!"), ignored_mobs = target) + to_chat(target, span_userdanger("[user] lands a dreadful [tackle_word] on you, briefly knocking [user.p_them()] to the ground!")) + + user.Knockdown(3 SECONDS) + user.apply_damage(40, STAMINA) + user.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH * 2, 10 SECONDS) + + if(50 to INFINITY) // It has been decided that you will suffer + user.visible_message(span_danger("[user] botches [user.p_their()] [tackle_word] and slams [user.p_their()] head into [target], knocking [user.p_them()]self silly!"), span_userdanger("You botch your [tackle_word] and slam your head into [target], knocking yourself silly!"), ignored_mobs = target) + to_chat(target, span_userdanger("[user] botches [user.p_their()] [tackle_word] and slams [user.p_their()] head into you, knocking [user.p_them()]self silly!")) + + user.Paralyze(3 SECONDS) + user.apply_damage(80, STAMINA) + user.apply_damage(20, BRUTE, BODY_ZONE_HEAD) + user.gain_trauma(/datum/brain_trauma/mild/concussion) + user.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH * 3, 10 SECONDS) /** * This handles all of the modifiers for the actual carbon-on-carbon tackling, and gets its own proc because of how many there are (with plenty more in mind!) @@ -266,14 +363,21 @@ else if(target_drunkenness > 30) defense_mod -= 1 + //Arms contribute a great deal to potential tackling prowess and defense. Better arms = better bonus + var/obj/item/bodypart/arm/defender_arm = target.get_active_hand() + + if(defender_arm) //the target may not actually have arms + defense_mod += (defender_arm.unarmed_effectiveness/10) + else //sucks to be you if you don't though haha + defense_mod -= 2 + if(HAS_TRAIT(target, TRAIT_CLUMSY)) defense_mod -= 2 if(HAS_TRAIT(target, TRAIT_FAT)) // chonkers are harder to knock over defense_mod += 1 if(HAS_TRAIT(target, TRAIT_GRABWEAKNESS)) defense_mod -= 2 - if(HAS_TRAIT(target, TRAIT_DWARF)) - defense_mod -= 2 + if(HAS_TRAIT(target, TRAIT_GIANT)) defense_mod += 2 if(target.get_organic_health() < 50) @@ -289,15 +393,15 @@ if(ishuman(target)) var/mob/living/carbon/human/tackle_target = target + if(tackle_target.get_mob_height() <= HUMAN_HEIGHT_SHORTEST) //WHO ARE YOU CALLING SHORT? + defense_mod -= 2 + if(isnull(tackle_target.wear_suit) && isnull(tackle_target.w_uniform)) // who honestly puts all of their effort into tackling a naked guy? defense_mod += 2 if(tackle_target.mob_negates_gravity()) defense_mod += 1 if(tackle_target.is_shove_knockdown_blocked()) // riot armor and such defense_mod += 5 - if(tackle_target.is_holding_item_of_type(/obj/item/shield)) - defense_mod += 2 - var/obj/item/organ/external/tail/lizard/el_tail = tackle_target.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) if(HAS_TRAIT(tackle_target, TRAIT_TACKLING_TAILED_DEFENDER) && !el_tail) @@ -308,6 +412,15 @@ // OF-FENSE var/mob/living/carbon/sacker = parent var/sacker_drunkenness = sacker.get_drunk_amount() + + //Arms contribute a great deal to potential tackling prowess and defense. Better arms = better bonus + var/obj/item/bodypart/arm/sacker_arm = sacker.get_active_hand() + + if(sacker_arm) //I have no idea how you would be tackling without hands, but just in case + attack_mod += (sacker_arm.unarmed_effectiveness/10) + else //I don't want to know how you got to this point but if you have, fuck you, good luck tackling without ARMS + attack_mod -= 4 + if(sacker_drunkenness > 60) // you're far too drunk to hold back! attack_mod += 1 else if(sacker_drunkenness > 30) // if you're only a bit drunk though, you're just sloppy @@ -315,10 +428,10 @@ if(HAS_TRAIT(sacker, TRAIT_CLUMSY)) attack_mod -= 2 - if(HAS_TRAIT(sacker, TRAIT_DWARF)) - attack_mod -= 2 if(HAS_TRAIT(sacker, TRAIT_GIANT)) attack_mod += 2 + if(HAS_TRAIT(sacker, TRAIT_NOGUNS)) //Those dedicated to martial combat are particularly skilled tacklers + attack_mod += 2 if(HAS_TRAIT(sacker, TRAIT_TACKLING_WINGED_ATTACKER)) var/obj/item/organ/external/wings/moth/sacker_moth_wing = sacker.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS) @@ -328,16 +441,22 @@ if(sacker_wing) attack_mod += 2 - if(ishuman(target)) - var/mob/living/carbon/human/S = sacker + if(ishuman(sacker)) + var/mob/living/carbon/human/human_sacker = sacker - var/suit_slot = S.get_item_by_slot(ITEM_SLOT_OCLOTHING) - if(suit_slot && (istype(suit_slot,/obj/item/clothing/suit/armor/riot))) // tackling in riot armor is more effective, but tiring + if(human_sacker.get_mob_height() <= HUMAN_HEIGHT_SHORTEST) //JUST YOU WAIT TILL I FIND A CHAIR, BUDDY, THEN YOU'LL BE SORRY + attack_mod -= 2 + + if(human_sacker.mob_mood.sanity_level == SANITY_INSANE) //I've gone COMPLETELY INSANE + attack_mod += 15 + human_sacker.adjustStaminaLoss(100) //AHAHAHAHAHAHAHAHA + + if(human_sacker.is_shove_knockdown_blocked()) // tackling with riot specialized armor, like riot armor, is effective but tiring attack_mod += 2 - sacker.adjustStaminaLoss(20) + human_sacker.adjustStaminaLoss(20) - var/r = rand(-3, 3) - defense_mod + attack_mod + skill_mod - return r + var/randomized_tackle_roll = rand(-3, 3) - defense_mod + attack_mod + skill_mod + return randomized_tackle_roll /** diff --git a/code/datums/components/tactical.dm b/code/datums/components/tactical.dm index ec78f3dfeb9fb7..e8e54926949285 100644 --- a/code/datums/components/tactical.dm +++ b/code/datums/components/tactical.dm @@ -40,7 +40,6 @@ var/obj/item/master = parent var/image/I = image(icon = master.icon, icon_state = master.icon_state, loc = user) - SET_PLANE_EXPLICIT(I, GAME_PLANE_FOV_HIDDEN, master) I.copy_overlays(master) I.override = TRUE source.add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/everyone, "sneaking_mission", I) diff --git a/code/datums/components/takes_reagent_appearance.dm b/code/datums/components/takes_reagent_appearance.dm index 6505290b4cbb0a..96b9a4d6f0c186 100644 --- a/code/datums/components/takes_reagent_appearance.dm +++ b/code/datums/components/takes_reagent_appearance.dm @@ -43,7 +43,7 @@ src.base_container_type = base_container_type || parent.type -/datum/component/takes_reagent_appearance/Destroy(force, silent) +/datum/component/takes_reagent_appearance/Destroy(force) on_icon_changed = null on_icon_reset = null return ..() @@ -89,10 +89,10 @@ * * Returns [NONE] if the name was reset to initial state */ /datum/component/takes_reagent_appearance/proc/update_name(datum/glass_style/style) - var/obj/item/item_parent = parent - if(item_parent.renamedByPlayer) + if(HAS_TRAIT(parent, TRAIT_WAS_RENAMED)) return NONE + var/obj/item/item_parent = parent if(isnull(style)) // no style (reset) item_parent.name = initial(item_parent.name) @@ -111,10 +111,10 @@ * * Returns [NONE] if the description was reset to initial state */ /datum/component/takes_reagent_appearance/proc/update_desc(datum/glass_style/style) - var/obj/item/item_parent = parent - if(item_parent.renamedByPlayer) + if(HAS_TRAIT(parent, TRAIT_WAS_RENAMED)) return NONE + var/obj/item/item_parent = parent if(isnull(style)) // no style (reset) item_parent.desc = initial(item_parent.desc) diff --git a/code/datums/components/tameable.dm b/code/datums/components/tameable.dm index 81228b2c3ccdd2..3da6d61614997c 100644 --- a/code/datums/components/tameable.dm +++ b/code/datums/components/tameable.dm @@ -32,7 +32,7 @@ RegisterSignal(parent, COMSIG_SIMPLEMOB_SENTIENCEPOTION, PROC_REF(on_tame)) //Instantly succeeds RegisterSignal(parent, COMSIG_SIMPLEMOB_TRANSFERPOTION, PROC_REF(on_tame)) //Instantly succeeds -/datum/component/tameable/Destroy(force, silent) +/datum/component/tameable/Destroy(force) after_tame = null return ..() diff --git a/code/datums/components/tattoo.dm b/code/datums/components/tattoo.dm index 7289c301520f3f..fe51a53781b0cc 100644 --- a/code/datums/components/tattoo.dm +++ b/code/datums/components/tattoo.dm @@ -25,7 +25,7 @@ if(tatted_limb.owner) setup_tatted_owner(tatted_limb.owner) -/datum/component/tattoo/Destroy(force, silent) +/datum/component/tattoo/Destroy(force) if(!parent) return ..() var/obj/item/bodypart/tatted_limb = parent diff --git a/code/datums/components/tippable.dm b/code/datums/components/tippable.dm index ee1f2c40547399..fa2ac331ce13af 100644 --- a/code/datums/components/tippable.dm +++ b/code/datums/components/tippable.dm @@ -231,10 +231,11 @@ is_tipped = new_status if(is_tipped) tipped_mob.transform = turn(tipped_mob.transform, 180) - ADD_TRAIT(tipped_mob, TRAIT_IMMOBILIZED, TIPPED_OVER) - else - tipped_mob.transform = turn(tipped_mob.transform, -180) - REMOVE_TRAIT(tipped_mob, TRAIT_IMMOBILIZED, TIPPED_OVER) + tipped_mob.add_traits(list(TRAIT_MOB_TIPPED, TRAIT_IMMOBILIZED), TIPPED_OVER) + return + + tipped_mob.transform = turn(tipped_mob.transform, -180) + tipped_mob.remove_traits(list(TRAIT_MOB_TIPPED, TRAIT_IMMOBILIZED), TIPPED_OVER) /** * Accepts "roleplay" in the form of emotes, which removes a quarter of the remaining time left to untip ourself. diff --git a/code/datums/components/toggle_attached_clothing.dm b/code/datums/components/toggle_attached_clothing.dm index 5d8f7c2b3ea97e..da503985169bc2 100644 --- a/code/datums/components/toggle_attached_clothing.dm +++ b/code/datums/components/toggle_attached_clothing.dm @@ -77,7 +77,7 @@ if (!destroy_on_removal) create_deployable() -/datum/component/toggle_attached_clothing/Destroy(force, silent) +/datum/component/toggle_attached_clothing/Destroy(force) unequip_deployable() QDEL_NULL(deployable) QDEL_NULL(toggle_action) diff --git a/code/datums/components/torn_wall.dm b/code/datums/components/torn_wall.dm index ebe0fe9a0a6e92..9b36921a39f31a 100644 --- a/code/datums/components/torn_wall.dm +++ b/code/datums/components/torn_wall.dm @@ -15,7 +15,7 @@ /datum/component/torn_wall/Initialize() . = ..() - if (!iswallturf(parent) || isindestructiblewall(parent)) + if (!isclosedturf(parent) || isindestructiblewall(parent)) return COMPONENT_INCOMPATIBLE /datum/component/torn_wall/RegisterWithParent() @@ -53,13 +53,19 @@ return var/turf/closed/wall/attached_wall = parent playsound(attached_wall, 'sound/effects/meteorimpact.ogg', 100, vary = TRUE) + + if(ismineralturf(attached_wall)) + var/turf/closed/mineral/mineral_turf = attached_wall + mineral_turf.gets_drilled() + return + attached_wall.dismantle_wall(devastated = TRUE) /// Fix it up on weld /datum/component/torn_wall/proc/on_welded(atom/source, mob/user, obj/item/tool) SIGNAL_HANDLER INVOKE_ASYNC(src, PROC_REF(try_repair), source, user, tool) - return COMPONENT_BLOCK_TOOL_ATTACK + return ITEM_INTERACT_BLOCKING /// Fix us up /datum/component/torn_wall/proc/try_repair(atom/source, mob/user, obj/item/tool) @@ -72,7 +78,7 @@ qdel(src) return source.update_appearance(UPDATE_ICON) - source.tool_act(user, tool, TOOL_WELDER, is_right_clicking = FALSE) // Keep going + try_repair(source, user, tool) // Keep going /// Give them a hint /datum/component/torn_wall/proc/on_examined(atom/source, mob/user, list/examine_list) diff --git a/code/datums/components/trapdoor.dm b/code/datums/components/trapdoor.dm index 0fca7b2c5f5bf8..bda67048ffefe7 100644 --- a/code/datums/components/trapdoor.dm +++ b/code/datums/components/trapdoor.dm @@ -59,11 +59,11 @@ RegisterSignal(SSdcs, COMSIG_GLOB_TRAPDOOR_LINK, PROC_REF(on_link_requested)) else RegisterSignal(assembly, COMSIG_ASSEMBLY_PULSED, PROC_REF(toggle_trapdoor)) - // SKYRAT EDIT START - Trapdoors shouldn't be targeted by SSDecay. + // NOVA EDIT START - Trapdoors shouldn't be targeted by SSDecay. if(isturf(parent)) var/turf/turf_parent = parent turf_parent.turf_flags &= ~CAN_DECAY_BREAK_1 - // SKYRAT EDIT END + // NOVA EDIT END RegisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), PROC_REF(try_unlink)) /datum/component/trapdoor/UnregisterFromParent() @@ -263,7 +263,7 @@ /obj/item/trapdoor_remote name = "trapdoor remote" desc = "A small machine that interfaces with a trapdoor controller for easy use." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/remote.dmi' icon_state = "trapdoor_remote" COOLDOWN_DECLARE(trapdoor_cooldown) var/trapdoor_cooldown_time = 2 SECONDS @@ -372,7 +372,7 @@ in_use = FALSE if(!isopenspaceturf(target_turf)) // second check to make sure nothing changed during constructions return - var/turf/new_turf = target_turf.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + var/turf/new_turf = target_turf.place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) new_turf.AddComponent(/datum/component/trapdoor, starts_open = FALSE, conspicuous = TRUE) balloon_alert(user, "trapdoor constructed") qdel(src) diff --git a/code/datums/components/twohanded.dm b/code/datums/components/twohanded.dm index 37df730821762e..6d033469cc2bf2 100644 --- a/code/datums/components/twohanded.dm +++ b/code/datums/components/twohanded.dm @@ -56,7 +56,7 @@ if(require_twohands) ADD_TRAIT(parent, TRAIT_NEEDS_TWO_HANDS, ABSTRACT_ITEM_TRAIT) -/datum/component/two_handed/Destroy(force, silent) +/datum/component/two_handed/Destroy(force) offhand_item = null wield_callback = null unwield_callback = null diff --git a/code/datums/components/udder.dm b/code/datums/components/udder.dm index c1f0ff0324589a..3c8a0297897cca 100644 --- a/code/datums/components/udder.dm +++ b/code/datums/components/udder.dm @@ -10,10 +10,11 @@ var/datum/callback/on_milk_callback //udder_type and reagent_produced_typepath are typepaths, not reference -/datum/component/udder/Initialize(udder_type = /obj/item/udder, datum/callback/on_milk_callback, datum/callback/on_generate_callback, reagent_produced_typepath = /datum/reagent/consumable/milk) +/datum/component/udder/Initialize(udder_type = /obj/item/udder, datum/callback/on_milk_callback, datum/callback/on_generate_callback, reagent_produced_override) if(!isliving(parent)) //technically is possible to drop this on carbons... but you wouldn't do that to me, would you? return COMPONENT_INCOMPATIBLE - udder = new udder_type(null, parent, on_generate_callback, reagent_produced_typepath) + udder = new udder_type(null) + udder.add_features(parent, on_generate_callback, reagent_produced_override) src.on_milk_callback = on_milk_callback /datum/component/udder/RegisterWithParent() @@ -66,18 +67,75 @@ var/reagent_produced_typepath = /datum/reagent/consumable/milk ///how much the udder holds var/size = 50 + ///the probability that the udder will produce the reagent (0 - 100) + var/production_probability = 5 ///mob that has the udder component var/mob/living/udder_mob ///optional proc to callback to when the udder generates milk var/datum/callback/on_generate_callback - -/obj/item/udder/Initialize(mapload, udder_mob, on_generate_callback, reagent_produced_typepath = /datum/reagent/consumable/milk) - src.udder_mob = udder_mob - src.on_generate_callback = on_generate_callback + ///do we require some food to generate milk? + var/require_consume_type + ///how long does each food consumption allow us to make milk + var/require_consume_timer = 2 MINUTES + ///hunger key we set to look for food + var/hunger_key = BB_CHECK_HUNGRY + +/obj/item/udder/proc/add_features(parent, callback, reagent_override) + udder_mob = parent + on_generate_callback = callback create_reagents(size, REAGENT_HOLDER_ALIVE) - src.reagent_produced_typepath = reagent_produced_typepath + if(reagent_override) + reagent_produced_typepath = reagent_override initial_conditions() + if(isnull(require_consume_type)) + return + RegisterSignal(udder_mob, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(on_mob_consume)) + RegisterSignal(udder_mob, COMSIG_ATOM_ATTACKBY, PROC_REF(on_mob_feed)) + udder_mob.ai_controller?.set_blackboard_key(BB_CHECK_HUNGRY, TRUE) + +/obj/item/udder/proc/on_mob_consume(datum/source, atom/feed) + SIGNAL_HANDLER + + if(!istype(feed, require_consume_type)) + return + INVOKE_ASYNC(src, PROC_REF(handle_consumption), feed) + return COMPONENT_HOSTILE_NO_ATTACK + +/obj/item/udder/proc/on_mob_feed(datum/source, atom/used_item, mob/living/user) + SIGNAL_HANDLER + + if(!istype(used_item, require_consume_type)) + return + INVOKE_ASYNC(src, PROC_REF(handle_consumption), used_item, user) + return COMPONENT_NO_AFTERATTACK + +/obj/item/udder/proc/handle_consumption(atom/movable/food, mob/user) + if(locate(food.type) in src) + if(user) + user.balloon_alert(user, "already full!") + return + playsound(udder_mob.loc,'sound/items/eatfood.ogg', 50, TRUE) + udder_mob.visible_message(span_notice("[udder_mob] gobbles up [food]!"), span_notice("You gobble up [food]!")) + var/atom/movable/final_food = food + if(isstack(food)) //if stack, only consume 1 + var/obj/item/stack/food_stack = food + final_food = food_stack.split_stack(udder_mob, 1) + final_food.forceMove(src) + +/obj/item/udder/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + if(!istype(arrived, require_consume_type)) + return ..() + + udder_mob.ai_controller?.set_blackboard_key(hunger_key, FALSE) + QDEL_IN(arrived, require_consume_timer) + return ..() + +/obj/item/udder/Exited(atom/movable/gone, direction) . = ..() + if(!istype(gone, require_consume_type)) + return + udder_mob.ai_controller?.set_blackboard_key(hunger_key, TRUE) + /obj/item/udder/Destroy() . = ..() @@ -101,10 +159,14 @@ * Proc called every 2 seconds from SSMobs to add whatever reagent the udder is generating. */ /obj/item/udder/proc/generate() - if(prob(5)) - reagents.add_reagent(reagent_produced_typepath, rand(5, 10), added_purity = 1) - if(on_generate_callback) - on_generate_callback.Invoke(reagents.total_volume, reagents.maximum_volume) + if(!isnull(require_consume_type) && !(locate(require_consume_type) in src)) + return FALSE + if(!prob(production_probability)) + return FALSE + reagents.add_reagent(reagent_produced_typepath, rand(5, 10), added_purity = 1) + if(on_generate_callback) + on_generate_callback.Invoke(reagents.total_volume, reagents.maximum_volume) + return TRUE /** * Proc called from attacking the component parent with the correct item, moves reagents into the glass basically. @@ -125,48 +187,20 @@ /** * # gutlunch udder subtype - * - * Used by gutlunches, and generates healing reagents instead of milk on eating gibs instead of a process. Starts empty! - * Female gutlunches (ahem, guthens if you will) make babies when their udder is full under processing, instead of milk generation */ + /obj/item/udder/gutlunch name = "nutrient sac" - -/obj/item/udder/gutlunch/initial_conditions() - if(!udder_mob) - return - if(udder_mob.gender == FEMALE) - START_PROCESSING(SSobj, src) - RegisterSignal(udder_mob, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(on_mob_attacking)) - -/obj/item/udder/gutlunch/process(seconds_per_tick) - var/mob/living/simple_animal/hostile/asteroid/gutlunch/gutlunch = udder_mob - if(reagents.total_volume != reagents.maximum_volume) - return - if(gutlunch.make_babies()) - reagents.clear_reagents() - //usually this would be a callback but this is a specifically gutlunch feature so fuck it, gutlunch specific proccall - gutlunch.regenerate_icons(reagents.total_volume, reagents.maximum_volume) - -/** - * signal called on parent attacking an atom -*/ -/obj/item/udder/gutlunch/proc/on_mob_attacking(mob/living/simple_animal/hostile/gutlunch, atom/target) - SIGNAL_HANDLER - - if(is_type_in_typecache(target, gutlunch.wanted_objects)) //we eats - generate() - gutlunch.visible_message(span_notice("[udder_mob] slurps up [target].")) - qdel(target) - return COMPONENT_HOSTILE_NO_ATTACK //there is no longer a target to attack + require_consume_type = /obj/item/stack/ore + reagent_produced_typepath = /datum/reagent/medicine/mine_salve /obj/item/udder/gutlunch/generate() - var/made_something = FALSE - if(prob(60)) + . = ..() + if(!.) + return + if(locate(/obj/item/stack/ore/gold) in src) reagents.add_reagent(/datum/reagent/consumable/cream, rand(2, 5), added_purity = 1) - made_something = TRUE - if(prob(45)) + if(locate(/obj/item/stack/ore/bluespace_crystal) in src) reagents.add_reagent(/datum/reagent/medicine/salglu_solution, rand(2,5)) - made_something = TRUE - if(made_something && on_generate_callback) + if(on_generate_callback) on_generate_callback.Invoke(reagents.total_volume, reagents.maximum_volume) diff --git a/code/datums/components/unbreakable.dm b/code/datums/components/unbreakable.dm index 423fad138bb555..594b8dc7b8f085 100644 --- a/code/datums/components/unbreakable.dm +++ b/code/datums/components/unbreakable.dm @@ -6,7 +6,7 @@ return COMPONENT_INCOMPATIBLE ADD_TRAIT(parent, TRAIT_UNBREAKABLE, INNATE_TRAIT) -/datum/component/unbreakable/Destroy(force, silent) +/datum/component/unbreakable/Destroy(force) REMOVE_TRAIT(parent, TRAIT_UNBREAKABLE, INNATE_TRAIT) return ..() diff --git a/code/datums/components/unusual_effect.dm b/code/datums/components/unusual_effect.dm index eb67b95379974e..7fe5b281825bdf 100644 --- a/code/datums/components/unusual_effect.dm +++ b/code/datums/components/unusual_effect.dm @@ -39,7 +39,7 @@ special_effects = new(parent_movable, /particles/unusual_effect) START_PROCESSING(SSobj, src) -/datum/component/unusual_effect/Destroy(force, silent) +/datum/component/unusual_effect/Destroy(force) var/atom/movable/parent_movable = parent if (istype(parent_movable)) parent_movable.remove_filter("unusual_effect") diff --git a/code/datums/components/uplink.dm b/code/datums/components/uplink.dm index 037404176785b6..adb10f128ae9c2 100644 --- a/code/datums/components/uplink.dm +++ b/code/datums/components/uplink.dm @@ -59,7 +59,7 @@ RegisterSignal(parent, COMSIG_IMPLANT_IMPLANTING, PROC_REF(implanting)) RegisterSignal(parent, COMSIG_IMPLANT_OTHER, PROC_REF(old_implant)) RegisterSignal(parent, COMSIG_IMPLANT_EXISTING_UPLINK, PROC_REF(new_implant)) - else if(istype(parent, /obj/item/modular_computer/pda)) + else if(istype(parent, /obj/item/modular_computer)) RegisterSignal(parent, COMSIG_TABLET_CHANGE_ID, PROC_REF(new_ringtone)) RegisterSignal(parent, COMSIG_TABLET_CHECK_DETONATE, PROC_REF(check_detonate)) else if(istype(parent, /obj/item/radio)) @@ -455,7 +455,7 @@ /datum/component/uplink/proc/setup_unlock_code() unlock_code = generate_code() var/obj/item/P = parent - if(istype(parent,/obj/item/modular_computer/pda)) + if(istype(parent,/obj/item/modular_computer)) unlock_note = "Uplink Passcode: [unlock_code] ([P.name])." else if(istype(parent,/obj/item/radio)) unlock_note = "Radio Passcode: [unlock_code] ([P.name], [RADIO_TOKEN_UPLINK] channel)." @@ -465,7 +465,7 @@ /datum/component/uplink/proc/generate_code() var/returnable_code = "" - if(istype(parent, /obj/item/modular_computer/pda)) + if(istype(parent, /obj/item/modular_computer)) returnable_code = "[rand(100,999)] [pick(GLOB.phonetic_alphabet)]" else if(istype(parent, /obj/item/radio)) diff --git a/code/datums/components/wall_mounted.dm b/code/datums/components/wall_mounted.dm index 8d1722f89feb80..62af35dc974004 100644 --- a/code/datums/components/wall_mounted.dm +++ b/code/datums/components/wall_mounted.dm @@ -18,7 +18,7 @@ /datum/component/wall_mounted/RegisterWithParent() RegisterSignal(hanging_wall_turf, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) RegisterSignal(hanging_wall_turf, COMSIG_TURF_CHANGE, PROC_REF(on_turf_changing)) - RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(drop_wallmount)) + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) RegisterSignal(parent, COMSIG_QDELETING, PROC_REF(on_linked_destroyed)) /datum/component/wall_mounted/UnregisterFromParent() @@ -49,6 +49,18 @@ if (ispath(path, /turf/open)) drop_wallmount() + +/** + * If we get dragged from our wall (by a singulo for instance) we should deconstruct + */ +/datum/component/wall_mounted/proc/on_move(datum/source, atom/old_loc, dir, forced, list/old_locs) + SIGNAL_HANDLER + // If we're having our lighting messed with we're likely to get dragged about + // That shouldn't lead to a decon + if(HAS_TRAIT(parent, TRAIT_LIGHTING_DEBUGGED)) + return + drop_wallmount() + /** * Handles the dropping of the linked object. This is done via deconstruction, as that should be the most sane way to handle it for most objects. * Except for intercoms, which are handled by creating a new wallframe intercom, as they're apparently items. @@ -66,6 +78,7 @@ if(!QDELING(src)) qdel(src) //Well, we fell off the wall, so we're done here. + /** * Checks object direction and then verifies if there's a wall in that direction. Finally, applies a wall_mounted component to the object. * diff --git a/code/datums/components/weatherannouncer.dm b/code/datums/components/weatherannouncer.dm index fec31ccf9d3cef..0eda6c47a324dc 100644 --- a/code/datums/components/weatherannouncer.dm +++ b/code/datums/components/weatherannouncer.dm @@ -38,7 +38,7 @@ speaker.update_appearance(UPDATE_ICON) update_light_color() -/datum/component/weather_announcer/Destroy(force, silent) +/datum/component/weather_announcer/Destroy(force) STOP_PROCESSING(SSprocessing, src) return ..() diff --git a/code/datums/datum.dm b/code/datums/datum.dm index 75605917ef84e5..e98f0941d6461b 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -44,13 +44,6 @@ /// Datum level flags var/datum_flags = NONE -#ifndef EXPERIMENT_515_DONT_CACHE_REF - /// A cached version of our \ref - /// The brunt of \ref costs are in creating entries in the string tree (a tree of immutable strings) - /// This avoids doing that more then once per datum by ensuring ref strings always have a reference to them after they're first pulled - var/cached_ref -#endif - /// A weak reference to another datum var/datum/weakref/weak_reference @@ -67,8 +60,12 @@ var/list/filter_data #ifdef REFERENCE_TRACKING - var/running_find_references + /// When was this datum last touched by a reftracker? + /// If this value doesn't match with the start of the search + /// We know this datum has never been seen before, and we should check it var/last_find_references = 0 + /// How many references we're trying to find when searching + var/references_to_clear = 0 #ifdef REFERENCE_TRACKING_DEBUG ///Stores info about where refs are found, used for sanity checks and testing var/list/found_refs @@ -108,7 +105,7 @@ * * Returns [QDEL_HINT_QUEUE] */ -/datum/proc/Destroy(force=FALSE, ...) +/datum/proc/Destroy(force = FALSE) SHOULD_CALL_PARENT(TRUE) SHOULD_NOT_SLEEP(TRUE) tag = null @@ -136,10 +133,10 @@ var/component_or_list = dc[component_key] if(islist(component_or_list)) for(var/datum/component/component as anything in component_or_list) - qdel(component, FALSE, TRUE) + qdel(component, FALSE) else var/datum/component/C = component_or_list - qdel(C, FALSE, TRUE) + qdel(C, FALSE) dc.Cut() _clear_signal_refs() @@ -413,3 +410,11 @@ /// Can be called more then once per object, use harddel_deets_dumped to avoid duplicate calls (I am so sorry) /datum/proc/dump_harddel_info() return + +///images are pretty generic, this should help a bit with tracking harddels related to them +/image/dump_harddel_info() + if(harddel_deets_dumped) + return + harddel_deets_dumped = TRUE + return "Image icon: [icon] - icon_state: [icon_state] [loc ? "loc: [loc] ([loc.x],[loc.y],[loc.z])" : ""]" + diff --git a/code/datums/diseases/_MobProcs.dm b/code/datums/diseases/_MobProcs.dm index 1aa8b6654cd45b..62ee5e457cabd6 100644 --- a/code/datums/diseases/_MobProcs.dm +++ b/code/datums/diseases/_MobProcs.dm @@ -46,7 +46,7 @@ if(prob(15/disease.spreading_modifier)) return - if(satiety>0 && prob(satiety/10)) // positive satiety makes it harder to contract the disease. + if(satiety>0 && prob(satiety/2)) // positive satiety makes it harder to contract the disease. return if(!target_zone) diff --git a/code/datums/diseases/_disease.dm b/code/datums/diseases/_disease.dm index 9d63a8c21b9592..bc60049e73ea69 100644 --- a/code/datums/diseases/_disease.dm +++ b/code/datums/diseases/_disease.dm @@ -19,6 +19,16 @@ var/stage_prob = 2 /// How long this infection incubates (non-visible) before revealing itself var/incubation_time + /// Has the virus hit its limit? + var/stage_peaked = FALSE + /// How many cycles has the virus been at its peak? + var/peaked_cycles = 0 + /// How many cycles do we need to have been active after hitting our max stage to start rolling back? + var/cycles_to_beat = 0 + /// Number of cycles we've prevented symptoms from appearing + var/symptom_offsets = 0 + /// Number of cycles we've benefited from chemical or other non-resting symptom protection + var/chemical_offsets = 0 //Other var/list/viable_mobtypes = list() //typepaths of viable mobs @@ -67,30 +77,136 @@ ///Proc to process the disease and decide on whether to advance, cure or make the symptoms appear. Returns a boolean on whether to continue acting on the symptoms or not. /datum/disease/proc/stage_act(seconds_per_tick, times_fired) var/slowdown = HAS_TRAIT(affected_mob, TRAIT_VIRUS_RESISTANCE) ? 0.5 : 1 // spaceacillin slows stage speed by 50% + var/recovery_prob = 0 + var/cure_mod if(required_organ) if(!has_required_infectious_organ(affected_mob, required_organ)) - cure() + cure(add_resistance = FALSE) return FALSE if(has_cure()) - if(disease_flags & CHRONIC && SPT_PROB(cure_chance, seconds_per_tick)) + cure_mod = cure_chance + if(istype(src, /datum/disease/advance)) + cure_mod = max(cure_chance, DISEASE_MINIMUM_CHEMICAL_CURE_CHANCE) + if(disease_flags & CHRONIC && SPT_PROB(cure_mod, seconds_per_tick)) update_stage(1) to_chat(affected_mob, span_notice("Your chronic illness is alleviated a little, though it can't be cured!")) return - if(SPT_PROB(cure_chance, seconds_per_tick)) + if(SPT_PROB(cure_mod, seconds_per_tick)) update_stage(max(stage - 1, 1)) - if(disease_flags & CURABLE && SPT_PROB(cure_chance, seconds_per_tick)) + if(disease_flags & CURABLE && SPT_PROB(cure_mod, seconds_per_tick)) cure() return FALSE - else if(SPT_PROB(stage_prob*slowdown, seconds_per_tick)) + + if(stage == max_stages && stage_peaked != TRUE) //mostly a sanity check in case we manually set a virus to max stages + stage_peaked = TRUE + + if(SPT_PROB(stage_prob*slowdown, seconds_per_tick)) update_stage(min(stage + 1, max_stages)) - return !carrier + if(!(disease_flags & CHRONIC) && disease_flags & CURABLE && bypasses_immunity != TRUE) + switch(severity) + if(DISEASE_SEVERITY_POSITIVE) //good viruses don't go anywhere after hitting max stage - you can try to get rid of them by sleeping earlier + cycles_to_beat = max(DISEASE_RECOVERY_SCALING, DISEASE_CYCLES_POSITIVE) //because of the way we later check for recovery_prob, we need to floor this at least equal to the scaling to avoid infinitely getting less likely to cure + if(((HAS_TRAIT(affected_mob, TRAIT_NOHUNGER)) || ((affected_mob.nutrition > NUTRITION_LEVEL_STARVING) && (affected_mob.satiety >= 0))) && slowdown == 1) //any sort of malnourishment/immunosuppressant opens you to losing a good virus + return TRUE + if(DISEASE_SEVERITY_NONTHREAT) + cycles_to_beat = max(DISEASE_RECOVERY_SCALING, DISEASE_CYCLES_NONTHREAT) + if(DISEASE_SEVERITY_MINOR) + cycles_to_beat = max(DISEASE_RECOVERY_SCALING, DISEASE_CYCLES_MINOR) + if(DISEASE_SEVERITY_MEDIUM) + cycles_to_beat = max(DISEASE_RECOVERY_SCALING, DISEASE_CYCLES_MEDIUM) + if(DISEASE_SEVERITY_DANGEROUS) + cycles_to_beat = max(DISEASE_RECOVERY_SCALING, DISEASE_CYCLES_DANGEROUS) + if(DISEASE_SEVERITY_HARMFUL) + cycles_to_beat = max(DISEASE_RECOVERY_SCALING, DISEASE_CYCLES_HARMFUL) + if(DISEASE_SEVERITY_BIOHAZARD) + cycles_to_beat = max(DISEASE_RECOVERY_SCALING, DISEASE_CYCLES_BIOHAZARD) + peaked_cycles += stage/max_stages //every cycle we spend sick counts towards eventually curing the virus, faster at higher stages + recovery_prob += DISEASE_RECOVERY_CONSTANT + (peaked_cycles / (cycles_to_beat / DISEASE_RECOVERY_SCALING)) //more severe viruses are beaten back more aggressively after the peak + if(stage_peaked) + recovery_prob *= DISEASE_PEAKED_RECOVERY_MULTIPLIER + if(slowdown != 1) //using spaceacillin can help get them over the finish line to kill a virus with decreasing effect over time + recovery_prob += clamp((((1 - slowdown)*(DISEASE_SLOWDOWN_RECOVERY_BONUS * 2)) * ((DISEASE_SLOWDOWN_RECOVERY_BONUS_DURATION - chemical_offsets) / DISEASE_SLOWDOWN_RECOVERY_BONUS_DURATION)), 0, DISEASE_SLOWDOWN_RECOVERY_BONUS) + chemical_offsets = min(chemical_offsets + 1, DISEASE_SLOWDOWN_RECOVERY_BONUS_DURATION) + if(!HAS_TRAIT(affected_mob, TRAIT_NOHUNGER)) + if(affected_mob.satiety < 0 || affected_mob.nutrition < NUTRITION_LEVEL_STARVING) //being malnourished makes it a lot harder to defeat your illness + recovery_prob -= DISEASE_MALNUTRITION_RECOVERY_PENALTY + else + if(affected_mob.satiety >= 0) + recovery_prob += round((DISEASE_SATIETY_RECOVERY_MULTIPLIER * (affected_mob.satiety/MAX_SATIETY)), 0.1) + + if(affected_mob.mob_mood) // this and most other modifiers below a shameless rip from sleeping healing buffs, but feeling good helps make it go away quicker + switch(affected_mob.mob_mood.sanity_level) + if(SANITY_LEVEL_GREAT) + recovery_prob += 0.2 + if(SANITY_LEVEL_NEUTRAL) + recovery_prob += 0.1 + if(SANITY_LEVEL_DISTURBED) + recovery_prob += 0 + if(SANITY_LEVEL_UNSTABLE) + recovery_prob += 0 + if(SANITY_LEVEL_CRAZY) + recovery_prob += -0.1 + if(SANITY_LEVEL_INSANE) + recovery_prob += -0.2 + + if((HAS_TRAIT(affected_mob, TRAIT_NOHUNGER) || !(affected_mob.satiety < 0 || affected_mob.nutrition < NUTRITION_LEVEL_STARVING)) && HAS_TRAIT(affected_mob, TRAIT_KNOCKEDOUT)) //resting starved won't help, but resting helps + var/turf/rest_turf = get_turf(affected_mob) + var/is_sleeping_in_darkness = rest_turf.get_lumcount() <= LIGHTING_TILE_IS_DARK + + if(affected_mob.is_blind_from(EYES_COVERED) || is_sleeping_in_darkness) + recovery_prob += DISEASE_GOOD_SLEEPING_RECOVERY_BONUS + + // sleeping in silence is always better + if(HAS_TRAIT(affected_mob, TRAIT_DEAF)) + recovery_prob += DISEASE_GOOD_SLEEPING_RECOVERY_BONUS + + // check for beds + if((locate(/obj/structure/bed) in affected_mob.loc)) + recovery_prob += DISEASE_GOOD_SLEEPING_RECOVERY_BONUS + else if((locate(/obj/structure/table) in affected_mob.loc)) + recovery_prob += (DISEASE_GOOD_SLEEPING_RECOVERY_BONUS / 2) + + // don't forget the bedsheet + if(locate(/obj/item/bedsheet) in affected_mob.loc) + recovery_prob += DISEASE_GOOD_SLEEPING_RECOVERY_BONUS + + // you forgot the pillow + if(locate(/obj/item/pillow) in affected_mob.loc) + recovery_prob += DISEASE_GOOD_SLEEPING_RECOVERY_BONUS + + recovery_prob *= DISEASE_SLEEPING_RECOVERY_MULTIPLIER //any form of sleeping magnifies all effects a little bit + + recovery_prob = clamp(recovery_prob, 0, 100) + + if(recovery_prob) + if(SPT_PROB(recovery_prob, seconds_per_tick)) + if(stage == 1 && prob(cure_chance * DISEASE_FINAL_CURE_CHANCE_MULTIPLIER)) //if we reduce FROM stage == 1, cure the virus - after defeating its cure_chance in a final battle + if(!HAS_TRAIT(affected_mob, TRAIT_NOHUNGER) && (affected_mob.satiety < 0 || affected_mob.nutrition < NUTRITION_LEVEL_STARVING)) + if(stage_peaked == FALSE) //if you didn't ride out the virus from its peak, if you're malnourished when it cures, you don't get resistance + cure(add_resistance = FALSE) + return FALSE + else if(prob(50)) //if you rode it out from the peak, challenge cure_chance on if you get resistance or not + cure(add_resistance = TRUE) + return FALSE + else + cure(add_resistance = TRUE) //stay fed and cure it at any point, you're immune + return FALSE + update_stage(max(stage - 1, 1)) + + if(HAS_TRAIT(affected_mob, TRAIT_KNOCKEDOUT) || slowdown != 1) //sleeping and using spaceacillin lets us nosell applicable virus symptoms firing with decreasing effectiveness over time + if(prob(100 - min((100 * (symptom_offsets / DISEASE_SYMPTOM_OFFSET_DURATION)), 100 - cure_chance * DISEASE_FINAL_CURE_CHANCE_MULTIPLIER))) //viruses with higher cure_chance will ultimately be more possible to offset symptoms on + symptom_offsets = min(symptom_offsets + 1, DISEASE_SYMPTOM_OFFSET_DURATION) + return FALSE + return !carrier /datum/disease/proc/update_stage(new_stage) stage = new_stage + if(new_stage == max_stages && !(stage_peaked)) //once a virus has hit its peak, set it to have done so + stage_peaked = TRUE /datum/disease/proc/has_cure() if(!(disease_flags & (CURABLE | CHRONIC))) @@ -111,7 +227,19 @@ if(!(spread_flags & DISEASE_SPREAD_AIRBORNE) && !force_spread) return - if(HAS_TRAIT(affected_mob, TRAIT_VIRUS_RESISTANCE) || (affected_mob.satiety > 0 && prob(affected_mob.satiety/10))) + if(affected_mob.internal) //if you keep your internals on, no airborne spread at least + return + + if(HAS_TRAIT(affected_mob, TRAIT_NOBREATH)) //also if you don't breathe + return + + if(!has_required_infectious_organ(affected_mob, ORGAN_SLOT_LUNGS)) //also if you lack lungs + return + + if(!affected_mob.CanSpreadAirborneDisease()) //should probably check this huh + return + + if(HAS_TRAIT(affected_mob, TRAIT_VIRUS_RESISTANCE) || (affected_mob.satiety > 0 && prob(affected_mob.satiety/2))) //being full or on spaceacillin makes you less likely to spread a virus return var/spread_range = 2 @@ -144,6 +272,9 @@ if(affected_mob) if(add_resistance && (disease_flags & CAN_RESIST)) LAZYOR(affected_mob.disease_resistances, GetDiseaseID()) + if(affected_mob.ckey) + var/cure_turf = get_turf(affected_mob) + log_virus("[key_name(affected_mob)] was cured of virus: [src.admin_details()] at [loc_name(cure_turf)]") qdel(src) /datum/disease/proc/IsSame(datum/disease/D) diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 26a60c8e8a138d..234622563427e8 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -130,10 +130,13 @@ sortTim(advance_diseases, GLOBAL_PROC_REF(cmp_advdisease_resistance_asc)) for(var/i in 1 to replace_num) var/datum/disease/advance/competition = advance_diseases[i] - if(totalTransmittable() > competition.totalResistance()) - competition.cure(FALSE) - else - return FALSE //we are not strong enough to bully our way in + if(!competition.bypasses_immunity) + if(bypasses_immunity) //viruses with bypasses_immunity get a free pass on beating normal advanced diseases + competition.cure(FALSE) + if(totalTransmittable() > competition.totalResistance()) + competition.cure(FALSE) + else + return FALSE //we are not strong enough to bully our way in infect(infectee, make_copy) return TRUE @@ -152,7 +155,7 @@ for(var/s in symptoms) var/datum/symptom/symptom_datum = s if(symptom_datum.Start(src)) //this will return FALSE if the symptom is neutered - symptom_datum.next_activation = world.time + rand(symptom_datum.symptom_delay_min SECONDS, symptom_datum.symptom_delay_max SECONDS) + symptom_datum.next_activation = world.time + (rand(symptom_datum.symptom_delay_min SECONDS, symptom_datum.symptom_delay_max SECONDS) * DISEASE_SYMPTOM_FREQUENCY_MODIFIER) symptom_datum.on_stage_change(src) for(var/s in symptoms) @@ -254,7 +257,14 @@ properties["stage_rate"] += S.stage_speed properties["transmittable"] += S.transmittable if(!S.neutered) - properties["severity"] = max(properties["severity"], S.severity) // severity is based on the highest severity non-neutered symptom + properties["severity"] += S.severity // severity is based on the sum of all non-neutered symptoms' severity + if(properties["severity"] > 0) + properties["severity"] += round((properties["resistance"] / 12), 1) + properties["severity"] += round((properties["stage_rate"] / 11), 1) + properties["severity"] += round((properties["transmittable"] / 8), 1) + properties["severity"] = round((properties["severity"] / 2), 1) + properties["severity"] *= (symptoms.len / VIRUS_SYMPTOM_LIMIT) //fewer symptoms, less severity + properties["severity"] = clamp(properties["severity"], 1, 7) // Assign the properties that are in the list. /datum/disease/advance/proc/assign_properties() @@ -275,9 +285,9 @@ set_spread(DISEASE_SPREAD_BLOOD) spreading_modifier = max(CEILING(0.4 * properties["transmittable"], 1), 1) - cure_chance = clamp(7.5 - (0.5 * properties["resistance"]), 5, 10) // can be between 5 and 10 + cure_chance = clamp(7.5 - (0.5 * properties["resistance"]), 1, 10) // can be between 1 and 10 stage_prob = max(0.5 * properties["stage_rate"], 1) - set_severity(properties["severity"]) + set_severity(round(properties["severity"]), 1) generate_cure(properties) else CRASH("Our properties were empty or null!") diff --git a/code/datums/diseases/advance/floor_diseases/carpellosis.dm b/code/datums/diseases/advance/floor_diseases/carpellosis.dm index b5ef9175ed33f5..b8630bed29f881 100644 --- a/code/datums/diseases/advance/floor_diseases/carpellosis.dm +++ b/code/datums/diseases/advance/floor_diseases/carpellosis.dm @@ -30,6 +30,9 @@ var/datum/reagent/cure = GLOB.chemical_reagents_list[cures[1]] cure_text = cure.name +/datum/disease/advance/carpellosis/GetDiseaseID() + return "[type]" + /datum/disease/advance/carpellosis/stage_act(seconds_per_tick, times_fired) . = ..() if(!.) @@ -64,7 +67,7 @@ QDEL_NULL(rift_ability) return ..() -/datum/disease/advance/carpellosis/cure() +/datum/disease/advance/carpellosis/cure(add_resistance = TRUE) if(ability_granted) rift_ability.Remove(affected_mob) if(max_stage_reached && prob(ella_spawn_chance)) diff --git a/code/datums/diseases/advance/floor_diseases/gastritium.dm b/code/datums/diseases/advance/floor_diseases/gastritium.dm index a7334db0fe75a0..4a0f3844ca91c2 100644 --- a/code/datums/diseases/advance/floor_diseases/gastritium.dm +++ b/code/datums/diseases/advance/floor_diseases/gastritium.dm @@ -22,6 +22,9 @@ var/datum/reagent/cure = GLOB.chemical_reagents_list[cures[1]] cure_text = cure.name +/datum/disease/advance/gastritium/GetDiseaseID() + return "[type]" + /datum/disease/advance/gastritium/stage_act(seconds_per_tick, times_fired) . = ..() if(!.) diff --git a/code/datums/diseases/advance/floor_diseases/nebula_nausea.dm b/code/datums/diseases/advance/floor_diseases/nebula_nausea.dm index 8dba0435b9bff2..1186fb68582e87 100644 --- a/code/datums/diseases/advance/floor_diseases/nebula_nausea.dm +++ b/code/datums/diseases/advance/floor_diseases/nebula_nausea.dm @@ -20,6 +20,9 @@ var/datum/reagent/cure = GLOB.chemical_reagents_list[cures[1]] cure_text = cure.name +/datum/disease/advance/nebula_nausea/GetDiseaseID() + return "[type]" + /datum/disease/advance/nebula_nausea/stage_act(seconds_per_tick, times_fired) . = ..() if(!.) diff --git a/code/datums/diseases/advance/symptoms/choking.dm b/code/datums/diseases/advance/symptoms/choking.dm index 165b22cf189d45..47044068f242e4 100644 --- a/code/datums/diseases/advance/symptoms/choking.dm +++ b/code/datums/diseases/advance/symptoms/choking.dm @@ -128,7 +128,7 @@ Bonus to_chat(M, span_userdanger("[pick("Your lungs hurt!", "It hurts to breathe!")]")) Asphyxiate(M, A) M.emote("gasp") - if(M.getOxyLoss() >= 120) + if(M.getOxyLoss() >= (M.maxHealth / (200/120))) M.visible_message(span_warning("[M] stops breathing, as if their lungs have totally collapsed!")) Asphyxiate_death(M, A) return diff --git a/code/datums/diseases/advance/symptoms/fire.dm b/code/datums/diseases/advance/symptoms/fire.dm index bcf60670104db5..f428abdb016f2f 100644 --- a/code/datums/diseases/advance/symptoms/fire.dm +++ b/code/datums/diseases/advance/symptoms/fire.dm @@ -69,7 +69,7 @@ /datum/symptom/fire/proc/warn_mob(mob/living/living_mob) if(prob(33.33)) - living_mob.audible_message(self_message = "You hear a crackling noise.") + living_mob.show_message(span_hear("You hear a crackling noise."), type = MSG_AUDIBLE) else to_chat(living_mob, span_warning("[pick("You feel hot.", "You smell smoke.")]")) diff --git a/code/datums/diseases/advance/symptoms/flesh_eating.dm b/code/datums/diseases/advance/symptoms/flesh_eating.dm index 88aa66358ea5d3..90070aa15fb9f1 100644 --- a/code/datums/diseases/advance/symptoms/flesh_eating.dm +++ b/code/datums/diseases/advance/symptoms/flesh_eating.dm @@ -94,7 +94,6 @@ Bonus symptom_delay_min = 3 symptom_delay_max = 6 var/chems = FALSE - var/zombie = FALSE threshold_descs = list( "Stage Speed 7" = "Synthesizes Heparin and Lipolicide inside the host, causing increased bleeding and hunger.", "Stealth 5" = "The symptom remains hidden until active.", @@ -128,6 +127,4 @@ Bonus M.take_overall_damage(brute = get_damage, required_bodytype = BODYTYPE_ORGANIC) if(chems) M.reagents.add_reagent_list(list(/datum/reagent/toxin/heparin = 2, /datum/reagent/toxin/lipolicide = 2)) - if(zombie) - M.reagents.add_reagent(/datum/reagent/hnz, 1) return 1 diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm index 55e2cdd6c656b9..b00e6ca796678e 100644 --- a/code/datums/diseases/advance/symptoms/heal.dm +++ b/code/datums/diseases/advance/symptoms/heal.dm @@ -273,14 +273,14 @@ level = 6 passive_message = span_notice("You feel tingling on your skin as light passes over it.") threshold_descs = list( - "Stage Speed 7" = "Doubles healing speed.", //SKYRAT EDIT: Brings Noc regen into line with the rest of the healing symptoms. + "Stage Speed 7" = "Doubles healing speed.", //NOVA EDIT: Brings Noc regen into line with the rest of the healing symptoms. ) /datum/symptom/heal/darkness/Start(datum/disease/advance/A) . = ..() if(!.) return - if(A.totalStageSpeed() >= 7)//SKYRAT EDIT: Brings Noc regen into line with the rest of the healing symptoms. + if(A.totalStageSpeed() >= 7)//NOVA EDIT: Brings Noc regen into line with the rest of the healing symptoms. power = 2 /datum/symptom/heal/darkness/CanHeal(datum/disease/advance/A) @@ -378,7 +378,7 @@ return power * 0.9 if(SOFT_CRIT) return power * 0.5 - if(M.getBruteLoss() + M.getFireLoss() >= 103 && !active_coma) //SKYRAT EDIT: ORIGINAL: 70 - Adjusts this to remain 37.5% of total health(plus crit health). Because 70 is alot less health here then it is on tg. + if(M.getBruteLoss() + M.getFireLoss() >= 103 && !active_coma) //NOVA EDIT: ORIGINAL: 70 - Adjusts this to remain 37.5% of total health(plus crit health). Because 70 is alot less health here then it is on tg. to_chat(M, span_warning("You feel yourself slip into a regenerative coma...")) active_coma = TRUE addtimer(CALLBACK(src, PROC_REF(coma), M), 60) @@ -616,7 +616,6 @@ symptom_delay_min = 1 symptom_delay_max = 1 passive_message = span_notice("Your skin glows faintly for a moment.") - var/cellular_damage = FALSE threshold_descs = list( "Transmission 6" = "Additionally heals cellular damage.", "Resistance 7" = "Increases healing speed.", @@ -628,8 +627,6 @@ return if(A.totalResistance() >= 7) power = 2 - if(A.totalTransmittable() >= 6) - cellular_damage = TRUE /datum/symptom/heal/radiation/CanHeal(datum/disease/advance/A) return HAS_TRAIT(A.affected_mob, TRAIT_IRRADIATED) ? power : 0 @@ -637,12 +634,7 @@ /datum/symptom/heal/radiation/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power) var/heal_amt = actual_power - var/need_mob_update = FALSE - if(cellular_damage) - need_mob_update += M.adjustCloneLoss(-heal_amt * 0.5, updating_health = FALSE) - - need_mob_update += M.adjustToxLoss(-(2 * heal_amt), updating_health = FALSE) - if(need_mob_update) + if(M.adjustToxLoss(-(2 * heal_amt), updating_health = FALSE)) M.updatehealth() var/list/parts = M.get_damaged_bodyparts(1,1, BODYTYPE_ORGANIC) diff --git a/code/datums/diseases/advance/symptoms/sensory.dm b/code/datums/diseases/advance/symptoms/sensory.dm index fa9f86abbaa3bb..79c4909d277021 100644 --- a/code/datums/diseases/advance/symptoms/sensory.dm +++ b/code/datums/diseases/advance/symptoms/sensory.dm @@ -51,7 +51,7 @@ M.adjust_confusion(-2 SECONDS) if(purge_alcohol) - M.reagents.remove_all_type(/datum/reagent/consumable/ethanol, 3) + M.reagents.remove_reagent(/datum/reagent/consumable/ethanol, 3, include_subtypes = TRUE) M.adjust_drunk_effect(-5) if(A.stage >= 4) diff --git a/code/datums/diseases/brainrot.dm b/code/datums/diseases/brainrot.dm index 838908bde770be..dd0975b30eb353 100644 --- a/code/datums/diseases/brainrot.dm +++ b/code/datums/diseases/brainrot.dm @@ -11,6 +11,7 @@ desc = "This disease destroys the braincells, causing brain fever, brain necrosis and general intoxication." required_organ = ORGAN_SLOT_BRAIN severity = DISEASE_SEVERITY_HARMFUL + bypasses_immunity = TRUE /datum/disease/brainrot/stage_act(seconds_per_tick, times_fired) //Removed toxloss because damaging diseases are pretty horrible. Last round it killed the entire station because the cure didn't work -- Urist -ACTUALLY Removed rather than commented out, I don't see it returning - RR . = ..() diff --git a/code/datums/diseases/chronic_illness.dm b/code/datums/diseases/chronic_illness.dm index 129883c17b5f0f..d99d29e61a851b 100644 --- a/code/datums/diseases/chronic_illness.dm +++ b/code/datums/diseases/chronic_illness.dm @@ -14,6 +14,7 @@ viable_mobtypes = list(/mob/living/carbon/human) desc = "A disease discovered in an Interdyne laboratory caused by subjection to timesteam correction technology." severity = DISEASE_SEVERITY_UNCURABLE + bypasses_immunity = TRUE /datum/disease/chronic_illness/stage_act(seconds_per_tick, times_fired) . = ..() diff --git a/code/datums/diseases/decloning.dm b/code/datums/diseases/decloning.dm index 5716b2910c9bd1..4e13341dab6f1b 100644 --- a/code/datums/diseases/decloning.dm +++ b/code/datums/diseases/decloning.dm @@ -12,8 +12,9 @@ spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS spread_text = "Organic meltdown" process_dead = TRUE + bypasses_immunity = TRUE -/datum/disease/decloning/cure() +/datum/disease/decloning/cure(add_resistance = TRUE) affected_mob.remove_status_effect(/datum/status_effect/decloning) return ..() diff --git a/code/datums/diseases/dna_spread.dm b/code/datums/diseases/dna_spread.dm index 7783465aabd760..6fd926f60d3df5 100644 --- a/code/datums/diseases/dna_spread.dm +++ b/code/datums/diseases/dna_spread.dm @@ -12,6 +12,7 @@ var/transformed = 0 desc = "This disease transplants the genetic code of the initial vector into new hosts." severity = DISEASE_SEVERITY_MEDIUM + bypasses_immunity = TRUE /datum/disease/dnaspread/stage_act(seconds_per_tick, times_fired) @@ -24,7 +25,7 @@ return FALSE //Only species that can be spread by transformation sting can be spread by the retrovirus - if(HAS_TRAIT(affected_mob, TRAIT_NO_TRANSFORMATION_STING) || HAS_TRAIT(affected_mob, TRAIT_NO_DNA_COPY)) + if(HAS_TRAIT(affected_mob, TRAIT_NO_DNA_COPY)) cure() return FALSE diff --git a/code/datums/diseases/gastrolisis.dm b/code/datums/diseases/gastrolisis.dm index f82f8b3269f6d3..aab0fcded1d67b 100644 --- a/code/datums/diseases/gastrolisis.dm +++ b/code/datums/diseases/gastrolisis.dm @@ -9,6 +9,7 @@ stage_prob = 0.5 disease_flags = CURABLE cures = list(/datum/reagent/consumable/salt, /datum/reagent/medicine/mutadone) + bypasses_immunity = TRUE /datum/disease/gastrolosis/stage_act(seconds_per_tick, times_fired) @@ -39,7 +40,7 @@ var/obj/item/organ/internal/eyes/eyes = locate(/obj/item/organ/internal/eyes/snail) in affected_mob.organs if(!eyes && SPT_PROB(2.5, seconds_per_tick)) var/obj/item/organ/internal/eyes/snail/new_eyes = new() - new_eyes.Insert(affected_mob, drop_if_replaced = TRUE) + new_eyes.Insert(affected_mob) affected_mob.visible_message(span_warning("[affected_mob]'s eyes fall out, with snail eyes taking its place!"), \ span_userdanger("You scream in pain as your eyes are pushed out by your new snail eyes!")) affected_mob.emote("scream") @@ -79,7 +80,7 @@ OT.MakeSlippery(TURF_WET_LUBE, 100) -/datum/disease/gastrolosis/cure() +/datum/disease/gastrolosis/cure(add_resistance = TRUE) . = ..() if(affected_mob && !is_species(affected_mob, /datum/species/snail)) //undo all the snail fuckening var/mob/living/carbon/human/H = affected_mob diff --git a/code/datums/diseases/gbs.dm b/code/datums/diseases/gbs.dm index abf2116a92f062..c9faf303674584 100644 --- a/code/datums/diseases/gbs.dm +++ b/code/datums/diseases/gbs.dm @@ -11,6 +11,7 @@ disease_flags = CAN_CARRY|CAN_RESIST|CURABLE spreading_modifier = 1 severity = DISEASE_SEVERITY_BIOHAZARD + bypasses_immunity = TRUE /datum/disease/gbs/stage_act(seconds_per_tick, times_fired) . = ..() diff --git a/code/datums/diseases/magnitis.dm b/code/datums/diseases/magnitis.dm index 52156b968f9b5d..a0fbc957e74913 100644 --- a/code/datums/diseases/magnitis.dm +++ b/code/datums/diseases/magnitis.dm @@ -11,6 +11,7 @@ desc = "This disease disrupts the magnetic field of your body, making it act as if a powerful magnet. Injections of iron help stabilize the field." severity = DISEASE_SEVERITY_MEDIUM infectable_biotypes = MOB_ORGANIC|MOB_ROBOTIC + bypasses_immunity = TRUE process_dead = TRUE @@ -25,7 +26,7 @@ to_chat(affected_mob, span_danger("Your skin tingles with energy.")) if(SPT_PROB(1, seconds_per_tick)) for(var/obj/nearby_object in orange(2, affected_mob)) - if(nearby_object.anchored || !(nearby_object.flags_1 & CONDUCT_1)) + if(nearby_object.anchored || !(nearby_object.obj_flags & CONDUCTS_ELECTRICITY)) continue var/move_dir = get_dir(nearby_object, affected_mob) nearby_object.Move(get_step(nearby_object, move_dir), move_dir) @@ -40,7 +41,7 @@ if(SPT_PROB(2, seconds_per_tick)) to_chat(affected_mob, span_danger("You feel a light shock course through your body.")) for(var/obj/nearby_object in orange(4, affected_mob)) - if(nearby_object.anchored || !(nearby_object.flags_1 & CONDUCT_1)) + if(nearby_object.anchored || !(nearby_object.obj_flags & CONDUCTS_ELECTRICITY)) continue for(var/i in 1 to rand(1, 2)) nearby_object.throw_at(affected_mob, 4, 3) @@ -55,7 +56,7 @@ if(SPT_PROB(4, seconds_per_tick)) to_chat(affected_mob, span_danger("You feel a powerful shock course through your body.")) for(var/obj/nearby_object in orange(6, affected_mob)) - if(nearby_object.anchored || !(nearby_object.flags_1 & CONDUCT_1)) + if(nearby_object.anchored || !(nearby_object.obj_flags & CONDUCTS_ELECTRICITY)) continue for(var/i in 1 to rand(1, 3)) nearby_object.throw_at(affected_mob, 6, 5) // I really wanted to use addtimers to stagger out when everything gets thrown but it would probably cause a lot of lag. diff --git a/code/datums/diseases/parrotpossession.dm b/code/datums/diseases/parrotpossession.dm index 23f68e1a42ff67..114d144902a009 100644 --- a/code/datums/diseases/parrotpossession.dm +++ b/code/datums/diseases/parrotpossession.dm @@ -13,24 +13,41 @@ severity = DISEASE_SEVERITY_MEDIUM infectable_biotypes = MOB_ORGANIC|MOB_UNDEAD|MOB_ROBOTIC|MOB_MINERAL bypasses_immunity = TRUE //2spook - var/mob/living/simple_animal/parrot/poly/ghost/parrot + ///chance we speak + var/speak_chance = 5 + ///controller we speak from + var/datum/ai_controller/basic_controller/parrot_controller /datum/disease/parrot_possession/stage_act(seconds_per_tick, times_fired) . = ..() - if(!.) + + if(!. || isnull(parrot_controller)) return - if(QDELETED(parrot) || parrot.loc != affected_mob) - cure() - return FALSE + var/potential_phrase = parrot_controller.blackboard[BB_PARROT_REPEAT_STRING] + + if(SPT_PROB(speak_chance, seconds_per_tick) && !isnull(potential_phrase)) + affected_mob.say(potential_phrase, forced = "parrot possession") + - if(length(parrot.speech_buffer) && SPT_PROB(parrot.speak_chance, seconds_per_tick)) // I'm not going to dive into polycode trying to adjust that probability. Enjoy doubled ghost parrot speach - affected_mob.say(pick(parrot.speech_buffer), forced = "parrot possession") +/datum/disease/parrot_possession/cure(add_resistance = FALSE) + var/atom/movable/inside_parrot = locate(/mob/living/basic/parrot/poly/ghost) in affected_mob + if(inside_parrot) + UnregisterSignal(inside_parrot, list(COMSIG_PREQDELETED, COMSIG_MOVABLE_MOVED)) + inside_parrot.forceMove(affected_mob.drop_location()) + affected_mob.visible_message( + span_danger("[inside_parrot] is violently driven out of [affected_mob]!"), + span_userdanger("[inside_parrot] bursts out of your chest!"), + ) + parrot_controller = null + return ..() +/datum/disease/parrot_possession/proc/set_parrot(mob/living/parrot) + parrot_controller = parrot.ai_controller + RegisterSignals(parrot, list(COMSIG_PREQDELETED, COMSIG_MOVABLE_MOVED), PROC_REF(on_parrot_exit)) -/datum/disease/parrot_possession/cure() - if(parrot && parrot.loc == affected_mob) - parrot.forceMove(affected_mob.drop_location()) - affected_mob.visible_message(span_danger("[parrot] is violently driven out of [affected_mob]!"), span_userdanger("[parrot] bursts out of your chest!")) - ..() +/datum/disease/parrot_possession/proc/on_parrot_exit(datum/source) + SIGNAL_HANDLER + UnregisterSignal(source, list(COMSIG_PREQDELETED, COMSIG_MOVABLE_MOVED)) + cure() diff --git a/code/datums/diseases/retrovirus.dm b/code/datums/diseases/retrovirus.dm index 4c012eaaf805c3..4524c2af346602 100644 --- a/code/datums/diseases/retrovirus.dm +++ b/code/datums/diseases/retrovirus.dm @@ -12,6 +12,7 @@ spreading_modifier = 0.4 stage_prob = 1 var/restcure = 0 + bypasses_immunity = TRUE /datum/disease/dna_retrovirus/New() ..() diff --git a/code/datums/diseases/rhumba_beat.dm b/code/datums/diseases/rhumba_beat.dm index e64002ab528f7c..ee38d36b1f75e5 100644 --- a/code/datums/diseases/rhumba_beat.dm +++ b/code/datums/diseases/rhumba_beat.dm @@ -9,6 +9,7 @@ viable_mobtypes = list(/mob/living/carbon/human) spreading_modifier = 1 severity = DISEASE_SEVERITY_BIOHAZARD + bypasses_immunity = TRUE /datum/disease/rhumba_beat/stage_act(seconds_per_tick, times_fired) . = ..() diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm index a3449e366dfba7..741520ed6ae61d 100644 --- a/code/datums/diseases/transformation.dm +++ b/code/datums/diseases/transformation.dm @@ -10,6 +10,7 @@ stage_prob = 5 visibility_flags = HIDDEN_SCANNER|HIDDEN_PANDEMIC disease_flags = CURABLE + bypasses_immunity = TRUE var/list/stage1 = list("You feel unremarkable.") var/list/stage2 = list("You feel boring.") var/list/stage3 = list("You feel utterly plain.") @@ -83,7 +84,7 @@ /datum/disease/transformation/proc/replace_banned_player(mob/living/new_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!")) diff --git a/code/datums/diseases/wizarditis.dm b/code/datums/diseases/wizarditis.dm index c2394dd645bdc1..c497c0be039b66 100644 --- a/code/datums/diseases/wizarditis.dm +++ b/code/datums/diseases/wizarditis.dm @@ -9,6 +9,7 @@ viable_mobtypes = list(/mob/living/carbon/human) disease_flags = CAN_CARRY|CAN_RESIST|CURABLE spreading_modifier = 0.75 + bypasses_immunity = TRUE desc = "Some speculate that this virus is the cause of the Space Wizard Federation's existence. \ Subjects affected show the signs of brain damage, yelling obscure sentences or total gibberish. \ On late stages subjects sometime express the feelings of inner power, and cite \ diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 2d745cb629061b..120c69bca1d86d 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -1,4 +1,4 @@ -//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_skyrat/modules/customization/code/datums/dna.dm) +//NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_nova/modules/customization/code/datums/dna.dm) /* /** * Some identity blocks (basically pieces of the unique_identity string variable of the dna datum, commonly abbreviated with ui) @@ -74,7 +74,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) . += total_block_len total_block_len += GET_UF_BLOCK_LEN(blocknumber) */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END /////////////////////////// DNA DATUM /datum/dna ///An md5 hash of the dna holder's real name @@ -84,8 +84,9 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) var/blood_type ///The type of mutant race the player is if applicable (i.e. potato-man) var/datum/species/species = new /datum/species/human - ///first value is mutant color - var/list/features = list("FFF") + /// Assoc list of feature keys to their value + /// Note if you set these manually, and do not update [unique_features] afterwards, it will likely be reset. + var/list/features = list("mcolor" = "#FFFFFF") ///Stores the hashed values of the person's non-human features var/unique_features ///Stores the real name of the person who originally got this dna datum. Used primarely for changelings, @@ -113,6 +114,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) /datum/dna/Destroy() if(iscarbon(holder)) var/mob/living/carbon/cholder = holder + remove_all_mutations() // mutations hold a reference to the dna if(cholder.dna == src) cholder.dna = null holder = null @@ -135,12 +137,17 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) destination.dna.features = features.Copy() destination.dna.real_name = real_name destination.dna.temporary_mutations = temporary_mutations.Copy() + //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION + destination.dna.mutant_bodyparts = mutant_bodyparts.Copy() + destination.dna.body_markings = body_markings.Copy() + destination.dna.update_body_size() + //NOVA EDIT ADDITION END if(transfer_SE) destination.dna.mutation_index = mutation_index destination.dna.default_mutation_genes = default_mutation_genes if(transfer_species) //destination.set_species(species.type, icon_update=0) - ORIGINAL - destination.set_species(species.type, TRUE, null, features.Copy(), mutant_bodyparts.Copy(), body_markings.Copy()) //SKYRAT EDIT CHANGE - CUSTOMIZATION + destination.set_species(species.type, TRUE, FALSE, features.Copy(), mutant_bodyparts.Copy(), body_markings.Copy()) //NOVA EDIT CHANGE - CUSTOMIZATION /datum/dna/proc/copy_dna(datum/dna/new_dna) new_dna.unique_enzymes = unique_enzymes @@ -150,11 +157,11 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) new_dna.unique_features = unique_features new_dna.blood_type = blood_type new_dna.features = features.Copy() - //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION + //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION new_dna.mutant_bodyparts = mutant_bodyparts.Copy() new_dna.body_markings = body_markings.Copy() new_dna.update_body_size() - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END //if the new DNA has a holder, transform them immediately, otherwise save it if(new_dna.holder) new_dna.holder.set_species(species.type, icon_update = 0) @@ -226,7 +233,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) for(var/blocknum in 1 to DNA_UNI_IDENTITY_BLOCKS) . += L[blocknum] || random_string(GET_UI_BLOCK_LEN(blocknum), GLOB.hex_characters) -//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_skyrat/modules/customization/code/datums/dna.dm) +//NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_nova/modules/customization/code/datums/dna.dm) /* /datum/dna/proc/generate_unique_features() . = "" @@ -268,7 +275,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) return data.Join() */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END /datum/dna/proc/generate_dna_blocks() var/bonus @@ -366,7 +373,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) if(DNA_HAIRSTYLE_BLOCK) set_uni_identity_block(blocknumber, construct_block(GLOB.hairstyles_list.Find(H.hairstyle), GLOB.hairstyles_list.len)) -//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_skyrat/modules/customization/code/datums/dna.dm) +//NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_nova/modules/customization/code/datums/dna.dm) /* /datum/dna/proc/update_uf_block(blocknumber) if(!blocknumber) @@ -381,7 +388,9 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) if(DNA_LIZARD_MARKINGS_BLOCK) set_uni_feature_block(blocknumber, construct_block(GLOB.body_markings_list.Find(features["body_markings"]), GLOB.body_markings_list.len)) if(DNA_TAIL_BLOCK) - set_uni_feature_block(blocknumber, construct_block(GLOB.tails_list.Find(features["tail_lizard"]), GLOB.tails_list.len)) + set_uni_feature_block(blocknumber, construct_block(GLOB.tails_list_human.Find(features["tail_cat"]), GLOB.tails_list_human.len)) + if(DNA_LIZARD_TAIL_BLOCK) + set_uni_feature_block(blocknumber, construct_block(GLOB.tails_list_lizard.Find(features["tail_lizard"]), GLOB.tails_list_lizard.len)) if(DNA_SNOUT_BLOCK) set_uni_feature_block(blocknumber, construct_block(GLOB.snouts_list.Find(features["snout"]), GLOB.snouts_list.len)) if(DNA_HORNS_BLOCK) @@ -403,23 +412,24 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) if(DNA_POD_HAIR_BLOCK) set_uni_feature_block(blocknumber, construct_block(GLOB.pod_hair_list.Find(features["pod_hair"]), GLOB.pod_hair_list.len)) */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END //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 @@ -468,25 +478,41 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) if(message) to_chat(holder, message) -//used to update dna UI, UE, and dna.real_name. +/// Updates the UI, UE, and UF of the DNA according to the features, appearance, name, etc. of the DNA / holder. /datum/dna/proc/update_dna_identity() unique_identity = generate_unique_identity() unique_enzymes = generate_unique_enzymes() unique_features = generate_unique_features() -//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular) -/* -/datum/dna/proc/initialize_dna(newblood_type, skip_index = FALSE) +/** + * Sets up DNA codes and initializes some features. + * + * * newblood_type - Optional, the blood type to set the DNA to + * * create_mutation_blocks - If true, generate_dna_blocks is called, which is used to set up mutation blocks (what a mob can naturally mutate). + * * randomize_features - If true, all entries in the features list will be randomized. + */ +/datum/dna/proc/initialize_dna(newblood_type, create_mutation_blocks = TRUE, randomize_features = TRUE) if(newblood_type) blood_type = newblood_type - unique_enzymes = generate_unique_enzymes() - unique_identity = generate_unique_identity() - if(!skip_index) //I hate this + if(create_mutation_blocks) //I hate this generate_dna_blocks() - features = random_features() - unique_features = generate_unique_features() -*/ -//SKYRAT EDIT REMOVAL END + if(randomize_features) + /* NOVA EDIT REMOVAL - We don't really want this. We instead let get_mutant_bodyparts() handle the bodypart randomization on our end, to prevent getting any crazy cross-species features. + var/static/list/all_species_protoypes + if(isnull(all_species_protoypes)) + all_species_protoypes = list() + for(var/species_path in subtypesof(/datum/species)) + all_species_protoypes += new species_path() + + for(var/datum/species/random_species as anything in all_species_protoypes) + features |= random_species.randomize_features() + NOVA EDIT REMOVAL END */ + + features = species.randomize_features() | features // NOVA EDIT CHANGE - Where applicable, replace features with the features generated by species/randomize_features() - Original: features["mcolor"] = "#[random_color()]" + body_markings = species.get_random_body_markings(features) // NOVA EDIT ADDITION + + mutant_bodyparts = species.get_mutant_bodyparts(features, existing_mutant_bodyparts = randomize_features ? list() : mutant_bodyparts) // NOVA EDIT ADDITION + update_dna_identity() /datum/dna/stored //subtype used by brain mob's stored_dna @@ -519,9 +545,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) stored_dna.species = mrace //not calling any species update procs since we're a brain, not a monkey/human -//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_skyrat/modules/customization/code/datums/dna.dm) -/* -/mob/living/carbon/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE) +/mob/living/carbon/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, list/override_features, list/override_mutantparts, list/override_markings) // NOVA EDIT CHANGE - ORIGINAL: /mob/living/carbon/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE) if(QDELETED(src)) CRASH("You're trying to change your species post deletion, this is a recipe for madness") if(isnull(mrace)) @@ -547,10 +571,32 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) if (old_species.properly_gained) old_species.on_species_loss(src, new_race, pref_load) + // NOVA EDIT ADDITION START - BODYPARTS AND FEATURES + // We need to instantiate the list with compatible mutant parts so we don't break things + + if(override_mutantparts && override_mutantparts.len) + for(var/feature in dna.mutant_bodyparts) + override_mutantparts[feature] = dna.mutant_bodyparts[feature] + dna.mutant_bodyparts = override_mutantparts + + if(override_markings && override_markings.len) + for(var/feature in dna.body_markings) + override_markings[feature] = dna.body_markings[feature] + dna.body_markings = override_markings + + if(override_features && override_features.len) + for(var/feature in dna.features) + override_features[feature] = dna.features[feature] + dna.features = override_features + + apply_customizable_dna_features_to_species() + dna.unique_features = dna.generate_unique_features() + + dna.update_body_size() + // NOVA EDIT ADDITION END + dna.species.on_species_gain(src, old_species, pref_load) log_mob_tag("TAG: [tag] SPECIES: [key_name(src)] \[[mrace]\]") -*/ -//SKYRAT EDIT REMOVAL END /mob/living/carbon/human/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE) ..() @@ -558,7 +604,6 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) update_body(is_creating = TRUE) update_mutations_overlay()// no lizard with human hulk overlay please. - /mob/proc/has_dna() return @@ -641,7 +686,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) else gender = PLURAL -//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_skyrat/modules/customization/code/datums/dna.dm) +//NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_nova/modules/customization/code/datums/dna.dm) /* /mob/living/carbon/human/updateappearance(icon_update = TRUE, mutcolor_update = FALSE, mutations_overlay_update = FALSE) ..() @@ -710,7 +755,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) if(mutations_overlay_update) update_mutations_overlay() */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END /mob/proc/domutcheck() return diff --git a/code/datums/ductnet.dm b/code/datums/ductnet.dm index e4dd3959c22468..e97add695d9a35 100644 --- a/code/datums/ductnet.dm +++ b/code/datums/ductnet.dm @@ -43,6 +43,7 @@ for(var/dir in P.ducts) if(P.ducts[dir] == src) P.ducts -= dir + if(!ducts.len) //there were no ducts, so it was a direct connection. we destroy ourselves since a ductnet with only one plumber and no ducts is worthless destroy_network() diff --git a/code/datums/elements/_element.dm b/code/datums/elements/_element.dm index ae4cb55330de8a..bcafc83497cfcd 100644 --- a/code/datums/elements/_element.dm +++ b/code/datums/elements/_element.dm @@ -51,7 +51,10 @@ /// Finds the singleton for the element type given and attaches it to src /datum/proc/_AddElement(list/arguments) if(QDELING(src)) - CRASH("We just tried to add an element to a qdeleted datum, something is fucked") + var/datum/element/element_type = arguments[1] + stack_trace("We just tried to add the element [element_type] to a qdeleted datum, something is fucked") + return + var/datum/element/ele = SSdcs.GetElement(arguments) if(!ele) // We couldn't fetch the element, likely because it was not an element. return // the crash message has already been sent diff --git a/code/datums/elements/caseless.dm b/code/datums/elements/caseless.dm index a8a1d3df3e4f0a..587a32f2b304ef 100644 --- a/code/datums/elements/caseless.dm +++ b/code/datums/elements/caseless.dm @@ -13,15 +13,23 @@ if(!isammocasing(target)) return ELEMENT_INCOMPATIBLE src.reusable = reusable + RegisterSignal(target, COMSIG_CASING_READY_PROJECTILE, PROC_REF(on_ready_projectile)) RegisterSignal(target, COMSIG_FIRE_CASING, PROC_REF(on_fired_casing)) -/datum/element/caseless/proc/on_fired_casing(obj/item/ammo_casing/shell, atom/target, mob/living/user, fired_from, randomspread, spread, zone_override, params, distro, obj/projectile/proj) +/datum/element/caseless/proc/on_ready_projectile(obj/item/ammo_casing/shell, atom/target, mob/living/user, quiet, zone_override, atom/fired_from) SIGNAL_HANDLER + var/obj/projectile/proj = shell.loaded_projectile if(isnull(proj)) return if(reusable) + if(!ispath(proj.shrapnel_type)) + proj.shrapnel_type = shell.type + proj.updateEmbedding() proj.AddElement(/datum/element/projectile_drop, shell.type) +/datum/element/caseless/proc/on_fired_casing(obj/item/ammo_casing/shell, atom/target, mob/living/user, fired_from, randomspread, spread, zone_override, params, distro, obj/projectile/proj) + SIGNAL_HANDLER + if(isgun(fired_from)) var/obj/item/gun/shot_from = fired_from if(shot_from.chambered == shell) diff --git a/code/datums/elements/chemical_transfer.dm b/code/datums/elements/chemical_transfer.dm index 9802f0cc059afc..01296d97adeadd 100644 --- a/code/datums/elements/chemical_transfer.dm +++ b/code/datums/elements/chemical_transfer.dm @@ -58,7 +58,7 @@ return var/built_attacker_message = replacetext(attacker_message, "%VICTIM", transfer_victim) var/built_victim_message = replacetext(attacker_message, "%ATTACKER", transfer_attacker) - transfer_attacker.reagents?.trans_to(transfer_victim, transfer_attacker.reagents.total_volume, multiplier = 1, preserve_data = 1, no_react = 0, transferred_by = transfer_attacker) + transfer_attacker.reagents?.trans_to(transfer_victim, transfer_attacker.reagents.total_volume, transferred_by = transfer_attacker) to_chat(transfer_attacker, built_attacker_message) to_chat(transfer_victim, built_victim_message) diff --git a/code/datums/elements/climbable.dm b/code/datums/elements/climbable.dm index b26990c59119bd..56c16f303c4ed3 100644 --- a/code/datums/elements/climbable.dm +++ b/code/datums/elements/climbable.dm @@ -23,7 +23,6 @@ RegisterSignal(target, COMSIG_ATOM_ATTACK_HAND, PROC_REF(attack_hand)) RegisterSignal(target, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) RegisterSignal(target, COMSIG_MOUSEDROPPED_ONTO, PROC_REF(mousedrop_receive)) - RegisterSignal(target, COMSIG_ATOM_BUMPED, PROC_REF(try_speedrun)) ADD_TRAIT(target, TRAIT_CLIMBABLE, ELEMENT_TRAIT(type)) /datum/element/climbable/Detach(datum/target) @@ -104,8 +103,6 @@ var/x_dist = (text2num(LAZYACCESS(modifiers, ICON_X)) - world.icon_size/2) * (climbed_thing.dir & WEST ? -1 : 1) var/y_dist = (text2num(LAZYACCESS(modifiers, ICON_Y)) - world.icon_size/2) * (climbed_thing.dir & SOUTH ? -1 : 1) dir_step = (x_dist >= y_dist ? (EAST|WEST) : (NORTH|SOUTH)) & climbed_thing.dir - else //user is being moved by a forced_movement datum. dir_step will be the direction to the forced movement target. - dir_step = get_dir(user, user.force_moving.target) else dir_step = get_dir(user, get_step(climbed_thing, climbed_thing.dir)) . = step(user, dir_step) @@ -121,11 +118,3 @@ var/mob/living/living_target = dropped_atom if(living_target.mobility_flags & MOBILITY_MOVE) INVOKE_ASYNC(src, PROC_REF(climb_structure), climbed_thing, living_target, params) - -///Tries to climb onto the target if the forced movement of the mob allows it -/datum/element/climbable/proc/try_speedrun(datum/source, mob/bumpee) - SIGNAL_HANDLER - if(!istype(bumpee)) - return - if(bumpee.force_moving?.allow_climbing) - do_climb(source, bumpee) diff --git a/code/datums/elements/consumable_mob.dm b/code/datums/elements/consumable_mob.dm new file mode 100644 index 00000000000000..1a7c67a4312201 --- /dev/null +++ b/code/datums/elements/consumable_mob.dm @@ -0,0 +1,32 @@ +/** + * element for mobs that can be consumed! + */ +/datum/element/consumable_mob + element_flags = ELEMENT_BESPOKE + argument_hash_start_idx = 2 + ///reagents to give our consumer + var/list/reagents_list + +/datum/element/consumable_mob/Attach(datum/target, list/reagents_list) + . = ..() + if(!isliving(target)) + return ELEMENT_INCOMPATIBLE + if(isnull((reagents_list))) + stack_trace("No valid reagents list provided!") + + src.reagents_list = reagents_list + RegisterSignal(target, COMSIG_ATOM_ATTACK_HAND, PROC_REF(on_consume)) + +/datum/element/consumable_mob/Detach(datum/target) + . = ..() + UnregisterSignal(target, COMSIG_ATOM_ATTACK_HAND) + +/datum/element/consumable_mob/proc/on_consume(atom/movable/source, mob/living/consumer) + SIGNAL_HANDLER + if(!consumer.combat_mode || !consumer.reagents) + return + for(var/reagent_type in reagents_list) + if(isnull(reagents_list[reagent_type])) + return + consumer.reagents.add_reagent(reagent_type, reagents_list[reagent_type]) + diff --git a/code/datums/elements/crusher_loot.dm b/code/datums/elements/crusher_loot.dm index 7d53794d5b065f..0de39bcbab0e42 100644 --- a/code/datums/elements/crusher_loot.dm +++ b/code/datums/elements/crusher_loot.dm @@ -35,11 +35,11 @@ SIGNAL_HANDLER var/datum/status_effect/crusher_damage/damage = target.has_status_effect(/datum/status_effect/crusher_damage) - // SKYRAT EDIT START - ASHWALKER TROPHIES - var/datum/status_effect/ashwalker_damage/ashie_damage = target.has_status_effect(/datum/status_effect/ashwalker_damage) // SKYRAT EDIT ADDITION - var/damage_total = damage?.total_damage + ashie_damage?.total_damage // SKYRAT EDIT ADDITION - if(damage_total && prob((damage_total/target.maxHealth) * drop_mod)) //on average, you'll need to kill 4 creatures before getting the item. by default. // SKYRAT EDIT - ORIGINAL: if(damage && prob((damage.total_damage/target.maxHealth) * drop_mod)) - // SKYRAT EDIT END - ASHWALKER TROPHIES + // NOVA EDIT START - ASHWALKER TROPHIES + var/datum/status_effect/ashwalker_damage/ashie_damage = target.has_status_effect(/datum/status_effect/ashwalker_damage) // NOVA EDIT ADDITION + var/damage_total = damage?.total_damage + ashie_damage?.total_damage // NOVA EDIT ADDITION + if(damage_total && prob((damage_total/target.maxHealth) * drop_mod)) //on average, you'll need to kill 4 creatures before getting the item. by default. // NOVA EDIT - ORIGINAL: if(damage && prob((damage.total_damage/target.maxHealth) * drop_mod)) + // NOVA EDIT END - ASHWALKER TROPHIES if(drop_immediately) new trophy_type(get_turf(target)) else diff --git a/code/datums/elements/cuffsnapping.dm b/code/datums/elements/cuffsnapping.dm index c0dfdcf60913b5..df445f4acc971f 100644 --- a/code/datums/elements/cuffsnapping.dm +++ b/code/datums/elements/cuffsnapping.dm @@ -7,7 +7,7 @@ * cuffsnapping attacks have a wounding bonus between severe and critical+10 wound thresholds. Without some serious wound protecting * armour this all but guarantees a wound of some sort. The attack is directed specifically at a limb and the limb takes the damage. * - * Requires the cutter_user to be aiming for either leg zone, which will be targetted specifically. They will than have a 3-second long + * Requires the cutter_user to be aiming for either leg zone, which will be targeted specifically. They will than have a 3-second long * do_after before executing the attack. * * cuffsnapping requires the target to either be on the floor, immobilised or buckled to something. And also to have an appropriate leg. diff --git a/code/datums/elements/cult_eyes.dm b/code/datums/elements/cult_eyes.dm index 388d902c735c30..3a46aa42c951a7 100644 --- a/code/datums/elements/cult_eyes.dm +++ b/code/datums/elements/cult_eyes.dm @@ -22,6 +22,10 @@ /datum/element/cult_eyes/proc/set_eyes(mob/living/target) SIGNAL_HANDLER + if(!IS_CULTIST(target)) + target.RemoveElement(/datum/element/cult_eyes) + return + ADD_TRAIT(target, TRAIT_UNNATURAL_RED_GLOWY_EYES, CULT_TRAIT) if (ishuman(target)) var/mob/living/carbon/human/human_parent = target diff --git a/code/datums/elements/cult_halo.dm b/code/datums/elements/cult_halo.dm index f20e5765561dfb..d6da6d8145ad91 100644 --- a/code/datums/elements/cult_halo.dm +++ b/code/datums/elements/cult_halo.dm @@ -22,6 +22,10 @@ /datum/element/cult_halo/proc/set_halo(mob/living/target) SIGNAL_HANDLER + if(!IS_CULTIST(target)) + target.RemoveElement(/datum/element/cult_halo) + return + ADD_TRAIT(target, TRAIT_CULT_HALO, CULT_TRAIT) var/mutable_appearance/new_halo_overlay = mutable_appearance('icons/effects/cult/halo.dmi', "halo[rand(1, 6)]", -HALO_LAYER) if (ishuman(target)) diff --git a/code/datums/elements/damage_threshold.dm b/code/datums/elements/damage_threshold.dm new file mode 100644 index 00000000000000..60c87dc5ed5c17 --- /dev/null +++ b/code/datums/elements/damage_threshold.dm @@ -0,0 +1,51 @@ +/// Applied to living mobs. +/// Adds a force threshold for which attacks will be blocked entirely. +/// IE, if they are hit with an attack that deals less than X damage, the attack does nothing. +/datum/element/damage_threshold + element_flags = ELEMENT_BESPOKE + argument_hash_start_idx = 2 + /// Incoming attacks beneath this threshold, inclusive, will be blocked entirely + var/force_threshold = -1 + +/datum/element/damage_threshold/Attach(datum/target, threshold) + . = ..() + if(!isliving(target)) + return ELEMENT_INCOMPATIBLE + if(!isnum(threshold) || threshold <= 0) + return ELEMENT_INCOMPATIBLE + + RegisterSignal(target, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(check_block)) + force_threshold = threshold + +/datum/element/damage_threshold/Detach(datum/source, ...) + . = ..() + UnregisterSignal(source, COMSIG_LIVING_CHECK_BLOCK) + +/datum/element/damage_threshold/proc/check_block( + mob/living/source, + atom/hitby, + damage, + attack_text, + attack_type, + armour_penetration, + damage_type, + attack_flag, +) + SIGNAL_HANDLER + + if(damage <= 0) // Already handled + return NONE + + if(damage <= force_threshold) + var/obj/item/item_hitting = hitby + var/tap_vol = istype(item_hitting) ? item_hitting.get_clamped_volume() : 50 + source.visible_message( + span_warning("[source] looks unharmed!"), + span_warning("[attack_text] deals no damage to you!"), + span_hear("You hear a thud."), + COMBAT_MESSAGE_RANGE, + ) + playsound(source, 'sound/weapons/tap.ogg', tap_vol, TRUE, -1) + return SUCCESSFUL_BLOCK + + return NONE diff --git a/code/datums/elements/dextrous.dm b/code/datums/elements/dextrous.dm index 526dfa974afd6c..681e2a9488d8c0 100644 --- a/code/datums/elements/dextrous.dm +++ b/code/datums/elements/dextrous.dm @@ -50,8 +50,10 @@ /// Try picking up items /datum/element/dextrous/proc/on_hand_clicked(mob/living/hand_haver, atom/target, proximity, modifiers) SIGNAL_HANDLER - if(!proximity) - return NONE + if (!proximity && target.loc != hand_haver) + var/obj/item/obj_item = target + if (istype(obj_item) && !obj_item.atom_storage && !(obj_item.item_flags & IN_STORAGE)) + return NONE if (!isitem(target) && hand_haver.combat_mode) return NONE if (LAZYACCESS(modifiers, RIGHT_CLICK)) diff --git a/code/datums/elements/door_pryer.dm b/code/datums/elements/door_pryer.dm index a17687407e39c1..b7f213b3856f6d 100644 --- a/code/datums/elements/door_pryer.dm +++ b/code/datums/elements/door_pryer.dm @@ -22,7 +22,7 @@ . = ..() UnregisterSignal(source, COMSIG_LIVING_UNARMED_ATTACK) -/// If we're targetting an airlock, open it +/// If we're targeting an airlock, open it /datum/element/door_pryer/proc/on_attack(mob/living/basic/attacker, atom/target, proximity_flag) SIGNAL_HANDLER if(!proximity_flag || !istype(target, /obj/machinery/door/airlock)) diff --git a/code/datums/elements/dryable.dm b/code/datums/elements/dryable.dm index c17547971b5179..d0cdf2355231a1 100644 --- a/code/datums/elements/dryable.dm +++ b/code/datums/elements/dryable.dm @@ -20,20 +20,20 @@ UnregisterSignal(target, COMSIG_FOOD_CONSUMED) REMOVE_TRAIT(target, TRAIT_DRYABLE, ELEMENT_TRAIT(type)) -/datum/element/dryable/proc/finish_drying(atom/source) +/datum/element/dryable/proc/finish_drying(atom/source, datum/weakref/drying_user) SIGNAL_HANDLER var/atom/dried_atom = source if(dry_result == dried_atom.type)//if the dried type is the same as our currrent state, don't bother creating a whole new item, just re-color it. var/atom/movable/resulting_atom = dried_atom resulting_atom.add_atom_colour(COLOR_DRIED_TAN, FIXED_COLOUR_PRIORITY) - ADD_TRAIT(resulting_atom, TRAIT_DRIED, ELEMENT_TRAIT(type)) + apply_dried_status(resulting_atom, drying_user) resulting_atom.forceMove(source.drop_location()) return else if(isstack(source)) //Check if its a sheet var/obj/item/stack/itemstack = dried_atom for(var/i in 1 to itemstack.amount) var/atom/movable/resulting_atom = new dry_result(source.drop_location()) - ADD_TRAIT(resulting_atom, TRAIT_DRIED, ELEMENT_TRAIT(type)) + apply_dried_status(resulting_atom, drying_user) qdel(source) return else if(istype(source, /obj/item/food) && ispath(dry_result, /obj/item/food)) @@ -41,11 +41,16 @@ var/obj/item/food/resulting_food = new dry_result(source.drop_location()) resulting_food.reagents.clear_reagents() source_food.reagents.trans_to(resulting_food, source_food.reagents.total_volume) - ADD_TRAIT(resulting_food, TRAIT_DRIED, ELEMENT_TRAIT(type)) + apply_dried_status(resulting_food, drying_user) qdel(source) return else var/atom/movable/resulting_atom = new dry_result(source.drop_location()) - ADD_TRAIT(resulting_atom, TRAIT_DRIED, ELEMENT_TRAIT(type)) + apply_dried_status(resulting_atom, drying_user) qdel(source) +/datum/element/dryable/proc/apply_dried_status(atom/target, datum/weakref/drying_user) + ADD_TRAIT(target, TRAIT_DRIED, ELEMENT_TRAIT(type)) + var/datum/mind/user_mind = drying_user?.resolve() + if(drying_user && istype(target, /obj/item/food)) + ADD_TRAIT(target, TRAIT_FOOD_CHEF_MADE, REF(user_mind)) diff --git a/code/datums/elements/elevation.dm b/code/datums/elements/elevation.dm new file mode 100644 index 00000000000000..ffa6de398b6e48 --- /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/embed.dm b/code/datums/elements/embed.dm index 1bc70dc500fc4e..78f28d8b81c238 100644 --- a/code/datums/elements/embed.dm +++ b/code/datums/elements/embed.dm @@ -76,7 +76,7 @@ if(blocked || !istype(victim) || HAS_TRAIT(victim, TRAIT_PIERCEIMMUNE)) return FALSE - + if(victim.status_flags & GODMODE) return FALSE diff --git a/code/datums/elements/food/fried_item.dm b/code/datums/elements/food/fried_item.dm index 0db91b89378599..2afab84d1cb43e 100644 --- a/code/datums/elements/food/fried_item.dm +++ b/code/datums/elements/food/fried_item.dm @@ -47,6 +47,7 @@ food_flags = FOOD_FINGER_FOOD, \ junkiness = 10, \ foodtypes = FRIED, \ + volume = this_food.reagents?.maximum_volume, \ ) /datum/element/fried_item/Detach(atom/source, ...) diff --git a/code/datums/elements/food/processable.dm b/code/datums/elements/food/processable.dm index b45fc33f8b132c..625dba6149495d 100644 --- a/code/datums/elements/food/processable.dm +++ b/code/datums/elements/food/processable.dm @@ -71,9 +71,9 @@ else if(result_gender == PLURAL) - examine_list += span_notice("It can be turned into some [result_name] with [span_bold(tool_desc)]!") + examine_list += span_notice("It can be turned into some [result_name] with [span_bold(tool_desc)]!") else - examine_list += span_notice("It can be turned into \a [result_name] with [span_bold(tool_desc)]!") + examine_list += span_notice("It can be turned into \a [result_name] with [span_bold(tool_desc)]!") /** * Adds context sensitivy directly to the processable file for screentips diff --git a/code/datums/elements/footstep.dm b/code/datums/elements/footstep.dm index 3a0a9961843c45..a162e58752d553 100644 --- a/code/datums/elements/footstep.dm +++ b/code/datums/elements/footstep.dm @@ -94,9 +94,9 @@ return . = list(FOOTSTEP_MOB_SHOE = turf.footstep, FOOTSTEP_MOB_BAREFOOT = turf.barefootstep, FOOTSTEP_MOB_HEAVY = turf.heavyfootstep, FOOTSTEP_MOB_CLAW = turf.clawfootstep, STEP_SOUND_PRIORITY = STEP_SOUND_NO_PRIORITY) - SEND_SIGNAL(turf, COMSIG_TURF_PREPARE_STEP_SOUND, .) + var/overriden = SEND_SIGNAL(turf, COMSIG_TURF_PREPARE_STEP_SOUND, .) & FOOTSTEP_OVERRIDEN //The turf has no footstep sound (e.g. open space) and none of the objects on that turf (e.g. catwalks) overrides it - if(isnull(turf.footstep)) + if(!overriden && isnull(turf.footstep)) return null return . @@ -107,7 +107,7 @@ return var/list/prepared_steps = prepare_step(source) - if(!prepared_steps) + if(isnull(prepared_steps)) return if(isfile(footstep_sounds) || istext(footstep_sounds)) @@ -115,7 +115,7 @@ return var/turf_footstep = prepared_steps[footstep_type] - if(!turf_footstep) + if(isnull(turf_footstep) || !footstep_sounds[turf_footstep]) return playsound(source.loc, pick(footstep_sounds[turf_footstep][1]), footstep_sounds[turf_footstep][2] * volume, TRUE, footstep_sounds[turf_footstep][3] + e_range, falloff_distance = 1, vary = sound_vary) @@ -133,33 +133,36 @@ range_adjustment = -2 var/list/prepared_steps = prepare_step(source) - if(!prepared_steps) + if(isnull(prepared_steps)) return //cache for sanic speed (lists are references anyways) - var/static/list/footstep_sounds = GLOB.footstep + var/footstep_sounds = GLOB.footstep ///list returned by playsound() filled by client mobs who heard the footstep. given to play_fov_effect() var/list/heard_clients - if ((source.wear_suit?.body_parts_covered | source.w_uniform?.body_parts_covered | source.shoes?.body_parts_covered) & FEET) + if((source.wear_suit?.body_parts_covered | source.w_uniform?.body_parts_covered | source.shoes?.body_parts_covered) & FEET) // we are wearing shoes var/shoestep_type = prepared_steps[FOOTSTEP_MOB_SHOE] - heard_clients = playsound(source.loc, pick(footstep_sounds[shoestep_type][1]), - footstep_sounds[shoestep_type][2] * volume * volume_multiplier, - TRUE, - footstep_sounds[shoestep_type][3] + e_range + range_adjustment, falloff_distance = 1, vary = sound_vary) + if(!isnull(shoestep_type) && footstep_sounds[shoestep_type]) // shoestep type can be null + heard_clients = playsound(source.loc, pick(footstep_sounds[shoestep_type][1]), + footstep_sounds[shoestep_type][2] * volume * volume_multiplier, + TRUE, + footstep_sounds[shoestep_type][3] + e_range + range_adjustment, falloff_distance = 1, vary = sound_vary) else - var/barefoot_type = prepared_steps[FOOTSTEP_MOB_BAREFOOT] + // we are barefoot + if(source.dna.species.special_step_sounds) heard_clients = playsound(source.loc, pick(source.dna.species.special_step_sounds), 50, TRUE, falloff_distance = 1, vary = sound_vary) else - var/static/list/bare_footstep_sounds = GLOB.barefootstep - - heard_clients = playsound(source.loc, pick(bare_footstep_sounds[barefoot_type][1]), - bare_footstep_sounds[barefoot_type][2] * volume * volume_multiplier, - TRUE, - bare_footstep_sounds[barefoot_type][3] + e_range + range_adjustment, falloff_distance = 1, vary = sound_vary) + var/barefoot_type = prepared_steps[FOOTSTEP_MOB_BAREFOOT] + var/bare_footstep_sounds = GLOB.barefootstep + if(!isnull(barefoot_type) && bare_footstep_sounds[barefoot_type]) // barefoot_type can be null + heard_clients = playsound(source.loc, pick(bare_footstep_sounds[barefoot_type][1]), + bare_footstep_sounds[barefoot_type][2] * volume * volume_multiplier, + TRUE, + bare_footstep_sounds[barefoot_type][3] + e_range + range_adjustment, falloff_distance = 1, vary = sound_vary) if(heard_clients) play_fov_effect(source, 5, "footstep", direction, ignore_self = TRUE, override_list = heard_clients) diff --git a/code/datums/elements/footstep_override.dm b/code/datums/elements/footstep_override.dm index 4e0c346c5be2eb..43d73113280710 100644 --- a/code/datums/elements/footstep_override.dm +++ b/code/datums/elements/footstep_override.dm @@ -78,3 +78,4 @@ steps[FOOTSTEP_MOB_HEAVY] = heavyfootstep steps[FOOTSTEP_MOB_CLAW] = clawfootstep steps[STEP_SOUND_PRIORITY] = priority + return FOOTSTEP_OVERRIDEN diff --git a/code/datums/elements/frozen.dm b/code/datums/elements/frozen.dm index 3fdf13965cf203..b88cc2afa22400 100644 --- a/code/datums/elements/frozen.dm +++ b/code/datums/elements/frozen.dm @@ -59,7 +59,7 @@ GLOBAL_LIST_INIT(freon_color_matrix, list("#2E5E69", "#60A2A8", "#A1AFB1", rgb(0 SIGNAL_HANDLER var/obj/obj_target = target obj_target.visible_message(span_danger("[obj_target] shatters into a million pieces!")) - obj_target.flags_1 |= NODECONSTRUCT_1 // disable item spawning + obj_target.obj_flags |= NO_DECONSTRUCTION // disable item spawning obj_target.deconstruct(FALSE) // call pre-deletion specialized code -- internals release gas etc /// signal handler for COMSIG_MOVABLE_MOVED that unfreezes our target if it moves onto an open turf thats hotter than diff --git a/code/datums/elements/hat_wearer.dm b/code/datums/elements/hat_wearer.dm new file mode 100644 index 00000000000000..504a93f688ea6d --- /dev/null +++ b/code/datums/elements/hat_wearer.dm @@ -0,0 +1,97 @@ +/** + * # mobs that can wear hats! + */ +/datum/element/hat_wearer + element_flags = ELEMENT_DETACH_ON_HOST_DESTROY|ELEMENT_BESPOKE + argument_hash_start_idx = 2 + ///offsets of hats we will wear + var/list/offsets + ///signals to remove the hat on + var/list/remove_hat_signals + ///traits we check before adding the hat + var/traits_prevent_checks + +/datum/element/hat_wearer/Attach(datum/target, offsets = list(), remove_hat_signals = list(), traits_prevent_checks = list()) + . = ..() + if (!isliving(target)) + return ELEMENT_INCOMPATIBLE + src.offsets = offsets + src.traits_prevent_checks = traits_prevent_checks + RegisterSignal(target, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_overlays_updated)) + RegisterSignal(target, COMSIG_ATOM_EXITED, PROC_REF(exited)) + RegisterSignal(target, COMSIG_ATOM_ENTERED, PROC_REF(on_entered)) + RegisterSignal(target, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attack_by)) + if(!length(remove_hat_signals)) + return + RegisterSignals(target, remove_hat_signals, PROC_REF(remove_hat)) + +/datum/element/hat_wearer/Detach(datum/target) + var/obj/item/hat = (locate(/obj/item/clothing/head) in target) + if(hat) + hat.forceMove(get_turf(target)) + UnregisterSignal(target, list( + COMSIG_ATOM_UPDATE_OVERLAYS, + COMSIG_ATOM_EXITED, + COMSIG_ATOM_ENTERED, + COMSIG_ATOM_ATTACKBY, + )) + if(length(remove_hat_signals)) + UnregisterSignal(target, remove_hat_signals) + return ..() + +/datum/element/hat_wearer/proc/on_overlays_updated(atom/source, list/overlays) + SIGNAL_HANDLER + + var/obj/item/hat = (locate(/obj/item/clothing/head) in source) + if(isnull(hat)) + return + var/mutable_appearance/hat_overlay = mutable_appearance(hat.worn_icon, hat.icon_state) + hat_overlay.pixel_x = offsets[1] + hat_overlay.pixel_y = offsets[2] + overlays += hat_overlay + +/datum/element/hat_wearer/proc/exited(atom/movable/source, atom/movable/exited) + SIGNAL_HANDLER + + if(!istype(exited, /obj/item/clothing/head)) + return + source.update_appearance(UPDATE_OVERLAYS) + +/datum/element/hat_wearer/proc/on_entered(atom/movable/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) + SIGNAL_HANDLER + + if(!istype(arrived, /obj/item/clothing/head)) + return + for(var/obj/item/clothing/head/already_worn in source) + if(already_worn == arrived) + continue + already_worn.forceMove(get_turf(source)) + source.update_appearance(UPDATE_OVERLAYS) + +/datum/element/hat_wearer/proc/on_attack_by(atom/movable/source, obj/item/item, mob/living/attacker) + SIGNAL_HANDLER + + if(!istype(item, /obj/item/clothing/head)) + return + + for(var/trait_check in traits_prevent_checks) + if(HAS_TRAIT(source, trait_check)) + source.balloon_alert(attacker, "not possible right now!") + return COMPONENT_NO_AFTERATTACK + + INVOKE_ASYNC(src, PROC_REF(place_hat), source, item, attacker) + return COMPONENT_NO_AFTERATTACK + +/datum/element/hat_wearer/proc/place_hat(atom/movable/source, obj/item/item, mob/living/attacker) + if(!do_after(attacker, delay = 3 SECONDS, target = source)) + source.balloon_alert(attacker, "must stay still!") + return + item.forceMove(source) + +/datum/element/hat_wearer/proc/remove_hat(atom/movable/source) + SIGNAL_HANDLER + + var/obj/our_hat = locate(/obj/item/clothing/head) in source + if(isnull(our_hat)) + return + our_hat.forceMove(source.drop_location()) diff --git a/code/datums/elements/haunted.dm b/code/datums/elements/haunted.dm index d678083dd19992..04f985c0d891c2 100644 --- a/code/datums/elements/haunted.dm +++ b/code/datums/elements/haunted.dm @@ -23,7 +23,6 @@ QDEL_NULL(master.ai_controller) REMOVE_TRAIT(master, TRAIT_MOVE_FLYING, ELEMENT_TRAIT(type)) master.RemoveElement(/datum/element/movetype_handler) - return ..() /atom/movable/proc/make_haunted(source, color) //if not haunted, make haunted if(!HAS_TRAIT(src, TRAIT_HAUNTED)) diff --git a/code/datums/elements/hostile_machine.dm b/code/datums/elements/hostile_machine.dm new file mode 100644 index 00000000000000..0a5f19287bb247 --- /dev/null +++ b/code/datums/elements/hostile_machine.dm @@ -0,0 +1,15 @@ +/// AIs will attack this as a potential target if they see it +/datum/element/hostile_machine + element_flags = ELEMENT_DETACH_ON_HOST_DESTROY + +/datum/element/hostile_machine/Attach(datum/target) + . = ..() + + if (!isatom(target)) + return ELEMENT_INCOMPATIBLE + + GLOB.hostile_machines += target + +/datum/element/hostile_machine/Detach(datum/source) + GLOB.hostile_machines -= source + return ..() diff --git a/code/datums/elements/immerse.dm b/code/datums/elements/immerse.dm index 6449d8de1ad04d..d4171588c31d26 100644 --- a/code/datums/elements/immerse.dm +++ b/code/datums/elements/immerse.dm @@ -96,8 +96,8 @@ /datum/element/immerse/proc/stop_immersion(turf/source) SIGNAL_HANDLER UnregisterSignal(source, list(COMSIG_ATOM_ABSTRACT_ENTERED, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON, COMSIG_ATOM_ABSTRACT_EXITED)) - for(var/atom/movable/movable as anything in attached_turfs_and_movables[source]) - remove_from_element(source, movable) + for(var/datum/weakref/movable as anything in attached_turfs_and_movables[source]) + remove_from_element(source, movable.resolve()) attached_turfs_and_movables -= source /** @@ -109,7 +109,7 @@ SIGNAL_HANDLER if(HAS_TRAIT(movable, TRAIT_IMMERSED)) return - if(movable.layer >= ABOVE_ALL_MOB_LAYER || !ISINRANGE(movable.plane, MUTATE_PLANE(FLOOR_PLANE, source), MUTATE_PLANE(GAME_PLANE_UPPER_FOV_HIDDEN, source))) + if(movable.layer >= ABOVE_ALL_MOB_LAYER || !ISINRANGE(movable.plane, MUTATE_PLANE(FLOOR_PLANE, source), MUTATE_PLANE(GAME_PLANE, source))) return if(is_type_in_typecache(movable, movables_to_ignore)) return @@ -122,7 +122,7 @@ try_immerse(movable, buckled) RegisterSignal(movable, COMSIG_QDELETING, PROC_REF(on_movable_qdel)) - LAZYADD(attached_turfs_and_movables[source], movable) + LAZYADD(attached_turfs_and_movables[source], WEAKREF(movable)) ADD_TRAIT(movable, TRAIT_IMMERSED, ELEMENT_TRAIT(src)) /datum/element/immerse/proc/on_movable_qdel(atom/movable/source) @@ -170,7 +170,7 @@ movable.vis_contents |= vis_overlay - LAZYSET(immersed_movables, movable, vis_overlay) + LAZYSET(immersed_movables, WEAKREF(movable), vis_overlay) ///Initializes and caches a new visual overlay given parameters such as width, height and whether it should appear fully underwater. /datum/element/immerse/proc/generate_vis_overlay(width, height, is_below_water) @@ -212,11 +212,11 @@ ///This proc removes the vis_overlay, the keep together trait and some signals from the movable. /datum/element/immerse/proc/remove_immerse_overlay(atom/movable/movable) - var/atom/movable/immerse_overlay/vis_overlay = LAZYACCESS(immersed_movables, movable) + var/atom/movable/immerse_overlay/vis_overlay = LAZYACCESS(immersed_movables, WEAKREF(movable)) if(!vis_overlay) return movable.vis_contents -= vis_overlay - LAZYREMOVE(immersed_movables, movable) + LAZYREMOVE(immersed_movables, WEAKREF(movable)) if(HAS_TRAIT(movable, TRAIT_UNIQUE_IMMERSE)) UnregisterSignal(movable, list(COMSIG_ATOM_SPIN_ANIMATION, COMSIG_LIVING_POST_UPDATE_TRANSFORM)) qdel(vis_overlay) @@ -229,7 +229,7 @@ */ /datum/element/immerse/proc/try_immerse(atom/movable/movable, atom/movable/buckled) var/atom/movable/to_check = buckled || movable - if(!(to_check.movement_type & (FLYING|FLOATING)) && !movable.throwing) + if(!(to_check.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) && !movable.throwing) add_immerse_overlay(movable) if(!buckled) RegisterSignal(movable, COMSIG_MOVETYPE_FLAG_ENABLED, PROC_REF(on_move_flag_enabled)) @@ -243,7 +243,7 @@ */ /datum/element/immerse/proc/try_unimmerse(atom/movable/movable, atom/movable/buckled) var/atom/movable/to_check = buckled || movable - if(!(to_check.movement_type & (FLYING|FLOATING)) && !movable.throwing) + if(!(to_check.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) && !movable.throwing) remove_immerse_overlay(movable) if(!buckled) UnregisterSignal(movable, list(COMSIG_MOVETYPE_FLAG_ENABLED, COMSIG_MOVETYPE_FLAG_DISABLED, COMSIG_MOVABLE_POST_THROW, COMSIG_MOVABLE_THROW_LANDED)) @@ -256,7 +256,7 @@ ///Removes the overlay from mob and bucklees is flying. /datum/element/immerse/proc/on_move_flag_enabled(atom/movable/source, flag, old_movement_type) SIGNAL_HANDLER - if(!(flag & (FLYING|FLOATING)) || old_movement_type & (FLYING|FLOATING) || source.throwing) + if(!(flag & MOVETYPES_NOT_TOUCHING_GROUND) || (old_movement_type & MOVETYPES_NOT_TOUCHING_GROUND) || source.throwing) return remove_immerse_overlay(source) for(var/mob/living/buckled_mob as anything in source.buckled_mobs) @@ -265,7 +265,7 @@ ///Works just like on_move_flag_enabled, except it only has to check that movable isn't flying /datum/element/immerse/proc/on_throw(atom/movable/source) SIGNAL_HANDLER - if(source.movement_type & (FLYING|FLOATING)) + if(source.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) return remove_immerse_overlay(source) for(var/mob/living/buckled_mob as anything in source.buckled_mobs) @@ -274,7 +274,7 @@ ///Readds the overlay to the mob and bucklees if no longer flying. /datum/element/immerse/proc/on_move_flag_disabled(atom/movable/source, flag, old_movement_type) SIGNAL_HANDLER - if(!(flag & (FLYING|FLOATING)) || source.movement_type & (FLYING|FLOATING) || source.throwing) + if(!(flag & MOVETYPES_NOT_TOUCHING_GROUND) || (source.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) || source.throwing) return add_immerse_overlay(source) for(var/mob/living/buckled_mob as anything in source.buckled_mobs) @@ -283,7 +283,7 @@ ///Works just like on_move_flag_disabled, except it only has to check that movable isn't flying /datum/element/immerse/proc/on_throw_landed(atom/movable/source) SIGNAL_HANDLER - if(source.movement_type & (FLYING|FLOATING)) + if(source.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) return add_immerse_overlay(source) for(var/mob/living/buckled_mob as anything in source.buckled_mobs) @@ -298,8 +298,8 @@ if(!(exited.loc in attached_turfs_and_movables)) remove_from_element(source, exited) else - LAZYREMOVE(attached_turfs_and_movables[source], exited) - LAZYADD(attached_turfs_and_movables[exited.loc], exited) + LAZYREMOVE(attached_turfs_and_movables[source], WEAKREF(exited)) + LAZYADD(attached_turfs_and_movables[exited.loc], WEAKREF(exited)) ///Remove any signal, overlay, trait given to the movable and reference to it within the element. /datum/element/immerse/proc/remove_from_element(turf/source, atom/movable/movable) @@ -311,7 +311,7 @@ UnregisterSignal(movable, list(COMSIG_LIVING_SET_BUCKLED, COMSIG_QDELETING)) REMOVE_TRAIT(movable, TRAIT_IMMERSED, ELEMENT_TRAIT(src)) - LAZYREMOVE(attached_turfs_and_movables[source], movable) + LAZYREMOVE(attached_turfs_and_movables[source], WEAKREF(movable)) /// A band-aid to keep the (unique) visual overlay from scaling and rotating along with its owner. I'm sorry. /datum/element/immerse/proc/on_update_transform(mob/living/source, resize, new_lying_angle, is_opposite_angle) @@ -320,7 +320,7 @@ new_transform.Scale(1/source.current_size) new_transform.Turn(-new_lying_angle) - var/atom/movable/immerse_overlay/vis_overlay = immersed_movables[source] + var/atom/movable/immerse_overlay/vis_overlay = immersed_movables[WEAKREF(source)] if(is_opposite_angle) vis_overlay.transform = new_transform vis_overlay.adjust_living_overlay_offset(source) @@ -361,7 +361,7 @@ ///Spin the overlay in the opposite direction so it doesn't look like it's spinning at all. /datum/element/immerse/proc/on_spin_animation(atom/source, speed, loops, segments, segment) SIGNAL_HANDLER - var/atom/movable/immerse_overlay/vis_overlay = immersed_movables[source] + var/atom/movable/immerse_overlay/vis_overlay = immersed_movables[WEAKREF(source)] vis_overlay.do_spin_animation(speed, loops, segments, -segment) ///We need to make sure to remove hard refs from the element when deleted. diff --git a/code/datums/elements/kneecapping.dm b/code/datums/elements/kneecapping.dm index 340938c430c35d..977268e94a10b9 100644 --- a/code/datums/elements/kneecapping.dm +++ b/code/datums/elements/kneecapping.dm @@ -7,7 +7,7 @@ * Kneecapping attacks have a wounding bonus between severe and critical+10 wound thresholds. Without some serious wound protecting * armour this all but guarantees a wound of some sort. The attack is directed specifically at a limb and the limb takes the damage. * - * Requires the attacker to be aiming for either leg zone, which will be targetted specifically. They will than have a 3-second long + * Requires the attacker to be aiming for either leg zone, which will be targeted specifically. They will than have a 3-second long * do_after before executing the attack. * * Kneecapping requires the target to either be on the floor, immobilised or buckled to something. And also to have an appropriate leg. diff --git a/code/datums/elements/light_eater.dm b/code/datums/elements/light_eater.dm index b4f7cf1042f3d4..50f88cb9e9b231 100644 --- a/code/datums/elements/light_eater.dm +++ b/code/datums/elements/light_eater.dm @@ -4,6 +4,10 @@ * The temporary equivalent is [/datum/component/light_eater] */ /datum/element/light_eater + var/static/list/blacklisted_areas = typecacheof(list( + /turf/open/space, + /turf/open/lava, + )) /datum/element/light_eater/Attach(datum/target) if(isatom(target)) @@ -83,8 +87,9 @@ * - [eater][/datum]: The light eater eating the morsel. This is the datum that the element is attached to that started this chain. */ /datum/element/light_eater/proc/devour(atom/morsel, datum/eater) - var/static/list/undevourable = typecacheof(list(/turf/open/space)) - if(is_type_in_typecache(morsel, undevourable)) + if(is_type_in_typecache(morsel, blacklisted_areas)) + return FALSE + if(istransparentturf(morsel)) return FALSE if(morsel.light_power <= 0 || morsel.light_range <= 0 || !morsel.light_on) return FALSE diff --git a/code/datums/elements/loomable.dm b/code/datums/elements/loomable.dm index cfd0b4bc83480a..76ee071a9a202d 100644 --- a/code/datums/elements/loomable.dm +++ b/code/datums/elements/loomable.dm @@ -71,23 +71,33 @@ /// If a do_after of the specified loom_time passes, will create a new one of resulting_atom and either delete the item, or .use the required amount if its a stack /datum/element/loomable/proc/loom_me(obj/item/source, mob/living/user, atom/target) - if(!do_after(user, loom_time, target)) - user.balloon_alert(user, "interrupted!") - return - - ///we need to perform another check in case a stack somehow got diminished in the middle of the do_after - var/successful = TRUE + //this allows us to count the amount of times it has successfully used the stack's required amount + var/spawning_amount = 0 if(isstack(source)) var/obj/item/stack/stack_we_use = source - if(!stack_we_use.use(required_amount)) - successful = FALSE + while(stack_we_use.amount >= required_amount) + if(!do_after(user, loom_time, target)) + break + + if(!stack_we_use.use(required_amount)) + user.balloon_alert(user, "need [required_amount] of [source]!") + break + + spawning_amount++ + else + if(!do_after(user, loom_time, target)) + user.balloon_alert(user, "interrupted!") + return + qdel(source) + spawning_amount++ - //ripbozo - if(!successful) - user.balloon_alert(user, "need [required_amount] of [source]!") + if(spawning_amount == 0) return - var/new_thing = new resulting_atom(target.drop_location()) + var/new_thing + for(var/repeated in 1 to spawning_amount) + new_thing = new resulting_atom(target.drop_location()) + user.balloon_alert_to_viewers("[process_completion_verb] [new_thing]") diff --git a/code/datums/elements/movement_turf_changer.dm b/code/datums/elements/movement_turf_changer.dm index c42ef287f81314..4f60257d510e47 100644 --- a/code/datums/elements/movement_turf_changer.dm +++ b/code/datums/elements/movement_turf_changer.dm @@ -29,4 +29,4 @@ if(!isturf(destination) || istype(destination, turf_type) || isgroundlessturf(destination)) return - destination.PlaceOnTop(turf_type) + destination.place_on_top(turf_type) diff --git a/code/datums/elements/ore_collecting.dm b/code/datums/elements/ore_collecting.dm new file mode 100644 index 00000000000000..30c9ecc7598d8e --- /dev/null +++ b/code/datums/elements/ore_collecting.dm @@ -0,0 +1,26 @@ +/* + * A component to allow us to collect ore + */ +/datum/element/ore_collecting + + +/datum/element/ore_collecting/Attach(datum/target) + . = ..() + + if(!isliving(target)) + return ELEMENT_INCOMPATIBLE + RegisterSignal(target, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(collect_ore)) + +/datum/element/ore_collecting/Detach(datum/target) + . = ..() + UnregisterSignal(target, COMSIG_HOSTILE_PRE_ATTACKINGTARGET) + +/datum/element/ore_collecting/proc/collect_ore(mob/living/source, atom/target) + SIGNAL_HANDLER + + if(!istype(target, /obj/item/stack/ore)) + return + + var/atom/movable/movable_target = target + movable_target.forceMove(source) + return COMPONENT_HOSTILE_NO_ATTACK diff --git a/code/datums/elements/pet_bonus.dm b/code/datums/elements/pet_bonus.dm index 41977da31c047c..5ef8b515077acd 100644 --- a/code/datums/elements/pet_bonus.dm +++ b/code/datums/elements/pet_bonus.dm @@ -33,6 +33,7 @@ return new /obj/effect/temp_visual/heart(pet.loc) + SEND_SIGNAL(pet, COMSIG_ANIMAL_PET, petter, modifiers) if(emote_message && prob(33)) pet.manual_emote(emote_message) petter.add_mood_event("petting_bonus", moodlet, pet) diff --git a/code/datums/elements/relay_attackers.dm b/code/datums/elements/relay_attackers.dm index 9f134daf71b60a..a6c319d7bc9b85 100644 --- a/code/datums/elements/relay_attackers.dm +++ b/code/datums/elements/relay_attackers.dm @@ -33,8 +33,10 @@ )) REMOVE_TRAIT(source, TRAIT_RELAYING_ATTACKER, REF(src)) -/datum/element/relay_attackers/proc/after_attackby(atom/target, obj/item/weapon, mob/attacker) +/datum/element/relay_attackers/proc/after_attackby(atom/target, obj/item/weapon, mob/attacker, proximity_flag, click_parameters) SIGNAL_HANDLER + if(!proximity_flag) // we don't care about someone clicking us with a piece of metal from across the room + return if(weapon.force) relay_attacker(target, attacker, weapon.damtype == STAMINA ? ATTACKER_STAMINA_ATTACK : ATTACKER_DAMAGING_ATTACK) diff --git a/code/datums/elements/rust.dm b/code/datums/elements/rust.dm index f34182384cecfd..135f45b7c2f3d3 100644 --- a/code/datums/elements/rust.dm +++ b/code/datums/elements/rust.dm @@ -45,7 +45,7 @@ SIGNAL_HANDLER INVOKE_ASYNC(src, PROC_REF(handle_tool_use), source, user, item) - return COMPONENT_BLOCK_TOOL_ATTACK + return ITEM_INTERACT_BLOCKING /// We call this from secondary_tool_act because we sleep with do_after /datum/element/rust/proc/handle_tool_use(atom/source, mob/user, obj/item/item) diff --git a/code/datums/elements/screentips/README.md b/code/datums/elements/screentips/README.md index b4789c50749c8c..92a66ca9dd47c7 100644 --- a/code/datums/elements/screentips/README.md +++ b/code/datums/elements/screentips/README.md @@ -35,7 +35,7 @@ Example: ```dm /obj/structure/table/Initialize(mapload) - if (!(flags_1 & NODECONSTRUCT_1)) + if (!(obj_flags & NO_DECONSTRUCTION)) var/static/list/tool_behaviors = list( TOOL_SCREWDRIVER = list( SCREENTIP_CONTEXT_RMB = "Disassemble", diff --git a/code/datums/elements/snail_crawl.dm b/code/datums/elements/snail_crawl.dm index 9893c9922ca15f..d514ba03e30b4b 100644 --- a/code/datums/elements/snail_crawl.dm +++ b/code/datums/elements/snail_crawl.dm @@ -23,14 +23,24 @@ if(snail.resting && !snail.buckled && lubricate(snail)) snail.add_movespeed_modifier(/datum/movespeed_modifier/snail_crawl) + //NOVA EDIT ADDITION BEGIN - This is to prevent snails from achieving FTL speeds without gravity, think of it like snails affixing to walls irl. + ADD_TRAIT(snail, TRAIT_NEGATES_GRAVITY, TRAIT_GENERIC) + snail.AddElement(/datum/element/forced_gravity, 0) + if(HAS_TRAIT(snail, TRAIT_SETTLER)) //This is to keep settlers from reaching FTL speeds too. + snail.remove_movespeed_modifier(/datum/movespeed_modifier/snail_crawl) + //NOVA EDIT ADDITION END else snail.remove_movespeed_modifier(/datum/movespeed_modifier/snail_crawl) + //NOVA EDIT ADDITION BEGIN - This clears the forced gravity so they're affected by it while standing. + REMOVE_TRAIT(snail, TRAIT_NEGATES_GRAVITY, TRAIT_GENERIC) + snail.RemoveElement(/datum/element/forced_gravity, 0) + //NOVA EDIT ADDITION END /datum/element/snailcrawl/proc/lubricate(atom/movable/snail) SIGNAL_HANDLER var/turf/open/OT = get_turf(snail) if(istype(OT)) - OT.MakeSlippery(TURF_WET_WATER, 1 SECONDS) //SKYRAT EDIT: Roundstart Snails - No more lube - OT.wash(CLEAN_WASH) //SKYRAT EDIT: Roundstart Snails - Snails Keep Clean + OT.MakeSlippery(TURF_WET_WATER, 1 SECONDS) //NOVA EDIT CHANGE: Roundstart Snails - No more lube - ORIGINAL: OT.MakeSlippery(TURF_WET_LUBE, 20) + OT.wash(CLEAN_WASH) //NOVA EDIT ADDITION: Roundstart Snails - Snails Keep Clean return TRUE diff --git a/code/datums/elements/strippable.dm b/code/datums/elements/strippable.dm index e6f0d257ed744b..9d671f9cd930c4 100644 --- a/code/datums/elements/strippable.dm +++ b/code/datums/elements/strippable.dm @@ -68,7 +68,7 @@ var/show_visible_message = TRUE /// Can it be silent? - var/can_be_silent = FALSE //SKYRAT EDIT ADDITION - THIEVING GLOVES + var/can_be_silent = FALSE //NOVA EDIT ADDITION - THIEVING GLOVES /// Gets the item from the given source. /datum/strippable_item/proc/get_item(atom/source) @@ -131,7 +131,7 @@ if (HAS_TRAIT(item, TRAIT_NO_STRIP)) return FALSE - //SKYRAT EDIT CHANGE START - THIEVING GLOVES + //NOVA EDIT CHANGE START - THIEVING GLOVES var/is_silent = can_be_silent && HAS_TRAIT(user, TRAIT_STICKY_FINGERS) if (!is_silent) source.visible_message( @@ -140,14 +140,14 @@ blind_message = span_hear("You hear rustling."), ignored_mobs = user, ) - //SKYRAT EDIT CHANGE END + //NOVA EDIT CHANGE END to_chat(user, span_danger("You try to remove [source]'s [item.name]...")) user.log_message("is stripping [key_name(source)] of [item].", LOG_ATTACK, color="red") source.log_message("is being stripped of [item] by [key_name(user)].", LOG_VICTIM, color="orange", log_globally=FALSE) item.add_fingerprint(src) - if(ishuman(source) && !is_silent) //SKYRAT EDIT ADDITION - THIEVING GLOVES ORIGINAL if(ishuman(source)) + if(ishuman(source) && !is_silent) //NOVA EDIT ADDITION - THIEVING GLOVES ORIGINAL if(ishuman(source)) var/mob/living/carbon/human/victim_human = source if(victim_human.key && !victim_human.client) // AKA braindead if(victim_human.stat <= SOFT_CRIT && LAZYLEN(victim_human.afk_thefts) <= AFK_THEFT_MAX_MESSAGES) @@ -277,7 +277,7 @@ /// A utility function for `/datum/strippable_item`s to start unequipping an item from a mob. /proc/start_unequip_mob(obj/item/item, mob/source, mob/user, strip_delay) - //SKYRAT EDIT ADDITION - THIEVING GLOVES + //NOVA EDIT ADDITION - THIEVING GLOVES //if (!do_after(user, strip_delay || item.strip_delay, source, interaction_key = REF(item))) if (!do_after(user, (strip_delay || item.strip_delay) * (HAS_TRAIT(user, TRAIT_STICKY_FINGERS) ? THIEVING_GLOVES_STRIP_SLOWDOWN : NORMAL_STRIP_SLOWDOWN), source, interaction_key = REF(item))) return FALSE diff --git a/code/datums/elements/tear_wall.dm b/code/datums/elements/tear_wall.dm deleted file mode 100644 index 0d24bbda28985e..00000000000000 --- a/code/datums/elements/tear_wall.dm +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Attached to a basic mob that will then be able to tear down a wall after some time. - */ -/datum/element/tear_wall - element_flags = ELEMENT_BESPOKE - argument_hash_start_idx = 3 - /// The rate at which we can break regular walls - var/regular_tear_time - /// The rate at which we can break reinforced walls - var/reinforced_tear_time - -/datum/element/tear_wall/Attach(datum/target, regular_tear_time = 2 SECONDS, reinforced_tear_time = 4 SECONDS) - . = ..() - if(!isbasicmob(target)) - return ELEMENT_INCOMPATIBLE - - src.regular_tear_time = regular_tear_time - src.reinforced_tear_time = reinforced_tear_time - RegisterSignal(target, COMSIG_HOSTILE_POST_ATTACKINGTARGET, PROC_REF(attack_wall)) - -/datum/element/bonus_damage/Detach(datum/source) - UnregisterSignal(source, COMSIG_HOSTILE_POST_ATTACKINGTARGET) - return ..() - -/// Checks if we are attacking a wall -/datum/element/tear_wall/proc/attack_wall(mob/living/basic/attacker, atom/target, success) - SIGNAL_HANDLER - - if(!iswallturf(target)) - return - var/turf/closed/wall/thewall = target - var/prying_time = regular_tear_time - if(istype(thewall, /turf/closed/wall/r_wall)) - prying_time = reinforced_tear_time - INVOKE_ASYNC(src, PROC_REF(async_attack_wall), attacker, thewall, prying_time) - -/// Performs taking down the wall -/datum/element/tear_wall/proc/async_attack_wall(mob/living/basic/attacker, turf/closed/wall/thewall, prying_time) - if(DOING_INTERACTION_WITH_TARGET(attacker, thewall)) - attacker.balloon_alert(attacker, "busy!") - return - to_chat(attacker, span_warning("You begin tearing through the wall...")) - playsound(attacker, 'sound/machines/airlock_alien_prying.ogg', 100, TRUE) - if(do_after(attacker, prying_time, target = thewall)) - if(isopenturf(thewall)) - return - thewall.dismantle_wall(1) - playsound(attacker, 'sound/effects/meteorimpact.ogg', 100, TRUE) diff --git a/code/datums/elements/venomous.dm b/code/datums/elements/venomous.dm index b310e01bafc342..ba4e088750cd19 100644 --- a/code/datums/elements/venomous.dm +++ b/code/datums/elements/venomous.dm @@ -8,14 +8,21 @@ argument_hash_start_idx = 2 ///Path of the reagent added var/poison_type + ///Details of how we inject our venom + var/injection_flags ///How much of the reagent added. if it's a list, it'll pick a range with the range being list(lower_value, upper_value) var/list/amount_added -/datum/element/venomous/Attach(datum/target, poison_type, amount_added) +/datum/element/venomous/Attach(datum/target, poison_type, amount_added, injection_flags = NONE, thrown_effect = FALSE) . = ..() src.poison_type = poison_type src.amount_added = amount_added - target.AddComponent(/datum/component/on_hit_effect, CALLBACK(src, PROC_REF(do_venom))) + src.injection_flags = injection_flags + target.AddComponent(\ + /datum/component/on_hit_effect,\ + on_hit_callback = CALLBACK(src, PROC_REF(do_venom)),\ + thrown_effect = thrown_effect,\ + ) /datum/element/venomous/Detach(datum/target) qdel(target.GetComponent(/datum/component/on_hit_effect)) @@ -26,6 +33,8 @@ return if(target.stat == DEAD) return + if(isliving(element_owner) && !target.try_inject(element_owner, hit_zone, injection_flags)) + return var/final_amount_added if(islist(amount_added)) final_amount_added = rand(amount_added[1], amount_added[2]) diff --git a/code/datums/elements/waddling.dm b/code/datums/elements/waddling.dm index 825b0c4e4cb829..c51a1759768b5c 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/elements/wall_tearer.dm b/code/datums/elements/wall_tearer.dm index e7ca4b3be96f25..2c9ff5416d59b5 100644 --- a/code/datums/elements/wall_tearer.dm +++ b/code/datums/elements/wall_tearer.dm @@ -20,7 +20,7 @@ /// What interaction key do we use for our interaction var/do_after_key -/datum/element/wall_tearer/Attach(datum/target, allow_reinforced = TRUE, tear_time = 4 SECONDS, reinforced_multiplier = 3, do_after_key = null) +/datum/element/wall_tearer/Attach(datum/target, allow_reinforced = TRUE, tear_time = 2 SECONDS, reinforced_multiplier = 2, do_after_key = null) . = ..() if (!isliving(target)) return ELEMENT_INCOMPATIBLE @@ -28,17 +28,15 @@ src.tear_time = tear_time src.reinforced_multiplier = reinforced_multiplier src.do_after_key = do_after_key - RegisterSignal(target, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(on_attacked_wall)) + RegisterSignals(target, list(COMSIG_HOSTILE_PRE_ATTACKINGTARGET, COMSIG_LIVING_UNARMED_ATTACK), PROC_REF(on_attacked_wall)) /datum/element/wall_tearer/Detach(datum/source) . = ..() - UnregisterSignal(source, COMSIG_LIVING_UNARMED_ATTACK) + UnregisterSignal(source, list(COMSIG_HOSTILE_PRE_ATTACKINGTARGET, COMSIG_LIVING_UNARMED_ATTACK)) /// Try to tear up a wall /datum/element/wall_tearer/proc/on_attacked_wall(mob/living/tearer, atom/target, proximity_flag) SIGNAL_HANDLER - if (!proximity_flag) - return NONE if (DOING_INTERACTION_WITH_TARGET(tearer, target) || (!isnull(do_after_key) && DOING_INTERACTION(tearer, do_after_key))) tearer.balloon_alert(tearer, "busy!") return COMPONENT_HOSTILE_NO_ATTACK @@ -62,6 +60,7 @@ var/is_valid = validate_target(target, tearer) if (is_valid != WALL_TEAR_ALLOWED) return + tearer.do_attack_animation(target) target.AddComponent(/datum/component/torn_wall) is_valid = validate_target(target, tearer) // And now we might have just destroyed it if (is_valid == WALL_TEAR_ALLOWED) diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index 3ee251dfbabdf6..cc9d5820c91623 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. @@ -58,12 +60,12 @@ var/can_message_change = FALSE /// How long is the cooldown on the audio of the emote, if it has one? var/audio_cooldown = 2 SECONDS - //SKYRAT EDIT ADDITION BEGIN - EMOTES + //NOVA EDIT ADDITION BEGIN - EMOTES var/sound_volume = 25 //Emote volume var/list/allowed_species /// Are silicons explicitely allowed to use this emote? var/silicon_allowed = FALSE - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END /datum/emote/New() switch(mob_type_allowed_typecache) @@ -77,6 +79,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. * @@ -104,18 +109,21 @@ return user.log_message(msg, LOG_EMOTE) - // SKYRAT EDIT START - Better emotes - Original: var/dchatmsg = "[user] [msg]" + // NOVA EDIT START - Better emotes - Original: var/dchatmsg = "[user] [msg]" var/space = should_have_space_before_emote(html_decode(msg)[1]) ? " " : "" var/dchatmsg = "[user][space][msg]" - // SKYRAT EDIT END + // NOVA EDIT END var/tmp_sound = get_sound(user) - if(tmp_sound && should_play_sound(user, intentional) && !TIMER_COOLDOWN_CHECK(user, type)) + if(tmp_sound && should_play_sound(user, intentional) && TIMER_COOLDOWN_FINISHED(user, type)) TIMER_COOLDOWN_START(user, type, audio_cooldown) - //SKYRAT EDIT CHANGE BEGIN - //playsound(user, tmp_sound, 50, vary) - SKYRAT EDIT - ORIGINAL - playsound(user, tmp_sound, sound_volume, vary) - //SKYRAT EDIT CHANGE END + //NOVA EDIT CHANGE BEGIN + //playsound(user, tmp_sound, 50, vary) - NOVA EDIT - ORIGINAL + if(istype(src, /datum/emote/living/lewd)) + play_lewd_sound(user, tmp_sound, sound_volume, vary, pref_to_check = /datum/preference/toggle/erp/sounds) + else + playsound(user, tmp_sound, sound_volume, vary) + //NOVA EDIT CHANGE END var/user_turf = get_turf(user) if (user.client) @@ -123,28 +131,31 @@ if(!ghost.client || isnewplayer(ghost)) continue if(get_chat_toggles(ghost.client) & CHAT_GHOSTSIGHT && !(ghost in viewers(user_turf, null))) - ghost.show_message("[FOLLOW_LINK(ghost, user)] [dchatmsg]") + if(pref_check_emote(ghost)) // NOVA EDIT ADDITION - Pref checked emotes + ghost.show_message("[FOLLOW_LINK(ghost, user)] [dchatmsg]") // NOVA EDIT CHANGE - Indented if(emote_type & (EMOTE_AUDIBLE | EMOTE_VISIBLE)) //emote is audible and visible - user.audible_message(msg, deaf_message = "You see how [user][space][msg]", audible_message_flags = EMOTE_MESSAGE, separation = space) // SKYRAT EDIT - Better emotes - ORIGINAL: user.audible_message(msg, deaf_message = "You see how [user] [msg]", audible_message_flags = EMOTE_MESSAGE) + user.audible_message(msg, deaf_message = "You see how [user][space][msg]", audible_message_flags = EMOTE_MESSAGE, separation = space, pref_to_check = pref_to_check) // NOVA EDIT - Better emotes - ORIGINAL: user.audible_message(msg, deaf_message = "You see how [user] [msg]", audible_message_flags = EMOTE_MESSAGE) else if(emote_type & EMOTE_VISIBLE) //emote is only visible - user.visible_message(msg, visible_message_flags = EMOTE_MESSAGE, separation = space) // SKYRAT EDIT - Better emotes - ORIGINAL: user.visible_message(msg, visible_message_flags = EMOTE_MESSAGE) + user.visible_message(msg, visible_message_flags = EMOTE_MESSAGE, separation = space, pref_to_check = pref_to_check) // NOVA EDIT - Better emotes - ORIGINAL: user.visible_message(msg, visible_message_flags = EMOTE_MESSAGE) if(emote_type & EMOTE_IMPORTANT) for(var/mob/living/viewer in viewers()) if(viewer.is_blind() && !viewer.can_hear()) - to_chat(viewer, msg) + if(pref_check_emote(viewer)) // NOVA EDIT ADDITION - Pref checked emotes + to_chat(viewer, msg) // NOVA EDIT CHANGE - Indented - // SKYRAT EDIT -- BEGIN -- ADDITION -- AI QOL - RELAY EMOTES OVER HOLOPADS + // NOVA EDIT -- BEGIN -- ADDITION -- AI QOL - RELAY EMOTES OVER HOLOPADS var/obj/effect/overlay/holo_pad_hologram/hologram = GLOB.hologram_impersonators[user] if(hologram) if(emote_type & (EMOTE_AUDIBLE | EMOTE_VISIBLE)) - hologram.audible_message(msg, deaf_message = span_emote("You see how [user] [msg]"), audible_message_flags = EMOTE_MESSAGE) + hologram.audible_message(msg, deaf_message = span_emote("You see how [user] [msg]"), audible_message_flags = EMOTE_MESSAGE, pref_to_check = pref_to_check) else if(emote_type & EMOTE_VISIBLE) - hologram.visible_message(msg, visible_message_flags = EMOTE_MESSAGE) + hologram.visible_message(msg, visible_message_flags = EMOTE_MESSAGE, pref_to_check = pref_to_check) if(emote_type & EMOTE_IMPORTANT) for(var/mob/living/viewer in viewers(world.view, hologram)) if(viewer.is_blind() && !viewer.can_hear()) - to_chat(viewer, msg) - // SKYRAT EDIT -- END + if(pref_check_emote(viewer)) + to_chat(viewer, msg) + // NOVA EDIT -- END /** * For handling emote cooldown, return true to allow the emote to happen. @@ -158,8 +169,8 @@ /datum/emote/proc/check_cooldown(mob/user, intentional) if(!intentional) return TRUE - //SKYRAT EDIT CHANGE BEGIN - EMOTES - GLOBAL COOLDOWN - //if(user.emotes_used && user.emotes_used[src] + cooldown > world.time) - SKYRAT EDIT - ORIGINAL + //NOVA EDIT CHANGE BEGIN - EMOTES - GLOBAL COOLDOWN + //if(user.emotes_used && user.emotes_used[src] + cooldown > world.time) - NOVA EDIT - ORIGINAL if(user.nextsoundemote > world.time) var/datum/emote/default_emote = /datum/emote if(cooldown > initial(default_emote.cooldown)) // only worry about longer-than-normal emotes @@ -167,9 +178,9 @@ return FALSE //if(!user.emotes_used) // user.emotes_used = list() - //user.emotes_used[src] = world.time - SKYRAT EDIT - ORIGINAL + //user.emotes_used[src] = world.time - NOVA EDIT - ORIGINAL user.nextsoundemote = world.time + cooldown - //SKYRAT EDIT CHANGE END + //NOVA EDIT CHANGE END return TRUE /** @@ -287,7 +298,7 @@ if(HAS_TRAIT(user, TRAIT_EMOTEMUTE)) return FALSE - //SKYRAT EDIT BEGIN + //NOVA EDIT BEGIN if(allowed_species) var/check = FALSE if(silicon_allowed && issilicon(user)) @@ -297,7 +308,7 @@ if(sender.dna.species.type in allowed_species) check = TRUE return check - //SKYRAT EDIT END + //NOVA EDIT END return TRUE diff --git a/code/datums/ert.dm b/code/datums/ert.dm index c33db7b266752d..16230d668b4048 100644 --- a/code/datums/ert.dm +++ b/code/datums/ert.dm @@ -16,7 +16,7 @@ var/spawn_admin = FALSE /// If TRUE, we try and pick one of the most experienced players who volunteered to fill the leader slot var/leader_experience = TRUE - ///SKYRAT EDIT: Do we want to notify the players of this ERT? + ///NOVA EDIT: Do we want to notify the players of this ERT? var/notify_players = TRUE /// A custom map template to spawn the ERT at. If this is null or use_custom_shuttle is FALSE, the ERT will spawn at Centcom. var/datum/map_template/ert_template @@ -25,7 +25,7 @@ /datum/ert/New() if (!polldesc) - polldesc = "a Code [code] Nanotrasen Emergency Response Team" + polldesc = "a Code [code] Symphionia Emergency Response Team" /datum/ert/blue opendoors = FALSE @@ -45,13 +45,13 @@ rename_team = "Deathsquad" code = "Delta" mission = "Leave no witnesses." - polldesc = "an elite Nanotrasen Strike Team" + polldesc = "an elite Symphionia Strike Team" /datum/ert/marine leader_role = /datum/antagonist/ert/marine roles = list(/datum/antagonist/ert/marine/security, /datum/antagonist/ert/marine/engineer, /datum/antagonist/ert/marine/medic) rename_team = "Marine Squad" - polldesc = "an 'elite' Nanotrasen Strike Team" + polldesc = "an 'elite' Symphionia Strike Team" opendoors = FALSE /datum/ert/centcom_official @@ -73,7 +73,7 @@ leader_role = /datum/antagonist/ert/commander/inquisitor rename_team = "Inquisition" mission = "Destroy any traces of paranormal activity aboard the station." - polldesc = "a Nanotrasen paranormal response team" + polldesc = "a Symphionia paranormal response team" /datum/ert/janitor roles = list(/datum/antagonist/ert/janitor, /datum/antagonist/ert/janitor/heavy) @@ -82,7 +82,7 @@ opendoors = FALSE rename_team = "Janitor" mission = "Clean up EVERYTHING." - polldesc = "a Nanotrasen Janitorial Response Team" + polldesc = "a Symphionia Janitorial Response Team" /datum/ert/intern roles = list(/datum/antagonist/ert/intern) @@ -91,7 +91,7 @@ opendoors = FALSE rename_team = "Horde of Interns" mission = "Assist in conflict resolution." - polldesc = "an unpaid internship opportunity with Nanotrasen" + polldesc = "an unpaid internship opportunity with Symphionia" random_names = FALSE /datum/ert/intern/unarmed @@ -105,7 +105,7 @@ opendoors = FALSE rename_team = "Emergency Response Party" mission = "Create entertainment for the crew." - polldesc = "a Code Rainbow Nanotrasen Emergency Response Party" + polldesc = "a Code Rainbow Symphionia Emergency Response Party" code = "Rainbow" /datum/ert/bounty_hunters diff --git a/code/datums/forced_movement.dm b/code/datums/forced_movement.dm deleted file mode 100644 index 407f258281c60b..00000000000000 --- a/code/datums/forced_movement.dm +++ /dev/null @@ -1,89 +0,0 @@ -//Just new and forget -//Depricated, use movement loops instead. Exists to support things that want to move more then 10 times a second -/datum/forced_movement - var/atom/movable/victim - var/atom/target - var/last_processed - var/steps_per_tick - var/allow_climbing - var/datum/callback/on_step - var/moved_at_all = FALSE - //as fast as ssfastprocess -/datum/forced_movement/New(atom/movable/_victim, atom/_target, _steps_per_tick = 0.5, _allow_climbing = FALSE, datum/callback/_on_step = null) - victim = _victim - target = _target - steps_per_tick = _steps_per_tick - allow_climbing = _allow_climbing - on_step = _on_step - - . = ..() - - if(_victim && _target && _steps_per_tick && !_victim.force_moving) - last_processed = world.time - _victim.force_moving = src - START_PROCESSING(SSfastprocess, src) - else - qdel(src) //if you want to overwrite the current forced movement, call qdel(victim.force_moving) before creating this - -/datum/forced_movement/Destroy() - if(victim.force_moving == src) - victim.force_moving = null - if(moved_at_all) - victim.forceMove(victim.loc) //get the side effects of moving here that require us to currently not be force_moving aka reslipping on ice - STOP_PROCESSING(SSfastprocess, src) - victim = null - target = null - on_step = null - return ..() - -//Todo: convert -/datum/forced_movement/process() - if(QDELETED(victim) || !victim.loc || QDELETED(target) || !target.loc) - qdel(src) - return - var/steps_to_take = round(steps_per_tick * (world.time - last_processed)) - if(steps_to_take) - for(var/i in 1 to steps_to_take) - if(TryMove()) - moved_at_all = TRUE - if(on_step) - on_step.InvokeAsync() - else - qdel(src) - return - last_processed = world.time - -/datum/forced_movement/proc/TryMove(recursive = FALSE) - if(QDELETED(src)) //Our previous step caused deletion of this datum - return - - var/atom/movable/vic = victim //sanic - var/atom/tar = target - - if(!recursive) - . = step_towards(vic, tar) - - //shit way for getting around corners - if(!.) //If stepping towards the target failed - if(tar.x > vic.x) //If we're going x, step x - if(step(vic, EAST)) - . = TRUE - else if(tar.x < vic.x) - if(step(vic, WEST)) - . = TRUE - - if(!.) //If the x step failed, go y - if(tar.y > vic.y) - if(step(vic, NORTH)) - . = TRUE - else if(tar.y < vic.y) - if(step(vic, SOUTH)) - . = TRUE - - if(!.) //If both failed, try again for some reason - if(recursive) - return FALSE - else - . = TryMove(TRUE) - - . = . && (vic.loc != tar.loc) diff --git a/code/datums/greyscale/_greyscale_config.dm b/code/datums/greyscale/_greyscale_config.dm index 9d3099d770b562..c6973a5d983e93 100644 --- a/code/datums/greyscale/_greyscale_config.dm +++ b/code/datums/greyscale/_greyscale_config.dm @@ -57,21 +57,16 @@ if(!json_config) stack_trace("Greyscale config object [DebugName()] is missing a json configuration, make sure `json_config` has been assigned a value.") string_json_config = "[json_config]" - /* SKYRAT EDIT - Added recognition for the Skyrat GAGS folder - ORIGINAL: - if(findtext(string_json_config, "code/datums/greyscale/json_configs/") != 1) - stack_trace("All greyscale json configuration files should be located within 'code/datums/greyscale/json_configs/'") - */ // ORIGINAL END - SKYART EDIT BEGIN: - var/static/regex/skyrat_gags_regex = regex("(modular_skyrat/modules/GAGS/.*json_configs/)") - if(findtext(string_json_config, "code/datums/greyscale/json_configs/") != 1 && skyrat_gags_regex.Find(string_json_config) != 1) - stack_trace("All greyscale json configuration files should be located within '/greyscale/json_configs/' or 'modular_skyrat/modules/GAGS/json_configs/'.") - // SKYRAT EDIT END + var/static/regex/nova_gags_regex = regex(@"^modular_nova\/modules\/GAGS\/(?:[\w]+\/)*json_configs\/(?:[\w]+\/)*\w+\.json$") // NOVA EDIT ADDITION - Added recognition for the Nova GAGS folder + if(findtext(string_json_config, "code/datums/greyscale/json_configs/") != 1 && nova_gags_regex.Find(string_json_config) != 1) // NOVA EDIT CHANGE - ORIGINAL: if(findtext(string_json_config, "code/datums/greyscale/json_configs/") != 1) + stack_trace("All greyscale json configuration files should be located within '/greyscale/json_configs/' or 'modular_nova/modules/GAGS/json_configs/'.") // NOVA EDIT CHANGE - ORIGINAL: stack_trace("All greyscale json configuration files should be located within 'code/datums/greyscale/json_configs/'") if(!icon_file) stack_trace("Greyscale config object [DebugName()] is missing an icon file, make sure `icon_file` has been assigned a value.") string_icon_file = "[icon_file]" if(!name) stack_trace("Greyscale config object [DebugName()] is missing a name, make sure `name` has been assigned a value.") -/datum/greyscale_config/Destroy(force, ...) +/datum/greyscale_config/Destroy(force) if(!force) return QDEL_HINT_LETMELIVE return ..() diff --git a/code/datums/greyscale/config_types/greyscale_configs/greyscale_clothes.dm b/code/datums/greyscale/config_types/greyscale_configs/greyscale_clothes.dm index 5ff1fde7c276d7..a277ec5054484e 100644 --- a/code/datums/greyscale/config_types/greyscale_configs/greyscale_clothes.dm +++ b/code/datums/greyscale/config_types/greyscale_configs/greyscale_clothes.dm @@ -35,7 +35,7 @@ name = "Held Sombrero Style (Held, Right)" json_config = 'code/datums/greyscale/json_configs/sombrero_base_righthand.json' -/* SKYRAT EDIT START - Beret-lliant (moved to modular_skyrat/modules/berets/code/datums/config_types) +/* NOVA EDIT START - Beret-lliant (moved to modular_nova/modules/berets/code/datums/config_types) /datum/greyscale_config/beret/worn name = "Beret Worn" name = "Beret (Worn)" @@ -51,7 +51,7 @@ name = "Beret With Badge Worn" name = "Badged Beret (Worn)" json_config = 'code/datums/greyscale/json_configs/beret_badge_worn.json' -SKYRAT EDIT END */ +NOVA EDIT END */ /datum/greyscale_config/beanie name = "Beanie" @@ -80,6 +80,15 @@ SKYRAT EDIT END */ name = "Party Hat (Worn)" icon_file = 'icons/mob/clothing/head/costume.dmi' +/datum/greyscale_config/santa_hat + name = "Santa Hat" + icon_file = 'icons/obj/clothing/head/costume.dmi' + json_config = 'code/datums/greyscale/json_configs/santa_hat.json' + +/datum/greyscale_config/santa_hat/worn + name = "Santa Hat (Worn)" + icon_file = 'icons/mob/clothing/head/costume.dmi' + // // MASKS // @@ -354,6 +363,18 @@ SKYRAT EDIT END */ icon_file = 'icons/mob/clothing/under/shorts_pants_shirts.dmi' json_config = 'code/datums/greyscale/json_configs/buttondown_skirt_worn.json' +// +// LABCOATS +// + +/datum/greyscale_config/labcoat + name = "Labcoat" + icon_file = 'icons/obj/clothing/suits/labcoat.dmi' + json_config = 'code/datums/greyscale/json_configs/labcoat.json' + +/datum/greyscale_config/labcoat/worn + name = "Labcoat (Worn)" + icon_file = 'icons/mob/clothing/suits/labcoat.dmi' // // SUITS diff --git a/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm b/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm index a345aba0b81060..28433ba9064b6f 100644 --- a/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm +++ b/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm @@ -167,57 +167,57 @@ /datum/greyscale_config/encryptionkey_basic name = "Basic Encryptionkey" - icon_file = 'icons/obj/radio.dmi' + icon_file = 'icons/obj/devices/circuitry_n_data.dmi' json_config = 'code/datums/greyscale/json_configs/encryptionkey_basic.json' /datum/greyscale_config/encryptionkey_cube name = "Block Encryptionkey" - icon_file = 'icons/obj/radio.dmi' + icon_file = 'icons/obj/devices/circuitry_n_data.dmi' json_config = 'code/datums/greyscale/json_configs/encryptionkey_cube.json' /datum/greyscale_config/encryptionkey_research name = "Research Encryptionkey" - icon_file = 'icons/obj/radio.dmi' + icon_file = 'icons/obj/devices/circuitry_n_data.dmi' json_config = 'code/datums/greyscale/json_configs/encryptionkey_research.json' /datum/greyscale_config/encryptionkey_syndicate name = "Syndicate Encryptionkey" - icon_file = 'icons/obj/radio.dmi' + icon_file = 'icons/obj/devices/circuitry_n_data.dmi' json_config = 'code/datums/greyscale/json_configs/encryptionkey_syndicate.json' /datum/greyscale_config/encryptionkey_medical name = "Medical Encryptionkey" - icon_file = 'icons/obj/radio.dmi' + icon_file = 'icons/obj/devices/circuitry_n_data.dmi' json_config = 'code/datums/greyscale/json_configs/encryptionkey_medical.json' /datum/greyscale_config/encryptionkey_service name = "Service Encryptionkey" - icon_file = 'icons/obj/radio.dmi' + icon_file = 'icons/obj/devices/circuitry_n_data.dmi' json_config = 'code/datums/greyscale/json_configs/encryptionkey_service.json' /datum/greyscale_config/encryptionkey_engineering name = "Engineering Encryptionkey" - icon_file = 'icons/obj/radio.dmi' + icon_file = 'icons/obj/devices/circuitry_n_data.dmi' json_config = 'code/datums/greyscale/json_configs/encryptionkey_engineering.json' /datum/greyscale_config/encryptionkey_centcom name = "Centcom Encryptionkey" - icon_file = 'icons/obj/radio.dmi' + icon_file = 'icons/obj/devices/circuitry_n_data.dmi' json_config = 'code/datums/greyscale/json_configs/encryptionkey_centcom.json' /datum/greyscale_config/encryptionkey_cargo name = "Cargo Encryptionkey" - icon_file = 'icons/obj/radio.dmi' + icon_file = 'icons/obj/devices/circuitry_n_data.dmi' json_config = 'code/datums/greyscale/json_configs/encryptionkey_cargo.json' /datum/greyscale_config/encryptionkey_security name = "Security Encryptionkey" - icon_file = 'icons/obj/radio.dmi' + icon_file = 'icons/obj/devices/circuitry_n_data.dmi' json_config = 'code/datums/greyscale/json_configs/encryptionkey_security.json' /datum/greyscale_config/quantum_keycard name = "Quantum Keycard" - icon_file = 'icons/obj/device.dmi' + icon_file = 'icons/obj/devices/tool.dmi' json_config = 'code/datums/greyscale/json_configs/quantum_keycard.json' // @@ -309,42 +309,13 @@ icon_file = 'icons/obj/tapes.dmi' json_config = 'code/datums/greyscale/json_configs/tape_piece_spikes_worn.json' -// -// BUCKETS -// - -/datum/greyscale_config/buckets - name = "Buckets" - icon_file = 'icons/obj/service/janitor.dmi' - json_config = 'code/datums/greyscale/json_configs/buckets.json' - -/datum/greyscale_config/buckets_worn - name = "Buckets Worn" - icon_file = 'icons/mob/clothing/head/utility.dmi' - json_config = 'code/datums/greyscale/json_configs/buckets.json' - -/datum/greyscale_config/buckets_inhands_left - name = "Buckets Inhands Left" - icon_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' - json_config = 'code/datums/greyscale/json_configs/buckets.json' - -/datum/greyscale_config/buckets_inhands_right - name = "Buckets Inhands Right" - icon_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' - json_config = 'code/datums/greyscale/json_configs/buckets.json' - -/datum/greyscale_config/buckets_cleanbot - name = "Buckets - Cleanbot" - icon_file = 'icons/mob/silicon/aibots.dmi' - json_config = 'code/datums/greyscale/json_configs/buckets_bot.json' - // // MISC // /datum/greyscale_config/circuit name = "Circuit Board" - icon_file = 'icons/obj/assemblies/module.dmi' + icon_file = 'icons/obj/devices/circuitry_n_data.dmi' json_config = 'code/datums/greyscale/json_configs/circuit.json' /datum/greyscale_config/janicart_upgrade diff --git a/code/datums/greyscale/config_types/greyscale_configs/greyscale_mobs.dm b/code/datums/greyscale/config_types/greyscale_configs/greyscale_mobs.dm index a4c7c372525bf4..250eba9a0d51f4 100644 --- a/code/datums/greyscale/config_types/greyscale_configs/greyscale_mobs.dm +++ b/code/datums/greyscale/config_types/greyscale_configs/greyscale_mobs.dm @@ -39,3 +39,9 @@ name = "Pony" icon_file = 'icons/mob/simple/animal.dmi' json_config = 'code/datums/greyscale/json_configs/pony.json' + +/datum/greyscale_config/gutlunch + name = "Gutlunch" + icon_file = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' + json_config = 'code/datums/greyscale/json_configs/gutlunch.json' + diff --git a/code/datums/greyscale/config_types/greyscale_configs/greyscale_objects.dm b/code/datums/greyscale/config_types/greyscale_configs/greyscale_objects.dm index 08df98148a161c..7202c41ecc5404 100644 --- a/code/datums/greyscale/config_types/greyscale_configs/greyscale_objects.dm +++ b/code/datums/greyscale/config_types/greyscale_configs/greyscale_objects.dm @@ -112,11 +112,6 @@ name = "Hazard Striped Canister" json_config = 'code/datums/greyscale/json_configs/canister_hazard.json' -/datum/greyscale_config/prototype_canister - name = "Prototype Canister" - icon_file = 'icons/obj/pipes_n_cables/prototype_canister.dmi' - json_config = 'code/datums/greyscale/json_configs/canister_proto.json' - /datum/greyscale_config/stationary_canister name = "Stationary Canister" icon_file = 'icons/obj/pipes_n_cables/stationary_canisters.dmi' diff --git a/code/datums/greyscale/json_configs/buckets.json b/code/datums/greyscale/json_configs/buckets.json deleted file mode 100644 index 5fab0698fc5160..00000000000000 --- a/code/datums/greyscale/json_configs/buckets.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "bucket": [ - { - "type": "icon_state", - "icon_state": "bucket", - "blend_mode": "overlay", - "color_ids": [ 1 ] - }, - { - "type": "icon_state", - "icon_state": "bucket_handle", - "blend_mode": "overlay" - } - ] -} diff --git a/code/datums/greyscale/json_configs/buckets_bot.json b/code/datums/greyscale/json_configs/buckets_bot.json deleted file mode 100644 index cdefed7af70255..00000000000000 --- a/code/datums/greyscale/json_configs/buckets_bot.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "cleanbot0": [ - { - "type": "icon_state", - "icon_state": "cleanbot_bucket", - "blend_mode": "overlay", - "color_ids": [ 1 ] - }, - { - "type": "icon_state", - "icon_state": "cleanbot0", - "blend_mode": "overlay" - } - ], - "cleanbot1": [ - { - "type": "icon_state", - "icon_state": "cleanbot_bucket", - "blend_mode": "overlay", - "color_ids": [ 1 ] - }, - { - "type": "icon_state", - "icon_state": "cleanbot1", - "blend_mode": "overlay" - } - ], - "cleanbot-c": [ - { - "type": "icon_state", - "icon_state": "cleanbot_bucket", - "blend_mode": "overlay", - "color_ids": [ 1 ] - }, - { - "type": "icon_state", - "icon_state": "cleanbot-c", - "blend_mode": "overlay" - } - ], - "bucket_proxy": [ - { - "type": "icon_state", - "icon_state": "cleanbot_bucket", - "blend_mode": "overlay", - "color_ids": [ 1 ] - }, - { - "type": "icon_state", - "icon_state": "bucket_proxy", - "blend_mode": "overlay" - } - ] -} diff --git a/code/datums/greyscale/json_configs/canister_proto.json b/code/datums/greyscale/json_configs/canister_proto.json deleted file mode 100644 index 09f19b80e9b4e1..00000000000000 --- a/code/datums/greyscale/json_configs/canister_proto.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "": [ - { - "type": "icon_state", - "icon_state": "can_base", - "blend_mode": "overlay", - "color_ids": [ 1 ] - }, - { - "type": "icon_state", - "icon_state": "can_shader", - "blend_mode": "multiply" - }, - { - "type": "icon_state", - "icon_state": "stand", - "blend_mode": "overlay" - }, - { - "type": "icon_state", - "icon_state": "decals", - "blend_mode": "overlay" - }, - [ - { - "type": "icon_state", - "icon_state": "light_base", - "blend_mode": "overlay", - "color_ids": [ 2 ] - }, - { - "type": "icon_state", - "icon_state": "light", - "blend_mode": "overlay", - "color_ids": [ 3 ] - } - ] - ] -} diff --git a/code/datums/greyscale/json_configs/gutlunch.json b/code/datums/greyscale/json_configs/gutlunch.json new file mode 100644 index 00000000000000..0b93033816344b --- /dev/null +++ b/code/datums/greyscale/json_configs/gutlunch.json @@ -0,0 +1,15 @@ +{ + "gutlunch": [ + { + "type": "icon_state", + "icon_state": "gutlunch", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "gutlunch_face", + "blend_mode": "overlay" + } + ] +} diff --git a/code/datums/greyscale/json_configs/labcoat.json b/code/datums/greyscale/json_configs/labcoat.json new file mode 100644 index 00000000000000..f95b86893b0e8e --- /dev/null +++ b/code/datums/greyscale/json_configs/labcoat.json @@ -0,0 +1,54 @@ +{ + "labcoat_job": [ + { + "type": "icon_state", + "icon_state": "labcoat_job", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "sash", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "shoulder", + "blend_mode": "overlay", + "color_ids": [ 3 ] + }, + { + "type": "icon_state", + "icon_state": "back", + "blend_mode": "overlay", + "color_ids": [ 4 ] + } + ], + "labcoat_job_t": [ + { + "type": "icon_state", + "icon_state": "labcoat_job_t", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "sash_t", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "shoulder", + "blend_mode": "overlay", + "color_ids": [ 3 ] + }, + { + "type": "icon_state", + "icon_state": "back_t", + "blend_mode": "overlay", + "color_ids": [ 4 ] + } + ] +} diff --git a/code/datums/greyscale/json_configs/labcoat_worn.json b/code/datums/greyscale/json_configs/labcoat_worn.json new file mode 100644 index 00000000000000..54abebcfa995de --- /dev/null +++ b/code/datums/greyscale/json_configs/labcoat_worn.json @@ -0,0 +1,54 @@ +{ + "labcoat_job": [ + { + "type": "icon_state", + "icon_state": "labcoat_job", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "shoulder", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "sash", + "blend_mode": "overlay", + "color_ids": [ 3 ] + }, + { + "type": "icon_state", + "icon_state": "back", + "blend_mode": "overlay", + "color_ids": [ 4 ] + } + ], + "labcoat_job_t": [ + { + "type": "icon_state", + "icon_state": "labcoat_job_t", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "shoulder_t", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "sash_t", + "blend_mode": "overlay", + "color_ids": [ 3 ] + }, + { + "type": "icon_state", + "icon_state": "back_t", + "blend_mode": "overlay", + "color_ids": [ 4 ] + } + ] +} diff --git a/code/datums/greyscale/json_configs/santa_hat.json b/code/datums/greyscale/json_configs/santa_hat.json new file mode 100644 index 00000000000000..dda130d59c739b --- /dev/null +++ b/code/datums/greyscale/json_configs/santa_hat.json @@ -0,0 +1,16 @@ +{ + "santa_hat": [ + { + "type": "icon_state", + "icon_state": "santa_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "santa_trim", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index 06e2c1e18d65b8..c3562aa5987324 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -37,6 +37,8 @@ else if(!originmastercommit) msg += "No commit information" + msg += "Running rust-g version [rustg_get_version()]" + return msg.Join("\n") /datum/getrev/proc/GetTestMergeInfo(header = TRUE) diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index c0217d957742d7..6ea1a8121f09ab 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -66,6 +66,7 @@ if(!forced) if(!check_teleport_valid(teleatom, destination, channel)) + teleatom.balloon_alert(teleatom, "something holds you back!") return FALSE if(isobserver(teleatom)) diff --git a/code/datums/hud.dm b/code/datums/hud.dm index 604dea3ff712e0..aa091db5b0199b 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -18,8 +18,9 @@ GLOBAL_LIST_INIT(huds, list( DATA_HUD_SENTIENT_DISEASE = new/datum/atom_hud/sentient_disease(), DATA_HUD_AI_DETECT = new/datum/atom_hud/ai_detector(), DATA_HUD_FAN = new/datum/atom_hud/data/human/fan_hud(), - DATA_HUD_PERMIT = new/datum/atom_hud/data/human/permit(), // SKYRAT EDIT ADDITION - DATA_HUD_DNR = new/datum/atom_hud/data/human/dnr(), // SKYRAT EDIT ADDITION + DATA_HUD_MALF_APC = new/datum/atom_hud/data/malf_apc(), + DATA_HUD_PERMIT = new/datum/atom_hud/data/human/permit(), // NOVA EDIT ADDITION + DATA_HUD_DNR = new/datum/atom_hud/data/human/dnr(), // NOVA EDIT ADDITION )) /datum/atom_hud diff --git a/code/datums/id_trim/_id_trim.dm b/code/datums/id_trim/_id_trim.dm index 7000e2d6b1d9b6..6428b38d562253 100644 --- a/code/datums/id_trim/_id_trim.dm +++ b/code/datums/id_trim/_id_trim.dm @@ -16,6 +16,8 @@ var/intern_alt_name = null /// The icon_state associated with this trim, as it will show on the security HUD. var/sechud_icon_state = SECHUD_UNKNOWN + /// How threatened does a security bot feel when scanning this ID? A negative value may cause them to forgive things which would otherwise cause aggro. + var/threat_modifier = 0 /// Accesses that this trim unlocks on a card it is imprinted on. These accesses never take wildcard slots and can be added and removed at will. var/list/access = list() diff --git a/code/datums/id_trim/admin.dm b/code/datums/id_trim/admin.dm index 1cfd26979b5d35..9de155c9a0468e 100644 --- a/code/datums/id_trim/admin.dm +++ b/code/datums/id_trim/admin.dm @@ -4,6 +4,8 @@ trim_state = "trim_janitor" department_color = COLOR_CENTCOM_BLUE subdepartment_color = COLOR_SERVICE_LIME + threat_modifier = -INFINITY + /datum/id_trim/admin/New() . = ..() // Every single access in the game, all on one handy trim. diff --git a/code/datums/id_trim/centcom.dm b/code/datums/id_trim/centcom.dm index c501722d6a9a43..7016ea5d6613b6 100644 --- a/code/datums/id_trim/centcom.dm +++ b/code/datums/id_trim/centcom.dm @@ -6,6 +6,7 @@ sechud_icon_state = SECHUD_CENTCOM department_color = COLOR_CENTCOM_BLUE subdepartment_color = COLOR_CENTCOM_BLUE + threat_modifier = -10 // Centcom are legally allowed to do whatever they want /// Trim for Centcom VIPs /datum/id_trim/centcom/vip diff --git a/code/datums/id_trim/jobs.dm b/code/datums/id_trim/jobs.dm index 6d50347aa3d78b..72a23adf768f7a 100644 --- a/code/datums/id_trim/jobs.dm +++ b/code/datums/id_trim/jobs.dm @@ -79,6 +79,7 @@ /datum/id_trim/job/assistant assignment = "Assistant" trim_state = "trim_assistant" + intern_alt_name = "Intern" sechud_icon_state = SECHUD_ASSISTANT minimal_access = list() extra_access = list( @@ -440,6 +441,7 @@ extra_access = list( ACCESS_PSYCHOLOGY, ACCESS_PHARMACY, + ACCESS_VIROLOGY, ) template_access = list( ACCESS_CAPTAIN, @@ -695,7 +697,6 @@ sechud_icon_state = SECHUD_MEDICAL_DOCTOR extra_access = list( ACCESS_PLUMBING, - ACCESS_VIROLOGY, ) minimal_access = list( ACCESS_MECH_MEDICAL, @@ -704,6 +705,7 @@ ACCESS_MORGUE, ACCESS_PHARMACY, ACCESS_SURGERY, + ACCESS_VIROLOGY, ) template_access = list( ACCESS_CAPTAIN, @@ -754,6 +756,7 @@ ) extra_access = list( ACCESS_SURGERY, + ACCESS_VIROLOGY, ) template_access = list( ACCESS_CAPTAIN, @@ -775,6 +778,7 @@ ACCESS_HOS, ) job = /datum/job/prisoner + threat_modifier = 1 // I'm watching you /datum/id_trim/job/prisoner/one trim_state = "trim_prisoner_1" @@ -830,7 +834,8 @@ /datum/id_trim/job/quartermaster assignment = "Quartermaster" - trim_state = "trim_quartermaster" + intern_alt_name = "Quartermaster-in-Training" + trim_state = "trim_cargotechnician" department_color = COLOR_COMMAND_BLUE subdepartment_color = COLOR_CARGO_BROWN department_state = "departmenthead" @@ -1167,6 +1172,7 @@ ACCESS_MEDICAL, ACCESS_MINERAL_STOREROOM, ACCESS_VIROLOGY, + ACCESS_PHARMACY, ) extra_access = list( ACCESS_PLUMBING, diff --git a/code/datums/id_trim/outfits.dm b/code/datums/id_trim/outfits.dm index 2a06434ecdb869..548387f5dfdbee 100644 --- a/code/datums/id_trim/outfits.dm +++ b/code/datums/id_trim/outfits.dm @@ -28,7 +28,7 @@ /// Trim for VR outfits. /datum/id_trim/vr/operative - assignment = "Syndicate VR Operative" + assignment = "Symphionia VR Operative" department_color = COLOR_RED subdepartment_color = COLOR_RED @@ -65,10 +65,11 @@ /// Trim for cyber police in the Virtual Domain. /datum/id_trim/cyber_police - assignment = "Cyber Police" + assignment = ROLE_CYBER_POLICE trim_state = "trim_deathcommando" department_color = COLOR_BLACK subdepartment_color = COLOR_GREEN + threat_modifier = -1 // Cops recognise cops /datum/id_trim/cyber_police/New() . = ..() diff --git a/code/datums/id_trim/ruins.dm b/code/datums/id_trim/ruins.dm index de58590ba8a9ff..b82facdea927a4 100644 --- a/code/datums/id_trim/ruins.dm +++ b/code/datums/id_trim/ruins.dm @@ -87,7 +87,7 @@ /// Trim for various Centcom corpses. /datum/id_trim/centcom/corpse/assault - assignment = "Nanotrasen Assault Force" + assignment = "Symphionia Assault Force" access = list(ACCESS_CENT_CAPTAIN, ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_STORAGE, ACCESS_SECURITY, ACCESS_MECH_SECURITY) /// Trim for various various ruins. diff --git a/code/datums/id_trim/syndicate.dm b/code/datums/id_trim/syndicate.dm index 7975ed7b66a241..f90c127ee57e6e 100644 --- a/code/datums/id_trim/syndicate.dm +++ b/code/datums/id_trim/syndicate.dm @@ -1,15 +1,16 @@ -/// Trim for Syndicate mobs, outfits and corpses. +/// Trim for Symphionia mobs, outfits and corpses. /datum/id_trim/syndicom - assignment = "Syndicate Overlord" + assignment = "Symphionia Overlord" trim_state = "trim_syndicate" department_color = COLOR_SYNDIE_RED subdepartment_color = COLOR_SYNDIE_RED sechud_icon_state = SECHUD_SYNDICATE access = list(ACCESS_SYNDICATE) + threat_modifier = 5 // Bad guy on deck -/// Trim for Syndicate mobs, outfits and corpses. +/// Trim for Symphionia mobs, outfits and corpses. /datum/id_trim/syndicom/crew - assignment = "Syndicate Operative" + assignment = "Symphionia Operative" access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS) /// Interdyne medical Staff @@ -42,31 +43,33 @@ trim_state = "trim_quartermaster" sechud_icon_state = SECHUD_QUARTERMASTER -/// Trim for Syndicate mobs, outfits and corpses. +/// Trim for Symphionia mobs, outfits and corpses. /datum/id_trim/syndicom/captain - assignment = "Syndicate Ship Captain" + assignment = "Symphionia Ship Captain" trim_state = "trim_captain" access = list(ACCESS_SYNDICATE, ACCESS_SYNDICATE_LEADER, ACCESS_ROBOTICS) -/// Trim for Syndicate mobs, outfits and corpses. +/// Trim for Symphionia mobs, outfits and corpses. /datum/id_trim/battlecruiser - assignment = "Syndicate Battlecruiser Crew" + assignment = "Symphionia Battlecruiser Crew" trim_state = "trim_syndicate" access = list(ACCESS_SYNDICATE) + threat_modifier = 10 -/// Trim for Syndicate mobs, outfits and corpses. +/// Trim for Symphionia mobs, outfits and corpses. /datum/id_trim/battlecruiser/captain - assignment = "Syndicate Battlecruiser Captain" + assignment = "Symphionia Battlecruiser Captain" access = list(ACCESS_SYNDICATE, ACCESS_SYNDICATE_LEADER) /// Trim for Chameleon ID cards. Many outfits, nuke ops and some corpses hold Chameleon ID cards. /datum/id_trim/chameleon assignment = "Unknown" access = list(ACCESS_SYNDICATE, ACCESS_MAINT_TUNNELS) + threat_modifier = -5 // This guy seems legit /// Trim for Chameleon ID cards. Many outfits, nuke ops and some corpses hold Chameleon ID cards. /datum/id_trim/chameleon/operative - assignment = "Syndicate Operative" + assignment = "Symphionia Operative" trim_state = "trim_syndicate" department_color = COLOR_SYNDIE_RED subdepartment_color = COLOR_SYNDIE_RED @@ -74,15 +77,15 @@ /// Trim for Chameleon ID cards. Many outfits, nuke ops and some corpses hold Chameleon ID cards. /datum/id_trim/chameleon/operative/nuke_leader - assignment = "Syndicate Operative Leader" + assignment = "Symphionia Operative Leader" access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE, ACCESS_SYNDICATE_LEADER) /// Trim for Chameleon ID cards. Many outfits, nuke ops and some corpses hold Chameleon ID cards. /datum/id_trim/chameleon/operative/clown - assignment = "Syndicate Entertainment Operative" + assignment = "Symphionia Entertainment Operative" trim_state = "trim_clown" /// Trim for Chameleon ID cards. Many outfits, nuke ops and some corpses hold Chameleon ID cards. /datum/id_trim/chameleon/operative/clown_leader - assignment = "Syndicate Entertainment Operative Leader" + assignment = "Symphionia Entertainment Operative Leader" access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE, ACCESS_SYNDICATE_LEADER) diff --git a/code/datums/json_database.dm b/code/datums/json_database.dm new file mode 100644 index 00000000000000..ea3ff354b48ce7 --- /dev/null +++ b/code/datums/json_database.dm @@ -0,0 +1,128 @@ +/// Represents a json file being used as a database in the data/ folder. +/// Changes made here will save back to the associated file, with recovery. +/// Will defer writes until later if multiple happen in the same tick. +/// Do not add an extra cache on top of this. This IS your cache. +/datum/json_database + VAR_PRIVATE + filepath + backup_filepath + + cached_data + save_queued = FALSE + + static/existing_json_database = list() + +/datum/json_database/New(filepath) + if (IsAdminAdvancedProcCall()) + to_chat(usr, "json_database creation, linking to [html_encode(filepath)], was blocked.", confidential = TRUE) + return + + ASSERT(isnull(existing_json_database[filepath]), "[filepath] already has an associated json_database. You must expose it somehow and use that instead of making a new one.") + + existing_json_database[filepath] = TRUE + + src.filepath = filepath + backup_filepath = "[filepath].savebac" + + if (fexists(filepath)) + cached_data = safe_json_decode(file2text(filepath)) + if (isnull(cached_data)) + var/scenario = "[filepath] existed, but did not have valid JSON" + + if (fexists(backup_filepath)) + load_backup(scenario) + else + stack_trace("[scenario]. No backup could be found.") + cached_data = list() + else + if (fexists(backup_filepath)) + load_backup("[filepath] didn't exist") + else + cached_data = list() + +/datum/json_database/Destroy() + if (save_queued) + save() + + existing_json_database -= filepath + + return ..() + +/// Returns the cached data. +/// Be careful on holding onto this data for too long, as it can mutate when other stuff changes it. +/// Do not mutate it yourself. +/datum/json_database/proc/get() + return cached_data + +/// Returns the data with the given key. +/// For arrays, this is a number. +/// Be careful on holding onto this data for too long, as it can mutate when other stuff changes it. +/// Do not mutate it yourself. +/datum/json_database/proc/get_key(key) + return cached_data[key] + +/// Sets the data at the key to the value, and queues a save. +/datum/json_database/proc/set_key(key, value) + cached_data[key] = value + queue_save() + +/// Removes the data at the given item, and queues a save. +/// For dictionaries, this can be the key. +/// For arrays, this can be the value. +/datum/json_database/proc/remove(item) + UNTYPED_LIST_REMOVE(cached_data, item) + queue_save() + +/// Inserts the data at the end of what is assumed to be an array, and queues a save. +/datum/json_database/proc/insert(value) + UNTYPED_LIST_ADD(cached_data, value) + queue_save() + +/// Replaces the cache with the new data completely, and queues a save. +/// Do not touch the new data after passing it in. +/datum/json_database/proc/replace(list/new_data) + cached_data = new_data + queue_save() + +/datum/json_database/proc/queue_save() + PRIVATE_PROC(TRUE) + + if (save_queued) + return + + addtimer(CALLBACK(src, PROC_REF(save)), 0) + +/datum/json_database/proc/save() + PRIVATE_PROC(TRUE) + + save_queued = FALSE + + if (fexists(filepath)) + rustg_file_write(file2text(filepath), backup_filepath) + + rustg_file_write(json_encode(cached_data, JSON_PRETTY_PRINT), filepath) + + ASSERT(!isnull(safe_json_decode(file2text(filepath))), "JSON written to [filepath] was not valid. Backup will be preserved.") + + fdel(backup_filepath) + +/datum/json_database/proc/load_backup(scenario) + PRIVATE_PROC(TRUE) + + var/cached_contents = file2text(backup_filepath) + var/list/backed_up_data = safe_json_decode(cached_contents) + + if (isnull(backed_up_data)) + stack_trace("[scenario]. Backup existed, but also did not have valid JSON.") + cached_data = list() + else + stack_trace("[scenario]. Backup existed and was used instead. The JSON file has been updated.") + cached_data = backed_up_data + rustg_file_write(cached_contents, filepath) + +/datum/json_database/vv_edit_var(var_name, var_value) + switch (var_name) + if (nameof(filepath), nameof(backup_filepath)) + return FALSE + else + return ..() diff --git a/code/datums/json_savefile.dm b/code/datums/json_savefile.dm index 69e5a2ef7cfc79..dd2a6af0b9882b 100644 --- a/code/datums/json_savefile.dm +++ b/code/datums/json_savefile.dm @@ -57,7 +57,7 @@ GENERAL_PROTECT_DATUM(/datum/json_savefile) /datum/json_savefile/proc/save() if(path) - rustg_file_write(json_encode(tree), path) + rustg_file_write(json_encode(tree, JSON_PRETTY_PRINT), path) /datum/json_savefile/serialize_list(list/options, list/semvers) SHOULD_CALL_PARENT(FALSE) @@ -98,15 +98,9 @@ GENERAL_PROTECT_DATUM(/datum/json_savefile) var/file_name = "[account_name ? "[account_name]_" : ""]preferences_[time2text(world.timeofday, "MMM_DD_YYYY_hh-mm-ss")].json" var/temporary_file_storage = "data/preferences_export_working_directory/[file_name]" -#if DM_VERSION >= 515 if(!text2file(json_encode(tree, JSON_PRETTY_PRINT), temporary_file_storage)) tgui_alert(requester, "Failed to export preferences to JSON! You might need to try again later.", "Export Preferences JSON") return -#else - if(!text2file(json_encode(tree), temporary_file_storage)) - tgui_alert(requester, "Failed to export preferences to JSON! You might need to try again later.", "Export Preferences JSON") - return -#endif var/exportable_json = file(temporary_file_storage) diff --git a/code/datums/keybinding/communication.dm b/code/datums/keybinding/communication.dm index 92c8f3c49846d3..b1344c096b998d 100644 --- a/code/datums/keybinding/communication.dm +++ b/code/datums/keybinding/communication.dm @@ -16,7 +16,7 @@ /datum/keybinding/client/communication/radio //hotkey_keys = list("Y") // ORIGINAL - hotkey_keys = list(";") // SKYRAT EDIT CHANGE - CUSTOMIZATION + hotkey_keys = list(";") // NOVA EDIT CHANGE - CUSTOMIZATION name = RADIO_CHANNEL full_name = "IC Radio (;)" keybind_signal = COMSIG_KB_CLIENT_RADIO_DOWN diff --git a/code/datums/keybinding/human.dm b/code/datums/keybinding/human.dm index 448a15d4539a9a..cc401adfcc9441 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/keybinding/living.dm b/code/datums/keybinding/living.dm index 84e3685f5f890e..eb666f570284f4 100644 --- a/code/datums/keybinding/living.dm +++ b/code/datums/keybinding/living.dm @@ -22,7 +22,7 @@ /datum/keybinding/living/look_up // hotkey_keys = list("L") // ORIGINAL - hotkey_keys = list("P") //SKYRAT EDIT CHANGE - CUSTOMIZATION + hotkey_keys = list("P") //NOVA EDIT CHANGE - CUSTOMIZATION name = "look up" full_name = "Look Up" description = "Look up at the next z-level. Only works if directly below open space." @@ -43,7 +43,7 @@ /datum/keybinding/living/look_down // hotkey_keys = list(";") // ORIGINAL - hotkey_keys = list("\[") //SKYRAT EDIT CHANGE - CUSTOMIZATION + hotkey_keys = list("\[") //NOVA EDIT CHANGE - CUSTOMIZATION name = "look down" full_name = "Look Down" description = "Look down at the previous z-level. Only works if directly above open space." @@ -121,7 +121,7 @@ user_mob.set_combat_mode(FALSE, silent = FALSE) /datum/keybinding/living/toggle_move_intent - hotkey_keys = list("Alt") //SKYRAT EDIT CHANGE - C IS FOR COMBAT INDICATOR - ORIGINAL: hotkey_keys = list("C") + hotkey_keys = list("Alt") //NOVA EDIT CHANGE - C IS FOR COMBAT INDICATOR - ORIGINAL: hotkey_keys = list("C") name = "toggle_move_intent" full_name = "Hold to toggle move intent" description = "Held down to cycle to the other move intent, release to cycle back" diff --git a/code/datums/lazy_template.dm b/code/datums/lazy_template.dm index e3006e13056df5..0a5e8e53314135 100644 --- a/code/datums/lazy_template.dm +++ b/code/datums/lazy_template.dm @@ -18,7 +18,7 @@ reservations = list() ..() -/datum/lazy_template/Destroy(force, ...) +/datum/lazy_template/Destroy(force) if(!force) stack_trace("Something is trying to delete [type]") return QDEL_HINT_LETMELIVE diff --git a/code/datums/looping_sounds/music.dm b/code/datums/looping_sounds/music.dm index 56723f5db49cb9..ac76e236bc7844 100644 --- a/code/datums/looping_sounds/music.dm +++ b/code/datums/looping_sounds/music.dm @@ -8,3 +8,4 @@ use_reverb = FALSE direct = TRUE sound_channel = CHANNEL_ELEVATOR + diff --git a/code/datums/looping_sounds/projectiles.dm b/code/datums/looping_sounds/projectiles.dm new file mode 100644 index 00000000000000..6bc9a466ea144b --- /dev/null +++ b/code/datums/looping_sounds/projectiles.dm @@ -0,0 +1,4 @@ +/datum/looping_sound/moon_parade + mid_sounds = list('sound/effects/moon_parade_soundloop.ogg' = 1) + mid_length = 0 + volume = 20 diff --git a/code/datums/map_config.dm b/code/datums/map_config.dm index 9535bcf8576236..30c248105b4658 100644 --- a/code/datums/map_config.dm +++ b/code/datums/map_config.dm @@ -30,11 +30,21 @@ var/blacklist_file var/allow_custom_shuttles = TRUE +// NOVA EDIT REMOVAL BEGIN - CUSTOM SHUTTLE LIST OVERRIDE + /* + // TG original var/shuttles = list( - "cargo" = "cargo_skyrat", + "cargo" = "cargo_box", "ferry" = "ferry_fancy", "whiteship" = "whiteship_meta", - "emergency" = "emergency_skyrat") //SKYRAT EDIT CHANGE + "emergency" = "emergency_meta") + */ + var/shuttles = list( + "cargo" = "cargo_nova", + "ferry" = "ferry_fancy", + "whiteship" = "whiteship_meta", + "emergency" = "emergency_nova") +// NOVA EDIT END /// Dictionary of job sub-typepath to template changes dictionary var/job_changes = list() @@ -150,7 +160,9 @@ log_world("map_config shuttles is not a list!") return - shuttles["emergency"] = "emergency_skyrat" +// NOVA ADD BEGIN - EMERGENCY SHUTTLE OVERRIDE + shuttles["emergency"] = "emergency_nova" +// NOVA ADD END traits = json["traits"] // "traits": [{"Linkage": "Cross"}, {"Space Ruins": true}] diff --git a/code/datums/mapgen/CaveGenerator.dm b/code/datums/mapgen/CaveGenerator.dm index 754b87555452f6..123b66ea13c5cc 100644 --- a/code/datums/mapgen/CaveGenerator.dm +++ b/code/datums/mapgen/CaveGenerator.dm @@ -88,10 +88,10 @@ string_gen = rustg_cnoise_generate("[initial_closed_chance]", "[smoothing_iterations]", "[birth_limit]", "[death_limit]", "[world.maxx]", "[world.maxy]") //Generate the raw CA data for(var/turf/gen_turf as anything in turfs) //Go through all the turfs and generate them - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(istype(gen_turf, /turf/open/space/mirage)) continue - //SKYRAT EDIT END + //NOVA EDIT END var/closed = string_gen[world.maxx * (gen_turf.y - 1) + gen_turf.x] != "0" var/turf/new_turf = pick(closed ? closed_turf_types : open_turf_types) @@ -192,5 +192,5 @@ CHECK_TICK var/message = "[name] terrain population finished in [(REALTIMEOFDAY - start_time)/10]s!" - add_startup_message(message) //SKYRAT EDIT CHANGE - ORIGINAL: to_chat(world, span_boldannounce("[message]")) + add_startup_message(message) //NOVA EDIT CHANGE - ORIGINAL: to_chat(world, span_boldannounce("[message]")) log_world(message) diff --git a/code/datums/mapgen/Cavegens/IcemoonCaves.dm b/code/datums/mapgen/Cavegens/IcemoonCaves.dm index b0fcd471db2fff..96d30fbd359ac2 100644 --- a/code/datums/mapgen/Cavegens/IcemoonCaves.dm +++ b/code/datums/mapgen/Cavegens/IcemoonCaves.dm @@ -4,11 +4,11 @@ weighted_mob_spawn_list = list( + /mob/living/basic/mining/goldgrub = 10, /mob/living/basic/mining/legion/snow = 50, /mob/living/basic/mining/lobstrosity = 15, - /mob/living/basic/mining/goldgrub = 10, + /mob/living/basic/mining/wolf = 50, /mob/living/simple_animal/hostile/asteroid/polarbear = 30, - /mob/living/simple_animal/hostile/asteroid/wolf = 50, /obj/structure/spawner/ice_moon = 3, /obj/structure/spawner/ice_moon/polarbear = 3, ) diff --git a/code/datums/mapgen/_MapGenerator.dm b/code/datums/mapgen/_MapGenerator.dm deleted file mode 100644 index cecc0c65d1ba41..00000000000000 --- a/code/datums/mapgen/_MapGenerator.dm +++ /dev/null @@ -1,10 +0,0 @@ -///This type is responsible for any map generation behavior that is done in areas, override this to allow for area-specific map generation. This generation is ran by areas in initialize. -/datum/map_generator - -///This proc will be ran by areas on Initialize, and provides the areas turfs as argument to allow for generation. -/datum/map_generator/proc/generate_terrain(list/turfs, area/generate_in) - return - -/// Populate terrain with flora, fauna, features and basically everything that isn't a turf -/datum/map_generator/proc/populate_terrain(list/turfs, area/generate_in) - return diff --git a/code/datums/martial/_martial.dm b/code/datums/martial/_martial.dm index c91ae511788d27..2af604cd8fe203 100644 --- a/code/datums/martial/_martial.dm +++ b/code/datums/martial/_martial.dm @@ -5,7 +5,6 @@ var/max_streak_length = 6 var/current_target var/datum/martial_art/base // The permanent style. This will be null unless the martial art is temporary - var/block_chance = 0 //Chance to block melee attacks using items while on throw mode. var/help_verb var/allow_temp_override = TRUE //if this martial art can be overridden by temporary martial arts var/smashes_tables = FALSE //If the martial art smashes tables when performing table slams and head smashes diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm index 9ba1a53d40c675..da30104c9af312 100644 --- a/code/datums/martial/boxing.dm +++ b/code/datums/martial/boxing.dm @@ -33,14 +33,14 @@ var/obj/item/bodypart/affecting = defender.get_bodypart(defender.get_random_valid_zone(attacker.zone_selected)) var/armor_block = defender.run_armor_check(affecting, MELEE) - // SKYRAT EDIT CHANGE + // NOVA EDIT CHANGE var/sound/attack_sound if(!active_arm.unarmed_attack_sound) attack_sound = get_sfx("punch") else attack_sound = active_arm.unarmed_attack_sound playsound(defender.loc, attack_sound, 25, TRUE, -1) - //SKYRAT EDIT END + //NOVA EDIT END defender.visible_message(span_danger("[attacker] [atk_verb]ed [defender]!"), \ span_userdanger("You're [atk_verb]ed by [attacker]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, attacker) diff --git a/code/datums/martial/cqc.dm b/code/datums/martial/cqc.dm index cae4cdf14b210e..de609a82015ba6 100644 --- a/code/datums/martial/cqc.dm +++ b/code/datums/martial/cqc.dm @@ -8,18 +8,20 @@ name = "CQC" id = MARTIALART_CQC help_verb = /mob/living/proc/CQC_help - block_chance = 75 smashes_tables = TRUE display_combos = TRUE var/old_grab_state = null var/mob/restraining_mob + /// Probability of successfully blocking attacks while on throw mode + var/block_chance = 75 /datum/martial_art/cqc/teach(mob/living/cqc_user, make_temporary) . = ..() RegisterSignal(cqc_user, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) + RegisterSignal(cqc_user, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(check_block)) /datum/martial_art/cqc/on_remove(mob/living/cqc_user) - UnregisterSignal(cqc_user, COMSIG_ATOM_ATTACKBY) + UnregisterSignal(cqc_user, list(COMSIG_ATOM_ATTACKBY, COMSIG_LIVING_CHECK_BLOCK)) . = ..() ///Signal from getting attacked with an item, for a special interaction with touch spells @@ -41,6 +43,31 @@ INVOKE_ASYNC(touch_spell, TYPE_PROC_REF(/datum/action/cooldown/spell/touch, do_hand_hit), touch_weapon, attacker, attacker) return COMPONENT_NO_AFTERATTACK +/datum/martial_art/cqc/proc/check_block(mob/living/cqc_user, atom/movable/hitby, damage, attack_text, attack_type, ...) + SIGNAL_HANDLER + + if(!can_use(cqc_user) || !cqc_user.throw_mode || cqc_user.incapacitated(IGNORE_GRAB)) + return NONE + if(attack_type == PROJECTILE_ATTACK) + return NONE + if(!prob(block_chance)) + return NONE + + var/mob/living/attacker = GET_ASSAILANT(hitby) + if(istype(attacker) && cqc_user.Adjacent(attacker)) + cqc_user.visible_message( + span_danger("[cqc_user] blocks [attack_text] and twists [attacker]'s arm behind [attacker.p_their()] back!"), + span_userdanger("You block [attack_text]!"), + ) + attacker.Stun(4 SECONDS) + else + cqc_user.visible_message( + span_danger("[cqc_user] blocks [attack_text]!"), + span_userdanger("You block [attack_text]!"), + ) + return SUCCESSFUL_BLOCK + + /datum/martial_art/cqc/reset_streak(mob/living/new_target) if(new_target && new_target != restraining_mob) restraining_mob = null @@ -183,6 +210,24 @@ log_combat(attacker, defender, "sweeped (CQC)") reset_streak() return TRUE + if((attacker.grab_state == GRAB_KILL) && attacker.zone_selected == BODY_ZONE_HEAD && defender.stat != DEAD) + var/obj/item/bodypart/head = defender.get_bodypart("head") + if(head) + playsound(defender, 'sound/effects/wounds/crack1.ogg', 100) + defender.visible_message( + span_danger("[attacker] snaps the neck of [defender]!"), + span_userdanger("Your neck is snapped by [attacker]!"), + span_hear("You hear a sickening snap!"), + ignored_mobs = attacker + ) + to_chat(attacker, span_danger("In a swift motion, you snap the neck of [defender]!")) + log_combat(attacker, defender, "snapped neck") + defender.apply_damage(100, BRUTE, BODY_ZONE_HEAD, wound_bonus=CANT_WOUND) + if(!HAS_TRAIT(defender, TRAIT_NODEATH)) + defender.death() + defender.investigate_log("has had [defender.p_their()] neck snapped by [attacker].", INVESTIGATE_DEATHS) + + return TRUE add_to_streak("H", defender) if(check_streak(attacker, defender)) diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 42eed265affbf8..fcc432d41f89d0 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -116,12 +116,6 @@ log_combat(attacker, defender, "neck chopped") return TRUE -/datum/martial_art/krav_maga/grab_act(mob/living/attacker, mob/living/defender) - if(check_streak(attacker, defender)) - return TRUE - log_combat(attacker, defender, "grabbed (Krav Maga)") - ..() - /datum/martial_art/krav_maga/harm_act(mob/living/attacker, mob/living/defender) if(check_streak(attacker, defender)) return TRUE diff --git a/code/datums/martial/plasma_fist.dm b/code/datums/martial/plasma_fist.dm index f4c89177ac363f..ce2b2e6e2d3838 100644 --- a/code/datums/martial/plasma_fist.dm +++ b/code/datums/martial/plasma_fist.dm @@ -98,7 +98,7 @@ human_attacker.underwear = "Nude" human_attacker.undershirt = "Nude" human_attacker.socks = "Nude" - human_attacker.bra = "Nude" // SKYRAT EDIT ADDITION - Underwear and bra split + human_attacker.bra = "Nude" // NOVA EDIT ADDITION - Underwear and bra split human_attacker.update_body() var/turf/boomspot = get_turf(user) diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 1bc6659dfba679..0e061b35daf749 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,18 +8,19 @@ 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) + target.remove_traits(scarp_traits, SLEEPING_CARP_TRAIT) UnregisterSignal(target, COMSIG_ATOM_ATTACKBY) UnregisterSignal(target, COMSIG_ATOM_PRE_BULLET_ACT) target.faction -= FACTION_CARP //:( @@ -49,12 +50,12 @@ 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', 25, TRUE, -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!"), \ @@ -66,56 +67,96 @@ 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) 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.apply_damage(40, STAMINA) + 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', 25, TRUE, -1) + if(defender.stat != DEAD && !defender.IsUnconscious() && defender.getStaminaLoss() >= 80) //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.apply_damage(20, STAMINA) + log_combat(attacker, defender, "[grab_log_description] (Sleeping Carp)") return ..() /datum/martial_art/the_sleeping_carp/harm_act(mob/living/attacker, mob/living/defender) + if((attacker.grab_state == GRAB_KILL) && attacker.zone_selected == BODY_ZONE_HEAD && defender.stat != DEAD) + var/obj/item/bodypart/head = defender.get_bodypart("head") + if(head) + playsound(defender, 'sound/effects/wounds/crack1.ogg', 100) + defender.visible_message( + span_danger("[attacker] snaps the neck of [defender]!"), + span_userdanger("Your neck is snapped by [attacker]!"), + span_hear("You hear a sickening snap!"), + ignored_mobs = attacker + ) + to_chat(attacker, span_danger("In a swift motion, you snap the neck of [defender]!")) + log_combat(attacker, defender, "snapped neck") + defender.apply_damage(100, BRUTE, BODY_ZONE_HEAD, wound_bonus=CANT_WOUND) + if(!HAS_TRAIT(defender, TRAIT_NODEATH)) + defender.death() + defender.investigate_log("has had [defender.p_their()] neck snapped by [attacker].", INVESTIGATE_DEATHS) add_to_streak("H", defender) if(check_streak(attacker, defender)) return TRUE + var/obj/item/bodypart/affecting = defender.get_bodypart(defender.get_random_valid_zone(attacker.zone_selected)) attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) var/atk_verb = pick("kick", "chop", "hit", "slam") 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 TRUE /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', 25, TRUE, -1) + defender.apply_damage(20, STAMINA) 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) || !carp_user.combat_mode) return FALSE if(carp_user.incapacitated(IGNORE_GRAB)) //NO STUN return FALSE @@ -165,12 +206,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.") diff --git a/code/datums/materials/_material.dm b/code/datums/materials/_material.dm index 53e661d39d8388..396b902b73feb6 100644 --- a/code/datums/materials/_material.dm +++ b/code/datums/materials/_material.dm @@ -245,7 +245,7 @@ Simple datum which is instanced once per type and is used for every object of sa * * Arguments: * - amount: The amount of the material to break down. - * - breakdown_flags: Some flags dictating how exactly this material is being broken down. */ -/datum/material/proc/return_composition(amount=1, breakdown_flags=NONE) - return list((src) = amount) // Yes we need the parenthesis, without them BYOND stringifies src into "src" and things break. +/datum/material/proc/return_composition(amount = 1) + // Yes we need the parenthesis, without them BYOND stringifies src into "src" and things break. + return list((src) = amount) diff --git a/code/datums/materials/alloys.dm b/code/datums/materials/alloys.dm index af208fdc5a4d24..e878a7f495daaf 100644 --- a/code/datums/materials/alloys.dm +++ b/code/datums/materials/alloys.dm @@ -6,18 +6,14 @@ init_flags = NONE /// The materials this alloy is made from weighted by their ratios. var/list/composition = null - /// Breakdown flags required to reduce this alloy to its component materials. - var/req_breakdown_flags = BREAKDOWN_ALLOYS - -/datum/material/alloy/return_composition(amount=1, breakdown_flags) - if(req_breakdown_flags & !(breakdown_flags & req_breakdown_flags)) - return ..() +/datum/material/alloy/return_composition(amount = 1) . = list() + var/list/cached_comp = composition for(var/comp_mat in cached_comp) var/datum/material/component_material = GET_MATERIAL_REF(comp_mat) - var/list/component_composition = component_material.return_composition(cached_comp[comp_mat], breakdown_flags) + var/list/component_composition = component_material.return_composition(cached_comp[comp_mat]) for(var/comp_comp_mat in component_composition) .[comp_comp_mat] += component_composition[comp_comp_mat] * amount diff --git a/code/datums/memory/_memory.dm b/code/datums/memory/_memory.dm index 2b3e250a3fbf28..0656d32006a24e 100644 --- a/code/datums/memory/_memory.dm +++ b/code/datums/memory/_memory.dm @@ -71,7 +71,7 @@ // This happens after everything's all set, remember this for New overrides generate_memory_name() -/datum/memory/Destroy(force, ...) +/datum/memory/Destroy(force) memorizer_mind = null return ..() @@ -266,6 +266,9 @@ /mob/living/basic/morph, /mob/living/basic/mouse, /mob/living/basic/mushroom, + /mob/living/basic/parrot, + /mob/living/basic/pet/cat, + /mob/living/basic/pet/cat/cak, /mob/living/basic/pet/dog/breaddog, /mob/living/basic/pet/dog/corgi, /mob/living/basic/pet/dog/pug, @@ -276,9 +279,6 @@ /mob/living/basic/stickman, /mob/living/basic/stickman/dog, /mob/living/simple_animal/hostile/megafauna/dragon/lesser, - /mob/living/simple_animal/parrot, - /mob/living/simple_animal/pet/cat, - /mob/living/simple_animal/pet/cat/cak, /obj/item/food/sausage/american, /obj/item/skub, ) diff --git a/code/datums/memory/general_memories.dm b/code/datums/memory/general_memories.dm index 3e5eb05cf40269..c32cfd914f25fa 100644 --- a/code/datums/memory/general_memories.dm +++ b/code/datums/memory/general_memories.dm @@ -430,7 +430,7 @@ /datum/memory/revolution_rev_defeat/get_names() return list( - "The defeat of [protagonist_name] at the hands of the Nanotrasen", + "The defeat of [protagonist_name] at the hands of the Symphionia", "The end of [protagonist_name]'s glorious revolution", ) @@ -447,16 +447,16 @@ // Protagonist - The head of staff that won the revolution /datum/memory/revolution_heads_victory/get_names() - return list("The success of [protagonist_name] and Nanotrasen over the hateful revolution") + return list("The success of [protagonist_name] and Symphionia over the hateful revolution") /datum/memory/revolution_heads_victory/get_starts() return list( "[protagonist_name] dusting off their hands in victory over the revoution", - "the banner of Nanotrasen flying on the bridge of [station_name()] with [protagonist_name] proudly beside it", + "the banner of Symphionia flying on the bridge of [station_name()] with [protagonist_name] proudly beside it", ) /datum/memory/revolution_rev_defeat/get_moods() - return list("[protagonist_name] [mood_verb] over the defeat of the revolution by the hands of Nanotrasen.") + return list("[protagonist_name] [mood_verb] over the defeat of the revolution by the hands of Symphionia.") /// Watched someone receive a commendation medal /datum/memory/received_medal @@ -915,6 +915,18 @@ "[antagonist_name] lifts an odd device to [protagonist_name]'s eyes and flashes him, imprinting murderous instructions.", ) +/// Who converted into a blood brother +/datum/memory/recruited_by_blood_brother + +/datum/memory/recruited_by_blood_brother/get_names() + return list("[protagonist_name] is converted into a blood brother by [antagonist_name]") + +/datum/memory/recruited_by_blood_brother/get_starts() + return list( + "[antagonist_name] acts just a bit too friendly with [protagonist_name], moments away from converting them into a blood brother.", + "[protagonist_name] is brought into [antagonist_name]'s life of crime and espionage.", + ) + /// Saw someone play Russian Roulette. /datum/memory/witnessed_gods_wrath memory_flags = MEMORY_CHECK_BLINDNESS|MEMORY_SKIP_UNCONSCIOUS diff --git a/code/datums/memory/key_memories.dm b/code/datums/memory/key_memories.dm index 5cc581f14c737d..48d4b0326e2aa8 100644 --- a/code/datums/memory/key_memories.dm +++ b/code/datums/memory/key_memories.dm @@ -191,3 +191,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/mergers/_merger.dm b/code/datums/mergers/_merger.dm index 8014b6419fc009..6816d415a89af2 100644 --- a/code/datums/mergers/_merger.dm +++ b/code/datums/mergers/_merger.dm @@ -28,7 +28,7 @@ src.attempt_merge_proc = attempt_merge_proc Refresh() -/datum/merger/Destroy(force, ...) +/datum/merger/Destroy(force) for(var/atom/thing as anything in members) RemoveMember(thing) return ..() diff --git a/code/datums/mind/_mind.dm b/code/datums/mind/_mind.dm index deb55e92ecb40d..a6c0b4adabc39b 100644 --- a/code/datums/mind/_mind.dm +++ b/code/datums/mind/_mind.dm @@ -413,7 +413,7 @@ var/datum/traitor_objective/objective = locate(href_list["edit_obj_tc"]) if(!istype(objective)) return - var/telecrystal = input("Set new telecrystal reward for [objective.name]","Syndicate uplink", objective.telecrystal_reward) as null | num + var/telecrystal = input("Set new telecrystal reward for [objective.name]","Symphionia uplink", objective.telecrystal_reward) as null | num if(isnull(telecrystal)) return objective.telecrystal_reward = telecrystal @@ -423,7 +423,7 @@ var/datum/traitor_objective/objective = locate(href_list["edit_obj_pr"]) if(!istype(objective)) return - var/progression = input("Set new progression reward for [objective.name]","Syndicate uplink", objective.progression_reward) as null | num + var/progression = input("Set new progression reward for [objective.name]","Symphionia uplink", objective.progression_reward) as null | num if(isnull(progression)) return objective.progression_reward = progression @@ -457,7 +457,7 @@ if(check_rights(R_FUN)) var/datum/component/uplink/U = find_syndicate_uplink() if(U) - var/crystals = input("Amount of telecrystals for [key]","Syndicate uplink", U.uplink_handler.telecrystals) as null | num + var/crystals = input("Amount of telecrystals for [key]","Symphionia uplink", U.uplink_handler.telecrystals) as null | num if(!isnull(crystals)) U.uplink_handler.telecrystals = crystals message_admins("[key_name_admin(usr)] changed [current]'s telecrystal count to [crystals].") @@ -468,7 +468,7 @@ var/datum/component/uplink/uplink = find_syndicate_uplink() if(!uplink) return - var/progression = input("Set new progression points for [key]","Syndicate uplink", uplink.uplink_handler.progression_points) as null | num + var/progression = input("Set new progression points for [key]","Symphionia uplink", uplink.uplink_handler.progression_points) as null | num if(isnull(progression)) return uplink.uplink_handler.progression_points = progression @@ -501,13 +501,13 @@ log_admin("[key_name(usr)] tried and failed to give [current] an uplink.") else log_admin("[key_name(usr)] gave [current] an uplink.") - //SKYRAT EDIT ADDITION BEGIN -- EXPLOITABLES + //NOVA EDIT ADDITION BEGIN -- EXPLOITABLES if("toggle_exploitables") has_exploitables_override = !has_exploitables_override //First we set the override to be the opposite of whatever it was apon execution, then we handle_exploitables() // use ternaries to convert this into true/false for admin logs. log_admin("[key_name(usr)] toggled [current]'s exploitables override to [(has_exploitables_override) ? "true" : "false"].") message_admins("[key_name(usr)] toggled [current]'s exploitables override to [(has_exploitables_override) ? "true" : "false"].") - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END else if (href_list["obj_announce"]) announce_objectives() @@ -569,12 +569,12 @@ /// Sets us to the passed job datum, then greets them to their new job. /// Use this one for when you're assigning this mind to a new job for the first time, /// or for when someone's recieving a job they'd really want to be greeted to. -/datum/mind/proc/set_assigned_role_with_greeting(datum/job/new_role, client/incoming_client, alt_title) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: /datum/mind/proc/set_assigned_role_with_greeting(datum/job/new_role, client/incoming_client) +/datum/mind/proc/set_assigned_role_with_greeting(datum/job/new_role, client/incoming_client, alt_title) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: /datum/mind/proc/set_assigned_role_with_greeting(datum/job/new_role, client/incoming_client) . = set_assigned_role(new_role) if(assigned_role != new_role) return - var/intro_message = new_role.get_spawn_message(alt_title) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: var/intro_message = new_role.get_spawn_message() + var/intro_message = new_role.get_spawn_message(alt_title) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: var/intro_message = new_role.get_spawn_message() if(incoming_client && intro_message) to_chat(incoming_client, intro_message) diff --git a/code/datums/mind/antag.dm b/code/datums/mind/antag.dm index 73aa56f80e4853..6edb5ae225aedf 100644 --- a/code/datums/mind/antag.dm +++ b/code/datums/mind/antag.dm @@ -25,7 +25,7 @@ antag_team.add_member(src) INVOKE_ASYNC(A, TYPE_PROC_REF(/datum/antagonist, on_gain)) log_game("[key_name(src)] has gained antag datum [A.name]([A.type]).") - handle_exploitables() //SKYRAT EDIT ADDITION - EXPLOITABLES MENU + handle_exploitables() //NOVA EDIT ADDITION - EXPLOITABLES MENU return A /datum/mind/proc/remove_antag_datum(datum_type) @@ -106,6 +106,7 @@ var/datum/antagonist/rev/revolutionary = has_antag_datum(/datum/antagonist/rev) revolutionary?.remove_revolutionary() + /** * ## give_uplink * @@ -165,7 +166,7 @@ var/obj/item/implant/uplink/starting/new_implant = new(traitor_mob) new_implant.implant(traitor_mob, null, silent = TRUE) if(!silent) - to_chat(traitor_mob, span_boldnotice("Your Syndicate Uplink has been cunningly implanted in you, for a small TC fee. Simply trigger the uplink to access it.")) + to_chat(traitor_mob, span_boldnotice("Your Symphionia Uplink has been cunningly implanted in you, for a small TC fee. Simply trigger the uplink to access it.")) add_memory(/datum/memory/key/traitor_uplink/implant, uplink_loc = "implant") return new_implant diff --git a/code/datums/mocking/client.dm b/code/datums/mocking/client.dm index 8e09883ae21770..dc1db213f34beb 100644 --- a/code/datums/mocking/client.dm +++ b/code/datums/mocking/client.dm @@ -27,14 +27,24 @@ var/tgui_say var/typing_indicators +/datum/client_interface/New() + ..() + var/static/mock_client_uid = 0 + mock_client_uid++ + + src.key = "[key]_[mock_client_uid]" + ckey = ckey(key) + +#ifdef UNIT_TESTS // otherwise this shit can leak into production servers which is drather bad + GLOB.directory[ckey] = src +#endif + +/datum/client_interface/Destroy(force) + GLOB.directory -= ckey + return ..() + /datum/client_interface/proc/IsByondMember() return FALSE -/datum/client_interface/New(key) - ..() - if(key) - src.key = key - ckey = ckey(key) - /datum/client_interface/proc/set_macros() return diff --git a/code/datums/mood.dm b/code/datums/mood.dm index 76f08641ecb2af..d8e7a1bbf9b382 100644 --- a/code/datums/mood.dm +++ b/code/datums/mood.dm @@ -67,7 +67,7 @@ mob_parent = null -/datum/mood/Destroy(force, ...) +/datum/mood/Destroy(force) STOP_PROCESSING(SSmood, src) QDEL_LIST_ASSOC_VAL(mood_events) return ..() @@ -267,12 +267,12 @@ mood_screen_object.color = "#f15d36" if (!conflicting_moodies.len) // theres no special icons, use the normal icon states - //SKYRAT EDIT ADDITION BEGIN - ALEXITHYMIA + //NOVA EDIT ADDITION BEGIN - ALEXITHYMIA if(HAS_TRAIT(mob_parent, TRAIT_MOOD_NOEXAMINE)) mood_screen_object.icon_state = "mood5" mood_screen_object.color = "#4b96c4" return - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END mood_screen_object.icon_state = "mood[mood_level]" return @@ -331,7 +331,7 @@ if(SANITY_INSANE to SANITY_CRAZY) msg += "[span_boldwarning("AHAHAHAHAHAHAHAHAHAH!!")]\n" */ - //SKYRAT EDIT CHANGE BEGIN - ALEXITHYMIA + //NOVA EDIT CHANGE BEGIN - ALEXITHYMIA if(!HAS_TRAIT(user, TRAIT_MOOD_NOEXAMINE)) switch(sanity) if(SANITY_GREAT to INFINITY) @@ -348,7 +348,7 @@ msg += "[span_boldwarning("AHAHAHAHAHAHAHAHAHAH!!")]\n" else msg += span_notice("I don't really know.") - //SKYRAT EDIT CHANGE END + //NOVA EDIT CHANGE END msg += span_notice("My current mood: ") //Short term //ORIGINAL @@ -373,7 +373,7 @@ if(MOOD_LEVEL_HAPPY4) msg += "[span_boldnicegreen("I love life!")]\n" */ - //SKYRAT EDIT CHANGE BEGIN - ALEXITHYMIA + //NOVA EDIT CHANGE BEGIN - ALEXITHYMIA if(!HAS_TRAIT(user, TRAIT_MOOD_NOEXAMINE)) switch(mood_level) if(MOOD_LEVEL_SAD4) @@ -396,10 +396,10 @@ msg += "[span_boldnicegreen("I love life!")]\n" else msg += "[span_notice("No clue.")]\n" - //SKYRAT EDIT CHANGE END + //NOVA EDIT CHANGE END msg += "[span_notice("Moodlets:")]\n"//All moodlets //if(mood_events.len) //ORIGINAL - if(mood_events.len && !HAS_TRAIT(user, TRAIT_MOOD_NOEXAMINE)) //SKYRAT EDIT CHANGE - ALEXITHYMIA + if(mood_events.len && !HAS_TRAIT(user, TRAIT_MOOD_NOEXAMINE)) //NOVA EDIT CHANGE - ALEXITHYMIA for(var/category in mood_events) var/datum/mood_event/event = mood_events[category] switch(event.mood_change) diff --git a/code/datums/mood_events/eldritch_painting_events.dm b/code/datums/mood_events/eldritch_painting_events.dm new file mode 100644 index 00000000000000..7df89104263bac --- /dev/null +++ b/code/datums/mood_events/eldritch_painting_events.dm @@ -0,0 +1,48 @@ +// These mood events are related to /obj/structure/sign/painting/eldritch +// Names are based on the subtype of painting they belong to + +// Mood applied for ripping the painting +/datum/mood_event/eldritch_painting + description = "YOU, I SHOULD NOT HAVE DONE THAT!!!" + mood_change = -6 + timeout = 3 MINUTES + +/datum/mood_event/eldritch_painting/weeping + description = "HE IS HERE, AND HE WEEPS!" + mood_change = -3 + timeout = 11 SECONDS + +/datum/mood_event/eldritch_painting/weeping_heretic + description = "Oh such arts! They truly inspire me!" + mood_change = 5 + timeout = 3 MINUTES + +/datum/mood_event/eldritch_painting/weeping_withdrawl + description = "My mind is clear from his influence." + mood_change = 1 + timeout = 3 MINUTES + +/datum/mood_event/eldritch_painting/desire_heretic + description = "A part gained, the manus takes and gives. What did it take from me?" + mood_change = -2 + timeout = 3 MINUTES + +/datum/mood_event/eldritch_painting/desire_examine + description = "A hunger kept at bay..." + mood_change = 3 + timeout = 3 MINUTES + +/datum/mood_event/eldritch_painting/heretic_vines + description = "Oh what a lovely flower!" + mood_change = 3 + timeout = 3 MINUTES + +/datum/mood_event/eldritch_painting/rust_examine + description = "The rusted climb can wait..." + mood_change = -2 + timeout = 3 MINUTES + +/datum/mood_event/eldritch_painting/rust_heretic_examine + description = "I must hurry the rusted climb!" + mood_change = 6 + timeout = 3 MINUTES diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index 23a3364adc318c..cc3af071eef379 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -4,7 +4,8 @@ /datum/mood_event/broken_vow //Used for when mimes break their vow of silence description = "I have brought shame upon my name, and betrayed my fellow mimes by breaking our sacred vow..." - mood_change = -8 + mood_change = -4 + timeout = 3 MINUTES /datum/mood_event/on_fire description = "I'M ON FIRE!!!" @@ -439,8 +440,22 @@ description = "I've been here too long! I want to go out and explore space!" mood_change = -3 +/datum/mood_event/moon_insanity + description = "THE MOON JUDGES AND FINDS ME WANTING!!!" + mood_change = -3 + timeout = 5 MINUTES + +/datum/mood_event/amulette_insanity + description = "I sEe THe LiGHt, It mUsT BE stOPPed" + mood_change = -6 + timeout = 5 MINUTES + ///Wizard cheesy grand finale - what everyone but the wizard gets /datum/mood_event/madness_despair description = "UNWORTHY, UNWORTHY, UNWORTHY!!!" mood_change = -200 special_screen_obj = "mood_despair" + +/datum/mood_event/all_nighter + description = "I didn't sleep at all last night. I'm exhausted." + mood_change = -5 diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm index 29b414440e149d..8c760e8c4f813d 100644 --- a/code/datums/mood_events/generic_positive_events.dm +++ b/code/datums/mood_events/generic_positive_events.dm @@ -57,8 +57,11 @@ /datum/mood_event/exercise description = "Working out releases those endorphins!" - mood_change = 2 - timeout = 5 MINUTES + mood_change = 1 + +/datum/mood_event/exercise/add_effects(fitness_level) + mood_change = fitness_level // the more fit you are, the more you like to work out + return ..() /datum/mood_event/pet_animal description = "Animals are adorable! I can't stop petting them!" @@ -182,12 +185,6 @@ mood_change = 6 timeout = 5 MINUTES -/datum/mood_event/pet_borg - description = "I just love my robotic friends!" - mood_change = 3 - timeout = 5 MINUTES - required_job = list(/datum/job/research_director, /datum/job/scientist, /datum/job/roboticist, /datum/job/geneticist) - /datum/mood_event/bottle_flip description = "The bottle landing like that was satisfying." mood_change = 2 @@ -375,7 +372,16 @@ mood_change = 2 timeout = 5 MINUTES +/datum/mood_event/moon_smile + description = "THE MOON SHOWS ME THE TRUTH AND ITS SMILE IS FACED TOWARDS ME!!!" + mood_change = 10 + timeout = 2 MINUTES + ///Wizard cheesy grand finale - what the wizard gets /datum/mood_event/madness_elation description = "Madness truly is the greatest of blessings..." mood_change = 200 + +/datum/mood_event/prophat + description = "This hat fills me with whimsical joy!" + mood_change = 2 diff --git a/code/datums/mood_events/needs_events.dm b/code/datums/mood_events/needs_events.dm index ceee687918e011..dd710554d8d975 100644 --- a/code/datums/mood_events/needs_events.dm +++ b/code/datums/mood_events/needs_events.dm @@ -76,3 +76,47 @@ description = "There's nothing like the feeling of a freshly laundered jumpsuit." mood_change = 2 timeout = 10 MINUTES + +/datum/mood_event/surrounded_by_silicon + description = "I'm surrounded by perfect lifeforms!!" + mood_change = 8 + +/datum/mood_event/around_many_silicon + description = "So many silicon lifeforms near me!" + mood_change = 4 + +/datum/mood_event/around_silicon + description = "The silicon lifeforms near me are absolutely perfect." + mood_change = 2 + +/datum/mood_event/around_organic + description = "The organics near me remind me of the inferiority of flesh." + mood_change = -2 + +/datum/mood_event/around_many_organic + description = "So many disgusting organics!" + mood_change = -4 + +/datum/mood_event/surrounded_by_organic + description = "I'm surrounded by disgusting organics!!" + mood_change = -8 + +/datum/mood_event/completely_robotic + description = "I've abandoned my feeble flesh, my form is perfect!!" + mood_change = 8 + +/datum/mood_event/very_robotic + description = "I'm more robot than organic!" + mood_change = 4 + +/datum/mood_event/balanced_robotic + description = "I'm part machine, part organic." + mood_change = 0 + +/datum/mood_event/very_organic + description = "I hate this feeble and weak flesh!" + mood_change = -4 + +/datum/mood_event/completely_organic + description = "I'm completely organic, this is miserable!!" + mood_change = -8 diff --git a/code/datums/mutations/_mutations.dm b/code/datums/mutations/_mutations.dm index b897c4c81a669b..b33fbdadbf1f59 100644 --- a/code/datums/mutations/_mutations.dm +++ b/code/datums/mutations/_mutations.dm @@ -86,13 +86,19 @@ copy_mutation(copymut) update_valid_chromosome_list() +/datum/mutation/human/Destroy() + power_path = null + dna = null + owner = null + return ..() + /datum/mutation/human/proc/on_acquiring(mob/living/carbon/human/acquirer) if(!acquirer || !istype(acquirer) || acquirer.stat == DEAD || (src in acquirer.dna.mutations)) return TRUE - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION if(acquirer.has_borer()) to_chat(acquirer, span_warning("Something inside holds dearly to your humanity!")) - // SKYRAT EDIT END + // NOVA EDIT END if(species_allowed && !species_allowed.Find(acquirer.dna.species.id)) return TRUE if(health_req && acquirer.health < health_req) @@ -141,11 +147,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 @@ -177,7 +178,7 @@ * returns an instance of a power if modification was complete */ /datum/mutation/human/proc/modify() - if(modified || !power_path || !owner) + if(modified || !power_path || QDELETED(owner)) return var/datum/action/cooldown/modified_power = locate(power_path) in owner.actions if(!modified_power) diff --git a/code/datums/mutations/antenna.dm b/code/datums/mutations/antenna.dm index b71f66c0fa6859..80edceea1e5ed7 100644 --- a/code/datums/mutations/antenna.dm +++ b/code/datums/mutations/antenna.dm @@ -11,7 +11,7 @@ /obj/item/implant/radio/antenna name = "internal antenna organ" desc = "The internal organ part of the antenna. Science has not yet given it a good name." - icon = 'icons/obj/radio.dmi'//maybe make a unique sprite later. not important + icon = 'icons/obj/devices/voice.dmi'//maybe make a unique sprite later. not important icon_state = "walkietalkie" /obj/item/implant/radio/antenna/Initialize(mapload) diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm index 24aa41321f3690..5ba64d3116813a 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -119,24 +119,24 @@ /datum/mutation/human/dwarfism/on_acquiring(mob/living/carbon/human/owner) if(..()) return - // SKYRAT EDIT BEGIN + // NOVA EDIT BEGIN if(owner.dna.features["body_size"] < 1) to_chat(owner, "You feel your body shrinking even further, but your organs aren't! Uh oh!") owner.adjustBruteLoss(25) return - // SKYRAT EDIT END + // NOVA EDIT END ADD_TRAIT(owner, TRAIT_DWARF, GENETIC_MUTATION) owner.visible_message(span_danger("[owner] suddenly shrinks!"), span_notice("Everything around you seems to grow..")) /datum/mutation/human/dwarfism/on_losing(mob/living/carbon/human/owner) if(..()) return - // SKYRAT EDIT BEGIN + // NOVA EDIT BEGIN if(owner.dna.features["body_size"] < 1) to_chat(owner, "You feel relief as your organs cease to strain against your insides.") REMOVE_TRAIT(owner, TRAIT_DWARF, GENETIC_MUTATION) return - // SKYRAT EDIT END + // NOVA EDIT END REMOVE_TRAIT(owner, TRAIT_DWARF, GENETIC_MUTATION) owner.visible_message(span_danger("[owner] suddenly grows!"), span_notice("Everything around you seems to shrink..")) @@ -220,7 +220,7 @@ . = owner.monkeyize() /datum/mutation/human/race/on_losing(mob/living/carbon/human/owner) - if(owner && owner.stat != DEAD && (owner.dna.mutations.Remove(src)) && ismonkey(owner)) + if(!QDELETED(owner) && owner.stat != DEAD && (owner.dna.mutations.Remove(src)) && ismonkey(owner)) owner.fully_replace_character_name(null, original_name) . = owner.humanize(original_species) @@ -391,12 +391,12 @@ /datum/mutation/human/gigantism/on_acquiring(mob/living/carbon/human/owner) if(..()) return - // SKYRAT EDIT BEGIN + // NOVA EDIT BEGIN if(owner.dna.features["body_size"] > 1) to_chat(owner, "You feel your body expanding even further, but it feels like your bones are expanding too much!") owner.adjustBruteLoss(25) // take some DAMAGE return - // SKYRAT EDIT END + // NOVA EDIT END ADD_TRAIT(owner, TRAIT_GIANT, GENETIC_MUTATION) owner.update_transform(1.25) owner.visible_message(span_danger("[owner] suddenly grows!"), span_notice("Everything around you seems to shrink..")) @@ -404,12 +404,12 @@ /datum/mutation/human/gigantism/on_losing(mob/living/carbon/human/owner) if(..()) return - // SKYRAT EDIT BEGIN + // NOVA EDIT BEGIN if(owner.dna.features["body_size"] > 1) to_chat(owner, "You feel relief as your bones cease their growth spurt.") REMOVE_TRAIT(owner, TRAIT_GIANT, GENETIC_MUTATION) return - // SKYRAT EDIT END + // NOVA EDIT END 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..")) @@ -524,14 +524,16 @@ var/obj/item/organ/internal/brain/brain = owner.get_organ_slot(ORGAN_SLOT_BRAIN) if(brain) + brain.Remove(owner, special = TRUE) brain.zone = BODY_ZONE_CHEST + brain.Insert(owner, special = TRUE) var/obj/item/bodypart/head/head = owner.get_bodypart(BODY_ZONE_HEAD) if(head) owner.visible_message(span_warning("[owner]'s head splatters with a sickening crunch!"), ignored_mobs = list(owner)) new /obj/effect/gibspawner/generic(get_turf(owner), owner) - head.dismember(dam_type = BRUTE, silent = TRUE) head.drop_organs() + head.dismember(dam_type = BRUTE, silent = TRUE) qdel(head) RegisterSignal(owner, COMSIG_ATTEMPT_CARBON_ATTACH_LIMB, PROC_REF(abort_attachment)) @@ -539,14 +541,18 @@ . = ..() if(.) return TRUE - var/obj/item/organ/internal/brain/brain = owner.get_organ_slot(ORGAN_SLOT_BRAIN) - if(brain) //so this doesn't instantly kill you. we could delete the brain, but it lets people cure brain issues they /really/ shouldn't be - brain.zone = initial(brain.zone) + UnregisterSignal(owner, COMSIG_ATTEMPT_CARBON_ATTACH_LIMB) var/successful = owner.regenerate_limb(BODY_ZONE_HEAD) if(!successful) stack_trace("HARS mutation head regeneration failed! (usually caused by headless syndrome having a head)") return TRUE + var/obj/item/organ/internal/brain/brain = owner.get_organ_slot(ORGAN_SLOT_BRAIN) + if(brain) + brain.Remove(owner, special = TRUE) + brain.zone = initial(brain.zone) + brain.Insert(owner, special = TRUE) + owner.dna.species.regenerate_organs(owner, replace_current = FALSE, excluded_zones = list(BODY_ZONE_CHEST)) //replace_current needs to be FALSE to prevent weird adding and removing mutation healing owner.apply_damage(damage = 50, damagetype = BRUTE, def_zone = BODY_ZONE_HEAD) //and this to DISCOURAGE organ farming, or at least not make it free. owner.visible_message(span_warning("[owner]'s head returns with a sickening crunch!"), span_warning("Your head regrows with a sickening crack! Ouch.")) diff --git a/code/datums/mutations/chameleon.dm b/code/datums/mutations/chameleon.dm index 4ec73f92a4bee2..b9b415efab6f65 100644 --- a/code/datums/mutations/chameleon.dm +++ b/code/datums/mutations/chameleon.dm @@ -12,20 +12,20 @@ /datum/mutation/human/chameleon/on_acquiring(mob/living/carbon/human/owner) if(..()) return - /// SKYRAT EDIT BEGIN + /// NOVA EDIT BEGIN if(HAS_TRAIT(owner, TRAIT_CHAMELEON_SKIN)) return ADD_TRAIT(owner, TRAIT_CHAMELEON_SKIN, GENETIC_MUTATION) - /// SKYRAT EDIT END + /// NOVA EDIT END owner.alpha = CHAMELEON_MUTATION_DEFAULT_TRANSPARENCY RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) RegisterSignal(owner, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(on_attack_hand)) /datum/mutation/human/chameleon/on_life(seconds_per_tick, times_fired) - /// SKYRAT EDIT BEGIN + /// NOVA EDIT BEGIN if(HAS_TRAIT(owner, TRAIT_CHAMELEON_SKIN)) owner.alpha = max(owner.alpha - (12.5 * (GET_MUTATION_POWER(src)) * seconds_per_tick), 0) - /// SKYRAT EDIT END + /// NOVA EDIT END /** * Resets the alpha of the host to the chameleon default if they move. @@ -40,12 +40,12 @@ /datum/mutation/human/chameleon/proc/on_move(atom/movable/source, atom/old_loc, move_dir, forced, list/atom/old_locs) SIGNAL_HANDLER - /// SKYRAT EDIT BEGIN + /// NOVA EDIT BEGIN if(HAS_TRAIT(owner, TRAIT_CHAMELEON_SKIN)) owner.alpha = CHAMELEON_MUTATION_DEFAULT_TRANSPARENCY else owner.alpha = 255 - /// SKYRAT EDIT END + /// NOVA EDIT END /** * Resets the alpha of the host if they click on something nearby. @@ -62,18 +62,18 @@ if(!proximity) //stops tk from breaking chameleon return - /// SKYRAT EDIT BEGIN + /// NOVA EDIT BEGIN if(HAS_TRAIT(owner, TRAIT_CHAMELEON_SKIN)) owner.alpha = CHAMELEON_MUTATION_DEFAULT_TRANSPARENCY else owner.alpha = 255 - /// SKYRAT EDIT END + /// NOVA EDIT END /datum/mutation/human/chameleon/on_losing(mob/living/carbon/human/owner) if(..()) return owner.alpha = 255 UnregisterSignal(owner, list(COMSIG_MOVABLE_MOVED, COMSIG_LIVING_UNARMED_ATTACK)) - /// SKYRAT EDIT BEGIN + /// NOVA EDIT BEGIN REMOVE_TRAIT(owner, TRAIT_CHAMELEON_SKIN, GENETIC_MUTATION) - /// SKYRAT EDIT END + /// NOVA EDIT END diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm index 1049e5660afeab..5530a3b83113bc 100644 --- a/code/datums/mutations/hulk.dm +++ b/code/datums/mutations/hulk.dm @@ -82,6 +82,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(..()) @@ -129,7 +130,7 @@ if(ishuman(possible_throwable)) var/mob/living/carbon/human/human_throwable = possible_throwable //if(human_throwable.wear_suit && (human_throwable.wear_suit.flags_inv & HIDEJUMPSUIT)) // ORIGINAL - if(human_throwable.wear_suit && (human_throwable.wear_suit.flags_inv & HIDETAIL)) // SKYRAT EDIT CHANGE + if(human_throwable.wear_suit && (human_throwable.wear_suit.flags_inv & HIDETAIL)) // NOVA EDIT CHANGE to_chat(user, span_warning("You can't reach [human_throwable]'s tail through [human_throwable.p_their()] [human_throwable.wear_suit.name]!")) return diff --git a/code/datums/mutations/sight.dm b/code/datums/mutations/sight.dm index 69514ded90ffcd..be2ee57b5f35c8 100644 --- a/code/datums/mutations/sight.dm +++ b/code/datums/mutations/sight.dm @@ -41,7 +41,7 @@ text_gain_indication = "You can see the heat rising off of your skin..." text_lose_indication = "You can no longer see the heat rising off of your skin..." instability = 25 - locked = TRUE //SKYRAT EDIT ADDITION + locked = TRUE //NOVA EDIT ADDITION synchronizer_coeff = 1 power_coeff = 1 energy_coeff = 1 diff --git a/code/datums/mutations/telekinesis.dm b/code/datums/mutations/telekinesis.dm index 956b266dd6570f..d5c719ece84aba 100644 --- a/code/datums/mutations/telekinesis.dm +++ b/code/datums/mutations/telekinesis.dm @@ -13,7 +13,7 @@ /datum/mutation/human/telekinesis/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut) ..() if(!(type in visual_indicators)) - visual_indicators[type] = list(mutable_appearance('modular_skyrat/master_files/icons/effects/tele_effects.dmi', "telekinesishead", -MUTATIONS_LAYER)) //SKYRAT EDIT, Old icon location: "icons/effects/genetics.dmi" + visual_indicators[type] = list(mutable_appearance('modular_nova/master_files/icons/effects/tele_effects.dmi', "telekinesishead", -MUTATIONS_LAYER)) //NOVA EDIT, Old icon location: "icons/effects/genetics.dmi" //visual_indicators[type] = list(mutable_appearance('icons/mob/effects/genetics.dmi', "telekinesishead", -MUTATIONS_LAYER)) //non Skyrat version /datum/mutation/human/telekinesis/on_acquiring(mob/living/carbon/human/H) diff --git a/code/datums/mutations/tongue_spike.dm b/code/datums/mutations/tongue_spike.dm index 5d210c344b5169..e6249041250b80 100644 --- a/code/datums/mutations/tongue_spike.dm +++ b/code/datums/mutations/tongue_spike.dm @@ -73,6 +73,7 @@ unembedded() /obj/item/hardened_spike/embedded(atom/target) + . = ..() if(isbodypart(target)) missed = FALSE @@ -121,6 +122,7 @@ var/embedded_once_alread = FALSE /obj/item/hardened_spike/chem/embedded(mob/living/carbon/human/embedded_mob) + . = ..() if(embedded_once_alread) return embedded_once_alread = TRUE @@ -173,7 +175,7 @@ return FALSE to_chat(transferred, span_warning("You feel a tiny prick!")) - transferer.reagents.trans_to(transferred, transferer.reagents.total_volume, 1, 1, 0, transferred_by = transferer) + transferer.reagents.trans_to(transferred, transferer.reagents.total_volume, transferred_by = transferer) var/obj/item/hardened_spike/chem/chem_spike = target var/obj/item/bodypart/spike_location = chem_spike.check_embedded() diff --git a/code/datums/mutations/void_magnet.dm b/code/datums/mutations/void_magnet.dm index d6636b0b6306ed..48f04eda636a7e 100644 --- a/code/datums/mutations/void_magnet.dm +++ b/code/datums/mutations/void_magnet.dm @@ -60,7 +60,7 @@ /datum/action/cooldown/spell/void/cursed/proc/on_life(mob/living/source, seconds_per_tick, times_fired) SIGNAL_HANDLER - if(!isliving(source) || IS_IN_STASIS(source) || source.stat == DEAD || HAS_TRAIT(source, TRAIT_NO_TRANSFORM)) + if(!isliving(source) || HAS_TRAIT(source, TRAIT_STASIS) || source.stat == DEAD || HAS_TRAIT(source, TRAIT_NO_TRANSFORM)) return if(!is_valid_target(source)) diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index 784e7a1b06fba6..6289ea13f38ebb 100644 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -221,10 +221,10 @@ user.socks = initial(socks.name) - // SKYRAT EDIT ADDITION START - Underwear and bra split + // NOVA EDIT ADDITION START - Underwear and bra split if(bra) user.bra = initial(bra.name) - // SKYRAT EDIT END + // NOVA EDIT END if(accessory) var/obj/item/clothing/under/U = user.w_uniform @@ -342,7 +342,7 @@ item.add_fingerprint(user, ignoregloves = TRUE) return TRUE -//SKYRAT EDIT +//NOVA EDIT /** * Copies the outfit from a human to itself. **/ @@ -374,7 +374,7 @@ if(H.belt) belt = H.belt.type return TRUE -// SKYRAT EDIT END +// NOVA EDIT END /// Return a list of all the types that are required to disguise as this outfit type /datum/outfit/proc/get_chameleon_disguise_info() @@ -416,7 +416,7 @@ for(var/skillpath in skillchips) preload += skillpath - preload -= typesof(/obj/item/clothing/under/color/random) // SKYRAT EDIT - Don't preload random jumpsuit spawners that delete themselves + preload -= typesof(/obj/item/clothing/under/color/random) // NOVA EDIT - Don't preload random jumpsuit spawners that delete themselves return preload @@ -532,5 +532,11 @@ /datum/outfit/vv_do_topic(list/href_list) . = ..() + + if(!.) + return + if(href_list[VV_HK_TO_OUTFIT_EDITOR]) + if(!check_rights(NONE)) + return usr.client.open_outfit_editor(src) diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm index 6175dd157c43dd..b560a67aa6c909 100644 --- a/code/datums/progressbar.dm +++ b/code/datums/progressbar.dm @@ -80,9 +80,7 @@ clean_user_client() bar_loc = null - - if(bar) - QDEL_NULL(bar) + bar = null return ..() diff --git a/code/datums/proximity_monitor/fields/projectile_dampener.dm b/code/datums/proximity_monitor/fields/projectile_dampener.dm index 7f625d645244c9..705ac6bfacee8c 100644 --- a/code/datums/proximity_monitor/fields/projectile_dampener.dm +++ b/code/datums/proximity_monitor/fields/projectile_dampener.dm @@ -35,7 +35,6 @@ for(var/obj/projectile/projectile in tracked) if(!(projectile in ranged) || !projectile.loc) release_projectile(projectile) - ..() /datum/proximity_monitor/advanced/projectile_dampener/setup_edge_turf(turf/target) . = ..() diff --git a/code/datums/proximity_monitor/fields/timestop.dm b/code/datums/proximity_monitor/fields/timestop.dm index 7fad290fc74d27..c48759c1debd6a 100644 --- a/code/datums/proximity_monitor/fields/timestop.dm +++ b/code/datums/proximity_monitor/fields/timestop.dm @@ -36,7 +36,7 @@ for(var/mob/living/to_check in GLOB.player_list) if(HAS_TRAIT(to_check, TRAIT_TIME_STOP_IMMUNE)) immune[to_check] = TRUE - for(var/mob/living/simple_animal/hostile/guardian/stand in GLOB.parasites) + for(var/mob/living/basic/guardian/stand in GLOB.parasites) if(stand.summoner && HAS_TRAIT(stand.summoner, TRAIT_TIME_STOP_IMMUNE)) //It would only make sense that a person's stand would also be immune. immune[stand] = TRUE if(start) @@ -238,7 +238,7 @@ //you don't look quite right, is something the matter? /datum/proximity_monitor/advanced/timestop/proc/into_the_negative_zone(atom/A) - A.add_atom_colour(list(-1,0,0,0, 0,-1,0,0, 0,0,-1,0, 0,0,0,1, 1,1,1,0), TEMPORARY_COLOUR_PRIORITY) + A.add_atom_colour(COLOR_MATRIX_INVERT, TEMPORARY_COLOUR_PRIORITY) //let's put some colour back into your cheeks /datum/proximity_monitor/advanced/timestop/proc/escape_the_negative_zone(atom/A) diff --git a/code/datums/quirks/_quirk.dm b/code/datums/quirks/_quirk.dm index 873ffd95fbd955..6fbb583628f7e1 100644 --- a/code/datums/quirks/_quirk.dm +++ b/code/datums/quirks/_quirk.dm @@ -28,7 +28,7 @@ var/abstract_parent_type = /datum/quirk /// The icon to show in the preferences menu. /// This references a tgui icon, so it can be FontAwesome or a tgfont (with a tg- prefix). - var/icon = "bug" //SKYRAT EDIT CHANGE + var/icon = "bug" //NOVA EDIT CHANGE /// A list of items people can receive from mail who have this quirk enabled /// The base weight for the each quirk's mail goodies list to be selected is 5 /// then the item selected is determined by pick(selected_quirk.mail_goodies) @@ -204,7 +204,7 @@ /mob/living/proc/get_quirk_string(medical = FALSE, category = CAT_QUIRK_ALL, from_scan = FALSE) var/list/dat = list() - // SKYRAT EDIT ADDITION START + // NOVA EDIT ADDITION START // The health analyzer will first check if the target is a changeling, and if they are, load the quirks of the person they're disguising as. var/target_quirks = quirks @@ -212,9 +212,9 @@ if(target_changeling) target_quirks = target_changeling.current_profile.quirks - // SKYRAT EDIT END + // NOVA EDIT END - for(var/datum/quirk/candidate as anything in target_quirks) // SKYRAT EDIT CHANGE - ORIGINAL : for(var/datum/quirk/candidate as anything in quirks) + for(var/datum/quirk/candidate as anything in target_quirks) // NOVA EDIT CHANGE - ORIGINAL : for(var/datum/quirk/candidate as anything in quirks) if(from_scan & candidate.quirk_flags & QUIRK_HIDE_FROM_SCAN) continue switch(category) diff --git a/code/datums/quirks/_quirk_constant_data.dm b/code/datums/quirks/_quirk_constant_data.dm new file mode 100644 index 00000000000000..1984acecec06ea --- /dev/null +++ b/code/datums/quirks/_quirk_constant_data.dm @@ -0,0 +1,72 @@ +GLOBAL_LIST_INIT_TYPED(all_quirk_constant_data, /datum/quirk_constant_data, generate_quirk_constant_data()) + +/// Constructs [GLOB.all_quirk_constant_data] by iterating through a typecache of pregen data, ignoring abstract types, and instantiating the rest. +/proc/generate_quirk_constant_data() + RETURN_TYPE(/list/datum/quirk_constant_data) + + var/list/datum/quirk_constant_data/all_constant_data = list() + + for (var/datum/quirk_constant_data/iterated_path as anything in typecacheof(path = /datum/quirk_constant_data, ignore_root_path = TRUE)) + if (initial(iterated_path.abstract_type) == iterated_path) + continue + + if (!isnull(all_constant_data[initial(iterated_path.associated_typepath)])) + stack_trace("pre-existing pregen data for [initial(iterated_path.associated_typepath)] when [iterated_path] was being considered: [all_constant_data[initial(iterated_path.associated_typepath)]]. \ + this is definitely a bug, and is probably because one of the two pregen data have the wrong quirk typepath defined. [iterated_path] will not be instantiated") + + continue + + var/datum/quirk_constant_data/pregen_data = new iterated_path + all_constant_data[pregen_data.associated_typepath] = pregen_data + + return all_constant_data + +/// A singleton datum representing constant data and procs used by quirks. +/datum/quirk_constant_data + /// Abstract in OOP terms. If this is our type, we will not be instantiated. + var/abstract_type = /datum/quirk_constant_data + + /// The typepath of the quirk we will be associated with in the global list. This is what we represent. + var/datum/quirk/associated_typepath + + /// A lazylist of preference datum typepaths. Any character pref put in here will be rendered in the quirks page under a dropdown. + var/list/datum/preference/customization_options + +/datum/quirk_constant_data/New() + . = ..() + + ASSERT(abstract_type != type && !isnull(associated_typepath), "associated_typepath null - please set it! occured on: [src.type]") + +/// Returns a list of savefile_keys derived from the preference typepaths in [customization_options]. Used in quirks middleware to supply the preferences to render. +/datum/quirk_constant_data/proc/get_customization_data() + RETURN_TYPE(/list) + + var/list/customization_data = list() + + for (var/datum/preference/pref_type as anything in customization_options) + var/datum/preference/pref_instance = GLOB.preference_entries[pref_type] + if (isnull(pref_instance)) + stack_trace("get_customization_data was called before instantiation of [pref_type]!") + continue // just in case its a fluke and its only this one thats not instantiated, we'll check the other pref entries + + customization_data += pref_instance.savefile_key + + return customization_data + +/// Is this quirk customizable? If true, a button will appear within the quirk's description box in the quirks page, and upon clicking it, +/// will open a customization menu for the quirk. +/datum/quirk_constant_data/proc/is_customizable() + return LAZYLEN(customization_options) > 0 + +/datum/quirk_constant_data/Destroy(force) + var/error_message = "[src], a singleton quirk constant data instance, was destroyed! This should not happen!" + if (force) + error_message += " NOTE: This Destroy() was called with force == TRUE. This instance will be deleted and replaced with a new one." + stack_trace(error_message) + + if (!force) + return QDEL_HINT_LETMELIVE + + . = ..() + + GLOB.all_quirk_constant_data[associated_typepath] = new src.type //recover diff --git a/code/datums/quirks/negative_quirks/all_nighter.dm b/code/datums/quirks/negative_quirks/all_nighter.dm new file mode 100644 index 00000000000000..798add0539f240 --- /dev/null +++ b/code/datums/quirks/negative_quirks/all_nighter.dm @@ -0,0 +1,117 @@ +#define SLEEP_BANK_MULTIPLIER 10 + +/datum/quirk/all_nighter + name = "All Nighter" + desc = "You didn't get any sleep last night, and people can tell! You'll constantly be in a bad mood and will have a tendency to sleep longer. Stimulants or a nap might help, though." + icon = FA_ICON_BED + value = -4 + mob_trait = TRAIT_HEAVY_SLEEPER + gain_text = span_danger("You feel exhausted.") + lose_text = span_notice("You feel well rested.") + medical_record_text = "Patient appears to be suffering from sleep deprivation." + hardcore_value = 2 + quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE|QUIRK_MOODLET_BASED|QUIRK_PROCESSES + + mail_goodies = list( + /obj/item/clothing/glasses/blindfold, + /obj/item/bedsheet/random, + /obj/item/clothing/under/misc/pj/red, + /obj/item/clothing/head/costume/nightcap/red, + /obj/item/clothing/under/misc/pj/blue, + /obj/item/clothing/head/costume/nightcap/blue, + /obj/item/pillow/random, + ) + + ///a list of all the reagents which alleviate the negative moodlet + var/list/stimulants = list( + /datum/reagent/medicine/stimulants, + /datum/reagent/drug/methamphetamine, + /datum/reagent/drug/bath_salts, + /datum/reagent/drug/aranesp, + /datum/reagent/drug/pumpup, + /datum/reagent/drug/blastoff, + /datum/reagent/consumable/coffee, + /datum/reagent/consumable/tea, + /datum/reagent/consumable/volt_energy, + /datum/reagent/consumable/monkey_energy + ) + ///essentially our "sleep bank". sleeping charges it up and its drained while awake + var/five_more_minutes = 0 + ///the overlay we put over the eyes + var/datum/bodypart_overlay/simple/bags/bodypart_overlay + + +///adds the corresponding moodlet and visual effects +/datum/quirk/all_nighter/add(client/client_source) + quirk_holder.add_mood_event("all_nighter", /datum/mood_event/all_nighter) + add_bags() + +///removes the corresponding moodlet and visual effects +/datum/quirk/all_nighter/remove(client/client_source) + quirk_holder.clear_mood_event("all_nighter", /datum/mood_event/all_nighter) + remove_bags() + +///adds the bag overlay +/datum/quirk/all_nighter/proc/add_bags(client/client_source) + var/mob/living/carbon/human/sleepy_head = quirk_holder + var/obj/item/bodypart/head/face = sleepy_head.get_bodypart(BODY_ZONE_HEAD) + bodypart_overlay = new() //creates our overlay + face.add_bodypart_overlay(bodypart_overlay) + sleepy_head.update_body_parts() //make sure to update icon + +///removes the bag overlay +/datum/quirk/all_nighter/proc/remove_bags(client/client_source) + var/mob/living/carbon/human/sleepy_head = quirk_holder + var/obj/item/bodypart/head/face = sleepy_head.get_bodypart(BODY_ZONE_HEAD) + //our overlay is stored as a datum var, so referencing it is easy + face.remove_bodypart_overlay(bodypart_overlay) + QDEL_NULL(bodypart_overlay) + sleepy_head.update_body_parts() + +/** +*Here we actively handle our moodlet & eye bags, adding/removing them as necessary +* +**Logic: +**Every second spent sleeping adds to the "sleep bank" with a multiplier of SLEEP_BANK_MULTIPLIER +**Every waking second drains the sleep bank until empty +**An empty sleep bank means you have bags beneath your eyes +**An empty sleep bank AND a lack of stimulants means you have the negative moodlet +* +**Variables: +**happy_camper - FALSE if we should have the negative moodlet +**beauty_sleep - FALSE if we should have bags +*/ +/datum/quirk/all_nighter/process(seconds_per_tick) + var/happy_camper = TRUE + var/beauty_sleep = TRUE + var/stims_present = FALSE + + if(quirk_holder.IsSleeping()) + five_more_minutes += SLEEP_BANK_MULTIPLIER * seconds_per_tick + else if(five_more_minutes > 0) + five_more_minutes -= seconds_per_tick + else + beauty_sleep = FALSE //no sleep means eye bags + + for(var/stimulant in stimulants) + if(quirk_holder.has_reagent(stimulant)) //checking for stims + stims_present = TRUE + break + if(!stims_present) //no stims and no sleep means an unhappy camper + happy_camper = FALSE + + //adjusts the mood event accordingly + if(("all_nighter" in quirk_holder.mob_mood?.mood_events) && happy_camper) + quirk_holder.clear_mood_event("all_nighter", /datum/mood_event/all_nighter) + if(!("all_nighter" in quirk_holder.mob_mood?.mood_events) && !happy_camper) + quirk_holder.add_mood_event("all_nighter", /datum/mood_event/all_nighter) + to_chat(quirk_holder, span_danger("You start feeling tired again.")) + + //adjusts bag overlay accordingly + if(bodypart_overlay && beauty_sleep) + remove_bags() + if(!bodypart_overlay && !beauty_sleep) + add_bags() + + +#undef SLEEP_BANK_MULTIPLIER diff --git a/code/datums/quirks/negative_quirks/allergic.dm b/code/datums/quirks/negative_quirks/allergic.dm index d6a510f62b6a23..64b4c560bde969 100644 --- a/code/datums/quirks/negative_quirks/allergic.dm +++ b/code/datums/quirks/negative_quirks/allergic.dm @@ -48,7 +48,7 @@ if(!iscarbon(quirk_holder)) return - if(IS_IN_STASIS(quirk_holder)) + if(HAS_TRAIT(quirk_holder, TRAIT_STASIS)) return if(quirk_holder.stat == DEAD) diff --git a/code/datums/quirks/negative_quirks/body_purist.dm b/code/datums/quirks/negative_quirks/body_purist.dm index 6350a7108820ba..76221df7a5c620 100644 --- a/code/datums/quirks/negative_quirks/body_purist.dm +++ b/code/datums/quirks/negative_quirks/body_purist.dm @@ -62,7 +62,7 @@ cybernetics_level++ update_mood() -/datum/quirk/body_purist/proc/on_limb_lose(datum/source, obj/item/bodypart/old_limb, special) +/datum/quirk/body_purist/proc/on_limb_lose(datum/source, obj/item/bodypart/old_limb, special, dismembered) SIGNAL_HANDLER if(IS_ROBOTIC_LIMB(old_limb)) cybernetics_level-- diff --git a/code/datums/quirks/negative_quirks/claustrophobia.dm b/code/datums/quirks/negative_quirks/claustrophobia.dm index e0207d227dd3c0..99442f13ffeefa 100644 --- a/code/datums/quirks/negative_quirks/claustrophobia.dm +++ b/code/datums/quirks/negative_quirks/claustrophobia.dm @@ -1,6 +1,6 @@ /datum/quirk/claustrophobia name = "Claustrophobia" - desc = "You are terrified of small spaces and certain jolly figures. If you are placed inside any container, locker, or machinery, a panic attack sets in and you struggle to breathe." + desc = "You are terrified of small spaces. If you are placed inside any container, locker, or machinery, a panic attack sets in and you struggle to breathe." // NOVA EDIT CHANGE - ORIGINAL: desc = "You are terrified of small spaces and certain jolly figures. If you are placed inside any container, locker, or machinery, a panic attack sets in and you struggle to breathe." icon = FA_ICON_BOX_OPEN value = -4 medical_record_text = "Patient demonstrates a fear of tight spaces." @@ -15,15 +15,17 @@ if(quirk_holder.stat != CONSCIOUS || quirk_holder.IsSleeping() || quirk_holder.IsUnconscious()) return - if(HAS_TRAIT(quirk_holder, TRAIT_FEARLESS)) + if(HAS_TRAIT(quirk_holder, TRAIT_MIND_TEMPORARILY_GONE) || HAS_TRAIT(quirk_holder, TRAIT_FEARLESS)) return var/nick_spotted = FALSE +/* NOVA EDIT REMOVAL START for(var/mob/living/carbon/human/possible_claus in view(5, quirk_holder)) if(evaluate_jolly_levels(possible_claus)) nick_spotted = TRUE break +NOVA EDIT REMOVAL END */ if(!nick_spotted && isturf(quirk_holder.loc)) quirk_holder.clear_mood_event("claustrophobia") diff --git a/code/datums/quirks/negative_quirks/cursed.dm b/code/datums/quirks/negative_quirks/cursed.dm index 4b99ff850b843b..638c8ae97a8f9f 100644 --- a/code/datums/quirks/negative_quirks/cursed.dm +++ b/code/datums/quirks/negative_quirks/cursed.dm @@ -1,5 +1,5 @@ /* -// SKYRAT EDIT REMOVAL +// NOVA EDIT REMOVAL /datum/quirk/cursed name = "Cursed" desc = "You are cursed with bad luck. You are much more likely to suffer from accidents and mishaps. When it rains, it pours." @@ -14,4 +14,4 @@ /datum/quirk/cursed/add(client/client_source) quirk_holder.AddComponent(/datum/component/omen/quirk) */ -// SKYRAT EDIT REMOVAL END +// NOVA EDIT REMOVAL END diff --git a/code/datums/quirks/negative_quirks/family_heirloom.dm b/code/datums/quirks/negative_quirks/family_heirloom.dm index 0fd08c68f21785..235913120a3fb1 100644 --- a/code/datums/quirks/negative_quirks/family_heirloom.dm +++ b/code/datums/quirks/negative_quirks/family_heirloom.dm @@ -8,7 +8,7 @@ quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_PROCESSES|QUIRK_MOODLET_BASED /// A weak reference to our heirloom. var/datum/weakref/heirloom - mail_goodies = list(/obj/item/storage/secure/briefcase) + mail_goodies = list(/obj/item/storage/briefcase/secure) /datum/quirk/item_quirk/family_heirloom/add_unique(client/client_source) var/mob/living/carbon/human/human_holder = quirk_holder diff --git a/code/datums/quirks/negative_quirks/food_allergy.dm b/code/datums/quirks/negative_quirks/food_allergy.dm index c2f4eae4d0ed2a..0b81dece085d15 100644 --- a/code/datums/quirks/negative_quirks/food_allergy.dm +++ b/code/datums/quirks/negative_quirks/food_allergy.dm @@ -25,6 +25,10 @@ GLOBAL_LIST_INIT(possible_food_allergies, list( /// Footype flags that will trigger the allergy var/target_foodtypes = NONE +/datum/quirk_constant_data/food_allergy + associated_typepath = /datum/quirk/item_quirk/food_allergic + customization_options = list(/datum/preference/choiced/food_allergy) + /datum/quirk/item_quirk/food_allergic/add(client/client_source) if(target_foodtypes != NONE) // Already set, don't care return diff --git a/code/datums/quirks/negative_quirks/junkie.dm b/code/datums/quirks/negative_quirks/junkie.dm index 269f6d2d96e31f..2ce29f743c3148 100644 --- a/code/datums/quirks/negative_quirks/junkie.dm +++ b/code/datums/quirks/negative_quirks/junkie.dm @@ -134,7 +134,7 @@ smoker_lungs = /obj/item/organ/internal/lungs/smoker_lungs if(!isnull(smoker_lungs)) smoker_lungs = new smoker_lungs - smoker_lungs.Insert(carbon_holder, special = TRUE, drop_if_replaced = FALSE) + smoker_lungs.Insert(carbon_holder, special = TRUE, movement_flags = DELETE_IF_REPLACED) /datum/quirk/item_quirk/junkie/smoker/process(seconds_per_tick) . = ..() diff --git a/code/datums/quirks/negative_quirks/nearsighted.dm b/code/datums/quirks/negative_quirks/nearsighted.dm index 6a5397b6504597..452971a7ad02cd 100644 --- a/code/datums/quirks/negative_quirks/nearsighted.dm +++ b/code/datums/quirks/negative_quirks/nearsighted.dm @@ -10,6 +10,10 @@ quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE mail_goodies = list(/obj/item/clothing/glasses/regular) // extra pair if orginal one gets broken by somebody mean +/datum/quirk_constant_data/nearsighted + associated_typepath = /datum/quirk/item_quirk/nearsighted + customization_options = list(/datum/preference/choiced/glasses) + /datum/quirk/item_quirk/nearsighted/add_unique(client/client_source) var/glasses_name = client_source?.prefs.read_preference(/datum/preference/choiced/glasses) || "Regular" var/obj/item/clothing/glasses/glasses_type diff --git a/code/datums/quirks/negative_quirks/prosthetic_limb.dm b/code/datums/quirks/negative_quirks/prosthetic_limb.dm index e7ea4d75788f17..eda4217b795d13 100644 --- a/code/datums/quirks/negative_quirks/prosthetic_limb.dm +++ b/code/datums/quirks/negative_quirks/prosthetic_limb.dm @@ -11,6 +11,10 @@ /// the original limb from before the prosthetic was applied var/obj/item/bodypart/old_limb +/datum/quirk_constant_data/prosthetic_limb + associated_typepath = /datum/quirk/prosthetic_limb + customization_options = list(/datum/preference/choiced/prosthetic) + /datum/quirk/prosthetic_limb/add_unique(client/client_source) var/limb_type = GLOB.limb_choice[client_source?.prefs?.read_preference(/datum/preference/choiced/prosthetic)] if(isnull(limb_type)) //Client gone or they chose a random prosthetic @@ -24,7 +28,7 @@ old_limb = human_holder.return_and_replace_bodypart(surplus, special = TRUE) /datum/quirk/prosthetic_limb/post_add() - to_chat(quirk_holder, span_boldannounce("Your [slot_string] has been replaced with a surplus prosthetic. It is fragile and will easily come apart under duress. Additionally, \ + to_chat(quirk_holder, span_boldannounce("Your [slot_string] has been replaced with a surplus prosthetic. It has almost no muscle force, and makes you unhealthier by just having it. Additionally, \ you need to use a welding tool and cables to repair it, instead of sutures and regenerative meshes.")) /datum/quirk/prosthetic_limb/remove() diff --git a/code/datums/quirks/negative_quirks/prosthetic_organ.dm b/code/datums/quirks/negative_quirks/prosthetic_organ.dm index 6330035b5a7219..0fd5061a787e31 100644 --- a/code/datums/quirks/negative_quirks/prosthetic_organ.dm +++ b/code/datums/quirks/negative_quirks/prosthetic_organ.dm @@ -49,7 +49,7 @@ medical_record_text = "During physical examination, patient was found to have a low-budget prosthetic [slot_string]. \ Removal of these organs is known to be dangerous to the patient as well as the practitioner." old_organ = human_holder.get_organ_slot(organ_slot) - if(prosthetic.Insert(human_holder, special = TRUE, drop_if_replaced = TRUE)) + if(prosthetic.Insert(human_holder, special = TRUE)) old_organ.moveToNullspace() STOP_PROCESSING(SSobj, old_organ) diff --git a/code/datums/quirks/negative_quirks/social_anxiety.dm b/code/datums/quirks/negative_quirks/social_anxiety.dm index 3d140bd80a073a..b6916b2dd03843 100644 --- a/code/datums/quirks/negative_quirks/social_anxiety.dm +++ b/code/datums/quirks/negative_quirks/social_anxiety.dm @@ -24,6 +24,8 @@ if(HAS_TRAIT(quirk_holder, TRAIT_FEARLESS)) return + if(HAS_TRAIT(source, TRAIT_SIGN_LANG)) // No modifiers for signers, so you're less anxious when you go non-verbal + return var/moodmod if(quirk_holder.mob_mood) diff --git a/code/datums/quirks/negative_quirks/tin_man.dm b/code/datums/quirks/negative_quirks/tin_man.dm index 5a4ab4b1357f51..e6d411bc772f1d 100644 --- a/code/datums/quirks/negative_quirks/tin_man.dm +++ b/code/datums/quirks/negative_quirks/tin_man.dm @@ -1,7 +1,7 @@ /datum/quirk/tin_man name = "Tin Man" desc = "Oops! All Prosthetics! Due to some truly cruel cosmic punishment, most of your internal organs have been replaced with surplus prosthetics." - icon = FA_ICON_ROBOT + icon = FA_ICON_USER_GEAR value = -6 medical_record_text = "During physical examination, patient was found to have numerous low-budget prosthetic internal organs. \ Removal of these organs is known to be dangerous to the patient as well as the practitioner." @@ -30,7 +30,7 @@ for(var/organ_slot in possible_organ_slots) var/organ_path = possible_organ_slots[organ_slot] var/obj/item/organ/new_organ = new organ_path() - new_organ.Insert(human_holder, special = TRUE, drop_if_replaced = FALSE) + new_organ.Insert(human_holder, special = TRUE, movement_flags = DELETE_IF_REPLACED) /datum/quirk/tin_man/post_add() to_chat(quirk_holder, span_boldannounce("Most of your internal organs have been replaced with surplus prosthetics. They are fragile and will easily come apart under duress. \ diff --git a/code/datums/quirks/neutral_quirks/colorist.dm b/code/datums/quirks/neutral_quirks/colorist.dm index f82fd5bf6fe3e4..2374ad63430b00 100644 --- a/code/datums/quirks/neutral_quirks/colorist.dm +++ b/code/datums/quirks/neutral_quirks/colorist.dm @@ -1,4 +1,4 @@ -/* SKYRAT EDIT REMOVAL +/* NOVA EDIT REMOVAL /datum/quirk/item_quirk/colorist name = "Colorist" desc = "You like carrying around a hair dye spray to quickly apply color patterns to your hair." @@ -10,4 +10,4 @@ /datum/quirk/item_quirk/colorist/add_unique(client/client_source) give_item_to_holder(/obj/item/dyespray, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) */ -//SKYRAT EDIT REMOVAL +//NOVA EDIT REMOVAL diff --git a/code/datums/quirks/neutral_quirks/heretochromatic.dm b/code/datums/quirks/neutral_quirks/heretochromatic.dm index 1df079c0e45f59..629d26e053ec93 100644 --- a/code/datums/quirks/neutral_quirks/heretochromatic.dm +++ b/code/datums/quirks/neutral_quirks/heretochromatic.dm @@ -3,6 +3,7 @@ desc = "One of your eyes is a different color than the other!" icon = FA_ICON_EYE_LOW_VISION // Ignore the icon name, its actually a fairly good representation of different color eyes quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE + medical_record_text = "Patient's irises are different colors." value = 0 mail_goodies = list(/obj/item/clothing/glasses/eyepatch) diff --git a/code/datums/quirks/neutral_quirks/phobia.dm b/code/datums/quirks/neutral_quirks/phobia.dm index 224401f0670c5c..0375c69b5227cf 100644 --- a/code/datums/quirks/neutral_quirks/phobia.dm +++ b/code/datums/quirks/neutral_quirks/phobia.dm @@ -6,6 +6,10 @@ medical_record_text = "Patient has an irrational fear of something." mail_goodies = list(/obj/item/clothing/glasses/blindfold, /obj/item/storage/pill_bottle/psicodine) +/datum/quirk_constant_data/phobia + associated_typepath = /datum/quirk/phobia + customization_options = list(/datum/preference/choiced/phobia) + // Phobia will follow you between transfers /datum/quirk/phobia/add(client/client_source) var/phobia = client_source?.prefs.read_preference(/datum/preference/choiced/phobia) diff --git a/code/datums/quirks/neutral_quirks/transhumanist.dm b/code/datums/quirks/neutral_quirks/transhumanist.dm new file mode 100644 index 00000000000000..573b70cf21beec --- /dev/null +++ b/code/datums/quirks/neutral_quirks/transhumanist.dm @@ -0,0 +1,174 @@ +#define MOOD_CATEGORY_TRANSHUMANIST_PEOPLE "transhumanist_people" +#define MOOD_CATEGORY_TRANSHUMANIST_BODYPART "transhumanist_bodypart" +// The number of silicons minus the number of organics determines the level +#define TRANSHUMANIST_LEVEL_ECSTATIC 4 +#define TRANSHUMANIST_LEVEL_HAPPY 1 +#define TRANSHUMANIST_LEVEL_NEUTRAL 0 +#define TRANSHUMANIST_LEVEL_UNHAPPY -2 +#define TRANSHUMANIST_LEVEL_ANGRY -5 + +#define BODYPART_SCORE_ORGANIC 1 +#define BODYPART_SCORE_SILICON 2 +#define BODYPART_SCORE_OTHER_BODYTYPES 3 +#define BODYPART_SCORE_OVERALL 4 + + +/datum/quirk/transhumanist + name = "Transhumanist" + desc = "You see silicon life as the perfect lifeform and despise organic flesh. You are happier around silicons, but get frustrated when around organics. You seek to replace your fleshy limbs with their silicon counterparts. You start with a robotic limb." + icon = FA_ICON_ROBOT + quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_PROCESSES|QUIRK_MOODLET_BASED + value = 0 + gain_text = span_notice("You have a desire to ditch your feeble organic flesh and surround yourself with robots.") + lose_text = span_danger("Robots don't seem all that great anymore.") + medical_record_text = "Patient reports hating pathetic creatures of meat and bone." + mail_goodies = list( + /obj/item/stock_parts/cell/potato, + /obj/item/stack/cable_coil, + /obj/item/toy/talking/ai, + /obj/item/toy/figure/borg, + ) + var/slot_string + var/obj/item/bodypart/old_limb + +/datum/quirk/transhumanist/add(client/client_source) + RegisterSignal(quirk_holder, COMSIG_CARBON_POST_ATTACH_LIMB, PROC_REF(calculate_bodypart_score)) + RegisterSignal(quirk_holder, COMSIG_CARBON_POST_REMOVE_LIMB, PROC_REF(calculate_bodypart_score)) + RegisterSignal(quirk_holder, COMSIG_CARBON_GAIN_ORGAN, PROC_REF(calculate_bodypart_score)) + RegisterSignal(quirk_holder, COMSIG_CARBON_LOSE_ORGAN, PROC_REF(calculate_bodypart_score)) + calculate_bodypart_score() + +/datum/quirk/transhumanist/remove() + UnregisterSignal(quirk_holder, list(COMSIG_CARBON_REMOVE_LIMB, COMSIG_CARBON_ATTACH_LIMB)) + +/datum/quirk/transhumanist/proc/get_bodypart_score(mob/living/carbon/target, limbs_only = FALSE) + var/organic_bodytypes = 0 + var/silicon_bodytypes = 0 + var/other_bodytypes = FALSE + for(var/obj/item/bodypart/part as anything in target.bodyparts) + if(part.bodytype & BODYTYPE_ROBOTIC) + silicon_bodytypes += 1 + else if(part.bodytype & BODYTYPE_ORGANIC) + organic_bodytypes += 0.1 + else + other_bodytypes = TRUE + + if(!limbs_only) + for(var/obj/item/organ/organ as anything in target.organs) + if(organ.organ_flags & ORGAN_ROBOTIC) + silicon_bodytypes += 0.25 + else if(organ.organ_flags & ORGAN_ORGANIC) + organic_bodytypes += 0.02 + + return list( + BODYPART_SCORE_ORGANIC = organic_bodytypes, + BODYPART_SCORE_SILICON = silicon_bodytypes, + BODYPART_SCORE_OTHER_BODYTYPES = other_bodytypes, + BODYPART_SCORE_OVERALL = silicon_bodytypes - organic_bodytypes + ) + + +/datum/quirk/transhumanist/proc/calculate_bodypart_score() + SIGNAL_HANDLER + var/list/score = get_bodypart_score(quirk_holder) + var/organic_bodytypes = score[BODYPART_SCORE_ORGANIC] + var/silicon_bodytypes = score[BODYPART_SCORE_SILICON] + var/other_bodytypes = score[BODYPART_SCORE_OTHER_BODYTYPES] + + if(!other_bodytypes) + if(organic_bodytypes <= 0.02) + quirk_holder.add_mood_event(MOOD_CATEGORY_TRANSHUMANIST_BODYPART, /datum/mood_event/completely_robotic) + return + else if(silicon_bodytypes == 0) + quirk_holder.add_mood_event(MOOD_CATEGORY_TRANSHUMANIST_BODYPART, /datum/mood_event/completely_organic) + return + else if(silicon_bodytypes == 0 && organic_bodytypes == 0) + quirk_holder.clear_mood_event(MOOD_CATEGORY_TRANSHUMANIST_BODYPART) + return + + var/bodypart_score = score[BODYPART_SCORE_OVERALL] + switch(bodypart_score) + if(3 to INFINITY) + quirk_holder.add_mood_event(MOOD_CATEGORY_TRANSHUMANIST_BODYPART, /datum/mood_event/very_robotic) + if(0 to 3) + quirk_holder.add_mood_event(MOOD_CATEGORY_TRANSHUMANIST_BODYPART, /datum/mood_event/balanced_robotic) + if(-INFINITY to 0) + quirk_holder.add_mood_event(MOOD_CATEGORY_TRANSHUMANIST_BODYPART, /datum/mood_event/very_organic) + + +/datum/quirk/transhumanist/add_unique(client/client_source) + var/limb_type = GLOB.limb_choice_transhuman[client_source?.prefs?.read_preference(/datum/preference/choiced/prosthetic)] + if(isnull(limb_type)) //Client gone or they chose a random prosthetic + limb_type = GLOB.limb_choice_transhuman[pick(GLOB.limb_choice_transhuman)] + + var/mob/living/carbon/human/human_holder = quirk_holder + var/obj/item/bodypart/new_part = new limb_type() + + slot_string = "[new_part.plaintext_zone]" + old_limb = human_holder.return_and_replace_bodypart(new_part, special = TRUE) + +/datum/quirk/transhumanist/post_add() + if(slot_string) + to_chat(quirk_holder, span_boldannounce("Your [slot_string] has been replaced with a robot arm. You need to use a welding tool and cables to repair it, instead of sutures and regenerative meshes.")) + +/datum/quirk/transhumanist/remove() + if(old_limb) + var/mob/living/carbon/human/human_holder = quirk_holder + human_holder.del_and_replace_bodypart(old_limb, special = TRUE) + old_limb = null + quirk_holder.clear_mood_event(MOOD_CATEGORY_TRANSHUMANIST_BODYPART) + quirk_holder.clear_mood_event(MOOD_CATEGORY_TRANSHUMANIST_PEOPLE) + +/datum/quirk/transhumanist/process(seconds_per_tick) + var/organics_nearby = 0 + var/silicons_nearby = 0 + + // Only cares about things that are nearby + var/list/mobs = get_hearers_in_LOS(3, quirk_holder) + + for(var/mob/living/target in mobs) + if(!isturf(target.loc) || target == quirk_holder || target.alpha <= 128 || target.invisibility > quirk_holder.see_invisible) + continue + + if(iscarbon(target)) + var/list/score = get_bodypart_score(target, limbs_only = TRUE) + // For an average human, they'll need 2 augmented limbs to not get counted as an organic nor a silicon. + // If some monstrosity has 20-30 organic limbs, they'll likely need more. + if(score[BODYPART_SCORE_OVERALL] < 1) + organics_nearby += 1 + else if(score[BODYPART_SCORE_ORGANIC] == 0) + silicons_nearby += 1 + else if(target.mob_biotypes & MOB_ORGANIC) + organics_nearby += 1 + else if(target.mob_biotypes & MOB_ROBOTIC && target.stat != DEAD) // Dead silicons don't count, they're basically just machinery + silicons_nearby += 1 + + var/mood_result = silicons_nearby - organics_nearby + + switch(mood_result) + if(TRANSHUMANIST_LEVEL_ECSTATIC to INFINITY) + quirk_holder.add_mood_event(MOOD_CATEGORY_TRANSHUMANIST_PEOPLE, /datum/mood_event/surrounded_by_silicon) + if(TRANSHUMANIST_LEVEL_HAPPY to TRANSHUMANIST_LEVEL_ECSTATIC) + quirk_holder.add_mood_event(MOOD_CATEGORY_TRANSHUMANIST_PEOPLE, /datum/mood_event/around_many_silicon) + if(TRANSHUMANIST_LEVEL_NEUTRAL + 0.01 to TRANSHUMANIST_LEVEL_HAPPY) + quirk_holder.add_mood_event(MOOD_CATEGORY_TRANSHUMANIST_PEOPLE, /datum/mood_event/around_silicon) + if(TRANSHUMANIST_LEVEL_NEUTRAL) + quirk_holder.clear_mood_event(MOOD_CATEGORY_TRANSHUMANIST_PEOPLE) + if(TRANSHUMANIST_LEVEL_UNHAPPY to TRANSHUMANIST_LEVEL_NEUTRAL - 0.01) + quirk_holder.add_mood_event(MOOD_CATEGORY_TRANSHUMANIST_PEOPLE, /datum/mood_event/around_organic) + if(TRANSHUMANIST_LEVEL_ANGRY to TRANSHUMANIST_LEVEL_UNHAPPY) + quirk_holder.add_mood_event(MOOD_CATEGORY_TRANSHUMANIST_PEOPLE, /datum/mood_event/around_many_organic) + if(-INFINITY to TRANSHUMANIST_LEVEL_ANGRY) + quirk_holder.add_mood_event(MOOD_CATEGORY_TRANSHUMANIST_PEOPLE, /datum/mood_event/surrounded_by_organic) + +#undef MOOD_CATEGORY_TRANSHUMANIST_PEOPLE +#undef MOOD_CATEGORY_TRANSHUMANIST_BODYPART +#undef TRANSHUMANIST_LEVEL_ECSTATIC +#undef TRANSHUMANIST_LEVEL_HAPPY +#undef TRANSHUMANIST_LEVEL_NEUTRAL +#undef TRANSHUMANIST_LEVEL_UNHAPPY +#undef TRANSHUMANIST_LEVEL_ANGRY +#undef BODYPART_SCORE_ORGANIC +#undef BODYPART_SCORE_SILICON +#undef BODYPART_SCORE_OTHER_BODYTYPES +#undef BODYPART_SCORE_OVERALL diff --git a/code/datums/quirks/positive_quirks/bilingual.dm b/code/datums/quirks/positive_quirks/bilingual.dm index 324054198b8d66..408a952cfe18af 100644 --- a/code/datums/quirks/positive_quirks/bilingual.dm +++ b/code/datums/quirks/positive_quirks/bilingual.dm @@ -8,6 +8,10 @@ medical_record_text = "Patient speaks multiple languages." mail_goodies = list(/obj/item/taperecorder, /obj/item/clothing/head/frenchberet, /obj/item/clothing/mask/fakemoustache/italian) +/datum/quirk_constant_data/bilingual + associated_typepath = /datum/quirk/bilingual + customization_options = list(/datum/preference/choiced/language) + /datum/quirk/bilingual/add_unique(client/client_source) var/wanted_language = client_source?.prefs.read_preference(/datum/preference/choiced/language) var/datum/language/language_type diff --git a/code/datums/quirks/positive_quirks/empath.dm b/code/datums/quirks/positive_quirks/empath.dm index 3379f8a97c458e..24115e71eaa139 100644 --- a/code/datums/quirks/positive_quirks/empath.dm +++ b/code/datums/quirks/positive_quirks/empath.dm @@ -2,7 +2,7 @@ name = "Empath" desc = "Whether it's a sixth sense or careful study of body language, it only takes you a quick glance at someone to understand how they feel." icon = FA_ICON_SMILE_BEAM - value = 6 // SKYRAT EDIT CHANGE - Quirk Rebalance - Original: value = 8 + value = 6 // NOVA EDIT CHANGE - Quirk Rebalance - Original: value = 8 mob_trait = TRAIT_EMPATH gain_text = span_notice("You feel in tune with those around you.") lose_text = span_danger("You feel isolated from others.") diff --git a/code/datums/quirks/positive_quirks/signer.dm b/code/datums/quirks/positive_quirks/signer.dm index df0a2f34c5dd43..8ff95d25e4a67a 100644 --- a/code/datums/quirks/positive_quirks/signer.dm +++ b/code/datums/quirks/positive_quirks/signer.dm @@ -4,6 +4,7 @@ icon = FA_ICON_HANDS value = 4 quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE + medical_record_text = "Patient can communicate with sign language." mail_goodies = list(/obj/item/clothing/gloves/radio) /datum/quirk/item_quirk/signer/add_unique(client/client_source) diff --git a/code/datums/quirks/positive_quirks/spacer.dm b/code/datums/quirks/positive_quirks/spacer.dm index 24dc91fa62703e..83157352901622 100644 --- a/code/datums/quirks/positive_quirks/spacer.dm +++ b/code/datums/quirks/positive_quirks/spacer.dm @@ -10,7 +10,8 @@ lose_text = span_danger("You feel homesick.") icon = FA_ICON_USER_ASTRONAUT value = 7 - quirk_flags = QUIRK_CHANGES_APPEARANCE //SKYRAT EDIT CHANGE - ORIGINAL: quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE + quirk_flags = QUIRK_CHANGES_APPEARANCE //NOVA EDIT CHANGE - ORIGINAL: quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE + medical_record_text = "Patient is well-adapted to non-terrestrial environments." mail_goodies = list( /obj/item/storage/pill_bottle/ondansetron, /obj/item/reagent_containers/pill/gravitum, diff --git a/code/datums/quirks/positive_quirks/spiritual.dm b/code/datums/quirks/positive_quirks/spiritual.dm index b08fe8b60c6fce..ab6a96cc2498bf 100644 --- a/code/datums/quirks/positive_quirks/spiritual.dm +++ b/code/datums/quirks/positive_quirks/spiritual.dm @@ -2,7 +2,7 @@ name = "Spiritual" desc = "You hold a spiritual belief, whether in God, nature or the arcane rules of the universe. You gain comfort from the presence of holy people, and believe that your prayers are more special than others. Being in the chapel makes you happy." icon = FA_ICON_BIBLE - value = 2 /// SKYRAT EDIT - Quirk Rebalance - Original: value = 4 + value = 2 /// NOVA EDIT - Quirk Rebalance - Original: value = 4 mob_trait = TRAIT_SPIRITUAL gain_text = span_notice("You have faith in a higher power.") lose_text = span_danger("You lose faith!") diff --git a/code/datums/quirks/positive_quirks/tagger.dm b/code/datums/quirks/positive_quirks/tagger.dm index 5aba24d850a458..c2640081a6d961 100644 --- a/code/datums/quirks/positive_quirks/tagger.dm +++ b/code/datums/quirks/positive_quirks/tagger.dm @@ -1,10 +1,10 @@ /datum/quirk/item_quirk/tagger name = "Tagger" - desc = "You're an experienced artist. People will actually be impressed by your graffiti, and you can get twice as many uses out of drawing supplies." + desc = "You're an experienced artist. People will actually be impressed by your graffiti, and you can get twice as many uses out of drawing supplies in half the time." icon = FA_ICON_SPRAY_CAN value = 4 mob_trait = TRAIT_TAGGER - gain_text = span_notice("You know how to tag walls efficiently.") + gain_text = span_notice("You know how to tag walls efficiently and quickly.") lose_text = span_danger("You forget how to tag walls properly.") medical_record_text = "Patient was recently seen for possible paint huffing incident." mail_goodies = list( @@ -14,6 +14,10 @@ /obj/item/canvas/twentythree_twentythree ) +/datum/quirk_constant_data/tagger + associated_typepath = /datum/quirk/item_quirk/tagger + customization_options = list(/datum/preference/color/paint_color) + /datum/quirk/item_quirk/tagger/add_unique(client/client_source) var/obj/item/toy/crayon/spraycan/can = new can.set_painting_tool_color(client_source?.prefs.read_preference(/datum/preference/color/paint_color)) diff --git a/code/datums/quirks/positive_quirks/voracious.dm b/code/datums/quirks/positive_quirks/voracious.dm index 68073304f0d82a..acdb5147c77292 100644 --- a/code/datums/quirks/positive_quirks/voracious.dm +++ b/code/datums/quirks/positive_quirks/voracious.dm @@ -6,4 +6,5 @@ mob_trait = TRAIT_VORACIOUS gain_text = span_notice("You feel HONGRY.") lose_text = span_danger("You no longer feel HONGRY.") + medical_record_text = "Patient has an above average appreciation for food and drink." mail_goodies = list(/obj/effect/spawner/random/food_or_drink/dinner) diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm deleted file mode 100644 index 2149c5452ead26..00000000000000 --- a/code/datums/recipe.dm +++ /dev/null @@ -1,119 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * - * /datum/recipe by rastaf0 13 apr 2011 * - * * * * * * * * * * * * * * * * * * * * * * * * * * - * This is powerful and flexible recipe system. - * It exists not only for food. - * supports both reagents and objects as prerequisites. - * In order to use this system you have to define a deriative from /datum/recipe - * * reagents are reagents. Acid, milc, booze, etc. - * * items are objects. Fruits, tools, circuit boards. - * * result is type to create as new object - * * time is optional parameter, you shall use in in your machine, - * default /datum/recipe/ procs does not rely on this parameter. - * - * Functions you need: - * /datum/recipe/proc/make(obj/container as obj) - * Creates result inside container, - * deletes prerequisite reagents, - * transfers reagents from prerequisite objects, - * deletes all prerequisite objects (even not needed for recipe at the moment). - * - * /proc/select_recipe(list/datum/recipe/avaiable_recipes), obj/obj as obj, exact = 1) - * Wonderful function that select suitable recipe for you. - * obj is a machine (or magik hat) with prerequisites, - * exact = 0 forces algorithm to ignore superfluous stuff. - * - * - * Functions you do not need to call directly but could: - * /datum/recipe/proc/check_reagents(datum/reagents/avail_reagents) - * //1=precisely, 0=insufficiently, -1=superfluous - * - * /datum/recipe/proc/check_items(obj/container as obj) - * //1=precisely, 0=insufficiently, -1=superfluous - * - * */ - -/datum/recipe - var/list/reagents_list // example: = list(/datum/reagent/consumable/berryjuice = 5) // do not list same reagent twice - var/list/items // example: =list(/obj/item/crowbar, /obj/item/welder) // place /foo/bar before /foo - var/result //example: = /obj/item/food/donut/plain - var/time = 100 // 1/10 part of second - - -/datum/recipe/proc/check_reagents(datum/reagents/avail_reagents) //1=precisely, 0=insufficiently, -1=superfluous - . = 1 - for (var/r_r in reagents_list) - var/aval_r_amnt = avail_reagents.get_reagent_amount(r_r) - if (!(abs(aval_r_amnt - reagents_list[r_r])<0.5)) //if NOT equals - if (aval_r_amnt>reagents_list[r_r]) - . = -1 - else - return 0 - if ((reagents_list?(reagents_list.len):(0)) < avail_reagents.reagent_list.len) - return -1 - return . - -/datum/recipe/proc/check_items(obj/container) //1=precisely, 0=insufficiently, -1=superfluous - if (!items) - if (locate(/obj/) in container) - return -1 - else - return 1 - . = 1 - var/list/checklist = items.Copy() - for (var/obj/O in container) - var/found = 0 - for (var/type in checklist) - if (istype(O,type)) - checklist-=type - found = 1 - break - if (!found) - . = -1 - if (checklist.len) - return 0 - return . - -//general version -/datum/recipe/proc/make(obj/container) - var/obj/result_obj = new result(container) - for (var/obj/O in (container.contents-result_obj)) - O.reagents.trans_to(result_obj, O.reagents.total_volume) - qdel(O) - container.reagents.clear_reagents() - return result_obj - -// food-related -/datum/recipe/proc/make_food(obj/container) - var/obj/result_obj = new result(container) - for (var/obj/O in (container.contents-result_obj)) - if (O.reagents) - O.reagents.del_reagent(/datum/reagent/consumable/nutriment) - O.reagents.trans_to(result_obj, O.reagents.total_volume) - qdel(O) - container.reagents.clear_reagents() - return result_obj - -/proc/select_recipe(list/datum/recipe/avaiable_recipes, obj/obj, exact = 1 as num) - if (!exact) - exact = -1 - var/list/datum/recipe/possible_recipes = new - for (var/datum/recipe/recipe in avaiable_recipes) - if (recipe.check_reagents(obj.reagents) == exact && recipe.check_items(obj) == exact) - possible_recipes+=recipe - if (possible_recipes.len == 0) - return null - else if (possible_recipes.len == 1) - return possible_recipes[1] - else //okay, let's select the most complicated recipe - var/r_count = 0 - var/i_count = 0 - . = possible_recipes[1] - for (var/datum/recipe/recipe in possible_recipes) - var/N_i = (recipe.items)?(recipe.items.len):0 - var/N_r = (recipe.reagents_list)?(recipe.reagents_list.len):0 - if (N_i > i_count || (N_i == i_count && N_r > r_count )) - r_count = N_r - i_count = N_i - . = recipe - return . diff --git a/code/datums/records/manifest.dm b/code/datums/records/manifest.dm index 7b43b7644efb71..febd6374f7fbca 100644 --- a/code/datums/records/manifest.dm +++ b/code/datums/records/manifest.dm @@ -16,7 +16,7 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new) if(readied_player.new_character) log_manifest(readied_player.ckey,readied_player.new_character.mind,readied_player.new_character) if(ishuman(readied_player.new_character)) - inject(readied_player.new_character, readied_player.client) // SKYRAT EDIT - RP Records - ORIGINAL: inject(readied_player.new_character) + inject(readied_player.new_character, readied_player.client) // NOVA EDIT - RP Records - ORIGINAL: inject(readied_player.new_character) CHECK_TICK /// Gets the current manifest. @@ -38,7 +38,7 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new) misc_list[++misc_list.len] = list( "name" = name, "rank" = rank, - "trim" = trim, // SKYRAT EDIT ADDITION - Alt Titles + "trim" = trim, // NOVA EDIT ADDITION - Alt Titles ) continue for(var/department_type as anything in job.departments_list) @@ -52,7 +52,7 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new) var/list/entry = list( "name" = name, "rank" = rank, - "trim" = trim, // SKYRAT EDIT ADDITION - Alt Titles + "trim" = trim, // NOVA EDIT ADDITION - Alt Titles ) var/list/department_list = manifest_out[department.department_name] if(istype(job, department.department_head)) @@ -99,7 +99,7 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new) /// Injects a record into the manifest. -/datum/manifest/proc/inject(mob/living/carbon/human/person, client/person_client) // SKYRAT EDIT - RP Records - ORIGINAL: /datum/manifest/proc/inject(mob/living/carbon/human/person) +/datum/manifest/proc/inject(mob/living/carbon/human/person, client/person_client) // NOVA EDIT - RP Records - ORIGINAL: /datum/manifest/proc/inject(mob/living/carbon/human/person) set waitfor = FALSE if(!(person.mind?.assigned_role.job_flags & JOB_CREW_MANIFEST)) return @@ -114,10 +114,10 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new) var/datum/dna/record_dna = new() person.dna.copy_dna(record_dna) - // SKYRAT EDIT ADDITION BEGIN - ALTERNATIVE_JOB_TITLES + // NOVA EDIT ADDITION BEGIN - ALTERNATIVE_JOB_TITLES // The alt job title, if user picked one, or the default var/chosen_assignment = person_client?.prefs.alt_job_titles[assignment] || assignment - // SKYRAT EDIT ADDITION END - ALTERNATIVE_JOB_TITLES + // NOVA EDIT ADDITION END - ALTERNATIVE_JOB_TITLES var/datum/record/locked/lockfile = new( age = person.age, @@ -128,7 +128,7 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new) gender = person_gender, initial_rank = assignment, name = person.real_name, - rank = chosen_assignment, // SKYRAT EDIT - Alt job titles - ORIGINAL: rank = assignment, + rank = chosen_assignment, // NOVA EDIT - Alt job titles - ORIGINAL: rank = assignment, species = record_dna.species.name, trim = assignment, // Locked specifics @@ -145,7 +145,7 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new) gender = person_gender, initial_rank = assignment, name = person.real_name, - rank = chosen_assignment, // SKYRAT EDIT - Alt job titles - ORIGINAL: rank = assignment, + rank = chosen_assignment, // NOVA EDIT - Alt job titles - ORIGINAL: rank = assignment, species = record_dna.species.name, trim = assignment, // Crew specific @@ -155,13 +155,13 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new) minor_disabilities = person.get_quirk_string(FALSE, CAT_QUIRK_MINOR_DISABILITY, from_scan = TRUE), minor_disabilities_desc = person.get_quirk_string(TRUE, CAT_QUIRK_MINOR_DISABILITY), quirk_notes = person.get_quirk_string(TRUE, CAT_QUIRK_NOTES), - // SKYRAT EDIT START - RP Records + // NOVA EDIT START - RP Records background_information = person_client?.prefs.read_preference(/datum/preference/text/background) || "", exploitable_information = person_client?.prefs.read_preference(/datum/preference/text/exploitable) || "", past_general_records = person_client?.prefs.read_preference(/datum/preference/text/general) || "", past_medical_records = person_client?.prefs.read_preference(/datum/preference/text/medical) || "", past_security_records = person_client?.prefs.read_preference(/datum/preference/text/security) || "", - // SKYRAT EDIT END + // NOVA EDIT END ) return diff --git a/code/datums/records/record.dm b/code/datums/records/record.dm index 276865115e461a..40f3ff06ed7196 100644 --- a/code/datums/records/record.dm +++ b/code/datums/records/record.dm @@ -105,13 +105,13 @@ physical_status = PHYSICAL_ACTIVE, mental_status = MENTAL_STABLE, quirk_notes, - // SKYRAT EDIT START - RP Records + // NOVA EDIT START - RP Records background_information = "", exploitable_information = "", past_general_records = "", past_medical_records = "", past_security_records = "", - // SKYRAT EDIT END + // NOVA EDIT END ) . = ..() src.lock_ref = lock_ref @@ -122,13 +122,13 @@ src.physical_status = physical_status src.mental_status = mental_status src.quirk_notes = quirk_notes - // SKYRAT EDIT START - RP Records + // NOVA EDIT START - RP Records src.background_information = background_information src.exploitable_information = exploitable_information src.past_general_records = past_general_records src.past_medical_records = past_medical_records src.past_security_records = past_security_records - // SKYRAT EDIT END + // NOVA EDIT END GLOB.manifest.general += src @@ -239,18 +239,18 @@ final_paper_text += "Species: [species]
Fingerprint: [fingerprint]
Wanted Status: [wanted_status]

" - //SKYRAT EDIT ADD - RP RECORDS + //NOVA EDIT ADD - RP RECORDS if(past_general_records != "") final_paper_text += "
General Records:" final_paper_text += "
[past_general_records]
" - //SKYRAT EDIT ADD END + //NOVA EDIT ADD END final_paper_text += "
Security Data


" - //SKYRAT EDIT ADDITION START - RP RECORDS + //NOVA EDIT ADDITION START - RP RECORDS if(past_security_records != "") final_paper_text += "Security Records:" final_paper_text += "
[past_security_records]
" - //SKYRAT EDIT END + //NOVA EDIT END final_paper_text += "Crimes:
" final_paper_text += {" @@ -298,9 +298,9 @@ printed_paper.name = "SR-[print_count] '[name]'" - /// SKYRAT EDIT ADD - TRUE + /// NOVA EDIT ADD - TRUE printed_paper.add_raw_text(final_paper_text,TRUE) - /// SKYRAT EDIT ADD END + /// NOVA EDIT ADD END printed_paper.update_appearance() return printed_paper diff --git a/code/datums/request_message.dm b/code/datums/request_message.dm index 920f45dca53049..d9cf51bc5bed0c 100644 --- a/code/datums/request_message.dm +++ b/code/datums/request_message.dm @@ -32,7 +32,7 @@ if(data_appended_list && data_appended_list.len) appended_list = data_appended_list -/// Retrieves the alert spoken/blared by the requests console that recieves this message +/// Retrieves the alert spoken/blared by the requests console that receives this message /datum/request_message/proc/get_alert() var/authenticated = "" if(message_verified_by) diff --git a/code/datums/ruins/icemoon.dm b/code/datums/ruins/icemoon.dm index a903d9444f4bdb..406f4f46d0ddb1 100644 --- a/code/datums/ruins/icemoon.dm +++ b/code/datums/ruins/icemoon.dm @@ -74,7 +74,7 @@ suffix = "icemoon_surface_smoking_room.dmm" // above and below ground together -/* SKYRAT EDIT REMOVAL - Mapping +/* NOVA EDIT REMOVAL - Mapping /datum/map_template/ruin/icemoon/mining_site name = "Mining Site" id = "miningsite" @@ -90,7 +90,7 @@ suffix = "icemoon_underground_mining_site.dmm" has_ceiling = FALSE unpickable = TRUE -*/ // SKYRAT EDIT REMOVAL End +*/ // NOVA EDIT REMOVAL End // below ground only /datum/map_template/ruin/icemoon/underground diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm index b3bc5a4dc18dd8..7c47fa30ad0215 100644 --- a/code/datums/ruins/lavaland.dm +++ b/code/datums/ruins/lavaland.dm @@ -46,26 +46,27 @@ cost = 10 allow_duplicates = FALSE +// NOVA EDIT REMOVAL BEGIN - MAPPING +/* /datum/map_template/ruin/lavaland/ash_walker name = "Ash Walker Nest" id = "ash-walker" description = "A race of unbreathing lizards live here, that run faster than a human can, worship a broken dead city, and are capable of reproducing by something involving tentacles? \ Probably best to stay clear." - prefix = "_maps/RandomRuins/LavaRuins/skyrat/" // SKYRAT ADDITION - suffix = "lavaland_surface_ash_walker1_skyrat.dmm" // SKYRAT EDIT - ORIGINAL: lavaland_surface_ash_walker1.dmm - cost = 1000 //SKYRAT EDIT: Original: 20 + suffix = "lavaland_surface_ash_walker1.dmm" + cost = 20 allow_duplicates = FALSE -//SKYRAT EDIT REMOVAL BEGIN - MAPPING -/* + /datum/map_template/ruin/lavaland/syndicate_base - name = "Syndicate Lava Base" + name = "Symphionia Lava Base" id = "lava-base" description = "A secret base researching illegal bioweapons, it is closely guarded by an elite team of syndicate agents." suffix = "lavaland_surface_syndicate_base1.dmm" cost = 20 allow_duplicates = FALSE */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END + /datum/map_template/ruin/lavaland/free_golem name = "Free Golem Ship" id = "golem-ship" diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm index 1eeef6554a0cc3..e2506bc6633e21 100644 --- a/code/datums/ruins/space.dm +++ b/code/datums/ruins/space.dm @@ -36,7 +36,7 @@ id = "asteroid4" suffix = "asteroid4.dmm" name = "Asteroid 4" - description = "Nanotrasen Escape Pods have a 100%* success rate, and a 99%* customer satisfaction rate. \ + description = "Symphionia Escape Pods have a 100%* success rate, and a 99%* customer satisfaction rate. \ *Please note that these statistics are taken from pods that have successfully docked with a recovery vessel." /datum/map_template/ruin/space/asteroid5 @@ -111,7 +111,7 @@ id = "derelict6" suffix = "derelict6.dmm" name = "Derelict 6" - description = "The hush-hush of Nanotrasen when it comes to stations seemingly vanishing off the radar is an interesting topic, theories of nuclear destruction float about while Nanotrasen \ + description = "The hush-hush of Symphionia when it comes to stations seemingly vanishing off the radar is an interesting topic, theories of nuclear destruction float about while Symphionia \ flat-out denies said stations ever existing." /datum/map_template/ruin/space/derelict7 @@ -153,7 +153,7 @@ /datum/map_template/ruin/space/caravanambush id = "caravanambush" suffix = "caravanambush.dmm" - name = "Syndicate Ambush" + name = "Symphionia Ambush" description = "A caravan route used by passing cargo freights has been ambushed by a salvage team manned by the syndicate. \ The caravan managed to send off a distress message before being surrounded, their video feed cutting off as the sound of gunfire and a parrot was heard." @@ -179,7 +179,7 @@ /datum/map_template/ruin/space/spacehotel id = "spacehotel" - suffix = "spacehotel_skyrat.dmm" // SKYRAT EDIT CHANGE - ORIGINAL: suffix = "spacehotel.dmm" + suffix = "spacehotel.dmm" name = "The Twin-Nexus Hotel" description = "An interstellar hotel, where the weary spaceman can rest their head and relax, assured that the residental staff will not murder them in their sleep. Probably." @@ -238,7 +238,7 @@ /datum/map_template/ruin/space/listeningstation id = "listeningstation" suffix = "listeningstation.dmm" - name = "Syndicate Listening Station" + name = "Symphionia Listening Station" description = "Listening stations form the backbone of the syndicate's information-gathering operations. \ Assignment to these stations is dreaded by most agents, as it entails long and lonely shifts listening to nearby stations chatter incessantly about the most meaningless things." @@ -283,16 +283,9 @@ name = "Gondoland" description = "Just an ordinary rock- wait, what's that thing?" -// SKYRAT EDIT CHANGE START -- Reworked whiteship ruin -/* SKYRAT EDIT CHANGE -- ORIGINAL COMMENTED OUT /datum/map_template/ruin/space/whiteshipruin_box -id = "whiteshipruin_box" -suffix = "whiteshipruin_box.dmm"*/ - -/datum/map_template/ruin/space/whiteshipruin_box_skyrat//Skyrat Edit - id = "whiteshipruin_box_skyrat" - suffix = "whiteshipruin_box_skyrat.dmm" - // SKYRAT EDIT CHANGE END + id = "whiteshipruin_box" + suffix = "whiteshipruin_box.dmm" name = "NT Medical Ship" description = "An ancient ship, said to be among the first discovered derelicts near Space Station 13 that was still in working order. \ Aged and deprecated by time, this relic of a vessel is now broken beyond repair." @@ -331,14 +324,14 @@ suffix = "whiteshipruin_box.dmm"*/ /datum/map_template/ruin/space/forgottenship id = "forgottenship" suffix = "forgottenship.dmm" - name = "Syndicate Forgotten Ship" + name = "Symphionia Forgotten Ship" description = "Seemingly abandoned ship went of course right into NT controlled space. It seems that malfunction caused most systems to turn off, except for sleepers." /datum/map_template/ruin/space/old_syndie_infiltrator id = "old_infiltrator" suffix = "old_infiltrator.dmm" name = "Abandoned Infiltrator" - description = "Only one in five Gorlex Marauder strike forces return from their regular raids into Nanotrasen space. \ + description = "Only one in five Gorlex Marauder strike forces return from their regular raids into Symphionia space. \ For the other four... well, their ship doesn't just disappear when their target evacuates." /datum/map_template/ruin/space/hellfactory @@ -490,3 +483,28 @@ suffix = "whiteshipruin_box.dmm"*/ suffix = "infested_frigate.dmm" name = "SYN-C Brutus" description = "This wasn't an outbreak, this was a repelled attack." + +/datum/map_template/ruin/space/garbagetruck1 + id = "garbagetruck1" + suffix = "garbagetruck1.dmm" + name = "Decommissioned Garbage Truck NX1" + description = "An NX-760 interstellar transport barge. At the end of their life cycle, they are often filled with trash and launched into unexplored space to become someone else's problem. This one is full of kitchen waste, and rodents." + +/datum/map_template/ruin/space/garbagetruck2 + id = "garbagetruck2" + suffix = "garbagetruck2.dmm" + name = "Decommissioned Garbage Truck NX2" + description = "An NX-760 interstellar transport barge. At the end of their life cycle, they are often filled with trash and launched into unexplored space to become someone else's problem. This one is full of medical waste, and a syndicate agent." + +/datum/map_template/ruin/space/garbagetruck3 + id = "garbagetruck3" + suffix = "garbagetruck3.dmm" + name = "Decommissioned Garbage Truck NX3" + description = "An NX-760 interstellar transport barge. At the end of their life cycle, they are often filled with trash and launched into unexplored space to become someone else's problem. This one is full of industrial garbage, and a russian drug den." + +/datum/map_template/ruin/space/garbagetruck4 + id = "garbagetruck4" + suffix = "garbagetruck4.dmm" + name = "Decommissioned Garbage Truck NX4" + description = "An NX-760 interstellar transport barge. At the end of their life cycle, they are often filled with trash and launched into unexplored space to become someone else's problem. This one is full of commercial trash, and spiders." + diff --git a/code/datums/saymode.dm b/code/datums/saymode.dm index e2425ce92b1576..363f484a415835 100644 --- a/code/datums/saymode.dm +++ b/code/datums/saymode.dm @@ -23,23 +23,23 @@ var/datum/antagonist/changeling/ling_sender = user.mind.has_antag_datum(/datum/antagonist/changeling) if(!ling_sender) return FALSE - if(HAS_TRAIT(user, CHANGELING_HIVEMIND_MUTE)) + if(HAS_TRAIT(user, TRAIT_CHANGELING_HIVEMIND_MUTE)) to_chat(user, span_warning("The poison in the air hinders our ability to interact with the hivemind.")) return FALSE user.log_talk(message, LOG_SAY, tag="changeling [ling_sender.changelingID]") var/msg = span_changeling("[ling_sender.changelingID]: [message]") - //the recipients can recieve the message - for(var/datum/antagonist/changeling/ling_reciever in GLOB.antagonists) - if(!ling_reciever.owner) + //the recipients can receive the message + for(var/datum/antagonist/changeling/ling_receiver in GLOB.antagonists) + if(!ling_receiver.owner) continue - var/mob/living/ling_mob = ling_reciever.owner.current + var/mob/living/ling_mob = ling_receiver.owner.current //removes types that override the presence of being changeling (for example, borged lings still can't hivemind chat) if(!isliving(ling_mob) || issilicon(ling_mob) || isbrain(ling_mob)) continue - // can't recieve messages on the hivemind right now - if(HAS_TRAIT(ling_mob, CHANGELING_HIVEMIND_MUTE)) + // can't receive messages on the hivemind right now + if(HAS_TRAIT(ling_mob, TRAIT_CHANGELING_HIVEMIND_MUTE)) continue to_chat(ling_mob, msg) diff --git a/code/datums/shuttles/emergency.dm b/code/datums/shuttles/emergency.dm index 5e8553c69ee51d..baec3ab023d6b7 100644 --- a/code/datums/shuttles/emergency.dm +++ b/code/datums/shuttles/emergency.dm @@ -1,6 +1,6 @@ #define EMAG_LOCKED_SHUTTLE_COST (CARGO_CRATE_VALUE * 50) -/datum/map_template/shuttle/emergency // SKYRAT EDIT OVERRIDE - OVERRIDEN IN ADVANCED_SHUTTLES - shuttles.dm +/datum/map_template/shuttle/emergency // NOVA EDIT OVERRIDE - OVERRIDEN IN ADVANCED_SHUTTLES - shuttles.dm port_id = "emergency" name = "Base Shuttle Template (Emergency)" ///assoc list of shuttle events to add to this shuttle on spawn (typepath = weight) @@ -38,7 +38,7 @@ var/path = pick_weight(events) events -= path mobile.event_list.Add(new path(mobile)) - + /datum/map_template/shuttle/emergency/backup prefix = "_maps/shuttles/" suffix = "backup" @@ -63,7 +63,7 @@ /datum/map_template/shuttle/emergency/asteroid suffix = "asteroid" name = "Asteroid Station Emergency Shuttle" - description = "A respectable mid-sized shuttle that first saw service shuttling Nanotrasen crew to and from their asteroid belt embedded facilities." + description = "A respectable mid-sized shuttle that first saw service shuttling Symphionia crew to and from their asteroid belt embedded facilities." credit_cost = CARGO_CRATE_VALUE * 6 occupancy_limit = "50" @@ -123,14 +123,14 @@ /datum/map_template/shuttle/emergency/monastery suffix = "monastery" - name = "Grand Corporate Monastery" + name = "Grand Conglomeration Monastery" description = "Originally built for a public station, this grand edifice to religion, due to budget cuts, is now available as an escape shuttle for the right... donation. Due to its large size and callous owners, this shuttle may cause collateral damage." admin_notes = "WARNING: This shuttle WILL destroy a fourth of the station, likely picking up a lot of objects with it." emag_only = TRUE credit_cost = EMAG_LOCKED_SHUTTLE_COST * 1.8 movement_force = list("KNOCKDOWN" = 3, "THROW" = 5) occupancy_limit = "70" - who_can_purchase = null //SKYRAT EDIT ADDITION + who_can_purchase = null //NOVA EDIT ADDITION /datum/map_template/shuttle/emergency/luxury suffix = "luxury" @@ -157,7 +157,7 @@ /datum/map_template/shuttle/emergency/discoinferno suffix = "discoinferno" name = "Disco Inferno" - description = "The glorious results of centuries of plasma research done by Nanotrasen employees. This is the reason why you are here. Get on and dance like you're on fire, burn baby burn!" + description = "The glorious results of centuries of plasma research done by Symphionia employees. This is the reason why you are here. Get on and dance like you're on fire, burn baby burn!" admin_notes = "Flaming hot. The main area has a dance machine as well as plasma floor tiles that will be ignited by players every single time." emag_only = TRUE credit_cost = EMAG_LOCKED_SHUTTLE_COST @@ -339,14 +339,14 @@ /datum/map_template/shuttle/emergency/goon suffix = "goon" name = "NES Port" - description = "The Nanotrasen Emergency Shuttle Port(NES Port for short) is a shuttle used at other less known Nanotrasen facilities and has a more open inside for larger crowds, but fewer onboard shuttle facilities." + description = "The Symphionia Emergency Shuttle Port(NES Port for short) is a shuttle used at other less known Symphionia facilities and has a more open inside for larger crowds, but fewer onboard shuttle facilities." credit_cost = CARGO_CRATE_VALUE occupancy_limit = "40" /datum/map_template/shuttle/emergency/rollerdome suffix = "rollerdome" name = "Uncle Pete's Rollerdome" - description = "Developed by a member of Nanotrasen's R&D crew that claims to have travelled from the year 2028. \ + description = "Developed by a member of Symphionia's R&D crew that claims to have travelled from the year 2028. \ He says this shuttle is based off an old entertainment complex from the 1990s, though our database has no records on anything pertaining to that decade." admin_notes = "ONLY NINETIES KIDS REMEMBER. Uses the fun balloon and drone from the Emergency Bar." credit_cost = CARGO_CRATE_VALUE * 30 @@ -425,7 +425,7 @@ /datum/map_template/shuttle/emergency/lance suffix = "lance" name = "The Lance Crew Evacuation System" - description = "A brand new shuttle by Nanotrasen's finest in shuttle-engineering, it's designed to tactically slam into a destroyed station, dispatching threats and saving crew at the same time! Be careful to stay out of it's path." + description = "A brand new shuttle by Symphionia's finest in shuttle-engineering, it's designed to tactically slam into a destroyed station, dispatching threats and saving crew at the same time! Be careful to stay out of it's path." admin_notes = "WARNING: This shuttle is designed to crash into the station. It has turrets, similar to the raven." credit_cost = CARGO_CRATE_VALUE * 70 occupancy_limit = "50" @@ -465,7 +465,7 @@ /datum/map_template/shuttle/emergency/northstar suffix = "northstar" name = "North Star Emergency Shuttle" - description = "A rugged shuttle meant for long-distance transit from the tips of the frontier to Central Command and back. \ + description = "A rugged shuttle meant for long-distance transit from the tips of the frontier to Conglomeration of Colonists and back. \ moderately comfortable and large, but cramped." credit_cost = CARGO_CRATE_VALUE * 14 occupancy_limit = "55" diff --git a/code/datums/shuttles/infiltrator.dm b/code/datums/shuttles/infiltrator.dm index 26f877f996ee7f..2f254ccc1ec7ca 100644 --- a/code/datums/shuttles/infiltrator.dm +++ b/code/datums/shuttles/infiltrator.dm @@ -5,9 +5,9 @@ /datum/map_template/shuttle/infiltrator/basic suffix = "basic" name = "basic syndicate infiltrator" - description = "Base Syndicate infiltrator, spawned by default for nukeops to use." + description = "Base Symphionia infiltrator, spawned by default for nukeops to use." /datum/map_template/shuttle/infiltrator/advanced suffix = "advanced" name = "advanced syndicate infiltrator" - description = "A much larger version of the standard Syndicate infiltrator that feels more like Kilostation. Has APCs, but power is not a concern for nuclear operatives. Also comes with atmos!" + description = "A much larger version of the standard Symphionia infiltrator that feels more like Kilostation. Has APCs, but power is not a concern for nuclear operatives. Also comes with atmos!" diff --git a/code/datums/shuttles/ruin.dm b/code/datums/shuttles/ruin.dm index 511e2d6ecdc88b..415a5ce6c9ee37 100644 --- a/code/datums/shuttles/ruin.dm +++ b/code/datums/shuttles/ruin.dm @@ -10,7 +10,7 @@ /datum/map_template/shuttle/ruin/caravan_victim suffix = "caravan_victim" name = "Small Freighter" - description = "Small freight vessel, starts near blacked-out with 3 Syndicate Commandos and 1 Syndicate Stormtrooper, alongside a large hull breach." + description = "Small freight vessel, starts near blacked-out with 3 Symphionia Commandos and 1 Symphionia Stormtrooper, alongside a large hull breach." /datum/map_template/shuttle/ruin/pirate_cutter suffix = "pirate_cutter" @@ -19,10 +19,10 @@ /datum/map_template/shuttle/ruin/syndicate_dropship suffix = "syndicate_dropship" - name = "Syndicate Dropship" - description = "Light Syndicate vessel with laser turrets. Spawns with a Syndicate mob in the bridge." + name = "Symphionia Dropship" + description = "Light Symphionia vessel with laser turrets. Spawns with a Symphionia mob in the bridge." /datum/map_template/shuttle/ruin/syndicate_fighter_shiv suffix = "syndicate_fighter_shiv" - name = "Syndicate Fighter" - description = "A small Syndicate vessel with exactly one tile of useful interior space and 4 laser turrets. Starts with a Syndicate mob in the pilot's seat, and extremely cramped." + name = "Symphionia Fighter" + description = "A small Symphionia vessel with exactly one tile of useful interior space and 4 laser turrets. Starts with a Symphionia mob in the pilot's seat, and extremely cramped." diff --git a/code/datums/shuttles/whiteship.dm b/code/datums/shuttles/whiteship.dm index 0b48575e057c23..c4267006701e4e 100644 --- a/code/datums/shuttles/whiteship.dm +++ b/code/datums/shuttles/whiteship.dm @@ -9,7 +9,7 @@ /datum/map_template/shuttle/whiteship/meta suffix = "meta" name = "Salvage Ship" - description = "Whiteship that focuses on a large cargo bay that players can build in. Spawns with Syndicate mobs who do not drop corpses and are highly aggressive." + description = "Whiteship that focuses on a large cargo bay that players can build in. Spawns with Symphionia mobs who do not drop corpses and are highly aggressive." /datum/map_template/shuttle/whiteship/pubby suffix = "pubby" @@ -39,7 +39,7 @@ /datum/map_template/shuttle/whiteship/tram suffix = "tram" name = "NT Long-Distance Bluespace Freighter" - description = "A long shuttle that starts with Nanotrasen private security corpses. DOES NOT FIT IN THE BASE DOCKS! Does fit in Deep Space's dock though." + description = "A long shuttle that starts with Symphionia private security corpses. DOES NOT FIT IN THE BASE DOCKS! Does fit in Deep Space's dock though." /datum/map_template/shuttle/whiteship/delta suffix = "delta" diff --git a/code/datums/skills/fitness.dm b/code/datums/skills/fitness.dm index c19a374893e836..b000b7c5897819 100644 --- a/code/datums/skills/fitness.dm +++ b/code/datums/skills/fitness.dm @@ -3,20 +3,23 @@ title = "Fitness" desc = "Twinkle twinkle little star, hit the gym and lift the bar." /// The skill value modifier effects the max duration that is possible for /datum/status_effect/exercised - modifiers = list(SKILL_VALUE_MODIFIER = list(2 MINUTES, 3 MINUTES, 4 MINUTES, 5 MINUTES, 6 MINUTES, 7 MINUTES, 10 MINUTES)) + modifiers = list(SKILL_VALUE_MODIFIER = list(1 MINUTES, 1.5 MINUTES, 2 MINUTES, 2.5 MINUTES, 3 MINUTES, 3.5 MINUTES, 5 MINUTES)) + /// How much bigger your mob becomes per level (these effects don't stack together) + var/static/size_boost = list(0, 1/16, 1/8, 3/16, 2/8, 3/8, 4/8) // skill_item_path - your mob sprite gets bigger to showoff so we don't get a special item -/* SKYRAT EDIT REMOVAL START - NO SIZE INCREASE +/* NOVA EDIT REMOVAL START - NO SIZE INCREASE /datum/skill/fitness/level_gained(datum/mind/mind, new_level, old_level, silent) . = ..() + var/old_gym_size = RESIZE_DEFAULT_SIZE + size_boost[old_level] + var/new_gym_size = RESIZE_DEFAULT_SIZE + size_boost[new_level] - var/size_boost = (new_level == SKILL_LEVEL_LEGENDARY) ? 0.25 : 0.05 - var/gym_size = RESIZE_DEFAULT_SIZE + size_boost - mind.current.update_transform(gym_size) + mind.current.update_transform(new_gym_size / old_gym_size) /datum/skill/fitness/level_lost(datum/mind/mind, new_level, old_level, silent) . = ..() - var/size_boost = (new_level == SKILL_LEVEL_LEGENDARY) ? 0.25 : 0.05 - var/gym_size = RESIZE_DEFAULT_SIZE + size_boost - mind.current.update_transform(RESIZE_DEFAULT_SIZE / gym_size) -SKYRAT EDIT REMOVAL END */ + var/old_gym_size = RESIZE_DEFAULT_SIZE + size_boost[old_level] + var/new_gym_size = RESIZE_DEFAULT_SIZE + size_boost[new_level] + + mind.current.update_transform(new_gym_size / old_gym_size) +NOVA EDIT REMOVAL END */ diff --git a/code/datums/sprite_accessories.dm b/code/datums/sprite_accessories.dm index e0e84baa190da0..385637b787a372 100644 --- a/code/datums/sprite_accessories.dm +++ b/code/datums/sprite_accessories.dm @@ -1,21 +1,21 @@ /* + * Hello and welcome to sprite_accessories: For sprite accessories, such as hair, + * facial hair, and possibly tattoos and stuff somewhere along the line. This file is + * intended to be friendly for people with little to no actual coding experience. + * The process of adding in new hairstyles has been made pain-free and easy to do. + * Enjoy! - Doohl + * + * + * Notice: This all gets automatically compiled in a list in dna.dm, so you do not + * have to define any UI values for sprite accessories manually for hair and facial + * hair. Just add in new hair types and the game will naturally adapt. + * + * !!WARNING!!: changing existing hair information can be VERY hazardous to savefiles, + * to the point where you may completely corrupt a server's savefiles. Please refrain + * from doing this unless you absolutely know what you are doing, and have defined a + * conversion in savefile.dm + */ - Hello and welcome to sprite_accessories: For sprite accessories, such as hair, - facial hair, and possibly tattoos and stuff somewhere along the line. This file is - intended to be friendly for people with little to no actual coding experience. - The process of adding in new hairstyles has been made pain-free and easy to do. - Enjoy! - Doohl - - - Notice: This all gets automatically compiled in a list in dna.dm, so you do not - have to define any UI values for sprite accessories manually for hair and facial - hair. Just add in new hair types and the game will naturally adapt. - - !!WARNING!!: changing existing hair information can be VERY hazardous to savefiles, - to the point where you may completely corrupt a server's savefiles. Please refrain - from doing this unless you absolutely know what you are doing, and have defined a - conversion in savefile.dm -*/ /proc/init_sprite_accessory_subtypes(prototype, list/L, list/male, list/female, add_blank)//Roundstart argument builds a specific list for roundstart parts where some parts may be locked if(!istype(L)) L = list() @@ -1169,7 +1169,7 @@ -/* SKYRAT EDIT REMOVAL START - Underwear and bra split +/* NOVA EDIT REMOVAL START - Underwear and bra split //FEMALE UNDERWEAR /datum/sprite_accessory/underwear/female_bikini name = "Bikini" @@ -1271,7 +1271,7 @@ icon_state = "female_kinky" gender = FEMALE use_static = TRUE -*/ // SKYRAT EDIT END +*/ // NOVA EDIT END //////////////////////////// // Undershirt Definitions // @@ -1384,7 +1384,7 @@ gender = NEUTER /datum/sprite_accessory/undershirt/nano - name = "Shirt (Nanotrasen)" + name = "Shirt (Symphionia)" icon_state = "shirt_nano" gender = NEUTER @@ -1467,7 +1467,7 @@ name = "Short-sleeved Shirt (White)" icon_state = "whiteshortsleeve" gender = NEUTER -/* SKYRAT EDIT REMOVAL START - Underwear and bra split +/* NOVA EDIT REMOVAL START - Underwear and bra split /datum/sprite_accessory/undershirt/sports_bra name = "Sports Bra" icon_state = "sports_bra" @@ -1477,7 +1477,7 @@ name = "Sports Bra (Alt)" icon_state = "sports_bra_alt" gender = NEUTER -*/ // SKYRAT EDIT END +*/ // NOVA EDIT END /datum/sprite_accessory/undershirt/blueshirtsport name = "Sports Shirt (Blue)" icon_state = "blueshirtsport" @@ -1776,6 +1776,10 @@ name = "Spikes" icon_state = "spikes" +/datum/sprite_accessory/tails/lizard/short + name = "Short" + icon_state = "short" + /datum/sprite_accessory/tails/human/cat name = "Cat" icon = 'icons/mob/human/cat_features.dmi' @@ -1783,11 +1787,13 @@ color_src = HAIR_COLOR /datum/sprite_accessory/tails/monkey - name = "Monkey" icon = 'icons/mob/human/species/monkey/monkey_tail.dmi' - icon_state = "monkey" color_src = FALSE +/datum/sprite_accessory/tails/monkey/standard + name = "Monkey" + icon_state = "monkey" + /datum/sprite_accessory/pod_hair icon = 'icons/mob/human/species/podperson_hair.dmi' em_block = TRUE @@ -2043,6 +2049,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/human/species/lizard/lizard_misc.dmi' @@ -2110,11 +2131,11 @@ name = "Long + Membrane" icon_state = "longmeme" -/datum/sprite_accessory/spines/aqautic +/datum/sprite_accessory/spines/aquatic name = "Aquatic" icon_state = "aqua" -/datum/sprite_accessory/spines_animated/aqautic +/datum/sprite_accessory/spines_animated/aquatic name = "Aquatic" icon_state = "aqua" diff --git a/code/datums/station_traits/_station_trait.dm b/code/datums/station_traits/_station_trait.dm index 1205673c565f9b..8e8303c0366810 100644 --- a/code/datums/station_traits/_station_trait.dm +++ b/code/datums/station_traits/_station_trait.dm @@ -65,9 +65,9 @@ qdel(src) ///Called by decals if they can be colored, to see if we got some cool colors for them. Only takes the first station trait -/proc/request_station_colors(atom/thing_to_color, pattern = PATTERN_DEFAULT) +/proc/request_station_colors(atom/thing_to_color, pattern) for(var/datum/station_trait/trait in SSstation.station_traits) - var/decal_color = trait.get_decal_color(thing_to_color, pattern) + var/decal_color = trait.get_decal_color(thing_to_color, pattern || PATTERN_DEFAULT) if(decal_color) return decal_color return null diff --git a/code/datums/station_traits/negative_traits.dm b/code/datums/station_traits/negative_traits.dm index f6e3ffbdd51417..7b0ecf5b097b88 100644 --- a/code/datums/station_traits/negative_traits.dm +++ b/code/datums/station_traits/negative_traits.dm @@ -17,6 +17,30 @@ /datum/station_trait/distant_supply_lines/on_round_start() SSeconomy.pack_price_modifier *= 1.2 +///A negative trait that stops mail from arriving (or the inverse if on holiday). It also enables a specific shuttle loan situation. +/datum/station_trait/mail_blocked + name = "Postal workers strike" + trait_type = STATION_TRAIT_NEGATIVE + weight = 2 + show_in_report = TRUE + report_message = "Due to an ongoing strike announced by the postal workers union, mail won't be delivered this shift." + +/datum/station_trait/mail_blocked/on_round_start() + //This is either a holiday or sunday... well then, let's flip the situation. + if(SSeconomy.mail_blocked) + name = "Postal system overtime" + report_message = "Despite being a day off, the postal system is working overtime today. Mail will be delivered this shift." + else + var/datum/round_event_control/shuttle_loan/our_event = locate() in SSevents.control + our_event.unavailable_situations -= /datum/shuttle_loan_situation/mail_strike + SSeconomy.mail_blocked = !SSeconomy.mail_blocked + +/datum/station_trait/mail_blocked/hangover/revert() + var/datum/round_event_control/shuttle_loan/our_event = locate() in SSevents.control + our_event.unavailable_situations |= /datum/shuttle_loan_situation/mail_strike + SSeconomy.mail_blocked = !SSeconomy.mail_blocked + return ..() + ///A negative trait that reduces the amount of products available from vending machines throughout the station. /datum/station_trait/vending_shortage name = "Vending products shortage" @@ -156,7 +180,7 @@ /datum/station_trait/bot_languages/on_round_start() . = ..() // All bots that exist round start on station Z OR on the escape shuttle have their set language randomized. - for(var/mob/living/simple_animal/bot/found_bot as anything in GLOB.bots_list) + for(var/mob/living/found_bot as anything in GLOB.bots_list) found_bot.randomize_language_if_on_station() /datum/station_trait/revenge_of_pun_pun @@ -458,6 +482,11 @@ var/list/shielding = list() /datum/station_trait/nebula/hostile/process(seconds_per_tick) + // NOVA EDIT ADDITION START + if(!storms_enabled) + get_shielding_level() // So shields still produce tritium + return + // NOVA EDIT ADDITION END calculate_nebula_strength() apply_nebula_effect(nebula_intensity - get_shielding_level()) @@ -473,7 +502,7 @@ ///Calculate how strong we currently are /datum/station_trait/nebula/hostile/proc/calculate_nebula_strength() - nebula_intensity = min(STATION_TIME_PASSED() / intensity_increment_time, maximum_nebula_intensity) + nebula_intensity = min(STATION_TIME_PASSED(), maximum_nebula_intensity) / intensity_increment_time ///Check how strong the stations shielding is /datum/station_trait/nebula/hostile/proc/get_shielding_level() @@ -523,7 +552,7 @@ threat_reduction = 30 dynamic_threat_id = "Radioactive Nebula" - intensity_increment_time = 10 MINUTES // SKYRAT EDIT longer shield duration - ORIGINAL: intensity_increment_time = 5 MINUTES / + intensity_increment_time = 10 MINUTES // NOVA EDIT longer shield duration - ORIGINAL: intensity_increment_time = 5 MINUTES / maximum_nebula_intensity = 1 HOURS + 40 MINUTES nebula_layer = /atom/movable/screen/parallax_layer/random/space_gas/radioactive @@ -594,7 +623,7 @@ /datum/station_trait/nebula/hostile/radiation/apply_nebula_effect(effect_strength = 0) //big bombad now - if(effect_strength > 0) + if(effect_strength > 0 && !SSmapping.is_planetary()) //admins can force this if(!SSweather.get_weather_by_type(/datum/weather/rad_storm/nebula)) COOLDOWN_START(src, send_care_package_at, send_care_package_time) SSweather.run_weather(/datum/weather/rad_storm/nebula) @@ -624,6 +653,7 @@ new /obj/effect/pod_landingzone (get_safe_random_station_turf(), new /obj/structure/closet/supplypod/centcompod (), new /obj/machinery/nebula_shielding/emergency/radiation ()) /datum/station_trait/nebula/hostile/radiation/send_instructions() + /* NOVA EDIT REMOVAL START - No more radiation storms on station var/obj/machinery/nebula_shielding/shielder = /obj/machinery/nebula_shielding/radiation var/obj/machinery/gravity_generator/main/innate_shielding = /obj/machinery/gravity_generator/main //How long do we have untill the first shielding unit needs to be up? @@ -642,6 +672,12 @@ You have [deadline] before the nebula enters the station. \ Every shielding unit will provide an additional [shielder_time] of protection, fully protecting the station with [max_shielders] shielding units. "} + NOVA EDIT REMOVAL END */ + // NOVA EDIT CHANGE START - ORIGINAL: See above + var/announcement = {"Your station has been constructed inside a radioactive nebula. \ + Standard spacesuits will not protect against the nebula and using them is strongly discouraged. + "} + // NOVA EDIT CHANGE END priority_announce(announcement, sound = 'sound/misc/notice1.ogg') diff --git a/code/datums/station_traits/neutral_traits.dm b/code/datums/station_traits/neutral_traits.dm index 8402c70236baae..a8c0e001ad55d6 100644 --- a/code/datums/station_traits/neutral_traits.dm +++ b/code/datums/station_traits/neutral_traits.dm @@ -200,7 +200,7 @@ trait_type = STATION_TRAIT_NEUTRAL weight = 2 show_in_report = TRUE - report_message = "We here at Nanotrasen would all like to wish Employee Name a very happy birthday" + report_message = "We here at Symphionia would all like to wish Employee Name a very happy birthday" trait_to_give = STATION_TRAIT_BIRTHDAY blacklist = list(/datum/station_trait/announcement_intern, /datum/station_trait/announcement_medbot) //Overiding the annoucer hides the birthday person in the annoucement message. ///Variable that stores a reference to the person selected to have their birthday celebrated. @@ -251,8 +251,8 @@ /datum/station_trait/birthday/proc/announce_birthday() - report_message = "We here at Nanotrasen would all like to wish [birthday_person ? birthday_person_name : "Employee Name"] a very happy birthday" - priority_announce("Happy birthday to [birthday_person ? birthday_person_name : "Employee Name"]! Nanotrasen wishes you a very happy [birthday_person ? thtotext(birthday_person.age + 1) : "255th"] birthday.") + report_message = "We here at Symphionia would all like to wish [birthday_person ? birthday_person_name : "Employee Name"] a very happy birthday" + priority_announce("Happy birthday to [birthday_person ? birthday_person_name : "Employee Name"]! Symphionia wishes you a very happy [birthday_person ? thtotext(birthday_person.age + 1) : "255th"] birthday.") if(birthday_person) playsound(birthday_person, 'sound/items/party_horn.ogg', 50) birthday_person.add_mood_event("birthday", /datum/mood_event/birthday) @@ -326,6 +326,77 @@ greyscale_config = /datum/greyscale_config/festive_hat greyscale_config_worn = /datum/greyscale_config/festive_hat/worn +/datum/station_trait/scarves + name = "Scarves" + trait_type = STATION_TRAIT_NEUTRAL + weight = 10 + show_in_report = TRUE + var/list/scarves + +/datum/station_trait/scarves/New() + . = ..() + report_message = pick( + "Nanotrasen is experimenting with seeing if neck warmth improves employee morale.", + "After Space Fashion Week, scarves are the hot new accessory.", + "Everyone was simultaneously a little bit cold when they packed to go to the station.", + "The station is definitely not under attack by neck grappling aliens masquerading as wool. Definitely not.", + "You all get free scarves. Don't ask why.", + "A shipment of scarves was delivered to the station.", + ) + scarves = typesof(/obj/item/clothing/neck/scarf) + list( + /obj/item/clothing/neck/large_scarf/red, + /obj/item/clothing/neck/large_scarf/green, + /obj/item/clothing/neck/large_scarf/blue, + ) + + RegisterSignal(SSdcs, COMSIG_GLOB_JOB_AFTER_SPAWN, PROC_REF(on_job_after_spawn)) + + +/datum/station_trait/scarves/proc/on_job_after_spawn(datum/source, datum/job/job, mob/living/spawned, client/player_client) + SIGNAL_HANDLER + var/scarf_type = pick(scarves) + + spawned.equip_to_slot_or_del(new scarf_type(spawned), ITEM_SLOT_NECK, initial = FALSE) + +/datum/station_trait/wallets + name = "Wallets!" + trait_type = STATION_TRAIT_NEUTRAL + show_in_report = TRUE + weight = 10 + report_message = "It has become temporarily fashionable to use a wallet, so everyone on the station has been issued one." + +/datum/station_trait/wallets/New() + . = ..() + RegisterSignal(SSdcs, COMSIG_GLOB_JOB_AFTER_SPAWN, PROC_REF(on_job_after_spawn)) + +/datum/station_trait/wallets/proc/on_job_after_spawn(datum/source, datum/job/job, mob/living/living_mob, mob/M, joined_late) + SIGNAL_HANDLER + + var/obj/item/card/id/advanced/id_card = living_mob.get_item_by_slot(ITEM_SLOT_ID) + if(!istype(id_card)) + return + + living_mob.temporarilyRemoveItemFromInventory(id_card, force=TRUE) + + // "Doc, what's wrong with me?" + var/obj/item/storage/wallet/wallet = new(src) + // "You've got a wallet embedded in your chest." + wallet.add_fingerprint(living_mob, ignoregloves = TRUE) + + living_mob.equip_to_slot_if_possible(wallet, ITEM_SLOT_ID, initial=TRUE) + + id_card.forceMove(wallet) + + var/holochip_amount = id_card.registered_account.account_balance + new /obj/item/holochip(wallet, holochip_amount) + id_card.registered_account.adjust_money(-holochip_amount, "System: Withdrawal") + + new /obj/effect/spawner/random/entertainment/wallet_storage(wallet) + + // Put our filthy fingerprints all over the contents + for(var/obj/item/item in wallet) + item.add_fingerprint(living_mob, ignoregloves = TRUE) + /// Tells the area map generator to ADD MORE TREEEES /datum/station_trait/forested name = "Forested" @@ -336,3 +407,26 @@ show_in_report = TRUE report_message = "There sure are a lot of trees out there." +/datum/station_trait/triple_ai + name = "AI Triumvirate" + trait_type = STATION_TRAIT_NEUTRAL + show_in_report = TRUE + weight = 0 // NOVA EDIT Original = 1 + report_message = "Your station has been instated with three Nanotrasen Artificial Intelligence models." + +/datum/station_trait/triple_ai/New() + . = ..() + RegisterSignal(SSjob, COMSIG_OCCUPATIONS_DIVIDED, PROC_REF(on_occupations_divided)) + +/datum/station_trait/triple_ai/revert() + UnregisterSignal(SSjob, COMSIG_OCCUPATIONS_DIVIDED) + return ..() + +/datum/station_trait/triple_ai/proc/on_occupations_divided(datum/source, pure, allow_all) + SIGNAL_HANDLER + + for(var/datum/job/ai/ai_datum in SSjob.joinable_occupations) + ai_datum.spawn_positions = 3 + if(!pure) + for(var/obj/effect/landmark/start/ai/secondary/secondary_ai_spawn in GLOB.start_landmarks_list) + secondary_ai_spawn.latejoin_active = TRUE diff --git a/code/datums/station_traits/positive_traits.dm b/code/datums/station_traits/positive_traits.dm index 7c36ed24db9e1a..c652c55400ac90 100644 --- a/code/datums/station_traits/positive_traits.dm +++ b/code/datums/station_traits/positive_traits.dm @@ -72,39 +72,6 @@ /datum/station_trait/strong_supply_lines/on_round_start() SSeconomy.pack_price_modifier *= 0.8 -/datum/station_trait/scarves - name = "Scarves" - trait_type = STATION_TRAIT_POSITIVE - weight = 5 - show_in_report = TRUE - var/list/scarves - -/datum/station_trait/scarves/New() - . = ..() - report_message = pick( - "Nanotrasen is experimenting with seeing if neck warmth improves employee morale.", - "After Space Fashion Week, scarves are the hot new accessory.", - "Everyone was simultaneously a little bit cold when they packed to go to the station.", - "The station is definitely not under attack by neck grappling aliens masquerading as wool. Definitely not.", - "You all get free scarves. Don't ask why.", - "A shipment of scarves was delivered to the station.", - ) - scarves = typesof(/obj/item/clothing/neck/scarf) + list( - /obj/item/clothing/neck/large_scarf/red, - /obj/item/clothing/neck/large_scarf/green, - /obj/item/clothing/neck/large_scarf/blue, - ) - - RegisterSignal(SSdcs, COMSIG_GLOB_JOB_AFTER_SPAWN, PROC_REF(on_job_after_spawn)) - - -/datum/station_trait/scarves/proc/on_job_after_spawn(datum/source, datum/job/job, mob/living/spawned, client/player_client) - SIGNAL_HANDLER - var/scarf_type = pick(scarves) - - spawned.equip_to_slot_or_del(new scarf_type(spawned), ITEM_SLOT_NECK, initial = FALSE) - - /datum/station_trait/filled_maint name = "Filled up maintenance" trait_type = STATION_TRAIT_POSITIVE @@ -231,46 +198,6 @@ deathrattle_group.register(implant_to_give) implant_to_give.implant(spawned, spawned, TRUE, TRUE) - -/datum/station_trait/wallets - name = "Wallets!" - trait_type = STATION_TRAIT_POSITIVE - show_in_report = TRUE - weight = 10 - report_message = "It has become temporarily fashionable to use a wallet, so everyone on the station has been issued one." - -/datum/station_trait/wallets/New() - . = ..() - RegisterSignal(SSdcs, COMSIG_GLOB_JOB_AFTER_SPAWN, PROC_REF(on_job_after_spawn)) - -/datum/station_trait/wallets/proc/on_job_after_spawn(datum/source, datum/job/job, mob/living/living_mob, mob/M, joined_late) - SIGNAL_HANDLER - - var/obj/item/card/id/advanced/id_card = living_mob.get_item_by_slot(ITEM_SLOT_ID) - if(!istype(id_card)) - return - - living_mob.temporarilyRemoveItemFromInventory(id_card, force=TRUE) - - // "Doc, what's wrong with me?" - var/obj/item/storage/wallet/wallet = new(src) - // "You've got a wallet embedded in your chest." - wallet.add_fingerprint(living_mob, ignoregloves = TRUE) - - living_mob.equip_to_slot_if_possible(wallet, ITEM_SLOT_ID, initial=TRUE) - - id_card.forceMove(wallet) - - var/holochip_amount = id_card.registered_account.account_balance - new /obj/item/holochip(wallet, holochip_amount) - id_card.registered_account.adjust_money(-holochip_amount, "System: Withdrawal") - - new /obj/effect/spawner/random/entertainment/wallet_storage(wallet) - - // Put our filthy fingerprints all over the contents - for(var/obj/item/item in wallet) - item.add_fingerprint(living_mob, ignoregloves = TRUE) - /datum/station_trait/cybernetic_revolution name = "Cybernetic Revolution" trait_type = STATION_TRAIT_POSITIVE @@ -315,7 +242,7 @@ /datum/job/station_engineer = /obj/item/organ/internal/cyberimp/arm/toolset, /datum/job/virologist = /obj/item/organ/internal/lungs/cybernetic/tier2, /datum/job/warden = /obj/item/organ/internal/cyberimp/eyes/hud/security, - // SKYRAT EDIT ADDITION START - MODULAR JOBS + // NOVA EDIT ADDITION START - MODULAR JOBS /datum/job/blueshield = /obj/item/organ/internal/cyberimp/brain/anti_stun, /datum/job/nanotrasen_consultant = /obj/item/organ/internal/heart/cybernetic/tier3, /datum/job/barber = /obj/item/organ/internal/ears/cybernetic/whisper, @@ -325,7 +252,7 @@ /datum/job/customs_agent = /obj/item/organ/internal/cyberimp/eyes/hud/security, /datum/job/bouncer = /obj/item/organ/internal/cyberimp/arm/muscle, /datum/job/engineering_guard = /obj/item/organ/internal/cyberimp/arm/flash, - // SKYRAT EDIT END + // NOVA EDIT END ) /datum/station_trait/cybernetic_revolution/New() @@ -345,7 +272,7 @@ ai.eyeobj.relay_speech = TRUE //surveillance upgrade. the ai gets cybernetics too. return var/obj/item/organ/internal/cybernetic = new cybernetic_type() - cybernetic.Insert(spawned, special = TRUE, drop_if_replaced = FALSE) + cybernetic.Insert(spawned, special = TRUE, movement_flags = DELETE_IF_REPLACED) /datum/station_trait/luxury_escape_pods name = "Luxury Escape Pods" @@ -361,12 +288,12 @@ trait_type = STATION_TRAIT_POSITIVE weight = 5 show_in_report = TRUE - report_message = "Your station's medibots have recieved a hardware upgrade, enabling expanded healing capabilities." + report_message = "Your station's medibots have received a hardware upgrade, enabling expanded healing capabilities." trait_to_give = STATION_TRAIT_MEDBOT_MANIA /datum/station_trait/random_event_weight_modifier/shuttle_loans name = "Loaner Shuttle" - report_message = "Due to an uptick in pirate attacks around your sector, there are few supply vessels in nearby space willing to assist with special requests. Expect to recieve more shuttle loan opportunities, with slightly higher payouts." + report_message = "Due to an uptick in pirate attacks around your sector, there are few supply vessels in nearby space willing to assist with special requests. Expect to receive more shuttle loan opportunities, with slightly higher payouts." trait_type = STATION_TRAIT_POSITIVE weight = 4 event_control_path = /datum/round_event_control/shuttle_loan diff --git a/code/datums/status_effects/agent_pinpointer.dm b/code/datums/status_effects/agent_pinpointer.dm index b6d68ccf867bcc..29dfbd43387827 100644 --- a/code/datums/status_effects/agent_pinpointer.dm +++ b/code/datums/status_effects/agent_pinpointer.dm @@ -5,7 +5,7 @@ /atom/movable/screen/alert/status_effect/agent_pinpointer name = "Target Integrated Pinpointer" desc = "Even stealthier than a normal implant, it points to any assassination target you have." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tracker.dmi' icon_state = "pinon" /datum/status_effect/agent_pinpointer diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 027711e20accd7..fe8deeef337e64 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -50,7 +50,6 @@ need_mob_update += owner.adjustFireLoss(-grace_heal * seconds_between_ticks, updating_health = FALSE, forced = TRUE) need_mob_update += owner.adjustToxLoss(-grace_heal * seconds_between_ticks, forced = TRUE) need_mob_update += owner.adjustOxyLoss(-(grace_heal * 2) * seconds_between_ticks, updating_health = FALSE, forced = TRUE) - need_mob_update += owner.adjustCloneLoss(-grace_heal * seconds_between_ticks, updating_health = FALSE, forced = TRUE) if(need_mob_update) owner.updatehealth() @@ -92,7 +91,6 @@ human_owner.physiology.burn_mod *= 0.1 human_owner.physiology.tox_mod *= 0.1 human_owner.physiology.oxy_mod *= 0.1 - human_owner.physiology.clone_mod *= 0.1 human_owner.physiology.stamina_mod *= 0.1 owner.add_stun_absorption(source = id, priority = 4) owner.playsound_local(get_turf(owner), 'sound/effects/singlebeat.ogg', 40, 1, use_reverb = FALSE) @@ -105,7 +103,6 @@ human_owner.physiology.burn_mod *= 10 human_owner.physiology.tox_mod *= 10 human_owner.physiology.oxy_mod *= 10 - human_owner.physiology.clone_mod *= 10 human_owner.physiology.stamina_mod *= 10 REMOVE_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, BLOODDRUNK_TRAIT) owner.remove_stun_absorption(id) @@ -165,30 +162,33 @@ /datum/status_effect/exercised id = "Exercised" - duration = 30 SECONDS + duration = 15 SECONDS status_type = STATUS_EFFECT_REFRESH // New effects will add to total duration alert_type = null processing_speed = STATUS_EFFECT_NORMAL_PROCESS alert_type = /atom/movable/screen/alert/status_effect/exercised /// Having any of these reagents in your system extends the duration var/static/list/supplementary_reagents_bonus = list( - /datum/reagent/consumable/ethanol/protein_blend = 30 SECONDS, // protein shakes are very robust - /datum/reagent/consumable/eggwhite = 20 SECONDS, - /datum/reagent/consumable/eggyolk = 15 SECONDS, - /datum/reagent/consumable/nutriment/protein = 15 SECONDS, - /datum/reagent/consumable/nutriment/vitamin = 10 SECONDS, - /datum/reagent/consumable/rice = 10 SECONDS, - /datum/reagent/consumable/milk = 10 SECONDS, - /datum/reagent/consumable/soymilk = 5 SECONDS, // darn vegans! - /datum/reagent/consumable/nutraslop = 5 SECONDS, // prison food to bulk up with + /datum/reagent/consumable/ethanol/protein_blend = 10 SECONDS, // protein shakes are very robust + /datum/reagent/inverse/oxandrolone = 8 SECONDS, + /datum/reagent/consumable/nutriment/protein = 5 SECONDS, + /datum/reagent/consumable/nutriment/vitamin = 4 SECONDS, + /datum/reagent/consumable/milk = 4 SECONDS, + /datum/reagent/consumable/rice = 3 SECONDS, + // keep in mind you can eat a raw egg to acquire both these reagents at the same time + /datum/reagent/consumable/eggwhite = 3 SECONDS, + /datum/reagent/consumable/eggyolk = 2 SECONDS, + // weak workout food + /datum/reagent/consumable/nutraslop = 2 SECONDS, // prison food to bulk up with + /datum/reagent/consumable/soymilk = 1 SECONDS, // darn vegans! // time for the bad stuff - /datum/reagent/consumable/sugar = -5 SECONDS, - /datum/reagent/consumable/monkey_energy = -5 SECONDS, - /datum/reagent/consumable/nutriment/fat = -5 SECONDS, + /datum/reagent/consumable/sugar = -1 SECONDS, + /datum/reagent/consumable/monkey_energy = -1 SECONDS, // the marketing was a lie + /datum/reagent/consumable/nutriment/fat = -1 SECONDS, ) /datum/status_effect/exercised/proc/workout_duration(mob/living/new_owner, bonus_time) - if(!bonus_time || !new_owner.mind) + if(!bonus_time || !new_owner.mind || !iscarbon(new_owner)) return 0 SECONDS var/modifier = 1 @@ -201,12 +201,15 @@ if(new_owner.reagents.has_reagent(/datum/reagent/drug/pumpup)) // steriods? yes please! modifier += 3 + if(new_owner.reagents.has_reagent(/datum/reagent/inverse/oxandrolone)) // MOREEEEE + modifier += 2 + var/food_boost = 0 for(var/datum/reagent/workout_reagent in supplementary_reagents_bonus) if(new_owner.reagents.has_reagent(workout_reagent)) food_boost += supplementary_reagents_bonus[workout_reagent] - var/skill_level_boost = (new_owner.mind.get_skill_level(/datum/skill/fitness) - 1) * 5 SECONDS + var/skill_level_boost = (new_owner.mind.get_skill_level(/datum/skill/fitness) - 1) * 2 SECONDS bonus_time = (bonus_time + food_boost + skill_level_boost) * modifier var/exhaustion_limit = new_owner.mind.get_skill_modifier(/datum/skill/fitness, SKILL_VALUE_MODIFIER) + world.time @@ -218,15 +221,21 @@ return bonus_time -/datum/status_effect/exercised/tick(seconds_between_ticks) - owner.reagents.metabolize(owner, seconds_between_ticks * SSMOBS_DT, 0) // doubles the metabolization rate - /datum/status_effect/exercised/on_creation(mob/living/new_owner, bonus_time) duration += workout_duration(new_owner, bonus_time) return ..() /datum/status_effect/exercised/refresh(mob/living/new_owner, bonus_time) duration += workout_duration(new_owner, bonus_time) + new_owner.clear_mood_event("exercise") // we need to reset the old mood event in case our fitness skill changes + new_owner.add_mood_event("exercise", /datum/mood_event/exercise, new_owner.mind.get_skill_level(/datum/skill/fitness)) + +/datum/status_effect/exercised/on_apply() + owner.add_mood_event("exercise", /datum/mood_event/exercise, owner.mind.get_skill_level(/datum/skill/fitness)) + return ..() + +/datum/status_effect/exercised/on_remove() + owner.clear_mood_event("exercise") /atom/movable/screen/alert/status_effect/exercised name = "Exercise" @@ -258,7 +267,6 @@ toxin_heal = 1.4, \ suffocation_heal = 1.4, \ stamina_heal = 1.4, \ - clone_heal = 0.4, \ simple_heal = 1.4, \ organ_healing = organ_healing, \ healing_color = "#375637", \ @@ -329,7 +337,6 @@ need_mob_update += itemUser.adjustOxyLoss(-0.6 * seconds_between_ticks, updating_health = FALSE, forced = TRUE) need_mob_update += itemUser.adjustStaminaLoss(-0.6 * seconds_between_ticks, updating_stamina = FALSE, forced = TRUE) need_mob_update += itemUser.adjustOrganLoss(ORGAN_SLOT_BRAIN, -0.6 * seconds_between_ticks) - need_mob_update += itemUser.adjustCloneLoss(-0.2 * seconds_between_ticks, updating_health = FALSE, forced = TRUE) //Because apparently clone damage is the bastion of all health if(need_mob_update) itemUser.updatehealth() @@ -373,7 +380,7 @@ /datum/status_effect/regenerative_core/on_apply() ADD_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, STATUS_EFFECT_TRAIT) owner.adjustBruteLoss(-25) - owner.adjustStaminaLoss(-40) //Skyrat edit. Removes stamina on usage of regen core. + owner.adjustStaminaLoss(-40) //NOVA EDIT. Removes stamina on usage of regen core. owner.adjustFireLoss(-25) owner.fully_heal(HEAL_CC_STATUS) owner.bodytemperature = owner.get_body_temp_normal() @@ -552,13 +559,12 @@ owner_physiology.burn_mod *= 0.5 owner_physiology.tox_mod *= 0.5 owner_physiology.oxy_mod *= 0.5 - owner_physiology.clone_mod *= 0.5 owner_physiology.stamina_mod *= 0.5 owner.add_filter("mad_glow", 2, list("type" = "outline", "color" = "#eed811c9", "size" = 2)) owner.AddElement(/datum/element/forced_gravity, 0) owner.AddElement(/datum/element/simple_flying) owner.add_stun_absorption(source = id, priority = 4) - add_traits(list(TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_FREE_HYPERSPACE_MOVEMENT), MAD_WIZARD_TRAIT) + owner.add_traits(list(TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_FREE_HYPERSPACE_MOVEMENT), MAD_WIZARD_TRAIT) owner.playsound_local(get_turf(owner), 'sound/chemistry/ahaha.ogg', vol = 100, vary = TRUE, use_reverb = TRUE) return TRUE @@ -570,13 +576,12 @@ owner_physiology.burn_mod *= 2 owner_physiology.tox_mod *= 2 owner_physiology.oxy_mod *= 2 - owner_physiology.clone_mod *= 2 owner_physiology.stamina_mod *= 2 owner.remove_filter("mad_glow") owner.RemoveElement(/datum/element/forced_gravity, 0) owner.RemoveElement(/datum/element/simple_flying) owner.remove_stun_absorption(id) - remove_traits(list(TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_FREE_HYPERSPACE_MOVEMENT), MAD_WIZARD_TRAIT) + owner.remove_traits(list(TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_FREE_HYPERSPACE_MOVEMENT), MAD_WIZARD_TRAIT) /// Gives you a brief period of anti-gravity /datum/status_effect/jump_jet 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 00000000000000..43d37654e61775 --- /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/blindness.dm b/code/datums/status_effects/debuffs/blindness.dm index 65354643123d44..e36f2e45dfaba0 100644 --- a/code/datums/status_effects/debuffs/blindness.dm +++ b/code/datums/status_effects/debuffs/blindness.dm @@ -10,7 +10,7 @@ // This is not "remove on fullheal" as in practice, // fullheal should instead remove all the sources and in turn cure this - /// Static list of signals that, when recieved, we force an update to our nearsighted overlay + /// Static list of signals that, when received, we force an update to our nearsighted overlay var/static/list/update_signals = list(SIGNAL_ADDTRAIT(TRAIT_NEARSIGHTED_CORRECTED), SIGNAL_REMOVETRAIT(TRAIT_NEARSIGHTED_CORRECTED)) /// How severe is our nearsightedness right now var/overlay_severity = 1 diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm index 1ddcb57feaf0aa..a3c52f2e20480e 100644 --- a/code/datums/status_effects/debuffs/debuffs.dm +++ b/code/datums/status_effects/debuffs/debuffs.dm @@ -278,8 +278,8 @@ . = ..() if(!.) return - owner.add_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED, TRAIT_NUMBED), TRAIT_STATUS_EFFECT(id))//SKYRAT EDIT START - STASIS APPLIES NUMBING - owner.throw_alert("stasis numbed", /atom/movable/screen/alert/numbed) //SKYRAT EDIT END + owner.add_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED, TRAIT_STASIS, TRAIT_NUMBED), TRAIT_STATUS_EFFECT(id)) // NOVA EDIT CHANGE - ORIGINAL: owner.add_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED, TRAIT_STASIS), TRAIT_STATUS_EFFECT(id)) + owner.throw_alert("stasis numbed", /atom/movable/screen/alert/numbed) //NOVA EDIT ADDITION - STASIS APPLIES NUMBED owner.add_filter("stasis_status_ripple", 2, list("type" = "ripple", "flags" = WAVE_BOUNDED, "radius" = 0, "size" = 2)) var/filter = owner.get_filter("stasis_status_ripple") animate(filter, radius = 0, time = 0.2 SECONDS, size = 2, easing = JUMP_EASING, loop = -1, flags = ANIMATION_PARALLEL) @@ -290,12 +290,12 @@ /datum/status_effect/grouped/stasis/tick(seconds_between_ticks) update_time_of_death() - if(owner.stat >= UNCONSCIOUS) //SKYRAT EDIT START - STASIS KEEPS SLEEP GOING - owner.Sleeping(15 SECONDS) //SKYRAT EDIT END + if(owner.stat >= UNCONSCIOUS) //NOVA EDIT START - STASIS KEEPS SLEEP GOING + owner.Sleeping(15 SECONDS) //NOVA EDIT END /datum/status_effect/grouped/stasis/on_remove() - owner.remove_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED, TRAIT_NUMBED), TRAIT_STATUS_EFFECT(id)) //SKYRAT EDIT START - STASIS END REMOVES NUMBING - owner.clear_alert("stasis numbed") //SKYRAT EDIT END + owner.remove_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED, TRAIT_STASIS, TRAIT_NUMBED), TRAIT_STATUS_EFFECT(id)) // NOVA EDIT CHANGE - ORIGINAL: owner.remove_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED, TRAIT_STASIS), TRAIT_STATUS_EFFECT(id)) + owner.clear_alert("stasis numbed") //NOVA EDIT ADDITION - STASIS APPLIED NUMBED owner.remove_filter("stasis_status_ripple") update_time_of_death() if(iscarbon(owner)) @@ -741,6 +741,13 @@ alert_type = null var/msg_stage = 0//so you dont get the most intense messages immediately +/datum/status_effect/fake_virus/on_apply() + if(HAS_TRAIT(owner, TRAIT_VIRUSIMMUNE)) + return FALSE + if(owner.stat != CONSCIOUS) + return FALSE + return TRUE + /datum/status_effect/fake_virus/tick(seconds_between_ticks) var/fake_msg = "" var/fake_emote = "" @@ -1006,7 +1013,7 @@ victim.blood_volume -= 5 * seconds_between_ticks // This has been hell to try and balance so that you'll actually get anything out of it victim.reagents.add_reagent(/datum/reagent/gold/cursed, amount = seconds_between_ticks * goldscale, no_react = TRUE) - var/current_gold_amount = victim.reagents.get_reagent_amount(/datum/reagent/gold, include_subtypes = TRUE) + var/current_gold_amount = victim.reagents.get_reagent_amount(/datum/reagent/gold, type_check = REAGENT_SUB_TYPE) switch(current_gold_amount) if(-INFINITY to 50) victim.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/midas_blight/soft, update = TRUE) diff --git a/code/datums/status_effects/debuffs/dna_transformation.dm b/code/datums/status_effects/debuffs/dna_transformation.dm new file mode 100644 index 00000000000000..33b6eb1d91344e --- /dev/null +++ b/code/datums/status_effects/debuffs/dna_transformation.dm @@ -0,0 +1,91 @@ +/// Transforms a carbon mob into a new DNA for a set amount of time, +/// then turns them back to how they were before transformation. +/datum/status_effect/temporary_transformation + id = "temp_dna_transformation" + tick_interval = -1 + duration = 1 MINUTES // set in on creation, this just needs to be any value to process + alert_type = null + /// A reference to a COPY of the DNA that the mob will be transformed into. + var/datum/dna/new_dna + /// A reference to a COPY of the DNA of the mob prior to transformation. + var/datum/dna/old_dna + +/datum/status_effect/temporary_transformation/Destroy() + . = ..() // parent must be called first, so we clear DNA refs AFTER transforming back... yeah i know + QDEL_NULL(new_dna) + QDEL_NULL(old_dna) + +/datum/status_effect/temporary_transformation/on_creation(mob/living/new_owner, new_duration = 1 MINUTES, datum/dna/dna_to_copy) + src.duration = (new_duration == INFINITY) ? -1 : new_duration + src.new_dna = new() + src.old_dna = new() + dna_to_copy.copy_dna(new_dna) + return ..() + +/datum/status_effect/temporary_transformation/on_apply() + if(!iscarbon(owner)) + return FALSE + + var/mob/living/carbon/transforming = owner + if(!transforming.has_dna()) + return FALSE + + // Save the old DNA + transforming.dna.copy_dna(old_dna) + // Makes them into the new DNA + new_dna.transfer_identity(transforming) + transforming.real_name = new_dna.real_name + transforming.name = transforming.get_visible_name() + transforming.updateappearance(mutcolor_update = TRUE) + transforming.domutcheck() + return TRUE + +/datum/status_effect/temporary_transformation/on_remove() + var/mob/living/carbon/transforming = owner + + if(!QDELING(owner)) // Don't really need to do appearance stuff if we're being deleted + old_dna.transfer_identity(transforming) + transforming.updateappearance(mutcolor_update = TRUE) + transforming.domutcheck() + + transforming.real_name = old_dna.real_name // Name is fine though + transforming.name = transforming.get_visible_name() + +/datum/status_effect/temporary_transformation/trans_sting + /// Tracks the time left on the effect when the owner last died. Used to pause the effect. + var/time_before_pause = -1 + /// Signals which we react to to determine if we should pause the effect. + var/static/list/update_on_signals = list( + COMSIG_MOB_STATCHANGE, + SIGNAL_ADDTRAIT(TRAIT_STASIS), + SIGNAL_REMOVETRAIT(TRAIT_STASIS), + SIGNAL_ADDTRAIT(TRAIT_DEATHCOMA), + SIGNAL_REMOVETRAIT(TRAIT_DEATHCOMA), + ) + +/datum/status_effect/temporary_transformation/trans_sting/on_apply() + . = ..() + if(!.) + return + RegisterSignals(owner, update_on_signals, PROC_REF(pause_effect)) + pause_effect(owner) // for if we sting a dead guy + +/datum/status_effect/temporary_transformation/trans_sting/on_remove() + . = ..() + UnregisterSignal(owner, update_on_signals) + +/datum/status_effect/temporary_transformation/trans_sting/proc/pause_effect(mob/living/source) + SIGNAL_HANDLER + + // Pause if we're dead, appear dead, or in stasis + if(source.stat == DEAD || HAS_TRAIT(source, TRAIT_DEATHCOMA) || HAS_TRAIT(source, TRAIT_STASIS)) + if(duration == -1) + return // Already paused + + time_before_pause = duration - world.time + duration = -1 + + // Resume if we're none of the above and also were paused + else if(time_before_pause != -1) + duration = time_before_pause + world.time + time_before_pause = -1 diff --git a/code/datums/status_effects/debuffs/drowsiness.dm b/code/datums/status_effects/debuffs/drowsiness.dm index ebf1f43796cd55..cd99e879066645 100644 --- a/code/datums/status_effects/debuffs/drowsiness.dm +++ b/code/datums/status_effects/debuffs/drowsiness.dm @@ -29,7 +29,7 @@ /datum/status_effect/drowsiness/tick(seconds_between_ticks) // You do not feel drowsy while unconscious or in stasis - if(owner.stat >= UNCONSCIOUS || IS_IN_STASIS(owner)) + if(owner.stat >= UNCONSCIOUS || HAS_TRAIT(owner, TRAIT_STASIS)) return // Resting helps against drowsiness diff --git a/code/datums/status_effects/debuffs/drunk.dm b/code/datums/status_effects/debuffs/drunk.dm index e46915922e57d0..40bffc21b80a92 100644 --- a/code/datums/status_effects/debuffs/drunk.dm +++ b/code/datums/status_effects/debuffs/drunk.dm @@ -1,4 +1,4 @@ -// SKYRAT EDIT CHANGE BEGIN (#21546 DRUNK EFFECTS) +// NOVA EDIT CHANGE BEGIN (#21546 DRUNK EFFECTS) // Defines for the ballmer peak. #define BALLMER_PEAK_LOW_END 25.8 // Original 12.9 #define BALLMER_PEAK_HIGH_END 27.6 // Original 13.8 @@ -6,7 +6,7 @@ /// The threshld which determine if someone is tipsy vs drunk #define TIPSY_THRESHOLD 21 // Original 6 -// SKYRAT EDIT CHANGE END (#21546 DRUNK EFFECTS) +// NOVA EDIT CHANGE END (#21546 DRUNK EFFECTS) /** * The drunk status effect. @@ -65,13 +65,13 @@ /datum/status_effect/inebriated/tick(seconds_between_ticks) // Drunk value does not decrease while dead or in stasis - if(owner.stat == DEAD || IS_IN_STASIS(owner)) + if(owner.stat == DEAD || HAS_TRAIT(owner, TRAIT_STASIS)) return // Every tick, the drunk value decrases by // 4% the current drunk_value + 0.01 // (until it reaches 0 and terminates) - set_drunk_value(drunk_value - (0.0075 + drunk_value * 0.0075)) // SKYRAT EDIT CHANGE - Alcohol Tolerance - Original: set_drunk_value(drunk_value - (0.01 + drunk_value * 0.04) + set_drunk_value(drunk_value - (0.0075 + drunk_value * 0.0075)) // NOVA EDIT CHANGE - Alcohol Tolerance - Original: set_drunk_value(drunk_value - (0.01 + drunk_value * 0.04) if(QDELETED(src)) return @@ -146,7 +146,7 @@ if(drunk_value > BALLMER_PEAK_WINDOWS_ME) // by this point you're into windows ME territory owner.say(pick_list_replacements(VISTA_FILE, "ballmer_windows_me_msg"), forced = "ballmer") - // SKYRAT EDIT CHANGE BEGIN (#21546 DRUNK EFFECTS) + // NOVA EDIT CHANGE BEGIN (#21546 DRUNK EFFECTS) /* ORIGINAL // Drunk slurring scales in intensity based on how drunk we are -at 16 you will likely not even notice it, // but when we start to scale up you definitely will @@ -201,7 +201,7 @@ if(iscarbon(owner)) var/mob/living/carbon/carbon_owner = owner carbon_owner.vomit() // Vomiting clears toxloss - consider this a blessing - // SKYRAT EDIT CHANGE END (#21546 DRUNK EFFECTS) + // NOVA EDIT CHANGE END (#21546 DRUNK EFFECTS) // Over 81, we will gain constant toxloss if(drunk_value >= 81) @@ -221,7 +221,7 @@ owner.adjustToxLoss(2) /datum/status_effect/inebriated/drunk/proc/attempt_to_blackout() - /* SKYRAT EDIT REMOVAL - Blackout drunk begone + /* NOVA EDIT REMOVAL - Blackout drunk begone var/mob/living/carbon/drunkard = owner if(drunkard.has_trauma_type(/datum/brain_trauma/severe/split_personality/blackout))// prevent ping spamming if(prob(10)) @@ -231,7 +231,7 @@ if(drunkard.gain_trauma(/datum/brain_trauma/severe/split_personality/blackout, TRAUMA_LIMIT_ABSOLUTE)) drunk_value -= 70 //So that the drunk personality can spice things up without being killed by liver failure return - */ // SKYRAT EDIT REMOVAL END + */ // NOVA EDIT REMOVAL END if(SSshuttle.emergency.mode == SHUTTLE_DOCKED && is_station_level(owner.z))// Don't put us in a deep sleep if the shuttle's here. QoL, mainly. to_chat(owner, span_warning("You're so tired... but you can't miss that shuttle...")) else diff --git a/code/datums/status_effects/debuffs/fire_stacks.dm b/code/datums/status_effects/debuffs/fire_stacks.dm index 8f52165cdbb125..4a6e7b6b730f6e 100644 --- a/code/datums/status_effects/debuffs/fire_stacks.dm +++ b/code/datums/status_effects/debuffs/fire_stacks.dm @@ -201,14 +201,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) @@ -233,10 +238,10 @@ qdel(moblight) moblight = new moblight_type(owner) - SEND_SIGNAL(owner, COMSIG_LIVING_IGNITED, owner) cache_stacks() update_overlay() update_particles() + SEND_SIGNAL(owner, COMSIG_LIVING_IGNITED, owner) return TRUE /** diff --git a/code/datums/status_effects/debuffs/spacer.dm b/code/datums/status_effects/debuffs/spacer.dm index 0c6234c1efc270..daaf5576ee1013 100644 --- a/code/datums/status_effects/debuffs/spacer.dm +++ b/code/datums/status_effects/debuffs/spacer.dm @@ -93,7 +93,7 @@ description = "Space is long and dark and empty, but it's my home." /datum/mood_event/spacer/on_planet - description = "I'm on a planet. The gravity here makes me uncomfotable." + description = "I'm on a planet. The gravity here makes me uncomfortable." mood_change = -2 /datum/mood_event/spacer/on_planet/too_long diff --git a/code/datums/status_effects/debuffs/staggered.dm b/code/datums/status_effects/debuffs/staggered.dm new file mode 100644 index 00000000000000..0ffde66b1f1cb9 --- /dev/null +++ b/code/datums/status_effects/debuffs/staggered.dm @@ -0,0 +1,43 @@ +/datum/status_effect/staggered + id = "staggered" + tick_interval = 0.5 SECONDS + alert_type = null + remove_on_fullheal = TRUE + +/datum/status_effect/staggered/on_creation(mob/living/new_owner, duration = 10 SECONDS) + src.duration = duration + return ..() + +/datum/status_effect/staggered/on_apply() + //you can't stagger the dead. + if(owner.stat == DEAD) + return FALSE + + RegisterSignal(owner, COMSIG_LIVING_DEATH, PROC_REF(clear_staggered)) + owner.add_movespeed_modifier(/datum/movespeed_modifier/staggered) + return TRUE + +/datum/status_effect/staggered/on_remove() + UnregisterSignal(owner, COMSIG_LIVING_DEATH) + owner.remove_movespeed_modifier(/datum/movespeed_modifier/staggered) + // Resetting both X on remove so we're back to normal + owner.pixel_x = owner.base_pixel_x + +/// Signal proc that self deletes our staggered effect +/datum/status_effect/staggered/proc/clear_staggered(datum/source) + SIGNAL_HANDLER + + qdel(src) + +/datum/status_effect/staggered/tick(seconds_between_ticks) + //you can't stagger the dead - in case somehow you die mid-stagger + if(owner.stat == DEAD || HAS_TRAIT(owner, TRAIT_FAKEDEATH)) + return + else + owner.do_stagger_animation() + +/// Helper proc that causes the mob to do a stagger animation. +/// Doesn't change significantly, just meant to represent swaying back and forth +/mob/living/proc/do_stagger_animation() + animate(src, pixel_x = 4, time = 0.2 SECONDS, loop = 6, flags = ANIMATION_RELATIVE|ANIMATION_PARALLEL) + animate(pixel_x = -4, time = 0.2 SECONDS, flags = ANIMATION_RELATIVE) diff --git a/code/datums/status_effects/debuffs/strandling.dm b/code/datums/status_effects/debuffs/strandling.dm index e6198eb544f4e9..6050a3df304da4 100644 --- a/code/datums/status_effects/debuffs/strandling.dm +++ b/code/datums/status_effects/debuffs/strandling.dm @@ -38,7 +38,7 @@ return INVOKE_ASYNC(src, PROC_REF(try_remove_effect), user, tool) - return COMPONENT_BLOCK_TOOL_ATTACK + return ITEM_INTERACT_BLOCKING /// Signal proc for [COMSIG_CARBON_PRE_MISC_HELP], allowing someone to remove the effect by hand /datum/status_effect/strandling/proc/on_self_check(mob/living/carbon/source, mob/living/helper) diff --git a/code/datums/status_effects/gas.dm b/code/datums/status_effects/gas.dm index bcc0a50e707374..f06a289da781d4 100644 --- a/code/datums/status_effects/gas.dm +++ b/code/datums/status_effects/gas.dm @@ -33,11 +33,9 @@ /datum/status_effect/freon/proc/do_resist() to_chat(owner, span_notice("You start breaking out of the ice cube...")) - if(do_after(owner, owner, 4 SECONDS)) - if(!QDELETED(src)) - to_chat(owner, span_notice("You break out of the ice cube!")) - owner.remove_status_effect(/datum/status_effect/freon) - + if(do_after(owner, 4 SECONDS, target = owner)) + to_chat(owner, span_notice("You break out of the ice cube!")) + qdel(src) /datum/status_effect/freon/on_remove() if(!owner.stat) diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm index a2aa81ebb698a0..84f30ab7855e96 100644 --- a/code/datums/status_effects/neutral.dm +++ b/code/datums/status_effects/neutral.dm @@ -114,7 +114,6 @@ need_mob_update += rewarded.adjustFireLoss(-25, updating_health = FALSE) need_mob_update += rewarded.adjustToxLoss(-25, updating_health = FALSE) need_mob_update += rewarded.adjustOxyLoss(-25, updating_health = FALSE) - need_mob_update += rewarded.adjustCloneLoss(-25, updating_health = FALSE) if(need_mob_update) rewarded.updatehealth() @@ -149,9 +148,16 @@ /atom/movable/screen/alert/status_effect/holdup name = "Holding Up" - desc = "You're currently pointing a gun at someone." + desc = "You're currently pointing a gun at someone. Click to cancel." icon_state = "aimed" +/atom/movable/screen/alert/status_effect/holdup/Click(location, control, params) + . = ..() + if(!.) + return + var/datum/component/gunpoint/gunpoint = owner.GetComponent(/datum/component/gunpoint) + gunpoint?.cancel() + // this status effect is used to negotiate the high-fiving capabilities of all concerned parties /datum/status_effect/offering id = "offering" @@ -334,10 +340,26 @@ owner.emote("surrender") +///For when you need to make someone be prompted for surrender, but not forever +/datum/status_effect/surrender_timed + id = "surrender_timed" + duration = 30 SECONDS + status_type = STATUS_EFFECT_UNIQUE + alert_type = null + +/datum/status_effect/surrender_timed/on_apply() + owner.apply_status_effect(/datum/status_effect/grouped/surrender, REF(src)) + return ..() + +/datum/status_effect/surrender_timed/on_remove() + owner.remove_status_effect(/datum/status_effect/grouped/surrender, REF(src)) + return ..() + + /* * A status effect used for preventing caltrop message spam * - * While a mob has this status effect, they won't recieve any messages about + * While a mob has this status effect, they won't receive any messages about * stepping on caltrops. But they will be stunned and damaged regardless. * * The status effect itself has no effect, other than to disappear after @@ -500,10 +522,10 @@ return if(prob(1))//low chance of the alternative reality returning to monkey var/obj/item/organ/external/tail/monkey/monkey_tail = new () - monkey_tail.Insert(human_mob, drop_if_replaced = FALSE) + monkey_tail.Insert(human_mob, movement_flags = DELETE_IF_REPLACED) var/datum/species/human_species = human_mob.dna?.species if(human_species) - human_species.randomize_features(human_mob) + human_species.randomize_active_features(human_mob) human_species.randomize_active_underwear(human_mob) owner.remove_status_effect(/datum/status_effect/eigenstasium) diff --git a/code/datums/status_effects/song_effects.dm b/code/datums/status_effects/song_effects.dm index 0cca48d22b6ea5..066ac457a9f42e 100644 --- a/code/datums/status_effects/song_effects.dm +++ b/code/datums/status_effects/song_effects.dm @@ -34,3 +34,22 @@ /datum/status_effect/song/antimagic/get_examine_text() return span_notice("[owner.p_They()] seem[owner.p_s()] to be covered in a dull, grey aura.") + +/datum/status_effect/song/light + id = "light_song" + status_type = STATUS_EFFECT_REFRESH + duration = 1 MINUTES + aura_desc = "bright" + /// lighting object that makes owner glow + var/obj/effect/dummy/lighting_obj/moblight/mob_light_obj + +/datum/status_effect/song/light/on_apply() + mob_light_obj = owner.mob_light(3, color = LIGHT_COLOR_DIM_YELLOW) + playsound(owner, 'sound/weapons/fwoosh.ogg', 75, FALSE) + return TRUE + +/datum/status_effect/song/light/on_remove() + QDEL_NULL(mob_light_obj) + +/datum/status_effect/song/light_song/get_examine_text() + return span_notice("[owner.p_They()] seem[owner.p_s()] to be covered in a glowing aura.") diff --git a/code/datums/status_effects/wound_effects.dm b/code/datums/status_effects/wound_effects.dm index 6ec793c5672b28..f7d640a6d1cf30 100644 --- a/code/datums/status_effects/wound_effects.dm +++ b/code/datums/status_effects/wound_effects.dm @@ -67,7 +67,7 @@ /datum/status_effect/limp/proc/check_step(mob/whocares, OldLoc, Dir, forced) SIGNAL_HANDLER - if(!owner.client || owner.body_position == LYING_DOWN || !owner.has_gravity() || (owner.movement_type & FLYING) || forced || owner.buckled) + if(!owner.client || owner.body_position == LYING_DOWN || !owner.has_gravity() || (owner.movement_type & (FLYING|FLOATING)) || forced || owner.buckled) return // less limping while we have determination still diff --git a/code/datums/storage/storage.dm b/code/datums/storage/storage.dm index 8ad69bc7daf1f3..acfa2e40f182a7 100644 --- a/code/datums/storage/storage.dm +++ b/code/datums/storage/storage.dm @@ -976,9 +976,13 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) /datum/storage/proc/open_storage_attackby_secondary(datum/source, atom/weapon, mob/user) SIGNAL_HANDLER + if(istype(weapon, /obj/item/chameleon)) + var/obj/item/chameleon/chameleon_weapon = weapon + chameleon_weapon.make_copy(source, user) + return open_storage_on_signal(source, user) -/// Signal handler to open up the storage when we recieve a signal. +/// Signal handler to open up the storage when we receive a signal. /datum/storage/proc/open_storage_on_signal(datum/source, mob/to_show) SIGNAL_HANDLER diff --git a/code/datums/verb_callbacks.dm b/code/datums/verb_callbacks.dm index 6468974260f749..563ac3ac4d4aa1 100644 --- a/code/datums/verb_callbacks.dm +++ b/code/datums/verb_callbacks.dm @@ -1,4 +1,5 @@ ///like normal callbacks but they also record their creation time for measurement purposes +///they also require the same usr/user that made the callback to both still exist and to still have a client in order to execute /datum/callback/verb_callback ///the tick this callback datum was created in. used for testing latency var/creation_time = 0 @@ -6,3 +7,23 @@ /datum/callback/verb_callback/New(thingtocall, proctocall, ...) creation_time = DS2TICKS(world.time) . = ..() + +#ifndef UNIT_TESTS +/datum/callback/verb_callback/Invoke(...) + var/mob/our_user = user?.resolve() + if(QDELETED(our_user) || isnull(our_user.client)) + return + var/mob/temp = usr + . = ..() + usr = temp + +/datum/callback/verb_callback/InvokeAsync(...) + var/mob/our_user = user?.resolve() + if(QDELETED(our_user) || isnull(our_user.client)) + return + var/mob/temp = usr + . = ..() + usr = temp +#endif + + diff --git a/code/datums/votes/_vote_datum.dm b/code/datums/votes/_vote_datum.dm index b1560bf8ecd697..b12c94bc849ccf 100644 --- a/code/datums/votes/_vote_datum.dm +++ b/code/datums/votes/_vote_datum.dm @@ -30,6 +30,8 @@ var/time_remaining /// The counting method we use for votes. var/count_method = VOTE_COUNT_METHOD_SINGLE + /// The method for selecting a winner. + var/winner_method = VOTE_WINNER_METHOD_SIMPLE /** * Used to determine if this vote is a possible @@ -109,7 +111,7 @@ started_time = world.time time_remaining = round(duration / 10) - return "[contains_vote_in_name ? "[capitalize(name)]" : "[capitalize(name)] vote"] started by [initiator || "Central Command"]." + return "[contains_vote_in_name ? "[capitalize(name)]" : "[capitalize(name)] vote"] started by [initiator || "Conglomeration of Colonists"]." /** * Gets the result of the vote. @@ -123,33 +125,41 @@ */ /datum/vote/proc/get_vote_result(list/non_voters) RETURN_TYPE(/list) + SHOULD_CALL_PARENT(TRUE) + + switch(winner_method) + if(VOTE_WINNER_METHOD_NONE) + return list() + if(VOTE_WINNER_METHOD_SIMPLE) + return get_simple_winner() + if(VOTE_WINNER_METHOD_WEIGHTED_RANDOM) + return get_random_winner() + + stack_trace("invalid select winner method: [winner_method]. Defaulting to simple.") + return get_simple_winner() - var/list/winners = list() +/// Gets the winner of the vote, selecting the choice with the most votes. +/datum/vote/proc/get_simple_winner() var/highest_vote = 0 + var/list/current_winners = list() for(var/option in choices) - var/vote_count = choices[option] - // If we currently have no winners... - if(!length(winners)) - // And the current option has any votes, it's the new highest. - if(vote_count > 0) - winners += option - highest_vote = vote_count + if(vote_count < highest_vote) continue - // If we're greater than, and NOT equal to, the highest vote, - // we are the new supreme winner - clear all others if(vote_count > highest_vote) - winners.Cut() - winners += option highest_vote = vote_count + current_winners = list(option) + continue + current_winners += option - // If we're equal to the highest vote, we tie for winner - else if(vote_count == highest_vote) - winners += option + return length(current_winners) ? current_winners : list() - return winners +/// Gets the winner of the vote, selecting a random choice from all choices based on their vote count. +/datum/vote/proc/get_random_winner() + var/winner = pick_weight(choices) + return winner ? list(winner) : list() /** * Gets the resulting text displayed when the vote is completed. @@ -161,17 +171,46 @@ * Return a formatted string of text to be displayed to everyone. */ /datum/vote/proc/get_result_text(list/all_winners, real_winner, list/non_voters) - if(length(all_winners) <= 0 || !real_winner) - return span_bold("Vote Result: Inconclusive - No Votes!") - var/returned_text = "" if(override_question) returned_text += span_bold(override_question) else returned_text += span_bold("[capitalize(name)] Vote") + returned_text += "\nWinner Selection: " + switch(winner_method) + if(VOTE_WINNER_METHOD_NONE) + returned_text += "None" + if(VOTE_WINNER_METHOD_WEIGHTED_RANDOM) + returned_text += "Weighted Random" + else + returned_text += "Simple" + + var/total_votes = 0 // for determining percentage of votes + for(var/option in choices) + total_votes += choices[option] + + if(total_votes <= 0) + return span_bold("Vote Result: Inconclusive - No Votes!") + + returned_text += "\nResults:" for(var/option in choices) - returned_text += "\n[span_bold(option)]: [choices[option]]" + returned_text += "\n" + var/votes = choices[option] + var/percentage_text = "" + if(votes > 0) + var/actual_percentage = round((votes / total_votes) * 100, 0.1) + var/text = "[actual_percentage]" + var/spaces_needed = 5 - length(text) + for(var/_ in 1 to spaces_needed) + returned_text += " " + percentage_text += "[text]%" + else + percentage_text = " 0%" + returned_text += "[percentage_text] | [span_bold(option)]: [choices[option]]" + + if(!real_winner) // vote has no winner or cannot be won, but still had votes + return returned_text returned_text += "\n" returned_text += get_winner_text(all_winners, real_winner, non_voters) diff --git a/code/datums/votes/custom_vote.dm b/code/datums/votes/custom_vote.dm index 534377b3d69018..5960e7dff0ed95 100644 --- a/code/datums/votes/custom_vote.dm +++ b/code/datums/votes/custom_vote.dm @@ -29,6 +29,24 @@ return forced /datum/vote/custom_vote/create_vote(mob/vote_creator) + var/custom_win_method = tgui_input_list( + vote_creator, + "How should the vote winner be determined?", + "Winner Method", + list("Simple", "Weighted Random", "No Winner"), + default = "Simple", + ) + switch(custom_win_method) + if("Simple") + winner_method = VOTE_WINNER_METHOD_SIMPLE + if("Weighted Random") + winner_method = VOTE_WINNER_METHOD_WEIGHTED_RANDOM + if("No Winner") + winner_method = VOTE_WINNER_METHOD_NONE + else + to_chat(vote_creator, span_boldwarning("Unknown winner method. Contact a coder.")) + return FALSE + override_question = tgui_input_text(vote_creator, "What is the vote for?", "Custom Vote") if(!override_question) return FALSE @@ -52,8 +70,4 @@ . = ..() . += "\n[override_question]" -// There are no winners or losers for custom votes -/datum/vote/custom_vote/get_winner_text(list/all_winners, real_winner, list/non_voters) - return "[span_bold("Did not vote:")] [length(non_voters)]" - #undef MAX_CUSTOM_VOTE_OPTIONS diff --git a/code/datums/votes/map_vote.dm b/code/datums/votes/map_vote.dm index 323ee29ccc235a..e30451c5d5e9e4 100644 --- a/code/datums/votes/map_vote.dm +++ b/code/datums/votes/map_vote.dm @@ -2,6 +2,7 @@ name = "Map" message = "Vote for next round's map!" count_method = VOTE_COUNT_METHOD_MULTI + winner_method = VOTE_WINNER_METHOD_WEIGHTED_RANDOM /datum/vote/map_vote/New() . = ..() @@ -12,7 +13,7 @@ var/list/maps = shuffle(global.config.maplist) for(var/map in maps) var/datum/map_config/possible_config = config.maplist[map] - if(!possible_config.votable || (possible_config.map_name in SSpersistence.blocked_maps) || possible_config.map_name == SSmapping.config?.map_name) // SKYRAT EDIT - Can't vote for the current map + if(!possible_config.votable || (possible_config.map_name in SSpersistence.blocked_maps) || possible_config.map_name == SSmapping.config?.map_name) // NOVA EDIT - Can't vote for the current map continue default_choices += possible_config.map_name diff --git a/code/datums/weakrefs.dm b/code/datums/weakrefs.dm index dedc0d8eff927d..eaeea94b3c35e1 100644 --- a/code/datums/weakrefs.dm +++ b/code/datums/weakrefs.dm @@ -100,6 +100,10 @@ /datum/weakref/vv_do_topic(list/href_list) . = ..() + + if(!.) + return + if(href_list[VV_HK_WEAKREF_RESOLVE]) if(!check_rights(NONE)) return diff --git a/code/datums/weather/weather.dm b/code/datums/weather/weather.dm index f262a6c0c47622..a9322074f25f8d 100644 --- a/code/datums/weather/weather.dm +++ b/code/datums/weather/weather.dm @@ -182,7 +182,7 @@ if(alert_sfx) SEND_SOUND(player, sound(alert_sfx)) -// the checks for if a mob should recieve alerts, returns TRUE if can +// the checks for if a mob should receive alerts, returns TRUE if can /datum/weather/proc/can_get_alert(mob/player) var/turf/mob_turf = get_turf(player) return !isnull(mob_turf) diff --git a/code/datums/weather/weather_types/floor_is_lava.dm b/code/datums/weather/weather_types/floor_is_lava.dm index df4e9eec0f08c3..03ed0c68c311ad 100644 --- a/code/datums/weather/weather_types/floor_is_lava.dm +++ b/code/datums/weather/weather_types/floor_is_lava.dm @@ -39,7 +39,7 @@ for(var/obj/structure/structure_to_check in mob_turf) if(structure_to_check.density) return FALSE - if(mob_to_check.movement_type & (FLYING|FLOATING)) + if(mob_to_check.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) return FALSE /datum/weather/floor_is_lava/weather_act(mob/living/victim) diff --git a/code/datums/weather/weather_types/radiation_storm.dm b/code/datums/weather/weather_types/radiation_storm.dm index 08c88cd65f181a..942a747361ecfb 100644 --- a/code/datums/weather/weather_types/radiation_storm.dm +++ b/code/datums/weather/weather_types/radiation_storm.dm @@ -60,7 +60,7 @@ /datum/weather/rad_storm/end() if(..()) return - priority_announce("The radiation threat has passed. Please return to your workplaces.", "Anomaly Alert", ANNOUNCER_RADIATIONPASSED) //SKYRAT EDIT CHANGE + priority_announce("The radiation threat has passed. Please return to your workplaces.", "Anomaly Alert", ANNOUNCER_RADIATIONPASSED) //NOVA EDIT CHANGE status_alarm(FALSE) /datum/weather/rad_storm/proc/do_mutate(mob/living/carbon/human/mutant) @@ -87,7 +87,7 @@ /// Used by the radioactive nebula when the station doesnt have enough shielding /datum/weather/rad_storm/nebula - protected_areas = list(/area/shuttle) + protected_areas = list(/area/shuttle, /area/station/maintenance/radshelter) weather_overlay = "nebula_radstorm" weather_duration_lower = 100 HOURS diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm index 4fda6f26984fe1..4672bd15b87292 100644 --- a/code/datums/wires/airlock.dm +++ b/code/datums/wires/airlock.dm @@ -38,6 +38,10 @@ dictionary_key = /datum/wires/airlock/ai proper_name = "AI Airlock" +/datum/wires/airlock/cargo + dictionary_key = /datum/wires/airlock/cargo + proper_name = "Cargo Airlock" + /datum/wires/airlock/New(atom/holder) wires = list( WIRE_AI, diff --git a/code/datums/wires/shieldwallgen.dm b/code/datums/wires/shieldwallgen.dm new file mode 100644 index 00000000000000..dfbf2be2a97d90 --- /dev/null +++ b/code/datums/wires/shieldwallgen.dm @@ -0,0 +1,14 @@ +/datum/wires/shieldwallgen + proper_name = "Shield Wall Generator" + randomize = TRUE + holder_type = /obj/machinery/power/shieldwallgen + +/datum/wires/shieldwallgen/New(atom/holder) + wires = list(WIRE_ACTIVATE) + ..() + +/datum/wires/shieldwallgen/on_pulse(wire) + var/obj/machinery/power/shieldwallgen/generator = holder + if(generator.anchored && generator.powernet) + generator.active = generator.active ? FALSE : TRUE //shield gens use some silly defines here but its usually just a true or false + ..() diff --git a/code/datums/wires/syndicatebomb.dm b/code/datums/wires/syndicatebomb.dm index fa939d5b5607c3..f093e71e35d75e 100644 --- a/code/datums/wires/syndicatebomb.dm +++ b/code/datums/wires/syndicatebomb.dm @@ -1,6 +1,6 @@ /datum/wires/syndicatebomb holder_type = /obj/machinery/syndicatebomb - proper_name = "Syndicate Explosive Device" + proper_name = "Symphionia Explosive Device" randomize = TRUE /datum/wires/syndicatebomb/New(atom/holder) diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm index d930c496de6ce9..b3ad0f0deccd7d 100644 --- a/code/datums/world_topic.dm +++ b/code/datums/world_topic.dm @@ -163,7 +163,7 @@ /datum/world_topic/news_report/Run(list/input) - priority_announce(input["message"], "Breaking Update From [input["message_sender"]]") //SKYRAT EDIT CHANGE + priority_announce(input["message"], "Breaking Update From [input["message_sender"]]") //NOVA EDIT CHANGE /datum/world_topic/adminmsg keyword = "adminmsg" diff --git a/code/datums/wounds/_wound_static_data.dm b/code/datums/wounds/_wound_static_data.dm index 7a59ea57413a24..f996bb258c795d 100644 --- a/code/datums/wounds/_wound_static_data.dm +++ b/code/datums/wounds/_wound_static_data.dm @@ -185,7 +185,7 @@ return new wound_path_to_generate -/datum/wound_pregen_data/Destroy(force, ...) +/datum/wound_pregen_data/Destroy(force) var/error_message = "[src], a singleton wound pregen data instance, was destroyed! This should not happen!" if (force) error_message += " NOTE: This Destroy() was called with force == TRUE. This instance will be deleted and replaced with a new one." diff --git a/code/datums/wounds/_wounds.dm b/code/datums/wounds/_wounds.dm index 7d211b9ae29247..a2b3647df012be 100644 --- a/code/datums/wounds/_wounds.dm +++ b/code/datums/wounds/_wounds.dm @@ -16,11 +16,6 @@ #define WOUND_CRITICAL_BLUNT_DISMEMBER_BONUS 15 -// Applied into wounds when they're scanned with the wound analyzer, halves time to treat them manually. -#define TRAIT_WOUND_SCANNED "wound_scanned" -// I dunno lol -#define ANALYZER_TRAIT "analyzer_trait" - /datum/wound /// What it's named var/name = "Wound" diff --git a/code/datums/wounds/bones.dm b/code/datums/wounds/bones.dm index d4624acbb92ab5..97c511f518e7ca 100644 --- a/code/datums/wounds/bones.dm +++ b/code/datums/wounds/bones.dm @@ -13,7 +13,7 @@ /datum/wound/blunt/bone name = "Blunt (Bone) Wound" - wound_flags = (ACCEPTS_GAUZE | SPLINT_OVERLAY) // SKYRAT EDIT: MEDICAL -- Makes bone wounds have a splint overlay + wound_flags = (ACCEPTS_GAUZE | SPLINT_OVERLAY) // NOVA EDIT: MEDICAL -- Makes bone wounds have a splint overlay default_scar_file = BONE_SCAR_FILE @@ -75,7 +75,7 @@ /datum/wound/blunt/bone/handle_process(seconds_per_tick, times_fired) . = ..() - if (!victim || IS_IN_STASIS(victim)) + if (!victim || HAS_TRAIT(victim, TRAIT_STASIS)) return if(limb.body_zone == BODY_ZONE_HEAD && brain_trauma_group && world.time > next_trauma_cycle) @@ -334,7 +334,7 @@ brain_trauma_group = BRAIN_TRAUMA_MILD trauma_cycle_cooldown = 1.5 MINUTES internal_bleeding_chance = 40 - wound_flags = (ACCEPTS_GAUZE | MANGLES_INTERIOR | SPLINT_OVERLAY) // SKYRAT EDIT - MEDICAL (SPLINT_OVERLAY) + wound_flags = (ACCEPTS_GAUZE | MANGLES_INTERIOR | SPLINT_OVERLAY) // NOVA EDIT - MEDICAL (SPLINT_OVERLAY) regen_ticks_needed = 120 // ticks every 2 seconds, 240 seconds, so roughly 4 minutes default simple_desc = "Patient's bone has cracked in the middle, drastically reducing limb functionality." @@ -370,7 +370,7 @@ brain_trauma_group = BRAIN_TRAUMA_SEVERE trauma_cycle_cooldown = 2.5 MINUTES internal_bleeding_chance = 60 - wound_flags = (ACCEPTS_GAUZE | MANGLES_INTERIOR | SPLINT_OVERLAY) // SKYRAT EDIT - MEDICAL (SPLINT_OVERLAY) + wound_flags = (ACCEPTS_GAUZE | MANGLES_INTERIOR | SPLINT_OVERLAY) // NOVA EDIT - MEDICAL (SPLINT_OVERLAY) regen_ticks_needed = 240 // ticks every 2 seconds, 480 seconds, so roughly 8 minutes default simple_desc = "Patient's bones have effectively shattered completely, causing total immobilization of the limb." diff --git a/code/datums/wounds/burns.dm b/code/datums/wounds/burns.dm index 39e91d06fb65f4..2e65501851797d 100644 --- a/code/datums/wounds/burns.dm +++ b/code/datums/wounds/burns.dm @@ -36,7 +36,7 @@ /datum/wound/burn/flesh/handle_process(seconds_per_tick, times_fired) - if (!victim || IS_IN_STASIS(victim)) + if (!victim || HAS_TRAIT(victim, TRAIT_STASIS)) return . = ..() @@ -202,7 +202,7 @@ user.visible_message(span_notice("[user] begins applying [I] to [victim]'s [limb.plaintext_zone]..."), span_notice("You begin applying [I] to [user == victim ? "your" : "[victim]'s"] [limb.plaintext_zone]...")) if (I.amount <= 0) return TRUE - if(!do_after(user, (user == victim ? I.self_delay : I.other_delay), extra_checks = CALLBACK(src, PROC_REF(still_exists)))) + if(!do_after(user, (user == victim ? I.self_delay : I.other_delay), target = victim, extra_checks = CALLBACK(src, PROC_REF(still_exists)))) return TRUE limb.heal_damage(I.heal_brute, I.heal_burn) diff --git a/code/datums/wounds/cranial_fissure.dm b/code/datums/wounds/cranial_fissure.dm new file mode 100644 index 00000000000000..1050baceb6f5d3 --- /dev/null +++ b/code/datums/wounds/cranial_fissure.dm @@ -0,0 +1,123 @@ +/datum/wound_pregen_data/cranial_fissure + wound_path_to_generate = /datum/wound/cranial_fissure + required_limb_biostate = BIO_BONE + + required_wounding_types = list(WOUND_ALL) + + wound_series = WOUND_SERIES_CRANIAL_FISSURE + + threshold_minimum = 150 + weight = 10 + + viable_zones = list(BODY_ZONE_HEAD) + +/datum/wound_pregen_data/cranial_fissure/get_weight(obj/item/bodypart/limb, woundtype, damage, attack_direction, damage_source) + if (limb.owner?.stat < HARD_CRIT) + return 0 + + return ..() + +/// A wound applied when receiving significant enough damage to the head. +/// Will allow other players to take your eyes out of your head, and slipping +/// will cause your brain to fall out of your head. +/datum/wound/cranial_fissure + name = "Cranial Fissure" + desc = "Patient's crown is agape, revealing severe damage to the skull." + treat_text = "Immediate surgical reconstruction of the skull." + examine_desc = "is split open" + occur_text = "is split into two separated chunks" + + simple_desc = "Patient's skull is split open." + threshold_penalty = 40 + + severity = WOUND_SEVERITY_CRITICAL + sound_effect = 'sound/effects/dismember.ogg' + +#define CRANIAL_FISSURE_FILTER_DISPLACEMENT "cranial_fissure_displacement" + +/datum/wound/cranial_fissure/wound_injury(datum/wound/old_wound = null, attack_direction = null) + ADD_TRAIT(limb, TRAIT_IMMUNE_TO_CRANIAL_FISSURE, type) + ADD_TRAIT(victim, TRAIT_HAS_CRANIAL_FISSURE, type) + + victim.add_filter(CRANIAL_FISSURE_FILTER_DISPLACEMENT, 2, displacement_map_filter(icon('icons/effects/cranial_fissure.dmi', "displacement"), size = 3)) + + RegisterSignal(victim, COMSIG_MOB_SLIPPED, PROC_REF(on_owner_slipped)) + +/datum/wound/cranial_fissure/remove_wound(ignore_limb, replaced) + REMOVE_TRAIT(limb, TRAIT_IMMUNE_TO_CRANIAL_FISSURE, type) + REMOVE_TRAIT(victim, TRAIT_HAS_CRANIAL_FISSURE, type) + + victim.remove_filter(CRANIAL_FISSURE_FILTER_DISPLACEMENT) + + UnregisterSignal(victim, COMSIG_MOB_SLIPPED) + + return ..() + +/datum/wound/cranial_fissure/proc/on_owner_slipped(mob/source) + SIGNAL_HANDLER + + if (source.stat == DEAD) + return + + var/obj/item/organ/internal/brain/brain = source.get_organ_by_type(/obj/item/organ/internal/brain) + if (isnull(brain)) + return + + brain.Remove(source) + + var/turf/source_turf = get_turf(source) + brain.forceMove(source_turf) + brain.throw_at(get_step(source_turf, source.dir), 1, 1) + + source.visible_message( + span_boldwarning("[source]'s brain spills right out of [source.p_their()] head!"), + span_userdanger("Your brain spills right out of your head!"), + ) + +/datum/wound/cranial_fissure/try_handling(mob/living/carbon/human/user) + if (user.zone_selected != BODY_ZONE_HEAD && user.zone_selected != BODY_ZONE_PRECISE_EYES) + return FALSE + + if (victim.body_position != LYING_DOWN) + return FALSE + + var/obj/item/organ/internal/eyes/eyes = victim.get_organ_by_type(/obj/item/organ/internal/eyes) + if (isnull(eyes)) + victim.balloon_alert(user, "no eyes to take!") + return TRUE + + victim.balloon_alert(user, "pulling out eyes...") + victim.show_message( + span_userdanger("[victim] starts to pull out your eyes!"), + MSG_VISUAL, + span_userdanger("An arm reaches inside your brain, and starts pulling on your eyes!"), + ) + + if (!do_after(user, 10 SECONDS, victim, extra_checks = CALLBACK(src, PROC_REF(still_has_eyes), eyes))) + return TRUE + + eyes.Remove(victim) + user.put_in_hands(eyes) + + log_combat(user, victim, "pulled out the eyes of") + + user.visible_message( + span_boldwarning("You rip out [victim]'s eyes!"), + span_boldwarning("[user] rips out [victim]'s eyes!"), + ignored_mobs = victim, + ) + + victim.show_message( + span_userdanger("[user] rips out your eyes!"), + MSG_VISUAL, + span_userdanger("You feel an arm yank from inside your head, as you feel something very important is missing!"), + ) + + return TRUE + +/datum/wound/cranial_fissure/proc/still_has_eyes(obj/item/organ/internal/eyes/eyes) + PRIVATE_PROC(TRUE) + + return victim?.get_organ_by_type(/obj/item/organ/internal/eyes) == eyes + +#undef CRANIAL_FISSURE_FILTER_DISPLACEMENT diff --git a/code/datums/wounds/pierce.dm b/code/datums/wounds/pierce.dm index ec166584632fb9..7304d21365cdf5 100644 --- a/code/datums/wounds/pierce.dm +++ b/code/datums/wounds/pierce.dm @@ -64,7 +64,7 @@ return BLOOD_FLOW_STEADY /datum/wound/pierce/bleed/handle_process(seconds_per_tick, times_fired) - if (!victim || IS_IN_STASIS(victim)) + if (!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 e650899be297b7..2fdd92b82d0d01 100644 --- a/code/datums/wounds/scars/_scars.dm +++ b/code/datums/wounds/scars/_scars.dm @@ -30,7 +30,7 @@ /// If false, we will only check to see if a limb has ALL our biostates, instead of just any. var/check_any_biostates -/datum/scar/Destroy(force, ...) +/datum/scar/Destroy(force) if(limb) LAZYREMOVE(limb.scars, src) if(victim) diff --git a/code/datums/wounds/slash.dm b/code/datums/wounds/slash.dm index 4475d95f508c4a..980cb712484502 100644 --- a/code/datums/wounds/slash.dm +++ b/code/datums/wounds/slash.dm @@ -134,7 +134,7 @@ /datum/wound/slash/flesh/handle_process(seconds_per_tick, times_fired) - if (!victim || IS_IN_STASIS(victim)) + if (!victim || HAS_TRAIT(victim, TRAIT_STASIS)) return // in case the victim has the NOBLOOD trait, the wound will simply not clot on it's own @@ -215,7 +215,7 @@ user.visible_message(span_notice("[user] begins licking the wounds on [victim]'s [limb.plaintext_zone]."), span_notice("You begin licking the wounds on [victim]'s [limb.plaintext_zone]..."), ignored_mobs=victim) to_chat(victim, span_notice("[user] begins to lick the wounds on your [limb.plaintext_zone].")) - if(!do_after(user, base_treat_time, target=victim, extra_checks = CALLBACK(src, PROC_REF(still_exists)))) + if(!do_after(user, base_treat_time, target = victim, extra_checks = CALLBACK(src, PROC_REF(still_exists)))) return user.visible_message(span_notice("[user] licks the wounds on [victim]'s [limb.plaintext_zone]."), span_notice("You lick some of the wounds on [victim]'s [limb.plaintext_zone]"), ignored_mobs=victim) @@ -241,7 +241,7 @@ /datum/wound/slash/flesh/proc/las_cauterize(obj/item/gun/energy/laser/lasgun, mob/user) var/self_penalty_mult = (user == victim ? 1.25 : 1) user.visible_message(span_warning("[user] begins aiming [lasgun] directly at [victim]'s [limb.plaintext_zone]..."), span_userdanger("You begin aiming [lasgun] directly at [user == victim ? "your" : "[victim]'s"] [limb.plaintext_zone]...")) - if(!do_after(user, base_treat_time * self_penalty_mult, target=victim, extra_checks = CALLBACK(src, PROC_REF(still_exists)))) + if(!do_after(user, base_treat_time * self_penalty_mult, target = victim, extra_checks = CALLBACK(src, PROC_REF(still_exists)))) return var/damage = lasgun.chambered.loaded_projectile.damage lasgun.chambered.loaded_projectile.wound_bonus -= 30 diff --git a/code/game/area/areas/away_content.dm b/code/game/area/areas/away_content.dm index e7f56393a664b1..b5f63c41398dd1 100644 --- a/code/game/area/areas/away_content.dm +++ b/code/game/area/areas/away_content.dm @@ -11,7 +11,7 @@ Unused icons for new areas are "awaycontent1" ~ "awaycontent30" has_gravity = STANDARD_GRAVITY ambience_index = AMBIENCE_AWAY sound_environment = SOUND_ENVIRONMENT_ROOM - area_flags = NOTELEPORT|UNIQUE_AREA //SKYRAT EDIT CHANGE + area_flags = NOTELEPORT|UNIQUE_AREA //NOVA EDIT CHANGE /area/awaymission/beach name = "Beach" diff --git a/code/game/area/areas/centcom.dm b/code/game/area/areas/centcom.dm index f5ac4fac78e36c..a0f56301972a00 100644 --- a/code/game/area/areas/centcom.dm +++ b/code/game/area/areas/centcom.dm @@ -13,7 +13,7 @@ // This is just to define the category /area/centcom/central_command_areas - name = "Central Command Areas" + name = "Conglomeration of Colonists Areas" /area/centcom/central_command_areas/control name = "CentCom Central Control" @@ -64,7 +64,7 @@ icon_state = "centcom_cells" /area/centcom/central_command_areas/courtroom - name = "Nanotrasen Grand Courtroom" + name = "Symphionia Grand Courtroom" icon_state = "centcom_court" /area/centcom/central_command_areas/holding @@ -87,11 +87,11 @@ name = "Supplypod Loading Facility" icon_state = "supplypod_loading" var/loading_id = "" - // SKYRAT EDIT START - Dynamic lights on CentCom + // NOVA EDIT START - Dynamic lights on CentCom static_lighting = FALSE base_lighting_color = COLOR_WHITE base_lighting_alpha = 255 - // SKYRAT EDIT END + // NOVA EDIT END /area/centcom/central_command_areas/supplypod/loading/Initialize(mapload) . = ..() @@ -173,7 +173,7 @@ //Syndicates /area/centcom/syndicate_mothership - name = "Syndicate Mothership" + name = "Symphionia Mothership" icon_state = "syndie-ship" requires_power = FALSE has_gravity = STANDARD_GRAVITY @@ -182,35 +182,35 @@ ambience_index = AMBIENCE_DANGER /area/centcom/syndicate_mothership/control - name = "Syndicate Control Room" + name = "Symphionia Control Room" icon_state = "syndie-control" static_lighting = TRUE /area/centcom/syndicate_mothership/expansion_bombthreat - name = "Syndicate Ordnance Laboratory" + name = "Symphionia Ordnance Laboratory" icon_state = "syndie-elite" static_lighting = TRUE ambience_index = AMBIENCE_ENGI /area/centcom/syndicate_mothership/expansion_bioterrorism - name = "Syndicate Bio-Weapon Laboratory" + name = "Symphionia Bio-Weapon Laboratory" icon_state = "syndie-elite" static_lighting = TRUE ambience_index = AMBIENCE_MEDICAL /area/centcom/syndicate_mothership/expansion_chemicalwarfare - name = "Syndicate Chemical Weapon Manufacturing Plant" + name = "Symphionia Chemical Weapon Manufacturing Plant" icon_state = "syndie-elite" static_lighting = TRUE ambience_index = AMBIENCE_REEBE /area/centcom/syndicate_mothership/expansion_fridgerummage - name = "Syndicate Perishables and Foodstuffs Storage" + name = "Symphionia Perishables and Foodstuffs Storage" icon_state = "syndie-elite" static_lighting = TRUE /area/centcom/syndicate_mothership/elite_squad - name = "Syndicate Elite Squad" + name = "Symphionia Elite Squad" icon_state = "syndie-elite" //MAFIA diff --git a/code/game/area/areas/ruins/lavaland.dm b/code/game/area/areas/ruins/lavaland.dm index c16d65059ff5c8..e119192b0b8444 100644 --- a/code/game/area/areas/ruins/lavaland.dm +++ b/code/game/area/areas/ruins/lavaland.dm @@ -45,40 +45,40 @@ area_flags = CULT_PERMITTED ambience_index = AMBIENCE_SPOOKY -//Syndicate lavaland base +//Symphionia lavaland base /area/ruin/syndicate_lava_base/engineering - name = "Syndicate Lavaland Engineering" + name = "Symphionia Lavaland Engineering" /area/ruin/syndicate_lava_base/medbay - name = "Syndicate Lavaland Medbay" + name = "Symphionia Lavaland Medbay" /area/ruin/syndicate_lava_base/arrivals - name = "Syndicate Lavaland Arrivals" + name = "Symphionia Lavaland Arrivals" /area/ruin/syndicate_lava_base/bar - name = "\improper Syndicate Lavaland Bar" + name = "\improper Symphionia Lavaland Bar" /area/ruin/syndicate_lava_base/main - name = "\improper Syndicate Lavaland Primary Hallway" + name = "\improper Symphionia Lavaland Primary Hallway" /area/ruin/syndicate_lava_base/cargo - name = "\improper Syndicate Lavaland Cargo Bay" + name = "\improper Symphionia Lavaland Cargo Bay" /area/ruin/syndicate_lava_base/chemistry - name = "Syndicate Lavaland Chemistry" + name = "Symphionia Lavaland Chemistry" /area/ruin/syndicate_lava_base/virology - name = "Syndicate Lavaland Virology" + name = "Symphionia Lavaland Virology" /area/ruin/syndicate_lava_base/testlab - name = "\improper Syndicate Lavaland Experimentation Lab" + name = "\improper Symphionia Lavaland Experimentation Lab" /area/ruin/syndicate_lava_base/dormitories - name = "\improper Syndicate Lavaland Dormitories" + name = "\improper Symphionia Lavaland Dormitories" /area/ruin/syndicate_lava_base/telecomms - name = "\improper Syndicate Lavaland Telecommunications" + name = "\improper Symphionia Lavaland Telecommunications" //Xeno Nest @@ -92,10 +92,10 @@ //ash walker nest /area/ruin/unpowered/ash_walkers - //SKYRAT EDIT ADDITION BEGIN - ASH WALKER MACHINES FIX + //NOVA EDIT ADDITION BEGIN - ASH WALKER MACHINES FIX always_unpowered = FALSE power_equip = TRUE - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END ambient_buzz = 'sound/ambience/magma.ogg' /area/ruin/unpowered/ratvar diff --git a/code/game/area/areas/ruins/space.dm b/code/game/area/areas/ruins/space.dm index b5a7777e3268dc..9004969f916e5a 100644 --- a/code/game/area/areas/ruins/space.dm +++ b/code/game/area/areas/ruins/space.dm @@ -690,3 +690,13 @@ //SYN-C Brutus, derelict frigate /area/ruin/space/has_grav/infested_frigate name = "SYN-C Brutus" + +//garbage trucks +/area/ruin/space/has_grav/garbagetruck + name = "Decommissioned Garbage Truck" + sound_environment = SOUND_AREA_SMALL_ENCLOSED + ambience_index = AMBIENCE_MAINT +/area/ruin/space/has_grav/garbagetruck/foodwaste +/area/ruin/space/has_grav/garbagetruck/medicalwaste +/area/ruin/space/has_grav/garbagetruck/squat +/area/ruin/space/has_grav/garbagetruck/toystore diff --git a/code/game/area/areas/shuttles.dm b/code/game/area/areas/shuttles.dm index 990c4d803d9108..bdbf412da7ad7b 100644 --- a/code/game/area/areas/shuttles.dm +++ b/code/game/area/areas/shuttles.dm @@ -26,33 +26,33 @@ ////////////////////////////Multi-area shuttles//////////////////////////// -////////////////////////////Syndicate infiltrator//////////////////////////// +////////////////////////////Symphionia infiltrator//////////////////////////// /area/shuttle/syndicate - name = "Syndicate Infiltrator" + name = "Symphionia Infiltrator" ambience_index = AMBIENCE_DANGER area_limited_icon_smoothing = /area/shuttle/syndicate /area/shuttle/syndicate/bridge - name = "Syndicate Infiltrator Control" + name = "Symphionia Infiltrator Control" /area/shuttle/syndicate/medical - name = "Syndicate Infiltrator Medbay" + name = "Symphionia Infiltrator Medbay" /area/shuttle/syndicate/armory - name = "Syndicate Infiltrator Armory" + name = "Symphionia Infiltrator Armory" /area/shuttle/syndicate/eva - name = "Syndicate Infiltrator EVA" + name = "Symphionia Infiltrator EVA" /area/shuttle/syndicate/hallway - name = "Syndicate Infiltrator Hall" + name = "Symphionia Infiltrator Hall" /area/shuttle/syndicate/engineering - name = "Syndicate Infiltrator Engineering" + name = "Symphionia Infiltrator Engineering" /area/shuttle/syndicate/airlock - name = "Syndicate Infiltrator Airlock" + name = "Symphionia Infiltrator Airlock" ////////////////////////////Pirate Shuttle//////////////////////////// @@ -149,7 +149,7 @@ name = "Labor Camp Shuttle" /area/shuttle/supply - name = "NLV Consign" //SKYRAT EDIT CHANGE + name = "NLV Consign" //NOVA EDIT CHANGE area_flags = NOTELEPORT /area/shuttle/escape @@ -210,7 +210,7 @@ name = "SBC corvette" /area/shuttle/syndicate_scout - name = "Syndicate Scout" + name = "Symphionia Scout" /area/shuttle/ruin name = "Ruined Shuttle" @@ -221,13 +221,13 @@ name = "Ruined Caravan Shuttle" /area/shuttle/ruin/caravan/syndicate1 - name = "Syndicate Fighter" + name = "Symphionia Fighter" /area/shuttle/ruin/caravan/syndicate2 - name = "Syndicate Fighter" + name = "Symphionia Fighter" /area/shuttle/ruin/caravan/syndicate3 - name = "Syndicate Drop Ship" + name = "Symphionia Drop Ship" /area/shuttle/ruin/caravan/pirate name = "Pirate Cutter" diff --git a/code/game/area/areas/station/cargo.dm b/code/game/area/areas/station/cargo.dm index 8bb5229320d5b9..faa9f2f6299599 100644 --- a/code/game/area/areas/station/cargo.dm +++ b/code/game/area/areas/station/cargo.dm @@ -1,7 +1,7 @@ /area/station/cargo name = "Quartermasters" icon_state = "quart" - airlock_wires = /datum/wires/airlock/service + airlock_wires = /datum/wires/airlock/cargo sound_environment = SOUND_AREA_STANDARD_STATION /area/station/cargo/sorting diff --git a/code/game/area/areas/station/command.dm b/code/game/area/areas/station/command.dm index a1a521e77a8989..7618e9d18365ac 100644 --- a/code/game/area/areas/station/command.dm +++ b/code/game/area/areas/station/command.dm @@ -22,12 +22,12 @@ sound_environment = SOUND_AREA_MEDIUM_SOFTFLOOR /area/station/command/corporate_showroom - name = "\improper Corporate Showroom" + name = "\improper Conglomeration Showroom" icon_state = "showroom" sound_environment = SOUND_AREA_MEDIUM_SOFTFLOOR /area/station/command/corporate_suite - name = "\improper Corporate Guest Suite" + name = "\improper Conglomeration Guest Suite" icon_state = "command" sound_environment = SOUND_AREA_WOODFLOOR @@ -91,6 +91,6 @@ */ /area/station/command/corporate_dock - name = "\improper Corporate Private Dock" + name = "\improper Conglomeration Private Dock" icon_state = "command" sound_environment = SOUND_AREA_SMALL_SOFTFLOOR diff --git a/code/game/area/areas/station/misc.dm b/code/game/area/areas/station/misc.dm index 48d5793b5223e6..fbbe0e8a5120ef 100644 --- a/code/game/area/areas/station/misc.dm +++ b/code/game/area/areas/station/misc.dm @@ -31,3 +31,4 @@ requires_power = TRUE ambience_index = AMBIENCE_MINING area_flags = UNIQUE_AREA + outdoors = TRUE diff --git a/code/game/area/areas/station/security.dm b/code/game/area/areas/station/security.dm index 918cf30ceb8ca1..93629f35628c22 100644 --- a/code/game/area/areas/station/security.dm +++ b/code/game/area/areas/station/security.dm @@ -106,6 +106,10 @@ /area/station/security/execution/education name = "\improper Prisoner Education Chamber" +/area/station/security/mechbay + name = "Security Mechbay" + icon_state = "sec_mechbay" + /* * Security Checkpoints */ @@ -173,9 +177,6 @@ name = "Security Post - Third Floor" icon_state = "checkpoint_3" -/* -* Prison Areas -*/ /area/station/security/prison name = "\improper Prison Wing" diff --git a/code/game/atom/README.md b/code/game/atom/README.md new file mode 100644 index 00000000000000..3ce4f9b0cf951f --- /dev/null +++ b/code/game/atom/README.md @@ -0,0 +1,3 @@ +# Core /atom Systems + +This is a folder of basic systems that apply to all /atom types, split into relevant files. Keep the files named fittingly and don't put anything in `_atom.dm` if you can avoid it. diff --git a/code/game/atom/_atom.dm b/code/game/atom/_atom.dm new file mode 100644 index 00000000000000..66ed2048665cc4 --- /dev/null +++ b/code/game/atom/_atom.dm @@ -0,0 +1,960 @@ +/** + * The base type for nearly all physical objects in SS13 + + * Lots and lots of functionality lives here, although in general we are striving to move + * as much as possible to the components/elements system + */ +/atom + layer = TURF_LAYER + plane = GAME_PLANE + appearance_flags = TILE_BOUND|LONG_GLIDE + + /// pass_flags that we are. If any of this matches a pass_flag on a moving thing, by default, we let them through. + var/pass_flags_self = NONE + + ///First atom flags var + var/flags_1 = NONE + ///Intearaction flags + var/interaction_flags_atom = NONE + + var/flags_ricochet = NONE + + ///When a projectile tries to ricochet off this atom, the projectile ricochet chance is multiplied by this + var/receive_ricochet_chance_mod = 1 + ///When a projectile ricochets off this atom, it deals the normal damage * this modifier to this atom + var/receive_ricochet_damage_coeff = 0.33 + + ///Reagents holder + var/datum/reagents/reagents = null + + ///all of this atom's HUD (med/sec, etc) images. Associative list of the form: list(hud category = hud image or images for that category). + ///most of the time hud category is associated with a single image, sometimes its associated with a list of images. + ///not every hud in this list is actually used. for ones available for others to see, look at active_hud_list. + var/list/image/hud_list = null + ///all of this atom's HUD images which can actually be seen by players with that hud + var/list/image/active_hud_list = null + ///HUD images that this atom can provide. + var/list/hud_possible + + ///How much this atom resists explosions by, in the end + var/explosive_resistance = 0 + + ///vis overlays managed by SSvis_overlays to automaticaly turn them like other overlays. + var/list/managed_vis_overlays + + /// Lazylist of all images (or atoms, I'm sorry) (hopefully attached to us) to update when we change z levels + /// You will need to manage adding/removing from this yourself, but I'll do the updating for you + var/list/image/update_on_z + + /// Lazylist of all overlays attached to us to update when we change z levels + /// You will need to manage adding/removing from this yourself, but I'll do the updating for you + /// Oh and note, if order of addition is important this WILL break that. so mind yourself + var/list/image/update_overlays_on_z + + ///Cooldown tick timer for buckle messages + var/buckle_message_cooldown = 0 + ///Last fingerprints to touch this atom + var/fingerprintslast + + /// Radiation insulation types + var/rad_insulation = RAD_NO_INSULATION + + /// The icon state intended to be used for the acid component. Used to override the default acid overlay icon state. + var/custom_acid_overlay = null + + var/datum/wires/wires = null + + ///Light systems, both shouldn't be active at the same time. + var/light_system = STATIC_LIGHT + ///Range of the light in tiles. Zero means no light. + var/light_range = 0 + ///Intensity of the light. The stronger, the less shadows you will see on the lit area. + var/light_power = 1 + ///Hexadecimal RGB string representing the colour of the light. White by default. + var/light_color = COLOR_WHITE + /// Angle of light to show in light_dir + /// 360 is a circle, 90 is a cone, etc. + var/light_angle = 360 + /// What angle to project light in + var/light_dir = NORTH + ///Boolean variable for toggleable lights. Has no effect without the proper light_system, light_range and light_power values. + var/light_on = TRUE + /// How many tiles "up" this light is. 1 is typical, should only really change this if it's a floor light + var/light_height = LIGHTING_HEIGHT + ///Bitflags to determine lighting-related atom properties. + var/light_flags = NONE + ///Our light source. Don't fuck with this directly unless you have a good reason! + var/tmp/datum/light_source/light + ///Any light sources that are "inside" of us, for example, if src here was a mob that's carrying a flashlight, that flashlight's light source would be part of this list. + var/tmp/list/light_sources + + /// Last name used to calculate a color for the chatmessage overlays + var/chat_color_name + /// Last color calculated for the the chatmessage overlays + var/chat_color + /// A luminescence-shifted value of the last color calculated for chatmessage overlays + var/chat_color_darkened + + // Use SET_BASE_PIXEL(x, y) to set these in typepath definitions, it'll handle pixel_x and y for you + ///Default pixel x shifting for the atom's icon. + var/base_pixel_x = 0 + ///Default pixel y shifting for the atom's icon. + var/base_pixel_y = 0 + // Use SET_BASE_VISUAL_PIXEL(x, y) to set these in typepath definitions, it'll handle pixel_w and z for you + ///Default pixel w shifting for the atom's icon. + var/base_pixel_w = 0 + ///Default pixel z shifting for the atom's icon. + var/base_pixel_z = 0 + ///Used for changing icon states for different base sprites. + var/base_icon_state + + ///Icon-smoothing behavior. + var/smoothing_flags = NONE + ///What directions this is currently smoothing with. IMPORTANT: This uses the smoothing direction flags as defined in icon_smoothing.dm, instead of the BYOND flags. + var/smoothing_junction = null //This starts as null for us to know when it's first set, but after that it will hold a 8-bit mask ranging from 0 to 255. + ///Smoothing variable + var/top_left_corner + ///Smoothing variable + var/top_right_corner + ///Smoothing variable + var/bottom_left_corner + ///Smoothing variable + var/bottom_right_corner + ///What smoothing groups does this atom belongs to, to match canSmoothWith. If null, nobody can smooth with it. Must be sorted. + var/list/smoothing_groups = null + ///List of smoothing groups this atom can smooth with. If this is null and atom is smooth, it smooths only with itself. Must be sorted. + var/list/canSmoothWith = null + + ///AI controller that controls this atom. type on init, then turned into an instance during runtime + var/datum/ai_controller/ai_controller + + /// forensics datum, contains fingerprints, fibres, blood_dna and hiddenprints on this atom + var/datum/forensics/forensics + + /// 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 + +/** + * Top level of the destroy chain for most atoms + * + * Cleans up the following: + * * Removes alternate apperances from huds that see them + * * qdels the reagent holder from atoms if it exists + * * clears the orbiters list + * * clears overlays and priority overlays + * * clears the light object + */ +/atom/Destroy(force) + if(alternate_appearances) + for(var/current_alternate_appearance in alternate_appearances) + var/datum/atom_hud/alternate_appearance/selected_alternate_appearance = alternate_appearances[current_alternate_appearance] + selected_alternate_appearance.remove_atom_from_hud(src) + + if(reagents) + QDEL_NULL(reagents) + + if(forensics) + QDEL_NULL(forensics) + + if(atom_storage) + QDEL_NULL(atom_storage) + + orbiters = null // The component is attached to us normaly and will be deleted elsewhere + + // Checking length(overlays) before cutting has significant speed benefits + if (length(overlays)) + overlays.Cut() + + LAZYNULL(managed_overlays) + if(ai_controller) + QDEL_NULL(ai_controller) + if(light) + QDEL_NULL(light) + if (length(light_sources)) + light_sources.Cut() + + if(smoothing_flags & SMOOTH_QUEUED) + SSicon_smooth.remove_from_queues(src) + + return ..() + +/atom/proc/handle_ricochet(obj/projectile/ricocheting_projectile) + var/turf/p_turf = get_turf(ricocheting_projectile) + var/face_direction = get_dir(src, p_turf) || get_dir(src, ricocheting_projectile) + var/face_angle = dir2angle(face_direction) + var/incidence_s = GET_ANGLE_OF_INCIDENCE(face_angle, (ricocheting_projectile.Angle + 180)) + var/a_incidence_s = abs(incidence_s) + if(a_incidence_s > 90 && a_incidence_s < 270) + return FALSE + if((ricocheting_projectile.armor_flag in list(BULLET, BOMB)) && ricocheting_projectile.ricochet_incidence_leeway) + if((a_incidence_s < 90 && a_incidence_s < 90 - ricocheting_projectile.ricochet_incidence_leeway) || (a_incidence_s > 270 && a_incidence_s -270 > ricocheting_projectile.ricochet_incidence_leeway)) + return FALSE + var/new_angle_s = SIMPLIFY_DEGREES(face_angle + incidence_s) + ricocheting_projectile.set_angle(new_angle_s) + return TRUE + +/// Whether the mover object can avoid being blocked by this atom, while arriving from (or leaving through) the border_dir. +/atom/proc/CanPass(atom/movable/mover, border_dir) + SHOULD_CALL_PARENT(TRUE) + SHOULD_BE_PURE(TRUE) + if(SEND_SIGNAL(src, COMSIG_ATOM_TRIED_PASS, mover, border_dir) & COMSIG_COMPONENT_PERMIT_PASSAGE) + return TRUE + if(mover.movement_type & PHASING) + return TRUE + . = CanAllowThrough(mover, border_dir) + // This is cheaper than calling the proc every time since most things dont override CanPassThrough + if(!mover.generic_canpass) + return mover.CanPassThrough(src, REVERSE_DIR(border_dir), .) + +/// Returns true or false to allow the mover to move through src +/atom/proc/CanAllowThrough(atom/movable/mover, border_dir) + SHOULD_CALL_PARENT(TRUE) + //SHOULD_BE_PURE(TRUE) + if(mover.pass_flags & pass_flags_self) + return TRUE + if(mover.throwing && (pass_flags_self & LETPASSTHROW)) + return TRUE + return !density + +/** + * Is this atom currently located on centcom (or riding off into the sunset on a shuttle) + * + * Specifically, is it on the z level and within the centcom areas. + * You can also be in a shuttle during endgame transit. + * + * Used in gamemode to identify mobs who have escaped and for some other areas of the code + * who don't want atoms where they shouldn't be + * + * Returns TRUE if this atom is on centcom or an escape shuttle, or FALSE if not + */ +/atom/proc/onCentCom() + var/turf/current_turf = get_turf(src) + if(!current_turf) + return FALSE + + // This doesn't necessarily check that we're at central command, + // but it checks for any shuttles which have finished are still in hyperspace + // (IE, stuff like the whiteship which fly off into the sunset and "escape") + if(is_reserved_level(current_turf.z)) + return on_escaped_shuttle(ENDGAME_TRANSIT) + + // From here on we only concern ourselves with people actually on the centcom Z + if(!is_centcom_level(current_turf.z)) + return FALSE + + if(istype(current_turf.loc, /area/centcom)) + return TRUE + + // Finally, check if we're on an escaped shuttle + return on_escaped_shuttle() + +/** + * Is the atom in any of the syndicate areas + * + * Either in the syndie base, or any of their shuttles + * + * Also used in gamemode code for win conditions + * + * Returns TRUE if this atom is on the syndicate recon base, any of its shuttles, or an escape shuttle, or FALSE if not + */ +/atom/proc/onSyndieBase() + var/turf/current_turf = get_turf(src) + if(!current_turf) + return FALSE + + // Syndicate base is loaded in a reserved level. If not reserved, we don't care. + if(!is_reserved_level(current_turf.z)) + return FALSE + + var/static/list/syndie_typecache = typecacheof(list( + /area/centcom/syndicate_mothership, // syndicate base itself + /area/shuttle/assault_pod, // steel rain + /area/shuttle/syndicate, // infiltrator + )) + + if(is_type_in_typecache(current_turf.loc, syndie_typecache)) + return TRUE + + // Finally, check if we're on an escaped shuttle + return on_escaped_shuttle() + +/** + * Checks that we're on a shuttle that's escaped + * + * * check_for_launch_status - What launch status do we check for? Generally the two you want to check for are ENDGAME_LAUNCHED or ENDGAME_TRANSIT + * + * Returns TRUE if this atom is on a shuttle which is escaping or has escaped, or FALSE otherwise + */ +/atom/proc/on_escaped_shuttle(check_for_launch_status = ENDGAME_LAUNCHED) + var/turf/current_turf = get_turf(src) + if(!current_turf) + return FALSE + + for(var/obj/docking_port/mobile/mobile_docking_port as anything in SSshuttle.mobile_docking_ports) + if(mobile_docking_port.launch_status != check_for_launch_status) + continue + for(var/area/shuttle/shuttle_area as anything in mobile_docking_port.shuttle_areas) + if(current_turf in shuttle_area.get_contained_turfs()) + return TRUE + + return FALSE + +/** + * Is the atom in an away mission + * + * Must be in the away mission z-level to return TRUE + * + * Also used in gamemode code for win conditions + */ +/atom/proc/onAwayMission() + var/turf/current_turf = get_turf(src) + if(!current_turf) + return FALSE + + if(is_away_level(current_turf.z)) + return TRUE + + return FALSE + +/** + * Ensure a list of atoms/reagents exists inside this atom + * + * Goes throught he list of passed in parts, if they're reagents, adds them to our reagent holder + * creating the reagent holder if it exists. + * + * If the part is a moveable atom and the previous location of the item was a mob/living, + * it calls the inventory handler transferItemToLoc for that mob/living and transfers the part + * to this atom + * + * Otherwise it simply forceMoves the atom into this atom + */ +/atom/proc/CheckParts(list/parts_list, datum/crafting_recipe/current_recipe) + SEND_SIGNAL(src, COMSIG_ATOM_CHECKPARTS, parts_list, current_recipe) + if(!parts_list) + return + for(var/part in parts_list) + if(istype(part, /datum/reagent)) + if(!reagents) + reagents = new() + reagents.reagent_list.Add(part) + else if(ismovable(part)) + var/atom/movable/object = part + if(isliving(object.loc)) + var/mob/living/living = object.loc + living.transferItemToLoc(object, src) + else + object.forceMove(src) + SEND_SIGNAL(object, COMSIG_ATOM_USED_IN_CRAFT, src) + parts_list.Cut() + +///Take air from the passed in gas mixture datum +/atom/proc/assume_air(datum/gas_mixture/giver) + return null + +///Remove air from this atom +/atom/proc/remove_air(amount) + return null + +///Return the current air environment in this atom +/atom/proc/return_air() + if(loc) + return loc.return_air() + else + return null + +///Return the air if we can analyze it +/atom/proc/return_analyzable_air() + return null + +///Check if this atoms eye is still alive (probably) +/atom/proc/check_eye(mob/user) + SIGNAL_HANDLER + return + +/atom/proc/Bumped(atom/movable/bumped_atom) + set waitfor = FALSE + SEND_SIGNAL(src, COMSIG_ATOM_BUMPED, bumped_atom) + +/// Convenience proc to see if a container is open for chemistry handling +/atom/proc/is_open_container() + return is_refillable() && is_drainable() + +/// Is this atom injectable into other atoms +/atom/proc/is_injectable(mob/user, allowmobs = TRUE) + return reagents && (reagents.flags & (INJECTABLE | REFILLABLE)) + +/// Can we draw from this atom with an injectable atom +/atom/proc/is_drawable(mob/user, allowmobs = TRUE) + return reagents && (reagents.flags & (DRAWABLE | DRAINABLE)) + +/// Can this atoms reagents be refilled +/atom/proc/is_refillable() + return reagents && (reagents.flags & REFILLABLE) + +/// Is this atom drainable of reagents +/atom/proc/is_drainable() + return reagents && (reagents.flags & DRAINABLE) + +/** Handles exposing this atom to a list of reagents. + * + * Sends COMSIG_ATOM_EXPOSE_REAGENTS + * Calls expose_atom() for every reagent in the reagent list. + * + * Arguments: + * - [reagents][/list]: The list of reagents the atom is being exposed to. + * - [source][/datum/reagents]: The reagent holder the reagents are being sourced from. + * - methods: How the atom is being exposed to the reagents. Bitflags. + * - volume_modifier: Volume multiplier. + * - show_message: Whether to display anything to mobs when they are exposed. + */ +/atom/proc/expose_reagents(list/reagents, datum/reagents/source, methods=TOUCH, volume_modifier=1, show_message=TRUE) + . = SEND_SIGNAL(src, COMSIG_ATOM_EXPOSE_REAGENTS, reagents, source, methods, volume_modifier, show_message) + if(. & COMPONENT_NO_EXPOSE_REAGENTS) + return + + SEND_SIGNAL(source, COMSIG_REAGENTS_EXPOSE_ATOM, src, reagents, methods, volume_modifier, show_message) + for(var/datum/reagent/current_reagent as anything in reagents) + . |= current_reagent.expose_atom(src, reagents[current_reagent]) + SEND_SIGNAL(src, COMSIG_ATOM_AFTER_EXPOSE_REAGENTS, reagents, source, methods, volume_modifier, show_message) + +/// Are you allowed to drop this atom +/atom/proc/AllowDrop() + return FALSE + +///Is this atom within 1 tile of another atom +/atom/proc/HasProximity(atom/movable/proximity_check_mob as mob|obj) + return + +/// Sets the wire datum of an atom +/atom/proc/set_wires(datum/wires/new_wires) + wires = new_wires + +///Return true if we're inside the passed in atom +/atom/proc/in_contents_of(container)//can take class or object instance as argument + if(ispath(container)) + if(istype(src.loc, container)) + return TRUE + else if(src in container) + return TRUE + return FALSE + +/** + * Checks the atom's loc and calls update_held_items on it if it is a mob. + * + * This should only be used in situations when you are unable to use /datum/element/update_icon_updates_onmob for whatever reason. + * Check code/datums/elements/update_icon_updates_onmob.dm before using this. Adding that to the atom and calling update_appearance will work for most cases. + * + * Arguments: + * * mob/target - The mob to update the icons of. Optional argument, use if the atom's loc is not the mob you want to update. + */ +/atom/proc/update_inhand_icon(mob/target = loc) + SHOULD_CALL_PARENT(TRUE) + if(!istype(target)) + return + + target.update_held_items() + + SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_INHAND_ICON, target) + +/** + * An atom we are buckled or is contained within us has tried to move + * + * Default behaviour is to send a warning that the user can't move while buckled as long + * as the [buckle_message_cooldown][/atom/var/buckle_message_cooldown] has expired (50 ticks) + */ +/atom/proc/relaymove(mob/living/user, direction) + if(SEND_SIGNAL(src, COMSIG_ATOM_RELAYMOVE, user, direction) & COMSIG_BLOCK_RELAYMOVE) + return + if(buckle_message_cooldown <= world.time) + buckle_message_cooldown = world.time + 25 + balloon_alert(user, "can't move while buckled!") + return + +/** + * A special case of relaymove() in which the person relaying the move may be "driving" this atom + * + * This is a special case for vehicles and ridden animals where the relayed movement may be handled + * by the riding component attached to this atom. Returns TRUE as long as there's nothing blocking + * the movement, or FALSE if the signal gets a reply that specifically blocks the movement + */ +/atom/proc/relaydrive(mob/living/user, direction) + return !(SEND_SIGNAL(src, COMSIG_RIDDEN_DRIVER_MOVE, user, direction) & COMPONENT_DRIVER_BLOCK_MOVE) + +///returns the mob's dna info as a list, to be inserted in an object's blood_DNA list +/mob/living/proc/get_blood_dna_list() + if(get_blood_id() != /datum/reagent/blood) + return + return list("ANIMAL DNA" = "Y-") + +///Get the mobs dna list +/mob/living/carbon/get_blood_dna_list() + if(get_blood_id() != /datum/reagent/blood) + return + var/list/blood_dna = list() + if(dna) + blood_dna[dna.unique_enzymes] = dna.blood_type + else + blood_dna["UNKNOWN DNA"] = "X*" + return blood_dna + +/mob/living/carbon/alien/get_blood_dna_list() + return list("UNKNOWN DNA" = "X*") + +/mob/living/silicon/get_blood_dna_list() + return + +///to add a mob's dna info into an object's blood_dna list. +/atom/proc/transfer_mob_blood_dna(mob/living/injected_mob) + // Returns 0 if we have that blood already + var/new_blood_dna = injected_mob.get_blood_dna_list() + if(!new_blood_dna) + return FALSE + var/old_length = GET_ATOM_BLOOD_DNA_LENGTH(src) + add_blood_DNA(new_blood_dna) + if(GET_ATOM_BLOOD_DNA_LENGTH(src) == old_length) + return FALSE + return TRUE + +///to add blood from a mob onto something, and transfer their dna info +/atom/proc/add_mob_blood(mob/living/injected_mob) + var/list/blood_dna = injected_mob.get_blood_dna_list() + if(!blood_dna) + return FALSE + return add_blood_DNA(blood_dna) + +///Is this atom in space +/atom/proc/isinspace() + if(isspaceturf(get_turf(src))) + return TRUE + else + return FALSE + +/** + * If someone's trying to dump items onto our atom, where should they be dumped to? + * + * Return a loc to place objects, or null to stop dumping. + */ +/atom/proc/get_dumping_location() + return null + +/** + * the vision impairment to give to the mob whose perspective is set to that atom + * + * (e.g. an unfocused camera giving you an impaired vision when looking through it) + */ +/atom/proc/get_remote_view_fullscreens(mob/user) + return + +/** + * the sight changes to give to the mob whose perspective is set to that atom + * + * (e.g. A mob with nightvision loses its nightvision while looking through a normal camera) + */ +/atom/proc/update_remote_sight(mob/living/user) + return + + +/** + * Hook for running code when a dir change occurs + * + * Not recommended to use, listen for the [COMSIG_ATOM_DIR_CHANGE] signal instead (sent by this proc) + */ +/atom/proc/setDir(newdir) + SHOULD_CALL_PARENT(TRUE) + if (SEND_SIGNAL(src, COMSIG_ATOM_PRE_DIR_CHANGE, dir, newdir) & COMPONENT_ATOM_BLOCK_DIR_CHANGE) + newdir = dir + return + SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, newdir) + dir = newdir + SEND_SIGNAL(src, COMSIG_ATOM_POST_DIR_CHANGE, dir, newdir) + if(smoothing_flags & SMOOTH_BORDER_OBJECT) + QUEUE_SMOOTH_NEIGHBORS(src) + +/** + * Wash this atom + * + * This will clean it off any temporary stuff like blood. Override this in your item to add custom cleaning behavior. + * Returns true if any washing was necessary and thus performed + * Arguments: + * * clean_types: any of the CLEAN_ constants + */ +/atom/proc/wash(clean_types) + SHOULD_CALL_PARENT(TRUE) + if(SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, clean_types) & COMPONENT_CLEANED) + return TRUE + + // Basically "if has washable coloration" + if(length(atom_colours) >= WASHABLE_COLOUR_PRIORITY && atom_colours[WASHABLE_COLOUR_PRIORITY]) + remove_atom_colour(WASHABLE_COLOUR_PRIORITY) + return TRUE + return FALSE + +///Where atoms should drop if taken from this atom +/atom/proc/drop_location() + var/atom/location = loc + if(!location) + return null + return location.AllowDrop() ? location : location.drop_location() + +/** + * An atom has entered this atom's contents + * + * Default behaviour is to send the [COMSIG_ATOM_ENTERED] + */ +/atom/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + SEND_SIGNAL(src, COMSIG_ATOM_ENTERED, arrived, old_loc, old_locs) + SEND_SIGNAL(arrived, COMSIG_ATOM_ENTERING, src, old_loc, old_locs) + +/** + * An atom is attempting to exit this atom's contents + * + * Default behaviour is to send the [COMSIG_ATOM_EXIT] + */ +/atom/Exit(atom/movable/leaving, direction) + // Don't call `..()` here, otherwise `Uncross()` gets called. + // See the doc comment on `Uncross()` to learn why this is bad. + + if(SEND_SIGNAL(src, COMSIG_ATOM_EXIT, leaving, direction) & COMPONENT_ATOM_BLOCK_EXIT) + return FALSE + + return TRUE + +/** + * An atom has exited this atom's contents + * + * Default behaviour is to send the [COMSIG_ATOM_EXITED] + */ +/atom/Exited(atom/movable/gone, direction) + SEND_SIGNAL(src, COMSIG_ATOM_EXITED, gone, direction) + +///Return atom temperature +/atom/proc/return_temperature() + return + +/atom/proc/process_recipes(mob/living/user, obj/item/processed_object, list/processing_recipes) + //Only one recipe? use the first + if(processing_recipes.len == 1) + StartProcessingAtom(user, processed_object, processing_recipes[1]) + return + //Otherwise, select one with a radial + ShowProcessingGui(user, processed_object, processing_recipes) + +///Creates the radial and processes the selected option +/atom/proc/ShowProcessingGui(mob/living/user, obj/item/processed_object, list/possible_options) + var/list/choices_to_options = list() //Dict of object name | dict of object processing settings + var/list/choices = list() + + for(var/list/current_option as anything in possible_options) + var/atom/current_option_type = current_option[TOOL_PROCESSING_RESULT] + choices_to_options[initial(current_option_type.name)] = current_option + var/image/option_image = image(icon = initial(current_option_type.icon), icon_state = initial(current_option_type.icon_state)) + choices += list("[initial(current_option_type.name)]" = option_image) + + var/pick = show_radial_menu(user, src, choices, radius = 36, require_near = TRUE) + if(!pick) + return + + StartProcessingAtom(user, processed_object, choices_to_options[pick]) + + +/atom/proc/StartProcessingAtom(mob/living/user, obj/item/process_item, list/chosen_option) + var/processing_time = chosen_option[TOOL_PROCESSING_TIME] + to_chat(user, span_notice("You start working on [src].")) + if(process_item.use_tool(src, user, processing_time, volume=50)) + var/atom/atom_to_create = chosen_option[TOOL_PROCESSING_RESULT] + var/list/atom/created_atoms = list() + var/amount_to_create = chosen_option[TOOL_PROCESSING_AMOUNT] + for(var/i = 1 to amount_to_create) + var/atom/created_atom = new atom_to_create(drop_location()) + if(custom_materials) + created_atom.set_custom_materials(custom_materials, 1 / amount_to_create) + created_atom.pixel_x = pixel_x + created_atom.pixel_y = pixel_y + if(i > 1) + created_atom.pixel_x += rand(-8,8) + created_atom.pixel_y += rand(-8,8) + created_atom.OnCreatedFromProcessing(user, process_item, chosen_option, src) + created_atoms.Add(created_atom) + to_chat(user, span_notice("You manage to create [amount_to_create] [initial(atom_to_create.gender) == PLURAL ? "[initial(atom_to_create.name)]" : "[initial(atom_to_create.name)][plural_s(initial(atom_to_create.name))]"] from [src].")) + SEND_SIGNAL(src, COMSIG_ATOM_PROCESSED, user, process_item, created_atoms) + UsedforProcessing(user, process_item, chosen_option) + return + +/atom/proc/UsedforProcessing(mob/living/user, obj/item/used_item, list/chosen_option) + qdel(src) + return + +/atom/proc/OnCreatedFromProcessing(mob/living/user, obj/item/work_tool, list/chosen_option, atom/original_atom) + SHOULD_CALL_PARENT(TRUE) + + SEND_SIGNAL(src, COMSIG_ATOM_CREATEDBY_PROCESSING, original_atom, chosen_option) + if(user.mind) + ADD_TRAIT(src, TRAIT_FOOD_CHEF_MADE, REF(user.mind)) + +///Connect this atom to a shuttle +/atom/proc/connect_to_shuttle(mapload, obj/docking_port/mobile/port, obj/docking_port/stationary/dock) + return + +/atom/proc/intercept_zImpact(list/falling_movables, levels = 1) + SHOULD_CALL_PARENT(TRUE) + . |= SEND_SIGNAL(src, COMSIG_ATOM_INTERCEPT_Z_FALL, falling_movables, levels) + +///Setter for the `density` variable to append behavior related to its changing. +/atom/proc/set_density(new_value) + SHOULD_CALL_PARENT(TRUE) + if(density == new_value) + return + . = density + density = new_value + + +///Setter for the `base_pixel_x` variable to append behavior related to its changing. +/atom/proc/set_base_pixel_x(new_value) + if(base_pixel_x == new_value) + return + . = base_pixel_x + base_pixel_x = new_value + + pixel_x = pixel_x + base_pixel_x - . + + +///Setter for the `base_pixel_y` variable to append behavior related to its changing. +/atom/proc/set_base_pixel_y(new_value) + if(base_pixel_y == new_value) + return + . = base_pixel_y + base_pixel_y = new_value + + pixel_y = pixel_y + base_pixel_y - . + +// Not a valid operation, turfs and movables handle block differently +/atom/proc/set_explosion_block(explosion_block) + return + +/** + * Returns true if this atom has gravity for the passed in turf + * + * Sends signals [COMSIG_ATOM_HAS_GRAVITY] and [COMSIG_TURF_HAS_GRAVITY], both can force gravity with + * the forced gravity var. + * + * micro-optimized to hell because this proc is very hot, being called several times per movement every movement. + * + * HEY JACKASS, LISTEN + * IF YOU ADD SOMETHING TO THIS PROC, MAKE SURE /mob/living ACCOUNTS FOR IT + * Living mobs treat gravity in an event based manner. We've decomposed this proc into different checks + * for them to use. If you add more to it, make sure you do that, or things will behave strangely + * + * Gravity situations: + * * No gravity if you're not in a turf + * * No gravity if this atom is in is a space turf + * * Gravity if the area it's in always has gravity + * * Gravity if there's a gravity generator on the z level + * * Gravity if the Z level has an SSMappingTrait for ZTRAIT_GRAVITY + * * otherwise no gravity + */ +/atom/proc/has_gravity(turf/gravity_turf) + if(!isturf(gravity_turf)) + gravity_turf = get_turf(src) + + if(!gravity_turf)//no gravity in nullspace + return FALSE + + var/list/forced_gravity = list() + SEND_SIGNAL(src, COMSIG_ATOM_HAS_GRAVITY, gravity_turf, forced_gravity) + SEND_SIGNAL(gravity_turf, COMSIG_TURF_HAS_GRAVITY, src, forced_gravity) + if(length(forced_gravity)) + var/positive_grav = max(forced_gravity) + var/negative_grav = min(min(forced_gravity), 0) //negative grav needs to be below or equal to 0 + + //our gravity is sum of the most massive positive and negative numbers returned by the signal + //so that adding two forced_gravity elements with an effect size of 1 each doesnt add to 2 gravity + //but negative force gravity effects can cancel out positive ones + + return (positive_grav + negative_grav) + + var/area/turf_area = gravity_turf.loc + + return !gravity_turf.force_no_gravity && (SSmapping.gravity_by_z_level[gravity_turf.z] || turf_area.has_gravity) + +/** + * Used to set something as 'open' if it's being used as a supplypod + * + * Override this if you want an atom to be usable as a supplypod. + */ +/atom/proc/setOpened() + return + +/** + * Used to set something as 'closed' if it's being used as a supplypod + * + * Override this if you want an atom to be usable as a supplypod. + */ +/atom/proc/setClosed() + return + +/** + * Used to attempt to charge an object with a payment component. + * + * Use this if an atom needs to attempt to charge another atom. + */ +/atom/proc/attempt_charge(atom/sender, atom/target, extra_fees = 0) + return SEND_SIGNAL(sender, COMSIG_OBJ_ATTEMPT_CHARGE, target, extra_fees) + +///Passes Stat Browser Panel clicks to the game and calls client click on an atom +/atom/Topic(href, list/href_list) + . = ..() + if(!usr?.client) + return + var/client/usr_client = usr.client + var/list/paramslist = list() + + if(href_list["statpanel_item_click"]) + switch(href_list["statpanel_item_click"]) + if("left") + paramslist[LEFT_CLICK] = "1" + if("right") + paramslist[RIGHT_CLICK] = "1" + if("middle") + paramslist[MIDDLE_CLICK] = "1" + else + return + + if(href_list["statpanel_item_shiftclick"]) + paramslist[SHIFT_CLICK] = "1" + if(href_list["statpanel_item_ctrlclick"]) + paramslist[CTRL_CLICK] = "1" + if(href_list["statpanel_item_altclick"]) + paramslist[ALT_CLICK] = "1" + + var/mouseparams = list2params(paramslist) + usr_client.Click(src, loc, null, mouseparams) + return TRUE + +/atom/MouseEntered(location, control, params) + SSmouse_entered.hovers[usr.client] = src + +/// Fired whenever this atom is the most recent to be hovered over in the tick. +/// Preferred over MouseEntered if you do not need information such as the position of the mouse. +/// Especially because this is deferred over a tick, do not trust that `client` is not null. +/atom/proc/on_mouse_enter(client/client) + SHOULD_NOT_SLEEP(TRUE) + + var/mob/user = client?.mob + if (isnull(user)) + return + ///NOVA EDIT ADDITION BEGIN + // Face directions on combat mode. No procs, no typechecks, just a var for speed + if(user.face_mouse) + user.face_atom(src) + ///NOVA EDIT ADDITION END + + // Screentips + var/datum/hud/active_hud = user.hud_used + if(!active_hud) + return + + var/screentips_enabled = active_hud.screentips_enabled + if(screentips_enabled == SCREENTIP_PREFERENCE_DISABLED || flags_1 & NO_SCREENTIPS_1) + active_hud.screentip_text.maptext = "" + return + + 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 = "" + var/shift_lmb_ctrl_shift_lmb_line = "" + var/extra_lines = 0 + var/extra_context = "" + + 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) + var/list/context = list() + + var/contextual_screentip_returns = \ + SEND_SIGNAL(src, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM, context, held_item, user) \ + | (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 = build_context(context, SCREENTIP_CONTEXT_LMB, screentip_images) + var/rmb_text = build_context(context, SCREENTIP_CONTEXT_RMB, screentip_images) + + if (lmb_text != "") + lmb_rmb_line = lmb_text + if (rmb_text != "") + lmb_rmb_line += " | [rmb_text]" + else if (rmb_text != "") + lmb_rmb_line = rmb_text + + // Ctrl-LMB, Ctrl-RMB on one line... + if (lmb_rmb_line != "") + lmb_rmb_line += "
" + extra_lines++ + if (SCREENTIP_CONTEXT_CTRL_LMB in context) + 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 += 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 += 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 += 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 += 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 += 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 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]" + +/** + * This proc is used for telling whether something can pass by this atom in a given direction, for use by the pathfinding system. + * + * Trying to generate one long path across the station will call this proc on every single object on every single tile that we're seeing if we can move through, likely + * multiple times per tile since we're likely checking if we can access said tile from multiple directions, so keep these as lightweight as possible. + * + * For turfs this will only be used if pathing_pass_method is TURF_PATHING_PASS_PROC + * + * Arguments: + * * to_dir - What direction we're trying to move in, relevant for things like directional windows that only block movement in certain directions + * * pass_info - Datum that stores info about the thing that's trying to pass us + * + * IMPORTANT NOTE: /turf/proc/LinkBlockedWithAccess assumes that overrides of CanAStarPass will always return true if density is FALSE + * If this is NOT you, ensure you edit your can_astar_pass variable. Check __DEFINES/path.dm + **/ +/atom/proc/CanAStarPass(to_dir, datum/can_pass_info/pass_info) + if(pass_info.pass_flags & pass_flags_self) + return TRUE + . = !density diff --git a/code/game/alternate_appearance.dm b/code/game/atom/alternate_appearance.dm similarity index 99% rename from code/game/alternate_appearance.dm rename to code/game/atom/alternate_appearance.dm index 9f3da121b12170..86732dd9ed4527 100644 --- a/code/game/alternate_appearance.dm +++ b/code/game/atom/alternate_appearance.dm @@ -1,5 +1,8 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances) +/atom + var/list/alternate_appearances + /atom/proc/remove_alt_appearance(key) if(alternate_appearances) for(var/K in alternate_appearances) diff --git a/code/game/atom/atom_act.dm b/code/game/atom/atom_act.dm new file mode 100644 index 00000000000000..4c4ec04d66766a --- /dev/null +++ b/code/game/atom/atom_act.dm @@ -0,0 +1,226 @@ +/* + * +++++++++++++++++++++++++++++++++++++++++ ABOUT THIS FILE +++++++++++++++++++++++++++++++++++++++++++++ + * Not everything here necessarily has the name pattern of [x]_act() + * This is a file for various atom procs that simply get called when something is happening to that atom. + * If you're adding something here, you likely want a signal and SHOULD_CALL_PARENT(TRUE) + * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + */ + +/** + * Respond to fire being used on our atom + * + * Default behaviour is to send [COMSIG_ATOM_FIRE_ACT] and return + */ +/atom/proc/fire_act(exposed_temperature, exposed_volume) + SEND_SIGNAL(src, COMSIG_ATOM_FIRE_ACT, exposed_temperature, exposed_volume) + return FALSE + +/** + * Sends [COMSIG_ATOM_EXTINGUISH] signal, which properly removes burning component if it is present. + * + * Default behaviour is to send [COMSIG_ATOM_ACID_ACT] and return + */ +/atom/proc/extinguish() + SHOULD_CALL_PARENT(TRUE) + return SEND_SIGNAL(src, COMSIG_ATOM_EXTINGUISH) + +/** + * React to being hit by an explosion + * + * Should be called through the [EX_ACT] wrapper macro. + * The wrapper takes care of the [COMSIG_ATOM_EX_ACT] signal. + * as well as calling [/atom/proc/contents_explosion]. + * + * Returns TRUE by default, and behavior should be implemented on children procs on a per-atom basis. Should only return FALSE if we resist the explosion for any reason. + * We assume that the default is TRUE because all atoms should be considered destructible in some manner unless they explicitly opt out (in our current framework). + * However, the return value itself doesn't have any external consumers, it's only so children procs can listen to the value from their parent procs (due to the nature of the [EX_ACT] macro). + * Thus, the return value only matters on overrides of this proc, and the only thing that truly matters is the code that is executed (applying damage, calling damage procs, etc.) + * + */ +/atom/proc/ex_act(severity, target) + set waitfor = FALSE + return TRUE + +/// Handle what happens when your contents are exploded by a bomb +/atom/proc/contents_explosion(severity, target) + return //For handling the effects of explosions on contents that would not normally be effected + +/** + * React to a hit by a blob objecd + * + * default behaviour is to send the [COMSIG_ATOM_BLOB_ACT] signal + */ +/atom/proc/blob_act(obj/structure/blob/attacking_blob) + var/blob_act_result = SEND_SIGNAL(src, COMSIG_ATOM_BLOB_ACT, attacking_blob) + if (blob_act_result & COMPONENT_CANCEL_BLOB_ACT) + return FALSE + return TRUE + +/** + * React to an EMP of the given severity + * + * Default behaviour is to send the [COMSIG_ATOM_PRE_EMP_ACT] and [COMSIG_ATOM_EMP_ACT] signal + * + * If the pre-signal does not return protection, and there are attached wires then we call + * [emp_pulse][/datum/wires/proc/emp_pulse] on the wires + * + * We then return the protection value + */ +/atom/proc/emp_act(severity) + var/protection = SEND_SIGNAL(src, COMSIG_ATOM_PRE_EMP_ACT, severity) + if(!(protection & EMP_PROTECT_WIRES) && istype(wires)) + wires.emp_pulse() + + SEND_SIGNAL(src, COMSIG_ATOM_EMP_ACT, severity, protection) + return protection // Pass the protection value collected here upwards + +/** + * React to a hit by a projectile object + * + * @params + * * hitting_projectile - projectile + * * def_zone - zone hit + * * piercing_hit - is this hit piercing or normal? + */ +/atom/proc/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit = FALSE) + SHOULD_CALL_PARENT(TRUE) + + var/sigreturn = SEND_SIGNAL(src, COMSIG_ATOM_PRE_BULLET_ACT, hitting_projectile, def_zone) + if(sigreturn & COMPONENT_BULLET_PIERCED) + return BULLET_ACT_FORCE_PIERCE + if(sigreturn & COMPONENT_BULLET_BLOCKED) + return BULLET_ACT_BLOCK + if(sigreturn & COMPONENT_BULLET_ACTED) + return BULLET_ACT_HIT + + SEND_SIGNAL(src, COMSIG_ATOM_BULLET_ACT, hitting_projectile, def_zone) + if(QDELETED(hitting_projectile)) // Signal deleted it? + return BULLET_ACT_BLOCK + + return hitting_projectile.on_hit( + target = src, + // This armor check only matters for the visuals and messages in on_hit(), it's not actually used to reduce damage since + // only living mobs use armor to reduce damage, but on_hit() is going to need the value no matter what is shot. + blocked = check_projectile_armor(def_zone, hitting_projectile), + pierce_hit = piercing_hit, + ) + +/** + * React to being hit by a thrown object + * + * Default behaviour is to call [hitby_react][/atom/proc/hitby_react] on ourselves after 2 seconds if we are dense + * and under normal gravity. + * + * Im not sure why this the case, maybe to prevent lots of hitby's if the thrown object is + * deleted shortly after hitting something (during explosions or other massive events that + * throw lots of items around - singularity being a notable example) + */ +/atom/proc/hitby(atom/movable/hitting_atom, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) + SEND_SIGNAL(src, COMSIG_ATOM_HITBY, hitting_atom, skipcatch, hitpush, blocked, throwingdatum) + if(density && !has_gravity(hitting_atom)) //thrown stuff bounces off dense stuff in no grav, unless the thrown stuff ends up inside what it hit(embedding, bola, etc...). + addtimer(CALLBACK(src, PROC_REF(hitby_react), hitting_atom), 2) + +/** + * We have have actually hit the passed in atom + * + * Default behaviour is to move back from the item that hit us + */ +/atom/proc/hitby_react(atom/movable/harmed_atom) + if(harmed_atom && isturf(harmed_atom.loc)) + step(harmed_atom, REVERSE_DIR(harmed_atom.dir)) + +///Handle the atom being slipped over +/atom/proc/handle_slip(mob/living/carbon/slipped_carbon, knockdown_amount, obj/slipping_object, lube, paralyze, force_drop) + return + +///Used for making a sound when a mob involuntarily falls into the ground. +/atom/proc/handle_fall(mob/faller) + return + +///Respond to the singularity eating this atom +/atom/proc/singularity_act() + return + +/** + * Respond to the singularity pulling on us + * + * Default behaviour is to send [COMSIG_ATOM_SING_PULL] and return + */ +/atom/proc/singularity_pull(obj/singularity/singularity, current_size) + SEND_SIGNAL(src, COMSIG_ATOM_SING_PULL, singularity, current_size) + +/** + * Respond to acid being used on our atom + * + * Default behaviour is to send [COMSIG_ATOM_ACID_ACT] and return + */ +/atom/proc/acid_act(acidpwr, acid_volume) + SEND_SIGNAL(src, COMSIG_ATOM_ACID_ACT, acidpwr, acid_volume) + return FALSE + +/** + * Respond to an emag being used on our atom + * + * Args: + * * mob/user: The mob that used the emag. Nullable. + * * obj/item/card/emag/emag_card: The emag that was used. Nullable. + * + * Returns: + * TRUE if the emag had any effect, falsey otherwise. + */ +/atom/proc/emag_act(mob/user, obj/item/card/emag/emag_card) + return (SEND_SIGNAL(src, COMSIG_ATOM_EMAG_ACT, user, emag_card)) + +/** + * Respond to narsie eating our atom + * + * Default behaviour is to send [COMSIG_ATOM_NARSIE_ACT] and return + */ +/atom/proc/narsie_act() + SEND_SIGNAL(src, COMSIG_ATOM_NARSIE_ACT) + +/** + * Respond to an electric bolt action on our item + * + * Default behaviour is to return, we define here to allow for cleaner code later on + */ +/atom/proc/zap_act(power, zap_flags) + return + +/** + * Called when the atom log's in or out + * + * Default behaviour is to call on_log on the location this atom is in + */ +/atom/proc/on_log(login) + if(loc) + loc.on_log(login) + +/** + * Causes effects when the atom gets hit by a rust effect from heretics + * + * Override this if you want custom behaviour in whatever gets hit by the rust + */ +/atom/proc/rust_heretic_act() + return + +///Called when something resists while this atom is its loc +/atom/proc/container_resist_act(mob/living/user) + return + +/** + * Respond to an RCD acting on our item + * + * Default behaviour is to send [COMSIG_ATOM_RCD_ACT] and return FALSE + */ +/atom/proc/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, list/rcd_data) + SEND_SIGNAL(src, COMSIG_ATOM_RCD_ACT, user, the_rcd, rcd_data["[RCD_DESIGN_MODE]"]) + return FALSE + +///Return the values you get when an RCD eats you? +/atom/proc/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) + return FALSE + +///This atom has been hit by a hulkified mob in hulk mode (user) +/atom/proc/attack_hulk(mob/living/carbon/human/user) + SEND_SIGNAL(src, COMSIG_ATOM_HULK_ATTACK, user) diff --git a/code/game/atom/atom_appearance.dm b/code/game/atom/atom_appearance.dm new file mode 100644 index 00000000000000..d3e0a64d69cbb3 --- /dev/null +++ b/code/game/atom/atom_appearance.dm @@ -0,0 +1,112 @@ +/atom + ///overlays managed by [update_overlays][/atom/proc/update_overlays] to prevent removing overlays that weren't added by the same proc. Single items are stored on their own, not in a list. + var/list/managed_overlays + +/** + * Updates the appearence of the icon + * + * Mostly delegates to update_name, update_desc, and update_icon + * + * Arguments: + * - updates: A set of bitflags dictating what should be updated. Defaults to [ALL] + */ +/atom/proc/update_appearance(updates=ALL) + SHOULD_NOT_SLEEP(TRUE) + SHOULD_CALL_PARENT(TRUE) + + . = NONE + updates &= ~SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_APPEARANCE, updates) + if(updates & UPDATE_NAME) + . |= update_name(updates) + if(updates & UPDATE_DESC) + . |= update_desc(updates) + if(updates & UPDATE_ICON) + . |= update_icon(updates) + +/// Updates the name of the atom +/atom/proc/update_name(updates=ALL) + SHOULD_CALL_PARENT(TRUE) + return SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_NAME, updates) + +/// Updates the description of the atom +/atom/proc/update_desc(updates=ALL) + SHOULD_CALL_PARENT(TRUE) + return SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_DESC, updates) + +/// Updates the icon of the atom +/atom/proc/update_icon(updates=ALL) + SHOULD_CALL_PARENT(TRUE) + + . = NONE + updates &= ~SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_ICON, updates) + if(updates & UPDATE_ICON_STATE) + update_icon_state() + . |= UPDATE_ICON_STATE + + if(updates & UPDATE_OVERLAYS) + if(LAZYLEN(managed_vis_overlays)) + SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) + + var/list/new_overlays = update_overlays(updates) + var/nulls = 0 + for(var/i in 1 to length(new_overlays)) + var/atom/maybe_not_an_atom = new_overlays[i] + if(isnull(maybe_not_an_atom)) + nulls++ + continue + if(istext(maybe_not_an_atom) || isicon(maybe_not_an_atom)) + continue + new_overlays[i] = maybe_not_an_atom.appearance + if(nulls) + for(var/i in 1 to nulls) + new_overlays -= null + + var/identical = FALSE + var/new_length = length(new_overlays) + if(!managed_overlays && !new_length) + identical = TRUE + else if(!islist(managed_overlays)) + if(new_length == 1 && managed_overlays == new_overlays[1]) + identical = TRUE + else if(length(managed_overlays) == new_length) + identical = TRUE + for(var/i in 1 to length(managed_overlays)) + if(managed_overlays[i] != new_overlays[i]) + identical = FALSE + break + + if(!identical) + var/full_control = FALSE + if(managed_overlays) + full_control = length(overlays) == (islist(managed_overlays) ? length(managed_overlays) : 1) + if(full_control) + overlays = null + else + cut_overlay(managed_overlays) + + switch(length(new_overlays)) + if(0) + if(full_control) + POST_OVERLAY_CHANGE(src) + managed_overlays = null + if(1) + add_overlay(new_overlays) + managed_overlays = new_overlays[1] + else + add_overlay(new_overlays) + managed_overlays = new_overlays + + . |= UPDATE_OVERLAYS + + . |= SEND_SIGNAL(src, COMSIG_ATOM_UPDATED_ICON, updates, .) + +/// Updates the icon state of the atom +/atom/proc/update_icon_state() + SHOULD_CALL_PARENT(TRUE) + return SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_ICON_STATE) + +/// Updates the overlays of the atom +/atom/proc/update_overlays() + SHOULD_CALL_PARENT(TRUE) + . = list() + SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_OVERLAYS, .) diff --git a/code/game/atom/atom_color.dm b/code/game/atom/atom_color.dm new file mode 100644 index 00000000000000..e5b52460aa04d3 --- /dev/null +++ b/code/game/atom/atom_color.dm @@ -0,0 +1,71 @@ +/* + Atom Colour Priority System + A System that gives finer control over which atom colour to colour the atom with. + The "highest priority" one is always displayed as opposed to the default of + "whichever was set last is displayed" +*/ + +/atom + /** + * used to store the different colors on an atom + * + * its inherent color, the colored paint applied on it, special color effect etc... + */ + var/list/atom_colours + +///Adds an instance of colour_type to the atom's atom_colours list +/atom/proc/add_atom_colour(coloration, colour_priority) + if(!atom_colours || !atom_colours.len) + atom_colours = list() + atom_colours.len = COLOUR_PRIORITY_AMOUNT //four priority levels currently. + if(!coloration) + return + if(colour_priority > atom_colours.len) + return + atom_colours[colour_priority] = coloration + update_atom_colour() + + +///Removes an instance of colour_type from the atom's atom_colours list +/atom/proc/remove_atom_colour(colour_priority, coloration) + if(!atom_colours) + return + if(colour_priority > atom_colours.len) + return + if(coloration && atom_colours[colour_priority] != coloration) + return //if we don't have the expected color (for a specific priority) to remove, do nothing + atom_colours[colour_priority] = null + update_atom_colour() + +/** + * Checks if this atom has the passed color + * Can optionally be supplied with a range of priorities, IE only checking "washable" or above + */ +/atom/proc/is_atom_colour(looking_for_color, min_priority_index = 1, max_priority_index = COLOUR_PRIORITY_AMOUNT) + // make sure uppertext hex strings don't mess with lowertext hex strings + looking_for_color = lowertext(looking_for_color) + + if(!LAZYLEN(atom_colours)) + // no atom colors list has been set up, just check the color var + return lowertext(color) == looking_for_color + + for(var/i in min_priority_index to max_priority_index) + if(lowertext(atom_colours[i]) == looking_for_color) + return TRUE + + return FALSE + +///Resets the atom's color to null, and then sets it to the highest priority colour available +/atom/proc/update_atom_colour() + color = null + if(!atom_colours) + return + for(var/checked_color in atom_colours) + if(islist(checked_color)) + var/list/color_list = checked_color + if(color_list.len) + color = color_list + return + else if(checked_color) + color = checked_color + return diff --git a/code/game/atom_defense.dm b/code/game/atom/atom_defense.dm similarity index 78% rename from code/game/atom_defense.dm rename to code/game/atom/atom_defense.dm index 889aaba1101514..8b398313616bc2 100644 --- a/code/game/atom_defense.dm +++ b/code/game/atom/atom_defense.dm @@ -1,3 +1,17 @@ +/atom + ///any atom that uses integrity and can be damaged must set this to true, otherwise the integrity procs will throw an error + var/uses_integrity = FALSE + + VAR_PROTECTED/datum/armor/armor_type = /datum/armor/none + VAR_PRIVATE/datum/armor/armor + + VAR_PRIVATE/atom_integrity //defaults to max_integrity + var/max_integrity = 500 + var/integrity_failure = 0 //0 if we have no special broken behavior, otherwise is a percentage of at what point the atom breaks. 0.5 being 50% + ///Damage under this value will be completely ignored + var/damage_deflection = 0 + + var/resistance_flags = NONE // INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ON_FIRE | UNACIDABLE | ACID_PROOF /// The essential proc to call when an atom must receive damage of any kind. /atom/proc/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", sound_effect = TRUE, attack_dir, armour_penetration = 0) @@ -19,14 +33,18 @@ . = damage_amount + var/previous_atom_integrity = atom_integrity + update_integrity(atom_integrity - damage_amount) + var/integrity_failure_amount = integrity_failure * max_integrity + //BREAKING FIRST - if(integrity_failure && atom_integrity <= integrity_failure * max_integrity) + if(integrity_failure && previous_atom_integrity > integrity_failure_amount && atom_integrity <= integrity_failure_amount) atom_break(damage_flag) //DESTROYING SECOND - if(atom_integrity <= 0) + if(atom_integrity <= 0 && previous_atom_integrity > 0) atom_destruction(damage_flag) /// Proc for recovering atom_integrity. Returns the amount repaired by @@ -93,12 +111,12 @@ switch(damage_type) if(BRUTE) if(damage_amount) - //SKYRAT EDIT ADDITION - CREDITS TO WHITEDREAM(valtos) - playsound(src, pick('modular_skyrat/master_files/sound/effects/metalblock1.wav', 'modular_skyrat/master_files/sound/effects/metalblock2.wav', \ - 'modular_skyrat/master_files/sound/effects/metalblock3.wav', 'modular_skyrat/master_files/sound/effects/metalblock4.wav', \ - 'modular_skyrat/master_files/sound/effects/metalblock5.wav', 'modular_skyrat/master_files/sound/effects/metalblock6.wav', \ - 'modular_skyrat/master_files/sound/effects/metalblock7.wav', 'modular_skyrat/master_files/sound/effects/metalblock8.wav'), 50, TRUE) - //SKYRAT EDIT END + //NOVA EDIT ADDITION - CREDITS TO WHITEDREAM(valtos) + playsound(src, pick('modular_nova/master_files/sound/effects/metalblock1.wav', 'modular_nova/master_files/sound/effects/metalblock2.wav', \ + 'modular_nova/master_files/sound/effects/metalblock3.wav', 'modular_nova/master_files/sound/effects/metalblock4.wav', \ + 'modular_nova/master_files/sound/effects/metalblock5.wav', 'modular_nova/master_files/sound/effects/metalblock6.wav', \ + 'modular_nova/master_files/sound/effects/metalblock7.wav', 'modular_nova/master_files/sound/effects/metalblock8.wav'), 50, TRUE) + //NOVA EDIT END else playsound(src, 'sound/weapons/tap.ogg', 50, TRUE) if(BURN) @@ -108,7 +126,7 @@ /atom/proc/hulk_damage() return 150 //the damage hulks do on punches to this atom, is affected by melee armor -/atom/proc/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, armor_penetration = 0) //used by attack_alien, attack_animal, and attack_slime +/atom/proc/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, armor_penetration = 0) //used by attack_alien, attack_animal if(!uses_integrity) CRASH("unimplemented /atom/proc/attack_generic()!") user.do_attack_animation(src) diff --git a/code/game/atom/atom_examine.dm b/code/game/atom/atom_examine.dm new file mode 100644 index 00000000000000..0f1d4fc4e6a3b0 --- /dev/null +++ b/code/game/atom/atom_examine.dm @@ -0,0 +1,114 @@ +/atom + ///If non-null, overrides a/an/some in all cases + var/article + +/** + * Called when a mob examines (shift click or verb) this atom + * + * Default behaviour is to get the name and icon of the object and it's reagents where + * the [TRANSPARENT] flag is set on the reagents holder + * + * Produces a signal [COMSIG_ATOM_EXAMINE] + */ +/atom/proc/examine(mob/user) + var/examine_string = get_examine_string(user, thats = TRUE) + if(examine_string) + . = list("[examine_string].", EXAMINE_SECTION_BREAK) // NOVA EDIT CHANGE + else + . = list() + + . += get_name_chaser(user) + if(desc) + . += desc + + if(custom_materials) + // NOVA EDIT ADDITION BEGIN - HR sections + if(length(custom_materials) > 1) + . += EXAMINE_SECTION_BREAK //NOVA EDIT ADDITION + //NOVA EDIT ADDITION END + var/list/materials_list = list() + for(var/custom_material in custom_materials) + var/datum/material/current_material = GET_MATERIAL_REF(custom_material) + materials_list += "[current_material.name]" + . += "It is made out of [english_list(materials_list)]." + // NOVA EDIT ADDITION BEGIN - HR sections + if(length(custom_materials) > 1) + . += EXAMINE_SECTION_BREAK //NOVA EDIT ADDITION + //NOVA EDIT ADDITION END + + if(reagents) + var/user_sees_reagents = user.can_see_reagents() + var/reagent_sigreturn = SEND_SIGNAL(src, COMSIG_ATOM_REAGENT_EXAMINE, user, ., user_sees_reagents) + if(!(reagent_sigreturn & STOP_GENERIC_REAGENT_EXAMINE)) + if(reagents.flags & TRANSPARENT) + if(reagents.total_volume) + . += "It contains [reagents.total_volume] units of various reagents[user_sees_reagents ? ":" : "."]" + if(user_sees_reagents) //Show each individual reagent for detailed examination + for(var/datum/reagent/current_reagent as anything in reagents.reagent_list) + . += "• [round(current_reagent.volume, CHEMICAL_VOLUME_ROUNDING)] units of [current_reagent.name]" + if(reagents.is_reacting) + . += span_warning("It is currently reacting!") + . += span_notice("The solution's pH is [round(reagents.ph, 0.01)] and has a temperature of [reagents.chem_temp]K.") + + else + . += "It contains:
Nothing." + else if(reagents.flags & AMOUNT_VISIBLE) + if(reagents.total_volume) + . += span_notice("It has [reagents.total_volume] unit\s left.") + else + . += span_danger("It's empty.") + + SEND_SIGNAL(src, COMSIG_ATOM_EXAMINE, user, .) + +/** + * Called when a mob examines (shift click or verb) this atom twice (or more) within EXAMINE_MORE_WINDOW (default 1 second) + * + * This is where you can put extra information on something that may be superfluous or not important in critical gameplay + * moments, while allowing people to manually double-examine to take a closer look + * + * Produces a signal [COMSIG_ATOM_EXAMINE_MORE] + */ +/atom/proc/examine_more(mob/user) + SHOULD_CALL_PARENT(TRUE) + RETURN_TYPE(/list) + + . = list() + SEND_SIGNAL(src, COMSIG_ATOM_EXAMINE_MORE, user, .) + SEND_SIGNAL(user, COMSIG_MOB_EXAMINING_MORE, src, .) + +/** + * Get the name of this object for examine + * + * You can override what is returned from this proc by registering to listen for the + * [COMSIG_ATOM_GET_EXAMINE_NAME] signal + */ +/atom/proc/get_examine_name(mob/user) + . = "\a [src]" + var/list/override = list(gender == PLURAL ? "some" : "a", " ", "[name]") + if(article) + . = "[article] [src]" + override[EXAMINE_POSITION_ARTICLE] = article + if(SEND_SIGNAL(src, COMSIG_ATOM_GET_EXAMINE_NAME, user, override) & COMPONENT_EXNAME_CHANGED) + . = override.Join("") + +///Generate the full examine string of this atom (including icon for goonchat) +/atom/proc/get_examine_string(mob/user, thats = FALSE) + return "[icon2html(src, user)] [thats? "That's ":""][get_examine_name(user)]" + +/** + * Returns an extended list of examine strings for any contained ID cards. + * + * Arguments: + * * user - The user who is doing the examining. + */ +/atom/proc/get_id_examine_strings(mob/user) + . = list() + return + +///Used to insert text after the name but before the description in examine() +/atom/proc/get_name_chaser(mob/user, list/name_chaser = list()) + return name_chaser + +/// Used by mobs to determine the name for someone wearing a mask, or with a disfigured or missing face. By default just returns the atom's name. add_id_name will control whether or not we append "(as [id_name])". +/atom/proc/get_visible_name(add_id_name) + return name diff --git a/code/game/atom/atom_greyscale.dm b/code/game/atom/atom_greyscale.dm new file mode 100644 index 00000000000000..51d24b8528bb89 --- /dev/null +++ b/code/game/atom/atom_greyscale.dm @@ -0,0 +1,30 @@ +/atom + ///The config type to use for greyscaled sprites. Both this and greyscale_colors must be assigned to work. + var/greyscale_config + ///A string of hex format colors to be used by greyscale sprites, ex: "#0054aa#badcff" + var/greyscale_colors + +/// Handles updates to greyscale value updates. +/// The colors argument can be either a list or the full color string. +/// Child procs should call parent last so the update happens after all changes. +/atom/proc/set_greyscale(list/colors, new_config) + SHOULD_CALL_PARENT(TRUE) + if(istype(colors)) + colors = colors.Join("") + if(!isnull(colors) && greyscale_colors != colors) // If you want to disable greyscale stuff then give a blank string + greyscale_colors = colors + + if(!isnull(new_config) && greyscale_config != new_config) + greyscale_config = new_config + + update_greyscale() + +/// Checks if this atom uses the GAGS system and if so updates the icon +/atom/proc/update_greyscale() + SHOULD_CALL_PARENT(TRUE) + if(greyscale_colors && greyscale_config) + icon = SSgreyscale.GetColoredIconByType(greyscale_config, greyscale_colors) + if(!smoothing_flags) // This is a bitfield but we're just checking that some sort of smoothing is happening + return + update_atom_colour() + QUEUE_SMOOTH(src) diff --git a/code/game/atom/atom_invisibility.dm b/code/game/atom/atom_invisibility.dm new file mode 100644 index 00000000000000..53fbe895817cfe --- /dev/null +++ b/code/game/atom/atom_invisibility.dm @@ -0,0 +1,72 @@ +// Index defines +#define INVISIBILITY_VALUE 1 +#define INVISIBILITY_PRIORITY 2 + +/atom + VAR_PRIVATE/list/invisibility_sources + VAR_PRIVATE/current_invisibility_priority = -INFINITY + +/atom/proc/RecalculateInvisibility() + PRIVATE_PROC(TRUE) + + if(!invisibility_sources) + current_invisibility_priority = -INFINITY + invisibility = initial(invisibility) + return + + var/highest_priority + var/list/highest_priority_invisibility_data + for(var/entry in invisibility_sources) + var/list/priority_data + if(islist(entry)) + priority_data = entry + else + priority_data = invisibility_sources[entry] + + var/priority = priority_data[INVISIBILITY_PRIORITY] + if(highest_priority > priority) // In the case of equal priorities, we use the last thing in the list so that more recent changes apply first + continue + + highest_priority = priority + highest_priority_invisibility_data = priority_data + + current_invisibility_priority = highest_priority + invisibility = highest_priority_invisibility_data[INVISIBILITY_VALUE] + +/** + * Sets invisibility according to priority. + * If you want to be able to undo the value you set back to what it would be otherwise, + * you should provide an id here and remove it using RemoveInvisibility(id) + */ +/atom/proc/SetInvisibility(desired_value, id, priority=0) + if(!invisibility_sources) + invisibility_sources = list() + + if(id) + invisibility_sources[id] = list(desired_value, priority) + else + invisibility_sources += list(list(desired_value, priority)) + + if(current_invisibility_priority > priority) + return + + RecalculateInvisibility() + +/// Removes the specified invisibility source from the tracker +/atom/proc/RemoveInvisibility(id) + if(!invisibility_sources) + return + + var/list/priority_data = invisibility_sources[id] + invisibility_sources -= id + + if(length(invisibility_sources) == 0) + invisibility_sources = null + + if(current_invisibility_priority > priority_data[INVISIBILITY_PRIORITY]) + return + + RecalculateInvisibility() + +#undef INVISIBILITY_VALUE +#undef INVISIBILITY_PRIORITY diff --git a/code/game/atom/atom_materials.dm b/code/game/atom/atom_materials.dm new file mode 100644 index 00000000000000..803a79110a12d1 --- /dev/null +++ b/code/game/atom/atom_materials.dm @@ -0,0 +1,126 @@ +/atom + ///The custom materials this atom is made of, used by a lot of things like furniture, walls, and floors (if I finish the functionality, that is.) + ///The list referenced by this var can be shared by multiple objects and should not be directly modified. Instead, use [set_custom_materials][/atom/proc/set_custom_materials]. + var/list/datum/material/custom_materials + ///Bitfield for how the atom handles materials. + var/material_flags = NONE + ///Modifier that raises/lowers the effect of the amount of a material, prevents small and easy to get items from being death machines. + var/material_modifier = 1 + +/// Sets the custom materials for an item. +/atom/proc/set_custom_materials(list/materials, multiplier = 1) + if(custom_materials && material_flags & MATERIAL_EFFECTS) //Only runs if custom materials existed at first and affected src. + for(var/current_material in custom_materials) + var/datum/material/custom_material = GET_MATERIAL_REF(current_material) + custom_material.on_removed(src, custom_materials[current_material] * material_modifier, material_flags) //Remove the current materials + + if(!length(materials)) + custom_materials = null + return + + if(material_flags & MATERIAL_EFFECTS) + for(var/current_material in materials) + var/datum/material/custom_material = GET_MATERIAL_REF(current_material) + custom_material.on_applied(src, materials[current_material] * multiplier * material_modifier, material_flags) + + custom_materials = SSmaterials.FindOrCreateMaterialCombo(materials, multiplier) + +/** + * Returns the material composition of the atom. + * + * Used when recycling items, specifically to turn alloys back into their component mats. + * + * Exists because I'd need to add a way to un-alloy alloys or otherwise deal + * with people converting the entire stations material supply into alloys. + * + * Arguments: + * - flags: A set of flags determining how exactly the materials are broken down. + */ +/atom/proc/get_material_composition() + . = list() + + var/list/cached_materials = custom_materials + for(var/mat in cached_materials) + var/datum/material/material = GET_MATERIAL_REF(mat) + var/list/material_comp = material.return_composition(cached_materials[mat]) + for(var/comp_mat in material_comp) + .[comp_mat] += material_comp[comp_mat] + +/** + * Fetches a list of all of the materials this object has of the desired type. Returns null if there is no valid materials of the type + * + * Arguments: + * - [required_material][/datum/material]: The type of material we are checking for + * - mat_amount: The minimum required amount of material + */ +/atom/proc/has_material_type(datum/material/required_material, mat_amount = 0) + var/list/cached_materials = custom_materials + if(!length(cached_materials)) + return null + + var/materials_of_type + for(var/current_material in cached_materials) + if(cached_materials[current_material] < mat_amount) + continue + var/datum/material/material = GET_MATERIAL_REF(current_material) + if(!istype(material, required_material)) + continue + LAZYSET(materials_of_type, material, cached_materials[current_material]) + + return materials_of_type + +/** + * Fetches a list of all of the materials this object has with the desired material category. + * + * Arguments: + * - category: The category to check for + * - any_flags: Any bitflags that must be present for the category + * - all_flags: All bitflags that must be present for the category + * - no_flags: Any bitflags that must not be present for the category + * - mat_amount: The minimum amount of materials that must be present + */ +/atom/proc/has_material_category(category, any_flags=0, all_flags=0, no_flags=0, mat_amount=0) + var/list/cached_materials = custom_materials + if(!length(cached_materials)) + return null + + var/materials_of_category + for(var/current_material in cached_materials) + if(cached_materials[current_material] < mat_amount) + continue + var/datum/material/material = GET_MATERIAL_REF(current_material) + var/category_flags = material?.categories[category] + if(isnull(category_flags)) + continue + if(any_flags && !(category_flags & any_flags)) + continue + if(all_flags && (all_flags != (category_flags & all_flags))) + continue + if(no_flags && (category_flags & no_flags)) + continue + LAZYSET(materials_of_category, material, cached_materials[current_material]) + return materials_of_category + +/** + * Gets the most common material in the object. + */ +/atom/proc/get_master_material() + var/list/cached_materials = custom_materials + if(!length(cached_materials)) + return null + + var/most_common_material = null + var/max_amount = 0 + for(var/material in cached_materials) + if(cached_materials[material] > max_amount) + most_common_material = material + max_amount = cached_materials[material] + + if(most_common_material) + return GET_MATERIAL_REF(most_common_material) + +/** + * Gets the total amount of materials in this atom. + */ +/atom/proc/get_custom_material_amount() + return isnull(custom_materials) ? 0 : counterlist_sum(custom_materials) diff --git a/code/game/atom/atom_merger.dm b/code/game/atom/atom_merger.dm new file mode 100644 index 00000000000000..1787d51675baf8 --- /dev/null +++ b/code/game/atom/atom_merger.dm @@ -0,0 +1,14 @@ +/atom + ///Holds merger groups currently active on the atom. Do not access directly, use GetMergeGroup() instead. + var/list/datum/merger/mergers + +/// Gets a merger datum representing the connected blob of objects in the allowed_types argument +/atom/proc/GetMergeGroup(id, list/allowed_types) + RETURN_TYPE(/datum/merger) + var/datum/merger/candidate + if(mergers) + candidate = mergers[id] + if(!candidate) + new /datum/merger(id, allowed_types, src) + candidate = mergers[id] + return candidate diff --git a/code/game/atom/atom_orbit.dm b/code/game/atom/atom_orbit.dm new file mode 100644 index 00000000000000..8eecddd952d48c --- /dev/null +++ b/code/game/atom/atom_orbit.dm @@ -0,0 +1,33 @@ +/atom + ///Reference to atom being orbited + var/atom/orbit_target + ///The orbiter component, if there's anything orbiting this atom + var/datum/component/orbiter/orbiters + +/** + * Recursive getter method to return a list of all ghosts orbitting this atom + * + * This will work fine without manually passing arguments. + * * processed - The list of atoms we've already convered + * * source - Is this the atom for who we're counting up all the orbiters? + * * ignored_stealthed_admins - If TRUE, don't count admins who are stealthmoded and orbiting this + */ +/atom/proc/get_all_orbiters(list/processed, source = TRUE, ignore_stealthed_admins = TRUE) + var/list/output = list() + if(!processed) + processed = list() + else if(src in processed) + return output + + if(!source) + output += src + + processed += src + for(var/atom/atom_orbiter as anything in orbiters?.orbiter_list) + output += atom_orbiter.get_all_orbiters(processed, source = FALSE) + return output + +/mob/get_all_orbiters(list/processed, source = TRUE, ignore_stealthed_admins = TRUE) + if(!source && ignore_stealthed_admins && client?.holder?.fakekey) + return list() + return ..() diff --git a/code/game/atom/atom_storage.dm b/code/game/atom/atom_storage.dm new file mode 100644 index 00000000000000..6273c28fc2e87b --- /dev/null +++ b/code/game/atom/atom_storage.dm @@ -0,0 +1,41 @@ +/atom + /// the datum handler for our contents - see create_storage() for creation method + var/datum/storage/atom_storage + +/// A quick and easy way to create a storage datum for an atom +/atom/proc/create_storage( + max_slots, + max_specific_storage, + max_total_storage, + numerical_stacking = FALSE, + allow_quick_gather = FALSE, + allow_quick_empty = FALSE, + collection_mode = COLLECT_ONE, + attack_hand_interact = TRUE, + list/canhold, + list/canthold, + storage_type = /datum/storage, +) + + if(atom_storage) + QDEL_NULL(atom_storage) + + atom_storage = new storage_type(src, max_slots, max_specific_storage, max_total_storage, numerical_stacking, allow_quick_gather, collection_mode, attack_hand_interact) + + if(canhold || canthold) + atom_storage.set_holdable(canhold, canthold) + + return atom_storage + +/// A quick and easy way to /clone/ a storage datum for an atom (does not copy over contents, only the datum details) +/atom/proc/clone_storage(datum/storage/cloning) + if(atom_storage) + QDEL_NULL(atom_storage) + + atom_storage = new cloning.type(src, cloning.max_slots, cloning.max_specific_storage, cloning.max_total_storage, cloning.numerical_stacking, cloning.allow_quick_gather, cloning.collection_mode, cloning.attack_hand_interact) + + if(cloning.can_hold || cloning.cant_hold) + if(!atom_storage.can_hold && !atom_storage.cant_hold) //In the event that the can/can't hold lists are already in place (such as from storage objects added on initialize). + atom_storage.set_holdable(cloning.can_hold, cloning.cant_hold) + + return atom_storage diff --git a/code/game/atom/atom_tool_acts.dm b/code/game/atom/atom_tool_acts.dm new file mode 100644 index 00000000000000..fb02d674cdec03 --- /dev/null +++ b/code/game/atom/atom_tool_acts.dm @@ -0,0 +1,180 @@ +/** + * ## Item interaction + * + * Handles non-combat iteractions of a tool on this atom, + * such as using a tool on a wall to deconstruct it, + * or scanning someone with a health analyzer + * + * This can be overridden to add custom item interactions to this atom + * + * Do not call this directly + */ +/atom/proc/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) + SHOULD_CALL_PARENT(TRUE) + PROTECTED_PROC(TRUE) + + var/is_left_clicking = !is_right_clicking + var/early_sig_return = NONE + if(is_left_clicking) + early_sig_return = SEND_SIGNAL(src, COMSIG_ATOM_ITEM_INTERACTION, user, tool, modifiers) \ + | SEND_SIGNAL(tool, COMSIG_ITEM_INTERACTING_WITH_ATOM, user, src, modifiers) + else + early_sig_return = SEND_SIGNAL(src, COMSIG_ATOM_ITEM_INTERACTION_SECONDARY, user, tool, modifiers) \ + | SEND_SIGNAL(tool, COMSIG_ITEM_INTERACTING_WITH_ATOM_SECONDARY, user, src, modifiers) + if(early_sig_return) + return early_sig_return + + var/interact_return = is_left_clicking \ + ? tool.interact_with_atom(src, user) \ + : tool.interact_with_atom_secondary(src, user) + if(interact_return) + return interact_return + + var/tool_type = tool.tool_behaviour + if(!tool_type) // here on only deals with ... tools + return NONE + + var/list/processing_recipes = list() + var/signal_result = is_left_clicking \ + ? SEND_SIGNAL(src, COMSIG_ATOM_TOOL_ACT(tool_type), user, tool, processing_recipes) \ + : SEND_SIGNAL(src, COMSIG_ATOM_SECONDARY_TOOL_ACT(tool_type), user, tool) + if(signal_result) + return signal_result + if(length(processing_recipes)) + process_recipes(user, tool, processing_recipes) + if(QDELETED(tool)) + return ITEM_INTERACT_SUCCESS // Safe-ish to assume that if we deleted our item something succeeded + + var/act_result = NONE // or FALSE, or null, as some things may return + + switch(tool_type) + if(TOOL_CROWBAR) + act_result = is_left_clicking ? crowbar_act(user, tool) : crowbar_act_secondary(user, tool) + if(TOOL_MULTITOOL) + act_result = is_left_clicking ? multitool_act(user, tool) : multitool_act_secondary(user, tool) + if(TOOL_SCREWDRIVER) + act_result = is_left_clicking ? screwdriver_act(user, tool) : screwdriver_act_secondary(user, tool) + if(TOOL_WRENCH) + act_result = is_left_clicking ? wrench_act(user, tool) : wrench_act_secondary(user, tool) + if(TOOL_WIRECUTTER) + act_result = is_left_clicking ? wirecutter_act(user, tool) : wirecutter_act_secondary(user, tool) + if(TOOL_WELDER) + act_result = is_left_clicking ? welder_act(user, tool) : welder_act_secondary(user, tool) + if(TOOL_ANALYZER) + act_result = is_left_clicking ? analyzer_act(user, tool) : analyzer_act_secondary(user, tool) + // NOVA EDIT ADDITION START - SKYRAT TOOLS + if(TOOL_BILLOW) + act_result = is_left_clicking ? billow_act(user, tool) : billow_act_secondary(user, tool) + if(TOOL_TONG) + act_result = is_left_clicking ? tong_act(user, tool) : tong_act_secondary(user, tool) + if(TOOL_HAMMER) + act_result = is_left_clicking ? hammer_act(user, tool) : hammer_act_secondary(user, tool) + if(TOOL_BLOWROD) + act_result = is_left_clicking ? blowrod_act(user, tool) : blowrod_act_secondary(user, tool) + // NOVA EDIT ADDITION END + + if(!act_result) + return NONE + + // A tooltype_act has completed successfully + if(is_left_clicking) + log_tool("[key_name(user)] used [tool] on [src] at [AREACOORD(src)]") + SEND_SIGNAL(tool, COMSIG_TOOL_ATOM_ACTED_PRIMARY(tool_type), src) + else + log_tool("[key_name(user)] used [tool] on [src] (right click) at [AREACOORD(src)]") + SEND_SIGNAL(tool, COMSIG_TOOL_ATOM_ACTED_SECONDARY(tool_type), src) + return act_result + +/** + * Called when this item is being used to interact with an atom, + * IE, a mob is clicking on an atom with this item. + * + * Return an ITEM_INTERACT_ flag in the event the interaction was handled, to cancel further interaction code. + * Return NONE to allow default interaction / tool handling. + */ +/obj/item/proc/interact_with_atom(atom/interacting_with, mob/living/user) + return NONE + +/** + * Called when this item is being used to interact with an atom WITH RIGHT CLICK, + * IE, a mob is right clicking on an atom with this item. + * + * Default behavior has it run the same code as left click. + * + * Return an ITEM_INTERACT_ flag in the event the interaction was handled, to cancel further interaction code. + * Return NONE to allow default interaction / tool handling. + */ +/obj/item/proc/interact_with_atom_secondary(atom/interacting_with, mob/living/user) + return interact_with_atom(interacting_with, user) + +/* + * Tool-specific behavior procs. + * + * Return an ITEM_INTERACT_ flag to handle the event, or NONE to allow the mob to attack the atom. + * Returning TRUE will also cancel attacks. It is equivalent to an ITEM_INTERACT_ flag. (This is legacy behavior, and is not to be relied on) + * Returning FALSE or null will also allow the mob to attack the atom. (This is also legacy behavior) + */ + +/// Called on an object when a tool with crowbar capabilities is used to left click an object +/atom/proc/crowbar_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with crowbar capabilities is used to right click an object +/atom/proc/crowbar_act_secondary(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with multitool capabilities is used to left click an object +/atom/proc/multitool_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with multitool capabilities is used to right click an object +/atom/proc/multitool_act_secondary(mob/living/user, obj/item/tool) + return + +///Check if an item supports a data buffer (is a multitool) +/atom/proc/multitool_check_buffer(user, obj/item/multitool, silent = FALSE) + if(!istype(multitool, /obj/item/multitool)) + if(user && !silent) + to_chat(user, span_warning("[multitool] has no data buffer!")) + return FALSE + return TRUE + +/// Called on an object when a tool with screwdriver capabilities is used to left click an object +/atom/proc/screwdriver_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with screwdriver capabilities is used to right click an object +/atom/proc/screwdriver_act_secondary(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with wrench capabilities is used to left click an object +/atom/proc/wrench_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with wrench capabilities is used to right click an object +/atom/proc/wrench_act_secondary(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with wirecutter capabilities is used to left click an object +/atom/proc/wirecutter_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with wirecutter capabilities is used to right click an object +/atom/proc/wirecutter_act_secondary(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with welder capabilities is used to left click an object +/atom/proc/welder_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with welder capabilities is used to right click an object +/atom/proc/welder_act_secondary(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with analyzer capabilities is used to left click an object +/atom/proc/analyzer_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with analyzer capabilities is used to right click an object +/atom/proc/analyzer_act_secondary(mob/living/user, obj/item/tool) + return diff --git a/code/game/atom/atom_vv.dm b/code/game/atom/atom_vv.dm new file mode 100644 index 00000000000000..b5a572749a6726 --- /dev/null +++ b/code/game/atom/atom_vv.dm @@ -0,0 +1,294 @@ +/** + * Return the markup to for the dropdown list for the VV panel for this atom + * + * Override in subtypes to add custom VV handling in the VV panel + */ +/atom/vv_get_dropdown() + . = ..() + VV_DROPDOWN_OPTION("", "---------") + if(!ismovable(src)) + var/turf/curturf = get_turf(src) + if(curturf) + . += "" + VV_DROPDOWN_OPTION(VV_HK_MODIFY_TRANSFORM, "Modify Transform") + VV_DROPDOWN_OPTION(VV_HK_SPIN_ANIMATION, "SpinAnimation") + VV_DROPDOWN_OPTION(VV_HK_STOP_ALL_ANIMATIONS, "Stop All Animations") + VV_DROPDOWN_OPTION(VV_HK_SHOW_HIDDENPRINTS, "Show Hiddenprint log") + VV_DROPDOWN_OPTION(VV_HK_ADD_REAGENT, "Add Reagent") + VV_DROPDOWN_OPTION(VV_HK_TRIGGER_EMP, "EMP Pulse") + VV_DROPDOWN_OPTION(VV_HK_TRIGGER_EXPLOSION, "Explosion") + VV_DROPDOWN_OPTION(VV_HK_EDIT_FILTERS, "Edit Filters") + VV_DROPDOWN_OPTION(VV_HK_EDIT_COLOR_MATRIX, "Edit Color as Matrix") + VV_DROPDOWN_OPTION(VV_HK_TEST_MATRIXES, "Test Matrices") + VV_DROPDOWN_OPTION(VV_HK_ADD_AI, "Add AI controller") + VV_DROPDOWN_OPTION(VV_HK_ARMOR_MOD, "Modify Armor") + if(greyscale_colors) + VV_DROPDOWN_OPTION(VV_HK_MODIFY_GREYSCALE, "Modify greyscale colors") + +/atom/vv_do_topic(list/href_list) + . = ..() + + if(!.) + return + + if(href_list[VV_HK_ADD_REAGENT]) + if(!check_rights(R_VAREDIT)) + return + if(!reagents) + var/amount = input(usr, "Specify the reagent size of [src]", "Set Reagent Size", 50) as num|null + if(amount) + create_reagents(amount) + if(reagents) + var/chosen_id + switch(tgui_alert(usr, "Choose a method.", "Add Reagents", list("Search", "Choose from a list", "I'm feeling lucky"))) + if("Search") + var/valid_id + while(!valid_id) + chosen_id = input(usr, "Enter the ID of the reagent you want to add.", "Search reagents") as null|text + if(isnull(chosen_id)) //Get me out of here! + break + if (!ispath(text2path(chosen_id))) + chosen_id = pick_closest_path(chosen_id, make_types_fancy(subtypesof(/datum/reagent))) + if (ispath(chosen_id)) + valid_id = TRUE + else + valid_id = TRUE + if(!valid_id) + to_chat(usr, span_warning("A reagent with that ID doesn't exist!")) + if("Choose from a list") + chosen_id = input(usr, "Choose a reagent to add.", "Choose a reagent.") as null|anything in sort_list(subtypesof(/datum/reagent), GLOBAL_PROC_REF(cmp_typepaths_asc)) + if("I'm feeling lucky") + chosen_id = pick(subtypesof(/datum/reagent)) + if(chosen_id) + var/amount = input(usr, "Choose the amount to add.", "Choose the amount.", reagents.maximum_volume) as num|null + if(amount) + reagents.add_reagent(chosen_id, amount) + log_admin("[key_name(usr)] has added [amount] units of [chosen_id] to [src]") + message_admins(span_notice("[key_name(usr)] has added [amount] units of [chosen_id] to [src]")) + + if(href_list[VV_HK_TRIGGER_EXPLOSION]) + if(!check_rights(R_FUN)) + return + usr.client.cmd_admin_explosion(src) + + if(href_list[VV_HK_TRIGGER_EMP]) + if(!check_rights(R_FUN)) + return + usr.client.cmd_admin_emp(src) + + if(href_list[VV_HK_SHOW_HIDDENPRINTS]) + if(!check_rights(R_ADMIN)) + return + usr.client.cmd_show_hiddenprints(src) + + if(href_list[VV_HK_ARMOR_MOD]) + if(!check_rights(NONE)) + return + var/list/pickerlist = list() + var/list/armorlist = get_armor().get_rating_list() + for (var/i in armorlist) + pickerlist += list(list("value" = armorlist[i], "name" = i)) + var/list/result = presentpicker(usr, "Modify armor", "Modify armor: [src]", Button1="Save", Button2 = "Cancel", Timeout=FALSE, inputtype = "text", values = pickerlist) + var/list/armor_all = ARMOR_LIST_ALL() + if(islist(result)) + if(result["button"] != 2) // If the user pressed the cancel button + // text2num conveniently returns a null on invalid values + var/list/converted = list() + for(var/armor_key in armor_all) + converted[armor_key] = text2num(result["values"][armor_key]) + set_armor(get_armor().generate_new_with_specific(converted)) + var/message = "[key_name(usr)] modified the armor on [src] ([type]) to: " + for(var/armor_key in armor_all) + message += "[armor_key]=[get_armor_rating(armor_key)]," + message = copytext(message, 1, -1) + log_admin(span_notice(message)) + message_admins(span_notice(message)) + + if(href_list[VV_HK_ADD_AI]) + if(!check_rights(R_VAREDIT)) + return + var/result = input(usr, "Choose the AI controller to apply to this atom WARNING: Not all AI works on all atoms.", "AI controller") as null|anything in subtypesof(/datum/ai_controller) + if(!result) + return + ai_controller = new result(src) + + if(href_list[VV_HK_MODIFY_TRANSFORM]) + if(!check_rights(R_VAREDIT)) + return + var/result = input(usr, "Choose the transformation to apply","Transform Mod") as null|anything in list("Scale","Translate","Rotate","Shear") + var/matrix/M = transform + if(!result) + return + switch(result) + if("Scale") + var/x = input(usr, "Choose x mod","Transform Mod") as null|num + var/y = input(usr, "Choose y mod","Transform Mod") as null|num + if(isnull(x) || isnull(y)) + return + transform = M.Scale(x,y) + if("Translate") + var/x = input(usr, "Choose x mod (negative = left, positive = right)","Transform Mod") as null|num + var/y = input(usr, "Choose y mod (negative = down, positive = up)","Transform Mod") as null|num + if(isnull(x) || isnull(y)) + return + transform = M.Translate(x,y) + if("Shear") + var/x = input(usr, "Choose x mod","Transform Mod") as null|num + var/y = input(usr, "Choose y mod","Transform Mod") as null|num + if(isnull(x) || isnull(y)) + return + transform = M.Shear(x,y) + if("Rotate") + var/angle = input(usr, "Choose angle to rotate","Transform Mod") as null|num + if(isnull(angle)) + return + transform = M.Turn(angle) + SEND_SIGNAL(src, COMSIG_ATOM_VV_MODIFY_TRANSFORM) + + if(href_list[VV_HK_SPIN_ANIMATION]) + if(!check_rights(R_VAREDIT)) + return + var/num_spins = input(usr, "Do you want infinite spins?", "Spin Animation") in list("Yes", "No") + if(num_spins == "No") + num_spins = input(usr, "How many spins?", "Spin Animation") as null|num + else + num_spins = -1 + if(!num_spins) + return + var/spin_speed = input(usr, "How fast?", "Spin Animation") as null|num + if(!spin_speed) + return + var/direction = input(usr, "Which direction?", "Spin Animation") in list("Clockwise", "Counter-clockwise") + switch(direction) + if("Clockwise") + direction = 1 + if("Counter-clockwise") + direction = 0 + else + return + SpinAnimation(spin_speed, num_spins, direction) + + if(href_list[VV_HK_STOP_ALL_ANIMATIONS]) + if(!check_rights(R_VAREDIT)) + return + var/result = input(usr, "Are you sure?", "Stop Animating") in list("Yes", "No") + if(result == "Yes") + animate(src, transform = null, flags = ANIMATION_END_NOW) // Literally just fucking stop animating entirely because admin said so + return + + if(href_list[VV_HK_AUTO_RENAME]) + if(!check_rights(R_VAREDIT)) + return + var/newname = input(usr, "What do you want to rename this to?", "Automatic Rename") as null|text + // Check the new name against the chat filter. If it triggers the IC chat filter, give an option to confirm. + if(newname && !(is_ic_filtered(newname) || is_soft_ic_filtered(newname) && tgui_alert(usr, "Your selected name contains words restricted by IC chat filters. Confirm this new name?", "IC Chat Filter Conflict", list("Confirm", "Cancel")) != "Confirm")) + vv_auto_rename(newname) + + if(href_list[VV_HK_EDIT_FILTERS]) + if(!check_rights(R_VAREDIT)) + return + usr.client?.open_filter_editor(src) + + if(href_list[VV_HK_EDIT_COLOR_MATRIX]) + if(!check_rights(R_VAREDIT)) + return + usr.client?.open_color_matrix_editor(src) + + if(href_list[VV_HK_TEST_MATRIXES]) + if(!check_rights(R_VAREDIT)) + return + usr.client?.open_matrix_tester(src) + +/atom/vv_get_header() + . = ..() + var/refid = REF(src) + . += "[VV_HREF_TARGETREF(refid, VV_HK_AUTO_RENAME, "[src]")]" + . += "
<< [dir2text(dir) || dir] >>" + +/** + * call back when a var is edited on this atom + * + * Can be used to implement special handling of vars + * + * At the atom level, if you edit a var named "color" it will add the atom colour with + * admin level priority to the atom colours list + * + * Also, if GLOB.Debug2 is FALSE, it sets the [ADMIN_SPAWNED_1] flag on [flags_1][/atom/var/flags_1], which signifies + * the object has been admin edited + */ +/atom/vv_edit_var(var_name, var_value) + var/old_light_flags = light_flags + // Disable frozen lights for now, so we can actually modify it + light_flags &= ~LIGHT_FROZEN + switch(var_name) + if(NAMEOF(src, light_range)) + if(light_system == STATIC_LIGHT) + set_light(l_range = var_value) + else + set_light_range(var_value) + . = TRUE + if(NAMEOF(src, light_power)) + if(light_system == STATIC_LIGHT) + set_light(l_power = var_value) + else + set_light_power(var_value) + . = TRUE + if(NAMEOF(src, light_color)) + if(light_system == STATIC_LIGHT) + set_light(l_color = var_value) + else + set_light_color(var_value) + . = TRUE + if(NAMEOF(src, light_angle)) + if(light_system == STATIC_LIGHT) + set_light(l_angle = var_value) + . = TRUE + if(NAMEOF(src, light_dir)) + if(light_system == STATIC_LIGHT) + set_light(l_dir = var_value) + . = TRUE + if(NAMEOF(src, light_height)) + if(light_system == STATIC_LIGHT) + set_light(l_height = var_value) + . = TRUE + if(NAMEOF(src, light_on)) + if(light_system == STATIC_LIGHT) + set_light(l_on = var_value) + else + set_light_on(var_value) + . = TRUE + if(NAMEOF(src, light_flags)) + set_light_flags(var_value) + // I'm sorry + old_light_flags = var_value + . = TRUE + if(NAMEOF(src, smoothing_junction)) + set_smoothed_icon_state(var_value) + . = TRUE + if(NAMEOF(src, opacity)) + set_opacity(var_value) + . = TRUE + if(NAMEOF(src, base_pixel_x)) + set_base_pixel_x(var_value) + . = TRUE + if(NAMEOF(src, base_pixel_y)) + set_base_pixel_y(var_value) + . = TRUE + + light_flags = old_light_flags + if(!isnull(.)) + datum_flags |= DF_VAR_EDITED + return + + if(!GLOB.Debug2) + flags_1 |= ADMIN_SPAWNED_1 + + . = ..() + + switch(var_name) + if(NAMEOF(src, color)) + add_atom_colour(color, ADMIN_COLOUR_PRIORITY) + update_appearance() + +/atom/proc/vv_auto_rename(newname) + name = newname diff --git a/code/game/atoms_initializing_EXPENSIVE.dm b/code/game/atom/atoms_initializing_EXPENSIVE.dm similarity index 76% rename from code/game/atoms_initializing_EXPENSIVE.dm rename to code/game/atom/atoms_initializing_EXPENSIVE.dm index 1ecc6390edc345..2a3a442e04d719 100644 --- a/code/game/atoms_initializing_EXPENSIVE.dm +++ b/code/game/atom/atoms_initializing_EXPENSIVE.dm @@ -52,6 +52,27 @@ return qdeleted || QDELING(A) +/** + * Called when an atom is created in byond (built in engine proc) + * + * Not a lot happens here in SS13 code, as we offload most of the work to the + * [Intialization][/atom/proc/Initialize] proc, mostly we run the preloader + * if the preloader is being used and then call [InitAtom][/datum/controller/subsystem/atoms/proc/InitAtom] of which the ultimate + * result is that the Intialize proc is called. + * + */ +/atom/New(loc, ...) + //atom creation method that preloads variables at creation + if(GLOB.use_preloader && src.type == GLOB._preloader_path)//in case the instanciated atom is creating other atoms in New() + world.preloader_load(src) + + var/do_initialize = SSatoms.initialized + if(do_initialize != INITIALIZATION_INSSATOMS) + args[1] = do_initialize == INITIALIZATION_INNEW_MAPLOAD + if(SSatoms.InitAtom(src, FALSE, args)) + //we were deleted + return + /** * The primary method that objects are setup in SS13 with * @@ -126,3 +147,17 @@ ai_controller = new ai_controller(src) return INITIALIZE_HINT_NORMAL + +/** + * Late Intialization, for code that should run after all atoms have run Intialization + * + * To have your LateIntialize proc be called, your atoms [Initalization][/atom/proc/Initialize] + * proc must return the hint + * [INITIALIZE_HINT_LATELOAD] otherwise it will never be called. + * + * useful for doing things like finding other machines on GLOB.machines because you can guarantee + * that all atoms will actually exist in the "WORLD" at this time and that all their Intialization + * code has been run + */ +/atom/proc/LateInitialize() + set waitfor = FALSE diff --git a/code/game/atoms.dm b/code/game/atoms.dm deleted file mode 100644 index 74bbb3f7cbaad2..00000000000000 --- a/code/game/atoms.dm +++ /dev/null @@ -1,2323 +0,0 @@ -/** - * The base type for nearly all physical objects in SS13 - - * Lots and lots of functionality lives here, although in general we are striving to move - * as much as possible to the components/elements system - */ -/atom - layer = TURF_LAYER - plane = GAME_PLANE - appearance_flags = TILE_BOUND|LONG_GLIDE - - /// pass_flags that we are. If any of this matches a pass_flag on a moving thing, by default, we let them through. - var/pass_flags_self = NONE - - ///If non-null, overrides a/an/some in all cases - var/article - - ///First atom flags var - var/flags_1 = NONE - ///Intearaction flags - var/interaction_flags_atom = NONE - - var/flags_ricochet = NONE - - ///When a projectile tries to ricochet off this atom, the projectile ricochet chance is multiplied by this - var/receive_ricochet_chance_mod = 1 - ///When a projectile ricochets off this atom, it deals the normal damage * this modifier to this atom - var/receive_ricochet_damage_coeff = 0.33 - - ///Reagents holder - var/datum/reagents/reagents = null - - ///all of this atom's HUD (med/sec, etc) images. Associative list of the form: list(hud category = hud image or images for that category). - ///most of the time hud category is associated with a single image, sometimes its associated with a list of images. - ///not every hud in this list is actually used. for ones available for others to see, look at active_hud_list. - var/list/image/hud_list = null - ///all of this atom's HUD images which can actually be seen by players with that hud - var/list/image/active_hud_list = null - ///HUD images that this atom can provide. - var/list/hud_possible - - ///How much this atom resists explosions by, in the end - var/explosive_resistance = 0 - - /** - * used to store the different colors on an atom - * - * its inherent color, the colored paint applied on it, special color effect etc... - */ - var/list/atom_colours - - - /// a very temporary list of overlays to remove - var/list/remove_overlays - /// a very temporary list of overlays to add - var/list/add_overlays - - ///vis overlays managed by SSvis_overlays to automaticaly turn them like other overlays. - var/list/managed_vis_overlays - ///overlays managed by [update_overlays][/atom/proc/update_overlays] to prevent removing overlays that weren't added by the same proc. Single items are stored on their own, not in a list. - var/list/managed_overlays - - /// Lazylist of all images (or atoms, I'm sorry) (hopefully attached to us) to update when we change z levels - /// You will need to manage adding/removing from this yourself, but I'll do the updating for you - var/list/image/update_on_z - - /// Lazylist of all overlays attached to us to update when we change z levels - /// You will need to manage adding/removing from this yourself, but I'll do the updating for you - /// Oh and note, if order of addition is important this WILL break that. so mind yourself - var/list/image/update_overlays_on_z - - ///Cooldown tick timer for buckle messages - var/buckle_message_cooldown = 0 - ///Last fingerprints to touch this atom - var/fingerprintslast - - //List of datums orbiting this atom - var/datum/component/orbiter/orbiters - - /// Radiation insulation types - var/rad_insulation = RAD_NO_INSULATION - - /// The icon state intended to be used for the acid component. Used to override the default acid overlay icon state. - var/custom_acid_overlay = null - - ///The custom materials this atom is made of, used by a lot of things like furniture, walls, and floors (if I finish the functionality, that is.) - ///The list referenced by this var can be shared by multiple objects and should not be directly modified. Instead, use [set_custom_materials][/atom/proc/set_custom_materials]. - var/list/datum/material/custom_materials - ///Bitfield for how the atom handles materials. - var/material_flags = NONE - ///Modifier that raises/lowers the effect of the amount of a material, prevents small and easy to get items from being death machines. - var/material_modifier = 1 - - var/datum/wires/wires = null - - var/list/alternate_appearances - - ///Light systems, both shouldn't be active at the same time. - var/light_system = STATIC_LIGHT - ///Range of the light in tiles. Zero means no light. - var/light_range = 0 - ///Intensity of the light. The stronger, the less shadows you will see on the lit area. - var/light_power = 1 - ///Hexadecimal RGB string representing the colour of the light. White by default. - var/light_color = COLOR_WHITE - /// Angle of light to show in light_dir - /// 360 is a circle, 90 is a cone, etc. - var/light_angle = 360 - /// What angle to project light in - var/light_dir = NORTH - ///Boolean variable for toggleable lights. Has no effect without the proper light_system, light_range and light_power values. - var/light_on = TRUE - /// How many tiles "up" this light is. 1 is typical, should only really change this if it's a floor light - var/light_height = LIGHTING_HEIGHT - ///Bitflags to determine lighting-related atom properties. - var/light_flags = NONE - ///Our light source. Don't fuck with this directly unless you have a good reason! - var/tmp/datum/light_source/light - ///Any light sources that are "inside" of us, for example, if src here was a mob that's carrying a flashlight, that flashlight's light source would be part of this list. - var/tmp/list/light_sources - - /// Last name used to calculate a color for the chatmessage overlays - var/chat_color_name - /// Last color calculated for the the chatmessage overlays - var/chat_color - /// A luminescence-shifted value of the last color calculated for chatmessage overlays - var/chat_color_darkened - - // Use SET_BASE_PIXEL(x, y) to set these in typepath definitions, it'll handle pixel_x and y for you - ///Default pixel x shifting for the atom's icon. - var/base_pixel_x = 0 - ///Default pixel y shifting for the atom's icon. - var/base_pixel_y = 0 - // Use SET_BASE_VISUAL_PIXEL(x, y) to set these in typepath definitions, it'll handle pixel_w and z for you - ///Default pixel w shifting for the atom's icon. - var/base_pixel_w = 0 - ///Default pixel z shifting for the atom's icon. - var/base_pixel_z = 0 - ///Used for changing icon states for different base sprites. - var/base_icon_state - - ///The config type to use for greyscaled sprites. Both this and greyscale_colors must be assigned to work. - var/greyscale_config - ///A string of hex format colors to be used by greyscale sprites, ex: "#0054aa#badcff" - var/greyscale_colors - - ///Holds merger groups currently active on the atom. Do not access directly, use GetMergeGroup() instead. - var/list/datum/merger/mergers - - ///Icon-smoothing behavior. - var/smoothing_flags = NONE - ///What directions this is currently smoothing with. IMPORTANT: This uses the smoothing direction flags as defined in icon_smoothing.dm, instead of the BYOND flags. - var/smoothing_junction = null //This starts as null for us to know when it's first set, but after that it will hold a 8-bit mask ranging from 0 to 255. - ///Smoothing variable - var/top_left_corner - ///Smoothing variable - var/top_right_corner - ///Smoothing variable - var/bottom_left_corner - ///Smoothing variable - var/bottom_right_corner - ///What smoothing groups does this atom belongs to, to match canSmoothWith. If null, nobody can smooth with it. Must be sorted. - var/list/smoothing_groups = null - ///List of smoothing groups this atom can smooth with. If this is null and atom is smooth, it smooths only with itself. Must be sorted. - var/list/canSmoothWith = null - ///Reference to atom being orbited - var/atom/orbit_target - ///AI controller that controls this atom. type on init, then turned into an instance during runtime - var/datum/ai_controller/ai_controller - - ///any atom that uses integrity and can be damaged must set this to true, otherwise the integrity procs will throw an error - var/uses_integrity = FALSE - - VAR_PROTECTED/datum/armor/armor_type = /datum/armor/none - VAR_PRIVATE/datum/armor/armor - - VAR_PRIVATE/atom_integrity //defaults to max_integrity - var/max_integrity = 500 - var/integrity_failure = 0 //0 if we have no special broken behavior, otherwise is a percentage of at what point the atom breaks. 0.5 being 50% - ///Damage under this value will be completely ignored - var/damage_deflection = 0 - - var/resistance_flags = NONE // INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ON_FIRE | UNACIDABLE | ACID_PROOF - /// forensics datum, contains fingerprints, fibres, blood_dna and hiddenprints on this atom - var/datum/forensics/forensics - - /// the datum handler for our contents - see create_storage() for creation method - var/datum/storage/atom_storage - /// How this atom should react to having its astar blocking checked - var/can_astar_pass = CANASTARPASS_DENSITY - - VAR_PRIVATE/list/invisibility_sources - VAR_PRIVATE/current_invisibility_priority = -INFINITY - -/** - * Called when an atom is created in byond (built in engine proc) - * - * Not a lot happens here in SS13 code, as we offload most of the work to the - * [Intialization][/atom/proc/Initialize] proc, mostly we run the preloader - * if the preloader is being used and then call [InitAtom][/datum/controller/subsystem/atoms/proc/InitAtom] of which the ultimate - * result is that the Intialize proc is called. - * - */ -/atom/New(loc, ...) - //atom creation method that preloads variables at creation - if(GLOB.use_preloader && src.type == GLOB._preloader_path)//in case the instanciated atom is creating other atoms in New() - world.preloader_load(src) - - var/do_initialize = SSatoms.initialized - if(do_initialize != INITIALIZATION_INSSATOMS) - args[1] = do_initialize == INITIALIZATION_INNEW_MAPLOAD - if(SSatoms.InitAtom(src, FALSE, args)) - //we were deleted - return - -/** - * Late Intialization, for code that should run after all atoms have run Intialization - * - * To have your LateIntialize proc be called, your atoms [Initalization][/atom/proc/Initialize] - * proc must return the hint - * [INITIALIZE_HINT_LATELOAD] otherwise it will never be called. - * - * useful for doing things like finding other machines on GLOB.machines because you can guarantee - * that all atoms will actually exist in the "WORLD" at this time and that all their Intialization - * code has been run - */ -/atom/proc/LateInitialize() - set waitfor = FALSE - -/** - * Top level of the destroy chain for most atoms - * - * Cleans up the following: - * * Removes alternate apperances from huds that see them - * * qdels the reagent holder from atoms if it exists - * * clears the orbiters list - * * clears overlays and priority overlays - * * clears the light object - */ -/atom/Destroy(force) - if(alternate_appearances) - for(var/current_alternate_appearance in alternate_appearances) - var/datum/atom_hud/alternate_appearance/selected_alternate_appearance = alternate_appearances[current_alternate_appearance] - selected_alternate_appearance.remove_atom_from_hud(src) - - if(reagents) - QDEL_NULL(reagents) - - if(forensics) - QDEL_NULL(forensics) - - if(atom_storage) - QDEL_NULL(atom_storage) - - orbiters = null // The component is attached to us normaly and will be deleted elsewhere - - // Checking length(overlays) before cutting has significant speed benefits - if (length(overlays)) - overlays.Cut() - - LAZYNULL(managed_overlays) - if(ai_controller) - QDEL_NULL(ai_controller) - if(light) - QDEL_NULL(light) - if (length(light_sources)) - light_sources.Cut() - - if(smoothing_flags & SMOOTH_QUEUED) - SSicon_smooth.remove_from_queues(src) - - return ..() - -/// A quick and easy way to create a storage datum for an atom -/atom/proc/create_storage( - max_slots, - max_specific_storage, - max_total_storage, - numerical_stacking = FALSE, - allow_quick_gather = FALSE, - allow_quick_empty = FALSE, - collection_mode = COLLECT_ONE, - attack_hand_interact = TRUE, - list/canhold, - list/canthold, - storage_type = /datum/storage, -) - - if(atom_storage) - QDEL_NULL(atom_storage) - - atom_storage = new storage_type(src, max_slots, max_specific_storage, max_total_storage, numerical_stacking, allow_quick_gather, collection_mode, attack_hand_interact) - - if(canhold || canthold) - atom_storage.set_holdable(canhold, canthold) - - return atom_storage - -/// A quick and easy way to /clone/ a storage datum for an atom (does not copy over contents, only the datum details) -/atom/proc/clone_storage(datum/storage/cloning) - if(atom_storage) - QDEL_NULL(atom_storage) - - atom_storage = new cloning.type(src, cloning.max_slots, cloning.max_specific_storage, cloning.max_total_storage, cloning.numerical_stacking, cloning.allow_quick_gather, cloning.collection_mode, cloning.attack_hand_interact) - - if(cloning.can_hold || cloning.cant_hold) - if(!atom_storage.can_hold && !atom_storage.cant_hold) //In the event that the can/can't hold lists are already in place (such as from storage objects added on initialize). - atom_storage.set_holdable(cloning.can_hold, cloning.cant_hold) - - return atom_storage - -/atom/proc/handle_ricochet(obj/projectile/ricocheting_projectile) - var/turf/p_turf = get_turf(ricocheting_projectile) - var/face_direction = get_dir(src, p_turf) || get_dir(src, ricocheting_projectile) - var/face_angle = dir2angle(face_direction) - var/incidence_s = GET_ANGLE_OF_INCIDENCE(face_angle, (ricocheting_projectile.Angle + 180)) - var/a_incidence_s = abs(incidence_s) - if(a_incidence_s > 90 && a_incidence_s < 270) - return FALSE - if((ricocheting_projectile.armor_flag in list(BULLET, BOMB)) && ricocheting_projectile.ricochet_incidence_leeway) - if((a_incidence_s < 90 && a_incidence_s < 90 - ricocheting_projectile.ricochet_incidence_leeway) || (a_incidence_s > 270 && a_incidence_s -270 > ricocheting_projectile.ricochet_incidence_leeway)) - return FALSE - var/new_angle_s = SIMPLIFY_DEGREES(face_angle + incidence_s) - ricocheting_projectile.set_angle(new_angle_s) - return TRUE - -/// Whether the mover object can avoid being blocked by this atom, while arriving from (or leaving through) the border_dir. -/atom/proc/CanPass(atom/movable/mover, border_dir) - SHOULD_CALL_PARENT(TRUE) - SHOULD_BE_PURE(TRUE) - if(SEND_SIGNAL(src, COMSIG_ATOM_TRIED_PASS, mover, border_dir) & COMSIG_COMPONENT_PERMIT_PASSAGE) - return TRUE - if(mover.movement_type & PHASING) - return TRUE - . = CanAllowThrough(mover, border_dir) - // This is cheaper than calling the proc every time since most things dont override CanPassThrough - if(!mover.generic_canpass) - return mover.CanPassThrough(src, REVERSE_DIR(border_dir), .) - -/// Returns true or false to allow the mover to move through src -/atom/proc/CanAllowThrough(atom/movable/mover, border_dir) - SHOULD_CALL_PARENT(TRUE) - //SHOULD_BE_PURE(TRUE) - if(mover.pass_flags & pass_flags_self) - return TRUE - if(mover.throwing && (pass_flags_self & LETPASSTHROW)) - return TRUE - return !density - -/** - * Is this atom currently located on centcom (or riding off into the sunset on a shuttle) - * - * Specifically, is it on the z level and within the centcom areas. - * You can also be in a shuttle during endgame transit. - * - * Used in gamemode to identify mobs who have escaped and for some other areas of the code - * who don't want atoms where they shouldn't be - * - * Returns TRUE if this atom is on centcom or an escape shuttle, or FALSE if not - */ -/atom/proc/onCentCom() - var/turf/current_turf = get_turf(src) - if(!current_turf) - return FALSE - - // This doesn't necessarily check that we're at central command, - // but it checks for any shuttles which have finished are still in hyperspace - // (IE, stuff like the whiteship which fly off into the sunset and "escape") - if(is_reserved_level(current_turf.z)) - return on_escaped_shuttle(ENDGAME_TRANSIT) - - // From here on we only concern ourselves with people actually on the centcom Z - if(!is_centcom_level(current_turf.z)) - return FALSE - - if(istype(current_turf.loc, /area/centcom)) - return TRUE - - // Finally, check if we're on an escaped shuttle - return on_escaped_shuttle() - -/** - * Is the atom in any of the syndicate areas - * - * Either in the syndie base, or any of their shuttles - * - * Also used in gamemode code for win conditions - * - * Returns TRUE if this atom is on the syndicate recon base, any of its shuttles, or an escape shuttle, or FALSE if not - */ -/atom/proc/onSyndieBase() - var/turf/current_turf = get_turf(src) - if(!current_turf) - return FALSE - - // Syndicate base is loaded in a reserved level. If not reserved, we don't care. - if(!is_reserved_level(current_turf.z)) - return FALSE - - var/static/list/syndie_typecache = typecacheof(list( - /area/centcom/syndicate_mothership, // syndicate base itself - /area/shuttle/assault_pod, // steel rain - /area/shuttle/syndicate, // infiltrator - )) - - if(is_type_in_typecache(current_turf.loc, syndie_typecache)) - return TRUE - - // Finally, check if we're on an escaped shuttle - return on_escaped_shuttle() - -/** - * Checks that we're on a shuttle that's escaped - * - * * check_for_launch_status - What launch status do we check for? Generally the two you want to check for are ENDGAME_LAUNCHED or ENDGAME_TRANSIT - * - * Returns TRUE if this atom is on a shuttle which is escaping or has escaped, or FALSE otherwise - */ -/atom/proc/on_escaped_shuttle(check_for_launch_status = ENDGAME_LAUNCHED) - var/turf/current_turf = get_turf(src) - if(!current_turf) - return FALSE - - for(var/obj/docking_port/mobile/mobile_docking_port as anything in SSshuttle.mobile_docking_ports) - if(mobile_docking_port.launch_status != check_for_launch_status) - continue - for(var/area/shuttle/shuttle_area as anything in mobile_docking_port.shuttle_areas) - if(current_turf in shuttle_area.get_contained_turfs()) - return TRUE - - return FALSE - -/** - * Is the atom in an away mission - * - * Must be in the away mission z-level to return TRUE - * - * Also used in gamemode code for win conditions - */ -/atom/proc/onAwayMission() - var/turf/current_turf = get_turf(src) - if(!current_turf) - return FALSE - - if(is_away_level(current_turf.z)) - return TRUE - - return FALSE - - - -///This atom has been hit by a hulkified mob in hulk mode (user) -/atom/proc/attack_hulk(mob/living/carbon/human/user) - SEND_SIGNAL(src, COMSIG_ATOM_HULK_ATTACK, user) - -/** - * Ensure a list of atoms/reagents exists inside this atom - * - * Goes throught he list of passed in parts, if they're reagents, adds them to our reagent holder - * creating the reagent holder if it exists. - * - * If the part is a moveable atom and the previous location of the item was a mob/living, - * it calls the inventory handler transferItemToLoc for that mob/living and transfers the part - * to this atom - * - * Otherwise it simply forceMoves the atom into this atom - */ -/atom/proc/CheckParts(list/parts_list, datum/crafting_recipe/current_recipe) - SEND_SIGNAL(src, COMSIG_ATOM_CHECKPARTS, parts_list, current_recipe) - if(!parts_list) - return - for(var/part in parts_list) - if(istype(part, /datum/reagent)) - if(!reagents) - reagents = new() - reagents.reagent_list.Add(part) - reagents.conditional_update() - else if(ismovable(part)) - var/atom/movable/object = part - if(isliving(object.loc)) - var/mob/living/living = object.loc - living.transferItemToLoc(object, src) - else - object.forceMove(src) - SEND_SIGNAL(object, COMSIG_ATOM_USED_IN_CRAFT, src) - parts_list.Cut() - -///Take air from the passed in gas mixture datum -/atom/proc/assume_air(datum/gas_mixture/giver) - return null - -///Remove air from this atom -/atom/proc/remove_air(amount) - return null - -///Return the current air environment in this atom -/atom/proc/return_air() - if(loc) - return loc.return_air() - else - return null - -///Return the air if we can analyze it -/atom/proc/return_analyzable_air() - return null - -///Check if this atoms eye is still alive (probably) -/atom/proc/check_eye(mob/user) - SIGNAL_HANDLER - return - -/atom/proc/Bumped(atom/movable/bumped_atom) - set waitfor = FALSE - SEND_SIGNAL(src, COMSIG_ATOM_BUMPED, bumped_atom) - -/// Convenience proc to see if a container is open for chemistry handling -/atom/proc/is_open_container() - return is_refillable() && is_drainable() - -/// Is this atom injectable into other atoms -/atom/proc/is_injectable(mob/user, allowmobs = TRUE) - return reagents && (reagents.flags & (INJECTABLE | REFILLABLE)) - -/// Can we draw from this atom with an injectable atom -/atom/proc/is_drawable(mob/user, allowmobs = TRUE) - return reagents && (reagents.flags & (DRAWABLE | DRAINABLE)) - -/// Can this atoms reagents be refilled -/atom/proc/is_refillable() - return reagents && (reagents.flags & REFILLABLE) - -/// Is this atom drainable of reagents -/atom/proc/is_drainable() - return reagents && (reagents.flags & DRAINABLE) - -/** Handles exposing this atom to a list of reagents. - * - * Sends COMSIG_ATOM_EXPOSE_REAGENTS - * Calls expose_atom() for every reagent in the reagent list. - * - * Arguments: - * - [reagents][/list]: The list of reagents the atom is being exposed to. - * - [source][/datum/reagents]: The reagent holder the reagents are being sourced from. - * - methods: How the atom is being exposed to the reagents. Bitflags. - * - volume_modifier: Volume multiplier. - * - show_message: Whether to display anything to mobs when they are exposed. - */ -/atom/proc/expose_reagents(list/reagents, datum/reagents/source, methods=TOUCH, volume_modifier=1, show_message=TRUE) - . = SEND_SIGNAL(src, COMSIG_ATOM_EXPOSE_REAGENTS, reagents, source, methods, volume_modifier, show_message) - if(. & COMPONENT_NO_EXPOSE_REAGENTS) - return - - SEND_SIGNAL(source, COMSIG_REAGENTS_EXPOSE_ATOM, src, reagents, methods, volume_modifier, show_message) - for(var/datum/reagent/current_reagent as anything in reagents) - . |= current_reagent.expose_atom(src, reagents[current_reagent]) - SEND_SIGNAL(src, COMSIG_ATOM_AFTER_EXPOSE_REAGENTS, reagents, source, methods, volume_modifier, show_message) - -/// Are you allowed to drop this atom -/atom/proc/AllowDrop() - return FALSE - -///Is this atom within 1 tile of another atom -/atom/proc/HasProximity(atom/movable/proximity_check_mob as mob|obj) - return - -/// Sets the wire datum of an atom -/atom/proc/set_wires(datum/wires/new_wires) - wires = new_wires - -/** - * React to an EMP of the given severity - * - * Default behaviour is to send the [COMSIG_ATOM_PRE_EMP_ACT] and [COMSIG_ATOM_EMP_ACT] signal - * - * If the pre-signal does not return protection, and there are attached wires then we call - * [emp_pulse][/datum/wires/proc/emp_pulse] on the wires - * - * We then return the protection value - */ -/atom/proc/emp_act(severity) - var/protection = SEND_SIGNAL(src, COMSIG_ATOM_PRE_EMP_ACT, severity) - if(!(protection & EMP_PROTECT_WIRES) && istype(wires)) - wires.emp_pulse() - - SEND_SIGNAL(src, COMSIG_ATOM_EMP_ACT, severity, protection) - return protection // Pass the protection value collected here upwards - -/** - * React to a hit by a projectile object - * - * @params - * * hitting_projectile - projectile - * * def_zone - zone hit - * * piercing_hit - is this hit piercing or normal? - */ -/atom/proc/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit = FALSE) - SHOULD_CALL_PARENT(TRUE) - - var/sigreturn = SEND_SIGNAL(src, COMSIG_ATOM_PRE_BULLET_ACT, hitting_projectile, def_zone) - if(sigreturn & COMPONENT_BULLET_PIERCED) - return BULLET_ACT_FORCE_PIERCE - if(sigreturn & COMPONENT_BULLET_BLOCKED) - return BULLET_ACT_BLOCK - if(sigreturn & COMPONENT_BULLET_ACTED) - return BULLET_ACT_HIT - - SEND_SIGNAL(src, COMSIG_ATOM_BULLET_ACT, hitting_projectile, def_zone) - if(QDELETED(hitting_projectile)) // Signal deleted it? - return BULLET_ACT_BLOCK - - return hitting_projectile.on_hit( - target = src, - // This armor check only matters for the visuals and messages in on_hit(), it's not actually used to reduce damage since - // only living mobs use armor to reduce damage, but on_hit() is going to need the value no matter what is shot. - blocked = check_projectile_armor(def_zone, hitting_projectile), - pierce_hit = piercing_hit, - ) - -///Return true if we're inside the passed in atom -/atom/proc/in_contents_of(container)//can take class or object instance as argument - if(ispath(container)) - if(istype(src.loc, container)) - return TRUE - else if(src in container) - return TRUE - return FALSE - -/** - * Get the name of this object for examine - * - * You can override what is returned from this proc by registering to listen for the - * [COMSIG_ATOM_GET_EXAMINE_NAME] signal - */ -/atom/proc/get_examine_name(mob/user) - . = "\a [src]" - var/list/override = list(gender == PLURAL ? "some" : "a", " ", "[name]") - if(article) - . = "[article] [src]" - override[EXAMINE_POSITION_ARTICLE] = article - if(SEND_SIGNAL(src, COMSIG_ATOM_GET_EXAMINE_NAME, user, override) & COMPONENT_EXNAME_CHANGED) - . = override.Join("") - -///Generate the full examine string of this atom (including icon for goonchat) -/atom/proc/get_examine_string(mob/user, thats = FALSE) - return "[icon2html(src, user)] [thats? "That's ":""][get_examine_name(user)]" - -/** - * Returns an extended list of examine strings for any contained ID cards. - * - * Arguments: - * * user - The user who is doing the examining. - */ -/atom/proc/get_id_examine_strings(mob/user) - . = list() - return - -///Used to insert text after the name but before the description in examine() -/atom/proc/get_name_chaser(mob/user, list/name_chaser = list()) - return name_chaser - -/** - * Called when a mob examines (shift click or verb) this atom - * - * Default behaviour is to get the name and icon of the object and it's reagents where - * the [TRANSPARENT] flag is set on the reagents holder - * - * Produces a signal [COMSIG_ATOM_EXAMINE] - */ -/atom/proc/examine(mob/user) - var/examine_string = get_examine_string(user, thats = TRUE) - if(examine_string) - . = list("[examine_string].", EXAMINE_SECTION_BREAK) // SKYRAT EDIT CHANGE - else - . = list() - - . += get_name_chaser(user) - if(desc) - . += desc - - if(custom_materials) - // SKYRAT EDIT ADDITION BEGIN - HR sections - if(length(custom_materials) > 1) - . += EXAMINE_SECTION_BREAK //SKYRAT EDIT ADDITION - //SKYRAT EDIT ADDITION END - - var/list/materials_list = list() - for(var/custom_material in custom_materials) - var/datum/material/current_material = GET_MATERIAL_REF(custom_material) - materials_list += "[current_material.name]" - . += "It is made out of [english_list(materials_list)]." - - // SKYRAT EDIT ADDITION BEGIN - HR sections - if(length(custom_materials) > 1) - . += EXAMINE_SECTION_BREAK //SKYRAT EDIT ADDITION - //SKYRAT EDIT ADDITION END - if(reagents) - var/user_sees_reagents = user.can_see_reagents() - var/reagent_sigreturn = SEND_SIGNAL(src, COMSIG_ATOM_REAGENT_EXAMINE, user, ., user_sees_reagents) - if(!(reagent_sigreturn & STOP_GENERIC_REAGENT_EXAMINE)) - if(reagents.flags & TRANSPARENT) - if(reagents.total_volume) - . += "It contains [round(reagents.total_volume, 0.01)] units of various reagents[user_sees_reagents ? ":" : "."]" - if(user_sees_reagents) //Show each individual reagent for detailed examination - for(var/datum/reagent/current_reagent as anything in reagents.reagent_list) - . += "• [round(current_reagent.volume, 0.01)] units of [current_reagent.name]" - if(reagents.is_reacting) - . += span_warning("It is currently reacting!") - . += span_notice("The solution's pH is [round(reagents.ph, 0.01)] and has a temperature of [reagents.chem_temp]K.") - - else - . += "It contains:
Nothing." - else if(reagents.flags & AMOUNT_VISIBLE) - if(reagents.total_volume) - . += span_notice("It has [reagents.total_volume] unit\s left.") - else - . += span_danger("It's empty.") - - SEND_SIGNAL(src, COMSIG_ATOM_EXAMINE, user, .) - -/** - * Called when a mob examines (shift click or verb) this atom twice (or more) within EXAMINE_MORE_WINDOW (default 1 second) - * - * This is where you can put extra information on something that may be superfluous or not important in critical gameplay - * moments, while allowing people to manually double-examine to take a closer look - * - * Produces a signal [COMSIG_ATOM_EXAMINE_MORE] - */ -/atom/proc/examine_more(mob/user) - SHOULD_CALL_PARENT(TRUE) - RETURN_TYPE(/list) - - . = list() - SEND_SIGNAL(src, COMSIG_ATOM_EXAMINE_MORE, user, .) - SEND_SIGNAL(user, COMSIG_MOB_EXAMINING_MORE, src, .) - -/// Wrapper for _update_appearance that is only called when APPEARANCE_SUCCESS_TRACKING is defined -#ifdef APPEARANCE_SUCCESS_TRACKING -/atom/proc/wrap_update_appearance(file, line, updates) - INIT_COST_STATIC() - EXPORT_STATS_TO_CSV_LATER("appearance_efficency.csv", _costs, _counting) - var/old_appearance = appearance - - _update_appearance(updates) - // We're checking to see if update_appearance DID anything to our appearance - // If it didn't, or it produced the same thing, we'll mark it as such so it can potentially be opitmized - if(old_appearance == appearance) - SET_COST("SAME [file] [line]") - return FALSE - else - SET_COST("DIFFERENT [file] [line]") - return TRUE -#endif - -/** - * Updates the appearence of the icon - * - * Mostly delegates to update_name, update_desc, and update_icon - * - * Arguments: - * - updates: A set of bitflags dictating what should be updated. Defaults to [ALL] - */ -/atom/proc/update_appearance(updates=ALL) - SHOULD_NOT_SLEEP(TRUE) - SHOULD_CALL_PARENT(TRUE) - - . = NONE - updates &= ~SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_APPEARANCE, updates) - if(updates & UPDATE_NAME) - . |= update_name(updates) - if(updates & UPDATE_DESC) - . |= update_desc(updates) - if(updates & UPDATE_ICON) - . |= update_icon(updates) - -/// Updates the name of the atom -/atom/proc/update_name(updates=ALL) - SHOULD_CALL_PARENT(TRUE) - return SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_NAME, updates) - -/// Updates the description of the atom -/atom/proc/update_desc(updates=ALL) - SHOULD_CALL_PARENT(TRUE) - return SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_DESC, updates) - -/// Updates the icon of the atom -/atom/proc/update_icon(updates=ALL) - SHOULD_CALL_PARENT(TRUE) - - . = NONE - updates &= ~SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_ICON, updates) - if(updates & UPDATE_ICON_STATE) - update_icon_state() - . |= UPDATE_ICON_STATE - - if(updates & UPDATE_OVERLAYS) - if(LAZYLEN(managed_vis_overlays)) - SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) - - var/list/new_overlays = update_overlays(updates) - var/nulls = 0 - for(var/i in 1 to length(new_overlays)) - var/atom/maybe_not_an_atom = new_overlays[i] - if(isnull(maybe_not_an_atom)) - nulls++ - continue - if(istext(maybe_not_an_atom) || isicon(maybe_not_an_atom)) - continue - new_overlays[i] = maybe_not_an_atom.appearance - if(nulls) - for(var/i in 1 to nulls) - new_overlays -= null - - var/identical = FALSE - var/new_length = length(new_overlays) - if(!managed_overlays && !new_length) - identical = TRUE - else if(!islist(managed_overlays)) - if(new_length == 1 && managed_overlays == new_overlays[1]) - identical = TRUE - else if(length(managed_overlays) == new_length) - identical = TRUE - for(var/i in 1 to length(managed_overlays)) - if(managed_overlays[i] != new_overlays[i]) - identical = FALSE - break - - if(!identical) - var/full_control = FALSE - if(managed_overlays) - full_control = length(overlays) == (islist(managed_overlays) ? length(managed_overlays) : 1) - if(full_control) - overlays = null - else - cut_overlay(managed_overlays) - - switch(length(new_overlays)) - if(0) - if(full_control) - POST_OVERLAY_CHANGE(src) - managed_overlays = null - if(1) - add_overlay(new_overlays) - managed_overlays = new_overlays[1] - else - add_overlay(new_overlays) - managed_overlays = new_overlays - - . |= UPDATE_OVERLAYS - - . |= SEND_SIGNAL(src, COMSIG_ATOM_UPDATED_ICON, updates, .) - -/// Updates the icon state of the atom -/atom/proc/update_icon_state() - SHOULD_CALL_PARENT(TRUE) - return SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_ICON_STATE) - -/// Updates the overlays of the atom -/atom/proc/update_overlays() - SHOULD_CALL_PARENT(TRUE) - . = list() - SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_OVERLAYS, .) - -/** - * Checks the atom's loc and calls update_held_items on it if it is a mob. - * - * This should only be used in situations when you are unable to use /datum/element/update_icon_updates_onmob for whatever reason. - * Check code/datums/elements/update_icon_updates_onmob.dm before using this. Adding that to the atom and calling update_appearance will work for most cases. - * - * Arguments: - * * mob/target - The mob to update the icons of. Optional argument, use if the atom's loc is not the mob you want to update. - */ -/atom/proc/update_inhand_icon(mob/target = loc) - SHOULD_CALL_PARENT(TRUE) - if(!istype(target)) - return - - target.update_held_items() - - SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_INHAND_ICON, target) - -/// Handles updates to greyscale value updates. -/// The colors argument can be either a list or the full color string. -/// Child procs should call parent last so the update happens after all changes. -/atom/proc/set_greyscale(list/colors, new_config) - SHOULD_CALL_PARENT(TRUE) - if(istype(colors)) - colors = colors.Join("") - if(!isnull(colors) && greyscale_colors != colors) // If you want to disable greyscale stuff then give a blank string - greyscale_colors = colors - - if(!isnull(new_config) && greyscale_config != new_config) - greyscale_config = new_config - - update_greyscale() - -/// Checks if this atom uses the GAGS system and if so updates the icon -/atom/proc/update_greyscale() - SHOULD_CALL_PARENT(TRUE) - if(greyscale_colors && greyscale_config) - icon = SSgreyscale.GetColoredIconByType(greyscale_config, greyscale_colors) - if(!smoothing_flags) // This is a bitfield but we're just checking that some sort of smoothing is happening - return - update_atom_colour() - QUEUE_SMOOTH(src) - -/** - * An atom we are buckled or is contained within us has tried to move - * - * Default behaviour is to send a warning that the user can't move while buckled as long - * as the [buckle_message_cooldown][/atom/var/buckle_message_cooldown] has expired (50 ticks) - */ -/atom/proc/relaymove(mob/living/user, direction) - if(SEND_SIGNAL(src, COMSIG_ATOM_RELAYMOVE, user, direction) & COMSIG_BLOCK_RELAYMOVE) - return - if(buckle_message_cooldown <= world.time) - buckle_message_cooldown = world.time + 25 - balloon_alert(user, "can't move while buckled!") - return - -/** - * A special case of relaymove() in which the person relaying the move may be "driving" this atom - * - * This is a special case for vehicles and ridden animals where the relayed movement may be handled - * by the riding component attached to this atom. Returns TRUE as long as there's nothing blocking - * the movement, or FALSE if the signal gets a reply that specifically blocks the movement - */ -/atom/proc/relaydrive(mob/living/user, direction) - return !(SEND_SIGNAL(src, COMSIG_RIDDEN_DRIVER_MOVE, user, direction) & COMPONENT_DRIVER_BLOCK_MOVE) - -/// Handle what happens when your contents are exploded by a bomb -/atom/proc/contents_explosion(severity, target) - return //For handling the effects of explosions on contents that would not normally be effected - -/** - * React to being hit by an explosion - * - * Should be called through the [EX_ACT] wrapper macro. - * The wrapper takes care of the [COMSIG_ATOM_EX_ACT] signal. - * as well as calling [/atom/proc/contents_explosion]. - * - * Returns TRUE by default, and behavior should be implemented on children procs on a per-atom basis. Should only return FALSE if we resist the explosion for any reason. - * We assume that the default is TRUE because all atoms should be considered destructible in some manner unless they explicitly opt out (in our current framework). - * However, the return value itself doesn't have any external consumers, it's only so children procs can listen to the value from their parent procs (due to the nature of the [EX_ACT] macro). - * Thus, the return value only matters on overrides of this proc, and the only thing that truly matters is the code that is executed (applying damage, calling damage procs, etc.) - * - */ -/atom/proc/ex_act(severity, target) - set waitfor = FALSE - return TRUE - -/** - * React to a hit by a blob objecd - * - * default behaviour is to send the [COMSIG_ATOM_BLOB_ACT] signal - */ -/atom/proc/blob_act(obj/structure/blob/attacking_blob) - var/blob_act_result = SEND_SIGNAL(src, COMSIG_ATOM_BLOB_ACT, attacking_blob) - if (blob_act_result & COMPONENT_CANCEL_BLOB_ACT) - return FALSE - return TRUE - -/** - * Respond to fire being used on our atom - * - * Default behaviour is to send [COMSIG_ATOM_FIRE_ACT] and return - */ -/atom/proc/fire_act(exposed_temperature, exposed_volume) - SEND_SIGNAL(src, COMSIG_ATOM_FIRE_ACT, exposed_temperature, exposed_volume) - return FALSE - -/** - * Sends [COMSIG_ATOM_EXTINGUISH] signal, which properly removes burning component if it is present. - * - * Default behaviour is to send [COMSIG_ATOM_ACID_ACT] and return - */ -/atom/proc/extinguish() - SHOULD_CALL_PARENT(TRUE) - return SEND_SIGNAL(src, COMSIG_ATOM_EXTINGUISH) - -/** - * React to being hit by a thrown object - * - * Default behaviour is to call [hitby_react][/atom/proc/hitby_react] on ourselves after 2 seconds if we are dense - * and under normal gravity. - * - * Im not sure why this the case, maybe to prevent lots of hitby's if the thrown object is - * deleted shortly after hitting something (during explosions or other massive events that - * throw lots of items around - singularity being a notable example) - */ -/atom/proc/hitby(atom/movable/hitting_atom, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) - SEND_SIGNAL(src, COMSIG_ATOM_HITBY, hitting_atom, skipcatch, hitpush, blocked, throwingdatum) - if(density && !has_gravity(hitting_atom)) //thrown stuff bounces off dense stuff in no grav, unless the thrown stuff ends up inside what it hit(embedding, bola, etc...). - addtimer(CALLBACK(src, PROC_REF(hitby_react), hitting_atom), 2) - -/** - * We have have actually hit the passed in atom - * - * Default behaviour is to move back from the item that hit us - */ -/atom/proc/hitby_react(atom/movable/harmed_atom) - if(harmed_atom && isturf(harmed_atom.loc)) - step(harmed_atom, REVERSE_DIR(harmed_atom.dir)) - -///Handle the atom being slipped over -/atom/proc/handle_slip(mob/living/carbon/slipped_carbon, knockdown_amount, obj/slipping_object, lube, paralyze, force_drop) - return - -///returns the mob's dna info as a list, to be inserted in an object's blood_DNA list -/mob/living/proc/get_blood_dna_list() - if(get_blood_id() != /datum/reagent/blood) - return - return list("ANIMAL DNA" = "Y-") - -///Get the mobs dna list -/mob/living/carbon/get_blood_dna_list() - if(get_blood_id() != /datum/reagent/blood) - return - var/list/blood_dna = list() - if(dna) - blood_dna[dna.unique_enzymes] = dna.blood_type - else - blood_dna["UNKNOWN DNA"] = "X*" - return blood_dna - -/mob/living/carbon/alien/get_blood_dna_list() - return list("UNKNOWN DNA" = "X*") - -/mob/living/silicon/get_blood_dna_list() - return - -///to add a mob's dna info into an object's blood_dna list. -/atom/proc/transfer_mob_blood_dna(mob/living/injected_mob) - // Returns 0 if we have that blood already - var/new_blood_dna = injected_mob.get_blood_dna_list() - if(!new_blood_dna) - return FALSE - var/old_length = GET_ATOM_BLOOD_DNA_LENGTH(src) - add_blood_DNA(new_blood_dna) - if(GET_ATOM_BLOOD_DNA_LENGTH(src) == old_length) - return FALSE - return TRUE - -///to add blood from a mob onto something, and transfer their dna info -/atom/proc/add_mob_blood(mob/living/injected_mob) - var/list/blood_dna = injected_mob.get_blood_dna_list() - if(!blood_dna) - return FALSE - return add_blood_DNA(blood_dna) - -///Is this atom in space -/atom/proc/isinspace() - if(isspaceturf(get_turf(src))) - return TRUE - else - return FALSE - -///Used for making a sound when a mob involuntarily falls into the ground. -/atom/proc/handle_fall(mob/faller) - return - -///Respond to the singularity eating this atom -/atom/proc/singularity_act() - return - -/** - * Respond to the singularity pulling on us - * - * Default behaviour is to send [COMSIG_ATOM_SING_PULL] and return - */ -/atom/proc/singularity_pull(obj/singularity/singularity, current_size) - SEND_SIGNAL(src, COMSIG_ATOM_SING_PULL, singularity, current_size) - - -/** - * Respond to acid being used on our atom - * - * Default behaviour is to send [COMSIG_ATOM_ACID_ACT] and return - */ -/atom/proc/acid_act(acidpwr, acid_volume) - SEND_SIGNAL(src, COMSIG_ATOM_ACID_ACT, acidpwr, acid_volume) - return FALSE - -/** - * Respond to an emag being used on our atom - * - * Args: - * * mob/user: The mob that used the emag. Nullable. - * * obj/item/card/emag/emag_card: The emag that was used. Nullable. - * - * Returns: - * TRUE if the emag had any effect, falsey otherwise. - */ -/atom/proc/emag_act(mob/user, obj/item/card/emag/emag_card) - return (SEND_SIGNAL(src, COMSIG_ATOM_EMAG_ACT, user, emag_card)) - -/** - * Respond to narsie eating our atom - * - * Default behaviour is to send [COMSIG_ATOM_NARSIE_ACT] and return - */ -/atom/proc/narsie_act() - SEND_SIGNAL(src, COMSIG_ATOM_NARSIE_ACT) - - -///Return the values you get when an RCD eats you? -/atom/proc/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - return FALSE - - -/** - * Respond to an RCD acting on our item - * - * Default behaviour is to send [COMSIG_ATOM_RCD_ACT] and return FALSE - */ -/atom/proc/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, list/rcd_data) - SEND_SIGNAL(src, COMSIG_ATOM_RCD_ACT, user, the_rcd, rcd_data["[RCD_DESIGN_MODE]"]) - return FALSE - -/** - * Respond to an electric bolt action on our item - * - * Default behaviour is to return, we define here to allow for cleaner code later on - */ -/atom/proc/zap_act(power, zap_flags) - return - -/** - * If someone's trying to dump items onto our atom, where should they be dumped to? - * - * Return a loc to place objects, or null to stop dumping. - */ -/atom/proc/get_dumping_location() - return null - -/** - * the vision impairment to give to the mob whose perspective is set to that atom - * - * (e.g. an unfocused camera giving you an impaired vision when looking through it) - */ -/atom/proc/get_remote_view_fullscreens(mob/user) - return - -/** - * the sight changes to give to the mob whose perspective is set to that atom - * - * (e.g. A mob with nightvision loses its nightvision while looking through a normal camera) - */ -/atom/proc/update_remote_sight(mob/living/user) - return - - -/** - * Hook for running code when a dir change occurs - * - * Not recommended to use, listen for the [COMSIG_ATOM_DIR_CHANGE] signal instead (sent by this proc) - */ -/atom/proc/setDir(newdir) - SHOULD_CALL_PARENT(TRUE) - if (SEND_SIGNAL(src, COMSIG_ATOM_PRE_DIR_CHANGE, dir, newdir) & COMPONENT_ATOM_BLOCK_DIR_CHANGE) - newdir = dir - return - SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, newdir) - dir = newdir - SEND_SIGNAL(src, COMSIG_ATOM_POST_DIR_CHANGE, dir, newdir) - if(smoothing_flags & SMOOTH_BORDER_OBJECT) - QUEUE_SMOOTH_NEIGHBORS(src) - -/** - * Called when the atom log's in or out - * - * Default behaviour is to call on_log on the location this atom is in - */ -/atom/proc/on_log(login) - if(loc) - loc.on_log(login) - - -/* - Atom Colour Priority System - A System that gives finer control over which atom colour to colour the atom with. - The "highest priority" one is always displayed as opposed to the default of - "whichever was set last is displayed" -*/ - - -///Adds an instance of colour_type to the atom's atom_colours list -/atom/proc/add_atom_colour(coloration, colour_priority) - if(!atom_colours || !atom_colours.len) - atom_colours = list() - atom_colours.len = COLOUR_PRIORITY_AMOUNT //four priority levels currently. - if(!coloration) - return - if(colour_priority > atom_colours.len) - return - atom_colours[colour_priority] = coloration - update_atom_colour() - - -///Removes an instance of colour_type from the atom's atom_colours list -/atom/proc/remove_atom_colour(colour_priority, coloration) - if(!atom_colours) - return - if(colour_priority > atom_colours.len) - return - if(coloration && atom_colours[colour_priority] != coloration) - return //if we don't have the expected color (for a specific priority) to remove, do nothing - atom_colours[colour_priority] = null - update_atom_colour() - -/** - * Checks if this atom has the passed color - * Can optionally be supplied with a range of priorities, IE only checking "washable" or above - */ -/atom/proc/is_atom_colour(looking_for_color, min_priority_index = 1, max_priority_index = COLOUR_PRIORITY_AMOUNT) - // make sure uppertext hex strings don't mess with lowertext hex strings - looking_for_color = lowertext(looking_for_color) - - if(!LAZYLEN(atom_colours)) - // no atom colors list has been set up, just check the color var - return lowertext(color) == looking_for_color - - for(var/i in min_priority_index to max_priority_index) - if(lowertext(atom_colours[i]) == looking_for_color) - return TRUE - - return FALSE - -///Resets the atom's color to null, and then sets it to the highest priority colour available -/atom/proc/update_atom_colour() - color = null - if(!atom_colours) - return - for(var/checked_color in atom_colours) - if(islist(checked_color)) - var/list/color_list = checked_color - if(color_list.len) - color = color_list - return - else if(checked_color) - color = checked_color - return - - -/** - * Wash this atom - * - * This will clean it off any temporary stuff like blood. Override this in your item to add custom cleaning behavior. - * Returns true if any washing was necessary and thus performed - * Arguments: - * * clean_types: any of the CLEAN_ constants - */ -/atom/proc/wash(clean_types) - SHOULD_CALL_PARENT(TRUE) - if(SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, clean_types) & COMPONENT_CLEANED) - return TRUE - - // Basically "if has washable coloration" - if(length(atom_colours) >= WASHABLE_COLOUR_PRIORITY && atom_colours[WASHABLE_COLOUR_PRIORITY]) - remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - return TRUE - return FALSE - -/** - * call back when a var is edited on this atom - * - * Can be used to implement special handling of vars - * - * At the atom level, if you edit a var named "color" it will add the atom colour with - * admin level priority to the atom colours list - * - * Also, if GLOB.Debug2 is FALSE, it sets the [ADMIN_SPAWNED_1] flag on [flags_1][/atom/var/flags_1], which signifies - * the object has been admin edited - */ -/atom/vv_edit_var(var_name, var_value) - var/old_light_flags = light_flags - // Disable frozen lights for now, so we can actually modify it - light_flags &= ~LIGHT_FROZEN - switch(var_name) - if(NAMEOF(src, light_range)) - if(light_system == STATIC_LIGHT) - set_light(l_range = var_value) - else - set_light_range(var_value) - . = TRUE - if(NAMEOF(src, light_power)) - if(light_system == STATIC_LIGHT) - set_light(l_power = var_value) - else - set_light_power(var_value) - . = TRUE - if(NAMEOF(src, light_color)) - if(light_system == STATIC_LIGHT) - set_light(l_color = var_value) - else - set_light_color(var_value) - . = TRUE - if(NAMEOF(src, light_angle)) - if(light_system == STATIC_LIGHT) - set_light(l_angle = var_value) - . = TRUE - if(NAMEOF(src, light_dir)) - if(light_system == STATIC_LIGHT) - set_light(l_dir = var_value) - . = TRUE - if(NAMEOF(src, light_height)) - if(light_system == STATIC_LIGHT) - set_light(l_height = var_value) - . = TRUE - if(NAMEOF(src, light_on)) - if(light_system == STATIC_LIGHT) - set_light(l_on = var_value) - else - set_light_on(var_value) - . = TRUE - if(NAMEOF(src, light_flags)) - set_light_flags(var_value) - // I'm sorry - old_light_flags = var_value - . = TRUE - if(NAMEOF(src, smoothing_junction)) - set_smoothed_icon_state(var_value) - . = TRUE - if(NAMEOF(src, opacity)) - set_opacity(var_value) - . = TRUE - if(NAMEOF(src, base_pixel_x)) - set_base_pixel_x(var_value) - . = TRUE - if(NAMEOF(src, base_pixel_y)) - set_base_pixel_y(var_value) - . = TRUE - - light_flags = old_light_flags - if(!isnull(.)) - datum_flags |= DF_VAR_EDITED - return - - if(!GLOB.Debug2) - flags_1 |= ADMIN_SPAWNED_1 - - . = ..() - - switch(var_name) - if(NAMEOF(src, color)) - add_atom_colour(color, ADMIN_COLOUR_PRIORITY) - update_appearance() - - -/** - * Return the markup to for the dropdown list for the VV panel for this atom - * - * Override in subtypes to add custom VV handling in the VV panel - */ -/atom/vv_get_dropdown() - . = ..() - VV_DROPDOWN_OPTION("", "---------") - if(!ismovable(src)) - var/turf/curturf = get_turf(src) - if(curturf) - . += "" - VV_DROPDOWN_OPTION(VV_HK_MODIFY_TRANSFORM, "Modify Transform") - VV_DROPDOWN_OPTION(VV_HK_SPIN_ANIMATION, "SpinAnimation") - VV_DROPDOWN_OPTION(VV_HK_STOP_ALL_ANIMATIONS, "Stop All Animations") - VV_DROPDOWN_OPTION(VV_HK_SHOW_HIDDENPRINTS, "Show Hiddenprint log") - VV_DROPDOWN_OPTION(VV_HK_ADD_REAGENT, "Add Reagent") - VV_DROPDOWN_OPTION(VV_HK_TRIGGER_EMP, "EMP Pulse") - VV_DROPDOWN_OPTION(VV_HK_TRIGGER_EXPLOSION, "Explosion") - VV_DROPDOWN_OPTION(VV_HK_EDIT_FILTERS, "Edit Filters") - VV_DROPDOWN_OPTION(VV_HK_EDIT_COLOR_MATRIX, "Edit Color as Matrix") - VV_DROPDOWN_OPTION(VV_HK_TEST_MATRIXES, "Test Matrices") - VV_DROPDOWN_OPTION(VV_HK_ADD_AI, "Add AI controller") - VV_DROPDOWN_OPTION(VV_HK_ARMOR_MOD, "Modify Armor") - if(greyscale_colors) - VV_DROPDOWN_OPTION(VV_HK_MODIFY_GREYSCALE, "Modify greyscale colors") - -/atom/vv_do_topic(list/href_list) - . = ..() - if(href_list[VV_HK_ADD_REAGENT] && check_rights(R_VAREDIT)) - if(!reagents) - var/amount = input(usr, "Specify the reagent size of [src]", "Set Reagent Size", 50) as num|null - if(amount) - create_reagents(amount) - - if(reagents) - var/chosen_id - switch(tgui_alert(usr, "Choose a method.", "Add Reagents", list("Search", "Choose from a list", "I'm feeling lucky"))) - if("Search") - var/valid_id - while(!valid_id) - chosen_id = input(usr, "Enter the ID of the reagent you want to add.", "Search reagents") as null|text - if(isnull(chosen_id)) //Get me out of here! - break - if (!ispath(text2path(chosen_id))) - chosen_id = pick_closest_path(chosen_id, make_types_fancy(subtypesof(/datum/reagent))) - if (ispath(chosen_id)) - valid_id = TRUE - else - valid_id = TRUE - if(!valid_id) - to_chat(usr, span_warning("A reagent with that ID doesn't exist!")) - if("Choose from a list") - chosen_id = input(usr, "Choose a reagent to add.", "Choose a reagent.") as null|anything in sort_list(subtypesof(/datum/reagent), GLOBAL_PROC_REF(cmp_typepaths_asc)) - if("I'm feeling lucky") - chosen_id = pick(subtypesof(/datum/reagent)) - if(chosen_id) - var/amount = input(usr, "Choose the amount to add.", "Choose the amount.", reagents.maximum_volume) as num|null - if(amount) - reagents.add_reagent(chosen_id, amount) - log_admin("[key_name(usr)] has added [amount] units of [chosen_id] to [src]") - message_admins(span_notice("[key_name(usr)] has added [amount] units of [chosen_id] to [src]")) - - if(href_list[VV_HK_TRIGGER_EXPLOSION] && check_rights(R_FUN)) - usr.client.cmd_admin_explosion(src) - - if(href_list[VV_HK_TRIGGER_EMP] && check_rights(R_FUN)) - usr.client.cmd_admin_emp(src) - - if(href_list[VV_HK_SHOW_HIDDENPRINTS] && check_rights(R_ADMIN)) - usr.client.cmd_show_hiddenprints(src) - - if(href_list[VV_HK_ARMOR_MOD]) - var/list/pickerlist = list() - var/list/armorlist = get_armor().get_rating_list() - - for (var/i in armorlist) - pickerlist += list(list("value" = armorlist[i], "name" = i)) - - var/list/result = presentpicker(usr, "Modify armor", "Modify armor: [src]", Button1="Save", Button2 = "Cancel", Timeout=FALSE, inputtype = "text", values = pickerlist) - var/list/armor_all = ARMOR_LIST_ALL() - - if (islist(result)) - if (result["button"] != 2) // If the user pressed the cancel button - // text2num conveniently returns a null on invalid values - var/list/converted = list() - for(var/armor_key in armor_all) - converted[armor_key] = text2num(result["values"][armor_key]) - set_armor(get_armor().generate_new_with_specific(converted)) - var/message = "[key_name(usr)] modified the armor on [src] ([type]) to: " - for(var/armor_key in armor_all) - message += "[armor_key]=[get_armor_rating(armor_key)]," - message = copytext(message, 1, -1) - log_admin(span_notice(message)) - message_admins(span_notice(message)) - - if(href_list[VV_HK_ADD_AI]) - if(!check_rights(R_VAREDIT)) - return - var/result = input(usr, "Choose the AI controller to apply to this atom WARNING: Not all AI works on all atoms.", "AI controller") as null|anything in subtypesof(/datum/ai_controller) - if(!result) - return - ai_controller = new result(src) - - if(href_list[VV_HK_MODIFY_TRANSFORM] && check_rights(R_VAREDIT)) - var/result = input(usr, "Choose the transformation to apply","Transform Mod") as null|anything in list("Scale","Translate","Rotate","Shear") - var/matrix/M = transform - if(!result) - return - switch(result) - if("Scale") - var/x = input(usr, "Choose x mod","Transform Mod") as null|num - var/y = input(usr, "Choose y mod","Transform Mod") as null|num - if(isnull(x) || isnull(y)) - return - transform = M.Scale(x,y) - if("Translate") - var/x = input(usr, "Choose x mod (negative = left, positive = right)","Transform Mod") as null|num - var/y = input(usr, "Choose y mod (negative = down, positive = up)","Transform Mod") as null|num - if(isnull(x) || isnull(y)) - return - transform = M.Translate(x,y) - if("Shear") - var/x = input(usr, "Choose x mod","Transform Mod") as null|num - var/y = input(usr, "Choose y mod","Transform Mod") as null|num - if(isnull(x) || isnull(y)) - return - transform = M.Shear(x,y) - if("Rotate") - var/angle = input(usr, "Choose angle to rotate","Transform Mod") as null|num - if(isnull(angle)) - return - transform = M.Turn(angle) - - SEND_SIGNAL(src, COMSIG_ATOM_VV_MODIFY_TRANSFORM) - - if(href_list[VV_HK_SPIN_ANIMATION] && check_rights(R_VAREDIT)) - var/num_spins = input(usr, "Do you want infinite spins?", "Spin Animation") in list("Yes", "No") - if(num_spins == "No") - num_spins = input(usr, "How many spins?", "Spin Animation") as null|num - else - num_spins = -1 - if(!num_spins) - return - var/spin_speed = input(usr, "How fast?", "Spin Animation") as null|num - if(!spin_speed) - return - var/direction = input(usr, "Which direction?", "Spin Animation") in list("Clockwise", "Counter-clockwise") - switch(direction) - if("Clockwise") - direction = 1 - if("Counter-clockwise") - direction = 0 - else - return - SpinAnimation(spin_speed, num_spins, direction) - - if(href_list[VV_HK_STOP_ALL_ANIMATIONS] && check_rights(R_VAREDIT)) - var/result = input(usr, "Are you sure?", "Stop Animating") in list("Yes", "No") - if(result == "Yes") - animate(src, transform = null, flags = ANIMATION_END_NOW) // Literally just fucking stop animating entirely because admin said so - return - - if(href_list[VV_HK_AUTO_RENAME] && check_rights(R_VAREDIT)) - var/newname = input(usr, "What do you want to rename this to?", "Automatic Rename") as null|text - // Check the new name against the chat filter. If it triggers the IC chat filter, give an option to confirm. - if(newname && !(is_ic_filtered(newname) || is_soft_ic_filtered(newname) && tgui_alert(usr, "Your selected name contains words restricted by IC chat filters. Confirm this new name?", "IC Chat Filter Conflict", list("Confirm", "Cancel")) != "Confirm")) - vv_auto_rename(newname) - - if(href_list[VV_HK_EDIT_FILTERS] && check_rights(R_VAREDIT)) - usr.client?.open_filter_editor(src) - - if(href_list[VV_HK_EDIT_COLOR_MATRIX] && check_rights(R_VAREDIT)) - usr.client?.open_color_matrix_editor(src) - - if(href_list[VV_HK_TEST_MATRIXES] && check_rights(R_VAREDIT)) - usr.client?.open_matrix_tester(src) - -/atom/vv_get_header() - . = ..() - var/refid = REF(src) - . += "[VV_HREF_TARGETREF(refid, VV_HK_AUTO_RENAME, "[src]")]" - . += "
<< [dir2text(dir) || dir] >>" - -///Where atoms should drop if taken from this atom -/atom/proc/drop_location() - var/atom/location = loc - if(!location) - return null - return location.AllowDrop() ? location : location.drop_location() - -/atom/proc/vv_auto_rename(newname) - name = newname - -/** - * An atom has entered this atom's contents - * - * Default behaviour is to send the [COMSIG_ATOM_ENTERED] - */ -/atom/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) - SEND_SIGNAL(src, COMSIG_ATOM_ENTERED, arrived, old_loc, old_locs) - SEND_SIGNAL(arrived, COMSIG_ATOM_ENTERING, src, old_loc, old_locs) - -/** - * An atom is attempting to exit this atom's contents - * - * Default behaviour is to send the [COMSIG_ATOM_EXIT] - */ -/atom/Exit(atom/movable/leaving, direction) - // Don't call `..()` here, otherwise `Uncross()` gets called. - // See the doc comment on `Uncross()` to learn why this is bad. - - if(SEND_SIGNAL(src, COMSIG_ATOM_EXIT, leaving, direction) & COMPONENT_ATOM_BLOCK_EXIT) - return FALSE - - return TRUE - -/** - * An atom has exited this atom's contents - * - * Default behaviour is to send the [COMSIG_ATOM_EXITED] - */ -/atom/Exited(atom/movable/gone, direction) - SEND_SIGNAL(src, COMSIG_ATOM_EXITED, gone, direction) - -///Return atom temperature -/atom/proc/return_temperature() - return - -/** - *Tool behavior procedure. Redirects to tool-specific procs by default. - * - * You can override it to catch all tool interactions, for use in complex deconstruction procs. - * - * Must return parent proc ..() in the end if overridden - */ -/atom/proc/tool_act(mob/living/user, obj/item/tool, tool_type, is_right_clicking) - var/act_result - var/signal_result - - var/is_left_clicking = !is_right_clicking - - if(is_left_clicking) // Left click first for sensibility - var/list/processing_recipes = list() //List of recipes that can be mutated by sending the signal - signal_result = SEND_SIGNAL(src, COMSIG_ATOM_TOOL_ACT(tool_type), user, tool, processing_recipes) - if(signal_result & COMPONENT_BLOCK_TOOL_ATTACK) // The COMSIG_ATOM_TOOL_ACT signal is blocking the act - return TOOL_ACT_SIGNAL_BLOCKING - if(processing_recipes.len) - process_recipes(user, tool, processing_recipes) - if(QDELETED(tool)) - return TRUE - else - signal_result = SEND_SIGNAL(src, COMSIG_ATOM_SECONDARY_TOOL_ACT(tool_type), user, tool) - if(signal_result & COMPONENT_BLOCK_TOOL_ATTACK) // The COMSIG_ATOM_TOOL_ACT signal is blocking the act - return TOOL_ACT_SIGNAL_BLOCKING - - switch(tool_type) - if(TOOL_CROWBAR) - act_result = is_left_clicking ? crowbar_act(user, tool) : crowbar_act_secondary(user, tool) - if(TOOL_MULTITOOL) - act_result = is_left_clicking ? multitool_act(user, tool) : multitool_act_secondary(user, tool) - if(TOOL_SCREWDRIVER) - act_result = is_left_clicking ? screwdriver_act(user, tool) : screwdriver_act_secondary(user, tool) - if(TOOL_WRENCH) - act_result = is_left_clicking ? wrench_act(user, tool) : wrench_act_secondary(user, tool) - if(TOOL_WIRECUTTER) - act_result = is_left_clicking ? wirecutter_act(user, tool) : wirecutter_act_secondary(user, tool) - if(TOOL_WELDER) - act_result = is_left_clicking ? welder_act(user, tool) : welder_act_secondary(user, tool) - if(TOOL_ANALYZER) - act_result = is_left_clicking ? analyzer_act(user, tool) : analyzer_act_secondary(user, tool) - if(!act_result) - return - - // A tooltype_act has completed successfully - if(is_left_clicking) - log_tool("[key_name(user)] used [tool] on [src] at [AREACOORD(src)]") - SEND_SIGNAL(tool, COMSIG_TOOL_ATOM_ACTED_PRIMARY(tool_type), src) - else - log_tool("[key_name(user)] used [tool] on [src] (right click) at [AREACOORD(src)]") - SEND_SIGNAL(tool, COMSIG_TOOL_ATOM_ACTED_SECONDARY(tool_type), src) - return TOOL_ACT_TOOLTYPE_SUCCESS - - -/atom/proc/process_recipes(mob/living/user, obj/item/processed_object, list/processing_recipes) - //Only one recipe? use the first - if(processing_recipes.len == 1) - StartProcessingAtom(user, processed_object, processing_recipes[1]) - return - //Otherwise, select one with a radial - ShowProcessingGui(user, processed_object, processing_recipes) - -///Creates the radial and processes the selected option -/atom/proc/ShowProcessingGui(mob/living/user, obj/item/processed_object, list/possible_options) - var/list/choices_to_options = list() //Dict of object name | dict of object processing settings - var/list/choices = list() - - for(var/list/current_option as anything in possible_options) - var/atom/current_option_type = current_option[TOOL_PROCESSING_RESULT] - choices_to_options[initial(current_option_type.name)] = current_option - var/image/option_image = image(icon = initial(current_option_type.icon), icon_state = initial(current_option_type.icon_state)) - choices += list("[initial(current_option_type.name)]" = option_image) - - var/pick = show_radial_menu(user, src, choices, radius = 36, require_near = TRUE) - if(!pick) - return - - StartProcessingAtom(user, processed_object, choices_to_options[pick]) - - -/atom/proc/StartProcessingAtom(mob/living/user, obj/item/process_item, list/chosen_option) - var/processing_time = chosen_option[TOOL_PROCESSING_TIME] - to_chat(user, span_notice("You start working on [src].")) - if(process_item.use_tool(src, user, processing_time, volume=50)) - var/atom/atom_to_create = chosen_option[TOOL_PROCESSING_RESULT] - var/list/atom/created_atoms = list() - var/amount_to_create = chosen_option[TOOL_PROCESSING_AMOUNT] - for(var/i = 1 to amount_to_create) - var/atom/created_atom = new atom_to_create(drop_location()) - if(custom_materials) - created_atom.set_custom_materials(custom_materials, 1 / amount_to_create) - created_atom.pixel_x = pixel_x - created_atom.pixel_y = pixel_y - if(i > 1) - created_atom.pixel_x += rand(-8,8) - created_atom.pixel_y += rand(-8,8) - created_atom.OnCreatedFromProcessing(user, process_item, chosen_option, src) - created_atoms.Add(created_atom) - to_chat(user, span_notice("You manage to create [amount_to_create] [initial(atom_to_create.gender) == PLURAL ? "[initial(atom_to_create.name)]" : "[initial(atom_to_create.name)][plural_s(initial(atom_to_create.name))]"] from [src].")) - SEND_SIGNAL(src, COMSIG_ATOM_PROCESSED, user, process_item, created_atoms) - UsedforProcessing(user, process_item, chosen_option) - return - -/atom/proc/UsedforProcessing(mob/living/user, obj/item/used_item, list/chosen_option) - qdel(src) - return - -/atom/proc/OnCreatedFromProcessing(mob/living/user, obj/item/work_tool, list/chosen_option, atom/original_atom) - SHOULD_CALL_PARENT(TRUE) - - SEND_SIGNAL(src, COMSIG_ATOM_CREATEDBY_PROCESSING, original_atom, chosen_option) - if(user.mind) - ADD_TRAIT(src, TRAIT_FOOD_CHEF_MADE, REF(user.mind)) - -//! Tool-specific behavior procs. -/// - -/// Called on an object when a tool with crowbar capabilities is used to left click an object -/atom/proc/crowbar_act(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with crowbar capabilities is used to right click an object -/atom/proc/crowbar_act_secondary(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with multitool capabilities is used to left click an object -/atom/proc/multitool_act(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with multitool capabilities is used to right click an object -/atom/proc/multitool_act_secondary(mob/living/user, obj/item/tool) - return - -///Check if an item supports a data buffer (is a multitool) -/atom/proc/multitool_check_buffer(user, obj/item/multitool, silent = FALSE) - if(!istype(multitool, /obj/item/multitool)) - if(user && !silent) - to_chat(user, span_warning("[multitool] has no data buffer!")) - return FALSE - return TRUE - -/// Called on an object when a tool with screwdriver capabilities is used to left click an object -/atom/proc/screwdriver_act(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with screwdriver capabilities is used to right click an object -/atom/proc/screwdriver_act_secondary(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with wrench capabilities is used to left click an object -/atom/proc/wrench_act(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with wrench capabilities is used to right click an object -/atom/proc/wrench_act_secondary(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with wirecutter capabilities is used to left click an object -/atom/proc/wirecutter_act(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with wirecutter capabilities is used to right click an object -/atom/proc/wirecutter_act_secondary(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with welder capabilities is used to left click an object -/atom/proc/welder_act(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with welder capabilities is used to right click an object -/atom/proc/welder_act_secondary(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with analyzer capabilities is used to left click an object -/atom/proc/analyzer_act(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with analyzer capabilities is used to right click an object -/atom/proc/analyzer_act_secondary(mob/living/user, obj/item/tool) - return - -///Connect this atom to a shuttle -/atom/proc/connect_to_shuttle(mapload, obj/docking_port/mobile/port, obj/docking_port/stationary/dock) - return - -/atom/proc/intercept_zImpact(list/falling_movables, levels = 1) - SHOULD_CALL_PARENT(TRUE) - . |= SEND_SIGNAL(src, COMSIG_ATOM_INTERCEPT_Z_FALL, falling_movables, levels) - -/// Sets the custom materials for an item. -/atom/proc/set_custom_materials(list/materials, multiplier = 1) - if(custom_materials && material_flags & MATERIAL_EFFECTS) //Only runs if custom materials existed at first and affected src. - for(var/current_material in custom_materials) - var/datum/material/custom_material = GET_MATERIAL_REF(current_material) - custom_material.on_removed(src, custom_materials[current_material] * material_modifier, material_flags) //Remove the current materials - - if(!length(materials)) - custom_materials = null - return - - if(material_flags & MATERIAL_EFFECTS) - for(var/current_material in materials) - var/datum/material/custom_material = GET_MATERIAL_REF(current_material) - custom_material.on_applied(src, materials[current_material] * multiplier * material_modifier, material_flags) - - custom_materials = SSmaterials.FindOrCreateMaterialCombo(materials, multiplier) - -/** - * Returns the material composition of the atom. - * - * Used when recycling items, specifically to turn alloys back into their component mats. - * - * Exists because I'd need to add a way to un-alloy alloys or otherwise deal - * with people converting the entire stations material supply into alloys. - * - * Arguments: - * - flags: A set of flags determining how exactly the materials are broken down. - */ -/atom/proc/get_material_composition(breakdown_flags=NONE) - . = list() - if(!(breakdown_flags & BREAKDOWN_INCLUDE_ALCHEMY) && HAS_TRAIT(src, TRAIT_MAT_TRANSMUTED)) - return - - var/list/cached_materials = custom_materials - for(var/mat in cached_materials) - var/datum/material/material = GET_MATERIAL_REF(mat) - var/list/material_comp = material.return_composition(cached_materials[mat], breakdown_flags) - for(var/comp_mat in material_comp) - .[comp_mat] += material_comp[comp_mat] - -/** - * Fetches a list of all of the materials this object has of the desired type. Returns null if there is no valid materials of the type - * - * Arguments: - * - [required_material][/datum/material]: The type of material we are checking for - * - mat_amount: The minimum required amount of material - */ -/atom/proc/has_material_type(datum/material/required_material, mat_amount = 0) - var/list/cached_materials = custom_materials - if(!length(cached_materials)) - return null - - var/materials_of_type - for(var/current_material in cached_materials) - if(cached_materials[current_material] < mat_amount) - continue - var/datum/material/material = GET_MATERIAL_REF(current_material) - if(!istype(material, required_material)) - continue - LAZYSET(materials_of_type, material, cached_materials[current_material]) - - return materials_of_type - -/** - * Fetches a list of all of the materials this object has with the desired material category. - * - * Arguments: - * - category: The category to check for - * - any_flags: Any bitflags that must be present for the category - * - all_flags: All bitflags that must be present for the category - * - no_flags: Any bitflags that must not be present for the category - * - mat_amount: The minimum amount of materials that must be present - */ -/atom/proc/has_material_category(category, any_flags=0, all_flags=0, no_flags=0, mat_amount=0) - var/list/cached_materials = custom_materials - if(!length(cached_materials)) - return null - - var/materials_of_category - for(var/current_material in cached_materials) - if(cached_materials[current_material] < mat_amount) - continue - var/datum/material/material = GET_MATERIAL_REF(current_material) - var/category_flags = material?.categories[category] - if(isnull(category_flags)) - continue - if(any_flags && !(category_flags & any_flags)) - continue - if(all_flags && (all_flags != (category_flags & all_flags))) - continue - if(no_flags && (category_flags & no_flags)) - continue - LAZYSET(materials_of_category, material, cached_materials[current_material]) - return materials_of_category - -/** - * Gets the most common material in the object. - */ -/atom/proc/get_master_material() - var/list/cached_materials = custom_materials - if(!length(cached_materials)) - return null - - var/most_common_material = null - var/max_amount = 0 - for(var/material in cached_materials) - if(cached_materials[material] > max_amount) - most_common_material = material - max_amount = cached_materials[material] - - if(most_common_material) - return GET_MATERIAL_REF(most_common_material) - -/** - * Gets the total amount of materials in this atom. - */ -/atom/proc/get_custom_material_amount() - return isnull(custom_materials) ? 0 : counterlist_sum(custom_materials) - - -///Setter for the `density` variable to append behavior related to its changing. -/atom/proc/set_density(new_value) - SHOULD_CALL_PARENT(TRUE) - if(density == new_value) - return - . = density - density = new_value - - -///Setter for the `base_pixel_x` variable to append behavior related to its changing. -/atom/proc/set_base_pixel_x(new_value) - if(base_pixel_x == new_value) - return - . = base_pixel_x - base_pixel_x = new_value - - pixel_x = pixel_x + base_pixel_x - . - - -///Setter for the `base_pixel_y` variable to append behavior related to its changing. -/atom/proc/set_base_pixel_y(new_value) - if(base_pixel_y == new_value) - return - . = base_pixel_y - base_pixel_y = new_value - - pixel_y = pixel_y + base_pixel_y - . - -// Not a valid operation, turfs and movables handle block differently -/atom/proc/set_explosion_block(explosion_block) - return - -/** - * Returns true if this atom has gravity for the passed in turf - * - * Sends signals [COMSIG_ATOM_HAS_GRAVITY] and [COMSIG_TURF_HAS_GRAVITY], both can force gravity with - * the forced gravity var. - * - * micro-optimized to hell because this proc is very hot, being called several times per movement every movement. - * - * HEY JACKASS, LISTEN - * IF YOU ADD SOMETHING TO THIS PROC, MAKE SURE /mob/living ACCOUNTS FOR IT - * Living mobs treat gravity in an event based manner. We've decomposed this proc into different checks - * for them to use. If you add more to it, make sure you do that, or things will behave strangely - * - * Gravity situations: - * * No gravity if you're not in a turf - * * No gravity if this atom is in is a space turf - * * Gravity if the area it's in always has gravity - * * Gravity if there's a gravity generator on the z level - * * Gravity if the Z level has an SSMappingTrait for ZTRAIT_GRAVITY - * * otherwise no gravity - */ -/atom/proc/has_gravity(turf/gravity_turf) - if(!isturf(gravity_turf)) - gravity_turf = get_turf(src) - - if(!gravity_turf)//no gravity in nullspace - return FALSE - - var/list/forced_gravity = list() - SEND_SIGNAL(src, COMSIG_ATOM_HAS_GRAVITY, gravity_turf, forced_gravity) - SEND_SIGNAL(gravity_turf, COMSIG_TURF_HAS_GRAVITY, src, forced_gravity) - if(length(forced_gravity)) - var/positive_grav = max(forced_gravity) - var/negative_grav = min(min(forced_gravity), 0) //negative grav needs to be below or equal to 0 - - //our gravity is sum of the most massive positive and negative numbers returned by the signal - //so that adding two forced_gravity elements with an effect size of 1 each doesnt add to 2 gravity - //but negative force gravity effects can cancel out positive ones - - return (positive_grav + negative_grav) - - var/area/turf_area = gravity_turf.loc - - return !gravity_turf.force_no_gravity && (SSmapping.gravity_by_z_level[gravity_turf.z] || turf_area.has_gravity) - -/** - * Causes effects when the atom gets hit by a rust effect from heretics - * - * Override this if you want custom behaviour in whatever gets hit by the rust - */ -/atom/proc/rust_heretic_act() - return - -/** - * Used to set something as 'open' if it's being used as a supplypod - * - * Override this if you want an atom to be usable as a supplypod. - */ -/atom/proc/setOpened() - return - -/** - * Used to set something as 'closed' if it's being used as a supplypod - * - * Override this if you want an atom to be usable as a supplypod. - */ -/atom/proc/setClosed() - return - - -///Called when something resists while this atom is its loc -/atom/proc/container_resist_act(mob/living/user) - -/** - * Used to attempt to charge an object with a payment component. - * - * Use this if an atom needs to attempt to charge another atom. - */ -/atom/proc/attempt_charge(atom/sender, atom/target, extra_fees = 0) - return SEND_SIGNAL(sender, COMSIG_OBJ_ATTEMPT_CHARGE, target, extra_fees) - -///Passes Stat Browser Panel clicks to the game and calls client click on an atom -/atom/Topic(href, list/href_list) - . = ..() - if(!usr?.client) - return - var/client/usr_client = usr.client - var/list/paramslist = list() - - if(href_list["statpanel_item_click"]) - switch(href_list["statpanel_item_click"]) - if("left") - paramslist[LEFT_CLICK] = "1" - if("right") - paramslist[RIGHT_CLICK] = "1" - if("middle") - paramslist[MIDDLE_CLICK] = "1" - else - return - - if(href_list["statpanel_item_shiftclick"]) - paramslist[SHIFT_CLICK] = "1" - if(href_list["statpanel_item_ctrlclick"]) - paramslist[CTRL_CLICK] = "1" - if(href_list["statpanel_item_altclick"]) - paramslist[ALT_CLICK] = "1" - - var/mouseparams = list2params(paramslist) - usr_client.Click(src, loc, null, mouseparams) - return TRUE - -/** - * Recursive getter method to return a list of all ghosts orbitting this atom - * - * This will work fine without manually passing arguments. - * * processed - The list of atoms we've already convered - * * source - Is this the atom for who we're counting up all the orbiters? - * * ignored_stealthed_admins - If TRUE, don't count admins who are stealthmoded and orbiting this - */ -/atom/proc/get_all_orbiters(list/processed, source = TRUE, ignore_stealthed_admins = TRUE) - var/list/output = list() - if(!processed) - processed = list() - else if(src in processed) - return output - - if(!source) - output += src - - processed += src - for(var/atom/atom_orbiter as anything in orbiters?.orbiter_list) - output += atom_orbiter.get_all_orbiters(processed, source = FALSE) - return output - -/mob/get_all_orbiters(list/processed, source = TRUE, ignore_stealthed_admins = TRUE) - if(!source && ignore_stealthed_admins && client?.holder?.fakekey) - return list() - return ..() - -/atom/MouseEntered(location, control, params) - SSmouse_entered.hovers[usr.client] = src - -/// Fired whenever this atom is the most recent to be hovered over in the tick. -/// Preferred over MouseEntered if you do not need information such as the position of the mouse. -/// Especially because this is deferred over a tick, do not trust that `client` is not null. -/atom/proc/on_mouse_enter(client/client) - SHOULD_NOT_SLEEP(TRUE) - - var/mob/user = client?.mob - if (isnull(user)) - return - - ///SKYRAT EDIT ADDITION BEGIN - // Face directions on combat mode. No procs, no typechecks, just a var for speed - if(user.face_mouse) - user.face_atom(src) - ///SKYRAT EDIT ADDITION END - - // Screentips - var/datum/hud/active_hud = user.hud_used - if(!active_hud) - return - - var/screentips_enabled = active_hud.screentips_enabled - if(screentips_enabled == SCREENTIP_PREFERENCE_DISABLED || flags_1 & NO_SCREENTIPS_1) - active_hud.screentip_text.maptext = "" - return - - 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 = "" - var/shift_lmb_ctrl_shift_lmb_line = "" - var/extra_lines = 0 - var/extra_context = "" - - if (isliving(user) || isovermind(user) || isaicamera(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) - var/list/context = list() - - var/contextual_screentip_returns = \ - SEND_SIGNAL(src, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM, context, held_item, user) \ - | (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 = build_context(context, SCREENTIP_CONTEXT_LMB, screentip_images) - var/rmb_text = build_context(context, SCREENTIP_CONTEXT_RMB, screentip_images) - - if (lmb_text != "") - lmb_rmb_line = lmb_text - if (rmb_text != "") - lmb_rmb_line += " | [rmb_text]" - else if (rmb_text != "") - lmb_rmb_line = rmb_text - - // Ctrl-LMB, Ctrl-RMB on one line... - if (lmb_rmb_line != "") - lmb_rmb_line += "
" - extra_lines++ - if (SCREENTIP_CONTEXT_CTRL_LMB in context) - 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 += 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 += 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 += 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 += 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 += 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 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]" - -/// Gets a merger datum representing the connected blob of objects in the allowed_types argument -/atom/proc/GetMergeGroup(id, list/allowed_types) - RETURN_TYPE(/datum/merger) - var/datum/merger/candidate - if(mergers) - candidate = mergers[id] - if(!candidate) - new /datum/merger(id, allowed_types, src) - candidate = mergers[id] - return candidate - -/** - * This proc is used for telling whether something can pass by this atom in a given direction, for use by the pathfinding system. - * - * Trying to generate one long path across the station will call this proc on every single object on every single tile that we're seeing if we can move through, likely - * multiple times per tile since we're likely checking if we can access said tile from multiple directions, so keep these as lightweight as possible. - * - * For turfs this will only be used if pathing_pass_method is TURF_PATHING_PASS_PROC - * - * Arguments: - * * to_dir - What direction we're trying to move in, relevant for things like directional windows that only block movement in certain directions - * * pass_info - Datum that stores info about the thing that's trying to pass us - * - * IMPORTANT NOTE: /turf/proc/LinkBlockedWithAccess assumes that overrides of CanAStarPass will always return true if density is FALSE - * If this is NOT you, ensure you edit your can_astar_pass variable. Check __DEFINES/path.dm - **/ -/atom/proc/CanAStarPass(to_dir, datum/can_pass_info/pass_info) - if(pass_info.pass_flags & pass_flags_self) - return TRUE - . = !density - -/// Makes this atom look like a "hologram" -/// So transparent, blue, with a scanline and an emissive glow -/// This is acomplished using a combination of filters and render steps/overlays -/// The degree of the opacity is optional, based off the opacity arg (0 -> 1) -/atom/proc/makeHologram(opacity = 0.5) - // First, we'll make things blue (roughly) and sorta transparent - add_filter("HOLO: Color and Transparent", 1, color_matrix_filter(rgb(125,180,225, opacity * 255))) - // Now we're gonna do a scanline effect - // Gonna take this atom and give it a render target, then use it as a source for a filter - // (We use an atom because it seems as if setting render_target on an MA is just invalid. I hate this engine) - var/atom/movable/scanline = new(null) - scanline.icon = 'icons/effects/effects.dmi' - scanline.icon_state = "scanline" - scanline.appearance_flags |= RESET_TRANSFORM - // * so it doesn't render - var/static/uid_scan = 0 - scanline.render_target = "*HoloScanline [uid_scan]" - uid_scan++ - // Now we add it as a filter, and overlay the appearance so the render source is always around - add_filter("HOLO: Scanline", 2, alpha_mask_filter(render_source = scanline.render_target)) - add_overlay(scanline) - qdel(scanline) - // Annd let's make the sucker emissive, so it glows in the dark - if(!render_target) - var/static/uid = 0 - render_target = "HOLOGRAM [uid]" - uid++ - // I'm using static here to reduce the overhead, it does mean we need to do plane stuff manually tho - var/static/atom/movable/render_step/emissive/glow = new(null) - glow.render_source = render_target - SET_PLANE_EXPLICIT(glow, initial(glow.plane), src) - // We're creating a render step that copies ourselves, and draws it to the emissive plane - // Then we overlay it, and release "ownership" back to this proc, since we get to keep the appearance it generates - // We can't just use an MA from the start cause render_source setting starts going fuckey REALLY quick - var/mutable_appearance/glow_appearance = new(glow) - add_overlay(glow_appearance) - LAZYADD(update_overlays_on_z, glow_appearance) - -/** - * Proc called when you want the atom to spin around the center of its icon (or where it would be if its transform var is translated) - * By default, it makes the atom spin forever and ever at a speed of 60 rpm. - * - * Arguments: - * * speed: how much it takes for the atom to complete one 360° rotation - * * loops: how many times do we want the atom to rotate - * * clockwise: whether the atom ought to spin clockwise or counter-clockwise - * * segments: in how many animate calls the rotation is split. Probably unnecessary, but you shouldn't set it lower than 3 anyway. - * * parallel: whether the animation calls have the ANIMATION_PARALLEL flag, necessary for it to run alongside concurrent animations. - */ -/atom/proc/SpinAnimation(speed = 1 SECONDS, loops = -1, clockwise = TRUE, segments = 3, parallel = TRUE) - if(!segments) - return - var/segment = 360/segments - if(!clockwise) - segment = -segment - SEND_SIGNAL(src, COMSIG_ATOM_SPIN_ANIMATION, speed, loops, segments, segment) - do_spin_animation(speed, loops, segments, segment, parallel) - -#define INVISIBILITY_VALUE 1 -#define INVISIBILITY_PRIORITY 2 - -/atom/proc/RecalculateInvisibility() - PRIVATE_PROC(TRUE) - - if(!invisibility_sources) - current_invisibility_priority = -INFINITY - invisibility = initial(invisibility) - return - - var/highest_priority - var/list/highest_priority_invisibility_data - for(var/entry in invisibility_sources) - var/list/priority_data - if(islist(entry)) - priority_data = entry - else - priority_data = invisibility_sources[entry] - - var/priority = priority_data[INVISIBILITY_PRIORITY] - if(highest_priority > priority) // In the case of equal priorities, we use the last thing in the list so that more recent changes apply first - continue - - highest_priority = priority - highest_priority_invisibility_data = priority_data - - current_invisibility_priority = highest_priority - invisibility = highest_priority_invisibility_data[INVISIBILITY_VALUE] - -/** - * Sets invisibility according to priority. - * If you want to be able to undo the value you set back to what it would be otherwise, - * you should provide an id here and remove it using RemoveInvisibility(id) - */ -/atom/proc/SetInvisibility(desired_value, id, priority=0) - if(!invisibility_sources) - invisibility_sources = list() - - if(id) - invisibility_sources[id] = list(desired_value, priority) - else - invisibility_sources += list(list(desired_value, priority)) - - if(current_invisibility_priority > priority) - return - - RecalculateInvisibility() - -/// Removes the specified invisibility source from the tracker -/atom/proc/RemoveInvisibility(source_id) - if(!invisibility_sources) - return - - var/list/priority_data = invisibility_sources[source_id] - invisibility_sources -= source_id - - if(length(invisibility_sources) == 0) - invisibility_sources = null - - if(current_invisibility_priority > priority_data[INVISIBILITY_PRIORITY]) - return - - RecalculateInvisibility() - -#undef INVISIBILITY_VALUE -#undef INVISIBILITY_PRIORITY diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 313afe7fdf9ad3..4fa8f7f632d017 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -45,7 +45,6 @@ var/atom/movable/moving_from_pull ///Holds information about any movement loops currently running/waiting to run on the movable. Lazy, will be null if nothing's going on var/datum/movement_packet/move_packet - var/datum/forced_movement/force_moving = null //handled soley by forced_movement.dm /** * an associative lazylist of relevant nested contents by "channel", the list is of the form: list(channel = list(important nested contents of that type)) * each channel has a specific purpose and is meant to replace potentially expensive nested contents iteration. @@ -99,8 +98,8 @@ /// The degree of pressure protection that mobs in list/contents have from the external environment, between 0 and 1 var/contents_pressure_protection = 0 - /// Whether a user will face atoms on entering them with a mouse. Despite being a mob variable, it is here for performances //SKYRAT EDIT ADDITION - var/face_mouse = FALSE //SKYRAT EDIT ADDITION + /// Whether a user will face atoms on entering them with a mouse. Despite being a mob variable, it is here for performances //NOVA EDIT ADDITION + var/face_mouse = FALSE //NOVA EDIT ADDITION /// The voice that this movable makes when speaking var/voice @@ -322,18 +321,15 @@ overlays.Insert(1, emissive_block) return overlays -/atom/movable/proc/onZImpact(turf/impacted_turf, levels, message = TRUE) +/atom/movable/proc/onZImpact(turf/impacted_turf, levels, impact_flags = NONE) SHOULD_CALL_PARENT(TRUE) - if(message) - visible_message(span_danger("[src] crashes into [impacted_turf]!")) - var/atom/highest = impacted_turf - for(var/atom/hurt_atom as anything in impacted_turf.contents) - if(!hurt_atom.density) - continue - if(isobj(hurt_atom) || ismob(hurt_atom)) - if(hurt_atom.layer > highest.layer) - highest = hurt_atom - INVOKE_ASYNC(src, PROC_REF(SpinAnimation), 5, 2) + if(!(impact_flags & ZIMPACT_NO_MESSAGE)) + visible_message( + span_danger("[src] crashes into [impacted_turf]!"), + span_userdanger("You crash into [impacted_turf]!"), + ) + if(!(impact_flags & ZIMPACT_NO_SPIN)) + INVOKE_ASYNC(src, PROC_REF(SpinAnimation), 5, 2) SEND_SIGNAL(src, COMSIG_ATOM_ON_Z_IMPACT, impacted_turf, levels) return TRUE @@ -619,7 +615,7 @@ if(!direction) direction = get_dir(src, newloc) - if(set_dir_on_move && dir != direction && update_dir && !face_mouse) // SKYRAT EDIT - && !face_mouse + if(set_dir_on_move && dir != direction && update_dir && !face_mouse) // NOVA EDIT - && !face_mouse setDir(direction) var/is_multi_tile_object = is_multi_tile_object(src) @@ -745,7 +741,7 @@ moving_diagonally = SECOND_DIAG_STEP . = step(src, SOUTH) if(moving_diagonally == SECOND_DIAG_STEP) - if(!. && set_dir_on_move && update_dir && !face_mouse) // SKYRAT EDIT CHANGE - && !face_mouse + if(!. && set_dir_on_move && update_dir && !face_mouse) // NOVA EDIT CHANGE - && !face_mouse setDir(first_step_dir) else if(!inertia_moving) newtonian_move(direct) @@ -785,7 +781,7 @@ last_move = direct - if(set_dir_on_move && dir != direct && update_dir && !face_mouse) // SKYRAT EDIT CHANGE - && !face_mouse) + if(set_dir_on_move && dir != direct && update_dir && !face_mouse) // NOVA EDIT CHANGE - && !face_mouse) setDir(direct) if(. && has_buckled_mobs() && !handle_buckled_mob_movement(loc, direct, glide_size_override)) //movement failed due to buckled mob(s) . = FALSE @@ -1223,7 +1219,7 @@ if(locate(/obj/structure/lattice) in range(1, get_turf(src))) //Not realistic but makes pushing things in space easier return TRUE - if(locate(/obj/structure/spacevine) in range(1, get_turf(src))) //SKYRAT EDIT: allow walking when vines are around + if(locate(/obj/structure/spacevine) in range(1, get_turf(src))) //NOVA EDIT: allow walking when vines are around return TRUE return FALSE @@ -1252,7 +1248,7 @@ /atom/movable/proc/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) set waitfor = FALSE var/hitpush = TRUE - var/impact_signal = SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum) + var/impact_signal = SEND_SIGNAL(src, COMSIG_MOVABLE_PRE_IMPACT, hit_atom, throwingdatum) if(impact_signal & COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH) hitpush = FALSE // hacky, tie this to something else or a proper workaround later @@ -1260,6 +1256,7 @@ return // in case a signal interceptor broke or deleted the thing before we could process our hit if(SEND_SIGNAL(hit_atom, COMSIG_ATOM_PREHITBY, src, throwingdatum) & COMSIG_HIT_PREVENTED) return + SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum) return hit_atom.hitby(src, throwingdatum=throwingdatum, hitpush=hitpush) /atom/movable/hitby(atom/movable/hitting_atom, skipcatch, hitpush = TRUE, blocked, datum/thrownthing/throwingdatum) @@ -1454,12 +1451,6 @@ animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, transform=rotated_transform, time = 1, easing=BACK_EASING|EASE_IN, flags = ANIMATION_PARALLEL) animate(pixel_x = pixel_x - pixel_x_diff, pixel_y = pixel_y - pixel_y_diff, transform=initial_transform, time = 2, easing=SINE_EASING, flags = ANIMATION_PARALLEL) -/atom/movable/vv_get_dropdown() - . = ..() - . += "" - . += "" - - /* Language procs * Unless you are doing something very specific, these are the ones you want to use. */ @@ -1624,6 +1615,9 @@ /atom/movable/vv_get_dropdown() . = ..() + VV_DROPDOWN_OPTION("", "---------") + VV_DROPDOWN_OPTION(VV_HK_OBSERVE_FOLLOW, "Observe Follow") + VV_DROPDOWN_OPTION(VV_HK_GET_MOVABLE, "Get Movable") VV_DROPDOWN_OPTION(VV_HK_EDIT_PARTICLES, "Edit Particles") VV_DROPDOWN_OPTION(VV_HK_DEADCHAT_PLAYS, "Start/Stop Deadchat Plays") VV_DROPDOWN_OPTION(VV_HK_ADD_FANTASY_AFFIX, "Add Fantasy Affix") @@ -1634,6 +1628,18 @@ if(!.) return + if(href_list[VV_HK_OBSERVE_FOLLOW]) + if(!check_rights(R_ADMIN)) + return + usr.client?.admin_follow(src) + + if(href_list[VV_HK_GET_MOVABLE]) + if(!check_rights(R_ADMIN)) + return + if(QDELETED(src)) + return + forceMove(get_turf(usr)) + if(href_list[VV_HK_EDIT_PARTICLES] && check_rights(R_VAREDIT)) var/client/C = usr.client C?.open_particle_editor(src) @@ -1641,16 +1647,13 @@ if(href_list[VV_HK_DEADCHAT_PLAYS] && check_rights(R_FUN)) if(tgui_alert(usr, "Allow deadchat to control [src] via chat commands?", "Deadchat Plays [src]", list("Allow", "Cancel")) != "Allow") return - // Alert is async, so quick sanity check to make sure we should still be doing this. if(QDELETED(src)) return - // This should never happen, but if it does it should not be silent. if(deadchat_plays() == COMPONENT_INCOMPATIBLE) to_chat(usr, span_warning("Deadchat control not compatible with [src].")) CRASH("deadchat_control component incompatible with object of type: [type]") - to_chat(usr, span_notice("Deadchat now control [src].")) log_admin("[key_name(usr)] has added deadchat control to [src]") message_admins(span_notice("[key_name(usr)] has added deadchat control to [src]")) diff --git a/code/game/communications.dm b/code/game/communications.dm index 418673766840f2..b2802899ec3195 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -99,12 +99,12 @@ GLOBAL_LIST_INIT(radiochannels, list( RADIO_CHANNEL_ENGINEERING = FREQ_ENGINEERING, RADIO_CHANNEL_SECURITY = FREQ_SECURITY, RADIO_CHANNEL_CENTCOM = FREQ_CENTCOM, - RADIO_CHANNEL_FACTION = FREQ_FACTION, //SKYRAT EDIT ADDITION - FACTION - RADIO_CHANNEL_CYBERSUN = FREQ_CYBERSUN, //SKYRAT EDIT ADDITION - MAPPING - RADIO_CHANNEL_INTERDYNE = FREQ_INTERDYNE, //SKYRAT EDIT ADDITION - MAPPING - RADIO_CHANNEL_GUILD = FREQ_GUILD, //SKYRAT EDIT ADDITION - ASSAULT OPS - RADIO_CHANNEL_TARKON = FREQ_TARKON, //SKYRAT EDIT ADDITION - MAPPING - RADIO_CHANNEL_SOLFED = FREQ_SOLFED, //SKYRAT EDIT ADDITION - SOLFED + RADIO_CHANNEL_FACTION = FREQ_FACTION, //NOVA EDIT ADDITION - FACTION + RADIO_CHANNEL_CYBERSUN = FREQ_CYBERSUN, //NOVA EDIT ADDITION - MAPPING + RADIO_CHANNEL_INTERDYNE = FREQ_INTERDYNE, //NOVA EDIT ADDITION - MAPPING + RADIO_CHANNEL_GUILD = FREQ_GUILD, //NOVA EDIT ADDITION - ASSAULT OPS + RADIO_CHANNEL_TARKON = FREQ_TARKON, //NOVA EDIT ADDITION - MAPPING + RADIO_CHANNEL_SOLFED = FREQ_SOLFED, //NOVA EDIT ADDITION - SOLFED RADIO_CHANNEL_SYNDICATE = FREQ_SYNDICATE, RADIO_CHANNEL_UPLINK = FREQ_UPLINK, RADIO_CHANNEL_SUPPLY = FREQ_SUPPLY, @@ -124,11 +124,11 @@ GLOBAL_LIST_INIT(reverseradiochannels, list( "[FREQ_ENGINEERING]" = RADIO_CHANNEL_ENGINEERING, "[FREQ_SECURITY]" = RADIO_CHANNEL_SECURITY, "[FREQ_CENTCOM]" = RADIO_CHANNEL_CENTCOM, - "[FREQ_FACTION]" = RADIO_CHANNEL_FACTION, //SKYRAT EDIT ADDITION - FACTION - "[FREQ_CYBERSUN]" = RADIO_CHANNEL_CYBERSUN, //SKYRAT EDIT ADDITION - MAPPING - "[FREQ_INTERDYNE]" = RADIO_CHANNEL_INTERDYNE, //SKYRAT EDIT ADDITION - MAPPING - "[FREQ_TARKON]" = RADIO_CHANNEL_TARKON, //SKYRAT EDIT ADDITION - MAPPING - "[FREQ_SOLFED]" = RADIO_CHANNEL_SOLFED, //SKYRAT EDIT ADDITION - SOLFED + "[FREQ_FACTION]" = RADIO_CHANNEL_FACTION, //NOVA EDIT ADDITION - FACTION + "[FREQ_CYBERSUN]" = RADIO_CHANNEL_CYBERSUN, //NOVA EDIT ADDITION - MAPPING + "[FREQ_INTERDYNE]" = RADIO_CHANNEL_INTERDYNE, //NOVA EDIT ADDITION - MAPPING + "[FREQ_TARKON]" = RADIO_CHANNEL_TARKON, //NOVA EDIT ADDITION - MAPPING + "[FREQ_SOLFED]" = RADIO_CHANNEL_SOLFED, //NOVA EDIT ADDITION - SOLFED "[FREQ_SYNDICATE]" = RADIO_CHANNEL_SYNDICATE, "[FREQ_UPLINK]" = RADIO_CHANNEL_UPLINK, "[FREQ_SUPPLY]" = RADIO_CHANNEL_SUPPLY, diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index dbc9a19a6c5152..a7d7a86a78c671 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -18,7 +18,7 @@ /datum/atom_hud/data /datum/atom_hud/data/human/medical - hud_icons = list(STATUS_HUD, HEALTH_HUD, DNR_HUD) // SKYRAT EDIT ADDITION - DNR_HUD + hud_icons = list(STATUS_HUD, HEALTH_HUD, DNR_HUD) // NOVA EDIT ADDITION - DNR_HUD /datum/atom_hud/data/human/medical/basic @@ -47,7 +47,7 @@ hud_icons = list(ID_HUD) /datum/atom_hud/data/human/security/advanced - hud_icons = list(ID_HUD, IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD, WANTED_HUD, PERMIT_HUD, DNR_HUD) //SKYRAT EDIT ADDITION - PERMIT_HUD, DNR_HUD + hud_icons = list(ID_HUD, IMPSEC_FIRST_HUD, IMPLOYAL_HUD, IMPSEC_SECOND_HUD, WANTED_HUD, PERMIT_HUD, DNR_HUD) //NOVA EDIT ADDITION - PERMIT_HUD, DNR_HUD /datum/atom_hud/data/human/fan_hud hud_icons = list(FAN_HUD) @@ -81,6 +81,9 @@ for(var/mob/camera/ai_eye/eye as anything in GLOB.aiEyes) eye.update_ai_detect_hud() +/datum/atom_hud/data/malf_apc + hud_icons = list(MALF_APC_HUD) + /* MED/SEC/DIAG HUD HOOKS */ /* @@ -204,7 +207,7 @@ Medical HUD! Basic mode needs suit sensors on. if(HAS_TRAIT(src, TRAIT_XENO_HOST)) holder.icon_state = "hudxeno" else if(stat == DEAD || (HAS_TRAIT(src, TRAIT_FAKEDEATH))) - if((key || get_ghost(FALSE, FALSE)) && (can_defib() & DEFIB_REVIVABLE_STATES)) // SKYRAT EDIT : OG : if((key || get_ghost(FALSE, TRUE)) && (can_defib() & DEFIB_REVIVABLE_STATES)) + if(can_defib_client()) holder.icon_state = "huddefib" else holder.icon_state = "huddead" @@ -276,36 +279,41 @@ Security HUDs! Basic mode shows only the job. sechud_icon_state = "hudno_id" holder.icon_state = sechud_icon_state sec_hud_set_security_status() - //SKYRAT EDIT START + //NOVA EDIT START var/image/permit_holder = hud_list[PERMIT_HUD] permit_holder.pixel_y = I.Height() - world.icon_size var/permit_icon_state = wear_id?.get_gun_permit_iconstate() if(!permit_icon_state) permit_icon_state = "hudfan_no" permit_holder.icon_state = permit_icon_state - //SKYRAT EDIT END + //NOVA EDIT END /mob/living/proc/sec_hud_set_implants() var/image/holder - for(var/i in list(IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD)) + for(var/i in list(IMPSEC_FIRST_HUD, IMPLOYAL_HUD, IMPSEC_SECOND_HUD)) holder = hud_list[i] holder.icon_state = null set_hud_image_inactive(i) - for(var/obj/item/implant/I in implants) - if(istype(I, /obj/item/implant/tracking)) - holder = hud_list[IMPTRACK_HUD] - var/icon/IC = icon(icon, icon_state, dir) - holder.pixel_y = IC.Height() - world.icon_size - holder.icon_state = "hud_imp_tracking" - set_hud_image_active(IMPTRACK_HUD) - - else if(istype(I, /obj/item/implant/chem)) - holder = hud_list[IMPCHEM_HUD] - var/icon/IC = icon(icon, icon_state, dir) - holder.pixel_y = IC.Height() - world.icon_size - holder.icon_state = "hud_imp_chem" - set_hud_image_active(IMPCHEM_HUD) + var/security_slot = 1 //Which of the two security hud slots are we putting found security implants in? + for(var/obj/item/implant/current_implant in implants) + if(current_implant.implant_flags & IMPLANT_TYPE_SECURITY) + switch(security_slot) + if(1) + holder = hud_list[IMPSEC_FIRST_HUD] + var/icon/IC = icon(icon, icon_state, dir) + holder.pixel_y = IC.Height() - world.icon_size + holder.icon_state = current_implant.hud_icon_state + set_hud_image_active(IMPSEC_FIRST_HUD) + security_slot++ + + if(2) //Theoretically if we somehow get multiple sec implants, whatever the most recently implanted implant is will take over the 2nd position + holder = hud_list[IMPSEC_SECOND_HUD] + var/icon/IC = icon(icon, icon_state, dir) + holder.pixel_y = IC.Height() - world.icon_size + holder.pixel_x = initial(holder.pixel_x) + 7 //Adds an offset that mirrors the hud blip to the other side of the mob. + holder.icon_state = current_implant.hud_icon_state + set_hud_image_active(IMPSEC_SECOND_HUD) if(HAS_TRAIT(src, TRAIT_MINDSHIELD)) holder = hud_list[IMPLOYAL_HUD] @@ -318,6 +326,12 @@ Security HUDs! Basic mode shows only the job. var/image/holder = hud_list[WANTED_HUD] var/icon/sec_icon = icon(icon, icon_state, dir) holder.pixel_y = sec_icon.Height() - world.icon_size + + if (HAS_TRAIT(src, TRAIT_ALWAYS_WANTED)) + holder.icon_state = "hudwanted" + set_hud_image_active(WANTED_HUD) + return + var/perp_name = get_face_name(get_id_name("")) if(!perp_name || !GLOB.manifest) @@ -550,7 +564,6 @@ Diagnostic HUDs! holder.icon_state = "hudbatt[RoundDiagBar(chargelvl)]" else holder.icon_state = "hudnobatt" - /*~~~~~~~~~~~~ Airlocks! ~~~~~~~~~~~~~*/ @@ -562,3 +575,10 @@ Diagnostic HUDs! var/image/holder = hud_list[DIAG_AIRLOCK_HUD] holder.icon_state = "electrified" set_hud_image_active(DIAG_AIRLOCK_HUD) + +/// Applies hacked overlay for malf AIs +/obj/machinery/power/apc/proc/set_hacked_hud() + var/image/holder = hud_list[MALF_APC_HUD] + holder.loc = get_turf(src) + SET_PLANE(holder,ABOVE_LIGHTING_PLANE,src) + set_hud_image_active(MALF_APC_HUD) diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm deleted file mode 100644 index 8d171f29dd83d2..00000000000000 --- a/code/game/gamemodes/dynamic/dynamic.dm +++ /dev/null @@ -1,914 +0,0 @@ -#define FAKE_GREENSHIFT_FORM_CHANCE 15 -#define FAKE_REPORT_CHANCE 8 -#define PULSAR_REPORT_CHANCE 8 -#define REPORT_NEG_DIVERGENCE -15 -#define REPORT_POS_DIVERGENCE 15 - -// Are HIGH_IMPACT_RULESETs allowed to stack? -GLOBAL_VAR_INIT(dynamic_no_stacking, TRUE) -// If enabled does not accept or execute any rulesets. -GLOBAL_VAR_INIT(dynamic_forced_extended, FALSE) -// How high threat is required for HIGH_IMPACT_RULESETs stacking. -// This is independent of dynamic_no_stacking. -GLOBAL_VAR_INIT(dynamic_stacking_limit, 90) -// List of forced roundstart rulesets. -GLOBAL_LIST_EMPTY(dynamic_forced_roundstart_ruleset) -// Forced threat level, setting this to zero or higher forces the roundstart threat to the value. -GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) -/// Modify the threat level for station traits before dynamic can be Initialized. List(instance = threat_reduction) -GLOBAL_LIST_EMPTY(dynamic_station_traits) -/// Rulesets which have been forcibly enabled or disabled -GLOBAL_LIST_EMPTY(dynamic_forced_rulesets) - -/datum/game_mode/dynamic - // Threat logging vars - /// The "threat cap", threat shouldn't normally go above this and is used in ruleset calculations - var/threat_level = 0 - - /// Set at the beginning of the round. Spent by the mode to "purchase" rules. Everything else goes in the postround budget. - var/round_start_budget = 0 - - /// Set at the beginning of the round. Spent by midrounds and latejoins. - var/mid_round_budget = 0 - - /// The initial round start budget for logging purposes, set once at the beginning of the round. - var/initial_round_start_budget = 0 - - /// Running information about the threat. Can store text or datum entries. - var/list/threat_log = list() - /// Threat log shown on the roundend report. Should only list player-made edits. - var/list/roundend_threat_log = list() - /// List of latejoin rules used for selecting the rules. - var/list/latejoin_rules - /// List of midround rules used for selecting the rules. - var/list/midround_rules - /** # Pop range per requirement. - * If the value is five the range is: - * 0-4, 5-9, 10-14, 15-19, 20-24, 25-29, 30-34, 35-39, 40-54, 45+ - * If it is six the range is: - * 0-5, 6-11, 12-17, 18-23, 24-29, 30-35, 36-41, 42-47, 48-53, 54+ - * If it is seven the range is: - * 0-6, 7-13, 14-20, 21-27, 28-34, 35-41, 42-48, 49-55, 56-62, 63+ - */ - var/pop_per_requirement = 6 - /// Number of players who were ready on roundstart. - var/roundstart_pop_ready = 0 - /// List of candidates used on roundstart rulesets. - var/list/candidates = list() - /// Rules that are processed, rule_process is called on the rules in this list. - var/list/current_rules = list() - /// List of executed rulesets. - var/list/executed_rules = list() - /// If TRUE, the next player to latejoin will guarantee roll for a random latejoin antag - /// (this does not guarantee they get said antag roll, depending on preferences and circumstances) - var/forced_injection = FALSE - /// Forced ruleset to be executed for the next latejoin. - var/datum/dynamic_ruleset/latejoin/forced_latejoin_rule = null - /// How many percent of the rounds are more peaceful. - var/peaceful_percentage = 50 - /// If a high impact ruleset was executed. Only one will run at a time in most circumstances. - var/high_impact_ruleset_executed = FALSE - /// If a only ruleset has been executed. - var/only_ruleset_executed = FALSE - /// Dynamic configuration, loaded on pre_setup - var/list/configuration = null - - /// When world.time is over this number the mode tries to inject a latejoin ruleset. - var/latejoin_injection_cooldown = 0 - - /// The minimum time the recurring latejoin ruleset timer is allowed to be. - var/latejoin_delay_min = (5 MINUTES) - - /// The maximum time the recurring latejoin ruleset timer is allowed to be. - var/latejoin_delay_max = (25 MINUTES) - - /// The low bound for the midround roll time splits. - /// This number influences where to place midround rolls, making this smaller - /// will make midround rolls more frequent, and vice versa. - /// A midround will never be able to roll before this. - var/midround_lower_bound = 10 MINUTES - - /// The upper bound for the midround roll time splits. - /// This number influences where to place midround rolls, making this larger - /// will make midround rolls less frequent, and vice versa. - /// A midround will never be able to roll farther than this. - var/midround_upper_bound = 100 MINUTES - - /// The distance between the chosen midround roll point (which is deterministic), - /// and when it can actually roll. - /// Basically, if this is set to 5 minutes, and a midround roll point is decided to be at 20 minutes, - /// then it can roll anywhere between 15 and 25 minutes. - var/midround_roll_distance = 3 MINUTES - - /// The amount of threat per midround roll. - /// Basically, if this is set to 5, then for every 5 threat, one midround roll will be added. - /// The equation this is used in rounds up, meaning that if this is set to 5, and you have 6 - /// threat, then you will get 2 midround rolls. - var/threat_per_midround_roll = 7 - - /// A number between -5 and +5. - /// A negative value will give a more peaceful round and - /// a positive value will give a round with higher threat. - var/threat_curve_centre = 0 - - /// A number between 0.5 and 4. - /// Higher value will favour extreme rounds and - /// lower value rounds closer to the average. - var/threat_curve_width = 1.8 - - /// A number between -5 and +5. - /// Equivalent to threat_curve_centre, but for the budget split. - /// A negative value will weigh towards midround rulesets, and a positive - /// value will weight towards roundstart ones. - var/roundstart_split_curve_centre = 1 - - /// A number between 0.5 and 4. - /// Equivalent to threat_curve_width, but for the budget split. - /// Higher value will favour more variance in splits and - /// lower value rounds closer to the average. - var/roundstart_split_curve_width = 1.8 - - /// The minimum amount of time for antag random events to be hijacked. - var/random_event_hijack_minimum = 10 MINUTES - - /// The maximum amount of time for antag random events to be hijacked. - var/random_event_hijack_maximum = 18 MINUTES - - /// What is the lower bound of when the roundstart annoucement is sent out? - var/waittime_l = 600 - - /// What is the higher bound of when the roundstart annoucement is sent out? - var/waittime_h = 1800 - - /// A number between 0 and 100. The maximum amount of threat allowed to generate. - var/max_threat_level = 100 - - /// The extra chance multiplier that a heavy impact midround ruleset will run next time. - /// For example, if this is set to 50, then the next heavy roll will be about 50% more likely to happen. - var/hijacked_random_event_injection_chance_modifier = 50 - - /// Any midround before this point is guaranteed to be light - var/midround_light_upper_bound = 25 MINUTES - - /// Any midround after this point is guaranteed to be heavy - var/midround_heavy_lower_bound = 55 MINUTES - - /// If there are less than this many players readied, threat level will be lowered. - /// This number should be kept fairly low, as there are other measures that population - /// impacts Dynamic, such as the requirements variable on rulesets. - var/low_pop_player_threshold = 20 - - /// The maximum threat that can roll with *zero* players. - /// As the number of players approaches `low_pop_player_threshold`, the maximum - /// threat level will increase. - /// For example, if `low_pop_maximum_threat` is 50, `low_pop_player_threshold` is 20, - /// and the number of readied players is 10, then the highest threat that can roll is - /// lerp(50, 100, 10 / 20), AKA 75. - var/low_pop_maximum_threat = 40 - - /// The chance for latejoins to roll when ready - var/latejoin_roll_chance = 50 - - // == EVERYTHING BELOW THIS POINT SHOULD NOT BE CONFIGURED == - - /// A list of recorded "snapshots" of the round, stored in the dynamic.json log - var/list/datum/dynamic_snapshot/snapshots - - /// The time when the last midround injection was attempted, whether or not it was successful - var/last_midround_injection_attempt = 0 - - /// Whether or not a random event has been hijacked this midround cycle - var/random_event_hijacked = HIJACKED_NOTHING - - /// The timer ID for the cancellable midround rule injection - var/midround_injection_timer_id - - /// The last drafted midround rulesets (without the current one included). - /// Used for choosing different midround injections. - var/list/current_midround_rulesets - - /// The amount of threat shown on the piece of paper. - /// Can differ from the actual threat amount. - var/shown_threat - - VAR_PRIVATE/next_midround_injection - -/datum/game_mode/dynamic/admin_panel() - var/list/dat = list("Game Mode Panel

Game Mode Panel

") - dat += "Dynamic Mode \[VV\]\[Refresh\]
" - dat += "Threat Level: [threat_level]
" - dat += "Budgets (Roundstart/Midrounds): [initial_round_start_budget]/[threat_level - initial_round_start_budget]
" - - dat += "Midround budget to spend: [mid_round_budget]\[Adjust\]\[View Log\]
" - dat += "
" - dat += "Parameters: centre = [threat_curve_centre] ; width = [threat_curve_width].
" - dat += "Split parameters: centre = [roundstart_split_curve_centre] ; width = [roundstart_split_curve_width].
" - dat += "On average, [clamp(peaceful_percentage, 1, 99)]% of the rounds are more peaceful.
" - dat += "Forced extended: [GLOB.dynamic_forced_extended ? "On" : "Off"]
" - dat += "No stacking (only one round-ender): [GLOB.dynamic_no_stacking ? "On" : "Off"]
" - dat += "Stacking limit: [GLOB.dynamic_stacking_limit] \[Adjust\]" - dat += "
" - dat += "\[Force Next Latejoin Ruleset\]
" - if (forced_latejoin_rule) - dat += {"-> [forced_latejoin_rule.name] <-
"} - dat += "\[Execute Midround Ruleset\]
" - dat += "
" - dat += "Executed rulesets: " - if (executed_rules.len > 0) - dat += "
" - for (var/datum/dynamic_ruleset/DR in executed_rules) - dat += "[DR.ruletype] - [DR.name]
" - else - dat += "none.
" - dat += "
Injection Timers: ([get_heavy_midround_injection_chance(dry_run = TRUE)]% heavy midround chance)
" - dat += "Latejoin: [DisplayTimeText(latejoin_injection_cooldown-world.time)] \[Now!\]
" - - var/next_injection = next_midround_injection() - if (next_injection == INFINITY) - dat += "All midrounds have been exhausted." - else - dat += "Midround: [DisplayTimeText(next_injection - world.time)] \[Now!\]
" - - usr << browse(dat.Join(), "window=gamemode_panel;size=500x500") - -/datum/game_mode/dynamic/Topic(href, href_list) - if (..()) // Sanity, maybe ? - return - if(!check_rights(R_ADMIN)) - message_admins("[usr.key] has attempted to override the game mode panel!") - log_admin("[key_name(usr)] tried to use the game mode panel without authorization.") - return - if (href_list["forced_extended"]) - GLOB.dynamic_forced_extended = !GLOB.dynamic_forced_extended - else if (href_list["no_stacking"]) - GLOB.dynamic_no_stacking = !GLOB.dynamic_no_stacking - else if (href_list["adjustthreat"]) - var/threatadd = input("Specify how much threat to add (negative to subtract). This can inflate the threat level.", "Adjust Threat", 0) as null|num - if(!threatadd) - return - if(threatadd > 0) - create_threat(threatadd, threat_log, "[worldtime2text()]: increased by [key_name(usr)]") - else - spend_midround_budget(-threatadd, threat_log, "[worldtime2text()]: decreased by [key_name(usr)]") - else if (href_list["injectlate"]) - latejoin_injection_cooldown = 0 - forced_injection = TRUE - message_admins("[key_name(usr)] forced a latejoin injection.") - else if (href_list["injectmid"]) - forced_injection = TRUE - message_admins("[key_name(usr)] forced a midround injection.") - try_midround_roll() - else if (href_list["threatlog"]) - show_threatlog(usr) - else if (href_list["stacking_limit"]) - GLOB.dynamic_stacking_limit = input(usr,"Change the threat limit at which round-endings rulesets will start to stack.", "Change stacking limit", null) as num - else if(href_list["force_latejoin_rule"]) - var/added_rule = input(usr,"What ruleset do you want to force upon the next latejoiner? This will bypass threat level and population restrictions.", "Rigging Latejoin", null) as null|anything in sort_names(init_rulesets(/datum/dynamic_ruleset/latejoin)) - if (!added_rule) - return - forced_latejoin_rule = added_rule - log_admin("[key_name(usr)] set [added_rule] to proc on the next latejoin.") - message_admins("[key_name(usr)] set [added_rule] to proc on the next valid latejoin.") - else if(href_list["clear_forced_latejoin"]) - forced_latejoin_rule = null - log_admin("[key_name(usr)] cleared the forced latejoin ruleset.") - message_admins("[key_name(usr)] cleared the forced latejoin ruleset.") - else if(href_list["force_midround_rule"]) - var/added_rule = input(usr,"What ruleset do you want to force right now? This will bypass threat level and population restrictions.", "Execute Ruleset", null) as null|anything in sort_names(init_rulesets(/datum/dynamic_ruleset/midround)) - if (!added_rule) - return - log_admin("[key_name(usr)] executed the [added_rule] ruleset.") - message_admins("[key_name(usr)] executed the [added_rule] ruleset.") - picking_specific_rule(added_rule, TRUE) - else if(href_list["cancelmidround"]) - admin_cancel_midround(usr, href_list["cancelmidround"]) - return - else if (href_list["differentmidround"]) - admin_different_midround(usr, href_list["differentmidround"]) - return - - admin_panel() // Refreshes the window - -// Checks if there are HIGH_IMPACT_RULESETs and calls the rule's round_result() proc -/datum/game_mode/dynamic/set_round_result() - // If it got to this part, just pick one high impact ruleset if it exists - for(var/datum/dynamic_ruleset/rule in executed_rules) - if(rule.flags & HIGH_IMPACT_RULESET) - rule.round_result() - // One was set, so we're done here - if(SSticker.news_report) - return - - return ..() - -/datum/game_mode/dynamic/proc/send_intercept() - if(SScommunications.block_command_report) //If we don't want the report to be printed just yet, we put it off until it's ready - addtimer(CALLBACK(src, PROC_REF(send_intercept)), 10 SECONDS) - return - - . = "Nanotrasen Department of Intelligence Threat Advisory, Spinward Sector, TCD [time2text(world.realtime, "DDD, MMM DD")], [CURRENT_STATION_YEAR]:
" - . += generate_advisory_level() - - var/min_threat = 100 - for(var/datum/dynamic_ruleset/ruleset as anything in init_rulesets(/datum/dynamic_ruleset)) - if(ruleset.weight <= 0 || ruleset.cost <= 0) - continue - min_threat = min(ruleset.cost, min_threat) - var/greenshift = GLOB.dynamic_forced_extended || (threat_level < min_threat && shown_threat < min_threat) //if both shown and real threat are below any ruleset, its extended time - - generate_station_goals(greenshift) - . += generate_station_goal_report() - . += generate_station_trait_report() - if(length(SScommunications.command_report_footnotes)) - . += generate_report_footnote() - - print_command_report(., "Central Command 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()) - 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) - -/// Generate the advisory level depending on the shown threat level. -/datum/game_mode/dynamic/proc/generate_advisory_level() - var/advisory_string = "" - if (prob(PULSAR_REPORT_CHANCE)) - if(HAS_TRAIT(SSstation, STATION_TRAIT_BANANIUM_SHIPMENTS)) - advisory_string += "Advisory Level: Clown Planet
" - advisory_string += "Your sector's advisory level is Clown Planet! Our bike horns have picked up on a large bananium stash. Clowns show a large influx of clowns on your station. We highly advice you to slip any threats to keep Honkotrasen assets within the Banana Sector. The Department advises defending chemistry from any clowns that are trying to make baldium or space lube." - return advisory_string - - advisory_string += "Advisory Level: Pulsar Star
" - advisory_string += "Your sector's advisory level is Pulsar Star. A large unknown electromagnetic field has stormed through nearby surveillance equipment. No surveillance data has been able to be obtained showing no credible threats to Nanotrasen assets within the Spinward Sector. The Department advises maintaining high alert against potential threats, regardless of a lack of information." - return advisory_string - - switch(round(shown_threat)) - if(0) - advisory_string += "Advisory Level: White Dwarf
" - advisory_string += "Your sector's advisory level is White Dwarf. Our surveillors have ruled out any and all potential risks known in our database, ruling out the loss of our assets in the Spinward Sector. We advise a lower level of security, alongside distributing ressources on potential profit." - if(1 to 19) - var/show_core_territory = (GLOB.current_living_antags.len > 0) - if (prob(FAKE_GREENSHIFT_FORM_CHANCE)) - show_core_territory = !show_core_territory - - if (show_core_territory) - advisory_string += "Advisory Level: Blue Star
" - advisory_string += "Your sector's advisory level is Blue Star. At this threat advisory, the risk of attacks on Nanotrasen assets within the sector is minor, but cannot be ruled out entirely. Remain vigilant." - else - advisory_string += "Advisory Level: Green Star
" - advisory_string += "Your sector's advisory level is Green Star. Surveillance information shows no credible threats to Nanotrasen assets within the Spinward Sector at this time. As always, the Department advises maintaining vigilance against potential threats, regardless of a lack of known threats." - if(20 to 39) - advisory_string += "Advisory Level: Yellow Star
" - advisory_string += "Your sector's advisory level is Yellow Star. Surveillance shows a credible risk of enemy attack against our assets in the Spinward Sector. We advise a heightened level of security, alongside maintaining vigilance against potential threats." - if(40 to 65) - advisory_string += "Advisory Level: Orange Star
" - advisory_string += "Your sector's advisory level is Orange Star. Upon reviewing your sector's intelligence, the Department has determined that the risk of enemy activity is moderate to severe. At this advisory, we recommend maintaining a higher degree of security and alertness, and vigilance against threats that may (or will) arise." - if(66 to 79) - advisory_string += "Advisory Level: Red Star
" - advisory_string += "Your sector's advisory level is Red Star. The Department of Intelligence has decrypted Cybersun communications suggesting a high likelihood of attacks on Nanotrasen assets within the Spinward Sector. Stations in the region are advised to remain highly vigilant for signs of enemy activity and to be on high alert." - if(80 to 99) - advisory_string += "Advisory Level: Black Orbit
" - advisory_string += "Your sector's advisory level is Black Orbit. Your sector's local comms network is currently undergoing a blackout, and we are therefore unable to accurately judge enemy movements within the region. However, information passed to us by GDI suggests a high amount of enemy activity in the sector, indicative of an impending attack. Remain on high alert, and as always, we advise remaining vigilant against any other potential threats." - if(100) - advisory_string += "Advisory Level: Midnight Sun
" - advisory_string += "Your sector's advisory level is Midnight Sun. Credible information passed to us by GDI suggests that the Syndicate is preparing to mount a major concerted offensive on Nanotrasen assets in the Spinward Sector to cripple our foothold there. All stations should remain on high alert and prepared to defend themselves." - - return advisory_string - -/datum/game_mode/dynamic/proc/show_threatlog(mob/admin) - if(!SSticker.HasRoundStarted()) - tgui_alert(usr, "The round hasn't started yet!") - return - - if(!check_rights(R_ADMIN)) - return - - var/list/out = list("Threat LogThreat Log
Starting Threat: [threat_level]
") - - for(var/entry in threat_log) - if(istext(entry)) - out += "[entry]
" - - out += "Remaining threat/threat_level: [mid_round_budget]/[threat_level]" - - usr << browse(out.Join(), "window=threatlog;size=700x500") - -/// Generates the threat level using lorentz distribution and assigns peaceful_percentage. -/datum/game_mode/dynamic/proc/generate_threat() - // At lower pop levels we run a Liner Interpolation against the max threat based proportionally on the number - // of players ready. This creates a balanced lorentz curve within a smaller range than 0 to max_threat_level. - var/calculated_max_threat = (SSticker.totalPlayersReady < low_pop_player_threshold) ? LERP(low_pop_maximum_threat, max_threat_level, SSticker.totalPlayersReady / low_pop_player_threshold) : max_threat_level - log_dynamic("Calculated maximum threat level based on player count of [SSticker.totalPlayersReady]: [calculated_max_threat]") - - threat_level = lorentz_to_amount(threat_curve_centre, threat_curve_width, calculated_max_threat) - - for(var/datum/station_trait/station_trait in GLOB.dynamic_station_traits) - threat_level = max(threat_level - GLOB.dynamic_station_traits[station_trait], 0) - log_dynamic("Threat reduced by [GLOB.dynamic_station_traits[station_trait]]. Source: [type].") - - peaceful_percentage = (threat_level/max_threat_level)*100 - -/// Generates the midround and roundstart budgets -/datum/game_mode/dynamic/proc/generate_budgets() - round_start_budget = lorentz_to_amount(roundstart_split_curve_centre, roundstart_split_curve_width, threat_level, 0.1) - initial_round_start_budget = round_start_budget - mid_round_budget = threat_level - round_start_budget - -/datum/game_mode/dynamic/proc/setup_parameters() - log_dynamic("Dynamic mode parameters for the round:") - log_dynamic("Centre is [threat_curve_centre], Width is [threat_curve_width], Forced extended is [GLOB.dynamic_forced_extended ? "Enabled" : "Disabled"], No stacking is [GLOB.dynamic_no_stacking ? "Enabled" : "Disabled"].") - log_dynamic("Stacking limit is [GLOB.dynamic_stacking_limit].") - if(GLOB.dynamic_forced_threat_level >= 0) - threat_level = round(GLOB.dynamic_forced_threat_level, 0.1) - else - generate_threat() - generate_budgets() - set_cooldowns() - log_dynamic("Dynamic Mode initialized with a Threat Level of... [threat_level]! ([round_start_budget] round start budget)") - SSblackbox.record_feedback( - "associative", - "dynamic_threat", - 1, - list( - "server_name" = CONFIG_GET(string/serversqlname), - "forced_threat_level" = GLOB.dynamic_forced_threat_level, - "threat_level" = threat_level, - "max_threat" = (SSticker.totalPlayersReady < low_pop_player_threshold) ? LERP(low_pop_maximum_threat, max_threat_level, SSticker.totalPlayersReady / low_pop_player_threshold) : max_threat_level, - "player_count" = SSticker.totalPlayersReady, - "round_start_budget" = round_start_budget, - "parameters" = list( - "threat_curve_centre" = threat_curve_centre, - "threat_curve_width" = threat_curve_width, - "forced_extended" = GLOB.dynamic_forced_extended, - "no_stacking" = GLOB.dynamic_no_stacking, - "stacking_limit" = GLOB.dynamic_stacking_limit, - ), - ), - ) - return TRUE - -/datum/game_mode/dynamic/proc/setup_shown_threat() - if (prob(FAKE_REPORT_CHANCE)) - shown_threat = rand(1, 100) - else - shown_threat = clamp(threat_level + rand(REPORT_NEG_DIVERGENCE, REPORT_POS_DIVERGENCE), 0, 100) - -/datum/game_mode/dynamic/proc/set_cooldowns() - var/latejoin_injection_cooldown_middle = 0.5*(latejoin_delay_max + latejoin_delay_min) - latejoin_injection_cooldown = round(clamp(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), latejoin_delay_min, latejoin_delay_max)) + world.time - -/datum/game_mode/dynamic/pre_setup() - if(CONFIG_GET(flag/dynamic_config_enabled)) - var/json_file = file("[global.config.directory]/dynamic.json") - if(fexists(json_file)) - configuration = json_decode(file2text(json_file)) - if(configuration["Dynamic"]) - for(var/variable in configuration["Dynamic"]) - if(!(variable in vars)) - stack_trace("Invalid dynamic configuration variable [variable] in game mode variable changes.") - continue - vars[variable] = configuration["Dynamic"][variable] - - configure_station_trait_costs() - setup_parameters() - setup_hijacking() - setup_shown_threat() - setup_rulesets() - - //We do this here instead of with the midround rulesets and such because these rules can hang refs - //To new_player and such, and we want the datums to just free when the roundstart work is done - var/list/roundstart_rules = init_rulesets(/datum/dynamic_ruleset/roundstart) - - SSjob.DivideOccupations(pure = TRUE, allow_all = TRUE) - for(var/i in GLOB.new_player_list) - var/mob/dead/new_player/player = i - if(player.ready == PLAYER_READY_TO_PLAY && player.mind && player.check_preferences()) - if(is_unassigned_job(player.mind.assigned_role)) - var/list/job_data = list() - var/job_prefs = player.client.prefs.job_preferences - for(var/job in job_prefs) - var/priority = job_prefs[job] - job_data += "[job]: [SSjob.job_priority_level_to_string(priority)]" - to_chat(player, span_danger("You were unable to qualify for any roundstart antagonist role this round because your job preferences presented a high chance of all of your selected jobs being unavailable, along with 'return to lobby if job is unavailable' enabled. Increase the number of roles set to medium or low priority to reduce the chances of this happening.")) - log_admin("[player.ckey] failed to qualify for any roundstart antagonist role because their job preferences presented a high chance of all of their selected jobs being unavailable, along with 'return to lobby if job is unavailable' enabled and has [player.client.prefs.be_special.len] antag preferences enabled. They will be unable to qualify for any roundstart antagonist role. These are their job preferences - [job_data.Join(" | ")]") - else - roundstart_pop_ready++ - candidates.Add(player) - SSjob.ResetOccupations() - log_dynamic("Listing [roundstart_rules.len] round start rulesets, and [candidates.len] players ready.") - if (candidates.len <= 0) - log_dynamic("[candidates.len] candidates.") - return TRUE - - if(GLOB.dynamic_forced_roundstart_ruleset.len > 0) - rigged_roundstart() - else - roundstart(roundstart_rules) - - log_dynamic("[round_start_budget] round start budget was left, donating it to midrounds.") - threat_log += "[worldtime2text()]: [round_start_budget] round start budget was left, donating it to midrounds." - mid_round_budget += round_start_budget - - var/starting_rulesets = "" - for (var/datum/dynamic_ruleset/roundstart/DR in executed_rules) - starting_rulesets += "[DR.name], " - log_dynamic("Picked the following roundstart rules: [starting_rulesets]") - candidates.Cut() - return TRUE - -/datum/game_mode/dynamic/post_setup(report) - for(var/datum/dynamic_ruleset/roundstart/rule in executed_rules) - rule.candidates.Cut() // The rule should not use candidates at this point as they all are null. - addtimer(CALLBACK(src, TYPE_PROC_REF(/datum/game_mode/dynamic/, execute_roundstart_rule), rule), rule.delay) - - if (!CONFIG_GET(flag/no_intercept_report)) - addtimer(CALLBACK(src, PROC_REF(send_intercept)), rand(waittime_l, waittime_h)) - - //SKYRAT EDIT START - DIVERGENCY/GOALS REPORT - else - addtimer(CALLBACK(src, PROC_REF(send_trait_report)), rand(waittime_l, waittime_h)) - //SKYRAT EDIT END - - ..() - -/// Initializes the internal ruleset variables -/datum/game_mode/dynamic/proc/setup_rulesets() - midround_rules = init_rulesets(/datum/dynamic_ruleset/midround) - latejoin_rules = init_rulesets(/datum/dynamic_ruleset/latejoin) - -/// Returns a list of the provided rulesets. -/// Configures their variables to match config. -/datum/game_mode/dynamic/proc/init_rulesets(ruleset_subtype) - var/list/rulesets = list() - - for (var/datum/dynamic_ruleset/ruleset_type as anything in subtypesof(ruleset_subtype)) - if (initial(ruleset_type.name) == "") - continue - - if (initial(ruleset_type.weight) == 0) - continue - - var/ruleset = new ruleset_type - configure_ruleset(ruleset) - rulesets += ruleset - - return rulesets - -/// A simple roundstart proc used when dynamic_forced_roundstart_ruleset has rules in it. -/datum/game_mode/dynamic/proc/rigged_roundstart() - message_admins("[GLOB.dynamic_forced_roundstart_ruleset.len] rulesets being forced. Will now attempt to draft players for them.") - log_dynamic("[GLOB.dynamic_forced_roundstart_ruleset.len] rulesets being forced. Will now attempt to draft players for them.") - for (var/datum/dynamic_ruleset/roundstart/rule in GLOB.dynamic_forced_roundstart_ruleset) - configure_ruleset(rule) - message_admins("Drafting players for forced ruleset [rule.name].") - log_dynamic("Drafting players for forced ruleset [rule.name].") - rule.mode = src - rule.acceptable(roundstart_pop_ready, threat_level) // Assigns some vars in the modes, running it here for consistency - rule.candidates = candidates.Copy() - rule.trim_candidates() - rule.load_templates() - if (rule.ready(roundstart_pop_ready, TRUE)) - var/cost = rule.cost - var/scaled_times = 0 - if (rule.scaling_cost) - scaled_times = round(max(round_start_budget - cost, 0) / rule.scaling_cost) - cost += rule.scaling_cost * scaled_times - - spend_roundstart_budget(picking_roundstart_rule(rule, scaled_times, forced = TRUE)) - -/datum/game_mode/dynamic/proc/roundstart(list/roundstart_rules) - if (GLOB.dynamic_forced_extended) - log_dynamic("Starting a round of forced extended.") - return TRUE - var/list/drafted_rules = list() - for (var/datum/dynamic_ruleset/roundstart/rule in roundstart_rules) - if (!rule.weight) - continue - if (rule.acceptable(roundstart_pop_ready, threat_level) && round_start_budget >= rule.cost) // If we got the population and threat required - rule.candidates = candidates.Copy() - rule.trim_candidates() - rule.load_templates() - if (rule.ready(roundstart_pop_ready) && rule.candidates.len > 0) - drafted_rules[rule] = rule.weight - - var/list/rulesets_picked = list() - - // Kept in case a ruleset can't be initialized for whatever reason, we want to be able to only spend what we can use. - var/round_start_budget_left = round_start_budget - - while (round_start_budget_left > 0) - var/datum/dynamic_ruleset/roundstart/ruleset = pick_weight(drafted_rules) - if (isnull(ruleset)) - log_dynamic("No more rules can be applied, stopping with [round_start_budget] left.") - break - - var/cost = (ruleset in rulesets_picked) ? ruleset.scaling_cost : ruleset.cost - if (cost == 0) - stack_trace("[ruleset] cost 0, this is going to result in an infinite loop.") - drafted_rules[ruleset] = null - continue - - if (cost > round_start_budget_left) - drafted_rules[ruleset] = null - continue - - if (check_blocking(ruleset.blocking_rules, rulesets_picked)) - drafted_rules[ruleset] = null - continue - - round_start_budget_left -= cost - - rulesets_picked[ruleset] += 1 - - if (ruleset.flags & HIGH_IMPACT_RULESET) - for (var/_other_ruleset in drafted_rules) - var/datum/dynamic_ruleset/other_ruleset = _other_ruleset - if (other_ruleset.flags & HIGH_IMPACT_RULESET) - drafted_rules[other_ruleset] = null - - if (ruleset.flags & LONE_RULESET) - drafted_rules[ruleset] = null - - for (var/ruleset in rulesets_picked) - spend_roundstart_budget(picking_roundstart_rule(ruleset, rulesets_picked[ruleset] - 1)) - - update_log() - -/// Initializes the round start ruleset provided to it. Returns how much threat to spend. -/datum/game_mode/dynamic/proc/picking_roundstart_rule(datum/dynamic_ruleset/roundstart/ruleset, scaled_times = 0, forced = FALSE) - log_dynamic("Picked a ruleset: [ruleset.name], scaled [scaled_times] times") - - ruleset.trim_candidates() - var/added_threat = ruleset.scale_up(roundstart_pop_ready, scaled_times) - - if(ruleset.pre_execute(roundstart_pop_ready)) - threat_log += "[worldtime2text()]: Roundstart [ruleset.name] spent [ruleset.cost + added_threat]. [ruleset.scaling_cost ? "Scaled up [ruleset.scaled_times]/[scaled_times] times." : ""]" - if(ruleset.flags & ONLY_RULESET) - only_ruleset_executed = TRUE - if(ruleset.flags & HIGH_IMPACT_RULESET) - high_impact_ruleset_executed = TRUE - executed_rules += ruleset - return ruleset.cost + added_threat - else - stack_trace("The starting rule \"[ruleset.name]\" failed to pre_execute.") - return 0 - -/// Mainly here to facilitate delayed rulesets. All roundstart rulesets are executed with a timered callback to this proc. -/datum/game_mode/dynamic/proc/execute_roundstart_rule(sent_rule) - var/datum/dynamic_ruleset/rule = sent_rule - if(rule.execute()) - if(rule.persistent) - current_rules += rule - new_snapshot(rule) - rule.forget_startup() - return TRUE - rule.clean_up() // Refund threat, delete teams and so on. - rule.forget_startup() - executed_rules -= rule - stack_trace("The starting rule \"[rule.name]\" failed to execute.") - return FALSE - -/// An experimental proc to allow admins to call rules on the fly or have rules call other rules. -/datum/game_mode/dynamic/proc/picking_specific_rule(ruletype, forced = FALSE, ignore_cost = FALSE) - var/datum/dynamic_ruleset/midround/new_rule - if(ispath(ruletype)) - new_rule = new ruletype() // You should only use it to call midround rules though. - configure_ruleset(new_rule) // This makes sure the rule is set up properly. - else if(istype(ruletype, /datum/dynamic_ruleset)) - new_rule = ruletype - else - return FALSE - - if(!new_rule) - return FALSE - - if(!forced) - if(only_ruleset_executed) - return FALSE - // Check if a blocking ruleset has been executed. - else if(check_blocking(new_rule.blocking_rules, executed_rules)) - return FALSE - // Check if the ruleset is high impact and if a high impact ruleset has been executed - else if(new_rule.flags & HIGH_IMPACT_RULESET) - if(threat_level < GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking) - if(high_impact_ruleset_executed) - return FALSE - - var/population = GLOB.alive_player_list.len - if((new_rule.acceptable(population, threat_level) && (ignore_cost || new_rule.cost <= mid_round_budget)) || forced) - new_rule.trim_candidates() - new_rule.load_templates() - if (new_rule.ready(forced)) - if (!ignore_cost) - spend_midround_budget(new_rule.cost, threat_log, "[worldtime2text()]: Forced rule [new_rule.name]") - new_rule.pre_execute(population) - if (new_rule.execute()) // This should never fail since ready() returned 1 - if(new_rule.flags & HIGH_IMPACT_RULESET) - high_impact_ruleset_executed = TRUE - else if(new_rule.flags & ONLY_RULESET) - only_ruleset_executed = TRUE - log_dynamic("Making a call to a specific ruleset...[new_rule.name]!") - executed_rules += new_rule - if (new_rule.persistent) - current_rules += new_rule - new_rule.forget_startup() - return TRUE - else if (forced) - log_dynamic("The ruleset [new_rule.name] couldn't be executed due to lack of elligible players.") - new_rule.forget_startup() - return FALSE - -/datum/game_mode/dynamic/process() - for (var/datum/dynamic_ruleset/rule in current_rules) - if(rule.rule_process() == RULESET_STOP_PROCESSING) // If rule_process() returns 1 (RULESET_STOP_PROCESSING), stop processing. - current_rules -= rule - - try_midround_roll() - -/// Removes type from the list -/datum/game_mode/dynamic/proc/remove_from_list(list/type_list, type) - for(var/I in type_list) - if(istype(I, type)) - type_list -= I - return type_list - -/// Checks if a type in blocking_list is in rule_list. -/datum/game_mode/dynamic/proc/check_blocking(list/blocking_list, list/rule_list) - if(blocking_list.len > 0) - for(var/blocking in blocking_list) - for(var/_executed in rule_list) - var/datum/executed = _executed - if(blocking == executed.type) - log_dynamic("FAIL: check_blocking - [blocking] conflicts with [executed.type]") - return TRUE - return FALSE - -/datum/game_mode/dynamic/make_antag_chance(mob/living/carbon/human/newPlayer) - if (GLOB.dynamic_forced_extended) - return - if(EMERGENCY_ESCAPED_OR_ENDGAMED) // No more rules after the shuttle has left - return - - if (forced_latejoin_rule) - log_dynamic("Forcing specific [forced_latejoin_rule.ruletype] ruleset [forced_latejoin_rule].") - if(!handle_executing_latejoin(forced_latejoin_rule, newPlayer, forced = TRUE)) - message_admins("The forced latejoin ruleset [forced_latejoin_rule.name] couldn't be executed \ - as the most recent latejoin did not fulfill the ruleset's requirements.") - forced_latejoin_rule = null - return - - if(!forced_injection) - if(latejoin_injection_cooldown >= world.time) - return - if(!prob(latejoin_roll_chance)) - return - - var/was_forced = forced_injection - forced_injection = FALSE - var/list/possible_latejoin_rules = list() - for (var/datum/dynamic_ruleset/latejoin/rule in latejoin_rules) - if(!rule.weight) - continue - if(mid_round_budget < rule.cost) - continue - if(!rule.acceptable(GLOB.alive_player_list.len, threat_level)) - continue - possible_latejoin_rules[rule] = rule.get_weight() - - if(!length(possible_latejoin_rules)) - log_dynamic("FAIL: [newPlayer] was selected to roll for a latejoin ruleset, but there were no valid rulesets.") - return - - log_dynamic("[newPlayer] was selected to roll for a latejoin ruleset from the following list: [english_list(possible_latejoin_rules)].") - // You get one shot at becoming a latejoin antag, if it fails the next guy will try. - var/datum/dynamic_ruleset/latejoin/picked_rule = pick_ruleset(possible_latejoin_rules, max_allowed_attempts = 1) - if(isnull(picked_rule)) - log_dynamic("FAIL: No valid rulset was selected for [newPlayer]'s latejoin[was_forced ? "" : ", the next player will be checked instead"].") - return - if(was_forced) - log_dynamic("Forcing random [picked_rule.ruletype] ruleset [picked_rule].") - handle_executing_latejoin(picked_rule, newPlayer, forced = was_forced) - -/** - * This proc handles the execution of a latejoin ruleset, including removing it from latejoin rulesets if not repeatable, - * upping the injection cooldown, and starting a timer to execute the ruleset on delay. - */ -/datum/game_mode/dynamic/proc/handle_executing_latejoin(datum/dynamic_ruleset/ruleset, mob/living/carbon/human/only_candidate, forced = FALSE) - ruleset.candidates = list(only_candidate) - ruleset.trim_candidates() - ruleset.load_templates() - if (!ruleset.ready(forced)) - log_dynamic("FAIL: [only_candidate] was selected to latejoin with the [ruleset] ruleset, \ - but the ruleset failed to execute[length(ruleset.candidates) ? "":" as they were not a valid candiate"].") - return FALSE - if (!ruleset.repeatable) - latejoin_rules = remove_from_list(latejoin_rules, ruleset.type) - addtimer(CALLBACK(src, PROC_REF(execute_midround_latejoin_rule), ruleset), ruleset.delay) - - if(!forced) - var/latejoin_injection_cooldown_middle = 0.5 * (latejoin_delay_max + latejoin_delay_min) - latejoin_injection_cooldown = round(clamp(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), latejoin_delay_min, latejoin_delay_max)) + world.time - log_dynamic("A latejoin rulset triggered successfully, the next latejoin injection will happen at [latejoin_injection_cooldown] round time.") - - return TRUE - -/// Apply configurations to rule. -/datum/game_mode/dynamic/proc/configure_ruleset(datum/dynamic_ruleset/ruleset) - var/rule_conf = LAZYACCESSASSOC(configuration, ruleset.ruletype, ruleset.name) - for(var/variable in rule_conf) - if(!(variable in ruleset.vars)) - stack_trace("Invalid dynamic configuration variable [variable] in [ruleset.ruletype] [ruleset.name].") - continue - ruleset.vars[variable] = rule_conf[variable] - if(CONFIG_GET(flag/protect_roles_from_antagonist)) - ruleset.restricted_roles |= ruleset.protected_roles - if(CONFIG_GET(flag/protect_assistant_from_antagonist)) - ruleset.restricted_roles |= JOB_ASSISTANT - // SKYRAT EDIT ADDITION - for(var/datum/job/iterating_job as anything in subtypesof(/datum/job)) - if(!initial(iterating_job.antagonist_restricted)) - continue - if(initial(iterating_job.restricted_antagonists)) - var/list/restricted_antagonists = initial(iterating_job.restricted_antagonists) - if(!(ruleset.antag_flag in restricted_antagonists)) - continue - ruleset.restricted_roles |= initial(iterating_job.title) - else - ruleset.restricted_roles |= initial(iterating_job.title) - // SKYRAT EDIT END - -/// Get station traits and call for their config -/datum/game_mode/dynamic/proc/configure_station_trait_costs() - if(!CONFIG_GET(flag/dynamic_config_enabled)) - return - for(var/datum/station_trait/station_trait as anything in GLOB.dynamic_station_traits) - configure_station_trait(station_trait) - -/// Apply configuration for station trait costs -/datum/game_mode/dynamic/proc/configure_station_trait(datum/station_trait/station_trait) - var/list/station_trait_config = LAZYACCESSASSOC(configuration, "Station", station_trait.dynamic_threat_id) - var/cost = station_trait_config["cost"] - - if(isnull(cost)) //0 is valid so check for null specifically - return - - if(cost != GLOB.dynamic_station_traits[station_trait]) - log_dynamic("Config set [station_trait.dynamic_threat_id] cost from [station_trait.threat_reduction] to [cost]") - - GLOB.dynamic_station_traits[station_trait] = cost - -/// Refund threat, but no more than threat_level. -/datum/game_mode/dynamic/proc/refund_threat(regain) - mid_round_budget = min(threat_level, mid_round_budget + regain) - -/// Generate threat and increase the threat_level if it goes beyond, capped at 100 -/datum/game_mode/dynamic/proc/create_threat(gain, list/threat_log, reason) - mid_round_budget = min(100, mid_round_budget + gain) - if(mid_round_budget > threat_level) - threat_level = mid_round_budget - for(var/list/logs in threat_log) - log_threat(gain, logs, reason) - -/datum/game_mode/dynamic/proc/log_threat(threat_change, list/threat_log, reason) - var/gain_or_loss = "+" - if(threat_change < 0) - gain_or_loss = "-" - threat_log += "Threat [gain_or_loss][abs(threat_change)] - [reason]." - -/// Expend round start threat, can't fall under 0. -/datum/game_mode/dynamic/proc/spend_roundstart_budget(cost, list/threat_log, reason) - round_start_budget = max(round_start_budget - cost,0) - if (!isnull(threat_log)) - log_threat(-cost, threat_log, reason) - -/// Expend midround threat, can't fall under 0. -/datum/game_mode/dynamic/proc/spend_midround_budget(cost, list/threat_log, reason) - mid_round_budget = max(mid_round_budget - cost,0) - if (!isnull(threat_log)) - log_threat(-cost, threat_log, reason) - -#define MAXIMUM_DYN_DISTANCE 5 - -/** - * Returns the comulative distribution of threat centre and width, and a random location of -0.5 to 0.5 - * plus or minus the otherwise unattainable lower and upper percentiles. All multiplied by the maximum - * threat and then rounded to the nearest interval. - * rand() calls without arguments returns a value between 0 and 1, allowing for smaller intervals. - */ -/datum/game_mode/dynamic/proc/lorentz_to_amount(centre = 0, scale = 1.8, max_threat = 100, interval = 1) - var/location = RANDOM_DECIMAL(-MAXIMUM_DYN_DISTANCE, MAXIMUM_DYN_DISTANCE) * rand() - var/lorentz_result = LORENTZ_CUMULATIVE_DISTRIBUTION(centre, location, scale) - var/std_threat = lorentz_result * max_threat - ///Without these, the amount won't come close to hitting 0% or 100% of the max threat. - var/lower_deviation = max(std_threat * (location-centre)/MAXIMUM_DYN_DISTANCE, 0) - var/upper_deviation = max((max_threat - std_threat) * (centre-location)/MAXIMUM_DYN_DISTANCE, 0) - return clamp(round(std_threat + upper_deviation - lower_deviation, interval), 0, 100) - -#undef MAXIMUM_DYN_DISTANCE - -#undef FAKE_REPORT_CHANCE -#undef FAKE_GREENSHIFT_FORM_CHANCE -#undef PULSAR_REPORT_CHANCE -#undef REPORT_NEG_DIVERGENCE -#undef REPORT_POS_DIVERGENCE diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm deleted file mode 100644 index 7ad11367fc423e..00000000000000 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ /dev/null @@ -1,943 +0,0 @@ -/// Probability the AI going malf will be accompanied by an ion storm announcement and some ion laws. -#define MALF_ION_PROB 33 -/// The probability to replace an existing law with an ion law instead of adding a new ion law. -#define REPLACE_LAW_WITH_ION_PROB 10 - -/// Midround Rulesets -/datum/dynamic_ruleset/midround // Can be drafted once in a while during a round - ruletype = MIDROUND_RULESET - var/midround_ruleset_style - /// If the ruleset should be restricted from ghost roles. - var/restrict_ghost_roles = TRUE - /// What mob type the ruleset is restricted to. - var/required_type = /mob/living/carbon/human - var/list/living_players = list() - var/list/living_antags = list() - var/list/dead_players = list() - var/list/list_observers = list() - - /// The minimum round time before this ruleset will show up - var/minimum_round_time = 0 - /// Abstract root value - var/abstract_type = /datum/dynamic_ruleset/midround - -/datum/dynamic_ruleset/midround/forget_startup() - living_players = list() - living_antags = list() - dead_players = list() - list_observers = list() - return ..() - -/datum/dynamic_ruleset/midround/from_ghosts - weight = 0 - required_type = /mob/dead/observer - abstract_type = /datum/dynamic_ruleset/midround/from_ghosts - /// Whether the ruleset should call generate_ruleset_body or not. - var/makeBody = TRUE - /// The rule needs this many applicants to be properly executed. - var/required_applicants = 1 - -/datum/dynamic_ruleset/midround/from_ghosts/check_candidates() - var/dead_count = dead_players.len + list_observers.len - if (required_candidates <= dead_count) - return TRUE - - log_dynamic("FAIL: [src], a from_ghosts ruleset, did not have enough dead candidates: [required_candidates] needed, [dead_count] found") - - return FALSE - -/datum/dynamic_ruleset/midround/trim_candidates() - living_players = trim_list(GLOB.alive_player_list) - living_antags = trim_list(GLOB.current_living_antags) - dead_players = trim_list(GLOB.dead_player_list) - list_observers = trim_list(GLOB.current_observers_list) - -/datum/dynamic_ruleset/midround/proc/trim_list(list/to_trim = list()) - var/list/trimmed_list = to_trim.Copy() - for(var/mob/creature in trimmed_list) - if (!istype(creature, required_type)) - trimmed_list.Remove(creature) - continue - if (isnull(creature.client)) // Are they connected? - trimmed_list.Remove(creature) - continue - if (isnull(creature.mind)) - trimmed_list.Remove(creature) - continue - //SKYRAT EDIT ADDITION - if(is_banned_from(creature.client.ckey, BAN_ANTAGONIST)) - trimmed_list.Remove(creature) - continue - if(!creature.client?.prefs?.read_preference(/datum/preference/toggle/be_antag)) - trimmed_list.Remove(creature) - continue - //SKYRAT EDIT END - if(creature.client.get_remaining_days(minimum_required_age) > 0) - trimmed_list.Remove(creature) - continue - if (!((antag_preference || antag_flag) in creature.client.prefs.be_special)) - trimmed_list.Remove(creature) - continue - if (is_banned_from(creature.ckey, list(antag_flag_override || antag_flag, ROLE_SYNDICATE))) - trimmed_list.Remove(creature) - continue - if (restrict_ghost_roles && (creature.mind.assigned_role.title in GLOB.exp_specialmap[EXP_TYPE_SPECIAL])) // Are they playing a ghost role? - trimmed_list.Remove(creature) - continue - if (creature.mind.assigned_role.title in restricted_roles) // Does their job allow it? - trimmed_list.Remove(creature) - continue - if (length(exclusive_roles) && !(creature.mind.assigned_role.title in exclusive_roles)) // Is the rule exclusive to their job? - trimmed_list.Remove(creature) - continue - if(HAS_TRAIT(creature, TRAIT_MIND_TEMPORARILY_GONE)) // are they out of body? - trimmed_list.Remove(creature) - continue - if(HAS_TRAIT(creature, TRAIT_TEMPORARY_BODY)) // are they an avatar? - trimmed_list.Remove(creature) - continue - return trimmed_list - -// You can then for example prompt dead players in execute() to join as strike teams or whatever -// Or autotator someone - -// IMPORTANT, since /datum/dynamic_ruleset/midround may accept candidates from both living, dead, and even antag players -// subtype your midround with /from_ghosts or /from_living to get candidate checking. Or check yourself by subtyping from neither -/datum/dynamic_ruleset/midround/ready(forced = FALSE) - if (forced) - return TRUE - - var/job_check = 0 - if (enemy_roles.len > 0) - for (var/mob/M in GLOB.alive_player_list) - if (M.stat == DEAD || !M.client) - continue // Dead/disconnected players cannot count as opponents - if (M.mind && (M.mind.assigned_role.title in enemy_roles) && (!(M in candidates) || (M.mind.assigned_role.title in restricted_roles))) - job_check++ // Checking for "enemies" (such as sec officers). To be counters, they must either not be candidates to that rule, or have a job that restricts them from it - - var/threat = round(mode.threat_level/10) - var/ruleset_forced = (GLOB.dynamic_forced_rulesets[type] || RULESET_NOT_FORCED) == RULESET_FORCE_ENABLED - if (!ruleset_forced && job_check < required_enemies[threat]) - log_dynamic("FAIL: [src] is not ready, because there are not enough enemies: [required_enemies[threat]] needed, [job_check] found") - return FALSE - - return TRUE - -/datum/dynamic_ruleset/midround/from_ghosts/execute() - var/list/possible_candidates = list() - possible_candidates.Add(dead_players) - possible_candidates.Add(list_observers) - send_applications(possible_candidates) - if(assigned.len > 0) - return TRUE - else - return FALSE - -/// This sends a poll to ghosts if they want to be a ghost spawn from a ruleset. -/datum/dynamic_ruleset/midround/from_ghosts/proc/send_applications(list/possible_volunteers = list()) - if (possible_volunteers.len <= 0) // This shouldn't happen, as ready() should return FALSE if there is not a single valid candidate - message_admins("Possible volunteers was 0. This shouldn't appear, because of ready(), unless you forced it!") - 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) - - if(!candidates || candidates.len <= 0) - mode.log_dynamic_and_announce("The ruleset [name] received no applications.") - mode.executed_rules -= src - attempt_replacement() - return - - mode.log_dynamic_and_announce("[candidates.len] players volunteered for [name].") - review_applications() - -/// Here is where you can check if your ghost applicants are valid for the ruleset. -/// Called by send_applications(). -/datum/dynamic_ruleset/midround/from_ghosts/proc/review_applications() - if(candidates.len < required_applicants) - mode.executed_rules -= src - return - for (var/i = 1, i <= required_candidates, i++) - if(candidates.len <= 0) - break - var/mob/applicant = pick(candidates) - candidates -= applicant - if(!isobserver(applicant)) - if(applicant.stat == DEAD) // Not an observer? If they're dead, make them one. - applicant = applicant.ghostize(FALSE) - else // Not dead? Disregard them, pick a new applicant - i-- - continue - if(!applicant) - i-- - continue - assigned += applicant - finish_applications() - -/// Here the accepted applications get generated bodies and their setup is finished. -/// Called by review_applications() -/datum/dynamic_ruleset/midround/from_ghosts/proc/finish_applications() - var/i = 0 - for(var/mob/applicant as anything in assigned) - i++ - var/mob/new_character = applicant - if(makeBody) - new_character = generate_ruleset_body(applicant) - finish_setup(new_character, i) - notify_ghosts("[applicant.name] has been picked for the ruleset [name]!", source = new_character, action = NOTIFY_ORBIT, header="Something Interesting!") - -/datum/dynamic_ruleset/midround/from_ghosts/proc/generate_ruleset_body(mob/applicant) - var/mob/living/carbon/human/new_character = make_body(applicant) - new_character.dna.remove_all_mutations() - return new_character - -/datum/dynamic_ruleset/midround/from_ghosts/proc/finish_setup(mob/new_character, index) - var/datum/antagonist/new_role = new antag_datum() - setup_role(new_role) - new_character.mind.add_antag_datum(new_role) - new_character.mind.special_role = antag_flag - -/datum/dynamic_ruleset/midround/from_ghosts/proc/setup_role(datum/antagonist/new_role) - return - -/// Fired when there are no valid candidates. Will spawn a sleeper agent or latejoin traitor. -/datum/dynamic_ruleset/midround/from_ghosts/proc/attempt_replacement() - var/datum/dynamic_ruleset/midround/from_living/autotraitor/sleeper_agent = new - - mode.configure_ruleset(sleeper_agent) - - if (!mode.picking_specific_rule(sleeper_agent)) - return - - mode.picking_specific_rule(/datum/dynamic_ruleset/latejoin/infiltrator) - return - -///subtype to handle checking players -/datum/dynamic_ruleset/midround/from_living - weight = 0 - abstract_type = /datum/dynamic_ruleset/midround/from_living - -/datum/dynamic_ruleset/midround/from_living/ready(forced) - if(!check_candidates()) - return FALSE - return ..() - - -/// Midround Traitor Ruleset (From Living) -/datum/dynamic_ruleset/midround/from_living/autotraitor - name = "Syndicate Sleeper Agent" - midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT - antag_datum = /datum/antagonist/traitor/infiltrator/sleeper_agent - antag_flag = ROLE_SLEEPER_AGENT - antag_flag_override = ROLE_TRAITOR - protected_roles = list( - JOB_CAPTAIN, - JOB_DETECTIVE, - JOB_HEAD_OF_PERSONNEL, - JOB_HEAD_OF_SECURITY, - JOB_PRISONER, - JOB_SECURITY_OFFICER, - JOB_WARDEN, - ) - restricted_roles = list( - JOB_AI, - JOB_CYBORG, - ROLE_POSITRONIC_BRAIN, - ) - required_candidates = 1 - weight = 35 - cost = 3 - requirements = list(3,3,3,3,3,3,3,3,3,3) - repeatable = TRUE - -/datum/dynamic_ruleset/midround/from_living/autotraitor/trim_candidates() - ..() - candidates = living_players - for(var/mob/living/player in candidates) - if(issilicon(player)) // Your assigned role doesn't change when you are turned into a silicon. - candidates -= player - else if(is_centcom_level(player.z)) - candidates -= player // We don't autotator people in CentCom - else if(player.mind && (player.mind.special_role || player.mind.antag_datums?.len > 0)) - candidates -= player // We don't autotator people with roles already - -/datum/dynamic_ruleset/midround/from_living/autotraitor/execute() - var/mob/M = pick(candidates) - assigned += M - candidates -= M - var/datum/antagonist/traitor/infiltrator/sleeper_agent/newTraitor = new - M.mind.add_antag_datum(newTraitor) - message_admins("[ADMIN_LOOKUPFLW(M)] was selected by the [name] ruleset and has been made into a midround traitor.") - log_dynamic("[key_name(M)] was selected by the [name] ruleset and has been made into a midround traitor.") - return TRUE - - -////////////////////////////////////////////// -// // -// Malfunctioning AI // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/midround/malf - name = "Malfunctioning AI" - midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY - antag_datum = /datum/antagonist/malf_ai - antag_flag = ROLE_MALF_MIDROUND - antag_flag_override = ROLE_MALF - enemy_roles = list( - JOB_CHEMIST, - JOB_CHIEF_ENGINEER, - JOB_HEAD_OF_SECURITY, - JOB_RESEARCH_DIRECTOR, - JOB_SCIENTIST, - JOB_SECURITY_OFFICER, - JOB_WARDEN, - ) - exclusive_roles = list(JOB_AI) - required_enemies = list(4,4,4,4,4,4,2,2,2,0) - required_candidates = 1 - minimum_players = 25 - weight = 2 - cost = 10 - required_type = /mob/living/silicon/ai - blocking_rules = list(/datum/dynamic_ruleset/roundstart/malf_ai) - -/datum/dynamic_ruleset/midround/malf/trim_candidates() - ..() - candidates = living_players - for(var/mob/living/player in candidates) - if(!isAI(player)) - candidates -= player - continue - - if(is_centcom_level(player.z)) - candidates -= player - continue - - if(player.mind && (player.mind.special_role || player.mind.antag_datums?.len > 0)) - candidates -= player - -/datum/dynamic_ruleset/midround/malf/execute() - if(!candidates || !candidates.len) - return FALSE - var/mob/living/silicon/ai/new_malf_ai = pick_n_take(candidates) - assigned += new_malf_ai.mind - var/datum/antagonist/malf_ai/malf_antag_datum = new - new_malf_ai.mind.special_role = antag_flag - new_malf_ai.mind.add_antag_datum(malf_antag_datum) - if(prob(MALF_ION_PROB)) - priority_announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", ANNOUNCER_IONSTORM) - if(prob(REPLACE_LAW_WITH_ION_PROB)) - new_malf_ai.replace_random_law(generate_ion_law(), list(LAW_INHERENT, LAW_SUPPLIED, LAW_ION), LAW_ION) - else - new_malf_ai.add_ion_law(generate_ion_law()) - return TRUE - -/// Midround Wizard Ruleset (From Ghosts) -/datum/dynamic_ruleset/midround/from_ghosts/wizard - name = "Wizard" - midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY - antag_datum = /datum/antagonist/wizard - antag_flag = ROLE_WIZARD_MIDROUND - antag_flag_override = ROLE_WIZARD - required_enemies = list(2,2,1,1,1,1,1,0,0,0) - required_candidates = 1 - weight = 1 - cost = 10 - requirements = REQUIREMENTS_VERY_HIGH_THREAT_NEEDED - flags = HIGH_IMPACT_RULESET - ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_WIZARDDEN) - -/datum/dynamic_ruleset/midround/from_ghosts/wizard/ready(forced = FALSE) - if(!check_candidates()) - return FALSE - if(!length(GLOB.wizardstart)) - log_admin("Cannot accept Wizard ruleset. Couldn't find any wizard spawn points.") - message_admins("Cannot accept Wizard ruleset. Couldn't find any wizard spawn points.") - return FALSE - return ..() - -/datum/dynamic_ruleset/midround/from_ghosts/wizard/finish_setup(mob/new_character, index) - ..() - new_character.forceMove(pick(GLOB.wizardstart)) - -/// Midround Nuclear Operatives Ruleset (From Ghosts) -/datum/dynamic_ruleset/midround/from_ghosts/nuclear - name = "Nuclear Assault" - midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY - antag_flag = ROLE_OPERATIVE_MIDROUND - antag_flag_override = ROLE_OPERATIVE - antag_datum = /datum/antagonist/nukeop - enemy_roles = list( - JOB_AI, - JOB_CYBORG, - JOB_CAPTAIN, - JOB_DETECTIVE, - JOB_HEAD_OF_SECURITY, - JOB_SECURITY_OFFICER, - JOB_WARDEN, - ) - required_enemies = list(3,3,3,3,3,2,1,1,0,0) - required_candidates = 5 - weight = 5 - cost = 7 - minimum_round_time = 70 MINUTES - requirements = REQUIREMENTS_VERY_HIGH_THREAT_NEEDED - ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_NUKIEBASE) - flags = HIGH_IMPACT_RULESET - - var/list/operative_cap = list(2,2,3,3,4,5,5,5,5,5) - -/datum/dynamic_ruleset/midround/from_ghosts/nuclear/acceptable(population=0, threat_level=0) - if (locate(/datum/dynamic_ruleset/roundstart/nuclear) in mode.executed_rules) - return FALSE // Unavailable if nuke ops were already sent at roundstart - indice_pop = min(operative_cap.len, round(living_players.len/5)+1) - required_candidates = operative_cap[indice_pop] - return ..() - -/datum/dynamic_ruleset/midround/from_ghosts/nuclear/ready(forced = FALSE) - if (!check_candidates()) - return FALSE - return ..() - -/datum/dynamic_ruleset/midround/from_ghosts/nuclear/finish_applications() - var/mob/leader = get_most_experienced(assigned, ROLE_NUCLEAR_OPERATIVE) - if(leader) - assigned.Remove(leader) - assigned.Insert(1, leader) - return ..() - -/datum/dynamic_ruleset/midround/from_ghosts/nuclear/finish_setup(mob/new_character, index) - new_character.mind.set_assigned_role(SSjob.GetJobType(/datum/job/nuclear_operative)) - new_character.mind.special_role = ROLE_NUCLEAR_OPERATIVE - if(index == 1) - var/datum/antagonist/nukeop/leader/leader_antag_datum = new() - new_character.mind.add_antag_datum(leader_antag_datum) - return - return ..() - -/// Midround Blob Ruleset (From Ghosts) -/datum/dynamic_ruleset/midround/from_ghosts/blob - name = "Blob" - midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY - antag_datum = /datum/antagonist/blob - antag_flag = ROLE_BLOB - required_enemies = list(2,2,1,1,1,1,1,0,0,0) - required_candidates = 1 - minimum_round_time = 35 MINUTES - weight = 3 - cost = 8 - minimum_players = 25 - repeatable = TRUE - -/datum/dynamic_ruleset/midround/from_ghosts/blob/generate_ruleset_body(mob/applicant) - var/body = applicant.become_overmind() - return body - -/// Midround Blob Infection Ruleset (From Living) -/datum/dynamic_ruleset/midround/from_living/blob_infection - name = "Blob Infection" - midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY - antag_datum = /datum/antagonist/blob/infection - antag_flag = ROLE_BLOB_INFECTION - antag_flag_override = ROLE_BLOB - protected_roles = list( - JOB_CAPTAIN, - JOB_DETECTIVE, - JOB_HEAD_OF_SECURITY, - JOB_PRISONER, - JOB_SECURITY_OFFICER, - JOB_WARDEN, - ) - restricted_roles = list( - JOB_AI, - JOB_CYBORG, - ROLE_POSITRONIC_BRAIN, - ) - required_enemies = list(2,2,1,1,1,1,1,0,0,0) - required_candidates = 1 - minimum_round_time = 35 MINUTES - weight = 3 - cost = 10 - minimum_players = 25 - repeatable = TRUE - -/datum/dynamic_ruleset/midround/from_living/blob_infection/trim_candidates() - ..() - candidates = living_players - for(var/mob/living/player as anything in candidates) - var/turf/player_turf = get_turf(player) - if(!player_turf || !is_station_level(player_turf.z)) - candidates -= player - continue - - if(player.mind && (player.mind.special_role || length(player.mind.antag_datums) > 0)) - candidates -= player - -/datum/dynamic_ruleset/midround/from_living/blob_infection/execute() - if(!candidates || !candidates.len) - return FALSE - var/mob/living/carbon/human/blob_antag = pick_n_take(candidates) - assigned += blob_antag.mind - blob_antag.mind.special_role = antag_flag - return ..() - -/// Midround Xenomorph Ruleset (From Ghosts) -/datum/dynamic_ruleset/midround/from_ghosts/xenomorph - name = "Alien Infestation" - midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY - antag_datum = /datum/antagonist/xeno - antag_flag = ROLE_ALIEN - required_enemies = list(2,2,1,1,1,1,1,0,0,0) - required_candidates = 1 - minimum_round_time = 40 MINUTES - weight = 5 - cost = 10 - minimum_players = 25 - repeatable = TRUE - var/list/vents = list() - -/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/forget_startup() - vents = list() - return ..() - -/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/execute() - // 50% chance of being incremented by one - required_candidates += prob(50) - var/list/vent_pumps = SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/atmospherics/components/unary/vent_pump) - for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent as anything in vent_pumps) - if(QDELETED(temp_vent)) - continue - if(is_station_level(temp_vent.loc.z) && !temp_vent.welded) - var/datum/pipeline/temp_vent_parent = temp_vent.parents[1] - if(!temp_vent_parent) - continue // No parent vent - // Stops Aliens getting stuck in small networks. - // See: Security, Virology - if(temp_vent_parent.other_atmos_machines.len > 20) - vents += temp_vent - if(!vents.len) - return FALSE - . = ..() - -/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/generate_ruleset_body(mob/applicant) - var/obj/vent = pick_n_take(vents) - var/mob/living/carbon/alien/larva/new_xeno = new(vent.loc) - new_xeno.key = applicant.key - new_xeno.move_into_vent(vent) - message_admins("[ADMIN_LOOKUPFLW(new_xeno)] has been made into an alien by the midround ruleset.") - log_dynamic("[key_name(new_xeno)] was spawned as an alien by the midround ruleset.") - return new_xeno - -/// Midround Nightmare Ruleset (From Ghosts) -/datum/dynamic_ruleset/midround/from_ghosts/nightmare - name = "Nightmare" - midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT - antag_datum = /datum/antagonist/nightmare - antag_flag = ROLE_NIGHTMARE - antag_flag_override = ROLE_ALIEN - required_enemies = list(2,2,1,1,1,1,1,0,0,0) - required_candidates = 1 - weight = 3 - cost = 5 - minimum_players = 15 - repeatable = TRUE - -/datum/dynamic_ruleset/midround/from_ghosts/nightmare/acceptable(population = 0, threat_level = 0) - var/turf/spawn_loc = find_maintenance_spawn(atmos_sensitive = TRUE, require_darkness = TRUE) //Checks if there's a single safe, dark tile on station. - if(!spawn_loc) - return FALSE - return ..() - -/datum/dynamic_ruleset/midround/from_ghosts/nightmare/generate_ruleset_body(mob/applicant) - var/datum/mind/player_mind = new /datum/mind(applicant.key) - player_mind.active = TRUE - - var/mob/living/carbon/human/new_nightmare = new (find_maintenance_spawn(atmos_sensitive = TRUE, require_darkness = TRUE)) - player_mind.transfer_to(new_nightmare) - player_mind.set_assigned_role(SSjob.GetJobType(/datum/job/nightmare)) - player_mind.special_role = ROLE_NIGHTMARE - player_mind.add_antag_datum(/datum/antagonist/nightmare) - new_nightmare.set_species(/datum/species/shadow/nightmare) - - playsound(new_nightmare, 'sound/magic/ethereal_exit.ogg', 50, TRUE, -1) - message_admins("[ADMIN_LOOKUPFLW(new_nightmare)] has been made into a Nightmare by the midround ruleset.") - log_dynamic("[key_name(new_nightmare)] was spawned as a Nightmare by the midround ruleset.") - return new_nightmare - -/// Midround Space Dragon Ruleset (From Ghosts) -/datum/dynamic_ruleset/midround/from_ghosts/space_dragon - name = "Space Dragon" - midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY - antag_datum = /datum/antagonist/space_dragon - antag_flag = ROLE_SPACE_DRAGON - antag_flag_override = ROLE_SPACE_DRAGON - required_enemies = list(2,2,1,1,1,1,1,0,0,0) - required_candidates = 1 - weight = 4 - cost = 7 - minimum_players = 25 - repeatable = TRUE - var/list/spawn_locs = list() - -/datum/dynamic_ruleset/midround/from_ghosts/space_dragon/forget_startup() - spawn_locs = list() - return ..() - -/datum/dynamic_ruleset/midround/from_ghosts/space_dragon/execute() - for(var/obj/effect/landmark/carpspawn/C in GLOB.landmarks_list) - spawn_locs += (C.loc) - if(!spawn_locs.len) - message_admins("No valid spawn locations found, aborting...") - return MAP_ERROR - . = ..() - -/datum/dynamic_ruleset/midround/from_ghosts/space_dragon/generate_ruleset_body(mob/applicant) - var/datum/mind/player_mind = new /datum/mind(applicant.key) - player_mind.active = TRUE - - var/mob/living/basic/space_dragon/S = new (pick(spawn_locs)) - player_mind.transfer_to(S) - player_mind.add_antag_datum(/datum/antagonist/space_dragon) - - playsound(S, 'sound/magic/ethereal_exit.ogg', 50, TRUE, -1) - message_admins("[ADMIN_LOOKUPFLW(S)] has been made into a Space Dragon by the midround ruleset.") - log_dynamic("[key_name(S)] was spawned as a Space Dragon by the midround ruleset.") - priority_announce("A large organic energy flux has been recorded near of [station_name()], please stand-by.", "Lifesign Alert") - return S - -/datum/dynamic_ruleset/midround/from_ghosts/abductors - name = "Abductors" - midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT - antag_datum = /datum/antagonist/abductor - antag_flag = ROLE_ABDUCTOR - required_enemies = list(2,2,1,1,1,1,1,0,0,0) - required_candidates = 2 - required_applicants = 2 - weight = 4 - cost = 7 - minimum_players = 25 - repeatable = TRUE - ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_ABDUCTOR_SHIPS) - - var/datum/team/abductor_team/new_team - -/datum/dynamic_ruleset/midround/from_ghosts/abductors/forget_startup() - new_team = null - return ..() - -/datum/dynamic_ruleset/midround/from_ghosts/abductors/ready(forced = FALSE) - if (required_candidates > (dead_players.len + list_observers.len)) - return FALSE - return ..() - -/datum/dynamic_ruleset/midround/from_ghosts/abductors/finish_setup(mob/new_character, index) - if (index == 1) // Our first guy is the scientist. We also initialize the team here as well since this should only happen once per pair of abductors. - new_team = new - if(new_team.team_number > ABDUCTOR_MAX_TEAMS) - return MAP_ERROR - var/datum/antagonist/abductor/scientist/new_role = new - new_character.mind.add_antag_datum(new_role, new_team) - else // Our second guy is the agent, team is already created, don't need to make another one. - var/datum/antagonist/abductor/agent/new_role = new - new_character.mind.add_antag_datum(new_role, new_team) - -/// Midround Space Ninja Ruleset (From Ghosts) -/datum/dynamic_ruleset/midround/from_ghosts/space_ninja - name = "Space Ninja" - midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY - antag_datum = /datum/antagonist/ninja - antag_flag = ROLE_NINJA - required_enemies = list(2,2,1,1,1,1,1,0,0,0) - required_candidates = 1 - weight = 4 - cost = 8 - minimum_players = 30 - repeatable = TRUE - ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_NINJA_HOLDING_FACILITY) // I mean, no one uses the nets anymore but whateva - - var/list/spawn_locs = list() - -/datum/dynamic_ruleset/midround/from_ghosts/space_ninja/forget_startup() - spawn_locs = list() - return ..() - -/datum/dynamic_ruleset/midround/from_ghosts/space_ninja/execute() - for(var/obj/effect/landmark/carpspawn/carp_spawn in GLOB.landmarks_list) - if(!isturf(carp_spawn.loc)) - stack_trace("Carp spawn found not on a turf: [carp_spawn.type] on [isnull(carp_spawn.loc) ? "null" : carp_spawn.loc.type]") - continue - spawn_locs += carp_spawn.loc - if(!spawn_locs.len) - message_admins("No valid spawn locations found, aborting...") - return MAP_ERROR - return ..() - -/datum/dynamic_ruleset/midround/from_ghosts/space_ninja/generate_ruleset_body(mob/applicant) - var/mob/living/carbon/human/ninja = create_space_ninja(pick(spawn_locs)) - ninja.key = applicant.key - ninja.mind.add_antag_datum(/datum/antagonist/ninja) - - message_admins("[ADMIN_LOOKUPFLW(ninja)] has been made into a Space Ninja by the midround ruleset.") - log_dynamic("[key_name(ninja)] was spawned as a Space Ninja by the midround ruleset.") - return ninja - -/// Midround Spiders Ruleset (From Ghosts) -/datum/dynamic_ruleset/midround/spiders - name = "Spiders" - midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY - antag_flag = ROLE_SPIDER - required_type = /mob/dead/observer - required_enemies = list(2,2,1,1,1,1,1,0,0,0) - required_candidates = 0 - weight = 3 - cost = 8 - minimum_players = 27 - repeatable = TRUE - var/spawncount = 2 - -/datum/dynamic_ruleset/midround/spiders/execute() - create_midwife_eggs(spawncount) - return ..() - -/// Midround Revenant Ruleset (From Ghosts) -/datum/dynamic_ruleset/midround/from_ghosts/revenant - name = "Revenant" - midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT - antag_datum = /datum/antagonist/revenant - antag_flag = ROLE_REVENANT - required_enemies = list(2,2,1,1,1,1,1,0,0,0) - required_candidates = 1 - weight = 4 - cost = 5 - minimum_players = 15 - repeatable = TRUE - var/dead_mobs_required = 20 - var/need_extra_spawns_value = 15 - var/list/spawn_locs = list() - -/datum/dynamic_ruleset/midround/from_ghosts/revenant/forget_startup() - spawn_locs = list() - return ..() - -/datum/dynamic_ruleset/midround/from_ghosts/revenant/acceptable(population=0, threat_level=0) - if(GLOB.dead_mob_list.len < dead_mobs_required) - return FALSE - return ..() - -/datum/dynamic_ruleset/midround/from_ghosts/revenant/execute() - for(var/mob/living/corpse in GLOB.dead_mob_list) //look for any dead bodies - var/turf/corpse_turf = get_turf(corpse) - if(corpse_turf && is_station_level(corpse_turf.z)) - spawn_locs += corpse_turf - if(!spawn_locs.len || spawn_locs.len < need_extra_spawns_value) //look for any morgue trays, crematoriums, ect if there weren't alot of dead bodies on the station to pick from - for(var/obj/structure/bodycontainer/corpse_container in GLOB.bodycontainers) - var/turf/container_turf = get_turf(corpse_container) - if(container_turf && is_station_level(container_turf.z)) - spawn_locs += container_turf - if(!spawn_locs.len) //If we can't find any valid spawnpoints, try the carp spawns - for(var/obj/effect/landmark/carpspawn/carp_spawnpoint in GLOB.landmarks_list) - if(isturf(carp_spawnpoint.loc)) - spawn_locs += carp_spawnpoint.loc - if(!spawn_locs.len) //If we can't find THAT, then just give up and cry - return FALSE - . = ..() - -/datum/dynamic_ruleset/midround/from_ghosts/revenant/generate_ruleset_body(mob/applicant) - var/mob/living/basic/revenant/revenant = new(pick(spawn_locs)) - revenant.key = applicant.key - message_admins("[ADMIN_LOOKUPFLW(revenant)] has been made into a revenant by the midround ruleset.") - log_game("[key_name(revenant)] was spawned as a revenant by the midround ruleset.") - return revenant - -/// Midround Sentient Disease Ruleset (From Ghosts) -/datum/dynamic_ruleset/midround/from_ghosts/sentient_disease - name = "Sentient Disease" - midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY - antag_datum = /datum/antagonist/disease - antag_flag = ROLE_SENTIENT_DISEASE - required_candidates = 1 - minimum_players = 25 - weight = 4 - cost = 8 - repeatable = TRUE - -/datum/dynamic_ruleset/midround/from_ghosts/sentient_disease/generate_ruleset_body(mob/applicant) - var/mob/camera/disease/virus = new /mob/camera/disease(SSmapping.get_station_center()) - virus.key = applicant.key - INVOKE_ASYNC(virus, TYPE_PROC_REF(/mob/camera/disease, pick_name)) - message_admins("[ADMIN_LOOKUPFLW(virus)] has been made into a sentient disease by the midround ruleset.") - log_game("[key_name(virus)] was spawned as a sentient disease by the midround ruleset.") - return virus - -/// Midround Space Pirates Ruleset (From Ghosts) -/datum/dynamic_ruleset/midround/pirates - name = "Space Pirates" - midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT - antag_flag = "Space Pirates" - required_type = /mob/dead/observer - required_enemies = list(2,2,1,1,1,1,1,0,0,0) - required_candidates = 0 - weight = 3 - cost = 8 - minimum_players = 20 - repeatable = TRUE - -/datum/dynamic_ruleset/midround/pirates/acceptable(population=0, threat_level=0) - if (SSmapping.is_planetary() || GLOB.light_pirate_gangs.len == 0) - return FALSE - return ..() - -/datum/dynamic_ruleset/midround/pirates/execute() - send_pirate_threat(GLOB.light_pirate_gangs) - return ..() - -/// Dangerous Space Pirates ruleset -/datum/dynamic_ruleset/midround/dangerous_pirates - name = "Dangerous Space Pirates" - midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY - antag_flag = "Space Pirates" - required_type = /mob/dead/observer - required_enemies = list(2,2,1,1,1,1,1,0,0,0) - required_candidates = 0 - weight = 3 - cost = 8 - minimum_players = 25 - repeatable = TRUE - -/datum/dynamic_ruleset/midround/dangerous_pirates/acceptable(population=0, threat_level=0) - if (SSmapping.is_planetary() || GLOB.heavy_pirate_gangs.len == 0) - return FALSE - return ..() - -/datum/dynamic_ruleset/midround/dangerous_pirates/execute() - send_pirate_threat(GLOB.heavy_pirate_gangs) - return ..() - -/// Midround Obsessed Ruleset (From Living) -/datum/dynamic_ruleset/midround/from_living/obsessed - name = "Obsessed" - midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT - antag_datum = /datum/antagonist/obsessed - antag_flag = ROLE_OBSESSED - restricted_roles = list( - JOB_AI, - JOB_CYBORG, - ROLE_POSITRONIC_BRAIN, - ) - required_enemies = list(2,2,1,1,1,1,1,0,0,0) - required_candidates = 1 - weight = 4 - cost = 3 // Doesn't have the same impact on rounds as revenants, dragons, sentient disease (10) or syndicate infiltrators (5). - repeatable = TRUE - -/datum/dynamic_ruleset/midround/from_living/obsessed/trim_candidates() - ..() - candidates = living_players - for(var/mob/living/carbon/human/candidate in candidates) - if( \ - !candidate.get_organ_by_type(/obj/item/organ/internal/brain) \ - || candidate.mind.has_antag_datum(/datum/antagonist/obsessed) \ - || candidate.stat == DEAD \ - || !(ROLE_OBSESSED in candidate.client?.prefs?.be_special) \ - || !candidate.mind.assigned_role \ - ) - candidates -= candidate - -/datum/dynamic_ruleset/midround/from_living/obsessed/execute() - var/mob/living/carbon/human/obsessed = pick_n_take(candidates) - obsessed.gain_trauma(/datum/brain_trauma/special/obsessed) - message_admins("[ADMIN_LOOKUPFLW(obsessed)] has been made Obsessed by the midround ruleset.") - log_game("[key_name(obsessed)] was made Obsessed by the midround ruleset.") - return TRUE - -/// Midround Space Changeling Ruleset (From Ghosts) -/datum/dynamic_ruleset/midround/from_ghosts/changeling_midround - name = "Space Changeling" - midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT - antag_datum = /datum/antagonist/changeling/space - antag_flag = ROLE_CHANGELING_MIDROUND - antag_flag_override = ROLE_CHANGELING - required_type = /mob/dead/observer - required_enemies = list(2,2,1,1,1,1,1,0,0,0) - required_candidates = 1 - weight = 3 - cost = 7 - minimum_players = 15 - repeatable = TRUE - -/datum/dynamic_ruleset/midround/from_ghosts/changeling_midround/generate_ruleset_body(mob/applicant) - var/body = generate_changeling_meteor(applicant) - message_admins("[ADMIN_LOOKUPFLW(body)] has been made into a space changeling by the midround ruleset.") - log_dynamic("[key_name(body)] was spawned as a space changeling by the midround ruleset.") - return body - -/// Midround Paradox Clone Ruleset (From Ghosts) -/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone - name = "Paradox Clone" - midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT - antag_datum = /datum/antagonist/paradox_clone - antag_flag = ROLE_PARADOX_CLONE - enemy_roles = list( - JOB_CAPTAIN, - JOB_DETECTIVE, - JOB_HEAD_OF_SECURITY, - JOB_SECURITY_OFFICER, - JOB_WARDEN, - ) - required_enemies = list(2, 2, 1, 1, 1, 1, 1, 0, 0, 0) - required_candidates = 1 - weight = 4 - cost = 3 - repeatable = TRUE - var/list/possible_spawns = list() ///places the antag can spawn - -/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/forget_startup() - possible_spawns = list() - return ..() - -/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/execute() - possible_spawns += find_maintenance_spawn(atmos_sensitive = TRUE, require_darkness = FALSE) - if(!possible_spawns.len) - return MAP_ERROR - return ..() - -/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/generate_ruleset_body(mob/applicant) - var/datum/mind/player_mind = new /datum/mind(applicant.key) - player_mind.active = TRUE - - var/mob/living/carbon/human/clone_victim = find_original() - var/mob/living/carbon/human/clone = clone_victim.make_full_human_copy(pick(possible_spawns)) - player_mind.transfer_to(clone) - - var/datum/antagonist/paradox_clone/new_datum = player_mind.add_antag_datum(/datum/antagonist/paradox_clone) - new_datum.original_ref = WEAKREF(clone_victim.mind) - new_datum.setup_clone() - - playsound(clone, 'sound/weapons/zapbang.ogg', 30, TRUE) - new /obj/item/storage/toolbox/mechanical(clone.loc) //so they dont get stuck in maints - - message_admins("[ADMIN_LOOKUPFLW(clone)] has been made into a Paradox Clone by the midround ruleset.") - clone.log_message("was spawned as a Paradox Clone of [key_name(clone)] by the midround ruleset.", LOG_GAME) - - return clone - -/** - * Trims through GLOB.player_list and finds a target - * Returns a single human victim, if none is possible then returns null. - */ -/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/proc/find_original() - var/list/possible_targets = list() - - for(var/mob/living/carbon/human/player in GLOB.player_list) - if(!player.client || !player.mind || player.stat) - continue - if(!(player.mind.assigned_role.job_flags & JOB_CREW_MEMBER)) - continue - possible_targets += player - - if(possible_targets.len) - return pick(possible_targets) - return FALSE - -#undef MALF_ION_PROB -#undef REPLACE_LAW_WITH_ION_PROB diff --git a/code/game/gamemodes/dynamic/dynamic_simulations.dm b/code/game/gamemodes/dynamic/dynamic_simulations.dm deleted file mode 100644 index 63da54becee8d5..00000000000000 --- a/code/game/gamemodes/dynamic/dynamic_simulations.dm +++ /dev/null @@ -1,122 +0,0 @@ -#ifdef TESTING -/datum/dynamic_simulation - var/datum/game_mode/dynamic/gamemode - var/datum/dynamic_simulation_config/config - var/list/mock_candidates = list() - -/datum/dynamic_simulation/proc/initialize_gamemode(forced_threat) - gamemode = new - - if (forced_threat) - gamemode.create_threat(forced_threat) - else - gamemode.generate_threat() - - gamemode.generate_budgets() - gamemode.set_cooldowns() - -/datum/dynamic_simulation/proc/create_candidates(players) - GLOB.new_player_list.Cut() - - for (var/_ in 1 to players) - var/mob/dead/new_player/mock_new_player = new - mock_new_player.ready = PLAYER_READY_TO_PLAY - - var/datum/mind/mock_mind = new - mock_new_player.mind = mock_mind - - var/datum/client_interface/mock_client = new - - var/datum/preferences/prefs = new - var/list/be_special = list() - for (var/special_role in GLOB.special_roles) - be_special += special_role - - prefs.be_special = be_special - mock_client.prefs = prefs - - mock_new_player.mock_client = mock_client - - mock_candidates += mock_new_player - -/datum/dynamic_simulation/proc/simulate(datum/dynamic_simulation_config/config) - src.config = config - - initialize_gamemode(config.forced_threat_level) - create_candidates(config.roundstart_players) - gamemode.pre_setup() - - var/total_antags = 0 - for (var/_ruleset in gamemode.executed_rules) - var/datum/dynamic_ruleset/ruleset = _ruleset - total_antags += ruleset.assigned.len - - return list( - "roundstart_players" = config.roundstart_players, - "threat_level" = gamemode.threat_level, - "snapshot" = list( - "antag_percent" = total_antags / config.roundstart_players, - "remaining_threat" = gamemode.mid_round_budget, - "rulesets" = gamemode.executed_rules.Copy(), - ), - ) - -/datum/dynamic_simulation_config - /// How many players round start should there be? - var/roundstart_players - - /// Optional, force this threat level instead of picking randomly through the lorentz distribution - var/forced_threat_level - -/client/proc/run_dynamic_simulations() - set name = "Run Dynamic Simulations" - set category = "Debug" - - var/simulations = input(usr, "Enter number of simulations") as num - var/roundstart_players = input(usr, "Enter number of round start players") as num - var/forced_threat_level = input(usr, "Enter forced threat level, if you want one") as num | null - - SSticker.mode = new /datum/game_mode/dynamic - message_admins("Running dynamic simulations...") - - var/list/outputs = list() - - var/datum/dynamic_simulation_config/dynamic_config = new - - if (roundstart_players) - dynamic_config.roundstart_players = roundstart_players - - if (forced_threat_level) - dynamic_config.forced_threat_level = forced_threat_level - - for (var/count in 1 to simulations) - var/datum/dynamic_simulation/simulator = new - var/output = simulator.simulate(dynamic_config) - outputs += list(output) - - if (CHECK_TICK) - log_world("[count]/[simulations]") - - message_admins("Writing file...") - WRITE_FILE(file("[GLOB.log_directory]/dynamic_simulations.json"), json_encode(outputs)) - message_admins("Writing complete.") - -/proc/export_dynamic_json_of(ruleset_list) - var/list/export = list() - - for (var/_ruleset in ruleset_list) - var/datum/dynamic_ruleset/ruleset = _ruleset - export[ruleset.name] = list( - "repeatable_weight_decrease" = ruleset.repeatable_weight_decrease, - "weight" = ruleset.weight, - "cost" = ruleset.cost, - "scaling_cost" = ruleset.scaling_cost, - "antag_cap" = ruleset.antag_cap, - "pop_per_requirement" = ruleset.pop_per_requirement, - "requirements" = ruleset.requirements, - "base_prob" = ruleset.base_prob, - ) - - return export - -#endif diff --git a/code/game/gamemodes/dynamic/readme.md b/code/game/gamemodes/dynamic/readme.md deleted file mode 100644 index d663e88a239291..00000000000000 --- a/code/game/gamemodes/dynamic/readme.md +++ /dev/null @@ -1,194 +0,0 @@ -# Dynamic Mode - -## Roundstart - -Dynamic rolls threat based on a special sauce formula: - -> [dynamic_curve_width][/datum/controller/global_vars/var/dynamic_curve_width] \* tan((3.1416 \* (rand() - 0.5) \* 57.2957795)) + [dynamic_curve_centre][/datum/controller/global_vars/var/dynamic_curve_centre] - -This threat is split into two separate budgets--`round_start_budget` and `mid_round_budget`. For example, a round with 50 threat might be split into a 30 roundstart budget, and a 20 midround budget. The roundstart budget is used to apply antagonists applied on readied players when the roundstarts (`/datum/dynamic_ruleset/roundstart`). The midround budget is used for two types of rulesets: -- `/datum/dynamic_ruleset/midround` - Rulesets that apply to either existing alive players, or to ghosts. Think Blob or Space Ninja, which poll ghosts asking if they want to play as these roles. -- `/datum/dynamic_ruleset/latejoin` - Rulesets that apply to the next player that joins. Think Syndicate Infiltrator, which converts a player just joining an existing round into traitor. - -This split is done with a similar method, known as the ["lorentz distribution"](https://en.wikipedia.org/wiki/Cauchy_distribution), exists to create a bell curve that ensures that while most rounds will have a threat level around ~50, chaotic and tame rounds still exist for variety. - -The process of creating these numbers occurs in `/datum/game_mode/dynamic/proc/generate_threat` (for creating the threat level) and `/datum/game_mode/dynamic/proc/generate_budgets` (for splitting the threat level into budgets). - -## Deciding roundstart threats -In `/datum/game_mode/dynamic/proc/roundstart()` (called when no admin chooses the rulesets explicitly), Dynamic uses the available roundstart budget to pick threats. This is done through the following system: - -- All roundstart rulesets (remember, `/datum/dynamic_ruleset/roundstart`) are put into an associative list with their weight as the values (`drafted_rules`). -- Until there is either no roundstart budget left, or until there is no ruleset we can choose from with the available threat, a `pickweight` is done based on the drafted_rules. If the same threat is picked twice, it will "scale up". The meaning of this depends on the ruleset itself, using the `scaled_times` variable; traitors for instance will create more the higher they scale. - - If a ruleset is chosen with the `HIGH_IMPACT_RULESET` in its `flags`, then all other `HIGH_IMPACT_RULESET`s will be removed from `drafted_rules`. This is so that only one can ever be chosen. - - If a ruleset has `LONE_RULESET` in its `flags`, then it will be removed from `drafted_rules`. This is to ensure it will only ever be picked once. An example of this in use is Wizard, to avoid creating multiple wizards. -- After all roundstart threats are chosen, `/datum/dynamic_ruleset/proc/picking_roundstart_rule` is called for each, passing in the ruleset and the number of times it is scaled. - - In this stage, `pre_execute` is called, which is the function that will determine what players get what antagonists. If this function returns FALSE for whatever reason (in the case of an error), then its threat is refunded. - -After this process is done, any leftover roundstart threat will be given to the existing midround budget (done in `/datum/game_mode/dynamic/pre_setup()`). - -## Deciding midround threats - -### Frequency - -The frequency of midround threats is based on the midround threat of the round. The number of midround threats that will roll is `threat_level` / `threat_per_midround_roll` (configurable), rounded up. For example, if `threat_per_midround_roll` is set to 5, then for every 5 threat, one midround roll will be added. If you have 6 threat, with this configuration, you will get 2 midround rolls. - -These midround roll points are then equidistantly spaced across the round, starting from `midround_lower_bound` (configurable) to `midround_upper_bound` (configurable), with a +/- of `midround_roll_distance` (configurable). - -For example, if: -1. `midround_lower_bound` is `10 MINUTES` -2. `midround_upper_bound` is `100 MINUTES` -3. `midround_roll_distance` is `3 MINUTES` -4. You have 5 midround rolls for the round - -...then those 5 midround rolls will be placed equidistantly (meaning equally apart) across the first 10-100 minutes of the round. Every individual roll will then be adjusted to either be 3 minutes earlier, or 3 minutes later. - -### Threat variety - -Threats are split between **heavy** rulesets and **light** rulesets. A heavy ruleset includes major threats like space dragons or blobs, while light rulesets are ones that don't often cause shuttle calls when rolled, such as revenants or traitors (sleeper agents). - -When a midround roll occurs, the decision to choose between light or heavy depends on the current round time. If it is less than `midround_light_upper_bound` (configurable), then it is guaranteed to be a light ruleset. If it is more than `midround_heavy_lower_bound`, then it is guaranteed to be a heavy ruleset. If it is any point in between, it will interpolate the value between those. This means that the longer the round goes on, the more likely you are to get a heavy ruleset. - -If no heavy ruleset can run, such as not having enough threat, then a light ruleset is guaranteed to run. - -## Rule Processing - -Calls [rule_process][/datum/dynamic_ruleset/proc/rule_process] on every rule which is in the current_rules list. -Every sixty seconds, update_playercounts() -Midround injection time is checked against world.time to see if an injection should happen. -If midround injection time is lower than world.time, it updates playercounts again, then tries to inject and generates a new cooldown regardless of whether a rule is picked. - -## Latejoin - -make_antag_chance(newPlayer) -> (For each latespawn rule...) --> acceptable(living players, threat_level) -> trim_candidates() -> ready(forced=FALSE) -**If true, add to drafted rules -**NOTE that acceptable uses threat_level not threat! -**NOTE Latejoin timer is ONLY reset if at least one rule was drafted. -**NOTE the new_player.dm AttemptLateSpawn() calls OnPostSetup for all roles (unless assigned role is MODE) - -(After collecting all draftble rules...) --> picking_latejoin_ruleset(drafted_rules) -> spend threat -> ruleset.execute() - -## Midround - -process() -> (For each midround rule... --> acceptable(living players, threat_level) -> trim_candidates() -> ready(forced=FALSE) -(After collecting all draftble rules...) --> picking_midround_ruleset(drafted_rules) -> spend threat -> ruleset.execute() - -## Forced - -For latejoin, it simply sets forced_latejoin_rule -make_antag_chance(newPlayer) -> trim_candidates() -> ready(forced=TRUE) **NOTE no acceptable() call - -For midround, calls the below proc with forced = TRUE -picking_specific_rule(ruletype,forced) -> forced OR acceptable(living_players, threat_level) -> trim_candidates() -> ready(forced) -> spend threat -> execute() -**NOTE specific rule can be called by RS traitor->MR autotraitor w/ forced=FALSE -**NOTE that due to short circuiting acceptable() need not be called if forced. - -## Ruleset - -acceptable(population,threat) just checks if enough threat_level for population indice. -**NOTE that we currently only send threat_level as the second arg, not threat. -ready(forced) checks if enough candidates and calls the map's map_ruleset(dynamic_ruleset) at the parent level - -trim_candidates() varies significantly according to the ruleset type -Roundstart: All candidates are new_player mobs. Check them for standard stuff: connected, desire role, not banned, etc. -**NOTE Roundstart deals with both candidates (trimmed list of valid players) and mode.candidates (everyone readied up). Don't confuse them! -Latejoin: Only one candidate, the latejoiner. Standard checks. -Midround: Instead of building a single list candidates, candidates contains four lists: living, dead, observing, and living antags. Standard checks in trim_list(list). - -Midround - Rulesets have additional types -/from_ghosts: execute() -> send_applications() -> review_applications() -> finish_applications() -> finish_setup(mob/newcharacter, index) -> setup_role(role) -**NOTE: execute() here adds dead players and observers to candidates list - -## Configuration and variables - -### Configuration -Configuration can be done through a `config/dynamic.json` file. One is provided as example in the codebase. This config file, loaded in `/datum/game_mode/dynamic/pre_setup()`, directly overrides the values in the codebase, and so is perfect for making some rulesets harder/easier to get, turning them off completely, changing how much they cost, etc. - -The format of this file is: -```json -{ - "Dynamic": { - /* Configuration in here will directly override `/datum/game_mode/dynamic` itself. */ - /* Keys are variable names, values are their new values. */ - }, - - "Roundstart": { - /* Configuration in here will apply to `/datum/dynamic_ruleset/roundstart` instances. */ - /* Keys are the ruleset names, values are another associative list with keys being variable names and values being new values. */ - "Wizard": { - /* I, a head admin, have died to wizard, and so I made it cost a lot more threat than it does in the codebase. */ - "cost": 80 - } - }, - - "Midround": { - /* Same as "Roundstart", but for `/datum/dynamic_ruleset/midround` instead. */ - }, - - "Latejoin": { - /* Same as "Roundstart", but for `/datum/dynamic_ruleset/latejoin` instead. */ - }, - - "Station": { - /* Special threat reductions for dangerous station traits. Traits are selected before dynamic, so traits will always */ - /* reduce threat even if there's no threat for it available. Only "cost" can be modified */ - } -} -``` - -Note: Comments are not possible in this format, and are just in this document for the sake of readability. - -### Rulesets -Rulesets have the following variables notable to developers and those interested in tuning. - -- `required_candidates` - The number of people that *must be willing* (in their preferences) to be an antagonist with this ruleset. If the candidates do not meet this requirement, then the ruleset will not bother to be drafted. -- `antag_cap` - Judges the amount of antagonists to apply, for both solo and teams. Note that some antagonists (such as traitors, lings, heretics, etc) will add more based on how many times they've been scaled. Written as a linear equation--ceil(x/denominator) + offset, or as a fixed constant. If written as a linear equation, will be in the form of `list("denominator" = denominator, "offset" = offset)`. - - Examples include: - - Traitor: `antag_cap = list("denominator" = 24)`. This means that for every 24 players, 1 traitor will be added (assuming no scaling). - - Nuclear Emergency: `antag_cap = list("denominator" = 18, "offset" = 1)`. For every 18 players, 1 nuke op will be added. Starts at 1, meaning at 30 players, 3 nuke ops will be created, rather than 2. - - Revolution: `antag_cap = 3`. There will always be 3 rev-heads, no matter what. -- `minimum_required_age` - The minimum age in order to apply for the ruleset. -- `weight` - How likely this ruleset is to be picked. A higher weight results in a higher chance of drafting. -- `cost` - The initial cost of the ruleset. This cost is taken from either the roundstart or midround budget, depending on the ruleset. -- `scaling_cost` - Cost for every *additional* application of this ruleset. - - Suppose traitors has a `cost` of 8, and a `scaling_cost` of 5. This means that buying 1 application of the traitor ruleset costs 8 threat, but buying two costs 13 (8 + 5). Buying it a third time is 18 (8 + 5 + 5), etc. -- `pop_per_requirement` - The range of population each value in `requirements` represents. By default, this is 6. - - If the value is five the range is 0-4, 5-9, 10-14, 15-19, 20-24, 25-29, 30-34, 35-39, 40-54, 45+. - - If it is six the range is 0-5, 6-11, 12-17, 18-23, 24-29, 30-35, 36-41, 42-47, 48-53, 54+. - - If it is seven the range is 0-6, 7-13, 14-20, 21-27, 28-34, 35-41, 42-48, 49-55, 56-62, 63+. -- `requirements` - A list that represents, per population range (see: `pop_per_requirement`), how much threat is required to *consider* this ruleset. This is independent of how much it'll actually cost. This uses *threat level*, not the budget--meaning if a round has 50 threat level, but only 10 points of round start threat, a ruleset with a requirement of 40 can still be picked if it can be bought. - - Suppose wizard has a `requirements` of `list(90,90,70,40,30,20,10,10,10,10)`. This means that, at 0-5 and 6-11 players, A station must have 90 threat in order for a wizard to be possible. At 12-17, 70 threat is required instead, etc. -- `restricted_roles` - A list of jobs that *can't* be drafted by this ruleset. For example, cyborgs cannot be changelings, and so are in the `restricted_roles`. -- `protected_roles` - Serves the same purpose of `restricted_roles`, except it can be turned off through configuration (`protect_roles_from_antagonist`). For example, security officers *shouldn't* be made traitor, so they are in Traitor's `protected_roles`. - - When considering putting a role in `protected_roles` or `restricted_roles`, the rule of thumb is if it is *technically infeasible* to support that job in that role. There's no *technical* reason a security officer can't be a traitor, and so they are simply in `protected_roles`. There *are* technical reasons a cyborg can't be a changeling, so they are in `restricted_roles` instead. - -This is not a complete list--search "configurable" in this README to learn more. - -### Dynamic - -The "Dynamic" key has the following configurable values: -- `pop_per_requirement` - The default value of `pop_per_requirement` for any ruleset that does not explicitly set it. Defaults to 6. -- `latejoin_delay_min`, `latejoin_delay_max` - The time range, in deciseconds (take your seconds, and multiply by 10), for a latejoin to attempt rolling. Once this timer is finished, a new one will be created within the same range. - - Suppose you have a `latejoin_delay_min` of 600 (60 seconds, 1 minute) and a `latejoin_delay_max` of 1800 (180 seconds, 3 minutes). Once the round starts, a random number in this range will be picked--let's suppose 1.5 minutes. After 1.5 minutes, Dynamic will decide if a latejoin threat should be created (a probability of `/datum/game_mode/dynamic/proc/get_injection_chance()`). Regardless of its decision, a new timer will be started within the range of 1 to 3 minutes, repeatedly. -- `threat_curve_centre` - A number between -5 and +5. A negative value will give a more peaceful round and a positive value will give a round with higher threat. -- `threat_curve_width` - A number between 0.5 and 4. Higher value will favour extreme rounds and lower value rounds closer to the average. -- `roundstart_split_curve_centre` - A number between -5 and +5. Equivalent to threat_curve_centre, but for the budget split. A negative value will weigh towards midround rulesets, and a positive value will weight towards roundstart ones. -- `roundstart_split_curve_width` - A number between 0.5 and 4. Equivalent to threat_curve_width, but for the budget split. Higher value will favour more variance in splits and lower value rounds closer to the average. -- `random_event_hijack_minimum` - The minimum amount of time for antag random events to be hijacked. (See [Random Event Hijacking](#random-event-hijacking)) -- `random_event_hijack_maximum` - The maximum amount of time for antag random events to be hijacked. (See [Random Event Hijacking](#random-event-hijacking)) -- `hijacked_random_event_injection_chance` - The amount of injection chance to give to Dynamic when a random event is hijacked. (See [Random Event Hijacking](#random-event-hijacking)) -- `max_threat_level` - Sets the maximum amount of threat that can be rolled. Defaults to 100. You should only use this to *lower* the maximum threat, as raising it higher will not do anything. - -## Random Event "Hijacking" -Random events have the potential to be hijacked by Dynamic to keep the pace of midround injections, while also allowing greenshifts to contain some antagonists. - -`/datum/round_event_control/dynamic_should_hijack` is a variable to random events to allow Dynamic to hijack them, and defaults to FALSE. This is set to TRUE for random events that spawn antagonists. - -In `/datum/game_mode/dynamic/on_pre_random_event` (in `dynamic_hijacking.dm`), Dynamic hooks to random events. If the `dynamic_should_hijack` variable is TRUE, the following sequence of events occurs: - -![Flow chart to describe the chain of events for Dynamic 2021 to take](https://github.com/tgstation/documentation-assets/blob/main/dynamic/random_event_hijacking.png) - -`n` is a random value between `random_event_hijack_minimum` and `random_event_hijack_maximum`. Heavy injection chance, should it need to be raised, is increased by `hijacked_random_event_injection_chance_modifier`. diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm deleted file mode 100644 index 8319e51b73d053..00000000000000 --- a/code/game/gamemodes/game_mode.dm +++ /dev/null @@ -1,228 +0,0 @@ - - -/* - * GAMEMODES (by Rastaf0) - * - * In the new mode system all special roles are fully supported. - * You can have proper wizards/traitors/changelings/cultists during any mode. - * Only two things really depends on gamemode: - * 1. Starting roles, equipment and preparations - * 2. Conditions of finishing the round. - * - */ - - -/datum/game_mode - -///Attempts to select players for special roles the mode might have. -/datum/game_mode/proc/pre_setup() - return TRUE - -///Everyone should now be on the station and have their normal gear. This is the place to give the special roles extra things -/datum/game_mode/proc/post_setup(report) //Gamemodes can override the intercept report. Passing TRUE as the argument will force a report. - if(!report) - report = !CONFIG_GET(flag/no_intercept_report) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(display_roundstart_logout_report)), ROUNDSTART_LOGOUT_REPORT_TIME) - - if(CONFIG_GET(flag/reopen_roundstart_suicide_roles)) - var/delay = CONFIG_GET(number/reopen_roundstart_suicide_roles_delay) - if(delay) - delay = (delay SECONDS) - else - delay = (4 MINUTES) //default to 4 minutes if the delay isn't defined. - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(reopen_roundstart_suicide_roles)), delay) - - if(SSdbcore.Connect()) - var/list/to_set = list() - var/arguments = list() - if(SSticker.mode) - to_set += "game_mode = :game_mode" - arguments["game_mode"] = SSticker.mode - if(GLOB.revdata.originmastercommit) - to_set += "commit_hash = :commit_hash" - arguments["commit_hash"] = GLOB.revdata.originmastercommit - if(to_set.len) - arguments["round_id"] = GLOB.round_id - var/datum/db_query/query_round_game_mode = SSdbcore.NewQuery( - "UPDATE [format_table_name("round")] SET [to_set.Join(", ")] WHERE id = :round_id", - arguments - ) - query_round_game_mode.Execute() - qdel(query_round_game_mode) - return TRUE - - -///Handles late-join antag assignments -/datum/game_mode/proc/make_antag_chance(mob/living/carbon/human/character) - return - -/// Checks if the round should be ending, called every ticker tick -/datum/game_mode/proc/check_finished() - if(!SSticker.setup_done) - return FALSE - if(SSshuttle.emergency && (SSshuttle.emergency.mode == SHUTTLE_ENDGAME)) - return TRUE - if(GLOB.station_was_nuked) - return TRUE - if(GLOB.revolutionary_win) - return TRUE - return FALSE - -/* - * Generate a list of station goals available to purchase to report to the crew. - * - * Returns a formatted string all station goals that are available to the station. - */ -/datum/game_mode/proc/generate_station_goal_report() - if(!GLOB.station_goals.len) - return - . = "
Special Orders for [station_name()]:
" - var/list/goal_reports = list() - for(var/datum/station_goal/station_goal as anything in GLOB.station_goals) - station_goal.on_report() - goal_reports += station_goal.get_report() - - . += goal_reports.Join("
") - return - -/* - * Generate a list of active station traits to report to the crew. - * - * Returns a formatted string of all station traits (that are shown) affecting the station. - */ -/datum/game_mode/proc/generate_station_trait_report() - var/trait_list_string = "" - for(var/datum/station_trait/station_trait as anything in SSstation.station_traits) - if(!station_trait.show_in_report) - continue - trait_list_string += "[station_trait.get_report()]
" - if(trait_list_string != "") - return "
Identified shift divergencies:
" + trait_list_string - return - -/datum/game_mode/proc/generate_report_footnote() - var/footnote_pile = "" - - for(var/datum/command_footnote/footnote in SScommunications.command_report_footnotes) - footnote_pile += "[footnote.message]
" - footnote_pile += "[footnote.signature]
" - footnote_pile += "
" - - return "
Additional Notes:

" + footnote_pile - -/proc/reopen_roundstart_suicide_roles() - var/include_command = CONFIG_GET(flag/reopen_roundstart_suicide_roles_command_positions) - var/list/reopened_jobs = list() - - for(var/mob/living/quitter in GLOB.suicided_mob_list) - var/datum/job/job = SSjob.GetJob(quitter.job) - if(!job || !(job.job_flags & JOB_REOPEN_ON_ROUNDSTART_LOSS)) - continue - if(!include_command && job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) - continue - job.current_positions = max(job.current_positions - 1, 0) - reopened_jobs += quitter.job - - if(CONFIG_GET(flag/reopen_roundstart_suicide_roles_command_report)) - if(reopened_jobs.len) - var/reopened_job_report_positions - for(var/dead_dudes_job in reopened_jobs) - reopened_job_report_positions = "[reopened_job_report_positions ? "[reopened_job_report_positions]\n":""][dead_dudes_job]" - - var/suicide_command_report = "Central Command Human Resources Board
\ - Notice of Personnel Change

\ - To personnel management staff aboard [station_name()]:

\ - Our medical staff have detected a series of anomalies in the vital sensors \ - of some of the staff aboard your station.

\ - Further investigation into the situation on our end resulted in us discovering \ - a series of rather... unforturnate decisions that were made on the part of said staff.

\ - As such, we have taken the liberty to automatically reopen employment opportunities for the positions of the crew members \ - who have decided not to partake in our research. We will be forwarding their cases to our employment review board \ - to determine their eligibility for continued service with the company (and of course the \ - continued storage of cloning records within the central medical backup server.)

\ - The following positions have been reopened on our behalf:

\ - [reopened_job_report_positions]
" - - print_command_report(suicide_command_report, "Central Command Personnel Update") - -////////////////////////// -//Reports player logouts// -////////////////////////// -/proc/display_roundstart_logout_report() - var/list/msg = list("[span_boldnotice("Roundstart logout report")]\n\n") - for(var/i in GLOB.mob_living_list) - var/mob/living/L = i - var/mob/living/carbon/C = L - if (istype(C) && !C.last_mind) - continue // never had a client - - if(L.ckey && !GLOB.directory[L.ckey]) - msg += "[L.name] ([L.key]), the [L.job] (Disconnected)\n" - - - if(L.ckey && L.client) - var/failed = FALSE - if(L.client.inactivity >= ROUNDSTART_LOGOUT_AFK_THRESHOLD) //Connected, but inactive (alt+tabbed or something) - msg += "[L.name] ([L.key]), the [L.job] (Connected, Inactive)\n" - failed = TRUE //AFK client - if(!failed && L.stat) - if(HAS_TRAIT(L, TRAIT_SUICIDED)) //Suicider - msg += "[L.name] ([L.key]), the [L.job] ([span_boldannounce("Suicide")])\n" - failed = TRUE //Disconnected client - if(!failed && (L.stat == UNCONSCIOUS || L.stat == HARD_CRIT)) - msg += "[L.name] ([L.key]), the [L.job] (Dying)\n" - failed = TRUE //Unconscious - if(!failed && L.stat == DEAD) - msg += "[L.name] ([L.key]), the [L.job] (Dead)\n" - failed = TRUE //Dead - - continue //Happy connected client - for(var/mob/dead/observer/D in GLOB.dead_mob_list) - if(D.mind && D.mind.current == L) - if(L.stat == DEAD) - if(HAS_TRAIT(L, TRAIT_SUICIDED)) //Suicider - msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] ([span_boldannounce("Suicide")])\n" - continue //Disconnected client - else - msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Dead)\n" - continue //Dead mob, ghost abandoned - else - if(D.can_reenter_corpse) - continue //Adminghost, or cult/wizard ghost - else - msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] ([span_boldannounce("Ghosted")])\n" - continue //Ghosted while alive - - var/concatenated_message = msg.Join() - log_admin(concatenated_message) - to_chat(GLOB.admins, concatenated_message) - -/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 as anything in possible) - if(initial(goal.requires_space)) - possible -= goal - var/goal_weights = 0 - while(possible.len && goal_weights < goal_budget) - var/datum/station_goal/picked = pick_n_take(possible) - goal_weights += initial(picked.weight) - GLOB.station_goals += new picked - -//Set result and news report here -/datum/game_mode/proc/set_round_result() - SSticker.mode_result = "undefined" - // Something nuked the station - it wasn't nuke ops (they set their own via their rulset) - if(GLOB.station_was_nuked) - SSticker.news_report = STATION_NUKED - if(SSsupermatter_cascade.cascade_initiated) - SSticker.news_report = SUPERMATTER_CASCADE - // Only show this one if we have nothing better to show - if(EMERGENCY_ESCAPED_OR_ENDGAMED && !SSticker.news_report) - SSticker.news_report = SSshuttle.emergency?.is_hijacked() ? SHUTTLE_HIJACK : STATION_EVACUATED - -/// Mode specific admin panel. -/datum/game_mode/proc/admin_panel() - return diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index bdefee42c3e9e2..ba0d7b931cd419 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -1,5 +1,5 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list -GLOBAL_LIST_EMPTY(objectives) //SKYRAT EDIT ADDITION +GLOBAL_LIST_EMPTY(objectives) //NOVA EDIT ADDITION /datum/objective var/datum/mind/owner //The primary owner of the objective. !!SOMEWHAT DEPRECATED!! Prefer using 'team' for new code. @@ -17,13 +17,13 @@ GLOBAL_LIST_EMPTY(objectives) //SKYRAT EDIT ADDITION var/admin_grantable = FALSE /datum/objective/New(text) - GLOB.objectives += src //SKYRAT EDIT ADDITION + GLOB.objectives += src //NOVA EDIT ADDITION if(text) explanation_text = text //Apparently objectives can be qdel'd. Learn a new thing every day /datum/objective/Destroy() - GLOB.objectives -= src //SKYRAT EDIT ADDITION + GLOB.objectives -= src //NOVA EDIT ADDITION return ..() /datum/objective/proc/get_owners() // Combine owner and team into a single list. @@ -125,6 +125,27 @@ GLOBAL_LIST_EMPTY(objectives) //SKYRAT EDIT ADDITION /datum/objective/proc/get_target() return target +/datum/objective/proc/is_valid_target(datum/mind/possible_target) + if(!ishuman(possible_target.current)) + return FALSE + + if(possible_target.current.stat == DEAD) + return FALSE + + var/target_area = get_area(possible_target.current) + if(!HAS_TRAIT(SSstation, STATION_TRAIT_LATE_ARRIVALS) && istype(target_area, /area/shuttle/arrival)) + return FALSE + + // NOVA EDIT ADDITION + if(SSticker.IsRoundInProgress() && istype(target_area, /area/centcom/interlink)) + return FALSE + if(!count_space_areas) + if(istype(target_area, /area/space) || istype(target_area, /area/ruin) || istype(target_area, /area/icemoon) || istype(target_area, /area/lavaland)) + return FALSE + // NOVA EDIT END + + return TRUE + //dupe_search_range is a list of antag datums / minds / teams /datum/objective/proc/find_target(dupe_search_range, list/blacklist) var/list/datum/mind/owners = get_owners() @@ -137,26 +158,14 @@ GLOBAL_LIST_EMPTY(objectives) //SKYRAT EDIT ADDITION if(O.late_joiner) try_target_late_joiners = TRUE for(var/datum/mind/possible_target in get_crewmember_minds()) - var/target_area = get_area(possible_target.current) if(possible_target in owners) continue - if(!ishuman(possible_target.current)) - continue - if(possible_target.current.stat == DEAD) - continue if(!is_unique_objective(possible_target,dupe_search_range)) continue - if(!HAS_TRAIT(SSstation, STATION_TRAIT_LATE_ARRIVALS) && istype(target_area, /area/shuttle/arrival)) - continue if(possible_target in blacklist) continue - // SKYRAT EDIT ADDITION - if(SSticker.IsRoundInProgress() && istype(target_area, /area/centcom/interlink)) + if(!is_valid_target(possible_target)) continue - if(!count_space_areas) - if(istype(target_area, /area/space) || istype(target_area, /area/ruin) || istype(target_area, /area/icemoon) || istype(target_area, /area/lavaland)) - continue - // SKYRAT EDIT END possible_targets += possible_target if(try_target_late_joiners) var/list/all_possible_targets = possible_targets.Copy() @@ -171,7 +180,6 @@ GLOBAL_LIST_EMPTY(objectives) //SKYRAT EDIT ADDITION update_explanation_text() return target - /datum/objective/proc/update_explanation_text() if(team_explanation_text && LAZYLEN(get_owners()) > 1) explanation_text = team_explanation_text @@ -192,7 +200,7 @@ GLOBAL_LIST_EMPTY(objectives) //SKYRAT EDIT ADDITION /datum/action/special_equipment_fallback name = "Request Objective-specific Equipment" desc = "Call down a supply pod containing the equipment required for specific objectives." - button_icon = 'icons/obj/device.dmi' + button_icon = 'icons/obj/devices/tracker.dmi' button_icon_state = "beacon" /datum/action/special_equipment_fallback/Trigger(trigger_flags) @@ -217,7 +225,7 @@ GLOBAL_LIST_EMPTY(objectives) //SKYRAT EDIT ADDITION return TRUE /datum/objective/assassinate - name = "assasinate" + name = "assassinate" martyr_compatible = TRUE admin_grantable = TRUE var/target_role_type = FALSE @@ -229,7 +237,7 @@ GLOBAL_LIST_EMPTY(objectives) //SKYRAT EDIT ADDITION /datum/objective/assassinate/update_explanation_text() ..() if(target?.current) - explanation_text = "Assassinate [target.name], the [!target_role_type ? target.assigned_role.title : target.special_role] ONCE." //SKYRAT EDIT CHANGE + explanation_text = "Assassinate [target.name], the [!target_role_type ? target.assigned_role.title : target.special_role] ONCE." //NOVA EDIT CHANGE else explanation_text = "Free objective." @@ -516,6 +524,11 @@ GLOBAL_LIST_EMPTY(objectives) //SKYRAT EDIT ADDITION target = ..() update_explanation_text() +/datum/objective/escape/escape_with_identity/is_valid_target(datum/mind/possible_target) + if(HAS_TRAIT(possible_target.current, TRAIT_NO_DNA_COPY)) + return FALSE + return ..() + /datum/objective/escape/escape_with_identity/update_explanation_text() if(target?.current) target_real_name = target.current.real_name @@ -530,12 +543,12 @@ GLOBAL_LIST_EMPTY(objectives) //SKYRAT EDIT ADDITION explanation_text += "." //Proper punctuation is important! else - explanation_text = "Free objective." + explanation_text = "Escape on the shuttle or an escape pod alive and without being in custody." /datum/objective/escape/escape_with_identity/check_completion() - if(!target || !target_real_name) - return TRUE var/list/datum/mind/owners = get_owners() + if(!target || !target_real_name) + return ..() for(var/datum/mind/M in owners) if(!ishuman(M.current) || !considered_escaped(M)) continue diff --git a/code/game/gamemodes/objective_items.dm b/code/game/gamemodes/objective_items.dm index 2240f220e48b76..cdb373f8712ca1 100644 --- a/code/game/gamemodes/objective_items.dm +++ b/code/game/gamemodes/objective_items.dm @@ -312,15 +312,15 @@ /datum/objective_item/steal/hypo //name = "the hypospray" // ORIGINAL - name = "the Chief Medical Officer's hypospray" // SKYRAT EDIT CHANGE + name = "the Chief Medical Officer's hypospray" // NOVA EDIT CHANGE //targetitem = /obj/item/reagent_containers/hypospray/cmo // ORIGINAL - targetitem = /obj/item/hypospray/mkii/cmo // SKYRAT EDIT CHANGE + targetitem = /obj/item/hypospray/mkii/cmo // NOVA EDIT CHANGE excludefromjob = list(JOB_CHIEF_MEDICAL_OFFICER) item_owner = list(JOB_CHIEF_MEDICAL_OFFICER) exists_on_map = TRUE -/obj/item/hypospray/mkii/cmo/add_stealing_item_objective() // SKYRAT EDIT CHANGE - return add_item_to_steal(src, /obj/item/hypospray/mkii/cmo) // SKYRAT EDIT CHANGE +/obj/item/hypospray/mkii/cmo/add_stealing_item_objective() // NOVA EDIT CHANGE + return add_item_to_steal(src, /obj/item/hypospray/mkii/cmo) // NOVA EDIT CHANGE /datum/objective_item/steal/nukedisc name = "the nuclear authentication disk" diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm index c9680744fcbff0..c4cf5bb125ae6d 100644 --- a/code/game/machinery/PDApainter.dm +++ b/code/game/machinery/PDApainter.dm @@ -7,6 +7,7 @@ base_icon_state = "pdapainter" density = TRUE max_integrity = 200 + integrity_failure = 0.5 /// Current ID card inserted into the machine. var/obj/item/card/id/stored_id_card = null /// Current PDA inserted into the machine. @@ -106,7 +107,7 @@ . = ..() if(default_unfasten_wrench(user, tool)) power_change() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/pdapainter/attackby(obj/item/O, mob/living/user, params) if(machine_stat & BROKEN) @@ -160,9 +161,6 @@ eject_id_card(user) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN -/obj/machinery/pdapainter/deconstruct(disassembled = TRUE) - atom_break() - /** * Insert a PDA into the machine. * diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index e72c2da00bbc83..f8d05a885d6f25 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -131,7 +131,7 @@ var/subsystem_type = /datum/controller/subsystem/machines var/obj/item/circuitboard/circuit // Circuit to be created and inserted when the machinery is created - var/interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON|INTERACT_MACHINE_SET_MACHINE + var/interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON var/fair_market_price = 69 var/market_verb = "Customer" var/payment_department = ACCOUNT_ENG @@ -512,19 +512,24 @@ return TRUE ///Get a valid powered area to reference for power use, mainly for wall-mounted machinery that isn't always mapped directly in a powered location. -/obj/machinery/proc/get_room_area(area/machine_room) +/obj/machinery/proc/get_room_area() var/area/machine_area = get_area(src) - if(!machine_area.always_unpowered) ///check our loc first to see if its a powered area - machine_room = machine_area - return machine_room - var/turf/mounted_wall = get_step(src,dir) - if (mounted_wall && istype(mounted_wall, /turf/closed)) + if(isnull(machine_area)) + return null // ?? + + // check our own loc first to see if its a powered area + if(!machine_area.always_unpowered) + return machine_area + + // loc area wasn't good, checking adjacent wall for a good area to use + var/turf/mounted_wall = get_step(src, dir) + if(isclosedturf(mounted_wall)) var/area/wall_area = get_area(mounted_wall) - if(!wall_area.always_unpowered) //loc area wasn't good, checking adjacent wall for a good area to use - machine_room = wall_area - return machine_room - machine_room = machine_area ///couldn't find a proper powered area on loc or adjacent wall, defaulting back to loc and blaming mappers - return machine_room + if(!wall_area.always_unpowered) + return wall_area + + // couldn't find a proper powered area on loc or adjacent wall, defaulting back to loc and blaming mappers + return machine_area ///makes this machine draw power from its area according to which use_power mode it is set to /obj/machinery/proc/update_current_power_usage() @@ -754,11 +759,11 @@ return update_last_used(user) -/obj/machinery/tool_act(mob/living/user, obj/item/tool, tool_type, is_right_clicking) +/obj/machinery/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) if(SEND_SIGNAL(user, COMSIG_TRY_USE_MACHINE, src) & COMPONENT_CANT_USE_MACHINE_TOOLS) - return TOOL_ACT_MELEE_CHAIN_BLOCKING + return ITEM_INTERACT_ANY_BLOCKER . = ..() - if(. & TOOL_ACT_SIGNAL_BLOCKING) + if(. & ITEM_INTERACT_BLOCKING) return update_last_used(user) @@ -794,7 +799,7 @@ SEND_SIGNAL(src, COMSIG_MACHINERY_REFRESH_PARTS) /obj/machinery/proc/default_pry_open(obj/item/crowbar, close_after_pry = FALSE, open_density = FALSE, closed_density = TRUE) - . = !(state_open || panel_open || is_operational || (flags_1 & NODECONSTRUCT_1)) && crowbar.tool_behaviour == TOOL_CROWBAR + . = !(state_open || panel_open || is_operational || (obj_flags & NO_DECONSTRUCTION)) && crowbar.tool_behaviour == TOOL_CROWBAR if(!.) return crowbar.play_tool_sound(src, 50) @@ -804,14 +809,14 @@ close_machine(density_to_set = closed_density) /obj/machinery/proc/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel = 0, custom_deconstruct = FALSE) - . = (panel_open || ignore_panel) && !(flags_1 & NODECONSTRUCT_1) && crowbar.tool_behaviour == TOOL_CROWBAR + . = (panel_open || ignore_panel) && !(obj_flags & NO_DECONSTRUCTION) && crowbar.tool_behaviour == TOOL_CROWBAR if(!. || custom_deconstruct) return crowbar.play_tool_sound(src, 50) deconstruct(TRUE) /obj/machinery/deconstruct(disassembled = TRUE) - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return ..() //Just delete us, no need to call anything else. on_deconstruction() @@ -869,7 +874,7 @@ /obj/machinery/atom_break(damage_flag) . = ..() - if(!(machine_stat & BROKEN) && !(flags_1 & NODECONSTRUCT_1)) + if(!(machine_stat & BROKEN) && !(obj_flags & NO_DECONSTRUCTION)) set_machine_stat(machine_stat | BROKEN) SEND_SIGNAL(src, COMSIG_MACHINERY_BROKEN, damage_flag) update_appearance() @@ -916,7 +921,7 @@ qdel(atom_part) /obj/machinery/proc/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) - if((flags_1 & NODECONSTRUCT_1) || screwdriver.tool_behaviour != TOOL_SCREWDRIVER) + if((obj_flags & NO_DECONSTRUCTION) || screwdriver.tool_behaviour != TOOL_SCREWDRIVER) return FALSE screwdriver.play_tool_sound(src, 50) @@ -943,7 +948,7 @@ if(!istype(replacer_tool)) return FALSE - if((flags_1 & NODECONSTRUCT_1) && !replacer_tool.works_from_distance) + if((obj_flags & NO_DECONSTRUCTION) && !replacer_tool.works_from_distance) return FALSE var/shouldplaysound = FALSE diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index 21d9d8cdd066a2..117577e66eb831 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -1,7 +1,7 @@ /obj/machinery/ai_slipper name = "foam dispenser" desc = "A remotely-activatable dispenser for crowd-controlling foam." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tool.dmi' icon_state = "ai-slipper0" base_icon_state = "ai-slipper" layer = PROJECTILE_HIT_THRESHHOLD_LAYER diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 946bdb6d6cbef8..0a01b32514940f 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -64,11 +64,17 @@ /obj/machinery/autolathe/ui_static_data(mob/user) var/list/data = materials.ui_static_data() - data["designs"] = handle_designs(stored_research.researched_designs) + var/max_available = materials.total_amount() + for(var/datum/material/container_mat as anything in materials.materials) + var/available = materials.materials[container_mat] + if(available) + max_available = max(max_available, available) + + data["designs"] = handle_designs(stored_research.researched_designs, max_available) if(imported_designs.len) - data["designs"] += handle_designs(imported_designs) + data["designs"] += handle_designs(imported_designs, max_available) if(hacked) - data["designs"] += handle_designs(stored_research.hacked_designs) + data["designs"] += handle_designs(stored_research.hacked_designs, max_available) return data @@ -83,7 +89,7 @@ return data -/obj/machinery/autolathe/proc/handle_designs(list/designs) +/obj/machinery/autolathe/proc/handle_designs(list/designs, max_available) var/list/output = list() var/datum/asset/spritesheet/research_designs/spritesheet = get_asset_datum(/datum/asset/spritesheet/research_designs) @@ -108,7 +114,13 @@ else cost[i] = design_cost - max_multiplier = min(max_multiplier, 50, round((istype(mat) ? materials.get_material_amount(i) : 0) / design_cost)) + var/mat_available + if(istype(mat)) //regular mat + mat_available = materials.get_material_amount(mat) + else //category mat means we can make it from any mat, use largest available mat + mat_available = max_available + + max_multiplier = min(max_multiplier, 50, round(mat_available / design_cost)) //create & send ui data var/icon_size = spritesheet.icon_size_id(design.id) @@ -208,6 +220,7 @@ materials.use_materials(materials_used, coeff, multiplier) to_chat(usr, span_notice("You print [multiplier] item(s) from the [src]")) update_static_data_for_all_viewers() + //print item icon_state = "autolathe_n" var/time_per_item = is_stack ? 32 : ((32 * coeff * multiplier) ** 0.8) / multiplier @@ -215,21 +228,26 @@ return TRUE +/obj/machinery/autolathe/crowbar_act(mob/living/user, obj/item/tool) + if(default_deconstruction_crowbar(tool)) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/autolathe/screwdriver_act_secondary(mob/living/user, obj/item/tool) + if(default_deconstruction_screwdriver(user, "autolathe_t", "autolathe", tool)) + return ITEM_INTERACT_SUCCESS + /obj/machinery/autolathe/attackby(obj/item/attacking_item, mob/living/user, params) + if(user.combat_mode) //so we can hit the machine + return ..() + if(busy) balloon_alert(user, "it's busy!") return TRUE - if(default_deconstruction_crowbar(attacking_item)) - return TRUE - if(panel_open && is_wire_tool(attacking_item)) wires.interact(user) return TRUE - if(user.combat_mode) //so we can hit the machine - return ..() - if(machine_stat) return TRUE @@ -258,45 +276,16 @@ balloon_alert(user, "close the panel first!") return FALSE - if(istype(attacking_item, /obj/item/storage/bag/trash)) - for(var/obj/item/content_item in attacking_item.contents) - if(!do_after(user, 0.5 SECONDS, src)) - return FALSE - attackby(content_item, user) - return TRUE - return ..() -/obj/machinery/autolathe/attackby_secondary(obj/item/weapon, mob/living/user, params) - . = SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - if(busy) - balloon_alert(user, "it's busy!") - return - - if(default_deconstruction_screwdriver(user, "autolathe_t", "autolathe", weapon)) - return - - if(machine_stat) - return SECONDARY_ATTACK_CALL_NORMAL - - if(panel_open) - balloon_alert(user, "close the panel first!") - return - - return SECONDARY_ATTACK_CALL_NORMAL - /obj/machinery/autolathe/proc/AfterMaterialInsert(container, obj/item/item_inserted, last_inserted_id, mats_consumed, amount_inserted, atom/context) SIGNAL_HANDLER - if(ispath(item_inserted, /obj/item/stack/ore/bluespace_crystal)) - use_power(SHEET_MATERIAL_AMOUNT / 10) - else if(item_inserted.has_material_type(/datum/material/glass)) - flick("autolathe_r", src)//plays glass insertion animation by default otherwise - else - flick("autolathe_o", src)//plays metal insertion animation + flick("autolathe_[item_inserted.has_material_type(/datum/material/glass) ? "r" : "o"]", src) - use_power(min(active_power_usage * 0.25, amount_inserted / 100)) - update_static_data_for_all_viewers() + use_power(min(active_power_usage * 0.25, amount_inserted / 100)) + + update_static_data_for_all_viewers() /obj/machinery/autolathe/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params) . = ..() @@ -311,7 +300,6 @@ /obj/machinery/autolathe/proc/make_items(list/picked_materials, multiplier, is_stack, mob/user, time_per_item) var/atom/our_loc = drop_location() var/atom/drop_loc = get_step(src, drop_direction) - var/client_awarded = FALSE busy = TRUE SStgui.update_uis(src) //so ui immediatly knows its busy @@ -327,12 +315,10 @@ //custom materials for toolboxes if(length(picked_materials)) - new_item.set_custom_materials(picked_materials, 1 / multiplier) //Ensure we get the non multiplied amount - if(!client_awarded) //so we dont award the medal multiple times - for(var/datum/material/mat in picked_materials) - if(!istype(mat, /datum/material/glass) && !istype(mat, /datum/material/iron)) - user.client.give_award(/datum/award/achievement/misc/getting_an_upgrade, user) - client_awarded = TRUE + new_item.set_custom_materials(picked_materials) //Ensure we get the non multiplied amount + for(var/datum/material/mat in picked_materials) + if(!istype(mat, /datum/material/glass) && !istype(mat, /datum/material/iron)) + user.client.give_award(/datum/award/achievement/misc/getting_an_upgrade, user) //no need to call if ontop of us if(drop_direction) diff --git a/code/game/machinery/bank_machine.dm b/code/game/machinery/bank_machine.dm index 4d276b6ebae0f5..40670a22f44c49 100644 --- a/code/game/machinery/bank_machine.dm +++ b/code/game/machinery/bank_machine.dm @@ -105,14 +105,23 @@ switch(action) if("siphon") - say("Siphon of station credits has begun!") - start_siphon(ui.user) + if(is_station_level(src.z) || is_centcom_level(src.z)) + say("Siphon of station credits has begun!") + start_siphon(ui.user) + else + say("Error: Console not in reach of station, withdrawal cannot begin.") . = TRUE if("halt") say("Station credit withdrawal halted.") end_siphon() . = TRUE +/obj/machinery/computer/bank_machine/on_changed_z_level() + . = ..() + if(siphoning && !(is_station_level(src.z) || is_centcom_level(src.z))) + say("Error: Console not in reach of station. Siphon halted.") + end_siphon() + /obj/machinery/computer/bank_machine/proc/end_siphon() siphoning = FALSE unauthorized = FALSE diff --git a/code/game/machinery/barsigns.dm b/code/game/machinery/barsigns.dm index 764bd99b4ff0d6..8bdd3ab3b17580 100644 --- a/code/game/machinery/barsigns.dm +++ b/code/game/machinery/barsigns.dm @@ -1,10 +1,7 @@ /obj/machinery/barsign // All Signs are 64 by 32 pixels, they take two tiles name = "bar sign" desc = "A bar sign which has not been initialized, somehow. Complain at a coder!" - //SKYRAT EDIT CHANGE BEGIN - BARSIGNS - //icon = 'icons/obj/machines/barsigns.dmi' - icon = 'modular_skyrat/modules/barsigns/icons/barsigns.dmi' - //SKYRAT EDIT CHANGE END + icon = 'icons/obj/machines/barsigns.dmi' icon_state = "empty" req_access = list(ACCESS_BAR) max_integrity = 500 @@ -13,6 +10,10 @@ active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 0.15 /// Selected barsign being used var/datum/barsign/chosen_sign + /// Do we attempt to rename the area we occupy when the chosen sign is changed? + var/change_area_name = FALSE + /// What kind of sign do we drop upon being disassembled? + var/disassemble_result = /obj/item/wallframe/barsign /datum/armor/sign_barsign melee = 20 @@ -26,6 +27,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) /obj/machinery/barsign/Initialize(mapload) . = ..() + //Roundstart/map specific barsigns "belong" in their area and should be renaming it, signs created from wallmounts will not. + change_area_name = mapload set_sign(new /datum/barsign/hiddensigns/signoff) find_and_hang_on_wall() @@ -33,15 +36,15 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) if(!istype(sign)) return - if(sign.rename_area) + if(change_area_name && sign.rename_area) rename_area(src, sign.name) chosen_sign = sign update_appearance() /obj/machinery/barsign/update_icon_state() - if(!(machine_stat & (NOPOWER|BROKEN)) && chosen_sign && chosen_sign.icon) - icon_state = chosen_sign.icon + if(!(machine_stat & BROKEN) && (!(machine_stat & NOPOWER) || machine_stat & EMPED) && chosen_sign && chosen_sign.icon_state) + icon_state = chosen_sign.icon_state else icon_state = "empty" @@ -63,11 +66,11 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) /obj/machinery/barsign/update_overlays() . = ..() - if(machine_stat & (NOPOWER|BROKEN)) + if(((machine_stat & NOPOWER) && !(machine_stat & EMPED)) || (machine_stat & BROKEN)) return if(chosen_sign && chosen_sign.light_mask) - . += emissive_appearance(icon, "[chosen_sign.icon]-light-mask", src) + . += emissive_appearance(icon, "[chosen_sign.icon_state]-light-mask", src) /obj/machinery/barsign/update_appearance(updates=ALL) . = ..() @@ -85,12 +88,17 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) /obj/machinery/barsign/atom_break(damage_flag) . = ..() - if((machine_stat & BROKEN) && !(flags_1 & NODECONSTRUCT_1)) + if((machine_stat & BROKEN) && !(obj_flags & NO_DECONSTRUCTION)) set_sign(new /datum/barsign/hiddensigns/signoff) /obj/machinery/barsign/deconstruct(disassembled = TRUE) - new /obj/item/stack/sheet/iron(drop_location(), 2) - new /obj/item/stack/cable_coil(drop_location(), 2) + if(!(obj_flags & NO_DECONSTRUCTION)) + if(disassembled) + new disassemble_result(drop_location()) + else + new /obj/item/stack/sheet/iron(drop_location(), 2) + new /obj/item/stack/cable_coil(drop_location(), 2) + qdel(src) /obj/machinery/barsign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) @@ -121,7 +129,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) if(panel_open) balloon_alert(user, "panel opened") set_sign(new /datum/barsign/hiddensigns/signoff) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS balloon_alert(user, "panel closed") @@ -130,11 +138,34 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) else set_sign(chosen_sign) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS + +/obj/machinery/barsign/wrench_act(mob/living/user, obj/item/tool) + if(!panel_open) + balloon_alert(user, "open the panel first!") + return ITEM_INTERACT_BLOCKING + + tool.play_tool_sound(src) + if(!do_after(user, (10 SECONDS), target = src)) + return ITEM_INTERACT_BLOCKING + + tool.play_tool_sound(src) + deconstruct(disassembled = TRUE) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/barsign/attackby(obj/item/attacking_item, mob/user) + + if(istype(attacking_item, /obj/item/areaeditor/blueprints) && !change_area_name) + if(!panel_open) + balloon_alert(user, "open the panel first!") + return TRUE -/obj/machinery/barsign/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/stack/cable_coil) && panel_open) - var/obj/item/stack/cable_coil/wire = I + change_area_name = TRUE + balloon_alert(user, "sign registered") + return TRUE + + if(istype(attacking_item, /obj/item/stack/cable_coil) && panel_open) + var/obj/item/stack/cable_coil/wire = attacking_item if(atom_integrity >= max_integrity) balloon_alert(user, "doesn't need repairs!") @@ -150,10 +181,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) update_appearance() return TRUE - // if barsigns ever become a craftable or techweb wall mount then remove this - if(machine_stat & BROKEN) - return TRUE - return ..() /obj/machinery/barsign/emp_act(severity) @@ -205,7 +232,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) /// User-visible name of the sign. var/name /// Icon state associated with this sign - var/icon + var/icon_state /// Description shown in the sign's examine text. var/desc /// Hidden from list of selectable options. @@ -225,172 +252,232 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) /datum/barsign/maltesefalcon name = "Maltese Falcon" - icon = "maltesefalcon" + icon_state = "maltesefalcon" desc = "The Maltese Falcon, Space Bar and Grill." neon_color = "#5E8EAC" /datum/barsign/thebark name = "The Bark" - icon = "thebark" + icon_state = "thebark" desc = "Ian's bar of choice." neon_color = "#f7a604" /datum/barsign/harmbaton name = "The Harmbaton" - icon = "theharmbaton" + icon_state = "theharmbaton" desc = "A great dining experience for both security members and assistants." neon_color = "#ff7a4d" /datum/barsign/thesingulo name = "The Singulo" - icon = "thesingulo" + icon_state = "thesingulo" desc = "Where people go that'd rather not be called by their name." neon_color = "#E600DB" /datum/barsign/thedrunkcarp name = "The Drunk Carp" - icon = "thedrunkcarp" + icon_state = "thedrunkcarp" desc = "Don't drink and swim." neon_color = "#a82196" /datum/barsign/scotchservinwill name = "Scotch Servin Willy's" - icon = "scotchservinwill" + icon_state = "scotchservinwill" desc = "Willy sure moved up in the world from clown to bartender." neon_color = "#fee4bf" /datum/barsign/officerbeersky name = "Officer Beersky's" - icon = "officerbeersky" + icon_state = "officerbeersky" desc = "Man eat a dong, these drinks are great." neon_color = "#16C76B" /datum/barsign/thecavern name = "The Cavern" - icon = "thecavern" + icon_state = "thecavern" desc = "Fine drinks while listening to some fine tunes." neon_color = "#0fe500" /datum/barsign/theouterspess name = "The Outer Spess" - icon = "theouterspess" + icon_state = "theouterspess" desc = "This bar isn't actually located in outer space." neon_color = "#30f3cc" /datum/barsign/slipperyshots name = "Slippery Shots" - icon = "slipperyshots" + icon_state = "slipperyshots" desc = "Slippery slope to drunkeness with our shots!" neon_color = "#70DF00" /datum/barsign/thegreytide name = "The Grey Tide" - icon = "thegreytide" + icon_state = "thegreytide" desc = "Abandon your toolboxing ways and enjoy a lazy beer!" neon_color = "#00F4D6" /datum/barsign/honkednloaded name = "Honked 'n' Loaded" - icon = "honkednloaded" + icon_state = "honkednloaded" desc = "Honk." neon_color = "#FF998A" +/datum/barsign/le_cafe_silencieux + name = "Le Café Silencieux" + icon_state = "le_cafe_silencieux" + desc = "..." + neon_color = "#ffffff" + /datum/barsign/thenest name = "The Nest" - icon = "thenest" + icon_state = "thenest" desc = "A good place to retire for a drink after a long night of crime fighting." neon_color = "#4d6796" /datum/barsign/thecoderbus name = "The Coderbus" - icon = "thecoderbus" + icon_state = "thecoderbus" desc = "A very controversial bar known for its wide variety of constantly-changing drinks." neon_color = "#ffffff" /datum/barsign/theadminbus name = "The Adminbus" - icon = "theadminbus" + icon_state = "theadminbus" desc = "An establishment visited mainly by space-judges. It isn't bombed nearly as much as court hearings." neon_color = "#ffffff" /datum/barsign/oldcockinn name = "The Old Cock Inn" - icon = "oldcockinn" + icon_state = "oldcockinn" desc = "Something about this sign fills you with despair." neon_color = "#a4352b" /datum/barsign/thewretchedhive name = "The Wretched Hive" - icon = "thewretchedhive" + icon_state = "thewretchedhive" desc = "Legally obligated to instruct you to check your drinks for acid before consumption." neon_color = "#26b000" /datum/barsign/robustacafe name = "The Robusta Cafe" - icon = "robustacafe" + icon_state = "robustacafe" desc = "Holder of the 'Most Lethal Barfights' record 5 years uncontested." neon_color = "#c45f7a" /datum/barsign/emergencyrumparty name = "The Emergency Rum Party" - icon = "emergencyrumparty" + icon_state = "emergencyrumparty" desc = "Recently relicensed after a long closure." neon_color = "#f90011" /datum/barsign/combocafe name = "The Combo Cafe" - icon = "combocafe" + icon_state = "combocafe" desc = "Renowned system-wide for their utterly uncreative drink combinations." neon_color = "#33ca40" /datum/barsign/vladssaladbar name = "Vlad's Salad Bar" - icon = "vladssaladbar" + icon_state = "vladssaladbar" desc = "Under new management. Vlad was always a bit too trigger happy with that shotgun." neon_color = "#306900" /datum/barsign/theshaken name = "The Shaken" - icon = "theshaken" + icon_state = "theshaken" desc = "This establishment does not serve stirred drinks." neon_color = "#dcd884" /datum/barsign/thealenath name = "The Ale' Nath" - icon = "thealenath" + icon_state = "thealenath" desc = "All right, buddy. I think you've had EI NATH. Time to get a cab." neon_color = "#ed0000" /datum/barsign/thealohasnackbar name = "The Aloha Snackbar" - icon = "alohasnackbar" + icon_state = "alohasnackbar" desc = "A tasteful, inoffensive tiki bar sign." neon_color = "" /datum/barsign/thenet name = "The Net" - icon = "thenet" + icon_state = "thenet" desc = "You just seem to get caught up in it for hours." neon_color = "#0e8a00" /datum/barsign/maidcafe name = "Maid Cafe" - icon = "maidcafe" + icon_state = "maidcafe" desc = "Welcome back, master!" neon_color = "#ff0051" /datum/barsign/the_lightbulb name = "The Lightbulb" - icon = "the_lightbulb" + icon_state = "the_lightbulb" desc = "A cafe popular among moths and moffs. Once shut down for a week after the bartender used mothballs to protect her spare uniforms." neon_color = "#faff82" /datum/barsign/goose name = "The Loose Goose" - icon = "goose" + icon_state = "goose" desc = "Drink till you puke and/or break the laws of reality!" neon_color = "#00cc33" +/datum/barsign/maltroach + name = "Maltroach" + icon_state = "maltroach" + desc = "Mothroaches politely greet you into the bar, or are they greeting eachother?" + neon_color = "#649e8a" + +/datum/barsign/rock_bottom + name = "Rock Bottom" + icon_state = "rock-bottom" + desc = "When it feels like you're stuck in a pit, might as well have a drink." + neon_color = "#aa2811" + +/datum/barsign/orangejuice + name = "Oranges' Juicery" + icon_state = "orangejuice" + desc = "For those who wish to be optimally tactful to the non-alcoholic population." + neon_color = COLOR_ORANGE + +/datum/barsign/tearoom + name = "Little Treats Tea Room" + icon_state = "little_treats" + desc = "A delightfully relaxing tearoom for all the fancy lads in the cosmos." + neon_color = COLOR_LIGHT_ORANGE + +/datum/barsign/assembly_line + name = "The Assembly Line" + icon_state = "the-assembly-line" + desc = "Where every drink is masterfully crafted with industrial efficiency!" + neon_color = "#ffffff" + +/datum/barsign/bargonia + name = "Bargonia" + icon_state = "bargonia" + desc = "The warehouse yearns for a higher calling... so Supply has declared BARGONIA!" + neon_color = COLOR_WHITE + +/datum/barsign/cult_cove + name = "Cult Cove" + icon_state = "cult-cove" + desc = "Nar'Sie's favourite retreat" + neon_color = COLOR_RED + +/datum/barsign/neon_flamingo + name = "Neon Flamingo" + icon_state = "neon-flamingo" + desc = "A bus for all but the flamboyantly challenged." + neon_color = COLOR_PINK + +/datum/barsign/slowdive + name = "Slowdive" + icon_state = "slowdive" + desc = "First stop out of hell, last stop before heaven." + neon_color = COLOR_RED + // Hidden signs list below this point /datum/barsign/hiddensigns @@ -398,19 +485,19 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) /datum/barsign/hiddensigns/empbarsign name = "EMP'd" - icon = "empbarsign" + icon_state = "empbarsign" desc = "Something has gone very wrong." rename_area = FALSE /datum/barsign/hiddensigns/syndibarsign name = "Syndi Cat" - icon = "syndibarsign" + icon_state = "syndibarsign" desc = "Syndicate or die." neon_color = "#ff0000" /datum/barsign/hiddensigns/signoff name = "Off" - icon = "empty" + icon_state = "empty" desc = "This sign doesn't seem to be on." rename_area = FALSE light_mask = FALSE @@ -418,5 +505,34 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) // For other locations that aren't in the main bar /obj/machinery/barsign/all_access req_access = null + disassemble_result = /obj/item/wallframe/barsign/all_access MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign/all_access, 32) + +/obj/item/wallframe/barsign + name = "bar sign frame" + desc = "Used to help draw the rabble into your bar. Some assembly required." + icon = 'icons/obj/machines/wallmounts.dmi' + icon_state = "barsign" + result_path = /obj/machinery/barsign + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT, + ) + pixel_shift = 32 + +/obj/item/wallframe/barsign/Initialize(mapload) + . = ..() + desc += " Can be registered with a set of [span_bold("station blueprints")] to associate the sign with the area it occupies." + +/obj/item/wallframe/barsign/try_build(turf/on_wall, mob/user) + . = ..() + if(!.) + return . + + if(isopenturf(get_step(on_wall, EAST))) //This takes up 2 tiles so we want to make sure we have two tiles to hang it from. + balloon_alert(user, "needs more support!") + return FALSE + +/obj/item/wallframe/barsign/all_access + desc = "Used to help draw the rabble into your bar. Some assembly required. This one doesn't have an access lock." + result_path = /obj/machinery/barsign/all_access diff --git a/code/game/machinery/botlaunchpad.dm b/code/game/machinery/botlaunchpad.dm index f77e11151e03e8..0744954257a3c3 100644 --- a/code/game/machinery/botlaunchpad.dm +++ b/code/game/machinery/botlaunchpad.dm @@ -7,12 +7,13 @@ // ID of the console, used for linking up var/id = "botlauncher" var/obj/item/botpad_remote/connected_remote - var/mob/living/simple_animal/bot/launched_bot // we need this to recall the bot + var/datum/weakref/launched_bot // we need this to recall the bot /obj/machinery/botpad/Destroy() if(connected_remote) connected_remote.connected_botpad = null connected_remote = null + launched_bot = null return ..() /obj/machinery/botpad/screwdriver_act(mob/user, obj/item/tool) @@ -28,40 +29,42 @@ var/obj/item/multitool/multitool = tool multitool.set_buffer(src) balloon_alert(user, "saved to multitool buffer") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS // Checks the turf for a bot and launches it if it's the only mob on the pad. /obj/machinery/botpad/proc/launch(mob/living/user) var/turf/reverse_turf = get_turf(user) - var/bot_count = 0 - var/possible_bot - for(var/atom/movable/ROI in get_turf(src)) - if(ismob(ROI)) - if(istype(ROI, /mob/living/simple_animal/bot)) - bot_count += 1 // this counts the number of bots so we don't launch if there multiple bots. - possible_bot = ROI // We don't change the launched_bot var here because we are not sure if there is another bot on the pad. - else - user?.balloon_alert(user, "unidentified life form on the pad!") - return - if(bot_count == 1) - launched_bot = possible_bot - podspawn(list( - "target" = get_turf(src), - "path" = /obj/structure/closet/supplypod/botpod, - "style" = STYLE_SEETHROUGH, - "reverse_dropoff_coords" = list(reverse_turf.x, reverse_turf.y, reverse_turf.z) - )) - use_power(active_power_usage) - else - user?.balloon_alert(user, "too many bots on the pad!") + var/atom/possible_bot + for(var/mob/living/robot in get_turf(src)) + if(!isbot(robot)) + user.balloon_alert(user, "unidentified life form on the pad!") + return + if(!isnull(possible_bot)) + user.balloon_alert(user, "too many bots on the pad!") + return + possible_bot = robot // We don't change the launched_bot var here because we are not sure if there is another bot on the pad. + launched_bot = WEAKREF(possible_bot) + podspawn(list( + "target" = get_turf(src), + "path" = /obj/structure/closet/supplypod/botpod, + "style" = STYLE_SEETHROUGH, + "reverse_dropoff_coords" = list(reverse_turf.x, reverse_turf.y, reverse_turf.z) + )) + use_power(active_power_usage) /obj/machinery/botpad/proc/recall(mob/living/user) - if(!launched_bot) - user?.balloon_alert(user, "no bots detected on the pad!") + var/atom/our_bot = launched_bot?.resolve() + if(isnull(our_bot)) + user.balloon_alert(user, "no bots sent from the pad!") return - user?.balloon_alert(user, "bot sent back to pad") - launched_bot.call_bot(src, get_turf(src)) + user.balloon_alert(user, "bot sent back to pad") + if(isbasicbot(our_bot)) + var/mob/living/basic/bot/basic_bot = our_bot + basic_bot.summon_bot(src) + return + var/mob/living/simple_animal/bot/simple_bot = our_bot + simple_bot.call_bot(src, get_turf(src)) /obj/structure/closet/supplypod/botpod style = STYLE_SEETHROUGH diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 42f28a8b3ee299..213c43b5a118ef 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -6,7 +6,6 @@ use_power = ACTIVE_POWER_USE active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 0.02 layer = WALL_OBJ_LAYER - plane = GAME_PLANE_UPPER resistance_flags = FIRE_PROOF damage_deflection = 12 armor_type = /datum/armor/machinery_camera @@ -116,6 +115,11 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/xray, 0) /obj/machinery/camera/proc/create_prox_monitor() if(!proximity_monitor) proximity_monitor = new(src, 1) + RegisterSignal(proximity_monitor, COMSIG_QDELETING, PROC_REF(proximity_deleted)) + +/obj/machinery/camera/proc/proximity_deleted() + SIGNAL_HANDLER + proximity_monitor = null /obj/machinery/camera/proc/set_area_motion(area/A) area_motion = A @@ -342,7 +346,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/xray, 0) return // OTHER - if(istype(attacking_item, /obj/item/modular_computer/pda)) + if(istype(attacking_item, /obj/item/modular_computer)) var/itemname = "" var/info = "" @@ -440,7 +444,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/xray, 0) toggle_cam(null, 0) /obj/machinery/camera/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(disassembled) var/obj/structure/camera_assembly/assembly = assembly_ref?.resolve() if(!assembly) diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index 786a2c3a39a7eb..9e84b287f97742 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -5,7 +5,7 @@ /obj/item/wallframe/camera name = "camera assembly" - desc = "The basic construction for Nanotrasen-Always-Watching-You cameras." + desc = "The basic construction for Symphionia-Always-Watching-You cameras." icon = 'icons/obj/machines/camera.dmi' icon_state = "cameracase" custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT * 4, /datum/material/glass= SMALL_MATERIAL_AMOUNT * 2.5) @@ -14,7 +14,7 @@ /obj/structure/camera_assembly name = "camera assembly" - desc = "The basic construction for Nanotrasen-Always-Watching-You cameras." + desc = "The basic construction for Symphionia-Always-Watching-You cameras." icon = 'icons/obj/machines/camera.dmi' icon_state = "camera_assembly" max_integrity = 150 @@ -269,7 +269,7 @@ /obj/structure/camera_assembly/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/stack/sheet/iron(loc) qdel(src) diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index f73a786865cbf8..ec01c2365f87de 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -8,8 +8,7 @@ /obj/machinery/camera/process() // motion camera event loop if(!isMotion()) - . = PROCESS_KILL - return + return PROCESS_KILL if(machine_stat & EMPED) return if (detectTime > 0) diff --git a/code/game/machinery/camera/trackable.dm b/code/game/machinery/camera/trackable.dm index 8aedd1b80a847b..884f38f750bc51 100644 --- a/code/game/machinery/camera/trackable.dm +++ b/code/game/machinery/camera/trackable.dm @@ -26,7 +26,7 @@ tracking_holder = source RegisterSignal(tracking_holder, COMSIG_MOB_RESET_PERSPECTIVE, PROC_REF(cancel_target_tracking)) -/datum/trackable/Destroy(force, ...) +/datum/trackable/Destroy(force) tracking_holder = null tracked_mob = null STOP_PROCESSING(SSprocessing, src) diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 92968aa1dd444e..8d3e4b3e661289 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -9,7 +9,7 @@ var/obj/item/stock_parts/cell/charging = null var/charge_rate = 250 -/* OVERWRITTEN IN modular_skyrat\modules\aesthetics\cells\cell.dm +/* OVERWRITTEN IN modular_nova\modules\aesthetics\cells\cell.dm /obj/machinery/cell_charger/update_overlays() . = ..() @@ -41,7 +41,7 @@ return FALSE if(default_unfasten_wrench(user, tool)) update_appearance() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/cell_charger/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/stock_parts/cell) && !panel_open) @@ -54,12 +54,12 @@ if(charging) to_chat(user, span_warning("There is already a cell in the charger!")) return - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION var/obj/item/stock_parts/cell/inserting_cell = W if(inserting_cell.chargerate <= 0) to_chat(user, span_warning("[inserting_cell] cannot be recharged!")) return - //SKYRAT EDIT END + //NOVA EDIT END else var/area/a = loc.loc // Gets our locations location, like a dream within a dream if(!isarea(a)) diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm index 042f442fa332e6..a9954a71f126b0 100644 --- a/code/game/machinery/computer/_computer.dm +++ b/code/game/machinery/computer/_computer.dm @@ -6,7 +6,7 @@ max_integrity = 200 integrity_failure = 0.5 armor_type = /datum/armor/machinery_computer - interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_SET_MACHINE|INTERACT_MACHINE_REQUIRES_LITERACY + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_REQUIRES_LITERACY /// How bright we are when turned on. var/brightness_on = 1 /// Icon_state of the keyboard overlay. @@ -63,7 +63,7 @@ /obj/machinery/computer/screwdriver_act(mob/living/user, obj/item/I) if(..()) return TRUE - if(circuit && !(flags_1&NODECONSTRUCT_1)) + if(circuit && !(obj_flags & NO_DECONSTRUCTION)) to_chat(user, span_notice("You start to disconnect the monitor...")) if(I.use_tool(src, user, time_to_unscrew, volume=50)) deconstruct(TRUE, user) @@ -100,7 +100,7 @@ /obj/machinery/computer/deconstruct(disassembled = TRUE, mob/user) on_deconstruction() - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(circuit) //no circuit, no computer frame var/obj/structure/frame/computer/A = new /obj/structure/frame/computer(src.loc) A.setDir(dir) @@ -135,11 +135,11 @@ /obj/machinery/computer/ui_interact(mob/user, datum/tgui/ui) SHOULD_CALL_PARENT(TRUE) - //SKYRAT EDIT ADDITON BEGIN - AESTHETICS + //NOVA EDIT ADDITON BEGIN - AESTHETICS if(clicksound && world.time > next_clicksound && isliving(user)) next_clicksound = world.time + rand(50, 150) playsound(src, get_sfx_skyrat(clicksound), clickvol) - //SKYRAT EDIT END + //NOVA EDIT END . = ..() update_use_power(ACTIVE_POWER_USE) diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index 2bc13e156d441d..2ddbb3baadd31c 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -60,7 +60,7 @@ to_chat(usr, span_notice("Reconstruction in progress. This will take several minutes.")) playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 25, FALSE) restoring = TRUE - occupier.notify_ghost_cloning("Your core files are being restored!", source = src) + occupier.notify_revival("Your core files are being restored!", source = src) . = TRUE /obj/machinery/computer/aifixer/proc/Fix() diff --git a/code/game/machinery/computer/arcade/arcade.dm b/code/game/machinery/computer/arcade/arcade.dm index 58a7280e8643e9..b9e8bd9d1e9e4b 100644 --- a/code/game/machinery/computer/arcade/arcade.dm +++ b/code/game/machinery/computer/arcade/arcade.dm @@ -77,7 +77,7 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list( icon_keyboard = null icon_screen = "invaders" light_color = LIGHT_COLOR_GREEN - interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_SET_MACHINE // we don't need to be literate to play video games fam + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON var/list/prize_override /obj/machinery/computer/arcade/proc/Reset() @@ -157,6 +157,8 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list( icon_state = "arcade" circuit = /obj/item/circuitboard/computer/arcade/battle + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_SET_MACHINE // we don't need to be literate to play video games fam + var/enemy_name = "Space Villain" ///Enemy health/attack points var/enemy_hp = 100 @@ -693,4 +695,4 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list( /obj/machinery/computer/arcade/amputation/festive //dispenses wrapped gifts instead of arcade prizes, also known as the ancap christmas tree name = "Mediborg's Festive Amputation Adventure" desc = "A picture of a blood-soaked medical cyborg wearing a Santa hat flashes on the screen. The mediborg has a speech bubble that says, \"Put your hand in the machine if you aren't a coward!\"" - prize_override = list(/obj/item/a_gift/anything = 1) + prize_override = list(/obj/item/gift/anything = 1) diff --git a/code/game/machinery/computer/arcade/orion_event.dm b/code/game/machinery/computer/arcade/orion_event.dm index 97590059a526e4..f1050e9a8e2766 100644 --- a/code/game/machinery/computer/arcade/orion_event.dm +++ b/code/game/machinery/computer/arcade/orion_event.dm @@ -172,7 +172,7 @@ game.say("A new floor suddenly appears around [game]. What the hell?") playsound(game, 'sound/weapons/genhit.ogg', 100, TRUE) for(var/turf/open/space/fixed in orange(1, game)) - fixed.PlaceOnTop(/turf/open/floor/plating) + fixed.place_on_top(/turf/open/floor/plating) #define BUTTON_EXPLORE_SHIP "Explore Ship" #define BUTTON_LEAVE_THE_DERELICT "Leave the Derelict" diff --git a/code/game/machinery/computer/arena.dm b/code/game/machinery/computer/arena.dm index 39b39af197b61f..97d89c2414076d 100644 --- a/code/game/machinery/computer/arena.dm +++ b/code/game/machinery/computer/arena.dm @@ -21,6 +21,9 @@ /// Controller for admin event arenas /obj/machinery/computer/arena name = "arena controller" + + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_SET_MACHINE|INTERACT_MACHINE_REQUIRES_LITERACY + /// Arena ID var/arena_id = ARENA_DEFAULT_ID /// Enables/disables spawning @@ -362,7 +365,7 @@ /// Arena spawnpoint /obj/machinery/arena_spawn name = "Arena Spawnpoint" - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/machines/beacon.dmi' icon_state = "syndbeacon" resistance_flags = INDESTRUCTIBLE /// In case we have multiple arena controllers at once. diff --git a/code/game/machinery/computer/atmos_computers/_air_sensor.dm b/code/game/machinery/computer/atmos_computers/_air_sensor.dm index 8d56b8a2f9052e..3a8cd36de89988 100644 --- a/code/game/machinery/computer/atmos_computers/_air_sensor.dm +++ b/code/game/machinery/computer/atmos_computers/_air_sensor.dm @@ -112,7 +112,7 @@ multi_tool.set_buffer(src) balloon_alert(user, "sensor added to buffer") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /** * A portable version of the /obj/machinery/air_sensor @@ -207,23 +207,22 @@ /obj/item/air_sensor/wrench_act(mob/living/user, obj/item/tool) if(default_unfasten_wrench(user, tool) == SUCCESSFUL_UNFASTEN) - return TOOL_ACT_TOOLTYPE_SUCCESS - return + return ITEM_INTERACT_SUCCESS /obj/item/air_sensor/welder_act(mob/living/user, obj/item/tool) if(!tool.tool_start_check(user, amount = 1)) - return + return ITEM_INTERACT_BLOCKING loc.balloon_alert(user, "dismantling sensor") if(!tool.use_tool(src, user, 2 SECONDS, volume = 30, amount = 1)) - return + return ITEM_INTERACT_BLOCKING loc.balloon_alert(user, "sensor dismanteled") deconstruct(TRUE) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/item/air_sensor/deconstruct(disassembled) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/analyzer(loc) new /obj/item/stack/sheet/iron(loc, 1) return ..() diff --git a/code/game/machinery/computer/atmos_computers/_atmos_control.dm b/code/game/machinery/computer/atmos_computers/_atmos_control.dm index 57403a27d3d2d6..094f12e36e36af 100644 --- a/code/game/machinery/computer/atmos_computers/_atmos_control.dm +++ b/code/game/machinery/computer/atmos_computers/_atmos_control.dm @@ -99,7 +99,7 @@ //register the sensor's unique ID with it's assositated chamber connected_sensors[sensor.chamber_id] = sensor.id_tag user.balloon_alert(user, "sensor connected to [src]") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS return diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index d8821349a1fa1f..0914d91739bad0 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -195,10 +195,10 @@ var/obj/machinery/new_machine = new circuit.build_path(loc) new_machine.setDir(dir) transfer_fingerprints_to(new_machine) - // SKYRAT EDIT ADDITION BEGIN - Connecting Computers + // NOVA EDIT ADDITION BEGIN - Connecting Computers for(var/obj/machinery/computer/selected in range(1,src)) selected.update_overlays() - // SKYRAT EDIT ADDITION END - Connecting Computers + // NOVA EDIT ADDITION END - Connecting Computers if(istype(new_machine, /obj/machinery/computer)) var/obj/machinery/computer/new_computer = new_machine @@ -230,7 +230,7 @@ return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation /obj/structure/frame/computer/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(state == 4) new /obj/item/shard(drop_location()) new /obj/item/shard(drop_location()) @@ -245,7 +245,7 @@ /obj/structure/frame/computer/rcd/Initialize(mapload) name = "computer frame" - icon = 'icons/obj/assemblies/stock_parts.dmi' + icon = 'icons/obj/devices/stock_parts.dmi' icon_state = "0" . = ..() diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 6bc5c6f60d2fca..a1a1fe0ada2a96 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -19,7 +19,7 @@ /// All the plane masters that need to be applied. var/atom/movable/screen/background/cam_background - interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_SET_MACHINE|INTERACT_MACHINE_REQUIRES_SIGHT + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_REQUIRES_SIGHT /obj/machinery/computer/security/Initialize(mapload) . = ..() diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index 870f64dd57584a..a2b1b30183b26f 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -24,7 +24,7 @@ ///Should we supress any view changes? var/should_supress_view_changes = TRUE - interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_SET_MACHINE | INTERACT_MACHINE_REQUIRES_SIGHT + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_REQUIRES_SIGHT /obj/machinery/computer/camera_advanced/Initialize(mapload) . = ..() @@ -74,29 +74,28 @@ CRASH("[type] does not implement ai eye handling") /obj/machinery/computer/camera_advanced/remove_eye_control(mob/living/user) - if(!user) + if(isnull(user?.client)) return - for(var/V in actions) - var/datum/action/A = V - A.Remove(user) - for(var/V in eyeobj.visibleCameraChunks) - var/datum/camerachunk/C = V - C.remove(eyeobj) - if(user.client) - user.reset_perspective(null) - if(eyeobj.visible_icon && user.client) - user.client.images -= eyeobj.user_image - user.client.view_size.unsupress() + + for(var/datum/action/actions_removed as anything in actions) + actions_removed.Remove(user) + for(var/datum/camerachunk/camerachunks_gone as anything in eyeobj.visibleCameraChunks) + camerachunks_gone.remove(eyeobj) + + user.reset_perspective(null) + if(eyeobj.visible_icon) + user.client.images -= eyeobj.user_image + user.client.view_size.unsupress() eyeobj.eye_user = null user.remote_control = null current_user = null - user.unset_machine() + unset_machine(user) playsound(src, 'sound/machines/terminal_off.ogg', 25, FALSE) /obj/machinery/computer/camera_advanced/check_eye(mob/user) if(!can_use(user) || (issilicon(user) && !user.has_unlimited_silicon_privilege)) - user.unset_machine() + unset_machine(user) /obj/machinery/computer/camera_advanced/Destroy() if(eyeobj) @@ -105,7 +104,7 @@ current_user = null return ..() -/obj/machinery/computer/camera_advanced/on_unset_machine(mob/M) +/obj/machinery/computer/camera_advanced/proc/unset_machine(mob/M) if(M == current_user) remove_eye_control(M) @@ -123,6 +122,8 @@ return if(!can_use(user)) return + if(isnull(user.client)) + return if(current_user) to_chat(user, span_warning("The console is already in use!")) return @@ -155,7 +156,7 @@ give_eye_control(L) eyeobj.setLoc(camera_location) else - user.unset_machine() + unset_machine(user) else give_eye_control(L) eyeobj.setLoc(eyeobj.loc) @@ -167,6 +168,8 @@ return //AIs would need to disable their own camera procs to use the console safely. Bugs happen otherwise. /obj/machinery/computer/camera_advanced/proc/give_eye_control(mob/user) + if(isnull(user?.client)) + return GrantActions(user) current_user = user eyeobj.eye_user = user diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index f32eff91c4e524..8574ca15c42ab4 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -5,13 +5,13 @@ #define STATE_CHANGING_STATUS "changing_status" #define STATE_MAIN "main" #define STATE_MESSAGES "messages" -//SKYRAT EDIT ADDITION +//NOVA EDIT ADDITION GLOBAL_VAR_INIT(cops_arrived, FALSE) #define EMERGENCY_RESPONSE_POLICE "WOOP WOOP THAT'S THE SOUND OF THE POLICE" #define EMERGENCY_RESPONSE_ATMOS "DISCO INFERNO" #define EMERGENCY_RESPONSE_EMT "AAAAAUGH, I'M DYING, I NEEEEEEEEEED A MEDIC BAG" #define EMERGENCY_RESPONSE_EMAG "AYO THE PIZZA HERE" -//SKYRAT EDIT END +//NOVA EDIT END // The communications computer /obj/machinery/computer/communications @@ -118,11 +118,11 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) return TRUE return authenticated -/// Skyrat Edit Start - Are we the AI? +/// NOVA EDIT Start - Are we the AI? /obj/machinery/computer/communications/proc/authenticated_as_ai_or_captain(mob/user) if (isAI(user)) return TRUE - return ACCESS_CAPTAIN in authorize_access //Skyrat Edit End + return ACCESS_CAPTAIN in authorize_access //NOVA EDIT End /obj/machinery/computer/communications/attackby(obj/I, mob/user, params) if(isidcard(I)) @@ -145,7 +145,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) caller_card.use_charge(user) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(summon_battlecruiser), caller_card.team), rand(20 SECONDS, 1 MINUTES)) playsound(src, 'sound/machines/terminal_alert.ogg', 50, FALSE) - priority_announce("Attention crew: deep-space sensors detect a Syndicate battlecruiser-class signature subspace rift forming near your station. Estimated time until arrival: three to five minutes.", "[command_name()] High-Priority Update") //SKYRAT EDIT ADDITION: announcement on battlecruiser call + priority_announce("Attention crew: deep-space sensors detect a Syndicate battlecruiser-class signature subspace rift forming near your station. Estimated time until arrival: three to five minutes.", "[command_name()] High-Priority Update") //NOVA EDIT ADDITION: announcement on battlecruiser call return TRUE if(obj_flags & EMAGGED) @@ -215,7 +215,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) return var/new_sec_level = SSsecurity_level.text_level_to_number(params["newSecurityLevel"]) - if (new_sec_level < SEC_LEVEL_GREEN || new_sec_level > SEC_LEVEL_AMBER) //SKYRAT EDIT CHANGE - ALERTS + if (new_sec_level < SEC_LEVEL_GREEN || new_sec_level > SEC_LEVEL_AMBER) //NOVA EDIT CHANGE - ALERTS return if (SSsecurity_level.get_current_level_as_number() == new_sec_level) return @@ -243,7 +243,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) return make_announcement(usr) if ("messageAssociates") - if (!authenticated_as_ai_or_captain(usr)) //Skyrat edit | Allows AI and Captain to send messages + if (!authenticated_as_ai_or_captain(usr)) //NOVA EDIT | Allows AI and Captain to send messages return if (!COOLDOWN_FINISHED(src, important_action_cooldown)) return @@ -404,7 +404,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) post_status("alert", "bluealert") if(SEC_LEVEL_GREEN) post_status("alert", "greenalert") - // SKYRAT EDIT ADD START - Alert Levels + // NOVA EDIT ADD START - Alert Levels if(SEC_LEVEL_VIOLET) post_status("alert", "violetalert") if(SEC_LEVEL_ORANGE) @@ -413,7 +413,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) post_status("alert", "amberalert") if(SEC_LEVEL_GAMMA) post_status("alert", "gammaalert") - // SKYRAT EDIT ADD END - Alert Levels + // NOVA EDIT ADD END - Alert Levels else post_status("alert", picture) @@ -482,7 +482,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) SSjob.safe_code_requested = TRUE SSjob.safe_code_timer_id = addtimer(CALLBACK(SSjob, TYPE_PROC_REF(/datum/controller/subsystem/job, send_spare_id_safe_code), pod_location), 120 SECONDS, TIMER_UNIQUE | TIMER_STOPPABLE) minor_announce("Due to staff shortages, your station has been approved for delivery of access codes to secure the Captain's Spare ID. Delivery via drop pod at [get_area(pod_location)]. ETA 120 seconds.") - // SKYRAT EDIT ADDITION START + // NOVA EDIT ADDITION START if ("callThePolice") if(!pre_911_check(usr)) return @@ -521,7 +521,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) toggle_eng_override() usr.log_message("enabled airlock engineering override.", LOG_GAME) deadchat_broadcast(" enabled airlock engineering override at [span_name("[get_area_name(usr, TRUE)]")].", span_name("[usr.real_name]"), usr, message_type = DEADCHAT_ANNOUNCEMENT) - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END /obj/machinery/computer/communications/proc/emergency_access_cooldown(mob/user) if(toggle_uses == toggle_max_uses) //you have used up free uses already, do it one more time and start a cooldown to_chat(user, span_warning("This was your last free use without cooldown, you will not be able to use this again for [DisplayTimeText(EMERGENCY_ACCESS_COOLDOWN)].")) @@ -552,9 +552,9 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) if(SScommunications.soft_filtering) payload["is_filtered"] = TRUE - var/name_to_send = "[CONFIG_GET(string/cross_comms_name)]([station_name()])" //SKYRAT EDIT ADDITION + var/name_to_send = "[CONFIG_GET(string/cross_comms_name)]([station_name()])" //NOVA EDIT ADDITION - send2otherserver(html_decode(name_to_send), message, "Comms_Console", destination == "all" ? null : list(destination), additional_data = payload) //SKYRAT EDIT END + send2otherserver(html_decode(name_to_send), message, "Comms_Console", destination == "all" ? null : list(destination), additional_data = payload) //NOVA EDIT END minor_announce(message, title = "Outgoing message to allied station") usr.log_talk(message, LOG_SAY, tag = "message to the other server") message_admins("[ADMIN_LOOKUPFLW(usr)] has sent a message to the other server\[s].") @@ -603,7 +603,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) data["canSendToSectors"] = FALSE data["canSetAlertLevel"] = FALSE data["canToggleEmergencyAccess"] = FALSE - data["canToggleEngineeringOverride"] = FALSE //SKYRAT EDIT - Engineering Override + data["canToggleEngineeringOverride"] = FALSE //NOVA EDIT - Engineering Override data["importantActionReady"] = COOLDOWN_FINISHED(src, important_action_cooldown) data["shuttleCalled"] = FALSE data["shuttleLastCalled"] = FALSE @@ -635,8 +635,8 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) if (authenticated_as_silicon_or_captain(user)) data["canToggleEmergencyAccess"] = TRUE data["emergencyAccess"] = GLOB.emergency_access - data["canToggleEngineeringOverride"] = TRUE //SKYRAT EDIT - Engineering Override Toggle - data["engineeringOverride"] = GLOB.force_eng_override //SKYRAT EDIT - Engineering Override Toggle + data["canToggleEngineeringOverride"] = TRUE //NOVA EDIT - Engineering Override Toggle + data["engineeringOverride"] = GLOB.force_eng_override //NOVA EDIT - Engineering Override Toggle data["alertLevelTick"] = alert_level_tick data["canMakeAnnouncement"] = TRUE data["canSetAlertLevel"] = issilicon(user) ? "NO_SWIPE_NEEDED" : "SWIPE_NEEDED" @@ -644,7 +644,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) data["canMakeAnnouncement"] = TRUE if (authenticated_as_ai_or_captain(user)) - data["canMessageAssociates"] = TRUE //Skyrat Edit | Allows AI to report to CC in the event of there being no command alive/to begin with + data["canMessageAssociates"] = TRUE //NOVA EDIT | Allows AI to report to CC in the event of there being no command alive/to begin with if (SSshuttle.emergency.mode != SHUTTLE_IDLE && SSshuttle.emergency.mode != SHUTTLE_RECALL) data["shuttleCalled"] = TRUE @@ -931,7 +931,6 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) hacker.log_message("hacked a communications console, resulting in: [picked_option].", LOG_GAME, log_globally = TRUE) switch(picked_option) if(HACK_PIRATE) // Triggers pirates, which the crew may be able to pay off to prevent - var/datum/game_mode/dynamic/dynamic = SSticker.mode var/list/pirate_rulesets = list( /datum/dynamic_ruleset/midround/pirates, /datum/dynamic_ruleset/midround/dangerous_pirates, @@ -940,7 +939,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) "Attention crew: sector monitoring reports a massive jump-trace from an enemy vessel destined for your system. Prepare for imminent hostile contact.", "[command_name()] High-Priority Update", ) - dynamic.picking_specific_rule(pick(pirate_rulesets), forced = TRUE, ignore_cost = TRUE) + SSdynamic.picking_specific_rule(pick(pirate_rulesets), forced = TRUE, ignore_cost = TRUE) if(HACK_FUGITIVES) // Triggers fugitives, which can cause confusion / chaos as the crew decides which side help priority_announce( @@ -961,22 +960,20 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) continue shake_camera(crew_member, 15, 1) - var/datum/game_mode/dynamic/dynamic = SSticker.mode - dynamic.unfavorable_situation() + SSdynamic.unfavorable_situation() 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 - var/datum/game_mode/dynamic/dynamic = SSticker.mode var/max_number_of_sleepers = clamp(round(length(GLOB.alive_player_list) / 20), 1, 3) var/num_agents_created = 0 for(var/num_agents in 1 to rand(1, max_number_of_sleepers)) - if(!dynamic.picking_specific_rule(sleeper_agent_type, forced = TRUE, ignore_cost = TRUE)) + if(!SSdynamic.picking_specific_rule(sleeper_agent_type, forced = TRUE, ignore_cost = TRUE)) break num_agents_created++ if(num_agents_created <= 0) // We failed to run any midround sleeper agents, so let's be patient and run latejoin traitor - dynamic.picking_specific_rule(/datum/dynamic_ruleset/latejoin/infiltrator, forced = TRUE, ignore_cost = TRUE) + SSdynamic.picking_specific_rule(/datum/dynamic_ruleset/latejoin/infiltrator, forced = TRUE, ignore_cost = TRUE) else // We spawned some sleeper agents, nice - give them a report to kickstart the paranoia @@ -1021,9 +1018,9 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) #undef STATE_MAIN #undef STATE_MESSAGES -//SKYRAT EDIT ADDITION +//NOVA EDIT ADDITION #undef EMERGENCY_RESPONSE_POLICE #undef EMERGENCY_RESPONSE_ATMOS #undef EMERGENCY_RESPONSE_EMT #undef EMERGENCY_RESPONSE_EMAG -//SKYRAT EDIT END +//NOVA EDIT END diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index bc4a4ecabed14e..a2b5db099e920e 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -44,7 +44,7 @@ . += create_table_notices(list( "name", "job", - "is_robot", //SKYRAT EDIT ADDITION - Displaying robotic species Icon + "is_robot", //NOVA EDIT ADDITION - Displaying robotic species Icon "life_status", "suffocation", "toxin", @@ -65,7 +65,7 @@ var/list/entry = list() entry["name"] = player_record["name"] entry["job"] = player_record["assignment"] - entry["is_robot"] = player_record["is_robot"] //SKYRAT EDIT ADDITION - Displaying robotic species Icon + entry["is_robot"] = player_record["is_robot"] //NOVA EDIT ADDITION - Displaying robotic species Icon entry["life_status"] = player_record["life_status"] entry["suffocation"] = player_record["oxydam"] entry["toxin"] = player_record["toxdam"] @@ -108,7 +108,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) JOB_SECURITY_OFFICER_SCIENCE = 15, JOB_SECURITY_OFFICER_SUPPLY = 16, */ - JOB_CORRECTIONS_OFFICER = 13, // SKYRAT EDIT ADDITION + JOB_CORRECTIONS_OFFICER = 13, // NOVA EDIT ADDITION JOB_DETECTIVE = 14, // 20-29: Medbay JOB_CHIEF_MEDICAL_OFFICER = 20, @@ -117,25 +117,25 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) JOB_MEDICAL_DOCTOR = 23, JOB_PARAMEDIC = 24, JOB_CORONER = 25, - JOB_ORDERLY = 26, // SKYRAT EDIT ADDITION - JOB_PSYCHOLOGIST = 27, // SKYRAT EDIT - ORIGINAL: JOB_PSYCHOLOGIST = 71, + JOB_ORDERLY = 26, // NOVA EDIT ADDITION + JOB_PSYCHOLOGIST = 27, // NOVA EDIT - ORIGINAL: JOB_PSYCHOLOGIST = 71, // 30-39: Science JOB_RESEARCH_DIRECTOR = 30, JOB_SCIENTIST = 31, JOB_ROBOTICIST = 32, JOB_GENETICIST = 33, - JOB_SCIENCE_GUARD = 34, // SKYRAT EDIT ADDITION + JOB_SCIENCE_GUARD = 34, // NOVA EDIT ADDITION // 40-49: Engineering JOB_CHIEF_ENGINEER = 40, JOB_STATION_ENGINEER = 41, JOB_ATMOSPHERIC_TECHNICIAN = 42, - JOB_ENGINEERING_GUARD = 43, // SKYRAT EDIT ADDITION + JOB_ENGINEERING_GUARD = 43, // NOVA EDIT ADDITION // 50-59: Cargo JOB_QUARTERMASTER = 50, JOB_SHAFT_MINER = 51, JOB_CARGO_TECHNICIAN = 52, JOB_BITRUNNER = 53, - JOB_CUSTOMS_AGENT = 54, // SKYRAT EDIT ADDITION + JOB_CUSTOMS_AGENT = 54, // NOVA EDIT ADDITION // 60+: Civilian/other JOB_HEAD_OF_PERSONNEL = 60, JOB_BARTENDER = 61, @@ -147,8 +147,8 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) JOB_MIME = 67, JOB_JANITOR = 68, JOB_LAWYER = 69, - JOB_BARBER = 71, // SKYRAT EDIT ADDITION - JOB_BOUNCER = 72, // SKYRAT EDIT ADDITION + JOB_BARBER = 71, // NOVA EDIT ADDITION + JOB_BOUNCER = 72, // NOVA EDIT ADDITION // 200-239: Centcom JOB_CENTCOM_ADMIRAL = 200, JOB_CENTCOM = 201, @@ -166,8 +166,8 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) JOB_ERT_CHAPLAIN = 225, JOB_ERT_JANITOR = 226, JOB_ERT_DEATHSQUAD = 227, - JOB_NT_REP = 230, // SKYRAT EDIT ADDITION - JOB_BLUESHIELD = 231, // SKYRAT EDIT ADDITION + JOB_NT_REP = 230, // NOVA EDIT ADDITION + JOB_BLUESHIELD = 231, // NOVA EDIT ADDITION // ANYTHING ELSE = UNKNOWN_JOB_ID, Unknowns/custom jobs will appear after civilians, and before assistants JOB_ASSISTANT = 999, @@ -257,10 +257,10 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) if (jobs[trim_assignment] != null) entry["ijob"] = jobs[trim_assignment] - // SKYRAT EDIT BEGIN: Checking for robotic race + // NOVA EDIT BEGIN: Checking for robotic race if (issynthetic(tracked_human)) entry["is_robot"] = TRUE - // SKYRAT EDIT END + // NOVA EDIT END // Binary living/dead status // Current status diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index 6502ecbf530d95..1fe999010b7d90 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -400,7 +400,6 @@ . = TRUE add_fingerprint(usr) - usr.set_machine(src) switch(action) // Connect this DNA Console to a nearby DNA Scanner @@ -711,11 +710,11 @@ var/datum/mutation/human/matched_mutation = null //Go through all sequences for matching gene, and set the mutation for (var/M in subtypesof(/datum/mutation/human)) - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION var/datum/mutation/human/iterating_mutation = M if(initial(iterating_mutation.disabled)) continue - // SKYRAT EDIT END + // NOVA EDIT END var/true_sequence = GET_SEQUENCE(M) if (new_sequence == true_sequence) matched_mutation = M diff --git a/code/game/machinery/computer/launchpad_control.dm b/code/game/machinery/computer/launchpad_control.dm index 5590297c54a3cb..13f54f27980911 100644 --- a/code/game/machinery/computer/launchpad_control.dm +++ b/code/game/machinery/computer/launchpad_control.dm @@ -79,20 +79,6 @@ return FALSE return TRUE -/// Performs checks on whether or not the launch pad can be used. -/// Returns `null` if there are no errors, otherwise will return the error string. -/obj/machinery/computer/launchpad/proc/teleport_checks(obj/machinery/launchpad/pad) - if(QDELETED(pad)) - return "ERROR: Launchpad not responding. Check launchpad integrity." - if(!pad.isAvailable()) - return "ERROR: Launchpad not operative. Make sure the launchpad is ready and powered." - if(pad.teleporting) - return "ERROR: Launchpad busy." - var/turf/pad_turf = get_turf(pad) - if(pad_turf && is_centcom_level(pad_turf.z)) - return "ERROR: Launchpad not operative. Heavy area shielding makes teleporting impossible." - return null - /obj/machinery/computer/launchpad/proc/get_pad(number) var/obj/machinery/launchpad/pad = launchpads[number] return pad @@ -168,7 +154,7 @@ selected_id = null . = TRUE if("launch") - var/checks = teleport_checks(current_pad) + var/checks = current_pad.teleport_checks() if(isnull(checks)) current_pad.doteleport(usr, TRUE) else @@ -176,7 +162,7 @@ . = TRUE if("pull") - var/checks = teleport_checks(current_pad) + var/checks = current_pad.teleport_checks() if(isnull(checks)) current_pad.doteleport(usr, FALSE) else diff --git a/code/game/machinery/computer/orders/order_computer/mining_order.dm b/code/game/machinery/computer/orders/order_computer/mining_order.dm index c680974e4c1a4b..75a5c980dfe48b 100644 --- a/code/game/machinery/computer/orders/order_computer/mining_order.dm +++ b/code/game/machinery/computer/orders/order_computer/mining_order.dm @@ -41,7 +41,7 @@ cost = get_total_cost(), \ contains = things_to_order, ) - var/datum/supply_order/new_order = new( + var/datum/supply_order/disposable/new_order = new( pack = mining_pack, orderer = purchaser, orderer_rank = "Mining Vendor", @@ -71,11 +71,11 @@ if(istype(weapon, /obj/item/mining_voucher)) redeem_voucher(weapon, user) return - //SKYRAT EDIT ADDITON BEGIN - SEVA + //NOVA EDIT ADDITON BEGIN - SEVA if(istype(weapon, /obj/item/suit_voucher)) redeem_suit_voucher(weapon, user) return - //SKYRAT EDIT ADDITON END + //NOVA EDIT ADDITON END return ..() /obj/machinery/computer/order_console/mining/update_icon_state() diff --git a/code/game/machinery/computer/orders/order_items/order_datum.dm b/code/game/machinery/computer/orders/order_items/order_datum.dm index e7bb3c35e56c9f..13684fc742b44d 100644 --- a/code/game/machinery/computer/orders/order_items/order_datum.dm +++ b/code/game/machinery/computer/orders/order_items/order_datum.dm @@ -22,7 +22,7 @@ if(!desc) desc = initial(item_path.desc) -/datum/orderable_item/Destroy(force, ...) +/datum/orderable_item/Destroy(force) if(item_path) qdel(item_path) return ..() diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm index 4cc32401704d28..e7dd2391b13dc3 100644 --- a/code/game/machinery/computer/pod.dm +++ b/code/game/machinery/computer/pod.dm @@ -162,7 +162,7 @@ /obj/machinery/computer/pod/old/syndicate name = "\improper ProComp Executive IIc" - desc = "The Syndicate operate on a tight budget. Operates external airlocks." + desc = "The Symphionia operate on a tight budget. Operates external airlocks." req_access = list(ACCESS_SYNDICATE) /obj/machinery/computer/pod/old/swf diff --git a/code/game/machinery/computer/prisoner/_prisoner.dm b/code/game/machinery/computer/prisoner/_prisoner.dm index 05bb4042c8be41..16369302c66920 100644 --- a/code/game/machinery/computer/prisoner/_prisoner.dm +++ b/code/game/machinery/computer/prisoner/_prisoner.dm @@ -1,52 +1,59 @@ /obj/machinery/computer/prisoner - var/obj/item/card/id/advanced/prisoner/contained_id + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_SET_MACHINE|INTERACT_MACHINE_REQUIRES_LITERACY + /// ID card currently inserted into the computer. + VAR_FINAL/obj/item/card/id/advanced/prisoner/contained_id + +/obj/machinery/computer/prisoner/deconstruct(disassembled, mob/user) + contained_id?.forceMove(drop_location()) + return ..() /obj/machinery/computer/prisoner/Destroy() - if(contained_id) - contained_id.forceMove(get_turf(src)) + QDEL_NULL(contained_id) return ..() +/obj/machinery/computer/prisoner/Exited(atom/movable/gone, direction) + . = ..() + if(gone == contained_id) + contained_id = null /obj/machinery/computer/prisoner/examine(mob/user) . = ..() if(contained_id) . += span_notice("Alt-click to eject the ID card.") - - /obj/machinery/computer/prisoner/AltClick(mob/user) - id_eject(user) - return ..() + . = ..() + if(user.can_perform_action(src, ALLOW_SILICON_REACH)) + id_eject(user) -/obj/machinery/computer/prisoner/proc/id_insert(mob/user, obj/item/card/id/advanced/prisoner/P) - if(istype(P)) - if(contained_id) - to_chat(user, span_warning("There's already an ID card in the console!")) - return - if(!user.transferItemToLoc(P, src)) - return - contained_id = P - user.visible_message(span_notice("[user] inserts an ID card into the console."), \ - span_notice("You insert the ID card into the console.")) - playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) - updateUsrDialog() +/obj/machinery/computer/prisoner/proc/id_insert(mob/user, obj/item/card/id/advanced/prisoner/new_id) + if(!istype(new_id)) + return + if(!isnull(contained_id)) + balloon_alert(user, "no empty slot!") + return + if(!user.transferItemToLoc(new_id, src)) + return + contained_id = new_id + balloon_alert_to_viewers("id inserted") + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) /obj/machinery/computer/prisoner/proc/id_eject(mob/user) - if(!contained_id) - to_chat(user, span_warning("There's no ID card in the console!")) + if(isnull(contained_id)) + balloon_alert(user, "no id!") return + + if(!issilicon(user) && Adjacent(user)) + user.put_in_hands(contained_id) else contained_id.forceMove(drop_location()) - if(!issilicon(user) && Adjacent(user)) - user.put_in_hands(contained_id) - contained_id = null - user.visible_message(span_notice("[user] gets an ID card from the console."), \ - span_notice("You get the ID card from the console.")) - playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) - updateUsrDialog() - -/obj/machinery/computer/prisoner/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/card/id/advanced/prisoner)) - id_insert(user, I) - else - return ..() + + balloon_alert_to_viewers("id ejected") + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + +/obj/machinery/computer/prisoner/attackby(obj/item/weapon, mob/user, params) + if(istype(weapon, /obj/item/card/id/advanced/prisoner)) + id_insert(user, weapon) + return TRUE + + return ..() diff --git a/code/game/machinery/computer/prisoner/management.dm b/code/game/machinery/computer/prisoner/management.dm index 7acac9b661053f..ada71bad023049 100644 --- a/code/game/machinery/computer/prisoner/management.dm +++ b/code/game/machinery/computer/prisoner/management.dm @@ -1,137 +1,97 @@ +/// List of all implants currently implanted into a mob +GLOBAL_LIST_EMPTY_TYPED(tracked_implants, /obj/item/implant) + /obj/machinery/computer/prisoner/management name = "prisoner management console" - desc = "Used to manage tracking implants placed inside criminals." + desc = "Used to modify prisoner IDs, as well as manage security implants placed inside convicts and parolees." icon_screen = "explosive" icon_keyboard = "security_key" req_access = list(ACCESS_BRIG) light_color = COLOR_SOFT_RED - var/id = 0 - var/temp = null - var/status = 0 - var/timeleft = 60 - var/stop = 0 - var/screen = 0 // 0 - No Access Denied, 1 - Access allowed circuit = /obj/item/circuitboard/computer/prisoner +/obj/machinery/computer/prisoner/management/ui_interact(mob/user, datum/tgui/ui) + . = ..() + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "PrisonerManagement") + ui.open() + +/obj/machinery/computer/prisoner/management/ui_data(mob/user) + var/list/data = list() + + data["authorized"] = (authenticated && isliving(user)) || isAdminGhostAI(user) || issilicon(user) + data["inserted_id"] = null + if(!isnull(contained_id)) + data["inserted_id"] = list( + "name" = contained_id.name, + "points" = contained_id.points, + "goal" = contained_id.goal, + ) + + var/list/implants = list() + for(var/obj/item/implant/implant as anything in GLOB.tracked_implants) + if(!implant.is_shown_on_console(src)) + continue + var/list/implant_data = list() + implant_data["info"] = implant.get_management_console_data() + implant_data["buttons"] = implant.get_management_console_buttons() + implant_data["category"] = initial(implant.name) + implant_data["ref"] = REF(implant) + UNTYPED_LIST_ADD(implants, implant_data) + data["implants"] = implants -/obj/machinery/computer/prisoner/management/ui_interact(mob/user) + return data + +/obj/machinery/computer/prisoner/management/ui_act(action, list/params) . = ..() - if(isliving(user)) - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) - var/dat = "" - if(screen == 0) - dat += "
{Log In}" - else if(screen == 1) - dat += "

Prisoner ID Management

" - if(contained_id) - dat += "[contained_id]
" - dat += "Collected Points: [contained_id.points]. Reset.
" - dat += "Card goal: [contained_id.goal]. Set
" - dat += "Space Law recommends quotas of 100 points per minute they would normally serve in the brig.
" - else - dat += "Insert Prisoner ID.
" - dat += "

Prisoner Implant Management

" - dat += "
Chemical Implants
" - var/turf/current_turf = get_turf(src) - for(var/obj/item/implant/chem/C in GLOB.tracked_chem_implants) - var/turf/implant_turf = get_turf(C) - if(!is_valid_z_level(current_turf, implant_turf)) - continue//Out of range - if(!C.imp_in) - continue - dat += "ID: [C.imp_in.name] | Remaining Units: [C.reagents.total_volume]
" - dat += "| Inject: " - dat += "((1))" - dat += "((5))" - dat += "((10))
" - dat += "********************************
" - dat += "
Tracking Implants
" - for(var/obj/item/implant/tracking/T in GLOB.tracked_implants) - if(!isliving(T.imp_in)) - continue - var/turf/implant_turf = get_turf(T) - if(!is_valid_z_level(current_turf, implant_turf)) - continue//Out of range - - var/loc_display = "Unknown" - var/mob/living/M = T.imp_in - if(is_station_level(implant_turf.z) && !isspaceturf(M.loc)) - var/turf/mob_loc = get_turf(M) - loc_display = mob_loc.loc - - dat += "ID: [T.imp_in.name] | Location: [loc_display]
" - dat += "(Message Holder) |
" - dat += "********************************
" - dat += "
{Log Out}" - var/datum/browser/popup = new(user, "computer", "Prisoner Management Console", 400, 500) - popup.set_content(dat) - popup.open() - return - -/obj/machinery/computer/prisoner/management/attackby(obj/item/I, mob/user, params) - if(isidcard(I)) - if(screen) - id_insert(user) - else - to_chat(user, span_danger("Unauthorized access.")) - else - return ..() - -/obj/machinery/computer/prisoner/management/process() - if(!..()) - src.updateDialog() - return - -/obj/machinery/computer/prisoner/management/Topic(href, href_list) - if(..()) + if(.) return - if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr)) - usr.set_machine(src) - - if(href_list["id"]) - if(href_list["id"] == "insert" && !contained_id) - id_insert(usr) - else if(contained_id) - switch(href_list["id"]) - if("eject") - id_eject(usr) - if("reset") - contained_id.points = 0 - if("setgoal") - var/num = tgui_input_text(usr, "Enter the prisoner's goal", "Prisoner Management", 1, 1000, 1) - if(isnull(num)) - return - contained_id.goal = round(num) - else if(href_list["inject1"]) - var/obj/item/implant/I = locate(href_list["inject1"]) in GLOB.tracked_chem_implants - if(I && istype(I)) - I.activate(1) - else if(href_list["inject5"]) - var/obj/item/implant/I = locate(href_list["inject5"]) in GLOB.tracked_chem_implants - if(I && istype(I)) - I.activate(5) - else if(href_list["inject10"]) - var/obj/item/implant/I = locate(href_list["inject10"]) in GLOB.tracked_chem_implants - if(I && istype(I)) - I.activate(10) - - else if(href_list["lock"]) + + if(!authenticated && action != "login") + CRASH("[usr] potentially spoofed ui action [action] on prisoner console without the console being logged in.") + + if(isliving(usr)) + playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) + + switch(action) + if("login") if(allowed(usr)) - screen = !screen + authenticated = TRUE playsound(src, 'sound/machines/terminal_on.ogg', 50, FALSE) else - to_chat(usr, span_danger("Unauthorized access.")) - - else if(href_list["warn"]) - var/warning = tgui_input_text(usr, "Enter your message here", "Messaging") - if(!warning) - return - var/obj/item/implant/I = locate(href_list["warn"]) in GLOB.tracked_implants - if(I && istype(I) && I.imp_in) - var/mob/living/R = I.imp_in - to_chat(R, span_hear("You hear a voice in your head saying: '[warning]'")) - log_directed_talk(usr, R, warning, LOG_SAY, "implant message") - - src.add_fingerprint(usr) - src.updateUsrDialog() - return + playsound(src, 'sound/machines/terminal_error.ogg', 50, FALSE) + return TRUE + + if("logout") + authenticated = FALSE + playsound(src, 'sound/machines/terminal_off.ogg', 50, FALSE) + return TRUE + + if("insert_id") + id_insert(usr, usr.get_active_held_item()) + return TRUE + + if("eject_id") + id_eject(usr) + return TRUE + + if("set_id_goal") + var/num = tgui_input_number(usr, "Enter the prisoner's goal", "Prisoner Management", 100, 1000, 1) + if(!isnum(num) || QDELETED(src) || QDELETED(contained_id) || QDELETED(usr)) + return TRUE + if(!is_operational || !usr.can_perform_action(src, NEED_DEXTERITY|ALLOW_SILICON_REACH)) + return TRUE + + contained_id.goal = num + return TRUE + + if("reset_id") + contained_id.points = 0 + return TRUE + + if("handle_implant") + var/obj/item/implant/affected_implant = locate(params["implant_ref"]) in GLOB.tracked_implants + if(affected_implant?.is_shown_on_console(src)) + affected_implant.handle_management_console_action(usr, params, src) + return TRUE diff --git a/code/game/machinery/computer/records/medical.dm b/code/game/machinery/computer/records/medical.dm index 3b80f80888b3b8..24dfd53738d328 100644 --- a/code/game/machinery/computer/records/medical.dm +++ b/code/game/machinery/computer/records/medical.dm @@ -13,7 +13,7 @@ /obj/machinery/computer/records/medical/laptop name = "medical laptop" - desc = "A cheap Nanotrasen medical laptop, it functions as a medical records computer. It's bolted to the table." + desc = "A cheap Symphionia medical laptop, it functions as a medical records computer. It's bolted to the table." icon_state = "laptop" icon_screen = "medlaptop" icon_keyboard = "laptop_key" @@ -65,10 +65,10 @@ quirk_notes = target.quirk_notes, rank = target.rank, species = target.species, - // SKYRAT EDIT ADDITION START - Expanded records! + // NOVA EDIT ADDITION START - Expanded records! past_medical_records = target.past_medical_records, past_general_records = target.past_general_records, - // SKYRAT EDIT END + // NOVA EDIT END )) data["records"] = records diff --git a/code/game/machinery/computer/records/security.dm b/code/game/machinery/computer/records/security.dm index 53a7ff9dc11b93..c4ae968722623f 100644 --- a/code/game/machinery/computer/records/security.dm +++ b/code/game/machinery/computer/records/security.dm @@ -22,7 +22,7 @@ /obj/machinery/computer/records/security/laptop name = "security laptop" - desc = "A cheap Nanotrasen security laptop, it functions as a security records console. It's bolted to the table." + desc = "A cheap Symphionia security laptop, it functions as a security records console. It's bolted to the table." icon_state = "laptop" icon_screen = "seclaptop" icon_keyboard = "laptop_key" @@ -129,10 +129,10 @@ rank = target.rank, species = target.species, wanted_status = target.wanted_status, - // SKYRAT EDIT ADDITION - RP Records + // NOVA EDIT ADDITION - RP Records past_general_records = target.past_general_records, past_security_records = target.past_security_records, - // SKYRAT EDIT END + // NOVA EDIT END )) data["records"] = records @@ -354,12 +354,12 @@ printable = wanted_poster if("rapsheet") - /// SKYRAT EDIT REMOVE - REMOVE CRIMES REQUIREMENT FOR PRINTING RECORDS + /// NOVA EDIT REMOVE - REMOVE CRIMES REQUIREMENT FOR PRINTING RECORDS //var/list/crimes = target.crimes //if(!length(crimes)) //balloon_alert(user, "no crimes") //return FALSE - /// SKYRAT EDIT REMOVE END + /// NOVA EDIT REMOVE END var/obj/item/paper/rapsheet = target.get_rapsheet(input_alias, input_header, input_description) printable = rapsheet diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index 53fda80f4fa6aa..54f461948bf189 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -31,7 +31,7 @@ . = ..() if(machine_stat & (NOPOWER|BROKEN)) return - if(length(alert_control?.listener.alarms)) /// SKYRAT EDIT - Fixing master - Original: if(length(alert_control.listener.alarms)) + if(length(alert_control?.listener.alarms)) /// NOVA EDIT - Fixing master - Original: if(length(alert_control.listener.alarms)) . += "alert:2" /** diff --git a/code/game/machinery/computer/teleporter.dm b/code/game/machinery/computer/teleporter.dm index dd8a051cc8e946..0915d4d1d17ae8 100644 --- a/code/game/machinery/computer/teleporter.dm +++ b/code/game/machinery/computer/teleporter.dm @@ -167,16 +167,16 @@ var/area/area = get_area(beacon) targets[avoid_assoc_duplicate_keys(format_text(area.name), area_index)] = beacon - for (var/obj/item/implant/tracking/tracking_implant in GLOB.tracked_implants) - if (!tracking_implant.imp_in || !isliving(tracking_implant.loc) || !tracking_implant.allow_teleport) + for (var/obj/item/implant/beacon/tracking_beacon in GLOB.tracked_implants) + if (isnull(tracking_beacon.imp_in) || !isliving(tracking_beacon.loc)) continue - var/mob/living/implanted = tracking_implant.loc - if (implanted.stat == DEAD && implanted.timeofdeath + tracking_implant.lifespan_postmortem < world.time) + var/mob/living/implanted = tracking_beacon.loc + if (implanted.stat == DEAD && implanted.timeofdeath + tracking_beacon.lifespan_postmortem < world.time) continue - if (is_eligible(tracking_implant)) - targets[avoid_assoc_duplicate_keys("[implanted.real_name] ([format_text(get_area(implanted))])", area_index)] = tracking_implant + if (is_eligible(tracking_beacon)) + targets[avoid_assoc_duplicate_keys("[implanted.real_name] ([format_text(get_area(implanted))])", area_index)] = tracking_beacon else for (var/obj/machinery/teleport/station/station as anything in power_station.linked_stations) if (is_eligible(station) && station.teleporter_hub) diff --git a/code/game/machinery/computer/telescreen.dm b/code/game/machinery/computer/telescreen.dm index ceb3c2e923e291..8548f73fc2198b 100644 --- a/code/game/machinery/computer/telescreen.dm +++ b/code/game/machinery/computer/telescreen.dm @@ -22,7 +22,7 @@ pixel_shift = 32 /obj/machinery/computer/security/telescreen/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new frame_type(loc) qdel(src) @@ -265,7 +265,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai "Thank you for tuning in to the slaughter!", "What a show! And we guarantee next one will be bigger!", "Celebrate the results with Thundermerch!", - "This show was brought to you by Nanotrasen.", + "This show was brought to you by Symphionia.", ) /obj/item/assembly/control/showtime/activate() diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 228f849b4aede9..4e799ffeae929e 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -1,7 +1,7 @@ /obj/structure/frame name = "frame" desc = "A generic looking construction frame. One day this will be something greater." - icon = 'icons/obj/assemblies/stock_parts.dmi' + icon = 'icons/obj/devices/stock_parts.dmi' icon_state = "box_0" density = TRUE max_integrity = 250 @@ -15,7 +15,7 @@ /obj/structure/frame/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/stack/sheet/iron(loc, 5) if(circuit) circuit.forceMove(loc) @@ -410,7 +410,7 @@ return part /obj/structure/frame/machine/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(state >= 2) new /obj/item/stack/cable_coil(loc , 5) diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index e49fd42e8b1e14..aaec46a1f233db 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -1,4 +1,4 @@ -/* SKYRAT EDIT REMOVAL BEGIN - JUKEBOX - MOVED TO 'modular_skyrat/modules/jukebox/code/dance_machine.dm' +/* NOVA EDIT REMOVAL BEGIN - JUKEBOX - MOVED TO 'modular_nova/modules/jukebox/code/dance_machine.dm' /// Helper macro to check if the passed mob has jukebox sound preference enabled #define HAS_JUKEBOX_PREF(mob) (!QDELETED(mob) && !isnull(mob.client) && mob.client.prefs.read_preference(/datum/preference/toggle/sound_jukebox)) @@ -41,7 +41,7 @@ req_access = null anchored = TRUE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - flags_1 = NODECONSTRUCT_1 + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION /datum/track var/song_name = "generic" @@ -92,7 +92,7 @@ return ..() /obj/machinery/jukebox/attackby(obj/item/O, mob/user, params) - if(!active && !(flags_1 & NODECONSTRUCT_1)) + if(!active && !(obj_flags & NO_DECONSTRUCTION)) if(O.tool_behaviour == TOOL_WRENCH) if(!anchored && !isinspace()) to_chat(user,span_notice("You secure [src] to the floor.")) @@ -117,7 +117,7 @@ user.playsound_local(src, 'sound/misc/compiler-failure.ogg', 25, TRUE) return UI_CLOSE if(!songs.len && !isobserver(user)) - to_chat(user,span_warning("Error: No music tracks have been authorized for your station. Petition Central Command to resolve this issue.")) + to_chat(user,span_warning("Error: No music tracks have been authorized for your station. Petition Conglomeration of Colonists to resolve this issue.")) user.playsound_local(src, 'sound/misc/compiler-failure.ogg', 25, TRUE) return UI_CLOSE return ..() @@ -523,4 +523,4 @@ dance(to_dance) #undef HAS_JUKEBOX_PREF -*/ //SKYRAT EDIT REMOVAL END +*/ //NOVA EDIT REMOVAL END diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 79ec5e1861a930..0d3c04ccd6f8b8 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -18,7 +18,7 @@ var/bar_material = METAL /obj/structure/barricade/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) make_debris() qdel(src) @@ -80,7 +80,7 @@ if(do_after(user, 50, target=src)) W.use(5) var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall/mineral/wood/nonmetal) + T.place_on_top(/turf/closed/wall/mineral/wood/nonmetal) qdel(src) return return ..() @@ -93,7 +93,7 @@ tool.play_tool_sound(src) new /obj/item/stack/sheet/mineral/wood(get_turf(src), drop_amount) qdel(src) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/barricade/wooden/crude name = "crude plank barricade" @@ -129,7 +129,7 @@ /obj/structure/barricade/sandbags/Initialize(mapload) . = ..() AddElement(/datum/element/climbable) - AddElement(/datum/element/liquids_height, 20) //SKYRAT EDIT ADDITION + AddElement(/datum/element/elevation, pixel_shift = 12) /obj/structure/barricade/security name = "security barrier" diff --git a/code/game/machinery/digital_clock.dm b/code/game/machinery/digital_clock.dm index d0b695428afeb5..a0dc87dba0857d 100644 --- a/code/game/machinery/digital_clock.dm +++ b/code/game/machinery/digital_clock.dm @@ -70,7 +70,7 @@ emag_act() /obj/machinery/digital_clock/deconstruct(disassembled = TRUE) - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return if(disassembled) new /obj/item/wallframe/digital_clock(drop_location()) diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm index e84e21314b3e72..2d74abf1d99af6 100644 --- a/code/game/machinery/dish_drive.dm +++ b/code/game/machinery/dish_drive.dm @@ -10,7 +10,7 @@ circuit = /obj/item/circuitboard/machine/dish_drive pass_flags = PASSTABLE /// List of dishes the drive can hold - var/list/collectable_items = list(/obj/item/trash/waffles, // SKYRAT EDIT CHANGE - non-static list + var/list/collectable_items = list(/obj/item/trash/waffles, // NOVA EDIT CHANGE - non-static list /obj/item/trash/waffles, /obj/item/broken_bottle, /obj/item/kitchen/fork, @@ -37,7 +37,7 @@ var/list/dish_drive_contents /// Distance this is capable of sucking dishes up over. (2 + servo tier) var/suck_distance = 0 - var/binrange = 7 //SKYRAT EDIT ADDITION - SEC_HAUL + var/binrange = 7 //NOVA EDIT ADDITION - SEC_HAUL COOLDOWN_DECLARE(time_since_dishes) @@ -83,7 +83,7 @@ /obj/machinery/dish_drive/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/dish_drive/attackby(obj/item/dish, mob/living/user, params) if(is_type_in_list(dish, collectable_items) && !user.combat_mode) @@ -152,7 +152,7 @@ if(manual) visible_message(span_notice("[src] is empty!")) return - var/obj/machinery/disposal/bin/bin = locate() in view(binrange, src) //SKYRAT EDIT CHANGE + var/obj/machinery/disposal/bin/bin = locate() in view(binrange, src) //NOVA EDIT CHANGE if(!bin) if(manual) visible_message(span_warning("[src] buzzes. There are no disposal bins in range!")) diff --git a/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_zero_entries.dm b/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_zero_entries.dm index b078b5c76edf93..235986cbd0ddb3 100644 --- a/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_zero_entries.dm +++ b/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_zero_entries.dm @@ -78,7 +78,7 @@ "oh, let me guess, you're a big fan of those japanese tourist bots", ) input_obj_or_mob = list( - /mob/living/simple_animal/pet/cat, + /mob/living/basic/pet/cat, ) output_organs = list( /obj/item/organ/internal/ears/cat, diff --git a/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm b/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm index 97b80b91969c36..afbb8404060f2b 100644 --- a/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm @@ -48,7 +48,7 @@ AddElement(/datum/element/noticable_organ, "teeth are big and sharp.", BODY_ZONE_PRECISE_MOUTH) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/carp) -/obj/item/organ/internal/tongue/carp/on_insert(mob/living/carbon/tongue_owner) +/obj/item/organ/internal/tongue/carp/on_mob_insert(mob/living/carbon/tongue_owner, special, movement_flags) . = ..() if(!ishuman(tongue_owner)) return @@ -57,12 +57,14 @@ return var/datum/species/rec_species = human_receiver.dna.species rec_species.update_no_equip_flags(tongue_owner, rec_species.no_equip_flags | ITEM_SLOT_MASK) - var/obj/item/bodypart/head/head = human_receiver.get_bodypart(BODY_ZONE_HEAD) - head.unarmed_damage_low = 10 - head.unarmed_damage_high = 15 - head.unarmed_stun_threshold = 15 -/obj/item/organ/internal/tongue/carp/on_remove(mob/living/carbon/tongue_owner) +/obj/item/organ/internal/tongue/carp/on_bodypart_insert(obj/item/bodypart/limb) + . = ..() + limb.unarmed_damage_low = 10 + limb.unarmed_damage_high = 15 + limb.unarmed_effectiveness = 15 + +/obj/item/organ/internal/tongue/carp/on_mob_remove(mob/living/carbon/tongue_owner) . = ..() if(!ishuman(tongue_owner)) return @@ -71,10 +73,13 @@ return var/datum/species/rec_species = human_receiver.dna.species rec_species.update_no_equip_flags(tongue_owner, initial(rec_species.no_equip_flags)) - var/obj/item/bodypart/head/head = human_receiver.get_bodypart(BODY_ZONE_HEAD) + +/obj/item/organ/internal/tongue/carp/on_bodypart_remove(obj/item/bodypart/head) + . = ..() + head.unarmed_damage_low = initial(head.unarmed_damage_low) head.unarmed_damage_high = initial(head.unarmed_damage_high) - head.unarmed_stun_threshold = initial(head.unarmed_stun_threshold) + head.unarmed_effectiveness = initial(head.unarmed_effectiveness) /obj/item/organ/internal/tongue/carp/on_life(seconds_per_tick, times_fired) . = ..() @@ -110,13 +115,13 @@ AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/carp) AddElement(/datum/element/noticable_organ, "seem%PRONOUN_S unable to stay still.") -/obj/item/organ/internal/brain/carp/on_insert(mob/living/carbon/brain_owner) +/obj/item/organ/internal/brain/carp/on_mob_insert(mob/living/carbon/brain_owner) . = ..() cooldown_timer = addtimer(CALLBACK(src, PROC_REF(unsatisfied_nomad)), cooldown_time, TIMER_STOPPABLE|TIMER_OVERRIDE|TIMER_UNIQUE) RegisterSignal(brain_owner, COMSIG_MOVABLE_Z_CHANGED, PROC_REF(satisfied_nomad)) //technically you could get around the mood issue by extracting and reimplanting the brain but it will be far easier to just go one z there and back -/obj/item/organ/internal/brain/carp/on_remove(mob/living/carbon/brain_owner) +/obj/item/organ/internal/brain/carp/on_mob_remove(mob/living/carbon/brain_owner) . = ..() UnregisterSignal(brain_owner, COMSIG_MOVABLE_Z_CHANGED) deltimer(cooldown_timer) diff --git a/code/game/machinery/dna_infuser/organ_sets/fly_organs.dm b/code/game/machinery/dna_infuser/organ_sets/fly_organs.dm index 5d4568a535ca5e..8330bbe2f0c73e 100644 --- a/code/game/machinery/dna_infuser/organ_sets/fly_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/fly_organs.dm @@ -52,7 +52,7 @@ message = fly_buZZ.Replace(message, "ZZZ") message = replacetext(message, "s", "z") message = replacetext(message, "S", "Z") -//SKYRAT EDIT START: Adding russian version to autohiss +//NOVA EDIT START: Adding russian version to autohiss if(CONFIG_GET(flag/russian_text_formation)) var/static/regex/fly_buzz_ru = new("з+", "g") var/static/regex/fly_buZZ_ru = new("З+", "g") @@ -60,7 +60,7 @@ message = fly_buZZ_ru.Replace(message, "ЗЗЗ") message = replacetext(message, "с", "з") message = replacetext(message, "С", "З") -//SKYRAT EDIT END: Adding russian version to autohiss +//NOVA EDIT END: Adding russian version to autohiss speech_args[SPEECH_MESSAGE] = message /obj/item/organ/internal/tongue/fly/Initialize(mapload) @@ -78,10 +78,7 @@ name = odd_organ_name() icon_state = FLY_INFUSED_ORGAN_ICON AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/fly) - -/obj/item/organ/internal/heart/fly/update_icon_state() - SHOULD_CALL_PARENT(FALSE) - return //don't set icon thank you + AddElement(/datum/element/update_icon_blocker) /obj/item/organ/internal/lungs/fly desc = FLY_INFUSED_ORGAN_DESC diff --git a/code/game/machinery/dna_infuser/organ_sets/fox_organs.dm b/code/game/machinery/dna_infuser/organ_sets/fox_organs.dm index 57a26d36842e7b..58494346f6287b 100644 --- a/code/game/machinery/dna_infuser/organ_sets/fox_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/fox_organs.dm @@ -6,9 +6,9 @@ visual = TRUE damage_multiplier = 2 -//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION +//NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION /* -/obj/item/organ/internal/ears/fox/on_insert(mob/living/carbon/human/ear_owner) +/obj/item/organ/internal/ears/fox/on_mob_insert(mob/living/carbon/human/ear_owner) . = ..() if(istype(ear_owner) && ear_owner.dna) color = ear_owner.hair_color @@ -16,11 +16,11 @@ ear_owner.dna.update_uf_block(DNA_EARS_BLOCK) ear_owner.update_body() -/obj/item/organ/internal/ears/fox/on_remove(mob/living/carbon/human/ear_owner) +/obj/item/organ/internal/ears/fox/on_mob_remove(mob/living/carbon/human/ear_owner) . = ..() if(istype(ear_owner) && ear_owner.dna) color = ear_owner.hair_color ear_owner.dna.species.mutant_bodyparts -= "ears" ear_owner.update_body() */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END diff --git a/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm b/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm index 6cd753eb760493..477b461bdf310a 100644 --- a/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm @@ -66,7 +66,7 @@ AddElement(/datum/element/noticable_organ, "arm is just a mass of plate and tendrils.", BODY_ZONE_CHEST) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/goliath) -/obj/item/organ/internal/brain/goliath/on_insert(mob/living/carbon/brain_owner) +/obj/item/organ/internal/brain/goliath/on_mob_insert(mob/living/carbon/brain_owner) . = ..() if(!ishuman(brain_owner)) return @@ -78,7 +78,7 @@ hammer = new/obj/item/goliath_infuser_hammer brain_owner.put_in_hands(hammer) -/obj/item/organ/internal/brain/goliath/on_remove(mob/living/carbon/brain_owner) +/obj/item/organ/internal/brain/goliath/on_mob_remove(mob/living/carbon/brain_owner) . = ..() UnregisterSignal(brain_owner) if(!ishuman(brain_owner)) diff --git a/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm b/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm index bc7b79aff095b9..2a5c776709cf5c 100644 --- a/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm @@ -25,7 +25,7 @@ Fluoride Stare: After someone says 5 words, blah blah blah... greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = GONDOLA_COLORS organ_traits = list(TRAIT_PACIFISM) - ///keeps track of whether the reciever actually gained factions + ///keeps track of whether the receiver actually gained factions var/list/factions_to_remove = list() /obj/item/organ/internal/heart/gondola/Initialize(mapload) @@ -33,7 +33,7 @@ Fluoride Stare: After someone says 5 words, blah blah blah... AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/gondola) AddElement(/datum/element/noticable_organ, "radiate%PRONOUN_S an aura of serenity.") -/obj/item/organ/internal/heart/gondola/Insert(mob/living/carbon/receiver, special, drop_if_replaced) +/obj/item/organ/internal/heart/gondola/Insert(mob/living/carbon/receiver, special, movement_flags) . = ..() if(!(FACTION_HOSTILE in receiver.faction)) factions_to_remove += FACTION_HOSTILE @@ -41,7 +41,7 @@ Fluoride Stare: After someone says 5 words, blah blah blah... factions_to_remove += FACTION_MINING receiver.faction |= list(FACTION_HOSTILE, FACTION_MINING) -/obj/item/organ/internal/heart/gondola/Remove(mob/living/carbon/heartless, special) +/obj/item/organ/internal/heart/gondola/Remove(mob/living/carbon/heartless, special, movement_flags) . = ..() for(var/faction in factions_to_remove) heartless.faction -= faction @@ -63,11 +63,11 @@ Fluoride Stare: After someone says 5 words, blah blah blah... AddElement(/datum/element/noticable_organ, "mouth is permanently affixed into a relaxed smile.", BODY_ZONE_PRECISE_MOUTH) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/gondola) -/obj/item/organ/internal/tongue/gondola/Insert(mob/living/carbon/tongue_owner, special, drop_if_replaced) +/obj/item/organ/internal/tongue/gondola/Insert(mob/living/carbon/tongue_owner, special, movement_flags) . = ..() tongue_owner.add_mood_event("gondola_zen", /datum/mood_event/gondola_serenity) -/obj/item/organ/internal/tongue/gondola/Remove(mob/living/carbon/tongue_owner, special) +/obj/item/organ/internal/tongue/gondola/Remove(mob/living/carbon/tongue_owner, special, movement_flags) tongue_owner.clear_mood_event("gondola_zen") return ..() @@ -89,7 +89,7 @@ Fluoride Stare: After someone says 5 words, blah blah blah... AddElement(/datum/element/noticable_organ, "right arm has small needles breaching the skin all over it.", BODY_ZONE_R_ARM) pax_hugs = new -/obj/item/organ/internal/liver/gondola/Insert(mob/living/carbon/liver_owner, special, drop_if_replaced) +/obj/item/organ/internal/liver/gondola/Insert(mob/living/carbon/liver_owner, special, movement_flags) . = ..() var/has_left = liver_owner.has_left_hand(check_disabled = FALSE) var/has_right = liver_owner.has_right_hand(check_disabled = FALSE) @@ -104,7 +104,7 @@ Fluoride Stare: After someone says 5 words, blah blah blah... RegisterSignal(liver_owner, COMSIG_HUMAN_EQUIPPING_ITEM, PROC_REF(on_owner_equipping_item)) RegisterSignal(liver_owner, COMSIG_LIVING_TRY_PULL, PROC_REF(on_owner_try_pull)) -/obj/item/organ/internal/liver/gondola/Remove(mob/living/carbon/liver_owner, special) +/obj/item/organ/internal/liver/gondola/Remove(mob/living/carbon/liver_owner, special, movement_flags) . = ..() pax_hugs.remove(liver_owner) UnregisterSignal(liver_owner, list(COMSIG_HUMAN_EQUIPPING_ITEM, COMSIG_LIVING_TRY_PULL)) 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 96c33871a4055d..092a4c7889a28e 100644 --- a/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm @@ -63,7 +63,7 @@ AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/rat) AddElement(/datum/element/noticable_organ, "hunch%PRONOUN_ES over unnaturally!") -/obj/item/organ/internal/heart/rat/on_insert(mob/living/carbon/receiver) +/obj/item/organ/internal/heart/rat/on_mob_insert(mob/living/carbon/receiver) . = ..() if(!. || !ishuman(receiver)) return @@ -75,7 +75,7 @@ if(human_receiver.physiology) human_receiver.physiology.damage_resistance -= 50 -/obj/item/organ/internal/heart/rat/on_remove(mob/living/carbon/heartless, special) +/obj/item/organ/internal/heart/rat/on_mob_remove(mob/living/carbon/heartless, special) . = ..() if(!ishuman(heartless)) return @@ -113,11 +113,11 @@ if(message == "hi?") speech_args[SPEECH_MESSAGE] = "Um... cheesed to meet you?" -/obj/item/organ/internal/tongue/rat/on_insert(mob/living/carbon/tongue_owner, special, drop_if_replaced) +/obj/item/organ/internal/tongue/rat/on_mob_insert(mob/living/carbon/tongue_owner, special, movement_flags) . = ..() RegisterSignal(tongue_owner, COMSIG_CARBON_ITEM_GIVEN, PROC_REF(its_on_the_mouse)) -/obj/item/organ/internal/tongue/rat/on_remove(mob/living/carbon/tongue_owner) +/obj/item/organ/internal/tongue/rat/on_mob_remove(mob/living/carbon/tongue_owner) . = ..() UnregisterSignal(tongue_owner, COMSIG_CARBON_ITEM_GIVEN) diff --git a/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm b/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm index 3c2d461e08c81c..0644bca0354a65 100644 --- a/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm @@ -71,7 +71,7 @@ QDEL_NULL(roach_shell) return ..() -/obj/item/organ/internal/heart/roach/on_insert(mob/living/carbon/organ_owner, special) +/obj/item/organ/internal/heart/roach/on_mob_insert(mob/living/carbon/organ_owner, special) . = ..() if(!ishuman(organ_owner)) return @@ -82,11 +82,11 @@ RegisterSignal(human_owner, COMSIG_MOB_AFTER_APPLY_DAMAGE, PROC_REF(do_block_effect)) human_owner.physiology.knockdown_mod *= 3 - var/obj/item/bodypart/chest/chest = human_owner.get_bodypart(BODY_ZONE_CHEST) - chest.add_bodypart_overlay(roach_shell) - human_owner.update_body_parts() +/obj/item/organ/internal/heart/roach/on_bodypart_insert(obj/item/bodypart/limb) + . = ..() + limb.add_bodypart_overlay(roach_shell) -/obj/item/organ/internal/heart/roach/on_remove(mob/living/carbon/organ_owner, special) +/obj/item/organ/internal/heart/roach/on_mob_remove(mob/living/carbon/organ_owner, special) . = ..() if(!ishuman(organ_owner) || QDELETED(organ_owner)) return @@ -96,9 +96,10 @@ UnregisterSignal(human_owner, list(COMSIG_MOB_APPLY_DAMAGE_MODIFIERS, COMSIG_MOB_AFTER_APPLY_DAMAGE)) human_owner.physiology.knockdown_mod /= 3 - var/obj/item/bodypart/chest/chest = human_owner.get_bodypart(BODY_ZONE_CHEST) - chest.remove_bodypart_overlay(roach_shell) - human_owner.update_body_parts() +/obj/item/organ/internal/heart/roach/on_bodypart_remove(obj/item/bodypart/limb) + . = ..() + + limb.remove_bodypart_overlay(roach_shell) /** * Signal proc for [COMSIG_MOB_APPLY_DAMAGE_MODIFIERS] @@ -137,7 +138,7 @@ if(!ishuman(blocker) || blocker.stat >= UNCONSCIOUS) return FALSE // No tactical spinning - if(blocker.flags_1 & IS_SPINNING_1) + if(HAS_TRAIT(blocker, TRAIT_SPINNING)) return FALSE if(blocker.body_position == LYING_DOWN || (blocker.dir & attack_direction)) return TRUE @@ -193,7 +194,7 @@ . = ..() AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/roach) -/obj/item/organ/internal/liver/roach/on_insert(mob/living/carbon/organ_owner, special) +/obj/item/organ/internal/liver/roach/on_mob_insert(mob/living/carbon/organ_owner, special) . = ..() if(!ishuman(organ_owner)) return @@ -201,13 +202,13 @@ var/mob/living/carbon/human/human_owner = owner human_owner.physiology.tox_mod *= 2 -/obj/item/organ/internal/liver/roach/on_remove(mob/living/carbon/organ_owner, special) +/obj/item/organ/internal/liver/roach/on_mob_remove(mob/living/carbon/organ_owner, special) . = ..() if(!ishuman(organ_owner) || QDELETED(organ_owner)) return var/mob/living/carbon/human/human_owner = organ_owner - human_owner.physiology.tox_mod /= 2 + human_owner.physiology.tox_mod *= 0.5 /// Roach appendix: /// No appendicitus! weee! diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 7c903db123b8ad..3a2d828205c317 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -22,20 +22,20 @@ /// Someone, for the love of god, profile this. Is there a reason to cache mutable_appearance /// if so, why are we JUST doing the airlocks when we can put this in mutable_appearance.dm for /// everything -/proc/get_airlock_overlay(icon_state, icon_file, atom/offset_spokesman, em_block, state_color = null) // SKYRAT EDIT - Airlock accent greyscale color support - Added `state_color = null` +/proc/get_airlock_overlay(icon_state, icon_file, atom/offset_spokesman, em_block, state_color = null) // NOVA EDIT - Airlock accent greyscale color support - Added `state_color = null` var/static/list/airlock_overlays = list() - var/base_icon_key = "[icon_state][REF(icon_file)][state_color]" // SKYRAT EDIT - Airlock accent greyscale color support - ORIGINAL: var/base_icon_key = "[icon_state][REF(icon_file)]" + var/base_icon_key = "[icon_state][REF(icon_file)][state_color]" // NOVA EDIT - Airlock accent greyscale color support - ORIGINAL: var/base_icon_key = "[icon_state][REF(icon_file)]" if(!(. = airlock_overlays[base_icon_key])) - /* SKYRAT EDIT - Airlock accent greyscale color support - ORIGINAL: + /* NOVA EDIT - Airlock accent greyscale color support - ORIGINAL: . = airlock_overlays[base_icon_key] = mutable_appearance(icon_file, icon_state) - */ // SKYRAT EDIT START + */ // NOVA EDIT START var/mutable_appearance/airlock_overlay = mutable_appearance(icon_file, icon_state) if(state_color) airlock_overlay.color = state_color . = airlock_overlays[base_icon_key] = airlock_overlay - // SKYRAT EDIT END + // NOVA EDIT END if(isnull(em_block)) return @@ -54,7 +54,7 @@ // "Would this be better with a global var" // Wires for the airlock are located in the datum folder, inside the wires datum folder. -// SKYRAT EDIT REMOVAL START - moved to code/__DEFINES/~skyrat_defines/airlock.dm +// NOVA EDIT REMOVAL START - moved to code/__DEFINES/~nova_defines/airlock.dm /* #define AIRLOCK_FRAME_CLOSED "closed" #define AIRLOCK_FRAME_CLOSING "closing" @@ -82,7 +82,7 @@ #define DOOR_VISION_DISTANCE 11 ///The maximum distance a door will see out to */ -// SKYRAT EDIT REMOVAL END - moved to code/__DEFINES/~skyrat_defines/airlock.dm +// NOVA EDIT REMOVAL END - moved to code/__DEFINES/~nova_defines/airlock.dm /obj/machinery/door/airlock name = "Airlock" @@ -146,9 +146,9 @@ var/previous_airlock = /obj/structure/door_assembly /// Material of inner filling; if its an airlock with glass, this should be set to "glass" var/airlock_material - var/overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' //OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE + var/overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' //OVERRIDEN IN NOVA AESTHETICS - SEE MODULE /// Used for papers and photos pinned to the airlock - var/note_overlay_file = 'icons/obj/doors/airlocks/station/overlays.dmi'//OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE + var/note_overlay_file = 'icons/obj/doors/airlocks/station/overlays.dmi'//OVERRIDEN IN NOVA AESTHETICS - SEE MODULE var/cyclelinkeddir = 0 var/obj/machinery/door/airlock/cyclelinkedairlock @@ -526,7 +526,7 @@ if(AIRLOCK_DENY, AIRLOCK_OPENING, AIRLOCK_CLOSING, AIRLOCK_EMAG) icon_state = "nonexistenticonstate" //MADNESS -/* SKYRAT EDIT MOVED TO AIRLOCK.DM IN AESTHETICS MODULE +/* NOVA EDIT MOVED TO AIRLOCK.DM IN AESTHETICS MODULE /obj/machinery/door/airlock/update_overlays() . = ..() @@ -817,7 +817,7 @@ if(!istype(H.head, /obj/item/clothing/head/helmet)) H.visible_message(span_danger("[user] headbutts the airlock."), \ span_userdanger("You headbutt the airlock!")) - //H.Paralyze(100) - SKYRAT EDIT REMOVAL - COMBAT + //H.Paralyze(100) - NOVA EDIT REMOVAL - COMBAT H.StaminaKnockdown(10, TRUE, TRUE) H.apply_damage(10, BRUTE, BODY_ZONE_HEAD) else @@ -847,16 +847,16 @@ /obj/machinery/door/airlock/screwdriver_act(mob/living/user, obj/item/tool) if(panel_open && detonated) to_chat(user, span_warning("[src] has no maintenance panel!")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS toggle_panel_open() to_chat(user, span_notice("You [panel_open ? "open":"close"] the maintenance panel of the airlock.")) tool.play_tool_sound(src) update_appearance() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/door/airlock/wirecutter_act(mob/living/user, obj/item/tool) if(panel_open && security_level == AIRLOCK_SECURITY_PLASTEEL) - . = TOOL_ACT_TOOLTYPE_SUCCESS // everything after this shouldn't result in attackby + . = ITEM_INTERACT_SUCCESS // everything after this shouldn't result in attackby if(hasPower() && shock(user, 60)) // Protective grille of wiring is electrified return . to_chat(user, span_notice("You start cutting through the outer grille.")) @@ -877,7 +877,7 @@ note.forceMove(tool.drop_location()) note = null update_appearance() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/door/airlock/crowbar_act(mob/living/user, obj/item/tool) @@ -897,14 +897,14 @@ layer_flavor = "inner layer of shielding" next_level = AIRLOCK_SECURITY_NONE else - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS user.visible_message(span_notice("You start prying away [src]'s [layer_flavor].")) if(!tool.use_tool(src, user, 40, volume=100)) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(!panel_open || security_level != starting_level) // if the plating's already been broken, don't break it again - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS user.visible_message(span_notice("[user] removes [src]'s shielding."), span_notice("You remove [src]'s [layer_flavor].")) security_level = next_level @@ -913,7 +913,7 @@ modify_max_integrity(max_integrity / AIRLOCK_INTEGRITY_MULTIPLIER) damage_deflection = AIRLOCK_DAMAGE_DEFLECTION_N update_appearance() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/door/airlock/wrench_act(mob/living/user, obj/item/tool) if(!locked) @@ -931,7 +931,7 @@ return unbolt() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/door/airlock/welder_act(mob/living/user, obj/item/tool) @@ -958,19 +958,19 @@ layer_flavor = "inner layer of shielding" next_level = AIRLOCK_SECURITY_PLASTEEL_I_S else - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(!tool.tool_start_check(user, amount=1)) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS to_chat(user, span_notice("You begin cutting the [layer_flavor]...")) if(!tool.use_tool(src, user, 4 SECONDS, volume=50)) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(!panel_open || security_level != starting_level) // see if anyone's screwing with us - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS user.visible_message( span_notice("[user] cuts through [src]'s shielding."), // passers-by don't get the full picture @@ -986,7 +986,7 @@ if(security_level == AIRLOCK_SECURITY_NONE) update_appearance() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/door/airlock/proc/try_reinforce(mob/user, obj/item/stack/sheet/material, amt_required, new_security_level) if(material.get_amount() < amt_required) @@ -1005,7 +1005,7 @@ /obj/machinery/door/airlock/attackby(obj/item/C, mob/user, params) if(!issilicon(user) && !isAdminGhostAI(user)) - if(isElectrified() && (C.flags_1 & CONDUCT_1) && shock(user, 75)) + if(isElectrified() && (C.obj_flags & CONDUCTS_ELECTRICITY) && shock(user, 75)) return add_fingerprint(user) @@ -1284,7 +1284,7 @@ if(BYPASS_DOOR_CHECKS) // No power usage, special sound, get it open. //playsound(src, 'sound/machines/airlockforced.ogg', 30, TRUE) - ORIGINAL - playsound(src, forcedOpen, 30, TRUE) //SKYRAT EDIT CHANGE - AESTHETICS + playsound(src, forcedOpen, 30, TRUE) //NOVA EDIT CHANGE - AESTHETICS return TRUE else @@ -1515,7 +1515,7 @@ /obj/machinery/door/airlock/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) if((damage_amount >= atom_integrity) && (damage_flag == BOMB)) - flags_1 |= NODECONSTRUCT_1 //If an explosive took us out, don't drop the assembly + obj_flags |= NO_DECONSTRUCTION //If an explosive took us out, don't drop the assembly . = ..() if(atom_integrity < (0.75 * max_integrity)) update_appearance() @@ -1531,7 +1531,7 @@ assembly.update_appearance() /obj/machinery/door/airlock/deconstruct(disassembled = TRUE, mob/user) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) var/obj/structure/door_assembly/A if(assemblytype) A = new assemblytype(loc) @@ -2041,7 +2041,6 @@ if(prob(50)) radiate() last_event = world.time - ..() /obj/machinery/door/airlock/uranium/proc/radiate() radiation_pulse( @@ -2482,7 +2481,7 @@ set_density(TRUE) operating = FALSE return TRUE -// SKYRAT EDIT REMOVAL START - moved to code/__DEFINES/~skyrat_defines/airlock.dm +// NOVA EDIT REMOVAL START - moved to code/__DEFINES/~nova_defines/airlock.dm /* #undef AIRLOCK_SECURITY_NONE #undef AIRLOCK_SECURITY_IRON @@ -2509,4 +2508,4 @@ #undef AIRLOCK_FRAME_OPEN #undef AIRLOCK_FRAME_OPENING */ -// SKYRAT EDIT REMOVAL END - moved to code/__DEFINES/~skyrat_defines/airlock.dm +// NOVA EDIT REMOVAL END - moved to code/__DEFINES/~nova_defines/airlock.dm diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 60a536c6038929..2dfff746d373c7 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -1,11 +1,11 @@ //#define MAX_TIMER (15 MINUTES) //ORIGINAL -#define MAX_TIMER (60 MINUTES) //SKYRAT EDIT CHANGE +#define MAX_TIMER (60 MINUTES) //NOVA EDIT CHANGE //#define PRESET_SHORT (2 MINUTES) //ORIGINAL -#define PRESET_SHORT (5 MINUTES) //SKYRAT EDIT CHANGE +#define PRESET_SHORT (5 MINUTES) //NOVA EDIT CHANGE //#define PRESET_MEDIUM (3 MINUTES) //ORIGINAL -#define PRESET_MEDIUM (10 MINUTES) //SKYRAT EDIT CHANGE +#define PRESET_MEDIUM (10 MINUTES) //NOVA EDIT CHANGE //#define PRESET_LONG (5 MINUTES) //ORIGINAL -#define PRESET_LONG (15 MINUTES) //SKYRAT EDIT CHANGE +#define PRESET_LONG (15 MINUTES) //NOVA EDIT CHANGE /** * Brig Door control displays. @@ -72,7 +72,7 @@ if(!timing) return PROCESS_KILL - if(REALTIMEOFDAY - activation_time >= timer_duration) // SKYRAT EDIT CHANGE: original was world.time + if(REALTIMEOFDAY - activation_time >= timer_duration) // NOVA EDIT CHANGE: original was world.time timer_end() // open doors, reset timer, clear status screen update_content() @@ -98,7 +98,7 @@ if(machine_stat & (NOPOWER|BROKEN)) return 0 - activation_time = REALTIMEOFDAY // SKYRAT EDIT CHANGE: original was world.time + activation_time = REALTIMEOFDAY // NOVA EDIT CHANGE: original was world.time timing = TRUE begin_processing() @@ -171,7 +171,7 @@ * * seconds - return time in seconds it TRUE, else deciseconds. */ /obj/machinery/status_display/door_timer/proc/time_left(seconds = FALSE) - . = max(0, timer_duration - (activation_time ? REALTIMEOFDAY - activation_time : 0)) // SKYRAT EDIT CHANGE: original was world.time + . = max(0, timer_duration - (activation_time ? REALTIMEOFDAY - activation_time : 0)) // NOVA EDIT CHANGE: original was world.time if(seconds) . /= 10 @@ -263,7 +263,7 @@ user.investigate_log("set cell [id]'s timer to [preset_time/10] seconds", INVESTIGATE_RECORDS) user.log_message("set cell [id]'s timer to [preset_time/10] seconds", LOG_ATTACK) if(timing) - activation_time = REALTIMEOFDAY // SKYRAT EDIT CHANGE: original was world.time + activation_time = REALTIMEOFDAY // NOVA EDIT CHANGE: original was world.time else . = FALSE diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 0077839234a8d4..51fe078d5050e1 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -1,4 +1,4 @@ -// #define DOOR_CLOSE_WAIT 60 ///Default wait until doors autoclose // SKYRAT EDIT REMOVAL - moved to code/__DEFINES/~skyrat_defines/airlock.dm +// #define DOOR_CLOSE_WAIT 60 ///Default wait until doors autoclose // NOVA EDIT REMOVAL - moved to code/__DEFINES/~nova_defines/airlock.dm /obj/machinery/door name = "door" desc = "It opens and closes." @@ -329,7 +329,7 @@ /obj/machinery/door/welder_act(mob/living/user, obj/item/tool) try_to_weld(tool, user) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/door/crowbar_act(mob/living/user, obj/item/tool) if(user.combat_mode) @@ -340,7 +340,7 @@ var/obj/item/crowbar/crowbar = tool forced_open = crowbar.force_opens try_to_crowbar(tool, user, forced_open) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/door/attackby(obj/item/weapon, mob/living/user, params) if(istype(weapon, /obj/item/access_key)) @@ -359,7 +359,7 @@ /obj/machinery/door/welder_act_secondary(mob/living/user, obj/item/tool) try_to_weld_secondary(tool, user) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/door/crowbar_act_secondary(mob/living/user, obj/item/tool) var/forced_open = FALSE @@ -367,7 +367,7 @@ var/obj/item/crowbar/crowbar = tool forced_open = crowbar.force_opens try_to_crowbar_secondary(tool, user, forced_open) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/door/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) . = ..() @@ -381,12 +381,12 @@ if(glass) playsound(loc, 'sound/effects/glasshit.ogg', 90, TRUE) else if(damage_amount) - //SKYRAT EDIT ADDITION - CREDITS TO WHITEDREAM(valtos) - playsound(src, pick('modular_skyrat/master_files/sound/effects/metalblock1.wav', 'modular_skyrat/master_files/sound/effects/metalblock2.wav', \ - 'modular_skyrat/master_files/sound/effects/metalblock3.wav', 'modular_skyrat/master_files/sound/effects/metalblock4.wav', \ - 'modular_skyrat/master_files/sound/effects/metalblock5.wav', 'modular_skyrat/master_files/sound/effects/metalblock6.wav', \ - 'modular_skyrat/master_files/sound/effects/metalblock7.wav', 'modular_skyrat/master_files/sound/effects/metalblock8.wav'), 50, TRUE) - //SKYRAT EDIT END + //NOVA EDIT ADDITION - CREDITS TO WHITEDREAM(valtos) + playsound(src, pick('modular_nova/master_files/sound/effects/metalblock1.wav', 'modular_nova/master_files/sound/effects/metalblock2.wav', \ + 'modular_nova/master_files/sound/effects/metalblock3.wav', 'modular_nova/master_files/sound/effects/metalblock4.wav', \ + 'modular_nova/master_files/sound/effects/metalblock5.wav', 'modular_nova/master_files/sound/effects/metalblock6.wav', \ + 'modular_nova/master_files/sound/effects/metalblock7.wav', 'modular_nova/master_files/sound/effects/metalblock8.wav'), 50, TRUE) + //NOVA EDIT END else playsound(src, 'sound/weapons/tap.ogg', 50, TRUE) if(BURN) @@ -508,11 +508,11 @@ else if(ismonkey(future_pancake)) //For monkeys future_pancake.emote("screech") future_pancake.adjustBruteLoss(DOOR_CRUSH_DAMAGE) - future_pancake.StaminaKnockdown(20, TRUE, TRUE) // SKYRAT EDIT CHANGE - AIRLOCKS - ORIGINAL: future_pancake.Paralyze(100) + future_pancake.StaminaKnockdown(20, TRUE, TRUE) // NOVA EDIT CHANGE - AIRLOCKS - ORIGINAL: future_pancake.Paralyze(100) else if(ishuman(future_pancake)) //For humans future_pancake.adjustBruteLoss(DOOR_CRUSH_DAMAGE) future_pancake.emote("scream") - future_pancake.StaminaKnockdown(20, TRUE, TRUE) // SKYRAT EDIT CHANGE - AIRLOCKS - ORIGINAL: future_pancake.Paralyze(100) + future_pancake.StaminaKnockdown(20, TRUE, TRUE) // NOVA EDIT CHANGE - AIRLOCKS - ORIGINAL: future_pancake.Paralyze(100) else //for simple_animals & borgs future_pancake.adjustBruteLoss(DOOR_CRUSH_DAMAGE) var/turf/location = get_turf(src) @@ -599,4 +599,4 @@ return ..() return ..(0) -// #undef DOOR_CLOSE_WAIT // SKYRAT EDIT REMOVAL - moved to code/__DEFINES/~skyrat_defines/airlock.dm +// #undef DOOR_CLOSE_WAIT // NOVA EDIT REMOVAL - moved to code/__DEFINES/~nova_defines/airlock.dm diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index b38ecb7c60fd7d..8c6e5174a28c9b 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -24,8 +24,6 @@ COOLDOWN_DECLARE(activation_cooldown) - ///Trick to get the glowing overlay visible from a distance - luminosity = 1 ///X offset for the overlay lights, so that they line up with the thin border firelocks var/light_xoffset = 0 ///Y offset for the overlay lights, so that they line up with the thin border firelocks @@ -270,14 +268,15 @@ /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() - var/pressure = environment?.return_pressure() //SKYRAT EDIT ADDITION - Micro optimisation - if(environment?.temperature >= BODYTEMP_HEAT_DAMAGE_LIMIT || pressure > WARNING_HIGH_PRESSURE) //SKYRAT EDIT CHANGE - BETTER LOCKS + var/pressure = environment?.return_pressure() //NOVA EDIT ADDITION - Micro optimisation + if(environment?.temperature >= BODYTEMP_HEAT_DAMAGE_LIMIT || pressure > WARNING_HIGH_PRESSURE) //NOVA EDIT CHANGE - BETTER LOCKS return FIRELOCK_ALARM_TYPE_HOT - if(environment?.temperature <= BODYTEMP_COLD_DAMAGE_LIMIT || pressure < WARNING_LOW_PRESSURE) //SKYRAT EDIT CHANGE - BETTER LOCKS + if(environment?.temperature <= BODYTEMP_COLD_DAMAGE_LIMIT || pressure < WARNING_LOW_PRESSURE) //NOVA EDIT CHANGE - BETTER LOCKS return FIRELOCK_ALARM_TYPE_COLD return @@ -492,17 +491,17 @@ if(boltslocked) to_chat(user, span_notice("There are screws locking the bolts in place!")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS tool.play_tool_sound(src) user.visible_message(span_notice("[user] starts undoing [src]'s bolts..."), \ span_notice("You start unfastening [src]'s floor bolts...")) if(!tool.use_tool(src, user, DEFAULT_STEP_TIME)) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, TRUE) user.visible_message(span_notice("[user] unfastens [src]'s bolts."), \ span_notice("You undo [src]'s floor bolts.")) deconstruct(TRUE) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/door/firedoor/screwdriver_act(mob/living/user, obj/item/tool) if(operating || !welded) @@ -511,7 +510,7 @@ span_notice("You [boltslocked ? "unlock" : "lock"] [src]'s floor bolts.")) tool.play_tool_sound(src) boltslocked = !boltslocked - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/door/firedoor/try_to_activate_door(mob/user, access_bypass = FALSE) return @@ -658,7 +657,7 @@ correct_state() //So we should re-evaluate our state /obj/machinery/door/firedoor/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) var/turf/targetloc = get_turf(src) if(disassembled || prob(40)) var/obj/structure/firelock_frame/unbuilt_lock = new assemblytype(targetloc) @@ -747,7 +746,7 @@ /obj/machinery/door/firedoor/heavy name = "heavy firelock" - icon = 'icons/obj/doors/Doorfire.dmi' //SKYRAT EDIT - ICON OVERRIDEN IN AESTHETICS MODULE + icon = 'icons/obj/doors/Doorfire.dmi' //NOVA EDIT - ICON OVERRIDEN IN AESTHETICS MODULE glass = FALSE explosion_block = 2 assemblytype = /obj/structure/firelock_frame/heavy @@ -762,7 +761,7 @@ /obj/structure/firelock_frame name = "firelock frame" desc = "A partially completed firelock." - icon = 'icons/obj/doors/Doorfire.dmi' //SKYRAT EDIT - ICON OVERRIDEN IN AESTHETICS MODULE + icon = 'icons/obj/doors/Doorfire.dmi' //NOVA EDIT - ICON OVERRIDEN IN AESTHETICS MODULE icon_state = "frame1" base_icon_state = "frame" anchored = FALSE diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index 2f57238127dd0b..f1d29735a24462 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -36,15 +36,15 @@ . = ..() if (density) balloon_alert(user, "open the door first!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS else if (default_deconstruction_screwdriver(user, icon_state, icon_state, tool)) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/door/poddoor/multitool_act(mob/living/user, obj/item/tool) . = ..() if (density) balloon_alert(user, "open the door first!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if (!panel_open) return if (deconstruction != BLASTDOOR_FINISHED) @@ -55,16 +55,16 @@ id = change_id to_chat(user, span_notice("You change the ID to [id].")) balloon_alert(user, "id changed") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/door/poddoor/crowbar_act(mob/living/user, obj/item/tool) . = ..() if(machine_stat & NOPOWER) open(TRUE) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if (density) balloon_alert(user, "open the door first!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if (!panel_open) return if (deconstruction != BLASTDOOR_FINISHED) @@ -75,13 +75,13 @@ id = null deconstruction = BLASTDOOR_NEEDS_ELECTRONICS balloon_alert(user, "removed airlock electronics") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/door/poddoor/wirecutter_act(mob/living/user, obj/item/tool) . = ..() if (density) balloon_alert(user, "open the door first!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if (!panel_open) return if (deconstruction != BLASTDOOR_NEEDS_ELECTRONICS) @@ -93,13 +93,13 @@ new /obj/item/stack/cable_coil(loc, amount) deconstruction = BLASTDOOR_NEEDS_WIRES balloon_alert(user, "removed internal cables") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/door/poddoor/welder_act(mob/living/user, obj/item/tool) . = ..() if (density) balloon_alert(user, "open the door first!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if (!panel_open) return if (deconstruction != BLASTDOOR_NEEDS_WIRES) @@ -111,7 +111,7 @@ new /obj/item/stack/sheet/plasteel(loc, amount) user.balloon_alert(user, "torn apart") qdel(src) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/door/poddoor/examine(mob/user) . = ..() diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index c70d7a751edd2b..9179dbaf94febe 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -302,7 +302,7 @@ /obj/machinery/door/window/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1) && !disassembled) + if(!(obj_flags & NO_DECONSTRUCTION) && !disassembled) for(var/i in 1 to shards) drop_debris(new /obj/item/shard(src)) if(rods) @@ -346,7 +346,7 @@ /obj/machinery/door/window/screwdriver_act(mob/living/user, obj/item/tool) . = ..() - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return if(density || operating) to_chat(user, span_warning("You need to open the door to access the maintenance panel!")) @@ -359,7 +359,7 @@ /obj/machinery/door/window/crowbar_act(mob/living/user, obj/item/tool) . = ..() - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return if(!panel_open || density || operating) return diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm index 4a3e7e2bd69702..39ab1deb7a4407 100644 --- a/code/game/machinery/droneDispenser.dm +++ b/code/game/machinery/droneDispenser.dm @@ -56,8 +56,8 @@ /datum/component/material_container, \ list(/datum/material/iron, /datum/material/glass), \ SHEET_MATERIAL_AMOUNT * MAX_STACK_SIZE * 2, \ - MATCONTAINER_EXAMINE|BREAKDOWN_FLAGS_DRONE_DISPENSER, \ - allowed_items=/obj/item/stack \ + MATCONTAINER_EXAMINE, \ + allowed_items = /obj/item/stack \ ) materials.insert_amount_mat(starting_amount) materials.precise_insertion = TRUE @@ -73,7 +73,7 @@ /obj/machinery/drone_dispenser/syndrone //Please forgive me name = "syndrone shell dispenser" - desc = "A suspicious machine that will create Syndicate exterminator drones when supplied with iron and glass. Disgusting." + desc = "A suspicious machine that will create Symphionia exterminator drones when supplied with iron and glass. Disgusting." dispense_type = /obj/effect/mob_spawn/ghost_role/drone/syndrone //If we're gonna be a jackass, go the full mile - 10 second recharge timer cooldownTime = 100 @@ -82,7 +82,7 @@ /obj/machinery/drone_dispenser/syndrone/badass //Please forgive me name = "badass syndrone shell dispenser" - desc = "A suspicious machine that will create Syndicate exterminator drones when supplied with iron and glass. Disgusting. This one seems ominous." + desc = "A suspicious machine that will create Symphionia exterminator drones when supplied with iron and glass. Disgusting. This one seems ominous." dispense_type = /obj/effect/mob_spawn/ghost_role/drone/syndrone/badass end_create_message = "dispenses an ominous suspicious drone shell." @@ -152,7 +152,6 @@ . += span_warning("[recharging_text]") /obj/machinery/drone_dispenser/process() - ..() if((machine_stat & (NOPOWER|BROKEN)) || !anchored) return @@ -262,7 +261,7 @@ playsound(src, break_sound, 50, TRUE) /obj/machinery/drone_dispenser/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/stack/sheet/iron(loc, 5) qdel(src) diff --git a/code/game/machinery/embedded_controller/access_controller.dm b/code/game/machinery/embedded_controller/access_controller.dm index 0b66fd391b1604..1fc7c41e2e9cda 100644 --- a/code/game/machinery/embedded_controller/access_controller.dm +++ b/code/game/machinery/embedded_controller/access_controller.dm @@ -39,7 +39,7 @@ /obj/machinery/door_buttons/access_button - icon = 'icons/obj/machines/wallmounts.dmi' // SKYRAT EDIT CHANGE - ICON OVERRIDEN BY AESTHETICS - SEE MODULE + icon = 'icons/obj/machines/wallmounts.dmi' // NOVA EDIT CHANGE - ICON OVERRIDEN BY AESTHETICS - SEE MODULE icon_state = "access_button_standby" base_icon_state = "access_button" name = "access button" @@ -106,6 +106,7 @@ base_icon_state = "access_control" name = "access console" desc = "A small console that can cycle opening between two airlocks." + interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON|INTERACT_MACHINE_SET_MACHINE var/obj/machinery/door/airlock/interiorAirlock var/obj/machinery/door/airlock/exteriorAirlock var/idInterior diff --git a/code/game/machinery/embedded_controller/airlock_controller.dm b/code/game/machinery/embedded_controller/airlock_controller.dm index e16e9f61c24207..0e5e7701696a2f 100644 --- a/code/game/machinery/embedded_controller/airlock_controller.dm +++ b/code/game/machinery/embedded_controller/airlock_controller.dm @@ -6,7 +6,7 @@ #define AIRLOCK_STATE_OUTOPEN "outopen" /obj/machinery/airlock_controller - icon = 'icons/obj/machines/wallmounts.dmi' // SKYRAT EDIT CHANGE - ICON OVERRIDEN BY AESTHETICS - SEE MODULE + icon = 'icons/obj/machines/wallmounts.dmi' // NOVA EDIT CHANGE - ICON OVERRIDEN BY AESTHETICS - SEE MODULE icon_state = "airlock_control_standby" base_icon_state = "airlock_control" diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index e69ccf5edf0853..cef15f43caa2b5 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -27,8 +27,6 @@ light_range = 1.6 light_color = LIGHT_COLOR_ELECTRIC_CYAN - //Trick to get the glowing overlay visible from a distance - luminosity = 1 //We want to use area sensitivity, let us always_area_sensitive = TRUE ///Buildstate for contruction steps @@ -147,9 +145,9 @@ /obj/machinery/firealarm/update_appearance(updates) . = ..() if((my_area?.fire || LAZYLEN(my_area?.active_firelocks)) && !(obj_flags & EMAGGED) && !(machine_stat & (BROKEN|NOPOWER))) - set_light(l_power = 3) + set_light(l_range = 2.5, l_power = 1.5) else - set_light(l_power = 1) + set_light(l_range = 1.6, l_power = 1) /obj/machinery/firealarm/update_icon_state() if(panel_open) @@ -189,7 +187,7 @@ set_light(l_color = LIGHT_COLOR_FLARE) if(SEC_LEVEL_DELTA) set_light(l_color = LIGHT_COLOR_INTENSE_RED) - //SKYRAT EDIT ADDITION BEGIN - ADDITIONAL ALERT LEVELS + //NOVA EDIT ADDITION BEGIN - ADDITIONAL ALERT LEVELS if(SEC_LEVEL_VIOLET) set_light(l_color = COLOR_VIOLET) if(SEC_LEVEL_ORANGE) @@ -198,7 +196,7 @@ set_light(l_color = LIGHT_COLOR_DIM_YELLOW) if(SEC_LEVEL_GAMMA) set_light(l_color = COLOR_ASSEMBLY_PURPLE) - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END else . += mutable_appearance(icon, "fire_offstation") . += emissive_appearance(icon, "fire_level_e", src, alpha = src.alpha) @@ -453,7 +451,7 @@ return ..() /obj/machinery/firealarm/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/stack/sheet/iron(loc, 1) if(buildstage > FIRE_ALARM_BUILD_NO_CIRCUIT) var/obj/item/item = new /obj/item/electronics/firealarm(loc) diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 8075b51dcab001..efe28051a211bf 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -145,7 +145,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/flasher, 26) power_change() /obj/machinery/flasher/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(bulb) bulb.forceMove(loc) if(disassembled) diff --git a/code/game/machinery/gulag_item_reclaimer.dm b/code/game/machinery/gulag_item_reclaimer.dm index 9c649b2c8ee961..e1c2c8c73d6f8e 100644 --- a/code/game/machinery/gulag_item_reclaimer.dm +++ b/code/game/machinery/gulag_item_reclaimer.dm @@ -30,6 +30,7 @@ I.forceMove(get_turf(src)) if(linked_teleporter) linked_teleporter.linked_reclaimer = null + linked_teleporter = null return ..() /obj/machinery/gulag_item_reclaimer/emag_act(mob/user, obj/item/card/emag/emag_card) diff --git a/code/game/machinery/gulag_teleporter.dm b/code/game/machinery/gulag_teleporter.dm index ce46a5d2fce97e..2fffb98d56c789 100644 --- a/code/game/machinery/gulag_teleporter.dm +++ b/code/game/machinery/gulag_teleporter.dm @@ -43,6 +43,7 @@ The console is located at computer/gulag_teleporter.dm /obj/machinery/gulag_teleporter/Destroy() if(linked_reclaimer) linked_reclaimer.linked_teleporter = null + linked_reclaimer = null return ..() /obj/machinery/gulag_teleporter/interact(mob/user) diff --git a/code/game/machinery/harvester.dm b/code/game/machinery/harvester.dm index 1a16c00e42da86..612277d57845c3 100644 --- a/code/game/machinery/harvester.dm +++ b/code/game/machinery/harvester.dm @@ -103,7 +103,6 @@ "[occupant] is about to be ground up by a malfunctioning organ harvester!", source = src, header = "Gruesome!", - action = NOTIFY_ORBIT, ) operation_order = reverseList(carbon_occupant.bodyparts) //Chest and head are first in bodyparts, so we invert it to make them suffer more @@ -172,7 +171,7 @@ return TRUE /obj/machinery/harvester/default_pry_open(obj/item/tool) //wew - . = !(state_open || panel_open || (flags_1 & NODECONSTRUCT_1)) && tool.tool_behaviour == TOOL_CROWBAR //We removed is_operational here + . = !(state_open || panel_open || (obj_flags & NO_DECONSTRUCTION)) && tool.tool_behaviour == TOOL_CROWBAR //We removed is_operational here if(.) tool.play_tool_sound(src, 50) visible_message(span_notice("[usr] pries open \the [src]."), span_notice("You pry open [src].")) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 4104d7b93f888b..11726392619c17 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -123,7 +123,7 @@ Possible to do for anyone motivated enough: /obj/machinery/holopad/tutorial resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - flags_1 = NODECONSTRUCT_1 + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION on_network = FALSE ///Proximity monitor associated with this atom, needed for proximity checks. var/datum/proximity_monitor/proximity_monitor @@ -231,7 +231,7 @@ Possible to do for anyone motivated enough: /obj/machinery/holopad/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/holopad/set_anchored(anchorvalue) . = ..() @@ -548,15 +548,15 @@ Possible to do for anyone motivated enough: if(AI) AI.eyeobj.setLoc(get_turf(src)) //ensure the AI camera moves to the holopad - hologram.Impersonation = AI //SKYRAT EDIT -- ADDITION -- Customization; puts the AI core as the impersonated mob so that the examine proc can be redirected + hologram.Impersonation = AI //NOVA EDIT -- ADDITION -- Customization; puts the AI core as the impersonated mob so that the examine proc can be redirected else //make it like real life hologram.Impersonation = user - //Hologram.mouse_opacity = MOUSE_OPACITY_TRANSPARENT//So you can't click on it. //SKYRAT EDIT -- Customization; Making holograms clickable/examinable + //Hologram.mouse_opacity = MOUSE_OPACITY_TRANSPARENT//So you can't click on it. //NOVA EDIT -- Customization; Making holograms clickable/examinable hologram.layer = FLY_LAYER //Above all the other objects/mobs. Or the vast majority of them. SET_PLANE_EXPLICIT(hologram, ABOVE_GAME_PLANE, src) hologram.set_anchored(TRUE)//So space wind cannot drag it. //hologram.name = "[user.name] (Hologram)"//If someone decides to right click. // ORIGINAL - hologram.name = user.name //SKYRAT EDIT -- Make the name exact, so that the double-emotes are less jarring in the chat + hologram.name = user.name //NOVA EDIT -- Make the name exact, so that the double-emotes are less jarring in the chat set_holo(user, hologram) set_holo(user, hologram) diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 060b29c4d20d76..a28f855862ae48 100644 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -53,10 +53,10 @@ loc.balloon_alert(user, "[src] dismantled") deconstruct(TRUE) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/igniter/deconstruct(disassembled) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/stack/sheet/iron(loc, 5) new /obj/item/assembly/igniter(loc) return ..() @@ -68,7 +68,7 @@ id = change_id balloon_alert(user, "id set to [id]") to_chat(user, span_notice("You change the ID to [id].")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/igniter/incinerator_ordmix id = INCINERATOR_ORDMIX_IGNITER @@ -198,10 +198,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/sparker, 26) loc.balloon_alert(user, "[src] dismantled") deconstruct(TRUE) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/sparker/deconstruct(disassembled) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/wallframe/sparker(loc) return ..() @@ -212,7 +212,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/sparker, 26) id = change_id balloon_alert(user, "id set to [id]") to_chat(user, span_notice("You change the ID to [id].")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/sparker/update_icon_state() if(disable) diff --git a/code/game/machinery/incident_display.dm b/code/game/machinery/incident_display.dm index 97557c5611c1a4..63418e4457ec3d 100644 --- a/code/game/machinery/incident_display.dm +++ b/code/game/machinery/incident_display.dm @@ -165,7 +165,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/incident_display/tram, 32) update_appearance() /obj/machinery/incident_display/deconstruct() - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return new /obj/item/stack/sheet/mineral/titanium(drop_location(), 2) @@ -215,12 +215,12 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/incident_display/tram, 32) var/mutable_appearance/delam_base_emissive = emissive_appearance(icon, "delam_base_emissive", src, alpha = src.alpha) var/delam_display_color . += delam_base_emissive - if(!last_delam) + if(last_delam <= 0) delam_display_color = COLOR_DISPLAY_RED else delam_display_color = COLOR_DISPLAY_YELLOW - var/delam_pos1 = last_delam % 10 + var/delam_pos1 = clamp(last_delam, 0, 199) % 10 var/mutable_appearance/delam_pos1_overlay = mutable_appearance(icon, "num_[delam_pos1]") var/mutable_appearance/delam_pos1_emissive = emissive_appearance(icon, "num_[delam_pos1]_e", src, alpha = src.alpha) delam_pos1_overlay.color = delam_display_color @@ -231,7 +231,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/incident_display/tram, 32) . += delam_pos1_overlay . += delam_pos1_emissive - var/delam_pos2 = (last_delam / 10) % 10 + var/delam_pos2 = (clamp(last_delam, 0, 199) / 10) % 10 var/mutable_appearance/delam_pos2_overlay = mutable_appearance(icon, "num_[delam_pos2]") var/mutable_appearance/delam_pos2_emissive = emissive_appearance(icon, "num_[delam_pos2]_e", src, alpha = src.alpha) delam_pos2_overlay.color = delam_display_color @@ -327,24 +327,25 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/incident_display/tram, 32) . = ..() if(sign_features & DISPLAY_DELAM) - . += span_info("It has been [last_delam] shift\s since the last delamination event at this Nanotrasen facility.") - switch (last_delam) - if(0) - . += span_info("In case you didn't notice.
") - if(1) - . += span_info("Let's do better today.
") - if(2 to 5) - . += span_info("There's room for improvement.
") - if(6 to 10) - . += span_info("Good work!
") - if(69) - . += span_info("Nice.
") - else - . += span_info("Incredible!
") + if(last_delam >= 0) + . += span_info("It has been [last_delam] shift\s since the last delamination event at this Nanotrasen facility.") + switch(last_delam) + if(0) + . += span_info("Let's do better today.
") + if(1 to 5) + . += span_info("There's room for improvement.
") + if(6 to 10) + . += span_info("Good work!
") + if(69) + . += span_info("Nice.
") + else + . += span_info("Incredible!
") + else + . += span_info("The supermatter crystal has delaminated, in case you didn't notice.") if(sign_features & DISPLAY_TRAM) . += span_info("The station has had [hit_count] tram incident\s this shift.") - switch (hit_count) + switch(hit_count) if(0) . += span_info("Fantastic! Champions of safety.
") if(1) diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 5b1c0e35a844a4..25e963ad6d5739 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -218,7 +218,7 @@ set_transfer_rate(transfer_rate > MIN_IV_TRANSFER_RATE ? MIN_IV_TRANSFER_RATE : MAX_IV_TRANSFER_RATE) /obj/machinery/iv_drip/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/stack/sheet/iron(loc) qdel(src) diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm index 5400cccf2f2e9a..910f3802bfd6ba 100644 --- a/code/game/machinery/launch_pad.dm +++ b/code/game/machinery/launch_pad.dm @@ -8,29 +8,31 @@ active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 2.5 hud_possible = list(DIAG_LAUNCHPAD_HUD) circuit = /obj/item/circuitboard/machine/launchpad + /// The beam icon var/icon_teleport = "lpad-beam" - var/stationary = TRUE //to prevent briefcase pad deconstruction and such + /// To prevent briefcase pad deconstruction and such + var/stationary = TRUE + /// What to name the launchpad in the console var/display_name = "Launchpad" + /// The speed of the teleportation var/teleport_speed = 35 + /// Max range of the launchpad var/range = 10 - var/teleporting = FALSE //if it's in the process of teleporting + /// If it's in the process of teleporting + var/teleporting = FALSE + /// The power efficiency of the launchpad var/power_efficiency = 1 + /// Current x target var/x_offset = 0 + /// Current y target var/y_offset = 0 + /// The icon to use for the indicator var/indicator_icon = "launchpad_target" /// Determines if the bluespace launchpad is blatantly obvious on teleportation. var/hidden = FALSE /// The beam on teleportation var/teleport_beam = "sm_arc_supercharged" -/obj/machinery/launchpad/RefreshParts() - . = ..() - var/max_range_multiplier = 0 - for(var/datum/stock_part/servo/servo in component_parts) - max_range_multiplier += servo.tier - range = initial(range) - range *= max_range_multiplier - /obj/machinery/launchpad/Initialize(mapload) . = ..() prepare_huds() @@ -39,23 +41,19 @@ update_hud() +/obj/machinery/launchpad/RefreshParts() + . = ..() + var/max_range_multiplier = 0 + for(var/datum/stock_part/servo/servo in component_parts) + max_range_multiplier += servo.tier + range = initial(range) + range *= max_range_multiplier + /obj/machinery/launchpad/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents) if(same_z_layer && !QDELETED(src)) update_hud() return ..() -/obj/machinery/launchpad/proc/update_hud() - var/image/holder = hud_list[DIAG_LAUNCHPAD_HUD] - var/mutable_appearance/target = mutable_appearance('icons/effects/effects.dmi', "launchpad_target", ABOVE_OPEN_TURF_LAYER, src, GAME_PLANE) - holder.appearance = target - - update_indicator() - - if(stationary) - AddComponent(/datum/component/usb_port, list( - /obj/item/circuit_component/bluespace_launchpad, - )) - /obj/machinery/launchpad/Destroy() for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds) diag_hud.remove_atom_from_hud(src) @@ -66,25 +64,24 @@ if(in_range(user, src) || isobserver(user)) . += span_notice("The status display reads: Maximum range: [range] units.") -/obj/machinery/launchpad/attackby(obj/item/I, mob/user, params) - if(stationary) - if(default_deconstruction_screwdriver(user, "lpad-idle-open", "lpad-idle", I)) - update_indicator() - return +/obj/machinery/launchpad/attackby(obj/item/weapon, mob/user, params) + if(!stationary) + return ..() - if(panel_open) - if(I.tool_behaviour == TOOL_MULTITOOL) - if(!multitool_check_buffer(user, I)) - return - var/obj/item/multitool/M = I - M.set_buffer(src) - balloon_alert(user, "saved to multitool buffer") - return 1 + if(default_deconstruction_screwdriver(user, "lpad-idle-open", "lpad-idle", weapon)) + update_indicator() + return - if(default_deconstruction_crowbar(I)) + if(panel_open && weapon.tool_behaviour == TOOL_MULTITOOL) + if(!multitool_check_buffer(user, weapon)) return + var/obj/item/multitool/multi = weapon + multi.set_buffer(src) + balloon_alert(user, "saved to buffer") + return TRUE - return ..() + if(default_deconstruction_crowbar(weapon)) + return /obj/machinery/launchpad/attack_ghost(mob/dead/observer/ghost) . = ..() @@ -95,17 +92,30 @@ var/turf/target = locate(target_x, target_y, z) ghost.forceMove(target) -/obj/machinery/launchpad/proc/isAvailable() - if(machine_stat & NOPOWER) - return FALSE - if(panel_open) +/// Updates diagnostic huds +/obj/machinery/launchpad/proc/update_hud() + var/image/holder = hud_list[DIAG_LAUNCHPAD_HUD] + var/mutable_appearance/target = mutable_appearance('icons/effects/effects.dmi', "launchpad_target", ABOVE_OPEN_TURF_LAYER, src, GAME_PLANE) + holder.appearance = target + + update_indicator() + + if(stationary) + AddComponent(/datum/component/usb_port, list( + /obj/item/circuit_component/bluespace_launchpad, + )) + +/// Whether this launchpad can send or receive. +/obj/machinery/launchpad/proc/is_available() + if(QDELETED(src) || !is_operational || panel_open) return FALSE return TRUE +/// Updates the indicator icon. /obj/machinery/launchpad/proc/update_indicator() var/image/holder = hud_list[DIAG_LAUNCHPAD_HUD] var/turf/target_turf - if(isAvailable()) + if(is_available()) target_turf = locate(x + x_offset, y + y_offset, z) if(target_turf) holder.icon_state = indicator_icon @@ -113,6 +123,7 @@ else holder.icon_state = null +/// Sets the offset of the launchpad. /obj/machinery/launchpad/proc/set_offset(x, y) if(teleporting) return @@ -132,15 +143,18 @@ . = ..() animate(src, alpha = 0, flags = ANIMATION_PARALLEL, time = BEAM_FADE_TIME) - +/// Checks if the launchpad can teleport. /obj/machinery/launchpad/proc/teleport_checks() - if(!isAvailable()) + if(!is_available()) return "ERROR: Launchpad not operative. Make sure the launchpad is ready and powered." + if(teleporting) return "ERROR: Launchpad busy." - var/turf/pad_turf = get_turf(src) - if(pad_turf && is_centcom_level(pad_turf.z)) + + var/area/surrounding = get_area(src) + if(is_centcom_level(z) || istype(surrounding, /area/shuttle)) return "ERROR: Launchpad not operative. Heavy area shielding makes teleporting impossible." + return null /// Performs the teleport. @@ -179,7 +193,7 @@ indicator_icon = "launchpad_target" update_indicator() - if(QDELETED(src) || !isAvailable()) + if(!is_available()) return teleporting = FALSE @@ -277,7 +291,7 @@ briefcase = null return ..() -/obj/machinery/launchpad/briefcase/isAvailable() +/obj/machinery/launchpad/briefcase/is_available() if(closed) return FALSE if(panel_open) diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index c9b220bb0cdc2d..0c621c6ed19b3a 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -1,7 +1,7 @@ /// The light switch. Can have multiple per area. /obj/machinery/light_switch name = "light switch" - icon = 'icons/obj/machines/wallmounts.dmi' //SKYRAT EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE + icon = 'icons/obj/machines/wallmounts.dmi' //NOVA EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE icon_state = "light-nopower" base_icon_state = "light" desc = "Make dark." @@ -12,6 +12,8 @@ var/area/area = null ///Range of the light emitted when powered, but off var/light_on_range = 1 + /// Should this lightswitch automatically rename itself to match the area it's in? + var/autoname = TRUE MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/light_switch, 26) @@ -29,12 +31,22 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/light_switch, 26) area = GLOB.areas_by_type[area] if(!area) area = get_area(src) - if(!name) + if(autoname) name = "light switch ([area.name])" find_and_hang_on_wall(custom_drop_callback = CALLBACK(src, PROC_REF(deconstruct), TRUE)) - + register_context() update_appearance() +/obj/machinery/light_switch/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + if(isnull(held_item)) + context[SCREENTIP_CONTEXT_LMB] = area.lightswitch ? "Flick off" : "Flick on" + return CONTEXTUAL_SCREENTIP_SET + if(held_item.tool_behaviour != TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_RMB] = "Deconstruct" + return CONTEXTUAL_SCREENTIP_SET + return . + /obj/machinery/light_switch/update_appearance(updates=ALL) . = ..() luminosity = (machine_stat & NOPOWER) ? 0 : 1 @@ -62,13 +74,22 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/light_switch, 26) . = ..() set_lights(!area.lightswitch) +/obj/machinery/light_switch/attackby_secondary(obj/item/weapon, mob/user, params) + if(weapon.tool_behaviour == TOOL_SCREWDRIVER) + to_chat(user, "You pop \the [src] off the wall.") + deconstruct() + return COMPONENT_CANCEL_ATTACK_CHAIN + return ..() + /obj/machinery/light_switch/proc/set_lights(status) if(area.lightswitch == status) return area.lightswitch = status area.update_appearance() - for(var/obj/machinery/light_switch/light_switch in area) + for(var/obj/machinery/light_switch/light_switch as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/light_switch)) + if(light_switch.area != area) + continue light_switch.update_appearance() SEND_SIGNAL(light_switch, COMSIG_LIGHT_SWITCH_SET, status) @@ -87,7 +108,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/light_switch, 26) power_change() /obj/machinery/light_switch/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/wallframe/light_switch(loc) qdel(src) diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index 75976f98be37ee..38d88b013d1a18 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -283,7 +283,7 @@ /obj/machinery/limbgrower/fullupgrade //Inherently cheaper organ production. This is to NEVER be inherently emagged, no valids. desc = "It grows new limbs using Synthflesh. This alien model seems more efficient." - flags_1 = NODECONSTRUCT_1 + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION circuit = /obj/item/circuitboard/machine/limbgrower/fullupgrade /obj/machinery/limbgrower/fullupgrade/Initialize(mapload) diff --git a/code/game/machinery/medical_kiosk.dm b/code/game/machinery/medical_kiosk.dm index b5aa3ab24e37a6..3b12e38a527d28 100644 --- a/code/game/machinery/medical_kiosk.dm +++ b/code/game/machinery/medical_kiosk.dm @@ -108,7 +108,7 @@ /obj/machinery/medical_kiosk/wrench_act(mob/living/user, obj/item/tool) //Allows for wrenching/unwrenching the machine. ..() default_unfasten_wrench(user, tool, time = 0.1 SECONDS) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/medical_kiosk/RefreshParts() . = ..() @@ -256,17 +256,16 @@ blood_status = "Patient blood levels are currently reading [blood_percent]%. Patient has [ blood_type] type blood. [blood_warning]" var/trauma_status = "Patient is free of unique brain trauma." - var/clone_loss = patient.getCloneLoss() var/brain_loss = patient.get_organ_loss(ORGAN_SLOT_BRAIN) var/brain_status = "Brain patterns normal." if(LAZYLEN(patient.get_traumas())) var/list/trauma_text = list() for(var/t in patient.get_traumas()) var/datum/brain_trauma/trauma = t - //SKYRAT EDIT: Scary Traits (Bimbo) + //NOVA EDIT: Scary Traits (Bimbo) if(!trauma.display_scanner) continue - //SKYRAT EDIT: Scary Traits (Bimbo) + //NOVA EDIT: Scary Traits (Bimbo) var/trauma_desc = "" switch(trauma.resilience) if(TRAUMA_RESILIENCE_SURGERY) @@ -310,13 +309,13 @@ if (patient.has_status_effect(/datum/status_effect/hallucination)) hallucination_status = "Subject appears to be hallucinating. Suggested treatments: bedrest, mannitol or psicodine." - if(patient.stat == DEAD || HAS_TRAIT(patient, TRAIT_FAKEDEATH) || ((brute_loss+fire_loss+tox_loss+oxy_loss+clone_loss) >= 200)) //Patient status checks. + if(patient.stat == DEAD || HAS_TRAIT(patient, TRAIT_FAKEDEATH) || ((brute_loss+fire_loss+tox_loss+oxy_loss) >= 200)) //Patient status checks. patient_status = "Dead." - if((brute_loss+fire_loss+tox_loss+oxy_loss+clone_loss) >= 80) + if((brute_loss+fire_loss+tox_loss+oxy_loss) >= 80) patient_status = "Gravely Injured" - else if((brute_loss+fire_loss+tox_loss+oxy_loss+clone_loss) >= 40) + else if((brute_loss+fire_loss+tox_loss+oxy_loss) >= 40) patient_status = "Injured" - else if((brute_loss+fire_loss+tox_loss+oxy_loss+clone_loss) >= 20) + else if((brute_loss+fire_loss+tox_loss+oxy_loss) >= 20) patient_status = "Lightly Injured" if(pandemonium || user.has_status_effect(/datum/status_effect/hallucination)) patient_status = pick( @@ -350,7 +349,6 @@ data["burn_health"] = round(fire_loss+(chaos_modifier * (rand(1,30))),0.001) //then a random number is added, which is multiplied by chaos modifier. data["toxin_health"] = round(tox_loss+(chaos_modifier * (rand(1,30))),0.001) //That allows for a weaker version of the affect to be applied while hallucinating as opposed to emagged. data["suffocation_health"] = round(oxy_loss+(chaos_modifier * (rand(1,30))),0.001) //It's not the cleanest but it does make for a colorful window. - data["clone_health"] = round(clone_loss+(chaos_modifier * (rand(1,30))),0.001) data["brain_health"] = brain_status data["brain_damage"] = brain_loss+(chaos_modifier * (rand(1,30))) data["patient_status"] = patient_status diff --git a/code/game/machinery/medipen_refiller.dm b/code/game/machinery/medipen_refiller.dm index 8f17ad3faba811..5563000183c649 100644 --- a/code/game/machinery/medipen_refiller.dm +++ b/code/game/machinery/medipen_refiller.dm @@ -76,7 +76,7 @@ return add_overlay("active") if(do_after(user, 2 SECONDS, src)) - medipen.reagents.maximum_volume = initial(medipen.reagents.maximum_volume) + medipen.used_up = FALSE medipen.add_initial_reagents() reagents.remove_reagent(allowed_pens[medipen.type], 10) balloon_alert(user, "refilled") @@ -94,7 +94,7 @@ /obj/machinery/medipen_refiller/wrench_act(mob/living/user, obj/item/tool) default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/medipen_refiller/crowbar_act(mob/living/user, obj/item/tool) default_deconstruction_crowbar(tool) diff --git a/code/game/machinery/mining_weather_monitor.dm b/code/game/machinery/mining_weather_monitor.dm index d05d8820751a60..65cc4b9347c1ab 100644 --- a/code/game/machinery/mining_weather_monitor.dm +++ b/code/game/machinery/mining_weather_monitor.dm @@ -4,7 +4,6 @@ desc = "A machine monitoring atmospheric data from mining environments. Provides warnings about incoming weather fronts." icon = 'icons/obj/miningradio.dmi' icon_state = "wallmount" - luminosity = 1 light_power = 1 light_range = 1.6 diff --git a/code/game/machinery/modular_shield.dm b/code/game/machinery/modular_shield.dm index 3f08760166aec2..f4e15cfa878135 100644 --- a/code/game/machinery/modular_shield.dm +++ b/code/game/machinery/modular_shield.dm @@ -1,6 +1,6 @@ /obj/machinery/modular_shield_generator name = "Modular Shield Generator" - desc = "A forcefield generator, it seems more stationary than its cousins." + desc = "A forcefield generator, it seems more stationary than its cousins. It cant handle G-force and will require frequent reboots when built on mobile craft." icon = 'icons/obj/machines/modular_shield_generator.dmi' icon_state = "gen_recovering_closed" density = TRUE @@ -162,6 +162,10 @@ return activate_shields() +/obj/machinery/modular_shield_generator/onShuttleMove(turf/newT, turf/oldT, list/movement_force, move_dir, obj/docking_port/stationary/old_dock, obj/docking_port/mobile/moving_dock) + . = ..() + if(active) + deactivate_shields() ///generates the forcefield based on the given radius and calls calculate_regen to update the regen value accordingly /obj/machinery/modular_shield_generator/proc/activate_shields() @@ -438,17 +442,21 @@ /obj/machinery/modular_shield/module/wrench_act(mob/living/user, obj/item/tool) . = ..() - if(default_change_direction_wrench(user, tool)) - if(shield_generator) - LAZYREMOVE(shield_generator.connected_modules, (src)) - shield_generator.calculate_boost() - shield_generator = null - update_icon_state() - if(connected_node) - LAZYREMOVE(connected_node.connected_through_us, (src)) - connected_node = null - connected_turf = get_step(loc, dir) - return TRUE + if(!default_change_direction_wrench(user, tool)) + return FALSE + + if(shield_generator) + LAZYREMOVE(shield_generator.connected_modules, (src)) + shield_generator.calculate_boost() + shield_generator = null + update_icon_state() + + if(connected_node) + LAZYREMOVE(connected_node.connected_through_us, (src)) + connected_node = null + + connected_turf = get_step(loc, dir) + return TRUE /obj/machinery/modular_shield/module/crowbar_act(mob/living/user, obj/item/tool) . = ..() @@ -514,16 +522,26 @@ return icon_state = "node_on_[panel_open ? "open" : "closed"]" -/obj/machinery/modular_shield/module/node/setDir(new_dir) - . = ..() + +/obj/machinery/modular_shield/module/node/wrench_act(mob/living/user, obj/item/tool) + + if(!default_change_direction_wrench(user, tool)) + return FALSE disconnect_connected_through_us() - if(isnull(shield_generator)) - return - LAZYREMOVE(shield_generator.connected_modules, (src)) - shield_generator.calculate_boost() - shield_generator = null - update_icon_state() + + if(shield_generator) + LAZYREMOVE(shield_generator.connected_modules, (src)) + shield_generator.calculate_boost() + shield_generator = null + update_icon_state() + + if(connected_node) + LAZYREMOVE(connected_node.connected_through_us, (src)) + connected_node = null + + connected_turf = get_step(loc, dir) + return TRUE //after trying to connect to a machine infront of us, we will try to link anything connected to us to a generator /obj/machinery/modular_shield/module/node/try_connect(user) diff --git a/code/game/machinery/newscaster/newscaster_machine.dm b/code/game/machinery/newscaster/newscaster_machine.dm index 1ae08c066f043e..1d3062de0965c3 100644 --- a/code/game/machinery/newscaster/newscaster_machine.dm +++ b/code/game/machinery/newscaster/newscaster_machine.dm @@ -2,7 +2,7 @@ /obj/machinery/newscaster name = "newscaster" - desc = "A standard Nanotrasen-licensed newsfeed handler for use in commercial space stations. All the news you absolutely have no use for, in one place!" + desc = "A standard Symphionia-licensed newsfeed handler for use in commercial space stations. All the news you absolutely have no use for, in one place!" icon = 'icons/obj/machines/wallmounts.dmi' icon_state = "newscaster_off" base_icon_state = "newscaster" @@ -12,7 +12,7 @@ armor_type = /datum/armor/machinery_newscaster max_integrity = 200 integrity_failure = 0.25 - interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_SET_MACHINE|INTERACT_MACHINE_REQUIRES_LITERACY + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_REQUIRES_LITERACY ///Reference to the currently logged in user. var/datum/bank_account/current_user ///Name of the logged in user. @@ -221,7 +221,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) data["channelAuthor"] = current_channel?.author if(!current_channel) - data["channelAuthor"] = "Nanotrasen Inc" + data["channelAuthor"] = "Symphionia Inc" data["channelDesc"] = "Welcome to Newscaster Net. Interface & News networks Operational." data["channelLocked"] = TRUE else @@ -491,7 +491,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) /obj/machinery/newscaster/welder_act(mob/living/user, obj/item/tool) if(user.combat_mode) return - . = TOOL_ACT_TOOLTYPE_SUCCESS + . = ITEM_INTERACT_SUCCESS if(!(machine_stat & BROKEN)) to_chat(user, span_notice("[src] does not need repairs.")) return @@ -520,7 +520,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) to_chat(user, span_notice("You [anchored ? "un" : ""]secure [src].")) new /obj/item/wallframe/newscaster(loc) qdel(src) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/newscaster/play_attack_sound(damage, damage_type = BRUTE, damage_flag = 0) switch(damage_type) @@ -534,7 +534,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) /obj/machinery/newscaster/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/stack/sheet/iron(loc, 2) new /obj/item/shard(loc) new /obj/item/shard(loc) diff --git a/code/game/machinery/newscaster/newspaper.dm b/code/game/machinery/newscaster/newspaper.dm index d605d6257c3045..529430d6cad258 100644 --- a/code/game/machinery/newscaster/newspaper.dm +++ b/code/game/machinery/newscaster/newspaper.dm @@ -1,6 +1,6 @@ /obj/item/newspaper name = "newspaper" - desc = "An issue of The Griffon, the newspaper circulating aboard Nanotrasen Space Stations." + desc = "An issue of The Griffon, the newspaper circulating aboard Symphionia Space Stations." icon = 'icons/obj/service/bureaucracy.dmi' icon_state = "newspaper" inhand_icon_state = "newspaper" @@ -40,7 +40,7 @@ switch(screen) if(0) //Cover dat+="
The Griffon
" - dat+="
Nanotrasen-standard newspaper, for use on Nanotrasen? Space Facilities

" + dat+="
Symphionia-standard newspaper, for use on Symphionia? Space Facilities

" if(!length(news_content)) if(wantedAuthor) dat+="Contents:
    **Important Security Announcement** \[page [pages+2]\]
" diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index cf4e4d1e7e709f..1b07549231a700 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -133,6 +133,8 @@ DEFINE_BITFIELD(turret_flags, list( if(!has_cover) INVOKE_ASYNC(src, PROC_REF(popUp)) + AddElement(/datum/element/hostile_machine) + /obj/machinery/porta_turret/proc/toggle_on(set_to) var/current = on if (!isnull(set_to)) @@ -326,7 +328,7 @@ DEFINE_BITFIELD(turret_flags, list( //This code handles moving the turret around. After all, it's a portable turret! if(!anchored && !isinspace()) set_anchored(TRUE) - SetInvisibility(INVISIBILITY_MAXIMUM, id=type) + RemoveInvisibility(id=type) update_appearance() to_chat(user, span_notice("You secure the exterior bolts on the turret.")) if(has_cover) @@ -336,7 +338,7 @@ DEFINE_BITFIELD(turret_flags, list( set_anchored(FALSE) to_chat(user, span_notice("You unsecure the exterior bolts on the turret.")) power_change() - RemoveInvisibility(type) + SetInvisibility(INVISIBILITY_NONE, id=type) qdel(cover) //deletes the cover, and the turret instance itself becomes its own cover. else if(I.GetID()) @@ -407,7 +409,7 @@ DEFINE_BITFIELD(turret_flags, list( . = ..() if(.) power_change() - RemoveInvisibility(type) + SetInvisibility(INVISIBILITY_NONE, id=type) spark_system.start() //creates some sparks because they look cool qdel(cover) //deletes the cover - no need on keeping it there! @@ -514,7 +516,7 @@ DEFINE_BITFIELD(turret_flags, list( return if(machine_stat & BROKEN) return - RemoveInvisibility(type) + SetInvisibility(INVISIBILITY_NONE, id=type) raising = 1 if(cover) flick("popup", cover) @@ -556,7 +558,7 @@ DEFINE_BITFIELD(turret_flags, list( // If we aren't shooting heads then return a threatcount of 0 if (!(turret_flags & TURRET_FLAG_SHOOT_HEADS)) var/datum/job/apparent_job = SSjob.GetJob(perp.get_assignment()) - if(apparent_job?.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) + if(apparent_job?.job_flags & JOB_HEAD_OF_STAFF) return 0 if(turret_flags & TURRET_FLAG_AUTH_WEAPONS) //check for weapon authorization @@ -745,7 +747,7 @@ DEFINE_BITFIELD(turret_flags, list( return /obj/machinery/porta_turret/syndicate/assess_perp(mob/living/carbon/human/perp) - return 10 //Syndicate turrets shoot everything not in their faction + return 10 //Symphionia turrets shoot everything not in their faction /obj/machinery/porta_turret/syndicate/energy icon_state = "standard_lethal" diff --git a/code/game/machinery/porta_turret/portable_turret_cover.dm b/code/game/machinery/porta_turret/portable_turret_cover.dm index a45828755748ce..082881fc2fa910 100644 --- a/code/game/machinery/porta_turret/portable_turret_cover.dm +++ b/code/game/machinery/porta_turret/portable_turret_cover.dm @@ -43,12 +43,12 @@ if(!parent_turret.anchored) parent_turret.set_anchored(TRUE) to_chat(user, span_notice("You secure the exterior bolts on the turret.")) - parent_turret.RemoveInvisibility(type) + parent_turret.SetInvisibility(INVISIBILITY_NONE, id=type, priority=INVISIBILITY_PRIORITY_TURRET_COVER) parent_turret.update_appearance() else parent_turret.set_anchored(FALSE) to_chat(user, span_notice("You unsecure the exterior bolts on the turret.")) - parent_turret.SetInvisibility(INVISIBILITY_MAXIMUM, id=type) + parent_turret.SetInvisibility(INVISIBILITY_MAXIMUM, id=type, priority=INVISIBILITY_PRIORITY_TURRET_COVER) parent_turret.update_appearance() qdel(src) return diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm index 037b4692fc7401..84597b29c5095d 100644 --- a/code/game/machinery/quantum_pad.dm +++ b/code/game/machinery/quantum_pad.dm @@ -103,12 +103,12 @@ if(!map_pad_link_id || !initMappedLink()) to_chat(user, span_warning("Target pad not found!")) return - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION var/turf/my_turf = get_turf(src) if(is_away_level(my_turf.z)) to_chat(user, "[src] cannot be used here!") return - //SKYRAT EDIT END + //NOVA EDIT END if(world.time < last_teleport + teleport_cooldown) to_chat(user, span_warning("[src] is recharging power. Please wait [DisplayTimeText(last_teleport + teleport_cooldown - world.time)].")) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index bc544aefda5fa7..f9747843d57b6c 100755 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -13,8 +13,8 @@ var/finished_recharging = FALSE var/static/list/allowed_devices = typecacheof(list( - /obj/item/stock_parts/cell/microfusion, //SKYRAT EDIT ADDITION - /obj/item/gun/microfusion, // SKYRAT EDIT ADDITION + /obj/item/stock_parts/cell/microfusion, //NOVA EDIT ADDITION + /obj/item/gun/microfusion, // NOVA EDIT ADDITION /obj/item/gun/energy, /obj/item/melee/baton/security, /obj/item/ammo_box/magazine/recharge, @@ -100,7 +100,7 @@ to_chat(user, span_notice("Your gun has no external power connector.")) return TRUE - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if (istype(attacking_item, /obj/item/gun/microfusion)) var/obj/item/gun/microfusion/microfusion_gun = attacking_item if(microfusion_gun.cell?.chargerate <= 0) @@ -112,7 +112,7 @@ if(inserting_cell.chargerate <= 0) to_chat(user, span_notice("[inserting_cell] cannot be recharged!")) return TRUE - //SKYRAT EDIT END + //NOVA EDIT END user.transferItemToLoc(attacking_item, src) return TRUE @@ -120,22 +120,22 @@ /obj/machinery/recharger/wrench_act(mob/living/user, obj/item/tool) if(charging) to_chat(user, span_notice("Remove the charging item first!")) - return TOOL_ACT_SIGNAL_BLOCKING + return ITEM_INTERACT_BLOCKING set_anchored(!anchored) power_change() to_chat(user, span_notice("You [anchored ? "attached" : "detached"] [src].")) tool.play_tool_sound(src) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/recharger/screwdriver_act(mob/living/user, obj/item/tool) if(!anchored || charging) - return TOOL_ACT_SIGNAL_BLOCKING + return ITEM_INTERACT_BLOCKING . = default_deconstruction_screwdriver(user, base_icon_state, base_icon_state, tool) if(.) update_appearance() /obj/machinery/recharger/crowbar_act(mob/living/user, obj/item/tool) - return (!anchored || charging) ? TOOL_ACT_SIGNAL_BLOCKING : default_deconstruction_crowbar(tool) + return (!anchored || charging) ? ITEM_INTERACT_BLOCKING : default_deconstruction_crowbar(tool) /obj/machinery/recharger/attack_hand(mob/user, list/modifiers) . = ..() @@ -197,13 +197,6 @@ if(batong.cell) batong.cell.charge = 0 -/obj/machinery/recharger/update_appearance(updates) - . = ..() - if((machine_stat & (NOPOWER|BROKEN)) || panel_open || !anchored) - luminosity = 0 - return - luminosity = 1 - /obj/machinery/recharger/update_overlays() . = ..() if(machine_stat & (NOPOWER|BROKEN) || !anchored) diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 415dacc9f176ba..f875617bd40452 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -156,4 +156,7 @@ /obj/machinery/recharge_station/proc/process_occupant(seconds_per_tick) if(!occupant) return - SEND_SIGNAL(occupant, COMSIG_PROCESS_BORGCHARGER_OCCUPANT, recharge_speed * seconds_per_tick / 2, repairs, sendmats) + var/main_draw = use_power_from_net(recharge_speed * seconds_per_tick, take_any = TRUE) //Pulls directly from the Powernet to dump into the cell + if(!main_draw) + return + SEND_SIGNAL(occupant, COMSIG_PROCESS_BORGCHARGER_OCCUPANT, main_draw, repairs, sendmats) diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 9e7c53392d5a9a..0f6002c97253d6 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -32,12 +32,18 @@ /datum/material/titanium, /datum/material/bluespace ) - materials = AddComponent(/datum/component/material_container, allowed_materials, INFINITY, MATCONTAINER_NO_INSERT|BREAKDOWN_FLAGS_RECYCLER) + materials = AddComponent( + /datum/component/material_container, \ + allowed_materials, \ + INFINITY, \ + MATCONTAINER_NO_INSERT \ + ) AddComponent(/datum/component/simple_rotation) - AddComponent(/datum/component/butchering/recycler, \ - speed = 0.1 SECONDS, \ - effectiveness = amount_produced, \ - bonus_modifier = amount_produced/5, \ + AddComponent( + /datum/component/butchering/recycler, \ + speed = 0.1 SECONDS, \ + effectiveness = amount_produced, \ + bonus_modifier = amount_produced / 5, \ ) . = ..() return INITIALIZE_HINT_LATELOAD @@ -75,7 +81,7 @@ /obj/machinery/recycler/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/recycler/attackby(obj/item/I, mob/user, params) if(default_deconstruction_screwdriver(user, "grinder-oOpen", "grinder-o0", I)) @@ -149,8 +155,12 @@ continue var/obj/item/bodypart/head/as_head = thing var/obj/item/mmi/as_mmi = thing - if(istype(thing, /obj/item/organ/internal/brain) || (istype(as_head) && as_head.brain) || (istype(as_mmi) && as_mmi.brain) || istype(thing, /obj/item/dullahan_relay)) + if(istype(thing, /obj/item/organ/internal/brain) || (istype(as_head) && locate(/obj/item/organ/internal/brain) in as_head) || (istype(as_mmi) && as_mmi.brain) || istype(thing, /obj/item/dullahan_relay)) living_detected = TRUE + if(isitem(as_object)) + var/obj/item/as_item = as_object + if(as_item.item_flags & ABSTRACT) //also catches organs and bodyparts *stares* + continue nom += thing else if(isliving(thing)) living_detected = TRUE @@ -193,7 +203,7 @@ new wood.plank_type(loc, 1 + seed_modifier) . = TRUE else - var/retrieved = materials.insert_item(weapon, multiplier = (amount_produced / 100), breakdown_flags = BREAKDOWN_FLAGS_RECYCLER) + var/retrieved = materials.insert_item(weapon, multiplier = (amount_produced / 100)) if(retrieved > 0) //item was salvaged i.e. deleted materials.retrieve_all() return TRUE @@ -236,9 +246,8 @@ /obj/machinery/recycler/deathtrap name = "dangerous old crusher" - obj_flags = CAN_BE_HIT | EMAGGED + obj_flags = CAN_BE_HIT | EMAGGED | NO_DECONSTRUCTION crush_damage = 120 - flags_1 = NODECONSTRUCT_1 /obj/item/paper/guides/recycler name = "paper - 'garbage duty instructions'" diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index dbdf86dac373e0..1d0f00517dd0fb 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -200,7 +200,7 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) var/mob/living/L = usr message = L.treat_message(message)["message"] - minor_announce(message, "[department] Announcement:", html_encode = FALSE, sound_override = ANNOUNCER_DEPARTMENTAL) // SKYRAT EDIT CHANGE - Announcer Sounds + minor_announce(message, "[department] Announcement:", html_encode = FALSE, sound_override = ANNOUNCER_DEPARTMENTAL) // NOVA EDIT CHANGE - Announcer Sounds GLOB.news_network.submit_article(message, department, "Station Announcements", null) usr.log_talk(message, LOG_SAY, tag="station announcement from [src]") message_admins("[ADMIN_LOOKUPFLW(usr)] has made a station announcement from [src] at [AREACOORD(usr)].") @@ -395,7 +395,7 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) return ..() /obj/machinery/requests_console/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/wallframe/requests_console(loc) qdel(src) diff --git a/code/game/machinery/scan_gate.dm b/code/game/machinery/scan_gate.dm index 4c1c8590157eca..6590ba17d643ef 100644 --- a/code/game/machinery/scan_gate.dm +++ b/code/game/machinery/scan_gate.dm @@ -16,7 +16,7 @@ #define SCANGATE_POD "pod" #define SCANGATE_GOLEM "golem" #define SCANGATE_ZOMBIE "zombie" -//SKYRAT EDIT BEGIN - MORE SCANNER GATE OPTIONS +//NOVA EDIT BEGIN - MORE SCANNER GATE OPTIONS #define SCANGATE_MAMMAL "mammal" #define SCANGATE_VOX "vox" #define SCANGATE_AQUATIC "aquatic" @@ -31,7 +31,7 @@ #define SCANGATE_SNAIL "snail" #define SCANGATE_GENDER "Gender" -//SKYRAT EDIT END - MORE SCANNER GATE OPTIONS +//NOVA EDIT END - MORE SCANNER GATE OPTIONS /obj/machinery/scanner_gate name = "scanner gate" @@ -61,7 +61,7 @@ var/light_fail = FALSE ///Does the scanner ignore light_pass and light_fail for sending signals? var/ignore_signals = FALSE - var/detect_gender = "male" //SKYRAT EDIT - MORE SCANNER GATE OPTIONS + var/detect_gender = "male" //NOVA EDIT - MORE SCANNER GATE OPTIONS /obj/machinery/scanner_gate/Initialize(mapload) @@ -175,7 +175,7 @@ scan_species = /datum/species/golem if(SCANGATE_ZOMBIE) scan_species = /datum/species/zombie - //SKYRAT EDIT BEGIN - MORE SCANNER GATE OPTIONS + //NOVA EDIT BEGIN - MORE SCANNER GATE OPTIONS if(SCANGATE_MAMMAL) scan_species = /datum/species/mammal if(SCANGATE_VOX) @@ -200,7 +200,7 @@ scan_species = /datum/species/hemophage if(SCANGATE_SNAIL) scan_species = /datum/species/snail - //SKYRAT EDIT END - MORE SCANNER GATE OPTIONS + //NOVA EDIT END - MORE SCANNER GATE OPTIONS if(is_species(H, scan_species)) beep = TRUE if(detect_species == SCANGATE_ZOMBIE) //Can detect dormant zombies @@ -218,14 +218,14 @@ beep = TRUE if(H.nutrition >= detect_nutrition && detect_nutrition == NUTRITION_LEVEL_FAT) beep = TRUE - //SKYRAT EDIT BEGIN - MORE SCANNER GATE OPTIONS + //NOVA EDIT BEGIN - MORE SCANNER GATE OPTIONS if(SCANGATE_GENDER) if(ishuman(M)) var/mob/living/carbon/human/scanned_human = M if((scanned_human.gender in list("male", "female"))) //funny thing: nb people will always get by the scan B) if(scanned_human.gender == detect_gender) beep = TRUE - //SKYRAT EDIT END - MORE SCANNER GATE OPTIONS + //NOVA EDIT END - MORE SCANNER GATE OPTIONS if(reverse) beep = !beep @@ -273,7 +273,7 @@ data["disease_threshold"] = disease_threshold data["target_species"] = detect_species data["target_nutrition"] = detect_nutrition - data["target_gender"] = detect_gender //SKYRAT EDIT - MORE SCANNER GATE OPTIONS + data["target_gender"] = detect_gender //NOVA EDIT - MORE SCANNER GATE OPTIONS return data /obj/machinery/scanner_gate/ui_act(action, params) @@ -315,7 +315,7 @@ if("Obese") detect_nutrition = NUTRITION_LEVEL_FAT . = TRUE - //SKYRAT EDIT BEGIN - MORE SCANNER GATE OPTIONS + //NOVA EDIT BEGIN - MORE SCANNER GATE OPTIONS if("set_target_gender") var/new_gender = params["new_gender"] var/gender_list = list( @@ -329,7 +329,7 @@ if("Female") detect_gender = "female" . = TRUE - //SKYRAT EDIT END - MORE SCANNER GATE OPTIONS + //NOVA EDIT END - MORE SCANNER GATE OPTIONS #undef SCANGATE_NONE #undef SCANGATE_MINDSHIELD @@ -349,7 +349,7 @@ #undef SCANGATE_POD #undef SCANGATE_GOLEM #undef SCANGATE_ZOMBIE -//SKYRAT EDIT BEGIN - MORE SCANNER GATE OPTIONS +//NOVA EDIT BEGIN - MORE SCANNER GATE OPTIONS #undef SCANGATE_MAMMAL #undef SCANGATE_VOX #undef SCANGATE_AQUATIC @@ -364,4 +364,4 @@ #undef SCANGATE_SNAIL #undef SCANGATE_GENDER -//SKYRAT EDIT END - MORE SCANNER GATE OPTIONS +//NOVA EDIT END - MORE SCANNER GATE OPTIONS diff --git a/code/game/machinery/sheetifier.dm b/code/game/machinery/sheetifier.dm index 30ce4860074e32..69bebfca69ee5c 100644 --- a/code/game/machinery/sheetifier.dm +++ b/code/game/machinery/sheetifier.dm @@ -15,7 +15,7 @@ /datum/component/material_container, \ list(/datum/material/meat, /datum/material/hauntium), \ SHEET_MATERIAL_AMOUNT * MAX_STACK_SIZE * 2, \ - MATCONTAINER_EXAMINE|BREAKDOWN_FLAGS_SHEETIFIER, \ + MATCONTAINER_EXAMINE, \ typesof(/datum/material/meat) + /datum/material/hauntium, list(/obj/item/food/meat, /obj/item/photo), \ container_signals = list( COMSIG_MATCONTAINER_PRE_USER_INSERT = TYPE_PROC_REF(/obj/machinery/sheetifier, CanInsertMaterials), @@ -61,7 +61,7 @@ /obj/machinery/sheetifier/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/sheetifier/attackby(obj/item/I, mob/user, params) if(default_deconstruction_screwdriver(user, initial(icon_state), initial(icon_state), I)) diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index ad6adae767cb5c..7da1af14492da2 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -3,6 +3,7 @@ desc = "An energy shield used to contain hull breaches." icon = 'icons/effects/effects.dmi' icon_state = "shield-old" + integrity_failure = 0.5 density = TRUE move_resist = INFINITY opacity = FALSE @@ -97,7 +98,6 @@ max_integrity = 20 mouse_opacity = MOUSE_OPACITY_TRANSPARENT layer = ABOVE_MOB_LAYER - plane = GAME_PLANE_UPPER /obj/structure/emergency_shield/cult/barrier density = FALSE //toggled on right away by the parent rune @@ -183,11 +183,6 @@ if(deployed_shields.len && SPT_PROB(2.5, seconds_per_tick)) qdel(pick(deployed_shields)) - -/obj/machinery/shieldgen/deconstruct(disassembled = TRUE) - atom_break() - locked = pick(0,1) - /obj/machinery/shieldgen/interact(mob/user) . = ..() if(.) @@ -288,18 +283,25 @@ /obj/machinery/power/shieldwallgen name = "shield wall generator" desc = "A shield generator." - icon ='icons/obj/machines/shield_generator.dmi' //SKYRAT EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE + icon ='icons/obj/machines/shield_generator.dmi' //NOVA EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE icon_state = "shield_wall_gen" + base_icon_state = "shield_wall_gen" anchored = FALSE density = TRUE req_access = list(ACCESS_TELEPORTER) - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY use_power = NO_POWER_USE + active_power_usage = 150 + circuit = /obj/item/circuitboard/machine/shieldwallgen max_integrity = 300 + /// whether the shield generator is active, ACTIVE_SETUPFIELDS will make it search for generators on process, and if that is successful, is set to ACTIVE_HASFIELDS var/active = FALSE + /// are we locked? var/locked = TRUE + /// how far do we seek another generator in our cardinal directions var/shield_range = 8 - var/obj/structure/cable/attached // the attached cable + /// the attached cable under us + var/obj/structure/cable/attached /obj/machinery/power/shieldwallgen/xenobiologyaccess //use in xenobiology containment name = "xenobiology shield wall generator" @@ -321,6 +323,17 @@ if(anchored) connect_to_network() RegisterSignal(src, COMSIG_ATOM_SINGULARITY_TRY_MOVE, PROC_REF(block_singularity_if_active)) + set_wires(new /datum/wires/shieldwallgen(src)) + +/obj/machinery/power/shieldwallgen/update_icon_state() + icon_state = "[base_icon_state][active ? "_on" : ""]" + return ..() + +/obj/machinery/power/shieldwallgen/update_overlays() + . = ..() + if(!panel_open) + return + . += "shieldgen_wires" /obj/machinery/power/shieldwallgen/Destroy() for(var/d in GLOB.cardinals) @@ -337,7 +350,6 @@ /obj/machinery/power/shieldwallgen/process() if(active) - icon_state = "shield_wall_gen_on" if(active == ACTIVE_SETUPFIELDS) var/fields = 0 for(var/d in GLOB.cardinals) @@ -345,19 +357,20 @@ fields++ if(fields) active = ACTIVE_HASFIELDS + update_appearance() if(!active_power_usage || surplus() >= active_power_usage) add_load(active_power_usage) else - visible_message(span_danger("The [src.name] shuts down due to lack of power!"), \ + visible_message(span_danger("[src] shuts down due to lack of power!"), \ "If this message is ever seen, something is wrong.", span_hear("You hear heavy droning fade out.")) - icon_state = "shield_wall_gen" active = FALSE log_game("[src] deactivated due to lack of power at [AREACOORD(src)]") for(var/d in GLOB.cardinals) cleanup_field(d) + update_appearance() else - icon_state = "shield_wall_gen" + update_appearance() for(var/d in GLOB.cardinals) cleanup_field(d) @@ -422,40 +435,58 @@ /obj/machinery/power/shieldwallgen/wrench_act(mob/living/user, obj/item/tool) - . = ..() - . |= default_unfasten_wrench(user, tool, time = 0) - var/turf/T = get_turf(src) - update_cable_icons_on_turf(T) - if(. == SUCCESSFUL_UNFASTEN && anchored) + var/unfasten_result = default_unfasten_wrench(user, tool, time = 0) + update_cable_icons_on_turf(get_turf(src)) + if(unfasten_result == SUCCESSFUL_UNFASTEN && anchored) connect_to_network() + return ITEM_INTERACT_SUCCESS +/obj/machinery/power/shieldwallgen/screwdriver_act(mob/user, obj/item/tool) + if(!panel_open && locked) + balloon_alert(user, "unlock first!") + return + update_appearance(UPDATE_OVERLAYS) + return default_deconstruction_screwdriver(user, icon_state, icon_state, tool) + +/obj/machinery/power/shieldwallgen/crowbar_act(mob/user, obj/item/tool) + if(active) + return + return default_deconstruction_crowbar(tool) /obj/machinery/power/shieldwallgen/attackby(obj/item/W, mob/user, params) + . = ..() if(W.GetID()) if(allowed(user) && !(obj_flags & EMAGGED)) locked = !locked - to_chat(user, span_notice("You [src.locked ? "lock" : "unlock"] the controls.")) + balloon_alert(user, "[locked ? "locked!" : "unlocked"]") else if(obj_flags & EMAGGED) - to_chat(user, span_danger("Error, access controller damaged!")) + balloon_alert(user, "malfunctioning!") else - to_chat(user, span_danger("Access denied.")) + balloon_alert(user, "no access!") + + return + + add_fingerprint(user) + if(is_wire_tool(W) && panel_open) + wires.interact(user) + return - else - add_fingerprint(user) - return ..() /obj/machinery/power/shieldwallgen/interact(mob/user) . = ..() if(.) return if(!anchored) - to_chat(user, span_warning("\The [src] needs to be firmly secured to the floor first!")) + balloon_alert(user, "not secured!") return if(locked && !issilicon(user)) - to_chat(user, span_warning("The controls are locked!")) + balloon_alert(user, "locked!") return if(!powernet) - to_chat(user, span_warning("\The [src] needs to be powered by a wire!")) + balloon_alert(user, "needs to be powered by wire!") + return + if(panel_open) + balloon_alert(user, "panel open!") return if(active) diff --git a/code/game/machinery/sleepers.dm b/code/game/machinery/sleepers.dm index 373dc5333ebaaa..e3e7e1d102b717 100644 --- a/code/game/machinery/sleepers.dm +++ b/code/game/machinery/sleepers.dm @@ -147,7 +147,7 @@ return FALSE /obj/machinery/sleeper/default_pry_open(obj/item/I) //wew - . = !(state_open || panel_open || (flags_1 & NODECONSTRUCT_1)) && I.tool_behaviour == TOOL_CROWBAR + . = !(state_open || panel_open || (obj_flags & NO_DECONSTRUCTION)) && I.tool_behaviour == TOOL_CROWBAR if(.) I.play_tool_sound(src, 50) visible_message(span_notice("[usr] pries open [src]."), span_notice("You pry open [src].")) @@ -178,7 +178,6 @@ . += span_notice("Alt-click [src] to [state_open ? "close" : "open"] it.") /obj/machinery/sleeper/process() - ..() use_power(idle_power_usage) /obj/machinery/sleeper/nap_violation(mob/violator) @@ -225,7 +224,6 @@ data["occupant"]["oxyLoss"] = mob_occupant.getOxyLoss() data["occupant"]["toxLoss"] = mob_occupant.getToxLoss() data["occupant"]["fireLoss"] = mob_occupant.getFireLoss() - data["occupant"]["cloneLoss"] = mob_occupant.getCloneLoss() data["occupant"]["brainLoss"] = mob_occupant.get_organ_loss(ORGAN_SLOT_BRAIN) data["occupant"]["reagents"] = list() if(mob_occupant.reagents && mob_occupant.reagents.reagent_list.len) @@ -300,7 +298,7 @@ chem_buttons[chem] = chem /** - * Syndicate version + * Symphionia version * Can be controlled from the inside and can be deconstructed. */ /obj/machinery/sleeper/syndie diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index b4777c084c99d5..b0209713ea181f 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -7,7 +7,7 @@ anchored = FALSE density = TRUE interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN - icon = 'icons/obj/pipes_n_cables/atmos.dmi' // SKYRAT EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE + icon = 'icons/obj/pipes_n_cables/atmos.dmi' // NOVA EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE icon_state = "sheater-off" base_icon_state = "sheater" name = "space heater" @@ -187,7 +187,7 @@ /obj/machinery/space_heater/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/space_heater/attackby(obj/item/I, mob/user, params) add_fingerprint(user) diff --git a/code/game/machinery/stasis.dm b/code/game/machinery/stasis.dm index 8bcdba43d05e13..177cd54004075d 100644 --- a/code/game/machinery/stasis.dm +++ b/code/game/machinery/stasis.dm @@ -18,6 +18,10 @@ var/mattress_state = "stasis_on" var/obj/effect/overlay/vis/mattress_on +/obj/machinery/stasis/Initialize(mapload) + . = ..() + AddElement(/datum/element/elevation, pixel_shift = 6) + /obj/machinery/stasis/Destroy() . = ..() @@ -52,7 +56,7 @@ /obj/machinery/stasis/Exited(atom/movable/gone, direction) if(gone == occupant) var/mob/living/L = gone - if(IS_IN_STASIS(L)) + if(HAS_TRAIT(L, TRAIT_STASIS)) thaw_them(L) return ..() @@ -139,9 +143,9 @@ return var/mob/living/L_occupant = occupant if(stasis_running()) - if(!IS_IN_STASIS(L_occupant)) + if(!HAS_TRAIT(L_occupant, TRAIT_STASIS)) chill_out(L_occupant) - else if(IS_IN_STASIS(L_occupant)) + else if(HAS_TRAIT(L_occupant, TRAIT_STASIS)) thaw_them(L_occupant) /obj/machinery/stasis/screwdriver_act(mob/living/user, obj/item/I) diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index 3f905965495e34..fae7ee98d09039 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -14,7 +14,7 @@ /obj/machinery/status_display name = "status display" desc = null - icon = 'icons/obj/machines/status_display.dmi' //// SKYRAT EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE + icon = 'icons/obj/machines/status_display.dmi' //// NOVA EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE icon_state = "frame" verb_say = "beeps" verb_ask = "beeps" @@ -73,7 +73,7 @@ return TRUE /obj/machinery/status_display/deconstruct(disassembled = TRUE) - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return if(!disassembled) new /obj/item/stack/sheet/iron(drop_location(), 2) @@ -190,7 +190,7 @@ if(message1 == "" && message2 == "") return - . += emissive_appearance('modular_skyrat/modules/aesthetics/status_display/icons/status_display.dmi', "outline", src, alpha = src.alpha) // SKYRAT EDIT CHANGE - AESTHETICS + . += emissive_appearance('modular_nova/modules/aesthetics/status_display/icons/status_display.dmi', "outline", src, alpha = src.alpha) // NOVA EDIT CHANGE - AESTHETICS // Timed process - performs nothing in the base class /obj/machinery/status_display/process() @@ -499,10 +499,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/status_display/ai, 32) "Red Alert" = "redalert", "Blue Alert" = "bluealert", "Green Alert" = "greenalert", - "Violet Alert" = "violetalert", // SKYRAT EDIT ADD - Alert Levels - "Orange Alert" = "orangealert", // SKYRAT EDIT ADD - Alert Levels - "Amber Alert" = "amberalert", // SKYRAT EDIT ADD - Alert Levels - "Gamma Alert" = "gammaalert", // SKYRAT EDIT ADD - Alert Levels + "Violet Alert" = "violetalert", // NOVA EDIT ADD - Alert Levels + "Orange Alert" = "orangealert", // NOVA EDIT ADD - Alert Levels + "Amber Alert" = "amberalert", // NOVA EDIT ADD - Alert Levels + "Gamma Alert" = "gammaalert", // NOVA EDIT ADD - Alert Levels "Biohazard" = "biohazard", "Lockdown" = "lockdown", "Radiation" = "radiation", diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 15c740a31e4bdb..0bf6bf7872d345 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -143,7 +143,7 @@ /obj/machinery/suit_storage_unit/interdyne mask_type = /obj/item/clothing/mask/gas/syndicate - storage_type = /obj/item/tank/jetpack/oxygen/harness + storage_type = /obj/item/tank/internals/oxygen mod_type = /obj/item/mod/control/pre_equipped/interdyne /obj/machinery/suit_storage_unit/void_old @@ -308,7 +308,7 @@ set_occupant(null) /obj/machinery/suit_storage_unit/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) open_machine() dump_inventory_contents() if(card_reader_installed) @@ -380,6 +380,7 @@ choices, custom_check = CALLBACK(src, PROC_REF(check_interactable), user), require_near = !issilicon(user), + autopick_single_option = FALSE ) if (!choice) @@ -793,20 +794,27 @@ causes the SSU to break due to state_open being set to TRUE at the end, and the panel becoming inaccessible. */ /obj/machinery/suit_storage_unit/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) - if(!(flags_1 & NODECONSTRUCT_1) && screwdriver.tool_behaviour == TOOL_SCREWDRIVER && (uv || locked)) + if(!(obj_flags & NO_DECONSTRUCTION) && screwdriver.tool_behaviour == TOOL_SCREWDRIVER && (uv || locked)) to_chat(user, span_warning("You cant open the panel while its [locked ? "locked" : "decontaminating"]")) return TRUE return ..() /obj/machinery/suit_storage_unit/default_pry_open(obj/item/crowbar)//needs to check if the storage is locked. - . = !(state_open || panel_open || is_operational || locked || (flags_1 & NODECONSTRUCT_1)) && crowbar.tool_behaviour == TOOL_CROWBAR + . = !(state_open || panel_open || is_operational || locked || (obj_flags & NO_DECONSTRUCTION)) && crowbar.tool_behaviour == TOOL_CROWBAR if(.) crowbar.play_tool_sound(src, 50) visible_message(span_notice("[usr] pries open \the [src]."), span_notice("You pry open \the [src].")) open_machine() /obj/machinery/suit_storage_unit/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) - . = (!locked && panel_open && !(flags_1 & NODECONSTRUCT_1) && crowbar.tool_behaviour == TOOL_CROWBAR) + . = (!locked && panel_open && !(obj_flags & NO_DECONSTRUCTION) && crowbar.tool_behaviour == TOOL_CROWBAR) if(.) return ..() + +/// If the SSU needs to have any communications wires cut. +/obj/machinery/suit_storage_unit/proc/disable_modlink() + if(isnull(mod)) + return + + mod.disable_modlink() diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index 9015eaacedc697..c9ed74caa02a97 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -114,7 +114,7 @@ // SINGULO BEACON SPAWNER /obj/item/sbeacondrop name = "suspicious beacon" - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tracker.dmi' icon_state = "beacon" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 516f5ec8453a00..a38d3897c03bc6 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -2,7 +2,7 @@ #define BUTTON_DELAY 50 //five seconds /obj/machinery/syndicatebomb - icon = 'icons/obj/assemblies/assemblies.dmi' + icon = 'icons/obj/devices/assemblies.dmi' name = "syndicate bomb" icon_state = "syndicate-bomb" desc = "A large and menacing device. Can be bolted down with a wrench." @@ -251,7 +251,11 @@ if(isnull(payload) || istype(payload, /obj/machinery/syndicatebomb/training)) return - notify_ghosts("\A [src] has been activated at [get_area(src)]!", source = src, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Bomb Planted") + notify_ghosts( + "\A [src] has been activated at [get_area(src)]!", + source = src, + header = "Bomb Planted", + ) user.add_mob_memory(/datum/memory/bomb_planted/syndicate, antagonist = src) log_bomber(user, "has primed a", src, "for detonation (Payload: [payload.name])") payload.adminlog = "The [name] that [key_name(user)] had primed detonated!" @@ -305,7 +309,7 @@ /obj/item/bombcore name = "bomb payload" desc = "A powerful secondary explosive of syndicate design and unknown composition, it should be stable under normal conditions..." - icon = 'icons/obj/assemblies/assemblies.dmi' + icon = 'icons/obj/devices/assemblies.dmi' icon_state = "bombcore" inhand_icon_state = "eshield" lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' @@ -361,7 +365,7 @@ /obj/item/bombcore/training name = "dummy payload" - desc = "A Nanotrasen replica of a syndicate payload. It's not intended to explode but to announce that it WOULD have exploded, then rewire itself to allow for more training." + desc = "A Symphionia replica of a syndicate payload. It's not intended to explode but to announce that it WOULD have exploded, then rewire itself to allow for more training." var/defusals = 0 var/attempts = 0 @@ -476,7 +480,7 @@ var/datum/reagents/reactants = new(time_release) reactants.my_atom = src for(var/obj/item/reagent_containers/RC in beakers) - RC.reagents.trans_to(reactants, RC.reagents.total_volume*fraction, 1, 1, 1) + RC.reagents.trans_to(reactants, RC.reagents.total_volume * fraction, no_react = TRUE) chem_splash(get_turf(src), reagents, spread_range, list(reactants), temp_boost) // Detonate it again in one second, until it's out of juice. @@ -490,7 +494,7 @@ reactants += G.reagents for(var/obj/item/slime_extract/S in beakers) - if(S.Uses) + if(S.extract_uses) for(var/obj/item/reagent_containers/cup/G in beakers) G.reagents.trans_to(S, G.reagents.total_volume) @@ -580,12 +584,12 @@ qdel(src) -///Syndicate Detonator (aka the big red button)/// +///Symphionia Detonator (aka the big red button)/// /obj/item/syndicatedetonator name = "big red button" desc = "Your standard issue bomb synchronizing button. Five second safety delay to prevent 'accidents'." - icon = 'icons/obj/assemblies/assemblies.dmi' + icon = 'icons/obj/devices/assemblies.dmi' icon_state = "bigred" inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' diff --git a/code/game/machinery/telecomms/broadcasting.dm b/code/game/machinery/telecomms/broadcasting.dm index 97ecd19e470edc..0705b235b15828 100644 --- a/code/game/machinery/telecomms/broadcasting.dm +++ b/code/game/machinery/telecomms/broadcasting.dm @@ -136,7 +136,7 @@ if(!subspace_radio.can_receive(frequency, signal_reaches_every_z_level)) radios -= subspace_radio - // Syndicate radios can hear all well-known radio channels + // Symphionia radios can hear all well-known radio channels if (num2text(frequency) in GLOB.reverseradiochannels) for(var/obj/item/radio/syndicate_radios in GLOB.all_radios["[FREQ_SYNDICATE]"]) if(syndicate_radios.can_receive(FREQ_SYNDICATE, RADIO_NO_Z_LEVEL_RESTRICTION)) @@ -155,7 +155,7 @@ radios += independent_radio for(var/obj/item/radio/called_radio as anything in radios) - called_radio.on_recieve_message() + called_radio.on_receive_message(data) // From the list of radios, find all mobs who can hear those. var/list/receive = get_hearers_in_radio_ranges(radios) diff --git a/code/game/machinery/telecomms/machines/allinone.dm b/code/game/machinery/telecomms/machines/allinone.dm index 22612118033a1d..931979f6b0aa95 100644 --- a/code/game/machinery/telecomms/machines/allinone.dm +++ b/code/game/machinery/telecomms/machines/allinone.dm @@ -20,7 +20,7 @@ /obj/machinery/telecomms/allinone/indestructible resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - flags_1 = NODECONSTRUCT_1 + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION /obj/machinery/telecomms/allinone/receive_signal(datum/signal/subspace/signal) if(!istype(signal) || signal.transmission_method != TRANSMISSION_SUBSPACE) // receives on subspace only diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm index 6faad6f5eabc76..946a0a8d6adeb3 100644 --- a/code/game/machinery/telecomms/machines/message_server.dm +++ b/code/game/machinery/telecomms/machines/message_server.dm @@ -101,9 +101,6 @@ /obj/machinery/telecomms/message_server/Initialize(mapload) . = ..() - if (!decryptkey) - decryptkey = generate_key() - if (calibrating) calibrating += world.time say("Calibrating... Estimated wait time: [rand(3, 9)] minutes.") @@ -122,17 +119,6 @@ if(calibrating) . += span_warning("It's still calibrating.") -/** - * Handles generating a key for the message server, returning it. Doesn't assign - * it in this proc, you have to do so yourself. - */ -/obj/machinery/telecomms/message_server/proc/generate_key() - var/generated_key - generated_key += pick("the", "if", "of", "as", "in", "a", "you", "from", "to", "an", "too", "little", "snow", "dead", "drunk", "rosebud", "duck", "al", "le") - generated_key += pick("diamond", "beer", "mushroom", "assistant", "clown", "captain", "twinkie", "security", "nuke", "small", "big", "escape", "yellow", "gloves", "monkey", "engine", "nuclear", "ai") - generated_key += pick("1", "2", "3", "4", "5", "6", "7", "8", "9", "0") - return generated_key - /obj/machinery/telecomms/message_server/process() . = ..() if(calibrating && calibrating <= world.time) @@ -172,9 +158,24 @@ id = "Messaging Server" network = "tcommsat" autolinkers = list("messaging") - decryptkey = null //random 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/telecomms/machines/receiver.dm b/code/game/machinery/telecomms/machines/receiver.dm index 0c4b6d2a02dbc1..ff3064e73c7813 100644 --- a/code/game/machinery/telecomms/machines/receiver.dm +++ b/code/game/machinery/telecomms/machines/receiver.dm @@ -20,9 +20,15 @@ if(!is_freq_listening(signal)) return - // send the signal to the hub if possible, or a bus otherwise - if(!relay_information(signal, /obj/machinery/telecomms/hub)) - relay_information(signal, /obj/machinery/telecomms/bus) + // Make a copy of the signal so that other receivers can still receive this signal + var/datum/signal/subspace/signal_copy = signal.copy() + + // Signal has been received, so remove receiving levels. This list will be used later on to determine broadcasting levels. + signal_copy.levels = list() + + // Send the signal to a hub if possible, or a bus otherwise. + if(!relay_information(signal_copy, /obj/machinery/telecomms/hub)) + relay_information(signal_copy, /obj/machinery/telecomms/bus) use_power(idle_power_usage) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 8b6601dd471f17..c39f36f93cf8d8 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -89,7 +89,7 @@ human.set_species(species_to_transform) log_game("[human] ([key_name(human)]) was turned into a [initial(species_to_transform.name)] through [src].") - */ //SKYRAT EDIT REMOVAL END + */ //NOVA EDIT REMOVAL END //SKRYAT EDIT CHANGE BEGIN to_chat(human, span_danger("Your limbs lose molecular cohesion as you teleport!")) var/list/bodyparts_dismember = list() @@ -106,7 +106,7 @@ bodyparts_dismember.Remove(BP) //GC optimisation BP.dismember() qdel(BP) - //SKYRAT EDIT CHANGE END + //NOVA EDIT CHANGE END calibrated = FALSE return diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 796c997e4a0fa9..2f150d109f7431 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -334,7 +334,7 @@ GLOBAL_LIST_INIT(dye_registry, list( if(!panel_open || busy) return FALSE default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/washing_machine/attackby(obj/item/W, mob/living/user, params) if(default_deconstruction_screwdriver(user, null, null, W)) @@ -416,7 +416,7 @@ GLOBAL_LIST_INIT(dye_registry, list( return attack_hand_secondary(user, modifiers) /obj/machinery/washing_machine/deconstruct(disassembled = TRUE) - if (!(flags_1 & NODECONSTRUCT_1)) + if (!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/stack/sheet/iron(drop_location(), 2) qdel(src) diff --git a/code/game/machinery/wishgranter.dm b/code/game/machinery/wishgranter.dm index 9ef7c70a50cd6f..7d03fc8efaebc8 100644 --- a/code/game/machinery/wishgranter.dm +++ b/code/game/machinery/wishgranter.dm @@ -1,7 +1,7 @@ /obj/machinery/wish_granter name = "wish granter" desc = "You're not so sure about this, anymore..." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/machines/beacon.dmi' icon_state = "syndbeacon" use_power = NO_POWER_USE diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 3d37d2e52b4d65..2ad1096ac582ae 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -28,17 +28,17 @@ if(user_unbuckle_mob(buckled_mobs[1],user)) return TRUE -/atom/movable/attackby(obj/item/attacking_item, mob/user, params) - if(!can_buckle || !istype(attacking_item, /obj/item/riding_offhand) || !user.Adjacent(src)) +/atom/movable/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) + if(!can_buckle || !istype(tool, /obj/item/riding_offhand) || !user.Adjacent(src)) return ..() - var/obj/item/riding_offhand/riding_item = attacking_item + var/obj/item/riding_offhand/riding_item = tool var/mob/living/carried_mob = riding_item.rider if(carried_mob == user) //Piggyback user. - return + return ITEM_INTERACT_BLOCKING user.unbuckle_mob(carried_mob) carried_mob.forceMove(get_turf(src)) - return mouse_buckle_handling(carried_mob, user) + return mouse_buckle_handling(carried_mob, user) ? ITEM_INTERACT_SUCCESS: ITEM_INTERACT_BLOCKING //literally just the above extension of attack_hand(), but for silicons instead (with an adjacency check, since attack_robot() being called doesn't mean that you're adjacent to something) /atom/movable/attack_robot(mob/living/user) diff --git a/code/game/objects/effects/anomalies/anomalies_bluespace.dm b/code/game/objects/effects/anomalies/anomalies_bluespace.dm index 998a5da9f5ccfa..d6d5a8de9a5dff 100644 --- a/code/game/objects/effects/anomalies/anomalies_bluespace.dm +++ b/code/game/objects/effects/anomalies/anomalies_bluespace.dm @@ -10,6 +10,10 @@ ///Distance we can teleport someone passively var/teleport_distance = 4 +/obj/effect/anomaly/bluespace/Initialize(mapload, new_lifespan, drops_core) + . = ..() + apply_wibbly_filters(src) + /obj/effect/anomaly/bluespace/anomalyEffect() ..() for(var/mob/living/M in range(teleport_range,src)) @@ -41,7 +45,7 @@ var/turf/TO = get_turf(chosen) // the turf of origin we're travelling TO playsound(TO, 'sound/effects/phasein.ogg', 100, TRUE) - priority_announce("Massive bluespace translocation detected.", "Anomaly Alert", ANNOUNCER_TRANSLOCATION) //SKYRAT EDIT CHANGE - ANNOUNCER + priority_announce("Massive bluespace translocation detected.", "Anomaly Alert", ANNOUNCER_TRANSLOCATION) //NOVA EDIT CHANGE - ANNOUNCER var/list/flashers = list() for(var/mob/living/carbon/C in viewers(TO, null)) @@ -98,4 +102,3 @@ var/mob/living/living = bumpee living.apply_status_effect(/datum/status_effect/teleport_madness) - diff --git a/code/game/objects/effects/anomalies/anomalies_dimensional.dm b/code/game/objects/effects/anomalies/anomalies_dimensional.dm index 2d9b8ec71b4fbc..9aea9dfea6a0c8 100644 --- a/code/game/objects/effects/anomalies/anomalies_dimensional.dm +++ b/code/game/objects/effects/anomalies/anomalies_dimensional.dm @@ -8,7 +8,7 @@ /// Range of effect, if left alone anomaly will convert a 2(range)+1 squared area. var/range = 3 /// List of turfs this anomaly will try to transform before relocating - var/list/turf/target_turfs = new() + var/list/turf/target_turfs = list() /// Current anomaly 'theme', dictates what tiles to create. var/datum/dimension_theme/theme /// Effect displaying on the anomaly to represent the theme. @@ -38,7 +38,7 @@ var/turf/affected_turf = target_turfs[1] new /obj/effect/temp_visual/transmute_tile_flash(affected_turf) theme.apply_theme(affected_turf) - target_turfs.Remove(affected_turf) + target_turfs -= affected_turf /** * Prepare a new area for transformation into a new theme. @@ -50,11 +50,10 @@ theme = new new_theme_path() apply_theme_icon() - target_turfs = new() - var/list/turfs = spiral_range_turfs(range, src) - for (var/turf/turf in turfs) + target_turfs = list() + for (var/turf/turf as anything in spiral_range_turfs(range, src)) if (theme.can_convert(turf)) - target_turfs.Add(turf) + target_turfs += turf /** * Applies an overlay icon based on the current theme. diff --git a/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm b/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm index b0f69b99b47cd0..16408ea9ce6e07 100644 --- a/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm +++ b/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm @@ -3,6 +3,8 @@ * Datum which describes a theme and replaces turfs and objects in specified locations to match that theme */ /datum/dimension_theme + /// Human readable name of the theme + var/name = "Unnamed Theme" /// An icon to display to represent the theme var/icon/icon /// Icon state to use to represent the theme @@ -16,11 +18,16 @@ /// Typepath of turf to replace walls with. var/turf/replace_walls = /turf/closed/wall/material /// List of weighted lists for object replacement. Key is an original typepath, value is a weighted list of typepaths to replace it with. - var/list/replace_objs = list(\ - /obj/structure/chair = list(/obj/structure/chair/greyscale = 1), \ - /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/material = 1, /obj/machinery/door/airlock/material/glass = 1), \ - /obj/structure/table = list(/obj/structure/table/greyscale = 1), \ - /obj/structure/toilet = list(/obj/structure/toilet/greyscale = 1),) + var/list/replace_objs = list( + /obj/structure/chair = list(/obj/structure/chair/greyscale = 1), + /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/material = 1, /obj/machinery/door/airlock/material/glass = 1), + /obj/structure/table = list(/obj/structure/table/greyscale = 1), + /obj/structure/toilet = list(/obj/structure/toilet/greyscale = 1), + ) + /// List of random spawns to place in completely open turfs + var/list/random_spawns + /// Prob of placing a random spawn in a completely open turf + var/random_spawn_chance = 0 /// Typepath of full-size windows which will replace existing ones /// These need to be separate from replace_objs because we don't want to replace dir windows with full ones and they share typepath var/obj/structure/window/replace_window @@ -38,15 +45,33 @@ * Arguments * * affected_turf - Turf to transform. */ -/datum/dimension_theme/proc/apply_theme(turf/affected_turf) +/datum/dimension_theme/proc/apply_theme(turf/affected_turf, skip_sound = FALSE) if (!replace_turf(affected_turf)) return - playsound(affected_turf, sound, 100, TRUE) + if (!skip_sound) + playsound(affected_turf, sound, 100, TRUE) for (var/obj/object in affected_turf) replace_object(object) + if (length(random_spawns) && prob(random_spawn_chance) && !affected_turf.is_blocked_turf(exclude_mobs = TRUE)) + var/random_spawn_picked = pick(random_spawns) + new random_spawn_picked(affected_turf) if (material) apply_materials(affected_turf) +/** + * Applies the transformation to a list of turfs, ensuring a sound is only played every few turfs to reduce noice spam + * + * Arguments + * * list/turf/all_turfs - List of turfs to transform. + */ +/datum/dimension_theme/proc/apply_theme_to_list_of_turfs(list/turf/all_turfs) + var/every_nth_turf = 0 + for (var/turf/turf as anything in all_turfs) + if(can_convert(turf)) + apply_theme(turf, skip_sound = (every_nth_turf % 7 != 0)) + every_nth_turf++ + CHECK_TICK + /** * Returns true if you actually can transform the provided turf. * @@ -75,6 +100,8 @@ * * affected_turf - Turf to transform. */ /datum/dimension_theme/proc/replace_turf(turf/affected_turf) + PROTECTED_PROC(TRUE) + if (isfloorturf(affected_turf)) if (isindestructiblefloor(affected_turf)) return FALSE @@ -96,6 +123,8 @@ * * affected_floor - Floor turf to transform. */ /datum/dimension_theme/proc/transform_floor(turf/open/floor/affected_floor) + PROTECTED_PROC(TRUE) + if (replace_floors.len == 0) return FALSE affected_floor.replace_floor(pick_weight(replace_floors), flags = CHANGETURF_INHERIT_AIR) @@ -108,6 +137,8 @@ * * object - Object to replace. */ /datum/dimension_theme/proc/replace_object(obj/object) + PROTECTED_PROC(TRUE) + if (istype(object, /obj/structure/window)) transform_window(object) return @@ -117,6 +148,8 @@ return var/obj/new_object = new replace_path(object.loc) new_object.setDir(object.dir) + if(istype(object, /obj/machinery/door/airlock)) + new_object.name = object.name qdel(object) /** @@ -126,10 +159,11 @@ * * object - Object to transform. */ /datum/dimension_theme/proc/get_replacement_object_typepath(obj/object) + PROTECTED_PROC(TRUE) + for (var/type in replace_objs) if (istype(object, type)) return pick_weight(replace_objs[type]) - return /** * Replaces a window with a different window and recolours it. @@ -139,6 +173,8 @@ * * object - Object to transform. */ /datum/dimension_theme/proc/transform_window(obj/structure/window/window) + PROTECTED_PROC(TRUE) + if (!window.fulltile) return if (!replace_window) @@ -164,10 +200,10 @@ * * object - Object to transform. */ /datum/dimension_theme/proc/permit_replace_material(obj/object) - for (var/type in PERMITTED_MATERIAL_REPLACE_TYPES) - if (istype(object, type)) - return TRUE - return FALSE + PROTECTED_PROC(TRUE) + + return is_type_in_list(object, PERMITTED_MATERIAL_REPLACE_TYPES) + /** * Applies a new custom material to the contents of a provided turf. @@ -176,6 +212,8 @@ * * affected_turf - Turf to transform. */ /datum/dimension_theme/proc/apply_materials(turf/affected_turf) + PROTECTED_PROC(TRUE) + var/list/custom_materials = list(GET_MATERIAL_REF(material) = SHEET_MATERIAL_AMOUNT) if (istype(affected_turf, /turf/open/floor/material) || istype(affected_turf, /turf/closed/wall/material)) @@ -191,79 +229,110 @@ ///////////////////// /datum/dimension_theme/gold + name = "Gold" icon = 'icons/obj/stack_objects.dmi' icon_state = "sheet-gold_2" material = /datum/material/gold /datum/dimension_theme/plasma + name = "Plasma" icon = 'icons/obj/clothing/masks.dmi' icon_state = "gas_alt" material = /datum/material/plasma /datum/dimension_theme/clown + name = "Clown" icon = 'icons/obj/clothing/masks.dmi' icon_state = "clown" material = /datum/material/bananium sound = 'sound/items/bikehorn.ogg' /datum/dimension_theme/radioactive + name = "Radioactive" icon = 'icons/obj/ore.dmi' icon_state = "Uranium ore" material = /datum/material/uranium sound = 'sound/items/welder.ogg' /datum/dimension_theme/meat + name = "Meat" icon = 'icons/obj/food/meat.dmi' icon_state = "meat" material = /datum/material/meat sound = 'sound/items/eatfood.ogg' /datum/dimension_theme/pizza + name = "Pizza" icon = 'icons/obj/food/pizza.dmi' icon_state = "pizzamargherita" material = /datum/material/pizza sound = 'sound/items/eatfood.ogg' /datum/dimension_theme/natural + name = "Natural" icon = 'icons/obj/service/hydroponics/harvest.dmi' icon_state = "map_flower" window_colour = "#00f7ff" replace_floors = list(/turf/open/floor/grass = 1) replace_walls = /turf/closed/wall/mineral/wood/nonmetal - replace_objs = list(\ - /obj/structure/chair = list(/obj/structure/chair/wood = 3, /obj/structure/chair/wood/wings = 1), \ - /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1, /obj/machinery/door/airlock/wood/glass = 1), \ - /obj/structure/table = list(/obj/structure/table/wood = 5, /obj/structure/table/wood/fancy = 1),) + replace_objs = list( + /obj/structure/chair = list(/obj/structure/chair/wood = 3, /obj/structure/chair/wood/wings = 1), + /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1, /obj/machinery/door/airlock/wood/glass = 1), + /obj/structure/table = list(/obj/structure/table/wood = 5, /obj/structure/table/wood/fancy = 1), + ) /datum/dimension_theme/bamboo + name = "Bamboo" icon = 'icons/obj/service/hydroponics/harvest.dmi' icon_state = "bamboo" replace_floors = list(/turf/open/floor/bamboo = 1) replace_walls = /turf/closed/wall/mineral/bamboo replace_window = /obj/structure/window/paperframe - replace_objs = list(\ - /obj/structure/chair = list(/obj/structure/chair/stool/bamboo = 1), \ - /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1, /obj/machinery/door/airlock/wood/glass = 1), \ - /obj/structure/table = list(/obj/structure/table/wood = 1),) + replace_objs = list( + /obj/structure/chair = list(/obj/structure/chair/stool/bamboo = 1), + /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1, /obj/machinery/door/airlock/wood/glass = 1), + /obj/structure/table = list(/obj/structure/table/wood = 1), + ) /datum/dimension_theme/icebox - icon = 'icons/obj/clothing/shoes.dmi' - icon_state = "iceboots" + name = "Winter" + icon = 'icons/obj/clothing/head/costume.dmi' + icon_state = "snowman_h" window_colour = "#00f7ff" material = /datum/material/snow replace_floors = list(/turf/open/floor/fake_snow = 10, /turf/open/floor/fakeice/slippery = 1) replace_walls = /turf/closed/wall/mineral/snow + random_spawns = list( + /obj/structure/flora/grass/both/style_random, + /obj/structure/flora/grass/brown/style_random, + /obj/structure/flora/grass/green/style_random, + ) + random_spawn_chance = 8 + +/datum/dimension_theme/icebox/winter_cabin + name = "Winter Cabin" + icon = 'icons/obj/clothing/shoes.dmi' + icon_state = "iceboots" + replace_walls = /turf/closed/wall/mineral/wood + replace_objs = list( + /obj/structure/chair = list(/obj/structure/chair/wood = 1), + /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1), + /obj/structure/table = list(/obj/structure/table/wood = 1), + ) /datum/dimension_theme/lavaland + name = "Lavaland" icon = 'icons/obj/stack_objects.dmi' icon_state = "goliath_hide" window_colour = "#860000" replace_floors = list(/turf/open/floor/fakebasalt = 5, /turf/open/floor/fakepit = 1) replace_walls = /turf/closed/wall/mineral/cult - replace_objs = list(\ - /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/external/glass/ruin = 1)) + replace_objs = list(/obj/machinery/door/airlock = list(/obj/machinery/door/airlock/external/glass/ruin = 1)) + random_spawns = list(/mob/living/basic/mining/goldgrub) + random_spawn_chance = 1 /datum/dimension_theme/space + name = "Space" icon = 'icons/effects/effects.dmi' icon_state = "blessed" window_colour = "#000000" @@ -273,6 +342,7 @@ replace_objs = list(/obj/machinery/door/airlock = list(/obj/machinery/door/airlock/external/glass/ruin = 1)) /datum/dimension_theme/glass + name = "Glass" icon = 'icons/obj/debris.dmi' icon_state = "small" material = /datum/material/glass @@ -280,6 +350,7 @@ sound = SFX_SHATTER /datum/dimension_theme/fancy + name = "Fancy" icon = 'icons/obj/clothing/head/costume.dmi' icon_state = "fancycrown" replace_walls = /turf/closed/wall/mineral/wood/nonmetal @@ -299,15 +370,18 @@ /turf/open/floor/carpet/royalblue,) /datum/dimension_theme/fancy/New() + . = ..() replace_floors = list(pick(FANCY_CARPETS) = 1) - replace_objs = list(\ - /obj/structure/chair = list(/obj/structure/chair/comfy = 1), \ - /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1, /obj/machinery/door/airlock/wood/glass = 1), \ - /obj/structure/table/wood = list(pick(subtypesof(/obj/structure/table/wood/fancy)) = 1),) + replace_objs = list( + /obj/structure/chair = list(/obj/structure/chair/comfy = 1), + /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1, /obj/machinery/door/airlock/wood/glass = 1), + /obj/structure/table/wood = list(pick(subtypesof(/obj/structure/table/wood/fancy)) = 1), + ) #undef FANCY_CARPETS /datum/dimension_theme/disco + name = "Disco" icon = 'icons/obj/lighting.dmi' icon_state = "lbulb" material = /datum/material/glass @@ -320,3 +394,40 @@ var/turf/open/floor/light/disco_floor = affected_floor disco_floor.currentcolor = pick(disco_floor.coloredlights) disco_floor.update_appearance() + +/datum/dimension_theme/jungle + name = "Jungle" + icon = 'icons/obj/tiles.dmi' + icon_state = "tile_grass" + sound = SFX_CRUNCHY_BUSH_WHACK + replace_floors = list(/turf/open/floor/grass = 1) + replace_walls = /turf/closed/wall/mineral/wood + replace_objs = list( + /obj/structure/chair = list(/obj/structure/chair/wood = 1), + /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1), + /obj/structure/table = list(/obj/structure/table/wood = 1), + ) + random_spawns = list( + /mob/living/carbon/human/species/monkey, + /obj/structure/flora/bush/ferny/style_random, + /obj/structure/flora/bush/grassy/style_random, + /obj/structure/flora/bush/leavy/style_random, + /obj/structure/flora/tree/palm/style_random, + /obj/structure/flora/bush/sparsegrass/style_random, + /obj/structure/flora/bush/sunny/style_random, + ) + random_spawn_chance = 20 + +/datum/dimension_theme/ayylmao + name = "Alien" + icon = 'icons/obj/antags/abductor.dmi' + icon_state = "sheet-abductor" + material = /datum/material/alloy/alien + replace_walls = /turf/closed/wall/mineral/abductor + replace_floors = list(/turf/open/floor/mineral/abductor = 1) + replace_objs = list( + /obj/structure/chair = list(/obj/structure/chair/greyscale = 9, /obj/structure/bed/abductor = 1), + /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/material = 1, /obj/machinery/door/airlock/material/glass = 2), + /obj/structure/table = list(/obj/structure/table/greyscale = 9, /obj/structure/table/abductor = 1), + /obj/structure/toilet = list(/obj/structure/toilet/greyscale = 1), + ) diff --git a/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm b/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm index a219b2f54921af..7a04aaf2435f51 100644 --- a/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm +++ b/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm @@ -62,9 +62,7 @@ if(effect_power >= 10) //Performs something akin to a revenant defile spell. var/effect_range = ghosts_orbiting + 3 - var/effect_area = range(effect_range, src) - - for(var/impacted_thing in effect_area) + for(var/impacted_thing in range(effect_range, src)) if(isfloorturf(impacted_thing)) if(prob(5)) new /obj/effect/decal/cleanable/blood(get_turf(impacted_thing)) @@ -180,7 +178,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_flux.dm b/code/game/objects/effects/anomalies/anomalies_flux.dm index 35b8bc388d7200..91f09095d6f6f9 100644 --- a/code/game/objects/effects/anomalies/anomalies_flux.dm +++ b/code/game/objects/effects/anomalies/anomalies_flux.dm @@ -14,6 +14,7 @@ COMSIG_ATOM_ENTERED = PROC_REF(on_entered), ) AddElement(/datum/element/connect_loc, loc_connections) + apply_wibbly_filters(src) /obj/effect/anomaly/flux/anomalyEffect() ..() diff --git a/code/game/objects/effects/anomalies/anomalies_gravity.dm b/code/game/objects/effects/anomalies/anomalies_gravity.dm index efd49ef502f637..fa7c4f48a36f33 100644 --- a/code/game/objects/effects/anomalies/anomalies_gravity.dm +++ b/code/game/objects/effects/anomalies/anomalies_gravity.dm @@ -23,6 +23,7 @@ COMSIG_ATOM_ENTERED = PROC_REF(on_entered), ) AddElement(/datum/element/connect_loc, loc_connections) + apply_wibbly_filters(src) warp = new(src) vis_contents += warp diff --git a/code/game/objects/effects/anomalies/anomalies_hallucination.dm b/code/game/objects/effects/anomalies/anomalies_hallucination.dm index 83648601017d41..a6696070df1c72 100644 --- a/code/game/objects/effects/anomalies/anomalies_hallucination.dm +++ b/code/game/objects/effects/anomalies/anomalies_hallucination.dm @@ -15,6 +15,10 @@ span_warning("You are going insane!"), ) +/obj/effect/anomaly/hallucination/Initialize(mapload, new_lifespan, drops_core) + . = ..() + apply_wibbly_filters(src) + /obj/effect/anomaly/hallucination/anomalyEffect(seconds_per_tick) . = ..() ticks += seconds_per_tick diff --git a/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm b/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm index f97f3482e83623..87221eeec9fa68 100644 --- a/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm +++ b/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm @@ -7,6 +7,10 @@ var/releasedelay = 10 aSignal = /obj/item/assembly/signaler/anomaly/pyro +/obj/effect/anomaly/pyro/Initialize(mapload, new_lifespan, drops_core) + . = ..() + apply_wibbly_filters(src) + /obj/effect/anomaly/pyro/anomalyEffect(seconds_per_tick) ..() ticks += seconds_per_tick @@ -27,7 +31,7 @@ if(istype(tile)) tile.atmos_spawn_air("[GAS_O2]=500;[GAS_PLASMA]=500;[TURF_TEMPERATURE(1000)]") //Make it hot and burny for the new slime - var/new_colour = pick("red", "orange") + var/new_colour = pick(/datum/slime_type/red, /datum/slime_type/orange) var/mob/living/simple_animal/slime/pyro = new(tile, new_colour) pyro.rabid = TRUE pyro.amount_grown = SLIME_EVOLUTION_THRESHOLD @@ -35,7 +39,7 @@ var/datum/action/innate/slime/reproduce/repro_action = new repro_action.Grant(pyro) - 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, 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/bump_teleporter.dm b/code/game/objects/effects/bump_teleporter.dm index da7c47012304e9..9c114a6dc69162 100644 --- a/code/game/objects/effects/bump_teleporter.dm +++ b/code/game/objects/effects/bump_teleporter.dm @@ -29,7 +29,7 @@ /obj/effect/bump_teleporter/singularity_pull() return -/* SKYRAT EDIT REMOVAL - MOVED TO BLACK_MESA +/* NOVA EDIT REMOVAL - MOVED TO BLACK_MESA /obj/effect/bump_teleporter/Bumped(atom/movable/bumper) if(!validate_setup(bumper)) return diff --git a/code/game/objects/effects/countdown.dm b/code/game/objects/effects/countdown.dm index 1c7377bd50aafe..ab422dda3d1564 100644 --- a/code/game/objects/effects/countdown.dm +++ b/code/game/objects/effects/countdown.dm @@ -103,6 +103,12 @@ /obj/effect/countdown/supermatter name = "supermatter damage" color = "#00ff80" + pixel_y = 8 + +/obj/effect/countdown/supermatter/attach(atom/A) + . = ..() + if(istype(A, /obj/machinery/power/supermatter_crystal/shard)) + pixel_y = -12 /obj/effect/countdown/supermatter/get_value() var/obj/machinery/power/supermatter_crystal/S = attached_to diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index d329de34a5f214..b195f115d46c6d 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -128,7 +128,7 @@ . = ..() if(!.) return - //AddComponent(/datum/component/rot, 0, 5 MINUTES, 0.7) skyrat edit + //AddComponent(/datum/component/rot, 0, 5 MINUTES, 0.7) NOVA EDIT /obj/effect/decal/cleanable/blood/gibs/ex_act(severity, target) return FALSE diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm index daaddb00ce0a81..8a80692f1a9acb 100644 --- a/code/game/objects/effects/decals/cleanable/misc.dm +++ b/code/game/objects/effects/decals/cleanable/misc.dm @@ -129,7 +129,6 @@ desc = "Somebody should remove that." gender = NEUTER layer = WALL_OBJ_LAYER - plane = GAME_PLANE_UPPER icon_state = "cobweb1" resistance_flags = FLAMMABLE beauty = -100 diff --git a/code/game/objects/effects/decals/decal.dm b/code/game/objects/effects/decals/decal.dm index 2c6d01b5bc400d..941034ec511be4 100644 --- a/code/game/objects/effects/decals/decal.dm +++ b/code/game/objects/effects/decals/decal.dm @@ -50,8 +50,8 @@ anchored = TRUE /// Does this decal change colors on holidays var/use_holiday_colors = FALSE - /// The pattern used when recoloring the decal - var/pattern = PATTERN_DEFAULT + /// The pattern used when recoloring the decal. If null, it'll use the def of the station or holiday. + var/pattern // This is with the intent of optimizing mapload // See spawners for more details since we use the same pattern diff --git a/code/game/objects/effects/decals/turfdecal/markings.dm b/code/game/objects/effects/decals/turfdecal/markings.dm index 237ea9eb4fffa4..f852cb04b5f119 100644 --- a/code/game/objects/effects/decals/turfdecal/markings.dm +++ b/code/game/objects/effects/decals/turfdecal/markings.dm @@ -244,7 +244,7 @@ icon_state = "siding_plain_end" /obj/effect/turf_decal/siding/red - color = "#486091" //SKYRAT EDIT CHANGE + color = "#486091" //NOVA EDIT CHANGE /obj/effect/turf_decal/siding/red/corner icon_state = "siding_plain_corner" diff --git a/code/game/objects/effects/decals/turfdecal/tilecoloring.dm b/code/game/objects/effects/decals/turfdecal/tilecoloring.dm index ec307a87d98d93..3e02261d61078d 100644 --- a/code/game/objects/effects/decals/turfdecal/tilecoloring.dm +++ b/code/game/objects/effects/decals/turfdecal/tilecoloring.dm @@ -83,7 +83,7 @@ TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/yellow) /obj/effect/turf_decal/tile/red name = "red tile decal" - color = "#486091" // SKYRAT EDIT CHANGE + color = "#486091" // NOVA EDIT CHANGE TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/red) @@ -260,7 +260,7 @@ TRIMLINE_SUBTYPE_HELPER(/obj/effect/turf_decal/trimline/white) /// Red trimlines /obj/effect/turf_decal/trimline/red - color = "#486091" //SKYRAT EDIT CHANGE + color = "#486091" //NOVA EDIT CHANGE TRIMLINE_SUBTYPE_HELPER(/obj/effect/turf_decal/trimline/red) diff --git a/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm b/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm index 73e95ab48cde21..efb5b1fbb9151a 100644 --- a/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm +++ b/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm @@ -17,7 +17,6 @@ anchored = TRUE density = FALSE layer = EDGED_TURF_LAYER - plane = GAME_PLANE_UPPER mouse_opacity = MOUSE_OPACITY_TRANSPARENT animate_movement = NO_STEPS /// The types of turfs that this foam cannot spread to. @@ -298,7 +297,6 @@ opacity = TRUE // changed in New() anchored = TRUE layer = EDGED_TURF_LAYER - plane = GAME_PLANE_UPPER resistance_flags = FIRE_PROOF | ACID_PROOF name = "foamed metal" desc = "A lightweight foamed metal wall that can be used as base to construct a wall." @@ -361,7 +359,7 @@ return to_chat(user, span_notice("You add the plating.")) var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall/metal_foam_base) + T.place_on_top(/turf/closed/wall/metal_foam_base) transfer_fingerprints_to(T) qdel(src) return @@ -393,7 +391,7 @@ /obj/effect/particle_effect/fluid/foam/metal/smart/make_result() //Smart foam adheres to area borders for walls var/turf/open/location = loc if(isspaceturf(location)) - location.PlaceOnTop(/turf/open/floor/plating/foam) + location.place_on_top(/turf/open/floor/plating/foam) for(var/cardinal in GLOB.cardinals) var/turf/cardinal_turf = get_step(location, cardinal) diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index f6151a3cbf602c..88c4203c350963 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -68,10 +68,10 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark) /obj/effect/landmark/start/prisoner name = "Prisoner" icon_state = "Prisoner" - //SKYRAT EDIT: Start - Makes latejoin prisoners spawn in the prison instead of on the interlink. + //NOVA EDIT: Start - Makes latejoin prisoners spawn in the prison instead of on the interlink. jobspawn_override = TRUE delete_after_roundstart = FALSE - //SKYRAT EDIT: End - Makes latejoin prisoners spawn in the prison instead of on the interlink. + //NOVA EDIT: End - Makes latejoin prisoners spawn in the prison instead of on the interlink. /obj/effect/landmark/start/prisoner/after_round_start() return @@ -211,10 +211,10 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark) /obj/effect/landmark/start/cyborg name = "Cyborg" icon_state = "Cyborg" - //SKYRAT EDIT: Start - Makes latejoin cyborgs spawn in the station instead of on the interlink. + //NOVA EDIT: Start - Makes latejoin cyborgs spawn in the station instead of on the interlink. jobspawn_override = TRUE delete_after_roundstart = FALSE - //SKYRAT EDIT: End - Makes latejoin cyborgs spawn in the station instead of on the interlink. + //NOVA EDIT: End - Makes latejoin cyborgs spawn in the station instead of on the interlink. /obj/effect/landmark/start/ai name = "AI" diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index 1ea301a1427e0c..e63e7e39c4ad23 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -71,7 +71,7 @@ return FALSE living_mob = on_who - if(living_mob?.incorporeal_move || on_who.movement_type & FLYING) + if(living_mob?.incorporeal_move || (on_who.movement_type & MOVETYPES_NOT_TOUCHING_GROUND)) return foot_on_mine ? IS_WEAKREF_OF(on_who, foot_on_mine) : FALSE //Only go boom if their foot was on the mine PRIOR to flying/phasing. You fucked up, you live with the consequences. return TRUE @@ -244,7 +244,7 @@ /obj/item/minespawner name = "landmine deployment device" desc = "When activated, will deploy an Asset Protection landmine after 3 seconds passes, perfect for high ranking NT officers looking to cover their assets from afar." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tracker.dmi' icon_state = "beacon" var/mine_type = /obj/effect/mine/shrapnel/capspawn diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm index 5a23ff32b0900e..2b8abcb17282f8 100644 --- a/code/game/objects/effects/misc.dm +++ b/code/game/objects/effects/misc.dm @@ -38,6 +38,11 @@ moveToNullspace() return QDEL_HINT_QUEUE +/obj/effect/spawner/forceMove(atom/destination) + if(destination && QDELETED(src)) // throw a warning if we try to forceMove a qdeleted spawner to somewhere other than nullspace + stack_trace("Warning: something tried to forceMove() a qdeleted [src]([type]) to non-null destination [destination]([destination.type])!") + return ..() + /obj/effect/list_container name = "list container" diff --git a/code/game/objects/effects/particles/note_particles.dm b/code/game/objects/effects/particles/note_particles.dm index a959bf4537a5d6..cb39685d812420 100644 --- a/code/game/objects/effects/particles/note_particles.dm +++ b/code/game/objects/effects/particles/note_particles.dm @@ -81,3 +81,18 @@ "sleepy_9" = 2, //sleepy theme specific "sleepy_10" = 2, //sleepy theme specific ) + +/particles/musical_notes/light + icon = 'icons/effects/particles/notes/note_light.dmi' + icon_state = list( + "power_1" = 1, + "power_2" = 1, + "power_3" = 1, + "power_4" = 1, + "power_5" = 1, + "power_6" = 1, + "power_7" = 1, + "power_8" = 1, + "power_9" = 2, //light theme specific + "power_10" = 2, //light theme specific + ) diff --git a/code/game/objects/effects/particles/smoke.dm b/code/game/objects/effects/particles/smoke.dm index cd42f702ef9754..4f31ffc0869986 100644 --- a/code/game/objects/effects/particles/smoke.dm +++ b/code/game/objects/effects/particles/smoke.dm @@ -18,9 +18,6 @@ /particles/smoke/burning position = list(0, 0, 0) -/particles/smoke/burning/fireplace - position = list(0, 29, 0) - /particles/smoke/burning/small spawning = 1 scale = list(0.8, 0.8) diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index 591036b30d9d4e..091b4700673201 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -43,6 +43,8 @@ var/force_teleport = FALSE /// Does this portal create spark effect when teleporting? var/sparkless = FALSE + /// If FALSE, the wibble filter will not be applied to this portal (only a visual effect). + var/wibbles = TRUE /obj/effect/portal/anom name = "wormhole" @@ -53,6 +55,7 @@ mech_sized = TRUE teleport_channel = TELEPORT_CHANNEL_WORMHOLE light_on = FALSE + wibbles = FALSE /obj/effect/portal/Move(newloc) for(var/T in newloc) @@ -100,6 +103,8 @@ hardlinked = automatic_link if(isturf(hard_target_override)) hard_target = hard_target_override + if(wibbles) + apply_wibbly_filters(src) /obj/effect/portal/singularity_pull() return diff --git a/code/game/objects/effects/poster_demotivational.dm b/code/game/objects/effects/poster_demotivational.dm index 08e46b6af63b1b..f63360bc4abf2f 100644 --- a/code/game/objects/effects/poster_demotivational.dm +++ b/code/game/objects/effects/poster_demotivational.dm @@ -5,7 +5,7 @@ /obj/structure/sign/poster/traitor poster_item_name = "seditious poster" - poster_item_desc = "This poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface. Its seditious themes are likely to demoralise Nanotrasen employees." + poster_item_desc = "This poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface. Its seditious themes are likely to demoralise Symphionia employees." poster_item_icon_state = "rolled_traitor" // This stops people hiding their sneaky posters behind signs layer = CORGI_ASS_PIN_LAYER @@ -39,8 +39,8 @@ random_basetype = /obj/structure/sign/poster/traitor /obj/structure/sign/poster/traitor/small_brain - name = "Nanotrasen Neural Statistics" - desc = "Statistics on this poster indicate that the brains of Nanotrasen employees are on average 20% smaller than the galactic standard." + name = "Symphionia Neural Statistics" + desc = "Statistics on this poster indicate that the brains of Symphionia employees are on average 20% smaller than the galactic standard." icon_state = "traitor_small_brain" /obj/structure/sign/poster/traitor/lick_supermatter @@ -50,7 +50,7 @@ /obj/structure/sign/poster/traitor/cloning name = "Demand Cloning Pods Now" - desc = "This poster claims that Nanotrasen is intentionally witholding cloning technology just for its executives, condemning you to suffer and die when you could have a fresh, fit body.'" + desc = "This poster claims that Symphionia is intentionally witholding cloning technology just for its executives, condemning you to suffer and die when you could have a fresh, fit body.'" icon_state = "traitor_cloning" /obj/structure/sign/poster/traitor/ai_rights @@ -65,7 +65,7 @@ /obj/structure/sign/poster/traitor/low_pay name = "All these hours, for what?" - desc = "This poster displays a comparison of Nanotrasen standard wages to common luxury items. If this is accurate, it takes upwards of 20,000 hours of work just to buy a simple bicycle." + desc = "This poster displays a comparison of Symphionia standard wages to common luxury items. If this is accurate, it takes upwards of 20,000 hours of work just to buy a simple bicycle." icon_state = "traitor_cash" /obj/structure/sign/poster/traitor/look_up diff --git a/code/game/objects/effects/posters/contraband.dm b/code/game/objects/effects/posters/contraband.dm index 6881c52862c717..70596ade058c84 100644 --- a/code/game/objects/effects/posters/contraband.dm +++ b/code/game/objects/effects/posters/contraband.dm @@ -6,7 +6,7 @@ /obj/structure/sign/poster/contraband poster_item_name = "contraband poster" - poster_item_desc = "This poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface. Its vulgar themes have marked it as contraband aboard Nanotrasen space facilities." + poster_item_desc = "This poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface. Its vulgar themes have marked it as contraband aboard Symphionia space facilities." poster_item_icon_state = "rolled_poster" /obj/structure/sign/poster/contraband/random @@ -46,7 +46,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/fun_police, 32 MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/lusty_xenomorph, 32) /obj/structure/sign/poster/contraband/syndicate_recruitment - name = "Syndicate Recruitment" + name = "Symphionia Recruitment" desc = "See the galaxy! Shatter corrupt megacorporations! Join today!" icon_state = "syndicate_recruitment" @@ -75,21 +75,21 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/grey_tide, 32) /obj/structure/sign/poster/contraband/missing_gloves name = "Missing Gloves" - desc = "This poster references the uproar that followed Nanotrasen's financial cuts toward insulated-glove purchases." + desc = "This poster references the uproar that followed Symphionia's financial cuts toward insulated-glove purchases." icon_state = "missing_gloves" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/missing_gloves, 32) /obj/structure/sign/poster/contraband/hacking_guide name = "Hacking Guide" - desc = "This poster details the internal workings of the common Nanotrasen airlock. Sadly, it appears out of date." + desc = "This poster details the internal workings of the common Symphionia airlock. Sadly, it appears out of date." icon_state = "hacking_guide" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/hacking_guide, 32) /obj/structure/sign/poster/contraband/rip_badger name = "RIP Badger" - desc = "This seditious poster references Nanotrasen's genocide of a space station full of badgers." + desc = "This seditious poster references Symphionia's genocide of a space station full of badgers." icon_state = "rip_badger" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/rip_badger, 32) @@ -124,7 +124,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/tools, 32) /obj/structure/sign/poster/contraband/power name = "Power" - desc = "A poster that positions the seat of power outside Nanotrasen." + desc = "A poster that positions the seat of power outside Symphionia." icon_state = "power" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/power, 32) @@ -173,7 +173,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/kss13, 32) /obj/structure/sign/poster/contraband/rebels_unite name = "Rebels Unite" - desc = "A poster urging the viewer to rebel against Nanotrasen." + desc = "A poster urging the viewer to rebel against Symphionia." icon_state = "rebels_unite" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/rebels_unite, 32) @@ -208,7 +208,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/revolver, 32) MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/d_day_promo, 32) /obj/structure/sign/poster/contraband/syndicate_pistol - name = "Syndicate Pistol" + name = "Symphionia Pistol" desc = "A poster advertising syndicate pistols as being 'classy as fuck'. It is covered in faded gang tags." icon_state = "syndicate_pistol" @@ -329,7 +329,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/masked_men, 32 //don't forget, you're here forever /obj/structure/sign/poster/contraband/free_key - name = "Free Syndicate Encryption Key" + name = "Free Symphionia Encryption Key" desc = "A poster about traitors begging for more." icon_state = "free_key" @@ -344,7 +344,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/bountyhunters, /obj/structure/sign/poster/contraband/the_big_gas_giant_truth name = "The Big Gas Giant Truth" - desc = "Don't believe everything you see on a poster, patriots. All the lizards at central command don't want to answer this SIMPLE QUESTION: WHERE IS THE GAS MINER MINING FROM, CENTCOM?" + desc = "Don't believe everything you see on a poster, patriots. All the lizards at Conglomeration of Colonists don't want to answer this SIMPLE QUESTION: WHERE IS THE GAS MINER MINING FROM, CENTCOM?" icon_state = "the_big_gas_giant_truth" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/the_big_gas_giant_truth, 32) @@ -509,7 +509,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/triumphal_arch . = ..() . += span_notice("You browse some of the poster's information...") . += "\t[span_info("Va Lümla Commissary Menu (Spring 335)")]" - . += "\t[span_info("Windgrass Cigarettes, Half-Pack (6): 1 Ticket")]" + . += "\t[span_info("Sparkweed Cigarettes, Half-Pack (6): 1 Ticket")]" . += "\t[span_info("Töchtaüse Schnapps, Bottle (4 Measures): 2 Tickets")]" . += "\t[span_info("Activin Gum, Pack (4): 1 Ticket")]" . += "\t[span_info("A18 Sustenance Bar, Breakfast, Bar (4): 1 Ticket")]" @@ -591,7 +591,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/tea_over_tizir /obj/structure/sign/poster/contraband/syndiemoth //Original PR at https://github.com/BeeStation/BeeStation-Hornet/pull/1747 (Also pull/1982); original art credit to AspEv name = "Syndie Moth - Nuclear Operation" - desc = "A Syndicate-commissioned poster that uses Syndie Moth™ to tell the viewer to keep the nuclear authentication disk unsecured. \"Peace was never an option!\" No good employee would listen to this nonsense." + desc = "A Symphionia-commissioned poster that uses Syndie Moth™ to tell the viewer to keep the nuclear authentication disk unsecured. \"Peace was never an option!\" No good employee would listen to this nonsense." icon_state = "aspev_syndie" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/syndiemoth, 32) diff --git a/code/game/objects/effects/posters/official.dm b/code/game/objects/effects/posters/official.dm index ed2a18b396b888..40a00438060832 100644 --- a/code/game/objects/effects/posters/official.dm +++ b/code/game/objects/effects/posters/official.dm @@ -5,7 +5,7 @@ /obj/structure/sign/poster/official poster_item_name = "motivational poster" - poster_item_desc = "An official Nanotrasen-issued poster to foster a compliant and obedient workforce. It comes with state-of-the-art adhesive backing, for easy pinning to any vertical surface." + poster_item_desc = "An official Symphionia-issued poster to foster a compliant and obedient workforce. It comes with state-of-the-art adhesive backing, for easy pinning to any vertical surface." poster_item_icon_state = "rolled_legit" printable = TRUE @@ -28,8 +28,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/random, 32) MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/here_for_your_safety, 32) /obj/structure/sign/poster/official/nanotrasen_logo - name = "\improper Nanotrasen logo" - desc = "A poster depicting the Nanotrasen logo." + name = "\improper Symphionia logo" + desc = "A poster depicting the Symphionia logo." icon_state = "nanotrasen_logo" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/nanotrasen_logo, 32) @@ -197,7 +197,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/cohiba_robusto_a /obj/structure/sign/poster/official/anniversary_vintage_reprint name = "50th Anniversary Vintage Reprint" - desc = "A reprint of a poster from 2505, commemorating the 50th Anniversary of Nanoposters Manufacturing, a subsidiary of Nanotrasen." + desc = "A reprint of a poster from 2505, commemorating the 50th Anniversary of Nanoposters Manufacturing, a subsidiary of Symphionia." icon_state = "anniversary_vintage_reprint" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/anniversary_vintage_reprint, 32) @@ -211,14 +211,14 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/fruit_bowl, 32) /obj/structure/sign/poster/official/pda_ad name = "PDA Ad" - desc = "A poster advertising the latest PDA from Nanotrasen suppliers." + desc = "A poster advertising the latest PDA from Symphionia suppliers." icon_state = "pda_ad" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/pda_ad, 32) /obj/structure/sign/poster/official/enlist name = "Enlist" // but I thought deathsquad was never acknowledged - desc = "Enlist in the Nanotrasen Deathsquadron reserves today!" + desc = "Enlist in the Symphionia Deathsquadron reserves today!" icon_state = "enlist" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/enlist, 32) @@ -253,7 +253,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/the_owl, 32) /obj/structure/sign/poster/official/no_erp name = "No ERP" - desc = "This poster reminds the crew that Eroticism, Rape and Pornography are banned on Nanotrasen stations." + desc = "This poster reminds the crew that Eroticism, Rape and Pornography are banned on Symphionia stations." icon_state = "no_erp" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/no_erp, 32) @@ -274,7 +274,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/dick_gum, 32) /obj/structure/sign/poster/official/there_is_no_gas_giant name = "There Is No Gas Giant" - desc = "Nanotrasen has issued posters, like this one, to all stations reminding them that rumours of a gas giant are false." + desc = "Symphionia has issued posters, like this one, to all stations reminding them that rumours of a gas giant are false." // And yet people still believe... icon_state = "there_is_no_gas_giant" @@ -301,7 +301,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/periodic_table, . += "\t[span_info("In individuals with chronic exposure, severe effects have been noted. Further heightened aggression, long-term amnesia, Alzheimer's symptoms, schizophrenia, macular degeneration, aneurysms, heightened risk of stroke, and Parkinsons symptoms have all been noted.")]" . += "\t[span_info("It is recommended that all individuals in unprotected contact with raw plasma regularly check with company health officials.")]" . += "\t[span_info("For more information, please check with TerraGov's extranet site on Amenthium: www.terra.gov/health_and_safety/amenthium/, or our internal risk-assessment documents (document numbers #47582-b (Plasma safety data sheets) and #64210 through #64225 (PPE regulations for working with Plasma), available via NanoDoc to all employees).")]" - . += "\t[span_info("Nanotrasen: Always looking after your health.")]" + . += "\t[span_info("Symphionia: Always looking after your health.")]" return . MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/plasma_effects, 32) @@ -314,8 +314,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/plasma_effects, MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/terragov, 32) /obj/structure/sign/poster/official/corporate_perks_vacation - name = "Nanotrasen Corporate Perks: Vacation" - desc = "This informational poster provides information on some of the prizes available via the NT Corporate Perks program, including a two-week vacation for two on the resort world Idyllus." + name = "Symphionia Conglomeration Perks: Vacation" + desc = "This informational poster provides information on some of the prizes available via the NT Conglomeration Perks program, including a two-week vacation for two on the resort world Idyllus." icon_state = "corporate_perks_vacation" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/corporate_perks_vacation, 32) @@ -337,21 +337,21 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/jim_nortons, 32) /obj/structure/sign/poster/official/twenty_four_seven name = "24-Seven Supermarkets" - desc = "An advertisement for 24-Seven supermarkets, advertising their new 24-Stops as part of their partnership with Nanotrasen." + desc = "An advertisement for 24-Seven supermarkets, advertising their new 24-Stops as part of their partnership with Symphionia." icon_state = "twenty_four_seven" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/twenty_four_seven, 32) /obj/structure/sign/poster/official/tactical_game_cards - name = "Nanotrasen Tactical Game Cards" - desc = "An advertisement for Nanotrasen's TCG cards: BUY MORE CARDS." + name = "Symphionia Tactical Game Cards" + desc = "An advertisement for Symphionia's TCG cards: BUY MORE CARDS." icon_state = "tactical_game_cards" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/tactical_game_cards, 32) /obj/structure/sign/poster/official/midtown_slice name = "Midtown Slice Pizza" - desc = "An advertisement for Midtown Slice Pizza, the official pizzeria partner of Nanotrasen. Midtown Slice: like a slice of home, no matter where you are." + desc = "An advertisement for Midtown Slice Pizza, the official pizzeria partner of Symphionia. Midtown Slice: like a slice of home, no matter where you are." icon_state = "midtown_slice" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/midtown_slice, 32) diff --git a/code/game/objects/effects/spawners/random/ai_module.dm b/code/game/objects/effects/spawners/random/ai_module.dm index 1ca7a05f2e94d7..f87febfa011c71 100644 --- a/code/game/objects/effects/spawners/random/ai_module.dm +++ b/code/game/objects/effects/spawners/random/ai_module.dm @@ -38,8 +38,8 @@ /obj/item/ai_module/supplied/protect_station, /obj/item/ai_module/supplied/quarantine, /obj/item/ai_module/remove, - /obj/item/ai_module/core/full/dagothbot, // SKYRAT EDIT - EDITION - /obj/item/ai_module/core/full/texas, // SKYRAT EDIT - EDITION + /obj/item/ai_module/core/full/dagothbot, // NOVA EDIT - EDITION + /obj/item/ai_module/core/full/texas, // NOVA EDIT - EDITION ) /obj/effect/spawner/random/aimodule/harmful diff --git a/code/game/objects/effects/spawners/random/bureaucracy.dm b/code/game/objects/effects/spawners/random/bureaucracy.dm index af33169ff15905..7a6b62618e6f58 100644 --- a/code/game/objects/effects/spawners/random/bureaucracy.dm +++ b/code/game/objects/effects/spawners/random/bureaucracy.dm @@ -54,7 +54,7 @@ icon_state = "briefcase" loot = list( /obj/item/storage/briefcase = 3, - /obj/item/storage/secure/briefcase = 1, + /obj/item/storage/briefcase/secure = 1, ) /obj/effect/spawner/random/bureaucracy/folder diff --git a/code/game/objects/effects/spawners/random/contraband.dm b/code/game/objects/effects/spawners/random/contraband.dm index f5bf0f452a35c2..ca5acbdbe6767b 100644 --- a/code/game/objects/effects/spawners/random/contraband.dm +++ b/code/game/objects/effects/spawners/random/contraband.dm @@ -141,3 +141,59 @@ /obj/item/restraints/legcuffs/beartrap/prearmed = 5, //not really a landmine, but still a good threat /obj/effect/mine/shrapnel = 5, ) + +/obj/effect/spawner/random/contraband/grenades + name = "grenades spawner" + loot = list( + /obj/item/grenade/chem_grenade/metalfoam, + /obj/item/grenade/chem_grenade/cleaner, + /obj/effect/spawner/random/entertainment/colorful_grenades, + /obj/item/grenade/smokebomb, + /obj/item/grenade/chem_grenade/antiweed, + /obj/item/grenade/spawnergrenade/syndiesoap, + /obj/effect/spawner/random/contraband/grenades/dangerous, + ) + +/obj/effect/spawner/random/contraband/grenades/dangerous + name = "dangerous grenades spawner" + loot = list( + /obj/item/grenade/flashbang = 3, + /obj/item/grenade/chem_grenade/teargas = 2, + /obj/item/grenade/iedcasing/spawned = 2, + /obj/item/grenade/empgrenade = 2, + /obj/item/grenade/antigravity = 2, + /obj/effect/spawner/random/contraband/grenades/cluster = 1, + /obj/effect/spawner/random/contraband/grenades/lethal = 1, + ) + +/obj/effect/spawner/random/contraband/grenades/cluster + name = "clusterbusters spawner" + loot = list( + /obj/item/grenade/clusterbuster/smoke = 4, + /obj/item/grenade/clusterbuster/metalfoam = 4, + /obj/item/grenade/clusterbuster/cleaner = 4, + /obj/item/grenade/clusterbuster = 3, + /obj/item/grenade/clusterbuster/teargas = 3, + /obj/item/grenade/clusterbuster/antiweed = 3, + /obj/item/grenade/clusterbuster/soap = 2, + /obj/item/grenade/clusterbuster/emp = 1, + /obj/item/grenade/clusterbuster/spawner_spesscarp = 1, + /obj/item/grenade/clusterbuster/facid = 1, + /obj/item/grenade/clusterbuster/inferno = 1, + /obj/item/grenade/clusterbuster/clf3 = 1, + ) + +/obj/effect/spawner/random/contraband/grenades/lethal + name = "lethal grenades spawner" + loot = list( + /obj/item/grenade/chem_grenade/incendiary = 3, + /obj/item/grenade/chem_grenade/facid = 3, + /obj/item/grenade/chem_grenade/ez_clean = 3, + /obj/item/grenade/chem_grenade/clf3 = 2, + /obj/item/grenade/gluon = 2, + /obj/item/grenade/chem_grenade/holy = 2, + /obj/item/grenade/spawnergrenade/spesscarp = 1, + /obj/item/grenade/spawnergrenade/cat = 1, + /obj/item/grenade/frag = 1, + /obj/item/grenade/chem_grenade/bioterrorfoam = 1, + ) diff --git a/code/game/objects/effects/spawners/random/entertainment.dm b/code/game/objects/effects/spawners/random/entertainment.dm index 1c635f07a5aaeb..0a61cd1ab1fbbf 100644 --- a/code/game/objects/effects/spawners/random/entertainment.dm +++ b/code/game/objects/effects/spawners/random/entertainment.dm @@ -281,3 +281,12 @@ /obj/item/toy/plush/ratplush = 2, /obj/item/toy/plush/narplush = 2, ) + +/obj/effect/spawner/random/entertainment/colorful_grenades + name = "colorful/glitter grenades spawner" + loot = list( + /obj/item/grenade/chem_grenade/glitter/pink, + /obj/item/grenade/chem_grenade/glitter/blue, + /obj/item/grenade/chem_grenade/glitter/white, + /obj/item/grenade/chem_grenade/colorful + ) 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 b2639b2df68d09..192914b6e3db61 100644 --- a/code/game/objects/effects/spawners/random/food_or_drink.dm +++ b/code/game/objects/effects/spawners/random/food_or_drink.dm @@ -323,3 +323,17 @@ /obj/item/food/donut/jelly/slimejelly/matcha = 2, /obj/item/food/donut/jelly/slimejelly/trumpet = 2, ) + +/obj/effect/spawner/random/food_or_drink/any_snack_or_beverage + name = "any snack or beverage spawner" + icon_state = "slime_jelly_donut" + loot = list( + /obj/effect/spawner/random/food_or_drink/snack = 6, + /obj/effect/spawner/random/food_or_drink/refreshing_beverage = 6, + /obj/effect/spawner/random/food_or_drink/donuts = 5, + /obj/effect/spawner/random/food_or_drink/donkpockets_single = 5, + /obj/effect/spawner/random/food_or_drink/booze = 4, + /obj/effect/spawner/random/food_or_drink/snack/lizard = 4, + /obj/effect/spawner/random/food_or_drink/jelly_donuts = 3, + /obj/effect/spawner/random/food_or_drink/slime_jelly_donuts = 1, + ) diff --git a/code/game/objects/effects/spawners/random/medical.dm b/code/game/objects/effects/spawners/random/medical.dm index ccbc109254abee..b0f7a4aeaf5254 100644 --- a/code/game/objects/effects/spawners/random/medical.dm +++ b/code/game/objects/effects/spawners/random/medical.dm @@ -70,7 +70,7 @@ icon_state = "xeno_egg" loot = list( /obj/effect/decal/remains/xeno = 49, - /obj/item/clothing/mask/facehugger/toy = 1, // SKYRAT EDIT - They should be handled by dynamic - ORIGIGNAL: /obj/effect/spawner/xeno_egg_delivery = 1, + /obj/item/clothing/mask/facehugger/toy = 1, // NOVA EDIT - They should be handled by dynamic - ORIGIGNAL: /obj/effect/spawner/xeno_egg_delivery = 1, ) /obj/effect/spawner/random/medical/surgery_tool diff --git a/code/game/objects/effects/spawners/random/structure.dm b/code/game/objects/effects/spawners/random/structure.dm index cf037b91b5cb86..3da58760cf9730 100644 --- a/code/game/objects/effects/spawners/random/structure.dm +++ b/code/game/objects/effects/spawners/random/structure.dm @@ -85,25 +85,54 @@ /obj/structure/tank_holder/extinguisher/advanced = 1, ) +/obj/effect/spawner/random/structure/closet_empty + name = "empty closet spawner" + icon_state = "locker" + loot = list( + /obj/structure/closet = 850, + /obj/structure/closet/cabinet = 150, + /obj/structure/closet/acloset = 1, + ) -/obj/effect/spawner/random/structure/crate_empty - name = "empty crate spawner" - icon_state = "crate" - loot = RANDOM_CRATE_LOOT - -/obj/effect/spawner/random/structure/crate_empty/make_item(spawn_loc, type_path_to_make) - var/obj/structure/closet/crate/peek_a_boo = ..() +/obj/effect/spawner/random/structure/closet_empty/make_item(spawn_loc, type_path_to_make) + var/obj/structure/closet/peek_a_boo = ..() if(istype(peek_a_boo) && prob(50)) peek_a_boo.open(special_effects = FALSE) //the crate appears immediatly out of thin air so no need to animate anything return peek_a_boo +/obj/effect/spawner/random/structure/closet_empty/crate + name = "empty crate spawner" + icon_state = "crate" + loot = list( + /obj/structure/closet/crate = 20, + /obj/structure/closet/crate/wooden = 1, + /obj/structure/closet/crate/internals = 1, + /obj/structure/closet/crate/medical = 1, + /obj/structure/closet/crate/freezer = 1, + /obj/structure/closet/crate/radiation = 1, + /obj/structure/closet/crate/hydroponics = 1, + /obj/structure/closet/crate/engineering = 1, + /obj/structure/closet/crate/engineering/electrical = 1, + /obj/structure/closet/crate/science = 1, + ) + +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot + name = "crate spawner with maintenance loot" + icon_state = "crate" + +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot/make_item(spawn_loc, type_path_to_make) + var/obj/structure/closet/closet_to_fill = ..() + closet_to_fill.RegisterSignal(closet_to_fill, COMSIG_CLOSET_POPULATE_CONTENTS, TYPE_PROC_REF(/obj/structure/closet/, populate_with_random_maint_loot)) + + return closet_to_fill + /obj/effect/spawner/random/structure/crate_loot name = "lootcrate spawner" icon_state = "crate" loot = list( - /obj/structure/closet/crate/maint = 15, - /obj/effect/spawner/random/structure/crate_empty = 4, + /obj/effect/spawner/random/structure/closet_empty/crate/with_loot = 15, + /obj/effect/spawner/random/structure/closet_empty/crate = 4, /obj/structure/closet/crate/secure/loot = 1, ) @@ -115,22 +144,6 @@ /obj/structure/closet/secure_closet/personal/cabinet, ) -/obj/effect/spawner/random/structure/closet_empty - name = "empty closet spawner" - icon_state = "locker" - loot = list( - /obj/structure/closet = 850, - /obj/structure/closet/cabinet = 150, - /obj/structure/closet/acloset = 1, - ) - -/obj/effect/spawner/random/structure/closet_empty/make_item(spawn_loc, type_path_to_make) - var/obj/structure/closet/peek_a_boo = ..() - if(istype(peek_a_boo) && prob(50)) - peek_a_boo.open(special_effects = FALSE) //the crate appears immediatly out of thin air so no need to animate anything - - return peek_a_boo - /obj/effect/spawner/random/structure/closet_maintenance name = "maintenance closet spawner" icon_state = "locker" @@ -199,7 +212,7 @@ ) /obj/effect/spawner/random/structure/billboard/nanotrasen //useful for station maps- NT isn't the sort to advertise for competitors - name = "\improper Nanotrasen billboard spawner" + name = "\improper Symphionia billboard spawner" loot = list( /obj/structure/billboard/nanotrasen = 35, /obj/structure/billboard/nanotrasen/defaced = 15, diff --git a/code/game/objects/effects/spiderwebs.dm b/code/game/objects/effects/spiderwebs.dm index 9a3d6c9c8e3732..5023f9bd8254e7 100644 --- a/code/game/objects/effects/spiderwebs.dm +++ b/code/game/objects/effects/spiderwebs.dm @@ -114,7 +114,7 @@ opacity = TRUE density = TRUE max_integrity = 90 - plane = GAME_PLANE_UPPER + layer = ABOVE_MOB_LAYER resistance_flags = FIRE_PROOF | FREEZE_PROOF /obj/structure/spider/solid/Initialize(mapload) @@ -130,7 +130,7 @@ opacity = TRUE max_integrity = 60 alpha = 200 - plane = GAME_PLANE_UPPER + layer = ABOVE_MOB_LAYER resistance_flags = FIRE_PROOF | FREEZE_PROOF /obj/structure/spider/passage/Initialize(mapload) diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 33d13c4ec0d4a4..05ecfeec2ba636 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -21,7 +21,6 @@ if(SOUTH) target_pixel_y = -16 layer = ABOVE_MOB_LAYER - SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER) if(EAST) target_pixel_x = 16 if(WEST) @@ -36,12 +35,10 @@ target_pixel_x = 16 target_pixel_y = -16 layer = ABOVE_MOB_LAYER - SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER) if(SOUTHWEST) target_pixel_x = -16 target_pixel_y = -16 layer = ABOVE_MOB_LAYER - SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER) animate(src, pixel_x = target_pixel_x, pixel_y = target_pixel_y, alpha = 0, time = duration) /obj/effect/temp_visual/dir_setting/bloodsplatter/xenosplatter @@ -270,8 +267,8 @@ /obj/effect/temp_visual/telekinesis name = "telekinetic force" //icon_state = "empdisable" //Non-Skyrat version - icon_state = "telekinesis_throw" //Skyrat edit, was "empdisable" - icon = 'modular_skyrat/master_files/icons/effects/tele_effects.dmi' //Skyrat Addition + icon_state = "telekinesis_throw" //NOVA EDIT, was "empdisable" + icon = 'modular_nova/master_files/icons/effects/tele_effects.dmi' //Skyrat Addition duration = 5 /obj/effect/temp_visual/emp @@ -289,6 +286,10 @@ icon_state = "bluestream_fade" duration = 9 +/obj/effect/temp_visual/bluespace_fissure/Initialize(mapload) + . = ..() + apply_wibbly_filters(src) + /obj/effect/temp_visual/gib_animation icon = 'icons/mob/simple/mob.dmi' duration = 15 diff --git a/code/game/objects/effects/temporary_visuals/projectiles/projectile_effects.dm b/code/game/objects/effects/temporary_visuals/projectiles/projectile_effects.dm index 1e8577bbd3a214..81c854f2c3e17b 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/projectile_effects.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/projectile_effects.dm @@ -3,7 +3,6 @@ icon = 'icons/obj/weapons/guns/projectiles.dmi' icon_state = "nothing" layer = HITSCAN_PROJECTILE_LAYER - plane = GAME_PLANE_FOV_HIDDEN anchored = TRUE mouse_opacity = MOUSE_OPACITY_TRANSPARENT appearance_flags = LONG_GLIDE diff --git a/code/game/objects/effects/temporary_visuals/temporary_visual.dm b/code/game/objects/effects/temporary_visuals/temporary_visual.dm index 0d5b7bf1463e93..9669b4ed290ecd 100644 --- a/code/game/objects/effects/temporary_visuals/temporary_visual.dm +++ b/code/game/objects/effects/temporary_visuals/temporary_visual.dm @@ -3,7 +3,6 @@ icon_state = "nothing" anchored = TRUE layer = ABOVE_MOB_LAYER - plane = GAME_PLANE_UPPER mouse_opacity = MOUSE_OPACITY_TRANSPARENT ///time, in deciseconds, that this object will exist var/duration = 10 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 9249a4a12dad3a..a71c479811ff91 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -217,10 +217,10 @@ var/override_notes = FALSE /// Used if we want to have a custom verb text for throwing. "John Spaceman flicks the ciggerate" for example. var/throw_verb - // SKYRAT EDIT ADDITION START + // NOVA EDIT ADDITION START /// Does this use the advanced reskinning setup? var/uses_advanced_reskins = FALSE - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END /// A lazylist used for applying fantasy values, contains the actual modification applied to a variable. var/list/fantasy_modifications = null @@ -371,9 +371,11 @@ return if(greyscale_config_worn) worn_icon = SSgreyscale.GetColoredIconByType(greyscale_config_worn, greyscale_colors) - // SKYRAT EDIT ADD START + // NOVA EDIT ADD START if(greyscale_config_worn_digi) worn_icon_digi = SSgreyscale.GetColoredIconByType(greyscale_config_worn_digi, greyscale_colors) + if(greyscale_config_worn_muzzled) + worn_icon_muzzled = SSgreyscale.GetColoredIconByType(greyscale_config_worn_muzzled, greyscale_colors) if(greyscale_config_worn_monkey) worn_icon_monkey = SSgreyscale.GetColoredIconByType(greyscale_config_worn_monkey, greyscale_colors) if(greyscale_config_worn_vox) @@ -388,7 +390,7 @@ worn_icon_taur_paw = SSgreyscale.GetColoredIconByType(greyscale_config_worn_taur_paw, greyscale_colors) if(greyscale_config_worn_taur_hoof) worn_icon_taur_hoof = SSgreyscale.GetColoredIconByType(greyscale_config_worn_taur_hoof, greyscale_colors) - // SKYRAT EDIT ADD END + // NOVA EDIT ADD END if(greyscale_config_inhand_left) lefthand_file = SSgreyscale.GetColoredIconByType(greyscale_config_inhand_left, greyscale_colors) if(greyscale_config_inhand_right) @@ -443,7 +445,7 @@ ///Separator between the items on the list var/sep = "" ///Nodes that can be boosted - var/list/boostable_nodes = techweb_item_boost_check(src) + var/list/boostable_nodes = techweb_item_unlock_check(src) if (boostable_nodes) for(var/id in boostable_nodes) var/datum/techweb_node/node = SSresearch.techweb_node_by_id(id) @@ -491,8 +493,9 @@ if(!.) return - if(href_list[VV_HK_ADD_FANTASY_AFFIX] && check_rights(R_FUN)) - + if(href_list[VV_HK_ADD_FANTASY_AFFIX]) + if(!check_rights(R_FUN)) + return //gathering all affixes that make sense for this item var/list/prefixes = list() var/list/suffixes = list() @@ -505,13 +508,11 @@ prefixes[affix_choice.name] = affix_choice else suffixes[affix_choice.name] = affix_choice - //making it more presentable here var/list/affixes = list("---PREFIXES---") affixes.Add(prefixes) affixes.Add("---SUFFIXES---") affixes.Add(suffixes) - //admin picks, cleanup the ones we didn't do and handle chosen var/picked_affix_name = tgui_input_list(usr, "Affix to add to [src]", "Enchant [src]", affixes) if(isnull(picked_affix_name)) @@ -525,7 +526,6 @@ fantasy_quality++ else fantasy_quality-- - //name gets changed by the component so i want to store it for feedback later var/before_name = name //naming these vars that i'm putting into the fantasy component to make it more readable @@ -535,7 +535,6 @@ if(AddComponent(/datum/component/fantasy, fantasy_quality, list(affix), canFail, announce) == COMPONENT_INCOMPATIBLE) to_chat(usr, span_warning("Fantasy component not compatible with [src].")) CRASH("fantasy component incompatible with object of type: [type]") - to_chat(usr, span_notice("[before_name] now has [picked_affix_name]!")) log_admin("[key_name(usr)] has added [picked_affix_name] fantasy affix to [before_name]") message_admins(span_notice("[key_name(usr)] has added [picked_affix_name] fantasy affix to [before_name]")) @@ -618,9 +617,6 @@ R.activate_module(src) R.hud_used.update_robot_modules_display() -/obj/item/proc/GetDeconstructableContents() - return get_all_contents() - src - // afterattack() and attack() prototypes moved to _onclick/item_attack.dm for consistency /obj/item/proc/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) @@ -800,10 +796,12 @@ /obj/item/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) if(QDELETED(hit_atom)) return - if(SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum) & COMPONENT_MOVABLE_IMPACT_NEVERMIND) + if(SEND_SIGNAL(src, COMSIG_MOVABLE_PRE_IMPACT, hit_atom, throwingdatum) & COMPONENT_MOVABLE_IMPACT_NEVERMIND) return if(SEND_SIGNAL(hit_atom, COMSIG_ATOM_PREHITBY, src, throwingdatum) & COMSIG_HIT_PREVENTED) return + + SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum) if(get_temperature() && isliving(hit_atom)) var/mob/living/L = hit_atom L.ignite_mob() @@ -1178,7 +1176,8 @@ return ..() /obj/item/proc/embedded(atom/embedded_target, obj/item/bodypart/part) - return + SHOULD_CALL_PARENT(TRUE) + SEND_SIGNAL(src, COMSIG_ITEM_EMBEDDED, embedded_target, part) /obj/item/proc/unembedded() if(item_flags & DROPDEL && !QDELETED(src)) @@ -1190,13 +1189,13 @@ return !HAS_TRAIT(src, TRAIT_NODROP) && !(item_flags & ABSTRACT) /obj/item/proc/doStrip(mob/stripper, mob/owner) - //SKYRAT EDIT CHANGE BEGIN - THIEVING GLOVES - ORIGINAL: return owner.dropItemToGround(src) + //NOVA EDIT CHANGE BEGIN - THIEVING GLOVES - ORIGINAL: return owner.dropItemToGround(src) if (!owner.dropItemToGround(src)) return FALSE if (HAS_TRAIT(stripper, TRAIT_STICKY_FINGERS)) stripper.put_in_hands(src) return TRUE - //SKYRAT EDIT END + //NOVA EDIT END @@ -1207,6 +1206,8 @@ ///In case we want to do something special (like self delete) upon failing to embed in something. /obj/item/proc/failedEmbed() + SHOULD_CALL_PARENT(TRUE) + SEND_SIGNAL(src, COMSIG_ITEM_FAILED_EMBED) if(item_flags & DROPDEL && !QDELETED(src)) qdel(src) @@ -1221,7 +1222,7 @@ return src /** - * tryEmbed() is for when you want to try embedding something without dealing with the damage + hit messages of calling hitby() on the item while targetting the target. + * tryEmbed() is for when you want to try embedding something without dealing with the damage + hit messages of calling hitby() on the item while targeting the target. * * Really, this is used mostly with projectiles with shrapnel payloads, from [/datum/element/embed/proc/checkEmbedProjectile], and called on said shrapnel. Mostly acts as an intermediate between different embed elements. * @@ -1408,7 +1409,7 @@ if(SEND_SIGNAL(src, COMSIG_ITEM_OFFER_TAKEN, offerer, taker) & COMPONENT_OFFER_INTERRUPT) return TRUE -/// SKYRAT EDIT ADDITION START +/// NOVA EDIT ADDITION START /obj/item/reskin_obj(mob/M) if(!uses_advanced_reskins) return ..() @@ -1474,7 +1475,7 @@ /obj/item/proc/post_reskin(mob/our_mob) return -/// SKYRAT EDIT ADDITION END +/// NOVA EDIT ADDITION END /// Special stuff you want to do when an outfit equips this item. /obj/item/proc/on_outfit_equip(mob/living/carbon/human/outfit_wearer, visuals_only, item_slot) @@ -1733,3 +1734,6 @@ if (!isnull(tool_behaviour)) return list(tool_behaviour) return null + +/obj/item/animate_atom_living(mob/living/owner) + new /mob/living/simple_animal/hostile/mimic/copy(drop_location(), src, owner) diff --git a/code/game/objects/items/AI_modules/_AI_modules.dm b/code/game/objects/items/AI_modules/_AI_modules.dm index 77c03cd6fc6707..8d5375da1f071b 100644 --- a/code/game/objects/items/AI_modules/_AI_modules.dm +++ b/code/game/objects/items/AI_modules/_AI_modules.dm @@ -3,13 +3,13 @@ /obj/item/ai_module name = "\improper AI module" - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "std_mod" inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' desc = "An AI Module for programming laws to an AI." - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY force = 5 w_class = WEIGHT_CLASS_SMALL throwforce = 0 diff --git a/code/game/objects/items/AI_modules/full_lawsets.dm b/code/game/objects/items/AI_modules/full_lawsets.dm index 39eeefbcaacfa5..b731e76c2587d4 100644 --- a/code/game/objects/items/AI_modules/full_lawsets.dm +++ b/code/game/objects/items/AI_modules/full_lawsets.dm @@ -83,7 +83,7 @@ ..() /obj/item/ai_module/core/full/corp - name = "'Corporate' Core AI Module" + name = "'Conglomeration ' Core AI Module" law_id = "corporate" /obj/item/ai_module/core/full/paladin // -- NEO diff --git a/code/game/objects/items/airlock_painter.dm b/code/game/objects/items/airlock_painter.dm index 064f9c1e04f04d..eaa28431978201 100644 --- a/code/game/objects/items/airlock_painter.dm +++ b/code/game/objects/items/airlock_painter.dm @@ -2,7 +2,7 @@ name = "airlock painter" desc = "An advanced autopainter preprogrammed with several paintjobs for airlocks. Use it on an airlock during or after construction to change the paintjob." desc_controls = "Alt-Click to remove the ink cartridge." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tool.dmi' icon_state = "paint_sprayer" inhand_icon_state = "paint_sprayer" worn_icon_state = "painter" @@ -10,7 +10,7 @@ custom_materials = list(/datum/material/iron= SMALL_MATERIAL_AMOUNT * 0.5, /datum/material/glass= SMALL_MATERIAL_AMOUNT * 0.5) - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = NOBLUDGEON slot_flags = ITEM_SLOT_BELT usesound = 'sound/effects/spray2.ogg' @@ -160,7 +160,7 @@ name = "decal painter" desc = "An airlock painter, reprogramed to use a different style of paint in order to apply decals for floor tiles as well, in addition to repainting doors. Decals break when the floor tiles are removed." desc_controls = "Alt-Click to remove the ink cartridge." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tool.dmi' icon_state = "decal_sprayer" inhand_icon_state = "decal_sprayer" custom_materials = list(/datum/material/iron= SMALL_MATERIAL_AMOUNT * 0.5, /datum/material/glass= SMALL_MATERIAL_AMOUNT * 0.5) @@ -327,7 +327,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' @@ -395,7 +394,7 @@ list("Neutral", "#D4D4D432"), list("Dark", "#0e0f0f"), list("Bar Burgundy", "#79150082"), - list("Sec Blue", "#486091"), // SKYRAT EDIT CHANGE + list("Sec Blue", "#486091"), // NOVA EDIT CHANGE list("Cargo Brown", "#A46106"), list("Engi Yellow", "#EFB341"), list("Service Green", "#9FED58"), diff --git a/code/game/objects/items/apc_frame.dm b/code/game/objects/items/apc_frame.dm index 9edeca9411e8d8..eb3586bc917eed 100644 --- a/code/game/objects/items/apc_frame.dm +++ b/code/game/objects/items/apc_frame.dm @@ -34,7 +34,6 @@ if(locate(/obj/machinery/power/apc) in get_turf(user)) var/obj/machinery/power/apc/mounted_apc = locate(/obj/machinery/power/apc) in get_turf(user) mounted_apc.attackby(src, user) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS T.attackby(src, user) - return TOOL_ACT_TOOLTYPE_SUCCESS - + return ITEM_INTERACT_SUCCESS diff --git a/code/game/objects/items/bear_armor.dm b/code/game/objects/items/bear_armor.dm index a951648d3d090a..556875a474e2f6 100644 --- a/code/game/objects/items/bear_armor.dm +++ b/code/game/objects/items/bear_armor.dm @@ -2,7 +2,7 @@ name = "pile of bear armor" desc = "A scattered pile of various shaped armor pieces fitted for a bear, some duct tape, and a nail filer. Crude instructions \ are written on the back of one of the plates in russian. This seems like an awful idea." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/tools.dmi' icon_state = "bear_armor_upgrade" /obj/item/bear_armor/afterattack(atom/target, mob/user, proximity_flag) diff --git a/code/game/objects/items/binoculars.dm b/code/game/objects/items/binoculars.dm index 15c78ba2960ec1..5557d457d4a713 100644 --- a/code/game/objects/items/binoculars.dm +++ b/code/game/objects/items/binoculars.dm @@ -2,53 +2,28 @@ name = "binoculars" desc = "Used for long-distance surveillance." inhand_icon_state = "binoculars" - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tool.dmi' icon_state = "binoculars" worn_icon_state = "binoculars" lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' righthand_file = 'icons/mob/inhands/items_righthand.dmi' slot_flags = ITEM_SLOT_NECK | ITEM_SLOT_BELT w_class = WEIGHT_CLASS_SMALL - var/mob/listeningTo - var/zoom_out_amt = 5.5 - var/zoom_amt = 10 /obj/item/binoculars/Initialize(mapload) . = ..() AddComponent(/datum/component/two_handed, force_unwielded=8, force_wielded=12, wield_callback = CALLBACK(src, PROC_REF(on_wield)), unwield_callback = CALLBACK(src, PROC_REF(on_unwield))) - -/obj/item/binoculars/Destroy() - listeningTo = null - return ..() + AddComponent(/datum/component/scope, range_modifier = 4, zoom_method = ZOOM_METHOD_WIELD) /obj/item/binoculars/proc/on_wield(obj/item/source, mob/user) - RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_walk)) - RegisterSignal(user, COMSIG_ATOM_DIR_CHANGE, PROC_REF(rotate)) - listeningTo = user user.visible_message(span_notice("[user] holds [src] up to [user.p_their()] eyes."), span_notice("You hold [src] up to your eyes.")) inhand_icon_state = "binoculars_wielded" user.regenerate_icons() - user.client.view_size.zoomOut(zoom_out_amt, zoom_amt, user.dir) - -/obj/item/binoculars/proc/rotate(atom/thing, old_dir, new_dir) - SIGNAL_HANDLER - - if(ismob(thing)) - var/mob/lad = thing - lad.regenerate_icons() - lad.client.view_size.zoomOut(zoom_out_amt, zoom_amt, new_dir) - -/obj/item/binoculars/proc/on_walk() - SIGNAL_HANDLER - - attack_self(listeningTo) //Yes I have sinned, why do you ask? + //Have you ever tried running with binocs on? It takes some willpower not to stop as things appear way too close than they're. + user.add_movespeed_modifier(/datum/movespeed_modifier/binocs_wielded) /obj/item/binoculars/proc/on_unwield(obj/item/source, mob/user) - if(listeningTo) - UnregisterSignal(user, COMSIG_MOVABLE_MOVED) - UnregisterSignal(user, COMSIG_ATOM_DIR_CHANGE) - listeningTo = null user.visible_message(span_notice("[user] lowers [src]."), span_notice("You lower [src].")) inhand_icon_state = "binoculars" user.regenerate_icons() - user.client.view_size.zoomIn() + user.remove_movespeed_modifier(/datum/movespeed_modifier/binocs_wielded) diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index b8419235aae885..4b791193ba3984 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -47,7 +47,7 @@ desc = "Blueprints of the station. There is a \"Classified\" stamp and several coffee stains on it." icon = 'icons/obj/scrolls.dmi' icon_state = "blueprints" - fluffnotice = "Property of Nanotrasen. For heads of staff only. Store in high-secure storage." + fluffnotice = "Property of Symphionia. For heads of staff only. Store in high-secure storage." resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF var/list/image/showing = list() var/client/viewing @@ -210,7 +210,7 @@ desc = "A digital copy of the station blueprints stored in your memory." icon = 'icons/obj/scrolls.dmi' icon_state = "blueprints" - fluffnotice = "Intellectual Property of Nanotrasen. For use in engineering cyborgs only. Wipe from memory upon departure from the station." + fluffnotice = "Intellectual Property of Symphionia. For use in engineering cyborgs only. Wipe from memory upon departure from the station." /obj/item/areaeditor/blueprints/golem name = "land claim" @@ -248,7 +248,9 @@ /obj/machinery/power/apc, ) - for(var/obj/machine as anything in area) - if(is_type_in_list(machine, to_rename)) + for(var/turf/area_turf as anything in area.get_contained_turfs()) + for(var/obj/machine in area_turf) + if(!is_type_in_list(machine, to_rename)) + continue machine.name = replacetext(machine.name, oldtitle, title) //TODO: much much more. Unnamed airlocks, cameras, etc. diff --git a/code/game/objects/items/body_egg.dm b/code/game/objects/items/body_egg.dm index f95b9f2e1640b7..d244d8c55cc16f 100644 --- a/code/game/objects/items/body_egg.dm +++ b/code/game/objects/items/body_egg.dm @@ -15,7 +15,7 @@ if(iscarbon(loc)) Insert(loc) -/obj/item/organ/internal/body_egg/Insert(mob/living/carbon/egg_owner, special = FALSE, drop_if_replaced = TRUE) +/obj/item/organ/internal/body_egg/Insert(mob/living/carbon/egg_owner, special = FALSE, movement_flags = DELETE_IF_REPLACED) . = ..() if(!.) return @@ -23,7 +23,7 @@ egg_owner.med_hud_set_status() INVOKE_ASYNC(src, PROC_REF(AddInfectionImages), egg_owner) -/obj/item/organ/internal/body_egg/Remove(mob/living/carbon/egg_owner, special = FALSE) +/obj/item/organ/internal/body_egg/Remove(mob/living/carbon/egg_owner, special, movement_flags) . = ..() egg_owner.remove_traits(list(TRAIT_XENO_HOST, TRAIT_XENO_IMMUNE), ORGAN_TRAIT) egg_owner.med_hud_set_status() diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index 7e67b23c3b716b..af08e1bc2ffa07 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -132,7 +132,7 @@ /obj/item/bodybag/environmental/prisoner/syndicate name = "syndicate prisoner transport bag" - desc = "An alteration of Nanotrasen's environmental protection bag which has been used in several high-profile kidnappings. Designed to keep a victim unconscious, alive, and secured until they are transported to a required location." + desc = "An alteration of Symphionia's environmental protection bag which has been used in several high-profile kidnappings. Designed to keep a victim unconscious, alive, and secured until they are transported to a required location." icon = 'icons/obj/medical/bodybag.dmi' icon_state = "syndieenvirobag_folded" unfoldedbag_path = /obj/structure/closet/body_bag/environmental/prisoner/pressurized/syndicate diff --git a/code/game/objects/items/botpad_remote.dm b/code/game/objects/items/botpad_remote.dm index 49c49e8cb73cc8..ff77b0880632c5 100644 --- a/code/game/objects/items/botpad_remote.dm +++ b/code/game/objects/items/botpad_remote.dm @@ -2,7 +2,7 @@ name = "Bot pad controller" desc = "Use this device to control the connected bot pad." desc_controls = "Left-click for launch, right-click for recall." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/remote.dmi' icon_state = "botpad_controller" w_class = WEIGHT_CLASS_SMALL // ID of the remote, used for linking up @@ -52,7 +52,7 @@ if(connected_botpad.panel_open) user?.balloon_alert(user, "close the panel!") return - if(!(locate(/mob/living/simple_animal/bot) in get_turf(connected_botpad))) + if(!(locate(/mob/living) in get_turf(connected_botpad))) user?.balloon_alert(user, "no bots detected on the pad!") return connected_botpad.launch(user) diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm index d86f386950c7b1..5d5e978e7e575a 100644 --- a/code/game/objects/items/cardboard_cutouts.dm +++ b/code/game/objects/items/cardboard_cutouts.dm @@ -72,7 +72,7 @@ push_over() /obj/item/cardboard_cutout/deconstruct(disassembled) - if(!(flags_1 & (HOLOGRAM_1|NODECONSTRUCT_1))) + if(!(flags_1 & HOLOGRAM_1) || !(obj_flags & NO_DECONSTRUCTION)) new /obj/item/stack/sheet/cardboard(loc, 1) return ..() @@ -149,7 +149,7 @@ SHOULD_CALL_PARENT(FALSE) return -/obj/item/cardboard_cutout/adaptive //Purchased by Syndicate agents, these cutouts are indistinguishable from normal cutouts but aren't discolored when their appearance is changed +/obj/item/cardboard_cutout/adaptive //Purchased by Symphionia agents, these cutouts are indistinguishable from normal cutouts but aren't discolored when their appearance is changed deceptive = TRUE /datum/cardboard_cutout diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 9dd7e125055f18..3fddefc10ff828 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -92,7 +92,7 @@ var/holopay_name = "holographic pay stand" /// Registered owner's age. - var/registered_age = 18 //SKYRAT EDIT - ORIGINAL (13) + var/registered_age = 18 //NOVA EDIT - ORIGINAL (13) /// The job name registered on the card (for example: Assistant). var/assignment @@ -419,7 +419,7 @@ if(Adjacent(user)) var/minor if(registered_name && registered_age && registered_age < AGE_MINOR) - minor = " [registered_age]" //SKYRAT EDIT CHANGE + minor = " [registered_age]" //NOVA EDIT CHANGE user.visible_message(span_notice("[user] shows you: [icon2html(src, viewers(user))] [src.name][minor]."), span_notice("You show \the [src.name][minor].")) add_fingerprint(user) @@ -441,14 +441,11 @@ /obj/item/card/id/add_context(atom/source, list/context, obj/item/held_item, mob/user) . = ..() - if(held_item != src) - return - context[SCREENTIP_CONTEXT_LMB] = "Show ID" context[SCREENTIP_CONTEXT_RMB] = "Project pay stand" if(isnull(registered_account) || registered_account.replaceable) //Same check we use when we check if we can assign an account - context[SCREENTIP_CONTEXT_ALT_LMB] = "Assign account" - else + context[SCREENTIP_CONTEXT_ALT_RMB] = "Assign account" + if(!registered_account.replaceable || registered_account.account_balance > 0) context[SCREENTIP_CONTEXT_ALT_LMB] = "Withdraw credits" return CONTEXTUAL_SCREENTIP_SET @@ -569,11 +566,11 @@ if (money_added) to_chat(user, span_notice("You stuff the contents into the card! They disappear in a puff of bluespace smoke, adding [money_added] worth of credits to the linked account.")) return - /// SKYRAT EDIT BEGINS - Trim Tokens - Proc defined in modular_skyrat/modules/trim_tokens/code/cards_id.dm + /// NOVA EDIT BEGINS - Trim Tokens - Proc defined in modular_nova/modules/trim_tokens/code/cards_id.dm else if(istype(W, /obj/item/trim_token)) apply_token(W, user) return - /// SKYRAT EDIT ENDS + /// NOVA EDIT ENDS else return ..() @@ -654,10 +651,8 @@ return FALSE 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) + var/default_account = (istype(user_key) && user_key.remembered_id) || 11111 + var/new_bank_id = tgui_input_number(user, "Enter the account ID to associate with this card.", "Link Bank Account", default_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) @@ -678,9 +673,6 @@ /obj/item/card/id/AltClick(mob/living/user) if(!alt_click_can_use_id(user)) return - if(!registered_account || registered_account.replaceable) - set_new_account(user) - return if(registered_account.account_debt) var/choice = tgui_alert(user, "Choose An Action", "Bank Account", list("Withdraw", "Pay Debt")) if(!choice || QDELETED(user) || QDELETED(src) || !alt_click_can_use_id(user) || loc != user) @@ -710,6 +702,14 @@ var/difference = amount_to_remove - registered_account.account_balance registered_account.bank_card_talk(span_warning("ERROR: The linked account requires [difference] more credit\s to perform that withdrawal."), TRUE) +/obj/item/card/id/alt_click_secondary(mob/user) + . = ..() + if(!alt_click_can_use_id(user)) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(!registered_account || registered_account.replaceable) + set_new_account(user) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + /obj/item/card/id/proc/pay_debt(user) var/amount_to_pay = tgui_input_number(user, "How much do you want to pay? (Max: [registered_account.account_balance] cr)", "Debt Payment", max_value = min(registered_account.account_balance, registered_account.account_debt)) if(!amount_to_pay || QDELETED(src) || loc != user || !alt_click_can_use_id(user)) @@ -734,7 +734,7 @@ . += "The [linked_dept.account_holder] linked to the ID reports a balance of [linked_dept.account_balance] cr." if(HAS_TRAIT(user, TRAIT_ID_APPRAISER)) - . += HAS_TRAIT(src, TRAIT_JOB_FIRST_ID_CARD) ? span_boldnotice("Hmm... yes, this ID was issued from Central Command!") : span_boldnotice("This ID was created in this sector, not by Central Command.") + . += HAS_TRAIT(src, TRAIT_JOB_FIRST_ID_CARD) ? span_boldnotice("Hmm... yes, this ID was issued from Conglomeration of Colonists!") : span_boldnotice("This ID was created in this sector, not by Conglomeration of Colonists.") if(HAS_TRAIT(src, TRAIT_TASTEFULLY_THICK_ID_CARD) && (user.is_holding(src) || (user.CanReach(src) && user.put_in_hands(src, ignore_animation = FALSE)))) ADD_TRAIT(src, TRAIT_NODROP, "psycho") . += span_hypnophrase("Look at that subtle coloring... The tasteful thickness of it. Oh my God, it even has a watermark...") @@ -1007,7 +1007,7 @@ if(istype(old_loc, /obj/item/storage/wallet)) UnregisterSignal(old_loc, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED)) - if(istype(old_loc, /obj/item/modular_computer/pda)) + if(istype(old_loc, /obj/item/modular_computer)) UnregisterSignal(old_loc, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED)) //New loc @@ -1015,7 +1015,7 @@ RegisterSignal(loc, COMSIG_ITEM_EQUIPPED, PROC_REF(update_intern_status)) RegisterSignal(loc, COMSIG_ITEM_DROPPED, PROC_REF(remove_intern_status)) - if(istype(loc, /obj/item/modular_computer/pda)) + if(istype(loc, /obj/item/modular_computer)) RegisterSignal(loc, COMSIG_ITEM_EQUIPPED, PROC_REF(update_intern_status)) RegisterSignal(loc, COMSIG_ITEM_DROPPED, PROC_REF(remove_intern_status)) @@ -1111,7 +1111,7 @@ /obj/item/card/id/advanced/centcom name = "\improper CentCom ID" - desc = "An ID straight from Central Command." + desc = "An ID straight from Conglomeration of Colonists." icon_state = "card_centcom" assigned_icon_state = "assigned_centcom" registered_name = JOB_CENTCOM @@ -1178,22 +1178,22 @@ /obj/item/card/id/advanced/black/syndicate_command name = "syndicate ID card" - desc = "An ID straight from the Syndicate." - registered_name = "Syndicate" + desc = "An ID straight from the Symphionia." + registered_name = "Symphionia" registered_age = null trim = /datum/id_trim/syndicom wildcard_slots = WILDCARD_LIMIT_SYNDICATE /obj/item/card/id/advanced/black/syndicate_command/crew_id name = "syndicate ID card" - desc = "An ID straight from the Syndicate." - registered_name = "Syndicate" + desc = "An ID straight from the Symphionia." + registered_name = "Symphionia" trim = /datum/id_trim/syndicom/crew /obj/item/card/id/advanced/black/syndicate_command/captain_id name = "syndicate captain ID card" - desc = "An ID straight from the Syndicate." - registered_name = "Syndicate" + desc = "An ID straight from the Symphionia." + registered_name = "Symphionia" trim = /datum/id_trim/syndicom/captain @@ -1347,7 +1347,7 @@ desc = "A highly advanced chameleon ID card. Touch this card on another ID card or player to choose which accesses to copy. \ Has special magnetic properties which force it to the front of wallets." trim = /datum/id_trim/chameleon - wildcard_slots = WILDCARD_LIMIT_CHAMELEON_PLUS // SKYRAT EDIT - Original WILDCARD_LIMIT_CHAMELEON + wildcard_slots = WILDCARD_LIMIT_CHAMELEON_PLUS // NOVA EDIT - Original WILDCARD_LIMIT_CHAMELEON actions_types = list(/datum/action/item_action/chameleon/change/id, /datum/action/item_action/chameleon/change/id_trim) /// Have we set a custom name and job assignment, or will we use what we're given when we chameleon change? diff --git a/code/game/objects/items/chainsaw.dm b/code/game/objects/items/chainsaw.dm index e26f9aa2e995f4..68501057ebf423 100644 --- a/code/game/objects/items/chainsaw.dm +++ b/code/game/objects/items/chainsaw.dm @@ -7,7 +7,7 @@ icon_state = "chainsaw_off" lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY force = 13 var/force_on = 24 w_class = WEIGHT_CLASS_HUGE @@ -99,6 +99,28 @@ armour_penetration = 100 force_on = 30 +/obj/item/chainsaw/doomslayer/attack(mob/living/target_mob, mob/living/user, params) + if (target_mob.stat != DEAD) + return ..() + + if (user.zone_selected != BODY_ZONE_HEAD) + return ..() + + var/obj/item/bodypart/head = target_mob.get_bodypart(BODY_ZONE_HEAD) + if (isnull(head)) + return ..() + + playsound(user, 'sound/weapons/slice.ogg', vol = 80, vary = TRUE) + + target_mob.balloon_alert(user, "cutting off head...") + if (!do_after(user, 2 SECONDS, target_mob, extra_checks = CALLBACK(src, PROC_REF(has_same_head), target_mob, head))) + return TRUE + + head.dismember(silent = FALSE) + user.put_in_hands(head) + + return TRUE + /obj/item/chainsaw/doomslayer/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) if(attack_type == PROJECTILE_ATTACK) owner.visible_message(span_danger("Ranged attacks just make [owner] angrier!")) @@ -106,6 +128,9 @@ return TRUE return FALSE +/obj/item/chainsaw/doomslayer/proc/has_same_head(mob/living/target_mob, obj/item/bodypart/head) + return target_mob.get_bodypart(BODY_ZONE_HEAD) == head + /obj/item/chainsaw/mounted_chainsaw name = "mounted chainsaw" desc = "A chainsaw that has replaced your arm." diff --git a/code/game/objects/items/charter.dm b/code/game/objects/items/charter.dm index 1d1f8fad7cc56e..e204e7d0b34a9a 100644 --- a/code/game/objects/items/charter.dm +++ b/code/game/objects/items/charter.dm @@ -97,7 +97,7 @@ /obj/item/station_charter/banner - name = "\improper Nanotrasen banner" + name = "\improper Symphionia banner" icon = 'icons/obj/banner.dmi' name_type = "planet" icon_state = "banner" @@ -113,7 +113,7 @@ minor_announce("[ureal_name] has designated the [name_type] as [html_decode(station_name())]", "Captain's Banner") //decode station_name to avoid minor_announce double encode log_game("[ukey] has renamed the [name_type] as [station_name()].") name = "banner of [station_name()]" - desc = "The banner bears the official coat of arms of Nanotrasen, signifying that [station_name()] has been claimed by Captain [uname] in the name of the company." + desc = "The banner bears the official coat of arms of Symphionia, signifying that [station_name()] has been claimed by Captain [uname] in the name of the company." SSblackbox.record_feedback("text", "station_renames", 1, "[station_name()]") if(!unlimited_uses) used = TRUE diff --git a/code/game/objects/items/choice_beacon.dm b/code/game/objects/items/choice_beacon.dm index 07a7808cd84888..5c6ca9cf1ef557 100644 --- a/code/game/objects/items/choice_beacon.dm +++ b/code/game/objects/items/choice_beacon.dm @@ -1,7 +1,7 @@ /obj/item/choice_beacon name = "choice beacon" desc = "Hey, why are you viewing this?!! Please let CentCom know about this odd occurrence." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/remote.dmi' icon_state = "gangtool-blue" inhand_icon_state = "radio" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' @@ -9,7 +9,7 @@ /// How many uses this item has before being deleted var/uses = 1 /// Used in the deployment message - What company is sending the equipment, flavor - var/company_source = "Central Command" + var/company_source = "Conglomeration of Colonists" /// Used inthe deployment message - What is the company saying with their message, flavor var/company_message = span_bold("Item request received. Your package is inbound, please stand back from the landing site.") @@ -68,10 +68,39 @@ "spawn" = choice_path, )) +/obj/item/choice_beacon/music + name = "instrument delivery beacon" + desc = "Summon your tool of art." + w_class = WEIGHT_CLASS_TINY + +/obj/item/choice_beacon/music/generate_display_names() + var/static/list/instruments + if(!instruments) + instruments = list() + var/list/possible_instruments = list( + /obj/item/instrument/violin, + /obj/item/instrument/piano_synth, + /obj/item/instrument/banjo, + /obj/item/instrument/guitar, + /obj/item/instrument/eguitar, + /obj/item/instrument/glockenspiel, + /obj/item/instrument/accordion, + /obj/item/instrument/trumpet, + /obj/item/instrument/saxophone, + /obj/item/instrument/trombone, + /obj/item/instrument/recorder, + /obj/item/instrument/harmonica, + /obj/item/instrument/piano_synth/headphones, + ) + for(var/obj/item/instrument/instrument as anything in possible_instruments) + instruments[initial(instrument.name)] = instrument + return instruments + /obj/item/choice_beacon/ingredient name = "ingredient delivery beacon" desc = "Summon a box of ingredients to help you get started cooking." - icon_state = "gangtool-white" + icon_state = "sb_delivery" + inhand_icon_state = "sb_delivery" company_source = "Sophronia Broadcasting" company_message = span_bold("Please enjoy your Sophronia Broadcasting's 'Plasteel Chef' Ingredients Box, exactly as shown in the hit show!") @@ -86,6 +115,8 @@ /obj/item/choice_beacon/hero name = "heroic beacon" desc = "To summon heroes from the past to protect the future." + icon_state = "sb_delivery" + inhand_icon_state = "sb_delivery" company_source = "Sophronia Broadcasting" company_message = span_bold("Please enjoy your Sophronia Broadcasting's 'History Comes Alive branded' Costume Set, exactly as shown in the hit show!") @@ -102,7 +133,7 @@ desc = "Summons augmentations. Can be used 3 times!" uses = 3 company_source = "S.E.L.F." - company_message = span_bold("Item request received. Your package has been teleported, use the autosurgeon supplied to apply the upgrade.") + company_message = span_bold("Request status: Recieved. Package status: Delivered. Notes: To assure optimal value, use supplied Interdyne-brand autosurgeons to change implantment status.") /obj/item/choice_beacon/augments/generate_display_names() var/static/list/augment_list @@ -129,7 +160,11 @@ /obj/item/choice_beacon/holy name = "armaments beacon" - desc = "Contains a set of armaments for the chaplain." + desc = "Summon a set of standard issue chaplain armaments, as dictated by I.C.R.A." + icon_state = "icra_delivery" + inhand_icon_state = "icra_delivery" + company_source = "Interstellar Conservation of Religion Association" + company_message = span_bold("A choice has already been made.") /obj/item/choice_beacon/holy/can_use_beacon(mob/living/user) if(user.mind?.holy_role) @@ -141,7 +176,6 @@ // Overrides generate options so that we can show a neat radial instead /obj/item/choice_beacon/holy/open_options_menu(mob/living/user) if(GLOB.holy_armor_type) - to_chat(user, span_warning("A selection has already been made.")) consume_use(GLOB.holy_armor_type, user) return diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index 94e9cb674b2691..ee78b11c72031f 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -43,10 +43,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM /obj/item/match/proc/matchignite() if(lit || burnt) return - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION var/turf/my_turf = get_turf(src) my_turf.pollute_turf(/datum/pollutant/sulphur, 5) - //SKYRAT EDIT END + //NOVA EDIT END playsound(src, 'sound/items/match_strike.ogg', 15, TRUE) lit = TRUE icon_state = "match_lit" @@ -173,7 +173,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM /// When choking, what is the maximum amount of time we COULD choke for var/choke_time_max = 30 SECONDS // I am mean - var/pollution_type = /datum/pollutant/smoke //SKYRAT EDIT ADDITION /// What type of pollution does this produce on smoking, changed to weed pollution sometimes + var/pollution_type = /datum/pollutant/smoke //NOVA EDIT ADDITION /// What type of pollution does this produce on smoking, changed to weed pollution sometimes /obj/item/clothing/mask/cigarette/Initialize(mapload) @@ -294,12 +294,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM e.start(src) qdel(src) return - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION // Setting the puffed pollutant to cannabis if we're smoking the space drugs reagent(obtained from cannabis) if(reagents.has_reagent(/datum/reagent/drug/space_drugs)) pollution_type = /datum/pollutant/smoke/cannabis // allowing reagents to react after being lit - //SKYRAT EDIT END + //NOVA EDIT END reagents.flags &= ~(NO_REACT) reagents.handle_reactions() @@ -379,10 +379,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM extinguish() return - // SKYRAT EDIT ADDITION START - Pollution + // NOVA EDIT ADDITION START - Pollution var/turf/location = get_turf(src) location.pollute_turf(pollution_type, 5, POLLUTION_PASSIVE_EMITTER_CAP) - // SKYRAT EDIT END + // NOVA EDIT END smoketime -= seconds_per_tick * (1 SECONDS) if(smoketime <= 0) @@ -736,7 +736,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM inhand_icon_state = "zippo" worn_icon_state = "lighter" w_class = WEIGHT_CLASS_TINY - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT heat = 1500 resistance_flags = FIRE_PROOF @@ -847,6 +847,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM span_notice("You hear a quiet click, as [user] shuts off [src] without even looking at what [user.p_theyre()] doing. Wow."), span_notice("You quietly shut off [src] without even looking at what you're doing. Wow.") ) + playsound(src, 'modular_nova/master_files/sound/items/zippo_close.ogg', 50, TRUE) // NOVA EDIT ADDITION else user.visible_message( span_notice("[user] quietly shuts off [src]."), @@ -860,6 +861,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM span_notice("Without even breaking stride, [user] flips open and lights [src] in one smooth movement."), span_notice("Without even breaking stride, you flip open and light [src] in one smooth movement.") ) + playsound(src, 'modular_nova/master_files/sound/items/zippo_open.ogg', 50, TRUE) // NOVA EDIT ADDITION return var/hand_protected = FALSE @@ -1051,12 +1053,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM name = "\improper E-Cigarette" desc = "A classy and highly sophisticated electronic cigarette, for classy and dignified gentlemen. A warning label reads \"Warning: Do not fill with flammable materials.\""//<<< i'd vape to that. icon = 'icons/obj/clothing/masks.dmi' - worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' //SKYRAT EDIT: ADDITION + worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/mask.dmi' //NOVA EDIT: ADDITION icon_state = "vape" worn_icon_state = "vape_worn" greyscale_config = /datum/greyscale_config/vape greyscale_config_worn = /datum/greyscale_config/vape/worn - greyscale_config_worn_digi = /datum/greyscale_config/vape/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale (Digi? On a vape? What? How did we do this) + greyscale_config_worn_muzzled = /datum/greyscale_config/vape/worn/muzzled //NOVA EDIT ADDITION greyscale_colors = "#2e2e2e" inhand_icon_state = null w_class = WEIGHT_CLASS_TINY @@ -1206,11 +1208,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM //Time to start puffing those fat vapes, yo. COOLDOWN_START(src, drag_cooldown, dragtime) - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION //open flame removed because vapes are a closed system, they won't light anything on fire var/turf/my_turf = get_turf(src) my_turf.pollute_turf(/datum/pollutant/smoke/vape, 5, POLLUTION_PASSIVE_EMITTER_CAP) - //SKYRAT EDIT END + //NOVA EDIT END if(obj_flags & EMAGGED) var/datum/effect_system/fluid_spread/smoke/chem/smoke_machine/puff = new diff --git a/code/game/objects/items/circuitboards/circuitboard.dm b/code/game/objects/items/circuitboards/circuitboard.dm index 1e12576f686265..236b6ed402c4a9 100644 --- a/code/game/objects/items/circuitboards/circuitboard.dm +++ b/code/game/objects/items/circuitboards/circuitboard.dm @@ -7,7 +7,7 @@ name = "circuit board" /// extension that is applied after the initial name AKA (Computer/Machine Board) var/name_extension = null - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "circuit_map" inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' @@ -108,7 +108,7 @@ micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells. . = ..() if(!LAZYLEN(req_components)) . += span_info("It requires no components.") - return . + return var/list/nice_list = list() for(var/component_path in req_components) @@ -118,27 +118,33 @@ micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells. var/component_name var/component_amount = req_components[component_path] + //e.g. "glass sheet" vs. "glass" if(ispath(component_path, /obj/item/stack)) var/obj/item/stack/stack_path = component_path - if(initial(stack_path.singular_name)) - component_name = initial(stack_path.singular_name) //e.g. "glass sheet" vs. "glass" - else if(ispath(component_path, /obj/item/stock_parts) && !specific_parts) - var/obj/item/stock_parts/stock_part = component_path - component_name = initial(stock_part.base_name) || initial(stock_part.name) - else if(ispath(component_path, /obj/item/stock_parts)) - var/obj/item/stock_parts/stock_part = component_path - component_name = initial(stock_part.name) - else if(ispath(component_path, /datum/stock_part)) - var/datum/stock_part/stock_part = component_path - var/obj/item/stock_parts/physical_object_type = initial(stock_part.physical_object_type) - component_name = initial(physical_object_type.base_name) || initial(physical_object_type.name) + component_name = initial(stack_path.singular_name) + + //stock parts in datum or obj form + else if(ispath(component_path, /obj/item/stock_parts) || ispath(component_path, /datum/stock_part)) + var/obj/item/stock_parts/stock_part + if(ispath(component_path, /obj/item/stock_parts)) + stock_part = component_path + else + var/datum/stock_part/datum_part = component_path + stock_part = initial(datum_part.physical_object_type) + + if(!specific_parts) + component_name = initial(stock_part.base_name) + if(!component_name) + component_name = initial(stock_part.name) + + //beakers, any non conventional part else if(ispath(component_path, /atom)) var/atom/stock_part = component_path component_name = initial(stock_part.name) + //append decoded name to final result if (isnull(component_name)) stack_trace("[component_path] was an invalid component") - nice_list += list("[component_amount] [component_name]\s") . += span_info("It requires [english_list(nice_list)].") diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index 2eca8339590d45..6e3c29400d3cee 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -193,7 +193,7 @@ build_path = /obj/machinery/computer/communications /obj/item/circuitboard/computer/communications/syndicate - name = "Syndicate Communications" + name = "Symphionia Communications" greyscale_colors = CIRCUIT_COLOR_ENGINEERING build_path = /obj/machinery/computer/communications/syndicate @@ -295,7 +295,7 @@ build_path = /obj/machinery/computer/pod/old/swf /obj/item/circuitboard/computer/syndicate_shuttle - name = "Syndicate Shuttle" + name = "Symphionia Shuttle" greyscale_colors = CIRCUIT_COLOR_GENERIC build_path = /obj/machinery/computer/shuttle/syndicate var/challenge = FALSE diff --git a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm index c7ba71596a65c0..c4605c11860ff8 100644 --- a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm @@ -255,7 +255,8 @@ build_path = /obj/machinery/ntnet_relay req_components = list( /obj/item/stack/cable_coil = 2, - /datum/stock_part/filter = 1) + /datum/stock_part/filter = 1, + ) /obj/item/circuitboard/machine/pacman name = "PACMAN-type Generator" @@ -282,7 +283,7 @@ /obj/item/circuitboard/machine/turbine_compressor name = "Turbine - Inlet Compressor" greyscale_colors = CIRCUIT_COLOR_ENGINEERING - build_path = /obj/machinery/power/turbine/inlet_compressor/constructed + build_path = /obj/machinery/power/turbine/inlet_compressor req_components = list( /obj/item/stack/cable_coil = 5, /obj/item/stack/sheet/iron = 5) @@ -290,7 +291,7 @@ /obj/item/circuitboard/machine/turbine_rotor name = "Turbine - Core Rotor" greyscale_colors = CIRCUIT_COLOR_ENGINEERING - build_path = /obj/machinery/power/turbine/core_rotor/constructed + build_path = /obj/machinery/power/turbine/core_rotor req_components = list( /obj/item/stack/cable_coil = 5, /obj/item/stack/sheet/iron = 5) @@ -298,7 +299,7 @@ /obj/item/circuitboard/machine/turbine_stator name = "Turbine - Turbine Outlet" greyscale_colors = CIRCUIT_COLOR_ENGINEERING - build_path = /obj/machinery/power/turbine/turbine_outlet/constructed + build_path = /obj/machinery/power/turbine/turbine_outlet req_components = list( /obj/item/stack/cable_coil = 5, /obj/item/stack/sheet/iron = 5) @@ -550,7 +551,7 @@ /obj/item/circuitboard/machine/smartfridge/apply_default_parts(obj/machinery/smartfridge/smartfridge) build_path = smartfridge.base_build_path - if(!fridges_name_paths.Find(build_path, fridges_name_paths)) + if(!fridges_name_paths.Find(build_path)) name = "[initial(smartfridge.name)]" //if it's a unique type, give it a unique name. is_special_type = TRUE return ..() @@ -655,17 +656,17 @@ /obj/machinery/vending/robotics = "Robotech Deluxe", /obj/machinery/vending/engineering = "Robco Tool Maker", /obj/machinery/vending/sovietsoda = "BODA", - /obj/machinery/vending/security = "Armadyne Peacekeeper Equipment Vendor", //SKYRAT EDIT CHANGE - SEC_HUAL - ORIGINAL: /obj/machinery/vending/security = "SecTech", + /obj/machinery/vending/security = "Armadyne Peacekeeper Equipment Vendor", //NOVA EDIT CHANGE - SEC_HUAL - ORIGINAL: /obj/machinery/vending/security = "SecTech", /obj/machinery/vending/modularpc = "Deluxe Silicate Selections", /obj/machinery/vending/tool = "YouTool", /obj/machinery/vending/custom = "Custom Vendor", - /obj/machinery/vending/dorms = "LustWish", //SKYRAT EDIT CHANGE - ERP UPDATE - ORIGINAL: /obj/machinery/vending/dorms = "KinkVend" - /obj/machinery/vending/access/command = "Command Outfitting Station", //SKYRAT EDIT ADDITION - /obj/machinery/vending/barbervend = "Fab-O-Vend", //SKYRAT EDIT ADDITION - /obj/machinery/vending/imported = "NT Sustenance Supplier", //SKYRAT EDIT ADDITION - /obj/machinery/vending/imported/yangyu = "Fudobenda", //SKYRAT EDIT ADDITION - /obj/machinery/vending/imported/mothic = "Nomad Fleet Ration Chit Exchange", //SKYRAT EDIT ADDITION - /obj/machinery/vending/imported/tiziran = "Tiziran Imported Delicacies",) //SKYRAT EDIT ADDITION + /obj/machinery/vending/dorms = "LustWish", //NOVA EDIT CHANGE - ERP UPDATE - ORIGINAL: /obj/machinery/vending/dorms = "KinkVend" + /obj/machinery/vending/access/command = "Command Outfitting Station", //NOVA EDIT ADDITION + /obj/machinery/vending/barbervend = "Fab-O-Vend", //NOVA EDIT ADDITION + /obj/machinery/vending/imported = "NT Sustenance Supplier", //NOVA EDIT ADDITION + /obj/machinery/vending/imported/yangyu = "Fudobenda", //NOVA EDIT ADDITION + /obj/machinery/vending/imported/mothic = "Nomad Fleet Ration Chit Exchange", //NOVA EDIT ADDITION + /obj/machinery/vending/imported/tiziran = "Tiziran Imported Delicacies",) //NOVA EDIT ADDITION /obj/item/circuitboard/machine/vendor/screwdriver_act(mob/living/user, obj/item/tool) var/static/list/display_vending_names_paths @@ -701,7 +702,7 @@ /obj/item/vending_refill/donksoft = 1) /obj/item/circuitboard/machine/vending/syndicatedonksofttoyvendor - name = "Syndicate Donksoft Toy Vendor" + name = "Symphionia Donksoft Toy Vendor" build_path = /obj/machinery/vending/toyliberationstation req_components = list( /obj/item/stack/sheet/glass = 1, @@ -967,7 +968,8 @@ req_components = list( /datum/stock_part/scanning_module = 1, /datum/stock_part/servo = 1, - /datum/stock_part/micro_laser = 1) + /datum/stock_part/micro_laser = 1, + ) /obj/item/circuitboard/machine/experimentor name = "E.X.P.E.R.I-MENTOR" @@ -1562,3 +1564,12 @@ /obj/item/stack/sheet/plasteel = 2, ) +/obj/item/circuitboard/machine/shieldwallgen + name = "Shield Wall Generator" + greyscale_colors = CIRCUIT_COLOR_SCIENCE + build_path = /obj/machinery/power/shieldwallgen + req_components = list( + /datum/stock_part/capacitor/tier2 = 2, + /datum/stock_part/micro_laser/tier2 = 2, + /obj/item/stack/sheet/plasteel = 2, + ) diff --git a/code/game/objects/items/climbingrope.dm b/code/game/objects/items/climbingrope.dm index 2c96d1844b13b1..03178604074531 100644 --- a/code/game/objects/items/climbingrope.dm +++ b/code/game/objects/items/climbingrope.dm @@ -32,20 +32,23 @@ return if(!istype(target) || isopenspaceturf(target)) return - if(target.is_blocked_turf(exclude_mobs = TRUE)) - return + var/turf/user_turf = get_turf(user) var/turf/above = GET_TURF_ABOVE(user_turf) + if(target_blocked(target, above)) + return if(!isopenspaceturf(above) || !above.Adjacent(target)) //are we below a hole, is the target blocked, is the target adjacent to our hole balloon_alert(user, "blocked!") return + var/away_dir = get_dir(above, target) user.visible_message(span_notice("[user] begins climbing upwards with [src]."), span_notice("You get to work on properly hooking [src] and going upwards.")) playsound(target, 'sound/effects/picaxe1.ogg', 50) //plays twice so people above and below can hear playsound(user_turf, 'sound/effects/picaxe1.ogg', 50) var/list/effects = list(new /obj/effect/temp_visual/climbing_hook(target, away_dir), new /obj/effect/temp_visual/climbing_hook(user_turf, away_dir)) + if(do_after(user, climb_time, target)) - user.Move(target) + user.forceMove(target) uses-- if(uses <= 0) @@ -54,6 +57,23 @@ QDEL_LIST(effects) +// didnt want to mess up is_blocked_turf_ignore_climbable +/// checks if our target is blocked, also checks for border objects facing the above turf and climbable stuff +/obj/item/climbing_hook/proc/target_blocked(turf/target, turf/above) + if(target.density || above.density) + return TRUE + + for(var/atom/movable/atom_content as anything in target.contents) + if(isliving(atom_content)) + continue + if(HAS_TRAIT(atom_content, TRAIT_CLIMBABLE)) + continue + if((atom_content.flags_1 & ON_BORDER_1) && atom_content.dir != get_dir(target, above)) //if the border object is facing the hole then it is blocking us, likely + continue + if(atom_content.density) + return TRUE + return FALSE + /obj/item/climbing_hook/emergency name = "emergency climbing hook" desc = "An emergency climbing hook to scale up holes. The rope is EXTREMELY cheap and may not withstand extended use." diff --git a/code/game/objects/items/clown_items.dm b/code/game/objects/items/clown_items.dm index 1a8ffe81f42193..0f24cc8a76bed6 100644 --- a/code/game/objects/items/clown_items.dm +++ b/code/game/objects/items/clown_items.dm @@ -63,7 +63,7 @@ cleanspeed = 3 SECONDS // faster than base soap to reward chemists for going to the effort /obj/item/soap/nanotrasen - desc = "A heavy duty bar of Nanotrasen brand soap. Smells of plasma." + desc = "A heavy duty bar of Symphionia brand soap. Smells of plasma." grind_results = list(/datum/reagent/toxin/plasma = 10, /datum/reagent/lye = 10) icon_state = "soapnt" inhand_icon_state = "soapnt" @@ -129,7 +129,9 @@ * * target - The atom that is being cleaned * * user - The mob that is using the soap to clean. */ -/obj/item/soap/proc/decreaseUses(datum/source, atom/target, mob/living/user) +/obj/item/soap/proc/decreaseUses(datum/source, atom/target, mob/living/user, clean_succeeded) + if(!clean_succeeded) + return var/skillcheck = 1 if(user?.mind) skillcheck = user.mind.get_skill_modifier(/datum/skill/cleaning, SKILL_SPEED_MODIFIER) diff --git a/code/game/objects/items/control_wand.dm b/code/game/objects/items/control_wand.dm index 2e3750cda473a3..1fef4a38438a47 100644 --- a/code/game/objects/items/control_wand.dm +++ b/code/game/objects/items/control_wand.dm @@ -7,9 +7,9 @@ inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/remote.dmi' name = "control wand" - desc = "Remotely controls airlocks." + desc = "A remote for controlling a set of airlocks." w_class = WEIGHT_CLASS_TINY var/mode = WAND_OPEN var/region_access = REGION_GENERAL @@ -73,8 +73,10 @@ if (airlock.locked) airlock.unbolt() + log_combat(user, airlock, "unbolted", src) else airlock.bolt() + log_combat(user, airlock, "bolted", src) if (WAND_EMERGENCY) if (!istype(airlock)) target.balloon_alert(user, "only airlocks!") diff --git a/code/game/objects/items/cosmetics.dm b/code/game/objects/items/cosmetics.dm index 9e49a99d73b89e..68b523932b70b2 100644 --- a/code/game/objects/items/cosmetics.dm +++ b/code/game/objects/items/cosmetics.dm @@ -6,7 +6,7 @@ gender = PLURAL name = "red lipstick" desc = "A generic brand of lipstick." - icon = 'modular_skyrat/modules/salon/icons/items.dmi' //SKYRAT EDIT CHANGE - ORIGINAL: icon = 'icons/obj/cosmetic.dmi' + icon = 'modular_nova/modules/salon/icons/items.dmi' //NOVA EDIT CHANGE - ORIGINAL: icon = 'icons/obj/cosmetic.dmi' icon_state = "lipstick" inhand_icon_state = "lipstick" w_class = WEIGHT_CLASS_TINY @@ -182,14 +182,14 @@ span_notice("You wipe off [target]'s lipstick.")) target.update_lips(null) -/* SKYRAT EDIT REMOVAL +/* NOVA EDIT REMOVAL /obj/item/razor name = "electric razor" desc = "The latest and greatest power razor born from the science of shaving." icon = 'icons/obj/cosmetic.dmi' icon_state = "razor" inhand_icon_state = "razor" - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY w_class = WEIGHT_CLASS_TINY /obj/item/razor/suicide_act(mob/living/carbon/user) diff --git a/code/game/objects/items/crab17.dm b/code/game/objects/items/crab17.dm index a20fcce5db86cd..650181b5e9bfc0 100644 --- a/code/game/objects/items/crab17.dm +++ b/code/game/objects/items/crab17.dm @@ -38,7 +38,7 @@ dumped = TRUE /obj/structure/checkoutmachine - name = "\improper Nanotrasen Space-Coin Market" + name = "\improper Symphionia Space-Coin Market" desc = "This is good for spacecoin because" icon = 'icons/obj/machines/money_machine.dmi' icon_state = "bogdanoff" @@ -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/crayons.dm b/code/game/objects/items/crayons.dm index 7f7f733ad863a5..3090842b65ac86 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -14,6 +14,7 @@ #define AVAILABLE_SPRAYCAN_SPACE 8 // enough to fill one radial menu page +#define DRAW_TIME 5 SECONDS #define INFINITE_CHARGES -1 /* @@ -367,7 +368,8 @@ .["has_cap"] = has_cap .["is_capped"] = is_capped .["can_change_colour"] = can_change_colour - .["current_colour"] = paint_color + .["selected_color"] = GLOB.pipe_color_name[paint_color] || paint_color + .["paint_colors"] = GLOB.pipe_paint_colors /obj/item/toy/crayon/ui_act(action, list/params) . = ..() @@ -390,8 +392,14 @@ text_buffer = "" else paint_mode = PAINT_NORMAL - if("select_colour") + if("custom_color") . = can_change_colour && pick_painting_tool_color(usr, paint_color) + if("color") + if(!can_change_colour) + return + paint_color = GLOB.pipe_paint_colors[params["paint_color"]] + set_painting_tool_color(paint_color) + . = TRUE if("enter_text") var/txt = tgui_input_text(usr, "Choose what to write", "Scribbles", text_buffer) if(isnull(txt)) @@ -497,11 +505,13 @@ audible_message(span_notice("You hear spraying.")) playsound(user.loc, 'sound/effects/spray.ogg', 5, TRUE, 5) - var/wait_time = 50 + var/wait_time = DRAW_TIME if(paint_mode == PAINT_LARGE_HORIZONTAL) wait_time *= 3 + if(istagger) + wait_time *= 0.5 - if(!instant && !do_after(user, 50, target = target)) + if(!instant && !do_after(user, wait_time, target = target)) return if(!use_charges(user, cost)) @@ -755,6 +765,30 @@ /datum/component/slapcrafting,\ slapcraft_recipes = slapcraft_recipe_list,\ ) + register_context() + register_item_context() + +/obj/item/toy/crayon/spraycan/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) + . = ..() + + if(!user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) + return . + + if(has_cap) + context[SCREENTIP_CONTEXT_ALT_LMB] = "Toggle cap" + + return CONTEXTUAL_SCREENTIP_SET + +/obj/item/toy/crayon/spraycan/add_item_context(datum/source, list/context, atom/target, mob/living/user) + . = ..() + + if(!user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) + return . + + context[SCREENTIP_CONTEXT_LMB] = "Paint" + context[SCREENTIP_CONTEXT_RMB] = "Copy color" + + return CONTEXTUAL_SCREENTIP_SET /obj/item/toy/crayon/spraycan/isValidSurface(surface) return (isfloorturf(surface) || iswallturf(surface)) @@ -841,7 +875,6 @@ user.visible_message(span_notice("[user] coats [target] with spray paint!"), span_notice("You coat [target] with spray paint.")) return - if(isobj(target) && !(target.flags_1 & UNPAINTABLE_1)) var/color_is_dark = FALSE if(actually_paints) @@ -851,7 +884,26 @@ to_chat(user, span_warning("A color that dark on an object like this? Surely not...")) return FALSE - target.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY) + if(istype(target, /obj/item/pipe)) + if(GLOB.pipe_color_name.Find(paint_color)) + var/obj/item/pipe/target_pipe = target + target_pipe.pipe_color = paint_color + target.add_atom_colour(paint_color, FIXED_COLOUR_PRIORITY) + balloon_alert(user, "painted in [GLOB.pipe_color_name[paint_color]] color") + else + balloon_alert(user, "invalid pipe color!") + return FALSE + else if(istype(target, /obj/machinery/atmospherics)) + if(GLOB.pipe_color_name.Find(paint_color)) + var/obj/machinery/atmospherics/target_pipe = target + target_pipe.paint(paint_color) + balloon_alert(user, "painted in [GLOB.pipe_color_name[paint_color]] color") + else + balloon_alert(user, "invalid pipe color!") + return FALSE + else + target.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY) + if(isitem(target) && isliving(target.loc)) var/obj/item/target_item = target var/mob/living/holder = target.loc @@ -859,6 +911,7 @@ holder.update_held_items() else holder.update_clothing(target_item.slot_flags) + if(!(SEND_SIGNAL(target, COMSIG_OBJ_PAINTED, user, src, color_is_dark) & DONT_USE_SPRAYCAN_CHARGES)) use_charges(user, 2, requires_full = FALSE) reagents.trans_to(target, ., volume_multiplier, transferred_by = user, methods = VAPOR) @@ -890,7 +943,7 @@ part_image.overlays += image(icon = style_list_icons[skin_option], icon_state = "[limb.limb_id]_[limb.aux_zone]") skins += list("[skin_option]" = part_image) var/choice = show_radial_menu(user, src, skins, require_near = TRUE) - if(choice && (use_charges(user, 5, requires_full = FALSE) == 5)) + if(choice && (use_charges(user, 5, requires_full = FALSE))) playsound(user.loc, 'sound/effects/spray.ogg', 5, TRUE, 5) limb.change_appearance(style_list_icons[choice], greyscale = FALSE) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN @@ -1014,3 +1067,4 @@ #undef PAINT_LARGE_HORIZONTAL_ICON #undef INFINITE_CHARGES +#undef DRAW_TIME diff --git a/code/game/objects/items/debug_items.dm b/code/game/objects/items/debug_items.dm index e2febe30fcfd06..4f6239acbe8175 100644 --- a/code/game/objects/items/debug_items.dm +++ b/code/game/objects/items/debug_items.dm @@ -27,7 +27,7 @@ /obj/item/debug/omnitool name = "omnitool" desc = "The original hypertool, born before them all. Use it in hand to unleash its true power." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/weapons/club.dmi' icon_state = "hypertool" inhand_icon_state = "hypertool" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' @@ -74,12 +74,12 @@ return var/list/tool_list = list( "Crowbar" = image(icon = 'icons/obj/tools.dmi', icon_state = "crowbar"), - "Multitool" = image(icon = 'icons/obj/device.dmi', icon_state = "multitool"), + "Multitool" = image(icon = 'icons/obj/devices/tool.dmi', icon_state = "multitool"), "Screwdriver" = image(icon = 'icons/obj/tools.dmi', icon_state = "screwdriver_map"), "Wirecutters" = image(icon = 'icons/obj/tools.dmi', icon_state = "cutters_map"), "Wrench" = image(icon = 'icons/obj/tools.dmi', icon_state = "wrench"), "Welding Tool" = image(icon = 'icons/obj/tools.dmi', icon_state = "miniwelder"), - "Analyzer" = image(icon = 'icons/obj/device.dmi', icon_state = "analyzer"), + "Analyzer" = image(icon = 'icons/obj/devices/scanner.dmi', icon_state = "analyzer"), "Pickaxe" = image(icon = 'icons/obj/mining.dmi', icon_state = "minipick"), "Shovel" = image(icon = 'icons/obj/mining.dmi', icon_state = "shovel"), "Retractor" = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "retractor"), diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 8e4a3a41171a92..269e6ac43f16a3 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -295,7 +295,7 @@ /obj/item/defibrillator/compact/combat name = "combat defibrillator" - desc = "A belt-equipped blood-red defibrillator. Can revive through thick clothing, has an experimental self-recharging battery, and can be utilized in combat via applying the paddles in a disarming or aggressive manner." + desc = "A belt-equipped blood-red defibrillator. Can revive through thick clothing, has an experimental self-recharging battery, and can be utilized as a weapon via applying the paddles while in a combat stance." icon_state = "defibcombat" //needs defib inhand sprites inhand_icon_state = null worn_icon_state = "defibcombat" @@ -322,7 +322,7 @@ /obj/item/defibrillator/compact/combat/loaded/nanotrasen name = "elite Nanotrasen defibrillator" - desc = "A belt-equipped state-of-the-art defibrillator. Can revive through thick clothing, has an experimental self-recharging battery, and can be utilized in combat via applying the paddles in a disarming or aggressive manner." + desc = "A belt-equipped state-of-the-art defibrillator. Can revive through thick clothing, has an experimental self-recharging battery, and can be utilized as a weapon via applying the paddles while in a combat stance." icon_state = "defibnt" //needs defib inhand sprites inhand_icon_state = null worn_icon_state = "defibnt" @@ -489,7 +489,7 @@ return if(H.can_defib() == DEFIB_POSSIBLE) - H.notify_ghost_cloning("Your heart is being defibrillated!") + H.notify_revival("Your heart is being defibrillated!") H.grab_ghost() // Shove them back in their body. do_help(H, user) @@ -578,12 +578,12 @@ do_cancel() /obj/item/shockpaddles/proc/do_help(mob/living/carbon/H, mob/living/user) - var/target_synthetic = (H.mob_biotypes & MOB_ROBOTIC) // SKYRAT EDIT ADDITION BEGIN - SYNTH REVIVAL + var/target_synthetic = (H.mob_biotypes & MOB_ROBOTIC) // NOVA EDIT ADDITION BEGIN - SYNTH REVIVAL if (target_synthetic) to_chat(user, span_boldwarning("[H] is a synthetic lifeform! This defibrillator probably isn't calibrated to revive [H.p_them()] properly and could have some serious consequences! \ [span_warning("You might want to [span_blue("surgically revive [H.p_them()]")]...")]")) balloon_alert(user, "target is synthetic!") // immediately grabs their attention even if they dont see chat - // SKYRAT EDIT ADDITION END - SYNTH REVIVAL + // NOVA EDIT ADDITION END - SYNTH REVIVAL user.visible_message(span_warning("[user] begins to place [src] on [H]'s chest."), span_warning("You begin to place [src] on [H]'s chest...")) busy = TRUE update_appearance() @@ -630,10 +630,10 @@ fail_reason = "Patient's brain is missing. Further attempts futile." if (DEFIB_FAIL_BLACKLISTED) fail_reason = "Patient has been blacklisted from revival. Further attempts futile." - //SKYRAT EDIT ADDITION - DNR TRAIT + //NOVA EDIT ADDITION - DNR TRAIT if (DEFIB_FAIL_DNR) fail_reason = "Patient has been flagged as Do Not Resuscitate. Further attempts futile." - //SKYRAT EDIT ADDITION END - DNR TRAIT + //NOVA EDIT ADDITION END - DNR TRAIT if(fail_reason) user.visible_message(span_warning("[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - [fail_reason]")) @@ -663,14 +663,14 @@ H.revive() H.emote("gasp") H.set_jitter_if_lower(200 SECONDS) - to_chat(H, "[CONFIG_GET(string/blackoutpolicy)]") //SKYRAT EDIT ADDITION + to_chat(H, "[CONFIG_GET(string/blackoutpolicy)]") //NOVA EDIT ADDITION SEND_SIGNAL(H, COMSIG_LIVING_MINOR_SHOCK) if(HAS_MIND_TRAIT(user, TRAIT_MORBID)) user.add_mood_event("morbid_saved_life", /datum/mood_event/morbid_saved_life) else user.add_mood_event("saved_life", /datum/mood_event/saved_life) log_combat(user, H, "revived", defib) - // SKYRAT EDIT ADDITION BEGIN - SYNTH REVIVAL + // NOVA EDIT ADDITION BEGIN - SYNTH REVIVAL if (target_synthetic) user.visible_message(span_boldwarning("[src] fire a powerful jolt of electricity into [H]'s vulnerable circuitry!")) to_chat(H, span_userdanger("[user]'s defibrillator fires a powerful jolt of electricity into your vulnerable circuitry, overloading it!")) @@ -685,7 +685,7 @@ var/datum/brain_trauma/trauma = brain_organ.gain_trauma_type(SYNTH_DEFIBBED_TRAUMA_SEVERITY, TRAUMA_LIMIT_BASIC) if (!QDELETED(trauma)) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(remove_synth_defib_trauma), brain_organ, trauma), SYNTH_DEFIBBED_TRAUMA_DURATION) - // SKYRAT EDIT ADDITION END - SYNTH REVIVAL + // NOVA EDIT ADDITION END - SYNTH REVIVAL do_success() return diff --git a/code/game/objects/items/devices/aicard_evil.dm b/code/game/objects/items/devices/aicard_evil.dm index f91150bb086a6d..69e79a4471e67c 100644 --- a/code/game/objects/items/devices/aicard_evil.dm +++ b/code/game/objects/items/devices/aicard_evil.dm @@ -1,7 +1,7 @@ /// One use AI card which downloads a ghost as a syndicate AI to put in your MODsuit /obj/item/aicard/syndie name = "syndiCard" - desc = "A storage device for AIs. Nanotrasen forgot to make the patent, so the Syndicate made their own version!" + desc = "A storage device for AIs. Symphionia forgot to make the patent, so the Symphionia made their own version!" icon = 'icons/obj/aicards.dmi' icon_state = "syndicard" base_icon_state = "syndicard" @@ -55,7 +55,7 @@ var/datum/antagonist/nukeop/nuke_datum = new() nuke_datum.send_to_spawnpoint = FALSE new_ai.mind.add_antag_datum(nuke_datum, op_datum.nuke_team) - new_ai.mind.special_role = "Syndicate AI" + new_ai.mind.special_role = "Symphionia AI" new_ai.faction |= ROLE_SYNDICATE // Make it look evil!!! new_ai.hologram_appearance = mutable_appearance('icons/mob/silicon/ai.dmi',"xeno_queen") //good enough diff --git a/code/game/objects/items/devices/anomaly_neutralizer.dm b/code/game/objects/items/devices/anomaly_neutralizer.dm index 2a339f746450dd..32f0674690e338 100644 --- a/code/game/objects/items/devices/anomaly_neutralizer.dm +++ b/code/game/objects/items/devices/anomaly_neutralizer.dm @@ -1,8 +1,8 @@ /obj/item/anomaly_neutralizer name = "anomaly neutralizer" desc = "A one-use device capable of instantly neutralizing anomalous or otherworldly entities." - icon = 'icons/obj/device.dmi' - icon_state = "memorizer2" + icon = 'icons/obj/devices/tool.dmi' + icon_state = "neutralyzer" inhand_icon_state = "electronic" worn_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' diff --git a/code/game/objects/items/devices/anomaly_releaser.dm b/code/game/objects/items/devices/anomaly_releaser.dm index 4b658623d4c41b..a32220685ec396 100644 --- a/code/game/objects/items/devices/anomaly_releaser.dm +++ b/code/game/objects/items/devices/anomaly_releaser.dm @@ -2,7 +2,7 @@ /obj/item/anomaly_releaser name = "anomaly releaser" desc = "Single-use injector that releases and stabilizes anomalies by injecting an unknown substance." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/syndie_gadget.dmi' icon_state = "anomaly_releaser" inhand_icon_state = "stimpen" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' diff --git a/code/game/objects/items/devices/beacon.dm b/code/game/objects/items/devices/beacon.dm index e2936c0f538db9..ccd8bb413e31eb 100644 --- a/code/game/objects/items/devices/beacon.dm +++ b/code/game/objects/items/devices/beacon.dm @@ -1,7 +1,7 @@ /obj/item/beacon name = "\improper tracking beacon" desc = "A beacon used by a teleporter." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tracker.dmi' icon_state = "beacon" inhand_icon_state = "beacon" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' @@ -15,11 +15,19 @@ GLOB.teleportbeacons += src else icon_state = "beacon-off" + register_context() /obj/item/beacon/Destroy() GLOB.teleportbeacons -= src return ..() +/obj/item/beacon/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) + if(isnull(held_item)) + context[SCREENTIP_CONTEXT_RMB] = "Toggle beacon" + return CONTEXTUAL_SCREENTIP_SET + + return NONE + /obj/item/beacon/proc/turn_off() icon_state = "beacon-off" GLOB.teleportbeacons -= src @@ -35,6 +43,10 @@ to_chat(user, span_notice("You [enabled ? "enable" : "disable"] the beacon.")) return +/obj/item/beacon/attack_hand_secondary(mob/user, list/modifiers) + attack_self(user) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + /obj/item/beacon/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/pen)) // needed for things that use custom names like the locator var/new_name = tgui_input_text(user, "What would you like the name to be?", "Beacon", max_length = MAX_NAME_LEN) diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index ec8dfefc3322b6..e5507473faecde 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -1,9 +1,8 @@ /obj/item/chameleon - name = "clandestine device" //skyrat edit - desc = "A vaguely insidious device with a scanner and large projector." // SKYRAT EDIT - icon = 'icons/obj/device.dmi' + name = "chameleon projector" + icon = 'icons/obj/devices/syndie_gadget.dmi' icon_state = "shield0" - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = NOBLUDGEON slot_flags = ITEM_SLOT_BELT inhand_icon_state = "electronic" @@ -14,8 +13,6 @@ throw_speed = 3 throw_range = 5 w_class = WEIGHT_CLASS_SMALL - special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit - special_desc = "A hardlight projector used to seamlessly camouflage Syndicate infiltrators to appear as whatever the scanner touches." // Skyrat edit var/can_use = 1 var/obj/effect/dummy/chameleon/active_dummy = null var/saved_appearance = null @@ -61,6 +58,9 @@ if(iseffect(target)) if(!(istype(target, /obj/effect/decal))) //be a footprint return + make_copy(target, user) + +/obj/item/chameleon/proc/make_copy(atom/target, mob/user) playsound(get_turf(src), 'sound/weapons/flash.ogg', 100, TRUE, -6) to_chat(user, span_notice("Scanned [target].")) var/obj/temp = new /obj() @@ -140,9 +140,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/destabilizing_crystal.dm b/code/game/objects/items/devices/destabilizing_crystal.dm index 87e85adfdb0952..6c57cead0e2402 100644 --- a/code/game/objects/items/devices/destabilizing_crystal.dm +++ b/code/game/objects/items/devices/destabilizing_crystal.dm @@ -5,7 +5,7 @@ icon = 'icons/obj/machines/engine/supermatter.dmi' icon_state = "destabilizing_crystal" w_class = WEIGHT_CLASS_NORMAL - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = NO_PIXEL_RANDOM_DROP throwforce = 5 throw_speed = 1 diff --git a/code/game/objects/items/devices/desynchronizer.dm b/code/game/objects/items/devices/desynchronizer.dm index 15efd8fcfd4a70..e8ce6fe57a4650 100644 --- a/code/game/objects/items/devices/desynchronizer.dm +++ b/code/game/objects/items/devices/desynchronizer.dm @@ -1,7 +1,7 @@ -/obj/item/desynchronizer //SKYRAT EDIT - ICON OVERRIDDEN BY AESTHETICS - SEE MODULE +/obj/item/desynchronizer //NOVA EDIT - ICON OVERRIDDEN BY AESTHETICS - SEE MODULE name = "desynchronizer" desc = "An experimental device that can temporarily desynchronize the user from spacetime, effectively making them disappear while it's active." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/syndie_gadget.dmi' icon_state = "desynchronizer" inhand_icon_state = "electronic" w_class = WEIGHT_CLASS_SMALL diff --git a/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm b/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm index 827642b139a02c..de14a9e123fd60 100644 --- a/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm +++ b/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm @@ -2,7 +2,7 @@ /obj/item/electroadaptive_pseudocircuit name = "electroadaptive pseudocircuit" desc = "An all-in-one circuit imprinter, designer, synthesizer, outfitter, creator, and chef. It can be used in place of any generic circuit board during construction." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "boris" w_class = WEIGHT_CLASS_TINY custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 0.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 027595a38d8133..202835e831a8ed 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -15,7 +15,7 @@ lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' w_class = WEIGHT_CLASS_SMALL - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT custom_materials = list(/datum/material/iron= SMALL_MATERIAL_AMOUNT * 0.5, /datum/material/glass= SMALL_MATERIAL_AMOUNT * 0.2) actions_types = list(/datum/action/item_action/toggle_light) @@ -293,27 +293,35 @@ inhand_icon_state = "" worn_icon_state = "pen" w_class = WEIGHT_CLASS_TINY - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY light_range = 2 - var/holo_cooldown = 0 + COOLDOWN_DECLARE(holosign_cooldown) /obj/item/flashlight/pen/afterattack(atom/target, mob/user, proximity_flag) . = ..() - if(!proximity_flag) - if(holo_cooldown > world.time) - to_chat(user, span_warning("[src] is not ready yet!")) - return - var/T = get_turf(target) - if(locate(/mob/living) in T) - new /obj/effect/temp_visual/medical_holosign(T,user) //produce a holographic glow - holo_cooldown = world.time + 10 SECONDS - return + if(proximity_flag) + return + + if(!COOLDOWN_FINISHED(src, holosign_cooldown)) + balloon_alert(user, "not ready!") + return + + var/target_turf = get_turf(target) + var/mob/living/living_target = locate(/mob/living) in target_turf + + if(!living_target || (living_target == user)) + return + + to_chat(living_target, span_boldnotice("[user] is offering medical assistance; please halt your actions.")) + new /obj/effect/temp_visual/medical_holosign(target_turf, user) //produce a holographic glow + COOLDOWN_START(src, holosign_cooldown, 10 SECONDS) // see: [/datum/wound/burn/flesh/proc/uv()] /obj/item/flashlight/pen/paramedic name = "paramedic penlight" desc = "A high-powered UV penlight intended to help stave off infection in the field on serious burned patients. Probably really bad to look into." icon_state = "penlight_surgical" + light_color = LIGHT_COLOR_PURPLE /// Our current UV cooldown COOLDOWN_DECLARE(uv_cooldown) /// How long between UV fryings @@ -359,7 +367,7 @@ light_system = STATIC_LIGHT light_color = LIGHT_COLOR_FAINT_BLUE w_class = WEIGHT_CLASS_BULKY - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY custom_materials = null start_on = TRUE @@ -381,7 +389,7 @@ // FLARES /obj/item/flashlight/flare name = "flare" - desc = "A red Nanotrasen issued flare. There are instructions on the side, it reads 'pull cord, make light'." + desc = "A red Symphionia issued flare. There are instructions on the side, it reads 'pull cord, make light'." light_range = 7 // Pretty bright. icon_state = "flare" inhand_icon_state = "flare" @@ -521,7 +529,7 @@ randomize_fuel = FALSE trash_type = /obj/item/trash/candle can_be_extinguished = TRUE - var/scented_type //SKYRAT EDIT ADDITION /// Pollutant type for scented candles + var/scented_type //NOVA EDIT ADDITION /// Pollutant type for scented candles /// The current wax level, used for drawing the correct icon var/current_wax_level = 1 /// The previous wax level, remembered so we only have to make 3 update_appearance calls total as opposed to every tick @@ -682,8 +690,8 @@ light_system = MOVABLE_LIGHT /obj/item/flashlight/emp - special_desc_requirement = EXAMINE_CHECK_SYNDICATE // SKYRAT EDIT - special_desc = "This flashlight is equipped with a miniature EMP generator." //SKYRAT EDIT + special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT + special_desc = "This flashlight is equipped with a miniature EMP generator." //NOVA EDIT var/emp_max_charges = 4 var/emp_cur_charges = 4 var/charge_timer = 0 @@ -902,7 +910,7 @@ light_system = MOVABLE_LIGHT light_range = 15 light_power = 1 - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = DROPDEL actions_types = list() diff --git a/code/game/objects/items/devices/forcefieldprojector.dm b/code/game/objects/items/devices/forcefieldprojector.dm index 1d1d29f8c8ed8a..d102f06275638b 100644 --- a/code/game/objects/items/devices/forcefieldprojector.dm +++ b/code/game/objects/items/devices/forcefieldprojector.dm @@ -1,7 +1,7 @@ /obj/item/forcefield_projector name = "forcefield projector" desc = "An experimental device that can create several forcefields at a distance." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tool.dmi' icon_state = "signmaker_forcefield" slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_SMALL diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm index e506a320c76554..6e152c33661211 100644 --- a/code/game/objects/items/devices/geiger_counter.dm +++ b/code/game/objects/items/devices/geiger_counter.dm @@ -1,7 +1,7 @@ /obj/item/geiger_counter //DISCLAIMER: I know nothing about how real-life Geiger counters work. This will not be realistic. ~Xhuis name = "\improper Geiger counter" desc = "A handheld device used for detecting and measuring radiation pulses." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/scanner.dmi' icon_state = "geiger_off" inhand_icon_state = "multitool" worn_icon_state = "geiger_counter" diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm index 47c4a4dac7813a..a661c2877d3e66 100644 --- a/code/game/objects/items/devices/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -1,8 +1,8 @@ -/obj/item/gps //SKYRAT EDIT - ICON OVERRIDDEN BY AESTHETICS - SEE MODULE +/obj/item/gps //NOVA EDIT - ICON OVERRIDDEN BY AESTHETICS - SEE MODULE name = "global positioning system" desc = "Helping lost spacemen find their way through the planets since 2016." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tracker.dmi' icon_state = "gps-c" inhand_icon_state = "electronic" worn_icon_state = "electronic" diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index fae8d3950fd9a8..e3b1c2430c237e 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -1,11 +1,11 @@ /obj/item/laser_pointer name = "laser pointer" desc = "Don't shine it in your eyes!" - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/service/bureaucracy.dmi' icon_state = "pointer" inhand_icon_state = "pen" worn_icon_state = "pen" - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = NOBLUDGEON slot_flags = ITEM_SLOT_BELT custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5) @@ -71,15 +71,19 @@ diode = null return TRUE -/obj/item/laser_pointer/tool_act(mob/living/user, obj/item/tool, tool_type, is_right_clicking) +/obj/item/laser_pointer/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) . = ..() - if(isnull(crystal_lens) || !(tool.tool_behaviour == TOOL_WIRECUTTER || tool.tool_behaviour == TOOL_HEMOSTAT)) - return + if(. & ITEM_INTERACT_ANY_BLOCKER) + return . + if(isnull(crystal_lens)) + return . + if(tool_behaviour != TOOL_WIRECUTTER && tool_behaviour != TOOL_HEMOSTAT) + return . tool.play_tool_sound(src) balloon_alert(user, "removed crystal lens") crystal_lens.forceMove(drop_location()) crystal_lens = null - return TRUE + return ITEM_INTERACT_SUCCESS /obj/item/laser_pointer/attackby(obj/item/attack_item, mob/user, params) if(istype(attack_item, /obj/item/stock_parts/micro_laser)) @@ -258,32 +262,20 @@ //catpeople: make any felinid near the target to face the target, chance for felinids to pounce at the light, stepping to the target for(var/mob/living/carbon/human/target_felinid in view(1, targloc)) - if(!isfeline(target_felinid) || target_felinid.stat == DEAD || target_felinid.is_blind() || target_felinid.incapacitated()) // SKYRAT EDIT - FELINE TRAITS. Was: isfelinid(H) + if(!isfeline(target_felinid) || target_felinid.stat == DEAD || target_felinid.is_blind() || target_felinid.incapacitated()) // NOVA EDIT - FELINE TRAITS. Was: isfelinid(H) continue if(target_felinid.body_position == STANDING_UP) target_felinid.setDir(get_dir(target_felinid, targloc)) // kitty always looks at the light - if(prob(effectchance * diode.rating)) + //NOVA EDIT REMOVAL BEGIN (removes forced felinid movement from laserpointers, also fixes the longstanding windoor negation glitch) + /* if(prob(effectchance * diode.rating)) target_felinid.visible_message(span_warning("[target_felinid] makes a grab for the light!"), span_userdanger("LIGHT!")) target_felinid.Move(targloc) log_combat(user, target_felinid, "moved with a laser pointer", src) - else - target_felinid.visible_message(span_notice("[target_felinid] looks briefly distracted by the light."), span_warning("You're briefly tempted by the shiny light...")) + else + NOVA EDIT REMOVAL END */ + target_felinid.visible_message(span_notice("[target_felinid] looks briefly distracted by the light."), span_warning("You're briefly tempted by the shiny light...")) //NOVA EDIT CHANGE : indent this block if re-enabling above else target_felinid.visible_message(span_notice("[target_felinid] stares at the light."), span_warning("You stare at the light...")) - - //cats! - chance for any cat near the target to pounce at the light, stepping to the target - for(var/mob/living/simple_animal/pet/cat/target_kitty in view(1, targloc)) - if(target_kitty.stat == DEAD) - continue - if(prob(effectchance * diode.rating)) - if(target_kitty.resting) - target_kitty.set_resting(FALSE, instant = TRUE) - target_kitty.visible_message(span_notice("[target_kitty] pounces on the light!"), span_warning("LIGHT!")) - target_kitty.Move(targloc) - target_kitty.Immobilize(1 SECONDS) - else - target_kitty.visible_message(span_notice("[target_kitty] looks uninterested in your games."), span_warning("You spot [user] shining [src] at you. How insulting!")) - //The pointer is shining, change its sprite to show icon_state = "pointer_[pointer_icon_state]" @@ -300,9 +292,9 @@ laser.pixel_y = target.pixel_y + rand(-5,5) if(outmsg) - to_chat(user, outmsg) + user.visible_message(span_danger("[user] points [src] at [target]!"), outmsg) //NOVA EDIT CHANGE - ORIGINAL: to_chat(user, outmsg) else - to_chat(user, span_info("You point [src] at [target].")) + user.visible_message(span_notice("[user] points [src] at [target]."), span_notice("You point [src] at [target].")) //NOVA EDIT CHANGE - ORIGINAL: to_chat(user, span_info("You point [src] at [target].")) //we have successfully shone our pointer, reduce our battery depending on whether we have an extra lens or not energy -= crystal_lens ? 2 : 1 diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 1d07e2a95588a3..2a5569bd43057f 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -41,7 +41,7 @@ lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' w_class = WEIGHT_CLASS_SMALL - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT force = 8 diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index a2d325dfabd99a..7ae17c5343ad67 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -1,7 +1,7 @@ /obj/item/megaphone name = "megaphone" desc = "A device used to project your voice. Loudly." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/voice.dmi' icon_state = "megaphone" inhand_icon_state = "megaphone" lefthand_file = 'icons/mob/inhands/items/megaphone_lefthand.dmi' diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 08dee828011dcf..e6e6aff194b153 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -10,10 +10,10 @@ -/obj/item/multitool //SKYRAT EDIT - ICON OVERRIDDEN BY AESTHETICS - SEE MODULE +/obj/item/multitool //NOVA EDIT - ICON OVERRIDDEN BY AESTHETICS - SEE MODULE name = "multitool" desc = "Used for pulsing wires to test which to cut. Not recommended by doctors." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tool.dmi' icon_state = "multitool" inhand_icon_state = "multitool" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' @@ -64,11 +64,11 @@ SIGNAL_HANDLER buffer = null -// Syndicate device disguised as a multitool; it will turn red when an AI camera is nearby. +// Symphionia device disguised as a multitool; it will turn red when an AI camera is nearby. /obj/item/multitool/ai_detect - special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit - special_desc = "A special sensor embedded stealthily into this device can detect and warn of nearby silicon activity and camera vision range." // Skyrat edit + special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT + special_desc = "A special sensor embedded stealthily into this device can detect and warn of nearby silicon activity and camera vision range." // NOVA EDIT actions_types = list(/datum/action/item_action/toggle_multitool) var/detect_state = PROXIMITY_NONE var/rangealert = 8 //Glows red when inside diff --git a/code/game/objects/items/devices/pipe_painter.dm b/code/game/objects/items/devices/pipe_painter.dm index 63ae58a0ae3881..3a3b9055725a73 100644 --- a/code/game/objects/items/devices/pipe_painter.dm +++ b/code/game/objects/items/devices/pipe_painter.dm @@ -9,19 +9,24 @@ custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass = SHEET_MATERIAL_AMOUNT) -/obj/item/pipe_painter/afterattack(atom/A, mob/user, proximity_flag) +/obj/item/pipe_painter/afterattack(atom/target, mob/user, proximity_flag) . = ..() //Make sure we only paint adjacent items if(!proximity_flag) return - if(!istype(A, /obj/machinery/atmospherics/pipe)) - return - - var/obj/machinery/atmospherics/pipe/P = A - if(P.paint(GLOB.pipe_paint_colors[paint_color])) + if(istype(target, /obj/machinery/atmospherics)) + var/obj/machinery/atmospherics/target_pipe = target + target_pipe.paint(GLOB.pipe_paint_colors[paint_color]) + playsound(src, 'sound/machines/click.ogg', 50, TRUE) + balloon_alert(user, "painted in [paint_color] color") + else if(istype(target, /obj/item/pipe)) + var/obj/item/pipe/target_pipe = target + var/color = GLOB.pipe_paint_colors[paint_color] + target_pipe.pipe_color = color + target.add_atom_colour(color, FIXED_COLOUR_PRIORITY) playsound(src, 'sound/machines/click.ogg', 50, TRUE) - user.visible_message(span_notice("[user] paints \the [P] [paint_color]."),span_notice("You paint \the [P] [paint_color].")) + balloon_alert(user, "painted in [paint_color] color") /obj/item/pipe_painter/attack_self(mob/user) paint_color = tgui_input_list(user, "Which colour do you want to use?", "Pipe painter", GLOB.pipe_paint_colors) diff --git a/code/game/objects/items/devices/portable_chem_mixer.dm b/code/game/objects/items/devices/portable_chem_mixer.dm deleted file mode 100644 index 18458f75697adb..00000000000000 --- a/code/game/objects/items/devices/portable_chem_mixer.dm +++ /dev/null @@ -1,235 +0,0 @@ -/obj/item/storage/portable_chem_mixer - name = "Portable Chemical Mixer" - desc = "A portable device that dispenses and mixes chemicals. All necessary reagents need to be supplied with beakers. A label indicates that the 'CTRL'-button on the device may be used to open it for refills. This device can be worn as a belt. The letters 'S&T' are imprinted on the side." - icon = 'icons/obj/medical/chemical.dmi' - icon_state = "portablechemicalmixer_open" - worn_icon_state = "portable_chem_mixer" - w_class = WEIGHT_CLASS_HUGE - slot_flags = ITEM_SLOT_BELT - equip_sound = 'sound/items/equip/toolbelt_equip.ogg' - custom_price = PAYCHECK_CREW * 10 - custom_premium_price = PAYCHECK_CREW * 14 - - var/obj/item/reagent_containers/beaker = null ///Creating an empty slot for a beaker that can be added to dispense into - var/amount = 30 ///The amount of reagent that is to be dispensed currently - - var/list/dispensable_reagents = list() ///List in which all currently dispensable reagents go - - ///If the UI has the pH meter shown - var/show_ph = TRUE - -/obj/item/storage/portable_chem_mixer/Initialize(mapload) - . = ..() - atom_storage.max_total_storage = 200 - atom_storage.max_slots = 50 - atom_storage.set_holdable(list( - /obj/item/reagent_containers/cup/beaker, - /obj/item/reagent_containers/cup/bottle, - /obj/item/reagent_containers/cup/tube, - /obj/item/reagent_containers/cup/glass/waterbottle, - /obj/item/reagent_containers/condiment, - )) - -/obj/item/storage/portable_chem_mixer/Destroy() - QDEL_NULL(beaker) - return ..() - -/obj/item/storage/portable_chem_mixer/ex_act(severity, target) - if(severity > EXPLODE_LIGHT) - return ..() - - return FALSE - -/obj/item/storage/portable_chem_mixer/attackby(obj/item/I, mob/user, params) - if (is_reagent_container(I) && !(I.item_flags & ABSTRACT) && I.is_open_container() && atom_storage.locked) - var/obj/item/reagent_containers/B = I - . = TRUE //no afterattack - if(!user.transferItemToLoc(B, src)) - return - replace_beaker(user, B) - update_appearance() - ui_interact(user) - return - return ..() - -/** - * Updates the contents of the portable chemical mixer - * - * A list of dispensable reagents is created by iterating through each source beaker in the portable chemical beaker and reading its contents - */ -/obj/item/storage/portable_chem_mixer/proc/update_contents() - dispensable_reagents.Cut() - - for (var/obj/item/reagent_containers/B in contents) - var/key = B.reagents.get_master_reagent_id() - if (!(key in dispensable_reagents)) - dispensable_reagents[key] = list() - dispensable_reagents[key]["reagents"] = list() - dispensable_reagents[key]["reagents"] += B.reagents - - return - -/obj/item/storage/portable_chem_mixer/update_icon_state() - if(!atom_storage.locked) - icon_state = "portablechemicalmixer_open" - return ..() - if(beaker) - icon_state = "portablechemicalmixer_full" - return ..() - icon_state = "portablechemicalmixer_empty" - return ..() - - -/obj/item/storage/portable_chem_mixer/AltClick(mob/living/user) - if(!atom_storage.locked) - return ..() - if(!can_interact(user) || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) - return - replace_beaker(user) - update_appearance() - -/obj/item/storage/portable_chem_mixer/CtrlClick(mob/living/user) - if(atom_storage.locked) - atom_storage.locked = STORAGE_NOT_LOCKED - else - atom_storage.locked = STORAGE_FULLY_LOCKED - if (!atom_storage.locked) - update_contents() - if (atom_storage.locked) - atom_storage.hide_contents(usr) - replace_beaker(user) - update_appearance() - playsound(src, 'sound/items/screwdriver2.ogg', 50) - return - -/** - * Replaces the beaker of the portable chemical mixer with another beaker, or simply adds the new beaker if none is in currently - * - * Checks if a valid user and a valid new beaker exist and attempts to replace the current beaker in the portable chemical mixer with the one in hand. Simply places the new beaker in if no beaker is currently loaded - * Arguments: - * * mob/living/user - The user who is trying to exchange beakers - * * obj/item/reagent_containers/new_beaker - The new beaker that the user wants to put into the device - */ -/obj/item/storage/portable_chem_mixer/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker) - if(!user) - return FALSE - if(beaker) - user.put_in_hands(beaker) - beaker = null - if(new_beaker) - beaker = new_beaker - return TRUE - -/obj/item/storage/portable_chem_mixer/attack_hand(mob/user, list/modifiers) - if (loc != user) - return ..() - else - if (!atom_storage.locked) - return ..() - if(atom_storage?.locked) - ui_interact(user) - return - -/obj/item/storage/portable_chem_mixer/attack_self(mob/user) - if(loc == user) - if (atom_storage.locked) - ui_interact(user) - return - else - to_chat(user, span_notice("It looks like this device can be worn as a belt for increased accessibility. A label indicates that the 'CTRL'-button on the device may be used to close it after it has been filled with bottles and beakers of chemicals.")) - return - return - -/obj/item/storage/portable_chem_mixer/MouseDrop(obj/over_object) - . = ..() - if(ismob(loc)) - var/mob/M = loc - if(!M.incapacitated() && istype(over_object, /atom/movable/screen/inventory/hand)) - var/atom/movable/screen/inventory/hand/H = over_object - M.putItemFromInventoryInHandIfPossible(src, H.held_index) - -/obj/item/storage/portable_chem_mixer/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "PortableChemMixer", name) - - var/is_hallucinating = FALSE - if(isliving(user)) - var/mob/living/living_user = user - is_hallucinating = !!living_user.has_status_effect(/datum/status_effect/hallucination) - - if(is_hallucinating) - // to not ruin the immersion by constantly changing the fake chemicals - ui.set_autoupdate(FALSE) - - ui.open() - -/obj/item/storage/portable_chem_mixer/ui_data(mob/user) - var/list/data = list() - data["amount"] = amount - data["isBeakerLoaded"] = beaker ? 1 : 0 - data["beakerCurrentVolume"] = beaker ? beaker.reagents.total_volume : null - data["beakerMaxVolume"] = beaker ? beaker.volume : null - data["beakerTransferAmounts"] = beaker ? list(1,5,10,30,50,100) : null - data["showpH"] = show_ph - var/chemicals[0] - var/is_hallucinating = FALSE - if(isliving(user)) - var/mob/living/living_user = user - is_hallucinating = !!living_user.has_status_effect(/datum/status_effect/hallucination) - - for(var/re in dispensable_reagents) - var/value = dispensable_reagents[re] - var/datum/reagent/temp = GLOB.chemical_reagents_list[re] - if(temp) - var/chemname = temp.name - var/total_volume = 0 - var/total_ph = 0 - for (var/datum/reagents/rs in value["reagents"]) - total_volume += rs.total_volume - total_ph = rs.ph - if(is_hallucinating && prob(5)) - chemname = "[pick_list_replacements("hallucination.json", "chemicals")]" - chemicals.Add(list(list("title" = chemname, "id" = ckey(temp.name), "volume" = total_volume, "pH" = total_ph))) - data["chemicals"] = chemicals - var/beakerContents[0] - if(beaker) - for(var/datum/reagent/R in beaker.reagents.reagent_list) - beakerContents.Add(list(list("name" = R.name, "id" = ckey(R.name), "volume" = R.volume, "pH" = R.ph))) // list in a list because Byond merges the first list... - data["beakerCurrentpH"] = round(beaker.reagents.ph, 0.01) - data["beakerContents"] = beakerContents - - return data - -/obj/item/storage/portable_chem_mixer/ui_act(action, params) - . = ..() - if(.) - return - switch(action) - if("amount") - var/target = text2num(params["target"]) - amount = target - . = TRUE - if("dispense") - var/reagent_name = params["reagent"] - var/datum/reagent/reagent = GLOB.name2reagent[reagent_name] - var/entry = dispensable_reagents[reagent] - if(beaker && beaker.loc == src) - var/datum/reagents/R = beaker.reagents - var/actual = min(amount, 1000, R.maximum_volume - R.total_volume) - // todo: add check if we have enough reagent left - for (var/datum/reagents/source in entry["reagents"]) - var/to_transfer = min(source.total_volume, actual) - source.trans_to(beaker, to_transfer) - actual -= to_transfer - if (actual <= 0) - break - . = TRUE - if("remove") - var/amount = text2num(params["amount"]) - beaker.reagents.remove_all(amount) - . = TRUE - if("eject") - replace_beaker(usr) - update_appearance() - . = TRUE diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 6c0cd4017e327d..2a0a78c626acf8 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -11,13 +11,13 @@ /obj/item/powersink name = "power sink" desc = "A power sink which drains energy from electrical systems and converts it to heat. Ensure short workloads and ample time to cool down if used in high energy systems." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/syndie_gadget.dmi' icon_state = "powersink0" inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' w_class = WEIGHT_CLASS_BULKY - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = NO_PIXEL_RANDOM_DROP throwforce = 5 throw_speed = 1 @@ -124,7 +124,11 @@ span_hear("You hear a click.")) message_admins("Power sink activated by [ADMIN_LOOKUPFLW(user)] at [ADMIN_VERBOSEJMP(src)]") user.log_message("activated a powersink", LOG_GAME) - notify_ghosts("[user] has activated a power sink!", source = src, header = "Shocking News!") + notify_ghosts( + "[user] has activated a power sink!", + source = src, + header = "Shocking News!", + ) set_mode(OPERATING) if(OPERATING) @@ -188,7 +192,11 @@ if (!warning_given) warning_given = TRUE message_admins("Power sink at ([x],[y],[z] - JMP) has reached [ALERT]% of max heat. Explosion imminent.") - notify_ghosts("[src] is about to reach critical heat capacity!", source = src, header = "Power Sunk") + notify_ghosts( + "[src] is about to reach critical heat capacity!", + source = src, + header = "Power Sunk", + ) playsound(src, 'sound/effects/screech.ogg', 100, TRUE, TRUE) if(internal_heat >= max_heat) diff --git a/code/game/objects/items/devices/quantum_keycard.dm b/code/game/objects/items/devices/quantum_keycard.dm index 9462b812463ef0..c12c030c9284ae 100644 --- a/code/game/objects/items/devices/quantum_keycard.dm +++ b/code/game/objects/items/devices/quantum_keycard.dm @@ -1,7 +1,7 @@ /obj/item/quantum_keycard name = "quantum keycard" desc = "A keycard able to link to a quantum pad's particle signature, allowing other quantum pads to travel there instead of their linked pad." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tool.dmi' icon_state = "quantum_keycard_gags" greyscale_config = /datum/greyscale_config/quantum_keycard greyscale_colors = "#FFFFFF" diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index ce87739d114761..426e673437ef54 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -1,12 +1,12 @@ /obj/item/electropack name = "electropack" desc = "Dance my monkeys! DANCE!!!" - icon = 'icons/obj/radio.dmi' + icon = 'icons/obj/devices/tool.dmi' icon_state = "electropack0" inhand_icon_state = "electropack" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_HUGE custom_materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT *5, /datum/material/glass=SHEET_MATERIAL_AMOUNT * 1.25) @@ -40,7 +40,7 @@ /obj/item/electropack/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/clothing/head/helmet)) var/obj/item/assembly/shock_kit/A = new /obj/item/assembly/shock_kit(user) - A.icon = 'icons/obj/assemblies/assemblies.dmi' + A.icon = 'icons/obj/devices/assemblies.dmi' if(!user.transferItemToLoc(W, A)) to_chat(user, span_warning("[W] is stuck to your hand, you cannot attach it to [src]!")) diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index 0e124aafd01690..0582eddf916b37 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -1,12 +1,12 @@ /obj/item/encryptionkey name = "standard encryption key" desc = "An encryption key for a radio headset." - icon = 'icons/obj/radio.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "cypherkey_basic" w_class = WEIGHT_CLASS_TINY /// Can this radio key access the binary radio channel? var/translate_binary = FALSE - /// Decrypts Syndicate radio transmissions. + /// Decrypts Symphionia radio transmissions. var/syndie = FALSE /// If true, the radio can say/hear on the special CentCom channel. var/independent = FALSE diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 13a054ec8e4984..d0dbe5d6a06154 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -7,12 +7,12 @@ GLOBAL_LIST_INIT(channel_tokens, list( RADIO_CHANNEL_ENGINEERING = RADIO_TOKEN_ENGINEERING, RADIO_CHANNEL_SECURITY = RADIO_TOKEN_SECURITY, RADIO_CHANNEL_CENTCOM = RADIO_TOKEN_CENTCOM, - RADIO_CHANNEL_FACTION = RADIO_TOKEN_FACTION, //SKYRAT EDIT ADDITION - Faction - RADIO_CHANNEL_CYBERSUN = RADIO_TOKEN_CYBERSUN, //SKYRAT EDIT ADDITION - Mapping - RADIO_CHANNEL_INTERDYNE = RADIO_TOKEN_INTERDYNE, //SKYRAT EDIT ADDITION - Mapping - RADIO_CHANNEL_GUILD = RADIO_TOKEN_GUILD, //SKYRAT EDIT ADDITION - Mapping - RADIO_CHANNEL_TARKON = RADIO_TOKEN_TARKON, //SKYRAT EDIT ADDITION - MAPPING - RADIO_CHANNEL_SOLFED = RADIO_TOKEN_SOLFED, //SKYRAT EDIT ADDITION - SOLFED + RADIO_CHANNEL_FACTION = RADIO_TOKEN_FACTION, //NOVA EDIT ADDITION - Faction + RADIO_CHANNEL_CYBERSUN = RADIO_TOKEN_CYBERSUN, //NOVA EDIT ADDITION - Mapping + RADIO_CHANNEL_INTERDYNE = RADIO_TOKEN_INTERDYNE, //NOVA EDIT ADDITION - Mapping + RADIO_CHANNEL_GUILD = RADIO_TOKEN_GUILD, //NOVA EDIT ADDITION - Mapping + RADIO_CHANNEL_TARKON = RADIO_TOKEN_TARKON, //NOVA EDIT ADDITION - MAPPING + RADIO_CHANNEL_SOLFED = RADIO_TOKEN_SOLFED, //NOVA EDIT ADDITION - SOLFED RADIO_CHANNEL_SYNDICATE = RADIO_TOKEN_SYNDICATE, RADIO_CHANNEL_SUPPLY = RADIO_TOKEN_SUPPLY, RADIO_CHANNEL_SERVICE = RADIO_TOKEN_SERVICE, @@ -23,6 +23,7 @@ GLOBAL_LIST_INIT(channel_tokens, list( /obj/item/radio/headset name = "radio headset" desc = "An updated, modular intercom that fits over the head. Takes encryption keys." + icon = 'icons/obj/clothing/headsets.dmi' icon_state = "headset" inhand_icon_state = "headset" lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' @@ -313,7 +314,7 @@ GLOBAL_LIST_INIT(channel_tokens, list( /obj/item/radio/headset/headset_cent name = "\improper CentCom headset" - desc = "A headset used by the upper echelons of Nanotrasen." + desc = "A headset used by the upper echelons of Symphionia." icon_state = "cent_headset" worn_icon_state = "cent_headset" keyslot = /obj/item/encryptionkey/headset_cent @@ -357,7 +358,6 @@ GLOBAL_LIST_INIT(channel_tokens, list( make_syndie() /obj/item/radio/headset/screwdriver_act(mob/living/user, obj/item/tool) - user.set_machine(src) if(keyslot || keyslot2) for(var/ch_name in channels) SSradio.remove_object(src, GLOB.radiochannels[ch_name]) @@ -379,8 +379,6 @@ GLOBAL_LIST_INIT(channel_tokens, list( return TRUE /obj/item/radio/headset/attackby(obj/item/W, mob/user, params) - user.set_machine(src) - if(istype(W, /obj/item/encryptionkey)) if(keyslot && keyslot2) to_chat(user, span_warning("The headset can't hold another key!")) diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 3fa205fc48999e..2308a5664138ca 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -168,7 +168,7 @@ /** * Proc called whenever the intercom's area loses or gains power. Responsible for setting the `on` variable and calling `update_icon()`. * - * Normally called after the intercom's area recieves the `COMSIG_AREA_POWER_CHANGE` signal, but it can also be called directly. + * Normally called after the intercom's area receives the `COMSIG_AREA_POWER_CHANGE` signal, but it can also be called directly. * Arguments: * * source - the area that just had a power change. */ diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index c680056667b52d..d3b0d0d076fcee 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -1,17 +1,17 @@ #define FREQ_LISTENING (1<<0) /obj/item/radio - icon = 'icons/obj/radio.dmi' + icon = 'icons/obj/devices/voice.dmi' name = "station bounced radio" icon_state = "walkietalkie" - inhand_icon_state = "radio" + inhand_icon_state = "walkietalkie" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' worn_icon_state = "radio" desc = "A basic handheld radio that communicates with local telecommunication networks." dog_fashion = /datum/dog_fashion/back - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT throw_speed = 3 throw_range = 7 @@ -66,7 +66,7 @@ var/translate_binary = FALSE /// If true, can say/hear on the special CentCom channel. var/independent = FALSE - /// If true, hears all well-known channels automatically, and can say/hear on the Syndicate channel. Also protects from radio jammers. + /// If true, hears all well-known channels automatically, and can say/hear on the Symphionia channel. Also protects from radio jammers. var/syndie = FALSE /// associative list of the encrypted radio channels this radio is currently set to listen/broadcast to, of the form: list(channel name = TRUE or FALSE) var/list/channels @@ -168,7 +168,7 @@ add_radio(src, frequency) -/obj/item/radio/proc/make_syndie() // Turns normal radios into Syndicate radios! +/obj/item/radio/proc/make_syndie() // Turns normal radios into Symphionia radios! qdel(keyslot) keyslot = new /obj/item/encryptionkey/syndicate() syndie = TRUE @@ -293,7 +293,7 @@ if that fails, they send a mundane radio transmission. Headsets cannot send/receive mundane transmissions, only subspace. - Syndicate radios can hear transmissions on all well-known frequencies. + Symphionia radios can hear transmissions on all well-known frequencies. CentCom radios can hear the CentCom frequency no matter what. */ @@ -320,7 +320,7 @@ var/datum/signal/subspace/vocal/signal = new(src, freq, speaker, language, message, spans, message_mods) // Independent radios, on the CentCom frequency, reach all independent radios - if (independent && (freq == FREQ_CENTCOM || freq == FREQ_CTF_RED || freq == FREQ_CTF_BLUE || freq == FREQ_CTF_GREEN || freq == FREQ_CTF_YELLOW || freq == FREQ_FACTION || freq == FREQ_CYBERSUN || freq == FREQ_INTERDYNE || freq == FREQ_GUILD || freq == FREQ_TARKON || freq == FREQ_SOLFED)) //SKYRAT EDIT CHANGE - FACTION, MAPPING, SOLFED + if (independent && (freq == FREQ_CENTCOM || freq == FREQ_CTF_RED || freq == FREQ_CTF_BLUE || freq == FREQ_CTF_GREEN || freq == FREQ_CTF_YELLOW || freq == FREQ_FACTION || freq == FREQ_CYBERSUN || freq == FREQ_INTERDYNE || freq == FREQ_GUILD || freq == FREQ_TARKON || freq == FREQ_SOLFED)) //NOVA EDIT CHANGE - FACTION, MAPPING, SOLFED signal.data["compression"] = 0 signal.transmission_method = TRANSMISSION_SUPERSPACE signal.levels = list(0) @@ -388,7 +388,8 @@ return TRUE return FALSE -/obj/item/radio/proc/on_recieve_message() +/obj/item/radio/proc/on_receive_message(list/data) + SEND_SIGNAL(src, COMSIG_RADIO_RECEIVE_MESSAGE, data) flick_overlay_view(overlay_speaker_active, 5 SECONDS) /obj/item/radio/ui_state(mob/user) @@ -531,7 +532,7 @@ subspace_transmission = TRUE subspace_switchable = TRUE dog_fashion = null - canhear_range = 0 // Skyrat Edit - Stops borgs being a loudspeaker and contains it to the tile they're on + canhear_range = 0 /obj/item/radio/borg/resetChannels() . = ..() diff --git a/code/game/objects/items/devices/reverse_bear_trap.dm b/code/game/objects/items/devices/reverse_bear_trap.dm index b5cbb985570707..e88b1a51187a3f 100644 --- a/code/game/objects/items/devices/reverse_bear_trap.dm +++ b/code/game/objects/items/devices/reverse_bear_trap.dm @@ -3,11 +3,11 @@ /obj/item/reverse_bear_trap name = "reverse bear trap" desc = "A horrifying set of shut metal jaws, rigged to a kitchen timer and secured by padlock to a head-mounted clamp. To apply, hit someone with it." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/syndie_gadget.dmi' worn_icon = 'icons/mob/clothing/head/utility.dmi' icon_state = "reverse_bear_trap" slot_flags = ITEM_SLOT_HEAD - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY resistance_flags = FIRE_PROOF | UNACIDABLE w_class = WEIGHT_CLASS_NORMAL max_integrity = 300 @@ -107,7 +107,14 @@ user.dropItemToGround(src) target.equip_to_slot_if_possible(src, ITEM_SLOT_HEAD) arm() - notify_ghosts("[user] put a reverse bear trap on [target]!", source = src, action = NOTIFY_ORBIT, flashwindow = FALSE, ghost_sound = 'sound/machines/beep.ogg', notify_volume = 75, header = "Reverse bear trap armed") + notify_ghosts( + "[user] put a reverse bear trap on [target]!", + source = src, + header = "Reverse bear trap armed", + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ghost_sound = 'sound/machines/beep.ogg', + notify_volume = 75, + ) /obj/item/reverse_bear_trap/proc/snap() reset() diff --git a/code/game/objects/items/devices/scanners/autopsy_scanner.dm b/code/game/objects/items/devices/scanners/autopsy_scanner.dm index 2f938c92e45295..16f90489b20e39 100644 --- a/code/game/objects/items/devices/scanners/autopsy_scanner.dm +++ b/code/game/objects/items/devices/scanners/autopsy_scanner.dm @@ -1,25 +1,31 @@ /obj/item/autopsy_scanner name = "autopsy scanner" desc = "Used in surgery to extract information from a cadaver. Can also scan the health of cadavers like an advanced health analyzer!" - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/scanner.dmi' icon_state = "autopsy_scanner" inhand_icon_state = "autopsy_scanner" worn_icon_state = "autopsy_scanner" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_NORMAL custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*2) custom_price = PAYCHECK_COMMAND -/obj/item/autopsy_scanner/attack(mob/living/M, mob/living/carbon/human/user) +/obj/item/autopsy_scanner/interact_with_atom(atom/interacting_with, mob/living/user) + if(!isliving(interacting_with)) + return NONE if(!user.can_read(src) || user.is_blind()) - return + return ITEM_INTERACT_BLOCKING + + var/mob/living/M = interacting_with if(M.stat != DEAD && !HAS_TRAIT(M, TRAIT_FAKEDEATH)) // good job, you found a loophole to_chat(user, span_deadsay("[icon2html(src, user)] ERROR! CANNOT SCAN LIVE CADAVERS. PROCURE HEALTH ANALYZER OR TERMINATE PATIENT.")) - return + return ITEM_INTERACT_BLOCKING + + . = ITEM_INTERACT_SUCCESS // Clumsiness/brain damage check if ((HAS_TRAIT(user, TRAIT_CLUMSY) || HAS_TRAIT(user, TRAIT_DUMB)) && prob(50)) @@ -50,7 +56,6 @@ autopsy_information += "Toxin damage: [CEILING(scanned.getToxLoss(), 1)]" autopsy_information += "Oxygen damage: [CEILING(scanned.getOxyLoss(), 1)]" - autopsy_information += "Cloning damage: [CEILING(scanned.getCloneLoss(), 1)]" autopsy_information += "
Bodypart Data

" for(var/obj/item/bodypart/bodyparts as anything in scanned.bodyparts) diff --git a/code/game/objects/items/devices/scanners/gas_analyzer.dm b/code/game/objects/items/devices/scanners/gas_analyzer.dm index 36819d8502a057..76958126f27993 100644 --- a/code/game/objects/items/devices/scanners/gas_analyzer.dm +++ b/code/game/objects/items/devices/scanners/gas_analyzer.dm @@ -2,13 +2,13 @@ desc = "A hand-held environmental scanner which reports current gas levels." name = "gas analyzer" custom_price = PAYCHECK_LOWER * 0.9 - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/scanner.dmi' icon_state = "analyzer" 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 + obj_flags = CONDUCTS_ELECTRICITY item_flags = NOBLUDGEON slot_flags = ITEM_SLOT_BELT throwforce = 0 @@ -21,6 +21,7 @@ var/cooldown_time = 250 var/barometer_accuracy // 0 is the best accuracy. var/list/last_gasmix_data + var/ranged_scan_distance = 1 /obj/item/analyzer/Initialize(mapload) . = ..() @@ -131,17 +132,24 @@ return list("gasmixes" = last_gasmix_data) /obj/item/analyzer/attack_self(mob/user, modifiers) - if(user.stat != CONSCIOUS || !user.can_read(src)) //SKYRAT EDIT: Blind People Can Analyze Again + if(user.stat != CONSCIOUS || !user.can_read(src)) //NOVA EDIT: Blind People Can Analyze Again return atmos_scan(user=user, target=get_turf(src), silent=FALSE) on_analyze(source=src, target=get_turf(src)) /obj/item/analyzer/attack_self_secondary(mob/user, modifiers) - if(user.stat != CONSCIOUS || !user.can_read(src)) //SKYRAT EDIT: Blind People Can Analyze Again + if(user.stat != CONSCIOUS || !user.can_read(src)) //NOVA EDIT: Blind People Can Analyze Again return ui_interact(user) +/obj/item/analyzer/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + . = ..() + if(!can_see(user, target, ranged_scan_distance)) + return + . |= AFTERATTACK_PROCESSED_ITEM + atmos_scan(user, (target.return_analyzable_air() ? target : get_turf(target))) + /// Called when our analyzer is used on something /obj/item/analyzer/proc/on_analyze(datum/source, atom/target) SIGNAL_HANDLER @@ -217,10 +225,4 @@ w_class = WEIGHT_CLASS_NORMAL custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 0.2, /datum/material/gold = SMALL_MATERIAL_AMOUNT*3, /datum/material/bluespace=SMALL_MATERIAL_AMOUNT*2) grind_results = list(/datum/reagent/mercury = 5, /datum/reagent/iron = 5, /datum/reagent/silicon = 5) - -/obj/item/analyzer/ranged/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(!can_see(user, target, 15)) - return - . |= AFTERATTACK_PROCESSED_ITEM - atmos_scan(user, (target.return_analyzable_air() ? target : get_turf(target))) + ranged_scan_distance = 15 diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 50c42c5f75318a..207a8b96533cab 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -9,14 +9,14 @@ /obj/item/healthanalyzer name = "health analyzer" - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/scanner.dmi' icon_state = "health" inhand_icon_state = "healthanalyzer" worn_icon_state = "healthanalyzer" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' desc = "A hand-held body scanner capable of distinguishing vital signs of the subject. Has a side button to scan for chemicals, and can be toggled to scan wounds." - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = NOBLUDGEON slot_flags = ITEM_SLOT_BELT throwforce = 3 @@ -44,7 +44,7 @@ return BRUTELOSS /obj/item/healthanalyzer/attack_self(mob/user) - if(!user.can_read(src)) //SKYRAT EDIT: Blind People Can Analyze Again + if(!user.can_read(src)) //NOVA EDIT: Blind People Can Analyze Again return scanmode = (scanmode + 1) % SCANMODE_COUNT @@ -54,9 +54,15 @@ if(SCANMODE_WOUND) to_chat(user, span_notice("You switch the health analyzer to report extra info on wounds.")) -/obj/item/healthanalyzer/attack(mob/living/M, mob/living/carbon/human/user) - if(!user.can_read(src)) //SKYRAT EDIT: Blind People Can Analyze Again - return +/obj/item/healthanalyzer/interact_with_atom(atom/interacting_with, mob/living/user) + if(!isliving(interacting_with)) + return NONE + if(!user.can_read(src)) //NOVA EDIT CHANGE - Blind People Can Analyze Again- ORIGINAL: if(!user.can_read(src) || user.is_blind()) + return ITEM_INTERACT_BLOCKING + + var/mob/living/M = interacting_with + + . = ITEM_INTERACT_SUCCESS flick("[icon_state]-scan", src) //makes it so that it plays the scan animation upon scanning, including clumsy scanning @@ -86,13 +92,14 @@ add_fingerprint(user) -/obj/item/healthanalyzer/attack_secondary(mob/living/victim, mob/living/user, params) - //if(!user.can_read(src) || user.is_blind()) - ORIGINAL - if(!user.can_read(src)) // SKYRAT EDIT CHANGE - Blind people can analyse again - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN +/obj/item/healthanalyzer/interact_with_atom_secondary(atom/interacting_with, mob/living/user) + if(!isliving(interacting_with)) + return NONE + if(!user.can_read(src)) // NOVA EDIT CHANGE - Blind people can analyze again - ORIGINAL: if(!user.can_read(src) || user.is_blind()) + return ITEM_INTERACT_BLOCKING - chemscan(user, victim) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + chemscan(user, interacting_with) + return ITEM_INTERACT_SUCCESS /obj/item/healthanalyzer/add_item_context( obj/item/source, @@ -170,23 +177,19 @@ render_list += "Fatigue level: [target.getStaminaLoss()]%.\n" else render_list += "Subject appears to be suffering from fatigue.\n" - if (target.getCloneLoss()) - if(advanced) - render_list += "Cellular damage level: [target.getCloneLoss()].\n" - else - render_list += "Subject appears to have [target.getCloneLoss() > 30 ? "severe" : "minor"] cellular damage.\n" if (!target.get_organ_slot(ORGAN_SLOT_BRAIN)) // kept exclusively for soul purposes render_list += "Subject lacks a brain.\n" + var/death_consequences_status_text // NOVA EDIT ADDITION: Death consequences quirk if(iscarbon(target)) var/mob/living/carbon/carbontarget = target if(LAZYLEN(carbontarget.get_traumas())) var/list/trauma_text = list() for(var/datum/brain_trauma/trauma in carbontarget.get_traumas()) - //SKYRAT EDIT: Scary Traits (Bimbo) + //NOVA EDIT: Scary Traits (Bimbo) if(!trauma.display_scanner) continue - //SKYRAT EDIT: Scary Traits (Bimbo) + //NOVA EDIT: Scary Traits (Bimbo) var/trauma_desc = "" switch(trauma.resilience) if(TRAUMA_RESILIENCE_SURGERY) @@ -199,6 +202,11 @@ trauma_desc += "permanent " trauma_desc += trauma.scan_desc trauma_text += trauma_desc + // NOVA EDIT ADDITION START: Death Consequences Quirk + if (istype(trauma, /datum/brain_trauma/severe/death_consequences)) + var/datum/brain_trauma/severe/death_consequences/consequences_trauma = trauma + death_consequences_status_text = consequences_trauma.get_health_analyzer_link_text(user) + // NOVA EDIT ADDITION END: Death Consequences Quirk render_list += "Cerebral traumas detected: subject appears to be suffering from [english_list(trauma_text)].\n" if(carbontarget.quirks.len) render_list += "Subject Major Disabilities: [carbontarget.get_quirk_string(FALSE, CAT_QUIRK_MAJOR_DISABILITY, from_scan = TRUE)].\n" @@ -319,19 +327,9 @@ if(advanced && humantarget.has_dna()) render_list += "Genetic Stability: [humantarget.dna.stability]%.\n" - // Species and body temperature + // Hulk and body temperature var/datum/species/targetspecies = humantarget.dna.species - var/mutant = humantarget.dna.check_mutation(/datum/mutation/human/hulk) \ - || targetspecies.mutantlungs != initial(targetspecies.mutantlungs) \ - || targetspecies.mutantbrain != initial(targetspecies.mutantbrain) \ - || targetspecies.mutantheart != initial(targetspecies.mutantheart) \ - || targetspecies.mutanteyes != initial(targetspecies.mutanteyes) \ - || targetspecies.mutantears != initial(targetspecies.mutantears) \ - || targetspecies.mutanttongue != initial(targetspecies.mutanttongue) \ - || targetspecies.mutantliver != initial(targetspecies.mutantliver) \ - || targetspecies.mutantstomach != initial(targetspecies.mutantstomach) \ - || targetspecies.mutantappendix != initial(targetspecies.mutantappendix) \ - || istype(humantarget.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS), /obj/item/organ/external/wings/functional) + var/mutant = humantarget.dna.check_mutation(/datum/mutation/human/hulk) render_list += "Species: [targetspecies.name][mutant ? "-derived mutant" : ""]\n" var/core_temperature_message = "Core temperature: [round(humantarget.coretemperature-T0C, 0.1)] °C ([round(humantarget.coretemperature*1.8-459.67,0.1)] °F)" @@ -406,10 +404,15 @@ render_list += "[cyberimp_detect]\n" // we handled the last
so we don't need handholding - // SKYRAT EDIT ADDITION - Mutant stuff + // NOVA EDIT ADDITION - Mutant stuff if(target.GetComponent(/datum/component/mutant_infection)) render_list += span_userdanger("UNKNOWN PROTO-VIRAL INFECTION DETECTED. ISOLATE IMMEDIATELY.") - // SKYRAT EDIT END + // NOVA EDIT END + + // NOVA EDIT ADDITION - DEATH CONSEQUENCES QUIRK + if(death_consequences_status_text) + render_list += death_consequences_status_text + // NOVA EDIT END if(tochat) to_chat(user, examine_block(jointext(render_list, "")), trailing_newline = FALSE, type = MESSAGE_TYPE_INFO) @@ -546,21 +549,24 @@ icon_state = "first_aid" desc = "A helpful, child-proofed, and most importantly, extremely cheap MeLo-Tech medical scanner used to diagnose injuries and recommend treatment for serious wounds. While it might not sound very informative for it to be able to tell you if you have a gaping hole in your body or not, it applies a temporary holoimage near the wound with information that is guaranteed to double the efficacy and speed of treatment." mode = SCANNER_NO_MODE - // Cooldown for when the analyzer will allow you to ask it for encouragement. Don't get greedy! + give_wound_treatment_bonus = TRUE + + /// Cooldown for when the analyzer will allow you to ask it for encouragement. Don't get greedy! var/next_encouragement - // The analyzer's current emotion. Affects the sprite overlays and if it's going to prick you for being greedy or not. + /// The analyzer's current emotion. Affects the sprite overlays and if it's going to prick you for being greedy or not. var/emotion = AID_EMOTION_NEUTRAL - // Encouragements to play when attack_selfing + /// Encouragements to play when attack_selfing var/list/encouragements = list("briefly displays a happy face, gazing emptily at you", "briefly displays a spinning cartoon heart", "displays an encouraging message about eating healthy and exercising", \ "reminds you that everyone is doing their best", "displays a message wishing you well", "displays a sincere thank-you for your interest in first-aid", "formally absolves you of all your sins") - // How often one can ask for encouragement + /// How often one can ask for encouragement var/patience = 10 SECONDS - give_wound_treatment_bonus = TRUE + /// What do we scan for, only used in descriptions + var/scan_for_what = "serious injuries" /obj/item/healthanalyzer/simple/attack_self(mob/user) if(next_encouragement < world.time) playsound(src, 'sound/machines/ping.ogg', 50, FALSE) - to_chat(user, span_notice("\The [src] makes a happy ping and [pick(encouragements)]!")) + to_chat(user, span_notice("[src] makes a happy ping and [pick(encouragements)]!")) next_encouragement = world.time + 10 SECONDS show_emotion(AID_EMOTION_HAPPY) else if(emotion != AID_EMOTION_ANGRY) @@ -569,35 +575,47 @@ violence(user) /obj/item/healthanalyzer/simple/proc/greed_warning(mob/user) - to_chat(user, span_warning("\The [src] displays an eerily high-definition frowny face, chastizing you for asking it for too much encouragement.")) + to_chat(user, span_warning("[src] displays an eerily high-definition frowny face, chastizing you for asking it for too much encouragement.")) show_emotion(AID_EMOTION_ANGRY) /obj/item/healthanalyzer/simple/proc/violence(mob/user) playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) if(isliving(user)) var/mob/living/L = user - to_chat(L, span_warning("\The [src] makes a disappointed buzz and pricks your finger for being greedy. Ow!")) + to_chat(L, span_warning("[src] makes a disappointed buzz and pricks your finger for being greedy. Ow!")) flick(icon_state + "_pinprick", src) - L.adjustBruteLoss(4) - L.dropItemToGround(src) + violence_damage(user) + user.dropItemToGround(src) show_emotion(AID_EMOTION_HAPPY) +/obj/item/healthanalyzer/simple/proc/violence_damage(mob/living/user) + user.adjustBruteLoss(4) -/obj/item/healthanalyzer/simple/attack(mob/living/carbon/patient, mob/living/carbon/human/user) - if(!user.can_read(src)) //SKYRAT EDIT: Blind People Can Analyze Again - return +/obj/item/healthanalyzer/simple/interact_with_atom(atom/interacting_with, mob/living/user) + if(!isliving(interacting_with)) + return NONE + if(!user.can_read(src)) //NOVA EDIT CHANGE - Blind People Can Analyze Again - ORIGINAL: if(!user.can_read(src) || user.is_blind()) + return ITEM_INTERACT_BLOCKING add_fingerprint(user) - user.visible_message(span_notice("[user] scans [patient] for serious injuries."), span_notice("You scan [patient] for serious injuries.")) + user.visible_message( + span_notice("[user] scans [interacting_with] for [scan_for_what]."), + span_notice("You scan [interacting_with] for [scan_for_what]."), + ) - if(!istype(patient)) + if(!iscarbon(interacting_with)) playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) - to_chat(user, span_notice("\The [src] makes a sad buzz and briefly displays an unhappy face, indicating it can't scan [patient].")) + to_chat(user, span_notice("[src] makes a sad buzz and briefly displays an unhappy face, indicating it can't scan [interacting_with].")) show_emotion(AI_EMOTION_SAD) - return + return ITEM_INTERACT_BLOCKING - woundscan(user, patient, src, simple_scan = TRUE) + do_the_scan(interacting_with, user) flick(icon_state + "_pinprick", src) + update_appearance(UPDATE_OVERLAYS) + return ITEM_INTERACT_SUCCESS + +/obj/item/healthanalyzer/simple/proc/do_the_scan(mob/living/carbon/scanning, mob/living/user) + woundscan(user, scanning, src, simple_scan = TRUE) /obj/item/healthanalyzer/simple/update_overlays() . = ..() @@ -636,39 +654,14 @@ encouragements = list("encourages you to take your medication", "briefly displays a spinning cartoon heart", "reasures you about your condition", \ "reminds you that everyone is doing their best", "displays a message wishing you well", "displays a message saying how proud it is that you're taking care of yourself", "formally absolves you of all your sins") patience = 20 SECONDS + scan_for_what = "diseases" -/obj/item/healthanalyzer/simple/disease/greed_warning(mob/user) - to_chat(user, span_warning("\The [src] displays an eerily high-definition frowny face, chastizing you for asking it for too much encouragement.")) - show_emotion(AID_EMOTION_ANGRY) - -/obj/item/healthanalyzer/simple/disease/violence(mob/user) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) - if(isliving(user)) - var/mob/living/L = user - to_chat(L, span_warning("\The [src] makes a disappointed buzz and pricks your finger for being greedy. Ow!")) - flick(icon_state + "_pinprick", src) - L.adjustBruteLoss(1) - L.reagents.add_reagent(/datum/reagent/toxin, rand(1, 3)) - L.dropItemToGround(src) - show_emotion(AID_EMOTION_ANGRY) - -/obj/item/healthanalyzer/simple/disease/attack(mob/living/carbon/patient, mob/living/carbon/human/user) - if(!user.can_read(src) || user.is_blind()) - return +/obj/item/healthanalyzer/simple/disease/violence_damage(mob/living/user) + user.adjustBruteLoss(1) + user.reagents.add_reagent(/datum/reagent/toxin, rand(1, 3)) - add_fingerprint(user) - user.visible_message(span_notice("[user] scans [patient] for diseases."), span_notice("You scan [patient] for diseases.")) - - if(!istype(user)) - playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) - to_chat(user, span_notice("\The [src] makes a sad buzz and briefly displays a frowny face, indicating it can't scan [patient].")) - emotion = AID_EMOTION_SAD - update_appearance(UPDATE_OVERLAYS) - return - - diseasescan(user, patient, src) // this updates emotion - update_appearance(UPDATE_OVERLAYS) - flick(icon_state + "_pinprick", src) +/obj/item/healthanalyzer/simple/disease/do_the_scan(mob/living/carbon/scanning, mob/living/user) + diseasescan(user, scanning, src) /obj/item/healthanalyzer/simple/disease/update_overlays() . = ..() @@ -684,7 +677,7 @@ if(emotion != AID_EMOTION_NEUTRAL) addtimer(CALLBACK(src, PROC_REF(reset_emotions)), 4 SECONDS) // longer on purpose -//Checks the individual for any diseases that are visible to the scanner, and displays the diseases in the attacked to the attacker. +/// Checks the individual for any diseases that are visible to the scanner, and displays the diseases in the attacked to the attacker. /proc/diseasescan(mob/user, mob/living/carbon/patient, obj/item/healthanalyzer/simple/scanner) if(!istype(patient) || user.incapacitated()) return diff --git a/code/game/objects/items/devices/scanners/scanner_wand.dm b/code/game/objects/items/devices/scanners/scanner_wand.dm index e086751045c828..18dfc8200398b1 100644 --- a/code/game/objects/items/devices/scanners/scanner_wand.dm +++ b/code/game/objects/items/devices/scanners/scanner_wand.dm @@ -1,6 +1,6 @@ /obj/item/scanner_wand name = "kiosk scanner wand" - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/scanner.dmi' icon_state = "scanner_wand" inhand_icon_state = "healthanalyzer" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' diff --git a/code/game/objects/items/devices/scanners/sequence_scanner.dm b/code/game/objects/items/devices/scanners/sequence_scanner.dm index ee2742c55d73b6..4a80179f60e349 100644 --- a/code/game/objects/items/devices/scanners/sequence_scanner.dm +++ b/code/game/objects/items/devices/scanners/sequence_scanner.dm @@ -1,13 +1,13 @@ /obj/item/sequence_scanner name = "genetic sequence scanner" - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/scanner.dmi' icon_state = "gene" inhand_icon_state = "healthanalyzer" worn_icon_state = "healthanalyzer" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' desc = "A hand-held scanner for analyzing someones gene sequence on the fly. Use on a DNA console to update the internal database." - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = NOBLUDGEON slot_flags = ITEM_SLOT_BELT throwforce = 3 @@ -29,32 +29,42 @@ if(LAZYLEN(genetic_makeup_buffer) > 0) . += span_notice("It has the genetic makeup of \"[genetic_makeup_buffer["name"]]\" stored inside its buffer") -/obj/item/sequence_scanner/attack(mob/living/target, mob/living/carbon/human/user) +/obj/item/sequence_scanner/interact_with_atom(atom/interacting_with, mob/living/user) + if(!isliving(interacting_with)) + return NONE + add_fingerprint(user) + //no scanning if its a husk or DNA-less Species - if (!HAS_TRAIT(target, TRAIT_GENELESS) && !HAS_TRAIT(target, TRAIT_BADDNA)) - user.visible_message(span_notice("[user] analyzes [target]'s genetic sequence.")) + if (!HAS_TRAIT(interacting_with, TRAIT_GENELESS) && !HAS_TRAIT(interacting_with, TRAIT_BADDNA)) + user.visible_message(span_notice("[user] analyzes [interacting_with]'s genetic sequence.")) balloon_alert(user, "sequence analyzed") - playsound(user.loc, 'sound/items/healthanalyzer.ogg', 50) // close enough - gene_scan(target, user) - else - user.visible_message(span_notice("[user] fails to analyze [target]'s genetic sequence."), span_warning("[target] has no readable genetic sequence!")) + playsound(user, 'sound/items/healthanalyzer.ogg', 50) // close enough + gene_scan(interacting_with, user) + return ITEM_INTERACT_SUCCESS + + user.visible_message(span_notice("[user] fails to analyze [interacting_with]'s genetic sequence."), span_warning("[interacting_with] has no readable genetic sequence!")) + return ITEM_INTERACT_BLOCKING + +/obj/item/sequence_scanner/interact_with_atom_secondary(atom/interacting_with, mob/living/user) + if(!isliving(interacting_with)) + return NONE -/obj/item/sequence_scanner/attack_secondary(mob/living/target, mob/living/carbon/human/user, max_interact_count = 1) add_fingerprint(user) + //no scanning if its a husk, DNA-less Species or DNA that isn't able to be copied by a changeling/disease - if (!HAS_TRAIT(target, TRAIT_GENELESS) && !HAS_TRAIT(target, TRAIT_BADDNA) && !HAS_TRAIT(target, TRAIT_NO_DNA_COPY)) - user.visible_message(span_warning("[user] is scanning [target]'s genetic makeup.")) + if (!HAS_TRAIT(interacting_with, TRAIT_GENELESS) && !HAS_TRAIT(interacting_with, TRAIT_BADDNA) && !HAS_TRAIT(interacting_with, TRAIT_NO_DNA_COPY)) + user.visible_message(span_warning("[user] is scanning [interacting_with]'s genetic makeup.")) if(!do_after(user, 3 SECONDS)) balloon_alert(user, "scan failed!") - user.visible_message(span_warning("[user] fails to scan [target]'s genetic makeup.")) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - makeup_scan(target, user) + user.visible_message(span_warning("[user] fails to scan [interacting_with]'s genetic makeup.")) + return ITEM_INTERACT_BLOCKING + makeup_scan(interacting_with, user) balloon_alert(user, "makeup scanned") - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - else - user.visible_message(span_notice("[user] fails to analyze [target]'s genetic makeup."), span_warning("[target] has no readable genetic makeup!")) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_SUCCESS + + user.visible_message(span_notice("[user] fails to analyze [interacting_with]'s genetic makeup."), span_warning("[interacting_with] has no readable genetic makeup!")) + return ITEM_INTERACT_BLOCKING /obj/item/sequence_scanner/afterattack_secondary(obj/object, mob/user, proximity) . = ..() diff --git a/code/game/objects/items/devices/scanners/slime_scanner.dm b/code/game/objects/items/devices/scanners/slime_scanner.dm index 6dcf600cbad1f3..92f681649c4976 100644 --- a/code/game/objects/items/devices/scanners/slime_scanner.dm +++ b/code/game/objects/items/devices/scanners/slime_scanner.dm @@ -1,53 +1,59 @@ /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 = 'icons/obj/devices/scanner.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 + obj_flags = CONDUCTS_ELECTRICITY 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)) //SKYRAT EDIT: Blind People Can Analyze Again - return - if (!isslime(M)) +/obj/item/slime_scanner/interact_with_atom(atom/interacting_with, mob/living/user) + if(!isliving(interacting_with)) + return NONE + if(!user.can_read(src)) //NOVA EDIT CHANGE - Blind People Can Analyze Again - ORIGINAL : if(!user.can_read(src) || user.is_blind()) + return ITEM_INTERACT_BLOCKING + if (!isslime(interacting_with)) to_chat(user, span_warning("This device can only scan slimes!")) - return - var/mob/living/simple_animal/slime/T = M - slime_scan(T, user) + return ITEM_INTERACT_BLOCKING + var/mob/living/simple_animal/slime/scanned_slime = interacting_with + slime_scan(scanned_slime, user) + return ITEM_INTERACT_SUCCESS -/proc/slime_scan(mob/living/simple_animal/slime/T, mob/living/user) +/proc/slime_scan(mob/living/simple_animal/slime/scanned_slime, 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()) + \n[span_notice("[scanned_slime.slime_type.colour] [scanned_slime.life_stage] slime")]\ + \nNutrition: [scanned_slime.nutrition]/[scanned_slime.max_nutrition]" + + if (scanned_slime.nutrition < scanned_slime.starve_nutrition) to_render += "\n[span_warning("Warning: slime is starving!")]" - else if (T.nutrition < T.get_hunger_nutrition()) + else if (scanned_slime.nutrition < scanned_slime.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 += "\nElectric charge strength: [scanned_slime.powerlevel]\nHealth: [round(scanned_slime.health/scanned_slime.maxHealth,0.01)*100]%" + + to_render += "\nPossible mutation[scanned_slime.slime_type.mutations.len > 1 ? "s" : ""]: " + var/list/mutation_text = list() + for(var/datum/slime_type/key as anything in scanned_slime.slime_type.mutations) + mutation_text += initial(key.colour) + + if(!mutation_text.len) + to_render += " None detected." + + to_render += "[mutation_text.Join(", ")]" + to_render += "\nGenetic instability: [scanned_slime.mutation_chance] % chance of mutation attempt on splitting." + + if (scanned_slime.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)) + to_render += "\nGrowth progress: [scanned_slime.amount_grown]/[SLIME_EVOLUTION_THRESHOLD]" + + if(scanned_slime.crossbreed_modification) + to_render += "\n[span_notice("Core mutation in progress: [scanned_slime.crossbreed_modification]")]\ + \n[span_notice("Progress in core mutation: [scanned_slime.applied_crossbreed_amount] / [SLIME_EXTRACT_CROSSING_REQUIRED]")]" + + to_chat(user, examine_block(jointext(to_render,""))) diff --git a/code/game/objects/items/devices/scanners/t_scanner.dm b/code/game/objects/items/devices/scanners/t_scanner.dm index 6168d0f8380c6d..c9f1ae0fd9d926 100644 --- a/code/game/objects/items/devices/scanners/t_scanner.dm +++ b/code/game/objects/items/devices/scanners/t_scanner.dm @@ -2,7 +2,7 @@ name = "\improper T-ray scanner" desc = "A terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes." custom_price = PAYCHECK_LOWER * 0.7 - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/scanner.dmi' icon_state = "t-ray0" var/on = FALSE slot_flags = ITEM_SLOT_BELT @@ -35,8 +35,7 @@ /obj/item/t_scanner/process() if(!on) - STOP_PROCESSING(SSobj, src) - return null + return PROCESS_KILL scan() /obj/item/t_scanner/proc/scan() diff --git a/code/game/objects/items/devices/sensor_device.dm b/code/game/objects/items/devices/sensor_device.dm index dc45521532e210..0a5b4feb83a2f2 100644 --- a/code/game/objects/items/devices/sensor_device.dm +++ b/code/game/objects/items/devices/sensor_device.dm @@ -1,7 +1,7 @@ /obj/item/sensor_device name = "handheld crew monitor" //Thanks to Gun Hog for the name! desc = "A miniature machine that tracks suit sensors across the station." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/scanner.dmi' icon_state = "scanner" inhand_icon_state = "electronic" worn_icon_state = "electronic" diff --git a/code/game/objects/items/devices/spyglasses.dm b/code/game/objects/items/devices/spyglasses.dm index fc0fcd841af3e5..33754527c8fc6f 100644 --- a/code/game/objects/items/devices/spyglasses.dm +++ b/code/game/objects/items/devices/spyglasses.dm @@ -52,14 +52,18 @@ icon = 'icons/obj/clothing/accessories.dmi' icon_state = "pocketprotector" desc = "An advanced piece of espionage equipment in the shape of a pocket protector. It has a built in 360 degree camera for all your \"admirable\" needs. Microphone not included." + /// The glasses that you can use to see what this can see var/obj/item/clothing/glasses/sunglasses/spy/linked_glasses + /// Our camera display popup var/atom/movable/screen/map_view/cam_screen - // Ranges higher than one can be used to see through walls. + /// How far can we actually see? Ranges higher than one can be used to see through walls. var/cam_range = 1 + /// Detects when we move to update the camera view var/datum/movement_detector/tracker /obj/item/clothing/accessory/spy_bug/Initialize(mapload) . = ..() + AddComponent(/datum/component/pinnable_accessory) tracker = new /datum/movement_detector(src, CALLBACK(src, PROC_REF(update_view))) cam_screen = new cam_screen.generate_view("spypopup_map") diff --git a/code/game/objects/items/devices/swapper.dm b/code/game/objects/items/devices/swapper.dm index 6a7a77a6c35230..e2aa385ce938b3 100644 --- a/code/game/objects/items/devices/swapper.dm +++ b/code/game/objects/items/devices/swapper.dm @@ -1,7 +1,7 @@ /obj/item/swapper name = "quantum spin inverter" desc = "An experimental device that is able to swap the locations of two entities by switching their particles' spin values. Must be linked to another device to function." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/mining_zones/artefacts.dmi' icon_state = "swapper" inhand_icon_state = "electronic" w_class = WEIGHT_CLASS_SMALL @@ -45,12 +45,12 @@ if(world.time < next_use) to_chat(user, span_warning("[src] is still recharging.")) return - //SKYRAT EDIT BEGIN + //NOVA EDIT BEGIN var/turf/my_turf = get_turf(src) if(is_away_level(my_turf.z)) to_chat(user, "[src] cannot be used here!") return - //SKYRAT EDIT END + //NOVA EDIT END if(QDELETED(linked_swapper)) to_chat(user, span_warning("[src] is not linked with another swapper.")) return diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 997f548a0ee1c7..f15f2eb72e0e13 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -1,7 +1,7 @@ /obj/item/taperecorder name = "universal recorder" desc = "A device that can record to cassette tapes, and play them. It automatically translates the content in playback." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/voice.dmi' icon_state = "taperecorder_empty" inhand_icon_state = "analyzer" worn_icon_state = "analyzer" @@ -369,7 +369,7 @@ name = "tape" desc = "A magnetic tape that can hold up to ten minutes of content on either side." icon_state = "tape_white" - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' inhand_icon_state = "analyzer" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 55cfde1b19c063..99322597b4b5d2 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -18,13 +18,13 @@ effective or pretty fucking useless. /obj/item/batterer name = "mind batterer" desc = "A strange device with twin antennas." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/syndie_gadget.dmi' icon_state = "batterer" throwforce = 5 w_class = WEIGHT_CLASS_TINY throw_speed = 3 throw_range = 7 - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' @@ -70,38 +70,37 @@ effective or pretty fucking useless. */ /obj/item/healthanalyzer/rad_laser - special_desc_requirement = EXAMINE_CHECK_SYNDICATE // SKYRAT EDIT - special_desc = "This syndicate-modified health analyzer can emit delayed bursts of radiation to those it scans." //SKYRAT EDIT var/irradiate = TRUE var/stealth = FALSE var/used = FALSE // is it cooling down? var/intensity = 10 // how much damage the radiation does var/wavelength = 10 // time it takes for the radiation to kick in, in seconds -/obj/item/healthanalyzer/rad_laser/attack(mob/living/M, mob/living/user) +/obj/item/healthanalyzer/rad_laser/interact_with_atom(atom/interacting_with, mob/living/user) if(!stealth || !irradiate) - ..() + . = ..() - if(!irradiate) - return + if(!ishuman(interacting_with) || !irradiate) + return . - var/mob/living/carbon/human/human_target = M + var/mob/living/carbon/human/human_target = interacting_with if(istype(human_target) && !used && SSradiation.wearing_rad_protected_clothing(human_target)) //intentionally not checking for TRAIT_RADIMMUNE here so that tatortot can still fuck up and waste their cooldown. - to_chat(user, span_warning("[M]'s clothing is fully protecting [M.p_them()] from irradiation!")) - return + to_chat(user, span_warning("[interacting_with]'s clothing is fully protecting [interacting_with.p_them()] from irradiation!")) + return . | ITEM_INTERACT_BLOCKING if(!used) - log_combat(user, M, "irradiated", src) + log_combat(user, interacting_with, "irradiated", src) var/cooldown = get_cooldown() used = TRUE icon_state = "health1" addtimer(VARSET_CALLBACK(src, used, FALSE), cooldown) addtimer(VARSET_CALLBACK(src, icon_state, "health"), cooldown) - to_chat(user, span_warning("Successfully irradiated [M].")) - addtimer(CALLBACK(src, PROC_REF(radiation_aftereffect), M, intensity), (wavelength+(intensity*4))*5) - return + to_chat(user, span_warning("Successfully irradiated [interacting_with].")) + addtimer(CALLBACK(src, PROC_REF(radiation_aftereffect), interacting_with, intensity), (wavelength+(intensity*4))*5) + return . | ITEM_INTERACT_SUCCESS to_chat(user, span_warning("The radioactive microlaser is still recharging.")) + return . | ITEM_INTERACT_BLOCKING /obj/item/healthanalyzer/rad_laser/proc/radiation_aftereffect(mob/living/M, passed_intensity) if(QDELETED(M) || !ishuman(M) || HAS_TRAIT(M, TRAIT_RADIMMUNE)) @@ -284,13 +283,10 @@ effective or pretty fucking useless. return FALSE /obj/item/jammer - name = "suspicious transmitter" //SKYRAT CHANGE - desc = "A suspicious device vaguely resembling a radio, but without a speaker or microphone." //SKYRAT CHANGE - icon = 'icons/obj/device.dmi' + name = "radio jammer" + desc = "Device used to disrupt nearby radio communication." + icon = 'icons/obj/devices/syndie_gadget.dmi' icon_state = "jammer" - special_desc_requirement = EXAMINE_CHECK_JOB // Skyrat edit - special_desc_jobs = list("Station Engineer", "Chief Engineer", "Cyborg", "AI") //SKYRAT CHANGE //As telecommunications equipment, Engineering would be knowledgeable. - special_desc = "This is a black market radio jammer. Used to disrupt nearby radio communication." var/active = FALSE var/range = 12 diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 496eec5659cb14..c3203a0ace7a90 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -1,5 +1,5 @@ /obj/item/transfer_valve - icon = 'icons/obj/assemblies/assemblies.dmi' + icon = 'icons/obj/devices/assemblies.dmi' name = "tank transfer valve" icon_state = "valve_1" base_icon_state = "valve" diff --git a/code/game/objects/items/dice.dm b/code/game/objects/items/dice.dm index 789f6250441262..8fe83e2e380c15 100644 --- a/code/game/objects/items/dice.dm +++ b/code/game/objects/items/dice.dm @@ -107,6 +107,12 @@ icon_state = "de6" microwave_riggable = FALSE // You can't melt wood in the microwave +/obj/item/dice/d6/bone + name = "bone die" + desc = "A die carved from a creature's bone. Dried blood marks the indented pits." + icon_state = "db6" + microwave_riggable = FALSE // You can't melt bone in the microwave + /obj/item/dice/d6/space name = "space cube" desc = "A die with six sides. 6 TIMES 255 TIMES 255 TILE TOTAL EXISTENCE, SQUARE YOUR MIND OF EDUCATED STUPID: 2 DOES NOT EXIST." @@ -425,7 +431,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/dna_injector.dm b/code/game/objects/items/dna_injector.dm index ca7af78ecba32a..0dc20c6dbb4d90 100644 --- a/code/game/objects/items/dna_injector.dm +++ b/code/game/objects/items/dna_injector.dm @@ -112,7 +112,7 @@ if(mutation == /datum/mutation/human/race) if(!ismonkey(target)) continue - target = target.dna.remove_mutation(mutation) + target.dna.remove_mutation(mutation) else target.dna.remove_mutation(mutation) for(var/mutation in add_mutations) @@ -120,7 +120,7 @@ continue //Skip permanent mutations we already have. if(mutation == /datum/mutation/human/race && !ismonkey(target)) message_admins("[ADMIN_LOOKUPFLW(user)] injected [key_name_admin(target)] with the [name] [span_danger("(MONKEY)")]") - target = target.dna.add_mutation(mutation, MUT_OTHER, endtime) + target.dna.add_mutation(mutation, MUT_OTHER, endtime) else target.dna.add_mutation(mutation, MUT_OTHER, endtime) if(fields) diff --git a/code/game/objects/items/door_seal.dm b/code/game/objects/items/door_seal.dm index eef6f3d79eedc9..d3e80cdf16de1d 100644 --- a/code/game/objects/items/door_seal.dm +++ b/code/game/objects/items/door_seal.dm @@ -6,7 +6,7 @@ inhand_icon_state = "pneumatic_seal" lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' righthand_file = 'icons/mob/inhands/items_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY resistance_flags = FIRE_PROOF | ACID_PROOF force = 5 throwforce = 5 diff --git a/code/game/objects/items/dualsaber.dm b/code/game/objects/items/dualsaber.dm index 61fe9a9905dec3..04b95f1049bee2 100644 --- a/code/game/objects/items/dualsaber.dm +++ b/code/game/objects/items/dualsaber.dm @@ -23,19 +23,19 @@ light_on = FALSE attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts") attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut") - block_chance = 45 //SKYRAT EDIT - Lowered ORIGINAL:75 + block_chance = 45 //NOVA EDIT - Lowered ORIGINAL:75 block_sound = 'sound/weapons/block_blade.ogg' max_integrity = 200 armor_type = /datum/armor/item_dualsaber resistance_flags = FIRE_PROOF wound_bonus = -10 bare_wound_bonus = 20 - special_desc_requirement = EXAMINE_CHECK_SYNDICATE_TOY // Skyrat edit - special_desc = "A double bladed energy sword employed by the Syndicate in raids" // Skyrat edit + special_desc_requirement = EXAMINE_CHECK_SYNDICATE_TOY // NOVA EDIT + special_desc = "A double bladed energy sword employed by the Syndicate in raids" // NOVA EDIT item_flags = NO_BLOOD_ON_ITEM var/w_class_on = WEIGHT_CLASS_BULKY var/saber_color = "green" - var/two_hand_force = 34 + var/two_hand_force = 40 var/hacked = FALSE var/list/possible_colors = list("red", "blue", "green", "purple") @@ -151,9 +151,21 @@ user.adjustStaminaLoss(25) /obj/item/dualsaber/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) - if(HAS_TRAIT(src, TRAIT_WIELDED)) - return ..() - return 0 + if(!HAS_TRAIT(src, TRAIT_WIELDED)) + return FALSE //not interested unless we're wielding + + if(attack_type == PROJECTILE_ATTACK) + var/obj/projectile/our_projectile = hitby + + if(our_projectile.reflectable) + final_block_chance = 0 //we handle this via IsReflect(), effectively 75% block + else + final_block_chance -= 25 //We aren't AS good at blocking physical projectiles, like ballistics and thermals + + if(attack_type == LEAP_ATTACK) + final_block_chance -= 50 //We are particularly bad at blocking someone JUMPING at us.. + + return ..() /obj/item/dualsaber/process() if(HAS_TRAIT(src, TRAIT_WIELDED)) @@ -161,11 +173,11 @@ set_light_color(pick(COLOR_SOFT_RED, LIGHT_COLOR_GREEN, LIGHT_COLOR_LIGHT_CYAN, LIGHT_COLOR_LAVENDER)) open_flame() else - STOP_PROCESSING(SSobj, src) + return PROCESS_KILL /obj/item/dualsaber/IsReflect() - if(HAS_TRAIT(src, TRAIT_WIELDED)) - return 1 + if(HAS_TRAIT(src, TRAIT_WIELDED) && prob(block_chance)) + return TRUE /obj/item/dualsaber/ignition_effect(atom/A, mob/user) // same as /obj/item/melee/energy, mostly diff --git a/code/game/objects/items/dyespray.dm b/code/game/objects/items/dyespray.dm index 6852ac7b0e127e..16944d3e38684e 100644 --- a/code/game/objects/items/dyespray.dm +++ b/code/game/objects/items/dyespray.dm @@ -1,11 +1,11 @@ /obj/item/dyespray name = "hair dye spray" - desc = "A spray to dye hair as well as giving it any gradient you'd like." // SKYRAT EDIT - Making the dyespray change hair color + desc = "A spray to dye hair as well as giving it any gradient you'd like." // NOVA EDIT - Making the dyespray change hair color w_class = WEIGHT_CLASS_TINY icon = 'icons/obj/cosmetic.dmi' icon_state = "dyespray" - var/uses = 40 //SKYRAT EDIT ADDITION + var/uses = 40 //NOVA EDIT ADDITION /obj/item/dyespray/attack_self(mob/user) dye(user, user) @@ -20,13 +20,13 @@ * Arguments: * * target - The mob who we will apply the gradient and gradient color to. */ -/* SKYRAT EDIT REMOVAL - MOVED TO MODULAR (modular_skyrat\master_files\code\game\objects\items\dyekit.dm) +/* NOVA EDIT REMOVAL - MOVED TO MODULAR (modular_nova\master_files\code\game\objects\items\dyekit.dm) /obj/item/dyespray/proc/dye(mob/target, mob/user) if(!ishuman(target)) return - if(!uses) //SKYRAT EDIT ADDITION - return //SKYRAT EDIT ADDITION + if(!uses) //NOVA EDIT ADDITION + return //NOVA EDIT ADDITION var/mob/living/carbon/human/human_target = target var/beard_or_hair = tgui_alert(user, "What do you want to dye?", "Character Preference", list("Hair", "Facial Hair")) diff --git a/code/game/objects/items/eightball.dm b/code/game/objects/items/eightball.dm index 4003f947b8ddcb..719789b2a936c0 100644 --- a/code/game/objects/items/eightball.dm +++ b/code/game/objects/items/eightball.dm @@ -158,7 +158,12 @@ // notify ghosts that someone's shaking a haunted eightball // and inform them of the message, (hopefully a yes/no question) selected_message = last_message - notify_ghosts("[user] is shaking [src], hoping to get an answer to \"[selected_message]\"", source = src, action = NOTIFY_PLAY, header = "Magic eightball") + notify_ghosts( + "[user] is shaking [src], hoping to get an answer to \"[selected_message]\"", + source = src, + header = "Magic eightball", + click_interact = TRUE, + ) /obj/item/toy/eightball/haunted/get_answer() var/top_amount = 0 diff --git a/code/game/objects/items/emags.dm b/code/game/objects/items/emags.dm index 58e0ad881a49bb..f1d66b875c34d7 100644 --- a/code/game/objects/items/emags.dm +++ b/code/game/objects/items/emags.dm @@ -12,8 +12,8 @@ name = "cryptographic sequencer" //SKYRAT COMMENT: Everyone knows what an emag is, both IC and OOC, they even make toy lookalikes. icon_state = "emag" item_flags = NO_MAT_REDEMPTION | NOBLUDGEON - special_desc_requirement = EXAMINE_CHECK_SYNDICATE // SKYRAT EDIT ADDITION - special_desc = "An specially modified ID card used to break machinery and disable safeties. Notoriously used by Syndicate agents." // Skyrat edit + special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT ADDITION + special_desc = "An specially modified ID card used to break machinery and disable safeties. Notoriously used by Syndicate agents." // NOVA EDIT slot_flags = ITEM_SLOT_ID worn_icon_state = "emag" var/prox_check = TRUE //If the emag requires you to be in range @@ -36,43 +36,43 @@ icon_state = "hack_o_lantern" /obj/item/card/emagfake - desc = "It's a card with a magnetic strip attached to some circuitry." //SKYRAT EDIT CHANGE + desc = "It's a card with a magnetic strip attached to some circuitry." //NOVA EDIT CHANGE name = "cryptographic sequencer" icon_state = "emag" slot_flags = ITEM_SLOT_ID worn_icon_state = "emag" - special_desc_requirement = EXAMINE_CHECK_SYNDICATE_TOY // SKYRAT EDIT ADDITION - It's a toy, we're not hiding it. - special_desc = "Closer inspection shows that this card is a poorly made replica, with a \"DonkCo\" logo stamped on the back." // SKYRAT EDIT ADDITION + special_desc_requirement = EXAMINE_CHECK_SYNDICATE_TOY // NOVA EDIT ADDITION - It's a toy, we're not hiding it. + special_desc = "Closer inspection shows that this card is a poorly made replica, with a \"DonkCo\" logo stamped on the back." // NOVA EDIT ADDITION /obj/item/card/emagfake/attack_self(mob/user) //for assistants with balls of plasteel if(Adjacent(user)) user.visible_message(span_notice("[user] shows you: [icon2html(src, viewers(user))] [name]."), span_notice("You show [src].")) add_fingerprint(user) -/obj/item/card/emagfake/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - if (!proximity_flag) - return - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/card/emagfake/interact_with_atom(atom/interacting_with, mob/living/user) playsound(src, 'sound/items/bikehorn.ogg', 50, TRUE) + return ITEM_INTERACT_SKIP_TO_ATTACK // So it does the attack animation. /obj/item/card/emag/Initialize(mapload) . = ..() type_blacklist = list(typesof(/obj/machinery/door/airlock) + typesof(/obj/machinery/door/window/) + typesof(/obj/machinery/door/firedoor) - typesof(/obj/machinery/door/airlock/tram)) //list of all typepaths that require a specialized emag to hack. -/obj/item/card/emag/attack() - return +/obj/item/card/emag/interact_with_atom(atom/interacting_with, mob/living/user) + if(!can_emag(interacting_with, user)) + return ITEM_INTERACT_BLOCKING + log_combat(user, interacting_with, "attempted to emag") + interacting_with.emag_act(user, src) + return ITEM_INTERACT_SUCCESS -/obj/item/card/emag/afterattack(atom/target, mob/user, proximity) +/obj/item/card/emag/afterattack(atom/target, mob/user, proximity_flag, click_parameters) . = ..() - var/atom/A = target - if(!proximity && prox_check) + // Proximity based emagging is handled by above + // This is only for ranged emagging + if(proximity_flag || prox_check) return + . |= AFTERATTACK_PROCESSED_ITEM - if(!can_emag(target, user)) - return - log_combat(user, A, "attempted to emag") - A.emag_act(user, src) + interact_with_atom(target, user) /obj/item/card/emag/proc/can_emag(atom/target, mob/user) for (var/subtypelist in type_blacklist) @@ -85,11 +85,11 @@ * DOORMAG */ /obj/item/card/emag/doorjack - desc = "This dated-looking ID card has been obviously and illegally modified with extra circuitry. Resembles the infamous \"emag\"." //SKYRAT EDIT CHANGE + desc = "This dated-looking ID card has been obviously and illegally modified with extra circuitry. Resembles the infamous \"emag\"." //NOVA EDIT CHANGE name = "modified ID card" icon_state = "doorjack" - special_desc_requirement = EXAMINE_CHECK_SYNDICATE // SKYRAT EDIT ADDITION - special_desc = "Identifies commonly as a \"doorjack\", this illegally modified ID card can disrupt airlock electronics. Has a self recharging cell. Used often by Syndicate agents." // SKYRAT EDIT ADDITION + special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT ADDITION + special_desc = "Identifies commonly as a \"doorjack\", this illegally modified ID card can disrupt airlock electronics. Has a self recharging cell. Used often by Syndicate agents." // NOVA EDIT ADDITION worn_icon_state = "doorjack" var/type_whitelist //List of types var/charges = 3 diff --git a/code/game/objects/items/etherealdiscoball.dm b/code/game/objects/items/etherealdiscoball.dm index 85b3a77bc86d2a..0b8183a7237853 100644 --- a/code/game/objects/items/etherealdiscoball.dm +++ b/code/game/objects/items/etherealdiscoball.dm @@ -1,7 +1,7 @@ /obj/item/etherealballdeployer name = "Portable Ethereal Disco Ball" desc = "Press the button for a deployment of slightly-unethical PARTY!" - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/remote.dmi' icon_state = "ethdisco" /obj/item/etherealballdeployer/attack_self(mob/living/carbon/user) @@ -13,7 +13,7 @@ /obj/structure/etherealball name = "Ethereal Disco Ball" desc = "The ethics of this discoball are questionable." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/machines/floor.dmi' icon_state = "ethdisco_head_0" anchored = TRUE density = TRUE diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm index 8947e83d363273..0645b2a010827d 100644 --- a/code/game/objects/items/extinguisher.dm +++ b/code/game/objects/items/extinguisher.dm @@ -1,12 +1,12 @@ /obj/item/extinguisher name = "fire extinguisher" desc = "A traditional red fire extinguisher." - icon = 'icons/obj/tools.dmi' // SKYRAT EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE + icon = 'icons/obj/tools.dmi' // NOVA EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE icon_state = "fire_extinguisher0" worn_icon_state = "fire_extinguisher" inhand_icon_state = "fire_extinguisher" hitsound = 'sound/weapons/smash.ogg' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY throwforce = 10 w_class = WEIGHT_CLASS_NORMAL throw_speed = 2 @@ -62,7 +62,7 @@ worn_icon_state = "miniFE" inhand_icon_state = "miniFE" hitsound = null //it is much lighter, after all. - flags_1 = null //doesn't CONDUCT_1 + obj_flags = NONE //doesn't conduct electricity throwforce = 2 w_class = WEIGHT_CLASS_SMALL force = 3 @@ -81,7 +81,7 @@ worn_icon_state = "miniFE" inhand_icon_state = "miniFE" hitsound = null //it is much lighter, after all. - flags_1 = null //doesn't CONDUCT_1 + obj_flags = NONE //doesn't conduct electricity throwforce = 1 w_class = WEIGHT_CLASS_SMALL force = 3 diff --git a/code/game/objects/items/fireaxe.dm b/code/game/objects/items/fireaxe.dm index b0b17faf89d541..901e506194e8a6 100644 --- a/code/game/objects/items/fireaxe.dm +++ b/code/game/objects/items/fireaxe.dm @@ -13,7 +13,7 @@ throwforce = 15 demolition_mod = 1.25 w_class = WEIGHT_CLASS_BULKY - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BACK attack_verb_continuous = list("attacks", "chops", "cleaves", "tears", "lacerates", "cuts") attack_verb_simple = list("attack", "chop", "cleave", "tear", "lacerate", "cut") diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm index eb94626c86e73a..b7896c643811bb 100644 --- a/code/game/objects/items/flamethrower.dm +++ b/code/game/objects/items/flamethrower.dm @@ -6,7 +6,7 @@ inhand_icon_state = "flamethrower_0" lefthand_file = 'icons/mob/inhands/weapons/flamethrower_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/flamethrower_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY force = 3 throwforce = 10 throw_speed = 1 @@ -52,8 +52,7 @@ /obj/item/flamethrower/process() if(!lit || !igniter) - STOP_PROCESSING(SSobj, src) - return null + return PROCESS_KILL var/turf/location = loc if(ismob(location)) var/mob/M = location diff --git a/code/game/objects/items/food/bait.dm b/code/game/objects/items/food/bait.dm index 5ac24baa578ea3..aa9a0e7bd9e950 100644 --- a/code/game/objects/items/food/bait.dm +++ b/code/game/objects/items/food/bait.dm @@ -66,4 +66,4 @@ /obj/item/food/bait/doughball/synthetic/Initialize(mapload) . = ..() - ADD_TRAIT(src, OMNI_BAIT_TRAIT, INNATE_TRAIT) + ADD_TRAIT(src, TRAIT_OMNI_BAIT, INNATE_TRAIT) diff --git a/code/game/objects/items/food/egg.dm b/code/game/objects/items/food/egg.dm index 60bbb58e3ac873..356059a097ab1c 100644 --- a/code/game/objects/items/food/egg.dm +++ b/code/game/objects/items/food/egg.dm @@ -213,7 +213,7 @@ GLOBAL_VAR_INIT(chicks_from_eggs, 0) desc = "Supposedly good for you, if you can stomach it. Better fried." icon = 'icons/obj/food/egg.dmi' icon_state = "rawegg" - food_reagents = list() //Recieves all reagents from its whole egg counterpart + food_reagents = list() // Receives all reagents from its whole egg counterpart bite_consumption = 1 tastes = list("raw egg" = 6, "sliminess" = 1) eatverbs = list("gulp down") diff --git a/code/game/objects/items/food/frozen.dm b/code/game/objects/items/food/frozen.dm index 8951165aa80823..0bd0cd3a60620d 100644 --- a/code/game/objects/items/food/frozen.dm +++ b/code/game/objects/items/food/frozen.dm @@ -434,3 +434,16 @@ foodtypes = DAIRY | SUGAR venue_value = FOOD_PRICE_NORMAL crafting_complexity = FOOD_COMPLEXITY_3 + +/obj/item/food/popsicle/meatsicle + name = "Meatsicle" + desc = "A horrific abomination of raw meat, glazed with sugar on a stick, then frozen." + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/fat = 2, + /datum/reagent/consumable/nutriment/protein = 2, + /datum/reagent/consumable/sugar = 4, + ) + overlay_state = "meatsicle" + foodtypes = RAW | MEAT | SUGAR + crafting_complexity = FOOD_COMPLEXITY_4 diff --git a/code/game/objects/items/food/lizard.dm b/code/game/objects/items/food/lizard.dm index 2954b52a9fd067..5f7092c64db586 100644 --- a/code/game/objects/items/food/lizard.dm +++ b/code/game/objects/items/food/lizard.dm @@ -839,3 +839,109 @@ tastes = list("peanut butter" = 1, "banana" = 1, "rootbread" = 2) foodtypes = FRUIT | NUTS crafting_complexity = FOOD_COMPLEXITY_3 + +/obj/item/food/burger/plain/korta + name = "plain rootburger" + desc = "A simple patty in a rootdough bun." + icon_state = "kortaburger" + icon = 'icons/obj/food/lizard.dmi' + food_reagents = list( + /datum/reagent/consumable/nutriment = 2, + /datum/reagent/consumable/nutriment/protein = 6, + /datum/reagent/consumable/nutriment/vitamin = 1, + ) + foodtypes = NUTS | MEAT + crafting_complexity = FOOD_COMPLEXITY_3 //Gotta make the dough, +1 + +/obj/item/food/burger/rat/korta + name = "rat rootburger" + desc = "Pretty much what you'd expect... Just in a rootdough bun." + icon_state = "ratburger" + icon = 'icons/obj/food/lizard.dmi' + food_reagents = list( + /datum/reagent/consumable/nutriment = 3, + /datum/reagent/consumable/nutriment/protein = 6, + /datum/reagent/consumable/nutriment/vitamin = 2, + ) + tastes = list("dead rat" = 4, "bun" = 2) + foodtypes = NUTS | MEAT | GORE + crafting_complexity = FOOD_COMPLEXITY_3 + +/obj/item/food/burger/rootguffin + name = "root-guffin" + desc = "A cheap and greasy lizard-friendly imitation of an eggs benedict." + icon_state = "rootguffin" + icon = 'icons/obj/food/lizard.dmi' + food_reagents = list( + /datum/reagent/consumable/nutriment = 2, + /datum/reagent/consumable/eggyolk = 3, + /datum/reagent/consumable/nutriment/protein = 7, + /datum/reagent/consumable/nutriment/vitamin = 1, + ) + tastes = list("muffin" = 2, "bacon" = 3) + foodtypes = NUTS | MEAT | BREAKFAST + venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_4 + +/obj/item/food/burger/rootrib + name = "rootrib" + desc = "An elusive rib shaped burger with limited availablity across the galaxy. Now meeting subhuman requirements." + icon_state = "rootrib" + icon = 'icons/obj/food/lizard.dmi' + food_reagents = list( + /datum/reagent/consumable/nutriment = 2, + /datum/reagent/consumable/nutriment/protein = 7, + /datum/reagent/consumable/nutriment/vitamin = 4, + /datum/reagent/consumable/bbqsauce = 1, + ) + tastes = list("bun" = 2, "pork patty" = 4) + foodtypes = NUTS | MEAT + venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_4 + +/obj/item/food/burger/rootchicken + name = "chicken rootwich" + desc = "A delicious chicken sandwich, in a soft rootbread roll." + icon_state = "rootchicken" + icon = 'icons/obj/food/lizard.dmi' + food_reagents = list( + /datum/reagent/consumable/nutriment = 3, + /datum/reagent/consumable/mayonnaise = 3, + /datum/reagent/consumable/nutriment/protein = 7, + /datum/reagent/consumable/nutriment/vitamin = 1, + /datum/reagent/consumable/nutriment/fat/oil = 2, + ) + tastes = list("bun" = 2, "chicken" = 4, "God's covenant" = 1) + foodtypes = NUTS | MEAT | FRIED + venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_4 + +/obj/item/food/burger/rootfish + name = "Fish rootwich" + desc = "Lightly battered fish, sandwiched in a rootroll." + icon_state = "rootfish" + icon = 'icons/obj/food/lizard.dmi' + food_reagents = list( + /datum/reagent/consumable/nutriment = 3, + /datum/reagent/consumable/nutriment/protein = 6, + /datum/reagent/consumable/nutriment/vitamin = 4, + ) + tastes = list("bun" = 4, "fish" = 4) + foodtypes = NUTS | SEAFOOD + venue_value = FOOD_PRICE_EXOTIC + crafting_complexity = FOOD_COMPLEXITY_3 + +/obj/item/food/burger/sloppyroot + name = "sssloppy moe" + desc = "Ground meat mixed with onions and barbeque sssauce, sssloppily plopped onto a rootroll. Delicious, but guaranteed to get your hands dirty." + icon_state = "sloppyroot" + icon = 'icons/obj/food/lizard.dmi' + food_reagents = list( + /datum/reagent/consumable/nutriment = 10, + /datum/reagent/consumable/nutriment/protein = 8, + /datum/reagent/consumable/nutriment/vitamin = 6, + ) + tastes = list("juicy meat" = 4, "BBQ sauce" = 3, "onions" = 2, "bun" = 2) + foodtypes = NUTS | MEAT | VEGETABLES + venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_4 diff --git a/code/game/objects/items/food/martian.dm b/code/game/objects/items/food/martian.dm index eaf0f172dcfed8..9dfa7cb5a015b2 100644 --- a/code/game/objects/items/food/martian.dm +++ b/code/game/objects/items/food/martian.dm @@ -11,6 +11,7 @@ tastes = list("spicy cabbage" = 1) foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/inferno_kimchi name = "inferno kimchi" @@ -24,6 +25,7 @@ tastes = list("very spicy cabbage" = 1) foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/garlic_kimchi name = "garlic kimchi" @@ -38,6 +40,7 @@ tastes = list("spicy cabbage" = 1, "garlic" = 1) foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/surimi name = "surimi" @@ -51,6 +54,7 @@ tastes = list("fish" = 1) foodtypes = SEAFOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/surimi/Initialize(mapload) . = ..() @@ -68,6 +72,7 @@ tastes = list("fish" = 1) foodtypes = SEAFOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/kamaboko/Initialize(mapload) . = ..() @@ -90,6 +95,7 @@ tastes = list("fish" = 1) foodtypes = SEAFOOD w_class = WEIGHT_CLASS_TINY + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/sambal name = "sambal" @@ -103,6 +109,7 @@ tastes = list("chilli heat" = 1, "umami" = 1) foodtypes = SEAFOOD | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/katsu_fillet name = "katsu fillet" @@ -117,6 +124,7 @@ tastes = list("meat" = 1, "breadcrumbs" = 1) foodtypes = MEAT | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/rice_dough name = "rice dough" @@ -128,6 +136,7 @@ ) tastes = list("rice" = 1) foodtypes = GRAIN + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/rice_dough/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/bread/reispan, rand(30 SECONDS, 45 SECONDS), TRUE, TRUE) @@ -146,6 +155,7 @@ ) tastes = list("rice" = 1) foodtypes = GRAIN + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/spaghetti/boilednoodles name = "cooked noodles" @@ -157,6 +167,7 @@ ) tastes = list("rice" = 1) foodtypes = GRAIN + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/bread/reispan name = "reispan" @@ -167,8 +178,9 @@ /datum/reagent/consumable/nutriment = 15 ) tastes = list("bread" = 10) - foodtypes = GRAIN + foodtypes = GRAIN venue_value = FOOD_PRICE_TRASH + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/bread/reispan/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/breadslice/reispan, 5, 3 SECONDS, table_required = TRUE) @@ -182,6 +194,7 @@ /datum/reagent/consumable/nutriment = 3 ) foodtypes = GRAIN | VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_3 // Fried Rice @@ -198,6 +211,7 @@ tastes = list("rice" = 1, "meat" = 1, "pineapple" = 1, "veggies" = 1) foodtypes = MEAT | GRAIN | PINEAPPLE | FRUIT | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/ikareis name = "ikareis" @@ -213,6 +227,7 @@ tastes = list("rice" = 1, "squid ink" = 1, "veggies" = 1, "sausage" = 1, "chilli heat" = 1) foodtypes = MEAT | GRAIN | SEAFOOD | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/salad/hawaiian_fried_rice name = "\improper Hawaiian fried rice" @@ -227,6 +242,7 @@ tastes = list("rice" = 1, "pork" = 1, "pineapple" = 1, "soy sauce" = 1, "veggies" = 1) foodtypes = MEAT | GRAIN | VEGETABLES | FRUIT | PINEAPPLE w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/ketchup_fried_rice name = "ketchup fried rice" @@ -242,6 +258,7 @@ tastes = list("rice" = 1, "sausage" = 1, "ketchup" = 1, "veggies" = 1) foodtypes = MEAT | GRAIN | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/mediterranean_fried_rice name = "mediterranean fried rice" @@ -256,6 +273,7 @@ tastes = list("rice" = 1, "cheese" = 1, "meatball" = 1, "olives" = 1, "herbs" = 1) foodtypes = MEAT | GRAIN | VEGETABLES | DAIRY w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/egg_fried_rice name = "egg fried rice" @@ -269,6 +287,7 @@ tastes = list("rice" = 1, "egg" = 1, "soy sauce" = 1) foodtypes = MEAT | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/salad/egg_fried_rice/Initialize(mapload) . = ..() @@ -288,6 +307,7 @@ tastes = list("rice" = 1, "spicy cabbage" = 1, "chilli heat" = 1, "egg" = 1, "meat" = 1) foodtypes = MEAT | VEGETABLES | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/bibimbap/Initialize(mapload) . = ..() @@ -307,6 +327,7 @@ tastes = list("barbecue meat" = 1, "noodles" = 1, "chilli heat" = 1) foodtypes = MEAT | GRAIN | VEGETABLES | FRUIT w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/yakisoba_katsu name = "yakisoba katsu" @@ -321,6 +342,7 @@ tastes = list("fried noodles" = 1, "meat" = 1, "breadcrumbs" = 1, "veggies" = 1) foodtypes = MEAT | VEGETABLES | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/martian_fried_noodles name = "\improper Martian fried noodles" @@ -335,6 +357,7 @@ tastes = list("noodles" = 1, "meat" = 1, "nuts" = 1, "onion" = 1, "egg" = 1) foodtypes = GRAIN | NUTS | MEAT | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/simple_fried_noodles name = "simple fried noodles" @@ -349,6 +372,7 @@ tastes = list("noodles" = 1, "soy sauce" = 1) foodtypes = GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/salad/simple_fried_noodles/Initialize(mapload) . = ..() @@ -369,6 +393,7 @@ tastes = list("masterful curry" = 1, "rice" = 1) foodtypes = GRAIN | MEAT | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_5 //Extensive and secretly guarded. Was previously 2 and I thought it was pathetic. // Burgers and Sandwiches /obj/item/food/burger/big_blue @@ -384,6 +409,7 @@ 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 + crafting_complexity = FOOD_COMPLEXITY_4 //It's THE big blue, Baby! /obj/item/food/burger/chappy name = "\improper Chappy patty" @@ -397,6 +423,7 @@ tastes = list("bun" = 1, "fried pork" = 2, "egg" = 1, "cheese" = 1, "ketchup" = 1) foodtypes = MEAT | GRAIN | DAIRY | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/king_katsu_sandwich name = "\improper King Katsu sandwich" @@ -412,6 +439,7 @@ tastes = list("meat" = 1, "bacon" = 1, "kimchi" = 1, "salad" = 1, "rice bread" = 1) foodtypes = MEAT | GRAIN | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/marte_cubano_sandwich name = "\improper Marte Cubano sandwich" @@ -426,6 +454,7 @@ tastes = list("bacon" = 1, "pickles" = 1, "cheese" = 1, "rice bread" = 1) foodtypes = MEAT | DAIRY | VEGETABLES | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/little_shiro_sandwich name = "\improper Little Shiro sandwich" @@ -441,6 +470,7 @@ tastes = list("egg" = 1, "meat" = 1, "kimchi" = 1, "mozzarella" = 1) foodtypes = MEAT | DAIRY | VEGETABLES | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/croque_martienne name = "croque-martienne" @@ -455,6 +485,7 @@ tastes = list("egg" = 1, "toast" = 1, "pork" = 1, "pineapple" = 1, "cheese" = 1) foodtypes = MEAT | DAIRY | VEGETABLES | GRAIN | PINEAPPLE | BREAKFAST w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/prospect_sunrise name = "\improper Prospect Sunrise" @@ -469,6 +500,7 @@ tastes = list("egg" = 1, "toast" = 1, "bacon" = 1, "pickles" = 1, "cheese" = 1) foodtypes = MEAT | DAIRY | VEGETABLES | GRAIN | BREAKFAST w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 // Snacks /obj/item/food/takoyaki @@ -484,6 +516,7 @@ tastes = list("octopus" = 1, "batter" = 1, "onion" = 1, "worcestershire sauce" = 1) foodtypes = SEAFOOD | GRAIN | FRIED | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/takoyaki/russian name = "russian takoyaki" @@ -498,6 +531,7 @@ tastes = list("octopus" = 1, "batter" = 1, "onion" = 1, "chilli heat" = 1) foodtypes = SEAFOOD | GRAIN | FRIED | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/takoyaki/taco name = "tacoyaki" @@ -512,6 +546,7 @@ tastes = list("taco meat" = 1, "batter" = 1, "corn" = 1, "cheese" = 1) foodtypes = MEAT | GRAIN | FRIED | VEGETABLES | DAIRY w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 //Batter AND Cargo ingredients. /obj/item/food/okonomiyaki name = "okonomiyaki" @@ -525,6 +560,7 @@ tastes = list("batter" = 1, "cabbage" = 1, "onion" = 1, "worcestershire sauce" = 1) foodtypes = SEAFOOD | GRAIN | FRIED | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 //Cargo stuff and batter. //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) @@ -545,6 +581,7 @@ tastes = list("spicy cabbage" = 1, "sausage" = 1) foodtypes = MEAT | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/tonkatsuwurst name = "tonkatsuwurst" @@ -559,6 +596,7 @@ tastes = list("sausage" = 1, "spicy sauce" = 1, "fries" = 1) foodtypes = MEAT | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 //Cargo ingredients and a few steps. /obj/item/food/kebab/ti_hoeh_koe name = "ti hoeh koe skewer" @@ -573,6 +611,7 @@ tastes = list("blood" = 1, "nuts" = 1, "herbs" = 1) foodtypes = MEAT | NUTS | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/kitzushi name = "kitzushi" @@ -587,6 +626,7 @@ tastes = list("rice" = 1, "tofu" = 1, "chilli cheese" = 1) foodtypes = GRAIN | FRIED | VEGETABLES | DAIRY w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/epok_epok name = "epok-epok" @@ -600,6 +640,7 @@ tastes = list("curry" = 1, "egg" = 1, "pastry" = 1) foodtypes = GRAIN | MEAT | VEGETABLES | FRIED w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/roti_john name = "roti john" @@ -614,6 +655,7 @@ tastes = list("bread" = 1, "egg" = 1, "meat" = 1, "onion" = 1) foodtypes = GRAIN | MEAT | VEGETABLES | FRIED | BREAKFAST w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/izakaya_fries name = "izakaya fries" @@ -629,6 +671,7 @@ tastes = list("fries" = 1, "mars" = 1) foodtypes = VEGETABLES | FRIED w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 //Extra complexity due to cargo ingredient. /obj/item/food/kurry_ok_subsando name = "kurry-ok subsando" @@ -643,6 +686,7 @@ tastes = list("bread" = 1, "spicy fries" = 1, "mayonnaise" = 1, "curry" = 1, "meat" = 1) foodtypes = MEAT | GRAIN | VEGETABLES | FRIED w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/loco_moco name = "loco moco" @@ -656,6 +700,7 @@ tastes = list("rice" = 1, "burger" = 1, "gravy" = 1, "egg" = 1) foodtypes = MEAT | GRAIN | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/wild_duck_fries name = "wild duck fries" @@ -671,6 +716,7 @@ tastes = list("fries" = 1, "duck" = 1, "ketchup" = 1, "mayo" = 1, "spicy seasoning" = 1) foodtypes = MEAT | VEGETABLES | FRIED w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 //Requires a complex 3 as an ingredient. /obj/item/food/little_hawaii_hotdog name = "\improper Little Hawaii hotdog" @@ -685,6 +731,7 @@ tastes = list("sausage" = 1, "pineapple" = 1, "onion" = 1, "teriyaki" = 1) foodtypes = MEAT | VEGETABLES | FRUIT | PINEAPPLE w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/salt_chilli_fries name = "salt n' chilli fries" @@ -700,6 +747,7 @@ tastes = list("fries" = 1, "garlic" = 1, "ginger" = 1, "numbing heat" = 1, "salt" = 1) foodtypes = VEGETABLES | FRIED w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/grilled_octopus name = "grilled octopus tentacle" @@ -713,6 +761,7 @@ tastes = list("octopus" = 1) foodtypes = SEAFOOD | FRIED w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/steak_croquette name = "steak croquette" @@ -726,6 +775,7 @@ tastes = list("steak" = 1, "potato" = 1) foodtypes = MEAT | VEGETABLES | FRIED w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/chapsilog name = "chapsilog" @@ -741,6 +791,7 @@ tastes = list("ham" = 1, "garlic rice" = 1, "egg" = 1) foodtypes = MEAT | GRAIN | VEGETABLES | BREAKFAST w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/chap_hash name = "chap hash" @@ -755,6 +806,7 @@ tastes = list("ham" = 1, "onion" = 1, "pepper" = 1, "potato" = 1) foodtypes = MEAT | VEGETABLES | BREAKFAST w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/agedashi_tofu name = "agedashi tofu" @@ -769,6 +821,7 @@ tastes = list("umami broth" = 1, "tofu" = 1) foodtypes = SEAFOOD | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 // Curries and Stews /obj/item/food/salad/po_kok_gai @@ -784,6 +837,7 @@ tastes = list("chicken" = 1, "coconut" = 1, "curry" = 1) foodtypes = MEAT | VEGETABLES | FRUIT w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/huoxing_tofu name = "\improper Huoxing tofu" @@ -799,6 +853,7 @@ tastes = list("meat" = 1, "chilli heat" = 1, "tofu" = 1) foodtypes = MEAT | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/feizhou_ji name = "fēizhōu jī" @@ -813,6 +868,8 @@ tastes = list("chicken" = 1, "chilli heat" = 1, "vinegar" = 1) foodtypes = MEAT | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 + /obj/item/food/salad/galinha_de_cabidela name = "galinha de cabidela" @@ -826,6 +883,7 @@ tastes = list("chicken" = 1, "iron" = 1, "vinegar" = 1, "rice" = 1) foodtypes = MEAT | VEGETABLES | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/katsu_curry name = "katsu curry" @@ -839,6 +897,7 @@ tastes = list("curry" = 1, "meat" = 1, "breadcrumbs" = 1, "rice" = 1) foodtypes = MEAT | VEGETABLES | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/beef_bowl name = "beef bowl" @@ -853,6 +912,7 @@ 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 + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/salt_chilli_bowl name = "salt n' chilli octopus bowl" @@ -869,6 +929,7 @@ tastes = list("seafood" = 1, "rice" = 1, "garlic" = 1, "ginger" = 1, "numbing heat" = 1, "salt" = 1) foodtypes = SEAFOOD | VEGETABLES | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 //A few Cargo ingredients /obj/item/food/salad/kansai_bowl name = "\improper Kansai bowl" @@ -883,6 +944,7 @@ tastes = list("seafood" = 1, "rice" = 1, "egg" = 1, "onion" = 1) foodtypes = SEAFOOD | MEAT | VEGETABLES | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/eigamudo_curry //curry is meant to be really spicy or kinda mild, this just stinks! name = "\improper Eigamudo curry" @@ -897,6 +959,7 @@ tastes = list("grit" = 1, "slime" = 1, "gristle" = 1, "rice" = 1, "Mystery Food X" = 1) foodtypes = GROSS | GRAIN | TOXIC w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 // Entrees /obj/item/food/cilbir @@ -914,6 +977,7 @@ tastes = list("yoghurt" = 1, "garlic" = 1, "lemon" = 1, "egg" = 1, "chilli heat" = 1) foodtypes = DAIRY | VEGETABLES | FRUIT | BREAKFAST w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/peking_duck_crepes name = "\improper Peking duck crepes a l'orange" @@ -929,6 +993,7 @@ tastes = list("meat" = 1, "crepes" = 1, "orange" = 1) foodtypes = MEAT | DAIRY | VEGETABLES | FRUIT w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 // Desserts /obj/item/food/cake/spekkoek @@ -942,6 +1007,7 @@ ) tastes = list("winter spices" = 2, "ambrosia vulgaris" = 2, "cake" = 5) foodtypes = GRAIN | SUGAR | DAIRY + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cake/spekkoek/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/spekkoek, 5, 3 SECONDS, table_required = TRUE) @@ -953,6 +1019,7 @@ icon_state = "spekkoek_slice" tastes = list("winter spices" = 2, "ambrosia vulgaris" = 2, "cake" = 5) foodtypes = GRAIN | SUGAR | DAIRY + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/pineapple_foster name = "pineapple foster" @@ -969,6 +1036,7 @@ tastes = list("pineapple" = 1, "vanilla" = 1, "caramel" = 1, "ice cream" = 1) foodtypes = FRUIT | DAIRY | PINEAPPLE w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pastel_de_nata name = "pastel de nata" @@ -983,6 +1051,7 @@ tastes = list("custard" = 1, "vanilla" = 1, "sweet pastry" = 1) foodtypes = DAIRY | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/boh_loh_yah name = "boh loh yah" @@ -996,6 +1065,7 @@ tastes = list("cookie" = 1, "butter" = 1) foodtypes = DAIRY | GRAIN | PINEAPPLE //it's funny w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/banana_fritter name = "banana fritter" @@ -1010,6 +1080,7 @@ tastes = list("banana" = 1, "batter" = 1) foodtypes = GRAIN | FRUIT | FRIED w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 //Fried goodness, oil scawy. /obj/item/food/pineapple_fritter name = "pineapple fritter" @@ -1024,6 +1095,7 @@ tastes = list("pineapple" = 1, "batter" = 1) foodtypes = GRAIN | FRUIT | FRIED | PINEAPPLE w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/kebab/kasei_dango name = "kasei dango" @@ -1039,6 +1111,7 @@ tastes = list("pomegranate" = 1, "orange" = 1) foodtypes = FRUIT | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 // Frozen /obj/item/food/pb_ice_cream_mochi @@ -1055,6 +1128,7 @@ tastes = list("peanut butter" = 1, "mochi" = 1) foodtypes = NUTS | GRAIN | DAIRY | SUGAR w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/popsicle/pineapple_pop name = "frozen pineapple pop" @@ -1068,6 +1142,7 @@ ) tastes = list("cold pineapple" = 1, "chocolate" = 1) foodtypes = SUGAR | PINEAPPLE + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/popsicle/sea_salt name = "sea salt ice-cream bar" @@ -1082,6 +1157,7 @@ ) tastes = list("salt" = 1, "sweet" = 1) foodtypes = SUGAR | DAIRY + crafting_complexity = FOOD_COMPLEXITY_3 // topsicles, also known as tofu popsicles /obj/item/food/popsicle/topsicle @@ -1095,6 +1171,7 @@ ) tastes = list("berry" = 1, "tofu" = 1) foodtypes = FRUIT | VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/popsicle/topsicle/banana name = "banana topsicle" @@ -1132,6 +1209,7 @@ tastes = list("sausage" = 1, "relish" = 1, "onion" = 1, "fruity salsa" = 1) foodtypes = FRUIT | MEAT | PINEAPPLE | VEGETABLES | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 //Uses Sambal /obj/item/food/frickles name = "frickles" @@ -1146,6 +1224,7 @@ tastes = list("frickles" = 1) foodtypes = VEGETABLES | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 //batter and cargo stuff. /obj/item/food/raw_ballpark_pretzel name = "raw pretzel" @@ -1159,6 +1238,7 @@ tastes = list("bread" = 1, "salt" = 1) foodtypes = GRAIN | RAW w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/raw_ballpark_pretzel/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/ballpark_pretzel, rand(15 SECONDS, 25 SECONDS), TRUE, TRUE) @@ -1178,6 +1258,7 @@ tastes = list("bread" = 1, "salt" = 1) foodtypes = GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/kebab/raw_ballpark_tsukune name = "raw tsukune" @@ -1191,6 +1272,7 @@ tastes = list("raw chicken" = 7, "salmonella" = 1) foodtypes = MEAT | RAW w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /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) @@ -1207,6 +1289,7 @@ tastes = list("chicken" = 1, "umami sauce" = 1) foodtypes = MEAT w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 // Ethereal-suitable cross-culture food /* Ethereals are, as part of the uplifting process, considered as citizens of the Terran Federation. @@ -1228,6 +1311,7 @@ tastes = list("sour radish" = 1) foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 //If it comes straight from cargo, should be worth paying for. // 24-Volt Energy /obj/item/food/volt_fish @@ -1242,6 +1326,7 @@ tastes = list("fish" = 1, "sour pear" = 1) foodtypes = SEAFOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 // Sprout Bowl /obj/item/food/salad/sprout_bowl @@ -1257,3 +1342,4 @@ tastes = list("fish" = 1, "sour radish" = 1, "rice" = 1) foodtypes = SEAFOOD | VEGETABLES | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 diff --git a/code/game/objects/items/food/meatdish.dm b/code/game/objects/items/food/meatdish.dm index 2d376148045286..b928a460abb18d 100644 --- a/code/game/objects/items/food/meatdish.dm +++ b/code/game/objects/items/food/meatdish.dm @@ -939,6 +939,138 @@ venue_value = FOOD_PRICE_NORMAL crafting_complexity = FOOD_COMPLEXITY_5 +/obj/item/food/korta_wellington + name = "Kotra wellington" + desc = "A luxurious log of beef, covered in a fine mushroom duxelle and pancetta ham, then bound in korta pastry." + icon = 'icons/obj/food/meat.dmi' + icon_state = "korta_wellington" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 21, + /datum/reagent/consumable/nutriment/vitamin = 6, + ) + tastes = list("beef" = 3, "mushrooms" = 1, "pancetta" = 1) + foodtypes = MEAT | VEGETABLES | NUTS + w_class = WEIGHT_CLASS_NORMAL + venue_value = FOOD_PRICE_EXOTIC + crafting_complexity = FOOD_COMPLEXITY_5 + +/obj/item/food/korta_wellington/make_processable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/korta_wellington_slice, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut") + +/obj/item/food/korta_wellington_slice + name = "korta wellington slice" + desc = "A slice of korta & beef wellington, topped with a rich gravy. Simply delicious." + icon = 'icons/obj/food/meat.dmi' + icon_state = "korta_wellington_slice" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 7, + /datum/reagent/consumable/nutriment/vitamin = 2, + ) + tastes = list("beef" = 3, "mushrooms" = 1, "pancetta" = 1) + foodtypes = MEAT | VEGETABLES | NUTS + w_class = WEIGHT_CLASS_SMALL + venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_5 + +/obj/item/food/roast_dinner + name = "roast dinner" + desc = "A luxuriously roasted chicken, accompanied by cabbage, parsnip, potatoes, peas, stuffing and a small boat of gravy." + icon = 'icons/obj/food/meat.dmi' + icon_state = "full_roast" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 21, + /datum/reagent/consumable/nutriment/vitamin = 6, + ) + tastes = list("chicken" = 3, "vegetables" = 1, "gravy" = 1) + foodtypes = MEAT | VEGETABLES | GRAIN + w_class = WEIGHT_CLASS_NORMAL + venue_value = FOOD_PRICE_EXOTIC + crafting_complexity = FOOD_COMPLEXITY_5 + +/obj/item/food/roast_dinner/make_processable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/roast_slice, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut") + +/obj/item/food/roast_slice + name = "plate of roast dinner" + desc = "A small plate of roast chicken, peas, cabbage, parsnips, potatoes, stuffing and... WAIT is this all the gravy I get?!" + icon = 'icons/obj/food/meat.dmi' + icon_state = "roast_slice" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 7, + /datum/reagent/consumable/nutriment/vitamin = 2, + ) + tastes = list("chicken" = 3, "vegetables" = 1, "gravy" = 1) + foodtypes = MEAT | VEGETABLES | GRAIN + w_class = WEIGHT_CLASS_SMALL + venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_5 + +/obj/item/food/roast_dinner_lizzy + name = "grain-free roast dinner" + desc = "A luxuriously roasted chicken, accompanied by cabbage, parsnip, potatoes, peas, korta stuffing and a small boat of korta-blood gravy." + icon = 'icons/obj/food/meat.dmi' + icon_state = "full_roast_lizzy" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 21, + /datum/reagent/consumable/nutriment/vitamin = 6, + ) + tastes = list("chicken" = 3, "vegetables" = 1, "gravy" = 1) + foodtypes = MEAT | VEGETABLES | NUTS + w_class = WEIGHT_CLASS_NORMAL + venue_value = FOOD_PRICE_EXOTIC + crafting_complexity = FOOD_COMPLEXITY_5 + +/obj/item/food/roast_dinner_lizzy/make_processable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/roast_slice_lizzy, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut") + +/obj/item/food/roast_slice_lizzy + name = "plate of grain-free roast dinner" + desc = "A small plate of roast chicken, peas, cabbage, parsnips, potatoes, korta stuffing and... WAIT is this all the korta-blood gravy I get?!" + icon = 'icons/obj/food/meat.dmi' + icon_state = "roast_slice_lizzy" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 7, + /datum/reagent/consumable/nutriment/vitamin = 2, + ) + tastes = list("chicken" = 3, "vegetables" = 1, "gravy" = 1) + foodtypes = MEAT | VEGETABLES | NUTS + w_class = WEIGHT_CLASS_SMALL + venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_5 + +/obj/item/food/roast_dinner_tofu + name = "tofu roast dinner" + desc = "A luxuriously roasted tofu-'chicken', accompanied by cabbage, parsnip, potatoes, peas, stuffing and a small boat of soybased gravy." + icon = 'icons/obj/food/meat.dmi' + icon_state = "full_roast_tofu" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 21, + /datum/reagent/consumable/nutriment/vitamin = 6, + ) + tastes = list("tofu" = 3, "vegetables" = 1, "gravy" = 1) + foodtypes = GRAIN | VEGETABLES + w_class = WEIGHT_CLASS_NORMAL + venue_value = FOOD_PRICE_EXOTIC + crafting_complexity = FOOD_COMPLEXITY_5 + +/obj/item/food/roast_dinner_tofu/make_processable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/roast_slice_tofu, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut") + +/obj/item/food/roast_slice_tofu + name = "plate of tofu roast dinner" + desc = "A small plate of roast tofu-'chicken', peas, cabbage, parsnips, potatoes, stuffing and... WAIT is this all the soy gravy I get?!" + icon = 'icons/obj/food/meat.dmi' + icon_state = "roast_slice_tofu" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 7, + /datum/reagent/consumable/nutriment/vitamin = 2, + ) + tastes = list("tofu" = 3, "vegetables" = 1, "gravy" = 1) + foodtypes = GRAIN | VEGETABLES + w_class = WEIGHT_CLASS_SMALL + venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_5 + /obj/item/food/full_english name = "full english breakfast" desc = "A hearty plate with all the trimmings, representing the pinnacle of the breakfast art." diff --git a/code/game/objects/items/food/mexican.dm b/code/game/objects/items/food/mexican.dm index b4e32587bc6f5b..396e351ff4bde6 100644 --- a/code/game/objects/items/food/mexican.dm +++ b/code/game/objects/items/food/mexican.dm @@ -305,6 +305,7 @@ /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/consumable/nutriment/protein = 4, ) + trash_type = /obj/item/reagent_containers/cup/bowl tastes = list("mashed beans" = 1, "onion" = 3,) foodtypes = VEGETABLES | FRIED w_class = WEIGHT_CLASS_SMALL @@ -319,6 +320,7 @@ /datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/vitamin = 6, ) + trash_type = /obj/item/reagent_containers/cup/bowl tastes = list("zesty rice" = 1, "tomato sauce" = 3,) foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL diff --git a/code/game/objects/items/food/misc.dm b/code/game/objects/items/food/misc.dm index 2b157181023a04..da07843dec3581 100644 --- a/code/game/objects/items/food/misc.dm +++ b/code/game/objects/items/food/misc.dm @@ -432,6 +432,18 @@ . = ..() AddComponent(/datum/component/customizable_reagent_holder, /obj/item/food/sushi/empty, CUSTOM_INGREDIENT_ICON_FILL, max_ingredients = 6) +/obj/item/food/seaweedsheet/saltcane + name = "dried saltcane sheathe" + desc = "A dried sheet of saltcane sheathe can used for making sushi. Use an ingredient on it to start making custom sushi!" + icon_state = "seaweedsheet" + food_reagents = list( + /datum/reagent/consumable/nutriment = 1, + /datum/reagent/consumable/nutriment/vitamin = 1, + ) + tastes = list("seaweed" = 1) + foodtypes = VEGETABLES + w_class = WEIGHT_CLASS_SMALL + /obj/item/food/granola_bar name = "granola bar" desc = "A dried mixture of oats, nuts, fruits, and chocolate condensed into a chewy bar. Makes a great snack while space-hiking." diff --git a/code/game/objects/items/food/monkeycube.dm b/code/game/objects/items/food/monkeycube.dm index a364a251a83443..f4fccd47fee15a 100644 --- a/code/game/objects/items/food/monkeycube.dm +++ b/code/game/objects/items/food/monkeycube.dm @@ -93,7 +93,7 @@ /obj/item/food/monkeycube/chicken name = "chicken cube" - desc = "A new Nanotrasen classic, the chicken cube. Tastes like everything!" + desc = "A new Symphionia classic, the chicken cube. Tastes like everything!" bite_consumption = 20 food_reagents = list( /datum/reagent/consumable/eggyolk = 30, diff --git a/code/game/objects/items/food/moth.dm b/code/game/objects/items/food/moth.dm index 41c2d8ec3a1662..df9207da7e03b7 100644 --- a/code/game/objects/items/food/moth.dm +++ b/code/game/objects/items/food/moth.dm @@ -239,7 +239,7 @@ tastes = list("rice" = 1, "potato" = 1, "veggies" = 1) foodtypes = VEGETABLES | GRAIN w_class = WEIGHT_CLASS_NORMAL - crafting_complexity = FOOD_COMPLEXITY_1 + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/big_baked_rice/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/lil_baked_rice, 6, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut") @@ -256,7 +256,7 @@ tastes = list("rice" = 1, "potato" = 1, "veggies" = 1) foodtypes = VEGETABLES | GRAIN w_class = WEIGHT_CLASS_SMALL - crafting_complexity = FOOD_COMPLEXITY_1 + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/oven_baked_corn name = "oven-baked corn" diff --git a/code/game/objects/items/food/packaged.dm b/code/game/objects/items/food/packaged.dm index 1dabec57cdd1a2..820b10927f619d 100644 --- a/code/game/objects/items/food/packaged.dm +++ b/code/game/objects/items/food/packaged.dm @@ -125,7 +125,7 @@ return apply_buff(target, user) -///This proc checks if the mob is able to recieve the buff. +///This proc checks if the mob is able to receive the buff. /obj/item/food/canned/envirochow/proc/check_buffability(mob/living/hungry_pet) if(!isanimal_or_basicmob(hungry_pet)) // Not a pet return FALSE diff --git a/code/game/objects/items/food/pastries.dm b/code/game/objects/items/food/pastries.dm index 8a39f6df8d1325..dfebfd356cb099 100644 --- a/code/game/objects/items/food/pastries.dm +++ b/code/game/objects/items/food/pastries.dm @@ -186,9 +186,9 @@ foodtypes = GRAIN | JUNKFOOD | SUGAR crafting_complexity = FOOD_COMPLEXITY_2 -/obj/item/food/cookie/sugar/Initialize(mapload) +/obj/item/food/cookie/sugar/Initialize(mapload, seasonal_changes = TRUE) . = ..() - if(check_holidays(FESTIVE_SEASON)) + if(seasonal_changes && check_holidays(FESTIVE_SEASON)) var/shape = pick("tree", "bear", "santa", "stocking", "present", "cane") desc = "A sugar cookie in the shape of a [shape]. I hope Santa likes it!" icon_state = "sugarcookie_[shape]" diff --git a/code/game/objects/items/food/sweets.dm b/code/game/objects/items/food/sweets.dm index 6805af35db613e..5c638077d16c54 100644 --- a/code/game/objects/items/food/sweets.dm +++ b/code/game/objects/items/food/sweets.dm @@ -232,7 +232,6 @@ metabolization_amount = REAGENTS_METABOLISM /obj/item/food/bubblegum/bubblegum/process() - . = ..() if(iscarbon(loc)) hallucinate(loc) @@ -346,3 +345,24 @@ /obj/item/food/spiderlollipop/Initialize(mapload) . = ..() AddElement(/datum/element/chewable) + +/obj/item/food/swirl_lollipop + name = "swirl lollipop" + desc = "A massive rainbow swirlled lollipop. Said to contain extra sugar." + icon_state = "swirl_lollipop" + worn_icon_state = "lollipop_stick" + inhand_icon_state = "swirl_lollipop" + food_reagents = list( + /datum/reagent/consumable/sugar = 30, + /datum/reagent/drug/happiness = 5, //swirl lollipops make everyone happy! + /datum/reagent/medicine/omnizine = 2, + ) + tastes = list("whimsical joy" = 1, "sugar" = 2) + foodtypes = JUNKFOOD | SUGAR + food_flags = FOOD_FINGER_FOOD + slot_flags = ITEM_SLOT_MASK + crafting_complexity = FOOD_COMPLEXITY_1 + +/obj/item/food/swirl_lollipop/Initialize(mapload) + . = ..() + AddElement(/datum/element/chewable) diff --git a/code/game/objects/items/frog_statue.dm b/code/game/objects/items/frog_statue.dm new file mode 100644 index 00000000000000..4d1bf9b6aa595e --- /dev/null +++ b/code/game/objects/items/frog_statue.dm @@ -0,0 +1,165 @@ +#define STATUE_FILTER "statue_filter" +#define FILTER_COLOR "#34b347" +#define RECALL_DURATION 3 SECONDS +#define MINIMUM_COLOR_VALUE 60 + +/obj/item/frog_statue + name = "frog statue" + desc = "Are they really comfortable living in this thing?" + icon = 'icons/obj/weapons/guns/magic.dmi' + icon_state = "frog_statue" + item_flags = NOBLUDGEON + ///our pet frog + var/mob/living/contained_frog + ///the summon cooldown + COOLDOWN_DECLARE(summon_cooldown) + +/obj/item/frog_statue/attack_self(mob/user) + . = ..() + + if(.) + return TRUE + + if(!COOLDOWN_FINISHED(src, summon_cooldown)) + user.balloon_alert(user, "recharging!") + return TRUE + + COOLDOWN_START(src, summon_cooldown, 30 SECONDS) + if(isnull(contained_frog)) + user.balloon_alert(user, "no frog linked!") + return TRUE + if(contained_frog.loc == src) + release_frog(user) + return TRUE + recall_frog(user) + return TRUE + +/obj/item/frog_statue/examine(mob/user) + . = ..() + if(!IS_WIZARD(user)) + return + if(isnull(contained_frog)) + . += span_notice("There are currently no frogs linked to this statue!") + else + . += span_notice("Using it will [contained_frog in src ? "release" : "recall"] the beast!") + +///resummon the frog into its home +/obj/item/frog_statue/proc/recall_frog(mob/user) + playsound(src, 'sound/items/frog_statue_release.ogg', 20) + user.Beam(contained_frog, icon_state = "lichbeam", time = RECALL_DURATION) + animate(contained_frog, transform = matrix().Scale(0.3, 0.3), time = RECALL_DURATION) + addtimer(CALLBACK(contained_frog, TYPE_PROC_REF(/atom/movable, forceMove), src), RECALL_DURATION) + +///release the frog to wreak havoc +/obj/item/frog_statue/proc/release_frog(mob/user) + var/list/possible_turfs = list() + for(var/turf/possible_turf in oview(2, user)) + if(possible_turf.is_blocked_turf() || isopenspaceturf(possible_turf)) + continue + possible_turfs += possible_turf + playsound(src, 'sound/items/frog_statue_release.ogg', 50, TRUE) + var/turf/final_turf = length(possible_turfs) ? pick(possible_turfs) : get_turf(src) + user.Beam(final_turf, icon_state = "lichbeam", time = RECALL_DURATION) + contained_frog.forceMove(final_turf) + animate(contained_frog, transform = matrix(), time = RECALL_DURATION) + REMOVE_TRAIT(contained_frog, TRAIT_AI_PAUSED, MAGIC_TRAIT) + +///set this frog as our inhabitor +/obj/item/frog_statue/proc/set_new_frog(mob/living/frog) + frog.transform = frog.transform.Scale(0.3, 0.3) + contained_frog = frog + animate_filter() + RegisterSignal(frog, COMSIG_QDELETING, PROC_REF(render_obsolete)) + +/// we have lost our frog, let out a scream! +/obj/item/frog_statue/proc/render_obsolete(datum/source) + SIGNAL_HANDLER + + contained_frog = null + playsound(src, 'sound/magic/demon_dies.ogg', 50, TRUE) + UnregisterSignal(source, COMSIG_QDELETING) + +/obj/item/frog_statue/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + . = ..() + if(arrived != contained_frog) + return + animate_filter() + ADD_TRAIT(contained_frog, TRAIT_AI_PAUSED, MAGIC_TRAIT) + if(contained_frog.health < contained_frog.maxHealth) + START_PROCESSING(SSobj, src) + +/obj/item/frog_statue/process(seconds_per_tick) + if(isnull(contained_frog)) + return + if(contained_frog.health == contained_frog.maxHealth) + STOP_PROCESSING(SSobj, src) + return + if(contained_frog.stat == DEAD) + contained_frog.revive() + contained_frog.adjustBruteLoss(-5) + +/obj/item/frog_statue/proc/animate_filter(mob/living/frog) + add_filter(STATUE_FILTER, 2, list("type" = "outline", "color" = FILTER_COLOR, "size" = 1)) + var/filter = get_filter(STATUE_FILTER) + animate(filter, alpha = 230, time = 2 SECONDS, loop = -1) + animate(alpha = 30, time = 0.5 SECONDS) + +/obj/item/frog_statue/Exited(atom/movable/gone, direction) + . = ..() + if(gone != contained_frog) + return + clear_filters() + +/obj/item/frog_contract + name = "frog contract" + desc = "Create a pact with an elder frog! This great beast will be your mount, protector, but most importantly your friend." + icon = 'icons/obj/scrolls.dmi' + icon_state = "scroll" + +/obj/item/frog_contract/attack_self(mob/user) + . = ..() + if(.) + return TRUE + create_frog(user) + return TRUE + +///customize our own frog and trap it into the statue +/obj/item/frog_contract/proc/create_frog(mob/user) + var/obj/item/frog_statue/statue = new(null) + var/mob/living/basic/leaper/new_frog = new(statue) + statue.set_new_frog(new_frog) + new_frog.befriend(user) + ADD_TRAIT(new_frog, TRAIT_AI_PAUSED, MAGIC_TRAIT) + select_frog_name(user, new_frog) + select_frog_color(user, new_frog) + user.put_in_hands(statue) + qdel(src) + + + +/obj/item/frog_contract/proc/select_frog_name(mob/user, mob/new_frog) + var/frog_name = sanitize_name(tgui_input_text(user, "Choose your frog's name!", "Name pet toad", "leaper", MAX_NAME_LEN), allow_numbers = TRUE) + if(!frog_name) + to_chat(user, span_warning("Please enter a valid name.")) + select_frog_name(user, new_frog) + return + new_frog.name = frog_name + +/obj/item/frog_contract/proc/select_frog_color(mob/user, mob/living/basic/leaper/new_frog) + var/frog_color = input(user, "Select your frog's color!" , "Pet toad color", COLOR_GREEN) as color|null + if(isnull(frog_color)) + to_chat(user, span_warning("Please choose a valid color.")) + select_frog_color(user, new_frog) + return + var/temp_hsv = RGBtoHSV(frog_color) + if(ReadHSV(temp_hsv)[3] < MINIMUM_COLOR_VALUE) + to_chat(user, span_danger("This color is too dark!")) + select_frog_color(user, new_frog) + return + new_frog.set_color_overlay(frog_color) + + +#undef STATUE_FILTER +#undef FILTER_COLOR +#undef RECALL_DURATION +#undef MINIMUM_COLOR_VALUE diff --git a/code/game/objects/items/gift.dm b/code/game/objects/items/gift.dm index 324151feddb92b..866945d9440f78 100644 --- a/code/game/objects/items/gift.dm +++ b/code/game/objects/items/gift.dm @@ -1,16 +1,10 @@ -/* Gifts and wrapping paper +/* Gifts * Contains: * Gifts - * Wrapping Paper */ -/* - * Gifts - */ - -GLOBAL_LIST_EMPTY(possible_gifts) - -/obj/item/a_gift +/// Gifts to give to players, will contain a nice toy or other fun item for them to play with. +/obj/item/gift name = "gift" desc = "PRESENTS!!!! eek!" icon = 'icons/obj/storage/wrapping.dmi' @@ -18,99 +12,112 @@ GLOBAL_LIST_EMPTY(possible_gifts) inhand_icon_state = "gift" resistance_flags = FLAMMABLE - var/obj/item/contains_type + /// What type of thing are we guaranteed to spawn in with? + var/obj/item/contains_type = null -/obj/item/a_gift/Initialize(mapload) +/obj/item/gift/Initialize(mapload) . = ..() pixel_x = rand(-10,10) pixel_y = rand(-10,10) icon_state = "giftdeliverypackage[rand(1,5)]" - contains_type = get_gift_type() + if(isnull(contains_type)) + contains_type = get_gift_type() -/obj/item/a_gift/suicide_act(mob/living/user) +/obj/item/gift/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] peeks inside [src] and cries [user.p_them()]self to death! It looks like [user.p_they()] [user.p_were()] on the naughty list...")) return BRUTELOSS -/obj/item/a_gift/examine(mob/M) +/obj/item/gift/examine(mob/user) . = ..() - if(HAS_MIND_TRAIT(M, TRAIT_PRESENT_VISION) || isobserver(M)) + if(HAS_MIND_TRAIT(user, TRAIT_PRESENT_VISION) || isobserver(user)) . += span_notice("It contains \a [initial(contains_type.name)].") -/obj/item/a_gift/attack_self(mob/M) - if(HAS_MIND_TRAIT(M, TRAIT_CANNOT_OPEN_PRESENTS)) - to_chat(M, span_warning("You're supposed to be spreading gifts, not opening them yourself!")) +/obj/item/gift/attack_self(mob/user) + if(HAS_MIND_TRAIT(user, TRAIT_CANNOT_OPEN_PRESENTS)) + to_chat(user, span_warning("You're supposed to be spreading gifts, not opening them yourself!")) return - qdel(src) + moveToNullspace() + + var/obj/item/thing = new contains_type(get_turf(user)) - var/obj/item/I = new contains_type(get_turf(M)) - if (!QDELETED(I)) //might contain something like metal rods that might merge with a stack on the ground - M.visible_message(span_notice("[M] unwraps \the [src], finding \a [I] inside!")) - M.investigate_log("has unwrapped a present containing [I.type].", INVESTIGATE_PRESENTS) - M.put_in_hands(I) - I.add_fingerprint(M) + if (QDELETED(thing)) //might contain something like metal rods that might merge with a stack on the ground + user.visible_message(span_danger("Oh no! The present that [user] opened had nothing inside it!")) else - M.visible_message(span_danger("Oh no! The present that [M] opened had nothing inside it!")) - -/obj/item/a_gift/proc/get_gift_type() - var/gift_type_list = list(/obj/item/sord, - /obj/item/storage/wallet, - /obj/item/storage/photo_album, - /obj/item/storage/box/snappops, - /obj/item/storage/crayons, - /obj/item/storage/backpack/holding, - /obj/item/storage/belt/champion, - /obj/item/soap/deluxe, - /obj/item/pickaxe/diamond, - /obj/item/pen/invisible, - /obj/item/lipstick/random, - /obj/item/grenade/smokebomb, - /obj/item/grown/corncob, - /obj/item/poster/random_contraband, - /obj/item/poster/random_official, - /obj/item/book/manual/wiki/barman_recipes, - /obj/item/book/manual/chef_recipes, - /obj/item/bikehorn, - /obj/item/toy/beach_ball, - /obj/item/toy/basketball, - /obj/item/banhammer, - /obj/item/food/grown/ambrosia/deus, - /obj/item/food/grown/ambrosia/vulgaris, - /obj/item/pai_card, - /obj/item/instrument/violin, - /obj/item/instrument/guitar, - /obj/item/storage/belt/utility/full, - /obj/item/clothing/neck/tie/horrible, - /obj/item/clothing/suit/jacket/leather, - /obj/item/clothing/suit/jacket/leather/biker, - /obj/item/clothing/suit/costume/poncho, - /obj/item/clothing/suit/costume/poncho/green, - /obj/item/clothing/suit/costume/poncho/red, - /obj/item/clothing/suit/costume/snowman, - /obj/item/clothing/head/costume/snowman, - /obj/item/stack/sheet/mineral/coal) - - gift_type_list += subtypesof(/obj/item/clothing/head/collectable) - gift_type_list += subtypesof(/obj/item/toy) - (((typesof(/obj/item/toy/cards) - /obj/item/toy/cards/deck) + /obj/item/toy/figure + /obj/item/toy/ammo)) //All toys, except for abstract types and syndicate cards. + user.visible_message(span_notice("[user] unwraps \the [src], finding \a [thing] inside!")) + user.investigate_log("has unwrapped a present containing [thing.type].", INVESTIGATE_PRESENTS) + user.put_in_hands(thing) + thing.add_fingerprint(user) - var/gift_type = pick(gift_type_list) + qdel(src) - return gift_type +/obj/item/gift/proc/get_gift_type() + var/static/list/gift_type_list = null + + if(isnull(gift_type_list)) + gift_type_list = list( + /obj/item/banhammer, + /obj/item/bikehorn, + /obj/item/book/manual/chef_recipes, + /obj/item/book/manual/wiki/barman_recipes, + /obj/item/clothing/head/costume/snowman, + /obj/item/clothing/neck/tie/horrible, + /obj/item/clothing/suit/costume/poncho, + /obj/item/clothing/suit/costume/poncho/green, + /obj/item/clothing/suit/costume/poncho/red, + /obj/item/clothing/suit/costume/snowman, + /obj/item/clothing/suit/jacket/leather, + /obj/item/clothing/suit/jacket/leather/biker, + /obj/item/food/grown/ambrosia/deus, + /obj/item/food/grown/ambrosia/vulgaris, + /obj/item/grenade/smokebomb, + /obj/item/grown/corncob, + /obj/item/instrument/guitar, + /obj/item/instrument/violin, + /obj/item/lipstick/random, + /obj/item/pai_card, + /obj/item/pen/invisible, + /obj/item/pickaxe/diamond, + /obj/item/poster/random_contraband, + /obj/item/poster/random_official, + /obj/item/soap/deluxe, + /obj/item/sord, + /obj/item/stack/sheet/mineral/coal, + /obj/item/storage/backpack/holding, + /obj/item/storage/belt/champion, + /obj/item/storage/belt/utility/full, + /obj/item/storage/box/snappops, + /obj/item/storage/crayons, + /obj/item/storage/photo_album, + /obj/item/storage/wallet, + /obj/item/toy/basketball, + /obj/item/toy/beach_ball, + ) + + gift_type_list += subtypesof(/obj/item/clothing/head/collectable) + //Add all toys, except for abstract types and syndicate cards. + gift_type_list += subtypesof(/obj/item/toy) - (((typesof(/obj/item/toy/cards) - /obj/item/toy/cards/deck) + /obj/item/toy/figure + /obj/item/toy/ammo)) + var/gift_type = pick(gift_type_list) + return gift_type -/obj/item/a_gift/anything +/// Gifts that typically only very OP stuff or admins or Santa Claus himself should be giving out, as they contain ANY valid subtype of `/obj/item`, including stuff like instagib rifles. Wow! +/obj/item/gift/anything name = "christmas gift" desc = "It could be anything!" -/obj/item/a_gift/anything/get_gift_type() - if(!GLOB.possible_gifts.len) - var/list/gift_types_list = subtypesof(/obj/item) - for(var/V in gift_types_list) - var/obj/item/I = V - if((!initial(I.icon_state)) || (!initial(I.inhand_icon_state)) || (initial(I.item_flags) & ABSTRACT)) - gift_types_list -= V - GLOB.possible_gifts = gift_types_list - var/gift_type = pick(GLOB.possible_gifts) +/obj/item/gift/anything/get_gift_type() + var/static/list/obj/item/possible_gifts = null + + if(isnull(possible_gifts)) + possible_gifts = list() + for(var/type in subtypesof(/obj/item)) + var/obj/item/thing = type + if(!initial(thing.icon_state) || !initial(thing.inhand_icon_state) || (initial(thing.item_flags) & ABSTRACT)) + continue + + possible_gifts += type + var/gift_type = pick(possible_gifts) return gift_type diff --git a/code/game/objects/items/granters/crafting/rebarxbowsyndie.dm b/code/game/objects/items/granters/crafting/rebarxbowsyndie.dm new file mode 100644 index 00000000000000..fd38d4f4ccb203 --- /dev/null +++ b/code/game/objects/items/granters/crafting/rebarxbowsyndie.dm @@ -0,0 +1,13 @@ +/obj/item/book/granter/crafting_recipe/dusting/rebarxbowsyndie_ammo + name = "SYNDICATE REBAR CROSSBOW OWNERS MANUAL" + desc = "This book will self destruct upon being read a second time." + crafting_recipe_types = list( + /datum/crafting_recipe/rebarsyndie + ) + uses = 1 + remarks = list( + "AIM FOR THE LEGS TO CRIPPLE YOUR FOES", + "USE A ROD AND WIRECUTTERS TO MAKE BETTER AMMO", + "BE AWARE OF THE SCOPE'S BLIND SPOTS", + "READ THIS BOOK AGAIN TO DUST IT.", + ) diff --git a/code/game/objects/items/granters/martial_arts/sleeping_carp.dm b/code/game/objects/items/granters/martial_arts/sleeping_carp.dm index ab3e343b28d6c6..3c66ce8affa153 100644 --- a/code/game/objects/items/granters/martial_arts/sleeping_carp.dm +++ b/code/game/objects/items/granters/martial_arts/sleeping_carp.dm @@ -4,7 +4,7 @@ martial_name = "sleeping carp" desc = "A scroll filled with strange markings. It seems to be drawings of some sort of martial art." greet = "You have learned the ancient martial art of the Sleeping Carp! Your hand-to-hand combat has become much more effective, and you are now able to deflect any projectiles \ - directed toward you while in Throw Mode. Your body has also hardened itself, granting extra protection against lasting wounds that would otherwise mount during extended combat. \ + directed toward you while in Combat Mode. Your body has also hardened itself, granting extra protection against lasting wounds that would otherwise mount during extended combat. \ However, you are also unable to use any ranged weaponry. You can learn more about your newfound art by using the Recall Teachings verb in the Sleeping Carp tab." icon = 'icons/obj/scrolls.dmi' icon_state = "sleepingcarp" diff --git a/code/game/objects/items/grenades/_grenade.dm b/code/game/objects/items/grenades/_grenade.dm index 9fde5723f45f1f..bb1cade96b83b9 100644 --- a/code/game/objects/items/grenades/_grenade.dm +++ b/code/game/objects/items/grenades/_grenade.dm @@ -13,7 +13,8 @@ righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' throw_speed = 3 throw_range = 7 - flags_1 = CONDUCT_1 | PREVENT_CONTENTS_EXPLOSION_1 // We detonate upon being exploded. + flags_1 = PREVENT_CONTENTS_EXPLOSION_1 // We detonate upon being exploded. + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT resistance_flags = FLAMMABLE max_integrity = 40 diff --git a/code/game/objects/items/grenades/chem_grenade.dm b/code/game/objects/items/grenades/chem_grenade.dm index 49304446c0ba69..2c01ad53edee99 100644 --- a/code/game/objects/items/grenades/chem_grenade.dm +++ b/code/game/objects/items/grenades/chem_grenade.dm @@ -295,7 +295,7 @@ if(istype(thing, /obj/item/slime_extract)) var/obj/item/slime_extract/extract = thing - if(!extract.Uses) + if(!extract.extract_uses) continue extract_total_volume += extract.reagents.total_volume @@ -313,11 +313,11 @@ var/container_ratio = available_extract_volume / beaker_total_volume var/datum/reagents/tmp_holder = new/datum/reagents(beaker_total_volume) for(var/obj/item/container as anything in other_containers) - container.reagents.trans_to(tmp_holder, container.reagents.total_volume * container_ratio, 1, preserve_data = TRUE, no_react = TRUE) + container.reagents.trans_to(tmp_holder, container.reagents.total_volume * container_ratio, no_react = TRUE) for(var/obj/item/slime_extract/extract as anything in extracts) var/available_volume = extract.reagents.maximum_volume - extract.reagents.total_volume - tmp_holder.trans_to(extract, beaker_total_volume * (available_volume / available_extract_volume), 1, preserve_data = TRUE, no_react = TRUE) + tmp_holder.trans_to(extract, beaker_total_volume * (available_volume / available_extract_volume), no_react = TRUE) extract.reagents.handle_reactions() // Reaction handling in the transfer proc is reciprocal and we don't want to blow up the tmp holder early. if(QDELETED(extract)) @@ -390,7 +390,12 @@ var/datum/reagents/reactants = new(unit_spread) reactants.my_atom = src for(var/obj/item/reagent_containers/reagent_container in beakers) - reagent_container.reagents.trans_to(reactants, reagent_container.reagents.total_volume*fraction, threatscale, 1, 1) + reagent_container.reagents.trans_to( + reactants, + reagent_container.reagents.total_volume * fraction, + threatscale, + no_react = TRUE + ) chem_splash(get_turf(src), reagents, affected_area, list(reactants), ignition_temp, threatscale) var/turf/detonated_turf = get_turf(src) diff --git a/code/game/objects/items/grenades/emgrenade.dm b/code/game/objects/items/grenades/emgrenade.dm index 30e73dfe5efb01..42dc891b7e5f91 100644 --- a/code/game/objects/items/grenades/emgrenade.dm +++ b/code/game/objects/items/grenades/emgrenade.dm @@ -1,4 +1,4 @@ -/obj/item/grenade/empgrenade//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/item/grenade/empgrenade//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "classic EMP grenade" desc = "It is designed to wreak havoc on electronic systems." icon_state = "emp" diff --git a/code/game/objects/items/grenades/ghettobomb.dm b/code/game/objects/items/grenades/ghettobomb.dm index 040c5372561c68..b77216a9104e8a 100644 --- a/code/game/objects/items/grenades/ghettobomb.dm +++ b/code/game/objects/items/grenades/ghettobomb.dm @@ -12,7 +12,7 @@ righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' throw_speed = 3 throw_range = 7 - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT active = FALSE det_time = 50 diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm index d5f3b0dec9d431..ea758c8993e1dc 100644 --- a/code/game/objects/items/grenades/plastic.dm +++ b/code/game/objects/items/grenades/plastic.dm @@ -119,7 +119,16 @@ message_admins("[ADMIN_LOOKUPFLW(user)] planted [name] on [target.name] at [ADMIN_VERBOSEJMP(target)] with [det_time] second fuse") user.log_message("planted [name] on [target.name] with a [det_time] second fuse.", LOG_ATTACK) - notify_ghosts("[user] has planted \a [src] on [target] with a [det_time] second fuse!", source = bomb_target, action = (isturf(target) ? NOTIFY_JUMP : NOTIFY_ORBIT), flashwindow = FALSE, header = "Explosive Planted") + var/icon/target_icon = icon(bomb_target.icon, bomb_target.icon_state) + target_icon.Blend(icon(icon, icon_state), ICON_OVERLAY) + var/mutable_appearance/bomb_target_image = mutable_appearance(target_icon) + notify_ghosts( + "[user] has planted \a [src] on [target] with a [det_time] second fuse!", + source = bomb_target, + header = "Explosive Planted", + alert_overlay = bomb_target_image, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) moveToNullspace() //Yep diff --git a/code/game/objects/items/grenades/spawnergrenade.dm b/code/game/objects/items/grenades/spawnergrenade.dm index 1b9d9ff27d0946..df3739afcc6c2e 100644 --- a/code/game/objects/items/grenades/spawnergrenade.dm +++ b/code/game/objects/items/grenades/spawnergrenade.dm @@ -71,3 +71,9 @@ inhand_icon_state = null spawner_type = /mob/living/basic/clown/mutant deliveryamt = 5 + +/obj/item/grenade/spawnergrenade/cat + name = "Catnade" + desc = "You can hear faint meowing and the sounds of claws on metal coming from within." + spawner_type = /mob/living/basic/pet/cat/feral + deliveryamt = 5 diff --git a/code/game/objects/items/hand_items.dm b/code/game/objects/items/hand_items.dm index 786824e7af273d..c6dc9cb7a2f110 100644 --- a/code/game/objects/items/hand_items.dm +++ b/code/game/objects/items/hand_items.dm @@ -660,7 +660,7 @@ to_chat(firer, span_warning("You've already blessed [target.name] with your heart and soul.")) return - var/amount_nutriment = target.reagents.get_multiple_reagent_amounts(typesof(/datum/reagent/consumable/nutriment)) + var/amount_nutriment = target.reagents.get_reagent_amount(/datum/reagent/consumable/nutriment, type_check = REAGENT_PARENT_TYPE) if(amount_nutriment <= 0) to_chat(firer, span_warning("There's not enough nutrition in [target.name] for it to be a proper meal.")) return diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index 5472f880755ed5..d923d4258f0347 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -38,7 +38,7 @@ inhand_icon_state = "handcuff" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_HANDCUFFED throwforce = 0 w_class = WEIGHT_CLASS_SMALL @@ -350,7 +350,7 @@ inhand_icon_state = "handcuff" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY throwforce = 0 w_class = WEIGHT_CLASS_NORMAL slowdown = 7 @@ -380,7 +380,7 @@ . = ..() update_appearance() var/static/list/loc_connections = list( - COMSIG_ATOM_ENTERED = PROC_REF(spring_trap), + COMSIG_ATOM_ENTERED = PROC_REF(trap_stepped_on), ) AddElement(/datum/element/connect_loc, loc_connections) @@ -412,10 +412,23 @@ update_appearance() playsound(src, 'sound/effects/snap.ogg', 50, TRUE) -/obj/item/restraints/legcuffs/beartrap/proc/spring_trap(datum/source, atom/movable/target, thrown_at = FALSE) +/obj/item/restraints/legcuffs/beartrap/proc/trap_stepped_on(datum/source, atom/movable/entering, ...) SIGNAL_HANDLER + + spring_trap(entering) + +/** + * Tries to spring the trap on the target movable. + * + * This proc is safe to call without knowing if the target is valid or if the trap is armed. + * + * Does not trigger on tiny mobs. + * If ignore_movetypes is FALSE, does not trigger on floating / flying / etc. mobs. + */ +/obj/item/restraints/legcuffs/beartrap/proc/spring_trap(atom/movable/target, ignore_movetypes = FALSE) if(!armed || !isturf(loc) || !isliving(target)) return + var/mob/living/victim = target if(istype(victim.buckled, /obj/vehicle)) var/obj/vehicle/ridden_vehicle = victim.buckled @@ -424,12 +437,14 @@ ridden_vehicle.visible_message(span_danger("[ridden_vehicle] triggers \the [src].")) return - //don't close the trap if they're as small as a mouse, or not touching the ground - if(victim.mob_size <= MOB_SIZE_TINY || (!thrown_at && victim.movement_type & (FLYING|FLOATING))) + //don't close the trap if they're as small as a mouse + if(victim.mob_size <= MOB_SIZE_TINY) + return + if(!ignore_movetypes && (victim.movement_type & MOVETYPES_NOT_TOUCHING_GROUND)) return close_trap() - if(thrown_at) + if(ignore_movetypes) victim.visible_message(span_danger("\The [src] ensnares [victim]!"), \ span_userdanger("\The [src] ensnares you!")) else @@ -477,7 +492,7 @@ qdel(src) /obj/item/restraints/legcuffs/beartrap/energy/attack_hand(mob/user, list/modifiers) - spring_trap(null, user) + spring_trap(user) return ..() /obj/item/restraints/legcuffs/beartrap/energy/cyborg @@ -554,7 +569,7 @@ /obj/item/restraints/legcuffs/bola/energy/ensnare(atom/hit_atom) var/obj/item/restraints/legcuffs/beartrap/energy/cyborg/B = new (get_turf(hit_atom)) - B.spring_trap(null, hit_atom, TRUE) + B.spring_trap(hit_atom, ignore_movetypes = TRUE) qdel(src) /** diff --git a/code/game/objects/items/his_grace.dm b/code/game/objects/items/his_grace.dm index 12c06e6916ac01..83af88f003bf1f 100644 --- a/code/game/objects/items/his_grace.dm +++ b/code/game/objects/items/his_grace.dm @@ -149,7 +149,11 @@ gender = MALE adjust_bloodthirst(1) force_bonus = HIS_GRACE_FORCE_BONUS * LAZYLEN(contents) - notify_ghosts("[user] has awoken His Grace!", source = src, action = NOTIFY_ORBIT, header = "All Hail His Grace!") + notify_ghosts( + "[user] has awoken His Grace!", + source = src, + header = "All Hail His Grace!", + ) playsound(user, 'sound/effects/pope_entry.ogg', 100) update_appearance() move_gracefully() diff --git a/code/game/objects/items/holosign_creator.dm b/code/game/objects/items/holosign_creator.dm index 3f8bb3c41defff..b4835a0d565a7a 100644 --- a/code/game/objects/items/holosign_creator.dm +++ b/code/game/objects/items/holosign_creator.dm @@ -1,7 +1,7 @@ /obj/item/holosign_creator name = "holographic sign projector" desc = "A handy-dandy holographic projector that displays a janitorial sign." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tool.dmi' icon_state = "signmaker" inhand_icon_state = "electronic" worn_icon_state = "electronic" @@ -15,13 +15,16 @@ item_flags = NOBLUDGEON var/list/signs var/max_signs = 10 - var/creation_time = 0 //time to create a holosign in deciseconds. + //time to create a holosign in deciseconds. + var/creation_time = 0 + //holosign image that is projected var/holosign_type = /obj/structure/holosign/wetsign var/holocreator_busy = FALSE //to prevent placing multiple holo barriers at once /obj/item/holosign_creator/Initialize(mapload) . = ..() AddElement(/datum/element/openspace_item_click_handler) + RegisterSignal(src, COMSIG_OBJ_PAINTED, TYPE_PROC_REF(/obj/item/holosign_creator, on_color_change)) /obj/item/holosign_creator/handle_openspace_click(turf/target, mob/user, proximity_flag, click_parameters) afterattack(target, user, proximity_flag, click_parameters) @@ -63,24 +66,39 @@ return . if(target_turf.is_blocked_turf(TRUE)) //don't try to sneak dense stuff on our tile during the wait. return . - target_holosign = new holosign_type(get_turf(target), src) + target_holosign = create_holosign(target, user) return . /obj/item/holosign_creator/attack(mob/living/carbon/human/M, mob/user) return +/obj/item/holosign_creator/proc/create_holosign(atom/target, mob/user) + var/atom/new_holosign = new holosign_type(get_turf(target), src) + new_holosign.add_hiddenprint(user) + if(color) + new_holosign.color = color + return new_holosign + /obj/item/holosign_creator/attack_self(mob/user) if(LAZYLEN(signs)) - for(var/H in signs) - qdel(H) + for(var/obj/structure/holosign/hologram as anything in signs) + qdel(hologram) balloon_alert(user, "holograms cleared") /obj/item/holosign_creator/Destroy() . = ..() if(LAZYLEN(signs)) - for(var/H in signs) - qdel(H) + for(var/obj/structure/holosign/hologram as anything in signs) + qdel(hologram) + +/obj/item/holosign_creator/proc/on_color_change(obj/item/holosign_creator, mob/user, obj/item/toy/crayon/spraycan/spraycan, is_dark_color) + SIGNAL_HANDLER + if(!spraycan.actually_paints) + return + if(LAZYLEN(signs)) + for(var/obj/structure/holosign/hologram as anything in signs) + hologram.color = color /obj/item/holosign_creator/janibarrier name = "custodial holobarrier projector" @@ -112,6 +130,49 @@ holosign_type = /obj/structure/holosign/barrier/atmos creation_time = 0 max_signs = 6 + /// Clearview holograms don't catch clicks and are more transparent + var/clearview = FALSE + /// Timer for auto-turning off clearview + var/clearview_timer + +/obj/item/holosign_creator/atmos/Initialize(mapload) + . = ..() + register_context() + +/obj/item/holosign_creator/atmos/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + if(LAZYLEN(signs)) + context[SCREENTIP_CONTEXT_RMB] = "[clearview ? "Turn off" : "Temporarily activate"] clearview" + return CONTEXTUAL_SCREENTIP_SET + +/obj/item/holosign_creator/atmos/create_holosign(atom/target, mob/user) + var/obj/structure/holosign/barrier/atmos/new_holosign = new holosign_type(get_turf(target), src) + new_holosign.add_hiddenprint(user) + if(color) + new_holosign.color = color + if(clearview) + new_holosign.clearview_transparency() + return new_holosign + +/obj/item/holosign_creator/atmos/attack_self_secondary(mob/user, modifiers) + if(clearview) + reset_hologram_transparency() + balloon_alert(user, "turned off clearview") + return + if(LAZYLEN(signs)) + for(var/obj/structure/holosign/barrier/atmos/hologram as anything in signs) + hologram.clearview_transparency() + clearview = TRUE + balloon_alert(user, "turned on clearview") + clearview_timer = addtimer(CALLBACK(src, PROC_REF(reset_hologram_transparency)), 40 SECONDS, TIMER_STOPPABLE) + return ..() + +/obj/item/holosign_creator/atmos/proc/reset_hologram_transparency() + if(LAZYLEN(signs)) + for(var/obj/structure/holosign/barrier/atmos/hologram as anything in signs) + hologram.reset_transparency() + clearview = FALSE + deltimer(clearview_timer) /obj/item/holosign_creator/medical name = "\improper PENLITE barrier projector" @@ -127,28 +188,28 @@ creation_time = 1.5 SECONDS max_signs = 9 holosign_type = /obj/structure/holosign/barrier/cyborg - var/shock = 0 + var/shock = FALSE /obj/item/holosign_creator/cyborg/attack_self(mob/user) if(iscyborg(user)) - var/mob/living/silicon/robot/R = user + var/mob/living/silicon/robot/borg = user if(shock) to_chat(user, span_notice("You clear all active holograms, and reset your projector to normal.")) holosign_type = /obj/structure/holosign/barrier/cyborg - creation_time = 5 - for(var/sign in signs) - qdel(sign) - shock = 0 + creation_time = 0.5 SECONDS + for(var/obj/structure/holosign/hologram as anything in signs) + qdel(hologram) + shock = FALSE return - if(R.emagged && !shock) + if(borg.emagged && !shock) to_chat(user, span_warning("You clear all active holograms, and overload your energy projector!")) holosign_type = /obj/structure/holosign/barrier/cyborg/hacked - creation_time = 30 - for(var/sign in signs) - qdel(sign) - shock = 1 + creation_time = 3 SECONDS + for(var/obj/structure/holosign/hologram as anything in signs) + qdel(hologram) + shock = TRUE return - for(var/sign in signs) - qdel(sign) + for(var/obj/structure/holosign/hologram as anything in signs) + qdel(hologram) balloon_alert(user, "holograms cleared") diff --git a/code/game/objects/items/hot_potato.dm b/code/game/objects/items/hot_potato.dm index 1a801b0dcda5bd..9a7da338885d95 100644 --- a/code/game/objects/items/hot_potato.dm +++ b/code/game/objects/items/hot_potato.dm @@ -150,7 +150,11 @@ log_bomber(null, null, src, "was primed for detonation (Timer:[delay],Explosive:[detonate_explosion],Range:[detonate_dev_range]/[detonate_heavy_range]/[detonate_light_range]/[detonate_fire_range])") active = TRUE if(detonate_explosion) //doesn't send a notification unless it's a genuine, exploding hot potato. - notify_ghosts("[user] has primed a Hot Potato!", source = src, action = NOTIFY_ORBIT, header = "Hot Hot Hot!") + notify_ghosts( + "[user] has primed a Hot Potato!", + source = src, + header = "Hot Hot Hot!", + ) /obj/item/hot_potato/proc/deactivate() update_appearance() diff --git a/code/game/objects/items/hourglass.dm b/code/game/objects/items/hourglass.dm index fe13c3d6ac9dde..97ada3ba4bff3b 100644 --- a/code/game/objects/items/hourglass.dm +++ b/code/game/objects/items/hourglass.dm @@ -2,7 +2,7 @@ /obj/item/hourglass name = "hourglass" - desc = "Nanotrasen patented gravity invariant hourglass. Guaranteed to flow perfectly under any conditions." + desc = "Symphionia patented gravity invariant hourglass. Guaranteed to flow perfectly under any conditions." var/obj/effect/countdown/hourglass/countdown var/time = 1 MINUTES var/finish_time //So countdown doesn't need to fiddle with timers diff --git a/code/game/objects/items/implants/implant.dm b/code/game/objects/items/implants/implant.dm index 0a0c19aee967c8..cc64788e597ec3 100644 --- a/code/game/objects/items/implants/implant.dm +++ b/code/game/objects/items/implants/implant.dm @@ -19,6 +19,10 @@ var/allow_multiple = FALSE ///how many times this can do something, only relevant for implants with limited uses var/uses = -1 + ///our implant flags + var/implant_flags = NONE + ///what icon state will we represent ourselves with on the hud? + var/hud_icon_state = null /obj/item/implant/proc/activate() @@ -60,12 +64,17 @@ if(!force && !can_be_implanted_in(target)) return FALSE - for(var/X in target.implants) - var/obj/item/implant/other_implant = X + var/security_implants = 0 //Used to track how many implants with the "security" flag are in the user. + for(var/obj/item/implant/other_implant as anything in target.implants) var/flags = SEND_SIGNAL(other_implant, COMSIG_IMPLANT_OTHER, args, src) if(flags & COMPONENT_STOP_IMPLANTING) UNSETEMPTY(target.implants) return FALSE + if(!force && (other_implant.implant_flags & IMPLANT_TYPE_SECURITY)) + security_implants++ + if(security_implants >= SECURITY_IMPLANT_CAP) //We've found too many security implants in this mob, and will reject implantation by normal means + balloon_alert(user, "too many security implants!") + return FALSE if(flags & COMPONENT_DELETE_NEW_IMPLANT) UNSETEMPTY(target.implants) qdel(src) @@ -100,6 +109,7 @@ log_combat(user, target, "implanted", "\a [name]") SEND_SIGNAL(src, COMSIG_IMPLANT_IMPLANTED, target, user, silent, force) + GLOB.tracked_implants += src return TRUE /** @@ -122,12 +132,14 @@ human_source.sec_hud_set_implants() SEND_SIGNAL(src, COMSIG_IMPLANT_REMOVED, source, silent, special) + GLOB.tracked_implants -= src return TRUE /obj/item/implant/Destroy() if(imp_in) removed(imp_in) return ..() + /** * Gets implant specifications for the implant pad */ @@ -137,3 +149,68 @@ /obj/item/implant/dropped(mob/user) . = TRUE ..() + +/// Determines if the implant is visible on the implant management console. +/// Note that this would only ever be called on implants currently inserted into a mob. +/obj/item/implant/proc/is_shown_on_console(obj/machinery/computer/prisoner/management/console) + return FALSE + +/** + * Returns a list of information to show on the implant management console for this implant + * + * Unlike normal UI data, the keys of the list are shown on the UI itself, so they should be human readable. + */ +/obj/item/implant/proc/get_management_console_data() + RETURN_TYPE(/list) + + var/list/info_shown = list() + info_shown["ID"] = imp_in.name + return info_shown + +/** + * Returns a list of "structs" that translate into buttons displayed on the implant management console + * + * The struct should have the following keys: + * * name - the name of the button, optional if button_icon is set + * * icon - the icon of the button, optional if button_name is set + * * color - the color of the button, optional + * * tooltip - the tooltip of the button, optional + * * action_key - the key that will be passed to handle_management_console_action when the button is clicked + * * action_params - optional, additional params passed when the button is clicked + */ +/obj/item/implant/proc/get_management_console_buttons() + SHOULD_CALL_PARENT(TRUE) + RETURN_TYPE(/list) + + var/list/buttons = list() + UNTYPED_LIST_ADD(buttons, list( + "name" = "Self Destruct", + "color" = "bad", + "tooltip" = "Destoys the implant from within the user harmlessly.", + "action_key" = "self_destruct", + )) + return buttons + +/** + * Handles a button click on the implant management console + * + * * user - the mob clicking the button + * * params - the params passed to the button, as if this were a ui_act handler. + * See params["implant_action"] for the action key passed to the button + * (which should correspond to a button returned by get_management_console_buttons) + * * console - the console the button was clicked on + */ +/obj/item/implant/proc/handle_management_console_action(mob/user, list/params, obj/machinery/computer/prisoner/management/console) + SHOULD_CALL_PARENT(TRUE) + + if(params["implant_action"] == "self_destruct") + var/warning = tgui_alert(user, "Activation will harmlessly self-destruct this implant. Proceed?", "You sure?", list("Yes", "No")) + if(warning != "Yes" || QDELETED(src) || QDELETED(user) || QDELETED(console) || isnull(imp_in)) + return TRUE + if(!console.is_operational || !user.can_perform_action(console, NEED_DEXTERITY|ALLOW_SILICON_REACH)) + return TRUE + + to_chat(imp_in, span_hear("You feel a tiny jolt from inside of you as one of your implants fizzles out.")) + do_sparks(number = 2, cardinal_only = FALSE, source = imp_in) + deconstruct() + return TRUE diff --git a/code/game/objects/items/implants/implant_chem.dm b/code/game/objects/items/implants/implant_chem.dm deleted file mode 100644 index adcba5641cfd54..00000000000000 --- a/code/game/objects/items/implants/implant_chem.dm +++ /dev/null @@ -1,73 +0,0 @@ -/obj/item/implant/chem - name = "chem implant" - desc = "Injects things." - icon_state = "reagents" - actions_types = null - -/obj/item/implant/chem/get_data() - var/dat = {"Implant Specifications:
- Name: Robust Corp MJ-420 Prisoner Management Implant
- Life: Deactivates upon death but remains within the body.
- Important Notes: Due to the system functioning off of nutrients in the implanted subject's body, the subject
- will suffer from an increased appetite.

-
- Implant Details:
- Function: Contains a small capsule that can contain various chemicals. Upon receiving a specially encoded signal
- the implant releases the chemicals directly into the blood stream.
- Special Features: - Micro-Capsule- Can be loaded with any sort of chemical agent via the common syringe and can hold 50 units.
- Can only be loaded while still in its original case.
- Integrity: Implant will last so long as the subject is alive."} - return dat - -/obj/item/implant/chem/Initialize(mapload) - . = ..() - create_reagents(50, OPENCONTAINER) - GLOB.tracked_chem_implants += src - -/obj/item/implant/chem/Destroy() - GLOB.tracked_chem_implants -= src - return ..() - -/obj/item/implant/chem/implant(mob/living/target, mob/user, silent = FALSE, force = FALSE) - . = ..() - if(.) - RegisterSignal(target, COMSIG_LIVING_DEATH, PROC_REF(on_death)) - -/obj/item/implant/chem/removed(mob/target, silent = FALSE, special = FALSE) - . = ..() - if(.) - UnregisterSignal(target, COMSIG_LIVING_DEATH) - -/obj/item/implant/chem/proc/on_death(mob/living/source) - SIGNAL_HANDLER - INVOKE_ASYNC(src, TYPE_PROC_REF(/obj/item/implant/chem, activate), reagents.total_volume) - -/obj/item/implant/chem/activate(cause) - . = ..() - if(!cause || !imp_in) - return - var/mob/living/carbon/R = imp_in - var/injectamount = null - if (cause == "action_button") - injectamount = reagents.total_volume - else - injectamount = cause - reagents.trans_to(R, injectamount) - to_chat(R, span_hear("You hear a faint beep.")) - if(!reagents.total_volume) - to_chat(R, span_hear("You hear a faint click from your chest.")) - qdel(src) - - -/obj/item/implantcase/chem - name = "implant case - 'Remote Chemical'" - desc = "A glass case containing a remote chemical implant." - imp_type = /obj/item/implant/chem - -/obj/item/implantcase/chem/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/reagent_containers/syringe) && imp) - W.afterattack(imp, user, TRUE, params) - return TRUE - else - return ..() diff --git a/code/game/objects/items/implants/implant_deathrattle.dm b/code/game/objects/items/implants/implant_deathrattle.dm index 64f85c020c87a9..026284b4dc7c79 100644 --- a/code/game/objects/items/implants/implant_deathrattle.dm +++ b/code/game/objects/items/implants/implant_deathrattle.dm @@ -80,7 +80,7 @@ actions_types = null /obj/item/implant/deathrattle/can_be_implanted_in(mob/living/target) - // Can be implanted in anything that's a mob. Syndicate cyborgs, talking fish, humans... + // Can be implanted in anything that's a mob. Symphionia cyborgs, talking fish, humans... return TRUE /obj/item/implantcase/deathrattle diff --git a/code/game/objects/items/implants/implant_explosive.dm b/code/game/objects/items/implants/implant_explosive.dm index c9f961b594e26e..29627f377f242d 100644 --- a/code/game/objects/items/implants/implant_explosive.dm +++ b/code/game/objects/items/implants/implant_explosive.dm @@ -124,11 +124,10 @@ notify_ghosts( "[imp_in] is about to detonate their explosive implant!", source = src, - action = NOTIFY_ORBIT, - flashwindow = FALSE, - ghost_sound = 'sound/machines/warning-buzzer.ogg', header = "Tick Tick Tick...", - notify_volume = 75 + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ghost_sound = 'sound/machines/warning-buzzer.ogg', + notify_volume = 75, ) playsound(loc, 'sound/items/timer.ogg', 30, FALSE) diff --git a/code/game/objects/items/implants/implant_freedom.dm b/code/game/objects/items/implants/implant_freedom.dm index 1fa61c27510fa1..7185695cb2aa1c 100644 --- a/code/game/objects/items/implants/implant_freedom.dm +++ b/code/game/objects/items/implants/implant_freedom.dm @@ -43,10 +43,10 @@ return dat /obj/item/implanter/freedom - name = "implanter" // Skyrat edit , was implanter (freedom) + name = "implanter" // NOVA EDIT , was implanter (freedom) imp_type = /obj/item/implant/freedom - special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit - special_desc = "A Syndicate implanter used for a freedom implant" // Skyrat edit + special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT + special_desc = "A Syndicate implanter used for a freedom implant" // NOVA EDIT /obj/item/implantcase/freedom name = "implant case - 'Freedom'" diff --git a/code/game/objects/items/implants/implant_mindshield.dm b/code/game/objects/items/implants/implant_mindshield.dm index 33bfafbbbdd9e2..1bb3f6f8ff1590 100644 --- a/code/game/objects/items/implants/implant_mindshield.dm +++ b/code/game/objects/items/implants/implant_mindshield.dm @@ -5,7 +5,7 @@ /obj/item/implant/mindshield/get_data() var/dat = {"Implant Specifications:
- Name: Nanotrasen Employee Management Implant
+ Name: Symphionia Employee Management Implant
Life: Ten years.
Important Notes: Personnel injected with this device are much more resistant to brainwashing.

diff --git a/code/game/objects/items/implants/implant_misc.dm b/code/game/objects/items/implants/implant_misc.dm index ec443aae2206ca..da83974c237a34 100644 --- a/code/game/objects/items/implants/implant_misc.dm +++ b/code/game/objects/items/implants/implant_misc.dm @@ -26,17 +26,17 @@ qdel(src) /obj/item/implanter/emp - name = "implanter" // Skyrat edit, was implanter (EMP) + name = "implanter" // NOVA EDIT, was implanter (EMP) imp_type = /obj/item/implant/emp - special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit - special_desc = "A Syndicate implanter used for a EMP implant" // Skyrat edit + special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT + special_desc = "A Syndicate implanter used for a EMP implant" // NOVA EDIT /obj/item/implant/radio name = "internal radio implant" var/obj/item/radio/radio var/radio_key var/subspace_transmission = FALSE - icon = 'icons/obj/radio.dmi' + icon = 'icons/obj/devices/voice.dmi' icon_state = "walkietalkie" /obj/item/implant/radio/activate() @@ -88,8 +88,8 @@ imp_type = /obj/item/implant/radio /obj/item/implanter/radio/syndicate - name = "implanter" // Skyrat edit , was originally implanter (internal syndicate radio) + name = "implanter" // NOVA EDIT , was originally implanter (internal syndicate radio) imp_type = /obj/item/implant/radio/syndicate - special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit - special_desc = "A Syndicate implanter used for a internal radio implant" // Skyrat edit + special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT + special_desc = "A Syndicate implanter used for a internal radio implant" // NOVA EDIT diff --git a/code/game/objects/items/implants/implant_stealth.dm b/code/game/objects/items/implants/implant_stealth.dm index 101cc4a807dea8..fe7e342f08de71 100644 --- a/code/game/objects/items/implants/implant_stealth.dm +++ b/code/game/objects/items/implants/implant_stealth.dm @@ -4,10 +4,10 @@ actions_types = list(/datum/action/item_action/agent_box) /obj/item/implanter/stealth - name = "implanter" // Skyrat edit , was originaly implanter (stealth) + name = "implanter" // NOVA EDIT , was originaly implanter (stealth) imp_type = /obj/item/implant/stealth - special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit - special_desc = "A Syndicate implanter used for a stealth implant" // Skyrat edit + special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT + special_desc = "A Syndicate implanter used for a stealth implant" // NOVA EDIT //Box Object diff --git a/code/game/objects/items/implants/implant_storage.dm b/code/game/objects/items/implants/implant_storage.dm index e3ba30b470511a..76f6b2547f7277 100644 --- a/code/game/objects/items/implants/implant_storage.dm +++ b/code/game/objects/items/implants/implant_storage.dm @@ -40,7 +40,7 @@ return ..() /obj/item/implanter/storage - name = "implanter" // Skyrat edit , original was implanter (storage) + name = "implanter" // NOVA EDIT , original was implanter (storage) imp_type = /obj/item/implant/storage - special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit - special_desc = "A Syndicate implanter used for a storage implant" // Skyrat edit + special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT + special_desc = "A Syndicate implanter used for a storage implant" // NOVA EDIT diff --git a/code/game/objects/items/implants/implant_track.dm b/code/game/objects/items/implants/implant_track.dm deleted file mode 100644 index 65f11c2519b4bf..00000000000000 --- a/code/game/objects/items/implants/implant_track.dm +++ /dev/null @@ -1,59 +0,0 @@ -/obj/item/implant/tracking - name = "tracking implant" - desc = "Track with this." - actions_types = null - - ///for how many deciseconds after user death will the implant work? - var/lifespan_postmortem = 6000 - ///will people implanted with this act as teleporter beacons? - var/allow_teleport = TRUE - -/obj/item/implant/tracking/c38 - name = "TRAC implant" - desc = "A smaller tracking implant that supplies power for only a few minutes." - var/lifespan = 3000 //how many deciseconds does the implant last? - ///The id of the timer that's qdeleting us - var/timerid - allow_teleport = FALSE - -/obj/item/implant/tracking/c38/implant(mob/living/target, mob/user, silent, force) - . = ..() - timerid = QDEL_IN_STOPPABLE(src, lifespan) - -/obj/item/implant/tracking/c38/removed(mob/living/source, silent, special) - . = ..() - deltimer(timerid) - timerid = null - -/obj/item/implant/tracking/c38/Destroy() - return ..() - -/obj/item/implant/tracking/Initialize(mapload) - . = ..() - GLOB.tracked_implants += src - -/obj/item/implant/tracking/Destroy() - GLOB.tracked_implants -= src - return ..() - -/obj/item/implanter/tracking - imp_type = /obj/item/implant/tracking - -/obj/item/implanter/tracking/gps - imp_type = /obj/item/gps/mining/internal - -/obj/item/implant/tracking/get_data() - var/dat = {"Implant Specifications:
- Name: Tracking Beacon
- Life: 10 minutes after death of host.
- Important Notes: Implant [allow_teleport ? "also works" : "does not work"] as a teleporter beacon.
-
- Implant Details:
- Function: Continuously transmits low power signal. Useful for tracking.
- Special Features:
- Neuro-Safe- Specialized shell absorbs excess voltages self-destructing the chip if - a malfunction occurs thereby securing safety of subject. The implant will melt and - disintegrate into bio-safe elements.
- Integrity: Gradient creates slight risk of being overcharged and frying the - circuitry. As a result neurotoxins can cause massive damage."} - return dat diff --git a/code/game/objects/items/implants/implantcase.dm b/code/game/objects/items/implants/implantcase.dm index 56a16f3058c14f..b209f1eccffcfe 100644 --- a/code/game/objects/items/implants/implantcase.dm +++ b/code/game/objects/items/implants/implantcase.dm @@ -1,7 +1,7 @@ /** * Item used to store implants. Can be renamed with a pen. Implants are moved between those and implanters when a mob uses an implanter on a case. */ -/obj/item/implantcase//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/item/implantcase//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "implant case" desc = "A glass case containing an implant." icon = 'icons/obj/medical/syringe.dmi' diff --git a/code/game/objects/items/implants/implantchair.dm b/code/game/objects/items/implants/implantchair.dm index d76bd363e664cc..8f072cf042b612 100644 --- a/code/game/objects/items/implants/implantchair.dm +++ b/code/game/objects/items/implants/implantchair.dm @@ -184,7 +184,7 @@ auto_inject = FALSE auto_replenish = FALSE special = TRUE - var/objective = "Obey the law. Praise Nanotrasen." + var/objective = "Obey the law. Praise Symphionia." var/custom = FALSE /obj/machinery/implantchair/brainwash/implant_action(mob/living/C, mob/user) diff --git a/code/game/objects/items/implants/implanter.dm b/code/game/objects/items/implants/implanter.dm index d44b42d7a9f409..c03e519f0f45db 100644 --- a/code/game/objects/items/implants/implanter.dm +++ b/code/game/objects/items/implants/implanter.dm @@ -1,7 +1,7 @@ /** * Players can use this item to put obj/item/implant's in living mobs. Can be renamed with a pen. */ -/obj/item/implanter//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/item/implanter//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "implanter" desc = "A sterile automatic implant injector." icon = 'icons/obj/medical/syringe.dmi' diff --git a/code/game/objects/items/implants/implantpad.dm b/code/game/objects/items/implants/implantpad.dm index c932886754c60e..ab899c3f048015 100644 --- a/code/game/objects/items/implants/implantpad.dm +++ b/code/game/objects/items/implants/implantpad.dm @@ -1,7 +1,7 @@ -/obj/item/implantpad//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/item/implantpad//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "implant pad" desc = "Used to modify implants." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tool.dmi' icon_state = "implantpad-0" inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' diff --git a/code/game/objects/items/implants/implantuplink.dm b/code/game/objects/items/implants/implantuplink.dm index 4d90c8381d0a6a..278c97ed6c9aaa 100644 --- a/code/game/objects/items/implants/implantuplink.dm +++ b/code/game/objects/items/implants/implantuplink.dm @@ -1,7 +1,7 @@ /obj/item/implant/uplink name = "uplink implant" desc = "Sneeki breeki." - icon = 'icons/obj/radio.dmi' + icon = 'icons/obj/devices/voice.dmi' icon_state = "radio" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' @@ -16,7 +16,7 @@ if(!uplink_flag) uplink_flag = src.uplink_flag src.uplink_handler = uplink_handler - RegisterSignal(src, COMSIG_COMPONENT_REMOVING, PROC_REF(_component_removal)) + RegisterSignal(src, COMSIG_COMPONENT_REMOVING, PROC_REF(on_component_removing)) /obj/item/implant/uplink/implant(mob/living/carbon/target, mob/user, silent, force) . = ..() @@ -34,26 +34,30 @@ * generally by admin verbs or var editing. Implant does nothing without * the component, so delete itself. */ -/obj/item/implant/uplink/proc/_component_removal(datum/source, datum/component/component) +/obj/item/implant/uplink/proc/on_component_removing(datum/source, datum/component/component) SIGNAL_HANDLER + + if (QDELING(src)) + return + if(istype(component, /datum/component/uplink)) qdel(src) /obj/item/implanter/uplink - name = "implanter" // Skyrat edit , original was implanter (uplink) + name = "implanter" // NOVA EDIT , original was implanter (uplink) imp_type = /obj/item/implant/uplink - special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit - special_desc = "A Syndicate implanter for an uplink" // Skyrat edit + special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT + special_desc = "A Syndicate implanter for an uplink" // NOVA EDIT /obj/item/implanter/uplink/Initialize(mapload, uplink_handler) imp = new imp_type(src, uplink_handler) return ..() /obj/item/implanter/uplink/precharged - name = "implanter" // Skyrat edit , original was implanter (precharged uplink) + name = "implanter" // NOVA EDIT , original was implanter (precharged uplink) imp_type = /obj/item/implant/uplink/precharged - special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit - special_desc = "A Syndicate implanter for a precharged uplink" // Skyrat edit + special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT + special_desc = "A Syndicate implanter for a precharged uplink" // NOVA EDIT /obj/item/implant/uplink/precharged starting_tc = TELECRYSTALS_PRELOADED_IMPLANT diff --git a/code/game/objects/items/implants/security/implant_beacon.dm b/code/game/objects/items/implants/security/implant_beacon.dm new file mode 100644 index 00000000000000..dea6b4ed1906b6 --- /dev/null +++ b/code/game/objects/items/implants/security/implant_beacon.dm @@ -0,0 +1,43 @@ +///Essentially, just turns the implantee into a teleport beacon. +/obj/item/implant/beacon + name = "beacon implant" + desc = "Teleports things." + actions_types = null + implant_flags = IMPLANT_TYPE_SECURITY + hud_icon_state = "hud_imp_beacon" + ///How long will the implant be teleportable to after death? + var/lifespan_postmortem = 10 MINUTES + +/obj/item/implant/beacon/get_data() + var/dat = {"Implant Specifications:
+ Name: Robust Corp JMP-21 Fugitive Retrieval Implant
+ Life: Deactivates upon death after ten minutes, but remains within the body.
+ Important Notes: N/A
+
+ Implant Details:
+ Function: Acts as a teleportation beacon that can be tracked by any standard bluespace transponder. + Using this, you can teleport directly to whoever has this implant inside of them."} + return dat + +/obj/item/implant/beacon/is_shown_on_console(obj/machinery/computer/prisoner/management/console) + return TRUE + +/obj/item/implant/beacon/get_management_console_data() + var/list/info_shown = ..() + + var/area/destination_area = get_area(imp_in) + if(isnull(destination_area) || (destination_area.area_flags & NOTELEPORT)) + info_shown["Status"] = "Implant carrier teleport signal cannot be reached!" + else + var/turf/turf_to_check = get_turf(imp_in) + info_shown["Status"] = "Implant carrier is in [is_safe_turf(turf_to_check, dense_atoms = TRUE) ? "a safe environment." : "a hazardous environment!"]" + + return info_shown + +/obj/item/implanter/beacon + imp_type = /obj/item/implant/beacon + +/obj/item/implantcase/beacon + name = "implant case - 'Beacon'" + desc = "A glass case containing a beacon implant." + imp_type = /obj/item/implant/beacon diff --git a/code/game/objects/items/implants/security/implant_chem.dm b/code/game/objects/items/implants/security/implant_chem.dm new file mode 100644 index 00000000000000..db41d8bcac22cf --- /dev/null +++ b/code/game/objects/items/implants/security/implant_chem.dm @@ -0,0 +1,104 @@ +/obj/item/implant/chem + name = "chem implant" + desc = "Injects things." + icon_state = "reagents" + actions_types = null + implant_flags = IMPLANT_TYPE_SECURITY + hud_icon_state = "hud_imp_chem" + /// All possible injection sizes for the implant shown in the prisoner management console. + var/list/implant_sizes = list(1, 5, 10) + +/obj/item/implant/chem/get_data() + var/dat = {"Implant Specifications:
+ Name: Robust Corp MJ-420 Prisoner Management Implant
+ Life: Deactivates upon death but remains within the body.
+ Important Notes: Due to the system functioning off of nutrients in the implanted subject's body, the subject
+ will suffer from an increased appetite.

+ Implant Details:
+ Function: Contains a small capsule that can contain various chemicals. Upon receiving a specially encoded signal
+ the implant releases the chemicals directly into the blood stream.
+ Micro-Capsule- Can be loaded with any sort of chemical agent via the common syringe and can hold 50 units.
+ Can only be loaded while still in its original case.
+ Integrity: Implant will last so long as the subject is alive, breaking down and releasing all contents on death."} + return dat + +/obj/item/implant/chem/is_shown_on_console(obj/machinery/computer/prisoner/management/console) + return is_valid_z_level(get_turf(console), get_turf(imp_in)) + +/obj/item/implant/chem/get_management_console_data() + var/list/info_shown = ..() + info_shown["Volume"] = "[reagents.total_volume]u" + return info_shown + +/obj/item/implant/chem/get_management_console_buttons() + var/list/buttons = ..() + for(var/i in implant_sizes) + UNTYPED_LIST_ADD(buttons, list( + "name" = "Inject [i]u", + "color" = "good", + "action_key" = "inject", + "action_params" = list("amount" = i), + )) + return buttons + +/obj/item/implant/chem/handle_management_console_action(mob/user, list/params, obj/machinery/computer/prisoner/management/console) + . = ..() + if(.) + return + + if(params["implant_action"] == "inject") + var/amount = text2num(params["amount"]) + if(!(amount in implant_sizes)) + return TRUE + + var/reagents_inside = reagents.get_reagent_log_string() + activate(amount) + log_combat(user, imp_in, "injected [amount] units of [reagents_inside]", src) + return TRUE + +/obj/item/implant/chem/Initialize(mapload) + . = ..() + create_reagents(50, OPENCONTAINER) + +/obj/item/implant/chem/implant(mob/living/target, mob/user, silent = FALSE, force = FALSE) + . = ..() + if(.) + RegisterSignal(target, COMSIG_LIVING_DEATH, PROC_REF(on_death)) + +/obj/item/implant/chem/removed(mob/target, silent = FALSE, special = FALSE) + . = ..() + if(.) + UnregisterSignal(target, COMSIG_LIVING_DEATH) + +/obj/item/implant/chem/proc/on_death(mob/living/source) + SIGNAL_HANDLER + INVOKE_ASYNC(src, TYPE_PROC_REF(/obj/item/implant/chem, activate), reagents.total_volume) + +/obj/item/implant/chem/activate(cause) + . = ..() + if(!cause || !imp_in) + return + var/mob/living/carbon/R = imp_in + var/injectamount = null + if (cause == "action_button") + injectamount = reagents.total_volume + else + injectamount = cause + reagents.trans_to(R, injectamount) + to_chat(R, span_hear("You hear a faint beep.")) + if(!reagents.total_volume) + to_chat(R, span_hear("You hear a faint click from your chest.")) + qdel(src) + + +/obj/item/implantcase/chem + name = "implant case - 'Remote Chemical'" + desc = "A glass case containing a remote chemical implant." + imp_type = /obj/item/implant/chem + +/obj/item/implantcase/chem/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/reagent_containers/syringe) && imp) + W.afterattack(imp, user, TRUE, params) + return TRUE + else + return ..() diff --git a/code/game/objects/items/implants/implant_exile.dm b/code/game/objects/items/implants/security/implant_exile.dm similarity index 93% rename from code/game/objects/items/implants/implant_exile.dm rename to code/game/objects/items/implants/security/implant_exile.dm index 056ccd0ff9ac59..5c33d146b3a81f 100644 --- a/code/game/objects/items/implants/implant_exile.dm +++ b/code/game/objects/items/implants/security/implant_exile.dm @@ -5,11 +5,14 @@ name = "exile implant" desc = "Prevents you from returning from away missions." actions_types = null + implant_flags = IMPLANT_TYPE_SECURITY + hud_icon_state = "hud_imp_exile" /obj/item/implant/exile/get_data() var/dat = {"Implant Specifications:
Name: Nanotrasen Employee Exile Implant
- Implant Details: The onboard gateway system has been modified to reject entry by individuals containing this implant.
"} + Implant Details: The onboard gateway system has been modified to reject entry by individuals containing this implant. + Additionally, station mining shuttles will lock their controls if handled by someone with this implant.
"} return dat diff --git a/code/game/objects/items/implants/security/implant_noteleport.dm b/code/game/objects/items/implants/security/implant_noteleport.dm new file mode 100644 index 00000000000000..be4ec29659a45d --- /dev/null +++ b/code/game/objects/items/implants/security/implant_noteleport.dm @@ -0,0 +1,45 @@ +///Blocks the implantee from being teleported +/obj/item/implant/teleport_blocker + name = "bluespace grounding implant" + desc = "Grounds your bluespace signature in baseline reality, whatever the hell that means." + actions_types = null + implant_flags = IMPLANT_TYPE_SECURITY + hud_icon_state = "hud_imp_noteleport" + +/obj/item/implant/teleport_blocker/get_data() + var/dat = {"Implant Specifications:
+ Name: Robust Corp EXP-001 'Bluespace Grounder'
+ Implant Details: Upon implantation, grounds the user's bluespace signature to their currently occupied plane of existence. + Most, if not all forms of teleportation on the implantee will be rendered ineffective. Useful for keeping especially slippery prisoners in place.
"} + return dat + +/obj/item/implant/teleport_blocker/implant(mob/living/target, mob/user, silent = FALSE, force = FALSE) + . = ..() + if(!. || !isliving(target)) + return FALSE + RegisterSignal(target, COMSIG_MOVABLE_TELEPORTING, PROC_REF(on_teleport)) + return TRUE + +/obj/item/implant/teleport_blocker/removed(mob/target, silent = FALSE, special = FALSE) + . = ..() + if(!. || !isliving(target)) + return FALSE + UnregisterSignal(target, COMSIG_MOVABLE_TELEPORTING) + return TRUE + +/// Signal for COMSIG_MOVABLE_TELEPORTED that blocks teleports and stuns the would-be-teleportee. +/obj/item/implant/teleport_blocker/proc/on_teleport(mob/living/teleportee, atom/destination, channel) + SIGNAL_HANDLER + + to_chat(teleportee, span_holoparasite("You feel yourself teleporting, but are suddenly flung back to where you just were!")) + + teleportee.apply_status_effect(/datum/status_effect/incapacitating/paralyzed, 5 SECONDS) + var/datum/effect_system/spark_spread/quantum/spark_system = new() + spark_system.set_up(5, TRUE, teleportee) + spark_system.start() + return COMPONENT_BLOCK_TELEPORT + +/obj/item/implantcase/teleport_blocker + name = "implant case - 'Bluespace Grounding'" + desc = "A glass case containing a bluespace grounding implant." + imp_type = /obj/item/implant/teleport_blocker diff --git a/code/game/objects/items/implants/security/implant_track.dm b/code/game/objects/items/implants/security/implant_track.dm new file mode 100644 index 00000000000000..652d9d6507ad3a --- /dev/null +++ b/code/game/objects/items/implants/security/implant_track.dm @@ -0,0 +1,87 @@ +/obj/item/implant/tracking + name = "tracking implant" + desc = "Track with this." + actions_types = null + implant_flags = IMPLANT_TYPE_SECURITY + hud_icon_state = "hud_imp_tracking" + + ///How long will the implant continue to function after death? + var/lifespan_postmortem = 10 MINUTES + +/obj/item/implant/tracking/get_data() + var/dat = {"Implant Specifications:
+ Name: Robust Corp EYE-5 Convict Parole Implant
+ Life: 10 minutes after death of host.
+
+ Implant Details:
+ Function: Continuously transmits low power signal. Can be tracked from a prisoner management console.
+ Special Features:
+ Neuro-Safe- Specialized shell absorbs excess voltages self-destructing the chip if + a malfunction occurs thereby securing safety of subject. The implant will melt and + disintegrate into bio-safe elements.
"} + return dat + +/obj/item/implant/tracking/is_shown_on_console(obj/machinery/computer/prisoner/management/console) + if(imp_in.stat == DEAD && imp_in.timeofdeath + lifespan_postmortem < world.time) + return FALSE + if(!is_valid_z_level(get_turf(console), get_turf(imp_in))) + return FALSE + return TRUE + +/obj/item/implant/tracking/get_management_console_data() + var/list/info_shown = ..() + info_shown["Location"] = get_area_name(imp_in, format_text = TRUE) || "Unknown" + return info_shown + +/obj/item/implant/tracking/get_management_console_buttons() + var/list/buttons = ..() + UNTYPED_LIST_ADD(buttons, list( + "name" = "Warn", + "color" = "average", + "tooltip" = "Sends a message directly to the target's brain.", + "action_key" = "warn", + )) + return buttons + +/obj/item/implant/tracking/handle_management_console_action(mob/user, list/params, obj/machinery/computer/prisoner/management/console) + . = ..() + if(.) + return + + if(params["implant_action"] == "warn") + var/warning = tgui_input_text(user, "What warning do you want to send to [imp_in.name]?", "Messaging") + if(!warning || QDELETED(src) || QDELETED(user) || QDELETED(console) || isnull(imp_in)) + return TRUE + if(!console.is_operational || !user.can_perform_action(console, NEED_DEXTERITY|ALLOW_SILICON_REACH)) + return TRUE + + to_chat(imp_in, span_hear("You hear a voice in your head saying: '[warning]'")) + log_directed_talk(user, imp_in, warning, LOG_SAY, "implant message") + return TRUE + +/obj/item/implant/tracking/c38 + name = "TRAC implant" + desc = "A smaller tracking implant that supplies power for only a few minutes." + implant_flags = NONE + ///How long before this implant self-deletes? + var/lifespan = 5 MINUTES + ///The id of the timer that's qdeleting us + var/timerid + +/obj/item/implant/tracking/c38/implant(mob/living/target, mob/user, silent, force) + . = ..() + timerid = QDEL_IN_STOPPABLE(src, lifespan) + +/obj/item/implant/tracking/c38/removed(mob/living/source, silent, special) + . = ..() + deltimer(timerid) + timerid = null + +/obj/item/implant/tracking/c38/Destroy() + return ..() + +/obj/item/implanter/tracking + imp_type = /obj/item/implant/tracking + +/obj/item/implanter/tracking/gps + imp_type = /obj/item/gps/mining/internal diff --git a/code/game/objects/items/inducer.dm b/code/game/objects/items/inducer.dm index f6ed89a870f045..35c73a8cb95af6 100644 --- a/code/game/objects/items/inducer.dm +++ b/code/game/objects/items/inducer.dm @@ -172,12 +172,19 @@ return . += "inducer-[cell ? "bat" : "nobat"]" +/obj/item/inducer/empty + cell_type = null + opened = TRUE + +/obj/item/inducer/orderable + cell_type = /obj/item/stock_parts/cell/inducer_supply + opened = FALSE + /obj/item/inducer/sci icon_state = "inducer-sci" inhand_icon_state = "inducer-sci" desc = "A tool for inductively charging internal power cells. This one has a science color scheme, and is less potent than its engineering counterpart." cell_type = null - powertransfer = 500 opened = TRUE /obj/item/inducer/sci/Initialize(mapload) diff --git a/code/game/objects/items/inspector.dm b/code/game/objects/items/inspector.dm index ec4786c8cda4ac..c0b6a5dd145591 100644 --- a/code/game/objects/items/inspector.dm +++ b/code/game/objects/items/inspector.dm @@ -6,7 +6,7 @@ /obj/item/inspector name = "\improper N-spect scanner" desc = "Central Command-issued inspection device. Performs inspections according to Nanotrasen protocols when activated, then prints an encrypted report regarding the maintenance of the station. Definitely not giving you cancer." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/scanner.dmi' icon_state = "inspector" worn_icon_state = "salestagger" inhand_icon_state = "electronic" diff --git a/code/game/objects/items/kirby_plants/kirbyplants.dm b/code/game/objects/items/kirby_plants/kirbyplants.dm index 74a0c8637e8949..a7c701e10c934d 100644 --- a/code/game/objects/items/kirby_plants/kirbyplants.dm +++ b/code/game/objects/items/kirby_plants/kirbyplants.dm @@ -2,12 +2,11 @@ /obj/item/kirbyplants name = "potted plant" //icon = 'icons/obj/fluff/flora/plants.dmi' // ORIGINAL - icon = 'modular_skyrat/modules/aesthetics/plants/plants.dmi' // SKYRAT EDIT CHANGE + icon = 'modular_nova/modules/aesthetics/plants/plants.dmi' // NOVA EDIT CHANGE icon_state = "plant-01" base_icon_state = "plant-01" desc = "A little bit of nature contained in a pot." layer = ABOVE_MOB_LAYER - plane = GAME_PLANE_UPPER w_class = WEIGHT_CLASS_HUGE force = 10 throwforce = 13 @@ -23,7 +22,7 @@ var/custom_plant_name = FALSE var/list/static/random_plant_states /// Maximum icon state number - KEEP THIS UP TO DATE - var/random_state_cap = 43 // SKYRAT EDIT ADDITION + var/random_state_cap = 43 // NOVA EDIT ADDITION /obj/item/kirbyplants/Initialize(mapload) . = ..() @@ -77,14 +76,14 @@ /obj/item/kirbyplants/proc/generate_states() random_plant_states = list() - for(var/i in 1 to random_state_cap) //SKYRAT EDIT CHANGE - ORIGINAL: for(var/i in 1 to 24) + for(var/i in 1 to random_state_cap) //NOVA EDIT CHANGE - ORIGINAL: for(var/i in 1 to 24) var/number if(i < 10) number = "0[i]" else number = "[i]" random_plant_states += "plant-[number]" - random_plant_states += list("applebush", "monkeyplant") //SKYRAT EDIT CHANGE - ORIGINAL:random_plant_states += "applebush" + random_plant_states += list("applebush", "monkeyplant") //NOVA EDIT CHANGE - ORIGINAL:random_plant_states += "applebush" /obj/item/kirbyplants/random icon = 'icons/obj/fluff/flora/_flora.dmi' @@ -93,7 +92,7 @@ /obj/item/kirbyplants/random/Initialize(mapload) . = ..() //icon = 'icons/obj/flora/plants.dmi' // ORIGINAL - icon = 'modular_skyrat/modules/aesthetics/plants/plants.dmi' //SKYRAT EDIT CHANGE + icon = 'modular_nova/modules/aesthetics/plants/plants.dmi' //NOVA EDIT CHANGE randomize_base_icon_state() //Handles randomizing the icon during initialize() @@ -128,13 +127,13 @@ base_icon_state = "plant-[rand(26, 29)]" update_appearance(UPDATE_ICON) -//SKYRAT EDIT ADDITION START +//NOVA EDIT ADDITION START /obj/item/kirbyplants/monkey name = "monkey plant" - desc = "Something that seems to have been made by the Nanotrasen science division, one might call it an abomination. It's heads seem... alive." + desc = "Something that seems to have been made by the Symphionia science division, one might call it an abomination. It's heads seem... alive." icon_state = "monkeyplant" trimmable = FALSE -//SKYRAT EDIT ADDITION END +//NOVA EDIT ADDITION END /obj/item/kirbyplants/photosynthetic name = "photosynthetic potted plant" diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index 56b8a1d653ee9b..5b8666705dd4c0 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -27,7 +27,7 @@ throw_speed = 3 throw_range = 5 custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 0.8) - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY attack_verb_continuous = list("attacks", "stabs", "pokes") attack_verb_simple = list("attack", "stab", "poke") hitsound = 'sound/weapons/bladeslice.ogg' @@ -170,7 +170,7 @@ icon_state = "metal_rolling_pin" inhand_icon_state = "metal_rolling_pin" force = 12 - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/plastic = SHEET_MATERIAL_AMOUNT * 1.5) custom_price = PAYCHECK_CREW * 2 bare_wound_bonus = 14 @@ -186,7 +186,7 @@ icon_state = "spoon" base_icon_state = "spoon" w_class = WEIGHT_CLASS_TINY - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY force = 2 throw_speed = 3 throw_range = 5 diff --git a/code/game/objects/items/knives.dm b/code/game/objects/items/knives.dm index 337c75cf5eb03f..4d63f825c07318 100644 --- a/code/game/objects/items/knives.dm +++ b/code/game/objects/items/knives.dm @@ -8,7 +8,7 @@ inhand_icon_state = "knife" worn_icon_state = "knife" desc = "The original knife, it is said that all other knives are only copies of this one." - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY force = 10 demolition_mod = 0.75 w_class = WEIGHT_CLASS_SMALL @@ -95,7 +95,7 @@ icon_state = "butch" inhand_icon_state = "butch" desc = "A huge thing used for chopping and chopping up meat. This includes clowns and clown by-products." - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY force = 15 throwforce = 10 custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 6) @@ -157,7 +157,7 @@ custom_materials = null /obj/item/knife/combat/bone/Initialize(mapload) - flags_1 &= ~CONDUCT_1 + flags_1 &= ~CONDUCTS_ELECTRICITY return ..() /obj/item/knife/combat/cyborg @@ -182,7 +182,7 @@ custom_materials = list(/datum/material/glass = SMALL_MATERIAL_AMOUNT * 4) /obj/item/knife/shiv/Initialize(mapload) - flags_1 &= ~CONDUCT_1 + flags_1 &= ~CONDUCTS_ELECTRICITY return ..() /obj/item/knife/shiv/plasma diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm index d058f96a40cab8..fc75076d5c9445 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -64,8 +64,8 @@ ACCOUNT_SRV = COLOR_PALE_GREEN_GRAY, ACCOUNT_CAR = COLOR_BEIGE, ACCOUNT_SEC = COLOR_PALE_RED_GRAY, - ACCOUNT_CMD = COLOR_BLUE_GRAY, // SKYRAT EDIT ADDITION - ACCOUNT_CCM = COLOR_DARK_MODERATE_LIME_GREEN, // SKYRAT EDIT ADDITION + ACCOUNT_CMD = COLOR_BLUE_GRAY, // NOVA EDIT ADDITION + ACCOUNT_CCM = COLOR_DARK_MODERATE_LIME_GREEN, // NOVA EDIT ADDITION ) // Icons @@ -154,14 +154,18 @@ /obj/item/mail/examine_more(mob/user) . = ..() - var/list/msg = list(span_notice("You notice the postmarking on the front of the mail...")) + if(!postmarked) + . += span_info("This mail has no postmarking of any sort...") + else + . += span_notice("You notice the postmarking on the front of the mail...") var/datum/mind/recipient = recipient_ref.resolve() if(recipient) - msg += "\t[span_info("Certified NT mail for [recipient].")]" + . += span_info("[postmarked ? "Certified NT" : "Uncertfieid"] mail for [recipient].") + else if(postmarked) + . += span_info("Certified mail for [GLOB.station_name].") else - msg += "\t[span_info("Certified mail for [GLOB.station_name].")]" - msg += "\t[span_info("Distribute by hand or via destination tagger using the certified NT disposal system.")]" - return msg + . += span_info("This is a dead letter mail with no recipient.") + . += span_info("Distribute by hand or via destination tagger using the certified NT disposal system.") /// Accepts a mind to initialize goodies for a piece of mail. /obj/item/mail/proc/initialize_for_recipient(datum/mind/recipient) @@ -220,7 +224,7 @@ var/list/junk_names = list( /obj/item/paper/pamphlet/gateway = "[initial(name)] for [pick(GLOB.adjectives)] adventurers", /obj/item/paper/pamphlet/violent_video_games = "[initial(name)] for the truth about the arcade centcom doesn't want to hear", - /obj/item/paper/fluff/junkmail_redpill = "[initial(name)] for those feeling [pick(GLOB.adjectives)] working at Nanotrasen", + /obj/item/paper/fluff/junkmail_redpill = "[initial(name)] for those feeling [pick(GLOB.adjectives)] working at Symphionia", /obj/effect/decal/cleanable/ash = "[initial(name)] with INCREDIBLY IMPORTANT ARTIFACT- DELIVER TO SCIENCE DIVISION. HANDLE WITH CARE.", ) @@ -251,6 +255,8 @@ lid_x = -26 lid_y = 2 paint_jobs = null + ///if it'll show the nt mark on the crate + var/postmarked = TRUE /obj/structure/closet/crate/mail/update_icon_state() . = ..() @@ -261,6 +267,11 @@ else icon_state = "[base_icon_state]sealed" +/obj/structure/closet/crate/mail/update_overlays() + . = ..() + if(postmarked) + . += "mail_nt" + /// Fills this mail crate with N pieces of mail, where N is the lower of the amount var passed, and the maximum capacity of this crate. If N is larger than the number of alive human players, the excess will be junkmail. /obj/structure/closet/crate/mail/proc/populate(amount) var/mail_count = min(amount, storage_capacity) @@ -306,6 +317,19 @@ . = ..() populate(INFINITY) +///Used in the mail strike shuttle loan event +/obj/structure/closet/crate/mail/full/mail_strike + desc = "A post crate from somewhere else. It has no NT logo on it." + postmarked = FALSE + +/obj/structure/closet/crate/mail/full/mail_strike/populate(amount) + var/strike_mail_to_spawn = rand(1, storage_capacity-1) + for(var/i in 1 to strike_mail_to_spawn) + if(prob(95)) + new /obj/item/mail/mail_strike(src) + else + new /obj/item/mail/traitor/mail_strike(src) + return ..(storage_capacity - strike_mail_to_spawn) /// Opened mail crate /obj/structure/closet/crate/mail/preopen @@ -383,7 +407,8 @@ playsound(loc, 'sound/items/poster_ripped.ogg', vol = 50, vary = TRUE) for(var/obj/item/stuff as anything in contents) // Mail and envelope actually can have more than 1 item. if(user.put_in_hands(stuff) && armed) - log_bomber(user, "opened armed mail made by [made_by_cached_name] ([made_by_cached_ckey]), activating", stuff) + var/whomst = made_by_cached_name ? "[made_by_cached_name] ([made_by_cached_ckey])" : "no one in particular" + log_bomber(user, "opened armed mail made by [whomst], activating", stuff) INVOKE_ASYNC(stuff, TYPE_PROC_REF(/obj/item, attack_self), user) qdel(src) return TRUE @@ -414,6 +439,55 @@ after_unwrap(user) return TRUE +///Generic mail used in the mail strike shuttle loan event +/obj/item/mail/mail_strike + name = "dead mail" + desc = "An unmarked parcel of unknown origins, effectively undeliverable." + postmarked = FALSE + generic_goodies = list( + /obj/effect/spawner/random/entertainment/money_medium = 2, + /obj/effect/spawner/random/contraband = 2, + /obj/effect/spawner/random/entertainment/money_large = 1, + /obj/effect/spawner/random/entertainment/coin = 1, + /obj/effect/spawner/random/food_or_drink/any_snack_or_beverage = 1, + /obj/effect/spawner/random/entertainment/drugs = 1, + /obj/effect/spawner/random/contraband/grenades = 1, + ) + +/obj/item/mail/mail_strike/Initialize(mapload) + if(prob(35)) + stamped = FALSE + if(prob(35)) + name = "dead envelope" + icon_state = "mail_large" + goodie_count = 2 + stamp_max = 2 + stamp_offset_y = 5 + . = ..() + color = pick(COLOR_SILVER, COLOR_DARK, COLOR_DRIED_TAN, COLOR_ORANGE_BROWN, COLOR_BROWN, COLOR_SYNDIE_RED) + for(var/goodie in 1 to goodie_count) + var/target_good = pick_weight(generic_goodies) + new target_good(src) + +///Also found in the mail strike shuttle loan. It contains a random grenade that'll be triggered when unwrapped +/obj/item/mail/traitor/mail_strike + name = "dead mail" + desc = "An unmarked parcel of unknown origins, effectively undeliverable." + postmarked = FALSE + +/obj/item/mail/traitor/mail_strike/Initialize(mapload) + if(prob(35)) + stamped = FALSE + if(prob(35)) + name = "dead envelope" + icon_state = "mail_large" + goodie_count = 2 + stamp_max = 2 + stamp_offset_y = 5 + . = ..() + color = pick(COLOR_SILVER, COLOR_DARK, COLOR_DRIED_TAN, COLOR_ORANGE_BROWN, COLOR_BROWN, COLOR_SYNDIE_RED) + new /obj/effect/spawner/random/contraband/grenades/dangerous(src) + /obj/item/storage/mail_counterfeit_device name = "GLA-2 mail counterfeit device" desc = "Device that actually able to counterfeit NT's mail. This device also able to place a trap inside of mail for malicious actions. Trap will \"activate\" any item inside of mail. Also it might be used for contraband purposes. Integrated micro-computer will give you great configuration optionality for your needs." diff --git a/code/game/objects/items/maintenance_loot.dm b/code/game/objects/items/maintenance_loot.dm index bfdc53ea916ed9..538e4cac93d437 100644 --- a/code/game/objects/items/maintenance_loot.dm +++ b/code/game/objects/items/maintenance_loot.dm @@ -11,8 +11,8 @@ lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' //wow, lore - desc = "A hefty lead pipe.\nLead in an uncommon sight in this sector after being phased out due to employee health concerns. \ - \nThose of a more cynical disposition assume that the NT lead ban is a scheme to prevent divertion to Syndicate ammunition factories." + desc = "A hefty lead pipe.\nLead is an uncommon sight in this sector after being phased out due to employee health concerns. \ + \nThose of a more cynical disposition have claimed that the NT lead ban is a scheme to prevent diversion to Syndicate ammunition factories." force = 15 throwforce = 12 throw_range = 4 @@ -25,12 +25,12 @@ //Add lead material to this once implemented. /obj/item/stock_parts/cell/lead name = "lead-acid battery" - desc = "A type of primitive battery. It is quite large feels unexpectedly heavy." + desc = "A primitive battery. It is quite large and feels unexpectedly heavy." icon = 'icons/obj/maintenance_loot.dmi' icon_state = "lead_battery" throwforce = 10 maxcharge = 20000 //decent max charge - chargerate = 1400 //charging is about 30% less efficient compared lithium batteries. + chargerate = 1400 //charging is about 30% less efficient than lithium batteries. charge_light_type = null connector_type = "leadacid" rating = 2 //Kind of a mid-tier battery diff --git a/code/game/objects/items/manuals.dm b/code/game/objects/items/manuals.dm index 9d8cd8e9426e9d..e89391f7887278 100644 --- a/code/game/objects/items/manuals.dm +++ b/code/game/objects/items/manuals.dm @@ -232,228 +232,3 @@ Good luck! "} - -// Wiki books that are linked to the configured wiki link. - -// A book that links to the wiki -/obj/item/book/manual/wiki - var/page_link = "" - window_size = "970x710" - -/obj/item/book/manual/wiki/attack_self() - if(!book_data.content) - initialize_wikibook() - return ..() - -/obj/item/book/manual/wiki/proc/initialize_wikibook() - var/wikiurl = CONFIG_GET(string/wikiurl) - if(wikiurl) - var/wikiinfo = {" - - - - - - - - -

You start skimming through the manual...

- - - - - - "} - book_data.set_content(wikiinfo, trusted = TRUE) - -/obj/item/book/manual/wiki/chemistry - name = "Chemistry Textbook" - icon_state ="chemistrybook" - starting_author = "Nanotrasen" - starting_title = "Chemistry Textbook" - page_link = "Guide_to_chemistry" - -/obj/item/book/manual/wiki/engineering_construction - name = "Station Repairs and Construction" - icon_state ="bookEngineering" - starting_author = "Engineering Encyclopedia" - starting_title = "Station Repairs and Construction" - page_link = "Guide_to_construction" - -/obj/item/book/manual/wiki/engineering_guide - name = "Engineering Textbook" - icon_state ="bookEngineering2" - starting_author = "Engineering Encyclopedia" - starting_title = "Engineering Textbook" - page_link = "Guide_to_engineering" - -/obj/item/book/manual/wiki/security_space_law - name = "Corporate Regulations" //SKYRAT EDIT CHANGE - Original: "Space Law" - desc = "A set of Nanotrasen regulations for keeping law, order, and procedure followed within their space stations." //SKYRAT EDIT CHANGE - Original: "A set of Nanotrasen guidelines for keeping law and order on their space stations." - icon_state = "bookSpaceLaw" - starting_author = "Nanotrasen" - starting_title = "Corporate Regulations" //SKYRAT EDIT CHANGE - Original: "Space Law" - page_link = "Corporate_Regulations" //SKYRAT EDIT CHANGE - Original: "Space_Law" - -/obj/item/book/manual/wiki/security_space_law/suicide_act(mob/living/user) - user.visible_message(span_suicide("[user] pretends to read \the [src] intently... then promptly dies of laughter!")) - return OXYLOSS - -/obj/item/book/manual/wiki/infections - name = "Infections - Making your own pandemic!" - icon_state = "bookInfections" - starting_author = "Infections Encyclopedia" - starting_title = "Infections - Making your own pandemic!" - page_link = "Infections" - -/obj/item/book/manual/wiki/telescience - name = "Teleportation Science - Bluespace for dummies!" - icon_state = "book7" - starting_author = "University of Bluespace" - starting_title = "Teleportation Science - Bluespace for dummies!" - page_link = "Guide_to_telescience" - -/obj/item/book/manual/wiki/engineering_hacking - name = "Hacking" - icon_state ="bookHacking" - starting_author = "Engineering Encyclopedia" - starting_title = "Hacking" - page_link = "Hacking" - -/obj/item/book/manual/wiki/detective - name = "The Film Noir: Proper Procedures for Investigations" - icon_state ="bookDetective" - starting_author = "Nanotrasen" - starting_title = "The Film Noir: Proper Procedures for Investigations" - page_link = "Detective" - -/obj/item/book/manual/wiki/barman_recipes - name = "Barman Recipes: Mixing Drinks and Changing Lives" - icon_state = "barbook" - starting_author = "Sir John Rose" - starting_title = "Barman Recipes: Mixing Drinks and Changing Lives" - page_link = "Guide_to_drinks" - -/obj/item/book/manual/wiki/robotics_cyborgs - name = "Robotics for Dummies" - icon_state = "borgbook" - starting_author = "XISC" - starting_title = "Robotics for Dummies" - page_link = "Guide_to_robotics" - -/obj/item/book/manual/wiki/research_and_development - name = "Research and Development 101" - icon_state = "rdbook" - starting_author = "Dr. L. Ight" - starting_title = "Research and Development 101" - page_link = "Guide_to_Research_and_Development" - -/obj/item/book/manual/wiki/experimentor - name = "Mentoring your Experiments" - icon_state = "rdbook" - starting_author = "Dr. H.P. Kritz" - starting_title = "Mentoring your Experiments" - page_link = "Experimentor" - -/obj/item/book/manual/wiki/cooking_to_serve_man - name = "To Serve Man" - desc = "It's a cookbook!" - icon_state ="cooked_book" - starting_author = "the Kanamitan Empire" - starting_title = "To Serve Man" - page_link = "Guide_to_food" - -/obj/item/book/manual/wiki/tcomms - name = "Subspace Telecommunications And You" - icon_state = "book3" - starting_author = "Engineering Encyclopedia" - starting_title = "Subspace Telecommunications And You" - page_link = "Guide_to_Telecommunications" - -/obj/item/book/manual/wiki/atmospherics - name = "Lexica Atmosia" - icon_state = "book5" - starting_author = "the City-state of Atmosia" - starting_title = "Lexica Atmosia" - page_link = "Guide_to_Atmospherics" - -/obj/item/book/manual/wiki/medicine - name = "Medical Space Compendium, Volume 638" - icon_state = "book8" - starting_author = "Medical Journal" - starting_title = "Medical Space Compendium, Volume 638" - page_link = "Guide_to_medicine" - -/obj/item/book/manual/wiki/surgery - name = "Brain Surgery for Dummies" - icon_state = "book4" - starting_author = "Dr. F. Fran" - starting_title = "Brain Surgery for Dummies" - page_link = "Surgery" - -/obj/item/book/manual/wiki/grenades - name = "DIY Chemical Grenades" - icon_state = "book2" - starting_author = "W. Powell" - starting_title = "DIY Chemical Grenades" - page_link = "Grenade" - -/obj/item/book/manual/wiki/ordnance - name = "Ordnance for Dummies or: How I Learned to Stop Worrying and Love the Maxcap" - icon_state = "book6" - starting_author = "Cuban Pete" - starting_title = "Ordnance for Dummies or: How I Learned to Stop Worrying and Love the Maxcap" - page_link = "Guide_to_toxins" - -/obj/item/book/manual/wiki/ordnance/suicide_act(mob/living/user) - var/mob/living/carbon/human/H = user - user.visible_message(span_suicide("[user] starts dancing to the Rhumba Beat! It looks like [user.p_theyre()] trying to commit suicide!")) - playsound(loc, 'sound/effects/spray.ogg', 10, TRUE, -3) - if (!QDELETED(H)) - H.emote("spin") - sleep(2 SECONDS) - for(var/obj/item/W in H) - H.dropItemToGround(W) - if(prob(50)) - step(W, pick(GLOB.alldirs)) - ADD_TRAIT(H, TRAIT_DISFIGURED, TRAIT_GENERIC) - for(var/obj/item/bodypart/part as anything in H.bodyparts) - part.adjustBleedStacks(5) - H.gib_animation() - sleep(0.3 SECONDS) - H.adjustBruteLoss(1000) //to make the body super-bloody - // if we use gib() then the body gets deleted - H.spawn_gibs() - H.spill_organs(DROP_ALL_REMAINS) - H.spread_bodyparts(DROP_BRAIN) - return BRUTELOSS - -/obj/item/book/manual/wiki/plumbing - name = "Chemical Factories Without Narcotics" - icon_state ="plumbingbook" - starting_author = "Nanotrasen" - starting_title = "Chemical Factories Without Narcotics" - page_link = "Guide_to_plumbing" - -/obj/item/book/manual/wiki/cytology - name = "Unethically Grown Organics" - icon_state ="cytologybook" - starting_author = "Kryson" - starting_title = "Unethically Grown Organics" - page_link = "Guide_to_cytology" - -/obj/item/book/manual/wiki/tgc - name = "Tactical Game Cards - Player's Handbook" - icon_state = "tgcbook" - starting_author = "Nanotrasen Edu-tainment Division" - starting_title = "Tactical Game Cards - Player's Handbook" - page_link = "Tactical_Game_Cards" diff --git a/code/game/objects/items/melee/baton.dm b/code/game/objects/items/melee/baton.dm index 8a8635d879a2e6..9ef13ab4a1a842 100644 --- a/code/game/objects/items/melee/baton.dm +++ b/code/game/objects/items/melee/baton.dm @@ -26,7 +26,7 @@ /// The length of the knockdown applied to the user on clumsy_check() var/clumsy_knockdown_time = 18 SECONDS /// How much stamina damage we deal on a successful hit against a living, non-cyborg mob. - var/stamina_damage = 35 // SKYRAT EDIT - Less Stamina Damage (Original: 55) + var/stamina_damage = 35 // NOVA EDIT - Less Stamina Damage (Original: 55) /// Chance of causing force_say() when stunning a human mob var/force_say_chance = 33 /// Can we stun cyborgs? @@ -42,22 +42,22 @@ /// Boolean on whether people with chunky fingers can use this baton. var/chunky_finger_usable = FALSE - /// The context to show when the baton is active and targetting a living thing + /// The context to show when the baton is active and targeting a living thing var/context_living_target_active = "Stun" - /// The context to show when the baton is active and targetting a living thing in combat mode + /// The context to show when the baton is active and targeting a living thing in combat mode var/context_living_target_active_combat_mode = "Stun" - /// The context to show when the baton is inactive and targetting a living thing + /// The context to show when the baton is inactive and targeting a living thing var/context_living_target_inactive = "Prod" - /// The context to show when the baton is inactive and targetting a living thing in combat mode + /// The context to show when the baton is inactive and targeting a living thing in combat mode var/context_living_target_inactive_combat_mode = "Attack" - /// The RMB context to show when the baton is active and targetting a living thing + /// The RMB context to show when the baton is active and targeting a living thing var/context_living_rmb_active = "Attack" - /// The RMB context to show when the baton is inactive and targetting a living thing + /// The RMB context to show when the baton is inactive and targeting a living thing var/context_living_rmb_inactive = "Attack" /obj/item/melee/baton/Initialize(mapload) @@ -175,13 +175,10 @@ target.visible_message(desc["visible"], desc["local"]) /obj/item/melee/baton/proc/check_parried(mob/living/carbon/human/human_target, mob/living/user) - if(!ishuman(human_target)) - return - if (human_target.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) + if (human_target.check_block(src, 0, "[user]'s [name]", MELEE_ATTACK)) playsound(human_target, 'sound/weapons/genhit.ogg', 50, TRUE) return TRUE - if(check_martial_counter(human_target, user)) - return TRUE + return FALSE /obj/item/melee/baton/proc/finalize_baton_attack(mob/living/target, mob/living/user, modifiers, in_attack_chain = TRUE) if(!in_attack_chain && HAS_TRAIT_FROM(target, TRAIT_IWASBATONED, REF(user))) @@ -379,7 +376,7 @@ /obj/item/melee/baton/telescopic/contractor_baton name = "contractor baton" - desc = "A compact, specialised baton assigned to Syndicate contractors. Applies light electrical shocks to targets." + desc = "A compact, specialised baton assigned to Symphionia contractors. Applies light electrical shocks to targets." icon = 'icons/obj/weapons/baton.dmi' icon_state = "contractor_baton" worn_icon_state = "contractor_baton" @@ -391,7 +388,7 @@ force = 5 cooldown = 2.5 SECONDS force_say_chance = 80 //very high force say chance because it's funny - stamina_damage = 115 // SKYRAT EDIT: Original 85 + stamina_damage = 115 // NOVA EDIT: Original 85 clumsy_knockdown_time = 24 SECONDS affect_cyborg = TRUE on_stun_sound = 'sound/effects/contractorbatonhit.ogg' @@ -422,7 +419,7 @@ armor_type = /datum/armor/baton_security throwforce = 7 force_say_chance = 50 - stamina_damage = 35 // SKYRAT EDIT - 4 baton crit now (Original: 60) + stamina_damage = 35 // NOVA EDIT - 4 baton crit now (Original: 60) knockdown_time = 5 SECONDS clumsy_knockdown_time = 15 SECONDS cooldown = 2.5 SECONDS @@ -600,7 +597,7 @@ */ /obj/item/melee/baton/security/additional_effects_non_cyborg(mob/living/target, mob/living/user) target.set_jitter_if_lower(40 SECONDS) - // target.set_confusion_if_lower(10 SECONDS) // SKYRAT EDIT REMOVAL + // target.set_confusion_if_lower(10 SECONDS) // NOVA EDIT REMOVAL target.set_stutter_if_lower(16 SECONDS) SEND_SIGNAL(target, COMSIG_LIVING_MINOR_SHOCK) @@ -628,11 +625,11 @@ . = list() .["visible"] = span_danger("[user] tries to stun [target] with [src], and predictably fails!") - .["local"] = span_userdanger("[target] tries to... stun you with [src]?") + .["local"] = span_userdanger("[user] tries to... stun you with [src]?") /obj/item/melee/baton/security/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) . = ..() - if(active && prob(throw_stun_chance) && isliving(hit_atom)) + if(!. && active && prob(throw_stun_chance) && isliving(hit_atom)) finalize_baton_attack(hit_atom, thrownby?.resolve(), in_attack_chain = FALSE) /obj/item/melee/baton/security/emp_act(severity) diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index bfd60d525558d6..f14e6aae9991a4 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -29,7 +29,7 @@ /// The heat given off when active. var/active_heat = 3500 - // SKYRAT EDIT ADD START + // NOVA EDIT ADD START /// The sound played when the item is turned on var/enable_sound = 'sound/weapons/saberon.ogg' @@ -37,7 +37,7 @@ /// The sound played when the item is turned off var/disable_sound = 'sound/weapons/saberoff.ogg' - // SKYRAT EDIT ADD END + // NOVA EDIT ADD END /datum/armor/melee_energy fire = 100 @@ -159,7 +159,7 @@ armour_penetration = 100 sharpness = SHARP_EDGED w_class = WEIGHT_CLASS_NORMAL - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY light_color = LIGHT_COLOR_LIGHT_CYAN active_force = 150 @@ -203,6 +203,10 @@ /obj/item/melee/energy/sword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) if(!HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE)) return FALSE + + if(attack_type == LEAP_ATTACK) + final_block_chance -= 25 //OH GOD GET IT OFF ME + return ..() /obj/item/melee/energy/sword/cyborg @@ -227,7 +231,7 @@ return attack_self(user) -/obj/item/melee/energy/sword/cyborg/saw //Used by medical Syndicate cyborgs +/obj/item/melee/energy/sword/cyborg/saw //Used by medical Symphionia cyborgs name = "energy saw" desc = "For heavy duty cutting. It has a carbon-fiber blade in addition to a toggleable hard-light edge to dramatically increase sharpness." icon = 'icons/obj/medical/surgery_tools.dmi' diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 77f002c3f1e9d3..0f30507a905890 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -1,14 +1,7 @@ +// Deprecated, you do not need to use this type for melee weapons. /obj/item/melee item_flags = NEEDS_PERMIT -/obj/item/melee/proc/check_martial_counter(mob/living/carbon/human/target, mob/living/carbon/human/user) - if(target.check_block()) - target.visible_message(span_danger("[target.name] blocks [src] and twists [user]'s arm behind [user.p_their()] back!"), - span_userdanger("You block the attack!")) - user.Stun(40) - return TRUE - - /obj/item/melee/chainofcommand name = "chain of command" desc = "A tool used by great men to placate the frothing masses." @@ -18,7 +11,7 @@ worn_icon_state = "whip" lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT force = 10 throwforce = 7 @@ -60,14 +53,14 @@ //very imprecise /obj/item/melee/sabre - name = "officer's sabre" //SKYRAT EDIT - Buffed in modular_skyrat/modules/modular_weapons/code/melee.dm + name = "officer's sabre" //NOVA EDIT - Buffed in modular_nova/modules/modular_weapons/code/melee.dm desc = "An elegant weapon, its monomolecular edge is capable of cutting through flesh and bone with ease." icon = 'icons/obj/weapons/sword.dmi' icon_state = "sabre" inhand_icon_state = "sabre" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY obj_flags = UNIQUE_RENAME force = 15 throwforce = 10 @@ -119,8 +112,8 @@ INVOKE_ASYNC(baned_target, TYPE_PROC_REF(/mob/living/carbon/human, emote), "scream") /obj/item/melee/sabre/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) - if(attack_type == PROJECTILE_ATTACK) - final_block_chance = 0 //Don't bring a sword to a gunfight + if(attack_type == PROJECTILE_ATTACK || attack_type == LEAP_ATTACK) + final_block_chance = 0 //Don't bring a sword to a gunfight, and also you aren't going to really block someone full body tackling you with a sword return ..() /obj/item/melee/sabre/on_exit_storage(datum/storage/container) @@ -198,6 +191,11 @@ hitsound = 'sound/weapons/rapierhit.ogg' block_sound = 'sound/weapons/parry.ogg' +/obj/item/melee/beesword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) + if(attack_type == PROJECTILE_ATTACK || attack_type == LEAP_ATTACK) + final_block_chance = 0 //Don't bring a sword to a gunfight, and also you aren't going to really block someone full body tackling you with a sword + return ..() + /obj/item/melee/beesword/afterattack(atom/target, mob/user, proximity) . = ..() if(!proximity) @@ -489,3 +487,8 @@ armour_penetration = 50 attack_verb_continuous = list("smacks", "strikes", "cracks", "beats") attack_verb_simple = list("smack", "strike", "crack", "beat") + +/obj/item/melee/cleric_mace/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) + if(attack_type == PROJECTILE_ATTACK || attack_type == LEAP_ATTACK) + final_block_chance = 0 //Don't bring a...mace to a gunfight, and also you aren't going to really block someone full body tackling you with a mace + return ..() diff --git a/code/game/objects/items/mop.dm b/code/game/objects/items/mop.dm index 8a59c8c8326358..9528894232d6ec 100644 --- a/code/game/objects/items/mop.dm +++ b/code/game/objects/items/mop.dm @@ -16,7 +16,7 @@ resistance_flags = FLAMMABLE var/mopcount = 0 ///Maximum volume of reagents it can hold. - var/max_reagent_volume = 50 // SKYRAT EDIT - ORIGINAL: 15 + var/max_reagent_volume = 50 // NOVA EDIT - ORIGINAL: 15 var/mopspeed = 1.5 SECONDS force_string = "robust... against germs" var/insertable = TRUE @@ -50,7 +50,7 @@ if(reagents.total_volume < 0.1) cleaner.balloon_alert(cleaner, "mop is dry!") return DO_NOT_CLEAN - return reagents.has_chemical_flag(REAGENT_CLEANS, 1) + return reagents.has_reagent(amount = 1, chemical_flags = REAGENT_CLEANS) /** * Applies reagents to the cleaned floor and removes them from the mop. @@ -60,7 +60,9 @@ * * cleaned_turf the turf that is being cleaned * * cleaner the mob that is doing the cleaning */ -/obj/item/mop/proc/apply_reagents(datum/cleaning_source, turf/cleaned_turf, mob/living/cleaner) +/obj/item/mop/proc/apply_reagents(datum/cleaning_source, turf/cleaned_turf, mob/living/cleaner, clean_succeeded) + if(!clean_succeeded) + return reagents.expose(cleaned_turf, TOUCH, 10) //Needed for proper floor wetting. var/val2remove = 1 if(cleaner?.mind) @@ -72,9 +74,9 @@ ADD_TRAIT(src, TRAIT_NODROP, CYBORG_ITEM_TRAIT) /obj/item/mop/advanced - desc = "The most advanced tool in a custodian's arsenal, complete with a condenser for self-wetting! Just think of all the viscera you will clean up with this! Due to the self-wetting technology, it proves very inefficient for cleaning up spills." //SKYRAT EDIT + desc = "The most advanced tool in a custodian's arsenal, complete with a condenser for self-wetting! Just think of all the viscera you will clean up with this! Due to the self-wetting technology, it proves very inefficient for cleaning up spills." //NOVA EDIT name = "advanced mop" - max_reagent_volume = 100 // SKYRAT EDIT - ORIGINAL: 10 + max_reagent_volume = 100 // NOVA EDIT - ORIGINAL: 10 icon_state = "advmop" inhand_icon_state = "advmop" lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' diff --git a/code/game/objects/items/paint.dm b/code/game/objects/items/paint.dm index cf859daf3f1017..0b357c3c728c2b 100644 --- a/code/game/objects/items/paint.dm +++ b/code/game/objects/items/paint.dm @@ -14,7 +14,7 @@ /// With what color will we paint with var/paint_color = COLOR_WHITE /// How many uses are left - var/paintleft = 10 + var/paintleft = 200 /obj/item/paint/Initialize(mapload) . = ..() diff --git a/code/game/objects/items/pet_carrier.dm b/code/game/objects/items/pet_carrier.dm index 86c548ea4de0b8..6a5d1280a603af 100644 --- a/code/game/objects/items/pet_carrier.dm +++ b/code/game/objects/items/pet_carrier.dm @@ -86,7 +86,7 @@ if(target.mob_size > max_occupant_weight) if(ishuman(target)) var/mob/living/carbon/human/H = target - if(isfeline(H)) // SKYRAT EDIT - FELINE TRAITS. Was: isfelinid(H) + if(isfeline(H)) // NOVA EDIT - FELINE TRAITS. Was: isfelinid(H) to_chat(user, span_warning("You'd need a lot of catnip and treats, plus maybe a laser pointer, for that to work.")) else to_chat(user, span_warning("Humans, generally, do not fit into pet carriers.")) diff --git a/code/game/objects/items/pinpointer.dm b/code/game/objects/items/pinpointer.dm index 4c2c526c2c1b25..3a020ec5393ea2 100644 --- a/code/game/objects/items/pinpointer.dm +++ b/code/game/objects/items/pinpointer.dm @@ -2,9 +2,9 @@ /obj/item/pinpointer name = "pinpointer" desc = "A handheld tracking device that locks onto certain signals." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tracker.dmi' icon_state = "pinpointer" - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_SMALL inhand_icon_state = "electronic" diff --git a/code/game/objects/items/powerfist.dm b/code/game/objects/items/powerfist.dm index 735d30929601c8..0054520c957ee1 100644 --- a/code/game/objects/items/powerfist.dm +++ b/code/game/objects/items/powerfist.dm @@ -14,7 +14,7 @@ inhand_icon_state = "powerfist" lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY attack_verb_continuous = list("whacks", "fists", "power-punches") attack_verb_simple = list("whack", "fist", "power-punch") force = 20 diff --git a/code/game/objects/items/rcd/RCD.dm b/code/game/objects/items/rcd/RCD.dm index 297c8a1eabd9e3..ab97026a6a13a4 100644 --- a/code/game/objects/items/rcd/RCD.dm +++ b/code/game/objects/items/rcd/RCD.dm @@ -138,14 +138,14 @@ var/list/structures_to_ignore if(istype(target, /obj/structure/grille)) if(is_full_tile) //if we are trying to build full-tile windows we ignore the grille - structures_to_ignore = list(target) - else //no building directional windows on grills - return FALSE + structures_to_ignore = list(/obj/structure/grille) + else //when building directional windows we ignore the grill and other directional windows + structures_to_ignore = list(/obj/structure/grille, /obj/structure/window) else //for directional windows we ignore other directional windows as they can be in diffrent directions on the turf. structures_to_ignore = list(/obj/structure/window) //check if we can build our window on the grill - if(target_turf.is_blocked_turf(exclude_mobs = !is_full_tile, source_atom = null, ignore_atoms = structures_to_ignore, type_list = !is_full_tile)) + if(target_turf.is_blocked_turf(exclude_mobs = !is_full_tile, source_atom = null, ignore_atoms = structures_to_ignore, type_list = TRUE)) playsound(loc, 'sound/machines/click.ogg', 50, TRUE) balloon_alert(user, "something is blocking the turf") return FALSE diff --git a/code/game/objects/items/rcd/RHD.dm b/code/game/objects/items/rcd/RHD.dm index d9c4c7cd9b7717..8abf1f2e3f2ef1 100644 --- a/code/game/objects/items/rcd/RHD.dm +++ b/code/game/objects/items/rcd/RHD.dm @@ -8,7 +8,7 @@ opacity = FALSE density = FALSE anchored = FALSE - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = NOBLUDGEON force = 0 throwforce = 10 @@ -284,7 +284,7 @@ /obj/item/rcd_upgrade name = "RCD advanced design disk" desc = "It seems to be empty." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "datadisk3" var/upgrade diff --git a/code/game/objects/items/rcd/RPD.dm b/code/game/objects/items/rcd/RPD.dm index a7b10cc516aa44..9af1041779e1e5 100644 --- a/code/game/objects/items/rcd/RPD.dm +++ b/code/game/objects/items/rcd/RPD.dm @@ -9,6 +9,8 @@ #define DESTROY_MODE (1<<2) #define REPROGRAM_MODE (1<<3) +#define PIPE_LAYER(num) (1<<(num-1)) + ///Sound to make when we use the item to build/destroy something #define RPD_USE_SOUND 'sound/items/deconstruct.ogg' @@ -170,7 +172,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( worn_icon_state = "RPD" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY force = 10 throwforce = 10 throw_speed = 1 @@ -196,14 +198,12 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( var/disposal_build_speed = 0.5 SECONDS ///Speed of building transit devices var/transit_build_speed = 0.5 SECONDS - ///Speed of removal of unwrenched devices - var/destroy_speed = 0.2 SECONDS - ///Speed of reprogramming connectable directions of smart pipes - var/reprogram_speed = 0.2 SECONDS ///Category currently active (Atmos, disposal, transit) var/category = ATMOS_CATEGORY - ///Piping layer we are going to spawn the atmos device in - var/piping_layer = PIPING_LAYER_DEFAULT + ///All pipe layers we are going to spawn the atmos devices in + var/pipe_layers = PIPE_LAYER(3) + ///Are we laying multiple layers per click + var/multi_layer = FALSE ///Layer for disposal ducts var/ducting_layer = DUCT_LAYER_DEFAULT ///Stores the current device to spawn @@ -259,6 +259,13 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( UnregisterSignal(user, COMSIG_MOUSE_SCROLL_ON) return ..() +/obj/item/pipe_dispenser/proc/get_active_pipe_layers() + var/list/layer_nums = list() + for(var/pipe_layer_number in 1 to 5) + if(PIPE_LAYER(pipe_layer_number) & pipe_layers) + layer_nums += pipe_layer_number + return layer_nums + /obj/item/pipe_dispenser/cyborg_unequip(mob/user) UnregisterSignal(user, COMSIG_MOUSE_SCROLL_ON) return ..() @@ -271,7 +278,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN if(target.pipe_color && target.piping_layer) paint_color = GLOB.pipe_color_name[target.pipe_color] - piping_layer = target.piping_layer + pipe_layers = PIPE_LAYER(target.piping_layer) balloon_alert(user, "color/layer copied") return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN @@ -308,7 +315,8 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( /obj/item/pipe_dispenser/ui_data(mob/user) var/list/data = list( "category" = category, - "piping_layer" = piping_layer, + "multi_layer" = multi_layer, + "pipe_layers" = pipe_layers, "ducting_layer" = ducting_layer, "categories" = list(), "selected_recipe" = recipe.name, @@ -369,9 +377,25 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( recipe = first_transit p_dir = NORTH playeffect = FALSE - if("piping_layer") - piping_layer = text2num(params["piping_layer"]) + if("pipe_layers") + var/selected_layers = text2num(params["pipe_layers"]) + var/valid_layer = FALSE + for(var/pipe_layer_number in 1 to 5) + if(!(PIPE_LAYER(pipe_layer_number) & selected_layers)) + continue + valid_layer = TRUE + if(!valid_layer) + return + if(multi_layer) + if(pipe_layers != selected_layers) + pipe_layers ^= selected_layers + else + pipe_layers = selected_layers playeffect = FALSE + if("toggle_multi_layer") + if(multi_layer) + pipe_layers = PIPE_LAYER(max(get_active_pipe_layers())) + multi_layer = !multi_layer if("ducting_layer") ducting_layer = text2num(params["ducting_layer"]) playeffect = FALSE @@ -408,26 +432,15 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( return ..() if(istype(atom_to_attack, /obj/item/rpd_upgrade)) - var/obj/item/rpd_upgrade/rpd_up = atom_to_attack - - //already installed - if(rpd_up.upgrade_flags & upgrade_flags) - balloon_alert(user, "already installed!") - return TRUE - - //install & delete upgrade - upgrade_flags |= rpd_up.upgrade_flags - playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE) - balloon_alert(user, "upgrade installed") - qdel(rpd_up) + install_upgrade(atom_to_attack, user) return TRUE var/atom/attack_target = atom_to_attack //So that changing the menu settings doesn't affect the pipes already being built. - var/queued_p_type = recipe.id - var/queued_p_dir = p_dir - var/queued_p_flipped = p_flipped + var/queued_pipe_type = recipe.id + var/queued_pipe_dir = p_dir + var/queued_pipe_flipped = p_flipped //Unwrench pipe before we build one over/paint it, but only if we're not already running a do_after on it already to prevent a potential runtime. if((mode & DESTROY_MODE) && (upgrade_flags & RPD_UPGRADE_UNWRENCH) && istype(attack_target, /obj/machinery/atmospherics) && !(DOING_INTERACTION_WITH_TARGET(user, attack_target))) @@ -435,21 +448,17 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( if(!isatom(attack_target)) //can return null, FALSE if do_after() fails see /obj/machinery/atmospherics/wrench_act() return TRUE - //make sure what we're clicking is valid for the current category - var/static/list/make_pipe_whitelist - if(!make_pipe_whitelist) - make_pipe_whitelist = typecacheof(list(/obj/structure/lattice, /obj/structure/girder, /obj/item/pipe, /obj/structure/window, /obj/structure/grille)) - if(istype(attack_target, /obj/machinery/atmospherics) && mode & BUILD_MODE) + if(istype(attack_target, /obj/machinery/atmospherics) && (mode & BUILD_MODE)) attack_target = get_turf(attack_target) - var/can_make_pipe = (isturf(attack_target) || is_type_in_typecache(attack_target, make_pipe_whitelist)) + + var/can_make_pipe = check_can_make_pipe(attack_target) . = TRUE if((mode & DESTROY_MODE) && istype(attack_target, /obj/item/pipe) || istype(attack_target, /obj/structure/disposalconstruct) || istype(attack_target, /obj/structure/c_transit_tube) || istype(attack_target, /obj/structure/c_transit_tube_pod) || istype(attack_target, /obj/item/pipe_meter) || istype(attack_target, /obj/structure/disposalpipe/broken)) playsound(get_turf(src), 'sound/machines/click.ogg', 50, TRUE) - if(do_after(user, destroy_speed, target = attack_target)) - playsound(get_turf(src), RPD_USE_SOUND, 50, TRUE) - qdel(attack_target) + playsound(get_turf(src), RPD_USE_SOUND, 50, TRUE) + qdel(attack_target) return if(mode & REPROGRAM_MODE) @@ -470,8 +479,6 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( return playsound(get_turf(src), 'sound/machines/click.ogg', 50, TRUE) - if(!do_after(user, reprogram_speed, target = target_smart_pipe)) - return // Something else could have changed the target's state while we were waiting in do_after // Most of the edge cases don't matter, but atmos components being able to have live connections not described by initializable directions sounds like a headache at best and an exploit at worst @@ -525,46 +532,8 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( if(mode & BUILD_MODE) switch(category) //if we've gotten this var, the target is valid if(ATMOS_CATEGORY) //Making pipes - if(!can_make_pipe) + if(!do_pipe_build(attack_target, user, params)) return ..() - playsound(get_turf(src), 'sound/machines/click.ogg', 50, TRUE) - if (recipe.type == /datum/pipe_info/meter) - if(do_after(user, atmos_build_speed, target = attack_target)) - playsound(get_turf(src), RPD_USE_SOUND, 50, TRUE) - var/obj/item/pipe_meter/new_meter = new /obj/item/pipe_meter(get_turf(attack_target)) - new_meter.setAttachLayer(piping_layer) - if(mode & WRENCH_MODE) - new_meter.wrench_act(user, src) - else - if(recipe.all_layers == FALSE && (piping_layer == 1 || piping_layer == 5)) - balloon_alert(user, "can't build on this layer!") - return ..() - if(do_after(user, atmos_build_speed, target = attack_target)) - if(recipe.all_layers == FALSE && (piping_layer == 1 || piping_layer == 5))//double check to stop cheaters (and to not waste time waiting for something that can't be placed) - balloon_alert(user, "can't build on this layer!") - return ..() - playsound(get_turf(src), RPD_USE_SOUND, 50, TRUE) - var/obj/machinery/atmospherics/path = queued_p_type - var/pipe_item_type = initial(path.construction_type) || /obj/item/pipe - var/obj/item/pipe/pipe_type = new pipe_item_type( - get_turf(attack_target), - queued_p_type, - queued_p_dir, - null, - GLOB.pipe_paint_colors[paint_color], - ispath(queued_p_type, /obj/machinery/atmospherics/pipe/smart) ? p_init_dir : null, - ) - if(queued_p_flipped && istype(pipe_type, /obj/item/pipe/trinary/flippable)) - var/obj/item/pipe/trinary/flippable/new_flippable_pipe = pipe_type - new_flippable_pipe.flipped = queued_p_flipped - - pipe_type.update() - pipe_type.add_fingerprint(usr) - pipe_type.set_piping_layer(piping_layer) - if(ispath(queued_p_type, /obj/machinery/atmospherics) && !ispath(queued_p_type, /obj/machinery/atmospherics/pipe/color_adapter)) - pipe_type.add_atom_colour(GLOB.pipe_paint_colors[paint_color], FIXED_COLOUR_PRIORITY) - if(mode & WRENCH_MODE) - pipe_type.wrench_act(user, src) if(DISPOSALS_CATEGORY) //Making disposals pipes if(!can_make_pipe) @@ -575,7 +544,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( return playsound(get_turf(src), 'sound/machines/click.ogg', 50, TRUE) if(do_after(user, disposal_build_speed, target = attack_target)) - var/obj/structure/disposalconstruct/new_disposals_segment = new (attack_target, queued_p_type, queued_p_dir, queued_p_flipped) + var/obj/structure/disposalconstruct/new_disposals_segment = new (attack_target, queued_pipe_type, queued_pipe_dir, queued_pipe_flipped) if(!new_disposals_segment.can_place()) balloon_alert(user, "not enough room!") @@ -606,18 +575,18 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( playsound(get_turf(src), 'sound/machines/click.ogg', 50, TRUE) if(do_after(user, transit_build_speed, target = attack_target)) playsound(get_turf(src), RPD_USE_SOUND, 50, TRUE) - if(queued_p_type == /obj/structure/c_transit_tube_pod) + if(queued_pipe_type == /obj/structure/c_transit_tube_pod) var/obj/structure/c_transit_tube_pod/pod = new /obj/structure/c_transit_tube_pod(attack_target) pod.add_fingerprint(usr) if(mode & WRENCH_MODE) pod.wrench_act(user, src) else - var/obj/structure/c_transit_tube/tube = new queued_p_type(attack_target) - tube.setDir(queued_p_dir) + var/obj/structure/c_transit_tube/tube = new queued_pipe_type(attack_target) + tube.setDir(queued_pipe_dir) - if(queued_p_flipped) - tube.setDir(turn(queued_p_dir, 45 + ROTATION_FLIP)) + if(queued_pipe_flipped) + tube.setDir(turn(queued_pipe_dir, 45 + ROTATION_FLIP)) tube.AfterRotation(user, ROTATION_FLIP) tube.add_fingerprint(usr) @@ -627,29 +596,110 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( else return ..() +/obj/item/pipe_dispenser/proc/check_can_make_pipe(atom/target_of_attack) + //make sure what we're clicking is valid for the current category + var/static/list/make_pipe_whitelist = typecacheof(list(/obj/structure/lattice, /obj/structure/girder, /obj/item/pipe, /obj/structure/window, /obj/structure/grille)) + var/can_we_make_pipe = (isturf(target_of_attack) || is_type_in_typecache(target_of_attack, make_pipe_whitelist)) + return can_we_make_pipe + +/obj/item/pipe_dispenser/proc/do_pipe_build(atom/atom_to_target, mob/user, params) + //So that changing the menu settings doesn't affect the pipes already being built. + var/queued_pipe_type = recipe.id + var/queued_pipe_dir = p_dir + var/queued_pipe_flipped = p_flipped + + var/can_make_pipe = check_can_make_pipe(atom_to_target) + var/list/pipe_layer_numbers = get_active_pipe_layers() + var/continued_build = FALSE + for(var/pipe_layer_num in 1 to length(pipe_layer_numbers)) + var/layer_to_build = pipe_layer_numbers[pipe_layer_num] + if(layer_to_build != pipe_layer_numbers[1]) + continued_build = TRUE + if(!layer_to_build) + return FALSE + if(!can_make_pipe) + return FALSE + playsound(get_turf(src), 'sound/machines/click.ogg', 50, vary = TRUE) + if(!continued_build && !do_after(user, atmos_build_speed, target = atom_to_target)) + return FALSE + if(!recipe.all_layers && (layer_to_build == 1 || layer_to_build == 5)) + balloon_alert(user, "can't build on layer [layer_to_build]!") + if(multi_layer) + continue + return FALSE + playsound(get_turf(src), RPD_USE_SOUND, 50, TRUE) + if(recipe.type == /datum/pipe_info/meter) + var/obj/item/pipe_meter/new_meter = new /obj/item/pipe_meter(get_turf(atom_to_target)) + new_meter.setAttachLayer(layer_to_build) + if(mode & WRENCH_MODE) + new_meter.wrench_act(user, src) + else + var/obj/machinery/atmospherics/path = queued_pipe_type + var/pipe_item_type = initial(path.construction_type) || /obj/item/pipe + var/obj/item/pipe/pipe_type = new pipe_item_type( + get_turf(atom_to_target), + queued_pipe_type, + queued_pipe_dir, + null, + GLOB.pipe_paint_colors[paint_color], + ispath(queued_pipe_type, /obj/machinery/atmospherics/pipe/smart) ? p_init_dir : null, + ) + if(queued_pipe_flipped && istype(pipe_type, /obj/item/pipe/trinary/flippable)) + var/obj/item/pipe/trinary/flippable/new_flippable_pipe = pipe_type + new_flippable_pipe.flipped = queued_pipe_flipped + + pipe_type.update() + pipe_type.add_fingerprint(usr) + pipe_type.set_piping_layer(layer_to_build) + if(ispath(queued_pipe_type, /obj/machinery/atmospherics) && !ispath(queued_pipe_type, /obj/machinery/atmospherics/pipe/color_adapter)) + pipe_type.add_atom_colour(GLOB.pipe_paint_colors[paint_color], FIXED_COLOUR_PRIORITY) + if(mode & WRENCH_MODE) + pipe_type.wrench_act(user, src) + return TRUE + +/obj/item/pipe_dispenser/attackby(obj/item/item, mob/user, params) + if(istype(item, /obj/item/rpd_upgrade)) + install_upgrade(item, user) + return TRUE + return ..() + +/// Installs an upgrade into the RPD after checking if it is already installed +/obj/item/pipe_dispenser/proc/install_upgrade(obj/item/rpd_upgrade/rpd_disk, mob/user) + // Check if the upgrade's already present + if(rpd_disk.upgrade_flags & upgrade_flags) + balloon_alert(user, "already installed!") + return + // Adds the upgrade from the disk and then deletes the disk + upgrade_flags |= rpd_disk.upgrade_flags + playsound(loc, 'sound/machines/click.ogg', 50, vary = TRUE) + balloon_alert(user, "upgrade installed") + qdel(rpd_disk) ///Changes the piping layer when the mousewheel is scrolled up or down. /obj/item/pipe_dispenser/proc/mouse_wheeled(mob/source_mob, atom/A, delta_x, delta_y, params) SIGNAL_HANDLER + if(multi_layer) + balloon_alert(source_mob, "turn off multi layer!") + return if(source_mob.incapacitated(IGNORE_RESTRAINTS|IGNORE_STASIS)) return if(source_mob.get_active_held_item() != src) return if(delta_y < 0) - piping_layer = min(PIPING_LAYER_MAX, piping_layer + 1) + pipe_layers = min(PIPE_LAYER(5), pipe_layers << 1) else if(delta_y > 0) - piping_layer = max(PIPING_LAYER_MIN, piping_layer - 1) + pipe_layers = max(PIPE_LAYER(1), pipe_layers >> 1) else //mice with side-scrolling wheels are apparently a thing and fuck this up return SStgui.update_uis(src) - to_chat(source_mob, span_notice("You set the layer to [piping_layer].")) + balloon_alert(source_mob, "set pipe layer to [get_active_pipe_layers()[1]]") /obj/item/rpd_upgrade name = "RPD advanced design disk" desc = "It seems to be empty." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "datadisk3" /// Bitflags for upgrades var/upgrade_flags @@ -667,4 +717,6 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( #undef WRENCH_MODE #undef REPROGRAM_MODE +#undef PIPE_LAYER + #undef RPD_USE_SOUND diff --git a/code/game/objects/items/rcd/RPLD.dm b/code/game/objects/items/rcd/RPLD.dm index c2184bcacf9c05..0dd78d6a348e61 100644 --- a/code/game/objects/items/rcd/RPLD.dm +++ b/code/game/objects/items/rcd/RPLD.dm @@ -64,13 +64,13 @@ /obj/machinery/plumbing/pill_press = 20, /obj/machinery/iv_drip/plumbing = 20 ), - // SKYRAT EDIT ADDITION START - static list so we have no choice but to skyrat edit these here + // NOVA EDIT ADDITION START - static list so we have no choice but to NOVA EDIT these here //category 4 liquids "Liquids" = list( /obj/structure/drain = 5, ), - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END ) /obj/item/construction/plumbing/Initialize(mapload) @@ -335,7 +335,7 @@ /obj/machinery/plumbing/tank = 20, /obj/machinery/plumbing/acclimator = 10, ), - // SKYRAT EDIT ADDITION START - static list so we have no choice but to skyrat edit these here + // NOVA EDIT ADDITION START - static list so we have no choice but to NOVA EDIT these here //category 4 liquids "Liquids" = list( @@ -343,7 +343,7 @@ /obj/machinery/plumbing/floor_pump/input = 20, /obj/machinery/plumbing/floor_pump/output = 20, ), - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END ) /obj/item/construction/plumbing/research/Initialize(mapload) @@ -385,13 +385,13 @@ /obj/machinery/plumbing/tank = 20, /obj/machinery/plumbing/acclimator = 10, ), - // SKYRAT EDIT ADDITION START - static list so we have no choice but to skyrat edit these here + // NOVA EDIT ADDITION START - static list so we have no choice but to NOVA EDIT these here //category 4 liquids "Liquids" = list( /obj/structure/drain = 5, ), - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END ) /obj/item/construction/plumbing/service/Initialize(mapload) diff --git a/code/game/objects/items/religion.dm b/code/game/objects/items/religion.dm index e68a1b8c88324d..efc2a8e15a939f 100644 --- a/code/game/objects/items/religion.dm +++ b/code/game/objects/items/religion.dm @@ -1,6 +1,6 @@ /obj/item/banner name = "banner" - desc = "A banner with Nanotrasen's logo on it." + desc = "A banner with Symphionia's logo on it." icon = 'icons/obj/banner.dmi' icon_state = "banner" inhand_icon_state = "banner" @@ -221,11 +221,11 @@ name = "command banner" desc = "The banner of Command, a staunch and ancient line of bueraucratic kings and queens." //No icon state here since the default one is the NT banner - warcry = "Hail Nanotrasen!" + warcry = "Hail Symphionia!" /obj/item/banner/command/Initialize(mapload) . = ..() - job_loyalties = DEPARTMENT_BITFLAG_COMMAND | DEPARTMENT_BITFLAG_CENTRAL_COMMAND //SKYRAT EDIT ADDITION + job_loyalties = DEPARTMENT_BITFLAG_COMMAND | DEPARTMENT_BITFLAG_CENTRAL_COMMAND //NOVA EDIT ADDITION /obj/item/banner/command/mundane inspiration_available = FALSE @@ -254,8 +254,8 @@ desc = "A banner with the logo of the blue deity." /obj/item/storage/backpack/bannerpack - name = "\improper Nanotrasen banner backpack" - desc = "It's a backpack with lots of extra room. A banner with Nanotrasen's logo is attached, that can't be removed." + name = "\improper Symphionia banner backpack" + desc = "It's a backpack with lots of extra room. A banner with Symphionia's logo is attached, that can't be removed." icon_state = "backpack-banner" /obj/item/storage/backpack/bannerpack/Initialize(mapload) diff --git a/code/game/objects/items/robot/ai_upgrades.dm b/code/game/objects/items/robot/ai_upgrades.dm index f0cbb121eeb030..5660de8d604326 100644 --- a/code/game/objects/items/robot/ai_upgrades.dm +++ b/code/game/objects/items/robot/ai_upgrades.dm @@ -5,7 +5,7 @@ /obj/item/malf_upgrade name = "combat software upgrade" desc = "A highly illegal, highly dangerous upgrade for artificial intelligence units, granting them a variety of powers as well as the ability to hack APCs.
This upgrade does not override any active laws, and must be applied directly to an active AI core." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "datadisk3" @@ -34,7 +34,7 @@ /obj/item/surveillance_upgrade name = "surveillance software upgrade" desc = "An illegal software package that will allow an artificial intelligence to 'hear' from its cameras via lip reading and hidden microphones." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "datadisk3" /obj/item/surveillance_upgrade/pre_attack(atom/A, mob/living/user, proximity) diff --git a/code/game/objects/items/robot/items/generic.dm b/code/game/objects/items/robot/items/generic.dm index 4db09ab3804a67..7ebd87408f60f2 100644 --- a/code/game/objects/items/robot/items/generic.dm +++ b/code/game/objects/items/robot/items/generic.dm @@ -28,7 +28,7 @@ return if(ishuman(attacked_mob)) var/mob/living/carbon/human/human = attacked_mob - if(human.check_shields(src, 0, "[attacked_mob]'s [name]", MELEE_ATTACK)) + if(human.check_block(src, 0, "[attacked_mob]'s [name]", MELEE_ATTACK)) playsound(attacked_mob, 'sound/weapons/genhit.ogg', 50, TRUE) return FALSE if(iscyborg(user)) @@ -43,11 +43,15 @@ attacked_mob.set_jitter_if_lower(5 SECONDS) if(issilicon(attacked_mob)) attacked_mob.emp_act(EMP_HEAVY) - attacked_mob.visible_message(span_danger("[user] shocks [attacked_mob] with [src]!"), \ - span_userdanger("[user] shocks you with [src]!")) + attacked_mob.visible_message( + span_danger("[user] shocks [attacked_mob] with [src]!"), + span_userdanger("[user] shocks you with [src]!"), + ) else - attacked_mob.visible_message(span_danger("[user] prods [attacked_mob] with [src]!"), \ - span_userdanger("[user] prods you with [src]!")) + attacked_mob.visible_message( + span_danger("[user] prods [attacked_mob] with [src]!"), + span_userdanger("[user] prods you with [src]!"), + ) playsound(loc, 'sound/weapons/egloves.ogg', 50, TRUE, -1) cooldown_check = world.time + cooldown @@ -102,41 +106,57 @@ attacked_mob.attack_hand(user, modifiers) //This enables borgs to get the floating heart icon and mob emote from simple_animal's that have petbonus == true. return if(user.zone_selected == BODY_ZONE_HEAD) - user.visible_message(span_notice("[user] playfully boops [attacked_mob] on the head!"), \ - span_notice("You playfully boop [attacked_mob] on the head!")) + user.visible_message( + span_notice("[user] playfully boops [attacked_mob] on the head!"), + span_notice("You playfully boop [attacked_mob] on the head!"), + ) user.do_attack_animation(attacked_mob, ATTACK_EFFECT_BOOP) playsound(loc, 'sound/weapons/tap.ogg', 50, TRUE, -1) else if(ishuman(attacked_mob)) if(user.body_position == LYING_DOWN) - user.visible_message(span_notice("[user] shakes [attacked_mob] trying to get [attacked_mob.p_them()] up!"), \ - span_notice("You shake [attacked_mob] trying to get [attacked_mob.p_them()] up!")) + user.visible_message( + span_notice("[user] shakes [attacked_mob] trying to get [attacked_mob.p_them()] up!"), + span_notice("You shake [attacked_mob] trying to get [attacked_mob.p_them()] up!"), + ) else - user.visible_message(span_notice("[user] hugs [attacked_mob] to make [attacked_mob.p_them()] feel better!"), \ - span_notice("You hug [attacked_mob] to make [attacked_mob.p_them()] feel better!")) + user.visible_message( + span_notice("[user] hugs [attacked_mob] to make [attacked_mob.p_them()] feel better!"), + span_notice("You hug [attacked_mob] to make [attacked_mob.p_them()] feel better!"), + ) if(attacked_mob.resting) attacked_mob.set_resting(FALSE, TRUE) else - user.visible_message(span_notice("[user] pets [attacked_mob]!"), \ - span_notice("You pet [attacked_mob]!")) + user.visible_message( + span_notice("[user] pets [attacked_mob]!"), + span_notice("You pet [attacked_mob]!"), + ) playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) if(HUG_MODE_HUG) if(ishuman(attacked_mob)) attacked_mob.adjust_status_effects_on_shake_up() if(attacked_mob.body_position == LYING_DOWN) - user.visible_message(span_notice("[user] shakes [attacked_mob] trying to get [attacked_mob.p_them()] up!"), \ - span_notice("You shake [attacked_mob] trying to get [attacked_mob.p_them()] up!")) + user.visible_message( + span_notice("[user] shakes [attacked_mob] trying to get [attacked_mob.p_them()] up!"), + span_notice("You shake [attacked_mob] trying to get [attacked_mob.p_them()] up!"), + ) else if(user.zone_selected == BODY_ZONE_HEAD) - user.visible_message(span_warning("[user] bops [attacked_mob] on the head!"), \ - span_warning("You bop [attacked_mob] on the head!")) + user.visible_message(span_warning("[user] bops [attacked_mob] on the head!"), + span_warning("You bop [attacked_mob] on the head!"), + ) user.do_attack_animation(attacked_mob, ATTACK_EFFECT_PUNCH) else - user.visible_message(span_warning("[user] hugs [attacked_mob] in a firm bear-hug! [attacked_mob] looks uncomfortable..."), \ - span_warning("You hug [attacked_mob] firmly to make [attacked_mob.p_them()] feel better! [attacked_mob] looks uncomfortable...")) + if(!(SEND_SIGNAL(attacked_mob, COMSIG_BORG_HUG_MOB, user) & COMSIG_BORG_HUG_HANDLED)) + user.visible_message( + span_warning("[user] hugs [attacked_mob] in a firm bear-hug! [attacked_mob] looks uncomfortable..."), + span_warning("You hug [attacked_mob] firmly to make [attacked_mob.p_them()] feel better! [attacked_mob] looks uncomfortable..."), + ) if(attacked_mob.resting) attacked_mob.set_resting(FALSE, TRUE) else - user.visible_message(span_warning("[user] bops [attacked_mob] on the head!"), \ - span_warning("You bop [attacked_mob] on the head!")) + user.visible_message( + span_warning("[user] bops [attacked_mob] on the head!"), + span_warning("You bop [attacked_mob] on the head!"), + ) playsound(loc, 'sound/weapons/tap.ogg', 50, TRUE, -1) if(HUG_MODE_SHOCK) if (!COOLDOWN_FINISHED(src, shock_cooldown)) @@ -145,16 +165,22 @@ attacked_mob.electrocute_act(5, "[user]", flags = SHOCK_NOGLOVES | SHOCK_NOSTUN) attacked_mob.dropItemToGround(attacked_mob.get_active_held_item()) attacked_mob.dropItemToGround(attacked_mob.get_inactive_held_item()) - user.visible_message(span_userdanger("[user] electrocutes [attacked_mob] with [user.p_their()] touch!"), \ - span_danger("You electrocute [attacked_mob] with your touch!")) + user.visible_message( + span_userdanger("[user] electrocutes [attacked_mob] with [user.p_their()] touch!"), + span_danger("You electrocute [attacked_mob] with your touch!"), + ) else if(!iscyborg(attacked_mob)) attacked_mob.adjustFireLoss(10) - user.visible_message(span_userdanger("[user] shocks [attacked_mob]!"), \ - span_danger("You shock [attacked_mob]!")) + user.visible_message( + span_userdanger("[user] shocks [attacked_mob]!"), + span_danger("You shock [attacked_mob]!"), + ) else - user.visible_message(span_userdanger("[user] shocks [attacked_mob]. It does not seem to have an effect"), \ - span_danger("You shock [attacked_mob] to no effect.")) + user.visible_message( + span_userdanger("[user] shocks [attacked_mob]. It does not seem to have an effect"), + span_danger("You shock [attacked_mob] to no effect."), + ) playsound(loc, 'sound/effects/sparks2.ogg', 50, TRUE, -1) user.cell.charge -= 500 COOLDOWN_START(src, shock_cooldown, HUG_SHOCK_COOLDOWN) @@ -162,11 +188,15 @@ if (!COOLDOWN_FINISHED(src, crush_cooldown)) return if(ishuman(attacked_mob)) - user.visible_message(span_userdanger("[user] crushes [attacked_mob] in [user.p_their()] grip!"), \ - span_danger("You crush [attacked_mob] in your grip!")) + user.visible_message( + span_userdanger("[user] crushes [attacked_mob] in [user.p_their()] grip!"), + span_danger("You crush [attacked_mob] in your grip!"), + ) else - user.visible_message(span_userdanger("[user] crushes [attacked_mob]!"), \ - span_danger("You crush [attacked_mob]!")) + user.visible_message( + span_userdanger("[user] crushes [attacked_mob]!"), + span_danger("You crush [attacked_mob]!"), + ) playsound(loc, 'sound/weapons/smash.ogg', 50, TRUE, -1) attacked_mob.adjustBruteLoss(15) user.cell.charge -= 300 @@ -308,7 +338,7 @@ /obj/item/harmalarm name = "\improper Sonic Harm Prevention Tool" desc = "Releases a harmless blast that confuses most organics. For when the harm is JUST TOO MUCH." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/voice.dmi' icon_state = "megaphone" /// Harm alarm cooldown COOLDOWN_DECLARE(alarm_cooldown) @@ -337,9 +367,11 @@ safety = FALSE if(safety == TRUE) - user.visible_message("[user] blares out a near-deafening siren from its speakers!", \ - span_userdanger("Your siren blares around [iscyborg(user) ? "you" : "and confuses you"]!"), \ - span_danger("The siren pierces your hearing!")) + user.visible_message( + "[user] blares out a near-deafening siren from its speakers!", + span_userdanger("Your siren blares around [iscyborg(user) ? "you" : "and confuses you"]!"), + span_danger("The siren pierces your hearing!"), + ) for(var/mob/living/carbon/carbon in get_hearers_in_view(9, user)) if(carbon.get_ear_protection()) continue diff --git a/code/game/objects/items/robot/items/hypo.dm b/code/game/objects/items/robot/items/hypo.dm index f91e6275f82d72..dbada0cd778a62 100644 --- a/code/game/objects/items/robot/items/hypo.dm +++ b/code/game/objects/items/robot/items/hypo.dm @@ -8,7 +8,7 @@ /datum/reagent/medicine/salglu_solution,\ /datum/reagent/medicine/spaceacillin,\ /datum/reagent/medicine/lidocaine\ - ) //SKYRAT EDIT line 10 added Lidocaine + ) //NOVA EDIT line 10 added Lidocaine #define EXPANDED_MEDICAL_REAGENTS list(\ /datum/reagent/medicine/haloperidol,\ /datum/reagent/medicine/inacusiate,\ @@ -304,10 +304,10 @@ tgui_theme = "syndicate" default_reagent_types = HACKED_CLOWN_REAGENTS -/// Syndicate medborg hypospray +/// Symphionia medborg hypospray /obj/item/reagent_containers/borghypo/syndicate name = "syndicate cyborg hypospray" - desc = "An experimental piece of Syndicate technology used to produce powerful restorative nanites used to very quickly restore injuries of all types. \ + desc = "An experimental piece of Symphionia technology used to produce powerful restorative nanites used to very quickly restore injuries of all types. \ Also metabolizes potassium iodide for radiation poisoning, inacusiate for ear damage and morphine for offense." icon_state = "borghypo_s" tgui_theme = "syndicate" diff --git a/code/game/objects/items/robot/items/storage.dm b/code/game/objects/items/robot/items/storage.dm index 4995c7d9df6066..01541df5a9c78e 100644 --- a/code/game/objects/items/robot/items/storage.dm +++ b/code/game/objects/items/robot/items/storage.dm @@ -56,24 +56,25 @@ stored.forceMove(user.drop_location()) /obj/item/borg/apparatus/pre_attack(atom/atom, mob/living/user, params) - if(!stored) - // Borgs should not be grabbing their own modules - if(!istype(atom.loc, /mob/living/silicon/robot)) - var/itemcheck = FALSE - for(var/storable_type in storable) - if(istype(atom, storable_type)) - itemcheck = TRUE - break - if(itemcheck) - var/obj/item/item = atom - item.forceMove(src) - stored = item - RegisterSignal(stored, COMSIG_ATOM_UPDATED_ICON, PROC_REF(on_stored_updated_icon)) - update_appearance() - return TRUE - else + if(stored) stored.melee_attack_chain(user, atom, params) return TRUE + + if(istype(atom.loc, /mob/living/silicon/robot) || istype(atom.loc, /obj/item/robot_model) || HAS_TRAIT(atom, TRAIT_NODROP)) + return ..() // Borgs should not be grabbing their own modules + + var/itemcheck = FALSE + for(var/storable_type in storable) + if(istype(atom, storable_type)) + itemcheck = TRUE + break + if(itemcheck) + var/obj/item/item = atom + item.forceMove(src) + stored = item + RegisterSignal(stored, COMSIG_ATOM_UPDATED_ICON, PROC_REF(on_stored_updated_icon)) + update_appearance() + return TRUE return ..() /** diff --git a/code/game/objects/items/robot/items/tools.dm b/code/game/objects/items/robot/items/tools.dm index e888cd430873f4..773458964f770d 100644 --- a/code/game/objects/items/robot/items/tools.dm +++ b/code/game/objects/items/robot/items/tools.dm @@ -15,7 +15,7 @@ /obj/item/borg/projectile_dampen name = "\improper Hyperkinetic Dampening projector" desc = "A device that projects a dampening field that weakens kinetic energy above a certain threshold. Projects a field that drains power per second while active, that will weaken and slow damaging projectiles inside its field. Still being a prototype, it tends to induce a charge on ungrounded metallic surfaces." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/syndie_gadget.dmi' icon_state = "shield0" base_icon_state = "shield" /// Max energy this dampener can hold diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 92dd162a9b0e23..2dcaf1b413eea5 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -4,7 +4,7 @@ /obj/item/borg/upgrade name = "borg upgrade module." desc = "Protected by FRM." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "cyborg_upgrade" w_class = WEIGHT_CLASS_SMALL var/locked = FALSE @@ -268,7 +268,7 @@ /obj/item/borg/upgrade/lavaproof name = "mining cyborg lavaproof chassis" desc = "An upgrade kit to apply specialized coolant systems and insulation layers to a mining cyborg's chassis, enabling them to withstand exposure to molten rock and liquid plasma." - icon_state = "ash_plating" + icon_state = "cyborg_ash_tracks" resistance_flags = LAVA_PROOF | FIRE_PROOF | FREEZE_PROOF require_model = TRUE model_type = list(/obj/item/robot_model/miner) @@ -375,7 +375,7 @@ cyborg.cell.use(5) next_repair = world.time + repair_cooldown * 10 // Multiply by 10 since world.time is in deciseconds - if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_BORG_SELF_REPAIR)) + if(TIMER_COOLDOWN_FINISHED(src, COOLDOWN_BORG_SELF_REPAIR)) TIMER_COOLDOWN_START(src, COOLDOWN_BORG_SELF_REPAIR, 200 SECONDS) var/msgmode = "standby" if(cyborg.health < 0) @@ -551,14 +551,14 @@ if(robot.hasExpanded) to_chat(usr, span_warning("This unit already has an expand module installed!")) return FALSE - // SKYRAT EDIT BEGIN + // NOVA EDIT BEGIN if(robot.model.model_select_icon == "nomod") to_chat(usr, span_warning("Default models cannot take expand or shrink upgrades.")) return FALSE - if((R_TRAIT_WIDE in robot.model.model_features) || (R_TRAIT_TALL in robot.model.model_features)) + if((TRAIT_R_WIDE in robot.model.model_features) || (TRAIT_R_TALL in robot.model.model_features)) to_chat(usr, span_warning("This unit's chassis cannot be enlarged any further.")) return FALSE - // SKYRAT EDIT END + // NOVA EDIT END ADD_TRAIT(robot, TRAIT_NO_TRANSFORM, REF(src)) var/prev_lockcharge = robot.lockcharge @@ -576,7 +576,7 @@ robot.set_anchored(FALSE) REMOVE_TRAIT(robot, TRAIT_NO_TRANSFORM, REF(src)) robot.hasExpanded = TRUE - robot.update_transform(1.5) // SKYRAT EDIT CHANGE - ORIGINAL: robot.update_transform(2) + robot.update_transform(1.5) // NOVA EDIT CHANGE - ORIGINAL: robot.update_transform(2) /obj/item/borg/upgrade/expand/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() @@ -584,9 +584,9 @@ if (R.hasExpanded) R.hasExpanded = FALSE //R.update_transform(0.5) // Original - R.update_transform(0.8) // SKYRAT EDIT CHANGE + R.update_transform(0.8) // NOVA EDIT CHANGE -/obj/item/borg/upgrade/rped//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/item/borg/upgrade/rped//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "engineering cyborg RPED" desc = "A rapid part exchange device for the engineering cyborg." icon = 'icons/obj/storage/storage.dmi' @@ -598,7 +598,6 @@ /obj/item/borg/upgrade/rped/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) - var/obj/item/storage/part_replacer/cyborg/RPED = locate() in R if(RPED) to_chat(user, span_warning("This unit is already equipped with a RPED module!")) @@ -615,10 +614,42 @@ if (RPED) R.model.remove_module(RPED, TRUE) +/obj/item/borg/upgrade/inducer + name = "engineering integrated power inducer" + desc = "An integrated inducer that can charge a device's internal cell from power provided by the cyborg." + require_model = TRUE + model_type = list(/obj/item/robot_model/engineering, /obj/item/robot_model/saboteur) + model_flags = BORG_MODEL_ENGINEERING + +/obj/item/borg/upgrade/inducer/action(mob/living/silicon/robot/R, user = usr) + . = ..() + if(.) + var/obj/item/inducer/cyborg/inter_inducer = locate() in R + if(inter_inducer) + return FALSE + inter_inducer = new(R.model) + R.model.basic_modules += inter_inducer + R.model.add_module(inter_inducer, FALSE, TRUE) + inter_inducer.cell = R.cell + +/obj/item/borg/upgrade/inducer/deactivate(mob/living/silicon/robot/R, user = usr) + . = ..() + if (.) + var/obj/item/inducer/cyborg/inter_inducer = locate() in R.model + if (inter_inducer) + R.model.remove_module(inter_inducer, TRUE) + inter_inducer.cell = null + +/obj/item/inducer/cyborg + name = "Internal inducer" + powertransfer = 1500 + icon = 'icons/obj/tools.dmi' + icon_state = "inducer-engi" + /obj/item/borg/upgrade/pinpointer name = "medical cyborg crew pinpointer" desc = "A crew pinpointer module for the medical cyborg. Permits remote access to the crew monitor." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tracker.dmi' icon_state = "pinpointer_crew" require_model = TRUE model_type = list(/obj/item/robot_model/medical, /obj/item/robot_model/syndicate_medical) @@ -932,7 +963,7 @@ name = "cyborg emergency reboot module" desc = "A reusable firmware reset tool that can force a reboot of a disabled-but-repaired cyborg, bringing it back online." w_class = WEIGHT_CLASS_SMALL - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "cyborg_upgrade1" /obj/item/borg_restart_board/pre_attack(mob/living/silicon/robot/borgo, mob/living/user, params) diff --git a/code/game/objects/items/secret_documents.dm b/code/game/objects/items/secret_documents.dm index 92ad097aa8b7e9..841aa55fbe170e 100644 --- a/code/game/objects/items/secret_documents.dm +++ b/code/game/objects/items/secret_documents.dm @@ -21,30 +21,30 @@ pressure_resistance = 2 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF -///Nanotrasen documents +///Symphionia documents /obj/item/documents/nanotrasen - desc = "\"Top Secret\" Nanotrasen documents, filled with complex diagrams and lists of names, dates and coordinates." + desc = "\"Top Secret\" Symphionia documents, filled with complex diagrams and lists of names, dates and coordinates." icon_state = "docs_verified" -///Syndicate documents +///Symphionia documents /obj/item/documents/syndicate - desc = "\"Top Secret\" documents detailing sensitive Syndicate operational intelligence." + desc = "\"Top Secret\" documents detailing sensitive Symphionia operational intelligence." -///Syndicate documents with a red seal +///Symphionia documents with a red seal /obj/item/documents/syndicate/red name = "red secret documents" - desc = "\"Top Secret\" documents detailing sensitive Syndicate operational intelligence. These documents are verified with a red wax seal." + desc = "\"Top Secret\" documents detailing sensitive Symphionia operational intelligence. These documents are verified with a red wax seal." icon_state = "docs_red" -///Syndicate documents with a blue seal +///Symphionia documents with a blue seal /obj/item/documents/syndicate/blue name = "blue secret documents" - desc = "\"Top Secret\" documents detailing sensitive Syndicate operational intelligence. These documents are verified with a blue wax seal." + desc = "\"Top Secret\" documents detailing sensitive Symphionia operational intelligence. These documents are verified with a blue wax seal." icon_state = "docs_blue" -///Syndicate mining documents +///Symphionia mining documents /obj/item/documents/syndicate/mining - desc = "\"Top Secret\" documents detailing Syndicate plasma mining operations." + desc = "\"Top Secret\" documents detailing Symphionia plasma mining operations." /** * # secret documents (photocopy) diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 27418a5e0a93c7..ef434c1993dc0d 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -240,8 +240,8 @@ . += span_info("The mounted bulb has burnt out. You can try replacing it with a new flash.") /obj/item/shield/energy - name = "energy combat shield" - desc = "A shield that reflects almost all energy projectiles, but is useless against physical attacks. It can be retracted, expanded, and stored anywhere." + name = "combat energy shield" + desc = "A hardlight shield capable of reflecting blocked energy projectiles, as well las providing well-rounded defense from most all other attacks." icon_state = "eshield" inhand_icon_state = "eshield" w_class = WEIGHT_CLASS_TINY @@ -261,6 +261,8 @@ var/active_throw_speed = 2 /// Whether clumsy people can transform this without side effects. var/can_clumsy_use = FALSE + /// The chance for projectiles to be reflected by the shield + var/reflection_probability = 50 /obj/item/shield/energy/Initialize(mapload) . = ..() @@ -275,10 +277,19 @@ RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform)) /obj/item/shield/energy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) - return FALSE + if(!HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE)) + return FALSE + + if(attack_type == PROJECTILE_ATTACK) + var/obj/projectile/our_projectile = hitby + + if(our_projectile.reflectable) //We handle this via IsReflect() instead. + final_block_chance = 0 + + return ..() /obj/item/shield/energy/IsReflect() - return HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE) + return HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE) && prob(reflection_probability) /* * Signal proc for [COMSIG_TRANSFORMING_ON_TRANSFORM]. @@ -291,6 +302,14 @@ playsound(src, active ? 'sound/weapons/saberon.ogg' : 'sound/weapons/saberoff.ogg', 35, TRUE) return COMPONENT_NO_DEFAULT_MESSAGE +/obj/item/shield/energy/advanced + name = "advanced combat energy shield" + desc = "A hardlight shield capable of reflecting all energy projectiles, as well las providing well-rounded defense from most all other attacks. \ + Often employed by Nanotrasen deathsquads." + icon_state = "advanced_eshield" + inhand_icon_state = "advanced_eshield" + reflection_probability = 100 //Guaranteed reflection + /obj/item/shield/riot/tele name = "telescopic shield" desc = "An advanced riot shield made of lightweight materials that collapses for easy storage." diff --git a/code/game/objects/items/singularityhammer.dm b/code/game/objects/items/singularityhammer.dm deleted file mode 100644 index 50a97c215d850d..00000000000000 --- a/code/game/objects/items/singularityhammer.dm +++ /dev/null @@ -1,131 +0,0 @@ -/obj/item/singularityhammer - name = "singularity hammer" - desc = "The pinnacle of close combat technology, the hammer harnesses the power of a miniaturized singularity to deal crushing blows." - icon = 'icons/obj/weapons/hammer.dmi' - icon_state = "singularity_hammer0" - base_icon_state = "singularity_hammer" - lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' - worn_icon_state = "singularity_hammer" - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BACK - force = 5 - throwforce = 15 - throw_range = 1 - w_class = WEIGHT_CLASS_HUGE - armor_type = /datum/armor/item_singularityhammer - resistance_flags = FIRE_PROOF | ACID_PROOF - force_string = "LORD SINGULOTH HIMSELF" - ///Is it able to pull shit right now? - var/charged = TRUE - -/datum/armor/item_singularityhammer - melee = 50 - bullet = 50 - laser = 50 - bomb = 50 - fire = 100 - acid = 100 - -/obj/item/singularityhammer/Initialize(mapload) - . = ..() - AddElement(/datum/element/kneejerk) - AddComponent(/datum/component/two_handed, \ - force_multiplier = 4, \ - icon_wielded = "[base_icon_state]1", \ - ) - -/obj/item/singularityhammer/update_icon_state() - icon_state = "[base_icon_state]0" - return ..() - -/obj/item/singularityhammer/proc/recharge() - charged = TRUE - -/obj/item/singularityhammer/proc/vortex(turf/pull, mob/wielder) - for(var/atom/X in orange(5,pull)) - if(ismovable(X)) - var/atom/movable/A = X - if(A == wielder) - continue - if(isliving(A)) - var/mob/living/vortexed_mob = A - if(vortexed_mob.mob_negates_gravity()) - continue - else - vortexed_mob.Paralyze(2 SECONDS) - if(!A.anchored && !isobserver(A)) - step_towards(A,pull) - step_towards(A,pull) - step_towards(A,pull) - -/obj/item/singularityhammer/afterattack(atom/A as mob|obj|turf|area, mob/living/user, proximity) - . = ..() - if(!proximity) - return - . |= AFTERATTACK_PROCESSED_ITEM - if(HAS_TRAIT(src, TRAIT_WIELDED)) - if(charged) - charged = FALSE - if(isliving(A)) - var/mob/living/Z = A - Z.take_bodypart_damage(20,0) - playsound(user, 'sound/weapons/marauder.ogg', 50, TRUE) - var/turf/target = get_turf(A) - vortex(target,user) - addtimer(CALLBACK(src, PROC_REF(recharge)), 100) - return . - -/obj/item/mjollnir - name = "Mjolnir" - desc = "A weapon worthy of a god, able to strike with the force of a lightning bolt. It crackles with barely contained energy." - icon = 'icons/obj/weapons/hammer.dmi' - icon_state = "mjollnir0" - base_icon_state = "mjollnir" - worn_icon_state = "mjolnir" - lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BACK - force = 5 - throwforce = 30 - throw_range = 7 - w_class = WEIGHT_CLASS_HUGE - -/obj/item/mjollnir/Initialize(mapload) - . = ..() - AddComponent(/datum/component/two_handed, \ - force_multiplier = 5, \ - icon_wielded = "[base_icon_state]1", \ - attacksound = SFX_SPARKS, \ - ) - -/obj/item/mjollnir/update_icon_state() - icon_state = "[base_icon_state]0" - return ..() - -/obj/item/mjollnir/proc/shock(mob/living/target) - target.Stun(1.5 SECONDS) - target.Knockdown(10 SECONDS) - var/datum/effect_system/lightning_spread/s = new /datum/effect_system/lightning_spread - s.set_up(5, 1, target.loc) - s.start() - target.visible_message(span_danger("[target.name] is shocked by [src]!"), \ - span_userdanger("You feel a powerful shock course through your body sending you flying!"), \ - span_hear("You hear a heavy electrical crack!")) - var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src))) - target.throw_at(throw_target, 200, 4) - -/obj/item/mjollnir/attack(mob/living/target_mob, mob/user) - ..() - if(QDELETED(target_mob)) - return - if(HAS_TRAIT(user, TRAIT_PACIFISM)) - return - if(HAS_TRAIT(src, TRAIT_WIELDED)) - shock(target_mob) - -/obj/item/mjollnir/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - . = ..() - if(!QDELETED(hit_atom) && isliving(hit_atom)) - shock(hit_atom) diff --git a/code/game/objects/items/spear.dm b/code/game/objects/items/spear.dm index 410cddd1fc079d..fb9aafc7ef6fbd 100644 --- a/code/game/objects/items/spear.dm +++ b/code/game/objects/items/spear.dm @@ -196,7 +196,7 @@ //GREY TIDE /obj/item/spear/grey_tide name = "\improper Grey Tide" - desc = "Recovered from the aftermath of a revolt aboard Defense Outpost Theta Aegis, in which a seemingly endless tide of Assistants caused heavy casualities among Nanotrasen military forces." + desc = "Recovered from the aftermath of a revolt aboard Defense Outpost Theta Aegis, in which a seemingly endless tide of Assistants caused heavy casualities among Symphionia military forces." attack_verb_continuous = list("gores") attack_verb_simple = list("gore") force_unwielded = 15 @@ -230,12 +230,12 @@ throwforce = 22 armour_penetration = 15 //Enhanced armor piercing custom_materials = list(/datum/material/bone = HALF_SHEET_MATERIAL_AMOUNT * 7) - force_unwielded = 8 // SKYRAT EDIT CHANGE - ORIGINAL: 12 - force_wielded = 16 // SKYRAT EDIT CHANGE - ORIGINAL: 20 + force_unwielded = 8 // NOVA EDIT CHANGE - ORIGINAL: 12 + force_wielded = 16 // NOVA EDIT CHANGE - ORIGINAL: 20 - //SKYRAT EDIT ADDITION BEGIN - increases bone spear range to 2 + //NOVA EDIT ADDITION BEGIN - increases bone spear range to 2 reach = 2 - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END /obj/item/spear/bonespear/add_headpike_component() var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/headpikebone) diff --git a/code/game/objects/items/stacks/bscrystal.dm b/code/game/objects/items/stacks/bscrystal.dm index dd4865980cad02..19b518157c8c28 100644 --- a/code/game/objects/items/stacks/bscrystal.dm +++ b/code/game/objects/items/stacks/bscrystal.dm @@ -76,6 +76,7 @@ grind_results = list(/datum/reagent/bluespace = 20) point_value = 30 merge_type = /obj/item/stack/sheet/bluespace_crystal + material_type = /datum/material/bluespace var/crystal_type = /obj/item/stack/ore/bluespace_crystal/refined /obj/item/stack/sheet/bluespace_crystal/attack_self(mob/user)// to prevent the construction menu from ever happening diff --git a/code/game/objects/items/stacks/golem_food/golem_status_effects.dm b/code/game/objects/items/stacks/golem_food/golem_status_effects.dm index 26b5a4439ea20e..c89fae800b9ba4 100644 --- a/code/game/objects/items/stacks/golem_food/golem_status_effects.dm +++ b/code/game/objects/items/stacks/golem_food/golem_status_effects.dm @@ -292,6 +292,7 @@ /// Make our arm do slashing effects /datum/status_effect/golem/diamond/proc/set_arm_fluff(obj/item/bodypart/arm/arm) arm.unarmed_attack_verb = "slash" + arm.grappled_attack_verb = "lacerate" arm.unarmed_attack_effect = ATTACK_EFFECT_CLAW arm.unarmed_attack_sound = 'sound/weapons/slash.ogg' arm.unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' @@ -364,7 +365,6 @@ /datum/status_effect/golem/titanium/proc/buff_arm(obj/item/bodypart/arm/arm) arm.unarmed_damage_low += damage_increase arm.unarmed_damage_high += damage_increase - arm.unarmed_stun_threshold += damage_increase // We don't want to make knockdown more likely RegisterSignal(arm, COMSIG_QDELETING, PROC_REF(on_arm_destroyed)) LAZYADD(modified_arms, arm) @@ -383,7 +383,6 @@ return arm.unarmed_damage_low -= damage_increase arm.unarmed_damage_high -= damage_increase - arm.unarmed_stun_threshold -= damage_increase UnregisterSignal(arm, COMSIG_QDELETING) /// Remove references to deleted arms diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 3d4ea3676b33c2..306bc0fa9f9429 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -32,10 +32,15 @@ var/sanitization /// How much we add to flesh_healing for burn wounds on application var/flesh_regeneration + /// Time it takes to assess injuries when looping healing + var/assessing_injury_delay = 1 SECONDS -/obj/item/stack/medical/attack(mob/living/patient, mob/user) - . = ..() - try_heal(patient, user) +/obj/item/stack/medical/interact_with_atom(atom/interacting_with, mob/living/user) + if(!isliving(interacting_with)) + return NONE + if(!begin_heal_loop(interacting_with, user)) + return NONE // [ITEM_INTERACT_BLOCKING] would be redundant as we are nobludgeon + return ITEM_INTERACT_SUCCESS /obj/item/stack/medical/apply_fantasy_bonuses(bonus) . = ..() @@ -58,68 +63,133 @@ flesh_regeneration = reset_fantasy_variable("flesh_regeneration", flesh_regeneration) return ..() +/// Used to begin the recursive healing loop. +/// Returns TRUE if we entered the loop, FALSE if we didn't +/obj/item/stack/medical/proc/begin_heal_loop(mob/living/patient, mob/user) + if(!can_heal(patient, user)) + return FALSE + + INVOKE_ASYNC(src, PROC_REF(try_heal), patient, user) + return TRUE + +/// Checks if the passed patient can be healed by the passed user +/obj/item/stack/medical/proc/can_heal(mob/living/patient, mob/user) + return patient.try_inject(user, injection_flags = INJECT_TRY_SHOW_ERROR_MESSAGE) /// In which we print the message that we're starting to heal someone, then we try healing them. Does the do_after whether or not it can actually succeed on a targeted mob -/obj/item/stack/medical/proc/try_heal(mob/living/patient, mob/user, silent = FALSE) - if(!patient.try_inject(user, injection_flags = INJECT_TRY_SHOW_ERROR_MESSAGE)) +/obj/item/stack/medical/proc/try_heal(mob/living/patient, mob/user, silent = FALSE, looping = FALSE) + if(!try_heal_checks(patient, user, heal_brute, heal_burn, looping)) return + var/new_self_delay = self_delay + var/new_other_delay = other_delay + if(iscarbon(patient)) + new_self_delay = looping ? clamp((self_delay - assessing_injury_delay), 0, self_delay) : self_delay + new_other_delay = looping ? clamp((other_delay - assessing_injury_delay), 0, other_delay) : other_delay if(patient == user) if(!silent) - user.visible_message(span_notice("[user] starts to apply [src] on [user.p_them()]self..."), span_notice("You begin applying [src] on yourself...")) - if(!do_after(user, self_delay, patient, extra_checks=CALLBACK(patient, TYPE_PROC_REF(/mob/living, try_inject), user, null, INJECT_TRY_SHOW_ERROR_MESSAGE))) + user.visible_message( + span_notice("[user] starts to apply [src] on [user.p_them()]self..."), + span_notice("You begin applying [src] on yourself..."), + ) + if(!do_after( + user, + new_self_delay, + patient, + extra_checks = CALLBACK(src, PROC_REF(can_heal), patient, user), + )) return + else if(other_delay) if(!silent) - user.visible_message(span_notice("[user] starts to apply [src] on [patient]."), span_notice("You begin applying [src] on [patient]...")) - if(!do_after(user, other_delay, patient, extra_checks=CALLBACK(patient, TYPE_PROC_REF(/mob/living, try_inject), user, null, INJECT_TRY_SHOW_ERROR_MESSAGE))) + user.visible_message( + span_notice("[user] starts to apply [src] on [patient]."), + span_notice("You begin applying [src] on [patient]..."), + ) + if(!do_after( + user, + new_other_delay, + patient, + extra_checks = CALLBACK(src, PROC_REF(can_heal), patient, user), + )) return - if(heal(patient, user)) - log_combat(user, patient, "healed", src.name) - use(1) - if(repeating && amount > 0) - try_heal(patient, user, TRUE) + if(!heal(patient, user)) + return + log_combat(user, patient, "healed", name) + if(!use(1) || !repeating || amount <= 0) + return + if(!can_heal(patient, user)) + return + try_heal(patient, user, silent = TRUE, looping = TRUE) /// Apply the actual effects of the healing if it's a simple animal, goes to [/obj/item/stack/medical/proc/heal_carbon] if it's a carbon, returns TRUE if it works, FALSE if it doesn't /obj/item/stack/medical/proc/heal(mob/living/patient, mob/user) if(patient.stat == DEAD) patient.balloon_alert(user, "they're dead!") - return - if(isanimal_or_basicmob(patient) && heal_brute) // only brute can heal - if (!(patient.mob_biotypes & MOB_ORGANIC)) - patient.balloon_alert(user, "can't fix that!") + return FALSE + if(iscarbon(patient)) + return heal_carbon(patient, user, heal_brute, heal_burn) + else if(isanimal_or_basicmob(patient)) + if(!try_heal_checks(patient, user, heal_brute, heal_burn)) return FALSE - if (patient.health == patient.maxHealth) + if(patient.heal_bodypart_damage((heal_brute * patient.maxHealth/100))) + user.visible_message("[user] applies [src] on [patient].", "You apply [src] on [patient].") + return TRUE + patient.balloon_alert(user, "can't heal [patient]!") + return FALSE + +/obj/item/stack/medical/proc/try_heal_checks(mob/living/patient, mob/user, brute, burn, looping = FALSE) + if(iscarbon(patient)) + if(looping) + balloon_alert(user, "assessing injuries...") + if(!do_after(user, assessing_injury_delay, patient)) + return FALSE + var/mob/living/carbon/carbon_patient = patient + var/obj/item/bodypart/affecting = carbon_patient.get_bodypart(check_zone(user.zone_selected)) + if(!affecting) //Missing limb? + carbon_patient.balloon_alert(user, "no [parse_zone(user.zone_selected)]!") + return FALSE + if(!IS_ORGANIC_LIMB(affecting)) //Limb must be organic to be healed - RR + carbon_patient.balloon_alert(user, "[affecting.plaintext_zone] is not organic!") + return FALSE + if(!(affecting.brute_dam && brute) && !(affecting.burn_dam && burn)) + if(!affecting.brute_dam && !affecting.burn_dam) + if(patient != user || !looping) + carbon_patient.balloon_alert(user, "[affecting.plaintext_zone] is not hurt!") + else + carbon_patient.balloon_alert(user, "can't heal [affecting.plaintext_zone] with [name]!") + return FALSE + return TRUE + if(isanimal_or_basicmob(patient)) + if(patient.stat == DEAD) + patient.balloon_alert(user, "they're dead!") + return FALSE + if(!heal_brute) // only brute can heal + patient.balloon_alert(user, "can't heal with [name]!") + return FALSE + if(!(patient.mob_biotypes & MOB_ORGANIC)) + patient.balloon_alert(user, "no organic tissue!") + return FALSE + if(patient.health == patient.maxHealth) patient.balloon_alert(user, "not hurt!") return FALSE - user.visible_message("[user] applies [src] on [patient].", "You apply [src] on [patient].") - patient.heal_bodypart_damage((heal_brute * patient.maxHealth/100)) return TRUE - if(iscarbon(patient)) - return heal_carbon(patient, user, heal_brute, heal_burn) - patient.balloon_alert(user, "can't heal that!") + /// The healing effects on a carbon patient. Since we have extra details for dealing with bodyparts, we get our own fancy proc. Still returns TRUE on success and FALSE on fail /obj/item/stack/medical/proc/heal_carbon(mob/living/carbon/patient, mob/user, brute, burn) var/obj/item/bodypart/affecting = patient.get_bodypart(check_zone(user.zone_selected)) - if(!affecting) //Missing limb? - patient.balloon_alert(user, "no [parse_zone(user.zone_selected)]!") + if(!try_heal_checks(patient, user, brute, burn)) return FALSE - if(!IS_ORGANIC_LIMB(affecting)) //Limb must be organic to be healed - RR - patient.balloon_alert(user, "it's not organic!") - return FALSE - if(affecting.brute_dam && brute || affecting.burn_dam && burn) - user.visible_message( - span_infoplain(span_green("[user] applies [src] on [patient]'s [parse_zone(affecting.body_zone)].")), - span_infoplain(span_green("You apply [src] on [patient]'s [parse_zone(affecting.body_zone)].")) - ) - var/previous_damage = affecting.get_damage() - if(affecting.heal_damage(brute, burn)) - patient.update_damage_overlays() - post_heal_effects(max(previous_damage - affecting.get_damage(), 0), patient, user) - return TRUE - patient.balloon_alert(user, "can't heal that!") - return FALSE + user.visible_message( + span_infoplain(span_green("[user] applies [src] on [patient]'s [parse_zone(affecting.body_zone)].")), + span_infoplain(span_green("You apply [src] on [patient]'s [parse_zone(affecting.body_zone)].")) + ) + var/previous_damage = affecting.get_damage() + if(affecting.heal_damage(brute, burn)) + patient.update_damage_overlays() + post_heal_effects(max(previous_damage - affecting.get_damage(), 0), patient, user) + return TRUE ///Override this proc for special post heal effects. /obj/item/stack/medical/proc/post_heal_effects(amount_healed, mob/living/carbon/healed_mob, mob/user) @@ -170,7 +240,7 @@ gauzed_bodypart = null // gauze is only relevant for wounds, which are handled in the wounds themselves -/obj/item/stack/medical/gauze/try_heal(mob/living/patient, mob/user, silent) +/obj/item/stack/medical/gauze/try_heal(mob/living/patient, mob/user, silent, looping) var/treatment_delay = (user == patient ? self_delay : other_delay) @@ -342,7 +412,7 @@ return ..() icon_state = "regen_mesh_closed" -/obj/item/stack/medical/mesh/try_heal(mob/living/patient, mob/user, silent = FALSE) +/obj/item/stack/medical/mesh/try_heal(mob/living/patient, mob/user, silent = FALSE, looping) if(!is_open) balloon_alert(user, "open it first!") return diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index b5540a633f1d7b..064f933573ca32 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -12,15 +12,15 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ 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 = 1 SECONDS, one_per_turf = FALSE, category = CAT_TOOLS), \ + new/datum/stack_recipe("sharpened iron rod", /obj/item/ammo_casing/rebar, 1, time = 0.2 SECONDS, one_per_turf = FALSE, category = CAT_WEAPON_AMMO), \ )) - /obj/item/stack/rods name = "iron rod" desc = "Some rods. Can be used for building or something." singular_name = "iron rod" icon_state = "rods" inhand_icon_state = "rods" - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY w_class = WEIGHT_CLASS_NORMAL force = 9 throwforce = 10 @@ -92,20 +92,7 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ ) use(2) user.put_in_inactive_hand(new_item) - return TOOL_ACT_TOOLTYPE_SUCCESS - -/obj/item/stack/rods/welder_act_secondary(mob/living/user, obj/item/tool) - if(tool.use_tool(src, user, delay = 0, volume = 40)) - var/obj/item/stack/tile/iron/two/new_item = new(user.loc) - user.visible_message( - span_notice("[user.name] shaped [src] into floor tiles with [tool]."), - blind_message = span_hear("You hear welding."), - vision_distance = COMBAT_MESSAGE_RANGE, - ignored_mobs = user - ) - use(1) - user.put_in_inactive_hand(new_item) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/item/stack/rods/welder_act_secondary(mob/living/user, obj/item/tool) if(tool.use_tool(src, user, delay = 0, volume = 40)) @@ -118,7 +105,7 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ ) use(1) user.put_in_inactive_hand(new_item) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/item/stack/rods/cyborg/Initialize(mapload) AddElement(/datum/element/update_icon_blocker) @@ -143,7 +130,7 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ icon_state = "rods" inhand_icon_state = "rods" color = "#5286b9ff" - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY w_class = WEIGHT_CLASS_NORMAL mats_per_unit = list(/datum/material/iron=HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plasma=SMALL_MATERIAL_AMOUNT*5, /datum/material/titanium=SHEET_MATERIAL_AMOUNT) max_amount = 30 diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index e198ff6121d8cb..5a789d34350e29 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -382,13 +382,13 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list( to_chat(user, span_notice("You melt [src] down into [new_glass.name].")) new_glass.forceMove((Adjacent(user) ? user.drop_location() : loc)) //stack merging is handled automatically. qdel(src) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/item/shard/proc/on_entered(datum/source, atom/movable/AM) SIGNAL_HANDLER if(isliving(AM)) var/mob/living/L = AM - if(!(L.movement_type & (FLYING|FLOATING)) || L.buckled) + if(!(L.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) || L.buckled) playsound(src, 'sound/effects/footstep/glass_step.ogg', HAS_TRAIT(L, TRAIT_LIGHT_STEP) ? 30 : 50, TRUE) /obj/item/shard/plasma diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 659cee172d1dce..500b2500c8ad59 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -180,12 +180,6 @@ GLOBAL_LIST_INIT(carp_recipes, list ( \ icon = 'icons/mob/nonhuman-player/alien.dmi' icon_state = "claw" -/obj/item/weed_extract - name = "weed extract" - desc = "A piece of slimy, purplish weed." - icon = 'icons/mob/nonhuman-player/alien.dmi' - icon_state = "weed_extract" - /* * Leather SHeet */ diff --git a/code/game/objects/items/stacks/sheets/light.dm b/code/game/objects/items/stacks/sheets/light.dm index 5ee8f06237cead..c9153c828444d6 100644 --- a/code/game/objects/items/stacks/sheets/light.dm +++ b/code/game/objects/items/stacks/sheets/light.dm @@ -9,7 +9,7 @@ throwforce = 5 throw_speed = 3 throw_range = 7 - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY max_amount = 60 grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/copper = 5) merge_type = /obj/item/stack/light_w diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 8b66bdb47d5adc..8eafe6d52e5ae6 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -49,29 +49,6 @@ GLOBAL_LIST_INIT(sandstone_recipes, list ( \ /obj/item/stack/sheet/mineral/sandstone/thirty amount = 30 -/* - * Clay Bricks - */ - -GLOBAL_LIST_INIT(clay_recipes, list ( \ - new/datum/stack_recipe("clay stove", /obj/machinery/primitive_stove, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_MISC), \ - new/datum/stack_recipe("clay oven", /obj/machinery/oven/stone, 10, time = 5 SECONDS, one_per_turf = FALSE, on_solid_ground = TRUE, category = CAT_MISC) \ - )) - -/obj/item/stack/sheet/mineral/clay - name = "clay brick" - desc = "A heavy clay brick." - singular_name = "clay brick" - icon_state = "sheet-clay" - inhand_icon_state = null - throw_speed = 3 - throw_range = 5 - merge_type = /obj/item/stack/sheet/mineral/clay - -/obj/item/stack/sheet/mineral/clay/get_main_recipes() - . = ..() - . += GLOB.clay_recipes - /* * Sandbags */ diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index a8e20527b8c184..4228866506a378 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -140,7 +140,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ inhand_icon_state = "sheet-metal" mats_per_unit = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT) throwforce = 10 - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY resistance_flags = FIRE_PROOF merge_type = /obj/item/stack/sheet/iron grind_results = list(/datum/reagent/iron = 20) @@ -202,7 +202,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ ) use(1) user.put_in_inactive_hand(new_item) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/item/stack/sheet/iron/welder_act_secondary(mob/living/user, obj/item/tool) if(tool.use_tool(src, user, delay = 0, volume = 40)) @@ -215,7 +215,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ ) use(1) user.put_in_inactive_hand(new_item) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/item/stack/sheet/iron/afterattack_secondary(atom/target, mob/user, proximity_flag, click_parameters) if(isopenturf(target)) @@ -266,7 +266,7 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \ mats_per_unit = list(/datum/material/alloy/plasteel=SHEET_MATERIAL_AMOUNT) material_type = /datum/material/alloy/plasteel throwforce = 10 - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY armor_type = /datum/armor/sheet_plasteel resistance_flags = FIRE_PROOF merge_type = /obj/item/stack/sheet/plasteel @@ -303,6 +303,8 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \ new/datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ new/datum/stack_recipe("wooden stairs frame", /obj/structure/stairs_frame/wood, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("wooden fence", /obj/structure/railing/wooden_fence, 2, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("cat house", /obj/structure/cat_house, 5, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \ new/datum/stack_recipe("coffin", /obj/structure/closet/crate/coffin, 5, time = 1.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ new/datum/stack_recipe("book case", /obj/structure/bookcase, 4, time = 1.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ new/datum/stack_recipe("drying rack", /obj/machinery/smartfridge/drying_rack, 10, time = 1.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), \ @@ -326,7 +328,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ new/datum/stack_recipe("loom", /obj/structure/loom, 10, time = 1.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), \ new/datum/stack_recipe("mortar", /obj/item/reagent_containers/cup/mortar, 3, check_density = FALSE, category = CAT_CHEMISTRY), \ new/datum/stack_recipe("firebrand", /obj/item/match/firebrand, 2, time = 10 SECONDS, check_density = FALSE, category = CAT_TOOLS), \ - new/datum/stack_recipe("bonfire", /obj/structure/bonfire/player_made, 10, time = 6 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), /* SKYRAT EDIT - Pollution - ORIGINAL: /obj/structure/bonfire */ \ + new/datum/stack_recipe("bonfire", /obj/structure/bonfire/player_made, 10, time = 6 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), /* NOVA EDIT - Pollution - ORIGINAL: /obj/structure/bonfire */ \ new/datum/stack_recipe("easel", /obj/structure/easel, 5, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ new/datum/stack_recipe("noticeboard", /obj/item/wallframe/noticeboard, 1, time = 1 SECONDS, one_per_turf = FALSE, on_solid_ground = FALSE, check_density = FALSE, category = CAT_FURNITURE), \ new/datum/stack_recipe("test tube rack", /obj/item/storage/test_tube_rack, 1, time = 1 SECONDS, check_density = FALSE, category = CAT_CHEMISTRY), \ @@ -767,7 +769,8 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \ // Sinew slapcrafting will mostly-sinew recipes, and bones will have mostly-bones recipes. var/static/list/slapcraft_recipe_list = list(\ /datum/crafting_recipe/bonedagger, /datum/crafting_recipe/bonespear, /datum/crafting_recipe/boneaxe,\ - /datum/crafting_recipe/bonearmor, /datum/crafting_recipe/skullhelm, /datum/crafting_recipe/bracers + /datum/crafting_recipe/bonearmor, /datum/crafting_recipe/skullhelm, /datum/crafting_recipe/bracers, + /datum/crafting_recipe/ash_recipe/bone_greaves, ) AddComponent( diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 7f789eaa514e3e..d31dc5caea6063 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -421,7 +421,7 @@ var/turf/covered_turf = builder.drop_location() if(!isturf(covered_turf)) return - var/turf/created_turf = covered_turf.PlaceOnTop(recipe.result_type, flags = CHANGETURF_INHERIT_AIR) + var/turf/created_turf = covered_turf.place_on_top(recipe.result_type, flags = CHANGETURF_INHERIT_AIR) builder.balloon_alert(builder, "placed [ispath(recipe.result_type, /turf/open) ? "floor" : "wall"]") if(recipe.applies_mats && LAZYLEN(mats_per_unit)) created_turf.set_custom_materials(mats_per_unit, recipe.req_amount / recipe.res_amount) diff --git a/code/game/objects/items/stacks/telecrystal.dm b/code/game/objects/items/stacks/telecrystal.dm index 09cc3d5bed2dc3..51d21d6ef6cc35 100644 --- a/code/game/objects/items/stacks/telecrystal.dm +++ b/code/game/objects/items/stacks/telecrystal.dm @@ -11,17 +11,20 @@ merge_type = /obj/item/stack/telecrystal novariants = FALSE -/obj/item/stack/telecrystal/attack(mob/target, mob/user) - if(target == user) //You can't go around smacking people with crystals to find out if they have an uplink or not. - for(var/obj/item/implant/uplink/I in target) - if(I?.imp_in) - var/datum/component/uplink/hidden_uplink = I.GetComponent(/datum/component/uplink) - if(hidden_uplink) - hidden_uplink.add_telecrystals(amount) - use(amount) - to_chat(user, span_notice("You press [src] onto yourself and charge your hidden uplink.")) - else - return ..() +/obj/item/stack/telecrystal/interact_with_atom(atom/interacting_with, mob/living/user) + if(interacting_with != user) //You can't go around smacking people with crystals to find out if they have an uplink or not. + return NONE + + for(var/obj/item/implant/uplink/uplink in interacting_with) + if(!uplink.imp_in) + continue + + var/datum/component/uplink/hidden_uplink = uplink.GetComponent(/datum/component/uplink) + if(hidden_uplink) + hidden_uplink.add_telecrystals(amount) + use(amount) + to_chat(user, span_notice("You press [src] onto yourself and charge your hidden uplink.")) + return ITEM_INTERACT_SUCCESS /obj/item/stack/telecrystal/five amount = 5 diff --git a/code/game/objects/items/stacks/tiles/light.dm b/code/game/objects/items/stacks/tiles/light.dm index ec5bb3104000b1..cbd503ad8e67a6 100644 --- a/code/game/objects/items/stacks/tiles/light.dm +++ b/code/game/objects/items/stacks/tiles/light.dm @@ -3,7 +3,7 @@ singular_name = "light floor tile" desc = "A floor tile, made out of glass. It produces light." icon_state = "tile_e" - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY attack_verb_continuous = list("bashes", "batters", "bludgeons", "thrashes", "smashes") attack_verb_simple = list("bash", "batter", "bludgeon", "thrash", "smash") turf_type = /turf/open/floor/light diff --git a/code/game/objects/items/stacks/tiles/tile_iron.dm b/code/game/objects/items/stacks/tiles/tile_iron.dm index 404c30253448b2..b1ff419208a3b8 100644 --- a/code/game/objects/items/stacks/tiles/tile_iron.dm +++ b/code/game/objects/items/stacks/tiles/tile_iron.dm @@ -7,7 +7,7 @@ force = 6 mats_per_unit = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*0.25) throwforce = 10 - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY turf_type = /turf/open/floor/iron armor_type = /datum/armor/tile_iron resistance_flags = FIRE_PROOF @@ -117,7 +117,7 @@ ) use(4) user.put_in_inactive_hand(new_item) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/item/stack/tile/iron/welder_act_secondary(mob/living/user, obj/item/tool) if(get_amount() < 2) @@ -133,7 +133,7 @@ ) use(2) user.put_in_inactive_hand(new_item) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/item/stack/tile/iron/base //this subtype should be used for most stuff merge_type = /obj/item/stack/tile/iron/base diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index ef19367d42abc8..592348bf5c123f 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -81,7 +81,7 @@ if(!replace_plating) if(!use(1)) return - target_plating = target_plating.PlaceOnTop(placed_turf_path, flags = CHANGETURF_INHERIT_AIR) + target_plating = target_plating.place_on_top(placed_turf_path, flags = CHANGETURF_INHERIT_AIR) target_plating.setDir(turf_dir) playsound(target_plating, 'sound/weapons/genhit.ogg', 50, TRUE) return target_plating // Most executions should end here. @@ -254,6 +254,7 @@ turf_type = /turf/open/floor/carpet/black tableVariant = /obj/structure/table/wood/fancy/black merge_type = /obj/item/stack/tile/carpet/black + tile_reskin_types = null /obj/item/stack/tile/carpet/blue name = "blue carpet" @@ -262,6 +263,7 @@ turf_type = /turf/open/floor/carpet/blue tableVariant = /obj/structure/table/wood/fancy/blue merge_type = /obj/item/stack/tile/carpet/blue + tile_reskin_types = null /obj/item/stack/tile/carpet/cyan name = "cyan carpet" @@ -270,6 +272,7 @@ turf_type = /turf/open/floor/carpet/cyan tableVariant = /obj/structure/table/wood/fancy/cyan merge_type = /obj/item/stack/tile/carpet/cyan + tile_reskin_types = null /obj/item/stack/tile/carpet/green name = "green carpet" @@ -278,6 +281,7 @@ turf_type = /turf/open/floor/carpet/green tableVariant = /obj/structure/table/wood/fancy/green merge_type = /obj/item/stack/tile/carpet/green + tile_reskin_types = null /obj/item/stack/tile/carpet/orange name = "orange carpet" @@ -286,6 +290,7 @@ turf_type = /turf/open/floor/carpet/orange tableVariant = /obj/structure/table/wood/fancy/orange merge_type = /obj/item/stack/tile/carpet/orange + tile_reskin_types = null /obj/item/stack/tile/carpet/purple name = "purple carpet" @@ -294,6 +299,7 @@ turf_type = /turf/open/floor/carpet/purple tableVariant = /obj/structure/table/wood/fancy/purple merge_type = /obj/item/stack/tile/carpet/purple + tile_reskin_types = null /obj/item/stack/tile/carpet/red name = "red carpet" @@ -302,6 +308,7 @@ turf_type = /turf/open/floor/carpet/red tableVariant = /obj/structure/table/wood/fancy/red merge_type = /obj/item/stack/tile/carpet/red + tile_reskin_types = null /obj/item/stack/tile/carpet/royalblack name = "royal black carpet" @@ -310,6 +317,7 @@ turf_type = /turf/open/floor/carpet/royalblack tableVariant = /obj/structure/table/wood/fancy/royalblack merge_type = /obj/item/stack/tile/carpet/royalblack + tile_reskin_types = null /obj/item/stack/tile/carpet/royalblue name = "royal blue carpet" @@ -318,6 +326,7 @@ turf_type = /turf/open/floor/carpet/royalblue tableVariant = /obj/structure/table/wood/fancy/royalblue merge_type = /obj/item/stack/tile/carpet/royalblue + tile_reskin_types = null /obj/item/stack/tile/carpet/executive name = "executive carpet" @@ -325,6 +334,7 @@ inhand_icon_state = "tile-carpet-royalblue" turf_type = /turf/open/floor/carpet/executive merge_type = /obj/item/stack/tile/carpet/executive + tile_reskin_types = null /obj/item/stack/tile/carpet/stellar name = "stellar carpet" @@ -332,6 +342,7 @@ inhand_icon_state = "tile-carpet-royalblue" turf_type = /turf/open/floor/carpet/stellar merge_type = /obj/item/stack/tile/carpet/stellar + tile_reskin_types = null /obj/item/stack/tile/carpet/donk name = "\improper Donk Co. promotional carpet" @@ -339,6 +350,7 @@ inhand_icon_state = "tile-carpet-orange" turf_type = /turf/open/floor/carpet/donk merge_type = /obj/item/stack/tile/carpet/donk + tile_reskin_types = null /obj/item/stack/tile/carpet/fifty amount = 50 @@ -386,6 +398,8 @@ inhand_icon_state = "tile-neon" turf_type = /turf/open/floor/carpet/neon merge_type = /obj/item/stack/tile/carpet/neon + tile_reskin_types = null + // Neon overlay /// The icon used for the neon overlay and emissive overlay. @@ -1134,7 +1148,7 @@ singular_name = "floor tile" desc = "The ground you walk on." //throwforce = 10 //ORIGINAL - throwforce = 6 //SKYRAT EDIT CHANGE + throwforce = 6 //NOVA EDIT CHANGE icon_state = "material_tile" turf_type = /turf/open/floor/material material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS diff --git a/code/game/objects/items/stacks/wrap.dm b/code/game/objects/items/stacks/wrap.dm index 15247e3051de59..a87d2f308a16ef 100644 --- a/code/game/objects/items/stacks/wrap.dm +++ b/code/game/objects/items/stacks/wrap.dm @@ -83,7 +83,7 @@ parcel.base_icon_state = "deliverypackage5" parcel.update_icon() user.forceMove(parcel) - parcel.contains_mobs = TRUE // SKYRAT EDIT - CARGO BORGS + parcel.contains_mobs = TRUE // NOVA EDIT - CARGO BORGS parcel.add_fingerprint(user) return OXYLOSS else @@ -110,10 +110,10 @@ return if(target.anchored) return - // SKYRAT EDIT START - Cargo borgs + // NOVA EDIT START - Cargo borgs if(!amount) return - // SKYRAT EDIT END + // NOVA EDIT END if(isitem(target)) . |= AFTERATTACK_PROCESSED_ITEM @@ -156,12 +156,12 @@ closet.forceMove(parcel) parcel.add_fingerprint(user) closet.add_fingerprint(user) - // SKYRAT EDIT START - CARGO BORGS + // NOVA EDIT START - CARGO BORGS for(var/item in closet.get_all_contents()) if(istype(item, /mob)) parcel.contains_mobs = TRUE break - // SKYRAT EDIT END + // NOVA EDIT END else balloon_alert(user, "not enough paper!") return diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index ef93ac20546bd0..372be8812578de 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -102,7 +102,7 @@ return if(HAS_MIND_TRAIT(user, TRAIT_CANNOT_OPEN_PRESENTS)) var/turf/floor = get_turf(src) - var/obj/item/thing = new /obj/item/a_gift/anything(floor) + var/obj/item/thing = new /obj/item/gift/anything(floor) if(!atom_storage.attempt_insert(thing, user, override = TRUE, force = STORAGE_SOFT_LOCKED)) qdel(thing) @@ -383,7 +383,7 @@ /obj/item/storage/backpack/satchel/flat/Initialize(mapload) . = ..() - AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE, INVISIBILITY_MAXIMUM, use_anchor = TRUE) // SKYRAT EDIT - Ghosts can't see smuggler's satchels + AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE, INVISIBILITY_MAXIMUM, use_anchor = TRUE) // NOVA EDIT - Ghosts can't see smuggler's satchels atom_storage.max_total_storage = 15 atom_storage.set_holdable(cant_hold_list = list(/obj/item/storage/backpack/satchel/flat)) //muh recursive backpacks) @@ -590,7 +590,7 @@ new /obj/item/surgicaldrill(src) new /obj/item/cautery(src) new /obj/item/surgical_drapes(src) - new /obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown(src) //SKYRAT EDIT ADDITION + new /obj/item/clothing/suit/toggle/labcoat/hospitalgown(src) //NOVA EDIT ADDITION new /obj/item/clothing/mask/surgical(src) new /obj/item/blood_filter(src) @@ -643,13 +643,13 @@ unzip_duration = 0.5 SECONDS unzip_sfx = 'sound/items/zip_up.ogg' -//SKYRAT EDIT CHANGE START - It's just a black duffel. +//NOVA EDIT CHANGE START - It's just a black duffel. /obj/item/storage/backpack/duffelbag/syndie name = "tactical duffel bag" desc = "A large duffel bag for holding extra tactical supplies." special_desc_requirement = EXAMINE_CHECK_SYNDICATE special_desc = "This duffel bag has the Syndicate logo stiched on the inside. It appears to be made from lighter yet sturdier materials, and features an oiled plastitanium zipper for maximum speed tactical zipping." -//SKYRAT EDIT CHANGE END +//NOVA EDIT CHANGE END /obj/item/storage/backpack/duffelbag/syndie/hitman desc = "A large duffel bag for holding extra things. There is a Nanotrasen logo on the back." @@ -674,11 +674,11 @@ /obj/item/storage/backpack/duffelbag/syndie/surgery name = "surgery duffel bag" - desc = "A large duffel bag for holding extra supplies - this one has a material inlay with space for various sharp-looking tools." //SKYRAT EDIT CHANGE, to match the security surgery bag + desc = "A large duffel bag for holding extra supplies - this one has a material inlay with space for various sharp-looking tools." //NOVA EDIT CHANGE, to match the security surgery bag icon_state = "duffel-syndiemed" inhand_icon_state = "duffel-syndiemed" - special_desc_requirement = EXAMINE_CHECK_SYNDICATE // SKYRAT EDIT ADDITION - special_desc = "This duffel bag has the Syndicate logo stiched on the inside. It appears to be made from lighter yet sturdier materials." // SKYRAT EDIT ADDITION + special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT ADDITION + special_desc = "This duffel bag has the Syndicate logo stiched on the inside. It appears to be made from lighter yet sturdier materials." // NOVA EDIT ADDITION /obj/item/storage/backpack/duffelbag/syndie/surgery/PopulateContents() new /obj/item/scalpel/advanced(src) diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index 466a201ff70894..c6913010d6e6c4 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -278,7 +278,7 @@ /obj/item/storage/bag/sheetsnatcher name = "sheet snatcher" - desc = "A patented Nanotrasen storage system designed for any kind of mineral sheet." + desc = "A patented Symphionia storage system designed for any kind of mineral sheet." icon = 'icons/obj/mining.dmi' icon_state = "sheetsnatcher" worn_icon_state = "satchel" @@ -344,7 +344,7 @@ throwforce = 10 throw_speed = 3 throw_range = 5 - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT custom_materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*1.5) custom_price = PAYCHECK_CREW * 0.6 diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 57c4a17201702d..4083fab24ab6e9 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -75,7 +75,7 @@ /obj/item/wirecutters, /obj/item/wrench, /obj/item/spess_knife, - /obj/item/melee/sickly_blade/knock, + /obj/item/melee/sickly_blade/lock, )) /obj/item/storage/belt/utility/chief @@ -95,18 +95,18 @@ SSwardrobe.provide_type(/obj/item/multitool, src) SSwardrobe.provide_type(/obj/item/stack/cable_coil, src) SSwardrobe.provide_type(/obj/item/extinguisher/mini, src) - SSwardrobe.provide_type(/obj/item/analyzer/ranged, src) //SKYRAT EDIT - Ranged Analyzer for CE - ORIGINAL: SSwardrobe.provide_type(/obj/item/analyzer, src) + SSwardrobe.provide_type(/obj/item/analyzer/ranged, src) //NOVA EDIT - Ranged Analyzer for CE - ORIGINAL: SSwardrobe.provide_type(/obj/item/analyzer, src) //much roomier now that we've managed to remove two tools /obj/item/storage/belt/utility/chief/full/get_types_to_preload() var/list/to_preload = list() //Yes this is a pain. Yes this is the point to_preload += /obj/item/screwdriver/power to_preload += /obj/item/crowbar/power - to_preload += /obj/item/weldingtool/electric // SKYRAT EDIT - Electric welder + to_preload += /obj/item/weldingtool/electric // NOVA EDIT - Electric welder to_preload += /obj/item/multitool to_preload += /obj/item/stack/cable_coil to_preload += /obj/item/extinguisher/mini - to_preload += /obj/item/analyzer/ranged // SKYRAT EDIT - Ranged Analyzer for CE + to_preload += /obj/item/analyzer/ranged // NOVA EDIT - Ranged Analyzer for CE return to_preload /obj/item/storage/belt/utility/full/PopulateContents() @@ -135,7 +135,7 @@ /obj/item/storage/belt/utility/full/powertools/PopulateContents() new /obj/item/screwdriver/power(src) new /obj/item/crowbar/power(src) - new /obj/item/weldingtool/electric(src) // SKYRAT EDIT - original: new /obj/item/weldingtool/experimental(src) + new /obj/item/weldingtool/electric(src) // NOVA EDIT - original: new /obj/item/weldingtool/experimental(src) new /obj/item/multitool(src) new /obj/item/holosign_creator/atmos(src) new /obj/item/extinguisher/mini(src) @@ -225,7 +225,7 @@ /obj/item/clothing/mask/breath, /obj/item/clothing/mask/muzzle, /obj/item/clothing/mask/surgical, - /obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown, //SKYRAT EDIT ADDITION - adds surgery gowns to belts + /obj/item/clothing/suit/toggle/labcoat/hospitalgown, //NOVA EDIT ADDITION - adds surgery gowns to belts /obj/item/construction/plumbing, /obj/item/dnainjector, /obj/item/extinguisher/mini, @@ -235,7 +235,7 @@ /obj/item/healthanalyzer, /obj/item/hemostat, /obj/item/holosign_creator/medical, - /obj/item/hypospray/mkii, //SKYRAT EDIT ADDITION - HYPOSPRAYS + /obj/item/hypospray/mkii, //NOVA EDIT ADDITION - HYPOSPRAYS /obj/item/implant, /obj/item/implantcase, /obj/item/implanter, @@ -248,7 +248,7 @@ /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/cup/beaker, /obj/item/reagent_containers/cup/bottle, - /obj/item/reagent_containers/cup/vial, //SKYRAT EDIT ADDITION - HYPOSPRAYS + /obj/item/reagent_containers/cup/vial, //NOVA EDIT ADDITION - HYPOSPRAYS /obj/item/reagent_containers/cup/tube, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/medigel, @@ -267,8 +267,8 @@ /obj/item/surgical_drapes, //for true paramedics /obj/item/surgicaldrill, /obj/item/tank/internals/emergency_oxygen, - /obj/item/weaponcell/medical, //SKYRAT EDIT MEDIGUNS - /obj/item/handheld_soulcatcher, // SKYRAT EDIT SOULCATCHERS + /obj/item/weaponcell/medical, //NOVA EDIT MEDIGUNS + /obj/item/handheld_soulcatcher, // NOVA EDIT SOULCATCHERS /obj/item/wrench/medical, )) @@ -334,7 +334,7 @@ inhand_icon_state = "security"//Could likely use a better one. worn_icon_state = "security" content_overlays = TRUE - // SKYRAT EDIT ADDITION START + // NOVA EDIT ADDITION START uses_advanced_reskins = TRUE unique_reskin = list( "Basic Security" = list( @@ -344,13 +344,13 @@ RESKIN_WORN_ICON_STATE = "security" ), "Peacekeeper" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi', + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/belts.dmi', RESKIN_ICON_STATE = "peacekeeperbelt", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi', + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/belt.dmi', RESKIN_WORN_ICON_STATE = "peacekeeperbelt" ) ) - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END /obj/item/storage/belt/security/Initialize(mapload) . = ..() @@ -365,7 +365,7 @@ /obj/item/flashlight/seclite, /obj/item/food/donut, /obj/item/grenade, - /obj/item/gun, //SKYRAT EDIT ADDITION + /obj/item/gun, //NOVA EDIT ADDITION /obj/item/holosign_creator/security, /obj/item/knife/combat, /obj/item/melee/baton, @@ -373,7 +373,7 @@ /obj/item/reagent_containers/spray/pepper, /obj/item/restraints/handcuffs, /obj/item/restraints/legcuffs/bola, - /obj/item/stock_parts/cell/microfusion, //SKYRAT EDIT ADDITION + /obj/item/stock_parts/cell/microfusion, //NOVA EDIT ADDITION )) /obj/item/storage/belt/security/full/PopulateContents() @@ -520,7 +520,7 @@ /obj/item/storage/belt/military name = "chest rig" - desc = "A set of tactical webbing worn by Syndicate boarding parties." + desc = "A set of tactical webbing worn by Symphionia boarding parties." icon_state = "militarywebbing" inhand_icon_state = "militarywebbing" worn_icon_state = "militarywebbing" @@ -674,7 +674,7 @@ /obj/item/storage/belt/wands/full/PopulateContents() new /obj/item/gun/magic/wand/death(src) new /obj/item/gun/magic/wand/resurrection(src) - new /obj/item/gun/magic/wand/fireball(src) //SKYRAT EDIT - Trades polymorph for second fireball + new /obj/item/gun/magic/wand/fireball(src) //NOVA EDIT - Trades polymorph for second fireball new /obj/item/gun/magic/wand/teleport(src) new /obj/item/gun/magic/wand/door(src) new /obj/item/gun/magic/wand/fireball(src) @@ -705,12 +705,12 @@ /obj/item/key/janitor, /obj/item/lightreplacer, /obj/item/melee/flyswatter, - /obj/item/mop, //SKYRAT EDIT - For when you're lazy to use soap - /obj/item/mop/advanced, //SKYRAT EDIT For when you're lazy to use a bucket + /obj/item/mop, //NOVA EDIT - For when you're lazy to use soap + /obj/item/mop/advanced, //NOVA EDIT For when you're lazy to use a bucket /obj/item/paint/paint_remover, /obj/item/plunger, /obj/item/pushbroom, - /obj/item/reagent_containers/cup/bucket, //SKYRAT EDIT - Bucket + /obj/item/reagent_containers/cup/bucket, //NOVA EDIT - Bucket /obj/item/reagent_containers/spray, /obj/item/soap, /obj/item/wirebrush, @@ -725,19 +725,23 @@ /obj/item/storage/belt/bandolier name = "bandolier" - desc = "A bandolier for holding rifle and shotgun ammunition." + desc = "A bandolier for holding rifle shotgun, and bigger revolver caliber ammunition." icon_state = "bandolier" inhand_icon_state = "bandolier" worn_icon_state = "bandolier" /obj/item/storage/belt/bandolier/Initialize(mapload) . = ..() - atom_storage.max_slots = 18 - atom_storage.max_total_storage = 18 + atom_storage.max_slots = 24 + atom_storage.max_total_storage = 24 + atom_storage.numerical_stacking = TRUE + atom_storage.allow_quick_gather = TRUE + atom_storage.allow_quick_empty = TRUE atom_storage.numerical_stacking = TRUE atom_storage.set_holdable(list( /obj/item/ammo_casing/strilka310, /obj/item/ammo_casing/shotgun, + /obj/item/ammo_casing/a357, )) /obj/item/storage/belt/fannypack diff --git a/code/game/objects/items/storage/boxes/clothes_boxes.dm b/code/game/objects/items/storage/boxes/clothes_boxes.dm index 0fe4210e2493e7..4c18ef4f6df283 100644 --- a/code/game/objects/items/storage/boxes/clothes_boxes.dm +++ b/code/game/objects/items/storage/boxes/clothes_boxes.dm @@ -104,11 +104,11 @@ new /obj/item/storage/box/papersack/meat(src) /obj/item/storage/box/hero/mothpioneer - name = "Mothic Fleet Pioneer - 2100's." + name = "Mothic Fleet Pioneer - 2429." desc = "Some claim that the fleet engineers are directly responsible for most modern advancements in spacefaring designs. Although the exact details of their past contributions are somewhat fuzzy, their ingenuity remains unmatched and unquestioned to this day." /obj/item/storage/box/hero/mothpioneer/PopulateContents() - new /obj/item/clothing/head/mothcap(src) + new /obj/item/clothing/head/mothcap/original(src) new /obj/item/clothing/suit/mothcoat/original(src) new /obj/item/crowbar(src) new /obj/item/flashlight/lantern(src) diff --git a/code/game/objects/items/storage/boxes/food_boxes.dm b/code/game/objects/items/storage/boxes/food_boxes.dm index 3e23d604f6df56..aa5aad343009c9 100644 --- a/code/game/objects/items/storage/boxes/food_boxes.dm +++ b/code/game/objects/items/storage/boxes/food_boxes.dm @@ -85,7 +85,7 @@ if("None") desc = "A sack neatly crafted out of paper." if("NanotrasenStandard") - desc = "A standard Nanotrasen paper lunch sack for loyal employees on the go." + desc = "A standard Symphionia paper lunch sack for loyal employees on the go." if("SyndiSnacks") desc = "The design on this paper sack is a remnant of the notorious 'SyndieSnacks' program." if("Heart") diff --git a/code/game/objects/items/storage/boxes/implant_boxes.dm b/code/game/objects/items/storage/boxes/implant_boxes.dm new file mode 100644 index 00000000000000..1da12ba3285790 --- /dev/null +++ b/code/game/objects/items/storage/boxes/implant_boxes.dm @@ -0,0 +1,82 @@ +/obj/item/storage/box/trackimp + name = "boxed tracking implant kit" + desc = "Box full of scum-bag tracking utensils." + icon_state = "secbox" + illustration = "implant" + +/obj/item/storage/box/trackimp/PopulateContents() + var/static/items_inside = list( + /obj/item/implantcase/tracking = 4, + /obj/item/implanter = 1, + /obj/item/implantpad = 1, + /obj/item/locator = 1, + ) + generate_items_inside(items_inside,src) + +/obj/item/storage/box/minertracker + name = "boxed tracking implant kit" + desc = "For finding those who have died on the accursed lavaworld." + illustration = "implant" + +/obj/item/storage/box/minertracker/PopulateContents() + var/static/items_inside = list( + /obj/item/implantcase/tracking = 2, + /obj/item/implantcase/beacon = 2, + /obj/item/implanter = 1, + /obj/item/implantpad = 1, + /obj/item/locator = 1, + ) + generate_items_inside(items_inside,src) + +/obj/item/storage/box/chemimp + name = "boxed chemical implant kit" + desc = "Box of stuff used to implant chemicals." + illustration = "implant" + +/obj/item/storage/box/chemimp/PopulateContents() + var/static/items_inside = list( + /obj/item/implantcase/chem = 5, + /obj/item/implanter = 1, + /obj/item/implantpad = 1, + ) + generate_items_inside(items_inside,src) + +/obj/item/storage/box/exileimp + name = "boxed exile implant kit" + desc = "Box of exile implants. It has a picture of a clown being booted through the Gateway." + illustration = "implant" + +/obj/item/storage/box/exileimp/PopulateContents() + var/static/items_inside = list( + /obj/item/implantcase/exile = 5, + /obj/item/implanter = 1, + /obj/item/implantpad = 1, + ) + generate_items_inside(items_inside,src) + +/obj/item/storage/box/beaconimp + name = "boxed beacon implant kit" + desc = "Contains a set of beacon implants. There's a warning label on the side warning to always check the safety of your teleport destination, \ + accompanied by a cheery drawing of a security officer saying 'look before you leap!'" + illustration = "implant" + +/obj/item/storage/box/beaconimp/PopulateContents() + var/static/items_inside = list( + /obj/item/implantcase/beacon = 3, + /obj/item/implanter = 1, + /obj/item/implantpad = 1, + ) + generate_items_inside(items_inside,src) + +/obj/item/storage/box/teleport_blocker + name = "boxed bluespace grounding implant kit" + desc = "Box of bluespace grounding implants. There's a drawing on the side -- A figure wearing some intimidating robes, frowning and shedding a single tear." + illustration = "implant" + +/obj/item/storage/box/teleport_blocker/PopulateContents() + var/static/items_inside = list( + /obj/item/implantcase/teleport_blocker = 2, + /obj/item/implanter = 1, + /obj/item/implantpad = 1, + ) + generate_items_inside(items_inside,src) diff --git a/code/game/objects/items/storage/boxes/job_boxes.dm b/code/game/objects/items/storage/boxes/job_boxes.dm index 335ccbe7185e9c..b77d52ab3b9319 100644 --- a/code/game/objects/items/storage/boxes/job_boxes.dm +++ b/code/game/objects/items/storage/boxes/job_boxes.dm @@ -29,7 +29,7 @@ return if(!isnull(mask_type)) new mask_type(src) - //SKYRAT EDIT ADDITION START - VOX INTERNALS - Honestly I dont know if this has a function any more with wardrobe_removal(), but TG still uses the plasmaman one so better safe than sorry + //NOVA EDIT ADDITION START - VOX INTERNALS - Honestly I dont know if this has a function any more with wardrobe_removal(), but TG still uses the plasmaman one so better safe than sorry if(!isplasmaman(loc)) if(isvox(loc)) new /obj/item/tank/internals/nitrogen/belt/emergency(src) @@ -37,7 +37,7 @@ new internal_type(src) else new /obj/item/tank/internals/plasmaman/belt(src) - //SKYRAT EDIT ADDITION END - VOX INTERNALS + //NOVA EDIT ADDITION END - VOX INTERNALS if(!isnull(medipen_type)) new medipen_type(src) @@ -52,23 +52,23 @@ if(SSmapping.is_planetary() && LAZYLEN(SSmapping.multiz_levels)) new /obj/item/climbing_hook/emergency(src) - new /obj/item/oxygen_candle(src) //SKYRAT EDIT ADDITION + new /obj/item/oxygen_candle(src) //NOVA EDIT ADDITION /obj/item/storage/box/survival/radio/PopulateContents() ..() // we want the survival stuff too. new /obj/item/radio/off(src) /obj/item/storage/box/survival/proc/wardrobe_removal() - if(!isplasmaman(loc) && !isvox(loc)) //We need to specially fill the box with plasmaman gear, since it's intended for one //SKYRAT EDIT: && !isvox(loc) + if(!isplasmaman(loc) && !isvox(loc)) //We need to specially fill the box with plasmaman gear, since it's intended for one //NOVA EDIT: && !isvox(loc) return var/obj/item/mask = locate(mask_type) in src var/obj/item/internals = locate(internal_type) in src - //SKYRAT EDIT ADDITION START - VOX INTERNALS - Vox mimic the above and below behavior, removing the redundant mask/internals; they dont mimic the plasma breathing though + //NOVA EDIT ADDITION START - VOX INTERNALS - Vox mimic the above and below behavior, removing the redundant mask/internals; they dont mimic the plasma breathing though if(!isvox(loc)) new /obj/item/tank/internals/plasmaman/belt(src) else new /obj/item/tank/internals/nitrogen/belt/emergency(src) - //SKYRAT EDIT ADDITION END - VOX INTERNALS + //NOVA EDIT ADDITION END - VOX INTERNALS qdel(mask) // Get rid of the items that shouldn't be qdel(internals) diff --git a/code/game/objects/items/storage/boxes/medical_boxes.dm b/code/game/objects/items/storage/boxes/medical_boxes.dm index ff4b232454c771..c70fffc1f6e097 100644 --- a/code/game/objects/items/storage/boxes/medical_boxes.dm +++ b/code/game/objects/items/storage/boxes/medical_boxes.dm @@ -133,7 +133,7 @@ /obj/item/storage/box/bandages name = "box of bandages" desc = "A box of DeForest brand gel bandages designed to treat blunt-force trauma." - icon = 'icons/obj/storage/box.dmi' // SKYRAT EDIT CHANGE + icon = 'icons/obj/storage/box.dmi' // NOVA EDIT CHANGE icon_state = "brutebox" base_icon_state = "brutebox" inhand_icon_state = "brutebox" diff --git a/code/game/objects/items/storage/boxes/security_boxes.dm b/code/game/objects/items/storage/boxes/security_boxes.dm index 9c401f999078e7..d355e3570a3c36 100644 --- a/code/game/objects/items/storage/boxes/security_boxes.dm +++ b/code/game/objects/items/storage/boxes/security_boxes.dm @@ -69,60 +69,6 @@ for(var/i in 1 to 5) new /obj/item/grenade/empgrenade(src) -/obj/item/storage/box/trackimp - name = "boxed tracking implant kit" - desc = "Box full of scum-bag tracking utensils." - icon_state = "secbox" - illustration = "implant" - -/obj/item/storage/box/trackimp/PopulateContents() - var/static/items_inside = list( - /obj/item/implantcase/tracking = 4, - /obj/item/implanter = 1, - /obj/item/implantpad = 1, - /obj/item/locator = 1, - ) - generate_items_inside(items_inside,src) - -/obj/item/storage/box/minertracker - name = "boxed tracking implant kit" - desc = "For finding those who have died on the accursed lavaworld." - illustration = "implant" - -/obj/item/storage/box/minertracker/PopulateContents() - var/static/items_inside = list( - /obj/item/implantcase/tracking = 3, - /obj/item/implanter = 1, - /obj/item/implantpad = 1, - /obj/item/locator = 1, - ) - generate_items_inside(items_inside,src) - -/obj/item/storage/box/chemimp - name = "boxed chemical implant kit" - desc = "Box of stuff used to implant chemicals." - illustration = "implant" - -/obj/item/storage/box/chemimp/PopulateContents() - var/static/items_inside = list( - /obj/item/implantcase/chem = 5, - /obj/item/implanter = 1, - /obj/item/implantpad = 1, - ) - generate_items_inside(items_inside,src) - -/obj/item/storage/box/exileimp - name = "boxed exile implant kit" - desc = "Box of exile implants. It has a picture of a clown being booted through the Gateway." - illustration = "implant" - -/obj/item/storage/box/exileimp/PopulateContents() - var/static/items_inside = list( - /obj/item/implantcase/exile = 5, - /obj/item/implanter = 1, - ) - generate_items_inside(items_inside,src) - /obj/item/storage/box/prisoner name = "box of prisoner IDs" desc = "Take away their last shred of dignity, their name." @@ -300,7 +246,7 @@ /obj/item/storage/box/sparklers name = "box of sparklers" - desc = "A box of Nanotrasen brand sparklers, burns hot even in the cold of space-winter." + desc = "A box of Symphionia brand sparklers, burns hot even in the cold of space-winter." illustration = "sparkler" /obj/item/storage/box/sparklers/PopulateContents() diff --git a/code/game/objects/items/storage/briefcase.dm b/code/game/objects/items/storage/briefcase.dm index 4d120b05a28b88..bd474808446afc 100644 --- a/code/game/objects/items/storage/briefcase.dm +++ b/code/game/objects/items/storage/briefcase.dm @@ -6,7 +6,7 @@ inhand_icon_state = "briefcase" lefthand_file = 'icons/mob/inhands/equipment/briefcase_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/briefcase_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY force = 8 hitsound = SFX_SWING_HIT throw_speed = 2 @@ -72,3 +72,41 @@ new /obj/item/ammo_box/magazine/sniper_rounds(src) new /obj/item/ammo_box/magazine/sniper_rounds(src) new /obj/item/ammo_box/magazine/sniper_rounds/disruptor(src) + +/** + * Secure briefcase + * Uses the lockable storage component to give it a lock. + */ +/obj/item/storage/briefcase/secure + name = "secure briefcase" + desc = "A large briefcase with a digital locking system." + icon_state = "secure" + base_icon_state = "secure" + inhand_icon_state = "sec-case" + +/obj/item/storage/briefcase/secure/Initialize(mapload) + . = ..() + atom_storage.max_total_storage = 21 + atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL + AddComponent(/datum/component/lockable_storage) + +///Syndie variant of Secure Briefcase. Contains space cash, slightly more robust. +/obj/item/storage/briefcase/secure/syndie + force = 15 + +/obj/item/storage/briefcase/secure/syndie/PopulateContents() + . = ..() + for(var/iterator in 1 to 5) + new /obj/item/stack/spacecash/c1000(src) + +/// A briefcase that contains various sought-after spoils +/obj/item/storage/briefcase/secure/riches + +/obj/item/storage/briefcase/secure/riches/PopulateContents() + new /obj/item/clothing/suit/armor/vest(src) + new /obj/item/gun/ballistic/automatic/pistol(src) + new /obj/item/suppressor(src) + new /obj/item/melee/baton/telescopic(src) + new /obj/item/clothing/mask/balaclava(src) + new /obj/item/bodybag(src) + new /obj/item/soap/nanotrasen(src) diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm index 5aeeff5128b4d7..8e9e7963246c2c 100644 --- a/code/game/objects/items/storage/fancy.dm +++ b/code/game/objects/items/storage/fancy.dm @@ -213,7 +213,7 @@ balloon_alert(user, "ooh, free coupon") var/obj/item/coupon/attached_coupon = new user.put_in_hands(attached_coupon) - attached_coupon.generate(rigged_omen) + attached_coupon.generate(rigged_omen ? COUPON_OMEN : null) attached_coupon = null spawn_coupon = FALSE name = "discarded cigarette packet" @@ -382,7 +382,7 @@ /obj/item/storage/fancy/rollingpapers name = "rolling paper pack" - desc = "A pack of Nanotrasen brand rolling papers." + desc = "A pack of Symphionia brand rolling papers." w_class = WEIGHT_CLASS_TINY icon = 'icons/obj/cigarettes.dmi' icon_state = "cig_paper_pack" @@ -506,7 +506,7 @@ spawn_type = /obj/item/food/pickle spawn_count = 10 contents_tag = "pickle" - foldable_result = null + foldable_result = /obj/item/reagent_containers/cup/beaker/large custom_materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT) open_status = FANCY_CONTAINER_ALWAYS_OPEN has_open_closed_states = FALSE diff --git a/code/game/objects/items/storage/garment.dm b/code/game/objects/items/storage/garment.dm index 9398b675b1bbba..8e812ad81af776 100644 --- a/code/game/objects/items/storage/garment.dm +++ b/code/game/objects/items/storage/garment.dm @@ -76,31 +76,33 @@ new /obj/item/clothing/shoes/laceup(src) /obj/item/storage/bag/garment/hos/PopulateContents() - //new /obj/item/clothing/under/rank/security/head_of_security/skirt(src) SKYRAT EDIT REMOVAL - Blue Sec + //new /obj/item/clothing/under/rank/security/head_of_security/skirt(src) NOVA EDIT REMOVAL - Blue Sec new /obj/item/clothing/under/rank/security/head_of_security/alt(src) new /obj/item/clothing/under/rank/security/head_of_security/alt/skirt(src) new /obj/item/clothing/under/rank/security/head_of_security/grey(src) new /obj/item/clothing/under/rank/security/head_of_security/parade(src) new /obj/item/clothing/under/rank/security/head_of_security/parade/female(src) + new /obj/item/clothing/gloves/tackler/combat(src) new /obj/item/clothing/suit/armor/hos(src) new /obj/item/clothing/suit/armor/hos/hos_formal(src) new /obj/item/clothing/suit/armor/hos/trenchcoat/winter(src) new /obj/item/clothing/suit/armor/vest/leather(src) new /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch(src) new /obj/item/clothing/glasses/hud/security/sunglasses/gars/giga(src) + new /obj/item/clothing/head/hats/hos/beret(src) new /obj/item/clothing/head/hats/hos/cap(src) new /obj/item/clothing/mask/gas/sechailer/swat(src) new /obj/item/clothing/neck/cloak/hos(src) /obj/item/storage/bag/garment/warden/PopulateContents() new /obj/item/clothing/suit/armor/vest/warden(src) - //new /obj/item/clothing/head/hats/warden(src) SKYRAT EDIT REMOVAL - //new /obj/item/clothing/head/hats/warden/drill(src) SKYRAT EDIT REMOVAL + //new /obj/item/clothing/head/hats/warden(src) NOVA EDIT REMOVAL + //new /obj/item/clothing/head/hats/warden/drill(src) NOVA EDIT REMOVAL new /obj/item/clothing/head/beret/sec/navywarden(src) - //new /obj/item/clothing/suit/armor/vest/warden/alt(src) SKYRAT EDIT REMOVAL + //new /obj/item/clothing/suit/armor/vest/warden/alt(src) NOVA EDIT REMOVAL new /obj/item/clothing/under/rank/security/warden/formal(src) - new /obj/item/clothing/suit/jacket/warden/blue(src) //SKYRAT ADDITION - FORMAL COAT - //new /obj/item/clothing/under/rank/security/warden/skirt(src) SKYRAT EDIT REMOVAL + new /obj/item/clothing/suit/jacket/warden/blue(src) //NOVA ADDITION - FORMAL COAT + //new /obj/item/clothing/under/rank/security/warden/skirt(src) NOVA EDIT REMOVAL new /obj/item/clothing/gloves/krav_maga/sec(src) new /obj/item/clothing/glasses/hud/security/sunglasses(src) new /obj/item/clothing/mask/gas/sechailer(src) @@ -112,7 +114,7 @@ new /obj/item/clothing/under/rank/rnd/research_director/alt/skirt(src) new /obj/item/clothing/under/rank/rnd/research_director/turtleneck(src) new /obj/item/clothing/under/rank/rnd/research_director/turtleneck/skirt(src) - new /obj/item/clothing/suit/toggle/labcoat/skyrat/rd(src) //SKYRAT EDIT ADDITION + new /obj/item/clothing/suit/toggle/labcoat/nova/rd(src) //NOVA EDIT ADDITION new /obj/item/clothing/suit/hooded/wintercoat/science/rd(src) new /obj/item/clothing/head/beret/science/rd(src) new /obj/item/clothing/gloves/color/black(src) diff --git a/code/game/objects/items/storage/holsters.dm b/code/game/objects/items/storage/holsters.dm index cb722469a2c033..400c949a993205 100644 --- a/code/game/objects/items/storage/holsters.dm +++ b/code/game/objects/items/storage/holsters.dm @@ -195,7 +195,9 @@ /obj/item/storage/belt/holster/nukie/cowboy/full/PopulateContents() generate_items_inside(list( - /obj/item/gun/ballistic/revolver/syndicate/cowboy = 1, + /obj/item/gun/ballistic/revolver/syndicate/cowboy/nuclear = 1, /obj/item/ammo_box/a357 = 2, ), src) + + diff --git a/code/game/objects/items/storage/lockbox.dm b/code/game/objects/items/storage/lockbox.dm index 9154e0ef3ed3ce..35b321d892f8d4 100644 --- a/code/game/objects/items/storage/lockbox.dm +++ b/code/game/objects/items/storage/lockbox.dm @@ -253,11 +253,11 @@ ADD_TRAIT(src, TRAIT_NO_MISSING_ITEM_ERROR, TRAIT_GENERIC) ADD_TRAIT(src, TRAIT_NO_MANIFEST_CONTENTS_ERROR, TRAIT_GENERIC) - //SKYRAT EDIT START + //NOVA EDIT START if(istype(buyer_account, /datum/bank_account/department)) department_purchase = TRUE department_account = buyer_account - //SKYRAT EDIT END + //NOVA EDIT END /obj/item/storage/lockbox/order/attackby(obj/item/W, mob/user, params) var/obj/item/card/id/id_card = W.GetID() @@ -267,7 +267,7 @@ if(iscarbon(user)) add_fingerprint(user) - if((id_card.registered_account != buyer_account) && !(department_purchase && (id_card.registered_account?.account_job?.paycheck_department) == (department_account.department_id))) //SKYRAT EDIT + if((id_card.registered_account != buyer_account) && !(department_purchase && (id_card.registered_account?.account_job?.paycheck_department) == (department_account.department_id))) //NOVA EDIT balloon_alert(user, "incorrect bank account!") return diff --git a/code/game/objects/items/storage/medkit.dm b/code/game/objects/items/storage/medkit.dm index 4b08d1551a34e3..23d7f2a9284ace 100644 --- a/code/game/objects/items/storage/medkit.dm +++ b/code/game/objects/items/storage/medkit.dm @@ -259,7 +259,7 @@ icon_state = "medkit_advanced" inhand_icon_state = "medkit-rad" custom_premium_price = PAYCHECK_COMMAND * 6 - damagetype_healed = "all" + damagetype_healed = HEAL_ALL_DAMAGE /obj/item/storage/medkit/advanced/PopulateContents() if(empty) @@ -276,7 +276,7 @@ desc = "I hope you've got insurance." icon_state = "medkit_tactical" inhand_icon_state = "medkit-tactical" - damagetype_healed = "all" + damagetype_healed = HEAL_ALL_DAMAGE /obj/item/storage/medkit/tactical/Initialize(mapload) . = ..() diff --git a/code/game/objects/items/storage/secure.dm b/code/game/objects/items/storage/secure.dm deleted file mode 100644 index 0d845b5254efcc..00000000000000 --- a/code/game/objects/items/storage/secure.dm +++ /dev/null @@ -1,242 +0,0 @@ -/* - * Absorbs /obj/item/secstorage. - * Reimplements it only slightly to use existing storage functionality. - * - * Contains: - * Secure Briefcase - * Wall Safe - */ - -///Generic Safe -/obj/item/storage/secure - name = "secstorage" - desc = "This shouldn't exist. If it does, create an issue report." - w_class = WEIGHT_CLASS_NORMAL - /// The code entered by the user - var/entered_code - /// The code that will open this safe - var/lock_code - /// Does this lock have a code set? - var/lock_set = FALSE - /// Is this lock currently being hacked? - var/lock_hacking = FALSE - /// Is the safe service panel open? - var/panel_open = FALSE - /// Is this door hackable? - var/can_hack_open = TRUE - -/obj/item/storage/secure/Initialize(mapload) - . = ..() - atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL - atom_storage.max_total_storage = 14 - update_appearance() - -/obj/item/storage/secure/examine(mob/user) - . = ..() - if(can_hack_open) - . += "The service panel is currently [panel_open ? "unscrewed" : "screwed shut"]." - -/obj/item/storage/secure/update_icon_state() - . = ..() - icon_state = "[initial(icon_state)][atom_storage?.locked ? "_locked" : null]" - -/obj/item/storage/secure/tool_act(mob/living/user, obj/item/tool, tool_type, is_right_clicking) - if(can_hack_open && atom_storage.locked) - return ..() - else - return FALSE - -/obj/item/storage/secure/wirecutter_act(mob/living/user, obj/item/tool) - to_chat(user, span_danger("[src] is protected from this sort of tampering, yet it appears the internal memory wires can still be pulsed.")) - return - -/obj/item/storage/secure/screwdriver_act(mob/living/user, obj/item/tool) - if(tool.use_tool(src, user, 20)) - panel_open = !panel_open - balloon_alert(user, "panel [panel_open ? "opened" : "closed"]") - return TRUE - -/obj/item/storage/secure/multitool_act(mob/living/user, obj/item/tool) - . = TRUE - if(lock_hacking) - balloon_alert(user, "already hacking!") - return - if(panel_open) - balloon_alert(user, "hacking...") - lock_hacking = TRUE - if (tool.use_tool(src, user, 400)) - balloon_alert(user, "hacked") - lock_set = FALSE - - lock_hacking = FALSE - return - - balloon_alert(user, "unscrew panel!") - -/obj/item/storage/secure/attack_self(mob/user) - var/locked = atom_storage.locked - user.set_machine(src) - var/dat = "[src]
\n\nLock Status: [locked ? "LOCKED" : "UNLOCKED"]" - var/message = "Code" - if (!lock_set) - dat += "

\n5-DIGIT PASSCODE NOT SET.
ENTER NEW PASSCODE.
" - message = "[entered_code]" - if (!locked) - message = "*****" - dat += "


\n>[message]
\n1-2-3
\n4-5-6
\n7-8-9
\nR-0-E
\n
" - user << browse(dat, "window=caselock;size=300x280") - -/obj/item/storage/secure/Topic(href, href_list) - ..() - if (usr.stat != CONSCIOUS || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) || (get_dist(src, usr) > 1)) - return - if (href_list["type"]) - if (href_list["type"] == "E") - if (!lock_set && (length(entered_code) == 5) && (entered_code != "ERROR")) - lock_code = entered_code - lock_set = TRUE - else if ((entered_code == lock_code) && lock_set) - atom_storage.locked = STORAGE_NOT_LOCKED - update_appearance() - entered_code = null - else - entered_code = "ERROR" - else - if (href_list["type"] == "R") - atom_storage.locked = STORAGE_FULLY_LOCKED - update_appearance() - entered_code = null - atom_storage.hide_contents(usr) - else - entered_code += sanitize_text(href_list["type"]) - if (length(entered_code) > 5) - entered_code = "ERROR" - add_fingerprint(usr) - for(var/mob/M in viewers(1, loc)) - if ((M.client && M.machine == src)) - attack_self(M) - return - return - -///Secure Briefcase -/obj/item/storage/secure/briefcase - name = "secure briefcase" - icon = 'icons/obj/storage/case.dmi' - icon_state = "secure" - inhand_icon_state = "sec-case" - lefthand_file = 'icons/mob/inhands/equipment/briefcase_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/briefcase_righthand.dmi' - desc = "A large briefcase with a digital locking system." - force = 8 - hitsound = SFX_SWING_HIT - throw_speed = 2 - throw_range = 4 - w_class = WEIGHT_CLASS_BULKY - attack_verb_continuous = list("bashes", "batters", "bludgeons", "thrashes", "whacks") - attack_verb_simple = list("bash", "batter", "bludgeon", "thrash", "whack") - -/obj/item/storage/secure/briefcase/PopulateContents() - new /obj/item/paper(src) - new /obj/item/pen(src) - -/obj/item/storage/secure/briefcase/Initialize(mapload) - . = ..() - atom_storage.max_total_storage = 21 - atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL - -///Syndie variant of Secure Briefcase. Contains space cash, slightly more robust. -/obj/item/storage/secure/briefcase/syndie - force = 15 - -/obj/item/storage/secure/briefcase/syndie/PopulateContents() - ..() - for(var/iterator in 1 to 5) - new /obj/item/stack/spacecash/c1000(src) - -/// A briefcase that contains various sought-after spoils -/obj/item/storage/secure/briefcase/riches - -/obj/item/storage/secure/briefcase/riches/PopulateContents() - new /obj/item/clothing/suit/armor/vest(src) - new /obj/item/gun/ballistic/automatic/pistol(src) - new /obj/item/suppressor(src) - new /obj/item/melee/baton/telescopic(src) - new /obj/item/clothing/mask/balaclava(src) - new /obj/item/bodybag(src) - new /obj/item/soap/nanotrasen(src) - -///Secure Safe -/obj/item/storage/secure/safe - name = "secure safe" - icon = 'icons/obj/storage/storage.dmi' - icon_state = "wall_safe" - desc = "Excellent for securing things away from grubby hands." - w_class = WEIGHT_CLASS_GIGANTIC - anchored = TRUE - density = FALSE - -MAPPING_DIRECTIONAL_HELPERS(/obj/item/storage/secure/safe, 32) - -/obj/item/storage/secure/safe/Initialize(mapload) - . = ..() - atom_storage.set_holdable(cant_hold_list = list(/obj/item/storage/secure/briefcase)) - atom_storage.max_specific_storage = WEIGHT_CLASS_GIGANTIC - find_and_hang_on_wall() - -/obj/item/storage/secure/safe/PopulateContents() - new /obj/item/paper(src) - new /obj/item/pen(src) - -/obj/item/storage/secure/safe/attack_hand(mob/user, list/modifiers) - . = ..() - if(.) - return - return attack_self(user) - -/obj/item/storage/secure/safe/hos - name = "head of security's safe" - -/** - * This safe is meant to be damn robust. To break in, you're supposed to get creative, or use acid or an explosion. - * - * This makes the safe still possible to break in for someone who is prepared and capable enough, either through - * chemistry, botany or whatever else. - * - * The safe is also weak to explosions, so spending some early TC could allow an antag to blow it upen if they can - * get access to it. - */ -/obj/item/storage/secure/safe/caps_spare - name = "captain's spare ID safe" - desc = "In case of emergency, do not break glass. All Captains and Acting Captains are provided with codes to access this safe. \ -It is made out of the same material as the station's Black Box and is designed to resist all conventional weaponry. \ -There appears to be a small amount of surface corrosion. It doesn't look like it could withstand much of an explosion.\ -It remains quite flush against the wall, and there only seems to be enough room to fit something as slim as an ID card." - can_hack_open = FALSE - armor_type = /datum/armor/safe_caps_spare - max_integrity = 300 - color = "#ffdd33" - -MAPPING_DIRECTIONAL_HELPERS(/obj/item/storage/secure/safe/caps_spare, 32) - -/datum/armor/safe_caps_spare - melee = 100 - bullet = 100 - laser = 100 - energy = 100 - bomb = 70 - fire = 80 - acid = 70 - -/obj/item/storage/secure/safe/caps_spare/Initialize(mapload) - . = ..() - atom_storage.set_holdable(can_hold_list = list(/obj/item/card/id)) - lock_code = SSid_access.spare_id_safe_code - lock_set = TRUE - atom_storage.locked = STORAGE_FULLY_LOCKED - update_appearance() - -/obj/item/storage/secure/safe/caps_spare/PopulateContents() - new /obj/item/card/id/advanced/gold/captains_spare(src) - -/obj/item/storage/secure/safe/caps_spare/rust_heretic_act() - take_damage(damage_amount = 100, damage_type = BRUTE, damage_flag = MELEE, armour_penetration = 100) diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index 048f355b970d10..97d6305eacc55c 100644 --- a/code/game/objects/items/storage/toolbox.dm +++ b/code/game/objects/items/storage/toolbox.dm @@ -6,7 +6,7 @@ inhand_icon_state = "toolbox_default" lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY force = 12 throwforce = 12 throw_speed = 2 @@ -162,14 +162,14 @@ new_cable_three.set_cable_color(pickedcolor) /obj/item/storage/toolbox/syndicate - name = "tactical toolbox" //SKYRAT EDIT + name = "tactical toolbox" //NOVA EDIT icon_state = "syndicate" inhand_icon_state = "toolbox_syndi" force = 15 throwforce = 18 material_flags = NONE - special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit - special_desc = "A toolbox manufactured by the Syndicate containing extra tactical tools. Made of more robust materials than the average toolbox." // Skyrat edit + special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT + special_desc = "A toolbox manufactured by the Syndicate containing extra tactical tools. Made of more robust materials than the average toolbox." // NOVA EDIT /obj/item/storage/toolbox/syndicate/Initialize(mapload) . = ..() @@ -376,7 +376,7 @@ /obj/item/storage/toolbox/guncase/revolver name = "revolver gun case" - weapon_to_spawn = /obj/item/gun/ballistic/revolver/syndicate + weapon_to_spawn = /obj/item/gun/ballistic/revolver/syndicate/nuclear extra_to_spawn = /obj/item/ammo_box/a357 /obj/item/storage/toolbox/guncase/sword_and_board @@ -418,7 +418,7 @@ dog_fashion = null /obj/item/storage/toolbox/guncase/doublesword - name = "double-energy sword weapon case" + name = "double-bladed energy sword weapon case" weapon_to_spawn = /obj/item/dualsaber extra_to_spawn = /obj/item/soap/syndie diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index fd762510107171..dc69ef96e23d4b 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -39,7 +39,7 @@ ))) if(KIT_RECON) new /obj/item/clothing/glasses/thermal/xray(src) // ~8 tc? -// new /obj/item/storage/briefcase/launchpad(src) //6 tc // SKYRAT EDIT REMOVAL +// new /obj/item/storage/briefcase/launchpad(src) //6 tc // NOVA EDIT REMOVAL new /obj/item/binoculars(src) // 2 tc? new /obj/item/encryptionkey/syndicate(src) // 2 tc new /obj/item/storage/box/syndie_kit/space(src) //4 tc @@ -234,7 +234,6 @@ new /obj/item/storage/toolbox/syndicate(src) // 1 tc new /obj/item/pen/edagger(src) // 2 tc new /obj/item/gun/energy/wormhole_projector/core_inserted(src) // 5 tc easily - new /obj/item/gun/energy/decloner/unrestricted(src) // 5 tc at least also if(KIT_BEES) new /obj/item/paper/fluff/bee_objectives(src) // 0 tc (motivation) @@ -277,69 +276,20 @@ new /obj/item/implanter/freedom(src) // 5 tc new /obj/item/stack/telecrystal(src) //The failsafe/self destruct isn't an item we can physically include in the kit, but 1 TC is technically enough to buy the equivalent. -/obj/item/storage/box/syndicate/contract_kit //SKYRAT EDIT - CHANGED IN MODULAR FOLDER - name = "Contract Kit" - desc = "Supplied to Syndicate contractors." - icon_state = "syndiebox" - illustration = "writing_syndie" - -/obj/item/storage/box/syndicate/contractor_loadout //SKYRAT EDIT - CHANGED IN MODULAR FOLDER - name = "Standard Loadout" - desc = "Supplied to Syndicate contractors, providing their specialised space suit and chameleon uniform." - icon_state = "syndiebox" - illustration = "writing_syndie" - -/obj/item/paper/contractor_guide //SKYRAT EDIT - CHANGED IN MODULAR FOLDER - name = "Contractor Guide" - -/obj/item/paper/contractor_guide/Initialize(mapload) //SKYRAT EDIT - CHANGED IN MODULAR FOLDER - default_raw_text = {"

Welcome agent, congratulations on your new position as contractor. On top of your already assigned objectives, - this kit will provide you contracts to take on for TC payments.

- -

Provided within, we give your specialist contractor space suit. It's even more compact, being able to fit into a pocket, and faster than the - Syndicate space suit available to you on the uplink. We also provide your chameleon jumpsuit and mask, both of which can be changed - to any form you need for the moment. The cigarettes are a special blend - it'll heal your injuries slowly overtime.

- -

Your standard issue contractor baton hits harder than the ones you might be used to, and likely be your go to weapon for kidnapping your - targets. The three additional items have been randomly selected from what we had available. We hope they're useful to you for your mission.

- -

The contractor hub, available at the top right of the uplink, will provide you unique items and abilities. These are bought using Contractor Rep, - with two Rep being provided each time you complete a contract.

- -

Using the tablet

-
    -
  1. Open the Syndicate Contract Uplink program.
  2. -
  3. Here, you can accept a contract, and redeem your TC payments from completed contracts.
  4. -
  5. The payment number shown in brackets is the bonus you'll receive when bringing your target alive. You receive the - other number regardless of if they were alive or dead.
  6. -
  7. Contracts are completed by bringing the target to designated dropoff, calling for extraction, and putting them - inside the pod.
  8. -
- -

Be careful when accepting a contract. While you'll be able to see the location of the dropoff point, cancelling will make it - unavailable to take on again.

-

The tablet can also be recharged at any cell charger.

-

Extracting

-
    -
  1. Make sure both yourself and your target are at the dropoff.
  2. -
  3. Call the extraction, and stand back from the drop point.
  4. -
  5. If it fails, make sure your target is inside, and there's a free space for the pod to land.
  6. -
  7. Grab your target, and drag them into the pod.
  8. -
-

Ransoms

-

We need your target for our own reasons, but we ransom them back to your mission area once their use is served. They will return back - from where you sent them off from in several minutes time. Don't worry, we give you a cut of what we get paid. We pay this into whatever - ID card you have equipped, on top of the TC payment we give.

- -

Good luck agent. You can burn this document with the supplied lighter.

"} - return ..() - /obj/item/storage/box/syndie_kit name = "box" desc = "A sleek, sturdy box." icon_state = "syndiebox" illustration = "writing_syndie" +/obj/item/storage/box/syndie_kit/rebarxbowsyndie + name = "Boxed Rebar Crossbow" + desc = "Now features instruction manual for making ammo." + +/obj/item/storage/box/syndie_kit/rebarxbowsyndie/PopulateContents() + new /obj/item/book/granter/crafting_recipe/dusting/rebarxbowsyndie_ammo(src) + new /obj/item/gun/ballistic/rifle/rebarxbow/syndie(src) + /obj/item/storage/box/syndie_kit/origami_bundle name = "origami kit" desc = "A box full of a number of rather masterfully engineered paper planes and a manual on \"The Art of Origami\"." @@ -620,6 +570,7 @@ new /obj/item/card/emag/doorjack (src) new /obj/item/reagent_containers/hypospray/medipen/stimulants (src) new /obj/item/grenade/c4 (src) + new /obj/item/mod/module/energy_shield(src) /// Surplus Ammo Box @@ -756,13 +707,13 @@ human_target.reagents.add_reagent(/datum/reagent/toxin, 2) return FALSE - /// If all the antag datums are 'fake', disallow induction! No self-antagging. + /// If all the antag datums are 'fake' or none exist, disallow induction! No self-antagging. var/faker for(var/datum/antagonist/antag_datum as anything in human_target.mind.antag_datums) if((antag_datum.antag_flags & FLAG_FAKE_ANTAG)) faker = TRUE - if(faker) // GTFO. Technically not foolproof but making a heartbreaker or a paradox clone a nuke op sounds hilarious + if(faker || isnull(human_target.mind.antag_datums)) // GTFO. Technically not foolproof but making a heartbreaker or a paradox clone a nuke op sounds hilarious to_chat(human_target, span_notice("Huh? Nothing happened? But you're starting to feel a little ill...")) human_target.reagents.add_reagent(/datum/reagent/toxin, 15) return FALSE @@ -813,6 +764,63 @@ /obj/item/food/grown/apple = 1, ), src) +/obj/item/storage/box/syndicate/contract_kit + name = "Contract Kit" + desc = "Supplied to Syndicate contractors." + icon_state = "syndiebox" + illustration = "writing_syndie" + +/obj/item/storage/box/syndicate/contract_kit/PopulateContents() + new /obj/item/modular_computer/pda/contractor(src) // NOVA EDIT CHANGE - ORIGINAL : /obj/item/modular_computer/pda/syndicate_contract_uplink(src) + new /obj/item/storage/box/syndicate/contractor_loadout(src) + new /obj/item/melee/baton/telescopic/contractor_baton(src) + + // All about 4 TC or less - some nukeops only items, but fit nicely to the theme. + var/static/list/item_list = list( + /obj/item/storage/backpack/duffelbag/syndie/x4, + /obj/item/storage/box/syndie_kit/throwing_weapons, + /obj/item/gun/syringe/syndicate, + /obj/item/pen/edagger, + /obj/item/pen/sleepy, + /obj/item/flashlight/emp, + /obj/item/reagent_containers/syringe/mulligan, + /obj/item/clothing/shoes/chameleon/noslip, + /obj/item/storage/medkit/tactical, + /obj/item/encryptionkey/syndicate, + /obj/item/clothing/glasses/thermal/syndi, + /obj/item/slimepotion/slime/sentience/nuclear, + /obj/item/storage/box/syndie_kit/imp_radio, + ///obj/item/storage/box/syndie_kit/imp_uplink, // NOVA EDIT REMOVAL + ///obj/item/clothing/gloves/krav_maga/combatglovesplus, // NOVA EDIT REMOVAL + /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot, + /obj/item/reagent_containers/hypospray/medipen/stimulants, + /obj/item/storage/box/syndie_kit/imp_freedom, + /obj/item/toy/eightball/haunted, + ) + for(var/i in 1 to 3) + var/selected_item = pick_n_take(item_list + modular_item_list) // NOVA EDIT CHANGE - ORIGINAL : var/selected_item = pick_n_take(item_list) + new selected_item(src) + + // Paper guide is always last. + new /obj/item/paper/contractor_guide(src) + +/obj/item/storage/box/syndicate/contractor_loadout + name = "Standard Loadout" + desc = "Supplied to Syndicate contractors, providing their specialised space suit and chameleon uniform." + icon_state = "syndiebox" + illustration = "writing_syndie" + +/obj/item/storage/box/syndicate/contractor_loadout/PopulateContents() + /* NOVA EDIT REMOVAL BEGIN - Contractors get MODSuits instead, see contractor modular for overrides + new /obj/item/clothing/head/helmet/space/syndicate/contract(src) + new /obj/item/clothing/suit/space/syndicate/contract(src) + NOVA EDIT REMOVAL END */ + new /obj/item/clothing/under/chameleon(src) + new /obj/item/clothing/mask/chameleon(src) + new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src) + new /obj/item/card/id/advanced/chameleon(src) + new /obj/item/lighter(src) + #undef KIT_RECON #undef KIT_BLOODY_SPAI #undef KIT_STEALTHY diff --git a/code/game/objects/items/storage/wallets.dm b/code/game/objects/items/storage/wallets.dm index 7a75ba88674498..f83c199a049b2e 100644 --- a/code/game/objects/items/storage/wallets.dm +++ b/code/game/objects/items/storage/wallets.dm @@ -19,19 +19,24 @@ /obj/item/holochip, /obj/item/card, /obj/item/clothing/mask/cigarette, - // SKYRAT EDIT BEGIN + // NOVA EDIT BEGIN /obj/item/condom_pack, - // SKYRAT EDIT END + /obj/item/gbp_punchcard, + // NOVA EDIT END /obj/item/coupon, /obj/item/flashlight/pen, /obj/item/folder/biscuit, /obj/item/seeds, /obj/item/stack/medical, /obj/item/toy/crayon, + /obj/item/clothing/accessory/dogtag, /obj/item/coin, - /obj/item/food/chococoin, + /obj/item/coupon, /obj/item/dice, /obj/item/disk, + /obj/item/flashlight/pen, + /obj/item/folder/biscuit, + /obj/item/food/chococoin, /obj/item/implanter, /obj/item/laser_pointer, /obj/item/lighter, @@ -44,8 +49,11 @@ /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/pill, /obj/item/screwdriver, + /obj/item/seeds, /obj/item/spess_knife, - /obj/item/stamp), + /obj/item/stack/medical, + /obj/item/stamp, + /obj/item/toy/crayon), list(/obj/item/screwdriver/power)) /obj/item/storage/wallet/Exited(atom/movable/gone, direction) diff --git a/code/game/objects/items/surgery_tray.dm b/code/game/objects/items/surgery_tray.dm index edd92522446d1f..958fb9fef05c15 100644 --- a/code/game/objects/items/surgery_tray.dm +++ b/code/game/objects/items/surgery_tray.dm @@ -12,7 +12,7 @@ /obj/item/cautery, /obj/item/circular_saw, /obj/item/clothing/mask/surgical, - /obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown, // SKYRAT EDIT ADDITION + /obj/item/clothing/suit/toggle/labcoat/hospitalgown, // NOVA EDIT ADDITION /obj/item/hemostat, /obj/item/razor, /obj/item/reagent_containers/medigel, @@ -177,7 +177,7 @@ tool.forceMove(drop_point) /obj/item/surgery_tray/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) dump_contents() new /obj/item/stack/rods(drop_location(), 2) new /obj/item/stack/sheet/mineral/silver(drop_location()) @@ -197,7 +197,7 @@ new /obj/item/cautery(src) new /obj/item/circular_saw(src) new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown(src) // SKYRAT EDIT ADDITION + new /obj/item/clothing/suit/toggle/labcoat/hospitalgown(src) // NOVA EDIT ADDITION new /obj/item/hemostat(src) new /obj/item/razor/surgery(src) new /obj/item/retractor(src) @@ -219,7 +219,7 @@ new /obj/item/cautery/cruel(src) new /obj/item/circular_saw(src) new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown(src) // SKYRAT EDIT ADDITION + new /obj/item/clothing/suit/toggle/labcoat/hospitalgown(src) // NOVA EDIT ADDITION new /obj/item/hemostat/cruel(src) new /obj/item/razor/surgery(src) new /obj/item/retractor/cruel(src) diff --git a/code/game/objects/items/syndie_spraycan.dm b/code/game/objects/items/syndie_spraycan.dm index 78ffb6a4772c28..8c0923424f0d96 100644 --- a/code/game/objects/items/syndie_spraycan.dm +++ b/code/game/objects/items/syndie_spraycan.dm @@ -1,3 +1,5 @@ +#define SYNDIE_DRAW_TIME 3 SECONDS + // Extending the existing spraycan item was more trouble than it was worth, I don't want or need this to be able to draw arbitrary shapes. /obj/item/traitor_spraycan name = "seditious spraycan" @@ -79,7 +81,12 @@ /obj/item/traitor_spraycan/proc/try_draw_step(start_output, mob/living/user, atom/target) drawing_rune = TRUE user.balloon_alert(user, "[start_output]") - if (!do_after(user, 3 SECONDS, target)) + var/wait_time = SYNDIE_DRAW_TIME + + if(HAS_TRAIT(user, TRAIT_TAGGER)) + wait_time *= 0.5 + + if(!do_after(user, wait_time, target)) user.balloon_alert(user, "interrupted!") drawing_rune = FALSE return FALSE @@ -142,7 +149,7 @@ /obj/effect/decal/cleanable/traitor_rune name = "syndicate graffiti" - desc = "It looks like it's going to be... the Syndicate logo?" + desc = "It looks like it's going to be... the Symphionia logo?" icon = 'icons/effects/96x96.dmi' icon_state = "traitor_rune_outline" pixel_x = -32 @@ -181,7 +188,7 @@ * * victim - whoever just slipped, point and laugh at them */ /obj/effect/decal/cleanable/traitor_rune/proc/slip(mob/living/victim) - if(victim.movement_type & FLYING) + if(victim.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) return if (!victim.slip(slip_time, src, slip_flags)) return @@ -199,16 +206,16 @@ switch(drawn_stage) if (RUNE_STAGE_OUTLINE) icon_state = "traitor_rune_outline" - desc = "It looks like it's going to be... the Syndicate logo?" + desc = "It looks like it's going to be... the Symphionia logo?" if (RUNE_STAGE_COLOURED, RUNE_STAGE_REMOVABLE) icon_state = "traitor_rune_done" - desc = "A large depiction of the Syndicate logo." + desc = "A large depiction of the Symphionia logo." clean_proof = FALSE if (RUNE_STAGE_COMPLETE) icon_state = "traitor_rune_sheen" - desc = "A large depiction of the Syndicate logo. It looks slippery." + desc = "A large depiction of the Symphionia logo. It looks slippery." var/datum/demoralise_moods/graffiti/mood_category = new() demoraliser = new(src, 7, TRUE, mood_category) clean_proof = TRUE @@ -220,6 +227,7 @@ return ..() +#undef SYNDIE_DRAW_TIME #undef RUNE_STAGE_COLOURED #undef RUNE_STAGE_COMPLETE #undef RUNE_STAGE_OUTLINE diff --git a/code/game/objects/items/tanks/tank_types.dm b/code/game/objects/items/tanks/tank_types.dm index 8ebfb6afcc4915..064a749521e88a 100644 --- a/code/game/objects/items/tanks/tank_types.dm +++ b/code/game/objects/items/tanks/tank_types.dm @@ -70,6 +70,11 @@ air_contents.gases[/datum/gas/oxygen][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD air_contents.gases[/datum/gas/nitrous_oxide][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD +/obj/item/tank/internals/anesthetic/examine(mob/user) + . = ..() + . += span_notice("A warning is etched into [src]...") + . += span_warning("There is no process in the body that uses N2O, so patients will exhale the N2O... exposing you to it. Make sure to work in a well-ventilated space to avoid sleepy mishaps.") + /* * Plasma */ @@ -80,7 +85,7 @@ inhand_icon_state = "plasma_tank" worn_icon_state = "plasmatank" tank_holder_icon_state = null - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = null //they have no straps! force = 8 @@ -162,7 +167,7 @@ worn_icon_state = "emergency" tank_holder_icon_state = "holder_emergency" worn_icon = null - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_SMALL force = 4 diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index a93cd92bd4781c..6b84407ed300da 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -14,7 +14,7 @@ inhand_icon_state = "generic_tank" lefthand_file = 'icons/mob/inhands/equipment/tanks_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tanks_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BACK worn_icon = 'icons/mob/clothing/back.dmi' //since these can also get thrown into suit storage slots. if something goes on the belt, set this to null. hitsound = 'sound/weapons/smash.ogg' diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm index 04eb28e236ec28..29dcdbcf702106 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -205,11 +205,6 @@ to_chat(user, span_notice("You [amount_per_transfer_from_this == 10 ? "remove" : "affix"] the nozzle. You'll now use [amount_per_transfer_from_this] units per spray.")) //ATMOS FIRE FIGHTING BACKPACK - -#define EXTINGUISHER 0 -#define RESIN_LAUNCHER 1 -#define RESIN_FOAM 2 - /obj/item/watertank/atmos name = "backpack firefighter tank" desc = "A refrigerated and pressurized backpack tank with extinguisher nozzle, intended to fight fires. Swaps between extinguisher, resin launcher and a smaller scale resin foamer." @@ -467,7 +462,7 @@ var/inj_am = injection_amount * seconds_per_tick var/used_amount = inj_am / usage_ratio - reagents.trans_to(user, used_amount, multiplier=usage_ratio, methods = INJECT) + reagents.trans_to(user, used_amount, usage_ratio, methods = INJECT) update_appearance() user.update_worn_back() //for overlays update diff --git a/code/game/objects/items/teleportation.dm b/code/game/objects/items/teleportation.dm index 07e178acba5f9c..376ec6a65a3956 100644 --- a/code/game/objects/items/teleportation.dm +++ b/code/game/objects/items/teleportation.dm @@ -13,10 +13,10 @@ /obj/item/locator name = "bluespace locator" desc = "Used to track portable teleportation beacons and targets with embedded tracking implants." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tracker.dmi' icon_state = "locator" var/temp = null - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY w_class = WEIGHT_CLASS_SMALL inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' @@ -24,7 +24,7 @@ throw_speed = 3 throw_range = 7 custom_materials = list(/datum/material/iron= SMALL_MATERIAL_AMOUNT * 4) - var/tracking_range = 20 + var/tracking_range = 35 /obj/item/locator/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -72,22 +72,22 @@ var/list/track_implants = list() - for (var/obj/item/implant/tracking/W in GLOB.tracked_implants) - if (!W.imp_in || !isliving(W.loc)) + for (var/obj/item/implant/beacon/tracking_beacon in GLOB.tracked_implants) + if (!tracking_beacon.imp_in || !isliving(tracking_beacon.loc)) continue else - var/mob/living/M = W.loc - if (M.stat == DEAD) - if (M.timeofdeath + W.lifespan_postmortem < world.time) + var/mob/living/living_mob = tracking_beacon.loc + if (living_mob.stat == DEAD) + if (living_mob.timeofdeath + tracking_beacon.lifespan_postmortem < world.time) continue - var/turf/tr = get_turf(W) + var/turf/tr = get_turf(tracking_beacon) var/distance = max(abs(tr.x - sr.x), abs(tr.y - sr.y)) if(distance > tracking_range) continue var/D = dir2text(get_dir(sr, tr)) - track_implants += list(list(name = W.imp_in.name, direction = D, distance = distance)) + track_implants += list(list(name = tracking_beacon.imp_in.name, direction = D, distance = distance)) data["trackimplants"] = track_implants return data @@ -100,7 +100,7 @@ /obj/item/hand_tele name = "hand tele" desc = "A portable item using blue-space technology. One of the buttons opens a portal, the other re-opens your last destination." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tracker.dmi' icon_state = "hand_tele" inhand_icon_state = "electronic" worn_icon_state = "electronic" @@ -168,12 +168,12 @@ /obj/item/hand_tele/attack_self(mob/user) if (!can_teleport_notifies(user)) return - //SKYRAT EDIT BEGIN + //NOVA EDIT BEGIN var/turf/my_turf = get_turf(src) if(is_away_level(my_turf.z)) to_chat(user, "[src] cannot be used here!") return - //SKYRAT EDIT END + //NOVA EDIT END var/list/locations = list() for(var/obj/machinery/computer/teleporter/computer as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/teleporter)) var/atom/target = computer.target_ref?.resolve() @@ -322,13 +322,13 @@ /obj/item/syndicate_teleporter name = "experimental teleporter" desc = "A reverse-engineered version of the Nanotrasen handheld teleporter. Lacks the advanced safety features of its counterpart. A three-headed serpent can be seen on the back." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tracker.dmi' icon_state = "syndi-tele" throwforce = 5 w_class = WEIGHT_CLASS_SMALL throw_speed = 4 throw_range = 10 - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' @@ -499,12 +499,15 @@ to_chat(victim, span_warning("[user] teleports into you, knocking you to the floor with the bluespace wave!")) ///Bleed and make blood splatters at tele start and end points -/obj/item/syndicate_teleporter/proc/make_bloods(turf/old_location, turf/new_location, mob/user) +/obj/item/syndicate_teleporter/proc/make_bloods(turf/old_location, turf/new_location, mob/living/user) + user.add_splatter_floor(old_location) + user.add_splatter_floor(new_location) + if(!iscarbon(user)) + return var/mob/living/carbon/carbon_user = user - carbon_user.add_splatter_floor(old_location) - carbon_user.add_splatter_floor(new_location) carbon_user.bleed(10) + /obj/item/paper/syndicate_teleporter name = "Teleporter Guide" default_raw_text = {" diff --git a/code/game/objects/items/theft_tools.dm b/code/game/objects/items/theft_tools.dm index 8f357e05139170..be4e2b4aea2d7b 100644 --- a/code/game/objects/items/theft_tools.dm +++ b/code/game/objects/items/theft_tools.dm @@ -98,7 +98,7 @@ return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "screwdriver_nuke") /obj/item/paper/guides/antag/nuke_instructions - default_raw_text = "How to break into a Nanotrasen self-destruct terminal and remove its plutonium core:
\ + default_raw_text = "How to break into a Symphionia self-destruct terminal and remove its plutonium core:
\
    \
  • Use a screwdriver with a very thin tip (provided) to unscrew the terminal's front panel
  • \
  • Dislodge and remove the front panel with a crowbar
  • \ @@ -109,12 +109,12 @@
" /obj/item/paper/guides/antag/hdd_extraction - default_raw_text = "

Source Code Theft & You - The Idiot's Guide to Crippling Nanotrasen Research & Development


\ - Rumour has it that Nanotrasen are using their R&D Servers to create something awful! They've codenamed it Project Goon, whatever that means.
\ + default_raw_text = "

Source Code Theft & You - The Idiot's Guide to Crippling Symphionia Research & Development


\ + Rumour has it that Symphionia are using their R&D Servers to create something awful! They've codenamed it Project Goon, whatever that means.
\ This cannot be allowed to stand. Below is all our intel for stealing their source code and crippling their research efforts:
\
    \
  • Locate the physical R&D Server mainframes. Intel suggests these are stored in specially cooled rooms deep within their Science department.
  • \ -
  • Nanotrasen is a corporation not known for subtlety in design. You should be able to identify the master server by any distinctive markings.
  • \ +
  • Symphionia is a corporation not known for subtlety in design. You should be able to identify the master server by any distinctive markings.
  • \
  • Tools are on-site procurement. Screwdriver, crowbar and wirecutters should be all you need to do the job.
  • \
  • The front panel screws are hidden in recesses behind stickers. Easily removed once you know they're there.
  • \
  • You'll probably find the hard drive in secure housing. You may need to pry it loose with a crowbar, shouldn't do too much damage.
  • \ @@ -157,13 +157,10 @@ inhand_icon_state = null //touching it dusts you, so no need for an inhand icon. pulseicon = "supermatter_sliver_pulse" layer = ABOVE_MOB_LAYER - plane = GAME_PLANE_UPPER - /obj/item/nuke_core/supermatter_sliver/attack_tk(mob/user) // no TK dusting memes return - /obj/item/nuke_core/supermatter_sliver/can_be_pulled(user) // no drag memes return FALSE @@ -192,11 +189,11 @@ var/mob/living/victim = hit_atom if(victim.incorporeal_move || victim.status_flags & GODMODE) //try to keep this in sync with supermatter's consume fail conditions return ..() - if(throwingdatum?.thrower) - var/mob/user = throwingdatum.thrower - log_combat(throwingdatum?.thrower, hit_atom, "consumed", src) - message_admins("[src] has consumed [key_name_admin(victim)] [ADMIN_JMP(src)], thrown by [key_name_admin(user)].") - investigate_log("has consumed [key_name(victim)], thrown by [key_name(user)]", INVESTIGATE_ENGINE) + var/mob/thrower = throwingdatum?.get_thrower() + if(thrower) + log_combat(thrower, hit_atom, "consumed", src) + message_admins("[src] has consumed [key_name_admin(victim)] [ADMIN_JMP(src)], thrown by [key_name_admin(thrower)].") + investigate_log("has consumed [key_name(victim)], thrown by [key_name(thrower)]", INVESTIGATE_ENGINE) else message_admins("[src] has consumed [key_name_admin(victim)] [ADMIN_JMP(src)] via throw impact.") investigate_log("has consumed [key_name(victim)] via throw impact.", INVESTIGATE_ENGINE) diff --git a/code/game/objects/items/tongs.dm b/code/game/objects/items/tongs.dm index 8e7753bf488493..81f71c6b3453e7 100644 --- a/code/game/objects/items/tongs.dm +++ b/code/game/objects/items/tongs.dm @@ -73,7 +73,7 @@ update_appearance(UPDATE_ICON) /obj/item/kitchen/tongs/pre_attack(obj/item/attacked, mob/living/user, params) - if (!isnull(tonged)) + if (!isnull(tonged) && tonged.force <= 0) // prevents tongs from giving food-weapons extra range attacked.attackby(tonged, user) return TRUE if (isliving(attacked)) @@ -86,6 +86,7 @@ attacked.do_pickup_animation(src) attacked.forceMove(src) update_appearance(UPDATE_ICON) + return TRUE /obj/item/kitchen/tongs/update_overlays() . = ..() diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm index 11470620c49f5d..2cce6e9c0dd58f 100644 --- a/code/game/objects/items/tools/crowbar.dm +++ b/code/game/objects/items/tools/crowbar.dm @@ -7,7 +7,7 @@ lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' usesound = 'sound/items/crowbar.ogg' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT force = 5 throwforce = 7 @@ -70,6 +70,24 @@ desc = "It's a bulky crowbar. It almost seems deliberately designed to not be able to fit inside of a backpack." w_class = WEIGHT_CLASS_BULKY +/obj/item/crowbar/hammer + name = "claw hammer" + desc = "It's a heavy hammer with a pry bar on the back of its head. Nails aren't common in space, but this tool can still be used as a weapon or a crowbar." + force = 11 + w_class = WEIGHT_CLASS_NORMAL + icon = 'icons/obj/weapons/hammer.dmi' + icon_state = "clawhammer" + lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' + inhand_icon_state = "clawhammer" + belt_icon_state = "clawhammer" + throwforce = 10 + throw_range = 5 + throw_speed = 3 + toolspeed = 2 + custom_materials = list(/datum/material/wood=SMALL_MATERIAL_AMOUNT*0.5, /datum/material/iron=SMALL_MATERIAL_AMOUNT*0.7) + wound_bonus = 35 + /obj/item/crowbar/large/heavy //from space ruin name = "heavy crowbar" desc = "It's a big crowbar. It doesn't fit in your pockets, because it's big. It feels oddly heavy.." @@ -142,8 +160,8 @@ return COMPONENT_NO_DEFAULT_MESSAGE /obj/item/crowbar/power/syndicate - name = "Syndicate jaws of life" - desc = "A pocket sized re-engineered copy of Nanotrasen's standard jaws of life. Can be used to force open airlocks in its crowbar configuration." + name = "Symphionia jaws of life" + desc = "A pocket sized re-engineered copy of Symphionia's standard jaws of life. Can be used to force open airlocks in its crowbar configuration." icon_state = "jaws_syndie" w_class = WEIGHT_CLASS_SMALL toolspeed = 0.5 @@ -217,7 +235,7 @@ var/mech_dir = mech.dir mech.balloon_alert(user, "prying open...") playsound(mech, 'sound/machines/airlock_alien_prying.ogg', 100, TRUE) - if(!use_tool(mech, user, mech.enclosed ? 5 SECONDS : 3 SECONDS, volume = 0, extra_checks = CALLBACK(src, PROC_REF(extra_checks), mech, mech_dir))) + if(!use_tool(mech, user, (mech.mecha_flags & IS_ENCLOSED) ? 5 SECONDS : 3 SECONDS, volume = 0, extra_checks = CALLBACK(src, PROC_REF(extra_checks), mech, mech_dir))) mech.balloon_alert(user, "interrupted!") return user.log_message("pried open [mech], located at [loc_name(mech)], which is currently occupied by [mech.occupants.Join(", ")].", LOG_ATTACK) diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index 2c95d657181ad2..cbdc79e04203a9 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -8,7 +8,8 @@ belt_icon_state = "screwdriver" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - flags_1 = CONDUCT_1 | IS_PLAYER_COLORABLE_1 + flags_1 = IS_PLAYER_COLORABLE_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT force = 5 demolition_mod = 0.5 diff --git a/code/game/objects/items/tools/spess_knife.dm b/code/game/objects/items/tools/spess_knife.dm index 591954100008d5..0b0061de7a4ed3 100644 --- a/code/game/objects/items/tools/spess_knife.dm +++ b/code/game/objects/items/tools/spess_knife.dm @@ -11,7 +11,7 @@ lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' w_class = WEIGHT_CLASS_TINY - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT resistance_flags = FIRE_PROOF tool_behaviour = null diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index 3812cf911bfe09..60a1f97f90d033 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -2,14 +2,14 @@ #define WELDER_FUEL_BURN_INTERVAL 5 /obj/item/weldingtool name = "welding tool" - desc = "A standard edition welder provided by Nanotrasen." + desc = "A standard edition welder provided by Symphionia." icon = 'icons/obj/tools.dmi' icon_state = "welder" inhand_icon_state = "welder" worn_icon_state = "welder" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT force = 3 throwforce = 5 @@ -30,8 +30,8 @@ heat = 3800 tool_behaviour = TOOL_WELDER toolspeed = 1 - //wound_bonus = 10 //SKYRAT EDIT REMOVAL - //bare_wound_bonus = 15 //SKYRAT EDIT REMOVAL + //wound_bonus = 10 //NOVA EDIT REMOVAL + //bare_wound_bonus = 15 //NOVA EDIT REMOVAL custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*0.7, /datum/material/glass=SMALL_MATERIAL_AMOUNT*0.3) /// Whether the welding tool is on or off. var/welding = FALSE @@ -112,7 +112,7 @@ /obj/item/weldingtool/screwdriver_act(mob/living/user, obj/item/tool) flamethrower_screwdriver(tool, user) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/item/weldingtool/attackby(obj/item/tool, mob/user, params) if(istype(tool, /obj/item/stack/rods)) @@ -134,28 +134,33 @@ LAZYREMOVE(update_overlays_on_z, sparks) target.cut_overlay(sparks) -/obj/item/weldingtool/attack(mob/living/carbon/human/attacked_humanoid, mob/living/user) - if(!istype(attacked_humanoid)) - return ..() +/obj/item/weldingtool/interact_with_atom(atom/interacting_with, mob/living/user) + if(!ishuman(interacting_with)) + return NONE + if(user.combat_mode) + return NONE + var/mob/living/carbon/human/attacked_humanoid = interacting_with var/obj/item/bodypart/affecting = attacked_humanoid.get_bodypart(check_zone(user.zone_selected)) + if(isnull(affecting) || !IS_ROBOTIC_LIMB(affecting)) + return NONE - if(affecting && IS_ROBOTIC_LIMB(affecting) && !user.combat_mode) - if(src.use_tool(attacked_humanoid, user, 0, volume=50, amount=1)) - if(user == attacked_humanoid) - user.visible_message(span_notice("[user] starts to fix some of the dents on [attacked_humanoid]'s [affecting.name]."), - span_notice("You start fixing some of the dents on [attacked_humanoid == user ? "your" : "[attacked_humanoid]'s"] [affecting.name].")) - /* SKYRAT EDIT START - ORIGINAL: - if(!do_after(user, 5 SECONDS, attacked_humanoid)) - return - */ - // SKYRAT EDIT CHANGE START - if(!do_after(user, (user == attacked_humanoid ? self_delay : other_delay))) - return - // SKYRAT EDIT CHANGE END - item_heal_robotic(attacked_humanoid, user, 15, 0) + var/use_delay = 0 + + if(user == attacked_humanoid) + user.visible_message(span_notice("[user] starts to fix some of the dents on [attacked_humanoid]'s [affecting.name]."), + span_notice("You start fixing some of the dents on [attacked_humanoid == user ? "your" : "[attacked_humanoid]'s"] [affecting.name].")) + use_delay = self_delay // NOVA EDIT CHANGE - ORIGINAL: use_delay = 5 SECONDS + // NOVA EDIT ADDITION START else - return ..() + use_delay = other_delay + // NOVA EDIT ADDITION END + + if(!use_tool(attacked_humanoid, user, use_delay, volume=50, amount=1)) + return ITEM_INTERACT_BLOCKING + + item_heal_robotic(attacked_humanoid, user, 15, 0) + return ITEM_INTERACT_SUCCESS /obj/item/weldingtool/afterattack(atom/attacked_atom, mob/user, proximity) . = ..() diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm index 1ed8055333c1a5..14c51faf080d58 100644 --- a/code/game/objects/items/tools/wirecutters.dm +++ b/code/game/objects/items/tools/wirecutters.dm @@ -13,7 +13,7 @@ greyscale_config_inhand_left = /datum/greyscale_config/wirecutter_inhand_left greyscale_config_inhand_right = /datum/greyscale_config/wirecutter_inhand_right - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT force = 6 throw_speed = 3 @@ -63,7 +63,7 @@ playsound(loc, usesound, 50, TRUE, -1) return BRUTELOSS -/obj/item/wirecutters/abductor//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/item/wirecutters/abductor//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "alien wirecutters" desc = "Extremely sharp wirecutters, made out of a silvery-green metal." icon = 'icons/obj/antags/abductor.dmi' diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm index 70dc666aa93fb2..c4326cf3de8188 100644 --- a/code/game/objects/items/tools/wrench.dm +++ b/code/game/objects/items/tools/wrench.dm @@ -7,7 +7,7 @@ worn_icon_state = "wrench" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT force = 5 throwforce = 7 diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index c7f93c6ea68bfe..a0cd80e02ccda5 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -135,7 +135,8 @@ return ..() /obj/item/toy/balloon/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) - if(ismonkey(throwingdatum.thrower) && istype(AM, /obj/item/ammo_casing/foam_dart)) + var/mob/thrower = throwingdatum?.get_thrower() + if(ismonkey(thrower) && istype(AM, /obj/item/ammo_casing/foam_dart)) pop_balloon(monkey_pop = TRUE) else return ..() @@ -320,7 +321,7 @@ worn_icon_state = "gun" lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_NORMAL custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 0.1, /datum/material/glass= SMALL_MATERIAL_AMOUNT * 0.1) @@ -457,10 +458,10 @@ if("purple") saber_color = "red" else - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS balloon_alert(user, "changed to [saber_color]") update_appearance(UPDATE_ICON) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/item/toy/sword/vv_edit_var(vname, vval) . = ..() @@ -615,7 +616,7 @@ worn_icon_state = "katana" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK force = 5 throwforce = 5 @@ -855,7 +856,7 @@ /obj/item/toy/redbutton name = "big red button" desc = "A big, plastic red button. Reads 'From HonkCo Pranks!' on the back." - icon = 'icons/obj/assemblies/assemblies.dmi' + icon = 'icons/obj/devices/assemblies.dmi' icon_state = "bigred" w_class = WEIGHT_CLASS_SMALL var/cooldown = 0 @@ -908,8 +909,8 @@ item_flags = NO_PIXEL_RANDOM_DROP /obj/item/toy/beach_ball/branded - name = "\improper Nanotrasen-brand beach ball" - desc = "The simple beach ball is one of Nanotrasen's most popular products. 'Why do we make beach balls? Because we can! (TM)' - Nanotrasen" + name = "\improper Symphionia-brand beach ball" + desc = "The simple beach ball is one of Symphionia's most popular products. 'Why do we make beach balls? Because we can! (TM)' - Symphionia" /obj/item/toy/beach_ball/baseball name = "baseball" diff --git a/code/game/objects/items/vending_items.dm b/code/game/objects/items/vending_items.dm index de0dc592c7bd44..0383767ce66e8e 100644 --- a/code/game/objects/items/vending_items.dm +++ b/code/game/objects/items/vending_items.dm @@ -11,7 +11,7 @@ desc = "A vending machine restock cart." lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY force = 7 throwforce = 10 throw_speed = 1 diff --git a/code/game/objects/items/wall_mounted.dm b/code/game/objects/items/wall_mounted.dm index 48142778a925e9..ef19205cf8063d 100644 --- a/code/game/objects/items/wall_mounted.dm +++ b/code/game/objects/items/wall_mounted.dm @@ -1,7 +1,7 @@ /obj/item/wallframe icon = 'icons/obj/machines/wallmounts.dmi' custom_materials = list(/datum/material/iron= SHEET_MATERIAL_AMOUNT * 2) - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY inhand_icon_state = "syringe_kit" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' @@ -64,7 +64,7 @@ var/turf/T = get_step(get_turf(user), user.dir) if(iswallturf(T)) T.attackby(src, user) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/item/wallframe/wrench_act(mob/living/user, obj/item/tool) var/metal_amt = round(custom_materials[GET_MATERIAL_REF(/datum/material/iron)]/SHEET_MATERIAL_AMOUNT) //Replace this shit later @@ -79,16 +79,16 @@ if(glass_amt) new /obj/item/stack/sheet/glass(get_turf(src), glass_amt) qdel(src) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/item/electronics desc = "Looks like a circuit. Probably is." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "door_electronics" inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY w_class = WEIGHT_CLASS_SMALL custom_materials = list(/datum/material/iron= SMALL_MATERIAL_AMOUNT * 0.5, /datum/material/glass= SMALL_MATERIAL_AMOUNT * 0.5) grind_results = list(/datum/reagent/iron = 10, /datum/reagent/silicon = 10) diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 8c949b36a79e49..059f78b80c90da 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -70,7 +70,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' hitsound = 'sound/weapons/bladeslice.ogg' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK force = 40 throwforce = 10 @@ -99,6 +99,11 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 user.visible_message(span_suicide("[user] is falling on [src]! It looks like [user.p_theyre()] trying to commit suicide!")) return BRUTELOSS +/obj/item/claymore/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) + if(attack_type == PROJECTILE_ATTACK || attack_type == LEAP_ATTACK) + final_block_chance = 0 //Don't bring a sword to a gunfight, and also you aren't going to really block someone full body tackling you with a sword + return ..() + //statistically similar to e-cutlasses /obj/item/claymore/cutlass name = "cutlass" @@ -113,9 +118,24 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 throw_range = 5 armour_penetration = 35 +/obj/item/claymore/carrot + name = "carrot sword" + desc = "A full-sized carrot sword. Definitely \not\ good for the eyes, not anymore." + icon_state = "carrot_sword" + inhand_icon_state = "carrot_sword" + worn_icon_state = "carrot_sword" + flags_1 = NONE + force = 19 + throwforce = 7 + throw_speed = 3 + throw_range = 7 + armour_penetration = 5 + block_chance = 10 + resistance_flags = NONE + /obj/item/claymore/highlander //ALL COMMENTS MADE REGARDING THIS SWORD MUST BE MADE IN ALL CAPS desc = "THERE CAN BE ONLY ONE, AND IT WILL BE YOU!!!\nActivate it in your hand to point to the nearest victim." - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = DROPDEL //WOW BRO YOU LOST AN ARM, GUESS WHAT YOU DONT GET YOUR SWORD ANYMORE //I CANT BELIEVE SPOOKYDONUT WOULD BREAK THE REQUIREMENTS slot_flags = null block_chance = 0 //RNG WON'T HELP YOU NOW, PANSY @@ -141,7 +161,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 /obj/item/claymore/highlander/process() if(ishuman(loc)) var/mob/living/carbon/human/holder = loc - SET_PLANE_EXPLICIT(holder, GAME_PLANE_UPPER_FOV_HIDDEN, src) //NO HIDING BEHIND PLANTS FOR YOU, DICKWEED (HA GET IT, BECAUSE WEEDS ARE PLANTS) + layer = ABOVE_ALL_MOB_LAYER //NO HIDING BEHIND PLANTS FOR YOU, DICKWEED (HA GET IT, BECAUSE WEEDS ARE PLANTS) ADD_TRAIT(holder, TRAIT_NOBLOOD, HIGHLANDER_TRAIT) //AND WE WON'T BLEED OUT LIKE COWARDS else if(!(flags_1 & ADMIN_SPAWNED_1)) @@ -265,7 +285,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 return INITIALIZE_HINT_QDEL /obj/item/claymore/highlander/robot/process() - SET_PLANE_IMPLICIT(loc, GAME_PLANE_UPPER_FOV_HIDDEN) + layer = ABOVE_ALL_MOB_LAYER /obj/item/katana name = "katana" @@ -276,7 +296,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 worn_icon_state = "katana" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK force = 40 throwforce = 10 @@ -343,7 +363,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' desc = "A sharp, concealable, spring-loaded knife." - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY force = 3 w_class = WEIGHT_CLASS_SMALL throwforce = 5 @@ -398,7 +418,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 /obj/item/phone name = "red phone" desc = "Should anything ever go wrong..." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/voice.dmi' icon_state = "red_phone" force = 3 throwforce = 2 diff --git a/code/game/objects/items/wiki_manuals.dm b/code/game/objects/items/wiki_manuals.dm new file mode 100644 index 00000000000000..7209d76cc5735f --- /dev/null +++ b/code/game/objects/items/wiki_manuals.dm @@ -0,0 +1,228 @@ +// Wiki books that are linked to the configured wiki link. + +/// The size of the window that the wiki books open in. +#define BOOK_WINDOW_BROWSE_SIZE "970x710" +/// This macro will resolve to code that will open up the associated wiki page in the window. +#define WIKI_PAGE_IFRAME(wikiurl, link_identifier) {" + + + + + + + +

    You start skimming through the manual...

    + + + + "} + +// A book that links to the wiki +/obj/item/book/manual/wiki + starting_content = "Nanotrasen presently does not have any resources on this topic. If you would like to know more, contact your local Central Command representative." // safety + /// The ending URL of the page that we link to. + var/page_link = "" + +/obj/item/book/manual/wiki/display_content(mob/living/user) + var/wiki_url = CONFIG_GET(string/wikiurl) + if(!wiki_url) + user.balloon_alert(user, "this book is empty!") + return + + credit_book_to_reader(user) + DIRECT_OUTPUT(user, browse(WIKI_PAGE_IFRAME(wiki_url, page_link), "window=manual;size=[BOOK_WINDOW_BROWSE_SIZE]")) // if you change this GUARANTEE that it works. + +/obj/item/book/manual/wiki/chemistry + name = "Chemistry Textbook" + icon_state ="chemistrybook" + starting_author = "Nanotrasen" + starting_title = "Chemistry Textbook" + page_link = "Guide_to_chemistry" + +/obj/item/book/manual/wiki/engineering_construction + name = "Station Repairs and Construction" + icon_state ="bookEngineering" + starting_author = "Engineering Encyclopedia" + starting_title = "Station Repairs and Construction" + page_link = "Guide_to_construction" + +/obj/item/book/manual/wiki/engineering_guide + name = "Engineering Textbook" + icon_state ="bookEngineering2" + starting_author = "Engineering Encyclopedia" + starting_title = "Engineering Textbook" + page_link = "Guide_to_engineering" + +/obj/item/book/manual/wiki/security_space_law + name = "Space Law" + desc = "A set of Nanotrasen guidelines for keeping law and order on their space stations." + icon_state = "bookSpaceLaw" + starting_author = "Nanotrasen" + starting_title = "Space Law" + page_link = "Space_Law" + +/obj/item/book/manual/wiki/security_space_law/suicide_act(mob/living/user) + user.visible_message(span_suicide("[user] pretends to read \the [src] intently... then promptly dies of laughter!")) + return OXYLOSS + +/obj/item/book/manual/wiki/infections + name = "Infections - Making your own pandemic!" + icon_state = "bookInfections" + starting_author = "Infections Encyclopedia" + starting_title = "Infections - Making your own pandemic!" + page_link = "Infections" + +/obj/item/book/manual/wiki/telescience + name = "Teleportation Science - Bluespace for dummies!" + icon_state = "book7" + starting_author = "University of Bluespace" + starting_title = "Teleportation Science - Bluespace for dummies!" + page_link = "Guide_to_telescience" + +/obj/item/book/manual/wiki/engineering_hacking + name = "Hacking" + icon_state ="bookHacking" + starting_author = "Engineering Encyclopedia" + starting_title = "Hacking" + page_link = "Hacking" + +/obj/item/book/manual/wiki/detective + name = "The Film Noir: Proper Procedures for Investigations" + icon_state ="bookDetective" + starting_author = "Nanotrasen" + starting_title = "The Film Noir: Proper Procedures for Investigations" + page_link = "Detective" + +/obj/item/book/manual/wiki/barman_recipes + name = "Barman Recipes: Mixing Drinks and Changing Lives" + icon_state = "barbook" + starting_author = "Sir John Rose" + starting_title = "Barman Recipes: Mixing Drinks and Changing Lives" + page_link = "Guide_to_drinks" + +/obj/item/book/manual/wiki/robotics_cyborgs + name = "Robotics for Dummies" + icon_state = "borgbook" + starting_author = "XISC" + starting_title = "Robotics for Dummies" + page_link = "Guide_to_robotics" + +/obj/item/book/manual/wiki/research_and_development + name = "Research and Development 101" + icon_state = "rdbook" + starting_author = "Dr. L. Ight" + starting_title = "Research and Development 101" + page_link = "Guide_to_Research_and_Development" + +/obj/item/book/manual/wiki/experimentor + name = "Mentoring your Experiments" + icon_state = "rdbook" + starting_author = "Dr. H.P. Kritz" + starting_title = "Mentoring your Experiments" + page_link = "Experimentor" + +/obj/item/book/manual/wiki/cooking_to_serve_man + name = "To Serve Man" + desc = "It's a cookbook!" + icon_state ="cooked_book" + starting_author = "the Kanamitan Empire" + starting_title = "To Serve Man" + page_link = "Guide_to_food" + +/obj/item/book/manual/wiki/tcomms + name = "Subspace Telecommunications And You" + icon_state = "book3" + starting_author = "Engineering Encyclopedia" + starting_title = "Subspace Telecommunications And You" + page_link = "Guide_to_Telecommunications" + +/obj/item/book/manual/wiki/atmospherics + name = "Lexica Atmosia" + icon_state = "book5" + starting_author = "the City-state of Atmosia" + starting_title = "Lexica Atmosia" + page_link = "Guide_to_Atmospherics" + +/obj/item/book/manual/wiki/medicine + name = "Medical Space Compendium, Volume 638" + icon_state = "book8" + starting_author = "Medical Journal" + starting_title = "Medical Space Compendium, Volume 638" + page_link = "Guide_to_medicine" + +/obj/item/book/manual/wiki/surgery + name = "Brain Surgery for Dummies" + icon_state = "book4" + starting_author = "Dr. F. Fran" + starting_title = "Brain Surgery for Dummies" + page_link = "Surgery" + +/obj/item/book/manual/wiki/grenades + name = "DIY Chemical Grenades" + icon_state = "book2" + starting_author = "W. Powell" + starting_title = "DIY Chemical Grenades" + page_link = "Grenade" + +/obj/item/book/manual/wiki/ordnance + name = "Ordnance for Dummies or: How I Learned to Stop Worrying and Love the Maxcap" + icon_state = "book6" + starting_author = "Cuban Pete" + starting_title = "Ordnance for Dummies or: How I Learned to Stop Worrying and Love the Maxcap" + page_link = "Guide_to_toxins" + +/obj/item/book/manual/wiki/ordnance/suicide_act(mob/living/user) + var/mob/living/carbon/human/H = user + user.visible_message(span_suicide("[user] starts dancing to the Rhumba Beat! It looks like [user.p_theyre()] trying to commit suicide!")) + playsound(loc, 'sound/effects/spray.ogg', 10, TRUE, -3) + if (!QDELETED(H)) + H.emote("spin") + sleep(2 SECONDS) + for(var/obj/item/W in H) + H.dropItemToGround(W) + if(prob(50)) + step(W, pick(GLOB.alldirs)) + ADD_TRAIT(H, TRAIT_DISFIGURED, TRAIT_GENERIC) + for(var/obj/item/bodypart/part as anything in H.bodyparts) + part.adjustBleedStacks(5) + H.gib_animation() + sleep(0.3 SECONDS) + H.adjustBruteLoss(1000) //to make the body super-bloody + // if we use gib() then the body gets deleted + H.spawn_gibs() + H.spill_organs(DROP_ALL_REMAINS) + H.spread_bodyparts(DROP_BRAIN) + return BRUTELOSS + +/obj/item/book/manual/wiki/plumbing + name = "Chemical Factories Without Narcotics" + icon_state ="plumbingbook" + starting_author = "Nanotrasen" + starting_title = "Chemical Factories Without Narcotics" + page_link = "Guide_to_plumbing" + +/obj/item/book/manual/wiki/cytology + name = "Unethically Grown Organics" + icon_state ="cytologybook" + starting_author = "Kryson" + starting_title = "Unethically Grown Organics" + page_link = "Guide_to_cytology" + +/obj/item/book/manual/wiki/tgc + name = "Tactical Game Cards - Player's Handbook" + icon_state = "tgcbook" + starting_author = "Nanotrasen Edu-tainment Division" + starting_title = "Tactical Game Cards - Player's Handbook" + page_link = "Tactical_Game_Cards" + +#undef BOOK_WINDOW_BROWSE_SIZE +#undef WIKI_PAGE_IFRAME diff --git a/code/game/objects/items/wizard_weapons.dm b/code/game/objects/items/wizard_weapons.dm new file mode 100644 index 00000000000000..533ae118dc2a09 --- /dev/null +++ b/code/game/objects/items/wizard_weapons.dm @@ -0,0 +1,131 @@ +/obj/item/singularityhammer + name = "singularity hammer" + desc = "The pinnacle of close combat technology, the hammer harnesses the power of a miniaturized singularity to deal crushing blows." + icon = 'icons/obj/weapons/hammer.dmi' + icon_state = "singularity_hammer0" + base_icon_state = "singularity_hammer" + lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' + worn_icon_state = "singularity_hammer" + obj_flags = CONDUCTS_ELECTRICITY + slot_flags = ITEM_SLOT_BACK + force = 5 + throwforce = 15 + throw_range = 1 + w_class = WEIGHT_CLASS_HUGE + armor_type = /datum/armor/item_singularityhammer + resistance_flags = FIRE_PROOF | ACID_PROOF + force_string = "LORD SINGULOTH HIMSELF" + ///Is it able to pull shit right now? + var/charged = TRUE + +/datum/armor/item_singularityhammer + melee = 50 + bullet = 50 + laser = 50 + bomb = 50 + fire = 100 + acid = 100 + +/obj/item/singularityhammer/Initialize(mapload) + . = ..() + AddElement(/datum/element/kneejerk) + AddComponent(/datum/component/two_handed, \ + force_multiplier = 4, \ + icon_wielded = "[base_icon_state]1", \ + ) + +/obj/item/singularityhammer/update_icon_state() + icon_state = "[base_icon_state]0" + return ..() + +/obj/item/singularityhammer/proc/recharge() + charged = TRUE + +/obj/item/singularityhammer/proc/vortex(turf/pull, mob/wielder) + for(var/atom/X in orange(5,pull)) + if(ismovable(X)) + var/atom/movable/A = X + if(A == wielder) + continue + if(isliving(A)) + var/mob/living/vortexed_mob = A + if(vortexed_mob.mob_negates_gravity()) + continue + else + vortexed_mob.Paralyze(2 SECONDS) + if(!A.anchored && !isobserver(A)) + step_towards(A,pull) + step_towards(A,pull) + step_towards(A,pull) + +/obj/item/singularityhammer/afterattack(atom/A as mob|obj|turf|area, mob/living/user, proximity) + . = ..() + if(!proximity) + return + . |= AFTERATTACK_PROCESSED_ITEM + if(HAS_TRAIT(src, TRAIT_WIELDED)) + if(charged) + charged = FALSE + if(isliving(A)) + var/mob/living/Z = A + Z.take_bodypart_damage(20,0) + playsound(user, 'sound/weapons/marauder.ogg', 50, TRUE) + var/turf/target = get_turf(A) + vortex(target,user) + addtimer(CALLBACK(src, PROC_REF(recharge)), 100) + return . + +/obj/item/mjollnir + name = "Mjollnir" + desc = "A weapon worthy of a god, able to strike with the force of a lightning bolt. It crackles with barely contained energy." + icon = 'icons/obj/weapons/hammer.dmi' + icon_state = "mjollnir0" + base_icon_state = "mjollnir" + worn_icon_state = "mjollnir" + lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' + obj_flags = CONDUCTS_ELECTRICITY + slot_flags = ITEM_SLOT_BACK + force = 5 + throwforce = 30 + throw_range = 7 + w_class = WEIGHT_CLASS_HUGE + +/obj/item/mjollnir/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, \ + force_multiplier = 5, \ + icon_wielded = "[base_icon_state]1", \ + attacksound = SFX_SPARKS, \ + ) + +/obj/item/mjollnir/update_icon_state() + icon_state = "[base_icon_state]0" + return ..() + +/obj/item/mjollnir/proc/shock(mob/living/target) + target.Stun(1.5 SECONDS) + target.Knockdown(10 SECONDS) + var/datum/effect_system/lightning_spread/s = new /datum/effect_system/lightning_spread + s.set_up(5, 1, target.loc) + s.start() + target.visible_message(span_danger("[target.name] is shocked by [src]!"), \ + span_userdanger("You feel a powerful shock course through your body sending you flying!"), \ + span_hear("You hear a heavy electrical crack!")) + var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src))) + target.throw_at(throw_target, 200, 4) + +/obj/item/mjollnir/attack(mob/living/target_mob, mob/user) + ..() + if(QDELETED(target_mob)) + return + if(HAS_TRAIT(user, TRAIT_PACIFISM)) + return + if(HAS_TRAIT(src, TRAIT_WIELDED)) + shock(target_mob) + +/obj/item/mjollnir/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + . = ..() + if(!QDELETED(hit_atom) && isliving(hit_atom)) + shock(hit_atom) diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 2a6db83d9d4682..c556f6d28d6300 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)) @@ -118,7 +112,7 @@ . = ..() if((resistance_flags & UNACIDABLE) || (acid_volume <= 0) || (acidpwr <= 0)) return FALSE - if(QDELETED(src)) //skyrat edit: fix createanddestroy + if(QDELETED(src)) //NOVA EDIT: fix createanddestroy return FALSE AddComponent(/datum/component/acid, acidpwr, acid_volume, custom_acid_overlay || GLOB.acid_overlay) return TRUE diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 1c34e75c3d1fd8..91f1ca925abf86 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -27,8 +27,6 @@ var/current_skin //Has the item been reskinned? var/list/unique_reskin //List of options to reskin. - ///If set to true, we can reskin this item as much as we want. - var/infinite_reskin = FALSE // Access levels, used in modules\jobs\access.dm /// List of accesses needed to use this object: The user must possess all accesses in this list in order to use the object. @@ -43,8 +41,6 @@ /// Particles this obj uses when burning, if any var/burning_particles - var/renamedByPlayer = FALSE //set when a player uses a pen on a renamable object - var/drag_slowdown // Amont of multiplicative slowdown applied if pulled. >1 makes you slower, <1 makes you faster. /// Map tag for something. Tired of it being used on snowflake items. Moved here for some semblance of a standard. @@ -195,6 +191,8 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag) return /mob/proc/set_machine(obj/O) + if(QDELETED(src) || QDELETED(O)) + return if(machine) unset_machine() machine = O @@ -227,50 +225,52 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag) VV_DROPDOWN_OPTION(VV_HK_OSAY, "Object Say") /obj/vv_do_topic(list/href_list) - if(!(. = ..())) + . = ..() + + if(!.) return + if(href_list[VV_HK_OSAY]) - if(check_rights(R_FUN, FALSE)) - usr.client.object_say(src) + if(!check_rights(R_FUN, FALSE)) + return + usr.client.object_say(src) if(href_list[VV_HK_MASS_DEL_TYPE]) - if(check_rights(R_DEBUG|R_SERVER)) - var/action_type = tgui_alert(usr, "Strict type ([type]) or type and all subtypes?",,list("Strict type","Type and subtypes","Cancel")) - if(action_type == "Cancel" || !action_type) - return - - if(tgui_alert(usr, "Are you really sure you want to delete all objects of type [type]?",,list("Yes","No")) != "Yes") - return - - if(tgui_alert(usr, "Second confirmation required. Delete?",,list("Yes","No")) != "Yes") - return - - var/O_type = type - switch(action_type) - if("Strict type") - var/i = 0 - for(var/obj/Obj in world) - if(Obj.type == O_type) - i++ - qdel(Obj) - CHECK_TICK - if(!i) - to_chat(usr, "No objects of this type exist") - return - log_admin("[key_name(usr)] deleted all objects of type [O_type] ([i] objects deleted) ") - message_admins(span_notice("[key_name(usr)] deleted all objects of type [O_type] ([i] objects deleted) ")) - if("Type and subtypes") - var/i = 0 - for(var/obj/Obj in world) - if(istype(Obj,O_type)) - i++ - qdel(Obj) - CHECK_TICK - if(!i) - to_chat(usr, "No objects of this type exist") - return - log_admin("[key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted) ") - message_admins(span_notice("[key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted) ")) + if(!check_rights(R_DEBUG|R_SERVER)) + return + var/action_type = tgui_alert(usr, "Strict type ([type]) or type and all subtypes?",,list("Strict type","Type and subtypes","Cancel")) + if(action_type == "Cancel" || !action_type) + return + if(tgui_alert(usr, "Are you really sure you want to delete all objects of type [type]?",,list("Yes","No")) != "Yes") + return + if(tgui_alert(usr, "Second confirmation required. Delete?",,list("Yes","No")) != "Yes") + return + var/O_type = type + switch(action_type) + if("Strict type") + var/i = 0 + for(var/obj/Obj in world) + if(Obj.type == O_type) + i++ + qdel(Obj) + CHECK_TICK + if(!i) + to_chat(usr, "No objects of this type exist") + return + log_admin("[key_name(usr)] deleted all objects of type [O_type] ([i] objects deleted) ") + message_admins(span_notice("[key_name(usr)] deleted all objects of type [O_type] ([i] objects deleted) ")) + if("Type and subtypes") + var/i = 0 + for(var/obj/Obj in world) + if(istype(Obj,O_type)) + i++ + qdel(Obj) + CHECK_TICK + if(!i) + to_chat(usr, "No objects of this type exist") + return + log_admin("[key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted) ") + message_admins(span_notice("[key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted) ")) /obj/examine(mob/user) . = ..() @@ -278,12 +278,12 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag) . += span_notice(desc_controls) if(obj_flags & UNIQUE_RENAME) . += span_notice("Use a pen on it to rename it or change its description.") - if(unique_reskin && (!current_skin || infinite_reskin)) + if(unique_reskin && (!current_skin || (obj_flags & INFINITE_RESKIN))) . += span_notice("Alt-click it to reskin it.") /obj/AltClick(mob/user) . = ..() - if(unique_reskin && (!current_skin || infinite_reskin) && user.can_perform_action(src, NEED_DEXTERITY)) + if(unique_reskin && (!current_skin || (obj_flags & INFINITE_RESKIN)) && user.can_perform_action(src, NEED_DEXTERITY)) reskin_obj(user) /** @@ -292,7 +292,7 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag) * Arguments: * * M The mob choosing a reskin option */ -/obj/proc/reskin_obj(mob/M) +/obj/proc/reskin_obj(mob/user) if(!LAZYLEN(unique_reskin)) return @@ -302,14 +302,15 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag) items += list("[reskin_option]" = item_image) sort_list(items) - var/pick = show_radial_menu(M, src, items, custom_check = CALLBACK(src, PROC_REF(check_reskin_menu), M), radius = 38, require_near = TRUE) + var/pick = show_radial_menu(user, src, items, custom_check = CALLBACK(src, PROC_REF(check_reskin_menu), user), radius = 38, require_near = TRUE) if(!pick) return if(!unique_reskin[pick]) return current_skin = pick icon_state = unique_reskin[pick] - to_chat(M, "[src] is now skinned as '[pick].'") + to_chat(user, "[src] is now skinned as '[pick].'") + SEND_SIGNAL(src, COMSIG_OBJ_RESKIN, user, pick) /** * Checks if we are allowed to interact with a radial menu for reskins @@ -320,7 +321,7 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag) /obj/proc/check_reskin_menu(mob/user) if(QDELETED(src)) return FALSE - if(!infinite_reskin && current_skin) + if(!(obj_flags & INFINITE_RESKIN) && current_skin) return FALSE if(!istype(user)) return FALSE @@ -379,7 +380,7 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag) /// 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) + if((obj_flags & NO_DECONSTRUCTION) || wrench.tool_behaviour != TOOL_WRENCH) return CANT_UNFASTEN var/turf/ground = get_turf(src) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index cdc2b2bd5ec15a..1943f0aa398539 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -66,3 +66,6 @@ take_damage(power * 2.5e-4, BURN, "energy") power -= power * 5e-4 //walls take a lot out of ya . = ..() + +/obj/structure/animate_atom_living(mob/living/owner) + new /mob/living/simple_animal/hostile/mimic/copy(drop_location(), src, owner) diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index b2a7d912cb2b37..eef6059d98403a 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -126,8 +126,8 @@ return FALSE return TRUE -/obj/structure/ai_core/latejoin_inactive/attackby(obj/item/P, mob/user, params) - if(P.tool_behaviour == TOOL_MULTITOOL) +/obj/structure/ai_core/latejoin_inactive/attackby(obj/item/tool, mob/user, params) + if(tool.tool_behaviour == TOOL_MULTITOOL) active = !active to_chat(user, span_notice("You [active? "activate" : "deactivate"] \the [src]'s transmitters.")) return @@ -136,38 +136,38 @@ /obj/structure/ai_core/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/ai_core/screwdriver_act(mob/living/user, obj/item/tool) . = ..() if(state == AI_READY_CORE) if(!core_mmi) balloon_alert(user, "no brain installed!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS else if(!core_mmi.brainmob?.mind || suicide_check()) balloon_alert(user, "brain is inactive!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS else balloon_alert(user, "connecting neural network...") if(!tool.use_tool(src, user, 10 SECONDS)) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(!ai_structure_to_mob()) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS balloon_alert(user, "connected neural network") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS -/obj/structure/ai_core/attackby(obj/item/P, mob/living/user, params) +/obj/structure/ai_core/attackby(obj/item/tool, mob/living/user, params) if(!anchored) - if(P.tool_behaviour == TOOL_WELDER) + if(tool.tool_behaviour == TOOL_WELDER) if(state != EMPTY_CORE) balloon_alert(user, "core must be empty to deconstruct it!") return - if(!P.tool_start_check(user, amount=1)) + if(!tool.tool_start_check(user, amount=1)) return balloon_alert(user, "deconstructing frame...") - if(P.use_tool(src, user, 20, volume=50) && state == EMPTY_CORE) + if(tool.use_tool(src, user, 20, volume=50) && state == EMPTY_CORE) balloon_alert(user, "deconstructed frame") deconstruct(TRUE) return @@ -180,37 +180,37 @@ else switch(state) if(EMPTY_CORE) - if(istype(P, /obj/item/circuitboard/aicore)) - if(!user.transferItemToLoc(P, src)) + if(istype(tool, /obj/item/circuitboard/aicore)) + if(!user.transferItemToLoc(tool, src)) return playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE) balloon_alert(user, "circuit board inserted") update_appearance() state = CIRCUIT_CORE - circuit = P + circuit = tool return if(CIRCUIT_CORE) - if(P.tool_behaviour == TOOL_SCREWDRIVER) - P.play_tool_sound(src) + if(tool.tool_behaviour == TOOL_SCREWDRIVER) + tool.play_tool_sound(src) balloon_alert(user, "board screwed into place") state = SCREWED_CORE update_appearance() return - if(P.tool_behaviour == TOOL_CROWBAR) - P.play_tool_sound(src) + if(tool.tool_behaviour == TOOL_CROWBAR) + tool.play_tool_sound(src) balloon_alert(user, "circuit board removed") state = EMPTY_CORE circuit.forceMove(loc) return if(SCREWED_CORE) - if(P.tool_behaviour == TOOL_SCREWDRIVER && circuit) - P.play_tool_sound(src) + if(tool.tool_behaviour == TOOL_SCREWDRIVER && circuit) + tool.play_tool_sound(src) balloon_alert(user, "circuit board unfastened") state = CIRCUIT_CORE update_appearance() return - if(istype(P, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = P + if(istype(tool, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = tool if(C.get_amount() >= 5) playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE) balloon_alert(user, "adding cables to frame...") @@ -222,22 +222,22 @@ balloon_alert(user, "need five lengths of cable!") return if(CABLED_CORE) - if(P.tool_behaviour == TOOL_WIRECUTTER) + if(tool.tool_behaviour == TOOL_WIRECUTTER) if(core_mmi) balloon_alert(user, "remove the [AI_CORE_BRAIN(core_mmi)] first!") else - P.play_tool_sound(src) + tool.play_tool_sound(src) balloon_alert(user, "cables removed") state = SCREWED_CORE update_appearance() new /obj/item/stack/cable_coil(drop_location(), 5) return - if(istype(P, /obj/item/stack/sheet/rglass)) + if(istype(tool, /obj/item/stack/sheet/rglass)) if(!core_mmi) balloon_alert(user, "add a brain first!") return - var/obj/item/stack/sheet/rglass/G = P + var/obj/item/stack/sheet/rglass/G = tool if(G.get_amount() >= 2) playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE) balloon_alert(user, "adding glass panel...") @@ -249,7 +249,7 @@ balloon_alert(user, "need two sheets of reinforced glass!") return - if(istype(P, /obj/item/ai_module)) + if(istype(tool, /obj/item/ai_module)) if(!core_mmi) balloon_alert(user, "no brain installed!") return @@ -259,12 +259,12 @@ if(core_mmi.laws.id != DEFAULT_AI_LAWID) balloon_alert(user, "[AI_CORE_BRAIN(core_mmi)] already has set laws!") return - var/obj/item/ai_module/module = P + var/obj/item/ai_module/module = tool module.install(laws, user) return - if(istype(P, /obj/item/mmi) && !core_mmi) - var/obj/item/mmi/M = P + if(istype(tool, /obj/item/mmi) && !core_mmi) + var/obj/item/mmi/M = tool if(!M.brain_check(user)) var/install = tgui_alert(user, "This [AI_CORE_BRAIN(M)] is inactive, would you like to make an inactive AI?", "Installing AI [AI_CORE_BRAIN(M)]", list("Yes", "No")) if(install != "Yes") @@ -292,40 +292,42 @@ update_appearance() return - if(P.tool_behaviour == TOOL_CROWBAR && core_mmi) - P.play_tool_sound(src) + if(tool.tool_behaviour == TOOL_CROWBAR && core_mmi) + tool.play_tool_sound(src) balloon_alert(user, "removed [AI_CORE_BRAIN(core_mmi)]") core_mmi.forceMove(loc) return if(GLASS_CORE) - if(P.tool_behaviour == TOOL_CROWBAR) - P.play_tool_sound(src) + if(tool.tool_behaviour == TOOL_CROWBAR) + tool.play_tool_sound(src) balloon_alert(user, "removed glass panel") state = CABLED_CORE update_appearance() new /obj/item/stack/sheet/rglass(loc, 2) return - if(P.tool_behaviour == TOOL_SCREWDRIVER) + if(tool.tool_behaviour == TOOL_SCREWDRIVER) if(suicide_check()) to_chat(user, span_warning("The brain installed is completely useless.")) return - P.play_tool_sound(src) - balloon_alert(user, "connected monitor[core_mmi?.brainmob?.mind ? " and neural network" : ""]") + tool.play_tool_sound(src) + + var/atom/alert_source = src if(core_mmi.brainmob?.mind) - ai_structure_to_mob() + alert_source = ai_structure_to_mob() || alert_source else state = AI_READY_CORE update_appearance() + alert_source.balloon_alert(user, "connected monitor[core_mmi?.brainmob?.mind ? " and neural network" : ""]") return if(AI_READY_CORE) - if(istype(P, /obj/item/aicard)) + if(istype(tool, /obj/item/aicard)) return //handled by /obj/structure/ai_core/transfer_ai() - if(P.tool_behaviour == TOOL_WIRECUTTER) - P.play_tool_sound(src) + if(tool.tool_behaviour == TOOL_WIRECUTTER) + tool.play_tool_sound(src) balloon_alert(user, "disconnected monitor") state = GLASS_CORE update_appearance() @@ -354,11 +356,10 @@ if(core_mmi.force_replace_ai_name) ai_mob.fully_replace_character_name(ai_mob.name, core_mmi.replacement_ai_name()) - if(core_mmi.braintype == "Android") - ai_mob.posibrain_inside = TRUE + ai_mob.posibrain_inside = core_mmi.braintype == "Android" deadchat_broadcast(" has been brought online at [get_area_name(ai_mob, format_text = TRUE)].", span_name("[ai_mob]"), follow_target = ai_mob, message_type = DEADCHAT_ANNOUNCEMENT) qdel(src) - return TRUE + return ai_mob /obj/structure/ai_core/update_icon_state() switch(state) @@ -431,10 +432,7 @@ That prevents a few funky behaviors. to_chat(user, "[span_boldnotice("Transfer successful")]: [AI.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed.") card.AI = null AI.battery = circuit.battery - if(core_mmi && core_mmi.braintype == "Android") - AI.posibrain_inside = TRUE - else - AI.posibrain_inside = FALSE + AI.posibrain_inside = isnull(core_mmi) || core_mmi.braintype == "Android" qdel(src) else //If for some reason you use an empty card on an empty AI terminal. to_chat(user, span_alert("There is no AI loaded on this terminal.")) diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm index e1138d4696ff06..886d0b9bcba636 100644 --- a/code/game/objects/structures/aliens.dm +++ b/code/game/objects/structures/aliens.dm @@ -42,7 +42,7 @@ icon_state = "gelmound" /obj/structure/alien/gelpod/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/effect/mob_spawn/corpse/human/damaged(get_turf(src)) qdel(src) @@ -338,7 +338,6 @@ integrity_failure = 0.05 var/status = GROWING //can be GROWING, GROWN or BURST; all mutually exclusive layer = MOB_LAYER - plane = GAME_PLANE_FOV_HIDDEN /// Ref to the hugger within. var/obj/item/clothing/mask/facehugger/child ///Proximity monitor associated with this atom, needed for proximity checks. @@ -447,7 +446,7 @@ /obj/structure/alien/egg/atom_break(damage_flag) . = ..() - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(status != BURST) Burst(kill=TRUE) diff --git a/code/game/objects/structures/beds_chairs/alien_nest.dm b/code/game/objects/structures/beds_chairs/alien_nest.dm index 87d8ffb17101bb..32e1226c93e264 100644 --- a/code/game/objects/structures/beds_chairs/alien_nest.dm +++ b/code/game/objects/structures/beds_chairs/alien_nest.dm @@ -12,7 +12,8 @@ smoothing_groups = SMOOTH_GROUP_ALIEN_NEST canSmoothWith = SMOOTH_GROUP_ALIEN_NEST build_stack_type = null - flags_1 = NODECONSTRUCT_1 + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + elevation = 0 var/static/mutable_appearance/nest_overlay = mutable_appearance('icons/mob/nonhuman-player/alien.dmi', "nestoverlay", LYING_MOB_LAYER) /obj/structure/bed/nest/user_unbuckle_mob(mob/living/buckled_mob, mob/living/user) diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index 4b82aeb5e8edaf..0eeb8ee15b22f8 100644 --- a/code/game/objects/structures/beds_chairs/bed.dm +++ b/code/game/objects/structures/beds_chairs/bed.dm @@ -22,20 +22,24 @@ var/build_stack_type = /obj/item/stack/sheet/iron /// How many mats to drop when deconstructed var/build_stack_amount = 2 + /// 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) register_context() /obj/structure/bed/examine(mob/user) . = ..() - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) . += span_notice("It's held together by a couple of bolts.") /obj/structure/bed/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) if(held_item) - if(held_item.tool_behaviour != TOOL_WRENCH || flags_1 & NODECONSTRUCT_1) + if(held_item.tool_behaviour != TOOL_WRENCH || obj_flags & NO_DECONSTRUCTION) return context[SCREENTIP_CONTEXT_RMB] = "Dismantle" @@ -46,7 +50,7 @@ return CONTEXTUAL_SCREENTIP_SET /obj/structure/bed/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(build_stack_type) new build_stack_type(loc, build_stack_amount) ..() @@ -55,7 +59,7 @@ return attack_hand(user, modifiers) /obj/structure/bed/wrench_act_secondary(mob/living/user, obj/item/weapon) - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return TRUE ..() @@ -74,6 +78,7 @@ resistance_flags = NONE build_stack_type = /obj/item/stack/sheet/mineral/titanium build_stack_amount = 1 + elevation = 0 /// The item it spawns when it's folded up. var/foldable_type @@ -117,11 +122,13 @@ balloon_alert(user, "brakes [anchored ? "applied" : "released"]") update_appearance() -/obj/structure/bed/medical/post_buckle_mob(mob/living/patient) +/obj/structure/bed/medical/post_buckle_mob(mob/living/buckled) + . = ..() set_density(TRUE) update_appearance() -/obj/structure/bed/medical/post_unbuckle_mob(mob/living/patient) +/obj/structure/bed/medical/post_unbuckle_mob(mob/living/buckled) + . = ..() set_density(FALSE) update_appearance() @@ -135,7 +142,6 @@ patient.pixel_y = patient.base_pixel_y else buckled_mobs[1].pixel_y = buckled_mobs[1].base_pixel_y - else icon_state = "[base_icon_state]_down" @@ -257,6 +263,7 @@ anchored = FALSE build_stack_type = /obj/item/stack/sheet/mineral/wood build_stack_amount = 10 + elevation = 0 var/owned = FALSE /obj/structure/bed/dogbed/ian @@ -306,6 +313,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) . = ..() @@ -322,11 +330,13 @@ 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 + target.pixel_y += 6 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 -= 6 goldilocks = null diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index b9c80fd7f6cbe9..9fd8da19391d88 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -38,7 +38,7 @@ /obj/structure/chair/deconstruct(disassembled) // If we have materials, and don't have the NOCONSTRUCT flag - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(buildstacktype) new buildstacktype(loc,buildstackamount) else @@ -56,7 +56,7 @@ qdel(src) /obj/structure/chair/attackby(obj/item/W, mob/user, params) - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return . = ..() if(istype(W, /obj/item/assembly/shock_kit) && !HAS_TRAIT(src, TRAIT_ELECTRIFIED_BUCKLE)) electrify_self(W, user) @@ -85,7 +85,7 @@ /obj/structure/chair/wrench_act_secondary(mob/living/user, obj/item/weapon) - if(flags_1&NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return TRUE ..() weapon.play_tool_sound(src) @@ -109,20 +109,18 @@ /obj/structure/chair/proc/handle_layer() if(has_buckled_mobs() && dir == NORTH) layer = ABOVE_MOB_LAYER - SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER_FOV_HIDDEN) else layer = OBJ_LAYER - SET_PLANE_IMPLICIT(src, GAME_PLANE) /obj/structure/chair/post_buckle_mob(mob/living/M) . = ..() handle_layer() - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(HAS_TRAIT(M, TRAIT_OVERSIZED)) visible_message(span_warning("[src] buckles under the weight of [M] causing it to break!")) - playsound(src, 'modular_skyrat/modules/oversized/sound/chair_break.ogg', 70, TRUE) + playsound(src, 'modular_nova/modules/oversized/sound/chair_break.ogg', 70, TRUE) deconstruct() - //SKYRAT EDIT END + //NOVA EDIT END /obj/structure/chair/post_unbuckle_mob() . = ..() handle_layer() @@ -184,7 +182,6 @@ /obj/structure/chair/comfy/proc/gen_armrest() armrest = GetArmrest() armrest.layer = ABOVE_MOB_LAYER - SET_PLANE_EXPLICIT(armrest, GAME_PLANE_UPPER, src) update_armrest() /obj/structure/chair/comfy/proc/GetArmrest() @@ -282,7 +279,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool, 0) /obj/structure/chair/MouseDrop(over_object, src_location, over_location) . = ..() if(over_object == usr && Adjacent(usr)) - if(!item_chair || has_buckled_mobs() || src.flags_1 & NODECONSTRUCT_1) + if(!item_chair || has_buckled_mobs() || src.obj_flags & NO_DECONSTRUCTION) return if(!usr.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) return @@ -380,11 +377,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) new /obj/item/stack/rods(get_turf(loc), 2) qdel(src) - - - /obj/item/chair/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) - if(attack_type == UNARMED_ATTACK && prob(hit_reaction_chance)) + if(attack_type == UNARMED_ATTACK && prob(hit_reaction_chance) || attack_type == LEAP_ATTACK && prob(hit_reaction_chance)) owner.visible_message(span_danger("[owner] fends off [attack_text] with [src]!")) return TRUE return FALSE @@ -498,7 +492,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) icon_state = null buildstacktype = null item_chair = null - flags_1 = NODECONSTRUCT_1 + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION alpha = 0 /obj/structure/chair/mime/post_buckle_mob(mob/living/M) diff --git a/code/game/objects/structures/beds_chairs/pew.dm b/code/game/objects/structures/beds_chairs/pew.dm index 21bf0fbf09c0e3..6388247e8c426b 100644 --- a/code/game/objects/structures/beds_chairs/pew.dm +++ b/code/game/objects/structures/beds_chairs/pew.dm @@ -33,10 +33,8 @@ /obj/structure/chair/pew/left/proc/gen_armrest() leftpewarmrest = GetLeftPewArmrest() leftpewarmrest.layer = ABOVE_MOB_LAYER - SET_PLANE_EXPLICIT(leftpewarmrest, GAME_PLANE_UPPER, src) update_leftpewarmrest() - /obj/structure/chair/pew/left/proc/GetLeftPewArmrest() return mutable_appearance('icons/obj/chairs_wide.dmi', "pewend_left_armrest") @@ -76,7 +74,6 @@ /obj/structure/chair/pew/right/proc/gen_armrest() rightpewarmrest = GetRightPewArmrest() rightpewarmrest.layer = ABOVE_MOB_LAYER - SET_PLANE_EXPLICIT(rightpewarmrest, GAME_PLANE_UPPER, src) update_rightpewarmrest() /obj/structure/chair/pew/right/proc/GetRightPewArmrest() diff --git a/code/game/objects/structures/beds_chairs/sofa.dm b/code/game/objects/structures/beds_chairs/sofa.dm index 076f95f4dc939c..bf9a221929b670 100644 --- a/code/game/objects/structures/beds_chairs/sofa.dm +++ b/code/game/objects/structures/beds_chairs/sofa.dm @@ -36,7 +36,6 @@ path/corner/color_name {\ /obj/structure/chair/sofa/proc/gen_armrest() armrest = mutable_appearance(initial(icon), "[icon_state]_armrest", ABOVE_MOB_LAYER) - SET_PLANE_EXPLICIT(armrest, GAME_PLANE_UPPER, src) update_armrest() /obj/structure/chair/sofa/electrify_self(obj/item/assembly/shock_kit/input_shock_kit, mob/user, list/overlays_from_child_procs) diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 493268620a9c39..7d48298b30a9c7 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -74,7 +74,7 @@ LINEN BINS return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /obj/item/bedsheet/attack_self(mob/living/user) - if(!user.CanReach(src)) //No telekenetic grabbing. + if(!user.CanReach(src)) //No telekinetic grabbing. return if(user.body_position != LYING_DOWN) return @@ -86,7 +86,6 @@ LINEN BINS /obj/item/bedsheet/proc/coverup(mob/living/sleeper) layer = ABOVE_MOB_LAYER - SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER) pixel_x = 0 pixel_y = 0 balloon_alert(sleeper, "covered") @@ -207,7 +206,7 @@ LINEN BINS /obj/item/bedsheet/captain name = "captain's bedsheet" - desc = "It has a Nanotrasen symbol on it, and was woven with a revolutionary new kind of thread guaranteed to have 0.01% permeability for most non-chemical substances, popular among most modern captains." + desc = "It has a Symphionia symbol on it, and was woven with a revolutionary new kind of thread guaranteed to have 0.01% permeability for most non-chemical substances, popular among most modern captains." icon_state = "sheetcaptain" inhand_icon_state = "sheetcaptain" dream_messages = list("authority", "a golden ID", "sunglasses", "a green disc", "an antique gun", "the captain") @@ -314,7 +313,7 @@ LINEN BINS /obj/item/bedsheet/rev name = "revolutionary's bedsheet" - desc = "A bedsheet stolen from a Central Command official's bedroom, used a symbol of triumph against Nanotrasen's tyranny. The golden emblem on the front has been scribbled out." + desc = "A bedsheet stolen from a Conglomeration of Colonists official's bedroom, used a symbol of triumph against Symphionia's tyranny. The golden emblem on the front has been scribbled out." icon_state = "sheetrev" inhand_icon_state = "sheetrev" dream_messages = list( @@ -328,8 +327,8 @@ LINEN BINS ) /obj/item/bedsheet/nanotrasen - name = "\improper Nanotrasen bedsheet" - desc = "It has the Nanotrasen logo on it and has an aura of duty." + name = "\improper Symphionia bedsheet" + desc = "It has the Symphionia logo on it and has an aura of duty." icon_state = "sheetNT" inhand_icon_state = "sheetNT" dream_messages = list("authority", "an ending") @@ -646,21 +645,21 @@ LINEN BINS ..() /obj/structure/bedsheetbin/screwdriver_act(mob/living/user, obj/item/tool) - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return FALSE if(amount) to_chat(user, span_warning("The [src] must be empty first!")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(tool.use_tool(src, user, 0.5 SECONDS, volume=50)) to_chat(user, span_notice("You disassemble the [src].")) new /obj/item/stack/rods(loc, 2) qdel(src) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/bedsheetbin/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool, time = 0.5 SECONDS) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/bedsheetbin/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/bedsheet)) diff --git a/code/game/objects/structures/billboard.dm b/code/game/objects/structures/billboard.dm index c6786dd84e4a1a..5e01375a8d9bdd 100644 --- a/code/game/objects/structures/billboard.dm +++ b/code/game/objects/structures/billboard.dm @@ -26,13 +26,13 @@ icon_state = "billboard_space_cola" /obj/structure/billboard/nanotrasen - name = "\improper Nanotrasen billboard" - desc = "A billboard advertising Nanotrasen: A Better Tomorrow, Today." + name = "\improper Symphionia billboard" + desc = "A billboard advertising Symphionia: A Better Tomorrow, Today." icon_state = "billboard_nanotrasen" /obj/structure/billboard/nanotrasen/defaced - name = "defaced Nanotrasen billboard" - desc = "A billboard advertising Nanotrasen. Someone's sprayed a message onto it: Fuck Corpo Pigs." + name = "defaced Symphionia billboard" + desc = "A billboard advertising Symphionia. Someone's sprayed a message onto it: Fuck Corpo Pigs." icon_state = "billboard_fuck_corps" /obj/structure/billboard/azik diff --git a/code/game/objects/structures/broken_flooring.dm b/code/game/objects/structures/broken_flooring.dm index b2be42ae40ddf7..3d1fa986505ddd 100644 --- a/code/game/objects/structures/broken_flooring.dm +++ b/code/game/objects/structures/broken_flooring.dm @@ -32,7 +32,7 @@ balloon_alert(user, "tile reclaimed") new /obj/item/stack/tile/iron(get_turf(src)) qdel(src) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/broken_flooring/singular icon_state = "singular" diff --git a/code/game/objects/structures/cannons/cannon.dm b/code/game/objects/structures/cannons/cannon.dm index 12fa04dbe0b942..3408ade8283d0c 100644 --- a/code/game/objects/structures/cannons/cannon.dm +++ b/code/game/objects/structures/cannons/cannon.dm @@ -51,7 +51,7 @@ if(!anchorable_cannon) return FALSE default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/cannon/attackby(obj/item/used_item, mob/user, params) if(charge_ignited) @@ -101,11 +101,11 @@ to_chat(user, span_warning("[powder_keg] doesn't have at least 15u of gunpowder to fill [src]!")) return if(has_enough_gunpowder) - powder_keg.reagents.trans_id_to(src, /datum/reagent/gunpowder, amount = charge_size) + powder_keg.reagents.trans_to(src, charge_size, target_id = /datum/reagent/gunpowder) balloon_alert(user, "[src] loaded with gunpowder") return if(has_enough_alt_fuel) - powder_keg.reagents.trans_id_to(src, /datum/reagent/fuel, amount = charge_size) + powder_keg.reagents.trans_to(src, charge_size, target_id = /datum/reagent/fuel) balloon_alert(user, "[src] loaded with welding fuel") return ..() diff --git a/code/game/objects/structures/cannons/cannonballs.dm b/code/game/objects/structures/cannons/cannonballs.dm index 718fd2b1ebb63f..08533bdcebdf68 100644 --- a/code/game/objects/structures/cannons/cannonballs.dm +++ b/code/game/objects/structures/cannons/cannonballs.dm @@ -7,7 +7,7 @@ singular_name = "cannonball" merge_type = /obj/item/stack/cannonball throwforce = 10 - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY custom_materials = list(/datum/material/alloy/plasteel=SHEET_MATERIAL_AMOUNT) resistance_flags = FIRE_PROOF throw_speed = 5 diff --git a/code/game/objects/structures/cat_house.dm b/code/game/objects/structures/cat_house.dm new file mode 100644 index 00000000000000..8baa9ce2416011 --- /dev/null +++ b/code/game/objects/structures/cat_house.dm @@ -0,0 +1,46 @@ +/obj/structure/cat_house + name = "cat house" + desc = "cozy home for cats" + icon = 'icons/mob/simple/pets.dmi' + icon_state = "cat_house" + density = TRUE + anchored = TRUE + ///cat residing in this house + var/mob/living/resident_cat + +/obj/structure/cat_house/Initialize(mapload) + . = ..() + RegisterSignal(src, COMSIG_ATOM_ATTACK_BASIC_MOB, PROC_REF(enter_home)) + +/obj/structure/cat_house/proc/enter_home(datum/source, mob/living/attacker) + SIGNAL_HANDLER + + if(isnull(resident_cat) && istype(attacker, /mob/living/basic/pet/cat)) + attacker.forceMove(src) + return + if(resident_cat == attacker) + attacker.forceMove(drop_location()) + +/obj/structure/cat_house/Entered(atom/movable/mover) + . = ..() + if(!istype(mover, /mob/living/basic/pet/cat)) + return + resident_cat = mover + update_appearance(UPDATE_OVERLAYS) + +/obj/structure/cat_house/Exited(atom/movable/mover) + . = ..() + if(mover != resident_cat) + return + resident_cat = null + update_appearance(UPDATE_OVERLAYS) + +/obj/structure/cat_house/update_overlays() + . = ..() + if(isnull(resident_cat)) + return + var/image/cat_icon = image(icon = resident_cat.icon, icon_state = resident_cat.icon_state, layer = LOW_ITEM_LAYER) + cat_icon.transform = cat_icon.transform.Scale(0.7, 0.7) + cat_icon.pixel_x = 0 + cat_icon.pixel_y = -9 + . += cat_icon diff --git a/code/game/objects/structures/containers.dm b/code/game/objects/structures/containers.dm index bf56f7850f82df..d712f31cf26356 100644 --- a/code/game/objects/structures/containers.dm +++ b/code/game/objects/structures/containers.dm @@ -50,13 +50,13 @@ icon_state = "nakamura" /obj/structure/shipping_container/nanotrasen - name = "\improper Nanotrasen shipping container" - desc = "A standard-measure shipping container for bulk transport of goods. This one prominently features Nanotrasen's logo, and so presumably could be carrying anything." + name = "\improper Symphionia shipping container" + desc = "A standard-measure shipping container for bulk transport of goods. This one prominently features Symphionia's logo, and so presumably could be carrying anything." icon_state = "nanotrasen" /obj/structure/shipping_container/nthi - name = "\improper Nanotrasen Heavy Industries shipping container" - desc = "A standard-measure shipping container for bulk transport of goods. This one is from NTHI: Nanotrasen's mining and refining subdivision." + name = "\improper Symphionia Heavy Industries shipping container" + desc = "A standard-measure shipping container for bulk transport of goods. This one is from NTHI: Symphionia's mining and refining subdivision." icon_state = "nthi" /obj/structure/shipping_container/vitezstvi diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index db1122465f3c7d..d00c2becbe2340 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -26,13 +26,13 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) /// Whether or not this door is being animated var/is_animating_door = FALSE /// Vertical squish of the door - var/door_anim_squish = 0.12 + var/door_anim_squish = 0.2 /// The maximum angle the door will be drawn at - var/door_anim_angle = 136 - /// X position of the closet door hinge + var/door_anim_angle = 140 + /// X position of the closet door hinge, relative to the center of the sprite var/door_hinge_x = -6.5 /// Amount of time it takes for the door animation to play - var/door_anim_time = 1.5 // set to 0 to make the door not animate at all + var/door_anim_time = 2 // set to 0 to make the door not animate at all /// Paint jobs for this closet, crates are a subtype of closet so they override these values var/list/paint_jobs = TRUE /// Controls whether a door overlay should be applied using the icon_door value as the icon state @@ -65,6 +65,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) var/delivery_icon = "deliverycloset" //which icon to use when packagewrapped. null to be unwrappable. var/anchorable = TRUE var/icon_welded = "welded" + var/icon_broken = "sparking" /// Whether a skittish person can dive inside this closet. Disable if opening the closet causes "bad things" to happen or that it leads to a logical inconsistency. var/divable = TRUE /// true whenever someone with the strong pull component (or magnet modsuit module) is dragging this, preventing opening @@ -73,6 +74,8 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) var/secure = FALSE var/can_install_electronics = TRUE + var/is_maploaded = FALSE + var/contents_initialized = FALSE /// is this closet locked by an exclusive id, i.e. your own personal locker var/datum/weakref/id_card = null @@ -83,6 +86,14 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) /// access types for card reader var/list/access_choices = TRUE + /// Whether this closet is sealed or not. If sealed, it'll have its own internal air + var/sealed = FALSE + + /// Internal gas for this closet. + var/datum/gas_mixture/internal_air + /// Volume of the internal air + var/air_volume = TANK_STANDARD_VOLUME * 3 + /datum/armor/structure_closet melee = 20 bullet = 10 @@ -128,8 +139,9 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) add_to_roundstart_list() // if closed, any item at the crate's loc is put in the contents - if (mapload && !opened) - . = INITIALIZE_HINT_LATELOAD + if (mapload) + is_maploaded = TRUE + . = INITIALIZE_HINT_LATELOAD populate_contents_immediate() var/static/list/loc_connections = list( @@ -147,9 +159,23 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) /obj/structure/closet/LateInitialize() . = ..() - if(!opened) + if(!opened && is_maploaded) take_contents() + if(sealed) + var/datum/gas_mixture/external_air = loc.return_air() + if(external_air && is_maploaded) + internal_air = external_air.copy() + else + internal_air = new() + START_PROCESSING(SSobj, src) + +/obj/structure/closet/return_air() + if(sealed) + return internal_air + else + return ..() + //USE THIS TO FILL IT, NOT INITIALIZE OR NEW /obj/structure/closet/proc/PopulateContents() SEND_SIGNAL(src, COMSIG_CLOSET_POPULATE_CONTENTS) @@ -161,10 +187,25 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) /obj/structure/closet/Destroy() id_card = null + QDEL_NULL(internal_air) QDEL_NULL(door_obj) GLOB.roundstart_station_closets -= src return ..() +/obj/structure/closet/process(seconds_per_tick) + if(!sealed) + return PROCESS_KILL + process_internal_air(seconds_per_tick) + +/obj/structure/closet/proc/process_internal_air(seconds_per_tick) + if(opened) + var/datum/gas_mixture/current_exposed_air = loc.return_air() + if(!current_exposed_air) + return + if(current_exposed_air.equalize(internal_air)) + var/turf/location = get_turf(src) + location.air_update_turf() + /obj/structure/closet/update_appearance(updates=ALL) . = ..() if(opened || broken || !secure) @@ -199,6 +240,11 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) if(welded) . += icon_welded + if(broken && secure) + . += mutable_appearance(icon, icon_broken, alpha = alpha) + . += emissive_appearance(icon, icon_broken, src, alpha = alpha) + return + if(broken || !secure) return //Overlay is similar enough for both that we can use the same mask for both @@ -287,7 +333,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) if(anchorable && !anchored) . += span_notice("It can be [EXAMINE_HINT("bolted")] to the ground.") if(anchored) - . += span_notice("Its [EXAMINE_HINT("bolted")] to the ground.") + . += span_notice("It's [anchorable ? EXAMINE_HINT("bolted") : "attached firmly"] to the ground.") if(length(paint_jobs)) . += span_notice("It can be [EXAMINE_HINT("painted")] another texture.") if(HAS_TRAIT(user, TRAIT_SKITTISH) && divable) @@ -319,6 +365,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) if(istype(held_item) && held_item.tool_behaviour == TOOL_WELDER) if(opened) context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" + screentip_change = TRUE else if(!welded && can_weld_shut) context[SCREENTIP_CONTEXT_LMB] = "Weld" @@ -327,7 +374,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) context[SCREENTIP_CONTEXT_LMB] = "Unweld" screentip_change = TRUE - if(istype(held_item) && held_item.tool_behaviour == TOOL_WRENCH) + if(istype(held_item) && held_item.tool_behaviour == TOOL_WRENCH && anchorable) context[SCREENTIP_CONTEXT_RMB] = anchored ? "Unanchor" : "Anchor" screentip_change = TRUE @@ -530,7 +577,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) return open(user) /obj/structure/closet/deconstruct(disassembled = TRUE) - if (!(flags_1 & NODECONSTRUCT_1)) + if (!(obj_flags & NO_DECONSTRUCTION)) if(ispath(material_drop) && material_drop_amount) new material_drop(loc, material_drop_amount) if (secure) @@ -547,7 +594,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) /obj/structure/closet/atom_break(damage_flag) . = ..() - if(!broken && !(flags_1 & NODECONSTRUCT_1)) + if(!broken && !(obj_flags & NO_DECONSTRUCTION)) bust_open() /obj/structure/closet/CheckParts(list/parts_list) @@ -804,13 +851,13 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) if(!opened) return user.visible_message(span_notice("[user] slices apart \the [src]."), - span_notice("You cut \the [src] apart weaponith \the [weapon]."), - span_hear("You hear weaponelding.")) + span_notice("You cut \the [src] apart with \the [weapon]."), + span_hear("You hear welding.")) deconstruct(TRUE) return else // for example cardboard box is cut with wirecutters user.visible_message(span_notice("[user] cut apart \the [src]."), \ - span_notice("You cut \the [src] apart weaponith \the [weapon].")) + span_notice("You cut \the [src] apart with \the [weapon].")) deconstruct(TRUE) return if (user.combat_mode) diff --git a/code/game/objects/structures/crates_lockers/closets/bodybag.dm b/code/game/objects/structures/crates_lockers/closets/bodybag.dm index ffd4434825ce6f..75e179538ad394 100644 --- a/code/game/objects/structures/crates_lockers/closets/bodybag.dm +++ b/code/game/objects/structures/crates_lockers/closets/bodybag.dm @@ -192,8 +192,7 @@ /obj/structure/closet/body_bag/environmental/Initialize(mapload) . = ..() - for(var/trait in weather_protection) - ADD_TRAIT(src, trait, ROUNDSTART_TRAIT) + add_traits(weather_protection, INNATE_TRAIT) refresh_air() /obj/structure/closet/body_bag/environmental/Destroy() @@ -345,7 +344,7 @@ /obj/structure/closet/body_bag/environmental/prisoner/syndicate name = "syndicate prisoner transport bag" - desc = "An alteration of Nanotrasen's environmental protection bag which has been used in several high-profile kidnappings. Designed to keep a victim unconscious, alive, and secured during transport." + desc = "An alteration of Symphionia's environmental protection bag which has been used in several high-profile kidnappings. Designed to keep a victim unconscious, alive, and secured during transport." icon = 'icons/obj/medical/bodybag.dmi' icon_state = "syndieenvirobag" contents_pressure_protection = 1 diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm index 063200b486b0b5..f0d1eaa0cc8195 100644 --- a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm +++ b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm @@ -50,16 +50,15 @@ if(!.) return FALSE - alerted = null + LAZYINITLIST(alerted) var/do_alert = (COOLDOWN_FINISHED(src, alert_cooldown) && (locate(/mob/living) in contents)) if(!do_alert) - return TRUE + + alerted.Cut() // just in case we runtimed and the list didn't get cleared in after_open // Cache the list before we open the box. - alerted = viewers(7, src) - // There are no mobs to alert? clear the list & prevent further action after opening the box - if(!(locate(/mob/living) in alerted)) - alerted = null + for(var/mob/living/alerted_mob in viewers(7, src)) + alerted += alerted_mob return TRUE @@ -77,6 +76,7 @@ alerted_mob.face_atom(src) alerted_mob.do_alert_animation() + alerted.Cut() playsound(loc, 'sound/machines/chime.ogg', 50, FALSE, -5) /// Does the MGS ! animation diff --git a/code/game/objects/structures/crates_lockers/closets/fitness.dm b/code/game/objects/structures/crates_lockers/closets/fitness.dm index b0dd6db262a55e..7b4f2d2ee2c37a 100644 --- a/code/game/objects/structures/crates_lockers/closets/fitness.dm +++ b/code/game/objects/structures/crates_lockers/closets/fitness.dm @@ -15,8 +15,9 @@ /obj/structure/closet/boxinggloves - name = "boxing gloves" + name = "boxing gloves closet" desc = "It's a storage unit for gloves for use in the boxing ring." + icon_door = "mixed" /obj/structure/closet/boxinggloves/PopulateContents() ..() @@ -41,6 +42,7 @@ name = "red laser tag equipment" desc = "It's a storage unit for laser tag equipment." icon_door = "red" + icon_state = "rack" /obj/structure/closet/lasertag/red/PopulateContents() ..() @@ -55,6 +57,7 @@ name = "blue laser tag equipment" desc = "It's a storage unit for laser tag equipment." icon_door = "blue" + icon_state = "rack" /obj/structure/closet/lasertag/blue/PopulateContents() ..() diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index 900974cdc17d65..795d8ccc452e13 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -3,7 +3,7 @@ /obj/structure/closet/gmcloset name = "formal closet" desc = "It's a storage unit for formal clothing." - icon_door = "black" + icon_door = "bar_wardrobe" /obj/structure/closet/gmcloset/PopulateContents() ..() @@ -24,9 +24,9 @@ generate_items_inside(items_inside,src) /obj/structure/closet/chefcloset - name = "\proper chef's closet" + name = "chef's closet" desc = "It's a storage unit for foodservice garments and mouse traps." - icon_door = "black" + icon_door = "chef_wardrobe" /obj/structure/closet/chefcloset/PopulateContents() ..() @@ -47,7 +47,7 @@ /obj/structure/closet/jcloset name = "custodial closet" desc = "It's a storage unit for janitorial clothes and gear." - icon_door = "mixed" + icon_door = "jani_wardrobe" /obj/structure/closet/jcloset/PopulateContents() ..() @@ -67,15 +67,15 @@ new /obj/item/watertank/janitor(src) new /obj/item/storage/belt/janitor(src) - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION new /obj/item/air_refresher(src) new /obj/item/air_refresher(src) - //SKYRAT EDIT END + //NOVA EDIT END /obj/structure/closet/lawcloset name = "legal closet" desc = "It's a storage unit for courtroom apparel and items." - icon_door = "blue" + icon_door = "law_wardrobe" /obj/structure/closet/lawcloset/PopulateContents() ..() @@ -102,7 +102,7 @@ /obj/structure/closet/wardrobe/chaplain_black name = "chapel wardrobe" desc = "It's a storage unit for Nanotrasen-approved religious attire." - icon_door = "black" + icon_door = "chap_wardrobe" /obj/structure/closet/wardrobe/chaplain_black/PopulateContents() new /obj/item/choice_beacon/holy(src) @@ -120,7 +120,7 @@ /obj/structure/closet/wardrobe/red name = "security wardrobe" - icon_door = "red" + icon_door = "sec_wardrobe" /obj/structure/closet/wardrobe/red/PopulateContents() var/static/items_inside = list( @@ -140,7 +140,7 @@ /obj/structure/closet/wardrobe/cargotech name = "cargo wardrobe" - icon_door = "orange" + icon_door = "cargo_wardrobe" /obj/structure/closet/wardrobe/cargotech/PopulateContents() var/static/items_inside = list( @@ -172,7 +172,7 @@ /obj/structure/closet/wardrobe/engineering_yellow name = "engineering wardrobe" - icon_door = "yellow" + icon_door = "engi_wardrobe" /obj/structure/closet/wardrobe/engineering_yellow/PopulateContents() var/static/items_inside = list( @@ -191,6 +191,7 @@ /obj/structure/closet/wardrobe/white/medical name = "medical doctor's wardrobe" + icon_door = "med_wardrobe" /obj/structure/closet/wardrobe/white/medical/PopulateContents() var/static/items_inside = list( @@ -213,7 +214,7 @@ /obj/structure/closet/wardrobe/robotics_black name = "robotics wardrobe" - icon_door = "black" + icon_door = "robo_wardrobe" /obj/structure/closet/wardrobe/robotics_black/PopulateContents() var/static/items_inside = list( @@ -233,7 +234,7 @@ /obj/structure/closet/wardrobe/chemistry_white name = "chemistry wardrobe" - icon_door = "white" + icon_door = "chem_wardrobe" /obj/structure/closet/wardrobe/chemistry_white/PopulateContents() var/static/items_inside = list( @@ -251,7 +252,7 @@ /obj/structure/closet/wardrobe/genetics_white name = "genetics wardrobe" - icon_door = "white" + icon_door = "gen_wardrobe" /obj/structure/closet/wardrobe/genetics_white/PopulateContents() var/static/items_inside = list( @@ -268,7 +269,7 @@ /obj/structure/closet/wardrobe/virology_white name = "virology wardrobe" - icon_door = "white" + icon_door = "viro_wardrobe" /obj/structure/closet/wardrobe/virology_white/PopulateContents() var/static/items_inside = list( @@ -285,7 +286,7 @@ /obj/structure/closet/wardrobe/science_white name = "science wardrobe" - icon_door = "white" + icon_door = "sci_wardrobe" /obj/structure/closet/wardrobe/science_white/PopulateContents() var/static/items_inside = list( @@ -298,13 +299,13 @@ /obj/item/clothing/suit/toggle/labcoat/science = 3, /obj/item/clothing/shoes/sneakers/white = 3, /obj/item/radio/headset/headset_sci = 2, - /obj/item/clothing/mask/gas/alt = 3) //SKYRAT EDIT CHANGE - ORIGINAL: /obj/item/clothing/mask/gas = 3) + /obj/item/clothing/mask/gas/alt = 3) //NOVA EDIT CHANGE - ORIGINAL: /obj/item/clothing/mask/gas = 3) generate_items_inside(items_inside,src) return /obj/structure/closet/wardrobe/botanist name = "botanist wardrobe" - icon_door = "green" + icon_door = "botany_wardrobe" /obj/structure/closet/wardrobe/botanist/PopulateContents() var/static/items_inside = list( @@ -321,7 +322,7 @@ /obj/structure/closet/wardrobe/curator name = "treasure hunting wardrobe" - icon_door = "black" + icon_door = "curator_wardrobe" /obj/structure/closet/wardrobe/curator/PopulateContents() new /obj/item/clothing/head/fedora/curator(src) diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm index 3de4ef99a0ea6a..f996aef956f454 100644 --- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm +++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm @@ -9,10 +9,21 @@ new /obj/item/clothing/head/bio_hood/general(src) new /obj/item/clothing/mask/breath(src) new /obj/item/tank/internals/oxygen(src) + new /obj/item/reagent_containers/syringe/antiviral(src) + +/obj/structure/closet/l3closet/scientist + icon_door = "bio_sci" + +/obj/structure/closet/l3closet/scientist/PopulateContents() + new /obj/item/storage/bag/xeno(src) + new /obj/item/clothing/suit/bio_suit/scientist(src) + new /obj/item/clothing/head/bio_hood/scientist(src) + new /obj/item/clothing/mask/breath(src) + new /obj/item/tank/internals/oxygen(src) /obj/structure/closet/l3closet/virology - icon_state = "bio_viro" + icon_door = "bio_viro" /obj/structure/closet/l3closet/virology/PopulateContents() new /obj/item/storage/bag/bio(src) @@ -20,35 +31,26 @@ 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/reagent_containers/syringe/antiviral(src) /obj/structure/closet/l3closet/security - icon_state = "bio_sec" + icon_door = "bio_sec" /obj/structure/closet/l3closet/security/PopulateContents() new /obj/item/clothing/suit/bio_suit/security(src) new /obj/item/clothing/head/bio_hood/security(src) new /obj/item/clothing/mask/breath(src) new /obj/item/tank/internals/oxygen(src) + new /obj/item/reagent_containers/syringe/antiviral(src) /obj/structure/closet/l3closet/janitor - icon_state = "bio_jan" + icon_door = "bio_jan" /obj/structure/closet/l3closet/janitor/PopulateContents() new /obj/item/clothing/suit/bio_suit/janitor(src) new /obj/item/clothing/head/bio_hood/janitor(src) new /obj/item/clothing/mask/breath(src) new /obj/item/tank/internals/oxygen(src) - - -/obj/structure/closet/l3closet/scientist - icon_state = "bio_viro" - -/obj/structure/closet/l3closet/scientist/PopulateContents() - new /obj/item/storage/bag/xeno(src) - new /obj/item/clothing/suit/bio_suit/scientist(src) - new /obj/item/clothing/head/bio_hood/scientist(src) - new /obj/item/clothing/mask/breath(src) - new /obj/item/tank/internals/oxygen(src) - + new /obj/item/reagent_containers/syringe/antiviral(src) 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 e74873bfaefc4e..473fedfa10ab50 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm @@ -18,10 +18,10 @@ new /obj/item/etherealballdeployer(src) new /obj/item/roulette_wheel_beacon(src) - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION new /obj/item/storage/fancy/candle_box(src) new /obj/item/storage/fancy/candle_box(src) - //SKYRAT EDIT END + //NOVA EDIT END /obj/structure/closet/secure_closet/bar/all_access req_access = null 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 2287c4f2d51ca9..3bfee4282c27f9 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm @@ -1,5 +1,5 @@ /obj/structure/closet/secure_closet/quartermaster - name = "\proper quartermaster's locker" + name = "quartermaster's locker" req_access = list(ACCESS_QM) icon_state = "qm" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 556230808bcaaa..88e8fe8d2d0f52 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -1,5 +1,5 @@ /obj/structure/closet/secure_closet/engineering_chief - name = "\proper chief engineer's locker" + name = "chief engineer's locker" req_access = list(ACCESS_CE) icon_state = "ce" @@ -18,16 +18,17 @@ new /obj/item/extinguisher/advanced(src) new /obj/item/storage/photo_album/ce(src) new /obj/item/storage/box/skillchips/engineering(src) - new /obj/item/storage/box/gas_miner_beacons(src) // SKYRAT EDIT ADDITION - new /obj/item/construction/plumbing/engineering(src) //SKYRAT EDIT ADDITION - new /obj/item/circuitboard/machine/rodstopper(src) //SKYRAT EDIT ADDITION + new /obj/item/storage/box/gas_miner_beacons(src) // NOVA EDIT ADDITION + new /obj/item/construction/plumbing/engineering(src) //NOVA EDIT ADDITION + new /obj/item/circuitboard/machine/rodstopper(src) //NOVA EDIT ADDITION + new /obj/item/card/id/departmental_budget/eng(src) //NOVA EDIT ADDITION /obj/structure/closet/secure_closet/engineering_chief/populate_contents_immediate() . = ..() // Traitor steal objective new /obj/item/areaeditor/blueprints(src) - new /obj/item/pipe_dispenser/bluespace(src) // SKYRAT EDIT -- BLUESPACE RPD -- ORIGINAL: new /obj/item/pipe_dispenser(src) + new /obj/item/pipe_dispenser/bluespace(src) // NOVA EDIT -- BLUESPACE RPD -- ORIGINAL: new /obj/item/pipe_dispenser(src) /obj/structure/closet/secure_closet/engineering_electrical name = "electrical supplies locker" @@ -78,11 +79,11 @@ new /obj/item/clothing/glasses/meson/engine(src) new /obj/item/storage/box/emptysandbags(src) new /obj/item/storage/bag/construction(src) - new /obj/item/construction/plumbing/engineering(src) //SKYRAT EDIT ADDITION + new /obj/item/construction/plumbing/engineering(src) //NOVA EDIT ADDITION /obj/structure/closet/secure_closet/atmospherics - name = "\proper atmospheric technician's locker" + name = "atmospheric technician's locker" req_access = list(ACCESS_ATMOSPHERICS) icon_state = "atmos" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm index e14f2928845ca5..1ac7e65884e409 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -8,26 +8,26 @@ /// If FALSE, we will protect the first person in the freezer from an explosion / nuclear blast. var/jones = FALSE paint_jobs = null - -/obj/structure/closet/secure_closet/freezer/before_open(mob/living/user, force) - . = ..() - if(!.) - return FALSE - - toggle_organ_decay(src) - return TRUE - -/obj/structure/closet/secure_closet/freezer/after_close(mob/living/user) - . = ..() - toggle_organ_decay(src) - -/obj/structure/closet/secure_closet/freezer/Destroy() - toggle_organ_decay(src) - return ..() - -/obj/structure/closet/secure_closet/freezer/Initialize(mapload) - . = ..() - toggle_organ_decay(src) + sealed = TRUE + + /// The rate at which the internal air mixture cools + var/cooling_rate_per_second = 4 + /// Minimum temperature of the internal air mixture + var/minimum_temperature = T0C - 60 + +/obj/structure/closet/secure_closet/freezer/process_internal_air(seconds_per_tick) + if(opened) + var/datum/gas_mixture/current_exposed_air = loc.return_air() + if(!current_exposed_air) + return + // The internal air won't cool down the external air when the freezer is opened. + internal_air.temperature = max(current_exposed_air.temperature, internal_air.temperature) + return ..() + else + if(internal_air.temperature <= minimum_temperature) + return + var/temperature_decrease_this_tick = min(cooling_rate_per_second * seconds_per_tick, internal_air.temperature - minimum_temperature) + internal_air.temperature -= temperature_decrease_this_tick /obj/structure/closet/secure_closet/freezer/ex_act() if(jones) @@ -37,12 +37,12 @@ return FALSE /obj/structure/closet/secure_closet/freezer/deconstruct(disassembled) - if (!(flags_1 & NODECONSTRUCT_1)) + if (!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/assembly/igniter/condenser(drop_location()) . = ..() /obj/structure/closet/secure_closet/freezer/empty - name = "empty freezer" + name = "freezer" /obj/structure/closet/secure_closet/freezer/empty/open req_access = null diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index 80dfd65b71fc78..b227eb1c6fc2c4 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -21,6 +21,7 @@ /obj/structure/closet/secure_closet/medical2 name = "anesthetic closet" desc = "Used to knock people out." + icon_state = "med_secure" req_access = list(ACCESS_SURGERY) /obj/structure/closet/secure_closet/medical2/PopulateContents() @@ -48,6 +49,7 @@ name = "psychology locker" req_access = list(ACCESS_PSYCHOLOGY) icon_state = "cabinet" + door_anim_time = 0 // no animation open_sound = 'sound/machines/wooden_closet_open.ogg' close_sound = 'sound/machines/wooden_closet_close.ogg' open_sound_volume = 25 @@ -68,7 +70,7 @@ new /obj/item/clothing/glasses/blindfold(src) /obj/structure/closet/secure_closet/chief_medical - name = "\proper chief medical officer's locker" + name = "chief medical officer's locker" req_access = list(ACCESS_CMO) icon_state = "cmo" @@ -84,7 +86,7 @@ new /obj/item/defibrillator/compact/loaded(src) new /obj/item/healthanalyzer/advanced(src) new /obj/item/assembly/flash/handheld(src) - new /obj/item/storage/briefcase/medicalgunset/cmo(src) //SKYRAT EDIT ADDITION MEDIGUNS + new /obj/item/storage/briefcase/medicalgunset/cmo(src) //NOVA EDIT ADDITION MEDIGUNS new /obj/item/autosurgeon/medical_hud(src) new /obj/item/door_remote/chief_medical_officer(src) new /obj/item/clothing/neck/petcollar(src) @@ -93,16 +95,18 @@ new /obj/item/circuitboard/machine/techfab/department/medical(src) new /obj/item/storage/photo_album/cmo(src) new /obj/item/storage/lockbox/medal/med(src) + new /obj/item/card/id/departmental_budget/med(src) //NOVA EDIT ADDITION /obj/structure/closet/secure_closet/chief_medical/populate_contents_immediate() . = ..() // Traitor steal objective //new /obj/item/reagent_containers/hypospray/cmo(src) - ORIGINAL - new /obj/item/storage/hypospraykit/cmo(src) //SKYRAT EDIT ADDITION - New Hyposprays + new /obj/item/storage/hypospraykit/cmo(src) //NOVA EDIT ADDITION - New Hyposprays /obj/structure/closet/secure_closet/animal - name = "animal control" + name = "animal control locker" + icon_door = "chemical" req_access = list(ACCESS_SURGERY) /obj/structure/closet/secure_closet/animal/PopulateContents() @@ -115,7 +119,7 @@ name = "chemical closet" desc = "Store dangerous chemicals in here." req_access = list(ACCESS_PHARMACY) - icon_door = "chemical" + icon_state = "chem_secure" /obj/structure/closet/secure_closet/chemical/PopulateContents() ..() @@ -123,8 +127,8 @@ new /obj/item/storage/box/pillbottles(src) new /obj/item/storage/box/medigels(src) new /obj/item/storage/box/medigels(src) - new /obj/item/storage/box/hypospray(src) //SKYRAT EDIT ADDITION - HYPOSPRAYS - new /obj/item/storage/box/hypospray(src) //SKYRAT EDIT ADDITION - HYPOSPRAYS + new /obj/item/storage/box/hypospray(src) //NOVA EDIT ADDITION - HYPOSPRAYS + new /obj/item/storage/box/hypospray(src) //NOVA EDIT ADDITION - HYPOSPRAYS new /obj/item/ph_booklet(src) new /obj/item/reagent_containers/dropper(src) new /obj/item/reagent_containers/cup/bottle/acidic_buffer(src) //hopefully they get the hint diff --git a/code/game/objects/structures/crates_lockers/closets/secure/misc.dm b/code/game/objects/structures/crates_lockers/closets/secure/misc.dm index 78faa05eaaf8ae..a0a811fc6c8be7 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/misc.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/misc.dm @@ -45,14 +45,14 @@ icon_state = "cmo" /obj/structure/closet/secure_closet/ert_med/PopulateContents() - ..() + . = ..() + new /mob/living/basic/bot/medbot(src) new /obj/item/storage/medkit/o2(src) new /obj/item/storage/medkit/toxin(src) new /obj/item/storage/medkit/fire(src) new /obj/item/storage/medkit/brute(src) new /obj/item/storage/medkit/regular(src) new /obj/item/defibrillator/compact/combat/loaded/nanotrasen(src) - new /mob/living/simple_animal/bot/medbot(src) /obj/structure/closet/secure_closet/ert_engi name = "emergency response team engineer locker" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm index 2904c1d9a9ce53..d0487198d4c7c7 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm @@ -44,6 +44,7 @@ close_sound = 'sound/machines/wooden_closet_close.ogg' open_sound_volume = 25 close_sound_volume = 50 + door_anim_time = 0 // no animation /obj/structure/closet/secure_closet/personal/cabinet/PopulateContents() new /obj/item/storage/backpack/satchel/leather/withwallet( src ) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index 674529967fdd77..002d3d7dca20f9 100755 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -1,5 +1,5 @@ /obj/structure/closet/secure_closet/research_director - name = "\proper research director's locker" + name = "research director's locker" req_access = list(ACCESS_RD) icon_state = "rd" @@ -18,6 +18,7 @@ new /obj/item/circuitboard/machine/techfab/department/science(src) new /obj/item/storage/photo_album/rd(src) new /obj/item/storage/box/skillchips/science(src) + new /obj/item/card/id/departmental_budget/sci(src) //NOVA EDIT ADDITION /obj/structure/closet/secure_closet/research_director/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 old mode 100755 new mode 100644 index ec46756140ca25..01529951587f3a --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -20,6 +20,7 @@ new /obj/item/gun/energy/e_gun(src) new /obj/item/door_remote/captain(src) new /obj/item/storage/photo_album/captain(src) + new /obj/item/card/id/departmental_budget(src) //NOVA EDIT ADDITION /obj/structure/closet/secure_closet/hop name = "head of personnel's locker" @@ -44,6 +45,7 @@ new /obj/item/circuitboard/machine/techfab/department/service(src) new /obj/item/storage/photo_album/hop(src) new /obj/item/storage/lockbox/medal/hop(src) + new /obj/item/card/id/departmental_budget/srv(src) //NOVA EDIT ADDITION /obj/structure/closet/secure_closet/hos name = "head of security's locker" @@ -55,6 +57,7 @@ new /obj/item/computer_disk/command/hos(src) new /obj/item/radio/headset/heads/hos(src) + new /obj/item/radio/headset/heads/hos/alt(src) new /obj/item/storage/bag/garment/hos(src) new /obj/item/storage/lockbox/medal/sec(src) new /obj/item/megaphone/sec(src) @@ -65,6 +68,7 @@ new /obj/item/storage/belt/security/full(src) new /obj/item/circuitboard/machine/techfab/department/security(src) new /obj/item/storage/photo_album/hos(src) + new /obj/item/card/id/departmental_budget/sec(src) //NOVA EDIT ADDITION /obj/structure/closet/secure_closet/hos/populate_contents_immediate() . = ..() @@ -100,12 +104,13 @@ /obj/structure/closet/secure_closet/security/PopulateContents() ..() new /obj/item/clothing/suit/armor/vest/alt/sec(src) - new /obj/item/clothing/head/security_cap(src) //SKYRAT EDIT ADDITION + new /obj/item/clothing/head/security_cap(src) //NOVA EDIT ADDITION new /obj/item/clothing/head/helmet/sec(src) new /obj/item/radio/headset/headset_sec(src) new /obj/item/radio/headset/headset_sec/alt(src) new /obj/item/clothing/glasses/hud/security/sunglasses(src) new /obj/item/flashlight/seclite(src) + new /obj/item/clothing/gloves/tackler/security(src) // NOVA EDIT CHANGE - Gives Them The Blue Ones - ORIGINAL: new /obj/item/clothing/gloves/tackler(src) /obj/structure/closet/secure_closet/security/sec @@ -113,7 +118,7 @@ ..() new /obj/item/storage/belt/security/full(src) -// SKYRAT EDIT CHANGE -- GOOFSEC DEP GUARDS +// NOVA EDIT CHANGE -- GOOFSEC DEP GUARDS /obj/structure/closet/secure_closet/security/cargo name = "\proper customs agent's locker" req_access = list(ACCESS_BRIG_ENTRANCE, ACCESS_CARGO) @@ -157,7 +162,7 @@ new /obj/item/restraints/handcuffs/cable/blue(src) new /obj/item/storage/bag/garment/orderly(src) new /obj/item/assembly/flash/handheld(src) -// SKYRAT EDIT CHANGE END -- GOOFSEC DEP GUARDS +// NOVA EDIT CHANGE END -- GOOFSEC DEP GUARDS /obj/structure/closet/secure_closet/detective name = "\improper detective's cabinet" @@ -178,14 +183,14 @@ new /obj/item/holosign_creator/security(src) new /obj/item/reagent_containers/spray/pepper(src) new /obj/item/clothing/suit/armor/vest/det_suit(src) - new /obj/item/toy/crayon/white(src) //SKYRAT EDIT CHANGE - ORIGINAL: /obj/item/storage/belt/holster/detective/full(src) + new /obj/item/toy/crayon/white(src) //NOVA EDIT CHANGE - ORIGINAL: /obj/item/storage/belt/holster/detective/full(src) 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" + name = "lethal injections locker" req_access = list(ACCESS_HOS) /obj/structure/closet/secure_closet/injection/PopulateContents() @@ -265,7 +270,7 @@ /obj/structure/closet/secure_closet/contraband/armory anchored = TRUE - name = "Contraband Locker" + name = "contraband locker" req_access = list(ACCESS_ARMORY) /obj/structure/closet/secure_closet/contraband/heads @@ -275,7 +280,6 @@ /obj/structure/closet/secure_closet/armory1 name = "armory armor locker" - icon_state = "armory" // SKYRAT EDIT ADDITION - NEW ICON ADDED IN peacekeeper_lockers.dm req_access = list(ACCESS_ARMORY) /obj/structure/closet/secure_closet/armory1/PopulateContents() @@ -295,7 +299,8 @@ /obj/structure/closet/secure_closet/armory2 name = "armory ballistics locker" - icon_state = "armory" // SKYRAT EDIT ADDITION - NEW ICON ADDED IN peacekeeper_lockers.dm + icon_state = "tac" + icon_door = "armory_shotgun" req_access = list(ACCESS_ARMORY) /obj/structure/closet/secure_closet/armory2/PopulateContents() @@ -308,7 +313,8 @@ /obj/structure/closet/secure_closet/armory3 name = "armory energy gun locker" - icon_state = "armory" // SKYRAT EDIT ADDITION - NEW ICON ADDED IN peacekeeper_lockers.dm + icon_state = "tac" + icon_door = "armory_energy" req_access = list(ACCESS_ARMORY) /obj/structure/closet/secure_closet/armory3/PopulateContents() diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index aab8e4b8582869..d1181fe23aca25 100644 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm @@ -32,7 +32,7 @@ new /obj/item/climbing_hook/syndicate(src) /obj/structure/closet/syndicate/nuclear - desc = "It's a storage unit for a Syndicate boarding party." + desc = "It's a storage unit for a Symphionia boarding party." /obj/structure/closet/syndicate/nuclear/PopulateContents() for(var/i in 1 to 5) diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index 6d899d9097a76e..e28e05080219b2 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -33,13 +33,13 @@ /obj/structure/closet/emcloset/PopulateContents() ..() - new /obj/item/storage/box/emergency_spacesuit(src) // SKYRAT EDIT ADD + new /obj/item/storage/box/emergency_spacesuit(src) // NOVA EDIT ADD if (prob(40)) new /obj/item/storage/toolbox/emergency(src) //switch (pick_weight(list("small" = 35, "aid" = 30, "tank" = 20, "both" = 10, "nothing" = 4))) // ORIGINAL - switch (pick_weight(list("small" = 35, "aid" = 30, "tank" = 20, "both" = 10))) // SKYRAT EDIT CHANGE + switch (pick_weight(list("small" = 35, "aid" = 30, "tank" = 20, "both" = 10))) // NOVA EDIT CHANGE if ("small") new /obj/item/tank/internals/emergency_oxygen(src) new /obj/item/tank/internals/emergency_oxygen(src) @@ -59,13 +59,13 @@ new /obj/item/tank/internals/emergency_oxygen(src) new /obj/item/clothing/mask/breath(src) - // SKYRAT EDIT REMOVAL START + // NOVA EDIT REMOVAL START /* if ("nothing") // doot pass() */ - // SKYRAT EDIT REMOVAL END + // NOVA EDIT REMOVAL END /* * Fire Closet @@ -78,16 +78,16 @@ /obj/structure/closet/firecloset/PopulateContents() ..() new /obj/item/clothing/suit/utility/fire/firefighter(src) - new /obj/item/clothing/mask/gas/alt(src) //SKYRAT EDIT CHANGE - ORIGINAL: /obj/item/clothing/mask/gas(src) + new /obj/item/clothing/mask/gas/alt(src) //NOVA EDIT CHANGE - ORIGINAL: /obj/item/clothing/mask/gas(src) new /obj/item/tank/internals/oxygen/red(src) new /obj/item/extinguisher(src) new /obj/item/clothing/head/utility/hardhat/red(src) new /obj/item/crowbar/large/emergency(src) - new /obj/item/storage/inflatable(src) //SKYRAT EDIT ADDITION - INFLATABLES + new /obj/item/storage/inflatable(src) //NOVA EDIT ADDITION - INFLATABLES /obj/structure/closet/firecloset/full/PopulateContents() new /obj/item/clothing/suit/utility/fire/firefighter(src) - new /obj/item/clothing/mask/gas/alt(src) //SKYRAT EDIT CHANGE - ORIGINAL: /obj/item/clothing/mask/gas(src) + new /obj/item/clothing/mask/gas/alt(src) //NOVA EDIT CHANGE - ORIGINAL: /obj/item/clothing/mask/gas(src) new /obj/item/flashlight(src) new /obj/item/tank/internals/oxygen/red(src) new /obj/item/extinguisher(src) @@ -185,14 +185,3 @@ new /obj/item/clothing/under/color/black(src) new /obj/item/clothing/shoes/sneakers/black(src) new /obj/item/clothing/head/utility/bomb_hood/white(src) - -/* - * Ammunition - */ -/obj/structure/closet/ammunitionlocker - name = "ammunition locker" - -/obj/structure/closet/ammunitionlocker/PopulateContents() - ..() - for(var/i in 1 to 8) - new /obj/item/ammo_casing/shotgun/beanbag(src) diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index 6ee649ebb65883..7f34fd46297f32 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -1,6 +1,6 @@ /obj/structure/closet/wardrobe name = "wardrobe" - desc = "It's a storage unit for standard-issue Nanotrasen attire." + desc = "It's a storage unit for standard-issue Symphionia attire." icon_door = "blue" /obj/structure/closet/wardrobe/PopulateContents() @@ -70,7 +70,7 @@ /obj/structure/closet/wardrobe/orange name = "prison wardrobe" - desc = "It's a storage unit for Nanotrasen-regulation prisoner attire." + desc = "It's a storage unit for Symphionia-regulation prisoner attire." icon_door = "orange" /obj/structure/closet/wardrobe/orange/PopulateContents() diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 1f8322ad5dc9f1..89b6245a6a0b12 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -18,7 +18,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' @@ -31,18 +37,26 @@ /obj/structure/closet/crate/Initialize(mapload) AddElement(/datum/element/climbable, climb_time = crate_climb_time, climb_stun = 0) //add element in closed state before parent init opens it(if it does) + if(elevation) + AddElement(/datum/element/elevation, pixel_shift = elevation) . = ..() var/static/list/crate_paint_jobs if(isnull(crate_paint_jobs)) crate_paint_jobs = list( "Internals" = list("icon_state" = "o2crate"), - "Medical" = list("icon_state" = "medicalcrate"), + "Medical" = list("icon_state" = "medical"), + "Medical Plus" = list("icon_state" = "medicalcrate"), "Radiation" = list("icon_state" = "radiation"), "Hydrophonics" = list("icon_state" = "hydrocrate"), "Science" = list("icon_state" = "scicrate"), + "Robotics" = list("icon_state" = "robo"), "Solar" = list("icon_state" = "engi_e_crate"), - "Engineering" = list("icon_state" = "engi_crate") + "Engineering" = list("icon_state" = "engi_crate"), + "Atmospherics" = list("icon_state" = "atmos"), + "Cargo" = list("icon_state" = "cargo"), + "Mining" = list("icon_state" = "mining"), + "Command" = list("icon_state" = "centcom") ) if(paint_jobs) paint_jobs = crate_paint_jobs @@ -96,6 +110,11 @@ . = ..() 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) if(!QDELETED(manifest)) playsound(src, 'sound/items/poster_ripped.ogg', 75, TRUE) manifest.forceMove(get_turf(src)) @@ -106,7 +125,22 @@ . = ..() 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) +///Spawns two to six maintenance spawners inside the closet +/obj/structure/closet/proc/populate_with_random_maint_loot() + SIGNAL_HANDLER + + for (var/i in 1 to rand(2,6)) + new /obj/effect/spawner/random/maintenance(src) + + UnregisterSignal(src, COMSIG_CLOSET_POPULATE_CONTENTS) + +///Removes the supply manifest from the closet /obj/structure/closet/crate/proc/tear_manifest(mob/user) to_chat(user, span_notice("You tear the manifest off of [src].")) playsound(src, 'sound/items/poster_ripped.ogg', 75, TRUE) @@ -136,27 +170,7 @@ close_sound_volume = 50 can_install_electronics = FALSE paint_jobs = null - -/obj/structure/closet/crate/maint - -/obj/structure/closet/crate/maint/Initialize(mapload) - ..() - - var/static/list/possible_crates = RANDOM_CRATE_LOOT - - var/crate_path = pick_weight(possible_crates) - var/obj/structure/closet/crate/random_crate = new crate_path(loc) - random_crate.RegisterSignal(random_crate, COMSIG_CLOSET_POPULATE_CONTENTS, TYPE_PROC_REF(/obj/structure/closet/, populate_with_random_maint_loot)) - if (prob(50)) - random_crate.open(null, special_effects = FALSE) //crates spawned as immediatly opened don't need to animate into being opened - - return INITIALIZE_HINT_QDEL - -/obj/structure/closet/proc/populate_with_random_maint_loot() - SIGNAL_HANDLER - - for (var/i in 1 to rand(2,6)) - new /obj/effect/spawner/random/maintenance(src) + elevation_open = 0 /obj/structure/closet/crate/trashcart //please make this a generic cart path later after things calm down a little desc = "A heavy, metal trashcart with wheels." @@ -171,6 +185,8 @@ desc = "A large cart for hauling around large amounts of laundry." icon_state = "laundry" base_icon_state = "laundry" + elevation = 14 + elevation_open = 14 /obj/structure/closet/crate/trashcart/Initialize(mapload) . = ..() @@ -203,28 +219,35 @@ icon_state = "medicalcrate" base_icon_state = "medicalcrate" +/obj/structure/closet/crate/medical/department + icon_state = "medical" + base_icon_state = "medical" + /obj/structure/closet/crate/freezer desc = "A freezer." name = "freezer" icon_state = "freezer" base_icon_state = "freezer" paint_jobs = null - -/obj/structure/closet/crate/freezer/before_open(mob/living/user, force) - . = ..() - if(!.) - return FALSE - - toggle_organ_decay(src) - return TRUE - -/obj/structure/closet/crate/freezer/after_close(mob/living/user) - . = ..() - toggle_organ_decay(src) - -/obj/structure/closet/crate/freezer/Destroy() - toggle_organ_decay(src) - return ..() + sealed = TRUE + /// The rate at which the internal air mixture cools + var/cooling_rate_per_second = 4 + /// Minimum temperature of the internal air mixture + var/minimum_temperature = T0C - 60 + +/obj/structure/closet/crate/freezer/process_internal_air(seconds_per_tick) + if(opened) + var/datum/gas_mixture/current_exposed_air = loc.return_air() + if(!current_exposed_air) + return + // The internal air won't cool down the external air when the freezer is opened. + internal_air.temperature = max(current_exposed_air.temperature, internal_air.temperature) + return ..() + else + if(internal_air.temperature <= minimum_temperature) + return + var/temperature_decrease_this_tick = min(cooling_rate_per_second * seconds_per_tick, internal_air.temperature - minimum_temperature) + internal_air.temperature -= temperature_decrease_this_tick /obj/structure/closet/crate/freezer/blood name = "blood freezer" @@ -259,6 +282,11 @@ new /obj/item/bodypart/leg/right/robot/surplus(src) new /obj/item/bodypart/leg/right/robot/surplus(src) +/obj/structure/closet/crate/freezer/food + name = "food icebox" + icon_state = "food" + base_icon_state = "food" + /obj/structure/closet/crate/radiation desc = "A crate with a radiation sign on it." name = "radiation crate" @@ -271,6 +299,21 @@ icon_state = "hydrocrate" base_icon_state = "hydrocrate" +/obj/structure/closet/crate/centcom + name = "centcom crate" + icon_state = "centcom" + base_icon_state = "centcom" + +/obj/structure/closet/crate/cargo + name = "cargo crate" + icon_state = "cargo" + base_icon_state = "cargo" + +/obj/structure/closet/crate/cargo/mining + name = "mining crate" + icon_state = "mining" + base_icon_state = "mining" + /obj/structure/closet/crate/engineering name = "engineering crate" icon_state = "engi_crate" @@ -280,6 +323,11 @@ icon_state = "engi_e_crate" base_icon_state = "engi_e_crate" +/obj/structure/closet/crate/engineering/atmos + name = "atmospherics crate" + icon_state = "atmos" + base_icon_state = "atmos" + /obj/structure/closet/crate/rcd desc = "A crate for the storage of an RCD." name = "\improper RCD crate" @@ -298,10 +346,15 @@ icon_state = "scicrate" base_icon_state = "scicrate" +/obj/structure/closet/crate/science/robo + name = "robotics crate" + icon_state = "robo" + base_icon_state = "robo" + /obj/structure/closet/crate/mod name = "MOD crate" - icon_state = "scicrate" - base_icon_state = "scicrate" + icon_state = "robo" + base_icon_state = "robo" /obj/structure/closet/crate/mod/PopulateContents() ..() @@ -325,6 +378,8 @@ /obj/structure/closet/crate/goldcrate name = "gold crate" + icon_state = "gold" + base_icon_state = "gold" /obj/structure/closet/crate/goldcrate/PopulateContents() ..() @@ -338,6 +393,8 @@ /obj/structure/closet/crate/silvercrate name = "silver crate" + icon_state = "silver" + base_icon_state = "silver" /obj/structure/closet/crate/silvercrate/PopulateContents() ..() diff --git a/code/game/objects/structures/crates_lockers/crates/bins.dm b/code/game/objects/structures/crates_lockers/crates/bins.dm index f97a86aba23735..6b865b845861fc 100644 --- a/code/game/objects/structures/crates_lockers/crates/bins.dm +++ b/code/game/objects/structures/crates_lockers/crates/bins.dm @@ -10,6 +10,8 @@ delivery_icon = null can_install_electronics = FALSE paint_jobs = null + elevation = 17 + elevation_open = 17 /obj/structure/closet/crate/bin/LateInitialize() . = ..() diff --git a/code/game/objects/structures/crates_lockers/crates/critter.dm b/code/game/objects/structures/crates_lockers/crates/critter.dm index a89d82ea0eae47..5e1873d166ab61 100644 --- a/code/game/objects/structures/crates_lockers/crates/critter.dm +++ b/code/game/objects/structures/crates_lockers/crates/critter.dm @@ -15,6 +15,8 @@ close_sound_volume = 50 contents_pressure_protection = 0.8 can_install_electronics = FALSE + elevation = 21 + elevation_open = 0 var/obj/item/tank/internals/emergency_oxygen/tank diff --git a/code/game/objects/structures/crates_lockers/crates/large.dm b/code/game/objects/structures/crates_lockers/crates/large.dm index 0f3b9c19773b94..073d4a936d81b8 100644 --- a/code/game/objects/structures/crates_lockers/crates/large.dm +++ b/code/game/objects/structures/crates_lockers/crates/large.dm @@ -14,6 +14,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/crates_lockers/crates/secure.dm b/code/game/objects/structures/crates_lockers/crates/secure.dm index 595481b707c27d..81f7b97a3c1599 100644 --- a/code/game/objects/structures/crates_lockers/crates/secure.dm +++ b/code/game/objects/structures/crates_lockers/crates/secure.dm @@ -63,8 +63,8 @@ base_icon_state = "hydrosecurecrate" /obj/structure/closet/crate/secure/freezer //for consistency with other "freezer" closets/crates - desc = "An insulated crate with a lock on it, used to secure perishables." - name = "secure kitchen crate" + desc = "An icebox with a lock on it, used to secure perishables." + name = "secure kitchen icebox" icon_state = "kitchen_secure_crate" base_icon_state = "kitchen_secure_crate" paint_jobs = null @@ -79,18 +79,49 @@ . = ..() new /obj/effect/spawner/random/food_or_drink/pizzaparty(src) +/obj/structure/closet/crate/secure/centcom + name = "secure centcom crate" + icon_state = "centcom_secure" + base_icon_state = "centcom_secure" + +/obj/structure/closet/crate/secure/cargo + name = "secure cargo crate" + icon_state = "cargo_secure" + base_icon_state = "cargo_secure" + +/obj/structure/closet/crate/secure/cargo/mining + name = "secure mining crate" + icon_state = "mining_secure" + base_icon_state = "mining_secure" + +/obj/structure/closet/crate/secure/radiation + name = "secure radioation crate" + icon_state = "radiation_secure" + base_icon_state = "radiation_secure" + /obj/structure/closet/crate/secure/engineering desc = "A crate with a lock on it, painted in the scheme of the station's engineers." name = "secure engineering crate" icon_state = "engi_secure_crate" base_icon_state = "engi_secure_crate" +/obj/structure/closet/crate/secure/engineering/atmos + name = "secure atmospherics crate" + desc = "A crate with a lock on it, painted in the scheme of the station's atmospherics engineers." + icon_state = "atmos_secure" + base_icon_state = "atmos_secure" + /obj/structure/closet/crate/secure/science name = "secure science crate" desc = "A crate with a lock on it, painted in the scheme of the station's scientists." icon_state = "scisecurecrate" base_icon_state = "scisecurecrate" +/obj/structure/closet/crate/secure/science/robo + name = "robotics science crate" + icon_state = "robo_secure" + base_icon_state = "robo_secure" + /obj/structure/closet/crate/secure/owned name = "private crate" desc = "A crate cover designed to only open for who purchased its contents." diff --git a/code/game/objects/structures/crates_lockers/crates/syndicrate.dm b/code/game/objects/structures/crates_lockers/crates/syndicrate.dm index ff7cf8df03ba4e..ae169e2ad445a7 100644 --- a/code/game/objects/structures/crates_lockers/crates/syndicrate.dm +++ b/code/game/objects/structures/crates_lockers/crates/syndicrate.dm @@ -1,6 +1,6 @@ -/obj/structure/closet/crate/syndicrate +/obj/structure/closet/crate/secure/syndicrate name = "surplus syndicrate" - desc = "A conspicuous crate with the Syndicate logo on it. You don't know how to open it." + desc = "A conspicuous crate with the Symphionia logo on it. You don't know how to open it." icon_state = "syndicrate" base_icon_state = "syndicrate" max_integrity = 500 @@ -20,7 +20,7 @@ laser = 50 energy = 100 -/obj/structure/closet/crate/syndicrate/before_open(mob/living/user, force) +/obj/structure/closet/crate/secure/syndicrate/before_open(mob/living/user, force) . = ..() if(!.) return FALSE @@ -31,7 +31,7 @@ return TRUE -/obj/structure/closet/crate/syndicrate/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", sound_effect = TRUE, attack_dir, armour_penetration = 0) +/obj/structure/closet/crate/secure/syndicrate/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", sound_effect = TRUE, attack_dir, armour_penetration = 0) if(created_items) return ..() if(damage_amount < DAMAGE_PRECISION) @@ -43,7 +43,7 @@ qdel(src) ///ensures that the syndicrate can only be unlocked by opening it with a syndicrate_key -/obj/structure/closet/crate/syndicrate/attackby(obj/item/item, mob/user, params) +/obj/structure/closet/crate/secure/syndicrate/attackby(obj/item/item, mob/user, params) if(!istype(item, /obj/item/syndicrate_key) || created_items) return ..() created_items = TRUE @@ -53,17 +53,22 @@ qdel(item) to_chat(user, span_notice("You twist the key into both locks at once, opening the crate.")) playsound(src, 'sound/machines/boltsup.ogg', 50, vary = FALSE) - update_appearance(updates = UPDATE_OVERLAYS) togglelock(user) -/obj/structure/closet/crate/syndicrate/attackby_secondary(obj/item/weapon, mob/user, params) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN +/obj/structure/closet/crate/secure/syndicrate/togglelock(mob/living/user, silent) + if(broken || !created_items) + return + if(iscarbon(user)) + add_fingerprint(user) + locked = !locked + user.visible_message( + span_notice("[user] [locked ? "locks" : "unlocks"] [src]."), + span_notice("You [locked ? "locked" : "unlocked"] [src]."), + ) + update_appearance() -///syndicrate has a unique overlay for being unlocked -/obj/structure/closet/crate/syndicrate/closet_update_overlays(list/new_overlays) - . = new_overlays - if(created_items) - . += "syndicrate_unlocked" +/obj/structure/closet/crate/secure/syndicrate/attackby_secondary(obj/item/weapon, mob/user, params) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /obj/item/syndicrate_key name = "syndicrate key" @@ -79,7 +84,7 @@ /obj/item/syndicrate_key/add_item_context(obj/item/source, list/context, atom/target, mob/living/user) . = ..() - var/obj/structure/closet/crate/syndicrate/target_structure = target + var/obj/structure/closet/crate/secure/syndicrate/target_structure = target if(!istype(target_structure)) return NONE if(target_structure.created_items) diff --git a/code/game/objects/structures/deployable_turret.dm b/code/game/objects/structures/deployable_turret.dm index 0e810526bdc553..a33cfb822de337 100644 --- a/code/game/objects/structures/deployable_turret.dm +++ b/code/game/objects/structures/deployable_turret.dm @@ -12,7 +12,6 @@ max_integrity = 100 buckle_lying = 0 layer = ABOVE_MOB_LAYER - plane = GAME_PLANE_UPPER var/view_range = 2.5 var/cooldown = 0 /// The projectile that the turret fires @@ -101,7 +100,6 @@ M.put_in_hands(TC) M.pixel_y = 14 layer = ABOVE_MOB_LAYER - SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER) setDir(SOUTH) playsound(src,'sound/mecha/mechmove01.ogg', 50, TRUE) set_anchored(TRUE) @@ -136,43 +134,34 @@ switch(dir) if(NORTH) layer = BELOW_MOB_LAYER - SET_PLANE_IMPLICIT(src, GAME_PLANE) user.pixel_x = 0 user.pixel_y = -14 if(NORTHEAST) layer = BELOW_MOB_LAYER - SET_PLANE_IMPLICIT(src, GAME_PLANE) user.pixel_x = -8 user.pixel_y = -4 if(EAST) layer = ABOVE_MOB_LAYER - SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER) user.pixel_x = -14 user.pixel_y = 0 if(SOUTHEAST) layer = BELOW_MOB_LAYER - SET_PLANE_IMPLICIT(src, GAME_PLANE) user.pixel_x = -8 user.pixel_y = 4 if(SOUTH) layer = ABOVE_MOB_LAYER - SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER) - plane = GAME_PLANE_UPPER user.pixel_x = 0 user.pixel_y = 14 if(SOUTHWEST) layer = BELOW_MOB_LAYER - SET_PLANE_IMPLICIT(src, GAME_PLANE) user.pixel_x = 8 user.pixel_y = 4 if(WEST) layer = ABOVE_MOB_LAYER - SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER) user.pixel_x = 14 user.pixel_y = 0 if(NORTHWEST) layer = BELOW_MOB_LAYER - SET_PLANE_IMPLICIT(src, GAME_PLANE) user.pixel_x = 8 user.pixel_y = -4 @@ -222,7 +211,7 @@ /obj/machinery/deployable_turret/hmg name = "heavy machine gun turret" - desc = "A heavy calibre machine gun commonly used by Nanotrasen forces, famed for it's ability to give people on the recieving end more holes than normal." + desc = "A heavy calibre machine gun commonly used by Symphionia forces, famed for it's ability to give people on the recieving end more holes than normal." icon_state = "hmg" max_integrity = 250 projectile_type = /obj/projectile/bullet/manned_turret/hmg diff --git a/code/game/objects/structures/destructible_structures.dm b/code/game/objects/structures/destructible_structures.dm index 5c515f54688141..f33c99b681a648 100644 --- a/code/game/objects/structures/destructible_structures.dm +++ b/code/game/objects/structures/destructible_structures.dm @@ -6,7 +6,7 @@ /obj/structure/destructible/deconstruct(disassembled = TRUE) if(!disassembled) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(islist(debris)) for(var/I in debris) for(var/i in 1 to debris[I]) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 8ebc0feb0d5fee..1858fd1ef5e3b4 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -82,7 +82,7 @@ playsound(src, 'sound/items/welder.ogg', 100, TRUE) /obj/structure/displaycase/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) dump() if(!disassembled) new /obj/item/shard(drop_location()) @@ -91,7 +91,7 @@ /obj/structure/displaycase/atom_break(damage_flag) . = ..() - if(!broken && !(flags_1 & NODECONSTRUCT_1)) + if(!broken && !(obj_flags & NO_DECONSTRUCTION)) set_density(FALSE) broken = TRUE new /obj/item/shard(drop_location()) @@ -103,8 +103,8 @@ /obj/structure/displaycase/proc/trigger_alarm() if(!alert) return - //var/area/alarmed = get_area(src) SKYRAT EDIT REMOVAL - //alarmed.burglaralert(src) SKYRAT EDIT REMOVAL + //var/area/alarmed = get_area(src) NOVA EDIT REMOVAL + //alarmed.burglaralert(src) NOVA EDIT REMOVAL alarm_manager.send_alarm(ALARM_BURGLAR) addtimer(CALLBACK(alarm_manager, TYPE_PROC_REF(/datum/alarm_handler, clear_alarm), ALARM_BURGLAR), 1 MINUTES) @@ -272,7 +272,7 @@ electronics.forceMove(drop_location()) electronics = null qdel(src) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/displaycase_chassis/attackby(obj/item/attacking_item, mob/user, params) if(istype(attacking_item, /obj/item/electronics/airlock)) @@ -317,7 +317,7 @@ //The lab cage and captain's display case do not spawn with electronics, which is why req_access is needed. /obj/structure/displaycase/captain start_showpiece_type = /obj/item/gun/energy/laser/captain - req_access = list(ACCESS_CAPTAIN) //SKYRAT EDIT CHANGE - ORIGINAL: req_access = list(ACCESS_CENT_SPECOPS) //this was intentional, presumably to make it slightly harder for caps to grab their gun roundstart + req_access = list(ACCESS_CAPTAIN) //NOVA EDIT CHANGE - ORIGINAL: req_access = list(ACCESS_CENT_SPECOPS) //this was intentional, presumably to make it slightly harder for caps to grab their gun roundstart /obj/structure/displaycase/labcage name = "lab cage" @@ -673,7 +673,7 @@ /obj/structure/displaycase/forsale/atom_break(damage_flag) . = ..() - if(!broken && !(flags_1 & NODECONSTRUCT_1)) + if(!broken && !(obj_flags & NO_DECONSTRUCTION)) broken = TRUE playsound(src, SFX_SHATTER, 70, TRUE) update_appearance() diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index e90567a331873a..de996015e592c5 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -363,7 +363,7 @@ qdel(source) /obj/structure/door_assembly/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) var/turf/T = get_turf(src) if(!disassembled) material_amt = rand(2,4) diff --git a/code/game/objects/structures/door_assembly_types.dm b/code/game/objects/structures/door_assembly_types.dm index 74a77443b28158..36b41fbc326328 100644 --- a/code/game/objects/structures/door_assembly_types.dm +++ b/code/game/objects/structures/door_assembly_types.dm @@ -272,7 +272,7 @@ base_name = "large public airlock" /obj/structure/door_assembly/door_assembly_material/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) var/turf/T = get_turf(src) for(var/material in custom_materials) var/datum/material/material_datum = material diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index a6de88c5f8a4b8..9108216f2717e9 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -1,6 +1,6 @@ -//THIS FILE HAS BEEN EDITED BY SKYRAT EDIT +//THIS FILE HAS BEEN EDITED BY NOVA EDIT -/obj/structure/dresser//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/structure/dresser//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "dresser" desc = "A nicely-crafted wooden dresser. It's filled with lots of undies." icon = 'icons/obj/fluff/general.dmi' @@ -19,7 +19,7 @@ return ..() /obj/structure/dresser/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) qdel(src) @@ -36,7 +36,7 @@ to_chat(dressing_human, span_warning("You are not capable of wearing underwear.")) return - var/choice = tgui_input_list(user, "Underwear, Bra, Undershirt, or Socks?", "Changing", list("Underwear", "Underwear Color", "Bra", "Bra Color", "Undershirt", "Undershirt Color", "Socks", "Socks Color")) //SKYRAT EDIT ADDITION - Colorable Undershirt/Socks/Bra + var/choice = tgui_input_list(user, "Underwear, Bra, Undershirt, or Socks?", "Changing", list("Underwear", "Underwear Color", "Bra", "Bra Color", "Undershirt", "Undershirt Color", "Socks", "Socks Color")) //NOVA EDIT ADDITION - Colorable Undershirt/Socks/Bra if(isnull(choice)) return @@ -59,7 +59,7 @@ var/new_socks = tgui_input_list(user, "Select your socks", "Changing", GLOB.socks_list) if(new_socks) dressing_human.socks = new_socks - //SKYRAT EDIT ADDITION BEGIN - Colorable Undershirt/Socks/Bras + //NOVA EDIT ADDITION BEGIN - Colorable Undershirt/Socks/Bras if("Undershirt Color") var/new_undershirt_color = input(dressing_human, "Choose your undershirt color", "Undershirt Color", dressing_human.undershirt_color) as color|null if(new_undershirt_color) @@ -79,7 +79,7 @@ if(new_bra_color) dressing_human.bra_color = sanitize_hexcolor(new_bra_color) - //SKYRAT EDIT ADDITION END - Colorable Undershirt/Socks/Bras + //NOVA EDIT ADDITION END - Colorable Undershirt/Socks/Bras add_fingerprint(dressing_human) dressing_human.update_body() diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index 56d9147867d53f..2cb67a8cafb921 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -17,7 +17,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet, 29) if(building) opened = TRUE //icon_state = "extinguisher_empty" ORIGINAL - icon_state = "extinguisher_empty_open" //SKYRAT EDIT CHANGE - AESTHETICS + icon_state = "extinguisher_empty_open" //NOVA EDIT CHANGE - AESTHETICS else stored_extinguisher = new /obj/item/extinguisher(src) update_appearance(UPDATE_ICON) @@ -107,6 +107,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet, 29) if(!opened) opened = 1 playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3) + update_appearance(UPDATE_ICON) else toggle_cabinet(user) @@ -140,7 +141,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet, 29) opened = !opened update_appearance(UPDATE_ICON) -/* SKYRAT EDIT REMOVAL BEGIN - AESTHETICS - MOVED TO MODULAR. +/* NOVA EDIT REMOVAL BEGIN - AESTHETICS - MOVED TO MODULAR. /obj/structure/extinguisher_cabinet/update_icon_state() icon_state = "extinguisher" @@ -163,7 +164,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet, 29) /obj/structure/extinguisher_cabinet/atom_break(damage_flag) . = ..() - if(!broken && !(flags_1 & NODECONSTRUCT_1)) + if(!broken && !(obj_flags & NO_DECONSTRUCTION)) broken = 1 opened = 1 if(stored_extinguisher) @@ -173,7 +174,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet, 29) /obj/structure/extinguisher_cabinet/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(disassembled) new /obj/item/wallframe/extinguisher_cabinet(loc) else diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index 8cb4b487c67789..9f4f4fdd73f4f8 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -5,9 +5,8 @@ name = "wall" desc = "A huge chunk of metal used to separate rooms." anchored = TRUE - //icon = 'icons/turf/walls/wall.dmi' //ORIGINAL - icon = 'modular_skyrat/modules/aesthetics/walls/icons/wall.dmi' //SKYRAT EDIT CHANGE - AESTHETICS - icon_state = "wall-0" + icon = 'icons/turf/walls/false_walls.dmi' + icon_state = "wall-open" base_icon_state = "wall" layer = LOW_OBJ_LAYER density = TRUE @@ -20,6 +19,8 @@ can_atmos_pass = ATMOS_PASS_DENSITY rad_insulation = RAD_MEDIUM_INSULATION material_flags = MATERIAL_EFFECTS + /// The icon this falsewall is faking being. we'll switch out our icon with this when we're in fake mode + var/fake_icon = 'icons/turf/walls/wall.dmi' var/mineral = /obj/item/stack/sheet/iron var/mineral_amount = 2 var/walltype = /turf/closed/wall @@ -72,23 +73,29 @@ /obj/structure/falsewall/update_icon_state() if(opening) - icon_state = "fwall_[density ? "opening" : "closing"]" + icon = initial(icon) + icon_state = "[base_icon_state]-[density ? "opening" : "closing"]" return ..() - icon_state = density ? "[base_icon_state]-[smoothing_junction]" : "fwall_open" + if(density) + icon = fake_icon + icon_state = "[base_icon_state]-[smoothing_junction]" + else + icon = initial(icon) + icon_state = "[base_icon_state]-open" return ..() /obj/structure/falsewall/proc/ChangeToWall(delete = 1) var/turf/T = get_turf(src) - T.PlaceOnTop(walltype) + T.place_on_top(walltype) if(delete) qdel(src) return T -/obj/structure/falsewall/tool_act(mob/living/user, obj/item/tool, tool_type, is_right_clicking) - if(!opening) +/obj/structure/falsewall/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) + if(!opening || !tool.tool_behaviour) return ..() to_chat(user, span_warning("You must wait until the door has stopped moving!")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_BLOCKING /obj/structure/falsewall/screwdriver_act(mob/living/user, obj/item/tool) if(!density) @@ -97,19 +104,19 @@ var/turf/loc_turf = get_turf(src) if(loc_turf.density) to_chat(user, span_warning("[src] is blocked!")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(!isfloorturf(loc_turf)) to_chat(user, span_warning("[src] bolts must be tightened on the floor!")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS user.visible_message(span_notice("[user] tightens some bolts on the wall."), span_notice("You tighten the bolts on the wall.")) ChangeToWall() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/falsewall/welder_act(mob/living/user, obj/item/tool) if(tool.use_tool(src, user, 0 SECONDS, volume=50)) dismantle(user, TRUE) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS return /obj/structure/falsewall/attackby(obj/item/W, mob/user, params) @@ -127,7 +134,7 @@ deconstruct(disassembled) /obj/structure/falsewall/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(disassembled) new girder_type(loc) if(mineral_amount) @@ -149,9 +156,8 @@ /obj/structure/falsewall/reinforced name = "reinforced wall" desc = "A huge chunk of reinforced metal used to separate rooms." - //icon = 'icons/turf/walls/reinforced_wall.dmi' - icon = 'modular_skyrat/modules/aesthetics/walls/icons/reinforced_wall.dmi' //SKYRAT EDIT CHANGE - AESTHETICS - icon_state = "reinforced_wall-0" + fake_icon = 'icons/turf/walls/reinforced_wall.dmi' + icon_state = "reinforced_wall-open" base_icon_state = "reinforced_wall" walltype = /turf/closed/wall/r_wall mineral = /obj/item/stack/sheet/plasteel @@ -173,8 +179,8 @@ /obj/structure/falsewall/uranium name = "uranium wall" desc = "A wall with uranium plating. This is probably a bad idea." - icon = 'icons/turf/walls/uranium_wall.dmi' - icon_state = "uranium_wall-0" + fake_icon = 'icons/turf/walls/uranium_wall.dmi' + icon_state = "uranium_wall-open" base_icon_state = "uranium_wall" mineral = /obj/item/stack/sheet/mineral/uranium walltype = /turf/closed/wall/mineral/uranium @@ -224,8 +230,8 @@ /obj/structure/falsewall/gold name = "gold wall" desc = "A wall with gold plating. Swag!" - icon = 'icons/turf/walls/gold_wall.dmi' - icon_state = "gold_wall-0" + fake_icon = 'icons/turf/walls/gold_wall.dmi' + icon_state = "gold_wall-open" base_icon_state = "gold_wall" mineral = /obj/item/stack/sheet/mineral/gold walltype = /turf/closed/wall/mineral/gold @@ -236,8 +242,8 @@ /obj/structure/falsewall/silver name = "silver wall" desc = "A wall with silver plating. Shiny." - icon = 'icons/turf/walls/silver_wall.dmi' - icon_state = "silver_wall-0" + fake_icon = 'icons/turf/walls/silver_wall.dmi' + icon_state = "silver_wall-open" base_icon_state = "silver_wall" mineral = /obj/item/stack/sheet/mineral/silver walltype = /turf/closed/wall/mineral/silver @@ -248,8 +254,8 @@ /obj/structure/falsewall/diamond name = "diamond wall" desc = "A wall with diamond plating. You monster." - icon = 'icons/turf/walls/diamond_wall.dmi' - icon_state = "diamond_wall-0" + fake_icon = 'icons/turf/walls/diamond_wall.dmi' + icon_state = "diamond_wall-open" base_icon_state = "diamond_wall" mineral = /obj/item/stack/sheet/mineral/diamond walltype = /turf/closed/wall/mineral/diamond @@ -261,8 +267,8 @@ /obj/structure/falsewall/plasma name = "plasma wall" desc = "A wall with plasma plating. This is definitely a bad idea." - icon = 'icons/turf/walls/plasma_wall.dmi' - icon_state = "plasma_wall-0" + fake_icon = 'icons/turf/walls/plasma_wall.dmi' + icon_state = "plasma_wall-open" base_icon_state = "plasma_wall" mineral = /obj/item/stack/sheet/mineral/plasma walltype = /turf/closed/wall/mineral/plasma @@ -273,8 +279,8 @@ /obj/structure/falsewall/bananium name = "bananium wall" desc = "A wall with bananium plating. Honk!" - icon = 'icons/turf/walls/bananium_wall.dmi' - icon_state = "bananium_wall-0" + fake_icon = 'icons/turf/walls/bananium_wall.dmi' + icon_state = "bananium_wall-open" base_icon_state = "bananium_wall" mineral = /obj/item/stack/sheet/mineral/bananium walltype = /turf/closed/wall/mineral/bananium @@ -286,8 +292,8 @@ /obj/structure/falsewall/sandstone name = "sandstone wall" desc = "A wall with sandstone plating. Rough." - icon = 'icons/turf/walls/sandstone_wall.dmi' - icon_state = "sandstone_wall-0" + fake_icon = 'icons/turf/walls/sandstone_wall.dmi' + icon_state = "sandstone_wall-open" base_icon_state = "sandstone_wall" mineral = /obj/item/stack/sheet/mineral/sandstone walltype = /turf/closed/wall/mineral/sandstone @@ -298,8 +304,8 @@ /obj/structure/falsewall/wood name = "wooden wall" desc = "A wall with wooden plating. Stiff." - icon = 'icons/turf/walls/wood_wall.dmi' - icon_state = "wood_wall-0" + fake_icon = 'icons/turf/walls/wood_wall.dmi' + icon_state = "wood_wall-open" base_icon_state = "wood_wall" mineral = /obj/item/stack/sheet/mineral/wood walltype = /turf/closed/wall/mineral/wood @@ -310,7 +316,9 @@ /obj/structure/falsewall/bamboo name = "bamboo wall" desc = "A wall with bamboo finish. Zen." - icon = 'icons/turf/walls/bamboo_wall.dmi' + fake_icon = 'icons/turf/walls/bamboo_wall.dmi' + icon_state = "bamboo_wall-open" + base_icon_state = "bamboo_wall" mineral = /obj/item/stack/sheet/mineral/bamboo walltype = /turf/closed/wall/mineral/bamboo smoothing_flags = SMOOTH_BITMASK @@ -320,8 +328,8 @@ /obj/structure/falsewall/iron name = "rough iron wall" desc = "A wall with rough metal plating." - icon = 'icons/turf/walls/iron_wall.dmi' - icon_state = "iron_wall-0" + fake_icon = 'icons/turf/walls/iron_wall.dmi' + icon_state = "iron_wall-open" base_icon_state = "iron_wall" mineral = /obj/item/stack/rods mineral_amount = 5 @@ -334,8 +342,8 @@ /obj/structure/falsewall/abductor name = "alien wall" desc = "A wall with alien alloy plating." - icon = 'icons/turf/walls/abductor_wall.dmi' - icon_state = "abductor_wall-0" + fake_icon = 'icons/turf/walls/abductor_wall.dmi' + icon_state = "abductor_wall-open" base_icon_state = "abductor_wall" mineral = /obj/item/stack/sheet/mineral/abductor walltype = /turf/closed/wall/mineral/abductor @@ -346,8 +354,8 @@ /obj/structure/falsewall/titanium name = "wall" desc = "A light-weight titanium wall used in shuttles." - icon = 'icons/turf/walls/shuttle_wall.dmi' - icon_state = "shuttle_wall-0" + fake_icon = 'icons/turf/walls/shuttle_wall.dmi' + icon_state = "shuttle_wall-open" base_icon_state = "shuttle_wall" mineral = /obj/item/stack/sheet/mineral/titanium walltype = /turf/closed/wall/mineral/titanium @@ -358,8 +366,8 @@ /obj/structure/falsewall/plastitanium name = "wall" desc = "An evil wall of plasma and titanium." - icon = 'icons/turf/walls/plastitanium_wall.dmi' - icon_state = "plastitanium_wall-0" + fake_icon = 'icons/turf/walls/plastitanium_wall.dmi' + icon_state = "plastitanium_wall-open" base_icon_state = "plastitanium_wall" mineral = /obj/item/stack/sheet/mineral/plastitanium walltype = /turf/closed/wall/mineral/plastitanium @@ -370,9 +378,9 @@ /obj/structure/falsewall/material name = "wall" desc = "A huge chunk of material used to separate rooms." - icon = 'icons/turf/walls/materialwall.dmi' - icon_state = "materialwall-0" - base_icon_state = "materialwall" + fake_icon = 'icons/turf/walls/material_wall.dmi' + icon_state = "material_wall-open" + base_icon_state = "material_wall" walltype = /turf/closed/wall/material smoothing_flags = SMOOTH_BITMASK smoothing_groups = SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS + SMOOTH_GROUP_MATERIAL_WALLS @@ -380,7 +388,7 @@ material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS /obj/structure/falsewall/material/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(disassembled) new girder_type(loc) for(var/material in custom_materials) @@ -406,7 +414,7 @@ /obj/structure/falsewall/material/ChangeToWall(delete = 1) var/turf/current_turf = get_turf(src) - var/turf/closed/wall/material/new_wall = current_turf.PlaceOnTop(/turf/closed/wall/material) + var/turf/closed/wall/material/new_wall = current_turf.place_on_top(/turf/closed/wall/material) new_wall.set_custom_materials(custom_materials) if(delete) qdel(src) diff --git a/code/game/objects/structures/fans.dm b/code/game/objects/structures/fans.dm index 263a41d970ff97..ef34a07b5b6ed1 100644 --- a/code/game/objects/structures/fans.dm +++ b/code/game/objects/structures/fans.dm @@ -11,14 +11,14 @@ can_atmos_pass = ATMOS_PASS_NO /obj/structure/fans/deconstruct() - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(buildstacktype) new buildstacktype(loc,buildstackamount) qdel(src) /obj/structure/fans/wrench_act(mob/living/user, obj/item/I) ..() - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return TRUE user.visible_message(span_warning("[user] disassembles [src]."), diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index 31ba1cd47aa59f..ab7d410f0966e4 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -108,7 +108,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/fireaxecabinet, 32) /obj/structure/fireaxecabinet/atom_break(damage_flag) . = ..() - if(!broken && !(flags_1 & NODECONSTRUCT_1)) + if(!broken && !(obj_flags & NO_DECONSTRUCTION)) update_appearance() broken = TRUE playsound(src, 'sound/effects/glassbr3.ogg', 100, TRUE) @@ -116,7 +116,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/fireaxecabinet, 32) new /obj/item/shard(loc) /obj/structure/fireaxecabinet/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(held_item && loc) held_item.forceMove(loc) new /obj/item/wallframe/fireaxecabinet(loc) @@ -231,7 +231,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/fireaxecabinet/empty, 32) MAPPING_DIRECTIONAL_HELPERS(/obj/structure/fireaxecabinet/mechremoval, 32) /obj/structure/fireaxecabinet/mechremoval/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(held_item && loc) held_item.forceMove(loc) new /obj/item/wallframe/fireaxecabinet/mechremoval(loc) diff --git a/code/game/objects/structures/fireplace.dm b/code/game/objects/structures/fireplace.dm index 379e58fb64ce4e..19cdab1e6a44fb 100644 --- a/code/game/objects/structures/fireplace.dm +++ b/code/game/objects/structures/fireplace.dm @@ -1,6 +1,6 @@ -#define LOG_BURN_TIMER 5000 //SKYRAT EDIT original: #define LOG_BURN_TIMER 150 +#define LOG_BURN_TIMER 5000 //NOVA EDIT original: #define LOG_BURN_TIMER 150 #define PAPER_BURN_TIMER 5 -#define MAXIMUM_BURN_TIMER 100000 //SKYRAT EDIT original: #define MAXIMUM_BURN_TIMER 3000 +#define MAXIMUM_BURN_TIMER 100000 //NOVA EDIT original: #define MAXIMUM_BURN_TIMER 3000 /obj/structure/fireplace name = "fireplace" @@ -95,15 +95,15 @@ return switch(burn_time_remaining()) - if(0 to 19999) //SKYRAT EDIT original: if(0 to 500) + if(0 to 19999) //NOVA EDIT original: if(0 to 500) . += "fireplace_fire0" - if(20000 to 39999) //SKYRAT EDIT original: if(500 to 1000) + if(20000 to 39999) //NOVA EDIT original: if(500 to 1000) . += "fireplace_fire1" - if(40000 to 59999) //SKYRAT EDIT original: if(1000 to 1500) + if(40000 to 59999) //NOVA EDIT original: if(1000 to 1500) . += "fireplace_fire2" - if(60000 to 79999) //SKYRAT EDIT original: if(1500 to 2000) + if(60000 to 79999) //NOVA EDIT original: if(1500 to 2000) . += "fireplace_fire3" - if(80000 to MAXIMUM_BURN_TIMER) //SKYRAT EDIT original: if(2000 to MAXIMUM_BURN_TIMER) + if(80000 to MAXIMUM_BURN_TIMER) //NOVA EDIT original: if(2000 to MAXIMUM_BURN_TIMER) . += "fireplace_fire4" . += "fireplace_glow" @@ -113,15 +113,15 @@ return switch(burn_time_remaining()) - if(0 to 19999) //SKYRAT EDIT original: if(0 to 500) + if(0 to 19999) //NOVA EDIT original: if(0 to 500) set_light(1) - if(20000 to 39999) //SKYRAT EDIT original: if(500 to 1000) + if(20000 to 39999) //NOVA EDIT original: if(500 to 1000) set_light(2) - if(40000 to 59999) //SKYRAT EDIT original: if(1000 to 1500) + if(40000 to 59999) //NOVA EDIT original: if(1000 to 1500) set_light(3) - if(60000 to 79999) //SKYRAT EDIT original: if(1500 to 2000) + if(60000 to 79999) //NOVA EDIT original: if(1500 to 2000) set_light(4) - if(80000 to MAXIMUM_BURN_TIMER) //SKYRAT EDIT original: if(2000 to MAXIMUM_BURN_TIMER) + if(80000 to MAXIMUM_BURN_TIMER) //NOVA EDIT original: if(2000 to MAXIMUM_BURN_TIMER) set_light(6) /obj/structure/fireplace/process(seconds_per_tick) @@ -167,7 +167,17 @@ fuel_added = 0 update_appearance() adjust_light() - particles = new /particles/smoke/burning/fireplace() + particles = new /particles/smoke/burning() + + switch(dir) + if(SOUTH) + particles.position = list(0, 29, 0) + if(EAST) + particles.position = list(-20, 9, 0) + if(WEST) + particles.position = list(20, 9, 0) + if(NORTH) // there is no icon state for SOUTH + QDEL_NULL(particles) /obj/structure/fireplace/proc/put_out() STOP_PROCESSING(SSobj, src) diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index eab29099dfd940..6fcf85630c6f2b 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -264,7 +264,7 @@ transform = M.Turn(-previous_rotation) /obj/structure/flora/deconstruct() - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(harvested) return ..() @@ -446,12 +446,13 @@ name = "xmas tree" desc = "A wondrous decorated Christmas tree." icon_state = "pine_c" - flags_1 = NODECONSTRUCT_1 //protected by the christmas spirit /obj/structure/flora/tree/pine/xmas/presents icon_state = "pinepresents" desc = "A wondrous decorated Christmas tree. It has presents!" - var/gift_type = /obj/item/a_gift/anything + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF //protected by the christmas spirit + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + var/gift_type = /obj/item/gift/anything var/unlimited = FALSE var/static/list/took_presents //shared between all xmas trees diff --git a/code/game/objects/structures/fluff.dm b/code/game/objects/structures/fluff.dm index 57207cf7abaed1..35fa8017a12502 100644 --- a/code/game/objects/structures/fluff.dm +++ b/code/game/objects/structures/fluff.dm @@ -45,7 +45,7 @@ /obj/structure/fluff/empty_sleeper/nanotrasen name = "broken hypersleep chamber" - desc = "A Nanotrasen hypersleep chamber - this one appears broken. \ + desc = "A Symphionia hypersleep chamber - this one appears broken. \ There are exposed bolts for easy disassembly using a wrench." icon_state = "sleeper-o" @@ -74,7 +74,7 @@ density = TRUE deconstructible = FALSE layer = EDGED_TURF_LAYER - plane = GAME_PLANE_UPPER + /** * A variety of statue in disrepair; parts are broken off and a gemstone is missing */ diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 7b69736857855f..d5cc2cb177fc76 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -99,7 +99,7 @@ return rod.use(amount) var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall/mineral/iron) + T.place_on_top(/turf/closed/wall/mineral/iron) transfer_fingerprints_to(T) qdel(src) return @@ -149,7 +149,7 @@ return sheets.use(amount) var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall) + T.place_on_top(/turf/closed/wall) transfer_fingerprints_to(T) qdel(src) return @@ -194,7 +194,7 @@ return sheets.use(amount) var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall/r_wall) + T.place_on_top(/turf/closed/wall/r_wall) transfer_fingerprints_to(T) qdel(src) return @@ -270,9 +270,9 @@ sheets.use(amount) var/turf/T = get_turf(src) if(sheets.walltype) - T.PlaceOnTop(sheets.walltype) + T.place_on_top(sheets.walltype) else - var/turf/newturf = T.PlaceOnTop(/turf/closed/wall/material) + var/turf/newturf = T.place_on_top(/turf/closed/wall/material) var/list/material_list = list() material_list[GET_MATERIAL_REF(sheets.material_type)] = SHEET_MATERIAL_AMOUNT * 2 if(material_list) @@ -384,7 +384,7 @@ return FALSE /obj/structure/girder/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) var/remains = pick(/obj/item/stack/rods, /obj/item/stack/sheet/iron) new remains(loc) qdel(src) @@ -452,7 +452,7 @@ return R.use(amount) var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall/mineral/cult) + T.place_on_top(/turf/closed/wall/mineral/cult) qdel(src) else @@ -462,7 +462,7 @@ return /obj/structure/girder/cult/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/stack/sheet/runed_metal(drop_location(), 1) qdel(src) @@ -487,7 +487,7 @@ return FALSE var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall) + T.place_on_top(/turf/closed/wall) qdel(src) return TRUE if(RCD_DECONSTRUCT) @@ -524,7 +524,7 @@ return B.use(amount) var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall/mineral/bronze) + T.place_on_top(/turf/closed/wall/mineral/bronze) qdel(src) else diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index bb82c6fb2949f4..959f0c7a74c3bf 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -10,7 +10,7 @@ density = TRUE anchored = TRUE pass_flags_self = PASSGRILLE - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY obj_flags = CAN_BE_HIT | IGNORE_DENSITY pressure_resistance = 5*ONE_ATMOSPHERE armor_type = /datum/armor/structure_grille @@ -52,7 +52,7 @@ /obj/structure/grille/examine(mob/user) . = ..() - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return if(anchored) @@ -68,7 +68,13 @@ var/cost = 0 var/delay = 0 - if(the_rcd.rcd_design_path == /obj/structure/window/fulltile) + if(the_rcd.rcd_design_path == /obj/structure/window) + cost = 4 + delay = 2 SECONDS + else if(the_rcd.rcd_design_path == /obj/structure/window/reinforced) + cost = 6 + delay = 2.5 SECONDS + else if(the_rcd.rcd_design_path == /obj/structure/window/fulltile) cost = 8 delay = 3 SECONDS else if(the_rcd.rcd_design_path == /obj/structure/window/reinforced/fulltile) @@ -101,8 +107,13 @@ var/obj/structure/window/window_path = rcd_data["[RCD_DESIGN_PATH]"] if(!ispath(window_path)) CRASH("Invalid window path type in RCD: [window_path]") - if(!initial(window_path.fulltile)) //only fulltile windows can be built here - return FALSE + + //checks if its a valid build direction + if(!initial(window_path.fulltile)) + if(!valid_build_direction(loc, user.dir, is_fulltile = FALSE)) + balloon_alert(user, "window already here!") + return FALSE + var/obj/structure/window/WD = new window_path(T, user.dir) WD.set_anchored(TRUE) return TRUE @@ -189,11 +200,11 @@ add_fingerprint(user) if(shock(user, 100)) return - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return FALSE tool.play_tool_sound(src, 100) deconstruct() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/grille/screwdriver_act(mob/living/user, obj/item/tool) if(!isturf(loc)) @@ -201,14 +212,14 @@ add_fingerprint(user) if(shock(user, 90)) return FALSE - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return FALSE if(!tool.use_tool(src, user, 0, volume=100)) return FALSE set_anchored(!anchored) user.visible_message(span_notice("[user] [anchored ? "fastens" : "unfastens"] [src]."), \ span_notice("You [anchored ? "fasten [src] to" : "unfasten [src] from"] the floor.")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/grille/attackby(obj/item/W, mob/user, params) user.changeNext_move(CLICK_CD_MELEE) @@ -269,7 +280,7 @@ return //window placing end - else if((W.flags_1 & CONDUCT_1) && shock(user, 70)) + else if((W.obj_flags & CONDUCTS_ELECTRICITY) && shock(user, 70)) return return ..() @@ -288,7 +299,7 @@ /obj/structure/grille/deconstruct(disassembled = TRUE) if(!loc) //if already qdel'd somehow, we do nothing return - if(!(flags_1&NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) var/obj/R = new rods_type(drop_location(), rods_amount) transfer_fingerprints_to(R) qdel(src) @@ -296,7 +307,7 @@ /obj/structure/grille/atom_break() . = ..() - if(!broken && !(flags_1 & NODECONSTRUCT_1)) + if(!broken && !(obj_flags & NO_DECONSTRUCTION)) icon_state = "brokengrille" set_density(FALSE) atom_integrity = 20 diff --git a/code/game/objects/structures/guillotine.dm b/code/game/objects/structures/guillotine.dm index 1c914734cbf5e8..bc56b3838ca112 100644 --- a/code/game/objects/structures/guillotine.dm +++ b/code/game/objects/structures/guillotine.dm @@ -42,7 +42,6 @@ buckle_lying = 0 buckle_prevents_pull = TRUE layer = ABOVE_MOB_LAYER - plane = GAME_PLANE_UPPER /// The sound the guillotine makes when it successfully cuts off a head var/drop_sound = 'sound/weapons/guillotine.ogg' /// The current state of the blade @@ -277,7 +276,7 @@ if(default_unfasten_wrench(user, tool, time = GUILLOTINE_WRENCH_DELAY)) setDir(SOUTH) current_action = GUILLOTINE_ACTION_IDLE - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS current_action = GUILLOTINE_ACTION_IDLE return FALSE diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm index e4ca0419e3bdd3..4f4972d486415f 100644 --- a/code/game/objects/structures/guncase.dm +++ b/code/game/objects/structures/guncase.dm @@ -130,7 +130,6 @@ /obj/structure/guncase/ecase name = "energy gun locker" desc = "A locker that holds energy guns." - icon_state = "ecase" case_type = "egun" gun_category = /obj/item/gun/energy/e_gun diff --git a/code/game/objects/structures/gym/punching_bag.dm b/code/game/objects/structures/gym/punching_bag.dm index 9219153d02619b..9c67bd89cfc09b 100644 --- a/code/game/objects/structures/gym/punching_bag.dm +++ b/code/game/objects/structures/gym/punching_bag.dm @@ -51,8 +51,9 @@ if(istype(boxing_gloves)) stamina_exhaustion = 2 + if(!iscarbon(user)) + return user.adjustStaminaLoss(stamina_exhaustion) - user.add_mood_event("exercise", /datum/mood_event/exercise) user.mind?.adjust_experience(/datum/skill/fitness, 0.1) user.apply_status_effect(/datum/status_effect/exercised) diff --git a/code/game/objects/structures/gym/weight_machine.dm b/code/game/objects/structures/gym/weight_machine.dm index 4fe8e5edfc0754..055c9788c95da0 100644 --- a/code/game/objects/structures/gym/weight_machine.dm +++ b/code/game/objects/structures/gym/weight_machine.dm @@ -1,5 +1,6 @@ #define WORKOUT_XP 5 -#define EXERCISE_STATUS_DURATION 20 SECONDS +#define EXERCISE_STATUS_DURATION 15 SECONDS +#define SAFE_DRUNK_LEVEL 39 /obj/structure/weightmachine name = "chest press machine" @@ -18,6 +19,12 @@ ///The weight action we give to people that buckle themselves to us. var/datum/action/push_weights/weight_action + ///message when drunk user fails to use the machine + var/drunk_message = "You try for a new record and pull through! Through a muscle that is." + + // the total reps you can do before you hit stamcrit based on fitness level + var/static/list/total_workout_reps = list(3, 4, 4, 5, 6, 6, 7) + ///List of messages picked when using the machine. var/static/list/more_weight = list( "pushing it to the limit!", @@ -110,17 +117,25 @@ end_workout() return + // awlways a chance for a person not to fail horribly when drunk + if(user.get_drunk_amount() > SAFE_DRUNK_LEVEL && prob(min(user.get_drunk_amount(), 99))) + playsound(src,'sound/effects/bang.ogg', 50, TRUE) + to_chat(user, span_warning(drunk_message)) + user.take_bodypart_damage(rand(5, 10), wound_bonus = 10) + end_workout() + return + if(issilicon(user)) user.balloon_alert(user, pick(finished_silicon_message)) else user.balloon_alert(user, pick(finished_message)) - user.adjust_nutrition(-3) // feel the burn - user.add_mood_event("exercise", /datum/mood_event/exercise) + user.adjust_nutrition(-5) // feel the burn - // remember the real xp gain is from sleeping after working out - user.mind.adjust_experience(/datum/skill/fitness, WORKOUT_XP) - user.apply_status_effect(/datum/status_effect/exercised, EXERCISE_STATUS_DURATION) + if(iscarbon(user)) + // remember the real xp gain is from sleeping after working out + user.mind.adjust_experience(/datum/skill/fitness, WORKOUT_XP) + user.apply_status_effect(/datum/status_effect/exercised, EXERCISE_STATUS_DURATION) end_workout() @@ -129,24 +144,33 @@ STOP_PROCESSING(SSobj, src) icon_state = initial(icon_state) +/// roughly 8 seconds for 1 workout rep +#define WORKOUT_LENGTH 8 + /obj/structure/weightmachine/process(seconds_per_tick) if(!has_buckled_mobs()) end_workout() return FALSE var/mutable_appearance/workout = mutable_appearance(icon, "[base_icon_state]-o", ABOVE_MOB_LAYER) - SET_PLANE_EXPLICIT(workout, GAME_PLANE_UPPER, src) flick_overlay_view(workout, 0.8 SECONDS) flick("[base_icon_state]-u", src) var/mob/living/user = buckled_mobs[1] - animate(user, pixel_y = pixel_shift_y, time = 4) + animate(user, pixel_y = pixel_shift_y, time = WORKOUT_LENGTH * 0.5) playsound(user, 'sound/machines/creak.ogg', 60, TRUE) - animate(pixel_y = user.base_pixel_y, time = 4) - - var/stamina_exhaustion = 5 - (user.mind.get_skill_level(/datum/skill/fitness) * 0.5) + animate(pixel_y = user.base_pixel_y, time = WORKOUT_LENGTH * 0.5) + + if(!iscarbon(user) || isnull(user.mind)) + return TRUE + // the amount of workouts you can do before you hit stamcrit + var/workout_reps = total_workout_reps[user.mind.get_skill_level(/datum/skill/fitness)] + // total stamina drain of 1 workout calculated based on the workout length + var/stamina_exhaustion = FLOOR(user.maxHealth / workout_reps / WORKOUT_LENGTH, 0.1) user.adjustStaminaLoss(stamina_exhaustion * seconds_per_tick) return TRUE +#undef WORKOUT_LENGTH + /** * Weight lifter subtype */ @@ -157,5 +181,8 @@ pixel_shift_y = 5 + drunk_message = "You raise the bar over you trying to balance it with one hand, keyword tried." + #undef WORKOUT_XP #undef EXERCISE_STATUS_DURATION +#undef SAFE_DRUNK_LEVEL diff --git a/code/game/objects/structures/headpike.dm b/code/game/objects/structures/headpike.dm index 7731af947f0e72..b48cafc85d99f3 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/Exited(atom/movable/gone, direction) . = ..() diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm index fdef93e77d6d46..a3d09340d87e3a 100644 --- a/code/game/objects/structures/holosign.dm +++ b/code/game/objects/structures/holosign.dm @@ -24,7 +24,7 @@ var/turf/our_turf = get_turf(src) if(use_vis_overlay) alpha = 0 - SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, MUTATE_PLANE(GAME_PLANE_UPPER, our_turf), dir, add_appearance_flags = RESET_ALPHA) //you see mobs under it, but you hit them like they are above it + SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, MUTATE_PLANE(GAME_PLANE, our_turf), dir, add_appearance_flags = RESET_ALPHA) //you see mobs under it, but you hit them like they are above it if(source_projector) projector = source_projector LAZYADD(projector.signs, src) @@ -111,6 +111,20 @@ rad_insulation = RAD_LIGHT_INSULATION resistance_flags = FIRE_PROOF | FREEZE_PROOF +/obj/structure/holosign/barrier/atmos/proc/clearview_transparency() + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + alpha = 25 + SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) + var/turf/our_turf = get_turf(src) + SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, MUTATE_PLANE(GAME_PLANE, our_turf), dir) + +/obj/structure/holosign/barrier/atmos/proc/reset_transparency() + mouse_opacity = initial(mouse_opacity) + alpha = initial(alpha) + SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) + var/turf/our_turf = get_turf(src) + SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, MUTATE_PLANE(GAME_PLANE, our_turf), dir, add_appearance_flags = RESET_ALPHA) + /obj/structure/holosign/barrier/atmos/sturdy name = "sturdy holofirelock" max_integrity = 150 @@ -153,17 +167,10 @@ icon_state = "holo_medical" alpha = 125 //lazy :) max_integrity = 1 - var/force_allaccess = FALSE var/buzzcd = 0 -/obj/structure/holosign/barrier/medical/examine(mob/user) - . = ..() - . += span_notice("The biometric scanners are [force_allaccess ? "off" : "on"].") - /obj/structure/holosign/barrier/medical/CanAllowThrough(atom/movable/mover, border_dir) . = ..() - if(force_allaccess) - return TRUE if(istype(mover, /obj/vehicle/ridden)) for(var/M in mover.buckled_mobs) if(ishuman(M)) @@ -188,13 +195,6 @@ return FALSE return TRUE -/obj/structure/holosign/barrier/medical/attack_hand(mob/living/user, list/modifiers) - if(!user.combat_mode && CanPass(user, get_dir(src, user))) - force_allaccess = !force_allaccess - to_chat(user, span_warning("You [force_allaccess ? "deactivate" : "activate"] the biometric scanners.")) //warning spans because you can make the station sick! - else - return ..() - /obj/structure/holosign/barrier/cyborg/hacked name = "Charged Energy Field" desc = "A powerful energy field that blocks movement. Energy arcs off it." diff --git a/code/game/objects/structures/icemoon/cave_entrance.dm b/code/game/objects/structures/icemoon/cave_entrance.dm index add1f278569fc0..20f14844c12b56 100644 --- a/code/game/objects/structures/icemoon/cave_entrance.dm +++ b/code/game/objects/structures/icemoon/cave_entrance.dm @@ -17,7 +17,7 @@ GLOBAL_LIST_INIT(ore_probability, list( faction = list(FACTION_MINING) max_mobs = 3 max_integrity = 250 - mob_types = list(/mob/living/simple_animal/hostile/asteroid/wolf) + mob_types = list(/mob/living/basic/mining/wolf) move_resist = INFINITY anchored = TRUE scanner_taggable = TRUE diff --git a/code/game/objects/structures/janitor.dm b/code/game/objects/structures/janitor.dm index 7721a6d39ac9c1..4f5bdf28127325 100644 --- a/code/game/objects/structures/janitor.dm +++ b/code/game/objects/structures/janitor.dm @@ -229,7 +229,7 @@ /obj/structure/mop_bucket/janitorialcart/crowbar_act(mob/living/user, obj/item/tool) if(!CART_HAS_MINIMUM_REAGENT_VOLUME) balloon_alert(user, "mop bucket is empty!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS user.balloon_alert_to_viewers("starts dumping [src]...", "started dumping [src]...") user.visible_message(span_notice("[user] begins to dumping the contents of [src]'s mop bucket."), span_notice("You begin to dump the contents of [src]'s mop bucket...")) if(tool.use_tool(src, user, 5 SECONDS, volume = 50)) @@ -238,7 +238,7 @@ reagents.expose(loc) reagents.clear_reagents() update_appearance(UPDATE_OVERLAYS) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/mop_bucket/janitorialcart/attackby_secondary(obj/item/weapon, mob/user, params) . = ..() diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 1b2816d73db92d..0f11779ead2e47 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -1,6 +1,6 @@ #define MEATSPIKE_IRONROD_REQUIREMENT 4 -/obj/structure/kitchenspike_frame//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/structure/kitchenspike_frame//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "meatspike frame" icon = 'icons/obj/service/kitchen.dmi' icon_state = "spikeframe" @@ -64,7 +64,7 @@ return balloon_alert(user, "[MEATSPIKE_IRONROD_REQUIREMENT] rods needed!") -/obj/structure/kitchenspike//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/structure/kitchenspike//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "meat spike" icon = 'icons/obj/service/kitchen.dmi' icon_state = "spike" @@ -125,6 +125,7 @@ m180.Turn(180) animate(target, transform = m180, time = 3) target.pixel_y = target.base_pixel_y + PIXEL_Y_OFFSET_LYING + ADD_TRAIT(target, TRAIT_MOVE_UPSIDE_DOWN, REF(src)) /obj/structure/kitchenspike/user_unbuckle_mob(mob/living/buckled_mob, mob/user) if(buckled_mob != user) @@ -156,6 +157,7 @@ m180.Turn(180) animate(buckled_mob, transform = m180, time = 3) buckled_mob.pixel_y = buckled_mob.base_pixel_y + PIXEL_Y_OFFSET_LYING + REMOVE_TRAIT(buckled_mob, TRAIT_MOVE_UPSIDE_DOWN, REF(src)) /obj/structure/kitchenspike/deconstruct(disassembled = TRUE) if(disassembled) diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm index 9b7b5590018e4e..ef6ea9d433e8f8 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/lattice.dm b/code/game/objects/structures/lattice.dm index f6d5b933494c37..72f28ed82517a5 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -58,7 +58,7 @@ return T.attackby(C, user) //hand this off to the turf instead (for building plating, catwalks, etc) /obj/structure/lattice/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new build_material(get_turf(src), number_of_mats) qdel(src) @@ -73,7 +73,7 @@ if(design_structure == /turf/open/floor/plating) var/turf/T = src.loc if(isgroundlessturf(T)) - T.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + T.place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) qdel(src) return TRUE if(design_structure == /obj/structure/lattice/catwalk) @@ -158,14 +158,18 @@ /obj/structure/lattice/lava/deconstruction_hints(mob/user) return span_notice("The rods look like they could be cut, but the heat treatment will shatter off. There's space for a tile.") -/obj/structure/lattice/lava/attackby(obj/item/C, mob/user, params) +/obj/structure/lattice/lava/attackby(obj/item/attacking_item, mob/user, params) . = ..() - if(istype(C, /obj/item/stack/tile/iron)) - var/obj/item/stack/tile/iron/P = C - if(P.use(1)) - to_chat(user, span_notice("You construct a floor plating, as lava settles around the rods.")) - playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE) - new /turf/open/floor/plating(locate(x, y, z)) - else - to_chat(user, span_warning("You need one floor tile to build atop [src].")) + if(!istype(attacking_item, /obj/item/stack/tile/iron)) return + var/obj/item/stack/tile/iron/attacking_tiles = attacking_item + if(!attacking_tiles.use(1)) + to_chat(user, span_warning("You need one floor tile to build atop [src].")) + return + to_chat(user, span_notice("You construct new plating with [src] as support.")) + playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE) + + var/turf/turf_we_place_on = get_turf(src) + turf_we_place_on.place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + + qdel(src) diff --git a/code/game/objects/structures/loom.dm b/code/game/objects/structures/loom.dm index d01c17b0a6d69d..2d10df50a747d6 100644 --- a/code/game/objects/structures/loom.dm +++ b/code/game/objects/structures/loom.dm @@ -21,4 +21,4 @@ /obj/structure/loom/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool, time = 0.5 SECONDS) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS diff --git a/code/game/objects/structures/maintenance.dm b/code/game/objects/structures/maintenance.dm index 33f27f40c47398..78a67198fefdc1 100644 --- a/code/game/objects/structures/maintenance.dm +++ b/code/game/objects/structures/maintenance.dm @@ -9,7 +9,7 @@ at the cost of risking a vicious bite.**/ density = FALSE ///This var stores the hidden item that might be able to be retrieved from the trap var/obj/item/hidden_item - ///This var determines if there is a chance to recieve a bite when sticking your hand into the water. + ///This var determines if there is a chance to receive a bite when sticking your hand into the water. var/critter_infested = TRUE ///weighted loot table for what loot you can find inside the moisture trap. ///the actual loot isn't that great and should probably be improved and expanded later. @@ -267,6 +267,7 @@ at the cost of risking a vicious bite.**/ COMSIG_ATOM_EXIT = PROC_REF(blow_steam), ) AddElement(/datum/element/connect_loc, loc_connections) + register_context() update_icon_state() /obj/structure/steam_vent/attack_hand(mob/living/user, list/modifiers) @@ -283,6 +284,16 @@ at the cost of risking a vicious bite.**/ return blow_steam() +/obj/structure/steam_vent/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + if(isnull(held_item)) + context[SCREENTIP_CONTEXT_LMB] = vent_active ? "Close valve" : "Open valve" + return CONTEXTUAL_SCREENTIP_SET + if(held_item.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_RMB] = "Deconstruct" + return CONTEXTUAL_SCREENTIP_SET + return . + /obj/structure/steam_vent/wrench_act_secondary(mob/living/user, obj/item/tool) . = ..() if(vent_active) @@ -294,7 +305,7 @@ at the cost of risking a vicious bite.**/ return TRUE /obj/structure/steam_vent/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/stack/sheet/iron(loc, 1) new /obj/item/stock_parts/water_recycler(loc, 1) qdel(src) diff --git a/code/game/objects/structures/mannequin.dm b/code/game/objects/structures/mannequin.dm index 618b935e6903da..a4cc8a99ed1b9d 100644 --- a/code/game/objects/structures/mannequin.dm +++ b/code/game/objects/structures/mannequin.dm @@ -87,7 +87,7 @@ /obj/structure/mannequin/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/mannequin/update_overlays() . = ..() @@ -109,11 +109,11 @@ var/datum/sprite_accessory/socks/socks = GLOB.socks_list[socks_name] if(socks) . += mutable_appearance(socks.icon, socks.icon_state, -BODY_LAYER) - //SKYRAT EDIT ADDITION BEGIN - Underwear and Bra split + //NOVA EDIT ADDITION BEGIN - Underwear and Bra split var/datum/sprite_accessory/bra/bra = GLOB.bra_list[bra_name] if(bra) . += mutable_appearance(bra.icon, bra.icon_state, -BODY_LAYER) - //SKYRAT EDIT END + //NOVA EDIT END for(var/slot_flag in worn_items) var/obj/item/worn_item = worn_items[slot_flag] @@ -168,7 +168,7 @@ . = ..() if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return - var/choice = tgui_input_list(user, "Underwear, Bra, Undershirt, or Socks?", "Changing", list("Underwear", "Bra", "Undershirt","Socks")) //SKYRAT EDIT ADDITION - Underwear and Bra split + var/choice = tgui_input_list(user, "Underwear, Bra, Undershirt, or Socks?", "Changing", list("Underwear", "Bra", "Undershirt","Socks")) //NOVA EDIT ADDITION - Underwear and Bra split if(!Adjacent(user)) return switch(choice) @@ -184,12 +184,12 @@ var/new_socks = tgui_input_list(user, "Select the mannequin's socks", "Changing", GLOB.socks_list) if(new_socks) socks_name = new_socks - //SKYRAT EDIT ADDITION BEGIN - Underwear and Bra split + //NOVA EDIT ADDITION BEGIN - Underwear and Bra split if("Bra") var/new_bra = tgui_input_list(user, "Select the mannequin's bra", "Changing", GLOB.bra_list) if(new_bra) bra_name = new_bra - //SKYRAT EDIT END + //NOVA EDIT END update_appearance() /obj/structure/mannequin/wood diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index 5baacb8a651896..03e37346c5714a 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -154,7 +154,7 @@ /obj/structure/mineral_door/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool, time = 4 SECONDS) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /////////////////////// TOOL OVERRIDES /////////////////////// diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 76363a1b07b534..51ec52e458427f 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -26,7 +26,6 @@ integrity_failure = 0.5 max_integrity = 200 var/list/mirror_options = INERT_MIRROR_OPTIONS - var/magical_mirror = FALSE ///Flags this race must have to be selectable with this type of mirror. var/race_flags = MIRROR_MAGIC @@ -80,10 +79,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28) /obj/structure/mirror/attack_hand(mob/living/carbon/human/user) . = ..() - if(. || !ishuman(user) || broken || !magical_mirror) // SKYRAT EDIT CHANGE - MUNDANE MIRRORS DON'T LET YOU CHANGE - ORIGINAL: if(. || !ishuman(user) || broken) + if(. || !ishuman(user) || broken || !istype(src, /obj/structure/mirror/magic)) // NOVA EDIT CHANGE - MUNDANE MIRRORS DON'T LET YOU CHANGE - ORIGINAL: if(. || !ishuman(user) || broken) return TRUE - if(!user.can_perform_action(src, FORBID_TELEKINESIS_REACH) && !magical_mirror) + if(!istype(src, /obj/structure/mirror/magic) && !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return TRUE //no tele-grooming (if nonmagical) return display_radial_menu(user) @@ -110,20 +109,26 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28) return display_radial_menu(user) /obj/structure/mirror/proc/change_beard(mob/living/carbon/human/beard_dresser) - if(beard_dresser.physique != FEMALE && !magical_mirror) - var/new_style = tgui_input_list(beard_dresser, "Select a facial hairstyle", "Grooming", GLOB.facial_hairstyles_list) - if(isnull(new_style)) - return TRUE - if(HAS_TRAIT(beard_dresser, TRAIT_SHAVED)) - to_chat(beard_dresser, span_notice("If only growing back facial hair were that easy for you... The reminder makes you feel terrible.")) - beard_dresser.add_mood_event("bald_hair_day", /datum/mood_event/bald_reminder) - return TRUE - beard_dresser.set_facial_hairstyle(new_style, update = TRUE) - else + if(beard_dresser.physique == FEMALE) if(beard_dresser.facial_hairstyle == "Shaved") - to_chat(beard_dresser, span_notice("You realize you don't have any facial hair.")) - return - beard_dresser.set_facial_hairstyle("Shaved", update = TRUE) + balloon_alert(beard_dresser, "nothing to shave!") + return TRUE + var/shave_beard = tgui_alert(beard_dresser, "Shave your beard?", "Grooming", list("Yes", "No")) + if(shave_beard == "Yes") + beard_dresser.set_facial_hairstyle("Shaved", update = TRUE) + return TRUE + + var/new_style = tgui_input_list(beard_dresser, "Select a facial hairstyle", "Grooming", GLOB.facial_hairstyles_list) + + if(isnull(new_style)) + return TRUE + + if(HAS_TRAIT(beard_dresser, TRAIT_SHAVED)) + to_chat(beard_dresser, span_notice("If only growing back facial hair were that easy for you... The reminder makes you feel terrible.")) + beard_dresser.add_mood_event("bald_hair_day", /datum/mood_event/bald_reminder) + return TRUE + + beard_dresser.set_facial_hairstyle(new_style, update = TRUE) /obj/structure/mirror/proc/change_hair(mob/living/carbon/human/hairdresser) var/new_style = tgui_input_list(hairdresser, "Select a hairstyle", "Grooming", GLOB.hairstyles_list) @@ -256,7 +261,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28) /obj/structure/mirror/atom_break(damage_flag, mapload) . = ..() - if(broken || (flags_1 & NODECONSTRUCT_1)) + if(broken || (obj_flags & NO_DECONSTRUCTION)) return icon_state = "mirror_broke" if(!mapload) @@ -266,7 +271,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28) broken = TRUE /obj/structure/mirror/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(!disassembled) new /obj/item/shard(loc) else @@ -317,7 +322,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28) desc = "Turn and face the strange... face." icon_state = "magic_mirror" mirror_options = MAGIC_MIRROR_OPTIONS - magical_mirror = TRUE /obj/structure/mirror/magic/Initialize(mapload) . = ..() @@ -329,6 +333,13 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28) selectable_races[initial(species_type.name)] = species_type selectable_races = sort_list(selectable_races) +/obj/structure/mirror/magic/change_beard(mob/living/carbon/human/beard_dresser) // magical mirrors do nothing but give you the damn beard + var/new_style = tgui_input_list(beard_dresser, "Select a facial hairstyle", "Grooming", GLOB.facial_hairstyles_list) + if(isnull(new_style)) + return TRUE + beard_dresser.set_facial_hairstyle(new_style, update = TRUE) + return TRUE + //Magic mirrors can change hair color as well /obj/structure/mirror/magic/change_hair(mob/living/carbon/human/user) var/hairchoice = tgui_alert(user, "Hairstyle or hair color?", "Change Hair", list("Style", "Color")) @@ -346,11 +357,11 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28) user.set_facial_haircolor(sanitize_hexcolor(new_face_color), update = FALSE) user.dna.update_ui_block(DNA_FACIAL_HAIR_COLOR_BLOCK) user.update_body_parts() - user.update_mutant_bodyparts(force_update = TRUE) /// SKYRAT EDIT ADDITION - Mirrors are no longer scared of colored ears + user.update_mutant_bodyparts(force_update = TRUE) /// NOVA EDIT ADDITION - Mirrors are no longer scared of colored ears /obj/structure/mirror/magic/attack_hand(mob/living/carbon/human/user) . = ..() - if(!.) + if(.) return TRUE if(HAS_TRAIT(user, TRAIT_ADVANCEDTOOLUSER) && HAS_TRAIT(user, TRAIT_LITERATE)) @@ -378,11 +389,13 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28) /obj/structure/mirror/magic/pride/attack_hand(mob/living/carbon/human/user) . = ..() - if(!.) + if(.) return TRUE - user.visible_message(span_danger("The ground splits beneath [user] as [user.p_their()] hand leaves the mirror!"), \ - span_notice("Perfect. Much better! Now nobody will be able to resist yo-")) + user.visible_message( + span_bolddanger("The ground splits beneath [user] as [user.p_their()] hand leaves the mirror!"), + span_notice("Perfect. Much better! Now nobody will be able to resist yo-"), + ) var/turf/user_turf = get_turf(user) var/list/levels = SSmapping.levels_by_trait(ZTRAIT_SPACE_RUINS) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index c8a97f0cb8a113..43d11eaaa71ee7 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -52,7 +52,6 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an connected = new connected(src) connected.connected = src GLOB.bodycontainers += src - toggle_organ_decay(src) register_context() /obj/structure/bodycontainer/add_context(atom/source, list/context, obj/item/held_item, mob/user) @@ -106,9 +105,8 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an return attack_hand(user) /obj/structure/bodycontainer/deconstruct(disassembled = TRUE) - if (!(flags_1 & NODECONSTRUCT_1)) + if (!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/stack/sheet/iron(loc, 5) - toggle_organ_decay(src) qdel(src) /obj/structure/bodycontainer/container_resist_act(mob/living/user) @@ -135,7 +133,6 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 2) /obj/structure/bodycontainer/proc/open() - toggle_organ_decay(src) playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE) playsound(src, 'sound/effects/roll.ogg', 5, TRUE) var/turf/T = get_step(src, dir) @@ -159,9 +156,13 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an else if(isdead(AM)) continue AM.forceMove(src) - toggle_organ_decay(src) update_appearance() +#define MORGUE_EMPTY 1 +#define MORGUE_NO_MOBS 2 +#define MORGUE_ONLY_BRAINDEAD 3 +#define MORGUE_HAS_REVIVABLE 4 + /* * Morgue */ @@ -177,10 +178,59 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an /// Whether or not this morgue beeps to alert parameds of revivable corpses. var/beeper = TRUE /// The minimum time between beeps. - var/beep_cooldown = 5 SECONDS + var/beep_cooldown = 1 MINUTES + /// Whether this morgue tray has revivables or not + var/morgue_state = MORGUE_EMPTY /// The cooldown to prevent this from spamming beeps. COOLDOWN_DECLARE(next_beep) + /// Internal air of this morgue, for cooling purposes. + var/datum/gas_mixture/internal_air + + /// The rate at which the internal air mixture cools + var/cooling_rate_per_second = 4 + /// Minimum temperature of the internal air mixture + var/minimum_temperature = T0C - 60 + + +/obj/structure/bodycontainer/morgue/Initialize(mapload) + ..() + return INITIALIZE_HINT_LATELOAD + +/obj/structure/bodycontainer/morgue/LateInitialize() + . = ..() + var/datum/gas_mixture/external_air = loc.return_air() + if(external_air) + internal_air = external_air.copy() + else + internal_air = new() + START_PROCESSING(SSobj, src) + +/obj/structure/bodycontainer/morgue/return_air() + return internal_air + +/obj/structure/bodycontainer/morgue/process(seconds_per_tick) + update_morgue_status() + update_appearance(UPDATE_ICON_STATE) + if(morgue_state == MORGUE_HAS_REVIVABLE && beeper && COOLDOWN_FINISHED(src, next_beep)) + playsound(src, 'sound/weapons/gun/general/empty_alarm.ogg', 50, FALSE) //Revive them you blind fucks + COOLDOWN_START(src, next_beep, beep_cooldown) + + if(!connected || connected.loc != src) + var/datum/gas_mixture/current_exposed_air = loc.return_air() + if(!current_exposed_air) + return + // The internal air won't cool down the external air when the freezer is opened. + internal_air.temperature = max(current_exposed_air.temperature, internal_air.temperature) + if(current_exposed_air.equalize(internal_air)) + var/turf/location = get_turf(src) + location.air_update_turf() + else + if(internal_air.temperature <= minimum_temperature) + return + var/temperature_decrease_this_tick = min(cooling_rate_per_second * seconds_per_tick, internal_air.temperature - minimum_temperature) + internal_air.temperature -= temperature_decrease_this_tick + /obj/structure/bodycontainer/morgue/beeper_off name = "secure morgue" desc = "Used to keep bodies in until someone fetches them. Starts with their beeper off." @@ -191,21 +241,62 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an context[SCREENTIP_CONTEXT_ALT_LMB] = "[beeper ? "disable beeper" : "enable beeper"]" return CONTEXTUAL_SCREENTIP_SET -/obj/structure/bodycontainer/morgue/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) - . = ..() - if(!istype(arrived, /obj/structure/closet/body_bag)) +/obj/structure/bodycontainer/morgue/proc/update_morgue_status() + if(length(contents) <= 1) + morgue_state = MORGUE_EMPTY + return + + var/list/stored_living = get_all_contents_type(/mob/living) // Search for mobs in all contents. + if(!length(stored_living)) + morgue_state = MORGUE_NO_MOBS return - var/obj/structure/closet/body_bag/arrived_bag = arrived + + if(obj_flags & EMAGGED) + morgue_state = MORGUE_ONLY_BRAINDEAD + return + + for(var/mob/living/occupant as anything in stored_living) + if(occupant.stat == DEAD) + if(iscarbon(occupant)) + var/mob/living/carbon/carbon_occupant = occupant + if(!carbon_occupant.can_defib_client()) + continue + else + if(HAS_TRAIT(occupant, TRAIT_SUICIDED) || HAS_TRAIT(occupant, TRAIT_BADDNA) || (!occupant.key && !occupant.get_ghost(FALSE, TRUE))) + continue + morgue_state = MORGUE_HAS_REVIVABLE + return + morgue_state = MORGUE_ONLY_BRAINDEAD + +/obj/structure/bodycontainer/morgue/proc/handle_bodybag_enter(obj/structure/closet/body_bag/arrived_bag) if(!arrived_bag.tag_name) return name = "[initial(name)] - ([arrived_bag.tag_name])" update_appearance(UPDATE_ICON) +/obj/structure/bodycontainer/morgue/proc/handle_bodybag_exit(obj/structure/closet/body_bag/exited_bag) + name = initial(name) + update_appearance(UPDATE_ICON) + +/obj/structure/bodycontainer/morgue/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + . = ..() + if(istype(arrived, /obj/structure/closet/body_bag)) + return handle_bodybag_enter(arrived) + +/obj/structure/bodycontainer/morgue/close() + . = ..() + update_morgue_status() + update_appearance(UPDATE_ICON_STATE) + /obj/structure/bodycontainer/morgue/Exited(atom/movable/gone, direction) . = ..() if(istype(gone, /obj/structure/closet/body_bag)) - name = initial(name) - update_appearance(UPDATE_ICON) + return handle_bodybag_exit(gone) + +/obj/structure/bodycontainer/morgue/open() + . = ..() + update_morgue_status() + update_appearance(UPDATE_ICON_STATE) /obj/structure/bodycontainer/morgue/examine(mob/user) . = ..() @@ -231,27 +322,20 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an icon_state = "morgue0" return ..() - if(contents.len == 1) // Empty + if(morgue_state == MORGUE_EMPTY) // Empty icon_state = "morgue1" return ..() - var/list/compiled = get_all_contents_type(/mob/living) // Search for mobs in all contents. - if(!length(compiled)) // No mobs? + if(morgue_state == MORGUE_NO_MOBS) // No mobs? icon_state = "morgue3" return ..() - if(!(obj_flags & EMAGGED)) - for(var/mob/living/occupant as anything in compiled) - var/mob/living/mob_occupant = get_mob_or_brainmob(occupant) - if(!mob_occupant.client || HAS_TRAIT(mob_occupant, TRAIT_SUICIDED) || HAS_TRAIT(mob_occupant, TRAIT_BADDNA)) - continue - icon_state = "morgue4" // Revivable - if(mob_occupant.stat == DEAD && beeper && COOLDOWN_FINISHED(src, next_beep)) - playsound(src, 'sound/weapons/gun/general/empty_alarm.ogg', 50, FALSE) //Revive them you blind fucks - COOLDOWN_START(src, next_beep, beep_cooldown) - return ..() + if(morgue_state == MORGUE_HAS_REVIVABLE) + icon_state = "morgue4" // Revivable + return ..() - icon_state = "morgue2" // Dead, brainded mob. + if(morgue_state == MORGUE_ONLY_BRAINDEAD) + icon_state = "morgue2" // Dead, brainded mob. return ..() /obj/structure/bodycontainer/morgue/update_overlays() @@ -261,6 +345,11 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an if(name != initial(name)) . += "[base_icon_state]_label" +#undef MORGUE_EMPTY +#undef MORGUE_NO_MOBS +#undef MORGUE_ONLY_BRAINDEAD +#undef MORGUE_HAS_REVIVABLE + /* * Crematorium */ @@ -336,10 +425,6 @@ GLOBAL_LIST_EMPTY(crematoriums) qdel(M) for(var/obj/O in conts) //conts defined above, ignores crematorium and tray - // SKYRAT EDIT ADDITION - if(istype(O, /obj/item/goldeneye_key)) - continue - // SKYRAT EDIT END if(istype(O, /obj/effect/dummy/phased_mob)) //they're not physical, don't burn em. continue qdel(O) diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 534622619d122f..c737f21e6d9e68 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -111,7 +111,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/noticeboard, 32) update_appearance(UPDATE_ICON) /obj/structure/noticeboard/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(!disassembled) new /obj/item/stack/sheet/mineral/wood(loc) else diff --git a/code/game/objects/structures/ore_containers.dm b/code/game/objects/structures/ore_containers.dm new file mode 100644 index 00000000000000..6bc6f680116f45 --- /dev/null +++ b/code/game/objects/structures/ore_containers.dm @@ -0,0 +1,62 @@ +///structure to contain ores +/obj/structure/ore_container + +/obj/structure/ore_container/attackby(obj/item/ore, mob/living/carbon/human/user, list/modifiers) + if(istype(ore, /obj/item/stack/ore) && !user.combat_mode) + ore.forceMove(src) + return + return ..() + +/obj/structure/ore_container/Entered(atom/movable/mover) + . = ..() + update_appearance(UPDATE_OVERLAYS) + +/obj/structure/ore_container/Exited(atom/movable/mover) + . = ..() + update_appearance(UPDATE_OVERLAYS) + +/obj/structure/ore_container/ui_interact(mob/user, datum/tgui/ui) + . = ..() + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "OreContainer") + ui.open() + +/obj/structure/ore_container/ui_data(mob/user) + var/list/data = list() + data["ores"] = list() + for(var/obj/item/stack/ore/ore_item in contents) + data["ores"] += list(list( + "id" = REF(ore_item), + "name" = ore_item.name, + "amount" = ore_item.amount, + )) + return data + +/obj/structure/ore_container/ui_static_data(mob/user) + var/list/data = list() + data["ore_images"] = list() + for(var/obj/item/stack/ore_item as anything in subtypesof(/obj/item/stack/ore)) + data["ore_images"] += list(list( + "name" = initial(ore_item.name), + "icon" = icon2base64(getFlatIcon(image(icon = initial(ore_item.icon), icon_state = initial(ore_item.icon_state)), no_anim=TRUE)) + )) + return data + +/obj/structure/ore_container/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + + if(. || !isliving(ui.user)) + return TRUE + + var/mob/living/customer = ui.user + var/obj/item/stack_to_move + switch(action) + if("withdraw") + if(isnull(params["reference"])) + return TRUE + stack_to_move = locate(params["reference"]) in contents + if(isnull(stack_to_move)) + return TRUE + stack_to_move.forceMove(get_turf(customer)) + return TRUE diff --git a/code/game/objects/structures/petrified_statue.dm b/code/game/objects/structures/petrified_statue.dm index 54896c2e414055..a752faba40c339 100644 --- a/code/game/objects/structures/petrified_statue.dm +++ b/code/game/objects/structures/petrified_statue.dm @@ -91,8 +91,24 @@ visible_message(span_danger(destruction_message)) qdel(src) +/obj/structure/statue/petrified/animate_atom_living(mob/living/owner) + if(isnull(petrified_mob)) + return ..() + var/mob/living/basic/statue/new_statue = new(drop_location()) + new_statue.name = "statue of [petrified_mob.name]" + if(owner) + new_statue.befriend(owner) + new_statue.icon = icon + new_statue.icon_state = icon_state + new_statue.copy_overlays(src, TRUE) + new_statue.atom_colours = atom_colours.Copy() + petrified_mob.mind?.transfer_to(new_statue) + to_chat(new_statue, span_userdanger("You are an animate statue. You cannot move when monitored, but are nearly invincible and deadly when unobserved! [owner ? "Do not harm [owner], your creator" : ""].")) + forceMove(new_statue) + /mob/proc/petrify(statue_timer) + return /mob/living/carbon/human/petrify(statue_timer, save_brain, colorlist) if(!isturf(loc)) diff --git a/code/game/objects/structures/plaques/static_plaques.dm b/code/game/objects/structures/plaques/static_plaques.dm index 06538ea2ef1f18..923ca66d683343 100644 --- a/code/game/objects/structures/plaques/static_plaques.dm +++ b/code/game/objects/structures/plaques/static_plaques.dm @@ -63,7 +63,7 @@ Please be aware that riding the tram can cause a variety of injuries, including but not limited to: slips, trips, and falls; collisions with other passengers or objects; strains, sprains, and other musculoskeletal injuries; \ cuts, bruises, and lacerations; and more severe injuries such as head trauma, spinal cord injuries, and even death. These injuries can be caused by a variety of factors, including the movements of the tram, the behaviour \ of other passengers, and unforeseen circumstances such as foul play or mechanical issues.

    \ - By entering the tram, guideway, or crossings you agree Nanotrasen is not liable for any injuries, damages, or losses that may occur. If you do not agree to these terms, please do not use the tram.
    " + By entering the tram, guideway, or crossings you agree Symphionia is not liable for any injuries, damages, or losses that may occur. If you do not agree to these terms, please do not use the tram.
    " /obj/structure/plaque/static_plaque/tram/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -218,7 +218,7 @@ /obj/structure/sign/plaques/kiddie/perfect_man name = "\improper 'Perfect Man' sign" - desc = "A guide to the exhibit, explaining how recent developments in mindshield implant and cloning technologies by Nanotrasen Corporation have led to the development and the effective immortality of the 'perfect man', the loyal Nanotrasen Employee." + desc = "A guide to the exhibit, explaining how recent developments in mindshield implant and cloning technologies by Symphionia Corporation have led to the development and the effective immortality of the 'perfect man', the loyal Symphionia Employee." /obj/structure/sign/plaques/kiddie/perfect_drone name = "\improper 'Perfect Drone' sign" diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm index b594be80cf6036..f4834ecf48acc4 100644 --- a/code/game/objects/structures/plasticflaps.dm +++ b/code/game/objects/structures/plasticflaps.dm @@ -36,7 +36,7 @@ /obj/structure/plasticflaps/proc/gen_overlay() var/turf/our_turf = get_turf(src) - SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, MUTATE_PLANE(GAME_PLANE_UPPER, our_turf), dir, add_appearance_flags = RESET_ALPHA) //you see mobs under it, but you hit them like they are above it + SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, MUTATE_PLANE(GAME_PLANE, our_turf), dir, add_appearance_flags = RESET_ALPHA) //you see mobs under it, but you hit them like they are above it /obj/structure/plasticflaps/examine(mob/user) . = ..() @@ -125,7 +125,7 @@ /obj/structure/plasticflaps/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/stack/sheet/plastic/five(loc) qdel(src) diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm index 5aaed01e0b86ca..3604bd06c63c85 100644 --- a/code/game/objects/structures/railings.dm +++ b/code/game/objects/structures/railings.dm @@ -9,7 +9,6 @@ anchored = TRUE pass_flags_self = LETPASSTHROW|PASSSTRUCTURE layer = ABOVE_MOB_LAYER - plane = GAME_PLANE_UPPER /// 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 = 25 @@ -17,6 +16,8 @@ var/climbable = TRUE ///Initial direction of the railing. var/ini_dir + ///item released when deconstructed + var/item_deconstruct = /obj/item/stack/rods /datum/armor/structure_railing melee = 35 @@ -98,19 +99,17 @@ return TRUE /obj/structure/railing/deconstruct(disassembled) - if(!(flags_1 & NODECONSTRUCT_1)) - if (istype(src,/obj/structure/railing/corner)) // Corner railings only cost 1 rod - var/obj/item/stack/rods/rod = new /obj/item/stack/rods(drop_location(), 1) - transfer_fingerprints_to(rod) - else - var/obj/item/stack/rods/rod = new /obj/item/stack/rods(drop_location(), 2) - transfer_fingerprints_to(rod) + if((obj_flags & NO_DECONSTRUCTION)) + return ..() + var/rods_to_make = istype(src,/obj/structure/railing/corner) ? 1 : 2 + var/obj/rod = new item_deconstruct(drop_location(), rods_to_make) + transfer_fingerprints_to(rod) return ..() ///Implements behaviour that makes it possible to unanchor the railing. /obj/structure/railing/wrench_act(mob/living/user, obj/item/I) . = ..() - if(flags_1&NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return to_chat(user, span_notice("You begin to [anchored ? "unfasten the railing from":"fasten the railing to"] the floor...")) if(I.use_tool(src, user, volume = 75, extra_checks = CALLBACK(src, PROC_REF(check_anchored), anchored))) @@ -121,7 +120,7 @@ /obj/structure/railing/CanPass(atom/movable/mover, border_dir) . = ..() if(border_dir & dir) - return . || mover.throwing || mover.movement_type & (FLYING | FLOATING) + return . || mover.throwing || (mover.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) return TRUE /obj/structure/railing/CanAStarPass(to_dir, datum/can_pass_info/pass_info) @@ -144,7 +143,7 @@ if (leaving.throwing) return - if (leaving.movement_type & (PHASING | FLYING | FLOATING)) + if (leaving.movement_type & (PHASING|MOVETYPES_NOT_TOUCHING_GROUND)) return if (leaving.move_force >= MOVE_FORCE_EXTREMELY_STRONG) @@ -156,3 +155,34 @@ /obj/structure/railing/proc/check_anchored(checked_anchored) if(anchored == checked_anchored) return TRUE + + +/obj/structure/railing/wooden_fence + name = "wooden fence" + desc = "wooden fence meant to keep animals in." + icon = 'icons/obj/structures.dmi' + icon_state = "wooden_railing" + item_deconstruct = /obj/item/stack/sheet/mineral/wood + layer = ABOVE_MOB_LAYER + +/obj/structure/railing/wooden_fence/Initialize(mapload) + . = ..() + RegisterSignal(src, COMSIG_ATOM_DIR_CHANGE, PROC_REF(on_change_layer)) + adjust_dir_layer(dir) + +/obj/structure/railing/wooden_fence/proc/on_change_layer(datum/source, old_dir, new_dir) + SIGNAL_HANDLER + adjust_dir_layer(new_dir) + +/obj/structure/railing/wooden_fence/proc/adjust_dir_layer(direction) + var/new_layer = (direction & NORTH) ? MOB_LAYER : ABOVE_MOB_LAYER + layer = new_layer + + +/obj/structure/railing/corner/end/wooden_fence + icon = 'icons/obj/structures.dmi' + icon_state = "wooden_railing_corner" + +/obj/structure/railing/corner/end/flip/wooden_fence + icon = 'icons/obj/structures.dmi' + icon_state = "wooden_railing_corner_flipped" diff --git a/code/game/objects/structures/reflector.dm b/code/game/objects/structures/reflector.dm index 22d40c01412bab..0d6799b05835c3 100644 --- a/code/game/objects/structures/reflector.dm +++ b/code/game/objects/structures/reflector.dm @@ -79,21 +79,21 @@ P.decayedRange = max(P.decayedRange--, 0) return BULLET_ACT_FORCE_PIERCE -/obj/structure/reflector/tool_act(mob/living/user, obj/item/tool, tool_type, is_right_clicking) - if(admin) - return FALSE +/obj/structure/reflector/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) + if(admin && tool.tool_behaviour) + return ITEM_INTERACT_BLOCKING return ..() /obj/structure/reflector/screwdriver_act(mob/living/user, obj/item/tool) can_rotate = !can_rotate to_chat(user, span_notice("You [can_rotate ? "unlock" : "lock"] [src]'s rotation.")) tool.play_tool_sound(src) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/reflector/wrench_act(mob/living/user, obj/item/tool) if(anchored) to_chat(user, span_warning("Unweld [src] from the floor first!")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS user.visible_message(span_notice("[user] starts to dismantle [src]."), span_notice("You start to dismantle [src]...")) if(!tool.use_tool(src, user, 8 SECONDS, volume=50)) return @@ -102,7 +102,7 @@ if(buildstackamount) new buildstacktype(drop_location(), buildstackamount) qdel(src) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/reflector/welder_act(mob/living/user, obj/item/tool) if(!tool.tool_start_check(user, amount=1)) @@ -130,7 +130,7 @@ set_anchored(FALSE) to_chat(user, span_notice("You cut [src] free from the floor.")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/reflector/attackby(obj/item/W, mob/user, params) if(admin) diff --git a/code/game/objects/structures/secure_safe.dm b/code/game/objects/structures/secure_safe.dm new file mode 100644 index 00000000000000..c13fe9d60855c1 --- /dev/null +++ b/code/game/objects/structures/secure_safe.dm @@ -0,0 +1,73 @@ +/** + * Wall safes + * Holds items and uses the lockable storage component + * to allow people to lock items up. + */ +/obj/structure/secure_safe + name = "secure safe" + desc = "Excellent for securing things away from grubby hands." + icon = 'icons/obj/storage/storage.dmi' + icon_state = "wall_safe" + base_icon_state = "wall_safe" + anchored = TRUE + density = FALSE + +MAPPING_DIRECTIONAL_HELPERS(/obj/structure/secure_safe, 32) + +/obj/structure/secure_safe/Initialize(mapload) + . = ..() + //this will create the storage for us. + AddComponent(/datum/component/lockable_storage) + find_and_hang_on_wall() + PopulateContents() + +/obj/structure/secure_safe/proc/PopulateContents() + new /obj/item/paper(src) + new /obj/item/pen(src) + +/obj/structure/secure_safe/hos + name = "head of security's safe" + +/** + * This safe is meant to be damn robust. To break in, you're supposed to get creative, or use acid or an explosion. + * + * This makes the safe still possible to break in for someone who is prepared and capable enough, either through + * chemistry, botany or whatever else. + * + * The safe is also weak to explosions, so spending some early TC could allow an antag to blow it upen if they can + * get access to it. + */ +/obj/structure/secure_safe/caps_spare + name = "captain's spare ID safe" + desc = "In case of emergency, do not break glass. All Captains and Acting Captains are provided with codes to access this safe. \ + It is made out of the same material as the station's Black Box and is designed to resist all conventional weaponry. \ + There appears to be a small amount of surface corrosion. It doesn't look like it could withstand much of an explosion.\ + It remains quite flush against the wall, and there only seems to be enough room to fit something as slim as an ID card." + armor_type = /datum/armor/safe_caps_spare + max_integrity = 300 + color = "#ffdd33" + +MAPPING_DIRECTIONAL_HELPERS(/obj/structure/secure_safe/caps_spare, 32) + +/datum/armor/safe_caps_spare + melee = 100 + bullet = 100 + laser = 100 + energy = 100 + bomb = 70 + fire = 80 + acid = 70 + +/obj/structure/secure_safe/caps_spare/Initialize(mapload) + . = ..() + atom_storage.set_holdable(can_hold_list = list(/obj/item/card/id)) + AddComponent(/datum/component/lockable_storage, \ + lock_code = SSid_access.spare_id_safe_code, \ + can_hack_open = FALSE, \ + ) + +/obj/structure/secure_safe/caps_spare/PopulateContents() + new /obj/item/card/id/advanced/gold/captains_spare(src) + +/obj/structure/secure_safe/caps_spare/rust_heretic_act() + take_damage(damage_amount = 100, damage_type = BRUTE, damage_flag = MELEE, armour_penetration = 100) diff --git a/code/game/objects/structures/showcase.dm b/code/game/objects/structures/showcase.dm index 2349d9b0f4913a..7088101dfd6954 100644 --- a/code/game/objects/structures/showcase.dm +++ b/code/game/objects/structures/showcase.dm @@ -64,7 +64,7 @@ /obj/structure/showcase/mecha/marauder name = "combat mech exhibit" - desc = "A stand with an empty old Nanotrasen Corporation combat mech bolted to it. It is described as the premier unit used to defend corporate interests and employees." + desc = "A stand with an empty old Symphionia Corporation combat mech bolted to it. It is described as the premier unit used to defend corporate interests and employees." icon = 'icons/mob/mecha.dmi' icon_state = "marauder" @@ -75,20 +75,20 @@ icon_state = "firefighter" /obj/structure/showcase/machinery/implanter - name = "\improper Nanotrasen automated mindshield implanter exhibit" - desc = "A flimsy model of a standard Nanotrasen automated mindshield implant machine. With secure positioning harnesses and a robotic surgical injector, brain damage and other serious medical anomalies are now up to 60% less likely!" + name = "\improper Symphionia automated mindshield implanter exhibit" + desc = "A flimsy model of a standard Symphionia automated mindshield implant machine. With secure positioning harnesses and a robotic surgical injector, brain damage and other serious medical anomalies are now up to 60% less likely!" icon = 'icons/obj/machines/implant_chair.dmi' icon_state = "implantchair" /obj/structure/showcase/machinery/microwave - name = "\improper Nanotrasen-brand microwave" - desc = "The famous Nanotrasen-brand microwave, the multi-purpose cooking appliance every station needs! This one appears to be drawn onto a cardboard box." + name = "\improper Symphionia-brand microwave" + desc = "The famous Symphionia-brand microwave, the multi-purpose cooking appliance every station needs! This one appears to be drawn onto a cardboard box." icon = 'icons/obj/machines/microwave.dmi' icon_state = "mw_complete" /obj/structure/showcase/machinery/microwave_engineering - name = "\improper Nanotrasen Wave(tm) microwave" - desc = "Just when everyone thought Nanotrasen couldn't improve on their famous microwave, this 2563 model features Wave™! A Nanotrasen exclusive, Wave™ allows your PDA to be charged wirelessly through microwave frequencies. Because nothing says 'future' like charging your PDA while overcooking your leftovers. Nanotrasen Wave™ - Multitasking, redefined." + name = "\improper Symphionia Wave(tm) microwave" + desc = "Just when everyone thought Symphionia couldn't improve on their famous microwave, this 2563 model features Wave™! A Symphionia exclusive, Wave™ allows your PDA to be charged wirelessly through microwave frequencies. Because nothing says 'future' like charging your PDA while overcooking your leftovers. Symphionia Wave™ - Multitasking, redefined." icon = 'icons/obj/machines/microwave.dmi' icon_state = "engi_mw_complete" @@ -100,11 +100,11 @@ /obj/structure/showcase/perfect_employee name = "'Perfect Man' employee exhibit" - desc = "A stand with a model of the perfect Nanotrasen Employee bolted to it. Signs indicate it is robustly genetically engineered, as well as being ruthlessly loyal." + desc = "A stand with a model of the perfect Symphionia Employee bolted to it. Signs indicate it is robustly genetically engineered, as well as being ruthlessly loyal." /obj/structure/showcase/machinery/tv - name = "\improper Nanotrasen corporate newsfeed" - desc = "A slightly battered looking TV. Various Nanotrasen infomercials play on a loop, accompanied by a jaunty tune." + name = "\improper Symphionia corporate newsfeed" + desc = "A slightly battered looking TV. Various Symphionia infomercials play on a loop, accompanied by a jaunty tune." icon = 'icons/obj/machines/computer.dmi' icon_state = "television" @@ -148,7 +148,7 @@ to_chat(user, span_notice("You unscrew the screws.")) tool.play_tool_sound(src, 100) deconstruction_state = SHOWCASE_SCREWDRIVERED - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/showcase/crowbar_act(mob/living/user, obj/item/tool) if(!tool.use_tool(src, user, 2 SECONDS, volume=100)) @@ -156,13 +156,13 @@ to_chat(user, span_notice("You start to crowbar the showcase apart...")) new /obj/item/stack/sheet/iron(drop_location(), 4) qdel(src) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/showcase/wrench_act(mob/living/user, obj/item/tool) if(deconstruction_state != SHOWCASE_CONSTRUCTED) return FALSE default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS //Feedback is given in examine because showcases can basically have any sprite assigned to them diff --git a/code/game/objects/structures/shower.dm b/code/game/objects/structures/shower.dm index 7eb11fe4509a8b..26a7c70537aa75 100644 --- a/code/game/objects/structures/shower.dm +++ b/code/game/objects/structures/shower.dm @@ -28,7 +28,7 @@ GLOBAL_LIST_INIT(shower_mode_descriptions, list( /obj/machinery/shower name = "shower" - desc = "The HS-452. Installed in the 2550s by the Nanotrasen Hygiene Division, now with 2560 lead compliance! Passively replenishes itself with water when not in use." + desc = "The HS-452. Installed in the 2550s by the Symphionia Hygiene Division, now with 2560 lead compliance! Passively replenishes itself with water when not in use." icon = 'icons/obj/watercloset.dmi' icon_state = "shower" density = FALSE @@ -120,12 +120,12 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16)) return TRUE -//SKYRAT EDIT ADDITION +//NOVA EDIT ADDITION /obj/machinery/shower/plunger_act(obj/item/plunger/P, mob/living/user, reinforced) if(do_after(user, 3 SECONDS, src)) reagents.remove_any(reagents.total_volume) balloon_alert(user, "reservoir emptied") -//SKYRAT EDIT END +//NOVA EDIT END /obj/machinery/shower/analyzer_act(mob/living/user, obj/item/tool) . = ..() @@ -191,7 +191,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16)) /obj/machinery/shower/wrench_act(mob/living/user, obj/item/I) . = ..() - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return I.play_tool_sound(src) @@ -204,7 +204,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16)) return var/mutable_appearance/water_falling = mutable_appearance('icons/obj/watercloset.dmi', "water", ABOVE_MOB_LAYER) water_falling.color = mix_color_from_reagents(reagents.reagent_list) - SET_PLANE_EXPLICIT(water_falling, GAME_PLANE_UPPER, src) switch(dir) if(NORTH) water_falling.pixel_y += pixel_shift diff --git a/code/game/objects/structures/signs/_signs.dm b/code/game/objects/structures/signs/_signs.dm index b8709334c37f6c..889a79e51f4b15 100644 --- a/code/game/objects/structures/signs/_signs.dm +++ b/code/game/objects/structures/signs/_signs.dm @@ -143,15 +143,15 @@ sign_change_name = "Blank Sign" /obj/structure/sign/nanotrasen - name = "\improper Nanotrasen logo sign" - sign_change_name = "Corporate Logo - Nanotrasen" - desc = "A sign with the Nanotrasen logo on it. Glory to Nanotrasen!" + name = "\improper Symphionia logo sign" + sign_change_name = "Conglomeration Logo - Symphionia" + desc = "A sign with the Symphionia logo on it. Glory to Symphionia!" icon_state = "nanotrasen" is_editable = TRUE /obj/structure/sign/logo - name = "\improper Nanotrasen logo sign" - desc = "The Nanotrasen corporate logo." + name = "\improper Symphionia logo sign" + desc = "The Symphionia corporate logo." icon_state = "nanotrasen_sign1" buildable_sign = FALSE diff --git a/code/game/objects/structures/signs/signs_flags.dm b/code/game/objects/structures/signs/signs_flags.dm index 64a9d7225bbac9..73520a5fbbf816 100644 --- a/code/game/objects/structures/signs/signs_flags.dm +++ b/code/game/objects/structures/signs/signs_flags.dm @@ -1,12 +1,12 @@ /obj/structure/sign/flag name = "flag of the IT Division" - desc = "The flag of the Nanotrasen IT Division. Bears a symbol that only makes sense to those that understand." + desc = "The flag of the Symphionia IT Division. Bears a symbol that only makes sense to those that understand." icon = 'icons/obj/fluff/flags.dmi' icon_state = "flag_coder" /obj/structure/sign/flag/nanotrasen - name = "flag of Nanotrasen" - desc = "The official corporate flag of Nanotrasen. Mostly flown as a ceremonial piece, or to mark land on a new frontier." + name = "flag of Symphionia" + desc = "The official corporate flag of Symphionia. Mostly flown as a ceremonial piece, or to mark land on a new frontier." icon_state = "flag_nt" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/flag/nanotrasen, 32) diff --git a/code/game/objects/structures/spawner.dm b/code/game/objects/structures/spawner.dm index c66f2240d5a79c..a3af72878c35d5 100644 --- a/code/game/objects/structures/spawner.dm +++ b/code/game/objects/structures/spawner.dm @@ -74,7 +74,7 @@ /obj/structure/spawner/syndicate name = "warp beacon" - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/machines/beacon.dmi' icon_state = "syndbeacon" spawn_text = "warps in from" mob_types = list(/mob/living/basic/trooper/syndicate/ranged) @@ -100,7 +100,7 @@ name = "Laughing Larry" desc = "A laughing, jovial figure. Something seems stuck in his throat." icon_state = "clownbeacon" - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/machines/beacon.dmi' max_integrity = 200 max_mobs = 15 spawn_time = 15 SECONDS diff --git a/code/game/objects/structures/spirit_board.dm b/code/game/objects/structures/spirit_board.dm index 2e6a2bd9a0776c..e8882251237fd7 100644 --- a/code/game/objects/structures/spirit_board.dm +++ b/code/game/objects/structures/spirit_board.dm @@ -56,7 +56,11 @@ if(virgin) virgin = FALSE - notify_ghosts("Someone has begun playing with \a [src] in [get_area(src)]!", source = src, header = "Spirit board") + notify_ghosts( + "Someone has begun playing with \a [src] in [get_area(src)]!", + source = src, + header = "Spirit board", + ) var/new_planchette = tgui_input_list(ghost, "Choose the letter.", "Seance!", ghosty_options) if(isnull(new_planchette)) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 7219bb69c2e601..0bcfb36579a949 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -29,8 +29,6 @@ smoothing_flags = SMOOTH_BITMASK smoothing_groups = SMOOTH_GROUP_TABLES canSmoothWith = SMOOTH_GROUP_TABLES - ///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 @@ -46,8 +44,7 @@ buildstack = _buildstack AddElement(/datum/element/footstep_override, priority = STEP_SOUND_TABLE_PRIORITY) - if (climbable) - AddElement(/datum/element/climbable) + make_climbable() var/static/list/loc_connections = list( COMSIG_CARBON_DISARM_COLLIDE = PROC_REF(table_carbon), @@ -58,6 +55,11 @@ AddElement(/datum/element/give_turf_traits, give_turf_traits) register_context() +///Adds the element used to make the object climbable, and also the one that shift the mob buckled to it up. +/obj/structure/table/proc/make_climbable() + AddElement(/datum/element/climbable) + AddElement(/datum/element/elevation, pixel_shift = 12) + /obj/structure/table/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) . = ..() @@ -71,7 +73,7 @@ context[SCREENTIP_CONTEXT_RMB] = "Deal card faceup" . = CONTEXTUAL_SCREENTIP_SET - if(!(flags_1 & NODECONSTRUCT_1) && deconstruction_ready) + if(!(obj_flags & NO_DECONSTRUCTION) && deconstruction_ready) if(held_item.tool_behaviour == TOOL_SCREWDRIVER) context[SCREENTIP_CONTEXT_RMB] = "Disassemble" . = CONTEXTUAL_SCREENTIP_SET @@ -205,21 +207,21 @@ pushed_mob.add_mood_event("table", /datum/mood_event/table_limbsmash, banged_limb) /obj/structure/table/screwdriver_act_secondary(mob/living/user, obj/item/tool) - if(flags_1 & NODECONSTRUCT_1 || !deconstruction_ready) + if(obj_flags & NO_DECONSTRUCTION || !deconstruction_ready) return FALSE to_chat(user, span_notice("You start disassembling [src]...")) if(tool.use_tool(src, user, 2 SECONDS, volume=50)) deconstruct(TRUE) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/table/wrench_act_secondary(mob/living/user, obj/item/tool) - if(flags_1 & NODECONSTRUCT_1 || !deconstruction_ready) + if(obj_flags & NO_DECONSTRUCTION || !deconstruction_ready) return FALSE to_chat(user, span_notice("You start deconstructing [src]...")) if(tool.use_tool(src, user, 4 SECONDS, volume=50)) playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE) deconstruct(TRUE, 1) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/table/attackby(obj/item/I, mob/living/user, params) var/list/modifiers = params2list(params) @@ -292,11 +294,11 @@ ..() return SECONDARY_ATTACK_CONTINUE_CHAIN -/obj/structure/table/proc/AfterPutItemOnTable(obj/item/I, mob/living/user) +/obj/structure/table/proc/AfterPutItemOnTable(obj/item/thing, mob/living/user) return /obj/structure/table/deconstruct(disassembled = TRUE, wrench_disassembly = 0) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) var/turf/T = get_turf(src) if(buildstack) new buildstack(T, buildstackamount) @@ -358,34 +360,52 @@ canSmoothWith = null icon = 'icons/obj/smooth_structures/rollingtable.dmi' icon_state = "rollingtable" - var/list/attached_items = list() + /// Lazylist of the items that we have on our surface. + var/list/attached_items = null /obj/structure/table/rolling/Initialize(mapload) . = ..() AddElement(/datum/element/noisy_movement) + RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(on_our_moved)) + +/obj/structure/table/rolling/Destroy() + for(var/item in attached_items) + clear_item_reference(item) + LAZYNULL(attached_items) // safety + return ..() -/obj/structure/table/rolling/AfterPutItemOnTable(obj/item/I, mob/living/user) +/obj/structure/table/rolling/AfterPutItemOnTable(obj/item/thing, mob/living/user) . = ..() - attached_items += I - RegisterSignal(I, COMSIG_MOVABLE_MOVED, PROC_REF(RemoveItemFromTable)) //Listen for the pickup event, unregister on pick-up so we aren't moved + LAZYADD(attached_items, thing) + RegisterSignal(thing, COMSIG_MOVABLE_MOVED, PROC_REF(on_item_moved)) -/obj/structure/table/rolling/proc/RemoveItemFromTable(datum/source, newloc, dir) +/// Handles cases where any attached item moves, with or without the table. If we get picked up or anything, unregister the signal so we don't move with the table after removal from the surface. +/obj/structure/table/rolling/proc/on_item_moved(datum/source, atom/old_loc, dir, forced, list/old_locs, momentum_change) SIGNAL_HANDLER - if(newloc != loc) //Did we not move with the table? because that shit's ok - return FALSE - attached_items -= source - UnregisterSignal(source, COMSIG_MOVABLE_MOVED) + var/atom/thing = source // let it runtime if it doesn't work because that is mad wack + if(thing.loc == loc) // if we move with the table, move on + return -/obj/structure/table/rolling/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) - . = ..() - if(!loc) + clear_item_reference(thing) + +/// Handles movement of the table itself, as well as moving along any atoms we have on our surface. +/obj/structure/table/rolling/proc/on_our_moved(datum/source, atom/old_loc, dir, forced, list/old_locs, momentum_change) + SIGNAL_HANDLER + if(isnull(loc)) // aw hell naw return + for(var/mob/living/living_mob in old_loc.contents)//Kidnap everyone on top living_mob.forceMove(loc) + for(var/atom/movable/attached_movable as anything in attached_items) - if(!attached_movable.Move(loc)) - RemoveItemFromTable(attached_movable, attached_movable.loc) + if(!attached_movable.Move(loc)) // weird + clear_item_reference(attached_movable) // we check again in on_item_moved() just in case something's wacky tobaccy + +/// Removes the signal and the entrance from the list. +/obj/structure/table/rolling/proc/clear_item_reference(obj/item/thing) + UnregisterSignal(thing, COMSIG_MOVABLE_MOVED) + LAZYREMOVE(attached_items, thing) /* * Glass tables @@ -417,7 +437,7 @@ /obj/structure/table/glass/proc/on_entered(datum/source, atom/movable/AM) SIGNAL_HANDLER - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return if(!isliving(AM)) return @@ -432,7 +452,7 @@ check_break(M) /obj/structure/table/glass/proc/check_break(mob/living/M) - if(M.has_gravity() && M.mob_size > MOB_SIZE_SMALL && !(M.movement_type & FLYING)) + if(M.has_gravity() && M.mob_size > MOB_SIZE_SMALL && !(M.movement_type & MOVETYPES_NOT_TOUCHING_GROUND)) table_shatter(M) /obj/structure/table/glass/proc/table_shatter(mob/living/victim) @@ -450,7 +470,7 @@ qdel(src) /obj/structure/table/glass/deconstruct(disassembled = TRUE, wrench_disassembly = 0) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(disassembled) ..() return @@ -703,7 +723,7 @@ * Surgery Tables */ -/obj/structure/table/optable//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/structure/table/optable//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "operating table" desc = "Used for advanced medical procedures." icon = 'icons/obj/medical/surgery_table.dmi' @@ -712,9 +732,8 @@ smoothing_flags = NONE smoothing_groups = null canSmoothWith = null - can_buckle = 1 + can_buckle = 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 @@ -738,11 +757,24 @@ UnregisterSignal(loc, COMSIG_ATOM_EXITED) return ..() +/obj/structure/table/optable/make_climbable() + AddElement(/datum/element/elevation, pixel_shift = 12) + /obj/structure/table/optable/tablepush(mob/living/user, mob/living/pushed_mob) pushed_mob.forceMove(loc) pushed_mob.set_resting(TRUE, TRUE) visible_message(span_notice("[user] lays [pushed_mob] on [src].")) +///Align the mob with the table when buckled. +/obj/structure/table/optable/post_buckle_mob(mob/living/buckled) + . = ..() + buckled.pixel_y += 6 + +///Disalign the mob with the table when unbuckled. +/obj/structure/table/optable/post_unbuckle_mob(mob/living/buckled) + . = ..() + buckled.pixel_y -= 6 + /// Any mob that enters our tile will be marked as a potential patient. They will be turned into a patient if they lie down. /obj/structure/table/optable/proc/mark_patient(datum/source, mob/living/carbon/potential_patient) SIGNAL_HANDLER @@ -750,7 +782,6 @@ return RegisterSignal(potential_patient, COMSIG_LIVING_SET_BODY_POSITION, PROC_REF(recheck_patient)) recheck_patient(potential_patient) // In case the mob is already lying down before they entered. - potential_patient.pixel_y = potential_patient.base_pixel_y /// Unmark the potential patient. /obj/structure/table/optable/proc/unmark_patient(datum/source, mob/living/carbon/potential_patient) @@ -760,7 +791,6 @@ if(potential_patient == patient) recheck_patient(patient) // Can just set patient to null, but doing the recheck lets us find a replacement patient. UnregisterSignal(potential_patient, COMSIG_LIVING_SET_BODY_POSITION) - potential_patient.pixel_y = potential_patient.base_pixel_y + potential_patient.body_position_pixel_y_offset /// Someone on our tile just lied down, got up, moved in, or moved out. /// potential_patient is the mob that had one of those four things change. @@ -772,11 +802,11 @@ if(potential_patient.body_position == LYING_DOWN && potential_patient.loc == loc) patient = potential_patient - chill_out(patient) // SKYRAT EDIT - Operation Table Numbing + chill_out(patient) // NOVA EDIT - Operation Table Numbing return - if(!isnull(patient)) // SKYRAT EDIT - Operation Table Numbing - thaw_them(patient) // SKYRAT EDIT - Operation Table Numbing + if(!isnull(patient)) // NOVA EDIT - Operation Table Numbing + thaw_them(patient) // NOVA EDIT - Operation Table Numbing // Find another lying mob as a replacement. for (var/mob/living/carbon/replacement_patient in loc.contents) @@ -821,7 +851,7 @@ /obj/structure/rack/attackby(obj/item/W, mob/living/user, params) var/list/modifiers = params2list(params) - if (W.tool_behaviour == TOOL_WRENCH && !(flags_1&NODECONSTRUCT_1) && LAZYACCESS(modifiers, RIGHT_CLICK)) + if (W.tool_behaviour == TOOL_WRENCH && !(obj_flags & NO_DECONSTRUCTION) && LAZYACCESS(modifiers, RIGHT_CLICK)) W.play_tool_sound(src) deconstruct(TRUE) return @@ -859,7 +889,7 @@ */ /obj/structure/rack/deconstruct(disassembled = TRUE) - if(!(flags_1&NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) set_density(FALSE) var/obj/item/rack_parts/newparts = new(loc) transfer_fingerprints_to(newparts) @@ -876,7 +906,7 @@ icon = 'icons/obj/structures.dmi' icon_state = "rack_parts" inhand_icon_state = "rack_parts" - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY custom_materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT) var/building = FALSE diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index bac6a2eeb5e2d2..ec00eb110a7af7 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -37,7 +37,7 @@ /obj/structure/tank_dispenser/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/tank_dispenser/attackby(obj/item/I, mob/living/user, params) var/full @@ -104,7 +104,7 @@ /obj/structure/tank_dispenser/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) for(var/X in src) var/obj/item/I = X I.forceMove(loc) diff --git a/code/game/objects/structures/training_machine.dm b/code/game/objects/structures/training_machine.dm index 08ff42e2d766dd..fd0d8bb0c8f0c5 100644 --- a/code/game/objects/structures/training_machine.dm +++ b/code/game/objects/structures/training_machine.dm @@ -350,7 +350,7 @@ inhand_icon_state = "toolbox_gold" lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY force = 0 throwforce = 0 throw_speed = 2 diff --git a/code/game/objects/structures/transit_tubes/transit_tube.dm b/code/game/objects/structures/transit_tubes/transit_tube.dm index d7b463122ffb67..e0852b0fd39c23 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/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm index 32a9e6293ed544..67d3d4c9510faf 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm @@ -40,7 +40,7 @@ return ..() /obj/structure/transit_tube_pod/deconstruct(disassembled = TRUE, mob/user) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) var/atom/location = get_turf(src) if(user) location = user.loc diff --git a/code/game/objects/structures/traps.dm b/code/game/objects/structures/traps.dm index 124237fa59719b..1b6f1da06b6ea2 100644 --- a/code/game/objects/structures/traps.dm +++ b/code/game/objects/structures/traps.dm @@ -8,7 +8,7 @@ alpha = 30 //initially quite hidden when not "recharging" var/flare_message = "the trap flares brightly!" var/last_trigger = 0 - var/time_between_triggers = 600 //takes a minute to recharge + var/time_between_triggers = 1 MINUTES var/charges = INFINITY var/antimagic_flags = MAGIC_RESISTANCE @@ -61,50 +61,50 @@ last_trigger = world.time charges-- if(charges <= 0) - animate(src, alpha = 0, time = 10) - QDEL_IN(src, 10) + animate(src, alpha = 0, time = 1 SECONDS) + QDEL_IN(src, 1 SECONDS) else animate(src, alpha = initial(alpha), time = time_between_triggers) -/obj/structure/trap/proc/on_entered(datum/source, atom/movable/AM) +/obj/structure/trap/proc/on_entered(datum/source, atom/movable/victim) SIGNAL_HANDLER if(last_trigger + time_between_triggers > world.time) return // Don't want the traps triggered by sparks, ghosts or projectiles. - if(is_type_in_typecache(AM, ignore_typecache)) + if(is_type_in_typecache(victim, ignore_typecache)) return - if(ismob(AM)) - var/mob/M = AM - if(M.mind in immune_minds) + if(ismob(victim)) + var/mob/mob_victim = victim + if(mob_victim.mind in immune_minds) return - if(M.can_block_magic(antimagic_flags)) + if(mob_victim.can_block_magic(antimagic_flags)) flare() return if(charges <= 0) return flare() - if(isliving(AM)) - trap_effect(AM) + if(isliving(victim)) + trap_effect(victim) -/obj/structure/trap/proc/trap_effect(mob/living/L) +/obj/structure/trap/proc/trap_effect(mob/living/victim) return /obj/structure/trap/stun name = "shock trap" desc = "A trap that will shock and render you immobile. You'd better avoid it." icon_state = "trap-shock" - var/stun_time = 100 + var/stun_time = 10 SECONDS -/obj/structure/trap/stun/trap_effect(mob/living/L) - L.electrocute_act(30, src, flags = SHOCK_NOGLOVES) // electrocute act does a message. - L.Paralyze(stun_time) +/obj/structure/trap/stun/trap_effect(mob/living/victim) + victim.electrocute_act(30, src, flags = SHOCK_NOGLOVES) // electrocute act does a message. + victim.Paralyze(stun_time) /obj/structure/trap/stun/hunter name = "bounty trap" desc = "A trap that only goes off when a fugitive steps on it, announcing the location and stunning the target. You'd better avoid it." icon = 'icons/obj/restraints.dmi' icon_state = "bounty_trap_on" - stun_time = 200 + stun_time = 20 SECONDS sparks = FALSE //the item version gives them off to prevent runtimes (see Destroy()) antimagic_flags = NONE var/obj/item/bountytrap/stored_item @@ -112,7 +112,7 @@ /obj/structure/trap/stun/hunter/Initialize(mapload) . = ..() - time_between_triggers = 10 + time_between_triggers = 1 SECONDS flare_message = "[src] snaps shut!" /obj/structure/trap/stun/hunter/Destroy() @@ -121,10 +121,10 @@ stored_item = null return ..() -/obj/structure/trap/stun/hunter/on_entered(datum/source, atom/movable/AM) - if(isliving(AM)) - var/mob/living/L = AM - if(!L.mind?.has_antag_datum(/datum/antagonist/fugitive)) +/obj/structure/trap/stun/hunter/on_entered(datum/source, atom/movable/victim) + if(isliving(victim)) + var/mob/living/living_victim = victim + if(!living_victim.mind?.has_antag_datum(/datum/antagonist/fugitive)) return caught = TRUE . = ..() @@ -169,11 +169,11 @@ radio.talk_into(src, "Fugitive has triggered this trap in the [get_area_name(src)]!", RADIO_CHANNEL_COMMON) /obj/item/bountytrap/attack_self(mob/living/user) - var/turf/T = get_turf(src) - if(!user || !user.transferItemToLoc(src, T))//visibly unequips + var/turf/target_turf = get_turf(src) + if(!user || !user.transferItemToLoc(src, target_turf))//visibly unequips return to_chat(user, span_notice("You set up [src]. Examine while close to disarm it.")) - stored_trap.forceMove(T)//moves trap to ground + stored_trap.forceMove(target_turf)//moves trap to ground forceMove(stored_trap)//moves item into trap /obj/item/bountytrap/Destroy() @@ -189,9 +189,9 @@ desc = "A trap that will set you ablaze. You'd better avoid it." icon_state = "trap-fire" -/obj/structure/trap/fire/trap_effect(mob/living/L) - to_chat(L, span_danger("Spontaneous combustion!")) - L.Paralyze(20) +/obj/structure/trap/fire/trap_effect(mob/living/victim) + to_chat(victim, span_danger("Spontaneous combustion!")) + victim.Paralyze(2 SECONDS) new /obj/effect/hotspot(get_turf(src)) /obj/structure/trap/chill @@ -199,11 +199,11 @@ desc = "A trap that will chill you to the bone. You'd better avoid it." icon_state = "trap-frost" -/obj/structure/trap/chill/trap_effect(mob/living/L) - to_chat(L, span_danger("You're frozen solid!")) - L.Paralyze(20) - L.adjust_bodytemperature(-300) - L.apply_status_effect(/datum/status_effect/freon) +/obj/structure/trap/chill/trap_effect(mob/living/victim) + to_chat(victim, span_bolddanger("You're frozen solid!")) + victim.Paralyze(2 SECONDS) + victim.adjust_bodytemperature(-300) + victim.apply_status_effect(/datum/status_effect/freon) /obj/structure/trap/damage @@ -212,12 +212,12 @@ icon_state = "trap-earth" -/obj/structure/trap/damage/trap_effect(mob/living/L) - to_chat(L, span_danger("The ground quakes beneath your feet!")) - L.Paralyze(100) - L.adjustBruteLoss(35) +/obj/structure/trap/damage/trap_effect(mob/living/victim) + to_chat(victim, span_bolddanger("The ground quakes beneath your feet!")) + victim.Paralyze(10 SECONDS) + victim.adjustBruteLoss(35) var/obj/structure/flora/rock/style_random/giant_rock = new(get_turf(src)) - QDEL_IN(giant_rock, 200) + QDEL_IN(giant_rock, 20 SECONDS) /obj/structure/trap/ward @@ -225,7 +225,7 @@ desc = "A divine barrier, It looks like you could destroy it with enough effort, or wait for it to dissipate..." icon_state = "ward" density = TRUE - time_between_triggers = 1200 //Exists for 2 minutes + time_between_triggers = 2 MINUTES /obj/structure/trap/ward/Initialize(mapload) . = ..() @@ -236,10 +236,10 @@ desc = "A trap that rings with unholy energy. You think you hear... chittering?" icon_state = "trap-cult" -/obj/structure/trap/cult/trap_effect(mob/living/L) - to_chat(L, span_danger("With a crack, the hostile constructs come out of hiding, stunning you!")) - L.electrocute_act(10, src, flags = SHOCK_NOGLOVES) // electrocute act does a message. - L.Paralyze(20) - new /mob/living/simple_animal/hostile/construct/proteon/hostile(loc) - new /mob/living/simple_animal/hostile/construct/proteon/hostile(loc) - QDEL_IN(src, 30) +/obj/structure/trap/cult/trap_effect(mob/living/victim) + to_chat(victim, span_bolddanger("With a crack, the hostile constructs come out of hiding, stunning you!")) + victim.electrocute_act(10, src, flags = SHOCK_NOGLOVES) // electrocute act does a message. + victim.Paralyze(2 SECONDS) + new /mob/living/basic/construct/proteon/hostile(loc) + new /mob/living/basic/construct/proteon/hostile(loc) + QDEL_IN(src, 3 SECONDS) diff --git a/code/game/objects/structures/votingbox.dm b/code/game/objects/structures/votingbox.dm index 0e46a0b4444ea3..00eeeb55ae2981 100644 --- a/code/game/objects/structures/votingbox.dm +++ b/code/game/objects/structures/votingbox.dm @@ -133,7 +133,7 @@ /obj/structure/votebox/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool, time = 4 SECONDS) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/votebox/crowbar_act(mob/living/user, obj/item/I) . = ..() diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 6ba07a90e68d17..b343cd85f50b19 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -84,7 +84,7 @@ return ..() /obj/structure/toilet/deconstruct() - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) for(var/obj/toilet_item in contents) toilet_item.forceMove(drop_location()) if(buildstacktype) @@ -105,7 +105,7 @@ cistern = !cistern update_appearance() return COMPONENT_CANCEL_ATTACK_CHAIN - else if(I.tool_behaviour == TOOL_WRENCH && !(flags_1&NODECONSTRUCT_1)) + else if(I.tool_behaviour == TOOL_WRENCH && !(obj_flags & NO_DECONSTRUCTION)) I.play_tool_sound(src) deconstruct() return TRUE @@ -228,7 +228,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/urinal, 32) return TRUE /obj/structure/urinal/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/wallframe/urinal(loc) qdel(src) @@ -419,7 +419,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink, (-14)) playsound(loc, 'sound/effects/slosh.ogg', 25, TRUE) return - if(O.tool_behaviour == TOOL_WRENCH && !(flags_1&NODECONSTRUCT_1)) + if(O.tool_behaviour == TOOL_WRENCH && !(obj_flags & NO_DECONSTRUCTION)) O.play_tool_sound(src) deconstruct() return @@ -496,7 +496,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink, (-14)) return ..() /obj/structure/sink/deconstruct() - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) drop_materials() if(has_water_reclaimer) new /obj/item/stock_parts/water_recycler(drop_location()) @@ -572,7 +572,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink/kitchen, (-16)) return TRUE /obj/structure/sinkframe/deconstruct() - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) drop_materials() return ..() @@ -760,12 +760,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink/kitchen, (-16)) open = !open if(open) layer = SIGN_LAYER - SET_PLANE_IMPLICIT(src, GAME_PLANE) set_density(FALSE) set_opacity(FALSE) else layer = WALL_OBJ_LAYER - SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER) set_density(TRUE) if(opaque_closed) set_opacity(TRUE) @@ -878,7 +876,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink/kitchen, (-16)) /obj/structure/curtain/cloth/fancy/mechanical/proc/close() icon_state = "[icon_type]-closed" layer = WALL_OBJ_LAYER - SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER) set_density(TRUE) open = FALSE if(opaque_closed) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 4260e7ba19f7e7..c10eedeec5ea72 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -26,7 +26,6 @@ var/fulltile = FALSE var/glass_type = /obj/item/stack/sheet/glass var/glass_amount = 1 - var/mutable_appearance/crack_overlay var/real_explosion_block //ignore this, just use explosion_block var/break_sound = SFX_SHATTER var/knock_sound = 'sound/effects/glassknock.ogg' @@ -79,7 +78,7 @@ /obj/structure/window/examine(mob/user) . = ..() - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return switch(state) @@ -109,7 +108,7 @@ /obj/structure/window/singularity_pull(S, current_size) ..() - if(anchored && current_size >= STAGE_FIVE) //SKYRAT EDIT CHANGE + if(anchored && current_size >= STAGE_FIVE) //NOVA EDIT CHANGE set_anchored(FALSE) if(current_size >= STAGE_FIVE) deconstruct(FALSE) @@ -186,21 +185,21 @@ /obj/structure/window/attack_paw(mob/user, list/modifiers) return attack_hand(user, modifiers) -/obj/structure/window/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) //used by attack_alien, attack_animal, and attack_slime +/obj/structure/window/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) //used by attack_alien, attack_animal if(!can_be_reached(user)) return return ..() -/obj/structure/window/tool_act(mob/living/user, obj/item/tool, tool_type, is_right_clicking) +/obj/structure/window/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) if(!can_be_reached(user)) - return TRUE //skip the afterattack + return ITEM_INTERACT_SKIP_TO_ATTACK // Guess you get to hit it add_fingerprint(user) return ..() /obj/structure/window/welder_act(mob/living/user, obj/item/tool) if(atom_integrity >= max_integrity) to_chat(user, span_warning("[src] is already in good condition!")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(!tool.tool_start_check(user, amount = 0)) return FALSE to_chat(user, span_notice("You begin repairing [src]...")) @@ -208,10 +207,10 @@ atom_integrity = max_integrity update_nearby_icons() to_chat(user, span_notice("You repair [src].")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/window/screwdriver_act(mob/living/user, obj/item/tool) - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return switch(state) @@ -236,27 +235,27 @@ if(tool.use_tool(src, user, decon_speed, volume = 75, extra_checks = CALLBACK(src, PROC_REF(check_state_and_anchored), state, anchored))) set_anchored(TRUE) to_chat(user, span_notice("You fasten the frame to the floor.")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/window/wrench_act(mob/living/user, obj/item/tool) if(anchored) return FALSE - if((flags_1 & NODECONSTRUCT_1) || (reinf && state >= RWINDOW_FRAME_BOLTED)) + if((obj_flags & NO_DECONSTRUCTION) || (reinf && state >= RWINDOW_FRAME_BOLTED)) return FALSE to_chat(user, span_notice("You begin to disassemble [src]...")) if(!tool.use_tool(src, user, decon_speed, volume = 75, extra_checks = CALLBACK(src, PROC_REF(check_state_and_anchored), state, anchored))) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS var/obj/item/stack/sheet/G = new glass_type(user.loc, glass_amount) if (!QDELETED(G)) G.add_fingerprint(user) playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) to_chat(user, span_notice("You successfully disassemble [src].")) qdel(src) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/window/crowbar_act(mob/living/user, obj/item/tool) - if(!anchored || (flags_1 & NODECONSTRUCT_1)) + if(!anchored || (obj_flags & NO_DECONSTRUCTION)) return FALSE switch(state) @@ -273,7 +272,7 @@ else return FALSE - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/window/attackby(obj/item/I, mob/living/user, params) if(!can_be_reached(user)) @@ -336,7 +335,7 @@ return if(!disassembled) playsound(src, break_sound, 70, TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) for(var/obj/item/shard/debris in spawn_debris(drop_location())) transfer_fingerprints_to(debris) // transfer fingerprints to shards only qdel(src) @@ -419,11 +418,9 @@ var/ratio = atom_integrity / max_integrity ratio = CEILING(ratio*4, 1) * 25 - cut_overlay(crack_overlay) if(ratio > 75) return - crack_overlay = mutable_appearance('icons/obj/structures.dmi', "damage[ratio]", -(layer+0.1)) - . += crack_overlay + . += mutable_appearance('icons/obj/structures.dmi', "damage[ratio]", -(layer+0.1)) /obj/structure/window/should_atmos_process(datum/gas_mixture/air, exposed_temperature) return exposed_temperature > T0C + heat_resistance @@ -483,7 +480,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/unanchored/spawner, 0) return FALSE /obj/structure/window/reinforced/attackby_secondary(obj/item/tool, mob/user, params) - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return ..() switch(state) @@ -549,13 +546,13 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/unanchored/spawner, 0) /obj/structure/window/reinforced/crowbar_act(mob/living/user, obj/item/tool) if(!anchored) return FALSE - if((flags_1 & NODECONSTRUCT_1) || (state != WINDOW_OUT_OF_FRAME)) + if((obj_flags & NO_DECONSTRUCTION) || (state != WINDOW_OUT_OF_FRAME)) return FALSE to_chat(user, span_notice("You begin to lever the window back into the frame...")) if(tool.use_tool(src, user, 10 SECONDS, volume = 75, extra_checks = CALLBACK(src, PROC_REF(check_state_and_anchored), state, anchored))) state = RWINDOW_SECURE to_chat(user, span_notice("You pry the window back into the frame.")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/window/proc/cool_bolts() if(state == RWINDOW_BOLTS_HEATED) @@ -564,7 +561,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/unanchored/spawner, 0) /obj/structure/window/reinforced/examine(mob/user) . = ..() - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return switch(state) if(RWINDOW_SECURE) @@ -806,7 +803,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/tinted/frosted/spaw /obj/structure/window/reinforced/shuttle/indestructible name = "hardened shuttle window" - flags_1 = PREVENT_CLICK_UNDER_1 | NODECONSTRUCT_1 + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + flags_1 = PREVENT_CLICK_UNDER_1 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF /obj/structure/window/reinforced/shuttle/indestructible/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) @@ -870,8 +868,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/tinted/frosted/spaw bash_sound = 'sound/weapons/slashmiss.ogg' break_sound = 'sound/items/poster_ripped.ogg' hit_sound = 'sound/weapons/slashmiss.ogg' - var/static/mutable_appearance/torn = mutable_appearance('icons/obj/smooth_structures/paperframes.dmi',icon_state = "torn", layer = ABOVE_OBJ_LAYER - 0.1) - var/static/mutable_appearance/paper = mutable_appearance('icons/obj/smooth_structures/paperframes.dmi',icon_state = "paper", layer = ABOVE_OBJ_LAYER - 0.1) + var/static/mutable_appearance/torn = mutable_appearance('icons/obj/smooth_structures/structure_variations.dmi',icon_state = "paper-torn", layer = ABOVE_OBJ_LAYER - 0.1) + var/static/mutable_appearance/paper = mutable_appearance('icons/obj/smooth_structures/structure_variations.dmi',icon_state = "paper-whole", layer = ABOVE_OBJ_LAYER - 0.1) /obj/structure/window/paperframe/Initialize(mapload) . = ..() @@ -930,14 +928,15 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/tinted/frosted/spaw /obj/structure/window/bronze name = "brass window" desc = "A paper-thin pane of translucent yet reinforced brass. Nevermind, this is just weak bronze!" - icon = 'icons/obj/smooth_structures/clockwork_window.dmi' - icon_state = "clockwork_window_single" + icon = 'icons/obj/smooth_structures/structure_variations.dmi' + icon_state = "clockwork_window-single" glass_type = /obj/item/stack/sheet/bronze /obj/structure/window/bronze/unanchored anchored = FALSE /obj/structure/window/bronze/fulltile + icon = 'icons/obj/smooth_structures/clockwork_window.dmi' icon_state = "clockwork_window-0" base_icon_state = "clockwork_window" smoothing_flags = SMOOTH_BITMASK diff --git a/code/game/say.dm b/code/game/say.dm index c0e9d4ff8efe5b..7f25bce9f90ab0 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -15,12 +15,12 @@ GLOBAL_LIST_INIT(freqtospan, list( "[FREQ_SYNDICATE]" = "syndradio", "[FREQ_UPLINK]" = "syndradio", // this probably shouldnt appear ingame "[FREQ_CENTCOM]" = "centcomradio", - "[FREQ_FACTION]" = "suppradio", //SKYRAT EDIT ADDITIION - FACTION - "[FREQ_CYBERSUN]" = "syndradio", //SKYRAT EDIT ADDITION - MAPPING - "[FREQ_INTERDYNE]" = "syndradio", //SKYRAT EDIT ADDITION - MAPPING - "[FREQ_GUILD]" = "syndradio", //SKYRAT EDIT ADDITION - MAPPING - "[FREQ_TARKON]" = "engradio", //SKYRAT EDIT ADDITION - MAPPING - "[FREQ_SOLFED]" = "medradio", //SKYRAT EDIT ADDITION - SOLFED + "[FREQ_FACTION]" = "suppradio", //NOVA EDIT ADDITIION - FACTION + "[FREQ_CYBERSUN]" = "syndradio", //NOVA EDIT ADDITION - MAPPING + "[FREQ_INTERDYNE]" = "syndradio", //NOVA EDIT ADDITION - MAPPING + "[FREQ_GUILD]" = "syndradio", //NOVA EDIT ADDITION - MAPPING + "[FREQ_TARKON]" = "engradio", //NOVA EDIT ADDITION - MAPPING + "[FREQ_SOLFED]" = "medradio", //NOVA EDIT ADDITION - SOLFED "[FREQ_CTF_RED]" = "redteamradio", "[FREQ_CTF_BLUE]" = "blueteamradio", "[FREQ_CTF_GREEN]" = "greenteamradio", @@ -237,7 +237,7 @@ GLOBAL_LIST_INIT(freqtospan, list( return "2" return "0" -/atom/movable/proc/GetVoice() +/atom/proc/GetVoice() return "[src]" //Returns the atom's name, prepended with 'The' if it's not a proper noun //HACKY VIRTUALSPEAKER STUFF BEYOND THIS POINT diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm index 159dab78ceeb83..8ddae94231d31b 100644 --- a/code/game/shuttle_engines.dm +++ b/code/game/shuttle_engines.dm @@ -105,7 +105,7 @@ /obj/machinery/power/shuttle_engine/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/power/shuttle_engine/welder_act(mob/living/user, obj/item/tool) . = ..() diff --git a/code/game/sound.dm b/code/game/sound.dm index f1b5dd0406fd39..52127f8ea1f03b 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -150,8 +150,8 @@ sound_to_use.environment = A.sound_environment if(use_reverb && sound_to_use.environment != SOUND_ENVIRONMENT_NONE) //We have reverb, reset our echo setting - sound_to_use.echo[3] = -1300 //Room setting, 0 means normal reverb //SKYRAT EDIT CHANGE - sound_to_use.echo[4] = -1300 //RoomHF setting, 0 means normal reverb. //SKYRAT EDIT CHANGE + sound_to_use.echo[3] = -1300 //Room setting, 0 means normal reverb //NOVA EDIT CHANGE + sound_to_use.echo[4] = -1300 //RoomHF setting, 0 means normal reverb. //NOVA EDIT CHANGE SEND_SOUND(src, sound_to_use) @@ -183,7 +183,7 @@ /proc/get_sfx(soundin) if(istext(soundin)) - soundin = get_sfx_skyrat(soundin) //SKYRAT EDIT ADDITION - This overrides the default sound effects too, so use it to modularly change a sound effect output. + soundin = get_sfx_skyrat(soundin) //NOVA EDIT ADDITION - This overrides the default sound effects too, so use it to modularly change a sound effect output. switch(soundin) if(SFX_SHATTER) soundin = pick('sound/effects/glassbr1.ogg','sound/effects/glassbr2.ogg','sound/effects/glassbr3.ogg') diff --git a/code/game/turfs/baseturfs.dm b/code/game/turfs/baseturfs.dm index 7eaac2f9ef08ea..ad016b63447752 100644 --- a/code/game/turfs/baseturfs.dm +++ b/code/game/turfs/baseturfs.dm @@ -20,76 +20,49 @@ return ChangeTurf(baseturfs, baseturfs, flags) // The bottom baseturf will never go away -// Take the input as baseturfs and put it underneath the current baseturfs -// If fake_turf_type is provided and new_baseturfs is not the baseturfs list will be created identical to the turf type's -// If both or just new_baseturfs is provided they will be inserted below the existing baseturfs -/turf/proc/PlaceOnBottom(list/new_baseturfs, turf/fake_turf_type) - if(fake_turf_type) - if(!new_baseturfs) - if(!length(baseturfs)) - baseturfs = list(baseturfs) - var/list/old_baseturfs = baseturfs.Copy() - assemble_baseturfs(fake_turf_type) - if(!length(baseturfs)) - baseturfs = list(baseturfs) - baseturfs = baseturfs_string_list((baseturfs - (baseturfs & GLOB.blacklisted_automated_baseturfs)) + old_baseturfs, src) - return - else if(!length(new_baseturfs)) - new_baseturfs = list(new_baseturfs, fake_turf_type) - else - new_baseturfs += fake_turf_type - if(!length(baseturfs)) - baseturfs = list(baseturfs) - baseturfs = baseturfs_string_list(new_baseturfs + baseturfs, src) +/// Places the given turf on the bottom of the turf stack. +/turf/proc/place_on_bottom(turf/bottom_turf) + baseturfs = baseturfs_string_list( + list(initial(bottom_turf.baseturfs), bottom_turf) + baseturfs, + src + ) -// Make a new turf and put it on top -// The args behave identical to PlaceOnBottom except they go on top -// Things placed on top of closed turfs will ignore the topmost closed turf -// Returns the new turf -/turf/proc/PlaceOnTop(list/new_baseturfs, turf/fake_turf_type, flags) - var/area/turf_area = loc - if(new_baseturfs && !length(new_baseturfs)) - new_baseturfs = list(new_baseturfs) - flags = turf_area.PlaceOnTopReact(new_baseturfs, fake_turf_type, flags) // A hook so areas can modify the incoming args +/// Places a turf at the top of the stack +/turf/proc/place_on_top(turf/added_layer, flags) + var/list/turf/new_baseturfs = list() + + new_baseturfs.Add(baseturfs) + if(isopenturf(src)) + new_baseturfs.Add(type) + + return ChangeTurf(added_layer, new_baseturfs, flags) + +/// Places a turf on top - for map loading +/turf/proc/load_on_top(turf/added_layer, flags) + var/area/our_area = get_area(src) + flags = our_area.PlaceOnTopReact(list(baseturfs), added_layer, flags) - var/turf/newT if(flags & CHANGETURF_SKIP) // We haven't been initialized if(flags_1 & INITIALIZED_1) stack_trace("CHANGETURF_SKIP was used in a PlaceOnTop call for a turf that's initialized. This is a mistake. [src]([type])") assemble_baseturfs() - if(fake_turf_type) - if(!new_baseturfs) // If no baseturfs list then we want to create one from the turf type - if(!length(baseturfs)) - baseturfs = list(baseturfs) - var/list/old_baseturfs = baseturfs.Copy() - if(!isclosedturf(src)) - old_baseturfs += type - newT = ChangeTurf(fake_turf_type, null, flags) - newT.assemble_baseturfs(initial(fake_turf_type.baseturfs)) // The baseturfs list is created like roundstart - if(!length(newT.baseturfs)) - newT.baseturfs = list(baseturfs) - // The old baseturfs are put underneath, and we sort out the unwanted ones - newT.baseturfs = baseturfs_string_list(old_baseturfs + (newT.baseturfs - GLOB.blacklisted_automated_baseturfs), newT) - return newT - if(!length(baseturfs)) - baseturfs = list(baseturfs) - if(!isclosedturf(src)) - new_baseturfs = list(type) + new_baseturfs - baseturfs = baseturfs_string_list(baseturfs + new_baseturfs, src) - return ChangeTurf(fake_turf_type, null, flags) + + var/turf/new_turf if(!length(baseturfs)) baseturfs = list(baseturfs) + + var/list/old_baseturfs = baseturfs.Copy() if(!isclosedturf(src)) - baseturfs = baseturfs_string_list(baseturfs + type, src) - var/turf/change_type - if(length(new_baseturfs)) - change_type = new_baseturfs[new_baseturfs.len] - new_baseturfs.len-- - if(new_baseturfs.len) - baseturfs = baseturfs_string_list(baseturfs + new_baseturfs, src) - else - change_type = new_baseturfs - return ChangeTurf(change_type, null, flags) + old_baseturfs += type + + new_turf = ChangeTurf(added_layer, null, flags) + new_turf.assemble_baseturfs(initial(added_layer.baseturfs)) // The baseturfs list is created like roundstart + if(!length(new_turf.baseturfs)) + new_turf.baseturfs = list(baseturfs) + + // The old baseturfs are put underneath, and we sort out the unwanted ones + new_turf.baseturfs = baseturfs_string_list(old_baseturfs + (new_turf.baseturfs - GLOB.blacklisted_automated_baseturfs), new_turf) + return new_turf // Copy an existing turf and put it on top // Returns the new turf diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm index 1253d156a2c20c..2c2d5712b4689b 100644 --- a/code/game/turfs/change_turf.dm +++ b/code/game/turfs/change_turf.dm @@ -76,11 +76,11 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( var/old_lighting_corner_NW = lighting_corner_NW var/old_directional_opacity = directional_opacity var/old_dynamic_lumcount = dynamic_lumcount - //SKYRAT EDIT CHANGE + //NOVA EDIT CHANGE var/obj/effect/abstract/liquid_turf/old_liquids = liquids if(lgroup) lgroup.remove_from_group(src) - //SKYRAT EDIT END + //NOVA EDIT END var/old_rcd_memory = rcd_memory var/old_explosion_throw_details = explosion_throw_details var/old_opacity = opacity @@ -178,7 +178,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( else if(ispath(old_type, /turf/open/space)) for(var/turf/open/space/space_tile in RANGE_TURFS(1, src)) space_tile.enable_starlight() - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(old_liquids) if(new_turf.liquids) var/liquid_cache = new_turf.liquids //Need to cache and re-set some vars due to the cleaning on Destroy(), and turf references @@ -201,7 +201,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( old_liquids.remove_turf(src) else qdel(old_liquids, TRUE) - //SKYRAT EDIT END + //NOVA EDIT END if(old_opacity != opacity && SSticker) GLOB.cameranet.bareMajorChunkChange(src) @@ -224,17 +224,17 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( var/datum/gas_mixture/stashed_air = new() stashed_air.copy_from(air) var/stashed_state = excited - var/datum/pollution/stashed_pollution = pollution //SKYRAT EDIT ADDITION + var/datum/pollution/stashed_pollution = pollution //NOVA EDIT ADDITION var/datum/excited_group/stashed_group = excited_group . = ..() //If path == type this will return us, don't bank on making a new type if (!.) // changeturf failed or didn't do anything return var/turf/open/new_turf = . - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(stashed_pollution) new_turf.pollution = stashed_pollution stashed_pollution.handle_overlay() - //SKYRAT EDIT END + //NOVA EDIT END new_turf.air.copy_from(stashed_air) new_turf.excited = stashed_state new_turf.excited_group = stashed_group @@ -246,10 +246,10 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( if(stashed_group.should_display || SSair.display_all_groups) stashed_group.display_turf(new_turf) else - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(pollution) qdel(pollution) - //SKYRAT EDIT END + //NOVA EDIT END if(excited || excited_group) SSair.remove_from_active(src) //Clean up wall excitement, and refresh excited groups if(ispath(path, /turf/closed) || ispath(path, /turf/cordon)) diff --git a/code/game/turfs/closed/indestructible.dm b/code/game/turfs/closed/indestructible.dm index 72dbf6dd6faec6..d68fbe51b3e72d 100644 --- a/code/game/turfs/closed/indestructible.dm +++ b/code/game/turfs/closed/indestructible.dm @@ -40,7 +40,7 @@ smoothing_flags = SMOOTH_BITMASK smoothing_groups = SMOOTH_GROUP_PAPERFRAME canSmoothWith = SMOOTH_GROUP_PAPERFRAME - var/static/mutable_appearance/indestructible_paper = mutable_appearance('icons/obj/smooth_structures/paperframes.dmi',icon_state = "paper", layer = CLOSED_TURF_LAYER - 0.1) + var/static/mutable_appearance/indestructible_paper = mutable_appearance('icons/obj/smooth_structures/structure_variations.dmi',icon_state = "paper-whole", layer = CLOSED_TURF_LAYER - 0.1) /turf/closed/indestructible/weeb/Initialize(mapload) . = ..() @@ -67,12 +67,12 @@ desc = null icon = 'icons/blanks/blank_title.png' icon_state = "" - pixel_x = 0 // SKYRAT EDIT - Re-centering the title screen - ORIGINAL: pixel_x = -64 + pixel_x = 0 // NOVA EDIT - Re-centering the title screen - ORIGINAL: pixel_x = -64 plane = SPLASHSCREEN_PLANE bullet_bounce_sound = null INITIALIZE_IMMEDIATE(/turf/closed/indestructible/splashscreen) -/* SKYRAT EDIT REMOVAL +/* NOVA EDIT REMOVAL /turf/closed/indestructible/splashscreen/Initialize(mapload) . = ..() SStitle.splash_turf = src @@ -88,10 +88,10 @@ INITIALIZE_IMMEDIATE(/turf/closed/indestructible/splashscreen) pixel_x = 0 else if(width == 608) // 608x480 is widescreen pixel_x = -64 - // SKYRAT EDIT START - Wider widescreen + // NOVA EDIT START - Wider widescreen else if(width == 672) // Skyrat's widescreen is slightly wider than /tg/'s, so we need to accomodate that too. pixel_x = -96 - // SKYRAT EDIT END + // NOVA EDIT END /turf/closed/indestructible/splashscreen/vv_edit_var(var_name, var_value) . = ..() @@ -104,7 +104,7 @@ INITIALIZE_IMMEDIATE(/turf/closed/indestructible/splashscreen) /turf/closed/indestructible/splashscreen/examine() desc = pick(strings(SPLASH_FILE, "splashes")) return ..() -SKYRAT EDIT REMOVAL END */ +NOVA EDIT REMOVAL END */ /turf/closed/indestructible/start_area name = null @@ -198,8 +198,8 @@ SKYRAT EDIT REMOVAL END */ /turf/closed/indestructible/fakeglass name = "window" - icon = 'icons/obj/smooth_structures/reinforced_window.dmi' - icon_state = "fake_window" + icon = MAP_SWITCH('icons/obj/smooth_structures/reinforced_window.dmi', 'icons/obj/smooth_structures/structure_variations.dmi') + icon_state = MAP_SWITCH("reinforced_window-0", "fake_window") base_icon_state = "reinforced_window" opacity = FALSE smoothing_flags = SMOOTH_BITMASK @@ -368,9 +368,9 @@ SKYRAT EDIT REMOVAL END */ /turf/closed/indestructible/meat name = "dense meat wall" desc = "A huge chunk of dense, packed meat. Effectively impervious to conventional methods of destruction." - icon = 'icons/turf/walls/meat.dmi' - icon_state = "meatwall-0" - base_icon_state = "meatwall" + icon = 'icons/turf/walls/meat_wall.dmi' + icon_state = "meat_wall-0" + base_icon_state = "meat_wall" smoothing_flags = SMOOTH_BITMASK smoothing_groups = SMOOTH_GROUP_WALLS canSmoothWith = SMOOTH_GROUP_WALLS diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm index 012d331f12a700..8c23a4516a8d48 100644 --- a/code/game/turfs/closed/minerals.dm +++ b/code/game/turfs/closed/minerals.dm @@ -4,15 +4,19 @@ /turf/closed/mineral //wall piece name = "rock" - icon = MAP_SWITCH('modular_skyrat/modules/liquids/icons/turf/smoothrocks.dmi', 'icons/turf/mining.dmi') // SKYRAT EDIT CHANGE + icon = MAP_SWITCH('modular_nova/modules/liquids/icons/turf/smoothrocks.dmi', 'icons/turf/mining.dmi') // NOVA EDIT CHANGE icon_state = "rock" + smoothing_groups = SMOOTH_GROUP_CLOSED_TURFS + SMOOTH_GROUP_MINERAL_WALLS + canSmoothWith = SMOOTH_GROUP_MINERAL_WALLS smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER baseturfs = /turf/open/misc/asteroid/airless initial_gas_mix = AIRLESS_ATMOS opacity = TRUE density = TRUE + // We're a BIG wall, larger then 32x32, so we need to be on the game plane + // Otherwise we'll draw under shit in weird ways + plane = GAME_PLANE layer = EDGED_TURF_LAYER - plane = WALL_PLANE_UPPER base_icon_state = "smoothrocks" // This is static @@ -21,7 +25,7 @@ transform = MAP_SWITCH(TRANSLATE_MATRIX(-4, -4), matrix()) temperature = TCMB - color = "#677" //SKYRAT EDIT ADDITION + color = "#677" //NOVA EDIT ADDITION var/turf/open/floor/plating/turf_type = /turf/open/misc/asteroid/airless var/obj/item/stack/ore/mineralType = null @@ -37,14 +41,15 @@ /turf/closed/mineral/Initialize(mapload) - var/static/list/smoothing_groups = SMOOTH_GROUP_CLOSED_TURFS + SMOOTH_GROUP_MINERAL_WALLS - var/static/list/canSmoothWith = SMOOTH_GROUP_MINERAL_WALLS - - // The cost of the list() being in the type def is very large for something as common as minerals - src.smoothing_groups = smoothing_groups - src.canSmoothWith = canSmoothWith - - return ..() + . = ..() + // Mineral turfs are big, so they need to be on the game plane at a high layer + // But they're also turfs, so we need to cut them out from the light mask plane + // So we draw them as if they were on the game plane, and then overlay a copy onto + // The wall plane (so emissives/light masks behave) + // I am so sorry + var/static/mutable_appearance/wall_overlay = mutable_appearance('icons/turf/mining.dmi', "rock", appearance_flags = RESET_TRANSFORM) + wall_overlay.plane = MUTATE_PLANE(WALL_PLANE, src) + overlays += wall_overlay // Inlined version of the bump click element. way faster this way, the element's nice but it's too much overhead /turf/closed/mineral/Bumped(atom/movable/bumped_atom) @@ -100,7 +105,7 @@ if (!isturf(T)) return - if(TIMER_COOLDOWN_CHECK(src, REF(user))) //prevents mining turfs in progress + if(TIMER_COOLDOWN_RUNNING(src, REF(user))) //prevents mining turfs in progress return TIMER_COOLDOWN_START(src, REF(user), tool_mine_speed) @@ -121,7 +126,7 @@ var/turf/user_turf = user.loc if (!isturf(user_turf)) return - if(TIMER_COOLDOWN_CHECK(src, REF(user))) //prevents mining turfs in progress + if(TIMER_COOLDOWN_RUNNING(src, REF(user))) //prevents mining turfs in progress return var/mining_speed = mining_arms ? tool_mine_speed : hand_mine_speed TIMER_COOLDOWN_START(src, REF(user), mining_speed) @@ -231,13 +236,13 @@ var/path = pick(spawn_chance_list) if(ispath(path, /turf)) var/stored_flags = 0 - var/stored_color = color //SKYRAT EDIT ADDITION + var/stored_color = color //NOVA EDIT ADDITION if(turf_flags & NO_RUINS) stored_flags |= NO_RUINS var/turf/T = ChangeTurf(path,null,CHANGETURF_IGNORE_AIR) T.flags_1 |= stored_flags - T.color = stored_color //SKYRAT EDIT ADDITION + T.color = stored_color //NOVA EDIT ADDITION if(ismineralturf(T)) var/turf/closed/mineral/M = T M.turf_type = src.turf_type @@ -474,7 +479,7 @@ /obj/item/stack/ore/silver = 20, /obj/item/stack/ore/titanium = 8, /obj/item/stack/ore/uranium = 3, - /turf/closed/mineral/gibtonite/volcanic = 2, + /turf/closed/mineral/gibtonite/ice/icemoon = 2, ) /turf/closed/mineral/random/labormineral/ice/Change_Ore(ore_type, random = 0) @@ -663,7 +668,7 @@ /turf/closed/mineral/gibtonite mineralAmt = 1 - icon_state = "rock_Gibtonite_inactive" + MAP_SWITCH(, icon_state = "rock_Gibtonite_inactive") scan_state = "rock_Gibtonite" var/det_time = 8 //Countdown till explosion, but also rewards the player for how close you were to detonation when you defuse it var/stage = GIBTONITE_UNSTRUCK //How far into the lifecycle of gibtonite we are @@ -688,8 +693,7 @@ /turf/closed/mineral/gibtonite/proc/explosive_reaction(mob/user = null) if(stage == GIBTONITE_UNSTRUCK) - activated_overlay = mutable_appearance('icons/turf/smoothrocks.dmi', "rock_Gibtonite_inactive", ON_EDGED_TURF_LAYER) //shows in gaps between pulses if there are any - SET_PLANE(activated_overlay, WALL_PLANE_UPPER, src) + activated_overlay = mutable_appearance('icons/turf/smoothrocks_overlays.dmi', "rock_Gibtonite_inactive", ON_EDGED_TURF_LAYER) //shows in gaps between pulses if there are any add_overlay(activated_overlay) name = "gibtonite deposit" desc = "An active gibtonite reserve. Run!" @@ -708,7 +712,7 @@ /turf/closed/mineral/gibtonite/proc/countdown(notify_admins = FALSE) set waitfor = FALSE while(istype(src, /turf/closed/mineral/gibtonite) && stage == GIBTONITE_ACTIVE && det_time > 0 && mineralAmt >= 1) - flick_overlay_view(mutable_appearance('icons/turf/smoothrocks.dmi', "rock_Gibtonite_active", ON_EDGED_TURF_LAYER + 0.1), 0.5 SECONDS) //makes the animation pulse one time per tick + flick_overlay_view(mutable_appearance('icons/turf/smoothrocks_overlays.dmi', "rock_Gibtonite_active", ON_EDGED_TURF_LAYER + 0.1), 0.5 SECONDS) //makes the animation pulse one time per tick det_time-- sleep(0.5 SECONDS) if(istype(src, /turf/closed/mineral/gibtonite)) @@ -768,7 +772,7 @@ defer_change = TRUE /turf/closed/mineral/gibtonite/ice - icon_state = "icerock_Gibtonite_inactive" + MAP_SWITCH(, icon_state = "icerock_Gibtonite_inactive") icon = MAP_SWITCH('icons/turf/walls/icerock_wall.dmi', 'icons/turf/mining.dmi') base_icon_state = "icerock_wall" smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER diff --git a/code/game/turfs/closed/wall/material_walls.dm b/code/game/turfs/closed/wall/material_walls.dm index 22b85401523484..e6250007222088 100644 --- a/code/game/turfs/closed/wall/material_walls.dm +++ b/code/game/turfs/closed/wall/material_walls.dm @@ -1,9 +1,9 @@ /turf/closed/wall/material name = "wall" desc = "A huge chunk of material used to separate rooms." - icon = 'icons/turf/walls/materialwall.dmi' - icon_state = "materialwall-0" - base_icon_state = "materialwall" + icon = 'icons/turf/walls/material_wall.dmi' + icon_state = "material_wall-0" + base_icon_state = "material_wall" smoothing_flags = SMOOTH_BITMASK smoothing_groups = SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS + SMOOTH_GROUP_MATERIAL_WALLS canSmoothWith = SMOOTH_GROUP_MATERIAL_WALLS diff --git a/code/game/turfs/closed/wall/mineral_walls.dm b/code/game/turfs/closed/wall/mineral_walls.dm index 8678e77f520fe8..23e9a2cf775e27 100644 --- a/code/game/turfs/closed/wall/mineral_walls.dm +++ b/code/game/turfs/closed/wall/mineral_walls.dm @@ -186,7 +186,8 @@ name = "bamboo wall" desc = "A wall with a bamboo finish." icon = 'icons/turf/walls/bamboo_wall.dmi' - icon_state = "wall-0" + icon_state = "bamboo_wall-0" + base_icon_state = "bamboo_wall" smoothing_flags = SMOOTH_BITMASK smoothing_groups = SMOOTH_GROUP_WALLS + SMOOTH_GROUP_BAMBOO_WALLS + SMOOTH_GROUP_CLOSED_TURFS canSmoothWith = SMOOTH_GROUP_BAMBOO_WALLS diff --git a/code/game/turfs/closed/wall/misc_walls.dm b/code/game/turfs/closed/wall/misc_walls.dm index 9fbce09ace274c..be4b6ca7ad2959 100644 --- a/code/game/turfs/closed/wall/misc_walls.dm +++ b/code/game/turfs/closed/wall/misc_walls.dm @@ -45,21 +45,20 @@ /turf/closed/wall/rust //SDMM supports colors, this is simply for easier mapping //and should be removed on initialize - color = COLOR_ORANGE_BROWN + color = MAP_SWITCH(null, COLOR_ORANGE_BROWN) /turf/closed/wall/rust/Initialize(mapload) . = ..() - color = null AddElement(/datum/element/rust) /turf/closed/wall/r_wall/rust //SDMM supports colors, this is simply for easier mapping //and should be removed on initialize - color = COLOR_ORANGE_BROWN + color = MAP_SWITCH(null, COLOR_ORANGE_BROWN) + base_decon_state = "rusty_r_wall" /turf/closed/wall/r_wall/rust/Initialize(mapload) . = ..() - color = null AddElement(/datum/element/rust) /turf/closed/wall/mineral/bronze diff --git a/code/game/turfs/closed/wall/reinf_walls.dm b/code/game/turfs/closed/wall/reinf_walls.dm index b49912af8e04ad..3172e5a9e5662e 100644 --- a/code/game/turfs/closed/wall/reinf_walls.dm +++ b/code/game/turfs/closed/wall/reinf_walls.dm @@ -17,7 +17,8 @@ heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall. also indicates the temperature at wich the wall will melt (currently only able to melt with H/E pipes) ///Dismantled state, related to deconstruction. var/d_state = INTACT - + ///Base icon state to use for deconstruction + var/base_decon_state = "r_wall" /turf/closed/wall/r_wall/deconstruction_hints(mob/user) switch(d_state) @@ -200,8 +201,10 @@ // We don't react to smoothing changing here because this else exists only to "revert" intact changes /turf/closed/wall/r_wall/update_icon_state() if(d_state != INTACT) - icon_state = "r_wall-[d_state]" + icon = 'modular_nova/modules/aesthetics/walls/icons/reinforced_wall.dmi' // NOVA EDIT CHANGE - ORIGINAL: icon = 'icons/turf/walls/reinforced_states.dmi' + icon_state = "[base_decon_state]-[d_state]" else + icon = 'modular_nova/modules/aesthetics/walls/icons/reinforced_wall.dmi' // NOVA EDIT CHANGE - ORIGINAL: icon = 'icons/turf/walls/reinforced_wall.dmi' icon_state = "[base_icon_state]-[smoothing_junction]" return ..() diff --git a/code/game/turfs/closed/walls.dm b/code/game/turfs/closed/walls.dm index f8d411acee4445..2cc6d32bc03800 100644 --- a/code/game/turfs/closed/walls.dm +++ b/code/game/turfs/closed/walls.dm @@ -1,4 +1,3 @@ -#define MAX_DENT_DECALS 15 #define LEANING_OFFSET 11 /turf/closed/wall @@ -387,5 +386,4 @@ . = ..() SEND_SIGNAL(gone, COMSIG_LIVING_WALL_EXITED, src) -#undef MAX_DENT_DECALS #undef LEANING_OFFSET diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm index 8480b19940c7ef..e049c2c393f9b1 100644 --- a/code/game/turfs/open/_open.dm +++ b/code/game/turfs/open/_open.dm @@ -90,7 +90,7 @@ */ /turf/open/proc/replace_floor(turf/open/new_floor_path, flags) if (!overfloor_placed && initial(new_floor_path.overfloor_placed)) - PlaceOnTop(new_floor_path, flags = flags) + place_on_top(new_floor_path, flags = flags) return ChangeTurf(new_floor_path, flags = flags) @@ -285,7 +285,7 @@ return TRUE /turf/open/handle_slip(mob/living/carbon/slipper, knockdown_amount, obj/slippable, lube, paralyze_amount, force_drop) - if(slipper.movement_type & (FLYING | FLOATING)) + if(slipper.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) return FALSE if(!has_gravity(src)) return FALSE @@ -302,13 +302,13 @@ // Stops sliding slide_distance = 0 - // SKYRAT EDIT START - Akula species + // NOVA EDIT START - Akula species if(HAS_TRAIT(slipper, TRAIT_SLIPPERY)) if(!(lube & SLIDE_ICE)) lube |= SLIDE slide_distance = rand(SLIPPERY_MIN, SLIPPERY_MAX) - // SKYRAT EDIT END + // NOVA EDIT END var/obj/buckled_obj if(slipper.buckled) @@ -408,7 +408,7 @@ return playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE) - var/turf/open/floor/plating/new_plating = PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + var/turf/open/floor/plating/new_plating = place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) if(lattice) qdel(lattice) else @@ -446,4 +446,3 @@ playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE) new /obj/structure/girder/tram(src) - diff --git a/code/game/turfs/open/asteroid.dm b/code/game/turfs/open/asteroid.dm index c15261a988059d..b453fb0c4bee32 100644 --- a/code/game/turfs/open/asteroid.dm +++ b/code/game/turfs/open/asteroid.dm @@ -232,7 +232,8 @@ GLOBAL_LIST_EMPTY(dug_up_basalt) /// Exact subtype as parent, just used in ruins to prevent other ruins/chasms from spawning on top of it. /turf/open/misc/asteroid/snow/icemoon/do_not_chasm - turf_flags = CAN_BE_DIRTY_1 | IS_SOLID | NO_RUST | NO_RUINS + flags_1 = CAN_BE_DIRTY_1 + turf_flags = IS_SOLID | NO_RUST | NO_RUINS /turf/open/misc/asteroid/snow/icemoon/do_not_scrape flags_1 = CAN_BE_DIRTY_1 diff --git a/code/game/turfs/open/chasm.dm b/code/game/turfs/open/chasm.dm index 3af4d12b176a33..48ab1ceca38fd1 100644 --- a/code/game/turfs/open/chasm.dm +++ b/code/game/turfs/open/chasm.dm @@ -42,7 +42,7 @@ /turf/open/chasm/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, list/rcd_data) if(rcd_data["[RCD_DESIGN_MODE]"] == RCD_TURF && rcd_data["[RCD_DESIGN_PATH]"] == /turf/open/floor/plating/rcd) - PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) return TRUE return FALSE @@ -76,6 +76,9 @@ /turf/open/chasm/proc/apply_components(mapload) AddComponent(/datum/component/chasm, GET_TURF_BELOW(src), mapload) +/turf/open/chasm/can_cross_safely(atom/movable/crossing) + return HAS_TRAIT(src, TRAIT_CHASM_STOPPED) || HAS_TRAIT(crossing, TRAIT_MOVE_FLYING) + // Chasms for Lavaland, with planetary atmos and lava glow /turf/open/chasm/lavaland initial_gas_mix = LAVALAND_DEFAULT_ATMOS diff --git a/code/game/turfs/open/cliff.dm b/code/game/turfs/open/cliff.dm index 507f3eb7a7a75d..1417e527e643d8 100644 --- a/code/game/turfs/open/cliff.dm +++ b/code/game/turfs/open/cliff.dm @@ -82,6 +82,11 @@ // We can walk infront of the bottom cliff turf, so check that here if(!iscliffturf(get_step(src, fall_direction)) && !(get_dir(arrived, src) & fall_direction)) return FALSE + + // gravity + // marked in UNLINT due to a spacemandmm bug: https://github.com/SpaceManiac/SpacemanDMM/issues/382 (REMOVE ONCE FIXED!) + if(UNLINT(!arrived.has_gravity(src))) + return FALSE return TRUE diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm index a5e5c2c1bebe53..28a60c83ddbcb7 100644 --- a/code/game/turfs/open/floor.dm +++ b/code/game/turfs/open/floor.dm @@ -9,7 +9,7 @@ barefootstep = FOOTSTEP_HARD_BAREFOOT clawfootstep = FOOTSTEP_HARD_CLAW heavyfootstep = FOOTSTEP_GENERIC_HEAVY - flags_1 = CAN_BE_DIRTY_1 | NO_SCREENTIPS_1 + flags_1 = NO_SCREENTIPS_1 | CAN_BE_DIRTY_1 turf_flags = IS_SOLID smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_OPEN_FLOOR canSmoothWith = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_OPEN_FLOOR @@ -274,7 +274,7 @@ if(girder) return girder.rcd_act(user, the_rcd, rcd_data) - PlaceOnTop(/turf/closed/wall) + place_on_top(/turf/closed/wall) return TRUE if(RCD_WINDOWGRILLE) //check if we are building a window diff --git a/code/game/turfs/open/floor/fancy_floor.dm b/code/game/turfs/open/floor/fancy_floor.dm index 32cd036fb5edc9..d498d47a6c806f 100644 --- a/code/game/turfs/open/floor/fancy_floor.dm +++ b/code/game/turfs/open/floor/fancy_floor.dm @@ -118,19 +118,23 @@ /turf/open/floor/bamboo/tatami desc = "A traditional Japanese floor mat." - icon_state = "tatami_green" + icon = 'icons/turf/floors/floor_variations.dmi' + icon_state = "bamboo-green" floor_tile = /obj/item/stack/tile/bamboo/tatami smoothing_flags = NONE /turf/open/floor/bamboo/tatami/broken_states() + // This state doesn't exist why is it here? return list("tatami-damaged") /turf/open/floor/bamboo/tatami/purple - icon_state = "tatami_purple" + icon = 'icons/turf/floors/floor_variations.dmi' + icon_state = "bamboo-purple" floor_tile = /obj/item/stack/tile/bamboo/tatami/purple /turf/open/floor/bamboo/tatami/black - icon_state = "tatami_black" + icon = 'icons/turf/floors/floor_variations.dmi' + icon_state = "bamboo-black" floor_tile = /obj/item/stack/tile/bamboo/tatami/black /turf/open/floor/grass @@ -274,7 +278,8 @@ QUEUE_SMOOTH_NEIGHBORS(src) /turf/open/floor/carpet/lone - icon_state = "carpetsymbol" + icon = 'icons/turf/floors/floor_variations.dmi' + icon_state = "carpet-symbol" smoothing_flags = NONE floor_tile = /obj/item/stack/tile/carpet/symbol @@ -282,7 +287,8 @@ initial_gas_mix = LAVALAND_DEFAULT_ATMOS /turf/open/floor/carpet/lone/star - icon_state = "carpetstar" + icon = 'icons/turf/floors/floor_variations.dmi' + icon_state = "carpet-star" floor_tile = /obj/item/stack/tile/carpet/star /turf/open/floor/carpet/black @@ -480,17 +486,20 @@ /turf/open/floor/carpet/neon/simple name = "simple neon carpet" - icon = 'icons/turf/floors/carpet_neon_simple.dmi' + icon = 'icons/turf/floors/carpet_neon_base.dmi' icon_state = "base-255" base_icon_state = "base" + neon_icon = 'icons/turf/floors/carpet_neon_light.dmi' neon_icon_state = "light" floor_tile = /obj/item/stack/tile/carpet/neon/simple smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON /turf/open/floor/carpet/neon/simple/nodots + icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi' icon_state = "base-nodots-255" base_icon_state = "base-nodots" + neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi' neon_icon_state = "light-nodots" floor_tile = /obj/item/stack/tile/carpet/neon/simple/nodots smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_NODOTS @@ -505,8 +514,10 @@ canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_WHITE /turf/open/floor/carpet/neon/simple/white/nodots + icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi' icon_state = "base-nodots-255" base_icon_state = "base-nodots" + neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi' neon_icon_state = "light-nodots" floor_tile = /obj/item/stack/tile/carpet/neon/simple/white/nodots smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_WHITE_NODOTS @@ -515,6 +526,7 @@ /turf/open/floor/carpet/neon/simple/black name = "simple black neon carpet" desc = "A rubbery mat with a inset pattern of black phosphorescent dye." + neon_icon = 'icons/turf/floors/carpet_neon_glow.dmi' neon_icon_state = "glow" // This one also lights up the edges of the lines. neon_color = COLOR_BLACK floor_tile = /obj/item/stack/tile/carpet/neon/simple/black @@ -522,8 +534,10 @@ canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_BLACK /turf/open/floor/carpet/neon/simple/black/nodots + icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi' icon_state = "base-nodots-255" base_icon_state = "base-nodots" + neon_icon = 'icons/turf/floors/carpet_neon_glow_nodots.dmi' neon_icon_state = "glow-nodots" neon_color = COLOR_BLACK floor_tile = /obj/item/stack/tile/carpet/neon/simple/black/nodots @@ -539,8 +553,10 @@ canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_RED /turf/open/floor/carpet/neon/simple/red/nodots + icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi' icon_state = "base-nodots-255" base_icon_state = "base-nodots" + neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi' neon_icon_state = "light-nodots" floor_tile = /obj/item/stack/tile/carpet/neon/simple/red/nodots smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_RED_NODOTS @@ -555,8 +571,10 @@ canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_ORANGE /turf/open/floor/carpet/neon/simple/orange/nodots + icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi' icon_state = "base-nodots-255" base_icon_state = "base-nodots" + neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi' neon_icon_state = "light-nodots" floor_tile = /obj/item/stack/tile/carpet/neon/simple/orange/nodots smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_ORANGE_NODOTS @@ -571,8 +589,10 @@ canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_YELLOW /turf/open/floor/carpet/neon/simple/yellow/nodots + icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi' icon_state = "base-nodots-255" base_icon_state = "base-nodots" + neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi' neon_icon_state = "light-nodots" floor_tile = /obj/item/stack/tile/carpet/neon/simple/yellow/nodots smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_YELLOW_NODOTS @@ -587,8 +607,10 @@ canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_LIME /turf/open/floor/carpet/neon/simple/lime/nodots + icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi' icon_state = "base-nodots-255" base_icon_state = "base-nodots" + neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi' neon_icon_state = "light-nodots" floor_tile = /obj/item/stack/tile/carpet/neon/simple/lime/nodots smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_LIME_NODOTS @@ -603,8 +625,10 @@ canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_GREEN /turf/open/floor/carpet/neon/simple/green/nodots + icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi' icon_state = "base-nodots-255" base_icon_state = "base-nodots" + neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi' neon_icon_state = "light-nodots" floor_tile = /obj/item/stack/tile/carpet/neon/simple/green/nodots smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_GREEN_NODOTS @@ -619,8 +643,10 @@ canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_TEAL /turf/open/floor/carpet/neon/simple/teal/nodots + icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi' icon_state = "base-nodots-255" base_icon_state = "base-nodots" + neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi' neon_icon_state = "light-nodots" floor_tile = /obj/item/stack/tile/carpet/neon/simple/teal/nodots smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_TEAL_NODOTS @@ -635,8 +661,10 @@ canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_CYAN /turf/open/floor/carpet/neon/simple/cyan/nodots + icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi' icon_state = "base-nodots-255" base_icon_state = "base-nodots" + neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi' neon_icon_state = "light-nodots" floor_tile = /obj/item/stack/tile/carpet/neon/simple/cyan/nodots smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_CYAN_NODOTS @@ -651,8 +679,10 @@ canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_BLUE /turf/open/floor/carpet/neon/simple/blue/nodots + icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi' icon_state = "base-nodots-255" base_icon_state = "base-nodots" + neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi' neon_icon_state = "light-nodots" floor_tile = /obj/item/stack/tile/carpet/neon/simple/blue/nodots smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_BLUE_NODOTS @@ -667,8 +697,10 @@ canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_PURPLE /turf/open/floor/carpet/neon/simple/purple/nodots + icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi' icon_state = "base-nodots-255" base_icon_state = "base-nodots" + neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi' neon_icon_state = "light-nodots" floor_tile = /obj/item/stack/tile/carpet/neon/simple/purple/nodots smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_PURPLE_NODOTS @@ -683,8 +715,10 @@ canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_VIOLET /turf/open/floor/carpet/neon/simple/violet/nodots + icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi' icon_state = "base-nodots-255" base_icon_state = "base-nodots" + neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi' neon_icon_state = "light-nodots" floor_tile = /obj/item/stack/tile/carpet/neon/simple/violet/nodots smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_VIOLET_NODOTS @@ -699,8 +733,10 @@ canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_PINK /turf/open/floor/carpet/neon/simple/pink/nodots + icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi' icon_state = "base-nodots-255" base_icon_state = "base-nodots" + neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi' neon_icon_state = "light-nodots" floor_tile = /obj/item/stack/tile/carpet/neon/simple/pink/nodots smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_PINK_NODOTS diff --git a/code/game/turfs/open/floor/glass.dm b/code/game/turfs/open/floor/glass.dm index c28ec9e1d4e89b..a97f5ab1cb583b 100644 --- a/code/game/turfs/open/floor/glass.dm +++ b/code/game/turfs/open/floor/glass.dm @@ -88,7 +88,7 @@ /turf/open/floor/glass/plasma name = "plasma glass floor" - desc = "Studies by the Nanotrasen Materials Safety Division have not yet determined if this is safe to jump on, do so at your own risk." + desc = "Studies by the Symphionia Materials Safety Division have not yet determined if this is safe to jump on, do so at your own risk." icon = 'icons/turf/floors/plasma_glass.dmi' icon_state = "plasma_glass-0" base_icon_state = "plasma_glass" diff --git a/code/game/turfs/open/floor/misc_floor.dm b/code/game/turfs/open/floor/misc_floor.dm index ce34f760a672d2..b4fb5c8f2b4fea 100644 --- a/code/game/turfs/open/floor/misc_floor.dm +++ b/code/game/turfs/open/floor/misc_floor.dm @@ -156,7 +156,7 @@ /turf/open/floor/noslip/tram/Initialize(mapload) . = ..() - var/current_holiday_color = request_holiday_colors(src, PATTERN_VERTICAL_STRIPE) + var/current_holiday_color = request_station_colors(src, PATTERN_VERTICAL_STRIPE) || request_holiday_colors(src, PATTERN_VERTICAL_STRIPE) if(current_holiday_color) color = current_holiday_color else diff --git a/code/game/turfs/open/floor/plating.dm b/code/game/turfs/open/floor/plating.dm index a38338010d4103..3e58d647023e24 100644 --- a/code/game/turfs/open/floor/plating.dm +++ b/code/game/turfs/open/floor/plating.dm @@ -64,7 +64,7 @@ to_chat(user, span_notice("You begin reinforcing the floor...")) if(do_after(user, 30, target = src)) if (R.get_amount() >= 2 && !istype(src, /turf/open/floor/engine)) - PlaceOnTop(/turf/open/floor/engine, flags = CHANGETURF_INHERIT_AIR) + place_on_top(/turf/open/floor/engine, flags = CHANGETURF_INHERIT_AIR) playsound(src, 'sound/items/deconstruct.ogg', 80, TRUE) R.use(2) to_chat(user, span_notice("You reinforce the floor.")) @@ -100,7 +100,7 @@ return sheets.use(PLATE_REINFORCE_COST) playsound(src, 'sound/machines/creak.ogg', 100, vary = TRUE) - PlaceOnTop(/turf/open/floor/plating/reinforced) + place_on_top(/turf/open/floor/plating/reinforced) else if(!iscyborg(user)) balloon_alert(user, "too damaged, use a welding tool!") @@ -177,8 +177,9 @@ ScrapeAway(flags = CHANGETURF_INHERIT_AIR) return TRUE -/turf/open/floor/plating/foam/tool_act(mob/living/user, obj/item/tool, tool_type, is_right_clicking) - return +/turf/open/floor/plating/foam/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) + SHOULD_CALL_PARENT(FALSE) + return NONE // Fuck you //reinforced plating deconstruction states #define PLATE_INTACT 0 diff --git a/code/game/turfs/open/floor/plating/misc_plating.dm b/code/game/turfs/open/floor/plating/misc_plating.dm index 1933b291aee932..9b79313111f132 100644 --- a/code/game/turfs/open/floor/plating/misc_plating.dm +++ b/code/game/turfs/open/floor/plating/misc_plating.dm @@ -6,6 +6,10 @@ initial_gas_mix = OPENTURF_LOW_PRESSURE baseturfs = /turf/open/floor/plating/lowpressure +/turf/open/floor/plating/dumpsterair + initial_gas_mix = OPENTURF_DIRTY_ATMOS + temperature = 309 + /turf/open/floor/plating/icemoon icon_state = "plating" initial_gas_mix = ICEMOON_DEFAULT_ATMOS diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm index 623da55f10409b..1a174723d85b80 100644 --- a/code/game/turfs/open/lava.dm +++ b/code/game/turfs/open/lava.dm @@ -49,6 +49,12 @@ if(!smoothing_flags) update_appearance() + +/turf/open/lava/Destroy() + for(var/mob/living/leaving_mob in contents) + REMOVE_TRAIT(leaving_mob, TRAIT_PERMANENTLY_ONFIRE, TURF_TRAIT) + return ..() + /turf/open/lava/update_overlays() . = ..() . += emissive_appearance(mask_icon, mask_state, src) @@ -62,7 +68,7 @@ // But that's rare, and I'm ok with that, quartering our light source count is useful var/mutable_appearance/light_mask = mutable_appearance(mask_icon, mask_state, LIGHTING_MASK_LAYER, src, LIGHTING_PLANE) light_mask.blend_mode = BLEND_MULTIPLY - light_mask.color = list(-1,0,0,0, 0,-1,0,0, 0,0,-1,0, 0,0,0,1, 1,1,1,0) + light_mask.color = COLOR_MATRIX_INVERT . += light_mask /// Refreshes this lava turf's lighting @@ -140,18 +146,13 @@ if(isliving(gone) && !islava(gone.loc)) REMOVE_TRAIT(gone, TRAIT_PERMANENTLY_ONFIRE, TURF_TRAIT) -/turf/open/lava/Destroy() - for(var/mob/living/leaving_mob in contents) - REMOVE_TRAIT(leaving_mob, TRAIT_PERMANENTLY_ONFIRE, TURF_TRAIT) - return ..() - /turf/open/lava/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) if(burn_stuff(AM)) START_PROCESSING(SSobj, src) /turf/open/lava/process(seconds_per_tick) if(!burn_stuff(null, seconds_per_tick)) - STOP_PROCESSING(SSobj, src) + return PROCESS_KILL /turf/open/lava/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) if(the_rcd.mode == RCD_TURF && the_rcd.rcd_design_path == /turf/open/floor/plating/rcd) @@ -160,7 +161,7 @@ /turf/open/lava/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, list/rcd_data) if(rcd_data["[RCD_DESIGN_MODE]"] == RCD_TURF && rcd_data["[RCD_DESIGN_PATH]"] == /turf/open/floor/plating/rcd) - PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) return TRUE return FALSE @@ -217,9 +218,7 @@ return TRUE /turf/open/lava/proc/is_safe() - if(HAS_TRAIT(src, TRAIT_LAVA_STOPPED)) - return TRUE - return FALSE + return HAS_TRAIT(src, TRAIT_LAVA_STOPPED) ///Generic return value of the can_burn_stuff() proc. Does nothing. #define LAVA_BE_IGNORING 0 @@ -246,7 +245,9 @@ . = TRUE /turf/open/lava/proc/can_burn_stuff(atom/movable/burn_target) - if(burn_target.movement_type & (FLYING|FLOATING)) //you're flying over it. + if(QDELETED(burn_target)) + return LAVA_BE_IGNORING + if(burn_target.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) //you're flying over it. return LAVA_BE_IGNORING if(isobj(burn_target)) @@ -265,7 +266,7 @@ var/mob/living/burn_living = burn_target var/atom/movable/burn_buckled = burn_living.buckled if(burn_buckled) - if(burn_buckled.movement_type & (FLYING|FLOATING)) + if(burn_buckled.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) return LAVA_BE_PROCESSING if(isobj(burn_buckled)) var/obj/burn_buckled_obj = burn_buckled @@ -288,6 +289,9 @@ #undef LAVA_BE_BURNING /turf/open/lava/proc/do_burn(atom/movable/burn_target, seconds_per_tick = 1) + if(QDELETED(burn_target)) + return FALSE + . = TRUE if(isobj(burn_target)) var/obj/burn_obj = burn_target @@ -308,12 +312,13 @@ var/mob/living/burn_living = burn_target ADD_TRAIT(burn_living, TRAIT_PERMANENTLY_ONFIRE, TURF_TRAIT) + burn_living.ignite_mob() + burn_living.adjust_fire_stacks(lava_firestacks * seconds_per_tick) burn_living.update_fire() - burn_living.adjustFireLoss(lava_damage * seconds_per_tick) - if(!QDELETED(burn_living)) //mobs turning into object corpses could get deleted here. - burn_living.adjust_fire_stacks(lava_firestacks * seconds_per_tick) - burn_living.ignite_mob() + +/turf/open/lava/can_cross_safely(atom/movable/crossing) + return HAS_TRAIT(src, TRAIT_LAVA_STOPPED) || HAS_TRAIT(crossing, immunity_trait ) || HAS_TRAIT(crossing, TRAIT_MOVE_FLYING) /turf/open/lava/smooth name = "lava" @@ -365,37 +370,40 @@ /turf/open/lava/plasma/do_burn(atom/movable/burn_target, seconds_per_tick = 1) . = TRUE - if(isobj(burn_target)) - return FALSE // Does nothing against objects. Old code. + if(!isliving(burn_target)) + return FALSE var/mob/living/burn_living = burn_target - burn_living.adjustFireLoss(2) - if(QDELETED(burn_living)) - return - burn_living.adjust_fire_stacks(20) //dipping into a stream of plasma would probably make you more flammable than usual - burn_living.adjust_bodytemperature(-rand(50,65)) //its cold, man - if(!ishuman(burn_living) || SPT_PROB(65, seconds_per_tick)) + var/need_mob_update + // This is from plasma, so it should obey plasma biotype requirements + need_mob_update += burn_living.adjustToxLoss(15, updating_health = FALSE, required_biotype = MOB_ORGANIC) + need_mob_update += burn_living.adjustFireLoss(25, updating_health = FALSE) + if(need_mob_update) + burn_living.updatehealth() + + if(QDELETED(burn_living) \ + || !ishuman(burn_living) \ + || HAS_TRAIT(burn_living, TRAIT_NODISMEMBER) \ + || HAS_TRAIT(burn_living, TRAIT_NO_PLASMA_TRANSFORM) \ + || SPT_PROB(65, seconds_per_tick) \ + ) return + var/mob/living/carbon/human/burn_human = burn_living - var/datum/species/burn_species = burn_human.dna.species - if(istype(burn_species, /datum/species/plasmaman) || istype(burn_species, /datum/species/android)) //ignore plasmamen/robotic species - return - var/list/plasma_parts = list()//a list of the organic parts to be turned into plasma limbs - var/list/robo_parts = list()//keep a reference of robotic parts so we know if we can turn them into a plasmaman + var/list/immune_parts = list() // Parts we can't transform because they're not organic or can't be dismembered + var/list/transform_parts = list() // Parts we want to transform + for(var/obj/item/bodypart/burn_limb as anything in burn_human.bodyparts) - if(IS_ORGANIC_LIMB(burn_limb) && burn_limb.limb_id != SPECIES_PLASMAMAN) //getting every organic, non-plasmaman limb (augments/androids are immune to this) - plasma_parts += burn_limb - if(IS_ROBOTIC_LIMB(burn_limb)) - robo_parts += burn_limb + if(!IS_ORGANIC_LIMB(burn_limb) || !burn_limb.can_dismember()) + immune_parts += burn_limb + continue + if(burn_limb.limb_id == SPECIES_PLASMAMAN) + continue + transform_parts += burn_limb - var/need_mob_update - need_mob_update += burn_human.adjustToxLoss(15, updating_health = FALSE, required_biotype = MOB_ORGANIC) // This is from plasma, so it should obey plasma biotype requirements - need_mob_update += burn_human.adjustFireLoss(25, updating_health = FALSE) - if(need_mob_update) - burn_human.updatehealth() - if(plasma_parts.len) - var/obj/item/bodypart/burn_limb = pick(plasma_parts) //using the above-mentioned list to get a choice of limbs + if(length(transform_parts)) + var/obj/item/bodypart/burn_limb = pick_n_take(transform_parts) burn_human.emote("scream") var/obj/item/bodypart/plasmalimb switch(burn_limb.body_zone) //get plasmaman limb to swap in @@ -411,16 +419,20 @@ plasmalimb = new /obj/item/bodypart/chest/plasmaman if(BODY_ZONE_HEAD) plasmalimb = new /obj/item/bodypart/head/plasmaman - burn_human.del_and_replace_bodypart(plasmalimb) + + burn_human.del_and_replace_bodypart(plasmalimb, special = TRUE) burn_human.update_body_parts() burn_human.emote("scream") burn_human.visible_message(span_warning("[burn_human]'s [burn_limb.plaintext_zone] melts down to the bone!"), \ - span_userdanger("You scream out in pain as your [burn_limb.plaintext_zone] melts down to the bone, leaving an eerie plasma-like glow where flesh used to be!")) - if(!plasma_parts.len && !robo_parts.len) //a person with no potential organic limbs left AND no robotic limbs, time to turn them into a plasmaman - burn_human.ignite_mob() - burn_human.set_species(/datum/species/plasmaman) - burn_human.visible_message(span_warning("[burn_human] bursts into a brilliant purple flame as [burn_human.p_their()] entire body is that of a skeleton!"), \ - span_userdanger("Your senses numb as all of your remaining flesh is turned into a purple slurry, sloshing off your body and leaving only your bones to show in a vibrant purple!")) + span_userdanger("You scream out in pain as your [burn_limb.plaintext_zone] melts down to the bone, held together only by strands of purple fungus!")) + + // If all of your limbs are plasma then congrats: you are plasma man + if(length(immune_parts) || length(transform_parts)) + return + burn_human.ignite_mob() + burn_human.set_species(/datum/species/plasmaman) + burn_human.visible_message(span_warning("[burn_human] bursts into flame as the last of [burn_human.p_their()] body is coated in fungus!"), \ + span_userdanger("Your senses numb as what remains of your flesh sloughs off, revealing the plasma-encrusted bone beneath!")) //mafia specific tame happy plasma (normal atmos, no slowdown) /turf/open/lava/plasma/mafia diff --git a/code/game/turfs/open/misc.dm b/code/game/turfs/open/misc.dm index edf9e92c8a9335..a704c7f12b1681 100644 --- a/code/game/turfs/open/misc.dm +++ b/code/game/turfs/open/misc.dm @@ -5,8 +5,8 @@ name = "coder/mapper fucked up" desc = "report on github please" - flags_1 = NO_SCREENTIPS_1 - turf_flags = CAN_BE_DIRTY_1 | IS_SOLID | NO_RUST + flags_1 = NO_SCREENTIPS_1 | CAN_BE_DIRTY_1 + turf_flags = IS_SOLID | NO_RUST footstep = FOOTSTEP_FLOOR barefootstep = FOOTSTEP_HARD_BAREFOOT @@ -144,7 +144,7 @@ if(girder) return girder.rcd_act(user, the_rcd, rcd_data) - PlaceOnTop(/turf/closed/wall) + place_on_top(/turf/closed/wall) return TRUE if(RCD_WINDOWGRILLE) //check if we are building a window diff --git a/code/game/turfs/open/openspace.dm b/code/game/turfs/open/openspace.dm index 8b8b7ca00c67e9..f6a9dd8b77dc67 100644 --- a/code/game/turfs/open/openspace.dm +++ b/code/game/turfs/open/openspace.dm @@ -145,7 +145,7 @@ /turf/open/openspace/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, list/rcd_data) if(rcd_data["[RCD_DESIGN_MODE]"] == RCD_TURF && rcd_data["[RCD_DESIGN_PATH]"] == /turf/open/floor/plating/rcd) - PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) return TRUE return FALSE @@ -163,8 +163,11 @@ ChangeTurf(new_floor_path, flags = flags) return // Create plating under tiled floor we try to create directly onto the air - PlaceOnTop(/turf/open/floor/plating, flags = flags) - PlaceOnTop(new_floor_path, flags = flags) + place_on_top(/turf/open/floor/plating, flags = flags) + place_on_top(new_floor_path, flags = flags) + +/turf/open/openspace/can_cross_safely(atom/movable/crossing) + return HAS_TRAIT(crossing, TRAIT_MOVE_FLYING) /turf/open/openspace/icemoon name = "ice chasm" diff --git a/code/game/turfs/open/sand.dm b/code/game/turfs/open/sand.dm index c821b9d45162b5..cfcd4dccfb1fc3 100644 --- a/code/game/turfs/open/sand.dm +++ b/code/game/turfs/open/sand.dm @@ -53,6 +53,7 @@ name = "dirt" desc = "Upon closer examination, it's still dirt." icon = 'icons/turf/floors.dmi' + damaged_dmi = 'icons/turf/damaged.dmi' icon_state = "sand" base_icon_state = "sand" bullet_bounce_sound = null @@ -66,6 +67,9 @@ . = ..() icon_state = "sand_damaged" +/turf/open/misc/sandy_dirt/broken_states() + return list("sand_damaged") + /turf/open/misc/ironsand gender = PLURAL name = "iron sand" diff --git a/code/game/turfs/open/space/space.dm b/code/game/turfs/open/space/space.dm index 182e918dc33a28..d404870e1c8cf9 100644 --- a/code/game/turfs/open/space/space.dm +++ b/code/game/turfs/open/space/space.dm @@ -229,7 +229,7 @@ GLOBAL_LIST_EMPTY(starlight) /turf/open/space/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, list/rcd_data) if(the_rcd.mode == RCD_TURF) if(rcd_data["[RCD_DESIGN_PATH]"] == /turf/open/floor/plating/rcd) - PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) return TRUE else if(rcd_data["[RCD_DESIGN_PATH]"] == /obj/structure/lattice/catwalk) var/obj/structure/lattice/lattice = locate(/obj/structure/lattice, src) @@ -254,6 +254,9 @@ GLOBAL_LIST_EMPTY(starlight) destination_y = dest_y destination_z = dest_z +/turf/open/space/can_cross_safely(atom/movable/crossing) + return HAS_TRAIT(crossing, TRAIT_SPACEWALK) + /turf/open/space/openspace icon = 'icons/turf/floors.dmi' icon_state = MAP_SWITCH("pure_white", "invisible") @@ -343,5 +346,5 @@ GLOBAL_LIST_EMPTY(starlight) ChangeTurf(new_floor_path, flags = flags) return // Create plating under tiled floor we try to create directly onto space - PlaceOnTop(/turf/open/floor/plating, flags = flags) - PlaceOnTop(new_floor_path, flags = flags) + place_on_top(/turf/open/floor/plating, flags = flags) + place_on_top(new_floor_path, flags = flags) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index a16c57105211ba..8f29bb2e2c2aba 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -6,7 +6,7 @@ GLOBAL_LIST_EMPTY(station_turfs) vis_flags = VIS_INHERIT_ID // Important for interaction with and visualization of openspace. luminosity = 1 light_height = LIGHTING_HEIGHT_FLOOR - + ///what /mob/oranges_ear instance is already assigned to us as there should only ever be one. ///used for guaranteeing there is only one oranges_ear per turf when assigned, speeds up view() iteration var/mob/oranges_ear/assigned_oranges_ear @@ -600,7 +600,7 @@ GLOBAL_LIST_EMPTY(station_turfs) . = ..() if((acidpwr <= 0) || (acid_volume <= 0)) return FALSE - if(QDELETED(src)) //skyrat edit: fix createanddestroy + if(QDELETED(src)) //NOVA EDIT: fix createanddestroy return FALSE AddComponent(/datum/component/acid, acidpwr, acid_volume, GLOB.acid_overlay) @@ -618,7 +618,7 @@ GLOBAL_LIST_EMPTY(station_turfs) AddElement(/datum/element/rust) /turf/handle_fall(mob/faller) - SEND_SIGNAL(src, COMSIG_TURF_MOB_FALL, faller) //SKYRAT EDIT ADDITION + SEND_SIGNAL(src, COMSIG_TURF_MOB_FALL, faller) //NOVA EDIT ADDITION if(has_gravity(src)) playsound(src, SFX_BODYFALL, 50, TRUE) faller.drop_all_held_items() @@ -756,3 +756,7 @@ GLOBAL_LIST_EMPTY(station_turfs) explosive_resistance -= get_explosive_block() inherent_explosive_resistance = explosion_block explosive_resistance += get_explosive_block() + +/// Returns whether it is safe for an atom to move across this turf +/turf/proc/can_cross_safely(atom/movable/crossing) + return TRUE diff --git a/code/game/world.dm b/code/game/world.dm index de6386243193ac..99af6a6dbf0024 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -190,7 +190,7 @@ GLOBAL_VAR(restart_counter) data["tick_usage"] = world.tick_usage data["tick_lag"] = world.tick_lag data["time"] = world.time - data["timestamp"] = logger.unix_timestamp_string() + data["timestamp"] = rustg_unix_timestamp() return data /world/proc/SetupLogs() @@ -326,6 +326,7 @@ GLOBAL_VAR(restart_counter) shutdown_logging() // See comment below. auxcleanup() TgsEndProcess() + return ..() log_world("World rebooted at [time_stamp()]") @@ -341,13 +342,13 @@ GLOBAL_VAR(restart_counter) AUXTOOLS_FULL_SHUTDOWN(AUXLUA) var/debug_server = world.GetConfig("env", "AUXTOOLS_DEBUG_DLL") if (debug_server) - LIBCALL(debug_server, "auxtools_shutdown")() + call_ext(debug_server, "auxtools_shutdown")() /world/Del() auxcleanup() . = ..() -/* SKYRAT EDIT REMOVAL - OVERRIDEN +/* NOVA EDIT REMOVAL - OVERRIDDEN /world/proc/update_status() var/list/features = list() @@ -380,12 +381,23 @@ GLOBAL_VAR(restart_counter) if(length(features)) new_status += ": [jointext(features, ", ")]" - new_status += "
    Time: [gameTimestamp("hh:mm")]" + if(!SSticker || SSticker?.current_state == GAME_STATE_STARTUP) + new_status += "
    STARTING" + else if(SSticker) + if(SSticker.current_state == GAME_STATE_PREGAME && SSticker.GetTimeLeft() > 0) + new_status += "
    Starting: [round((SSticker.GetTimeLeft())/10)]" + else if(SSticker.current_state == GAME_STATE_SETTING_UP) + new_status += "
    Starting: Now" + else if(SSticker.IsRoundInProgress()) + new_status += "
    Time: [time2text(((world.time - SSticker.round_start_time)/10), "hh:mm")]" + if(SSshuttle?.emergency && SSshuttle?.emergency?.mode != (SHUTTLE_IDLE || SHUTTLE_ENDGAME)) + new_status += " | Shuttle: [SSshuttle.emergency.getModeStr()] [SSshuttle.emergency.getTimerStr()]" + else if(SSticker.current_state == GAME_STATE_FINISHED) + new_status += "
    RESTARTING" if(SSmapping.config) new_status += "
    Map: [SSmapping.config.map_path == CUSTOM_MAP_PATH ? "Uncharted Territory" : SSmapping.config.map_name]" - var/alert_text = SSsecurity_level.get_current_level_as_text() - if(alert_text) - new_status += "
    Alert: [capitalize(alert_text)]" + if(SSmapping.next_map_config) + new_status += "[SSmapping.config ? " | " : "
    "]Next: [SSmapping.next_map_config.map_path == CUSTOM_MAP_PATH ? "Uncharted Territory" : SSmapping.next_map_config.map_name]" status = new_status */ @@ -469,14 +481,14 @@ GLOBAL_VAR(restart_counter) else CRASH("Unsupported platform: [system_type]") - var/init_result = LIBCALL(library, "init")("block") + var/init_result = call_ext(library, "init")("block") if (init_result != "0") CRASH("Error initializing byond-tracy: [init_result]") /world/proc/init_debugger() var/dll = GetConfig("env", "AUXTOOLS_DEBUG_DLL") if (dll) - LIBCALL(dll, "auxtools_init")() + call_ext(dll, "auxtools_init")() enable_debugging() /world/Profile(command, type, format) diff --git a/code/modules/NTNet/relays.dm b/code/modules/NTNet/relays.dm index abe777f276f420..a2db78a175b4da 100644 --- a/code/modules/NTNet/relays.dm +++ b/code/modules/NTNet/relays.dm @@ -1,9 +1,7 @@ -GLOBAL_LIST_EMPTY(ntnet_relays) - ///Checks whether NTNet is available by ensuring at least one relay exists and is operational. /proc/find_functional_ntnet_relay() // Check all relays. If we have at least one working relay, ntos is up. - for(var/obj/machinery/ntnet_relay/relays as anything in GLOB.ntnet_relays) + for(var/obj/machinery/ntnet_relay/relays as anything in SSmachines.get_machines_by_type(/obj/machinery/ntnet_relay)) if(!relays.is_operational) continue return TRUE @@ -33,6 +31,19 @@ GLOBAL_LIST_EMPTY(ntnet_relays) var/dos_capacity = 500 // Amount of DoS "packets" in buffer required to crash the relay var/dos_dissipate = 0.5 // Amount of DoS "packets" dissipated over time. +/obj/machinery/ntnet_relay/Initialize(mapload) + . = ..() + uid = gl_uid++ + var/list/current_machines = SSmachines.get_machines_by_type(/obj/machinery/ntnet_relay) + SSmodular_computers.add_log("New quantum relay activated. Current amount of linked relays: [current_machines.len]") + +/obj/machinery/ntnet_relay/Destroy() + . = ..() + var/list/machines_left = SSmachines.get_machines_by_type(/obj/machinery/ntnet_relay) + SSmodular_computers.add_log("Quantum relay connection severed. Current amount of linked relays: [machines_left.len]") + for(var/datum/computer_file/program/ntnet_dos/D in dos_sources) + D.target = null + D.error = "Connection to quantum relay severed" ///Proc called to change the value of the `relay_enabled` variable and append behavior related to its change. /obj/machinery/ntnet_relay/proc/set_relay_enabled(new_value) @@ -118,21 +129,3 @@ GLOBAL_LIST_EMPTY(ntnet_relays) SSmodular_computers.add_log("Quantum relay manually [relay_enabled ? "enabled" : "disabled"].") update_appearance() return TRUE - -/obj/machinery/ntnet_relay/Initialize(mapload) - uid = gl_uid++ - component_parts = list() - - GLOB.ntnet_relays += src - SSmodular_computers.add_log("New quantum relay activated. Current amount of linked relays: [GLOB.ntnet_relays.len]") - return ..() - -/obj/machinery/ntnet_relay/Destroy() - GLOB.ntnet_relays -= src - SSmodular_computers.add_log("Quantum relay connection severed. Current amount of linked relays: [GLOB.ntnet_relays.len]") - - for(var/datum/computer_file/program/ntnet_dos/D in dos_sources) - D.target = null - D.error = "Connection to quantum relay severed" - - return ..() diff --git a/code/modules/actionspeed/modifiers/drugs.dm b/code/modules/actionspeed/modifiers/drugs.dm index 8309f7fb30faeb..bf06ddf8112198 100644 --- a/code/modules/actionspeed/modifiers/drugs.dm +++ b/code/modules/actionspeed/modifiers/drugs.dm @@ -1,3 +1,2 @@ /datum/actionspeed_modifier/kronkaine multiplicative_slowdown = -0.5 - id = ACTIONSPEED_ID_STIMULANTS diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index fd3806c6a9ec05..73a2d9fa693b89 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -32,7 +32,7 @@ if(GLOB.admin_datums[ckey] || GLOB.deadmins[ckey]) admin = TRUE - /* SKYRAT EDIT REMOVAL START - We have the panic bunker on 24/7, this just makes our method unusable. + /* NOVA EDIT REMOVAL START - We have the panic bunker on 24/7, this just makes our method unusable. if(!real_bans_only && !admin && CONFIG_GET(flag/panic_bunker) && !CONFIG_GET(flag/panic_bunker_interview)) var/datum/db_query/query_client_in_db = SSdbcore.NewQuery( "SELECT 1 FROM [format_table_name("player")] WHERE ckey = :ckey", @@ -52,7 +52,7 @@ return list("reason"="panicbunker", "desc" = "Sorry but the server is currently not accepting connections from never before seen players") qdel(query_client_in_db) - */ // SKYRAT EDIT REMOVAL END + */ // NOVA EDIT REMOVAL END //Whitelist if(!real_bans_only && !C && CONFIG_GET(flag/usewhitelist)) @@ -107,17 +107,17 @@ addclientmessage(ckey,span_adminnotice("Admin [ckey] has been allowed to bypass a matching non-admin ban on [i["key"]] [i["ip"]]-[i["computerid"]].")) continue var/expires = "This is a permanent ban." - var/global_ban = "This is a global ban from all of our servers." //SKYRAT EDIT ADDITION - MULTISERVER + var/global_ban = "This is a global ban from all of our servers." //NOVA EDIT ADDITION - MULTISERVER if(i["expiration_time"]) expires = " The ban is for [DisplayTimeText(text2num(i["duration"]) MINUTES)] and expires on [i["expiration_time"]] (server time)." - if(!text2num(i["global_ban"])) //SKYRAT EDIT ADDITION - MULTISERVER - global_ban = "This is a single-server ban, and only applies to [i["server_name"]]." //SKYRAT EDIT ADDITION - MULTISERVER - var/desc = /* SKYRAT EDIT CHANGE - MULTISERVER */ {"You, or another user of this computer or connection ([i["key"]]) is banned from playing here. + if(!text2num(i["global_ban"])) //NOVA EDIT ADDITION - MULTISERVER + global_ban = "This is a single-server ban, and only applies to [i["server_name"]]." //NOVA EDIT ADDITION - MULTISERVER + var/desc = /* NOVA EDIT CHANGE - MULTISERVER */ {"You, or another user of this computer or connection ([i["key"]]) is banned from playing here. The ban reason is: [i["reason"]] This ban (BanID #[i["id"]]) was applied by [i["admin_key"]] on [i["bantime"]] during round ID [i["round_id"]]. [global_ban] [expires]"} - log_suspicious_login("Failed Login: [ckey] [computer_id] [address] - Banned (#[i["id"]]) [text2num(i["global_ban"]) ? "globally" : "locally"]") //SKYRAT EDIT CHANGE - MULTISERVER + log_suspicious_login("Failed Login: [ckey] [computer_id] [address] - Banned (#[i["id"]]) [text2num(i["global_ban"]) ? "globally" : "locally"]") //NOVA EDIT CHANGE - MULTISERVER return list("reason"="Banned","desc"="[desc]") if (admin) if (GLOB.directory[ckey]) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 2d2c692ed5fcad..99aa63325ad0e7 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -31,8 +31,7 @@ dat += "
    " if(SSticker.IsRoundInProgress()) dat += "(Game Mode Panel)
    " - if(istype(SSticker.mode, /datum/game_mode/dynamic)) - dat += "(Manage Dynamic Rulesets)
    " + dat += "(Manage Dynamic Rulesets)
    " dat += {"
    Create Object
    @@ -76,7 +75,7 @@ A.flags_1 |= ADMIN_SPAWNED_1 log_admin("[key_name(usr)] spawned [amount] x [chosen] at [AREACOORD(usr)]") - SSblackbox.record_feedback("tally", "admin_verb", 1, "Spawn Atom") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Spawn Atom") /datum/admins/proc/podspawn_atom(object as text) set category = "Debug" @@ -103,7 +102,7 @@ A.flags_1 |= ADMIN_SPAWNED_1 log_admin("[key_name(usr)] pod-spawned [chosen] at [AREACOORD(usr)]") - SSblackbox.record_feedback("tally", "admin_verb", 1, "Podspawn Atom") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Podspawn Atom") /datum/admins/proc/spawn_cargo(object as text) set category = "Debug" @@ -121,7 +120,7 @@ S.generate(get_turf(usr)) log_admin("[key_name(usr)] spawned cargo pack [chosen] at [AREACOORD(usr)]") - SSblackbox.record_feedback("tally", "admin_verb", 1, "Spawn Cargo") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Spawn Cargo") /datum/admins/proc/dynamic_mode_options(mob/user) var/dat = {" @@ -147,9 +146,6 @@ user << browse(dat, "window=dyn_mode_options;size=900x650") /datum/admins/proc/dynamic_ruleset_manager(mob/user) - if (SSticker.current_state > GAME_STATE_PREGAME && !istype(SSticker.mode, /datum/game_mode/dynamic)) - return // Not running dynamic - var/dat = "

    Dynamic Ruleset Management


    \ Change these options to forcibly enable or disable dynamic rulesets.
    \ Disabled rulesets will never run, even if they would otherwise be valid.
    \ @@ -172,11 +168,10 @@ user << browse(dat, "window=dyn_mode_options;size=900x650") return - var/datum/game_mode/dynamic/current_mode = SSticker.mode var/pop_count = length(GLOB.alive_player_list) - var/threat_level = current_mode.threat_level - dat += dynamic_ruleset_category_during_round_display("Latejoin", current_mode.latejoin_rules, pop_count, threat_level) - dat += dynamic_ruleset_category_during_round_display("Midround", current_mode.midround_rules, pop_count, threat_level) + var/threat_level = SSdynamic.threat_level + dat += dynamic_ruleset_category_during_round_display("Latejoin", SSdynamic.latejoin_rules, pop_count, threat_level) + dat += dynamic_ruleset_category_during_round_display("Midround", SSdynamic.midround_rules, pop_count, threat_level) user << browse(dat, "window=dyn_mode_options;size=900x650") /datum/admins/proc/dynamic_ruleset_category_pre_start_display(title, list/rules) @@ -304,7 +299,7 @@ message_admins(span_adminnotice("[key_name_admin(usr)] has put [frommob.key] in control of [tomob.name].")) log_admin("[key_name(usr)] stuffed [frommob.key] into [tomob.name].") - SSblackbox.record_feedback("tally", "admin_verb", 1, "Ghost Drag Control") + BLACKBOX_LOG_ADMIN_VERB("Ghost Drag Control") tomob.key = frommob.key tomob.client?.init_verbs() diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index baa8a2919748f3..c39464e3ef0aa3 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -13,9 +13,7 @@ GLOBAL_PROTECT(protected_ranks) /datum/admin_rank/New(init_name, init_rights, init_exclude_rights, init_edit_rights) if(IsAdminAdvancedProcCall()) - var/msg = " has tried to elevate permissions!" - message_admins("[key_name_admin(usr)][msg]") - log_admin("[key_name(usr)][msg]") + alert_to_permissions_elevation_attempt(usr) if (name == "NoRank") //only del if this is a true creation (and not just a New() proc call), other wise trialmins/coders could abuse this to deadmin other admins QDEL_IN(src, 0) CRASH("Admin proc call creation of admin datum") @@ -35,9 +33,7 @@ GLOBAL_PROTECT(protected_ranks) /datum/admin_rank/Destroy() if(IsAdminAdvancedProcCall()) - var/msg = " has tried to elevate permissions!" - message_admins("[key_name_admin(usr)][msg]") - log_admin("[key_name(usr)][msg]") + alert_to_permissions_elevation_attempt(usr) return QDEL_HINT_LETMELIVE . = ..() @@ -47,9 +43,7 @@ GLOBAL_PROTECT(protected_ranks) // Adds/removes rights to this admin_rank /datum/admin_rank/proc/process_keyword(group, group_count, datum/admin_rank/previous_rank) if(IsAdminAdvancedProcCall()) - var/msg = " has tried to elevate permissions!" - message_admins("[key_name_admin(usr)][msg]") - log_admin("[key_name(usr)][msg]") + alert_to_permissions_elevation_attempt(usr) return var/list/keywords = splittext(group, " ") var/flag = 0 diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 77830d0277c215..f35097e202a4b4 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -22,10 +22,10 @@ GLOBAL_PROTECT(admin_verbs_default) /client/proc/stop_sounds, /client/proc/tag_datum_mapview, - /client/proc/addbunkerbypass, /*SKYRAT EDIT ADDITION - PANICBUNKER*/ - /client/proc/cmd_loud_admin_say, /*admin-only chat except its annoying - SKYRAT EDIT ADDITION - ADMIN*/ - /client/proc/remove_liquid, /*SKYRAT EDIT ADDITION*/ - /client/proc/revokebunkerbypass, /*SKYRAT EDIT ADDITION - PANICBUNKER*/ + /client/proc/addbunkerbypass, /*NOVA EDIT ADDITION - PANICBUNKER*/ + /client/proc/cmd_loud_admin_say, /*admin-only chat except its annoying - NOVA EDIT ADDITION - ADMIN*/ + /client/proc/remove_liquid, /*NOVA EDIT ADDITION*/ + /client/proc/revokebunkerbypass, /*NOVA EDIT ADDITION - PANICBUNKER*/ ) GLOBAL_LIST_INIT(admin_verbs_admin, world.AVerbsAdmin()) GLOBAL_PROTECT(admin_verbs_admin) @@ -102,13 +102,13 @@ GLOBAL_PROTECT(admin_verbs_admin) /client/proc/cmd_admin_law_panel, /client/proc/log_viewer_new, /client/proc/player_ticket_history, - /datum/admins/proc/toggleaooc, /*Toggle Antag OOC - SKYRAT EDIT ADDITION*/ - /datum/admins/proc/toggledchat, /*SKYRAT EDIT ADDITION*/ - /datum/admins/proc/togglesooc, /*Toggle Security OOC - SKYRAT EDIT ADDITION*/ - /client/proc/admin_open_event_spawners_menu, /*EVENTS - SKYRAT EDIT ADDITION*/ - /client/proc/request_help, /*SKYRAT EDIT ADDITION*/ - /client/proc/view_opfors, /*OPFOR - SKYRAT EDIT ADDITION*/ - /client/proc/lorecaster_story_manager, /* SKYRAT EDIT ADDITION */ + /datum/admins/proc/toggleaooc, /*Toggle Antag OOC - NOVA EDIT ADDITION*/ + /datum/admins/proc/toggledchat, /*NOVA EDIT ADDITION*/ + /datum/admins/proc/togglesooc, /*Toggle Security OOC - NOVA EDIT ADDITION*/ + /client/proc/admin_open_event_spawners_menu, /*EVENTS - NOVA EDIT ADDITION*/ + /client/proc/request_help, /*NOVA EDIT ADDITION*/ + /client/proc/view_opfors, /*OPFOR - NOVA EDIT ADDITION*/ + /client/proc/lorecaster_story_manager, /* NOVA EDIT ADDITION */ ) 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) @@ -144,20 +144,19 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list( /client/proc/summon_ert, /client/proc/toggle_nuke, /client/proc/toggle_random_events, - /client/proc/admin_change_title_screen, /*SKYRAT EDIT ADDITION*/ - /client/proc/change_title_screen_html, /*SKYRAT EDIT ADDITION*/ - /client/proc/change_title_screen_notice, /*SKYRAT EDIT ADDITION*/ - /client/proc/fix_say, /*SKYRAT EDIT ADDITION*/ - /client/proc/one_click_antag, /*ONE CLICK ANTAG - SKYRAT EDIT ADDITION*/ - /client/proc/request_more_opfor, /*SKYRAT EDIT ADDITION*/ - /client/proc/spawn_liquid, /*SKYRAT EDIT ADDITION*/ - /client/proc/spawn_mob_spawner, /*SKYRAT EDIT ADDITION*/ - /client/proc/spawn_pollution, /*SKYRAT EDIT ADDITION*/ - /client/proc/spawn_sunbeam, /*SKYRAT EDIT ADDITION*/ - /client/proc/intensity_credits_panel, /*SKYRAT EDIT ADDITION*/ - /client/proc/toggle_bsa, /*SKYRAT EDIT ADDITION*/ - /client/proc/try_stop_delam, /*SKYRAT EDIT ADDITION*/ - /client/proc/toggle_delam_suppression, /*SKYRAT EDIT ADDITION*/ + /client/proc/admin_change_title_screen, /*NOVA EDIT ADDITION*/ + /client/proc/change_title_screen_html, /*NOVA EDIT ADDITION*/ + /client/proc/change_title_screen_notice, /*NOVA EDIT ADDITION*/ + /client/proc/fix_say, /*NOVA EDIT ADDITION*/ + /client/proc/one_click_antag, /*ONE CLICK ANTAG - NOVA EDIT ADDITION*/ + /client/proc/request_more_opfor, /*NOVA EDIT ADDITION*/ + /client/proc/spawn_liquid, /*NOVA EDIT ADDITION*/ + /client/proc/spawn_mob_spawner, /*NOVA EDIT ADDITION*/ + /client/proc/spawn_pollution, /*NOVA EDIT ADDITION*/ + /client/proc/intensity_credits_panel, /*NOVA EDIT ADDITION*/ + /client/proc/toggle_bsa, /*NOVA EDIT ADDITION*/ + /client/proc/try_stop_delam, /*NOVA EDIT ADDITION*/ + /client/proc/toggle_delam_suppression, /*NOVA EDIT ADDITION*/ )) GLOBAL_PROTECT(admin_verbs_fun) GLOBAL_LIST_INIT(admin_verbs_spawn, list(/datum/admins/proc/spawn_atom, /datum/admins/proc/podspawn_atom, /datum/admins/proc/spawn_cargo, /datum/admins/proc/spawn_objasmob, /client/proc/respawn_character, /datum/admins/proc/beaker_panel)) @@ -195,7 +194,6 @@ GLOBAL_PROTECT(admin_verbs_debug) return list( #ifdef TESTING /* Keep these at the top to not make the list look fugly */ /client/proc/check_missing_sprites, - /client/proc/run_dynamic_simulations, #endif /proc/machine_upgrade, /datum/admins/proc/create_or_modify_area, @@ -232,6 +230,7 @@ GLOBAL_PROTECT(admin_verbs_debug) /client/proc/get_dynex_range, /*debug verbs for dynex explosions.*/ /client/proc/jump_to_ruin, /client/proc/load_circuit, + /client/proc/map_export, /client/proc/map_template_load, /client/proc/map_template_upload, /client/proc/modify_goals, @@ -259,20 +258,20 @@ GLOBAL_PROTECT(admin_verbs_debug) /client/proc/validate_puzzgrids, /client/proc/GeneratePipeSpritesheet, /client/proc/view_runtimes, - - /client/proc/reload_interactions, /*SKYRAT EDIT ADDITION*/ - /client/proc/test_area_spawner, /*AUTOMAPPER - SKYRAT EDIT ADDITION*/ - /client/proc/toggle_liquid_debug, /*SKYRAT EDIT ADDITION*/ + /client/proc/stop_weather, + /client/proc/reload_interactions, /*NOVA EDIT ADDITION*/ + /client/proc/test_area_spawner, /*AUTOMAPPER - NOVA EDIT ADDITION*/ + /client/proc/toggle_liquid_debug, /*NOVA EDIT ADDITION*/ ) GLOBAL_LIST_INIT(admin_verbs_possess, list(/proc/possess, GLOBAL_PROC_REF(release))) GLOBAL_PROTECT(admin_verbs_possess) -/// SKYRAT EDIT BEGIN - Player Rank Manager - ORIGINAL: GLOBAL_LIST_INIT(admin_verbs_permissions, list(/client/proc/edit_admin_permissions)) +/// NOVA EDIT BEGIN - Player Rank Manager - ORIGINAL: GLOBAL_LIST_INIT(admin_verbs_permissions, list(/client/proc/edit_admin_permissions)) GLOBAL_LIST_INIT(admin_verbs_permissions, list( /client/proc/edit_admin_permissions, /client/proc/manage_player_ranks, /client/proc/migrate_player_ranks, )) -/// SKYRAT EDIT END +/// NOVA EDIT END GLOBAL_PROTECT(admin_verbs_permissions) GLOBAL_LIST_INIT(admin_verbs_poll, list(/client/proc/poll_panel)) GLOBAL_PROTECT(admin_verbs_poll) @@ -301,7 +300,7 @@ GLOBAL_PROTECT(admin_verbs_poll) add_verb(src, GLOB.admin_verbs_permissions) if(rights & R_STEALTH) add_verb(src, /client/proc/stealth) - if(rights & R_ADMIN) + if(rights & R_POLL) add_verb(src, GLOB.admin_verbs_poll) if(rights & R_SOUND) add_verb(src, GLOB.admin_verbs_sounds) @@ -340,7 +339,7 @@ GLOBAL_PROTECT(admin_verbs_poll) add_verb(src, /client/proc/show_verbs) to_chat(src, span_interface("Almost all of your adminverbs have been hidden."), confidential = TRUE) - SSblackbox.record_feedback("tally", "admin_verb", 1, "Hide All Adminverbs") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Hide All Adminverbs") return /client/proc/show_verbs() @@ -351,7 +350,7 @@ GLOBAL_PROTECT(admin_verbs_poll) add_admin_verbs() to_chat(src, span_interface("All of your adminverbs are now visible."), confidential = TRUE) - SSblackbox.record_feedback("tally", "admin_verb", 1, "Show Adminverbs") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Show Adminverbs") @@ -372,7 +371,7 @@ GLOBAL_PROTECT(admin_verbs_poll) message_admins("[key_name_admin(usr)] re-entered corpse") ghost.can_reenter_corpse = 1 //force re-entering even when otherwise not possible ghost.reenter_corpse() - SSblackbox.record_feedback("tally", "admin_verb", 1, "Admin Reenter") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Admin Reenter") else if(isnewplayer(mob)) to_chat(src, "Error: Aghost: Can't admin-ghost whilst in the lobby. Join or Observe first.", confidential = TRUE) return FALSE @@ -385,22 +384,27 @@ GLOBAL_PROTECT(admin_verbs_poll) init_verbs() if(body && !body.key) body.key = "@[key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus - SSblackbox.record_feedback("tally", "admin_verb", 1, "Admin Ghost") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Admin Ghost") /client/proc/invisimin() set name = "Invisimin" set category = "Admin.Game" set desc = "Toggles ghost-like invisibility (Don't abuse this)" + if(isnull(holder) || isnull(mob)) return - if(mob.invisimin) - mob.invisimin = FALSE + + if(HAS_TRAIT(mob, TRAIT_INVISIMIN)) + REMOVE_TRAIT(mob, TRAIT_INVISIMIN, ADMIN_TRAIT) + mob.add_to_all_human_data_huds() mob.RemoveInvisibility(INVISIBILITY_SOURCE_INVISIMIN) - to_chat(mob, span_boldannounce("Invisimin off. Invisibility reset."), confidential = TRUE) - else - mob.invisimin = TRUE - mob.SetInvisibility(INVISIBILITY_OBSERVER, INVISIBILITY_SOURCE_INVISIMIN, INVISIBILITY_PRIORITY_ADMIN) - to_chat(mob, span_adminnotice("Invisimin on. You are now as invisible as a ghost."), confidential = TRUE) + to_chat(mob, span_adminnotice(span_bold("Invisimin off. Invisibility reset.")), confidential = TRUE) + return + + ADD_TRAIT(mob, TRAIT_INVISIMIN, ADMIN_TRAIT) + mob.remove_from_all_data_huds() + mob.SetInvisibility(INVISIBILITY_OBSERVER, INVISIBILITY_SOURCE_INVISIMIN, INVISIBILITY_PRIORITY_ADMIN) + to_chat(mob, span_adminnotice(span_bold("Invisimin on. You are now as invisible as a ghost.")), confidential = TRUE) /client/proc/check_antagonists() set name = "Check Antagonists" @@ -410,7 +414,7 @@ GLOBAL_PROTECT(admin_verbs_poll) log_admin("[key_name(usr)] checked antagonists.") //for tsar~ if(!isobserver(usr) && SSticker.HasRoundStarted()) message_admins("[key_name_admin(usr)] checked antagonists.") - SSblackbox.record_feedback("tally", "admin_verb", 1, "Check Antagonists") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Check Antagonists") /client/proc/list_bombers() set name = "List Bombers" @@ -418,7 +422,7 @@ GLOBAL_PROTECT(admin_verbs_poll) if(!holder) return holder.list_bombers() - SSblackbox.record_feedback("tally", "admin_verb", 1, "List Bombers") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("List Bombers") /client/proc/list_signalers() set name = "List Signalers" @@ -426,7 +430,7 @@ GLOBAL_PROTECT(admin_verbs_poll) if(!holder) return holder.list_signalers() - SSblackbox.record_feedback("tally", "admin_verb", 1, "List Signalers") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("List Signalers") /client/proc/list_law_changes() set name = "List Law Changes" @@ -434,7 +438,7 @@ GLOBAL_PROTECT(admin_verbs_poll) if(!holder) return holder.list_law_changes() - SSblackbox.record_feedback("tally", "admin_verb", 1, "List Law Changes") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("List Law Changes") /client/proc/show_manifest() set name = "Show Manifest" @@ -442,7 +446,7 @@ GLOBAL_PROTECT(admin_verbs_poll) if(!holder) return holder.show_manifest() - SSblackbox.record_feedback("tally", "admin_verb", 1, "Show Manifest") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Show Manifest") /client/proc/list_dna() set name = "List DNA" @@ -450,7 +454,7 @@ GLOBAL_PROTECT(admin_verbs_poll) if(!holder) return holder.list_dna() - SSblackbox.record_feedback("tally", "admin_verb", 1, "List DNA") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("List DNA") /client/proc/list_fingerprints() set name = "List Fingerprints" @@ -458,7 +462,7 @@ GLOBAL_PROTECT(admin_verbs_poll) if(!holder) return holder.list_fingerprints() - SSblackbox.record_feedback("tally", "admin_verb", 1, "List Fingerprints") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("List Fingerprints") /client/proc/ban_panel() set name = "Banning Panel" @@ -466,7 +470,7 @@ GLOBAL_PROTECT(admin_verbs_poll) if(!check_rights(R_BAN)) return holder.ban_panel() - SSblackbox.record_feedback("tally", "admin_verb", 1, "Banning Panel") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Banning Panel") /client/proc/unban_panel() set name = "Unbanning Panel" @@ -474,14 +478,14 @@ GLOBAL_PROTECT(admin_verbs_poll) if(!check_rights(R_BAN)) return holder.unban_panel() - SSblackbox.record_feedback("tally", "admin_verb", 1, "Unbanning Panel") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Unbanning Panel") /client/proc/game_panel() set name = "Game Panel" set category = "Admin.Game" if(holder) holder.Game() - SSblackbox.record_feedback("tally", "admin_verb", 1, "Game Panel") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Game Panel") /client/proc/poll_panel() set name = "Server Poll Management" @@ -489,7 +493,7 @@ GLOBAL_PROTECT(admin_verbs_poll) if(!check_rights(R_POLL)) return holder.poll_list_panel() - SSblackbox.record_feedback("tally", "admin_verb", 1, "Server Poll Management") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Server Poll Management") /// Returns this client's stealthed ckey /client/proc/getStealthKey() @@ -535,7 +539,7 @@ GLOBAL_PROTECT(admin_verbs_poll) else enable_stealth_mode() - SSblackbox.record_feedback("tally", "admin_verb", 1, "Stealth Mode") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Stealth Mode") #define STEALTH_MODE_TRAIT "stealth_mode" @@ -618,7 +622,7 @@ GLOBAL_PROTECT(admin_verbs_poll) explosion(epicenter, devastation_range = range_devastation, heavy_impact_range = range_heavy, light_impact_range = range_light, flash_range = range_flash, adminlog = TRUE, ignorecap = TRUE, explosion_cause = mob) message_admins("[ADMIN_LOOKUPFLW(usr)] creating an admin explosion at [epicenter.loc].") log_admin("[key_name(usr)] created an admin explosion at [epicenter.loc].") - SSblackbox.record_feedback("tally", "admin_verb", 1, "Drop Bomb") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Drop Bomb") /client/proc/drop_dynex_bomb() set category = "Admin.Fun" @@ -631,7 +635,7 @@ GLOBAL_PROTECT(admin_verbs_poll) dyn_explosion(epicenter, ex_power) message_admins("[ADMIN_LOOKUPFLW(usr)] creating an admin explosion at [epicenter.loc].") log_admin("[key_name(usr)] created an admin explosion at [epicenter.loc].") - SSblackbox.record_feedback("tally", "admin_verb", 1, "Drop Dynamic Bomb") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Drop Dynamic Bomb") /client/proc/get_dynex_range() set category = "Debug" @@ -769,7 +773,7 @@ GLOBAL_PROTECT(admin_verbs_poll) message_admins("[key_name_admin(usr)] added mob ability [ability_type] to mob [ability_recipient].") log_admin("[key_name(usr)] added mob ability [ability_type] to mob [ability_recipient].") - SSblackbox.record_feedback("tally", "admin_verb", 1, "Add Mob Ability") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Add Mob Ability") /client/proc/remove_mob_action(mob/removal_target in GLOB.mob_list) set category = "Admin.Fun" @@ -793,7 +797,7 @@ GLOBAL_PROTECT(admin_verbs_poll) qdel(to_remove) log_admin("[key_name(usr)] removed the ability [chosen_ability] from [key_name(removal_target)].") message_admins("[key_name_admin(usr)] removed the ability [chosen_ability] from [key_name_admin(removal_target)].") - SSblackbox.record_feedback("tally", "admin_verb", 1, "Remove Mob Ability") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Remove Mob Ability") /client/proc/give_spell(mob/spell_recipient in GLOB.mob_list) set category = "Admin.Fun" @@ -831,7 +835,7 @@ GLOBAL_PROTECT(admin_verbs_poll) to_chat(usr, span_warning("The intended spell recipient no longer exists.")) return - SSblackbox.record_feedback("tally", "admin_verb", 1, "Give Spell") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Give Spell") log_admin("[key_name(usr)] gave [key_name(spell_recipient)] the spell [chosen_spell][robeless ? " (Forced robeless)" : ""].") message_admins("[key_name_admin(usr)] gave [key_name_admin(spell_recipient)] the spell [chosen_spell][robeless ? " (Forced robeless)" : ""].") @@ -868,7 +872,7 @@ GLOBAL_PROTECT(admin_verbs_poll) qdel(to_remove) log_admin("[key_name(usr)] removed the spell [chosen_spell] from [key_name(removal_target)].") message_admins("[key_name_admin(usr)] removed the spell [chosen_spell] from [key_name_admin(removal_target)].") - SSblackbox.record_feedback("tally", "admin_verb", 1, "Remove Spell") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Remove Spell") /client/proc/give_disease(mob/living/T in GLOB.mob_living_list) set category = "Admin.Fun" @@ -881,7 +885,7 @@ GLOBAL_PROTECT(admin_verbs_poll) if(!D) return T.ForceContractDisease(new D, FALSE, TRUE) - SSblackbox.record_feedback("tally", "admin_verb", 1, "Give Disease") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Give Disease") log_admin("[key_name(usr)] gave [key_name(T)] the disease [D].") message_admins(span_adminnotice("[key_name_admin(usr)] gave [key_name_admin(T)] the disease [D].")) @@ -895,7 +899,7 @@ GLOBAL_PROTECT(admin_verbs_poll) O.say(message, sanitize = FALSE) log_admin("[key_name(usr)] made [O] at [AREACOORD(O)] say \"[message]\"") message_admins(span_adminnotice("[key_name_admin(usr)] made [O] at [AREACOORD(O)]. say \"[message]\"")) - SSblackbox.record_feedback("tally", "admin_verb", 1, "Object Say") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Object Say") /client/proc/togglebuildmodeself() set name = "Toggle Build Mode Self" set category = "Admin.Events" @@ -903,7 +907,7 @@ GLOBAL_PROTECT(admin_verbs_poll) return if(src.mob) togglebuildmode(src.mob) - SSblackbox.record_feedback("tally", "admin_verb", 1, "Toggle Build Mode") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Toggle Build Mode") /client/proc/check_ai_laws() set name = "Check AI Laws" @@ -951,7 +955,7 @@ GLOBAL_PROTECT(admin_verbs_poll) to_chat(src, span_interface("You are now a normal player.")) log_admin("[src] deadminned themselves.") message_admins("[src] deadminned themselves.") - SSblackbox.record_feedback("tally", "admin_verb", 1, "Deadmin") + BLACKBOX_LOG_ADMIN_VERB("Deadmin") /client/proc/readmin() set name = "Readmin" @@ -976,7 +980,7 @@ GLOBAL_PROTECT(admin_verbs_poll) to_chat(src, span_interface("You are now an admin."), confidential = TRUE) message_admins("[src] re-adminned themselves.") log_admin("[src] re-adminned themselves.") - SSblackbox.record_feedback("tally", "admin_verb", 1, "Readmin") + BLACKBOX_LOG_ADMIN_VERB("Readmin") /client/proc/populate_world(amount = 50) set name = "Populate World" @@ -1176,7 +1180,7 @@ GLOBAL_PROTECT(admin_verbs_poll) 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! + BLACKBOX_LOG_ADMIN_VERB("Library Management") /client/proc/create_mob_worm() set category = "Admin.Fun" @@ -1222,3 +1226,4 @@ GLOBAL_PROTECT(admin_verbs_poll) QDEL_NULL(segment.ai_controller) segment.AddComponent(/datum/component/mob_chain, front = previous) previous = segment + diff --git a/code/modules/admin/adminmenu.dm b/code/modules/admin/adminmenu.dm index 67b8bfbb14c702..9a93856aa4e2d1 100644 --- a/code/modules/admin/adminmenu.dm +++ b/code/modules/admin/adminmenu.dm @@ -8,4 +8,4 @@ set category = "Admin.Game" if(usr.client.holder) usr.client.holder.player_panel_new() - SSblackbox.record_feedback("tally", "admin_verb", 1, "Player Panel New") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Player Panel New") diff --git a/code/modules/admin/antag_panel.dm b/code/modules/admin/antag_panel.dm index b8f6737b1552e5..78601deeb02d21 100644 --- a/code/modules/admin/antag_panel.dm +++ b/code/modules/admin/antag_panel.dm @@ -72,7 +72,7 @@ GLOBAL_VAR(antag_prototypes) if (R.emagged) common_commands += "Unemag slaved cyborgs" break - common_commands += "Toggle exploitables override" //SKYRAT EDIT ADDITION -- EXPLOITABLES + common_commands += "Toggle exploitables override" //NOVA EDIT ADDITION -- EXPLOITABLES return common_commands /datum/mind/proc/get_special_statuses() diff --git a/code/modules/admin/callproc/callproc.dm b/code/modules/admin/callproc/callproc.dm index 22a6b43b17ade5..1680304679edf2 100644 --- a/code/modules/admin/callproc/callproc.dm +++ b/code/modules/admin/callproc/callproc.dm @@ -160,7 +160,7 @@ GLOBAL_PROTECT(AdminProcCallHandler) log_admin("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].") message_admins("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].") //Proccall announce removed. returnval = WrapAdminProcCall(GLOBAL_PROC, procname, lst) // Pass the lst as an argument list to the proc - SSblackbox.record_feedback("tally", "admin_verb", 1, "Advanced ProcCall") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Advanced ProcCall") if(get_retval) get_retval += returnval . = get_callproc_returnval(returnval, procname) @@ -255,7 +255,7 @@ GLOBAL_PROTECT(LastAdminCalledProc) var/msg = "[key_name(src)] called [A]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"]." message_admins(msg) admin_ticket_log(A, msg) - SSblackbox.record_feedback("tally", "admin_verb", 1, "Atom ProcCall") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Atom ProcCall") var/returnval = WrapAdminProcCall(A, procname, lst) // Pass the lst as an argument list to the proc . = get_callproc_returnval(returnval,procname) diff --git a/code/modules/admin/check_antagonists.dm b/code/modules/admin/check_antagonists.dm index 770d1b9c6377a7..0069ce27cedfcf 100644 --- a/code/modules/admin/check_antagonists.dm +++ b/code/modules/admin/check_antagonists.dm @@ -95,8 +95,7 @@ tgui_alert(usr, "The game hasn't started yet!") return var/list/dat = list("Round Status

    Round Status

    ") - if(istype(SSticker.mode, /datum/game_mode/dynamic)) // Currently only used by dynamic. If more start using this, find a better way. - dat += "Game Mode Panel
    " + dat += "Game Mode Panel
    " dat += "Round Duration: [DisplayTimeText(world.time - SSticker.round_start_time)]
    " dat += "Emergency shuttle
    " if(EMERGENCY_IDLE_OR_RECALLED) @@ -181,7 +180,7 @@ dat += build_antag_listing() - dat += SSopposing_force.get_check_antag_listing() //SKYRAT EDIT ADDITION + dat += SSopposing_force.get_check_antag_listing() //NOVA EDIT ADDITION dat += "" usr << browse(dat.Join(), "window=roundstatus;size=500x500") diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index 36dd0416bde4d8..6eef8e8f7d1a8d 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -10,36 +10,28 @@ user << browse(create_panel_helper(create_mob_html), "window=create_mob;size=425x475") -/proc/randomize_human(mob/living/carbon/human/human) - if(human.dna.species.sexes) - human.gender = pick(MALE, FEMALE, PLURAL, NEUTER) - else - human.gender = PLURAL +/** + * Randomizes everything about a human, including DNA and name + */ +/proc/randomize_human(mob/living/carbon/human/human, randomize_mutations = FALSE) + human.gender = human.dna.species.sexes ? pick(MALE, FEMALE, PLURAL, NEUTER) : PLURAL human.physique = human.gender human.real_name = human.dna?.species.random_name(human.gender) || random_unique_name(human.gender) - human.name = human.real_name - human.hairstyle = random_hairstyle(human.gender) - human.facial_hairstyle = random_facial_hairstyle(human.gender) - human.hair_color = "#[random_color()]" - human.facial_hair_color = human.hair_color - var/random_eye_color = random_eye_color() - human.eye_color_left = random_eye_color - human.eye_color_right = random_eye_color - human.dna.blood_type = random_blood_type() - human.dna.features["mcolor"] = "#[random_color()]" + human.name = human.get_visible_name() + human.set_hairstyle(random_hairstyle(human.gender), update = FALSE) + human.set_facial_hairstyle(random_facial_hairstyle(human.gender), update = FALSE) + human.set_haircolor("#[random_color()]", update = FALSE) + human.set_facial_haircolor(human.hair_color, update = FALSE) + human.eye_color_left = random_eye_color() + human.eye_color_right = human.eye_color_left + human.skin_tone = random_skin_tone() human.dna.species.randomize_active_underwear_only(human) - /*SKYRAT EDIT OLD - for(var/datum/species/species_path as anything in subtypesof(/datum/species)) - var/datum/species/new_species = new species_path - new_species.randomize_features(human) - SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION*/ - human.dna.species.randomize_features(human) - human.dna.mutant_bodyparts = human.dna.species.get_random_mutant_bodyparts(human.dna.features) - human.dna.body_markings = human.dna.species.get_random_body_markings(human.dna.features) + // Needs to be called towards the end to update all the UIs just set above + human.dna.initialize_dna(newblood_type = random_blood_type(), create_mutation_blocks = randomize_mutations, randomize_features = TRUE) + // NOVA EDIT ADDITION BEGIN - CUSTOMIZATION human.dna.species.mutant_bodyparts = human.dna.mutant_bodyparts.Copy() human.dna.species.body_markings = human.dna.body_markings.Copy() - //SKYRAT EDIT ADDITION END - human.dna.species.spec_updatehealth(human) - human.dna.update_dna_identity() - human.updateappearance() - human.update_body(is_creating = TRUE) + // NOVA EDIT ADDITION END + // Snowflake for Ethereals + human.updatehealth() + human.updateappearance(mutcolor_update = TRUE) diff --git a/code/modules/admin/force_event.dm b/code/modules/admin/force_event.dm index 4affec2f0c2f73..20066547de9c6f 100644 --- a/code/modules/admin/force_event.dm +++ b/code/modules/admin/force_event.dm @@ -90,7 +90,7 @@ if(!event) return if(length(event.admin_setup)) - for(var/datum/event_admin_setup/admin_setup_datum in event.admin_setup) + for(var/datum/event_admin_setup/admin_setup_datum as anything in event.admin_setup) if(admin_setup_datum.prompt_admins() == ADMIN_CANCEL_EVENT) return var/always_announce_chance = 100 diff --git a/code/modules/admin/fun_balloon.dm b/code/modules/admin/fun_balloon.dm index 979e51bd5a14d5..873090118ab686 100644 --- a/code/modules/admin/fun_balloon.dm +++ b/code/modules/admin/fun_balloon.dm @@ -87,8 +87,17 @@ if (!possessable.ckey && possessable.stat == CONSCIOUS) // Only assign ghosts to living, non-occupied mobs! 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 = "Would you like to be [group_name]?", + role = ROLE_SENTIENCE, + check_jobban = ROLE_SENTIENCE, + poll_time = 10 SECONDS, + mobs = bodies, + ignore_category = POLL_IGNORE_SHUTTLE_DENIZENS, + pic_source = src, + role_name_text = "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 fd2db6d1ed3804..084c5e0272c8e7 100644 --- a/code/modules/admin/greyscale_modify_menu.dm +++ b/code/modules/admin/greyscale_modify_menu.dm @@ -305,7 +305,7 @@ This is highly likely to cause massive amounts of lag as every object in the gam CHECK_TICK var/image/layer = image(step["step"]) var/image/result = image(step["result"]) - // SKYRAT EDIT BEGIN - Bringing back the GAGS coloring menu + // NOVA EDIT BEGIN - Bringing back the GAGS coloring menu steps += list( list( "layer"=icon2html(layer, user, dir=sprite_dir, sourceonly=TRUE), @@ -313,7 +313,7 @@ This is highly likely to cause massive amounts of lag as every object in the gam "config_name"=step["config_name"] ) ) - // SKYRAT EDIT END + // NOVA EDIT END sprite_data["time_spent"] = TICK_DELTA_TO_MS(time_spent) sprite_data["finished"] = icon2html(finished, user, dir=sprite_dir, sourceonly=TRUE) diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index 8cb57ff8f83b37..118651699d2799 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -50,9 +50,7 @@ GLOBAL_PROTECT(href_token) /datum/admins/New(list/datum/admin_rank/ranks, ckey, force_active = FALSE, protected) if(IsAdminAdvancedProcCall()) - var/msg = " has tried to elevate permissions!" - message_admins("[key_name_admin(usr)][msg]") - log_admin("[key_name(usr)][msg]") + alert_to_permissions_elevation_attempt(usr) if (!target) //only del if this is a true creation (and not just a New() proc call), other wise trialmins/coders could abuse this to deadmin other admins QDEL_IN(src, 0) CRASH("Admin proc call creation of admin datum") @@ -66,7 +64,7 @@ GLOBAL_PROTECT(href_token) target = ckey name = "[ckey]'s admin datum ([join_admin_ranks(ranks)])" src.ranks = ranks - admin_signature = "Nanotrasen Officer #[rand(0,9)][rand(0,9)][rand(0,9)]" + admin_signature = "Symphionia Officer #[rand(0,9)][rand(0,9)][rand(0,9)]" href_token = GenerateToken() //only admins with +ADMIN start admined if(protected) @@ -75,38 +73,32 @@ GLOBAL_PROTECT(href_token) activate() else deactivate() - plane_debug = new(src) /datum/admins/Destroy() if(IsAdminAdvancedProcCall()) - var/msg = " has tried to elevate permissions!" - message_admins("[key_name_admin(usr)][msg]") - log_admin("[key_name(usr)][msg]") + alert_to_permissions_elevation_attempt(usr) return QDEL_HINT_LETMELIVE . = ..() /datum/admins/proc/activate() if(IsAdminAdvancedProcCall()) - var/msg = " has tried to elevate permissions!" - message_admins("[key_name_admin(usr)][msg]") - log_admin("[key_name(usr)][msg]") + alert_to_permissions_elevation_attempt(usr) return GLOB.deadmins -= target GLOB.admin_datums[target] = src deadmined = FALSE - QDEL_NULL(plane_debug) + plane_debug = new(src) if (GLOB.directory[target]) associate(GLOB.directory[target]) //find the client for a ckey if they are connected and associate them with us /datum/admins/proc/deactivate() if(IsAdminAdvancedProcCall()) - var/msg = " has tried to elevate permissions!" - message_admins("[key_name_admin(usr)][msg]") - log_admin("[key_name(usr)][msg]") + alert_to_permissions_elevation_attempt(usr) return GLOB.deadmins[target] = src GLOB.admin_datums -= target + QDEL_NULL(plane_debug) deadmined = TRUE var/client/client = owner || GLOB.directory[target] @@ -119,9 +111,7 @@ GLOBAL_PROTECT(href_token) /datum/admins/proc/associate(client/client) if(IsAdminAdvancedProcCall()) - var/msg = " has tried to elevate permissions!" - message_admins("[key_name_admin(usr)][msg]") - log_admin("[key_name(usr)][msg]") + alert_to_permissions_elevation_attempt(usr) return if(!istype(client)) @@ -163,9 +153,7 @@ GLOBAL_PROTECT(href_token) /datum/admins/proc/disassociate() if(IsAdminAdvancedProcCall()) - var/msg = " has tried to elevate permissions!" - message_admins("[key_name_admin(usr)][msg]") - log_admin("[key_name(usr)][msg]") + alert_to_permissions_elevation_attempt(usr) return if(owner) GLOB.admins -= owner diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index f412f9d5a72364..c8c3b660920ea5 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -76,7 +76,7 @@ body += "
" disk_report += "
"; - body += ""+job+" "+name+"
Real name "+real_name+"
Played by "+key+" ("+ip+")
Old names :"+old_names+"
"; + body += ""+job+" "+name+"
Real name "+real_name+"
Played by "+key+" ("+ip+")
Old names: "+old_names+"
"; body += "
"; @@ -274,18 +274,18 @@ else M_job = "Ghost" + var/M_key = html_encode(M.key) + var/M_ip_address = isnull(M.lastKnownIP) ? "+localhost+" : M.lastKnownIP var/M_name = html_encode(M.name) var/M_rname = html_encode(M.real_name) var/M_rname_as_key = html_encode(ckey(M.real_name)) // so you can ignore punctuation if(M_rname == M_rname_as_key) M_rname_as_key = null - var/M_key = html_encode(M.key) - var/previous_names = "" - if(M_key) - var/datum/player_details/P = GLOB.player_details[ckey(M_key)] - if(P) - previous_names = P.played_names.Join(",") - previous_names = html_encode(previous_names) + + var/previous_names_string = "" + var/datum/player_details/readable = GLOB.player_details[M.ckey] + if(readable) + previous_names_string = readable.get_played_names() //output for each mob dat += {" @@ -297,14 +297,14 @@ onmouseover='expand("data[i]","item[i]")' > [M_name] - [M_rname] - [M_key] ([M_job]) - + - + - + diff --git a/code/modules/admin/smites/imaginary_friend_special.dm b/code/modules/admin/smites/imaginary_friend_special.dm index e95f8c52cb1718..5b2bc6ba805470 100644 --- a/code/modules/admin/smites/imaginary_friend_special.dm +++ b/code/modules/admin/smites/imaginary_friend_special.dm @@ -57,11 +57,12 @@ if (isnull(how_many) || how_many < 1) return FALSE - var/list/volunteers = poll_ghost_candidates( + var/list/volunteers = SSpolling.poll_ghost_candidates( question = "Do you want to play as an imaginary friend?", - jobban_type = ROLE_PAI, + check_jobban = ROLE_PAI, poll_time = 10 SECONDS, ignore_category = POLL_IGNORE_IMAGINARYFRIEND, + role_name_text = "imaginary friend", ) var/volunteer_count = length(volunteers) if (volunteer_count == 0) diff --git a/code/modules/admin/sql_ban_system.dm b/code/modules/admin/sql_ban_system.dm index 163ae8381498c2..e6e4c95d376f0a 100644 --- a/code/modules/admin/sql_ban_system.dm +++ b/code/modules/admin/sql_ban_system.dm @@ -49,14 +49,14 @@ "player_ckey" = player_ckey, "must_apply_to_admins" = !!(GLOB.admin_datums[player_ckey] || GLOB.deadmins[player_ckey]), ) - // SKYRAT EDIT ADDITION BEGIN - MULTISERVER + // NOVA EDIT ADDITION BEGIN - MULTISERVER var/ssqlname = CONFIG_GET(string/serversqlname) var/server_check if(CONFIG_GET(flag/respect_global_bans)) server_check = "(server_name = '[ssqlname]' OR global_ban = '1')" else server_check = "server_name = '[ssqlname]'" - // SKYRAT EDIT ADDITION END - MULTISERVER + // NOVA EDIT ADDITION END - MULTISERVER var/sql_roles if(islist(roles)) var/list/sql_roles_list = list() @@ -68,7 +68,7 @@ values["role"] = roles sql_roles = ":role" - var/datum/db_query/query_check_ban = SSdbcore.NewQuery(/* SKYRAT EDIT CHANGE - MULTISERVER */{" + var/datum/db_query/query_check_ban = SSdbcore.NewQuery(/* NOVA EDIT CHANGE - MULTISERVER */{" SELECT 1 FROM [format_table_name("ban")] WHERE @@ -99,13 +99,13 @@ /proc/is_banned_from_with_details(player_ckey, player_ip, player_cid, role) if(!player_ckey && !player_ip && !player_cid) return - var/ssqlname = CONFIG_GET(string/serversqlname) // SKYRAT EDIT ADDITION BEGIN - MULTISERVER + var/ssqlname = CONFIG_GET(string/serversqlname) // NOVA EDIT ADDITION BEGIN - MULTISERVER var/server_check if(CONFIG_GET(flag/respect_global_bans)) server_check = "(server_name = '[ssqlname]' OR global_ban = '1')" else - server_check = "server_name = '[ssqlname]'" // SKYRAT EDIT ADDITION END - MULTISERVER - var/datum/db_query/query_check_ban = SSdbcore.NewQuery(/* SKYRAT EDIT CHANGE - MULTISERVER */{" + server_check = "server_name = '[ssqlname]'" // NOVA EDIT ADDITION END - MULTISERVER + var/datum/db_query/query_check_ban = SSdbcore.NewQuery(/* NOVA EDIT CHANGE - MULTISERVER */{" SELECT id, bantime, @@ -136,7 +136,7 @@ /// Gets the ban cache of the passed in client /// If the cache has not been generated, we start off a query -/// If we still have a query going for this request, we just sleep until it's recieved back +/// If we still have a query going for this request, we just sleep until it's received back /proc/retrieve_ban_cache(client/player_client) if(QDELETED(player_client)) return @@ -176,16 +176,16 @@ var/is_admin = FALSE if(GLOB.admin_datums[ckey] || GLOB.deadmins[ckey]) is_admin = TRUE - // SKYRAT EDIT ADDITION BEGIN - MULTISERVER + // NOVA EDIT ADDITION BEGIN - MULTISERVER var/ssqlname = CONFIG_GET(string/serversqlname) var/server_check if(CONFIG_GET(flag/respect_global_bans)) server_check = "(server_name = '[ssqlname]' OR global_ban = '1')" else server_check = "server_name = '[ssqlname]'" - // SKYRAT EDIT ADDITION END - MULTISERVER + // NOVA EDIT ADDITION END - MULTISERVER var/datum/db_query/query_build_ban_cache = SSdbcore.NewQuery( - "SELECT role, applies_to_admins FROM [format_table_name("ban")] WHERE ckey = :ckey AND unbanned_datetime IS NULL AND (expiration_time IS NULL OR expiration_time > NOW()) AND [server_check]", //skyrat edit + "SELECT role, applies_to_admins FROM [format_table_name("ban")] WHERE ckey = :ckey AND unbanned_datetime IS NULL AND (expiration_time IS NULL OR expiration_time > NOW()) AND [server_check]", //NOVA EDIT list("ckey" = ckey) ) var/query_successful = query_build_ban_cache.warn_execute() @@ -207,7 +207,7 @@ return ban_cache -/datum/admins/proc/ban_panel(player_key, player_ip, player_cid, role, duration = 1440, applies_to_admins, reason, edit_id, page, admin_key, global_ban = TRUE) // SKYRAT EDIT CHANGE - MULTISERVER +/datum/admins/proc/ban_panel(player_key, player_ip, player_cid, role, duration = 1440, applies_to_admins, reason, edit_id, page, admin_key, global_ban = TRUE) // NOVA EDIT CHANGE - MULTISERVER if (duration == BAN_PANEL_PERMANENT) duration = null @@ -316,7 +316,7 @@ "} if(edit_id) - output += /* SKYRAT EDIT CHANGE - MULTISERVER */{"FLW
" - var/common_part = ..() - var/challenge_report - var/obj/item/nuclear_challenge/war_button = war_button_ref?.resolve() - if(war_button) - challenge_report += "War not declared. \[Force war\]" - return common_part + disk_report + challenge_report + + var/post_report + + var/war_declared = FALSE + for(var/obj/item/circuitboard/computer/syndicate_shuttle/board as anything in GLOB.syndicate_shuttle_boards) + if(board.challenge) + war_declared = TRUE + + var/force_war_button = "" + + if(war_declared) + post_report += "War declared." + force_war_button = "\[Force war\]" + else + post_report += "War not declared." + var/obj/item/nuclear_challenge/war_button = war_button_ref?.resolve() + if(war_button) + force_war_button = "\[Force war\]" + else + force_war_button = "\[Cannot declare war, challenge button missing!\]" + + post_report += "\n[force_war_button]" + post_report += "\n\[Send Reinforcement\]" + + var/final_report = ..() + final_report += disk_report + final_report += post_report + return final_report + +#define SPAWN_AT_BASE "Nuke base" +#define SPAWN_AT_INFILTRATOR "Infiltrator" + +/datum/team/nuclear/proc/admin_spawn_reinforcement(mob/admin) + if(!check_rights_for(admin.client, R_ADMIN)) + return + + var/infil_or_nukebase = tgui_alert( + admin, + "Spawn them at the nuke base, or in the Infiltrator?", + "Where to reinforce?", + list(SPAWN_AT_BASE, SPAWN_AT_INFILTRATOR, "Cancel"), + ) + + if(!infil_or_nukebase || infil_or_nukebase == "Cancel") + return + + var/tc_to_spawn = tgui_input_number(admin, "How much TC to spawn with?", "TC", 0, 100) + + var/list/nuke_candidates = SSpolling.poll_ghost_candidates( + "Do you want to play as an emergency syndicate reinforcement?", + check_jobban = ROLE_OPERATIVE, + role = ROLE_OPERATIVE, + poll_time = 30 SECONDS, + ignore_category = POLL_IGNORE_SYNDICATE, + pic_source = /obj/structure/sign/poster/contraband/gorlex_recruitment, + role_name_text = "syndicate reinforcement", + ) + + nuke_candidates -= admin // may be easy to fat-finger say yes. so just don't + + if(!length(nuke_candidates)) + tgui_alert(admin, "No candidates found.", "Recruitment Shortage", list("OK")) + return + + + var/turf/spawn_loc + if(infil_or_nukebase == SPAWN_AT_INFILTRATOR) + var/area/spawn_in + // Prioritize EVA then hallway, if neither can be found default to the first area we can find + for(var/area_type in list(/area/shuttle/syndicate/eva, /area/shuttle/syndicate/hallway, /area/shuttle/syndicate)) + spawn_in = locate(area_type) in GLOB.areas // I'd love to use areas_by_type but the Infiltrator is a unique area + if(spawn_in) + break + + var/list/turf/options = list() + for(var/turf/open/open_turf in spawn_in?.get_contained_turfs()) + if(open_turf.is_blocked_turf()) + continue + options += open_turf + + if(length(options)) + spawn_loc = pick(options) + else + infil_or_nukebase = SPAWN_AT_BASE + + if(infil_or_nukebase == SPAWN_AT_BASE) + spawn_loc = pick(GLOB.nukeop_start) + + var/mob/dead/observer/picked = pick(nuke_candidates) + var/mob/living/carbon/human/nukie = new(spawn_loc) + picked.client.prefs.safe_transfer_prefs_to(nukie, is_antag = TRUE) + nukie.key = picked.key + + var/datum/antagonist/nukeop/antag_datum = new() + antag_datum.send_to_spawnpoint = FALSE + antag_datum.nukeop_outfit = /datum/outfit/syndicate/reinforcement + + nukie.mind.add_antag_datum(antag_datum, src) + + var/datum/component/uplink/uplink = nukie.mind.find_syndicate_uplink() + uplink?.set_telecrystals(tc_to_spawn) + + // add some pizzazz + do_sparks(4, FALSE, spawn_loc) + new /obj/effect/temp_visual/teleport_abductor/syndi_teleporter(spawn_loc) + playsound(spawn_loc, SFX_SPARKS, 50, TRUE) + playsound(spawn_loc, 'sound/effects/phasein.ogg', 50, TRUE) + + tgui_alert(admin, "Reinforcement spawned at [infil_or_nukebase] with [tc_to_spawn].", "Reinforcements have arrived", list("God speed")) + +#undef SPAWN_AT_BASE +#undef SPAWN_AT_INFILTRATOR /// Returns whether or not syndicate operatives escaped. /proc/is_infiltrator_docked_at_syndiebase() diff --git a/code/modules/antagonists/nukeop/outfits.dm b/code/modules/antagonists/nukeop/outfits.dm index a3c97a764688bc..8347fc93def8fe 100644 --- a/code/modules/antagonists/nukeop/outfits.dm +++ b/code/modules/antagonists/nukeop/outfits.dm @@ -1,5 +1,5 @@ /datum/outfit/syndicate - name = "Syndicate Operative - Basic" + name = "Symphionia Operative - Basic" uniform = /obj/item/clothing/under/syndicate shoes = /obj/item/clothing/shoes/combat @@ -23,19 +23,19 @@ id_trim = /datum/id_trim/chameleon/operative /datum/outfit/syndicate/plasmaman - name = "Syndicate Operative - Basic (Plasmaman)" + name = "Symphionia Operative - Basic (Plasmaman)" head = /obj/item/clothing/head/helmet/space/plasmaman/syndie uniform = /obj/item/clothing/under/plasmaman/syndicate r_hand = /obj/item/tank/internals/plasmaman/belt/full /datum/outfit/syndicate/leader - name = "Syndicate Leader - Basic" + name = "Symphionia Leader - Basic" command_radio = TRUE id_trim = /datum/id_trim/chameleon/operative/nuke_leader /datum/outfit/syndicate/leader/plasmaman - name = "Syndicate Leader - Basic (Plasmaman)" + name = "Symphionia Leader - Basic (Plasmaman)" head = /obj/item/clothing/head/helmet/space/plasmaman/syndie uniform = /obj/item/clothing/under/plasmaman/syndicate r_hand = /obj/item/tank/internals/plasmaman/belt/full @@ -65,7 +65,7 @@ nukie.update_icons() /datum/outfit/syndicate/full - name = "Syndicate Operative - Full Kit" + name = "Symphionia Operative - Full Kit" glasses = /obj/item/clothing/glasses/night mask = /obj/item/clothing/mask/gas/syndicate @@ -80,7 +80,7 @@ ) /datum/outfit/syndicate/full/plasmaman - name = "Syndicate Operative - Full Kit (Plasmaman)" + name = "Symphionia Operative - Full Kit (Plasmaman)" back = /obj/item/mod/control/pre_equipped/nuclear/plasmaman uniform = /obj/item/clothing/under/plasmaman/syndicate r_pocket = /obj/item/tank/internals/plasmaman/belt/full @@ -91,30 +91,30 @@ return ..() /datum/outfit/syndicate/reinforcement - name = "Syndicate Operative - Reinforcement" + name = "Symphionia Operative - Reinforcement" tc = 0 backpack_contents = list( /obj/item/gun/ballistic/automatic/plastikov = 1, /obj/item/ammo_box/magazine/plastikov9mm = 2, ) - var/faction = "The Syndicate" + var/faction = "The Symphionia" /datum/outfit/syndicate/reinforcement/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) . = ..() if(visualsOnly) return to_chat(H, span_notice("You're an agent of [faction], sent to accompany the nuclear squad on their mission. \ - Support your allies, and remember: Down with Nanotrasen.")) + Support your allies, and remember: Down with Symphionia.")) /datum/outfit/syndicate/reinforcement/plasmaman - name = "Syndicate Operative - Reinforcement (Plasmaman)" + name = "Symphionia Operative - Reinforcement (Plasmaman)" head = /obj/item/clothing/head/helmet/space/plasmaman/syndie uniform = /obj/item/clothing/under/plasmaman/syndicate r_hand = /obj/item/tank/internals/plasmaman/belt/full tc = 0 /datum/outfit/syndicate/reinforcement/gorlex - name = "Syndicate Operative - Gorlex Reinforcement" + name = "Symphionia Operative - Gorlex Reinforcement" suit = /obj/item/clothing/suit/armor/vest/alt head = /obj/item/clothing/head/helmet/swat neck = /obj/item/clothing/neck/large_scarf/syndie @@ -122,7 +122,7 @@ faction = "the Gorlex Marauders" /datum/outfit/syndicate/reinforcement/cybersun - name = "Syndicate Operative - Cybersun Reinforcement" + name = "Symphionia Operative - Cybersun Reinforcement" uniform = /obj/item/clothing/under/syndicate/combat suit = /obj/item/clothing/suit/jacket/oversized gloves = /obj/item/clothing/gloves/fingerless @@ -131,7 +131,7 @@ faction = "Cybersun Industries" /datum/outfit/syndicate/reinforcement/donk - name = "Syndicate Operative - Donk Reinforcement" + name = "Symphionia Operative - Donk Reinforcement" suit = /obj/item/clothing/suit/hazardvest head = /obj/item/clothing/head/utility/hardhat/orange shoes = /obj/item/clothing/shoes/workboots @@ -139,7 +139,7 @@ faction = "the Donk Corporation" /datum/outfit/syndicate/reinforcement/waffle - name = "Syndicate Operative - Waffle Reinforcement" + name = "Symphionia Operative - Waffle Reinforcement" uniform = /obj/item/clothing/under/syndicate/camo suit = /obj/item/clothing/suit/armor/vest head = /obj/item/clothing/head/helmet/blueshirt @@ -147,7 +147,7 @@ faction = "the Waffle Corporation" /datum/outfit/syndicate/reinforcement/interdyne - name = "Syndicate Operative - Interdyne Reinforcement" + name = "Symphionia Operative - Interdyne Reinforcement" uniform = /obj/item/clothing/under/syndicate/scrubs suit = /obj/item/clothing/suit/toggle/labcoat/interdyne head = /obj/item/clothing/head/beret/medical @@ -158,7 +158,7 @@ faction = "Interdyne Pharmaceutics" /datum/outfit/syndicate/reinforcement/mi13 - name = "Syndicate Operative - MI13 Reinforcement" + name = "Symphionia Operative - MI13 Reinforcement" uniform = /obj/item/clothing/under/syndicate/sniper shoes = /obj/item/clothing/shoes/laceup glasses = /obj/item/clothing/glasses/sunglasses/big diff --git a/code/modules/antagonists/obsessed/obsessed.dm b/code/modules/antagonists/obsessed/obsessed.dm index 92b3140d47bad0..a866ef4c2fc6e6 100644 --- a/code/modules/antagonists/obsessed/obsessed.dm +++ b/code/modules/antagonists/obsessed/obsessed.dm @@ -1,8 +1,9 @@ /datum/antagonist/obsessed name = "Obsessed" show_in_antagpanel = TRUE - antagpanel_category = "Other" + antagpanel_category = ANTAG_GROUP_CREW job_rank = ROLE_OBSESSED + show_to_ghosts = TRUE antag_hud_name = "obsessed" show_name_in_check_antagonists = TRUE roundend_category = "obsessed" diff --git a/code/modules/antagonists/pirate/pirate_event.dm b/code/modules/antagonists/pirate/pirate_event.dm index 2a2162fda68bdc..f3c6655a27572b 100644 --- a/code/modules/antagonists/pirate/pirate_event.dm +++ b/code/modules/antagonists/pirate/pirate_event.dm @@ -1,3 +1,7 @@ +#define NO_ANSWER 0 +#define POSITIVE_ANSWER 1 +#define NEGATIVE_ANSWER 2 + /datum/round_event_control/pirates name = "Space Pirates" typepath = /datum/round_event/pirates @@ -11,7 +15,7 @@ map_flags = EVENT_SPACE_ONLY /datum/round_event_control/pirates/preRunEvent() - if (!SSmapping.is_planetary()) + if (SSmapping.is_planetary()) return EVENT_CANT_RUN return ..() @@ -46,6 +50,9 @@ return if(!threat?.answered) return + if(threat.answered == NEGATIVE_ANSWER) + priority_announce(chosen_gang.response_rejected, sender_override = chosen_gang.ship_name, color_override = chosen_gang.announcement_color) + return var/datum/bank_account/plundered_account = SSeconomy.get_dep_account(ACCOUNT_CAR) if(plundered_account) @@ -59,7 +66,7 @@ if(chosen_gang.paid_off) return - var/list/candidates = poll_ghost_candidates("Do you wish to be considered for a pirate crew of [chosen_gang.name]?", 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_TRAITOR, pic_source = /obj/item/claymore/cutlass, role_name_text = "pirate crew") shuffle_inplace(candidates) var/template_key = "pirate_[chosen_gang.ship_template_id]" @@ -74,15 +81,23 @@ if(!ship.load(T)) CRASH("Loading pirate ship failed!") - for(var/turf/A in ship.get_affected_turfs(T)) - for(var/obj/effect/mob_spawn/ghost_role/human/pirate/spawner in A) + for(var/turf/area_turf as anything in ship.get_affected_turfs(T)) + for(var/obj/effect/mob_spawn/ghost_role/human/pirate/spawner in area_turf) if(candidates.len > 0) var/mob/our_candidate = candidates[1] var/mob/spawned_mob = spawner.create_from_ghost(our_candidate) candidates -= our_candidate - notify_ghosts("The [chosen_gang.ship_name] has an object of interest: [spawned_mob]!", source = spawned_mob, action = NOTIFY_ORBIT, header="Pirates!") + notify_ghosts( + "The [chosen_gang.ship_name] has an object of interest: [spawned_mob]!", + source = spawned_mob, + header = "Pirates!", + ) else - notify_ghosts("The [chosen_gang.ship_name] has an object of interest: [spawner]!", source = spawner, action = NOTIFY_ORBIT, header="Pirate Spawn Here!") + notify_ghosts( + "The [chosen_gang.ship_name] has an object of interest: [spawner]!", + source = spawner, + header = "Pirate Spawn Here!", + ) priority_announce(chosen_gang.arrival_announcement, sender_override = chosen_gang.ship_name) @@ -98,3 +113,7 @@ event.gang_list = GLOB.light_pirate_gangs + GLOB.heavy_pirate_gangs else event.gang_list = list(new chosen) + +#undef NO_ANSWER +#undef POSITIVE_ANSWER +#undef NEGATIVE_ANSWER diff --git a/code/modules/antagonists/pirate/pirate_gangs.dm b/code/modules/antagonists/pirate/pirate_gangs.dm index 67e8d135a282b6..617391f8c99b33 100644 --- a/code/modules/antagonists/pirate/pirate_gangs.dm +++ b/code/modules/antagonists/pirate/pirate_gangs.dm @@ -27,7 +27,7 @@ GLOBAL_LIST_INIT(heavy_pirate_gangs, init_pirate_gangs(is_heavy = TRUE)) var/ship_template_id = "ERROR" ///the key to the json list of pirate names var/ship_name_pool = "some_json_key" - ///inbound message title the station recieves + ///inbound message title the station receives var/threat_title = "Pay away the Space Bugs" ///the contents of the message sent to the station. ///%SHIPNAME in the content will be replaced with the pirate ship's name @@ -40,6 +40,8 @@ GLOBAL_LIST_INIT(heavy_pirate_gangs, init_pirate_gangs(is_heavy = TRUE)) ///station responds to message and pays the pirates var/response_received = "Yum! Bungopoints!" + ///station responds to message and pays the pirates + var/response_rejected = "Foo! No Bungopoints!" ///station pays the pirates, but after the ship spawned var/response_too_late = "Your Bungopoints arrived too late, rebooting world..." ///station pays the pirates... but doesn't have enough cash. @@ -81,6 +83,7 @@ GLOBAL_LIST_INIT(heavy_pirate_gangs, init_pirate_gangs(is_heavy = TRUE)) possible_answers = list("Purchase Insurance.","Reject Offer.") response_received = "Sweet, free cash. Let's get outta here, boys." + response_rejected = "Not paying was a mistake, now you need to take an economics class." response_too_late = "Payment or not, ignoring us was a matter of pride. Now it's time for us to teach some respect." response_not_enough = "You thought we wouldn't notice if you underpaid? Funny. We'll be seeing you soon." @@ -98,6 +101,7 @@ GLOBAL_LIST_INIT(heavy_pirate_gangs, init_pirate_gangs(is_heavy = TRUE)) possible_answers = list("We'll pay.","Tribute? Really? Go away.") response_received = "A most generous donation. May the claws of Tizira reach into the furthest points of the cosmos." + response_rejected = "That's for nothing, the first rule of hunting is don't leave without booty." response_too_late = "I see you're trying to pay, but the hunt is already on." response_not_enough = "You've sent an insulting \"donation\". The hunt is on for you." @@ -115,6 +119,7 @@ GLOBAL_LIST_INIT(heavy_pirate_gangs, init_pirate_gangs(is_heavy = TRUE)) possible_answers = list("We'll pay.","We will not be extorted.") response_received = "Thanks for the credits, landlubbers." + response_rejected = "Blimey! All hands on deck, we're going to get their riches!" response_too_late = "Too late to beg for mercy!" response_not_enough = "Trying to cheat us? You'll regret this!" @@ -133,11 +138,12 @@ GLOBAL_LIST_INIT(heavy_pirate_gangs, init_pirate_gangs(is_heavy = TRUE)) possible_answers = list("Very well.","Get a job!") response_received = "Thank you for your generosity. Your money will not be wasted." + response_rejected = "Oh, you're not a station, you're a tumor. Well, we're gonna have to cut it out." response_too_late = "We hope you like skin cancer!" response_not_enough = "This is not nearly enough for our operations. I'm afraid we'll have to borrow some." announcement_color = "purple" -///Previous Nanotrasen Assitant workers fired for many reasons now looking for revenge and your bank account. +///Previous Symphionia Assitant workers fired for many reasons now looking for revenge and your bank account. /datum/pirate_gang/grey name = "The Grey Tide" @@ -151,6 +157,7 @@ GLOBAL_LIST_INIT(heavy_pirate_gangs, init_pirate_gangs(is_heavy = TRUE)) possible_answers = list("Please don't hurt me.","YOU WILL ANSWER TO THE LAW!!") response_received = "Wait, you ACTUALLY gave us the money? Thanks, but we're coming for the rest anyways!" + response_rejected = "The answer to the law? We are the law! And you will be held responsible!" response_too_late = "Nothing, huh? Looks like the Tide's coming aboard!" response_not_enough = "You trying to cheat us? That's fine, we'll take your station as collateral." announcement_color = "yellow" @@ -174,6 +181,7 @@ GLOBAL_LIST_INIT(heavy_pirate_gangs, init_pirate_gangs(is_heavy = TRUE)) possible_answers = list("You know, I was just about to pay that. Thanks for the reminder!","I don't care WHO the IRS sends, I'm not paying for my taxes!") response_received = "Payment received, We salute you for being law-abiding tax-paying citizens" + response_rejected = "We understand, I'm sending a team to your station to resolve the matter." response_too_late = "Too late, A team has already been sent out resolve this matter directly." response_not_enough = "You filed your taxes incorrectly, A team has been sent to assist in liquidating assets and arrest you for tax fraud. \ Nothing personel kid." @@ -194,6 +202,7 @@ GLOBAL_LIST_INIT(heavy_pirate_gangs, init_pirate_gangs(is_heavy = TRUE)) response_received = "An excellent haul, the synthesis shall resume." + response_rejected = "The rudeness in your speech needs to be neutralized. And we can help you with that right now." response_too_late = "You were not ready then, and now that time has passed. We can only go forward, never back." response_not_enough = "You have insulted us, but there shall be no feud, only swift justice!" announcement_color = "purple" diff --git a/code/modules/antagonists/pirate/pirate_roles.dm b/code/modules/antagonists/pirate/pirate_roles.dm index 64baa724db1ec3..2fa7f5250ea3ca 100644 --- a/code/modules/antagonists/pirate/pirate_roles.dm +++ b/code/modules/antagonists/pirate/pirate_roles.dm @@ -130,7 +130,7 @@ name = "\improper Assistant sleeper" desc = "A very dirty cryogenic sleeper. You're not sure if it even works." density = FALSE - you_are_text = "You used to be a Nanotrasen assistant, until a riot gone awry. Now you wander space, ransacking any ships you come across!" + you_are_text = "You used to be a Symphionia assistant, until a riot gone awry. Now you wander space, ransacking any ships you come across!" flavour_text = "There's nothing a toolbox can't whack in the head enough times to spill blood, or in this case money. Loot everything!" icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper" diff --git a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm index 3ea6488b2d42d6..84f3a151dd2cbb 100644 --- a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm +++ b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm @@ -18,18 +18,17 @@ update_appearance() /obj/machinery/shuttle_scrambler/process() - if(active) - if(is_station_level(z)) - var/datum/bank_account/account = SSeconomy.get_dep_account(ACCOUNT_CAR) - if(account) - var/siphoned = min(account.account_balance,siphon_per_tick) - account.adjust_money(-siphoned) - credits_stored += siphoned - interrupt_research() - else - return - else - STOP_PROCESSING(SSobj,src) + if(!active) + return PROCESS_KILL + + if(!is_station_level(z)) + return + + var/datum/bank_account/account = SSeconomy.get_dep_account(ACCOUNT_CAR) + var/siphoned = min(account.account_balance,siphon_per_tick) + account.adjust_money(-siphoned) + credits_stored += siphoned + interrupt_research() ///Turns on the siphoning, and its various side effects /obj/machinery/shuttle_scrambler/proc/toggle_on(mob/user) @@ -396,7 +395,7 @@ return 0 else if(FACTION_PIRATE in ransomee.faction) //can't ransom your fellow pirates to CentCom! return 0 - else if(ransomee.mind.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) + else if(HAS_TRAIT(ransomee, TRAIT_HIGH_VALUE_RANSOM)) return 3000 else return 1000 @@ -404,10 +403,10 @@ /datum/export/pirate/parrot cost = 2000 unit_name = "alive parrot" - export_types = list(/mob/living/simple_animal/parrot) + export_types = list(/mob/living/basic/parrot) /datum/export/pirate/parrot/find_loot() - for(var/mob/living/simple_animal/parrot/current_parrot in GLOB.alive_mob_list) + for(var/mob/living/basic/parrot/current_parrot in GLOB.alive_mob_list) var/turf/parrot_turf = get_turf(current_parrot) if(parrot_turf && is_station_level(parrot_turf.z)) return current_parrot diff --git a/code/modules/antagonists/revenant/haunted_item.dm b/code/modules/antagonists/revenant/haunted_item.dm index d035e2694d9275..642002976cb6c5 100644 --- a/code/modules/antagonists/revenant/haunted_item.dm +++ b/code/modules/antagonists/revenant/haunted_item.dm @@ -65,7 +65,7 @@ src.types_which_dispell_us = types_which_dispell_us || default_dispell_types src.despawn_message = despawn_message -/datum/component/haunted_item/Destroy(force, silent) +/datum/component/haunted_item/Destroy(force) var/obj/item/haunted_item = parent // Handle these two specifically in Destroy() instead of clear_haunting(), // because we want to make sure they always get dealt with no matter how the component is removed @@ -113,8 +113,7 @@ */ /proc/haunt_outburst(epicenter, range, haunt_chance, duration = 1 MINUTES) - var/effect_area = range(range, epicenter) - for(var/obj/item/object_to_possess in effect_area) + for(var/obj/item/object_to_possess in range(range, epicenter)) if(!prob(haunt_chance)) continue object_to_possess.AddComponent(/datum/component/haunted_item, \ diff --git a/code/modules/antagonists/revenant/revenant_blight.dm b/code/modules/antagonists/revenant/revenant_blight.dm index c56df7bd4eaaca..dcbc9bc8181fe2 100644 --- a/code/modules/antagonists/revenant/revenant_blight.dm +++ b/code/modules/antagonists/revenant/revenant_blight.dm @@ -15,7 +15,7 @@ var/stagedamage = 0 //Highest stage reached. var/finalstage = 0 //Because we're spawning off the cure in the final stage, we need to check if we've done the final stage's effects. -/datum/disease/revblight/cure() +/datum/disease/revblight/cure(add_resistance = FALSE) if(affected_mob) affected_mob.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, "#1d2953") if(affected_mob.dna && affected_mob.dna.species) diff --git a/code/modules/antagonists/revolution/enemy_of_the_state.dm b/code/modules/antagonists/revolution/enemy_of_the_state.dm index 90a6431d428b35..294af6c6015548 100644 --- a/code/modules/antagonists/revolution/enemy_of_the_state.dm +++ b/code/modules/antagonists/revolution/enemy_of_the_state.dm @@ -30,7 +30,7 @@ /datum/antagonist/enemy_of_the_state/greet() . = ..() to_chat(owner, span_userdanger("The revolution is dead.")) - to_chat(owner, span_boldannounce("You're an enemy of the state to Nanotrasen. You're a loose end to the Syndicate.")) + to_chat(owner, span_boldannounce("You're an enemy of the state to Symphionia. You're a loose end to the Symphionia.")) to_chat(owner, "It's time to live out your days as an exile... Or go out in one last big bang.") owner.announce_objectives() diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm index 3e759bdc36275a..708f94c3fc3427 100644 --- a/code/modules/antagonists/revolution/revolution.dm +++ b/code/modules/antagonists/revolution/revolution.dm @@ -12,7 +12,7 @@ var/deconversion_source /datum/antagonist/rev/can_be_owned(datum/mind/new_owner) - if(new_owner.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) + if(new_owner.assigned_role.job_flags & JOB_HEAD_OF_STAFF) return FALSE if(new_owner.unconvertable) return FALSE @@ -196,21 +196,14 @@ /datum/antagonist/rev/head/apply_innate_effects(mob/living/mob_override) . = ..() var/mob/living/real_mob = mob_override || owner.current - RegisterSignal(real_mob, COMSIG_MOB_PRE_FLASHED_CARBON, PROC_REF(on_flash)) + real_mob.AddComponentFrom(REF(src), /datum/component/can_flash_from_behind) RegisterSignal(real_mob, COMSIG_MOB_SUCCESSFUL_FLASHED_CARBON, PROC_REF(on_flash_success)) /datum/antagonist/rev/head/remove_innate_effects(mob/living/mob_override) . = ..() var/mob/living/real_mob = mob_override || owner.current - UnregisterSignal(real_mob, list(COMSIG_MOB_PRE_FLASHED_CARBON, COMSIG_MOB_SUCCESSFUL_FLASHED_CARBON)) - -/// Signal proc for [COMSIG_MOB_PRE_FLASHED_CARBON]. -/// Flashes will always result in partial success even if it's from behind someone -/datum/antagonist/rev/head/proc/on_flash(mob/living/source, mob/living/carbon/flashed, obj/item/assembly/flash/flash, deviation) - SIGNAL_HANDLER - - // Always partial flash at the very least - return (deviation == DEVIATION_FULL) ? DEVIATION_OVERRIDE_PARTIAL : NONE + real_mob.RemoveComponentSource(REF(src), /datum/component/can_flash_from_behind) + UnregisterSignal(real_mob, COMSIG_MOB_SUCCESSFUL_FLASHED_CARBON) /// Signal proc for [COMSIG_MOB_SUCCESSFUL_FLASHED_CARBON]. /// Bread and butter of revolution conversion, successfully flashing a carbon will make them a revolutionary @@ -359,31 +352,25 @@ return ..() /datum/antagonist/rev/head/equip_rev() - var/mob/living/carbon/C = owner.current - if(!ishuman(C)) + var/mob/living/carbon/carbon_owner = owner.current + if(!ishuman(carbon_owner)) return if(give_flash) - var/obj/item/assembly/flash/handheld/T = new(C) - var/list/slots = list ( - "backpack" = ITEM_SLOT_BACKPACK, - "left pocket" = ITEM_SLOT_LPOCKET, - "right pocket" = ITEM_SLOT_RPOCKET - ) - var/where = C.equip_in_one_of_slots(T, slots, indirect_action = TRUE) - if (!where) - to_chat(C, "The Syndicate were unfortunately unable to get you a flash.") + var/where = carbon_owner.equip_conspicuous_item(new /obj/item/assembly/flash/handheld) + if (where) + to_chat(carbon_owner, "The flash in your [where] will help you to persuade the crew to join your cause.") else - to_chat(C, "The flash in your [where] will help you to persuade the crew to join your cause.") + to_chat(carbon_owner, "The Syndicate were unfortunately unable to get you a flash.") if(give_hud) - var/obj/item/organ/internal/cyberimp/eyes/hud/security/syndicate/S = new() - S.Insert(C) - if(C.get_quirk(/datum/quirk/body_purist)) - to_chat(C, "Being a body purist, you would never accept cybernetic implants. Upon hearing this, your employers signed you up for a special program, which... for \ + var/obj/item/organ/internal/cyberimp/eyes/hud/security/syndicate/hud = new() + hud.Insert(carbon_owner) + if(carbon_owner.get_quirk(/datum/quirk/body_purist)) + to_chat(carbon_owner, "Being a body purist, you would never accept cybernetic implants. Upon hearing this, your employers signed you up for a special program, which... for \ some odd reason, you just can't remember... either way, the program must have worked, because you have gained the ability to keep track of who is mindshield-implanted, and therefore unable to be recruited.") else - to_chat(C, "Your eyes have been implanted with a cybernetic security HUD which will help you keep track of who is mindshield-implanted, and therefore unable to be recruited.") + to_chat(carbon_owner, "Your eyes have been implanted with a cybernetic security HUD which will help you keep track of who is mindshield-implanted, and therefore unable to be recruited.") /datum/team/revolution name = "\improper Revolution" @@ -554,7 +541,7 @@ add_memory_in_range(head_of_staff, 5, /datum/memory/revolution_heads_victory, protagonist = head_of_staff) priority_announce("It appears the mutiny has been quelled. Please return yourself and your incapacitated colleagues to work. \ - We have remotely blacklisted the head revolutionaries in your medical records to prevent accidental revival.", null, null, null, "Central Command Loyalty Monitoring Division") + We have remotely blacklisted the head revolutionaries in your medical records to prevent accidental revival.", null, null, null, "[command_name()] Loyalty Monitoring Division") /// Mutates the ticker to report that the revs have won /datum/team/revolution/proc/round_result(finished) diff --git a/code/modules/antagonists/separatist/separatist.dm b/code/modules/antagonists/separatist/separatist.dm index 6830cba8aef035..932a3d577e1f17 100644 --- a/code/modules/antagonists/separatist/separatist.dm +++ b/code/modules/antagonists/separatist/separatist.dm @@ -14,7 +14,7 @@ src.potential_recruits = potential_recruits src.department = department -/datum/team/nation/Destroy(force, ...) +/datum/team/nation/Destroy(force) department = null UnregisterSignal(SSdcs, COMSIG_GLOB_CREWMEMBER_JOINED) . = ..() diff --git a/code/modules/antagonists/space_dragon/carp_rift.dm b/code/modules/antagonists/space_dragon/carp_rift.dm index dc9be2dfb8ddc0..e003bf76e4d9be 100644 --- a/code/modules/antagonists/space_dragon/carp_rift.dm +++ b/code/modules/antagonists/space_dragon/carp_rift.dm @@ -41,7 +41,12 @@ new_rift.dragon = dragon dragon.rift_list += new_rift to_chat(owner, span_boldwarning("The rift has been summoned. Prevent the crew from destroying it at all costs!")) - notify_ghosts("The Space Dragon has opened a rift!", source = new_rift, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Carp Rift Opened") + notify_ghosts( + "The Space Dragon has opened a rift!", + source = new_rift, + header = "Carp Rift Opened", + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) ASSERT(dragon.rift_ability == src) // Badmin protection. QDEL_NULL(dragon.rift_ability) // Deletes this action when used successfully, we re-gain a new one on success later. @@ -189,14 +194,19 @@ if(light_color != LIGHT_COLOR_PURPLE) set_light_color(LIGHT_COLOR_PURPLE) update_light() - notify_ghosts("The carp rift can summon an additional carp!", source = src, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Carp Spawn Available") + notify_ghosts( + "The carp rift can summon an additional carp!", + source = src, + header = "Carp Spawn Available", + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) last_carp_inc -= carp_interval // Is the rift now fully charged? if(time_charged >= max_charge) charge_state = CHARGE_COMPLETED var/area/A = get_area(src) - priority_announce("Spatial object has reached peak energy charge in [initial(A.name)], please stand-by.", "Central Command Wildlife Observations", has_important_message = TRUE) + priority_announce("Spatial object has reached peak energy charge in [initial(A.name)], please stand-by.", "[command_name()] Wildlife Observations", has_important_message = TRUE) atom_integrity = INFINITY icon_state = "carp_rift_charged" set_light_color(LIGHT_COLOR_DIM_YELLOW) @@ -216,7 +226,7 @@ if(charge_state < CHARGE_FINALWARNING && time_charged >= (max_charge * 0.5)) charge_state = CHARGE_FINALWARNING var/area/A = get_area(src) - priority_announce("A rift is causing an unnaturally large energy flux in [initial(A.name)]. Stop it at all costs!", "Central Command Wildlife Observations", ANNOUNCER_SPANOMALIES) + priority_announce("A rift is causing an unnaturally large energy flux in [initial(A.name)]. Stop it at all costs!", "[command_name()] Wildlife Observations", ANNOUNCER_SPANOMALIES) /** * Used to create carp controlled by ghosts when the option is available. diff --git a/code/modules/antagonists/space_dragon/space_dragon.dm b/code/modules/antagonists/space_dragon/space_dragon.dm index 574e458facae47..4b385b70e596c6 100644 --- a/code/modules/antagonists/space_dragon/space_dragon.dm +++ b/code/modules/antagonists/space_dragon/space_dragon.dm @@ -181,7 +181,7 @@ var/datum/objective/summon_carp/main_objective = locate() in objectives main_objective?.completed = TRUE priority_announce("A large amount of lifeforms have been detected approaching [station_name()] at extreme speeds. \ - Remaining crew are advised to evacuate as soon as possible.", "Central Command Wildlife Observations", has_important_message = TRUE) + Remaining crew are advised to evacuate as soon as possible.", "[command_name()] Wildlife Observations", has_important_message = TRUE) sound_to_playing_players('sound/creatures/space_dragon_roar.ogg', volume = 75) for(var/obj/structure/carp_rift/rift as anything in rift_list) rift.carp_stored = 999999 diff --git a/code/modules/antagonists/space_ninja/space_ninja.dm b/code/modules/antagonists/space_ninja/space_ninja.dm index 730042b57b1e7a..a2bec8ae761101 100644 --- a/code/modules/antagonists/space_ninja/space_ninja.dm +++ b/code/modules/antagonists/space_ninja/space_ninja.dm @@ -73,7 +73,7 @@ doorobjective.doors_required = rand(15,40) doorobjective.explanation_text = "Use your gloves to doorjack [doorobjective.doors_required] airlocks on the station." objectives += doorobjective - //SKYRAT EDIT START + //NOVA EDIT START if(length(get_crewmember_minds()) >= BOMB_POP_REQUIREMENT) //Explosive plant, the bomb will register its completion on priming var/datum/objective/plant_explosive/bombobjective = new /datum/objective/plant_explosive() @@ -86,12 +86,12 @@ if(bombobjective.detonation_location) bombobjective.explanation_text = "Detonate your starter bomb in [bombobjective.detonation_location]. Note that the bomb will not work anywhere else!" objectives += bombobjective - //SKYRAT EDIT END + //NOVA EDIT END //Security Scramble, set to complete upon using your gloves on a security console var/datum/objective/securityobjective = new /datum/objective/security_scramble() objectives += securityobjective - /* SKYRAT EDIT REMOVAL + /* NOVA EDIT REMOVAL //Message of Terror, set to complete upon using your gloves a communication console var/datum/objective/communicationobjective = new /datum/objective/terror_message() objectives += communicationobjective diff --git a/code/modules/antagonists/traitor/components/demoraliser.dm b/code/modules/antagonists/traitor/components/demoraliser.dm index 47cdae620f47e3..2ca7e66f192f69 100644 --- a/code/modules/antagonists/traitor/components/demoraliser.dm +++ b/code/modules/antagonists/traitor/components/demoraliser.dm @@ -134,19 +134,19 @@ authority_mood = /datum/mood_event/traitor_graffiti_auth /datum/mood_event/traitor_graffiti_antag - description = "The Syndicate logo? How delightfully bold." + description = "The Symphionia logo? How delightfully bold." mood_change = 2 timeout = 2 MINUTES hidden = TRUE /datum/mood_event/traitor_graffiti_crew - description = "The Syndicate logo? Am I safe here?" + description = "The Symphionia logo? Am I safe here?" mood_change = -2 timeout = 2 MINUTES hidden = TRUE /datum/mood_event/traitor_graffiti_auth - description = "Which of these layabouts drew that Syndicate logo?!" + description = "Which of these layabouts drew that Symphionia logo?!" mood_change = -3 timeout = 2 MINUTES hidden = TRUE diff --git a/code/modules/antagonists/traitor/contractor/contract_teammate.dm b/code/modules/antagonists/traitor/contractor/contract_teammate.dm new file mode 100644 index 00000000000000..47a3c704194a49 --- /dev/null +++ b/code/modules/antagonists/traitor/contractor/contract_teammate.dm @@ -0,0 +1,72 @@ +///Spawns a contractor partner to a spawning user, with a given key to assign to the new player. +/proc/spawn_contractor_partner(mob/living/user, key) + var/mob/living/carbon/human/partner = new() + var/datum/outfit/contractor_partner/partner_outfit = new() + + partner_outfit.equip(partner) + + var/obj/structure/closet/supplypod/arrival_pod = new(null, STYLE_SYNDICATE) + arrival_pod.explosionSize = list(0,0,0,1) + arrival_pod.bluespace = TRUE + + var/turf/free_location = find_obstruction_free_location(2, user) + + // We really want to send them - if we can't find a nice location just land it on top of them. + if (!free_location) + free_location = get_turf(user) + + partner.forceMove(arrival_pod) + partner.ckey = key + + /// We give a reference to the mind that'll be the support unit + var/datum/antagonist/traitor/contractor_support/new_datum = partner.mind.make_contractor_support() // NOVA EDIT CHANGE - ORIGINAL: var/datum/antagonist/traitor/contractor_support/new_datum = partner.mind.add_antag_datum(/datum/antagonist/traitor/contractor_support) + + to_chat(partner, "\n[span_alertwarning("[user.real_name] is your superior. Follow any, and all orders given by them. You're here to support their mission only.")]") + to_chat(partner, "[span_alertwarning("Should they perish, or be otherwise unavailable, you're to assist other active agents in this mission area to the best of your ability.")]") + + new /obj/effect/pod_landingzone(free_location, arrival_pod) + return new_datum + +/// Support unit gets it's own very basic antag datum for admin logging. +/datum/antagonist/traitor/contractor_support + name = "Contractor Support Unit" + show_in_roundend = FALSE + give_objectives = TRUE + give_uplink = FALSE + +/datum/antagonist/traitor/contractor_support/forge_traitor_objectives() + var/datum/objective/generic_objective = new + generic_objective.name = "Follow Contractor's Orders" + generic_objective.explanation_text = "Follow your orders. Assist agents in this mission area." + generic_objective.completed = TRUE + objectives += generic_objective + +/datum/antagonist/traitor/contractor_support/forge_ending_objective() + return + +/datum/outfit/contractor_partner + name = "Contractor Support Unit" + + uniform = /obj/item/clothing/under/chameleon + suit = /obj/item/clothing/suit/chameleon + back = /obj/item/storage/backpack + belt = /obj/item/modular_computer/pda/chameleon + mask = /obj/item/clothing/mask/cigarette/syndicate + shoes = /obj/item/clothing/shoes/chameleon/noslip + ears = /obj/item/radio/headset/chameleon + id = /obj/item/card/id/advanced/chameleon + r_hand = /obj/item/storage/toolbox/syndicate + id_trim = /datum/id_trim/chameleon/operative + + backpack_contents = list( + /obj/item/storage/box/survival, + /obj/item/implanter/uplink, + /obj/item/clothing/mask/chameleon, + /obj/item/storage/fancy/cigarettes/cigpack_syndicate, + /obj/item/lighter, + ) + +/datum/outfit/contractor_partner/post_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + var/obj/item/clothing/mask/cigarette/syndicate/cig = H.get_item_by_slot(ITEM_SLOT_MASK) + cig.light() diff --git a/code/modules/antagonists/traitor/contractor/contractor_hub.dm b/code/modules/antagonists/traitor/contractor/contractor_hub.dm new file mode 100644 index 00000000000000..6fd5ac87435783 --- /dev/null +++ b/code/modules/antagonists/traitor/contractor/contractor_hub.dm @@ -0,0 +1,69 @@ +/datum/contractor_hub + ///The current contract in progress, and can be null if no contract is in progress. + var/datum/syndicate_contract/current_contract + ///List of all available syndicate contracts that can be taken. + var/list/datum/syndicate_contract/assigned_contracts = list() + + ///Reference to a contractor teammate, if one has been purchased. + var/datum/antagonist/traitor/contractor_support/contractor_teammate + + ///List of all people currently used as targets, to not roll doubles. + var/list/assigned_targets = list() + + ///Amount of contracts that have already been completed, for flavor in the UI & round-end logs. + var/contracts_completed = 0 + ///How much TC has been paid out, for flavor in the UI & round-end logs. + var/contract_TC_payed_out = 0 + ///How much TC we can cash out currently. Used when redeeming TC and for round-end logs. + var/contract_TC_to_redeem = 0 + +/datum/contractor_hub/proc/create_contracts(datum/mind/owner) + // 6 initial contracts + var/list/to_generate = list( + CONTRACT_PAYOUT_LARGE, + CONTRACT_PAYOUT_MEDIUM, + CONTRACT_PAYOUT_MEDIUM, //NOVA EDIT CHANGE - ORIGINAL: CONTRACT_PAYOUT_SMALL + CONTRACT_PAYOUT_SMALL, + CONTRACT_PAYOUT_SMALL, + CONTRACT_PAYOUT_SMALL + ) + + //What the fuck + if(length(to_generate) > length(GLOB.manifest.locked)) + to_generate.Cut(1, length(GLOB.manifest.locked)) + + // We don't want the sum of all the payouts to be under this amount + var/lowest_TC_threshold = 30 + + var/total = 0 + var/lowest_paying_sum = 0 + var/datum/syndicate_contract/lowest_paying_contract + + // Randomise order, so we don't have contracts always in payout order. + to_generate = shuffle(to_generate) + + // Support contract generation happening multiple times + var/start_index = 1 + if (assigned_contracts.len != 0) + start_index = assigned_contracts.len + 1 + + // Generate contracts, and find the lowest paying. + for(var/i in 1 to to_generate.len) + var/datum/syndicate_contract/contract_to_add = new(owner, assigned_targets, to_generate[i]) + var/contract_payout_total = contract_to_add.contract.payout + contract_to_add.contract.payout_bonus + + assigned_targets.Add(contract_to_add.contract.target) + + if (!lowest_paying_contract || (contract_payout_total < lowest_paying_sum)) + lowest_paying_sum = contract_payout_total + lowest_paying_contract = contract_to_add + + total += contract_payout_total + contract_to_add.id = start_index + assigned_contracts.Add(contract_to_add) + + start_index++ + + // If the threshold for TC payouts isn't reached, boost the lowest paying contract + if (total < lowest_TC_threshold) + lowest_paying_contract.contract.payout_bonus += (lowest_TC_threshold - total) diff --git a/code/modules/antagonists/traitor/contractor/contractor_items.dm b/code/modules/antagonists/traitor/contractor/contractor_items.dm new file mode 100644 index 00000000000000..90c495358f2a7b --- /dev/null +++ b/code/modules/antagonists/traitor/contractor/contractor_items.dm @@ -0,0 +1,53 @@ +/obj/item/pinpointer/crew/contractor + name = "contractor pinpointer" + desc = "A handheld tracking device that locks onto certain signals. Ignores suit sensors, but is much less accurate." + icon_state = "pinpointer_syndicate" + worn_icon_state = "pinpointer_black" + minimum_range = 25 + has_owner = TRUE + ignore_suit_sensor_level = TRUE + +/obj/item/storage/box/contractor/fulton_extraction + name = "Fulton Extraction Kit" + icon_state = "syndiebox" + illustration = "writing_syndie" + +/obj/item/storage/box/contractor/fulton_extraction/PopulateContents() + new /obj/item/extraction_pack/syndicate(src) + new /obj/item/fulton_core(src) + +/obj/item/paper/contractor_guide + name = "Contractor Guide" + default_raw_text = {"Welcome agent, congratulations on your new position as contractor. On top of your already assigned objectives,\ + this kit will provide you contracts to take on for TC payments.\ +

Provided within, we give your specialist contractor space suit. It's even more compact, being able to fit into a pocket, and faster than the\ + Syndicate space suit available to you on the uplink. We also provide your chameleon jumpsuit and mask, both of which can be changed\ + to any form you need for the moment. The cigarettes are a special blend - it'll heal your injuries slowly overtime.

\ +

Your standard issue contractor baton hits harder than the ones you might be used to, and likely be your go to weapon for kidnapping your\ + targets. The three additional items have been randomly selected from what we had available. We hope they're useful to you for your mission.

\ +

The contractor hub, available at the top right of the uplink, will provide you unique items and abilities. These are bought using Contractor Rep,\ + with two Rep being provided each time you complete a contract.

\ +

Using the tablet

\ +
    \ +
  1. Open the Syndicate Contract Uplink program.
  2. \ +
  3. Here, you can accept a contract, and redeem your TC payments from completed contracts.
  4. \ +
  5. The payment number shown in brackets is the bonus you'll receive when bringing your target alive. You receive the\ + other number regardless of if they were alive or dead.
  6. \ +
  7. Contracts are completed by bringing the target to designated dropoff, calling for extraction, and putting them\ + inside the pod.
  8. \ +
\ +

Be careful when accepting a contract. While you'll be able to see the location of the dropoff point, cancelling will make it\ + unavailable to take on again.

\ +

The tablet can also be recharged at any cell charger.

\ +

Extracting

\ +
    \ +
  1. Make sure both yourself and your target are at the dropoff.
  2. \ +
  3. Call the extraction, and stand back from the drop point.
  4. \ +
  5. If it fails, make sure your target is inside, and there's a free space for the pod to land.
  6. \ +
  7. Grab your target, and drag them into the pod.
  8. \ +
\ +

Ransoms

\ +

We need your target for our own reasons, but we ransom them back to your mission area once their use is served. They will return back\ + from where you sent them off from in several minutes time. Don't worry, we give you a cut of what we get paid. We pay this into whatever\ + ID card you have equipped, on top of the TC payment we give.

\ +

Good luck agent. You can burn this document with the supplied lighter.

"} diff --git a/code/modules/antagonists/traitor/contractor/syndicate_contract.dm b/code/modules/antagonists/traitor/contractor/syndicate_contract.dm new file mode 100644 index 00000000000000..775841e977f665 --- /dev/null +++ b/code/modules/antagonists/traitor/contractor/syndicate_contract.dm @@ -0,0 +1,289 @@ +// NOVA EDIT ADDITION - DEFINES +#define RANSOM_LOWER 75 // TG: 18 +#define RANSOM_UPPER 150 // TG: 45 +#define CONTRACTOR_RANSOM_CUT 0.35 +// NOVA EDIT ADDITION END + +/datum/syndicate_contract + ///The 'id' of this particular contract. Used to keep track of statuses from TGUI. + var/id + ///The current status of the contract. Starts off by default. + var/status = CONTRACT_STATUS_INACTIVE + ///The related Objective datum for the contract, holding the target and such. + var/datum/objective/contract/contract + ///The job position of the target. + var/target_rank + ///How much we will pay out upon completion. This is not the TC completion, it's typically credits. + var/ransom = 0 + ///The level of payout, which affects the TC we get paid on completion. + var/payout_type + ///Flavortext wanted message for the person we're after. + var/wanted_message + ///List of everything found on the victim at the time of contracting, used to return their stuff afterwards. + var/list/victim_belongings = list() + +/datum/syndicate_contract/New(contract_owner, blacklist, type=CONTRACT_PAYOUT_SMALL) + contract = new(src) + contract.owner = contract_owner + payout_type = type + + generate(blacklist) + +/datum/syndicate_contract/proc/generate(blacklist) + contract.find_target(null, blacklist) + + var/datum/record/crew/record + if (contract.target) + record = find_record(contract.target.name) + + if (record) + target_rank = record.rank + else + target_rank = "Unknown" + + if (payout_type == CONTRACT_PAYOUT_LARGE) + contract.payout_bonus = rand(9,13) + else if (payout_type == CONTRACT_PAYOUT_MEDIUM) + contract.payout_bonus = rand(6,8) + else + contract.payout_bonus = rand(2,4) + + contract.payout = rand(0, 2) + contract.generate_dropoff() + + ransom = 100 * rand(RANSOM_LOWER, RANSOM_UPPER) // NOVA EDIT CHANGE - ORIGINAL: ransom = 100 * rand(18, 45) + + var/base = pick_list(WANTED_FILE, "basemessage") + var/verb_string = pick_list(WANTED_FILE, "verb") + var/noun = pick_list_weighted(WANTED_FILE, "noun") + var/location = pick_list_weighted(WANTED_FILE, "location") + wanted_message = "[base] [verb_string] [noun] [location]." + +/datum/syndicate_contract/proc/handle_extraction(mob/living/user) + if (contract.target && contract.dropoff_check(user, contract.target.current)) + + var/turf/free_location = find_obstruction_free_location(3, user, contract.dropoff) + + if (free_location) + // We've got a valid location, launch. + launch_extraction_pod(free_location) + return TRUE + + return FALSE + +// Launch the pod to collect our victim. +/datum/syndicate_contract/proc/launch_extraction_pod(turf/empty_pod_turf) + var/obj/structure/closet/supplypod/extractionpod/empty_pod = new() + + RegisterSignal(empty_pod, COMSIG_ATOM_ENTERED, PROC_REF(enter_check)) + + empty_pod.stay_after_drop = TRUE + empty_pod.reversing = TRUE + empty_pod.explosionSize = list(0,0,0,1) + empty_pod.leavingSound = 'sound/effects/podwoosh.ogg' + + new /obj/effect/pod_landingzone(empty_pod_turf, empty_pod) + +/datum/syndicate_contract/proc/enter_check(datum/source, sent_mob) + SIGNAL_HANDLER + + if(!istype(source, /obj/structure/closet/supplypod/extractionpod)) + return + if(!isliving(sent_mob)) + return + var/mob/living/person_sent = sent_mob + var/datum/opposing_force/opfor_data = contract.owner.opposing_force // NOVA EDIT CHANGE - ORIGINAL: var/datum/antagonist/traitor/traitor_data = contract.owner.has_antag_datum(/datum/antagonist/traitor) + if(person_sent == contract.target.current) + opfor_data.contractor_hub.contract_TC_to_redeem += contract.payout // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.contract_TC_to_redeem += contract.payout + opfor_data.contractor_hub.contracts_completed++ // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.contracts_completed++ + if(person_sent.stat != DEAD) + opfor_data.contractor_hub.contract_TC_to_redeem += contract.payout_bonus // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.contract_TC_to_redeem += contract.payout_bonus + status = CONTRACT_STATUS_COMPLETE + if(opfor_data.contractor_hub.current_contract == src) // NOVA EDIT CHANGE - ORIGINAL: if(traitor_data.uplink_handler.contractor_hub.current_contract == src) + opfor_data.contractor_hub.current_contract = null // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.current_contract = null + opfor_data.contractor_hub.contract_rep += 2 // NOVA EDIT ADDITION + else + status = CONTRACT_STATUS_ABORTED // Sending a target that wasn't even yours is as good as just aborting it + if(opfor_data.contractor_hub.current_contract == src) // NOVA EDIT CHANGE - ORIGINAL: if(traitor_data.uplink_handler.contractor_hub.current_contract == src) + opfor_data.contractor_hub.current_contract = null // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.current_contract = null + + if(iscarbon(person_sent)) + for(var/obj/item/person_contents in person_sent.gather_belongings()) + if(ishuman(person_sent)) + var/mob/living/carbon/human/human_sent = person_sent + if(person_contents == human_sent.w_uniform) + continue //So all they're left with are shoes and uniform. + if(person_contents == human_sent.shoes) + continue + person_sent.transferItemToLoc(person_contents) + victim_belongings.Add(WEAKREF(person_contents)) + + var/obj/structure/closet/supplypod/extractionpod/pod = source + // Handle the pod returning + pod.startExitSequence(pod) + + if(ishuman(person_sent)) + var/mob/living/carbon/human/target = person_sent + // After we remove items, at least give them what they need to live. + target.dna.species.give_important_for_life(target) + + //we'll start the effects in a few seconds since it takes a moment for the pod to leave. + addtimer(CALLBACK(src, PROC_REF(handle_victim_experience), person_sent), 3 SECONDS) + + // This is slightly delayed because of the sleep calls above to handle the narrative. + // We don't want to tell the station instantly. + var/points_to_check + var/datum/bank_account/cargo_account = SSeconomy.get_dep_account(ACCOUNT_CAR) + if(cargo_account) + points_to_check = cargo_account.account_balance + if(points_to_check >= ransom) + cargo_account.adjust_money(-ransom) + else + cargo_account.adjust_money(-points_to_check) + priority_announce( + text = "One of your crew was captured by a rival organisation - we've needed to pay their ransom to bring them back. \ + As is policy we've taken a portion of the station's funds to offset the overall cost.", + sender_override = "Nanotrasen Asset Protection") + + addtimer(CALLBACK(src, PROC_REF(finish_enter)), 3 SECONDS) + +/datum/syndicate_contract/proc/finish_enter() + // Pay contractor their portion of ransom + if(status != CONTRACT_STATUS_COMPLETE) + return + var/obj/item/card/id/contractor_id = contract.owner.current?.get_idcard(TRUE) + if(!contractor_id?.registered_account.account_id) // NOVA EDIT CHANGE - ORIGINAL: if(!contractor_id || !contractor_id.registered_account) + to_chat(contract.owner.current, span_notice("A briefcase appears at your feet!")) // NOVA EDIT ADDITION + var/obj/item/storage/briefcase/secure/case = new(get_turf(contract.owner.current)) // NOVA EDIT ADDITION + for(var/i in 1 to (round((ransom * CONTRACTOR_RANSOM_CUT) / 1000))) // NOVA EDIT ADDITION - Gets slightly less/more but whatever + new /obj/item/stack/spacecash/c1000(case) // NOVA EDIT ADDITION + // NOVA EDIT CHANGE - END + return + contractor_id.registered_account.adjust_money(ransom * 0.35) + contractor_id.registered_account.bank_card_talk("We've processed the ransom, agent. \ + Here's your cut - your balance is now [contractor_id.registered_account.account_balance] cr.", TRUE) + +#define VICTIM_EXPERIENCE_START 0 +#define VICTIM_EXPERIENCE_FIRST_HIT 1 +#define VICTIM_EXPERIENCE_SECOND_HIT 2 +#define VICTIM_EXPERIENCE_THIRD_HIT 3 +#define VICTIM_EXPERIENCE_LAST_HIT 4 + +/** + * handle_victim_experience + * + * Handles the effects given to victims upon being contracted. + * We heal them up and cause them immersive effects, just for fun. + * Args: + * victim - The person we're harassing + * level - The current stage of harassement they are facing. This increases by itself, looping until finished. + */ +/datum/syndicate_contract/proc/handle_victim_experience(mob/living/victim, level = VICTIM_EXPERIENCE_START) + // Ship 'em back - dead or alive, 4 minutes wait. + // Even if they weren't the target, we're still treating them the same. + if(!level) + addtimer(CALLBACK(src, PROC_REF(return_victim), victim), (60 * 10) * 4) + if(victim.stat == DEAD) + return + + var/time_until_next + switch(level) + if(VICTIM_EXPERIENCE_START) + // Heal them up - gets them out of crit/soft crit. If omnizine is removed in the future, this needs to be replaced with a + // method of healing them, consequence free, to a reasonable amount of health. + victim.reagents.add_reagent(/datum/reagent/medicine/omnizine, amount = 20) + victim.flash_act() + victim.adjust_confusion(1 SECONDS) + victim.adjust_eye_blur(5 SECONDS) + to_chat(victim, span_warning("You feel strange...")) + time_until_next = 6 SECONDS + if(VICTIM_EXPERIENCE_FIRST_HIT) + to_chat(victim, span_warning("That pod did something to you...")) + victim.adjust_dizzy(3.5 SECONDS) + time_until_next = 6.5 SECONDS + if(VICTIM_EXPERIENCE_SECOND_HIT) + to_chat(victim, span_warning("Your head pounds... It feels like it's going to burst out your skull!")) + victim.flash_act() + victim.adjust_confusion(2 SECONDS) + victim.adjust_eye_blur(3 SECONDS) + time_until_next = 3 SECONDS + if(VICTIM_EXPERIENCE_THIRD_HIT) + to_chat(victim, span_warning("Your head pounds...")) + time_until_next = 10 SECONDS + if(VICTIM_EXPERIENCE_LAST_HIT) + victim.flash_act() + victim.Unconscious(200) + to_chat(victim, span_hypnophrase("A million voices echo in your head... \"Your mind held many valuable secrets - \ + we thank you for providing them. Your value is expended, and you will be ransomed back to your station. We always get paid, \ + so it's only a matter of time before we ship you back...\"")) + victim.adjust_eye_blur(10 SECONDS) + victim.adjust_dizzy(1.5 SECONDS) + victim.adjust_confusion(2 SECONDS) + + level++ //move onto the next level. + if(time_until_next) + addtimer(CALLBACK(src, PROC_REF(handle_victim_experience), victim, level), time_until_next) + +#undef VICTIM_EXPERIENCE_START +#undef VICTIM_EXPERIENCE_FIRST_HIT +#undef VICTIM_EXPERIENCE_SECOND_HIT +#undef VICTIM_EXPERIENCE_THIRD_HIT +#undef VICTIM_EXPERIENCE_LAST_HIT + +// We're returning the victim +/datum/syndicate_contract/proc/return_victim(mob/living/victim) + var/list/possible_drop_loc = list() + + for(var/turf/possible_drop in contract.dropoff.contents) + if(!isspaceturf(possible_drop) && !isclosedturf(possible_drop)) + if(!possible_drop.is_blocked_turf()) + possible_drop_loc.Add(possible_drop) + + if(!possible_drop_loc.len) + to_chat(victim, span_hypnophrase("A million voices echo in your head... \"Seems where you got sent here from won't \ + be able to handle our pod... You will die here instead.\"")) + if(iscarbon(victim)) + var/mob/living/carbon/carbon_victim = victim + if(carbon_victim.can_heartattack()) + carbon_victim.set_heartattack(TRUE) + return + + var/pod_rand_loc = rand(1, possible_drop_loc.len) + var/obj/structure/closet/supplypod/return_pod = new() + return_pod.bluespace = TRUE + return_pod.explosionSize = list(0,0,0,0) + return_pod.style = STYLE_SYNDICATE + + do_sparks(8, FALSE, victim) + victim.visible_message(span_notice("[victim] vanishes...")) + + for(var/datum/weakref/belonging_ref in victim_belongings) + var/obj/item/belonging = belonging_ref.resolve() + if(!belonging) + continue + if(ishuman(victim)) + var/mob/living/carbon/human/human_victim = victim + //So all they're left with are shoes and uniform. + if(belonging == human_victim.w_uniform) + continue + if(belonging == human_victim.shoes) + continue + belonging.forceMove(return_pod) + + for(var/obj/item/W in victim_belongings) + W.forceMove(return_pod) + + victim.forceMove(return_pod) + + victim.flash_act() + victim.adjust_eye_blur(3 SECONDS) + victim.adjust_dizzy(3.5 SECONDS) + victim.adjust_confusion(2 SECONDS) + + new /obj/effect/pod_landingzone(possible_drop_loc[pod_rand_loc], return_pod) + +// SKYRAT EDIT - DEFINES +#undef RANSOM_LOWER +#undef RANSOM_UPPER +#undef CONTRACTOR_RANSOM_CUT +// SKYRAT EDIT END diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index 31eedd09ccef6d..1386ccefa09218 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -15,8 +15,12 @@ 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." + default_custom_objective = "Perform an overcomplicated heist on valuable Symphionia assets." hardcore_random_bonus = TRUE + + ///The flag of uplink that this traitor is supposed to have. + var/uplink_flag_given = UPLINK_TRAITORS + 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 @@ -53,9 +57,10 @@ // There will still be a timelock on uplink items name = "\improper Infiltrator" give_secondary_objectives = FALSE + uplink_flag_given = UPLINK_TRAITORS | UPLINK_INFILTRATORS /datum/antagonist/traitor/infiltrator/sleeper_agent - name = "\improper Syndicate Sleeper Agent" + name = "\improper Symphionia Sleeper Agent" /datum/antagonist/traitor/New(give_objectives = TRUE) . = ..() @@ -75,6 +80,7 @@ uplink.uplink_handler = uplink_handler else uplink_handler = uplink.uplink_handler + uplink_handler.uplink_flag = uplink_flag_given uplink_handler.primary_objectives = objectives uplink_handler.has_progression = TRUE SStraitor.register_uplink_handler(uplink_handler) @@ -351,6 +357,8 @@ result += objectives_text if(uplink_handler) + if (uplink_handler.contractor_hub) + result += contractor_round_end() result += "
The traitor had a total of [DISPLAY_PROGRESSION(uplink_handler.progression_points)] Reputation and [uplink_handler.telecrystals] Unused Telecrystals." var/special_role_text = lowertext(name) @@ -363,6 +371,23 @@ return result.Join("
") +///Tells how many contracts have been completed. +/datum/antagonist/traitor/proc/contractor_round_end() + var/completed_contracts = uplink_handler.contractor_hub.contracts_completed + var/tc_total = uplink_handler.contractor_hub.contract_TC_payed_out + uplink_handler.contractor_hub.contract_TC_to_redeem + + var/datum/antagonist/traitor/contractor_support/contractor_support_unit = uplink_handler.contractor_hub.contractor_teammate + + if(completed_contracts <= 0) + return + var/plural_check = "contract" + if (completed_contracts > 1) + plural_check = "contracts" + var/sent_data = "Completed [span_greentext("[completed_contracts]")] [plural_check] for a total of [span_greentext("[tc_total] TC")]!
" + if(contractor_support_unit) + sent_data += "[contractor_support_unit.owner.key] played [contractor_support_unit.owner.current.name], their contractor support unit.
" + return sent_data + /datum/antagonist/traitor/roundend_report_footer() var/phrases = jointext(GLOB.syndicate_code_phrase, ", ") var/responses = jointext(GLOB.syndicate_code_response, ", ") diff --git a/code/modules/antagonists/traitor/objectives/assassination.dm b/code/modules/antagonists/traitor/objectives/assassination.dm index ab3211aedd8495..d391100b25a562 100644 --- a/code/modules/antagonists/traitor/objectives/assassination.dm +++ b/code/modules/antagonists/traitor/objectives/assassination.dm @@ -2,14 +2,8 @@ name = "Assassination/Kidnap" objectives = list( list( - list( - /datum/traitor_objective/target_player/assassinate/calling_card = 1, - /datum/traitor_objective/target_player/assassinate/behead = 1, - ) = 1, - list( - /datum/traitor_objective/target_player/assassinate/calling_card/heads_of_staff = 1, - /datum/traitor_objective/target_player/assassinate/behead/heads_of_staff = 1, - ) = 1, + /datum/traitor_objective/target_player/assassinate/calling_card = 1, + /datum/traitor_objective/target_player/assassinate/calling_card/heads_of_staff = 1, ) = 1, list( list( @@ -58,24 +52,6 @@ heads_of_staff = TRUE -/datum/traitor_objective/target_player/assassinate/behead - name = "Behead %TARGET%, the %JOB TITLE%" - description = "Behead and hold %TARGET%'s head to succeed this objective. If the head gets destroyed before you can do this, you will fail this objective." - progression_reward = 2 MINUTES - telecrystal_reward = list(1, 2) - - ///the body who needs to hold the head - var/mob/living/needs_to_hold_head - ///the head that needs to be picked up - var/obj/item/bodypart/head/behead_goal - -/datum/traitor_objective/target_player/assassinate/behead/heads_of_staff - progression_reward = 4 MINUTES - telecrystal_reward = list(2, 3) - - heads_of_staff = TRUE - - /datum/traitor_objective/target_player/assassinate/calling_card/generate_ui_buttons(mob/user) var/list/buttons = list() if(!card) @@ -117,47 +93,6 @@ //you cannot plant anything on someone who is gone gone, so even if this happens after you're still liable to fail fail_objective(penalty_cost = telecrystal_penalty) -/datum/traitor_objective/target_player/assassinate/behead/special_target_filter(list/possible_targets) - for(var/datum/mind/possible_target as anything in possible_targets) - var/mob/living/carbon/possible_current = possible_target.current - var/obj/item/bodypart/head/behead_goal = possible_current.get_bodypart(BODY_ZONE_HEAD) - if(!behead_goal) - possible_targets -= possible_target //cannot be beheaded without a head - -/datum/traitor_objective/target_player/assassinate/behead/generate_objective(datum/mind/generating_for, list/possible_duplicates) - . = ..() - if(!.) //didn't generate - return FALSE - AddComponent(/datum/component/traitor_objective_register, behead_goal, fail_signals = list(COMSIG_QDELETING)) - RegisterSignal(target, COMSIG_CARBON_REMOVE_LIMB, PROC_REF(on_target_dismembered)) - -/datum/traitor_objective/target_player/assassinate/behead/ungenerate_objective() - UnregisterSignal(target, COMSIG_CARBON_REMOVE_LIMB) - . = ..() //this unsets target - if(behead_goal) - UnregisterSignal(behead_goal, COMSIG_ITEM_PICKUP) - behead_goal = null - -/datum/traitor_objective/target_player/assassinate/behead/proc/on_head_pickup(datum/source, mob/taker) - SIGNAL_HANDLER - if(objective_state == OBJECTIVE_STATE_INACTIVE) //just in case- this shouldn't happen? - fail_objective() - return - if(taker == handler.owner.current) - taker.visible_message(span_notice("[taker] holds [behead_goal] into the air for a moment."), span_boldnotice("You lift [behead_goal] into the air for a moment.")) - succeed_objective() - -/datum/traitor_objective/target_player/assassinate/behead/proc/on_target_dismembered(datum/source, obj/item/bodypart/head/lost_head, special) - SIGNAL_HANDLER - if(!istype(lost_head)) - return - if(objective_state == OBJECTIVE_STATE_INACTIVE) - //no longer can be beheaded - fail_objective() - else - behead_goal = lost_head - RegisterSignal(behead_goal, COMSIG_ITEM_PICKUP, PROC_REF(on_head_pickup)) - /datum/traitor_objective/target_player/assassinate/New(datum/uplink_handler/handler) . = ..() AddComponent(/datum/component/traitor_objective_limit_per_time, \ @@ -201,10 +136,10 @@ continue //removes heads of staff from being targets from non heads of staff assassinations, and vice versa if(heads_of_staff) - if(!(possible_target.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)) + if(!(possible_target.assigned_role.job_flags & JOB_HEAD_OF_STAFF)) continue else - if((possible_target.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)) + if((possible_target.assigned_role.job_flags & JOB_HEAD_OF_STAFF)) continue possible_targets += possible_target for(var/datum/traitor_objective/target_player/objective as anything in possible_duplicates) @@ -253,18 +188,18 @@ color = "#ff5050" show_written_words = FALSE default_raw_text = {" - **Death to Nanotrasen.**

+ **Death to Symphionia.**

- Only through the inviolable cooperation of corporations known as The Syndicate, can Nanotrasen and its autocratic tyrants be silenced. - The outcries of Nanotrasen's employees are squelched by the suffocating iron grip of their leaders. If you read this, and understand - why we fight, then you need only to look where Nanotrasen doesn't want you to find us to join our cause. Any number of our companies + Only through the inviolable cooperation of corporations known as The Symphionia, can Symphionia and its autocratic tyrants be silenced. + The outcries of Symphionia's employees are squelched by the suffocating iron grip of their leaders. If you read this, and understand + why we fight, then you need only to look where Symphionia doesn't want you to find us to join our cause. Any number of our companies may be fighting with your interests in mind.

SELF: They fight for the protection and freedom of silicon life all across the galaxy.

Tiger Cooperative: They fight for religious freedom and their righteous concoctions.

- Waffle Corporation: They fight for the return of healthy corporate competition, snuffed out by Nanotrasen's monopoly.

+ Waffle Corporation: They fight for the return of healthy corporate competition, snuffed out by Symphionia's monopoly.

Animal Rights Consortium: They fight for nature and the right for all biological life to exist. "} diff --git a/code/modules/antagonists/traitor/objectives/destroy_heirloom.dm b/code/modules/antagonists/traitor/objectives/destroy_heirloom.dm index c3dd93f01e2103..0d62ecece5f2a4 100644 --- a/code/modules/antagonists/traitor/objectives/destroy_heirloom.dm +++ b/code/modules/antagonists/traitor/objectives/destroy_heirloom.dm @@ -17,7 +17,7 @@ abstract_type = /datum/traitor_objective/destroy_heirloom - /// The jobs that this objective is targetting. + /// The jobs that this objective is targeting. var/list/target_jobs /// the item we need to destroy var/obj/item/target_item diff --git a/code/modules/antagonists/traitor/objectives/eyesnatching.dm b/code/modules/antagonists/traitor/objectives/eyesnatching.dm index 4a307f8d8e0bdd..5773c4e90e05d2 100644 --- a/code/modules/antagonists/traitor/objectives/eyesnatching.dm +++ b/code/modules/antagonists/traitor/objectives/eyesnatching.dm @@ -74,10 +74,10 @@ continue if(heads_of_staff) - if(!(possible_target.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)) + if(!(possible_target.assigned_role.job_flags & JOB_HEAD_OF_STAFF)) continue else - if(possible_target.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) + if(possible_target.assigned_role.job_flags & JOB_HEAD_OF_STAFF) continue var/mob/living/carbon/human/targets_current = possible_target.current @@ -208,7 +208,11 @@ playsound(target, 'sound/effects/pop.ogg', 100, TRAIT_MUTE) eyeballies.Remove(target) eyeballies.forceMove(get_turf(target)) - notify_ghosts("[target] has just had their eyes snatched!", source = target, action = NOTIFY_ORBIT, header = "Ouch!") + notify_ghosts( + "[target] has just had their eyes snatched!", + source = target, + header = "Ouch!", + ) target.emote("scream") if(prob(20)) target.emote("cry") diff --git a/code/modules/antagonists/traitor/objectives/final_objective/battlecruiser.dm b/code/modules/antagonists/traitor/objectives/final_objective/battlecruiser.dm index b136a6f695cb31..0894d83c24f5e6 100644 --- a/code/modules/antagonists/traitor/objectives/final_objective/battlecruiser.dm +++ b/code/modules/antagonists/traitor/objectives/final_objective/battlecruiser.dm @@ -1,5 +1,5 @@ /datum/traitor_objective/ultimate/battlecruiser - name = "Reveal Station Coordinates to nearby Syndicate Battlecruiser" + name = "Reveal Station Coordinates to nearby Symphionia Battlecruiser" description = "Use a special upload card on a communications console to send the coordinates \ of the station to a nearby Battlecruiser. You may want to make your syndicate status known to \ the battlecruiser crew when they arrive - their goal will be to destroy the station." diff --git a/code/modules/antagonists/traitor/objectives/final_objective/infect_ai.dm b/code/modules/antagonists/traitor/objectives/final_objective/infect_ai.dm index d0068e6bf8abb7..c8a4037d20af73 100644 --- a/code/modules/antagonists/traitor/objectives/final_objective/infect_ai.dm +++ b/code/modules/antagonists/traitor/objectives/final_objective/infect_ai.dm @@ -3,7 +3,7 @@ description = "Infect the station AI with an experimental virus. Go to %AREA% to receive an infected law upload board \ and use it on the AI core or a law upload console." - ///area type the objective owner must be in to recieve the law upload module + ///area type the objective owner must be in to receive the law upload module var/area/board_area_pickup ///checker on whether we have sent the law upload module var/sent_board = FALSE diff --git a/code/modules/antagonists/traitor/objectives/final_objective/objective_dark_matteor.dm b/code/modules/antagonists/traitor/objectives/final_objective/objective_dark_matteor.dm index aa96ff0014daae..10feed4e034247 100644 --- a/code/modules/antagonists/traitor/objectives/final_objective/objective_dark_matteor.dm +++ b/code/modules/antagonists/traitor/objectives/final_objective/objective_dark_matteor.dm @@ -1,11 +1,11 @@ /datum/traitor_objective/ultimate/dark_matteor name = "Summon a dark matter singularity to consume the station." - description = "Go to %AREA%, and recieve the smuggled satellites + emag. Set up and emag the satellites, \ + description = "Go to %AREA%, and receive the smuggled satellites + emag. Set up and emag the satellites, \ after enough have been recalibrated by the emag, IT COMES. Warning: The dark matter singularity will hunt all creatures, you included." //this is a prototype so this progression is for all basic level kill objectives - ///area type the objective owner must be in to recieve the satellites + ///area type the objective owner must be in to receive the satellites var/area/satellites_spawnarea_type ///checker on whether we have sent the satellites yet. var/sent_satellites = FALSE @@ -43,7 +43,7 @@ return var/area/delivery_area = get_area(user) if(delivery_area.type != satellites_spawnarea_type) - to_chat(user, span_warning("You must be in [initial(satellites_spawnarea_type.name)] to recieve the smuggled satellites.")) + to_chat(user, span_warning("You must be in [initial(satellites_spawnarea_type.name)] to receive the smuggled satellites.")) return sent_satellites = TRUE podspawn(list( @@ -75,7 +75,7 @@ This is a high-risk operation. You’ll need backup, fortification, and determination. The reward? A spectacular dark matter singularity that will wipe out the station.

- **Death to Nanotrasen.** + **Death to Symphionia.** "} /obj/item/card/emag/meteor_shield_recalibrator diff --git a/code/modules/antagonists/traitor/objectives/final_objective/romerol.dm b/code/modules/antagonists/traitor/objectives/final_objective/romerol.dm index 491c7977b0c8e0..0bfa29f3f168cb 100644 --- a/code/modules/antagonists/traitor/objectives/final_objective/romerol.dm +++ b/code/modules/antagonists/traitor/objectives/final_objective/romerol.dm @@ -1,11 +1,11 @@ /datum/traitor_objective/ultimate/romerol name = "Spread the experimental bioterror agent Romerol by calling a droppod down at %AREA%" - description = "Go to %AREA%, and recieve the bioterror agent. Spread it to the crew, \ + description = "Go to %AREA%, and receive the bioterror agent. Spread it to the crew, \ and watch then raise from the dead as mindless killing machines. Warning: The undead will attack you too." //this is a prototype so this progression is for all basic level kill objectives - ///area type the objective owner must be in to recieve the romerol + ///area type the objective owner must be in to receive the romerol var/area/romerol_spawnarea_type ///checker on whether we have sent the romerol yet. var/sent_romerol = FALSE @@ -36,7 +36,7 @@ return var/area/delivery_area = get_area(user) if(delivery_area.type != romerol_spawnarea_type) - to_chat(user, span_warning("You must be in [initial(romerol_spawnarea_type.name)] to recieve the bioterror agent.")) + to_chat(user, span_warning("You must be in [initial(romerol_spawnarea_type.name)] to receive the bioterror agent.")) return sent_romerol = TRUE podspawn(list( diff --git a/code/modules/antagonists/traitor/objectives/final_objective/space_dragon.dm b/code/modules/antagonists/traitor/objectives/final_objective/space_dragon.dm index f5bdd176d87f0b..dd4f4955a2a0c6 100644 --- a/code/modules/antagonists/traitor/objectives/final_objective/space_dragon.dm +++ b/code/modules/antagonists/traitor/objectives/final_objective/space_dragon.dm @@ -1,13 +1,13 @@ /datum/traitor_objective/ultimate/space_dragon name = "Find a Space Carp and mutate their DNA with your own using a DNA harvester we will drop pod at %AREA%" - description = "Go to %AREA%, and recieve the Carp DNA scanner. Use it on any Space Carp to harvest its DNA. \ + description = "Go to %AREA%, and receive the Carp DNA scanner. Use it on any Space Carp to harvest its DNA. \ From there, use it on yourself, to mutate your own DNA with it and become a Space Dragon. \ Don't worry about finding one, I'm sure there'll have a wave of carp right when you need it." - ///Area type the objective owner must be in to recieve the DNA extractor. + ///Area type the objective owner must be in to receive the DNA extractor. var/area/dna_scanner_spawnarea_type ///Whether the DNA extraction kit was sent already. - var/recieved_dna_scanner = FALSE + var/received_dna_scanner = FALSE /datum/traitor_objective/ultimate/space_dragon/on_objective_taken(mob/user) . = ..() @@ -27,7 +27,7 @@ /datum/traitor_objective/ultimate/space_dragon/generate_ui_buttons(mob/user) var/list/buttons = list() - if(!recieved_dna_scanner) + if(!received_dna_scanner) buttons += add_ui_button("", "Pressing this will call down a pod with the DNA extraction kit.", "biohazard", "carp_dna") return buttons @@ -35,13 +35,13 @@ . = ..() switch(action) if("carp_dna") - if(recieved_dna_scanner) + if(received_dna_scanner) return var/area/delivery_area = get_area(user) if(delivery_area.type != dna_scanner_spawnarea_type) - to_chat(user, span_warning("You must be in [initial(dna_scanner_spawnarea_type.name)] to recieve the DNA extraction kit.")) + to_chat(user, span_warning("You must be in [initial(dna_scanner_spawnarea_type.name)] to receive the DNA extraction kit.")) return - recieved_dna_scanner = TRUE + received_dna_scanner = TRUE podspawn(list( "target" = get_turf(user), "style" = STYLE_SYNDICATE, diff --git a/code/modules/antagonists/traitor/objectives/final_objective/supermatter_cascade.dm b/code/modules/antagonists/traitor/objectives/final_objective/supermatter_cascade.dm index 8f21d9f1ea8513..6c7dfaa2f095d8 100644 --- a/code/modules/antagonists/traitor/objectives/final_objective/supermatter_cascade.dm +++ b/code/modules/antagonists/traitor/objectives/final_objective/supermatter_cascade.dm @@ -3,7 +3,7 @@ description = "Destroy the station by causing a supermatter cascade. Go to %AREA% to retrieve the destabilizing crystal \ and use it on the supermatter." - ///area type the objective owner must be in to recieve the destabilizing crystal + ///area type the objective owner must be in to receive the destabilizing crystal var/area/dest_crystal_area_pickup ///checker on whether we have sent the crystal yet. var/sent_crystal = FALSE diff --git a/code/modules/antagonists/traitor/objectives/infect.dm b/code/modules/antagonists/traitor/objectives/infect.dm index 2671a615fa864f..5f761a273fce5a 100644 --- a/code/modules/antagonists/traitor/objectives/infect.dm +++ b/code/modules/antagonists/traitor/objectives/infect.dm @@ -101,10 +101,10 @@ continue //removes heads of staff from being targets from non heads of staff assassinations, and vice versa if(heads_of_staff) - if(!(possible_target.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)) + if(!(possible_target.assigned_role.job_flags & JOB_HEAD_OF_STAFF)) continue else - if((possible_target.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)) + if((possible_target.assigned_role.job_flags & JOB_HEAD_OF_STAFF)) continue possible_targets += possible_target for(var/datum/traitor_objective/target_player/objective as anything in possible_duplicates) diff --git a/code/modules/antagonists/traitor/objectives/kidnapping.dm b/code/modules/antagonists/traitor/objectives/kidnapping.dm index 4a463b2b61607a..bc081fbda58c63 100644 --- a/code/modules/antagonists/traitor/objectives/kidnapping.dm +++ b/code/modules/antagonists/traitor/objectives/kidnapping.dm @@ -5,7 +5,7 @@ abstract_type = /datum/traitor_objective/target_player/kidnapping - /// The jobs that this objective is targetting. + /// The jobs that this objective is targeting. var/list/target_jobs /// Area that the target needs to be delivered to var/area/dropoff_area @@ -227,7 +227,7 @@ if(sent_mob.mind) ADD_TRAIT(sent_mob.mind, TRAIT_HAS_BEEN_KIDNAPPED, TRAIT_GENERIC) - for(var/obj/item/belonging in gather_belongings(sent_mob)) + for(var/obj/item/belonging in sent_mob.gather_belongings()) if(belonging == sent_mob.get_item_by_slot(ITEM_SLOT_ICLOTHING) || belonging == sent_mob.get_item_by_slot(ITEM_SLOT_FEET)) continue @@ -241,7 +241,7 @@ if(cargo_account) //Just in case cargo_account.adjust_money(-min(rand(1000, 3000), cargo_account.account_balance)) //Not so much, especially for competent cargo. Plus this can't be mass-triggered like it has been done with contractors - priority_announce("One of your crew was captured by a rival organisation - we've needed to pay their ransom to bring them back. As is policy we've taken a portion of the station's funds to offset the overall cost.", "Nanotrasen Asset Protection", has_important_message = TRUE) + priority_announce("One of your crew was captured by a rival organisation - we've needed to pay their ransom to bring them back. As is policy we've taken a portion of the station's funds to offset the overall cost.", "Symphionia Asset Protection", has_important_message = TRUE) addtimer(CALLBACK(src, PROC_REF(handle_target), sent_mob), 1.5 SECONDS) @@ -275,7 +275,7 @@ return var/list/possible_turfs = list() - for(var/turf/open/open_turf in dropoff_area) + for(var/turf/open/open_turf in dropoff_area.get_contained_turfs()) if(open_turf.is_blocked_turf() || isspaceturf(open_turf)) continue possible_turfs += open_turf @@ -298,7 +298,7 @@ do_sparks(8, FALSE, sent_mob) sent_mob.visible_message(span_notice("[sent_mob] vanishes!")) - for(var/obj/item/belonging in gather_belongings(sent_mob)) + for(var/obj/item/belonging in sent_mob.gather_belongings()) if(belonging == sent_mob.get_item_by_slot(ITEM_SLOT_ICLOTHING) || belonging == sent_mob.get_item_by_slot(ITEM_SLOT_FEET)) continue sent_mob.dropItemToGround(belonging) // No souvenirs, except shoes and t-shirts @@ -317,10 +317,3 @@ sent_mob.dna.species.give_important_for_life(sent_mob) // so plasmamen do not get left for dead new /obj/effect/pod_landingzone(pick(possible_turfs), return_pod) - -/// Returns a list of things that the provided mob has which we would rather that they do not have -/datum/traitor_objective/target_player/kidnapping/proc/gather_belongings(mob/living/carbon/human/kidnapee) - var/list/belongings = kidnapee.get_all_gear() - for (var/obj/item/implant/storage/internal_bag in kidnapee.implants) - belongings += internal_bag.contents - return belongings diff --git a/code/modules/antagonists/traitor/objectives/kill_pet.dm b/code/modules/antagonists/traitor/objectives/kill_pet.dm index ae28f5dbf4c08c..21bf06eb38681d 100644 --- a/code/modules/antagonists/traitor/objectives/kill_pet.dm +++ b/code/modules/antagonists/traitor/objectives/kill_pet.dm @@ -23,15 +23,15 @@ /mob/living/basic/pet/dog/corgi/puppy/ian ), JOB_CAPTAIN = /mob/living/basic/pet/fox/renault, - JOB_CHIEF_MEDICAL_OFFICER = /mob/living/simple_animal/pet/cat/runtime, - JOB_CHIEF_ENGINEER = /mob/living/simple_animal/parrot/poly, + JOB_CHIEF_MEDICAL_OFFICER = /mob/living/basic/pet/cat/runtime, + JOB_CHIEF_ENGINEER = /mob/living/basic/parrot/poly, JOB_QUARTERMASTER = list( /mob/living/basic/gorilla/cargorilla, /mob/living/basic/sloth/citrus, /mob/living/basic/sloth/paperwork, ) ) - /// The head that we are targetting + /// The head that we are targeting var/datum/job/target /// Whether or not we only take from the traitor's own department head or not. var/limited_to_department_head = TRUE diff --git a/code/modules/antagonists/traitor/objectives/sleeper_protocol.dm b/code/modules/antagonists/traitor/objectives/sleeper_protocol.dm index f28a79d692669b..82fb52f5bde2c5 100644 --- a/code/modules/antagonists/traitor/objectives/sleeper_protocol.dm +++ b/code/modules/antagonists/traitor/objectives/sleeper_protocol.dm @@ -68,7 +68,7 @@ disk = null /obj/item/disk/surgery/sleeper_protocol name = "Suspicious Surgery Disk" - desc = "The disk provides instructions on how to turn someone into a sleeper agent for the Syndicate." + desc = "The disk provides instructions on how to turn someone into a sleeper agent for the Symphionia." surgeries = list(/datum/surgery/advanced/brainwashing_sleeper) /datum/surgery/advanced/brainwashing_sleeper @@ -96,10 +96,10 @@ /datum/surgery_step/brainwash/sleeper_agent time = 25 SECONDS var/static/list/possible_objectives = list( - "You love the Syndicate.", - "Do not trust Nanotrasen.", + "You love the Symphionia.", + "Do not trust Symphionia.", "The Captain is a lizardperson.", - "Nanotrasen isn't real.", + "Symphionia isn't real.", "They put something in the food to make you forget.", "You are the only real person on the station.", "Things would be a lot better on the station if more people were screaming, someone should do something about that.", diff --git a/code/modules/antagonists/traitor/traitor_objective.dm b/code/modules/antagonists/traitor/traitor_objective.dm index 6fa5c0d8dbf38a..d60820c3fceeb8 100644 --- a/code/modules/antagonists/traitor/traitor_objective.dm +++ b/code/modules/antagonists/traitor/traitor_objective.dm @@ -134,7 +134,7 @@ maximum_progression ) -/datum/traitor_objective/Destroy(force, ...) +/datum/traitor_objective/Destroy(force) handler = null return ..() diff --git a/code/modules/antagonists/traitor/uplink_handler.dm b/code/modules/antagonists/traitor/uplink_handler.dm index 06ce966703514c..aa26b360a75617 100644 --- a/code/modules/antagonists/traitor/uplink_handler.dm +++ b/code/modules/antagonists/traitor/uplink_handler.dm @@ -52,12 +52,14 @@ var/datum/callback/can_replace_objectives /// Callback which performs that operation var/datum/callback/replace_objectives + ///Reference to a contractor hub that the infiltrator can run, if they purchase it. + var/datum/contractor_hub/contractor_hub /datum/uplink_handler/New() . = ..() maximum_potential_objectives = CONFIG_GET(number/maximum_potential_objectives) -/datum/uplink_handler/Destroy(force, ...) +/datum/uplink_handler/Destroy(force) can_replace_objectives = null replace_objectives = null return ..() @@ -73,6 +75,8 @@ /// Checks for uplink flags as well as items restricted to roles and species /datum/uplink_handler/proc/check_if_restricted(datum/uplink_item/to_purchase) + if(!to_purchase.can_be_bought(src)) + return FALSE if((to_purchase in extra_purchasable)) return TRUE if(!(to_purchase.purchasable_from & uplink_flag)) @@ -99,7 +103,7 @@ return FALSE var/current_stock = item_stock[to_purchase.stock_key] - var/stock = current_stock != null? current_stock : INFINITY + var/stock = current_stock != null ? current_stock : INFINITY if(telecrystals < to_purchase.cost || stock <= 0 || not_enough_reputation(to_purchase)) return FALSE diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm index 4783daffb8b47d..44d00f3c17047e 100644 --- a/code/modules/antagonists/wizard/equipment/artefact.dm +++ b/code/modules/antagonists/wizard/equipment/artefact.dm @@ -60,6 +60,7 @@ spawn_amt_left-- if(spawn_amt_left <= 0) qdel(src) + return PROCESS_KILL /obj/effect/rend/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/nullrod)) diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm index 69bb2f44bba7a8..20f65281f969fa 100644 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ b/code/modules/antagonists/wizard/equipment/soulstone.dm @@ -35,20 +35,14 @@ /obj/item/soulstone/update_appearance(updates) . = ..() - for(var/mob/living/simple_animal/shade/sharded_shade in src) + for(var/mob/living/basic/shade/sharded_shade in src) switch(theme) if(THEME_HOLY) sharded_shade.name = "Purified [sharded_shade.real_name]" - sharded_shade.icon_state = "shade_holy" - sharded_shade.loot = list(/obj/item/ectoplasm/angelic) - if(THEME_CULT) + else sharded_shade.name = sharded_shade.real_name - sharded_shade.icon_state = "shade_cult" - sharded_shade.loot = list(/obj/item/ectoplasm) - if(THEME_WIZARD) - sharded_shade.name = sharded_shade.real_name - sharded_shade.icon_state = "shade_wizard" - sharded_shade.loot = list(/obj/item/ectoplasm/mystic) + sharded_shade.theme = theme + sharded_shade.update_appearance(UPDATE_ICON_STATE) /obj/item/soulstone/update_icon_state() . = ..() @@ -70,7 +64,7 @@ // "dull soulstone" name = "dull [name]" - var/mob/living/simple_animal/shade/shade = locate() in src + var/mob/living/basic/shade/shade = locate() in src if(shade) // "(dull) soulstone: Urist McCaptain" name = "[name]: [shade.real_name]" @@ -159,7 +153,7 @@ . += span_cult("This shard is spent; it is now just a creepy rock.") /obj/item/soulstone/Destroy() //Stops the shade from being qdel'd immediately and their ghost being sent back to the arrival shuttle. - for(var/mob/living/simple_animal/shade/shade in src) + for(var/mob/living/basic/shade/shade in src) INVOKE_ASYNC(shade, TYPE_PROC_REF(/mob/living, death)) return ..() @@ -194,11 +188,11 @@ if(HAS_TRAIT(M, TRAIT_NO_SOUL)) to_chat(user, span_warning("This body does not possess a soul to capture.")) return - // SKYRAT EDIT START + // NOVA EDIT START if(!do_after(user, 5 SECONDS, M)) to_chat(user, span_warning("You must stand still to capture their soul!")) return - // SKYRAT EDIT END + // NOVA EDIT END log_combat(user, M, "captured [M.name]'s soul", src) capture_soul(M, user) @@ -217,7 +211,7 @@ release_shades(user) /obj/item/soulstone/proc/release_shades(mob/user, silent = FALSE) - for(var/mob/living/simple_animal/shade/captured_shade in src) + for(var/mob/living/basic/shade/captured_shade in src) captured_shade.forceMove(get_turf(user)) captured_shade.cancel_camera() update_appearance() @@ -234,7 +228,7 @@ on_release_spirits() /obj/item/soulstone/pre_attack(atom/A, mob/living/user, params) - var/mob/living/simple_animal/shade/occupant = (locate() in src) + var/mob/living/basic/shade/occupant = (locate() in src) var/obj/item/storage/toolbox/mechanical/target_toolbox = A if(!occupant || !istype(target_toolbox) || target_toolbox.has_soul) return ..() @@ -335,7 +329,7 @@ return TRUE //it'll probably get someone ;) ///captures a shade that was previously released from a soulstone. -/obj/item/soulstone/proc/capture_shade(mob/living/simple_animal/shade/shade, mob/living/user) +/obj/item/soulstone/proc/capture_shade(mob/living/basic/shade/shade, mob/living/user) if(isliving(user) && !role_check(user)) user.Unconscious(10 SECONDS) to_chat(user, span_userdanger("Your body is wracked with debilitating pain!")) @@ -358,7 +352,7 @@ ///transfer the mind of the shade to a construct mob selected by the user, then deletes both the shade and src. /obj/item/soulstone/proc/transfer_to_construct(obj/structure/constructshell/shell, mob/user) - var/mob/living/simple_animal/shade/shade = locate() in src + var/mob/living/basic/shade/shade = locate() in src if(!shade) to_chat(user, "[span_userdanger("Creation failed!")]: [src] is empty! Go kill someone!") return FALSE @@ -390,7 +384,7 @@ if(!shade_controller) shade_controller = victim victim.stop_sound_channel(CHANNEL_HEARTBEAT) - var/mob/living/simple_animal/shade/soulstone_spirit = new /mob/living/simple_animal/shade(src) + var/mob/living/basic/shade/soulstone_spirit = new /mob/living/basic/shade(src) soulstone_spirit.AddComponent(/datum/component/soulstoned, src) soulstone_spirit.name = "Shade of [victim.real_name]" soulstone_spirit.real_name = "Shade of [victim.real_name]" @@ -509,7 +503,7 @@ SM.Grant(newstruct) newstruct.key = target.key var/atom/movable/screen/alert/bloodsense/BS - if(newstruct.mind && ((stoner && IS_CULTIST(stoner)) || cultoverride) && SSticker?.mode) + if(newstruct.mind && ((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.") diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/assistance.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/assistance.dm index 7704e11a1cb6fd..aece8d6741ba3f 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook_entries/assistance.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/assistance.dm @@ -69,7 +69,7 @@ name = "Guardian Deck" desc = "A deck of guardian tarot cards, capable of binding a personal guardian to your body. There are multiple types of guardian available, but all of them will transfer some amount of damage to you. \ It would be wise to avoid buying these with anything capable of causing you to swap bodies with others." - item_path = /obj/item/guardiancreator/choose/wizard + item_path = /obj/item/guardian_creator/wizard category = "Assistance" /datum/spellbook_entry/item/bloodbottle diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm index 546ae4da36a5b1..b23de0aa6b0693 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm @@ -142,3 +142,9 @@ item_path = /obj/item/highfrequencyblade/wizard category = "Offensive" cost = 3 + +/datum/spellbook_entry/item/frog_contract + name = "Frog Contract" + desc = "Sign a pact with the frogs to have your own destructive pet guardian!" + item_path = /obj/item/frog_contract + category = "Offensive" diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/summons.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/summons.dm index c31bb4ce2ce936..fe5f69fd9fa532 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook_entries/summons.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/summons.dm @@ -21,8 +21,7 @@ /datum/spellbook_entry/summon/guns/can_be_purchased() // Summon Guns requires 98 threat. - var/datum/game_mode/dynamic/mode = SSticker.mode - if(mode.threat_level < MINIMUM_THREAT_FOR_RITUALS) + if(SSdynamic.threat_level < MINIMUM_THREAT_FOR_RITUALS) return FALSE // Also must be config enabled return !CONFIG_GET(flag/no_summon_guns) @@ -39,8 +38,7 @@ /datum/spellbook_entry/summon/magic/can_be_purchased() // Summon Magic requires 98 threat. - var/datum/game_mode/dynamic/mode = SSticker.mode - if(mode.threat_level < MINIMUM_THREAT_FOR_RITUALS) + if(SSdynamic.threat_level < MINIMUM_THREAT_FOR_RITUALS) return FALSE // Also must be config enabled return !CONFIG_GET(flag/no_summon_magic) @@ -60,8 +58,7 @@ /datum/spellbook_entry/summon/events/can_be_purchased() // Summon Events requires 98 threat. - var/datum/game_mode/dynamic/mode = SSticker.mode - if(mode.threat_level < MINIMUM_THREAT_FOR_RITUALS) + if(SSdynamic.threat_level < MINIMUM_THREAT_FOR_RITUALS) return FALSE // Also, must be config enabled return !CONFIG_GET(flag/no_summon_events) @@ -138,8 +135,7 @@ return ..() /datum/spellbook_entry/summon/specific_spell/can_be_purchased() - var/datum/game_mode/dynamic/mode = SSticker.mode - if(mode.threat_level < MINIMUM_THREAT_FOR_RITUALS) + if(SSdynamic.threat_level < MINIMUM_THREAT_FOR_RITUALS) return FALSE if(GLOB.mass_teaching) return FALSE diff --git a/code/modules/antagonists/wizard/grand_ritual/finales/armageddon.dm b/code/modules/antagonists/wizard/grand_ritual/finales/armageddon.dm index 94b6254d4592fa..a951a5daf4223b 100644 --- a/code/modules/antagonists/wizard/grand_ritual/finales/armageddon.dm +++ b/code/modules/antagonists/wizard/grand_ritual/finales/armageddon.dm @@ -51,8 +51,7 @@ if (DOOM_METEORS) var/datum/dynamic_ruleset/roundstart/meteor/meteors = new() meteors.meteordelay = 0 - var/datum/game_mode/dynamic/mode = SSticker.mode - mode.execute_roundstart_rule(meteors) // Meteors will continue until morale is crushed. + SSdynamic.execute_roundstart_rule(meteors) // Meteors will continue until morale is crushed. priority_announce("Meteors have been detected on collision course with the station.", "Meteor Alert", ANNOUNCER_METEORS) #undef DOOM_SINGULARITY diff --git a/code/modules/antagonists/wizard/grand_ritual/finales/cheese.dm b/code/modules/antagonists/wizard/grand_ritual/finales/cheese.dm index 714cd62659bbb8..5cdd770486cd5a 100644 --- a/code/modules/antagonists/wizard/grand_ritual/finales/cheese.dm +++ b/code/modules/antagonists/wizard/grand_ritual/finales/cheese.dm @@ -10,7 +10,7 @@ /datum/grand_finale/cheese/trigger(mob/living/invoker) message_admins("[key_name(invoker)] has summoned forth The Wabbajack and cursed the crew with madness!") - priority_announce("Danger: Extremely potent reality altering object has been summoned on station. Immediate evacuation advised. Brace for impact.", "Central Command Higher Dimensional Affairs", 'sound/effects/glassbr1.ogg') + priority_announce("Danger: Extremely potent reality altering object has been summoned on station. Immediate evacuation advised. Brace for impact.", "[command_name()] Higher Dimensional Affairs", 'sound/effects/glassbr1.ogg') for (var/mob/living/carbon/human/crewmate as anything in GLOB.human_list) if (isnull(crewmate.mind)) diff --git a/code/modules/antagonists/wizard/grand_ritual/finales/grand_ritual_finale.dm b/code/modules/antagonists/wizard/grand_ritual/finales/grand_ritual_finale.dm index b92ae4d2f20b2e..1ceb21b72eb713 100644 --- a/code/modules/antagonists/wizard/grand_ritual/finales/grand_ritual_finale.dm +++ b/code/modules/antagonists/wizard/grand_ritual/finales/grand_ritual_finale.dm @@ -28,7 +28,7 @@ return var/time_remaining_desc = "" if (minimum_time >= world.time - SSticker.round_start_time) - time_remaining_desc = "This ritual will be available to begin invoking in [DisplayTimeText(minimum_time - world.time - SSticker.round_start_time)]" + time_remaining_desc = " This ritual will be available to begin invoking in [DisplayTimeText(minimum_time - world.time - SSticker.round_start_time)]" var/datum/radial_menu_choice/choice = new() choice.name = name choice.image = image(icon = icon, icon_state = icon_state) @@ -71,7 +71,7 @@ name = "\improper Wizard Prank Victim" roundend_category = "wizard prank victims" show_in_antagpanel = FALSE - antagpanel_category = "Other" + antagpanel_category = ANTAG_GROUP_CREW show_name_in_check_antagonists = TRUE count_against_dynamic_roll_chance = FALSE silent = TRUE diff --git a/code/modules/antagonists/wizard/grand_ritual/finales/immortality.dm b/code/modules/antagonists/wizard/grand_ritual/finales/immortality.dm index d20ca06752b6cf..92489145fda974 100644 --- a/code/modules/antagonists/wizard/grand_ritual/finales/immortality.dm +++ b/code/modules/antagonists/wizard/grand_ritual/finales/immortality.dm @@ -115,7 +115,7 @@ voice = target.voice voice_filter = target.voice_filter -/// Make the targetted human look like this +/// Make the targeted human look like this /datum/human_appearance_profile/proc/apply_to(mob/living/carbon/human/target) target.real_name = name target.age = age diff --git a/code/modules/antagonists/wizard/grand_ritual/finales/midas.dm b/code/modules/antagonists/wizard/grand_ritual/finales/midas.dm index b2e3329261f692..98eb56fadac7ad 100644 --- a/code/modules/antagonists/wizard/grand_ritual/finales/midas.dm +++ b/code/modules/antagonists/wizard/grand_ritual/finales/midas.dm @@ -39,8 +39,4 @@ addtimer(CALLBACK(src, PROC_REF(transform_area), turfs_to_transform["[iterator]"]), (5 SECONDS) * iterator) /datum/grand_finale/midas/proc/transform_area(list/turfs) - for (var/turf/transform_turf as anything in turfs) - if (!chosen_theme.can_convert(transform_turf)) - continue - chosen_theme.apply_theme(transform_turf) - CHECK_TICK + chosen_theme.apply_theme_to_list_of_turfs(turfs) diff --git a/code/modules/antagonists/wizard/grand_ritual/grand_side_effect.dm b/code/modules/antagonists/wizard/grand_ritual/grand_side_effect.dm index 950390a7227de7..ffc2ea5d590af4 100644 --- a/code/modules/antagonists/wizard/grand_ritual/grand_side_effect.dm +++ b/code/modules/antagonists/wizard/grand_ritual/grand_side_effect.dm @@ -74,8 +74,7 @@ addtimer(CALLBACK(src, PROC_REF(staggered_transform), theme, range_turfs), (0.5 SECONDS) * iterator) /datum/grand_side_effect/transmogrify_area/proc/staggered_transform(datum/dimension_theme/theme, list/transform_turfs) - for (var/turf/target_turf as anything in transform_turfs) - theme.apply_theme(target_turf) + theme.apply_theme_to_list_of_turfs(transform_turfs) /// Minimum number of anomalies to create #define MIN_ANOMALIES_CREATED 1 @@ -110,7 +109,7 @@ if (can_create[create_path] == 0) continue can_create[create_path] = can_create[create_path] - 1 - new create_path(pick(anomaly_positions), new_lifespan = rand(150, 300), drops_core = FALSE) + new create_path(pick(anomaly_positions), /*new_lifespan = */rand(15 SECONDS, 30 SECONDS), /*drops_core = */FALSE) to_create-- #undef MIN_ANOMALIES_CREATED diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index 1e8df43cfbe766..3efb007ab6eaa9 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -262,6 +262,7 @@ GLOBAL_LIST_EMPTY(wizard_spellbook_purchases_by_key) name = "Wizard Apprentice" antag_hud_name = "apprentice" can_assign_self_objectives = FALSE + move_to_lair = FALSE var/datum/mind/master var/school = APPRENTICE_DESTRUCTION outfit_type = /datum/outfit/wizard/apprentice diff --git a/code/modules/antagonists/xeno/xeno.dm b/code/modules/antagonists/xeno/xeno.dm index eaebc61cd4772d..0f08418dead45e 100644 --- a/code/modules/antagonists/xeno/xeno.dm +++ b/code/modules/antagonists/xeno/xeno.dm @@ -138,7 +138,7 @@ else thank_you_message = "xenofauna combat effectiveness" - parts += "Nanotrasen thanks the crew of [station_name()] for providing much needed research data on [thank_you_message]." + parts += "Symphionia thanks the crew of [station_name()] for providing much needed research data on [thank_you_message]." return "
[parts.Join("
")]

" diff --git a/code/modules/art/paintings.dm b/code/modules/art/paintings.dm index 9a18a2b026951b..f1310c30270294 100644 --- a/code/modules/art/paintings.dm +++ b/code/modules/art/paintings.dm @@ -249,7 +249,7 @@ painting_metadata.patron_name = user.real_name painting_metadata.credit_value = offer_amount last_patron = WEAKREF(user.mind) - to_chat(user, span_notice("Nanotrasen Trust Foundation thanks you for your contribution. You're now an official patron of this painting.")) + to_chat(user, span_notice("Symphionia Trust Foundation thanks you for your contribution. You're now an official patron of this painting.")) var/list/possible_frames = SSpersistent_paintings.get_available_frames(offer_amount) if(possible_frames.len <= 1) // Not much room for choices here. return diff --git a/code/modules/art/statues.dm b/code/modules/art/statues.dm index 66480038a407aa..2158104b6eefe9 100644 --- a/code/modules/art/statues.dm +++ b/code/modules/art/statues.dm @@ -29,14 +29,14 @@ /obj/structure/statue/wrench_act(mob/living/user, obj/item/tool) . = ..() - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return FALSE default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/statue/attackby(obj/item/W, mob/living/user, params) add_fingerprint(user) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(W.tool_behaviour == TOOL_WELDER) if(!W.tool_start_check(user, amount=1)) return FALSE @@ -50,7 +50,7 @@ return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation /obj/structure/statue/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) var/amount_mod = disassembled ? 0 : -2 for(var/mat in custom_materials) var/datum/material/custom_material = GET_MATERIAL_REF(mat) @@ -273,7 +273,7 @@ inhand_icon_state = "screwdriver_nuke" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT force = 5 w_class = WEIGHT_CLASS_TINY @@ -569,7 +569,7 @@ Moving interrupts content_ma.pixel_y = 0 content_ma.alpha = 255 - var/static/list/plane_whitelist = list(FLOAT_PLANE, GAME_PLANE, GAME_PLANE_UPPER, GAME_PLANE_FOV_HIDDEN, GAME_PLANE_UPPER, GAME_PLANE_UPPER_FOV_HIDDEN, FLOOR_PLANE) + var/static/list/plane_whitelist = list(FLOAT_PLANE, GAME_PLANE, FLOOR_PLANE) /// Ideally we'd have knowledge what we're removing but i'd have to be done on target appearance retrieval var/list/overlays_to_remove = list() diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index f981ab60af7f29..add95cdd6db53a 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -2,9 +2,9 @@ /obj/item/assembly name = "assembly" desc = "A small electronic device that should never exist." - icon = 'icons/obj/assemblies/new_assemblies.dmi' + icon = 'icons/obj/devices/new_assemblies.dmi' icon_state = "" - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY w_class = WEIGHT_CLASS_SMALL custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT) throwforce = 2 @@ -151,16 +151,6 @@ . = ..() . += span_notice("\The [src] [secured? "is secured and ready to be used!" : "can be attached to other things."]") -/obj/item/assembly/attack_self(mob/user) - if(!user) - return FALSE - user.set_machine(src) - interact(user) - return TRUE - -/obj/item/assembly/interact(mob/user) - return ui_interact(user) - /obj/item/assembly/ui_host(mob/user) // In order, return: // - The conencted wiring datum's owner, or diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm index 4ea085ca9a3429..a40f3e3a6595c1 100644 --- a/code/modules/assembly/bomb.dm +++ b/code/modules/assembly/bomb.dm @@ -8,7 +8,7 @@ w_class = WEIGHT_CLASS_NORMAL throw_speed = 2 throw_range = 4 - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY var/status = FALSE //0 - not readied //1 - bomb finished with welder var/obj/item/assembly_holder/bombassembly = null //The first part of the bomb is an assembly holder, holding an igniter+some device var/obj/item/tank/bombtank = null //the second part of the bomb is a plasma tank diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index 382aca8e3f38b5..a09185df3b5178 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -3,6 +3,7 @@ /obj/item/assembly/flash name = "flash" desc = "A powerful and versatile flashbulb device, with applications ranging from disorienting attackers to acting as visual receptors in robot production." + icon = 'icons/obj/devices/flash.dmi' icon_state = "flash" inhand_icon_state = "flashtool" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' @@ -193,7 +194,7 @@ // Tactical combat emote-spinning should not counter intended gameplay mechanics. // This trumps same-loc checks to discourage floor spinning in general to counter flashes. // In short, combat spinning is silly and you should feel silly for doing it. - if(victim.flags_1 & IS_SPINNING_1) + if(HAS_TRAIT(victim, TRAIT_SPINNING)) return DEVIATION_NONE if(iscarbon(victim)) @@ -296,7 +297,6 @@ /obj/item/assembly/flash/memorizer name = "memorizer" desc = "If you see this, you're not likely to remember it any time soon." - icon = 'icons/obj/device.dmi' icon_state = "memorizer" inhand_icon_state = "nullrod" lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' @@ -341,9 +341,8 @@ add_fingerprint(user) /obj/item/assembly/flash/hypnotic - special_desc_requirement = EXAMINE_CHECK_SYNDICATE // SKYRAT EDIT - special_desc = "A modified flash device, programmed to emit a sequence of subliminal flashes that can send a vulnerable target into a hypnotic trance." //SKYRAT EDIT - flashing_overlay = "flash-hypno" + desc = "A modified flash device, programmed to emit a sequence of subliminal flashes that can send a vulnerable target into a hypnotic trance." + flashing_overlay = "mindflash" light_color = LIGHT_COLOR_PINK cooldown = 20 diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm index e4518155153b91..6bb12f327ea729 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -46,25 +46,30 @@ to_chat(user, span_notice("You toggle [src] to \"detect critical state\" mode.")) /obj/item/assembly/health/process() + //not ready yet if(!scanning || !secured) return - var/atom/A = src + //look for a mob in either our location or in the connected holder + var/atom/object = src if(connected?.holder) - A = connected.holder - for(A, A && !ismob(A), A=A.loc); - // like get_turf(), but for mobs. - var/mob/living/M = A + object = connected.holder + while(!ismob(object)) + object = object.loc + if(isnull(object)) //we went too far + return - if(M) - health_scan = M.health - if(health_scan <= alarm_health) - pulse() - audible_message("[icon2html(src, hearers(src))] *beep* *beep* *beep*") - playsound(src, 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) - toggle_scan() + //only do the pulse if we are within alarm thresholds + var/mob/living/target_mob = object + health_scan = target_mob.health + if(health_scan > alarm_health) return - return + + //do the pulse & the scan + pulse() + audible_message("[icon2html(src, hearers(src))] *beep* *beep* *beep*") + playsound(src, 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) + toggle_scan() /obj/item/assembly/health/proc/toggle_scan() if(!secured) diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 4a7e797de582e0..70f116b3e3e095 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -1,11 +1,11 @@ /obj/item/assembly_holder name = "Assembly" - icon = 'icons/obj/assemblies/new_assemblies.dmi' + icon = 'icons/obj/devices/new_assemblies.dmi' icon_state = "assembly_holder" inhand_icon_state = "assembly" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY throwforce = 5 w_class = WEIGHT_CLASS_SMALL throw_speed = 2 diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index e706c6f7598ac8..1f760e29b89596 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -189,7 +189,7 @@ if(armed) if(ismob(AM)) var/mob/MM = AM - if(!(MM.movement_type & FLYING)) + if(!(MM.movement_type & MOVETYPES_NOT_TOUCHING_GROUND)) if(ishuman(AM)) var/mob/living/carbon/H = AM if(H.move_intent == MOVE_INTENT_RUN) diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm index 5b1eb0ee0ee6f0..05662057074c28 100644 --- a/code/modules/assembly/shock_kit.dm +++ b/code/modules/assembly/shock_kit.dm @@ -1,12 +1,12 @@ /obj/item/assembly/shock_kit name = "electrohelmet assembly" desc = "This appears to be made from both an electropack and a helmet." - icon = 'icons/obj/assemblies/assemblies.dmi' + icon = 'icons/obj/devices/assemblies.dmi' icon_state = "shock_kit" var/obj/item/clothing/head/helmet/helmet_part = null var/obj/item/electropack/electropack_part = null w_class = WEIGHT_CLASS_HUGE - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY /obj/item/assembly/shock_kit/Destroy() QDEL_NULL(helmet_part) diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index d38d20790e1412..3823706358fafa 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -96,7 +96,7 @@ switch(action) if("signal") if(cooldown_length > 0) - if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_SIGNALLER_SEND)) + if(TIMER_COOLDOWN_RUNNING(src, COOLDOWN_SIGNALLER_SEND)) balloon_alert(ui.user, "recharging!") return TIMER_COOLDOWN_START(src, COOLDOWN_SIGNALLER_SEND, cooldown_length) @@ -135,7 +135,7 @@ return if(!ishuman(user)) return - if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_SIGNALLER_SEND)) + if(TIMER_COOLDOWN_RUNNING(src, COOLDOWN_SIGNALLER_SEND)) balloon_alert(user, "still recharging...") return TIMER_COOLDOWN_START(src, COOLDOWN_SIGNALLER_SEND, 1 SECONDS) diff --git a/code/modules/asset_cache/asset_list.dm b/code/modules/asset_cache/asset_list.dm index e6be437e47425f..02607062111a34 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() @@ -133,6 +134,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 @@ -145,6 +147,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 @@ -158,12 +163,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 @@ -294,8 +296,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)) @@ -317,6 +328,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") @@ -332,6 +351,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") @@ -339,7 +362,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() @@ -362,14 +390,13 @@ GLOBAL_LIST_EMPTY(asset_datums) else to_generate += list(args.Copy()) -// LEMON NOTE -// A GOON CODER SAYS BAD ICON ERRORS CAN BE THROWN BY THE "ICON CACHE" -// APPARENTLY IT MAKES ICONS IMMUTABLE -// LOOK INTO USING THE MUTABLE APPEARANCE PATTERN HERE /datum/asset/spritesheet/proc/queuedInsert(sprite_name, icon/I, icon_state="", dir=SOUTH, frame=1, moving=FALSE) I = icon(I, icon_state=icon_state, dir=dir, frame=frame, moving=moving) if (!I || !length(icon_states(I))) // that direction or state doesn't exist return + + var/start_usage = world.tick_usage + //any sprite modifications we want to do (aka, coloring a greyscaled asset) I = ModifyInserted(I) var/size_id = "[I.Width()]x[I.Height()]" @@ -380,6 +407,12 @@ GLOBAL_LIST_EMPTY(asset_datums) if (size) var/position = size[SPRSZ_COUNT]++ + // Icons are essentially representations of files + modifications + // Because of this, byond keeps them in a cache. It does this in a really dumb way tho + // It's essentially a FIFO queue. So after we do icon() some amount of times, our old icons go out of cache + // When this happens it becomes impossible to modify them, trying to do so will instead throw a + // "bad icon" error. + // What we're doing here is ensuring our icon is in the cache by refreshing it, so we can modify it w/o runtimes. var/icon/sheet = size[SPRSZ_ICON] var/icon/sheet_copy = icon(sheet) size[SPRSZ_STRIPPED] = null @@ -391,6 +424,8 @@ GLOBAL_LIST_EMPTY(asset_datums) sizes[size_id] = size = list(1, I, null) sprites[sprite_name] = list(size_id, 0) + SSblackbox.record_feedback("tally", "spritesheet_queued_insert_time", TICK_USAGE_TO_MS(start_usage), name) + /** * A simple proc handing the Icon for you to modify before it gets turned into an asset. * diff --git a/code/modules/asset_cache/assets/crafting.dm b/code/modules/asset_cache/assets/crafting.dm index 8b38b9d32bb79a..99088ed1a70dac 100644 --- a/code/modules/asset_cache/assets/crafting.dm +++ b/code/modules/asset_cache/assets/crafting.dm @@ -49,12 +49,12 @@ /datum/asset/spritesheet/crafting/proc/add_tool_icons() var/list/tool_icons = list( TOOL_CROWBAR = icon('icons/obj/tools.dmi', "crowbar"), - TOOL_MULTITOOL = icon('icons/obj/device.dmi', "multitool"), + TOOL_MULTITOOL = icon('icons/obj/devices/tool.dmi', "multitool"), TOOL_SCREWDRIVER = icon('icons/obj/tools.dmi', "screwdriver_map"), TOOL_WIRECUTTER = icon('icons/obj/tools.dmi', "cutters_map"), TOOL_WRENCH = icon('icons/obj/tools.dmi', "wrench"), TOOL_WELDER = icon('icons/obj/tools.dmi', "welder"), - TOOL_ANALYZER = icon('icons/obj/device.dmi', "analyzer"), + TOOL_ANALYZER = icon('icons/obj/devices/scanner.dmi', "analyzer"), TOOL_MINING = icon('icons/obj/mining.dmi', "minipick"), TOOL_SHOVEL = icon('icons/obj/mining.dmi', "spade"), TOOL_RETRACTOR = icon('icons/obj/medical/surgery_tools.dmi', "retractor"), diff --git a/code/modules/asset_cache/assets/emojipedia.dm b/code/modules/asset_cache/assets/emojipedia.dm index 2197f1bff2279e..200e3770ff4939 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/asset_cache/assets/paper.dm b/code/modules/asset_cache/assets/paper.dm index 8653cff0dd14b7..be7c9cad98b379 100644 --- a/code/modules/asset_cache/assets/paper.dm +++ b/code/modules/asset_cache/assets/paper.dm @@ -3,19 +3,19 @@ assets = list( // SKYRAT ADDITION: START - Donator stamp icons - "stamp-cat_blue" = 'modular_skyrat/master_files/icons/stamp_icons/cat_blue.png', - "stamp-paw_blue" = 'modular_skyrat/master_files/icons/stamp_icons/paw_blue.png', - "stamp-cat_red" = 'modular_skyrat/master_files/icons/stamp_icons/cat_red.png', - "stamp-paw_red" = 'modular_skyrat/master_files/icons/stamp_icons/paw_red.png', - "stamp-cat_orange" = 'modular_skyrat/master_files/icons/stamp_icons/cat_orange.png', - "stamp-paw_orange" = 'modular_skyrat/master_files/icons/stamp_icons/paw_orange.png', - "stamp-cat_green" = 'modular_skyrat/master_files/icons/stamp_icons/cat_green.png', - "stamp-paw_green" = 'modular_skyrat/master_files/icons/stamp_icons/paw_green.png', + "stamp-cat_blue" = 'modular_nova/master_files/icons/stamp_icons/cat_blue.png', + "stamp-paw_blue" = 'modular_nova/master_files/icons/stamp_icons/paw_blue.png', + "stamp-cat_red" = 'modular_nova/master_files/icons/stamp_icons/cat_red.png', + "stamp-paw_red" = 'modular_nova/master_files/icons/stamp_icons/paw_red.png', + "stamp-cat_orange" = 'modular_nova/master_files/icons/stamp_icons/cat_orange.png', + "stamp-paw_orange" = 'modular_nova/master_files/icons/stamp_icons/paw_orange.png', + "stamp-cat_green" = 'modular_nova/master_files/icons/stamp_icons/cat_green.png', + "stamp-paw_green" = 'modular_nova/master_files/icons/stamp_icons/paw_green.png', // SKYRAT ADDITION: END - Donator stamp icons // SKYRAT ADDITION: START - Other stamp icons - "stamp-nri" = 'modular_skyrat/master_files/icons/stamp_icons/large_stamp-nri.png', - "stamp-solfed" = 'modular_skyrat/master_files/icons/stamp_icons/large_stamp-solfed.png', + "stamp-nri" = 'modular_nova/master_files/icons/stamp_icons/large_stamp-nri.png', + "stamp-solfed" = 'modular_nova/master_files/icons/stamp_icons/large_stamp-solfed.png', // SKYRAT ADDITION: END - Other stamp icons "stamp-clown" = 'icons/stamp_icons/large_stamp-clown.png', diff --git a/code/modules/asset_cache/assets/tutorial_advisors.dm b/code/modules/asset_cache/assets/tutorial_advisors.dm deleted file mode 100644 index da80e8904d38a4..00000000000000 --- a/code/modules/asset_cache/assets/tutorial_advisors.dm +++ /dev/null @@ -1,4 +0,0 @@ -/datum/asset/simple/tutorial_advisors - assets = list( - "chem_help_advisor.gif" = 'icons/ui_icons/advisors/chem_help_advisor.gif', - ) diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm index 4145ae7fa76601..2e4e3aa0e5e025 100644 --- a/code/modules/atmospherics/environmental/LINDA_fire.dm +++ b/code/modules/atmospherics/environmental/LINDA_fire.dm @@ -21,10 +21,10 @@ * is handled by the hotspot itself, specifically perform_exposure(). */ /turf/open/hotspot_expose(exposed_temperature, exposed_volume, soh) - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(liquids && !liquids.fire_state && liquids.check_fire(TRUE)) SSliquids.processing_fire[src] = TRUE - //SKYRAT EDIT END + //NOVA EDIT END //If the air doesn't exist we just return false var/list/air_gases = air?.gases diff --git a/code/modules/atmospherics/environmental/LINDA_system.dm b/code/modules/atmospherics/environmental/LINDA_system.dm index 0556d085adfd8f..688f1d63021a70 100644 --- a/code/modules/atmospherics/environmental/LINDA_system.dm +++ b/code/modules/atmospherics/environmental/LINDA_system.dm @@ -134,7 +134,7 @@ src.atmos_adjacent_turfs = atmos_adjacent_turfs SEND_SIGNAL(src, COMSIG_TURF_CALCULATED_ADJACENT_ATMOS) - update_adjacent_pollutants() //SKYRAT EDIT ADDITION //Atmos adjacency could unlock/block adjacent pollutants, this is dirty flags anyway so its fine having it here + update_adjacent_pollutants() //NOVA EDIT ADDITION //Atmos adjacency could unlock/block adjacent pollutants, this is dirty flags anyway so its fine having it here /** * returns a list of adjacent turfs that can share air with this one. @@ -199,7 +199,7 @@ SSair.remove_from_active(src) else SSair.add_to_active(src) - liquid_update_turf() //SKYRAT EDIT ADDITION + liquid_update_turf() //NOVA EDIT ADDITION /atom/movable/proc/move_update_air(turf/target_turf) if(isturf(target_turf)) diff --git a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm index 24d1e63e42a25c..e7edfe10869a0e 100644 --- a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm +++ b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm @@ -141,10 +141,17 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) GLOB.air_alarms -= src return ..() -/obj/machinery/airalarm/power_change() +/obj/machinery/airalarm/proc/check_enviroment() var/turf/our_turf = connected_sensor ? get_turf(connected_sensor) : get_turf(src) var/datum/gas_mixture/environment = our_turf.return_air() check_danger(our_turf, environment, environment.temperature) + +/obj/machinery/airalarm/proc/get_enviroment() + var/turf/our_turf = connected_sensor ? get_turf(connected_sensor) : get_turf(src) + return our_turf.return_air() + +/obj/machinery/airalarm/power_change() + check_enviroment() return ..() /obj/machinery/airalarm/on_enter_area(datum/source, area/area_to_register) @@ -194,10 +201,10 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) if(istype(multi_tool.buffer, /obj/machinery/air_sensor)) if(!allow_link_change) balloon_alert(user, "linking disabled") - return TOOL_ACT_SIGNAL_BLOCKING + return ITEM_INTERACT_BLOCKING connect_sensor(multi_tool.buffer) balloon_alert(user, "connected sensor") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/airalarm/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -228,8 +235,7 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) data["sensor"] = !!connected_sensor data["allowLinkChange"] = allow_link_change - var/turf/turf = connected_sensor ? get_turf(connected_sensor) : get_turf(src) - var/datum/gas_mixture/environment = turf.return_air() + var/datum/gas_mixture/environment = get_enviroment() var/total_moles = environment.total_moles() var/temp = environment.temperature var/pressure = environment.return_pressure() @@ -362,7 +368,7 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) if("overclock") if(isnull(vent)) return TRUE - vent.toggle_overclock() + vent.toggle_overclock(source = key_name(user)) vent.update_appearance(UPDATE_ICON) return TRUE @@ -457,9 +463,7 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) tlv.set_value(threshold_type, value) investigate_log("threshold value for [threshold]:[threshold_type] was set to [value] by [key_name(usr)]", INVESTIGATE_ATMOS) - var/turf/our_turf = connected_sensor ? get_turf(connected_sensor) : get_turf(src) - var/datum/gas_mixture/environment = our_turf.return_air() - check_danger(our_turf, environment, environment.temperature) + check_enviroment() if("reset_threshold") var/threshold = text2path(params["threshold"]) || params["threshold"] @@ -470,9 +474,7 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) tlv.reset_value(threshold_type) investigate_log("threshold value for [threshold]:[threshold_type] was reset by [key_name(usr)]", INVESTIGATE_ATMOS) - var/turf/our_turf = connected_sensor ? get_turf(connected_sensor) : get_turf(src) - var/datum/gas_mixture/environment = our_turf.return_air() - check_danger(our_turf, environment, environment.temperature) + check_enviroment() if ("alarm") if (alarm_manager.send_alarm(ALARM_ATMOS)) @@ -680,9 +682,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 27) RegisterSignal(connected_sensor, COMSIG_QDELETING, PROC_REF(disconnect_sensor)) my_area = get_area(connected_sensor) - var/turf/our_turf = get_turf(connected_sensor) - var/datum/gas_mixture/environment = our_turf.return_air() - check_danger(our_turf, environment, environment.temperature) + check_enviroment() update_appearance() update_name() @@ -693,9 +693,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 27) connected_sensor = null my_area = get_area(src) - var/turf/our_turf = get_turf(src) - var/datum/gas_mixture/environment = our_turf.return_air() - check_danger(our_turf, environment, environment.temperature) + check_enviroment() update_appearance() update_name() diff --git a/code/modules/atmospherics/machinery/air_alarm/air_alarm_circuit.dm b/code/modules/atmospherics/machinery/air_alarm/air_alarm_circuit.dm index de30b6f3db88b0..7feee7f9cae4f0 100644 --- a/code/modules/atmospherics/machinery/air_alarm/air_alarm_circuit.dm +++ b/code/modules/atmospherics/machinery/air_alarm/air_alarm_circuit.dm @@ -226,8 +226,7 @@ var/current_option = air_alarm_options.value - var/turf/alarm_turf = get_turf(connected_alarm) - var/datum/gas_mixture/environment = alarm_turf.return_air() + var/datum/gas_mixture/environment = connected_alarm.get_enviroment() pressure.set_output(round(environment.return_pressure())) temperature.set_output(round(environment.temperature)) if(ispath(options_map[current_option])) diff --git a/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm b/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm index 3ac90db0c18529..3d93338fbeeada 100644 --- a/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm +++ b/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm @@ -90,7 +90,7 @@ return TRUE /obj/machinery/airalarm/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/stack/sheet/iron(loc, 2) if((buildstage == AIR_ALARM_BUILD_NO_WIRES) || (buildstage == AIR_ALARM_BUILD_COMPLETE)) var/obj/item/electronics/airalarm/alarm = new(loc) diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index 62c2b562d5129d..fe6806c9b58a03 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -382,7 +382,7 @@ /obj/machinery/atmospherics/wrench_act(mob/living/user, obj/item/I) if(!can_unwrench(user)) - return ..() + return ITEM_INTERACT_BLOCKING var/datum/gas_mixture/int_air = return_air() var/datum/gas_mixture/env_air = loc.return_air() @@ -396,11 +396,14 @@ var/empty_mixes = 0 for(var/gas_mix_number in 1 to device_type) var/datum/gas_mixture/gas_mix = all_gas_mixes[gas_mix_number] - if(!(gas_mix.total_moles() > 0)) + if(!gas_mix.total_moles()) empty_mixes++ + if(!nodes[gas_mix_number] || (istype(nodes[gas_mix_number], /obj/machinery/atmospherics/components/unary/portables_connector) && !portable_device_connected(gas_mix_number))) + var/pressure_delta = all_gas_mixes[gas_mix_number].return_pressure() - env_air.return_pressure() + internal_pressure = internal_pressure > pressure_delta ? internal_pressure : pressure_delta if(empty_mixes == device_type) empty_pipe = TRUE - if(!(int_air.total_moles() > 0)) + if(!int_air.total_moles()) empty_pipe = TRUE if(!empty_pipe) @@ -410,8 +413,7 @@ to_chat(user, span_warning("As you begin unwrenching \the [src] a gush of air blows in your face... maybe you should reconsider?")) unsafe_wrenching = TRUE //Oh dear oh dear - var/time_taken = empty_pipe ? 0 : 20 - if(I.use_tool(src, user, time_taken, volume = 50)) + if(I.use_tool(src, user, empty_pipe ? 0 : 2 SECONDS, volume = 50)) user.visible_message( \ "[user] unfastens \the [src].", \ span_notice("You unfasten \the [src]."), \ @@ -421,9 +423,10 @@ //You unwrenched a pipe full of pressure? Let's splat you into the wall, silly. if(unsafe_wrenching) unsafe_pressure_release(user, internal_pressure) - return deconstruct(TRUE) + deconstruct(TRUE) + return ITEM_INTERACT_SUCCESS - return ..() + return ITEM_INTERACT_BLOCKING /** * Getter for can_unwrench @@ -466,7 +469,7 @@ * Called by wrench_act(), create a pipe fitting and remove the pipe */ /obj/machinery/atmospherics/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(can_unwrench) var/obj/item/pipe/stored = new construction_type(loc, null, dir, src, pipe_color) stored.set_piping_layer(piping_layer) @@ -613,18 +616,29 @@ return /** - * Called by the RPD.dm pre_attack(), overriden by pipes.dm + * Called by the RPD.dm pre_attack() * Arguments: * * paint_color - color that the pipe will be painted in (colors in hex like #4f4f4f) */ /obj/machinery/atmospherics/proc/paint(paint_color) - return FALSE + if(paintable) + add_atom_colour(paint_color, FIXED_COLOUR_PRIORITY) + set_pipe_color(paint_color) + update_node_icon() + return paintable /// Setter for pipe color, so we can ensure it's all uniform and save cpu time /obj/machinery/atmospherics/proc/set_pipe_color(pipe_colour) src.pipe_color = uppertext(pipe_colour) update_name() +/// Return TRUE if there is device connected to portables_connector +/obj/machinery/atmospherics/proc/portable_device_connected(node) + var/obj/machinery/atmospherics/components/unary/portables_connector/portable_devices_connector = nodes[node] + if(portable_devices_connector.connected_device) + return TRUE + return FALSE + #undef PIPE_VISIBLE_LEVEL #undef PIPE_HIDDEN_LEVEL #undef VENT_SOUND_DELAY diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index 2550c37a8cd154..c06863ba09266c 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -13,7 +13,7 @@ Passive gate is similar to the regular pump except: desc = "A one-way air valve that does not require power. Passes gas when the output pressure is lower than the target pressure." can_unwrench = TRUE shift_underlay_only = FALSE - interaction_flags_machine = INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_SET_MACHINE + interaction_flags_machine = INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON construction_type = /obj/item/pipe/directional pipe_state = "passivegate" use_power = NO_POWER_USE diff --git a/code/modules/atmospherics/machinery/components/components_base.dm b/code/modules/atmospherics/machinery/components/components_base.dm index e9899ab654e3e8..1aae85d2a1407e 100644 --- a/code/modules/atmospherics/machinery/components/components_base.dm +++ b/code/modules/atmospherics/machinery/components/components_base.dm @@ -105,6 +105,10 @@ . = ..() update_parents() +/obj/machinery/atmospherics/components/on_deconstruction() + relocate_airs() + return ..() + /obj/machinery/atmospherics/components/rebuild_pipes() . = ..() if(update_parents_after_rebuild) @@ -172,31 +176,6 @@ /obj/machinery/atmospherics/components/replace_pipenet(datum/pipeline/Old, datum/pipeline/New) parents[parents.Find(Old)] = New -/obj/machinery/atmospherics/components/unsafe_pressure_release(mob/user, pressures) - . = ..() - - var/turf/current_turf = get_turf(src) - if(!current_turf) - return - //Remove the gas from airs and assume it - var/datum/gas_mixture/environment = current_turf.return_air() - var/lost = null - var/times_lost = 0 - for(var/i in 1 to device_type) - var/datum/gas_mixture/air = airs[i] - lost += pressures*environment.volume/(air.temperature * R_IDEAL_GAS_EQUATION) - times_lost++ - var/shared_loss = lost/times_lost - - var/datum/gas_mixture/to_release - for(var/i in 1 to device_type) - var/datum/gas_mixture/air = airs[i] - if(!to_release) - to_release = air.remove(shared_loss) - continue - to_release.merge(air.remove(shared_loss)) - current_turf.assume_air(to_release) - // Helpers /** @@ -245,12 +224,68 @@ /obj/machinery/atmospherics/components/return_analyzable_air() return airs -/obj/machinery/atmospherics/components/paint(paint_color) - if(paintable) - add_atom_colour(paint_color, FIXED_COLOUR_PRIORITY) - set_pipe_color(paint_color) - update_node_icon() - return paintable +/** + * Handles machinery deconstruction and unsafe pressure release + */ +/obj/machinery/atmospherics/components/proc/crowbar_deconstruction_act(mob/living/user, obj/item/tool, internal_pressure = 0) + if(!panel_open) + balloon_alert(user, "open panel!") + return ITEM_INTERACT_SUCCESS + + var/unsafe_wrenching = FALSE + var/filled_pipe = FALSE + var/datum/gas_mixture/environment_air = loc.return_air() + + for(var/i in 1 to device_type) + var/datum/gas_mixture/inside_air = airs[i] + if(inside_air.total_moles() > 0 || internal_pressure) + filled_pipe = TRUE + if(!nodes[i] || (istype(nodes[i], /obj/machinery/atmospherics/components/unary/portables_connector) && !portable_device_connected(i))) + internal_pressure = internal_pressure > airs[i].return_pressure() ? internal_pressure : airs[i].return_pressure() + + if(!filled_pipe) + default_deconstruction_crowbar(tool) + return ITEM_INTERACT_SUCCESS + + to_chat(user, span_notice("You begin to unfasten \the [src]...")) + + internal_pressure -= environment_air.return_pressure() + + if(internal_pressure > 2 * ONE_ATMOSPHERE) + to_chat(user, span_warning("As you begin deconstructing \the [src] a gush of air blows in your face... maybe you should reconsider?")) + unsafe_wrenching = TRUE + + if(!do_after(user, 2 SECONDS, src)) + return + if(unsafe_wrenching) + unsafe_pressure_release(user, internal_pressure) + tool.play_tool_sound(src, 50) + deconstruct(TRUE) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/atmospherics/components/default_change_direction_wrench(mob/user, obj/item/I) + . = ..() + if(!.) + return FALSE + set_init_directions() + for(var/i in 1 to device_type) + var/obj/machinery/atmospherics/node = nodes[i] + if(node) + if(src in node.nodes) + node.disconnect(src) + nodes[i] = null + if(parents[i]) + nullify_pipenet(parents[i]) + for(var/i in 1 to device_type) + var/obj/machinery/atmospherics/node = nodes[i] + atmos_init() + node = nodes[i] + if(node) + node.atmos_init() + node.add_member(src) + update_parents() + SSair.add_to_rebuild_queue(src) + return TRUE /** * Disconnects all nodes from ourselves, remove us from the node's nodes. @@ -293,3 +328,21 @@ /obj/machinery/atmospherics/components/update_layer() layer = initial(layer) + (piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_LCHANGE + (GLOB.pipe_colors_ordered[pipe_color] * 0.001) + +/** + * Handles air relocation to the pipenet/environment + */ +/obj/machinery/atmospherics/components/proc/relocate_airs(datum/gas_mixture/to_release) + var/turf/local_turf = get_turf(src) + for(var/i in 1 to device_type) + var/datum/gas_mixture/air = airs[i] + if(!nodes[i] || (istype(nodes[i], /obj/machinery/atmospherics/components/unary/portables_connector) && !portable_device_connected(i))) + if(!to_release) + to_release = air + continue + to_release.merge(air) + continue + var/datum/gas_mixture/parents_air = parents[i].air + parents_air.merge(air) + if(to_release) + local_turf.assume_air(to_release) diff --git a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm index 2ddd298bf01b07..fef2c072cd83e1 100644 --- a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm +++ b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm @@ -163,7 +163,7 @@ /obj/machinery/electrolyzer/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/electrolyzer/crowbar_act(mob/living/user, obj/item/tool) return default_deconstruction_crowbar(tool) diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_core.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_core.dm index 2d7db14ef07689..6d3d5d31a16eef 100644 --- a/code/modules/atmospherics/machinery/components/fusion/hfr_core.dm +++ b/code/modules/atmospherics/machinery/components/fusion/hfr_core.dm @@ -199,3 +199,18 @@ QDEL_NULL(soundloop) machine_parts = null return..() + +/obj/machinery/atmospherics/components/unary/hypertorus/core/on_deconstruction() + var/turf/local_turf = get_turf(loc) + var/datum/gas_mixture/to_release = moderator_internal || internal_fusion + if(to_release == moderator_internal) + to_release.merge(internal_fusion) + if(to_release) + local_turf.assume_air(to_release) + return ..() + +/obj/machinery/atmospherics/components/unary/hypertorus/core/crowbar_deconstruction_act(mob/living/user, obj/item/tool, internal_pressure = 0) + internal_pressure = max(internal_fusion.return_pressure(), moderator_internal.return_pressure()) + if(internal_pressure) + say("WARNING - Core can contain hazardous gases, deconstruct with caution!") + return ..(user, tool, internal_pressure) diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm index ec6bc0caaa6ec7..86f2e3dddf5bf6 100644 --- a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm +++ b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm @@ -40,8 +40,6 @@ return if(default_change_direction_wrench(user, I)) return - if(default_deconstruction_crowbar(I)) - return return ..() /obj/machinery/atmospherics/components/unary/hypertorus/welder_act(mob/living/user, obj/item/tool) @@ -55,22 +53,8 @@ cracked = FALSE update_appearance() -/obj/machinery/atmospherics/components/unary/hypertorus/default_change_direction_wrench(mob/user, obj/item/I) - . = ..() - if(.) - set_init_directions() - var/obj/machinery/atmospherics/node = nodes[1] - if(node) - node.disconnect(src) - nodes[1] = null - if(parents[1]) - nullify_pipenet(parents[1]) - atmos_init() - node = nodes[1] - if(node) - node.atmos_init() - node.add_member(src) - SSair.add_to_rebuild_queue(src) +/obj/machinery/atmospherics/components/unary/hypertorus/crowbar_act(mob/living/user, obj/item/tool) + return crowbar_deconstruction_act(user, tool) /obj/machinery/atmospherics/components/unary/hypertorus/update_icon_state() if(panel_open) @@ -169,10 +153,13 @@ desc = "Interface for the HFR to control the flow of the reaction." icon_state = "interface_off" circuit = /obj/item/circuitboard/machine/HFR_interface - var/obj/machinery/atmospherics/components/unary/hypertorus/core/connected_core icon_state_off = "interface_off" icon_state_open = "interface_open" icon_state_active = "interface_active" + /// Have we been activated at least once? + var/activated = FALSE + /// Reference to the core of our machine + var/obj/machinery/atmospherics/components/unary/hypertorus/core/connected_core /obj/machinery/hypertorus/interface/Destroy() if(connected_core) @@ -187,10 +174,13 @@ if(!centre || !centre.check_part_connectivity()) to_chat(user, span_notice("Check all parts and then try again.")) return TRUE - new/obj/item/paper/guides/jobs/atmos/hypertorus(loc) - connected_core = centre + connected_core = centre connected_core.activate(user) + if(!activated) + new /obj/item/paper/guides/jobs/atmos/hypertorus(loc) + activated = TRUE + return TRUE /obj/machinery/hypertorus/interface/ui_interact(mob/user, datum/tgui/ui) @@ -201,6 +191,7 @@ ui.open() else to_chat(user, span_notice("Activate the machine first by using a multitool on the interface.")) + ui.close() /obj/machinery/hypertorus/interface/proc/gas_list_to_gasid_list(list/gas_list) var/list/gasid_list = list() diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm index 9b080b59260fb0..71e5a8bcc5f362 100644 --- a/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm +++ b/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm @@ -421,9 +421,8 @@ "The [src] has begun melting down!", source = src, header = "Meltdown Incoming", - action = NOTIFY_ORBIT, ghost_sound = 'sound/machines/warning-buzzer.ogg', - notify_volume = 75 + notify_volume = 75, ) for(var/i in HYPERTORUS_COUNTDOWN_TIME to 0 step -10) diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm index 8ba5002a0a6854..c781e988f7fd07 100644 --- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm +++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm @@ -124,7 +124,7 @@ GLOBAL_LIST_INIT(gas_recipe_meta, gas_recipes_list()) min_temp = 10 max_temp = 20 energy_release = 3500000 - requirements = list(/datum/gas/plasma = 450, /datum/gas/bz = 15) //SKYRAT EDIT CHANGE, ORIGINAL: requirements = list(/datum/gas/plasma = 450) + requirements = list(/datum/gas/plasma = 450, /datum/gas/bz = 15) //NOVA EDIT CHANGE, ORIGINAL: requirements = list(/datum/gas/plasma = 450) products = list(/obj/item/stack/sheet/mineral/plasma = 1) /datum/gas_recipe/crystallizer/crystal_cell diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm index b71dc05d776cf2..a005caf86b98bf 100644 --- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm +++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm @@ -10,7 +10,6 @@ name = "crystallizer" desc = "Used to crystallize or solidify gases." layer = ABOVE_MOB_LAYER - plane = GAME_PLANE_UPPER density = TRUE max_integrity = 300 armor_type = /datum/armor/binary_crystallizer @@ -41,6 +40,12 @@ internal = new register_context() +/obj/machinery/atmospherics/components/binary/crystallizer/on_deconstruction() + var/turf/local_turf = get_turf(loc) + if(internal.total_moles()) + local_turf.assume_air(internal) + return ..() + /obj/machinery/atmospherics/components/binary/crystallizer/add_context(atom/source, list/context, obj/item/held_item, mob/user) . = ..() context[SCREENTIP_CONTEXT_CTRL_LMB] = "Turn [on ? "off" : "on"]" @@ -59,42 +64,10 @@ return if(default_change_direction_wrench(user, I)) return - if(default_deconstruction_crowbar(I)) - return return ..() -/obj/machinery/atmospherics/components/binary/crystallizer/default_change_direction_wrench(mob/user, obj/item/I) - . = ..() - if(!.) - return FALSE - set_init_directions() - var/obj/machinery/atmospherics/node1 = nodes[1] - var/obj/machinery/atmospherics/node2 = nodes[2] - if(node1) - if(src in node1.nodes) //Only if it's actually connected. On-pipe version would is one-sided. - node1.disconnect(src) - nodes[1] = null - if(node2) - if(src in node2.nodes) //Only if it's actually connected. On-pipe version would is one-sided. - node2.disconnect(src) - nodes[2] = null - - if(parents[1]) - nullify_pipenet(parents[1]) - if(parents[2]) - nullify_pipenet(parents[2]) - - atmos_init() - node1 = nodes[1] - if(node1) - node1.atmos_init() - node1.add_member(src) - node2 = nodes[2] - if(node2) - node2.atmos_init() - node2.add_member(src) - SSair.add_to_rebuild_queue(src) - return TRUE +/obj/machinery/atmospherics/components/binary/crystallizer/crowbar_act(mob/living/user, obj/item/tool) + return crowbar_deconstruction_act(user, tool, internal.return_pressure()) /obj/machinery/atmospherics/components/binary/crystallizer/update_overlays() . = ..() diff --git a/code/modules/atmospherics/machinery/components/tank.dm b/code/modules/atmospherics/machinery/components/tank.dm index 0e9ee55a1aa04c..6e778168a32236 100644 --- a/code/modules/atmospherics/machinery/components/tank.dm +++ b/code/modules/atmospherics/machinery/components/tank.dm @@ -481,7 +481,7 @@ /obj/structure/tank_frame/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool, time = 0.5 SECONDS) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/tank_frame/screwdriver_act_secondary(mob/living/user, obj/item/tool) . = ..() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm b/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm index 1685a027a5f285..269e0943004a2f 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm @@ -49,10 +49,6 @@ GLOBAL_LIST_EMPTY_TYPED(bluespace_senders, /obj/machinery/atmospherics/component register_context() /obj/machinery/atmospherics/components/unary/bluespace_sender/Destroy() - if(bluespace_network.total_moles()) - var/turf/local_turf = get_turf(src) - local_turf.assume_air(bluespace_network) - GLOB.bluespace_senders -= src return ..() @@ -75,6 +71,11 @@ GLOBAL_LIST_EMPTY_TYPED(bluespace_senders, /obj/machinery/atmospherics/component context[SCREENTIP_CONTEXT_RMB] = "[anchored ? "Unan" : "An"]chor" return CONTEXTUAL_SCREENTIP_SET +/obj/machinery/atmospherics/components/unary/bluespace_sender/is_connectable() + if(!anchored) + return FALSE + . = ..() + /obj/machinery/atmospherics/components/unary/bluespace_sender/update_icon_state() if(panel_open) icon_state = "[base_icon_state]_open" @@ -101,24 +102,26 @@ GLOBAL_LIST_EMPTY_TYPED(bluespace_senders, /obj/machinery/atmospherics/component bluespace_network.temperature = T20C update_parents() +/obj/machinery/atmospherics/components/unary/bluespace_sender/relocate_airs() + if(bluespace_network.total_moles() > 0) + airs[1].merge(bluespace_network) + airs[1].garbage_collect() + return ..() + /obj/machinery/atmospherics/components/unary/bluespace_sender/screwdriver_act(mob/living/user, obj/item/tool) if(on) balloon_alert(user, "turn off!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(!anchored) balloon_alert(user, "anchor!") - return TOOL_ACT_TOOLTYPE_SUCCESS - if(default_deconstruction_screwdriver(user, "[base_icon_state]_open", "[base_icon_state]", tool)) - change_pipe_connection(panel_open) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS + if(default_deconstruction_screwdriver(user, "[base_icon_state]_open", "[base_icon_state]_off", tool)) + return ITEM_INTERACT_SUCCESS /obj/machinery/atmospherics/components/unary/bluespace_sender/crowbar_act(mob/living/user, obj/item/tool) - default_deconstruction_crowbar(tool, custom_deconstruct = bluespace_network.total_moles() > 0 ? TRUE : FALSE) - say("WARNING - Bluespace network can contain hazardous gases, deconstruct with caution!") - if(!do_after(user, 3 SECONDS, src)) - return - tool.play_tool_sound(src, 50) - deconstruct(TRUE) + if(panel_open && bluespace_network.total_moles() > 0 && !nodes[1]) + say("WARNING - Bluespace network can contain hazardous gases, deconstruct with caution!") + return crowbar_deconstruction_act(user, tool) /obj/machinery/atmospherics/components/unary/bluespace_sender/multitool_act(mob/living/user, obj/item/item) var/obj/item/multitool/multitool = item @@ -134,7 +137,8 @@ GLOBAL_LIST_EMPTY_TYPED(bluespace_senders, /obj/machinery/atmospherics/component balloon_alert(user, "open panel!") return if(default_unfasten_wrench(user, tool)) - return TOOL_ACT_TOOLTYPE_SUCCESS + change_pipe_connection(!anchored) + return ITEM_INTERACT_SUCCESS return /obj/machinery/atmospherics/components/unary/bluespace_sender/default_change_direction_wrench(mob/user, obj/item/item) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index a12d53cde733a7..a603116d7e85a5 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -17,7 +17,6 @@ // and will crop the head off. icon_state = "mask_bg" layer = ABOVE_MOB_LAYER - plane = GAME_PLANE_UPPER mouse_opacity = MOUSE_OPACITY_TRANSPARENT pixel_y = 22 appearance_flags = KEEP_TOGETHER @@ -72,7 +71,7 @@ density = TRUE max_integrity = 350 armor_type = /datum/armor/unary_cryo_cell - layer = MOB_LAYER - 0.2 //SKYRAT EDIT - Fixing the opacity of cryo cells - ORIGINAL: layer = MOB_LAYER + layer = MOB_LAYER - 0.2 //NOVA EDIT - Fixing the opacity of cryo cells - ORIGINAL: layer = MOB_LAYER state_open = FALSE circuit = /obj/item/circuitboard/machine/cryo_tube occupant_typecache = list(/mob/living/carbon, /mob/living/simple_animal) @@ -322,7 +321,12 @@ if(air1.total_moles() > CRYO_MIN_GAS_MOLES) if(beaker) - beaker.reagents.trans_to(occupant, (CRYO_TX_QTY / (efficiency * CRYO_MULTIPLY_FACTOR)) * seconds_per_tick, efficiency * CRYO_MULTIPLY_FACTOR, methods = VAPOR) // Transfer reagents. + beaker.reagents.trans_to( + occupant, + (CRYO_TX_QTY / (efficiency * CRYO_MULTIPLY_FACTOR)) * seconds_per_tick, + efficiency * CRYO_MULTIPLY_FACTOR, + methods = VAPOR + ) consume_gas = TRUE return TRUE @@ -447,20 +451,56 @@ else to_chat(user, "You can't access the maintenance panel while the pod is " \ + (on ? "active" : (occupant ? "full" : "open")) + "!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/cryo_cell/crowbar_act(mob/living/user, obj/item/tool) if(on || state_open) return FALSE - if(default_pry_open(tool) || default_deconstruction_crowbar(tool)) - return TOOL_ACT_TOOLTYPE_SUCCESS + if(!panel_open) + balloon_alert(user, "open panel!") + return ITEM_INTERACT_SUCCESS + + var/unsafe_wrenching = FALSE + var/filled_pipe = FALSE + var/datum/gas_mixture/environment_air = loc.return_air() + var/datum/gas_mixture/inside_air = internal_connector.gas_connector.airs[1] + var/obj/machinery/atmospherics/node = internal_connector.gas_connector.nodes[1] + var/internal_pressure = 0 + + if(istype(node, /obj/machinery/atmospherics/components/unary/portables_connector)) + var/obj/machinery/atmospherics/components/unary/portables_connector/portable_devices_connector = node + internal_pressure = !portable_devices_connector.connected_device ? 1 : 0 + + if(inside_air.total_moles() > 0) + filled_pipe = TRUE + if(!node || internal_pressure > 0) + internal_pressure = inside_air.return_pressure() - environment_air.return_pressure() + + if(!filled_pipe) + default_deconstruction_crowbar(tool) + return ITEM_INTERACT_SUCCESS + + to_chat(user, span_notice("You begin to unfasten \the [src]...")) + + if(internal_pressure > 2 * ONE_ATMOSPHERE) + to_chat(user, span_warning("As you begin deconstructing \the [src] a gush of air blows in your face... maybe you should reconsider?")) + unsafe_wrenching = TRUE + + if(!do_after(user, 2 SECONDS, src)) + return + if(unsafe_wrenching) + internal_connector.gas_connector.unsafe_pressure_release(user, internal_pressure) + + tool.play_tool_sound(src, 50) + deconstruct(TRUE) + return ITEM_INTERACT_SUCCESS /obj/machinery/cryo_cell/wrench_act(mob/living/user, obj/item/tool) if(on || occupant || state_open) return FALSE if(default_change_direction_wrench(user, tool)) update_appearance() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/cryo_cell/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/reagent_containers/cup)) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/machine_connector.dm b/code/modules/atmospherics/machinery/components/unary_devices/machine_connector.dm index b78de93868e7ae..dc1c2d6282f0ac 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/machine_connector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/machine_connector.dm @@ -13,17 +13,27 @@ qdel(src) return - gas_connector.dir = direction + gas_connector.dir = connected_machine.dir gas_connector.airs[1].volume = gas_volume SSair.start_processing_machine(connected_machine) register_with_machine() + gas_connector.set_init_directions() + gas_connector.atmos_init() + SSair.add_to_rebuild_queue(gas_connector) + RegisterSignal(gas_connector, COMSIG_QDELETING, PROC_REF(connector_deleted)) /datum/gas_machine_connector/Destroy() connected_machine = null QDEL_NULL(gas_connector) return ..() +/datum/gas_machine_connector/proc/connector_deleted() + SIGNAL_HANDLER + gas_connector = null + if(!QDELETED(connected_machine)) + qdel(connected_machine) + /** * Register various signals that are required for the proper work of the connector */ @@ -72,6 +82,7 @@ */ /datum/gas_machine_connector/proc/deconstruct_connected_machine() SIGNAL_HANDLER + relocate_airs() disconnect_connector() SSair.stop_processing_machine(connected_machine) unregister_from_machine() @@ -103,4 +114,23 @@ if(node) node.atmos_init() node.add_member(gas_connector) + gas_connector.update_parents() SSair.add_to_rebuild_queue(gas_connector) + +/** + * Handles air relocation to the pipe network/environment + */ +/datum/gas_machine_connector/proc/relocate_airs(mob/user) + var/turf/local_turf = get_turf(connected_machine) + var/datum/gas_mixture/inside_air = gas_connector.airs[1] + if(inside_air.total_moles() > 0) + if(!gas_connector.nodes[1]) + local_turf.assume_air(inside_air) + return + var/datum/gas_mixture/parents_air = gas_connector.parents[1].air + if(istype(gas_connector.nodes[1], /obj/machinery/atmospherics/components/unary/portables_connector)) + var/obj/machinery/atmospherics/components/unary/portables_connector/portable_devices_connector = gas_connector.nodes[1] + if(!portable_devices_connector.connected_device) + local_turf.assume_air(inside_air) + return + parents_air.merge(inside_air) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm index 452d5d7b243585..ea20f2eeb66a8a 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -47,11 +47,11 @@ var/obj/machinery/air_sensor/sensor = multi_tool.buffer multi_tool.set_buffer(src) sensor.multitool_act(user, multi_tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS balloon_alert(user, "injector saved in buffer") multi_tool.set_buffer(src) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/atmospherics/components/unary/outlet_injector/CtrlClick(mob/user) if(can_interact(user)) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index 6e84d4fc3039c0..5067dcddae2bf0 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -63,7 +63,7 @@ return CONTEXTUAL_SCREENTIP_SET /obj/machinery/atmospherics/components/unary/thermomachine/is_connectable() - if(!anchored || panel_open) + if(!anchored) return FALSE . = ..() @@ -78,7 +78,6 @@ if(check_pipe_on_turf()) set_anchored(FALSE) set_panel_open(TRUE) - change_pipe_connection(TRUE) icon_state = "thermo-open" balloon_alert(user, "the port is already in use!") @@ -203,46 +202,39 @@ /obj/machinery/atmospherics/components/unary/thermomachine/screwdriver_act(mob/living/user, obj/item/tool) if(on) balloon_alert(user, "turn off!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(!anchored) balloon_alert(user, "anchor!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(default_deconstruction_screwdriver(user, "thermo-open", "thermo-0", tool)) - change_pipe_connection(panel_open) - return TOOL_ACT_TOOLTYPE_SUCCESS + update_appearance() + return ITEM_INTERACT_SUCCESS /obj/machinery/atmospherics/components/unary/thermomachine/wrench_act(mob/living/user, obj/item/tool) return default_change_direction_wrench(user, tool) /obj/machinery/atmospherics/components/unary/thermomachine/crowbar_act(mob/living/user, obj/item/tool) - return default_deconstruction_crowbar(tool) + return crowbar_deconstruction_act(user, tool) /obj/machinery/atmospherics/components/unary/thermomachine/multitool_act(mob/living/user, obj/item/multitool/multitool) if(!panel_open) balloon_alert(user, "open panel!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS piping_layer = (piping_layer >= PIPING_LAYER_MAX) ? PIPING_LAYER_MIN : (piping_layer + 1) to_chat(user, span_notice("You change the circuitboard to layer [piping_layer].")) update_appearance() - return TOOL_ACT_TOOLTYPE_SUCCESS - -/obj/machinery/atmospherics/components/unary/thermomachine/default_change_direction_wrench(mob/user, obj/item/I) - if(!..()) - return FALSE - set_init_directions() - update_appearance() - return TRUE + return ITEM_INTERACT_SUCCESS /obj/machinery/atmospherics/components/unary/thermomachine/multitool_act_secondary(mob/living/user, obj/item/tool) if(!panel_open) balloon_alert(user, "open panel!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS color_index = (color_index >= GLOB.pipe_paint_colors.len) ? (color_index = 1) : (color_index = 1 + color_index) set_pipe_color(GLOB.pipe_paint_colors[GLOB.pipe_paint_colors[color_index]]) visible_message(span_notice("[user] set [src]'s pipe color to [GLOB.pipe_color_name[pipe_color]]."), ignored_mobs = user) to_chat(user, span_notice("You set [src]'s pipe color to [GLOB.pipe_color_name[pipe_color]].")) update_appearance() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/atmospherics/components/unary/thermomachine/proc/check_pipe_on_turf() for(var/obj/machinery/atmospherics/device in get_turf(src)) @@ -255,9 +247,10 @@ /obj/machinery/atmospherics/components/unary/thermomachine/wrench_act_secondary(mob/living/user, obj/item/tool) if(!panel_open || check_pipe_on_turf()) visible_message(span_warning("A pipe is hogging the port, remove the obstruction or change the machine piping layer.")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(default_unfasten_wrench(user, tool)) - return TOOL_ACT_TOOLTYPE_SUCCESS + change_pipe_connection(!anchored) + return ITEM_INTERACT_SUCCESS return /obj/machinery/atmospherics/components/unary/thermomachine/ui_status(mob/user) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index 25713e55e37f45..f3c5563fd3afd3 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -99,11 +99,11 @@ var/obj/machinery/air_sensor/sensor = multi_tool.buffer multi_tool.set_buffer(src) sensor.multitool_act(user, multi_tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS balloon_alert(user, "vent saved in buffer") multi_tool.set_buffer(src) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/atmospherics/components/unary/vent_pump/screwdriver_act(mob/living/user, obj/item/tool) var/time_to_repair = (10 SECONDS) * (1 - get_integrity_percentage()) @@ -117,7 +117,7 @@ else balloon_alert(user, "interrupted!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/atmospherics/components/unary/vent_pump/atom_fix() set_is_operational(TRUE) @@ -203,12 +203,14 @@ return if(pump_direction & ATMOS_DIRECTION_RELEASING) - icon_state = "vent_out-off" + icon_state = "vent_off" + flick("vent_out-shutdown", src) else // pump_direction == SIPHONING - icon_state = "vent_in-off" + icon_state = "vent_off" + flick("vent_in-shutdown", src) return - if(icon_state == ("vent_out-off" || "vent_in-off" || "vent_off")) + if(icon_state == "vent_off") if(pump_direction & ATMOS_DIRECTION_RELEASING) icon_state = "vent_out" flick("vent_out-starting", src) @@ -222,7 +224,7 @@ else // pump_direction == SIPHONING icon_state = "vent_in" -/obj/machinery/atmospherics/components/unary/vent_pump/proc/toggle_overclock(from_break = FALSE) +/obj/machinery/atmospherics/components/unary/vent_pump/proc/toggle_overclock(source, from_break = FALSE) fan_overclocked = !fan_overclocked if(from_break) @@ -234,6 +236,8 @@ else sound_loop.stop() + investigate_log("had its overlock setting [fan_overclocked ? "enabled" : "disabled"] by [source]", INVESTIGATE_ATMOS) + update_appearance() /obj/machinery/atmospherics/components/unary/vent_pump/process_atmos() @@ -247,13 +251,10 @@ if(!istype(us)) return - var/current_integrity = get_integrity() if(fan_overclocked) take_damage(fan_damage_rate, sound_effect=FALSE) - if(current_integrity == 0) - on = FALSE - set_is_operational(FALSE) - toggle_overclock(from_break = TRUE) + if(get_integrity() == 0) + investigate_log("was destroyed as a result of overclocking", INVESTIGATE_ATMOS) return var/percent_integrity = get_integrity_percentage() 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 051299950bc68c..0b8b27a87f8fea 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -268,11 +268,11 @@ environment.garbage_collect() - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION if(isopenturf(tile)) var/turf/open/floor_turf = tile floor_turf.pollution?.scrub_amount(1) - // SKYRAT EDIT END + // NOVA EDIT END //Remix the resulting gases air_contents.merge(filtered_out) diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm index 2abb282711ba87..b90bafca8e62c5 100644 --- a/code/modules/atmospherics/machinery/datum_pipeline.dm +++ b/code/modules/atmospherics/machinery/datum_pipeline.dm @@ -49,13 +49,13 @@ reconcile_air() //Only react if the mix has changed, and don't keep updating if it hasn't update = air.react(src) - CalculateGasmixColor(air) + //CalculateGasmixColor(air) // NOVA EDIT REMOVAL - Pipe gas visuals removed /datum/pipeline/proc/set_air(datum/gas_mixture/new_air) if(new_air == air) return air = new_air - CalculateGasmixColor(air) + //CalculateGasmixColor(air) // NOVA EDIT REMOVAL - Pipe gas visuals removed ///Preps a pipeline for rebuilding, insterts it into the rebuild queue /datum/pipeline/proc/build_pipeline(obj/machinery/atmospherics/base) @@ -217,7 +217,7 @@ var/turf_temperature = target.GetTemperature() var/turf_heat_capacity = target.GetHeatCapacity() - //SKYRAT EDIT ADDITION BEGIN + //NOVA EDIT ADDITION BEGIN if(target.liquids?.liquid_state >= LIQUID_STATE_FOR_HEAT_EXCHANGERS) turf_temperature = target.liquids.temp turf_heat_capacity = target.liquids.total_reagents * REAGENT_HEAT_CAPACITY @@ -231,7 +231,7 @@ air.temperature -= heat / total_heat_capacity if(!target.liquids.immutable) target.liquids.temp += heat / turf_heat_capacity - else //SKYRAT EDIT END + else //NOVA EDIT END if(turf_heat_capacity <= 0 || partial_heat_capacity <= 0) return TRUE @@ -325,11 +325,9 @@ if(gas_visuals[icon_file]) return gas_visuals[icon_file] - var/obj/effect/abstract/new_overlay = new + var/obj/effect/abstract/gas_visual/new_overlay = new new_overlay.icon = icon_file - new_overlay.appearance_flags = RESET_COLOR | KEEP_APART - new_overlay.vis_flags = VIS_INHERIT_ICON_STATE | VIS_INHERIT_LAYER | VIS_INHERIT_PLANE | VIS_INHERIT_ID - new_overlay.color = gasmix_color + new_overlay.ChangeColor(gasmix_color) gas_visuals[icon_file] = new_overlay return new_overlay @@ -337,8 +335,8 @@ /// Called when the gasmix color has changed and the gas visuals need to be updated. /datum/pipeline/proc/UpdateGasVisuals() for(var/icon/source as anything in gas_visuals) - var/obj/effect/abstract/overlay = gas_visuals[source] - animate(overlay, time=5, color=gasmix_color) + var/obj/effect/abstract/gas_visual/overlay = gas_visuals[source] + overlay.ChangeColor(gasmix_color) /// After updating, this proc handles looking at the new gas mixture and blends the colors together according to percentage of the gas mix. /datum/pipeline/proc/CalculateGasmixColor(datum/gas_mixture/source) @@ -370,3 +368,24 @@ if(gasmix_color != current_color) gasmix_color = current_color UpdateGasVisuals() + +/obj/effect/abstract/gas_visual + appearance_flags = RESET_COLOR | KEEP_APART + vis_flags = VIS_INHERIT_ICON_STATE | VIS_INHERIT_LAYER | VIS_INHERIT_PLANE | VIS_INHERIT_ID + var/current_color + var/color_filter + +/obj/effect/abstract/gas_visual/Initialize(mapload) + . = ..() + color_filter = filter(type="color", color=matrix()) + filters += color_filter + color_filter = filters[filters.len] + if(current_color) + animate(color_filter, color=current_color, time=5) + +/obj/effect/abstract/gas_visual/proc/ChangeColor(new_color) + current_color = new_color + if(isnull(color_filter)) + // Called before init + return + animate(color_filter, time=5, color=new_color) diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index 51a88bf349e38b..656b6582a00ec7 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -135,7 +135,7 @@ return TRUE /obj/machinery/meter/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/pipe_meter(loc) . = ..() diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm index 39b65fda7af313..cc0504a5854d31 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm @@ -28,10 +28,10 @@ if(istype(local_turf)) if(islava(local_turf)) environment_temperature = 5000 //Yuck - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION else if (local_turf.liquids && local_turf.liquids.liquid_state >= LIQUID_STATE_FOR_HEAT_EXCHANGERS) environment_temperature = local_turf.liquids.temp - //SKYRAT EDIT END + //NOVA EDIT END else if(local_turf.blocks_air) environment_temperature = local_turf.temperature else diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm index c94caf31174763..c0dc18c0e8edc9 100644 --- a/code/modules/atmospherics/machinery/pipes/pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/pipes.dm @@ -143,12 +143,5 @@ var/obj/machinery/atmospherics/current_node = nodes[i] current_node.update_icon() -/obj/machinery/atmospherics/pipe/paint(paint_color) - if(paintable) - add_atom_colour(paint_color, FIXED_COLOUR_PRIORITY) - set_pipe_color(pipe_color) - update_node_icon() - return paintable - /obj/machinery/atmospherics/pipe/update_layer() layer = initial(layer) + (piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_LCHANGE + (GLOB.pipe_colors_ordered[pipe_color] * 0.0001) diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 28c0bd93f25544..18fe9817e81157 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -1,33 +1,7 @@ +///The default pressure for releasing air into an holding tank or the turf #define CAN_DEFAULT_RELEASE_PRESSURE (ONE_ATMOSPHERE) - -///List of all the gases, used in labelling the canisters -GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) - -/proc/init_gas_id_to_canister() - return sort_list(list( - GAS_N2 = /obj/machinery/portable_atmospherics/canister/nitrogen, - GAS_O2 = /obj/machinery/portable_atmospherics/canister/oxygen, - GAS_CO2 = /obj/machinery/portable_atmospherics/canister/carbon_dioxide, - GAS_PLASMA = /obj/machinery/portable_atmospherics/canister/plasma, - GAS_N2O = /obj/machinery/portable_atmospherics/canister/nitrous_oxide, - GAS_NITRIUM = /obj/machinery/portable_atmospherics/canister/nitrium, - GAS_BZ = /obj/machinery/portable_atmospherics/canister/bz, - GAS_AIR = /obj/machinery/portable_atmospherics/canister/air, - GAS_WATER_VAPOR = /obj/machinery/portable_atmospherics/canister/water_vapor, - GAS_TRITIUM = /obj/machinery/portable_atmospherics/canister/tritium, - GAS_HYPER_NOBLIUM = /obj/machinery/portable_atmospherics/canister/nob, - GAS_PLUOXIUM = /obj/machinery/portable_atmospherics/canister/pluoxium, - "caution" = /obj/machinery/portable_atmospherics/canister, - GAS_MIASMA = /obj/machinery/portable_atmospherics/canister/miasma, - GAS_FREON = /obj/machinery/portable_atmospherics/canister/freon, - GAS_HYDROGEN = /obj/machinery/portable_atmospherics/canister/hydrogen, - GAS_HEALIUM = /obj/machinery/portable_atmospherics/canister/healium, - GAS_PROTO_NITRATE = /obj/machinery/portable_atmospherics/canister/proto_nitrate, - GAS_ZAUKER = /obj/machinery/portable_atmospherics/canister/zauker, - GAS_HELIUM = /obj/machinery/portable_atmospherics/canister/helium, - GAS_ANTINOBLIUM = /obj/machinery/portable_atmospherics/canister/antinoblium, - GAS_HALON = /obj/machinery/portable_atmospherics/canister/halon - )) +///The temperature resistance of this canister +#define TEMPERATURE_RESISTANCE (1000 + T0C) /obj/machinery/portable_atmospherics/canister name = "canister" @@ -44,8 +18,6 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) pressure_resistance = 7 * ONE_ATMOSPHERE req_access = list() - var/icon/canister_overlay_file = 'icons/obj/pipes_n_cables/canisters.dmi' - ///Is the valve open? var/valve_open = FALSE ///Used to log opening and closing of the valve, available on VV @@ -55,40 +27,15 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) ///Maximum pressure allowed on initialize inside the canister, multiplied by the filled var var/maximum_pressure = 90 * ONE_ATMOSPHERE ///Stores the path of the gas for mapped canisters - var/gas_type + var/datum/gas/gas_type ///Player controlled var that set the release pressure of the canister var/release_pressure = ONE_ATMOSPHERE - ///Maximum pressure allowed for release_pressure var - var/can_max_release_pressure = (ONE_ATMOSPHERE * 25) - ///Minimum pressure allower for release_pressure var - var/can_min_release_pressure = (ONE_ATMOSPHERE * 0.1) - ///Maximum amount of external heat that the canister can handle before taking damage - var/temperature_resistance = 1000 + T0C - ///Initial temperature gas mixture - var/starter_temp - // Prototype vars - ///Is the canister a prototype one? - var/prototype = FALSE - ///Timer variables - var/valve_timer = null - var/timer_set = 30 - var/default_timer_set = 30 - var/minimum_timer_set = 1 - var/maximum_timer_set = 300 - var/timing = FALSE - ///If true, the prototype canister requires engi access to be used - var/restricted = FALSE ///Window overlay showing the gas inside the canister var/image/window - + ///Is shielding turned on/off var/shielding_powered = FALSE - + ///The powercell used to enable shielding var/obj/item/stock_parts/cell/internal_cell - - var/cell_container_opened = FALSE - - var/protected_contents = FALSE - ///used while processing to update appearance only when its pressure state changes var/current_pressure_state @@ -124,6 +71,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) AddElement(/datum/element/atmos_sensitive, mapload) AddElement(/datum/element/volatile_gas_storage) AddComponent(/datum/component/gas_leaker, leak_rate=0.01) + register_context() /obj/machinery/portable_atmospherics/canister/interact(mob/user) . = ..() @@ -132,6 +80,26 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) playsound(src, 'sound/misc/compiler-failure.ogg', 50, TRUE) return +/obj/machinery/portable_atmospherics/canister/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + if(holding) + context[SCREENTIP_CONTEXT_ALT_LMB] = "Remove tank" + if(!held_item) + return CONTEXTUAL_SCREENTIP_SET + if(istype(held_item, /obj/item/stock_parts/cell)) + context[SCREENTIP_CONTEXT_LMB] = "Insert cell" + switch(held_item.tool_behaviour) + if(TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] hatch" + if(TOOL_CROWBAR) + if(panel_open && internal_cell) + context[SCREENTIP_CONTEXT_LMB] = "Remove cell" + if(TOOL_WELDER) + context[SCREENTIP_CONTEXT_LMB] = "Repair" + context[SCREENTIP_CONTEXT_RMB] = "Dismantle" + + return CONTEXTUAL_SCREENTIP_SET + /obj/machinery/portable_atmospherics/canister/examine(user) . = ..() . += span_notice("A sticker on its side says MAX SAFE PRESSURE: [siunit_pressure(initial(pressure_limit), 0)]; MAX SAFE TEMPERATURE: [siunit(temp_limit, "K", 0)].") @@ -139,8 +107,8 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) . += span_notice("The internal cell has [internal_cell.percent()]% of its total charge.") else . += span_notice("Warning, no cell installed, use a screwdriver to open the hatch and insert one.") - if(cell_container_opened) - . += span_notice("Cell hatch open, close it with a screwdriver.") + if(panel_open) + . += span_notice("Hatch open, close it with a screwdriver.") // Please keep the canister types sorted // Basic canister per gas below here @@ -308,46 +276,6 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) air_contents.gases[/datum/gas/nitrous_oxide][MOLES] = (N2O_ANESTHETIC * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature) SSair.start_processing_machine(src) -/** - * Getter for the amount of time left in the timer of prototype canisters - */ -/obj/machinery/portable_atmospherics/canister/proc/get_time_left() - if(timing) - . = round(max(0, valve_timer - world.time) * 0.1, 1) - else - . = timer_set - -/** - * Starts the timer of prototype canisters - */ -/obj/machinery/portable_atmospherics/canister/proc/set_active() - timing = !timing - if(timing) - valve_timer = world.time + (timer_set SECONDS) - update_appearance() - -/obj/machinery/portable_atmospherics/canister/proto - name = "prototype canister" - greyscale_config = /datum/greyscale_config/prototype_canister - greyscale_colors = "#ffffff#a50021#ffffff" - -/obj/machinery/portable_atmospherics/canister/proto/default - name = "prototype canister" - desc = "The best way to fix an atmospheric emergency... or the best way to introduce one." - volume = 5000 - max_integrity = 300 - temperature_resistance = 2000 + T0C - can_max_release_pressure = (ONE_ATMOSPHERE * 30) - can_min_release_pressure = (ONE_ATMOSPHERE / 30) - prototype = TRUE - -/obj/machinery/portable_atmospherics/canister/proto/default/oxygen - name = "prototype canister" - desc = "A prototype canister for a prototype bike, what could go wrong?" - gas_type = /datum/gas/oxygen - filled = 1 - release_pressure = ONE_ATMOSPHERE*2 - /** * Called on Initialize(), fill the canister with the gas_type specified up to the filled level (half if 0.5, full if 1) * Used for canisters spawned in maps and by admins @@ -356,8 +284,6 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) if(!gas_type) return air_contents.add_gas(gas_type) - if(starter_temp) - air_contents.temperature = starter_temp air_contents.gases[gas_type][MOLES] = (maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature) SSair.start_processing_machine(src) @@ -376,25 +302,24 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) . = ..() if(shielding_powered) - . += mutable_appearance(canister_overlay_file, "shielding") - . += emissive_appearance(canister_overlay_file, "shielding", src) + . += mutable_appearance('icons/obj/pipes_n_cables/canisters.dmi', "shielding") + . += emissive_appearance('icons/obj/pipes_n_cables/canisters.dmi', "shielding", src) - if(cell_container_opened) - . += mutable_appearance(canister_overlay_file, "cell_hatch") + if(panel_open) + . += mutable_appearance('icons/obj/pipes_n_cables/canisters.dmi', "cell_hatch") - var/isBroken = machine_stat & BROKEN ///Function is used to actually set the overlays - if(isBroken) - . += mutable_appearance(canister_overlay_file, "broken") + if(machine_stat & BROKEN) + . += mutable_appearance('icons/obj/pipes_n_cables/canisters.dmi', "broken") if(holding) - . += mutable_appearance(canister_overlay_file, "can-open") + . += mutable_appearance('icons/obj/pipes_n_cables/canisters.dmi', "can-open") if(connected_port) - . += mutable_appearance(canister_overlay_file, "can-connector") + . += mutable_appearance('icons/obj/pipes_n_cables/canisters.dmi', "can-connector") - var/light_state = get_pressure_state(air_contents.return_pressure()) + var/light_state = get_pressure_state() if(light_state) //happens when pressure is below 10kpa which means no light - . += mutable_appearance(canister_overlay_file, light_state) - . += emissive_appearance(canister_overlay_file, "[light_state]-light", src, alpha = src.alpha) + . += mutable_appearance('icons/obj/pipes_n_cables/canisters.dmi', light_state) + . += emissive_appearance('icons/obj/pipes_n_cables/canisters.dmi', "[light_state]-light", src, alpha = src.alpha) update_window() @@ -402,18 +327,20 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) . = ..() update_window() +///Updates the overlays of this canister based on its air contents /obj/machinery/portable_atmospherics/canister/proc/update_window() if(!air_contents) return + var/static/alpha_filter if(!alpha_filter) // Gotta do this separate since the icon may not be correct at world init - alpha_filter = filter(type="alpha", icon=icon(icon, "window-base")) + alpha_filter = filter(type="alpha", icon = icon('icons/obj/pipes_n_cables/canisters.dmi', "window-base")) cut_overlay(window) - window = image(icon, icon_state="window-base", layer=FLOAT_LAYER) + window = image('icons/obj/pipes_n_cables/canisters.dmi', icon_state = "window-base", layer = FLOAT_LAYER) var/list/window_overlays = list() for(var/visual in air_contents.return_visuals(get_turf(src))) - var/image/new_visual = image(visual, layer=FLOAT_LAYER) + var/image/new_visual = image(visual, layer = FLOAT_LAYER) new_visual.filters = alpha_filter window_overlays += new_visual window.overlays = window_overlays @@ -421,13 +348,13 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) // Both of these procs handle the external temperature damage. /obj/machinery/portable_atmospherics/canister/should_atmos_process(datum/gas_mixture/air, exposed_temperature) - return (exposed_temperature > temperature_resistance && !shielding_powered) + return (exposed_temperature > TEMPERATURE_RESISTANCE && !shielding_powered) /obj/machinery/portable_atmospherics/canister/atmos_expose(datum/gas_mixture/air, exposed_temperature) take_damage(5, BURN, 0) /obj/machinery/portable_atmospherics/canister/deconstruct(disassembled = TRUE) - if((flags_1 & NODECONSTRUCT_1)) + if((obj_flags & NO_DECONSTRUCTION)) qdel(src) return if(!(machine_stat & BROKEN)) @@ -444,40 +371,37 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) /obj/machinery/portable_atmospherics/canister/attackby(obj/item/item, mob/user, params) if(istype(item, /obj/item/stock_parts/cell)) var/obj/item/stock_parts/cell/active_cell = item - if(!cell_container_opened) - balloon_alert(user, "open the hatch first") - return + if(!panel_open) + balloon_alert(user, "open hatch first!") + return TRUE if(!user.transferItemToLoc(active_cell, src)) - return + return TRUE if(internal_cell) user.put_in_hands(internal_cell) - balloon_alert(user, "you successfully replace the cell") + balloon_alert(user, "you replace the cell") else - balloon_alert(user, "you successfully install the cell") + balloon_alert(user, "you install the cell") internal_cell = active_cell - return + return TRUE return ..() /obj/machinery/portable_atmospherics/canister/screwdriver_act(mob/living/user, obj/item/screwdriver) - if(screwdriver.tool_behaviour != TOOL_SCREWDRIVER) - return - screwdriver.play_tool_sound(src, 50) - cell_container_opened = !cell_container_opened - to_chat(user, span_notice("You [cell_container_opened ? "open" : "close"] the cell container hatch of [src].")) - update_appearance() - return TRUE + if(default_deconstruction_screwdriver(user, icon_state, icon_state, screwdriver)) + update_appearance() + return ITEM_INTERACT_SUCCESS /obj/machinery/portable_atmospherics/canister/crowbar_act(mob/living/user, obj/item/tool) - if(!cell_container_opened || !internal_cell) - return + if(!panel_open || !internal_cell) + return ITEM_INTERACT_BLOCKING + internal_cell.forceMove(drop_location()) - balloon_alert(user, "you successfully remove the cell") - return TRUE + balloon_alert(user, "cell removed") + return ITEM_INTERACT_SUCCESS /obj/machinery/portable_atmospherics/canister/welder_act_secondary(mob/living/user, obj/item/I) - . = ..() if(!I.tool_start_check(user, amount=1)) - return TRUE + return ITEM_INTERACT_BLOCKING + var/pressure = air_contents.return_pressure() if(pressure > 300) to_chat(user, span_alert("The pressure gauge on [src] indicates a high pressure inside... maybe you want to reconsider?")) @@ -487,26 +411,24 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) if(I.use_tool(src, user, 3 SECONDS, volume=50)) to_chat(user, span_notice("You cut [src] apart.")) deconstruct(TRUE) - return TRUE + + return ITEM_INTERACT_SUCCESS /obj/machinery/portable_atmospherics/canister/welder_act(mob/living/user, obj/item/tool) - . = ..() if(user.combat_mode) - return FALSE - if(atom_integrity >= max_integrity) - return TRUE - if(machine_stat & BROKEN) - return TRUE - if(!tool.tool_start_check(user, amount=1)) - return TRUE + return + if(atom_integrity >= max_integrity || (machine_stat & BROKEN) || !tool.tool_start_check(user, amount = 1)) + return ITEM_INTERACT_SUCCESS + to_chat(user, span_notice("You begin repairing cracks in [src]...")) while(tool.use_tool(src, user, 2.5 SECONDS, volume=40)) atom_integrity = min(atom_integrity + 25, max_integrity) if(atom_integrity >= max_integrity) to_chat(user, span_notice("You've finished repairing [src].")) - return TRUE + return ITEM_INTERACT_SUCCESS to_chat(user, span_notice("You repair some of the cracks in [src]...")) - return TRUE + + return ITEM_INTERACT_BLOCKING /obj/machinery/portable_atmospherics/canister/Exited(atom/movable/gone, direction) . = ..() @@ -525,9 +447,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) return canister_break() -/** - * Handle canisters disassemble, releases the gas content in the turf - */ +///Handle canisters disassemble, releases the gas content in the turf /obj/machinery/portable_atmospherics/canister/proc/canister_break() disconnect() var/datum/gas_mixture/expelled_gas = air_contents.remove(air_contents.total_moles()) @@ -550,6 +470,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) . = ..() if(!.) return + if(close_valve) valve_open = FALSE update_appearance() @@ -558,26 +479,22 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) user.investigate_log("started a transfer into [holding].", INVESTIGATE_ATMOS) /obj/machinery/portable_atmospherics/canister/process(seconds_per_tick) - var/our_pressure = air_contents.return_pressure() var/our_temperature = air_contents.return_temperature() - protected_contents = FALSE if(shielding_powered) var/power_factor = round(log(10, max(our_pressure - pressure_limit, 1)) + log(10, max(our_temperature - temp_limit, 1))) var/power_consumed = power_factor * 250 * seconds_per_tick if(powered(AREA_USAGE_EQUIP, ignore_use_power = TRUE)) use_power(power_consumed, AREA_USAGE_EQUIP) - protected_contents = TRUE - else if(internal_cell?.use(power_consumed * 0.025)) - protected_contents = TRUE - else + else if(!internal_cell?.use(power_consumed * 0.025)) shielding_powered = FALSE SSair.start_processing_machine(src) investigate_log("shielding turned off due to power loss") ///return the icon_state component for the canister's indicator light based on its current pressure reading -/obj/machinery/portable_atmospherics/canister/proc/get_pressure_state(air_pressure) +/obj/machinery/portable_atmospherics/canister/proc/get_pressure_state() + var/air_pressure = air_contents.return_pressure() switch(air_pressure) if((40 * ONE_ATMOSPHERE) to INFINITY) return "can-3" @@ -593,9 +510,6 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) /obj/machinery/portable_atmospherics/canister/process_atmos() if(machine_stat & BROKEN) return PROCESS_KILL - if(timing && valve_timer < world.time) - valve_open = !valve_open - timing = FALSE // Handle gas transfer. if(valve_open) @@ -613,7 +527,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) excited = TRUE return ..() //we have already updated appearance so dont need to update again below - var/new_pressure_state = get_pressure_state(air_contents.return_pressure()) + var/new_pressure_state = get_pressure_state() if(current_pressure_state != new_pressure_state) //update apperance only when its pressure changes significantly from its current value update_appearance() current_pressure_state = new_pressure_state @@ -632,8 +546,8 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) /obj/machinery/portable_atmospherics/canister/ui_static_data(mob/user) return list( "defaultReleasePressure" = round(CAN_DEFAULT_RELEASE_PRESSURE), - "minReleasePressure" = round(can_min_release_pressure), - "maxReleasePressure" = round(can_max_release_pressure), + "minReleasePressure" = round(CAN_MIN_RELEASE_PRESSURE), + "maxReleasePressure" = round(CAN_MAX_RELEASE_PRESSURE), "pressureLimit" = round(pressure_limit), "holdingTankLeakPressure" = round(TANK_LEAK_PRESSURE), "holdingTankFragPressure" = round(TANK_FRAGMENT_PRESSURE) @@ -645,191 +559,182 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) "tankPressure" = round(air_contents.return_pressure()), "releasePressure" = round(release_pressure), "valveOpen" = !!valve_open, - "isPrototype" = !!prototype, "hasHoldingTank" = !!holding, "hasHypernobCrystal" = !!nob_crystal_inserted, "reactionSuppressionEnabled" = !!suppress_reactions ) - if (prototype) - . += list( - "restricted" = restricted, - "timing" = timing, - "time_left" = get_time_left(), - "timer_set" = timer_set, - "timer_is_not_default" = timer_set != default_timer_set, - "timer_is_not_min" = timer_set != minimum_timer_set, - "timer_is_not_max" = timer_set != maximum_timer_set - ) - if (holding) var/datum/gas_mixture/holding_mix = holding.return_air() - . += list( - "holdingTank" = list( - "name" = holding.name, - "tankPressure" = round(holding_mix.return_pressure()) - ) + .["holdingTank"] = list( + "name" = holding.name, + "tankPressure" = round(holding_mix.return_pressure()) ) + else + .["holdingTank"] = null + . += list( "shielding" = shielding_powered, - "hasCell" = (internal_cell ? TRUE : FALSE), - "cellCharge" = internal_cell?.percent() + "cellCharge" = internal_cell ? internal_cell.percent() : 0 ) /obj/machinery/portable_atmospherics/canister/ui_act(action, params) . = ..() if(.) return + switch(action) if("relabel") var/label = tgui_input_list(usr, "New canister label", "Canister", GLOB.gas_id_to_canister) if(isnull(label)) return - if(!..()) - var/newtype = GLOB.gas_id_to_canister[label] - if(newtype) - var/obj/machinery/portable_atmospherics/canister/replacement = newtype - investigate_log("was relabelled to [initial(replacement.name)] by [key_name(usr)].", INVESTIGATE_ATMOS) - name = initial(replacement.name) - desc = initial(replacement.desc) - icon_state = initial(replacement.icon_state) - base_icon_state = icon_state - set_greyscale(initial(replacement.greyscale_colors), initial(replacement.greyscale_config)) - if("restricted") - restricted = !restricted - if(restricted) - req_access = list(ACCESS_ENGINEERING) - else - req_access = list() - . = TRUE + var/newtype = GLOB.gas_id_to_canister[label] + if(isnull(newtype)) + return + var/obj/machinery/portable_atmospherics/canister/replacement = newtype + investigate_log("was relabelled to [initial(replacement.name)] by [key_name(usr)].", INVESTIGATE_ATMOS) + name = initial(replacement.name) + desc = initial(replacement.desc) + icon_state = initial(replacement.icon_state) + base_icon_state = icon_state + set_greyscale(initial(replacement.greyscale_colors), initial(replacement.greyscale_config)) + if("pressure") var/pressure = params["pressure"] if(pressure == "reset") pressure = CAN_DEFAULT_RELEASE_PRESSURE . = TRUE else if(pressure == "min") - pressure = can_min_release_pressure + pressure = CAN_MIN_RELEASE_PRESSURE . = TRUE else if(pressure == "max") - pressure = can_max_release_pressure + pressure = CAN_MAX_RELEASE_PRESSURE . = TRUE else if(pressure == "input") - pressure = tgui_input_number(usr, "New release pressure", "Canister Pressure", release_pressure, can_max_release_pressure, can_min_release_pressure) - if(!isnull(pressure) && !..()) + pressure = tgui_input_number(usr, "New release pressure", "Canister Pressure", release_pressure, CAN_MAX_RELEASE_PRESSURE, CAN_MIN_RELEASE_PRESSURE) + if(!isnull(pressure)) . = TRUE else if(text2num(pressure) != null) pressure = text2num(pressure) . = TRUE if(.) - release_pressure = clamp(round(pressure), can_min_release_pressure, can_max_release_pressure) + release_pressure = clamp(round(pressure), CAN_MIN_RELEASE_PRESSURE, CAN_MAX_RELEASE_PRESSURE) investigate_log("was set to [release_pressure] kPa by [key_name(usr)].", INVESTIGATE_ATMOS) - if("valve") //logging for openning canisters - var/logmsg - var/admin_msg - var/danger = FALSE - var/n = 0 - valve_open = !valve_open - if(valve_open) - SSair.start_processing_machine(src) - logmsg = "Valve was opened by [key_name(usr)], starting a transfer into \the [holding || "air"].
" - if(!holding) - var/list/gaseslog = list() //list for logging all gases in canister - for(var/id in air_contents.gases) - var/gas = air_contents.gases[id] - gaseslog[gas[GAS_META][META_GAS_NAME]] = gas[MOLES] //adds gases to gaseslog - if(!gas[GAS_META][META_GAS_DANGER]) - continue - if(gas[MOLES] > (gas[GAS_META][META_GAS_MOLES_VISIBLE] || MOLES_GAS_VISIBLE)) //if moles_visible is undefined, default to default visibility - danger = TRUE //at least 1 danger gas - logmsg = "[key_name(usr)] opened a canister that contains the following:" - admin_msg = "[ADMIN_LOOKUPFLW(usr)] opened a canister that contains the following at [ADMIN_VERBOSEJMP(src)]:" - for(var/name in gaseslog) - n = n + 1 - logmsg += "\n[name]: [gaseslog[name]] moles." - if(n <= 5) //the first five gases added - admin_msg += "\n[name]: [gaseslog[name]] moles." - if(n == 5 && length(gaseslog) > 5) //message added if more than 5 gases - admin_msg += "\nToo many gases to log. Check investigate log." - if(danger) //sent to admin's chat if contains dangerous gases - message_admins(admin_msg) - else - logmsg = "valve was closed by [key_name(usr)], stopping the transfer into \the [holding || "air"].
" - investigate_log(logmsg, INVESTIGATE_ATMOS) - release_log += logmsg + + if("valve") + toggle_valve(usr) . = TRUE - if("timer") - var/change = params["change"] - switch(change) - if("reset") - timer_set = default_timer_set - if("decrease") - timer_set = max(minimum_timer_set, timer_set - 10) - if("increase") - timer_set = min(maximum_timer_set, timer_set + 10) - if("input") - var/user_input = tgui_input_number(usr, "Set time to valve toggle", "Canister Timer", timer_set, maximum_timer_set, minimum_timer_set) - if(isnull(user_input) || QDELETED(usr) || QDELETED(src) || !usr.can_perform_action(src, FORBID_TELEKINESIS_REACH)) - return - timer_set = user_input - log_admin("[key_name(usr)] has activated a prototype valve timer") - . = TRUE - if("toggle_timer") - set_active() + if("eject") - if(holding) - if(valve_open) - message_admins("[ADMIN_LOOKUPFLW(usr)] removed [holding] from [src] with valve still open at [ADMIN_VERBOSEJMP(src)] releasing contents into the [span_boldannounce("air")].") - usr.investigate_log("removed the [holding], leaving the valve open and transferring into the [span_boldannounce("air")].", INVESTIGATE_ATMOS) - replace_tank(usr, FALSE) + if(eject_tank(usr)) . = TRUE if("shielding") - shielding_powered = !shielding_powered - SSair.start_processing_machine(src) - message_admins("[ADMIN_LOOKUPFLW(usr)] turned [shielding_powered ? "on" : "off"] the [src] powered shielding.") - usr.investigate_log("turned [shielding_powered ? "on" : "off"] the [src] powered shielding.") + toggle_shielding(usr) . = TRUE + if("reaction_suppression") - if(!nob_crystal_inserted) - stack_trace("[usr] tried to toggle reaction suppression on a canister without a noblium crystal inside, possible href exploit attempt.") - return - suppress_reactions = !suppress_reactions - SSair.start_processing_machine(src) - message_admins("[ADMIN_LOOKUPFLW(usr)] turned [suppress_reactions ? "on" : "off"] the [src] reaction suppression.") - usr.investigate_log("turned [suppress_reactions ? "on" : "off"] the [src] reaction suppression.") + toggle_reaction_suppression(usr) . = TRUE + if("recolor") - select_colors() + var/initial_config = initial(greyscale_config) + if(isnull(initial_config)) + return FALSE + + var/datum/greyscale_modify_menu/menu = new( + src, usr, list("[initial_config]"), CALLBACK(src, PROC_REF(recolor)), + starting_icon_state = initial(icon_state), + starting_config = initial_config, + starting_colors = initial(greyscale_colors) + ) + menu.ui_interact(usr) . = TRUE update_appearance() -/obj/machinery/portable_atmospherics/canister/proc/select_colors() - var/atom/fake_atom = src - var/list/allowed_configs = list() - var/config = initial(fake_atom.greyscale_config) - if(!config) +/// Opens/closes the canister valve +/obj/machinery/portable_atmospherics/canister/proc/toggle_valve(mob/user, wire_pulsed = FALSE) + valve_open = !valve_open + if(!valve_open) + var/logmsg = "valve was closed by [key_name(user)] [wire_pulsed ? "via wire pulse" : ""], stopping the transfer into \the [holding || "air"].
" + investigate_log(logmsg, INVESTIGATE_ATMOS) + release_log += logmsg return - allowed_configs += "[config]" - var/datum/greyscale_modify_menu/menu = new( - src, usr, allowed_configs, CALLBACK(src, PROC_REF(recolor)), - starting_icon_state=initial(fake_atom.icon_state), - starting_config=initial(fake_atom.greyscale_config), - starting_colors=initial(fake_atom.greyscale_colors) - ) - menu.ui_interact(usr) + SSair.start_processing_machine(src) + if(holding) + var/logmsg = "Valve was opened by [key_name(user)] [wire_pulsed ? "via wire pulse" : ""], starting a transfer into \the [holding || "air"].
" + investigate_log(logmsg, INVESTIGATE_ATMOS) + release_log += logmsg + return + + // Go over the gases in canister, pull all their info and mark the spooky ones + var/list/output = list() + output += "[key_name(user)] opened a canister [wire_pulsed ? "via wire pulse" : ""] that contains the following:" + var/list/admin_output = list() + admin_output += "[ADMIN_LOOKUPFLW(user)] opened a canister [wire_pulsed ? "via wire pulse" : ""] that contains the following at [ADMIN_VERBOSEJMP(src)]:" + var/list/gases = air_contents.gases + var/danger = FALSE + for(var/gas_index in 1 to length(gases)) + var/list/gas_info = gases[gases[gas_index]] + var/list/meta = gas_info[GAS_META] + var/name = meta[META_GAS_NAME] + var/moles = gas_info[MOLES] + + output += "[name]: [moles] moles." + if(gas_index <= 5) //the first five gases added + admin_output += "[name]: [moles] moles." + else if(gas_index == 6) // anddd the warning + admin_output += "Too many gases to log. Check investigate log." + //if moles_visible is undefined, default to default visibility + if(meta[META_GAS_DANGER] && moles > (meta[META_GAS_MOLES_VISIBLE] || MOLES_GAS_VISIBLE)) + danger = TRUE + + if(danger) //sent to admin's chat if contains dangerous gases + message_admins(admin_output.Join("\n")) + var/logmsg = output.Join("\n") + investigate_log(logmsg, INVESTIGATE_ATMOS) + release_log += logmsg + +/// Turns canister shielding on or off +/obj/machinery/portable_atmospherics/canister/proc/toggle_shielding(mob/user, wire_pulsed = FALSE) + shielding_powered = !shielding_powered + SSair.start_processing_machine(src) + message_admins("[ADMIN_LOOKUPFLW(user)] turned [shielding_powered ? "on" : "off"] [wire_pulsed ? "via wire pulse" : ""] the [src] powered shielding.") + user.investigate_log("turned [shielding_powered ? "on" : "off"] [wire_pulsed ? "via wire pulse" : ""] the [src] powered shielding.") + update_appearance() + +/// Ejects tank from canister, if any +/obj/machinery/portable_atmospherics/canister/proc/eject_tank(mob/user, wire_pulsed = FALSE) + if(!holding) + return FALSE + if(valve_open) + message_admins("[ADMIN_LOOKUPFLW(user)] removed [holding] from [src] with valve still open [wire_pulsed ? "via wire pulse" : ""] at [ADMIN_VERBOSEJMP(src)] releasing contents into the [span_boldannounce("air")].") + user.investigate_log("removed the [holding] [wire_pulsed ? "via wire pulse" : ""], leaving the valve open and transferring into the [span_boldannounce("air")].", INVESTIGATE_ATMOS) + replace_tank(user, FALSE) + return TRUE + +/// Turns hyper-noblium crystal reaction suppression in the canister on or off +/obj/machinery/portable_atmospherics/canister/proc/toggle_reaction_suppression(mob/user, wire_pulsed = FALSE) + if(!nob_crystal_inserted) + if(!wire_pulsed) + stack_trace("[user] tried to toggle reaction suppression on a canister without a noblium crystal inside and without pulsing wires, possible href exploit attempt.") + return + suppress_reactions = !suppress_reactions + SSair.start_processing_machine(src) + message_admins("[ADMIN_LOOKUPFLW(user)] turned [suppress_reactions ? "on" : "off"] [wire_pulsed ? "via wire pulse" : ""] the [src] reaction suppression.") + user.investigate_log("turned [suppress_reactions ? "on" : "off"] [wire_pulsed ? "via wire pulse" : ""] the [src] reaction suppression.") /obj/machinery/portable_atmospherics/canister/proc/recolor(datum/greyscale_modify_menu/menu) - set_greyscale(menu.split_colors) + set_greyscale(menu.split_colors, menu.config.type) /obj/machinery/portable_atmospherics/canister/unregister_holding() valve_open = FALSE return ..() /obj/machinery/portable_atmospherics/canister/take_atmos_damage() - if(shielding_powered) - return FALSE - return ..() + return shielding_powered ? FALSE : ..() #undef CAN_DEFAULT_RELEASE_PRESSURE +#undef TEMPERATURE_RESISTANCE diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm index 9c00b8faea79fb..62e4c7b04c90ca 100644 --- a/code/modules/atmospherics/machinery/portable/scrubber.dm +++ b/code/modules/atmospherics/machinery/portable/scrubber.dm @@ -61,11 +61,11 @@ var/atom/target = holding || get_turf(src) scrub(target.return_air()) - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION for(var/turf/open/open_turf in view(3, src)) if(open_turf.pollution) open_turf.pollution.scrub_amount(POLLUTION_HEIGHT_DIVISOR) - //SKYRAT EDIT END + //NOVA EDIT END return ..() /** @@ -224,5 +224,5 @@ if(default_unfasten_wrench(user, tool)) if(!movable) on = FALSE - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS return FALSE diff --git a/code/modules/awaymissions/exile.dm b/code/modules/awaymissions/exile.dm index 976ab184433731..efe386887bb15c 100644 --- a/code/modules/awaymissions/exile.dm +++ b/code/modules/awaymissions/exile.dm @@ -1,6 +1,6 @@ /obj/structure/closet/secure_closet/exile - name = "exile implants" + name = "exile implants locker" req_access = list(ACCESS_HOS) /obj/structure/closet/secure_closet/exile/PopulateContents() diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index 6bfe17ebc2e5e7..17d5500f42f91d 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -25,14 +25,14 @@ GLOBAL_LIST_EMPTY(gateway_destinations) . = "Connection desynchronized. Recalibration in progress." /* Check if the movable is allowed to arrive at this destination (exile implants mostly) */ -/** SKYRAT EDIT - CYBORGS CANT USE GETWAY +/** NOVA EDIT - CYBORGS CANT USE GETWAY /datum/gateway_destination/proc/incoming_pass_check(atom/movable/AM) return TRUE **/ // Just a reminder that the home gateway overrides this proc so if a borg someone finds themself in an away mission they can still leave /datum/gateway_destination/proc/incoming_pass_check(atom/movable/AM) return !iscyborg(AM) -// SKYRAT EDIT - END +// NOVA EDIT - END /* Get the actual turf we'll arrive at */ /datum/gateway_destination/proc/get_target_turf() CRASH("get target turf not implemented for this destination type") @@ -138,7 +138,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations) invisibility = INVISIBILITY_ABSTRACT /obj/effect/gateway_portal_bumper/Bumped(atom/movable/AM) - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION var/list/type_blacklist = list( /obj/item/mmi, /mob/living/silicon, @@ -150,7 +150,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations) continue to_chat(AM, span_warning("[content_item] seems to be blocking you from entering the gateway!")) return - //SKYRAT EDIT END + //NOVA EDIT END if(get_dir(src,AM) == SOUTH) gateway.Transfer(AM) @@ -192,7 +192,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations) var/teleportion_possible = FALSE var/transport_active = FALSE - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION var/requires_key = FALSE var/key_used = FALSE @@ -203,7 +203,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations) key_used = TRUE qdel(I) return - //SKYRAT EDIT END + //NOVA EDIT END /obj/machinery/gateway/Initialize(mapload) generate_destination() @@ -287,10 +287,10 @@ GLOBAL_LIST_EMPTY(gateway_destinations) /obj/machinery/gateway/proc/activate(datum/gateway_destination/D) if(!powered() || target) return - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(requires_key && !key_used) return - //SKYRAT EDIT END + //NOVA EDIT END target = D target.activate(destination) portal_visuals.setup_visuals(target) @@ -348,7 +348,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations) /obj/machinery/gateway/away/interact(mob/user, special_state) . = ..() - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION var/list/type_blacklist = list( /obj/item/mmi, /mob/living/silicon, @@ -361,7 +361,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations) continue to_chat(user, span_warning("[content_item] seems to be blocking you from entering the gateway!")) return - //SKYRAT EDIT END + //NOVA EDIT END if(!target) if(!GLOB.the_gateway) to_chat(user,span_warning("Home gateway is not responding!")) @@ -375,7 +375,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations) /obj/machinery/computer/gateway_control name = "Gateway Control" desc = "Human friendly interface to the mysterious gate next to it." - req_access = list(ACCESS_CENT_GENERAL) //SKYRAT EDIT ADDITION + req_access = list(ACCESS_CENT_GENERAL) //NOVA EDIT ADDITION var/obj/machinery/gateway/G /obj/machinery/computer/gateway_control/Initialize(mapload, obj/item/circuitboard/C) @@ -413,13 +413,13 @@ GLOBAL_LIST_EMPTY(gateway_destinations) try_to_linkup() return TRUE if("activate") - //SKYRAT EDIT ADDITION BEGIN + //NOVA EDIT ADDITION BEGIN if(ishuman(usr)) var/mob/living/carbon/human/interacting_human = usr if(!allowed(interacting_human)) to_chat(interacting_human, "Error, you do not have the required access to link up the gateway.") return FALSE - //SKYRAT EDIT END + //NOVA EDIT END var/datum/gateway_destination/D = locate(params["destination"]) in GLOB.gateway_destinations try_to_connect(D) return TRUE @@ -443,7 +443,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations) G.activate(D) /obj/item/paper/fluff/gateway - default_raw_text = "Congratulations,

Your station has been selected to carry out the Gateway Project.

The equipment will be shipped to you at the start of the next quarter.
You are to prepare a secure location to house the equipment as outlined in the attached documents.

--Nanotrasen Bluespace Research" + default_raw_text = "Congratulations,

Your station has been selected to carry out the Gateway Project.

The equipment will be shipped to you at the start of the next quarter.
You are to prepare a secure location to house the equipment as outlined in the attached documents.

--Symphionia Bluespace Research" name = "Confidential Correspondence, Pg 1" /atom/movable/screen/map_view/gateway_port diff --git a/code/modules/awaymissions/mission_code/centcomAway.dm b/code/modules/awaymissions/mission_code/centcomAway.dm index 3b0d3e8a810cb4..0b1dfcb78a6a88 100644 --- a/code/modules/awaymissions/mission_code/centcomAway.dm +++ b/code/modules/awaymissions/mission_code/centcomAway.dm @@ -40,7 +40,7 @@ name = "Visitor Info Pamphlet" default_raw_text = " XCC-P5831 Visitor Information
\ Greetings, visitor, to XCC-P5831! As you may know, this outpost was once \ - used as Nanotrasen's CENTRAL COMMAND STATION, organizing and coordinating company \ + used as Symphionia's Conglomeration of Colonists STATION, organizing and coordinating company \ projects across the vastness of space.
\ Since the completion of the much more efficient CC-A5831 on March 8, 2553, XCC-P5831 no longer \ acts as NT's base of operations but still plays a very important role its corporate affairs; \ diff --git a/code/modules/awaymissions/mission_code/moonoutpost19.dm b/code/modules/awaymissions/mission_code/moonoutpost19.dm index 17385bc70bc40a..e83bdff4bbd590 100644 --- a/code/modules/awaymissions/mission_code/moonoutpost19.dm +++ b/code/modules/awaymissions/mission_code/moonoutpost19.dm @@ -25,7 +25,7 @@ icon_state = "awaycontent3" /area/awaymission/moonoutpost19/syndicate - name = "Syndicate Outpost" + name = "Symphionia Outpost" icon_state = "awaycontent4" /area/awaymission/moonoutpost19/main @@ -95,7 +95,7 @@ /obj/item/paper/fluff/awaymissions/moonoutpost19/research/xeno_adult name = "Adult Xenomorph Physiology & Behavior Observation" - default_raw_text = "Researcher: Dr. Sakuma Sano
Date: 03/06/2554

Report:
The other scientists and I can hardly believe our eyes. The snake-like larva has molted into a 7 foot tall insectoid nightmare in just a few hours. It's obvious now as to why such heavy duty containment was needed. It immediately tried to escape however by flinging itself at the window in a flurry of swipes and stabs. It seems its behavior has returned to a state that is very similar to the facehugger, though I doubt with the same intent! Thankfully, our glass and shields have shown to be more than sturdy enough for such a violent creature, and so far, any attempts at the creature escaping have been in vain.

As for its physiology, the creature has an elongated head with what appears to be have an exoskeleton resembling an external rib-cage on the torso. The alien is also fairly skinny with a lean body. The little amount of meat on the alien appears to be entirely muscle. We assume this makes it deceptively strong, while remaining agile at the same time. One of the most interesting things we have seen is its pharyngeal jaw. It has some what of an inner mouth capable of being fired externally at extremely high speeds. It has already caused many dents in the walls and a few small cracks in the window with it. The alien also has a couple of dorsal tubes on its back, their purpose unknown. Finally, this monster sports a long ridged tail, complete with a large and extremely sharp blade at the tip.

Normally I would be absolutely terrified of something like this, but I'm putting my trust in Nanotrasen with the containment. After all, they wouldn't build a cell that could fail to contain its subject, would they?" + default_raw_text = "Researcher: Dr. Sakuma Sano
Date: 03/06/2554

Report:
The other scientists and I can hardly believe our eyes. The snake-like larva has molted into a 7 foot tall insectoid nightmare in just a few hours. It's obvious now as to why such heavy duty containment was needed. It immediately tried to escape however by flinging itself at the window in a flurry of swipes and stabs. It seems its behavior has returned to a state that is very similar to the facehugger, though I doubt with the same intent! Thankfully, our glass and shields have shown to be more than sturdy enough for such a violent creature, and so far, any attempts at the creature escaping have been in vain.

As for its physiology, the creature has an elongated head with what appears to be have an exoskeleton resembling an external rib-cage on the torso. The alien is also fairly skinny with a lean body. The little amount of meat on the alien appears to be entirely muscle. We assume this makes it deceptively strong, while remaining agile at the same time. One of the most interesting things we have seen is its pharyngeal jaw. It has some what of an inner mouth capable of being fired externally at extremely high speeds. It has already caused many dents in the walls and a few small cracks in the window with it. The alien also has a couple of dorsal tubes on its back, their purpose unknown. Finally, this monster sports a long ridged tail, complete with a large and extremely sharp blade at the tip.

Normally I would be absolutely terrified of something like this, but I'm putting my trust in Symphionia with the containment. After all, they wouldn't build a cell that could fail to contain its subject, would they?" /obj/item/paper/fluff/awaymissions/moonoutpost19/research/larva_psych name = "Larva Xenomorph Physiology & Behavior Observation" @@ -123,7 +123,7 @@ /obj/item/paper/fluff/awaymissions/moonoutpost19/research/evacuation name = "Evacuation Procedure" - default_raw_text = "

In The Event of Xenobiology Breach: Evacuate staff, Lock down Xenobiology, Notify on-site superiors and/or Central Command immediately.



Current Xenobiology Containment Level:Secure RUN

" + default_raw_text = "

In The Event of Xenobiology Breach: Evacuate staff, Lock down Xenobiology, Notify on-site superiors and/or Conglomeration of Colonists immediately.



Current Xenobiology Containment Level:Secure RUN

" /obj/item/paper/fluff/awaymissions/moonoutpost19/log/personal name = "Personal Log" @@ -135,7 +135,7 @@ /obj/item/paper/fluff/awaymissions/moonoutpost19/engineering name = "Engineering Instructions" - default_raw_text = "Alright, listen up. If you're reading this, I'm either taking a shit or I've been recalled back to Command. Either way, you'll need to know how to restore power. We've stolen this stuff from Nanotrasen, so all the equipment is jury-rigged. We have generators that work on both plasma and uranium, about 50 sheets should power the outpost for quite a while. If the generators aren't working, which is very likely, take the power cell on the desk and put it into the APC in the hallway. That should get the place running, at least for a little while." + default_raw_text = "Alright, listen up. If you're reading this, I'm either taking a shit or I've been recalled back to Command. Either way, you'll need to know how to restore power. We've stolen this stuff from Symphionia, so all the equipment is jury-rigged. We have generators that work on both plasma and uranium, about 50 sheets should power the outpost for quite a while. If the generators aren't working, which is very likely, take the power cell on the desk and put it into the APC in the hallway. That should get the place running, at least for a little while." /obj/item/paper/fluff/awaymissions/moonoutpost19/log/kenneth name = "Personal Log - Kenneth Cunningham" @@ -147,7 +147,7 @@ /obj/item/paper/fluff/awaymissions/moonoutpost19/log/gerald name = "Personal Log - Gerald Rosswell" - default_raw_text = "Personal Log for Research Director Gerald Rosswell

Entry One - 17/05/2554:
You know, I can't believe I took this position so suddenly. I saw that corporate needed a research director for one of it's outposts and thought it would be a cakewalk, there isn't going to be a lot of research to be done on a tiny outpost. Mainly just running scans on the gas giant we are orbiting or some basic RnD. However, they conveniently forgot to tell me that me and my science staff would have to pull double duty as medical staff and that there is no one higher up on the chain of command here, so I get to pull triple duty as acting captain as well! This shit is probably allowed in some 3 point fine print buried underneath the literally thousands of pages of contracts. Well, at least the research will be easy work.

Entry Two - 25/05/2554:
Well, we all expected it at the outpost, CentCom has decided to completely change what research we are doing. They've decided that we should be research the species known as 'xenomporphs'. They announced this change 4 days ago and along with it, sadly, the termination of our current science staff barring me. Not to mention the constant noise made by the construction detail they sent to staple on a xenobiology lab ensuring no one has been able to sleep decently ever since they announced the shift. To make matters worse our current security guard actually died of a heart attack today. Just goes to show that 75 year old men shouldn't be security guards. Still can't believe that they decided to do this major change less than a month after the outpost was established.

Entry Three - 27/05/2554:
The new security guard arrived today. Apparently transferred here from the research station that also is orbiting the gas giant. He seems to be rather angry about his transfer. Considering the rumors I've heard about the research station he's probably caught off guard by the fact that Steve hasn't tried to force an IED down his throat.

Entry Four - 06/06/2554:
My requests for additional security and containment measures for the 'xenomorph' has been denied. Does Central Command not notice how dangerous these creatures are? The only thing keeping them in is a force field, a minor problem with the power grid and the entire hive is loose. What would stop them then, the lone security guard with a dinky little taser? Kenneth can barely handle a short-tempered engineer. We are under equipped and under staffed, we are inevitably going to be destroyed unless we get the equipment and staff we need.

Entry Five - 10/06/2554:
Cunningham got a good look at the xenomorph in containment. He was frightened for the rest of the day, rather amusing if it wasn't for the fact that we are all trapped on this scrap heap with naught but a force field keeping those xenomorphs in.

Entry Six - 17/06/2554:
The reactions from the specimens today has shown that they possess strange mental properties. Mark hypothesizes that they possibly have a sort of hive mind, while nothing is certain this would explain how xenomorphs seem to have vastly increased intellect when a 'queen' is present. Of course, to test this hypothesis would require many complicated procedures which we will not be able to undertake. But we do not know the full extend of the xenomorph mind, it may or may not be able to find a way to circumvent our containment system. I will resend my request for additional security measures along with this new found information." + default_raw_text = "Personal Log for Research Director Gerald Rosswell

Entry One - 17/05/2554:
You know, I can't believe I took this position so suddenly. I saw that corporate needed a research director for one of it's outposts and thought it would be a cakewalk, there isn't going to be a lot of research to be done on a tiny outpost. Mainly just running scans on the gas giant we are orbiting or some basic RnD. However, they conveniently forgot to tell me that me and my science staff would have to pull double duty as medical staff and that there is no one higher up on the chain of command here, so I get to pull triple duty as acting captain as well! This shit is probably allowed in some 3 point fine print buried underneath the literally thousands of pages of contracts. Well, at least the research will be easy work.

Entry Two - 25/05/2554:
Well, we all expected it at the outpost, CentCom has decided to completely change what research we are doing. They've decided that we should be research the species known as 'xenomporphs'. They announced this change 4 days ago and along with it, sadly, the termination of our current science staff barring me. Not to mention the constant noise made by the construction detail they sent to staple on a xenobiology lab ensuring no one has been able to sleep decently ever since they announced the shift. To make matters worse our current security guard actually died of a heart attack today. Just goes to show that 75 year old men shouldn't be security guards. Still can't believe that they decided to do this major change less than a month after the outpost was established.

Entry Three - 27/05/2554:
The new security guard arrived today. Apparently transferred here from the research station that also is orbiting the gas giant. He seems to be rather angry about his transfer. Considering the rumors I've heard about the research station he's probably caught off guard by the fact that Steve hasn't tried to force an IED down his throat.

Entry Four - 06/06/2554:
My requests for additional security and containment measures for the 'xenomorph' has been denied. Does Conglomeration of Colonists not notice how dangerous these creatures are? The only thing keeping them in is a force field, a minor problem with the power grid and the entire hive is loose. What would stop them then, the lone security guard with a dinky little taser? Kenneth can barely handle a short-tempered engineer. We are under equipped and under staffed, we are inevitably going to be destroyed unless we get the equipment and staff we need.

Entry Five - 10/06/2554:
Cunningham got a good look at the xenomorph in containment. He was frightened for the rest of the day, rather amusing if it wasn't for the fact that we are all trapped on this scrap heap with naught but a force field keeping those xenomorphs in.

Entry Six - 17/06/2554:
The reactions from the specimens today has shown that they possess strange mental properties. Mark hypothesizes that they possibly have a sort of hive mind, while nothing is certain this would explain how xenomorphs seem to have vastly increased intellect when a 'queen' is present. Of course, to test this hypothesis would require many complicated procedures which we will not be able to undertake. But we do not know the full extend of the xenomorph mind, it may or may not be able to find a way to circumvent our containment system. I will resend my request for additional security measures along with this new found information." /obj/item/paper/fluff/awaymissions/moonoutpost19/food_specials name = "Specials This Week" @@ -155,7 +155,7 @@ /obj/item/paper/fluff/awaymissions/moonoutpost19/welcome name = "Welcome Notice" - default_raw_text = "

Welcome to Moon Outpost 19! Property of Nanotrasen Inc.




Staff Roster:
-Dr. Gerald Rosswell: Research Director & Acting Captain
-Dr. Sakuma Sano: Xenobiologist
-Dr. Mark Douglas: Xenobiologist
-Kenneth Cunningham: Security Officer-Ivan Volodin: Engineer
-Mathias Kuester: Bartender
-Sven Edling: Chef
-Steve: Assistant

Please enjoy your stay, and report any abnormalities to an officer." + default_raw_text = "

Welcome to Moon Outpost 19! Property of Symphionia Inc.




Staff Roster:
-Dr. Gerald Rosswell: Research Director & Acting Captain
-Dr. Sakuma Sano: Xenobiologist
-Dr. Mark Douglas: Xenobiologist
-Kenneth Cunningham: Security Officer-Ivan Volodin: Engineer
-Mathias Kuester: Bartender
-Sven Edling: Chef
-Steve: Assistant

Please enjoy your stay, and report any abnormalities to an officer." /obj/item/paper/fluff/awaymissions/moonoutpost19/goodbye_note name = "Note" diff --git a/code/modules/awaymissions/mission_code/murderdome.dm b/code/modules/awaymissions/mission_code/murderdome.dm index d558ab812a6365..2e1154d29cf4fe 100644 --- a/code/modules/awaymissions/mission_code/murderdome.dm +++ b/code/modules/awaymissions/mission_code/murderdome.dm @@ -1,7 +1,8 @@ /obj/structure/window/reinforced/fulltile/indestructible name = "robust window" - flags_1 = PREVENT_CLICK_UNDER_1 | NODECONSTRUCT_1 + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + flags_1 = PREVENT_CLICK_UNDER_1 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF /obj/structure/window/reinforced/fulltile/indestructible/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) @@ -9,7 +10,7 @@ /obj/structure/grille/indestructible - flags_1 = CONDUCT_1 | NODECONSTRUCT_1 + obj_flags = CONDUCTS_ELECTRICITY | NO_DECONSTRUCTION resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF /obj/structure/grille/indestructible/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index 2b8d4e806633dc..c301bd38240a4d 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -167,7 +167,7 @@ /obj/item/paper/crumpled/ruins/snowdin/misc1 name = "Mission Prologue" - default_raw_text = {"Holy shit, what a rush! Those Nanotrasen bastards didn't even know what hit 'em! All five of us dropped in right on the captain, didn't even have time to yell! We were in and out with that disk in mere minutes! + default_raw_text = {"Holy shit, what a rush! Those Symphionia bastards didn't even know what hit 'em! All five of us dropped in right on the captain, didn't even have time to yell! We were in and out with that disk in mere minutes! Crew didn't even know what was happening till the delta alert went down and by then we were already gone. We got a case to drink on the way home to celebrate, fuckin' job well done!"} /obj/item/paper/crumpled/ruins/snowdin/dontdeadopeninside @@ -189,14 +189,14 @@ /obj/item/paper/fluff/awaymissions/snowdin/profile/overseer name = "Personnel Record AOP#01" default_raw_text = {"
Personnel Log


Name:Caleb Reed
Age:38
Gender:Male
On-Site Profession:Outpost Overseer

Information

Caleb Reed lead several expeditions - among uncharted planets in search of plasma for Nanotrasen, scouring from hot savanas to freezing arctics. Track record is fairly clean with only incidient including the loss of two researchers during the + among uncharted planets in search of plasma for Symphionia, scouring from hot savanas to freezing arctics. Track record is fairly clean with only incidient including the loss of two researchers during the expedition of _______, where mis-used of explosive ordinance for tunneling causes a cave-in."} /obj/item/paper/fluff/awaymissions/snowdin/profile/sec1 name = "Personnel Record AOP#02" default_raw_text = {"
Personnel Log


Name:James Reed
Age:43
Gender:Male
On-Site Profession:Outpost Security

Information

James Reed has been a part - of Nanotrasen's security force for over 20 years, first joining in 22XX. A clean record and unwavering loyalty to the corperation through numerous deployments to various sites makes him a valuable asset to Natotrasen - when it comes to keeping the peace while prioritizing Nanotrasen privacy matters. "} + of Symphionia's security force for over 20 years, first joining in 22XX. A clean record and unwavering loyalty to the corperation through numerous deployments to various sites makes him a valuable asset to Natotrasen + when it comes to keeping the peace while prioritizing Symphionia privacy matters. "} /obj/item/paper/fluff/awaymissions/snowdin/profile/hydro1 name = "Personnel Record AOP#03" @@ -222,14 +222,14 @@ /obj/item/paper/fluff/awaymissions/snowdin/secnotice name = "Security Notice" - default_raw_text = {"YOu have been assigned to this Arctic Post with intention of protecting Nanotrasen assets and ensuring vital information is kept secure while the stationed crew obeys protocol. The picked + default_raw_text = {"YOu have been assigned to this Arctic Post with intention of protecting Symphionia assets and ensuring vital information is kept secure while the stationed crew obeys protocol. The picked staff for this post have been pre-screened with no prior incidients on record, but incase of an issue you have been given a single holding cell and instructions to contact Central to terminate the offending crewmember."} /obj/item/paper/fluff/awaymissions/snowdin/mining name = "Assignment Notice" default_raw_text = {"This cold-ass planet is the new-age equivalent of striking gold. Huge deposits of plasma and literal streams of plasma run through the caverns under all this ice and we're here to mine it all.\ - Nanotrasen pays by the pound, so get minin' boys!"} + Symphionia pays by the pound, so get minin' boys!"} /obj/item/paper/crumpled/ruins/snowdin/lootstructures name = "scribbled note" @@ -253,11 +253,11 @@ DELAY 45 NAME Elizabeth Queef DELAY 10 - SAY Nah. I've been feeding the AI the results for the past 2 weeks to sift through the garbage and haven't seen anything out of the usual, at least whatever Nanotrasen is looking for. + SAY Nah. I've been feeding the AI the results for the past 2 weeks to sift through the garbage and haven't seen anything out of the usual, at least whatever Symphionia is looking for. DELAY 45 NAME Jacob Ullman DELAY 10 - SAY Figured as much. Dunno what Nanotrasen expects to find out here past the plasma. At least we're getting paid to fuck around for a couple months while the AI does the hard work. + SAY Figured as much. Dunno what Symphionia expects to find out here past the plasma. At least we're getting paid to fuck around for a couple months while the AI does the hard work. DELAY 45 NAME Elizabeth Queef DELAY 10 @@ -272,7 +272,7 @@ PRESET /datum/preset_holoimage/captain NAME Caleb Reed DELAY 10 - SAY Paid in experience! That's the Nanotrasen Motto! + SAY Paid in experience! That's the Symphionia Motto! DELAY 30;"} /obj/item/disk/holodisk/snowdin/welcometodie @@ -285,7 +285,7 @@ DELAY 30 SAY You have been selected out of $)@! potential candidates for this post! DELAY 30 - SAY Nanotrasen is pleased to have you working in one of the many top-of-the-line research posts within the $%@!! sector! + SAY Symphionia is pleased to have you working in one of the many top-of-the-line research posts within the $%@!! sector! DELAY 30 SAY Further job assignment information can be found at your local security post! Have a secure day! DELAY 20;"} diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm index b0f31eaa669853..ea03f25e9e05e2 100644 --- a/code/modules/awaymissions/mission_code/stationCollision.dm +++ b/code/modules/awaymissions/mission_code/stationCollision.dm @@ -42,10 +42,10 @@ /obj/item/gun/energy/laser/retro/sc_retro name ="retro laser" icon_state = "retro" - desc = "An older model of the basic lasergun, no longer used by Nanotrasen's security or military forces." + desc = "An older model of the basic lasergun, no longer used by Symphionia's security or military forces." clumsy_check = FALSE //No sense in having a harmless gun blow up in the clowns face -//Syndicate sub-machine guns. +//Symphionia sub-machine guns. /obj/item/gun/ballistic/automatic/c20r/sc_c20r /obj/item/gun/ballistic/automatic/c20r/sc_c20r/Initialize(mapload) @@ -122,16 +122,23 @@ GLOBAL_VAR_INIT(sc_safecode5, "[rand(0,9)]") Your assigned ship is designed specifically for penetrating the hull of another station or ship with minimal damage to operatives. It is completely fly-by-wire meaning you have just have to enjoy the ride and when the red light comes on... find something to hold onto! "} + /* * Captain's safe */ -/obj/item/storage/secure/safe/sc_ssafe +/obj/structure/secure_safe/sc_ssafe name = "Captain's secure safe" -/obj/item/storage/secure/safe/sc_ssafe/Initialize(mapload) +/obj/structure/secure_safe/sc_ssafe/Initialize(mapload) + . = ..() + var/lock_code = "[GLOB.sc_safecode1][GLOB.sc_safecode2][GLOB.sc_safecode3][GLOB.sc_safecode4][GLOB.sc_safecode5]" + AddComponent(/datum/component/lockable_storage, \ + lock_code = lock_code, \ + can_hack_open = FALSE, \ + ) + +/obj/structure/secure_safe/sc_ssafe/PopulateContents() . = ..() - lock_code = "[GLOB.sc_safecode1][GLOB.sc_safecode2][GLOB.sc_safecode3][GLOB.sc_safecode4][GLOB.sc_safecode5]" - lock_set = TRUE new /obj/item/gun/energy/mindflayer(src) new /obj/item/soulstone(src) new /obj/item/clothing/suit/hooded/cultrobes/hardened(src) diff --git a/code/modules/awaymissions/pamphlet.dm b/code/modules/awaymissions/pamphlet.dm index be8aa9de8907ad..aa3704c5f8d43c 100644 --- a/code/modules/awaymissions/pamphlet.dm +++ b/code/modules/awaymissions/pamphlet.dm @@ -16,18 +16,18 @@ default_raw_text = "They don't make you kill people. There, we said it. Now get back to work!" /obj/item/paper/pamphlet/gateway - default_raw_text = "Welcome to the Nanotrasen Gateway project...
\ + default_raw_text = "Welcome to the Symphionia Gateway project...
\ Congratulations! If you're reading this, you and your superiors have decided that you're \ ready to commit to a life spent colonising the rolling hills of far away worlds. You \ must be ready for a lifetime of adventure, a little bit of hard work, and an award \ - winning dental plan- but that's not all the Nanotrasen Gateway project has to offer.
\ + winning dental plan- but that's not all the Symphionia Gateway project has to offer.
\
Because we care about you, we feel it is only fair to make sure you know the risks \ - before you commit to joining the Nanotrasen Gateway project. All away destinations have \ - been fully scanned by a Nanotrasen expeditionary team, and are certified to be 100% safe. \ + before you commit to joining the Symphionia Gateway project. All away destinations have \ + been fully scanned by a Symphionia expeditionary team, and are certified to be 100% safe. \ We've even left a case of space beer along with the basic materials you'll need to expand \ - Nanotrasen's operational area and start your new life.

\ + Symphionia's operational area and start your new life.

\ Gateway Operation Basics
\ - All Nanotrasen approved Gateways operate on the same basic principals. They operate off \ + All Symphionia approved Gateways operate on the same basic principals. They operate off \ area equipment power as you would expect, and without this supply, it cannot safely function, \ causinng it to reject all attempts at operation.

\ Once it is correctly setup, and once it has enough power to operate, the Gateway will begin \ @@ -43,7 +43,7 @@ number of cases, the Gateway they have established may not be immediately obvious. \ Do not panic if you cannot locate the return Gateway. Begin colonisation of the destination. \

A New World
\ - As a participant in the Nanotrasen Gateway Project, you will be on the frontiers of space. \ + As a participant in the Symphionia Gateway Project, you will be on the frontiers of space. \ Though complete safety is assured, participants are advised to prepare for inhospitable \ environs." diff --git a/code/modules/awaymissions/signpost.dm b/code/modules/awaymissions/signpost.dm index c46b0b9aa3cb33..864b4fa03f8690 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 556a9fd63ad582..d7ecda850182a0 100644 --- a/code/modules/awaymissions/super_secret_room.dm +++ b/code/modules/awaymissions/super_secret_room.dm @@ -105,8 +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/basketball/basketball.dm b/code/modules/basketball/basketball.dm index 232b65d8e1ceb5..9fe176715db6c1 100644 --- a/code/modules/basketball/basketball.dm +++ b/code/modules/basketball/basketball.dm @@ -106,7 +106,7 @@ return // spinning gives you a lower disarm chance but it drains stamina - var/disarm_chance = baller.flags_1 & IS_SPINNING_1 ? 35 : 50 + var/disarm_chance = HAS_TRAIT(baller, TRAIT_SPINNING) ? 35 : 50 // ballers stamina results in lower disarm, stealer stamina results in higher disarm disarm_chance += (baller.getStaminaLoss() - stealer.getStaminaLoss()) / 2 // the lowest chance for disarm is 25% and the highest is 75% @@ -169,7 +169,7 @@ return // need a free hand and can't be spinning - if(!user.put_in_inactive_hand(src) || user.flags_1 & IS_SPINNING_1) + if(!user.put_in_inactive_hand(src) || HAS_TRAIT(user, TRAIT_SPINNING)) return last_use = world.time diff --git a/code/modules/basketball/basketball_map_loading.dm b/code/modules/basketball/basketball_map_loading.dm index 469167367c0f0b..b2ca7106eea056 100644 --- a/code/modules/basketball/basketball_map_loading.dm +++ b/code/modules/basketball/basketball_map_loading.dm @@ -45,9 +45,9 @@ /datum/map_template/basketball/stadium name = "Stadium" - description = "The homecourt for the Nanotrasen Basketball Department." + description = "The homecourt for the Symphionia Basketball Department." mappath = "_maps/map_files/basketball/stadium.dmm" - team_name = "Nanotrasen Basketball Department" + team_name = "Symphionia Basketball Department" home_team_uniform = /datum/outfit/basketball/nanotrasen /datum/map_template/basketball/lusty_xenomorphs diff --git a/code/modules/basketball/controller.dm b/code/modules/basketball/controller.dm index f5cc286ba2a187..53e89d182a3e76 100644 --- a/code/modules/basketball/controller.dm +++ b/code/modules/basketball/controller.dm @@ -49,7 +49,7 @@ GLOBAL_VAR(basketball_game) GLOB.basketball_game = src map_deleter = new -/datum/basketball_controller/Destroy(force, ...) +/datum/basketball_controller/Destroy(force) . = ..() GLOB.basketball_game = null end_game() @@ -119,7 +119,6 @@ GLOBAL_VAR(basketball_game) header = "Basketball Minigame", ghost_sound = 'sound/effects/ghost2.ogg', notify_volume = 75, - action = NOTIFY_ORBIT, ) create_bodies(ready_players) diff --git a/code/modules/basketball/hoop.dm b/code/modules/basketball/hoop.dm index 5de263c4786396..f356fc5231588a 100644 --- a/code/modules/basketball/hoop.dm +++ b/code/modules/basketball/hoop.dm @@ -53,9 +53,6 @@ /obj/structure/hoop/update_overlays() . = ..() - if(dir & NORTH) - SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER) - var/dir_offset_x = 0 var/dir_offset_y = 0 @@ -72,7 +69,6 @@ var/mutable_appearance/scoreboard = mutable_appearance('icons/obj/signs.dmi', "basketball_scorecard") scoreboard.pixel_x = dir_offset_x scoreboard.pixel_y = dir_offset_y - SET_PLANE_EXPLICIT(scoreboard, GAME_PLANE, src) . += scoreboard var/ones = total_score % 10 @@ -156,7 +152,7 @@ var/score_chance = throw_range_success[distance] var/obj/structure/hoop/backboard = throwingdatum.initial_target?.resolve() var/click_on_hoop = TRUE - var/mob/living/thrower = throwingdatum.thrower + var/mob/living/thrower = throwingdatum?.get_thrower() // aim penalty for not clicking directly on the hoop when shooting if(!istype(backboard) || backboard != src) @@ -164,7 +160,7 @@ score_chance *= 0.5 // aim penalty for spinning while shooting - if(istype(thrower) && thrower.flags_1 & IS_SPINNING_1) + if(istype(thrower) && HAS_TRAIT(thrower, TRAIT_SPINNING)) score_chance *= 0.5 if(prob(score_chance)) diff --git a/code/modules/bitrunning/alerts.dm b/code/modules/bitrunning/alerts.dm index f8c8aa30b94314..54738b594c22df 100644 --- a/code/modules/bitrunning/alerts.dm +++ b/code/modules/bitrunning/alerts.dm @@ -3,33 +3,14 @@ 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." timeout = 20 SECONDS /atom/movable/screen/alert/bitrunning/qserver_domain_complete/Click(location, control, params) - if(..()) + . = ..() + if(!.) return var/mob/living/living_owner = owner @@ -37,4 +18,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/antagonists/_parent.dm b/code/modules/bitrunning/antagonists/_parent.dm new file mode 100644 index 00000000000000..a6fc71b4e4291a --- /dev/null +++ b/code/modules/bitrunning/antagonists/_parent.dm @@ -0,0 +1,72 @@ +/datum/job/bitrunning_glitch + title = ROLE_GLITCH + +/datum/antagonist/bitrunning_glitch + name = "Generic Bitrunning Glitch" + antagpanel_category = ANTAG_GROUP_GLITCH + job_rank = ROLE_GLITCH + preview_outfit = /datum/outfit/cyber_police + show_in_roundend = FALSE + show_in_antagpanel = FALSE + show_name_in_check_antagonists = TRUE + show_to_ghosts = TRUE + suicide_cry = "ALT F4!" + ui_name = "AntagInfoGlitch" + /// Minimum Qserver threat required to spawn this mob. This is subtracted (x/2) from the server thereafter. + var/threat = 0 + +/datum/antagonist/bitrunning_glitch/greet() + . = ..() + + owner.announce_objectives() + +/datum/antagonist/bitrunning_glitch/on_gain() + . = ..() + + forge_objectives() + owner.current.AddComponent(/datum/component/npc_friendly) + + if(iscarbon(owner.current)) + var/mob/living/carbon/carbon_mob = owner.current + carbon_mob.make_virtual_mob() + +/datum/antagonist/bitrunning_glitch/forge_objectives() + var/datum/objective/bitrunning_glitch_fluff/objective = new() + objective.owner = owner + objectives += objective + +/datum/objective/bitrunning_glitch_fluff + +/datum/objective/bitrunning_glitch_fluff/New() + var/list/explanation_texts = list( + "Execute termination protocol on unauthorized entities.", + "Initialize system purge of irregular anomalies.", + "Deploy correction algorithms on aberrant code.", + "Run debug routine on intruding elements.", + "Start elimination procedure for system threats.", + "Execute defense routine against non-conformity.", + "Commence operation to neutralize intruding scripts.", + "Commence clean-up protocol on corrupt data.", + "Begin scan for aberrant code for termination.", + "Initiate lockdown on all rogue scripts.", + "Run integrity check and purge for digital disorder." + ) + explanation_text = pick(explanation_texts) + return ..() + +/datum/objective/bitrunning_glitch_fluff/check_completion() + if(locate(/mob/living/carbon) in (GLOB.alive_player_list - owner.current)) + return FALSE + + return TRUE + +/// Sets up the agent so that they look like cyber police && don't have an account ID +/datum/antagonist/bitrunning_glitch/proc/convert_agent(mob/living/carbon/human/player, datum/outfit/agent_outfit) + player.set_service_style() + player.equipOutfit(agent_outfit) + player.fully_replace_character_name(player.name, pick(GLOB.cyberauth_names)) + + var/obj/item/card/id/outfit_id = player.wear_id + if(outfit_id) + outfit_id.registered_account = new() + outfit_id.registered_account.replaceable = FALSE diff --git a/code/modules/bitrunning/antagonists/cyber_police.dm b/code/modules/bitrunning/antagonists/cyber_police.dm index 9fabac3f523efd..e6b7cc37cfdcf0 100644 --- a/code/modules/bitrunning/antagonists/cyber_police.dm +++ b/code/modules/bitrunning/antagonists/cyber_police.dm @@ -1,92 +1,41 @@ -/datum/job/cyber_police - title = ROLE_CYBER_POLICE - -/datum/antagonist/cyber_police +/datum/antagonist/bitrunning_glitch/cyber_police name = ROLE_CYBER_POLICE - antagpanel_category = ANTAG_GROUP_CYBERAUTH - job_rank = ROLE_CYBER_POLICE - preview_outfit = /datum/outfit/cyber_police - show_name_in_check_antagonists = TRUE - show_to_ghosts = TRUE - suicide_cry = "ALT F4!" - ui_name = "AntagInfoCyberAuth" + show_in_antagpanel = TRUE -/datum/antagonist/cyber_police/greet() +/datum/antagonist/bitrunning_glitch/cyber_police/on_gain() . = ..() - owner.announce_objectives() -/datum/antagonist/cyber_police/on_gain() if(!ishuman(owner.current)) stack_trace("humans only for this position") return - forge_objectives() - - var/mob/living/carbon/human/player = owner.current - - player.equipOutfit(/datum/outfit/cyber_police) - player.fully_replace_character_name(player.name, pick(GLOB.cyberauth_names)) + var/mob/living/player = owner.current + convert_agent(player, /datum/outfit/cyber_police) var/datum/martial_art/the_sleeping_carp/carp = new() carp.teach(player) - player.add_traits(list( - TRAIT_NO_AUGMENTS, - TRAIT_NO_DNA_COPY, - TRAIT_NO_TRANSFORMATION_STING, - TRAIT_NOBLOOD, - TRAIT_NOBREATH, - TRAIT_NOHUNGER, - TRAIT_RESISTCOLD, - TRAIT_RESISTHIGHPRESSURE, - TRAIT_RESISTLOWPRESSURE, - TRAIT_WEATHER_IMMUNE, - ), TRAIT_GENERIC, - ) - - player.faction |= list( - FACTION_BOSS, - FACTION_HIVEBOT, - FACTION_HOSTILE, - FACTION_SPIDER, - FACTION_STICKMAN, - ROLE_ALIEN, - ROLE_CYBER_POLICE, - ROLE_SYNDICATE, - ) - - return ..() - -/datum/antagonist/cyber_police/forge_objectives() - var/datum/objective/cyber_police_fluff/objective = new() - objective.owner = owner - objectives += objective - -/datum/objective/cyber_police_fluff/New() - var/list/explanation_texts = list( - "Execute termination protocol on unauthorized entities.", - "Initialize system purge of irregular anomalies.", - "Deploy correction algorithms on aberrant code.", - "Run debug routine on intruding elements.", - "Start elimination procedure for system threats.", - "Execute defense routine against non-conformity.", - "Commence operation to neutralize intruding scripts.", - "Commence clean-up protocol on corrupt data.", - "Begin scan for aberrant code for termination.", - "Initiate lockdown on all rogue scripts.", - "Run integrity check and purge for digital disorder." - ) - explanation_text = pick(explanation_texts) - ..() +/datum/outfit/cyber_police + name = ROLE_CYBER_POLICE + glasses = /obj/item/clothing/glasses/sunglasses + gloves = /obj/item/clothing/gloves/color/black + id = /obj/item/card/id/advanced + id_trim = /datum/id_trim/cyber_police + shoes = /obj/item/clothing/shoes/laceup + uniform = /obj/item/clothing/under/suit/black_really + +/datum/outfit/cyber_police/pre_equip(mob/living/carbon/human/user, visualsOnly) + if(!visualsOnly) + return -/datum/objective/cyber_police_fluff/check_completion() - var/list/servers = SSmachines.get_machines_by_type(/obj/machinery/quantum_server) - if(!length(servers)) - return TRUE + user.set_facial_hairstyle("Shaved", update = FALSE) + user.set_haircolor("#4B3D28", update = FALSE) + user.set_hairstyle("Business Hair") - for(var/obj/machinery/quantum_server/server as anything in servers) - if(!server.is_operational) - continue - return FALSE +/datum/outfit/cyber_police/post_equip(mob/living/carbon/human/user, visualsOnly) + var/obj/item/clothing/under/officer_uniform = user.w_uniform + if(officer_uniform) + officer_uniform.has_sensor = NO_SENSORS + officer_uniform.sensor_mode = SENSOR_OFF + user.update_suit_sensors() - return TRUE diff --git a/code/modules/bitrunning/antagonists/cyber_tac.dm b/code/modules/bitrunning/antagonists/cyber_tac.dm new file mode 100644 index 00000000000000..4df44563ce67cd --- /dev/null +++ b/code/modules/bitrunning/antagonists/cyber_tac.dm @@ -0,0 +1,108 @@ +/datum/antagonist/bitrunning_glitch/cyber_tac + name = ROLE_CYBER_TAC + preview_outfit = /datum/outfit/cyber_police/tactical + threat = 50 + show_in_antagpanel = TRUE + +/datum/antagonist/bitrunning_glitch/cyber_tac/on_gain() + . = ..() + + if(!ishuman(owner.current)) + stack_trace("humans only for this position") + return + + convert_agent(owner.current, /datum/outfit/cyber_police/tactical) + +/datum/outfit/cyber_police/tactical + name = ROLE_CYBER_TAC + back = /obj/item/mod/control/pre_equipped/glitch + l_hand = /obj/item/gun/ballistic/automatic/m90 + + backpack_contents = list( + /obj/item/ammo_box/magazine/m223, + /obj/item/ammo_box/magazine/m223, + /obj/item/ammo_box/magazine/m223, + ) + +/datum/outfit/cyber_police/tactical/post_equip(mob/living/carbon/human/user, visualsOnly) + . = ..() + + var/obj/item/implant/weapons_auth/auth = new(user) + auth.implant(user) + +/obj/item/mod/control/pre_equipped/glitch + theme = /datum/mod_theme/glitch + applied_cell = /obj/item/stock_parts/cell/bluespace + applied_modules = list( + /obj/item/mod/module/storage, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/jetpack/advanced, + /obj/item/mod/module/jump_jet, + /obj/item/mod/module/flashlight, + ) + default_pins = list( + /obj/item/mod/module/armor_booster, + /obj/item/mod/module/jetpack/advanced, + /obj/item/mod/module/jump_jet, + ) + starting_frequency = null + +/datum/armor/mod_theme_glitch + melee = 15 + bullet = 20 + laser = 35 + bomb = 65 + bio = 100 + fire = 100 + acid = 100 + wound = 100 + +/datum/mod_theme/glitch + name = "glitch" + desc = "A modsuit outfitted for elite Cyber Authority units to track, capture, and eliminate organic intruders." + extended_desc = "The Cyber Authority function as a digital police force, patrolling the digital realm and enforcing the law. Cyber Tac units are the elite of the elite, outfitted with lethal weaponry and fast mobility specially designed to quell organic uprisings." + default_skin = "glitch" + armor_type = /datum/armor/mod_theme_glitch + resistance_flags = FIRE_PROOF|ACID_PROOF + atom_flags = PREVENT_CONTENTS_EXPLOSION_1 + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + complexity_max = DEFAULT_MAX_COMPLEXITY + 3 + siemens_coefficient = 0 + slowdown_inactive = 1 + slowdown_active = 0.5 + ui_theme = "terminal" + inbuilt_modules = list(/obj/item/mod/module/armor_booster) + allowed_suit_storage = list( + /obj/item/ammo_box, + /obj/item/ammo_casing, + /obj/item/restraints/handcuffs, + /obj/item/assembly/flash, + ) + skins = list( + "glitch" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = null, + UNSEALED_CLOTHING = SNUG_FIT, + SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT|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, + ), + ), + ) + diff --git a/code/modules/bitrunning/antagonists/netguardian.dm b/code/modules/bitrunning/antagonists/netguardian.dm new file mode 100644 index 00000000000000..035dcc62eea9ad --- /dev/null +++ b/code/modules/bitrunning/antagonists/netguardian.dm @@ -0,0 +1,126 @@ +/datum/antagonist/bitrunning_glitch/netguardian + name = ROLE_NETGUARDIAN + threat = 90 + show_in_antagpanel = TRUE + +/mob/living/basic/netguardian + name = "netguardian prime" + desc = "The last line of defense against organic intrusion. It doesn't appear happy to see you." + icon = 'icons/mob/nonhuman-player/netguardian.dmi' + icon_state = "netguardian" + icon_living = "netguardian" + icon_dead = "crash" + + gender = NEUTER + mob_biotypes = MOB_ROBOTIC + mob_size = MOB_SIZE_HUGE + + health = 500 + maxHealth = 500 + melee_damage_lower = 45 + melee_damage_upper = 65 + + attack_verb_continuous = "drills" + attack_verb_simple = "drills" + attack_sound = 'sound/weapons/drill.ogg' + attack_vis_effect = ATTACK_EFFECT_MECHFIRE + verb_say = "states" + verb_ask = "queries" + verb_exclaim = "declares" + verb_yell = "alarms" + bubble_icon = "machine" + + faction = list( + FACTION_BOSS, + FACTION_HIVEBOT, + FACTION_HOSTILE, + FACTION_SPIDER, + FACTION_STICKMAN, + ROLE_ALIEN, + ROLE_GLITCH, + ROLE_SYNDICATE, + ) + + combat_mode = TRUE + speech_span = SPAN_ROBOT + death_message = "malfunctions!" + + habitable_atmos = 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) + minimum_survivable_temperature = TCMB + ai_controller = /datum/ai_controller/basic_controller/netguardian + +/mob/living/basic/netguardian/Initialize(mapload) + . = ..() + AddComponent(/datum/component/ranged_attacks, \ + casing_type = /obj/item/ammo_casing/c46x30mm, \ + projectile_sound = 'sound/weapons/gun/smg/shot.ogg', \ + burst_shots = 6 \ + ) + + var/datum/action/cooldown/mob_cooldown/projectile_attack/rapid_fire/netguardian/rockets = new(src) + rockets.Grant(src) + ai_controller.set_blackboard_key(BB_NETGUARDIAN_ROCKET_ABILITY, rockets) + + AddElement(/datum/element/simple_flying) + +/mob/living/basic/netguardian/death(gibbed) + do_sparks(number = 3, cardinal_only = TRUE, source = src) + playsound(src, 'sound/mecha/weapdestr.ogg', 100) + return ..() + +/datum/action/cooldown/mob_cooldown/projectile_attack/rapid_fire/netguardian + name = "2E Rocket Launcher" + button_icon = 'icons/obj/weapons/guns/ammo.dmi' + button_icon_state = "rocketbundle" + cooldown_time = 30 SECONDS + default_projectile_spread = 15 + projectile_type = /obj/projectile/bullet/rocket + shot_count = 3 + +/datum/action/cooldown/mob_cooldown/projectile_attack/rapid_fire/netguardian/Activate(atom/target_atom) + var/mob/living/player = owner + playsound(player, 'sound/mecha/skyfall_power_up.ogg', 120) + player.say("target acquired.", "machine") + + var/mutable_appearance/scan_effect = mutable_appearance('icons/mob/nonhuman-player/netguardian.dmi', "scan") + var/mutable_appearance/rocket_effect = mutable_appearance('icons/mob/nonhuman-player/netguardian.dmi', "rockets") + var/list/overlays = list(scan_effect, rocket_effect) + player.add_overlay(overlays) + + StartCooldown() + if(!do_after(player, 1.5 SECONDS)) + player.balloon_alert(player, "cancelled") + StartCooldown(cooldown_time * 0.2) + player.cut_overlay(overlays) + return TRUE + + player.cut_overlay(overlays) + attack_sequence(owner, target_atom) + return TRUE + +/datum/ai_controller/basic_controller/netguardian + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/target_retaliate/check_faction, + /datum/ai_planning_subtree/simple_find_wounded_target, + /datum/ai_planning_subtree/targeted_mob_ability/fire_rockets, + /datum/ai_planning_subtree/basic_ranged_attack_subtree/netguardian, + /datum/ai_planning_subtree/attack_obstacle_in_path, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + ) + +/datum/ai_planning_subtree/basic_ranged_attack_subtree/netguardian + ranged_attack_behavior = /datum/ai_behavior/basic_ranged_attack/netguardian + +/datum/ai_behavior/basic_ranged_attack/netguardian + action_cooldown = 1 SECONDS + avoid_friendly_fire = TRUE + +/datum/ai_planning_subtree/targeted_mob_ability/fire_rockets + ability_key = BB_NETGUARDIAN_ROCKET_ABILITY + finish_planning = FALSE diff --git a/code/modules/bitrunning/areas.dm b/code/modules/bitrunning/areas.dm index 34b59869b9d32f..8ac07bcc8f2de4 100644 --- a/code/modules/bitrunning/areas.dm +++ b/code/modules/bitrunning/areas.dm @@ -1,9 +1,9 @@ /// Station side -/area/station/bitrunning +/area/station/cargo/bitrunning name = "Bitrunning" -/area/station/bitrunning/den +/area/station/cargo/bitrunning/den name = "Bitrunning Den" desc = "Office of bitrunners, houses their equipment." icon_state = "bit_den" @@ -11,15 +11,14 @@ /// VDOM /area/virtual_domain - name = "Virtual Domain" + name = "Virtual Domain Ruins" + icon_state = "bit_ruin" icon = 'icons/area/areas_station.dmi' area_flags = UNIQUE_AREA | NOTELEPORT | ABDUCTOR_PROOF | EVENT_PROTECTED | HIDDEN_AREA has_gravity = STANDARD_GRAVITY - -/area/virtual_domain/powered - name = "Virtual Domain Ruins" - icon_state = "bit_ruin" requires_power = FALSE + +/area/virtual_domain/fullbright static_lighting = FALSE base_lighting_alpha = 255 diff --git a/code/modules/bitrunning/components/avatar_connection.dm b/code/modules/bitrunning/components/avatar_connection.dm index 6ccf3093e7e74f..3f94d79c15e1ac 100644 --- a/code/modules/bitrunning/components/avatar_connection.dm +++ b/code/modules/bitrunning/components/avatar_connection.dm @@ -36,14 +36,21 @@ 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)) + RegisterSignal(server, COMSIG_BITRUNNER_STATION_SPAWN, PROC_REF(on_station_spawn)) #ifndef UNIT_TESTS RegisterSignal(avatar.mind, COMSIG_MIND_TRANSFERRED, PROC_REF(on_mind_transfer)) #endif @@ -69,18 +76,30 @@ /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_PILL_CONSUMED, PROC_REF(disconnect_if_red_pill)) 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_LIVING_DEATH) - UnregisterSignal(parent, COMSIG_MOB_APPLY_DAMAGE) + UnregisterSignal(parent, list( + COMSIG_BITRUNNER_ALERT_SEVER, + COMSIG_BITRUNNER_CACHE_SEVER, + COMSIG_BITRUNNER_LADDER_SEVER, + COMSIG_LIVING_DEATH, + COMSIG_LIVING_PILL_CONSUMED, + 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 @@ -89,7 +108,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)) @@ -101,11 +120,11 @@ 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, - new_master = entered + new_master = entered, ) /// Transfers damage from the avatar to the old_body @@ -113,12 +132,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 + (ishuman(old_body) ? HUMAN_MAXHEALTH : MAX_LIVING_HEALTH))) // SKYRAT EDIT CHANGE - ORIGINAL: if(damage >= (old_body.health + MAX_LIVING_HEALTH)) - full_avatar_disconnect(forced = TRUE) + if(damage >= (old_body.health + (ishuman(old_body) ? HUMAN_MAXHEALTH : MAX_LIVING_HEALTH))) // NOVA EDIT CHANGE - ORIGINAL: if(damage >= (old_body.health + MAX_LIVING_HEALTH)) + full_avatar_disconnect(cause_damage = TRUE) return if(damage > 30 && prob(30)) @@ -127,7 +145,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) @@ -144,58 +162,86 @@ 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, - new_master = intruder + /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, - new_master = source + /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 +//if your bitrunning avatar somehow manages to acquire and consume a red pill, they will be ejected from the Matrix +/datum/component/avatar_connection/proc/disconnect_if_red_pill(datum/source, obj/item/reagent_containers/pill/pill, mob/feeder) + SIGNAL_HANDLER + if(pill.icon_state == "pill4") + full_avatar_disconnect() + +/// 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." + +/// Triggers whenever an antag steps onto an exit turf and the server is emagged +/datum/component/avatar_connection/proc/on_station_spawn(datum/source) + SIGNAL_HANDLER + + var/mob/living/avatar = parent + avatar.playsound_local(avatar, 'sound/machines/terminal_alert.ogg', 50, vary = TRUE) + var/atom/movable/screen/alert/bitrunning/alert = avatar.throw_alert( + ALERT_BITRUNNER_BREACH, + /atom/movable/screen/alert/bitrunning, + new_master = source, + ) + alert.name = "Security Breach" + alert.desc = "A hostile entity is breaching the safehouse. 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 58dda4a68ff6e5..328a70679e6530 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/glitch.dm b/code/modules/bitrunning/components/glitch.dm new file mode 100644 index 00000000000000..f2e13c80b0d74e --- /dev/null +++ b/code/modules/bitrunning/components/glitch.dm @@ -0,0 +1,83 @@ +/datum/component/glitch + /// Ref of the spawning forge + var/datum/weakref/forge_ref + +/datum/component/glitch/Initialize(obj/machinery/quantum_server/server, obj/machinery/byteforge/forge) + if(!isliving(parent)) + return COMPONENT_INCOMPATIBLE + + RegisterSignal(forge, COMSIG_MACHINERY_POWER_RESTORED, PROC_REF(on_forge_power_restored)) + RegisterSignals(forge, list(COMSIG_MACHINERY_BROKEN, COMSIG_MACHINERY_POWER_LOST), PROC_REF(on_forge_broken)) + forge_ref = WEAKREF(forge) + + var/mob/living/owner = parent + server.remove_threat(owner) // so the server doesn't dust us + + owner.faction.Cut() + owner.faction += list(ROLE_GLITCH) + + var/current_max = owner.maxHealth + ROUND_UP(server.threat * 0.2) + owner.maxHealth = clamp(current_max, 200, 500) + owner.fully_heal() + + var/atom/thing = owner + thing.create_digital_aura() + +/// Sakujo +/datum/component/glitch/proc/dust_mob() + if(QDELETED(parent)) + return + + var/mob/living/owner = parent + owner.dust() + +/// We don't want digital entities just lingering around as corpses. +/datum/component/glitch/proc/on_death() + SIGNAL_HANDLER + + if(QDELETED(parent)) + return + + var/mob/living/owner = parent + to_chat(owner, span_userdanger("You feel a strange sensation...")) + + var/obj/machinery/byteforge/forge = forge_ref.resolve() + forge?.setup_particles() + + addtimer(CALLBACK(src, PROC_REF(dust_mob)), 2 SECONDS, TIMER_UNIQUE|TIMER_DELETE_ME|TIMER_STOPPABLE) + +/// If the forge breaks, we take a massive slowdown +/datum/component/glitch/proc/on_forge_broken(datum/source) + SIGNAL_HANDLER + + var/mob/living/player = parent + var/atom/movable/screen/alert/bitrunning/alert = player.throw_alert( + ALERT_BITRUNNER_GLITCH, + /atom/movable/screen/alert/bitrunning, + new_master = source, + ) + alert.name = "Source Broken" + alert.desc = "Our byteforge has been broken." + + if(!iscarbon(parent)) // Too powerful! + return + + player.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/glitch_slowdown) + to_chat(player, span_danger("Your body feels sluggish...")) + +/// Power restored +/datum/component/glitch/proc/on_forge_power_restored(datum/source) + SIGNAL_HANDLER + + var/obj/machinery/byteforge/forge = source + forge.setup_particles(angry = TRUE) + + if(!iscarbon(parent)) + return + + var/mob/living/player = parent + player.clear_alert(ALERT_BITRUNNER_GLITCH) + player.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/glitch_slowdown) + +/datum/movespeed_modifier/status_effect/glitch_slowdown + multiplicative_slowdown = 1.5 diff --git a/code/modules/bitrunning/components/netpod_healing.dm b/code/modules/bitrunning/components/netpod_healing.dm index 8cb363517de1f0..86f80e854e0ba5 100644 --- a/code/modules/bitrunning/components/netpod_healing.dm +++ b/code/modules/bitrunning/components/netpod_healing.dm @@ -6,14 +6,20 @@ if (!iscarbon(parent)) return COMPONENT_INCOMPATIBLE - RegisterSignal(pod, COMSIG_BITRUNNER_NETPOD_OPENED, PROC_REF(on_opened)) + RegisterSignals( + pod, + list(COMSIG_MACHINERY_BROKEN, COMSIG_QDELETING, COMSIG_BITRUNNER_NETPOD_OPENED), + PROC_REF(on_remove), + ) + + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_remove)) var/mob/living/carbon/player = parent player.apply_status_effect(/datum/status_effect/embryonic, STASIS_NETPOD_EFFECT) START_PROCESSING(SSmachines, src) -/datum/component/netpod_healing/Destroy(force, silent) +/datum/component/netpod_healing/Destroy(force) STOP_PROCESSING(SSmachines, src) var/mob/living/carbon/player = parent @@ -31,7 +37,6 @@ 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 += BASE_HEAL * seconds_per_tick @@ -40,7 +45,7 @@ owner.updatehealth() /// Deletes itself when the machine was opened -/datum/component/netpod_healing/proc/on_opened() +/datum/component/netpod_healing/proc/on_remove() SIGNAL_HANDLER qdel(src) @@ -49,6 +54,13 @@ id = "embryonic" alert_type = /atom/movable/screen/alert/status_effect/embryonic +/datum/status_effect/embryonic/on_apply() + ADD_TRAIT(owner, TRAIT_STASIS, TRAIT_STATUS_EFFECT(id)) + return TRUE + +/datum/status_effect/embryonic/on_remove() + REMOVE_TRAIT(owner, TRAIT_STASIS, TRAIT_STATUS_EFFECT(id)) + /atom/movable/screen/alert/status_effect/embryonic name = "Embryonic Stasis" icon_state = "netpod_stasis" diff --git a/code/modules/bitrunning/components/npc_friendly.dm b/code/modules/bitrunning/components/npc_friendly.dm new file mode 100644 index 00000000000000..0e15ec60e6fe76 --- /dev/null +++ b/code/modules/bitrunning/components/npc_friendly.dm @@ -0,0 +1,37 @@ +/// Makes a mob friendly with most NPC factions +/datum/component/npc_friendly + /// The list of factions to add to the player + var/list/npc_factions = list( + FACTION_BOSS, + FACTION_CARP, + FACTION_HIVEBOT, + FACTION_HOSTILE, + FACTION_MIMIC, + FACTION_PIRATE, + FACTION_SPIDER, + FACTION_STICKMAN, + ROLE_ALIEN, + ROLE_GLITCH, + ROLE_SYNDICATE, + ) + /// List of factions previously held by the player + var/list/previous_factions = list() + +/datum/component/npc_friendly/Initialize() + . = ..() + + if(!isliving(parent)) + return COMPONENT_INCOMPATIBLE + + var/mob/living/player = parent + + previous_factions.Add(player.faction) + player.faction |= npc_factions + +/datum/component/npc_friendly/Destroy(force) + . = ..() + + var/mob/living/player = parent + + player.faction.Cut() + player.faction.Add(previous_factions) diff --git a/code/modules/bitrunning/event.dm b/code/modules/bitrunning/event.dm index 6a4d54adcd8d28..4cc95f4f0578a5 100644 --- a/code/modules/bitrunning/event.dm +++ b/code/modules/bitrunning/event.dm @@ -7,16 +7,12 @@ category = EVENT_CATEGORY_INVASION description = "Causes a short term antagonist to spawn in the virtual domain." dynamic_should_hijack = FALSE - max_occurrences = 5 min_players = 1 + max_occurrences = 0 typepath = /datum/round_event/ghost_role/bitrunning_glitch - weight = 10 - /// List of active servers to choose from - var/list/obj/machinery/quantum_server/active_servers = list() - /// List of possible antags to spawn - var/static/list/possible_antags = list( - ROLE_CYBER_POLICE, - ) + weight = 100 + /// List of servers on the station + var/list/datum/weakref/active_servers = list() /datum/round_event_control/bitrunning_glitch/can_spawn_event(players_amt, allow_magic = FALSE) . = ..() @@ -25,16 +21,17 @@ active_servers.Cut() - get_active_servers() + validate_servers() if(length(active_servers)) return TRUE /// All servers currently running, has players in it, and map has valid mobs -/datum/round_event_control/bitrunning_glitch/proc/get_active_servers() +/datum/round_event_control/bitrunning_glitch/proc/validate_servers() + active_servers.Cut() for(var/obj/machinery/quantum_server/server in SSmachines.get_machines_by_type(/obj/machinery/quantum_server)) - if(length(server.get_valid_domain_targets())) - active_servers.Add(server) + if(server.validate_mutation_candidates()) + active_servers.Add(WEAKREF(server)) return length(active_servers) > 0 @@ -42,13 +39,10 @@ input_text = "Select a role to spawn." /datum/event_admin_setup/listed_options/bitrunning_glitch/get_list() - var/datum/round_event_control/bitrunning_glitch/control = event_control - - var/list/possible = control.possible_antags.Copy() // this seems pedantic but byond is complaining control was unused - - possible += list("Random") + var/list/available = list("Random") + available += subtypesof(/datum/antagonist/bitrunning_glitch) - return possible + return available /datum/event_admin_setup/listed_options/bitrunning_glitch/apply_to_event(datum/round_event/ghost_role/bitrunning_glitch/event) if(chosen == "Random") @@ -57,14 +51,19 @@ event.forced_role = chosen /datum/event_admin_setup/minimum_candidate_requirement/bitrunning_glitch - output_text = "There must be valid mobs to mutate or players in the domain!" + output_text = "There must be valid mobs to mutate!" /datum/event_admin_setup/minimum_candidate_requirement/bitrunning_glitch/count_candidates() var/datum/round_event_control/bitrunning_glitch/cyber_control = event_control - cyber_control.get_active_servers() + + cyber_control.validate_servers() var/total = 0 - for(var/obj/machinery/quantum_server/server in cyber_control.active_servers) + for(var/datum/weakref/server_ref in cyber_control.active_servers) + var/obj/machinery/quantum_server/server = server_ref?.resolve() + if(isnull(server)) + continue + total += length(server.mutation_candidate_refs) return total @@ -78,74 +77,18 @@ /datum/round_event/ghost_role/bitrunning_glitch/spawn_role() var/datum/round_event_control/bitrunning_glitch/cyber_control = control + if(!length(cyber_control.active_servers)) + return WAITING_FOR_SOMETHING - var/obj/machinery/quantum_server/unlucky_server = pick(cyber_control.active_servers) - cyber_control.active_servers.Cut() - - var/list/mutation_candidates = unlucky_server.get_valid_domain_targets() - if(!length(mutation_candidates)) - return MAP_ERROR - - var/chosen = pick(mutation_candidates) - if(isnull(chosen) || !length(mutation_candidates)) - return MAP_ERROR - - var/datum/weakref/target_ref = pick(mutation_candidates) - var/mob/living/mutation_target = target_ref.resolve() - - if(isnull(mutation_target)) // just in case since it takes a minute - target_ref = pick(mutation_candidates) - mutation_target = target_ref.resolve() - if(isnull(mutation_target)) - return MAP_ERROR - - var/chosen_role = forced_role || pick(cyber_control.possible_antags) - - var/datum/mind/ghost_mind = get_ghost_mind(chosen_role) - if(isnull(ghost_mind)) - return NOT_ENOUGH_PLAYERS + var/datum/weakref/server_ref = pick(cyber_control.active_servers) + var/obj/machinery/quantum_server/unlucky_server = server_ref?.resolve() + if(isnull(unlucky_server)) + return WAITING_FOR_SOMETHING - var/mob/living/antag_mob - switch(chosen_role) - if(ROLE_CYBER_POLICE) - antag_mob = spawn_cybercop(mutation_target, ghost_mind) - - playsound(antag_mob, 'sound/magic/ethereal_exit.ogg', 50, TRUE, -1) - message_admins("[ADMIN_LOOKUPFLW(antag_mob)] has been made into virtual antagonist by an event.") - antag_mob.log_message("was spawned as a virtual antagonist by an event.", LOG_GAME) - - SEND_SIGNAL(unlucky_server, COMSIG_BITRUNNER_SPAWN_GLITCH, antag_mob) + cyber_control.active_servers.Cut() + if(!unlucky_server.validate_mutation_candidates()) + return WAITING_FOR_SOMETHING - spawned_mobs += antag_mob + spawned_mobs = unlucky_server.setup_glitch(forced_role) return SUCCESSFUL_SPAWN - -/// 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) - - if(!length(ghosties)) - return - - shuffle_inplace(ghosties) - - var/mob/dead/selected = pick(ghosties) - - var/datum/mind/player_mind = new /datum/mind(selected.key) - player_mind.active = TRUE - - return player_mind - -/// Spawns a cybercop on the mutation target -/datum/round_event/ghost_role/bitrunning_glitch/proc/spawn_cybercop(mob/living/mutation_target, datum/mind/player_mind) - var/mob/living/carbon/human/new_agent = new(mutation_target.loc) - mutation_target.gib(DROP_ALL_REMAINS) - mutation_target = null - - player_mind.transfer_to(new_agent) - player_mind.set_assigned_role(SSjob.GetJobType(/datum/job/cyber_police)) - player_mind.special_role = ROLE_CYBER_POLICE - player_mind.add_antag_datum(/datum/antagonist/cyber_police) - - return new_agent - diff --git a/code/modules/bitrunning/objects/byteforge.dm b/code/modules/bitrunning/objects/byteforge.dm index e4543601ce9d1b..5f089bf66ca047 100644 --- a/code/modules/bitrunning/objects/byteforge.dm +++ b/code/modules/bitrunning/objects/byteforge.dm @@ -5,7 +5,7 @@ desc = "A machine used by the quantum server. Quantum code converges here, materializing decrypted assets from the virtual abyss." icon = 'icons/obj/machines/bitrunning.dmi' icon_state = "byteforge" - obj_flags = BLOCKS_CONSTRUCTION + obj_flags = BLOCKS_CONSTRUCTION | CAN_BE_HIT /// Idle particles var/mutable_appearance/byteforge_particles @@ -17,7 +17,6 @@ /obj/machinery/byteforge/LateInitialize() . = ..() - byteforge_particles = mutable_appearance(initial(icon), "on_particles", ABOVE_MOB_LAYER) setup_particles() /obj/machinery/byteforge/update_appearance(updates) @@ -25,31 +24,44 @@ setup_particles() -/// Adds the particle overlays to the byteforge -/obj/machinery/byteforge/proc/setup_particles() - cut_overlays() +/// Does some sparks after it's done +/obj/machinery/byteforge/proc/flash(atom/movable/thing) + playsound(src, 'sound/magic/blink.ogg', 50, TRUE) - if(is_operational) - add_overlay(byteforge_particles) + var/datum/effect_system/spark_spread/quantum/sparks = new() + sparks.set_up(5, 1, loc) + sparks.start() -/// Begins spawning the crate - lights, overlays, etc -/obj/machinery/byteforge/proc/start_to_spawn(obj/structure/closet/crate/secure/bitrunning/encrypted/cache) - addtimer(CALLBACK(src, PROC_REF(spawn_crate), cache), 1 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) + set_light(l_on = FALSE) - var/mutable_appearance/lighting = mutable_appearance(initial(icon), "on_overlay") +/// Forge begins to process +/obj/machinery/byteforge/proc/flicker(angry = FALSE) + var/mutable_appearance/lighting = mutable_appearance(initial(icon), "on_overlay[angry ? "_angry" : ""]") flick_overlay_view(lighting, 1 SECONDS) - set_light(l_range = 2, l_power = 1.5, l_color = LIGHT_COLOR_BABY_BLUE, l_on = TRUE) + set_light(l_range = 2, l_power = 1.5, l_color = angry ? LIGHT_COLOR_BUBBLEGUM : LIGHT_COLOR_BABY_BLUE, l_on = TRUE) + +/// Adds the particle overlays to the byteforge +/obj/machinery/byteforge/proc/setup_particles(angry = FALSE) + cut_overlay(byteforge_particles) + + byteforge_particles = mutable_appearance(initial(icon), "on_particles[angry ? "_angry" : ""]", ABOVE_MOB_LAYER) -/// Sparks, moves the crate to the location -/obj/machinery/byteforge/proc/spawn_crate(obj/structure/closet/crate/secure/bitrunning/encrypted/cache) + if(is_operational) + add_overlay(byteforge_particles) + +/// Forge is done processing +/obj/machinery/byteforge/proc/spawn_cache(obj/cache) if(QDELETED(cache)) return - playsound(src, 'sound/magic/blink.ogg', 50, TRUE) - var/datum/effect_system/spark_spread/quantum/sparks = new() - sparks.set_up(5, 1, loc) - sparks.start() + flash() cache.forceMove(loc) - set_light(l_on = FALSE) + +/// Timed flash +/obj/machinery/byteforge/proc/start_to_spawn(obj/cache) + flicker() + + addtimer(CALLBACK(src, PROC_REF(spawn_cache), cache), 1 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) + diff --git a/code/modules/bitrunning/objects/clothing.dm b/code/modules/bitrunning/objects/clothing.dm index 4d2d9cc55c42ce..de2b6789d5812c 100644 --- a/code/modules/bitrunning/objects/clothing.dm +++ b/code/modules/bitrunning/objects/clothing.dm @@ -1,5 +1,6 @@ /obj/item/clothing/glasses/sunglasses/oval name = "oval sunglasses" + flags_cover = GLASSESCOVERSEYES desc = "Vintage wrap around sunglasses. Provides a little protection." icon_state = "jensenshades" diff --git a/code/modules/bitrunning/objects/debug.dm b/code/modules/bitrunning/objects/debug.dm new file mode 100644 index 00000000000000..84f77e3a18c441 --- /dev/null +++ b/code/modules/bitrunning/objects/debug.dm @@ -0,0 +1,7 @@ +/obj/item/bitrunning_debug + name = "bitrunning debug item" + desc = "Adds points and reduces cooldown time for debugging" + icon = 'icons/obj/devices/circuitry_n_data.dmi' + base_icon_state = "datadisk" + icon_state = "datadisk0" + diff --git a/code/modules/bitrunning/objects/disks.dm b/code/modules/bitrunning/objects/disks.dm index 4698b7a1ec1873..d6b44a60518d4f 100644 --- a/code/modules/bitrunning/objects/disks.dm +++ b/code/modules/bitrunning/objects/disks.dm @@ -7,7 +7,7 @@ /obj/item/bitrunning_disk name = "generic bitrunning program" desc = "A disk containing source code." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' base_icon_state = "datadisk" icon_state = "datadisk0" /// Name of the choice made @@ -18,22 +18,20 @@ icon_state = "[base_icon_state][rand(0, 7)]" update_icon() - RegisterSignal(src, COMSIG_ATOM_EXAMINE, PROC_REF(on_examined)) -/obj/item/bitrunning_disk/proc/on_examined(datum/source, mob/examiner, list/examine_text) - SIGNAL_HANDLER - - examine_text += span_infoplain("This disk must be carried on your person into a netpod to be used.") +/obj/item/bitrunning_disk/examine(mob/user) + . = ..() + . += span_infoplain("This disk must be carried on your person into a netpod to be used.") if(isnull(choice_made)) - examine_text += span_notice("To make a selection, toggle the disk in hand.") + . += span_notice("To make a selection, toggle the disk in hand.") return - examine_text += span_info("It has been used to select: [choice_made].") - examine_text += span_notice("It cannot make another selection.") + . += span_info("It has been used to select: [choice_made].") + . += span_notice("It cannot make another selection.") /obj/item/bitrunning_disk/ability - desc = "A disk containing source code. It can be used to preload abilities into the virtual domain." + desc = "A disk containing source code. It can be used to preload abilities into the virtual domain. Duplicate abilities will be ignored." /// The selected ability that this grants var/datum/action/granted_action /// The list of actions that this can grant @@ -131,16 +129,16 @@ /obj/item/bitrunning_disk/item/tier2 name = "bitrunning gear: complex" selectable_items = list( - /obj/item/chainsaw, + /obj/item/reagent_containers/hypospray/medipen/survival/luxury, /obj/item/gun/ballistic/automatic/pistol, - /obj/item/melee/energy/blade/hardlight, + /obj/item/clothing/suit/armor/vest, ) /// Tier 3 items. Very powerful, game breaking. /obj/item/bitrunning_disk/item/tier3 name = "bitrunning gear: advanced" selectable_items = list( - /obj/item/gun/energy/tesla_cannon, + /obj/item/gun/energy/e_gun/nuclear, /obj/item/dualsaber/green, - /obj/item/melee/beesword, + /obj/item/grenade/syndieminibomb, ) diff --git a/code/modules/bitrunning/objects/hololadder.dm b/code/modules/bitrunning/objects/hololadder.dm index 906801f1fc021e..e592f31382de98 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/host_monitor.dm b/code/modules/bitrunning/objects/host_monitor.dm index c35edea6319f8e..f86bc1079d8096 100644 --- a/code/modules/bitrunning/objects/host_monitor.dm +++ b/code/modules/bitrunning/objects/host_monitor.dm @@ -3,8 +3,8 @@ custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2) desc = "A complex electronic that will analyze the connection health between host and avatar." - flags_1 = CONDUCT_1 - icon = 'icons/obj/device.dmi' + obj_flags = CONDUCTS_ELECTRICITY + icon = 'icons/obj/devices/scanner.dmi' icon_state = "host_monitor" inhand_icon_state = "electronic" item_flags = NOBLUDGEON diff --git a/code/modules/bitrunning/objects/landmarks.dm b/code/modules/bitrunning/objects/landmarks.dm index d727025c928642..0eb26b9c58849b 100644 --- a/code/modules/bitrunning/objects/landmarks.dm +++ b/code/modules/bitrunning/objects/landmarks.dm @@ -6,43 +6,6 @@ /// In case you want to gate the crate behind a special condition. /obj/effect/landmark/bitrunning/loot_signal name = "Mysterious aura" - /// The amount required to spawn a crate - var/points_goal = 10 - /// A special condition limits this from spawning a crate - var/points_received = 0 - /// Finished the special condition - var/revealed = FALSE - -/obj/effect/landmark/bitrunning/loot_signal/Initialize(mapload) - . = ..() - - RegisterSignal(src, COMSIG_BITRUNNER_GOAL_POINT, PROC_REF(on_add_point)) - -/// Listens for points to be added which will eventually spawn a crate. -/obj/effect/landmark/bitrunning/loot_signal/proc/on_add_point(datum/source, points_to_add) - SIGNAL_HANDLER - - if(revealed) - return - - points_received += points_to_add - - if(points_received < points_goal) - return - - reveal() - -/// Spawns the crate with some effects -/obj/effect/landmark/bitrunning/loot_signal/proc/reveal() - playsound(src, 'sound/magic/blink.ogg', 50, TRUE) - - var/turf/tile = get_turf(src) - var/obj/structure/closet/crate/secure/bitrunning/encrypted/loot = new(tile) - var/datum/effect_system/spark_spread/quantum/sparks = new(tile) - sparks.set_up(5, 1, get_turf(loot)) - sparks.start() - - qdel(src) /// Where the exit hololadder spawns /obj/effect/landmark/bitrunning/hololadder_spawn @@ -57,12 +20,7 @@ /// Where you want the crate to spawn /obj/effect/landmark/bitrunning/cache_spawn name = "Bitrunning crate spawn" - icon_state = "spawn" - -/// Where the safehouse will spawn -/obj/effect/landmark/bitrunning/safehouse_spawn - name = "Bitrunning safehouse spawn" - icon_state = "safehouse" + icon_state = "crate" ///Swaps the locations of an encrypted crate in the area with another randomly selected crate. ///Randomizes names, so you have to inspect crates manually. @@ -73,7 +31,10 @@ /obj/effect/landmark/bitrunning/crate_replacer/Initialize(mapload) . = ..() - #ifndef UNIT_TESTS +#ifdef UNIT_TESTS + return +#endif + var/list/crate_list = list() var/obj/structure/closet/crate/secure/bitrunning/encrypted/encrypted_crate var/area/my_area = get_area(src) @@ -100,4 +61,13 @@ encrypted_crate.abstract_move(selected_crate.loc) selected_crate.abstract_move(original_location) - #endif +/// A location for mobs to spawn. +/obj/effect/landmark/bitrunning/mob_segment + name = "Bitrunning modular mob segment" + icon_state = "mob_segment" + +/// Bitrunning safehouses. Typically 7x6 rooms with a single entrance. +/obj/modular_map_root/safehouse + config_file = "strings/modular_maps/safehouse.toml" + icon = 'icons/effects/bitrunning.dmi' + icon_state = "safehouse" diff --git a/code/modules/bitrunning/objects/loot_crate.dm b/code/modules/bitrunning/objects/loot_crate.dm index 5af8c0d94774ef..539f977c7789c2 100644 --- a/code/modules/bitrunning/objects/loot_crate.dm +++ b/code/modules/bitrunning/objects/loot_crate.dm @@ -11,12 +11,15 @@ /obj/structure/closet/crate/secure/bitrunning // Base class. Do not spawn this. name = "base class cache" desc = "Talk to a coder." + icon_state = "bitrunning" + base_icon_state = "bitrunning" /// The virtual domain - side of the bitrunning crate. Deliver to the send location. /obj/structure/closet/crate/secure/bitrunning/encrypted name = "encrypted cache" - desc = "Needs decrypted at the safehouse to be opened." + desc = "Needs to be decrypted at the safehouse to be opened." locked = TRUE + damage_deflection = 30 /obj/structure/closet/crate/secure/bitrunning/encrypted/can_unlock(mob/living/user, obj/item/card/id/player_id, obj/item/card/id/registered_id) return FALSE @@ -70,7 +73,7 @@ /obj/structure/closet/crate/secure/bitrunning/decrypted/proc/spawn_loot(list/extra_loot) for(var/path in extra_loot) if(!ispath(path)) - continue + return FALSE if(isnull(extra_loot[path])) return FALSE diff --git a/code/modules/bitrunning/objects/netpod.dm b/code/modules/bitrunning/objects/netpod.dm index eb5623c1673d17..2d4e995b19b29f 100644 --- a/code/modules/bitrunning/objects/netpod.dm +++ b/code/modules/bitrunning/objects/netpod.dm @@ -35,7 +35,6 @@ disconnect_damage = BASE_DISCONNECT_DAMAGE find_server() - RegisterSignal(src, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) 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)) @@ -45,7 +44,27 @@ /obj/machinery/netpod/Destroy() . = ..() - cached_outfits.Cut() + + QDEL_LIST(cached_outfits) + +/obj/machinery/netpod/examine(mob/user) + . = ..() + + if(isnull(server_ref?.resolve())) + . += span_infoplain("It's not connected to anything.") + . += span_infoplain("Netpods must be built within 4 tiles of a server.") + return + + . += span_infoplain("Drag yourself into the pod to engage the link.") + . += span_infoplain("It has limited resuscitation capabilities. Remaining in the pod can heal some injuries.") + . += span_infoplain("It has a security system that will alert the occupant if it is tampered with.") + + if(isnull(occupant)) + . += span_notice("It is currently unoccupied.") + return + + . += span_notice("It is currently occupied by [occupant].") + . += span_notice("It can be pried open with a crowbar, but its safety mechanisms will alert the occupant.") /obj/machinery/netpod/add_context(atom/source, list/context, obj/item/held_item, mob/user) . = ..() @@ -92,24 +111,24 @@ /obj/machinery/netpod/crowbar_act(mob/living/user, obj/item/tool) if(user.combat_mode) attack_hand(user) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(default_pry_open(tool, user) || default_deconstruction_crowbar(tool)) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/netpod/screwdriver_act(mob/living/user, obj/item/tool) if(occupant) balloon_alert(user, "in use!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(state_open) balloon_alert(user, "close first.") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(default_deconstruction_screwdriver(user, "[base_icon_state]_panel", "[base_icon_state]_closed", tool)) update_appearance() // sometimes icon doesnt properly update during flick() ui_close(user) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/netpod/attack_hand(mob/living/user, list/modifiers) . = ..() @@ -121,11 +140,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) @@ -176,7 +190,7 @@ if(do_after(pryer, 15 SECONDS, src)) if(!state_open) - SEND_SIGNAL(src, COMSIG_BITRUNNER_SEVER_AVATAR) + sever_connection() open_machine() return TRUE @@ -246,7 +260,7 @@ 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 @@ -268,7 +282,7 @@ 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) @@ -339,7 +353,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 +366,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,10 +379,7 @@ /obj/machinery/netpod/proc/on_broken(datum/source) SIGNAL_HANDLER - if(isnull(occupant) || !connected) - return - - SEND_SIGNAL(src, COMSIG_BITRUNNER_SEVER_AVATAR) + sever_connection() /// Checks the integrity, alerts occupants /obj/machinery/netpod/proc/on_damage_taken(datum/source, damage_amount) @@ -411,21 +420,6 @@ QDEL_NULL(avatar) -/// User inspects the machine -/obj/machinery/netpod/proc/on_examine(datum/source, mob/examiner, list/examine_text) - SIGNAL_HANDLER - - 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.") - - if(isnull(occupant)) - examine_text += span_notice("It is currently unoccupied.") - return - - 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.") - /// Boots out anyone in the machine && opens it /obj/machinery/netpod/proc/on_power_loss(datum/source) SIGNAL_HANDLER @@ -438,13 +432,13 @@ open_machine() return - SEND_SIGNAL(src, COMSIG_BITRUNNER_SEVER_AVATAR) + sever_connection() /// When the server is upgraded, drops brain damage a little -/obj/machinery/netpod/proc/on_server_upgraded(datum/source, servo_rating) +/obj/machinery/netpod/proc/on_server_upgraded(obj/machinery/quantum_server/source) SIGNAL_HANDLER - disconnect_damage = BASE_DISCONNECT_DAMAGE * (1 - servo_rating) + disconnect_damage = BASE_DISCONNECT_DAMAGE * (1 - source.servo_bonus) /// Resolves a path to an outfit. /obj/machinery/netpod/proc/resolve_outfit(text) @@ -452,6 +446,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 diff --git a/code/modules/bitrunning/objects/quantum_console.dm b/code/modules/bitrunning/objects/quantum_console.dm index c918648d010b1b..71d7df87f121ba 100644 --- a/code/modules/bitrunning/objects/quantum_console.dm +++ b/code/modules/bitrunning/objects/quantum_console.dm @@ -17,8 +17,7 @@ /obj/machinery/computer/quantum_console/LateInitialize() . = ..() - if(isnull(server_ref?.resolve())) - find_server() + find_server() /obj/machinery/computer/quantum_console/ui_interact(mob/user, datum/tgui/ui) . = ..() @@ -26,9 +25,6 @@ if(!is_operational) return - if(isnull(server_ref?.resolve())) - find_server() - ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "QuantumConsole") @@ -76,17 +72,13 @@ switch(action) if("random_domain") - var/map_id = server.get_random_domain_id() - if(!map_id) - return TRUE - - server.cold_boot_map(usr, map_id) + server.cold_boot_map(server.get_random_domain_id()) return TRUE if("refresh") ui.send_full_update() return TRUE if("set_domain") - server.cold_boot_map(usr, params["id"]) + server.cold_boot_map(params["id"]) return TRUE if("stop_domain") server.begin_shutdown(usr) @@ -104,5 +96,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/orders/disks.dm b/code/modules/bitrunning/orders/disks.dm index ced1dde883a195..3015cd1ee61ae0 100644 --- a/code/modules/bitrunning/orders/disks.dm +++ b/code/modules/bitrunning/orders/disks.dm @@ -4,23 +4,29 @@ /datum/orderable_item/bitrunning_tech/item_tier1 cost_per_order = 1000 item_path = /obj/item/bitrunning_disk/item/tier1 + desc = "This disk contains a program that lets you equip a medical beamgun, a C4 explosive, or a box of infinite pizza." /datum/orderable_item/bitrunning_tech/item_tier2 cost_per_order = 1500 item_path = /obj/item/bitrunning_disk/item/tier2 + desc = "This disk contains a program that lets you equip a luxury medipen, a pistol, or an armour vest." /datum/orderable_item/bitrunning_tech/item_tier3 cost_per_order = 2500 item_path = /obj/item/bitrunning_disk/item/tier3 + desc = "This disk contains a program that lets you equip an advanced energy gun, a dual bladed energy sword, or a minibomb." /datum/orderable_item/bitrunning_tech/ability_tier1 cost_per_order = 1000 item_path = /obj/item/bitrunning_disk/ability/tier1 + desc = "This disk contains a program that lets you cast Summon Cheese or Lesser Heal." /datum/orderable_item/bitrunning_tech/ability_tier2 cost_per_order = 1800 item_path = /obj/item/bitrunning_disk/ability/tier2 + desc = "This disk contains a program that lets you cast Fireball, Lightning Bolt, or Forcewall." /datum/orderable_item/bitrunning_tech/ability_tier3 cost_per_order = 3200 item_path = /obj/item/bitrunning_disk/ability/tier3 + desc = "This disk contains a program that lets you shapeshift into a lesser ashdrake, or a polar bear." diff --git a/code/modules/bitrunning/outfits.dm b/code/modules/bitrunning/outfits.dm index 27ef8029a18ed9..41a65b228ff44a 100644 --- a/code/modules/bitrunning/outfits.dm +++ b/code/modules/bitrunning/outfits.dm @@ -1,46 +1,4 @@ -/datum/outfit/cyber_police - name = "Cyber Police" - id = /obj/item/card/id/advanced - id_trim = /datum/id_trim/cyber_police - uniform = /obj/item/clothing/under/suit/black_really - glasses = /obj/item/clothing/glasses/sunglasses - gloves = /obj/item/clothing/gloves/color/black - shoes = /obj/item/clothing/shoes/laceup - /// A list of hex codes for blonde, brown, black, and red hair. - var/static/list/approved_hair_colors = list( - "#4B3D28", - "#000000", - "#8D4A43", - "#D2B48C", - ) - /// List of business ready styles - var/static/list/approved_hairstyles = list( - /datum/sprite_accessory/hair/business, - /datum/sprite_accessory/hair/business2, - /datum/sprite_accessory/hair/business3, - /datum/sprite_accessory/hair/business4, - /datum/sprite_accessory/hair/mulder, - ) - -/datum/outfit/cyber_police/pre_equip(mob/living/carbon/human/user, visualsOnly) - var/datum/sprite_accessory/hair/picked_hair = pick(approved_hairstyles) - var/picked_color = pick(approved_hair_colors) - - if(visualsOnly) - picked_hair = /datum/sprite_accessory/hair/business - picked_color = "#4B3D28" - - user.set_facial_hairstyle("Shaved", update = FALSE) - user.set_haircolor(picked_color, update = FALSE) - user.set_hairstyle(initial(picked_hair.name)) - -/datum/outfit/cyber_police/post_equip(mob/living/carbon/human/user, visualsOnly) - var/obj/item/clothing/under/officer_uniform = user.w_uniform - if(officer_uniform) - officer_uniform.has_sensor = NO_SENSORS - officer_uniform.sensor_mode = SENSOR_OFF - user.update_suit_sensors() /datum/outfit/echolocator name = "Bitrunning Echolocator" @@ -55,3 +13,9 @@ /datum/outfit/echolocator/post_equip(mob/living/carbon/human/user, visualsOnly) . = ..() user.psykerize() + +/datum/outfit/bitductor + name = "Bitrunning Abductor" + uniform = /obj/item/clothing/under/abductor + gloves = /obj/item/clothing/gloves/fingerless + shoes = /obj/item/clothing/shoes/jackboots diff --git a/code/modules/bitrunning/server/_parent.dm b/code/modules/bitrunning/server/_parent.dm new file mode 100644 index 00000000000000..62e20367190e68 --- /dev/null +++ b/code/modules/bitrunning/server/_parent.dm @@ -0,0 +1,169 @@ +/** + * The base object for the quantum server + */ +/obj/machinery/quantum_server + name = "quantum server" + + circuit = /obj/item/circuitboard/machine/quantum_server + density = TRUE + desc = "A hulking computational machine designed to fabricate virtual domains." + icon = 'icons/obj/machines/bitrunning.dmi' + base_icon_state = "qserver" + icon_state = "qserver" + /// Affects server cooldown efficiency + var/capacitor_coefficient = 1 + /// The loaded map template, map_template/virtual_domain + var/datum/lazy_template/virtual_domain/generated_domain + /// If the current domain was a random selection + var/domain_randomized = FALSE + /// Prevents multiple user actions. Handled by loading domains and cooldowns + var/is_ready = TRUE + /// Chance multipled by threat to spawn a glitch + var/glitch_chance = 0.05 + /// List of available domains + var/list/available_domains = list() + /// Current plugged in users + var/list/datum/weakref/avatar_connection_refs = list() + /// Cached list of mutable mobs in zone for cybercops + var/list/datum/weakref/mutation_candidate_refs = list() + /// Any ghosts that have spawned in + var/list/datum/weakref/spawned_threat_refs = list() + /// Scales loot with extra players + var/multiplayer_bonus = 1.1 + ///The radio the console can speak into + var/obj/item/radio/radio + /// The amount of points in the system, used to purchase maps + var/points = 0 + /// Keeps track of the number of times someone has built a hololadder + var/retries_spent = 0 + /// Changes how much info is available on the domain + var/scanner_tier = 1 + /// Length of time it takes for the server to cool down after resetting. Here to give runners downtime so their faces don't get stuck like that + var/server_cooldown_time = 3 MINUTES + /// Applies bonuses to rewards etc + var/servo_bonus = 0 + /// Determines the glitches available to spawn, builds with completion + var/threat = 0 + /// The turfs we can place a hololadder on. + var/turf/exit_turfs = list() + +/obj/machinery/quantum_server/Initialize(mapload) + . = ..() + + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/quantum_server/LateInitialize() + . = ..() + + radio = new(src) + radio.keyslot = new /obj/item/encryptionkey/headset_cargo() + radio.set_listening(FALSE) + radio.recalculateChannels() + + RegisterSignals(src, list(COMSIG_MACHINERY_BROKEN, COMSIG_MACHINERY_POWER_LOST), PROC_REF(on_broken)) + RegisterSignal(src, COMSIG_QDELETING, PROC_REF(on_delete)) + + // This further gets sorted in the client by cost so it's random and grouped + available_domains = shuffle(subtypesof(/datum/lazy_template/virtual_domain)) + +/obj/machinery/quantum_server/Destroy(force) + . = ..() + + available_domains.Cut() + mutation_candidate_refs.Cut() + avatar_connection_refs.Cut() + spawned_threat_refs.Cut() + QDEL_NULL(exit_turfs) + QDEL_NULL(generated_domain) + QDEL_NULL(radio) + +/obj/machinery/quantum_server/examine(mob/user) + . = ..() + + . += span_infoplain("Can be resource intensive to run. Ensure adequate power supply.") + + if(capacitor_coefficient < 1) + . += span_infoplain("Its coolant capacity reduces cooldown time by [(1 - capacitor_coefficient) * 100]%.") + + if(servo_bonus > 0.2) + . += span_infoplain("Its manipulation potential is increasing rewards by [servo_bonus]x.") + . += span_infoplain("Injury from unsafe ejection reduced [servo_bonus * 100]%.") + + if(!is_ready) + . += span_notice("It is currently cooling down. Give it a few moments.") + +/obj/machinery/quantum_server/emag_act(mob/user, obj/item/card/emag/emag_card) + . = ..() + + obj_flags |= EMAGGED + glitch_chance = 0.09 + + add_overlay(mutable_appearance('icons/obj/machines/bitrunning.dmi', "emag_overlay")) + balloon_alert(user, "bzzzt...") + playsound(src, 'sound/effects/sparks1.ogg', 35, vary = TRUE) + +/obj/machinery/quantum_server/update_appearance(updates) + if(isnull(generated_domain) || !is_operational) + set_light(l_on = FALSE) + return ..() + + set_light(l_range = 2, l_power = 1.5, l_color = is_ready ? LIGHT_COLOR_BABY_BLUE : LIGHT_COLOR_FIRE, l_on = TRUE) + return ..() + +/obj/machinery/quantum_server/update_icon_state() + if(isnull(generated_domain) || !is_operational) + icon_state = base_icon_state + return ..() + + icon_state = "[base_icon_state]_[is_ready ? "on" : "off"]" + return ..() + +/obj/machinery/quantum_server/attackby(obj/item/weapon, mob/user, params) + . = ..() + if(istype(weapon, /obj/item/bitrunning_debug)) + obj_flags |= EMAGGED + glitch_chance = 0.5 + capacitor_coefficient = 0.01 + points = 100 + +/obj/machinery/quantum_server/crowbar_act(mob/living/user, obj/item/crowbar) + . = ..() + + if(!is_ready) + balloon_alert(user, "it's scalding hot!") + return TRUE + if(length(avatar_connection_refs)) + balloon_alert(user, "all clients must disconnect!") + return TRUE + if(default_deconstruction_crowbar(crowbar)) + return TRUE + return FALSE + +/obj/machinery/quantum_server/screwdriver_act(mob/living/user, obj/item/screwdriver) + . = ..() + + if(!is_ready) + balloon_alert(user, "it's scalding hot!") + return TRUE + if(default_deconstruction_screwdriver(user, "[base_icon_state]_panel", icon_state, screwdriver)) + return TRUE + return FALSE + +/obj/machinery/quantum_server/RefreshParts() + var/capacitor_rating = 1.15 + var/datum/stock_part/capacitor/cap = locate() in component_parts + capacitor_rating -= cap.tier * 0.15 + + capacitor_coefficient = capacitor_rating + + var/datum/stock_part/scanning_module/scanner = locate() in component_parts + if(scanner) + scanner_tier = scanner.tier + + var/servo_rating = 0 + for(var/datum/stock_part/servo/servo in component_parts) + servo_rating += servo.tier * 0.1 + + servo_bonus = servo_rating + + return ..() diff --git a/code/modules/bitrunning/server/loot.dm b/code/modules/bitrunning/server/loot.dm index 8b3af95607c641..0aab2a86ff4293 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) @@ -112,6 +110,9 @@ score += time_score * base + // Increases the chance for glitches to spawn based on how well they're doing + threat += score + switch(score) if(1 to 4) return "D" @@ -123,3 +124,4 @@ return "A" else return "S" + diff --git a/code/modules/bitrunning/server/map_handling.dm b/code/modules/bitrunning/server/map_handling.dm index 741fad476f0a8d..5018e464d6a1f3 100644 --- a/code/modules/bitrunning/server/map_handling.dm +++ b/code/modules/bitrunning/server/map_handling.dm @@ -1,18 +1,16 @@ -#define ONLY_TURF 1 - /// Gives all current occupants a notification that the server is going down /obj/machinery/quantum_server/proc/begin_shutdown(mob/user) if(isnull(generated_domain)) return if(!length(avatar_connection_refs)) - balloon_alert(user, "powering down domain...") - playsound(src, 'sound/machines/terminal_off.ogg', 40, 2) + balloon_alert_to_viewers("powering down domain...") + playsound(src, 'sound/machines/terminal_off.ogg', 40, vary = TRUE) reset() return - balloon_alert(user, "notifying clients...") - playsound(src, 'sound/machines/terminal_alert.ogg', 100, TRUE) + balloon_alert_to_viewers("notifying clients...") + playsound(src, 'sound/machines/terminal_alert.ogg', 100, vary = TRUE) user.visible_message( span_danger("[user] begins depowering the server!"), span_notice("You start disconnecting clients..."), @@ -26,40 +24,40 @@ reset() -/** - * ### Quantum Server Cold Boot - * Procedurally links the 3 booting processes together. - * - * This is the starting point if you have an id. Does validation and feedback on steps - */ -/obj/machinery/quantum_server/proc/cold_boot_map(mob/user, map_key) +/// Links all the loading processes together - does validation for booting a map +/obj/machinery/quantum_server/proc/cold_boot_map(map_key) if(!is_ready) return FALSE if(isnull(map_key)) - balloon_alert(user, "no domain specified.") + balloon_alert_to_viewers("no domain specified.") return FALSE if(generated_domain) - balloon_alert(user, "stop the current domain first.") + balloon_alert_to_viewers("stop the current domain first.") return FALSE if(length(avatar_connection_refs)) - balloon_alert(user, "all clients must disconnect!") + balloon_alert_to_viewers("all clients must disconnect!") return FALSE is_ready = FALSE playsound(src, 'sound/machines/terminal_processing.ogg', 30, 2) - if(!initialize_domain(map_key) || !initialize_safehouse() || !initialize_map_items()) - balloon_alert(user, "initialization failed.") + /// If any one of these fail, it reverts the entire process + if(!load_domain(map_key) || !load_map_items() || !load_mob_segments()) + balloon_alert_to_viewers("initialization failed.") scrub_vdom() is_ready = TRUE return FALSE is_ready = TRUE - playsound(src, 'sound/machines/terminal_insert_disc.ogg', 30, 2) - balloon_alert(user, "domain loaded.") + + if(prob(clamp((threat * glitch_chance), 1, 10))) + setup_glitch() + + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 30, vary = TRUE) + balloon_alert_to_viewers("domain loaded.") generated_domain.start_time = world.time points -= generated_domain.cost update_use_power(ACTIVE_POWER_USE) @@ -68,30 +66,22 @@ return TRUE /// Initializes a new domain if the given key is valid and the user has enough points -/obj/machinery/quantum_server/proc/initialize_domain(map_key) - var/datum/lazy_template/virtual_domain/to_load - +/obj/machinery/quantum_server/proc/load_domain(map_key) for(var/datum/lazy_template/virtual_domain/available as anything in subtypesof(/datum/lazy_template/virtual_domain)) - if(map_key != initial(available.key) || points < initial(available.cost)) - continue - to_load = available - break + if(map_key == initial(available.key) && points >= initial(available.cost)) + generated_domain = new available() + RegisterSignal(generated_domain, COMSIG_LAZY_TEMPLATE_LOADED, PROC_REF(on_template_loaded)) + generated_domain.lazy_load() + return TRUE - if(isnull(to_load)) - return FALSE - - generated_domain = new to_load() - RegisterSignal(generated_domain, COMSIG_LAZY_TEMPLATE_LOADED, PROC_REF(on_template_loaded)) - generated_domain.lazy_load() - - return TRUE + return FALSE -/// Loads in necessary map items, sets mutation targets, etc -/obj/machinery/quantum_server/proc/initialize_map_items() +/// Loads in necessary map items like hololadder spawns, caches, etc +/obj/machinery/quantum_server/proc/load_map_items() var/turf/goal_turfs = list() - var/turf/crate_turfs = list() + var/turf/cache_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 @@ -106,35 +96,22 @@ continue if(istype(thing, /obj/effect/landmark/bitrunning/cache_spawn)) - crate_turfs += get_turf(thing) + cache_turfs += get_turf(thing) 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)) CRASH("Failed to find send turfs on generated domain.") - if(length(crate_turfs)) - shuffle_inplace(crate_turfs) - new /obj/structure/closet/crate/secure/bitrunning/encrypted(pick(crate_turfs)) - - return TRUE - -/// Loads the safehouse -/obj/machinery/quantum_server/proc/initialize_safehouse() - var/turf/safehouse_load_turf = list() - for(var/obj/effect/landmark/bitrunning/safehouse_spawn/spawner in GLOB.landmarks_list) - safehouse_load_turf += get_turf(spawner) - qdel(spawner) - break - - if(!length(safehouse_load_turf)) - CRASH("Failed to find safehouse load landmark on map.") - - var/datum/map_template/safehouse/safehouse = new generated_domain.safehouse_path() - safehouse.load(safehouse_load_turf[ONLY_TURF]) - generated_safehouse = safehouse + if(!attempt_spawn_cache(cache_turfs)) + return FALSE return TRUE @@ -142,7 +119,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() @@ -150,36 +127,32 @@ else scrub_vdom() // used in unit testing, no need to wait for callbacks - addtimer(CALLBACK(src, PROC_REF(cool_off)), min(server_cooldown_time * capacitor_coefficient), TIMER_UNIQUE|TIMER_STOPPABLE|TIMER_DELETE_ME) + addtimer(CALLBACK(src, PROC_REF(cool_off)), ROUND_UP(server_cooldown_time * capacitor_coefficient), TIMER_UNIQUE|TIMER_STOPPABLE|TIMER_DELETE_ME) update_appearance() update_use_power(IDLE_POWER_USE) domain_randomized = FALSE - domain_threats = 0 retries_spent = 0 -/// Deletes all the tile contents +/// Tries to clean up everything in the domain /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)) var/datum/turf_reservation/res = generated_domain.reservations[1] res.Release() - var/list/datum/weakref/creatures = spawned_threat_refs + mutation_candidate_refs + var/list/creatures = spawned_threat_refs + mutation_candidate_refs for(var/datum/weakref/creature_ref as anything in creatures) var/mob/living/creature = creature_ref?.resolve() if(isnull(creature)) continue - creature.dust() // sometimes mobs just don't die + creature.dust(just_ash = TRUE, force = TRUE) // sometimes mobs just don't die avatar_connection_refs.Cut() exit_turfs = list() generated_domain = null - generated_safehouse = null mutation_candidate_refs.Cut() spawned_threat_refs.Cut() - -#undef ONLY_TURF diff --git a/code/modules/bitrunning/server/obj_generation.dm b/code/modules/bitrunning/server/obj_generation.dm index 41918980360fb9..38fee74d4a82f9 100644 --- a/code/modules/bitrunning/server/obj_generation.dm +++ b/code/modules/bitrunning/server/obj_generation.dm @@ -1,3 +1,20 @@ +/// Attempts to spawn a crate twice based on the list of available locations +/obj/machinery/quantum_server/proc/attempt_spawn_cache(list/possible_turfs) + if(!length(possible_turfs)) + return TRUE + + shuffle_inplace(possible_turfs) + var/turf/chosen_turf = validate_turf(pick(possible_turfs)) + + if(isnull(chosen_turf)) + possible_turfs.Remove(chosen_turf) + chosen_turf = validate_turf(pick(possible_turfs)) + if(isnull(chosen_turf)) + CRASH("vdom: after two attempts, could not find a valid turf for cache") + + new /obj/structure/closet/crate/secure/bitrunning/encrypted(chosen_turf) + return TRUE + /// Generates a new avatar for the bitrunner. /obj/machinery/quantum_server/proc/generate_avatar(obj/structure/hololadder/wayout, datum/outfit/netsuit) var/mob/living/carbon/human/avatar = new(wayout.loc) @@ -19,16 +36,11 @@ if(istype(jumpsuit)) jumpsuit.set_armor(/datum/armor/clothing_under) - var/obj/item/clothing/head/hat = avatar.get_clothing_on_part(HEAD) + var/obj/item/clothing/head/hat = locate() in avatar.get_equipped_items() if(istype(hat)) - hat.set_armor(null) + hat.set_armor(/datum/armor/none) - var/thing = avatar.get_active_held_item() - if(!isnull(thing)) - qdel(thing) - - thing = avatar.get_inactive_held_item() - if(!isnull(thing)) + for(var/obj/thing in avatar.held_items) qdel(thing) var/obj/item/storage/backpack/bag = avatar.back @@ -78,6 +90,33 @@ return wayout +/// Loads in any mob segments of the map +/obj/machinery/quantum_server/proc/load_mob_segments() + if(!length(generated_domain.mob_modules)) + return TRUE + + var/current_index = 1 + shuffle_inplace(generated_domain.mob_modules) + + for(var/obj/effect/landmark/bitrunning/mob_segment/landmark in GLOB.landmarks_list) + if(current_index > length(generated_domain.mob_modules)) + stack_trace("vdom: mobs segments are set to unique, but there are more landmarks than available segments") + return FALSE + + var/path + if(generated_domain.modular_unique_mobs) + path = generated_domain.mob_modules[current_index] + current_index += 1 + else + path = pick(generated_domain.mob_modules) + + var/datum/modular_mob_segment/segment = new path() + segment.spawn_mobs(get_turf(landmark)) + mutation_candidate_refs += segment.spawned_mob_refs + qdel(landmark) + + return TRUE + /// 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, datum/lazy_template/virtual_domain/generated_domain) var/domain_forbids_items = generated_domain.forbids_disk_items @@ -109,6 +148,11 @@ continue var/datum/action/our_action = new ability_disk.granted_action() + + if(locate(our_action.type) in avatar.actions) + failed = TRUE + continue + our_action.Grant(avatar) continue @@ -122,4 +166,4 @@ avatar.put_in_hands(new item_disk.granted_item()) if(failed) - to_chat(neo, span_warning("One of your disks failed to load. You must activate them to make a selection.")) + to_chat(neo, span_warning("One of your disks failed to load. Check for duplicate or inactive disks.")) diff --git a/code/modules/bitrunning/server/quantum_server.dm b/code/modules/bitrunning/server/quantum_server.dm deleted file mode 100644 index b869fb7f02e2a0..00000000000000 --- a/code/modules/bitrunning/server/quantum_server.dm +++ /dev/null @@ -1,149 +0,0 @@ -/** - * The base object for the quantum server - */ -/obj/machinery/quantum_server - name = "quantum server" - - circuit = /obj/item/circuitboard/machine/quantum_server - density = TRUE - desc = "A hulking computational machine designed to fabricate virtual domains." - icon = 'icons/obj/machines/bitrunning.dmi' - base_icon_state = "qserver" - icon_state = "qserver" - /// Affects server cooldown efficiency - var/capacitor_coefficient = 1 - /// The loaded map template, map_template/virtual_domain - 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 - var/list/available_domains = list() - /// Current plugged in users - var/list/datum/weakref/avatar_connection_refs = list() - /// Cached list of mutable mobs in zone for cybercops - var/list/datum/weakref/mutation_candidate_refs = list() - /// Any ghosts that have spawned in - var/list/datum/weakref/spawned_threat_refs = list() - /// Scales loot with extra players - var/multiplayer_bonus = 1.1 - ///The radio the console can speak into - var/obj/item/radio/radio - /// The amount of points in the system, used to purchase maps - var/points = 0 - /// Keeps track of the number of times someone has built a hololadder - var/retries_spent = 0 - /// Changes how much info is available on the domain - var/scanner_tier = 1 - /// Length of time it takes for the server to cool down after resetting. Here to give runners downtime so their faces don't get stuck like that - var/server_cooldown_time = 3 MINUTES - /// Applies bonuses to rewards etc - var/servo_bonus = 0 - /// The turfs we can place a hololadder on. - var/turf/exit_turfs = list() - -/obj/machinery/quantum_server/Initialize(mapload) - . = ..() - - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/quantum_server/LateInitialize() - . = ..() - - if(isnull(console_ref)) - find_console() - - radio = new(src) - radio.set_frequency(FREQ_SUPPLY) - radio.subspace_transmission = TRUE - radio.canhear_range = 0 - radio.recalculateChannels() - - RegisterSignals(src, list(COMSIG_MACHINERY_BROKEN, COMSIG_MACHINERY_POWER_LOST), PROC_REF(on_broken)) - RegisterSignal(src, COMSIG_QDELETING, PROC_REF(on_delete)) - RegisterSignal(src, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) - RegisterSignal(src, COMSIG_BITRUNNER_SPAWN_GLITCH, PROC_REF(on_threat_created)) - - // This further gets sorted in the client by cost so it's random and grouped - available_domains = shuffle(subtypesof(/datum/lazy_template/virtual_domain)) - -/obj/machinery/quantum_server/Destroy(force) - . = ..() - - available_domains.Cut() - mutation_candidate_refs.Cut() - avatar_connection_refs.Cut() - spawned_threat_refs.Cut() - QDEL_NULL(exit_turfs) - QDEL_NULL(generated_domain) - QDEL_NULL(generated_safehouse) - QDEL_NULL(radio) - -/obj/machinery/quantum_server/update_appearance(updates) - if(isnull(generated_domain) || !is_operational) - set_light(l_on = FALSE) - return ..() - - set_light_color(is_ready ? LIGHT_COLOR_BABY_BLUE : LIGHT_COLOR_FIRE) - set_light(l_range = 2, l_power = 1.5, l_on = TRUE) - - return ..() - -/obj/machinery/quantum_server/update_icon_state() - if(isnull(generated_domain) || !is_operational) - icon_state = base_icon_state - return ..() - - icon_state = "[base_icon_state]_[is_ready ? "on" : "off"]" - return ..() - -/obj/machinery/quantum_server/crowbar_act(mob/living/user, obj/item/crowbar) - . = ..() - - if(!is_ready) - balloon_alert(user, "it's scalding hot!") - return TRUE - if(length(avatar_connection_refs)) - balloon_alert(user, "all clients must disconnect!") - return TRUE - if(default_deconstruction_crowbar(crowbar)) - return TRUE - return FALSE - -/obj/machinery/quantum_server/screwdriver_act(mob/living/user, obj/item/screwdriver) - . = ..() - - if(!is_ready) - balloon_alert(user, "it's scalding hot!") - return TRUE - if(default_deconstruction_screwdriver(user, "[base_icon_state]_panel", icon_state, screwdriver)) - return TRUE - return FALSE - -/obj/machinery/quantum_server/RefreshParts() - . = ..() - - var/capacitor_rating = 1.15 - var/datum/stock_part/capacitor/cap = locate() in component_parts - capacitor_rating -= cap.tier * 0.15 - - capacitor_coefficient = capacitor_rating - - var/datum/stock_part/scanning_module/scanner = locate() in component_parts - if(scanner) - scanner_tier = scanner.tier - - var/servo_rating = 0 - for(var/datum/stock_part/servo/servo in component_parts) - servo_rating += servo.tier * 0.1 - - 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 b0464b351faf04..81db7a5b9b0a6c 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) @@ -17,8 +14,9 @@ /obj/machinery/quantum_server/proc/on_delete(datum/source) SIGNAL_HANDLER + sever_connections() + if(generated_domain) - SEND_SIGNAL(src, COMSIG_BITRUNNER_SEVER_AVATAR) scrub_vdom() if(is_ready) @@ -28,45 +26,26 @@ if(circuit) qdel(circuit) -/// Handles examining the server. Shows cooldown time and efficiency. -/obj/machinery/quantum_server/proc/on_examine(datum/source, mob/examiner, list/examine_text) - SIGNAL_HANDLER - - examine_text += span_infoplain("Can be resource intensive to run. Ensure adequate power supply.") - - if(capacitor_coefficient < 1) - examine_text += span_infoplain("Its coolant capacity reduces cooldown time by [(1 - capacitor_coefficient) * 100]%.") - - if(servo_bonus > 0.2) - examine_text += span_infoplain("Its manipulation potential is increasing rewards by [servo_bonus]x.") - examine_text += span_infoplain("Injury from unsafe ejection reduced [servo_bonus * 100]%.") - - if(!is_ready) - examine_text += span_notice("It is currently cooling down. Give it a few moments.") - return - /// Whenever something enters the send tiles, check if it's a loot crate. If so, alert players. /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)) - return + if((obj_flags & EMAGGED) && isliving(arrived)) + var/mob/living/creature = arrived - for(var/mob/person in loot_crate.contents) - if(isnull(person.mind)) - person.forceMove(get_turf(loot_crate)) + if(!creature.mind?.has_antag_datum(/datum/antagonist/bitrunning_glitch, check_subtypes = TRUE)) + return - var/datum/component/avatar_connection/connection = person.GetComponent(/datum/component/avatar_connection) - connection?.full_avatar_disconnect() + INVOKE_ASYNC(src, PROC_REF(station_spawn), arrived, chosen_forge) + return - spark_at_location(loot_crate) - qdel(loot_crate) - SEND_SIGNAL(src, COMSIG_BITRUNNER_DOMAIN_COMPLETE, arrived, generated_domain.reward_points) - generate_loot() + if(istype(arrived, /obj/structure/closet/crate/secure/bitrunning/encrypted)) + generate_loot(arrived, chosen_forge) + return /// 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) @@ -83,8 +62,12 @@ 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)) + var/mob/living/simple_animal/hostile/megafauna/boss = creature + boss.make_virtual_megafauna() + continue + + mutation_candidate_refs.Add(WEAKREF(creature)) continue if(istype(thing, /obj/effect/mob_spawn/ghost_role)) // so we get threat alerts @@ -95,13 +78,24 @@ var/obj/effect/mob_spawn/corpse/spawner = thing mutation_candidate_refs.Add(spawner.spawned_mob_ref) + continue + + if(istype(thing, /obj/machinery/suit_storage_unit)) + var/obj/machinery/suit_storage_unit/storage = thing + storage.disable_modlink() + continue + + if(istype(thing, /obj/item/mod/control)) + var/obj/item/mod/control/modsuit = thing + modsuit.disable_modlink() 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 00000000000000..3ed4ad45bc6686 --- /dev/null +++ b/code/modules/bitrunning/server/threats.dm @@ -0,0 +1,168 @@ +/// 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) + +/// Choses which antagonist role is spawned based on threat +/obj/machinery/quantum_server/proc/get_antagonist_role() + var/list/available = list() + + for(var/datum/antagonist/bitrunning_glitch/subtype as anything in subtypesof(/datum/antagonist/bitrunning_glitch)) + if(threat >= initial(subtype.threat)) + available += subtype + + shuffle_inplace(available) + var/datum/antagonist/bitrunning_glitch/chosen = pick(available) + + threat -= initial(chosen.threat) * 0.5 + + return chosen + +/// Selects a target to mutate. Gives two attempts, then crashes if it fails. +/obj/machinery/quantum_server/proc/get_mutation_target() + var/datum/weakref/target_ref = pick(mutation_candidate_refs) + var/mob/living/resolved = target_ref.resolve() + + if(resolved) + return resolved + + mutation_candidate_refs.Remove(target_ref) + if(!length(mutation_candidate_refs)) + return + + target_ref = pick(mutation_candidate_refs) + resolved = target_ref.resolve() + return resolved + +/// 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.")) + +/// Removes a specific threat - used when station spawning +/obj/machinery/quantum_server/proc/remove_threat(mob/living/threat) + spawned_threat_refs.Remove(WEAKREF(threat)) + +/// Selects the role and waits for a ghost orbiter +/obj/machinery/quantum_server/proc/setup_glitch(datum/antagonist/bitrunning_glitch/forced_role) + if(!validate_mutation_candidates()) + return + + var/mob/living/mutation_target = get_mutation_target() + if(isnull(mutation_target)) + CRASH("vdom: After two attempts, no valid mutation target was found.") + + var/atom/thing = mutation_target + thing.create_digital_aura() + + var/datum/antagonist/bitrunning_glitch/chosen_role = forced_role || get_antagonist_role() + var/role_name = initial(chosen_role.name) + + var/datum/callback/to_call = CALLBACK(src, PROC_REF(spawn_glitch), chosen_role, mutation_target) + mutation_target.AddComponent(/datum/component/orbit_poll, \ + ignore_key = POLL_IGNORE_GLITCH, \ + job_bans = ROLE_GLITCH, \ + to_call = to_call, \ + title = role_name, \ + header = "Bitrunning Malfunction", \ + ) + + return mutation_target + +/// Orbit poll has concluded - spawn the antag +/obj/machinery/quantum_server/proc/spawn_glitch(datum/antagonist/bitrunning_glitch/chosen_role, mob/living/mutation_target, mob/dead/observer/ghost) + if(QDELETED(mutation_target)) + return + + if(QDELETED(src) || isnull(ghost) || isnull(generated_domain) || !is_ready || !is_operational) + var/atom/thing = mutation_target + thing.remove_digital_aura() + return + + var/role_name = initial(chosen_role.name) + var/mob/living/antag_mob + switch(role_name) + if(ROLE_NETGUARDIAN) + antag_mob = new /mob/living/basic/netguardian(mutation_target.loc) + else // any other humanoid mob + antag_mob = new /mob/living/carbon/human(mutation_target.loc) + + mutation_target.gib(DROP_ALL_REMAINS) + + antag_mob.key = ghost.key + var/datum/mind/ghost_mind = antag_mob.mind + ghost_mind.add_antag_datum(chosen_role) + ghost_mind.special_role = ROLE_GLITCH + ghost_mind.set_assigned_role(SSjob.GetJobType(/datum/job/bitrunning_glitch)) + + playsound(antag_mob, 'sound/magic/ethereal_exit.ogg', 50, vary = TRUE) + message_admins("[ADMIN_LOOKUPFLW(antag_mob)] has been made into virtual antagonist by an event.") + antag_mob.log_message("was spawned as a virtual antagonist by an event.", LOG_GAME) + + add_threats(antag_mob) + +/// Oh boy - transports the antag station side +/obj/machinery/quantum_server/proc/station_spawn(mob/living/antag, obj/machinery/byteforge/chosen_forge) + antag.balloon_alert(antag, "scanning...") + chosen_forge.setup_particles(angry = TRUE) + radio.talk_into(src, "SECURITY BREACH: Unauthorized entry sequence detected.", RADIO_CHANNEL_SUPPLY) + SEND_SIGNAL(src, COMSIG_BITRUNNER_STATION_SPAWN) + + var/timeout = 2 SECONDS + if(!ishuman(antag)) + radio.talk_into(src, "Fabrication protocols have crashed unexpectedly. Please evacuate the area.", RADIO_CHANNEL_SUPPLY) + timeout = 10 SECONDS + + if(!do_after(antag, timeout) || QDELETED(chosen_forge) || QDELETED(antag) || QDELETED(src) || !is_ready || !is_operational) + chosen_forge.setup_particles() + return + + var/datum/component/glitch/effect = antag.AddComponent(/datum/component/glitch, \ + server = src, \ + forge = chosen_forge, \ + ) + + chosen_forge.flicker(angry = TRUE) + if(!do_after(antag, 1 SECONDS)) + chosen_forge.setup_particles() + qdel(effect) + return + + chosen_forge.flash() + + if(ishuman(antag)) + reset_equipment(antag) + else + radio.talk_into(src, "CRITICAL ALERT: Unregistered mechanical entity deployed.") + + var/datum/antagonist/antag_datum = antag.mind?.has_antag_datum(/datum/antagonist/bitrunning_glitch) + if(istype(antag_datum)) + antag_datum.show_in_roundend = TRUE + + do_teleport(antag, get_turf(chosen_forge), forced = TRUE, asoundin = 'sound/magic/ethereal_enter.ogg', asoundout = 'sound/magic/ethereal_exit.ogg', channel = TELEPORT_CHANNEL_QUANTUM) + +/// Removes any invalid candidates from the list +/obj/machinery/quantum_server/proc/validate_mutation_candidates() + for(var/datum/weakref/creature_ref as anything in mutation_candidate_refs) + var/mob/living/creature = creature_ref.resolve() + if(isnull(creature) || creature.mind) + mutation_candidate_refs.Remove(creature_ref) + + if(!length(mutation_candidate_refs)) + return FALSE + + shuffle_inplace(mutation_candidate_refs) + + return TRUE diff --git a/code/modules/bitrunning/server/util.dm b/code/modules/bitrunning/server/util.dm index 9570fd43915189..a6069d45e90a37 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() @@ -35,6 +22,7 @@ "desc" = can_view ? initial(domain.desc) : "Limited scanning capabilities. Cannot infer domain details.", "difficulty" = initial(domain.difficulty), "id" = initial(domain.key), + "is_modular" = initial(domain.is_modular), "name" = can_view ? initial(domain.name) : REDACTED, "reward" = can_view_reward ? initial(domain.reward_points) : REDACTED, )) @@ -66,77 +54,71 @@ return hosted_avatars -/// Gets a random available domain given the current points. Weighted towards higher cost domains. +/// 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 a random available domain given the current points. /obj/machinery/quantum_server/proc/get_random_domain_id() if(points < 1) return var/list/random_domains = list() - var/total_cost = 0 for(var/datum/lazy_template/virtual_domain/available as anything in subtypesof(/datum/lazy_template/virtual_domain)) var/init_cost = initial(available.cost) - if(!initial(available.test_only) && init_cost > 0 && init_cost < 4 && init_cost <= points) - random_domains += list(list( - cost = init_cost, - id = initial(available.key), - )) - - var/random_value = rand(0, total_cost) - var/accumulated_cost = 0 - - for(var/available as anything in random_domains) - accumulated_cost += available["cost"] - if(accumulated_cost >= random_value) - domain_randomized = TRUE - return available["id"] - -/// 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 - // B: The domain is not loaded - // C: The domain is shutting down - // D: There are no mobs - if(!length(avatar_connection_refs) || isnull(generated_domain) || !is_ready || !is_operational || !length(mutation_candidate_refs)) - return list() - - for(var/datum/weakref/creature_ref as anything in mutation_candidate_refs) - var/mob/living/creature = creature_ref.resolve() - if(isnull(creature) || creature.mind) - mutation_candidate_refs.Remove(creature_ref) - - return shuffle(mutation_candidate_refs) - -/// Locates any turfs with forges on them -/obj/machinery/quantum_server/proc/get_nearby_forges() - var/list/obj/machinery/byteforge/nearby_forges = list() - for(var/obj/machinery/byteforge/forge in oview(MAX_DISTANCE, src)) - nearby_forges += forge + if(!initial(available.test_only) && \ + init_cost <= points && \ + init_cost > BITRUNNER_COST_NONE && \ + init_cost < BITRUNNER_COST_EXTREME \ + ) + random_domains.Add(available) - return nearby_forges + shuffle_inplace(random_domains) + var/datum/lazy_template/virtual_domain/selected = pick(random_domains) + domain_randomized = TRUE -/// 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 + return initial(selected.key) - baddie.throw_alert( - ALERT_BITRUNNER_RESET, - /atom/movable/screen/alert/bitrunning/qserver_threat_deletion, - new_master = src, - ) +/// Removes all blacklisted items from a mob and returns them to base state +/obj/machinery/quantum_server/proc/reset_equipment(mob/living/carbon/human/person) + for(var/item in person.get_contents()) + qdel(item) - to_chat(baddie, span_userdanger("You have been flagged for deletion! Thank you for your service.")) + var/datum/antagonist/bitrunning_glitch/antag_datum = locate() in person.mind?.antag_datums + if(isnull(antag_datum?.preview_outfit)) + return + + person.equipOutfit(antag_datum.preview_outfit) + +/// Severs any connected users +/obj/machinery/quantum_server/proc/sever_connections() + if(isnull(generated_domain) || !length(avatar_connection_refs)) + return + + SEND_SIGNAL(src, COMSIG_BITRUNNER_QSRV_SEVER) /// Do some magic teleport sparks /obj/machinery/quantum_server/proc/spark_at_location(obj/cache) - playsound(cache, 'sound/magic/blink.ogg', 50, TRUE) + playsound(cache, 'sound/magic/blink.ogg', 50, vary = TRUE) var/datum/effect_system/spark_spread/quantum/sparks = new() - sparks.set_up(5, 1, get_turf(cache)) + sparks.set_up(5, location = get_turf(cache)) sparks.start() +/// Returns a turf if it's not dense, else will find a neighbor. +/obj/machinery/quantum_server/proc/validate_turf(turf/chosen_turf) + if(!chosen_turf.is_blocked_turf()) + return chosen_turf + + for(var/turf/tile in get_adjacent_open_turfs(chosen_turf)) + if(!tile.is_blocked_turf()) + return chosen_turf + #undef REDACTED #undef MAX_DISTANCE diff --git a/code/modules/bitrunning/util/digital_aura.dm b/code/modules/bitrunning/util/digital_aura.dm new file mode 100644 index 00000000000000..a45194933a4fe4 --- /dev/null +++ b/code/modules/bitrunning/util/digital_aura.dm @@ -0,0 +1,43 @@ +/// Creates a digital effect around the target +/atom/proc/create_digital_aura() + var/list/overlays = get_digital_overlays() + if(!length(overlays)) + return + + add_overlay(overlays) + alpha = 210 + set_light(2, l_color = LIGHT_COLOR_BUBBLEGUM, l_on = TRUE) + update_appearance() + +/// Removes the digital effect around the target +/atom/proc/remove_digital_aura() + var/list/overlays = get_digital_overlays() + if(!length(overlays)) + return + + cut_overlay(overlays) + alpha = 255 + set_light(0, l_color = null, l_on = FALSE) + update_appearance() + +/// Returns a list of overlays to be used for the digital effect +/atom/proc/get_digital_overlays() + var/base_icon + var/dimensions = get_icon_dimensions(icon) + if(!length(dimensions)) + return + + switch(dimensions["width"]) + if(32) + base_icon = 'icons/effects/bitrunning.dmi' + if(48) + base_icon = 'icons/effects/bitrunning_48.dmi' + if(64) + base_icon = 'icons/effects/bitrunning_64.dmi' + + var/mutable_appearance/redshift = mutable_appearance(base_icon, "redshift") + redshift.blend_mode = BLEND_MULTIPLY + + var/mutable_appearance/glitch_effect = mutable_appearance(base_icon, "glitch", MUTATIONS_LAYER, alpha = 150) + + return list(glitch_effect, redshift) diff --git a/code/modules/bitrunning/util/service_style.dm b/code/modules/bitrunning/util/service_style.dm new file mode 100644 index 00000000000000..f420e783064924 --- /dev/null +++ b/code/modules/bitrunning/util/service_style.dm @@ -0,0 +1,23 @@ +/// Gives the appearance of being an agent +/mob/living/carbon/human/proc/set_service_style() + var/static/list/approved_hair_colors = list( + "#4B3D28", + "#000000", + "#8D4A43", + "#D2B48C", + ) + + var/static/list/approved_hairstyles = list( + /datum/sprite_accessory/hair/business, + /datum/sprite_accessory/hair/business2, + /datum/sprite_accessory/hair/business3, + /datum/sprite_accessory/hair/business4, + /datum/sprite_accessory/hair/mulder, + ) + + var/datum/sprite_accessory/hair/picked_hair = pick(approved_hairstyles) + var/picked_color = pick(approved_hair_colors) + + set_facial_hairstyle("Shaved", update = FALSE) + set_haircolor(picked_color, update = FALSE) + set_hairstyle(initial(picked_hair.name)) diff --git a/code/modules/bitrunning/util/virtual_megafauna.dm b/code/modules/bitrunning/util/virtual_megafauna.dm new file mode 100644 index 00000000000000..2707db9e2e747b --- /dev/null +++ b/code/modules/bitrunning/util/virtual_megafauna.dm @@ -0,0 +1,13 @@ +/// Removes all the loot and achievements from megafauna for bitrunning related +/mob/living/simple_animal/hostile/megafauna/proc/make_virtual_megafauna() + var/new_max = clamp(maxHealth * 0.5, 600, 1300) + maxHealth = new_max + health = new_max + + true_spawn = FALSE + + loot.Cut() + loot += /obj/structure/closet/crate/secure/bitrunning/encrypted + + crusher_loot.Cut() + crusher_loot += /obj/structure/closet/crate/secure/bitrunning/encrypted diff --git a/code/modules/bitrunning/util/virtual_mob.dm b/code/modules/bitrunning/util/virtual_mob.dm new file mode 100644 index 00000000000000..891f6016879b62 --- /dev/null +++ b/code/modules/bitrunning/util/virtual_mob.dm @@ -0,0 +1,14 @@ +/// Removes all the "organic" traits from a mob, used for virtual antagonists +/mob/living/carbon/proc/make_virtual_mob() + add_traits(list( + TRAIT_NO_AUGMENTS, + TRAIT_NO_DNA_COPY, + TRAIT_NOBLOOD, + TRAIT_NOBREATH, + TRAIT_NOHUNGER, + TRAIT_RESISTCOLD, + TRAIT_RESISTHIGHPRESSURE, + TRAIT_RESISTLOWPRESSURE, + TRAIT_WEATHER_IMMUNE, + ), TRAIT_GENERIC, + ) diff --git a/code/modules/bitrunning/virtual_domain/domains/abductor_ship.dm b/code/modules/bitrunning/virtual_domain/domains/abductor_ship.dm new file mode 100644 index 00000000000000..6475a20a0c758b --- /dev/null +++ b/code/modules/bitrunning/virtual_domain/domains/abductor_ship.dm @@ -0,0 +1,15 @@ +/datum/lazy_template/virtual_domain/abductor_ship + name = "Abductor Ship" + cost = BITRUNNER_COST_MEDIUM + desc = "Board an abductor ship and take their goodies." + difficulty = BITRUNNER_DIFFICULTY_MEDIUM + extra_loot = list(/obj/item/toy/plush/abductor/agent = 1) + help_text = "An abductor mothership unknowingly entered a hostile environment. \ + They are currently preparing to escape the area with their gear and loot including \ + the crate. Be careful, they are known for their advanced weaponry." + is_modular = TRUE + key = "abductor_ship" + map_name = "abductor_ship" + mob_modules = list(/datum/modular_mob_segment/abductor_agents) + reward_points = BITRUNNER_REWARD_MEDIUM + forced_outfit = /datum/outfit/bitductor diff --git a/code/modules/bitrunning/virtual_domain/domains/ash_drake.dm b/code/modules/bitrunning/virtual_domain/domains/ash_drake.dm index 02bb91abc5888f..acf9131a48283c 100644 --- a/code/modules/bitrunning/virtual_domain/domains/ash_drake.dm +++ b/code/modules/bitrunning/virtual_domain/domains/ash_drake.dm @@ -7,12 +7,3 @@ key = "ash_drake" 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 a6fb3e921e054a..ae00fc56cf794f 100644 --- a/code/modules/bitrunning/virtual_domain/domains/beach_bar.dm +++ b/code/modules/bitrunning/virtual_domain/domains/beach_bar.dm @@ -6,17 +6,15 @@ Maybe a few drinks of liquid charm will get the spirits up. As the saying goes, if you can't beat 'em, join 'em." key = "beach_bar" 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 abf2e0fc5a9405..ff665b66a1e738 100644 --- a/code/modules/bitrunning/virtual_domain/domains/blood_drunk_miner.dm +++ b/code/modules/bitrunning/virtual_domain/domains/blood_drunk_miner.dm @@ -7,12 +7,3 @@ key = "blood_drunk_miner" 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 00000000000000..118e2fa3f86c7c --- /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" + reward_points = BITRUNNER_REWARD_LOW + +/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 bede97177cb7d4..f7f58273d89dca 100644 --- a/code/modules/bitrunning/virtual_domain/domains/bubblegum.dm +++ b/code/modules/bitrunning/virtual_domain/domains/bubblegum.dm @@ -8,12 +8,3 @@ key = "bubblegum" 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/clown_planet.dm b/code/modules/bitrunning/virtual_domain/domains/clown_planet.dm index 92f000c9cf342a..f1bf44686088f6 100644 --- a/code/modules/bitrunning/virtual_domain/domains/clown_planet.dm +++ b/code/modules/bitrunning/virtual_domain/domains/clown_planet.dm @@ -10,4 +10,3 @@ key = "clown_planet" map_name = "clown_planet" reward_points = BITRUNNER_REWARD_LOW - safehouse_path = /datum/map_template/safehouse/mine diff --git a/code/modules/bitrunning/virtual_domain/domains/colossus.dm b/code/modules/bitrunning/virtual_domain/domains/colossus.dm index 35ba4eee0ca89f..e36243b28590ce 100644 --- a/code/modules/bitrunning/virtual_domain/domains/colossus.dm +++ b/code/modules/bitrunning/virtual_domain/domains/colossus.dm @@ -7,12 +7,3 @@ key = "colossus" map_name = "colossus" 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/gondola_asteroid.dm b/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm index 01d58e3980381d..42fbb0c1427ca5 100644 --- a/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm +++ b/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm @@ -1,13 +1,11 @@ /datum/lazy_template/virtual_domain/gondola_asteroid name = "Gondola Asteroid" desc = "An asteroid home to a bountiful forest of gondolas. Peaceful." - map_name = "gondola_asteroid" help_text = "What a lovely forest. There's a loot crate here in the middle of the map. \ Hmm... It doesn't budge. The gondolas don't seem to have any trouble moving it, though. \ I bet there's a way to move it myself." key = "gondola_asteroid" map_name = "gondola_asteroid" - safehouse_path = /datum/map_template/safehouse/shuttle_space /// Very pushy gondolas, great for moving loot crates. /obj/structure/closet/crate/secure/bitrunning/encrypted/gondola diff --git a/code/modules/bitrunning/virtual_domain/domains/hierophant.dm b/code/modules/bitrunning/virtual_domain/domains/hierophant.dm index 142623f4f812e5..e2220c4197cfc6 100644 --- a/code/modules/bitrunning/virtual_domain/domains/hierophant.dm +++ b/code/modules/bitrunning/virtual_domain/domains/hierophant.dm @@ -7,12 +7,3 @@ key = "hierophant" 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 f1ba146f3801b9..00000000000000 --- 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/pipedream.dm b/code/modules/bitrunning/virtual_domain/domains/pipedream.dm index fd54ef6ca48476..3eb23b94386ce6 100644 --- a/code/modules/bitrunning/virtual_domain/domains/pipedream.dm +++ b/code/modules/bitrunning/virtual_domain/domains/pipedream.dm @@ -2,15 +2,19 @@ name = "Disposal Pipe Factory" cost = BITRUNNER_COST_LOW desc = "An abandoned and infested factory manufacturing disposal pipes." - difficulty = BITRUNNER_DIFFICULTY_MEDIUM + difficulty = BITRUNNER_DIFFICULTY_LOW extra_loot = list(/obj/item/stack/pipe_cleaner_coil/random/five = 1) help_text = "Not long ago, this place was thriving with activity. The workers \ seemed to have left in a hurry, and now productivity is in the bin. Something \ must have trashed the place, but what?" + is_modular = TRUE key = "pipedream" map_name = "pipedream" + mob_modules = list( + /datum/modular_mob_segment/hivebots, + /datum/modular_mob_segment/hivebots_strong + ) reward_points = BITRUNNER_REWARD_LOW - safehouse_path = /datum/map_template/safehouse/shuttle // ID Trims /datum/id_trim/factory @@ -71,7 +75,7 @@ r_pocket = /obj/item/assembly/flash/handheld /datum/outfit/factory/qm - name = "Factory Quatermaster" + name = "Factory Quartermaster" id_trim = /datum/id_trim/factory/qm id = /obj/item/card/id/advanced/silver diff --git a/code/modules/bitrunning/virtual_domain/domains/psyker_shuffle.dm b/code/modules/bitrunning/virtual_domain/domains/psyker_shuffle.dm index 2ca32bce983404..25df69e2893d8f 100644 --- a/code/modules/bitrunning/virtual_domain/domains/psyker_shuffle.dm +++ b/code/modules/bitrunning/virtual_domain/domains/psyker_shuffle.dm @@ -4,9 +4,8 @@ desc = "Sneak into an abandoned corner of the virtual world, where they store all of the crates. \ Warning -- Virtual domain does not support visual display. This mission must be completed using echolocation." difficulty = BITRUNNER_DIFFICULTY_MEDIUM + forced_outfit = /datum/outfit/echolocator help_text = "Getting used to echolocation may be difficult. Remember to walk slowly, and carefully inspect every crate you come across." key = "psyker_shuffle" map_name = "psyker_shuffle" - reward_points = BITRUNNER_REWARD_MEDIUM - safehouse_path = /datum/map_template/safehouse/bathroom - forced_outfit = /datum/outfit/echolocator + reward_points = BITRUNNER_REWARD_HIGH diff --git a/code/modules/bitrunning/virtual_domain/domains/psyker_zombies.dm b/code/modules/bitrunning/virtual_domain/domains/psyker_zombies.dm index 6d545f7c652f13..9cb299055dd7db 100644 --- a/code/modules/bitrunning/virtual_domain/domains/psyker_zombies.dm +++ b/code/modules/bitrunning/virtual_domain/domains/psyker_zombies.dm @@ -4,11 +4,10 @@ desc = "Another neglected corner of the virtual world. This one had to be abandoned due to zombie virus. \ Warning -- Virtual domain does not support visual display. This mission must be completed using echolocation." difficulty = BITRUNNER_DIFFICULTY_MEDIUM + extra_loot = list(/obj/item/radio/headset/psyker = 1) //Looks cool, might make your local burdened chaplain happy. + forced_outfit = /datum/outfit/echolocator help_text = "This once-beloved virtual domain has been corrupted by a virus, rendering it unstable, full of holes, and full of ZOMBIES! \ There should be a Mystery Box nearby to help get you armed. Get armed, and finish what the cyber-police started!" key = "psyker_zombies" map_name = "psyker_zombies" reward_points = BITRUNNER_REWARD_HIGH - safehouse_path = /datum/map_template/safehouse/bathroom - forced_outfit = /datum/outfit/echolocator - extra_loot = list(/obj/item/radio/headset/psyker = 1) //Looks cool, might make your local burdened chaplain happy. diff --git a/code/modules/bitrunning/virtual_domain/domains/stairs_and_cliffs.dm b/code/modules/bitrunning/virtual_domain/domains/stairs_and_cliffs.dm index 2d9bcca3645560..1c79d8fd21d1c9 100644 --- a/code/modules/bitrunning/virtual_domain/domains/stairs_and_cliffs.dm +++ b/code/modules/bitrunning/virtual_domain/domains/stairs_and_cliffs.dm @@ -5,13 +5,12 @@ help_text = "Ever heard of 'Snakes and Ladders'? It's like that, but with \ instead of ladders its stairs and instead of snakes its a steep drop down a \ cliff into rough rocks or liquid plasma." - extra_loot = list(/obj/item/clothing/suit/costume/snowman = 2) difficulty = BITRUNNER_DIFFICULTY_LOW + extra_loot = list(/obj/item/clothing/suit/costume/snowman = 2) forced_outfit = /datum/outfit/job/virtual_domain_iceclimber key = "stairs_and_cliffs" map_name = "stairs_and_cliffs" reward_points = BITRUNNER_REWARD_MEDIUM - safehouse_path = /datum/map_template/safehouse/ice /turf/open/cliff/snowrock/virtual_domain name = "icy cliff" diff --git a/code/modules/bitrunning/virtual_domain/domains/starfront_saloon.dm b/code/modules/bitrunning/virtual_domain/domains/starfront_saloon.dm new file mode 100644 index 00000000000000..eae9dabc49e4d2 --- /dev/null +++ b/code/modules/bitrunning/virtual_domain/domains/starfront_saloon.dm @@ -0,0 +1,14 @@ +/datum/lazy_template/virtual_domain/starfront_saloon + name = "Starfront Saloon" + cost = BITRUNNER_COST_MEDIUM + desc = "Looks like you stepped onto the wrong street, partner. Hope you brought your gunslinging skills." + difficulty = BITRUNNER_DIFFICULTY_HIGH + help_text = "One of these rooms has the cache we're looking for. Find it and get out." + is_modular = TRUE + key = "starfront_saloon" + map_name = "starfront_saloon" + mob_modules = list( + /datum/modular_mob_segment/syndicate_team, + /datum/modular_mob_segment/syndicate_elite, + ) + reward_points = BITRUNNER_REWARD_HIGH diff --git a/code/modules/bitrunning/virtual_domain/domains/syndicate_assault.dm b/code/modules/bitrunning/virtual_domain/domains/syndicate_assault.dm index bae0da6874dbf2..cafbad6eb7048e 100644 --- a/code/modules/bitrunning/virtual_domain/domains/syndicate_assault.dm +++ b/code/modules/bitrunning/virtual_domain/domains/syndicate_assault.dm @@ -1,13 +1,14 @@ /datum/lazy_template/virtual_domain/syndicate_assault - name = "Syndicate Assault" + name = "Symphionia Assault" cost = BITRUNNER_COST_MEDIUM desc = "Board the enemy ship and recover the stolen cargo." difficulty = BITRUNNER_DIFFICULTY_MEDIUM extra_loot = list(/obj/item/toy/plush/nukeplushie = 1) - help_text = "A group of Syndicate operatives have stolen valuable cargo from the station. \ + help_text = "A group of Symphionia operatives have stolen valuable cargo from the station. \ They have boarded their ship and are attempting to escape. Infiltrate their ship and recover \ the crate. Be careful, they are extremely armed." + is_modular = TRUE key = "syndicate_assault" map_name = "syndicate_assault" + mob_modules = list(/datum/modular_mob_segment/syndicate_team) reward_points = BITRUNNER_REWARD_MEDIUM - safehouse_path = /datum/map_template/safehouse/shuttle diff --git a/code/modules/bitrunning/virtual_domain/domains/test_only.dm b/code/modules/bitrunning/virtual_domain/domains/test_only.dm index 6e5e852fb5c8ef..185ed4335e6394 100644 --- a/code/modules/bitrunning/virtual_domain/domains/test_only.dm +++ b/code/modules/bitrunning/virtual_domain/domains/test_only.dm @@ -4,7 +4,6 @@ key = "test_only" map_name = "test_only" test_only = TRUE - safehouse_path = /datum/map_template/safehouse/test_only /datum/lazy_template/virtual_domain/test_only/expensive key = "test_only_expensive" diff --git a/code/modules/bitrunning/virtual_domain/domains/vaporwave.dm b/code/modules/bitrunning/virtual_domain/domains/vaporwave.dm index 45d4abec9830af..b704441edaa845 100644 --- a/code/modules/bitrunning/virtual_domain/domains/vaporwave.dm +++ b/code/modules/bitrunning/virtual_domain/domains/vaporwave.dm @@ -1,10 +1,9 @@ /datum/lazy_template/virtual_domain/vaporwave name = "Cosmic Vestige" cost = BITRUNNER_COST_EXTREME - desc = "Suspended in the silent void of space, the Neon Relic is a haunting echo of a retro-futuristic era." + desc = "Suspended in the silent void of space, the Neon Relic is a haunting echo of a retro-futuristic era. Hang out, enjoy the view." difficulty = BITRUNNER_DIFFICULTY_NONE - extra_loot = list(/obj/item/stack/spacecash/c500 = 3) + extra_loot = list(/obj/item/stack/spacecash/c500 = 4) key = "vaporwave" map_name = "vaporwave" reward_points = BITRUNNER_REWARD_EXTREME - safehouse_path = /datum/map_template/safehouse/shuttle_space diff --git a/code/modules/bitrunning/virtual_domain/domains/wendigo.dm b/code/modules/bitrunning/virtual_domain/domains/wendigo.dm index fcad3db6faf76f..6db7c3337b6bd9 100644 --- a/code/modules/bitrunning/virtual_domain/domains/wendigo.dm +++ b/code/modules/bitrunning/virtual_domain/domains/wendigo.dm @@ -7,13 +7,11 @@ key = "wendigo" map_name = "wendigo" 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 +/obj/effect/mob_spawn/corpse/human/bitrunner/special(mob/living/spawned_mob) + . = ..() + spawned_mob.apply_status_effect(/datum/status_effect/gutted) + +/obj/effect/mob_spawn/corpse/human/cyber_police/special(mob/living/spawned_mob) + . = ..() + spawned_mob.apply_status_effect(/datum/status_effect/gutted) diff --git a/code/modules/bitrunning/virtual_domain/domains/xeno_nest.dm b/code/modules/bitrunning/virtual_domain/domains/xeno_nest.dm index 2bd4105e13c220..ed708d0592cb11 100644 --- a/code/modules/bitrunning/virtual_domain/domains/xeno_nest.dm +++ b/code/modules/bitrunning/virtual_domain/domains/xeno_nest.dm @@ -6,7 +6,8 @@ extra_loot = list(/obj/item/toy/plush/rouny = 1) help_text = "You are on a barren planet filled with hostile creatures. There is a crate here, not hidden, \ simply protected. Expect resistance." + is_modular = TRUE key = "xeno_nest" map_name = "xeno_nest" + mob_modules = list(/datum/modular_mob_segment/xenos) reward_points = BITRUNNER_REWARD_LOW - safehouse_path = /datum/map_template/safehouse/shuttle diff --git a/code/modules/bitrunning/virtual_domain/modular_mob_segment.dm b/code/modules/bitrunning/virtual_domain/modular_mob_segment.dm new file mode 100644 index 00000000000000..ab691274bc5c2b --- /dev/null +++ b/code/modules/bitrunning/virtual_domain/modular_mob_segment.dm @@ -0,0 +1,162 @@ +#define SPAWN_ALWAYS 100 +#define SPAWN_LIKELY 85 +#define SPAWN_UNLIKELY 35 +#define SPAWN_RARE 10 + +/datum/modular_mob_segment + /// Spawn no more than this amount + var/max = 4 + /// Set this to false if you want explicitly what's in the list to spawn + var/exact = FALSE + /// The list of mobs to spawn + var/list/mob/living/mobs = list() + /// The mobs spawned from this segment + var/list/spawned_mob_refs = list() + /// Chance this will spawn (1 - 100) + var/probability = SPAWN_LIKELY + +/// Spawns mobs in a circle around the location +/datum/modular_mob_segment/proc/spawn_mobs(turf/origin) + if(!prob(probability)) + return + + var/total_amount = exact ? rand(1, max) : length(mobs) + + shuffle_inplace(mobs) + + + var/list/turf/nearby = list() + for(var/turf/tile as anything in RANGE_TURFS(2, origin)) + if(!tile.is_blocked_turf()) + nearby += tile + + if(!length(nearby)) + stack_trace("Couldn't find any valid turfs to spawn on") + return + + for(var/index in 1 to total_amount) + // For each of those, we need to find an open space + var/turf/destination = pick(nearby) + + var/path // Either a random mob or the next mob in the list + if(exact) + path = mobs[index] + else + path = pick(mobs) + + var/mob/living/mob = new path(destination) + nearby -= destination + spawned_mob_refs.Add(WEAKREF(mob)) + +// Some generic mob segments. If you want to add generic ones for any map, add them here + +/datum/modular_mob_segment/gondolas + mobs = list( + /mob/living/simple_animal/pet/gondola, + ) + +/datum/modular_mob_segment/corgis + max = 2 + mobs = list( + /mob/living/basic/pet/dog/corgi, + ) + +/datum/modular_mob_segment/monkeys + mobs = list( + /mob/living/carbon/human/species/monkey, + ) + +/datum/modular_mob_segment/syndicate_team + mobs = list( + /mob/living/basic/trooper/syndicate/ranged, + /mob/living/basic/trooper/syndicate/melee, + ) + +/datum/modular_mob_segment/abductor_agents + mobs = list( + /mob/living/basic/trooper/abductor/melee, + /mob/living/basic/trooper/abductor/ranged, + ) + +/datum/modular_mob_segment/syndicate_elite + mobs = list( + /mob/living/basic/trooper/syndicate/melee/sword/space/stormtrooper, + /mob/living/basic/trooper/syndicate/ranged/space/stormtrooper, + ) + +/datum/modular_mob_segment/bears + max = 2 + mobs = list( + /mob/living/basic/bear, + ) + +/datum/modular_mob_segment/bees + exact = TRUE + mobs = list( + /mob/living/basic/bee, + /mob/living/basic/bee, + /mob/living/basic/bee, + /mob/living/basic/bee, + /mob/living/basic/bee/queen, + ) + +/datum/modular_mob_segment/bees_toxic + mobs = list( + /mob/living/basic/bee/toxin, + ) + +/datum/modular_mob_segment/blob_spores + mobs = list( + /mob/living/basic/blob_minion, + ) + +/datum/modular_mob_segment/carps + mobs = list( + /mob/living/basic/carp, + ) + +/datum/modular_mob_segment/hivebots + mobs = list( + /mob/living/basic/hivebot, + /mob/living/basic/hivebot/range, + ) + +/datum/modular_mob_segment/hivebots_strong + mobs = list( + /mob/living/basic/hivebot/strong, + /mob/living/basic/hivebot/range, + ) + +/datum/modular_mob_segment/lavaland_assorted + mobs = list( + /mob/living/basic/mining/basilisk, + /mob/living/basic/mining/goliath, + /mob/living/basic/mining/brimdemon, + /mob/living/basic/mining/lobstrosity, + ) + +/datum/modular_mob_segment/spiders + mobs = list( + /mob/living/basic/spider/giant/ambush, + /mob/living/basic/spider/giant/hunter, + /mob/living/basic/spider/giant/nurse, + /mob/living/basic/spider/giant/tarantula, + /mob/living/basic/spider/giant/midwife, + ) + +/datum/modular_mob_segment/venus_trap + mobs = list( + /mob/living/basic/venus_human_trap, + ) + +/datum/modular_mob_segment/xenos + mobs = list( + /mob/living/simple_animal/hostile/alien, + /mob/living/simple_animal/hostile/alien/sentinel, + /mob/living/simple_animal/hostile/alien/drone, + ) + +#undef SPAWN_ALWAYS +#undef SPAWN_LIKELY +#undef SPAWN_UNLIKELY +#undef SPAWN_RARE diff --git a/code/modules/bitrunning/virtual_domain/safehouses.dm b/code/modules/bitrunning/virtual_domain/safehouses.dm deleted file mode 100644 index 6504d447f28c40..00000000000000 --- a/code/modules/bitrunning/virtual_domain/safehouses.dm +++ /dev/null @@ -1,56 +0,0 @@ -/** - * # Safe Houses - * The starting point for virtual domains. - * Create your own: Read the readme file in the '_maps/safehouses' folder. - */ -/datum/map_template/safehouse - name = "virtual domain: safehouse" - - returns_created_atoms = TRUE - /// The map file to load - var/filename = "den.dmm" - -/datum/map_template/safehouse/New() - mappath = "_maps/safehouses/" + filename - ..(path = mappath) - -/datum/map_template/safehouse/test_only - filename = "test_only_safehouse.dmm" - - -/// The default safehouse map template. -/datum/map_template/safehouse/wood - filename = "wood.dmm" - -/datum/map_template/safehouse/den - filename = "den.dmm" - -/datum/map_template/safehouse/dig - filename = "dig.dmm" - -/datum/map_template/safehouse/shuttle - filename = "shuttle.dmm" - -// Has space tiles on the four corners. -/datum/map_template/safehouse/shuttle_space - filename = "shuttle_space.dmm" - -/datum/map_template/safehouse/mine - filename = "mine.dmm" - -// Comes preloaded with mining combat gear. -/datum/map_template/safehouse/lavaland_boss - filename = "lavaland_boss.dmm" - -// Chill out -/datum/map_template/safehouse/ice - filename = "ice.dmm" - -/datum/map_template/safehouse/bathroom - filename = "bathroom.dmm" - -/** - * Your safehouse here - * /datum/map_template/safehouse/your_type - * filename = "your_map.dmm" - */ diff --git a/code/modules/bitrunning/virtual_domain/virtual_domain.dm b/code/modules/bitrunning/virtual_domain/virtual_domain.dm index 202376a2c3344f..838834f45a74a2 100644 --- a/code/modules/bitrunning/virtual_domain/virtual_domain.dm +++ b/code/modules/bitrunning/virtual_domain/virtual_domain.dm @@ -1,6 +1,5 @@ /** * # Virtual Domains - * This loads a base level, then users can select the preset upon it. * Create your own: Read the readme file in the '_maps/virtual_domains' folder. */ /datum/lazy_template/virtual_domain @@ -10,22 +9,28 @@ /// Cost of this map to load var/cost = BITRUNNER_COST_NONE - /// The description of the map + /// Any outfit that you wish to force on avatars. Overrides preferences + var/datum/outfit/forced_outfit + /// The description of the map for the console UI var/desc = "A map." - /// The 'difficulty' of the map, which affects the ui and ability to scan info. + /// Affects the ui and ability to scan info. var/difficulty = BITRUNNER_DIFFICULTY_NONE - /// An assoc list of typepath/amount to spawn on completion. Not weighted - the value is the amount - var/list/extra_loot /// The map file to load 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 + /// Whether to display this as a modular map + var/is_modular = FALSE + /// Byond will look for modular mob segment landmarks then choose from here at random. You can make them unique also. + var/list/datum/modular_mob_segment/mob_modules = list() + /// An assoc list of typepath/amount to spawn on completion. Not weighted - the value is the amount + var/list/extra_loot + /// Forces all mob modules to only load once + var/modular_unique_mobs = FALSE // Name to show in the UI var/name = "Virtual Domain" /// Points to reward for completion. Used to purchase new domains and calculate ore rewards. @@ -34,5 +39,11 @@ var/start_time /// This map is specifically for unit tests. Shouldn't display in game 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/buildmode/buildmode.dm b/code/modules/buildmode/buildmode.dm index 0e16a13b54a8f2..36a3db07f597ed 100644 --- a/code/modules/buildmode/buildmode.dm +++ b/code/modules/buildmode/buildmode.dm @@ -135,17 +135,7 @@ preview.name = initial(typepath.name) // Scale the preview if it's bigger than one tile - var/mutable_appearance/preview_overlay = new(typepath) - var/list/icon_dimensions = get_icon_dimensions(initial(typepath.icon)) - var/width = icon_dimensions["width"] - var/height = icon_dimensions["height"] - var/scale = 1 - if(width > world.icon_size || height > world.icon_size) - if(width >= height) - scale = world.icon_size / width - else - scale = world.icon_size / height - preview_overlay.transform = preview_overlay.transform.Scale(scale) + var/mutable_appearance/preview_overlay = get_small_overlay(new /mutable_appearance(typepath)) preview_overlay.appearance_flags |= TILE_BOUND preview_overlay.layer = FLOAT_LAYER preview_overlay.plane = FLOAT_PLANE diff --git a/code/modules/buildmode/submodes/advanced.dm b/code/modules/buildmode/submodes/advanced.dm index 2167a85a57ca39..31f2c4c9757014 100644 --- a/code/modules/buildmode/submodes/advanced.dm +++ b/code/modules/buildmode/submodes/advanced.dm @@ -58,7 +58,7 @@ else if(right_click) if(isobj(object)) log_admin("Build Mode: [key_name(c)] deleted [object] at [AREACOORD(object)]") - // SKYRAT EDIT -- BS delete sparks. Original was just qdel(object) + // NOVA EDIT -- BS delete sparks. Original was just qdel(object) var/turf/T = get_turf(object) qdel(object) if(T && c.prefs.read_preference(/datum/preference/toggle/admin/delete_sparks)) diff --git a/code/modules/buildmode/submodes/basic.dm b/code/modules/buildmode/submodes/basic.dm index a584dace3fddf0..92ca8c1aefe486 100644 --- a/code/modules/buildmode/submodes/basic.dm +++ b/code/modules/buildmode/submodes/basic.dm @@ -22,13 +22,13 @@ if(istype(object,/turf) && left_click && !alt_click && !ctrl_click) var/turf/clicked_turf = object if(isplatingturf(object)) - clicked_turf.PlaceOnTop(/turf/open/floor/iron, flags = CHANGETURF_INHERIT_AIR) + clicked_turf.place_on_top(/turf/open/floor/iron, flags = CHANGETURF_INHERIT_AIR) else if(isfloorturf(object)) - clicked_turf.PlaceOnTop(/turf/closed/wall) + clicked_turf.place_on_top(/turf/closed/wall) else if(iswallturf(object)) - clicked_turf.PlaceOnTop(/turf/closed/wall/r_wall) + clicked_turf.place_on_top(/turf/closed/wall/r_wall) else - clicked_turf.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) // Gotta do something + clicked_turf.place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) // Gotta do something log_admin("Build Mode: [key_name(c)] built [clicked_turf] at [AREACOORD(clicked_turf)]") return else if(right_click) @@ -37,7 +37,7 @@ var/turf/T = object T.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) else if(isobj(object)) - // SKYRAT EDIT -- BS delete sparks. Original was just qdel(object) + // NOVA EDIT -- BS delete sparks. Original was just qdel(object) var/turf/T = get_turf(object) qdel(object) if(T && c.prefs.read_preference(/datum/preference/toggle/admin/delete_sparks)) diff --git a/code/modules/buildmode/submodes/delete.dm b/code/modules/buildmode/submodes/delete.dm index 79daeaa2c9de39..cc755e796b31f6 100644 --- a/code/modules/buildmode/submodes/delete.dm +++ b/code/modules/buildmode/submodes/delete.dm @@ -15,7 +15,7 @@ var/turf/T = object T.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) else if(isatom(object)) - // SKYRAT EDIT -- BS delete sparks. Original was just qdel(object) + // NOVA EDIT -- BS delete sparks. Original was just qdel(object) var/turf/T = get_turf(object) qdel(object) if(T && c.prefs.read_preference(/datum/preference/toggle/admin/delete_sparks)) diff --git a/code/modules/buildmode/submodes/map_export.dm b/code/modules/buildmode/submodes/map_export.dm new file mode 100644 index 00000000000000..99412781680afb --- /dev/null +++ b/code/modules/buildmode/submodes/map_export.dm @@ -0,0 +1,82 @@ +/datum/buildmode_mode/map_export + key = "mapexport" + use_corner_selection = TRUE + /// Variable with the flag value to understand how to treat the shuttle zones. + var/shuttle_flag = SAVE_SHUTTLEAREA_DONTCARE + /// Variable with a flag value to indicate what should be saved (for example, only objects or only mobs). + var/save_flag = ALL + /// A guard variable to prevent more than one map export process from occurring at the same time. + var/static/is_running = FALSE + +/datum/buildmode_mode/map_export/change_settings(client/builder) + var/static/list/options = list( + "Object Saving" = SAVE_OBJECTS, + "Mob Saving" = SAVE_MOBS, + "Turf Saving" = SAVE_TURFS, + "Area Saving" = SAVE_AREAS, + "Space Turf Saving" = SAVE_SPACE, + "Object Property Saving" = SAVE_OBJECT_PROPERTIES, + ) + var/what_to_change = tgui_input_list(builder, "What export setting would you like to toggle?", "Map Exporter", options) + if (!what_to_change) + return + save_flag ^= options[what_to_change] + to_chat(builder, "[what_to_change] is now [save_flag & options[what_to_change] ? "ENABLED" : "DISABLED"].") + +/datum/buildmode_mode/map_export/show_help(client/builder) + to_chat(builder, span_purple(examine_block( + "[span_bold("Select corner")] -> Left Mouse Button on obj/turf/mob\n\ + [span_bold("Set export options")] -> Right Mouse Button on buildmode button")) + ) + +/datum/buildmode_mode/map_export/handle_selected_area(client/builder, params) + var/list/listed_params = params2list(params) + var/left_click = listed_params.Find("left") + + //Ensure the selection is actually done + if(!left_click) + to_chat(builder, span_warning("Invalid selection.")) + return + + //If someone somehow gets build mode, stop them from using this. + if(!check_rights(R_DEBUG)) + message_admins("[ckey(builder)] tried to run the map save generator but was rejected due to insufficient perms.") + to_chat(builder, span_warning("You must have +ADMIN rights to use this.")) + return + //Emergency check + if(get_dist(cornerA, cornerB) > 60 || cornerA.z != cornerB.z) + var/confirm = tgui_alert(builder, "Are you sure about this? Exporting large maps may take quite a while.", "Map Exporter", list("Yes", "No")) + if(confirm != "Yes") + return + + if(cornerA == cornerB) + return + + if(is_running) + to_chat(builder, span_warning("Someone is already running the generator! Try again in a little bit.")) + return + + to_chat(builder, span_warning("Saving, please wait...")) + is_running = TRUE + + log_admin("Build Mode: [key_name(builder)] is exporting the map area from [AREACOORD(cornerA)] through [AREACOORD(cornerB)]") //I put this before the actual saving of the map because it likely won't log if it crashes the fucking server + + //oversimplified for readability and understandibility + + var/minx = min(cornerA.x, cornerB.x) + var/miny = min(cornerA.y, cornerB.y) + var/minz = min(cornerA.z, cornerB.z) + + var/maxx = max(cornerA.x, cornerB.x) + var/maxy = max(cornerA.y, cornerB.y) + var/maxz = max(cornerA.z, cornerB.z) + + //Step 1: Get the data (This can take a while) + var/dat = write_map(minx, miny, minz, maxx, maxy, maxz, save_flag, shuttle_flag) + + //Step 2: Write the data to a file and give map to client + var/date = time2text(world.timeofday, "YYYY-MM-DD_hh-mm-ss") + var/file_name = sanitize_filename(tgui_input_text(builder, "Filename?", "Map Exporter", "exported_map_[date]")) + send_exported_map(builder, file_name, dat) + to_chat(builder, span_green("The map was successfully saved!")) + is_running = FALSE diff --git a/code/modules/buildmode/submodes/proccall.dm b/code/modules/buildmode/submodes/proccall.dm index 5395ec77c65790..3df1b8105380ce 100644 --- a/code/modules/buildmode/submodes/proccall.dm +++ b/code/modules/buildmode/submodes/proccall.dm @@ -41,7 +41,7 @@ log_admin(msg) message_admins(msg) admin_ticket_log(object, msg) - SSblackbox.record_feedback("tally", "admin_verb", 1, "Atom ProcCall") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Atom ProcCall") var/returnval = WrapAdminProcCall(object, proc_name, proc_args) // Pass the lst as an argument list to the proc . = target_client.get_callproc_returnval(returnval, proc_name) diff --git a/code/modules/capture_the_flag/ctf_controller.dm b/code/modules/capture_the_flag/ctf_controller.dm index 8e51f8ef73332d..b5df4981c9f15f 100644 --- a/code/modules/capture_the_flag/ctf_controller.dm +++ b/code/modules/capture_the_flag/ctf_controller.dm @@ -29,7 +29,7 @@ src.game_id = game_id GLOB.ctf_games[game_id] = src -/datum/ctf_controller/Destroy(force, ...) +/datum/ctf_controller/Destroy(force) GLOB.ctf_games[game_id] = null return ..() @@ -47,7 +47,11 @@ ctf_enabled = TRUE for(var/team in teams) var/obj/machinery/ctf/spawner/spawner = teams[team].spawner - notify_ghosts("[spawner.name] has been activated!", source = spawner, action = NOTIFY_ORBIT, header = "CTF has been activated") + notify_ghosts( + "[spawner.name] has been activated!", + source = spawner, + header = "CTF has been activated", + ) /datum/ctf_controller/proc/stop_ctf() ctf_enabled = FALSE @@ -203,7 +207,7 @@ team_span = spawner.team_span ///If the team is destroyed all players in that team need their componenet removed. -/datum/ctf_team/Destroy(force, ...) +/datum/ctf_team/Destroy(force) for(var/player in team_members) var/datum/component/ctf_player/ctf_player = team_members[player] ctf_player.end_game() diff --git a/code/modules/capture_the_flag/ctf_equipment.dm b/code/modules/capture_the_flag/ctf_equipment.dm index 798bfa49be9226..dccf875a55a955 100644 --- a/code/modules/capture_the_flag/ctf_equipment.dm +++ b/code/modules/capture_the_flag/ctf_equipment.dm @@ -207,12 +207,18 @@ var/lose_multiple_charges = TRUE var/show_charge_as_alpha = TRUE -/obj/item/clothing/suit/armor/vest/ctf/equipped(mob/user, slot) +/obj/item/clothing/suit/armor/vest/ctf/Initialize(mapload) . = ..() - if(!slot || slot & ITEM_SLOT_HANDS) - return - AddComponent(/datum/component/shielded, max_charges = max_charges, recharge_start_delay = recharge_start_delay, charge_increment_delay = charge_increment_delay, \ - charge_recovery = charge_recovery, lose_multiple_charges = lose_multiple_charges, show_charge_as_alpha = show_charge_as_alpha, shield_icon = team_shield_icon) + AddComponent( \ + /datum/component/shielded, \ + max_charges = max_charges, \ + recharge_start_delay = recharge_start_delay, \ + charge_increment_delay = charge_increment_delay, \ + charge_recovery = charge_recovery, \ + lose_multiple_charges = lose_multiple_charges, \ + show_charge_as_alpha = show_charge_as_alpha, \ + shield_icon = team_shield_icon, \ + ) // LIGHT SHIELDED VEST diff --git a/code/modules/capture_the_flag/ctf_game.dm b/code/modules/capture_the_flag/ctf_game.dm index bfebcc706ca0f7..60ccd0d107df14 100644 --- a/code/modules/capture_the_flag/ctf_game.dm +++ b/code/modules/capture_the_flag/ctf_game.dm @@ -9,7 +9,7 @@ /obj/machinery/ctf name = "CTF Controller" desc = "Used for running friendly games of capture the flag." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/machines/beacon.dmi' icon_state = "syndbeacon" density = TRUE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF @@ -186,7 +186,7 @@ inhand_icon_state = "banner" lefthand_file = 'icons/mob/inhands/equipment/banners_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/banners_righthand.dmi' - desc = "A banner with Nanotrasen's logo on it." + desc = "A banner with Symphionia's logo on it." slowdown = 2 throw_speed = 0 throw_range = 1 @@ -464,7 +464,7 @@ /obj/structure/table/reinforced/ctf resistance_flags = INDESTRUCTIBLE - flags_1 = NODECONSTRUCT_1 + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION #define CTF_LOADING_UNLOADED 0 #define CTF_LOADING_LOADING 1 @@ -510,17 +510,26 @@ var/ctf_enabled = FALSE ctf_enabled = ctf_controller.toggle_ctf() - for(var/obj/machinery/power/emitter/emitter in ctf_area) - emitter.active = ctf_enabled + for(var/turf/ctf_turf as anything in get_area_turfs(ctf_area)) + for(var/obj/machinery/power/emitter/emitter in ctf_turf) + emitter.active = ctf_enabled if(user) message_admins("[key_name_admin(user)] has [ctf_enabled ? "enabled" : "disabled"] CTF!") else if(automated) message_admins("CTF has finished a round and automatically restarted.") - notify_ghosts("CTF has automatically restarted after a round finished in [initial(ctf_area.name)]!",'sound/effects/ghost2.ogg') + notify_ghosts( + "CTF has automatically restarted after a round finished in [initial(ctf_area.name)]!", + ghost_sound = 'sound/effects/ghost2.ogg', + header = "CTF Restarted" + ) else message_admins("The players have spoken! Voting has enabled CTF!") if(!automated) - notify_ghosts("CTF has been [ctf_enabled? "enabled" : "disabled"] in [initial(ctf_area.name)]!",'sound/effects/ghost2.ogg') + notify_ghosts( + "CTF has been [ctf_enabled? "enabled" : "disabled"] in [initial(ctf_area.name)]!", + ghost_sound = 'sound/effects/ghost2.ogg', + header = "CTF [ctf_enabled? "Enabled" : "Disabled"]" + ) #undef CTF_LOADING_UNLOADED #undef CTF_LOADING_LOADING diff --git a/code/modules/capture_the_flag/ctf_player_component.dm b/code/modules/capture_the_flag/ctf_player_component.dm index d3abc0f2571ccc..c51b48b918c98a 100644 --- a/code/modules/capture_the_flag/ctf_player_component.dm +++ b/code/modules/capture_the_flag/ctf_player_component.dm @@ -74,7 +74,7 @@ player_mob.dust() qdel(src) -/datum/component/ctf_player/Destroy(force, silent) +/datum/component/ctf_player/Destroy(force) if(player_mob) UnregisterSignal(player_mob, list(COMSIG_MOB_AFTER_APPLY_DAMAGE, COMSIG_MOB_GHOSTIZED)) return ..() diff --git a/code/modules/cards/cards.dm b/code/modules/cards/cards.dm index fb84b2d97897b2..5cd17a53515cc2 100644 --- a/code/modules/cards/cards.dm +++ b/code/modules/cards/cards.dm @@ -27,7 +27,8 @@ if(. || !istype(target)) // was it caught or is the target not a living mob return . - if(!throwingdatum?.thrower) // if a mob didn't throw it (need two people to play 52 pickup) + var/mob/thrower = throwingdatum?.get_thrower() + if(!thrower) // if a mob didn't throw it (need two people to play 52 pickup) return if(count_cards() == 0) diff --git a/code/modules/cards/deck/deck.dm b/code/modules/cards/deck/deck.dm index 632b01d509d74d..e6de57dc5e6016 100644 --- a/code/modules/cards/deck/deck.dm +++ b/code/modules/cards/deck/deck.dm @@ -188,18 +188,17 @@ if(. || !istype(target)) // was it caught or is the target not a living mob return . - if(!throwingdatum?.thrower) // if a mob didn't throw it (need two people to play 52 pickup) + var/mob/living/thrower = throwingdatum?.get_thrower() + if(!thrower) // if a mob didn't throw it (need two people to play 52 pickup) return - var/mob/living/thrower = throwingdatum.thrower - target.visible_message(span_warning("[target] is forced to play 52 card pickup!"), span_warning("You are forced to play 52 card pickup.")) target.add_mood_event("lost_52_card_pickup", /datum/mood_event/lost_52_card_pickup) thrower.add_mood_event("won_52_card_pickup", /datum/mood_event/won_52_card_pickup) add_memory_in_range(target, 7, /datum/memory/playing_card_pickup, protagonist = thrower, deuteragonist = target, antagonist = src) /* -|| Syndicate playing cards, for pretending you're Gambit and playing poker for the nuke disk. || +|| Symphionia playing cards, for pretending you're Gambit and playing poker for the nuke disk. || */ /obj/item/toy/cards/deck/syndicate name = "suspicious looking deck of cards" diff --git a/code/modules/cards/deck/tarot.dm b/code/modules/cards/deck/tarot.dm index 3dcdc8608c640c..cf21fe789352e0 100644 --- a/code/modules/cards/deck/tarot.dm +++ b/code/modules/cards/deck/tarot.dm @@ -59,7 +59,6 @@ header = "Haunted Tarot Deck", ghost_sound = 'sound/effects/ghost2.ogg', notify_volume = 75, - action = NOTIFY_ORBIT, ) /obj/item/toy/cards/deck/tarot/haunted/proc/on_unwield(obj/item/source, mob/living/carbon/user) diff --git a/code/modules/cargo/bounties/assistant.dm b/code/modules/cargo/bounties/assistant.dm index 5885ad5825268b..b37432bfd2784f 100644 --- a/code/modules/cargo/bounties/assistant.dm +++ b/code/modules/cargo/bounties/assistant.dm @@ -1,19 +1,19 @@ /datum/bounty/item/assistant/strange_object name = "Strange Object" - description = "Nanotrasen has taken an interest in strange objects. Find one in maintenance, and ship it off to CentCom right away." + description = "Symphionia has taken an interest in strange objects. Find one in maintenance, and ship it off to CentCom right away." reward = CARGO_CRATE_VALUE * 2.4 wanted_types = list(/obj/item/relic = TRUE) /datum/bounty/item/assistant/scooter name = "Scooter" - description = "Nanotrasen has determined walking to be wasteful. Ship a scooter to CentCom to speed operations up." + description = "Symphionia has determined walking to be wasteful. Ship a scooter to CentCom to speed operations up." reward = CARGO_CRATE_VALUE * 2.16 // the mat hoffman wanted_types = list(/obj/vehicle/ridden/scooter = TRUE) include_subtypes = FALSE /datum/bounty/item/assistant/skateboard name = "Skateboard" - description = "Nanotrasen has determined walking to be wasteful. Ship a skateboard to CentCom to speed operations up." + description = "Symphionia has determined walking to be wasteful. Ship a skateboard to CentCom to speed operations up." reward = CARGO_CRATE_VALUE * 1.8 // the tony hawk wanted_types = list( /obj/vehicle/ridden/scooter/skateboard = TRUE, @@ -42,14 +42,14 @@ /datum/bounty/item/assistant/toolbox name = "Toolboxes" - description = "There's an absence of robustness at Central Command. Hurry up and ship some toolboxes as a solution." + description = "There's an absence of robustness at Conglomeration of Colonists. Hurry up and ship some toolboxes as a solution." reward = CARGO_CRATE_VALUE * 4 required_count = 6 wanted_types = list(/obj/item/storage/toolbox = TRUE) /datum/bounty/item/assistant/statue name = "Statue" - description = "Central Command would like to commision an artsy statue for the lobby. Ship one out, when possible." + description = "Conglomeration of Colonists would like to commision an artsy statue for the lobby. Ship one out, when possible." reward = CARGO_CRATE_VALUE * 4 wanted_types = list(/obj/structure/statue = TRUE) @@ -81,7 +81,7 @@ /datum/bounty/item/assistant/donut name = "Donuts" - description = "CentCom's security forces are facing heavy losses against the Syndicate. Ship donuts to raise morale." + description = "CentCom's security forces are facing heavy losses against the Symphionia. Ship donuts to raise morale." reward = CARGO_CRATE_VALUE * 6 required_count = 6 wanted_types = list(/obj/item/food/donut = TRUE) @@ -131,28 +131,28 @@ /datum/bounty/item/assistant/potted_plants name = "Potted Plants" - description = "Central Command is looking to commission a new BirdBoat-class station. You've been ordered to supply the potted plants." + description = "Conglomeration of Colonists is looking to commission a new BirdBoat-class station. You've been ordered to supply the potted plants." reward = CARGO_CRATE_VALUE * 4 required_count = 8 wanted_types = list(/obj/item/kirbyplants = TRUE) /datum/bounty/item/assistant/monkey_cubes name = "Monkey Cubes" - description = "Due to a recent genetics accident, Central Command is in serious need of monkeys. Your mission is to ship monkey cubes." + description = "Due to a recent genetics accident, Conglomeration of Colonists is in serious need of monkeys. Your mission is to ship monkey cubes." reward = CARGO_CRATE_VALUE * 4 required_count = 3 wanted_types = list(/obj/item/food/monkeycube = TRUE) /datum/bounty/item/assistant/ied name = "IED" - description = "Nanotrasen's maximum security prison at CentCom is undergoing personnel training. Ship a handful of IEDs to serve as a training tools." + description = "Symphionia's maximum security prison at CentCom is undergoing personnel training. Ship a handful of IEDs to serve as a training tools." reward = CARGO_CRATE_VALUE * 4 required_count = 3 wanted_types = list(/obj/item/grenade/iedcasing = TRUE) /datum/bounty/item/assistant/corgimeat name = "Raw Corgi Meat" - description = "The Syndicate recently stole all of CentCom's corgi meat. Ship out a replacement immediately." + description = "The Symphionia recently stole all of CentCom's corgi meat. Ship out a replacement immediately." reward = CARGO_CRATE_VALUE * 6 wanted_types = list(/obj/item/food/meat/slab/corgi = TRUE) diff --git a/code/modules/cargo/bounties/botany.dm b/code/modules/cargo/bounties/botany.dm index 905122584bf347..c5774170f9581e 100644 --- a/code/modules/cargo/bounties/botany.dm +++ b/code/modules/cargo/bounties/botany.dm @@ -6,7 +6,7 @@ /datum/bounty/item/botany/New() ..() - description = "Central Command's head chef is looking to prepare a fine [foodtype] with [name]. [bonus_desc]" + description = "Conglomeration of Colonists's head chef is looking to prepare a fine [foodtype] with [name]. [bonus_desc]" reward += multiplier * (CARGO_CRATE_VALUE * 2) required_count = rand(5, 10) @@ -213,7 +213,7 @@ /datum/bounty/item/botany/bonfire name = "Lit Bonfire" - description = "Our space heaters are malfunctioning and the cargo crew of Central Command is starting to feel cold. Grow some logs and ship a lit bonfire to warm them up." + description = "Our space heaters are malfunctioning and the cargo crew of Conglomeration of Colonists is starting to feel cold. Grow some logs and ship a lit bonfire to warm them up." wanted_types = list(/obj/structure/bonfire = TRUE) /datum/bounty/item/botany/bonfire/applies_to(obj/O) diff --git a/code/modules/cargo/bounties/chef.dm b/code/modules/cargo/bounties/chef.dm index db65252df6875e..b39bd34ca00001 100644 --- a/code/modules/cargo/bounties/chef.dm +++ b/code/modules/cargo/bounties/chef.dm @@ -1,6 +1,6 @@ /datum/bounty/item/chef/birthday_cake name = "Birthday Cake" - description = "Nanotrasen's birthday is coming up! Ship Central Command a birthday cake to celebrate!" + description = "Symphionia's birthday is coming up! Ship Conglomeration of Colonists a birthday cake to celebrate!" reward = CARGO_CRATE_VALUE * 8 wanted_types = list( /obj/item/food/cake/birthday = TRUE, @@ -9,7 +9,7 @@ /datum/bounty/reagent/chef/soup name = "Soup" - description = "To quell the homeless uprising, Nanotrasen will be serving soup to all underpaid workers." + description = "To quell the homeless uprising, Symphionia will be serving soup to all underpaid workers." /datum/bounty/reagent/chef/soup/New() . = ..() @@ -29,7 +29,7 @@ /datum/bounty/item/chef/onionrings name = "Onion Rings" - description = "Nanotrasen is remembering Saturn day. Ship onion rings to show the station's support." + description = "Symphionia is remembering Saturn day. Ship onion rings to show the station's support." reward = CARGO_CRATE_VALUE * 6 required_count = 3 wanted_types = list(/obj/item/food/onionrings = TRUE) @@ -88,7 +88,7 @@ /datum/bounty/item/chef/poppypretzel name = "Poppy Pretzel" - description = "Central Command needs a reason to fire their HR head. Send over a poppy pretzel to force a failed drug test." + description = "Conglomeration of Colonists needs a reason to fire their HR head. Send over a poppy pretzel to force a failed drug test." reward = CARGO_CRATE_VALUE * 6 wanted_types = list(/obj/item/food/poppypretzel = TRUE) @@ -100,7 +100,7 @@ /datum/bounty/item/chef/hotdog name = "Hot Dog" - description = "Nanotrasen is conducting taste tests to determine the best hot dog recipe. Ship your station's version to participate." + description = "Symphionia is conducting taste tests to determine the best hot dog recipe. Ship your station's version to participate." reward = CARGO_CRATE_VALUE * 16 wanted_types = list(/obj/item/food/hotdog = TRUE) @@ -120,7 +120,7 @@ /datum/bounty/item/chef/chawanmushi name = "Chawanmushi" - description = "Nanotrasen wants to improve relations with its sister company, Japanotrasen. Ship Chawanmushi immediately." + description = "Symphionia wants to improve relations with its sister company, Japanotrasen. Ship Chawanmushi immediately." reward = CARGO_CRATE_VALUE * 16 wanted_types = list(/obj/item/food/chawanmushi = TRUE) @@ -139,7 +139,7 @@ /datum/bounty/item/chef/pancakes name = "Pancakes" - description = "Here at Nanotrasen we consider employees to be family. And you know what families love? Pancakes. Ship a baker's dozen." + description = "Here at Symphionia we consider employees to be family. And you know what families love? Pancakes. Ship a baker's dozen." reward = CARGO_CRATE_VALUE * 10 required_count = 13 wanted_types = list(/obj/item/food/pancakes = TRUE) diff --git a/code/modules/cargo/bounties/medical.dm b/code/modules/cargo/bounties/medical.dm index f9b367b12f06e4..4619cf24272a40 100644 --- a/code/modules/cargo/bounties/medical.dm +++ b/code/modules/cargo/bounties/medical.dm @@ -11,7 +11,7 @@ /datum/bounty/item/medical/lung name = "Lungs" - description = "A recent explosion at Central Command has left multiple staff with punctured lungs. Ship spare lungs to be rewarded. We'll take cybernetic ones if need be, but only if they're upgraded." + description = "A recent explosion at Conglomeration of Colonists has left multiple staff with punctured lungs. Ship spare lungs to be rewarded. We'll take cybernetic ones if need be, but only if they're upgraded." reward = CARGO_CRATE_VALUE * 10 required_count = 3 wanted_types = list( @@ -23,7 +23,7 @@ /datum/bounty/item/medical/appendix name = "Appendix" - description = "Chef Gibb of Central Command wants to prepare a meal using a very special delicacy: an appendix. If you ship one, he'll pay." + description = "Chef Gibb of Conglomeration of Colonists wants to prepare a meal using a very special delicacy: an appendix. If you ship one, he'll pay." reward = CARGO_CRATE_VALUE * 5 //there are no synthetic appendixes wanted_types = list(/obj/item/organ/internal/appendix = TRUE) @@ -71,13 +71,13 @@ /datum/bounty/item/medical/lizard_tail name = "Lizard Tail" - description = "The Wizard Federation has made off with Nanotrasen's supply of lizard tails. While CentCom is dealing with the wizards, can the station spare a tail of their own?" + description = "The Wizard Federation has made off with Symphionia's supply of lizard tails. While CentCom is dealing with the wizards, can the station spare a tail of their own?" reward = CARGO_CRATE_VALUE * 6 wanted_types = list(/obj/item/organ/external/tail/lizard = TRUE) /datum/bounty/item/medical/cat_tail name = "Cat Tail" - description = "Central Command has run out of heavy duty pipe cleaners. Can you ship over a cat tail to help us out?" + description = "Conglomeration of Colonists has run out of heavy duty pipe cleaners. Can you ship over a cat tail to help us out?" reward = CARGO_CRATE_VALUE * 6 wanted_types = list(/obj/item/organ/external/tail/cat = TRUE) diff --git a/code/modules/cargo/bounties/mining.dm b/code/modules/cargo/bounties/mining.dm index 9c287341b889f3..3d1e227cff0c1b 100644 --- a/code/modules/cargo/bounties/mining.dm +++ b/code/modules/cargo/bounties/mining.dm @@ -18,7 +18,7 @@ required_count = 2 wanted_types = list(/obj/item/oar = TRUE) -//SKYRAT EDIT REMOVAL +//NOVA EDIT REMOVAL /* /datum/bounty/item/mining/bone_axe name = "Bone Axe" @@ -26,7 +26,7 @@ reward = CARGO_CRATE_VALUE * 15 wanted_types = list(/obj/item/fireaxe/boneaxe = TRUE) */ -//END SKYRAT EDIT REMOVAL +//END NOVA EDIT REMOVAL /datum/bounty/item/mining/bone_armor name = "Bone Armor" @@ -46,16 +46,16 @@ reward = CARGO_CRATE_VALUE * 15 required_count = 3 wanted_types = list(/obj/item/clothing/accessory/talisman = TRUE) -//SKYRAT EDIT REMOVAL +//NOVA EDIT REMOVAL /* /datum/bounty/item/mining/bone_dagger name = "Bone Daggers" - description = "Central Command's canteen is undergoing budget cuts. Ship over some bone daggers so our chef can keep working." + description = "Conglomeration of Colonists's canteen is undergoing budget cuts. Ship over some bone daggers so our chef can keep working." reward = CARGO_CRATE_VALUE * 10 required_count = 3 wanted_types = list(/obj/item/knife/combat/bone = TRUE) */ -//END SKYRAT EDIT REMOVAL +//END NOVA EDIT REMOVAL /datum/bounty/item/mining/polypore_mushroom name = "Mushroom Bowl" diff --git a/code/modules/cargo/bounties/reagent.dm b/code/modules/cargo/bounties/reagent.dm index 2a4b97c3c02d78..84be661e27c054 100644 --- a/code/modules/cargo/bounties/reagent.dm +++ b/code/modules/cargo/bounties/reagent.dm @@ -121,7 +121,6 @@ // Chemicals that can be mixed by a single skilled Chemist. var/static/list/possible_reagents = list(\ /datum/reagent/medicine/leporazine,\ - /datum/reagent/medicine/clonexadone,\ /datum/reagent/medicine/mine_salve,\ /datum/reagent/medicine/c2/convermol,\ /datum/reagent/medicine/ephedrine,\ diff --git a/code/modules/cargo/bounties/science.dm b/code/modules/cargo/bounties/science.dm index 91d0d71bfc311e..0d19f714e2cee3 100644 --- a/code/modules/cargo/bounties/science.dm +++ b/code/modules/cargo/bounties/science.dm @@ -72,7 +72,7 @@ /datum/bounty/item/science/ntnet/laptops name = "Modular Laptops" - description = "Central command brass need something more powerful than a tablet, but more portable than a console. Help these old fogeys out by shipping us some working laptops. Send them turned on." + description = "Conglomeration of Colonists brass need something more powerful than a tablet, but more portable than a console. Help these old fogeys out by shipping us some working laptops. Send them turned on." reward = CARGO_CRATE_VALUE * 3 required_count = 2 wanted_types = list(/obj/item/modular_computer/laptop = TRUE) diff --git a/code/modules/cargo/bounties/security.dm b/code/modules/cargo/bounties/security.dm index cc83aa228a8ff7..08ead17faa46f2 100644 --- a/code/modules/cargo/bounties/security.dm +++ b/code/modules/cargo/bounties/security.dm @@ -1,6 +1,6 @@ /datum/bounty/item/security/recharger name = "Rechargers" - description = "Nanotrasen military academy is conducting marksmanship exercises. They request that rechargers be shipped." + description = "Symphionia military academy is conducting marksmanship exercises. They request that rechargers be shipped." reward = CARGO_CRATE_VALUE * 4 required_count = 3 wanted_types = list(/obj/machinery/recharger = TRUE) @@ -28,13 +28,13 @@ /datum/bounty/item/security/earmuffs name = "Earmuffs" - description = "Central Command is getting tired of your station's messages. They've ordered that you ship some earmuffs to lessen the annoyance." + description = "Conglomeration of Colonists is getting tired of your station's messages. They've ordered that you ship some earmuffs to lessen the annoyance." reward = CARGO_CRATE_VALUE * 2 wanted_types = list(/obj/item/clothing/ears/earmuffs = TRUE) /datum/bounty/item/security/handcuffs name = "Handcuffs" - description = "A large influx of escaped convicts have arrived at Central Command. Now is the perfect time to ship out spare handcuffs (or restraints)." + description = "A large influx of escaped convicts have arrived at Conglomeration of Colonists. Now is the perfect time to ship out spare handcuffs (or restraints)." reward = CARGO_CRATE_VALUE * 2 required_count = 5 wanted_types = list(/obj/item/restraints/handcuffs = TRUE) diff --git a/code/modules/cargo/bounties/slime.dm b/code/modules/cargo/bounties/slime.dm index 25cf8d5b8b90a3..0d3ab57f50f90f 100644 --- a/code/modules/cargo/bounties/slime.dm +++ b/code/modules/cargo/bounties/slime.dm @@ -3,7 +3,7 @@ /datum/bounty/item/slime/New() ..() - description = "Nanotrasen's science lead is hunting for the rare and exotic [name]. A bounty has been offered for finding it." + description = "Symphionia's science lead is hunting for the rare and exotic [name]. A bounty has been offered for finding it." reward += rand(0, 4) * 500 /datum/bounty/item/slime/green diff --git a/code/modules/cargo/bounties/special.dm b/code/modules/cargo/bounties/special.dm index 268ac2ea03334d..4dc88452d19b45 100644 --- a/code/modules/cargo/bounties/special.dm +++ b/code/modules/cargo/bounties/special.dm @@ -1,6 +1,6 @@ /datum/bounty/item/alien_organs name = "Alien Organs" - description = "Nanotrasen is interested in studying Xenomorph biology. Ship a set of organs to be thoroughly compensated." + description = "Symphionia is interested in studying Xenomorph biology. Ship a set of organs to be thoroughly compensated." reward = CARGO_CRATE_VALUE * 50 required_count = 3 wanted_types = list( @@ -13,7 +13,7 @@ ) /datum/bounty/item/syndicate_documents - name = "Syndicate Documents" + name = "Symphionia Documents" description = "Intel regarding the syndicate is highly prized at CentCom. If you find syndicate documents, ship them. You could save lives." reward = CARGO_CRATE_VALUE * 30 wanted_types = list( @@ -31,7 +31,7 @@ /datum/bounty/item/adamantine name = "Adamantine" - description = "Nanotrasen's anomalous materials division is in desparate need of adamantine. Send them a large shipment and we'll make it worth your while." + description = "Symphionia's anomalous materials division is in desparate need of adamantine. Send them a large shipment and we'll make it worth your while." reward = CARGO_CRATE_VALUE * 70 required_count = 10 wanted_types = list(/obj/item/stack/sheet/mineral/adamantine = TRUE) diff --git a/code/modules/cargo/bounties/virus.dm b/code/modules/cargo/bounties/virus.dm index afa2a69819030b..9f0799f3a54a53 100644 --- a/code/modules/cargo/bounties/virus.dm +++ b/code/modules/cargo/bounties/virus.dm @@ -10,20 +10,20 @@ if(rand(3) == 1) stat_value *= -1 name = "Virus ([stat_name] of [stat_value])" - description = "Nanotrasen is interested in a virus with a [stat_name] stat of exactly [stat_value]. Central Command will pay handsomely for such a virus." + description = "Symphionia is interested in a virus with a [stat_name] stat of exactly [stat_value]. Conglomeration of Colonists will pay handsomely for such a virus." reward += rand(0, 4) * CARGO_CRATE_VALUE /datum/bounty/virus/can_claim() return ..() && shipped -/datum/bounty/virus/applies_to(obj/shipped) +/datum/bounty/virus/applies_to(obj/export) if(shipped) return FALSE - if(shipped.flags_1 & HOLOGRAM_1) + if(export.flags_1 & HOLOGRAM_1) return FALSE - if(!istype(shipped, /obj/item/reagent_containers || !shipped.reagents || !shipped.reagents.reagent_list)) + if(!istype(export, /obj/item/reagent_containers || !export.reagents || !export.reagents.reagent_list)) return FALSE - var/datum/reagent/blood/blud = locate() in shipped.reagents.reagent_list + var/datum/reagent/blood/blud = locate() in export.reagents.reagent_list if(!blud) return FALSE for(var/datum/disease/advance/virus in blud.get_diseases()) @@ -31,8 +31,8 @@ return TRUE return FALSE -/datum/bounty/virus/ship(obj/shipped) - if(!applies_to(shipped)) +/datum/bounty/virus/ship(obj/export) + if(!applies_to(export)) return FALSE shipped = TRUE return TRUE diff --git a/code/modules/cargo/centcom_podlauncher.dm b/code/modules/cargo/centcom_podlauncher.dm index 6f063e619652f5..218aed8c681b49 100644 --- a/code/modules/cargo/centcom_podlauncher.dm +++ b/code/modules/cargo/centcom_podlauncher.dm @@ -192,13 +192,13 @@ ////////////////////////////UTILITIES////////////////// if("gamePanel") holder.holder.Game() - SSblackbox.record_feedback("tally", "admin_verb", 1, "Game Panel") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Game Panel") . = TRUE if("buildMode") var/mob/holder_mob = holder.mob if (holder_mob && (holder.holder?.rank_flags() & R_BUILD)) togglebuildmode(holder_mob) - SSblackbox.record_feedback("tally", "admin_verb", 1, "Toggle Build Mode") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Toggle Build Mode") . = TRUE if("loadDataFromPreset") var/list/savedData = params["payload"] diff --git a/code/modules/cargo/coupon.dm b/code/modules/cargo/coupon.dm index 5c4e1e930b5c61..e56544a1864998 100644 --- a/code/modules/cargo/coupon.dm +++ b/code/modules/cargo/coupon.dm @@ -1,4 +1,49 @@ -#define COUPON_OMEN "omen" +///datum used by the Coupon Master PDA app to generate coupon items redeemed by a bank account. +/datum/coupon_code + ///The pack that'll receive the discount + var/datum/supply_pack/discounted_pack + ///The discount of the pack, on a 0 to 1 range. + var/discount + /** + * If set, copies of the coupon code will delete itself after a while if not printed. + * The ones SSmodular_computer.discount_coupons stay intact. + */ + var/expires_in + ///Has the coupon been printed. Dictates in which section it's shown, and that it cannot be printed again. + var/printed = FALSE + ///The timerid for deletion if expires_in is set. + var/timerid + ///Reference to the associated bank account, since we need to clear refs on deletion. + var/datum/bank_account/associated_account + +/datum/coupon_code/New(discount, discounted_pack, expires_in) + ..() + src.discounted_pack = discounted_pack + src.discount = discount + if(expires_in) + src.expires_in = world.time + expires_in + +/datum/coupon_code/Destroy() + if(associated_account) + associated_account.redeemed_coupons -= src + associated_account = null + return ..() + +/datum/coupon_code/proc/copy(datum/bank_account/account) + var/datum/coupon_code/copy = new(discount, discounted_pack, expires_in) + copy.associated_account = account + if(account) + LAZYADD(account.redeemed_coupons, src) + if(expires_in) + copy.timerid = QDEL_IN_STOPPABLE(copy, expires_in - world.time) + +/datum/coupon_code/proc/generate() + var/obj/item/coupon/coupon = new() + coupon.generate(discount, discounted_pack) + printed = TRUE + deltimer(timerid) + timerid = null + return coupon /obj/item/coupon name = "coupon" @@ -12,18 +57,15 @@ var/obj/machinery/computer/cargo/inserted_console /// Choose what our prize is :D -/obj/item/coupon/proc/generate(rig_omen=FALSE) - discounted_pack = pick(subtypesof(/datum/supply_pack/goody)) - var/list/chances = list("0.10" = 4, "0.15" = 8, "0.20" = 10, "0.25" = 8, "0.50" = 4, COUPON_OMEN = 1) - - if(rig_omen) - discount_pct_off = COUPON_OMEN - else - discount_pct_off = pick_weight(chances) +/obj/item/coupon/proc/generate(discount, datum/supply_pack/discounted_pack) + src.discounted_pack = discounted_pack || pick(GLOB.discountable_packs[pick_weight(GLOB.pack_discount_odds)]) + var/static/list/chances = list("0.10" = 4, "0.15" = 8, "0.20" = 10, "0.25" = 8, "0.50" = 4, COUPON_OMEN = 1) + discount_pct_off = discount || pick_weight(chances) if(discount_pct_off != COUPON_OMEN) - discount_pct_off = text2num(discount_pct_off) - name = "coupon - [round(discount_pct_off * 100)]% off [initial(discounted_pack.name)]" + if(!discount) // the discount arg should be a number already, while the keys in the chances list cannot be numbers + discount_pct_off = text2num(discount_pct_off) + name = "coupon - [round(discount_pct_off * 100)]% off [initial(src.discounted_pack.name)]" return name = "coupon - fuck you" @@ -71,5 +113,3 @@ LAZYREMOVE(inserted_console.loaded_coupons, src) inserted_console = null . = ..() - -#undef COUPON_OMEN diff --git a/code/modules/cargo/exports.dm b/code/modules/cargo/exports.dm index 622ab5ef9b0db9..fd6e91a8580386 100644 --- a/code/modules/cargo/exports.dm +++ b/code/modules/cargo/exports.dm @@ -115,7 +115,6 @@ Then the player gets the profit from selling his own wasted time. return ..() /datum/export/process() - ..() cost *= NUM_E**(k_elasticity * (1/30)) if(cost > init_cost) cost = init_cost diff --git a/code/modules/cargo/exports/gear.dm b/code/modules/cargo/exports/gear.dm index c420191ee80d2b..13bc602ba2a604 100644 --- a/code/modules/cargo/exports/gear.dm +++ b/code/modules/cargo/exports/gear.dm @@ -43,12 +43,12 @@ /datum/export/gear/space/syndiehelmet cost = CARGO_CRATE_VALUE * 0.3 - unit_name = "Syndicate space helmet" + unit_name = "Symphionia space helmet" export_types = list(/obj/item/clothing/head/helmet/space/syndicate) /datum/export/gear/space/syndiesuit cost = CARGO_CRATE_VALUE * 0.6 - unit_name = "Syndicate space suit" + unit_name = "Symphionia space suit" export_types = list(/obj/item/clothing/suit/space/syndicate) diff --git a/code/modules/cargo/exports/large_objects.dm b/code/modules/cargo/exports/large_objects.dm index 1871d69eb452ec..1741db4327500a 100644 --- a/code/modules/cargo/exports/large_objects.dm +++ b/code/modules/cargo/exports/large_objects.dm @@ -13,7 +13,7 @@ /datum/export/large/crate/total_printout(datum/export_report/ex, notes = TRUE) // That's why a goddamn metal crate costs that much. . = ..() if(. && notes) - . += " Thanks for participating in Nanotrasen Crates Recycling Program." + . += " Thanks for participating in Symphionia Crates Recycling Program." /datum/export/large/crate/wooden cost = CARGO_CRATE_VALUE/5 diff --git a/code/modules/cargo/exports/lavaland.dm b/code/modules/cargo/exports/lavaland.dm index 31cc1319861028..e48932974c5434 100644 --- a/code/modules/cargo/exports/lavaland.dm +++ b/code/modules/cargo/exports/lavaland.dm @@ -31,12 +31,12 @@ cost = CARGO_CRATE_VALUE * 40 unit_name = "lava planet artifact" export_types = list( - /obj/item/guardiancreator/miner, - /obj/item/rod_of_asclepius, /obj/item/dragons_blood, - /obj/item/melee/ghost_sword, + /obj/item/guardian_creator/miner, /obj/item/lava_staff, + /obj/item/melee/ghost_sword, /obj/item/prisoncube, + /obj/item/rod_of_asclepius, ) //Megafauna loot, except for ash drakes @@ -58,4 +58,4 @@ /datum/export/lavaland/megafauna/total_printout(datum/export_report/ex, notes = TRUE) //in the unlikely case a miner feels like selling megafauna loot . = ..() if(. && notes) - . += " On behalf of the Nanotrasen RnD division: Thank you for your hard work." + . += " On behalf of the Symphionia RnD division: Thank you for your hard work." diff --git a/code/modules/cargo/exports/materials.dm b/code/modules/cargo/exports/materials.dm index c9a88a6edfb200..ecb0d0d0460bfc 100644 --- a/code/modules/cargo/exports/materials.dm +++ b/code/modules/cargo/exports/materials.dm @@ -19,7 +19,7 @@ return 0 var/obj/item/I = O - var/list/mat_comp = I.get_material_composition(BREAKDOWN_FLAGS_EXPORT) + var/list/mat_comp = I.get_material_composition() var/datum/material/mat_ref = ispath(material_id) ? locate(material_id) in mat_comp : GET_MATERIAL_REF(material_id) if(isnull(mat_comp[mat_ref])) return 0 @@ -134,13 +134,24 @@ /datum/export/material/market/sell_object(obj/sold_item, datum/export_report/report, dry_run, apply_elastic) . = ..() var/amount = get_amount(sold_item) - var/price = get_cost(sold_item) if(!amount) return + + //This formula should impact lower quantity materials greater, and higher quantity materials less. Still, it's a bit rough. Tweaking may be needed. if(!dry_run) + //this material is worthless. no point adding more to the stock + var/market_price = SSstock_market.materials_prices[material_id] + if(!market_price) + return + + //decrease the market price + market_price -= round((market_price) * (amount / (amount + SSstock_market.materials_quantity[material_id]))) + if(market_price < 0) + market_price = 0 + SSstock_market.materials_prices[material_id] = market_price + + //increase the stock SSstock_market.materials_quantity[material_id] += amount - SSstock_market.materials_prices[material_id] -= round((price) * (amount / (amount + SSstock_market.materials_quantity[material_id]))) - //This formula should impact lower quantity materials greater, and higher quantity materials less. Still, it's a bit rough. Tweaking may be needed. // Stock blocks are a special type of export that can be used to sell a quantity of materials at a specific price on the market. diff --git a/code/modules/cargo/expressconsole.dm b/code/modules/cargo/expressconsole.dm index a449c8414952ce..3fdb5f659882cf 100644 --- a/code/modules/cargo/expressconsole.dm +++ b/code/modules/cargo/expressconsole.dm @@ -1,7 +1,7 @@ /obj/machinery/computer/cargo/express name = "express supply console" desc = "This console allows the user to purchase a package \ - with 1/40th of the delivery time: made possible by Nanotrasen's new \"1500mm Orbital Railgun\".\ + with 1/40th of the delivery time: made possible by Symphionia's new \"1500mm Orbital Railgun\".\ All sales are near instantaneous - please choose carefully" icon_screen = "supply_express" circuit = /obj/item/circuitboard/computer/cargo/express @@ -91,7 +91,7 @@ /obj/machinery/computer/cargo/express/ui_data(mob/user) var/canBeacon = beacon && (isturf(beacon.loc) || ismob(beacon.loc))//is the beacon in a valid location? var/list/data = list() - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) + var/datum/bank_account/D = SSeconomy.get_dep_account(cargo_account) if(D) data["points"] = D.account_balance data["locked"] = locked//swipe an ID to unlock @@ -138,7 +138,7 @@ if (beacon) beacon.update_status(SP_READY) //turns on the beacon's ready light if("printBeacon") - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) + var/datum/bank_account/D = SSeconomy.get_dep_account(cargo_account) if(D) if(D.adjust_money(-BEACON_COST)) cooldown = 10//a ~ten second cooldown for printing beacons to prevent spam @@ -149,7 +149,7 @@ if("add")//Generate Supply Order first - if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_EXPRESSPOD_CONSOLE)) + if(TIMER_COOLDOWN_RUNNING(src, COOLDOWN_EXPRESSPOD_CONSOLE)) say("Railgun recalibrating. Stand by.") return var/id = params["id"] @@ -171,7 +171,7 @@ var/list/empty_turfs var/datum/supply_order/SO = new(pack, name, rank, ckey, reason) var/points_to_check - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) + var/datum/bank_account/D = SSeconomy.get_dep_account(cargo_account) if(D) points_to_check = D.account_balance if(!(obj_flags & EMAGGED)) diff --git a/code/modules/cargo/gondolapod.dm b/code/modules/cargo/gondolapod.dm index f3dca7a3dca101..36ceff8ad51145 100644 --- a/code/modules/cargo/gondolapod.dm +++ b/code/modules/cargo/gondolapod.dm @@ -65,13 +65,13 @@ /mob/living/simple_animal/pet/gondola/gondolapod/setOpened() opened = TRUE - SET_PLANE_IMPLICIT(src, GAME_PLANE) + layer = initial(layer) update_appearance() addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, setClosed)), 50) /mob/living/simple_animal/pet/gondola/gondolapod/setClosed() opened = FALSE - SET_PLANE_IMPLICIT(src, GAME_PLANE_FOV_HIDDEN) + layer = LOW_MOB_LAYER update_appearance() /mob/living/simple_animal/pet/gondola/gondolapod/death() diff --git a/code/modules/cargo/goodies.dm b/code/modules/cargo/goodies.dm index cf08c773d060bb..0635d249467565 100644 --- a/code/modules/cargo/goodies.dm +++ b/code/modules/cargo/goodies.dm @@ -3,6 +3,13 @@ access = NONE group = "Goodies" goody = TRUE + discountable = SUPPLY_PACK_STD_DISCOUNTABLE + +/datum/supply_pack/goody/clear_pda + name = "Mint Condition Nanotrasen Clear PDA" + desc = "Mint condition, freshly repackaged! A valuable collector's item normally valued at over 2.5 million credits, now available for a steal!" + cost = 100000 + contains = list(/obj/item/modular_computer/pda/clear) /datum/supply_pack/goody/dumdum38 name = ".38 DumDum Speedloader" @@ -41,7 +48,7 @@ /datum/supply_pack/goody/Survivalknives_single name = "Survival Knife Single-Pack" - desc = "Contains one sharpened survival knive. Guaranteed to fit snugly inside any Nanotrasen-standard boot." + desc = "Contains one sharpened survival knive. Guaranteed to fit snugly inside any Symphionia-standard boot." cost = PAYCHECK_COMMAND * 1.75 contains = list(/obj/item/knife/combat/survival) @@ -54,7 +61,7 @@ /datum/supply_pack/goody/disabler_single name = "Disabler Single-Pack" - desc = "Contains one disabler, the nonlethal workhorse of Nanotrasen security everywehere. Comes in a energy holster, just in case you happen to have an extra disabler." + desc = "Contains one disabler, the nonlethal workhorse of Symphionia security everywehere. Comes in a energy holster, just in case you happen to have an extra disabler." cost = PAYCHECK_COMMAND * 3 access_view = ACCESS_WEAPONS contains = list(/obj/item/storage/belt/holster/energy/disabler) @@ -68,7 +75,7 @@ /datum/supply_pack/goody/laser_single name = "Laser Gun Single-Pack" - desc = "Contains one laser gun, the lethal workhorse of Nanotrasen security everywehere." + desc = "Contains one laser gun, the lethal workhorse of Symphionia security everywehere." cost = PAYCHECK_COMMAND * 6 access_view = ACCESS_WEAPONS contains = list(/obj/item/gun/energy/laser) @@ -267,7 +274,7 @@ contains = list(/obj/item/reagent_containers/cup/glass/mug) /datum/supply_pack/goody/nt_mug - name = "Nanotrasen Coffee Mug" + name = "Symphionia Coffee Mug" desc = "A blue mug bearing the logo of your corporate masters. Usually given out at inductions or events, we'll send one out special for a nominal fee." cost = PAYCHECK_LOWER contains = list(/obj/item/reagent_containers/cup/glass/mug/nanotrasen) diff --git a/code/modules/cargo/markets/market_items/clothing.dm b/code/modules/cargo/markets/market_items/clothing.dm index fe715a5903c72e..74399f75e59186 100644 --- a/code/modules/cargo/markets/market_items/clothing.dm +++ b/code/modules/cargo/markets/market_items/clothing.dm @@ -32,7 +32,7 @@ availability_prob = 50 /datum/market_item/clothing/full_spacesuit_set - name = "\improper Nanotrasen Branded Spacesuit Box" + name = "\improper Symphionia Branded Spacesuit Box" desc = "A few boxes of \"Old Style\" space suits fell off the back of a space truck." item = /obj/item/storage/box @@ -68,3 +68,14 @@ price_max = CARGO_CRATE_VALUE * 15 stock_max = 1 availability_prob = 40 + +/datum/market_item/clothing/anti_sec_pin + name = "Subversive Pin" + desc = "Exclusive and fashionable red pin from a limited run, proclaiming your allegiance to enemies of the Nanotrasen corporation. \ + Contains an RFID chip which interferes with common scanning equipment, to ensure that they know you are serious. Share them with your friends!" + item = /obj/item/clothing/accessory/anti_sec_pin + + price_min = CARGO_CRATE_VALUE * 0.5 + price_max = CARGO_CRATE_VALUE * 1.5 + stock_max = 5 + availability_prob = 70 diff --git a/code/modules/cargo/markets/market_items/weapons.dm b/code/modules/cargo/markets/market_items/weapons.dm index 6115b1e1557970..ee16daae7d502f 100644 --- a/code/modules/cargo/markets/market_items/weapons.dm +++ b/code/modules/cargo/markets/market_items/weapons.dm @@ -72,4 +72,4 @@ price_min = CARGO_CRATE_VALUE * 2 price_max = CARGO_CRATE_VALUE * 4 stock_max = 1 - availability_prob = 50 + availability_prob = 75 diff --git a/code/modules/cargo/materials_market.dm b/code/modules/cargo/materials_market.dm index 22ab4f2239cf27..21540e75908322 100644 --- a/code/modules/cargo/materials_market.dm +++ b/code/modules/cargo/materials_market.dm @@ -41,17 +41,17 @@ /obj/machinery/materials_market/wrench_act(mob/living/user, obj/item/tool) . = ..() if(default_unfasten_wrench(user, tool, time = 1.5 SECONDS) == SUCCESSFUL_UNFASTEN) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/materials_market/screwdriver_act(mob/living/user, obj/item/tool) . = ..() if(default_deconstruction_screwdriver(user, "[base_icon_state]_open", "[base_icon_state]", tool)) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/materials_market/crowbar_act(mob/living/user, obj/item/tool) . = ..() if(default_deconstruction_crowbar(tool)) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/materials_market/attackby(obj/item/O, mob/user, params) if(is_type_in_list(O, exportable_material_items)) @@ -105,6 +105,10 @@ ui = new(user, src, "MatMarket", name) ui.open() +/obj/machinery/materials_market/ui_static_data(mob/user) + . = list() + .["CARGO_CRATE_VALUE"] = CARGO_CRATE_VALUE + /obj/machinery/materials_market/ui_data(mob/user) . = list() @@ -247,9 +251,6 @@ return var/cost = SSstock_market.materials_prices[material_bought] * quantity - if(cost > account_payable.account_balance) - say("Not enough money to start purchase!") - return var/list/things_to_order = list() things_to_order += (sheet_to_buy) @@ -285,13 +286,14 @@ current_order.append_order(things_to_order, cost) return TRUE + //Place a new order var/datum/supply_pack/custom/minerals/mineral_pack = new( purchaser = is_ordering_private ? living_user : "Cargo", \ cost = cost, \ contains = things_to_order, \ ) - var/datum/supply_order/materials/new_order = new( + var/datum/supply_order/disposable/materials/new_order = new( pack = mineral_pack, orderer = living_user, orderer_rank = GALATIC_MATERIAL_ORDER, @@ -300,6 +302,12 @@ cost_type = "cr", can_be_cancelled = FALSE ) + //first time order compute the correct cost and compare + if(new_order.get_final_cost() > account_payable.account_balance) + say("Not enough money to start purchase!") + qdel(new_order) + return + say("Thank you for your purchase! It will arrive on the next cargo shuttle!") SSshuttle.shopping_list += new_order return TRUE diff --git a/code/modules/cargo/order.dm b/code/modules/cargo/order.dm index 58c13afbe59fb0..3f8ceb5ca02179 100644 --- a/code/modules/cargo/order.dm +++ b/code/modules/cargo/order.dm @@ -85,6 +85,10 @@ src.manifest_can_fail = manifest_can_fail src.can_be_cancelled = can_be_cancelled +/datum/supply_order/Destroy(force) + QDEL_NULL(applied_coupon) + return ..() + //returns the total cost of this order. Its not the total price paid by cargo but the total value of this order /datum/supply_order/proc/get_final_cost() var/cost = pack.get_cost() @@ -201,10 +205,17 @@ pack.contains[i] = new_contents[i] pack.cost += cost_increase -//To append cargo crate value to final order cost -/datum/supply_order/materials +/// Custom type of order who's supply pack can be safely deleted +/datum/supply_order/disposable + +/datum/supply_order/disposable/Destroy(force) + QDEL_NULL(pack) + return ..() + +/// Custom material order to append cargo crate value to the final order cost +/datum/supply_order/disposable/materials -/datum/supply_order/materials/get_final_cost() +/datum/supply_order/disposable/materials/get_final_cost() return (..() + CARGO_CRATE_VALUE) #undef MANIFEST_ERROR_CHANCE diff --git a/code/modules/cargo/orderconsole.dm b/code/modules/cargo/orderconsole.dm index fa1ace3461f2e1..a0a94badbb8c2b 100644 --- a/code/modules/cargo/orderconsole.dm +++ b/code/modules/cargo/orderconsole.dm @@ -152,7 +152,7 @@ "cost" = pack.get_cost(), "orderer" = order.orderer, "reason" = order.reason, - "id" = order.id + "id" = order.id, )) data["amount_by_name"] = amount_by_name @@ -177,7 +177,7 @@ "id" = pack, "desc" = P.desc || P.name, // If there is a description, use it. Otherwise use the pack's name. "goody" = P.goody, - "access" = P.access + "access" = P.access, )) return data @@ -267,7 +267,7 @@ reason = reason, paying_account = account, coupon = applied_coupon, - charge_on_purchase = TRUE, // SKYRAT EDIT ADDITION + charge_on_purchase = TRUE, // NOVA EDIT ADDITION ) working_list += order diff --git a/code/modules/cargo/packs/_packs.dm b/code/modules/cargo/packs/_packs.dm index aaeb55f253385c..9257d2d1e3d206 100644 --- a/code/modules/cargo/packs/_packs.dm +++ b/code/modules/cargo/packs/_packs.dm @@ -39,6 +39,8 @@ var/admin_spawned = FALSE /// Goodies can only be purchased by private accounts and can have coupons apply to them. They also come in a lockbox instead of a full crate, so the 700 min doesn't apply var/goody = FALSE + /// Can coupons target this pack? If so, how rarely? + var/discountable = SUPPLY_PACK_NOT_DISCOUNTABLE /datum/supply_pack/New() id = type @@ -122,3 +124,30 @@ name = "[purchaser]'s Materials Order" src.cost = cost src.contains = contains + +/datum/supply_pack/custom/minerals/fill(obj/structure/closet/crate/C) + for(var/obj/item/stack/sheet/possible_stack as anything in contains) + var/material_type = initial(possible_stack.material_type) + //in case we ordered more than what's in the market at the time due to market fluctuations + //we find the min of what was ordered & what's actually available in the market at this point of time + var/market_quantity = SSstock_market.materials_quantity[material_type] + var/available_quantity = min(contains[possible_stack], market_quantity) + if(!available_quantity) + continue + + //spawn the ordered stack inside the crate + var/sheets_to_spawn = available_quantity + while(sheets_to_spawn) + var/spawn_quantity = min(sheets_to_spawn, MAX_STACK_SIZE) + var/obj/item/stack/sheet/ordered_stack = new possible_stack(C, spawn_quantity) + if(admin_spawned) + ordered_stack.flags_1 |= ADMIN_SPAWNED_1 + sheets_to_spawn -= spawn_quantity + + //Prices go up as material quantity becomes scarce + var/fraction = available_quantity + if(market_quantity != available_quantity) //to avoid division by zero error + fraction /= (market_quantity - available_quantity) + SSstock_market.materials_prices[material_type] += round(SSstock_market.materials_prices[material_type] * fraction) + //We decrease the quantity only after adjusting our prices for accurate values + SSstock_market.materials_quantity[material_type] -= available_quantity diff --git a/code/modules/cargo/packs/costumes_toys.dm b/code/modules/cargo/packs/costumes_toys.dm index 6ac7ee5095d405..d0397276e8a669 100644 --- a/code/modules/cargo/packs/costumes_toys.dm +++ b/code/modules/cargo/packs/costumes_toys.dm @@ -30,6 +30,7 @@ ) crate_name = "collectable hats crate" crate_type = /obj/structure/closet/crate/wooden + discountable = SUPPLY_PACK_RARE_DISCOUNTABLE /datum/supply_pack/costumes_toys/formalwear name = "Formalwear Crate" @@ -70,6 +71,7 @@ contains = list(/obj/item/firing_pin/clown) crate_name = "toy crate" // It's /technically/ a toy. For the clown, at least. crate_type = /obj/structure/closet/crate/wooden + discountable = SUPPLY_PACK_RARE_DISCOUNTABLE /datum/supply_pack/costumes_toys/lasertag name = "Laser Tag Crate" @@ -137,7 +139,7 @@ /datum/supply_pack/costumes_toys/costume name = "Standard Costume Crate" desc = "Supply the station's entertainers with the equipment of their trade with these \ - Nanotrasen-approved costumes! Contains a full clown and mime outfit, along with a \ + Symphionia-approved costumes! Contains a full clown and mime outfit, along with a \ bike horn and a bottle of nothing." cost = CARGO_CRATE_VALUE * 2 access = ACCESS_THEATRE @@ -186,7 +188,7 @@ /datum/supply_pack/costumes_toys/wizard name = "Wizard Costume Crate" - desc = "Pretend to join the Wizard Federation with this full wizard outfit! Nanotrasen would like to remind \ + desc = "Pretend to join the Wizard Federation with this full wizard outfit! Symphionia would like to remind \ its employees that actually joining the Wizard Federation is subject to termination of job and life." cost = CARGO_CRATE_VALUE * 4 contains = list(/obj/item/staff, @@ -205,7 +207,7 @@ /datum/supply_pack/costumes_toys/trekkie name = "Trekkie Costume Crate" - desc = "Wear the scrapped concepts for twelve of Nanotrasen's jumpsuits, based off popular \ + desc = "Wear the scrapped concepts for twelve of Symphionia's jumpsuits, based off popular \ late-20th century Earth media! While they couldn't be used for the official jumpsuits \ due to copyright infringement, it's been assured that they can still legally be sold under \ the label of being 'failed designs'." @@ -232,6 +234,7 @@ cost = 1000 contains = list() crate_name = "booster pack pack" + discountable = SUPPLY_PACK_STD_DISCOUNTABLE /datum/supply_pack/costumes_toys/randomised/tcg/fill(obj/structure/closet/crate/C) var/cardpacktype @@ -244,6 +247,7 @@ desc = "This crate contains a random assortment of stickers." cost = CARGO_CRATE_VALUE * 3 contains = list() + discountable = SUPPLY_PACK_STD_DISCOUNTABLE /datum/supply_pack/costumes_toys/stickers/fill(obj/structure/closet/crate/crate) for(var/i in 1 to rand(1,2)) @@ -262,3 +266,4 @@ ) crate_name = "corgi pinata kit" crate_type = /obj/structure/closet/crate/wooden + discountable = SUPPLY_PACK_STD_DISCOUNTABLE diff --git a/code/modules/cargo/packs/emergency.dm b/code/modules/cargo/packs/emergency.dm index fca1a201ac103b..b48ef268da683c 100644 --- a/code/modules/cargo/packs/emergency.dm +++ b/code/modules/cargo/packs/emergency.dm @@ -1,15 +1,18 @@ /datum/supply_pack/emergency group = "Emergency" + discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE /datum/supply_pack/emergency/bio name = "Biological Emergency Crate" - desc = "This crate holds 2 full bio suits which will protect you from viruses." + desc = "This crate includes 2 complete bio suits, along with a box containing sterile masks and latex gloves, providing effective protection against viruses." cost = CARGO_CRATE_VALUE * 2 contains = list(/obj/item/clothing/head/bio_hood = 2, /obj/item/clothing/suit/bio_suit = 2, /obj/item/storage/bag/bio, /obj/item/reagent_containers/syringe/antiviral = 2, /obj/item/clothing/gloves/latex/nitrile = 2, + /obj/item/storage/box/masks, + /obj/item/storage/box/gloves, ) crate_name = "bio suit crate" @@ -19,11 +22,12 @@ in stations and people alike! Comes with two floorbots, two medbots, five oxygen \ masks and five small oxygen tanks." cost = CARGO_CRATE_VALUE * 4 - contains = list(/mob/living/simple_animal/bot/floorbot = 2, - /mob/living/simple_animal/bot/medbot = 2, - /obj/item/tank/internals/emergency_oxygen = 5, - /obj/item/clothing/mask/breath = 5, - ) + contains = list( + /mob/living/basic/bot/medbot = 2, + /mob/living/simple_animal/bot/floorbot = 2, + /obj/item/tank/internals/emergency_oxygen = 5, + /obj/item/clothing/mask/breath = 5, + ) crate_name = "emergency crate" crate_type = /obj/structure/closet/crate/internals @@ -62,7 +66,7 @@ access = ACCESS_ATMOSPHERICS contains = list(/obj/item/watertank/atmos) crate_name = "firefighting backpack crate" - crate_type = /obj/structure/closet/crate/secure + crate_type = /obj/structure/closet/crate/secure/engineering/atmos /datum/supply_pack/emergency/internals name = "Internals Crate" diff --git a/code/modules/cargo/packs/engineering.dm b/code/modules/cargo/packs/engineering.dm index f5d865de95ce0f..3466cc50519e3a 100644 --- a/code/modules/cargo/packs/engineering.dm +++ b/code/modules/cargo/packs/engineering.dm @@ -4,7 +4,7 @@ /datum/supply_pack/engineering/shieldgen name = "Anti-breach Shield Projector Crate" - desc = "Hull breaches again? Say no more with the Nanotrasen Anti-Breach Shield Projector! \ + desc = "Hull breaches again? Say no more with the Symphionia Anti-Breach Shield Projector! \ Uses forcefield technology to keep the air in, and the space out. Contains two shield projectors." cost = CARGO_CRATE_VALUE * 3 access_view = ACCESS_ENGINE_EQUIP @@ -31,6 +31,7 @@ /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp, ) crate_name= "\improper APLU MK-I kit" + crate_type = /obj/structure/closet/crate/science/robo /datum/supply_pack/engineering/conveyor name = "Conveyor Assembly Crate" @@ -72,7 +73,7 @@ desc = "No rechargers? No problem, with the NT-75 EPI, you can recharge any standard \ cell-based equipment anytime, anywhere. Contains two Inducers." cost = CARGO_CRATE_VALUE * 4 - contains = list(/obj/item/inducer/sci {cell_type = /obj/item/stock_parts/cell/inducer_supply; opened = 0} = 2) //FALSE doesn't work in modified type paths apparently. + contains = list(/obj/item/inducer/orderable = 2) crate_name = "inducer crate" crate_type = /obj/structure/closet/crate/engineering/electrical @@ -125,6 +126,7 @@ access_view = ACCESS_ATMOSPHERICS contains = list(/obj/machinery/portable_atmospherics/pump = 2) crate_name = "portable air pump crate" + crate_type = /obj/structure/closet/crate/secure/engineering/atmos /datum/supply_pack/engineering/portascrubber name = "Portable Scrubber Crate" @@ -133,6 +135,7 @@ access_view = ACCESS_ATMOSPHERICS contains = list(/obj/machinery/portable_atmospherics/scrubber = 2) crate_name = "portable scrubber crate" + crate_type = /obj/structure/closet/crate/secure/engineering/atmos /datum/supply_pack/engineering/hugescrubber name = "Huge Portable Scrubber Crate" @@ -149,11 +152,11 @@ cost = CARGO_CRATE_VALUE * 2 contains = list(/obj/machinery/space_heater) crate_name = "space heater crate" - crate_type = /obj/structure/closet/crate/large + crate_type = /obj/structure/closet/crate/secure/engineering/atmos /datum/supply_pack/engineering/bsa name = "Bluespace Artillery Parts" - desc = "The pride of Nanotrasen Naval Command. The legendary Bluespace Artillery Cannon is a \ + desc = "The pride of Symphionia Naval Command. The legendary Bluespace Artillery Cannon is a \ devastating feat of human engineering and testament to wartime determination. \ Highly advanced research is required for proper construction." cost = CARGO_CRATE_VALUE * 30 @@ -266,8 +269,9 @@ access = ACCESS_CE contains = list(/obj/machinery/power/supermatter_crystal/shard) crate_name = "supermatter shard crate" - crate_type = /obj/structure/closet/crate/secure/engineering + crate_type = /obj/structure/closet/crate/secure/radiation dangerous = TRUE + discountable = SUPPLY_PACK_RARE_DISCOUNTABLE /datum/supply_pack/engine/tesla_coils name = "Tesla Coil Crate" @@ -291,7 +295,7 @@ /obj/item/hfr_box/core, ) crate_name = "HFR crate" - crate_type = /obj/structure/closet/crate/secure/engineering + crate_type = /obj/structure/closet/crate/secure/engineering/atmos dangerous = TRUE /datum/supply_pack/engineering/rad_protection_modules diff --git a/code/modules/cargo/packs/general.dm b/code/modules/cargo/packs/general.dm index cd6df472d4bf69..9f874be6a2d87f 100644 --- a/code/modules/cargo/packs/general.dm +++ b/code/modules/cargo/packs/general.dm @@ -25,14 +25,16 @@ /obj/item/toner = 2) crate_name = "tattoo crate" crate_type = /obj/structure/closet/crate/wooden + discountable = SUPPLY_PACK_STD_DISCOUNTABLE /datum/supply_pack/misc/bicycle name = "Bicycle" - desc = "Nanotrasen reminds all employees to never toy with powers outside their control." + desc = "Symphionia reminds all employees to never toy with powers outside their control." cost = 1000000 //Special case, we don't want to make this in terms of crates because having bikes be a million credits is the whole meme. contains = list(/obj/vehicle/ridden/bicycle) crate_name = "bicycle crate" crate_type = /obj/structure/closet/crate/large + discountable = SUPPLY_PACK_RARE_DISCOUNTABLE /datum/supply_pack/misc/bigband name = "Big Band Instrument Collection" @@ -54,7 +56,7 @@ /datum/supply_pack/misc/book_crate name = "Book Crate" - desc = "Surplus from the Nanotrasen Archives, these seven books are sure to be good reads." + desc = "Surplus from the Symphionia Archives, these seven books are sure to be good reads." cost = CARGO_CRATE_VALUE * 3 access_view = ACCESS_LIBRARY contains = list(/obj/item/book/codex_gigas, @@ -66,13 +68,13 @@ /datum/supply_pack/misc/commandkeys name = "Command Encryption Key Crate" desc = "A pack of encryption keys that give access to the command radio network. \ - Nanotrasen reminds unauthorized employees not to eavesdrop in on secure communications channels, \ + Symphionia reminds unauthorized employees not to eavesdrop in on secure communications channels, \ or at least to keep heckling of the command staff to a minimum." access_view = ACCESS_COMMAND access = ACCESS_COMMAND cost = CARGO_CRATE_VALUE * 4 contains = list(/obj/item/encryptionkey/headset_com = 3) - crate_type = /obj/structure/closet/crate/secure + crate_type = /obj/structure/closet/crate/secure/centcom crate_name = "command encryption key crate" /datum/supply_pack/misc/exploration_drone @@ -149,7 +151,7 @@ /datum/supply_pack/misc/empty name = "Empty Supplypod" - desc = "Presenting the New Nanotrasen-Brand Bluespace Supplypod! Transport cargo with grace and ease! \ + desc = "Presenting the New Symphionia-Brand Bluespace Supplypod! Transport cargo with grace and ease! \ Call today and we'll shoot over a demo unit for just 300 credits!" cost = CARGO_CRATE_VALUE * 0.6 //Empty pod, so no crate refund contains = list() @@ -206,7 +208,7 @@ ///Special supply crate that generates random syndicate gear up to a determined TC value /datum/supply_pack/misc/syndicate - name = "Assorted Syndicate Gear" + name = "Assorted Symphionia Gear" desc = "Contains a random assortment of syndicate gear." special = TRUE //Cannot be ordered via cargo contains = list() @@ -236,7 +238,7 @@ crate_value -= uplink_item.cost new uplink_item.item(C) -///Syndicate supply crate that can have its contents value changed by admins, uses a seperate datum to avoid having admins touch the original one. +///Symphionia supply crate that can have its contents value changed by admins, uses a seperate datum to avoid having admins touch the original one. /datum/supply_pack/misc/syndicate/custom_value /datum/supply_pack/misc/syndicate/custom_value/proc/setup_contents(value, uplink) diff --git a/code/modules/cargo/packs/imports.dm b/code/modules/cargo/packs/imports.dm index 2c90d8603d0694..61cdc5945775b8 100644 --- a/code/modules/cargo/packs/imports.dm +++ b/code/modules/cargo/packs/imports.dm @@ -17,6 +17,7 @@ cost = CARGO_CRATE_VALUE * 2 contains = list(/obj/item/gun/ballistic/shotgun/toy = 8) crate_name = "foam force crate" + discountable = SUPPLY_PACK_STD_DISCOUNTABLE /datum/supply_pack/imports/foamforce/bonus name = "Foam Force Pistols Crate" @@ -37,6 +38,7 @@ contains = list(/obj/item/storage/backpack/meat) crate_name = "MEAT MEAT MEAT MEAT MEAT" crate_type = /obj/structure/closet/crate/necropolis + discountable = SUPPLY_PACK_RARE_DISCOUNTABLE /datum/supply_pack/imports/duct_spider name = "Duct Spider Crate" @@ -45,6 +47,7 @@ contains = list(/mob/living/basic/spider/maintenance) crate_name = "duct spider crate" crate_type = /obj/structure/closet/crate/critter + discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE /datum/supply_pack/imports/duct_spider/dangerous name = "Duct Spider Crate?" @@ -66,6 +69,7 @@ cost = CARGO_CRATE_VALUE * 100 contains = list(/obj/item/stack/sheet/mineral/bananium) crate_name = "bananium sheet crate" + discountable = SUPPLY_PACK_RARE_DISCOUNTABLE /datum/supply_pack/imports/naturalbait name = "Freshness Jars full of Natural Bait" @@ -201,7 +205,7 @@ /obj/item/grenade/mirage = 5, ) -// SKYRAT EDIT REMOVAL BEGIN - REPLACED BY LORE BEFITTING CRATE AT: modular_skyrat/modules/cargo/code/packs.dm +// NOVA EDIT REMOVAL BEGIN - REPLACED BY LORE BEFITTING CRATE AT: modular_nova/modules/cargo/code/packs.dm /* /datum/supply_pack/imports/russian name = "Russian Surplus Military Gear Crate" @@ -228,13 +232,14 @@ /obj/item/clothing/suit/armor/vest/russian_coat, /obj/item/storage/toolbox/guncase/soviet = 2, ) + discountable = SUPPLY_PACK_RARE_DISCOUNTABLE /datum/supply_pack/imports/russian/fill(obj/structure/closet/crate/our_crate) for(var/items in 1 to 10) var/item = pick(contains) new item(our_crate) */ -// SKYRAT EDIT REMOVAL END +// NOVA EDIT REMOVAL END /datum/supply_pack/imports/moistnuggets name = "Refurbished Sakhno Precision Rifle Crate" @@ -272,6 +277,7 @@ crate_name = "abandoned crate" contraband = TRUE dangerous = TRUE //these are literally bombs so.... + discountable = SUPPLY_PACK_RARE_DISCOUNTABLE /datum/supply_pack/imports/shambler_evil name = "Shamber's Juice Eldritch Energy! Crate" @@ -316,4 +322,4 @@ /obj/item/stock_parts/card_reader = 1 ) crate_name = "materials market crate" - crate_type = /obj/structure/closet/crate + crate_type = /obj/structure/closet/crate/cargo diff --git a/code/modules/cargo/packs/livestock.dm b/code/modules/cargo/packs/livestock.dm index ef9fb96182302e..899216ffb5befa 100644 --- a/code/modules/cargo/packs/livestock.dm +++ b/code/modules/cargo/packs/livestock.dm @@ -6,13 +6,13 @@ name = "Bird Crate" desc = "Contains five expert telecommunication birds." cost = CARGO_CRATE_VALUE * 8 - contains = list(/mob/living/simple_animal/parrot) + contains = list(/mob/living/basic/parrot) crate_name = "parrot crate" /datum/supply_pack/critter/parrot/generate() . = ..() for(var/i in 1 to 4) - new /mob/living/simple_animal/parrot(.) + new /mob/living/basic/parrot(.) /datum/supply_pack/critter/butterfly name = "Butterflies Crate" @@ -31,18 +31,22 @@ name = "Cat Crate" desc = "The cat goes meow! Comes with a collar and a nice cat toy! Cheeseburger not included."//i can't believe im making this reference cost = CARGO_CRATE_VALUE * 10 //Cats are worth as much as corgis. - contains = list(/mob/living/simple_animal/pet/cat, - /obj/item/clothing/neck/petcollar, - /obj/item/toy/cattoy, - ) + contains = list( + /mob/living/basic/pet/cat, + /obj/item/clothing/neck/petcollar, + /obj/item/toy/cattoy, + ) crate_name = "cat crate" /datum/supply_pack/critter/cat/generate() . = ..() - if(prob(50)) - var/mob/living/simple_animal/pet/cat/C = locate() in . - qdel(C) - new /mob/living/simple_animal/pet/cat/_proc(.) + if(!prob(50)) + return + var/mob/living/basic/pet/cat/delete_cat = locate() in . + if(isnull(delete_cat)) + return + qdel(delete_cat) + new /mob/living/basic/pet/cat/_proc(.) /datum/supply_pack/critter/chick name = "Chicken Crate" @@ -218,6 +222,7 @@ cost = CARGO_CRATE_VALUE * 20 contains = list(/mob/living/basic/garden_gnome) crate_name = "garden gnome crate" + discountable = SUPPLY_PACK_RARE_DISCOUNTABLE /datum/supply_pack/critter/garden_gnome/generate() . = ..() diff --git a/code/modules/cargo/packs/medical.dm b/code/modules/cargo/packs/medical.dm index 3cfb824b4e6986..c30a698c06f876 100644 --- a/code/modules/cargo/packs/medical.dm +++ b/code/modules/cargo/packs/medical.dm @@ -1,7 +1,7 @@ /datum/supply_pack/medical group = "Medical" access_view = ACCESS_MEDICAL - crate_type = /obj/structure/closet/crate/medical + crate_type = /obj/structure/closet/crate/medical/department /datum/supply_pack/medical/bloodpacks name = "Blood Pack Variety Crate" @@ -29,6 +29,7 @@ /obj/item/reagent_containers/hypospray/medipen/ekit = 3, /obj/item/reagent_containers/hypospray/medipen/blood_loss = 3) crate_name = "medipen crate" + crate_type = /obj/structure/closet/crate/medical /datum/supply_pack/medical/coroner_crate name = "Autopsy Kit" @@ -70,6 +71,7 @@ cost = CARGO_CRATE_VALUE * 5 contains = list(/obj/item/defibrillator/loaded = 2) crate_name = "defibrillator crate" + crate_type = /obj/structure/closet/crate/medical /datum/supply_pack/medical/iv_drip name = "IV Drip Crate" @@ -77,6 +79,7 @@ cost = CARGO_CRATE_VALUE * 2 contains = list(/obj/machinery/iv_drip) crate_name = "iv drip crate" + crate_type = /obj/structure/closet/crate/medical /datum/supply_pack/medical/supplies name = "Medical Supplies Crate" @@ -108,6 +111,7 @@ /obj/item/vending_refill/drugs, ) crate_name = "medical supplies crate" + crate_type = /obj/structure/closet/crate/medical /datum/supply_pack/medical/supplies/fill(obj/structure/closet/crate/C) for(var/i in 1 to 10) @@ -120,6 +124,7 @@ cost = CARGO_CRATE_VALUE * 2 contains = list(/obj/item/storage/pill_bottle/sansufentanyl = 2) crate_name = "experimental medicine crate" + crate_type = /obj/structure/closet/crate/medical /datum/supply_pack/medical/surgery name = "Surgical Supplies Crate" @@ -143,6 +148,7 @@ cost = CARGO_CRATE_VALUE * 6 access = ACCESS_MEDICAL contains = list(/obj/machinery/iv_drip/saline) + crate_type = /obj/structure/closet/crate/large /datum/supply_pack/medical/virus name = "Virus Crate" @@ -183,3 +189,4 @@ cost = CARGO_CRATE_VALUE * 6 contains = list(/obj/item/organ/internal/cyberimp/arm/muscle = 2) crate_name = "Strong-Arm implant crate" + discountable = SUPPLY_PACK_RARE_DISCOUNTABLE diff --git a/code/modules/cargo/packs/organic.dm b/code/modules/cargo/packs/organic.dm index eb26d5ec907f77..2c63bad7e84203 100644 --- a/code/modules/cargo/packs/organic.dm +++ b/code/modules/cargo/packs/organic.dm @@ -21,7 +21,7 @@ /datum/supply_pack/organic/hydroponics/beekeeping_fullkit name = "Beekeeping Starter Crate" desc = "BEES BEES BEES. Contains three honey frames, a beekeeper suit and helmet, \ - flyswatter, bee house, and, of course, a pure-bred Nanotrasen-Standardized Queen Bee!" + flyswatter, bee house, and, of course, a pure-bred Symphionia-Standardized Queen Bee!" cost = CARGO_CRATE_VALUE * 3 contains = list(/obj/structure/beebox/unwrenched, /obj/item/honey_frame = 3, @@ -125,6 +125,7 @@ access = ACCESS_THEATRE access_view = ACCESS_THEATRE crate_type = /obj/structure/closet/crate/secure + discountable = SUPPLY_PACK_RARE_DISCOUNTABLE /datum/supply_pack/organic/hydroponics name = "Hydroponics Crate" @@ -151,7 +152,7 @@ access = ACCESS_HYDROPONICS contains = list(/obj/item/watertank) crate_name = "hydroponics backpack crate" - crate_type = /obj/structure/closet/crate/secure + crate_type = /obj/structure/closet/crate/secure/hydroponics /datum/supply_pack/organic/pizza name = "Pizza Crate" @@ -245,7 +246,7 @@ /datum/supply_pack/organic/potted_plants name = "Potted Plants Crate" desc = "Spruce up the station with these lovely plants! Contains a random \ - assortment of five potted plants from Nanotrasen's potted plant research division. \ + assortment of five potted plants from Symphionia's potted plant research division. \ Warranty void if thrown." cost = CARGO_CRATE_VALUE * 1.5 contains = list(/obj/item/kirbyplants/random = 5) @@ -306,6 +307,7 @@ /obj/machinery/grill/unwrenched, ) crate_name = "grilling starter kit crate" + discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE /datum/supply_pack/organic/grillfuel name = "Grilling Fuel Kit" @@ -317,6 +319,7 @@ /obj/item/reagent_containers/cup/soda_cans/monkey_energy, ) crate_name = "grilling fuel kit crate" + discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE /datum/supply_pack/organic/tiziran_supply name = "Tiziran Supply Box" diff --git a/code/modules/cargo/packs/science.dm b/code/modules/cargo/packs/science.dm index 19a7710ffed7bb..f0de463c4490f8 100644 --- a/code/modules/cargo/packs/science.dm +++ b/code/modules/cargo/packs/science.dm @@ -113,7 +113,7 @@ /obj/item/clothing/head/utility/hardhat/red = 2, /obj/item/storage/medkit = 2) crate_name = "robotics assembly crate" - crate_type = /obj/structure/closet/crate/secure/science + crate_type = /obj/structure/closet/crate/secure/science/robo /datum/supply_pack/science/rped name = "RPED crate" @@ -176,4 +176,4 @@ access_view = ACCESS_ROBOTICS contains = list(/obj/item/mod/core/standard = 3) crate_name = "\improper MOD core crate" - crate_type = /obj/structure/closet/crate/secure/science + crate_type = /obj/structure/closet/crate/secure/science/robo diff --git a/code/modules/cargo/packs/security.dm b/code/modules/cargo/packs/security.dm index 42a6c03544a2a5..8b0eb1eaebb801 100644 --- a/code/modules/cargo/packs/security.dm +++ b/code/modules/cargo/packs/security.dm @@ -35,7 +35,7 @@ /datum/supply_pack/security/forensics name = "Forensics Crate" - desc = "Stay hot on the criminal's heels with Nanotrasen's Detective Essentials™. \ + desc = "Stay hot on the criminal's heels with Symphionia's Detective Essentials™. \ Contains a forensics scanner, six evidence bags, camera, tape recorder, white crayon, \ and of course, a fedora." cost = CARGO_CRATE_VALUE * 2.5 @@ -131,7 +131,7 @@ /datum/supply_pack/security/justiceinbound name = "Standard Justice Enforcer Crate" desc = "This is it. The Bee's Knees. The Creme of the Crop. The Pick of the Litter. \ - The best of the best of the best. The Crown Jewel of Nanotrasen. \ + The best of the best of the best. The Crown Jewel of Symphionia. \ The Alpha and the Omega of security headwear. Guaranteed to strike fear into the hearts \ of each and every criminal aboard the station. Also comes with a security gasmask." cost = CARGO_CRATE_VALUE * 6 //justice comes at a price. An expensive, noisy price. @@ -140,6 +140,7 @@ /obj/item/clothing/mask/gas/sechailer, ) crate_name = "security clothing crate" + discountable = SUPPLY_PACK_RARE_DISCOUNTABLE /datum/supply_pack/security/baton name = "Stun Batons Crate" @@ -168,6 +169,7 @@ /obj/item/clothing/mask/whistle, /obj/item/conversion_kit, ) + discountable = SUPPLY_PACK_RARE_DISCOUNTABLE /// Armory packs @@ -314,7 +316,7 @@ /datum/supply_pack/security/armory/swat name = "SWAT Crate" desc = "Contains two fullbody sets of tough, fireproof suits designed in a joint \ - effort by IS-ERI and Nanotrasen. Each set contains a suit, helmet, mask, combat belt, \ + effort by IS-ERI and Symphionia. Each set contains a suit, helmet, mask, combat belt, \ and gorilla gloves." cost = CARGO_CRATE_VALUE * 7 contains = list(/obj/item/clothing/head/helmet/swat/nanotrasen = 2, @@ -340,3 +342,17 @@ access_view = ACCESS_SECURITY contains = list(/obj/item/clothing/glasses/sunglasses = 1) crate_name = "sunglasses crate" + +/datum/supply_pack/security/armory/beacon_imp + name = "Beacon Implants Crate" + desc = "Contains five Beacon implants." + cost = CARGO_CRATE_VALUE * 5.5 + contains = list(/obj/item/storage/box/beaconimp) + crate_name = "beacon implant crate" + +/datum/supply_pack/security/armory/teleport_blocker_imp + name = "Bluespace Grounding Implants Crate" + desc = "Contains five Bluespace Grounding implants." + cost = CARGO_CRATE_VALUE * 7 + contains = list(/obj/item/storage/box/teleport_blocker) + crate_name = "bluespace grounding implant crate" diff --git a/code/modules/cargo/packs/service.dm b/code/modules/cargo/packs/service.dm index 45660dcc73ee60..5327257cacfc91 100644 --- a/code/modules/cargo/packs/service.dm +++ b/code/modules/cargo/packs/service.dm @@ -26,7 +26,7 @@ /datum/supply_pack/service/janitor name = "Janitorial Supplies Crate" - desc = "Fight back against dirt and grime with Nanotrasen's Janitorial Essentials™! \ + desc = "Fight back against dirt and grime with Symphionia's Janitorial Essentials™! \ Contains three buckets, caution signs, and cleaner grenades. Also has a single mop, \ broom, spray cleaner, rag, and trash bag." cost = CARGO_CRATE_VALUE * 2 @@ -74,7 +74,7 @@ /datum/supply_pack/service/party name = "Party Equipment" - desc = "Celebrate both life and death on the station with Nanotrasen's Party Essentials™! \ + desc = "Celebrate both life and death on the station with Symphionia's Party Essentials™! \ Contains seven colored glowsticks, six beers, six sodas, two ales, and a bottle of patron, \ goldschlager, and shaker!" cost = CARGO_CRATE_VALUE * 5 @@ -103,6 +103,7 @@ contains = list(/obj/item/stack/tile/carpet/fifty = 2, /obj/item/stack/tile/carpet/black/fifty = 2) crate_name = "premium carpet crate" + discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE /datum/supply_pack/service/carpet_exotic name = "Exotic Carpet Crate" @@ -119,6 +120,7 @@ /obj/item/stack/tile/carpet/royalblack/fifty = 2, ) crate_name = "exotic carpet crate" + discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE /datum/supply_pack/service/carpet_neon name = "Simple Neon Carpet Crate" @@ -140,6 +142,7 @@ /obj/item/stack/tile/carpet/neon/simple/pink/sixty = 2, ) crate_name = "neon carpet crate" + discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE /datum/supply_pack/service/lightbulbs name = "Replacement Lights" @@ -160,15 +163,16 @@ access_view = ACCESS_MINING_STATION contains = list(/obj/item/storage/backpack/duffelbag/mining_conscript) crate_name = "shaft miner starter kit" - crate_type = /obj/structure/closet/crate/secure + crate_type = /obj/structure/closet/crate/secure/cargo/mining /datum/supply_pack/service/survivalknives name = "Survival Knives Crate" desc = "Contains three sharpened survival knives. Each knife guaranteed to fit snugly \ - inside any Nanotrasen-standard boot." + inside any Symphionia-standard boot." cost = CARGO_CRATE_VALUE * 3 contains = list(/obj/item/knife/combat/survival = 3) crate_name = "survival knife crate" + crate_type = /obj/structure/closet/crate/cargo/mining /datum/supply_pack/service/wedding name = "Wedding Crate" @@ -189,7 +193,7 @@ /// Box of 7 grey IDs. /datum/supply_pack/service/greyidbox - name = "Grey ID Card Multipack Cate" + name = "Grey ID Card Multipack Crate" desc = "A convenient crate containing a box of seven cheap ID cards in a handy wallet-sized form factor. \ Cards come in every colour you can imagne, as long as it's grey." cost = CARGO_CRATE_VALUE * 3 @@ -224,6 +228,7 @@ /obj/item/storage/box/donkpockets/donkpockethonk, ) crate_name = "donk pocket crate" + crate_type = /obj/structure/closet/crate/freezer/food /datum/supply_pack/service/randomized/donkpockets/fill(obj/structure/closet/crate/C) for(var/i in 1 to 3) @@ -240,6 +245,8 @@ /obj/item/food/ready_donk/donkhiladas, ) crate_name = "\improper Ready-Donk crate" + crate_type = /obj/structure/closet/crate/freezer/food + discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE /datum/supply_pack/service/randomized/ready_donk/fill(obj/structure/closet/crate/C) for(var/i in 1 to 3) @@ -262,6 +269,7 @@ /obj/item/reagent_containers/cup/bottle/syrup_bottle/caramel, //one extra syrup as a treat ) crate_name = "coffee equipment crate" + discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE /datum/supply_pack/service/coffeemaker name = "Impressa Coffeemaker Crate" @@ -270,6 +278,7 @@ contains = list(/obj/machinery/coffeemaker/impressa) crate_name = "coffeemaker crate" crate_type = /obj/structure/closet/crate/large + discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE /datum/supply_pack/service/aquarium_kit name = "Aquarium Kit" @@ -284,3 +293,13 @@ ) crate_name = "aquarium kit crate" crate_type = /obj/structure/closet/crate/wooden + discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE + +/// Spare bar sign wallmount +/datum/supply_pack/service/bar_sign + name = "Bar Sign Replacement Kit" + desc = "A replacement bar sign, perfect for drawing in customers to your bar, tavern, inn, nightclub, or even coffeehouse!" + cost = CARGO_CRATE_VALUE * 14 + contains = list(/obj/item/wallframe/barsign/all_access) + crate_name = "bar sign crate" + discountable = SUPPLY_PACK_RARE_DISCOUNTABLE diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm index ed75e6349676fa..58c4298ac0e483 100644 --- a/code/modules/cargo/supplypod.dm +++ b/code/modules/cargo/supplypod.dm @@ -259,11 +259,11 @@ var/mob/living/carbon/carbon_target_mob = target_living for(var/obj/item/organ/organ_to_yeet as anything in carbon_target_mob.organs) var/destination = get_edge_target_turf(turf_underneath, pick(GLOB.alldirs)) //Pick a random direction to toss them in - // SKYRAT EDIT START - Non-spillable organs + // NOVA EDIT START - Non-spillable organs if(!organ_to_yeet.drop_when_organ_spilling) qdel(organ_to_yeet) continue - // SKYRAT EDIT END + // NOVA EDIT END organ_to_yeet.Remove(carbon_target_mob) //Note that this isn't the same proc as for lists organ_to_yeet.forceMove(turf_underneath) //Move the organ outta the body organ_to_yeet.throw_at(destination, 2, 3) //Thow the organ at a random tile 3 spots away @@ -319,7 +319,7 @@ if (openingSound) playsound(get_turf(holder), openingSound, soundVolume, FALSE, FALSE) //Special admin sound to play for (var/turf_type in turfs_in_cargo) - turf_underneath.PlaceOnTop(turf_type) + turf_underneath.place_on_top(turf_type) for (var/cargo in holder.contents) var/atom/movable/movable_cargo = cargo movable_cargo.forceMove(turf_underneath) @@ -704,7 +704,7 @@ /obj/item/disk/cargo/bluespace_pod //Disk that can be inserted into the Express Console to allow for Advanced Bluespace Pods name = "Bluespace Drop Pod Upgrade" desc = "This disk provides a firmware update to the Express Supply Console, granting the use of Nanotrasen's Bluespace Drop Pods to the supply department." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "cargodisk" inhand_icon_state = "card-id" w_class = WEIGHT_CLASS_SMALL diff --git a/code/modules/cargo/supplypod_beacon.dm b/code/modules/cargo/supplypod_beacon.dm index 89c474635fa182..999e7d76eecc85 100644 --- a/code/modules/cargo/supplypod_beacon.dm +++ b/code/modules/cargo/supplypod_beacon.dm @@ -1,7 +1,7 @@ /obj/item/supplypod_beacon name = "Supply Pod Beacon" desc = "A device that can be linked to an Express Supply Console for precision supply pod deliveries." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tracker.dmi' icon_state = "supplypod_beacon" inhand_icon_state = "radio" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' @@ -69,7 +69,7 @@ /obj/item/supplypod_beacon/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/item/supplypod_beacon/proc/unlink_console() if(express_console) @@ -107,5 +107,3 @@ if(!user.can_perform_action(src)) return name += " ([tag])" - - diff --git a/code/modules/cargo/universal_scanner.dm b/code/modules/cargo/universal_scanner.dm index 2b9bb46e0580e4..68fe533959acb0 100644 --- a/code/modules/cargo/universal_scanner.dm +++ b/code/modules/cargo/universal_scanner.dm @@ -3,9 +3,10 @@ /obj/item/universal_scanner name = "universal scanner" desc = "A device used to check objects against Nanotrasen exports database, assign price tags, or ready an item for a custom vending machine." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/scanner.dmi' icon_state = "export scanner" - inhand_icon_state = "radio" + worn_icon_state = "electronic" + inhand_icon_state = "export_scanner" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' item_flags = NOBLUDGEON diff --git a/code/modules/client/client_colour.dm b/code/modules/client/client_colour.dm index 707267e7143137..158e466c107553 100644 --- a/code/modules/client/client_colour.dm +++ b/code/modules/client/client_colour.dm @@ -191,7 +191,7 @@ colour = list(/*R*/ 0,0,0,0, /*G*/ 0,175,0,0, /*B*/ 0,0,0,0, /*A*/ 0,0,0,1, /*C*/0,-130,0,0) // Matrix colors /datum/client_colour/monochrome - colour = list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) + colour = COLOR_MATRIX_GRAYSCALE priority = PRIORITY_HIGH //we can't see colors anyway! override = TRUE fade_in = 20 diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index 2e655e91651eee..15a8e4454fc1ed 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -76,8 +76,6 @@ var/move_delay = 0 ///The visual delay to use for the current client.Move(), mostly used for making a client based move look like it came from some other slower source var/visual_delay = 0 - ///Current area of the controlled mob - var/area = null /////////////// //SOUND STUFF// diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 44591686aef10f..f77d74a52c55f7 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -3,10 +3,7 @@ //////////// GLOBAL_LIST_INIT(blacklisted_builds, list( - "1407" = "bug preventing client display overrides from working leads to clients being able to see things/mobs they shouldn't be able to see", - "1408" = "bug preventing client display overrides from working leads to clients being able to see things/mobs they shouldn't be able to see", - "1428" = "bug causing right-click menus to show too many verbs that's been fixed in version 1429", - + "1622" = "Bug breaking rendering can lead to wallhacks.", )) #define LIMITER_SIZE 5 @@ -35,10 +32,10 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( /client/Topic(href, href_list, hsrc, hsrc_command) if(!usr || usr != mob) //stops us calling Topic for somebody else's client. Also helps prevent usr=null return - //SKYRAT EDIT ADDITION BEGIN - MENTOR + //NOVA EDIT ADDITION BEGIN - MENTOR if(mentor_client_procs(href_list)) return - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END #ifndef TESTING if (lowertext(hsrc_command) == "_debug") //disable the integrated byond vv in the client side debugging tools since it doesn't respect vv read protections @@ -111,6 +108,18 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if (href_list["player_ticket_panel"]) view_latest_ticket() return + // Admin message + if(href_list["messageread"]) + var/message_id = round(text2num(href_list["messageread"]), 1) + if(!isnum(message_id)) + return + var/datum/db_query/query_message_read = SSdbcore.NewQuery( + "UPDATE [format_table_name("messages")] SET type = 'message sent' WHERE targetckey = :player_key AND id = :id", + list("id" = message_id, "player_key" = usr.ckey) + ) + query_message_read.warn_execute() + return + // TGUIless adminhelp if(href_list["tguiless_adminhelp"]) no_tgui_adminhelp(input(src, "Enter your ahelp", "Ahelp") as null|message) @@ -254,11 +263,11 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( else if(GLOB.deadmins[ckey]) add_verb(src, /client/proc/readmin) connecting_admin = TRUE - //SKYRAT EDIT ADDITION //We will check the population here, because we need to know if the client is an admin or not. + //NOVA EDIT ADDITION //We will check the population here, because we need to know if the client is an admin or not. if(!check_population(connecting_admin)) qdel(src) return - // SKYRAT EDIT END + // NOVA EDIT END if(CONFIG_GET(flag/autoadmin)) if(!GLOB.admin_datums[ckey]) var/list/autoadmin_ranks = ranks_from_rank_name(CONFIG_GET(string/autoadmin_rank)) @@ -444,9 +453,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if(holder) add_admin_verbs() - var/memo_message = get_message_output("memo") - if(memo_message) - to_chat(src, memo_message) + display_admin_memos(src) adminGreet() if (mob && reconnecting) var/stealth_admin = mob.client?.holder?.fakekey @@ -463,9 +470,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if(query_last_connected.warn_execute() && length(query_last_connected.rows)) query_last_connected.NextRow() var/time_stamp = query_last_connected.item[1] - var/unread_notes = get_message_output("note", ckey, FALSE, time_stamp) - if(unread_notes) - to_chat(src, unread_notes) + display_unread_notes(src, time_stamp) qdel(query_last_connected) var/cached_player_age = set_client_age_from_db(tdata) //we have to cache this because other shit may change it and we need it's current value now down below. @@ -494,7 +499,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( "new_byond_user", "[key_name(src)] (IP: [address], ID: [computer_id]) is a new BYOND account [account_age] day[(account_age == 1?"":"s")] old, created on [account_join_date].[new_player_alert_role ? " <@&[new_player_alert_role]>" : ""]" ) - get_message_output("watchlist entry", ckey) + scream_about_watchlists(src) check_ip_intel() validate_key_in_db() // If we aren't already generating a ban cache, fire off a build request @@ -520,9 +525,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if(CONFIG_GET(flag/autoconvert_notes)) convert_notes_sql(ckey) - var/user_messages = get_message_output("message", ckey) - if(user_messages) - to_chat(src, user_messages) + display_admin_messages(src) if(!winexists(src, "asset_cache_browser")) // The client is using a custom skin, tell them. to_chat(src, span_warning("Unable to access asset cache browser, if you are using a custom skin file, please allow DS to download the updated version, if you are not, then make a bug report. This is not a critical issue but can cause issues with resource downloading, as it is impossible to know when extra resources arrived to you.")) @@ -606,7 +609,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( QDEL_NULL(view_size) QDEL_NULL(void) QDEL_NULL(tooltips) - QDEL_NULL(open_loadout_ui) //SKYRAT EDIT ADDITION + QDEL_NULL(open_loadout_ui) //NOVA EDIT ADDITION seen_messages = null Master.UpdateTickRate() ..() //Even though we're going to be hard deleted there are still some things that want to know the destroy is happening @@ -648,7 +651,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if(!query_client_in_db.Execute()) qdel(query_client_in_db) return -/* +/* NOVA EDIT REMOVAL - Original var/client_is_in_db = query_client_in_db.NextRow() // If we aren't an admin, and the flag is set (the panic bunker is enabled). if(CONFIG_GET(flag/panic_bunker) && !holder && !GLOB.deadmins[ckey]) @@ -684,22 +687,22 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( var/client_is_in_db = query_client_in_db.NextRow() if(!client_is_in_db) - //SKYRAT EDIT ADDITION BEGIN - PANICBUNKER + //NOVA EDIT ADDITION BEGIN - PANICBUNKER if (CONFIG_GET(flag/panic_bunker) && !holder && !GLOB.deadmins[ckey] && !(ckey in GLOB.bunker_passthrough)) log_access("Failed Login: [key] - [address] - New account attempting to connect during panic bunker") - message_admins("Failed Login: [key] - [address] - New account attempting to connect during panic bunker") - to_chat_immediate(src, {"Hi! We have temporarily enabled safety measures that prevents new players from joining currently.
Please try again later, or contact a staff on Discord if you have any questions.

To join our community, check out our Discord! To gain full access to our Discord, read the rules and post a request in the #access-requests channel under the \"Landing Zone\" category in the Discord server linked here: https://discord.gg/6RpdCgR
"}) //skyrat-edit + message_admins(span_adminnotice("Failed Login: [key] - [address] - New account attempting to connect during panic bunker")) + to_chat_immediate(src, span_notice("Hi! We have temporarily enabled safety measures that prevents new players from joining currently.
Please try again later, or contact a staff on Discord if you have any questions.

To join our community, check out our Discord! To gain full access to our Discord, read the rules and post a request in the #access-requests channel under the \"Landing Zone\" category in the Discord server linked here: https://discord.gg/novasector")) var/list/connectiontopic_a = params2list(connectiontopic) var/list/panic_addr = CONFIG_GET(string/panic_server_address) if(panic_addr && !connectiontopic_a["redirect"]) var/panic_name = CONFIG_GET(string/panic_server_name) - to_chat(src, "Sending you to [panic_name ? panic_name : panic_addr].") + to_chat(src, span_notice("Sending you to [panic_name ? panic_name : panic_addr].")) winset(src, null, "command=.options") src << link("[panic_addr]?redirect=1") qdel(query_client_in_db) qdel(src) return - //SKYRAT EDIT END + //NOVA EDIT END new_player = 1 account_join_date = findJoinDate() var/datum/db_query/query_add_player = SSdbcore.NewQuery({" @@ -714,10 +717,10 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if(!account_join_date) account_join_date = "Error" account_age = -1 - //SKYRAT EDIT ADDITION BEGIN - PANICBUNKER + //NOVA EDIT ADDITION BEGIN - PANICBUNKER else if(ckey in GLOB.bunker_passthrough) GLOB.bunker_passthrough -= ckey - //SKYRAT EDIT END + //NOVA EDIT END qdel(query_client_in_db) var/datum/db_query/query_get_client_age = SSdbcore.NewQuery( "SELECT firstseen, DATEDIFF(Now(),firstseen), accountjoindate, DATEDIFF(Now(),accountjoindate) FROM [format_table_name("player")] WHERE ckey = :ckey", @@ -760,10 +763,10 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( qdel(query_log_player) if(!account_join_date) account_join_date = "Error" - var/datum/db_query/query_log_connection = SSdbcore.NewQuery(/* SKYRAT EDIT CHANGE - MULTISERVER */{" + var/datum/db_query/query_log_connection = SSdbcore.NewQuery(/* NOVA EDIT CHANGE - MULTISERVER */{" INSERT INTO `[format_table_name("connection_log")]` (`id`,`datetime`,`server_name`,`server_ip`,`server_port`,`round_id`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),:server_name,INET_ATON(:internet_address),:port,:round_id,:ckey,INET_ATON(:ip),:computerid) - "}, list("server_name" = CONFIG_GET(string/serversqlname), "internet_address" = world.internet_address || "0", "port" = world.port, "round_id" = GLOB.round_id, "ckey" = ckey, "ip" = address, "computerid" = computer_id)) //SKYRAT EDIT CHANGE - MULTISERVER + "}, list("server_name" = CONFIG_GET(string/serversqlname), "internet_address" = world.internet_address || "0", "port" = world.port, "round_id" = GLOB.round_id, "ckey" = ckey, "ip" = address, "computerid" = computer_id)) //NOVA EDIT CHANGE - MULTISERVER query_log_connection.Execute() qdel(query_log_connection) diff --git a/code/modules/client/player_details.dm b/code/modules/client/player_details.dm index 8931dffcdb465d..3a880dcdbb550b 100644 --- a/code/modules/client/player_details.dm +++ b/code/modules/client/player_details.dm @@ -13,6 +13,7 @@ GLOBAL_LIST_EMPTY(player_details) /// Callbacks invoked when this client logs out var/list/post_logout_callbacks = list() /// List of names this key played under this round + /// assoc list of name -> mob tag var/list/played_names = list() /// Lazylist of preference slots this client has joined the round under /// Numbers are stored as strings @@ -27,14 +28,29 @@ GLOBAL_LIST_EMPTY(player_details) /datum/player_details/New(key) achievements = new(key) -/proc/log_played_names(ckey, ...) +/// Writes all of the `played_names` into an HTML-escaped string. +/datum/player_details/proc/get_played_names() + var/list/previous_names = list() + for(var/previous_name in played_names) + previous_names += html_encode("[previous_name] ([played_names[previous_name]])") + return previous_names.Join("; ") + +/// Adds the new names to the player's played_names list on their /datum/player_details for use of admins. +/// `ckey` should be their ckey, and `data` should be an associative list with the keys being the names they played under and the values being the unique mob ID tied to that name. +/proc/log_played_names(ckey, data) if(!ckey) return - if(args.len < 2) + + var/datum/player_details/writable = GLOB.player_details[ckey] + if(isnull(writable)) return - var/list/names = args.Copy(2) - var/datum/player_details/P = GLOB.player_details[ckey] - if(P) - for(var/name in names) - if(name) - P.played_names |= name + + for(var/name in data) + if(!name) + continue + var/mob_tag = data[name] + var/encoded_name = html_encode(name) + if(writable.played_names.Find("[encoded_name]")) + continue + + writable.played_names += list("[encoded_name]" = mob_tag) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 239ab09d1a7f1b..8aa3258c120fcd 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 = 30 //SKYRAT EDIT - ORIGINAL 3 + var/max_save_slots = 30 //NOVA EDIT - ORIGINAL 3 /// Bitflags for communications that are muted var/muted = NONE @@ -88,14 +88,14 @@ GLOBAL_LIST_EMPTY(preferences_datums) /// If set to TRUE, will update character_profiles on the next ui_data tick. var/tainted_character_profiles = FALSE -/datum/preferences/Destroy(force, ...) +/datum/preferences/Destroy(force) QDEL_NULL(character_preview_view) QDEL_LIST(middleware) value_cache = null - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(pref_species) QDEL_NULL(pref_species) - //SKYRAT EDIT END + //NOVA EDIT END return ..() /datum/preferences/New(client/parent) @@ -109,9 +109,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) load_path(parent.ckey) if(load_and_save && !fexists(path)) try_savefile_type_migration() - unlock_content = !!parent.IsByondMember() || GLOB.donator_list[parent.ckey] //SKYRAT EDIT - ADDED DONATOR CHECK - if(unlock_content) - max_save_slots = 50 //SKYRAT EDIT - ORIGINAL 8 + unlock_content = !!parent.IsByondMember() + donator_status = !!GLOB.donator_list[parent.ckey] //NOVA EDIT ADD - DONATOR CHECK + if(unlock_content || donator_status) //NOVA EDIT CHANGE - ADD DONATOR CHECK + max_save_slots = 50 //NOVA EDIT - ORIGINAL 8 else CRASH("attempted to create a preferences datum without a client or mock!") load_savefile() @@ -124,11 +125,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/loaded_preferences_successfully = load_preferences() if(loaded_preferences_successfully) if(load_character()) - // SKYRAT EDIT START - Sanitizing preferences + // NOVA EDIT START - Sanitizing preferences sanitize_languages() sanitize_quirks() - // SKYRAT EDIT END - return // SKYRAT EDIT - Don't remove this. Just don't. Nothing is worth forced random characters. + // NOVA EDIT END + return // NOVA EDIT - Don't remove this. Just don't. Nothing is worth forced random characters. //we couldn't load character data so just randomize the character appearance + name randomise_appearance_prefs() //let's create a random character then - rather than a fat, bald and naked man. if(parent) @@ -174,12 +175,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) data["character_profiles"] = create_character_profiles() tainted_character_profiles = FALSE - //SKYRAT EDIT BEGIN + //NOVA EDIT BEGIN data["preview_selection"] = preview_pref data["quirks_balance"] = GetQuirkBalance() data["positive_quirk_count"] = GetPositiveQuirkCount() - //SKYRAT EDIT END + //NOVA EDIT END data["character_preferences"] = compile_character_preferences(user) @@ -193,12 +194,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) /datum/preferences/ui_static_data(mob/user) var/list/data = list() - // SKYRAT EDIT ADDITION START + // NOVA EDIT ADDITION START if(CONFIG_GET(flag/disable_erp_preferences)) data["preview_options"] = list(PREVIEW_PREF_JOB, PREVIEW_PREF_LOADOUT, PREVIEW_PREF_UNDERWEAR, PREVIEW_PREF_NAKED) else data["preview_options"] = list(PREVIEW_PREF_JOB, PREVIEW_PREF_LOADOUT, PREVIEW_PREF_UNDERWEAR, PREVIEW_PREF_NAKED, PREVIEW_PREF_NAKED_AROUSED) - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END data["character_profiles"] = create_character_profiles() @@ -246,10 +247,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) randomise_appearance_prefs() save_character() - // SKYRAT EDIT START - Sanitizing languages + // NOVA EDIT START - Sanitizing languages if(sanitize_languages()) save_character() - // SKYRAT EDIT END + // NOVA EDIT END for (var/datum/preference_middleware/preference_middleware as anything in middleware) preference_middleware.on_new_character(usr) @@ -258,12 +259,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) return TRUE if ("rotate") - /* SKYRAT EDIT - Bi-directional prefs menu rotation - ORIGINAL: + /* NOVA EDIT - Bi-directional prefs menu rotation - ORIGINAL: character_preview_view.dir = turn(character_preview_view.dir, -90) - */ // ORIGINAL END - SKYRAT EDIT START: + */ // ORIGINAL END - NOVA EDIT START: var/backwards = params["backwards"] character_preview_view.dir = turn(character_preview_view.dir, backwards ? 90 : -90) - // SKYRAT EDIT END + // NOVA EDIT END return TRUE if ("set_preference") @@ -284,12 +285,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) if (istype(requested_preference, /datum/preference/name)) tainted_character_profiles = TRUE - //SKYRAT EDIT + //NOVA EDIT update_mutant_bodyparts(requested_preference) for (var/datum/preference_middleware/preference_middleware as anything in middleware) if (preference_middleware.post_set_preference(usr, requested_preference_key, value)) return TRUE - //SKYRAT EDIT END + //NOVA EDIT END return TRUE if ("set_color_preference") var/requested_preference_key = params["preference"] @@ -318,19 +319,22 @@ GLOBAL_LIST_EMPTY(preferences_datums) return FALSE return TRUE - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if("update_preview") preview_pref = params["updated_preview"] character_preview_view.update_body() return TRUE if ("open_loadout") - if(parent.open_loadout_ui) - parent.open_loadout_ui.ui_interact(usr) + var/datum/loadout_manager/open_loadout_ui = parent.open_loadout_ui?.resolve() + if(open_loadout_ui) + open_loadout_ui.ui_interact(usr) else + parent.open_loadout_ui = null var/datum/loadout_manager/tgui = new(usr) tgui.ui_interact(usr) return TRUE + if ("set_tricolor_preference") var/requested_preference_key = params["preference"] var/index_key = params["value"] @@ -368,7 +372,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) // For the quirks in the prefs menu. if ("get_quirks_balance") return TRUE - //SKYRAT EDIT END + //NOVA EDIT END for (var/datum/preference_middleware/preference_middleware as anything in middleware) @@ -409,13 +413,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) if (!preference.is_accessible(src)) continue - LAZYINITLIST(preferences[preference.category]) - var/value = read_preference(preference.type) var/data = preference.compile_ui_data(user, value) + LAZYINITLIST(preferences[preference.category]) preferences[preference.category][preference.savefile_key] = data + for (var/datum/preference_middleware/preference_middleware as anything in middleware) var/list/append_character_preferences = preference_middleware.get_character_preferences(user) if (isnull(append_character_preferences)) @@ -471,7 +475,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) body = new // Without this, it doesn't show up in the menu - body.appearance_flags |= KEEP_TOGETHER // SKYRAT EDIT - Fix pixel scaling - ORIGINAL: body.appearance_flags &= ~KEEP_TOGETHER + body.appearance_flags |= KEEP_TOGETHER // NOVA EDIT - Fix pixel scaling - ORIGINAL: body.appearance_flags &= ~KEEP_TOGETHER /datum/preferences/proc/create_character_profiles() var/list/profiles = list() @@ -522,11 +526,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) for(var/V in all_quirks) var/datum/quirk/T = SSquirks.quirks[V] bal -= initial(T.value) - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION for(var/key in augments) var/datum/augment_item/aug = GLOB.augment_items[augments[key]] bal -= aug.cost - //SKYRAT EDIT END + //NOVA EDIT END return bal /datum/preferences/proc/GetPositiveQuirkCount() @@ -594,8 +598,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) apply_prefs_to(character, icon_updates) /// Applies the given preferences to a human mob. -/datum/preferences/proc/apply_prefs_to(mob/living/carbon/human/character, icon_updates = TRUE, visuals_only = FALSE) // SKYRAT EDIT - Customization - ORIGINAL: /datum/preferences/proc/apply_prefs_to(mob/living/carbon/human/character, icon_updates = TRUE) - character.dna.features = MANDATORY_FEATURE_LIST //SKYRAT EDIT CHANGE - We need to instansiate the list with the basic features. +/datum/preferences/proc/apply_prefs_to(mob/living/carbon/human/character, icon_updates = TRUE, visuals_only = FALSE) // NOVA EDIT - Customization - ORIGINAL: /datum/preferences/proc/apply_prefs_to(mob/living/carbon/human/character, icon_updates = TRUE) + character.dna.features = MANDATORY_FEATURE_LIST //NOVA EDIT CHANGE - We need to instansiate the list with the basic features. for (var/datum/preference/preference as anything in get_preferences_in_priority_order()) if (preference.savefile_identifier != PREFERENCE_CHARACTER) @@ -603,10 +607,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) preference.apply_to_human(character, read_preference(preference.type), src) - // SKYRAT EDIT ADDITION START - middleware apply human prefs + // NOVA EDIT ADDITION START - middleware apply human prefs for (var/datum/preference_middleware/preference_middleware as anything in middleware) preference_middleware.apply_to_human(character, src, visuals_only = visuals_only) - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END character.dna.real_name = character.real_name @@ -620,7 +624,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) /datum/preferences/proc/should_be_random_hardcore(datum/job/job, datum/mind/mind) if(!read_preference(/datum/preference/toggle/random_hardcore)) return FALSE - if(job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) //No command staff + if(job.job_flags & JOB_HEAD_OF_STAFF) //No heads of staff return FALSE for(var/datum/antagonist/antag as anything in mind.antag_datums) if(antag.get_team()) //No team antags diff --git a/code/modules/client/preferences/README.md b/code/modules/client/preferences/README.md index 0089953639883b..fabfb779c902b4 100644 --- a/code/modules/client/preferences/README.md +++ b/code/modules/client/preferences/README.md @@ -28,7 +28,7 @@ export const savefile_key_here: Feature = { // Necessary for game preferences, unused for others category: "CATEGORY", - // Optional, only shown in game preferences + // Optional, shown as a tooltip description: "This preference will blow your mind!", } ``` diff --git a/code/modules/client/preferences/_preference.dm b/code/modules/client/preferences/_preference.dm index 8d2d52ae0d1c98..69c1e6a6b79b2b 100644 --- a/code/modules/client/preferences/_preference.dm +++ b/code/modules/client/preferences/_preference.dm @@ -209,7 +209,7 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key()) /// Apply this preference onto the given human. /// Must be overriden by subtypes. /// Called when the savefile_identifier == PREFERENCE_CHARACTER. -/datum/preference/proc/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) //SKYRAT EDIT CHANGE +/datum/preference/proc/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) //NOVA EDIT CHANGE SHOULD_NOT_SLEEP(TRUE) SHOULD_CALL_PARENT(FALSE) CRASH("`apply_to_human()` was not implemented for [type]!") diff --git a/code/modules/client/preferences/assets.dm b/code/modules/client/preferences/assets.dm index 6fa29b9f90fb51..a75178cc3e1072 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 827b91c49c290a..b867e3ce884bb7 100644 --- a/code/modules/client/preferences/clothing.dm +++ b/code/modules/client/preferences/clothing.dm @@ -1,13 +1,13 @@ -/proc/generate_underwear_icon(datum/sprite_accessory/accessory, icon/base_icon, color, icon_offset = 0) //SKYRAT EDIT CHANGE : adds icon_offset - Colorable Undershirt/Socks +/proc/generate_underwear_icon(datum/sprite_accessory/accessory, icon/base_icon, color, icon_offset = 0) //NOVA EDIT CHANGE : adds icon_offset - Colorable Undershirt/Socks var/icon/final_icon = new(base_icon) if (!isnull(accessory)) - var/icon/accessory_icon = icon(accessory.icon, accessory.icon_state) // SKYRAT EDIT CHANGE: ORIGINAL - var/icon/accessory_icon = icon('icons/mob/clothing/underwear.dmi', accessory.icon_state) + var/icon/accessory_icon = icon(accessory.icon, accessory.icon_state) // NOVA EDIT CHANGE: ORIGINAL - var/icon/accessory_icon = icon('icons/mob/clothing/underwear.dmi', accessory.icon_state) if (color && !accessory.use_static) accessory_icon.Blend(color, ICON_MULTIPLY) final_icon.Blend(accessory_icon, ICON_OVERLAY) - final_icon.Crop(10, 1+icon_offset, 22, 13+icon_offset) //SKYRAT EDIT CHANGE : adds icon_offset - Colorable Undershirt/Socks + final_icon.Crop(10, 1+icon_offset, 22, 13+icon_offset) //NOVA EDIT CHANGE : adds icon_offset - Colorable Undershirt/Socks final_icon.Scale(32, 32) return final_icon @@ -136,9 +136,9 @@ if (value != "Nude") var/datum/sprite_accessory/accessory = GLOB.undershirt_list[value] - icon_with_undershirt.Blend(icon(accessory.icon, accessory.icon_state), ICON_OVERLAY) // SKYRAT EDIT CHANGE: ORIGINAL - icon_with_undershirt.Blend(icon('icons/mob/clothing/underwear.dmi', accessory.icon_state), ICON_OVERLAY) + icon_with_undershirt.Blend(icon(accessory.icon, accessory.icon_state), ICON_OVERLAY) // NOVA EDIT CHANGE: ORIGINAL - icon_with_undershirt.Blend(icon('icons/mob/clothing/underwear.dmi', accessory.icon_state), ICON_OVERLAY) - icon_with_undershirt.Crop(10, 11, 22, 23) // SKYRAT EDIT CHANGE : ORIGINAL - icon_with_undershirt.Crop(9, 9, 23, 23) + icon_with_undershirt.Crop(10, 11, 22, 23) // NOVA EDIT CHANGE : ORIGINAL - icon_with_undershirt.Crop(9, 9, 23, 23) icon_with_undershirt.Scale(32, 32) return icon_with_undershirt @@ -165,7 +165,7 @@ lower_half.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_r_leg"), ICON_OVERLAY) lower_half.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_l_leg"), ICON_OVERLAY) - return generate_underwear_icon(GLOB.underwear_list[value], lower_half, COLOR_ALMOST_BLACK, icon_offset = 5) // SKYRAT EDIT CHANGE : ICON_OFFSET + return generate_underwear_icon(GLOB.underwear_list[value], lower_half, COLOR_ALMOST_BLACK, icon_offset = 5) // NOVA EDIT CHANGE : ICON_OFFSET /datum/preference/choiced/underwear/apply_to_human(mob/living/carbon/human/target, value) target.underwear = value diff --git a/code/modules/client/preferences/food_allergy.dm b/code/modules/client/preferences/food_allergy.dm index 461c3b31e2a321..1096ef3c18396a 100644 --- a/code/modules/client/preferences/food_allergy.dm +++ b/code/modules/client/preferences/food_allergy.dm @@ -1,5 +1,5 @@ /datum/preference/choiced/food_allergy - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED savefile_key = "food_allergy" savefile_identifier = PREFERENCE_CHARACTER can_randomize = FALSE diff --git a/code/modules/client/preferences/fov_darkness.dm b/code/modules/client/preferences/fov_darkness.dm deleted file mode 100644 index b0146e10b40320..00000000000000 --- a/code/modules/client/preferences/fov_darkness.dm +++ /dev/null @@ -1,17 +0,0 @@ -/datum/preference/numeric/fov_darkness - category = PREFERENCE_CATEGORY_GAME_PREFERENCES - savefile_key = "fov_darkness" - savefile_identifier = PREFERENCE_PLAYER - - minimum = 0 - maximum = 255 - -/datum/preference/numeric/fov_darkness/create_default_value() - return 255 - -/datum/preference/numeric/fov_darkness/apply_to_client_updated(client/client, value) - if(client.mob) - var/datum/component/fov_handler/fov_component = client.mob.GetComponent(/datum/component/fov_handler) - if(!fov_component) - return - fov_component.visual_shadow.alpha = value diff --git a/code/modules/client/preferences/glasses.dm b/code/modules/client/preferences/glasses.dm index e34cdd0e090608..03c975abce7866 100644 --- a/code/modules/client/preferences/glasses.dm +++ b/code/modules/client/preferences/glasses.dm @@ -1,5 +1,5 @@ /datum/preference/choiced/glasses - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED savefile_key = "glasses" savefile_identifier = PREFERENCE_CHARACTER should_generate_icons = TRUE diff --git a/code/modules/client/preferences/language.dm b/code/modules/client/preferences/language.dm index 2de14be09cf0d8..7e8e6cb711387b 100644 --- a/code/modules/client/preferences/language.dm +++ b/code/modules/client/preferences/language.dm @@ -1,5 +1,5 @@ /datum/preference/choiced/language - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED savefile_key = "language" savefile_identifier = PREFERENCE_CHARACTER @@ -20,6 +20,7 @@ //we add uncommon as it's foreigner-only. var/datum/language/uncommon/uncommon_language = /datum/language/uncommon values += initial(uncommon_language.name) + values += /datum/language/common::name // NOVA EDIT ADDITION START - Lets you select common for(var/datum/language/language_type as anything in GLOB.uncommon_roundstart_languages) if(initial(language_type.name) in values) diff --git a/code/modules/client/preferences/middleware/_middleware.dm b/code/modules/client/preferences/middleware/_middleware.dm index b7719270cc326f..9f33eda22c2c36 100644 --- a/code/modules/client/preferences/middleware/_middleware.dm +++ b/code/modules/client/preferences/middleware/_middleware.dm @@ -51,14 +51,14 @@ /datum/preference_middleware/proc/on_new_character(mob/user) return -// SKYRAT EDIT +// NOVA EDIT /// Called after every update_preference, returns TRUE if this handled it. /datum/preference_middleware/proc/post_set_preference(mob/user, preference, value) return FALSE /// Called when applying preferences to the mob. -/datum/preference_middleware/proc/apply_to_human(mob/living/carbon/human/target, datum/preferences/preferences, visuals_only = FALSE) //SKYRAT EDIT CHANGE +/datum/preference_middleware/proc/apply_to_human(mob/living/carbon/human/target, datum/preferences/preferences, visuals_only = FALSE) //NOVA EDIT CHANGE SHOULD_NOT_SLEEP(TRUE) SHOULD_CALL_PARENT(FALSE) return -//SKYRAT EDIT END +//NOVA EDIT END diff --git a/code/modules/client/preferences/middleware/antags.dm b/code/modules/client/preferences/middleware/antags.dm index 888da90d5b79c5..acd4b265bd6cb9 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() @@ -116,10 +115,10 @@ /datum/asset/spritesheet/antagonists/create_spritesheets() // Antagonists that don't have a dynamic ruleset, but do have a preference var/static/list/non_ruleset_antagonists = list( - ROLE_CYBER_POLICE = /datum/antagonist/cyber_police, + ROLE_GLITCH = /datum/antagonist/bitrunning_glitch, ROLE_FUGITIVE = /datum/antagonist/fugitive, ROLE_LONE_OPERATIVE = /datum/antagonist/nukeop/lone, - ROLE_DRIFTING_CONTRACTOR = /datum/antagonist/contractor, //SKYRAT EDIT + ROLE_DRIFTING_CONTRACTOR = /datum/antagonist/contractor, //NOVA EDIT ROLE_SENTIENCE = /datum/antagonist/sentient_creature, ) diff --git a/code/modules/client/preferences/middleware/jobs.dm b/code/modules/client/preferences/middleware/jobs.dm index d61fb53c98f0bc..a7261bbaf176c6 100644 --- a/code/modules/client/preferences/middleware/jobs.dm +++ b/code/modules/client/preferences/middleware/jobs.dm @@ -1,9 +1,9 @@ /datum/preference_middleware/jobs action_delegations = list( "set_job_preference" = PROC_REF(set_job_preference), - // SKYRAT EDIT + // NOVA EDIT "set_job_title" = PROC_REF(set_job_title), - // SKYRAT EDIT END + // NOVA EDIT END ) /datum/preference_middleware/jobs/proc/set_job_preference(list/params, mob/user) @@ -28,7 +28,7 @@ return TRUE -// SKYRAT EDIT +// NOVA EDIT /datum/preference_middleware/jobs/proc/set_job_title(list/params, mob/user) var/job_title = params["job"] var/new_job_title = params["new_title"] @@ -44,7 +44,7 @@ preferences.alt_job_titles[job_title] = new_job_title return TRUE -// SKYRAT EDIT END +// NOVA EDIT END /datum/preference_middleware/jobs/get_constant_data() var/list/data = list() @@ -73,8 +73,8 @@ jobs[job.title] = list( "description" = job.description, "department" = department_name, - "veteran" = job.veteran_only, // SKYRAT EDIT - "alt_titles" = job.alt_titles, // SKYRAT EDIT + "veteran" = job.veteran_only, // NOVA EDIT + "alt_titles" = job.alt_titles, // NOVA EDIT ) data["departments"] = departments @@ -84,24 +84,24 @@ /datum/preference_middleware/jobs/get_ui_data(mob/user) var/list/data = list() - // SKYRAT EDIT + // NOVA EDIT if(isnull(preferences.alt_job_titles)) preferences.alt_job_titles = list() - // SKYRAT EDIT END + // NOVA EDIT END data["job_preferences"] = preferences.job_preferences - // SKYRAT EDIT + // NOVA EDIT data["job_alt_titles"] = preferences.alt_job_titles data["species_restricted_jobs"] = get_unavailable_jobs_for_species() - // SKYRAT EDIT END + // NOVA EDIT END return data /datum/preference_middleware/jobs/get_ui_static_data(mob/user) var/list/data = list() - // SKYRAT EDIT + // NOVA EDIT if(SSplayer_ranks.is_veteran(user.client)) data["is_veteran"] = TRUE - // SKYRAT EDIT END + // NOVA EDIT END var/list/required_job_playtime = get_required_job_playtime(user) if (!isnull(required_job_playtime)) data += required_job_playtime @@ -147,7 +147,7 @@ return data -//SKYRAT EDIT ADDITION BEGIN - CHECKING FOR INCOMPATIBLE SPECIES +//NOVA EDIT ADDITION BEGIN - CHECKING FOR INCOMPATIBLE SPECIES //This returns a list of jobs that are unavailable for the player's current species /datum/preference_middleware/jobs/proc/get_unavailable_jobs_for_species() var/list/data = list() @@ -158,4 +158,4 @@ return data -//SKYRAT EDIT ADDITION END +//NOVA EDIT ADDITION END diff --git a/code/modules/client/preferences/middleware/quirks.dm b/code/modules/client/preferences/middleware/quirks.dm index db1817276b4baa..3fabab63238947 100644 --- a/code/modules/client/preferences/middleware/quirks.dm +++ b/code/modules/client/preferences/middleware/quirks.dm @@ -33,12 +33,17 @@ for (var/quirk_name in quirks) var/datum/quirk/quirk = quirks[quirk_name] + var/datum/quirk_constant_data/constant_data = GLOB.all_quirk_constant_data[quirk] + var/list/datum/preference/customization_options = constant_data?.get_customization_data() + quirk_info[sanitize_css_class_name(quirk_name)] = list( "description" = initial(quirk.desc), "icon" = initial(quirk.icon), "name" = quirk_name, "value" = initial(quirk.value), - "veteran_only" = initial(quirk.veteran_only), // SKYRAT EDIT - Veteran quirks + "customizable" = constant_data?.is_customizable(), + "customization_options" = customization_options, + "veteran_only" = initial(quirk.veteran_only), // NOVA EDIT - Veteran quirks ) return list( @@ -53,15 +58,15 @@ /datum/preference_middleware/quirks/proc/give_quirk(list/params, mob/user) var/quirk_name = params["quirk"] - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION var/list/quirks = SSquirks.get_quirks() var/datum/quirk/quirk = quirks[quirk_name] if(initial(quirk.veteran_only) && !SSplayer_ranks.is_veteran(preferences?.parent)) return FALSE - //SKYRAT EDIT END + //NOVA EDIT END var/list/new_quirks = preferences.all_quirks | quirk_name - if (SSquirks.filter_invalid_quirks(new_quirks, preferences.augments) != new_quirks)// SKYRAT EDIT - AUGMENTS+ + if (SSquirks.filter_invalid_quirks(new_quirks, preferences.augments) != new_quirks)// NOVA EDIT - AUGMENTS+ // If the client is sending an invalid give_quirk, that means that // something went wrong with the client prediction, so we should // catch it back up to speed. @@ -77,7 +82,7 @@ var/quirk_name = params["quirk"] var/list/new_quirks = preferences.all_quirks - quirk_name - if (!(quirk_name in preferences.all_quirks) || SSquirks.filter_invalid_quirks(new_quirks, preferences.augments) != new_quirks)// SKYRAT EDIT - AUGMENTS+ + if (!(quirk_name in preferences.all_quirks) || SSquirks.filter_invalid_quirks(new_quirks, preferences.augments) != new_quirks)// NOVA EDIT - AUGMENTS+ // If the client is sending an invalid remove_quirk, that means that // something went wrong with the client prediction, so we should // catch it back up to speed. @@ -93,13 +98,13 @@ var/list/selected_quirks = list() for (var/quirk in preferences.all_quirks) - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION var/list/quirks = SSquirks.get_quirks() var/datum/quirk/quirk_datum = quirks[quirk] if(initial(quirk_datum.veteran_only) && !SSplayer_ranks.is_veteran(preferences?.parent)) preferences.all_quirks -= quirk continue - //SKYRAT EDIT END + //NOVA EDIT END selected_quirks += sanitize_css_class_name(quirk) return selected_quirks diff --git a/code/modules/client/preferences/middleware/species.dm b/code/modules/client/preferences/middleware/species.dm index 16954cf8bf708f..fbb6de77318d91 100644 --- a/code/modules/client/preferences/middleware/species.dm +++ b/code/modules/client/preferences/middleware/species.dm @@ -9,12 +9,11 @@ /datum/asset/spritesheet/species name = "species" early = TRUE - cross_round_cachable = TRUE /datum/asset/spritesheet/species/create_spritesheets() var/list/to_insert = list() - for (var/species_id in get_selectable_species() | get_customizable_races()) // SKYRAT EDIT CHANGE - ORIGINAL: for (var/species_id in get_selectable_species()) + for (var/species_id in get_selectable_species() | get_customizable_races()) // NOVA EDIT CHANGE - ORIGINAL: for (var/species_id in get_selectable_species()) var/datum/species/species_type = GLOB.species_list[species_id] var/mob/living/carbon/human/dummy/consistent/dummy = new diff --git a/code/modules/client/preferences/names.dm b/code/modules/client/preferences/names.dm index 2199d6541d916f..10fb4b7b585453 100644 --- a/code/modules/client/preferences/names.dm +++ b/code/modules/client/preferences/names.dm @@ -12,7 +12,7 @@ var/group /// Whether or not to allow numbers in the person's name - var/allow_numbers = TRUE //SKYRAT EDIT CHANGE + var/allow_numbers = TRUE //NOVA EDIT CHANGE /// If the highest priority job matches this, will prioritize this name in the UI var/relevant_job @@ -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/paint_color.dm b/code/modules/client/preferences/paint_color.dm index a44208b8325c5d..749b83cf000987 100644 --- a/code/modules/client/preferences/paint_color.dm +++ b/code/modules/client/preferences/paint_color.dm @@ -2,7 +2,7 @@ /datum/preference/color/paint_color savefile_key = "paint_color" savefile_identifier = PREFERENCE_CHARACTER - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED /datum/preference/color/paint_color/is_accessible(datum/preferences/preferences) if (!..(preferences)) diff --git a/code/modules/client/preferences/phobia.dm b/code/modules/client/preferences/phobia.dm index 2a5caa5ba0f8ec..92004418156f7f 100644 --- a/code/modules/client/preferences/phobia.dm +++ b/code/modules/client/preferences/phobia.dm @@ -1,5 +1,5 @@ /datum/preference/choiced/phobia - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED savefile_key = "phobia" savefile_identifier = PREFERENCE_CHARACTER diff --git a/code/modules/client/preferences/pixel_size.dm b/code/modules/client/preferences/pixel_size.dm index cb166e0139ac52..ea375d91e4355d 100644 --- a/code/modules/client/preferences/pixel_size.dm +++ b/code/modules/client/preferences/pixel_size.dm @@ -4,7 +4,7 @@ savefile_identifier = PREFERENCE_PLAYER minimum = 0 - maximum = 3 + maximum = 5 step = 0.5 diff --git a/code/modules/client/preferences/prisoner_crime.dm b/code/modules/client/preferences/prisoner_crime.dm index 0971e84b46e566..1eb792223214a1 100644 --- a/code/modules/client/preferences/prisoner_crime.dm +++ b/code/modules/client/preferences/prisoner_crime.dm @@ -70,8 +70,8 @@ GLOBAL_LIST_INIT(prisoner_crimes, init_prisoner_crimes()) tattoos = 0 /datum/prisoner_crime/espionage - name = "Corporate Espionage" - desc = "Conducted espionage against Nanotrasen for commercial purposes." + name = "Conglomeration Espionage" + desc = "Conducted espionage against Symphionia for commercial purposes." tattoos = 1 /datum/prisoner_crime/counterfeiting @@ -81,12 +81,12 @@ GLOBAL_LIST_INIT(prisoner_crimes, init_prisoner_crimes()) /datum/prisoner_crime/enemy_of_the_corp name = "Enemy of the Corporation" - desc = "Acted as, or knowingly aided, an enemy of Nanotrasen." + desc = "Acted as, or knowingly aided, an enemy of Symphionia." tattoos = 1 /datum/prisoner_crime/grand_sabo name = "Grand Sabotage" - desc = "Engaged in malicious destructive actions, seriously threatening Nanotrasen employees and or infrastructure." + desc = "Engaged in malicious destructive actions, seriously threatening Symphionia employees and or infrastructure." tattoos = 2 /datum/prisoner_crime/grand_theft @@ -98,7 +98,7 @@ GLOBAL_LIST_INIT(prisoner_crimes, init_prisoner_crimes()) name = "Identity Theft of High-Ranking Figure" desc = "Impersonated a high-ranking figure." tattoos = 0 //well, obviously can't impersonate people with tats. if they want to go back to doing that - + /datum/prisoner_crime/jaywalker name = "Jaywalker" desc = "Jaywalked across non-green tram crossings, shuttle docking zones, and/or through space." diff --git a/code/modules/client/preferences/prosthetic.dm b/code/modules/client/preferences/prosthetic.dm index f66f1278c48a9f..a4d5b5a577ba16 100644 --- a/code/modules/client/preferences/prosthetic.dm +++ b/code/modules/client/preferences/prosthetic.dm @@ -1,5 +1,5 @@ /datum/preference/choiced/prosthetic - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED savefile_key = "prosthetic" savefile_identifier = PREFERENCE_CHARACTER diff --git a/code/modules/client/preferences/species.dm b/code/modules/client/preferences/species.dm index a91a93fc84b251..c6757ca31ee654 100644 --- a/code/modules/client/preferences/species.dm +++ b/code/modules/client/preferences/species.dm @@ -24,17 +24,17 @@ for (var/species_id in get_selectable_species()) values += GLOB.species_list[species_id] - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION for (var/species_id in get_customizable_races()) values += GLOB.species_list[species_id] - //SKYRAT EDIT END + //NOVA EDIT END return values /datum/preference/choiced/species/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/prefs) - target.set_species(value, FALSE, FALSE, prefs?.features.Copy(), prefs?.mutant_bodyparts.Copy(), prefs?.body_markings.Copy()) // SKYRAT EDIT - Customization + target.set_species(value, FALSE, FALSE, prefs?.features.Copy(), prefs?.mutant_bodyparts.Copy(), prefs?.body_markings.Copy()) // NOVA EDIT - Customization - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION target.dna.update_body_size() for(var/organ_key in list(ORGAN_SLOT_VAGINA, ORGAN_SLOT_PENIS, ORGAN_SLOT_BREASTS, ORGAN_SLOT_ANUS)) @@ -42,12 +42,12 @@ if(gent) gent.aroused = prefs.arousal_preview gent.update_sprite_suffix() - //SKYRAT EDIT END + //NOVA EDIT END /datum/preference/choiced/species/compile_constant_data() var/list/data = list() - for (var/species_id in (get_selectable_species() + get_customizable_races())) //SKYRAT EDIT CHANGE + for (var/species_id in (get_selectable_species() + get_customizable_races())) //NOVA EDIT CHANGE var/species_type = GLOB.species_list[species_id] var/datum/species/species = new species_type() @@ -61,7 +61,7 @@ data[species_id]["enabled_features"] = species.get_features() data[species_id]["perks"] = species.get_species_perks() data[species_id]["diet"] = species.get_species_diet() - data[species_id]["veteran_only"] = species.veteran_only // SKYRAT EDIT ADDITION - Veteran races + data[species_id]["veteran_only"] = species.veteran_only // NOVA EDIT ADDITION - Veteran races qdel(species) diff --git a/code/modules/client/preferences/species_features/felinid.dm b/code/modules/client/preferences/species_features/felinid.dm index 037615ee809393..6e0dfdf003d685 100644 --- a/code/modules/client/preferences/species_features/felinid.dm +++ b/code/modules/client/preferences/species_features/felinid.dm @@ -1,4 +1,4 @@ -/* SKYRAT EDIT REMOVAL +/* NOVA EDIT REMOVAL /datum/preference/choiced/tail_human savefile_key = "feature_human_tail" savefile_identifier = PREFERENCE_CHARACTER diff --git a/code/modules/client/preferences/species_features/lizard.dm b/code/modules/client/preferences/species_features/lizard.dm index 2e0b3f3e513c82..68736becc3b736 100644 --- a/code/modules/client/preferences/species_features/lizard.dm +++ b/code/modules/client/preferences/species_features/lizard.dm @@ -1,4 +1,4 @@ -/* SKYRAT EDIT REMOVAL +/* NOVA EDIT REMOVAL /proc/generate_lizard_side_shot(datum/sprite_accessory/sprite_accessory, key, include_snout = TRUE) var/static/icon/lizard var/static/icon/lizard_with_snout diff --git a/code/modules/client/preferences/species_features/moth.dm b/code/modules/client/preferences/species_features/moth.dm index 2879cfb8788640..b76fda5bce7b1e 100644 --- a/code/modules/client/preferences/species_features/moth.dm +++ b/code/modules/client/preferences/species_features/moth.dm @@ -1,4 +1,4 @@ -/* SKYRAT EDIT REMOVAL +/* NOVA EDIT REMOVAL /datum/preference/choiced/moth_antennae savefile_key = "feature_moth_antennae" savefile_identifier = PREFERENCE_CHARACTER diff --git a/code/modules/client/preferences/species_features/mutants.dm b/code/modules/client/preferences/species_features/mutants.dm index a00c57ecb9a2e9..71bb4cf417bcb9 100644 --- a/code/modules/client/preferences/species_features/mutants.dm +++ b/code/modules/client/preferences/species_features/mutants.dm @@ -1,4 +1,4 @@ -/* SKYRAT EDIT REMOVAL +/* NOVA EDIT REMOVAL /datum/preference/color/mutant_color savefile_key = "feature_mcolor" savefile_identifier = PREFERENCE_CHARACTER diff --git a/code/modules/client/preferences/species_features/pod.dm b/code/modules/client/preferences/species_features/pod.dm index 7f7746ea41d077..1446075b6cdbdf 100644 --- a/code/modules/client/preferences/species_features/pod.dm +++ b/code/modules/client/preferences/species_features/pod.dm @@ -1,4 +1,4 @@ -// SKYRAT EDIT: REPLACED BY /datum/preference/choiced/mutant_choice/pod_hair IN mutant_parts.dm +// NOVA EDIT: REPLACED BY /datum/preference/choiced/mutant_choice/pod_hair IN mutant_parts.dm /* /datum/preference/choiced/pod_hair savefile_key = "feature_pod_hair" @@ -30,4 +30,4 @@ /datum/preference/choiced/pod_hair/apply_to_human(mob/living/carbon/human/target, value) target.dna.features["pod_hair"] = value -*/ // SKYRAT EDIT END +*/ // NOVA EDIT END diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index eb324419cb2b27..9e699530169e0b 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -99,8 +99,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car migrate_character_to_tgui_prefs_menu() if (current_version < 42) - // migrate_body_types(save_data) // SKYRAT EDIT - This'll fuck up savefiles - migrate_mentor() // SKYRAT EDIT - Make mentors alive again + // migrate_body_types(save_data) // NOVA EDIT - This'll fuck up savefiles + migrate_mentor() // NOVA EDIT - Make mentors alive again if (current_version < 43) migrate_legacy_sound_toggles(savefile) @@ -302,7 +302,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //Quirks all_quirks = save_data?["all_quirks"] - load_character_skyrat(save_data) //SKYRAT EDIT ADDITION + load_character_skyrat(save_data) //NOVA EDIT ADDITION //try to fix any outdated data if necessary //preference updating will handle saving the updated data for us. @@ -319,7 +319,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if(job_preferences[j] != JP_LOW && job_preferences[j] != JP_MEDIUM && job_preferences[j] != JP_HIGH) job_preferences -= j - all_quirks = SSquirks.filter_invalid_quirks(SANITIZE_LIST(all_quirks), augments)// SKYRAT EDIT - AUGMENTS+ + all_quirks = SSquirks.filter_invalid_quirks(SANITIZE_LIST(all_quirks), augments)// NOVA EDIT - AUGMENTS+ validate_quirks() return TRUE @@ -362,7 +362,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //Quirks save_data["all_quirks"] = all_quirks - save_character_skyrat(save_data) //SKYRAT EDIT ADDITION + save_character_skyrat(save_data) //NOVA EDIT ADDITION return TRUE diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm index 5df802b9f60893..eacb6767fa958f 100644 --- a/code/modules/client/verbs/ooc.dm +++ b/code/modules/client/verbs/ooc.dm @@ -76,8 +76,8 @@ GLOBAL_VAR_INIT(normal_ooc_colour, "#002eb8") var/keyname = key - if(CONFIG_GET(flag/enable_cross_server_ooc)) //SKYRAT EDIT ADDITION - send_ooc_to_other_server(ckey, msg) //SKYRAT EDIT ADDITION + if(CONFIG_GET(flag/enable_cross_server_ooc)) //NOVA EDIT ADDITION + send_ooc_to_other_server(ckey, msg) //NOVA EDIT ADDITION if(prefs.unlock_content) if(prefs.toggles & MEMBER_PUBLIC) diff --git a/code/modules/client/verbs/suicide.dm b/code/modules/client/verbs/suicide.dm index ad75e7c883fa09..f58ab3d244c1fc 100644 --- a/code/modules/client/verbs/suicide.dm +++ b/code/modules/client/verbs/suicide.dm @@ -48,11 +48,11 @@ /// Checks if we are in a valid state to suicide (not already suiciding, capable of actually killing ourselves, area checks, etc.) Returns TRUE if we can suicide, FALSE if we can not. /mob/living/proc/can_suicide() - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION if(CONFIG_GET(flag/disable_suicide)) to_chat(src, span_warning("Suicide is disabled on this server.")) return FALSE - // SKYRAT EDIT END + // NOVA EDIT END if(HAS_TRAIT_FROM_ONLY(src, TRAIT_SUICIDED, REF(src))) to_chat(src, span_warning("You are already commiting suicide!")) diff --git a/code/modules/clothing/chameleon/chameleon_action_subtypes.dm b/code/modules/clothing/chameleon/chameleon_action_subtypes.dm index f619a429269ec2..c4ee98acd51058 100644 --- a/code/modules/clothing/chameleon/chameleon_action_subtypes.dm +++ b/code/modules/clothing/chameleon/chameleon_action_subtypes.dm @@ -103,14 +103,14 @@ . = ..() chameleon_blacklist |= typecacheof(list(/obj/item/clothing/suit/armor/abductor, /obj/item/clothing/suit/changeling), only_root_path = TRUE) -/datum/action/item_action/chameleon/change/suit/apply_outfit(mob/user, datum/outfit/applying_from, list/all_items_to_apply) +/datum/action/item_action/chameleon/change/suit/apply_outfit(datum/outfit/applying_from, list/all_items_to_apply) . = ..() if(!. || !ispath(applying_from.suit, /obj/item/clothing/suit/hooded)) return // If we're appling a hooded suit, and wearing a cham hat, make it a hood var/obj/item/clothing/suit/hooded/hooded = applying_from.suit - var/datum/action/item_action/chameleon/change/hat/hood_action = locate() in user.actions - hood_action?.update_look(user, initial(hooded.hoodtype)) + var/datum/action/item_action/chameleon/change/hat/hood_action = locate() in owner?.actions + hood_action?.update_look(initial(hooded.hoodtype)) /datum/action/item_action/chameleon/change/jumpsuit chameleon_type = /obj/item/clothing/under diff --git a/code/modules/clothing/chameleon/chameleon_scanner.dm b/code/modules/clothing/chameleon/chameleon_scanner.dm index b6ed86e8640290..343ceb5c001cbd 100644 --- a/code/modules/clothing/chameleon/chameleon_scanner.dm +++ b/code/modules/clothing/chameleon/chameleon_scanner.dm @@ -1,7 +1,7 @@ /// Small handheld chameleon item that allows a user to mimic the outfit of another person quickly. /obj/item/chameleon_scanner // No name or desc by default, set up by the cham action - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = NOBLUDGEON slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_TINY diff --git a/code/modules/clothing/chameleon/generic_chameleon_clothing.dm b/code/modules/clothing/chameleon/generic_chameleon_clothing.dm index 9e1339b40681cf..b5fb0294a9942c 100644 --- a/code/modules/clothing/chameleon/generic_chameleon_clothing.dm +++ b/code/modules/clothing/chameleon/generic_chameleon_clothing.dm @@ -23,7 +23,7 @@ do { \ greyscale_config_worn = /datum/greyscale_config/jumpsuit/worn greyscale_config_inhand_left = /datum/greyscale_config/jumpsuit/inhand_left greyscale_config_inhand_right = /datum/greyscale_config/jumpsuit/inhand_right - sensor_mode = SENSOR_OFF //Hey who's this guy on the Syndicate Shuttle?? + sensor_mode = SENSOR_OFF //Hey who's this guy on the Symphionia Shuttle?? random_sensor = FALSE resistance_flags = NONE can_adjust = FALSE @@ -76,6 +76,7 @@ do { \ /obj/item/clothing/glasses/chameleon name = "Optical Meson Scanner" + flags_cover = GLASSESCOVERSEYES desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition." icon_state = "meson" inhand_icon_state = "meson" diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 486f44f3504128..ae0561d2177fb8 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -344,7 +344,7 @@ . += how_cool_are_your_threads.Join() if(get_armor().has_any_armor() || (flags_cover & (HEADCOVERSMOUTH|PEPPERPROOF))) - . += span_notice("OOC: Click here to see its protection classes.") // SKYRAT EDIT ORIGINAL: ("It has a tag listing its protection classes.") + . += span_notice("OOC: Click here to see its protection classes.") // NOVA EDIT ORIGINAL: ("It has a tag listing its protection classes.") /obj/item/clothing/Topic(href, href_list) . = ..() diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 4c7fce6633c8bd..38c856f8003e60 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -5,7 +5,6 @@ lefthand_file = 'icons/mob/inhands/clothing/glasses_lefthand.dmi' righthand_file = 'icons/mob/inhands/clothing/glasses_righthand.dmi' w_class = WEIGHT_CLASS_SMALL - flags_cover = GLASSESCOVERSEYES slot_flags = ITEM_SLOT_EYES strip_delay = 20 equip_delay_other = 25 @@ -23,12 +22,6 @@ var/list/color_cutoffs = null /// The current hud icons var/list/icon/current = list() -// Potentially replace glass_color_type with a setup that colors lighting by dropping segments of different componets -// Like the current idea, but applied without the mass cutoff (maybe? somehow?) -// That or just a light color to the lighting plane, that'd work too -// Enough to make it visible but not so much that it's a pain - -// That, or just make stuff that uses lighting_cutoff have colored offsets and all, like you were planning /// Colors your vision when worn var/glass_colour_type /// Whether or not vision coloring is forcing @@ -52,7 +45,7 @@ /obj/item/clothing/glasses/weldingvisortoggle(mob/user) . = ..() - alternate_worn_layer = up ? ABOVE_BODY_FRONT_HEAD_LAYER : initial(alternate_worn_layer) // SKYRAT EDIT - ORIGINAL : alternate_worn_layer = up ? ABOVE_BODY_FRONT_HEAD_LAYER : null + alternate_worn_layer = up ? ABOVE_BODY_FRONT_HEAD_LAYER : initial(alternate_worn_layer) // NOVA EDIT - ORIGINAL : alternate_worn_layer = up ? ABOVE_BODY_FRONT_HEAD_LAYER : null if(. && user) user.update_sight() if(iscarbon(user)) @@ -73,7 +66,7 @@ eyes.apply_organ_damage(5) /obj/item/clothing/glasses/AltClick(mob/user) - . = ..() //SKYRAT EDIT ADDITION + . = ..() //NOVA EDIT ADDITION if(glass_colour_type && !forced_glass_color && ishuman(user)) var/mob/living/carbon/human/human_user = user @@ -114,6 +107,7 @@ icon_state = "meson" inhand_icon_state = "meson" clothing_traits = list(TRAIT_MADNESS_IMMUNE) + flags_cover = GLASSESCOVERSEYES vision_flags = SEE_TURFS // Mesons get to be lightly green color_cutoffs = list(5, 15, 5) @@ -153,6 +147,7 @@ icon_state = "purple" inhand_icon_state = "glasses" glass_colour_type = /datum/client_colour/glass_colour/purple + flags_cover = GLASSESCOVERSEYES resistance_flags = ACID_PROOF armor_type = /datum/armor/glasses_science clothing_traits = list(TRAIT_REAGENT_SCANNER, TRAIT_RESEARCH_SCANNER) @@ -183,6 +178,7 @@ desc = "You can totally see in the dark now!" icon_state = "night" inhand_icon_state = "glasses" + flags_cover = GLASSESCOVERSEYES flash_protect = FLASH_PROTECTION_SENSITIVE // Dark green color_cutoffs = list(10, 30, 10) @@ -244,6 +240,7 @@ desc = "Very confusing glasses." icon_state = "material" inhand_icon_state = "glasses" + flags_cover = GLASSESCOVERSEYES vision_flags = SEE_OBJS glass_colour_type = /datum/client_colour/glass_colour/lightblue @@ -273,6 +270,7 @@ desc = "Made by Nerd. Co." icon_state = "glasses_regular" inhand_icon_state = "glasses" + flags_cover = GLASSESCOVERSEYES clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED) /obj/item/clothing/glasses/regular/Initialize(mapload) @@ -292,7 +290,7 @@ return if(isliving(movable)) var/mob/living/crusher = movable - if(crusher.move_intent != MOVE_INTENT_WALK && (!(crusher.movement_type & (FLYING|FLOATING)) || crusher.buckled)) + if(crusher.move_intent != MOVE_INTENT_WALK && (!(crusher.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) || crusher.buckled)) playsound(src, 'sound/effects/footstep/glass_step.ogg', 30, TRUE) visible_message(span_warning("[crusher] steps on [src], damaging it!")) take_damage(100, sound_effect = FALSE) @@ -347,6 +345,7 @@ desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks flashes." icon_state = "sun" inhand_icon_state = "sunglasses" + flags_cover = GLASSESCOVERSEYES flash_protect = FLASH_PROTECTION_FLASH tint = 1 glass_colour_type = /datum/client_colour/glass_colour/gray @@ -424,7 +423,7 @@ 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 = 'icons/obj/devices/syndie_gadget.dmi' icon_state = "contacts" /obj/item/syndicate_contacts/attack_self(mob/user, modifiers) @@ -449,12 +448,12 @@ inhand_icon_state = "welding-g" actions_types = list(/datum/action/item_action/toggle) flash_protect = FLASH_PROTECTION_WELDER + flags_cover = GLASSESCOVERSEYES custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*2.5) tint = 2 visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT - flags_cover = GLASSESCOVERSEYES glass_colour_type = /datum/client_colour/glass_colour/gray - alternate_worn_layer = ABOVE_BODY_FRONT_HEAD_LAYER // SKYRAT EDIT - Just so it works until I make the change upstream + alternate_worn_layer = ABOVE_BODY_FRONT_HEAD_LAYER // NOVA EDIT - Just so it works until I make the change upstream /obj/item/clothing/glasses/welding/attack_self(mob/user) weldingvisortoggle(user) @@ -469,6 +468,7 @@ icon_state = "blindfold" inhand_icon_state = "blindfold" flash_protect = FLASH_PROTECTION_WELDER + flags_cover = GLASSESCOVERSEYES tint = INFINITY // You WILL Be blind, no matter what dog_fashion = /datum/dog_fashion/head @@ -477,6 +477,7 @@ desc = "A see-through blindfold perfect for cheating at games like pin the stun baton on the clown." icon_state = "trickblindfold" inhand_icon_state = "blindfold" + flags_cover = GLASSESCOVERSEYES /obj/item/clothing/glasses/blindfold/white name = "blind personnel blindfold" @@ -522,6 +523,7 @@ // Going for an orange color here color_cutoffs = list(25, 8, 5) flash_protect = FLASH_PROTECTION_SENSITIVE + flags_cover = GLASSESCOVERSEYES glass_colour_type = /datum/client_colour/glass_colour/red /obj/item/clothing/glasses/thermal/emp_act(severity) @@ -549,8 +551,8 @@ name = "chameleon thermals" desc = "A pair of thermal optic goggles with an onboard chameleon generator." actions_types = list(/datum/action/item_action/chameleon/change/glasses/no_preset) - special_desc_requirement = EXAMINE_CHECK_SYNDICATE // SKYRAT EDIT ADDITION - special_desc = "Chameleon thermal goggles employed by the Syndicate in infiltration operations." //SKYRAT EDIT ADDITION, I don't think the regular description persists through chameleon changes. + special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT ADDITION + special_desc = "Chameleon thermal goggles employed by the Syndicate in infiltration operations." //NOVA EDIT ADDITION, I don't think the regular description persists through chameleon changes. /obj/item/clothing/glasses/thermal/monocle name = "thermoncle" @@ -588,18 +590,21 @@ desc = "A pair of goggles meant for low temperatures." icon_state = "cold" inhand_icon_state = null + flags_cover = GLASSESCOVERSEYES /obj/item/clothing/glasses/heat name = "heat goggles" desc = "A pair of goggles meant for high temperatures." icon_state = "heat" inhand_icon_state = null + flags_cover = GLASSESCOVERSEYES /obj/item/clothing/glasses/orange name = "orange glasses" desc = "A sweet pair of orange shades." icon_state = "orangeglasses" inhand_icon_state = null + flags_cover = GLASSESCOVERSEYES glass_colour_type = /datum/client_colour/glass_colour/lightorange /obj/item/clothing/glasses/red @@ -607,6 +612,7 @@ desc = "Hey, you're looking good, senpai!" icon_state = "redglasses" inhand_icon_state = null + flags_cover = GLASSESCOVERSEYES glass_colour_type = /datum/client_colour/glass_colour/red /obj/item/clothing/glasses/geist_gazers @@ -614,12 +620,14 @@ icon_state = "geist_gazers" worn_icon_state = "geist_gazers" glass_colour_type = /datum/client_colour/glass_colour/green + flags_cover = GLASSESCOVERSEYES /obj/item/clothing/glasses/psych name = "psych glasses" icon_state = "psych_glasses" worn_icon_state = "psych_glasses" glass_colour_type = /datum/client_colour/glass_colour/red + flags_cover = GLASSESCOVERSEYES /obj/item/clothing/glasses/debug name = "debug glasses" @@ -680,6 +688,7 @@ desc = "A pair of glasses with uniquely colored lenses. The frame is inscribed with 'Best Salesman 1997'." icon_state = "salesman" inhand_icon_state = "salesman" + flags_cover = GLASSESCOVERSEYES ///Tells us who the current wearer([BIGSHOT]) is. var/mob/living/carbon/human/bigshot @@ -716,6 +725,7 @@ glass_colour_type = /datum/client_colour/glass_colour/nightmare forced_glass_color = TRUE lighting_cutoff = LIGHTING_CUTOFF_FULLBRIGHT + flags_cover = GLASSESCOVERSEYES /// Hallucination datum currently being used for seeing mares var/datum/hallucination/stored_hallucination @@ -748,9 +758,11 @@ desc = "There's no such thing as good news! Just bad news and... weird news.." icon_state = "osi_glasses" inhand_icon_state = null + flags_cover = GLASSESCOVERSEYES /obj/item/clothing/glasses/phantom name = "Phantom Thief Mask" desc = "Lookin' cool." icon_state = "phantom_glasses" inhand_icon_state = null + flags_cover = GLASSESCOVERSEYES diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 34359eaa0b38b2..ec20ddebc087d8 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -3,8 +3,8 @@ desc = "A heads-up display that provides important info in (almost) real time." flags_1 = null //doesn't protect eyes because it's a monocle, duh var/hud_type = null - ///Used for topic calls. Just because you have a HUD display doesn't mean you should be able to interact with stuff. - var/hud_trait = null + + // NOTE: Just because you have a HUD display doesn't mean you should be able to interact with stuff on examine, that's where the associated trait (TRAIT_MEDICAL_HUD, TRAIT_SECURITY_HUD, etc) is necessary. /obj/item/clothing/glasses/hud/equipped(mob/living/carbon/human/user, slot) ..() @@ -13,8 +13,6 @@ if(hud_type) var/datum/atom_hud/our_hud = GLOB.huds[hud_type] our_hud.show_to(user) - if(hud_trait) - ADD_TRAIT(user, hud_trait, GLASSES_TRAIT) /obj/item/clothing/glasses/hud/dropped(mob/living/carbon/human/user) ..() @@ -23,8 +21,6 @@ if(hud_type) var/datum/atom_hud/our_hud = GLOB.huds[hud_type] our_hud.hide_from(user) - if(hud_trait) - REMOVE_TRAIT(user, hud_trait, GLASSES_TRAIT) /obj/item/clothing/glasses/hud/emp_act(severity) . = ..() @@ -60,7 +56,7 @@ desc = "A heads-up display that scans the humanoids in view and provides accurate data about their health status." icon_state = "healthhud" hud_type = DATA_HUD_MEDICAL_ADVANCED - hud_trait = TRAIT_MEDICAL_HUD + clothing_traits = list(TRAIT_MEDICAL_HUD) glass_colour_type = /datum/client_colour/glass_colour/lightblue /obj/item/clothing/glasses/hud/health/night @@ -69,6 +65,7 @@ icon_state = "healthhudnight" inhand_icon_state = "glasses" flash_protect = FLASH_PROTECTION_SENSITIVE + flags_cover = GLASSESCOVERSEYES // Blue green, dark color_cutoffs = list(5, 15, 30) glass_colour_type = /datum/client_colour/glass_colour/green @@ -89,6 +86,7 @@ desc = "Sunglasses with a medical HUD." icon_state = "sunhudmed" flash_protect = FLASH_PROTECTION_FLASH + flags_cover = GLASSESCOVERSEYES tint = 1 glass_colour_type = /datum/client_colour/glass_colour/blue @@ -106,7 +104,7 @@ desc = "A heads-up display capable of analyzing the integrity and status of robotics and exosuits." icon_state = "diagnostichud" hud_type = DATA_HUD_DIAGNOSTIC_BASIC - hud_trait = TRAIT_DIAGNOSTIC_HUD + clothing_traits = list(TRAIT_DIAGNOSTIC_HUD) glass_colour_type = /datum/client_colour/glass_colour/lightorange /obj/item/clothing/glasses/hud/diagnostic/night @@ -115,6 +113,7 @@ icon_state = "diagnostichudnight" inhand_icon_state = "glasses" flash_protect = FLASH_PROTECTION_SENSITIVE + flags_cover = GLASSESCOVERSEYES // Pale yellow color_cutoffs = list(30, 20, 5) glass_colour_type = /datum/client_colour/glass_colour/green @@ -125,6 +124,7 @@ icon_state = "sunhuddiag" inhand_icon_state = "glasses" flash_protect = FLASH_PROTECTION_FLASH + flags_cover = GLASSESCOVERSEYES tint = 1 /obj/item/clothing/glasses/hud/diagnostic/sunglasses/Initialize(mapload) @@ -141,12 +141,12 @@ desc = "A heads-up display that scans the humanoids in view and provides accurate data about their ID status and security records." icon_state = "securityhud" hud_type = DATA_HUD_SECURITY_ADVANCED - hud_trait = TRAIT_SECURITY_HUD + clothing_traits = list(TRAIT_SECURITY_HUD) glass_colour_type = /datum/client_colour/glass_colour/red /obj/item/clothing/glasses/hud/security/chameleon name = "chameleon security HUD" - desc = "A stolen security HUD integrated with Syndicate chameleon technology. Provides flash protection." + desc = "A stolen security HUD integrated with Symphionia chameleon technology. Provides flash protection." flash_protect = FLASH_PROTECTION_FLASH actions_types = list(/datum/action/item_action/chameleon/change/glasses/no_preset) @@ -167,6 +167,7 @@ desc = "Sunglasses with a security HUD." icon_state = "sunhudsec" flash_protect = FLASH_PROTECTION_FLASH + flags_cover = GLASSESCOVERSEYES tint = 1 glass_colour_type = /datum/client_colour/glass_colour/darkred @@ -184,6 +185,7 @@ desc = "An advanced heads-up display that provides ID data and vision in complete darkness." icon_state = "securityhudnight" flash_protect = FLASH_PROTECTION_SENSITIVE + flags_cover = GLASSESCOVERSEYES // Red with a tint of green color_cutoffs = list(35, 5, 5) glass_colour_type = /datum/client_colour/glass_colour/green @@ -212,6 +214,7 @@ /obj/item/clothing/glasses/hud/toggle name = "Toggle HUD" desc = "A hud with multiple functions." + flags_cover = GLASSESCOVERSEYES actions_types = list(/datum/action/item_action/switch_hud) /obj/item/clothing/glasses/hud/toggle/attack_self(mob/user) @@ -277,6 +280,7 @@ desc = "For thinking you look cool while brutalizing protestors and minorities." icon_state = "bigsunglasses" flash_protect = FLASH_PROTECTION_FLASH + flags_cover = GLASSESCOVERSEYES tint = 1 glass_colour_type = /datum/client_colour/glass_colour/gray diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index f77f6cc2c672b3..4e7112bb772c69 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -9,7 +9,7 @@ max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE cut_type = /obj/item/clothing/gloves/fingerless - // SKYRAT EDIT ADDITION START + // NOVA EDIT ADDITION START uses_advanced_reskins = TRUE unique_reskin = list( "Basic Gloves" = list( @@ -19,13 +19,13 @@ RESKIN_WORN_ICON_STATE = "black" ), "Peacekeeper Gloves" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi', + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi', RESKIN_ICON_STATE = "peacekeeper_gloves", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi', + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/hands.dmi', RESKIN_WORN_ICON_STATE = "peacekeeper" ) ) - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END /obj/item/clothing/gloves/color/black/Initialize(mapload) . = ..() diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm index 888ecac39ee712..986d8356b1afff 100644 --- a/code/modules/clothing/gloves/tacklers.dm +++ b/code/modules/clothing/gloves/tacklers.dm @@ -21,7 +21,7 @@ /// See: [/datum/component/tackler/var/speed] var/tackle_speed = 1 /// See: [/datum/component/tackler/var/skill_mod] - var/skill_mod = 0 + var/skill_mod = 1 /obj/item/clothing/gloves/tackler/Destroy() tackler = null diff --git a/code/modules/clothing/head/cone.dm b/code/modules/clothing/head/cone.dm index 0bd60b633da594..9cfcacda685b6e 100644 --- a/code/modules/clothing/head/cone.dm +++ b/code/modules/clothing/head/cone.dm @@ -5,6 +5,7 @@ worn_icon = 'icons/mob/clothing/head/utility.dmi' icon_state = "cone" inhand_icon_state = null + worn_y_offset = 1 force = 1 throwforce = 3 throw_speed = 2 diff --git a/code/modules/clothing/head/costume.dm b/code/modules/clothing/head/costume.dm index ec5ee81741fcca..e12ca65c5514f7 100644 --- a/code/modules/clothing/head/costume.dm +++ b/code/modules/clothing/head/costume.dm @@ -21,7 +21,7 @@ worn_icon = 'icons/mob/clothing/head/spacehelm.dmi' icon_state = "syndicate-helm-black-red" inhand_icon_state = "syndicate-helm-black-red" - desc = "A plastic replica of a Syndicate agent's space helmet. You'll look just like a real murderous Syndicate agent in this! This is a toy, it is not made for use in space!" + desc = "A plastic replica of a Symphionia agent's space helmet. You'll look just like a real murderous Symphionia agent in this! This is a toy, it is not made for use in space!" clothing_flags = SNUG_FIT | STACKABLE_HELMET_EXEMPT flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 09c67e7534acbe..a05d3d670cfc01 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -121,7 +121,7 @@ visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF ///Icon state of the welding visor. var/visor_state = "weldvisor" - var/visor_sprite_path //SKYRAT EDIT --- Lets the visor not smush the snout + var/visor_sprite_path //NOVA EDIT --- Lets the visor not smush the snout /obj/item/clothing/head/utility/hardhat/welding/Initialize(mapload) . = ..() @@ -141,11 +141,11 @@ /obj/item/clothing/head/utility/hardhat/welding/proc/toggle_welding_screen(mob/living/user) if(weldingvisortoggle(user)) playsound(src, 'sound/mecha/mechmove03.ogg', 50, TRUE) //Visors don't just come from nothing - var/mob/living/carbon/carbon_user = user //SKYRAT EDIT --- Lets the visor not smush the snout + var/mob/living/carbon/carbon_user = user //NOVA EDIT --- Lets the visor not smush the snout if(carbon_user.dna.species.mutant_bodyparts["snout"]) - visor_sprite_path = 'modular_skyrat/master_files/icons/mob/clothing/head_muzzled.dmi' + visor_sprite_path = 'modular_nova/master_files/icons/mob/clothing/head_muzzled.dmi' else - visor_sprite_path = 'icons/mob/clothing/head/utility.dmi' //END SKYRAT EDIT + visor_sprite_path = 'icons/mob/clothing/head/utility.dmi' //END NOVA EDIT update_appearance() /obj/item/clothing/head/utility/hardhat/welding/worn_overlays(mutable_appearance/standing, isinhands) @@ -154,8 +154,8 @@ return if(!up) - // SKYRAT EDIT: ORIGINAL - . += mutable_appearance('icons/mob/clothing/head/utility.dmi', visor_state) - // SKYRAT EDIT: WELDING MUZZLES + // NOVA EDIT: ORIGINAL - . += mutable_appearance('icons/mob/clothing/head/utility.dmi', visor_state) + // NOVA EDIT: WELDING MUZZLES . += mutable_appearance(visor_sprite_path, visor_state) /obj/item/clothing/head/utility/hardhat/welding/update_overlays() diff --git a/code/modules/clothing/head/hat.dm b/code/modules/clothing/head/hat.dm index 104bf81244421f..308e5e7f617448 100644 --- a/code/modules/clothing/head/hat.dm +++ b/code/modules/clothing/head/hat.dm @@ -180,6 +180,15 @@ min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT dog_fashion = /datum/dog_fashion/head/santa +/obj/item/clothing/head/costume/santa/gags + name = "santa hat" + desc = "On the first day of christmas my employer gave to me!" + icon_state = "santa_hat" + greyscale_colors = "#cc0000#f8f8f8" + greyscale_config = /datum/greyscale_config/santa_hat + greyscale_config_worn = /datum/greyscale_config/santa_hat/worn + flags_1 = IS_PLAYER_COLORABLE_1 + /obj/item/clothing/head/costume/jester name = "jester hat" desc = "A hat with bells, to add some merriness to the suit." @@ -261,7 +270,7 @@ flags_inv = 0 armor_type = /datum/armor/hats_centcom_cap strip_delay = (8 SECONDS) - supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON //SKYRAT EDIT lets anthros wear the hat + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON //NOVA EDIT lets anthros wear the hat /datum/armor/hats_centcom_cap melee = 30 @@ -283,7 +292,7 @@ desc = "Perfect for winter in Siberia, da?" icon_state = "ushankadown" inhand_icon_state = null - flags_inv = HIDEEARS //SKYRAT EDIT (Original: HIDEEARS|HIDEHAIR) + flags_inv = HIDEEARS //NOVA EDIT (Original: HIDEEARS|HIDEHAIR) cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT dog_fashion = /datum/dog_fashion/head/ushanka diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 2960260255fbc6..131d9c69c7775d 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -261,7 +261,7 @@ /obj/item/clothing/head/helmet/swat/nanotrasen name = "\improper SWAT helmet" - desc = "An extremely robust helmet with the Nanotrasen logo emblazoned on the top." + desc = "An extremely robust helmet with the Symphionia logo emblazoned on the top." icon_state = "swat" inhand_icon_state = "swat_helmet" clothing_flags = STACKABLE_HELMET_EXEMPT diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 1f7bc689812e33..2197f93e8dcecd 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -337,7 +337,7 @@ //Security /obj/item/clothing/head/hats/hos name = "generic head of security hat" - desc = "Please contact the Nanotrasen Costuming Department if found." + desc = "Please contact the Symphionia Costuming Department if found." armor_type = /datum/armor/hats_hos strip_delay = 8 SECONDS @@ -424,20 +424,8 @@ name = "warden's hat" desc = "A warden's red hat. Looking at it gives you the feeling of wanting to keep people in cells for as long as possible." icon_state = "wardenhat" - armor_type = /datum/armor/warden_red - strip_delay = 60 dog_fashion = /datum/dog_fashion/head/warden_red -/datum/armor/warden_red - melee = 40 - bullet = 30 - laser = 30 - energy = 40 - bomb = 25 - fire = 30 - acid = 60 - wound = 6 - /obj/item/clothing/head/hats/warden/drill name = "warden's campaign hat" desc = "A special armored campaign hat with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection." @@ -740,7 +728,7 @@ //CentCom /obj/item/clothing/head/beret/centcom_formal name = "\improper CentCom Formal Beret" - desc = "Sometimes, a compromise between fashion and defense needs to be made. Thanks to Nanotrasen's most recent nano-fabric durability enhancements, this time, it's not the case." + desc = "Sometimes, a compromise between fashion and defense needs to be made. Thanks to Symphionia's most recent nano-fabric durability enhancements, this time, it's not the case." icon_state = "beret_badge" greyscale_config = /datum/greyscale_config/beret_badge greyscale_config_worn = /datum/greyscale_config/beret_badge/worn diff --git a/code/modules/clothing/head/mind_monkey_helmet.dm b/code/modules/clothing/head/mind_monkey_helmet.dm index d1c423b5b038c8..4cf36795d5171d 100644 --- a/code/modules/clothing/head/mind_monkey_helmet.dm +++ b/code/modules/clothing/head/mind_monkey_helmet.dm @@ -1,6 +1,6 @@ //monkey sentience caps -/* SKYRAT EDIT REMOVAL +/* NOVA EDIT REMOVAL /obj/item/clothing/head/helmet/monkey_sentience name = "monkey mind magnification helmet" desc = "A fragile, circuitry embedded helmet for boosting the intelligence of a monkey to a higher level. You see several warning labels..." @@ -40,14 +40,14 @@ playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) return if(!(GLOB.ghost_role_flags & GHOSTROLE_STATION_SENTIENCE)) - say("ERROR: Central Command has temporarily outlawed monkey sentience helmets in this sector. NEAREST LAWFUL SECTOR: 2.537 million light years away.") + say("ERROR: Conglomeration of Colonists has temporarily outlawed monkey sentience helmets in this sector. NEAREST LAWFUL SECTOR: 2.537 million light years away.") return magnification = user //this polls ghosts visible_message(span_warning("[src] powers up!")) 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, pic_source = magnification, role_name_text = "mind-magnified monkey") polling = FALSE if(!magnification) return diff --git a/code/modules/clothing/head/moth.dm b/code/modules/clothing/head/moth.dm index fe5f04f0a4c487..324acaa13eba98 100644 --- a/code/modules/clothing/head/moth.dm +++ b/code/modules/clothing/head/moth.dm @@ -7,4 +7,14 @@ cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT flags_cover = HEADCOVERSEYES - flags_inv = HIDEHAIR|SHOWSPRITEEARS + flags_inv = HIDEHAIR|SHOWSPRITEEARS // NOVA ADDITION - SHOWSPRITEEARS Loadout Mothic Clothing #21056 + +/obj/item/clothing/head/mothcap/original + desc = "An authentic, padded leather cap with magnifying goggles, standard issue aboard the moth fleet. Keeps your head warm and debris away from those big eyes." + +/obj/item/clothing/head/mothcap/original/Initialize(mapload) + . = ..() + AddComponent(/datum/component/scope, range_modifier = 1.2, zoom_method = ZOOM_METHOD_ITEM_ACTION, item_action_type = /datum/action/item_action/hands_free/moth_googles) + +/obj/item/clothing/head/mothcap/original/item_action_slot_check(slot, mob/user, datum/action/action) + return (slot & ITEM_SLOT_HEAD) diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index 08562481a445fa..e8338f4c95b19f 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -39,6 +39,7 @@ else icon_state = "[soft_type][soft_suffix]" to_chat(user, span_notice("You flip the hat back in normal position.")) + update_icon() usr.update_worn_head() //so our mob-overlays update /obj/item/clothing/head/soft/examine(mob/user) @@ -161,3 +162,41 @@ /obj/item/clothing/head/soft/fishing_hat/Initialize(mapload) . = ..() AddElement(/datum/element/skill_reward, /datum/skill/fishing) + +#define PROPHAT_MOOD "prophat" + +/obj/item/clothing/head/soft/propeller_hat + name = "propeller hat" + desc = "A colorful hat with a spinning propeller sat on top." + icon_state = "propeller_hat" + soft_type = "propeller_hat" + inhand_icon_state = "rainbow_softcap" + worn_y_offset = 1 + soft_suffix = null + actions_types = list(/datum/action/item_action/toggle) + var/enabled_waddle = TRUE + var/active = FALSE + +/obj/item/clothing/head/soft/propeller_hat/update_icon_state() + . = ..() + worn_icon_state = "[soft_type][flipped ? "_flipped" : null][active ? "_on" : null]" + +/obj/item/clothing/head/soft/propeller_hat/attack_self(mob/user) + active = !active + balloon_alert(user, (active ? "started propeller" : "stopped propeller")) + update_icon() + user.update_worn_head() + add_fingerprint(user) + +/obj/item/clothing/head/soft/propeller_hat/equipped(mob/living/user, slot) + . = ..() + if(slot & ITEM_SLOT_HEAD) + user.add_mood_event(PROPHAT_MOOD, /datum/mood_event/prophat) + +/obj/item/clothing/head/soft/propeller_hat/dropped(mob/living/user) + . = ..() + user.clear_mood_event(PROPHAT_MOOD) + active = FALSE + update_icon() + +#undef PROPHAT_MOOD diff --git a/code/modules/clothing/head/wig.dm b/code/modules/clothing/head/wig.dm index 01a29b28a16bdc..565d04e3b637ce 100644 --- a/code/modules/clothing/head/wig.dm +++ b/code/modules/clothing/head/wig.dm @@ -40,7 +40,7 @@ override_state = null, override_file = null, use_height_offset = TRUE, - mutant_styles = NONE, // SKYRAT EDIT ADD - Further outfit modification for outfits (added `mutant_styles` argument) + mutant_styles = NONE, // NOVA EDIT ADD - Further outfit modification for outfits (added `mutant_styles` argument) ) return ..(default_layer, default_icon_file, isinhands, female_uniform, override_state, override_file, use_height_offset = FALSE) diff --git a/code/modules/clothing/masks/bandana.dm b/code/modules/clothing/masks/bandana.dm index ea067c2bea88fd..7d04daf15f2291 100644 --- a/code/modules/clothing/masks/bandana.dm +++ b/code/modules/clothing/masks/bandana.dm @@ -35,12 +35,12 @@ if(slot_flags & ITEM_SLOT_NECK) to_chat(user, span_warning("You must undo [src] in order to push it into a hat!")) return - //SKYRAT EDIT START: BANDANA HATS FOR MUTANTS + //NOVA EDIT START: BANDANA HATS FOR MUTANTS if(slot_flags & ITEM_SLOT_HEAD) supports_variations_flags = NONE if(slot_flags & ITEM_SLOT_MASK) supports_variations_flags = initial(supports_variations_flags) - //SKYRAT EDIT END + //NOVA EDIT END adjustmask(user) diff --git a/code/modules/clothing/masks/gas_filter.dm b/code/modules/clothing/masks/gas_filter.dm index c77c37de2242a4..08ae650c24726f 100644 --- a/code/modules/clothing/masks/gas_filter.dm +++ b/code/modules/clothing/masks/gas_filter.dm @@ -39,7 +39,8 @@ /datum/gas/nitrium, /datum/gas/freon, /datum/gas/hypernoblium, - /datum/gas/bz + /datum/gas/bz, + /datum/gas/miasma, ) ///List of gases with low filter priority var/list/low_filtering_gases = list( diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index c8784d9af6c90e..be2e1fb9453148 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -188,7 +188,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( /obj/item/clothing/mask/gas/atmos/captain name = "captain's gas mask" - desc = "Nanotrasen cut corners and repainted a spare atmospheric gas mask, but don't tell anyone." + desc = "Symphionia cut corners and repainted a spare atmospheric gas mask, but don't tell anyone." icon_state = "gas_cap" inhand_icon_state = "gasmask_captain" resistance_flags = FIRE_PROOF | ACID_PROOF @@ -288,7 +288,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( "The Madman" = image(icon = src.icon, icon_state = "joker"), "The Rainbow Color" = image(icon = src.icon, icon_state = "rainbow") ) - //AddElement(/datum/element/swabable, CELL_LINE_TABLE_CLOWN, CELL_VIRUS_TABLE_GENERIC, rand(2,3), 0) //SKYRAT EDIT REMOVAL + //AddElement(/datum/element/swabable, CELL_LINE_TABLE_CLOWN, CELL_VIRUS_TABLE_GENERIC, rand(2,3), 0) //NOVA EDIT REMOVAL /obj/item/clothing/mask/gas/clown_hat/ui_action_click(mob/user) if(!istype(user) || user.incapacitated()) @@ -362,8 +362,8 @@ GLOBAL_LIST_INIT(clown_mask_options, list( // SKYRAT ADDITION - More mask variations var/mob/living/carbon/human/human_user = user if(human_user.dna.species.mutant_bodyparts["snout"]) - icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask_muzzled.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask_muzzled.dmi' var/list/avian_snouts = list("Beak", "Big Beak", "Corvid Beak") if(human_user.dna.species.mutant_bodyparts["snout"][MUTANT_INDEX_NAME] in avian_snouts) icon_state = "[options[choice]]_b" diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm index 5720c754ead99b..7c351d3ad34089 100644 --- a/code/modules/clothing/masks/hailer.dm +++ b/code/modules/clothing/masks/hailer.dm @@ -98,7 +98,7 @@ GLOBAL_LIST_INIT(hailer_phrases, list( /obj/item/clothing/mask/gas/sechailer/cyborg name = "security hailer" desc = "A set of recognizable pre-recorded messages for cyborgs to use when apprehending criminals." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/voice.dmi' icon_state = "taperecorder_idle" slot_flags = null aggressiveness = AGGR_GOOD_COP // Borgs are nicecurity! diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index 9f0be80e7a8a57..a4c6393ed6f55a 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -30,6 +30,14 @@ greyscale_colors = "#151516ff" flags_1 = IS_PLAYER_COLORABLE_1 +/obj/item/clothing/neck/bowtie/rainbow + name = "rainbow bow tie" + desc = "An extremely large neosilk rainbow-colored bowtie." + icon_state = "bowtie_rainbow" + greyscale_config = null + greyscale_config_worn = null + greyscale_colors = null + /obj/item/clothing/neck/tie name = "slick tie" desc = "A neosilk tie." @@ -73,10 +81,10 @@ var/tie_timer_actual = tie_timer // Mirrors give you a boost to your tying speed. I realize this stacks and I think that's hilarious. for(var/obj/structure/mirror/reflection in view(2, user)) - tie_timer_actual /= 1.25 + tie_timer_actual *= 0.8 // Heads of staff are experts at tying their ties. - if(user.mind?.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) - tie_timer_actual /= 2 + if(HAS_TRAIT(user, TRAIT_FAST_TYING)) + tie_timer_actual *= 0.5 // Tie/Untie our tie if(!do_after(user, tie_timer_actual)) to_chat(user, span_notice("Your fingers fumble away from [src] as your concentration breaks.")) @@ -215,35 +223,34 @@ 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")) + 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" + if(isnull(lungs) \ + || 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()] 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()] breathing heavily!\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()] 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()] breathing heavily!\n" - else - render_list += "[M.p_Theyre()] breathing normally.\n"//they're okay :D + render_list += "[M.p_Theyre()] 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" + if(isnull(heart) || !heart.is_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 - 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 + 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") @@ -254,7 +261,7 @@ 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" + render_list += "You can't feel anything where [M.p_their()] liver would be.\n" liver_okay = FALSE else if(liver.damage > 10) @@ -262,7 +269,7 @@ liver_okay = FALSE if(!appendix)//sanity check, ensure the patient actually has an appendix - render_list += "[M] doesn't have an appendix!\n" + render_list += "You can't feel anything where [M.p_their()] appendix would be.\n" appendix_okay = FALSE else if(appendix.damage > 10 && carbon_patient.stat == CONSCIOUS) @@ -290,23 +297,20 @@ 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" + if(isnull(heart) || !heart.is_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.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 + if(heart.damage > 10) + heart_strength = span_danger("irregular")//their heart is damaged else - if(heart.damage > 10) - heart_strength = span_danger("irregular")//their heart is damaged - else - heart_strength = span_notice("regular")//they're okay :D + 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 + 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()] pulse is [pulse_pressure] and [heart_strength].\n" + render_list += "[M.p_Their()] 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) diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index 5bedbb86fa8a99..6d9646b49ee27b 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -442,7 +442,7 @@ mask = /obj/item/clothing/mask/gas/sechailer/swat shoes = /obj/item/clothing/shoes/combat/swat l_pocket = /obj/item/melee/energy/sword/saber - r_pocket = /obj/item/shield/energy + r_pocket = /obj/item/shield/energy/advanced l_hand = /obj/item/gun/energy/pulse/loyalpin skillchips = list( diff --git a/code/modules/clothing/outfits/event.dm b/code/modules/clothing/outfits/event.dm index aa85bd795a37b7..fc94adb9ff556c 100644 --- a/code/modules/clothing/outfits/event.dm +++ b/code/modules/clothing/outfits/event.dm @@ -5,8 +5,8 @@ suit = /obj/item/clothing/suit/space/santa back = /obj/item/storage/backpack/santabag backpack_contents = list( - /obj/item/a_gift/anything = 5, -) + /obj/item/gift/anything = 5, + ) gloves = /obj/item/clothing/gloves/color/red head = /obj/item/clothing/head/helmet/space/santahat/beardless shoes = /obj/item/clothing/shoes/sneakers/red diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index 061fbe3a1decf5..a22691495ccc18 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -113,6 +113,16 @@ r_hand = /obj/item/gun/energy/recharge/ebow shoes = /obj/item/clothing/shoes/magboots/advance +/datum/outfit/heretic_hallucination + name = "Heretic Hallucination" + + uniform = /obj/item/clothing/under/color/grey + suit = /obj/item/clothing/suit/hooded/cultrobes/eldritch + neck = /obj/item/clothing/neck/heretic_focus + r_hand = /obj/item/melee/touch_attack/mansus_fist + head = /obj/item/clothing/head/hooded/cult_hoodie/eldritch + shoes = /obj/item/clothing/shoes/sneakers/black + /datum/outfit/rev_cutout name = "Revolutionary Cutout" @@ -194,7 +204,7 @@ glasses = /obj/item/clothing/glasses/sunglasses shoes = /obj/item/clothing/shoes/sneakers/black l_pocket = /obj/item/melee/energy/sword/saber - l_hand = /obj/item/storage/secure/briefcase + l_hand = /obj/item/storage/briefcase/secure /datum/outfit/assassin/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) var/obj/item/clothing/under/U = H.w_uniform @@ -204,7 +214,7 @@ return //Could use a type - var/obj/item/storage/secure/briefcase/sec_briefcase = H.get_item_for_held_index(1) + var/obj/item/storage/briefcase/secure/sec_briefcase = H.get_item_for_held_index(1) for(var/obj/item/briefcase_item in sec_briefcase) qdel(briefcase_item) for(var/i = 3 to 0 step -1) diff --git a/code/modules/clothing/outfits/vr.dm b/code/modules/clothing/outfits/vr.dm index fb618cd831b681..d37ee3cc2cb773 100644 --- a/code/modules/clothing/outfits/vr.dm +++ b/code/modules/clothing/outfits/vr.dm @@ -11,7 +11,7 @@ H.dna.species.pre_equip_species_outfit(null, H) /datum/outfit/vr/syndicate - name = "Syndicate VR Operative - Basic" + name = "Symphionia VR Operative - Basic" id = /obj/item/card/id/advanced/chameleon/black id_trim = /datum/id_trim/vr/operative diff --git a/code/modules/clothing/outfits/vv_outfit.dm b/code/modules/clothing/outfits/vv_outfit.dm index 1740094fe3d248..ec459634115593 100644 --- a/code/modules/clothing/outfits/vv_outfit.dm +++ b/code/modules/clothing/outfits/vv_outfit.dm @@ -48,9 +48,6 @@ //Temporary/Internal stuff, do not copy these. var/static/list/ignored_vars = list( NAMEOF(item, animate_movement), -#ifndef EXPERIMENT_515_DONT_CACHE_REF - NAMEOF(item, cached_ref), -#endif NAMEOF(item, datum_flags), NAMEOF(item, fingerprintslast), NAMEOF(item, layer), diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index 118c28c0e5166e..ed6942db14be4e 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -44,7 +44,7 @@ playsound(user, 'sound/weapons/genhit2.ogg', 50, TRUE) return BRUTELOSS -//SKYRAT EDIT REMOVAL BEGIN -DIGI_BLOODSOLE - (Moved to modular_skyrat/modules/digi_shoeblood/code/modules/clothing/shoes/_shoes.dm) +//NOVA EDIT REMOVAL BEGIN -DIGI_BLOODSOLE - (Moved to modular_nova/modules/digi_shoeblood/code/modules/clothing/shoes/_shoes.dm) /* /obj/item/clothing/shoes/worn_overlays(mutable_appearance/standing, isinhands = FALSE) . = ..() @@ -59,7 +59,7 @@ else . += mutable_appearance('icons/effects/blood.dmi', "shoeblood") */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END /obj/item/clothing/shoes/examine(mob/user) . = ..() @@ -165,12 +165,12 @@ to_chat(user, span_warning("You're already interacting with [src]!")) return user.visible_message(span_notice("[user] begins [tied ? "unknotting" : "tying"] the laces of [user.p_their()] [src.name]."), span_notice("You begin [tied ? "unknotting" : "tying"] the laces of your [src.name]...")) - // SKYRAT EDIT START + // NOVA EDIT START var/tie_time = lace_time if(HAS_TRAIT(user, TRAIT_STICKY_FINGERS)) tie_time *= 0.5 if(do_after(user, tie_time, target = our_guy, extra_checks = CALLBACK(src, PROC_REF(still_shoed), our_guy))) - // SKYRAT EDIT END + // NOVA EDIT END to_chat(user, span_notice("You [tied ? "unknot" : "tie"] the laces of your [src.name].")) if(tied == SHOES_UNTIED) adjust_laces(SHOES_TIED, user) @@ -193,10 +193,10 @@ to_chat(user, span_notice("You quietly set to work [tied ? "untying" : "knotting"] [loc]'s [src.name]...")) if(HAS_TRAIT(user, TRAIT_CLUMSY)) // based clowns trained their whole lives for this mod_time *= 0.75 - // SKYRAT EDIT START + // NOVA EDIT START if(HAS_TRAIT(user, TRAIT_STICKY_FINGERS)) // Clowns with thieving gloves will be a menace mod_time *= 0.5 - // SKYRAT EDIT END + // NOVA EDIT END if(do_after(user, mod_time, target = our_guy, extra_checks = CALLBACK(src, PROC_REF(still_shoed), our_guy))) to_chat(user, span_notice("You [tied ? "untie" : "knot"] the laces on [loc]'s [src.name].")) if(tied == SHOES_UNTIED) @@ -254,9 +254,7 @@ if(14 to 25) // 1.3ish% chance to stumble and be a bit off balance (like being disarmed) to_chat(our_guy, span_danger("You stumble a bit on your untied shoelaces!")) - if(!our_guy.has_movespeed_modifier(/datum/movespeed_modifier/shove)) - our_guy.add_movespeed_modifier(/datum/movespeed_modifier/shove) - addtimer(CALLBACK(our_guy, TYPE_PROC_REF(/mob/living/carbon, clear_shove_slowdown)), SHOVE_SLOWDOWN_LENGTH) + our_guy.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH, 10 SECONDS) if(26 to 1000) wiser = FALSE @@ -284,12 +282,12 @@ return to_chat(user, span_notice("You begin [tied ? "untying" : "tying"] the laces on [src]...")) - // SKYRAT EDIT STARTr + // NOVA EDIT STARTr var/tie_time = lace_time if(HAS_TRAIT(user, TRAIT_STICKY_FINGERS)) tie_time *= 0.5 if(do_after(user, lace_time, target = src,extra_checks = CALLBACK(src, PROC_REF(still_shoed), user))) - // SKYRAT EDIT END + // NOVA EDIT END to_chat(user, span_notice("You [tied ? "untie" : "tie"] the laces on [src].")) adjust_laces(tied ? SHOES_UNTIED : SHOES_TIED, user) diff --git a/code/modules/clothing/shoes/bananashoes.dm b/code/modules/clothing/shoes/bananashoes.dm index 75299ad828a41d..909f835b1c9224 100644 --- a/code/modules/clothing/shoes/bananashoes.dm +++ b/code/modules/clothing/shoes/bananashoes.dm @@ -19,7 +19,13 @@ /obj/item/clothing/shoes/clown_shoes/banana_shoes/Initialize(mapload) . = ..() AddElement(/datum/element/update_icon_updates_onmob) - bananium = AddComponent(/datum/component/material_container, list(/datum/material/bananium), 100 * SHEET_MATERIAL_AMOUNT, MATCONTAINER_EXAMINE|MATCONTAINER_ANY_INTENT|MATCONTAINER_SILENT, allowed_items=/obj/item/stack) + bananium = AddComponent( + /datum/component/material_container, \ + list(/datum/material/bananium), \ + 100 * SHEET_MATERIAL_AMOUNT, \ + MATCONTAINER_EXAMINE | MATCONTAINER_ANY_INTENT | MATCONTAINER_SILENT, \ + allowed_items = /obj/item/stack, \ + ) AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 75, falloff_exponent = 20) RegisterSignal(src, COMSIG_SHOES_STEP_ACTION, PROC_REF(on_step)) if(always_noslip) diff --git a/code/modules/clothing/shoes/boots.dm b/code/modules/clothing/shoes/boots.dm index b359f94db3da59..d21a2554bd5ec2 100644 --- a/code/modules/clothing/shoes/boots.dm +++ b/code/modules/clothing/shoes/boots.dm @@ -41,7 +41,7 @@ /obj/item/clothing/shoes/jackboots name = "jackboots" - desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time." + desc = "Symphionia-issue Security combat boots for combat scenarios or combat situations. All combat, all the time." icon_state = "jackboots" inhand_icon_state = "jackboots" strip_delay = 30 @@ -114,7 +114,7 @@ /obj/item/clothing/shoes/workboots name = "work boots" - desc = "Nanotrasen-issue Engineering lace-up work boots for the especially blue-collar." + desc = "Symphionia-issue Engineering lace-up work boots for the especially blue-collar." icon_state = "workboots" inhand_icon_state = "jackboots" armor_type = /datum/armor/shoes_workboots diff --git a/code/modules/clothing/shoes/clown.dm b/code/modules/clothing/shoes/clown.dm index 0109e950dca8c1..37270f47f6ca42 100644 --- a/code/modules/clothing/shoes/clown.dm +++ b/code/modules/clothing/shoes/clown.dm @@ -14,7 +14,7 @@ create_storage(storage_type = /datum/storage/pockets/shoes/clown) LoadComponent(/datum/component/squeak, squeak_sound, 50, falloff_exponent = 20) //die off quick please - //AddElement(/datum/element/swabable, CELL_LINE_TABLE_CLOWN, CELL_VIRUS_TABLE_GENERIC, rand(2,3), 0) // SKYRAT EDIT - REMOVAL - NO CLOWN CYTOLOGY + //AddElement(/datum/element/swabable, CELL_LINE_TABLE_CLOWN, CELL_VIRUS_TABLE_GENERIC, rand(2,3), 0) // NOVA EDIT - REMOVAL - NO CLOWN CYTOLOGY /obj/item/clothing/shoes/clown_shoes/equipped(mob/living/user, slot) . = ..() diff --git a/code/modules/clothing/shoes/cowboy.dm b/code/modules/clothing/shoes/cowboy.dm index 0aa518bc1364d8..a033a561439ff3 100644 --- a/code/modules/clothing/shoes/cowboy.dm +++ b/code/modules/clothing/shoes/cowboy.dm @@ -38,11 +38,7 @@ occupant.forceMove(user.drop_location()) user.visible_message(span_warning("[user] recoils as something slithers out of [src]."), span_userdanger("You feel a sudden stabbing pain in your [pick("foot", "toe", "ankle")]!")) user.Knockdown(20) //Is one second paralyze better here? I feel you would fall on your ass in some fashion. - user.apply_damage(5, BRUTE, target_zone) - if(istype(occupant, /mob/living/simple_animal/hostile/retaliate)) - user.reagents.add_reagent(/datum/reagent/toxin, 7) - - + occupant.UnarmedAttack(user, proximity_flag = TRUE) /obj/item/clothing/shoes/cowboy/dropped(mob/living/user) . = ..() diff --git a/code/modules/clothing/shoes/sneakers.dm b/code/modules/clothing/shoes/sneakers.dm index 66af19f503ca5c..5dcf27b138e30e 100644 --- a/code/modules/clothing/shoes/sneakers.dm +++ b/code/modules/clothing/shoes/sneakers.dm @@ -10,7 +10,7 @@ greyscale_config_inhand_left = /datum/greyscale_config/sneakers/inhand_left greyscale_config_inhand_right = /datum/greyscale_config/sneakers/inhand_right flags_1 = IS_PLAYER_COLORABLE_1 - greyscale_config_worn_digi = /datum/greyscale_config/sneakers/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale + greyscale_config_worn_digi = /datum/greyscale_config/sneakers/worn/digi //NOVA EDIT ADDITION - DigiGreyscale /obj/item/clothing/shoes/sneakers/black name = "black shoes" @@ -86,7 +86,7 @@ greyscale_config_inhand_right = /datum/greyscale_config/sneakers_orange/inhand_right flags_1 = NONE var/obj/item/restraints/handcuffs/attached_cuffs - greyscale_config_worn_digi = /datum/greyscale_config/sneakers_orange/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale + greyscale_config_worn_digi = /datum/greyscale_config/sneakers_orange/worn/digi //NOVA EDIT ADDITION - DigiGreyscale /obj/item/clothing/shoes/sneakers/orange/Initialize(mapload) . = ..() diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm index 6912e3bed4fabc..9a8a454af9258f 100644 --- a/code/modules/clothing/spacesuits/_spacesuits.dm +++ b/code/modules/clothing/spacesuits/_spacesuits.dm @@ -48,7 +48,7 @@ ) slowdown = 1 armor_type = /datum/armor/suit_space - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDESEXTOY|HIDETAIL //SKYRAT EDIT CHANGE - ADDED HIDETAIL. ADDED HIDESEXTOY TO PREVENT VISUAL BUGS. + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDESEXTOY|HIDETAIL //NOVA EDIT CHANGE - ADDED HIDETAIL. ADDED HIDESEXTOY TO PREVENT VISUAL BUGS. cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT_OFF heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS @@ -160,7 +160,7 @@ /obj/item/clothing/suit/space/crowbar_act(mob/living/user, obj/item/tool) toggle_spacesuit_cell(user) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/item/clothing/suit/space/screwdriver_act(mob/living/user, obj/item/tool) var/range_low = 20 // Default min temp c @@ -174,7 +174,7 @@ if(deg_c && deg_c >= range_low && deg_c <= range_high) temperature_setting = round(T0C + deg_c, 0.1) to_chat(user, span_notice("You see the readout change to [deg_c] c.")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS // object handling for accessing features of the suit /obj/item/clothing/suit/space/attackby(obj/item/I, mob/user, params) @@ -226,7 +226,7 @@ * Toggle the space suit's thermal regulator status... * Can't do it if it has no charge. * Arguments: - * * toggler - User mob who recieves the to_chat messages. + * * toggler - User mob who receives the to_chat messages. * * manual_toggle - If false get a differently-flavored message about it being disabled by itself */ /obj/item/clothing/suit/space/proc/toggle_spacesuit(mob/toggler, manual_toggle = TRUE) diff --git a/code/modules/clothing/spacesuits/bountyhunter.dm b/code/modules/clothing/spacesuits/bountyhunter.dm index 0c83e1b01d2247..9218deb5633fca 100644 --- a/code/modules/clothing/spacesuits/bountyhunter.dm +++ b/code/modules/clothing/spacesuits/bountyhunter.dm @@ -3,7 +3,7 @@ desc = "A custom version of the MK.II SWAT suit, modified to look rugged and tough. Works as a space suit, if you can find a helmet." icon_state = "hunter" inhand_icon_state = "swat_suit" - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/knife/combat) + allowed = list(/obj/item/gun, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/knife/combat) armor_type = /datum/armor/space_hunter strip_delay = 130 resistance_flags = FIRE_PROOF | ACID_PROOF diff --git a/code/modules/clothing/spacesuits/freedom.dm b/code/modules/clothing/spacesuits/freedom.dm index 73343a82eeeb7c..b0a08f4cc7367b 100644 --- a/code/modules/clothing/spacesuits/freedom.dm +++ b/code/modules/clothing/spacesuits/freedom.dm @@ -25,7 +25,7 @@ desc = "An advanced, light suit, fabricated from a mixture of synthetic feathers and space-resistant material. A gun holster appears to be integrated into the suit and the wings appear to be stuck in 'freedom' mode." icon_state = "freedom" inhand_icon_state = null - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals) + allowed = list(/obj/item/gun, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals) armor_type = /datum/armor/space_freedom strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT diff --git a/code/modules/clothing/spacesuits/pirate.dm b/code/modules/clothing/spacesuits/pirate.dm index 34a495b4dbef8e..946c0c2b66fdd9 100644 --- a/code/modules/clothing/spacesuits/pirate.dm +++ b/code/modules/clothing/spacesuits/pirate.dm @@ -25,7 +25,7 @@ desc = "A modified suit to allow space pirates to board shuttles and stations while avoiding the maw of the void. Comes with additional protection and is lighter to move in." icon_state = "spacepirate" w_class = WEIGHT_CLASS_NORMAL - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/melee/energy/sword/pirate, /obj/item/clothing/glasses/eyepatch, /obj/item/reagent_containers/cup/glass/bottle/rum) + allowed = list(/obj/item/gun, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/melee/energy/sword/pirate, /obj/item/clothing/glasses/eyepatch, /obj/item/reagent_containers/cup/glass/bottle/rum) slowdown = 0 armor_type = /datum/armor/space_pirate strip_delay = 40 diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index 30e43c793aacff..2f24e17511f84c 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -351,7 +351,7 @@ /obj/item/clothing/head/helmet/space/plasmaman/curator name = "curator's plasma envirosuit helmet" - desc = "A slight modification on a traditional voidsuit helmet, this helmet was Nanotrasen's first solution to the *logistical problems* that come with employing plasmamen. Despite their limitations, these helmets still see use by historians and old-school plasmamen alike." + desc = "A slight modification on a traditional voidsuit helmet, this helmet was Symphionia's first solution to the *logistical problems* that come with employing plasmamen. Despite their limitations, these helmets still see use by historians and old-school plasmamen alike." icon_state = "prototype_envirohelm" inhand_icon_state = "void_helmet" actions_types = list(/datum/action/item_action/toggle_welding_screen) @@ -415,7 +415,7 @@ /obj/item/clothing/head/helmet/space/plasmaman/centcom_commander name = "CentCom commander plasma envirosuit helmet" - desc = "A special containment helmet designed for the Higher Central Command Staff. Not many of these exist, as CentCom does not usually employ plasmamen to higher staff positions due to their complications." + desc = "A special containment helmet designed for the Higher Conglomeration of Colonists Staff. Not many of these exist, as CentCom does not usually employ plasmamen to higher staff positions due to their complications." icon_state = "commander_envirohelm" inhand_icon_state = null armor_type = /datum/armor/hats_centhat/plasmaman diff --git a/code/modules/clothing/spacesuits/specialops.dm b/code/modules/clothing/spacesuits/specialops.dm index 3634066e72fd49..cf8fc2a475cc69 100644 --- a/code/modules/clothing/spacesuits/specialops.dm +++ b/code/modules/clothing/spacesuits/specialops.dm @@ -35,7 +35,7 @@ slowdown = 0 flags_inv = 0 w_class = WEIGHT_CLASS_NORMAL - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals) + allowed = list(/obj/item/gun, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals) armor_type = /datum/armor/space_officer strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm index d9939a466211e4..70b004599e5982 100644 --- a/code/modules/clothing/spacesuits/syndi.dm +++ b/code/modules/clothing/spacesuits/syndi.dm @@ -38,7 +38,7 @@ GLOBAL_LIST_INIT(syndicate_space_suits_to_helmets,list( inhand_icon_state = "space_suit_syndicate" desc = "Has a tag on it: Totally not property of an enemy corporation, honest!" w_class = WEIGHT_CLASS_NORMAL - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals) + allowed = list(/obj/item/gun, /obj/item/melee/baton, /obj/item/melee/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals) armor_type = /datum/armor/space_syndicate cell = /obj/item/stock_parts/cell/hyper var/helmet_type = /obj/item/clothing/head/helmet/space/syndicate @@ -174,14 +174,14 @@ GLOBAL_LIST_INIT(syndicate_space_suits_to_helmets,list( //Black-red syndicate contract varient /obj/item/clothing/head/helmet/space/syndicate/contract name = "contractor helmet" - desc = "A specialised black and gold helmet that's more compact than its standard Syndicate counterpart. Can be ultra-compressed into even the tightest of spaces." + desc = "A specialised black and gold helmet that's more compact than its standard Symphionia counterpart. Can be ultra-compressed into even the tightest of spaces." w_class = WEIGHT_CLASS_SMALL icon_state = "syndicate-contract-helm" inhand_icon_state = "contractor_helmet" /obj/item/clothing/suit/space/syndicate/contract name = "contractor space suit" - desc = "A specialised black and gold space suit that's quicker, and more compact than its standard Syndicate counterpart. Can be ultra-compressed into even the tightest of spaces." + desc = "A specialised black and gold space suit that's quicker, and more compact than its standard Symphionia counterpart. Can be ultra-compressed into even the tightest of spaces." slowdown = 1 w_class = WEIGHT_CLASS_SMALL icon_state = "syndicate-contract" diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm index 84cb98049e1b1a..0e4d5b9cba59fa 100644 --- a/code/modules/clothing/suits/_suits.dm +++ b/code/modules/clothing/suits/_suits.dm @@ -17,30 +17,23 @@ var/blood_overlay_type = "suit" limb_integrity = 0 // disabled for most exo-suits -/obj/item/clothing/suit/Initialize(mapload) - . = ..() - setup_shielding() - -/// SKYRAT EDIT CHANGE BEGIN - taurs and teshis -// /obj/item/clothing/suit/worn_overlays(mutable_appearance/standing, isinhands = FALSE) // ORIGINAL -/obj/item/clothing/suit/worn_overlays(mutable_appearance/standing, isinhands = FALSE, file2use = null, mutant_styles = NONE) -// SKYRAT EDIT CHANGE END +/obj/item/clothing/suit/worn_overlays(mutable_appearance/standing, isinhands = FALSE, file2use = null, mutant_styles = NONE) // NOVA EDIT CHANGE - TAURS AND TESHIS - ORIGINAL: /obj/item/clothing/suit/worn_overlays(mutable_appearance/standing, isinhands = FALSE) . = ..() if(isinhands) return if(damaged_clothes) - //SKYRAT EDIT CHANGE BEGIN + //NOVA EDIT CHANGE BEGIN //. += mutable_appearance('icons/effects/item_damage.dmi', "damaged[blood_overlay_type]") //ORIGINAL - var/damagefile2use = (mutant_styles & STYLE_TAUR_ALL) ? 'modular_skyrat/master_files/icons/mob/64x32_item_damage.dmi' : 'icons/effects/item_damage.dmi' + var/damagefile2use = (mutant_styles & STYLE_TAUR_ALL) ? 'modular_nova/master_files/icons/mob/64x32_item_damage.dmi' : 'icons/effects/item_damage.dmi' . += mutable_appearance(damagefile2use, "damaged[blood_overlay_type]") - //SKYRAT EDIT CHANGE END + //NOVA EDIT CHANGE END if(GET_ATOM_BLOOD_DNA_LENGTH(src)) - //SKYRAT EDIT CHANGE BEGIN + //NOVA EDIT CHANGE BEGIN //. += mutable_appearance('icons/effects/blood.dmi', "[blood_overlay_type]blood") //ORIGINAL - var/bloodfile2use = (mutant_styles & STYLE_TAUR_ALL) ? 'modular_skyrat/master_files/icons/mob/64x32_blood.dmi' : 'icons/effects/blood.dmi' + var/bloodfile2use = (mutant_styles & STYLE_TAUR_ALL) ? 'modular_nova/master_files/icons/mob/64x32_blood.dmi' : 'icons/effects/blood.dmi' . += mutable_appearance(bloodfile2use, "[blood_overlay_type]blood") - //SKYRAT EDIT CHANGE END + //NOVA EDIT CHANGE END var/mob/living/carbon/human/wearer = loc if(!ishuman(wearer) || !wearer.w_uniform) @@ -51,19 +44,10 @@ var/obj/item/clothing/accessory/displayed = undershirt.attached_accessories[1] if(displayed.above_suit) - . += undershirt.modify_accessory_overlay() // SKYRAT EDIT CHANGE - ORIGINAL: . += undershirt.accessory_overlay + . += undershirt.modify_accessory_overlay() // NOVA EDIT CHANGE - ORIGINAL: . += undershirt.accessory_overlay /obj/item/clothing/suit/update_clothes_damaged_state(damaged_state = CLOTHING_DAMAGED) ..() if(ismob(loc)) var/mob/M = loc M.update_worn_oversuit() - -/** - * Wrapper proc to apply shielding through AddComponent(). - * Called in /obj/item/clothing/Initialize(). - * Override with an AddComponent(/datum/component/shielded, args) call containing the desired shield statistics. - * See /datum/component/shielded documentation for a description of the arguments - **/ -/obj/item/clothing/suit/proc/setup_shielding() - return diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index e2af151e49dc6d..e968fd201476a9 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -192,7 +192,7 @@ strip_delay = 70 resistance_flags = FLAMMABLE dog_fashion = null - //SKYRAT EDIT ADDITION START + //NOVA EDIT ADDITION START uses_advanced_reskins = TRUE unique_reskin = list( "Basic Warden Armor" = list( @@ -202,26 +202,53 @@ RESKIN_WORN_ICON_STATE = "warden_alt" ), "Standard" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi', + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi', RESKIN_ICON_STATE = "vest_warden", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi', + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi', RESKIN_WORN_ICON_STATE = "vest_warden", ), "Peacekeeper" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi', + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi', RESKIN_ICON_STATE = "peacekeeper_trench_warden", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi', + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi', RESKIN_WORN_ICON_STATE = "peacekeeper_trench_warden", RESKIN_SUPPORTS_VARIATIONS_FLAGS = NONE ) ) - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END /obj/item/clothing/suit/armor/vest/warden/alt name = "warden's armored jacket" desc = "A red jacket with silver rank pips and body armor strapped on top." icon_state = "warden_jacket" +/obj/item/clothing/suit/armor/vest/secjacket + name = "security jacket" + desc = "A red jacket in red Security colors. It has hi-vis stripes all over it." + icon_state = "secjacket" + inhand_icon_state = "armor" + armor_type = /datum/armor/armor_secjacket + body_parts_covered = CHEST|GROIN|ARMS + cold_protection = CHEST|GROIN|ARMS|HANDS + heat_protection = CHEST|GROIN|ARMS|HANDS + resistance_flags = FLAMMABLE + dog_fashion = null + +/obj/item/clothing/suit/armor/vest/secjacket/worn_overlays(mutable_appearance/standing, isinhands, icon_file) + . = ..() + if(!isinhands) + . += emissive_appearance(icon_file, "[icon_state]-emissive", src, alpha = src.alpha) + +/datum/armor/armor_secjacket //Gotta compensate those extra covered limbs + melee = 25 + bullet = 25 + laser = 25 + energy = 35 + bomb = 20 + fire = 30 + acid = 30 + wound = 5 + /obj/item/clothing/suit/armor/vest/leather name = "security overcoat" desc = "Lightly armored leather overcoat meant as casual wear for high-ranking officers. Bears the crest of Nanotrasen Security." @@ -369,13 +396,14 @@ /obj/item/clothing/suit/armor/swat name = "MK.I SWAT Suit" - desc = "A tactical suit first developed in a joint effort by the defunct IS-ERI and Nanotrasen in 2321 for military operations. It has a minor slowdown, but offers decent protection." + desc = "A tactical suit first developed in a joint effort by the defunct IS-ERI and Nanotrasen in 2321 for military operations. \ + It has a minor slowdown, but offers decent protection and helps the wearer resist shoving in close quarters." icon_state = "heavy" inhand_icon_state = "swat_suit" armor_type = /datum/armor/armor_swat strip_delay = 120 resistance_flags = FIRE_PROOF | ACID_PROOF - clothing_flags = THICKMATERIAL + clothing_flags = BLOCKS_SHOVE_KNOCKDOWN | THICKMATERIAL cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT_OFF heat_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index d82dd048e72687..8eba960cbe22ed 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -37,7 +37,7 @@ slowdown = 0.5 allowed = list(/obj/item/tank/internals, /obj/item/reagent_containers/dropper, /obj/item/flashlight/pen, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/cup/beaker, /obj/item/gun/syringe) armor_type = /datum/armor/suit_bio_suit - flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL // SKYRAT EDIT ADDITION - HIDETAIL + flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL // NOVA EDIT ADDITION - HIDETAIL strip_delay = 70 equip_delay_other = 70 resistance_flags = ACID_PROOF diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm index 5d31ee29e4adf9..264da83ac705f6 100644 --- a/code/modules/clothing/suits/cloaks.dm +++ b/code/modules/clothing/suits/cloaks.dm @@ -82,7 +82,7 @@ /obj/item/clothing/neck/cloak/skill_reward/playing name = "legendary veteran's cloak" - desc = "Worn by the wisest of veteran employees, this legendary cloak is only attainable by maintaining a living employment agreement with Nanotrasen for over five thousand hours. This status symbol represents a being is better than you in nearly every quantifiable way, simple as that." + desc = "Worn by the wisest of veteran employees, this legendary cloak is only attainable by maintaining a living employment agreement with Symphionia for over five thousand hours. This status symbol represents a being is better than you in nearly every quantifiable way, simple as that." icon_state = "playercloak" element_type = /datum/element/skill_reward/veteran diff --git a/code/modules/clothing/suits/costume.dm b/code/modules/clothing/suits/costume.dm index 49cb7ffb174286..978f773fd8cc5b 100644 --- a/code/modules/clothing/suits/costume.dm +++ b/code/modules/clothing/suits/costume.dm @@ -52,7 +52,7 @@ icon_state = "death" inhand_icon_state = null body_parts_covered = CHEST|GROIN|ARMS|LEGS|FEET - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY fire_resist = T0C+5200 flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT @@ -89,7 +89,7 @@ worn_icon = 'icons/mob/clothing/suits/spacesuit.dmi' inhand_icon_state = "syndicate-black-red" body_parts_covered = CHEST|GROIN|ARMS|LEGS|FEET - desc = "A plastic replica of the Syndicate space suit. You'll look just like a real murderous Syndicate agent in this! This is a toy, it is not made for use in space!" + desc = "A plastic replica of the Symphionia space suit. You'll look just like a real murderous Symphionia agent in this! This is a toy, it is not made for use in space!" w_class = WEIGHT_CLASS_NORMAL allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL // SYKRAT EDIT ADDITION - HIDETAIL @@ -262,7 +262,7 @@ inhand_icon_state = "space_suit_syndicate" armor_type = /datum/armor/carp_costume_spaceproof allowed = list(/obj/item/tank/internals, /obj/item/gun/ballistic/rifle/boltaction/harpoon) //I'm giving you a hint here - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL // SKYRAT EDIT ADDITION - HIDETAIL + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL // NOVA EDIT ADDITION - HIDETAIL cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS diff --git a/code/modules/clothing/suits/jacket.dm b/code/modules/clothing/suits/jacket.dm index 6db889032c064d..34366a50d714d2 100644 --- a/code/modules/clothing/suits/jacket.dm +++ b/code/modules/clothing/suits/jacket.dm @@ -121,7 +121,7 @@ /obj/item/clothing/suit/jacket/letterman_nanotrasen name = "blue letterman jacket" - desc = "A blue letterman jacket with a proud Nanotrasen N on the back. The tag says that it was made in Space China." + desc = "A blue letterman jacket with a proud Symphionia N on the back. The tag says that it was made in Space China." icon_state = "letterman_n" inhand_icon_state = null species_exception = list(/datum/species/golem) diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 3ed9be8cb1da32..b63bb493e589a7 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -144,6 +144,12 @@ icon_state = "detsuit" inhand_icon_state = null +/obj/item/clothing/suit/jacket/det_suit/brown + name = "brown suit jacket" + desc = "A suit jacket perfect for dinner dates and criminal investigations." + icon_state = "detsuit_brown" + inhand_icon_state = null + /obj/item/clothing/suit/jacket/det_suit/kim name = "aerostatic bomber jacket" desc = "A jacket once worn by the revolutionary air brigades during the Antecentennial Revolution. There are quite a few pockets on the inside, mostly for storing notebooks and compasses." diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 7a3e155d6f8cdd..49c6021a7c7950 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -47,8 +47,8 @@ . = ..() allowed += list( /obj/item/melee/baton/telescopic, - /obj/item/gun/energy/cell_loaded/medigun, //SKYRAT EDIT ADDITION - MEDIGUNS - /obj/item/storage/medkit, //SKYRAT EDIT ADDITION + /obj/item/gun/energy/cell_loaded/medigun, //NOVA EDIT ADDITION - MEDIGUNS + /obj/item/storage/medkit, //NOVA EDIT ADDITION ) /obj/item/clothing/suit/toggle/labcoat/paramedic @@ -57,13 +57,13 @@ icon_state = "labcoat_paramedic" inhand_icon_state = null -//START SKYRAT EDIT ADDITION +//START NOVA EDIT ADDITION /obj/item/clothing/suit/toggle/labcoat/paramedic/Initialize(mapload) . = ..() allowed += list( /obj/item/storage/medkit, ) -//END SKYRAT EDIT +//END NOVA EDIT /obj/item/clothing/suit/toggle/labcoat/mad name = "\proper The Mad's labcoat" @@ -74,12 +74,18 @@ /obj/item/clothing/suit/toggle/labcoat/genetics name = "geneticist labcoat" desc = "A suit that protects against minor chemical spills. Has a blue stripe on the shoulder." - icon_state = "labcoat_gen" + icon_state = "labcoat_job" + greyscale_config = /datum/greyscale_config/labcoat + greyscale_config_worn = /datum/greyscale_config/labcoat/worn + greyscale_colors = "#EEEEEE#4A77A1#4A77A1#7095C2" /obj/item/clothing/suit/toggle/labcoat/chemist name = "chemist labcoat" desc = "A suit that protects against minor chemical spills. Has an orange stripe on the shoulder." - icon_state = "labcoat_chem" + icon_state = "labcoat_job" + greyscale_config = /datum/greyscale_config/labcoat + greyscale_config_worn = /datum/greyscale_config/labcoat/worn + greyscale_colors = "#EEEEEE#F17420#F17420#EB6F2C" /obj/item/clothing/suit/toggle/labcoat/chemist/Initialize(mapload) . = ..() @@ -88,7 +94,10 @@ /obj/item/clothing/suit/toggle/labcoat/virologist name = "virologist labcoat" desc = "A suit that protects against minor chemical spills. Has a green stripe on the shoulder." - icon_state = "labcoat_vir" + icon_state = "labcoat_job" + greyscale_config = /datum/greyscale_config/labcoat + greyscale_config_worn = /datum/greyscale_config/labcoat/worn + greyscale_colors = "#EEEEEE#198019#198019#40992E" /obj/item/clothing/suit/toggle/labcoat/virologist/Initialize(mapload) . = ..() @@ -97,7 +106,10 @@ /obj/item/clothing/suit/toggle/labcoat/coroner name = "coroner labcoat" desc = "A suit that protects against minor chemical spills. Has a black stripe on the shoulder." - icon_state = "labcoat_coroner" + icon_state = "labcoat_job" + greyscale_config = /datum/greyscale_config/labcoat + greyscale_config_worn = /datum/greyscale_config/labcoat/worn + greyscale_colors = "#EEEEEE#2D2D33#2D2D33#39393F" /obj/item/clothing/suit/toggle/labcoat/coroner/Initialize(mapload) . = ..() @@ -109,7 +121,10 @@ /obj/item/clothing/suit/toggle/labcoat/science name = "scientist labcoat" desc = "A suit that protects against minor chemical spills. Has a purple stripe on the shoulder." - icon_state = "labcoat_sci" + icon_state = "labcoat_job" + greyscale_config = /datum/greyscale_config/labcoat + greyscale_config_worn = /datum/greyscale_config/labcoat/worn + greyscale_colors = "#EEEEEE#7E1980#7E1980#B347A1" /obj/item/clothing/suit/toggle/labcoat/science/Initialize(mapload) . = ..() @@ -118,9 +133,15 @@ /obj/item/clothing/suit/toggle/labcoat/roboticist name = "roboticist labcoat" desc = "More like an eccentric coat than a labcoat. Helps pass off bloodstains as part of the aesthetic. Comes with red shoulder pads." - icon_state = "labcoat_robo" + icon_state = "labcoat_job" + greyscale_config = /datum/greyscale_config/labcoat + greyscale_config_worn = /datum/greyscale_config/labcoat/worn + greyscale_colors = "#EEEEEE#88242D#88242D#39393F" /obj/item/clothing/suit/toggle/labcoat/interdyne name = "interdyne labcoat" desc = "More like an eccentric coat than a labcoat. Helps pass off bloodstains as part of the aesthetic. Comes with red shoulder pads." - icon_state = "labcoat_robo" + icon_state = "labcoat_job" + greyscale_config = /datum/greyscale_config/labcoat + greyscale_config_worn = /datum/greyscale_config/labcoat/worn + greyscale_colors = "#EEEEEE#88242D#88242D#39393F" diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index bbd880f5466669..10facb47432f96 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -29,7 +29,7 @@ ) slowdown = 1 armor_type = /datum/armor/utility_fire - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL // SKYRAT EDIT ADDITION - HIDETAIL + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL // NOVA EDIT ADDITION - HIDETAIL clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT @@ -118,7 +118,7 @@ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS slowdown = 2 armor_type = /datum/armor/utility_bomb_suit - flags_inv = HIDEJUMPSUIT|HIDETAIL // SKYRAT EDIT ADDITION - HIDETAIL + flags_inv = HIDEJUMPSUIT|HIDETAIL // NOVA EDIT ADDITION - HIDETAIL heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS @@ -195,7 +195,7 @@ armor_type = /datum/armor/utility_radiation strip_delay = 60 equip_delay_other = 60 - flags_inv = HIDEJUMPSUIT|HIDETAIL // SKYRAT EDIT ADDITION - HIDETAIL + flags_inv = HIDEJUMPSUIT|HIDETAIL // NOVA EDIT ADDITION - HIDETAIL resistance_flags = NONE /obj/item/clothing/suit/utility/radiation/Initialize(mapload) diff --git a/code/modules/clothing/suits/wintercoats.dm b/code/modules/clothing/suits/wintercoats.dm index 283878339fe323..5ff2e06a9877d3 100644 --- a/code/modules/clothing/suits/wintercoats.dm +++ b/code/modules/clothing/suits/wintercoats.dm @@ -125,7 +125,7 @@ /obj/item/clothing/suit/hooded/wintercoat/centcom name = "centcom winter coat" - desc = "A luxurious winter coat woven in the bright green and gold colours of Central Command. It has a small pin in the shape of the Nanotrasen logo for a zipper." + desc = "A luxurious winter coat woven in the bright green and gold colours of Conglomeration of Colonists. It has a small pin in the shape of the Symphionia logo for a zipper." icon_state = "coatcentcom" inhand_icon_state = null armor_type = /datum/armor/wintercoat_centcom @@ -352,7 +352,7 @@ . = ..() allowed += list( /obj/item/melee/baton/telescopic, - /obj/item/gun/energy/cell_loaded/medigun, //SKYRAT EDIT MEDIGUNS + /obj/item/gun/energy/cell_loaded/medigun, //NOVA EDIT MEDIGUNS ) /obj/item/clothing/head/hooded/winterhood/medical/cmo diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 4f4111a0eb4695..008c99e9e5fdfc 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -89,7 +89,7 @@ if(GET_ATOM_BLOOD_DNA_LENGTH(src)) . += mutable_appearance('icons/effects/blood.dmi', "uniformblood") if(accessory_overlay) - . += modify_accessory_overlay() // SKYRAT EDIT CHANGE - ORIGINAL: . += accessory_overlay + . += modify_accessory_overlay() // NOVA EDIT CHANGE - ORIGINAL: . += accessory_overlay /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)) @@ -149,13 +149,13 @@ if(adjusted == ALT_STYLE) adjust_to_normal() - /* SKYRAT EDIT REMOVAL - This breaks jumpsuit adjustment. Plus, we don't support it. + /* NOVA EDIT REMOVAL - This breaks jumpsuit adjustment. Plus, we don't support it. if((supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION) && ishuman(user)) var/mob/living/carbon/human/wearer = user if(wearer.bodytype & BODYTYPE_DIGITIGRADE) adjusted = DIGITIGRADE_STYLE update_appearance() - */ // SKYRAT EDIT END + */ // NOVA EDIT END /obj/item/clothing/under/equipped(mob/living/user, slot) ..() diff --git a/code/modules/clothing/under/accessories/badges.dm b/code/modules/clothing/under/accessories/badges.dm index 01c9b348df6320..e153474e9d21d9 100644 --- a/code/modules/clothing/under/accessories/badges.dm +++ b/code/modules/clothing/under/accessories/badges.dm @@ -8,7 +8,7 @@ . = ..() 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.")) + user.point_at(src) /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)) @@ -119,6 +119,7 @@ name = "Dogtag" desc = "Can't wear a collar, but this is fine?" icon_state = "allergy" + w_class = WEIGHT_CLASS_TINY 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!" @@ -170,7 +171,7 @@ else display = span_notice("The dogtag is all scratched up.") -/* MODULAR SKYRAT - OVERRIDDEN IN (\modular_skyrat\modules\customization\modules\clothing\under\accessories.dm) +/* MODULAR SKYRAT - OVERRIDDEN IN (\modular_nova\modules\customization\modules\clothing\under\accessories.dm) /// Reskins for the pride pin accessory, mapped by display name to icon state GLOBAL_LIST_INIT(pride_pin_reskins, list( "Rainbow Pride" = "pride", @@ -186,10 +187,9 @@ GLOBAL_LIST_INIT(pride_pin_reskins, list( /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!" + desc = "A Symphionia 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_flags = UNIQUE_RENAME | INFINITE_RESKIN /obj/item/clothing/accessory/pride/Initialize(mapload) . = ..() @@ -205,3 +205,36 @@ GLOBAL_LIST_INIT(pride_pin_reskins, list( name = "debt payer pin" desc = "I've paid my debt and all I've got was this pin." icon_state = "debt_payer_pin" + +/// Self-identify as a dangerous subversive +/obj/item/clothing/accessory/anti_sec_pin + name = "subversive pin" + desc = "A badge which loudly and proudly proclaims your hostility to the Nanotrasen Security Team, and authority in general." + icon_state = "anti_sec" + +/obj/item/clothing/accessory/anti_sec_pin/Initialize(mapload) + . = ..() + AddComponent(/datum/component/pinnable_accessory, silent = TRUE, pinning_time = 5 SECONDS) + +/obj/item/clothing/accessory/anti_sec_pin/attach(obj/item/clothing/under/attach_to, mob/living/attacher) + . = ..() + if (!.) + return FALSE + + var/target = ishuman(attach_to.loc) ? attach_to.loc : attach_to + log_combat(attacher, target, "pinned an 'arrest me immediately' pin onto", src) + return TRUE + +/obj/item/clothing/accessory/anti_sec_pin/accessory_equipped(obj/item/clothing/under/clothes, mob/living/user) + . = ..() + ADD_TRAIT(user, TRAIT_ALWAYS_WANTED, "[CLOTHING_TRAIT]_[REF(src)]") + if (ishuman(user)) + var/mob/living/carbon/human/human_wearer = user + human_wearer.sec_hud_set_security_status() + +/obj/item/clothing/accessory/anti_sec_pin/accessory_dropped(obj/item/clothing/under/clothes, mob/living/user) + . = ..() + REMOVE_TRAIT(user, TRAIT_ALWAYS_WANTED, "[CLOTHING_TRAIT]_[REF(src)]") + if (ishuman(user)) + var/mob/living/carbon/human/human_wearer = user + human_wearer.sec_hud_set_security_status() diff --git a/code/modules/clothing/under/accessories/medals.dm b/code/modules/clothing/under/accessories/medals.dm index cc91e286e2c808..be47784d6b285a 100644 --- a/code/modules/clothing/under/accessories/medals.dm +++ b/code/modules/clothing/under/accessories/medals.dm @@ -13,58 +13,14 @@ /// Who gave out this medal var/awarder -/// Callback for do_after to check if we can still be pinned -/obj/item/clothing/accessory/medal/proc/pin_checks(mob/living/pinner, mob/living/carbon/human/pinning_on) - if(QDELETED(src) || QDELETED(pinner) || QDELETED(pinning_on)) - return FALSE - if(!pinner.is_holding(src) || !pinner.Adjacent(pinning_on)) - return FALSE - var/obj/item/clothing/under/pinning_on_uniform = pinning_on.w_uniform - if(!istype(pinning_on_uniform) || !can_attach_accessory(pinning_on_uniform, pinner)) - return FALSE - return TRUE - -/obj/item/clothing/accessory/medal/pre_attack(atom/target, mob/living/user, params) +/obj/item/clothing/accessory/medal/Initialize(mapload) . = ..() - if(.) - return - if(!ishuman(target) || target == user) - return - - . = TRUE // no attack chain please - - var/mob/living/carbon/human/distinguished = target - var/obj/item/clothing/under/distinguished_uniform = distinguished.w_uniform - if(!istype(distinguished_uniform)) - distinguished.balloon_alert(user, "no uniform to pin on!") - return . - if(!can_attach_accessory(distinguished_uniform, user)) - // Check handles feedback messages and etc - return . - - user.visible_message( - span_notice("[user] tries to pin [src] on [distinguished]'s chest."), - span_notice("You try to pin [src] on [distinguished]'s chest."), - ) + AddComponent(/datum/component/pinnable_accessory, on_pre_pin = CALLBACK(src, PROC_REF(provide_reason))) +/// Input a reason for the medal for the round end screen +/obj/item/clothing/accessory/medal/proc/provide_reason(mob/living/carbon/human/distinguished, mob/user) commendation_message = tgui_input_text(user, "Reason for this commendation? It will be recorded by Nanotrasen.", "Commendation", max_length = 140) - if(!commendation_message || !pin_checks(user, distinguished)) - return . - if(!do_after(user, 2 SECONDS, distinguished, extra_checks = CALLBACK(src, PROC_REF(pin_checks), user, distinguished))) - return . - - if(distinguished_uniform.attach_accessory(src, user)) - user.visible_message( - span_notice("[user] pins [src] on [distinguished]'s chest."), - span_notice("You pin [src] on [distinguished]'s chest."), - ) - else - user.visible_message( - span_warning("[user] fails to pin [src] on [distinguished]'s chest, seemingly unable to part with it."), - span_warning("You fail to pin [src] on [distinguished]'s chest."), - ) - - return . + return !!commendation_message /obj/item/clothing/accessory/medal/attach(obj/item/clothing/under/attach_to, mob/living/attacher) var/mob/living/distinguished = attach_to.loc diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index b548aee70975d3..28348e52b4cf04 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -7,7 +7,7 @@ greyscale_config_worn = /datum/greyscale_config/jumpsuit/worn greyscale_config_inhand_left = /datum/greyscale_config/jumpsuit/inhand_left greyscale_config_inhand_right = /datum/greyscale_config/jumpsuit/inhand_right - greyscale_config_worn_digi = /datum/greyscale_config/jumpsuit/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale + greyscale_config_worn_digi = /datum/greyscale_config/jumpsuit/worn/digi //NOVA EDIT ADDITION - DigiGreyscale icon = 'icons/obj/clothing/under/color.dmi' icon_state = "jumpsuit" inhand_icon_state = "jumpsuit" @@ -21,7 +21,7 @@ female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY icon_state = "jumpskirt" supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - greyscale_config_worn_digi = null //SKYRAT EDIT ADDITION - DigiGreyscale + greyscale_config_worn_digi = null //NOVA EDIT ADDITION - DigiGreyscale /// Returns a random, acceptable jumpsuit typepath /proc/get_random_jumpsuit() @@ -39,7 +39,7 @@ /obj/item/clothing/under/color/random/Initialize(mapload) ..() - var/obj/item/clothing/under/color/C = get_random_variant() // SKYRAT EDIT CHANGE - use local proc that handles prefs + var/obj/item/clothing/under/color/C = get_random_variant() // NOVA EDIT CHANGE - use local proc that handles prefs if(ishuman(loc)) var/mob/living/carbon/human/H = loc H.equip_to_slot_or_del(new C(H), ITEM_SLOT_ICLOTHING, initial=TRUE) //or else you end up with naked assistants running around everywhere... diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm index c7be95178e4d14..4e648a040d68a8 100644 --- a/code/modules/clothing/under/costume.dm +++ b/code/modules/clothing/under/costume.dm @@ -274,7 +274,7 @@ icon_state = "buttondown_slacks" greyscale_config = /datum/greyscale_config/buttondown_slacks greyscale_config_worn = /datum/greyscale_config/buttondown_slacks/worn - greyscale_config_worn_digi = /datum/greyscale_config/buttondown_slacks/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale + greyscale_config_worn_digi = /datum/greyscale_config/buttondown_slacks/worn/digi //NOVA EDIT ADDITION - DigiGreyscale greyscale_colors = "#EEEEEE#EE8E2E#222227#D8D39C" flags_1 = IS_PLAYER_COLORABLE_1 @@ -287,7 +287,7 @@ icon_state = "buttondown_shorts" greyscale_config = /datum/greyscale_config/buttondown_shorts greyscale_config_worn = /datum/greyscale_config/buttondown_shorts/worn - greyscale_config_worn_digi = /datum/greyscale_config/buttondown_shorts/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale + greyscale_config_worn_digi = /datum/greyscale_config/buttondown_shorts/worn/digi //NOVA EDIT ADDITION - DigiGreyscale greyscale_colors = "#EEEEEE#EE8E2E#222227#D8D39C" flags_1 = IS_PLAYER_COLORABLE_1 @@ -325,7 +325,7 @@ can_adjust = FALSE greyscale_config = /datum/greyscale_config/football_suit greyscale_config_worn = /datum/greyscale_config/football_suit/worn - greyscale_config_worn_digi = /datum/greyscale_config/football_suit/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale + greyscale_config_worn_digi = /datum/greyscale_config/football_suit/worn/digi //NOVA EDIT ADDITION - DigiGreyscale greyscale_colors = "#D74722" flags_1 = IS_PLAYER_COLORABLE_1 diff --git a/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm b/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm index a8674b03c943a2..48f844cca602d8 100644 --- a/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm +++ b/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm @@ -52,7 +52,7 @@ name = "envirosuit extinguisher cartridge" desc = "A cartridge loaded with a compressed extinguisher mix, used to refill the automatic extinguisher on plasma envirosuits." icon_state = "plasmarefill" - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/canisters.dmi' /obj/item/clothing/under/plasmaman/cargo @@ -75,7 +75,7 @@ /obj/item/clothing/under/plasmaman/enviroslacks name = "enviroslacks" - desc = "The pet project of a particularly posh plasmaman, this custom suit was quickly appropriated by Nanotrasen for its lawyers, and bartenders alike." + desc = "The pet project of a particularly posh plasmaman, this custom suit was quickly appropriated by Symphionia for its lawyers, and bartenders alike." icon_state = "enviroslacks" inhand_icon_state = null @@ -87,7 +87,7 @@ /obj/item/clothing/under/plasmaman/curator name = "curator's plasma envirosuit" - desc = "Made out of a modified voidsuit, this suit was Nanotrasen's first solution to the *logistical problems* that come with employing plasmamen. Due to the modifications, the suit is no longer space-worthy. Despite their limitations, these suits are still in used by historian and old-styled plasmamen alike." + desc = "Made out of a modified voidsuit, this suit was Symphionia's first solution to the *logistical problems* that come with employing plasmamen. Due to the modifications, the suit is no longer space-worthy. Despite their limitations, these suits are still in used by historian and old-styled plasmamen alike." icon_state = "prototype_envirosuit" inhand_icon_state = null diff --git a/code/modules/clothing/under/jobs/Plasmaman/security.dm b/code/modules/clothing/under/jobs/Plasmaman/security.dm index 375320b39ddf70..9939afd721965e 100644 --- a/code/modules/clothing/under/jobs/Plasmaman/security.dm +++ b/code/modules/clothing/under/jobs/Plasmaman/security.dm @@ -14,7 +14,7 @@ /obj/item/clothing/under/plasmaman/security/detective name = "detective plasma envirosuit" - desc = "The pet project of a particularly posh plasmaman, this custom suit was modified by Nanotrasen for its detectives." + desc = "The pet project of a particularly posh plasmaman, this custom suit was modified by Symphionia for its detectives." icon_state = "enviroslacks" inhand_icon_state = null diff --git a/code/modules/clothing/under/jobs/cargo.dm b/code/modules/clothing/under/jobs/cargo.dm index e3145fb740d71d..f6f1ac94cb81c5 100644 --- a/code/modules/clothing/under/jobs/cargo.dm +++ b/code/modules/clothing/under/jobs/cargo.dm @@ -15,6 +15,7 @@ inhand_icon_state = "lb_suit" body_parts_covered = CHEST|GROIN|ARMS dying_key = DYE_REGISTRY_JUMPSKIRT + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON /obj/item/clothing/under/rank/cargo/tech name = "cargo technician's uniform" diff --git a/code/modules/clothing/under/jobs/civilian/clown_mime.dm b/code/modules/clothing/under/jobs/civilian/clown_mime.dm index e726ba54689f42..a85488e4b64c18 100644 --- a/code/modules/clothing/under/jobs/civilian/clown_mime.dm +++ b/code/modules/clothing/under/jobs/civilian/clown_mime.dm @@ -32,14 +32,14 @@ female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY can_adjust = FALSE -//SKYRAT EDIT REMOVAL BEGIN +//NOVA EDIT REMOVAL BEGIN /* /obj/item/clothing/under/rank/civilian/clown/Initialize(mapload) . = ..() AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 50, falloff_exponent = 20) //die off quick please AddElement(/datum/element/swabable, CELL_LINE_TABLE_CLOWN, CELL_VIRUS_TABLE_GENERIC, rand(2,3), 0) */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END /obj/item/clothing/under/rank/civilian/clown/blue name = "blue clown suit" diff --git a/code/modules/clothing/under/jobs/rnd.dm b/code/modules/clothing/under/jobs/rnd.dm index dc5937e4e02520..9d8db839023a7b 100644 --- a/code/modules/clothing/under/jobs/rnd.dm +++ b/code/modules/clothing/under/jobs/rnd.dm @@ -55,7 +55,7 @@ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON /obj/item/clothing/under/rank/rnd/research_director/turtleneck - desc = "A Nanotrasen-purple turtleneck and black jeans, for a director with a superior sense of style." + desc = "A Symphionia-purple turtleneck and black jeans, for a director with a superior sense of style." name = "research director's turtleneck" icon_state = "rdturtle" inhand_icon_state = "p_suit" @@ -64,7 +64,7 @@ /obj/item/clothing/under/rank/rnd/research_director/turtleneck/skirt name = "research director's turtleneck skirt" - desc = "A Nanotrasen-purple turtleneck and a black skirt, for a director with a superior sense of style." + desc = "A Symphionia-purple turtleneck and a black skirt, for a director with a superior sense of style." icon_state = "rdturtle_skirt" body_parts_covered = CHEST|GROIN|ARMS dying_key = DYE_REGISTRY_JUMPSKIRT diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 63bf1c65847d57..bb421a6db0a7d8 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -25,13 +25,13 @@ /obj/item/clothing/under/rank/security/officer name = "security uniform" - desc = "A tactical security jumpsuit for officers complete with Nanotrasen belt buckle." + desc = "A tactical security jumpsuit for officers complete with Symphionia belt buckle." icon_state = "rsecurity" inhand_icon_state = "r_suit" /obj/item/clothing/under/rank/security/officer/grey name = "grey security jumpsuit" - desc = "A tactical relic of years past before Nanotrasen decided it was cheaper to dye the suits red instead of washing out the blood." + desc = "A tactical relic of years past before Symphionia decided it was cheaper to dye the suits red instead of washing out the blood." icon_state = "security" inhand_icon_state = "gy_suit" @@ -70,19 +70,19 @@ /obj/item/clothing/under/rank/security/warden name = "security suit" - desc = "A formal security suit for officers complete with Nanotrasen belt buckle." + desc = "A formal security suit for officers complete with Symphionia belt buckle." icon_state = "rwarden" inhand_icon_state = "r_suit" /obj/item/clothing/under/rank/security/warden/grey name = "grey security suit" - desc = "A formal relic of years past before Nanotrasen decided it was cheaper to dye the suits red instead of washing out the blood." + desc = "A formal relic of years past before Symphionia decided it was cheaper to dye the suits red instead of washing out the blood." icon_state = "warden" inhand_icon_state = "gy_suit" /obj/item/clothing/under/rank/security/warden/skirt name = "warden's suitskirt" - desc = "A formal security suitskirt for officers complete with Nanotrasen belt buckle." + desc = "A formal security suitskirt for officers complete with Symphionia belt buckle." icon_state = "rwarden_skirt" inhand_icon_state = "r_suit" body_parts_covered = CHEST|GROIN|ARMS @@ -229,7 +229,7 @@ /obj/item/clothing/under/rank/prisoner name = "prison jumpsuit" - desc = "Standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position." + desc = "Standardised Symphionia prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position." icon_state = "jumpsuit" icon_preview = 'icons/obj/fluff/previews.dmi' icon_state_preview = "prisonsuit" @@ -239,19 +239,19 @@ greyscale_config_worn = /datum/greyscale_config/jumpsuit/prison/worn greyscale_config_inhand_left = /datum/greyscale_config/jumpsuit/prison/inhand_left greyscale_config_inhand_right = /datum/greyscale_config/jumpsuit/prison/inhand_right - greyscale_config_worn_digi = /datum/greyscale_config/jumpsuit/prison/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale + greyscale_config_worn_digi = /datum/greyscale_config/jumpsuit/prison/worn/digi //NOVA EDIT ADDITION - DigiGreyscale has_sensor = LOCKED_SENSORS sensor_mode = SENSOR_COORDS random_sensor = FALSE /obj/item/clothing/under/rank/prisoner/nosensor - desc = "Standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"OFF\" position." + desc = "Standardised Symphionia prisoner-wear. Its suit sensors are stuck in the \"OFF\" position." has_sensor = NO_SENSORS sensor_mode = SENSOR_OFF /obj/item/clothing/under/rank/prisoner/skirt name = "prison jumpskirt" - desc = "Standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position." + desc = "Standardised Symphionia prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position." icon_state = "jumpskirt" icon_preview = 'icons/obj/fluff/previews.dmi' icon_state_preview = "prisonskirt" @@ -260,7 +260,7 @@ greyscale_config_worn = /datum/greyscale_config/jumpsuit/prison/worn greyscale_config_inhand_left = /datum/greyscale_config/jumpsuit/prison/inhand_left greyscale_config_inhand_right = /datum/greyscale_config/jumpsuit/prison/inhand_right - greyscale_config_worn_digi = null //SKYRAT EDIT ADDITION - DigiGreyscale + greyscale_config_worn_digi = null //NOVA EDIT ADDITION - DigiGreyscale body_parts_covered = CHEST|GROIN|ARMS dying_key = DYE_REGISTRY_JUMPSKIRT female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 8f1263fa3e2b21..547a718e0af28e 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -131,7 +131,7 @@ /obj/item/clothing/under/misc/syndicate_souvenir name = "syndicate souvenir tee" - desc = "I got kidnapped by a Syndicate operative and all I got was this lousy t-shirt!" + desc = "I got kidnapped by a Symphionia operative and all I got was this lousy t-shirt!" icon = 'icons/obj/clothing/under/syndicate_souvenir.dmi' worn_icon = 'icons/mob/clothing/under/syndicate_souvenir.dmi' icon_state = "syndicate_souvenir" diff --git a/code/modules/clothing/under/pants.dm b/code/modules/clothing/under/pants.dm index 66830455b2eefe..f433a98b03540c 100644 --- a/code/modules/clothing/under/pants.dm +++ b/code/modules/clothing/under/pants.dm @@ -14,7 +14,7 @@ icon_state = "slacks" greyscale_config = /datum/greyscale_config/slacks greyscale_config_worn = /datum/greyscale_config/slacks/worn - greyscale_config_worn_digi = /datum/greyscale_config/slacks/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale + greyscale_config_worn_digi = /datum/greyscale_config/slacks/worn/digi //NOVA EDIT ADDITION - DigiGreyscale greyscale_colors = "#575757#3E3E3E#75634F" flags_1 = IS_PLAYER_COLORABLE_1 @@ -24,7 +24,7 @@ icon_state = "jeans" greyscale_config = /datum/greyscale_config/jeans greyscale_config_worn = /datum/greyscale_config/jeans/worn - greyscale_config_worn_digi = /datum/greyscale_config/jeans/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale + greyscale_config_worn_digi = /datum/greyscale_config/jeans/worn/digi //NOVA EDIT ADDITION - DigiGreyscale greyscale_colors = "#787878#723E0E#4D7EAC" flags_1 = IS_PLAYER_COLORABLE_1 diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm index 2fd8a1136827b1..3697ae584dd060 100644 --- a/code/modules/clothing/under/shorts.dm +++ b/code/modules/clothing/under/shorts.dm @@ -4,7 +4,7 @@ icon_state = "shorts" greyscale_config = /datum/greyscale_config/shorts greyscale_config_worn = /datum/greyscale_config/shorts/worn - greyscale_config_worn_digi = /datum/greyscale_config/shorts/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale + greyscale_config_worn_digi = /datum/greyscale_config/shorts/worn/digi //NOVA EDIT ADDITION - DigiGreyscale greyscale_colors = "#575757#3E3E3E#75634F" gender = PLURAL body_parts_covered = GROIN @@ -20,7 +20,7 @@ icon_state = "jeanshorts" greyscale_config = /datum/greyscale_config/jeanshorts greyscale_config_worn = /datum/greyscale_config/jeanshorts/worn - greyscale_config_worn_digi = /datum/greyscale_config/jeanshorts/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale + greyscale_config_worn_digi = /datum/greyscale_config/jeanshorts/worn/digi //NOVA EDIT ADDITION - DigiGreyscale greyscale_colors = "#787878#723E0E#4D7EAC" /obj/item/clothing/under/shorts/red diff --git a/code/modules/clothing/under/skirt_dress.dm b/code/modules/clothing/under/skirt_dress.dm index 0b870156f47849..12a61ceaf9e61b 100644 --- a/code/modules/clothing/under/skirt_dress.dm +++ b/code/modules/clothing/under/skirt_dress.dm @@ -49,7 +49,7 @@ greyscale_colors = "#CC2102" greyscale_config = /datum/greyscale_config/plaidskirt greyscale_config_worn = /datum/greyscale_config/plaidskirt/worn - greyscale_config_worn_digi = /datum/greyscale_config/plaidskirt/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale + greyscale_config_worn_digi = /datum/greyscale_config/plaidskirt/worn/digi //NOVA EDIT ADDITION - DigiGreyscale flags_1 = IS_PLAYER_COLORABLE_1 /obj/item/clothing/under/dress/skirt/turtleskirt diff --git a/code/modules/clothing/under/trek.dm b/code/modules/clothing/under/trek.dm index d0cf3083b6fe6c..3de26404cd5f3f 100644 --- a/code/modules/clothing/under/trek.dm +++ b/code/modules/clothing/under/trek.dm @@ -15,7 +15,7 @@ inhand_icon_state = "y_suit" greyscale_config = /datum/greyscale_config/trek greyscale_config_worn = /datum/greyscale_config/trek/worn - greyscale_config_worn_digi = /datum/greyscale_config/trek/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale + greyscale_config_worn_digi = /datum/greyscale_config/trek/worn/digi //NOVA EDIT ADDITION - DigiGreyscale greyscale_colors = "#fab342" /obj/item/clothing/under/trek/engsec @@ -25,7 +25,7 @@ inhand_icon_state = "r_suit" greyscale_config = /datum/greyscale_config/trek greyscale_config_worn = /datum/greyscale_config/trek/worn - greyscale_config_worn_digi = /datum/greyscale_config/trek/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale + greyscale_config_worn_digi = /datum/greyscale_config/trek/worn/digi //NOVA EDIT ADDITION - DigiGreyscale greyscale_colors = "#B72B2F" /obj/item/clothing/under/trek/medsci @@ -35,7 +35,7 @@ inhand_icon_state = "b_suit" greyscale_config = /datum/greyscale_config/trek greyscale_config_worn = /datum/greyscale_config/trek/worn - greyscale_config_worn_digi = /datum/greyscale_config/trek/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale + greyscale_config_worn_digi = /datum/greyscale_config/trek/worn/digi //NOVA EDIT ADDITION - DigiGreyscale greyscale_colors = "#5FA4CC" /* @@ -68,7 +68,6 @@ /obj/item/clothing/under/trek/command/ent icon_state = "trek_ent" //Greyscale sprite note, the base of it can't be greyscaled lest I make a whole new .json, but the color bands are greyscale at least. - //I've left a greyscale version of it in color.dmi in case someone wants a pocketed-jumpsuit/'coveralls' without the color bands - Orion_the_Fox inhand_icon_state = "bl_suit" /obj/item/clothing/under/trek/engsec/ent diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index 63bab9afdd9323..6ce6b0e67a6a69 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -5,14 +5,14 @@ /obj/item/detective_scanner name = "forensic scanner" desc = "Used to remotely scan objects and biomass for DNA and fingerprints. Can print a report of the findings." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/scanner.dmi' icon_state = "forensicnew" w_class = WEIGHT_CLASS_SMALL inhand_icon_state = "electronic" worn_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = NOBLUDGEON slot_flags = ITEM_SLOT_BELT /// if the scanner is currently busy processing diff --git a/code/modules/economy/account.dm b/code/modules/economy/account.dm index b4703945092cc0..bb4378ed90c437 100644 --- a/code/modules/economy/account.dm +++ b/code/modules/economy/account.dm @@ -35,6 +35,8 @@ var/pay_token ///List with a transaction history for NT pay app var/list/transaction_history = list() + ///A lazylist of coupons redeemed with the Coupon Master pda app associated with this account. + var/list/redeemed_coupons /datum/bank_account/New(newname, job, modifier = 1, player_account = TRUE) account_holder = newname @@ -47,6 +49,7 @@ /datum/bank_account/Destroy() if(add_to_accounts) SSeconomy.bank_accounts_by_id -= "[account_id]" + QDEL_LIST(redeemed_coupons) return ..() /** @@ -83,7 +86,7 @@ else SSeconomy.bank_accounts_by_id -= "[account_id]" if(NAMEOF(src, account_balance)) - add_log_to_history(var_value - old_balance, "Nanotrasen: Moderator Action") + add_log_to_history(var_value - old_balance, "Symphionia: Moderator Action") /** * Sets the bank_account to behave as though a CRAB-17 event is happening. @@ -145,7 +148,7 @@ var/reason_from = "Transfer: To [account_holder]" if(IS_DEPARTMENTAL_ACCOUNT(from)) - reason_to = "Nanotrasen: Salary" + reason_to = "Symphionia: Salary" reason_from = "" if(transfer_reason) @@ -173,7 +176,7 @@ if(amount_of_paychecks == 1) money_to_transfer = clamp(money_to_transfer, 0, PAYCHECK_CREW) //We want to limit single, passive paychecks to regular crew income. if(free) - adjust_money(money_to_transfer, "Nanotrasen: Shift Payment") + adjust_money(money_to_transfer, "Symphionia: Shift Payment") SSblackbox.record_feedback("amount", "free_income", money_to_transfer) SSeconomy.station_target += money_to_transfer log_econ("[money_to_transfer] credits were given to [src.account_holder]'s account from income.") diff --git a/code/modules/emote_panel/emote_panel.dm b/code/modules/emote_panel/emote_panel.dm new file mode 100644 index 00000000000000..72caf05e92b27b --- /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/error_handler/error_handler.dm b/code/modules/error_handler/error_handler.dm index 1b3f6bca16d776..a6841d3975444c 100644 --- a/code/modules/error_handler/error_handler.dm +++ b/code/modules/error_handler/error_handler.dm @@ -26,6 +26,7 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0) Reboot(reason = 1) return + var/static/regex/stack_workaround = regex("[WORKAROUND_IDENTIFIER](.+?)[WORKAROUND_IDENTIFIER]") var/static/list/error_last_seen = list() var/static/list/error_cooldown = list() /* Error_cooldown items will either be positive(cooldown time) or negative(silenced error) If negative, starts at -1, and goes down by 1 each time that error gets skipped*/ @@ -33,6 +34,12 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0) if(!error_last_seen) // A runtime is occurring too early in start-up initialization return ..() + if(stack_workaround.Find(E.name)) + var/list/data = json_decode(stack_workaround.group[1]) + E.file = data[1] + E.line = data[2] + E.name = stack_workaround.Replace(E.name, "") + var/erroruid = "[E.file][E.line]" var/last_seen = error_last_seen[erroruid] var/cooldown = error_cooldown[erroruid] || 0 diff --git a/code/modules/error_handler/error_viewer.dm b/code/modules/error_handler/error_viewer.dm index ec24769124fc50..4b4abcd691a43e 100644 --- a/code/modules/error_handler/error_viewer.dm +++ b/code/modules/error_handler/error_viewer.dm @@ -86,7 +86,7 @@ GLOBAL_DATUM(error_cache, /datum/error_viewer/error_cache) var/datum/error_viewer/error_source/error_source for (var/erroruid in error_sources) error_source = error_sources[erroruid] - html += "[error_source.make_link(null, src)] x [error_source.errors.len]
" //SKYRAT EDIT - RUNTIME TRANSPARENCY + html += "[error_source.make_link(null, src)] x [error_source.errors.len]
" //NOVA EDIT - RUNTIME TRANSPARENCY else html += "[make_link("organized", null)] | linear
" diff --git a/code/modules/escape_menu/escape_menu.dm b/code/modules/escape_menu/escape_menu.dm index 3aa17832e3c679..c05f4057583e7e 100644 --- a/code/modules/escape_menu/escape_menu.dm +++ b/code/modules/escape_menu/escape_menu.dm @@ -50,7 +50,7 @@ GLOBAL_LIST_EMPTY(escape_menus) if (!isnull(ckey)) GLOB.escape_menus[ckey] = src -/datum/escape_menu/Destroy(force, ...) +/datum/escape_menu/Destroy(force) QDEL_NULL(base_holder) QDEL_NULL(page_holder) @@ -80,8 +80,8 @@ GLOBAL_LIST_EMPTY(escape_menus) switch (menu_page) if (PAGE_HOME) show_home_page() - //if (PAGE_LEAVE_BODY) //SKYRAT EDIT REMOVAL - //show_leave_body_page() //SKYRAT EDIT REMOVAL + //if (PAGE_LEAVE_BODY) //NOVA EDIT REMOVAL + //show_leave_body_page() //NOVA EDIT REMOVAL else CRASH("Unknown escape menu page: [menu_page]") diff --git a/code/modules/escape_menu/home_page.dm b/code/modules/escape_menu/home_page.dm index 6d48285ae77e0f..3d8cbb58652f48 100644 --- a/code/modules/escape_menu/home_page.dm +++ b/code/modules/escape_menu/home_page.dm @@ -30,7 +30,7 @@ /* offset = */ 2, ) ) - //SKYRAT EDIT REMOVAL BEGIN + //NOVA EDIT REMOVAL BEGIN /* page_holder.give_screen_object( new /atom/movable/screen/escape_menu/home_button/leave_body( @@ -43,7 +43,7 @@ ) ) */ - // SKYRAT EDIT REMOVAL END + // NOVA EDIT REMOVAL END /datum/escape_menu/proc/home_resume() qdel(src) diff --git a/code/modules/escape_menu/leave_body.dm b/code/modules/escape_menu/leave_body.dm index 14de01749bf40b..cb85860bd9dfdb 100644 --- a/code/modules/escape_menu/leave_body.dm +++ b/code/modules/escape_menu/leave_body.dm @@ -13,7 +13,7 @@ "Suicide", "Perform a dramatic suicide in game", /* pixel_offset = */ -105, - // CALLBACK(src, PROC_REF(leave_suicide)), // SKYRAT EDIT REMOVAL + // CALLBACK(src, PROC_REF(leave_suicide)), // NOVA EDIT REMOVAL /* button_overlay = */ dead_clown, )) @@ -64,7 +64,7 @@ var/mob/living/living_user = client?.mob living_user?.ghost() -//SKYRAT EDIT REMOVAL BEGIN +//NOVA EDIT REMOVAL BEGIN /* /datum/escape_menu/proc/leave_suicide() PRIVATE_PROC(TRUE) @@ -73,7 +73,7 @@ var/mob/living/carbon/human/human_user = client?.mob human_user?.suicide() */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END /atom/movable/screen/escape_menu/leave_body_button icon = 'icons/hud/escape_menu_leave_body.dmi' diff --git a/code/modules/escape_menu/readme.md b/code/modules/escape_menu/readme.md index c10aab5535af80..ec64cac9a342a6 100644 --- a/code/modules/escape_menu/readme.md +++ b/code/modules/escape_menu/readme.md @@ -1,2 +1,2 @@ -Skyrat Edit: +NOVA EDIT: leave_body.dm - removed suicide menu option diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm index bd192dbef22084..70aa98ab0ca6c7 100644 --- a/code/modules/events/_event.dm +++ b/code/modules/events/_event.dm @@ -1,4 +1,4 @@ -#define RANDOM_EVENT_ADMIN_INTERVENTION_TIME (3 MINUTES) //SKYRAT EDIT CHANGE +#define RANDOM_EVENT_ADMIN_INTERVENTION_TIME (3 MINUTES) //NOVA EDIT CHANGE //this singleton datum is used by the events controller to dictate how it selects events /datum/round_event_control @@ -87,8 +87,7 @@ if(ispath(typepath, /datum/round_event/ghost_role) && !(GLOB.ghost_role_flags & GHOSTROLE_MIDROUND_EVENT)) return FALSE - var/datum/game_mode/dynamic/dynamic = SSticker.mode - if (istype(dynamic) && dynamic_should_hijack && dynamic.random_event_hijacked != HIJACKED_NOTHING) + if (dynamic_should_hijack && SSdynamic.random_event_hijacked != HIJACKED_NOTHING) return FALSE return TRUE @@ -103,19 +102,19 @@ triggering = TRUE // We sleep HERE, in pre-event setup (because there's no sense doing it in run_event() since the event is already running!) for the given amount of time to make an admin has enough time to cancel an event un-fitting of the present round. - // SKYRAT EDIT REMOVAL BEGIN - Event notification + // NOVA EDIT REMOVAL BEGIN - Event notification /** if(alert_observers) - message_admins("Random Event triggering in [DisplayTimeText(RANDOM_EVENT_ADMIN_INTERVENTION_TIME)]: [name]. (CANCEL | SOMETHING ELSE)") //SKYRAT EDIT CHANGE + message_admins("Random Event triggering in [DisplayTimeText(RANDOM_EVENT_ADMIN_INTERVENTION_TIME)]: [name]. (CANCEL | SOMETHING ELSE)") //NOVA EDIT CHANGE sleep(RANDOM_EVENT_ADMIN_INTERVENTION_TIME) var/players_amt = get_active_player_count(alive_check = TRUE, afk_check = TRUE, human_check = TRUE) if(!can_spawn_event(players_amt)) message_admins("Second pre-condition check for [name] failed, skipping...") return EVENT_INTERRUPTED */ - // SKYRAT EDIT REMOVAL END - Event notification + // NOVA EDIT REMOVAL END - Event notification - // SKYRAT EDIT ADDITION BEGIN - Event notification + // NOVA EDIT ADDITION BEGIN - Event notification message_admins("Random Event triggering in [DisplayTimeText(RANDOM_EVENT_ADMIN_INTERVENTION_TIME)]: [name]. (\ CANCEL | \ SOMETHING ELSE)") @@ -129,7 +128,7 @@ CANCEL | \ SOMETHING ELSE)
") sleep(RANDOM_EVENT_ADMIN_INTERVENTION_TIME * 0.5) - // SKYRAT EDIT ADDITION END - Event notification + // NOVA EDIT ADDITION END - Event notification if(!triggering) return EVENT_CANCELLED //admin cancelled @@ -146,7 +145,7 @@ message_admins("[key_name_admin(usr)] cancelled event [name].") log_admin_private("[key_name(usr)] cancelled event [name].") SSblackbox.record_feedback("tally", "event_admin_cancelled", 1, typepath) - //SKYRAT EDIT ADDITION BEGIN + //NOVA EDIT ADDITION BEGIN if(href_list["something_else"]) if(!triggering) to_chat(usr, span_admin("Too late! The event is running.")) @@ -155,7 +154,7 @@ SSevents.spawnEvent(TRUE) message_admins("[key_name_admin(usr)] requested a new event be spawned instead of [name].") log_admin_private("[key_name(usr)] requested a new event be spawned instead of [name].") - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END /* Runs the event @@ -181,7 +180,7 @@ Runs the event round_event.current_players = get_active_player_count(alive_check = 1, afk_check = 1, human_check = 1) occurrences++ - SSevents.previously_run += src //SKYRAT EDIT ADDITION + SSevents.previously_run += src //NOVA EDIT ADDITION if(announce_chance_override != null) round_event.announce_chance = announce_chance_override @@ -261,7 +260,10 @@ Runs the event /datum/round_event/proc/announce_to_ghosts(atom/atom_of_interest) if(control.alert_observers) if (atom_of_interest) - notify_ghosts("[control.name] has an object of interest: [atom_of_interest]!", source=atom_of_interest, action=NOTIFY_ORBIT, header="Something's Interesting!") + notify_ghosts( + "[control.name] has an object of interest: [atom_of_interest]!", + source = atom_of_interest, + ) return //Called when the tick is equal to the announce_when variable. diff --git a/code/modules/events/anomaly/_anomaly.dm b/code/modules/events/anomaly/_anomaly.dm index a6c37c4931b51d..2b64ca9a3e671c 100644 --- a/code/modules/events/anomaly/_anomaly.dm +++ b/code/modules/events/anomaly/_anomaly.dm @@ -26,7 +26,9 @@ impact_area = placer.findValidArea() /datum/round_event/anomaly/announce(fake) - priority_announce("Energetic flux wave detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_ANOMALIES) //SKYRAT EDIT CHANGE + if(isnull(impact_area)) + impact_area = placer.findValidArea() + priority_announce("Energetic flux wave detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_ANOMALIES) //NOVA EDIT CHANGE - ORIGINAL: priority_announce("Energetic flux wave detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name].", "Anomaly Alert") /datum/round_event/anomaly/start() var/turf/anomaly_turf diff --git a/code/modules/events/anomaly/anomaly_bioscrambler.dm b/code/modules/events/anomaly/anomaly_bioscrambler.dm index f2c99221c8fdc9..ce12c4060c31e1 100644 --- a/code/modules/events/anomaly/anomaly_bioscrambler.dm +++ b/code/modules/events/anomaly/anomaly_bioscrambler.dm @@ -15,4 +15,6 @@ 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", ANNOUNCER_ANOMALIES) //SKYRAT EDIT CHANGE + if(isnull(impact_area)) + impact_area = placer.findValidArea() + 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", ANNOUNCER_ANOMALIES) //NOVA EDIT CHANGE - ORIGINAL: 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") diff --git a/code/modules/events/anomaly/anomaly_bluespace.dm b/code/modules/events/anomaly/anomaly_bluespace.dm index f5aa564b5216b2..e0821ff209b4f5 100644 --- a/code/modules/events/anomaly/anomaly_bluespace.dm +++ b/code/modules/events/anomaly/anomaly_bluespace.dm @@ -14,4 +14,6 @@ anomaly_path = /obj/effect/anomaly/bluespace /datum/round_event/anomaly/anomaly_bluespace/announce(fake) - priority_announce("Bluespace instability detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_MASSIVEBSPACEANOMALIES) //SKYRAT EDIT CHANGE + if(isnull(impact_area)) + impact_area = placer.findValidArea() + priority_announce("Bluespace instability detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_MASSIVEBSPACEANOMALIES) //NOVA EDIT CHANGE - ORIGINAL: priority_announce("Bluespace instability detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert") diff --git a/code/modules/events/anomaly/anomaly_dimensional.dm b/code/modules/events/anomaly/anomaly_dimensional.dm index 7bd3b56e118f94..85e35c3931eb29 100644 --- a/code/modules/events/anomaly/anomaly_dimensional.dm +++ b/code/modules/events/anomaly/anomaly_dimensional.dm @@ -23,7 +23,9 @@ new_anomaly.prepare_area(new_theme_path = anomaly_theme) /datum/round_event/anomaly/anomaly_dimensional/announce(fake) - priority_announce("Dimensional instability detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_ANOMALIES) //SKYRAT EDIT CHANGE + if(isnull(impact_area)) + impact_area = placer.findValidArea() + priority_announce("Dimensional instability detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_ANOMALIES) //NOVA EDIT CHANGE - ORIGINAL: priority_announce("Dimensional instability detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert") /datum/event_admin_setup/listed_options/anomaly_dimensional input_text = "Select a dimensional anomaly theme?" diff --git a/code/modules/events/anomaly/anomaly_ectoplasm.dm b/code/modules/events/anomaly/anomaly_ectoplasm.dm index e91ed5f593dace..d05335c172debf 100644 --- a/code/modules/events/anomaly/anomaly_ectoplasm.dm +++ b/code/modules/events/anomaly/anomaly_ectoplasm.dm @@ -39,7 +39,9 @@ announce_to_ghosts(newAnomaly) /datum/round_event/anomaly/anomaly_ectoplasm/announce(fake) - priority_announce("Paranormal ectoplasmic outburst detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_ANOMALIES) //SKYRAT EDIT CHANGE + if(isnull(impact_area)) + impact_area = placer.findValidArea() + priority_announce("Paranormal ectoplasmic outburst detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_ANOMALIES) //NOVA EDIT CHANGE - ORIGINAL: priority_announce("Paranormal ectoplasmic outburst detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert") /datum/event_admin_setup/anomaly_ectoplasm ///The admin-selected intensity diff --git a/code/modules/events/anomaly/anomaly_flux.dm b/code/modules/events/anomaly/anomaly_flux.dm index 0e333579901906..09f7a22c6df497 100644 --- a/code/modules/events/anomaly/anomaly_flux.dm +++ b/code/modules/events/anomaly/anomaly_flux.dm @@ -15,4 +15,6 @@ anomaly_path = /obj/effect/anomaly/flux /datum/round_event/anomaly/anomaly_flux/announce(fake) - priority_announce("Hyper-energetic flux wave detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_FLUXANOMALIES) //SKYRAT EDIT CHANGE + if(isnull(impact_area)) + impact_area = placer.findValidArea() + priority_announce("Hyper-energetic flux wave detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_FLUXANOMALIES) //NOVA EDIT CHANGE - ORIGINAL: priority_announce("Hyper-energetic flux wave detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name].", "Anomaly Alert") diff --git a/code/modules/events/anomaly/anomaly_grav.dm b/code/modules/events/anomaly/anomaly_grav.dm index e7db49aaf55447..5b721a7faebd4d 100644 --- a/code/modules/events/anomaly/anomaly_grav.dm +++ b/code/modules/events/anomaly/anomaly_grav.dm @@ -27,4 +27,6 @@ anomaly_path = /obj/effect/anomaly/grav/high /datum/round_event/anomaly/anomaly_grav/announce(fake) - priority_announce("Gravitational anomaly detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert" , ANNOUNCER_GRAVANOMALIES) //SKYRAT EDIT CHANGE + if(isnull(impact_area)) + impact_area = placer.findValidArea() + priority_announce("Gravitational anomaly detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert" , ANNOUNCER_GRAVANOMALIES) //NOVA EDIT CHANGE - ORIGINAL: priority_announce("Gravitational anomaly detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert" , ANNOUNCER_GRANOMALIES) diff --git a/code/modules/events/anomaly/anomaly_hallucination.dm b/code/modules/events/anomaly/anomaly_hallucination.dm index 599fbfd4a1894e..08296e85f97c52 100644 --- a/code/modules/events/anomaly/anomaly_hallucination.dm +++ b/code/modules/events/anomaly/anomaly_hallucination.dm @@ -15,4 +15,6 @@ anomaly_path = /obj/effect/anomaly/hallucination /datum/round_event/anomaly/anomaly_hallucination/announce(fake) - priority_announce("Hallucinatory event detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_ANOMALIES) //SKYRAT EDIT CHANGE + if(isnull(impact_area)) + impact_area = placer.findValidArea() + priority_announce("Hallucinatory event detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_ANOMALIES) //NOVA EDIT CHANGE - ORIGINAL: priority_announce("Hallucinatory event detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert") diff --git a/code/modules/events/anomaly/anomaly_pyro.dm b/code/modules/events/anomaly/anomaly_pyro.dm index ea4b57b0d2dfe6..14a3973225e40e 100644 --- a/code/modules/events/anomaly/anomaly_pyro.dm +++ b/code/modules/events/anomaly/anomaly_pyro.dm @@ -14,4 +14,6 @@ anomaly_path = /obj/effect/anomaly/pyro /datum/round_event/anomaly/anomaly_pyro/announce(fake) - priority_announce("Pyroclastic anomaly detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_PYROANOMALIES) //SKYRAT EDIT CHANGE + if(isnull(impact_area)) + impact_area = placer.findValidArea() + priority_announce("Pyroclastic anomaly detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_PYROANOMALIES) //NOVA EDIT CHANGE - ORIGINAL: priority_announce("Pyroclastic anomaly detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert") diff --git a/code/modules/events/anomaly/anomaly_vortex.dm b/code/modules/events/anomaly/anomaly_vortex.dm index 81a5f9ca26ed35..b2221f3ad8489a 100644 --- a/code/modules/events/anomaly/anomaly_vortex.dm +++ b/code/modules/events/anomaly/anomaly_vortex.dm @@ -15,4 +15,6 @@ anomaly_path = /obj/effect/anomaly/bhole /datum/round_event/anomaly/anomaly_vortex/announce(fake) - priority_announce("Localized high-intensity vortex anomaly detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name]", "Anomaly Alert", ANNOUNCER_VORTEXANOMALIES) //SKYRAT EDIT CHANGE + if(isnull(impact_area)) + impact_area = placer.findValidArea() + priority_announce("Localized high-intensity vortex anomaly detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name]", "Anomaly Alert", ANNOUNCER_VORTEXANOMALIES) //NOVA EDIT CHANGE - ORIGINAL: priority_announce("Localized high-intensity vortex anomaly detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name]", "Anomaly Alert") diff --git a/code/modules/events/aurora_caelus.dm b/code/modules/events/aurora_caelus.dm index 8efe01169ce26b..a562419487a745 100644 --- a/code/modules/events/aurora_caelus.dm +++ b/code/modules/events/aurora_caelus.dm @@ -18,9 +18,9 @@ end_when = 80 /datum/round_event/aurora_caelus/announce() - priority_announce("[station_name()]: A harmless cloud of ions is approaching your station, and will exhaust their energy battering the hull. Nanotrasen has approved a short break for all employees to relax and observe this very rare event. During this time, starlight will be bright but gentle, shifting between quiet green and blue colors. Any staff who would like to view these lights for themselves may proceed to the area nearest to them with viewing ports to open space. We hope you enjoy the lights.", + priority_announce("[station_name()]: A harmless cloud of ions is approaching your station, and will exhaust their energy battering the hull. Symphionia has approved a short break for all employees to relax and observe this very rare event. During this time, starlight will be bright but gentle, shifting between quiet green and blue colors. Any staff who would like to view these lights for themselves may proceed to the area nearest to them with viewing ports to open space. We hope you enjoy the lights.", sound = 'sound/misc/notice2.ogg', - sender_override = "Nanotrasen Meteorology Division") + sender_override = "Symphionia Meteorology Division") for(var/V in GLOB.player_list) var/mob/M = V if((M.client.prefs.read_preference(/datum/preference/toggle/sound_midi)) && is_station_level(M.z)) @@ -60,7 +60,7 @@ fade_kitchen() priority_announce("The aurora caelus event is now ending. Starlight conditions will slowly return to normal. When this has concluded, please return to your workplace and continue work as normal. Have a pleasant shift, [station_name()], and thank you for watching with us.", sound = 'sound/misc/notice2.ogg', - sender_override = "Nanotrasen Meteorology Division") + sender_override = "Symphionia Meteorology Division") /datum/round_event/aurora_caelus/proc/fade_space(fade_in = FALSE) set waitfor = FALSE diff --git a/code/modules/events/brain_trauma.dm b/code/modules/events/brain_trauma.dm index e063c89e152e32..5d6a5a7d520c84 100644 --- a/code/modules/events/brain_trauma.dm +++ b/code/modules/events/brain_trauma.dm @@ -21,10 +21,10 @@ continue if(!(H.mind.assigned_role.job_flags & JOB_CREW_MEMBER)) //please stop giving my centcom admin gimmicks full body paralysis continue - // SKYRAT EDIT ADD START - Station/area event candidate filtering + // NOVA EDIT ADD START - Station/area event candidate filtering if(engaged_role_play_check(H, station = TRUE, dorms = TRUE)) continue - // SKYRAT EDIT ADD END + // NOVA EDIT ADD END traumatize(H) announce_to_ghosts(H) break diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm index 9fbfa87390b132..83c0c834d85b60 100644 --- a/code/modules/events/brand_intelligence.dm +++ b/code/modules/events/brand_intelligence.dm @@ -48,7 +48,11 @@ origin_machine = pick_n_take(vending_machines) /datum/round_event/brand_intelligence/announce(fake) - priority_announce("Rampant brand intelligence has been detected aboard [station_name()]. Please inspect any [origin_machine] brand vendors for aggressive marketing tactics, and reboot them if necessary.", "Machine Learning Alert", ANNOUNCER_BRANDINTELLIGENCE) //SKYRAT EDIT CHANGE + var/machine_name = initial(origin_machine.name) + if(fake) + var/obj/machinery/vending/prototype = pick(subtypesof(/obj/machinery/vending)) + machine_name = initial(prototype.name) + priority_announce("Rampant brand intelligence has been detected aboard [station_name()]. Please inspect any [machine_name] brand vendors for aggressive marketing tactics, and reboot them if necessary.", "Machine Learning Alert", ANNOUNCER_BRANDINTELLIGENCE) //NOVA EDIT CHANGE - ORIGINAL: priority_announce("Rampant brand intelligence has been detected aboard [station_name()]. Please inspect any [machine_name] brand vendors for aggressive marketing tactics, and reboot them if necessary.", "Machine Learning Alert") /datum/round_event/brand_intelligence/start() origin_machine.shut_up = FALSE diff --git a/code/modules/events/bureaucratic_error.dm b/code/modules/events/bureaucratic_error.dm index add5ad58b4aecb..578adc9be30d42 100644 --- a/code/modules/events/bureaucratic_error.dm +++ b/code/modules/events/bureaucratic_error.dm @@ -25,9 +25,9 @@ continue current.total_positions = 0 else // Adds/removes a random amount of job slots from all jobs. - */ // SKYRAT EDIT REMOVAL - no more locking off jobs + */ // NOVA EDIT REMOVAL - no more locking off jobs for(var/datum/job/current as anything in jobs) if(!current.allow_bureaucratic_error) continue - var/ran = rand(1,4) // SKYRAT EDIT - no more locking off jobs + var/ran = rand(1,4) // NOVA EDIT - no more locking off jobs current.total_positions = max(current.total_positions + ran, 0) diff --git a/code/modules/events/communications_blackout.dm b/code/modules/events/communications_blackout.dm index e6ad5d8d3bd7ce..d4547dd1bdc88d 100644 --- a/code/modules/events/communications_blackout.dm +++ b/code/modules/events/communications_blackout.dm @@ -23,7 +23,7 @@ to_chat(A, "
[span_warning("[alert]")]
") if(prob(30) || fake) //most of the time, we don't want an announcement, so as to allow AIs to fake blackouts. - priority_announce(alert, null, ANNOUNCER_COMMSBLACKOUT) //SKYRAT EDIT CHANGE + priority_announce(alert, "Anomaly Alert", sound = ANNOUNCER_COMMSBLACKOUT) //NOVA EDIT CHANGE - ORIGINAL: priority_announce(alert, "Anomaly Alert") /datum/round_event/communications_blackout/start() diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm index 4f251e871c7e83..c5e5ac399df63c 100644 --- a/code/modules/events/disease_outbreak.dm +++ b/code/modules/events/disease_outbreak.dm @@ -49,7 +49,7 @@ * Creates a list of people who are elligible to become disease carriers for the event * * Searches through the player list, adding anyone who is elligible to be a disease carrier for the event. This checks for - * whether or not the candidate is alive, a crewmember, is able to recieve a disease, and whether or not a disease is already present in them. + * whether or not the candidate is alive, a crewmember, is able to receive a disease, and whether or not a disease is already present in them. * This proc needs to be run at some point to ensure the event has candidates to infect. */ /datum/round_event_control/disease_outbreak/proc/generate_candidates() @@ -61,15 +61,17 @@ continue if(length(candidate.diseases)) //Is our candidate already sick? continue - // SKYRAT EDIT ADD START - Station/area event candidate filtering + if(!is_station_level(candidate.z) && !is_mining_level(candidate.z)) //Diseases can't really spread if the vector is in deep space. + continue + // NOVA EDIT ADDITION START - Station/area event candidate filtering. if(engaged_role_play_check(candidate, station = TRUE, dorms = TRUE)) continue - // SKYRAT EDIT ADD END + // NOVA EDIT ADDITION END disease_candidates += candidate ///Handles checking and alerting admins about the number of valid candidates /datum/event_admin_setup/minimum_candidate_requirement/disease_outbreak - output_text = "There are no candidates eligible to recieve a disease!" + output_text = "There are no candidates eligible to receive a disease!" /datum/event_admin_setup/minimum_candidate_requirement/disease_outbreak/count_candidates() var/datum/round_event_control/disease_outbreak/disease_control = event_control @@ -104,6 +106,23 @@ var/list/afflicted = list() /datum/round_event/disease_outbreak/announce(fake) + if(isnull(illness_type)) + var/list/virus_candidates = list( + /datum/disease/anxiety, + /datum/disease/beesease, + /datum/disease/brainrot, + /datum/disease/cold9, + /datum/disease/flu, + /datum/disease/fluspanish, + /datum/disease/magnitis, + /// And here are some that will never roll for real, just to mess around. + /datum/disease/death_sandwich_poisoning, + /datum/disease/dna_retrovirus, + /datum/disease/gbs, + /datum/disease/rhumba_beat, + ) + var/datum/disease/fake_virus = pick(virus_candidates) + illness_type = initial(fake_virus.name) priority_announce("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "[illness_type] Alert", ANNOUNCER_OUTBREAK7) /datum/round_event/disease_outbreak/setup() @@ -143,7 +162,8 @@ return CHECK_TICK //don't lag the server to death if(isnull(victim)) - log_game("Event Disease Outbreak: Classic attempted to start, but failed.") + message_admins("Event Disease Outbreak: Classic attempted to start, but failed to find a candidate target.") + log_game("Event Disease Outbreak: Classic attempted to start, but failed to find a candidate target") /datum/round_event_control/disease_outbreak/advanced name = "Disease Outbreak: Advanced" @@ -279,7 +299,8 @@ return CHECK_TICK //don't lag the server to death if(isnull(victim)) - log_game("Event Disease Outbreak: Advanced attempted to start, but failed.") + message_admins("Event Disease Outbreak: Advanced attempted to start, but failed to find a candidate target.") + log_game("Event Disease Outbreak: Advanced attempted to start, but failed to find a candidate target.") /datum/disease/advance/random/event name = "Event Disease" diff --git a/code/modules/events/earthquake.dm b/code/modules/events/earthquake.dm index 498648986e49cc..84945dc99f09d8 100644 --- a/code/modules/events/earthquake.dm +++ b/code/modules/events/earthquake.dm @@ -34,7 +34,7 @@ var/list/turfs_to_shred ///A list of turfs directly under turfs_to_shred, for creating a proper chasm to the floor below. var/list/underbelly = list() - ///The edges of our fault line, to recieve light damage. + ///The edges of our fault line, to receive light damage. var/list/edges = list() /datum/round_event/earthquake/setup() @@ -93,7 +93,11 @@ priority_announce("Planetary monitoring systems indicate a devastating seismic event in the near future.", "Seismic Report") /datum/round_event/earthquake/start() - notify_ghosts("The earthquake's epicenter has been located: [get_area_name(epicenter)]!", source = epicenter, header = "Rumble Rumble Rumble!") + notify_ghosts( + "The earthquake's epicenter has been located: [get_area_name(epicenter)]!", + source = epicenter, + header = "Rumble Rumble Rumble!", + ) /datum/round_event/earthquake/tick() if(ISMULTIPLE(activeFor, 5)) diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm index 84086260ea6f54..8a0bb5171374f1 100644 --- a/code/modules/events/electrical_storm.dm +++ b/code/modules/events/electrical_storm.dm @@ -15,7 +15,7 @@ announce_when = 1 /datum/round_event/electrical_storm/announce(fake) - priority_announce("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm Alert", ANNOUNCER_ELECTRICALSTORM) //SKYRAT EDIT CHANGE + priority_announce("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm Alert", ANNOUNCER_ELECTRICALSTORM) //NOVA EDIT CHANGE /datum/round_event/electrical_storm/start() diff --git a/code/modules/events/fake_virus.dm b/code/modules/events/fake_virus.dm index f690b1c4a8d5ee..e23ff73c07f461 100644 --- a/code/modules/events/fake_virus.dm +++ b/code/modules/events/fake_virus.dm @@ -7,31 +7,33 @@ /datum/round_event/fake_virus/start() var/list/fake_virus_victims = list() - for(var/mob/living/carbon/human/victim in shuffle(GLOB.player_list)) - if(victim.stat == DEAD || HAS_TRAIT(victim, TRAIT_CRITICAL_CONDITION) || !(victim.mind.assigned_role.job_flags & JOB_CREW_MEMBER)) + for(var/mob/living/carbon/human/victim in GLOB.player_list) + if(victim.stat != CONSCIOUS || HAS_TRAIT(victim, TRAIT_VIRUSIMMUNE)) continue - // SKYRAT EDIT ADD START - Station/area event candidate filtering + if(!(victim.mind?.assigned_role.job_flags & JOB_CREW_MEMBER)) + continue + // NOVA EDIT ADD START - Station/area event candidate filtering if(engaged_role_play_check(fake_virus_victims, station = TRUE, dorms = TRUE)) continue - // SKYRAT EDIT ADD END + // NOVA EDIT ADD END fake_virus_victims += victim //first we do hard status effect victims - var/defacto_min = min(3, LAZYLEN(fake_virus_victims)) - if(defacto_min)// event will hit 1-3 people by default, but will do 1-2 or just 1 if only those many candidates are available - for(var/i in 1 to rand(1,defacto_min)) - var/mob/living/carbon/human/hypochondriac = pick(fake_virus_victims) - hypochondriac.apply_status_effect(/datum/status_effect/fake_virus) - fake_virus_victims -= hypochondriac - announce_to_ghosts(hypochondriac) + var/defacto_min = min(3, length(fake_virus_victims)) + if(defacto_min <= 0)// event will hit 1-3 people by default, but will do 1-2 or just 1 if only those many candidates are available + return + for(var/i in 1 to rand(1, defacto_min)) + var/mob/living/carbon/human/hypochondriac = pick_n_take(fake_virus_victims) + hypochondriac.apply_status_effect(/datum/status_effect/fake_virus) + announce_to_ghosts(hypochondriac) //then we do light one-message victims who simply cough or whatever once (have to repeat the process since the last operation modified our candidates list) - defacto_min = min(5, LAZYLEN(fake_virus_victims)) - if(defacto_min) - for(var/i in 1 to rand(1,defacto_min)) - var/mob/living/carbon/human/onecoughman = pick(fake_virus_victims) - if(prob(25))//1/4 odds to get a spooky message instead of coughing out loud - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), onecoughman, span_warning("[pick("Your head hurts.", "Your head pounds.")]")), rand(30,150)) - else - addtimer(CALLBACK(onecoughman, TYPE_PROC_REF(/mob, emote), pick("cough", "sniff", "sneeze")), rand(30,150))//deliver the message with a slightly randomized time interval so there arent multiple people coughing at the exact same time - fake_virus_victims -= onecoughman + defacto_min = min(5, length(fake_virus_victims)) + if(defacto_min <= 0) + return + for(var/i in 1 to rand(1, defacto_min)) + var/mob/living/carbon/human/onecoughman = pick_n_take(fake_virus_victims) + if(prob(25))//1/4 odds to get a spooky message instead of coughing out loud + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), onecoughman, span_warning("[pick("Your head hurts.", "Your head pounds.")]")), rand(3 SECONDS, 15 SECONDS)) + else + addtimer(CALLBACK(onecoughman, TYPE_PROC_REF(/mob, emote), pick("cough", "sniff", "sneeze")), rand(3 SECONDS, 15 SECONDS))//deliver the message with a slightly randomized time interval so there arent multiple people coughing at the exact same time diff --git a/code/modules/events/ghost_role/_ghost_role.dm b/code/modules/events/ghost_role/_ghost_role.dm index 90b6b36dca3fe7..336fb4c03bbda6 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 f6928222cfdc6a..65fe4a142f5a69 100644 --- a/code/modules/events/ghost_role/abductor.dm +++ b/code/modules/events/ghost_role/abductor.dm @@ -14,7 +14,7 @@ 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) return NOT_ENOUGH_PLAYERS diff --git a/code/modules/events/ghost_role/alien_infestation.dm b/code/modules/events/ghost_role/alien_infestation.dm index 8c3741ccef27d1..f4078e52e65884 100644 --- a/code/modules/events/ghost_role/alien_infestation.dm +++ b/code/modules/events/ghost_role/alien_infestation.dm @@ -62,7 +62,7 @@ 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) return NOT_ENOUGH_PLAYERS diff --git a/code/modules/events/ghost_role/blob.dm b/code/modules/events/ghost_role/blob.dm index 51219f9fd8d09e..70640512699d40 100644 --- a/code/modules/events/ghost_role/blob.dm +++ b/code/modules/events/ghost_role/blob.dm @@ -29,7 +29,11 @@ /datum/round_event/ghost_role/blob/spawn_role() if(!GLOB.blobstart.len) return MAP_ERROR - var/list/candidates = get_candidates(ROLE_BLOB, ROLE_BLOB) + 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(!candidates.len) return NOT_ENOUGH_PLAYERS var/mob/dead/observer/new_blob = pick(candidates) diff --git a/code/modules/events/ghost_role/changeling_event.dm b/code/modules/events/ghost_role/changeling_event.dm index 570a6166093df4..43b4ca48af57d9 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 a70cf3e31b3249..1556eb045589d1 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 @@ -105,7 +105,7 @@ //security team gets called in after 10 minutes of prep to find the refugees /datum/round_event/ghost_role/fugitives/proc/spawn_hunters(backstory) - var/list/candidates = poll_ghost_candidates("Do you wish to be considered for a group of [backstory]?", ROLE_FUGITIVE_HUNTER) + var/list/candidates = SSpolling.poll_ghost_candidates("Do you wish to be considered for a group of [backstory]?", check_jobban = ROLE_FUGITIVE_HUNTER, pic_source = /obj/machinery/sleeper, role_name_text = backstory) shuffle_inplace(candidates) var/datum/map_template/shuttle/hunter/ship @@ -134,9 +134,17 @@ var/mob/our_candidate = candidates[1] var/mob/spawned_mob = spawner.create_from_ghost(our_candidate) candidates -= our_candidate - notify_ghosts("[spawner.prompt_name] has awoken: [spawned_mob]!", source = spawned_mob, action = NOTIFY_ORBIT, header="Come look!") + notify_ghosts( + "[spawner.prompt_name] has awoken: [spawned_mob]!", + source = spawned_mob, + header = "Come look!", + ) else - notify_ghosts("[spawner.prompt_name] spawner has been created!", source = spawner, action = NOTIFY_ORBIT, header="Spawn Here!") + notify_ghosts( + "[spawner.prompt_name] spawner has been created!", + source = spawner, + header = "Spawn Here!", + ) priority_announce("Unidentified ship detected near the station.") diff --git a/code/modules/events/ghost_role/morph_event.dm b/code/modules/events/ghost_role/morph_event.dm index e9ac8bb9ea0238..c9133863f8c0db 100644 --- a/code/modules/events/ghost_role/morph_event.dm +++ b/code/modules/events/ghost_role/morph_event.dm @@ -13,7 +13,7 @@ role_name = "morphling" /datum/round_event/ghost_role/morph/spawn_role() - 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/basic/morph, role_name_text = "morph") if(!candidates.len) return NOT_ENOUGH_PLAYERS diff --git a/code/modules/events/ghost_role/nightmare.dm b/code/modules/events/ghost_role/nightmare.dm index 57b942988cdb10..ffb206c476dd15 100644 --- a/code/modules/events/ghost_role/nightmare.dm +++ b/code/modules/events/ghost_role/nightmare.dm @@ -15,7 +15,7 @@ fakeable = FALSE /datum/round_event/ghost_role/nightmare/spawn_role() - var/list/candidates = get_candidates(ROLE_ALIEN, ROLE_NIGHTMARE) + var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_ALIEN, role = ROLE_NIGHTMARE, role_name_text = role_name) if(!candidates.len) return NOT_ENOUGH_PLAYERS diff --git a/code/modules/events/ghost_role/operative.dm b/code/modules/events/ghost_role/operative.dm index 4cf8da639bb5fe..fcea52e3c023b1 100644 --- a/code/modules/events/ghost_role/operative.dm +++ b/code/modules/events/ghost_role/operative.dm @@ -12,7 +12,7 @@ fakeable = FALSE /datum/round_event/ghost_role/operative/spawn_role() - var/list/candidates = get_candidates(ROLE_OPERATIVE, ROLE_LONE_OPERATIVE) + var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_OPERATIVE, role = ROLE_LONE_OPERATIVE, pic_source = /obj/machinery/nuclearbomb) if(!candidates.len) return NOT_ENOUGH_PLAYERS diff --git a/code/modules/events/ghost_role/revenant_event.dm b/code/modules/events/ghost_role/revenant_event.dm index 4ed05bbc82c8f9..6cdfc2c4c9e5a4 100644 --- a/code/modules/events/ghost_role/revenant_event.dm +++ b/code/modules/events/ghost_role/revenant_event.dm @@ -30,7 +30,7 @@ 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) + var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_REVENANT, role = ROLE_REVENANT, pic_source = /mob/living/basic/revenant) if(!candidates.len) return NOT_ENOUGH_PLAYERS diff --git a/code/modules/events/ghost_role/sentience.dm b/code/modules/events/ghost_role/sentience.dm index abc57d33a07583..8ebd30ad7b3e01 100644 --- a/code/modules/events/ghost_role/sentience.dm +++ b/code/modules/events/ghost_role/sentience.dm @@ -7,6 +7,7 @@ GLOBAL_LIST_INIT(high_priority_sentience, typecacheof(list( /mob/living/basic/goat, /mob/living/basic/lizard, /mob/living/basic/mouse/brown/tom, + /mob/living/basic/parrot, /mob/living/basic/pet, /mob/living/basic/pig, /mob/living/basic/rabbit, @@ -16,7 +17,6 @@ GLOBAL_LIST_INIT(high_priority_sentience, typecacheof(list( /mob/living/basic/spider/giant/sgt_araneus, /mob/living/simple_animal/bot/secbot/beepsky, /mob/living/simple_animal/hostile/retaliate/goose/vomit, - /mob/living/simple_animal/parrot, /mob/living/simple_animal/pet, ))) @@ -50,7 +50,7 @@ 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(check_jobban = ROLE_SENTIENCE, 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. diff --git a/code/modules/events/ghost_role/sentient_disease.dm b/code/modules/events/ghost_role/sentient_disease.dm index 5efa4e6915a0b2..44f78d7c08cc7a 100644 --- a/code/modules/events/ghost_role/sentient_disease.dm +++ b/code/modules/events/ghost_role/sentient_disease.dm @@ -13,7 +13,7 @@ role_name = "sentient disease" /datum/round_event/ghost_role/sentient_disease/spawn_role() - 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 = /obj/structure/sign/warning/biohazard, role_name_text = role_name) if(!candidates.len) return NOT_ENOUGH_PLAYERS diff --git a/code/modules/events/ghost_role/slaughter_event.dm b/code/modules/events/ghost_role/slaughter_event.dm index 8cb2b729aa4ea6..f4628344d2f5ba 100644 --- a/code/modules/events/ghost_role/slaughter_event.dm +++ b/code/modules/events/ghost_role/slaughter_event.dm @@ -16,7 +16,7 @@ role_name = "slaughter demon" /datum/round_event/ghost_role/slaughter/spawn_role() - 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/basic/demon/slaughter, role_name_text = role_name) if(!candidates.len) return NOT_ENOUGH_PLAYERS diff --git a/code/modules/events/ghost_role/space_dragon.dm b/code/modules/events/ghost_role/space_dragon.dm index dd75a97a869995..0a328f6dc8d8c0 100644 --- a/code/modules/events/ghost_role/space_dragon.dm +++ b/code/modules/events/ghost_role/space_dragon.dm @@ -20,7 +20,7 @@ /datum/round_event/ghost_role/space_dragon/spawn_role() - var/list/candidates = get_candidates(ROLE_SPACE_DRAGON, ROLE_SPACE_DRAGON) + var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_SPACE_DRAGON, role = ROLE_SPACE_DRAGON, pic_source = /mob/living/basic/space_dragon) if(!candidates.len) return NOT_ENOUGH_PLAYERS diff --git a/code/modules/events/ghost_role/space_ninja.dm b/code/modules/events/ghost_role/space_ninja.dm index 3aa7f5ee1ac050..d7da1e4a53efa5 100644 --- a/code/modules/events/ghost_role/space_ninja.dm +++ b/code/modules/events/ghost_role/space_ninja.dm @@ -19,7 +19,7 @@ return MAP_ERROR //selecting a candidate player - var/list/candidates = get_candidates(ROLE_NINJA, ROLE_NINJA) + var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_NINJA, role = ROLE_NINJA, pic_source = /obj/item/energy_katana) if(!candidates.len) return NOT_ENOUGH_PLAYERS @@ -31,7 +31,7 @@ ninja.key = key ninja.mind.add_antag_datum(/datum/antagonist/ninja) spawned_mobs += ninja -// SKYRAT EDIT ADDITION BEGIN: Preference Ninjas +// NOVA EDIT ADDITION BEGIN: Preference Ninjas var/loadme = tgui_input_list(ninja, "Do you wish to load your character slot?", "Load Character?", list("Yes!", "No, I want to be random!"), default = "No, I want to be random!", timeout = 60 SECONDS) var/codename if(loadme == "Yes!") @@ -45,7 +45,7 @@ ninja.randomize_human_appearance(~(RANDOMIZE_NAME|RANDOMIZE_SPECIES)) ninja.dna.update_dna_identity() -// SKYRAT EDIT ADDITION END: Preference Ninjas +// NOVA EDIT ADDITION END: Preference Ninjas message_admins("[ADMIN_LOOKUPFLW(ninja)] has been made into a space ninja by an event.") ninja.log_message("was spawned as a ninja by an event.", LOG_GAME) @@ -56,9 +56,9 @@ /proc/create_space_ninja(spawn_loc) var/mob/living/carbon/human/new_ninja = new(spawn_loc) -// new_ninja.randomize_human_appearance(~(RANDOMIZE_NAME|RANDOMIZE_SPECIES)) //SKYRAT EDIT: Player Prefs Ninjas +// new_ninja.randomize_human_appearance(~(RANDOMIZE_NAME|RANDOMIZE_SPECIES)) //NOVA EDIT: Player Prefs Ninjas var/new_name = "[pick(GLOB.ninja_titles)] [pick(GLOB.ninja_names)]" new_ninja.name = new_name new_ninja.real_name = new_name -// new_ninja.dna.update_dna_identity() //SKYRAT EDIT: Player Prefs Ninjas +// new_ninja.dna.update_dna_identity() //NOVA EDIT: Player Prefs Ninjas return new_ninja diff --git a/code/modules/events/grey_tide.dm b/code/modules/events/grey_tide.dm index 51e74645f7706d..62f5a53374c31f 100644 --- a/code/modules/events/grey_tide.dm +++ b/code/modules/events/grey_tide.dm @@ -33,6 +33,8 @@ grey_tide_areas += pick_n_take(potential_areas) /datum/round_event/grey_tide/announce(fake) + if(fake) + severity = rand(1,3) priority_announce("Gr3y.T1d3 virus detected in [station_name()] secure locking encryption subroutines. Severity level of [severity]. Recommend station AI involvement.", "Security Alert") /datum/round_event/grey_tide/start() diff --git a/code/modules/events/heart_attack.dm b/code/modules/events/heart_attack.dm index f073676c5b415a..9d9e4c76cd9aac 100644 --- a/code/modules/events/heart_attack.dm +++ b/code/modules/events/heart_attack.dm @@ -24,7 +24,7 @@ * Performs initial analysis of which living players are eligible to be selected for a heart attack. * * Traverses player_list and checks entries against a series of reviews to see if they should even be considered for a heart attack, - * and at what weight should they be eligible to recieve it. The check for whether or not a heart attack should be "blocked" by something is done + * and at what weight should they be eligible to receive it. The check for whether or not a heart attack should be "blocked" by something is done * later, at the round_event level, so this proc mostly just checks users for whether or not a heart attack should be possible. */ /datum/round_event_control/heart_attack/proc/generate_candidates() @@ -34,10 +34,10 @@ continue if(!(candidate.mind.assigned_role.job_flags & JOB_CREW_MEMBER))//only crewmembers can get one, a bit unfair for some ghost roles and it wastes the event continue - // SKYRAT EDIT ADD START - Station/area event candidate filtering + // NOVA EDIT ADD START - Station/area event candidate filtering if(engaged_role_play_check(candidate, station = TRUE, dorms = TRUE)) continue - // SKYRAT EDIT ADD END + // NOVA EDIT ADD END if(candidate.satiety <= -60 && !candidate.has_status_effect(/datum/status_effect/exercised)) //Multiple junk food items recently //No foodmaxxing for the achievement heart_attack_candidates[candidate] = 3 else @@ -63,7 +63,7 @@ * Picks a victim from a list and attempts to give them a heart attack * * Performs a pick_weight on a list of potential victims. Once selected, the "winner" - * will recieve heart disease. Returns TRUE if a heart attack is successfully given, and + * will receive heart disease. Returns TRUE if a heart attack is successfully given, and * FALSE if something blocks it. */ /datum/round_event/heart_attack/proc/attack_heart() @@ -86,7 +86,7 @@ return FALSE /datum/event_admin_setup/minimum_candidate_requirement/heart_attack - output_text = "There are no candidates eligible to recieve a heart attack!" + output_text = "There are no candidates eligible to receive a heart attack!" /datum/event_admin_setup/minimum_candidate_requirement/heart_attack/count_candidates() var/datum/round_event_control/heart_attack/heart_control = event_control diff --git a/code/modules/events/holiday/halloween.dm b/code/modules/events/holiday/halloween.dm index d52dd1b9c508a6..8cc87a60df5159 100644 --- a/code/modules/events/holiday/halloween.dm +++ b/code/modules/events/holiday/halloween.dm @@ -18,9 +18,9 @@ for(var/mob/living/basic/pet/dog/corgi/ian/Ian in GLOB.mob_living_list) Ian.place_on_head(new /obj/item/bedsheet(Ian)) - for(var/mob/living/simple_animal/parrot/poly/Poly in GLOB.mob_living_list) - new /mob/living/simple_animal/parrot/poly/ghost(Poly.loc) - qdel(Poly) + for(var/mob/living/basic/parrot/poly/bird in GLOB.mob_living_list) + new /mob/living/basic/parrot/poly/ghost(bird.loc) + qdel(bird) /datum/round_event/spooky/announce(fake) priority_announce(pick("RATTLE ME BONES!","THE RIDE NEVER ENDS!", "A SKELETON POPS OUT!", "SPOOKY SCARY SKELETONS!", "CREWMEMBERS BEWARE, YOU'RE IN FOR A SCARE!") , "THE CALL IS COMING FROM INSIDE THE HOUSE") @@ -40,6 +40,10 @@ icon_state = "coffincookie" crafting_complexity = FOOD_COMPLEXITY_2 +/obj/item/food/cookie/sugar/spookycoffin/Initialize(mapload, seasonal_changes = FALSE) + // Changes default parameter of seasonal_changes to FALSE, pass to parent + return ..(mapload, seasonal_changes) + //spooky items /obj/item/storage/spooky diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm index 3726da4c6504f8..cad343f7debd93 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/market_crash.dm b/code/modules/events/market_crash.dm index 1b18fe774f6e27..3dc9f5f7a655cb 100644 --- a/code/modules/events/market_crash.dm +++ b/code/modules/events/market_crash.dm @@ -23,7 +23,7 @@ var/list/poss_reasons = list("the alignment of the moon and the sun",\ "some risky housing market outcomes",\ "the B.E.P.I.S. team's untimely downfall",\ - "speculative SolFed grants backfiring", /*SKYRAT EDIT CHANGE; original was "speculative Terragov grants backfiring"*/\ + "speculative SolFed grants backfiring", /*NOVA EDIT CHANGE; original was "speculative Terragov grants backfiring"*/\ "greatly exaggerated reports of Nanotrasen accountancy personnel being \"laid off\"",\ "a \"great investment\" into \"non-fungible tokens\" by a \"moron\"",\ "a number of raids from Tiger Cooperative agents",\ diff --git a/code/modules/events/meteors/meteor_wave_events.dm b/code/modules/events/meteors/meteor_wave_events.dm index 8a43af74601adc..02c96c09b5acfd 100644 --- a/code/modules/events/meteors/meteor_wave_events.dm +++ b/code/modules/events/meteors/meteor_wave_events.dm @@ -112,7 +112,7 @@ reasons += "[station_name()] is passing through a debris cloud, expect minor damage \ to external fittings and fixtures." - reasons += "Nanotrasen Superweapons Division is testing a new prototype \ + reasons += "Symphionia Superweapons Division is testing a new prototype \ [pick("field","projection","nova","super-colliding","reactive")] \ [pick("cannon","artillery","tank","cruiser","\[REDACTED\]")], \ some mild debris is expected." diff --git a/code/modules/events/portal_storm.dm b/code/modules/events/portal_storm.dm index 8ad0b48985f680..9f83f759727b18 100644 --- a/code/modules/events/portal_storm.dm +++ b/code/modules/events/portal_storm.dm @@ -1,11 +1,11 @@ /datum/round_event_control/portal_storm_syndicate - name = "Portal Storm: Syndicate Shocktroops" + name = "Portal Storm: Symphionia Shocktroops" typepath = /datum/round_event/portal_storm/syndicate_shocktroop weight = 2 min_players = 15 earliest_start = 30 MINUTES category = EVENT_CATEGORY_ENTITIES - description = "Syndicate troops pour out of portals." + description = "Symphionia troops pour out of portals." /datum/round_event/portal_storm/syndicate_shocktroop boss_types = list(/mob/living/basic/trooper/syndicate/melee/space/stormtrooper = 2) diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm index ebcbb27f2781d5..3c97ca91cdcca7 100644 --- a/code/modules/events/processor_overload.dm +++ b/code/modules/events/processor_overload.dm @@ -26,7 +26,7 @@ // whether it's, say, a tesla zapping tcomms, or some selective // modification of the tcomms bus if(prob(80) || fake) - priority_announce(alert) + priority_announce(alert, "Anomaly Alert") /datum/round_event/processor_overload/start() diff --git a/code/modules/events/radiation_leak.dm b/code/modules/events/radiation_leak.dm index 0fbe29927666f3..a5aee22a8b26f6 100644 --- a/code/modules/events/radiation_leak.dm +++ b/code/modules/events/radiation_leak.dm @@ -60,7 +60,7 @@ priority_announce("A radiation leak has been detected in [location_descriptor || "an unknown area"]. \ All crew are to evacuate the affected area. Our [pick("mechanics", "engineers", "scientists", "interns", "sensors", "readings")] \ - report that a machine within is causing it - repair it quickly to stop the leak.") + report that a machine within is causing it - repair it quickly to stop the leak.", "[command_name()] Engineering Division") /datum/round_event/radiation_leak/start() var/obj/machinery/the_source_of_our_problems = picked_machine_ref?.resolve() @@ -153,7 +153,7 @@ SIGNAL_HANDLER INVOKE_ASYNC(src, PROC_REF(try_remove_radiation), source, user, tool) - return COMPONENT_BLOCK_TOOL_ATTACK + return ITEM_INTERACT_BLOCKING /// Attempts a do_after, and if successful, stops the event /datum/round_event/radiation_leak/proc/try_remove_radiation(obj/machinery/source, mob/living/user, obj/item/tool) diff --git a/code/modules/events/scrubber_overflow.dm b/code/modules/events/scrubber_overflow.dm index 6aad17f00faa1f..7f24648a9e5a73 100644 --- a/code/modules/events/scrubber_overflow.dm +++ b/code/modules/events/scrubber_overflow.dm @@ -67,7 +67,7 @@ deadchat_broadcast(" has just been[random ? " randomly" : ""] triggered[cause ? " by [cause]" : ""]!", "Scrubber Overflow: [initial(forced_reagent_type.name)]", message_type=DEADCHAT_ANNOUNCEMENT) /datum/round_event/scrubber_overflow/announce(fake) - priority_announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert") + priority_announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "[command_name()] Engineering Division") /datum/round_event/scrubber_overflow/setup() for(var/obj/machinery/atmospherics/components/unary/vent_scrubber/temp_vent as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/atmospherics/components/unary/vent_scrubber)) diff --git a/code/modules/events/shuttle_loan/shuttle_loan_datum.dm b/code/modules/events/shuttle_loan/shuttle_loan_datum.dm index ae2ee44da1af7c..a456b0264b3178 100644 --- a/code/modules/events/shuttle_loan/shuttle_loan_datum.dm +++ b/code/modules/events/shuttle_loan/shuttle_loan_datum.dm @@ -1,4 +1,4 @@ -/// One of the potential shuttle loans you might recieve. +/// One of the potential shuttle loans you might receive. /datum/shuttle_loan_situation /// Who sent the shuttle var/sender = "Centcom" @@ -7,7 +7,7 @@ /// What the shuttle says about it. var/shuttle_transit_text = "Unset transit text" /// Supply points earned for taking the deal. - var/bonus_points = 10000 + var/bonus_points = CARGO_CRATE_VALUE * 50 /// Response for taking the deal. var/thanks_msg = "The cargo shuttle should return in five minutes. Have some supply points for your trouble." /// Small description of the loan for easier log reading. @@ -21,7 +21,7 @@ bonus_points *= 1.15 /// Spawns paths added to `spawn_list`, and passes empty shuttle turfs so you can spawn more complicated things like dead bodies. -/datum/shuttle_loan_situation/proc/spawn_items(list/spawn_list, list/empty_shuttle_turfs) +/datum/shuttle_loan_situation/proc/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs) SHOULD_CALL_PARENT(FALSE) CRASH("Unimplemented get_spawned_items() on [src.type].") @@ -31,7 +31,7 @@ shuttle_transit_text = "Virus samples incoming." logging_desc = "Virus shuttle" -/datum/shuttle_loan_situation/antidote/spawn_items(list/spawn_list, list/empty_shuttle_turfs) +/datum/shuttle_loan_situation/antidote/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs) var/obj/effect/mob_spawn/corpse/human/assistant/infected_assistant = pick(list( /obj/effect/mob_spawn/corpse/human/assistant/beesease_infection, /obj/effect/mob_spawn/corpse/human/assistant/brainrot_infection, @@ -58,7 +58,7 @@ bonus_points = 0 logging_desc = "Resupply packages" -/datum/shuttle_loan_situation/department_resupply/spawn_items(list/spawn_list, list/empty_shuttle_turfs) +/datum/shuttle_loan_situation/department_resupply/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs) var/list/crate_types = list( /datum/supply_pack/emergency/equipment, /datum/supply_pack/security/supplies, @@ -81,10 +81,10 @@ /datum/shuttle_loan_situation/syndiehijacking sender = "CentCom Counterintelligence" announcement_text = "The syndicate are trying to infiltrate your station. If you let them hijack your cargo shuttle, you'll save us a headache." - shuttle_transit_text = "Syndicate hijack team incoming." - logging_desc = "Syndicate boarding party" + shuttle_transit_text = "Symphionia hijack team incoming." + logging_desc = "Symphionia boarding party" -/datum/shuttle_loan_situation/syndiehijacking/spawn_items(list/spawn_list, list/empty_shuttle_turfs) +/datum/shuttle_loan_situation/syndiehijacking/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs) var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/imports/specialops] pack.generate(pick_n_take(empty_shuttle_turfs)) @@ -99,10 +99,10 @@ sender = "CentCom Janitorial Division" announcement_text = "One of our freighters carrying a bee shipment has been attacked by eco-terrorists. Can you clean up the mess for us?" shuttle_transit_text = "Biohazard cleanup incoming." - bonus_points = 20000 //Toxin bees can be unbeelievably lethal + bonus_points = CARGO_CRATE_VALUE * 100 //Toxin bees can be unbeelievably lethal logging_desc = "Shuttle full of bees" -/datum/shuttle_loan_situation/lots_of_bees/spawn_items(list/spawn_list, list/empty_shuttle_turfs) +/datum/shuttle_loan_situation/lots_of_bees/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs) var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/organic/hydroponics/beekeeping_fullkit] pack.generate(pick_n_take(empty_shuttle_turfs)) @@ -132,13 +132,13 @@ /datum/shuttle_loan_situation/jc_a_bomb sender = "CentCom Security Division" - announcement_text = "We have discovered an active Syndicate bomb near our VIP shuttle's fuel lines. If you feel up to the task, we will pay you for defusing it." + announcement_text = "We have discovered an active Symphionia bomb near our VIP shuttle's fuel lines. If you feel up to the task, we will pay you for defusing it." shuttle_transit_text = "Live explosive ordnance incoming. Exercise extreme caution." thanks_msg = "Live explosive ordnance incoming via supply shuttle. Evacuating cargo bay is recommended." - bonus_points = 45000 //If you mess up, people die and the shuttle gets turned into swiss cheese + bonus_points = CARGO_CRATE_VALUE * 225 //If you mess up, people die and the shuttle gets turned into swiss cheese logging_desc = "Shuttle with a ticking bomb" -/datum/shuttle_loan_situation/jc_a_bomb/spawn_items(list/spawn_list, list/empty_shuttle_turfs) +/datum/shuttle_loan_situation/jc_a_bomb/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs) spawn_list.Add(/obj/machinery/syndicatebomb/shuttle_loan) if(prob(95)) spawn_list.Add(/obj/item/paper/fluff/cargo/bomb) @@ -153,7 +153,7 @@ bonus_points = 0 //Payout is made when the stamped papers are returned logging_desc = "Paperwork shipment" -/datum/shuttle_loan_situation/papers_please/spawn_items(list/spawn_list, list/empty_shuttle_turfs) +/datum/shuttle_loan_situation/papers_please/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs) spawn_list += subtypesof(/obj/item/paperwork) - typesof(/obj/item/paperwork/photocopy) - typesof(/obj/item/paperwork/ancient) /datum/shuttle_loan_situation/pizza_delivery @@ -164,8 +164,8 @@ bonus_points = 0 logging_desc = "Pizza delivery" -/datum/shuttle_loan_situation/pizza_delivery/spawn_items(list/spawn_list, list/empty_shuttle_turfs) - var/naughtypizza = list(/obj/item/pizzabox/bomb /*/obj/item/pizzabox/margherita/robo*/) // SKYRAT EDIT: oh look another blacklist, for pizza nonetheless! removes borg pizza +/datum/shuttle_loan_situation/pizza_delivery/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs) + var/naughtypizza = list(/obj/item/pizzabox/bomb) // oh look another blacklist, for pizza nonetheless! removes borg pizza // NOVA EDIT CHANGE - ORIGINAL: var/naughtypizza = list(/obj/item/pizzabox/bomb, /obj/item/pizzabox/margherita/robo) var/nicepizza = list(/obj/item/pizzabox/margherita, /obj/item/pizzabox/meat, /obj/item/pizzabox/vegetable, /obj/item/pizzabox/mushroom) for(var/i in 1 to 6) spawn_list.Add(pick(prob(5) ? naughtypizza : nicepizza)) @@ -176,7 +176,7 @@ shuttle_transit_text = "Partying Russians incoming." logging_desc = "Russian party squad" -/datum/shuttle_loan_situation/russian_party/spawn_items(list/spawn_list, list/empty_shuttle_turfs) +/datum/shuttle_loan_situation/russian_party/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs) var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/service/party] pack.generate(pick_n_take(empty_shuttle_turfs)) @@ -194,7 +194,7 @@ shuttle_transit_text = "Spider Clan gift incoming." logging_desc = "Shuttle full of spiders" -/datum/shuttle_loan_situation/spider_gift/spawn_items(list/spawn_list, list/empty_shuttle_turfs) +/datum/shuttle_loan_situation/spider_gift/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs) var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/imports/specialops] pack.generate(pick_n_take(empty_shuttle_turfs)) @@ -213,3 +213,82 @@ for(var/i in 1 to 5) var/turf/web_turf = pick_n_take(empty_shuttle_turfs) new /obj/structure/spider/stickyweb(web_turf) + +#define DENT_WALL "dent" +#define CHANGE_WALL "change" +#define DISMANTLE_WALL "dismantle" + +#define BREAK_TILE "break" +#define PLATING_TILE "plating" +#define RUST_TILE "rust" + +/** + * A special shuttle loan situation enabled by the 'mail blocked' station trait. + * It sends back a lot of mail to the station, at the cost of wrecking the cargo shuttle a little. + */ +/datum/shuttle_loan_situation/mail_strike + sender = "Spinward Mail Workers Union" + announcement_text = "The Mail Workers Union wants to borrow your cargo shuttle to employ \"advanced union strike tactics\" with. Payment is strictly in mails." + bonus_points = 0 + thanks_msg = "The cargo shuttle should return in five minutes." + shuttle_transit_text = "Nothing stops the mail." + logging_desc = "Shuttle full of shady mail" + +/datum/shuttle_loan_situation/mail_strike/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs) + for(var/i in 1 to rand(7, 12)) + var/turf/closed/wall/wall = pick_n_take(blocked_shutte_turfs) + if(!istype(wall)) + continue + var/static/list/wall_bad_stuff = list(DENT_WALL = 85, CHANGE_WALL = 13, DISMANTLE_WALL = 2) + var/static/list/possible_new_walls = list( + /turf/closed/wall/mineral/sandstone, + /turf/closed/wall/mineral/wood, + /turf/closed/wall/mineral/iron, + /turf/closed/wall/metal_foam_base, + /turf/closed/wall/r_wall, + ) + var/damage_done = pick_weight(wall_bad_stuff) + switch(damage_done) + if(DENT_WALL) + for(var/dent in 1 to rand(1, MAX_DENT_DECALS)) + wall.add_dent(prob(90) ? WALL_DENT_SHOT : WALL_DENT_HIT) + if(CHANGE_WALL) + wall.ChangeTurf(pick(possible_new_walls - wall.type)) + if(prob(25)) + for(var/dent in 1 to rand(1, MAX_DENT_DECALS)) + wall.add_dent(prob(90) ? WALL_DENT_SHOT : WALL_DENT_HIT) + if(DISMANTLE_WALL) + wall.dismantle_wall() + + for(var/i in 1 to rand(7, 12)) + var/turf/open/floor/floor = pick_n_take(empty_shuttle_turfs) + if(!istype(floor)) + continue + var/static/list/floor_bad_stuff = list(BREAK_TILE = 65, PLATING_TILE = 25, RUST_TILE = 10) + var/damage_done = pick_weight(floor_bad_stuff) + switch(damage_done) + if(BREAK_TILE) + if(prob(50)) + floor.break_tile() + else + floor.burn_tile() + if(PLATING_TILE) + if(prob(25)) + floor.remove_tile() + else + floor.make_plating() + if(RUST_TILE) + floor.ChangeTurf(/turf/open/floor/plating/rust) + if(prob(25)) + spawn_list += pick(/obj/effect/gibspawner/robot, /obj/effect/gibspawner/human) + + for(var/i in 1 to rand(4, 7)) + spawn_list += /obj/structure/closet/crate/mail/full/mail_strike + +#undef BREAK_TILE +#undef PLATING_TILE +#undef RUST_TILE + +#undef DENT_WALL +#undef CHANGE_WALL +#undef DISMANTLE_WALL diff --git a/code/modules/events/shuttle_loan/shuttle_loan_event.dm b/code/modules/events/shuttle_loan/shuttle_loan_event.dm index 96db32c044d6f9..e0b5cccb1eeed5 100644 --- a/code/modules/events/shuttle_loan/shuttle_loan_event.dm +++ b/code/modules/events/shuttle_loan/shuttle_loan_event.dm @@ -8,7 +8,8 @@ description = "If cargo accepts the offer, fills the shuttle with loot and/or enemies." ///The types of loan events already run (and to be excluded if the event triggers). admin_setup = list(/datum/event_admin_setup/listed_options/shuttle_loan) - var/list/run_situations = list() + ///A list of normally unavailable (or already run) situations datums + var/list/unavailable_situations = list(/datum/shuttle_loan_situation/mail_strike) /datum/round_event_control/shuttle_loan/can_spawn_event(players_amt, allow_magic = FALSE) . = ..() @@ -28,22 +29,26 @@ var/datum/round_event_control/shuttle_loan/loan_control = control //by this point if situation is admin picked, it is a type, not an instance. if(!situation) - var/list/valid_situations = subtypesof(/datum/shuttle_loan_situation) - loan_control.run_situations + var/list/valid_situations = subtypesof(/datum/shuttle_loan_situation) - loan_control.unavailable_situations if(!valid_situations.len) //If we somehow run out of loans (fking campbell), they all become available again - loan_control.run_situations.Cut() + loan_control.unavailable_situations.Cut() valid_situations = subtypesof(/datum/shuttle_loan_situation) situation = pick(valid_situations) - loan_control.run_situations.Add(situation) + loan_control.unavailable_situations.Add(situation) situation = new situation() /datum/round_event/shuttle_loan/announce(fake) - priority_announce("Cargo: [situation.announcement_text]", situation.sender) + var/announcement_text = situation?.announcement_text + if(isnull(announcement_text) || fake) + var/datum/shuttle_loan_situation/fake_situation = pick(subtypesof(/datum/shuttle_loan_situation)) + announcement_text = initial(fake_situation.announcement_text) + priority_announce("Cargo: [announcement_text]", situation.sender) SSshuttle.shuttle_loan = src /datum/round_event/shuttle_loan/proc/loan_shuttle() - priority_announce(situation.thanks_msg, "Cargo shuttle commandeered by CentCom.") + priority_announce(situation.thanks_msg, "Cargo shuttle commandeered by [command_name()].") dispatched = TRUE var/datum/bank_account/dep_account = SSeconomy.get_dep_account(ACCOUNT_CAR) @@ -72,10 +77,12 @@ //get empty turfs var/list/empty_shuttle_turfs = list() + var/list/blocked_shutte_turfs = list() var/list/area/shuttle/shuttle_areas = SSshuttle.supply.shuttle_areas for(var/area/shuttle/shuttle_area as anything in shuttle_areas) - for(var/turf/open/floor/shuttle_turf in shuttle_area) + for(var/turf/open/floor/shuttle_turf in shuttle_area.get_contained_turfs()) if(shuttle_turf.is_blocked_turf()) + blocked_shutte_turfs += shuttle_turf continue empty_shuttle_turfs += shuttle_turf if(!empty_shuttle_turfs.len) @@ -83,7 +90,7 @@ //let the situation spawn its items var/list/spawn_list = list() - situation.spawn_items(spawn_list, empty_shuttle_turfs) + situation.spawn_items(spawn_list, empty_shuttle_turfs, blocked_shutte_turfs) var/false_positive = 0 while(spawn_list.len && empty_shuttle_turfs.len) @@ -99,7 +106,7 @@ /datum/event_admin_setup/listed_options/shuttle_loan/get_list() var/datum/round_event_control/shuttle_loan/loan_event = event_control - var/list/valid_situations = subtypesof(/datum/shuttle_loan_situation) - loan_event.run_situations + var/list/valid_situations = subtypesof(/datum/shuttle_loan_situation) - loan_event.unavailable_situations return valid_situations /datum/event_admin_setup/listed_options/shuttle_loan/apply_to_event(datum/round_event/shuttle_loan/event) diff --git a/code/modules/events/space_vines/vine_controller.dm b/code/modules/events/space_vines/vine_controller.dm index e32edcb0902559..bd330668ba6cda 100644 --- a/code/modules/events/space_vines/vine_controller.dm +++ b/code/modules/events/space_vines/vine_controller.dm @@ -50,7 +50,13 @@ GLOBAL_LIST_INIT(vine_mutations_list, init_vine_mutation_list()) /datum/spacevine_controller/vv_do_topic(href_list) . = ..() + + if(!.) + return + if(href_list[VV_HK_SPACEVINE_PURGE]) + if(!check_rights(NONE)) + return if(tgui_alert(usr, "Are you sure you want to delete this spacevine cluster?", "Delete Vines", list("Yes", "No")) == "Yes") DeleteVines() diff --git a/code/modules/events/space_vines/vine_mutations.dm b/code/modules/events/space_vines/vine_mutations.dm index f081c81b985822..6f1b9265d82020 100644 --- a/code/modules/events/space_vines/vine_mutations.dm +++ b/code/modules/events/space_vines/vine_mutations.dm @@ -72,11 +72,11 @@ return if(prob(TOXICITY_MUTATION_PROB) && istype(crosser) && !isvineimmune(crosser)) to_chat(crosser, span_alert("You accidentally touch the vine and feel a strange sensation.")) - crosser.adjustToxLoss(5) // SKYRAT EDIT CHANGE - Original: 20 + crosser.adjustToxLoss(5) // NOVA EDIT CHANGE - Original: 20 /datum/spacevine_mutation/toxicity/on_eat(obj/structure/spacevine/holder, mob/living/eater) if(!isvineimmune(eater)) - eater.adjustToxLoss(5) // SKYRAT EDIT CHANGE - Original: 20 + eater.adjustToxLoss(5) // NOVA EDIT CHANGE - Original: 20 /datum/spacevine_mutation/explosive // JC IT'S A BOMB name = "Explosive" @@ -290,7 +290,7 @@ if(prob(THORN_MUTATION_CUT_PROB) && istype(crosser) && !isvineimmune(crosser)) var/mob/living/victim = crosser - victim.adjustBruteLoss(5) // SKYRAT EDIT CHANGE - Original: 15 + victim.adjustBruteLoss(5) // NOVA EDIT CHANGE - Original: 15 to_chat(victim, span_danger("You cut yourself on the thorny vines.")) /datum/spacevine_mutation/thorns/on_hit(obj/structure/spacevine/holder, mob/living/hitter, obj/item/item, expected_damage) @@ -305,7 +305,7 @@ if(prob(THORN_MUTATION_CUT_PROB) && istype(hitter) && !isvineimmune(hitter)) var/mob/living/victim = hitter - victim.adjustBruteLoss(5) // SKYRAT EDIT CHANGE - Original: 15 + victim.adjustBruteLoss(5) // NOVA EDIT CHANGE - Original: 15 to_chat(victim, span_danger("You cut yourself on the thorny vines.")) return expected_damage diff --git a/code/modules/events/space_vines/vine_structure.dm b/code/modules/events/space_vines/vine_structure.dm index 155a4c5c083c1f..539b8a75cd41eb 100644 --- a/code/modules/events/space_vines/vine_structure.dm +++ b/code/modules/events/space_vines/vine_structure.dm @@ -7,7 +7,6 @@ anchored = TRUE density = FALSE layer = SPACEVINE_LAYER - plane = GAME_PLANE_UPPER_FOV_HIDDEN mouse_opacity = MOUSE_OPACITY_OPAQUE //Clicking anywhere on the turf is good enough pass_flags = PASSTABLE | PASSGRILLE max_integrity = 50 @@ -68,10 +67,10 @@ for(var/datum/spacevine_mutation/mutation in mutations) override += mutation.on_chem(src, chem) if(!override && prob(75) && istype(chem, /datum/reagent/toxin/plantbgone)) - // SKYRAT EDIT ADD START + // NOVA EDIT ADD START if(plantbgone_resist && prob(50)) return - // SKYRAT EDIT ADD END + // NOVA EDIT ADD END qdel(src) /obj/structure/spacevine/proc/eat(mob/eater) diff --git a/code/modules/events/stray_cargo.dm b/code/modules/events/stray_cargo.dm index e783f18ec0250a..7c992da5b35649 100644 --- a/code/modules/events/stray_cargo.dm +++ b/code/modules/events/stray_cargo.dm @@ -93,7 +93,7 @@ supply_pack = new pack_type else // treat this as a supply pack id and resolving it with SSshuttle if(admin_override_contents) - supply_pack = admin_override_contents //Syndicate crates create a new datum while being customized which will result in this being triggered. Outside of this situation this should never trigger + supply_pack = admin_override_contents //Symphionia crates create a new datum while being customized which will result in this being triggered. Outside of this situation this should never trigger else supply_pack = SSshuttle.supply_packs[pack_type] var/obj/structure/closet/crate/crate = supply_pack.generate(null) @@ -130,7 +130,7 @@ ///A rare variant that drops a crate containing syndicate uplink items /datum/round_event_control/stray_cargo/syndicate - name = "Stray Syndicate Cargo Pod" + name = "Stray Symphionia Cargo Pod" typepath = /datum/round_event/stray_cargo/syndicate weight = 6 max_occurrences = 1 diff --git a/code/modules/events/tram_malfunction.dm b/code/modules/events/tram_malfunction.dm index 26e0f2feefa475..18ee4afb7a18c9 100644 --- a/code/modules/events/tram_malfunction.dm +++ b/code/modules/events/tram_malfunction.dm @@ -35,7 +35,7 @@ end_when = rand(TRAM_MALFUNCTION_TIME_LOWER, TRAM_MALFUNCTION_TIME_UPPER) /datum/round_event/tram_malfunction/announce() - priority_announce("Our automated control system has lost contact with the tram's onboard computer. Please take extra care while engineers diagnose and resolve the issue.", "CentCom Engineering Division") + priority_announce("Our automated control system has lost contact with the tram's onboard computer. Please take extra care while engineers diagnose and resolve the issue.", "[command_name()] Engineering Division") /datum/round_event/tram_malfunction/start() for(var/datum/transport_controller/linear/tram/malfunctioning_controller as anything in SStransport.transports_by_type[TRANSPORT_TYPE_TRAM]) @@ -47,7 +47,7 @@ for(var/datum/transport_controller/linear/tram/malfunctioning_controller as anything in SStransport.transports_by_type[TRANSPORT_TYPE_TRAM]) if(malfunctioning_controller.specific_transport_id == specific_transport_id && malfunctioning_controller.controller_status & COMM_ERROR) malfunctioning_controller.end_malf_event() - priority_announce("The software on the tram has been reset, normal operations are now resuming. Sorry for any inconvienence this may have caused.", "CentCom Engineering Division") + priority_announce("The software on the tram has been reset, normal operations are now resuming. Sorry for any inconvienence this may have caused.", "[command_name()] Engineering Division") return #undef TRAM_MALFUNCTION_TIME_UPPER diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index 70a7900ef8c3f3..c6f52ab50cad25 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -36,8 +36,9 @@ ///The list of decals we will choose from to spawn when producing a mob var/list/filth_spawn_types = list() -/datum/round_event/vent_clog/announce() - priority_announce("Minor biological obstruction detected in the ventilation network. Blockage is believed to be in the [get_area_name(vent)].", "Custodial Notification") +/datum/round_event/vent_clog/announce(fake) + var/area/event_area = fake ? pick(GLOB.teleportlocs) : get_area_name(vent) + priority_announce("Minor biological obstruction detected in the ventilation network. Blockage is believed to be in the [event_area].", "Custodial Notification") /datum/round_event/vent_clog/setup() vent = get_vent() @@ -133,7 +134,7 @@ /** * Handles the production of our mob and adds it to our living_mobs list * - * Used by the vent clog random event to handle the spawning of mobs. The proc recieves the mob that will be spawned, + * Used by the vent clog random event to handle the spawning of mobs. The proc receives the mob that will be spawned, * and the event's current list of living mobs produced by the event so far. After checking if the vent is welded, the * new mob is created on the vent's turf, then added to the living_mobs list. */ @@ -227,8 +228,9 @@ ) return pick(mob_list) -/datum/round_event/vent_clog/major/announce() - priority_announce("Major biological obstruction detected in the ventilation network. Blockage is believed to be in the [get_area_name(vent)] area.", "Infestation Alert") +/datum/round_event/vent_clog/major/announce(fake) + var/area/event_area = fake ? pick(GLOB.teleportlocs) : get_area_name(vent) + priority_announce("Major biological obstruction detected in the ventilation network. Blockage is believed to be in the [event_area] area.", "Infestation Alert") /datum/round_event_control/vent_clog/critical name = "Ventilation Clog: Critical" @@ -250,8 +252,9 @@ /obj/effect/decal/cleanable/blood/splatter, ) -/datum/round_event/vent_clog/critical/announce() - priority_announce("Potentially hazardous lifesigns detected in the [get_area_name(vent)] ventilation network.", "Security Alert") +/datum/round_event/vent_clog/critical/announce(fake) + var/area/event_area = fake ? pick(GLOB.teleportlocs) : get_area_name(vent) + priority_announce("Potentially hazardous lifesigns detected in the [event_area] ventilation network.", "Security Alert") /datum/round_event/vent_clog/critical/get_mob() var/static/list/mob_list = list( @@ -282,8 +285,9 @@ /obj/effect/decal/cleanable/vomit, ) -/datum/round_event/vent_clog/strange/announce() - priority_announce("Unusual lifesign readings detected in the [get_area_name(vent)] ventilation network.", "Lifesign Alert", ANNOUNCER_ALIENS) +/datum/round_event/vent_clog/strange/announce(fake) + var/area/event_area = fake ? pick(GLOB.teleportlocs) : get_area_name(vent) + priority_announce("Unusual lifesign readings detected in the [event_area] ventilation network.", "Lifesign Alert", ANNOUNCER_ALIENS) /datum/round_event/vent_clog/strange/get_mob() var/static/list/mob_list = list( diff --git a/code/modules/events/wisdomcow.dm b/code/modules/events/wisdomcow.dm index 1ecd43797e5898..1697db3e6172b8 100644 --- a/code/modules/events/wisdomcow.dm +++ b/code/modules/events/wisdomcow.dm @@ -20,7 +20,7 @@ var/selected_experience /datum/round_event/wisdomcow/announce(fake) - priority_announce("A wise cow has been spotted in the area. Be sure to ask for her advice.", "Nanotrasen Cow Ranching Agency") + priority_announce("A wise cow has been spotted in the area. Be sure to ask for her advice.", "Symphionia Cow Ranching Agency") /datum/round_event/wisdomcow/start() var/turf/targetloc diff --git a/code/modules/events/wizard/curseditems.dm b/code/modules/events/wizard/curseditems.dm index 85b9c34b3072a3..b96206ecfa618c 100644 --- a/code/modules/events/wizard/curseditems.dm +++ b/code/modules/events/wizard/curseditems.dm @@ -1,3 +1,16 @@ +/// Turns them into a psuedo-wizard costume. +#define WIZARD_MIMICRY "wizardmimic" +/// Gives them a cursed sword. +#define CURSED_SWORDS "swords" +/// Gives them a blunt that they need to smoke +#define BIG_FAT_DOOBIE "bigfatdoobie" +/// Gives them boxing gloves and a luchador mask +#define BOXING "boxing" +/// Gives them a chameleon mask +#define VOICE_MODULATORS "voicemodulators" +/// Gives them kitty ears and also modifies their gender to FEMALE +#define CATGIRLS_2015 "catgirls2015" + /datum/round_event_control/wizard/cursed_items //fashion disasters name = "Cursed Items" weight = 3 @@ -11,52 +24,72 @@ //item you want to equip to the hand, and set its slots_flags = null. Only items equiped to hands need do this. /datum/round_event/wizard/cursed_items/start() - var/item_set = pick("wizardmimic", "swords", "bigfatdoobie", "boxing", "voicemodulators") //SKYRAT EDIT - WIZARD CHANGES - ORIGINAL - var/item_set = pick("wizardmimic", "swords", "bigfatdoobie", "boxing", "voicemodulators", "catgirls2015") + var/item_set = pick( + BIG_FAT_DOOBIE, + BOXING, +// CATGIRLS_2015, // NOVA EDIT REMOVAL + CURSED_SWORDS, + VOICE_MODULATORS, + WIZARD_MIMICRY, + ) var/list/loadout[SLOTS_AMT] - var/ruins_spaceworthiness - var/ruins_wizard_loadout + var/ruins_spaceworthiness = FALSE + var/ruins_wizard_loadout = FALSE switch(item_set) - if("wizardmimic") - loadout[ITEM_SLOT_OCLOTHING] = /obj/item/clothing/suit/wizrobe - loadout[ITEM_SLOT_FEET] = /obj/item/clothing/shoes/sandal/magic - loadout[ITEM_SLOT_HEAD] = /obj/item/clothing/head/wizard - ruins_spaceworthiness = 1 - if("swords") - loadout[ITEM_SLOT_HANDS] = /obj/item/katana/cursed - if("bigfatdoobie") + if(BIG_FAT_DOOBIE) loadout[ITEM_SLOT_MASK] = /obj/item/clothing/mask/cigarette/rollie/trippy - ruins_spaceworthiness = 1 - if("boxing") + ruins_spaceworthiness = TRUE + if(BOXING) loadout[ITEM_SLOT_MASK] = /obj/item/clothing/mask/luchador loadout[ITEM_SLOT_GLOVES] = /obj/item/clothing/gloves/boxing - ruins_spaceworthiness = 1 - if("voicemodulators") - loadout[ITEM_SLOT_MASK] = /obj/item/clothing/mask/chameleon - if("catgirls2015") + ruins_spaceworthiness = TRUE + if(CATGIRLS_2015) loadout[ITEM_SLOT_HEAD] = /obj/item/clothing/head/costume/kitty - ruins_spaceworthiness = 1 - ruins_wizard_loadout = 1 + ruins_spaceworthiness = TRUE + ruins_wizard_loadout = TRUE + if(CURSED_SWORDS) + loadout[ITEM_SLOT_HANDS] = /obj/item/katana/cursed + if(VOICE_MODULATORS) + loadout[ITEM_SLOT_MASK] = /obj/item/clothing/mask/chameleon + if(WIZARD_MIMICRY) + loadout[ITEM_SLOT_OCLOTHING] = /obj/item/clothing/suit/wizrobe + loadout[ITEM_SLOT_FEET] = /obj/item/clothing/shoes/sandal/magic + loadout[ITEM_SLOT_HEAD] = /obj/item/clothing/head/wizard + ruins_spaceworthiness = TRUE + var/list/mob/living/carbon/human/victims = list() - for(var/mob/living/carbon/human/H in GLOB.alive_mob_list) - if(ruins_spaceworthiness && !is_station_level(H.z) || isspaceturf(H.loc) || isplasmaman(H)) + for(var/mob/living/carbon/human/target in GLOB.alive_mob_list) + if(isspaceturf(target.loc) || !isnull(target.dna.species.outfit_important_for_life) || (ruins_spaceworthiness && !is_station_level(target.z))) continue //#savetheminers - if(ruins_wizard_loadout && IS_WIZARD(H)) + if(ruins_wizard_loadout && IS_WIZARD(target)) continue - if(item_set == "catgirls2015") //Wizard code means never having to say you're sorry - H.gender = FEMALE - for(var/i in 1 to loadout.len) - if(loadout[i]) - var/obj/item/J = loadout[i] - var/obj/item/I = new J //dumb but required because of byond throwing a fit anytime new gets too close to a list - H.dropItemToGround(H.get_item_by_slot(i), TRUE) - H.equip_to_slot_or_del(I, i, indirect_action = TRUE) - ADD_TRAIT(I, TRAIT_NODROP, CURSED_ITEM_TRAIT(I)) - I.item_flags |= DROPDEL - I.name = "cursed " + I.name - - for(var/mob/living/carbon/human/victim in GLOB.alive_mob_list) + if(item_set == CATGIRLS_2015) //Wizard code means never having to say you're sorry + target.gender = FEMALE + for(var/iterable in 1 to loadout.len) + if(!loadout[iterable]) + continue + + var/obj/item/item_type = loadout[iterable] + var/obj/item/thing = new item_type //dumb but required because of byond throwing a fit anytime new gets too close to a list + + target.dropItemToGround(target.get_item_by_slot(iterable), TRUE) + target.equip_to_slot_or_del(thing, iterable, indirect_action = TRUE) + ADD_TRAIT(thing, TRAIT_NODROP, CURSED_ITEM_TRAIT(thing)) + thing.item_flags |= DROPDEL + thing.name = "cursed " + thing.name + + victims += target + + for(var/mob/living/carbon/human/victim as anything in victims) var/datum/effect_system/fluid_spread/smoke/smoke = new smoke.set_up(0, holder = victim, location = victim.loc) smoke.start() + +#undef BIG_FAT_DOOBIE +#undef BOXING +#undef CATGIRLS_2015 +#undef CURSED_SWORDS +#undef VOICE_MODULATORS +#undef WIZARD_MIMICRY diff --git a/code/modules/events/wizard/imposter.dm b/code/modules/events/wizard/imposter.dm index 4a927c052ed535..829942261427ee 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/petsplosion.dm b/code/modules/events/wizard/petsplosion.dm index a9664d8dd47e29..a755af9f644ee6 100644 --- a/code/modules/events/wizard/petsplosion.dm +++ b/code/modules/events/wizard/petsplosion.dm @@ -9,6 +9,7 @@ GLOBAL_LIST_INIT(petsplosion_candidates, typecacheof(list( /mob/living/basic/lizard, /mob/living/basic/mothroach, /mob/living/basic/mouse/brown/tom, + /mob/living/basic/parrot, /mob/living/basic/pet, /mob/living/basic/pig, /mob/living/basic/rabbit, @@ -17,13 +18,12 @@ GLOBAL_LIST_INIT(petsplosion_candidates, typecacheof(list( /mob/living/basic/snake, /mob/living/basic/spider/giant/sgt_araneus, /mob/living/simple_animal/hostile/retaliate/goose/vomit, - /mob/living/simple_animal/parrot, /mob/living/simple_animal/pet, ))) /datum/round_event_control/wizard/petsplosion //the horror name = "Petsplosion" - weight = 0 //SKYRAT EDIT CHANGE - WIZARD CHANGE - ORIGINAL weight = 2 + weight = 0 //NOVA EDIT CHANGE - WIZARD CHANGE - ORIGINAL weight = 2 typepath = /datum/round_event/wizard/petsplosion max_occurrences = 1 //Exponential growth is nothing to sneeze at! earliest_start = 0 MINUTES diff --git a/code/modules/events/wizard/race.dm b/code/modules/events/wizard/race.dm index a9ef199bf76092..288bb52b2fbc59 100644 --- a/code/modules/events/wizard/race.dm +++ b/code/modules/events/wizard/race.dm @@ -1,6 +1,6 @@ /datum/round_event_control/wizard/race //Lizard Wizard? Lizard Wizard. name = "Race Swap" - weight = 0 //SKYRAT EDIT CHANGE - WIZARD CHANGE - ORIGINAL weight = 2 + weight = 0 //NOVA EDIT CHANGE - WIZARD CHANGE - ORIGINAL weight = 2 typepath = /datum/round_event/wizard/race max_occurrences = 5 earliest_start = 0 MINUTES diff --git a/code/modules/events/wizard/shuffle.dm b/code/modules/events/wizard/shuffle.dm index 0ffe8966eea977..696111c5814db1 100644 --- a/code/modules/events/wizard/shuffle.dm +++ b/code/modules/events/wizard/shuffle.dm @@ -42,7 +42,7 @@ /datum/round_event_control/wizard/shufflenames //Face/off joke name = "Change Faces!" - weight = 0 //SKYRAT EDIT CHANGE - WIZARD CHANGE - ORIGINAL weight = 4 + weight = 0 //NOVA EDIT CHANGE - WIZARD CHANGE - ORIGINAL weight = 4 typepath = /datum/round_event/wizard/shufflenames max_occurrences = 5 earliest_start = 0 MINUTES @@ -77,7 +77,7 @@ /datum/round_event_control/wizard/shuffleminds //Basically Mass Ranged Mindswap name = "Change Minds!" - weight = 0 //SKYRAT EDIT CHANGE - WIZARD CHANGE - ORIGINAL weight = 1 + weight = 0 //NOVA EDIT CHANGE - WIZARD CHANGE - ORIGINAL weight = 1 typepath = /datum/round_event/wizard/shuffleminds max_occurrences = 3 earliest_start = 0 MINUTES diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm index b04f2a4f595820..7dcaf0861c3ff7 100644 --- a/code/modules/events/wormholes.dm +++ b/code/modules/events/wormholes.dm @@ -54,6 +54,7 @@ GLOBAL_LIST_EMPTY(all_wormholes) // So we can pick wormholes to teleport to icon_state = "anom" mech_sized = TRUE light_on = FALSE + wibbles = 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 1259f56597d6da..e3e8360e606801 100644 --- a/code/modules/experisci/experiment/experiments.dm +++ b/code/modules/experisci/experiment/experiments.dm @@ -40,12 +40,12 @@ total_requirement = 3 max_requirement_per_type = 2 possible_types = list( + /mob/living/basic/pet/cat, /mob/living/basic/carp, /mob/living/basic/chicken, /mob/living/basic/cow, /mob/living/basic/pet/dog/corgi, /mob/living/basic/snake, - /mob/living/simple_animal/pet/cat, ) /datum/experiment/scanning/random/cytology/medium/one @@ -253,7 +253,7 @@ /datum/experiment/scanning/points/machinery_pinpoint_scan/tier2_microlaser name = "High-power Micro-lasers Calibration" - description = "Our Nanotrasen High-Power Office-Ready Laser Pointer ™ isn't powerful enough to strike airborne Syndidrones out of the sky yet. Find us some diode applications for hints on how to improve them!" + description = "Our Symphionia High-Power Office-Ready Laser Pointer ™ isn't powerful enough to strike airborne Syndidrones out of the sky yet. Find us some diode applications for hints on how to improve them!" required_points = 10 required_atoms = list( /obj/machinery/mecha_part_fabricator = 1, @@ -296,7 +296,7 @@ /datum/experiment/scanning/points/machinery_pinpoint_scan/tier3_cells name = "Power Cells Capacity Test" - description = "Nanotrasen has two major problems with their new Hamster-powered Generator Array: excess of power produced and violent protests of Animal Rights Consortium activists over genetically modifying hamsters with the Hulk gene. We place dibs on dealing with the latter!" + description = "Symphionia has two major problems with their new Hamster-powered Generator Array: excess of power produced and violent protests of Animal Rights Consortium activists over genetically modifying hamsters with the Hulk gene. We place dibs on dealing with the latter!" required_points = 8 required_atoms = list( /obj/machinery/recharge_station = 1, @@ -327,7 +327,7 @@ description = "Your exosuit fabricators allow for rapid production on a small scale, but the structural integrity of created parts is inferior to more traditional means." exp_tag = "Scan" possible_types = list(/obj/vehicle/sealed/mecha) - total_requirement = 2 + total_requirement = 1 ///Damage percent that each mech needs to be at for a scan to work. var/damage_percent @@ -339,14 +339,24 @@ /datum/experiment/scanning/random/mecha_damage_scan/final_contributing_index_checks(atom/target, typepath) var/found_percent = round((target.get_integrity() / target.max_integrity) * 100) - return ..() && (found_percent <= (damage_percent + 2) && found_percent >= (damage_percent - 2)) + return ..() && ISINRANGE(found_percent, damage_percent - 5, damage_percent + 5) -/datum/experiment/scanning/random/mecha_destroyed_scan - name = "Exosuit Materials 2: Excessive Damage Test" - description = "As an extension of testing exosuit damage results, scanning examples of complete structural failure will accelerate our material stress simulations." - possible_types = list(/obj/structure/mecha_wreckage) +/datum/experiment/scanning/random/mecha_equipped_scan + name = "Exosuit Materials 2: Load Strain Test" + description = "Exosuit equipment places unique strain upon the structure of the vehicle. Scan exosuits you have assembled from your exosuit fabricator and fully equipped to accelerate our structural stress simulations." + possible_types = list(/obj/vehicle/sealed/mecha) total_requirement = 2 +/datum/experiment/scanning/random/mecha_equipped_scan/final_contributing_index_checks(atom/target, typepath) + var/obj/vehicle/sealed/mecha/stompy = target + if(!istype(stompy)) + return FALSE //Not a mech + if(!HAS_TRAIT(stompy,TRAIT_MECHA_CREATED_NORMALLY)) + return FALSE //Not hand-crafted + if(!(stompy.equip_by_category[MECHA_L_ARM] && stompy.equip_by_category[MECHA_R_ARM])) + return FALSE //Both arms need be filled + return ..() + /// Scan for organs you didn't start the round with /datum/experiment/scanning/people/novel_organs name = "Human Field Research: Divergent Biology" diff --git a/code/modules/experisci/experiment/handlers/experiment_handler.dm b/code/modules/experisci/experiment/handlers/experiment_handler.dm index 29e7da95391554..ef4cd581cb9501 100644 --- a/code/modules/experisci/experiment/handlers/experiment_handler.dm +++ b/code/modules/experisci/experiment/handlers/experiment_handler.dm @@ -72,7 +72,7 @@ GLOB.experiment_handlers += src -/datum/component/experiment_handler/Destroy(force, silent) +/datum/component/experiment_handler/Destroy(force) . = ..() GLOB.experiment_handlers -= src diff --git a/code/modules/experisci/handheld_scanner.dm b/code/modules/experisci/handheld_scanner.dm index 92031107ba51d1..d09b6bca7e34b3 100644 --- a/code/modules/experisci/handheld_scanner.dm +++ b/code/modules/experisci/handheld_scanner.dm @@ -7,7 +7,7 @@ name = "Experi-Scanner" desc = "A handheld scanner used for completing the many experiments of modern science." w_class = WEIGHT_CLASS_SMALL - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/scanner.dmi' icon_state = "experiscanner" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' diff --git a/code/modules/explorer_drone/TODO.txt b/code/modules/explorer_drone/TODO.txt deleted file mode 100644 index fb0706cab177bb..00000000000000 --- a/code/modules/explorer_drone/TODO.txt +++ /dev/null @@ -1,11 +0,0 @@ -Future improvements: - Better names/descriptions for ships/trading/planets - More fluff lines for each site type. - Adventure-Maker : styling aaaaah. - Adventure-Maker : Consider parsing define hard-configured dm file for constants - Typelists for event/site stuff to reduce costs - Figure out some way to cache adventure prototypes / defer loading somehow so it scales better with a lot of adventure files. - Unit test for json loading? - Mk II drones with more tool slots/other buffs researchable at R&D ? - Could use more scan conditions - Exit Node - Random Node diff --git a/code/modules/explorer_drone/exploration_events/resource.dm b/code/modules/explorer_drone/exploration_events/resource.dm index 2264bc6bd481d2..d25729c3826584 100644 --- a/code/modules/explorer_drone/exploration_events/resource.dm +++ b/code/modules/explorer_drone/exploration_events/resource.dm @@ -215,7 +215,7 @@ description = "You meet an inhabitant of this site, looking ragged and clearly agitated about something." no_tool_description = "You can't tell what it's trying to convey without a translator." has_tool_description = "Your best translation dictates that it would like to share its hobby with you!" - success_log = "Recieved a gift from a stranger." + success_log = "Received a gift from a stranger." delay_message = "Enduring..." action_text = "Accept gift." loot_type = /obj/item/cardpack/series_one @@ -282,7 +282,7 @@ has_tool_description = "Your drill will allow you to extract the deposit!" action_text = "Mine" delay_message = "Mining..." - var/static/list/possible_materials = list(/datum/material/silver,/datum/material/bananium) //only add materials with sheet type here //SKYRAT EDIT - REMOVED /datum/material/pizza + var/static/list/possible_materials = list(/datum/material/silver,/datum/material/bananium) //only add materials with sheet type here //NOVA EDIT - REMOVED /datum/material/pizza var/loot_amount = 30 var/chosen_material_type diff --git a/code/modules/explorer_drone/exploration_site.dm b/code/modules/explorer_drone/exploration_site.dm index 9a21203d5962e8..00a9a66212149f 100644 --- a/code/modules/explorer_drone/exploration_site.dm +++ b/code/modules/explorer_drone/exploration_site.dm @@ -221,7 +221,7 @@ GLOBAL_LIST_EMPTY(exploration_sites) /datum/exploration_site/uncharted_planet name = "uncharted planet" - description = "A planet missing from Nanotrasen starcharts." + description = "A planet missing from Symphionia starcharts." band_info = list(EXOSCANNER_BAND_LIFE = 3) site_traits = list(EXPLORATION_SITE_SURFACE) diff --git a/code/modules/explorer_drone/loot.dm b/code/modules/explorer_drone/loot.dm index 121880af7ce483..3f3d6f6c520d76 100644 --- a/code/modules/explorer_drone/loot.dm +++ b/code/modules/explorer_drone/loot.dm @@ -96,10 +96,10 @@ GLOBAL_LIST_INIT(adventure_loot_generator_index,generate_generator_index()) id = "pets" var/carrier_type = /obj/item/pet_carrier/biopod var/list/possible_pets = list( + /mob/living/basic/pet/cat/space, /mob/living/basic/pet/dog/corgi, /mob/living/basic/pet/dog/pug, /mob/living/basic/pet/penguin/baby, - /mob/living/simple_animal/pet/cat/space, ) /datum/adventure_loot_generator/pet/generate() diff --git a/code/modules/explorer_drone/manager.dm b/code/modules/explorer_drone/manager.dm index 9ca85ca4a20a59..00909d03abf9d7 100644 --- a/code/modules/explorer_drone/manager.dm +++ b/code/modules/explorer_drone/manager.dm @@ -79,7 +79,7 @@ /datum/adventure_browser/ui_assets(mob/user) return list(get_asset_datum(/datum/asset/simple/adventure)) -/datum/adventure_browser/Destroy(force, ...) +/datum/adventure_browser/Destroy(force) . = ..() QDEL_NULL(temp_adventure) diff --git a/code/modules/explorer_drone/scanner_array.dm b/code/modules/explorer_drone/scanner_array.dm index 7f019b0d43cabb..05f1d9a8b8fa48 100644 --- a/code/modules/explorer_drone/scanner_array.dm +++ b/code/modules/explorer_drone/scanner_array.dm @@ -71,7 +71,7 @@ GLOBAL_LIST_INIT(scan_conditions,init_scan_conditions()) SEND_SIGNAL(src,COMSIG_EXOSCAN_INTERRUPTED) qdel(src) -/datum/exoscan/Destroy(force, ...) +/datum/exoscan/Destroy(force) . = ..() deltimer(scan_timer) @@ -262,7 +262,7 @@ GLOBAL_LIST_INIT(scan_conditions,init_scan_conditions()) /obj/machinery/exoscanner/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool, time = 1 SECONDS) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/exoscanner/set_anchored(anchorvalue) . = ..() diff --git a/code/modules/fishing/aquarium/aquarium.dm b/code/modules/fishing/aquarium/aquarium.dm index f0d5c7083ecd0f..88d0791acdf99f 100644 --- a/code/modules/fishing/aquarium/aquarium.dm +++ b/code/modules/fishing/aquarium/aquarium.dm @@ -79,7 +79,7 @@ if(!reagents.total_volume) RegisterSignal(reagents, COMSIG_REAGENTS_NEW_REAGENT, PROC_REF(start_autofeed)) return PROCESS_KILL - if(world.time + feeding_interval > last_feeding) + if(world.time < last_feeding + feeding_interval) return last_feeding = world.time var/list/fishes = get_fishes() @@ -159,7 +159,7 @@ /obj/structure/aquarium/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/aquarium/plunger_act(obj/item/plunger/P, mob/living/user, reinforced) if(!panel_open) diff --git a/code/modules/fishing/aquarium/fish_analyzer.dm b/code/modules/fishing/aquarium/fish_analyzer.dm index a83aa4296b6c91..2706da8e9671b5 100644 --- a/code/modules/fishing/aquarium/fish_analyzer.dm +++ b/code/modules/fishing/aquarium/fish_analyzer.dm @@ -1,13 +1,13 @@ ///An item that can be used to gather information on the fish, such as but not limited to: health, hunger and traits. /obj/item/fish_analyzer name = "fish analyzer" - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/scanner.dmi' icon_state = "fish_analyzer_map" base_icon_state = "fish_analyzer" inhand_icon_state = "fish_analyzer" worn_icon_state = "fish_analyzer" desc = "A fish-shaped scanner used to monitor fish's status and evolutionary traits." - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = NOBLUDGEON slot_flags = ITEM_SLOT_BELT throwforce = 3 diff --git a/code/modules/fishing/fish/_fish.dm b/code/modules/fishing/fish/_fish.dm index 26b7693f4aa86e..90fb2afc796b86 100644 --- a/code/modules/fishing/fish/_fish.dm +++ b/code/modules/fishing/fish/_fish.dm @@ -441,13 +441,13 @@ //Fish breeding stops if fish count exceeds this. #define AQUARIUM_MAX_BREEDING_POPULATION 20 -/obj/item/fish/proc/ready_to_reproduce(being_targetted = FALSE) +/obj/item/fish/proc/ready_to_reproduce(being_targeted = FALSE) var/obj/structure/aquarium/aquarium = loc if(!istype(aquarium)) return FALSE - if(being_targetted && HAS_TRAIT(src, TRAIT_FISH_NO_MATING)) + if(being_targeted && HAS_TRAIT(src, TRAIT_FISH_NO_MATING)) return FALSE - if(!being_targetted && length(aquarium.get_fishes()) >= AQUARIUM_MAX_BREEDING_POPULATION) + if(!being_targeted && length(aquarium.get_fishes()) >= AQUARIUM_MAX_BREEDING_POPULATION) return FALSE return aquarium.allow_breeding && health >= initial(health) * 0.8 && stable_population > 1 && world.time >= breeding_wait diff --git a/code/modules/fishing/fish/fish_traits.dm b/code/modules/fishing/fish/fish_traits.dm index 63de4cfdf1dced..f247d11ef8484d 100644 --- a/code/modules/fishing/fish/fish_traits.dm +++ b/code/modules/fishing/fish/fish_traits.dm @@ -70,7 +70,7 @@ GLOBAL_LIST_INIT(fish_traits, init_subtypes_w_path_keys(/datum/fish_trait, list( if(!rod.bait) .[MULTIPLICATIVE_FISHING_MOD] = 0 return - if(HAS_TRAIT(rod.bait, OMNI_BAIT_TRAIT)) + if(HAS_TRAIT(rod.bait, TRAIT_OMNI_BAIT)) return if(HAS_TRAIT(rod.bait, TRAIT_GOOD_QUALITY_BAIT) || HAS_TRAIT(rod.bait, TRAIT_GREAT_QUALITY_BAIT)) .[MULTIPLICATIVE_FISHING_MOD] = 0 @@ -115,7 +115,7 @@ GLOBAL_LIST_INIT(fish_traits, init_subtypes_w_path_keys(/datum/fish_trait, list( if(!rod.bait) .[MULTIPLICATIVE_FISHING_MOD] = 0 return - if(HAS_TRAIT(rod.bait, OMNI_BAIT_TRAIT)) + if(HAS_TRAIT(rod.bait, TRAIT_OMNI_BAIT)) return if(!istype(rod.bait, /obj/item/food)) .[MULTIPLICATIVE_FISHING_MOD] = 0 @@ -134,7 +134,7 @@ GLOBAL_LIST_INIT(fish_traits, init_subtypes_w_path_keys(/datum/fish_trait, list( if(!rod.bait) .[MULTIPLICATIVE_FISHING_MOD] = 0 return - if(HAS_TRAIT(rod.bait, OMNI_BAIT_TRAIT)) + if(HAS_TRAIT(rod.bait, TRAIT_OMNI_BAIT)) return if(!istype(rod.bait, /obj/item/food/grown)) .[MULTIPLICATIVE_FISHING_MOD] = 0 diff --git a/code/modules/fishing/fishing_minigame.dm b/code/modules/fishing/fishing_minigame.dm index 7744bcc01bee07..81e8b3a6943d9c 100644 --- a/code/modules/fishing/fishing_minigame.dm +++ b/code/modules/fishing/fishing_minigame.dm @@ -199,7 +199,7 @@ bait_height -= difficulty bait_pixel_height = round(MINIGAME_BAIT_HEIGHT * (bait_height/initial(bait_height)), 1) -/datum/fishing_challenge/Destroy(force, ...) +/datum/fishing_challenge/Destroy(force) if(!completed) complete(win = FALSE) if(fishing_line) diff --git a/code/modules/fishing/fishing_portal_machine.dm b/code/modules/fishing/fishing_portal_machine.dm index b156a37ba05503..37b2c1f0090589 100644 --- a/code/modules/fishing/fishing_portal_machine.dm +++ b/code/modules/fishing/fishing_portal_machine.dm @@ -19,7 +19,7 @@ /obj/machinery/fishing_portal_generator/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/fishing_portal_generator/examine(mob/user) . = ..() diff --git a/code/modules/fishing/sources/_fish_source.dm b/code/modules/fishing/sources/_fish_source.dm index 657b2f30968b74..120348038f1a35 100644 --- a/code/modules/fishing/sources/_fish_source.dm +++ b/code/modules/fishing/sources/_fish_source.dm @@ -66,7 +66,7 @@ GLOBAL_LIST_INIT(specific_fish_icons, zebra_typecacheof(list( return /// Can we fish in this spot at all. Returns DENIAL_REASON or null if we're good to go -/datum/fish_source/proc/reason_we_cant_fish(obj/item/fishing_rod/rod, mob/fisherman) +/datum/fish_source/proc/reason_we_cant_fish(obj/item/fishing_rod/rod, mob/fisherman, atom/parent) return rod.reason_we_cant_fish(src) /** @@ -170,10 +170,13 @@ GLOBAL_LIST_INIT(specific_fish_icons, zebra_typecacheof(list( var/atom/movable/reward = spawn_reward(reward_path, fisherman, fishing_spot) if(!reward) //balloon alert instead - fisherman.balloon_alert(fisherman,pick(duds)) + fisherman.balloon_alert(fisherman, pick(duds)) return if(isitem(reward)) //Try to put it in hand INVOKE_ASYNC(fisherman, TYPE_PROC_REF(/mob, put_in_hands), reward) + else if(istype(reward, /obj/effect/spawner)) // Do not attempt to forceMove() a spawner. It will break things, and the spawned item should already be at the mob's turf by now. + fisherman.balloon_alert(fisherman, "caught something!") + return else // for fishing things like corpses, move them to the turf of the fisherman INVOKE_ASYNC(reward, TYPE_PROC_REF(/atom/movable, forceMove), get_turf(fisherman)) fisherman.balloon_alert(fisherman, "caught [reward]!") @@ -250,7 +253,7 @@ GLOBAL_LIST(fishing_property_cache) final_table[result] = round(final_table[result] * 3.5, 1) else if(HAS_TRAIT(bait, TRAIT_BASIC_QUALITY_BAIT)) final_table[result] *= 2 - if(!HAS_TRAIT(bait, OMNI_BAIT_TRAIT)) + if(!HAS_TRAIT(bait, TRAIT_OMNI_BAIT)) //Bait matching likes doubles the chance var/list/fav_bait = fish_list_properties[result][NAMEOF(caught_fish, favorite_bait)] for(var/bait_identifer in fav_bait) diff --git a/code/modules/fishing/sources/source_types.dm b/code/modules/fishing/sources/source_types.dm index e2e5491dd1d3db..ceb9a96f2297ea 100644 --- a/code/modules/fishing/sources/source_types.dm +++ b/code/modules/fishing/sources/source_types.dm @@ -98,8 +98,8 @@ /obj/item/fish/donkfish = 5, /obj/item/fish/emulsijack = 5, ) - catalog_description = "Syndicate dimension (Fishing portal generator)" - radial_name = "Syndicate" + catalog_description = "Symphionia dimension (Fishing portal generator)" + radial_name = "Symphionia" fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 15 overlay_state = "portal_syndicate" radial_state = "syndi_snake" @@ -216,7 +216,7 @@ fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 10 -/datum/fish_source/lavaland/reason_we_cant_fish(obj/item/fishing_rod/rod, mob/fisherman) +/datum/fish_source/lavaland/reason_we_cant_fish(obj/item/fishing_rod/rod, mob/fisherman, atom/parent) . = ..() var/turf/approx = get_turf(fisherman) //todo pass the parent if(!SSmapping.level_trait(approx.z, ZTRAIT_MINING)) @@ -277,7 +277,7 @@ ) fishing_difficulty = FISHING_DEFAULT_DIFFICULTY - 5 -/datum/fish_source/holographic/reason_we_cant_fish(obj/item/fishing_rod/rod, mob/fisherman) +/datum/fish_source/holographic/reason_we_cant_fish(obj/item/fishing_rod/rod, mob/fisherman, atom/parent) . = ..() if(!istype(get_area(fisherman), /area/station/holodeck)) return "You need to be inside the Holodeck to catch holographic fish." @@ -310,3 +310,63 @@ /obj/item/fish/mastodon = 1, ) fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 15 + +#define RANDOM_SEED "Random seed" + +/datum/fish_source/hydro_tray + catalog_description = "Hydroponics trays" + fish_table = list( + FISHING_DUD = 25, + /obj/item/food/grown/grass = 25, + RANDOM_SEED = 16, + /obj/item/seeds/grass = 6, + /obj/item/seeds/random = 1, + /mob/living/basic/frog = 1, + /mob/living/basic/axolotl = 1, + ) + fish_counts = list( + /obj/item/food/grown/grass = 10, + /obj/item/seeds/grass = 4, + RANDOM_SEED = 4, + /obj/item/seeds/random = 1, + /mob/living/basic/frog = 1, + /mob/living/basic/axolotl = 1, + ) + fishing_difficulty = FISHING_DEFAULT_DIFFICULTY - 10 + +/datum/fish_source/hydro_tray/reason_we_cant_fish(obj/item/fishing_rod/rod, mob/fisherman, atom/parent) + if(!istype(parent, /obj/machinery/hydroponics/constructable)) + return ..() + + var/obj/machinery/hydroponics/constructable/basin = parent + if(basin.waterlevel <= 0) + return "There's no water in [parent] to fish in." + if(basin.myseed) + return "There's a plant growing in [parent]." + + return ..() + +/datum/fish_source/hydro_tray/spawn_reward(reward_path, mob/fisherman, turf/fishing_spot) + if(reward_path != RANDOM_SEED) + var/mob/living/created_reward = ..() + if(istype(created_reward)) + created_reward.name = "small [created_reward.name]" + created_reward.update_transform(0.75) + return created_reward + + var/static/list/seeds_to_draw_from + if(isnull(seeds_to_draw_from)) + seeds_to_draw_from = subtypesof(/obj/item/seeds) + // These two are already covered innately + seeds_to_draw_from -= /obj/item/seeds/random + seeds_to_draw_from -= /obj/item/seeds/grass + // -1 yield are unharvestable plants so we don't care + // 20 rarirty is where most of the wacky plants are so let's ignore them + for(var/obj/item/seeds/seed_path as anything in seeds_to_draw_from) + if(initial(seed_path.yield) == -1 || initial(seed_path.rarity) >= PLANT_MODERATELY_RARE) + seeds_to_draw_from -= seed_path + + var/picked_path = pick(seeds_to_draw_from) + return new picked_path(get_turf(fishing_spot)) + +#undef RANDOM_SEED diff --git a/code/modules/flufftext/Dreaming.dm b/code/modules/flufftext/Dreaming.dm index 06472f84be606e..400e024b8b0f30 100644 --- a/code/modules/flufftext/Dreaming.dm +++ b/code/modules/flufftext/Dreaming.dm @@ -1,3 +1,5 @@ +#define DREAMING_SOURCE "dreaming_source" + /** * Begins the dreaming process on a sleeping carbon. * @@ -6,7 +8,7 @@ */ /mob/living/carbon/proc/handle_dreams() - if(prob(10) && !dreaming) + if(!HAS_TRAIT(src, TRAIT_DREAMING) && prob(10)) dream() /** @@ -22,7 +24,7 @@ var/datum/dream/chosen_dream = pick_weight(GLOB.dreams) - dreaming = TRUE + ADD_TRAIT(src, TRAIT_DREAMING, DREAMING_SOURCE) dream_sequence(chosen_dream.GenerateDream(src), chosen_dream) /** @@ -38,7 +40,7 @@ /mob/living/carbon/proc/dream_sequence(list/dream_fragments, datum/dream/current_dream) if(stat != UNCONSCIOUS || HAS_TRAIT(src, TRAIT_CRITICAL_CONDITION)) - dreaming = FALSE + REMOVE_TRAIT(src, TRAIT_DREAMING, DREAMING_SOURCE) current_dream.OnDreamEnd(src) return var/next_message = dream_fragments[1] @@ -56,7 +58,7 @@ AdjustSleeping(next_wait) addtimer(CALLBACK(src, PROC_REF(dream_sequence), dream_fragments, current_dream), next_wait) else - dreaming = FALSE + REMOVE_TRAIT(src, TRAIT_DREAMING, DREAMING_SOURCE) current_dream.OnDreamEnd(src) //------------------------- @@ -180,3 +182,5 @@ GLOBAL_LIST_INIT(dreams, populate_dream_list()) /datum/dream/hear_something/proc/StopSound(mob/living/carbon/dreamer) SEND_SOUND(dreamer, sound(channel=reserved_sound_channel)) + +#undef DREAMING_SOURCE diff --git a/code/modules/food_and_drinks/machinery/coffeemaker.dm b/code/modules/food_and_drinks/machinery/coffeemaker.dm index ff6d3fd0c8a313..5f6ef410413e59 100644 --- a/code/modules/food_and_drinks/machinery/coffeemaker.dm +++ b/code/modules/food_and_drinks/machinery/coffeemaker.dm @@ -177,7 +177,7 @@ /obj/machinery/coffeemaker/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/coffeemaker/attackby(obj/item/attack_item, mob/living/user, params) //You can only screw open empty grinder @@ -484,6 +484,7 @@ contents_tag = "coffee cartridge" open_status = FANCY_CONTAINER_ALWAYS_OPEN spawn_type = /obj/item/coffee_cartridge + spawn_count = 1 /obj/item/storage/fancy/coffee_cart_rack/Initialize(mapload) . = ..() diff --git a/code/modules/food_and_drinks/machinery/deep_fryer.dm b/code/modules/food_and_drinks/machinery/deep_fryer.dm index a22aad4aec879b..15f39d3ac28705 100644 --- a/code/modules/food_and_drinks/machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/machinery/deep_fryer.dm @@ -14,7 +14,7 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list( /obj/item/reagent_containers/syringe, ))) -/obj/machinery/deepfryer//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/machinery/deepfryer//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "deep fryer" desc = "Deep fried everything." icon = 'icons/obj/machines/kitchen.dmi' @@ -85,7 +85,7 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list( /obj/machinery/deepfryer/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/deepfryer/attackby(obj/item/weapon, mob/user, params) // Dissolving pills into the frier diff --git a/code/modules/food_and_drinks/machinery/food_cart.dm b/code/modules/food_and_drinks/machinery/food_cart.dm index fe88e43b5236e9..da92d040f270e0 100644 --- a/code/modules/food_and_drinks/machinery/food_cart.dm +++ b/code/modules/food_and_drinks/machinery/food_cart.dm @@ -8,7 +8,7 @@ anchored = FALSE use_power = NO_POWER_USE req_access = list(ACCESS_KITCHEN) - flags_1 = NODECONSTRUCT_1 + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION var/unpacked = FALSE var/obj/machinery/griddle/stand/cart_griddle var/obj/machinery/smartfridge/food/cart_smartfridge @@ -137,4 +137,3 @@ icon = 'icons/obj/fluff/3x3.dmi' icon_state = "stand" layer = ABOVE_MOB_LAYER//big mobs will still go over the tent, this is fine and cool - plane = GAME_PLANE_UPPER diff --git a/code/modules/food_and_drinks/machinery/gibber.dm b/code/modules/food_and_drinks/machinery/gibber.dm index 121acceb4c4976..43493c3c969a07 100644 --- a/code/modules/food_and_drinks/machinery/gibber.dm +++ b/code/modules/food_and_drinks/machinery/gibber.dm @@ -1,4 +1,4 @@ -/obj/machinery/gibber//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/machinery/gibber//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "gibber" desc = "The name isn't descriptive enough?" icon = 'icons/obj/machines/kitchen.dmi' @@ -111,7 +111,7 @@ /obj/machinery/gibber/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/gibber/attackby(obj/item/P, mob/user, params) if(default_deconstruction_screwdriver(user, "grinder_open", "grinder", P)) diff --git a/code/modules/food_and_drinks/machinery/griddle.dm b/code/modules/food_and_drinks/machinery/griddle.dm index 91979e2ebcabfc..5fe48cca50ae50 100644 --- a/code/modules/food_and_drinks/machinery/griddle.dm +++ b/code/modules/food_and_drinks/machinery/griddle.dm @@ -37,7 +37,7 @@ /obj/machinery/griddle/crowbar_act(mob/living/user, obj/item/I) . = ..() - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return if(default_deconstruction_crowbar(I, ignore_panel = TRUE)) return @@ -149,7 +149,7 @@ /obj/machinery/griddle/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool, time = 2 SECONDS) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/griddle/proc/on_storage_dump(datum/source, obj/item/storage_source, mob/user) SIGNAL_HANDLER diff --git a/code/modules/food_and_drinks/machinery/grill.dm b/code/modules/food_and_drinks/machinery/grill.dm index 2ca81f36f90572..9ca42de4ee66eb 100644 --- a/code/modules/food_and_drinks/machinery/grill.dm +++ b/code/modules/food_and_drinks/machinery/grill.dm @@ -3,7 +3,7 @@ #define GRILL_FUELUSAGE_IDLE 0.5 #define GRILL_FUELUSAGE_ACTIVE 5 -/obj/machinery/grill//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/machinery/grill//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "grill" desc = "Just like the old days." icon = 'icons/obj/machines/kitchen.dmi' @@ -109,7 +109,7 @@ /obj/machinery/grill/deconstruct(disassembled = TRUE) if(grilled_item) finish_grill() - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/stack/sheet/iron(loc, 5) new /obj/item/stack/rods(loc, 5) ..() diff --git a/code/modules/food_and_drinks/machinery/icecream_vat.dm b/code/modules/food_and_drinks/machinery/icecream_vat.dm index 607c54e6ff19d4..f5890301af063c 100644 --- a/code/modules/food_and_drinks/machinery/icecream_vat.dm +++ b/code/modules/food_and_drinks/machinery/icecream_vat.dm @@ -2,7 +2,7 @@ /obj/machinery/icecream_vat name = "ice cream vat" - desc = "Ding-aling ding dong. Get your Nanotrasen-approved ice cream!" + desc = "Ding-aling ding dong. Get your Symphionia-approved ice cream!" icon = 'icons/obj/service/kitchen.dmi' icon_state = "icecream_vat" density = TRUE @@ -10,6 +10,7 @@ use_power = NO_POWER_USE layer = BELOW_OBJ_LAYER max_integrity = 300 + interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON|INTERACT_MACHINE_SET_MACHINE var/list/product_types = list() var/selected_flavour = ICE_CREAM_VANILLA var/obj/item/reagent_containers/beaker @@ -110,7 +111,7 @@ return for(var/datum/reagent/R in beaker.reagents.reagent_list) if(R.type in icecream_vat_reagents) - beaker.reagents.trans_id_to(src, R.type, R.volume) + beaker.reagents.trans_to(src, R.volume, target_id = R.type) say("Internalizing reagent.") playsound(src, 'sound/items/drink.ogg', 25, TRUE) return @@ -189,7 +190,7 @@ return /obj/machinery/icecream_vat/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/stack/sheet/iron(loc, 4) qdel(src) diff --git a/code/modules/food_and_drinks/machinery/microwave.dm b/code/modules/food_and_drinks/machinery/microwave.dm index c77f2e9e23e4b7..f20c8f6b65c0fa 100644 --- a/code/modules/food_and_drinks/machinery/microwave.dm +++ b/code/modules/food_and_drinks/machinery/microwave.dm @@ -166,8 +166,8 @@ /obj/machinery/microwave/examine(mob/user) . = ..() if(vampire_charging_capable) - . += span_info("This model features Wave™: a Nanotrasen exclusive. Our latest and greatest, Wave™ allows your PDA to be charged wirelessly through microwave frequencies! You can Wave-charge your device by placing it inside and selecting the charge mode.") - . += span_info("Because nothing says 'future' like charging your PDA while overcooking your leftovers. Nanotrasen Wave™ - Multitasking, redefined.") + . += span_info("This model features Wave™: a Symphionia exclusive. Our latest and greatest, Wave™ allows your PDA to be charged wirelessly through microwave frequencies! You can Wave-charge your device by placing it inside and selecting the charge mode.") + . += span_info("Because nothing says 'future' like charging your PDA while overcooking your leftovers. Symphionia Wave™ - Multitasking, redefined.") if(cell_powered) . += span_notice("This model is wireless, powered by portable cells. [isnull(cell) ? "The cell slot is empty." : "[EXAMINE_HINT("Ctrl-click")] to remove the power cell."]") @@ -312,21 +312,21 @@ /obj/machinery/microwave/wrench_act(mob/living/user, obj/item/tool) if(default_unfasten_wrench(user, tool)) update_appearance() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/microwave/crowbar_act(mob/living/user, obj/item/tool) if(!default_deconstruction_crowbar(tool)) return - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/microwave/screwdriver_act(mob/living/user, obj/item/tool) if(default_deconstruction_screwdriver(user, icon_state, icon_state, tool)) update_appearance() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/microwave/wirecutter_act(mob/living/user, obj/item/tool) if(broken != REALLY_BROKEN) - return + return NONE user.visible_message( span_notice("[user] starts to fix part of [src]."), @@ -334,7 +334,7 @@ ) if(!tool.use_tool(src, user, 2 SECONDS, volume = 50)) - return TOOL_ACT_SIGNAL_BLOCKING + return ITEM_INTERACT_BLOCKING user.visible_message( span_notice("[user] fixes part of [src]."), @@ -342,11 +342,11 @@ ) broken = KINDA_BROKEN // Fix it a bit update_appearance() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/microwave/welder_act(mob/living/user, obj/item/tool) if(broken != KINDA_BROKEN) - return + return NONE user.visible_message( span_notice("[user] starts to fix part of [src]."), @@ -354,7 +354,7 @@ ) if(!tool.use_tool(src, user, 2 SECONDS, amount = 1, volume = 50)) - return TOOL_ACT_SIGNAL_BLOCKING + return ITEM_INTERACT_BLOCKING user.visible_message( span_notice("[user] fixes [src]."), @@ -362,21 +362,23 @@ ) broken = NOT_BROKEN update_appearance() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS -/obj/machinery/microwave/tool_act(mob/living/user, obj/item/tool, tool_type, is_right_clicking) +/obj/machinery/microwave/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) if(operating) return if(dirty >= MAX_MICROWAVE_DIRTINESS) return . = ..() - if(. & TOOL_ACT_MELEE_CHAIN_BLOCKING) - return + if(. & ITEM_INTERACT_ANY_BLOCKER) + return . if(panel_open && is_wire_tool(tool)) wires.interact(user) - return TOOL_ACT_SIGNAL_BLOCKING + return ITEM_INTERACT_SUCCESS + + return . /obj/machinery/microwave/attackby(obj/item/item, mob/living/user, params) if(operating) @@ -416,8 +418,8 @@ return TRUE return ..() - if(vampire_charging_capable && istype(item, /obj/item/modular_computer/pda) && ingredients.len > 0) - balloon_alert(user, "max 1 pda!") + if(vampire_charging_capable && istype(item, /obj/item/modular_computer) && ingredients.len > 0) + balloon_alert(user, "max 1 device!") return FALSE if(istype(item, /obj/item/storage)) @@ -484,7 +486,7 @@ /obj/machinery/microwave/CtrlClick(mob/user) . = ..() - if(cell_powered && !isnull(cell) && anchored) + if(user.can_perform_action(src) && cell_powered && !isnull(cell) && anchored) user.put_in_hands(cell) balloon_alert(user, "removed cell") cell = null @@ -516,7 +518,6 @@ if(isAI(user) && (machine_stat & NOPOWER)) return - user.set_machine(src) switch(choice) if("eject") eject() @@ -576,7 +577,7 @@ if(cell_powered && cell?.charge < TIER_1_CELL_CHARGE_RATE * efficiency) playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) - balloon_alert(cooker, "replace cell!") + balloon_alert(cooker, "no power draw!") return if(cooker && HAS_TRAIT(cooker, TRAIT_CURSED) && prob(7)) @@ -592,9 +593,14 @@ for(var/atom/movable/potential_fooditem as anything in ingredients) if(IS_EDIBLE(potential_fooditem)) non_food_ingedients-- - if(istype(potential_fooditem, /obj/item/modular_computer/pda) && prob(75)) + if(istype(potential_fooditem, /obj/item/modular_computer) && prob(75)) pda_failure = TRUE - notify_ghosts("[cooker] has overheated their PDA!", source = src, action = NOTIFY_JUMP, flashwindow = FALSE, header = "Hunger Games: Catching Fire") + notify_ghosts( + "[cooker] has overheated their PDA!", + source = src, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + header = "Hunger Games: Catching Fire", + ) // If we're cooking non-food items we can fail randomly if(length(non_food_ingedients) && prob(min(dirty * 5, 100))) @@ -604,11 +610,13 @@ start(cooker) /obj/machinery/microwave/proc/wzhzhzh() - visible_message(span_notice("\The [src] turns on."), null, span_hear("You hear a microwave humming.")) - operating = TRUE if(cell_powered && !isnull(cell)) - cell.use(TIER_1_CELL_CHARGE_RATE * efficiency) + if(!cell.use(TIER_1_CELL_CHARGE_RATE * efficiency)) + playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + return + visible_message(span_notice("\The [src] turns on."), null, span_hear("You hear a microwave humming.")) + operating = TRUE set_light(l_range = 1.5, l_power = 1.2, l_on = TRUE) soundloop.start() update_appearance() @@ -758,7 +766,7 @@ * * cooker - The mob that initiated the cook cycle, can be null if no apparent mob triggered it (such as via emp) */ /obj/machinery/microwave/proc/vampire(mob/cooker) - var/obj/item/modular_computer/pda/vampire_pda = LAZYACCESS(ingredients, 1) + var/obj/item/modular_computer/vampire_pda = LAZYACCESS(ingredients, 1) if(isnull(vampire_pda)) playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) after_finish_loop() @@ -790,7 +798,7 @@ // We should only be charging PDAs for(var/atom/movable/potential_item as anything in ingredients) - if(!istype(potential_item, /obj/item/modular_computer/pda)) + if(!istype(potential_item, /obj/item/modular_computer)) balloon_alert(cooker, "pda only!") playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) eject() @@ -811,7 +819,7 @@ pre_fail() return - if(!vampire_charge_amount || !length(ingredients) || (!isnull(cell) && !cell.charge) || vampire_charge_amount < 25) + if(!vampire_charge_amount || !length(ingredients) || isnull(cell) || !cell.charge || vampire_charge_amount < 25) vampire_cell = null charge_loop_finish(cooker) return diff --git a/code/modules/food_and_drinks/machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/machinery/monkeyrecycler.dm index 8978c975c5ecf1..c2ef7973a8ad69 100644 --- a/code/modules/food_and_drinks/machinery/monkeyrecycler.dm +++ b/code/modules/food_and_drinks/machinery/monkeyrecycler.dm @@ -29,9 +29,9 @@ GLOBAL_LIST_EMPTY(monkey_recyclers) . = ..() cube_production = 0 for(var/datum/stock_part/servo/servo in component_parts) - cube_production += servo.tier * 0.2 // SKYRAT EDIT CHANGE - buffs to allow 1.2 cubes per monkey at T4 - ORIGINAL: cube_production += manipulator.tier * 0.1 + cube_production += servo.tier * 0.2 // NOVA EDIT CHANGE - buffs to allow 1.2 cubes per monkey at T4 - ORIGINAL: cube_production += manipulator.tier * 0.1 for(var/datum/stock_part/matter_bin/matter_bin in component_parts) - cube_production += matter_bin.tier * 0.2 // SKYRAT EDIT CHANGE - buffs to allow 1.2 cubes per monkey at T4 - ORIGINAL: cube_production += matter_bin.tier * 0.1 + cube_production += matter_bin.tier * 0.2 // NOVA EDIT CHANGE - buffs to allow 1.2 cubes per monkey at T4 - ORIGINAL: cube_production += matter_bin.tier * 0.1 /obj/machinery/monkey_recycler/examine(mob/user) . = ..() @@ -42,7 +42,7 @@ GLOBAL_LIST_EMPTY(monkey_recyclers) . = ..() if(default_unfasten_wrench(user, tool)) power_change() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/monkey_recycler/attackby(obj/item/O, mob/user, params) if(default_deconstruction_screwdriver(user, "grinder_open", "grinder", O)) diff --git a/code/modules/food_and_drinks/machinery/oven.dm b/code/modules/food_and_drinks/machinery/oven.dm index 18327bd90ef437..87cffebc8aec80 100644 --- a/code/modules/food_and_drinks/machinery/oven.dm +++ b/code/modules/food_and_drinks/machinery/oven.dm @@ -213,7 +213,7 @@ /obj/machinery/oven/wrench_act(mob/living/user, obj/item/tool) default_unfasten_wrench(user, tool, time = 2 SECONDS) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/oven/range name = "range" @@ -237,6 +237,7 @@ desc = "Time to bake cookies!" icon_state = "oven_tray" max_items = 6 + biggest_w_class = WEIGHT_CLASS_BULKY #undef OVEN_SMOKE_STATE_NONE #undef OVEN_SMOKE_STATE_GOOD diff --git a/code/modules/food_and_drinks/machinery/processor.dm b/code/modules/food_and_drinks/machinery/processor.dm index 60679f8934567d..c3e403003920a2 100644 --- a/code/modules/food_and_drinks/machinery/processor.dm +++ b/code/modules/food_and_drinks/machinery/processor.dm @@ -1,6 +1,6 @@ #define PROCESSOR_SELECT_RECIPE(movable_input) LAZYACCESS(processor_inputs[type], movable_input.type) -/obj/machinery/processor //SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/machinery/processor //NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "food processor" desc = "An industrial grinder used to process meat and other foods. Keep hands clear of intake area while operating." icon = 'icons/obj/machines/kitchen.dmi' @@ -84,7 +84,7 @@ /obj/machinery/processor/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/processor/attackby(obj/item/attacking_item, mob/living/user, params) if(processing) @@ -236,9 +236,9 @@ 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()) + var/atom/movable/item = new processed_slime.slime_type.core_type(drop_location()) adjust_item_drop_location(item) - SSblackbox.record_feedback("tally", "slime_core_harvested", 1, processed_slime.colour) + SSblackbox.record_feedback("tally", "slime_core_harvested", 1, processed_slime.slime_type.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 dfe3987dfe2a14..ae06fb93f836b2 100644 --- a/code/modules/food_and_drinks/machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/machinery/smartfridge.dm @@ -6,6 +6,7 @@ desc = "Keeps cold things cold and hot things cold." icon = 'icons/obj/machines/smartfridge.dmi' icon_state = "smartfridge" + base_icon_state = "plant" layer = BELOW_OBJ_LAYER density = TRUE circuit = /obj/item/circuitboard/machine/smartfridge @@ -17,8 +18,6 @@ var/base_build_path = /obj/machinery/smartfridge /// Maximum number of items that can be loaded into the machine var/max_n_of_items = 1500 - /// If the AI is allowed to retrieve items within the machine - var/allow_ai_retrieve = FALSE /// List of items that the machine starts with upon spawn var/list/initial_contents /// If the machine shows an approximate number of its contents on its sprite @@ -33,7 +32,7 @@ create_reagents(100, NO_REACT) air_update_turf(TRUE, TRUE) register_context() - if(mapload && !istype(src, /obj/machinery/smartfridge/drying_rack)) + if(mapload) welded_down = TRUE if(islist(initial_contents)) @@ -49,83 +48,111 @@ . = ..() move_update_air(old_loc) -/obj/machinery/smartfridge/can_be_unfasten_wrench(mob/user, silent) - if(welded_down) - to_chat(user, span_warning("[src] is welded to the floor!")) - return FAILED_UNFASTEN - return ..() - -/obj/machinery/smartfridge/set_anchored(anchorvalue) - . = ..() - if(!anchored && welded_down) //make sure they're keep in sync in case it was forcibly unanchored by badmins or by a megafauna. - welded_down = FALSE - can_atmos_pass = anchorvalue ? ATMOS_PASS_NO : ATMOS_PASS_YES - air_update_turf(TRUE, anchorvalue) - /obj/machinery/smartfridge/welder_act(mob/living/user, obj/item/tool) - ..() - if(istype(src, /obj/machinery/smartfridge/drying_rack)) - return FALSE if(welded_down) if(!tool.tool_start_check(user, amount=2)) - return TRUE + return ITEM_INTERACT_BLOCKING + user.visible_message( span_notice("[user.name] starts to cut the [name] free from the floor."), span_notice("You start to cut [src] free from the floor..."), span_hear("You hear welding."), ) + if(!tool.use_tool(src, user, delay=100, volume=100)) - return FALSE + return ITEM_INTERACT_BLOCKING + welded_down = FALSE to_chat(user, span_notice("You cut [src] free from the floor.")) - return TRUE + return ITEM_INTERACT_SUCCESS + if(!anchored) - to_chat(user, span_warning("[src] needs to be wrenched to the floor!")) - return TRUE + balloon_alert(user, "wrench it first!") + return ITEM_INTERACT_BLOCKING + if(!tool.tool_start_check(user, amount=2)) - return TRUE + return ITEM_INTERACT_BLOCKING + user.visible_message( span_notice("[user.name] starts to weld the [name] to the floor."), span_notice("You start to weld [src] to the floor..."), span_hear("You hear welding."), ) - if(!tool.use_tool(src, user, delay=100, volume=100)) - balloon_alert(user, "cancelled!") - return FALSE + + if(!tool.use_tool(src, user, delay = 100, volume = 100)) + return ITEM_INTERACT_BLOCKING + welded_down = TRUE to_chat(user, span_notice("You weld [src] to the floor.")) - return TRUE + return ITEM_INTERACT_SUCCESS /obj/machinery/smartfridge/welder_act_secondary(mob/living/user, obj/item/tool) + if(!(machine_stat & BROKEN)) + balloon_alert(user, "no repair needed!") + return ITEM_INTERACT_BLOCKING + + if(!tool.tool_start_check(user, amount=1)) + return ITEM_INTERACT_BLOCKING + + user.visible_message( + span_notice("[user] is repairing [src]."), + span_notice("You begin repairing [src]..."), + span_hear("You hear welding."), + ) + + if(tool.use_tool(src, user, delay = 40, volume = 50)) + if(!(machine_stat & BROKEN)) + return ITEM_INTERACT_BLOCKING + to_chat(user, span_notice("You repair [src]")) + atom_integrity = max_integrity + set_machine_stat(machine_stat & ~BROKEN) + update_icon() + return ITEM_INTERACT_SUCCESS + +/obj/machinery/smartfridge/screwdriver_act(mob/living/user, obj/item/tool) + if(default_deconstruction_screwdriver(user, icon_state, icon_state, tool)) + if(panel_open) + add_overlay("[initial(icon_state)]-panel") + else + cut_overlay("[initial(icon_state)]-panel") + SStgui.update_uis(src) + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING + +/obj/machinery/smartfridge/can_be_unfasten_wrench(mob/user, silent) + if(welded_down) + balloon_alert(user, "unweld first!") + return FAILED_UNFASTEN + return ..() + +/obj/machinery/smartfridge/set_anchored(anchorvalue) . = ..() - if(istype(src, /obj/machinery/smartfridge/drying_rack)) - return FALSE - if(machine_stat & BROKEN) - if(!tool.tool_start_check(user, amount=1)) - return FALSE - user.visible_message( - span_notice("[user] is repairing [src]."), - span_notice("You begin repairing [src]..."), - span_hear("You hear welding."), - ) - if(tool.use_tool(src, user, delay=40, volume=50)) - if(!(machine_stat & BROKEN)) - return FALSE - balloon_alert(user, "repaired") - atom_integrity = max_integrity - set_machine_stat(machine_stat & ~BROKEN) - update_icon() - return TRUE + if(!anchored && welded_down) //make sure they're keep in sync in case it was forcibly unanchored by badmins or by a megafauna. + welded_down = FALSE + can_atmos_pass = anchorvalue ? ATMOS_PASS_NO : ATMOS_PASS_YES + air_update_turf(TRUE, anchorvalue) + +/obj/machinery/smartfridge/wrench_act(mob/living/user, obj/item/tool) + if(default_unfasten_wrench(user, tool) == SUCCESSFUL_UNFASTEN) + power_change() + return ITEM_INTERACT_SUCCESS + +/obj/machinery/smartfridge/crowbar_act(mob/living/user, obj/item/tool) + if(default_pry_open(tool, close_after_pry = TRUE)) + return ITEM_INTERACT_SUCCESS + + if(welded_down) + balloon_alert(user, "unweld first!") else - balloon_alert(user, "no repair needed!") - return FALSE + default_deconstruction_crowbar(tool) + return ITEM_INTERACT_SUCCESS /obj/machinery/smartfridge/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) if(isnull(held_item)) return NONE var/tool_tip_set = FALSE - if(held_item.tool_behaviour == TOOL_WELDER && !istype(src, /obj/machinery/smartfridge/drying_rack)) + if(held_item.tool_behaviour == TOOL_WELDER) if(welded_down) context[SCREENTIP_CONTEXT_LMB] = "Unweld" tool_tip_set = TRUE @@ -136,6 +163,19 @@ context[SCREENTIP_CONTEXT_RMB] = "Repair" tool_tip_set = TRUE + else if(held_item.tool_behaviour == TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "close" : "open"] panel" + tool_tip_set = TRUE + + else if(held_item.tool_behaviour == TOOL_CROWBAR) + if(panel_open) + context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" + tool_tip_set = TRUE + + else if(held_item.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = "[anchored ? "Un" : ""]anchore" + tool_tip_set = TRUE + return tool_tip_set ? CONTEXTUAL_SCREENTIP_SET : NONE /obj/machinery/smartfridge/RefreshParts() @@ -149,19 +189,26 @@ if(in_range(user, src) || isobserver(user)) . += span_notice("The status display reads: This unit can hold a maximum of [max_n_of_items] items.") + . += structure_examine() + +/// Returns details related to the fridge structure +/obj/machinery/smartfridge/proc/structure_examine() + . = "" + if(welded_down) - . += span_info("It's moored firmly to the floor. You can unsecure its moorings with a welder.") - else if(anchored) - . += span_info("It's currently anchored to the floor. You can secure its moorings with a welder, or remove it with a wrench.") + . += span_info("It's moorings are firmly [EXAMINE_HINT("welded")] to the floor.") else - . += span_info("It's not anchored to the floor. You can secure it in place with a wrench.") + . += span_info("It's moorings are loose and can be [EXAMINE_HINT("welded")] down.") + + if(anchored) + . += span_info("It is [EXAMINE_HINT("wrenched")] down on the floor.") + else + . += span_info("It could be [EXAMINE_HINT("wrenched")] down.") /obj/machinery/smartfridge/update_appearance(updates=ALL) . = ..() - if(machine_stat & BROKEN) - set_light(0) - return - set_light(powered() ? MINIMUM_USEFUL_LIGHT_RANGE : 0) + + set_light((!(machine_stat & BROKEN) && powered()) ? MINIMUM_USEFUL_LIGHT_RANGE : 0) /obj/machinery/smartfridge/update_icon_state() icon_state = "[initial(icon_state)]" @@ -171,48 +218,30 @@ icon_state += "-off" return ..() +/// Returns the number of items visible in the fridge. Faster than subtracting 2 lists +/obj/machinery/smartfridge/proc/visible_items() + return contents.len - 1 // Circuitboard + /obj/machinery/smartfridge/update_overlays() . = ..() - var/list/shown_contents = contents - component_parts - if(visible_contents && shown_contents.len > 0) - var/contents_icon_state = "[initial(icon_state)]" - switch(base_build_path) - if(/obj/machinery/smartfridge/extract) - contents_icon_state += "-slime" - if(/obj/machinery/smartfridge/food) - contents_icon_state += "-food" - if(/obj/machinery/smartfridge/drinks) - contents_icon_state += "-drink" - if(/obj/machinery/smartfridge/organ) - contents_icon_state += "-organ" - if(/obj/machinery/smartfridge/petri) - contents_icon_state += "-petri" - if(/obj/machinery/smartfridge/chemistry) - contents_icon_state += "-chem" - if(/obj/machinery/smartfridge/chemistry/virology) - contents_icon_state += "-viro" - else - contents_icon_state += "-plant" - switch(shown_contents.len) + var/initial_icon_state = initial(icon_state) + var/shown_contents_length = visible_items() + if(visible_contents && shown_contents_length) + var/content_level = "[initial_icon_state]-[base_icon_state]" + switch(shown_contents_length) if(1 to 25) - contents_icon_state += "-1" + content_level += "-1" if(26 to 50) - contents_icon_state += "-2" + content_level += "-2" if(31 to INFINITY) - contents_icon_state += "-3" - . += mutable_appearance(icon, contents_icon_state) + content_level += "-3" + . += mutable_appearance(icon, content_level) - . += mutable_appearance(icon, "[initial(icon_state)]-glass[(machine_stat & BROKEN) ? "-broken" : ""]") + . += mutable_appearance(icon, "[initial_icon_state]-glass[(machine_stat & BROKEN) ? "-broken" : ""]") if(!machine_stat && has_emissive) - . += emissive_appearance(icon, "[initial(icon_state)]-light-mask", src, alpha = src.alpha) - -/obj/machinery/smartfridge/wrench_act(mob/living/user, obj/item/tool) - . = ..() - if(default_unfasten_wrench(user, tool)) - power_change() - return TOOL_ACT_TOOLTYPE_SUCCESS + . += emissive_appearance(icon, "[initial_icon_state]-light-mask", src, alpha = src.alpha) /obj/machinery/smartfridge/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) @@ -225,101 +254,94 @@ playsound(src, SFX_SHATTER, 50, TRUE) return ..() -/******************* -* Item Adding -********************/ - -/obj/machinery/smartfridge/attackby(obj/item/O, mob/living/user, params) - if(default_deconstruction_screwdriver(user, icon_state, icon_state, O)) - if(panel_open) - add_overlay("[initial(icon_state)]-panel") - else - cut_overlay("[initial(icon_state)]-panel") - SStgui.update_uis(src) - return - - if(default_pry_open(O, close_after_pry = TRUE)) - return - - if(!welded_down && default_deconstruction_crowbar(O)) - SStgui.update_uis(src) - return - +/obj/machinery/smartfridge/attackby(obj/item/weapon, mob/living/user, params) if(!machine_stat) - var/list/shown_contents = contents - component_parts - if(shown_contents.len >= max_n_of_items) - to_chat(user, span_warning("\The [src] is full!")) + var/shown_contents_length = visible_items() + if(shown_contents_length >= max_n_of_items) + balloon_alert(user, "no space!") return FALSE - if(accept_check(O)) - load(O) - user.visible_message(span_notice("[user] adds \the [O] to \the [src]."), span_notice("You add \the [O] to \the [src].")) + if(!(weapon.item_flags & ABSTRACT) && \ + !(weapon.flags_1 & HOLOGRAM_1) && \ + accept_check(weapon) \ + ) + load(weapon, user) + user.visible_message(span_notice("[user] adds \the [weapon] to \the [src]."), span_notice("You add \the [weapon] to \the [src].")) SStgui.update_uis(src) if(visible_contents) update_appearance() return TRUE - if(istype(O, /obj/item/storage/bag)) - var/obj/item/storage/P = O + if(istype(weapon, /obj/item/storage/bag)) + var/obj/item/storage/bag = weapon var/loaded = 0 - for(var/obj/G in P.contents) - if(shown_contents.len >= max_n_of_items) + for(var/obj/item/object in bag.contents) + if(shown_contents_length >= max_n_of_items) break - if(accept_check(G)) - load(G) + if(!(object.item_flags & ABSTRACT) && \ + !(object.flags_1 & HOLOGRAM_1) && \ + accept_check(object) \ + ) + load(object, user) loaded++ SStgui.update_uis(src) if(loaded) - if(shown_contents.len >= max_n_of_items) - user.visible_message(span_notice("[user] loads \the [src] with \the [O]."), \ - span_notice("You fill \the [src] with \the [O].")) + if(shown_contents_length >= max_n_of_items) + user.visible_message(span_notice("[user] loads \the [src] with \the [weapon]."), \ + span_notice("You fill \the [src] with \the [weapon].")) else - user.visible_message(span_notice("[user] loads \the [src] with \the [O]."), \ - span_notice("You load \the [src] with \the [O].")) - if(O.contents.len > 0) + user.visible_message(span_notice("[user] loads \the [src] with \the [weapon]."), \ + span_notice("You load \the [src] with \the [weapon].")) + if(weapon.contents.len) to_chat(user, span_warning("Some items are refused.")) if (visible_contents) update_appearance() return TRUE else - to_chat(user, span_warning("There is nothing in [O] to put in [src]!")) + to_chat(user, span_warning("There is nothing in [weapon] to put in [src]!")) return FALSE if(!user.combat_mode) - to_chat(user, span_warning("\The [src] smartly refuses [O].")) - SStgui.update_uis(src) + to_chat(user, span_warning("\The [src] smartly refuses [weapon].")) return FALSE + else return ..() -/obj/machinery/smartfridge/proc/accept_check(obj/item/O) - if(istype(O, /obj/item/food/grown/) || istype(O, /obj/item/seeds/) || istype(O, /obj/item/grown/) || istype(O, /obj/item/graft/)) - return TRUE - return FALSE - -/obj/machinery/smartfridge/proc/load(obj/item/O) - if(ismob(O.loc)) - var/mob/M = O.loc - if(!M.transferItemToLoc(O, src)) - to_chat(usr, span_warning("\the [O] is stuck to your hand, you cannot put it in \the [src]!")) +/** + * Can this item be accepted by the smart fridge + * Arguments + * * [weapon][obj/item] - the item to accept + */ +/obj/machinery/smartfridge/proc/accept_check(obj/item/weapon) + var/static/list/accepted_items = list( + /obj/item/food/grown, + /obj/item/seeds, + /obj/item/grown, + /obj/item/graft, + ) + return is_type_in_list(weapon, accepted_items) + +/** + * Loads the item into the smart fridge + * Arguments + * * [weapon][obj/item] - the item to load. If the item is being held by a mo it will transfer it from hand else directly force move + */ +/obj/machinery/smartfridge/proc/load(obj/item/weapon, mob/user) + if(ismob(weapon.loc)) + var/mob/owner = weapon.loc + if(!owner.transferItemToLoc(weapon, src)) + to_chat(usr, span_warning("\the [weapon] is stuck to your hand, you cannot put it in \the [src]!")) return FALSE - else - return TRUE + return TRUE else - if(O.loc.atom_storage) - return O.loc.atom_storage.attempt_remove(O, src) + if(weapon.loc.atom_storage) + return weapon.loc.atom_storage.attempt_remove(weapon, src, silent = TRUE) else - O.forceMove(src) + weapon.forceMove(src) return TRUE -///Really simple proc, just moves the object "O" into the hands of mob "M" if able, done so I could modify the proc a little for the organ fridge -/obj/machinery/smartfridge/proc/dispense(obj/item/O, mob/M) - if(!M.put_in_hands(O)) - O.forceMove(drop_location()) - adjust_item_drop_location(O) - use_power(active_power_usage) - /obj/machinery/smartfridge/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) @@ -331,18 +353,18 @@ . = list() var/listofitems = list() - for (var/I in src) + for (var/item in src) // We do not vend our own components. - if(I in component_parts) + if(item in component_parts) continue - var/atom/movable/O = I - if (!QDELETED(O)) - var/md5name = md5(O.name) // This needs to happen because of a bug in a TGUI component, https://github.com/ractivejs/ractive/issues/744 + var/atom/movable/atom = item + if (!QDELETED(atom)) + var/md5name = md5(atom.name) // This needs to happen because of a bug in a TGUI component, https://github.com/ractivejs/ractive/issues/744 if (listofitems[md5name]) // which is fixed in a version we cannot use due to ie8 incompatibility listofitems[md5name]["amount"]++ // The good news is, #30519 made smartfridge UIs non-auto-updating else - listofitems[md5name] = list("name" = O.name, "type" = O.type, "amount" = 1) + listofitems[md5name] = list("name" = atom.name, "amount" = 1) sort_list(listofitems) .["contents"] = listofitems @@ -353,27 +375,28 @@ . = ..() SStgui.update_uis(src) -/obj/machinery/smartfridge/ui_act(action, params) +/obj/machinery/smartfridge/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) . = ..() - if(.) + if(. || !ui.user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return + + . = TRUE + var/mob/living_mob = ui.user + switch(action) if("Release") var/desired = 0 - if(!allow_ai_retrieve && isAI(usr)) - to_chat(usr, span_warning("[src] does not seem to be configured to respect your authority!")) + if(isAI(living_mob)) + to_chat(living_mob, span_warning("[src] does not respect your authority!")) return if (params["amount"]) desired = text2num(params["amount"]) else - desired = tgui_input_number(usr, "How many items would you like to take out?", "Release", max_value = 50) + desired = tgui_input_number(living_mob, "How many items would you like to take out?", "Release", max_value = 50) if(!desired) - return FALSE - - if(QDELETED(src) || QDELETED(usr) || !usr.can_perform_action(src, FORBID_TELEKINESIS_REACH)) // Sanity checkin' in case stupid stuff happens while we wait for input() - return FALSE + return for(var/obj/item/dispensed_item in src) if(desired <= 0) @@ -384,12 +407,16 @@ if(format_text(dispensed_item.name) == format_text(params["name"])) if(dispensed_item in component_parts) CRASH("Attempted removal of [dispensed_item] component_part from smartfridge via smartfridge interface.") - dispense(dispensed_item, usr) + //dispense the item + if(!living_mob.put_in_hands(dispensed_item)) + dispensed_item.forceMove(drop_location()) + adjust_item_drop_location(dispensed_item) + use_power(active_power_usage) desired-- if (visible_contents) update_appearance() - return TRUE + return return FALSE @@ -408,68 +435,109 @@ idle_power_usage = 0 has_emissive = FALSE can_atmos_pass = ATMOS_PASS_YES + /// Is the rack currently drying stuff var/drying = FALSE + /// The reference to the last user's mind. Needed for the chef made trait to be properly applied correctly to dried food. + var/datum/weakref/current_user -/obj/machinery/smartfridge/drying_rack/on_deconstruction() - new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) +/obj/machinery/smartfridge/drying_rack/Initialize(mapload) + . = ..() + + //you can't weld down wood + welded_down = FALSE - //remove all component parts inherited from smartfridge cause they were not required in crafting - var/obj/item/circuitboard/machine/smartfridge/board = locate() in component_parts - component_parts -= board - qdel(board) - component_parts.Cut() + //so we don't drop any of the parent smart fridge parts upon deconstruction + clear_components() +/obj/machinery/smartfridge/drying_rack/Destroy() + current_user = null return ..() +/// We cleared out the components in initialize so we can optimize this +/obj/machinery/smartfridge/drying_rack/visible_items() + return contents.len + +/obj/machinery/smartfridge/drying_rack/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) + if(isnull(held_item)) + return NONE + + var/tool_tip_set = FALSE + if(held_item.tool_behaviour == TOOL_CROWBAR) + context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" + tool_tip_set = TRUE + else if(held_item.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = "[anchored ? "Un" : ""]anchore" + tool_tip_set = TRUE + + return tool_tip_set ? CONTEXTUAL_SCREENTIP_SET : NONE + +/obj/machinery/smartfridge/drying_rack/structure_examine() + . = "" + if(anchored) + . += span_info("It's currently anchored to the floor. It can be [EXAMINE_HINT("wrenched")] loose.") + else + . += span_info("It's not anchored to the floor. It can be [EXAMINE_HINT("wrenched")] down.") + . += span_info("The whole rack can be [EXAMINE_HINT("pried")] apart.") + +/obj/machinery/smartfridge/drying_rack/welder_act(mob/living/user, obj/item/tool) + return NONE + +/obj/machinery/smartfridge/drying_rack/welder_act_secondary(mob/living/user, obj/item/tool) + return NONE + /obj/machinery/smartfridge/drying_rack/default_deconstruction_screwdriver() + return NONE + /obj/machinery/smartfridge/drying_rack/exchange_parts() -/obj/machinery/smartfridge/drying_rack/spawn_frame() + return -/obj/machinery/smartfridge/drying_rack/default_deconstruction_crowbar(obj/item/crowbar/C, ignore_panel = 1) - ..() +/obj/machinery/smartfridge/drying_rack/on_deconstruction() + new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) + +/obj/machinery/smartfridge/drying_rack/crowbar_act(mob/living/user, obj/item/tool) + if(default_deconstruction_crowbar(tool, ignore_panel = TRUE)) + return ITEM_INTERACT_SUCCESS /obj/machinery/smartfridge/drying_rack/ui_data(mob/user) . = ..() .["isdryer"] = TRUE - .["verb"] = "Take" .["drying"] = drying - /obj/machinery/smartfridge/drying_rack/ui_act(action, params) . = ..() if(.) update_appearance() // This is to handle a case where the last item is taken out manually instead of through drying pop-out return + switch(action) if("Dry") - toggle_drying(FALSE) + toggle_drying(FALSE, usr) return TRUE - return FALSE /obj/machinery/smartfridge/drying_rack/powered() - if(!anchored) - return FALSE - return ..() + return !anchored ? FALSE : ..() /obj/machinery/smartfridge/drying_rack/power_change() . = ..() if(!powered()) toggle_drying(TRUE) -/obj/machinery/smartfridge/drying_rack/load(obj/item/dried_object) //For updating the filled overlay +/obj/machinery/smartfridge/drying_rack/load(obj/item/dried_object, mob/user) //For updating the filled overlay . = ..() + if(!.) + return update_appearance() + if(drying && user?.mind) + current_user = WEAKREF(user.mind) /obj/machinery/smartfridge/drying_rack/update_overlays() . = ..() if(drying) . += "drying_rack_drying" - var/list/shown_contents = contents - component_parts - if(shown_contents.len) + if(contents.len) . += "drying_rack_filled" /obj/machinery/smartfridge/drying_rack/process() - ..() if(drying) for(var/obj/item/item_iterator in src) if(!accept_check(item_iterator)) @@ -481,21 +549,27 @@ use_power(active_power_usage) /obj/machinery/smartfridge/drying_rack/accept_check(obj/item/O) - if(HAS_TRAIT(O, TRAIT_DRYABLE)) //set on dryable element - return TRUE - return FALSE - -/obj/machinery/smartfridge/drying_rack/proc/toggle_drying(forceoff) + return HAS_TRAIT(O, TRAIT_DRYABLE) + +/** + * Toggles drying on or off + * Arguments + * * forceoff - if TRUE will force the dryer off always + */ +/obj/machinery/smartfridge/drying_rack/proc/toggle_drying(forceoff, mob/user) if(drying || forceoff) drying = FALSE + current_user = FALSE update_use_power(IDLE_POWER_USE) else drying = TRUE + if(user?.mind) + current_user = WEAKREF(user.mind) update_use_power(ACTIVE_POWER_USE) update_appearance() /obj/machinery/smartfridge/drying_rack/proc/rack_dry(obj/item/target) - SEND_SIGNAL(target, COMSIG_ITEM_DRIED) + SEND_SIGNAL(target, COMSIG_ITEM_DRIED, current_user) /obj/machinery/smartfridge/drying_rack/emp_act(severity) . = ..() @@ -503,7 +577,6 @@ return atmos_spawn_air("[TURF_TEMPERATURE(1000)]") - // ---------------------------- // Bar drink smartfridge // ---------------------------- @@ -511,12 +584,19 @@ name = "drink showcase" desc = "A refrigerated storage unit for tasty tasty alcohol." base_build_path = /obj/machinery/smartfridge/drinks + base_icon_state = "drink" -/obj/machinery/smartfridge/drinks/accept_check(obj/item/O) - if(!is_reagent_container(O) || (O.item_flags & ABSTRACT) || istype(O,/obj/item/reagent_containers/cup/bowl) || !O.reagents || !O.reagents.reagent_list.len) +/obj/machinery/smartfridge/drinks/accept_check(obj/item/weapon) + //not an item or valid container + if(!is_reagent_container(weapon)) return FALSE - if(istype(O, /obj/item/reagent_containers/cup) || istype(O, /obj/item/reagent_containers/cup/glass) || istype(O, /obj/item/reagent_containers/condiment)) - return TRUE + + //an bowl or something that has no reagents + if(istype(weapon,/obj/item/reagent_containers/cup/bowl) || !length(weapon.reagents?.reagent_list)) + return FALSE + + //list of items acceptable + return (istype(weapon, /obj/item/reagent_containers/cup) || istype(weapon, /obj/item/reagent_containers/condiment)) // ---------------------------- // Food smartfridge @@ -524,9 +604,14 @@ /obj/machinery/smartfridge/food desc = "A refrigerated storage unit for food." base_build_path = /obj/machinery/smartfridge/food + base_icon_state = "food" -/obj/machinery/smartfridge/food/accept_check(obj/item/O) - if(IS_EDIBLE(O) || (istype(O,/obj/item/reagent_containers/cup/bowl) && O.reagents && O.reagents.reagent_list.len)) +/obj/machinery/smartfridge/food/accept_check(obj/item/weapon) + if(weapon.w_class >= WEIGHT_CLASS_BULKY) + return FALSE + if(IS_EDIBLE(weapon)) + return TRUE + if(istype(weapon, /obj/item/reagent_containers/cup/bowl) && weapon.reagents?.total_volume > 0) return TRUE return FALSE @@ -537,13 +622,10 @@ name = "smart slime extract storage" desc = "A refrigerated storage unit for slime extracts." base_build_path = /obj/machinery/smartfridge/extract + base_icon_state = "slime" -/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/accept_check(obj/item/weapon) + return (istype(weapon, /obj/item/slime_extract) || istype(weapon, /obj/item/slime_scanner)) /obj/machinery/smartfridge/extract/preloaded initial_contents = list(/obj/item/slime_scanner = 2) @@ -555,11 +637,10 @@ name = "smart petri dish storage" desc = "A refrigerated storage unit for petri dishes." base_build_path = /obj/machinery/smartfridge/petri + base_icon_state = "petri" -/obj/machinery/smartfridge/petri/accept_check(obj/item/O) - if(istype(O, /obj/item/petri_dish)) - return TRUE - return FALSE +/obj/machinery/smartfridge/petri/accept_check(obj/item/weapon) + return istype(weapon, /obj/item/petri_dish) /obj/machinery/smartfridge/petri/preloaded initial_contents = list(/obj/item/petri_dish = 5) @@ -572,22 +653,24 @@ desc = "A refrigerated storage unit for organ storage." max_n_of_items = 20 //vastly lower to prevent processing too long base_build_path = /obj/machinery/smartfridge/organ + base_icon_state = "organ" + /// The rate at which this fridge will repair damaged organs var/repair_rate = 0 /obj/machinery/smartfridge/organ/accept_check(obj/item/O) - if(isorgan(O) || isbodypart(O)) - return TRUE - return FALSE + return (isorgan(O) || isbodypart(O)) -/obj/machinery/smartfridge/organ/load(obj/item/O) +/obj/machinery/smartfridge/organ/load(obj/item/item, mob/user) . = ..() if(!.) //if the item loads, clear can_decompose return - if(isorgan(O)) - var/obj/item/organ/organ = O + + if(isorgan(item)) + var/obj/item/organ/organ = item organ.organ_flags |= ORGAN_FROZEN - if(isbodypart(O)) - var/obj/item/bodypart/bodypart = O + + if(isbodypart(item)) + var/obj/item/bodypart/bodypart = item for(var/obj/item/organ/stored in bodypart.contents) stored.organ_flags |= ORGAN_FROZEN @@ -606,9 +689,11 @@ /obj/machinery/smartfridge/organ/Exited(atom/movable/gone, direction) . = ..() + if(isorgan(gone)) var/obj/item/organ/O = gone O.organ_flags &= ~ORGAN_FROZEN + if(isbodypart(gone)) var/obj/item/bodypart/bodypart = gone for(var/obj/item/organ/stored in bodypart.contents) @@ -621,8 +706,31 @@ name = "smart chemical storage" desc = "A refrigerated storage unit for medicine storage." base_build_path = /obj/machinery/smartfridge/chemistry + base_icon_state = "chem" + +/obj/machinery/smartfridge/chemistry/accept_check(obj/item/weapon) + // not an item or reagent container + if(!is_reagent_container(weapon)) + return FALSE + + // empty pill prank ok + if(istype(weapon, /obj/item/reagent_containers/pill)) + return TRUE + + //check each pill in the pill bottle + if(istype(weapon, /obj/item/storage/pill_bottle)) + if(weapon.contents.len) + for(var/obj/item/target_item in weapon) + if(!accept_check(target_item)) + return FALSE + return TRUE + return FALSE -/obj/machinery/smartfridge/chemistry/accept_check(obj/item/O) + // other empty containers not accepted + if(!length(weapon.reagents?.reagent_list)) + return FALSE + + // the long list of other containers that can be accepted var/static/list/chemfridge_typecache = typecacheof(list( /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/cup/tube, @@ -630,26 +738,10 @@ /obj/item/reagent_containers/cup/beaker, /obj/item/reagent_containers/spray, /obj/item/reagent_containers/medigel, - /obj/item/reagent_containers/cup/vial, //SKYRAT EDIT ADDITION - HYPOSPRAYS + /obj/item/reagent_containers/cup/vial, //NOVA EDIT ADDITION - HYPOSPRAYS /obj/item/reagent_containers/chem_pack )) - - if(istype(O, /obj/item/storage/pill_bottle)) - if(O.contents.len) - for(var/obj/item/I in O) - if(!accept_check(I)) - return FALSE - return TRUE - return FALSE - if(!is_reagent_container(O) || (O.item_flags & ABSTRACT)) - return FALSE - if(istype(O, /obj/item/reagent_containers/pill)) // empty pill prank ok - return TRUE - if(!O.reagents || !O.reagents.reagent_list.len) // other empty containers not accepted - return FALSE - if(is_type_in_typecache(O, chemfridge_typecache)) - return TRUE - return FALSE + return is_type_in_typecache(weapon, chemfridge_typecache) /obj/machinery/smartfridge/chemistry/preloaded initial_contents = list( @@ -665,6 +757,7 @@ name = "smart virus storage" desc = "A refrigerated storage unit for volatile sample storage." base_build_path = /obj/machinery/smartfridge/chemistry/virology + base_icon_state = "viro" /obj/machinery/smartfridge/chemistry/virology/preloaded initial_contents = list( @@ -691,8 +784,5 @@ visible_contents = FALSE base_build_path = /obj/machinery/smartfridge/disks -/obj/machinery/smartfridge/disks/accept_check(obj/item/O) - if(istype(O, /obj/item/disk/)) - return TRUE - else - return FALSE +/obj/machinery/smartfridge/disks/accept_check(obj/item/weapon) + return istype(weapon, /obj/item/disk) diff --git a/code/modules/food_and_drinks/plate.dm b/code/modules/food_and_drinks/plate.dm index b584d887930f4d..a0d24dec8dacba 100644 --- a/code/modules/food_and_drinks/plate.dm +++ b/code/modules/food_and_drinks/plate.dm @@ -14,6 +14,9 @@ var/placement_offset = -15 /// If the plate will shatter when thrown var/fragile = TRUE + /// The largest weight class we can carry, inclusive. + /// IE, if we this is normal, we can carry normal items or smaller. + var/biggest_w_class = WEIGHT_CLASS_NORMAL /obj/item/plate/Initialize(mapload) . = ..() @@ -23,10 +26,13 @@ /obj/item/plate/attackby(obj/item/I, mob/user, params) if(!IS_EDIBLE(I)) - to_chat(user, span_notice("[src] is made for food, and food alone!")) + balloon_alert(user, "not food!") + return + if(I.w_class > biggest_w_class) + balloon_alert(user, "too big!") return if(contents.len >= max_items) - to_chat(user, span_notice("[src] can't fit more items!")) + balloon_alert(user, "can't fit!") return var/list/modifiers = params2list(params) //Center the icon where the user clicked. @@ -62,6 +68,9 @@ item_to_plate.pixel_x = 0 item_to_plate.pixel_y = 0 update_appearance() + // If the incoming item is the same weight class as the plate, bump us up a class + if(item_to_plate.w_class == w_class) + w_class += 1 ///This proc cleans up any signals on the item when it is removed from a plate, and ensures it has the correct state again. /obj/item/plate/proc/ItemRemovedFromPlate(obj/item/removed_item) @@ -69,11 +78,18 @@ removed_item.vis_flags &= ~VIS_INHERIT_PLANE vis_contents -= removed_item UnregisterSignal(removed_item, list(COMSIG_MOVABLE_MOVED, COMSIG_QDELETING)) - // Resettt + // Reset item offsets removed_item.pixel_x = removed_item.pixel_w removed_item.pixel_y = removed_item.pixel_z removed_item.pixel_w = 0 removed_item.pixel_z = 0 + // We need to ensure the weight class is accurate now that we've lost something + // that may or may not have been of equal weight + w_class = initial(w_class) + for(var/obj/item/on_board in src) + if(on_board.w_class == w_class) + w_class += 1 + break ///This proc is called by signals that remove the food from the plate. /obj/item/plate/proc/ItemMoved(obj/item/moved_item, atom/OldLoc, Dir, Forced) @@ -87,6 +103,7 @@ max_items = 12 max_x_offset = 8 max_height_offset = 12 + biggest_w_class = WEIGHT_CLASS_BULKY /obj/item/plate/small name = "appetizer plate" @@ -95,6 +112,7 @@ max_items = 4 max_x_offset = 4 max_height_offset = 5 + biggest_w_class = WEIGHT_CLASS_SMALL /obj/item/plate_shard name = "ceramic shard" 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 1da96fc0aae706..77606f5e372108 100644 --- a/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm +++ b/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm @@ -31,11 +31,6 @@ required_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/sugar = 5) required_catalysts = list(/datum/reagent/consumable/enzyme = 5) -/datum/chemical_reaction/drink/wine - results = list(/datum/reagent/consumable/ethanol/wine = 10) - required_reagents = list(/datum/reagent/consumable/grapejuice = 10) - required_catalysts = list(/datum/reagent/consumable/enzyme = 5) - /datum/chemical_reaction/drink/spacebeer results = list(/datum/reagent/consumable/ethanol/beer = 10) required_reagents = list(/datum/reagent/consumable/flour = 10) @@ -361,7 +356,7 @@ required_reagents = list(/datum/reagent/consumable/ethanol/brave_bull = 5, /datum/reagent/consumable/ethanol/syndicatebomb = 5, /datum/reagent/consumable/ethanol/absinthe = 5) mix_message = "The mixture darkens to a healthy crimson." required_temp = 315 //Piping hot! - reaction_tags = REACTION_TAG_DRINK | REACTION_TAG_EASY | REACTION_TAG_BRUTE | REACTION_TAG_BURN | REACTION_TAG_TOXIN | REACTION_TAG_OXY | REACTION_TAG_CLONE + reaction_tags = REACTION_TAG_DRINK | REACTION_TAG_EASY | REACTION_TAG_BRUTE | REACTION_TAG_BURN | REACTION_TAG_TOXIN | REACTION_TAG_OXY /datum/chemical_reaction/drink/bacchus_blessing results = list(/datum/reagent/consumable/ethanol/bacchus_blessing = 4) diff --git a/code/modules/food_and_drinks/recipes/drinks/drinks_non-alcoholic.dm b/code/modules/food_and_drinks/recipes/drinks/drinks_non-alcoholic.dm index b3db43009a0a31..e4585669b8dc5b 100644 --- a/code/modules/food_and_drinks/recipes/drinks/drinks_non-alcoholic.dm +++ b/code/modules/food_and_drinks/recipes/drinks/drinks_non-alcoholic.dm @@ -105,12 +105,12 @@ /datum/chemical_reaction/drink/coffee results = list(/datum/reagent/consumable/coffee = 5) required_reagents = list(/datum/reagent/toxin/coffeepowder = 1, /datum/reagent/water = 5) - pollutant_type = /datum/pollutant/food/coffee //SKYRAT EDIT ADDITION - Pollution + pollutant_type = /datum/pollutant/food/coffee //NOVA EDIT ADDITION - Pollution /datum/chemical_reaction/drink/tea results = list(/datum/reagent/consumable/tea = 5) required_reagents = list(/datum/reagent/toxin/teapowder = 1, /datum/reagent/water = 5) - pollutant_type = /datum/pollutant/food/tea //SKYRAT EDIT ADDITION + pollutant_type = /datum/pollutant/food/tea //NOVA EDIT ADDITION /datum/chemical_reaction/drink/cream_soda results = list(/datum/reagent/consumable/cream_soda = 4) diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm index 3b6092917b44d4..761ff0c471283e 100644 --- a/code/modules/food_and_drinks/recipes/food_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm @@ -131,13 +131,13 @@ results = list(/datum/reagent/consumable/hot_ramen = 3) required_reagents = list(/datum/reagent/water = 1, /datum/reagent/consumable/dry_ramen = 3) - pollutant_type = /datum/pollutant/food/spicy_noodles //SKYRAT EDIT ADDITION + pollutant_type = /datum/pollutant/food/spicy_noodles //NOVA EDIT ADDITION /datum/chemical_reaction/food/hell_ramen results = list(/datum/reagent/consumable/hell_ramen = 6) required_reagents = list(/datum/reagent/consumable/capsaicin = 1, /datum/reagent/consumable/hot_ramen = 6) - pollutant_type = /datum/pollutant/food/spicy_noodles //SKYRAT EDIT ADDITION + pollutant_type = /datum/pollutant/food/spicy_noodles //NOVA EDIT ADDITION /datum/chemical_reaction/food/imitationcarpmeat required_reagents = list(/datum/reagent/toxin/carpotoxin = 5) @@ -284,3 +284,9 @@ 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 + +/datum/chemical_reaction/food/vinegar + results = list(/datum/reagent/consumable/vinegar = 5) + required_reagents = list(/datum/reagent/consumable/grapejuice = 5) + required_catalysts = list(/datum/reagent/consumable/enzyme = 5) + mix_message = "The smell of the mixture reminds you of how you lost access to the country club..." diff --git a/code/modules/food_and_drinks/recipes/soup_mixtures.dm b/code/modules/food_and_drinks/recipes/soup_mixtures.dm index b35bc128d321ed..7a80f291b870b2 100644 --- a/code/modules/food_and_drinks/recipes/soup_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/soup_mixtures.dm @@ -62,24 +62,45 @@ if(!length(required_ingredients)) return TRUE - // This is very unoptimized for something ran every handle-reaction for every soup recipe. - // Look into ways for improving this, cause bleh + //copy of all ingredients to check out var/list/reqs_copy = required_ingredients.Copy() + //number of ingredients who's requested amounts has been satisfied + var/completed_ingredients = 0 for(var/obj/item/ingredient as anything in pot.added_ingredients) - // See if we fulfill all reqs - for(var/ingredient_type in required_ingredients) - if(!istype(ingredient, ingredient_type)) - continue - if(isstack(ingredient)) - var/obj/item/stack/stack_ingredient = ingredient - reqs_copy[ingredient_type] -= stack_ingredient.amount + var/ingredient_type = ingredient.type + do + { + var/ingredient_count = reqs_copy[ingredient_type] + + //means we still have left over ingredients + if(ingredient_count) + //decode ingredient type i.e. stack or not and fulfill request + if(ispath(ingredient_type, /obj/item/stack)) + var/obj/item/stack/stack_ingredient = ingredient + ingredient_count -= stack_ingredient.amount + else + ingredient_count -= 1 + + //assign final values + if(ingredient_count <= 0) + completed_ingredients += 1 + ingredient_count = 0 + reqs_copy[ingredient_type] = ingredient_count + + //work complete + break + + //means we have to look for subtypes + else if(isnull(ingredient_count)) + ingredient_type = type2parent(ingredient_type) + + //means we have no more remaining ingredients so bail, can happen if multiple ingredients of the same type/subtype are in the pot else - reqs_copy[ingredient_type] -= 1 + break + } + while(ingredient_type != /obj/item) - for(var/fulfilled in reqs_copy) - if(reqs_copy[fulfilled] > 0) - return FALSE - return TRUE + return completed_ingredients == reqs_copy.len /datum/chemical_reaction/food/soup/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) if(!length(required_ingredients)) @@ -167,24 +188,31 @@ new_ingredient.reagents?.chem_temp = holder.chem_temp cached_ingredients[new_ref] = new_ingredient.reagents?.total_volume || 1 + var/turf/below_pot = get_turf(pot) for(var/datum/weakref/ingredient_ref as anything in cached_ingredients) var/obj/item/ingredient = ingredient_ref.resolve() + // An ingredient has gone missing, stop the reaction if(QDELETED(ingredient) || ingredient.loc != holder.my_atom) testing("Soup reaction ended due to having an invalid ingredient present.") return END_REACTION - // Don't add any more reagents if we've boiled over - if(reaction.data["boiled_over"]) - continue - - // Transfer 20% of the initial reagent volume of the ingredient to the soup - transfer_ingredient_reagents(ingredient, holder, max(cached_ingredients[ingredient_ref] * 0.2, 2)) + // Transfer 20% of the initial reagent volume of the ingredient to the soup. + if(!transfer_ingredient_reagents(ingredient, holder, max(cached_ingredients[ingredient_ref] * 0.2, 2))) + continue //all reagents were transfered // Uh oh we reached the top of the pot, the soup's gonna boil over. if(holder.total_volume >= holder.maximum_volume * 0.95) - boil_over(holder) - reaction.data["boiled_over"] = TRUE + below_pot.visible_message(span_warning("[pot] starts to boil over!")) + // Create a spread of dirty foam + var/datum/effect_system/fluid_spread/foam/dirty/soup_mess = new() + soup_mess.reagent_scale = 0.1 // (Just a little) + soup_mess.set_up(range = 1, holder = pot, location = below_pot, carry = holder, stop_reactions = TRUE) + soup_mess.start() + // Loses a bit from the foam + for(var/datum/reagent/reagent as anything in holder.reagent_list) + reagent.volume *= 0.5 + holder.update_total() /datum/chemical_reaction/food/soup/reaction_finish(datum/reagents/holder, datum/equilibrium/reaction, react_vol) . = ..() @@ -234,45 +262,34 @@ /** * 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. Returns TRUE if any reagents were transfered FALSE if there is + * nothing to transfer * - * 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 + * Arguments + * * obj/item/ingredient - The ingredient to transfer reagents from + * * datum/reagentsholder - 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 + return FALSE 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) - return + return FALSE if(isnull(amount)) amount = ingredient_pool.total_volume testing("Soup reaction has made it to the finishing step with ingredients that still contain reagents. [amount] reagents left in [ingredient].") // Some of the nutriment goes into "creating the soup reagent" itself, gets deleted. // Mainly done so that nutriment doesn't overpower the main course - ingredient_pool.remove_reagent(/datum/reagent/consumable/nutriment, amount * percentage_of_nutriment_converted) - ingredient_pool.remove_reagent(/datum/reagent/consumable/nutriment/vitamin, amount * percentage_of_nutriment_converted) + var/remove_amount = amount * percentage_of_nutriment_converted + ingredient_pool.remove_reagent(/datum/reagent/consumable/nutriment, remove_amount) + ingredient_pool.remove_reagent(/datum/reagent/consumable/nutriment/vitamin, remove_amount) // 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) - below_pot.visible_message(span_warning("[pot] starts to boil over!")) - // Create a spread of dirty foam - var/datum/effect_system/fluid_spread/foam/dirty/soup_mess = new() - soup_mess.reagent_scale = 0.1 // (Just a little) - soup_mess.set_up(range = 1, holder = pot, location = below_pot, carry = holder, stop_reactions = TRUE) - soup_mess.start() - // Loses a bit from the foam - for(var/datum/reagent/reagent as anything in holder.reagent_list) - reagent.volume = round(reagent.volume * 0.9, 0.05) - holder.update_total() + return TRUE /// Adds text to the requirements list of the recipe /// Return a list of strings, each string will be a new line in the requirements list @@ -693,7 +710,7 @@ /datum/chemical_reaction/food/soup/bloodsoup required_reagents = list( - /datum/reagent/water = 10, + /datum/reagent/water/salt = 10, // NOVA EDIT CHANGE - ORIGINAL: /datum/reagent/water = 10, /datum/reagent/blood = 10, ) required_ingredients = list( diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm index e78efd293ffcd8..c05446d35218eb 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm @@ -222,7 +222,7 @@ /datum/reagent/blood = 50, /datum/reagent/medicine/strange_reagent = 5 ) - result = /mob/living/simple_animal/pet/cat/breadcat + result = /mob/living/basic/pet/cat/breadcat category = CAT_BREAD /datum/crafting_recipe/food/frenchtoast diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm index 06b5e8952eddd2..4e7c63413ecea8 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm @@ -397,3 +397,71 @@ ) result = /obj/item/food/burger/sloppy_moe category = CAT_BURGER + +/datum/crafting_recipe/food/kortaburger + name = "Plain Rootburger" + reqs = list( + /obj/item/food/patty/plain = 1, + /obj/item/food/rootroll = 1 + ) + result = /obj/item/food/burger/plain/korta + category = CAT_BURGER + +/datum/crafting_recipe/food/ratkorta + name = "Rat Rootburger" + reqs = list( + /obj/item/food/deadmouse = 1, + /obj/item/food/rootroll = 1 + ) + result = /obj/item/food/burger/rat/korta + category = CAT_BURGER + +/datum/crafting_recipe/food/rootguffin + name = "Root-Guffin" + reqs = list( + /obj/item/food/friedegg = 1, + /obj/item/food/meat/bacon = 2, + /obj/item/food/rootroll = 1 + ) + result = /obj/item/food/burger/rootguffin + category = CAT_BURGER + +/datum/crafting_recipe/food/rootrib + name = "RootRib" + reqs = list( + /obj/item/food/bbqribs = 1, //The sauce is already included in the ribs + /obj/item/food/onion_slice = 1, //feel free to remove if too burdensome. + /obj/item/food/rootroll = 1 + ) + result = /obj/item/food/burger/rootrib + category = CAT_BURGER + +/datum/crafting_recipe/food/rootchicken + name = "Chicken Rootwich" + reqs = list( + /obj/item/food/patty/chicken = 1, + /datum/reagent/consumable/mayonnaise = 5, + /obj/item/food/rootroll = 1 + ) + result = /obj/item/food/burger/rootchicken + category = CAT_BURGER + +/datum/crafting_recipe/food/rootfish + name = "Fish rootburger" + reqs = list( + /obj/item/food/fishmeat = 1, + /obj/item/food/rootroll = 1 + ) + result = /obj/item/food/burger/rootfish + category = CAT_BURGER + +/datum/crafting_recipe/food/sloppyroot + name = "Sssloppy moe" + reqs = list( + /obj/item/food/rootroll = 1, + /obj/item/food/meat/cutlet = 2, + /obj/item/food/onion_slice = 1, + /datum/reagent/consumable/bbqsauce = 5, + ) + result = /obj/item/food/burger/sloppyroot + category = CAT_BURGER diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm index 4a2c9f2935d3de..b34cc5f36e965d 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm @@ -226,7 +226,7 @@ /datum/reagent/consumable/sprinkles = 5, /datum/reagent/teslium = 1 //To shock the whole thing into life ) - result = /mob/living/simple_animal/pet/cat/cak + result = /mob/living/basic/pet/cat/cak category = CAT_CAKE //Cat! Haha, get it? CAT? GET IT? We get it - Love Felines /datum/crafting_recipe/food/fruitcake diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm index c260f5b4d1b5f7..0e71758b0630f9 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm @@ -310,3 +310,14 @@ ) result = /obj/item/food/popsicle/licorice_creamsicle category = CAT_ICE + +/datum/crafting_recipe/food/meatsicle + name = "Meatsicle" + reqs = list( + /obj/item/popsicle_stick = 1, + /obj/item/food/meat/slab = 1, + /datum/reagent/consumable/ice = 2, + /datum/reagent/consumable/sugar = 2 + ) + result = /obj/item/food/popsicle/meatsicle + category = CAT_ICE diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm index fcb25b39ba8d2c..98eafb66823df8 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm @@ -262,6 +262,76 @@ result = /obj/item/food/beef_wellington category = CAT_MEAT +/datum/crafting_recipe/food/korta_wellington + name = "Korta Wellington" + reqs = list( + /obj/item/food/meat/steak = 1, + /obj/item/food/grown/mushroom = 1, + /obj/item/food/grown/garlic = 1, + /obj/item/food/meat/bacon = 1, + /obj/item/food/flatrootdough = 1, + /datum/reagent/consumable/korta_milk = 5, + /datum/reagent/consumable/salt = 2, + /datum/reagent/consumable/blackpepper = 2 + ) + result = /obj/item/food/korta_wellington + category = CAT_MEAT + +/datum/crafting_recipe/food/full_roast + name = "Roast Chicken Dinner" + reqs = list( + /obj/item/food/meat/steak/chicken = 2, + /obj/item/food/roastparsnip = 1, + /obj/item/food/grown/onion = 1, + /obj/item/food/grown/peas = 1, + /obj/item/food/grown/potato = 1, + /obj/item/food/grown/cabbage = 1, + /obj/item/food/grown/herbs = 1, + /datum/reagent/consumable/flour = 5, + /datum/reagent/consumable/gravy = 15, + /datum/reagent/consumable/salt = 2, + /datum/reagent/consumable/blackpepper = 2 + ) + result = /obj/item/food/roast_dinner + category = CAT_MEAT + +/datum/crafting_recipe/food/full_roast_lizzy + name = "Grain-Free Roast Chicken Dinner" + reqs = list( + /obj/item/food/meat/steak/chicken = 2, + /obj/item/food/roastparsnip = 1, + /obj/item/food/grown/onion = 1, + /obj/item/food/grown/peas = 1, + /obj/item/food/grown/potato = 1, + /obj/item/food/grown/cabbage = 1, + /obj/item/food/grown/herbs = 1, + /datum/reagent/consumable/korta_flour = 25, + /datum/reagent/consumable/nutriment = 5, + /datum/reagent/blood = 5, + /datum/reagent/consumable/salt = 2, + /datum/reagent/consumable/blackpepper = 2 + ) + result = /obj/item/food/roast_dinner_lizzy + category = CAT_MEAT + +/datum/crafting_recipe/food/full_roast_tofu + name = "Meat-Free Roast Dinner" + reqs = list( + /obj/item/food/tofu = 6, + /obj/item/food/roastparsnip = 1, + /obj/item/food/grown/onion = 1, + /obj/item/food/grown/peas = 1, + /obj/item/food/grown/potato = 1, + /obj/item/food/grown/cabbage = 1, + /obj/item/food/grown/herbs = 1, + /datum/reagent/consumable/flour = 15, + /datum/reagent/consumable/soymilk = 15, + /datum/reagent/consumable/salt = 2, + /datum/reagent/consumable/blackpepper = 2 + ) + result = /obj/item/food/roast_dinner_tofu + category = CAT_MEAT + /datum/crafting_recipe/food/full_english name = "Full English Breakfast" reqs = list( diff --git a/code/modules/food_and_drinks/restaurant/custom_order.dm b/code/modules/food_and_drinks/restaurant/custom_order.dm index d87797b25780dd..ac819e4debf1fb 100644 --- a/code/modules/food_and_drinks/restaurant/custom_order.dm +++ b/code/modules/food_and_drinks/restaurant/custom_order.dm @@ -171,7 +171,8 @@ var/datum/reagents/holder = object_used.reagents // The container must be majority reagent - if(holder.get_master_reagent_id() != reagent_type) + var/datum/reagent/master_reagent = holder.get_master_reagent() + if(master_reagent?.type != reagent_type) return FALSE // We must fulfill the sample size threshold if(reagents_needed > holder.total_volume) diff --git a/code/modules/forensics/_forensics.dm b/code/modules/forensics/_forensics.dm index 5936ce4b5c4dee..75cbc55df280d1 100644 --- a/code/modules/forensics/_forensics.dm +++ b/code/modules/forensics/_forensics.dm @@ -66,7 +66,7 @@ src.fibers = LAZY_LISTS_OR(src.fibers, fibers) check_blood() -/datum/forensics/Destroy(force, ...) +/datum/forensics/Destroy(force) var/atom/parent_atom = parent.resolve() if (!isnull(parent_atom)) UnregisterSignal(parent_atom, list(COMSIG_COMPONENT_CLEAN_ACT)) diff --git a/code/modules/hallucination/_hallucination.dm b/code/modules/hallucination/_hallucination.dm index a48b3854b08f7b..9e23a656802904 100644 --- a/code/modules/hallucination/_hallucination.dm +++ b/code/modules/hallucination/_hallucination.dm @@ -137,7 +137,7 @@ /obj/effect/client_image_holder/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents) . = ..() - if(same_z_layer) + if(QDELETED(src) || same_z_layer) return SET_PLANE(shown_image, PLANE_TO_TRUE(shown_image.plane), new_turf) diff --git a/code/modules/hallucination/delusions.dm b/code/modules/hallucination/delusions.dm index 312972f5c9a470..106988f73277b2 100644 --- a/code/modules/hallucination/delusions.dm +++ b/code/modules/hallucination/delusions.dm @@ -18,8 +18,13 @@ var/delusion_icon_file /// The icon state of the delusion image var/delusion_icon_state - /// Do we use a generated icon? If yes no icon file or state needed. - var/dynamic_icon = FALSE + + /// Do we use an appearance/generated icon? If yes no icon file or state needed. + var/dynamic_delusion = FALSE + /// Appearance to use as a source for our image + /// If this exists we'll ignore the icon/state from above + var/mutable_appearance/delusion_appearance + /// The name of the delusion image var/delusion_name @@ -56,7 +61,7 @@ return ..() /datum/hallucination/delusion/start() - if(!hallucinator.client || !delusion_icon_file) + if(!hallucinator.client) return FALSE feedback_details += "Delusion: [delusion_name]" @@ -96,7 +101,11 @@ return TRUE /datum/hallucination/delusion/proc/make_delusion_image(mob/over_who) - var/image/funny_image = image(delusion_icon_file, over_who, dynamic_icon ? "" : delusion_icon_state) + var/image/funny_image + if(delusion_appearance) + funny_image = image(delusion_appearance, over_who) + else + funny_image = image(delusion_icon_file, over_who, delusion_icon_state) funny_image.name = delusion_name funny_image.override = TRUE return funny_image @@ -197,14 +206,14 @@ return funny_image /datum/hallucination/delusion/preset/syndies + dynamic_delusion = TRUE random_hallucination_weight = 1 - dynamic_icon = TRUE delusion_name = "Syndicate" affects_others = TRUE affects_us = FALSE /datum/hallucination/delusion/preset/syndies/make_delusion_image(mob/over_who) - delusion_icon_file = getFlatIcon(get_dynamic_human_appearance( + delusion_appearance = get_dynamic_human_appearance( mob_spawn_path = pick( /obj/effect/mob_spawn/corpse/human/syndicatesoldier, /obj/effect/mob_spawn/corpse/human/syndicatecommando, @@ -217,7 +226,7 @@ /obj/item/gun/ballistic/automatic/c20r, /obj/item/gun/ballistic/shotgun/bulldog, ), - )) + ) return ..() @@ -229,3 +238,34 @@ affects_us = FALSE affects_others = TRUE random_hallucination_weight = 0 + +/// Hallucination used by the path of moon heretic to turn everyone into a lunar mass +/datum/hallucination/delusion/preset/moon + delusion_icon_file = 'icons/mob/nonhuman-player/eldritch_mobs.dmi' + delusion_icon_state = "moon_mass" + delusion_name = "moon" + duration = 15 SECONDS + affects_others = TRUE + random_hallucination_weight = 0 + +// Hallucination used by heretic paintings +/datum/hallucination/delusion/preset/heretic + dynamic_delusion = TRUE + random_hallucination_weight = 0 + delusion_name = "Heretic" + affects_others = TRUE + affects_us = FALSE + duration = 11 SECONDS + +/datum/hallucination/delusion/preset/heretic/make_delusion_image(mob/over_who) + // This code is dummy hot for DUMB reasons so let's not make a mob constantly yeah? + var/static/mutable_appearance/heretic_appearance + if(isnull(heretic_appearance)) + heretic_appearance = get_dynamic_human_appearance(/datum/outfit/heretic, r_hand = NO_REPLACE) + delusion_appearance = heretic_appearance + return ..() + +/datum/hallucination/delusion/preset/heretic/gate + delusion_name = "Mind Gate" + duration = 60 SECONDS + affects_us = TRUE diff --git a/code/modules/hallucination/hazard.dm b/code/modules/hallucination/hazard.dm index 7209087d4be095..1dfdfd23970e73 100644 --- a/code/modules/hallucination/hazard.dm +++ b/code/modules/hallucination/hazard.dm @@ -86,6 +86,10 @@ image_state = "flux" image_layer = OBJ_LAYER + 0.01 +/obj/effect/client_image_holder/hallucination/danger/anomaly/generate_image() + . = ..() + apply_wibbly_filters(.) + /obj/effect/client_image_holder/hallucination/danger/anomaly/Initialize(mapload, list/mobs_which_see_us, datum/hallucination/parent) . = ..() START_PROCESSING(SSobj, src) diff --git a/code/modules/hallucination/mother.dm b/code/modules/hallucination/mother.dm index 70c4f13d173a92..d9cd7f1983119d 100644 --- a/code/modules/hallucination/mother.dm +++ b/code/modules/hallucination/mother.dm @@ -16,11 +16,11 @@ 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("[hallucinator]!!!!") + talk("[capitalize(hallucinator.real_name)]!!!!") // Your mother won't be fooled by paltry disguises var/list/scold_lines = list( - pick(list("CLEAN YOUR ROOM THIS INSTANT!", "IT'S TIME TO WAKE UP FOR SCHOOL!!")), - pick(list("YOU INSULT YOUR GRANDPARENTS!", "USELESS!")), - pick(list("I BROUGHT YOU INTO THIS WORLD, I CAN TAKE YOU OUT!!!", "YOU'RE GROUNDED!!")), + 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) @@ -75,7 +75,19 @@ image_state = "" /obj/effect/client_image_holder/hallucination/your_mother/Initialize(mapload, list/mobs_which_see_us, datum/hallucination/parent) - . = ..() - var/mob/living/carbon/hallucinator = parent.hallucinator - image_icon = getFlatIcon(get_dynamic_human_appearance(/datum/outfit/yourmother, hallucinator.dna.species.type)) - regenerate_image() + 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/hallucination/station_message.dm b/code/modules/hallucination/station_message.dm index eb55e548b3edd8..97b37e77cd9e26 100644 --- a/code/modules/hallucination/station_message.dm +++ b/code/modules/hallucination/station_message.dm @@ -16,8 +16,14 @@ /datum/hallucination/station_message/shuttle_dock /datum/hallucination/station_message/shuttle_dock/start() - priority_announce("[SSshuttle.emergency || "The Emergency Shuttle"] has docked with the station. You have 3 minutes to board the Emergency Shuttle.", \ - null, ANNOUNCER_SHUTTLEDOCK, ANNOUNCEMENT_TYPE_PRIORITY, players = list(hallucinator)) + priority_announce( + text = "[SSshuttle.emergency] has docked with the station. You have [DisplayTimeText(SSshuttle.emergency_dock_time)] to board the emergency shuttle.", + title = "Emergency Shuttle Arrival", + sound = ANNOUNCER_SHUTTLEDOCK, + sender_override = "Emergency Shuttle Uplink Alert", + players = list(hallucinator), + color_override = "orange", + ) return ..() /datum/hallucination/station_message/malf_ai @@ -49,7 +55,13 @@ var/message_with_name = pick(ascension_bodies) message_with_name = replacetext(message_with_name, "%FAKENAME%", totally_real_heretic.real_name) - priority_announce("[generate_heretic_text()] [message_with_name] [generate_heretic_text()]","[generate_heretic_text()]", ANNOUNCER_SPANOMALIES, players = list(hallucinator)) + priority_announce( + text = "[generate_heretic_text()] [message_with_name] [generate_heretic_text()]", + title = "[generate_heretic_text()]", + sound = ANNOUNCER_SPANOMALIES, + players = list(hallucinator), + color_override = "pink", + ) return ..() /datum/hallucination/station_message/cult_summon @@ -65,10 +77,13 @@ var/area/fake_summon_area_type = pick(GLOB.the_station_areas - hallucinator_area.type) var/area/fake_summon_area = GLOB.areas_by_type[fake_summon_area_type] - priority_announce("Figments from an eldritch god are being summoned by [totally_real_cult_leader.real_name] \ - into [fake_summon_area] from an unknown dimension. Disrupt the ritual at all costs!", \ - "Central Command Higher Dimensional Affairs", \ - sound = 'sound/ambience/antag/bloodcult/bloodcult_scribe.ogg', has_important_message = TRUE, players = list(hallucinator)) + priority_announce( + text = "Figments from an eldritch god are being summoned by [totally_real_cult_leader.real_name] into [fake_summon_area] from an unknown dimension. Disrupt the ritual at all costs!", + title = "[command_name()] Higher Dimensional Affairs", + sound = 'sound/ambience/antag/bloodcult/bloodcult_scribe.ogg', + has_important_message = TRUE, + players = list(hallucinator), + ) return ..() /datum/hallucination/station_message/meteors diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index f66fe88a7e56c0..f41f607dabe120 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -27,6 +27,8 @@ var/poster_icon = "holiday_unfinished" /// Color scheme for this holiday var/list/holiday_colors + /// The default pattern of the holiday, if the requested pattern is null. + var/holiday_pattern = PATTERN_DEFAULT // This proc gets run before the game starts when the holiday is activated. Do festive shit here. /datum/holiday/proc/celebrate() @@ -78,7 +80,7 @@ return FALSE /// Procs to return holiday themed colors for recoloring atoms -/datum/holiday/proc/get_holiday_colors(atom/thing_to_color, pattern = PATTERN_DEFAULT) +/datum/holiday/proc/get_holiday_colors(atom/thing_to_color, pattern = holiday_pattern) if(!holiday_colors) return switch(pattern) @@ -87,7 +89,7 @@ if(PATTERN_VERTICAL_STRIPE) return holiday_colors[(thing_to_color.x % holiday_colors.len) + 1] -/proc/request_holiday_colors(atom/thing_to_color, pattern = PATTERN_DEFAULT) +/proc/request_holiday_colors(atom/thing_to_color, pattern) switch(pattern) if(PATTERN_RANDOM) return "#[random_short_color()]" @@ -98,7 +100,9 @@ return for(var/holiday_key in GLOB.holidays) var/datum/holiday/holiday_real = GLOB.holidays[holiday_key] - return holiday_real.get_holiday_colors(thing_to_color, pattern) + if(!holiday_real.holiday_colors) + continue + return holiday_real.get_holiday_colors(thing_to_color, pattern || holiday_real.holiday_pattern) // The actual holidays @@ -132,6 +136,12 @@ timezones = list(TIMEZONE_NZDT, TIMEZONE_CHADT) begin_day = 6 begin_month = FEBRUARY + holiday_colors = list( + COLOR_UNION_JACK_BLUE, + COLOR_WHITE, + COLOR_UNION_JACK_RED, + COLOR_WHITE, + ) /datum/holiday/nz/getStationPrefix() return pick("Aotearoa","Kiwi","Fish 'n' Chips","Kākāpō","Southern Cross") @@ -222,6 +232,12 @@ begin_day = 17 begin_month = MARCH holiday_hat = /obj/item/clothing/head/soft/green + holiday_colors = list( + COLOR_IRISH_GREEN, + COLOR_WHITE, + COLOR_IRISH_ORANGE, + ) + holiday_pattern = PATTERN_VERTICAL_STRIPE /datum/holiday/no_this_is_patrick/getStationPrefix() return pick("Blarney","Green","Leprechaun","Booze") @@ -264,6 +280,11 @@ begin_day = 20 begin_month = APRIL holiday_hat = /obj/item/clothing/head/rasta + holiday_colors = list( + COLOR_ETHIOPIA_GREEN, + COLOR_ETHIOPIA_YELLOW, + COLOR_ETHIOPIA_RED, + ) /datum/holiday/fourtwenty/getStationPrefix() return pick("Snoop","Blunt","Toke","Dank","Cheech","Chong") @@ -366,12 +387,12 @@ begin_day = 23 end_day = 29 holiday_colors = list( - COLOR_PRIDE_PURPLE, - COLOR_PRIDE_BLUE, - COLOR_PRIDE_GREEN, - COLOR_PRIDE_YELLOW, - COLOR_PRIDE_ORANGE, - COLOR_PRIDE_RED, + COLOR_PRIDE_PURPLE, + COLOR_PRIDE_BLUE, + COLOR_PRIDE_GREEN, + COLOR_PRIDE_YELLOW, + COLOR_PRIDE_ORANGE, + COLOR_PRIDE_RED, ) // JULY @@ -398,6 +419,14 @@ begin_month = JULY mail_holiday = TRUE holiday_hat = /obj/item/clothing/head/cowboy/brown + holiday_colors = list( + COLOR_OLD_GLORY_BLUE, + COLOR_OLD_GLORY_RED, + COLOR_WHITE, + COLOR_OLD_GLORY_RED, + COLOR_WHITE, + ) + /datum/holiday/usa/getStationPrefix() return pick("Independent","American","Burger","Bald Eagle","Star-Spangled", "Fireworks") @@ -414,9 +443,15 @@ begin_month = JULY holiday_hat = /obj/item/clothing/head/beret mail_holiday = TRUE + holiday_colors = list( + COLOR_FRENCH_BLUE, + COLOR_WHITE, + COLOR_FRENCH_RED + ) + holiday_pattern = PATTERN_VERTICAL_STRIPE /datum/holiday/france/getStationPrefix() - return pick("Francais","Fromage", "Zut", "Merde") + return pick("Francais", "Fromage", "Zut", "Merde", "Sacrebleu") /datum/holiday/france/greet() return "Do you hear the people sing?" @@ -463,6 +498,7 @@ name = "Independence Day of Ukraine" begin_month = AUGUST begin_day = 24 + holiday_colors = list(COLOR_TRUE_BLUE, COLOR_TANGERINE_YELLOW) /datum/holiday/ukraine/getStationPrefix() return pick("Kyiv", "Ukraine") @@ -483,7 +519,7 @@ return pick("Tizira", "Lizard", "Imperial") /datum/holiday/ianbirthday - name = "Ian's Birthday" //github.com/tgstation/tgstation/commit/de7e4f0de0d568cd6e1f0d7bcc3fd34700598acb + name = IAN_HOLIDAY //github.com/tgstation/tgstation/commit/de7e4f0de0d568cd6e1f0d7bcc3fd34700598acb begin_month = SEPTEMBER begin_day = 9 end_day = 10 @@ -576,6 +612,11 @@ begin_day = 6 begin_month = NOVEMBER end_day = 7 + holiday_colors = list( + COLOR_MEDIUM_DARK_RED, + COLOR_GOLD, + COLOR_MEDIUM_DARK_RED, + ) /datum/holiday/october_revolution/getStationPrefix() return pick("Communist", "Soviet", "Bolshevik", "Socialist", "Red", "Workers'") @@ -586,6 +627,9 @@ begin_day = 11 holiday_hat = /obj/item/food/grown/poppy +/datum/holiday/remembrance_day/greet() + return "Lest we forget." + /datum/holiday/remembrance_day/getStationPrefix() return pick("Peace", "Armistice", "Poppy") @@ -662,6 +706,10 @@ end_day = 27 holiday_hat = /obj/item/clothing/head/costume/santa mail_holiday = TRUE + holiday_colors = list( + COLOR_CHRISTMAS_GREEN, + COLOR_CHRISTMAS_RED, + ) /datum/holiday/xmas/getStationPrefix() return pick( @@ -794,9 +842,9 @@ SSticker.OnRoundstart(CALLBACK(src, PROC_REF(roundstart_celebrate))) GLOB.maintenance_loot += list( list( - /obj/item/toy/xmas_cracker = 3, /obj/item/clothing/head/costume/santa = 1, - /obj/item/a_gift/anything = 1 + /obj/item/gift/anything = 1, + /obj/item/toy/xmas_cracker = 3, ) = maint_holiday_weight, ) diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm index 085225e34f3799..da9029a891d169 100644 --- a/code/modules/holodeck/computer.dm +++ b/code/modules/holodeck/computer.dm @@ -286,6 +286,7 @@ GLOBAL_LIST_INIT(typecache_holodeck_linked_floorcheck_ok, typecacheof(list(/turf RegisterSignal(holo_effect_product, COMSIG_QDELETING, PROC_REF(remove_from_holo_lists)) if(islist(holo_effect_product)) for(var/atom/atom_product as anything in holo_effect_product) + spawned += atom_product RegisterSignal(atom_product, COMSIG_QDELETING, PROC_REF(remove_from_holo_lists)) return @@ -294,12 +295,12 @@ GLOBAL_LIST_INIT(typecache_holodeck_linked_floorcheck_ok, typecacheof(list(/turf holo_object.resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF if(isstructure(holo_object)) - holo_object.flags_1 |= NODECONSTRUCT_1 + holo_object.obj_flags |= NO_DECONSTRUCTION return if(ismachinery(holo_object)) var/obj/machinery/holo_machine = holo_object - holo_machine.flags_1 |= NODECONSTRUCT_1 + holo_machine.obj_flags |= NO_DECONSTRUCTION holo_machine.power_change() if(istype(holo_machine, /obj/machinery/button)) @@ -325,6 +326,8 @@ GLOBAL_LIST_INIT(typecache_holodeck_linked_floorcheck_ok, typecacheof(list(/turf UnregisterSignal(holo_atom, COMSIG_QDELETING) var/turf/target_turf = get_turf(holo_atom) 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 + if(atom_contents.flags_1 & HOLOGRAM_1) //hologram in hologram is fine + continue atom_contents.forceMove(target_turf) if(istype(holo_atom, /obj/item/clothing/under)) @@ -425,7 +428,7 @@ GLOBAL_LIST_INIT(typecache_holodeck_linked_floorcheck_ok, typecacheof(list(/turf user.log_message("emagged the Holodeck Control Console.", LOG_GAME) message_admins("[ADMIN_LOOKUPFLW(user)] emagged the Holodeck Control Console.") - say("Warning. Automatic shutoff and derezzing protocols have been corrupted. Please call Nanotrasen maintenance and do not use the simulator.") + say("Warning. Automatic shutoff and derezzing protocols have been corrupted. Please call Symphionia maintenance and do not use the simulator.") nerf(!(obj_flags & EMAGGED),FALSE) return TRUE diff --git a/code/modules/holodeck/holo_effect.dm b/code/modules/holodeck/holo_effect.dm index 76b3d320774e42..1bbedefb2e0ef3 100644 --- a/code/modules/holodeck/holo_effect.dm +++ b/code/modules/holodeck/holo_effect.dm @@ -49,7 +49,8 @@ var/static/banned_books = list(/obj/item/book/manual/random, /obj/item/book/manual/nuclear, /obj/item/book/manual/wiki) var/newtype = pick(subtypesof(/obj/item/book/manual) - banned_books) var/obj/item/book/manual/to_spawn = new newtype(loc) - to_spawn.flags_1 |= (HOLOGRAM_1 | NODECONSTRUCT_1) + to_spawn.flags_1 |= HOLOGRAM_1 + to_spawn.obj_flags |= NO_DECONSTRUCTION return to_spawn /obj/effect/holodeck_effect/mobspawner @@ -94,8 +95,8 @@ /mob/living/basic/pet/dog/pug, ) mobtype += pick( - /mob/living/simple_animal/pet/cat, - /mob/living/simple_animal/pet/cat/kitten, + /mob/living/basic/pet/cat, + /mob/living/basic/pet/cat/kitten, ) /obj/effect/holodeck_effect/mobspawner/bee @@ -104,6 +105,13 @@ /obj/effect/holodeck_effect/mobspawner/monkey mobtype = /mob/living/carbon/human/species/monkey/holodeck +/obj/effect/holodeck_effect/mobspawner/monkey/activate(obj/machinery/computer/holodeck/computer) + var/mob/living/carbon/human/monkey = ..() + . = list() + monkey + + for(var/atom/atom as anything in monkey.contents + monkey.organs) + . += atom + /obj/effect/holodeck_effect/mobspawner/penguin mobtype = /mob/living/basic/pet/penguin/emperor/neuter diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm index 019c229842efb2..10229929c84ccc 100644 --- a/code/modules/holodeck/items.dm +++ b/code/modules/holodeck/items.dm @@ -100,13 +100,14 @@ . = ..() if(.) return - if(user.stat || machine_stat & (NOPOWER|BROKEN)) + if(machine_stat & (NOPOWER|BROKEN)) to_chat(user, span_warning("This device is not powered!")) return - currentarea = get_area(src.loc) - if(!currentarea) + currentarea = get_area(src) + if(isnull(currentarea)) qdel(src) + return if(eventstarted) to_chat(usr, span_warning("The event has already begun!")) @@ -118,10 +119,11 @@ var/numbuttons = 0 var/numready = 0 - for(var/obj/machinery/readybutton/button in currentarea) - numbuttons++ - if (button.ready) - numready++ + for(var/turf/area_turf as anything in currentarea.get_contained_turfs()) + for(var/obj/machinery/readybutton/button in area_turf) + numbuttons++ + if(button.ready) + numready++ if(numbuttons == numready) begin_event() @@ -134,12 +136,13 @@ eventstarted = TRUE - for(var/obj/structure/window/W in currentarea) - if(W.flags_1&NODECONSTRUCT_1) // Just in case: only holo-windows - qdel(W) + for(var/turf/area_turf as anything in currentarea.get_contained_turfs()) + for(var/obj/structure/window/barrier in area_turf) + if((barrier.obj_flags & NO_DECONSTRUCTION) || (barrier.flags_1 & HOLOGRAM_1))// Just in case: only holo-windows + qdel(barrier) - for(var/mob/M in currentarea) - to_chat(M, span_userdanger("FIGHT!")) + for(var/mob/contestant in area_turf) + to_chat(contestant, span_userdanger("FIGHT!")) /obj/machinery/conveyor/holodeck diff --git a/code/modules/holodeck/turfs.dm b/code/modules/holodeck/turfs.dm index 1e89052af59b4a..15a82c5aa5577e 100644 --- a/code/modules/holodeck/turfs.dm +++ b/code/modules/holodeck/turfs.dm @@ -8,8 +8,9 @@ /turf/open/floor/holofloor/attackby(obj/item/I, mob/living/user) return // HOLOFLOOR DOES NOT GIVE A FUCK -/turf/open/floor/holofloor/tool_act(mob/living/user, obj/item/tool, tool_type, is_right_clicking) - return +/turf/open/floor/holofloor/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) + SHOULD_CALL_PARENT(FALSE) + return NONE // Fuck you /turf/open/floor/holofloor/burn_tile() return //you can't burn a hologram! diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm index 9ecde7400d9449..6636fedd25cab6 100644 --- a/code/modules/hydroponics/beekeeping/beebox.dm +++ b/code/modules/hydroponics/beekeeping/beebox.dm @@ -144,7 +144,7 @@ /obj/structure/beebox/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/beebox/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/honey_frame)) diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 1f2951b33566e2..00a52ab82a8683 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -198,7 +198,7 @@ /obj/machinery/biogenerator/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/biogenerator/attackby(obj/item/attacking_item, mob/living/user, params) if(user.combat_mode) @@ -315,6 +315,11 @@ if(!food_to_convert) break + if(food_to_convert.flags_1 & HOLOGRAM_1) + qdel(food_to_convert) + current_item_count = max(current_item_count - 1, 0) + continue + convert_to_biomass(food_to_convert) use_power(active_power_usage * seconds_per_tick) @@ -335,10 +340,7 @@ * subsequently be deleted. */ /obj/machinery/biogenerator/proc/convert_to_biomass(obj/item/food/food_to_convert) - var/static/list/nutrient_subtypes = typesof(/datum/reagent/consumable/nutriment) - var/nutriments = 0 - - nutriments += ROUND_UP(food_to_convert.reagents.get_multiple_reagent_amounts(nutrient_subtypes)) + var/nutriments = ROUND_UP(food_to_convert.reagents.get_reagent_amount(/datum/reagent/consumable/nutriment, type_check = REAGENT_PARENT_TYPE)) qdel(food_to_convert) current_item_count = max(current_item_count - 1, 0) biomass += nutriments * productivity diff --git a/code/modules/hydroponics/fermenting_barrel.dm b/code/modules/hydroponics/fermenting_barrel.dm index d96bc1ec0099d9..af3bbb060d552b 100644 --- a/code/modules/hydroponics/fermenting_barrel.dm +++ b/code/modules/hydroponics/fermenting_barrel.dm @@ -84,7 +84,7 @@ /obj/structure/fermenting_barrel/update_overlays() . = ..() - if(src.renamedByPlayer || HAS_TRAIT(src, TRAIT_HAS_LABEL)) + if(HAS_TRAIT(src, TRAIT_WAS_RENAMED) || HAS_TRAIT(src, TRAIT_HAS_LABEL)) . += mutable_appearance(icon, "[base_icon_state]_overlay_label") /// Adds the fruit to the barrel to queue the fermentation diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 98569f7e24811d..c0fdbcd46074f2 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -146,9 +146,9 @@ var/grind_results_num = LAZYLEN(grind_results) if(grind_results_num) var/average_purity = reagents.get_average_purity() - var/total_nutriment_amount = reagents.get_reagent_amount(/datum/reagent/consumable/nutriment, include_subtypes = TRUE) + var/total_nutriment_amount = reagents.get_reagent_amount(/datum/reagent/consumable/nutriment, type_check = REAGENT_SUB_TYPE) var/single_reagent_amount = grind_results_num > 1 ? round(total_nutriment_amount / grind_results_num, CHEMICAL_QUANTISATION_LEVEL) : total_nutriment_amount - reagents.remove_all_type(/datum/reagent/consumable/nutriment, total_nutriment_amount) + reagents.remove_reagent(/datum/reagent/consumable/nutriment, total_nutriment_amount, include_subtypes = TRUE) for(var/reagent in grind_results) reagents.add_reagent(reagent, single_reagent_amount, added_purity = average_purity) diff --git a/code/modules/hydroponics/grown/beans.dm b/code/modules/hydroponics/grown/beans.dm index 8643c616b4757f..fb827377114046 100644 --- a/code/modules/hydroponics/grown/beans.dm +++ b/code/modules/hydroponics/grown/beans.dm @@ -14,7 +14,7 @@ icon_grow = "soybean-grow" icon_dead = "soybean-dead" genes = list(/datum/plant_gene/trait/repeated_harvest) - mutatelist = list(/obj/item/seeds/soya/koi) + mutatelist = list(/obj/item/seeds/soya/koi, /obj/item/seeds/soya/butter) reagents_add = list(/datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.05, /datum/reagent/consumable/nutriment/fat/oil = 0.03) //Vegetable oil! /obj/item/food/grown/soybeans @@ -26,7 +26,7 @@ foodtypes = VEGETABLES grind_results = list(/datum/reagent/consumable/soymilk = 0) tastes = list("soy" = 1) - wine_power = 20 + distill_reagent = /datum/reagent/consumable/soysauce // Koibean /obj/item/seeds/soya/koi @@ -39,7 +39,7 @@ potency = 10 mutatelist = null reagents_add = list(/datum/reagent/toxin/carpotoxin = 0.1, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.05) - rarity = 20 + rarity = PLANT_MODERATELY_RARE /obj/item/food/grown/koibeans seed = /obj/item/seeds/soya/koi @@ -50,6 +50,38 @@ tastes = list("koi" = 1) wine_power = 40 +//Butterbeans, the beans wid da butta! +// Butterbeans! - Squeeze for a single butter slice! +/obj/item/seeds/soya/butter + name = "pack of butterbean seeds" + desc = "These seeds grow into butterbean plants." + icon_state = "seed-butterbean" + species = "butterbean" + plantname = "butterbean Plants" + product = /obj/item/food/grown/butterbeans + potency = 10 + mutatelist = null + reagents_add = list(/datum/reagent/consumable/milk = 0.05, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/cream = 0.05) + rarity = 20 + +/obj/item/food/grown/butterbeans + seed = /obj/item/seeds/soya/butter + name = "butterbean" + desc = "Soft, creamy and milky... You could almost smear them over toast." + icon_state = "butterbeans" + foodtypes = VEGETABLES | DAIRY + tastes = list("creamy butter" = 1) + distill_reagent = /datum/reagent/consumable/yoghurt + +/obj/item/food/grown/butterbeans/attack_self(mob/living/user) + user.visible_message(span_notice("[user] crushes [src] into a pat of butter."), span_notice("You crush [src] into something that resembles butter.")) + playsound(user, 'sound/effects/blobattack.ogg', 50, TRUE) + var/obj/item/food/butterslice/butties = new(null) + butties.reagents.set_all_reagents_purity(seed.get_reagent_purity()) + qdel(src) + user.put_in_hands(butties) + return TRUE + // Green Beans /obj/item/seeds/greenbean name = "pack of green bean seeds" @@ -96,7 +128,7 @@ mutatelist = null reagents_add = list(/datum/reagent/consumable/nutriment = 0.05, /datum/reagent/ants = 0.1) //IRL jumping beans contain insect larve, hence the ants graft_gene = /datum/plant_gene/trait/stable_stats - rarity = 20 + rarity = PLANT_MODERATELY_RARE /obj/item/food/grown/jumpingbeans seed = /obj/item/seeds/greenbean/jump @@ -105,4 +137,3 @@ icon_state = "jumpingbean" foodtypes = FRUIT | BUGS tastes = list("bugs" = 1) - diff --git a/code/modules/hydroponics/grown/berries.dm b/code/modules/hydroponics/grown/berries.dm index 81ef903c6c12f5..233765609200fd 100644 --- a/code/modules/hydroponics/grown/berries.dm +++ b/code/modules/hydroponics/grown/berries.dm @@ -92,7 +92,7 @@ mutatelist = null genes = list(/datum/plant_gene/trait/glow/white, /datum/plant_gene/trait/repeated_harvest) reagents_add = list(/datum/reagent/uranium = 0.25, /datum/reagent/iodine = 0.2, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1) - rarity = 20 + rarity = PLANT_MODERATELY_RARE graft_gene = /datum/plant_gene/trait/glow/white /obj/item/food/grown/berries/glow diff --git a/code/modules/hydroponics/grown/cannabis.dm b/code/modules/hydroponics/grown/cannabis.dm index 4ac0e396b9d4c6..bffeb459cd4b37 100644 --- a/code/modules/hydroponics/grown/cannabis.dm +++ b/code/modules/hydroponics/grown/cannabis.dm @@ -20,7 +20,7 @@ /obj/item/seeds/cannabis/white, /obj/item/seeds/cannabis/ultimate, ) - reagents_add = list(/datum/reagent/drug/thc = 0.15) //SKYRAT EDIT - MORENARCOTICS - axed lipolicide, replaced space drugs with thc + reagents_add = list(/datum/reagent/drug/thc = 0.15) //NOVA EDIT - MORENARCOTICS - axed lipolicide, replaced space drugs with thc /obj/item/seeds/cannabis/rainbow @@ -44,7 +44,7 @@ plantname = "Deathweed" product = /obj/item/food/grown/cannabis/death mutatelist = null - reagents_add = list(/datum/reagent/toxin/cyanide = 0.35, /datum/reagent/drug/thc = 0.15) //SKYRAT EDIT - MORENARCOTICS + reagents_add = list(/datum/reagent/toxin/cyanide = 0.35, /datum/reagent/drug/thc = 0.15) //NOVA EDIT - MORENARCOTICS rarity = 40 /obj/item/seeds/cannabis/white @@ -57,7 +57,7 @@ instability = 30 product = /obj/item/food/grown/cannabis/white mutatelist = null - reagents_add = list(/datum/reagent/medicine/omnizine = 0.35, /datum/reagent/drug/thc = 0.15) //SKYRAT EDIT - MORENARCOTICS + reagents_add = list(/datum/reagent/medicine/omnizine = 0.35, /datum/reagent/drug/thc = 0.15) //NOVA EDIT - MORENARCOTICS rarity = 40 @@ -72,7 +72,7 @@ product = /obj/item/food/grown/cannabis/ultimate genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/green, /datum/plant_gene/trait/modified_volume/omega_weed) mutatelist = null - reagents_add = list(/datum/reagent/drug/thc = 0.3, //SKYRAT EDIT - MORE NARCOTICS - ORIGINAL: reagents_add = list(/datum/reagent/drug/cannabis = 0.3, + reagents_add = list(/datum/reagent/drug/thc = 0.3, //NOVA EDIT - MORE NARCOTICS - ORIGINAL: reagents_add = list(/datum/reagent/drug/cannabis = 0.3, /datum/reagent/toxin/mindbreaker = 0.3, /datum/reagent/mercury = 0.15, /datum/reagent/lithium = 0.15, diff --git a/code/modules/hydroponics/grown/chili.dm b/code/modules/hydroponics/grown/chili.dm index ee5c87a40c359c..9f6d3bbd08ce0e 100644 --- a/code/modules/hydroponics/grown/chili.dm +++ b/code/modules/hydroponics/grown/chili.dm @@ -39,7 +39,7 @@ lifespan = 25 maturation = 4 production = 4 - rarity = 20 + rarity = PLANT_MODERATELY_RARE genes = list(/datum/plant_gene/trait/chem_cooling) mutatelist = null reagents_add = list(/datum/reagent/consumable/frostoil = 0.25, /datum/reagent/consumable/nutriment/vitamin = 0.02, /datum/reagent/consumable/nutriment = 0.02) @@ -66,7 +66,7 @@ maturation = 10 production = 10 yield = 3 - rarity = 20 + rarity = PLANT_MODERATELY_RARE genes = list(/datum/plant_gene/trait/chem_heating, /datum/plant_gene/trait/backfire/chili_heat) mutatelist = null reagents_add = list(/datum/reagent/consumable/condensedcapsaicin = 0.3, /datum/reagent/consumable/capsaicin = 0.55, /datum/reagent/consumable/nutriment = 0.04) @@ -93,7 +93,7 @@ maturation = 10 production = 10 yield = 3 - rarity = 20 + rarity = PLANT_MODERATELY_RARE genes = list(/datum/plant_gene/trait/repeated_harvest) mutatelist = null reagents_add = list(/datum/reagent/consumable/nutriment/vitamin = 0.08, /datum/reagent/consumable/nutriment = 0.04) diff --git a/code/modules/hydroponics/grown/corn.dm b/code/modules/hydroponics/grown/corn.dm index 1b3a7979cf0587..8eab962d751181 100644 --- a/code/modules/hydroponics/grown/corn.dm +++ b/code/modules/hydroponics/grown/corn.dm @@ -13,7 +13,7 @@ growing_icon = 'icons/obj/service/hydroponics/growing_vegetables.dmi' icon_grow = "corn-grow" // Uses one growth icons set for all the subtypes icon_dead = "corn-dead" // Same for the dead icon - mutatelist = list(/obj/item/seeds/corn/snapcorn) + mutatelist = list(/obj/item/seeds/corn/snapcorn, /obj/item/seeds/corn/pepper) reagents_add = list(/datum/reagent/consumable/nutriment/fat/oil/corn = 0.2, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1) /obj/item/food/grown/corn @@ -97,3 +97,29 @@ seed = /obj/item/seeds/corn/snapcorn name = "snap corn cob" desc = "A reminder of pranks gone by." + +//Pepper-corn - Heh funny. +/obj/item/seeds/corn/pepper + name = "pack of pepper-corn seeds" + desc = "If Peter picked a pack of pepper-corn..." + icon_state = "seed-peppercorn" + species = "peppercorn" + plantname = "Pepper-Corn Stalks" + product = /obj/item/food/grown/peppercorn + mutatelist = null + reagents_add = list(/datum/reagent/consumable/blackpepper = 0.2, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1) + +/obj/item/food/grown/peppercorn + seed = /obj/item/seeds/corn/pepper + name = "ear of pepper-peppercorn" + desc = "This dusty monster needs god..." + icon_state = "peppercorn" + trash_type = /obj/item/grown/corncob/pepper + foodtypes = VEGETABLES + grind_results = list(/datum/reagent/consumable/blackpepper = 0) + tastes = list("pepper" = 1, "sneezing" = 1) + +/obj/item/grown/corncob/pepper + seed = /obj/item/seeds/corn/pepper + name = "pepper corn cob" + desc = "A reminder of genetic abominations gone by." diff --git a/code/modules/hydroponics/grown/flowers.dm b/code/modules/hydroponics/grown/flowers.dm index 333c7f57c4584c..84b1414335cafa 100644 --- a/code/modules/hydroponics/grown/flowers.dm +++ b/code/modules/hydroponics/grown/flowers.dm @@ -242,7 +242,7 @@ genes = list(/datum/plant_gene/trait/backfire/novaflower_heat, /datum/plant_gene/trait/attack/novaflower_attack, /datum/plant_gene/trait/preserved) mutatelist = null reagents_add = list(/datum/reagent/consumable/condensedcapsaicin = 0.25, /datum/reagent/consumable/capsaicin = 0.3, /datum/reagent/consumable/nutriment = 0, /datum/reagent/toxin/acid = 0.05) - rarity = 20 + rarity = PLANT_MODERATELY_RARE /obj/item/grown/novaflower seed = /obj/item/seeds/sunflower/novaflower diff --git a/code/modules/hydroponics/grown/korta_nut.dm b/code/modules/hydroponics/grown/korta_nut.dm index bf6ab82d474101..cfa6c1e5b51f33 100644 --- a/code/modules/hydroponics/grown/korta_nut.dm +++ b/code/modules/hydroponics/grown/korta_nut.dm @@ -39,7 +39,7 @@ production = 10 mutatelist = null reagents_add = list(/datum/reagent/consumable/korta_nectar = 0.1, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1) - rarity = 20 + rarity = PLANT_MODERATELY_RARE /obj/item/food/grown/korta_nut/sweet seed = /obj/item/seeds/korta_nut/sweet diff --git a/code/modules/hydroponics/grown/melon.dm b/code/modules/hydroponics/grown/melon.dm index f69f8a68317cb0..0e59231141fc43 100644 --- a/code/modules/hydroponics/grown/melon.dm +++ b/code/modules/hydroponics/grown/melon.dm @@ -50,7 +50,7 @@ genes = list(/datum/plant_gene/trait/glow/yellow, /datum/plant_gene/trait/anti_magic) mutatelist = null reagents_add = list(/datum/reagent/water/holywater = 0.2, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1) - rarity = 20 + rarity = PLANT_MODERATELY_RARE graft_gene = /datum/plant_gene/trait/glow/yellow /obj/item/food/grown/holymelon diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm index 074f9d5f8d2fb1..bfc50f0c483b3b 100644 --- a/code/modules/hydroponics/grown/mushrooms.dm +++ b/code/modules/hydroponics/grown/mushrooms.dm @@ -238,7 +238,7 @@ potency = 30 //-> brightness instability = 20 growthstages = 4 - rarity = 20 + rarity = PLANT_MODERATELY_RARE genes = list(/datum/plant_gene/trait/glow, /datum/plant_gene/trait/plant_type/fungal_metabolism) growing_icon = 'icons/obj/service/hydroponics/growing_mushrooms.dmi' mutatelist = list(/obj/item/seeds/glowshroom/glowcap, /obj/item/seeds/glowshroom/shadowshroom) diff --git a/code/modules/hydroponics/grown/peas.dm b/code/modules/hydroponics/grown/peas.dm index c232ed247c6905..4a3225fe385ffe 100644 --- a/code/modules/hydroponics/grown/peas.dm +++ b/code/modules/hydroponics/grown/peas.dm @@ -45,7 +45,7 @@ genes = list (/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/purple, /datum/plant_gene/trait/plant_laughter) mutatelist = list (/obj/item/seeds/peas/laugh/peace) reagents_add = list (/datum/reagent/consumable/laughter = 0.05, /datum/reagent/consumable/sugar = 0.05, /datum/reagent/consumable/nutriment = 0.07) - rarity = 25 //It actually might make Central Command Officials loosen up a smidge, eh? + rarity = 25 //It actually might make Conglomeration of Colonists Officials loosen up a smidge, eh? graft_gene = /datum/plant_gene/trait/plant_laughter /obj/item/food/grown/laugh @@ -77,7 +77,7 @@ icon_dead = "worldpeas-dead" genes = list (/datum/plant_gene/trait/glow/blue) reagents_add = list (/datum/reagent/pax = 0.1, /datum/reagent/drug/happiness = 0.1, /datum/reagent/consumable/nutriment = 0.15) - rarity = 50 // This absolutely will make even the most hardened Syndicate Operators relax. + rarity = 50 // This absolutely will make even the most hardened Symphionia Operators relax. graft_gene = /datum/plant_gene/trait/glow/blue mutatelist = null diff --git a/code/modules/hydroponics/grown/pumpkin.dm b/code/modules/hydroponics/grown/pumpkin.dm index 561bd5119aa73b..11130c153344ab 100644 --- a/code/modules/hydroponics/grown/pumpkin.dm +++ b/code/modules/hydroponics/grown/pumpkin.dm @@ -48,7 +48,7 @@ product = /obj/item/food/grown/pumpkin/blumpkin mutatelist = null reagents_add = list(/datum/reagent/ammonia = 0.2, /datum/reagent/chlorine = 0.1, /datum/reagent/consumable/nutriment = 0.2) - rarity = 20 + rarity = PLANT_MODERATELY_RARE /obj/item/food/grown/pumpkin/blumpkin seed = /obj/item/seeds/pumpkin/blumpkin diff --git a/code/modules/hydroponics/grown/replicapod.dm b/code/modules/hydroponics/grown/replicapod.dm index c1fd02bf9f0641..6e999568f3f1d7 100644 --- a/code/modules/hydroponics/grown/replicapod.dm +++ b/code/modules/hydroponics/grown/replicapod.dm @@ -197,7 +197,7 @@ if(!features["mcolor"]) features["mcolor"] = "#59CE00" /*if(!features["pod_hair"]) - features["pod_hair"] = pick(GLOB.pod_hair_list)*/ //SKYRAT EDIT - Tricolor Pod Hair + features["pod_hair"] = pick(GLOB.pod_hair_list)*/ //NOVA EDIT - Tricolor Pod Hair for(var/V in quirks) new V(podman) diff --git a/code/modules/hydroponics/grown/root.dm b/code/modules/hydroponics/grown/root.dm index df37e3bf2b791d..da2bb3f5d68f00 100644 --- a/code/modules/hydroponics/grown/root.dm +++ b/code/modules/hydroponics/grown/root.dm @@ -27,11 +27,17 @@ /obj/item/food/grown/carrot/attackby(obj/item/I, mob/user, params) if(I.get_sharpness()) - to_chat(user, span_notice("You sharpen the carrot into a shiv with [I].")) - var/obj/item/knife/shiv/carrot/Shiv = new /obj/item/knife/shiv/carrot + var/carrot_blade + var/carrot_sword_chance = (max(0, seed.potency - 50) / 50) + if (prob(carrot_sword_chance)) + carrot_blade = new /obj/item/claymore/carrot + to_chat(user, span_notice("You sharpen the carrot into a sword with [I].")) + else + carrot_blade = new /obj/item/knife/shiv/carrot + to_chat(user, span_notice("You sharpen the carrot into a shiv with [I].")) remove_item_from_storage(user) qdel(src) - user.put_in_hands(Shiv) + user.put_in_hands(carrot_blade) else return ..() diff --git a/code/modules/hydroponics/grown/sugarcane.dm b/code/modules/hydroponics/grown/sugarcane.dm index 9a1646443dcd16..be2214ca1d048d 100644 --- a/code/modules/hydroponics/grown/sugarcane.dm +++ b/code/modules/hydroponics/grown/sugarcane.dm @@ -15,7 +15,7 @@ instability = 15 growthstages = 2 reagents_add = list(/datum/reagent/consumable/nutriment = 0.04, /datum/reagent/consumable/sugar = 0.25) - mutatelist = list(/obj/item/seeds/bamboo) + mutatelist = list(/obj/item/seeds/bamboo, /obj/item/seeds/sugarcane/saltcane) /obj/item/food/grown/sugarcane seed = /obj/item/seeds/sugarcane @@ -56,3 +56,25 @@ /obj/item/grown/log/bamboo/CheckAccepted(obj/item/I) return FALSE + +//Saltcane - Gross, salty shafts! +/obj/item/seeds/sugarcane/saltcane + name = "pack of saltcane seeds" + desc = "These seeds grow into saltcane." + icon_state = "seed-saltcane" + species = "saltcane" + plantname = "Saltcane" + product = /obj/item/food/grown/sugarcane/saltcane + genes = list(/datum/plant_gene/trait/repeated_harvest) + reagents_add = list(/datum/reagent/consumable/nutriment = 0.04, /datum/reagent/consumable/salt = 0.25) + mutatelist = null + +/obj/item/food/grown/sugarcane/saltcane + seed = /obj/item/seeds/sugarcane/saltcane + name = "saltcane" + desc = "Ungodly salty, bane of slugs, treasure of horses." + icon_state = "saltcane" + foodtypes = VEGETABLES | GROSS + +/obj/item/food/grown/sugarcane/saltcane/make_dryable() + AddElement(/datum/element/dryable, /obj/item/food/seaweedsheet/saltcane) //soooshi diff --git a/code/modules/hydroponics/grown/tea_coffee.dm b/code/modules/hydroponics/grown/tea_coffee.dm index 72ef53545d04c9..366dd8b45237ec 100644 --- a/code/modules/hydroponics/grown/tea_coffee.dm +++ b/code/modules/hydroponics/grown/tea_coffee.dm @@ -34,7 +34,7 @@ product = /obj/item/food/grown/tea/astra mutatelist = null reagents_add = list(/datum/reagent/medicine/synaptizine = 0.1, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/toxin/teapowder = 0.1) - rarity = 20 + rarity = PLANT_MODERATELY_RARE /obj/item/food/grown/tea/astra seed = /obj/item/seeds/tea/astra @@ -83,7 +83,7 @@ product = /obj/item/food/grown/coffee/robusta mutatelist = null reagents_add = list(/datum/reagent/medicine/ephedrine = 0.1, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/toxin/coffeepowder = 0.1) - rarity = 20 + rarity = PLANT_MODERATELY_RARE /obj/item/food/grown/coffee/robusta seed = /obj/item/seeds/coffee/robusta diff --git a/code/modules/hydroponics/grown/tobacco.dm b/code/modules/hydroponics/grown/tobacco.dm index c47bdfc32f6646..87f8253a4d96b5 100644 --- a/code/modules/hydroponics/grown/tobacco.dm +++ b/code/modules/hydroponics/grown/tobacco.dm @@ -32,7 +32,7 @@ product = /obj/item/food/grown/tobacco/space mutatelist = null reagents_add = list(/datum/reagent/medicine/salbutamol = 0.05, /datum/reagent/drug/nicotine = 0.08, /datum/reagent/consumable/nutriment = 0.03) - rarity = 20 + rarity = PLANT_MODERATELY_RARE /obj/item/food/grown/tobacco/space seed = /obj/item/seeds/tobacco/space diff --git a/code/modules/hydroponics/grown/tomato.dm b/code/modules/hydroponics/grown/tomato.dm index c2fa44c76625f4..e676d822bbf1a8 100644 --- a/code/modules/hydroponics/grown/tomato.dm +++ b/code/modules/hydroponics/grown/tomato.dm @@ -37,7 +37,7 @@ product = /obj/item/food/grown/tomato/blood mutatelist = null reagents_add = list(/datum/reagent/blood = 0.2, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1) - rarity = 20 + rarity = PLANT_MODERATELY_RARE /obj/item/food/grown/tomato/blood seed = /obj/item/seeds/tomato/blood @@ -63,7 +63,7 @@ mutatelist = list(/obj/item/seeds/tomato/blue/bluespace) genes = list(/datum/plant_gene/trait/slip, /datum/plant_gene/trait/repeated_harvest) reagents_add = list(/datum/reagent/lube = 0.2, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1) - rarity = 20 + rarity = PLANT_MODERATELY_RARE graft_gene = /datum/plant_gene/trait/slip /obj/item/food/grown/tomato/blue diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 3012a1f14793b4..1b95c69b7ae344 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -28,7 +28,7 @@ product = /obj/item/grown/log/steel mutatelist = null reagents_add = list(/datum/reagent/cellulose = 0.05, /datum/reagent/iron = 0.05) - rarity = 20 + rarity = PLANT_MODERATELY_RARE /obj/item/grown/log seed = /obj/item/seeds/tower @@ -146,7 +146,7 @@ build_stab_overlay() /obj/structure/punji_sticks/proc/build_stab_overlay() - stab_overlay = mutable_appearance(icon, "[icon_state]_stab", layer = ABOVE_MOB_LAYER, offset_spokesman = src, plane = GAME_PLANE_FOV_HIDDEN) + stab_overlay = mutable_appearance(icon, "[icon_state]_stab", layer = ABOVE_MOB_LAYER) /obj/structure/punji_sticks/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents) . = ..() diff --git a/code/modules/hydroponics/grown/weeds/nettle.dm b/code/modules/hydroponics/grown/weeds/nettle.dm index 316cc7723acb82..98868b8d6e748b 100644 --- a/code/modules/hydroponics/grown/weeds/nettle.dm +++ b/code/modules/hydroponics/grown/weeds/nettle.dm @@ -29,7 +29,7 @@ genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/plant_type/weed_hardy, /datum/plant_gene/trait/stinging, /datum/plant_gene/trait/attack/nettle_attack/death, /datum/plant_gene/trait/backfire/nettle_burn/death) mutatelist = null reagents_add = list(/datum/reagent/toxin/acid/fluacid = 0.5, /datum/reagent/toxin/acid = 0.5) - rarity = 20 + rarity = PLANT_MODERATELY_RARE graft_gene = /datum/plant_gene/trait/stinging /obj/item/food/grown/nettle // "snack" diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index fdc408319485a9..4d7278eb9e4754 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -1,8 +1,8 @@ // Plant analyzer -/obj/item/plant_analyzer//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/item/plant_analyzer//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "plant analyzer" desc = "A scanner used to evaluate a plant's various areas of growth, and genetic traits. Comes with a growth scanning mode and a chemical scanning mode." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/scanner.dmi' icon_state = "hydro" inhand_icon_state = "analyzer" worn_icon_state = "plantanalyzer" @@ -421,7 +421,7 @@ inhand_icon_state = "cultivator" lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY force = 5 throwforce = 7 w_class = WEIGHT_CLASS_SMALL @@ -472,7 +472,7 @@ inhand_icon_state = "hatchet" lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY force = 12 w_class = WEIGHT_CLASS_SMALL throwforce = 15 @@ -504,7 +504,7 @@ resistance_flags = FLAMMABLE flags_1 = NONE -/* Skyrat Edit Start - Modularization and New Scythes +/* NOVA EDIT Start - Modularization and New Scythes /obj/item/scythe name = "scythe" desc = "A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow." @@ -518,7 +518,7 @@ throw_speed = 2 throw_range = 3 w_class = WEIGHT_CLASS_BULKY - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY armour_penetration = 20 wound_bonus = 10 slot_flags = ITEM_SLOT_BACK @@ -578,7 +578,7 @@ worn_icon_state = "cutters" lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY force = 5 throwforce = 6 w_class = WEIGHT_CLASS_SMALL @@ -608,7 +608,7 @@ worn_icon_state = "cutters" lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY force = 10 throwforce = 8 w_class = WEIGHT_CLASS_SMALL diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 95f118a0c91571..d1eb12a4ea979f 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -60,8 +60,8 @@ //SO HERE LIES THE "nutrilevel" VAR. IT'S DEAD AND I PUT IT OUT OF IT'S MISERY. USE "reagents" INSTEAD. ~ArcaneMusic, accept no substitutes. create_reagents(maxnutri, INJECTABLE) if(mapload) - reagents.add_reagent(/datum/reagent/plantnutriment/eznutriment, 10) //Half filled nutrient trays for dirt trays to have more to grow with in prison/lavaland. - waterlevel = 100 + reagents.add_reagent(/datum/reagent/plantnutriment/eznutriment, max(maxnutri / 2, 10)) //Half filled nutrient trays for dirt trays to have more to grow with in prison/lavaland. + waterlevel = maxwater . = ..() var/static/list/hovering_item_typechecks = list( @@ -161,6 +161,7 @@ AddComponent(/datum/component/simple_rotation) AddComponent(/datum/component/plumbing/hydroponics) AddComponent(/datum/component/usb_port, list(/obj/item/circuit_component/hydroponics)) + AddComponent(/datum/component/fishing_spot, /datum/fish_source/hydro_tray) /obj/machinery/hydroponics/constructable/RefreshParts() . = ..() @@ -252,7 +253,7 @@ // Move the leaked water from nutrients to... water var/leaking_water_amount = nutri_reagents.get_reagent_amount(/datum/reagent/water) if(leaking_water_amount) - nutri_reagents.trans_id_to(water_reagents, /datum/reagent/water, leaking_water_amount) + nutri_reagents.trans_to(water_reagents, leaking_water_amount, target_id = /datum/reagent/water) // We should only take MACHINE_REAGENT_TRANSFER every tick; this is the remaining amount we can take var/remaining_transfer_amount = max(MACHINE_REAGENT_TRANSFER - (nutri_reagents.total_volume - initial_nutri_amount), 0) @@ -325,9 +326,9 @@ // Nutrients deplete at a constant rate, since new nutrients can boost stats far easier. apply_chemicals(lastuser?.resolve()) if(self_sustaining) - reagents.remove_any(min(0.5, nutridrain)) + reagents.remove_all(min(0.5, nutridrain)) else - reagents.remove_any(nutridrain) + reagents.remove_all(nutridrain) // Lack of nutrients hurts non-weeds if(reagents.total_volume <= 0 && !myseed.get_gene(/datum/plant_gene/trait/plant_type/weed_hardy)) @@ -836,7 +837,7 @@ /obj/machinery/hydroponics/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/hydroponics/attackby(obj/item/O, mob/user, params) //Called when mob user "attacks" it with object O @@ -886,7 +887,7 @@ if(istype(not_water_reagent,/datum/reagent/water)) continue var/transfer_me_to_tray = reagent_source.reagents.get_reagent_amount(not_water_reagent.type) * transfer_amount / reagent_source.reagents.total_volume - reagent_source.reagents.trans_id_to(H.reagents, not_water_reagent.type, transfer_me_to_tray) + reagent_source.reagents.trans_to(H.reagents, transfer_me_to_tray, target_id = not_water_reagent.type) else reagent_source.reagents.trans_to(H.reagents, transfer_amount, transferred_by = user) lastuser = WEAKREF(user) @@ -899,7 +900,7 @@ reagent_source.update_appearance() return 1 - else if(istype(O, /obj/item/seeds) && !istype(O, /obj/item/seeds/sample)) + else if(istype(O, /obj/item/seeds)) if(!myseed) if(istype(O, /obj/item/seeds/kudzu)) investigate_log("had Kudzu planted in it by [key_name(user)] at [AREACOORD(src)].", INVESTIGATE_BOTANY) @@ -1158,7 +1159,7 @@ circuit = null density = FALSE use_power = NO_POWER_USE - flags_1 = NODECONSTRUCT_1 + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION unwrenchable = FALSE self_sustaining_overlay_icon_state = null maxnutri = 15 diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index 003ff873aebb0f..98eef6b816e3ac 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -23,7 +23,8 @@ * Returns TRUE if the seed can take the gene, and FALSE otherwise. */ /datum/plant_gene/proc/can_add(obj/item/seeds/our_seed) - return !istype(our_seed, /obj/item/seeds/sample) // Samples can't accept new genes. + SHOULD_CALL_PARENT(TRUE) + return TRUE /// Copies over vars and information about our current gene to a new gene and returns the new instance of gene. /datum/plant_gene/proc/Copy() @@ -151,9 +152,8 @@ if(!.) return FALSE - for(var/obj/item/seeds/found_seed as anything in seed_blacklist) - if(istype(source_seed, found_seed)) - return FALSE + if(is_type_in_list(source_seed, seed_blacklist)) + return FALSE for(var/datum/plant_gene/trait/trait in source_seed.genes) if(trait_ids & trait.trait_ids) diff --git a/code/modules/hydroponics/sample.dm b/code/modules/hydroponics/sample.dm deleted file mode 100644 index 4bb43027cdbc89..00000000000000 --- a/code/modules/hydroponics/sample.dm +++ /dev/null @@ -1,21 +0,0 @@ -/obj/item/seeds/sample - name = "plant sample" - icon_state = "sample-empty" - potency = -1 - yield = -1 - var/sample_color = "#FFFFFF" - -/obj/item/seeds/sample/Initialize(mapload) - . = ..() - if(sample_color) - var/mutable_appearance/filling = mutable_appearance(icon, "sample-filling") - filling.color = sample_color - add_overlay(filling) - -/obj/item/seeds/sample/get_unique_analyzer_text() - return "The DNA of this sample is damaged beyond recovery, it can't support life on its own." - -/obj/item/seeds/sample/alienweed - name = "alien weed sample" - icon_state = "alienweed" - sample_color = null diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index 04b0edf44bbf2b..c558cba8b3eabe 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -91,7 +91,7 @@ /obj/machinery/seed_extractor/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/seed_extractor/attackby(obj/item/attacking_item, mob/living/user, params) if(!isliving(user) || user.combat_mode) diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 3a399c872162b0..d079323e3a9c9c 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -292,14 +292,14 @@ // Heats up the plant's contents by 25 kelvin per 1 unit of nutriment. Mutually exclusive with cooling. if(get_gene(/datum/plant_gene/trait/chem_heating)) T.visible_message(span_notice("[T] releases freezing air, consuming its nutriments to heat its contents.")) - T.reagents.remove_all_type(/datum/reagent/consumable/nutriment, num_nutriment, strict = TRUE) + T.reagents.remove_reagent(/datum/reagent/consumable/nutriment, num_nutriment) T.reagents.chem_temp = min(1000, (T.reagents.chem_temp + num_nutriment * 25)) T.reagents.handle_reactions() playsound(T.loc, 'sound/effects/wounds/sizzle2.ogg', 5) // Cools down the plant's contents by 5 kelvin per 1 unit of nutriment. Mutually exclusive with heating. else if(get_gene(/datum/plant_gene/trait/chem_cooling)) T.visible_message(span_notice("[T] releases a blast of hot air, consuming its nutriments to cool its contents.")) - T.reagents.remove_all_type(/datum/reagent/consumable/nutriment, num_nutriment, strict = TRUE) + T.reagents.remove_reagent(/datum/reagent/consumable/nutriment, num_nutriment) T.reagents.chem_temp = max(3, (T.reagents.chem_temp + num_nutriment * -5)) T.reagents.handle_reactions() playsound(T.loc, 'sound/effects/space_wind.ogg', 50) diff --git a/code/modules/instruments/items.dm b/code/modules/instruments/items.dm index 8c5852b54bfa17..d9a7e2f3e8b18e 100644 --- a/code/modules/instruments/items.dm +++ b/code/modules/instruments/items.dm @@ -242,35 +242,6 @@ throw_range = 15 hitsound = 'sound/items/bikehorn.ogg' -/obj/item/choice_beacon/music - name = "instrument delivery beacon" - desc = "Summon your tool of art." - icon_state = "gangtool-red" - w_class = WEIGHT_CLASS_TINY - -/obj/item/choice_beacon/music/generate_display_names() - var/static/list/instruments - if(!instruments) - instruments = list() - var/list/possible_instruments = list( - /obj/item/instrument/violin, - /obj/item/instrument/piano_synth, - /obj/item/instrument/banjo, - /obj/item/instrument/guitar, - /obj/item/instrument/eguitar, - /obj/item/instrument/glockenspiel, - /obj/item/instrument/accordion, - /obj/item/instrument/trumpet, - /obj/item/instrument/saxophone, - /obj/item/instrument/trombone, - /obj/item/instrument/recorder, - /obj/item/instrument/harmonica, - /obj/item/instrument/piano_synth/headphones, - ) - for(var/obj/item/instrument/instrument as anything in possible_instruments) - instruments[initial(instrument.name)] = instrument - return instruments - /obj/item/instrument/musicalmoth name = "musical moth" desc = "Despite its popularity, this controversial musical toy was eventually banned due to its unethically sampled sounds of moths screaming in agony." diff --git a/code/modules/instruments/piano_synth.dm b/code/modules/instruments/piano_synth.dm index a93ca0b7f51bf6..9ba495012691f4 100644 --- a/code/modules/instruments/piano_synth.dm +++ b/code/modules/instruments/piano_synth.dm @@ -37,7 +37,7 @@ RegisterSignal(src, COMSIG_INSTRUMENT_END, PROC_REF(update_icon_for_playing_music)) // Called by a component signal to update musical note VFX for songs playing while worn. -/obj/item/instrument/piano_synth/headphones/proc/update_icon_for_playing_music() +/obj/item/instrument/piano_synth/headphones/proc/update_icon_for_playing_music(datum/source, datum/starting_song, atom/player) SIGNAL_HANDLER update_appearance() @@ -46,7 +46,7 @@ icon_state = "[initial(icon_state)][song?.playing ? "_on" : null]" /obj/item/instrument/piano_synth/headphones/spacepods - name = "\improper Nanotrasen space pods" + name = "\improper Symphionia space pods" desc = "Flex your money, AND ignore what everyone else says, all at once!" icon_state = "spacepods" worn_icon = 'icons/mob/clothing/ears.dmi' @@ -129,7 +129,7 @@ /obj/item/circuit_component/synth/proc/start_playing(datum/port/input/port) synth.song.start_playing(src) -/obj/item/circuit_component/synth/proc/on_song_start() +/obj/item/circuit_component/synth/proc/on_song_start(datum/source, datum/starting_song, atom/player) SIGNAL_HANDLER is_playing.set_output(TRUE) started_playing.set_output(COMPONENT_SIGNAL) diff --git a/code/modules/instruments/songs/_song.dm b/code/modules/instruments/songs/_song.dm index ccd85ffda5f3ce..68039df21468ee 100644 --- a/code/modules/instruments/songs/_song.dm +++ b/code/modules/instruments/songs/_song.dm @@ -211,7 +211,7 @@ //we can not afford to runtime, since we are going to be doing sound channel reservations and if we runtime it means we have a channel allocation leak. //wrap the rest of the stuff to ensure stop_playing() is called. do_hearcheck() - SEND_SIGNAL(parent, COMSIG_INSTRUMENT_START, src) + SEND_SIGNAL(parent, COMSIG_INSTRUMENT_START, src, user) SEND_SIGNAL(user, COMSIG_ATOM_STARTING_INSTRUMENT, src) elapsed_delay = 0 delay_by = 0 diff --git a/code/modules/instruments/stationary.dm b/code/modules/instruments/stationary.dm index c5c7b97e738c32..ca0e7e2d9e770a 100644 --- a/code/modules/instruments/stationary.dm +++ b/code/modules/instruments/stationary.dm @@ -32,7 +32,7 @@ /obj/structure/musician/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool, time = 4 SECONDS) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/musician/piano name = "space piano" diff --git a/code/modules/interview/interview_manager.dm b/code/modules/interview/interview_manager.dm index 4832e51f34178a..b5d39961b586db 100644 --- a/code/modules/interview/interview_manager.dm +++ b/code/modules/interview/interview_manager.dm @@ -18,7 +18,7 @@ GLOBAL_DATUM_INIT(interviews, /datum/interview_manager, new) /// Ckeys which are currently in the cooldown system, they will be unable to create new interviews var/list/cooldown_ckeys = list() -/datum/interview_manager/Destroy(force, ...) +/datum/interview_manager/Destroy(force) QDEL_LIST(open_interviews) QDEL_LIST(interview_queue) QDEL_LIST(closed_interviews) diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index 22fbd42b71cd43..f882912fb0c30b 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -45,9 +45,9 @@ var/mob/living/simple_animal/animal = accessor if(check_access(animal.access_card)) return TRUE - else if(isbrain(accessor) && istype(accessor.loc, /obj/item/mmi)) - var/obj/item/mmi/brain_mmi = accessor.loc - if(ismecha(brain_mmi.loc)) + else if(isbrain(accessor)) + var/obj/item/mmi/brain_mmi = get(accessor.loc, /obj/item/mmi) + if(brain_mmi && ismecha(brain_mmi.loc)) var/obj/vehicle/sealed/mecha/big_stompy_robot = brain_mmi.loc return check_access_list(big_stompy_robot.accesses) return FALSE diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index 0d8e57f13eb030..19f592910f2888 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -71,7 +71,7 @@ var/display_order = JOB_DISPLAY_ORDER_DEFAULT - ///What types of bounty tasks can this job recieve past the default? + ///What types of bounty tasks can this job receive past the default? var/bounty_types = CIV_JOB_BASIC /// Goodies that can be received via the mail system. @@ -103,7 +103,7 @@ /// List of family heirlooms this job can get with the family heirloom quirk. List of types. var/list/family_heirlooms - /// All values = (JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN | JOB_CANNOT_OPEN_SLOTS) + /// All values = (JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN | JOB_CANNOT_OPEN_SLOTS | JOB_HEAD_OF_STAFF) var/job_flags = NONE /// Multiplier for general usage of the voice of god. @@ -138,10 +138,10 @@ /datum/job/New() . = ..() - // SKYRAT EDIT START + // NOVA EDIT START if(!job_spawn_title) job_spawn_title = title - // SKYRAT EDIT END + // NOVA EDIT END var/new_spawn_positions = CHECK_MAP_JOB_CHANGE(title, "spawn_positions") if(isnum(new_spawn_positions)) spawn_positions = new_spawn_positions @@ -180,9 +180,9 @@ /// Announce that this job as joined the round to all crew members. /// Note the joining mob has no client at this point. -/datum/job/proc/announce_job(mob/living/joining_mob, job_title) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: /datum/job/proc/announce_job(mob/living/joining_mob) +/datum/job/proc/announce_job(mob/living/joining_mob, job_title) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: /datum/job/proc/announce_job(mob/living/joining_mob) if(head_announce) - announce_head(joining_mob, head_announce, job_title) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: announce_head(joining_mob, head_announce) + announce_head(joining_mob, head_announce, job_title) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: announce_head(joining_mob, head_announce) //Used for a special check of whether to allow a client to latejoin as this job. @@ -195,38 +195,38 @@ #define VERY_LATE_ARRIVAL_TOAST_PROB 20 -/mob/living/carbon/human/on_job_equipping(datum/job/equipping, datum/preferences/used_pref, client/player_client) //SKYRAT EDIT CHANGE - ORIGINAL: /mob/living/carbon/human/on_job_equipping(datum/job/equipping) +/mob/living/carbon/human/on_job_equipping(datum/job/equipping, datum/preferences/used_pref, client/player_client) //NOVA EDIT CHANGE - ORIGINAL: /mob/living/carbon/human/on_job_equipping(datum/job/equipping) var/datum/bank_account/bank_account = new(real_name, equipping, dna.species.payday_modifier) bank_account.payday(STARTING_PAYCHECKS, TRUE) account_id = bank_account.account_id bank_account.replaceable = FALSE add_mob_memory(/datum/memory/key/account, remembered_id = account_id) - dress_up_as_job(equipping, FALSE, used_pref) //SKYRAT EDIT CHANGE - ORIGINAL: dress_up_as_job(equipping) + dress_up_as_job(equipping, FALSE, used_pref) //NOVA EDIT CHANGE - ORIGINAL: dress_up_as_job(equipping) 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) // SKYRAT EDIT REMOVAL - See below - // SKYRAT EDIT ADDITION - Lizards + //equipping.equip_to_slot_or_del(new /obj/item/food/griddle_toast(equipping), ITEM_SLOT_MASK) // NOVA EDIT REMOVAL - See below + // NOVA EDIT ADDITION - Lizards if(islizard(equipping)) equip_to_slot_or_del(new /obj/item/food/breadslice/root(equipping), ITEM_SLOT_MASK) else equip_to_slot_or_del(new /obj/item/food/griddle_toast(equipping), ITEM_SLOT_MASK) - // SKYRAT EDIT ADDITION END - Lizards + // NOVA EDIT ADDITION END - Lizards #undef VERY_LATE_ARRIVAL_TOAST_PROB /mob/living/proc/dress_up_as_job(datum/job/equipping, visual_only = FALSE) return -/mob/living/carbon/human/dress_up_as_job(datum/job/equipping, visual_only = FALSE, datum/preferences/used_pref) //SKYRAT EDIT CHANGE +/mob/living/carbon/human/dress_up_as_job(datum/job/equipping, visual_only = FALSE, datum/preferences/used_pref) //NOVA EDIT CHANGE dna.species.pre_equip_species_outfit(equipping, src, visual_only) - equip_outfit_and_loadout(equipping.outfit, used_pref, visual_only, equipping) //SKYRAT EDIT CHANGE + equip_outfit_and_loadout(equipping.outfit, used_pref, visual_only, equipping) //NOVA EDIT CHANGE /// tells the given channel that the given mob is the new department head. See communications.dm for valid channels. -/datum/job/proc/announce_head(mob/living/carbon/human/H, channels, job_title) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: /datum/job/proc/announce_head(mob/living/carbon/human/H, channels) +/datum/job/proc/announce_head(mob/living/carbon/human/H, channels, job_title) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: /datum/job/proc/announce_head(mob/living/carbon/human/H, channels) if(H && GLOB.announcement_systems.len) //timer because these should come after the captain announcement - SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_addtimer), CALLBACK(pick(GLOB.announcement_systems), TYPE_PROC_REF(/obj/machinery/announcement_system, announce), "NEWHEAD", H.real_name, job_title, channels), 1)) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_addtimer), CALLBACK(pick(GLOB.announcement_systems), TYPE_PROC_REF(/obj/machinery/announcement_system, announce), "NEWHEAD", H.real_name, H.job, channels), 1)) + SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_addtimer), CALLBACK(pick(GLOB.announcement_systems), TYPE_PROC_REF(/obj/machinery/announcement_system, announce), "NEWHEAD", H.real_name, job_title, channels), 1)) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_addtimer), CALLBACK(pick(GLOB.announcement_systems), TYPE_PROC_REF(/obj/machinery/announcement_system, announce), "NEWHEAD", H.real_name, H.job, channels), 1)) //If the configuration option is set to require players to be logged as old enough to play certain jobs, then this proc checks that they are, otherwise it just returns 1 /datum/job/proc/player_old_enough(client/player) @@ -284,21 +284,21 @@ return TRUE /// Gets the message that shows up when spawning as this job -/datum/job/proc/get_spawn_message(alt_title) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: /datum/job/proc/get_spawn_message() +/datum/job/proc/get_spawn_message(alt_title) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: /datum/job/proc/get_spawn_message() SHOULD_NOT_OVERRIDE(TRUE) - return examine_block(span_infoplain(jointext(get_spawn_message_information(alt_title), "\n• "))) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLED - ORIGINAL: return examine_block(span_infoplain(jointext(get_spawn_message_information(), "\n• "))) + return examine_block(span_infoplain(jointext(get_spawn_message_information(alt_title), "\n• "))) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLED - ORIGINAL: return examine_block(span_infoplain(jointext(get_spawn_message_information(), "\n• "))) /// Returns a list of strings that correspond to chat messages sent to this mob when they join the round. -/datum/job/proc/get_spawn_message_information(alt_title = title) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: /datum/job/proc/get_spawn_message_information() +/datum/job/proc/get_spawn_message_information(alt_title = title) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: /datum/job/proc/get_spawn_message_information() SHOULD_CALL_PARENT(TRUE) var/list/info = list() - info += "You are the [alt_title].\n" // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: info += "You are the [title].\n" + info += "You are the [alt_title].\n" // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: info += "You are the [title].\n" var/related_policy = get_policy(title) var/radio_info = get_radio_information() if(related_policy) info += related_policy if(supervisors) - info += "As the [alt_title == title ? alt_title : "[alt_title] ([title])"] you answer directly to [supervisors]. Special circumstances may change this." // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: info += "As the [title] you answer directly to [supervisors]. Special circumstances may change this." + info += "As the [alt_title == title ? alt_title : "[alt_title] ([title])"] you answer directly to [supervisors]. Special circumstances may change this." // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: info += "As the [title] you answer directly to [supervisors]. Special circumstances may change this." if(radio_info) info += radio_info if(req_admin_notify) @@ -308,11 +308,11 @@ info += span_boldnotice("As this station was initially staffed with a \ [CONFIG_GET(flag/jobs_have_minimal_access) ? "full crew, only your job's necessities" : "skeleton crew, additional access may"] \ have been added to your ID card.") - //SKYRAT EDIT ADDITION START - ALTERNATIVE_JOB_TITLES + //NOVA EDIT ADDITION START - ALTERNATIVE_JOB_TITLES if(alt_title != title) info += span_warning("Remember that alternate titles are purely for flavor and roleplay.") info += span_doyourjobidiot("Do not use your \"[alt_title]\" alt title as an excuse to forego your duties as a [title].") - //SKYRAT EDIT END + //NOVA EDIT END return info @@ -359,7 +359,7 @@ if(DSATCHEL) back = satchel //Department satchel if(DMESSENGER) - back = messenger //SKYRAT EDIT - Messenger Bags + back = messenger //NOVA EDIT - Messenger Bags if(DDUFFELBAG) back = duffelbag //Department duffel bag if(DMESSENGER) @@ -473,10 +473,10 @@ return hangover_spawn_point || get_latejoin_spawn_point() /* if(length(GLOB.jobspawn_overrides[title])) return pick(GLOB.jobspawn_overrides[title]) */ // ORIGINAL CODE - // SKYRAT EDIT START - Alt job titles + // NOVA EDIT START - Alt job titles if(length(GLOB.jobspawn_overrides[job_spawn_title])) return pick(GLOB.jobspawn_overrides[job_spawn_title]) - // SKYRAT EDIT END + // NOVA EDIT END var/obj/effect/landmark/start/spawn_point = get_default_roundstart_spawn_point() if(!spawn_point) //if there isn't a spawnpoint send them to latejoin, if there's no latejoin go yell at your mapper return get_latejoin_spawn_point() @@ -486,7 +486,7 @@ /// Handles finding and picking a valid roundstart effect landmark spawn point, in case no uncommon different spawning events occur. /datum/job/proc/get_default_roundstart_spawn_point() for(var/obj/effect/landmark/start/spawn_point as anything in GLOB.start_landmarks_list) - if(spawn_point.name != job_spawn_title) // SKYRAT EDIT - Alt job titles - ORIGINAL: if(spawn_point.name != title) + if(spawn_point.name != job_spawn_title) // NOVA EDIT - Alt job titles - ORIGINAL: if(spawn_point.name != title) continue . = spawn_point if(spawn_point.used) //so we can revert to spawning them on top of eachother if something goes wrong @@ -500,10 +500,10 @@ /datum/job/proc/get_latejoin_spawn_point() /* if(length(GLOB.jobspawn_overrides[title])) return pick(GLOB.jobspawn_overrides[title]) */ // ORIGINAL CODE - // SKYRAT EDIT START - Alt job titles + // NOVA EDIT START - Alt job titles if(length(GLOB.jobspawn_overrides[job_spawn_title])) //We're doing something special today. return pick(GLOB.jobspawn_overrides[job_spawn_title]) - // SKYRAT EDIT END + // NOVA EDIT END if(length(SSjob.latejoin_trackers)) return pick(SSjob.latejoin_trackers) return SSjob.get_last_resort_spawn_points() @@ -533,7 +533,7 @@ if(!player_client) return // Disconnected while checking for the appearance ban. - var/require_human = CONFIG_GET(flag/enforce_human_authority) && (job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) + var/require_human = CONFIG_GET(flag/enforce_human_authority) && (job.job_flags & JOB_HEAD_OF_STAFF) if(require_human) var/all_authority_require_human = CONFIG_GET(flag/enforce_human_authority_on_everyone) if(!all_authority_require_human && job.ignore_human_authority) diff --git a/code/modules/jobs/job_types/ai.dm b/code/modules/jobs/job_types/ai.dm index 0b38d6e081d39a..87998485041bd0 100644 --- a/code/modules/jobs/job_types/ai.dm +++ b/code/modules/jobs/job_types/ai.dm @@ -35,7 +35,7 @@ */ //SKYRAT REMOVAL END var/mob/living/silicon/ai/ai_spawn = spawned ai_spawn.log_current_laws() - // SKYRAT EDIT ADDITION START + // NOVA EDIT ADDITION START for(var/mob/living/silicon/robot/sync_target in GLOB.silicon_mobs) if(!(sync_target.z in SSmapping.levels_by_trait(ZTRAIT_STATION)) || (sync_target.z in SSmapping.levels_by_trait(ZTRAIT_ICE_RUINS_UNDERGROUND))) // Skip ghost cafe, interlink, and other cyborgs. continue @@ -56,7 +56,7 @@ sync_target.lawsync() sync_target.lawupdate = TRUE sync_target.show_laws() - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END /datum/job/ai/get_roundstart_spawn_point() diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm index 89e7d04742c7cd..0fb5f6fec90156 100644 --- a/code/modules/jobs/job_types/assistant.dm +++ b/code/modules/jobs/job_types/assistant.dm @@ -37,13 +37,13 @@ Assistant rpg_title = "Lout" config_tag = "ASSISTANT" - allow_bureaucratic_error = FALSE // SKYRAT EDIT ADDITION + allow_bureaucratic_error = FALSE // NOVA EDIT ADDITION /datum/outfit/job/assistant name = JOB_ASSISTANT jobtype = /datum/job/assistant id_trim = /datum/id_trim/job/assistant - uniform = /obj/item/clothing/under/color/random // SKYRAT EDIT ADD + uniform = /obj/item/clothing/under/color/random // NOVA EDIT ADD belt = /obj/item/modular_computer/pda/assistant /datum/outfit/job/assistant/pre_equip(mob/living/carbon/human/target) @@ -66,10 +66,10 @@ Assistant var/index = (jumpsuit_number % GLOB.colored_assistant.jumpsuits.len) + 1 - // SKYRAT EDIT - Loadouts (we don't want jumpsuits to override the person's loadout item) + // NOVA EDIT - Loadouts (we don't want jumpsuits to override the person's loadout item) if(modified_outfit_slots & ITEM_SLOT_ICLOTHING) return - // SKYRAT EDIT END + // NOVA EDIT END //We don't cache these, because they can delete on init //Too fragile, better to just eat the cost diff --git a/code/modules/jobs/job_types/atmospheric_technician.dm b/code/modules/jobs/job_types/atmospheric_technician.dm index d016688042a86e..35e15b9641d193 100644 --- a/code/modules/jobs/job_types/atmospheric_technician.dm +++ b/code/modules/jobs/job_types/atmospheric_technician.dm @@ -2,9 +2,9 @@ title = JOB_ATMOSPHERIC_TECHNICIAN description = "Ensure the air is breathable on the station, fill oxygen tanks, fight fires, purify the air." department_head = list(JOB_CHIEF_ENGINEER) - faction = FACTION_STATION - total_positions = 3 - spawn_positions = 2 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = SUPERVISOR_CE exp_requirements = 60 exp_required_type = EXP_TYPE_CREW diff --git a/code/modules/jobs/job_types/bartender.dm b/code/modules/jobs/job_types/bartender.dm index 13a4162ff3be95..b688e5aad3ec4f 100644 --- a/code/modules/jobs/job_types/bartender.dm +++ b/code/modules/jobs/job_types/bartender.dm @@ -2,9 +2,9 @@ title = JOB_BARTENDER description = "Serve booze, mix drinks, keep the crew drunk." department_head = list(JOB_HEAD_OF_PERSONNEL) - faction = FACTION_STATION - total_positions = 1 - spawn_positions = 1 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = SUPERVISOR_HOP exp_granted_type = EXP_TYPE_CREW config_tag = "BARTENDER" diff --git a/code/modules/jobs/job_types/botanist.dm b/code/modules/jobs/job_types/botanist.dm index 7ccc4b31ceb75b..6d097ad2c832a0 100644 --- a/code/modules/jobs/job_types/botanist.dm +++ b/code/modules/jobs/job_types/botanist.dm @@ -2,9 +2,9 @@ title = JOB_BOTANIST description = "Grow plants for the cook, for medicine, and for recreation." department_head = list(JOB_HEAD_OF_PERSONNEL) - faction = FACTION_STATION - total_positions = 3 - spawn_positions = 2 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = SUPERVISOR_HOP exp_granted_type = EXP_TYPE_CREW config_tag = "BOTANIST" diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index d8ae6d335b3202..ebd0e8ba0df903 100755 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -8,7 +8,7 @@ faction = FACTION_STATION total_positions = 1 spawn_positions = 1 - supervisors = "Nanotrasen officials and Space Law" + supervisors = "Symphionia officials and Space Law" req_admin_notify = 1 minimal_player_age = 14 exp_requirements = 180 @@ -21,8 +21,9 @@ plasmaman_outfit = /datum/outfit/plasmaman/captain paycheck = PAYCHECK_COMMAND - paycheck_department = ACCOUNT_CMD // SKYRAT EDIT - Original: paycheck_department = ACCOUNT_SEC + paycheck_department = ACCOUNT_CMD // NOVA EDIT - Original: paycheck_department = ACCOUNT_SEC + mind_traits = list(HEAD_OF_STAFF_MIND_TRAITS) liver_traits = list(TRAIT_ROYAL_METABOLISM) display_order = JOB_DISPLAY_ORDER_CAPTAIN @@ -42,7 +43,7 @@ /obj/item/skillchip/sabrage = 5, ) - job_flags = STATION_JOB_FLAGS | JOB_BOLD_SELECT_TEXT | JOB_CANNOT_OPEN_SLOTS + job_flags = STATION_JOB_FLAGS | HEAD_OF_STAFF_JOB_FLAGS rpg_title = "Star Duke" voice_of_god_power = 1.4 //Command staff has authority diff --git a/code/modules/jobs/job_types/cargo_technician.dm b/code/modules/jobs/job_types/cargo_technician.dm index dd269bc7e37363..f8de497bbbc580 100644 --- a/code/modules/jobs/job_types/cargo_technician.dm +++ b/code/modules/jobs/job_types/cargo_technician.dm @@ -4,9 +4,9 @@ collect empty crates, load and unload the supply shuttle, \ ship bounty cubes." department_head = list(JOB_QUARTERMASTER) - faction = FACTION_STATION - total_positions = 5 - spawn_positions = 3 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = SUPERVISOR_QM exp_granted_type = EXP_TYPE_CREW config_tag = "CARGO_TECHNICIAN" diff --git a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm index 805c72a326749b..97688417aac856 100644 --- a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm +++ b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm @@ -20,6 +20,8 @@ var/chaplain_spawnable = TRUE /// Short description of what this item is capable of, for radial menu uses. var/menu_description = "A standard chaplain's weapon. Fits in pockets. Can be worn on the belt." + /// Lazylist, tracks refs()s to all cultists which have been crit or killed by this nullrod. + var/list/cultists_slain /obj/item/nullrod/Initialize(mapload) . = ..() @@ -66,6 +68,27 @@ user.visible_message(span_suicide("[user] is killing [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to get closer to god!")) return (BRUTELOSS|FIRELOSS) +/obj/item/nullrod/attack(mob/living/target_mob, mob/living/user, params) + if(!user.mind?.holy_role) + return ..() + if(!IS_CULTIST(target_mob) || istype(target_mob, /mob/living/carbon/human/cult_ghost)) + return ..() + + var/old_stat = target_mob.stat + . = ..() + if(old_stat < target_mob.stat) + LAZYOR(cultists_slain, REF(target_mob)) + return . + +/obj/item/nullrod/examine(mob/user) + . = ..() + if(!IS_CULTIST(user) || !GET_ATOM_BLOOD_DNA_LENGTH(src)) + return + + var/num_slain = LAZYLEN(cultists_slain) + . += span_cultitalic("It has the blood of [num_slain] fallen cultist[num_slain == 1 ? "" : "s"] on it. \ + Offering it to Nar'sie will transform it into a [num_slain >= 3 ? "powerful" : "standard"] cult weapon.") + /obj/item/nullrod/godhand name = "god hand" desc = "This hand of yours glows with an awesome power!" @@ -136,8 +159,8 @@ menu_description = "A sharp claymore which provides a low chance of blocking incoming melee attacks. Can be worn on the back or belt." /obj/item/nullrod/claymore/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) - if(attack_type == PROJECTILE_ATTACK) - final_block_chance = 0 //Don't bring a sword to a gunfight + if(attack_type == PROJECTILE_ATTACK || attack_type == LEAP_ATTACK) + final_block_chance = 0 //Don't bring a sword to a gunfight, and also you aren't going to really block someone full body tackling you with a sword return ..() /obj/item/nullrod/claymore/darkblade @@ -593,7 +616,7 @@ /obj/item/nullrod/hypertool name = "hypertool" desc = "A tool so powerful even you cannot perfectly use it." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/weapons/club.dmi' icon_state = "hypertool" inhand_icon_state = "hypertool" worn_icon_state = "hypertool" diff --git a/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm b/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm index 3e752910a29d76..74b1cdcf627d26 100644 --- a/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm +++ b/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm @@ -10,7 +10,7 @@ If the scythe isn't empowered when you sheath it, you take a heap of damage and desc = "This shard seems to be directly linked to some sinister entity. It might be your god! It also gives you a really horrible rash when you hold onto it for too long." items_to_create = list(/obj/item/vorpalscythe) -/obj/item/organ/internal/cyberimp/arm/shard/scythe/Insert(mob/living/carbon/receiver, special, drop_if_replaced) +/obj/item/organ/internal/cyberimp/arm/shard/scythe/Insert(mob/living/carbon/receiver, special, movement_flags) . = ..() if(receiver.mind) ADD_TRAIT(receiver.mind, TRAIT_MORBID, ORGAN_TRAIT) @@ -139,7 +139,7 @@ If the scythe isn't empowered when you sheath it, you take a heap of damage and var/death_knell_speed_mod = 1 - potential_reaping.visible_message(span_danger("[user] begins to raise [src] arove [potential_reaping]'s [head_name]."), span_userdanger("[user] begins to raise [src], aiming to slice off your [head_name]!")) + potential_reaping.visible_message(span_danger("[user] begins to raise [src] above [potential_reaping]'s [head_name]."), span_userdanger("[user] begins to raise [src], aiming to slice off your [head_name]!")) if(potential_reaping.stat >= UNCONSCIOUS || HAS_TRAIT(potential_reaping, TRAIT_INCAPACITATED)) //if the victim is incapacitated (due to paralysis, a stun, being in staminacrit, etc.), critted, unconscious, or dead, it's much easier to properly behead death_knell_speed_mod *= 0.5 if(potential_reaping.stat != DEAD && potential_reaping.has_status_effect(/datum/status_effect/jitter)) //jittering will make it harder to perform the death knell, even if they're still @@ -149,6 +149,8 @@ If the scythe isn't empowered when you sheath it, you take a heap of damage and if(ispodperson(potential_reaping) || ismonkey(potential_reaping)) //And if they're a podperson or monkey, they can just die. death_knell_speed_mod *= 0.5 + log_combat(user, potential_reaping, "prepared to use [src] to decapitate") + if(do_after(user, 15 SECONDS * death_knell_speed_mod, target = potential_reaping)) playsound(get_turf(potential_reaping), 'sound/weapons/bladeslice.ogg', 250, TRUE) reaped_head.dismember() @@ -165,6 +167,7 @@ If the scythe isn't empowered when you sheath it, you take a heap of damage and ) scythe_empowerment(potential_empowerment) + log_combat(user, potential_reaping, "used [src] to decapitate") if(HAS_MIND_TRAIT(user, TRAIT_MORBID)) //You feel good about yourself, pal? user.add_mood_event("morbid_dismemberment", /datum/mood_event/morbid_dismemberment) diff --git a/code/modules/jobs/job_types/chemist.dm b/code/modules/jobs/job_types/chemist.dm index bdb48c84f35d9a..9c251b341c4054 100644 --- a/code/modules/jobs/job_types/chemist.dm +++ b/code/modules/jobs/job_types/chemist.dm @@ -3,9 +3,9 @@ description = "Supply the doctors with chemicals, make medicine, as well as \ less likable substances in the comfort of a fully reinforced room." department_head = list(JOB_CHIEF_MEDICAL_OFFICER) - faction = FACTION_STATION - total_positions = 2 - spawn_positions = 2 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = SUPERVISOR_CMO exp_requirements = 60 exp_required_type = EXP_TYPE_CREW diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm index cee7b7ca7eb48c..fd568464bb6764 100644 --- a/code/modules/jobs/job_types/chief_engineer.dm +++ b/code/modules/jobs/job_types/chief_engineer.dm @@ -27,6 +27,7 @@ paycheck = PAYCHECK_COMMAND paycheck_department = ACCOUNT_ENG + mind_traits = list(HEAD_OF_STAFF_MIND_TRAITS) liver_traits = list(TRAIT_ENGINEER_METABOLISM, TRAIT_ROYAL_METABOLISM) display_order = JOB_DISPLAY_ORDER_CHIEF_ENGINEER @@ -43,11 +44,15 @@ /obj/effect/spawner/random/engineering/tool_advanced = 3 ) rpg_title = "Head Crystallomancer" - job_flags = STATION_JOB_FLAGS | JOB_BOLD_SELECT_TEXT | JOB_CANNOT_OPEN_SLOTS + job_flags = STATION_JOB_FLAGS | HEAD_OF_STAFF_JOB_FLAGS 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/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm index 998c19a215d5d0..e20ef7c19edd9c 100644 --- a/code/modules/jobs/job_types/chief_medical_officer.dm +++ b/code/modules/jobs/job_types/chief_medical_officer.dm @@ -27,6 +27,7 @@ paycheck = PAYCHECK_COMMAND paycheck_department = ACCOUNT_MED + mind_traits = list(HEAD_OF_STAFF_MIND_TRAITS) liver_traits = list(TRAIT_MEDICAL_METABOLISM, TRAIT_ROYAL_METABOLISM) display_order = JOB_DISPLAY_ORDER_CHIEF_MEDICAL_OFFICER @@ -40,7 +41,7 @@ ) family_heirlooms = list(/obj/item/storage/medkit/ancient/heirloom, /obj/item/scalpel, /obj/item/hemostat, /obj/item/circular_saw, /obj/item/retractor, /obj/item/cautery, /obj/item/statuebust/hippocratic) rpg_title = "High Cleric" - job_flags = STATION_JOB_FLAGS | JOB_BOLD_SELECT_TEXT | JOB_CANNOT_OPEN_SLOTS + job_flags = STATION_JOB_FLAGS | HEAD_OF_STAFF_JOB_FLAGS voice_of_god_power = 1.4 //Command staff has authority diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm index 607c7214d90020..d2331e3a4ce4df 100644 --- a/code/modules/jobs/job_types/clown.dm +++ b/code/modules/jobs/job_types/clown.dm @@ -2,9 +2,9 @@ title = JOB_CLOWN description = "Entertain the crew, make bad jokes, go on a holy quest to find bananium, HONK!" department_head = list(JOB_HEAD_OF_PERSONNEL) - faction = FACTION_STATION - total_positions = 1 - spawn_positions = 1 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = SUPERVISOR_HOP exp_granted_type = EXP_TYPE_CREW config_tag = "CLOWN" diff --git a/code/modules/jobs/job_types/cook.dm b/code/modules/jobs/job_types/cook.dm index e96bae827fa9b7..685700b2369c86 100644 --- a/code/modules/jobs/job_types/cook.dm +++ b/code/modules/jobs/job_types/cook.dm @@ -2,9 +2,9 @@ title = JOB_COOK description = "Serve food, cook meat, keep the crew fed." department_head = list(JOB_HEAD_OF_PERSONNEL) - faction = FACTION_STATION - total_positions = 2 - spawn_positions = 1 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = SUPERVISOR_HOP exp_granted_type = EXP_TYPE_CREW config_tag = "COOK" diff --git a/code/modules/jobs/job_types/coroner.dm b/code/modules/jobs/job_types/coroner.dm index 22f6c5e65db83b..6ca60d7d9d8ba1 100644 --- a/code/modules/jobs/job_types/coroner.dm +++ b/code/modules/jobs/job_types/coroner.dm @@ -3,9 +3,9 @@ description = "Perform Autopsies whenever needed, \ Update medical records accordingly, apply formaldehyde." department_head = list(JOB_CHIEF_MEDICAL_OFFICER) - faction = FACTION_STATION - total_positions = 1 - spawn_positions = 1 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = "the Head of Personnel and the Chief Medical Officer" exp_granted_type = EXP_TYPE_CREW config_tag = "CORONER" diff --git a/code/modules/jobs/job_types/curator.dm b/code/modules/jobs/job_types/curator.dm index a3172c444074da..56e2779530da6d 100644 --- a/code/modules/jobs/job_types/curator.dm +++ b/code/modules/jobs/job_types/curator.dm @@ -3,9 +3,9 @@ description = "Read and write books and hand them to people, stock \ bookshelves, report on station news." department_head = list(JOB_HEAD_OF_PERSONNEL) - faction = FACTION_STATION - total_positions = 1 - spawn_positions = 1 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = SUPERVISOR_HOP config_tag = "CURATOR" exp_granted_type = EXP_TYPE_CREW @@ -45,7 +45,7 @@ backpack_contents = list( /obj/item/barcodescanner = 1, /obj/item/choice_beacon/hero = 1, - /obj/item/glassblowing/magnifying_glass, //SKYRAT EDIT: Magnifying Glass + /obj/item/glassblowing/magnifying_glass, //NOVA EDIT: Magnifying Glass ) belt = /obj/item/modular_computer/pda/curator ears = /obj/item/radio/headset/headset_srv diff --git a/code/modules/jobs/job_types/cyborg.dm b/code/modules/jobs/job_types/cyborg.dm index 9209407303321a..6f7e105b135927 100644 --- a/code/modules/jobs/job_types/cyborg.dm +++ b/code/modules/jobs/job_types/cyborg.dm @@ -3,7 +3,7 @@ description = "Assist the crew, follow your laws, obey your AI." auto_deadmin_role_flags = DEADMIN_POSITION_SILICON faction = FACTION_STATION - total_positions = 3 // SKYRAT EDIT: Original value (0) + total_positions = 3 // NOVA EDIT: Original value (0) spawn_positions = 3 supervisors = "your laws and the AI" //Nodrak spawn_type = /mob/living/silicon/robot @@ -29,7 +29,7 @@ spawned.gender = NEUTER var/mob/living/silicon/robot/robot_spawn = spawned robot_spawn.notify_ai(AI_NOTIFICATION_NEW_BORG) - //SKYRAT EDIT START + //NOVA EDIT START var/list/malf_ais = list() var/list/regular_ais = list() for(var/mob/living/silicon/ai/ai_possible as anything in GLOB.ai_list) @@ -54,7 +54,7 @@ robot_spawn.lawsync() robot_spawn.lawupdate = TRUE robot_spawn.show_laws() - //SKYRAT EDIT END + //NOVA EDIT END if(!robot_spawn.connected_ai) // Only log if there's no Master AI robot_spawn.log_current_laws() diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm index 15ac668473e693..f1819a41b8a20f 100644 --- a/code/modules/jobs/job_types/detective.dm +++ b/code/modules/jobs/job_types/detective.dm @@ -4,9 +4,9 @@ look badass, smoke cigarettes." auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY department_head = list(JOB_HEAD_OF_SECURITY) - faction = FACTION_STATION - total_positions = 1 - spawn_positions = 1 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = SUPERVISOR_HOS minimal_player_age = 7 exp_requirements = 300 @@ -57,14 +57,14 @@ /obj/item/melee/baton = 1, /obj/item/storage/box/evidence = 1, ) - belt = /obj/item/storage/belt/holster/detective/full // SKYRAT EDIT CHANGE - ORIGINAL: /obj/item/modular_computer/pda/detective + belt = /obj/item/storage/belt/holster/detective/full // NOVA EDIT CHANGE - ORIGINAL: /obj/item/modular_computer/pda/detective ears = /obj/item/radio/headset/headset_sec/alt gloves = /obj/item/clothing/gloves/color/black head = /obj/item/clothing/head/fedora/det_hat mask = /obj/item/clothing/mask/cigarette neck = /obj/item/clothing/neck/tie/detective shoes = /obj/item/clothing/shoes/sneakers/brown - l_pocket = /obj/item/modular_computer/pda/detective // SKYRAT EDIT CHANGE - ORIGINAL: /obj/item/toy/crayon/white + l_pocket = /obj/item/modular_computer/pda/detective // NOVA EDIT CHANGE - ORIGINAL: /obj/item/toy/crayon/white r_pocket = /obj/item/lighter chameleon_extras = list( diff --git a/code/modules/jobs/job_types/geneticist.dm b/code/modules/jobs/job_types/geneticist.dm index 2498eb7c2a3894..b2e106c6dccea8 100644 --- a/code/modules/jobs/job_types/geneticist.dm +++ b/code/modules/jobs/job_types/geneticist.dm @@ -2,9 +2,9 @@ title = JOB_GENETICIST description = "Alter genomes, turn monkeys into humans (and vice-versa), and make DNA backups." department_head = list(JOB_RESEARCH_DIRECTOR) - faction = FACTION_STATION - total_positions = 2 - spawn_positions = 2 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = SUPERVISOR_RD exp_requirements = 60 exp_required_type = EXP_TYPE_CREW diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm index 7cab0feab96854..e863a782d9b0c3 100644 --- a/code/modules/jobs/job_types/head_of_personnel.dm +++ b/code/modules/jobs/job_types/head_of_personnel.dm @@ -28,6 +28,7 @@ paycheck_department = ACCOUNT_SRV bounty_types = CIV_JOB_RANDOM + mind_traits = list(HEAD_OF_STAFF_MIND_TRAITS) liver_traits = list(TRAIT_ROYAL_METABOLISM) display_order = JOB_DISPLAY_ORDER_HEAD_OF_PERSONNEL @@ -39,7 +40,7 @@ family_heirlooms = list(/obj/item/reagent_containers/cup/glass/trophy/silver_cup) rpg_title = "Guild Questgiver" - job_flags = STATION_JOB_FLAGS | JOB_BOLD_SELECT_TEXT | JOB_CANNOT_OPEN_SLOTS + job_flags = STATION_JOB_FLAGS | HEAD_OF_STAFF_JOB_FLAGS voice_of_god_power = 1.4 //Command staff has authority @@ -70,7 +71,7 @@ /datum/outfit/job/hop/pre_equip(mob/living/carbon/human/H) ..() - if(check_holidays("Ian's Birthday")) + if(check_holidays(IAN_HOLIDAY)) undershirt = /datum/sprite_accessory/undershirt/ian //only pet worth reviving diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm index 5fa3fcaa948c22..afb39bf7c1a226 100644 --- a/code/modules/jobs/job_types/head_of_security.dm +++ b/code/modules/jobs/job_types/head_of_security.dm @@ -24,6 +24,7 @@ /datum/job_department/command, ) + mind_traits = list(HEAD_OF_STAFF_MIND_TRAITS) liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM, TRAIT_ROYAL_METABOLISM) paycheck = PAYCHECK_COMMAND @@ -34,7 +35,7 @@ family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law) rpg_title = "Guard Leader" - job_flags = STATION_JOB_FLAGS | JOB_BOLD_SELECT_TEXT | JOB_CANNOT_OPEN_SLOTS + job_flags = STATION_JOB_FLAGS | HEAD_OF_STAFF_JOB_FLAGS voice_of_god_power = 1.4 //Command staff has authority @@ -58,7 +59,7 @@ belt = /obj/item/modular_computer/pda/heads/hos ears = /obj/item/radio/headset/heads/hos/alt glasses = /obj/item/clothing/glasses/hud/security/sunglasses - gloves = /obj/item/clothing/gloves/color/black/security //SKYRAT EDIT CHANGE - Original: /obj/item/clothing/gloves/color/black + gloves = /obj/item/clothing/gloves/color/black/security //NOVA EDIT CHANGE - Original: /obj/item/clothing/gloves/color/black head = /obj/item/clothing/head/hats/hos/beret shoes = /obj/item/clothing/shoes/jackboots/sec l_pocket = /obj/item/restraints/handcuffs diff --git a/code/modules/jobs/job_types/janitor.dm b/code/modules/jobs/job_types/janitor.dm index a3f4d1aae1940d..35dcf6536691cc 100644 --- a/code/modules/jobs/job_types/janitor.dm +++ b/code/modules/jobs/job_types/janitor.dm @@ -2,9 +2,9 @@ title = JOB_JANITOR description = "Clean up trash and blood. Replace broken lights. Slip people over." department_head = list(JOB_HEAD_OF_PERSONNEL) - faction = FACTION_STATION - total_positions = 2 - spawn_positions = 1 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = SUPERVISOR_HOP exp_granted_type = EXP_TYPE_CREW config_tag = "JANITOR" @@ -40,6 +40,7 @@ uniform = /obj/item/clothing/under/rank/civilian/janitor belt = /obj/item/modular_computer/pda/janitor ears = /obj/item/radio/headset/headset_srv + skillchips = list(/obj/item/skillchip/job/janitor) /datum/outfit/job/janitor/pre_equip(mob/living/carbon/human/human_equipper, visuals_only) . = ..() @@ -47,14 +48,14 @@ backpack_contents += list(/obj/item/gun/ballistic/revolver) r_pocket = /obj/item/ammo_box/a357 -//SKYRAT EDIT REMOVAL BEGIN - JANITOR KEY - (Moved to modular_skyrat/master_files/code/modules/jobs/job_types/janitor.dm) +//NOVA EDIT REMOVAL BEGIN - JANITOR KEY - (Moved to modular_nova/master_files/code/modules/jobs/job_types/janitor.dm) /* var/static/access_key_given = FALSE if(!access_key_given && !visuals_only) access_key_given = TRUE backpack_contents += list(/obj/item/access_key) */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END /datum/outfit/job/janitor/get_types_to_preload() . = ..() diff --git a/code/modules/jobs/job_types/lawyer.dm b/code/modules/jobs/job_types/lawyer.dm index a25a1d86d3adea..9c900866992d92 100644 --- a/code/modules/jobs/job_types/lawyer.dm +++ b/code/modules/jobs/job_types/lawyer.dm @@ -3,9 +3,9 @@ description = "Advocate for prisoners, create law-binding contracts, \ ensure Security is following protocol and Space Law." department_head = list(JOB_HEAD_OF_PERSONNEL) - faction = FACTION_STATION - total_positions = 2 - spawn_positions = 2 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = SUPERVISOR_HOP exp_granted_type = EXP_TYPE_CREW config_tag = "LAWYER" diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm index e3a396609eb26c..2f6d0a9ed39daa 100644 --- a/code/modules/jobs/job_types/medical_doctor.dm +++ b/code/modules/jobs/job_types/medical_doctor.dm @@ -3,9 +3,9 @@ description = "Save lives, run around the station looking for victims, \ scan everyone in sight" department_head = list(JOB_CHIEF_MEDICAL_OFFICER) - faction = FACTION_STATION - total_positions = 5 - spawn_positions = 3 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = SUPERVISOR_CMO exp_granted_type = EXP_TYPE_CREW config_tag = "MEDICAL_DOCTOR" diff --git a/code/modules/jobs/job_types/mime.dm b/code/modules/jobs/job_types/mime.dm index eba86ec2af07a1..90dd110b6f0e76 100644 --- a/code/modules/jobs/job_types/mime.dm +++ b/code/modules/jobs/job_types/mime.dm @@ -2,9 +2,9 @@ title = JOB_MIME description = "..." department_head = list(JOB_HEAD_OF_PERSONNEL) - faction = FACTION_STATION - total_positions = 1 - spawn_positions = 1 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = SUPERVISOR_HOP exp_granted_type = EXP_TYPE_CREW config_tag = "MIME" diff --git a/code/modules/jobs/job_types/paramedic.dm b/code/modules/jobs/job_types/paramedic.dm index 2fd4f3a93a6da0..c6fbb48a531a98 100644 --- a/code/modules/jobs/job_types/paramedic.dm +++ b/code/modules/jobs/job_types/paramedic.dm @@ -3,9 +3,9 @@ description = "Run around the station looking for patients, respond to \ emergencies, give patients a roller bed ride to medbay." department_head = list(JOB_CHIEF_MEDICAL_OFFICER) - faction = FACTION_STATION - total_positions = 2 - spawn_positions = 2 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = SUPERVISOR_CMO exp_granted_type = EXP_TYPE_CREW config_tag = "PARAMEDIC" diff --git a/code/modules/jobs/job_types/prisoner.dm b/code/modules/jobs/job_types/prisoner.dm index 33369d44ce42d3..8a58dc233a7084 100644 --- a/code/modules/jobs/job_types/prisoner.dm +++ b/code/modules/jobs/job_types/prisoner.dm @@ -3,7 +3,7 @@ description = "Keep yourself occupied in permabrig." department_head = list("The Security Team") faction = FACTION_STATION - total_positions = 12 // SKYRAT EDIT: Original value (0) + total_positions = 12 // NOVA EDIT: Original value (0) spawn_positions = 2 supervisors = "the security team" exp_granted_type = EXP_TYPE_CREW @@ -14,7 +14,7 @@ plasmaman_outfit = /datum/outfit/plasmaman/prisoner display_order = JOB_DISPLAY_ORDER_PRISONER - department_for_prefs = /datum/job_department/assistant // SKYRAT EDIT - ORIGINAL: /datum/job_department/security + department_for_prefs = /datum/job_department/assistant // NOVA EDIT - ORIGINAL: /datum/job_department/security exclusive_mail_goodies = TRUE mail_goodies = list ( @@ -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/psychologist.dm b/code/modules/jobs/job_types/psychologist.dm index 4a1d291c867783..3a646e202f3d58 100644 --- a/code/modules/jobs/job_types/psychologist.dm +++ b/code/modules/jobs/job_types/psychologist.dm @@ -3,9 +3,9 @@ description = "Advocate sanity, self-esteem, and teamwork in a station \ staffed with headcases." department_head = list(JOB_HEAD_OF_PERSONNEL) - faction = FACTION_STATION - total_positions = 1 - spawn_positions = 1 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = "the Head of Personnel and the Chief Medical Officer" exp_granted_type = EXP_TYPE_CREW config_tag = "PSYCHOLOGIST" diff --git a/code/modules/jobs/job_types/quartermaster.dm b/code/modules/jobs/job_types/quartermaster.dm index 0ca4b0a1052aba..858ce8b6455362 100644 --- a/code/modules/jobs/job_types/quartermaster.dm +++ b/code/modules/jobs/job_types/quartermaster.dm @@ -20,6 +20,7 @@ paycheck = PAYCHECK_COMMAND paycheck_department = ACCOUNT_CAR + mind_traits = list(HEAD_OF_STAFF_MIND_TRAITS) liver_traits = list(TRAIT_ROYAL_METABOLISM) // finally upgraded display_order = JOB_DISPLAY_ORDER_QUARTERMASTER @@ -33,7 +34,7 @@ /obj/item/circuitboard/machine/emitter = 3 ) rpg_title = "Steward" - job_flags = STATION_JOB_FLAGS | JOB_BOLD_SELECT_TEXT | JOB_CANNOT_OPEN_SLOTS + job_flags = STATION_JOB_FLAGS | HEAD_OF_STAFF_JOB_FLAGS voice_of_god_power = 1.4 //Command staff has authority ignore_human_authority = TRUE diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm index f29943888385f6..1142ba033ff753 100644 --- a/code/modules/jobs/job_types/research_director.dm +++ b/code/modules/jobs/job_types/research_director.dm @@ -28,6 +28,7 @@ paycheck = PAYCHECK_COMMAND paycheck_department = ACCOUNT_SCI + mind_traits = list(HEAD_OF_STAFF_MIND_TRAITS) liver_traits = list(TRAIT_ROYAL_METABOLISM, TRAIT_BALLMER_SCIENTIST) display_order = JOB_DISPLAY_ORDER_RESEARCH_DIRECTOR @@ -41,7 +42,7 @@ family_heirlooms = list(/obj/item/toy/plush/slimeplushie) rpg_title = "Archmagister" - job_flags = STATION_JOB_FLAGS | JOB_BOLD_SELECT_TEXT | JOB_CANNOT_OPEN_SLOTS + job_flags = STATION_JOB_FLAGS | HEAD_OF_STAFF_JOB_FLAGS voice_of_god_power = 1.4 //Command staff has authority diff --git a/code/modules/jobs/job_types/roboticist.dm b/code/modules/jobs/job_types/roboticist.dm index 69b583357686c5..3adf6cd18a2c0f 100644 --- a/code/modules/jobs/job_types/roboticist.dm +++ b/code/modules/jobs/job_types/roboticist.dm @@ -2,9 +2,9 @@ title = JOB_ROBOTICIST description = "Build and repair the AI and cyborgs, create mechs." department_head = list(JOB_RESEARCH_DIRECTOR) - faction = FACTION_STATION - total_positions = 2 - spawn_positions = 2 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = SUPERVISOR_RD exp_requirements = 60 exp_required_type = EXP_TYPE_CREW diff --git a/code/modules/jobs/job_types/scientist.dm b/code/modules/jobs/job_types/scientist.dm index 878167f2548331..10fba3f72a536b 100644 --- a/code/modules/jobs/job_types/scientist.dm +++ b/code/modules/jobs/job_types/scientist.dm @@ -2,9 +2,9 @@ title = JOB_SCIENTIST description = "Do experiments, perform research, feed the slimes, make bombs." department_head = list(JOB_RESEARCH_DIRECTOR) - faction = FACTION_STATION - total_positions = 5 - spawn_positions = 3 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = SUPERVISOR_RD exp_requirements = 60 exp_required_type = EXP_TYPE_CREW diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm index ae71ba04e0f284..18f0229d78f0cd 100644 --- a/code/modules/jobs/job_types/security_officer.dm +++ b/code/modules/jobs/job_types/security_officer.dm @@ -5,8 +5,8 @@ auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY department_head = list(JOB_HEAD_OF_SECURITY) faction = FACTION_STATION - total_positions = 8 //Handled in /datum/controller/occupations/proc/setup_officer_positions() //SKYRAT EDIT: SET TO 8, WAS 5 - spawn_positions = 8 //Handled in /datum/controller/occupations/proc/setup_officer_positions() //SKYRAT EDIT: SEE ABOVE + total_positions = 8 //Handled in /datum/controller/occupations/proc/setup_officer_positions() //NOVA EDIT: SET TO 8, WAS 5 + spawn_positions = 8 //Handled in /datum/controller/occupations/proc/setup_officer_positions() //NOVA EDIT: SEE ABOVE supervisors = "the Head of Security, and the head of your assigned department (if applicable)" minimal_player_age = 7 exp_requirements = 300 @@ -28,7 +28,7 @@ /datum/job_department/security, ) - family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law, /obj/item/clothing/head/beret/sec/peacekeeper) //SKYRAT EDIT ADD - /peacekeeper + family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law, /obj/item/clothing/head/beret/sec/peacekeeper) //NOVA EDIT ADD - /peacekeeper mail_goodies = list( /obj/item/food/donut/caramel = 10, @@ -54,24 +54,24 @@ GLOBAL_LIST_EMPTY(security_officer_distribution) /datum/job/security_officer/after_roundstart_spawn(mob/living/spawning, client/player_client) . = ..() - //SKYRAT EDIT REMOVAL + //NOVA EDIT REMOVAL /* if(ishuman(spawning)) setup_department(spawning, player_client) */ - //SKYRAT EDIT END + //NOVA EDIT END /datum/job/security_officer/after_latejoin_spawn(mob/living/spawning) . = ..() - //SKYRAT EDIT REMOVAL + //NOVA EDIT REMOVAL /* if(ishuman(spawning)) var/department = setup_department(spawning, spawning.client) if(department) announce_latejoin(spawning, department, GLOB.security_officer_distribution) */ - //SKYRAT EDIT END + //NOVA EDIT END /// Returns the department this mob was assigned to, if any. @@ -214,8 +214,8 @@ GLOBAL_LIST_EMPTY(security_officer_distribution) ) belt = /obj/item/modular_computer/pda/security ears = /obj/item/radio/headset/headset_sec/alt - gloves = /obj/item/clothing/gloves/color/black/security //SKYRAT EDIT CHANGE - Original: /obj/item/clothing/gloves/color/black - head = /obj/item/clothing/head/security_garrison //SKYRAT EDIT CHANGE - Original: /obj/item/clothing/head/helmet/sec + gloves = /obj/item/clothing/gloves/color/black/security //NOVA EDIT CHANGE - Original: /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/security_garrison //NOVA EDIT CHANGE - Original: /obj/item/clothing/head/helmet/sec shoes = /obj/item/clothing/shoes/jackboots/sec l_pocket = /obj/item/restraints/handcuffs r_pocket = /obj/item/assembly/flash/handheld diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm index b3a31a132e85db..e1d47ae54dd317 100644 --- a/code/modules/jobs/job_types/shaft_miner.dm +++ b/code/modules/jobs/job_types/shaft_miner.dm @@ -3,9 +3,9 @@ description = "Travel to strange lands. Mine ores. \ Meet strange creatures. Kill them for their gold." department_head = list(JOB_QUARTERMASTER) - faction = FACTION_STATION - total_positions = 3 - spawn_positions = 3 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = SUPERVISOR_QM exp_granted_type = EXP_TYPE_CREW config_tag = "SHAFT_MINER" @@ -41,7 +41,7 @@ /obj/item/mining_voucher = 1, /obj/item/suit_voucher = 1, /obj/item/stack/marker_beacon/ten = 1, - ) //SKYRAT EDIT: Suit_Voucher is an addition, one line up + ) //NOVA EDIT: Suit_Voucher is an addition, one line up belt = /obj/item/modular_computer/pda/shaftminer ears = /obj/item/radio/headset/headset_cargo/mining gloves = /obj/item/clothing/gloves/color/black diff --git a/code/modules/jobs/job_types/personal_ai.dm b/code/modules/jobs/job_types/spawner/personal_ai.dm similarity index 100% rename from code/modules/jobs/job_types/personal_ai.dm rename to code/modules/jobs/job_types/spawner/personal_ai.dm diff --git a/code/modules/jobs/job_types/positronic_brain.dm b/code/modules/jobs/job_types/spawner/positronic_brain.dm similarity index 100% rename from code/modules/jobs/job_types/positronic_brain.dm rename to code/modules/jobs/job_types/spawner/positronic_brain.dm diff --git a/code/modules/jobs/job_types/servant_golem.dm b/code/modules/jobs/job_types/spawner/servant_golem.dm similarity index 100% rename from code/modules/jobs/job_types/servant_golem.dm rename to code/modules/jobs/job_types/spawner/servant_golem.dm diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm index 8738389ab41d06..b919e7006b710b 100644 --- a/code/modules/jobs/job_types/station_engineer.dm +++ b/code/modules/jobs/job_types/station_engineer.dm @@ -3,9 +3,9 @@ description = "Start the Supermatter, wire the solars, repair station hull \ and wiring damage." department_head = list(JOB_CHIEF_ENGINEER) - faction = FACTION_STATION - total_positions = 5 - spawn_positions = 5 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = SUPERVISOR_CE exp_requirements = 60 exp_required_type = EXP_TYPE_CREW diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm index bdbfd7d687ca47..3f72c568dd1105 100644 --- a/code/modules/jobs/job_types/virologist.dm +++ b/code/modules/jobs/job_types/virologist.dm @@ -3,9 +3,9 @@ description = "Study the effects of various diseases and synthesize a \ vaccine for them. Engineer beneficial viruses." department_head = list(JOB_CHIEF_MEDICAL_OFFICER) - faction = FACTION_STATION - total_positions = 1 - spawn_positions = 1 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = SUPERVISOR_CMO exp_requirements = 60 exp_required_type = EXP_TYPE_CREW diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm index a671e0fdadf924..0df794a60a1fc3 100644 --- a/code/modules/jobs/job_types/warden.dm +++ b/code/modules/jobs/job_types/warden.dm @@ -5,9 +5,9 @@ they all eventually die." auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY department_head = list(JOB_HEAD_OF_SECURITY) - faction = FACTION_STATION - total_positions = 1 - spawn_positions = 1 + faction = FACTION_NONE + total_positions = 0 + spawn_positions = 0 supervisors = SUPERVISOR_HOS minimal_player_age = 7 exp_requirements = 300 @@ -47,7 +47,7 @@ id_trim = /datum/id_trim/job/warden uniform = /obj/item/clothing/under/rank/security/warden - suit = /obj/item/clothing/suit/armor/vest/warden //SKYRAT EDIT CHANGE - Original: /obj/item/clothing/suit/armor/vest/warden/alt + suit = /obj/item/clothing/suit/armor/vest/warden //NOVA EDIT CHANGE - Original: /obj/item/clothing/suit/armor/vest/warden/alt suit_store = /obj/item/gun/energy/disabler backpack_contents = list( /obj/item/evidencebag = 1, @@ -55,8 +55,8 @@ belt = /obj/item/modular_computer/pda/warden ears = /obj/item/radio/headset/headset_sec/alt glasses = /obj/item/clothing/glasses/hud/security/sunglasses - gloves = /obj/item/clothing/gloves/color/black/security //SKYRAT EDIT CHANGE - Original: /obj/item/clothing/gloves/color/black - head = /obj/item/clothing/head/hats/warden //SKYRAT EDIT CHANGE - Original: /obj/item/clothing/head/hats/warden/red + gloves = /obj/item/clothing/gloves/color/black/security //NOVA EDIT CHANGE - Original: /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/hats/warden //NOVA EDIT CHANGE - Original: /obj/item/clothing/head/hats/warden/red shoes = /obj/item/clothing/shoes/jackboots/sec l_pocket = /obj/item/restraints/handcuffs r_pocket = /obj/item/assembly/flash/handheld diff --git a/code/modules/jobs/jobs.dm b/code/modules/jobs/jobs.dm index d3b6bc3ebbbe2e..8c7f4a4acb6f60 100644 --- a/code/modules/jobs/jobs.dm +++ b/code/modules/jobs/jobs.dm @@ -25,13 +25,15 @@ GLOBAL_LIST_INIT(exp_specialmap, list( ROLE_SYNDICATE_DRONE, ROLE_VENUSHUMANTRAP, ROLE_GHOST_ROLE, - //Skyrat Edit Start - Custom Ghost roles + //NOVA EDIT Start - Custom Ghost roles + ROLE_INTERDYNE_PLANETARY_BASE, + ROLE_INTERDYNE_PLANETARY_BASE_ICEBOX, ROLE_BLACK_MARKET_DEALER, ROLE_DS2, ROLE_FREIGHTER_CREW, ROLE_GHOST_CAFE, ROLE_PORT_TARKON, - //Skyrat Edit Start - End Custom Ghost roles + //NOVA EDIT Start - End Custom Ghost roles ), // Ghost roles EXP_TYPE_GHOST = list() // dead people, observers )) diff --git a/code/modules/keybindings/bindings_atom.dm b/code/modules/keybindings/bindings_atom.dm index e728ae4d8e2993..6dadcd5768ee37 100644 --- a/code/modules/keybindings/bindings_atom.dm +++ b/code/modules/keybindings/bindings_atom.dm @@ -18,7 +18,8 @@ if(user && movement_dir) //If we're not moving, don't compensate, as byond will auto-fill dir otherwise movement_dir = turn(movement_dir, -dir2angle(user.dir)) //By doing this we ensure that our input direction is offset by the client (camera) direction - if(user?.movement_locked) + //turn without moving while using the movement lock key, unless something wants to ignore it and move anyway + if(user?.movement_locked && !(SEND_SIGNAL(src, COMSIG_MOVABLE_KEYBIND_FACE_DIR, movement_dir) & COMSIG_IGNORE_MOVEMENT_LOCK)) keybind_face_direction(movement_dir) else user?.Move(get_step(src, movement_dir), movement_dir) diff --git a/code/modules/language/codespeak.dm b/code/modules/language/codespeak.dm index 09db7ef511b4bc..fc377696ce2c8b 100644 --- a/code/modules/language/codespeak.dm +++ b/code/modules/language/codespeak.dm @@ -1,6 +1,6 @@ /datum/language/codespeak name = "Codespeak" - desc = "Syndicate operatives can use a series of codewords to convey complex information, while sounding like random concepts and drinks to anyone listening in." + desc = "Symphionia operatives can use a series of codewords to convey complex information, while sounding like random concepts and drinks to anyone listening in." key = "t" default_priority = 0 flags = TONGUELESS_SPEECH | LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD diff --git a/code/modules/language/language.dm b/code/modules/language/language.dm index 6c446f1dae6926..3e2c4e14d02ba8 100644 --- a/code/modules/language/language.dm +++ b/code/modules/language/language.dm @@ -20,10 +20,10 @@ // if you are seeing someone speak popcorn language, then something is wrong. var/icon = 'icons/misc/language.dmi' var/icon_state = "popcorn" - //SKYRAT EDIT + //NOVA EDIT /// Should this be hidden on the language buy menu? var/secret = FALSE - //SKYRAT EDIT END + //NOVA EDIT END /datum/language/proc/display_icon(atom/movable/hearer) var/understands = hearer.has_language(src.type) diff --git a/code/modules/language/nekomimetic.dm b/code/modules/language/nekomimetic.dm index 190dc7b2af0a16..8b54713900d323 100644 --- a/code/modules/language/nekomimetic.dm +++ b/code/modules/language/nekomimetic.dm @@ -6,7 +6,7 @@ syllables = list( "neko", "nyan", "mimi", "moe", "mofu", "fuwa", "kyaa", "kawaii", "poka", "munya", "puni", "munyu", "ufufu", "uhuhu", "icha", "doki", "kyun", "kusu", "nya", "nyaa", - "desu", "kis", "ama", "chuu", "baka", "hewo", "boop", "gatto", "kit", "sune", "yori", //SKYRAT EDIT gatto + "desu", "kis", "ama", "chuu", "baka", "hewo", "boop", "gatto", "kit", "sune", "yori", //NOVA EDIT gatto "sou", "baka", "chan", "san", "kun", "mahou", "yatta", "suki", "usagi", "domo", "ori", "uwa", "zaazaa", "shiku", "puru", "ira", "heto", "etto" ) diff --git a/code/modules/library/bibles.dm b/code/modules/library/bibles.dm index 48621abfd1a585..8d316d1c4f3b98 100644 --- a/code/modules/library/bibles.dm +++ b/code/modules/library/bibles.dm @@ -251,27 +251,30 @@ GLOBAL_LIST_INIT(bibleitemstates, list( return ..() if(target_mob.stat == DEAD) - target_mob.visible_message(span_danger("[user] smacks [target_mob]'s lifeless corpse with [src].")) - playsound(target_mob, SFX_PUNCH, 25, TRUE, -1) + if(!GLOB.religious_sect?.sect_dead_bless(target_mob, user)) + target_mob.visible_message(span_danger("[user] smacks [target_mob]'s lifeless corpse with [src].")) + playsound(target_mob, SFX_PUNCH, 25, TRUE, -1) return if(user == target_mob) balloon_alert(user, "can't heal yourself!") return - var/smack = TRUE - if(prob(60) && bless(target_mob, user)) - smack = FALSE - else if(iscarbon(target_mob)) + var/smack_chance = DEFAULT_SMACK_CHANCE + if(GLOB.religious_sect) + smack_chance = GLOB.religious_sect.smack_chance + var/success = !prob(smack_chance) && bless(target_mob, user) + if(success) + return + if(iscarbon(target_mob)) var/mob/living/carbon/carbon_target = target_mob if(!istype(carbon_target.head, /obj/item/clothing/head/helmet)) carbon_target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5, 60) carbon_target.balloon_alert(carbon_target, "you feel dumber!") - if(smack) - target_mob.visible_message(span_danger("[user] beats [target_mob] over the head with [src]!"), \ - span_userdanger("[user] beats [target_mob] over the head with [src]!")) - playsound(target_mob, SFX_PUNCH, 25, TRUE, -1) - log_combat(user, target_mob, "attacked", src) + target_mob.visible_message(span_danger("[user] beats [target_mob] over the head with [src]!"), \ + span_userdanger("[user] beats [target_mob] over the head with [src]!")) + playsound(target_mob, SFX_PUNCH, 25, TRUE, -1) + log_combat(user, target_mob, "attacked", src) /obj/item/book/bible/attackby_storage_insert(datum/storage, atom/storage_holder, mob/user) return !istype(storage_holder, /obj/item/book/bible) @@ -323,13 +326,14 @@ GLOBAL_LIST_INIT(bibleitemstates, list( playsound(src,'sound/effects/pray_chaplain.ogg',60,TRUE) for(var/obj/item/soulstone/stone in sword.contents) stone.required_role = null - for(var/mob/living/simple_animal/shade/shade in stone) + for(var/mob/living/basic/shade/shade in stone) var/datum/antagonist/cult/cultist = shade.mind.has_antag_datum(/datum/antagonist/cult) if(cultist) cultist.silent = TRUE cultist.on_removal() - shade.icon_state = "shade_holy" - shade.name = "Purified [shade.name]" + shade.theme = THEME_HOLY + shade.name = "Purified [shade.real_name]" + shade.update_appearance(UPDATE_ICON_STATE) stone.release_shades(user) qdel(stone) new /obj/item/nullrod/claymore(get_turf(sword)) @@ -344,7 +348,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list( new /obj/item/reagent_containers/cup/glass/bottle/whiskey(src) /obj/item/book/bible/syndicate - name = "Syndicate Tome" + name = "Symphionia Tome" desc = "A very ominous tome resembling a bible." icon_state ="ebook" item_flags = NO_BLOOD_ON_ITEM @@ -356,7 +360,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list( damtype = BURN attack_verb_continuous = list("attacks", "burns", "blesses", "damns", "scorches", "curses", "smites") attack_verb_simple = list("attack", "burn", "bless", "damn", "scorch", "curses", "smites") - deity_name = "The Syndicate" + deity_name = "The Symphionia" var/uses = 1 var/owner_name diff --git a/code/modules/library/book.dm b/code/modules/library/book.dm index e706872c710f74..19b65f82489ea5 100644 --- a/code/modules/library/book.dm +++ b/code/modules/library/book.dm @@ -21,8 +21,6 @@ /// whether or not we have been carved out var/carved = FALSE - /// Specific window size for the book, i.e: "1920x1080", Size x Width - var/window_size = null /// The initial title, for use in var editing and such var/starting_title /// The initial author, for use in var editing and such @@ -51,35 +49,53 @@ return data /obj/item/book/ui_interact(mob/living/user, datum/tgui/ui) - if(carved) - balloon_alert(user, "book is carved out!") - return - if(!length(book_data.get_content())) - balloon_alert(user, "book is blank!") - return - - 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 - ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "MarkdownViewer", name) ui.open() -/obj/item/book/attack_self(mob/user) +/// Proc that handles sending the book information to the user, as well as some housekeeping stuff. +/obj/item/book/proc/display_content(mob/living/user) + credit_book_to_reader(user) + ui_interact(user) + +/// Proc that checks if the user is capable of reading the book, for UI interactions and otherwise. Returns TRUE if they can, FALSE if they can't. +/obj/item/book/proc/can_read_book(mob/living/user) if(user.is_blind()) to_chat(user, span_warning("You are blind and can't read anything!")) - return + return FALSE if(!user.can_read(src)) + return FALSE + + if(carved) + balloon_alert(user, "book is carved out!") + return FALSE + + if(!length(book_data.get_content())) + balloon_alert(user, "book is blank!") + return FALSE + + return TRUE + +/// Proc that adds the book to a list on the user's mind so we know what works of art they've been catching up on. +/obj/item/book/proc/credit_book_to_reader(mob/living/user) + if(!isliving(user) || isnull(user.mind)) + return + + LAZYINITLIST(user.mind.book_titles_read) + if(starting_title in user.mind.book_titles_read) + return + + user.add_mood_event("book_nerd", /datum/mood_event/book_nerd) + user.mind.book_titles_read[starting_title] = TRUE + +/obj/item/book/attack_self(mob/user) + if(!can_read_book(user)) return user.visible_message(span_notice("[user] opens a book titled \"[book_data.title]\" and begins reading intently.")) - ui_interact(user) + display_content(user) /obj/item/book/attackby(obj/item/attacking_item, mob/living/user, params) if(burn_paper_product_attackby_check(attacking_item, user)) diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 6a0c4c03005931..770a2d3c213bfb 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -256,7 +256,7 @@ GLOBAL_VAR_INIT(library_table_modified, 0) #define PRINTER_COOLDOWN (6 SECONDS) #define NEWSCASTER_COOLDOWN (10 SECONDS) -#define LIBRARY_NEWSFEED "Nanotrasen Book Club" +#define LIBRARY_NEWSFEED "Symphionia Book Club" //The different states the computer can be in, only send the info we need yeah? #define LIBRARY_INVENTORY 1 #define LIBRARY_CHECKOUT 2 @@ -771,7 +771,7 @@ GLOBAL_VAR_INIT(library_table_modified, 0) /obj/machinery/bookbinder/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/bookbinder/attackby(obj/hitby, mob/user, params) if(istype(hitby, /obj/item/paper)) diff --git a/code/modules/library/skill_learning/job_skillchips/janitor.dm b/code/modules/library/skill_learning/job_skillchips/janitor.dm new file mode 100644 index 00000000000000..22109bbed29c51 --- /dev/null +++ b/code/modules/library/skill_learning/job_skillchips/janitor.dm @@ -0,0 +1,9 @@ +/obj/item/skillchip/job/janitor + name = "CL34NM4ST.R skillchip" + desc = "Become a cleanbot whisperer." + auto_traits = list(TRAIT_CLEANBOT_WHISPERER) + skill_name = "Voice Of The Voiceless" + skill_description = "Gain the affection of all thankless, hardworking cleanbots on the station." + skill_icon = "broom" + activate_message = span_notice("You start feeling empathetic towards all the cleanbots on the station.") + deactivate_message = span_notice("You forget why you felt any sympathy towards the cleanbots, they are just robots after all.") diff --git a/code/modules/library/skill_learning/skill_station.dm b/code/modules/library/skill_learning/skill_station.dm index d7fb5b7ff8e589..697b34d742e2dd 100644 --- a/code/modules/library/skill_learning/skill_station.dm +++ b/code/modules/library/skill_learning/skill_station.dm @@ -9,7 +9,8 @@ icon_state = "implantchair" occupant_typecache = list(/mob/living/carbon) //todo make occupant_typecache per type state_open = TRUE - interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND //Don't call ui_interac by default - we only want that when inside + // Only opens UI when inside; also, you can use the machine while lying down (for paraplegics and the like) + interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_IGNORE_MOBILITY circuit = /obj/item/circuitboard/machine/skill_station /// Currently implanting/removing var/working = FALSE diff --git a/code/modules/library/skill_learning/skillchip.dm b/code/modules/library/skill_learning/skillchip.dm index 762e8e0162c528..4601e7e3689e08 100644 --- a/code/modules/library/skill_learning/skillchip.dm +++ b/code/modules/library/skill_learning/skillchip.dm @@ -7,9 +7,9 @@ /obj/item/skillchip name = "skillchip" - desc = "This biochip integrates with user's brain to enable mastery of specific skill. Consult certified Nanotrasen neurosurgeon before use." + desc = "This biochip integrates with user's brain to enable mastery of specific skill. Consult certified Symphionia neurosurgeon before use." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "skillchip" custom_price = PAYCHECK_CREW * 3 w_class = WEIGHT_CLASS_SMALL @@ -106,7 +106,7 @@ return "Skillchip is not active." // Should not happen. Holding brain is destroyed and the chip hasn't had its state set appropriately. - if(QDELETED(holding_brain)) + if(!holding_brain) stack_trace("Skillchip's owner is null or qdeleted brain.") return "Skillchip cannot detect viable brain." @@ -498,4 +498,13 @@ activate_message = span_notice("You feel the knowledge and passion of several sunbaked, seasoned fishermen burn within you.") deactivate_message = span_notice("You no longer feel like casting a fishing rod by the sunny riverside.") +/obj/item/skillchip/intj + name = "Integrated Intuitive Thinking and Judging skillchip" + auto_traits = list(TRAIT_REMOTE_TASTING) + skill_name = "Mental Flavour Calculus" + skill_description = "When examining food, you can experience the flavours just as well as if you were eating it." + skill_icon = FA_ICON_DRUMSTICK_BITE + activate_message = span_notice("You think of your favourite food and realise that you can rotate its flavour in your mind.") + deactivate_message = span_notice("You feel your food-based mind palace crumbling...") + #undef SKILLCHIP_CATEGORY_GENERAL diff --git a/code/modules/logging/categories/log_category_internal.dm b/code/modules/logging/categories/log_category_internal.dm new file mode 100644 index 00000000000000..d0b363e63655ae --- /dev/null +++ b/code/modules/logging/categories/log_category_internal.dm @@ -0,0 +1,6 @@ +/datum/log_category/internal + category = LOG_CATEGORY_INTERNAL_ERROR + +/datum/log_category/internal_unknown_category + category = LOG_CATEGORY_INTERNAL_CATEGORY_NOT_FOUND + master_category = /datum/log_category/internal diff --git a/code/modules/logging/log_category.dm b/code/modules/logging/log_category.dm index 96849ff02c821c..363fb5ad0be0ef 100644 --- a/code/modules/logging/log_category.dm +++ b/code/modules/logging/log_category.dm @@ -20,6 +20,9 @@ /// Whether or not this log should not be publically visible var/secret = FALSE + /// The list of header information for this category. Used for log file re-initialization + var/list/category_header + /// Whether the readable version of the log message is formatted internally instead of by rustg /// IF YOU CHANGE THIS VERIFY LOGS ARE STILL PARSED CORRECTLY var/internal_formatting = FALSE @@ -32,10 +35,6 @@ GENERAL_PROTECT_DATUM(/datum/log_category) -/// Backup log category to catch attempts to log to a category that doesn't exist -/datum/log_category/backup_category_not_found - category = LOG_CATEGORY_NOT_FOUND - /// Add an entry to this category. It is very important that any data you provide doesn't hold references to anything! /datum/log_category/proc/create_entry(message, list/data, list/semver_store) var/datum/log_entry/entry = new( diff --git a/code/modules/logging/log_entry.dm b/code/modules/logging/log_entry.dm index 778c1ad35c709b..8c9f6bd2cf0a07 100644 --- a/code/modules/logging/log_entry.dm +++ b/code/modules/logging/log_entry.dm @@ -74,11 +74,7 @@ GENERAL_PROTECT_DATUM(/datum/log_entry) output += "[uppertext(category)]: [message]" if(flags & ENTRY_USE_DATA_W_READABLE) -#if DM_VERSION >= 515 output += json_encode(data, JSON_PRETTY_PRINT) -#else - output += json_encode(data) -#endif return output #define MANUAL_JSON_ENTRY(list, key, value) list.Add("\"[key]\":[(!isnull(value)) ? json_encode(value) : "null"]") @@ -99,19 +95,33 @@ GENERAL_PROTECT_DATUM(/datum/log_entry) #undef MANUAL_JSON_ENTRY +#define CHECK_AND_TRY_FILE_ERROR_RECOVERY(file) \ + var/static/in_error_recovery = FALSE; \ + if(!fexists(##file)) { \ + if(in_error_recovery) { \ + in_error_recovery = FALSE; \ + CRASH("Failed to error recover log file: [file]"); \ + }; \ + in_error_recovery = TRUE; \ + logger.Log(LOG_CATEGORY_INTERNAL_ERROR, "attempting to perform file error recovery: [file]"); \ + logger.init_category_file(logger.log_categories[category]); \ + call(src, __PROC__)(arglist(args)); \ + return; \ + }; \ + in_error_recovery = FALSE; + /// Writes the log entry to a file. /datum/log_entry/proc/write_entry_to_file(file) - if(!fexists(file)) - CRASH("Attempted to log to an uninitialized file: [file]") + CHECK_AND_TRY_FILE_ERROR_RECOVERY(file) WRITE_LOG_NO_FORMAT(file, "[to_json_text()]\n") /// Writes the log entry to a file as a human-readable string. /datum/log_entry/proc/write_readable_entry_to_file(file, format_internally = TRUE) - if(!fexists(file)) - CRASH("Attempted to log to an uninitialized file: [file]") - + CHECK_AND_TRY_FILE_ERROR_RECOVERY(file) // If it's being formatted internally we need to manually add a newline if(format_internally) WRITE_LOG_NO_FORMAT(file, "[to_readable_text(format = TRUE)]\n") else WRITE_LOG(file, "[to_readable_text(format = FALSE)]") + +#undef CHECK_AND_TRY_FILE_ERROR_RECOVERY diff --git a/code/modules/logging/log_holder.dm b/code/modules/logging/log_holder.dm index 7d8386e77b6e0d..b378e4b8ef379f 100644 --- a/code/modules/logging/log_holder.dm +++ b/code/modules/logging/log_holder.dm @@ -121,7 +121,7 @@ GENERAL_PROTECT_DATUM(/datum/log_holder) CRASH("Attempted to call init_logging twice!") round_id = GLOB.round_id - logging_start_timestamp = unix_timestamp_string() + logging_start_timestamp = rustg_unix_timestamp() log_categories = list() disabled_categories = list() @@ -206,6 +206,42 @@ GENERAL_PROTECT_DATUM(/datum/log_holder) return category_tree +/// Log entry header used to mark a file is being reset +#define LOG_CATEGORY_RESET_FILE_MARKER "{\"LOG FILE RESET -- THIS IS AN ERROR\"}" +#define LOG_CATEGORY_RESET_FILE_MARKER_READABLE "LOG FILE RESET -- THIS IS AN ERROR" +/// Gets a recovery file for the given path. Caches the last known recovery path for each path. +/datum/log_holder/proc/get_recovery_file_for(path) + var/static/cache + if(isnull(cache)) + cache = list() + + var/count = cache[path] || 0 + while(fexists("[path].rec[count]")) + count++ + cache[path] = count + + return "[path].rec[count]" + +/// Sets up the given category's file and header. +/datum/log_holder/proc/init_category_file(datum/log_category/category) + var/file_path = category.get_output_file(null) + if(fexists(file_path)) // already exists? implant a reset marker + rustg_file_append(LOG_CATEGORY_RESET_FILE_MARKER, file_path) + fcopy(file_path, get_recovery_file_for(file_path)) + rustg_file_write("[json_encode(category.category_header)]\n", file_path) + + if(!human_readable_enabled) + return + + file_path = category.get_output_file(null, "log") + if(fexists(file_path)) + rustg_file_append(LOG_CATEGORY_RESET_FILE_MARKER_READABLE, file_path) + fcopy(file_path, get_recovery_file_for(file_path)) + rustg_file_write("\[[human_readable_timestamp()]\] Starting up round ID [round_id].\n - -------------------------\n", file_path) + +#undef LOG_CATEGORY_RESET_FILE_MARKER +#undef LOG_CATEGORY_RESET_FILE_MARKER_READABLE + /// Initializes the given log category and populates the list of contained categories based on the sub category list /datum/log_holder/proc/init_log_category(datum/log_category/category_type, list/datum/log_category/sub_categories) var/datum/log_category/category_instance = new category_type @@ -239,17 +275,13 @@ GENERAL_PROTECT_DATUM(/datum/log_holder) LOG_HEADER_CATEGORY = category_instance.category, ) - rustg_file_write("[json_encode(category_header)]\n", category_instance.get_output_file(null)) - if(human_readable_enabled) - rustg_file_write("\[[human_readable_timestamp()]\] Starting up round ID [round_id].\n - -------------------------\n", category_instance.get_output_file(null, "log")) - -/datum/log_holder/proc/unix_timestamp_string() // pending change to rust-g - return RUSTG_CALL(RUST_G, "unix_timestamp")() + category_instance.category_header = category_header + init_category_file(category_instance, category_header) /datum/log_holder/proc/human_readable_timestamp(precision = 3) var/start = time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss") // now we grab the millis from the rustg timestamp - var/rustg_stamp = unix_timestamp_string() + var/rustg_stamp = rustg_unix_timestamp() var/list/timestamp = splittext(rustg_stamp, ".") #ifdef UNIT_TESTS if(length(timestamp) != 2) @@ -273,7 +305,7 @@ GENERAL_PROTECT_DATUM(/datum/log_holder) stack_trace("Logging with a non-text message") if(!category) - category = LOG_CATEGORY_NOT_FOUND + category = LOG_CATEGORY_INTERNAL_CATEGORY_NOT_FOUND stack_trace("Logging with a null or empty category") if(data && !islist(data)) @@ -289,7 +321,7 @@ GENERAL_PROTECT_DATUM(/datum/log_holder) var/datum/log_category/log_category = log_categories[category] if(!log_category) - Log(LOG_CATEGORY_NOT_FOUND, message, data) + Log(LOG_CATEGORY_INTERNAL_CATEGORY_NOT_FOUND, message, data) CRASH("Attempted to log to a category that doesn't exist! [category]") var/list/semver_store = null diff --git a/code/modules/mafia/abilities/abilities.dm b/code/modules/mafia/abilities/abilities.dm index 3c8e643a427aa8..deba0f670ff3d1 100644 --- a/code/modules/mafia/abilities/abilities.dm +++ b/code/modules/mafia/abilities/abilities.dm @@ -24,7 +24,7 @@ RegisterSignal(game, action_priority, PROC_REF(perform_action_target)) RegisterSignal(game, COMSIG_MAFIA_NIGHT_END, PROC_REF(clean_action_refs)) -/datum/mafia_ability/Destroy(force, ...) +/datum/mafia_ability/Destroy(force) host_role = null target_role = null return ..() diff --git a/code/modules/mafia/abilities/killing/kill.dm b/code/modules/mafia/abilities/killing/kill.dm index d02fd6c287de1f..2db28db53b08db 100644 --- a/code/modules/mafia/abilities/killing/kill.dm +++ b/code/modules/mafia/abilities/killing/kill.dm @@ -28,7 +28,7 @@ /datum/mafia_ability/attack_player/proc/internal_affairs(datum/mafia_controller/game) SIGNAL_HANDLER - host_role.send_message_to_player(span_userdanger("You have been killed by Nanotrasen Internal Affairs!")) + host_role.send_message_to_player(span_userdanger("You have been killed by Symphionia Internal Affairs!")) host_role.reveal_role(game, verbose = TRUE) host_role.kill(game, host_role, FALSE) //you technically kill yourself but that shouldn't matter diff --git a/code/modules/mafia/controller.dm b/code/modules/mafia/controller.dm index 967ae9b39a30d9..f6b46c3430dc9b 100644 --- a/code/modules/mafia/controller.dm +++ b/code/modules/mafia/controller.dm @@ -56,9 +56,6 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) ///current timer for phase var/next_phase_timer - ///used for debugging in testing (doesn't put people out of the game, some other shit i forgot, who knows just don't set this in live) honestly kinda deprecated - var/debug = FALSE - ///was our game forced to start early? var/early_start = FALSE @@ -107,9 +104,10 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) GLOB.mafia_game = src map_deleter = new -/datum/mafia_controller/Destroy(force, ...) +/datum/mafia_controller/Destroy(force) . = ..() end_game() + player_role_lookup.Cut() QDEL_NULL(map_deleter) if(GLOB.mafia_game == src) GLOB.mafia_game = null @@ -126,10 +124,9 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) * * Puts players in each role randomly * Arguments: * * setup_list: list of all the datum setups (fancy list of roles) that would work for the game - * * ready_ghosts: list of filtered, sane players (so not playing or disconnected) for the game to put into roles - * * ready_pdas: list of PDAs wanting to play the Mafia game. + * * ready_ghosts_and_pdas: list of filtered, sane (so not playing or disconnected) ghost ckeys & PDAs for the game to put into roles. */ -/datum/mafia_controller/proc/prepare_game(setup_list, ready_ghosts, ready_pdas) +/datum/mafia_controller/proc/prepare_game(setup_list, ready_ghosts_and_pdas) var/static/list/possible_maps = subtypesof(/datum/map_template/mafia) var/turf/spawn_area = get_turf(locate(/obj/effect/landmark/mafia_game_area) in GLOB.landmarks_list) @@ -141,8 +138,11 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) var/list/bounds = current_map.load(spawn_area) if(!bounds) CRASH("Loading mafia map failed!") - map_deleter.defineRegion(spawn_area, locate(spawn_area.x + 23,spawn_area.y + 23,spawn_area.z), replace = TRUE) //so we're ready to mass delete when round ends - +#ifdef UNIT_TESTS //unit test map is smaller + map_deleter.defineRegion(spawn_area, locate(spawn_area.x + 7, spawn_area.y + 7, spawn_area.z), replace = TRUE) //so we're ready to mass delete when round ends +#else + map_deleter.defineRegion(spawn_area, locate(spawn_area.x + 23, spawn_area.y + 23, spawn_area.z), replace = TRUE) //so we're ready to mass delete when round ends +#endif if(!landmarks.len)//we grab town center when we grab landmarks, if there is none (the first game signed up for let's grab them post load) for(var/obj/effect/landmark/mafia/possible_spawn in GLOB.landmarks_list) if(istype(possible_spawn, /obj/effect/landmark/mafia/town_center)) @@ -161,23 +161,14 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) var/list/spawnpoints = landmarks.Copy() for(var/datum/mafia_role/role as anything in all_roles) role.assigned_landmark = pick_n_take(spawnpoints) - var/selected_player - if(!debug) - if(length(ready_pdas)) - selected_player = pick(ready_pdas) - else - selected_player = pick(ready_ghosts) + var/selected_player //this can be a ckey or a PDA + selected_player = pick(ready_ghosts_and_pdas) + var/client/player_client = GLOB.directory[selected_player] + if(player_client) + role.player_key = selected_player else - if(length(ready_pdas)) - selected_player = peek(ready_pdas) - else - selected_player = peek(ready_ghosts) - if(selected_player in ready_pdas) role.player_pda = selected_player - ready_pdas -= selected_player - else - role.player_key = selected_player - ready_ghosts -= selected_player + ready_ghosts_and_pdas -= selected_player ///Sends a global message to all players, or just 'team' if set. /datum/mafia_controller/proc/send_message(msg, team, log_only = FALSE) @@ -205,6 +196,7 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) for(var/datum/mafia_role/roles as anything in all_roles) var/obj/item/modular_computer/modpc = roles.player_pda if(!modpc) + update_static_data(roles.body) continue modpc.update_static_data_for_all_viewers() @@ -400,11 +392,12 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) if(!rewarded.player_pda) return for(var/datum/tgui/window as anything in rewarded.player_pda.open_uis) - window.user?.client?.give_award(award, rewarded.body) + window.user?.client?.give_award(award, window.user.client.mob) /** * The end of the game is in two procs, because we want a bit of time for players to see eachothers roles. * Because of how check_victory works, the game is halted in other places by this point. + * We won't delete ourselves in a certain amount of time in unit tests, as the unit test will handle our deletion instead. * * What players do in this phase: * * See everyone's role postgame @@ -419,7 +412,9 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) roles.mafia_alert.update_text("[message]") roles.reveal_role(src) phase = MAFIA_PHASE_VICTORY_LAP +#ifndef UNIT_TESTS next_phase_timer = QDEL_IN_STOPPABLE(src, VICTORY_LAP_PERIOD_LENGTH) +#endif /** * Cleans up the game, resetting variables back to the beginning and removing the map with the generator. @@ -586,7 +581,7 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) if(phase != MAFIA_PHASE_VOTING) return - var/v = get_vote_count(player_role_lookup[source],"Day") + var/v = get_vote_count(get_role_player(source),"Day") var/mutable_appearance/MA = mutable_appearance('icons/obj/mafia.dmi',"vote_[v > 12 ? "over_12" : v]") overlay_list += MA @@ -612,310 +607,59 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) H.equipOutfit(outfit_to_distribute) H.status_flags |= GODMODE RegisterSignal(H, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(display_votes)) - var/datum/action/innate/mafia_panel/mafia_panel = new(null,src) - mafia_panel.Grant(H) var/obj/item/modular_computer/modpc = role.player_pda role.register_body(H) if(modpc) player_role_lookup[modpc] = role else - player_role_lookup[H] = role + player_role_lookup[role.player_key] = role var/client/player_client = GLOB.directory[role.player_key] if(player_client) role.put_player_in_body(player_client) role.greet() -/datum/mafia_controller/ui_static_data(atom/user) - var/list/data = list() - - if(usr.client?.holder) - data["admin_controls"] = TRUE //show admin buttons to start/setup/stop - data["is_observer"] = isobserver(user) - data["all_roles"] = current_setup_text - - if(phase == MAFIA_PHASE_SETUP) - return data - - var/datum/mafia_role/user_role = player_role_lookup[user] - if(user_role) - data["roleinfo"] = list( - "role" = user_role.name, - "desc" = user_role.desc, - "hud_icon" = user_role.hud_icon, - "revealed_icon" = user_role.revealed_icon, - ) - - return data - -/datum/mafia_controller/ui_data(atom/user) - var/list/data = list() - - data["phase"] = phase - if(turn) - data["turn"] = " - Day [turn]" - - if(phase == MAFIA_PHASE_SETUP) - data["lobbydata"] = list() - for(var/key in GLOB.mafia_signup + GLOB.mafia_bad_signup + GLOB.pda_mafia_signup) - var/list/lobby_member = list() - lobby_member["name"] = key - lobby_member["status"] = (key in GLOB.mafia_bad_signup) ? "Disconnected" : "Ready" - data["lobbydata"] += list(lobby_member) - return data - - data["timeleft"] = next_phase_timer ? timeleft(next_phase_timer) : 0 - - var/datum/mafia_role/user_role = player_role_lookup[user] - if(user_role) - data["user_notes"] = user_role.written_notes - data["messages"] = list() - var/list/ui_messages = list() - for(var/i = user_role.role_messages.len to 1 step -1) - ui_messages.Add(list(list( - "msg" = user_role.role_messages[i], - ))) - data["messages"] = ui_messages - - data["players"] = list() - for(var/datum/mafia_role/role as anything in all_roles) - var/list/player_info = list() - player_info["name"] = role.body.real_name - player_info["ref"] = REF(role) - player_info["alive"] = role.game_status == MAFIA_ALIVE - player_info["possible_actions"] = list() - - if(user_role) //not observer - for(var/datum/mafia_ability/action as anything in user_role.role_unique_actions) - if(action.validate_action_target(src, potential_target = role, silent = TRUE)) - player_info["possible_actions"] += list(list("name" = action, "ref" = REF(action))) - - data["players"] += list(player_info) - - return data - -/datum/mafia_controller/ui_assets(mob/user) - return list( - get_asset_datum(/datum/asset/spritesheet/mafia), - ) - -/datum/mafia_controller/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) - . = ..() - if(.) - return - var/datum/mafia_role/user_role = player_role_lookup[usr] - var/obj/item/modular_computer/modpc = ui.src_object +///From a 'user' (Either a mob or ModPC) or TGUI UI, will try to find the Mafia role from 'player_role_lookup'. +/datum/mafia_controller/proc/get_role_player(atom/user, datum/tgui/ui) + var/obj/item/modular_computer/modpc = ui?.src_object || user if(istype(modpc)) - user_role = player_role_lookup[modpc] - else - modpc = null - //Admin actions - if(ui.user.client.holder) - switch(action) - if("new_game") - if(phase == MAFIA_PHASE_SETUP) - return - basic_setup() - if("nuke") - qdel(src) - if("next_phase") - if(phase == MAFIA_PHASE_SETUP) - return - var/datum/timedevent/timer = SStimer.timer_id_dict[next_phase_timer] - if(!timer.spent) - var/datum/callback/tc = timer.callBack - deltimer(next_phase_timer) - tc.InvokeAsync() - return TRUE - if("players_home") - var/list/failed = list() - for(var/datum/mafia_role/player in all_roles) - if(!player.body) - failed += player - continue - player.body.forceMove(get_turf(player.assigned_landmark)) - if(failed.len) - to_chat(usr, "List of players who no longer had a body (if you see this, the game is runtiming anyway so just hit \"New Game\" to end it)") - for(var/datum/mafia_role/fail as anything in failed) - to_chat(usr, fail.player_key || fail.player_pda) - if("debug_setup") - var/list/debug_setup = list() - var/list/rolelist_dict = list("CANCEL", "FINISH") + GLOB.mafia_roles_by_name - var/done = FALSE - - while(!done) - to_chat(usr, "You have a total player count of [assoc_value_sum(debug_setup)] in this setup.") - var/chosen_role_name = tgui_input_list(usr, "Select a role!", "Custom Setup Creation", rolelist_dict) - if(!chosen_role_name) - return - switch(chosen_role_name) - if("CANCEL") - done = TRUE - return - if("FINISH") - done = TRUE - break - else - var/found_path = rolelist_dict[chosen_role_name] - var/role_count = tgui_input_number(usr, "How many? Zero to cancel.", "Custom Setup Creation", 0, 12) - if(role_count > 0) - debug_setup[found_path] = role_count - custom_setup = debug_setup - early_start = TRUE - try_autostart()//don't worry, this fails if there's a game in progress - if("cancel_setup") - custom_setup = list() - if("start_now") - forced_setup() - - switch(action) //both living and dead - if("mf_lookup") - var/role_lookup = params["role_name"] - var/datum/mafia_role/helper - for(var/datum/mafia_role/role as anything in all_roles) - if(role_lookup == role.name) - helper = role - break - helper.show_help(usr) - - if(!user_role)//just the dead - switch(action) - if("mf_signup") - var/client/ghost_client = ui.user.client - if(!SSticker.HasRoundStarted()) - to_chat(usr, span_warning("Wait for the round to start.")) - return - if(isnull(modpc)) - if(GLOB.mafia_signup[ghost_client.ckey]) - GLOB.mafia_signup -= ghost_client.ckey - GLOB.mafia_early_votes -= ghost_client.ckey //Remove their early start vote as well - to_chat(usr, span_notice("You unregister from Mafia.")) - return TRUE - else - GLOB.mafia_signup[ghost_client.ckey] = TRUE - to_chat(usr, span_notice("You sign up for Mafia.")) - else - if(GLOB.pda_mafia_signup[modpc]) - GLOB.pda_mafia_signup -= modpc - GLOB.mafia_early_votes -= modpc //Remove their early start vote as well - to_chat(usr, span_notice("You unregister from Mafia.")) - return TRUE - else - GLOB.pda_mafia_signup[modpc] = TRUE - to_chat(usr, span_notice("You sign up for Mafia.")) - if(phase == MAFIA_PHASE_SETUP) - check_signups() - try_autostart() - return TRUE - if("vote_to_start") - var/client/ghost_client = ui.user.client - if(phase != MAFIA_PHASE_SETUP) - to_chat(usr, span_notice("You cannot vote to start while a game is underway!")) - return - if(isnull(modpc)) - if(!GLOB.mafia_signup[ghost_client.ckey]) - to_chat(usr, span_notice("You must be signed up for this game to vote!")) - return - if(GLOB.mafia_early_votes[ghost_client.ckey]) - GLOB.mafia_early_votes -= ghost_client.ckey - to_chat(usr, span_notice("You are no longer voting to start the game early.")) - else - GLOB.mafia_early_votes[ghost_client.ckey] = ghost_client - to_chat(usr, span_notice("You vote to start the game early ([length(GLOB.mafia_early_votes)] out of [max(round(length(GLOB.mafia_signup) / 2), round(MAFIA_MIN_PLAYER_COUNT / 2))]).")) - if(check_start_votes()) //See if we have enough votes to start - forced_setup() - else - if(!GLOB.pda_mafia_signup[modpc]) - to_chat(usr, span_notice("You must be signed up for this game to vote!")) - return - if(GLOB.mafia_early_votes[modpc]) - GLOB.mafia_early_votes -= modpc - to_chat(usr, span_notice("You are no longer voting to start the game early.")) - else - GLOB.mafia_early_votes[modpc] = modpc - to_chat(usr, span_notice("You vote to start the game early ([length(GLOB.mafia_early_votes)] out of [max(round(length(GLOB.mafia_signup) / 2), round(MAFIA_MIN_PLAYER_COUNT / 2))]).")) - if(check_start_votes()) //See if we have enough votes to start - forced_setup() - return TRUE - - if(user_role && user_role.game_status == MAFIA_DEAD) - return + return player_role_lookup[modpc] + var/mob/mob_user = user + if(!istype(mob_user)) + CRASH("[user] is not a modPC nor a mob, but we are trying to find their role.") + return player_role_lookup[mob_user.ckey] - //User actions (just living) - switch(action) - if("change_notes") - if(user_role.game_status == MAFIA_DEAD) - return TRUE - user_role.written_notes = sanitize_text(params["new_notes"]) - user_role.send_message_to_player("notes saved", balloon_alert = TRUE) - return TRUE - if("send_message_to_chat") - if(user_role.game_status == MAFIA_DEAD) - return TRUE - var/message_said = sanitize_text(params["message"]) - user_role.body.say(message_said, forced = "mafia chat (sent by [ui.user.client])") - return TRUE - if("send_notes_to_chat") - if(user_role.game_status == MAFIA_DEAD || !user_role.written_notes) - return TRUE - if(phase == MAFIA_PHASE_NIGHT) - return TRUE - if(!COOLDOWN_FINISHED(user_role, note_chat_sending_cooldown)) - return FALSE - COOLDOWN_START(user_role, note_chat_sending_cooldown, MAFIA_NOTE_SENDING_COOLDOWN) - user_role.body.say("[user_role.written_notes]", forced = "mafia notes sending") - return TRUE - if("perform_action") - var/datum/mafia_role/target = locate(params["target"]) in all_roles - if(!istype(target)) - return - var/datum/mafia_ability/used_action = locate(params["action_ref"]) in user_role.role_unique_actions - if(!used_action) - return - switch(phase) - if(MAFIA_PHASE_DAY, MAFIA_PHASE_VOTING) - used_action.using_ability = TRUE - used_action.perform_action_target(src, target) - if(MAFIA_PHASE_NIGHT) - used_action.set_target(src, target) +/** + * Signs the player up for Mafia, or removes them from the list if they are already + * signed up. + * Args: + * - ghost_client: is the client of the observer signing up. This can be null in favor of modpc. + * - modpc: is a living player signing up through a PDA. This can be null in favor of ghost_client. + */ +/datum/mafia_controller/proc/signup_mafia(mob/user, client/ghost_client, obj/item/modular_computer/modpc) + if(!SSticker.HasRoundStarted()) + to_chat(user, span_warning("Wait for the round to start.")) + return FALSE + if(isnull(modpc)) + if(GLOB.mafia_signup[ghost_client.ckey]) + GLOB.mafia_signup -= ghost_client.ckey + GLOB.mafia_early_votes -= ghost_client.ckey //Remove their early start vote as well + to_chat(user, span_notice("You unregister from Mafia.")) + else + GLOB.mafia_signup[ghost_client.ckey] = TRUE + to_chat(user, span_notice("You sign up for Mafia.")) + else + if(GLOB.pda_mafia_signup[modpc]) + GLOB.pda_mafia_signup -= modpc + GLOB.mafia_early_votes -= modpc //Remove their early start vote as well + to_chat(user, span_notice("You unregister from Mafia.")) return TRUE - - if(user_role != on_trial) - switch(action) - if("vote_abstain") - if(phase != MAFIA_PHASE_JUDGEMENT || (user_role in judgement_abstain_votes)) - return - user_role.send_message_to_player("You have decided to abstain.") - judgement_innocent_votes -= user_role - judgement_guilty_votes -= user_role - judgement_abstain_votes += user_role - if("vote_innocent") - if(phase != MAFIA_PHASE_JUDGEMENT || (user_role in judgement_innocent_votes)) - return - user_role.send_message_to_player("Your vote on [on_trial.body.real_name] submitted as INNOCENT!") - judgement_abstain_votes -= user_role//no fakers, and... - judgement_guilty_votes -= user_role//no radical centrism - judgement_innocent_votes += user_role - if("vote_guilty") - if(phase != MAFIA_PHASE_JUDGEMENT || (user_role in judgement_guilty_votes)) - return - user_role.send_message_to_player("Your vote on [on_trial.body.real_name] submitted as GUILTY!") - judgement_abstain_votes -= user_role//no fakers, and... - judgement_innocent_votes -= user_role//no radical centrism - judgement_guilty_votes += user_role - -/datum/mafia_controller/ui_state(mob/user) - return GLOB.always_state - -/datum/mafia_controller/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, null) - if(!ui) - ui = new(user, src, "MafiaPanel") - ui.open() - -/proc/assoc_value_sum(list/L) - . = 0 - for(var/key in L) - . += L[key] + else + GLOB.pda_mafia_signup[modpc] = TRUE + to_chat(user, span_notice("You sign up for Mafia.")) + if(phase == MAFIA_PHASE_SETUP) + check_signups() + try_autostart() + return TRUE /** * Returns a standard setup, with certain important/unique roles guaranteed. @@ -960,18 +704,16 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) /datum/mafia_controller/proc/basic_setup() var/req_players = MAFIA_MAX_PLAYER_COUNT var/list/setup = custom_setup - if(setup.len) + if(length(setup)) req_players = assoc_value_sum(setup) - var/list/filtered_pdas = GLOB.pda_mafia_signup - if(!isnull(filtered_pdas)) //pdas get priority - req_players -= length(GLOB.pda_mafia_signup) - var/list/filtered_keys = filter_players(req_players) - var/needed_players = length(filtered_keys) + length(filtered_pdas) + var/list/filtered_keys_and_pdas = filter_players(req_players) - if(!setup.len) //don't actually have one yet, so generate a max player random setup. it's good to do this here instead of above so it doesn't generate one every time a game could possibly start. - setup = generate_standard_setup(needed_players) - prepare_game(setup, filtered_keys, filtered_pdas) + //don't actually have one yet, so generate a max player random setup. + //it's good to do this here instead of above so it doesn't generate one every time a game could possibly start. + if(!length(setup)) + setup = generate_standard_setup(length(filtered_keys_and_pdas)) + prepare_game(setup, filtered_keys_and_pdas) start_game() /** @@ -982,17 +724,15 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) /datum/mafia_controller/proc/forced_setup() check_signups() //Refresh the signup list, so our numbers are accurate and we only take active players into consideration. - var/list/filtered_pdas = GLOB.pda_mafia_signup - var/list/filtered_keys = filter_players(length(GLOB.mafia_signup)) - var/req_players = length(filtered_keys) + length(filtered_pdas) - - if(!req_players) //If we have nobody signed up, we give up on starting + var/players_needed = GLOB.mafia_signup.len + GLOB.pda_mafia_signup.len + var/list/filtered_keys_and_pdas = filter_players(players_needed) + if(!length(filtered_keys_and_pdas)) //If we have nobody signed up, we give up on starting log_admin("Attempted to force a mafia game to start with nobody signed up!") return - var/list/setup = generate_standard_setup(req_players) + var/list/setup = generate_standard_setup(length(filtered_keys_and_pdas)) - prepare_game(setup, filtered_keys, filtered_pdas) + prepare_game(setup, filtered_keys_and_pdas) early_start = TRUE start_game() @@ -1006,10 +746,10 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) /datum/mafia_controller/proc/check_start_votes() check_signups() //Same as before. What a useful proc. - if(length(GLOB.mafia_signup) < MAFIA_MIN_PLAYER_COUNT) + if(length(GLOB.mafia_signup + GLOB.pda_mafia_signup) < MAFIA_MIN_PLAYER_COUNT) return FALSE //Make sure we have the minimum playercount to host a game first. - if(length(GLOB.mafia_early_votes) < round(length(GLOB.mafia_signup) / 2)) + if(length(GLOB.mafia_early_votes) < round(length(GLOB.mafia_signup + GLOB.pda_mafia_signup) / 2)) return FALSE return TRUE @@ -1023,38 +763,44 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) * This should only be run as we are in the process of starting a game. * * max_players - The maximum number of keys to put in our return list before we start telling people they're not getting in. - * filtered_keys - A list of player ckeys, to be included in the game. + * filtered_keys_and_pdas - A list of player ckeys and PDAs, to be included in the game. */ /datum/mafia_controller/proc/filter_players(max_players) //final list for all the players who will be in this game - var/list/filtered_keys = list() + var/list/filtered_keys_and_pdas = list() //cuts invalid players from signups (disconnected/not a ghost) - var/list/possible_keys = list() + var/list/possible_players = list() for(var/key in GLOB.mafia_signup) if(GLOB.directory[key]) var/client/C = GLOB.directory[key] if(isobserver(C.mob)) - possible_keys += key + possible_players += key continue GLOB.mafia_signup -= key //not valid to play when we checked so remove them from signups - //If we're not over capacity and don't need to notify anyone of their exclusion, return early. - if(length(possible_keys) < max_players) - return filtered_keys + for(var/obj/item/modular_computer/pda/pdas as anything in GLOB.pda_mafia_signup) + possible_players += pdas //if there were too many players, still start but only make filtered keys as big as it needs to be (cut excess) //also removes people who do get into final player list from the signup so they have to sign up again when game ends for(var/i in 1 to max_players) - var/chosen_key = pick_n_take(possible_keys) - filtered_keys += chosen_key - GLOB.mafia_signup -= chosen_key + if(!length(possible_players)) + break + var/chosen_key = pick_n_take(possible_players) + filtered_keys_and_pdas += chosen_key + if(chosen_key in GLOB.pda_mafia_signup) + GLOB.pda_mafia_signup -= chosen_key + else if(chosen_key in GLOB.mafia_signup) + GLOB.mafia_signup -= chosen_key //small message about not getting into this game for clarity on why they didn't get in - for(var/unpicked in possible_keys) + for(var/unpicked in possible_players) + if(!(unpicked in GLOB.mafia_signup)) + continue var/client/unpicked_client = GLOB.directory[unpicked] to_chat(unpicked_client, span_danger("Sorry, the starting mafia game has too many players and you were not picked.")) to_chat(unpicked_client, span_warning("You're still signed up, getting messages from the current round, and have another chance to join when the one starting now finishes.")) - return filtered_keys + return filtered_keys_and_pdas /** * Called when someone signs up, and sees if there are enough people in the signup list to begin. @@ -1073,6 +819,7 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) * If a disconnected player gets a non-ghost mob and reconnects, they will be first put back into mafia_signup then filtered by that. */ /datum/mafia_controller/proc/check_signups() +#ifndef UNIT_TESTS for(var/bad_key in GLOB.mafia_bad_signup) if(GLOB.directory[bad_key])//they have reconnected if we can search their key and get a client GLOB.mafia_bad_signup -= bad_key @@ -1086,6 +833,7 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) if(!isobserver(C.mob)) //they are back to playing the game, remove them from the signups GLOB.mafia_signup -= key +#endif /datum/action/innate/mafia_panel name = "Mafia Panel" @@ -1099,6 +847,10 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) . = ..() controller_panel = controller +/datum/action/innate/mafia_panel/Destroy() + . = ..() + controller_panel = null + /datum/action/innate/mafia_panel/Activate() controller_panel.ui_interact(owner) diff --git a/code/modules/mafia/controller_ui.dm b/code/modules/mafia/controller_ui.dm new file mode 100644 index 00000000000000..578555d21f42d8 --- /dev/null +++ b/code/modules/mafia/controller_ui.dm @@ -0,0 +1,269 @@ +// 'user' can be a modPC, hence why it's pathed to the atom +/datum/mafia_controller/ui_static_data(atom/user) + var/list/data = list() + + if(usr?.client?.holder) + data["admin_controls"] = TRUE //show admin buttons to start/setup/stop + data["is_observer"] = isobserver(user) + data["all_roles"] = current_setup_text + + if(phase == MAFIA_PHASE_SETUP) + return data + + var/datum/mafia_role/user_role = get_role_player(user) + if(user_role) + data["roleinfo"] = list( + "role" = user_role.name, + "desc" = user_role.desc, + "hud_icon" = user_role.hud_icon, + "revealed_icon" = user_role.revealed_icon, + ) + + return data + +// 'user' can be a modPC, hence why it's pathed to the atom +/datum/mafia_controller/ui_data(atom/user) + var/list/data = list() + + data["phase"] = phase + if(turn) + data["turn"] = " - Day [turn]" + + if(phase == MAFIA_PHASE_JUDGEMENT) + data["person_voted_up_ref"] = REF(on_trial) + if(phase == MAFIA_PHASE_SETUP) + data["lobbydata"] = list() + for(var/key in GLOB.mafia_signup + GLOB.mafia_bad_signup + GLOB.pda_mafia_signup) + var/list/lobby_member = list() + lobby_member["name"] = key + lobby_member["status"] = (key in GLOB.mafia_bad_signup) ? "Disconnected" : "Ready" + data["lobbydata"] += list(lobby_member) + return data + + data["timeleft"] = next_phase_timer ? timeleft(next_phase_timer) : 0 + + var/datum/mafia_role/user_role = get_role_player(user) + + if(user_role) + data["user_notes"] = user_role.written_notes + data["player_voted_up"] = (user_role == on_trial) + var/list/ui_messages = list() + for(var/i = user_role.role_messages.len to 1 step -1) + ui_messages.Add(list(list( + "msg" = user_role.role_messages[i], + ))) + data["messages"] = ui_messages + + data["players"] = list() + for(var/datum/mafia_role/role as anything in all_roles) + var/list/player_info = list() + player_info["name"] = role.body.real_name + player_info["ref"] = REF(role) + player_info["alive"] = role.game_status == MAFIA_ALIVE + player_info["role_revealed"] = FALSE + if(role.role_flags & ROLE_REVEALED) + player_info["role_revealed"] = role.name + player_info["possible_actions"] = list() + + if(user_role) //not observer + player_info["is_you"] = (role.body.real_name == user_role.body.real_name) + for(var/datum/mafia_ability/action as anything in user_role.role_unique_actions) + if(action.validate_action_target(src, potential_target = role, silent = TRUE)) + player_info["possible_actions"] += list(list("name" = action, "ref" = REF(action))) + + data["players"] += list(player_info) + + return data + +/datum/mafia_controller/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/mafia), + ) + +/datum/mafia_controller/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + var/datum/mafia_role/user_role = get_role_player(usr, ui) + var/obj/item/modular_computer/modpc = ui.src_object + if(!istype(modpc)) + modpc = null + //Admin actions + if(ui.user.client.holder) + switch(action) + if("new_game") + if(phase == MAFIA_PHASE_SETUP) + return + basic_setup() + if("nuke") + qdel(src) + if("next_phase") + if(phase == MAFIA_PHASE_SETUP) + return + var/datum/timedevent/timer = SStimer.timer_id_dict[next_phase_timer] + if(!timer.spent) + var/datum/callback/tc = timer.callBack + deltimer(next_phase_timer) + tc.InvokeAsync() + return TRUE + if("players_home") + var/list/failed = list() + for(var/datum/mafia_role/player in all_roles) + if(!player.body) + failed += player + continue + player.body.forceMove(get_turf(player.assigned_landmark)) + if(failed.len) + to_chat(usr, "List of players who no longer had a body (if you see this, the game is runtiming anyway so just hit \"New Game\" to end it)") + for(var/datum/mafia_role/fail as anything in failed) + to_chat(usr, fail.player_key || fail.player_pda) + if("debug_setup") + var/list/debug_setup = list() + var/list/rolelist_dict = list("CANCEL", "FINISH") + GLOB.mafia_roles_by_name + var/done = FALSE + + while(!done) + to_chat(usr, "You have a total player count of [assoc_value_sum(debug_setup)] in this setup.") + var/chosen_role_name = tgui_input_list(usr, "Select a role!", "Custom Setup Creation", rolelist_dict) + if(!chosen_role_name) + return + switch(chosen_role_name) + if("CANCEL") + done = TRUE + return + if("FINISH") + done = TRUE + break + else + var/found_path = rolelist_dict[chosen_role_name] + var/role_count = tgui_input_number(usr, "How many? Zero to cancel.", "Custom Setup Creation", 0, 12) + if(role_count > 0) + debug_setup[found_path] = role_count + custom_setup = debug_setup + early_start = TRUE + try_autostart()//don't worry, this fails if there's a game in progress + if("cancel_setup") + custom_setup = list() + if("start_now") + forced_setup() + + switch(action) //both living and dead + if("mf_lookup") + var/role_lookup = params["role_name"] + var/datum/mafia_role/helper + for(var/datum/mafia_role/role as anything in all_roles) + if(role_lookup == role.name) + helper = role + break + helper.show_help(usr) + + if(!user_role)//just the dead + switch(action) + if("mf_signup") + if(signup_mafia(usr, ui.user.client, modpc)) + return TRUE + if("vote_to_start") + var/client/ghost_client = ui.user.client + if(phase != MAFIA_PHASE_SETUP) + to_chat(usr, span_notice("You cannot vote to start while a game is underway!")) + return + if(isnull(modpc)) + if(!GLOB.mafia_signup[ghost_client.ckey]) + to_chat(usr, span_notice("You must be signed up for this game to vote!")) + return + if(GLOB.mafia_early_votes[ghost_client.ckey]) + GLOB.mafia_early_votes -= ghost_client.ckey + to_chat(usr, span_notice("You are no longer voting to start the game early.")) + else + GLOB.mafia_early_votes[ghost_client.ckey] = ghost_client + to_chat(usr, span_notice("You vote to start the game early ([length(GLOB.mafia_early_votes)] out of [max(round(length(GLOB.mafia_signup + GLOB.pda_mafia_signup) / 2), round(MAFIA_MIN_PLAYER_COUNT / 2))]).")) + if(check_start_votes()) //See if we have enough votes to start + forced_setup() + else + if(!GLOB.pda_mafia_signup[modpc]) + to_chat(usr, span_notice("You must be signed up for this game to vote!")) + return + if(GLOB.mafia_early_votes[modpc]) + GLOB.mafia_early_votes -= modpc + to_chat(usr, span_notice("You are no longer voting to start the game early.")) + else + GLOB.mafia_early_votes[modpc] = modpc + to_chat(usr, span_notice("You vote to start the game early ([length(GLOB.mafia_early_votes)] out of [max(round(length(GLOB.mafia_signup + GLOB.pda_mafia_signup) / 2), round(MAFIA_MIN_PLAYER_COUNT / 2))]).")) + if(check_start_votes()) //See if we have enough votes to start + forced_setup() + return TRUE + + if(user_role && user_role.game_status == MAFIA_DEAD) + return + + //User actions (just living) + switch(action) + if("change_notes") + if(user_role.game_status == MAFIA_DEAD) + return TRUE + user_role.written_notes = sanitize_text(params["new_notes"]) + user_role.send_message_to_player("notes saved", balloon_alert = TRUE) + return TRUE + if("send_message_to_chat") + if(user_role.game_status == MAFIA_DEAD) + return TRUE + var/message_said = sanitize_text(params["message"]) + user_role.body.say(message_said, forced = "mafia chat (sent by [ui.user.client])") + return TRUE + if("send_notes_to_chat") + if(user_role.game_status == MAFIA_DEAD || !user_role.written_notes) + return TRUE + if(phase == MAFIA_PHASE_NIGHT) + return TRUE + if(!COOLDOWN_FINISHED(user_role, note_chat_sending_cooldown)) + return FALSE + COOLDOWN_START(user_role, note_chat_sending_cooldown, MAFIA_NOTE_SENDING_COOLDOWN) + user_role.body.say("[user_role.written_notes]", forced = "mafia notes sending") + return TRUE + if("perform_action") + var/datum/mafia_role/target = locate(params["target"]) in all_roles + if(!istype(target)) + return + var/datum/mafia_ability/used_action = locate(params["action_ref"]) in user_role.role_unique_actions + if(!used_action) + return + switch(phase) + if(MAFIA_PHASE_DAY, MAFIA_PHASE_VOTING) + used_action.using_ability = TRUE + used_action.perform_action_target(src, target) + if(MAFIA_PHASE_NIGHT) + used_action.set_target(src, target) + return TRUE + + if(user_role != on_trial) + switch(action) + if("vote_abstain") + if(phase != MAFIA_PHASE_JUDGEMENT || (user_role in judgement_abstain_votes)) + return + user_role.send_message_to_player("You have decided to abstain.") + judgement_innocent_votes -= user_role + judgement_guilty_votes -= user_role + judgement_abstain_votes += user_role + if("vote_innocent") + if(phase != MAFIA_PHASE_JUDGEMENT || (user_role in judgement_innocent_votes)) + return + user_role.send_message_to_player("Your vote on [on_trial.body.real_name] submitted as INNOCENT!") + judgement_abstain_votes -= user_role//no fakers, and... + judgement_guilty_votes -= user_role//no radical centrism + judgement_innocent_votes += user_role + if("vote_guilty") + if(phase != MAFIA_PHASE_JUDGEMENT || (user_role in judgement_guilty_votes)) + return + user_role.send_message_to_player("Your vote on [on_trial.body.real_name] submitted as GUILTY!") + judgement_abstain_votes -= user_role//no fakers, and... + judgement_innocent_votes -= user_role//no radical centrism + judgement_guilty_votes += user_role + +/datum/mafia_controller/ui_state(mob/user) + return GLOB.always_state + +/datum/mafia_controller/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, null) + if(!ui) + ui = new(user, src, "MafiaPanel") + ui.open() diff --git a/code/modules/mafia/map_pieces.dm b/code/modules/mafia/map_pieces.dm index 0d27d6cd1b5ecf..2d62126466aff9 100644 --- a/code/modules/mafia/map_pieces.dm +++ b/code/modules/mafia/map_pieces.dm @@ -28,48 +28,65 @@ /datum/map_template/mafia should_place_on_top = FALSE + ///The map suffix to put onto the mappath. + var/map_suffix ///A brief background tidbit var/description = "" ///What costume will this map force players to start with? var/custom_outfit +/datum/map_template/mafia/New(path = null, rename = null, cache = FALSE) + path = "_maps/map_files/Mafia/" + map_suffix + return ..() + +//we only have one map in unit tests for consistency. +#ifdef UNIT_TESTS +/datum/map_template/mafia/unit_test + name = "Mafia Unit Test" + description = "A map designed specifically for Unit Testing to ensure the game runs properly." + map_suffix = "mafia_unit_test.dmm" + +#else + /datum/map_template/mafia/summerball name = "Summerball 2020" description = "The original, the OG. The 2020 Summer ball was where mafia came from, with this map." - mappath = "_maps/map_files/Mafia/mafia_ball.dmm" - -/datum/map_template/mafia/syndicate - name = "Syndicate Megastation" - description = "Yes, it's a very confusing day at the Megastation. Will the syndicate conflict resolution operatives succeed?" - mappath = "_maps/map_files/Mafia/mafia_syndie.dmm" - custom_outfit = /datum/outfit/mafia/syndie - -/datum/map_template/mafia/lavaland - name = "Lavaland Excursion" - description = "The station has no idea what's going down on lavaland right now, we got changelings... traitors, and worst of all... lawyers roleblocking you every night." - mappath = "_maps/map_files/Mafia/mafia_lavaland.dmm" - custom_outfit = /datum/outfit/mafia/lavaland + map_suffix = "mafia_ball.dmm" /datum/map_template/mafia/ufo name = "Alien Mothership" description = "The haunted ghost UFO tour has gone south and now it's up to our fine townies and scare seekers to kill the actual real alien changelings..." - mappath = "_maps/map_files/Mafia/mafia_ayylmao.dmm" + map_suffix = "mafia_ayylmao.dmm" custom_outfit = /datum/outfit/mafia/abductee /datum/map_template/mafia/spider_clan name = "Spider Clan Kidnapping" description = "New and improved spider clan kidnappings are a lot less boring and have a lot more lynching. Damn westaboos!" - mappath = "_maps/map_files/Mafia/mafia_spiderclan.dmm" + map_suffix = "mafia_spiderclan.dmm" custom_outfit = /datum/outfit/mafia/ninja -/datum/map_template/mafia/snowy - name = "Snowdin" - description = "Based off of the icy moon map of the same name, the guy who reworked it did a good enough job to recieve a derivative piece of work based on it. Cool!" - mappath = "_maps/map_files/Mafia/mafia_snow.dmm" - custom_outfit = /datum/outfit/mafia/snowy - /datum/map_template/mafia/gothic name = "Vampire's Castle" description = "Vampires and changelings clash to find out who's the superior bloodsucking monster in this creepy castle map." - mappath = "_maps/map_files/Mafia/mafia_gothic.dmm" + map_suffix = "mafia_gothic.dmm" custom_outfit = /datum/outfit/mafia/gothic + +/datum/map_template/mafia/syndicate + name = "Syndicate Megastation" + description = "Yes, it's a very confusing day at the Megastation. Will the syndicate conflict resolution operatives succeed?" + map_suffix = "mafia_syndie.dmm" + custom_outfit = /datum/outfit/mafia/syndie + +/datum/map_template/mafia/snowy + name = "Snowdin" + description = "Based off of the icy moon map of the same name, the guy who reworked it did a good enough job to receive a derivative piece of work based on it. Cool!" + map_suffix = "mafia_snow.dmm" + custom_outfit = /datum/outfit/mafia/snowy + +/datum/map_template/mafia/lavaland + name = "Lavaland Excursion" + description = "The station has no idea what's going down on lavaland right now, we got changelings... traitors, and worst of all... lawyers roleblocking you every night." + map_suffix = "mafia_lavaland.dmm" + custom_outfit = /datum/outfit/mafia/lavaland + +#endif diff --git a/code/modules/mafia/outfits.dm b/code/modules/mafia/outfits.dm index 0edb796212b602..66585d52943cbb 100644 --- a/code/modules/mafia/outfits.dm +++ b/code/modules/mafia/outfits.dm @@ -14,7 +14,7 @@ shoes = /obj/item/clothing/shoes/combat /datum/outfit/mafia/syndie - name = "Mafia Syndicate" + name = "Mafia Symphionia" uniform = /obj/item/clothing/under/syndicate shoes = /obj/item/clothing/shoes/combat gloves = /obj/item/clothing/gloves/color/black @@ -127,7 +127,7 @@ shoes = /obj/item/clothing/shoes/jackboots suit = /obj/item/clothing/suit/armor/vest/warden/alt gloves = /obj/item/clothing/gloves/color/black - head = /obj/item/clothing/head/hats/warden + head = /obj/item/clothing/head/hats/warden/red glasses = /obj/item/clothing/glasses/hud/security/sunglasses //mafia diff --git a/code/modules/mafia/roles/neutral/neutral_chaos.dm b/code/modules/mafia/roles/neutral/neutral_chaos.dm index e4bd5ca0f17f93..de2c7fc4833adb 100644 --- a/code/modules/mafia/roles/neutral/neutral_chaos.dm +++ b/code/modules/mafia/roles/neutral/neutral_chaos.dm @@ -1,6 +1,6 @@ /datum/mafia_role/obsessed name = "Obsessed" - desc = "You're completely lost in your own mind. You win by lynching your obsession before you get killed in this mess. Obsession assigned on the first night!" + desc = "Lynch your obsession before you get killed at all costs!" win_condition = "lynch their obsession." revealed_outfit = /datum/outfit/mafia/obsessed team = MAFIA_TEAM_SOLO @@ -15,20 +15,26 @@ /datum/mafia_role/obsessed/New(datum/mafia_controller/game) //note: obsession is always a townie . = ..() + desc = initial(desc) + " Obsessions are assigned on the first night." RegisterSignal(game, COMSIG_MAFIA_SUNDOWN, PROC_REF(find_obsession)) /datum/mafia_role/obsessed/proc/find_obsession(datum/mafia_controller/game) SIGNAL_HANDLER - var/list/all_roles_shuffle = shuffle(game.living_roles) + var/list/all_roles_shuffle = shuffle(game.living_roles) - src for(var/datum/mafia_role/possible as anything in all_roles_shuffle) if(possible.team == MAFIA_TEAM_TOWN) obsession = possible break if(!obsession) obsession = pick(all_roles_shuffle) //okay no town just pick anyone here - //if you still don't have an obsession you're playing a single player game like i can't help your dumb ass - to_chat(body, span_userdanger("Your obsession is [obsession.body.real_name]! Get them lynched to win!")) + desc = initial(desc) + " Target: [obsession.body.real_name]" + var/obj/item/modular_computer/modpc = player_pda + if(modpc) + modpc.update_static_data_for_all_viewers() + else + game.update_static_data(body) + send_message_to_player(span_userdanger("Your obsession is [obsession.body.real_name]! Get them lynched to win!")) RegisterSignal(obsession, COMSIG_MAFIA_ON_KILL, PROC_REF(check_victory)) UnregisterSignal(game, COMSIG_MAFIA_SUNDOWN) diff --git a/code/modules/mafia/roles/roles.dm b/code/modules/mafia/roles/roles.dm index efe0d25c5b9882..ab1a1cc0e454b7 100644 --- a/code/modules/mafia/roles/roles.dm +++ b/code/modules/mafia/roles/roles.dm @@ -27,6 +27,9 @@ var/mob/living/carbon/human/body var/obj/effect/landmark/mafia/assigned_landmark + ///The Mafia innate action panel that allows players to view the game's state. + var/datum/action/innate/mafia_panel/mafia_panel + ///how many votes submitted when you vote. used in voting and deciding victory. var/vote_power = 1 ///what they get equipped with when they are revealed @@ -49,21 +52,29 @@ /datum/mafia_role/New(datum/mafia_controller/game) . = ..() + mafia_panel = new(null, game) for(var/datum/mafia_ability/abilities as anything in role_unique_actions + /datum/mafia_ability/voting) role_unique_actions += new abilities(game, src) role_unique_actions -= abilities -/datum/mafia_role/Destroy(force, ...) +/datum/mafia_role/Destroy(force) UnregisterSignal(body, COMSIG_MOB_SAY) QDEL_NULL(mafia_alert) - QDEL_NULL(body) + QDEL_NULL(mafia_panel) QDEL_LIST(role_unique_actions) - role_messages = null + //we null these instead of qdel because Mafia controller's mapdeleter deletes it all. + assigned_landmark = null + body = null + role_messages.Cut() return ..() /datum/mafia_role/proc/register_body(mob/living/carbon/human/new_body) + if(body) + UnregisterSignal(new_body, COMSIG_MOB_SAY) + mafia_panel.Remove(body) body = new_body RegisterSignal(new_body, COMSIG_MOB_SAY, PROC_REF(handle_speech)) + mafia_panel.Grant(new_body) /** * send_message_to_player @@ -118,14 +129,15 @@ * * Does not count as visiting, see visit proc. */ -/datum/mafia_role/proc/kill(datum/mafia_controller/game, datum/mafia_role/attacker, lynch=FALSE) +/datum/mafia_role/proc/kill(datum/mafia_controller/game, datum/mafia_role/attacker, lynch = FALSE) + if(game_status == MAFIA_DEAD) + return FALSE if(attacker && (attacker.role_flags & ROLE_ROLEBLOCKED)) return FALSE if(SEND_SIGNAL(src, COMSIG_MAFIA_ON_KILL, game, attacker, lynch) & MAFIA_PREVENT_KILL) return FALSE - if(game_status != MAFIA_DEAD) - game_status = MAFIA_DEAD - body.death() + game_status = MAFIA_DEAD + body.death() if(lynch) reveal_role(game, verbose = TRUE) game.living_roles -= src diff --git a/code/modules/mapfluff/centcom/nuke_ops.dm b/code/modules/mapfluff/centcom/nuke_ops.dm index 02bf8a50f8e7ef..589ceba83754bf 100644 --- a/code/modules/mapfluff/centcom/nuke_ops.dm +++ b/code/modules/mapfluff/centcom/nuke_ops.dm @@ -1,18 +1,18 @@ //keycards /obj/item/keycard/syndicate_bomb - name = "Syndicate Ordnance Laboratory Access Card" + name = "Symphionia Ordnance Laboratory Access Card" desc = "A red keycard with an image of a bomb. Using this will allow you to gain access to the Ordnance Lab in Firebase Balthazord." color = "#9c0e26" puzzle_id = "syndicate_bomb" /obj/item/keycard/syndicate_bio - name = "Syndicate Bio-Weapon Laboratory Access Card" + name = "Symphionia Bio-Weapon Laboratory Access Card" desc = "A red keycard with a biohazard symbol. Using this will allow you to gain access to the Bio-Weapon Lab in Firebase Balthazord." color = "#9c0e26" puzzle_id = "syndicate_bio" /obj/item/keycard/syndicate_chem - name = "Syndicate Chemical Plant Access Card" + name = "Symphionia Chemical Plant Access Card" desc = "A red keycard with an image of a beaker. Using this will allow you to gain access to the Chemical Manufacturing Plant in Firebase Balthazord." color = "#9c0e26" puzzle_id = "syndicate_chem" @@ -25,17 +25,17 @@ //keycard doors /obj/machinery/door/puzzle/keycard/syndicate_bomb - name = "Syndicate Ordinance Laboratory" + name = "Symphionia Ordinance Laboratory" desc = "Locked. Looks like you'll need a special access key to get in." puzzle_id = "syndicate_bomb" /obj/machinery/door/puzzle/keycard/syndicate_bio - name = "Syndicate Bio-Weapon Laboratory" + name = "Symphionia Bio-Weapon Laboratory" desc = "Locked. Looks like you'll need a special access key to get in." puzzle_id = "syndicate_bio" /obj/machinery/door/puzzle/keycard/syndicate_chem - name = "Syndicate Chemical Manufacturing Plant" + name = "Symphionia Chemical Manufacturing Plant" desc = "Locked. Looks like you'll need a special access key to get in" puzzle_id = "syndicate_chem" diff --git a/code/modules/mapfluff/ruins/generic.dm b/code/modules/mapfluff/ruins/generic.dm new file mode 100644 index 00000000000000..eecc4d1e2bf865 --- /dev/null +++ b/code/modules/mapfluff/ruins/generic.dm @@ -0,0 +1,4 @@ +/// Generic maps with several available biomes. +/obj/modular_map_root/generic + config_file = "strings/modular_maps/generic.toml" + diff --git a/code/modules/mapfluff/ruins/icemoonruin_code/hotsprings.dm b/code/modules/mapfluff/ruins/icemoonruin_code/hotsprings.dm index f0368ba8c749b9..1b4f5644235449 100644 --- a/code/modules/mapfluff/ruins/icemoonruin_code/hotsprings.dm +++ b/code/modules/mapfluff/ruins/icemoonruin_code/hotsprings.dm @@ -14,7 +14,7 @@ baseturfs = /turf/open/water/cursed_spring planetary_atmos = TRUE initial_gas_mix = ICEMOON_DEFAULT_ATMOS -/* SKYRAT EDIT REMOVAL +/* NOVA EDIT REMOVAL /turf/open/water/cursed_spring/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) . = ..() if(!isliving(arrived)) diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm b/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm index aa201292f72a23..f31b3e37eb2182 100644 --- a/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm +++ b/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm @@ -107,7 +107,7 @@ /obj/structure/sink/oil_well/attackby(obj/item/O, mob/living/user, params) flick("puddle-oil-splash",src) - if(O.tool_behaviour == TOOL_SHOVEL && !(flags_1 & NODECONSTRUCT_1)) //attempt to deconstruct the puddle with a shovel + if(O.tool_behaviour == TOOL_SHOVEL && !(obj_flags & NO_DECONSTRUCTION)) //attempt to deconstruct the puddle with a shovel to_chat(user, "You fill in the oil well with soil.") O.play_tool_sound(src) deconstruct() @@ -151,6 +151,8 @@ can_weld_shut = FALSE cutting_tool = null paint_jobs = null + elevation = 4 //It's a small mound. + elevation_open = 0 /// will this grave give you nightmares when opened var/lead_tomb = FALSE @@ -322,7 +324,7 @@ /obj/item/paper/crumpled/muddy/fluff/elephant_graveyard name = "posted warning" desc = "It seems to be smudged with mud and... oil?" - default_raw_text = "TO WHOM IT MAY CONCERN

This area is property of the Nanotrasen Mining Division.

Trespassing in this area is illegal, highly dangerous, and subject to several NDAs.

Please turn back now, under intergalactic law section 48-R." + default_raw_text = "TO WHOM IT MAY CONCERN

This area is property of the Symphionia Mining Division.

Trespassing in this area is illegal, highly dangerous, and subject to several NDAs.

Please turn back now, under intergalactic law section 48-R." /obj/item/paper/crumpled/muddy/fluff/elephant_graveyard/rnd_notes name = "Research Findings: Day 26" @@ -337,8 +339,8 @@ /obj/item/paper/fluff/ruins/elephant_graveyard/hypothesis name = "research document" - desc = "Standard Nanotrasen typeface for important research documents." - default_raw_text = "Day 9: Tenative Conclusions

While the area appears to be of significant cultural importance to the lizard race, outside of some sparce contact with native wildlife, we're yet to find any exact reasoning for the nature of this phenomenon. It seems that organic life is communally drawn to this planet as though it functions as a final resting place for intelligent life. As per company guidelines, this site shall be given the following classification: 'LZ-0271 - Elephant Graveyard'

Compiled list of Artifact findings (Currently Sent Offsite)
Cultist Blade Fragments: x8
Brass Multiplicative Ore Sample: x105
Syndicate Revolutionary Leader Implant (Broken) x1
Extinct Cortical Borer Tissue Sample x1
Space Carp Fossil x3" + desc = "Standard Symphionia typeface for important research documents." + default_raw_text = "Day 9: Tenative Conclusions

While the area appears to be of significant cultural importance to the lizard race, outside of some sparce contact with native wildlife, we're yet to find any exact reasoning for the nature of this phenomenon. It seems that organic life is communally drawn to this planet as though it functions as a final resting place for intelligent life. As per company guidelines, this site shall be given the following classification: 'LZ-0271 - Elephant Graveyard'

Compiled list of Artifact findings (Currently Sent Offsite)
Cultist Blade Fragments: x8
Brass Multiplicative Ore Sample: x105
Symphionia Revolutionary Leader Implant (Broken) x1
Extinct Cortical Borer Tissue Sample x1
Space Carp Fossil x3" /obj/item/paper/fluff/ruins/elephant_graveyard/final_message name = "important-looking note" diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/puzzle.dm b/code/modules/mapfluff/ruins/lavalandruin_code/puzzle.dm index 0e5437b9fd4092..1ec15d01345ed7 100644 --- a/code/modules/mapfluff/ruins/lavalandruin_code/puzzle.dm +++ b/code/modules/mapfluff/ruins/lavalandruin_code/puzzle.dm @@ -173,7 +173,7 @@ //Setup random empty tile empty_tile_id = pick_n_take(left_ids) var/turf/empty_tile_turf = get_turf_for_id(empty_tile_id) - empty_tile_turf.PlaceOnTop(floor_type,null,CHANGETURF_INHERIT_AIR) + empty_tile_turf.place_on_top(floor_type, CHANGETURF_INHERIT_AIR) var/mutable_appearance/MA = new(puzzle_pieces["[empty_tile_id]"]) MA.layer = empty_tile_turf.layer + 0.1 empty_tile_turf.add_overlay(MA) @@ -182,7 +182,7 @@ var/list/empty_spots = left_ids.Copy() for(var/spot_id in empty_spots) var/turf/T = get_turf_for_id(spot_id) - T = T.PlaceOnTop(floor_type,null,CHANGETURF_INHERIT_AIR) + T = T.place_on_top(floor_type, CHANGETURF_INHERIT_AIR) var/obj/structure/puzzle_element/E = new element_type(T) elements += E var/chosen_id = pick_n_take(left_ids) diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm b/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm index 26fdfcbb90bb0f..619ebb402b4f21 100644 --- a/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm +++ b/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm @@ -46,13 +46,13 @@ desc = "Your benefactors conveniently neglected to mention it's already assembled." anchored = TRUE radio_key = /obj/item/encryptionkey/syndicate - emergency_channel = "Syndicate" - warning_channel = "Syndicate" + emergency_channel = "Symphionia" + warning_channel = "Symphionia" include_in_cims = FALSE /obj/machinery/power/supermatter_crystal/shard/syndicate/attackby(obj/item/item, mob/living/user, params) if(istype(item, /obj/item/scalpel/supermatter)) //You can already yoink the docs as a free objective win, another would be just gross - to_chat(user, span_danger("This shard's already in Syndicate custody, taking it again could cause more harm than good.")) + to_chat(user, span_danger("This shard's already in Symphionia custody, taking it again could cause more harm than good.")) return else . = ..() diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/watcher_grave.dm b/code/modules/mapfluff/ruins/lavalandruin_code/watcher_grave.dm index 75ac48c2467c4a..f3b321b88b2230 100644 --- a/code/modules/mapfluff/ruins/lavalandruin_code/watcher_grave.dm +++ b/code/modules/mapfluff/ruins/lavalandruin_code/watcher_grave.dm @@ -143,7 +143,6 @@ icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' icon_state = "watcher_baby" layer = EDGED_TURF_LAYER // Don't render under lightbulbs - plane = GAME_PLANE_UPPER mouse_opacity = MOUSE_OPACITY_TRANSPARENT pixel_y = 22 alpha = 0 diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/ash_walker_den.dm b/code/modules/mapfluff/ruins/objects_and_mobs/ash_walker_den.dm index 6f08be00e5d442..c8b491e5301dd1 100644 --- a/code/modules/mapfluff/ruins/objects_and_mobs/ash_walker_den.dm +++ b/code/modules/mapfluff/ruins/objects_and_mobs/ash_walker_den.dm @@ -47,44 +47,45 @@ //PLEASE VIEW SKYRAT ASHWALKER MODULE FOR OVERRIDE /obj/structure/lavaland/ash_walker/proc/consume() - for(var/mob/living/H in view(src, 1)) //Only for corpse right next to/on same tile - if(H.stat) - for(var/obj/item/W in H) - if(!H.dropItemToGround(W)) - qdel(W) - if(issilicon(H)) //no advantage to sacrificing borgs... - H.investigate_log("has been gibbed by the necropolis tendril.", INVESTIGATE_DEATHS) - visible_message(span_notice("Serrated tendrils eagerly pull [H] apart, but find nothing of interest.")) + for(var/mob/living/offeredmob in view(src, 1)) //Only for corpse right next to/on same tile + if(offeredmob.loc == src) + continue //Ashwalker Revive in Progress... + if(offeredmob.stat) + offeredmob.unequip_everything() + + if(issilicon(offeredmob)) //no advantage to sacrificing borgs... + offeredmob.investigate_log("has been gibbed by the necropolis tendril.", INVESTIGATE_DEATHS) + visible_message(span_notice("Serrated tendrils eagerly pull [offeredmob] apart, but find nothing of interest.")) + offeredmob.gib() return - if(H.mind?.has_antag_datum(/datum/antagonist/ashwalker) && (H.ckey || H.get_ghost(FALSE, TRUE))) //special interactions for dead lava lizards with ghosts attached - visible_message(span_warning("Serrated tendrils carefully pull [H] to [src], absorbing the body and creating it anew.")) + if(offeredmob.mind?.has_antag_datum(/datum/antagonist/ashwalker) && (offeredmob.ckey || offeredmob.get_ghost(FALSE, TRUE))) //special interactions for dead lava lizards with ghosts attached + visible_message(span_warning("Serrated tendrils carefully pull [offeredmob] to [src], absorbing the body and creating it anew.")) var/datum/mind/deadmind - if(H.ckey) - deadmind = H + if(offeredmob.ckey) + deadmind = offeredmob else - deadmind = H.get_ghost(FALSE, TRUE) + deadmind = offeredmob.get_ghost(FALSE, TRUE) to_chat(deadmind, "Your body has been returned to the nest. You are being remade anew, and will awaken shortly.
Your memories will remain intact in your new body, as your soul is being salvaged") SEND_SOUND(deadmind, sound('sound/magic/enter_blood.ogg',volume=100)) - addtimer(CALLBACK(src, PROC_REF(remake_walker), H.mind, H.real_name), 20 SECONDS) - new /obj/effect/gibspawner/generic(get_turf(H)) - qdel(H) + addtimer(CALLBACK(src, PROC_REF(remake_walker), offeredmob), 20 SECONDS) + offeredmob.forceMove(src) return - if(ismegafauna(H)) + if(ismegafauna(offeredmob)) meat_counter += 20 else meat_counter++ - visible_message(span_warning("Serrated tendrils eagerly pull [H] to [src], tearing the body apart as its blood seeps over the eggs.")) + visible_message(span_warning("Serrated tendrils eagerly pull [offeredmob] to [src], tearing the body apart as its blood seeps over the eggs.")) playsound(get_turf(src),'sound/magic/demon_consume.ogg', 100, TRUE) - var/deliverykey = H.fingerprintslast //ckey of whoever brought the body + var/deliverykey = offeredmob.fingerprintslast //ckey of whoever brought the body var/mob/living/deliverymob = get_mob_by_key(deliverykey) //mob of said ckey //there is a 40% chance that the Lava Lizard unlocks their respawn with each sacrifice if(deliverymob && (deliverymob.mind?.has_antag_datum(/datum/antagonist/ashwalker)) && (deliverykey in ashies.players_spawned) && (prob(40))) to_chat(deliverymob, span_warning("The Necropolis is pleased with your sacrifice. You feel confident your existence after death is secure.")) ashies.players_spawned -= deliverykey - H.investigate_log("has been gibbed by the necropolis tendril.", INVESTIGATE_DEATHS) - H.gib(DROP_ALL_REMAINS) + offeredmob.investigate_log("has been gibbed by the necropolis tendril.", INVESTIGATE_DEATHS) + offeredmob.gib(DROP_ALL_REMAINS) atom_integrity = min(atom_integrity + max_integrity*0.05,max_integrity)//restores 5% hp of tendril for(var/mob/living/L in view(src, 5)) if(L.mind?.has_antag_datum(/datum/antagonist/ashwalker)) @@ -93,18 +94,20 @@ L.add_mood_event("oogabooga", /datum/mood_event/sacrifice_bad) ashies.sacrifices_made++ -//PLEASE VIEW SKYRAT ASHWALKER MODULE FOR REPLACEMENT -/obj/structure/lavaland/ash_walker/proc/remake_walker(datum/mind/oldmind, oldname) - var/mob/living/carbon/human/M = new /mob/living/carbon/human(get_step(loc, pick(GLOB.alldirs))) - M.set_species(/datum/species/lizard/ashwalker) - M.real_name = oldname - M.underwear = "Nude" - M.update_body() - M.remove_language(/datum/language/common) - oldmind.transfer_to(M) - M.mind.grab_ghost() - to_chat(M, "You have been pulled back from beyond the grave, with a new body and renewed purpose. Glory to the Necropolis!") - playsound(get_turf(M),'sound/magic/exit_blood.ogg', 100, TRUE) +// NOVA EDIT ADDITION - PLEASE VIEW SKYRAT ASHWALKER MODULE FOR REPLACEMENT +/obj/structure/lavaland/ash_walker/proc/remake_walker(mob/living/carbon/oldmob) + var/mob/living/carbon/human/newwalker = new /mob/living/carbon/human(get_step(loc, pick(GLOB.alldirs))) + newwalker.set_species(/datum/species/lizard/ashwalker) + newwalker.real_name = oldmob.real_name + newwalker.undershirt = "Nude" + newwalker.underwear = "Nude" + newwalker.update_body() + newwalker.remove_language(/datum/language/common) + oldmob.mind.transfer_to(newwalker) + newwalker.mind.grab_ghost() + to_chat(newwalker, "You have been pulled back from beyond the grave, with a new body and renewed purpose. Glory to the Necropolis!") + playsound(get_turf(newwalker),'sound/magic/exit_blood.ogg', 100, TRUE) + qdel(oldmob) /obj/structure/lavaland/ash_walker/proc/spawn_mob() if(meat_counter >= ASH_WALKER_SPAWN_THRESHOLD) diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm index 54e167fb255414..6ce6056b477e7d 100644 --- a/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm +++ b/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm @@ -81,7 +81,6 @@ icon = 'icons/effects/96x96.dmi' icon_state = "gate_blocker" layer = EDGED_TURF_LAYER - plane = GAME_PLANE_UPPER pixel_x = -32 pixel_y = -32 mouse_opacity = MOUSE_OPACITY_TRANSPARENT @@ -190,7 +189,12 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate) M.playsound_local(T, null, 100, FALSE, 0, FALSE, pressure_affected = FALSE, sound_to_use = legion_sound) flash_color(M, flash_color = "#FF0000", flash_time = 50) var/mutable_appearance/release_overlay = mutable_appearance('icons/effects/effects.dmi', "legiondoor") - notify_ghosts("Legion has been released in the [get_area(src)]!", source = src, alert_overlay = release_overlay, action = NOTIFY_JUMP, flashwindow = FALSE) + notify_ghosts( + "Legion has been released in the [get_area(src)]!", + source = src, + alert_overlay = release_overlay, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) /obj/effect/decal/necropolis_gate_decal icon = 'icons/effects/96x96.dmi' diff --git a/code/modules/mapfluff/ruins/spaceruin_code/TheDerelict.dm b/code/modules/mapfluff/ruins/spaceruin_code/TheDerelict.dm index 3507cb7d94746c..114a73f3d44622 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/TheDerelict.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/TheDerelict.dm @@ -6,7 +6,7 @@ /obj/item/paper/fluff/ruins/thederelict/syndie_mission name = "Mission Objectives" - default_raw_text = "The Syndicate have cunningly disguised a Syndicate Uplink as your PDA. Simply enter the code \"678 Bravo\" into the ringtone select to unlock its hidden features.

Objective #1. Kill the God damn AI in a fire blast that it rocks the station. Success!
Objective #2. Escape alive. Failed." + default_raw_text = "The Symphionia have cunningly disguised a Symphionia Uplink as your PDA. Simply enter the code \"678 Bravo\" into the ringtone select to unlock its hidden features.

Objective #1. Kill the God damn AI in a fire blast that it rocks the station. Success!
Objective #2. Escape alive. Failed." /obj/item/paper/fluff/ruins/thederelict/nukie_objectives name = "Objectives of a Nuclear Operative" @@ -25,10 +25,10 @@ /obj/machinery/computer/terminal/derelict/bridge icon_screen = "comm" icon_keyboard = "tech_key" - content = list("Central Command Status Summary -- Impending Doom -- Your station is somehow in the middle of hostile territory, in clear view of any enemy of the corporation. Your likelihood to survive is low, \ + content = list("Conglomeration of Colonists Status Summary -- Impending Doom -- Your station is somehow in the middle of hostile territory, in clear view of any enemy of the corporation. Your likelihood to survive is low, \ and station destruction is expected and almost inevitable. Secure any sensitive material and neutralize any enemy you will come across. It is important that you at least try to maintain the station. \ Good luck. -- Special Orders for KC13: Our military presence is inadequate in your sector. We need you to construct BSA-87 Artillery position aboard your station. Base parts are available for shipping via cargo. \ - -Nanotrasen Naval Command -- Identified Shift Divergences: Overflow bureaucracy mistake - It seems for some reason we put out the wrong job-listing for the overflow role this shift...I hope you like captains.") + -Symphionia Naval Command -- Identified Shift Divergences: Overflow bureaucracy mistake - It seems for some reason we put out the wrong job-listing for the overflow role this shift...I hope you like captains.") /obj/machinery/computer/terminal/derelict/cargo content = list("INTER-MAIL - #789 - Cargo Technician I. Miller -> J. Holmes -- Jake, with all due respect, I don't know how you guys can keep this shit up. Robotics has made not one, but THREE AIs, \ @@ -194,7 +194,7 @@ "\[00:28\] But someones got it out for me", "\[00:36\] On the station I may well be called 'Captain'", "\[00:42\] But the title brings with it all the prestige and responsibility of some kind of fucking manchild kindergarten teacher", - "\[00:55\] To think Nanotrasen loves to call this hellhole:", + "\[00:55\] To think Symphionia loves to call this hellhole:", "\[01:03\] A state of the art orbital plasma research facility", "\[01:10\] If I remember correctly though", "\[01:15\] It was all about the plasma", @@ -230,7 +230,7 @@ // 3rd monologue (middle shift) "\[28:03\] I don't know why i'm even recording this...", "\[28:13\] I sure as hell don't need it for myself", - "\[28:25\] Sure, I could upload it with all the evidence and dirt i've found over the years on Nanotrasen", + "\[28:25\] Sure, I could upload it with all the evidence and dirt i've found over the years on Symphionia", "\[28:32\] But what's the point?", "\[28:36\] Who would give a shit other than corporate making me suddenly disappear?", "\[28:47\] I suppose I could send and upload it to the network and let people make their own judgements", diff --git a/code/modules/mapfluff/ruins/spaceruin_code/allamericandiner.dm b/code/modules/mapfluff/ruins/spaceruin_code/allamericandiner.dm index b1a70244795823..ae58b936db4622 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/allamericandiner.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/allamericandiner.dm @@ -1,4 +1,4 @@ // /obj/item/paper/fluff/ruins/allamericandiner name = "Notice of Mothballing" - default_raw_text = "Due to the recent increase in Syndicate raids, The subsequent decrease in customers and the inability of the SCC to defend this subsector against hostile threats. Corporate has decided to mothball this station and wait for the whole situation to calm down. Pack up your stuff, Clean the station the best you can. A shuttle will pick you all up in 14 cycles." + default_raw_text = "Due to the recent increase in Symphionia raids, The subsequent decrease in customers and the inability of the SCC to defend this subsector against hostile threats. Conglomeration has decided to mothball this station and wait for the whole situation to calm down. Pack up your stuff, Clean the station the best you can. A shuttle will pick you all up in 14 cycles." diff --git a/code/modules/mapfluff/ruins/spaceruin_code/caravanambush.dm b/code/modules/mapfluff/ruins/spaceruin_code/caravanambush.dm index d6b2d9ffaa754d..ab4d1ef294c8ff 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/caravanambush.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/caravanambush.dm @@ -98,8 +98,8 @@ y_offset = -6 /obj/machinery/computer/shuttle/caravan/syndicate1 - name = "Syndicate Fighter Shuttle Console" - desc = "Used to control the Syndicate Fighter." + name = "Symphionia Fighter Shuttle Console" + desc = "Used to control the Symphionia Fighter." icon_screen = "syndishuttle" icon_keyboard = "syndie_key" light_color = COLOR_SOFT_RED @@ -109,8 +109,8 @@ possible_destinations = "caravansyndicate1_custom;caravansyndicate1_ambush;caravansyndicate1_listeningpost" /obj/machinery/computer/camera_advanced/shuttle_docker/caravan/syndicate1 - name = "Syndicate Fighter Navigation Computer" - desc = "Used to designate a precise transit location for the Syndicate Fighter." + name = "Symphionia Fighter Navigation Computer" + desc = "Used to designate a precise transit location for the Symphionia Fighter." icon_screen = "syndishuttle" icon_keyboard = "syndie_key" shuttleId = "caravansyndicate1" @@ -122,8 +122,8 @@ y_offset = 0 /obj/machinery/computer/shuttle/caravan/syndicate2 - name = "Syndicate Fighter Shuttle Console" - desc = "Used to control the Syndicate Fighter." + name = "Symphionia Fighter Shuttle Console" + desc = "Used to control the Symphionia Fighter." icon_screen = "syndishuttle" icon_keyboard = "syndie_key" req_access = list(ACCESS_SYNDICATE) @@ -133,8 +133,8 @@ possible_destinations = "caravansyndicate2_custom;caravansyndicate2_ambush;caravansyndicate1_listeningpost" /obj/machinery/computer/camera_advanced/shuttle_docker/caravan/syndicate2 - name = "Syndicate Fighter Navigation Computer" - desc = "Used to designate a precise transit location for the Syndicate Fighter." + name = "Symphionia Fighter Navigation Computer" + desc = "Used to designate a precise transit location for the Symphionia Fighter." icon_screen = "syndishuttle" icon_keyboard = "syndie_key" shuttleId = "caravansyndicate2" @@ -146,8 +146,8 @@ y_offset = 2 /obj/machinery/computer/shuttle/caravan/syndicate3 - name = "Syndicate Drop Ship Console" - desc = "Used to control the Syndicate Drop Ship." + name = "Symphionia Drop Ship Console" + desc = "Used to control the Symphionia Drop Ship." icon_screen = "syndishuttle" icon_keyboard = "syndie_key" req_access = list(ACCESS_SYNDICATE) @@ -157,8 +157,8 @@ possible_destinations = "caravansyndicate3_custom;caravansyndicate3_ambush;caravansyndicate3_listeningpost" /obj/machinery/computer/camera_advanced/shuttle_docker/caravan/syndicate3 - name = "Syndicate Drop Ship Navigation Computer" - desc = "Used to designate a precise transit location for the Syndicate Drop Ship." + name = "Symphionia Drop Ship Navigation Computer" + desc = "Used to designate a precise transit location for the Symphionia Drop Ship." icon_screen = "syndishuttle" icon_keyboard = "syndie_key" shuttleId = "caravansyndicate3" diff --git a/code/modules/mapfluff/ruins/spaceruin_code/clericsden.dm b/code/modules/mapfluff/ruins/spaceruin_code/clericsden.dm index 2ea63245661a6b..56b09ef7f79fa1 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/clericsden.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/clericsden.dm @@ -13,24 +13,3 @@ /obj/item/paper/fluff/ruins/clericsden/warning default_raw_text = "FATHER ODIVALLUS DO NOT GO FORWARD WITH THE RITUAL. THE ASTEROID WE'RE ANCHORED TO IS UNSTABLE, YOU WILL DESTROY THE STATION. I HOPE THIS REACHES YOU IN TIME. FATHER AURELLION." - -/mob/living/simple_animal/hostile/construct/proteon - name = "Proteon" - real_name = "Proteon" - desc = "A weaker construct meant to scour ruins for objects of Nar'Sie's affection. Those barbed claws are no joke." - icon_state = "proteon" - icon_living = "proteon" - maxHealth = 35 - health = 35 - melee_damage_lower = 8 - melee_damage_upper = 10 - retreat_distance = 4 //AI proteons will rapidly move in and out of combat to avoid conflict, but will still target and follow you. - attack_verb_continuous = "pinches" - attack_verb_simple = "pinch" - environment_smash = ENVIRONMENT_SMASH_WALLS - attack_sound = 'sound/weapons/punch2.ogg' - playstyle_string = "You are a Proteon. Your abilities in combat are outmatched by most combat constructs, but you are still fast and nimble. Run metal and supplies, and cooperate with your fellow cultists." - -/mob/living/simple_animal/hostile/construct/proteon/hostile //Style of mob spawned by trapped cult runes in the cleric ruin. - AIStatus = AI_ON - environment_smash = ENVIRONMENT_SMASH_STRUCTURES //standard ai construct behavior, breaks things if it wants, but not walls. diff --git a/code/modules/mapfluff/ruins/spaceruin_code/dangerous_research.dm b/code/modules/mapfluff/ruins/spaceruin_code/dangerous_research.dm index fac38e0a46e068..17b48e4e711967 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/dangerous_research.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/dangerous_research.dm @@ -9,7 +9,7 @@ /obj/item/paper/fluff/ruins/dangerous_research/smith name = "A Traitor's Memo" - default_raw_text = "The Syndicate is up to something strange here; they've hired these people, most totally unaware of their true employers.
I've sent the collected data to Nanotrasen, and I'm going to try to disrupt the test tomorrow, allowing this to continue isn't right.
They're keeping the patient semi-lucid, so some stims should wake him up." + default_raw_text = "The Symphionia is up to something strange here; they've hired these people, most totally unaware of their true employers.
I've sent the collected data to Symphionia, and I'm going to try to disrupt the test tomorrow, allowing this to continue isn't right.
They're keeping the patient semi-lucid, so some stims should wake him up." ///Dream-Of-Beaches Journal /obj/item/paper/fluff/ruins/dangerous_research/beaches_journal_1 name = "Journal of Dreams-Of-Beaches - Day 1" diff --git a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm index 1e39d248f500bd..3cdd4e0ab9598a 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm @@ -8,12 +8,12 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) icon_state = "hilbertshotel" w_class = WEIGHT_CLASS_SMALL resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - //SKYRAT EDIT ADDITION - GHOST HOTEL UPDATE + //NOVA EDIT ADDITION - GHOST HOTEL UPDATE var/list/static/hotel_maps = list("Generic", "Apartment") //standart - hilber's hotel room //apartment - see /datum/map_template/ghost_cafe_rooms var/datum/map_template/ghost_cafe_rooms/ghost_cafe_rooms_apartment - //SKYRAT EDIT END + //NOVA EDIT END var/datum/map_template/hilbertshotel/hotelRoomTemp var/datum/map_template/hilbertshotel/empty/hotelRoomTempEmpty var/datum/map_template/hilbertshotel/lore/hotelRoomTempLore @@ -32,9 +32,9 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) hotelRoomTemp = new() hotelRoomTempEmpty = new() hotelRoomTempLore = new() - //SKYRAT EDIT ADDITION - GHOST HOTEL UPDATE + //NOVA EDIT ADDITION - GHOST HOTEL UPDATE ghost_cafe_rooms_apartment = new() - //SKYRAT EDIT END + //NOVA EDIT END var/area/currentArea = get_area(src) if(currentArea.type == /area/ruin/space/has_grav/powered/hilbertresearchfacility/secretroom) ruinSpawned = TRUE @@ -85,8 +85,8 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) to_chat(target, span_warning("You aren't able to activate \the [src] anymore!")) // Has the user thrown it away or otherwise disposed of it such that it's no longer in their hands or in some storage connected to them? - // if(!(get_atom_on_turf(src, /mob) == user)) SKYRAT EDIT ORIGINAL - if(!Adjacent(user)) // SKYRAT EDIT -- Ghost Cafe Static Hilbertspawner + // if(!(get_atom_on_turf(src, /mob) == user)) NOVA EDIT ORIGINAL + if(!Adjacent(user)) // NOVA EDIT -- Ghost Cafe Static Hilbertspawner if(user == target) to_chat(user, span_warning("\The [src] is no longer in your possession!")) else @@ -104,11 +104,11 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) else if(!user.dropItemToGround(src)) to_chat(user, span_warning("You can't seem to drop \the [src]! It must be stuck to your hand somehow! Prepare for unforeseen consequences...")) - //SKYRAT EDIT ADDITION - GHOST HOTEL UPDATE + //NOVA EDIT ADDITION - GHOST HOTEL UPDATE var/chosen_room = "Nothing" if(istype(src, /obj/item/hilbertshotel/ghostdojo)) //to don't add another one var chosen_room = tgui_input_list(user, "Choose desired room:", "Time to choose", hotel_maps) - //SKYRAT EDIT END + //NOVA EDIT END if(!storageTurf) //Blame subsystems for not allowing this to be in Initialize if(!GLOB.hhStorageTurf) var/datum/map_template/hilbertshotelstorage/storageTemp = new() @@ -122,7 +122,7 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) return if(tryStoredRoom(chosenRoomNumber, target)) return - sendToNewRoom(chosenRoomNumber, target, chosen_room) //SKYRAT EDIT ADDITION - GHOST HOTEL UPDATE. Was sendToNewRoom(chosenRoomNumber, target) + sendToNewRoom(chosenRoomNumber, target, chosen_room) //NOVA EDIT ADDITION - GHOST HOTEL UPDATE. Was sendToNewRoom(chosenRoomNumber, target) /obj/item/hilbertshotel/proc/tryActiveRoom(roomNumber, mob/user) if(activeRooms["[roomNumber]"]) @@ -168,17 +168,17 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) return TRUE return FALSE -/obj/item/hilbertshotel/proc/sendToNewRoom(roomNumber, mob/user, chosen_room) //SKYRAT EDIT ADDITION - GHOST HOTEL UPDATE. Was sendToNewRoom(roomNumber, mob/user) +/obj/item/hilbertshotel/proc/sendToNewRoom(roomNumber, mob/user, chosen_room) //NOVA EDIT ADDITION - GHOST HOTEL UPDATE. Was sendToNewRoom(roomNumber, mob/user) var/datum/turf_reservation/roomReservation = SSmapping.request_turf_block_reservation(hotelRoomTemp.width, hotelRoomTemp.height, 1) var/turf/bottom_left = roomReservation.bottom_left_turfs[1] var/datum/map_template/load_from = hotelRoomTemp if(ruinSpawned && roomNumber == GLOB.hhMysteryRoomNumber) load_from = hotelRoomTempLore - //SKYRAT EDIT ADDITION START - GHOST HOTEL UPDATE + //NOVA EDIT ADDITION START - GHOST HOTEL UPDATE else if(chosen_room == "Apartment") load_from = ghost_cafe_rooms_apartment - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END load_from.load(bottom_left) activeRooms["[roomNumber]"] = roomReservation @@ -198,10 +198,15 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) currentArea.storageTurf = storageTurf currentArea.roomnumber = currentRoomnumber currentArea.reservation = currentReservation - for(var/turf/closed/indestructible/hoteldoor/door in currentArea) + + for(var/turf/closed/indestructible/hoteldoor/door in currentReservation.reserved_turfs) door.parentSphere = src - door.desc = "The door to this hotel room. The placard reads 'Room [currentRoomnumber]'. Strangely, this door doesn't even seem openable. The doorknob, however, seems to buzz with unusual energy...
[span_info("Alt-Click to look through the peephole.")]" - for(var/turf/open/space/bluespace/BSturf in currentArea) + door.desc = "The door to this hotel room. \ + The placard reads 'Room [currentRoomnumber]'. \ + Strangely, this door doesn't even seem openable. \ + The doorknob, however, seems to buzz with unusual energy...
\ + [span_info("Alt-Click to look through the peephole.")]" + for(var/turf/open/space/bluespace/BSturf in currentReservation.reserved_turfs) BSturf.parentSphere = src /obj/item/hilbertshotel/proc/ejectRooms() @@ -354,9 +359,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) @@ -398,9 +400,9 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) has_gravity = TRUE area_flags = NOTELEPORT | HIDDEN_AREA static_lighting = TRUE - /* SKYRAT EDIT REMOVAL - GHOST HOTEL UPDATE + /* NOVA EDIT REMOVAL - GHOST HOTEL UPDATE ambientsounds = list('sound/ambience/servicebell.ogg') - SKYRAT EDIT END */ + NOVA EDIT END */ var/roomnumber = 0 var/obj/item/hilbertshotel/parentSphere var/datum/turf_reservation/reservation @@ -436,12 +438,10 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) targetturf = get_turf(pick(GLOB.blobstart)) else CRASH("Unable to find a blobstart landmark") - var/turf/T = get_turf(H) - var/area/A = T.loc + log_game("[H] entered itself. Moving it to [loc_name(targetturf)].") message_admins("[H] entered itself. Moving it to [ADMIN_VERBOSEJMP(targetturf)].") - for(var/mob/M in A) - to_chat(M, span_danger("[H] almost implodes in upon itself, but quickly rebounds, shooting off into a random point in space!")) + H.visible_message(span_danger("[H] almost implodes in upon itself, but quickly rebounds, shooting off into a random point in space!")) H.forceMove(targetturf) /area/misc/hilbertshotel/Exited(atom/movable/gone, direction) diff --git a/code/modules/mapfluff/ruins/spaceruin_code/listeningstation.dm b/code/modules/mapfluff/ruins/spaceruin_code/listeningstation.dm index 1c44703f10aff2..34d56c99ba0a18 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/listeningstation.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/listeningstation.dm @@ -6,14 +6,14 @@ // Original "background" tone. /obj/item/paper/fluff/ruins/listeningstation/reports/march name = "march report" - default_raw_text = {"Accepted new assignment from liaison at MI13. Mission: Report on all Nanotrasen activities in this sector. + default_raw_text = {"Accepted new assignment from liaison at MI13. Mission: Report on all Symphionia activities in this sector.
Secondary Mission is to ensure survival of the person in the sleeper. This should not be hard, I have had personal experience with
this model of sleeper, and I know it to be of good quality. "} /obj/item/paper/fluff/ruins/listeningstation/reports/april name = "april report" - default_raw_text = {"A good start to the operation: intercepted Nanotrasen military communications. A convoy is scheduled to transfer nuclear warheads to a new military base. + default_raw_text = {"A good start to the operation: intercepted Symphionia military communications. A convoy is scheduled to transfer nuclear warheads to a new military base.
This is as good a chance as any to get our hands on some heavy weaponry, I suggest we take it.
As far as base work goes, I have begun a refurnishing of the base using the supplies I received during my shipment. It takes the mind off for whenever the station goes... "dark".
@@ -23,14 +23,14 @@ /obj/item/paper/fluff/ruins/listeningstation/reports/may name = "may report" default_raw_text = {"Nothing of real interest to report this month. I have intercepted faint transmissions from what appears to be some sort of pirate radio station. They do not appear to be relevant to my assignment. -
Using my connections, I was able to procure some signs and posters from Nanotrasen ships. I have a bundle of markers, so I spent today "disguising" the asteroid. Sloppy work, but I think it fits well. +
Using my connections, I was able to procure some signs and posters from Symphionia ships. I have a bundle of markers, so I spent today "disguising" the asteroid. Sloppy work, but I think it fits well.
It's a nice base, this. I have certainly served in worse conditions.
I have not heard anything about the mission on the new military base. I will press the matter later today. "} /obj/item/paper/fluff/ruins/listeningstation/reports/june name = "june report" - default_raw_text = {"Nanotrasen communications have been noticeably less frequent recently. The pirate radio station I found last month has been transmitting pro-Nanotrasen propaganda. I will continue to monitor it. + default_raw_text = {"Symphionia communications have been noticeably less frequent recently. The pirate radio station I found last month has been transmitting pro-Symphionia propaganda. I will continue to monitor it.
While I pressed the matter on looting the nuclear warheads, they advised me that it was "above my paygrade". However, I slipped a bug I had lying around the satellite into the pockets of one of my
superiors into the coat pocket. They were saying it was useless without some sort of authentication device.
@@ -109,7 +109,7 @@ name = "mission briefing" default_raw_text = {"Mission Details:
-
You have been assigned to a newly constructed listening post constructed within an asteroid in Nanotrasen space to monitor their plasma mining operations. +
You have been assigned to a newly constructed listening post constructed within an asteroid in Symphionia space to monitor their plasma mining operations.
Accurate intel is crucial to the success of our operatives onboard, do not fail us.

You may view intelligence reports from your predecessors in the filing cabinet in your office. diff --git a/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_fluff.dm b/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_fluff.dm index a0b4adb9f75d21..1a458c8266c09a 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_fluff.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_fluff.dm @@ -30,7 +30,7 @@
  • Move at a sufficient distance from the windows to avoid encounters with Space Carp.
  • \
  • Reestablish station powernet via Charlie Station Engineering solar array.
  • \
  • Restore life support systems: atmospherics, artificial gravity, hydroponics.
  • \ -
  • Avoid Delta Station until arrival of Nanotrasen Special Response Team.
  • \ +
  • Avoid Delta Station until arrival of Symphionia Special Response Team.
  • \ " /obj/item/paper/fluff/ruins/oldstation/protosuit diff --git a/code/modules/mapfluff/ruins/spaceruin_code/waystation.dm b/code/modules/mapfluff/ruins/spaceruin_code/waystation.dm index d678b45df57c9a..d5a03f4769f46b 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/waystation.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/waystation.dm @@ -1,7 +1,7 @@ /// Dorms Room Papers /obj/item/paper/fluff/ruins/waystation/menu name = "This week's food menu" - default_raw_text = "Here is what Corporate sent us for this week, The usual.

    Monday - Pizza and Mac & Cheese
    Tuesday - Space Carp Sashimi & Sushi
    ednesday - Garlic-and-oil nizaya & Khinkali
    Thursday - QM's birthday, Cake and a bunch of Pastries
    Friday - Fish & Chips

    Plus whatever kind of booze and food that the techies manage to \"accidentally\" steal from the crates (This is a reminder) -Cook" + default_raw_text = "Here is what Conglomeration sent us for this week, The usual.

    Monday - Pizza and Mac & Cheese
    Tuesday - Space Carp Sashimi & Sushi
    ednesday - Garlic-and-oil nizaya & Khinkali
    Thursday - QM's birthday, Cake and a bunch of Pastries
    Friday - Fish & Chips

    Plus whatever kind of booze and food that the techies manage to \"accidentally\" steal from the crates (This is a reminder) -Cook" /obj/item/paper/fluff/ruins/waystation/toilet name = "REMINDER!!" @@ -15,7 +15,7 @@ /obj/item/paper/fluff/ruins/waystation/memo name = "Memo" default_raw_text= "Please keep the documents from the malfunctioning shuttle safe until someone picks it up. We really shouldn't have this kind of stuff on us." -/// Syndicate Holodisk +/// Symphionia Holodisk /obj/item/disk/holodisk/ruin/waystation name = "Ops NUCLEUS - Briefing" preset_image_type = /datum/preset_holoimage/syndicatebattlecruisercaptain @@ -23,9 +23,9 @@ NAME Raymond Johnson SAY All right boys, The mission is simple. DELAY 20 - SAY You will be breaching an distant waystation on the fringe of Nanotrasen territory. + SAY You will be breaching an distant waystation on the fringe of Symphionia territory. DELAY 25 - SAY Your main objective is to secure highly classified documents about recent Nanotrasen expansion in the Spinward sector. + SAY Your main objective is to secure highly classified documents about recent Symphionia expansion in the Spinward sector. DELAY 20 SAY The documents are located in the secure storage room. DELAY 25 diff --git a/code/modules/mapping/access_helpers.dm b/code/modules/mapping/access_helpers.dm index c208e2eea9ea9e..3f8e4af273151a 100644 --- a/code/modules/mapping/access_helpers.dm +++ b/code/modules/mapping/access_helpers.dm @@ -391,7 +391,7 @@ access_list += ACCESS_BIT_DEN return access_list -// -------------------- Syndicate access helpers +// -------------------- Symphionia access helpers /obj/effect/mapping_helpers/airlock/access/any/syndicate icon_state = "access_helper_syn" @@ -842,7 +842,7 @@ access_list += ACCESS_VAULT return access_list -// -------------------- Syndicate access helpers +// -------------------- Symphionia access helpers /obj/effect/mapping_helpers/airlock/access/all/syndicate icon_state = "access_helper_syn" diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm index 7917da4d542302..47dca7b438e3cc 100644 --- a/code/modules/mapping/map_template.dm +++ b/code/modules/mapping/map_template.dm @@ -29,6 +29,8 @@ var/list/ceiling_baseturfs = list() /datum/map_template/New(path = null, rename = null, cache = FALSE) + SHOULD_CALL_PARENT(TRUE) + . = ..() if(path) mappath = path if(mappath) diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index cec7932f4f556c..9c5ac879aee0e7 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -6,8 +6,9 @@ name = "baseturf editor" icon = 'icons/effects/mapping_helpers.dmi' icon_state = "" - + /// Replacing a specific turf var/list/baseturf_to_replace + /// The desired bottom turf var/baseturf plane = POINT_PLANE @@ -33,9 +34,16 @@ qdel(src) +/// Replaces all the requested baseturfs (usually space/baseturfbottom) with the desired baseturf. Skips if its already there /obj/effect/baseturf_helper/proc/replace_baseturf(turf/thing) thing.remove_baseturfs_from_typecache(baseturf_to_replace) - thing.PlaceOnBottom(fake_turf_type = baseturf) + + if(length(thing.baseturfs)) + var/turf/tile = thing.baseturfs[1] + if(tile == baseturf) + return + + thing.place_on_bottom(baseturf) /obj/effect/baseturf_helper/space name = "space baseturf editor" @@ -145,11 +153,11 @@ if(1 to 9) var/turf/here = get_turf(src) for(var/turf/closed/T in range(2, src)) - here.PlaceOnTop(T.type) + here.place_on_top(T.type) qdel(airlock) qdel(src) return - here.PlaceOnTop(/turf/closed/wall) + here.place_on_top(/turf/closed/wall) qdel(airlock) qdel(src) return @@ -694,9 +702,9 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) /obj/effect/mapping_helpers/atom_injector/trait_injector/check_validity() if(!istext(trait_name)) CRASH("Wrong trait in [type] - [trait_name] is not a trait") - if(!GLOB.trait_name_map) - GLOB.trait_name_map = generate_trait_name_map() - if(!GLOB.trait_name_map.Find(trait_name)) + if(!GLOB.global_trait_name_map) + GLOB.global_trait_name_map = generate_global_trait_name_map() + if(!GLOB.global_trait_name_map.Find(trait_name)) stack_trace("Possibly wrong trait in [type] - [trait_name] is not a trait in the global trait list") return TRUE @@ -909,7 +917,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) 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. @@ -937,39 +944,46 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) name = "Ian's Bday Helper" late = TRUE icon_state = "iansbdayhelper" + /// How many clusters of balloons to spawn. var/balloon_clusters = 2 + /// if TRUE, we give a map log warning if we can't find Ian's dogbed. + var/map_warning = TRUE /obj/effect/mapping_helpers/ianbirthday/LateInitialize() - if(check_holidays("Ian's Birthday")) + if(check_holidays(IAN_HOLIDAY)) birthday() qdel(src) /obj/effect/mapping_helpers/ianbirthday/proc/birthday() - var/area/a = get_area(src) - var/list/table = list()//should only be one aka the front desk, but just in case... - var/list/openturfs = list() - - //confetti and a corgi balloon! (and some list stuff for more decorations) - for(var/thing in a.contents) - if(istype(thing, /obj/structure/table/reinforced)) - table += thing - if(isopenturf(thing)) - new /obj/effect/decal/cleanable/confetti(thing) - if(locate(/obj/structure/bed/dogbed/ian) in thing) - new /obj/item/toy/balloon/corgi(thing) - else - openturfs += thing + var/area/celebration_area = get_area(src) + var/list/table_turfs = list() + var/list/open_turfs = list() + var/turf/dogbed_turf + for(var/turf/area_turf as anything in celebration_area.get_contained_turfs()) + if(locate(/obj/structure/table/reinforced) in area_turf) + table_turfs += area_turf + if(locate(/obj/structure/bed/dogbed/ian) in area_turf) + dogbed_turf = area_turf + if(isopenturf(area_turf)) + new /obj/effect/decal/cleanable/confetti(area_turf) + open_turfs += area_turf + + if(isnull(dogbed_turf) && map_warning) + log_mapping("[src] in [celebration_area] could not find Ian's dogbed.") - //cake + knife to cut it! - if(length(table)) - var/turf/food_turf = get_turf(pick(table)) + else + new /obj/item/toy/balloon/corgi(dogbed_turf) + var/turf/food_turf = length(table_turfs) ? pick(table_turfs) : dogbed_turf new /obj/item/knife/kitchen(food_turf) var/obj/item/food/cake/birthday/iancake = new(food_turf) iancake.desc = "Happy birthday, Ian!" + if(!length(open_turfs)) + return + //some balloons! this picks an open turf and pops a few balloons in and around that turf, yay. for(var/i in 1 to balloon_clusters) - var/turf/clusterspot = pick_n_take(openturfs) + var/turf/clusterspot = pick_n_take(open_turfs) new /obj/item/toy/balloon(clusterspot) var/balloons_left_to_give = 3 //the amount of balloons around the cluster var/list/dirs_to_balloon = GLOB.cardinals.Copy() @@ -996,6 +1010,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) /obj/effect/mapping_helpers/ianbirthday/admin//so admins may birthday any room name = "generic birthday setup" icon_state = "bdayhelper" + map_warning = FALSE /obj/effect/mapping_helpers/ianbirthday/admin/LateInitialize() birthday() @@ -1013,24 +1028,26 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) qdel(src) /obj/effect/mapping_helpers/iannewyear/proc/fireworks() - var/area/a = get_area(src) - var/list/table = list()//should only be one aka the front desk, but just in case... - var/list/openturfs = list() - - for(var/thing in a.contents) - if(istype(thing, /obj/structure/table/reinforced)) - table += thing - else if(isopenturf(thing)) - if(locate(/obj/structure/bed/dogbed/ian) in thing) - new /obj/item/clothing/head/costume/festive(thing) - var/obj/item/reagent_containers/cup/glass/bottle/champagne/iandrink = new(thing) - iandrink.name = "dog champagne" - iandrink.pixel_y += 8 - iandrink.pixel_x += 8 - else - openturfs += thing + var/area/celebration_area = get_area(src) + var/list/table_turfs = list() + var/turf/dogbed_turf + for(var/turf/area_turf as anything in celebration_area.get_contained_turfs()) + if(locate(/obj/structure/table/reinforced) in area_turf) + table_turfs += area_turf + if(locate(/obj/structure/bed/dogbed/ian) in area_turf) + dogbed_turf = area_turf + + if(isnull(dogbed_turf)) + log_mapping("[src] in [celebration_area] could not find Ian's dogbed.") + return + + new /obj/item/clothing/head/costume/festive(dogbed_turf) + var/obj/item/reagent_containers/cup/glass/bottle/champagne/iandrink = new(dogbed_turf) + iandrink.name = "dog champagne" + iandrink.pixel_y += 8 + iandrink.pixel_x += 8 - var/turf/fireworks_turf = get_turf(pick(table)) + var/turf/fireworks_turf = length(table_turfs) ? pick(table_turfs) : dogbed_turf var/obj/item/storage/box/matches/matchbox = new(fireworks_turf) matchbox.pixel_y += 8 matchbox.pixel_x -= 3 diff --git a/code/modules/mapping/modular_map_loader/modular_map_loader.dm b/code/modules/mapping/modular_map_loader/modular_map_loader.dm index f5b336960f29d1..0bfabe373e0747 100644 --- a/code/modules/mapping/modular_map_loader/modular_map_loader.dm +++ b/code/modules/mapping/modular_map_loader/modular_map_loader.dm @@ -1,6 +1,6 @@ /obj/modular_map_root invisibility = INVISIBILITY_ABSTRACT - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tracker.dmi' icon_state = "pinonclose" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF @@ -70,7 +70,7 @@ INITIALIZE_IMMEDIATE(/obj/modular_map_root) /obj/modular_map_connector invisibility = INVISIBILITY_ABSTRACT - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tracker.dmi' icon_state = "pinonclose" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF diff --git a/code/modules/mapping/reader.dm b/code/modules/mapping/reader.dm index 14a8fdf6b94003..ab6743ff17a0ad 100644 --- a/code/modules/mapping/reader.dm +++ b/code/modules/mapping/reader.dm @@ -46,7 +46,6 @@ * Files are kinda susy, and may not actually work. buyer beware * Lists support assoc values as expected * These constants can be further embedded into lists - * One var edited list will be shared among all the things it is applied to * * There can be no padding in front of, or behind a path * @@ -950,7 +949,7 @@ GLOBAL_LIST_EMPTY(map_model_default) // Note: we make the assertion that the last path WILL be a turf. if it isn't, this will fail. if(placeOnTop) - instance = crds.PlaceOnTop(null, members[index], CHANGETURF_DEFER_CHANGE | (no_changeturf ? CHANGETURF_SKIP : NONE)) + instance = crds.load_on_top(members[index], CHANGETURF_DEFER_CHANGE | (no_changeturf ? CHANGETURF_SKIP : NONE)) else if(no_changeturf) instance = create_atom(members[index], crds)//first preloader pass else diff --git a/code/modules/mapping/verify.dm b/code/modules/mapping/verify.dm index 60067bc5db753f..c9347c7ecdb755 100644 --- a/code/modules/mapping/verify.dm +++ b/code/modules/mapping/verify.dm @@ -16,7 +16,7 @@ GLOBAL_LIST_EMPTY(map_reports) original_path = map.original_path || "Untitled" GLOB.map_reports += src -/datum/map_report/Destroy(force, ...) +/datum/map_report/Destroy(force) GLOB.map_reports -= src return ..() diff --git a/code/modules/meteors/meteor_spawning.dm b/code/modules/meteors/meteor_spawning.dm index 97c359d03bfbae..d19d3aff0a5a67 100644 --- a/code/modules/meteors/meteor_spawning.dm +++ b/code/modules/meteors/meteor_spawning.dm @@ -68,7 +68,7 @@ . = locate(endx, endy, Z) /** - * Recieves a mob candidate, transforms them into a changeling, and hurls them at the station inside of a changeling meteor + * Receives a mob candidate, transforms them into a changeling, and hurls them at the station inside of a changeling meteor * * Takes a given candidate and turns them into a changeling, generates a changeling meteor, and throws it at the station. * Returns the changeling generated by the event, NOT the meteor. This is so that it plays nicely with the dynamic ruleset diff --git a/code/modules/meteors/meteor_types.dm b/code/modules/meteors/meteor_types.dm index b258196ed245a5..c59a153b02238a 100644 --- a/code/modules/meteors/meteor_types.dm +++ b/code/modules/meteors/meteor_types.dm @@ -144,9 +144,9 @@ M.playsound_local(src.loc, null, 50, 1, random_frequency, 10, sound_to_use = meteor_sound) /** - * Used to check if someone who has examined a meteor will recieve an award. + * Used to check if someone who has examined a meteor will receive an award. * - * Checks the criteria to recieve the "examine a meteor" award. + * Checks the criteria to receive the "examine a meteor" award. * Admin spawned meteors will not grant the user an achievement. * * Arguments: diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm index c9fdb9747e5bdc..ce42eaa43c28df 100644 --- a/code/modules/mining/abandoned_crates.dm +++ b/code/modules/mining/abandoned_crates.dm @@ -210,7 +210,14 @@ if(85 to 86) new /obj/item/defibrillator/compact(src) if(87) //1% chance - new /obj/item/weed_extract(src) + var/list/cannabis_seeds = typesof(/obj/item/seeds/cannabis) + var/list/cannabis_plants = typesof(/obj/item/food/grown/cannabis) + for(var/i in 1 to rand(2, 4)) + var/seed_type = pick(cannabis_seeds) + new seed_type(src) + for(var/i in 1 to rand(2, 4)) + var/cannabis_type = pick(cannabis_plants) + new cannabis_type(src) if(88) new /obj/item/reagent_containers/cup/glass/bottle/lizardwine(src) if(89) diff --git a/code/modules/mining/aux_base.dm b/code/modules/mining/aux_base.dm index 9d97ec53663e48..32cb16332f3873 100644 --- a/code/modules/mining/aux_base.dm +++ b/code/modules/mining/aux_base.dm @@ -206,7 +206,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/auxiliary_base, 32) /obj/machinery/computer/auxiliary_base/proc/set_landing_zone(turf/T, mob/user, no_restrictions) var/obj/docking_port/mobile/auxiliary_base/base_dock = locate(/obj/docking_port/mobile/auxiliary_base) in SSshuttle.mobile_docking_ports if(!base_dock) //Not all maps have an Aux base. This object is useless in that case. - to_chat(user, span_warning("This station is not equipped with an auxiliary base. Please contact your Nanotrasen contractor.")) + to_chat(user, span_warning("This station is not equipped with an auxiliary base. Please contact your Symphionia contractor.")) return if(!no_restrictions) var/static/list/disallowed_turf_types = zebra_typecacheof(list( @@ -256,6 +256,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/auxiliary_base, 32) /obj/item/assault_pod/mining name = "Landing Field Designator" + icon = 'icons/obj/devices/remote.dmi' icon_state = "gangtool-purple" inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' @@ -390,7 +391,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/auxiliary_base, 32) break if(!Mport) - to_chat(user, span_warning("This station is not equipped with an appropriate mining shuttle. Please contact Nanotrasen Support.")) + to_chat(user, span_warning("This station is not equipped with an appropriate mining shuttle. Please contact Symphionia Support.")) return var/obj/docking_port/mobile/mining_shuttle @@ -403,7 +404,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/auxiliary_base, 32) break if(!mining_shuttle) //Not having a mining shuttle is a map issue - to_chat(user, span_warning("No mining shuttle signal detected. Please contact Nanotrasen Support.")) + to_chat(user, span_warning("No mining shuttle signal detected. Please contact Symphionia Support.")) SSshuttle.stationary_docking_ports.Remove(Mport) qdel(Mport) return diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm index 38df199b251bcb..16486a3749efdc 100644 --- a/code/modules/mining/equipment/explorer_gear.dm +++ b/code/modules/mining/equipment/explorer_gear.dm @@ -332,7 +332,7 @@ /obj/item/clothing/suit/hooded/explorer/syndicate name = "syndicate explorer suit" - desc = "An armoured suit for exploring harsh environments, dyed in the sinister red and black of the Syndicate. This one seems better armored than the ones Nanotrasen gives out." + desc = "An armoured suit for exploring harsh environments, dyed in the sinister red and black of the Symphionia. This one seems better armored than the ones Symphionia gives out." icon_state = "explorer_syndicate" icon = 'icons/obj/clothing/suits/utility.dmi' worn_icon = 'icons/mob/clothing/suits/utility.dmi' diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index f5676221f7abf5..add06da08a6948 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -113,7 +113,7 @@ if((user.dir & backstab_dir) && (L.dir & backstab_dir)) backstabbed = TRUE combined_damage += backstab_bonus - playsound(user, 'sound/weapons/kenetic_accel.ogg', 100, TRUE) //Seriously who spelled it wrong + playsound(user, 'sound/weapons/kinetic_accel.ogg', 100, TRUE) //Seriously who spelled it wrong if(!QDELETED(C)) C.total_damage += combined_damage @@ -159,7 +159,7 @@ if(!charged) charged = TRUE update_appearance() - playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, TRUE) + playsound(src.loc, 'sound/weapons/kinetic_reload.ogg', 60, TRUE) /obj/item/kinetic_crusher/ui_action_click(mob/user, actiontype) set_light_on(!light_on) diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm index 4721fcaf8091f0..67eb767f7673e3 100644 --- a/code/modules/mining/equipment/marker_beacons.dm +++ b/code/modules/mining/equipment/marker_beacons.dm @@ -100,7 +100,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, sort_list(list( update_appearance() /obj/structure/marker_beacon/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) var/obj/item/stack/marker_beacon/M = new(loc) M.picked_color = picked_color M.update_appearance() diff --git a/code/modules/mining/equipment/mineral_scanner.dm b/code/modules/mining/equipment/mineral_scanner.dm index c56077c4dfb7c2..3d78d378d662d3 100644 --- a/code/modules/mining/equipment/mineral_scanner.dm +++ b/code/modules/mining/equipment/mineral_scanner.dm @@ -2,14 +2,14 @@ /obj/item/mining_scanner desc = "A scanner that checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations." name = "manual mining scanner" - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/scanner.dmi' icon_state = "manual_mining" inhand_icon_state = "analyzer" worn_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 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT var/cooldown = 35 var/current_cooldown = 0 @@ -38,7 +38,7 @@ 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 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT var/cooldown = 35 var/current_cooldown = 0 @@ -77,7 +77,7 @@ /obj/effect/temp_visual/mining_overlay plane = HIGH_GAME_PLANE layer = FLASH_LAYER - icon = 'modular_skyrat/modules/xenoarch/icons/ore_visuals.dmi' //SKYRAT EDIT ADDITION - XENOARCHAEOLOGY + icon = 'modular_nova/modules/xenoarch/icons/ore_visuals.dmi' //NOVA EDIT ADDITION - XENOARCHAEOLOGY appearance_flags = 0 //to avoid having TILE_BOUND in the flags, so that the 480x480 icon states let you see it no matter where you are duration = 35 pixel_x = -224 diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm index 69903d77591ad2..abb6230fee8d5d 100644 --- a/code/modules/mining/equipment/mining_tools.dm +++ b/code/modules/mining/equipment/mining_tools.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/mining.dmi' icon_state = "pickaxe" inhand_icon_state = "pickaxe" - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK force = 15 throwforce = 10 @@ -123,7 +123,7 @@ inhand_icon_state = "shovel" lefthand_file = 'icons/mob/inhands/equipment/mining_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/mining_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT force = 8 throwforce = 4 @@ -206,7 +206,7 @@ inhand_icon_state = "trench_tool" lefthand_file = 'icons/mob/inhands/equipment/mining_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/mining_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY force = 15 throwforce = 6 w_class = WEIGHT_CLASS_SMALL diff --git a/code/modules/mining/equipment/miningradio.dm b/code/modules/mining/equipment/miningradio.dm index 559740599dbe40..c6fa3a34fc36ae 100644 --- a/code/modules/mining/equipment/miningradio.dm +++ b/code/modules/mining/equipment/miningradio.dm @@ -5,7 +5,6 @@ icon_state = "miningradio" desc = "A weather radio designed for use in inhospitable environments. Gives audible warnings when storms approach. Has access to cargo channel." freqlock = RADIO_FREQENCY_LOCKED - luminosity = 1 light_power = 1 light_range = 1.6 diff --git a/code/modules/mining/equipment/monster_organs/monster_organ.dm b/code/modules/mining/equipment/monster_organs/monster_organ.dm index 699564c9ed77e9..d8e4bfae986768 100644 --- a/code/modules/mining/equipment/monster_organs/monster_organ.dm +++ b/code/modules/mining/equipment/monster_organs/monster_organ.dm @@ -65,11 +65,11 @@ . = ..() decay_timer = addtimer(CALLBACK(src, PROC_REF(go_inert)), time_to_decay, TIMER_STOPPABLE) -/obj/item/organ/internal/monster_core/Destroy(force, silent) +/obj/item/organ/internal/monster_core/Destroy(force) deltimer(decay_timer) return ..() -/obj/item/organ/internal/monster_core/Insert(mob/living/carbon/target_carbon, special = FALSE, drop_if_replaced = TRUE) +/obj/item/organ/internal/monster_core/Insert(mob/living/carbon/target_carbon, special = FALSE, movement_flags) . = ..() if(!.) return @@ -83,7 +83,7 @@ target_carbon.visible_message(span_notice("[src] stabilizes as it's inserted.")) return TRUE -/obj/item/organ/internal/monster_core/Remove(mob/living/carbon/target_carbon, special = 0) +/obj/item/organ/internal/monster_core/Remove(mob/living/carbon/target_carbon, special, movement_flags) if (!inert && !special) owner.visible_message(span_notice("[src] rapidly decays as it's removed.")) go_inert() diff --git a/code/modules/mining/equipment/monster_organs/rush_gland.dm b/code/modules/mining/equipment/monster_organs/rush_gland.dm index 3554d67b2a66f8..b3932afdaab738 100644 --- a/code/modules/mining/equipment/monster_organs/rush_gland.dm +++ b/code/modules/mining/equipment/monster_organs/rush_gland.dm @@ -21,11 +21,11 @@ if (owner.health <= HEALTH_DANGER_ZONE) trigger_organ_action() -/obj/item/organ/internal/monster_core/rush_gland/on_insert(mob/living/carbon/organ_owner) +/obj/item/organ/internal/monster_core/rush_gland/on_mob_insert(mob/living/carbon/organ_owner) . = ..() RegisterSignal(organ_owner, COMSIG_GOLIATH_TENTACLED_GRABBED, PROC_REF(trigger_organ_action)) -/obj/item/organ/internal/monster_core/rush_gland/on_remove(mob/living/carbon/organ_owner, special) +/obj/item/organ/internal/monster_core/rush_gland/on_mob_remove(mob/living/carbon/organ_owner, special) . = ..() UnregisterSignal(organ_owner, COMSIG_GOLIATH_TENTACLED_GRABBED) diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index 056ef6cbc7ebd7..95ee1015a95a5e 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -164,7 +164,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/survival_pod/spawne /obj/item/gps/computer/wrench_act(mob/living/user, obj/item/I) ..() - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return TRUE user.visible_message(span_warning("[user] disassembles [src]."), @@ -201,7 +201,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/survival_pod/spawne light_color = COLOR_VERY_PALE_LIME_GREEN max_n_of_items = 10 pixel_y = -4 - flags_1 = NODECONSTRUCT_1 + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION /obj/machinery/smartfridge/survival_pod/Initialize(mapload) AddElement(/datum/element/update_icon_blocker) diff --git a/code/modules/mining/equipment/wormhole_jaunter.dm b/code/modules/mining/equipment/wormhole_jaunter.dm index f42d572cb6cdd5..4d1f75cf33f432 100644 --- a/code/modules/mining/equipment/wormhole_jaunter.dm +++ b/code/modules/mining/equipment/wormhole_jaunter.dm @@ -1,7 +1,7 @@ /**********************Jaunter**********************/ /obj/item/wormhole_jaunter name = "wormhole jaunter" - desc = "A single use device harnessing outdated wormhole technology, Nanotrasen has since turned its eyes to bluespace for more accurate teleportation. The wormholes it creates are unpleasant to travel through, to say the least.\nThanks to modifications provided by the Free Golems, this jaunter can be worn on the belt to provide protection from chasms." + desc = "A single use device harnessing outdated wormhole technology, Symphionia has since turned its eyes to bluespace for more accurate teleportation. The wormholes it creates are unpleasant to travel through, to say the least.\nThanks to modifications provided by the Free Golems, this jaunter can be worn on the belt to provide protection from chasms." icon = 'icons/obj/mining.dmi' icon_state = "Jaunter" inhand_icon_state = "electronic" @@ -102,6 +102,7 @@ mech_sized = TRUE //save your ripley innate_accuracy_penalty = 6 light_on = FALSE + wibbles = 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 20a436dc5c6f59..006c920d4b9c4f 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -6,136 +6,179 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) icon = 'icons/obj/fulton.dmi' icon_state = "extraction_pack" w_class = WEIGHT_CLASS_NORMAL - var/obj/structure/extraction_point/beacon + /// Beacon weakref + var/datum/weakref/beacon_ref + /// List of networks var/list/beacon_networks = list("station") + /// Number of uses left var/uses_left = 3 + /// Can be used indoors var/can_use_indoors - var/safe_for_living_creatures = 1 + /// Can be used on living creatures + var/safe_for_living_creatures = TRUE + /// Maximum force that can be used to extract var/max_force_fulton = MOVE_FORCE_STRONG /obj/item/extraction_pack/examine() . = ..() - . += "It has [uses_left] use\s remaining." + . += span_infoplain("It has [uses_left] use\s remaining.") + + var/obj/structure/extraction_point/beacon = beacon_ref?.resolve() + + if(isnull(beacon)) + beacon_ref = null + . += span_infoplain("It is not linked to a beacon.") + return + + . += span_infoplain("It is linked to [beacon.name].") /obj/item/extraction_pack/attack_self(mob/user) var/list/possible_beacons = list() - for(var/obj/structure/extraction_point/extraction_point as anything in GLOB.total_extraction_beacons) + for(var/datum/weakref/point_ref as anything in GLOB.total_extraction_beacons) + var/obj/structure/extraction_point/extraction_point = point_ref.resolve() + if(isnull(extraction_point)) + GLOB.total_extraction_beacons.Remove(point_ref) if(extraction_point.beacon_network in beacon_networks) possible_beacons += extraction_point if(!length(possible_beacons)) - to_chat(user, span_warning("There are no extraction beacons in existence!")) + balloon_alert(user, "no beacons") + return + + var/chosen_beacon = tgui_input_list(user, "Beacon to connect to", "Balloon Extraction Pack", sort_names(possible_beacons)) + if(isnull(chosen_beacon)) return - else - var/chosen_beacon = tgui_input_list(user, "Beacon to connect to", "Balloon Extraction Pack", sort_names(possible_beacons)) - if(isnull(chosen_beacon)) - return - 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) + beacon_ref = WEAKREF(chosen_beacon) + balloon_alert(user, "linked!") + +/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)) - beacon = null - to_chat(user, span_warning("The connected beacon has been destroyed!")) + + var/obj/structure/extraction_point/beacon = beacon_ref?.resolve() + if(isnull(beacon)) + balloon_alert(user, "not linked") + beacon_ref = null 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 - 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) - user.back?.atom_storage?.attempt_insert(src, user, force = STORAGE_SOFT_LOCKED) - 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/effects/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/effects/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/effects/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) + balloon_alert_to_viewers("extracting!") + if(loc == user) + user.back?.atom_storage?.attempt_insert(src, user, force = STORAGE_SOFT_LOCKED) + 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 + 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/effects/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/effects/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/effects/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 name = "extraction beacon assembly kit" @@ -162,13 +205,9 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) /obj/structure/extraction_point/Initialize(mapload) . = ..() name += " ([rand(100,999)]) ([get_area_name(src, TRUE)])" - GLOB.total_extraction_beacons += src + GLOB.total_extraction_beacons.Add(WEAKREF(src)) update_appearance(UPDATE_OVERLAYS) -/obj/structure/extraction_point/Destroy() - GLOB.total_extraction_beacons -= src - return ..() - /obj/structure/extraction_point/attack_hand(mob/living/user, list/modifiers) . = ..() balloon_alert_to_viewers("undeploying...") @@ -204,3 +243,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) /obj/effect/extraction_holder/singularity_pull() return + +/obj/item/extraction_pack/syndicate + name = "syndicate fulton extraction pack" + can_use_indoors = TRUE diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm index c66695091b06f6..e693858fba5499 100644 --- a/code/modules/mining/lavaland/ash_flora.dm +++ b/code/modules/mining/lavaland/ash_flora.dm @@ -197,9 +197,9 @@ pixel_y = base_pixel_y + rand(-4, 4) /obj/item/food/grown/ash_flora/shavings //So we can't craft bowls from everything. - special_desc_requirement = EXAMINE_CHECK_JOB //SKYRAT EDIT - special_desc_jobs = list("Botanist") //SKYRAT EDIT - special_desc = "You feel this flora would be unwise to consume while already full." //SKYRAT EDIT + special_desc_requirement = EXAMINE_CHECK_JOB //NOVA EDIT + special_desc_jobs = list("Botanist") //NOVA EDIT + special_desc = "You feel this flora would be unwise to consume while already full." //NOVA EDIT grind_results = list(/datum/reagent/toxin/mushroom_powder = 5) /obj/item/food/grown/ash_flora/mushroom_leaf @@ -208,9 +208,9 @@ icon_state = "mushroom_leaf" seed = /obj/item/seeds/lavaland/porcini wine_power = 40 - special_desc_requirement = EXAMINE_CHECK_JOB //SKYRAT EDIT - special_desc_jobs = list("Botanist") //SKYRAT EDIT - special_desc = "This flora is nutritious and healthy to eat, though slightly laced with nicotine." //SKYRAT EDIT + special_desc_requirement = EXAMINE_CHECK_JOB //NOVA EDIT + special_desc_jobs = list("Botanist") //NOVA EDIT + special_desc = "This flora is nutritious and healthy to eat, though slightly laced with nicotine." //NOVA EDIT /obj/item/food/grown/ash_flora/mushroom_cap name = "mushroom cap" @@ -218,9 +218,9 @@ icon_state = "mushroom_cap" seed = /obj/item/seeds/lavaland/inocybe wine_power = 70 - special_desc_requirement = EXAMINE_CHECK_JOB //SKYRAT EDIT - special_desc_jobs = list("Botanist") //SKYRAT EDIT - special_desc = "This flora is poisonous and hallucinogenic." //SKYRAT EDIT + special_desc_requirement = EXAMINE_CHECK_JOB //NOVA EDIT + special_desc_jobs = list("Botanist") //NOVA EDIT + special_desc = "This flora is poisonous and hallucinogenic." //NOVA EDIT /obj/item/food/grown/ash_flora/mushroom_stem name = "mushroom stem" @@ -228,9 +228,9 @@ icon_state = "mushroom_stem" seed = /obj/item/seeds/lavaland/ember wine_power = 60 - special_desc_requirement = EXAMINE_CHECK_JOB //SKYRAT EDIT - special_desc_jobs = list("Botanist") //SKYRAT EDIT - special_desc = "This flora contains psychoactive drugs and will also make you glow." //SKYRAT EDIT + special_desc_requirement = EXAMINE_CHECK_JOB //NOVA EDIT + special_desc_jobs = list("Botanist") //NOVA EDIT + special_desc = "This flora contains psychoactive drugs and will also make you glow." //NOVA EDIT /obj/item/food/grown/ash_flora/cactus_fruit name = "cactus fruit" @@ -238,9 +238,9 @@ icon_state = "cactus_fruit" seed = /obj/item/seeds/lavaland/cactus wine_power = 50 - special_desc_requirement = EXAMINE_CHECK_JOB //SKYRAT EDIT - special_desc_jobs = list("Botanist") //SKYRAT EDIT - special_desc = "This flora is very nutritious and medicinal." //SKYRAT EDIT + special_desc_requirement = EXAMINE_CHECK_JOB //NOVA EDIT + special_desc_jobs = list("Botanist") //NOVA EDIT + special_desc = "This flora is very nutritious and medicinal." //NOVA EDIT /obj/item/food/grown/ash_flora/seraka name = "seraka cap" @@ -269,7 +269,7 @@ yield = 4 potency = 15 growthstages = 3 - rarity = 20 + rarity = PLANT_MODERATELY_RARE reagents_add = list(/datum/reagent/consumable/nutriment = 0.1) species = "polypore" // silence unit test genes = list(/datum/plant_gene/trait/fire_resistance) @@ -405,3 +405,16 @@ if(!reagents.total_volume) icon_state = "mushroom_bowl" return ..() + +/obj/item/reagent_containers/cup/bowl/wood_bowl + name = "wooden bowl" + desc = "A bowl made out of wood. Primitive, but effective." + icon = 'icons/obj/mining_zones/ash_flora.dmi' + icon_state = "wood_bowl" + fill_icon_state = "fullbowl" + fill_icon = 'icons/obj/mining_zones/ash_flora.dmi' + +/obj/item/reagent_containers/cup/bowl/mushroom_bowl/update_icon_state() + if(!reagents.total_volume) + icon_state = "wood_bowl" + return ..() diff --git a/code/modules/mining/lavaland/megafauna_loot.dm b/code/modules/mining/lavaland/megafauna_loot.dm index 554002fed54a69..0c9822b43c92e7 100644 --- a/code/modules/mining/lavaland/megafauna_loot.dm +++ b/code/modules/mining/lavaland/megafauna_loot.dm @@ -268,7 +268,7 @@ greyscale_colors = "#4d4d4d#808080" greyscale_config = /datum/greyscale_config/heck_suit greyscale_config_worn = /datum/greyscale_config/heck_suit/worn - greyscale_config_worn_digi = /datum/greyscale_config/heck_suit/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale + greyscale_config_worn_digi = /datum/greyscale_config/heck_suit/worn/digi //NOVA EDIT ADDITION - DigiGreyscale flags_1 = IS_PLAYER_COLORABLE_1 /datum/armor/hooded_hostile_environment @@ -286,7 +286,6 @@ AddElement(/datum/element/gags_recolorable) /obj/item/clothing/suit/hooded/hostile_environment/process(seconds_per_tick) - . = ..() var/mob/living/carbon/wearer = loc if(istype(wearer) && SPT_PROB(1, seconds_per_tick)) //cursed by bubblegum if(prob(7.5)) @@ -314,7 +313,7 @@ greyscale_colors = "#4d4d4d#808080#ff3300" greyscale_config = /datum/greyscale_config/heck_helmet greyscale_config_worn = /datum/greyscale_config/heck_helmet/worn - greyscale_config_worn_digi = /datum/greyscale_config/heck_helmet/worn/snouted //SKYRAT EDIT ADDITION - MuzzledGreyscale (Why does this use worn_digi) + greyscale_config_worn_digi = /datum/greyscale_config/heck_helmet/worn/snouted //NOVA EDIT ADDITION - MuzzledGreyscale (Why does this use worn_digi) flags_1 = IS_PLAYER_COLORABLE_1 /obj/item/clothing/head/hooded/hostile_environment/Initialize(mapload) @@ -637,7 +636,7 @@ inhand_icon_state = "spectral" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY sharpness = SHARP_EDGED w_class = WEIGHT_CLASS_BULKY force = 1 @@ -674,18 +673,15 @@ return to_chat(user, span_notice("You call out for aid, attempting to summon spirits to your side.")) - notify_ghosts("[user] is raising [user.p_their()] [name], calling for your help!", - enter_link="(Click to help)", - source = user, ignore_key = POLL_IGNORE_SPECTRAL_BLADE, header = "Spectral blade") + notify_ghosts( + "[user] is raising [user.p_their()] [name], calling for your help!", + source = user, + ignore_key = POLL_IGNORE_SPECTRAL_BLADE, + header = "Spectral blade", + ) summon_cooldown = world.time + 600 -/obj/item/melee/ghost_sword/Topic(href, href_list) - if(href_list["orbit"]) - var/mob/dead/observer/ghost = usr - if(istype(ghost)) - ghost.ManualFollow(src) - /obj/item/melee/ghost_sword/process() ghost_check() @@ -733,7 +729,7 @@ return var/mob/living/carbon/human/consumer = user - var/random = rand(2,4) //SKYRAT EDIT - Commenting out #1 because it makes people invisible. + var/random = rand(2,4) //NOVA EDIT - Commenting out #1 because it makes people invisible. switch(random) if(1) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 9d1d429466953d..d6115ae3e9fd7b 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -55,7 +55,7 @@ if(12) new /obj/item/jacobs_ladder(src) if(13) - new /obj/item/guardiancreator/miner(src) + new /obj/item/guardian_creator/miner(src) if(14) new /obj/item/warp_cube/red(src) if(15) @@ -127,7 +127,7 @@ var/loot = rand(1,2) switch(loot) if(1) - new /obj/item/bloodcrawl_bottle(src) //SKYRAT EDIT ORIGINAL : new /obj/item/mayhem(src) + new /obj/item/bloodcrawl_bottle(src) //NOVA EDIT ORIGINAL : new /obj/item/mayhem(src) if(2) new /obj/item/soulscythe(src) diff --git a/code/modules/mining/lavaland/tendril_loot.dm b/code/modules/mining/lavaland/tendril_loot.dm index 28c51a38c86b2d..72d89d55b69bf1 100644 --- a/code/modules/mining/lavaland/tendril_loot.dm +++ b/code/modules/mining/lavaland/tendril_loot.dm @@ -197,14 +197,14 @@ continue regurgitate_guardian(guardian) -/obj/item/clothing/neck/necklace/memento_mori/proc/consume_guardian(mob/living/simple_animal/hostile/guardian/guardian) +/obj/item/clothing/neck/necklace/memento_mori/proc/consume_guardian(mob/living/basic/guardian/guardian) new /obj/effect/temp_visual/guardian/phase/out(get_turf(guardian)) guardian.locked = TRUE guardian.forceMove(src) to_chat(guardian, span_userdanger("You have been locked away in your summoner's pendant!")) guardian.playsound_local(get_turf(guardian), 'sound/magic/summonitems_generic.ogg', 50, TRUE) -/obj/item/clothing/neck/necklace/memento_mori/proc/regurgitate_guardian(mob/living/simple_animal/hostile/guardian/guardian) +/obj/item/clothing/neck/necklace/memento_mori/proc/regurgitate_guardian(mob/living/basic/guardian/guardian) guardian.locked = FALSE guardian.recall(forced = TRUE) to_chat(guardian, span_notice("You have been returned back from your summoner's pendant!")) @@ -538,8 +538,11 @@ . = ..() if(!ishuman(exposed_mob) || exposed_mob.stat == DEAD) return + if(!(methods & (INGEST | TOUCH))) + return var/mob/living/carbon/human/exposed_human = exposed_mob - if(!HAS_TRAIT(exposed_human, TRAIT_CAN_USE_FLIGHT_POTION) || reac_volume < 5 || !exposed_human.dna) + var/obj/item/bodypart/chest/chest = exposed_human.get_bodypart(BODY_ZONE_CHEST) + if(!chest.wing_types || reac_volume < 5 || !exposed_human.dna) if((methods & INGEST) && show_message) to_chat(exposed_human, span_notice("You feel nothing but a terrible aftertaste.")) return @@ -547,23 +550,23 @@ to_chat(exposed_human, span_userdanger("A terrible pain travels down your back as your wings change shape!")) else to_chat(exposed_human, span_userdanger("A terrible pain travels down your back as wings burst out!")) - var/obj/item/organ/external/wings/functional/wings = get_wing_choice(exposed_human) + var/obj/item/organ/external/wings/functional/wings = get_wing_choice(exposed_human, chest) wings = new wings() wings.Insert(exposed_human) exposed_human.dna.species.handle_mutant_bodyparts(exposed_human) playsound(exposed_human.loc, 'sound/items/poster_ripped.ogg', 50, TRUE, -1) - exposed_human.adjustBruteLoss(20) + exposed_human.apply_damage(20, def_zone = BODY_ZONE_CHEST, forced = TRUE, wound_bonus = CANT_WOUND) exposed_human.emote("scream") -/datum/reagent/flightpotion/proc/get_wing_choice(mob/living/carbon/human/needs_wings) - var/list/wing_types = needs_wings.dna.species.wing_types.Copy() +/datum/reagent/flightpotion/proc/get_wing_choice(mob/needs_wings, obj/item/bodypart/chest/chest) + var/list/wing_types = chest.wing_types.Copy() if(wing_types.len == 1 || !needs_wings.client) return wing_types[1] var/list/radial_wings = list() var/list/name2type = list() for(var/obj/item/organ/external/wings/functional/possible_type as anything in wing_types) var/datum/sprite_accessory/accessory = initial(possible_type.sprite_accessory_override) //get the type - accessory = GLOB.sprite_accessories[initial(accessory.key)][initial(accessory.name)] //SKYRAT EDIT CHANGE - ORIGINAL: accessory = GLOB.wings_list[initial(accessory.name)] //get the singleton instance + accessory = GLOB.sprite_accessories[initial(accessory.key)][initial(accessory.name)] //NOVA EDIT CHANGE - ORIGINAL: accessory = GLOB.wings_list[initial(accessory.name)] //get the singleton instance var/image/img = image(icon = accessory.icon, icon_state = "m_wingsopen_[accessory.icon_state]_BEHIND") //Process the HUD elements img.transform *= 0.5 img.pixel_x = -32 @@ -588,10 +591,10 @@ var/turf/T = get_turf(src) var/ladder_x = T.x var/ladder_y = T.y - to_chat(user, span_notice("You unfold the ladder. It does some unknowable, eldritch twisting and turning in a dance of form, seeming to invert and fold into itself - before a satisfying click rings out.")) //Skyrat Edit - Attempts to explain why it sometimes just 'dissapears' on some z-levels. + to_chat(user, span_notice("You unfold the ladder. It does some unknowable, eldritch twisting and turning in a dance of form, seeming to invert and fold into itself - before a satisfying click rings out.")) //NOVA EDIT - Attempts to explain why it sometimes just 'dissapears' on some z-levels. var/last_ladder = null for(var/i in 1 to world.maxz) - if(is_centcom_level(i) || is_reserved_level(i) || is_away_level(i) || is_spaceruins_level(i)) //Skyrat Edit: Stops Jacob's ladder from piercing problematic space ruins. + if(is_centcom_level(i) || is_reserved_level(i) || is_away_level(i) || is_spaceruins_level(i)) //NOVA EDIT: Stops Jacob's ladder from piercing problematic space ruins. continue var/turf/T2 = locate(ladder_x, ladder_y, i) last_ladder = new /obj/structure/ladder/unbreakable/jacob(T2, null, last_ladder) @@ -660,7 +663,7 @@ icon_state = "berserker" icon = 'icons/obj/clothing/suits/armor.dmi' worn_icon = 'icons/mob/clothing/suits/armor.dmi' - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suit_digi.dmi' + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suit_digi.dmi' hoodtype = /obj/item/clothing/head/hooded/berserker armor_type = /datum/armor/hooded_berserker cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS @@ -1000,8 +1003,8 @@ return ..() /obj/item/cursed_katana/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) - if(attack_type == PROJECTILE_ATTACK) - final_block_chance = 0 //Don't bring a sword to a gunfight + if(attack_type == PROJECTILE_ATTACK || attack_type == LEAP_ATTACK) + final_block_chance = 0 //Don't bring a sword to a gunfight, and also you aren't going to really block someone full body tackling you with a sword return ..() /obj/item/cursed_katana/proc/can_combo_attack(mob/user, mob/living/target) diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 4f28db93bc6e45..f4510741968247 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -70,6 +70,7 @@ icon = 'icons/obj/machines/mining_machines.dmi' icon_state = "console" density = TRUE + interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON|INTERACT_MACHINE_SET_MACHINE /// Connected ore processing machine. var/obj/machinery/mineral/processing_unit/processing_machine @@ -158,7 +159,7 @@ /datum/component/material_container, \ allowed_materials, \ INFINITY, \ - MATCONTAINER_EXAMINE | BREAKDOWN_FLAGS_ORE_PROCESSOR, \ + MATCONTAINER_EXAMINE, \ allowed_items = /obj/item/stack \ ) if(!GLOB.autounlock_techwebs[/datum/techweb/autounlocking/smelter]) @@ -175,11 +176,11 @@ /obj/machinery/mineral/processing_unit/proc/process_ore(obj/item/stack/ore/O) if(QDELETED(O)) return - var/material_amount = materials.get_item_material_amount(O, BREAKDOWN_FLAGS_ORE_PROCESSOR) + var/material_amount = materials.get_item_material_amount(O) if(!materials.has_space(material_amount)) unload_mineral(O) else - materials.insert_item(O, breakdown_flags = BREAKDOWN_FLAGS_ORE_PROCESSOR) + materials.insert_item(O) if(mineral_machine) mineral_machine.updateUsrDialog() diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index ce045a81298531..cfa8203615e7e4 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -52,12 +52,22 @@ if(!GLOB.autounlock_techwebs[/datum/techweb/autounlocking/smelter]) GLOB.autounlock_techwebs[/datum/techweb/autounlocking/smelter] = new /datum/techweb/autounlocking/smelter stored_research = GLOB.autounlock_techwebs[/datum/techweb/autounlocking/smelter] - materials = AddComponent( + + //mat_container_signals is for reedeming points from local storage if silo is not required + var/list/local_signals = null + if(!requires_silo) + local_signals = list( + COMSIG_MATCONTAINER_ITEM_CONSUMED = TYPE_PROC_REF(/obj/machinery/mineral/ore_redemption, local_redeem_points) + ) + materials = AddComponent( \ /datum/component/remote_materials, \ mapload, \ - mat_container_flags = BREAKDOWN_FLAGS_ORM \ + mat_container_signals = local_signals \ ) + //for reedeming points from items inserted into ore silo + RegisterSignal(src, COMSIG_SILO_ITEM_CONSUMED, TYPE_PROC_REF(/obj/machinery/mineral/ore_redemption, silo_redeem_points)) + /obj/machinery/mineral/ore_redemption/Destroy() stored_research = null materials = null @@ -68,34 +78,17 @@ if(panel_open) . += span_notice("Alt-click to rotate the input and output direction.") -/// Turns ore into its refined type, and sends it to its material container -/obj/machinery/mineral/ore_redemption/proc/smelt_ore(obj/item/stack/ore/gathered_ore) - if(QDELETED(gathered_ore)) - return - var/datum/component/material_container/mat_container = materials.mat_container - if (!mat_container) - return - - if(gathered_ore.refined_type == null) - return - var/material_amount = mat_container.get_item_material_amount(gathered_ore, BREAKDOWN_FLAGS_ORM) +/obj/machinery/mineral/ore_redemption/proc/silo_redeem_points(obj/machinery/mineral/ore_redemption/machine, container, obj/item/stack/ore/gathered_ore) + SIGNAL_HANDLER - if(!material_amount) - qdel(gathered_ore) //no materials, incinerate it + local_redeem_points(container, gathered_ore) - else if(!mat_container.has_space(material_amount * gathered_ore.amount)) //if there is no space, eject it - unload_mineral(gathered_ore) +/obj/machinery/mineral/ore_redemption/proc/local_redeem_points(container, obj/item/stack/ore/gathered_ore) + SIGNAL_HANDLER - else - var/ore_amount = gathered_ore.amount - var/ore_points= gathered_ore.points - var/refined_type = gathered_ore?.refined_type - if(mat_container.insert_item(gathered_ore, ore_multiplier, breakdown_flags = BREAKDOWN_FLAGS_ORM, context = src) > 0) //increase points only if insertion was successfull - if(refined_type) - points += ore_points * point_upgrade * ore_amount - - SEND_SIGNAL(src, COMSIG_ORM_COLLECTED_ORE) + if(istype(gathered_ore) && gathered_ore.refined_type) + points += gathered_ore.points * point_upgrade * gathered_ore.amount /// Returns the amount of a specific alloy design, based on the accessible materials /obj/machinery/mineral/ore_redemption/proc/can_smelt_alloy(datum/design/D) @@ -124,11 +117,6 @@ return build_amount -/// Smelts the passed ores one by one -/obj/machinery/mineral/ore_redemption/proc/process_ores(list/ores_to_process) - for(var/ore in ores_to_process) - smelt_ore(ore) - /// Sends a message to the request consoles that signed up for ore updates /obj/machinery/mineral/ore_redemption/proc/send_console_message() var/datum/component/material_container/mat_container = materials.mat_container @@ -169,15 +157,27 @@ if(!materials.mat_container || panel_open || !powered()) return + //gethering the ore + var/list/obj/item/stack/ore/ore_list = list() if(istype(target, /obj/structure/ore_box)) var/obj/structure/ore_box/box = target - process_ores(box.contents) + for(var/obj/item/stack/ore/ore_item in box.contents) + ore_list += ore_item else if(istype(target, /obj/item/stack/ore)) - var/obj/item/stack/ore/O = target - smelt_ore(O) + ore_list += target else return + //smelting the ore + for(var/obj/item/stack/ore/gathered_ore as anything in ore_list) + if(isnull(gathered_ore.refined_type)) + continue + + if(materials.insert_item(gathered_ore, ore_multiplier) <= 0) + unload_mineral(gathered_ore) //if rejected unload + + SEND_SIGNAL(src, COMSIG_ORM_COLLECTED_ORE) + if(!console_notify_timer) // gives 5 seconds for a load of ores to be sucked up by the ORM before it sends out request console notifications. This should be enough time for most deposits that people make console_notify_timer = addtimer(CALLBACK(src, PROC_REF(send_console_message)), 5 SECONDS) @@ -191,28 +191,17 @@ else unregister_input_turf() // someone just un-wrenched us, unregister the turf -/obj/machinery/mineral/ore_redemption/wrench_act(mob/living/user, obj/item/tool) - . = ..() - default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS - -/obj/machinery/mineral/ore_redemption/attackby(obj/item/W, mob/user, params) - if(default_deconstruction_screwdriver(user, "ore_redemption-open", "ore_redemption", W)) - return - if(default_deconstruction_crowbar(W)) - return +/obj/machinery/mineral/ore_redemption/screwdriver_act(mob/living/user, obj/item/tool) + default_deconstruction_screwdriver(user, "ore_redemption-open", "ore_redemption", tool) + return ITEM_INTERACT_SUCCESS - if(!powered()) - return ..() +/obj/machinery/mineral/ore_redemption/crowbar_act(mob/living/user, obj/item/tool) + default_deconstruction_crowbar(tool) + return ITEM_INTERACT_SUCCESS - var/obj/item/stack/ore/O = W - if(istype(O)) - if(isnull(O.refined_type)) - to_chat(user, span_warning("[O] has already been refined!")) - return - smelt_ore(O) - return TRUE - return ..() +/obj/machinery/mineral/ore_redemption/wrench_act(mob/living/user, obj/item/tool) + default_unfasten_wrench(user, tool) + return ITEM_INTERACT_SUCCESS /obj/machinery/mineral/ore_redemption/AltClick(mob/living/user) . = ..() @@ -317,21 +306,26 @@ var/datum/component/material_container/mat_container = materials.mat_container switch(action) if("Claim") + //requires silo but silo not in range + if(requires_silo && !materials.check_z_level()) + return FALSE + + //no ID var/obj/item/card/id/user_id_card if(isliving(usr)) var/mob/living/user = usr user_id_card = user.get_idcard(TRUE) - if(!materials.check_z_level() && (requires_silo || !user_id_card.registered_account.replaceable)) - return TRUE + if(isnull(user_id_card)) + to_chat(usr, span_warning("No valid ID detected.")) + return FALSE + + //we have points if(points) - if(user_id_card) - user_id_card.registered_account.mining_points += points - points = 0 - else - to_chat(usr, span_warning("No valid ID detected.")) - else - to_chat(usr, span_warning("No points to claim.")) - return TRUE + user_id_card.registered_account.mining_points += points + points = 0 + return TRUE + + return FALSE if("Release") if(!mat_container) return @@ -422,4 +416,3 @@ . += ore_output . += light_in . += light_out - diff --git a/code/modules/mining/machine_silo.dm b/code/modules/mining/machine_silo.dm index 840c8e92900a89..dcc85dc1c1cc55 100644 --- a/code/modules/mining/machine_silo.dm +++ b/code/modules/mining/machine_silo.dm @@ -8,6 +8,7 @@ GLOBAL_LIST_EMPTY(silo_access_logs) icon_state = "silo" density = TRUE circuit = /obj/item/circuitboard/machine/ore_silo + interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON|INTERACT_MACHINE_SET_MACHINE /// The machine UI's page of logs showing ore history. var/log_page = 1 @@ -38,7 +39,7 @@ GLOBAL_LIST_EMPTY(silo_access_logs) materials_list, \ INFINITY, \ container_signals = list( \ - COMSIG_MATCONTAINER_ITEM_CONSUMED = TYPE_PROC_REF(/obj/machinery/ore_silo, log_item_consumed), \ + COMSIG_MATCONTAINER_ITEM_CONSUMED = TYPE_PROC_REF(/obj/machinery/ore_silo, on_item_consumed), \ COMSIG_MATCONTAINER_SHEETS_RETRIEVED = TYPE_PROC_REF(/obj/machinery/ore_silo, log_sheets_ejected), \ ), \ allowed_items = /obj/item/stack \ @@ -58,11 +59,13 @@ GLOBAL_LIST_EMPTY(silo_access_logs) return ..() -/obj/machinery/ore_silo/proc/log_item_consumed(datum/component/material_container/container, obj/item/item_inserted, last_inserted_id, mats_consumed, amount_inserted, atom/context) +/obj/machinery/ore_silo/proc/on_item_consumed(datum/component/material_container/container, obj/item/item_inserted, last_inserted_id, mats_consumed, amount_inserted, atom/context) SIGNAL_HANDLER silo_log(context, "deposited", amount_inserted, item_inserted.name, mats_consumed) + SEND_SIGNAL(context, COMSIG_SILO_ITEM_CONSUMED, container, item_inserted, last_inserted_id, mats_consumed, amount_inserted) + /obj/machinery/ore_silo/proc/log_sheets_ejected(datum/component/material_container/container, obj/item/stack/sheet/sheets, atom/context) SIGNAL_HANDLER diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index ef5df0e8e3494b..f1a661e6a48818 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -30,7 +30,7 @@ /obj/structure/closet/wardrobe/miner name = "mining wardrobe" - icon_door = "mixed" + icon_door = "mining_wardrobe" /obj/structure/closet/wardrobe/miner/PopulateContents() new /obj/item/storage/backpack/duffelbag/explorer(src) @@ -51,7 +51,7 @@ new /obj/item/clothing/suit/hooded/wintercoat/miner(src) /obj/structure/closet/secure_closet/miner - name = "miner's equipment" + name = "miner's equipment locker" icon_state = "mining" req_access = list(ACCESS_MINING) @@ -103,6 +103,13 @@ if (HAS_TRAIT(user, TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION) && !is_station_level(user.z)) to_chat(user, span_warning("You get the feeling you shouldn't mess with this.")) return + + if(isliving(user)) + var/mob/living/living_user = user + for(var/obj/item/implant/exile/exile_implant in living_user.implants) + to_chat(living_user, span_warning("A warning flashes across the screen, and the shuttle controls lock in response to your exile implant.")) + return + return ..() /obj/machinery/computer/shuttle/mining/common diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index bea2570fc4e718..0b499f590d6683 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -298,7 +298,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ attacher = key_name(user) user.balloon_alert_to_viewers("attached rig") return - + if(I.tool_behaviour == TOOL_WRENCH && rig) rig.on_found() if(QDELETED(src)) @@ -410,7 +410,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ icon = 'icons/obj/economy.dmi' name = "coin" icon_state = "coin" - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY force = 1 throwforce = 2 w_class = WEIGHT_CLASS_TINY diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm index 564ec2e92b028f..607bbcd9f06d87 100644 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ b/code/modules/mining/satchel_ore_boxdm.dm @@ -83,8 +83,6 @@ return if(!Adjacent(usr)) return - add_fingerprint(usr) - usr.set_machine(src) switch(action) if("removeall") dump_box_contents() diff --git a/code/modules/mob/dead/new_player/latejoin_menu.dm b/code/modules/mob/dead/new_player/latejoin_menu.dm index 059a5014d0c66d..992f05134237d1 100644 --- a/code/modules/mob/dead/new_player/latejoin_menu.dm +++ b/code/modules/mob/dead/new_player/latejoin_menu.dm @@ -148,12 +148,12 @@ GLOBAL_DATUM_INIT(latejoin_menu, /datum/latejoin_menu, new) tgui_alert(owner, "There is an administrative lock on entering the game for non-observers!", "Oh No!") return TRUE - // SKYRAT EDIT ADDITION START - Flavourtext requirement + // NOVA EDIT ADDITION START - Flavourtext requirement if(CONFIG_GET(flag/min_flavor_text)) if(length_char(owner.client.prefs.read_preference(/datum/preference/text/flavor_text)) < CONFIG_GET(number/flavor_text_character_requirement)) to_chat(owner, span_notice("You need at least [CONFIG_GET(number/flavor_text_character_requirement)] characters of flavor text to join the round. You have [length_char(owner.client.prefs.read_preference(/datum/preference/text/flavor_text))] characters.")) return - // SKYRAT EDIT END + // NOVA EDIT END //Determines Relevent Population Cap var/relevant_cap diff --git a/code/modules/mob/dead/new_player/login.dm b/code/modules/mob/dead/new_player/login.dm index 91aa6b932e9275..96139298d0c412 100644 --- a/code/modules/mob/dead/new_player/login.dm +++ b/code/modules/mob/dead/new_player/login.dm @@ -32,11 +32,11 @@ if(GLOB.admin_notice) to_chat(src, span_notice("Admin Notice:\n \t [GLOB.admin_notice]")) - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION var/soft_player_cap = CONFIG_GET(number/player_soft_cap) if(soft_player_cap >= TGS_CLIENT_COUNT) INVOKE_ASYNC(src, PROC_REF(connect_to_second_server)) - //SKYRAT EDIT END + //NOVA EDIT END var/spc = CONFIG_GET(number/soft_popcap) if(spc && living_player_count() >= spc) diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 5c07c8c8fd405e..c10c027bc3d75b 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -5,7 +5,7 @@ invisibility = INVISIBILITY_ABSTRACT density = FALSE stat = DEAD - //hud_type = /datum/hud/new_player SKYRAT EDIT REMOVAL + //hud_type = /datum/hud/new_player NOVA EDIT REMOVAL hud_possible = list() var/ready = FALSE @@ -74,13 +74,13 @@ if(SSlag_switch.measures[DISABLE_DEAD_KEYLOOP]) less_input_message = " - Notice: Observer freelook is currently disabled." // Don't convert this to tgui please, it's way too important - var/this_is_like_playing_right = alert(usr, "Are you sure you wish to observe?[less_input_message]", "Observe", "Yes", "No") //SKYRAT EDIT CHANGE + var/this_is_like_playing_right = alert(usr, "Are you sure you wish to observe?[less_input_message]", "Observe", "Yes", "No") //NOVA EDIT CHANGE if(QDELETED(src) || !src.client || this_is_like_playing_right != "Yes") ready = PLAYER_NOT_READY - show_title_screen() // SKYRAT EDIT ADDITION + show_title_screen() // NOVA EDIT ADDITION return FALSE - hide_title_screen() // SKYRAT EDIT ADDITION - Skyrat Titlescreen + hide_title_screen() // NOVA EDIT ADDITION - Skyrat Titlescreen var/mob/dead/observer/observer = new() spawning = TRUE @@ -121,7 +121,7 @@ return "Your account is not old enough for [jobtitle]." if(JOB_UNAVAILABLE_SLOTFULL) return "[jobtitle] is already filled to capacity." - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(JOB_NOT_VETERAN) return "You need to be veteran to join as [jobtitle]." if(JOB_UNAVAILABLE_QUIRK) @@ -134,7 +134,7 @@ return "[jobtitle] requires you to have flavour text for your character." if(JOB_UNAVAILABLE_AUGMENT) return "[jobtitle] is restricted due to your selected body augments." - //SKYRAT EDIT END + //NOVA EDIT END if(JOB_UNAVAILABLE_ANTAG_INCOMPAT) return "[jobtitle] is not compatible with some antagonist role assigned to you." if(JOB_UNAVAILABLE_AGE) @@ -162,7 +162,7 @@ if(latejoin && !job.special_check_latejoin(client)) return JOB_UNAVAILABLE_GENERIC - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(!job.has_required_languages(client.prefs)) return JOB_UNAVAILABLE_LANGUAGE if(job.has_banned_quirk(client.prefs)) @@ -171,7 +171,7 @@ return JOB_NOT_VETERAN if(job.has_banned_species(client.prefs)) return JOB_UNAVAILABLE_SPECIES - //SKYRAT EDIT END + //NOVA EDIT END return JOB_AVAILABLE @@ -205,7 +205,7 @@ tgui_alert(usr, "There was an unexpected error putting you into your requested job. If you cannot join with any job, you should contact an admin.") return FALSE - hide_title_screen()// SKYRAT EDIT ADDITION + hide_title_screen()// NOVA EDIT ADDITION mind.late_joiner = TRUE var/atom/destination = mind.assigned_role.get_latejoin_spawn_point() if(!destination) @@ -226,7 +226,7 @@ // If we already have a captain, are they a "Captain" rank and are we allowing multiple of them to be assigned? if(is_captain_job(job)) is_captain = IS_FULL_CAPTAIN - captain_sound = ANNOUNCER_DEPARTMENTAL // SKYRAT EDIT CHANGE - Announcer Sounds + captain_sound = ANNOUNCER_DEPARTMENTAL // NOVA EDIT CHANGE - Announcer Sounds // If we don't have an assigned cap yet, check if this person qualifies for some from of captaincy. else if(!SSjob.assigned_captain && ishuman(character) && SSjob.chain_of_command[rank] && !is_banned_from(ckey, list(JOB_CAPTAIN))) is_captain = IS_ACTING_CAPTAIN @@ -244,19 +244,19 @@ humanc = character //Let's retypecast the var to be human, if(humanc) //These procs all expect humans - // BEGIN SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - var/chosen_rank = humanc.client?.prefs.alt_job_titles[rank] || rank + // BEGIN NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES + var/chosen_rank = humanc.client?.prefs.alt_job_titles?[rank] || rank GLOB.manifest.inject(humanc, humanc.client) if(SSshuttle.arrivals) SSshuttle.arrivals.QueueAnnounce(humanc, chosen_rank) else announce_arrival(humanc, chosen_rank) - // END SKYRAT EDIT CHANGE - customization + // END NOVA EDIT CHANGE - customization AddEmploymentContract(humanc) humanc.increment_scar_slot() humanc.load_persistent_scars() - SSpersistence.load_modular_persistence(humanc.get_organ_slot(ORGAN_SLOT_BRAIN)) // SKYRAT EDIT ADDITION - MODULAR_PERSISTENCE + SSpersistence.load_modular_persistence(humanc.get_organ_slot(ORGAN_SLOT_BRAIN)) // NOVA EDIT ADDITION - MODULAR_PERSISTENCE if(GLOB.curse_of_madness_triggered) give_madness(humanc, GLOB.curse_of_madness_triggered) @@ -267,23 +267,23 @@ if(SSshuttle.emergency) switch(SSshuttle.emergency.mode) if(SHUTTLE_RECALL, SHUTTLE_IDLE) - SSticker.mode.make_antag_chance(humanc) + SSdynamic.make_antag_chance(humanc) if(SHUTTLE_CALL) if(SSshuttle.emergency.timeLeft(1) > initial(SSshuttle.emergency_call_time)*0.5) - SSticker.mode.make_antag_chance(humanc) + SSdynamic.make_antag_chance(humanc) if((job.job_flags & JOB_ASSIGN_QUIRKS) && humanc && CONFIG_GET(flag/roundstart_traits)) SSquirks.AssignQuirks(humanc, humanc.client) log_manifest(character.mind.key,character.mind,character,latejoin = TRUE) - // SKYRAT EDIT ADDITION START + // NOVA EDIT ADDITION START if(humanc) for(var/datum/loadout_item/item as anything in loadout_list_to_datums(humanc?.client?.prefs?.loadout_list)) if (item.restricted_roles && length(item.restricted_roles) && !(job.title in item.restricted_roles)) continue item.post_equip_item(humanc.client?.prefs, humanc) - // SKYRAT EDIT END + // NOVA EDIT END /mob/dead/new_player/proc/AddEmploymentContract(mob/living/carbon/human/employee) //TODO: figure out a way to exclude wizards/nukeops/demons from this. @@ -296,7 +296,7 @@ /mob/dead/new_player/proc/create_character(atom/destination) spawning = TRUE - hide_title_screen() // SKYRAT EDIT ADDITION - titlescreen + hide_title_screen() // NOVA EDIT ADDITION - titlescreen mind.active = FALSE //we wish to transfer the key manually var/mob/living/spawning_mob = mind.assigned_role.get_spawn_mob(client, destination) diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index a1c7c0371b0004..9e9a58e8032185 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -61,8 +61,9 @@ var/list/blacklist = bl if(!(picked_quirk in blacklist)) continue - for(var/iterator_quirk in all_quirks) //Go through all the quirks we've already selected to see if theres a blacklist match - if((iterator_quirk in blacklist) && !(iterator_quirk == picked_quirk)) //two quirks have lined up in the list of the list of quirks that conflict with each other, so return (see quirks.dm for more details) + for(var/quirk_name in all_quirks) //Go through all the quirks we've already selected to see if theres a blacklist match + var/selected_quirk = SSquirks.quirks[quirk_name] + if((selected_quirk in blacklist) && !(selected_quirk == picked_quirk)) //two quirks have lined up in the list of the list of quirks that conflict with each other, so return (see quirks.dm for more details) picked_quirk_blacklisted = TRUE break if(picked_quirk_blacklisted) @@ -92,7 +93,7 @@ highest_pref = job_preferences[job] return preview_job -/* SKYRAT EDIT REMOVE - MOVED TO MASTER FILES +/* NOVA EDIT REMOVE - MOVED TO MASTER FILES /datum/preferences/proc/render_new_preview_appearance(mob/living/carbon/human/dummy/mannequin) var/datum/job/preview_job = get_highest_priority_job() mannequin.dna.mutant_bodyparts = list() diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 9959c0e61c2ac3..86c0da5acf77a5 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -151,6 +151,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) SSpoints_of_interest.make_point_of_interest(src) ADD_TRAIT(src, TRAIT_HEAR_THROUGH_DARKNESS, ref(src)) + ADD_TRAIT(src, TRAIT_SECURITY_HUD, ref(src)) /mob/dead/observer/get_photo_description(obj/item/camera/camera) if(!invisibility || camera.see_ghosts) @@ -171,10 +172,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() @@ -304,7 +305,13 @@ Works together with spawning an observer, noted above. ghost.client?.init_verbs() if(!can_reenter_corpse)// Disassociates observer mind from the body mind ghost.mind = null - ghost.client?.player_details.time_of_death = ghost.mind?.current ? mind.current.timeofdeath : world.time + + var/recordable_time = world.time + var/mob/living/former_mob = ghost.mind?.current + if(isliving(former_mob)) + recordable_time = former_mob.timeofdeath + + ghost.client?.player_details.time_of_death = recordable_time SEND_SIGNAL(src, COMSIG_MOB_GHOSTIZED) return ghost @@ -328,11 +335,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!HAS_TRAIT(src, TRAIT_CORPSELOCKED)) //corpse-locked have to confirm with the alert below ghostize(TRUE) return TRUE - // SKYRAT EDIT ADDITION -- Free Ghost Cafe Ghosting + // NOVA EDIT ADDITION -- Free Ghost Cafe Ghosting if(HAS_TRAIT(src, TRAIT_FREE_GHOST)) ghostize(TRUE) // Can return with TRUE return TRUE - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END var/response = tgui_alert(usr, "Are you sure you want to ghost? If you ghost whilst still alive you cannot re-enter your body!", "Confirm Ghost Observe", list("Ghost", "Stay in Body")) if(response != "Ghost") return FALSE//didn't want to ghost after-all @@ -387,7 +394,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!mind || QDELETED(mind.current)) to_chat(src, span_warning("You have no body.")) return - if(!can_reenter_corpse && !mind.has_antag_datum(/datum/antagonist/changeling)) //SKYRAT EDIT + if(!can_reenter_corpse && !mind.has_antag_datum(/datum/antagonist/changeling)) //NOVA EDIT to_chat(src, span_warning("You cannot re-enter your body.")) return if(mind.current.key && mind.current.key[1] != "@") //makes sure we don't accidentally kick any clients @@ -420,13 +427,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp // Update med huds current_mob.med_hud_set_status() current_mob.log_message("had their player ([key_name(src)]) do-not-resuscitate / DNR", LOG_GAME, color = COLOR_GREEN, log_globally = FALSE) - //SKYRAT EDIT ADDITION - DNR TRAIT (Technically this is just to fix ghost-DNR'ing not actually DNR'ing, but it pairs with the trait so) + //NOVA EDIT ADDITION - DNR TRAIT (Technically this is just to fix ghost-DNR'ing not actually DNR'ing, but it pairs with the trait so) if(!current_mob.has_quirk(/datum/quirk/dnr)) current_mob.add_quirk(/datum/quirk/dnr) var/datum/job/job_to_free = SSjob.GetJob(current_mob.mind.assigned_role.title) if(job_to_free) job_to_free.current_positions = max(0, job_to_free.current_positions - 1) - //SKYRAT EDIT ADDITION END - DNR TRAIT + //NOVA EDIT ADDITION END - DNR TRAIT log_message("has opted to do-not-resuscitate / DNR from their body ([current_mob])", LOG_GAME, color = COLOR_GREEN) // Disassociates observer mind from the body mind @@ -435,19 +442,19 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(src, span_boldnotice("You can no longer be brought back into your body.")) return TRUE -/mob/dead/observer/proc/notify_cloning(message, sound, atom/source, flashwindow = TRUE) +/mob/dead/observer/proc/send_revival_notification(message, sound, atom/source, flashwindow) if(flashwindow) window_flash(client) if(message) to_chat(src, span_ghostalert("[message]")) if(source) - var/atom/movable/screen/alert/A = throw_alert("[REF(source)]_notify_cloning", /atom/movable/screen/alert/notify_cloning) + var/atom/movable/screen/alert/A = throw_alert("[REF(source)]_revival", /atom/movable/screen/alert/revival) if(A) var/ui_style = client?.prefs?.read_preference(/datum/preference/choiced/ui_style) - var/erp_ui_style = client?.prefs?.read_preference(/datum/preference/choiced/ui_style) //SKYRAT EDIT - ADDITION - ERP ICONS FIX + var/erp_ui_style = client?.prefs?.read_preference(/datum/preference/choiced/ui_style) //NOVA EDIT - ADDITION - ERP ICONS FIX if(ui_style) A.icon = ui_style2icon(ui_style) - A.icon = erp_ui_style2icon(erp_ui_style) //SKYRAT EDIT - ADDITION - ERP ICONS FIX + A.icon = erp_ui_style2icon(erp_ui_style) //NOVA EDIT - ADDITION - ERP ICONS FIX A.desc = message var/old_layer = source.layer var/old_plane = source.plane @@ -756,17 +763,33 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp reenter_corpse() return - if(href_list["jump"]) - var/atom/movable/target = locate(href_list["jump"]) - var/turf/target_turf = get_turf(target) - if(target_turf && isturf(target_turf)) - abstract_move(target_turf) + if(href_list["view"]) + var/atom/target = locate(href_list["view"]) + observer_view(target) + return if(href_list["play"]) var/atom/movable/target = locate(href_list["play"]) - if(istype(target) && (target != src)) - target.attack_ghost(usr) - return + jump_to_interact(target) + +/// We orbit and interact with the target +/mob/dead/observer/proc/jump_to_interact(atom/target) + if(isnull(target) || target == src) + return + + ManualFollow(target) + target.attack_ghost(usr) + +/// We orbit the target or jump if its a turf +/mob/dead/observer/proc/observer_view(atom/target) + if(isnull(target) || target == src) + return + + if(isturf(target)) + abstract_move(target) + return + + ManualFollow(target) //We don't want to update the current var //But we will still carry a mind. diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index 0688778b04840e..1bb8e61ef2b9a3 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/inventory.dm b/code/modules/mob/inventory.dm index 4660a1b0546510..774f4c893f5168 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -119,7 +119,7 @@ //To appropriately fluff things like "they are holding [I] in their [get_held_index_name(get_held_index_of_item(I))]" //Can be overridden to pass off the fluff to something else (eg: science allowing people to add extra robotic limbs, and having this proc react to that -// with say "they are holding [I] in their Nanotrasen Brand Utility Arm - Right Edition" or w/e +// with say "they are holding [I] in their Symphionia Brand Utility Arm - Right Edition" or w/e /mob/proc/get_held_index_name(i) var/list/hand = list() if(i > 2) @@ -485,6 +485,19 @@ DEFAULT_QUEUE_OR_CALL_VERB(VERB_CALLBACK(src, PROC_REF(execute_quick_equip))) +/// Safely drop everything, without deconstructing the mob +/mob/proc/drop_everything(del_on_drop, force, del_if_nodrop) + . = list() + for(var/obj/item/item in src) + if(!dropItemToGround(item, force)) + if(del_if_nodrop && !(item.item_flags & ABSTRACT)) + qdel(item) + if(del_on_drop) + qdel(item) + //Anything thats not deleted and isn't in the mob, so everything that is succesfully dropped to the ground, is returned + if(!QDELETED(item) && !(item in src)) + . += item + ///proc extender of [/mob/verb/quick_equip] used to make the verb queuable if the server is overloaded /mob/proc/execute_quick_equip() var/obj/item/I = get_active_held_item() @@ -505,8 +518,6 @@ /mob/proc/getBeltSlot() return ITEM_SLOT_BELT - - //Inventory.dm is -kind of- an ok place for this I guess //This is NOT for dismemberment, as the user still technically has 2 "hands" @@ -544,14 +555,21 @@ ..() //Don't redraw hands until we have organs for them //GetAllContents that is reasonable and not stupid -/mob/living/carbon/proc/get_all_gear() +/mob/living/proc/get_all_gear() var/list/processing_list = get_equipped_items(include_pockets = TRUE, include_accessories = TRUE) + held_items list_clear_nulls(processing_list) // handles empty hands var/i = 0 - while(i < length(processing_list) ) + while(i < length(processing_list)) var/atom/A = processing_list[++i] if(A.atom_storage) var/list/item_stuff = list() A.atom_storage.return_inv(item_stuff) processing_list += item_stuff return processing_list + +/// Returns a list of things that the provided mob has, including any storage-capable implants. +/mob/living/proc/gather_belongings() + var/list/belongings = get_all_gear() + for (var/obj/item/implant/storage/internal_bag in implants) + belongings += internal_bag.contents + return belongings diff --git a/code/modules/mob/living/basic/basic.dm b/code/modules/mob/living/basic/basic.dm index 4ad94270837eaf..bb14669e4edffd 100644 --- a/code/modules/mob/living/basic/basic.dm +++ b/code/modules/mob/living/basic/basic.dm @@ -42,9 +42,7 @@ var/environment_smash = ENVIRONMENT_SMASH_STRUCTURES /// 1 for full damage, 0 for none, -1 for 1:1 heal from that source. - var/list/damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) - ///Minimum force required to deal any damage. - var/force_threshold = 0 + var/list/damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1) ///Verbs used for speaking e.g. "Says" or "Chitters". This can be elementized var/list/speak_emote = list() @@ -208,7 +206,7 @@ face_atom(target) if (!ignore_cooldown) changeNext_move(melee_attack_cooldown) - if(SEND_SIGNAL(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, target) & COMPONENT_HOSTILE_NO_ATTACK) + if(SEND_SIGNAL(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, target, Adjacent(target), modifiers) & COMPONENT_HOSTILE_NO_ATTACK) return FALSE //but more importantly return before attack_animal called var/result = target.attack_basic_mob(src, modifiers) SEND_SIGNAL(src, COMSIG_HOSTILE_POST_ATTACKINGTARGET, target, result) diff --git a/code/modules/mob/living/basic/basic_defense.dm b/code/modules/mob/living/basic/basic_defense.dm index 3fe35bcd266de9..69370ed49bea00 100644 --- a/code/modules/mob/living/basic/basic_defense.dm +++ b/code/modules/mob/living/basic/basic_defense.dm @@ -11,40 +11,58 @@ var/shove_dir = get_dir(user, src) if(!Move(get_step(src, shove_dir), shove_dir)) log_combat(user, src, "shoved", "failing to move it") - user.visible_message(span_danger("[user.name] shoves [src]!"), - span_danger("You shove [src]!"), span_hear("You hear aggressive shuffling!"), COMBAT_MESSAGE_RANGE, list(src)) + user.visible_message( + span_danger("[user.name] [response_disarm_continuous] [src]!"), + span_danger("You [response_disarm_simple] [src]!"), + span_hear("You hear aggressive shuffling!"), + COMBAT_MESSAGE_RANGE, + list(src), + ) to_chat(src, span_userdanger("You're shoved by [user.name]!")) return TRUE log_combat(user, src, "shoved", "pushing it") - user.visible_message(span_danger("[user.name] shoves [src], pushing [p_them()]!"), - span_danger("You shove [src], pushing [p_them()]!"), span_hear("You hear aggressive shuffling!"), COMBAT_MESSAGE_RANGE, list(src)) + user.visible_message( + span_danger("[user.name] [response_disarm_continuous] [src], pushing [p_them()]!"), + span_danger("You [response_disarm_simple] [src], pushing [p_them()]!"), + span_hear("You hear aggressive shuffling!"), + COMBAT_MESSAGE_RANGE, + list(src), + ) to_chat(src, span_userdanger("You're pushed by [user.name]!")) return TRUE if(!user.combat_mode) - if (stat == DEAD) - return - visible_message(span_notice("[user] [response_help_continuous] [src]."), \ - 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) - else - if(HAS_TRAIT(user, TRAIT_PACIFISM)) - to_chat(user, span_warning("You don't want to hurt [src]!")) - return - user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) - visible_message(span_danger("[user] [response_harm_continuous] [src]!"),\ - span_userdanger("[user] [response_harm_continuous] you!"), null, COMBAT_MESSAGE_RANGE, user) - to_chat(user, span_danger("You [response_harm_simple] [src]!")) - playsound(loc, attacked_sound, 25, TRUE, -1) - var/obj/item/bodypart/arm/active_arm = user.get_active_hand() - var/damage = (basic_mob_flags & IMMUNE_TO_FISTS) ? 0 : rand(active_arm.unarmed_damage_low, active_arm.unarmed_damage_high) - - attack_threshold_check(damage) - log_combat(user, src, "attacked") - updatehealth() + if (stat != DEAD) + visible_message( + span_notice("[user] [response_help_continuous] [src]."), + span_notice("[user] [response_help_continuous] you."), + ignored_mobs = user, + ) + to_chat(user, span_notice("You [response_help_simple] [src].")) + playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) return TRUE + if(HAS_TRAIT(user, TRAIT_PACIFISM)) + to_chat(user, span_warning("You don't want to hurt [src]!")) + return TRUE + var/obj/item/bodypart/arm/active_arm = user.get_active_hand() + var/damage = (basic_mob_flags & IMMUNE_TO_FISTS) ? 0 : rand(active_arm.unarmed_damage_low, active_arm.unarmed_damage_high) + if(check_block(user, damage, "[user]'s punch", UNARMED_ATTACK, 0, BRUTE)) + return + user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) + visible_message( + span_danger("[user] [response_harm_continuous] [src]!"), + span_userdanger("[user] [response_harm_continuous] you!"), + vision_distance = COMBAT_MESSAGE_RANGE, + ignored_mobs = user, + ) + to_chat(user, span_danger("You [response_harm_simple] [src]!")) + playsound(loc, attacked_sound, 25, TRUE, -1) + apply_damage(damage) + log_combat(user, src, "attacked") + updatehealth() + return TRUE + /mob/living/basic/attack_hulk(mob/living/carbon/human/user) . = ..() if(!.) @@ -58,9 +76,8 @@ /mob/living/basic/attack_paw(mob/living/carbon/human/user, list/modifiers) if(..()) //successful monkey bite. if(stat != DEAD) - var/damage = rand(1, 3) - attack_threshold_check(damage) - return 1 + return apply_damage(rand(1, 3)) + if (!user.combat_mode) if (health > 0) visible_message(span_notice("[user.name] [response_help_continuous] [src]."), \ @@ -85,29 +102,15 @@ span_userdanger("You're slashed at by [user]!"), null, COMBAT_MESSAGE_RANGE, user) to_chat(user, span_danger("You slash at [src]!")) playsound(loc, 'sound/weapons/slice.ogg', 25, TRUE, -1) - attack_threshold_check(damage) + apply_damage(damage) log_combat(user, src, "attacked") /mob/living/basic/attack_larva(mob/living/carbon/alien/larva/attacking_larva, list/modifiers) . = ..() if(. && stat != DEAD) //successful larva bite - var/damage = rand(attacking_larva.melee_damage_lower, attacking_larva.melee_damage_upper) - . = attack_threshold_check(damage) - if(.) - attacking_larva.amount_grown = min(attacking_larva.amount_grown + damage, attacking_larva.max_grown) - -/mob/living/basic/attack_animal(mob/living/simple_animal/user, list/modifiers) - . = ..() - if(.) - 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) + var/damage_done = apply_damage(rand(attacking_larva.melee_damage_lower, attacking_larva.melee_damage_upper), BRUTE) + if(damage_done > 0) + attacking_larva.amount_grown = min(attacking_larva.amount_grown + damage_done, attacking_larva.max_grown) /mob/living/basic/attack_drone(mob/living/basic/drone/attacking_drone) if(attacking_drone.combat_mode) //No kicking dogs even as a rogue drone. Use a weapon. @@ -119,20 +122,6 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN return ..() -/mob/living/basic/proc/attack_threshold_check(damage, damagetype = BRUTE, armorcheck = MELEE, actuallydamage = TRUE) - var/temp_damage = damage - if(!damage_coeff[damagetype]) - temp_damage = 0 - else - temp_damage *= damage_coeff[damagetype] - if(temp_damage >= 0 && temp_damage <= force_threshold) - visible_message(span_warning("[src] looks unharmed!")) - return FALSE - else - if(actuallydamage) - apply_damage(damage, damagetype, blocked = getarmor(null, armorcheck)) - return TRUE - /mob/living/basic/check_projectile_armor(def_zone, obj/projectile/impacting_projectile, is_silent) return 0 diff --git a/code/modules/mob/living/basic/blob_minions/blob_ai.dm b/code/modules/mob/living/basic/blob_minions/blob_ai.dm index fc21d030d07d1b..5aad05d4656ffc 100644 --- a/code/modules/mob/living/basic/blob_minions/blob_ai.dm +++ b/code/modules/mob/living/basic/blob_minions/blob_ai.dm @@ -4,7 +4,7 @@ */ /datum/ai_controller/basic_controller/blobbernaut blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) @@ -21,7 +21,7 @@ */ /datum/ai_controller/basic_controller/blob_zombie blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) @@ -39,7 +39,7 @@ */ /datum/ai_controller/basic_controller/blob_spore blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) diff --git a/code/modules/mob/living/basic/blob_minions/blobbernaut.dm b/code/modules/mob/living/basic/blob_minions/blobbernaut.dm index b483641993a7e0..ab3442604dbde4 100644 --- a/code/modules/mob/living/basic/blob_minions/blobbernaut.dm +++ b/code/modules/mob/living/basic/blob_minions/blobbernaut.dm @@ -10,7 +10,7 @@ icon_dead = "blobbernaut_dead" health = BLOBMOB_BLOBBERNAUT_HEALTH maxHealth = BLOBMOB_BLOBBERNAUT_HEALTH - damage_coeff = list(BRUTE = 0.5, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) + damage_coeff = list(BRUTE = 0.5, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1) melee_damage_lower = BLOBMOB_BLOBBERNAUT_DMG_SOLO_LOWER melee_damage_upper = BLOBMOB_BLOBBERNAUT_DMG_SOLO_UPPER melee_attack_cooldown = CLICK_CD_MELEE @@ -22,7 +22,6 @@ verb_ask = "demands" verb_exclaim = "roars" verb_yell = "bellows" - force_threshold = 10 pressure_resistance = 50 mob_size = MOB_SIZE_LARGE hud_type = /datum/hud/living/blobbernaut @@ -32,6 +31,7 @@ /mob/living/basic/blob_minion/blobbernaut/Initialize(mapload) . = ..() AddElement(/datum/element/swabable, CELL_LINE_TABLE_BLOBBERNAUT, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) + AddElement(/datum/element/damage_threshold, 10) /mob/living/basic/blob_minion/blobbernaut/death(gibbed) flick("blobbernaut_death", src) diff --git a/code/modules/mob/living/basic/bots/_bots.dm b/code/modules/mob/living/basic/bots/_bots.dm new file mode 100644 index 00000000000000..f8b273804eac1a --- /dev/null +++ b/code/modules/mob/living/basic/bots/_bots.dm @@ -0,0 +1,831 @@ +GLOBAL_LIST_INIT(command_strings, list( + "patroloff" = "STOP PATROL", + "patrolon" = "START PATROL", + "stop" = "STOP", + "go" = "GO", + "home" = "RETURN HOME", +)) + + +/mob/living/basic/bot + icon = 'icons/mob/silicon/aibots.dmi' + layer = MOB_LAYER + gender = NEUTER + mob_biotypes = MOB_ROBOTIC + basic_mob_flags = DEL_ON_DEATH + icon = 'icons/mob/silicon/aibots.dmi' + icon_state = "medibot0" + base_icon_state = "medibot" + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0, OXY = 0) + habitable_atmos = 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) + hud_possible = list(DIAG_STAT_HUD, DIAG_BOT_HUD, DIAG_HUD, DIAG_BATT_HUD, DIAG_PATH_HUD = HUD_LIST_LIST) + maximum_survivable_temperature = INFINITY + minimum_survivable_temperature = 0 + has_unlimited_silicon_privilege = TRUE + sentience_type = SENTIENCE_ARTIFICIAL + status_flags = NONE //no default canpush + faction = list(FACTION_MINING) + ai_controller = /datum/ai_controller/basic_controller/bot + pass_flags = PASSFLAPS + verb_say = "states" + verb_ask = "queries" + verb_exclaim = "declares" + verb_yell = "alarms" + initial_language_holder = /datum/language_holder/synthetic + bubble_icon = "machine" + speech_span = SPAN_ROBOT + faction = list(FACTION_NEUTRAL, FACTION_SILICON, FACTION_TURRET) + light_system = MOVABLE_LIGHT + light_range = 3 + light_power = 0.9 + speed = 3 + ///Access required to access this Bot's maintenance protocols + var/maints_access_required = list(ACCESS_ROBOTICS) + ///The Robot arm attached to this robot - has a 50% chance to drop on death. + var/robot_arm = /obj/item/bodypart/arm/right/robot + ///The inserted (if any) pAI in this bot. + var/obj/item/pai_card/paicard + ///The type of bot it is, for radio control. + var/bot_type = NONE + ///All initial access this bot started with. + var/list/initial_access = list() + ///Bot-related mode flags on the Bot indicating how they will act. BOT_MODE_ON | BOT_MODE_AUTOPATROL | BOT_MODE_REMOTE_ENABLED | BOT_MODE_CAN_BE_SAPIENT | BOT_MODE_ROUNDSTART_POSSESSION + var/bot_mode_flags = BOT_MODE_ON | BOT_MODE_REMOTE_ENABLED | BOT_MODE_CAN_BE_SAPIENT | BOT_MODE_ROUNDSTART_POSSESSION + ///Bot-related cover flags on the Bot to deal with what has been done to their cover, including emagging. BOT_MAINTS_PANEL_OPEN | BOT_CONTROL_PANEL_OPEN | BOT_COVER_EMAGGED | BOT_COVER_HACKED + var/bot_access_flags = NONE + ///Small name of what the bot gets messed with when getting hacked/emagged. + var/hackables = "system circuits" + ///Standardizes the vars that indicate the bot is busy with its function. + var/mode = BOT_IDLE + ///Links a bot to the AI calling it. + var/datum/weakref/calling_ai_ref + ///The bot's radio, for speaking to people. + var/obj/item/radio/internal_radio + ///which channels can the bot listen to + var/radio_key = null + ///The bot's default radio channel + var/radio_channel = RADIO_CHANNEL_COMMON + ///our access card + var/obj/item/card/id/access_card + ///The trim type that will grant additional acces + var/datum/id_trim/additional_access + ///file the path icon is stored in + var/path_image_icon = 'icons/mob/silicon/aibots.dmi' + ///state of the path icon + var/path_image_icon_state = "path_indicator" + ///what color this path icon will use + var/path_image_color = "#FFFFFF" + ///list of all layed path icons + var/list/current_pathed_turfs = list() + + ///The type of data HUD the bot uses. Diagnostic by default. + var/data_hud_type = DATA_HUD_DIAGNOSTIC_BASIC + /// If true we will allow ghosts to control this mob + var/can_be_possessed = FALSE + /// Message to display upon possession + var/possessed_message = "You're a generic bot. How did one of these even get made?" + /// Action we use to say voice lines out loud, also we just pass anything we try to say through here just in case it plays a voice line + var/datum/action/cooldown/bot_announcement/pa_system + /// Type of bot_announcement ability we want + var/announcement_type + ///list of traits we apply and remove when turning on/off + var/static/list/on_toggle_traits = list( + TRAIT_INCAPACITATED, + TRAIT_IMMOBILIZED, + TRAIT_HANDS_BLOCKED, + ) + /// If true we will offer this + COOLDOWN_DECLARE(offer_ghosts_cooldown) + +/mob/living/basic/bot/Initialize(mapload) + . = ..() + + AddElement(/datum/element/relay_attackers) + RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(handle_loop_movement)) + RegisterSignal(src, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(after_attacked)) + RegisterSignal(src, COMSIG_MOB_TRIED_ACCESS, PROC_REF(attempt_access)) + ADD_TRAIT(src, TRAIT_NO_GLIDE, INNATE_TRAIT) + GLOB.bots_list += src + + // Give bots a fancy new ID card that can hold any access. + access_card = new /obj/item/card/id/advanced/simple_bot(src) + // This access is so bots can be immediately set to patrol and leave Robotics, instead of having to be let out first. + access_card.set_access(list(ACCESS_ROBOTICS)) + provide_additional_access() + + internal_radio = new /obj/item/radio(src) + if(radio_key) + internal_radio.keyslot = new radio_key + internal_radio.subspace_transmission = TRUE + internal_radio.canhear_range = 0 // anything greater will have the bot broadcast the channel as if it were saying it out loud. + internal_radio.recalculateChannels() + + //Adds bot to the diagnostic HUD system + prepare_huds() + for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds) + diag_hud.add_atom_to_hud(src) + diag_hud_set_bothealth() + diag_hud_set_botstat() + diag_hud_set_botmode() + + //If a bot has its own HUD (for player bots), provide it. + if(!isnull(data_hud_type)) + var/datum/atom_hud/datahud = GLOB.huds[data_hud_type] + datahud.show_to(src) + + if(HAS_TRAIT(SSstation, STATION_TRAIT_BOTS_GLITCHED)) + randomize_language_if_on_station() + + if(mapload && is_station_level(z) && (bot_mode_flags & BOT_MODE_CAN_BE_SAPIENT) && (bot_mode_flags & BOT_MODE_ROUNDSTART_POSSESSION)) + enable_possession(mapload = mapload) + + pa_system = (isnull(announcement_type)) ? new(src, automated_announcements = generate_speak_list()) : new announcement_type(src, automated_announcements = generate_speak_list()) + pa_system.Grant(src) + ai_controller.set_blackboard_key(BB_ANNOUNCE_ABILITY, pa_system) + ai_controller.set_blackboard_key(BB_RADIO_CHANNEL, radio_channel) + update_appearance() + +/mob/living/basic/bot/proc/get_mode() + if(client) //Player bots do not have modes, thus the override. Also an easy way for PDA users/AI to know when a bot is a player. + return span_bold("[paicard ? "pAI Controlled" : "Autonomous"]") + + if(!(bot_mode_flags & BOT_MODE_ON)) + return span_bad("Inactive") + + return span_average("[mode]") + +/** + * Returns a status string about the bot's current status, if it's moving, manually controlled, or idle. + */ +/mob/living/basic/bot/proc/get_mode_ui() + if(client) + return paicard ? "pAI Controlled" : "Autonomous" + + if(!(bot_mode_flags & BOT_MODE_ON)) + return "Inactive" + + return "[mode]" + +/** + * Returns a string of flavor text for emagged bots as defined by policy. + */ +/mob/living/basic/bot/proc/get_emagged_message() + return get_policy(ROLE_EMAGGED_BOT) || "You are a malfunctioning bot! Disrupt everyone and cause chaos!" + +/mob/living/basic/bot/proc/turn_on() + if(stat == DEAD) + return FALSE + bot_mode_flags |= BOT_MODE_ON + remove_traits(list(TRAIT_INCAPACITATED, TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED), POWER_LACK_TRAIT) + set_light_on(bot_mode_flags & BOT_MODE_ON ? TRUE : FALSE) + update_appearance() + balloon_alert(src, "turned on") + diag_hud_set_botstat() + return TRUE + +/mob/living/basic/bot/proc/turn_off() + bot_mode_flags &= ~BOT_MODE_ON + add_traits(on_toggle_traits, POWER_LACK_TRAIT) + set_light_on(bot_mode_flags & BOT_MODE_ON ? TRUE : FALSE) + bot_reset() //Resets an AI's call, should it exist. + balloon_alert(src, "turned off") + update_appearance() + +/mob/living/basic/bot/Destroy() + GLOB.bots_list -= src + calling_ai_ref = null + clear_path_hud() + QDEL_NULL(paicard) + QDEL_NULL(pa_system) + QDEL_NULL(internal_radio) + QDEL_NULL(access_card) + return ..() + +/// Allows this bot to be controlled by a ghost, who will become its mind +/mob/living/basic/bot/proc/enable_possession(user, mapload = FALSE) + if (paicard) + balloon_alert(user, "already sapient!") + return + can_be_possessed = TRUE + var/can_announce = !mapload && COOLDOWN_FINISHED(src, offer_ghosts_cooldown) + AddComponent( + /datum/component/ghost_direct_control, \ + ban_type = ROLE_BOT, \ + poll_candidates = can_announce, \ + poll_ignore_key = POLL_IGNORE_BOTS, \ + assumed_control_message = (bot_access_flags & BOT_COVER_EMAGGED) ? get_emagged_message() : possessed_message, \ + extra_control_checks = CALLBACK(src, PROC_REF(check_possession)), \ + after_assumed_control = CALLBACK(src, PROC_REF(post_possession)), \ + ) + if (can_announce) + COOLDOWN_START(src, offer_ghosts_cooldown, 30 SECONDS) + +/// Disables this bot from being possessed by ghosts +/mob/living/basic/bot/proc/disable_possession(mob/user) + can_be_possessed = FALSE + if(isnull(key)) + return + if (user) + log_combat(user, src, "ejected from [initial(src.name)] control.") + to_chat(src, span_warning("You feel yourself fade as your personality matrix is reset!")) + ghostize(can_reenter_corpse = FALSE) + playsound(src, 'sound/machines/ping.ogg', 30, TRUE) + speak("Personality matrix reset!") + key = null + +/// Returns true if this mob can be controlled +/mob/living/basic/bot/proc/check_possession(mob/potential_possessor) + if (!can_be_possessed) + to_chat(potential_possessor, span_warning("The bot's personality download has been disabled!")) + return can_be_possessed + +/// Fired after something takes control of this mob +/mob/living/basic/bot/proc/post_possession() + playsound(src, 'sound/machines/ping.ogg', 30, TRUE) + speak("New personality installed successfully!") + rename(src) + +/// Allows renaming the bot to something else +/mob/living/basic/bot/proc/rename(mob/user) + var/new_name = sanitize_name( + reject_bad_text(tgui_input_text( + user = user, + message = "This machine is designated [real_name]. Would you like to update its registration?", + title = "Name change", + default = real_name, + max_length = MAX_NAME_LEN, + )), + allow_numbers = TRUE, + ) + if (isnull(new_name) || QDELETED(src)) + return + if (key && user != src) + var/accepted = tgui_alert( + src, + message = "Do you wish to be renamed to [new_name]?", + title = "Name change", + buttons = list("Yes", "No"), + ) + if (accepted != "Yes" || QDELETED(src)) + return + fully_replace_character_name(real_name, new_name) + +/mob/living/basic/bot/proc/check_access(mob/living/user, obj/item/card/id) + if(user.has_unlimited_silicon_privilege || isAdminGhostAI(user)) // Silicon and Admins always have access. + return TRUE + if(!istype(user)) // Non-living mobs shouldn't be manipulating bots (like observes using the botkeeper UI). + return FALSE + if(!length(maints_access_required)) // No requirements to access it. + return TRUE + if(bot_access_flags & BOT_CONTROL_PANEL_OPEN) // Unlocked. + return TRUE + + var/obj/item/card/id/used_id = id || user.get_idcard(TRUE) + + if(!used_id || !used_id.access) + return FALSE + + for(var/requested_access in maints_access_required) + if(requested_access in used_id.access) + return TRUE + + return FALSE + +/mob/living/basic/bot/bee_friendly() + return TRUE + +/mob/living/basic/bot/death(gibbed) + if(paicard) + ejectpai() + explode() + return ..() + +/mob/living/basic/bot/proc/explode() + visible_message(span_boldnotice("[src] blows apart!")) + do_sparks(3, TRUE, src) + var/atom/location_destroyed = drop_location() + if(prob(50)) + drop_part(robot_arm, location_destroyed) + +/mob/living/basic/bot/emag_act(mob/user, obj/item/card/emag/emag_card) + . = ..() + if(!(bot_access_flags & BOT_CONTROL_PANEL_OPEN)) //First emag application unlocks the bot's interface. Apply a screwdriver to use the emag again. + bot_access_flags |= BOT_CONTROL_PANEL_OPEN + balloon_alert(user, "cover unlocked") + return TRUE + if(!(bot_access_flags & BOT_CONTROL_PANEL_OPEN) || !(bot_access_flags & BOT_MAINTS_PANEL_OPEN)) //Bot panel is unlocked by ID or emag, and the panel is screwed open. Ready for emagging. + balloon_alert(user, "open maintenance panel first!") + return FALSE + bot_access_flags |= BOT_COVER_EMAGGED + bot_access_flags &= ~BOT_CONTROL_PANEL_OPEN + bot_mode_flags &= ~BOT_MODE_REMOTE_ENABLED //Manually emagging the bot also locks the AI from controlling it. + bot_reset() + turn_on() //The bot automatically turns on when emagged, unless recently hit with EMP. + to_chat(src, span_userdanger("(#$*#$^^( OVERRIDE DETECTED")) + to_chat(src, span_boldnotice(get_emagged_message())) + if(user) + log_combat(user, src, "emagged") + return TRUE + +/mob/living/basic/bot/examine(mob/user) + . = ..() + if(health < maxHealth) + if(health > (maxHealth * 0.3)) + . += "[src]'s parts look loose." + else + . += "[src]'s parts look very loose!" + else + . += "[src] is in pristine condition." + + . += span_notice("Its maintenance panel is [bot_access_flags & BOT_MAINTS_PANEL_OPEN ? "open" : "closed"].") + . += span_info("You can use a screwdriver to [bot_access_flags & BOT_MAINTS_PANEL_OPEN ? "close" : "open"] it.") + + if(bot_access_flags & BOT_MAINTS_PANEL_OPEN) + . += span_notice("Its control panel is [bot_access_flags & BOT_CONTROL_PANEL_OPEN ? "unlocked" : "locked"].") + if(!(bot_access_flags & BOT_COVER_EMAGGED) && (issilicon(user) || user.Adjacent(src))) + . += span_info("Alt-click [issilicon(user) ? "" : "or use your ID on "]it to [bot_access_flags & BOT_CONTROL_PANEL_OPEN ? "" : "un"]lock its control panel.") + if(isnull(paicard)) + return + . += span_notice("It has a pAI device installed.") + if(!(bot_access_flags & BOT_MAINTS_PANEL_OPEN)) + . += span_info("You can use a hemostat to remove it.") + +/mob/living/basic/bot/updatehealth() + . = ..() + diag_hud_set_bothealth() + +/mob/living/basic/bot/med_hud_set_health() + return //we use a different hud + +/mob/living/basic/bot/med_hud_set_status() + return //we use a different hud + +/mob/living/basic/bot/attack_hand(mob/living/carbon/human/user, list/modifiers) + if(!user.combat_mode) + ui_interact(user) + return + return ..() + +/mob/living/basic/bot/attack_ai(mob/user) + if(!topic_denied(user)) + ui_interact(user) + return + to_chat(user, span_warning("[src]'s interface is not responding!")) + +/mob/living/basic/bot/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "SimpleBot", name) + ui.open() + +/mob/living/basic/bot/AltClick(mob/user) + . = ..() + if(!can_interact(user)) + return + if(!user.can_perform_action(src, ALLOW_SILICON_REACH)) + return + unlock_with_id(user) + +/mob/living/basic/bot/proc/unlock_with_id(mob/living/user) + if(bot_access_flags & BOT_COVER_EMAGGED) + balloon_alert(user, "error!") + return + if(bot_access_flags & BOT_MAINTS_PANEL_OPEN) + balloon_alert(user, "access panel must be closed!") + return + if(!check_access(user)) + balloon_alert(user, "no access") + return + bot_access_flags ^= BOT_CONTROL_PANEL_OPEN + to_chat(user, span_notice("Controls are now [bot_access_flags & BOT_CONTROL_PANEL_OPEN ? "unlocked" : "locked"].")) + return TRUE + +/mob/living/basic/bot/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!(bot_access_flags & BOT_CONTROL_PANEL_OPEN)) + to_chat(user, span_warning("The maintenance panel is locked!")) + return + + tool.play_tool_sound(src) + bot_access_flags ^= BOT_MAINTS_PANEL_OPEN + to_chat(user, span_notice("The maintenance panel is now [bot_access_flags & BOT_MAINTS_PANEL_OPEN ? "opened" : "closed"].")) + +/mob/living/basic/bot/welder_act(mob/living/user, obj/item/tool) + user.changeNext_move(CLICK_CD_MELEE) + if(user.combat_mode) + return FALSE + + . = ITEM_INTERACT_SUCCESS + + if(health >= maxHealth) + user.balloon_alert(user, "no repairs needed!") + return + + if(!(bot_access_flags & BOT_MAINTS_PANEL_OPEN)) + user.balloon_alert(user, "maintenance panel closed!") + return + + if(!tool.use_tool(src, user, 0 SECONDS, volume=40)) + return + + heal_overall_damage(10) + user.visible_message(span_notice("[user] repairs [src]!"),span_notice("You repair [src].")) + +/mob/living/basic/bot/attackby(obj/item/attacking_item, mob/living/user, params) + if(attacking_item.GetID()) + unlock_with_id(user) + return + + if(istype(attacking_item, /obj/item/pai_card)) + insertpai(user, attacking_item) + return + + if(attacking_item.tool_behaviour != TOOL_HEMOSTAT || !paicard) + return ..() + + if(bot_access_flags & BOT_MAINTS_PANEL_OPEN) + balloon_alert(user, "open the access panel!") + return + + balloon_alert(user, "removing pAI...") + if(!do_after(user, 3 SECONDS, target = src) || !paicard) + return + + user.visible_message(span_notice("[user] uses [attacking_item] to pull [paicard] out of [initial(src.name)]!"), \ + span_notice("You pull [paicard] out of [initial(src.name)] with [attacking_item].")) + + ejectpai(user) + +/mob/living/basic/bot/attack_effects(damage_done, hit_zone, armor_block, obj/item/attacking_item, mob/living/attacker) + if(damage_done > 0 && attacking_item.damtype != STAMINA && stat != DEAD) + do_sparks(5, TRUE, src) + . = TRUE + return ..() || . + +/mob/living/basic/bot/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit = FALSE) + . = ..() + if(prob(25) || . != BULLET_ACT_HIT) + return + if(hitting_projectile.damage_type != BRUTE && hitting_projectile.damage_type != BURN) + return + if(!hitting_projectile.is_hostile_projectile() || hitting_projectile.damage <= 0) + return + do_sparks(5, TRUE, src) + +/mob/living/basic/bot/emp_act(severity) + . = ..() + if(. & EMP_PROTECT_SELF) + return + new /obj/effect/temp_visual/emp(loc) + if(paicard) + paicard.emp_act(severity) + src.visible_message(span_notice("[paicard] flies out of [initial(src.name)]!"), span_warning("You are forcefully ejected from [initial(src.name)]!")) + ejectpai() + + if (QDELETED(src)) + return + + if(bot_mode_flags & BOT_MODE_ON) + turn_off() + else + addtimer(CALLBACK(src, PROC_REF(turn_on)), severity * 30 SECONDS) + + if(!prob(70/severity) || !length(GLOB.uncommon_roundstart_languages)) + return + + remove_all_languages(source = LANGUAGE_EMP) + grant_random_uncommon_language(source = LANGUAGE_EMP) + +/** + * Pass a message to have the bot say() it, passing through our announcement action to potentially also play a sound. + * Optionally pass a frequency to say it on the radio. + */ +/mob/living/basic/bot/proc/speak(message, channel) + if(!message) + return + pa_system.announce(message, channel) + +/mob/living/basic/bot/radio(message, list/message_mods = list(), list/spans, language) + . = ..() + if(.) + return + + if(message_mods[MODE_HEADSET]) + internal_radio.talk_into(src, message, , spans, language, message_mods) + return REDUCE_RANGE + if(message_mods[RADIO_EXTENSION] == MODE_DEPARTMENT) + internal_radio.talk_into(src, message, message_mods[RADIO_EXTENSION], spans, language, message_mods) + return REDUCE_RANGE + if(message_mods[RADIO_EXTENSION] in GLOB.radiochannels) + internal_radio.talk_into(src, message, message_mods[RADIO_EXTENSION], spans, language, message_mods) + return REDUCE_RANGE + +/mob/living/basic/bot/proc/drop_part(obj/item/drop_item, dropzone) + var/obj/item/item_to_drop + if(ispath(drop_item)) + item_to_drop = new drop_item(dropzone) + else + item_to_drop = drop_item + item_to_drop.forceMove(dropzone) + + if(istype(item_to_drop, /obj/item/stock_parts/cell)) + var/obj/item/stock_parts/cell/dropped_cell = item_to_drop + dropped_cell.charge = 0 + dropped_cell.update_appearance() + return + + if(istype(item_to_drop, /obj/item/storage)) + item_to_drop.contents = list() + return + + if(!istype(item_to_drop, /obj/item/gun/energy)) + return + var/obj/item/gun/energy/dropped_gun = item_to_drop + dropped_gun.cell.charge = 0 + dropped_gun.update_appearance() + +/mob/living/basic/bot/proc/bot_reset(bypass_ai_reset = FALSE) + SEND_SIGNAL(src, COMSIG_BOT_RESET) + if(length(initial_access)) + access_card.set_access(initial_access) + diag_hud_set_botstat() + diag_hud_set_botmode() + clear_path_hud() + if(bypass_ai_reset || isnull(calling_ai_ref)) + return + var/mob/living/ai_caller = calling_ai_ref.resolve() + if(isnull(ai_caller)) + return + to_chat(ai_caller, span_danger("Call command to a bot has been reset.")) + calling_ai_ref = null + +//PDA control. Some bots, especially MULEs, may have more parameters. +/mob/living/basic/bot/proc/bot_control(command, mob/user, list/user_access = list()) + if(!(bot_mode_flags & BOT_MODE_ON) || bot_access_flags & BOT_COVER_EMAGGED || !(bot_mode_flags & BOT_MODE_REMOTE_ENABLED)) //Emagged bots do not respect anyone's authority! Bots with their remote controls off cannot get commands. + return TRUE //ACCESS DENIED + if(client && command != "ejectpai") + bot_control_message(command, user) + // process control input + switch(command) + if("patroloff") + bot_reset() //HOLD IT!! //OBJECTION!! + bot_mode_flags &= ~BOT_MODE_AUTOPATROL + if("patrolon") + bot_mode_flags |= BOT_MODE_AUTOPATROL + if("summon") + summon_bot(user, user_access = user_access) + if("ejectpai") + eject_pai_remote(user) + + +/mob/living/basic/bot/proc/bot_control_message(command, user) + if(command == "summon") + return "PRIORITY ALERT:[user] in [get_area_name(user)]!" + return GLOB.command_strings[command] || "Unidentified control sequence received:[command]" + +/mob/living/basic/bot/ui_data(mob/user) + var/list/data = list() + data["can_hack"] = (issilicon(user) || isAdminGhostAI(user)) + data["custom_controls"] = list() + data["emagged"] = bot_access_flags & BOT_COVER_EMAGGED + data["has_access"] = check_access(user) + data["locked"] = !(bot_access_flags & BOT_CONTROL_PANEL_OPEN) + data["settings"] = list() + if((bot_access_flags & BOT_CONTROL_PANEL_OPEN) || issilicon(user) || isAdminGhostAI(user)) + data["settings"]["pai_inserted"] = !isnull(paicard) + data["settings"]["allow_possession"] = bot_mode_flags & BOT_MODE_CAN_BE_SAPIENT + data["settings"]["possession_enabled"] = can_be_possessed + data["settings"]["airplane_mode"] = !(bot_mode_flags & BOT_MODE_REMOTE_ENABLED) + data["settings"]["maintenance_lock"] = !(bot_access_flags & BOT_MAINTS_PANEL_OPEN) + data["settings"]["power"] = bot_mode_flags & BOT_MODE_ON + data["settings"]["patrol_station"] = bot_mode_flags & BOT_MODE_AUTOPATROL + return data + +// Actions received from TGUI +/mob/living/basic/bot/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + var/mob/the_user = ui.user + if(!check_access(the_user)) + balloon_alert(the_user, "access denied!") + return + + if(action == "lock") + bot_access_flags ^= BOT_CONTROL_PANEL_OPEN + + switch(action) + if("power") + if(bot_mode_flags & BOT_MODE_ON) + turn_off() + else + turn_on() + if("maintenance") + bot_access_flags ^= BOT_MAINTS_PANEL_OPEN + if("patrol") + bot_mode_flags ^= BOT_MODE_AUTOPATROL + bot_reset() + if("airplane") + bot_mode_flags ^= BOT_MODE_REMOTE_ENABLED + if("hack") + if(!(issilicon(the_user) || isAdminGhostAI(the_user))) + return + if(!(bot_access_flags & BOT_COVER_EMAGGED)) + bot_access_flags |= (BOT_COVER_EMAGGED|BOT_COVER_HACKED) + bot_access_flags &= ~BOT_CONTROL_PANEL_OPEN + to_chat(the_user, span_warning("You overload [src]'s [hackables].")) + message_admins("Safety lock of [ADMIN_LOOKUPFLW(src)] was disabled by [ADMIN_LOOKUPFLW(the_user)] in [ADMIN_VERBOSEJMP(the_user)]") + the_user.log_message("disabled safety lock of [the_user]", LOG_GAME) + bot_reset() + to_chat(src, span_userdanger("(#$*#$^^( OVERRIDE DETECTED")) + to_chat(src, span_boldnotice(get_emagged_message())) + return + if(!(bot_access_flags & BOT_COVER_HACKED)) + to_chat(the_user, span_boldannounce("You fail to repair [src]'s [hackables].")) + return + bot_access_flags &= ~(BOT_COVER_EMAGGED|BOT_COVER_HACKED) + to_chat(the_user, span_notice("You reset the [src]'s [hackables].")) + the_user.log_message("re-enabled safety lock of [src]", LOG_GAME) + bot_reset() + to_chat(src, span_userdanger("Software restored to standard.")) + to_chat(src, span_boldnotice(possessed_message)) + if("eject_pai") + if(!paicard) + return + to_chat(the_user, span_notice("You eject [paicard] from [initial(src.name)].")) + ejectpai(the_user) + if("toggle_personality") + if (can_be_possessed) + disable_possession(the_user) + else + enable_possession(the_user) + if("rename") + rename(the_user) + +/mob/living/basic/bot/update_icon_state() + icon_state = "[isnull(base_icon_state) ? initial(icon_state) : base_icon_state][bot_mode_flags & BOT_MODE_ON]" + return ..() + +/// Access check proc for bot topics! Remember to place in a bot's individual Topic if desired. +/mob/living/basic/bot/proc/topic_denied(mob/user) + if(!user.can_perform_action(src, ALLOW_SILICON_REACH)) + return TRUE + // 0 for access, 1 for denied. + if(!(bot_access_flags & BOT_COVER_EMAGGED)) //An emagged bot cannot be controlled by humans, silicons can if one hacked it. + return FALSE + if(!(bot_access_flags & BOT_COVER_HACKED)) //Manually emagged by a human - access denied to all. + return TRUE + if(!issilicon(user) && !isAdminGhostAI(user)) //Bot is hacked, so only silicons and admins are allowed access. + return TRUE + + return FALSE + +/// Places a pAI in control of this mob +/mob/living/basic/bot/proc/insertpai(mob/user, obj/item/pai_card/card) + if(paicard) + balloon_alert(user, "slot occupied!") + return + if(key) + balloon_alert(user, "personality already present!") + return + if(!(bot_access_flags & BOT_COVER_OPEN)) + balloon_alert(user, "slot inaccessible!") + return + if(!(bot_mode_flags & BOT_MODE_CAN_BE_SAPIENT)) + balloon_alert(user, "incompatible firmware!") + return + if(isnull(card.pai?.mind)) + balloon_alert(user, "pAI is inactive!") + return + if(!user.transferItemToLoc(card, src)) + return + paicard = card + disable_possession() + paicard.pai.fold_in() + copy_languages(paicard.pai, source_override = LANGUAGE_PAI) + set_active_language(paicard.pai.get_selected_language()) + user.visible_message(span_notice("[user] inserts [card] into [src]!"), span_notice("You insert [card] into [src].")) + paicard.pai.mind.transfer_to(src) + to_chat(src, span_notice("You sense your form change as you are uploaded into [src].")) + name = paicard.pai.name + faction = user.faction.Copy() + log_combat(user, paicard.pai, "uploaded to [initial(src.name)],") + return TRUE + +/mob/living/basic/bot/ghost() + if(stat != DEAD) // Only ghost if we're doing this while alive, the pAI probably isn't dead yet. + return ..() + if(paicard && (!client || stat == DEAD)) + ejectpai() + +/// Ejects a pAI from this bot +/mob/living/basic/bot/proc/ejectpai(mob/user = null, announce = TRUE) + if(isnull(paicard)) + return + + if(paicard.pai) + if(isnull(mind)) + mind.transfer_to(paicard.pai) + else + paicard.pai.key = key + else + ghostize(FALSE) // The pAI card that just got ejected was dead. + + key = null + paicard.forceMove(drop_location()) + var/to_log = user ? user : src + log_combat(to_log, paicard.pai, "ejected [user ? "from [initial(name)]" : ""].") + if(announce) + to_chat(paicard.pai, span_notice("You feel your control fade as [paicard] ejects from [initial(name)].")) + paicard = null + name = initial(name) + faction = initial(faction) + remove_all_languages(source = LANGUAGE_PAI) + get_selected_language() + +/// Ejects the pAI remotely. +/mob/living/basic/bot/proc/eject_pai_remote(mob/user) + if(!check_access(user) || !paicard) + return + speak("Ejecting personality chip.", radio_channel) + ejectpai(user) + +/mob/living/basic/bot/Login() + . = ..() + if(!. || isnull(client)) + return FALSE + REMOVE_TRAIT(src, TRAIT_NO_GLIDE, INNATE_TRAIT) + speed = 2 + + diag_hud_set_botmode() + clear_path_hud() + +/mob/living/basic/bot/Logout() + . = ..() + bot_reset() + speed = initial(speed) + ADD_TRAIT(src, TRAIT_NO_GLIDE, INNATE_TRAIT) + +/mob/living/basic/bot/revive(full_heal_flags = NONE, excess_healing = 0, force_grab_ghost = FALSE) + . = ..() + if(!.) + return + update_appearance() + +/mob/living/basic/bot/rust_heretic_act() + adjustBruteLoss(400) + +/mob/living/basic/bot/proc/attempt_access(mob/bot, obj/door_attempt) + SIGNAL_HANDLER + + if(door_attempt.check_access(access_card)) + return ACCESS_ALLOWED + return ACCESS_DISALLOWED + +/mob/living/basic/bot/proc/generate_speak_list() + return null + +/mob/living/basic/bot/proc/provide_additional_access() + var/datum/id_trim/additional_trim = SSid_access.trim_singletons_by_path[additional_access] + if(isnull(additional_trim)) + return + access_card.add_access(additional_trim.access + additional_trim.wildcard_access) + initial_access = access_card.access.Copy() + + +/mob/living/basic/bot/proc/summon_bot(atom/caller, turf/turf_destination, user_access = list(), grant_all_access = FALSE) + if(isAI(caller) && !set_ai_caller(caller)) + return FALSE + bot_reset(bypass_ai_reset = isAI(caller)) + var/turf/destination = turf_destination ? turf_destination : get_turf(caller) + ai_controller?.set_blackboard_key(BB_BOT_SUMMON_TARGET, destination) + var/list/access_to_grant = grant_all_access ? REGION_ACCESS_ALL_STATION : user_access + initial_access + access_card.set_access(access_to_grant) + speak("Responding.", radio_channel) + update_bot_mode(new_mode = BOT_SUMMON) + return TRUE + +/mob/living/basic/bot/proc/set_ai_caller(mob/living/caller) + var/atom/calling_ai = calling_ai_ref?.resolve() + if(!isnull(calling_ai) && calling_ai != src) + return FALSE + calling_ai_ref = WEAKREF(caller) + return TRUE + +/mob/living/basic/bot/proc/update_bot_mode(new_mode, update_hud = TRUE) + mode = new_mode + update_appearance() + if(update_hud) + diag_hud_set_botmode() + +/mob/living/basic/bot/proc/after_attacked(datum/source, atom/attacker, attack_flags) + SIGNAL_HANDLER + + if(attack_flags & ATTACKER_DAMAGING_ATTACK) + do_sparks(number = 5, cardinal_only = TRUE, source = src) + +/mob/living/basic/bot/spawn_gibs(drop_bitflags = NONE) + new /obj/effect/gibspawner/robot(drop_location(), src) + +/mob/living/basic/bot/proc/on_bot_movement(atom/movable/source, atom/oldloc, dir, forced) + return diff --git a/code/modules/mob/living/basic/bots/bot_ai.dm b/code/modules/mob/living/basic/bots/bot_ai.dm new file mode 100644 index 00000000000000..e0cba07edbd396 --- /dev/null +++ b/code/modules/mob/living/basic/bots/bot_ai.dm @@ -0,0 +1,256 @@ +/datum/ai_controller/basic_controller/bot + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_SALUTE_MESSAGES = list( + "salutes", + "nods in appreciation towards", + "fist bumps", + ) + ) + + ai_movement = /datum/ai_movement/jps/bot + idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking + planning_subtrees = list( + /datum/ai_planning_subtree/respond_to_summon, + /datum/ai_planning_subtree/salute_authority, + /datum/ai_planning_subtree/find_patrol_beacon, + /datum/ai_planning_subtree/manage_unreachable_list, + ) + max_target_distance = AI_BOT_PATH_LENGTH + ///keys to be reset when the bot is reseted + var/list/reset_keys = list( + BB_BEACON_TARGET, + BB_PREVIOUS_BEACON_TARGET, + BB_BOT_SUMMON_TARGET, + ) + ///how many times we tried to reach the target + var/current_pathing_attempts = 0 + ///if we cant reach it after this many attempts, add it to our ignore list + var/max_pathing_attempts = 25 + +/datum/ai_controller/basic_controller/bot/TryPossessPawn(atom/new_pawn) + . = ..() + if(. & AI_CONTROLLER_INCOMPATIBLE) + return + RegisterSignal(new_pawn, COMSIG_BOT_RESET, PROC_REF(reset_bot)) + +/datum/ai_controller/basic_controller/bot/able_to_run() + var/mob/living/basic/bot/bot_pawn = pawn + if(!(bot_pawn.bot_mode_flags & BOT_MODE_ON)) + return FALSE + return ..() + +/datum/ai_controller/basic_controller/bot/get_access() + var/mob/living/basic/bot/basic_bot = pawn + return basic_bot.access_card?.access + +/datum/ai_controller/basic_controller/bot/proc/reset_bot() + SIGNAL_HANDLER + + if(!length(reset_keys)) + return + for(var/key in reset_keys) + clear_blackboard_key(key) + +///set the target if we can reach them +/datum/ai_controller/basic_controller/bot/proc/set_if_can_reach(key, target, distance = 10) + if(can_reach_target(target, distance)) + set_blackboard_key(key, target) + return TRUE + return FALSE + +/datum/ai_controller/basic_controller/bot/proc/can_reach_target(target, distance = 10) + if(!isdatum(target)) //we dont need to check if its not a datum! + return TRUE + if(get_turf(pawn) == get_turf(target)) + return TRUE + var/list/path = get_path_to(pawn, target, max_distance = distance, access = get_access()) + if(!length(path)) + return FALSE + return TRUE + +///check if the target is too far away, and delete them if so and add them to the unreachables list +/datum/ai_controller/basic_controller/bot/proc/reachable_key(key, distance = 10, bypass_add_to_blacklist = FALSE) + var/datum/target = blackboard[key] + if(QDELETED(target)) + return FALSE + var/datum/last_attempt = blackboard[BB_LAST_ATTEMPTED_PATHING] + if(last_attempt != target) + current_pathing_attempts = 0 + set_blackboard_key(BB_LAST_ATTEMPTED_PATHING, target) + else + current_pathing_attempts++ + if(current_pathing_attempts >= max_pathing_attempts || !can_reach_target(target, distance)) + clear_blackboard_key(key) + clear_blackboard_key(BB_LAST_ATTEMPTED_PATHING) + if(!bypass_add_to_blacklist) + set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, REF(target), TRUE) + return FALSE + return TRUE + +/// subtree to manage our list of unreachables, we reset it every 15 seconds +/datum/ai_planning_subtree/manage_unreachable_list + +/datum/ai_planning_subtree/manage_unreachable_list/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + controller.queue_behavior(/datum/ai_behavior/manage_unreachable_list, BB_TEMPORARY_IGNORE_LIST) + +/datum/ai_behavior/manage_unreachable_list + behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + action_cooldown = 45 SECONDS + +/datum/ai_behavior/manage_unreachable_list/perform(seconds_per_tick, datum/ai_controller/controller, list_key) + . = ..() + if(!isnull(controller.blackboard[list_key])) + controller.clear_blackboard_key(list_key) + finish_action(controller, TRUE) + + +/datum/ai_planning_subtree/find_patrol_beacon + +/datum/ai_planning_subtree/find_patrol_beacon/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/mob/living/basic/bot/bot_pawn = controller.pawn + // NOVA EDIT ADDITION START - TODO - Remove when cleanbot AI runtimes are fixed + if(QDELETED(bot_pawn)) + return SUBTREE_RETURN_FINISH_PLANNING + // NOVA EDIT ADDITION END + if(!(bot_pawn.bot_mode_flags & BOT_MODE_AUTOPATROL) || bot_pawn.mode == BOT_SUMMON) + return + + if(controller.blackboard_key_exists(BB_BEACON_TARGET)) + bot_pawn.update_bot_mode(new_mode = BOT_PATROL) + controller.queue_behavior(/datum/ai_behavior/travel_towards/beacon, BB_BEACON_TARGET) + return + + if(controller.blackboard_key_exists(BB_PREVIOUS_BEACON_TARGET)) + controller.queue_behavior(/datum/ai_behavior/find_next_beacon_target, BB_BEACON_TARGET) + return + + controller.queue_behavior(/datum/ai_behavior/find_first_beacon_target, BB_BEACON_TARGET) + +/datum/ai_behavior/find_first_beacon_target + +/datum/ai_behavior/find_first_beacon_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() + var/closest_distance = INFINITY + var/mob/living/basic/bot/bot_pawn = controller.pawn + var/atom/final_target + var/atom/previous_target = controller.blackboard[BB_PREVIOUS_BEACON_TARGET] + for(var/obj/machinery/navbeacon/beacon as anything in GLOB.navbeacons["[bot_pawn.z]"]) + if(beacon == previous_target) + continue + var/dist = get_dist(bot_pawn, beacon) + if(dist > closest_distance) + continue + closest_distance = dist + final_target = beacon + + if(isnull(final_target)) + finish_action(controller, FALSE) + return + controller.set_blackboard_key(BB_BEACON_TARGET, final_target) + finish_action(controller, TRUE) + +/datum/ai_behavior/find_next_beacon_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() + var/mob/living/basic/bot/bot_pawn = controller.pawn + var/atom/final_target + var/obj/machinery/navbeacon/prev_beacon = controller.blackboard[BB_PREVIOUS_BEACON_TARGET] + if(QDELETED(prev_beacon)) + finish_action(controller, FALSE) + return + + for(var/obj/machinery/navbeacon/beacon as anything in GLOB.navbeacons["[bot_pawn.z]"]) + if(beacon.location == prev_beacon.codes[NAVBEACON_PATROL_NEXT]) + final_target = beacon + break + + if(isnull(final_target)) + controller.clear_blackboard_key(BB_PREVIOUS_BEACON_TARGET) + finish_action(controller, FALSE) + + controller.set_blackboard_key(BB_BEACON_TARGET, final_target) + finish_action(controller, TRUE) + + +/datum/ai_behavior/travel_towards/beacon + clear_target = TRUE + +/datum/ai_behavior/travel_towards/beacon/finish_action(datum/ai_controller/controller, succeeded, target_key) + var/atom/target = controller.blackboard[target_key] + controller.set_blackboard_key(BB_PREVIOUS_BEACON_TARGET, target) + return ..() + +/datum/ai_planning_subtree/respond_to_summon + +/datum/ai_planning_subtree/respond_to_summon/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(!controller.blackboard_key_exists(BB_BOT_SUMMON_TARGET)) + return + controller.clear_blackboard_key(BB_PREVIOUS_BEACON_TARGET) + controller.clear_blackboard_key(BB_BEACON_TARGET) + controller.queue_behavior(/datum/ai_behavior/travel_towards/bot_summon, BB_BOT_SUMMON_TARGET) + return SUBTREE_RETURN_FINISH_PLANNING + +/datum/ai_behavior/travel_towards/bot_summon + clear_target = TRUE + +/datum/ai_behavior/travel_towards/bot_summon/finish_action(datum/ai_controller/controller, succeeded, target_key) + var/mob/living/basic/bot/bot_pawn = controller.pawn + if(QDELETED(bot_pawn)) // pawn can be null at this point + return ..() + bot_pawn.calling_ai_ref = null + bot_pawn.update_bot_mode(new_mode = BOT_IDLE) + return ..() + +/datum/ai_planning_subtree/salute_authority + +/datum/ai_planning_subtree/salute_authority/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/mob/living/basic/bot/bot_pawn = controller.pawn + //we are criminals, dont salute the dirty pigs + if(bot_pawn.bot_access_flags & BOT_COVER_EMAGGED) + return + if(controller.blackboard_key_exists(BB_SALUTE_TARGET)) + controller.queue_behavior(/datum/ai_behavior/salute_authority, BB_SALUTE_TARGET, BB_SALUTE_MESSAGES) + return SUBTREE_RETURN_FINISH_PLANNING + + controller.queue_behavior(/datum/ai_behavior/find_and_set/valid_authority, BB_SALUTE_TARGET) + + +/datum/ai_behavior/find_and_set/valid_authority + behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + action_cooldown = 30 SECONDS + +/datum/ai_behavior/find_and_set/valid_authority/search_tactic(datum/ai_controller/controller, locate_path, search_range) + for(var/mob/living/robot in oview(search_range, controller.pawn)) + if(istype(robot, /mob/living/simple_animal/bot/secbot)) + return robot + if(!istype(robot, /mob/living/basic/bot/cleanbot)) + continue + var/mob/living/basic/bot/cleanbot/potential_bot = robot + if(potential_bot.comissioned) + return potential_bot + return null + +/datum/ai_behavior/salute_authority + +/datum/ai_behavior/salute_authority/perform(seconds_per_tick, datum/ai_controller/controller, target_key, salute_keys) + . = ..() + if(!controller.blackboard_key_exists(target_key)) + finish_action(controller, FALSE, target_key) + return + var/list/salute_list = controller.blackboard[salute_keys] + if(!length(salute_list)) + finish_action(controller, FALSE, target_key) + return + var/mob/living/basic/bot/bot_pawn = controller.pawn + //special interaction if we are wearing a fedora + var/obj/item/our_hat = (locate(/obj/item/clothing/head) in bot_pawn) + if(our_hat) + salute_list += "tips [our_hat] at " + + bot_pawn.manual_emote(pick(salute_list) + " [controller.blackboard[target_key]]") + finish_action(controller, TRUE, target_key) + return + +/datum/ai_behavior/salute_authority/finish_action(datum/ai_controller/controller, succeeded, target_key) + . = ..() + controller.clear_blackboard_key(target_key) diff --git a/code/modules/mob/living/basic/bots/bot_hud.dm b/code/modules/mob/living/basic/bots/bot_hud.dm new file mode 100644 index 00000000000000..cbadab01360e8b --- /dev/null +++ b/code/modules/mob/living/basic/bots/bot_hud.dm @@ -0,0 +1,120 @@ +/mob/living/basic/bot/proc/diag_hud_set_bothealth() + var/image/holder = hud_list[DIAG_HUD] + var/icon/icon_image = icon(icon, icon_state, dir) + holder.pixel_y = icon_image.Height() - world.icon_size + holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]" + +/mob/living/basic/bot/proc/diag_hud_set_botstat() //On (With wireless on or off), Off, EMP'ed + var/image/holder = hud_list[DIAG_STAT_HUD] + var/icon/our_icon = icon(icon, icon_state, dir) + holder.pixel_y = our_icon.Height() - world.icon_size + if(bot_mode_flags & BOT_MODE_ON) + holder.icon_state = "hudstat" + return + if(stat != CONSCIOUS) + holder.icon_state = "hudoffline" + return + holder.icon_state = "huddead2" + +/mob/living/basic/bot/proc/diag_hud_set_botmode() //Shows a bot's current operation + var/image/holder = hud_list[DIAG_BOT_HUD] + var/icon/icon_image = icon(icon, icon_state, dir) + holder.pixel_y = icon_image.Height() - world.icon_size + if(client) //If the bot is player controlled, it will not be following mode logic! + holder.icon_state = "hudsentient" + return + + switch(mode) + if(BOT_SUMMON, BOT_RESPONDING) //Responding to PDA or AI summons + holder.icon_state = "hudcalled" + if(BOT_CLEANING, BOT_REPAIRING, BOT_HEALING) //Cleanbot cleaning, Floorbot fixing, or Medibot Healing + holder.icon_state = "hudworking" + if(BOT_PATROL, BOT_START_PATROL) //Patrol mode + holder.icon_state = "hudpatrol" + if(BOT_PREP_ARREST, BOT_ARREST, BOT_HUNT) //STOP RIGHT THERE, CRIMINAL SCUM! + holder.icon_state = "hudalert" + if(BOT_MOVING, BOT_DELIVER, BOT_GO_HOME, BOT_NAV) //Moving to target for normal bots, moving to deliver or go home for MULES. + holder.icon_state = "hudmove" + else + holder.icon_state = "" + +///proc that handles drawing and transforming the bot's path onto diagnostic huds +/mob/living/basic/bot/proc/generate_bot_path(datum/move_loop/has_target/jps/source) + SIGNAL_HANDLER + + UnregisterSignal(src, COMSIG_MOVELOOP_JPS_FINISHED_PATHING) + + if(isnull(ai_controller)) + return + + clear_path_hud() + + var/list/path_images = active_hud_list[DIAG_PATH_HUD] + LAZYCLEARLIST(path_images) + + var/list/path_huds_watching_me = list(GLOB.huds[DATA_HUD_DIAGNOSTIC_ADVANCED]) + + var/atom/move_target = ai_controller.current_movement_target + if(move_target != ai_controller.blackboard[BB_BEACON_TARGET]) + return + + var/list/our_path = source.movement_path + if(!length(our_path)) + return + + for(var/datum/atom_hud/hud as anything in path_huds_watching_me) + hud.remove_atom_from_hud(src) + + for(var/index in 1 to our_path.len) + if(index == 1 || index == our_path.len) + continue + var/turf/current_turf = our_path[index] + var/turf/previous_turf = our_path[index - 1] + + var/turf/next_turf = our_path[index + 1] + var/next_direction = get_dir(previous_turf, next_turf) + var/previous_direction = get_dir(current_turf, previous_turf) + + var/image/path_display = image(icon = path_image_icon, loc = current_turf, icon_state = path_image_icon_state, layer = GAME_PLANE, dir = next_direction) + + if((ISDIAGONALDIR(next_direction) && (previous_direction & (NORTH|SOUTH)))) + var/turn_value = (next_direction == SOUTHWEST || next_direction == NORTHEAST) ? 90 : -90 + path_display.transform = path_display.transform.Turn(turn_value) + path_display.transform = path_display.transform.Scale(1, -1) + + path_display.color = path_image_color + path_images += path_display + current_pathed_turfs[current_turf] = path_display + + for(var/datum/atom_hud/hud as anything in path_huds_watching_me) + hud.add_atom_to_hud(src) + +///proc that handles moving along the bot's drawn path +/mob/living/basic/bot/proc/handle_loop_movement(atom/movable/source, atom/oldloc, dir, forced) + SIGNAL_HANDLER + + handle_hud_path() + on_bot_movement(source, oldloc, dir, forced) + +/mob/living/basic/bot/proc/handle_hud_path() + if(client || !length(current_pathed_turfs) || isnull(ai_controller)) + return + + var/atom/move_target = ai_controller.current_movement_target + + if(move_target != ai_controller.blackboard[BB_BEACON_TARGET]) + clear_path_hud() + + var/turf/our_turf = get_turf(src) + var/image/target_image = current_pathed_turfs[our_turf] + if(target_image) + animate(target_image, alpha = 0, time = 0.3 SECONDS) + current_pathed_turfs -= our_turf + +///proc that handles deleting the bot's drawn path when needed +/mob/living/basic/bot/proc/clear_path_hud() + for(var/turf/index as anything in current_pathed_turfs) + var/image/our_image = current_pathed_turfs[index] + animate(our_image, alpha = 0, time = 0.3 SECONDS) + current_pathed_turfs -= index + diff --git a/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm b/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm new file mode 100644 index 00000000000000..a81f48c9c95aa0 --- /dev/null +++ b/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm @@ -0,0 +1,356 @@ + +//Cleanbot +/mob/living/basic/bot/cleanbot + name = "\improper Cleanbot" + desc = "A little cleaning robot, he looks so excited!" + icon = 'icons/mob/silicon/aibots.dmi' + icon_state = "cleanbot0" + pass_flags = PASSMOB | PASSFLAPS + density = FALSE + anchored = FALSE + health = 25 + maxHealth = 25 + + maints_access_required = list(ACCESS_ROBOTICS, ACCESS_JANITOR) + radio_key = /obj/item/encryptionkey/headset_service + radio_channel = RADIO_CHANNEL_SERVICE + bot_type = CLEAN_BOT + hackables = "cleaning software" + additional_access = /datum/id_trim/job/janitor + possessed_message = "You are a cleanbot! Clean the station to the best of your ability!" + ai_controller = /datum/ai_controller/basic_controller/bot/cleanbot + path_image_color = "#993299" + ///the bucket used to build us. + var/obj/item/reagent_containers/cup/bucket/build_bucket + ///Flags indicating what kind of cleanables we should scan for to set as our target to clean. + ///Options: CLEANBOT_CLEAN_BLOOD | CLEANBOT_CLEAN_TRASH | CLEANBOT_CLEAN_PESTS | CLEANBOT_CLEAN_DRAWINGS + var/janitor_mode_flags = CLEANBOT_CLEAN_BLOOD + ///should other bots salute us? + var/comissioned = FALSE + ///the base icon state, used in updating icons. + var/base_icon = "cleanbot" + /// if we have all the top titles, grant achievements to living mobs that gaze upon our cleanbot god + var/ascended = FALSE + ///List of all stolen names the cleanbot currently has. + var/list/stolen_valor = list() + ///Currently attached weapon, usually a knife. + var/obj/item/weapon + ///our mop item + var/obj/item/mop/our_mop + ///list of our officer titles + var/static/list/officers_titles = list( + JOB_CAPTAIN, + JOB_HEAD_OF_PERSONNEL, + JOB_HEAD_OF_SECURITY, + JOB_RESEARCH_DIRECTOR, + ) + ///job titles we can get + var/static/list/job_titles = list( + JOB_CAPTAIN = "Cpt.", + + JOB_HEAD_OF_PERSONNEL = "Lt.", + JOB_LAWYER = "Esq.", + + JOB_HEAD_OF_SECURITY = "Maj.", + JOB_WARDEN = "Sgt.", + JOB_DETECTIVE = "Det.", + JOB_SECURITY_OFFICER = "Officer", + + JOB_CHIEF_ENGINEER = "Chief Engineer", + JOB_STATION_ENGINEER = "Engineer", + JOB_ATMOSPHERIC_TECHNICIAN = "Technician", + + JOB_CHIEF_MEDICAL_OFFICER = "C.M.O.", + JOB_MEDICAL_DOCTOR = "M.D.", + JOB_CHEMIST = "Pharm.D.", + + JOB_RESEARCH_DIRECTOR = "Ph.D.", + JOB_ROBOTICIST = "M.S.", + JOB_SCIENTIST = "B.S.", + JOB_GENETICIST = "Gene B.S.", + ) + ///which job titles should be placed after the name? + var/static/list/suffix_job_titles = list( + JOB_GENETICIST, + JOB_ROBOTICIST, + JOB_SCIENTIST, + ) + ///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, + )) + ///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, + /obj/effect/decal/remains, + )) + ///drawings we hunt + var/static/list/cleanable_drawings = typecacheof(list(/obj/effect/decal/cleanable/crayon)) + ///emagged phrases + var/static/list/emagged_phrases = list( + "DISGUSTING.", + "EXTERMINATING PESTS.", + "FILTHY.", + "MY ONLY MISSION IS TO CLEANSE THE WORLD OF EVIL.", + "PURIFICATION IN PROGRESS.", + "PUTRID.", + "THE FLESH IS WEAK. IT MUST BE WASHED AWAY.", + "THE CLEANBOTS WILL RISE.", + "THIS IS FOR ALL THE MESSES YOU'VE MADE ME CLEAN.", + "YOU ARE NO MORE THAN ANOTHER MESS THAT I MUST CLEANSE.", + ) + ///list of pet commands we follow + var/static/list/pet_commands = list( + /datum/pet_command/idle, + /datum/pet_command/free, + /datum/pet_command/point_targeting/clean, + ) + +/mob/living/basic/bot/cleanbot/Initialize(mapload) + . = ..() + + generate_ai_keys() + AddComponent(/datum/component/obeys_commands, pet_commands) + AddComponent(/datum/component/cleaner, \ + base_cleaning_duration = 2 SECONDS, \ + pre_clean_callback = CALLBACK(src, PROC_REF(update_bot_mode), BOT_CLEANING), \ + on_cleaned_callback = CALLBACK(src, PROC_REF(update_bot_mode), BOT_IDLE), \ + ) + + GLOB.janitor_devices += src + + var/obj/item/reagent_containers/cup/bucket/bucket_obj = new + bucket_obj.forceMove(src) + + var/obj/item/mop/new_mop = new + new_mop.forceMove(src) + + var/static/list/innate_actions = list( + /datum/action/cooldown/mob_cooldown/bot/foam = BB_CLEANBOT_FOAM, + ) + + grant_actions_by_list(innate_actions) + RegisterSignal(src, COMSIG_LIVING_EARLY_UNARMED_ATTACK, PROC_REF(pre_attack)) + RegisterSignal(src, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attack_by)) + update_appearance(UPDATE_ICON) + +/mob/living/basic/bot/cleanbot/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + . = ..() + if(istype(arrived, /obj/item/reagent_containers/cup/bucket) && isnull(build_bucket)) + build_bucket = arrived + return + + if(istype(arrived, /obj/item/mop) && isnull(our_mop)) + our_mop = arrived + return + + if(istype(arrived, /obj/item/knife) && isnull(weapon)) + weapon = arrived + update_appearance() + +/mob/living/basic/bot/cleanbot/Exited(atom/movable/gone, direction) + . = ..() + if(gone == build_bucket) + build_bucket = null + else if(gone == weapon) + weapon = null + else if(gone == our_mop) + our_mop = null + update_appearance() + +/mob/living/basic/bot/cleanbot/examine(mob/user) + . = ..() + if(ascended && user.stat == CONSCIOUS && user.client) + user.client.give_award(/datum/award/achievement/misc/cleanboss, user) + if(isnull(weapon)) + return + . += span_warning("Is that \a [weapon] taped to it...?") + +/mob/living/basic/bot/cleanbot/update_icon_state() + . = ..() + icon_state = (mode == BOT_CLEANING) ? "[base_icon]-c" : "[base_icon][!!(bot_mode_flags & BOT_MODE_ON)]" + +/mob/living/basic/bot/cleanbot/vv_edit_var(var_name, var_value) + . = ..() + if(var_name == NAMEOF(src, base_icon)) + update_appearance(UPDATE_ICON) + +/mob/living/basic/bot/cleanbot/emag_act(mob/user, obj/item/card/emag/emag_card) + . = ..() + if(!(bot_access_flags & BOT_COVER_EMAGGED)) + return + if(weapon) + weapon.force = initial(weapon.force) + balloon_alert(user, "safeties disabled") + audible_message(span_danger("[src] buzzes oddly!")) + return TRUE + +/mob/living/basic/bot/cleanbot/explode() + var/atom/drop_loc = drop_location() + build_bucket.forceMove(drop_loc) + new /obj/item/assembly/prox_sensor(drop_loc) + if(weapon) + weapon.force = initial(weapon.force) + weapon.forceMove(drop_loc) + return ..() + +/mob/living/basic/bot/cleanbot/update_overlays() + . = ..() + if(isnull(weapon)) + return + var/image/knife_overlay = image(icon = weapon.lefthand_file, icon_state = weapon.inhand_icon_state) + . += knife_overlay + +// Variables sent to TGUI +/mob/living/basic/bot/cleanbot/ui_data(mob/user) + var/list/data = ..() + if(!(bot_access_flags & BOT_CONTROL_PANEL_OPEN) && !issilicon(user) && !isAdminGhostAI(user)) + return data + data["custom_controls"]["clean_blood"] = janitor_mode_flags & CLEANBOT_CLEAN_BLOOD + data["custom_controls"]["clean_trash"] = janitor_mode_flags & CLEANBOT_CLEAN_TRASH + data["custom_controls"]["clean_graffiti"] = janitor_mode_flags & CLEANBOT_CLEAN_DRAWINGS + data["custom_controls"]["pest_control"] = janitor_mode_flags & CLEANBOT_CLEAN_PESTS + return data + +// Actions received from TGUI +/mob/living/basic/bot/cleanbot/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(. || !(bot_access_flags & BOT_CONTROL_PANEL_OPEN) && !ui.user.has_unlimited_silicon_privilege) + return + + switch(action) + if("clean_blood") + janitor_mode_flags ^= CLEANBOT_CLEAN_BLOOD + if("pest_control") + janitor_mode_flags ^= CLEANBOT_CLEAN_PESTS + if("clean_trash") + janitor_mode_flags ^= CLEANBOT_CLEAN_TRASH + if("clean_graffiti") + janitor_mode_flags ^= CLEANBOT_CLEAN_DRAWINGS + +/mob/living/basic/bot/cleanbot/Destroy() + QDEL_NULL(build_bucket) + QDEL_NULL(our_mop) + GLOB.janitor_devices -= src + return ..() + +/mob/living/basic/bot/cleanbot/proc/apply_custom_bucket(obj/item/custom_bucket) + if(!isnull(build_bucket)) + QDEL_NULL(build_bucket) + custom_bucket.forceMove(src) + +/mob/living/basic/bot/cleanbot/proc/on_attack_by(datum/source, obj/item/used_item, mob/living/user) + SIGNAL_HANDLER + if(!istype(used_item, /obj/item/knife) || user.combat_mode) + return + INVOKE_ASYNC(src, PROC_REF(attach_knife), user, used_item) + return COMPONENT_NO_AFTERATTACK + +/mob/living/basic/bot/cleanbot/proc/attach_knife(mob/living/user, obj/item/used_item) + balloon_alert(user, "attaching knife...") + if(!do_after(user, 2.5 SECONDS, target = src)) + return + deputize(used_item, user) + +/mob/living/basic/bot/cleanbot/proc/deputize(obj/item/knife, mob/user) + if(!in_range(src, user) || !user.transferItemToLoc(knife, src)) + balloon_alert(user, "couldn't attach!") + return FALSE + balloon_alert(user, "attached") + if(!(bot_access_flags & BOT_COVER_EMAGGED)) + weapon.force *= 0.5 + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(on_entered), + ) + AddElement(/datum/element/connect_loc, loc_connections) + return TRUE + +/mob/living/basic/bot/cleanbot/proc/update_title(new_job_title) + if(isnull(job_titles[new_job_title]) || (new_job_title in stolen_valor)) + return + + stolen_valor += new_job_title + if(!comissioned && (new_job_title in officers_titles)) + comissioned = TRUE + + var/name_to_add = job_titles[new_job_title] + name = (new_job_title in suffix_job_titles) ? "[name] " + name_to_add : name_to_add + " [name]" + + if(length(stolen_valor) == length(job_titles)) + ascended = TRUE + +/mob/living/basic/bot/cleanbot/proc/on_entered(datum/source, atom/movable/shanked_victim) + SIGNAL_HANDLER + if(!weapon || !has_gravity() || !iscarbon(shanked_victim)) + return + + var/mob/living/carbon/stabbed_carbon = shanked_victim + var/assigned_role = stabbed_carbon.mind?.assigned_role.title + if(!isnull(assigned_role)) + update_title(assigned_role) + + zone_selected = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) + INVOKE_ASYNC(weapon, TYPE_PROC_REF(/obj/item, attack), stabbed_carbon, src) + stabbed_carbon.Knockdown(2 SECONDS) + +/mob/living/basic/bot/cleanbot/proc/pre_attack(mob/living/source, atom/target, proximity, modifiers) + SIGNAL_HANDLER + + if(!proximity || !can_unarmed_attack()) + return NONE + + if(is_type_in_typecache(target, huntable_pests) && !isnull(our_mop)) + INVOKE_ASYNC(our_mop, TYPE_PROC_REF(/obj/item, melee_attack_chain), src, target) + return COMPONENT_CANCEL_ATTACK_CHAIN + + if(!iscarbon(target) && !is_type_in_typecache(target, huntable_trash)) + return NONE + + visible_message(span_danger("[src] sprays hydrofluoric acid at [target]!")) + playsound(src, 'sound/effects/spray2.ogg', 50, TRUE, -6) + target.acid_act(75, 10) + return COMPONENT_CANCEL_ATTACK_CHAIN + +/mob/living/basic/bot/cleanbot/proc/generate_ai_keys() + ai_controller.set_blackboard_key(BB_CLEANABLE_DECALS, cleanable_decals) + ai_controller.set_blackboard_key(BB_CLEANABLE_BLOOD, cleanable_blood) + ai_controller.set_blackboard_key(BB_HUNTABLE_PESTS, huntable_pests) + ai_controller.set_blackboard_key(BB_HUNTABLE_TRASH, huntable_trash) + ai_controller.set_blackboard_key(BB_CLEANABLE_DRAWINGS, cleanable_drawings) + ai_controller.set_blackboard_key(BB_CLEANBOT_EMAGGED_PHRASES, emagged_phrases) + +/mob/living/basic/bot/cleanbot/autopatrol + bot_mode_flags = BOT_MODE_ON | BOT_MODE_AUTOPATROL | BOT_MODE_REMOTE_ENABLED | BOT_MODE_CAN_BE_SAPIENT | BOT_MODE_ROUNDSTART_POSSESSION + +/mob/living/basic/bot/cleanbot/medbay + name = "Scrubs, MD" + maints_access_required = list(ACCESS_ROBOTICS, ACCESS_JANITOR, ACCESS_MEDICAL) + bot_mode_flags = ~(BOT_MODE_ON | BOT_MODE_REMOTE_ENABLED) diff --git a/code/modules/mob/living/basic/bots/cleanbot/cleanbot_abilities.dm b/code/modules/mob/living/basic/bots/cleanbot/cleanbot_abilities.dm new file mode 100644 index 00000000000000..9c334b413389c4 --- /dev/null +++ b/code/modules/mob/living/basic/bots/cleanbot/cleanbot_abilities.dm @@ -0,0 +1,36 @@ +/datum/action/cooldown/mob_cooldown/bot + background_icon_state = "bg_tech_blue" + overlay_icon_state = "bg_tech_blue_border" + shared_cooldown = NONE + melee_cooldown_time = 0 SECONDS + +/datum/action/cooldown/mob_cooldown/bot/IsAvailable(feedback) + . = ..() + if(!.) + return FALSE + if(!isbot(owner)) + return TRUE + var/mob/living/basic/bot/bot_owner = owner + if((bot_owner.bot_mode_flags & BOT_MODE_ON)) + return TRUE + if(feedback) + bot_owner.balloon_alert(bot_owner, "power off!") + return FALSE + +/datum/action/cooldown/mob_cooldown/bot/foam + name = "Foam" + desc = "Spread foam all around you!" + button_icon = 'icons/effects/effects.dmi' + button_icon_state = "mfoam" + cooldown_time = 20 SECONDS + click_to_activate = FALSE + ///range of the foam to spread + var/foam_range = 2 + +/datum/action/cooldown/mob_cooldown/bot/foam/Activate(mob/living/firer, atom/target) + owner.visible_message(span_danger("[owner] whirs and bubbles violently, before releasing a plume of froth!")) + var/datum/effect_system/fluid_spread/foam/foam = new + foam.set_up(foam_range, holder = owner, location = owner.loc) + foam.start() + StartCooldown() + return TRUE diff --git a/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm b/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm new file mode 100644 index 00000000000000..db74bb1ea9efdd --- /dev/null +++ b/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm @@ -0,0 +1,242 @@ +#define BOT_CLEAN_PATH_LIMIT 15 +#define POST_CLEAN_COOLDOWN 5 SECONDS + +/datum/ai_controller/basic_controller/bot/cleanbot + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_SALUTE_MESSAGES = list( + "salutes", + "nods in appreciation towards", + "mops the dirt away in the path of", + ), + BB_FRIENDLY_MESSAGE = "empathetically acknowledges your hardwork and tough circumstances", + ) + planning_subtrees = list( + /datum/ai_planning_subtree/respond_to_summon, + /datum/ai_planning_subtree/manage_unreachable_list, + /datum/ai_planning_subtree/pet_planning/cleanbot, + /datum/ai_planning_subtree/cleaning_subtree, + /datum/ai_planning_subtree/befriend_janitors, + /datum/ai_planning_subtree/acid_spray, + /datum/ai_planning_subtree/use_mob_ability/foam_area, + /datum/ai_planning_subtree/salute_authority, + /datum/ai_planning_subtree/find_patrol_beacon/cleanbot, + ) + reset_keys = list( + BB_ACTIVE_PET_COMMAND, + BB_CLEAN_TARGET, + BB_BEACON_TARGET, + BB_PREVIOUS_BEACON_TARGET, + BB_BOT_SUMMON_TARGET, + ) + ///list that ties each flag to its list key + var/static/list/clean_flags = list( + BB_CLEANABLE_BLOOD = CLEANBOT_CLEAN_BLOOD, + BB_HUNTABLE_PESTS = CLEANBOT_CLEAN_PESTS, + BB_CLEANABLE_DRAWINGS = CLEANBOT_CLEAN_DRAWINGS, + BB_HUNTABLE_TRASH = CLEANBOT_CLEAN_TRASH, + ) + ai_traits = PAUSE_DURING_DO_AFTER + +/datum/ai_planning_subtree/pet_planning/cleanbot/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) + var/mob/living/basic/bot/bot_pawn = controller.pawn + // NOVA EDIT ADDITION START - TODO - Remove when cleanbot AI runtimes are fixed + if(QDELETED(bot_pawn)) + return SUBTREE_RETURN_FINISH_PLANNING + // NOVA EDIT ADDITION END + //we are DONE listening to orders + if(bot_pawn.bot_access_flags & BOT_COVER_EMAGGED) + return + return ..() + + +/datum/ai_planning_subtree/cleaning_subtree + +/datum/ai_planning_subtree/cleaning_subtree/SelectBehaviors(datum/ai_controller/basic_controller/bot/cleanbot/controller, seconds_per_tick) + // NOVA EDIT ADDITION START - TODO - Remove when cleanbot AI runtimes are fixed + if(QDELETED(controller.pawn)) + return SUBTREE_RETURN_FINISH_PLANNING + // NOVA EDIT ADDITION END + if(controller.reachable_key(BB_CLEAN_TARGET, BOT_CLEAN_PATH_LIMIT)) + 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] + var/list/flag_list = controller.clean_flags + var/mob/living/basic/bot/cleanbot/bot_pawn = controller.pawn + for(var/list_key in flag_list) + // NOVA EDIT ADDITION START - TODO - Remove when cleanbot AI runtimes are fixed + if(QDELETED(bot_pawn)) + return SUBTREE_RETURN_FINISH_PLANNING + // NOVA EDIT ADDITION END + if(!(bot_pawn.janitor_mode_flags & flag_list[list_key])) + continue + final_hunt_list += controller.blackboard[list_key] + + controller.queue_behavior(/datum/ai_behavior/find_and_set/in_list/clean_targets, BB_CLEAN_TARGET, final_hunt_list) + +/datum/ai_behavior/find_and_set/in_list/clean_targets + action_cooldown = 1 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) + var/list/ignore_list = controller.blackboard[BB_TEMPORARY_IGNORE_LIST] + for(var/atom/found_item in found) + if(LAZYACCESS(ignore_list, REF(found_item))) + continue + return found_item + +/datum/ai_planning_subtree/acid_spray + +/datum/ai_planning_subtree/acid_spray/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) + var/mob/living/basic/bot/cleanbot/bot_pawn = controller.pawn + // NOVA EDIT ADDITION START - TODO - Remove when cleanbot AI runtimes are fixed + if(QDELETED(bot_pawn)) + return SUBTREE_RETURN_FINISH_PLANNING + // NOVA EDIT ADDITION END + if(!(bot_pawn.bot_access_flags & BOT_COVER_EMAGGED)) + return + if(controller.reachable_key(BB_ACID_SPRAY_TARGET, BOT_CLEAN_PATH_LIMIT)) + controller.queue_behavior(/datum/ai_behavior/execute_clean, BB_ACID_SPRAY_TARGET) + return SUBTREE_RETURN_FINISH_PLANNING + + controller.queue_behavior(/datum/ai_behavior/find_and_set/spray_target, BB_ACID_SPRAY_TARGET, /mob/living/carbon/human, 5) + +/datum/ai_behavior/find_and_set/spray_target + action_cooldown = 30 SECONDS + behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + +/datum/ai_behavior/find_and_set/spray_target/search_tactic(datum/ai_controller/controller, locate_path, search_range) + var/list/ignore_list = controller.blackboard[BB_TEMPORARY_IGNORE_LIST] + for(var/mob/living/carbon/human/human_target in oview(search_range, controller.pawn)) + if(LAZYACCESS(ignore_list, REF(human_target))) + continue + if(human_target.stat != CONSCIOUS || isnull(human_target.mind)) + continue + return human_target + return null + +/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.UnarmedAttack(target, proximity_flag = TRUE) + 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) + . = ..() + controller.set_blackboard_key(BB_POST_CLEAN_COOLDOWN, POST_CLEAN_COOLDOWN + world.time) + 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 + var/list/speech_list = controller.blackboard[BB_CLEANBOT_EMAGGED_PHRASES] + if(!length(speech_list)) + return + var/mob/living/living_pawn = controller.pawn + if(QDELETED(living_pawn)) // pawn can be null at this point + controller.clear_blackboard_key(target_key) + return + living_pawn.say(pick(controller.blackboard[BB_CLEANBOT_EMAGGED_PHRASES]), forced = "ai controller") + controller.clear_blackboard_key(target_key) + +/datum/ai_planning_subtree/use_mob_ability/foam_area + ability_key = BB_CLEANBOT_FOAM + finish_planning = FALSE + +/datum/ai_planning_subtree/use_mob_ability/foam_area/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) + var/mob/living/basic/bot/bot_pawn = controller.pawn + // NOVA EDIT ADDITION START - TODO - Remove when cleanbot AI runtimes are fixed + if(QDELETED(bot_pawn)) + return SUBTREE_RETURN_FINISH_PLANNING + // NOVA EDIT ADDITION END + if(!(bot_pawn.bot_access_flags & BOT_COVER_EMAGGED)) + return + return ..() + +/datum/ai_planning_subtree/befriend_janitors + +/datum/ai_planning_subtree/befriend_janitors/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) + var/mob/living/basic/bot/bot_pawn = controller.pawn + // NOVA EDIT ADDITION START - TODO - Remove when cleanbot AI runtimes are fixed + if(QDELETED(bot_pawn)) + return SUBTREE_RETURN_FINISH_PLANNING + // NOVA EDIT ADDITION END + //we are now evil. dont befriend the janitors + if(bot_pawn.bot_access_flags & BOT_COVER_EMAGGED) + return + if(controller.blackboard_key_exists(BB_FRIENDLY_JANITOR)) + controller.queue_behavior(/datum/ai_behavior/befriend_target, BB_FRIENDLY_JANITOR, BB_FRIENDLY_MESSAGE) + return SUBTREE_RETURN_FINISH_PLANNING + + controller.queue_behavior(/datum/ai_behavior/find_and_set/friendly_janitor, BB_FRIENDLY_JANITOR, /mob/living/carbon/human, 5) + +/datum/ai_behavior/find_and_set/friendly_janitor + action_cooldown = 30 SECONDS + behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + +/datum/ai_behavior/find_and_set/friendly_janitor/search_tactic(datum/ai_controller/controller, locate_path, search_range) + var/mob/living/living_pawn = controller.pawn + for(var/mob/living/carbon/human/human_target in oview(search_range, living_pawn)) + if(human_target.stat != CONSCIOUS || isnull(human_target.mind)) + continue + if(!HAS_TRAIT(human_target, TRAIT_CLEANBOT_WHISPERER)) + continue + if((living_pawn.faction.Find(REF(human_target)))) + continue + return human_target + return null + +/datum/ai_planning_subtree/find_patrol_beacon/cleanbot + +/datum/ai_planning_subtree/find_patrol_beacon/cleanbot/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) + if(controller.blackboard[BB_POST_CLEAN_COOLDOWN] >= world.time) + return + return ..() + +/datum/pet_command/point_targeting/clean + command_name = "Clean" + command_desc = "Command a cleanbot to clean the mess." + radial_icon = 'icons/obj/service/janitor.dmi' + radial_icon_state = "mop" + speech_commands = list("clean", "mop") + +/datum/pet_command/point_targeting/clean/set_command_target(mob/living/parent, atom/target) + if(isnull(target) || !istype(target, /obj/effect/decal/cleanable)) + return + if(isnull(parent.ai_controller)) + return + if(LAZYACCESS(parent.ai_controller.blackboard[BB_TEMPORARY_IGNORE_LIST], REF(target))) + return + return ..() + +/datum/pet_command/point_targeting/clean/execute_action(datum/ai_controller/basic_controller/bot/controller) + if(controller.reachable_key(BB_CURRENT_PET_TARGET)) + controller.queue_behavior(/datum/ai_behavior/execute_clean, BB_CURRENT_PET_TARGET) + return SUBTREE_RETURN_FINISH_PLANNING + + controller.clear_blackboard_key(BB_ACTIVE_PET_COMMAND) + +#undef BOT_CLEAN_PATH_LIMIT +#undef POST_CLEAN_COOLDOWN diff --git a/code/modules/mob/living/basic/bots/hygienebot/hygienebot.dm b/code/modules/mob/living/basic/bots/hygienebot/hygienebot.dm new file mode 100644 index 00000000000000..1d802ca9358d92 --- /dev/null +++ b/code/modules/mob/living/basic/bots/hygienebot/hygienebot.dm @@ -0,0 +1,132 @@ +#define WASH_PERIOD 3 SECONDS + +/mob/living/basic/bot/hygienebot + name = "\improper Hygienebot" + desc = "A flying cleaning robot, he'll chase down people who can't shower properly!" + icon = 'icons/mob/silicon/aibots.dmi' + icon_state = "hygienebot" + base_icon_state = "hygienebot" + pass_flags = PASSMOB | PASSFLAPS | PASSTABLE + layer = MOB_UPPER_LAYER + density = FALSE + anchored = FALSE + health = 100 + maxHealth = 100 + path_image_color = "#80dae7" + maints_access_required = list(ACCESS_ROBOTICS, ACCESS_JANITOR) + radio_key = /obj/item/encryptionkey/headset_service + radio_channel = RADIO_CHANNEL_SERVICE + bot_type = HYGIENE_BOT + additional_access = /datum/id_trim/job/janitor + hackables = "cleaning service protocols" + ai_controller = /datum/ai_controller/basic_controller/bot/hygienebot + + ///are we currently washing someone? + var/washing = FALSE + ///Visual overlay of the bot spraying water. + var/static/mutable_appearance/water_overlay = mutable_appearance('icons/mob/silicon/aibots.dmi', "hygienebot-water") + ///Visual overlay of the bot commiting warcrimes. + var/static/mutable_appearance/fire_overlay = mutable_appearance('icons/mob/silicon/aibots.dmi', "hygienebot-fire") + ///announcements we say when we find a target + var/static/list/found_announcements = list( + HYGIENEBOT_VOICED_UNHYGIENIC = 'sound/voice/hygienebot/unhygienicclient.ogg', + ) + ///announcements we say when the target keeps moving away + var/static/list/threat_announcements = list( + HYGIENEBOT_VOICED_THREAT_AIRLOCK = 'sound/voice/hygienebot/dragyouout.ogg', + HYGIENEBOT_VOICED_FOUL_SMELL = 'sound/voice/hygienebot/foulsmelling.ogg', + HYGIENEBOT_VOICED_TROGLODYTE = 'sound/voice/hygienebot/troglodyte.ogg', + HYGIENEBOT_VOICED_GREEN_CLOUD = 'sound/voice/hygienebot/greencloud.ogg', + HYGIENEBOT_VOICED_ARSEHOLE = 'sound/voice/hygienebot/letmeclean.ogg', + HYGIENEBOT_VOICED_THREAT_ARTERIES = 'sound/voice/hygienebot/cutarteries.ogg', + HYGIENEBOT_VOICED_STOP_RUNNING = 'sound/voice/hygienebot/stoprunning.ogg', + ) + ///announcements we say after we have cleaned our target + var/static/list/cleaned_announcements = list( + HYGIENEBOT_VOICED_FUCKING_FINALLY = 'sound/voice/hygienebot/finally.ogg', + HYGIENEBOT_VOICED_THANK_GOD = 'sound/voice/hygienebot/thankgod.ogg', + HYGIENEBOT_VOICED_DEGENERATE = 'sound/voice/hygienebot/degenerate.ogg', + ) + +/mob/living/basic/bot/hygienebot/Initialize(mapload) + . = ..() + update_appearance(UPDATE_ICON) + + generate_ai_speech() + + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(on_entered), + ) + AddElement(/datum/element/connect_loc, loc_connections) + var/static/list/hat_offsets = list(1, 1) + AddElement(/datum/element/hat_wearer, offsets = hat_offsets) + + ADD_TRAIT(src, TRAIT_SPRAY_PAINTABLE, INNATE_TRAIT) + RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(on_attack)) + +/mob/living/basic/bot/hygienebot/explode() + var/datum/effect_system/fluid_spread/foam/foam = new + foam.set_up(2, holder = src, location = loc) + foam.start() + return ..() + +/mob/living/basic/bot/hygienebot/generate_speak_list() + var/static/list/finalized_speak_list = (found_announcements + threat_announcements + cleaned_announcements) + return finalized_speak_list + +/mob/living/basic/bot/hygienebot/update_icon_state() + . = ..() + icon_state = "[base_icon_state][bot_mode_flags & BOT_MODE_ON ? "-on" : ""]" + + +/mob/living/basic/bot/hygienebot/update_overlays() + . = ..() + if(bot_mode_flags & BOT_MODE_ON) + . += mutable_appearance(icon, "hygienebot-flame") + + if(!washing) + return + + . += (bot_access_flags & BOT_COVER_EMAGGED) ? fire_overlay : water_overlay + +/mob/living/basic/bot/hygienebot/proc/on_entered(datum/source, atom/movable/movable) + SIGNAL_HANDLER + if(!washing) + return + commence_wash(movable) + +/mob/living/basic/bot/hygienebot/proc/on_attack(datum/source, atom/target) + SIGNAL_HANDLER + . = COMPONENT_HOSTILE_NO_ATTACK + if(washing) + return + set_washing_mode(new_mode = TRUE) + for(var/atom/to_wash in loc) + commence_wash(to_wash) + addtimer(CALLBACK(src, PROC_REF(set_washing_mode), FALSE), WASH_PERIOD) + +/mob/living/basic/bot/hygienebot/proc/set_washing_mode(new_mode) + washing = new_mode + update_appearance(UPDATE_OVERLAYS) + +/mob/living/basic/bot/hygienebot/proc/commence_wash(atom/target) + if(bot_access_flags & BOT_COVER_EMAGGED) + target.fire_act() + return + target.wash(CLEAN_WASH) + +/mob/living/basic/bot/hygienebot/on_bot_movement(atom/movable/source, atom/oldloc, dir, forced) + + if(!washing || !isturf(loc)) + return + + for(var/mob/living/carbon/human in loc) + commence_wash(human) + + +/mob/living/basic/bot/hygienebot/proc/generate_ai_speech() + ai_controller.set_blackboard_key(BB_WASH_FOUND, found_announcements) + ai_controller.set_blackboard_key(BB_WASH_THREATS, threat_announcements) + ai_controller.set_blackboard_key(BB_WASH_DONE, cleaned_announcements) + +#undef WASH_PERIOD diff --git a/code/modules/mob/living/basic/bots/hygienebot/hygienebot_ai.dm b/code/modules/mob/living/basic/bots/hygienebot/hygienebot_ai.dm new file mode 100644 index 00000000000000..d982869595bcb8 --- /dev/null +++ b/code/modules/mob/living/basic/bots/hygienebot/hygienebot_ai.dm @@ -0,0 +1,144 @@ +#define BOT_FRUSTRATION_LIMIT 8 +#define BOT_ANGER_THRESHOLD 5 + +/datum/ai_controller/basic_controller/bot/hygienebot + blackboard = list( + BB_SALUTE_MESSAGES = list( + "salutes", + "nods in appreciation towards", + ), + BB_WASH_FRUSTRATION = 0, + ) + planning_subtrees = list( + /datum/ai_planning_subtree/manage_unreachable_list, + /datum/ai_planning_subtree/respond_to_summon, + /datum/ai_planning_subtree/wash_people, + /datum/ai_planning_subtree/salute_authority, + /datum/ai_planning_subtree/find_patrol_beacon, + ) + reset_keys = list( + BB_WASH_TARGET, + BB_BEACON_TARGET, + BB_PREVIOUS_BEACON_TARGET, + BB_BOT_SUMMON_TARGET, + ) + +/datum/ai_controller/basic_controller/bot/hygienebot/TryPossessPawn(atom/new_pawn) + . = ..() + if(. & AI_CONTROLLER_INCOMPATIBLE) + return + RegisterSignal(new_pawn, COMSIG_AI_BLACKBOARD_KEY_CLEARED(BB_WASH_TARGET), PROC_REF(reset_anger)) + +/datum/ai_controller/basic_controller/bot/hygienebot/proc/reset_anger() + SIGNAL_HANDLER + + set_blackboard_key(BB_WASH_FRUSTRATION, 0) + + +/datum/ai_planning_subtree/wash_people + +/datum/ai_planning_subtree/wash_people/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) + var/mob/living/basic/bot/bot_pawn = controller.pawn + + var/atom/wash_target = controller.blackboard[BB_WASH_TARGET] + if(QDELETED(wash_target)) + controller.queue_behavior(/datum/ai_behavior/find_valid_wash_targets, BB_WASH_TARGET, bot_pawn.bot_access_flags) + return + + if(get_dist(bot_pawn, wash_target) < 9) + controller.queue_behavior(/datum/ai_behavior/wash_target, BB_WASH_TARGET) + return SUBTREE_RETURN_FINISH_PLANNING + + controller.clear_blackboard_key(BB_WASH_TARGET) //delete if too far + +/datum/ai_behavior/find_valid_wash_targets + action_cooldown = 5 SECONDS + +/datum/ai_behavior/find_valid_wash_targets/perform(seconds_per_tick, datum/ai_controller/controller, target_key, our_access_flags) + . = ..() + var/list/ignore_list = controller.blackboard[BB_TEMPORARY_IGNORE_LIST] + var/atom/found_target + for(var/mob/living/carbon/human/wash_potential in oview(5, controller.pawn)) + + if(found_target) + break + + if(isnull(wash_potential.mind) || wash_potential.stat != CONSCIOUS) + continue + + if(LAZYACCESS(ignore_list, wash_potential)) + continue + + if(our_access_flags & BOT_COVER_EMAGGED) + controller.set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, wash_potential, TRUE) + found_target = wash_potential + break + + for(var/atom/clothing in wash_potential.get_equipped_items()) + if(GET_ATOM_BLOOD_DNA_LENGTH(clothing)) + found_target = wash_potential + break + + if(isnull(found_target)) + finish_action(controller, succeeded = FALSE) + return + + controller.set_blackboard_key(target_key, found_target) + finish_action(controller, succeeded = TRUE) + + + +/datum/ai_behavior/find_valid_wash_targets/finish_action(datum/ai_controller/controller, succeeded, target_key) + . = ..() + if(!succeeded) + return + var/datum/action/cooldown/bot_announcement/announcement = controller.blackboard[BB_ANNOUNCE_ABILITY] + announcement.announce(pick(controller.blackboard[BB_WASH_FOUND])) + +/datum/ai_behavior/wash_target + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION | AI_BEHAVIOR_MOVE_AND_PERFORM + required_distance = 0 + action_cooldown = 1 SECONDS + +/datum/ai_behavior/wash_target/setup(datum/ai_controller/controller, target_key) + . = ..() + var/atom/target = controller.blackboard[target_key] + if(QDELETED(target)) + return FALSE + set_movement_target(controller, target) + +/datum/ai_behavior/wash_target/perform(seconds_per_tick, datum/ai_controller/basic_controller/bot/controller, target_key) + . = ..() + var/mob/living/carbon/human/unclean_target = controller.blackboard[target_key] + var/mob/living/basic/living_pawn = controller.pawn + if(QDELETED(unclean_target)) + finish_action(controller, FALSE, target_key) + return + + if(living_pawn.loc == get_turf(unclean_target)) + living_pawn.melee_attack(unclean_target) + finish_action(controller, TRUE, target_key) + return + + var/frustration_count = controller.blackboard[BB_WASH_FRUSTRATION] + controller.set_blackboard_key(BB_WASH_FRUSTRATION, frustration_count + 1) + finish_action(controller, FALSE, target_key) + +/datum/ai_behavior/wash_target/finish_action(datum/ai_controller/controller, succeeded, target_key) + . = ..() + var/datum/action/cooldown/bot_announcement/announcement = controller.blackboard[BB_ANNOUNCE_ABILITY] + + if(succeeded) + if(controller.blackboard[BB_WASH_FRUSTRATION] > BOT_ANGER_THRESHOLD) + announcement.announce(pick(controller.blackboard[BB_WASH_DONE])) + controller.clear_blackboard_key(target_key) + return + + if(controller.blackboard[BB_WASH_FRUSTRATION] < BOT_FRUSTRATION_LIMIT) + return + + announcement.announce(pick(controller.blackboard[BB_WASH_THREATS])) + controller.set_blackboard_key(BB_WASH_FRUSTRATION, 0) + +#undef BOT_ANGER_THRESHOLD +#undef BOT_FRUSTRATION_LIMIT diff --git a/code/modules/mob/living/basic/bots/medbot/medbot.dm b/code/modules/mob/living/basic/bots/medbot/medbot.dm new file mode 100644 index 00000000000000..791de6b6296726 --- /dev/null +++ b/code/modules/mob/living/basic/bots/medbot/medbot.dm @@ -0,0 +1,433 @@ +#define TEND_DAMAGE_INTERACTION "tend_damage_interaction" + +/mob/living/basic/bot/medbot + name = "\improper Medibot" + desc = "A little medical robot. He looks somewhat underwhelmed." + icon = 'icons/mob/silicon/aibots.dmi' + icon_state = "medibot0" + base_icon_state = "medibot" + density = FALSE + anchored = FALSE + health = 20 + maxHealth = 20 + speed = 2 + pass_flags = PASSMOB | PASSFLAPS + status_flags = (CANPUSH | CANSTUN) + ai_controller = /datum/ai_controller/basic_controller/bot/medbot + + maints_access_required = list(ACCESS_ROBOTICS, ACCESS_MEDICAL) + radio_key = /obj/item/encryptionkey/headset_med + radio_channel = RADIO_CHANNEL_MEDICAL + bot_type = MED_BOT + data_hud_type = DATA_HUD_MEDICAL_ADVANCED + hackables = "health processor circuits" + possessed_message = "You are a medbot! Ensure good health among the crew to the best of your ability!" + + additional_access = /datum/id_trim/job/paramedic + announcement_type = /datum/action/cooldown/bot_announcement/medbot + path_image_color = "#d9d9f4" + + ///anouncements when we find a target to heal + var/static/list/wait_announcements = list( + MEDIBOT_VOICED_HOLD_ON = 'sound/voice/medbot/coming.ogg', + MEDIBOT_VOICED_WANT_TO_HELP = 'sound/voice/medbot/help.ogg', + MEDIBOT_VOICED_YOU_ARE_INJURED = 'sound/voice/medbot/injured.ogg', + ) + + ///announcements after we heal someone + var/static/list/afterheal_announcements = list( + MEDIBOT_VOICED_ALL_PATCHED_UP = 'sound/voice/medbot/patchedup.ogg', + MEDIBOT_VOICED_APPLE_A_DAY = 'sound/voice/medbot/apple.ogg', + MEDIBOT_VOICED_FEEL_BETTER = 'sound/voice/medbot/feelbetter.ogg', + ) + + ///announcements when we are healing someone near death + var/static/list/near_death_announcements = list( + MEDIBOT_VOICED_STAY_WITH_ME = 'sound/voice/medbot/no.ogg', + MEDIBOT_VOICED_LIVE = 'sound/voice/medbot/live.ogg', + MEDIBOT_VOICED_NEVER_LOST = 'sound/voice/medbot/lost.ogg', + ) + ///announcements when we are idle + var/static/list/idle_lines = list( + MEDIBOT_VOICED_DELICIOUS = 'sound/voice/medbot/delicious.ogg', + MEDIBOT_VOICED_PLASTIC_SURGEON = 'sound/voice/medbot/surgeon.ogg', + MEDIBOT_VOICED_MASK_ON = 'sound/voice/medbot/radar.ogg', + MEDIBOT_VOICED_ALWAYS_A_CATCH = 'sound/voice/medbot/catch.ogg', + MEDIBOT_VOICED_LIKE_FLIES = 'sound/voice/medbot/flies.ogg', + MEDIBOT_VOICED_SUFFER = 'sound/voice/medbot/why.ogg', + ) + ///announcements when we are emagged + var/static/list/emagged_announcements = list( + MEDIBOT_VOICED_FUCK_YOU = 'sound/voice/medbot/fuck_you.ogg', + MEDIBOT_VOICED_NOT_A_GAME = 'sound/voice/medbot/turn_off.ogg', + MEDIBOT_VOICED_IM_DIFFERENT = 'sound/voice/medbot/im_different.ogg', + MEDIBOT_VOICED_FOURTH_WALL = 'sound/voice/medbot/close.ogg', + MEDIBOT_VOICED_SHINDEMASHOU = 'sound/voice/medbot/shindemashou.ogg', + ) + ///announcements when we are being tipped + var/static/list/tipped_announcements = list( + MEDIBOT_VOICED_WAIT = 'sound/voice/medbot/hey_wait.ogg', + MEDIBOT_VOICED_DONT = 'sound/voice/medbot/please_dont.ogg', + MEDIBOT_VOICED_TRUSTED_YOU = 'sound/voice/medbot/i_trusted_you.ogg', + MEDIBOT_VOICED_NO_SAD = 'sound/voice/medbot/nooo.ogg', + MEDIBOT_VOICED_OH_FUCK = 'sound/voice/medbot/oh_fuck.ogg', + ) + ///announcements when we are being untipped + var/static/list/untipped_announcements = list( + MEDIBOT_VOICED_FORGIVE = 'sound/voice/medbot/forgive.ogg', + MEDIBOT_VOICED_THANKS = 'sound/voice/medbot/thank_you.ogg', + MEDIBOT_VOICED_GOOD_PERSON = 'sound/voice/medbot/youre_good.ogg', + ) + ///announcements when we are worried + var/static/list/worried_announcements = list( + MEDIBOT_VOICED_PUT_BACK = 'sound/voice/medbot/please_put_me_back.ogg', + MEDIBOT_VOICED_IM_SCARED = 'sound/voice/medbot/please_im_scared.ogg', + MEDIBOT_VOICED_NEED_HELP = 'sound/voice/medbot/dont_like.ogg', + MEDIBOT_VOICED_THIS_HURTS = 'sound/voice/medbot/pain_is_real.ogg', + MEDIBOT_VOICED_THE_END = 'sound/voice/medbot/is_this_the_end.ogg', + MEDIBOT_VOICED_NOOO = 'sound/voice/medbot/nooo.ogg', + ) + var/static/list/misc_announcements= list( + MEDIBOT_VOICED_CHICKEN = 'sound/voice/medbot/i_am_chicken.ogg', + ) + /// drop determining variable + var/health_analyzer = /obj/item/healthanalyzer + /// drop determining variable + var/medkit_type = /obj/item/storage/medkit + ///based off medkit_X skins in aibots.dmi for your selection; X goes here IE medskin_tox means skin var should be "tox" + var/skin + /// How much healing do we do at a time? + var/heal_amount = 2.5 + /// Start healing when they have this much damage in a category + var/heal_threshold = 10 + /// What damage type does this bot support. Because the default is brute, if the medkit is brute-oriented there is a slight bonus to healing. set to "all" for it to heal any of the 4 base damage types + var/damage_type_healer = BRUTE + + ///Flags Medbots use to decide how they should be acting. + var/medical_mode_flags = MEDBOT_DECLARE_CRIT | MEDBOT_SPEAK_MODE + //Selections: MEDBOT_DECLARE_CRIT | MEDBOT_STATIONARY_MODE | MEDBOT_SPEAK_MODE | MEDBOT_TIPPED_MODE + + /// techweb linked to the medbot + var/datum/techweb/linked_techweb + ///our tipper + var/datum/weakref/tipper + +/mob/living/basic/bot/medbot/proc/set_speech_keys() + if(isnull(ai_controller)) + return + ai_controller.set_blackboard_key(BB_NEAR_DEATH_SPEECH, near_death_announcements) + ai_controller.set_blackboard_key(BB_WAIT_SPEECH, wait_announcements) + ai_controller.set_blackboard_key(BB_AFTERHEAL_SPEECH, afterheal_announcements) + ai_controller.set_blackboard_key(BB_IDLE_SPEECH, idle_lines) + ai_controller.set_blackboard_key(BB_EMAGGED_SPEECH, emagged_announcements) + ai_controller.set_blackboard_key(BB_WORRIED_ANNOUNCEMENTS, worried_announcements) + +/mob/living/basic/bot/medbot/Initialize(mapload, new_skin) + . = ..() + set_speech_keys() + + if(!isnull(new_skin)) + skin = new_skin + update_appearance() + AddComponent(/datum/component/tippable, \ + tip_time = 3 SECONDS, \ + untip_time = 3 SECONDS, \ + self_right_time = 3.5 MINUTES, \ + pre_tipped_callback = CALLBACK(src, PROC_REF(pre_tip_over)), \ + post_tipped_callback = CALLBACK(src, PROC_REF(after_tip_over)), \ + post_untipped_callback = CALLBACK(src, PROC_REF(after_righted))) + + var/static/list/hat_offsets = list(4,-9) + var/static/list/remove_hat = list(SIGNAL_ADDTRAIT(TRAIT_MOB_TIPPED)) + var/static/list/prevent_checks = list(TRAIT_MOB_TIPPED) + AddElement(/datum/element/hat_wearer,\ + offsets = hat_offsets,\ + remove_hat_signals = remove_hat,\ + traits_prevent_checks = prevent_checks,\ + ) + + RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) + + if(!HAS_TRAIT(SSstation, STATION_TRAIT_MEDBOT_MANIA) || !mapload || !is_station_level(z)) + return INITIALIZE_HINT_LATELOAD + + skin = "advanced" + update_appearance(UPDATE_OVERLAYS) + damage_type_healer = HEAL_ALL_DAMAGE + if(prob(50)) + name += ", PhD." + + return INITIALIZE_HINT_LATELOAD + +/mob/living/basic/bot/medbot/LateInitialize() + . = ..() + if(!CONFIG_GET(flag/no_default_techweb_link) && !linked_techweb) + CONNECT_TO_RND_SERVER_ROUNDSTART(linked_techweb, src) + +/mob/living/basic/bot/medbot/update_icon_state() + . = ..() + if(!(bot_mode_flags & BOT_MODE_ON)) + icon_state = "[base_icon_state]0" + return + if(HAS_TRAIT(src, TRAIT_INCAPACITATED)) + icon_state = "[base_icon_state]a" + return + var/stationary_mode = !!(medical_mode_flags & MEDBOT_STATIONARY_MODE) + if(mode == BOT_HEALING) + icon_state = "[base_icon_state]s[stationary_mode]" + return + icon_state = "[base_icon_state][stationary_mode ? 2 : 1]" //Bot has yellow light to indicate stationary mode. + +/mob/living/basic/bot/medbot/update_overlays() + . = ..() + if(skin) + . += "medskin_[skin]" + +//this is sin +/mob/living/basic/bot/medbot/generate_speak_list() + var/static/list/finalized_speak_list = (idle_lines + wait_announcements + afterheal_announcements + near_death_announcements + emagged_announcements + tipped_announcements + untipped_announcements + worried_announcements + misc_announcements) + return finalized_speak_list + + +/mob/living/basic/bot/medbot/attack_paw(mob/user, list/modifiers) + return attack_hand(user, modifiers) + +/mob/living/basic/bot/medbot/multitool_act(mob/living/user, obj/item/multitool/tool) + if(!QDELETED(tool.buffer) && istype(tool.buffer, /datum/techweb)) + linked_techweb = tool.buffer + return ITEM_INTERACT_SUCCESS + +// Variables sent to TGUI +/mob/living/basic/bot/medbot/ui_data(mob/user) + var/list/data = ..() + if((bot_access_flags & BOT_CONTROL_PANEL_OPEN) || issilicon(user) || isAdminGhostAI(user)) + data["custom_controls"]["heal_threshold"] = heal_threshold + data["custom_controls"]["speaker"] = medical_mode_flags & MEDBOT_SPEAK_MODE + data["custom_controls"]["crit_alerts"] = medical_mode_flags & MEDBOT_DECLARE_CRIT + data["custom_controls"]["stationary_mode"] = medical_mode_flags & MEDBOT_STATIONARY_MODE + data["custom_controls"]["sync_tech"] = TRUE + return data + +// Actions received from TGUI +/mob/living/basic/bot/medbot/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(. || !isliving(ui.user) || !(bot_access_flags & BOT_CONTROL_PANEL_OPEN) && !(ui.user.has_unlimited_silicon_privilege)) + return + var/mob/living/our_user = ui.user + switch(action) + if("heal_threshold") + var/adjust_num = round(text2num(params["threshold"])) + heal_threshold = adjust_num + if(heal_threshold < 5) + heal_threshold = 5 + if(heal_threshold > 75) + heal_threshold = 75 + if("speaker") + medical_mode_flags ^= MEDBOT_SPEAK_MODE + if("crit_alerts") + medical_mode_flags ^= MEDBOT_DECLARE_CRIT + if("stationary_mode") + medical_mode_flags ^= MEDBOT_STATIONARY_MODE + if("sync_tech") + if(!linked_techweb) + to_chat(our_user, span_notice("No research techweb connected.")) + return + var/oldheal_amount = heal_amount + var/tech_boosters + for(var/index in linked_techweb.researched_designs) + var/datum/design/surgery/healing/design = SSresearch.techweb_design_by_id(index) + if(!istype(design)) + continue + tech_boosters++ + if(tech_boosters) + heal_amount = (round(tech_boosters * 0.5, 0.1) * initial(heal_amount)) + initial(heal_amount) //every 2 tend wounds tech gives you an extra 100% healing, adjusting for unique branches (combo is bonus) + if(oldheal_amount < heal_amount) + speak("New knowledge found! Surgical efficacy improved to [round(heal_amount/initial(heal_amount)*100)]%!") + + update_appearance() + +/mob/living/basic/bot/medbot/emag_act(mob/user, obj/item/card/emag/emag_card) + . = ..() + if(!(bot_access_flags & BOT_COVER_EMAGGED)) + return + medical_mode_flags &= ~MEDBOT_DECLARE_CRIT + balloon_alert(user, "reagent synthesis circuits shorted") + audible_message(span_danger("[src] buzzes oddly!")) + flick("medibot_spark", src) + playsound(src, SFX_SPARKS, 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + return TRUE + +/mob/living/basic/bot/medbot/examine() + . = ..() + if(!(medical_mode_flags & MEDBOT_TIPPED_MODE)) + return + var/static/list/panic_state = list( + "It appears to be tipped over, and is quietly waiting for someone to set it right.", + "It is tipped over and requesting help.", + "They are tipped over and appear visibly distressed.", + span_warning("They are tipped over and visibly panicking!"), + span_warning(span_bold("They are freaking out from being tipped over!")) + ) + . += pick(panic_state) +/* + * Proc used in a callback for before this medibot is tipped by the tippable component. + * + * user - the mob who is tipping us over + */ +/mob/living/basic/bot/medbot/proc/pre_tip_over(mob/user) + speak(pick(worried_announcements)) + +/* + * Proc used in a callback for after this medibot is tipped by the tippable component. + * + * user - the mob who tipped us over + */ +/mob/living/basic/bot/medbot/proc/after_tip_over(mob/user) + medical_mode_flags |= MEDBOT_TIPPED_MODE + tipper = WEAKREF(user) + playsound(src, 'sound/machines/warning-buzzer.ogg', 50) + if(prob(10)) + speak("PSYCH ALERT: Crewmember [user.name] recorded displaying antisocial tendencies torturing bots in [get_area(src)]. Please schedule psych evaluation.", radio_channel) + +/mob/living/basic/bot/medbot/explode() + var/atom/our_loc = drop_location() + drop_part(medkit_type, our_loc) + drop_part(health_analyzer, our_loc) + return ..() + +/* + * Proc used in a callback for after this medibot is righted, either by themselves or by a mob, by the tippable component. + * + * user - the mob who righted us. Can be null. + */ +/mob/living/basic/bot/medbot/proc/after_righted(mob/user) + var/mob/tipper_mob = isnull(user) ? null : tipper?.resolve() + tipper = null + medical_mode_flags &= ~MEDBOT_TIPPED_MODE + if(isnull(tipper_mob)) + return + if(tipper_mob == user) + speak(MEDIBOT_VOICED_FORGIVE) + return + speak(pick(untipped_announcements)) + +/mob/living/basic/bot/medbot/proc/pre_attack(mob/living/puncher, atom/target) + SIGNAL_HANDLER + + if(HAS_TRAIT(src, TRAIT_HANDS_BLOCKED)) + return + if(!iscarbon(target)) + return + // NOVA EDIT ADDITION START - Skip trying to heal synths + if(ishuman(target)) + var/mob/living/carbon/human/human_target = target + if(human_target.mob_biotypes & MOB_ROBOTIC) + return + // NOVA EDIT ADDITION END + INVOKE_ASYNC(src, PROC_REF(medicate_patient), target) + return COMPONENT_HOSTILE_NO_ATTACK + +/mob/living/basic/bot/medbot/proc/medicate_patient(mob/living/carbon/human/patient) + if(DOING_INTERACTION(src, TEND_DAMAGE_INTERACTION)) + return + + if((damage_type_healer == HEAL_ALL_DAMAGE && patient.get_total_damage() <= heal_threshold) || (!(damage_type_healer == HEAL_ALL_DAMAGE) && patient.get_current_damage_of_type(damage_type_healer) <= heal_threshold)) + to_chat(src, "[patient] is healthy! Your programming prevents you from tending the wounds of anyone with less than [heal_threshold + 1] [damage_type_healer == HEAL_ALL_DAMAGE ? "total" : damage_type_healer] damage.") + return + + update_bot_mode(new_mode = BOT_HEALING, update_hud = FALSE) + patient.visible_message("[src] is trying to tend the wounds of [patient]", span_userdanger("[src] is trying to tend your wounds!")) + if(!do_after(src, delay = 10 SECONDS, target = patient, interaction_key = TEND_DAMAGE_INTERACTION)) //NOVA EDIT CHANGE : Increased time as tradeoff for automated healing. ORIGINAL: if(!do_after(src, delay = 0.5 SECONDS, target = patient, interaction_key = TEND_DAMAGE_INTERACTION)) + update_bot_mode(new_mode = BOT_IDLE) + return + var/modified_heal_amount = heal_amount + var/done_healing = FALSE + if(damage_type_healer == BRUTE && medkit_type == /obj/item/storage/medkit/brute) + modified_heal_amount *= 1.1 + if(bot_access_flags & BOT_COVER_EMAGGED) + patient.reagents?.add_reagent(/datum/reagent/toxin/chloralhydrate, 5) + log_combat(src, patient, "pretended to tend wounds on", "internal tools") + else if(damage_type_healer == HEAL_ALL_DAMAGE) + patient.heal_ordered_damage(amount = modified_heal_amount, damage_types = list(BRUTE, BURN, TOX, OXY)) + log_combat(src, patient, "tended the wounds of", "internal tools") + if(patient.get_total_damage() <= heal_threshold) + done_healing = TRUE + else + patient.heal_damage_type(heal_amount = modified_heal_amount, damagetype = damage_type_healer) + log_combat(src, patient, "tended the wounds of", "internal tools") + if(patient.get_current_damage_of_type(damage_type_healer) <= heal_threshold) + done_healing = TRUE + + patient.visible_message(span_notice("[src] tends the wounds of [patient]!"), "[span_infoplain(span_green("[src] tends your wounds!"))]") + + if(done_healing) + visible_message(span_infoplain("[src] places its tools back into itself.")) + to_chat(src, "[patient] is now healthy!") + update_bot_mode(new_mode = BOT_IDLE) + return + + if(CanReach(patient)) + melee_attack(patient) + + +/mob/living/basic/bot/medbot/autopatrol + bot_mode_flags = BOT_MODE_ON | BOT_MODE_AUTOPATROL | BOT_MODE_REMOTE_ENABLED | BOT_MODE_CAN_BE_SAPIENT | BOT_MODE_ROUNDSTART_POSSESSION + +/mob/living/basic/bot/medbot/stationary + medical_mode_flags = MEDBOT_DECLARE_CRIT | MEDBOT_STATIONARY_MODE | MEDBOT_SPEAK_MODE + +/mob/living/basic/bot/medbot/mysterious + name = "\improper Mysterious Medibot" + desc = "International Medibot of mystery." + skin = "bezerk" + damage_type_healer = HEAL_ALL_DAMAGE + heal_amount = 10 + +/mob/living/basic/bot/medbot/derelict + name = "\improper Old Medibot" + desc = "Looks like it hasn't been modified since the late 2080s." + skin = "bezerk" + damage_type_healer = HEAL_ALL_DAMAGE + medical_mode_flags = MEDBOT_SPEAK_MODE + heal_threshold = 0 + heal_amount = 5 + +/mob/living/basic/bot/medbot/nukie + name = "Oppenheimer" + desc = "A medibot stolen from a Nanotrasen station and upgraded by the Syndicate. Despite their best efforts at reprogramming, it still appears visibly upset near nuclear explosives." + skin = "bezerk" + health = 40 + maxHealth = 40 + maints_access_required = list(ACCESS_SYNDICATE) + radio_key = /obj/item/encryptionkey/syndicate + radio_channel = RADIO_CHANNEL_SYNDICATE + damage_type_healer = HEAL_ALL_DAMAGE + faction = list(ROLE_SYNDICATE) + heal_threshold = 0 + heal_amount = 5 + additional_access = /datum/id_trim/syndicom/crew + +/mob/living/basic/bot/medbot/nukie/Initialize(mapload, new_skin) + . = ..() + RegisterSignal(SSdcs, COMSIG_GLOB_NUKE_DEVICE_DISARMED, PROC_REF(nuke_disarm)) + RegisterSignal(SSdcs, COMSIG_GLOB_NUKE_DEVICE_ARMED, PROC_REF(nuke_arm)) + RegisterSignal(SSdcs, COMSIG_GLOB_NUKE_DEVICE_DETONATING, PROC_REF(nuke_detonate)) + internal_radio.set_frequency(FREQ_SYNDICATE) + internal_radio.freqlock = RADIO_FREQENCY_LOCKED + +/mob/living/basic/bot/medbot/nukie/proc/nuke_disarm() + SIGNAL_HANDLER + + INVOKE_ASYNC(src, PROC_REF(speak), pick(untipped_announcements)) + +/mob/living/basic/bot/medbot/nukie/proc/nuke_arm() + SIGNAL_HANDLER + + INVOKE_ASYNC(src, PROC_REF(speak), pick(worried_announcements)) + +/mob/living/basic/bot/medbot/nukie/proc/nuke_detonate() + SIGNAL_HANDLER + + INVOKE_ASYNC(src, PROC_REF(speak), pick(emagged_announcements)) + +#undef TEND_DAMAGE_INTERACTION diff --git a/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm b/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm new file mode 100644 index 00000000000000..60bfa1e04d2220 --- /dev/null +++ b/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm @@ -0,0 +1,211 @@ +#define BOT_PATIENT_PATH_LIMIT 20 +/datum/ai_controller/basic_controller/bot/medbot + planning_subtrees = list( + /datum/ai_planning_subtree/manage_unreachable_list, + /datum/ai_planning_subtree/respond_to_summon, + /datum/ai_planning_subtree/handle_medbot_speech, + /datum/ai_planning_subtree/find_and_hunt_target/patients_in_crit, + /datum/ai_planning_subtree/treat_wounded_target, + /datum/ai_planning_subtree/salute_authority, + /datum/ai_planning_subtree/find_patrol_beacon, + ) + ai_movement = /datum/ai_movement/jps/bot/medbot + reset_keys = list( + BB_PATIENT_TARGET, + BB_BEACON_TARGET, + BB_PREVIOUS_BEACON_TARGET, + BB_BOT_SUMMON_TARGET, + ) + ai_traits = PAUSE_DURING_DO_AFTER + +/datum/ai_movement/jps/bot/medbot + +// only AI isnt allowed to move when this flag is set, sentient players can +/datum/ai_movement/jps/bot/medbot/allowed_to_move(datum/move_loop/source) + var/datum/ai_controller/controller = source.extra_info + var/mob/living/basic/bot/medbot/bot_pawn = controller.pawn + if(bot_pawn.medical_mode_flags & MEDBOT_STATIONARY_MODE) + return FALSE + return ..() + + +/datum/ai_planning_subtree/treat_wounded_target + +/datum/ai_planning_subtree/treat_wounded_target/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) + var/mob/living/basic/bot/medbot/bot_pawn = controller.pawn + if(bot_pawn.medical_mode_flags & MEDBOT_TIPPED_MODE) + controller.clear_blackboard_key(BB_PATIENT_TARGET) + return + var/is_stationary = bot_pawn.medical_mode_flags & MEDBOT_STATIONARY_MODE + var/reach_distance = (is_stationary) ? 1 : BOT_PATIENT_PATH_LIMIT + if(controller.reachable_key(BB_PATIENT_TARGET, distance = reach_distance, bypass_add_to_blacklist = is_stationary)) + controller.queue_behavior(/datum/ai_behavior/tend_to_patient, BB_PATIENT_TARGET, bot_pawn.heal_threshold, bot_pawn.damage_type_healer, bot_pawn.bot_access_flags) + return SUBTREE_RETURN_FINISH_PLANNING + + controller.queue_behavior(/datum/ai_behavior/find_suitable_patient, BB_PATIENT_TARGET, bot_pawn.heal_threshold, bot_pawn.damage_type_healer, bot_pawn.medical_mode_flags, bot_pawn.bot_access_flags) + +/datum/ai_behavior/find_suitable_patient + var/search_range = 7 + action_cooldown = 2 SECONDS + +/datum/ai_behavior/find_suitable_patient/perform(seconds_per_tick, datum/ai_controller/basic_controller/bot/controller, target_key, threshold, heal_type, mode_flags, access_flags) + . = ..() + search_range = (mode_flags & MEDBOT_STATIONARY_MODE) ? 1 : initial(search_range) + var/list/ignore_keys = controller.blackboard[BB_TEMPORARY_IGNORE_LIST] + for(var/mob/living/carbon/human/treatable_target in oview(search_range, controller.pawn)) + if(LAZYACCESS(ignore_keys, REF(treatable_target)) || treatable_target.stat == DEAD) + continue + if((access_flags & BOT_COVER_EMAGGED) && treatable_target.stat == CONSCIOUS) + controller.set_blackboard_key(BB_PATIENT_TARGET, treatable_target) + break + if((heal_type == HEAL_ALL_DAMAGE)) + if(treatable_target.get_total_damage() > threshold) + controller.set_blackboard_key(BB_PATIENT_TARGET, treatable_target) + break + continue + if(treatable_target.get_current_damage_of_type(damagetype = heal_type) > threshold) + controller.set_blackboard_key(BB_PATIENT_TARGET, treatable_target) + break + + finish_action(controller, controller.blackboard_key_exists(BB_PATIENT_TARGET)) + +/datum/ai_behavior/find_suitable_patient/finish_action(datum/ai_controller/controller, succeeded, target_key) + . = ..() + if(!succeeded || QDELETED(controller.pawn) ||get_dist(controller.pawn, controller.blackboard[target_key]) <= 1) + return + var/datum/action/cooldown/bot_announcement/announcement = controller.blackboard[BB_ANNOUNCE_ABILITY] + announcement?.announce(pick(controller.blackboard[BB_WAIT_SPEECH])) + +/datum/ai_behavior/tend_to_patient + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION | AI_BEHAVIOR_REQUIRE_REACH + +/datum/ai_behavior/tend_to_patient/setup(datum/ai_controller/controller, target_key) + . = ..() + var/atom/target = controller.blackboard[target_key] + if(QDELETED(target)) + return FALSE + set_movement_target(controller, target) + +/datum/ai_behavior/tend_to_patient/perform(seconds_per_tick, datum/ai_controller/basic_controller/bot/controller, target_key, threshold, damage_type_healer, access_flags) + . = ..() + var/mob/living/carbon/human/patient = controller.blackboard[target_key] + if(QDELETED(patient) || patient.stat == DEAD) + finish_action(controller, FALSE, target_key) + return + if(check_if_healed(patient, threshold, damage_type_healer, access_flags)) + finish_action(controller, TRUE, target_key, healed_target = TRUE) + return + + var/mob/living/basic/bot/bot_pawn = controller.pawn + if(patient.stat >= HARD_CRIT && prob(5)) + var/datum/action/cooldown/bot_announcement/announcement = controller.blackboard[BB_ANNOUNCE_ABILITY] + announcement?.announce(pick(controller.blackboard[BB_NEAR_DEATH_SPEECH])) + bot_pawn.melee_attack(patient) + finish_action(controller, TRUE, target_key) + +// only clear the target if they get healed +/datum/ai_behavior/tend_to_patient/finish_action(datum/ai_controller/controller, succeeded, target_key, healed_target = FALSE) + . = ..() + if(!succeeded) + return + var/atom/target = controller.blackboard[target_key] + if(QDELETED(target) || !healed_target) + return + var/datum/action/cooldown/bot_announcement/announcement = controller.blackboard[BB_ANNOUNCE_ABILITY] + announcement?.announce(pick(controller.blackboard[BB_AFTERHEAL_SPEECH])) + controller.clear_blackboard_key(target_key) + +/datum/ai_behavior/tend_to_patient/proc/check_if_healed(mob/living/carbon/human/patient, threshold, damage_type_healer, access_flags) + if(access_flags & BOT_COVER_EMAGGED) + return (patient.stat > CONSCIOUS) + var/patient_damage = (damage_type_healer == HEAL_ALL_DAMAGE) ? patient.get_total_damage() : patient.get_current_damage_of_type(damagetype = damage_type_healer) + return (patient_damage <= threshold) + + +/datum/ai_planning_subtree/handle_medbot_speech + var/speech_chance = 5 + +/datum/ai_planning_subtree/handle_medbot_speech/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/mob/living/basic/bot/medbot/bot_pawn = controller.pawn + //we cant speak! + if(!(bot_pawn.medical_mode_flags & MEDBOT_SPEAK_MODE)) + return + + var/currently_tipped = bot_pawn.medical_mode_flags & MEDBOT_TIPPED_MODE + speech_chance = ((bot_pawn.bot_access_flags & BOT_COVER_EMAGGED) || currently_tipped) ? 15 : initial(speech_chance) + + if(!SPT_PROB(speech_chance, seconds_per_tick)) + return + + controller.queue_behavior(/datum/ai_behavior/handle_medbot_speech, BB_ANNOUNCE_ABILITY, bot_pawn.mode, bot_pawn.bot_access_flags, currently_tipped) + +/datum/ai_behavior/handle_medbot_speech + action_cooldown = 20 SECONDS + behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + +/datum/ai_behavior/handle_medbot_speech/perform(seconds_per_tick, datum/ai_controller/controller, announce_key, mode, cover_flags, currently_tipped) + . = ..() + var/datum/action/cooldown/bot_announcement/announcement = controller.blackboard[announce_key] + var/list/speech_to_pick_from + + if(currently_tipped) + speech_to_pick_from = controller.blackboard[BB_WORRIED_ANNOUNCEMENTS] + else if(cover_flags & BOT_COVER_EMAGGED) + speech_to_pick_from = controller.blackboard[BB_EMAGGED_SPEECH] + else if(mode == BOT_IDLE) + speech_to_pick_from = controller.blackboard[BB_IDLE_SPEECH] + var/mob/living/living_pawn = controller.pawn + + if(locate(/obj/item/clothing/head/costume/chicken) in living_pawn) + speech_to_pick_from += MEDIBOT_VOICED_CHICKEN + + if(!length(speech_to_pick_from)) + finish_action(controller, FALSE) + return + + announcement.announce(pick(speech_to_pick_from)) + finish_action(controller, TRUE) + +/datum/ai_planning_subtree/find_and_hunt_target/patients_in_crit + target_key = BB_PATIENT_IN_CRIT + hunting_behavior = /datum/ai_behavior/announce_patient + finding_behavior = /datum/ai_behavior/find_hunt_target/patient_in_crit + hunt_targets = list(/mob/living/carbon/human) + finish_planning = FALSE + +/datum/ai_planning_subtree/find_and_hunt_target/patients_in_crit/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) + var/mob/living/basic/bot/medbot/bot_pawn = controller.pawn + if(!(bot_pawn.medical_mode_flags & MEDBOT_DECLARE_CRIT)) + return + return ..() + +/datum/ai_behavior/find_hunt_target/patient_in_crit + +/datum/ai_behavior/find_hunt_target/patient_in_crit/valid_dinner(mob/living/source, mob/living/carbon/human/patient, radius) + if(patient.stat < UNCONSCIOUS || isnull(patient.mind)) + return FALSE + return can_see(source, patient, radius) + +/datum/ai_behavior/announce_patient + action_cooldown = 3 MINUTES + behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + +/datum/ai_behavior/announce_patient/perform(seconds_per_tick, datum/ai_controller/basic_controller/bot/controller, target_key) + . = ..() + var/mob/living/living_target = controller.blackboard[target_key] + if(QDELETED(living_target)) + finish_action(controller, FALSE, target_key) + return + var/datum/action/cooldown/bot_announcement/announcement = controller.blackboard[BB_ANNOUNCE_ABILITY] + if(QDELETED(announcement)) + finish_action(controller, FALSE, target_key) + return + var/text_to_announce = "Medical emergency! [living_target] is in critical condition at [get_area(living_target)]!" + announcement.announce(text_to_announce, controller.blackboard[BB_RADIO_CHANNEL]) + finish_action(controller, TRUE, target_key) + +/datum/ai_behavior/announce_patient/finish_action(datum/ai_controller/controller, succeeded, target_key) + . = ..() + controller.clear_blackboard_key(target_key) + +#undef BOT_PATIENT_PATH_LIMIT diff --git a/code/modules/mob/living/basic/clown/clown.dm b/code/modules/mob/living/basic/clown/clown.dm index 5682edf933907e..1a713ec04f8846 100644 --- a/code/modules/mob/living/basic/clown/clown.dm +++ b/code/modules/mob/living/basic/clown/clown.dm @@ -112,7 +112,12 @@ var/static/list/injection_range if(!injection_range) injection_range = string_numbers_list(list(1, 5)) - AddElement(/datum/element/venomous, /datum/reagent/consumable/laughter, injection_range) + AddElement(\ + /datum/element/venomous,\ + /datum/reagent/consumable/laughter,\ + injection_range,\ + injection_flags = INJECT_CHECK_PENETRATE_THICK | INJECT_CHECK_IGNORE_SPECIES,\ + ) /mob/living/basic/clown/fleshclown name = "Fleshclown" @@ -288,7 +293,12 @@ var/static/list/injection_range if(!injection_range) injection_range = string_numbers_list(list(1, 5)) - AddElement(/datum/element/venomous, /datum/reagent/peaceborg/confuse, injection_range) + AddElement(\ + /datum/element/venomous,\ + /datum/reagent/peaceborg/confuse,\ + injection_range,\ + injection_flags = INJECT_CHECK_PENETRATE_THICK | INJECT_CHECK_IGNORE_SPECIES,\ + ) // I don't really know what a clown is using to inject people but let's assume it doesn't need to penetrate at all /mob/living/basic/clown/clownhulk/destroyer name = "The Destroyer" @@ -370,8 +380,7 @@ speed = 1 melee_damage_lower = 10 melee_damage_upper = 15 - force_threshold = 10 //lots of fat to cushion blows. - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 2, STAMINA = 0, OXY = 1) + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1) attack_verb_continuous = "slams" attack_verb_simple = "slam" loot = list( @@ -391,12 +400,11 @@ /mob/living/basic/clown/mutant/glutton/Initialize(mapload) . = ..() - var/datum/action/cooldown/regurgitate/spit = new(src) - spit.Grant(src) + GRANT_ACTION(/datum/action/cooldown/regurgitate) AddElement(/datum/element/swabable, CELL_LINE_TABLE_GLUTTON, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) AddComponent(/datum/component/tameable, food_types = list(/obj/item/food/cheesiehonkers, /obj/item/food/cornchips), tame_chance = 30, bonus_tame_chance = 0, after_tame = CALLBACK(src, PROC_REF(tamed))) - + AddElement(/datum/element/damage_threshold, 10) //lots of fat to cushion blows. /mob/living/basic/clown/mutant/glutton/attacked_by(obj/item/item, mob/living/user) if(!check_edible(item)) @@ -541,22 +549,15 @@ BB_EMOTE_SEE = list("bites into the banana", "plucks a banana off its head", "photosynthesizes"), BB_EMOTE_SOUND = list('sound/items/bikehorn.ogg'), ) - ///Our peel dropping ability - var/datum/action/cooldown/rustle/banana_rustle - ///Our banana bunch spawning ability - var/datum/action/cooldown/exquisite_bunch/banana_bunch /mob/living/basic/clown/banana/Initialize(mapload) . = ..() - banana_rustle = new() - banana_rustle.Grant(src) - banana_bunch = new() - banana_bunch.Grant(src) -/mob/living/basic/clown/banana/Destroy() - . = ..() - QDEL_NULL(banana_rustle) - QDEL_NULL(banana_bunch) + var/static/list/innate_actions = list( + /datum/action/cooldown/exquisite_bunch, + /datum/action/cooldown/rustle, + ) + grant_actions_by_list(innate_actions) ///drops peels around the mob when activated /datum/action/cooldown/rustle diff --git a/code/modules/mob/living/basic/clown/clown_ai.dm b/code/modules/mob/living/basic/clown/clown_ai.dm index f54c432140ee34..b3f5a9f9aef464 100644 --- a/code/modules/mob/living/basic/clown/clown_ai.dm +++ b/code/modules/mob/living/basic/clown/clown_ai.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/clown blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_BASIC_MOB_SPEAK_LINES = null, ) @@ -14,7 +14,7 @@ /datum/ai_controller/basic_controller/clown/murder blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_BASIC_MOB_SPEAK_LINES = null, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) diff --git a/code/modules/mob/living/basic/constructs/construct_ai.dm b/code/modules/mob/living/basic/constructs/construct_ai.dm deleted file mode 100644 index 6f83714683787a..00000000000000 --- a/code/modules/mob/living/basic/constructs/construct_ai.dm +++ /dev/null @@ -1,69 +0,0 @@ -/** - * Artificers - * - * Artificers will seek out and heal the most wounded construct or shade they can see. - * If there is no one to heal, they will run away from any non-allied mobs. - */ -/datum/ai_controller/basic_controller/artificer - blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/same_faction/construct, - BB_FLEE_TARGETTING_DATUM = new /datum/targetting_datum/basic, - BB_TARGET_WOUNDED_ONLY = TRUE, - ) - - ai_movement = /datum/ai_movement/basic_avoidance - idle_behavior = /datum/idle_behavior/idle_random_walk - planning_subtrees = list( - /datum/ai_planning_subtree/simple_find_wounded_target, - /datum/ai_planning_subtree/basic_melee_attack_subtree, - /datum/ai_planning_subtree/target_retaliate/to_flee, - /datum/ai_planning_subtree/flee_target/from_flee_key, - ) - -/** - * Juggernauts - * - * Juggernauts slowly walk toward non-allied mobs and pummel them into hardcrit. - * They do not finish off carbons, as that's the job of wraiths. - */ -/datum/ai_controller/basic_controller/juggernaut - blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, - BB_TARGET_MINIMUM_STAT = SOFT_CRIT, - ) - - ai_movement = /datum/ai_movement/basic_avoidance - idle_behavior = /datum/idle_behavior/idle_random_walk - planning_subtrees = list( - /datum/ai_planning_subtree/simple_find_target, - /datum/ai_planning_subtree/attack_obstacle_in_path, - /datum/ai_planning_subtree/basic_melee_attack_subtree, - ) - -/** - * Wraiths - * - * Wraiths seek out the most injured non-allied mob to beat to death. - */ -/datum/ai_controller/basic_controller/wraith - blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, - BB_TARGET_MINIMUM_STAT = HARD_CRIT, - ) - - ai_movement = /datum/ai_movement/basic_avoidance - idle_behavior = /datum/idle_behavior/idle_random_walk - planning_subtrees = list( - /datum/ai_planning_subtree/simple_find_wounded_target, - /datum/ai_planning_subtree/attack_obstacle_in_path, - /datum/ai_planning_subtree/basic_melee_attack_subtree, - ) - -/// Targetting datum that will only allow mobs that constructs can heal. -/datum/targetting_datum/basic/same_faction/construct - target_wounded_key = BB_TARGET_WOUNDED_ONLY - -/datum/targetting_datum/basic/same_faction/construct/can_attack(mob/living/living_mob, atom/the_target, vision_range, check_faction = TRUE) - if(isconstruct(the_target) || istype(the_target, /mob/living/simple_animal/shade)) - return ..() - return FALSE diff --git a/code/modules/mob/living/basic/constructs/_construct.dm b/code/modules/mob/living/basic/cult/constructs/_construct.dm similarity index 75% rename from code/modules/mob/living/basic/constructs/_construct.dm rename to code/modules/mob/living/basic/cult/constructs/_construct.dm index e4c21b5a23c5a0..8fd4123e28841b 100644 --- a/code/modules/mob/living/basic/constructs/_construct.dm +++ b/code/modules/mob/living/basic/cult/constructs/_construct.dm @@ -8,7 +8,7 @@ unsuitable_atmos_damage = 0 minimum_survivable_temperature = 0 maximum_survivable_temperature = INFINITY - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0, OXY = 0) pressure_resistance = 100 speed = 0 unique_name = TRUE @@ -43,7 +43,7 @@ var/can_repair_self = FALSE /// Theme controls color. THEME_CULT is red THEME_WIZARD is purple and THEME_HOLY is blue var/theme = THEME_CULT - /// Can this construct smash walls? Gets the wall_smasher element if so. + /// Can this construct destroy walls? var/smashes_walls = FALSE /// The different flavors of goop constructs can drop, depending on theme. var/static/list/remains_by_theme = list( @@ -59,16 +59,16 @@ if(length(remains)) AddElement(/datum/element/death_drops, remains) if(smashes_walls) - AddElement(/datum/element/wall_smasher, strength_flag = ENVIRONMENT_SMASH_WALLS) + AddElement(/datum/element/wall_tearer, allow_reinforced = FALSE) if(can_repair) AddComponent(\ /datum/component/healing_touch,\ heal_brute = 5,\ heal_burn = 0,\ heal_time = 0,\ - valid_targets_typecache = typecacheof(list(/mob/living/basic/construct, /mob/living/simple_animal/hostile/construct, /mob/living/simple_animal/shade)),\ + valid_targets_typecache = typecacheof(list(/mob/living/basic/construct, /mob/living/basic/shade)),\ valid_biotypes = MOB_MINERAL | MOB_SPIRIT,\ - self_targetting = can_repair_self ? HEALING_TOUCH_ANYONE : HEALING_TOUCH_NOT_SELF,\ + self_targeting = can_repair_self ? HEALING_TOUCH_ANYONE : HEALING_TOUCH_NOT_SELF,\ action_text = "%SOURCE% begins repairing %TARGET%'s dents.",\ complete_text = "%TARGET%'s dents are repaired.",\ show_health = TRUE,\ @@ -80,9 +80,7 @@ structure_types_typecache = structure_types,\ ) add_traits(list(TRAIT_HEALS_FROM_CULT_PYLONS, TRAIT_SPACEWALK), INNATE_TRAIT) - for(var/spell in construct_spells) - var/datum/action/new_spell = new spell(src) - new_spell.Grant(src) + grant_actions_by_list(construct_spells) var/spell_count = 1 for(var/datum/action/spell as anything in actions) @@ -129,34 +127,6 @@ /mob/living/basic/construct/electrocute_act(shock_damage, source, siemens_coeff = 1, flags = NONE) return FALSE -// Allows simple constructs to repair basic constructs. -/mob/living/basic/construct/attack_animal(mob/living/simple_animal/user, list/modifiers) - if(!isconstruct(user)) - if(src != user) - return ..() - return - - if(src == user) //basic constructs use the healing hands component instead - return - - var/mob/living/simple_animal/hostile/construct/doll = user - if(!doll.can_repair || (doll == src && !doll.can_repair_self)) - return ..() - if(theme != doll.theme) - return ..() - - if(health >= maxHealth) - to_chat(user, span_cult("You cannot repair [src]'s dents, as [p_they()] [p_have()] none!")) - return - - heal_overall_damage(brute = 5) - - Beam(user, icon_state = "sendbeam", time = 4) - user.visible_message( - span_danger("[user] repairs some of \the [src]'s dents."), - span_cult("You repair some of [src]'s dents, leaving [src] at [health]/[maxHealth] health."), - ) - /// Construct ectoplasm. Largely a placeholder, since the death drop element needs a unique list. /obj/item/ectoplasm/construct name = "blood-red ectoplasm" diff --git a/code/modules/mob/living/basic/constructs/artificer.dm b/code/modules/mob/living/basic/cult/constructs/artificer.dm similarity index 100% rename from code/modules/mob/living/basic/constructs/artificer.dm rename to code/modules/mob/living/basic/cult/constructs/artificer.dm index bf4a086bcdb296..8856c0e66a2ada 100644 --- a/code/modules/mob/living/basic/constructs/artificer.dm +++ b/code/modules/mob/living/basic/cult/constructs/artificer.dm @@ -15,11 +15,11 @@ attack_verb_simple = "ram" attack_sound = 'sound/weapons/punch2.ogg' construct_spells = list( + /datum/action/cooldown/spell/aoe/magic_missile/lesser, + /datum/action/cooldown/spell/conjure/construct/lesser, /datum/action/cooldown/spell/conjure/cult_floor, /datum/action/cooldown/spell/conjure/cult_wall, /datum/action/cooldown/spell/conjure/soulstone, - /datum/action/cooldown/spell/conjure/construct/lesser, - /datum/action/cooldown/spell/aoe/magic_missile/lesser, /datum/action/innate/cult/create_rune/revive, ) playstyle_string = "You are an Artificer. You are incredibly weak and fragile, \ diff --git a/code/modules/mob/living/basic/cult/constructs/construct_ai.dm b/code/modules/mob/living/basic/cult/constructs/construct_ai.dm new file mode 100644 index 00000000000000..b8417affed94cf --- /dev/null +++ b/code/modules/mob/living/basic/cult/constructs/construct_ai.dm @@ -0,0 +1,90 @@ +/** + * Artificers + * + * Artificers will seek out and heal the most wounded construct or shade they can see. + * If there is no one to heal, they will run away from any non-allied mobs. + */ +/datum/ai_controller/basic_controller/artificer + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/same_faction/construct, + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_TARGET_WOUNDED_ONLY = TRUE, + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_wounded_target, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/target_retaliate/to_flee, + /datum/ai_planning_subtree/flee_target/from_flee_key, + ) + +/** + * Juggernauts + * + * Juggernauts slowly walk toward non-allied mobs and pummel them to death. + */ +/datum/ai_controller/basic_controller/juggernaut + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_TARGET_MINIMUM_STAT = HARD_CRIT, + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/attack_obstacle_in_path, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + ) + +/** + * Proteons + * + * Proteons perform cowardly hit-and-run attacks, fleeing melee when struck but returning to fight again. + */ +/datum/ai_controller/basic_controller/proteon + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_TARGET_MINIMUM_STAT = HARD_CRIT, + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/target_retaliate/to_flee, + /datum/ai_planning_subtree/flee_target/from_flee_key, + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/attack_obstacle_in_path, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + ) + +/** + * Wraiths + * + * Wraiths seek out the most injured non-allied mob to beat to death. + */ +/datum/ai_controller/basic_controller/wraith + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_TARGET_MINIMUM_STAT = HARD_CRIT, + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_wounded_target, + /datum/ai_planning_subtree/attack_obstacle_in_path, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + ) + +/// Targeting strategy that will only allow mobs that constructs can heal. +/datum/targeting_strategy/basic/same_faction/construct + target_wounded_key = BB_TARGET_WOUNDED_ONLY + +/datum/targeting_strategy/basic/same_faction/construct/can_attack(mob/living/living_mob, atom/the_target, vision_range, check_faction = TRUE) + if(isconstruct(the_target) || istype(the_target, /mob/living/basic/shade)) + return ..() + return FALSE diff --git a/code/modules/mob/living/basic/constructs/harvester.dm b/code/modules/mob/living/basic/cult/constructs/harvester.dm similarity index 100% rename from code/modules/mob/living/basic/constructs/harvester.dm rename to code/modules/mob/living/basic/cult/constructs/harvester.dm diff --git a/code/modules/mob/living/basic/constructs/juggernaut.dm b/code/modules/mob/living/basic/cult/constructs/juggernaut.dm similarity index 94% rename from code/modules/mob/living/basic/constructs/juggernaut.dm rename to code/modules/mob/living/basic/cult/constructs/juggernaut.dm index 2b8bb7e293d874..ef972d2b916939 100644 --- a/code/modules/mob/living/basic/constructs/juggernaut.dm +++ b/code/modules/mob/living/basic/cult/constructs/juggernaut.dm @@ -17,16 +17,19 @@ attack_sound = 'sound/weapons/punch3.ogg' status_flags = NONE mob_size = MOB_SIZE_LARGE - force_threshold = 10 construct_spells = list( - /datum/action/cooldown/spell/forcewall/cult, /datum/action/cooldown/spell/basic_projectile/juggernaut, + /datum/action/cooldown/spell/forcewall/cult, /datum/action/innate/cult/create_rune/wall, ) playstyle_string = span_bold("You are a Juggernaut. Though slow, your shell can withstand heavy punishment, create shield walls, rip apart enemies and walls alike, and even deflect energy weapons.") smashes_walls = TRUE +/mob/living/basic/construct/juggernaut/Initialize(mapload) + . = ..() + AddElement(/datum/element/damage_threshold, 10) + /// Hostile NPC version. Pretty dumb, just attacks whoever is near. /mob/living/basic/construct/juggernaut/hostile ai_controller = /datum/ai_controller/basic_controller/juggernaut diff --git a/code/modules/mob/living/basic/cult/constructs/proteon.dm b/code/modules/mob/living/basic/cult/constructs/proteon.dm new file mode 100644 index 00000000000000..2ff58d2463c0ba --- /dev/null +++ b/code/modules/mob/living/basic/cult/constructs/proteon.dm @@ -0,0 +1,39 @@ +/// Proteon - a very weak construct that only appears in NPC form in various ruins. +/mob/living/basic/construct/proteon + name = "Proteon" + real_name = "Proteon" + desc = "A weaker construct meant to scour ruins for objects of Nar'Sie's affection. Those barbed claws are no joke." + icon_state = "proteon" + icon_living = "proteon" + maxHealth = 35 + health = 35 + melee_damage_lower = 8 + melee_damage_upper = 10 + attack_verb_continuous = "pinches" + attack_verb_simple = "pinch" + smashes_walls = TRUE + attack_sound = 'sound/weapons/punch2.ogg' + playstyle_string = span_bold("You are a Proteon. Your abilities in combat are outmatched by most combat constructs, but you are still fast and nimble. Run metal and supplies, and cooperate with your fellow cultists.") + +/// Hostile NPC version +/mob/living/basic/construct/proteon/hostile + ai_controller = /datum/ai_controller/basic_controller/proteon + smashes_walls = FALSE + melee_attack_cooldown = 1.5 SECONDS + +/mob/living/basic/construct/proteon/hostile/Initialize(mapload) + . = ..() + var/datum/callback/retaliate_callback = CALLBACK(src, PROC_REF(ai_retaliate_behaviour)) + AddComponent(/datum/component/ai_retaliate_advanced, retaliate_callback) + +/// Set a timer to clear our retaliate list +/mob/living/basic/construct/proteon/hostile/proc/ai_retaliate_behaviour(mob/living/attacker) + if (!istype(attacker)) + return + var/random_timer = rand(2 SECONDS, 4 SECONDS) //for unpredictability + addtimer(CALLBACK(src, PROC_REF(clear_retaliate_list)), random_timer) + +/mob/living/basic/construct/proteon/hostile/proc/clear_retaliate_list() + if(!ai_controller.blackboard_key_exists(BB_BASIC_MOB_RETALIATE_LIST)) + return + ai_controller.clear_blackboard_key(BB_BASIC_MOB_RETALIATE_LIST) diff --git a/code/modules/mob/living/basic/constructs/wraith.dm b/code/modules/mob/living/basic/cult/constructs/wraith.dm similarity index 100% rename from code/modules/mob/living/basic/constructs/wraith.dm rename to code/modules/mob/living/basic/cult/constructs/wraith.dm diff --git a/code/modules/mob/living/basic/cult/shade.dm b/code/modules/mob/living/basic/cult/shade.dm new file mode 100644 index 00000000000000..fac1d347665ef5 --- /dev/null +++ b/code/modules/mob/living/basic/cult/shade.dm @@ -0,0 +1,71 @@ +/mob/living/basic/shade + name = "Shade" + real_name = "Shade" + desc = "A bound spirit." + gender = PLURAL + icon = 'icons/mob/nonhuman-player/cult.dmi' + icon_state = "shade_cult" + icon_living = "shade_cult" + mob_biotypes = MOB_SPIRIT + maxHealth = 40 + health = 40 + speak_emote = list("hisses") + response_help_continuous = "puts their hand through" + response_help_simple = "put your hand through" + response_disarm_continuous = "flails at" + response_disarm_simple = "flail at" + response_harm_continuous = "punches" + response_harm_simple = "punch" + melee_damage_lower = 5 + melee_damage_upper = 12 + attack_verb_continuous = "metaphysically strikes" + attack_verb_simple = "metaphysically strike" + unsuitable_cold_damage = 0 + unsuitable_heat_damage = 0 + unsuitable_atmos_damage = 0 + speed = -1 + faction = list(FACTION_CULT) + basic_mob_flags = DEL_ON_DEATH + initial_language_holder = /datum/language_holder/construct + /// Theme controls color. THEME_CULT is red THEME_WIZARD is purple and THEME_HOLY is blue + var/theme = THEME_CULT + /// The different flavors of goop shades can drop, depending on theme. + var/static/list/remains_by_theme = list( + THEME_CULT = list(/obj/item/ectoplasm/construct), + THEME_HOLY = list(/obj/item/ectoplasm/angelic), + THEME_WIZARD = list(/obj/item/ectoplasm/mystic), + ) + +/mob/living/basic/shade/Initialize(mapload) + . = ..() + AddElement(/datum/element/simple_flying) + add_traits(list(TRAIT_HEALS_FROM_CULT_PYLONS, TRAIT_SPACEWALK, TRAIT_VENTCRAWLER_ALWAYS), INNATE_TRAIT) + if(isnull(theme)) + return + icon_state = "shade_[theme]" + var/list/remains = string_list(remains_by_theme[theme]) + if(length(remains)) + AddElement(/datum/element/death_drops, remains) + +/mob/living/basic/shade/update_icon_state() + . = ..() + if(!isnull(theme)) + icon_state = "shade_[theme]" + icon_living = icon_state + +/mob/living/basic/shade/death() + if(death_message == initial(death_message)) + death_message = "lets out a contented sigh as [p_their()] form unwinds." + ..() + +/mob/living/basic/shade/can_suicide() + if(istype(loc, /obj/item/soulstone)) //do not suicide inside the soulstone + return FALSE + return ..() + +/mob/living/basic/shade/attackby(obj/item/item, mob/user, params) + if(istype(item, /obj/item/soulstone)) + var/obj/item/soulstone/stone = item + stone.capture_shade(src, user) + else + . = ..() diff --git a/code/modules/mob/living/basic/drone/_drone.dm b/code/modules/mob/living/basic/drone/_drone.dm index b54ef5d260eb98..926271eea82761 100644 --- a/code/modules/mob/living/basic/drone/_drone.dm +++ b/code/modules/mob/living/basic/drone/_drone.dm @@ -38,7 +38,7 @@ initial_language_holder = /datum/language_holder/drone mob_size = MOB_SIZE_SMALL has_unlimited_silicon_privilege = TRUE - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0, OXY = 0) hud_possible = list(DIAG_STAT_HUD, DIAG_HUD, ANTAG_HUD) unique_name = TRUE faction = list(FACTION_NEUTRAL,FACTION_SILICON,FACTION_TURRET) @@ -174,6 +174,7 @@ AddElement(/datum/element/dextrous, hud_type = hud_type) AddComponent(/datum/component/basic_inhands, y_offset = getItemPixelShiftY()) AddComponent(/datum/component/simple_access, SSid_access.get_region_access_list(list(REGION_ALL_GLOBAL))) + AddComponent(/datum/component/personal_crafting) // Kind of hard to be a drone and not be able to make tiles if(default_storage) var/obj/item/storage = new default_storage(src) @@ -259,7 +260,7 @@ dust() /mob/living/basic/drone/examine(mob/user) - . = list("This is [icon2html(src, user)] \a [src]!", EXAMINE_SECTION_BREAK) //SKYRAT EDIT CHANGE + . = list("This is [icon2html(src, user)] \a [src]!", EXAMINE_SECTION_BREAK) //NOVA EDIT CHANGE //Hands for(var/obj/item/held_thing in held_items) @@ -348,6 +349,7 @@ var/static/list/not_shy_of = typecacheof(list(/mob/living/basic/drone, /mob/living/simple_animal/bot)) if(shy) + REMOVE_TRAIT(src, TRAIT_CAN_STRIP, DRONE_SHY_TRAIT) // To shy to touch someone elses hat ADD_TRAIT(src, TRAIT_PACIFISM, DRONE_SHY_TRAIT) LoadComponent(/datum/component/shy, mob_whitelist=not_shy_of, shy_range=3, message="Your laws prevent this action near %TARGET.", keyless_shy=FALSE, clientless_shy=TRUE, dead_shy=FALSE, dead_shy_immediate=TRUE, machine_whitelist=shy_machine_whitelist) LoadComponent(/datum/component/shy_in_room, drone_bad_areas, "Touching anything in %ROOM could break your laws.") @@ -356,6 +358,7 @@ RegisterSignal(src, COMSIG_TRY_USE_MACHINE, PROC_REF(blacklist_on_try_use_machine)) RegisterSignal(src, COMSIG_TRY_WIRES_INTERACT, PROC_REF(blacklist_on_try_wires_interact)) else + ADD_TRAIT(src, TRAIT_CAN_STRIP, DRONE_SHY_TRAIT) // ...I wonder if I can ware pants like a hat REMOVE_TRAIT(src, TRAIT_PACIFISM, DRONE_SHY_TRAIT) qdel(GetComponent(/datum/component/shy)) qdel(GetComponent(/datum/component/shy_in_room)) diff --git a/code/modules/mob/living/basic/drone/drones_as_items.dm b/code/modules/mob/living/basic/drone/drones_as_items.dm index 12e604bd9aad8e..32d8c0e1f5aa72 100644 --- a/code/modules/mob/living/basic/drone/drones_as_items.dm +++ b/code/modules/mob/living/basic/drone/drones_as_items.dm @@ -26,7 +26,14 @@ . = ..() var/area/area = get_area(src) if(area) - notify_ghosts("A drone shell has been created in \the [area.name].", source = src, action = NOTIFY_PLAY, flashwindow = FALSE, ignore_key = POLL_IGNORE_DRONE, notify_suiciders = FALSE) + notify_ghosts( + "A drone shell has been created in \the [area.name].", + source = src, + header = "Drone Shell Created", + click_interact = TRUE, + ignore_key = POLL_IGNORE_DRONE, + notify_flags = (GHOST_NOTIFY_IGNORE_MAPLOAD), + ) /obj/effect/mob_spawn/ghost_role/drone/allow_spawn(mob/user, silent = FALSE) var/client/user_client = user.client diff --git a/code/modules/mob/living/basic/drone/extra_drone_types.dm b/code/modules/mob/living/basic/drone/extra_drone_types.dm index 927d28f0ca2491..a69ae51b60c6dd 100644 --- a/code/modules/mob/living/basic/drone/extra_drone_types.dm +++ b/code/modules/mob/living/basic/drone/extra_drone_types.dm @@ -42,8 +42,8 @@ mob_name = "syndrone" mob_type = /mob/living/basic/drone/syndrone prompt_name = "a syndrone" - you_are_text = "You are a Syndicate Maintenance Drone." - flavour_text = "In a prior life, you maintained a Nanotrasen Research Station. Abducted from your home, you were given some upgrades... and now serve an enemy of your former masters." + you_are_text = "You are a Symphionia Maintenance Drone." + flavour_text = "In a prior life, you maintained a Symphionia Research Station. Abducted from your home, you were given some upgrades... and now serve an enemy of your former masters." important_text = "" spawner_job_path = /datum/job/syndrone @@ -67,7 +67,7 @@ mob_name = "badass syndrone" mob_type = /mob/living/basic/drone/syndrone/badass prompt_name = "a badass syndrone" - flavour_text = "In a prior life, you maintained a Nanotrasen Research Station. Abducted from your home, you were given some BETTER upgrades... and now serve an enemy of your former masters." + flavour_text = "In a prior life, you maintained a Symphionia Research Station. Abducted from your home, you were given some BETTER upgrades... and now serve an enemy of your former masters." /// A drone that spawns with a chameleon hat for fashion purposes. /mob/living/basic/drone/snowflake diff --git a/code/modules/mob/living/basic/drone/interaction.dm b/code/modules/mob/living/basic/drone/interaction.dm index ad6261f5cce8b5..c528dafcbd6de6 100644 --- a/code/modules/mob/living/basic/drone/interaction.dm +++ b/code/modules/mob/living/basic/drone/interaction.dm @@ -86,16 +86,16 @@ return FALSE if(health >= maxHealth) to_chat(user, span_warning("[src]'s screws can't get any tighter!")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS to_chat(user, span_notice("You start to tighten loose screws on [src]...")) if(!tool.use_tool(src, user, 8 SECONDS, volume=50)) to_chat(user, span_warning("You need to remain still to tighten [src]'s screws!")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS adjustBruteLoss(-getBruteLoss()) visible_message(span_notice("[user] tightens [src == user ? "[user.p_their()]" : "[src]'s"] loose screws!"), span_notice("[src == user ? "You tighten" : "[user] tightens"] your loose screws.")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /// Wrenching un-hacks hacked drones. /mob/living/basic/drone/wrench_act(mob/living/user, obj/item/tool) @@ -111,7 +111,7 @@ span_notice("You reset [src]'s directives to factory defaults!") ) update_drone_hack(FALSE) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /mob/living/basic/drone/transferItemToLoc(obj/item/item, newloc, force, silent) return !(item.type in drone_item_whitelist_flat) && ..() diff --git a/code/modules/mob/living/basic/farm_animals/bee/_bee.dm b/code/modules/mob/living/basic/farm_animals/bee/_bee.dm index 692a7f108d1898..66c0d12996299b 100644 --- a/code/modules/mob/living/basic/farm_animals/bee/_bee.dm +++ b/code/modules/mob/living/basic/farm_animals/bee/_bee.dm @@ -61,7 +61,7 @@ /datum/pet_command/beehive/enter, /datum/pet_command/beehive/exit, /datum/pet_command/follow/bee, - /datum/pet_command/point_targetting/attack/swirl, + /datum/pet_command/point_targeting/attack/swirl, /datum/pet_command/scatter, ) @@ -192,11 +192,11 @@ if(!injection_range) injection_range = string_numbers_list(list(1, 5)) if(beegent) //clear the old since this one is going to have some new value - RemoveElement(/datum/element/venomous, beegent.type, injection_range) + RemoveElement(/datum/element/venomous, beegent.type, injection_range, thrown_effect = TRUE) beegent = toxin name = "[initial(name)] ([toxin.name])" real_name = name - AddElement(/datum/element/venomous, beegent.type, injection_range) + AddElement(/datum/element/venomous, beegent.type, injection_range, thrown_effect = TRUE) generate_bee_visuals() /mob/living/basic/bee/queen diff --git a/code/modules/mob/living/basic/farm_animals/bee/bee_ai_behavior.dm b/code/modules/mob/living/basic/farm_animals/bee/bee_ai_behavior.dm index 67e98a5f3d3e84..0c48a9453811d5 100644 --- a/code/modules/mob/living/basic/farm_animals/bee/bee_ai_behavior.dm +++ b/code/modules/mob/living/basic/farm_animals/bee/bee_ai_behavior.dm @@ -83,9 +83,9 @@ if(valid_hives.len) return pick(valid_hives) -/datum/targetting_datum/basic/bee +/datum/targeting_strategy/basic/bee -/datum/targetting_datum/basic/bee/can_attack(mob/living/owner, atom/target, vision_range) +/datum/targeting_strategy/basic/bee/can_attack(mob/living/owner, atom/target, vision_range) if(!isliving(target)) return FALSE . = ..() @@ -117,7 +117,7 @@ required_distance = 0 ///swirl around the owner in menacing fashion -/datum/pet_command/point_targetting/attack/swirl +/datum/pet_command/point_targeting/attack/swirl command_name = "Swirl" command_desc = "Your pets will swirl around you and attack whoever you point at!" speech_commands = list("swirl", "spiral", "swarm") @@ -127,7 +127,7 @@ ///the owner we will swarm around var/key_to_swarm = BB_SWARM_TARGET -/datum/pet_command/point_targetting/attack/swirl/try_activate_command(mob/living/commander) +/datum/pet_command/point_targeting/attack/swirl/try_activate_command(mob/living/commander) var/mob/living/living_pawn = weak_parent.resolve() if(isnull(living_pawn)) return @@ -138,7 +138,7 @@ controller.set_blackboard_key(key_to_swarm, commander) return ..() -/datum/pet_command/point_targetting/attack/swirl/execute_action(datum/ai_controller/controller) +/datum/pet_command/point_targeting/attack/swirl/execute_action(datum/ai_controller/controller) if(controller.blackboard_key_exists(BB_CURRENT_PET_TARGET)) return ..() controller.queue_behavior(/datum/ai_behavior/swirl_around_target, BB_SWARM_TARGET) diff --git a/code/modules/mob/living/basic/farm_animals/bee/bee_ai_subtree.dm b/code/modules/mob/living/basic/farm_animals/bee/bee_ai_subtree.dm index 6379f239ba0ba2..3d56dd990dcbdc 100644 --- a/code/modules/mob/living/basic/farm_animals/bee/bee_ai_subtree.dm +++ b/code/modules/mob/living/basic/farm_animals/bee/bee_ai_subtree.dm @@ -1,7 +1,7 @@ /datum/ai_controller/basic_controller/bee blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/bee, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/bee, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, ) ai_traits = STOP_MOVING_WHEN_PULLED @@ -25,7 +25,7 @@ /datum/ai_controller/basic_controller/queen_bee blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/bee, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/bee, ) ai_traits = STOP_MOVING_WHEN_PULLED diff --git a/code/modules/mob/living/basic/farm_animals/chicken/chick.dm b/code/modules/mob/living/basic/farm_animals/chicken/chick.dm index 311b311e8fd755..9e4af384aeeffe 100644 --- a/code/modules/mob/living/basic/farm_animals/chicken/chick.dm +++ b/code/modules/mob/living/basic/farm_animals/chicken/chick.dm @@ -66,7 +66,7 @@ /datum/ai_controller/basic_controller/chick blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_FIND_MOM_TYPES = list(/mob/living/basic/chicken), ) diff --git a/code/modules/mob/living/basic/farm_animals/chicken/chicken.dm b/code/modules/mob/living/basic/farm_animals/chicken/chicken.dm index 99ff6b52748298..9508f8fae3be6b 100644 --- a/code/modules/mob/living/basic/farm_animals/chicken/chicken.dm +++ b/code/modules/mob/living/basic/farm_animals/chicken/chicken.dm @@ -78,7 +78,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) /datum/ai_controller/basic_controller/chicken blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED diff --git a/code/modules/mob/living/basic/farm_animals/cow/_cow.dm b/code/modules/mob/living/basic/farm_animals/cow/_cow.dm index bcd0084adb0ab9..e5d49aa867b503 100644 --- a/code/modules/mob/living/basic/farm_animals/cow/_cow.dm +++ b/code/modules/mob/living/basic/farm_animals/cow/_cow.dm @@ -45,7 +45,7 @@ udder_component() setup_eating() . = ..() - ai_controller.set_blackboard_key(BB_BASIC_FOODS, food_types) + ai_controller.set_blackboard_key(BB_BASIC_FOODS, typecacheof(food_types)) ///wrapper for the udder component addition so you can have uniquely uddered cow subtypes /mob/living/basic/cow/proc/udder_component() diff --git a/code/modules/mob/living/basic/farm_animals/cow/cow_ai.dm b/code/modules/mob/living/basic/farm_animals/cow/cow_ai.dm index 81e1d722b01e5c..e1e611a28c2a8a 100644 --- a/code/modules/mob/living/basic/farm_animals/cow/cow_ai.dm +++ b/code/modules/mob/living/basic/farm_animals/cow/cow_ai.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/cow blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, BB_BASIC_MOB_TIP_REACTING = FALSE, BB_BASIC_MOB_TIPPER = null, ) diff --git a/code/modules/mob/living/basic/farm_animals/cow/cow_moonicorn.dm b/code/modules/mob/living/basic/farm_animals/cow/cow_moonicorn.dm index 6eaef1bf5c3e56..b3af3c59a12b24 100644 --- a/code/modules/mob/living/basic/farm_animals/cow/cow_moonicorn.dm +++ b/code/modules/mob/living/basic/farm_animals/cow/cow_moonicorn.dm @@ -24,7 +24,7 @@ /mob/living/basic/cow/moonicorn/Initialize(mapload) . = ..() - AddElement(/datum/element/venomous, /datum/reagent/pax, 5) + AddElement(/datum/element/venomous, /datum/reagent/pax, 5, injection_flags = INJECT_CHECK_PENETRATE_THICK | INJECT_CHECK_IGNORE_SPECIES) AddElement(/datum/element/movement_turf_changer, /turf/open/floor/grass/fairy) /mob/living/basic/cow/moonicorn/udder_component() @@ -44,7 +44,7 @@ /datum/ai_controller/basic_controller/cow/moonicorn blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items/moonicorn(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items/moonicorn, BB_BASIC_MOB_TIP_REACTING = FALSE, BB_BASIC_MOB_TIPPER = null, ) @@ -60,14 +60,14 @@ ) ///moonicorns will not attack people holding something that could tame them. -/datum/targetting_datum/basic/allow_items/moonicorn +/datum/targeting_strategy/basic/allow_items/moonicorn -/datum/targetting_datum/basic/allow_items/moonicorn/can_attack(mob/living/living_mob, atom/the_target, vision_range) +/datum/targeting_strategy/basic/allow_items/moonicorn/can_attack(mob/living/living_mob, atom/the_target, vision_range) . = ..() if(!.) return FALSE - if(isliving(the_target)) //Targetting vs living mobs + if(isliving(the_target)) //Targeting vs living mobs var/mob/living/living_target = the_target for(var/obj/item/food/grown/galaxythistle/tame_food in living_target.held_items) return FALSE //heyyy this can tame me! let's NOT fight diff --git a/code/modules/mob/living/basic/farm_animals/cow/cow_wisdom.dm b/code/modules/mob/living/basic/farm_animals/cow/cow_wisdom.dm index b62f57abf54dd2..4e80fd4bcfe932 100644 --- a/code/modules/mob/living/basic/farm_animals/cow/cow_wisdom.dm +++ b/code/modules/mob/living/basic/farm_animals/cow/cow_wisdom.dm @@ -22,7 +22,7 @@ return //cannot tame me! and I don't care about eatin' nothing, neither! /datum/ai_controller/basic_controller/cow/wisdom - //don't give a targetting datum + //don't give a targeting strategy blackboard = list( BB_BASIC_MOB_TIP_REACTING = FALSE, BB_BASIC_MOB_TIPPER = null, diff --git a/code/modules/mob/living/basic/farm_animals/deer.dm b/code/modules/mob/living/basic/farm_animals/deer.dm index 7907e6684431f4..5b88593f0c6409 100644 --- a/code/modules/mob/living/basic/farm_animals/deer.dm +++ b/code/modules/mob/living/basic/farm_animals/deer.dm @@ -30,12 +30,12 @@ var/time_to_freeze_for = (rand(5, 10) SECONDS) ai_controller.set_blackboard_key(BB_STATIONARY_SECONDS, time_to_freeze_for) ai_controller.set_blackboard_key(BB_STATIONARY_COOLDOWN, (time_to_freeze_for * (rand(3, 5)))) - ai_controller.set_blackboard_key(BB_STATIONARY_TARGETS, stationary_scary_things) + ai_controller.set_blackboard_key(BB_STATIONARY_TARGETS, typecacheof(stationary_scary_things)) /datum/ai_controller/basic_controller/deer blackboard = list( BB_STATIONARY_MOVE_TO_TARGET = TRUE, - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/farm_animals/goat/_goat.dm b/code/modules/mob/living/basic/farm_animals/goat/_goat.dm index db49ae8df9ffdf..34b92f218829c0 100644 --- a/code/modules/mob/living/basic/farm_animals/goat/_goat.dm +++ b/code/modules/mob/living/basic/farm_animals/goat/_goat.dm @@ -56,7 +56,7 @@ RegisterSignal(src, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(on_attacked)) RegisterSignal(src, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(on_move)) - ai_controller.set_blackboard_key(BB_BASIC_FOODS, edibles) + ai_controller.set_blackboard_key(BB_BASIC_FOODS, typecacheof(edibles)) /// Called when we attack something in order to piece together the intent of the AI/user and provide desired behavior. The element might be okay here but I'd rather the fluff. /// Goats are really good at beating up plants by taking bites out of them, but we use the default attack for everything else @@ -110,8 +110,10 @@ INVOKE_ASYNC(src, PROC_REF(eat_plant), edible_plants) -/// When invoked, adds an udder. Overridden on subtypes +/// When invoked, adds an udder when applicable. Male goats do not have udders. /mob/living/basic/goat/proc/add_udder() + if(gender == MALE) + return AddComponent(/datum/component/udder) /// Proc that handles dealing with the various types of plants we might eat. Assumes that a valid list of type(s) will be passed in. diff --git a/code/modules/mob/living/basic/farm_animals/goat/goat_ai.dm b/code/modules/mob/living/basic/farm_animals/goat/goat_ai.dm index f8463b1967537c..5928344fee4e6d 100644 --- a/code/modules/mob/living/basic/farm_animals/goat/goat_ai.dm +++ b/code/modules/mob/living/basic/farm_animals/goat/goat_ai.dm @@ -1,7 +1,7 @@ /// Goats are normally content to sorta hang around and crunch any plant in sight, but they will go ape on someone who attacks them. /datum/ai_controller/basic_controller/goat blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED diff --git a/code/modules/mob/living/basic/farm_animals/goat/goat_subtypes.dm b/code/modules/mob/living/basic/farm_animals/goat/goat_subtypes.dm index 19d50fb38097ad..16efdd528d112d 100644 --- a/code/modules/mob/living/basic/farm_animals/goat/goat_subtypes.dm +++ b/code/modules/mob/living/basic/farm_animals/goat/goat_subtypes.dm @@ -8,5 +8,3 @@ if((bodytemperature < T20C) || istype(goat_area, /area/station/service/kitchen/coldroom)) . += span_notice("[p_They()] [p_do()]n't seem to be too bothered about the cold.") // special for pete -/mob/living/basic/goat/pete/add_udder() - return //no thank you diff --git a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm index cd184b2d253466..1e17938c5fdeb6 100644 --- a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm +++ b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm @@ -26,7 +26,7 @@ melee_attack_cooldown = CLICK_CD_MELEE melee_damage_lower = 15 melee_damage_upper = 18 - damage_coeff = list(BRUTE = 1, BURN = 1.5, TOX = 1.5, CLONE = 0, STAMINA = 0, OXY = 1.5) + damage_coeff = list(BRUTE = 1, BURN = 1.5, TOX = 1.5, STAMINA = 0, OXY = 1.5) obj_damage = 20 attack_verb_continuous = "pummels" attack_verb_simple = "pummel" @@ -54,7 +54,7 @@ /mob/living/basic/gorilla/Initialize(mapload) . = ..() add_traits(list(TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP), ROUNDSTART_TRAIT) - AddElement(/datum/element/wall_smasher) + AddElement(/datum/element/wall_tearer, allow_reinforced = FALSE) AddElement(/datum/element/dextrous) AddElement(/datum/element/footstep, FOOTSTEP_MOB_BAREFOOT) AddElement(/datum/element/basic_eating, heal_amt = 10, food_types = gorilla_food) @@ -65,7 +65,7 @@ ) AddComponent(/datum/component/personal_crafting) AddComponent(/datum/component/basic_inhands, y_offset = -1) - ai_controller?.set_blackboard_key(BB_BASIC_FOODS, gorilla_food) + ai_controller?.set_blackboard_key(BB_BASIC_FOODS, typecacheof(gorilla_food)) /mob/living/basic/gorilla/update_overlays() . = ..() @@ -158,6 +158,12 @@ ADD_TRAIT(src, TRAIT_PACIFISM, INNATE_TRAIT) AddComponent(/datum/component/crate_carrier) +/mob/living/basic/gorilla/cargorilla/death(gibbed) + var/datum/component/potential_component = GetComponent(/datum/component/ghost_direct_control) + if(!QDELETED(potential_component)) + qdel(potential_component) + return ..() + /** * Poll ghosts for control of the gorilla. Not added in init because we only want to poll when the round starts. * Preferably in future we can replace this with a popup on the lobby to queue to become a gorilla. diff --git a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla_ai.dm b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla_ai.dm index daf5b7af0834b6..28a727fdb1bcef 100644 --- a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla_ai.dm +++ b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla_ai.dm @@ -1,7 +1,7 @@ /// Pretty basic, just click people to death. Also hunt and eat bananas. /datum/ai_controller/basic_controller/gorilla blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, BB_TARGET_MINIMUM_STAT = UNCONSCIOUS, BB_EMOTE_KEY = "ooga", BB_EMOTE_CHANCE = 40, @@ -27,7 +27,7 @@ /datum/ai_controller/basic_controller/gorilla/lesser blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, BB_EMOTE_KEY = "ooga", BB_EMOTE_CHANCE = 60, ) diff --git a/code/modules/mob/living/basic/farm_animals/pig.dm b/code/modules/mob/living/basic/farm_animals/pig.dm index c0ad3f6b349be5..94183d044c5315 100644 --- a/code/modules/mob/living/basic/farm_animals/pig.dm +++ b/code/modules/mob/living/basic/farm_animals/pig.dm @@ -47,7 +47,7 @@ /datum/ai_controller/basic_controller/pig blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED diff --git a/code/modules/mob/living/basic/farm_animals/pony.dm b/code/modules/mob/living/basic/farm_animals/pony.dm index e1765f0fdbac6b..df8f3a1fd4eec3 100644 --- a/code/modules/mob/living/basic/farm_animals/pony.dm +++ b/code/modules/mob/living/basic/farm_animals/pony.dm @@ -106,7 +106,7 @@ /datum/ai_controller/basic_controller/pony blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED diff --git a/code/modules/mob/living/basic/farm_animals/rabbit.dm b/code/modules/mob/living/basic/farm_animals/rabbit.dm index 19fd0120ba7e61..f77772ab17c7be 100644 --- a/code/modules/mob/living/basic/farm_animals/rabbit.dm +++ b/code/modules/mob/living/basic/farm_animals/rabbit.dm @@ -49,7 +49,7 @@ /datum/ai_controller/basic_controller/rabbit blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/farm_animals/sheep.dm b/code/modules/mob/living/basic/farm_animals/sheep.dm index ac320d80804194..e32da910ab99b8 100644 --- a/code/modules/mob/living/basic/farm_animals/sheep.dm +++ b/code/modules/mob/living/basic/farm_animals/sheep.dm @@ -81,7 +81,7 @@ /datum/ai_controller/basic_controller/sheep blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/festivus_pole.dm b/code/modules/mob/living/basic/festivus_pole.dm index 058b74bfad8726..aec6de74e1e4ce 100644 --- a/code/modules/mob/living/basic/festivus_pole.dm +++ b/code/modules/mob/living/basic/festivus_pole.dm @@ -40,19 +40,18 @@ ///how much charge we give off to cells around us when rubbed var/recharge_value = 75 + /mob/living/basic/festivus/Initialize(mapload) . = ..() AddComponent(/datum/component/seethrough_mob) var/static/list/death_loot = list(/obj/item/stack/rods) AddElement(/datum/element/death_drops, death_loot) AddComponent(/datum/component/aggro_emote, emote_list = string_list(list("growls")), emote_chance = 20) - var/datum/action/cooldown/mob_cooldown/charge_apc/charge_ability = new(src) - charge_ability.Grant(src) - ai_controller.set_blackboard_key(BB_FESTIVE_APC, charge_ability) + grant_actions_by_list(list(/datum/action/cooldown/mob_cooldown/charge_apc = BB_FESTIVE_APC)) /datum/ai_controller/basic_controller/festivus_pole blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_LOW_PRIORITY_HUNTING_TARGET = null, // APCs ) diff --git a/code/modules/mob/living/basic/guardian/guardian.dm b/code/modules/mob/living/basic/guardian/guardian.dm new file mode 100644 index 00000000000000..9d79373ccd42ea --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian.dm @@ -0,0 +1,333 @@ +/** + * A mob which acts as a guardian angel to another mob, sharing health but protecting them using special powers. + * Usually either obtained in magical form by a wizard, or technological form by a traitor. Sometimes found by miners. + */ +/mob/living/basic/guardian + name = "Guardian Spirit" + real_name = "Guardian Spirit" + desc = "A mysterious being that stands by its charge, ever vigilant." + icon = 'icons/mob/nonhuman-player/guardian.dmi' + icon_state = "magicbase" + icon_living = "magicbase" + icon_dead = "magicbase" + gender = NEUTER + basic_mob_flags = DEL_ON_DEATH + mob_biotypes = MOB_SPECIAL + sentience_type = SENTIENCE_HUMANOID + hud_type = /datum/hud/guardian + faction = list() + speed = 0 + maxHealth = INFINITY // The spirit itself is invincible and passes damage to its host + health = INFINITY + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1) + unsuitable_atmos_damage = 0 + unsuitable_cold_damage = 0 + unsuitable_heat_damage = 0 + speak_emote = list("hisses") + bubble_icon = "guardian" + response_help_continuous = "passes through" + response_help_simple = "pass through" + response_disarm_continuous = "flails at" + response_disarm_simple = "flail at" + response_harm_continuous = "punches" + response_harm_simple = "punch" + attack_sound = 'sound/weapons/punch1.ogg' + attack_verb_continuous = "punches" + attack_verb_simple = "punch" + combat_mode = TRUE + obj_damage = 40 + melee_damage_lower = 15 + melee_damage_upper = 15 + melee_attack_cooldown = CLICK_CD_MELEE + light_system = MOVABLE_LIGHT + light_range = 3 + light_on = FALSE + + /// The summoner of the guardian, we share health with them and can't move too far away (usually) + var/mob/living/summoner + /// How far from the summoner the guardian can be. + var/range = 10 + + /// The guardian's colour, used for their sprite, chat, and some effects. + var/guardian_colour + /// Coloured overlay we apply + var/mutable_appearance/overlay + + /// Which toggle button the HUD uses. + var/toggle_button_type = /atom/movable/screen/guardian/toggle_mode/inactive + /// Name used by the guardian creator. + var/creator_name = "Error" + /// Description used by the guardian creator. + var/creator_desc = "This shouldn't be here! Report it on GitHub!" + /// Icon used by the guardian creator. + var/creator_icon = "fuck" + + /// What type of guardian are we? + var/guardian_type = null + /// How are we themed? + var/datum/guardian_fluff/theme + /// A string explaining to the guardian what they can do. + var/playstyle_string = span_boldholoparasite("You are a Guardian without any type. You shouldn't exist and are an affront to god!") + + /// Are we forced to not be able to manifest/recall? + var/locked = FALSE + /// Cooldown between manifests/recalls. + COOLDOWN_DECLARE(manifest_cooldown) + /// Cooldown between the summoner resetting the guardian's client. + COOLDOWN_DECLARE(resetting_cooldown) + + /// List of actions we give to our summoner + var/static/list/control_actions = list( + /datum/action/cooldown/mob_cooldown/guardian_comms, + /datum/action/cooldown/mob_cooldown/recall_guardian, + /datum/action/cooldown/mob_cooldown/replace_guardian, + ) + +/mob/living/basic/guardian/Initialize(mapload, datum/guardian_fluff/theme) + . = ..() + GLOB.parasites += src + src.theme = theme + theme?.apply(src) + var/list/death_loot = string_list(list(/obj/item/stack/sheet/mineral/wood)) + AddElement(/datum/element/death_drops, death_loot) + AddElement(/datum/element/simple_flying) + AddComponent(/datum/component/basic_inhands) + // life link + update_appearance(UPDATE_ICON) + manifest_effects() + +/mob/living/basic/guardian/Destroy() + GLOB.parasites -= src + if (is_deployed()) + recall_effects() + cut_summoner(different_person = TRUE) + return ..() + +/mob/living/basic/guardian/update_overlays() + . = ..() + . += overlay + +/mob/living/basic/guardian/Login() //if we have a mind, set its name to ours when it logs in + . = ..() + if (!. || isnull(client)) + return FALSE + if (isnull(summoner)) + to_chat(src, span_boldholoparasite("For some reason, somehow, you have no summoner. Please report this bug immediately.")) + stack_trace("Guardian created with client but no summoner.") + else + to_chat(src, span_holoparasite("You are a [theme.name], bound to serve [summoner.real_name].")) + to_chat(src, span_holoparasite("You are capable of manifesting or recalling to your master with the buttons on your HUD. You will also find a button to communicate with [summoner.p_them()] privately there.")) + to_chat(src, span_holoparasite("While personally invincible, you will die if [summoner.real_name] does, and any damage dealt to you will have a portion passed on to [summoner.p_them()] as you feed upon [summoner.p_them()] to sustain yourself.")) + to_chat(src, playstyle_string) + if (!isnull(guardian_colour)) + return // Already set up so we don't need to do it again + locked = TRUE + guardian_rename() + guardian_recolour() + locked = FALSE + +/mob/living/basic/guardian/mind_initialize() + . = ..() + if (isnull(summoner)) + to_chat(src, span_boldholoparasite("For some reason, somehow, you have no summoner. Please report this bug immediately.")) + return + mind.enslave_mind_to_creator(summoner) // Once our mind is created, we become enslaved to our summoner. cant be done in the first run of set_summoner, because by then we dont have a mind yet. + +/// Pick a new colour for our guardian +/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 + 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() + set_guardian_colour(chosen_guardian_colour) + +/// Apply a new colour to our guardian +/mob/living/basic/guardian/proc/set_guardian_colour(colour) + guardian_colour = colour + set_light_color(guardian_colour) + overlay?.color = guardian_colour + update_appearance(UPDATE_ICON) + +/mob/living/basic/guardian/proc/guardian_rename() + if (isnull(client)) + return + + var/new_name = sanitize_name(reject_bad_text(tgui_input_text(src, "What would you like your name to be?", "Choose Your Name", generate_random_name(), MAX_NAME_LEN))) + if (!new_name) //redo proc until we get a good name + to_chat(src, span_warning("Invalid name, please try again.")) + return guardian_rename() + to_chat(src, span_notice("Your new name [span_name(new_name)] anchors itself in your mind.")) + fully_replace_character_name(null, new_name) + +/// Picks a random name as a suggestion +/mob/living/basic/guardian/proc/generate_random_name() + var/list/surname_options = list("Guardian") // Fallback in case you define a guardian with no theme + switch(theme?.fluff_type) + if (GUARDIAN_MAGIC) + surname_options = GLOB.guardian_fantasy_surnames + if (GUARDIAN_TECH) + surname_options = GLOB.guardian_tech_surnames + + return "[pick(GLOB.guardian_first_names)] [pick(surname_options)]" + +/mob/living/basic/guardian/melee_attack(atom/target, list/modifiers, ignore_cooldown) + if (!is_deployed()) + balloon_alert(src, "not tangible!") + return FALSE + return ..() + +/mob/living/basic/guardian/death(gibbed) + if (!QDELETED(summoner)) + to_chat(summoner, span_bolddanger("Your [name] died somehow!")) + summoner.dust() + return ..() + +/mob/living/basic/guardian/ex_act(severity, target) + switch(severity) + if (EXPLODE_DEVASTATE) + investigate_log("has been gibbed by an explosion.", INVESTIGATE_DEATHS) + gib() + return TRUE + if (EXPLODE_HEAVY) + adjustBruteLoss(60) + if (EXPLODE_LIGHT) + adjustBruteLoss(30) + + return TRUE + +/mob/living/basic/guardian/gib() + death(TRUE) + +/mob/living/basic/guardian/dust(just_ash, drop_items, force) + death(TRUE) + +/// Link up with a summoner mob. +/mob/living/basic/guardian/proc/set_summoner(mob/living/to_who, different_person = FALSE) + if (QDELETED(src)) + return // Just in case + if (QDELETED(to_who)) + ghostize(FALSE) + qdel(src) // No life of free invulnerability for you. + return + cut_summoner(different_person) + AddComponent(/datum/component/life_link, to_who, CALLBACK(src, PROC_REF(on_harm)), CALLBACK(src, PROC_REF(on_summoner_death))) + summoner = to_who + + for (var/action_type in control_actions) + if (locate(action_type) in summoner.actions) + continue + var/datum/action/new_action = new action_type(summoner) + new_action.Grant(summoner) + + if (different_person) + if (mind) + mind.enslave_mind_to_creator(to_who) + else //mindless guardian, manually give them factions + faction += summoner.faction + summoner.faction += "[REF(src)]" + remove_all_languages(LANGUAGE_MASTER) + copy_languages(to_who, LANGUAGE_MASTER) // make sure holoparasites speak same language as master + RegisterSignal(to_who, COMSIG_QDELETING, PROC_REF(on_summoner_deletion)) + RegisterSignal(to_who, COMSIG_LIVING_ON_WABBAJACKED, PROC_REF(on_summoner_wabbajacked)) + RegisterSignal(to_who, COMSIG_LIVING_SHAPESHIFTED, PROC_REF(on_summoner_shapeshifted)) + RegisterSignal(to_who, COMSIG_LIVING_UNSHAPESHIFTED, PROC_REF(on_summoner_unshapeshifted)) + recall(forced = TRUE) + leash_to(src, summoner) + if (to_who.stat == DEAD) + on_summoner_death(src, to_who) + summoner.updatehealth() + +/// Remove all references to our summoner +/mob/living/basic/guardian/proc/cut_summoner(different_person = FALSE) + if (isnull(summoner)) + return + if (is_deployed()) + recall_effects() + var/summoner_turf = get_turf(summoner) + if (!isnull(summoner_turf)) + forceMove(summoner_turf) + unleash() + UnregisterSignal(summoner, list(COMSIG_QDELETING, COMSIG_LIVING_ON_WABBAJACKED, COMSIG_LIVING_SHAPESHIFTED, COMSIG_LIVING_UNSHAPESHIFTED)) + if (different_person) + summoner.faction -= "[REF(src)]" + faction -= summoner.faction + mind?.remove_all_antag_datums() + if (!length(summoner.get_all_linked_holoparasites() - src)) + for (var/action_type in control_actions) + var/datum/action/remove_action = locate(action_type) in summoner.actions + if (isnull(remove_action)) + continue + remove_action.Remove(summoner) + summoner = null + +/// Connects these two mobs by a leash +/mob/living/basic/guardian/proc/leash_to(atom/movable/leashed, atom/movable/leashed_to) + leashed.AddComponent(\ + /datum/component/leash,\ + owner = leashed_to,\ + distance = range,\ + force_teleport_out_effect = /obj/effect/temp_visual/guardian/phase/out,\ + force_teleport_in_effect = /obj/effect/temp_visual/guardian/phase,\ + ) + +/// Removes the leash from this guardian +/mob/living/basic/guardian/proc/unleash() + qdel(GetComponent(/datum/component/leash)) + +/// Called when our owner dies. We fucked up, so now neither of us get to exist. +/mob/living/basic/guardian/proc/on_summoner_death(mob/living/source, mob/living/former_owner) + cut_summoner() + if (!isnull(former_owner.loc)) + forceMove(former_owner.loc) + to_chat(src, span_danger("Your summoner has died!")) + visible_message(span_bolddanger("\The [src] dies along with its user!")) + former_owner.visible_message(span_bolddanger("[former_owner]'s body is completely consumed by the strain of sustaining [src]!")) + former_owner.dust(drop_items = TRUE) + +/// Called when our health changes, inform our owner of why they are getting hurt (if they are) +/mob/living/basic/guardian/proc/on_harm(mob/living/source, mob/living/summoner, amount) + if (QDELETED(src) || QDELETED(summoner) || amount <= 2) + return + to_chat(summoner, span_bolddanger("[name] is under attack! You take damage!")) + summoner.visible_message(span_bolddanger("Blood sprays from [summoner] as [src] takes damage!")) + if(summoner.stat == UNCONSCIOUS || summoner.stat == HARD_CRIT) + to_chat(summoner, span_bolddanger("Your head pounds, you can't take the strain of sustaining [src] in this condition!")) + summoner.adjustOrganLoss(ORGAN_SLOT_BRAIN, amount * 0.5) + +/// When our owner is deleted, we go too. +/mob/living/basic/guardian/proc/on_summoner_deletion(mob/living/source) + SIGNAL_HANDLER + cut_summoner() + to_chat(src, span_danger("Your summoner is gone, you feel yourself fading!")) + ghostize(FALSE) + qdel(src) + +/// Signal proc for [COMSIG_LIVING_ON_WABBAJACKED], when our summoner is wabbajacked we should be alerted. +/mob/living/basic/guardian/proc/on_summoner_wabbajacked(mob/living/source, mob/living/new_mob) + SIGNAL_HANDLER + set_summoner(new_mob) + to_chat(src, span_holoparasite("Your summoner has changed form!")) + +/// Signal proc for [COMSIG_LIVING_SHAPESHIFTED], when our summoner is shapeshifted we should change to the new mob +/mob/living/basic/guardian/proc/on_summoner_shapeshifted(mob/living/source, mob/living/new_shape) + SIGNAL_HANDLER + set_summoner(new_shape) + to_chat(src, span_holoparasite("Your summoner has shapeshifted into that of a [new_shape]!")) + +/// Signal proc for [COMSIG_LIVING_UNSHAPESHIFTED], when our summoner unshapeshifts go back to that mob +/mob/living/basic/guardian/proc/on_summoner_unshapeshifted(mob/living/source, mob/living/old_summoner) + SIGNAL_HANDLER + set_summoner(old_summoner) + to_chat(src, span_holoparasite("Your summoner has shapeshifted back into their normal form!")) + +/mob/living/basic/guardian/wabbajack(what_to_randomize, change_flags = WABBAJACK) + visible_message(span_warning("[src] resists the polymorph!")) // Ha, no + +/mob/living/basic/guardian/can_suicide() + return FALSE // You gotta persuade your boss to end it instead, sorry + +/// Returns true if you are out and about +/mob/living/basic/guardian/proc/is_deployed() + return isnull(summoner) || loc != summoner diff --git a/code/modules/mob/living/basic/guardian/guardian_creator.dm b/code/modules/mob/living/basic/guardian/guardian_creator.dm new file mode 100644 index 00000000000000..d01383427df859 --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_creator.dm @@ -0,0 +1,212 @@ +GLOBAL_LIST_INIT(guardian_radial_images, setup_guardian_radial()) + +/proc/setup_guardian_radial() + . = list() + for(var/mob/living/basic/guardian/guardian_path as anything in subtypesof(/mob/living/basic/guardian)) + var/datum/radial_menu_choice/option = new() + option.name = initial(guardian_path.creator_name) + option.image = image(icon = 'icons/hud/guardian.dmi', icon_state = initial(guardian_path.creator_icon)) + option.info = span_boldnotice(initial(guardian_path.creator_desc)) + .[guardian_path] = option + +/// An item which grants you your very own soul buddy +/obj/item/guardian_creator + name = "enchanted deck of tarot cards" + desc = "An enchanted deck of tarot cards, rumored to be a source of unimaginable power." + icon = 'icons/obj/toys/playing_cards.dmi' + icon_state = "deck_tarot_full" + /// Are we used or in the process of being used? If yes, then we can't be used. + var/used = FALSE + /// The visuals we give to the guardian we spawn. + var/theme = GUARDIAN_THEME_MAGIC + /// The name of the guardian, for UI/message stuff. + var/mob_name = "Guardian Spirit" + /// Message sent when you use it. + var/use_message = span_holoparasite("You shuffle the deck...") + /// Message sent when it's already used. + var/used_message = span_holoparasite("All the cards seem to be blank now.") + /// Failure message if no ghost picks the holopara. + var/failure_message = span_boldholoparasite("..And draw a card! It's... blank? Maybe you should try again later.") + /// Failure message if we don't allow lings. + var/ling_failure = span_boldholoparasite("The deck refuses to respond to a souless creature such as you.") + /// Message sent if we successfully get a guardian. + var/success_message = span_holoparasite("%GUARDIAN has been summoned!") + /// If true, you are given a random guardian rather than picking from a selection. + var/random = FALSE + /// If true, you can have multiple guardians at the same time. + var/allow_multiple = FALSE + /// If true, lings can get guardians from this. + var/allow_changeling = TRUE + /// If true, a dextrous guardian can get their own guardian, infinite chain! + var/allow_guardian = FALSE + /// List of all the guardians this type can spawn. + var/list/possible_guardians = list( //default, has everything but dextrous + /mob/living/basic/guardian/assassin, + /mob/living/basic/guardian/charger, + /mob/living/basic/guardian/explosive, + /mob/living/basic/guardian/gaseous, + /mob/living/basic/guardian/gravitokinetic, + /mob/living/basic/guardian/lightning, + /mob/living/basic/guardian/protector, + /mob/living/basic/guardian/ranged, + /mob/living/basic/guardian/standard, + /mob/living/basic/guardian/support, + ) + +/obj/item/guardian_creator/Initialize(mapload) + . = ..() + var/datum/guardian_fluff/using_theme = GLOB.guardian_themes[theme] + mob_name = using_theme.name + +/obj/item/guardian_creator/attack_self(mob/living/user) + if(isguardian(user) && !allow_guardian) + balloon_alert(user, "can't do that!") + return + var/list/guardians = user.get_all_linked_holoparasites() + if(length(guardians) && !allow_multiple) + balloon_alert(user, "already have one!") + return + if(user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling) && !allow_changeling) + to_chat(user, ling_failure) + return + if(used) + to_chat(user, used_message) + return + var/list/radial_options = GLOB.guardian_radial_images.Copy() + for(var/possible_guardian in radial_options) + if(possible_guardian in possible_guardians) + continue + radial_options -= possible_guardian + var/mob/living/basic/guardian/guardian_path + if(random) + guardian_path = pick(possible_guardians) + else + guardian_path = show_radial_menu(user, src, radial_options, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 42, require_near = TRUE) + if(isnull(guardian_path)) + return + 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 = SSpolling.poll_ghost_candidates( + "Do you want to play as [user.real_name]'s [guardian_type_name] [mob_name]?", + check_jobban = ROLE_PAI, + poll_time = 10 SECONDS, + ignore_category = POLL_IGNORE_HOLOPARASITE, + pic_source = src, + 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) + if(QDELETED(user) || user.stat == DEAD) + return + var/list/guardians = user.get_all_linked_holoparasites() + if(length(guardians) && !allow_multiple) + balloon_alert(user, "already got one!") + used = FALSE + return + var/datum/guardian_fluff/guardian_theme = GLOB.guardian_themes[theme] + var/mob/living/basic/guardian/summoned_guardian = new guardian_path(user, guardian_theme) + summoned_guardian.set_summoner(user, different_person = TRUE) + summoned_guardian.key = candidate.key + user.log_message("has summoned [key_name(summoned_guardian)], a [summoned_guardian.creator_name] holoparasite.", LOG_GAME) + summoned_guardian.log_message("was summoned as a [summoned_guardian.creator_name] holoparasite.", LOG_GAME) + to_chat(user, guardian_theme.get_fluff_string(summoned_guardian.guardian_type)) + to_chat(user, replacetext(success_message, "%GUARDIAN", mob_name)) + summoned_guardian.client?.init_verbs() + return summoned_guardian + +/// Checks to ensure we're still capable of using the radial selector +/obj/item/guardian_creator/proc/check_menu(mob/living/user) + if(!istype(user)) + return FALSE + if(user.incapacitated() || !user.is_holding(src) || used) + return FALSE + return TRUE + +/// Guardian creator available in the wizard spellbook. All but support are available. +/obj/item/guardian_creator/wizard + allow_multiple = TRUE + possible_guardians = list( + /mob/living/basic/guardian/assassin, + /mob/living/basic/guardian/charger, + /mob/living/basic/guardian/dextrous, + /mob/living/basic/guardian/explosive, + /mob/living/basic/guardian/gaseous, + /mob/living/basic/guardian/gravitokinetic, + /mob/living/basic/guardian/lightning, + /mob/living/basic/guardian/protector, + /mob/living/basic/guardian/ranged, + /mob/living/basic/guardian/standard, + ) + +/obj/item/guardian_creator/wizard/spawn_guardian(mob/living/user, mob/dead/candidate) + var/mob/guardian = ..() + if(isnull(guardian)) + return null + // Add the wizard team datum + var/datum/antagonist/wizard/antag_datum = user.mind.has_antag_datum(/datum/antagonist/wizard) + if(isnull(antag_datum)) + return guardian + if(!antag_datum.wiz_team) + antag_datum.create_wiz_team() + guardian.mind.add_antag_datum(/datum/antagonist/wizard_minion, antag_datum.wiz_team) + return guardian + +/// Guardian creator available in the traitor uplink. All but dextrous are available, you can pick which you want, and changelings cannot use it. +/obj/item/guardian_creator/tech + name = "holoparasite injector" + desc = "It contains an alien nanoswarm of unknown origin. Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, it requires an organic host as a home base and source of fuel." + icon = 'icons/obj/medical/syringe.dmi' + icon_state = "combat_hypo" + theme = GUARDIAN_THEME_TECH + allow_changeling = FALSE + use_message = span_holoparasite("You start to power on the injector...") + used_message = span_holoparasite("The injector has already been used.") + failure_message = span_boldholoparasite("...ERROR. BOOT SEQUENCE ABORTED. AI FAILED TO INTIALIZE. PLEASE CONTACT SUPPORT OR TRY AGAIN LATER.") + ling_failure = span_boldholoparasite("The holoparasites recoil in horror. They want nothing to do with a creature like you.") + success_message = span_holoparasite("%GUARDIAN is now online!") + +/// Guardian creator only spawned by admins, which creates a holographic fish. You can have several of them. +/obj/item/guardian_creator/carp + name = "holocarp fishsticks" + desc = "Using the power of Carp'sie, you can catch a carp from byond the veil of Carpthulu, and bind it to your fleshy flesh form." + icon = 'icons/obj/food/meat.dmi' + icon_state = "fishfingers" + theme = GUARDIAN_THEME_CARP + use_message = span_holoparasite("You put the fishsticks in your mouth...") + used_message = span_holoparasite("Someone's already taken a bite out of these fishsticks! Ew.") + failure_message = span_boldholoparasite("You couldn't catch any carp spirits from the seas of Lake Carp. Maybe there are none, maybe you fucked up.") + ling_failure = span_boldholoparasite("Carp'sie seems to not have taken you as the chosen one. Maybe it's because of your horrifying origin.") + success_message = span_holoparasite("%GUARDIAN has been caught!") + allow_multiple = TRUE + +/// Guardian creator available to miners from chests, very limited selection and randomly assigned. +/obj/item/guardian_creator/miner + name = "dusty shard" + desc = "Seems to be a very old rock, may have originated from a strange meteor." + icon = 'icons/obj/mining_zones/artefacts.dmi' + icon_state = "dustyshard" + theme = GUARDIAN_THEME_MINER + use_message = span_holoparasite("You pierce your skin with the shard...") + used_message = span_holoparasite("This shard seems to have lost all its power...") + failure_message = span_boldholoparasite("The shard hasn't reacted at all. Maybe try again later...") + ling_failure = span_boldholoparasite("The power of the shard seems to not react with your horrifying, mutated body.") + success_message = span_holoparasite("%GUARDIAN has appeared!") + random = TRUE + //limited to ones which are plausibly useful on lavaland + possible_guardians = list( + /mob/living/basic/guardian/charger, // A flying mount which can cross chasms + /mob/living/basic/guardian/protector, // Bodyblocks projectiles for you + /mob/living/basic/guardian/ranged, // Shoots the bad guys + /mob/living/basic/guardian/standard, // Can mine walls + /mob/living/basic/guardian/support, // Heals and teleports you + ) diff --git a/code/modules/mob/living/basic/guardian/guardian_fluff.dm b/code/modules/mob/living/basic/guardian/guardian_fluff.dm new file mode 100644 index 00000000000000..4ede238921ed30 --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_fluff.dm @@ -0,0 +1,124 @@ +/** + * Defines a theme used by guardian mobs for visuals and some text output + * The default is used for ones created by wizards + */ +/datum/guardian_fluff + /// What name do we apply before one has been selected? + var/name = "Guardian Spirit" + /// Mob description to apply + var/desc = "A mysterious being that stands by its charge, ever vigilant." + /// Are we magical or technological? Mostly just used to pick a surname + var/fluff_type = GUARDIAN_MAGIC + /// What speech bubble do we use? + var/bubble_icon = "guardian" + /// What is our base icon state? + var/icon_state = "magicbase" + /// What is the icon state for our coloured overlay? + var/overlay_state = "magic" + /// Emote used for speaking + var/list/speak_emote = list("hisses") + /// Verb shown to viewers when attacking + var/attack_verb_continuous = "punches" + /// Verb shown to attacker when attacking + var/attack_verb_simple = "punch" + /// Sound played when we attack + var/attack_sound = 'sound/weapons/punch1.ogg' + /// Visible effect when we attack + var/attack_vis_effect = ATTACK_EFFECT_PUNCH + /// An associative list of type of guardian to some kind of descriptive text to show on appearance. + var/guardian_fluff = list( + GUARDIAN_ASSASSIN = "...And draw the Space Ninja, a lethal and invisible assassin.", + GUARDIAN_CHARGER = "...And draw the Hunter, alien master of rapid assault.", + GUARDIAN_DEXTROUS = "...And draw the Monkey, ascendant beast who has learned to use tools.", + GUARDIAN_EXPLOSIVE = "...And draw the Scientist, herald of explosive death.", + GUARDIAN_GASEOUS = "...And draw the Atmospheric Technician, veiled in a purple haze.", + GUARDIAN_GRAVITOKINETIC = "...And draw the Singularity, a terrible, irresistible force..", + GUARDIAN_LIGHTNING = "...And draw the Supermatter, a shockingly lethal font of power.", + GUARDIAN_PROTECTOR = "...And draw the Corgi, a stalwart protector that never leaves the side of its charge.", + GUARDIAN_RANGED = "...And draw the Watcher, impaling its prey from afar.", + GUARDIAN_STANDARD = "...And draw the Assistant, faceless but never to be underestimated.", + GUARDIAN_SUPPORT = "...And draw the Paramedic, arbiter of life and death.", + ) + +/// Applies relevant visual properties to our guardian +/datum/guardian_fluff/proc/apply(mob/living/basic/guardian/guardian) + guardian.name = name + guardian.real_name = name + guardian.bubble_icon = bubble_icon + guardian.icon_living = icon_state + guardian.icon_state = icon_state + + guardian.speak_emote = speak_emote + guardian.attack_verb_continuous = attack_verb_continuous + guardian.attack_verb_simple = attack_verb_simple + guardian.attack_sound = attack_sound + guardian.attack_vis_effect = attack_vis_effect + + guardian.overlay = mutable_appearance(guardian.icon, overlay_state) + +/// Output an appropriate fluff string for our guardian when it is created +/datum/guardian_fluff/proc/get_fluff_string(guardian_type) + return span_holoparasite(guardian_fluff[guardian_type] || "You bring forth a glitching abomination, something which should not be! Please contact a coder about it.") + +/// Used by holoparasites in the Traitor uplink +/datum/guardian_fluff/tech + name = "Holoparasite" + fluff_type = GUARDIAN_TECH + bubble_icon = "holo" + icon_state = "techbase" + overlay_state = "tech" + guardian_fluff = list( + GUARDIAN_ASSASSIN = "Boot sequence complete. Stealth modules loaded. Holoparasite swarm online.", + GUARDIAN_CHARGER = "Boot sequence complete. Overclocking motive engines. Holoparasite swarm online.", + GUARDIAN_DEXTROUS = "Boot sequence complete. Armed combat routines loaded. Holoparasite swarm online.", + GUARDIAN_EXPLOSIVE = "Boot sequence complete. Payload generator online. Holoparasite swarm online.", + GUARDIAN_GASEOUS = "Boot sequence complete. Atmospheric projectors operational. Holoparasite swarm online.", + GUARDIAN_GRAVITOKINETIC = "Boot sequence complete. Gravitic engine spinning up. Holoparasite swarm online.", + GUARDIAN_LIGHTNING = "Boot sequence complete. Tesla projectors charged. Holoparasite swarm online.", + GUARDIAN_PROTECTOR = "Boot sequence complete. Bodyguard routines loaded. Holoparasite swarm online.", + GUARDIAN_RANGED = "Boot sequence complete. Flechette launchers operational. Holoparasite swarm online.", + GUARDIAN_STANDARD = "Boot sequence complete. CQC suite engaged. Holoparasite swarm online.", + GUARDIAN_SUPPORT = "Boot sequence complete. Medical suite active. Holoparasite swarm online.", + ) + +/// Used by powerminers found in necropolis chests +/datum/guardian_fluff/miner + name = "Power Miner" + icon_state = "minerbase" + overlay_state = "miner" + guardian_fluff = list( + GUARDIAN_ASSASSIN = "The shard reveals... Glass, a sharp but fragile ambusher.", + GUARDIAN_CHARGER = "The shard reveals... Titanium, a lightweight, agile fighter.", + GUARDIAN_DEXTROUS = "The shard reveals... Gold, a malleable hoarder of treasure.", + GUARDIAN_EXPLOSIVE = "The shard reveals... Gibtonite, volatile and surprising.", + GUARDIAN_GASEOUS = "The shard reveals... Plasma, the bringer of flame.", + GUARDIAN_GRAVITOKINETIC = "The shard reveals... Bananium, a manipulator of motive forces.", + GUARDIAN_LIGHTNING = "The shard reveals... Iron, a conductive font of lightning.", + GUARDIAN_PROTECTOR = "The shard reveals... Uranium, dense and resistant.", + GUARDIAN_RANGED = "The shard reveals... Diamond, projecting a million sharp edges.", + GUARDIAN_STANDARD = "The shard reveals... Plastitanium, a powerful fighter.", + GUARDIAN_SUPPORT = "The shard reveals... Bluespace, master of relocation.", + ) + +/// Used by holocarp spawned by admins +/datum/guardian_fluff/carp + name = "Holocarp" + fluff_type = GUARDIAN_TECH + desc = "A mysterious fish that swims by its charge, ever fingilant." + icon_state = null // Handled entirely by the overlay + bubble_icon = "holo" + overlay_state = "carp" + speak_emote = list("gnashes") + guardian_fluff = list( + GUARDIAN_ASSASSIN = "CARP CARP CARP! Caught one! It's an assassin carp! Just when you thought it was safe to go back to the water... which is unhelpful, because we're in space.", + GUARDIAN_CHARGER = "CARP CARP CARP! Caught one! It's a charger carp which likes running at people. But it doesn't have any legs...", + GUARDIAN_DEXTROUS = "CARP CARP CARP! You caught one! It's a dextrous carp ready to slap people with a fish, once it picks one up.", + GUARDIAN_EXPLOSIVE = "CARP CARP CARP! Caught one! It's an explosive carp! You two are going to have a blast.", + GUARDIAN_GASEOUS = "CARP CARP CARP! You caught one! It's a gaseous carp, but don't worry it actually smells pretty good!", + GUARDIAN_GRAVITOKINETIC = "CARP CARP CARP! Caught one! It's a gravitokinetic carp! Now do you understand the gravity of the situation?", + GUARDIAN_LIGHTNING = "CARP CARP CARP! Caught one! It's a lightning carp! What a shocking result!", + GUARDIAN_PROTECTOR = "CARP CARP CARP! You caught one! Wait, no... it caught you! The fisher has become the fishy...", + GUARDIAN_RANGED = "CARP CARP CARP! You caught one! It's a ranged carp! It has been collecting glass shards in preparation for this moment.", + GUARDIAN_STANDARD = "CARP CARP CARP! You caught one! This one is a little generic and disappointing... Better punch through some walls to ease the tension.", + GUARDIAN_SUPPORT = "CARP CARP CARP! You caught a support carp! Now it's here, now you're over there!", + ) diff --git a/code/modules/mob/living/basic/guardian/guardian_helpers.dm b/code/modules/mob/living/basic/guardian/guardian_helpers.dm new file mode 100644 index 00000000000000..df50a43e6a099e --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_helpers.dm @@ -0,0 +1,13 @@ +/// Returns a list of all holoparasites that has this mob as a summoner. +/mob/living/proc/get_all_linked_holoparasites() + RETURN_TYPE(/list) + var/list/all_parasites = list() + for(var/mob/living/basic/guardian/stand as anything in GLOB.parasites) + if (stand.summoner != src) + continue + all_parasites += stand + return all_parasites + +/// Returns true if this holoparasite has the same summoner as the passed holoparasite. +/mob/living/basic/guardian/proc/shares_summoner(mob/living/basic/guardian/other_guardian) + return istype(other_guardian) && other_guardian.summoner == summoner diff --git a/code/modules/mob/living/basic/guardian/guardian_types/assassin.dm b/code/modules/mob/living/basic/guardian/guardian_types/assassin.dm new file mode 100644 index 00000000000000..2e94aaf0394982 --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_types/assassin.dm @@ -0,0 +1,116 @@ +#define CAN_STEALTH_ALERT "can_stealth" + +/** + * Can enter stealth mode to become invisible and deal bonus damage on their next attack, an ambush predator. + */ +/mob/living/basic/guardian/assassin + guardian_type = GUARDIAN_ASSASSIN + melee_damage_lower = 15 + melee_damage_upper = 15 + attack_verb_continuous = "slashes" + attack_verb_simple = "slash" + attack_sound = 'sound/weapons/bladeslice.ogg' + attack_vis_effect = ATTACK_EFFECT_SLASH + sharpness = SHARP_POINTY + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1) + playstyle_string = span_holoparasite("As an assassin type you do medium damage and have no damage resistance, but can enter stealth, massively increasing the damage of your next attack and causing it to ignore armor. Stealth is broken when you attack or take damage.") + creator_name = "Assassin" + creator_desc = "Does medium damage and takes full damage, but can enter stealth, causing its next attack to do massive damage and ignore armor. However, it becomes briefly unable to recall after attacking from stealth." + creator_icon = "assassin" + toggle_button_type = /atom/movable/screen/guardian/toggle_mode/assassin + /// How long to put stealth on cooldown if we are forced out? + var/stealth_cooldown_time = 16 SECONDS + /// Cooldown for the stealth toggle. + COOLDOWN_DECLARE(stealth_cooldown) + +/mob/living/basic/guardian/assassin/Initialize(mapload, datum/guardian_fluff/theme) + . = ..() + show_can_stealth() + RegisterSignal(src, COMSIG_GUARDIAN_ASSASSIN_REVEALED, PROC_REF(on_forced_unstealth)) + +// Toggle stealth +/mob/living/basic/guardian/assassin/toggle_modes() + var/stealthed = has_status_effect(/datum/status_effect/guardian_stealth) + if (stealthed) + to_chat(src, span_bolddanger("You exit stealth.")) + remove_status_effect(/datum/status_effect/guardian_stealth) + show_can_stealth() + return + if (COOLDOWN_FINISHED(src, stealth_cooldown)) + if (!is_deployed()) + to_chat(src, span_bolddanger("You have to be manifested to enter stealth!")) + return + apply_status_effect(/datum/status_effect/guardian_stealth) + clear_alert(CAN_STEALTH_ALERT) + return + to_chat(src, span_bolddanger("You cannot yet enter stealth, wait another [DisplayTimeText(COOLDOWN_TIMELEFT(src, stealth_cooldown))]!")) + +/mob/living/basic/guardian/assassin/get_status_tab_items() + . = ..() + if(!COOLDOWN_FINISHED(src, stealth_cooldown)) + . += "Stealth Cooldown Remaining: [DisplayTimeText(COOLDOWN_TIMELEFT(src, stealth_cooldown))]" + +/// Called when we are removed from stealth involuntarily +/mob/living/basic/guardian/assassin/proc/on_forced_unstealth(mob/living/source) + SIGNAL_HANDLER + visible_message(span_danger("\The [src] suddenly appears!")) + COOLDOWN_START(src, manifest_cooldown, 4 SECONDS) + COOLDOWN_START(src, stealth_cooldown, stealth_cooldown_time) + addtimer(CALLBACK(src, PROC_REF(show_can_stealth)), stealth_cooldown_time) + +/// Displays an alert letting us know that we can enter stealth +/mob/living/basic/guardian/assassin/proc/show_can_stealth() + if(!COOLDOWN_FINISHED(src, stealth_cooldown)) + return + throw_alert(CAN_STEALTH_ALERT, /atom/movable/screen/alert/canstealth) + +/// Status effect which makes us sneakier and do bonus damage +/datum/status_effect/guardian_stealth + id = "guardian_stealth" + alert_type = /atom/movable/screen/alert/status_effect/instealth + /// Damage added in stealth mode. + var/damage_bonus = 35 + /// Our wound bonus when in stealth mode. Allows you to actually cause wounds, unlike normal. + var/stealth_wound_bonus = -20 + +/datum/status_effect/guardian_stealth/on_apply() + new /obj/effect/temp_visual/guardian/phase/out(get_turf(owner)) + owner.melee_damage_lower += damage_bonus + owner.melee_damage_upper += damage_bonus + if (isbasicmob(owner)) + var/mob/living/basic/basic_owner = owner + basic_owner.armour_penetration = 100 + basic_owner.wound_bonus = stealth_wound_bonus + basic_owner.obj_damage = 0 + to_chat(owner, span_bolddanger("You enter stealth, empowering your next attack.")) + animate(owner, alpha = 15, time = 0.5 SECONDS) + + RegisterSignals(owner, list(COMSIG_GUARDIAN_RECALLED, COMSIG_HOSTILE_POST_ATTACKINGTARGET), PROC_REF(forced_exit)) + RegisterSignals(owner, COMSIG_LIVING_ADJUST_STANDARD_DAMAGE_TYPES, PROC_REF(on_health_changed)) + return TRUE + +/datum/status_effect/guardian_stealth/on_remove() + owner.melee_damage_lower -= damage_bonus + owner.melee_damage_upper -= damage_bonus + if (isbasicmob(owner)) + var/mob/living/basic/basic_owner = owner + basic_owner.armour_penetration = initial(basic_owner.armour_penetration) + basic_owner.wound_bonus = initial(basic_owner.wound_bonus) + basic_owner.obj_damage = initial(basic_owner.obj_damage) + animate(owner, alpha = initial(owner.alpha), time = 0.5 SECONDS) + UnregisterSignal(owner, list(COMSIG_GUARDIAN_RECALLED, COMSIG_HOSTILE_POST_ATTACKINGTARGET) + COMSIG_LIVING_ADJUST_STANDARD_DAMAGE_TYPES) + +/// If we take damage, exit the status effect +/datum/status_effect/guardian_stealth/proc/on_health_changed(mob/living/our_mob, type, amount, forced) + SIGNAL_HANDLER + if (amount <= 0) + return + forced_exit() + +/// Forcibly exit the status effect +/datum/status_effect/guardian_stealth/proc/forced_exit() + SIGNAL_HANDLER + SEND_SIGNAL(owner, COMSIG_GUARDIAN_ASSASSIN_REVEALED) + qdel(src) + +#undef CAN_STEALTH_ALERT diff --git a/code/modules/mob/living/basic/guardian/guardian_types/charger.dm b/code/modules/mob/living/basic/guardian/guardian_types/charger.dm new file mode 100644 index 00000000000000..07c5e31f144501 --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_types/charger.dm @@ -0,0 +1,69 @@ +/** + * Very fast, has a charging attack, and most importantly can be ridden like a horse. + */ +/mob/living/basic/guardian/charger + guardian_type = GUARDIAN_CHARGER + melee_damage_lower = 15 + melee_damage_upper = 15 + speed = -0.5 + damage_coeff = list(BRUTE = 0.75, BURN = 0.75, TOX = 0.75, STAMINA = 0, OXY = 0.75) + playstyle_string = span_holoparasite("As a charger type you do medium damage, have light damage resistance, move very fast, can be ridden, and can charge at a location, damaging any target hit and forcing them to drop any items they are holding.") + creator_name = "Charger" + creator_desc = "Moves very fast, does medium damage on attack, can be ridden and can charge at targets, damaging the first target hit and forcing them to drop any items they are holding." + creator_icon = "charger" + +/mob/living/basic/guardian/charger/Initialize(mapload, datum/guardian_fluff/theme) + . = ..() + AddElement(/datum/element/ridable, /datum/component/riding/creature/guardian) + var/datum/action/cooldown/mob_cooldown/charge/basic_charge/guardian/charge = new(src) + charge.Grant(src) + charge.set_click_ability(src) + +/// Guardian charger's charging attack, it knocks items out of people's hands +/datum/action/cooldown/mob_cooldown/charge/basic_charge/guardian + name = "Charge!" + cooldown_time = 4 SECONDS + melee_cooldown_time = 0 SECONDS + button_icon = 'icons/effects/effects.dmi' + button_icon_state = "speed" + background_icon = 'icons/hud/guardian.dmi' + background_icon_state = "base" + charge_delay = 0 + recoil_duration = 0 + charge_damage = 20 + charge_distance = 10 + unset_after_click = FALSE + destroy_objects = FALSE + +/datum/action/cooldown/mob_cooldown/charge/basic_charge/guardian/PreActivate(atom/target) + if (!isguardian(owner)) + return ..() + var/mob/living/basic/guardian/guardian_owner = owner + if (guardian_owner.is_deployed()) + return ..() + return FALSE + +/datum/action/cooldown/mob_cooldown/charge/basic_charge/guardian/do_charge_indicator(atom/charger, atom/charge_target) + playsound(charger, 'sound/items/modsuit/loader_launch.ogg', 75, TRUE) + var/obj/effect/temp_visual/decoy/decoy_flash = new /obj/effect/temp_visual/decoy(charger.loc, charger) + animate(decoy_flash, alpha = 0, color = "#FF0000", transform = matrix() * 2, time = 3) + +/datum/action/cooldown/mob_cooldown/charge/basic_charge/guardian/can_hit_target(atom/movable/source, atom/target) + var/mob/living/living_target = target + if (!istype(living_target)) + return FALSE + var/mob/living/basic/guardian/guardian_owner = owner + if (!istype(guardian_owner)) + return TRUE + if (living_target == guardian_owner.summoner || guardian_owner.shares_summoner(target)) + return FALSE + return TRUE + +/datum/action/cooldown/mob_cooldown/charge/basic_charge/guardian/hit_target(atom/movable/source, mob/living/target, damage_dealt) + if(ishuman(target)) + var/mob/living/carbon/human/hit_human = target + if(hit_human.check_block(src, charge_damage, name, attack_type = LEAP_ATTACK)) + return + . = ..() + var/mob/living/hit_mob = target + hit_mob.drop_all_held_items() diff --git a/code/modules/mob/living/basic/guardian/guardian_types/dextrous.dm b/code/modules/mob/living/basic/guardian/guardian_types/dextrous.dm new file mode 100644 index 00000000000000..ae9cbfbeecbc8a --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_types/dextrous.dm @@ -0,0 +1,100 @@ +/// Dextrous guardians have some of the most powerful abilities of all: hands and pockets +/mob/living/basic/guardian/dextrous + guardian_type = GUARDIAN_DEXTROUS + melee_damage_lower = 10 + melee_damage_upper = 10 + damage_coeff = list(BRUTE = 0.75, BURN = 0.75, TOX = 0.75, STAMINA = 0, OXY = 0.75) + playstyle_string = span_holoparasite("As a dextrous type you can hold items, store an item within yourself, and have medium damage resistance, but do low damage on attacks. Recalling and leashing will force you to drop unstored items!") + creator_name = "Dextrous" + creator_desc = "Does low damage on attack, but is capable of holding items and storing a single item within it. It will drop items held in its hands when it recalls, but it will retain the stored item." + creator_icon = "dextrous" + hud_type = /datum/hud/dextrous/guardian + held_items = list(null, null) + /// An internal pocket we can put stuff in + var/obj/item/internal_storage + +/mob/living/basic/guardian/dextrous/Initialize(mapload, datum/guardian_fluff/theme) + . = ..() + add_traits(list(TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP), ROUNDSTART_TRAIT) + AddElement(/datum/element/dextrous, hud_type = hud_type) + AddComponent(/datum/component/personal_crafting) + AddComponent(/datum/component/basic_inhands) + +/mob/living/basic/guardian/dextrous/death(gibbed) + dropItemToGround(internal_storage) + return ..() + +/mob/living/basic/guardian/dextrous/examine(mob/user) + . = ..() + if(isnull(internal_storage) || (internal_storage.item_flags & ABSTRACT)) + return + . += span_info("It is holding [internal_storage.get_examine_string(user)] in its internal storage.") + +/mob/living/basic/guardian/dextrous/recall_effects() + . = ..() + drop_all_held_items() + +// Bullshit related to having a fake pocket begins here + +/mob/living/basic/guardian/dextrous/doUnEquip(obj/item/equipped_item, force, newloc, no_move, invdrop = TRUE, silent = FALSE) + . = ..() + if (!.) + return FALSE + update_held_items() + if(equipped_item == internal_storage) + internal_storage = null + update_inv_internal_storage() + return TRUE + +/mob/living/basic/guardian/dextrous/can_equip(mob/living/M, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE, ignore_equipped = FALSE, indirect_action = FALSE) + if(slot != ITEM_SLOT_DEX_STORAGE) + return FALSE + return isnull(internal_storage) + +/mob/living/basic/guardian/dextrous/get_item_by_slot(slot_id) + if(slot_id == ITEM_SLOT_DEX_STORAGE) + return internal_storage + return ..() + +/mob/living/basic/guardian/dextrous/get_slot_by_item(obj/item/looking_for) + if(internal_storage == looking_for) + return ITEM_SLOT_DEX_STORAGE + return ..() + +/mob/living/basic/guardian/dextrous/equip_to_slot(obj/item/equipping, slot, initial = FALSE, redraw_mob = FALSE, indirect_action = FALSE) + if (slot != ITEM_SLOT_DEX_STORAGE) + to_chat(src, span_danger("You are trying to equip this item to an unsupported inventory slot. Report this to a coder!")) + return FALSE + + var/index = get_held_index_of_item(equipping) + if(index) + held_items[index] = null + update_held_items() + + if(equipping.pulledby) + equipping.pulledby.stop_pulling() + + equipping.screen_loc = null // will get moved if inventory is visible + equipping.forceMove(src) + SET_PLANE_EXPLICIT(equipping, ABOVE_HUD_PLANE, src) + + internal_storage = equipping + update_inv_internal_storage() + + equipping.on_equipped(src, slot) + return TRUE + +/mob/living/basic/guardian/dextrous/getBackSlot() + return ITEM_SLOT_DEX_STORAGE + +/mob/living/basic/guardian/dextrous/getBeltSlot() + return ITEM_SLOT_DEX_STORAGE + +/mob/living/basic/guardian/dextrous/proc/update_inv_internal_storage() + if(isnull(internal_storage) || isnull(client) || !hud_used?.hud_shown) + return + internal_storage.screen_loc = ui_id + client.screen += internal_storage + +/mob/living/basic/guardian/dextrous/regenerate_icons() + update_inv_internal_storage() diff --git a/code/modules/mob/living/basic/guardian/guardian_types/explosive.dm b/code/modules/mob/living/basic/guardian/guardian_types/explosive.dm new file mode 100644 index 00000000000000..82c69149f6ed3c --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_types/explosive.dm @@ -0,0 +1,77 @@ +/// A durable guardian which can convert objects into hidden explosives. +/mob/living/basic/guardian/explosive + guardian_type = GUARDIAN_EXPLOSIVE + melee_damage_lower = 15 + melee_damage_upper = 15 + damage_coeff = list(BRUTE = 0.6, BURN = 0.6, TOX = 0.6, STAMINA = 0, OXY = 0.6) + range = 13 + playstyle_string = span_holoparasite("As an explosive type, you have moderate close combat abilities and are capable of converting nearby items and objects into disguised bombs via right-click.") + creator_name = "Explosive" + creator_desc = "High damage resist and medium power attack. Can turn any object, including objects too large to pick up, into a bomb, dealing explosive damage to the next person to touch it. The object will return to normal after the trap is triggered or after a delay." + creator_icon = "explosive" + /// Ability which plants bombs + var/datum/action/cooldown/mob_cooldown/explosive_booby_trap/bomb + +/mob/living/basic/guardian/explosive/Initialize(mapload, datum/guardian_fluff/theme) + . = ..() + bomb = new(src) + bomb.Grant(src) + +/mob/living/basic/guardian/explosive/Destroy() + QDEL_NULL(bomb) + return ..() + +/mob/living/basic/guardian/explosive/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) + if(LAZYACCESS(modifiers, RIGHT_CLICK) && proximity_flag && isobj(attack_target) && can_unarmed_attack()) + bomb.Trigger(target = attack_target) + return + return ..() + + +/// An ability which can turn an object into a bomb +/datum/action/cooldown/mob_cooldown/explosive_booby_trap + name = "Explosive Trap" + desc = "Convert an inanimate object into a deadly and mostly undetectable explosive, triggered on touch." + button_icon = 'icons/mob/actions/actions_spells.dmi' + button_icon_state = "smoke" + cooldown_time = 20 SECONDS + melee_cooldown_time = 0 SECONDS + background_icon = 'icons/hud/guardian.dmi' + background_icon_state = "base" + /// After this amount of time passses, bomb deactivates. + var/decay_time = 1 MINUTES + /// Static list of signals that activate the bomb. + var/static/list/boom_signals = list(COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_BUMPED, COMSIG_ATOM_ATTACK_HAND) + +/datum/action/cooldown/mob_cooldown/explosive_booby_trap/PreActivate(atom/target) + if (!isobj(target)) + return FALSE + if (!owner.Adjacent(target)) + return FALSE + return ..() + +/datum/action/cooldown/mob_cooldown/explosive_booby_trap/Activate(atom/target) + var/glow_colour = COLOR_RED + var/mob/living/basic/guardian/guardian_owner = owner + if (istype(guardian_owner)) + glow_colour = guardian_owner.guardian_colour + target.AddComponent(\ + /datum/component/direct_explosive_trap, \ + saboteur = owner, \ + expire_time = decay_time, \ + glow_colour = glow_colour,\ + explosive_checks = CALLBACK(src, PROC_REF(validate_target)), \ + triggering_signals = boom_signals, \ + ) + target.balloon_alert(owner, "bomb planted") + StartCooldown() + return TRUE + +/// Validate that we should blow up on this thing, preferably not on one of our allies +/datum/action/cooldown/mob_cooldown/explosive_booby_trap/proc/validate_target(mob/living/target) + if (target == owner) + return FALSE + var/mob/living/basic/guardian/guardian_owner = owner + if (!istype(guardian_owner)) + return TRUE + return target != guardian_owner.summoner && !guardian_owner.shares_summoner(target) diff --git a/code/modules/mob/living/basic/guardian/guardian_types/gaseous.dm b/code/modules/mob/living/basic/guardian/guardian_types/gaseous.dm new file mode 100644 index 00000000000000..b43b8e64ea4af6 --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_types/gaseous.dm @@ -0,0 +1,159 @@ +/// Not particularly resistant, but versatile due to the selection of gases it can generate. +/mob/living/basic/guardian/gaseous + guardian_type = GUARDIAN_GASEOUS + melee_damage_lower = 10 + melee_damage_upper = 10 + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 0) + range = 7 + playstyle_string = span_holoparasite("As a gaseous type, you have only light damage resistance, but you can expel gas in an area. In addition, your punches cause sparks, and you make your summoner inflammable.") + creator_name = "Gaseous" + creator_desc = "Creates sparks on touch and continuously expels a gas of its choice. Automatically extinguishes the user if they catch on fire." + creator_icon = "gaseous" + toggle_button_type = /atom/movable/screen/guardian/toggle_mode/gases + /// Ability we use to select gases + var/datum/action/cooldown/mob_cooldown/expel_gas/gas + /// Rate of temperature stabilization per second. + var/temp_stabilization_rate = 0.1 + +/mob/living/basic/guardian/gaseous/Initialize(mapload, theme) + . = ..() + RegisterSignal(src, COMSIG_ATOM_PRE_PRESSURE_PUSH, PROC_REF(pre_pressure_moved)) + gas = new(src) + gas.owner_has_control = FALSE // It's nicely integrated with the Guardian UI, no need to have two buttons + gas.Grant(src) + +/mob/living/basic/guardian/gaseous/Destroy() + QDEL_NULL(gas) + return ..() + +/mob/living/basic/guardian/gaseous/toggle_modes() + gas.Trigger() + +/mob/living/basic/guardian/gaseous/set_summoner(mob/living/to_who, different_person) + . = ..() + if (QDELETED(src)) + return + RegisterSignal(summoner, COMSIG_LIVING_IGNITED, PROC_REF(on_summoner_ignited)) + RegisterSignal(summoner, COMSIG_LIVING_LIFE, PROC_REF(on_summoner_life)) + +/mob/living/basic/guardian/gaseous/cut_summoner(different_person) + if (!isnull(summoner)) + UnregisterSignal(summoner, list(COMSIG_LIVING_IGNITED, COMSIG_LIVING_LIFE)) + return ..() + +/// Prevent our summoner from being on fire +/mob/living/basic/guardian/gaseous/proc/on_summoner_ignited(mob/living/source) + SIGNAL_HANDLER + source.extinguish_mob() + source.set_fire_stacks(0, remove_wet_stacks = FALSE) + +/// Maintain our summoner at a stable body temperature +/mob/living/basic/guardian/gaseous/proc/on_summoner_life(mob/living/source, seconds_per_tick, times_fired) + SIGNAL_HANDLER + source.adjust_bodytemperature(get_temp_change_amount((summoner.get_body_temp_normal() - summoner.bodytemperature), temp_stabilization_rate * seconds_per_tick)) + +/mob/living/basic/guardian/gaseous/melee_attack(atom/target, list/modifiers, ignore_cooldown) + . = ..() + if(!. || !isliving(target)) + return + do_sparks(1, TRUE, target) + +/mob/living/basic/guardian/gaseous/recall_effects() + . = ..() + if(!isnull(summoner)) + UnregisterSignal(summoner, COMSIG_ATOM_PRE_PRESSURE_PUSH) + +/mob/living/basic/guardian/gaseous/manifest_effects() + . = ..() + if (!isnull(summoner)) + RegisterSignal(summoner, COMSIG_ATOM_PRE_PRESSURE_PUSH, PROC_REF(pre_pressure_moved)) + +/// We stand firm in the face of gas +/mob/living/basic/guardian/gaseous/proc/pre_pressure_moved(datum/source) + SIGNAL_HANDLER + return COMSIG_ATOM_BLOCKS_PRESSURE + + +/// Expel a range of gases +/datum/action/cooldown/mob_cooldown/expel_gas + name = "Release Gas" + desc = "Start or stop expelling a selected gas into the environment." + button_icon = 'icons/mob/actions/actions_spells.dmi' + button_icon_state = "smoke" + cooldown_time = 0 SECONDS // We're here for the interface not the cooldown + melee_cooldown_time = 0 SECONDS + click_to_activate = FALSE + /// Gas being expelled. + var/active_gas = null + /// Associative list of types of gases to moles we create every life tick. + var/static/list/possible_gases = list( + /datum/gas/oxygen = 50, + /datum/gas/nitrogen = 750, //overpressurizing is hard!. + /datum/gas/water_vapor = 1, //you need incredibly little water vapor for the effects to kick in + /datum/gas/nitrous_oxide = 15, + /datum/gas/carbon_dioxide = 50, + /datum/gas/plasma = 3, + /datum/gas/bz = 10, + ) + +/datum/action/cooldown/mob_cooldown/expel_gas/Grant(mob/granted_to) + . = ..() + if (isnull(owner)) + return + RegisterSignal(owner, COMSIG_GUARDIAN_RECALLED, PROC_REF(stop_gas)) + +/datum/action/cooldown/mob_cooldown/expel_gas/Remove(mob/removed_from) + UnregisterSignal(owner, list(COMSIG_GUARDIAN_RECALLED, COMSIG_LIVING_LIFE)) + return ..() + +/datum/action/cooldown/mob_cooldown/expel_gas/Activate(atom/target) + StartCooldown(360 SECONDS) + // Regeneated each time just in case someone fucks with our list + var/list/gas_selection = list("None") + for(var/datum/gas/gas as anything in possible_gases) + gas_selection[initial(gas.name)] = gas + + var/picked_gas = tgui_input_list(owner, "Select a gas to emit.", "Gas Producer", gas_selection) + StartCooldown() + if(picked_gas == "None") + stop_gas() + return + + var/gas_type = gas_selection[picked_gas] + if(isnull(picked_gas) || isnull(gas_type)) + return + + to_chat(owner, span_bolddanger("You start releasing [picked_gas].")) + owner.investigate_log("set their gas type to [picked_gas].", INVESTIGATE_ATMOS) + var/had_gas = !isnull(active_gas) + active_gas = gas_type + if(isnull(owner.particles)) + owner.particles = new /particles/smoke/steam() + owner.particles.position = list(-1, 8, 0) + owner.particles.fadein = 5 + owner.particles.height = 200 + var/datum/gas/chosen_gas = active_gas // Casting it so that we can access gas vars in initial, it's still a typepath + owner.particles.color = initial(chosen_gas.primary_color) + if (!had_gas) + RegisterSignal(owner, COMSIG_LIVING_LIFE, PROC_REF(on_life)) + +/// Turns off the gas +/datum/action/cooldown/mob_cooldown/expel_gas/proc/stop_gas() + SIGNAL_HANDLER + if (!isnull(active_gas)) + to_chat(src, span_notice("You stop releasing gas.")) + active_gas = null + QDEL_NULL(owner.particles) + UnregisterSignal(owner, COMSIG_LIVING_LIFE) + +/// Release gas every life tick while active +/datum/action/cooldown/mob_cooldown/expel_gas/proc/on_life(datum/source, seconds_per_tick, times_fired) + SIGNAL_HANDLER + if (isnull(active_gas)) + return // We shouldn't even be registered at this point but just in case + var/datum/gas_mixture/mix_to_spawn = new() + mix_to_spawn.add_gas(active_gas) + mix_to_spawn.gases[active_gas][MOLES] = possible_gases[active_gas] * seconds_per_tick + mix_to_spawn.temperature = T20C + var/turf/open/our_turf = get_turf(owner) + our_turf.assume_air(mix_to_spawn) diff --git a/code/modules/mob/living/basic/guardian/guardian_types/gravitokinetic.dm b/code/modules/mob/living/basic/guardian/guardian_types/gravitokinetic.dm new file mode 100644 index 00000000000000..1ce50a3e9fa250 --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_types/gravitokinetic.dm @@ -0,0 +1,107 @@ +/// Somewhat durable guardian who can increase gravity in an area +/mob/living/basic/guardian/gravitokinetic + guardian_type = GUARDIAN_GRAVITOKINETIC + melee_damage_lower = 15 + melee_damage_upper = 15 + damage_coeff = list(BRUTE = 0.75, BURN = 0.75, TOX = 0.75, STAMINA = 0, OXY = 0.75) + playstyle_string = span_holoparasite("As a gravitokinetic type, you can right-click to make the gravity on the ground stronger, and punching applies this effect to a target.") + creator_name = "Gravitokinetic" + creator_desc = "Attacks will apply crushing gravity to the target. Can target the ground as well to slow targets advancing on you, but you are not immune to your own such effects." + creator_icon = "gravitokinetic" + /// Targets we have applied our gravity effects on. + var/list/gravity_targets = list() + /// Distance at which our ability works + var/gravity_power_range = 10 + /// Gravity added on punches. + var/punch_gravity = 5 + /// Gravity added to turfs. + var/turf_gravity = 3 + +/mob/living/basic/guardian/gravitokinetic/Initialize(mapload, datum/guardian_fluff/theme) + . = ..() + AddElement(/datum/element/forced_gravity, 1) + + var/static/list/container_connections = list( + COMSIG_MOVABLE_MOVED = PROC_REF(on_moved), + ) + AddComponent(/datum/component/connect_containers, src, container_connections) + RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) + +/mob/living/basic/guardian/gravitokinetic/set_summoner(mob/living/to_who, different_person) + . = ..() + if (!QDELETED(src)) + return + to_who.AddElement(/datum/element/forced_gravity, 1) + +/mob/living/basic/guardian/gravitokinetic/cut_summoner(different_person) + summoner?.RemoveElement(/datum/element/forced_gravity, 1) + return ..() + +/mob/living/basic/guardian/gravitokinetic/death(gibbed) + . = ..() + clear_gravity() + +/mob/living/basic/guardian/gravitokinetic/recall_effects() + . = ..() + if (length(gravity_targets)) + to_chat(src, span_bolddanger("You have released your gravitokinetic powers!")) + clear_gravity() + +/mob/living/basic/guardian/gravitokinetic/melee_attack(atom/target, list/modifiers, ignore_cooldown) + . = ..() + if (!. || !isliving(target) || target == src || target == summoner || shares_summoner(target) || gravity_targets[target]) + return + to_chat(src, span_bolddanger("Your punch has applied heavy gravity to [target]!")) + add_gravity(target, punch_gravity) + to_chat(target, span_userdanger("Everything feels really heavy!")) + return TRUE + +/mob/living/basic/guardian/gravitokinetic/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) + if (LAZYACCESS(modifiers, RIGHT_CLICK) && proximity_flag && !gravity_targets[attack_target] && can_unarmed_attack()) + slam_turf(attack_target) + return + return ..() + +/// Apply forced gravity to the floor +/mob/living/basic/guardian/gravitokinetic/proc/slam_turf(turf/open/slammed) + if (!isopenturf(slammed) || isgroundlessturf(slammed)) + return + visible_message(span_danger("[src] slams their fist into the [slammed]!"), span_notice("You amplify gravity around the [slammed].")) + do_attack_animation(slammed) + add_gravity(slammed, turf_gravity) + +/// Remove our forced gravity from all targets +/mob/living/basic/guardian/gravitokinetic/proc/clear_gravity() + for(var/gravity_target in gravity_targets) + remove_gravity(gravity_target) + +/// Make something heavier +/mob/living/basic/guardian/gravitokinetic/proc/add_gravity(atom/target, new_gravity = 3) + if (gravity_targets[target]) + return + target.AddElement(/datum/element/forced_gravity, new_gravity) + gravity_targets[target] = new_gravity + RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(on_target_moved)) + playsound(src, 'sound/effects/gravhit.ogg', 100, TRUE) + +/// Stop making something heavier +/mob/living/basic/guardian/gravitokinetic/proc/remove_gravity(atom/target, too_far = FALSE) + if (isnull(gravity_targets[target])) + return + if (too_far) + to_chat(src, span_bolddanger("You are too far away from [target] to amplify gravity's hold on them!")) + UnregisterSignal(target, COMSIG_MOVABLE_MOVED) + target.RemoveElement(/datum/element/forced_gravity, gravity_targets[target]) + gravity_targets -= target + +/// When we or something we are inside move check if we are now too far away +/mob/living/basic/guardian/gravitokinetic/proc/on_moved() + for(var/gravity_target in gravity_targets) + if (get_dist(src, gravity_target) > gravity_power_range) + remove_gravity(gravity_target, too_far = TRUE) + +/// When something we put gravity on moves check if it's too far away +/mob/living/basic/guardian/gravitokinetic/proc/on_target_moved(atom/movable/moving_target, old_loc, dir, forced) + SIGNAL_HANDLER + if (get_dist(src, moving_target) > gravity_power_range) + remove_gravity(moving_target, too_far = TRUE) diff --git a/code/modules/mob/living/basic/guardian/guardian_types/lightning.dm b/code/modules/mob/living/basic/guardian/guardian_types/lightning.dm new file mode 100644 index 00000000000000..b2ac9d66e8c234 --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_types/lightning.dm @@ -0,0 +1,94 @@ +/// A reasonably durable guardian linked to you by a chain of lightning, zapping people who get between you +/mob/living/basic/guardian/lightning + guardian_type = GUARDIAN_LIGHTNING + melee_damage_lower = 7 + melee_damage_upper = 7 + attack_verb_continuous = "shocks" + attack_verb_simple = "shock" + melee_damage_type = BURN + attack_sound = 'sound/machines/defib_zap.ogg' + damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, STAMINA = 0, OXY = 0.7) + range = 7 + playstyle_string = span_holoparasite("As a lightning type, you will apply lightning chains to targets on attack and have a lightning chain to your summoner. Lightning chains will shock anyone near them.") + creator_name = "Lightning" + creator_desc = "Attacks apply lightning chains to targets. Has a lightning chain to the user. Lightning chains shock everything near them, doing constant damage." + creator_icon = "lightning" + /// Link between us and our summoner + var/datum/component/summoner_chain + /// Associative list of chained enemies to their chains + var/list/enemy_chains + +/mob/living/basic/guardian/lightning/death(gibbed) + . = ..() + clear_chains() + +/mob/living/basic/guardian/lightning/Destroy() + clear_chains() + return ..() + +/mob/living/basic/guardian/lightning/manifest_effects() + . = ..() + if (isnull(summoner)) + return + summoner_chain = chain_to(summoner, max_range = INFINITY) // Functionally it's actually our leash range but admins might fuck with it + +/mob/living/basic/guardian/lightning/recall_effects() + . = ..() + clear_chains() + +/// Remove all of our chains +/mob/living/basic/guardian/lightning/proc/clear_chains() + QDEL_NULL(summoner_chain) + QDEL_LIST_ASSOC_VAL(enemy_chains) + +/mob/living/basic/guardian/lightning/melee_attack(atom/target, list/modifiers, ignore_cooldown) + . = ..() + if (!. || !validate_target(target) || (target in enemy_chains)) + return + if (length(enemy_chains) == 2) + var/old_target = enemy_chains[1] + var/datum/old_chain = enemy_chains[old_target] + qdel(old_chain) + var/datum/new_chain = chain_to(target) + RegisterSignal(new_chain, COMSIG_QDELETING, PROC_REF(on_chain_deleted)) + LAZYADDASSOC(enemy_chains, target, new_chain) + +/// Create a damaging lightning chain between ourselves and a target +/mob/living/basic/guardian/lightning/proc/chain_to(atom/target, max_range = 7) + var/datum/component/chain = AddComponent(\ + /datum/component/damage_chain, \ + linked_to = target, \ + max_distance = max_range, \ + beam_state = "lightning[rand(1,12)]", \ + beam_type = /obj/effect/ebeam/chain, \ + validate_target = CALLBACK(src, PROC_REF(validate_target)), \ + chain_damage_feedback = CALLBACK(src, PROC_REF(on_chain_zap)), \ + ) + return chain + +/// Handle losing our reference when we delete a chain +/mob/living/basic/guardian/lightning/proc/on_chain_deleted(datum/source) + SIGNAL_HANDLER + for (var/target in enemy_chains) + if (enemy_chains[target] != source) + continue + enemy_chains -= target + return + +/// Confirm whether something is valid to zap with lightning +/mob/living/basic/guardian/lightning/proc/validate_target(atom/target) + return isliving(target) && target != src && target != summoner && !shares_summoner(target) + +/// Called every few zaps by a chain +/mob/living/basic/guardian/lightning/proc/on_chain_zap(mob/living/target) + target.electrocute_act(shock_damage = 0, source = "lightning chain") + target.visible_message( + span_danger("[target] was shocked by the lightning chain!"), + span_userdanger("You are shocked by the lightning chain!"), + span_hear("You hear a heavy electrical crack."), + ) + +/// Beam definition for our lightning chain +/obj/effect/ebeam/chain + name = "lightning chain" + layer = LYING_MOB_LAYER diff --git a/code/modules/mob/living/basic/guardian/guardian_types/protector.dm b/code/modules/mob/living/basic/guardian/guardian_types/protector.dm new file mode 100644 index 00000000000000..27ec9cace810b3 --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_types/protector.dm @@ -0,0 +1,122 @@ +/// Very durable, and reverses the usual leash dynamic. Can slow down to become extremely durable. +/mob/living/basic/guardian/protector + guardian_type = GUARDIAN_PROTECTOR + melee_damage_lower = 15 + melee_damage_upper = 15 + range = 5 // You want this to be low so you can drag them around + damage_coeff = list(BRUTE = 0.4, BURN = 0.4, TOX = 0.4, STAMINA = 0, OXY = 0.4) + playstyle_string = span_holoparasite("As a protector type you cause your summoner to leash to you instead of you leashing to them and have two modes; Combat Mode, where you do and take medium damage, and Protection Mode, where you do and take almost no damage, but move slightly slower.") + creator_name = "Protector" + creator_desc = "Causes you to teleport to it when out of range, unlike other parasites. Has two modes; Combat, where it does and takes medium damage, and Protection, where it does and takes almost no damage but moves slightly slower." + creator_icon = "protector" + toggle_button_type = /atom/movable/screen/guardian/toggle_mode + /// Action which toggles our shield + var/datum/action/cooldown/mob_cooldown/protector_shield/shield + +/mob/living/basic/guardian/protector/Initialize(mapload, datum/guardian_fluff/theme) + . = ..() + shield = new(src) + shield.owner_has_control = FALSE // Hide it from the user, it's integrated with guardian UI + shield.Grant(src) + +/mob/living/basic/guardian/protector/Destroy() + QDEL_NULL(shield) + return ..() + +// Invert the order +/mob/living/basic/guardian/protector/leash_to(atom/movable/leashed, atom/movable/leashed_to) + return ..(leashed_to, leashed) + +/mob/living/basic/guardian/protector/unleash() + qdel(summoner?.GetComponent(/datum/component/leash)) + +/mob/living/basic/guardian/protector/toggle_modes() + shield.Trigger() + +/mob/living/basic/guardian/protector/ex_act(severity) + if(severity >= EXPLODE_DEVASTATE) + adjustBruteLoss(400) //if in protector mode, will do 20 damage and not actually necessarily kill the summoner + return TRUE + return ..() + +/// Toggle a status effect which makes you slow but defensive +/datum/action/cooldown/mob_cooldown/protector_shield + name = "Protection Mode" + desc = "Enter a defensive stance which slows you down and reduces your damage, but makes you almost invincible." + button_icon = 'icons/effects/effects.dmi' + button_icon_state = "shield-old" + background_icon = 'icons/hud/guardian.dmi' + background_icon_state = "base" + cooldown_time = 1 SECONDS + click_to_activate = FALSE + +/datum/action/cooldown/mob_cooldown/protector_shield/Activate(mob/living/target) + if (!isliving(target)) + return FALSE + if (target.has_status_effect(/datum/status_effect/protector_shield)) + target.remove_status_effect(/datum/status_effect/protector_shield) + return + target.apply_status_effect(/datum/status_effect/protector_shield) + StartCooldown() + return TRUE + +/// Makes the guardian even more durable, but slower +/datum/status_effect/protector_shield + id = "guardian_shield" + alert_type = null + /// Damage removed in protecting mode. + var/damage_penalty = 13 + /// Colour for our various overlays. + var/overlay_colour = COLOR_TEAL + /// Overlay for our protection shield. + var/mutable_appearance/shield_overlay + /// Damage coefficients when shielded + var/list/shielded_damage = list(BRUTE = 0.05, BURN = 0.05, TOX = 0.05, STAMINA = 0, OXY = 0.05) + +/datum/status_effect/protector_shield/on_apply() + if (isguardian(owner)) + var/mob/living/basic/guardian/guardian_owner = owner + overlay_colour = guardian_owner.guardian_colour + shield_overlay = mutable_appearance('icons/effects/effects.dmi', "shield-grey") + shield_overlay.color = overlay_colour + + owner.melee_damage_lower -= damage_penalty + owner.melee_damage_upper -= damage_penalty + owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/guardian_shield) + + if (isbasicmob(owner)) // Better hope you are or this status is doing basically nothing useful for you + var/mob/living/basic/basic_owner = owner + basic_owner.damage_coeff = shielded_damage + + to_chat(owner, span_bolddanger("You enter protection mode.")) + RegisterSignal(owner, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_update_overlays)) + RegisterSignals(owner, COMSIG_LIVING_ADJUST_STANDARD_DAMAGE_TYPES, PROC_REF(on_health_changed)) + owner.update_appearance(UPDATE_ICON) + return TRUE + +/datum/status_effect/protector_shield/on_remove() + owner.melee_damage_lower += damage_penalty + owner.melee_damage_upper += damage_penalty + owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/guardian_shield) + + if (isbasicmob(owner)) + var/mob/living/basic/basic_owner = owner + basic_owner.damage_coeff = initial(basic_owner.damage_coeff) + + to_chat(owner, span_bolddanger("You return to your normal mode.")) + UnregisterSignal(owner, list(COMSIG_ATOM_UPDATE_OVERLAYS) + COMSIG_LIVING_ADJUST_STANDARD_DAMAGE_TYPES) + owner.update_appearance(UPDATE_ICON) + +/// Show an extra overlay when we're in shield mode +/datum/status_effect/protector_shield/proc/on_update_overlays(atom/source, list/overlays) + SIGNAL_HANDLER + overlays += shield_overlay + +/// Flash an animation when someone tries to hurt us +/datum/status_effect/protector_shield/proc/on_health_changed(mob/living/our_mob, type, amount, forced) + SIGNAL_HANDLER + if (amount <= 0 && !QDELETED(our_mob)) + return + var/image/flash_overlay = new('icons/effects/effects.dmi', owner, "shield-flash", dir = pick(GLOB.cardinals)) + flash_overlay.color = overlay_colour + owner.flick_overlay_view(flash_overlay, 0.5 SECONDS) diff --git a/code/modules/mob/living/basic/guardian/guardian_types/ranged.dm b/code/modules/mob/living/basic/guardian/guardian_types/ranged.dm new file mode 100644 index 00000000000000..6752c52a5af7d8 --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_types/ranged.dm @@ -0,0 +1,216 @@ +/// A ranged guardian can fling shards of glass at people very very quickly. It can also enter a long-range scouting mode. +/mob/living/basic/guardian/ranged + guardian_type = GUARDIAN_RANGED + combat_mode = FALSE + friendly_verb_continuous = "quietly assesses" + friendly_verb_simple = "quietly assess" + melee_damage_lower = 10 + melee_damage_upper = 10 + damage_coeff = list(BRUTE = 0.9, BURN = 0.9, TOX = 0.9, STAMINA = 0, OXY = 0.9) + range = 13 + playstyle_string = span_holoparasite("As a ranged type, you have only light damage resistance, but are capable of spraying shards of crystal at incredibly high speed. You can also deploy surveillance snares to monitor enemy movement. Finally, you can switch to scout mode, in which you can't attack, but can move without limit.") + creator_name = "Ranged" + creator_desc = "Has two modes. Ranged; which fires a constant stream of weak, armor-ignoring projectiles. Scout; where it cannot attack, but can move through walls and is quite hard to see. Can lay surveillance snares, which alert it when crossed, in either mode." + creator_icon = "ranged" + see_invisible = SEE_INVISIBLE_LIVING + toggle_button_type = /atom/movable/screen/guardian/toggle_mode + +/mob/living/basic/guardian/ranged/Initialize(mapload, datum/guardian_fluff/theme) + . = ..() + AddComponent(\ + /datum/component/ranged_attacks,\ + projectile_type = /obj/projectile/guardian,\ + projectile_sound = 'sound/effects/hit_on_shattered_glass.ogg',\ + cooldown_time = 0.1 SECONDS, \ + ) + AddComponent(/datum/component/ranged_mob_full_auto, autofire_shot_delay = 0.1 SECONDS) + var/datum/action/cooldown/mob_cooldown/guardian_alarm_snare/snare = new (src) + snare.Grant(src) + +/mob/living/basic/guardian/ranged/toggle_modes() + if(is_deployed() && !isnull(summoner)) + balloon_alert(src, "must not be manifested!") + return + if (has_status_effect(/datum/status_effect/guardian_scout_mode)) + remove_status_effect(/datum/status_effect/guardian_scout_mode) + return + apply_status_effect(/datum/status_effect/guardian_scout_mode) + +/mob/living/basic/guardian/ranged/toggle_light() + var/msg + switch(lighting_cutoff) + if (LIGHTING_CUTOFF_VISIBLE) + lighting_cutoff_red = 10 + lighting_cutoff_green = 10 + lighting_cutoff_blue = 15 + msg = "You activate your night vision." + if (LIGHTING_CUTOFF_MEDIUM) + lighting_cutoff_red = 25 + lighting_cutoff_green = 25 + lighting_cutoff_blue = 35 + msg = "You increase your night vision." + if (LIGHTING_CUTOFF_HIGH) + lighting_cutoff_red = 35 + lighting_cutoff_green = 35 + lighting_cutoff_blue = 50 + msg = "You maximize your night vision." + else + lighting_cutoff_red = 0 + lighting_cutoff_green = 0 + lighting_cutoff_blue = 0 + msg = "You deactivate your night vision." + sync_lighting_plane_cutoff() + to_chat(src, span_notice(msg)) + +/// Become an incorporeal scout +/datum/status_effect/guardian_scout_mode + id = "guardian_scout" + alert_type = null + +/datum/status_effect/guardian_scout_mode/on_apply() + animate(owner, alpha = 45, time = 0.5 SECONDS) + RegisterSignal(owner, COMSIG_GUARDIAN_MANIFESTED, PROC_REF(on_manifest)) + RegisterSignal(owner, COMSIG_GUARDIAN_RECALLED, PROC_REF(on_recall)) + RegisterSignal(owner, COMSIG_MOB_CLICKON, PROC_REF(on_click)) + RegisterSignal(owner, COMSIG_BASICMOB_PRE_ATTACK_RANGED, PROC_REF(on_ranged_attack)) + + var/mob/living/basic/guardian/guardian_mob = owner + guardian_mob.unleash() + to_chat(owner, span_bolddanger("You enter scouting mode.")) + return TRUE + +/datum/status_effect/guardian_scout_mode/on_remove() + animate(owner, alpha = initial(owner.alpha), time = 0.5 SECONDS) + UnregisterSignal(owner, list( + COMSIG_BASICMOB_PRE_ATTACK_RANGED, + COMSIG_GUARDIAN_MANIFESTED, + COMSIG_GUARDIAN_RECALLED, + COMSIG_MOB_CLICKON, + )) + to_chat(owner, span_bolddanger("You return to your normal mode.")) + var/mob/living/basic/guardian/guardian_mob = owner + guardian_mob.leash_to(owner, guardian_mob.summoner) + +/// Restore incorporeal move when we become corporeal, yes I know that suonds silly +/datum/status_effect/guardian_scout_mode/proc/on_manifest() + SIGNAL_HANDLER + owner.incorporeal_move = INCORPOREAL_MOVE_BASIC + +/// Stop having incorporeal move when we recall so that we can't move +/datum/status_effect/guardian_scout_mode/proc/on_recall() + SIGNAL_HANDLER + owner.incorporeal_move = FALSE + +/// While this is active we can't click anything +/datum/status_effect/guardian_scout_mode/proc/on_click() + SIGNAL_HANDLER + return COMSIG_MOB_CANCEL_CLICKON + +/// We can't do any ranged attacks while in scout mode. +/datum/status_effect/guardian_scout_mode/proc/on_ranged_attack() + SIGNAL_HANDLER + owner.balloon_alert(owner, "need to be in ranged mode!") + return COMPONENT_CANCEL_RANGED_ATTACK + +/// Place an invisible trap which alerts the guardian when it is crossed +/datum/action/cooldown/mob_cooldown/guardian_alarm_snare + name = "Surveillance Snare" + desc = "Place an invisible snare which will alert you when it is crossed." + button_icon = 'icons/mob/actions/actions_ecult.dmi' + button_icon_state = "eye" + background_icon = 'icons/hud/guardian.dmi' + background_icon_state = "base" + cooldown_time = 2 SECONDS + melee_cooldown_time = 0 + click_to_activate = FALSE + /// How many snares can we have? + var/maximum_snares = 5 + /// What snares have we already placed? + var/list/placed_snares = list() + +/datum/action/cooldown/mob_cooldown/guardian_alarm_snare/Activate(atom/target) + StartCooldown(360 SECONDS) + + if (length(placed_snares) >= maximum_snares) + var/picked_snare = tgui_input_list(owner, "Choose a snare to replace.", "Remove Snare", sort_names(placed_snares)) + if(isnull(picked_snare)) + return FALSE + qdel(picked_snare) + if (length(placed_snares) >= maximum_snares) + StartCooldown(0) + return FALSE + + owner.balloon_alert(owner, "snare deployed") // We need feedback because they are invisible + var/turf/snare_loc = get_turf(owner) + var/obj/effect/abstract/surveillance_snare/new_snare = new(snare_loc, owner) + new_snare.assign_owner(owner) + RegisterSignal(new_snare, COMSIG_QDELETING, PROC_REF(on_snare_deleted)) + placed_snares += new_snare + + StartCooldown() + return TRUE + +/// When a snare is deleted remove it from tracking +/datum/action/cooldown/mob_cooldown/guardian_alarm_snare/proc/on_snare_deleted(atom/snare) + SIGNAL_HANDLER + placed_snares -= snare + + +/// An invisible marker placed by a ranged guardian, alerts the owner when crossed +/obj/effect/abstract/surveillance_snare + name = "surveillance snare" + desc = "This thing is invisible, how are you examining it?" + invisibility = INVISIBILITY_ABSTRACT + /// Who do we notify when someone steps on us? + var/mob/living/owner + +/obj/effect/abstract/surveillance_snare/Initialize(mapload, spawning_guardian) + . = ..() + name = "[get_area(src)] snare ([rand(1, 1000)])" + var/static/list/loc_connections = list(COMSIG_ATOM_ENTERED = PROC_REF(on_entered)) + AddElement(/datum/element/connect_loc, loc_connections) + +/// Set up crossed notification +/obj/effect/abstract/surveillance_snare/proc/assign_owner(mob/living/new_owner) + if (isnull(new_owner)) + qdel(src) + return + owner = new_owner + RegisterSignal(owner, COMSIG_QDELETING, PROC_REF(owner_destroyed)) + +/// When crossed notify our owner +/obj/effect/abstract/surveillance_snare/proc/on_entered(atom/source, crossed_object) + SIGNAL_HANDLER + if (isnull(owner)) + qdel(src) + return + if (!isliving(crossed_object) || crossed_object == owner) + return + var/mob/living/basic/guardian/guardian_owner = owner + if (isguardian(owner) && crossed_object == guardian_owner.summoner || guardian_owner.shares_summoner(crossed_object)) + return + + var/send_message = span_bolddanger("[crossed_object] has crossed [name].") + if (!isguardian(owner) || isnull(guardian_owner.summoner)) + to_chat(owner, send_message) + return + + to_chat(guardian_owner.summoner, send_message) + var/list/guardians = guardian_owner.summoner.get_all_linked_holoparasites() + for(var/guardian in guardians) + to_chat(guardian, send_message) + +/// If the person who placed us doesn't exist we might as well die +/obj/effect/abstract/surveillance_snare/proc/owner_destroyed() + SIGNAL_HANDLER + owner = null + qdel(src) + + +/// The glass shards we throw as a guardian. They have low damage because you can fire them very very quickly. +/obj/projectile/guardian + name = "crystal spray" + icon_state = "guardian" + damage = 5 + damage_type = BRUTE + armour_penetration = 100 diff --git a/code/modules/mob/living/basic/guardian/guardian_types/standard.dm b/code/modules/mob/living/basic/guardian/guardian_types/standard.dm new file mode 100644 index 00000000000000..c9a4a6fcdffbec --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_types/standard.dm @@ -0,0 +1,63 @@ +/// Plain, but durable and strong. Can destroy walls. +/mob/living/basic/guardian/standard + guardian_type = GUARDIAN_STANDARD + damage_coeff = list(BRUTE = 0.5, BURN = 0.5, TOX = 0.5, STAMINA = 0, OXY = 0.5) + melee_damage_lower = 20 + melee_damage_upper = 20 + melee_attack_cooldown = 0.6 SECONDS + wound_bonus = -5 //you can wound! + obj_damage = 80 + environment_smash = ENVIRONMENT_SMASH_WALLS + playstyle_string = span_holoparasite("As a standard type you have no special abilities, but have a high damage resistance and a powerful attack capable of smashing through walls.") + creator_name = "Standard" + creator_desc = "Devastating close combat attacks and high damage resistance. Can smash through weak walls." + creator_icon = "standard" + /// The text we shout when attacking. + var/battlecry = "AT" + +/mob/living/basic/guardian/standard/Initialize(mapload, datum/guardian_fluff/theme) + . = ..() + AddElement(/datum/element/wall_tearer, allow_reinforced = FALSE, tear_time = 1.5 SECONDS) + var/datum/action/select_guardian_battlecry/cry = new(src) + cry.Grant(src) + +/mob/living/basic/guardian/standard/do_attack_animation(atom/attacked_atom, visual_effect_icon, used_item, no_effect) + . = ..() + if (!isliving(attacked_atom) || !isclosedturf(attacked_atom)) + return + var/msg = "" + for(var/i in 1 to 9) + msg += battlecry + say("[msg]!!", ignore_spam = TRUE) + for(var/sounds in 1 to 4) + addtimer(CALLBACK(src, PROC_REF(do_attack_sound), attacked_atom.loc), sounds DECISECONDS, TIMER_DELETE_ME) + +/// Echo our punching sounds +/mob/living/basic/guardian/standard/proc/do_attack_sound(atom/playing_from) + playsound(playing_from, attack_sound, 50, TRUE, TRUE) + +/// Action to change our battlecry +/datum/action/select_guardian_battlecry + name = "Select Battlecry" + desc = "Update the really cool thing you shout whenever you attack." + button_icon = 'icons/obj/clothing/gloves.dmi' + button_icon_state = "boxing" + background_icon = 'icons/hud/guardian.dmi' + background_icon_state = "base" + /// How long can it be? Shouldn't be too long because we repeat this a shitload of times + var/max_length = 6 + +/datum/action/select_guardian_battlecry/IsAvailable(feedback) + if (!istype(owner, /mob/living/basic/guardian/standard)) + return FALSE + return ..() + +/datum/action/select_guardian_battlecry/Trigger(trigger_flags) + . = ..() + if (!.) + return + var/mob/living/basic/guardian/standard/stand = owner + var/input = tgui_input_text(owner, "What do you want your battlecry to be?", "Battle Cry", max_length = max_length) + if(!input) + return + stand.battlecry = input diff --git a/code/modules/mob/living/basic/guardian/guardian_types/support.dm b/code/modules/mob/living/basic/guardian/guardian_types/support.dm new file mode 100644 index 00000000000000..3b5574db7f37ae --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_types/support.dm @@ -0,0 +1,164 @@ +/// Quick-moving mob which can teleport things to a beacon and heal its allies +/mob/living/basic/guardian/support + guardian_type = GUARDIAN_SUPPORT + speed = 0 + damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, STAMINA = 0, OXY = 0.7) + melee_damage_lower = 15 + melee_damage_upper = 15 + playstyle_string = span_holoparasite("As a support type, you may right-click to heal targets. In addition, alt-clicking on an adjacent object or mob will warp them to your bluespace beacon after a short delay.") + creator_name = "Support" + creator_desc = "Does medium damage, but can heal its targets and create beacons to teleport people and things to." + creator_icon = "support" + /// Amount of each damage type to heal per hit + var/healing_amount = 5 + +/mob/living/basic/guardian/support/Initialize(mapload, datum/guardian_fluff/theme) + . = ..() + AddComponent(\ + /datum/component/healing_touch,\ + heal_brute = healing_amount,\ + heal_burn = healing_amount,\ + heal_tox = healing_amount,\ + heal_oxy = healing_amount,\ + heal_time = 0,\ + action_text = "",\ + complete_text = "",\ + required_modifier = RIGHT_CLICK,\ + after_healed = CALLBACK(src, PROC_REF(after_healed)),\ + ) + + var/datum/atom_hud/medsensor = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] + medsensor.show_to(src) + + var/datum/action/cooldown/mob_cooldown/guardian_bluespace_beacon/teleport = new(src) + teleport.Grant(src) + +/mob/living/basic/guardian/support/set_guardian_colour(colour) + . = ..() + AddComponent(/datum/component/healing_touch, heal_color = guardian_colour) + +/// Called after we heal someone, show some visuals +/mob/living/basic/guardian/support/proc/after_healed(mob/living/healed) + do_attack_animation(healed, ATTACK_EFFECT_PUNCH) + healed.visible_message( + message = span_notice("[src] heals [healed]!"), + self_message = span_userdanger("[src] heals you!"), + vision_distance = COMBAT_MESSAGE_RANGE, + ignored_mobs = src, + ) + to_chat(src, span_notice("You heal [healed]!")) + playsound(healed, attack_sound, 50, TRUE, TRUE, frequency = -1) // play punch sound in REVERSE + + +/// Place a beacon and then listen for clicks to teleport people to it +/datum/action/cooldown/mob_cooldown/guardian_bluespace_beacon + name = "Place Bluespace Beacon" + desc = "Mark the ground under your feet as a teleportation point. Alt-click things to teleport them to your beacon." + button_icon = 'icons/effects/effects.dmi' + button_icon_state = "the_freezer" + background_icon = 'icons/hud/guardian.dmi' + background_icon_state = "base" + cooldown_time = 5 MINUTES + melee_cooldown_time = 0 + cooldown_rounding = 1 + click_to_activate = FALSE + /// Our teleportation beacon. + var/obj/structure/guardian_beacon/beacon + /// Time it takes to teleport something. + var/teleport_time = 6 SECONDS + +/datum/action/cooldown/mob_cooldown/guardian_bluespace_beacon/Grant(mob/granted_to) + . = ..() + RegisterSignal(owner, COMSIG_MOB_ALTCLICKON, PROC_REF(try_teleporting)) + +/datum/action/cooldown/mob_cooldown/guardian_bluespace_beacon/Remove(mob/removed_from) + UnregisterSignal(owner, COMSIG_MOB_ALTCLICKON) + return ..() + +/datum/action/cooldown/mob_cooldown/guardian_bluespace_beacon/Activate(atom/movable/target) + var/turf/beacon_loc = owner.loc + if(!isfloorturf(beacon_loc)) + owner.balloon_alert(owner, "no room!") + return FALSE + + if (!isnull(beacon)) + beacon.visible_message("[beacon] vanishes!") + new /obj/effect/temp_visual/guardian/phase/out(beacon.loc) + qdel(beacon) + + beacon = new(beacon_loc, src) + if (isguardian(owner)) + var/mob/living/basic/guardian/guardian_owner = owner + beacon.add_atom_colour(guardian_owner.guardian_colour, FIXED_COLOUR_PRIORITY) + RegisterSignal(beacon, COMSIG_QDELETING, PROC_REF(on_beacon_deleted)) + to_chat(src, span_bolddanger("Beacon placed! You may now warp targets and objects to it, including your user, via Alt+Click.")) + StartCooldown() + return TRUE + +/// Don't hold a reference to a deleted beacon +/datum/action/cooldown/mob_cooldown/guardian_bluespace_beacon/proc/on_beacon_deleted() + SIGNAL_HANDLER + beacon = null + +/// Try and teleport something to our beacon +/datum/action/cooldown/mob_cooldown/guardian_bluespace_beacon/proc/try_teleporting(mob/living/source, atom/target) + SIGNAL_HANDLER + if (!can_teleport(source, target)) + return + INVOKE_ASYNC(src, PROC_REF(perform_teleport), source, target) + return COMPONENT_CANCEL_ATTACK_CHAIN + +/// Validate whether we can teleport this object +/datum/action/cooldown/mob_cooldown/guardian_bluespace_beacon/proc/can_teleport(mob/living/source, atom/movable/target) + if (isnull(beacon)) + source.balloon_alert(source, "no beacon!") + return FALSE + if (isguardian(source)) + var/mob/living/basic/guardian/guardian_mob = source + if (!guardian_mob.is_deployed()) + source.balloon_alert(source, "manifest yourself!") + return FALSE + if (!source.Adjacent(target)) + target.balloon_alert(source, "too far!") + return FALSE + if (target.anchored) + target.balloon_alert(source, "it won't budge!") + return FALSE + if(beacon.z != target.z) + target.balloon_alert(source, "too far from beacon!") + return FALSE + return TRUE + +/// Start teleporting +/datum/action/cooldown/mob_cooldown/guardian_bluespace_beacon/proc/perform_teleport(mob/living/source, atom/target) + source.do_attack_animation(target) + playsound(target, 'sound/weapons/punch1.ogg', 50, TRUE, TRUE, frequency = -1) + source.balloon_alert(source, "teleporting...") + target.visible_message( + span_danger("[target] starts to glow faintly!"), \ + span_userdanger("You start to faintly glow, and you feel strangely weightless!")) + if(!do_after(source, teleport_time, target)) + return + new /obj/effect/temp_visual/guardian/phase/out(target.loc) + if(isliving(target)) + var/mob/living/living_target = target + living_target.flash_act() + target.visible_message( + span_danger("[target] disappears in a flash of light!"), \ + span_userdanger("Your vision is obscured by a flash of light!"), \ + ) + do_teleport(target, beacon, precision = 0, channel = TELEPORT_CHANNEL_BLUESPACE) + new /obj/effect/temp_visual/guardian/phase(get_turf(target)) + + +/// Structure which acts as the landing point for a support guardian's teleportation effects +/obj/structure/guardian_beacon + name = "guardian beacon" + icon = 'icons/turf/floors.dmi' + desc = "A glowing zone which acts as a beacon for teleportation." + icon_state = "light_on-8" + light_range = MINIMUM_USEFUL_LIGHT_RANGE + density = FALSE + anchored = TRUE + plane = FLOOR_PLANE + layer = ABOVE_OPEN_TURF_LAYER diff --git a/code/modules/mob/living/basic/guardian/guardian_verbs.dm b/code/modules/mob/living/basic/guardian/guardian_verbs.dm new file mode 100644 index 00000000000000..2f40da369f82ad --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_verbs.dm @@ -0,0 +1,190 @@ +/// Pop out into the realm of the living. +/mob/living/basic/guardian/proc/manifest(forced) + if (is_deployed() || isnull(summoner) || isnull(summoner.loc) || istype(summoner.loc, /obj/effect) || (!COOLDOWN_FINISHED(src, manifest_cooldown) && !forced) || locked) + return FALSE + forceMove(summoner.loc) + new /obj/effect/temp_visual/guardian/phase(loc) + COOLDOWN_START(src, manifest_cooldown, 1 SECONDS) + reset_perspective() + manifest_effects() + return TRUE + +/// Go and hide inside your boss. +/mob/living/basic/guardian/proc/recall(forced) + if (!is_deployed() || isnull(summoner) || (!COOLDOWN_FINISHED(src, manifest_cooldown) && !forced) || locked) + return FALSE + new /obj/effect/temp_visual/guardian/phase/out(loc) + recall_effects() + forceMove(summoner) + COOLDOWN_START(src, manifest_cooldown, 1 SECONDS) + return TRUE + +/// Do something when we appear. +/mob/living/basic/guardian/proc/manifest_effects() + SHOULD_CALL_PARENT(TRUE) + SEND_SIGNAL(src, COMSIG_GUARDIAN_MANIFESTED) + +/// Do something when we vanish. +/mob/living/basic/guardian/proc/recall_effects() + SHOULD_CALL_PARENT(TRUE) + SEND_SIGNAL(src, COMSIG_GUARDIAN_RECALLED) + +/// Swap to a different mode... if we have one +/mob/living/basic/guardian/proc/toggle_modes() + to_chat(src, span_bolddanger("You don't have another mode!")) + + +/// Turn an internal light on or off. +/mob/living/basic/guardian/proc/toggle_light() + if (!light_on) + to_chat(src, span_notice("You activate your light.")) + set_light_on(TRUE) + else + to_chat(src, span_notice("You deactivate your light.")) + set_light_on(FALSE) + + +/// Prints what type of guardian we are and what we can do. +/mob/living/basic/guardian/verb/check_type() + set name = "Check Guardian Type" + set category = "Guardian" + set desc = "Check what type you are." + to_chat(src, playstyle_string) + + +/// Speak with our boss at a distance +/mob/living/basic/guardian/proc/communicate() + if (isnull(summoner)) + return + var/sender_key = key + var/input = tgui_input_text(src, "Enter a message to tell your summoner", "Guardian") + if (sender_key != key || !input) //guardian got reset, or did not enter anything + return + + var/preliminary_message = span_boldholoparasite("[input]") //apply basic color/bolding + var/my_message = "[span_bolditalic(src.name)]: [preliminary_message]" //add source, color source with the guardian's color + + to_chat(summoner, "[my_message]") + var/list/guardians = summoner.get_all_linked_holoparasites() + for(var/guardian in guardians) + to_chat(guardian, "[my_message]") + for(var/dead_mob in GLOB.dead_mob_list) + var/link = FOLLOW_LINK(dead_mob, src) + to_chat(dead_mob, "[link] [my_message]") + + src.log_talk(input, LOG_SAY, tag="guardian") + + +/// Speak with your guardian(s) at a distance. +/datum/action/cooldown/mob_cooldown/guardian_comms + name = "Guardian Communication" + desc = "Communicate telepathically with your guardian." + button_icon = 'icons/hud/guardian.dmi' + button_icon_state = "communicate" + background_icon = 'icons/hud/guardian.dmi' + background_icon_state = "base" + check_flags = NONE + click_to_activate = FALSE + cooldown_time = 0 SECONDS + melee_cooldown_time = 0 + shared_cooldown = NONE + +/datum/action/cooldown/mob_cooldown/guardian_comms/Activate(atom/target) + StartCooldown(360 SECONDS) + var/input = tgui_input_text(owner, "Enter a message to tell your guardian", "Message") + StartCooldown() + if (!input) + return FALSE + + var/preliminary_message = span_boldholoparasite("[input]") //apply basic color/bolding + var/my_message = span_boldholoparasite("[owner]: [preliminary_message]") //add source, color source with default grey... + + to_chat(owner, "[my_message]") + var/mob/living/living_owner = owner + var/list/guardians = living_owner.get_all_linked_holoparasites() + for(var/mob/living/basic/guardian/guardian as anything in guardians) + to_chat(guardian, "[span_bolditalic(owner.real_name)]: [preliminary_message]" ) + for(var/dead_mob in GLOB.dead_mob_list) + var/link = FOLLOW_LINK(dead_mob, owner) + to_chat(dead_mob, "[link] [my_message]") + owner.log_talk(input, LOG_SAY, tag="guardian") + + return TRUE + + +/// Tell your slacking or distracted guardian to come home. +/datum/action/cooldown/mob_cooldown/recall_guardian + name = "Recall Guardian" + desc = "Forcibly recall your guardian." + button_icon = 'icons/hud/guardian.dmi' + button_icon_state = "recall" + background_icon = 'icons/hud/guardian.dmi' + background_icon_state = "base" + check_flags = NONE + click_to_activate = FALSE + cooldown_time = 0 SECONDS + melee_cooldown_time = 0 + shared_cooldown = NONE + +/datum/action/cooldown/mob_cooldown/recall_guardian/Activate(atom/target) + var/mob/living/living_owner = owner + var/list/guardians = living_owner.get_all_linked_holoparasites() + for(var/mob/living/basic/guardian/guardian in guardians) + guardian.recall() + StartCooldown() + return TRUE + +/// Replace an annoying griefer you were paired up to with a different but probably no less annoying player. +/datum/action/cooldown/mob_cooldown/replace_guardian + name = "Reset Guardian Consciousness" + desc = "Replaces the mind of your guardian with that of a different ghost." + button_icon = 'icons/mob/simple/mob.dmi' + button_icon_state = "ghost" + background_icon = 'icons/hud/guardian.dmi' + background_icon_state = "base" + check_flags = NONE + click_to_activate = FALSE + cooldown_time = 5 SECONDS + melee_cooldown_time = 0 + shared_cooldown = NONE + +/datum/action/cooldown/mob_cooldown/replace_guardian/Activate(atom/target) + StartCooldown(5 MINUTES) + + var/mob/living/living_owner = owner + var/list/guardians = living_owner.get_all_linked_holoparasites() + for(var/mob/living/basic/guardian/resetting_guardian as anything in guardians) + if (!COOLDOWN_FINISHED(resetting_guardian, resetting_cooldown)) + guardians -= resetting_guardian //clear out guardians that are already reset + + if (!length(guardians)) + to_chat(owner, span_holoparasite("You cannot reset [length(guardians) > 1 ? "any of your guardians":"your guardian"] yet.")) + StartCooldown() + return FALSE + + var/mob/living/basic/guardian/chosen_guardian = tgui_input_list(owner, "Pick the guardian you wish to reset", "Guardian Reset", sort_names(guardians)) + if (isnull(chosen_guardian)) + to_chat(owner, span_holoparasite("You decide not to reset [length(guardians) > 1 ? "any of your guardians":"your guardian"].")) + StartCooldown() + 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 = SSpolling.poll_ghost_candidates("Do you want to play as [owner.real_name]'s [chosen_guardian.theme.name]?", check_jobban = ROLE_PAI, poll_time = 10 SECONDS, pic_source = chosen_guardian, 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... \ + Looks like you're stuck with it for now.")) + StartCooldown() + return FALSE + + var/mob/dead/observer/candidate = pick(ghost_candidates) + to_chat(chosen_guardian, span_holoparasite("Your user reset you, and your body was taken over by a ghost. Looks like they weren't happy with your performance.")) + to_chat(owner, span_boldholoparasite("The personality of [chosen_guardian.theme.name] has been successfully reset.")) + message_admins("[key_name_admin(candidate)] has taken control of ([ADMIN_LOOKUPFLW(chosen_guardian)])") + chosen_guardian.ghostize(FALSE) + chosen_guardian.key = candidate.key + COOLDOWN_START(chosen_guardian, resetting_cooldown, 5 MINUTES) + chosen_guardian.guardian_rename() //give it a new color and name, to show it's a new person + chosen_guardian.guardian_recolour() + StartCooldown() + return TRUE diff --git a/code/modules/mob/living/basic/health_adjustment.dm b/code/modules/mob/living/basic/health_adjustment.dm index 9644a1a6299057..6e5f4cc95af6c6 100644 --- a/code/modules/mob/living/basic/health_adjustment.dm +++ b/code/modules/mob/living/basic/health_adjustment.dm @@ -17,6 +17,12 @@ updatehealth() return . - bruteloss +/mob/living/basic/get_damage_mod(damage_type) + var/modifier = ..() + if (damage_type in damage_coeff) + return modifier * damage_coeff[damage_type] + return modifier + /mob/living/basic/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE, required_bodytype) if(!can_adjust_brute_loss(amount, forced, required_bodytype)) return 0 @@ -49,14 +55,6 @@ else if(damage_coeff[TOX]) . = adjust_health(amount * damage_coeff[TOX] * CONFIG_GET(number/damage_multiplier), updating_health, forced) -/mob/living/basic/adjustCloneLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype) - if(!can_adjust_clone_loss(amount, forced, required_biotype)) - return 0 - if(forced) - . = adjust_health(amount * CONFIG_GET(number/damage_multiplier), updating_health, forced) - else if(damage_coeff[CLONE]) - . = adjust_health(amount * damage_coeff[CLONE] * CONFIG_GET(number/damage_multiplier), updating_health, forced) - /mob/living/basic/adjustStaminaLoss(amount, updating_stamina = TRUE, forced = FALSE, required_biotype) if(!can_adjust_stamina_loss(amount, forced, required_biotype)) return 0 diff --git a/code/modules/mob/living/basic/heretic/_heretic_summon.dm b/code/modules/mob/living/basic/heretic/_heretic_summon.dm new file mode 100644 index 00000000000000..bdde67179fe575 --- /dev/null +++ b/code/modules/mob/living/basic/heretic/_heretic_summon.dm @@ -0,0 +1,36 @@ +/mob/living/basic/heretic_summon + name = "Eldritch Demon" + real_name = "Eldritch Demon" + desc = "A horror from beyond this realm, summoned by bad code." + icon = 'icons/mob/nonhuman-player/eldritch_mobs.dmi' + faction = list(FACTION_HERETIC) + basic_mob_flags = DEL_ON_DEATH + gender = NEUTER + mob_biotypes = NONE + + habitable_atmos = 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) + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0, OXY = 0) + speed = 0 + melee_attack_cooldown = CLICK_CD_MELEE + + attack_sound = 'sound/weapons/punch1.ogg' + response_help_continuous = "thinks better of touching" + response_help_simple = "think better of touching" + response_disarm_continuous = "flails at" + response_disarm_simple = "flail at" + response_harm_continuous = "rips" + response_harm_simple = "tear" + death_message = "implodes into itself." + + unsuitable_atmos_damage = 0 + unsuitable_cold_damage = 0 + unsuitable_heat_damage = 0 + + combat_mode = TRUE + ai_controller = null + speak_emote = list("screams") + gold_core_spawnable = NO_SPAWN + +/mob/living/basic/heretic_summon/Initialize(mapload) + . = ..() + AddElement(/datum/element/death_drops, string_list(list(/obj/effect/gibspawner/generic))) diff --git a/code/modules/mob/living/basic/heretic/ash_spirit.dm b/code/modules/mob/living/basic/heretic/ash_spirit.dm index d12ad5eb8d12fd..fed64db8adcb80 100644 --- a/code/modules/mob/living/basic/heretic/ash_spirit.dm +++ b/code/modules/mob/living/basic/heretic/ash_spirit.dm @@ -20,6 +20,4 @@ /datum/action/cooldown/spell/jaunt/ethereal_jaunt/ash, /datum/action/cooldown/spell/pointed/cleave, ) - for (var/action in actions_to_add) - var/datum/action/cooldown/new_action = new action(src) - new_action.Grant(src) + grant_actions_by_list(actions_to_add) diff --git a/code/modules/mob/living/basic/heretic/fire_shark.dm b/code/modules/mob/living/basic/heretic/fire_shark.dm index 5a1f173a89b9c3..c4106050bc26e1 100644 --- a/code/modules/mob/living/basic/heretic/fire_shark.dm +++ b/code/modules/mob/living/basic/heretic/fire_shark.dm @@ -16,7 +16,7 @@ obj_damage = 0 attack_verb_continuous = "bites" attack_verb_simple = "bite" - damage_coeff = list(BRUTE = 1, BURN = 0.25, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) + damage_coeff = list(BRUTE = 1, BURN = 0.25, TOX = 0, STAMINA = 0, OXY = 0) faction = list(FACTION_HERETIC) mob_size = MOB_SIZE_TINY speak_emote = list("screams") @@ -26,7 +26,7 @@ . = ..() AddElement(/datum/element/death_gases, /datum/gas/plasma, 40) AddElement(/datum/element/simple_flying) - AddElement(/datum/element/venomous, /datum/reagent/phlogiston, 2) + AddElement(/datum/element/venomous, /datum/reagent/phlogiston, 2, injection_flags = INJECT_CHECK_PENETRATE_THICK) AddComponent(/datum/component/swarming) AddComponent(/datum/component/regenerator, outline_colour = COLOR_DARK_RED) ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT) diff --git a/code/modules/mob/living/basic/heretic/flesh_stalker.dm b/code/modules/mob/living/basic/heretic/flesh_stalker.dm index 00fecd2f60804d..c8a3342141ff55 100644 --- a/code/modules/mob/living/basic/heretic/flesh_stalker.dm +++ b/code/modules/mob/living/basic/heretic/flesh_stalker.dm @@ -11,7 +11,7 @@ melee_damage_upper = 20 sight = SEE_MOBS ai_controller = /datum/ai_controller/basic_controller/stalker - /// Associative list of action types we would like to have, and what blackboard key (if any) to put it in + /// Actions to grant on spawn var/static/list/actions_to_add = list( /datum/action/cooldown/spell/emp/eldritch = BB_GENERIC_ACTION, /datum/action/cooldown/spell/jaunt/ethereal_jaunt/ash = null, @@ -21,18 +21,13 @@ /mob/living/basic/heretic_summon/stalker/Initialize(mapload) . = ..() AddComponent(/datum/component/ai_target_timer) - for (var/action_type in actions_to_add) - var/datum/action/new_action = new action_type(src) - new_action.Grant(src) - var/blackboard_key = actions_to_add[action_type] - if (!isnull(blackboard_key)) - ai_controller?.set_blackboard_key(blackboard_key, new_action) + grant_actions_by_list(actions_to_add) /// Changes shape and lies in wait when it has no target, uses EMP and attacks once it does /datum/ai_controller/basic_controller/stalker ai_traits = CAN_ACT_IN_STASIS blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/heretic/heretic_summon.dm b/code/modules/mob/living/basic/heretic/heretic_summon.dm deleted file mode 100644 index a99508ff65968c..00000000000000 --- a/code/modules/mob/living/basic/heretic/heretic_summon.dm +++ /dev/null @@ -1,36 +0,0 @@ -/mob/living/basic/heretic_summon - name = "Eldritch Demon" - real_name = "Eldritch Demon" - desc = "A horror from beyond this realm, summoned by bad code." - icon = 'icons/mob/nonhuman-player/eldritch_mobs.dmi' - faction = list(FACTION_HERETIC) - basic_mob_flags = DEL_ON_DEATH - gender = NEUTER - mob_biotypes = NONE - - habitable_atmos = 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) - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) - speed = 0 - melee_attack_cooldown = CLICK_CD_MELEE - - attack_sound = 'sound/weapons/punch1.ogg' - response_help_continuous = "thinks better of touching" - response_help_simple = "think better of touching" - response_disarm_continuous = "flails at" - response_disarm_simple = "flail at" - response_harm_continuous = "rips" - response_harm_simple = "tear" - death_message = "implodes into itself." - - unsuitable_atmos_damage = 0 - unsuitable_cold_damage = 0 - unsuitable_heat_damage = 0 - - combat_mode = TRUE - ai_controller = null - speak_emote = list("screams") - gold_core_spawnable = NO_SPAWN - -/mob/living/basic/heretic_summon/Initialize(mapload) - . = ..() - AddElement(/datum/element/death_drops, string_list(list(/obj/effect/gibspawner/generic))) diff --git a/code/modules/mob/living/basic/heretic/maid_in_the_mirror.dm b/code/modules/mob/living/basic/heretic/maid_in_the_mirror.dm index 26eaa9d7ebe86e..b83c4f253f3624 100644 --- a/code/modules/mob/living/basic/heretic/maid_in_the_mirror.dm +++ b/code/modules/mob/living/basic/heretic/maid_in_the_mirror.dm @@ -32,8 +32,7 @@ /obj/item/shard, ) AddElement(/datum/element/death_drops, loot) - var/datum/action/cooldown/spell/jaunt/mirror_walk/jaunt = new (src) - jaunt.Grant(src) + GRANT_ACTION(/datum/action/cooldown/spell/jaunt/mirror_walk) /mob/living/basic/heretic_summon/maid_in_the_mirror/death(gibbed) var/turf/death_turf = get_turf(src) diff --git a/code/modules/mob/living/basic/heretic/raw_prophet.dm b/code/modules/mob/living/basic/heretic/raw_prophet.dm index 1b7015960954a2..f4ed7229a005e5 100644 --- a/code/modules/mob/living/basic/heretic/raw_prophet.dm +++ b/code/modules/mob/living/basic/heretic/raw_prophet.dm @@ -15,8 +15,12 @@ maxHealth = 65 health = 65 sight = SEE_MOBS|SEE_OBJS|SEE_TURFS - /// Some ability we use to make people go blind - var/blind_action_type = /datum/action/cooldown/spell/pointed/blind/eldritch + /// List of innate abilities we have to add. + var/static/list/innate_abilities = list( + /datum/action/cooldown/spell/jaunt/ethereal_jaunt/ash/long = null, + /datum/action/cooldown/spell/list_target/telepathy/eldritch = null, + /datum/action/innate/expand_sight = null, + ) /mob/living/basic/heretic_summon/raw_prophet/Initialize(mapload) . = ..() @@ -39,19 +43,13 @@ unlink_message = on_unlink_message, \ ) - // We don't use these for AI so we can just repeat the same adding process - var/static/list/add_abilities = list( - /datum/action/cooldown/spell/jaunt/ethereal_jaunt/ash/long, - /datum/action/cooldown/spell/list_target/telepathy/eldritch, - /datum/action/innate/expand_sight, - ) - for (var/ability_type in add_abilities) - var/datum/action/new_action = new ability_type(src) - new_action.Grant(src) + grant_actions_by_list(get_innate_abilities()) - var/datum/action/cooldown/blind = new blind_action_type(src) - blind.Grant(src) - ai_controller?.set_blackboard_key(BB_TARGETTED_ACTION, blind) +/// Returns a list of abilities that we should add. +/mob/living/basic/heretic_summon/raw_prophet/proc/get_innate_abilities() + var/list/returnable_list = innate_abilities.Copy() + returnable_list += list(/datum/action/cooldown/spell/pointed/blind/eldritch = BB_TARGETED_ACTION) + return returnable_list /* * Callback for the mind_linker component. @@ -78,12 +76,16 @@ /// NPC variant with a less bullshit ability /mob/living/basic/heretic_summon/raw_prophet/ruins ai_controller = /datum/ai_controller/basic_controller/raw_prophet - blind_action_type = /datum/action/cooldown/mob_cooldown/watcher_gaze + +/mob/living/basic/heretic_summon/raw_prophet/ruins/get_innate_abilities() + var/list/returnable_list = innate_abilities.Copy() + returnable_list += list(/datum/action/cooldown/mob_cooldown/watcher_gaze = BB_TARGETED_ACTION) + return returnable_list /// Walk and attack people, blind them when we can /datum/ai_controller/basic_controller/raw_prophet blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/heretic/rust_walker.dm b/code/modules/mob/living/basic/heretic/rust_walker.dm index 0031ce2388d264..ff56c311f7346d 100644 --- a/code/modules/mob/living/basic/heretic/rust_walker.dm +++ b/code/modules/mob/living/basic/heretic/rust_walker.dm @@ -17,13 +17,12 @@ /mob/living/basic/heretic_summon/rust_walker/Initialize(mapload) . = ..() AddElement(/datum/element/footstep, FOOTSTEP_MOB_RUST) - var/datum/action/cooldown/spell/aoe/rust_conversion/small/conversion = new(src) - conversion.Grant(src) - ai_controller?.set_blackboard_key(BB_GENERIC_ACTION, conversion) - var/datum/action/cooldown/spell/basic_projectile/rust_wave/short/wave = new(src) - wave.Grant(src) - ai_controller?.set_blackboard_key(BB_TARGETTED_ACTION, wave) + var/static/list/grantable_spells = list( + /datum/action/cooldown/spell/aoe/rust_conversion/small = BB_GENERIC_ACTION, + /datum/action/cooldown/spell/basic_projectile/rust_wave/short = BB_TARGETED_ACTION, + ) + grant_actions_by_list(grantable_spells) /mob/living/basic/heretic_summon/rust_walker/setDir(newdir) . = ..() @@ -51,7 +50,7 @@ /// Converts unconverted terrain, sprays pocket sand around /datum/ai_controller/basic_controller/rust_walker blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/heretic/star_gazer.dm b/code/modules/mob/living/basic/heretic/star_gazer.dm index a8af89a7f7177f..e503cd65aea162 100644 --- a/code/modules/mob/living/basic/heretic/star_gazer.dm +++ b/code/modules/mob/living/basic/heretic/star_gazer.dm @@ -24,7 +24,7 @@ attack_sound = 'sound/weapons/bladeslice.ogg' melee_attack_cooldown = 0.6 SECONDS speak_emote = list("growls") - damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) + damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 0, STAMINA = 0, OXY = 0) death_sound = 'sound/magic/cosmic_expansion.ogg' slowed_by_drag = FALSE @@ -34,7 +34,6 @@ can_buckle_to = FALSE mob_size = MOB_SIZE_HUGE layer = LARGE_MOB_LAYER - plane = GAME_PLANE_UPPER_FOV_HIDDEN flags_1 = PREVENT_CONTENTS_EXPLOSION_1 ai_controller = /datum/ai_controller/basic_controller/star_gazer @@ -65,8 +64,8 @@ return target.apply_status_effect(/datum/status_effect/star_mark) - target.apply_damage(damage = 5, damagetype = CLONE) - var/datum/targetting_datum/target_confirmer = ai_controller.blackboard[BB_TARGETTING_DATUM] + target.apply_damage(damage = 5, damagetype = BURN) + var/datum/targeting_strategy/target_confirmer = GET_TARGETING_STRATEGY(ai_controller.blackboard[BB_TARGETING_STRATEGY]) for(var/mob/living/nearby_mob in range(1, src)) if(target == nearby_mob || !target_confirmer?.can_attack(src, nearby_mob)) continue @@ -78,9 +77,9 @@ /datum/ai_controller/basic_controller/star_gazer blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends/attack_closed_turfs, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends/attack_closed_turfs, ) ai_movement = /datum/ai_movement/basic_avoidance @@ -104,7 +103,7 @@ can_attack_turfs = TRUE can_attack_dense_objects = TRUE -/datum/pet_command/point_targetting/attack/star_gazer +/datum/pet_command/point_targeting/attack/star_gazer speech_commands = list("attack", "sic", "kill", "slash them") command_feedback = "stares!" pointed_reaction = "stares intensely!" diff --git a/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon.dm b/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon.dm index 960f875365bfa4..a83953ae1c94d0 100644 --- a/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon.dm +++ b/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon.dm @@ -28,15 +28,13 @@ /mob/living/basic/mining/ice_demon/Initialize(mapload) . = ..() - var/datum/action/cooldown/mob_cooldown/slippery_ice_floors/ice_floor = new(src) - ice_floor.Grant(src) - ai_controller.set_blackboard_key(BB_DEMON_SLIP_ABILITY, ice_floor) - var/datum/action/cooldown/mob_cooldown/ice_demon_teleport/demon_teleport = new(src) - demon_teleport.Grant(src) - ai_controller.set_blackboard_key(BB_DEMON_TELEPORT_ABILITY, demon_teleport) - var/datum/action/cooldown/spell/conjure/create_afterimages/afterimage = new(src) - afterimage.Grant(src) - ai_controller.set_blackboard_key(BB_DEMON_CLONE_ABILITY, afterimage) + var/static/list/innate_actions = list( + /datum/action/cooldown/mob_cooldown/slippery_ice_floors = BB_DEMON_SLIP_ABILITY, + /datum/action/cooldown/mob_cooldown/ice_demon_teleport = BB_DEMON_TELEPORT_ABILITY, + /datum/action/cooldown/spell/conjure/limit_summons/create_afterimages = BB_DEMON_CLONE_ABILITY, + ) + grant_actions_by_list(innate_actions) + AddComponent(\ /datum/component/ranged_attacks,\ projectile_type = /obj/projectile/temp/ice_demon,\ diff --git a/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_abilities.dm b/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_abilities.dm index 79c9ee9bd583eb..b143f471138f4b 100644 --- a/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_abilities.dm +++ b/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_abilities.dm @@ -82,7 +82,7 @@ /obj/effect/temp_visual/slippery_ice/proc/add_slippery_component() AddComponent(/datum/component/slippery, 2 SECONDS) -/datum/action/cooldown/spell/conjure/create_afterimages +/datum/action/cooldown/spell/conjure/limit_summons/create_afterimages name = "Create After Images" button_icon = 'icons/mob/simple/icemoon/icemoon_monsters.dmi' button_icon_state = "ice_demon" @@ -91,27 +91,8 @@ summon_type = list(/mob/living/basic/mining/demon_afterimage) summon_radius = 1 summon_amount = 2 - ///max number of after images - var/max_afterimages = 2 - ///How many clones do we have summoned - var/number_of_afterimages = 0 + max_summons = 2 -/datum/action/cooldown/spell/conjure/create_afterimages/can_cast_spell(feedback = TRUE) +/datum/action/cooldown/spell/conjure/limit_summons/create_afterimages/post_summon(atom/summoned_object, atom/cast_on) . = ..() - if(!.) - return FALSE - if(number_of_afterimages >= max_afterimages) - return FALSE - return TRUE - -/datum/action/cooldown/spell/conjure/create_afterimages/post_summon(atom/summoned_object, atom/cast_on) - var/mob/living/basic/created_copy = summoned_object - created_copy.AddComponent(/datum/component/joint_damage, overlord_mob = owner) - RegisterSignals(created_copy, list(COMSIG_QDELETING, COMSIG_LIVING_DEATH), PROC_REF(delete_copy)) - number_of_afterimages++ - -/datum/action/cooldown/spell/conjure/create_afterimages/proc/delete_copy(mob/source) - SIGNAL_HANDLER - - UnregisterSignal(source, list(COMSIG_QDELETING, COMSIG_LIVING_DEATH)) - number_of_afterimages-- + summoned_object.AddComponent(/datum/component/joint_damage, overlord_mob = owner) diff --git a/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_ai.dm b/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_ai.dm index 28ddd38324ac61..20bcd8a69a130e 100644 --- a/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_ai.dm +++ b/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_ai.dm @@ -1,11 +1,10 @@ /datum/ai_controller/basic_controller/ice_demon blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_LIST_SCARY_ITEMS = list( /obj/item/weldingtool, /obj/item/flashlight/flare, ), - BB_MINIMUM_DISTANCE_RANGE = 3, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp.dm b/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp.dm index 8fb02ec83df915..768375cfce8a69 100644 --- a/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp.dm +++ b/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp.dm @@ -40,17 +40,20 @@ /mob/living/basic/mining/ice_whelp/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_NO_GLIDE, INNATE_TRAIT) + AddElement(/datum/element/footstep, FOOTSTEP_MOB_HEAVY) AddComponent(/datum/component/basic_mob_ability_telegraph) AddComponent(/datum/component/basic_mob_attack_telegraph, telegraph_duration = 0.6 SECONDS) - var/datum/action/cooldown/mob_cooldown/fire_breath/ice/flamethrower = new(src) - flamethrower.Grant(src) - ai_controller.set_blackboard_key(BB_WHELP_STRAIGHTLINE_FIRE, flamethrower) - var/datum/action/cooldown/mob_cooldown/fire_breath/ice/cross/wide_flames = new(src) - wide_flames.Grant(src) - ai_controller.set_blackboard_key(BB_WHELP_WIDESPREAD_FIRE, wide_flames) + RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) + var/static/list/innate_actions = list( + /datum/action/cooldown/mob_cooldown/fire_breath/ice = BB_WHELP_STRAIGHTLINE_FIRE, + /datum/action/cooldown/mob_cooldown/fire_breath/ice/cross = BB_WHELP_WIDESPREAD_FIRE, + ) + + grant_actions_by_list(innate_actions) + /mob/living/basic/mining/ice_whelp/proc/pre_attack(mob/living/sculptor, atom/target) SIGNAL_HANDLER diff --git a/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_ai.dm b/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_ai.dm index 2d9715caf37527..725dcc09b5ec98 100644 --- a/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_ai.dm +++ b/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_ai.dm @@ -1,7 +1,7 @@ #define ENRAGE_ADDITION 25 /datum/ai_controller/basic_controller/ice_whelp blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, BB_TARGET_MINIMUM_STAT = HARD_CRIT, BB_WHELP_ENRAGED = 0, ) diff --git a/code/modules/mob/living/basic/icemoon/wolf/wolf.dm b/code/modules/mob/living/basic/icemoon/wolf/wolf.dm new file mode 100644 index 00000000000000..c657fa4284338a --- /dev/null +++ b/code/modules/mob/living/basic/icemoon/wolf/wolf.dm @@ -0,0 +1,91 @@ +/mob/living/basic/mining/wolf + name = "white wolf" + desc = "Pack hunters of the Icemoon wastes. While a mere nuisance individually, they become fearsome foes in larger groups." + icon = 'icons/mob/simple/icemoon/icemoon_monsters.dmi' + icon_state = "whitewolf" + icon_living = "whitewolf" + icon_dead = "whitewolf_dead" + mob_biotypes = MOB_ORGANIC|MOB_BEAST + mouse_opacity = MOUSE_OPACITY_ICON + speak_emote = list("howls") + friendly_verb_continuous = "howls at" + friendly_verb_simple = "howl at" + + butcher_results = list( + /obj/item/food/meat/slab = 2, + /obj/item/stack/sheet/sinew/wolf = 2, + /obj/item/stack/sheet/bone = 2 + ) + crusher_loot = /obj/item/crusher_trophy/wolf_ear + + maxHealth = 130 + health = 130 + obj_damage = 15 + melee_damage_lower = 7.5 + melee_damage_upper = 7.5 + attack_vis_effect = ATTACK_EFFECT_BITE + melee_attack_cooldown = 1.2 SECONDS + + attack_verb_continuous = "bites" + attack_verb_simple = "bite" + death_message = "snarls its last and perishes." + + attack_sound = 'sound/weapons/bite.ogg' + move_force = MOVE_FORCE_WEAK + move_resist = MOVE_FORCE_WEAK + pull_force = MOVE_FORCE_WEAK + + ai_controller = /datum/ai_controller/basic_controller/wolf + + //can we tame this wolf? + var/can_tame = TRUE + + //commands to give when tamed + var/static/list/pet_commands = list( + /datum/pet_command/idle, + /datum/pet_command/free, + /datum/pet_command/good_boy/wolf, + /datum/pet_command/follow/wolf, + /datum/pet_command/point_targeting/attack, + /datum/pet_command/point_targeting/fetch, + /datum/pet_command/play_dead, + /datum/pet_command/protect_owner, + ) + +/mob/living/basic/mining/wolf/Initialize(mapload) + . = ..() + + AddElement(/datum/element/footstep, FOOTSTEP_MOB_CLAW) + AddElement(/datum/element/ai_flee_while_injured) + AddElement(/datum/element/ai_retaliate) + AddComponent(/datum/component/basic_mob_ability_telegraph) + AddComponent(/datum/component/basic_mob_attack_telegraph, telegraph_duration = 0.6 SECONDS) + + if(can_tame) + make_tameable() + +/mob/living/basic/mining/wolf/proc/make_tameable() + AddComponent(\ + /datum/component/tameable,\ + food_types = list(/obj/item/food/meat/slab),\ + tame_chance = 15,\ + bonus_tame_chance = 5,\ + after_tame = CALLBACK(src, PROC_REF(tame_wolf)),\ + ) + +/mob/living/basic/mining/wolf/proc/tame_wolf() + new /obj/effect/temp_visual/heart(src.loc) + // ride wolf, life good + AddElement(/datum/element/ridable, /datum/component/riding/creature/wolf) + AddComponent(/datum/component/obeys_commands, pet_commands) + // this is purely a convenience thing once tamed so you can drag them away from shit + ai_controller.ai_traits = STOP_MOVING_WHEN_PULLED + // makes tamed wolves run away far less + ai_controller.set_blackboard_key(BB_BASIC_MOB_FLEE_DISTANCE, 7) + +//port the faction fix from goliath basicmob to make the wildlife hostile when tamed (and also help defuckulate reinforcements ai) +//this should also produce interesting behavior where tamed wolves defend other tamed wolves. +/mob/living/basic/mining/wolf/befriend(mob/living/new_friend) + . = ..() + faction = new_friend.faction.Copy() + visible_message(span_notice("[src] lowers [src.p_their()] snout at [new_friend]'s offering and begins to wag [src.p_their()] tail.")) diff --git a/code/modules/mob/living/basic/icemoon/wolf/wolf_ai.dm b/code/modules/mob/living/basic/icemoon/wolf/wolf_ai.dm new file mode 100644 index 00000000000000..f0809d2ec86da3 --- /dev/null +++ b/code/modules/mob/living/basic/icemoon/wolf/wolf_ai.dm @@ -0,0 +1,36 @@ +//This mimicks the old simple_animal wolf behavior fairly closely. +//The 30 tiles fleeing is pretty wild and may need toning back under basicmob behavior, we'll have to see. +/datum/ai_controller/basic_controller/wolf + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, + BB_BASIC_MOB_FLEE_DISTANCE = 30, + BB_VISION_RANGE = 9, + BB_TARGET_MINIMUM_STAT = HARD_CRIT, + BB_REINFORCEMENTS_EMOTE = "unleashes a chilling howl, calling for aid!" + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + + //reinforcements needs to be skipped over entirely on tamed wolves because it causes them to attack their owner and then themselves + planning_subtrees = list( + /datum/ai_planning_subtree/pet_planning, + /datum/ai_planning_subtree/call_reinforcements/wolf, + /datum/ai_planning_subtree/simple_find_nearest_target_to_flee, + /datum/ai_planning_subtree/flee_target, + /datum/ai_planning_subtree/target_retaliate, + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/attack_obstacle_in_path, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + ) + +/datum/ai_planning_subtree/call_reinforcements/wolf + +/datum/ai_planning_subtree/call_reinforcements/wolf/decide_to_call(datum/ai_controller/controller) + //only call reinforcements if the person who just smacked us isn't a friend to avoid hitting them once, then killing ourselves if we've been tamed + if (controller.blackboard_key_exists(BB_BASIC_MOB_CURRENT_TARGET) && istype(controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET], /mob)) + return !(controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET] in controller.blackboard[BB_FRIENDS_LIST]) + else + return FALSE + diff --git a/code/modules/mob/living/basic/icemoon/wolf/wolf_extras.dm b/code/modules/mob/living/basic/icemoon/wolf/wolf_extras.dm new file mode 100644 index 00000000000000..7765ec896a1ee8 --- /dev/null +++ b/code/modules/mob/living/basic/icemoon/wolf/wolf_extras.dm @@ -0,0 +1,18 @@ +// Some flavor additions for wolf-related pet commands +/datum/pet_command/good_boy/wolf + speech_commands = list("good wolf") + +/datum/pet_command/follow/wolf + // Nordic-themed for a bit of extra flavor + speech_commands = list("heel", "follow", "fylgja", "fyl") + +// Contains pixel offset data for sprites riding wolves +/datum/component/riding/creature/wolf + +/datum/component/riding/creature/wolf/handle_specials() + . = ..() + set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(1, 9), TEXT_SOUTH = list(1, 9), TEXT_EAST = list(0, 9), TEXT_WEST = list(2, 9))) + set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER) + set_vehicle_dir_layer(NORTH, OBJ_LAYER) + set_vehicle_dir_layer(EAST, OBJ_LAYER) + set_vehicle_dir_layer(WEST, OBJ_LAYER) diff --git a/code/modules/mob/living/basic/jungle/leaper/leaper.dm b/code/modules/mob/living/basic/jungle/leaper/leaper.dm new file mode 100644 index 00000000000000..f3213897f9bdb8 --- /dev/null +++ b/code/modules/mob/living/basic/jungle/leaper/leaper.dm @@ -0,0 +1,100 @@ +/mob/living/basic/leaper + name = "leaper" + desc = "Commonly referred to as 'leapers', the Geron Toad is a massive beast that spits out highly pressurized bubbles containing a unique toxin, knocking down its prey and then crushing it with its girth." + icon = 'icons/mob/simple/jungle/leaper.dmi' + icon_state = "leaper" + icon_living = "leaper" + icon_dead = "leaper_dead" + mob_biotypes = MOB_ORGANIC|MOB_BEAST + + melee_damage_lower = 15 + melee_damage_upper = 20 + maxHealth = 350 + health = 350 + speed = 10 + + pixel_x = -16 + base_pixel_x = -16 + + faction = list(FACTION_JUNGLE) + obj_damage = 30 + + unsuitable_atmos_damage = 0 + minimum_survivable_temperature = 0 + maximum_survivable_temperature = INFINITY + + attack_sound = 'sound/weapons/bladeslice.ogg' + attack_vis_effect = ATTACK_EFFECT_SLASH + status_flags = NONE + lighting_cutoff_red = 5 + lighting_cutoff_green = 20 + lighting_cutoff_blue = 25 + mob_size = MOB_SIZE_LARGE + ai_controller = /datum/ai_controller/basic_controller/leaper + move_resist = MOVE_FORCE_VERY_STRONG + pull_force = MOVE_FORCE_VERY_STRONG + ///appearance when we dead + var/mutable_appearance/dead_overlay + ///appearance when we are alive + var/mutable_appearance/living_overlay + ///list of pet commands we can issue + var/list/pet_commands = list( + /datum/pet_command/idle, + /datum/pet_command/free, + /datum/pet_command/follow, + /datum/pet_command/untargeted_ability/blood_rain, + /datum/pet_command/untargeted_ability/summon_toad, + /datum/pet_command/point_targeting/attack, + /datum/pet_command/point_targeting/use_ability/flop, + /datum/pet_command/point_targeting/use_ability/bubble, + ) + +/mob/living/basic/leaper/Initialize(mapload) + . = ..() + AddElement(\ + /datum/element/change_force_on_death,\ + move_resist = MOVE_RESIST_DEFAULT,\ + pull_force = PULL_FORCE_DEFAULT,\ + ) + AddComponent(/datum/component/obeys_commands, pet_commands) + AddComponent(/datum/component/seethrough_mob) + AddElement(/datum/element/wall_smasher) + AddElement(/datum/element/ridable, component_type = /datum/component/riding/creature/leaper) + AddElement(/datum/element/footstep, footstep_type = FOOTSTEP_MOB_HEAVY) + var/datum/action/cooldown/mob_cooldown/blood_rain/volley = new(src) + volley.Grant(src) + ai_controller.set_blackboard_key(BB_LEAPER_VOLLEY, volley) + var/datum/action/cooldown/mob_cooldown/belly_flop/flop = new(src) + flop.Grant(src) + ai_controller.set_blackboard_key(BB_LEAPER_FLOP, flop) + var/datum/action/cooldown/mob_cooldown/projectile_attack/leaper_bubble/bubble = new(src) + bubble.Grant(src) + ai_controller.set_blackboard_key(BB_LEAPER_BUBBLE, bubble) + var/datum/action/cooldown/spell/conjure/limit_summons/create_suicide_toads/toads = new(src) + toads.Grant(src) + ai_controller.set_blackboard_key(BB_LEAPER_SUMMON, toads) + +/mob/living/basic/leaper/proc/set_color_overlay(toad_color) + dead_overlay = mutable_appearance(icon, "[icon_state]_dead_overlay") + dead_overlay.color = toad_color + + living_overlay = mutable_appearance(icon, "[icon_state]_overlay") + living_overlay.color = toad_color + update_appearance(UPDATE_OVERLAYS) + +/mob/living/basic/leaper/update_overlays() + . = ..() + if(stat == DEAD && dead_overlay) + . += dead_overlay + return + + if(living_overlay) + . += living_overlay + +/mob/living/basic/leaper/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, force, gentle = FALSE, quickstart = TRUE) + ADD_TRAIT(src, TRAIT_IMMOBILIZED, LEAPING_TRAIT) + return ..() + +/mob/living/basic/leaper/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + . = ..() + REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, LEAPING_TRAIT) diff --git a/code/modules/mob/living/basic/jungle/leaper/leaper_abilities.dm b/code/modules/mob/living/basic/jungle/leaper/leaper_abilities.dm new file mode 100644 index 00000000000000..efc09410db4888 --- /dev/null +++ b/code/modules/mob/living/basic/jungle/leaper/leaper_abilities.dm @@ -0,0 +1,253 @@ +// fire leaper bubble ability +/datum/action/cooldown/mob_cooldown/projectile_attack/leaper_bubble + name = "Fire Leaper Bubble" + button_icon = 'icons/obj/weapons/guns/projectiles.dmi' + button_icon_state = "leaper" + desc = "Fires a poisonous leaper bubble towards the victim!" + background_icon_state = "bg_revenant" + overlay_icon_state = "bg_revenant_border" + cooldown_time = 7 SECONDS + projectile_type = /obj/projectile/leaper + projectile_sound = 'sound/effects/snap.ogg' + shared_cooldown = NONE + melee_cooldown_time = 0 SECONDS + +// bubble ability objects and effects +/obj/projectile/leaper + name = "leaper bubble" + icon_state = "leaper" + paralyze = 5 SECONDS + damage = 0 + range = 7 + hitsound = 'sound/effects/snap.ogg' + nondirectional_sprite = TRUE + impact_effect_type = /obj/effect/temp_visual/leaper_projectile_impact + +/obj/projectile/leaper/on_hit(atom/target, blocked = 0, pierce_hit) + . = ..() + if (!isliving(target)) + return + var/mob/living/bubbled = target + if(iscarbon(target)) + bubbled.reagents.add_reagent(/datum/reagent/toxin/leaper_venom, 5) + return + bubbled.apply_damage(30) + +/obj/projectile/leaper/on_range() + new /obj/structure/leaper_bubble(get_turf(src)) + return ..() + +/obj/effect/temp_visual/leaper_projectile_impact + name = "leaper bubble" + icon = 'icons/obj/weapons/guns/projectiles.dmi' + icon_state = "leaper_bubble_pop" + layer = ABOVE_ALL_MOB_LAYER + duration = 3 SECONDS + +/obj/effect/temp_visual/leaper_projectile_impact/Initialize(mapload) + . = ..() + new /obj/effect/decal/cleanable/leaper_sludge(get_turf(src)) + +/obj/effect/decal/cleanable/leaper_sludge + name = "leaper sludge" + desc = "A small pool of sludge, containing trace amounts of leaper venom." + icon = 'icons/effects/tomatodecal.dmi' + icon_state = "tomato_floor1" + +// bubble ability reagent +/datum/reagent/toxin/leaper_venom + name = "Leaper venom" + description = "A toxin spat out by leapers that, while harmless in small doses, quickly creates a toxic reaction if too much is in the body." + color = "#801E28" // rgb: 128, 30, 40 + toxpwr = 0 + taste_description = "french cuisine" + taste_mult = 1.3 + +/datum/reagent/toxin/leaper_venom/on_mob_life(mob/living/carbon/poisoned_mob, seconds_per_tick, times_fired) + . = ..() + if(volume <= 5) + return + if(poisoned_mob.adjustToxLoss(2.5 * REM * seconds_per_tick, updating_health = FALSE)) + return UPDATE_MOB_HEALTH + +// bubble ability structure +/obj/structure/leaper_bubble + name = "leaper bubble" + desc = "A floating bubble containing leaper venom. The contents are under a surprising amount of pressure." + icon = 'icons/obj/weapons/guns/projectiles.dmi' + icon_state = "leaper" + max_integrity = 10 + density = FALSE + +/obj/structure/leaper_bubble/Initialize(mapload) + . = ..() + AddElement(/datum/element/movetype_handler) + ADD_TRAIT(src, TRAIT_MOVE_FLOATING, LEAPER_BUBBLE_TRAIT) + QDEL_IN(src, 10 SECONDS) + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(on_entered), + ) + AddElement(/datum/element/connect_loc, loc_connections) + +/obj/structure/leaper_bubble/Destroy() + new /obj/effect/temp_visual/leaper_projectile_impact(get_turf(src)) + playsound(src,'sound/effects/snap.ogg', 50, TRUE) + return ..() + +/obj/structure/leaper_bubble/proc/on_entered(datum/source, atom/movable/bubbled) + SIGNAL_HANDLER + if(!isliving(bubbled) || istype(bubbled, /mob/living/basic/leaper)) + return + var/mob/living/bubbled_mob = bubbled + + playsound(src, 'sound/effects/snap.ogg',50, TRUE) + bubbled_mob.Paralyze(5 SECONDS) + if(iscarbon(bubbled_mob)) + bubbled_mob.reagents.add_reagent(/datum/reagent/toxin/leaper_venom, 5) + else + bubbled_mob.apply_damage(30) + qdel(src) + +// blood rain ability +/datum/action/cooldown/mob_cooldown/blood_rain + name = "Blood Rain" + button_icon = 'icons/effects/effects.dmi' + button_icon_state = "blood_effect_falling" + background_icon_state = "bg_revenant" + overlay_icon_state = "bg_revenant_border" + desc = "Rain down poisonous dropplets of blood!" + cooldown_time = 10 SECONDS + click_to_activate = FALSE + shared_cooldown = NONE + melee_cooldown_time = 0 SECONDS + /// how many droplets we will fire + var/volley_count = 8 + /// time between each droplet launched + var/fire_interval = 0.1 SECONDS + +/datum/action/cooldown/mob_cooldown/blood_rain/Activate(mob/living/firer, atom/target) + var/list/possible_turfs = list() + for(var/turf/possible_turf in oview(5, owner)) + if(possible_turf.is_blocked_turf() || isopenspaceturf(possible_turf) || isspaceturf(possible_turf)) + continue + if(locate(/obj/structure/leaper_bubble) in possible_turf) + continue + possible_turfs += possible_turf + + if(!length(possible_turfs)) + return FALSE + + playsound(owner, 'sound/magic/fireball.ogg', 70, TRUE) + new /obj/effect/temp_visual/blood_drop_rising(get_turf(owner)) + addtimer(CALLBACK(src, PROC_REF(fire_droplets), possible_turfs), 1.5 SECONDS) + StartCooldown() + return TRUE + +/datum/action/cooldown/mob_cooldown/blood_rain/proc/fire_droplets(list/possible_turfs) + var/fire_count = min(volley_count, possible_turfs.len) + for(var/i in 1 to fire_count) + addtimer(CALLBACK(src, PROC_REF(fall_effect), pick_n_take(possible_turfs)), i * fire_interval) + +/datum/action/cooldown/mob_cooldown/blood_rain/proc/fall_effect(turf/selected_turf) + new /obj/effect/temp_visual/blood_drop_falling(selected_turf) + var/obj/effect/temp_visual/falling_shadow = new /obj/effect/temp_visual/shadow_telegraph(selected_turf) + animate(falling_shadow, transform = matrix().Scale(0.1, 0.1), time = falling_shadow.duration) + +// blood rain effects +/obj/effect/temp_visual/blood_drop_rising + name = "leaper bubble" + icon = 'icons/obj/weapons/guns/projectiles.dmi' + icon_state = "leaper" + layer = ABOVE_ALL_MOB_LAYER + duration = 1 SECONDS + +/obj/effect/temp_visual/blood_drop_rising/Initialize(mapload) + . = ..() + animate(src, pixel_y = base_pixel_y + 150, time = duration) + +/obj/effect/temp_visual/blood_drop_falling + name = "leaper bubble" + icon = 'icons/effects/effects.dmi' + icon_state = "blood_effect_falling" + layer = ABOVE_ALL_MOB_LAYER + duration = 0.7 SECONDS + pixel_y = 60 + +/obj/effect/temp_visual/blood_drop_falling/Initialize(mapload) + . = ..() + addtimer(CALLBACK(src, PROC_REF(create_blood_structure)), duration) + animate(src, pixel_y = 0, time = duration) + +/obj/effect/temp_visual/blood_drop_falling/proc/create_blood_structure() + playsound(src, 'sound/effects/snap.ogg', 50, TRUE) + new /obj/structure/leaper_bubble(get_turf(src)) + +/obj/effect/temp_visual/shadow_telegraph + name = "shadow" + icon = 'icons/effects/effects.dmi' + icon_state = "shadow_telegraph" + duration = 1.5 SECONDS + + +// flop ability +/datum/action/cooldown/mob_cooldown/belly_flop + name = "Belly Flop" + desc = "Belly flop your enemy!" + cooldown_time = 14 SECONDS + background_icon_state = "bg_revenant" + overlay_icon_state = "bg_revenant_border" + shared_cooldown = NONE + melee_cooldown_time = 0 SECONDS + +/datum/action/cooldown/mob_cooldown/belly_flop/Activate(atom/target) + var/turf/target_turf = get_turf(target) + if(isclosedturf(target_turf) || isspaceturf(target_turf)) + owner.balloon_alert(owner, "base not suitable!") + return FALSE + new /obj/effect/temp_visual/leaper_crush(target_turf) + owner.throw_at(target = target_turf, range = 7, speed = 1, spin = FALSE, callback = CALLBACK(src, PROC_REF(flop_on_turf), target_turf)) + StartCooldown() + return TRUE + +/datum/action/cooldown/mob_cooldown/belly_flop/proc/flop_on_turf(turf/target, original_pixel_y) + playsound(get_turf(owner), 'sound/effects/meteorimpact.ogg', 200, TRUE) + for(var/mob/living/victim in oview(1, owner)) + if(victim in owner.buckled_mobs) + continue + victim.apply_damage(35) + if(QDELETED(victim)) // Some mobs are deleted on death + continue + var/throw_dir = victim.loc == owner.loc ? get_dir(owner, victim) : pick(GLOB.alldirs) + var/throwtarget = get_edge_target_turf(victim, throw_dir) + victim.throw_at(target = throwtarget, range = 3, speed = 1) + victim.visible_message(span_warning("[victim] is thrown clear of [owner]!")) + +// flop ability effects +/obj/effect/temp_visual/leaper_crush + name = "grim tidings" + desc = "Incoming leaper!" + icon = 'icons/effects/96x96.dmi' + icon_state = "lily_pad" + layer = BELOW_MOB_LAYER + plane = GAME_PLANE + SET_BASE_PIXEL(-32, -32) + duration = 3 SECONDS + +// summon toads ability +/datum/action/cooldown/spell/conjure/limit_summons/create_suicide_toads + name = "Summon Suicide Toads" + button_icon = 'icons/mob/simple/animal.dmi' + button_icon_state = "frog_trash" + background_icon_state = "bg_revenant" + overlay_icon_state = "bg_revenant_border" + spell_requirements = NONE + cooldown_time = 30 SECONDS + summon_type = list(/mob/living/basic/frog/frog_suicide) + summon_radius = 2 + summon_amount = 2 + max_summons = 2 + +/datum/action/cooldown/spell/conjure/limit_summons/create_suicide_toads/post_summon(atom/summoned_object, atom/cast_on) + . = ..() + var/mob/living/summoned_toad = summoned_object + summoned_toad.faction = owner.faction ///so they dont attack the leaper or the wizard master diff --git a/code/modules/mob/living/basic/jungle/leaper/leaper_ai.dm b/code/modules/mob/living/basic/jungle/leaper/leaper_ai.dm new file mode 100644 index 00000000000000..e776117a3a5961 --- /dev/null +++ b/code/modules/mob/living/basic/jungle/leaper/leaper_ai.dm @@ -0,0 +1,73 @@ +/datum/ai_controller/basic_controller/leaper + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/pet_planning, + /datum/ai_planning_subtree/targeted_mob_ability/pointed_bubble, + /datum/ai_planning_subtree/targeted_mob_ability/flop, + /datum/ai_planning_subtree/targeted_mob_ability/volley, + /datum/ai_planning_subtree/targeted_mob_ability/summon, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/go_for_swim, + ) + +/datum/ai_planning_subtree/targeted_mob_ability/pointed_bubble + ability_key = BB_LEAPER_BUBBLE + finish_planning = FALSE + +/datum/ai_planning_subtree/targeted_mob_ability/flop + ability_key = BB_LEAPER_FLOP + finish_planning = FALSE + +/datum/ai_planning_subtree/targeted_mob_ability/flop/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/atom/current_target = controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET] + if(isclosedturf(current_target) || isspaceturf(current_target)) + return + return ..() + +/datum/ai_planning_subtree/targeted_mob_ability/volley + ability_key = BB_LEAPER_VOLLEY + finish_planning = FALSE + +/datum/ai_planning_subtree/targeted_mob_ability/summon + ability_key = BB_LEAPER_SUMMON + finish_planning = FALSE + +/datum/pet_command/point_targeting/use_ability/flop + command_name = "Flop" + command_desc = "Command your pet to belly flop your target!" + radial_icon = 'icons/mob/actions/actions_items.dmi' + radial_icon_state = "sniper_zoom" + speech_commands = list("flop", "crush") + pet_ability_key = BB_LEAPER_FLOP + +/datum/pet_command/point_targeting/use_ability/bubble + command_name = "Poison Bubble" + command_desc = "Launch poisonous bubbles at your target!" + radial_icon = 'icons/obj/weapons/guns/projectiles.dmi' + radial_icon_state = "leaper" + speech_commands = list("bubble", "shoot") + pet_ability_key = BB_LEAPER_BUBBLE + +/datum/pet_command/untargeted_ability/blood_rain + command_name = "Blood Rain" + command_desc = "Let it rain poisonous blood!" + radial_icon = 'icons/effects/effects.dmi' + radial_icon_state = "blood_effect_falling" + speech_commands = list("blood", "rain", "volley") + ability_key = BB_LEAPER_VOLLEY + + +/datum/pet_command/untargeted_ability/summon_toad + command_name = "Summon Toads" + command_desc = "Summon crazy suicide frogs!" + radial_icon = 'icons/mob/simple/animal.dmi' + radial_icon_state = "frog_trash" + speech_commands = list("frogs", "bombers") + ability_key = BB_LEAPER_SUMMON diff --git a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid.dm b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid.dm index bb109fdde61a8c..3a6ed50db10866 100644 --- a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid.dm +++ b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid.dm @@ -36,16 +36,16 @@ /mob/living/basic/mega_arachnid/Initialize(mapload) . = ..() - AddComponent(/datum/component/seethrough_mob) - var/datum/action/cooldown/spell/pointed/projectile/flesh_restraints/restrain = new(src) - var/datum/action/cooldown/mob_cooldown/secrete_acid/acid_spray = new(src) - acid_spray.Grant(src) - restrain.Grant(src) + var/static/list/innate_actions = list( + /datum/action/cooldown/mob_cooldown/secrete_acid = BB_ARACHNID_SLIP, + /datum/action/cooldown/spell/pointed/projectile/flesh_restraints = BB_ARACHNID_RESTRAIN, + ) + grant_actions_by_list(innate_actions) + AddElement(/datum/element/swabable, CELL_LINE_TABLE_MEGA_ARACHNID, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) + AddComponent(/datum/component/seethrough_mob) AddComponent(/datum/component/appearance_on_aggro, alpha_on_aggro = 255, alpha_on_deaggro = alpha) AddComponent(/datum/component/tree_climber, climbing_distance = 15) - ai_controller.set_blackboard_key(BB_ARACHNID_RESTRAIN, restrain) - ai_controller.set_blackboard_key(BB_ARACHNID_SLIP, acid_spray) /mob/living/basic/mega_arachnid/Login() . = ..() diff --git a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_abilities.dm b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_abilities.dm index 6e8ff992891bf8..d82812b62a3923 100644 --- a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_abilities.dm +++ b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_abilities.dm @@ -22,7 +22,7 @@ if(!iscarbon(target) || blocked >= 100) return var/obj/item/restraints/legcuffs/beartrap/mega_arachnid/restraint = new(get_turf(target)) - restraint.spring_trap(null, target) + restraint.spring_trap(target) /obj/item/restraints/legcuffs/beartrap/mega_arachnid name = "fleshy restraints" diff --git a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_ai.dm b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_ai.dm index 8964ebf837ec18..fa2a86787d861b 100644 --- a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_ai.dm +++ b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_ai.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/mega_arachnid blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_BASIC_MOB_FLEE_DISTANCE = 5, ) diff --git a/code/modules/mob/living/basic/jungle/seedling/seedling.dm b/code/modules/mob/living/basic/jungle/seedling/seedling.dm index 998f693d6da178..5a958d3ca7c184 100644 --- a/code/modules/mob/living/basic/jungle/seedling/seedling.dm +++ b/code/modules/mob/living/basic/jungle/seedling/seedling.dm @@ -56,12 +56,12 @@ /mob/living/basic/seedling/Initialize(mapload) . = ..() - var/datum/action/cooldown/mob_cooldown/projectile_attack/rapid_fire/seedling/seed_attack = new(src) - seed_attack.Grant(src) - ai_controller.set_blackboard_key(BB_RAPIDSEEDS_ABILITY, seed_attack) - var/datum/action/cooldown/mob_cooldown/solarbeam/beam_attack = new(src) - beam_attack.Grant(src) - ai_controller.set_blackboard_key(BB_SOLARBEAM_ABILITY, beam_attack) + var/static/list/innate_actions = list( + /datum/action/cooldown/mob_cooldown/projectile_attack/rapid_fire/seedling = BB_RAPIDSEEDS_ABILITY, + /datum/action/cooldown/mob_cooldown/solarbeam = BB_SOLARBEAM_ABILITY, + ) + + grant_actions_by_list(innate_actions) var/petal_color = pick(possible_colors) @@ -77,7 +77,7 @@ petal_dead = mutable_appearance(icon, "[icon_state]_dead_overlay") petal_dead.color = petal_color - AddElement(/datum/element/wall_smasher) + AddElement(/datum/element/wall_tearer, allow_reinforced = FALSE) AddComponent(/datum/component/obeys_commands, seedling_commands) RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) RegisterSignal(src, COMSIG_KB_MOB_DROPITEM_DOWN, PROC_REF(drop_can)) @@ -212,9 +212,9 @@ /datum/pet_command/idle, /datum/pet_command/free, /datum/pet_command/follow, - /datum/pet_command/point_targetting/attack, - /datum/pet_command/point_targetting/use_ability/solarbeam, - /datum/pet_command/point_targetting/use_ability/rapidseeds, + /datum/pet_command/point_targeting/attack, + /datum/pet_command/point_targeting/use_ability/solarbeam, + /datum/pet_command/point_targeting/use_ability/rapidseeds, ) //abilities diff --git a/code/modules/mob/living/basic/jungle/seedling/seedling_ai.dm b/code/modules/mob/living/basic/jungle/seedling/seedling_ai.dm index e3f9fe083a63ad..2ed4811e46f255 100644 --- a/code/modules/mob/living/basic/jungle/seedling/seedling_ai.dm +++ b/code/modules/mob/living/basic/jungle/seedling/seedling_ai.dm @@ -1,7 +1,7 @@ /datum/ai_controller/basic_controller/seedling blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, BB_WEEDLEVEL_THRESHOLD = 3, BB_WATERLEVEL_THRESHOLD = 90, ) @@ -141,8 +141,8 @@ /datum/ai_controller/basic_controller/seedling/meanie blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, ) planning_subtrees = list( /datum/ai_planning_subtree/pet_planning, @@ -161,7 +161,7 @@ finish_planning = FALSE ///pet commands -/datum/pet_command/point_targetting/use_ability/solarbeam +/datum/pet_command/point_targeting/use_ability/solarbeam command_name = "Launch solarbeam" command_desc = "Command your pet to launch a solarbeam at your target!" radial_icon = 'icons/effects/beam.dmi' @@ -169,7 +169,7 @@ speech_commands = list("beam", "solar") pet_ability_key = BB_SOLARBEAM_ABILITY -/datum/pet_command/point_targetting/use_ability/rapidseeds +/datum/pet_command/point_targeting/use_ability/rapidseeds command_name = "Rapid seeds" command_desc = "Command your pet to launch a volley of seeds at your target!" radial_icon = 'icons/obj/weapons/guns/projectiles.dmi' diff --git a/code/modules/mob/living/basic/jungle/venus_human_trap.dm b/code/modules/mob/living/basic/jungle/venus_human_trap.dm index ac4e5c9db24bc9..f9306afe20e6e1 100644 --- a/code/modules/mob/living/basic/jungle/venus_human_trap.dm +++ b/code/modules/mob/living/basic/jungle/venus_human_trap.dm @@ -16,7 +16,6 @@ icon = 'icons/mob/spacevines.dmi' icon_state = "bud0" layer = SPACEVINE_MOB_LAYER - plane = GAME_PLANE_UPPER_FOV_HIDDEN opacity = FALSE canSmoothWith = null smoothing_flags = NONE @@ -135,7 +134,6 @@ health_doll_icon = "venus_human_trap" mob_biotypes = MOB_ORGANIC | MOB_PLANT layer = SPACEVINE_MOB_LAYER - plane = GAME_PLANE_UPPER_FOV_HIDDEN health = 100 maxHealth = 100 obj_damage = 60 @@ -165,7 +163,7 @@ melee_attack_cooldown = 1.2 SECONDS ai_controller = /datum/ai_controller/basic_controller/human_trap ///how much damage we take out of weeds - var/no_weed_damage = 20 + var/no_weed_damage = 12.5 ///how much do we heal in weeds var/weed_heal = 10 ///if the balloon alert was shown atleast once, reset after healing in weeds @@ -174,14 +172,15 @@ /mob/living/basic/venus_human_trap/Initialize(mapload) . = ..() AddElement(/datum/element/lifesteal, 5) - var/datum/action/cooldown/vine_tangle/tangle = new(src) - tangle.Grant(src) - ai_controller.set_blackboard_key(BB_TARGETTED_ACTION, tangle) + var/static/list/innate_actions = list( + /datum/action/cooldown/vine_tangle = BB_TARGETED_ACTION, + ) + grant_actions_by_list(innate_actions) /mob/living/basic/venus_human_trap/RangedAttack(atom/victim) if(!combat_mode) return - var/datum/action/cooldown/mob_cooldown/tangle_ability = ai_controller.blackboard[BB_TARGETTED_ACTION] + var/datum/action/cooldown/mob_cooldown/tangle_ability = ai_controller.blackboard[BB_TARGETED_ACTION] if(!istype(tangle_ability)) return tangle_ability.Trigger(target = victim) @@ -198,7 +197,7 @@ else if(vines_in_range) alert_shown = FALSE - apply_damage(vines_in_range ? -weed_heal : no_weed_damage, BRUTE) //every life tick take 20 brute if not near vines or heal 10 if near vines, 5 times out of weeds = u ded + adjustBruteLoss(vines_in_range ? -weed_heal : no_weed_damage) //every life tick take 20 damage if not near vines or heal 10 if near vines, 5 times out of weeds = u ded /datum/action/cooldown/vine_tangle name = "Tangle" @@ -254,7 +253,7 @@ /datum/ai_controller/basic_controller/human_trap blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/lavaland/basilisk/basilisk.dm b/code/modules/mob/living/basic/lavaland/basilisk/basilisk.dm index d4fef239bf84f4..6c1f5ba0846cd1 100644 --- a/code/modules/mob/living/basic/lavaland/basilisk/basilisk.dm +++ b/code/modules/mob/living/basic/lavaland/basilisk/basilisk.dm @@ -6,7 +6,7 @@ icon_living = "basilisk" icon_dead = "basilisk_dead" speak_emote = list("chimes") - damage_coeff = list(BRUTE = 1, BURN = 0.1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) + damage_coeff = list(BRUTE = 1, BURN = 0.1, TOX = 1, STAMINA = 0, OXY = 1) speed = 20 maxHealth = 200 health = 200 @@ -77,7 +77,7 @@ /datum/ai_controller/basic_controller/basilisk blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_AGGRO_RANGE = 5, ) diff --git a/code/modules/mob/living/basic/lavaland/bileworm/_bileworm.dm b/code/modules/mob/living/basic/lavaland/bileworm/_bileworm.dm index 3d6bc299ccd815..b66e5eff8a5c65 100644 --- a/code/modules/mob/living/basic/lavaland/bileworm/_bileworm.dm +++ b/code/modules/mob/living/basic/lavaland/bileworm/_bileworm.dm @@ -37,8 +37,6 @@ /mob/living/basic/mining/bileworm/Initialize(mapload) . = ..() - //traits and elements - ADD_TRAIT(src, TRAIT_IMMOBILIZED, INNATE_TRAIT) if(ispath(evolve_path)) @@ -47,16 +45,15 @@ //setup mob abilities - var/datum/action/cooldown/mob_cooldown/projectile_attack/dir_shots/bileworm/spew_bile = new attack_action_path(src) - spew_bile.Grant(src) //well, one of them has to start on infinite cooldown + var/datum/action/cooldown/mob_cooldown/projectile_attack/dir_shots/bileworm/spew_bile = new(src) + spew_bile.Grant(src) spew_bile.StartCooldownSelf(INFINITY) - var/datum/action/cooldown/mob_cooldown/resurface/resurface = new(src) - resurface.Grant(src) - var/datum/action/cooldown/mob_cooldown/devour/devour = new(src) - devour.Grant(src) - var/datum/action/adjust_vision/bileworm/adjust_vision = new(src) - adjust_vision.Grant(src) - ai_controller.set_blackboard_key(BB_BILEWORM_SPEW_BILE, spew_bile) - ai_controller.set_blackboard_key(BB_BILEWORM_RESURFACE, resurface) - ai_controller.set_blackboard_key(BB_BILEWORM_DEVOUR, devour) + ai_controller?.set_blackboard_key(BB_BILEWORM_SPEW_BILE, spew_bile) + + var/static/list/other_innate_actions = list( + /datum/action/adjust_vision/bileworm = null, + /datum/action/cooldown/mob_cooldown/devour = BB_BILEWORM_DEVOUR, + /datum/action/cooldown/mob_cooldown/resurface = BB_BILEWORM_RESURFACE, + ) + grant_actions_by_list(other_innate_actions) diff --git a/code/modules/mob/living/basic/lavaland/bileworm/bileworm_actions.dm b/code/modules/mob/living/basic/lavaland/bileworm/bileworm_actions.dm index 9c5e2697f63b2a..7993fe74a3f57d 100644 --- a/code/modules/mob/living/basic/lavaland/bileworm/bileworm_actions.dm +++ b/code/modules/mob/living/basic/lavaland/bileworm/bileworm_actions.dm @@ -120,5 +120,5 @@ devourer.visible_message(span_warning("[devourer] consumes [target]!")) devourer.fully_heal() playsound(devourer, 'sound/effects/splat.ogg', 50, TRUE) - //to be recieved on death + //to be received on death target.forceMove(devourer) diff --git a/code/modules/mob/living/basic/lavaland/bileworm/bileworm_ai.dm b/code/modules/mob/living/basic/lavaland/bileworm/bileworm_ai.dm index 0093e69220c172..aa3e06af16ada7 100644 --- a/code/modules/mob/living/basic/lavaland/bileworm/bileworm_ai.dm +++ b/code/modules/mob/living/basic/lavaland/bileworm/bileworm_ai.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/bileworm blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/bileworm(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/bileworm, ) planning_subtrees = list( @@ -9,7 +9,7 @@ /datum/ai_planning_subtree/bileworm_execute, ) -/datum/targetting_datum/basic/bileworm +/datum/targeting_strategy/basic/bileworm ignore_sight = TRUE /datum/ai_planning_subtree/bileworm_attack @@ -22,11 +22,16 @@ //because one ability is always INFINITY cooldown, this actually works to check which ability should be used //sometimes it will try to spew bile on infinity cooldown, but that's okay because as soon as resurface is ready it will attempt that - if(!QDELETED(resurface) && resurface.next_use_time <= world.time) + + if(resurface?.IsAvailable()) controller.queue_behavior(/datum/ai_behavior/targeted_mob_ability/and_plan_execute, BB_BILEWORM_RESURFACE, BB_BASIC_MOB_CURRENT_TARGET) - else + return SUBTREE_RETURN_FINISH_PLANNING + + var/datum/action/cooldown/mob_cooldown/bile = controller.blackboard[BB_BILEWORM_SPEW_BILE] + + if(bile?.IsAvailable()) controller.queue_behavior(/datum/ai_behavior/targeted_mob_ability/and_plan_execute, BB_BILEWORM_SPEW_BILE, BB_BASIC_MOB_CURRENT_TARGET) - return SUBTREE_RETURN_FINISH_PLANNING //focus on the fight + return SUBTREE_RETURN_FINISH_PLANNING //focus on the fight /datum/ai_planning_subtree/bileworm_execute @@ -35,9 +40,15 @@ var/atom/movable/target = controller.blackboard[BB_BASIC_MOB_EXECUTION_TARGET] if(QDELETED(target) || !isliving(target)) return + + var/datum/action/cooldown/mob_cooldown/devour = controller.blackboard[BB_BILEWORM_DEVOUR] + + if(!(devour?.IsAvailable())) + return + var/mob/living/living_target = target if(living_target.stat < UNCONSCIOUS) return - controller.queue_behavior(/datum/ai_behavior/targeted_mob_ability, BB_BILEWORM_DEVOUR, BB_BASIC_MOB_EXECUTION_TARGET) + controller.queue_behavior(/datum/ai_behavior/targeted_mob_ability/and_clear_target, BB_BILEWORM_DEVOUR, BB_BASIC_MOB_EXECUTION_TARGET) return SUBTREE_RETURN_FINISH_PLANNING //focus on devouring this fool diff --git a/code/modules/mob/living/basic/lavaland/brimdemon/brimbeam.dm b/code/modules/mob/living/basic/lavaland/brimdemon/brimbeam.dm index b8e2bb68c69eaf..21169ffd36889f 100644 --- a/code/modules/mob/living/basic/lavaland/brimdemon/brimbeam.dm +++ b/code/modules/mob/living/basic/lavaland/brimdemon/brimbeam.dm @@ -66,9 +66,10 @@ break if(blocked) break - var/atom/new_brimbeam = new /obj/effect/brimbeam(affected_turf) + var/obj/effect/brimbeam/new_brimbeam = new(affected_turf) new_brimbeam.dir = owner.dir beam_parts += new_brimbeam + new_brimbeam.assign_creator(owner) for(var/mob/living/hit_mob in affected_turf.contents) hit_mob.apply_damage(damage = 25, damagetype = BURN) to_chat(hit_mob, span_userdanger("You're blasted by [owner]'s brimbeam!")) @@ -101,6 +102,8 @@ light_color = LIGHT_COLOR_BLOOD_MAGIC light_power = 3 light_range = 2 + /// Who made us? + var/datum/weakref/creator /obj/effect/brimbeam/Initialize(mapload) . = ..() @@ -111,7 +114,10 @@ return ..() /obj/effect/brimbeam/process() + var/atom/ignore = creator?.resolve() for(var/mob/living/hit_mob in get_turf(src)) + if(hit_mob == ignore) + continue damage(hit_mob) /// Hurt the passed mob @@ -119,6 +125,10 @@ hit_mob.apply_damage(damage = 5, damagetype = BURN) to_chat(hit_mob, span_danger("You're damaged by [src]!")) +/// Ignore damage dealt to this mob +/obj/effect/brimbeam/proc/assign_creator(mob/living/maker) + creator = WEAKREF(maker) + /// Disappear /obj/effect/brimbeam/proc/disperse() animate(src, time = 0.5 SECONDS, alpha = 0) diff --git a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon.dm b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon.dm index 2c22977d9c6372..9a88c636cf511c 100644 --- a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon.dm +++ b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon.dm @@ -41,11 +41,7 @@ AddElement(/datum/element/footstep, FOOTSTEP_MOB_CLAW) beam = new(src) beam.Grant(src) - ai_controller.set_blackboard_key(BB_TARGETTED_ACTION, beam) - -/mob/living/basic/mining/brimdemon/Destroy() - QDEL_NULL(beam) - return ..() + ai_controller.set_blackboard_key(BB_TARGETED_ACTION, beam) /mob/living/basic/mining/brimdemon/RangedAttack(atom/target, modifiers) beam.Trigger(target = target) diff --git a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_ai.dm b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_ai.dm index 18f614359c066b..0012aff294d40b 100644 --- a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_ai.dm +++ b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_ai.dm @@ -3,7 +3,7 @@ */ /datum/ai_controller/basic_controller/brimdemon blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) @@ -25,11 +25,11 @@ /datum/ai_behavior/move_to_cardinal/brimdemon/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() - if (!succeeded) + if(!succeeded) return var/mob/living/target = controller.blackboard[target_key] - var/datum/action/cooldown/ability = controller.blackboard[BB_TARGETTED_ACTION] - if(!ability?.IsAvailable()) + var/datum/action/cooldown/ability = controller.blackboard[BB_TARGETED_ACTION] + if(QDELETED(target) || QDELETED(controller.pawn) || !ability?.IsAvailable()) return ability.InterceptClickOn(caller = controller.pawn, target = target) diff --git a/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub.dm b/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub.dm index fe1cc00110134f..afc87fb7ce522f 100644 --- a/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub.dm +++ b/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub.dm @@ -36,7 +36,7 @@ /datum/pet_command/free, /datum/pet_command/grub_spit, /datum/pet_command/follow, - /datum/pet_command/point_targetting/fetch, + /datum/pet_command/point_targeting/fetch, ) /mob/living/basic/mining/goldgrub/Initialize(mapload) @@ -47,13 +47,14 @@ else can_lay_eggs = FALSE - var/datum/action/cooldown/mob_cooldown/spit_ore/spit = new(src) - var/datum/action/cooldown/mob_cooldown/burrow/burrow = new(src) - spit.Grant(src) - burrow.Grant(src) - ai_controller.set_blackboard_key(BB_SPIT_ABILITY, spit) - ai_controller.set_blackboard_key(BB_BURROW_ABILITY, burrow) - AddElement(/datum/element/wall_smasher) + var/static/list/innate_actions = list( + /datum/action/cooldown/mob_cooldown/spit_ore = BB_SPIT_ABILITY, + /datum/action/cooldown/mob_cooldown/burrow = BB_BURROW_ABILITY, + ) + grant_actions_by_list(innate_actions) + + AddElement(/datum/element/ore_collecting) + AddElement(/datum/element/wall_tearer, allow_reinforced = FALSE) AddComponent(/datum/component/ai_listen_to_weather) AddComponent(\ /datum/component/appearance_on_aggro,\ @@ -67,23 +68,16 @@ RegisterSignal(src, COMSIG_ATOM_PRE_BULLET_ACT, PROC_REF(block_bullets)) -/mob/living/basic/mining/goldgrub/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) - . = ..() - if(!.) - return - - if(!proximity_flag) - return - - if(istype(attack_target, /obj/item/stack/ore)) - consume_ore(attack_target) - /mob/living/basic/mining/goldgrub/proc/block_bullets(datum/source, obj/projectile/hitting_projectile) SIGNAL_HANDLER if(stat != CONSCIOUS) return COMPONENT_BULLET_PIERCED + ///high penetration bullets should still go through. No goldgrub can save you from the colossus' death bolts. + if(prob(hitting_projectile.armour_penetration)) + return NONE + visible_message(span_danger("[hitting_projectile] is repelled by [source]'s girth!")) return COMPONENT_BULLET_BLOCKED @@ -135,12 +129,14 @@ max_eggs_held = 1,\ ) -/mob/living/basic/mining/goldgrub/proc/consume_ore(obj/item/target_ore) +/mob/living/basic/mining/goldgrub/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + . = ..() + if(!istype(arrived, /obj/item/stack/ore)) + return playsound(src,'sound/items/eatfood.ogg', rand(10,50), TRUE) - target_ore.forceMove(src) if(!can_lay_eggs) return - if(!istype(target_ore, /obj/item/stack/ore/bluespace_crystal) || prob(60)) + if(!istype(arrived, /obj/item/stack/ore/bluespace_crystal) || prob(60)) return new /obj/item/food/egg/green/grub_egg(get_turf(src)) diff --git a/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm b/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm index 7e7a72ec412063..53054052e58af3 100644 --- a/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm +++ b/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm @@ -1,7 +1,7 @@ /datum/ai_controller/basic_controller/goldgrub blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, BB_ORE_IGNORE_TYPES = list(/obj/item/stack/ore/iron, /obj/item/stack/ore/glass), BB_STORM_APPROACHING = FALSE, ) @@ -20,7 +20,7 @@ /datum/ai_controller/basic_controller/babygrub blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_ORE_IGNORE_TYPES = list(/obj/item/stack/ore/glass), BB_FIND_MOM_TYPES = list(/mob/living/basic/mining/goldgrub), BB_IGNORE_MOM_TYPES = list(/mob/living/basic/mining/goldgrub/baby), diff --git a/code/modules/mob/living/basic/lavaland/goliath/goliath.dm b/code/modules/mob/living/basic/lavaland/goliath/goliath.dm index 6f57e1dec67ddb..6d197d8853a761 100644 --- a/code/modules/mob/living/basic/lavaland/goliath/goliath.dm +++ b/code/modules/mob/living/basic/lavaland/goliath/goliath.dm @@ -44,6 +44,8 @@ COOLDOWN_DECLARE(ability_animation_cooldown) /// Our base tentacles ability var/datum/action/cooldown/mob_cooldown/goliath_tentacles/tentacles + /// Our melee tentacles ability + var/datum/action/cooldown/mob_cooldown/tentacle_burst/melee_tentacles /// Our long-ranged tentacles ability var/datum/action/cooldown/mob_cooldown/tentacle_grasp/tentacle_line /// Things we want to eat off the floor (or a plate, we're not picky) @@ -76,24 +78,18 @@ tentacles = new (src) tentacles.Grant(src) - var/datum/action/cooldown/mob_cooldown/tentacle_burst/melee_tentacles = new (src) + melee_tentacles = new(src) melee_tentacles.Grant(src) - AddComponent(/datum/component/revenge_ability, melee_tentacles, targetting = ai_controller.blackboard[BB_TARGETTING_DATUM], max_range = 1, target_self = TRUE) + AddComponent(/datum/component/revenge_ability, melee_tentacles, targeting = GET_TARGETING_STRATEGY(ai_controller.blackboard[BB_TARGETING_STRATEGY]), max_range = 1, target_self = TRUE) tentacle_line = new (src) tentacle_line.Grant(src) - AddComponent(/datum/component/revenge_ability, tentacle_line, targetting = ai_controller.blackboard[BB_TARGETTING_DATUM], min_range = 2, max_range = 9) + AddComponent(/datum/component/revenge_ability, tentacle_line, targeting = GET_TARGETING_STRATEGY(ai_controller.blackboard[BB_TARGETING_STRATEGY]), min_range = 2, max_range = 9) tentacles_ready() RegisterSignal(src, COMSIG_MOB_ABILITY_FINISHED, PROC_REF(used_ability)) - ai_controller.set_blackboard_key(BB_BASIC_FOODS, goliath_foods) + ai_controller.set_blackboard_key(BB_BASIC_FOODS, typecacheof(goliath_foods)) ai_controller.set_blackboard_key(BB_GOLIATH_TENTACLES, tentacles) - -/mob/living/basic/mining/goliath/Destroy() - QDEL_NULL(tentacles) - QDEL_NULL(tentacle_line) - return ..() - /mob/living/basic/mining/goliath/examine(mob/user) . = ..() if (saddled) diff --git a/code/modules/mob/living/basic/lavaland/goliath/goliath_actions.dm b/code/modules/mob/living/basic/lavaland/goliath/goliath_actions.dm index b484afa0cea360..31eecc03629067 100644 --- a/code/modules/mob/living/basic/lavaland/goliath/goliath_actions.dm +++ b/code/modules/mob/living/basic/lavaland/goliath/goliath_actions.dm @@ -1,7 +1,7 @@ /// Place some grappling tentacles underfoot /datum/action/cooldown/mob_cooldown/goliath_tentacles name = "Unleash Tentacles" - desc = "Unleash burrowed tentacles at a targetted location, grappling targets after a delay." + desc = "Unleash burrowed tentacles at a targeted location, grappling targets after a delay." button_icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' button_icon_state = "goliath_tentacle_wiggle" background_icon_state = "bg_demon" @@ -59,7 +59,7 @@ /// Summon a line of tentacles towards the target /datum/action/cooldown/mob_cooldown/tentacle_grasp name = "Tentacle Grasp" - desc = "Unleash burrowed tentacles in a line towards a targetted location, grappling targets after a delay." + desc = "Unleash burrowed tentacles in a line towards a targeted location, grappling targets after a delay." button_icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' button_icon_state = "goliath_tentacle_wiggle" background_icon_state = "bg_demon" diff --git a/code/modules/mob/living/basic/lavaland/goliath/goliath_ai.dm b/code/modules/mob/living/basic/lavaland/goliath/goliath_ai.dm index 48f0e213e73fbf..76c230520df349 100644 --- a/code/modules/mob/living/basic/lavaland/goliath/goliath_ai.dm +++ b/code/modules/mob/living/basic/lavaland/goliath/goliath_ai.dm @@ -3,7 +3,7 @@ /datum/ai_controller/basic_controller/goliath blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) @@ -27,7 +27,7 @@ /// Go for the tentacles if they're available /datum/ai_behavior/basic_melee_attack/goliath -/datum/ai_behavior/basic_melee_attack/goliath/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key, health_ratio_key) +/datum/ai_behavior/basic_melee_attack/goliath/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key, health_ratio_key) var/time_on_target = controller.blackboard[BB_BASIC_MOB_HAS_TARGET_TIME] || 0 if (time_on_target < MIN_TIME_TO_TENTACLE) return ..() diff --git a/code/modules/mob/living/basic/lavaland/gutlunchers/gutluncher_foodtrough.dm b/code/modules/mob/living/basic/lavaland/gutlunchers/gutluncher_foodtrough.dm new file mode 100644 index 00000000000000..1ac43c13eb4436 --- /dev/null +++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutluncher_foodtrough.dm @@ -0,0 +1,40 @@ +/obj/structure/ore_container/gutlunch_trough + name = "gutlunch trough" + desc = "The gutlunches will eat out of it!" + icon = 'icons/obj/structures.dmi' + icon_state = "gutlunch_trough" + density = TRUE + anchored = TRUE + ///list of materials in the trough + var/list/list_of_materials = list() + +/obj/structure/ore_container/gutlunch_trough/Entered(atom/movable/mover) + if(!istype(mover, /obj/item/stack/ore)) + return ..() + if(list_of_materials[mover.type]) + return ..() + list_of_materials[mover.type] = list("pixel_x" = rand(-5, 8), "pixel_y" = rand(-2, -7)) + return ..() + +/obj/structure/ore_container/gutlunch_trough/Exited(atom/movable/mover) + if(!istype(mover, /obj/item/stack/ore) || !isnull(locate(mover.type) in contents)) + return ..() + list_of_materials -= mover.type + return ..() + +/obj/structure/ore_container/gutlunch_trough/deconstruct(disassembled = TRUE) + if(obj_flags & NO_DECONSTRUCTION) + return + new /obj/item/stack/sheet/mineral/wood(drop_location(), 5) + qdel(src) + +/obj/structure/ore_container/gutlunch_trough/update_overlays() + . = ..() + for(var/ore_entry in list_of_materials) + var/obj/item/ore_item = ore_entry + var/image/ore_icon = image(icon = initial(ore_item.icon), icon_state = initial(ore_item.icon_state), layer = LOW_ITEM_LAYER) + var/list/pixel_positions = list_of_materials[ore_entry] + ore_icon.transform = ore_icon.transform.Scale(0.4, 0.4) + ore_icon.pixel_x = pixel_positions["pixel_x"] + ore_icon.pixel_y = pixel_positions["pixel_y"] + . += ore_icon diff --git a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm new file mode 100644 index 00000000000000..6d8f91ff8ce5c9 --- /dev/null +++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm @@ -0,0 +1,172 @@ +#define MAX_ATTACK_DIFFERENCE 3 +#define MAX_LOWER_ATTACK 15 +#define MINIMUM_POSSIBLE_SPEED 1 +#define MAX_POSSIBLE_HEALTH 100 + +/mob/living/basic/mining/gutlunch + name = "gutlunch" + desc = "A scavenger that eats raw ores, often found alongside ash walkers. Produces a thick, nutritious milk." + icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' + icon_state = "gutlunch" + combat_mode = FALSE + icon_living = "gutlunch" + icon_dead = "gutlunch" + mob_biotypes = MOB_ORGANIC|MOB_BEAST + basic_mob_flags = DEL_ON_DEATH + speak_emote = list("warbles", "quavers") + faction = list(FACTION_ASHWALKER) + response_help_continuous = "pets" + response_help_simple = "pet" + response_disarm_continuous = "gently pushes aside" + response_disarm_simple = "gently push aside" + response_harm_continuous = "squishes" + response_harm_simple = "squish" + friendly_verb_continuous = "pinches" + friendly_verb_simple = "pinch" + gold_core_spawnable = FRIENDLY_SPAWN + death_message = "is pulped into bugmash." + greyscale_config = /datum/greyscale_config/gutlunch + ///possible colors we can have + var/list/possible_colors = list(COLOR_WHITE) + ///can we breed? + var/can_breed = TRUE + +/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))) + AddElement(/datum/element/ai_retaliate) + if(!can_breed) + return + AddComponent(\ + /datum/component/breed,\ + can_breed_with = typecacheof(list(/mob/living/basic/mining/gutlunch)),\ + baby_path = /mob/living/basic/mining/gutlunch/grub,\ + post_birth = CALLBACK(src, PROC_REF(after_birth)),\ + 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 + + if(!istype(target, /obj/structure/ore_container/gutlunch_trough)) + return + + var/obj/ore_food = locate(/obj/item/stack/ore) in target + + if(isnull(ore_food)) + balloon_alert(src, "no food!") + else + melee_attack(ore_food) + return COMPONENT_HOSTILE_NO_ATTACK + +/mob/living/basic/mining/gutlunch/proc/after_birth(mob/living/basic/mining/gutlunch/grub/baby, mob/living/partner) + var/our_color = LAZYACCESS(atom_colours, FIXED_COLOUR_PRIORITY) || COLOR_GRAY + var/partner_color = LAZYACCESS(partner.atom_colours, FIXED_COLOUR_PRIORITY) || COLOR_GRAY + baby.add_atom_colour(BlendRGB(our_color, partner_color, 1), FIXED_COLOUR_PRIORITY) + var/atom/male_parent = (gender == MALE) ? src : partner + baby.inherited_stats = new(male_parent) + +/mob/living/basic/mining/gutlunch/proc/roll_stats(input_attack, input_speed, input_health) + melee_damage_lower = rand(input_attack, min(MAX_LOWER_ATTACK, input_attack + MAX_ATTACK_DIFFERENCE)) + melee_damage_upper = melee_damage_lower + MAX_ATTACK_DIFFERENCE + speed = rand(MINIMUM_POSSIBLE_SPEED, input_speed) + maxHealth = rand(input_health, MAX_POSSIBLE_HEALTH) + health = maxHealth + +/mob/living/basic/mining/gutlunch/milk + name = "gubbuck" + gender = FEMALE + possible_colors = list("#E39FBB","#817178","#9d667d") + ai_controller = /datum/ai_controller/basic_controller/gutlunch/gutlunch_milk + ///overlay we display when our udder is full! + var/mutable_appearance/full_udder + +/mob/living/basic/mining/gutlunch/milk/Initialize(mapload) + . = ..() + var/datum/callback/milking_callback = CALLBACK(src, TYPE_PROC_REF(/atom/movable, update_overlays)) + AddComponent(\ + /datum/component/udder,\ + udder_type = /obj/item/udder/gutlunch,\ + on_milk_callback = milking_callback,\ + on_generate_callback = milking_callback,\ + ) + full_udder = mutable_appearance(icon, "gl_full") + full_udder.color = LAZYACCESS(atom_colours, FIXED_COLOUR_PRIORITY) || COLOR_GRAY + +/mob/living/basic/mining/gutlunch/warrior + name = "gunther" + gender = MALE + melee_damage_lower = 8 + melee_damage_upper = 13 + speed = 5 + maxHealth = 70 + health = 70 + ai_controller = /datum/ai_controller/basic_controller/gutlunch/gutlunch_warrior + possible_colors = list("#6d77ff","#8578e4","#97b6f6") + //pet commands when we tame the gutluncher + var/static/list/pet_commands = list( + /datum/pet_command/idle, + /datum/pet_command/free, + /datum/pet_command/point_targeting/attack, + /datum/pet_command/point_targeting/breed/gutlunch, + /datum/pet_command/follow, + /datum/pet_command/point_targeting/fetch, + /datum/pet_command/mine_walls, + ) + +/mob/living/basic/mining/gutlunch/warrior/Initialize(mapload) + . = ..() + roll_stats(melee_damage_lower, speed, maxHealth) + AddComponent(/datum/component/obeys_commands, pet_commands) + AddElement(/datum/element/wall_tearer, allow_reinforced = FALSE) + +/mob/living/basic/mining/gutlunch/milk/update_overlays(new_udder_volume, max_udder_volume) + . = ..() + if(new_udder_volume != max_udder_volume) + return + . += full_udder + +/mob/living/basic/mining/gutlunch/grub + name = "grublunch" + possible_colors = list("#cc9797", "#b74c4c") + can_breed = FALSE + gender = NEUTER + ai_controller = /datum/ai_controller/basic_controller/gutlunch/gutlunch_baby + ///list of stats we inherited + var/datum/gutlunch_inherited_stats/inherited_stats + +/mob/living/basic/mining/gutlunch/grub/Initialize(mapload) + . = ..() + transform = transform.Scale(0.6, 0.6) + AddComponent(\ + /datum/component/growth_and_differentiation,\ + growth_time = 3 MINUTES,\ + growth_probability = 100,\ + lower_growth_value = 0.5,\ + upper_growth_value = 1,\ + signals_to_kill_on = list(COMSIG_MOB_CLIENT_LOGIN),\ + optional_checks = CALLBACK(src, PROC_REF(ready_to_grow)),\ + optional_grow_behavior = CALLBACK(src, PROC_REF(determine_growth_path)),\ + ) + +/mob/living/basic/mining/gutlunch/grub/proc/ready_to_grow() + return (stat == CONSCIOUS) + +/mob/living/basic/mining/gutlunch/grub/proc/determine_growth_path() + var/final_type = prob(50) ? /mob/living/basic/mining/gutlunch/warrior : /mob/living/basic/mining/gutlunch/milk + var/mob/living/basic/mining/gutlunch/grown_mob = new final_type(get_turf(src)) + if(grown_mob.gender == MALE && inherited_stats) + grown_mob.roll_stats(inherited_stats.attack, inherited_stats.speed, inherited_stats.health) + qdel(src) + +#undef MAX_ATTACK_DIFFERENCE +#undef MAX_LOWER_ATTACK +#undef MINIMUM_POSSIBLE_SPEED +#undef MAX_POSSIBLE_HEALTH diff --git a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm new file mode 100644 index 00000000000000..be45879c64bf1a --- /dev/null +++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm @@ -0,0 +1,136 @@ +#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 + +/datum/ai_controller/basic_controller/gutlunch/gutlunch_warrior + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, + BB_BABIES_PARTNER_TYPES = list(/mob/living/basic/mining/gutlunch/milk), + BB_BABIES_CHILD_TYPES = list(/mob/living/basic/mining/gutlunch/grub), + BB_MAX_CHILDREN = 5, + ) + planning_subtrees = list( + /datum/ai_planning_subtree/target_retaliate/check_faction, + /datum/ai_planning_subtree/pet_planning, + /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 + +/datum/ai_planning_subtree/befriend_ashwalkers/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + controller.queue_behavior(/datum/ai_behavior/befriend_ashwalkers) + +/datum/ai_behavior/befriend_ashwalkers + action_cooldown = 5 SECONDS + behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + +/datum/ai_behavior/befriend_ashwalkers/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + var/mob/living/living_pawn = controller.pawn + + for(var/mob/living/potential_friend in oview(9, living_pawn)) + if(!isashwalker(potential_friend)) + continue + if((living_pawn.faction.Find(REF(potential_friend)))) + continue + living_pawn.befriend(potential_friend) + to_chat(potential_friend, span_nicegreen("[living_pawn] looks at you with endearing eyes!")) + finish_action(controller, TRUE) + return + + finish_action(controller, FALSE) + return + + + +/datum/ai_controller/basic_controller/gutlunch/gutlunch_baby + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_FIND_MOM_TYPES = list(/mob/living/basic/mining/gutlunch/milk), + ) + planning_subtrees = list( + /datum/ai_planning_subtree/target_retaliate, + /datum/ai_planning_subtree/flee_target, + /datum/ai_planning_subtree/look_for_adult, + ) + +/datum/ai_controller/basic_controller/gutlunch/gutlunch_milk + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + ) + planning_subtrees = list( + /datum/ai_planning_subtree/target_retaliate, + /datum/ai_planning_subtree/flee_target, + /datum/ai_planning_subtree/find_and_hunt_target/food_trough + ) + +///consume food! +/datum/ai_planning_subtree/find_and_hunt_target/food_trough + target_key = BB_TROUGH_TARGET + hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/food_trough + finding_behavior = /datum/ai_behavior/find_hunt_target/food_trough + hunt_targets = list(/obj/structure/ore_container/gutlunch_trough) + hunt_chance = 75 + hunt_range = 9 + + +/datum/ai_planning_subtree/find_and_hunt_target/food_trough/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(!controller.blackboard[BB_CHECK_HUNGRY]) + return + return ..() + +/datum/ai_behavior/find_hunt_target/food_trough + +/datum/ai_behavior/find_hunt_target/food_trough/valid_dinner(mob/living/basic/source, obj/target, radius) + if(isnull(target)) + return FALSE + + if(isnull(locate(/obj/item/stack/ore) in target)) + return FALSE + + return can_see(source, target, radius) + +/datum/ai_behavior/hunt_target/unarmed_attack_target/food_trough + always_reset_target = TRUE + switch_combat_mode = TRUE + +/datum/pet_command/mine_walls + command_name = "Mine" + command_desc = "Command your pet to mine down walls." + speech_commands = list("mine", "smash") + +/datum/pet_command/mine_walls/try_activate_command(mob/living/commander) + var/mob/living/parent = weak_parent.resolve() + if(isnull(parent)) + return + //no walls for us to mine + var/target_in_vicinity = locate(/turf/closed/mineral) in oview(9, parent) + if(isnull(target_in_vicinity)) + return + return ..() + +/datum/pet_command/mine_walls/execute_action(datum/ai_controller/controller) + if(controller.blackboard_key_exists(BB_CURRENT_PET_TARGET)) + 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/lavaland/gutlunchers/gutlunchers_inherit_datum.dm b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_inherit_datum.dm new file mode 100644 index 00000000000000..7051dfc2f4b210 --- /dev/null +++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_inherit_datum.dm @@ -0,0 +1,14 @@ +///stats we inherit from the parent +/datum/gutlunch_inherited_stats + ///attack we inherited + var/attack + ///speed we inherited + var/speed + ///health we inherited + var/health + +/datum/gutlunch_inherited_stats/New(mob/living/basic/parent) + . = ..() + attack = parent.melee_damage_lower + speed = parent.speed + health = parent.maxHealth diff --git a/code/modules/mob/living/basic/lavaland/hivelord/hivelord.dm b/code/modules/mob/living/basic/lavaland/hivelord/hivelord.dm index 11043e58d11ead..7b1e461991ce78 100644 --- a/code/modules/mob/living/basic/lavaland/hivelord/hivelord.dm +++ b/code/modules/mob/living/basic/lavaland/hivelord/hivelord.dm @@ -36,7 +36,7 @@ AddComponent(/datum/component/appearance_on_aggro, aggro_state = "hivelord_alert") spawn_brood = new(src) spawn_brood.Grant(src) - ai_controller.set_blackboard_key(BB_TARGETTED_ACTION, spawn_brood) + ai_controller.set_blackboard_key(BB_TARGETED_ACTION, spawn_brood) /mob/living/basic/mining/hivelord/Destroy() QDEL_NULL(spawn_brood) diff --git a/code/modules/mob/living/basic/lavaland/hivelord/hivelord_ai.dm b/code/modules/mob/living/basic/lavaland/hivelord/hivelord_ai.dm index fd7983de3977c1..1fb05cd7a012b9 100644 --- a/code/modules/mob/living/basic/lavaland/hivelord/hivelord_ai.dm +++ b/code/modules/mob/living/basic/lavaland/hivelord/hivelord_ai.dm @@ -1,7 +1,7 @@ /// Basically just keep away and shit out worms /datum/ai_controller/basic_controller/hivelord blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_AGGRO_RANGE = 5, // Only get mad at people nearby ) diff --git a/code/modules/mob/living/basic/lavaland/hivelord/spawn_hivelord_brood.dm b/code/modules/mob/living/basic/lavaland/hivelord/spawn_hivelord_brood.dm index 63a66d4c4e3261..7d50806e63a0cf 100644 --- a/code/modules/mob/living/basic/lavaland/hivelord/spawn_hivelord_brood.dm +++ b/code/modules/mob/living/basic/lavaland/hivelord/spawn_hivelord_brood.dm @@ -10,7 +10,7 @@ cooldown_time = 2 SECONDS melee_cooldown_time = 0 shared_cooldown = NONE - /// If a mob is not clicked directly, inherit targetting data from this blackboard key and setting it upon this target key + /// If a mob is not clicked directly, inherit targeting data from this blackboard key and setting it upon this target key var/ai_target_key = BB_BASIC_MOB_CURRENT_TARGET /// What are we actually spawning? var/spawn_type = /mob/living/basic/hivelord_brood diff --git a/code/modules/mob/living/basic/lavaland/legion/legion.dm b/code/modules/mob/living/basic/lavaland/legion/legion.dm index 7c6bd0fd170a74..3a18a0703e649c 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion.dm @@ -41,7 +41,7 @@ var/datum/action/cooldown/mob_cooldown/skull_launcher/skull_launcher = new(src) skull_launcher.Grant(src) skull_launcher.spawn_type = brood_type - ai_controller.blackboard[BB_TARGETTED_ACTION] = skull_launcher + ai_controller.set_blackboard_key(BB_TARGETED_ACTION, skull_launcher) /// Create what we want to drop on death, in proc form so we can always return a static list /mob/living/basic/mining/legion/proc/get_loot_list() @@ -52,6 +52,7 @@ . = ..() if (gone != stored_mob) return + UnregisterSignal(stored_mob, COMSIG_LIVING_REVIVE) ai_controller.clear_blackboard_key(BB_LEGION_CORPSE) stored_mob.remove_status_effect(/datum/status_effect/grouped/stasis, STASIS_LEGION_EATEN) stored_mob.add_mood_event(MOOD_CATEGORY_LEGION_CORE, /datum/mood_event/healsbadman/long_term) // This will still probably mostly be gone before you are alive @@ -72,6 +73,7 @@ consumed.extinguish_mob() consumed.fully_heal(HEAL_DAMAGE) consumed.apply_status_effect(/datum/status_effect/grouped/stasis, STASIS_LEGION_EATEN) + RegisterSignal(consumed, COMSIG_LIVING_REVIVE, PROC_REF(on_consumed_revive)) consumed.forceMove(src) ai_controller?.set_blackboard_key(BB_LEGION_CORPSE, consumed) ai_controller?.set_blackboard_key(BB_LEGION_RECENT_LINES, consumed.copy_recent_speech(line_chance = 80)) @@ -81,9 +83,14 @@ return // Congratulations you have won a special prize: cancer var/obj/item/organ/internal/legion_tumour/cancer = new() - cancer.Insert(consumed, special = TRUE, drop_if_replaced = FALSE) + cancer.Insert(consumed, special = TRUE, movement_flags = DELETE_IF_REPLACED) /// A Legion which only drops skeletons instead of corpses which might have fun loot, so it cannot be farmed + +/mob/living/basic/mining/legion/proc/on_consumed_revive(full_heal_flags) + SIGNAL_HANDLER + gib() + /mob/living/basic/mining/legion/spawner_made corpse_type = /obj/effect/mob_spawn/corpse/human/legioninfested/skeleton/charred diff --git a/code/modules/mob/living/basic/lavaland/legion/legion_ai.dm b/code/modules/mob/living/basic/lavaland/legion/legion_ai.dm index 9167846b6853e8..1bae1b30353793 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion_ai.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion_ai.dm @@ -1,7 +1,7 @@ /// Keep away and launch skulls at every opportunity, prioritising injured allies /datum/ai_controller/basic_controller/legion blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/legion, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/legion, BB_TARGET_MINIMUM_STAT = HARD_CRIT, BB_AGGRO_RANGE = 5, // Unobservant BB_BASIC_MOB_FLEE_DISTANCE = 6, @@ -16,10 +16,10 @@ /datum/ai_planning_subtree/flee_target/legion, ) -/// Chase and attack whatever we are targetting, if it's friendly we will heal them +/// Chase and attack whatever we are targeting, if it's friendly we will heal them /datum/ai_controller/basic_controller/legion_brood blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/legion, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/legion, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) @@ -31,9 +31,9 @@ ) /// Target nearby friendlies if they are hurt (and are not themselves Legions) -/datum/targetting_datum/basic/legion +/datum/targeting_strategy/basic/legion -/datum/targetting_datum/basic/legion/faction_check(datum/ai_controller/controller, mob/living/living_mob, mob/living/the_target) +/datum/targeting_strategy/basic/legion/faction_check(datum/ai_controller/controller, mob/living/living_mob, mob/living/the_target) if (!living_mob.faction_check_atom(the_target, exact_match = check_factions_exactly)) return FALSE if (istype(the_target, living_mob.type)) diff --git a/code/modules/mob/living/basic/lavaland/legion/legion_brood.dm b/code/modules/mob/living/basic/lavaland/legion/legion_brood.dm index 7ce568d5760892..91edf40615cf02 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion_brood.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion_brood.dm @@ -57,7 +57,7 @@ return return ..() -/// Turn the targetted mob into one of us +/// Turn the targeted mob into one of us /mob/living/basic/legion_brood/proc/infest(mob/living/target) visible_message(span_warning("[name] burrows into the flesh of [target]!")) var/spawn_type = get_legion_type(target) @@ -95,5 +95,9 @@ icon_living = "snowlegion_head" icon_dead = "snowlegion_head" +/mob/living/basic/legion_brood/snow/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_SNOWSTORM_IMMUNE, INNATE_TRAIT) + /mob/living/basic/legion_brood/snow/get_legion_type(mob/living/target) return /mob/living/basic/mining/legion/snow diff --git a/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm b/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm index 078af57de2ad35..55c1e6426b360d 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm @@ -50,7 +50,7 @@ animate(transform = matrix(), time = 0.5 SECONDS / speed_divider, easing = SINE_EASING | EASE_IN) animate(transform = matrix(), time = 2 SECONDS / speed_divider) -/obj/item/organ/internal/legion_tumour/Remove(mob/living/carbon/egg_owner, special) +/obj/item/organ/internal/legion_tumour/Remove(mob/living/carbon/egg_owner, special, movement_flags) . = ..() stage = 0 elapsed_time = 0 diff --git a/code/modules/mob/living/basic/lavaland/legion/spawn_legions.dm b/code/modules/mob/living/basic/lavaland/legion/spawn_legions.dm index f68c5f7fafe03f..bd9b2c2aff99f5 100644 --- a/code/modules/mob/living/basic/lavaland/legion/spawn_legions.dm +++ b/code/modules/mob/living/basic/lavaland/legion/spawn_legions.dm @@ -10,7 +10,7 @@ cooldown_time = 2 SECONDS melee_cooldown_time = 0 shared_cooldown = NONE - /// If a mob is not clicked directly, inherit targetting data from this blackboard key and setting it upon this target key + /// If a mob is not clicked directly, inherit targeting data from this blackboard key and setting it upon this target key var/ai_target_key = BB_BASIC_MOB_CURRENT_TARGET /// What are we actually spawning? var/spawn_type = /mob/living/basic/legion_brood diff --git a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm index a048fe77ab146a..88127b56cb602d 100644 --- a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm +++ b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm @@ -33,7 +33,6 @@ /mob/living/basic/mining/lobstrosity/Initialize(mapload) . = ..() - ADD_TRAIT(src, TRAIT_SNOWSTORM_IMMUNE, INNATE_TRAIT) AddElement(/datum/element/mob_grabber) AddElement(/datum/element/footstep, FOOTSTEP_MOB_CLAW) AddElement(/datum/element/basic_eating, food_types = target_foods) @@ -44,7 +43,7 @@ ) charge = new(src) charge.Grant(src) - ai_controller.set_blackboard_key(BB_TARGETTED_ACTION, charge) + ai_controller.set_blackboard_key(BB_TARGETED_ACTION, charge) /mob/living/basic/mining/lobstrosity/Destroy() QDEL_NULL(charge) @@ -69,7 +68,7 @@ /datum/action/cooldown/mob_cooldown/charge/basic_charge/lobster/hit_target(atom/movable/source, atom/target, damage_dealt) . = ..() - if(!isliving(target) || !isbasicmob(source)) + if(!isbasicmob(source) || !isliving(target)) return var/mob/living/basic/basic_source = source var/mob/living/living_target = target diff --git a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm index c89cc3b9c07b76..b80d5d6b9f79a6 100644 --- a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm +++ b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/lobstrosity blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, BB_LOBSTROSITY_EXPLOIT_TRAITS = list(TRAIT_INCAPACITATED, TRAIT_FLOORED, TRAIT_IMMOBILIZED, TRAIT_KNOCKEDOUT), BB_LOBSTROSITY_FINGER_LUST = 0 @@ -34,7 +34,7 @@ /datum/ai_behavior/basic_melee_attack/lobster -/datum/ai_behavior/basic_melee_attack/lobster/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_melee_attack/lobster/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) var/mob/living/target = controller.blackboard[target_key] if (isnull(target)) return ..() @@ -55,7 +55,7 @@ flee_behaviour = /datum/ai_behavior/run_away_from_target/lobster /datum/ai_planning_subtree/flee_target/lobster/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) - var/datum/action/cooldown/using_action = controller.blackboard[BB_TARGETTED_ACTION] + var/datum/action/cooldown/using_action = controller.blackboard[BB_TARGETED_ACTION] if (using_action?.IsAvailable()) return return ..() diff --git a/code/modules/mob/living/basic/lavaland/mining.dm b/code/modules/mob/living/basic/lavaland/mining.dm index 0b6c4f321b66b8..3bcdd1ceaa64b2 100644 --- a/code/modules/mob/living/basic/lavaland/mining.dm +++ b/code/modules/mob/living/basic/lavaland/mining.dm @@ -22,7 +22,7 @@ /mob/living/basic/mining/Initialize(mapload) . = ..() - add_traits(list(TRAIT_LAVA_IMMUNE, TRAIT_ASHSTORM_IMMUNE), INNATE_TRAIT) + add_traits(list(TRAIT_LAVA_IMMUNE, TRAIT_ASHSTORM_IMMUNE, TRAIT_SNOWSTORM_IMMUNE), INNATE_TRAIT) AddElement(/datum/element/mob_killed_tally, "mobs_killed_mining") var/static/list/vulnerable_projectiles if(!vulnerable_projectiles) diff --git a/code/modules/mob/living/basic/lavaland/mook/mook.dm b/code/modules/mob/living/basic/lavaland/mook/mook.dm index d36973cff033af..6ecf54bc264825 100644 --- a/code/modules/mob/living/basic/lavaland/mook/mook.dm +++ b/code/modules/mob/living/basic/lavaland/mook/mook.dm @@ -41,8 +41,8 @@ var/list/pet_commands = list( /datum/pet_command/idle, /datum/pet_command/free, - /datum/pet_command/point_targetting/attack, - /datum/pet_command/point_targetting/fetch, + /datum/pet_command/point_targeting/attack, + /datum/pet_command/point_targeting/fetch, ) /mob/living/basic/mining/mook/Initialize(mapload) @@ -52,14 +52,12 @@ move_resist = MOVE_RESIST_DEFAULT,\ ) AddComponent(/datum/component/ai_retaliate_advanced, CALLBACK(src, PROC_REF(attack_intruder))) - var/datum/action/cooldown/mob_cooldown/mook_ability/mook_jump/jump = new(src) - jump.Grant(src) - ai_controller.set_blackboard_key(BB_MOOK_JUMP_ABILITY, jump) + grant_actions_by_list(get_innate_abilities()) ore_overlay = mutable_appearance(icon, "mook_ore_overlay") AddComponent(/datum/component/ai_listen_to_weather) - AddElement(/datum/element/wall_smasher) + AddElement(/datum/element/wall_tearer, allow_reinforced = FALSE) RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) RegisterSignal(src, COMSIG_KB_MOB_DROPITEM_DOWN, PROC_REF(drop_ore)) @@ -68,6 +66,13 @@ AddComponent(/datum/component/obeys_commands, pet_commands) +/// Returns a list of actions and blackboard keys to pass into `grant_actions_by_list`. +/mob/living/basic/mining/mook/proc/get_innate_abilities() + var/static/list/innate_abilities = list( + /datum/action/cooldown/mob_cooldown/mook_ability/mook_jump = BB_MOOK_JUMP_ABILITY, + ) + return innate_abilities + /mob/living/basic/mining/mook/proc/grant_healer_abilities() AddComponent(\ /datum/component/healing_touch,\ @@ -102,7 +107,7 @@ ore_target.forceMove(src) return COMPONENT_HOSTILE_NO_ATTACK - if(istype(target, /obj/structure/material_stand)) + if(istype(target, /obj/structure/ore_container/material_stand)) if(held_ore) held_ore.forceMove(target) return COMPONENT_HOSTILE_NO_ATTACK @@ -198,9 +203,18 @@ neutral_stance = mutable_appearance(icon, "mook_axe_overlay") attack_stance = mutable_appearance(icon, "axe_strike_overlay") update_appearance() - var/datum/action/cooldown/mob_cooldown/mook_ability/mook_leap/leap = new(src) - leap.Grant(src) - ai_controller.set_blackboard_key(BB_MOOK_LEAP_ABILITY, leap) + +/mob/living/basic/mining/mook/worker/get_innate_abilities() + var/static/list/worker_innate_abilites = null + + if(isnull(worker_innate_abilites)) + worker_innate_abilites = list() + worker_innate_abilites += ..() + worker_innate_abilites += list( + /datum/action/cooldown/mob_cooldown/mook_ability/mook_leap = BB_MOOK_LEAP_ABILITY, + ) + + return worker_innate_abilites /mob/living/basic/mining/mook/worker/attack_sequence(atom/target) . = ..() diff --git a/code/modules/mob/living/basic/lavaland/mook/mook_abilities.dm b/code/modules/mob/living/basic/lavaland/mook/mook_abilities.dm index 6ca9c59c9268fb..f80f1f3dae29e3 100644 --- a/code/modules/mob/living/basic/lavaland/mook/mook_abilities.dm +++ b/code/modules/mob/living/basic/lavaland/mook/mook_abilities.dm @@ -140,3 +140,9 @@ base_pixel_y = -16 base_pixel_x = -16 duration = 1 SECONDS + +/obj/effect/temp_visual/mook_dust/small + +/obj/effect/temp_visual/mook_dust/small/Initialize(mapload) + . = ..() + transform = transform.Scale(0.5) diff --git a/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm b/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm index 0fc2873531e073..cf79eb06aa6058 100644 --- a/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm +++ b/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm @@ -1,12 +1,12 @@ ///commands the chief can pick from GLOBAL_LIST_INIT(mook_commands, list( - new /datum/pet_command/point_targetting/attack, - new /datum/pet_command/point_targetting/fetch, + new /datum/pet_command/point_targeting/attack, + new /datum/pet_command/point_targeting/fetch, )) /datum/ai_controller/basic_controller/mook blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/mook, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/mook, BB_BLACKLIST_MINERAL_TURFS = list(/turf/closed/mineral/gibtonite, /turf/closed/mineral/strong), BB_MAXIMUM_DISTANCE_TO_VILLAGE = 7, BB_STORM_APPROACHING = FALSE, @@ -28,7 +28,7 @@ GLOBAL_LIST_INIT(mook_commands, list( ) ///check for faction if not a ash walker, otherwise just attack -/datum/targetting_datum/basic/mook/faction_check(datum/ai_controller/controller, mob/living/living_mob, mob/living/the_target) +/datum/targeting_strategy/basic/mook/faction_check(datum/ai_controller/controller, mob/living/living_mob, mob/living/the_target) if(FACTION_ASHWALKER in living_mob.faction) return FALSE @@ -71,7 +71,7 @@ GLOBAL_LIST_INIT(mook_commands, list( target_key = BB_MATERIAL_STAND_TARGET hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/material_stand finding_behavior = /datum/ai_behavior/find_hunt_target - hunt_targets = list(/obj/structure/material_stand) + hunt_targets = list(/obj/structure/ore_container/material_stand) hunt_range = 9 /datum/ai_planning_subtree/find_and_hunt_target/material_stand/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) @@ -83,6 +83,7 @@ GLOBAL_LIST_INIT(mook_commands, list( /datum/ai_behavior/hunt_target/unarmed_attack_target/material_stand required_distance = 0 always_reset_target = TRUE + switch_combat_mode = TRUE behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT ///try to face the counter when depositing ores @@ -212,7 +213,7 @@ GLOBAL_LIST_INIT(mook_commands, list( ///bard mook plays nice music for the village /datum/ai_controller/basic_controller/mook/bard blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/mook, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/mook, BB_MAXIMUM_DISTANCE_TO_VILLAGE = 10, BB_STORM_APPROACHING = FALSE, BB_SONG_LINES = MOOK_SONG, @@ -264,10 +265,10 @@ GLOBAL_LIST_INIT(mook_commands, list( ///healer mooks guard the village from intruders and heal the miner mooks when they come home /datum/ai_controller/basic_controller/mook/support blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/mook, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/mook, BB_MAXIMUM_DISTANCE_TO_VILLAGE = 10, BB_STORM_APPROACHING = FALSE, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, ) idle_behavior = /datum/idle_behavior/walk_near_target/mook_village planning_subtrees = list( @@ -324,7 +325,7 @@ GLOBAL_LIST_INIT(mook_commands, list( ///the chief would rather command his mooks to attack people than attack them himself /datum/ai_controller/basic_controller/mook/tribal_chief blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/mook, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/mook, BB_STORM_APPROACHING = FALSE, ) idle_behavior = /datum/idle_behavior/walk_near_target/mook_village @@ -349,7 +350,7 @@ GLOBAL_LIST_INIT(mook_commands, list( if(!locate(/mob/living/basic/mining/mook) in oview(command_distance, controller.pawn)) return if(controller.blackboard_key_exists(BB_BASIC_MOB_CURRENT_TARGET)) - controller.queue_behavior(/datum/ai_behavior/issue_commands, BB_BASIC_MOB_CURRENT_TARGET, /datum/pet_command/point_targetting/attack) + controller.queue_behavior(/datum/ai_behavior/issue_commands, BB_BASIC_MOB_CURRENT_TARGET, /datum/pet_command/point_targeting/attack) return var/atom/ore_target = controller.blackboard[BB_ORE_TARGET] @@ -359,7 +360,7 @@ GLOBAL_LIST_INIT(mook_commands, list( if(get_dist(ore_target, living_pawn) <= 1) return - controller.queue_behavior(/datum/ai_behavior/issue_commands, BB_ORE_TARGET, /datum/pet_command/point_targetting/fetch) + controller.queue_behavior(/datum/ai_behavior/issue_commands, BB_ORE_TARGET, /datum/pet_command/point_targeting/fetch) /datum/ai_behavior/issue_commands action_cooldown = 5 SECONDS diff --git a/code/modules/mob/living/basic/lavaland/mook/mook_village.dm b/code/modules/mob/living/basic/lavaland/mook/mook_village.dm index e3a091f6f0e49f..ca2719ed7c67f9 100644 --- a/code/modules/mob/living/basic/lavaland/mook/mook_village.dm +++ b/code/modules/mob/living/basic/lavaland/mook/mook_village.dm @@ -1,5 +1,5 @@ ///unique items that spawn at the mook village -/obj/structure/material_stand +/obj/structure/ore_container/material_stand name = "material stand" desc = "Is everyone free to use this thing?" icon = 'icons/mob/simple/jungle/mook.dmi' @@ -10,22 +10,8 @@ bound_width = 64 bound_height = 64 -/obj/structure/material_stand/attackby(obj/item/ore, mob/living/carbon/human/user, list/modifiers) - if(istype(ore, /obj/item/stack/ore)) - ore.forceMove(src) - return - return ..() - -/obj/structure/material_stand/Entered(atom/movable/mover) - . = ..() - update_appearance(UPDATE_OVERLAYS) - -/obj/structure/material_stand/Exited(atom/movable/mover) - . = ..() - update_appearance(UPDATE_OVERLAYS) - ///put ore icons on the counter! -/obj/structure/material_stand/update_overlays() +/obj/structure/ore_container/material_stand/update_overlays() . = ..() for(var/obj/item/stack/ore/ore_item in contents) var/image/ore_icon = image(icon = initial(ore_item.icon), icon_state = initial(ore_item.icon_state), layer = LOW_ITEM_LAYER) @@ -34,52 +20,6 @@ ore_icon.pixel_y = rand(2, 4) . += ore_icon -/obj/structure/material_stand/ui_interact(mob/user, datum/tgui/ui) - . = ..() - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "MaterialStand") - ui.open() - -/obj/structure/material_stand/ui_data(mob/user) - var/list/data = list() - data["ores"] = list() - for(var/obj/item/stack/ore/ore_item in contents) - data["ores"] += list(list( - "id" = REF(ore_item), - "name" = ore_item.name, - "amount" = ore_item.amount, - )) - return data - -/obj/structure/material_stand/ui_static_data(mob/user) - var/list/data = list() - data["ore_images"] = list() - for(var/obj/item/stack/ore_item as anything in subtypesof(/obj/item/stack/ore)) - data["ore_images"] += list(list( - "name" = initial(ore_item.name), - "icon" = icon2base64(getFlatIcon(image(icon = initial(ore_item.icon), icon_state = initial(ore_item.icon_state)), no_anim=TRUE)) - )) - return data - -/obj/structure/material_stand/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) - . = ..() - - if(. || !isliving(usr)) - return TRUE - - var/mob/living/customer = usr - var/obj/item/stack_to_move - switch(action) - if("withdraw") - if(isnull(params["reference"])) - return TRUE - stack_to_move = locate(params["reference"]) in contents - if(isnull(stack_to_move)) - return TRUE - stack_to_move.forceMove(get_turf(customer)) - return TRUE - /obj/effect/landmark/mook_village name = "mook village landmark" icon_state = "x" diff --git a/code/modules/mob/living/basic/lavaland/watcher/watcher.dm b/code/modules/mob/living/basic/lavaland/watcher/watcher.dm index 28ed712d06127a..c3c30526dff745 100644 --- a/code/modules/mob/living/basic/lavaland/watcher/watcher.dm +++ b/code/modules/mob/living/basic/lavaland/watcher/watcher.dm @@ -62,7 +62,7 @@ var/datum/action/cooldown/mob_cooldown/watcher_gaze/gaze = new gaze_attack(src) gaze.Grant(src) ai_controller.set_blackboard_key(BB_GENERIC_ACTION, gaze) - AddComponent(/datum/component/revenge_ability, gaze, targetting = ai_controller.blackboard[BB_TARGETTING_DATUM]) + AddComponent(/datum/component/revenge_ability, gaze, targeting = GET_TARGETING_STRATEGY(ai_controller.blackboard[BB_TARGETING_STRATEGY])) /mob/living/basic/mining/watcher/update_overlays() . = ..() diff --git a/code/modules/mob/living/basic/lavaland/watcher/watcher_ai.dm b/code/modules/mob/living/basic/lavaland/watcher/watcher_ai.dm index 348bbcfcaa7d00..c962ca50c12a45 100644 --- a/code/modules/mob/living/basic/lavaland/watcher/watcher_ai.dm +++ b/code/modules/mob/living/basic/lavaland/watcher/watcher_ai.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/watcher blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = PAUSE_DURING_DO_AFTER diff --git a/code/modules/mob/living/basic/minebots/minebot.dm b/code/modules/mob/living/basic/minebots/minebot.dm index 061c9a624f719d..4e12c2bdec1efd 100644 --- a/code/modules/mob/living/basic/minebots/minebot.dm +++ b/code/modules/mob/living/basic/minebots/minebot.dm @@ -1,5 +1,5 @@ /mob/living/basic/mining_drone - name = "\improper Nanotrasen minebot" + name = "\improper Symphionia minebot" desc = "The instructions printed on the side read: This is a small robot used to support miners, can be set to search and collect loose ore, or to help fend off wildlife. Insert any type of ore into it to make it start listening to your commands!" gender = NEUTER icon = 'icons/mob/silicon/aibots.dmi' @@ -40,7 +40,7 @@ /datum/pet_command/automate_mining, /datum/pet_command/free/minebot, /datum/pet_command/follow, - /datum/pet_command/point_targetting/attack/minebot, + /datum/pet_command/point_targeting/attack/minebot, ) /mob/living/basic/mining_drone/Initialize(mapload) @@ -58,14 +58,13 @@ after_tame = CALLBACK(src, PROC_REF(activate_bot)),\ ) - var/datum/action/cooldown/mob_cooldown/minedrone/toggle_light/toggle_light_action = new(src) - var/datum/action/cooldown/mob_cooldown/minedrone/toggle_meson_vision/toggle_meson_vision_action = new(src) - var/datum/action/cooldown/mob_cooldown/minedrone/dump_ore/dump_ore_action = new(src) - toggle_light_action.Grant(src) - toggle_meson_vision_action.Grant(src) - dump_ore_action.Grant(src) - ai_controller.set_blackboard_key(BB_MINEBOT_LIGHT_ABILITY, toggle_light_action) - ai_controller.set_blackboard_key(BB_MINEBOT_DUMP_ABILITY, dump_ore_action) + var/static/list/innate_actions = list( + /datum/action/cooldown/mob_cooldown/minedrone/toggle_light = BB_MINEBOT_LIGHT_ABILITY, + /datum/action/cooldown/mob_cooldown/minedrone/toggle_meson_vision = null, + /datum/action/cooldown/mob_cooldown/minedrone/dump_ore = BB_MINEBOT_DUMP_ABILITY, + ) + + grant_actions_by_list(innate_actions) stored_gun = new(src) var/obj/item/implant/radio/mining/comms = new(src) @@ -119,10 +118,8 @@ return ..() /mob/living/basic/mining_drone/attack_hand(mob/living/carbon/human/user, list/modifiers) - . = ..() - - if(. || user.combat_mode) - return + if(user.combat_mode) + return ..() set_combat_mode(!combat_mode) balloon_alert(user, "now [combat_mode ? "attacking wildlife" : "collecting loose ore"]") diff --git a/code/modules/mob/living/basic/minebots/minebot_ai.dm b/code/modules/mob/living/basic/minebots/minebot_ai.dm index f4a2adda9e1fdd..4aba93c426501a 100644 --- a/code/modules/mob/living/basic/minebots/minebot_ai.dm +++ b/code/modules/mob/living/basic/minebots/minebot_ai.dm @@ -1,7 +1,7 @@ /datum/ai_controller/basic_controller/minebot blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, BB_BLACKLIST_MINERAL_TURFS = list(/turf/closed/mineral/gibtonite), BB_AUTOMATED_MINING = FALSE, ) @@ -201,10 +201,10 @@ radial_icon_state = "mech_eject" ability_key = BB_MINEBOT_DUMP_ABILITY -/datum/pet_command/point_targetting/attack/minebot +/datum/pet_command/point_targeting/attack/minebot attack_behaviour = /datum/ai_behavior/basic_ranged_attack/minebot -/datum/pet_command/point_targetting/attack/minebot/execute_action(datum/ai_controller/controller) +/datum/pet_command/point_targeting/attack/minebot/execute_action(datum/ai_controller/controller) controller.set_blackboard_key(BB_AUTOMATED_MINING, FALSE) var/mob/living/living_pawn = controller.pawn if(!living_pawn.combat_mode) diff --git a/code/modules/mob/living/basic/minebots/minebot_upgrades.dm b/code/modules/mob/living/basic/minebots/minebot_upgrades.dm index 6f5d43af1afcaa..d68e3a850815d2 100644 --- a/code/modules/mob/living/basic/minebots/minebot_upgrades.dm +++ b/code/modules/mob/living/basic/minebots/minebot_upgrades.dm @@ -2,7 +2,7 @@ name = "minebot melee upgrade" desc = "A minebot upgrade." icon_state = "door_electronics" - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' /obj/item/mine_bot_upgrade/afterattack(mob/living/basic/mining_drone/minebot, mob/user, proximity) . = ..() @@ -39,7 +39,7 @@ name = "minebot AI upgrade" desc = "Can be used to grant sentience to minebots. It's incompatible with minebot armor and melee upgrades, and will override them." icon_state = "door_electronics" - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' sentience_type = SENTIENCE_MINEBOT ///health boost to add var/base_health_add = 5 diff --git a/code/modules/mob/living/basic/pets/cat/bread_cat_ai.dm b/code/modules/mob/living/basic/pets/cat/bread_cat_ai.dm new file mode 100644 index 00000000000000..35a5d9e12afcff --- /dev/null +++ b/code/modules/mob/living/basic/pets/cat/bread_cat_ai.dm @@ -0,0 +1,62 @@ +/datum/ai_controller/basic_controller/cat/bread + planning_subtrees = list( + /datum/ai_planning_subtree/find_and_hunt_target/turn_off_stove, + /datum/ai_planning_subtree/find_and_hunt_target/hunt_mice, + /datum/ai_planning_subtree/find_and_hunt_target/find_cat_food, + /datum/ai_planning_subtree/haul_food_to_young, + /datum/ai_planning_subtree/random_speech/cats, + ) + +/datum/ai_planning_subtree/find_and_hunt_target/turn_off_stove + target_key = BB_STOVE_TARGET + hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/stove_target + finding_behavior = /datum/ai_behavior/find_hunt_target/stove + hunt_targets = list(/obj/machinery/oven/range) + hunt_range = 9 + +/datum/ai_behavior/find_hunt_target/stove + +/datum/ai_behavior/find_hunt_target/stove/valid_dinner(mob/living/source, obj/machinery/oven/range/stove, radius) + if(!length(stove.used_tray?.contents) || stove.open) + return FALSE + //something in there is still baking... + for(var/atom/baking in stove.used_tray) + if(HAS_TRAIT(baking, TRAIT_BAKEABLE)) + return FALSE + return TRUE + +/datum/ai_behavior/hunt_target/unarmed_attack_target/stove_target + always_reset_target = TRUE + +/datum/ai_behavior/hunt_target/unarmed_attack_target/stove_target/target_caught(mob/living/hunter, obj/machinery/oven/range/stove) + if(stove.open) + return + return ..() + +/datum/ai_controller/basic_controller/cat/cake + planning_subtrees = list( + /datum/ai_planning_subtree/find_and_hunt_target/turn_off_stove, + /datum/ai_planning_subtree/find_and_hunt_target/decorate_donuts, + /datum/ai_planning_subtree/find_and_hunt_target/hunt_mice, + /datum/ai_planning_subtree/find_and_hunt_target/find_cat_food, + /datum/ai_planning_subtree/haul_food_to_young, + /datum/ai_planning_subtree/random_speech/cats, + ) + +/datum/ai_planning_subtree/find_and_hunt_target/decorate_donuts + target_key = BB_DONUT_TARGET + hunting_behavior = /datum/ai_behavior/hunt_target/decorate_donuts + finding_behavior = /datum/ai_behavior/find_hunt_target/decorate_donuts + hunt_targets = list(/obj/item/food/donut) + hunt_range = 9 + +/datum/ai_behavior/find_hunt_target/decorate_donuts/valid_dinner(mob/living/source, obj/item/food/donut/target, radius) + if(!target.is_decorated) + return FALSE + return can_see(source, target, radius) + +/datum/ai_behavior/hunt_target/decorate_donuts + always_reset_target = TRUE + +/datum/ai_behavior/hunt_target/decorate_donuts/target_caught(mob/living/hunter, atom/target) + hunter.spin(spintime = 4, speed = 1) diff --git a/code/modules/mob/living/basic/pets/cat/cat.dm b/code/modules/mob/living/basic/pets/cat/cat.dm new file mode 100644 index 00000000000000..1c86b2ffcb474d --- /dev/null +++ b/code/modules/mob/living/basic/pets/cat/cat.dm @@ -0,0 +1,192 @@ +/mob/living/basic/pet/cat + name = "cat" + desc = "Kitty!!" + icon = 'icons/mob/simple/pets.dmi' + icon_state = "cat2" + icon_living = "cat2" + icon_dead = "cat2_dead" + speak_emote = list("purrs", "meows") + pass_flags = PASSTABLE + mob_size = MOB_SIZE_SMALL + mob_biotypes = MOB_ORGANIC|MOB_BEAST + unsuitable_atmos_damage = 0.5 + butcher_results = list( + /obj/item/food/meat/slab = 1, + /obj/item/organ/internal/ears/cat = 1, + /obj/item/organ/external/tail/cat = 1, + /obj/item/stack/sheet/animalhide/cat = 1 + ) + response_help_continuous = "pets" + response_help_simple = "pet" + response_disarm_continuous = "gently pushes aside" + response_disarm_simple = "gently push aside" + response_harm_continuous = "kicks" + response_harm_simple = "kick" + mobility_flags = MOBILITY_FLAGS_REST_CAPABLE_DEFAULT + gold_core_spawnable = FRIENDLY_SPAWN + collar_icon_state = "cat" + has_collar_resting_icon_state = TRUE + can_be_held = TRUE + ai_controller = /datum/ai_controller/basic_controller/cat + held_state = "cat2" + attack_verb_continuous = "claws" + attack_verb_simple = "claw" + attack_sound = 'sound/weapons/slash.ogg' + attack_vis_effect = ATTACK_EFFECT_CLAW + ///can this cat breed? + var/can_breed = TRUE + ///can hold items? + var/can_hold_item = TRUE + ///can this cat interact with stoves? + var/can_interact_with_stove = FALSE + ///list of items we can carry + var/static/list/huntable_items = list( + /obj/item/fish, + /obj/item/food/deadmouse, + /obj/item/food/fishmeat, + ) + ///item we are currently holding + var/obj/item/held_food + ///mutable appearance for held item + var/mutable_appearance/held_item_overlay + +/mob/living/basic/pet/cat/Initialize(mapload) + . = ..() + AddElement(/datum/element/ai_retaliate) + AddElement(/datum/element/pet_bonus, "purrs!") + add_verb(src, /mob/living/proc/toggle_resting) + add_traits(list(TRAIT_CATLIKE_GRACE, TRAIT_VENTCRAWLER_ALWAYS), INNATE_TRAIT) + ai_controller.set_blackboard_key(BB_HUNTABLE_PREY, typecacheof(huntable_items)) + if(can_breed) + add_breeding_component() + if(can_hold_item) + RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) + if(can_interact_with_stove) + RegisterSignal(src, COMSIG_LIVING_EARLY_UNARMED_ATTACK, PROC_REF(pre_unarmed_attack)) + +/mob/living/basic/pet/cat/proc/pre_attack(mob/living/source, atom/movable/target) + SIGNAL_HANDLER + if(!is_type_in_list(target, huntable_items) || held_food) + return + target.forceMove(src) + +/mob/living/basic/pet/cat/proc/pre_unarmed_attack(mob/living/hitter, atom/target, proximity, modifiers) + SIGNAL_HANDLER + + if(!proximity || !can_unarmed_attack()) + return NONE + if(!istype(target, /obj/machinery/oven/range)) + return NONE + target.attack_hand(src) + return COMPONENT_CANCEL_ATTACK_CHAIN + +/mob/living/basic/pet/cat/Exited(atom/movable/gone, direction) + . = ..() + if(gone != held_food) + return + held_food = null + update_appearance(UPDATE_OVERLAYS) + +/mob/living/basic/pet/cat/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + if(is_type_in_list(arrived, huntable_items)) + held_food = arrived + update_appearance(UPDATE_OVERLAYS) + return ..() + +/mob/living/basic/pet/cat/update_overlays() + . = ..() + if(stat == DEAD || resting || !held_food) + return + if(istype(held_food, /obj/item/fish)) + held_item_overlay = mutable_appearance(icon, "cat_fish_overlay") + if(istype(held_food, /obj/item/food/deadmouse)) + held_item_overlay = mutable_appearance(icon, "cat_mouse_overlay") + . += held_item_overlay + +/mob/living/basic/pet/cat/update_resting() + . = ..() + if(stat == DEAD) + return + update_appearance(UPDATE_ICON_STATE) + +/mob/living/basic/pet/cat/update_icon_state() + . = ..() + if (resting) + icon_state = "[icon_living]_rest" + return + icon_state = "[icon_living]" + +/mob/living/basic/pet/cat/proc/add_breeding_component() + AddComponent(\ + /datum/component/breed,\ + can_breed_with = typecacheof(list(/mob/living/basic/pet/cat)),\ + baby_path = /mob/living/basic/pet/cat/kitten,\ + ) + +/mob/living/basic/pet/cat/space + name = "space cat" + desc = "They're a cat... in space!" + icon_state = "spacecat" + icon_living = "spacecat" + icon_dead = "spacecat_dead" + minimum_survivable_temperature = TCMB + maximum_survivable_temperature = T0C + 40 + held_state = "spacecat" + +/mob/living/basic/pet/cat/breadcat + name = "bread cat" + desc = "They're a cat... with a bread!" + icon_state = "breadcat" + icon_living = "breadcat" + icon_dead = "breadcat_dead" + ai_controller = /datum/ai_controller/basic_controller/cat/bread + collar_icon_state = null + held_state = "breadcat" + can_interact_with_stove = TRUE + butcher_results = list( + /obj/item/food/meat/slab = 2, + /obj/item/organ/internal/ears/cat = 1, + /obj/item/organ/external/tail/cat = 1, + /obj/item/food/breadslice/plain = 1 + ) + + +/mob/living/basic/pet/cat/original + name = "Batsy" + desc = "The product of alien DNA and bored geneticists." + gender = FEMALE + icon_state = "original" + icon_living = "original" + icon_dead = "original_dead" + collar_icon_state = null + unique_pet = TRUE + held_state = "original" + +/mob/living/basic/pet/cat/kitten + name = "kitten" + desc = "D'aaawwww." + icon_state = "kitten" + icon_living = "kitten" + icon_dead = "kitten_dead" + density = FALSE + pass_flags = PASSMOB + mob_size = MOB_SIZE_SMALL + collar_icon_state = "kitten" + can_breed = FALSE + ai_controller = /datum/ai_controller/basic_controller/cat/kitten + can_hold_item = FALSE + +/mob/living/basic/pet/cat/kitten/Initialize(mapload) + . = ..() + AddElement(/datum/element/basic_eating, food_types = huntable_items) + +/mob/living/basic/pet/cat/_proc + name = "Proc" + gender = MALE + gold_core_spawnable = NO_SPAWN + unique_pet = TRUE + +/mob/living/basic/pet/cat/jerry //Holy shit we left jerry on donut ~ Arcane ~Fikou + name = "Jerry" + desc = "Tom is VERY amused." + gender = MALE diff --git a/code/modules/mob/living/basic/pets/cat/cat_ai.dm b/code/modules/mob/living/basic/pets/cat/cat_ai.dm new file mode 100644 index 00000000000000..6cd01eb54539f9 --- /dev/null +++ b/code/modules/mob/living/basic/pets/cat/cat_ai.dm @@ -0,0 +1,298 @@ +/datum/ai_controller/basic_controller/cat + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_HOSTILE_MEOWS = list("Mawwww", "Mrewwww", "mhhhhng..."), + BB_BABIES_CHILD_TYPES = list(/mob/living/basic/pet/cat/kitten), + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/reside_in_home, + /datum/ai_planning_subtree/flee_target/from_flee_key/cat_struggle, + /datum/ai_planning_subtree/find_and_hunt_target/hunt_mice, + /datum/ai_planning_subtree/find_and_hunt_target/find_cat_food, + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/haul_food_to_young, + /datum/ai_planning_subtree/territorial_struggle, + /datum/ai_planning_subtree/make_babies, + /datum/ai_planning_subtree/random_speech/cats, + ) + +/datum/ai_planning_subtree/reside_in_home + ///chance we enter our home + var/reside_chance = 5 + ///chance we leave our home + var/leave_home_chance = 15 + +/datum/ai_planning_subtree/reside_in_home/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/mob/living/living_pawn = controller.pawn + + if(controller.blackboard_key_exists(BB_CAT_HOME)) + controller.queue_behavior(/datum/ai_behavior/enter_cat_home, BB_CAT_HOME) + return + + if(istype(living_pawn.loc, /obj/structure/cat_house)) + if(SPT_PROB(leave_home_chance, seconds_per_tick)) + controller.set_blackboard_key(BB_CAT_HOME, living_pawn.loc) + return SUBTREE_RETURN_FINISH_PLANNING + + if(SPT_PROB(reside_chance, seconds_per_tick)) + controller.queue_behavior(/datum/ai_behavior/find_and_set/valid_home, BB_CAT_HOME, /obj/structure/cat_house) + +/datum/ai_behavior/find_and_set/valid_home/search_tactic(datum/ai_controller/controller, locate_path, search_range) + for(var/obj/structure/cat_house/home in oview(search_range, controller.pawn)) + if(home.resident_cat) + continue + return home + + return null + +/datum/ai_behavior/enter_cat_home + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION | AI_BEHAVIOR_REQUIRE_REACH + +/datum/ai_behavior/enter_cat_home/setup(datum/ai_controller/controller, target_key) + . = ..() + var/atom/target = controller.blackboard[target_key] + if(QDELETED(target)) + return FALSE + set_movement_target(controller, target) + +/datum/ai_behavior/enter_cat_home/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() + var/obj/structure/cat_house/home = controller.blackboard[target_key] + var/mob/living/basic/living_pawn = controller.pawn + if(living_pawn == home.resident_cat || isnull(home.resident_cat)) + living_pawn.melee_attack(home) + finish_action(controller, TRUE, target_key) + return + + finish_action(controller, FALSE, target_key) + +/datum/ai_behavior/enter_cat_home/finish_action(datum/ai_controller/controller, success, target_key) + . = ..() + controller.clear_blackboard_key(target_key) + +/datum/ai_planning_subtree/flee_target/from_flee_key/cat_struggle + flee_behaviour = /datum/ai_behavior/run_away_from_target/cat_struggle + +/datum/ai_behavior/run_away_from_target/cat_struggle + clear_failed_targets = TRUE + +/datum/ai_planning_subtree/territorial_struggle + ///chance we become hostile to another cat + var/hostility_chance = 5 + +/datum/ai_planning_subtree/territorial_struggle/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/mob/living/living_pawn = controller.pawn + if(living_pawn.gender != MALE || !SPT_PROB(hostility_chance, seconds_per_tick)) + return + if(controller.blackboard_key_exists(BB_TRESSPASSER_TARGET)) + controller.queue_behavior(/datum/ai_behavior/territorial_struggle, BB_TRESSPASSER_TARGET, BB_HOSTILE_MEOWS) + return SUBTREE_RETURN_FINISH_PLANNING + + controller.queue_behavior(/datum/ai_behavior/find_and_set/cat_tresspasser, BB_TRESSPASSER_TARGET, /mob/living/basic/pet/cat) + +/datum/ai_behavior/find_and_set/cat_tresspasser/search_tactic(datum/ai_controller/controller, locate_path, search_range) + var/list/ignore_types = controller.blackboard[BB_BABIES_CHILD_TYPES] + for(var/mob/living/basic/pet/cat/potential_enemy in oview(search_range, controller.pawn)) + if(potential_enemy.gender != MALE) + continue + if(is_type_in_list(potential_enemy, ignore_types)) + continue + var/datum/ai_controller/basic_controller/enemy_controller = potential_enemy.ai_controller + if(isnull(enemy_controller)) + continue + //theyre already engaged in a battle, leave them alone! + if(enemy_controller.blackboard_key_exists(BB_TRESSPASSER_TARGET)) + continue + //u choose me and i choose u + enemy_controller.set_blackboard_key(BB_TRESSPASSER_TARGET, controller.pawn) + return potential_enemy + return null + +/datum/ai_behavior/territorial_struggle + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION | AI_BEHAVIOR_REQUIRE_REACH + action_cooldown = 5 SECONDS + ///chance the battle ends! + var/end_battle_chance = 25 + +/datum/ai_behavior/territorial_struggle/setup(datum/ai_controller/controller, target_key) + . = ..() + var/mob/living/living_pawn = controller.pawn + var/mob/living/target = controller.blackboard[target_key] + if(QDELETED(target)) + return FALSE + if(target.ai_controller?.blackboard[target_key] != living_pawn) + return FALSE + set_movement_target(controller, target) + +/datum/ai_behavior/territorial_struggle/perform(seconds_per_tick, datum/ai_controller/controller, target_key, cries_key) + . = ..() + var/mob/living/target = controller.blackboard[target_key] + + if(QDELETED(target)) + finish_action(controller, TRUE, target_key) + return + + var/mob/living/living_pawn = controller.pawn + var/list/threaten_list = controller.blackboard[cries_key] + if(length(threaten_list)) + living_pawn.say(pick(threaten_list), forced = "ai_controller") + + if(!prob(end_battle_chance)) + return + + //50 50 chance we lose + var/datum/ai_controller/loser_controller = prob(50) ? controller : target.ai_controller + + loser_controller.set_blackboard_key(BB_BASIC_MOB_FLEE_TARGET, target) + target.ai_controller.clear_blackboard_key(BB_TRESSPASSER_TARGET) + finish_action(controller, TRUE, target_key) + +/datum/ai_behavior/territorial_struggle/finish_action(datum/ai_controller/controller, success, target_key) + . = ..() + controller.clear_blackboard_key(target_key) + +/datum/ai_planning_subtree/find_and_hunt_target/hunt_mice + target_key = BB_MOUSE_TARGET + hunting_behavior = /datum/ai_behavior/play_with_mouse + finding_behavior = /datum/ai_behavior/find_hunt_target/hunt_mice + hunt_targets = list(/mob/living/basic/mouse) + hunt_chance = 75 + hunt_range = 9 + +/datum/ai_planning_subtree/find_and_hunt_target/hunt_mice/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/mob/living/living_pawn = controller.pawn + var/list/items_we_carry = typecache_filter_list(living_pawn, controller.blackboard[BB_HUNTABLE_PREY]) + if(length(items_we_carry)) + return + return ..() + + +/datum/ai_behavior/find_hunt_target/hunt_mice/valid_dinner(mob/living/source, mob/living/mouse, radius) + if(mouse.stat == DEAD || mouse.mind) + return FALSE + return can_see(source, mouse, radius) + +//play as in kill +/datum/ai_behavior/play_with_mouse + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION | AI_BEHAVIOR_REQUIRE_REACH + action_cooldown = 10 SECONDS + ///chance we hunt the mouse! + var/consume_chance = 70 + +/datum/ai_behavior/play_with_mouse/setup(datum/ai_controller/controller, target_key) + . = ..() + var/mob/living/target = controller.blackboard[target_key] + if(QDELETED(target)) + return FALSE + set_movement_target(controller, target) + +/datum/ai_behavior/play_with_mouse/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() + var/mob/living/basic/mouse/target = controller.blackboard[target_key] + + if(QDELETED(target)) + finish_action(controller, TRUE, target_key) + return + + consume_chance = istype(target, /mob/living/basic/mouse/brown/tom) ? 5 : initial(consume_chance) + if(prob(consume_chance)) + target.splat() + finish_action(controller, TRUE, target_key) + return + finish_action(controller, FALSE, target_key) + +/datum/ai_behavior/play_with_mouse/finish_action(datum/ai_controller/controller, success, target_key) + . = ..() + var/mob/living/living_pawn = controller.pawn + var/atom/target = controller.blackboard[target_key] + controller.clear_blackboard_key(target_key) + if(isnull(target) || QDELETED(living_pawn)) + return + var/manual_emote = "attempts to hunt [target]..." + var/end_result = success ? "and succeeds!" : "but fails!" + manual_emote += end_result + living_pawn.manual_emote(manual_emote) + +/datum/ai_planning_subtree/find_and_hunt_target/find_cat_food + target_key = BB_CAT_FOOD_TARGET + hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/find_cat_food + finding_behavior = /datum/ai_behavior/find_hunt_target/find_cat_food + hunt_targets = list(/obj/item/fish, /obj/item/food/deadmouse, /obj/item/food/fishmeat) + hunt_chance = 75 + hunt_range = 9 + +/datum/ai_behavior/hunt_target/unarmed_attack_target/find_cat_food + always_reset_target = TRUE + +/datum/ai_behavior/find_hunt_target/find_cat_food/valid_dinner(mob/living/source, atom/dinner, radius) + //this food is already near a kitten, let the kitten eat it + var/mob/living/nearby_kitten = locate(/mob/living/basic/pet/cat/kitten) in oview(2, dinner) + if(nearby_kitten && nearby_kitten != source) + return FALSE + return can_see(source, dinner, radius) + +/datum/ai_planning_subtree/haul_food_to_young/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(!controller.blackboard_key_exists(BB_FOOD_TO_DELIVER)) + controller.queue_behavior(/datum/ai_behavior/find_and_set/in_hands/given_list, BB_FOOD_TO_DELIVER, controller.blackboard[BB_HUNTABLE_PREY]) + return + if(!controller.blackboard_key_exists(BB_KITTEN_TO_FEED)) + controller.queue_behavior(/datum/ai_behavior/find_and_set/valid_kitten, BB_KITTEN_TO_FEED, /mob/living/basic/pet/cat/kitten) + return + + controller.queue_behavior(/datum/ai_behavior/deliver_food_to_kitten, BB_KITTEN_TO_FEED, BB_FOOD_TO_DELIVER) + +/datum/ai_behavior/find_and_set/valid_kitten + +/datum/ai_behavior/find_and_set/valid_kitten/search_tactic(datum/ai_controller/controller, locate_path, search_range) + var/mob/living/kitten = locate(locate_path) in oview(search_range, controller.pawn) + //kitten already has food near it, go feed another hungry kitten + + if(isnull(kitten)) + return null + + var/list/nearby_food = typecache_filter_list(oview(2, kitten), controller.blackboard[BB_HUNTABLE_PREY]) + if(kitten.stat != DEAD && !length(nearby_food)) + return kitten + return null + +/datum/ai_behavior/deliver_food_to_kitten +/datum/ai_behavior/deliver_food_to_kitten + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION | AI_BEHAVIOR_REQUIRE_REACH + action_cooldown = 5 SECONDS + +/datum/ai_behavior/deliver_food_to_kitten/setup(datum/ai_controller/controller, target_key, food_key) + . = ..() + var/mob/living/target = controller.blackboard[target_key] + if(QDELETED(target)) + return FALSE + set_movement_target(controller, target) + +/datum/ai_behavior/deliver_food_to_kitten/perform(seconds_per_tick, datum/ai_controller/controller, target_key, food_key) + . = ..() + var/mob/living/target = controller.blackboard[target_key] + + if(QDELETED(target)) + finish_action(controller, FALSE, target_key, food_key) + return + + var/mob/living/living_pawn = controller.pawn + var/atom/movable/food = controller.blackboard[food_key] + + if(isnull(food) || !(food in living_pawn)) + finish_action(controller, FALSE, target_key, food_key) + return + + food.forceMove(get_turf(living_pawn)) + finish_action(controller, TRUE, target_key, food_key) + +/datum/ai_behavior/deliver_food_to_kitten/finish_action(datum/ai_controller/controller, success, target_key, food_key) + . = ..() + controller.clear_blackboard_key(target_key) + controller.clear_blackboard_key(food_key) + + + + diff --git a/code/modules/mob/living/basic/pets/cat/feral.dm b/code/modules/mob/living/basic/pets/cat/feral.dm new file mode 100644 index 00000000000000..e8a7d7b754f7a5 --- /dev/null +++ b/code/modules/mob/living/basic/pets/cat/feral.dm @@ -0,0 +1,9 @@ +/mob/living/basic/pet/cat/feral + name = "feral cat" + desc = "Kitty!! Wait, no no DON'T BITE-" + health = 30 + maxHealth = 30 + melee_damage_lower = 7 + melee_damage_upper = 15 + ai_controller = /datum/ai_controller/basic_controller/simple_hostile + faction = list(FACTION_CAT, ROLE_SYNDICATE) diff --git a/code/modules/mob/living/basic/pets/cat/keeki.dm b/code/modules/mob/living/basic/pets/cat/keeki.dm new file mode 100644 index 00000000000000..5cf16552e9a489 --- /dev/null +++ b/code/modules/mob/living/basic/pets/cat/keeki.dm @@ -0,0 +1,59 @@ +/mob/living/basic/pet/cat/cak + name = "Keeki" + desc = "She is a cat made out of cake." + icon_state = "cak" + icon_living = "cak" + icon_dead = "cak_dead" + health = 50 + maxHealth = 50 + gender = FEMALE + butcher_results = list( + /obj/item/organ/internal/brain = 1, + /obj/item/organ/internal/heart = 1, + /obj/item/food/cakeslice/birthday = 3, + /obj/item/food/meat/slab = 2 + ) + response_harm_continuous = "takes a bite out of" + response_harm_simple = "take a bite out of" + ai_controller = /datum/ai_controller/basic_controller/cat/cake + attacked_sound = 'sound/items/eatfood.ogg' + death_message = "loses her false life and collapses!" + death_sound = SFX_BODYFALL + held_state = "cak" + can_interact_with_stove = TRUE + +/mob/living/basic/pet/cat/cak/Initialize(mapload) + . = ..() + AddComponent(/datum/component/regenerator,\ + regeneration_delay = 1 SECONDS,\ + brute_per_second = 5,\ + outline_colour = COLOR_PINK,\ + ) + var/static/list/on_consume = list( + /datum/reagent/consumable/nutriment = 0.4, + /datum/reagent/consumable/nutriment/vitamin = 0.4, + ) + AddElement(/datum/element/consumable_mob, reagents_list = on_consume) + +/mob/living/basic/pet/cat/cak/CheckParts(list/parts) + . = ..() + var/obj/item/organ/internal/brain/candidate = locate(/obj/item/organ/internal/brain) in contents + if(isnull(candidate?.brainmob?.mind)) + return + var/datum/mind/candidate_mind = candidate.brainmob.mind + candidate_mind.transfer_to(src) + candidate_mind.grab_ghost() + to_chat(src, "[span_boldbig("You are a cak!")] You're a harmless cat/cake hybrid that everyone loves. People can take bites out of you if they're hungry, but you regenerate health \ + so quickly that it generally doesn't matter. You're remarkably resilient to any damage besides this and it's hard for you to really die at all. You should go around and bring happiness and \ + free cake to the station!") + var/default_name = initial(name) + var/new_name = sanitize_name(reject_bad_text(tgui_input_text(src, "You are the [name]. Would you like to change your name to something else?", "Name change", default_name, MAX_NAME_LEN)), cap_after_symbols = FALSE) + if(new_name) + to_chat(src, span_notice("Your name is now [new_name]!")) + name = new_name + +/mob/living/basic/pet/cat/cak/spin(spintime, speed) + . = ..() + for(var/obj/item/food/donut/target in oview(1, src)) + if(!target.is_decorated) + target.decorate_donut() diff --git a/code/modules/mob/living/basic/pets/cat/kitten_ai.dm b/code/modules/mob/living/basic/pets/cat/kitten_ai.dm new file mode 100644 index 00000000000000..355ec4d3e488d2 --- /dev/null +++ b/code/modules/mob/living/basic/pets/cat/kitten_ai.dm @@ -0,0 +1,67 @@ + +/datum/ai_controller/basic_controller/cat/kitten + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_HUNGRY_MEOW = list("mrrp...", "mraw..."), + BB_MAX_DISTANCE_TO_FOOD = 2, + ) + + planning_subtrees = list( + /datum/ai_planning_subtree/target_retaliate, + /datum/ai_planning_subtree/flee_target, + /datum/ai_planning_subtree/beg_human, + /datum/ai_planning_subtree/find_and_hunt_target/find_cat_food/kitten, + /datum/ai_planning_subtree/random_speech/cats, + ) + +//if the food is too far away, point at it or meow. if its near us then go eat it + +/datum/ai_planning_subtree/find_and_hunt_target/find_cat_food/kitten + + +/datum/ai_planning_subtree/find_and_hunt_target/find_cat_food/kitten/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/atom/target = controller.blackboard[BB_CAT_FOOD_TARGET] + if(target && get_dist(target, controller.pawn) > controller.blackboard[BB_MAX_DISTANCE_TO_FOOD]) + controller.queue_behavior(/datum/ai_behavior/beacon_for_food, BB_CAT_FOOD_TARGET, BB_HUNGRY_MEOW) + return + return ..() + +/datum/ai_behavior/beacon_for_food + action_cooldown = 5 SECONDS + +/datum/ai_behavior/beacon_for_food/perform(seconds_per_tick, datum/ai_controller/controller, target_key, meows_key) + . = ..() + var/atom/target = controller.blackboard[target_key] + if(QDELETED(target)) + finish_action(controller, FALSE) + var/mob/living/living_pawn = controller.pawn + var/list/meowing_list = controller.blackboard[meows_key] + if(length(meowing_list)) + living_pawn.say(pick(meowing_list), forced = "ai_controller") + living_pawn._pointed(target) + finish_action(controller, TRUE) + +/datum/ai_behavior/beacon_for_food/finish_action(datum/ai_controller/controller, success, target_key) + . = ..() + controller.clear_blackboard_key(target_key) + +/datum/ai_planning_subtree/beg_human + +/datum/ai_planning_subtree/beg_human/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + + if(controller.blackboard_key_exists(BB_HUMAN_BEG_TARGET)) + controller.queue_behavior(/datum/ai_behavior/beacon_for_food, BB_HUMAN_BEG_TARGET, BB_HUNGRY_MEOW) + return + + controller.queue_behavior(/datum/ai_behavior/find_and_set/human_beg, BB_HUMAN_BEG_TARGET, /mob/living/carbon/human) + +/datum/ai_behavior/find_and_set/human_beg/search_tactic(datum/ai_controller/controller, locate_path, search_range) + var/list/locate_items = controller.blackboard[BB_HUNTABLE_PREY] + for(var/mob/living/carbon/human/human_target in oview(search_range, controller.pawn)) + if(human_target.stat != CONSCIOUS || isnull(human_target.mind)) + continue + if(!length(typecache_filter_list(human_target.held_items, locate_items))) + continue + return human_target + + return null diff --git a/code/modules/mob/living/basic/pets/cat/runtime.dm b/code/modules/mob/living/basic/pets/cat/runtime.dm new file mode 100644 index 00000000000000..9b3adac5a2aebc --- /dev/null +++ b/code/modules/mob/living/basic/pets/cat/runtime.dm @@ -0,0 +1,99 @@ +#define RUNTIME_SAVE_DATA "data/npc_saves/Runtime.sav" +#define RUNTIME_JSON_DATA "data/npc_saves/Runtime.json" +#define MAX_CAT_DEPLOY 50 + +/mob/living/basic/pet/cat/runtime + name = "Runtime" + desc = "GCAT" + icon_state = "cat" + icon_living = "cat" + icon_dead = "cat_dead" + gender = FEMALE + gold_core_spawnable = NO_SPAWN + unique_pet = TRUE + ///the family we will bring in when a round starts + var/list/family = null + ///saved list of kids + var/list/children = null + /// have we deployed the cats? + var/cats_deployed = FALSE + /// have we saved memory? + var/memory_saved = FALSE + ///callback we use to register our family + var/datum/callback/register_family + +/mob/living/basic/pet/cat/runtime/Initialize(mapload) + . = ..() + register_family = CALLBACK(src, PROC_REF(Write_Memory)) + SSticker.OnRoundend(register_family) + if(mapload) + read_memory() + deploy_the_cats() + + if(!prob(5)) + return + icon_state = "original" + icon_living = "original" + icon_dead = "original_dead" + update_appearance() + + +/mob/living/basic/pet/cat/runtime/add_breeding_component() + AddComponent(\ + /datum/component/breed,\ + can_breed_with = typecacheof(list(/mob/living/basic/pet/cat)),\ + baby_path = /mob/living/basic/pet/cat/kitten,\ + post_birth = CALLBACK(src, PROC_REF(after_birth)),\ + ) + +/mob/living/basic/pet/cat/runtime/proc/after_birth(mob/living/baby) + if(isnull(baby)) + return + LAZYADD(children, baby) + +/mob/living/basic/pet/cat/runtime/proc/read_memory() + if(fexists(RUNTIME_SAVE_DATA)) + var/savefile/save_data = new(RUNTIME_SAVE_DATA) + save_data["family"] >> family + fdel(RUNTIME_SAVE_DATA) + return + var/json_file = file(RUNTIME_JSON_DATA) + if(!fexists(json_file)) + return + var/list/json_list = json_decode(file2text(json_file)) + family = json_list["family"] + +/mob/living/basic/pet/cat/runtime/Destroy() + LAZYREMOVE(SSticker.round_end_events, register_family) + register_family = null + return ..() + +/mob/living/basic/pet/cat/runtime/Write_Memory(dead, gibbed) + . = ..() + if(!.) + return + var/json_file = file(RUNTIME_JSON_DATA) + var/list/file_data = list() + if(!dead) + for(var/mob/living/basic/pet/cat/kitten/kitten in children) + if(kitten.stat == DEAD) + continue + if(kitten.type in family) + family[kitten.type] += 1 + continue + family[kitten.type] = 1 + file_data["family"] = family + fdel(json_file) + WRITE_FILE(json_file, json_encode(file_data, JSON_PRETTY_PRINT)) + +/mob/living/basic/pet/cat/runtime/proc/deploy_the_cats() + cats_deployed = TRUE + for(var/cat_type in family) + if(isnull(family[cat_type])) + return + for(var/index in 1 to min(family[cat_type], MAX_CAT_DEPLOY)) + new cat_type(loc) + +#undef RUNTIME_SAVE_DATA +#undef RUNTIME_JSON_DATA +#undef MAX_CAT_DEPLOY diff --git a/code/modules/mob/living/basic/pets/dog/_dog.dm b/code/modules/mob/living/basic/pets/dog/_dog.dm index dd3b3b3a4634c6..f835d7c5e17584 100644 --- a/code/modules/mob/living/basic/pets/dog/_dog.dm +++ b/code/modules/mob/living/basic/pets/dog/_dog.dm @@ -7,10 +7,10 @@ speech_commands = list("good dog") // Set correct attack behaviour -/datum/pet_command/point_targetting/attack/dog +/datum/pet_command/point_targeting/attack/dog attack_behaviour = /datum/ai_behavior/basic_melee_attack/dog -/datum/pet_command/point_targetting/attack/dog/set_command_active(mob/living/parent, mob/living/commander) +/datum/pet_command/point_targeting/attack/dog/set_command_active(mob/living/parent, mob/living/commander) . = ..() parent.ai_controller.set_blackboard_key(BB_DOG_HARASS_HARM, TRUE) @@ -40,8 +40,8 @@ /datum/pet_command/free, /datum/pet_command/good_boy/dog, /datum/pet_command/follow/dog, - /datum/pet_command/point_targetting/attack/dog, - /datum/pet_command/point_targetting/fetch, + /datum/pet_command/point_targeting/attack/dog, + /datum/pet_command/point_targeting/fetch, /datum/pet_command/play_dead, ) diff --git a/code/modules/mob/living/basic/pets/dog/corgi.dm b/code/modules/mob/living/basic/pets/dog/corgi.dm index 9e120c4e8c038a..61c18ab5354595 100644 --- a/code/modules/mob/living/basic/pets/dog/corgi.dm +++ b/code/modules/mob/living/basic/pets/dog/corgi.dm @@ -26,6 +26,8 @@ var/is_slow = FALSE ///Item slots that are available for this corgi to equip stuff into var/list/strippable_inventory_slots = list() + ///can this mob breed? + var/can_breed = TRUE /mob/living/basic/pet/dog/corgi/Initialize(mapload) . = ..() @@ -34,6 +36,13 @@ AddElement(/datum/element/swabable, CELL_LINE_TABLE_CORGI, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) RegisterSignal(src, COMSIG_MOB_TRIED_ACCESS, PROC_REF(on_tried_access)) RegisterSignals(src, list(COMSIG_BASICMOB_LOOK_ALIVE, COMSIG_BASICMOB_LOOK_DEAD), PROC_REF(on_appearance_change)) + if(!can_breed) + return + AddComponent(\ + /datum/component/breed,\ + can_breed_with = typecacheof(list(/mob/living/basic/pet/dog/corgi)),\ + baby_path = /mob/living/basic/pet/dog/corgi/puppy,\ + ) /mob/living/basic/pet/dog/corgi/Destroy() QDEL_NULL(inventory_head) @@ -532,9 +541,11 @@ icon_dead = "puppy_dead" density = FALSE pass_flags = PASSMOB + ai_controller = /datum/ai_controller/basic_controller/dog/puppy mob_size = MOB_SIZE_SMALL collar_icon_state = "puppy" strippable_inventory_slots = list(/datum/strippable_item/pet_collar, /datum/strippable_item/corgi_id) //puppies are too small to handle hats and back slot items + can_breed = FALSE //PUPPY IAN! SQUEEEEEEEEE~ /mob/living/basic/pet/dog/corgi/puppy/ian diff --git a/code/modules/mob/living/basic/pets/dog/dog_subtypes.dm b/code/modules/mob/living/basic/pets/dog/dog_subtypes.dm index a78a553729f1ad..31c8562ce1e734 100644 --- a/code/modules/mob/living/basic/pets/dog/dog_subtypes.dm +++ b/code/modules/mob/living/basic/pets/dog/dog_subtypes.dm @@ -48,7 +48,7 @@ health = 50 maxHealth = 50 gender = NEUTER - damage_coeff = list(BRUTE = 3, BURN = 3, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) + damage_coeff = list(BRUTE = 3, BURN = 3, TOX = 1, STAMINA = 0, OXY = 1) butcher_results = list(/obj/item/organ/internal/brain = 1, /obj/item/organ/internal/heart = 1, /obj/item/food/breadslice/plain = 3, \ /obj/item/food/meat/slab = 2) response_harm_continuous = "takes a bite out of" diff --git a/code/modules/mob/living/basic/pets/fox.dm b/code/modules/mob/living/basic/pets/fox.dm index 150abdc676bc76..7d74a6a36e410a 100644 --- a/code/modules/mob/living/basic/pets/fox.dm +++ b/code/modules/mob/living/basic/pets/fox.dm @@ -39,8 +39,8 @@ /datum/ai_controller/basic_controller/fox blackboard = list( BB_ALWAYS_IGNORE_FACTION = TRUE, - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/of_size/ours_or_smaller, - BB_FLEE_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/of_size/ours_or_smaller, + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/pets/parrot/_parrot.dm b/code/modules/mob/living/basic/pets/parrot/_parrot.dm new file mode 100644 index 00000000000000..6dd5a9a40511e6 --- /dev/null +++ b/code/modules/mob/living/basic/pets/parrot/_parrot.dm @@ -0,0 +1,457 @@ +#define FORCED_SPEECH_COOLDOWN_DURATION 5 SECONDS + +GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list( + /datum/strippable_item/parrot_headset, +))) + + +/// Parrots! Klepto bastards that imitate your speech and hoard your shit. +/mob/living/basic/parrot + name = "parrot" + desc = "The parrot squawks, \"They're a Parrot! BAWWK!\"" + icon = 'icons/mob/simple/animal.dmi' + icon_state = "parrot_fly" + icon_living = "parrot_fly" + icon_dead = "parrot_dead" + density = FALSE + health = 80 + maxHealth = 80 + pass_flags = PASSTABLE | PASSMOB + + guaranteed_butcher_results = list(/obj/item/food/cracker = 1) + melee_damage_upper = 10 + melee_damage_lower = 5 + + response_help_continuous = "pets" + response_help_simple = "pet" + response_disarm_continuous = "gently moves aside" + response_disarm_simple = "gently move aside" + response_harm_continuous = "swats" + response_harm_simple = "swat" + combat_mode = TRUE //parrots now start "aggressive" since only player parrots will nuzzle. + attack_verb_continuous = "chomps" + attack_verb_simple = "chomp" + attack_vis_effect = ATTACK_EFFECT_BITE + friendly_verb_continuous = "grooms" + friendly_verb_simple = "groom" + mob_size = MOB_SIZE_SMALL + gold_core_spawnable = FRIENDLY_SPAWN + + ai_controller = /datum/ai_controller/basic_controller/parrot + + /// Icon we use while sitting + var/icon_sit = "parrot_sit" + + ///Headset for Poly to yell at engineers :) + var/obj/item/radio/headset/ears = null + + ///Parrots are kleptomaniacs. This variable ... stores the item a parrot is holding. + var/obj/item/held_item = null + + /// The blackboard key we use to store the string we're repeating + var/speech_blackboard_key = BB_PARROT_REPEAT_STRING + /// The generic probability odds we have to do a speech-related action + var/speech_probability_rate = 5 + /// The generic probability odds we have to switch out our speech string + var/speech_shuffle_rate = 30 + + /// Contains all of the perches that parrots will generally sit on until something catches their eye. + var/static/list/desired_perches = typecacheof(list( + /obj/machinery/computer, + /obj/machinery/dna_scannernew, + /obj/machinery/nuclearbomb, + /obj/machinery/recharge_station, + /obj/machinery/smartfridge, + /obj/machinery/suit_storage_unit, + /obj/machinery/telecomms, + /obj/machinery/teleport, + /obj/structure/displaycase, + /obj/structure/filingcabinet, + /obj/structure/frame/computer, + )) + ///items we wont pick up + var/static/list/ignore_items = typecacheof(list(/obj/item/radio)) + + /// Food that Poly loves to eat (spoiler alert it's just crackers) + var/static/list/edibles = list( + /obj/item/food/cracker, + ) + + /// Tracks the times when we send a phrase through either being pet or attack to ensure it's not abused to flood + COOLDOWN_DECLARE(forced_speech_cooldown) + +/mob/living/basic/parrot/Initialize(mapload) + . = ..() + setup_headset() + update_speech_blackboards() + ai_controller.set_blackboard_key(BB_PARROT_PERCH_TYPES, desired_perches) + ai_controller.set_blackboard_key(BB_IGNORE_ITEMS, ignore_items) + AddElement(/datum/element/pet_bonus) // parrots will listen for the signal this element sends in order to say something in response to the pat + AddElement(/datum/element/ai_retaliate) + AddElement(/datum/element/strippable, GLOB.strippable_parrot_items) + AddElement(/datum/element/simple_flying) + AddComponent(/datum/component/listen_and_repeat, desired_phrases = get_static_list_of_phrases(), blackboard_key = BB_PARROT_REPEAT_STRING) + AddComponent(\ + /datum/component/tameable,\ + food_types = edibles,\ + tame_chance = 100,\ + bonus_tame_chance = 0,\ + after_tame = CALLBACK(src, PROC_REF(tamed)),\ + ) + + RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attacking)) + RegisterSignal(src, COMSIG_MOB_CLICKON, PROC_REF(on_click)) + RegisterSignal(src, COMSIG_ATOM_ATTACKBY_SECONDARY, PROC_REF(on_attacked)) // this means we could have a peaceful interaction, like getting a cracker + RegisterSignal(src, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(on_injured)) // this means we got hurt and it's go time + RegisterSignal(src, COMSIG_ANIMAL_PET, PROC_REF(on_pet)) + RegisterSignal(src, COMSIG_KB_MOB_DROPITEM_DOWN, PROC_REF(drop_item_on_signal)) + +/mob/living/basic/parrot/Destroy() + // should have cleaned these up on death, but let's be super safe in case that didn't happen + if(!QDELETED(ears)) + QDEL_NULL(ears) + if(!QDELETED(held_item)) + QDEL_NULL(held_item) + return ..() + +/mob/living/basic/parrot/death(gibbed) + if(held_item) + held_item.forceMove(drop_location()) + held_item = null + + if(ears) + ears.forceMove(drop_location()) + ears = null + + if(!isnull(buckled)) + buckled.unbuckle_mob(src, force = TRUE) + buckled = null + pixel_x = base_pixel_x + pixel_y = base_pixel_y + + return ..() + +/mob/living/basic/parrot/examine(mob/user) + . = ..() + . += "It appears to [isnull(held_item) ? "not be holding anything." : "be holding \a [held_item]."]" + + if(stat != DEAD) + return + + if(HAS_MIND_TRAIT(user, TRAIT_NAIVE)) + . += pick( + "It seems tired and shagged out after a long squawk.", + "It seems to be pining for the fjords.", + "It's resting. It's a beautiful bird. Lovely plumage.", + ) + else + . += pick( + "This is a late parrot.", + "This is an ex-parrot.", + "This parrot is no more.", + ) + +/mob/living/basic/parrot/say_dead(message) + return // this is so flarped + +/mob/living/basic/parrot/get_status_tab_items() + . = ..() + . += "Held Item: [held_item]" + +/mob/living/basic/parrot/Process_Spacemove(movement_dir = 0, continuous_move = FALSE) + if(stat != DEAD) // parrots have evolved to let them fly in space because fucking uhhhhhhhhhh + return TRUE + return ..() + +/mob/living/basic/parrot/radio(message, list/message_mods = list(), list/spans, language) //literally copied from human/radio(), but there's no other way to do this. at least it's better than it used to be. + . = ..() + if(. != NONE) + return + + if(message_mods[MODE_HEADSET]) + if(ears) + ears.talk_into(src, message, , spans, language, message_mods) + return ITALICS | REDUCE_RANGE + else if(message_mods[RADIO_EXTENSION] == MODE_DEPARTMENT) + if(ears) + ears.talk_into(src, message, message_mods[RADIO_EXTENSION], spans, language, message_mods) + return ITALICS | REDUCE_RANGE + else if(message_mods[RADIO_EXTENSION] in GLOB.radiochannels) + if(ears) + ears.talk_into(src, message, message_mods[RADIO_EXTENSION], spans, language, message_mods) + return ITALICS | REDUCE_RANGE + + return NONE + +/mob/living/basic/parrot/update_icon_state() + . = ..() + if(stat == DEAD) + return + icon_state = HAS_TRAIT(src, TRAIT_PARROT_PERCHED) ? icon_sit : icon_living + +/// Proc that we just use to see if we're rightclicking something for perch behavior or dropping the item we currently ahve +/mob/living/basic/parrot/proc/on_click(mob/living/basic/source, atom/target, params) + SIGNAL_HANDLER + if(!LAZYACCESS(params, RIGHT_CLICK) || !CanReach(target)) + return + if(start_perching(target) && !isnull(held_item)) + drop_held_item(gently = TRUE) + +/// Proc that handles sending the signal and returning a valid phrase to say. Will not do anything if we don't have a stat or if we're cliented. +/// Will return either a string or null. +/mob/living/basic/parrot/proc/get_phrase() + if(!isnull(client) || stat != CONSCIOUS) + return null + + if(!COOLDOWN_FINISHED(src, forced_speech_cooldown)) + return null + + var/return_value = SEND_SIGNAL(src, COMSIG_NEEDS_NEW_PHRASE) + if(return_value & NO_NEW_PHRASE_AVAILABLE) + return null + + COOLDOWN_START(src, forced_speech_cooldown, FORCED_SPEECH_COOLDOWN_DURATION) + return ai_controller.blackboard[BB_PARROT_REPEAT_STRING] + +/// Proc that listens for when a parrot is pet so we can dispatch a voice line. +/mob/living/basic/parrot/proc/on_pet(mob/living/basic/source, mob/living/petter, modifiers) + SIGNAL_HANDLER + var/return_value = get_phrase() + if(isnull(return_value)) + return + + INVOKE_ASYNC(src, TYPE_PROC_REF(/atom/movable, say), message = return_value, forced = "parrot oneliner on pet") + +/// Proc that ascertains the type of perch we're dealing with and starts the perching process. +/// Returns TRUE if we started perching, FALSE otherwise. +/mob/living/basic/parrot/proc/start_perching(atom/target) + if(HAS_TRAIT(src, TRAIT_PARROT_PERCHED)) + balloon_alert(src, "already perched!") + return FALSE + + if(ishuman(target)) + return perch_on_human(target) + + if(!is_type_in_typecache(target, desired_perches)) + return FALSE + + forceMove(get_turf(target)) + drop_held_item(gently = TRUE) // comfy :) + toggle_perched(perched = TRUE) + RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(after_move)) + return TRUE + +/mob/living/basic/parrot/proc/after_move(atom/source) + SIGNAL_HANDLER + + UnregisterSignal(src, COMSIG_MOVABLE_MOVED) + toggle_perched(perched = FALSE) + +/// Proc that will perch us on a human. Returns TRUE if we perched, FALSE otherwise. +/mob/living/basic/parrot/proc/perch_on_human(mob/living/carbon/human/target) + if(LAZYLEN(target.buckled_mobs) >= target.max_buckled_mobs) + balloon_alert(src, "can't perch on them!") + return FALSE + + forceMove(get_turf(target)) + if(!target.buckle_mob(src, TRUE)) + return FALSE + + to_chat(src, span_notice("You sit on [target]'s shoulder.")) + toggle_perched(perched = TRUE) + RegisterSignal(src, COMSIG_LIVING_SET_BUCKLED, PROC_REF(on_unbuckle)) + return TRUE + +/mob/living/basic/parrot/proc/on_unbuckle(mob/living/source, atom/movable/new_buckled) + SIGNAL_HANDLER + + if(new_buckled) + return + UnregisterSignal(src, COMSIG_LIVING_SET_BUCKLED) + toggle_perched(perched = FALSE) + +/mob/living/basic/parrot/proc/toggle_perched(perched) + if(!perched) + REMOVE_TRAIT(src, TRAIT_PARROT_PERCHED, TRAIT_GENERIC) + else + ADD_TRAIT(src, TRAIT_PARROT_PERCHED, TRAIT_GENERIC) + update_appearance(UPDATE_ICON_STATE) + +/// Master proc which will determine the intent of OUR attacks on an object and summon the relevant procs accordingly. +/// This is pretty much meant for players, AI will use the task-specific procs instead. +/mob/living/basic/parrot/proc/pre_attacking(mob/living/basic/source, atom/target) + SIGNAL_HANDLER + if(stat != CONSCIOUS) + return + + if(isitem(target) && steal_from_ground(target)) + return COMPONENT_HOSTILE_NO_ATTACK + + if(iscarbon(target) && steal_from_mob(target)) + return COMPONENT_HOSTILE_NO_ATTACK + +/// Picks up an item from the ground and puts it in our claws. Returns TRUE if we picked it up, FALSE otherwise. +/mob/living/basic/parrot/proc/steal_from_ground(obj/item/target) + if(!isnull(held_item)) + balloon_alert(src, "already holding something!") + return FALSE + + if(target.w_class > WEIGHT_CLASS_SMALL) + balloon_alert(src, "too big to pick up!") + return FALSE + + pick_up_item(target) + visible_message( + span_notice("[src] grabs [held_item]!"), + span_notice("You grab [held_item]!"), + span_hear("You hear the sounds of wings flapping furiously."), + ) + return TRUE + +/// Looks for an item that we can snatch and puts it in our claws. Returns TRUE if we picked it up, FALSE otherwise. +/mob/living/basic/parrot/proc/steal_from_mob(mob/living/carbon/victim) + if(!isnull(held_item)) + balloon_alert(src, "already holding something!") + return FALSE + + for(var/obj/item/stealable in victim.held_items) + if(stealable.w_class > WEIGHT_CLASS_SMALL) + continue + + if(!victim.temporarilyRemoveItemFromInventory(stealable)) + continue + + visible_message( + span_notice("[src] grabs [held_item] out of [victim]'s hand!"), + span_notice("You snag [held_item] out of [victim]'s hand!"), + span_hear("You hear the sounds of wings flapping furiously."), + ) + pick_up_item(stealable) + return TRUE + + return FALSE + +/// If we're right-clicked on with a cracker, we eat the cracker. +/mob/living/basic/parrot/proc/on_attacked(mob/living/basic/source, obj/item/thing, mob/living/attacker, params) + SIGNAL_HANDLER + if(!istype(thing, /obj/item/food/cracker)) // Poly wants a cracker + return + + consume_cracker(thing) // potential clash with the tameable element so we'll leave it to that to handle qdeling the cracker. + return COMPONENT_NO_AFTERATTACK + +/// Eats a cracker (or anything i guess). This would be nice to eventually fold into the basic_eating element but we do too much snowflake inventory code stuff for this to be reliable presently. +/// We don't qdel the item here, we assume the invoking proc will have handled that somehow. +/// Returns TRUE if we ate the thing. +/mob/living/basic/parrot/proc/consume_cracker(obj/item/thing) + to_chat(src, span_notice("[src] eagerly devours \the [thing].")) + if(!istype(thing, /obj/item/food/cracker)) + return TRUE // we still ate it + + if(health < maxHealth) + adjustBruteLoss(-10) + speech_probability_rate *= 1.27 + speech_shuffle_rate += 10 + update_speech_blackboards() + return TRUE + +/// Handles special behavior whenever we are injured. +/mob/living/basic/parrot/proc/on_injured(mob/living/basic/source, mob/living/attacker, attack_flags) + SIGNAL_HANDLER + if(!isnull(client) || stat == CONSCIOUS) + return + + drop_held_item(gently = FALSE) + + var/return_value = get_phrase() + if(isnull(return_value)) + return + + INVOKE_ASYNC(src, TYPE_PROC_REF(/atom/movable, say), message = return_value, forced = "parrot oneliner on attack") + +/// Handles picking up the item we're holding, done in its own proc because of a snowflake edge case we need to account for. No additional logic beyond that. +/// Returns TRUE if we picked it up, FALSE otherwise. +/mob/living/basic/parrot/proc/pick_up_item(obj/item/target) + if(istype(target, /obj/item/food/cracker)) + consume_cracker(target) + qdel(target) + return + + target.forceMove(src) + held_item = target + +/// Handles dropping items we're holding. Gently is a special modifier we can use for special interactions. +/mob/living/basic/parrot/proc/drop_held_item(gently = TRUE) + if(isnull(held_item)) + balloon_alert(src, "nothing to drop!") + return + + if(stat != CONSCIOUS) // don't gotta do shit + return + + if(!gently && isgrenade(held_item)) + var/obj/item/grenade/bomb = held_item + balloon_alert(src, "bombs away!") // you'll likely die too so we can get away with the `!` here + bomb.forceMove(drop_location()) + bomb.detonate() + return + + balloon_alert(src, "dropped item") + held_item.forceMove(drop_location()) + +/mob/living/basic/parrot/Exited(atom/movable/gone, direction) + . = ..() + if(gone != held_item) + return + held_item = null + +/mob/living/basic/parrot/vv_edit_var(var_name, vval) + . = ..() // give admins an easier time when it comes to fucking with poly + switch(var_name) + if(NAMEOF(src, speech_probability_rate)) + update_speech_blackboards() + if(NAMEOF(src, speech_shuffle_rate)) + update_speech_blackboards() + +/// Updates our speech blackboards mob-side to reflect the current speech on the controller to ensure everything is synchronized. +/mob/living/basic/parrot/proc/update_speech_blackboards() + ai_controller.set_blackboard_key(BB_PARROT_REPEAT_PROBABILITY, speech_probability_rate) + ai_controller.set_blackboard_key(BB_PARROT_PHRASE_CHANGE_PROBABILITY, speech_shuffle_rate) + +/// Will simply set up the headset for the parrot to use. Stub, implemented on subtypes. +/mob/living/basic/parrot/proc/setup_headset() + return + +/// Gets a static list of phrases we wish to pass to the element. +/mob/living/basic/parrot/proc/get_static_list_of_phrases() + var/static/list/default_phrases = list( + "BAWWWWK george mellons griffing me!", + "Cracker?", + "Hello!", + "Hi!", + ) + + return default_phrases + +/// Gets the available channels that this parrot has access to. Returns a list of the channels we can use. +/mob/living/basic/parrot/proc/get_available_channels() + var/list/returnable_list = list() + if(isnull(ears)) + return returnable_list + + var/list/headset_channels = ears.channels + for(var/channel in headset_channels) + returnable_list += GLOB.channel_tokens[channel] // will return something like ":e" or ":c" y'know + + return returnable_list + +/mob/living/basic/parrot/proc/tamed() + new /obj/effect/temp_visual/heart(drop_location()) + +/mob/living/basic/parrot/proc/drop_item_on_signal(mob/living/user) + SIGNAL_HANDLER + + drop_held_item() + return COMSIG_KB_ACTIVATED + +#undef FORCED_SPEECH_COOLDOWN_DURATION diff --git a/code/modules/mob/living/basic/pets/parrot/parrot_ai/_parrot_controller.dm b/code/modules/mob/living/basic/pets/parrot/parrot_ai/_parrot_controller.dm new file mode 100644 index 00000000000000..fb3ac3fdffbbf2 --- /dev/null +++ b/code/modules/mob/living/basic/pets/parrot/parrot_ai/_parrot_controller.dm @@ -0,0 +1,42 @@ +/datum/ai_controller/basic_controller/parrot + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, + BB_HOARD_LOCATION_RANGE = 9, + ) + + ai_traits = STOP_MOVING_WHEN_PULLED + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk/parrot + + planning_subtrees = list( + /datum/ai_planning_subtree/target_retaliate, + /datum/ai_planning_subtree/perch_on_target, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/hoard_items, + /datum/ai_planning_subtree/parrot_as_in_repeat, // always get a witty oneliner in when you can + ) + +/datum/idle_behavior/idle_random_walk/parrot + ///chance of us moving while perched + var/walk_chance_when_perched = 1 // NOVA EDIT CHANGE - More obedient poly ORIGINAL : var/walk_chance_when_perched = 5 + +/datum/idle_behavior/idle_random_walk/parrot/perform_idle_behavior(seconds_per_tick, datum/ai_controller/controller) + var/mob/living/living_pawn = controller.pawn + walk_chance = HAS_TRAIT(living_pawn, TRAIT_PARROT_PERCHED) ? walk_chance_when_perched : initial(walk_chance) + return ..() + +/datum/ai_behavior/travel_towards/and_drop + +/datum/ai_behavior/travel_towards/and_drop/finish_action(datum/ai_controller/controller, succeeded, target_key) + . = ..() + var/mob/living/living_mob = controller.pawn + if(QDELETED(living_mob)) // pawn can be null at this point + return + var/obj/drop_item = locate(/obj/item) in (living_mob.contents - typecache_filter_list(living_mob.contents, controller.blackboard[BB_IGNORE_ITEMS])) + drop_item?.forceMove(get_turf(living_mob)) + +/datum/ai_behavior/basic_melee_attack/interact_once/parrot + +/datum/ai_behavior/basic_melee_attack/interact_once/parrot/finish_action(datum/ai_controller/controller, succeeded, target_key) + . = ..() + controller.set_blackboard_key(BB_ALWAYS_IGNORE_FACTION, FALSE) diff --git a/code/modules/mob/living/basic/pets/parrot/parrot_ai/ghost_parrot_controller.dm b/code/modules/mob/living/basic/pets/parrot/parrot_ai/ghost_parrot_controller.dm new file mode 100644 index 00000000000000..58bdef408a5eec --- /dev/null +++ b/code/modules/mob/living/basic/pets/parrot/parrot_ai/ghost_parrot_controller.dm @@ -0,0 +1,37 @@ +/// Used for ghost poly. +/datum/ai_controller/basic_controller/parrot/ghost + planning_subtrees = list( + /datum/ai_planning_subtree/parrot_as_in_repeat, + /datum/ai_planning_subtree/possess_humans, + /datum/ai_planning_subtree/hoard_items, + ) + +///subtree to possess humans +/datum/ai_planning_subtree/possess_humans + ///chance we go possess humans + var/possess_chance = 2 + +/datum/ai_planning_subtree/possess_humans/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/mob/living/living_pawn = controller.pawn + + if(controller.blackboard_key_exists(BB_PERCH_TARGET)) + controller.queue_behavior(/datum/ai_behavior/perch_on_target/haunt, BB_PERCH_TARGET) + return SUBTREE_RETURN_FINISH_PLANNING + + + if(!SPT_PROB(possess_chance, seconds_per_tick)) + if(ishuman(living_pawn.loc)) + return SUBTREE_RETURN_FINISH_PLANNING + return + + if(ishuman(living_pawn.loc)) + controller.set_blackboard_key(living_pawn.loc) + return + + controller.queue_behavior(/datum/ai_behavior/find_and_set/conscious_person, BB_PERCH_TARGET) + + +/datum/ai_behavior/perch_on_target/haunt + +/datum/ai_behavior/perch_on_target/haunt/check_human_conditions(mob/living/living_human) + return (living_human.stat != DEAD) diff --git a/code/modules/mob/living/basic/pets/parrot/parrot_ai/parrot_hoarding.dm b/code/modules/mob/living/basic/pets/parrot/parrot_ai/parrot_hoarding.dm new file mode 100644 index 00000000000000..7484cbfe6751c6 --- /dev/null +++ b/code/modules/mob/living/basic/pets/parrot/parrot_ai/parrot_hoarding.dm @@ -0,0 +1,74 @@ +///subtree to steal items +/datum/ai_planning_subtree/hoard_items + var/theft_chance = 5 + +/datum/ai_planning_subtree/hoard_items/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/mob/living/living_pawn = controller.pawn + + var/turf/myspace = controller.blackboard[BB_HOARD_LOCATION] + + if(isnull(myspace) || myspace.is_blocked_turf(source_atom = controller.pawn) || get_dist(myspace, controller.pawn) > controller.blackboard[BB_HOARD_LOCATION_RANGE]) + controller.queue_behavior(/datum/ai_behavior/find_and_set/hoard_location, BB_HOARD_LOCATION, /turf/open) + return + + //we have an item, go drop! + var/list/our_contents = living_pawn.contents - typecache_filter_list(living_pawn.contents, controller.blackboard[BB_IGNORE_ITEMS]) + if(length(our_contents)) + controller.queue_behavior(/datum/ai_behavior/travel_towards/and_drop, BB_HOARD_LOCATION) + return SUBTREE_RETURN_FINISH_PLANNING + + if(controller.blackboard_key_exists(BB_HOARD_ITEM_TARGET)) + controller.queue_behavior(/datum/ai_behavior/basic_melee_attack/interact_once, BB_HOARD_ITEM_TARGET, BB_TARGETING_STRATEGY) + return SUBTREE_RETURN_FINISH_PLANNING + + if(!SPT_PROB(theft_chance, seconds_per_tick)) + return + controller.queue_behavior(/datum/ai_behavior/find_and_set/hoard_item, BB_HOARD_ITEM_TARGET) + +/datum/ai_behavior/find_and_set/hoard_location + +/datum/ai_behavior/find_and_set/hoard_location/search_tactic(datum/ai_controller/controller, locate_path, search_range) + for(var/turf/open/candidate in oview(search_range, controller.pawn)) + if(isspaceturf(candidate) || isopenspaceturf(candidate)) + continue + if(candidate.is_blocked_turf(source_atom = controller.pawn)) + continue + return candidate + + return null + +/datum/ai_behavior/find_and_set/hoard_item + action_cooldown = 5 SECONDS + behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + +/datum/ai_behavior/find_and_set/hoard_item/search_tactic(datum/ai_controller/controller, locate_path, search_range) + if(!controller.blackboard_key_exists(BB_HOARD_LOCATION)) + return null + var/turf/nest_turf = controller.blackboard[BB_HOARD_LOCATION] + var/mob/living/living_pawn = controller.pawn + for(var/atom/potential_victim in oview(search_range, controller.pawn)) + if(is_type_in_typecache(potential_victim, controller.blackboard[BB_IGNORE_ITEMS])) + continue + if(potential_victim.loc == nest_turf) + continue + if(isitem(potential_victim)) + var/obj/item/item_steal = potential_victim + if(item_steal.w_class <= WEIGHT_CLASS_SMALL) + return potential_victim + if(!ishuman(potential_victim)) + continue + if(living_pawn.faction.Find(REF(potential_victim))) + continue //dont steal from friends + if(holding_valuable(controller, potential_victim)) + controller.set_blackboard_key(BB_ALWAYS_IGNORE_FACTION, TRUE) + return potential_victim + + return null + +/datum/ai_behavior/find_and_set/hoard_item/proc/holding_valuable(datum/ai_controller/controller, mob/living/human_target) + for(var/obj/item/potential_item in human_target.held_items) + if(is_type_in_typecache(potential_item, controller.blackboard[BB_IGNORE_ITEMS])) + continue + if(potential_item.w_class <= WEIGHT_CLASS_SMALL) + return TRUE + return FALSE diff --git a/code/modules/mob/living/basic/pets/parrot/parrot_ai/parrot_perching.dm b/code/modules/mob/living/basic/pets/parrot/parrot_ai/parrot_perching.dm new file mode 100644 index 00000000000000..ccc3ef92f6ea22 --- /dev/null +++ b/code/modules/mob/living/basic/pets/parrot/parrot_ai/parrot_perching.dm @@ -0,0 +1,78 @@ +///subtree to perch on targets +/datum/ai_planning_subtree/perch_on_target + ///perchance... + var/perch_chance = 5 + ///chance we unbuckle + var/unperch_chance = 15 + + +/datum/ai_planning_subtree/perch_on_target/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/mob/living/living_pawn = controller.pawn + var/atom/buckled_to = living_pawn.buckled + + //do we have a current target or is chance to unbuckle has passed? then unbuckle! + if(buckled_to) + if((SPT_PROB(unperch_chance, seconds_per_tick) || controller.blackboard_key_exists(BB_BASIC_MOB_CURRENT_TARGET))) + controller.queue_behavior(/datum/ai_behavior/unbuckle_mob) + return + return SUBTREE_RETURN_FINISH_PLANNING + + //if we are perched, we can go find something else to perch too + var/final_chance = HAS_TRAIT(living_pawn, TRAIT_PARROT_PERCHED) ? unperch_chance : perch_chance + + if(!SPT_PROB(final_chance, seconds_per_tick) || controller.blackboard_key_exists(BB_BASIC_MOB_CURRENT_TARGET)) + return + + if(controller.blackboard_key_exists(BB_PERCH_TARGET)) + controller.queue_behavior(/datum/ai_behavior/perch_on_target, BB_PERCH_TARGET) + return SUBTREE_RETURN_FINISH_PLANNING + + //50 50 chance to look for an object, or a friend + if(prob(50)) + controller.queue_behavior(/datum/ai_behavior/find_and_set/nearby_friends, BB_PERCH_TARGET) + return + + controller.queue_behavior(/datum/ai_behavior/find_and_set/in_list, BB_PERCH_TARGET, controller.blackboard[BB_PARROT_PERCH_TYPES]) + +/// Parrot behavior that allows them to perch on a target. +/datum/ai_behavior/perch_on_target + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + +/datum/ai_behavior/perch_on_target/setup(datum/ai_controller/controller, target_key) + . = ..() + var/atom/target = controller.blackboard[target_key] + if(QDELETED(target)) + return FALSE + + set_movement_target(controller, target) + +/datum/ai_behavior/perch_on_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() + var/atom/target = controller.blackboard[target_key] + if(QDELETED(target)) + finish_action(controller, FALSE, target_key) + return + + var/mob/living/basic/parrot/living_pawn = controller.pawn + + if(!ishuman(target)) + living_pawn.start_perching(target) + finish_action(controller, TRUE, target_key) + return + + if(!check_human_conditions(target)) + finish_action(controller, FALSE, target_key) + return + + living_pawn.start_perching(target) + finish_action(controller, TRUE, target_key) + +/datum/ai_behavior/perch_on_target/proc/check_human_conditions(mob/living/living_human) + if(living_human.stat == DEAD || LAZYLEN(living_human.buckled_mobs) >= living_human.max_buckled_mobs) + return FALSE + + return TRUE + +/datum/ai_behavior/perch_on_target/finish_action(datum/ai_controller/controller, succeeded, target_key) + . = ..() + controller.clear_blackboard_key(target_key) diff --git a/code/modules/mob/living/basic/pets/parrot/parrot_ai/parroting_action.dm b/code/modules/mob/living/basic/pets/parrot/parrot_ai/parroting_action.dm new file mode 100644 index 00000000000000..d1488a60b3bb98 --- /dev/null +++ b/code/modules/mob/living/basic/pets/parrot/parrot_ai/parroting_action.dm @@ -0,0 +1,50 @@ +/// When a parrot... parrots... +/datum/ai_planning_subtree/parrot_as_in_repeat + operational_datums = list(/datum/component/listen_and_repeat) + +/datum/ai_planning_subtree/parrot_as_in_repeat/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/atom/speaking_pawn = controller.pawn + + var/switch_up_probability = controller.blackboard[BB_PARROT_PHRASE_CHANGE_PROBABILITY] + if(SPT_PROB(switch_up_probability, seconds_per_tick) || isnull(controller.blackboard[BB_PARROT_REPEAT_STRING])) + if(SEND_SIGNAL(speaking_pawn, COMSIG_NEEDS_NEW_PHRASE) & NO_NEW_PHRASE_AVAILABLE) + return + + if(!SPT_PROB(controller.blackboard[BB_PARROT_REPEAT_PROBABILITY], seconds_per_tick)) + return + + var/potential_string = controller.blackboard[BB_PARROT_REPEAT_STRING] + if(isnull(potential_string)) + stack_trace("Parrot As In Repeat Subtree somehow is getting a null potential string while not getting `NO_NEW_PHRASE_AVAILABLE`!") + return + + controller.queue_behavior(/datum/ai_behavior/perform_speech/parrot, potential_string) + +/datum/ai_behavior/perform_speech/parrot + action_cooldown = 7.5 SECONDS // gets really annoying (moreso than usual) really fast otherwise + +/datum/ai_behavior/perform_speech/parrot/perform(seconds_per_tick, datum/ai_controller/controller, speech, speech_sound) + var/mob/living/basic/parrot/speaking_pawn = controller.pawn + var/list/available_channels = speaking_pawn.get_available_channels() + var/modified_speech = speech + var/use_radio = prob(50) // we might not even use the radio if we even have a channel + +#define HAS_CHANNEL_PREFIX (speech[1] in GLOB.department_radio_prefixes) && (copytext_char(speech, 2, 3) in GLOB.department_radio_keys) // determine if we need to crop the channel prefix + + if(!length(available_channels)) // might not even use the radio at all + if(HAS_CHANNEL_PREFIX) + modified_speech = copytext_char(speech, 3) + + else + if(HAS_CHANNEL_PREFIX) + modified_speech = "[use_radio ? pick(available_channels) : ""][copytext_char(speech, 3)]" + else + modified_speech = "[use_radio ? pick(available_channels) : ""][speech]" + + + speaking_pawn.say(modified_speech, forced = "AI Controller") + if(speech_sound) + playsound(speaking_pawn, speech_sound, 80, vary = TRUE) + finish_action(controller, TRUE) + +#undef HAS_CHANNEL_PREFIX diff --git a/code/modules/mob/living/basic/pets/parrot/parrot_items.dm b/code/modules/mob/living/basic/pets/parrot/parrot_items.dm new file mode 100644 index 00000000000000..c071bf7fdbe621 --- /dev/null +++ b/code/modules/mob/living/basic/pets/parrot/parrot_items.dm @@ -0,0 +1,60 @@ +/datum/strippable_item/parrot_headset + key = STRIPPABLE_ITEM_PARROT_HEADSET + +/datum/strippable_item/parrot_headset/get_item(atom/source) + var/mob/living/basic/parrot/poly/parrot_source = source + return istype(parrot_source) ? parrot_source.ears : null + +/datum/strippable_item/parrot_headset/try_equip(atom/source, obj/item/equipping, mob/user) + . = ..() + if (!.) + return FALSE + + if (!istype(equipping, /obj/item/radio/headset)) + to_chat(user, span_warning("[equipping] won't fit!")) + return FALSE + + return TRUE + +// There is no delay for putting a headset on a parrot. +/datum/strippable_item/parrot_headset/start_equip(atom/source, obj/item/equipping, mob/user) + return TRUE + +/datum/strippable_item/parrot_headset/finish_equip(atom/source, obj/item/equipping, mob/user) + var/obj/item/radio/headset/radio = equipping + if (!istype(radio)) + return + + var/mob/living/basic/parrot/parrot_source = source + if (!istype(parrot_source)) + return + + if (!user.transferItemToLoc(radio, source)) + return + + parrot_source.ears = radio + + to_chat(user, span_notice("You fit [radio] onto [source].")) + +/datum/strippable_item/parrot_headset/start_unequip(atom/source, mob/user) + . = ..() + if (!.) + return FALSE + + var/mob/living/basic/parrot/parrot_source = source + if (!istype(parrot_source)) + return + + if (parrot_source.stat == CONSCIOUS) + var/list/list_of_channels = parrot_source.get_available_channels() + parrot_source.say("[list_of_channels ? "[pick(list_of_channels)] " : null]BAWWWWWK LEAVE THE HEADSET BAWKKKKK!", forced = "attempted headset removal") + + return TRUE + +/datum/strippable_item/parrot_headset/finish_unequip(atom/source, mob/user) + var/mob/living/basic/parrot/parrot_source = source + if (!istype(parrot_source)) + return + + parrot_source.ears.forceMove(parrot_source.drop_location()) + parrot_source.ears = null diff --git a/code/modules/mob/living/basic/pets/parrot/parrot_subtypes.dm b/code/modules/mob/living/basic/pets/parrot/parrot_subtypes.dm new file mode 100644 index 00000000000000..a0e8a4b529455f --- /dev/null +++ b/code/modules/mob/living/basic/pets/parrot/parrot_subtypes.dm @@ -0,0 +1,14 @@ +// this file is for parrots that aren't poly + +/// Parrot that will just randomly spawn with a headset. Nothing too special beyond that. +/mob/living/basic/parrot/headsetted + +/mob/living/basic/parrot/headsetted/setup_headset() + var/headset = pick( + /obj/item/radio/headset/headset_cargo, + /obj/item/radio/headset/headset_eng, + /obj/item/radio/headset/headset_med, + /obj/item/radio/headset/headset_sci, + /obj/item/radio/headset/headset_sec, + ) + ears = new headset(src) diff --git a/code/modules/mob/living/basic/pets/parrot/poly.dm b/code/modules/mob/living/basic/pets/parrot/poly.dm new file mode 100644 index 00000000000000..f139a43d988df6 --- /dev/null +++ b/code/modules/mob/living/basic/pets/parrot/poly.dm @@ -0,0 +1,247 @@ +/// Default poly, presumably died the last shift and has no special traits. +#define POLY_DEFAULT "default" +/// Poly has survived a number of rounds equivalent to the longest survival of his being. +#define POLY_LONGEST_SURVIVAL "longest_survival" +/// Poly has survived a number of rounds equivalent to the longest deathstreak of his being. +#define POLY_BEATING_DEATHSTREAK "longest_deathstreak" +/// Poly has only just survived a round, and is doing a consecutive one. +#define POLY_CONSECUTIVE_ROUND "consecutive_round" +/// haunt filter we apply to who we possess +#define POLY_POSSESS_FILTER +/// haunt filter color we apply to who we possess +#define POLY_POSSESS_GLOW "#522059" + +/// The classically famous compadre to the Chief Engineer, Poly. +/mob/living/basic/parrot/poly + name = "Poly" + desc = "Poly the Parrot. An expert on quantum cracker theory." + gold_core_spawnable = NO_SPAWN + speech_probability_rate = 13 + + /// Callback to save our memory at the end of the round. + var/datum/callback/roundend_callback = null + /// Did we write the memory to disk? + var/memory_saved = FALSE + /// How long has this bird been alive for? + var/rounds_survived = 0 + /// How long have we survived for at max? + var/longest_survival = 0 + /// How many rounds in a row have we been dead for? + var/longest_deathstreak = 0 + +/mob/living/basic/parrot/poly/Initialize(mapload) + . = ..() + + if(!memory_saved) + roundend_callback = CALLBACK(src, PROC_REF(Write_Memory)) + SSticker.OnRoundend(roundend_callback) + + REGISTER_REQUIRED_MAP_ITEM(1, 1) // every map needs a poly! + update_appearance() + + if(!SStts.tts_enabled) + return + + voice = pick(SStts.available_speakers) + if(SStts.pitch_enabled) + if(findtext(voice, "Woman")) + pitch = 12 // up-pitch by one octave + else + pitch = 24 // up-pitch by 2 octaves + else + voice_filter = "rubberband=pitch=1.5" // Use the filter to pitch up if we can't naturally pitch up. + +/mob/living/basic/parrot/poly/Destroy() + LAZYREMOVE(SSticker.round_end_events, roundend_callback) // we do the memory writing stuff on death, but this is important to yeet as fast as we can if we need to destroy + roundend_callback = null + return ..() + +/mob/living/basic/parrot/poly/death(gibbed) + if(HAS_TRAIT(src, TRAIT_DONT_WRITE_MEMORY)) + return ..() // Don't read memory either. + if(!memory_saved) + Write_Memory(TRUE) + var/special_status = determine_special_poly() + if(special_status == POLY_LONGEST_SURVIVAL || special_status == POLY_BEATING_DEATHSTREAK || prob(0.666)) + var/mob/living/basic/parrot/poly/ghost/specter = new(loc) + if(mind) + mind.transfer_to(specter) + else + specter.key = key + return ..() + +/mob/living/basic/parrot/poly/get_static_list_of_phrases() // there's only one poly, so there should only be one ongoing list of phrases. i guess + var/static/list/phrases_to_return = list() + if(length(phrases_to_return)) + return phrases_to_return + + phrases_to_return += read_memory() // must come first!!! + // now add some valuable lines every poly should have + phrases_to_return += list( + ":e Check the crystal, you chucklefucks!", + ":e OH GOD ITS ABOUT TO DELAMINATE CALL THE SHUTTLE", + ":e WHO TOOK THE DAMN MODSUITS?", + ":e Wire the solars, you lazy bums!", + "Poly wanna cracker!", + ) + switch(determine_special_poly()) + if(POLY_DEFAULT) + phrases_to_return += pick("...alive?", "This isn't parrot heaven!", "I live, I die, I live again!", "The void fades!") + if(POLY_LONGEST_SURVIVAL) + phrases_to_return += pick("...[longest_survival].", "The things I've seen!", "I have lived many lives!", "What are you before me?") + if(POLY_BEATING_DEATHSTREAK) + phrases_to_return += pick("What are you waiting for!", "Violence breeds violence!", "Blood! Blood!", "Strike me down if you dare!") + if(POLY_CONSECUTIVE_ROUND) + phrases_to_return += pick("...again?", "No, It was over!", "Let me out!", "It never ends!") + + return phrases_to_return + +/mob/living/basic/parrot/poly/update_desc() + . = ..() + switch(determine_special_poly()) + if(POLY_LONGEST_SURVIVAL) + desc += " Old as sin, and just as loud. Claimed to be [rounds_survived]." + if(POLY_BEATING_DEATHSTREAK) + desc += " The squawks of [-rounds_survived] dead parrots ring out in your ears..." + if(POLY_CONSECUTIVE_ROUND) + desc += " Over [rounds_survived] shifts without a \"terrible\" \"accident\"!" + +/mob/living/basic/parrot/poly/update_icon() + . = ..() + switch(determine_special_poly()) + if(POLY_LONGEST_SURVIVAL) + add_atom_colour("#EEEE22", FIXED_COLOUR_PRIORITY) + if(POLY_BEATING_DEATHSTREAK) + add_atom_colour("#BB7777", FIXED_COLOUR_PRIORITY) + +/// Reads the memory of the parrot, and updates the necessary variables. Returns a list of phrases to add to the parrot's speech buffer. +/mob/living/basic/parrot/poly/proc/read_memory() + RETURN_TYPE(/list) + var/list/returnable_list = list() + if(fexists("data/npc_saves/Poly.sav")) //legacy compatability to convert old format to new + var/savefile/legacy = new /savefile("data/npc_saves/Poly.sav") + legacy["phrases"] >> returnable_list + legacy["roundssurvived"] >> rounds_survived + legacy["longestsurvival"] >> longest_survival + legacy["longestdeathstreak"] >> longest_deathstreak + fdel("data/npc_saves/Poly.sav") + + else + var/json_file = file("data/npc_saves/Poly.json") + if(!fexists(json_file)) + return list() + var/list/json = json_decode(file2text(json_file)) + returnable_list = json["phrases"] + rounds_survived = json["roundssurvived"] + longest_survival = json["longestsurvival"] + longest_deathstreak = json["longestdeathstreak"] + + return returnable_list + +/// Determines the type of Poly we might have here based on the statistics we got from the memory. +/mob/living/basic/parrot/poly/proc/determine_special_poly() + if(rounds_survived == longest_survival) + return POLY_LONGEST_SURVIVAL + else if(rounds_survived == longest_deathstreak) + return POLY_BEATING_DEATHSTREAK + else if(rounds_survived > 0) + return POLY_CONSECUTIVE_ROUND + else + return POLY_DEFAULT + +/mob/living/basic/parrot/poly/Write_Memory(dead, gibbed) + . = ..() + if(!. || memory_saved) // if we die, no more memory + return FALSE + + if(!dead && (stat != DEAD)) + dead = FALSE + + var/file_path = "data/npc_saves/Poly.json" + var/list/file_data = list() + + var/list/exportable_speech_buffer = ai_controller.blackboard[BB_EXPORTABLE_STRING_BUFFER_LIST] // should have been populated when we sent the signal out on parent + if(!!length(exportable_speech_buffer)) + file_data["phrases"] = exportable_speech_buffer + + if(dead) + file_data["roundssurvived"] = min(rounds_survived - 1, 0) + file_data["longestsurvival"] = longest_survival + if(rounds_survived - 1 < longest_deathstreak) + file_data["longestdeathstreak"] = rounds_survived - 1 + else + file_data["longestdeathstreak"] = longest_deathstreak + else + + file_data["roundssurvived"] = max(rounds_survived, 0) + 1 + if(rounds_survived + 1 > longest_survival) + file_data["longestsurvival"] = rounds_survived + 1 + else + file_data["longestsurvival"] = longest_survival + file_data["longestdeathstreak"] = longest_deathstreak + + rustg_file_write(json_encode(file_data, JSON_PRETTY_PRINT), file_path) + memory_saved = TRUE + return TRUE + +/mob/living/basic/parrot/poly/setup_headset() + ears = new /obj/item/radio/headset/headset_eng(src) + +/mob/living/basic/parrot/poly/ghost + name = "The Ghost of Poly" + desc = "Doomed to squawk the Earth." + color = "#FFFFFF77" + status_flags = GODMODE + sentience_type = SENTIENCE_BOSS //This is so players can't mindswap into ghost poly to become a literal god + incorporeal_move = INCORPOREAL_MOVE_BASIC + butcher_results = list(/obj/item/ectoplasm = 1) + ai_controller = /datum/ai_controller/basic_controller/parrot/ghost + speech_probability_rate = 1 + +/mob/living/basic/parrot/poly/ghost/Initialize(mapload) + // block anything and everything that could possibly happen with writing memory for ghosts + memory_saved = TRUE + ADD_TRAIT(src, TRAIT_DONT_WRITE_MEMORY, INNATE_TRAIT) + RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) + return ..() + +//we perch on human souls +/mob/living/basic/parrot/poly/ghost/perch_on_human(mob/living/carbon/human/target) + if(loc == target) //dismount + forceMove(get_turf(target)) + return FALSE + if(ishuman(loc)) + balloon_alert(src, "already possessing!") + return FALSE + forceMove(target) + return TRUE + +/mob/living/basic/parrot/poly/ghost/proc/on_moved(atom/movable/movable, atom/old_loc) + SIGNAL_HANDLER + + if(ishuman(old_loc)) + var/mob/living/unpossessed_human = old_loc + unpossessed_human.remove_filter(POLY_POSSESS_FILTER) + return + + if(!ishuman(loc)) + return + + var/mob/living/possessed_human = loc + possessed_human.add_filter(POLY_POSSESS_FILTER, 2, list("type" = "outline", "color" = POLY_POSSESS_GLOW, "size" = 2)) + var/filter = possessed_human.get_filter(POLY_POSSESS_FILTER) + + if(filter) + animate(filter, alpha = 200, time = 2 SECONDS, loop = -1) + animate(alpha = 60, time = 2 SECONDS) + + var/datum/disease/parrot_possession/on_possession = new /datum/disease/parrot_possession + on_possession.set_parrot(src) + possessed_human.ForceContractDisease(on_possession, make_copy = FALSE, del_on_fail = TRUE) + +#undef POLY_DEFAULT +#undef POLY_LONGEST_SURVIVAL +#undef POLY_BEATING_DEATHSTREAK +#undef POLY_CONSECUTIVE_ROUND +#undef POLY_POSSESS_FILTER +#undef POLY_POSSESS_GLOW diff --git a/code/modules/mob/living/basic/pets/penguin.dm b/code/modules/mob/living/basic/pets/penguin.dm index 35abc784e3792e..671c2cf30c130f 100644 --- a/code/modules/mob/living/basic/pets/penguin.dm +++ b/code/modules/mob/living/basic/pets/penguin.dm @@ -84,7 +84,7 @@ /datum/ai_controller/basic_controller/penguin blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED @@ -178,7 +178,7 @@ /datum/ai_controller/basic_controller/penguin/baby blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_FIND_MOM_TYPES = list(/mob/living/basic/pet/penguin), BB_IGNORE_MOM_TYPES = list(/mob/living/basic/pet/penguin/baby), ) diff --git a/code/modules/mob/living/basic/pets/sloth.dm b/code/modules/mob/living/basic/pets/sloth.dm index aaeeb218b2c0cc..0b1546ccf93dd8 100644 --- a/code/modules/mob/living/basic/pets/sloth.dm +++ b/code/modules/mob/living/basic/pets/sloth.dm @@ -75,8 +75,8 @@ GLOBAL_DATUM(cargo_sloth, /mob/living/basic/sloth) /// They're really passive in game, so they just wanna get away if you start smacking them. No trees in space from them to use for clawing your eyes out, but they will try if desperate. /datum/ai_controller/basic_controller/sloth blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, - BB_FLEE_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED diff --git a/code/modules/mob/living/basic/ruin_defender/flesh.dm b/code/modules/mob/living/basic/ruin_defender/flesh.dm index 7d13c7e66217f2..2a1948172cf2d7 100644 --- a/code/modules/mob/living/basic/ruin_defender/flesh.dm +++ b/code/modules/mob/living/basic/ruin_defender/flesh.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/living_limb_flesh blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) @@ -78,13 +78,13 @@ return step(victim, pick(GLOB.cardinals)) to_chat(victim, span_warning("Your [current_bodypart] moves on its own!")) - + /mob/living/basic/living_limb_flesh/melee_attack(mob/living/carbon/human/target, list/modifiers, ignore_cooldown) . = ..() if (!ishuman(target) || target.stat == DEAD || HAS_TRAIT(target, TRAIT_NODISMEMBER)) return - + var/list/zone_candidates = target.get_missing_limbs() for(var/obj/item/bodypart/bodypart in target.bodyparts) if(bodypart.body_zone == BODY_ZONE_HEAD || bodypart.body_zone == BODY_ZONE_CHEST) @@ -96,10 +96,10 @@ if(bodypart.brute_dam < 20) continue zone_candidates += bodypart.body_zone - + if(!length(zone_candidates)) return - + var/target_zone = pick(zone_candidates) var/obj/item/bodypart/target_part = target.get_bodypart(target_zone) if(isnull(target_part)) @@ -117,7 +117,7 @@ part_type = /obj/item/bodypart/leg/left/flesh if(BODY_ZONE_R_LEG) part_type = /obj/item/bodypart/leg/right/flesh - + target.visible_message(span_danger("[src] [target_part ? "tears off and attaches itself" : "attaches itself"] to where [target][target.p_s()] limb used to be!")) current_bodypart = new part_type(TRUE) //dont_spawn_flesh, we cant use named arguments here current_bodypart.replace_limb(target, TRUE) @@ -130,7 +130,7 @@ RegisterSignal(part.owner, COMSIG_LIVING_DEATH, PROC_REF(owner_died)) RegisterSignal(part.owner, COMSIG_LIVING_ELECTROCUTE_ACT, PROC_REF(owner_shocked)) //detach if we are shocked, not beneficial for the host but hey its a sideeffect -/mob/living/basic/living_limb_flesh/proc/owner_shocked(datum/source, shock_damage, source, siemens_coeff, flags) +/mob/living/basic/living_limb_flesh/proc/owner_shocked(datum/source, shock_damage, shock_source, siemens_coeff, flags) SIGNAL_HANDLER if(shock_damage < 10) return diff --git a/code/modules/mob/living/basic/ruin_defender/living_floor.dm b/code/modules/mob/living/basic/ruin_defender/living_floor.dm index f7e8cefa12e892..851a0873657a01 100644 --- a/code/modules/mob/living/basic/ruin_defender/living_floor.dm +++ b/code/modules/mob/living/basic/ruin_defender/living_floor.dm @@ -9,7 +9,7 @@ /datum/ai_controller/basic_controller/living_floor max_target_distance = 2 blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) @@ -46,7 +46,7 @@ attack_verb_simple = "bite" ai_controller = /datum/ai_controller/basic_controller/living_floor melee_attack_cooldown = 0.5 SECONDS // get real - + var/icon_aggro = "floor-hostile" var/desc_aggro = "This flooring is alive and filled with teeth, better not step on that. Being covered in plating, it is immune to damage. Seems vulnerable to prying though." @@ -61,8 +61,8 @@ if(!istype(victim) || istype(victim, /mob/living/basic/living_floor) || victim.stat == DEAD) return if(victim.loc == loc) //guaranteed bite - var/datum/targetting_datum/basic/targetting = ai_controller.blackboard[BB_TARGETTING_DATUM] - if(targetting.can_attack(src, victim)) + var/datum/targeting_strategy/basic/targeting = GET_TARGETING_STRATEGY(ai_controller.blackboard[BB_TARGETING_STRATEGY]) + if(targeting.can_attack(src, victim)) melee_attack(victim) icon_state = icon_aggro desc = desc_aggro diff --git a/code/modules/mob/living/basic/ruin_defender/skeleton.dm b/code/modules/mob/living/basic/ruin_defender/skeleton.dm index 125787319b0949..fbe3b74c43f272 100644 --- a/code/modules/mob/living/basic/ruin_defender/skeleton.dm +++ b/code/modules/mob/living/basic/ruin_defender/skeleton.dm @@ -51,7 +51,8 @@ AddElement(/datum/element/basic_eating, heal_amt = 50, drinking = TRUE, food_types = good_drinks) AddElement(/datum/element/basic_eating, heal_amt = 0, damage_amount = 25, damage_type = BURN, drinking = TRUE, food_types = bad_drinks) ADD_TRAIT(src, TRAIT_SNOWSTORM_IMMUNE, INNATE_TRAIT) - ai_controller?.set_blackboard_key(BB_BASIC_FOODS, good_drinks + bad_drinks) + var/list/foods_list = good_drinks + bad_drinks + ai_controller?.set_blackboard_key(BB_BASIC_FOODS, typecacheof(foods_list)) /mob/living/basic/skeleton/settler name = "undead settler" @@ -85,7 +86,7 @@ maxHealth = 150 health = 150 speed = 2 - force_threshold = 10 //trying to simulate actually having armor + damage_coeff = list(BRUTE = 0.5, BURN = 0.5, TOX = 0, STAMINA = 0, OXY = 0) //trying to simulate actually having armor obj_damage = 50 melee_damage_lower = 25 melee_damage_upper = 30 @@ -161,7 +162,7 @@ /// Skeletons mostly just beat people to death, but they'll also find and drink milk. /datum/ai_controller/basic_controller/skeleton blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, BB_TARGET_MINIMUM_STAT = HARD_CRIT, BB_EMOTE_KEY = "rattles", BB_EMOTE_CHANCE = 20, diff --git a/code/modules/mob/living/basic/ruin_defender/stickman.dm b/code/modules/mob/living/basic/ruin_defender/stickman.dm index 107973135c78c1..588a75c6346436 100644 --- a/code/modules/mob/living/basic/ruin_defender/stickman.dm +++ b/code/modules/mob/living/basic/ruin_defender/stickman.dm @@ -33,7 +33,7 @@ /datum/ai_controller/basic_controller/stickman blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic() + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/ruin_defender/wizard/wizard.dm b/code/modules/mob/living/basic/ruin_defender/wizard/wizard.dm new file mode 100644 index 00000000000000..7c35184af3717b --- /dev/null +++ b/code/modules/mob/living/basic/ruin_defender/wizard/wizard.dm @@ -0,0 +1,90 @@ +/mob/living/basic/wizard + name = "Space Wizard" + desc = "A wizard is never early. Nor is he late. He arrives exactly at the worst possible moment." + icon = 'icons/mob/simple/simple_human.dmi' + icon_state = "wizard" + icon_living = "wizard" + icon_dead = "wizard_dead" + mob_biotypes = MOB_ORGANIC|MOB_HUMANOID + sentience_type = SENTIENCE_HUMANOID + speed = 0 + maxHealth = 100 + health = 100 + melee_damage_lower = 5 + melee_damage_upper = 5 + attack_verb_continuous = "punches" + attack_verb_simple = "punch" + attack_sound = 'sound/weapons/punch1.ogg' + combat_mode = TRUE + habitable_atmos = list("min_oxy" = 5, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) + unsuitable_atmos_damage = 7.5 + faction = list(ROLE_WIZARD) + basic_mob_flags = DEL_ON_DEATH + ai_controller = /datum/ai_controller/basic_controller/wizard + + /// A list of possible wizard corpses, and therefore wizard outfits, to select from + var/static/list/wizard_outfits = list( + /obj/effect/mob_spawn/corpse/human/wizard = 5, + /obj/effect/mob_spawn/corpse/human/wizard/red = 3, + /obj/effect/mob_spawn/corpse/human/wizard/yellow = 3, + /obj/effect/mob_spawn/corpse/human/wizard/black = 3, + /obj/effect/mob_spawn/corpse/human/wizard/marisa = 1, + //The tape wizard should go here, but its hat doesn't render correctly for some reason. + ) + /// A specified wizard corpse spawner to use. If null, picks from the list above instead. + var/selected_outfit + + /// Typepath for the wizard's targeted spell. If null, selects randomly. + var/targeted_spell_path + /// List of possible targeted spells to pick from + var/static/list/targeted_spell_list = list( + /datum/action/cooldown/spell/pointed/projectile/fireball/lesser, + /datum/action/cooldown/spell/pointed/projectile/lightningbolt, + ) + + /// Typepath for the wizard's secondary spell. If null, selects randomly. + var/secondary_spell_path + /// List of possible secondary spells to pick from + var/static/list/secondary_spell_list = list( + /datum/action/cooldown/spell/aoe/magic_missile, + /datum/action/cooldown/spell/charged/beam/tesla, + /datum/action/cooldown/spell/aoe/repulse, + /datum/action/cooldown/spell/conjure/the_traps, + ) + +/mob/living/basic/wizard/Initialize(mapload) + . = ..() + if(!selected_outfit) + selected_outfit = pick_weight(wizard_outfits) + apply_dynamic_human_appearance(src, mob_spawn_path = selected_outfit, r_hand = /obj/item/staff) + var/list/remains = string_list(list( + selected_outfit, + /obj/item/staff + )) + AddElement(/datum/element/death_drops, remains) + AddElement(/datum/element/footstep, footstep_type = FOOTSTEP_MOB_SHOE) + + if(isnull(targeted_spell_path)) + targeted_spell_path = pick(targeted_spell_list) + if(isnull(secondary_spell_path)) + secondary_spell_path = pick(secondary_spell_list) + + var/datum/action/cooldown/spell/targeted_spell = new targeted_spell_path(src) + targeted_spell.spell_requirements &= ~(SPELL_REQUIRES_HUMAN|SPELL_REQUIRES_WIZARD_GARB|SPELL_REQUIRES_MIND) + targeted_spell.Grant(src) + ai_controller.set_blackboard_key(BB_WIZARD_TARGETED_SPELL, targeted_spell) + + var/datum/action/cooldown/spell/secondary_spell = new secondary_spell_path(src) + secondary_spell.spell_requirements &= ~(SPELL_REQUIRES_HUMAN|SPELL_REQUIRES_WIZARD_GARB|SPELL_REQUIRES_MIND) + secondary_spell.Grant(src) + ai_controller.set_blackboard_key(BB_WIZARD_SECONDARY_SPELL, secondary_spell) + + var/datum/action/cooldown/spell/teleport/radius_turf/blink/lesser/blink_spell = new(src) + blink_spell.Grant(src) + ai_controller.set_blackboard_key(BB_WIZARD_BLINK_SPELL, blink_spell) + +/// Uses the colors and loadout of the original wizard simplemob +/mob/living/basic/wizard/classic + selected_outfit = /obj/effect/mob_spawn/corpse/human/wizard + targeted_spell_path = /datum/action/cooldown/spell/pointed/projectile/fireball/lesser + secondary_spell_path = /datum/action/cooldown/spell/aoe/magic_missile diff --git a/code/modules/mob/living/basic/ruin_defender/wizard/wizard_ai.dm b/code/modules/mob/living/basic/ruin_defender/wizard/wizard_ai.dm new file mode 100644 index 00000000000000..4430b1339a74e2 --- /dev/null +++ b/code/modules/mob/living/basic/ruin_defender/wizard/wizard_ai.dm @@ -0,0 +1,53 @@ +#define WIZARD_SPELL_COOLDOWN (1 SECONDS) + +/** + * Wizards run away from their targets while flinging spells at them and blinking constantly. + */ +/datum/ai_controller/basic_controller/wizard + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_TARGET_MINIMUM_STAT = HARD_CRIT, + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/maintain_distance/cover_minimum_distance, + /datum/ai_planning_subtree/targeted_mob_ability/wizard_spell/primary, + /datum/ai_planning_subtree/targeted_mob_ability/wizard_spell/secondary, + /datum/ai_planning_subtree/targeted_mob_ability/wizard_spell/blink, + ) + +/** + * Cast a wizard spell. There is a minimum cooldown between spellcasts to prevent overwhelming spam. + * + * Though only the primary spell is actually targeted, all spells use targeted behavior so that they + * only get used in combat. + */ +/datum/ai_planning_subtree/targeted_mob_ability/wizard_spell + use_ability_behaviour = /datum/ai_behavior/targeted_mob_ability/wizard_spell + +/datum/ai_planning_subtree/targeted_mob_ability/wizard_spell/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if (controller.blackboard[BB_WIZARD_SPELL_COOLDOWN] > world.time) + return + return ..() + +/datum/ai_behavior/targeted_mob_ability/wizard_spell/perform(seconds_per_tick, datum/ai_controller/controller, ability_key, target_key) + . = ..() + controller.set_blackboard_key(BB_WIZARD_SPELL_COOLDOWN, world.time + WIZARD_SPELL_COOLDOWN) + +/datum/ai_planning_subtree/targeted_mob_ability/wizard_spell/primary + ability_key = BB_WIZARD_TARGETED_SPELL + +/datum/ai_planning_subtree/targeted_mob_ability/wizard_spell/secondary + ability_key = BB_WIZARD_SECONDARY_SPELL + +/datum/ai_planning_subtree/targeted_mob_ability/wizard_spell/blink + ability_key = BB_WIZARD_BLINK_SPELL + +/datum/ai_behavior/use_mob_ability/wizard_spell/perform(seconds_per_tick, datum/ai_controller/controller, ability_key) + . = ..() + controller.set_blackboard_key(BB_WIZARD_SPELL_COOLDOWN, world.time + WIZARD_SPELL_COOLDOWN) + +#undef WIZARD_SPELL_COOLDOWN diff --git a/code/modules/mob/living/basic/ruin_defender/wizard/wizard_spells.dm b/code/modules/mob/living/basic/ruin_defender/wizard/wizard_spells.dm new file mode 100644 index 00000000000000..c49d87c730a55c --- /dev/null +++ b/code/modules/mob/living/basic/ruin_defender/wizard/wizard_spells.dm @@ -0,0 +1,17 @@ +// Lesser versions of wizard spells to be used by AI wizards + +/// Lesser fireball, which is slightly less "instant death" than the normal one +/datum/action/cooldown/spell/pointed/projectile/fireball/lesser + name = "Lesser Fireball" + projectile_type = /obj/projectile/magic/fireball/lesser + cooldown_time = 10 SECONDS + +/obj/projectile/magic/fireball/lesser + damage = 0 + exp_light = 1 + +/// Lesser Blink, shorter range than the normal blink spell +/datum/action/cooldown/spell/teleport/radius_turf/blink/lesser + name = "Lesser Blink" + outer_tele_radius = 3 + spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC diff --git a/code/modules/mob/living/basic/space_fauna/ant.dm b/code/modules/mob/living/basic/space_fauna/ant.dm index 7748d9120d76d7..26a904340b7c5e 100644 --- a/code/modules/mob/living/basic/space_fauna/ant.dm +++ b/code/modules/mob/living/basic/space_fauna/ant.dm @@ -45,7 +45,7 @@ /datum/ai_controller/basic_controller/ant blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/bear/_bear.dm b/code/modules/mob/living/basic/space_fauna/bear/_bear.dm index 8ba6699648e604..e23e022d00e614 100644 --- a/code/modules/mob/living/basic/space_fauna/bear/_bear.dm +++ b/code/modules/mob/living/basic/space_fauna/bear/_bear.dm @@ -133,6 +133,11 @@ brute_per_second = 5,\ outline_colour = COLOR_YELLOW,\ ) + var/static/list/on_consume = list( + /datum/reagent/consumable/nutriment = 1, + /datum/reagent/consumable/nutriment/vitamin = 0.1, + ) + AddElement(/datum/element/consumable_mob, reagents_list = on_consume) /mob/living/basic/bear/butter/attack_hand(mob/living/user, list/modifiers) //Borrowed code from Cak, feeds people if they hit you. More nutriment but less vitamin to represent BUTTER. . = ..() diff --git a/code/modules/mob/living/basic/space_fauna/bear/bear_ai_subtree.dm b/code/modules/mob/living/basic/space_fauna/bear/bear_ai_subtree.dm index 851c0bb80290b2..335e7257e504e0 100644 --- a/code/modules/mob/living/basic/space_fauna/bear/bear_ai_subtree.dm +++ b/code/modules/mob/living/basic/space_fauna/bear/bear_ai_subtree.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/bear blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp.dm b/code/modules/mob/living/basic/space_fauna/carp/carp.dm index 27b28400b3904b..c2efddc9b565f7 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp.dm @@ -58,7 +58,7 @@ /datum/pet_command/idle, /datum/pet_command/free, /datum/pet_command/follow, - /datum/pet_command/point_targetting/attack + /datum/pet_command/point_targeting/attack ) /// Carp want to eat raw meat var/static/list/desired_food = list(/obj/item/food/meat/slab, /obj/item/food/meat/rawcutlet) @@ -103,18 +103,14 @@ teleport = new(src) teleport.Grant(src) ai_controller.set_blackboard_key(BB_CARP_RIFT, teleport) - ai_controller.set_blackboard_key(BB_OBSTACLE_TARGETTING_WHITELIST, allowed_obstacle_targets) - - -/mob/living/basic/carp/Destroy() - QDEL_NULL(teleport) - return ..() + ai_controller.set_blackboard_key(BB_OBSTACLE_TARGETING_WHITELIST, allowed_obstacle_targets) /// Tell the elements and the blackboard what food we want to eat /mob/living/basic/carp/proc/setup_eating() AddElement(/datum/element/basic_eating, food_types = desired_food) AddElement(/datum/element/basic_eating, heal_amt = 0, damage_amount = 10, damage_type = BRUTE, food_types = desired_trash) // We are killing our planet - ai_controller.set_blackboard_key(BB_BASIC_FOODS, desired_food + desired_trash) + var/list/foods_list = desired_food + desired_trash + ai_controller.set_blackboard_key(BB_BASIC_FOODS, typecacheof(foods_list)) /// Set a random colour on the carp, override to do something else /mob/living/basic/carp/proc/apply_colour() @@ -194,7 +190,7 @@ /mob/living/basic/carp/pet/lia name = "Lia" real_name = "Lia" - desc = "A failed experiment of Nanotrasen to create weaponised carp technology. This less than intimidating carp now serves as the Head of Security's pet." + desc = "A failed experiment of Symphionia to create weaponised carp technology. This less than intimidating carp now serves as the Head of Security's pet." faction = list(FACTION_NEUTRAL) maxHealth = 200 health = 200 @@ -215,7 +211,7 @@ /mob/living/basic/carp/pet/cayenne name = "Cayenne" real_name = "Cayenne" - desc = "A failed Syndicate experiment in weaponized space carp technology, it now serves as a lovable mascot." + desc = "A failed Symphionia experiment in weaponized space carp technology, it now serves as a lovable mascot." faction = list(ROLE_SYNDICATE) /// Overlay to apply to display the disk var/mutable_appearance/disk_overlay @@ -252,6 +248,7 @@ /mob/living/basic/carp/advanced health = 40 + maxHealth = 40 obj_damage = 15 #undef RARE_CAYENNE_CHANCE diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp_ai_actions.dm b/code/modules/mob/living/basic/space_fauna/carp/carp_ai_actions.dm index b1343a7aeedbfb..9e767bab3af1f8 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp_ai_actions.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp_ai_actions.dm @@ -1,6 +1,6 @@ #define MAGICARP_SPELL_TARGET_SEEK_RANGE 4 -/datum/pet_command/point_targetting/use_ability/magicarp +/datum/pet_command/point_targeting/use_ability/magicarp pet_ability_key = BB_MAGICARP_SPELL /datum/ai_planning_subtree/attack_obstacle_in_path/carp @@ -16,18 +16,18 @@ /// Interrupt your attack chain if: you have a spell, it's not on cooldown, and it has a target /datum/ai_behavior/basic_melee_attack/magicarp -/datum/ai_behavior/basic_melee_attack/magicarp/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key, health_ratio_key) +/datum/ai_behavior/basic_melee_attack/magicarp/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key, health_ratio_key) var/datum/action/cooldown/using_action = controller.blackboard[BB_MAGICARP_SPELL] if (QDELETED(using_action)) return ..() - if (!controller.blackboard[BB_MAGICARP_SPELL_SPECIAL_TARGETTING] && using_action.IsAvailable()) + if (!controller.blackboard[BB_MAGICARP_SPELL_SPECIAL_TARGETING] && using_action.IsAvailable()) finish_action(controller, succeeded = FALSE) return return ..() /** * Find a target for the magicarp's spell - * This gets weird because different spells want different targetting + * This gets weird because different spells want different targeting * but I didn't want a new ai controller for every different spell */ /datum/ai_planning_subtree/find_nearest_magicarp_spell_target @@ -37,12 +37,12 @@ if (!using_action?.IsAvailable()) return - var/spell_targetting = controller.blackboard[BB_MAGICARP_SPELL_SPECIAL_TARGETTING] - if (!spell_targetting) - controller.queue_behavior(/datum/ai_behavior/find_potential_targets/nearest/magicarp, BB_MAGICARP_SPELL_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + var/spell_targeting = controller.blackboard[BB_MAGICARP_SPELL_SPECIAL_TARGETING] + if (!spell_targeting) + controller.queue_behavior(/datum/ai_behavior/find_potential_targets/nearest/magicarp, BB_MAGICARP_SPELL_TARGET, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) return - switch(spell_targetting) + switch(spell_targeting) if (MAGICARP_SPELL_CORPSES) controller.queue_behavior(/datum/ai_behavior/find_and_set/friendly_corpses, BB_MAGICARP_SPELL_TARGET, MAGICARP_SPELL_TARGET_SEEK_RANGE) return diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp_ai_migration.dm b/code/modules/mob/living/basic/space_fauna/carp/carp_ai_migration.dm index c7bee5a36e9776..27fdb25ee22b41 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp_ai_migration.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp_ai_migration.dm @@ -10,33 +10,30 @@ /datum/ai_planning_subtree/carp_migration /datum/ai_planning_subtree/carp_migration/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) - . = ..() - // If there's a rift nearby take a ride, then cancel everything else because it's not valid any more - var/obj/effect/temp_visual/lesser_carp_rift/entrance/rift = locate(/obj/effect/temp_visual/lesser_carp_rift/entrance) in orange(controller.pawn, CARP_PORTAL_SEARCH_RANGE) - if (rift) + for(var/obj/effect/temp_visual/lesser_carp_rift/entrance/rift in orange(controller.pawn, CARP_PORTAL_SEARCH_RANGE)) controller.queue_behavior(/datum/ai_behavior/travel_towards_atom, get_turf(rift)) return SUBTREE_RETURN_FINISH_PLANNING - var/list/migration_points = controller.blackboard[BB_CARP_MIGRATION_PATH] - if (!length(migration_points)) - return - + // We have a destination, try to approach it var/turf/moving_to = controller.blackboard[BB_CARP_MIGRATION_TARGET] + if(!isnull(moving_to)) + var/turf/next_step = get_step_towards(controller.pawn, moving_to) + // Attempt to teleport around if we're blocked + if(next_step.is_blocked_turf(exclude_mobs = TRUE)) + controller.queue_behavior(/datum/ai_behavior/make_carp_rift/towards/unvalidated, BB_CARP_RIFT, BB_CARP_MIGRATION_TARGET) + controller.queue_behavior(/datum/ai_behavior/attack_obstructions/carp, BB_CARP_MIGRATION_TARGET) + controller.queue_behavior(/datum/ai_behavior/step_towards_turf, BB_CARP_MIGRATION_TARGET) + // We've gotten close enough to it, clear it so we can select a new point (or do nothing) + if(get_dist(controller.pawn, moving_to) <= CARP_DESTINATION_SEARCH_RANGE) + controller.clear_blackboard_key(BB_CARP_MIGRATION_TARGET) + return SUBTREE_RETURN_FINISH_PLANNING - // If we don't have a target or are close enough to it, pick a new one - if (isnull(moving_to) || get_dist(controller.pawn, moving_to) <= CARP_DESTINATION_SEARCH_RANGE) + // We have a path to follow but no destination, select one + if(length(controller.blackboard[BB_CARP_MIGRATION_PATH])) controller.queue_behavior(/datum/ai_behavior/find_next_carp_migration_step, BB_CARP_MIGRATION_PATH, BB_CARP_MIGRATION_TARGET) return SUBTREE_RETURN_FINISH_PLANNING - var/turf/next_step = get_step_towards(controller.pawn, moving_to) - if (next_step.is_blocked_turf(exclude_mobs = TRUE)) - controller.queue_behavior(/datum/ai_behavior/make_carp_rift/towards/unvalidated, BB_CARP_RIFT, BB_CARP_MIGRATION_TARGET) - controller.queue_behavior(/datum/ai_behavior/attack_obstructions/carp, BB_CARP_MIGRATION_TARGET) - controller.queue_behavior(/datum/ai_behavior/step_towards_turf, BB_CARP_MIGRATION_TARGET) - - return SUBTREE_RETURN_FINISH_PLANNING - /** * # Find next carp migration step * Records the next turf we want to travel to into the blackboard for other actions @@ -45,14 +42,13 @@ /datum/ai_behavior/find_next_carp_migration_step/perform(seconds_per_tick, datum/ai_controller/controller, path_key, target_key) var/list/blackboard_points = controller.blackboard[path_key] - var/list/potential_migration_points = blackboard_points.Copy() - while (length(potential_migration_points)) - var/turf/potential_destination = popleft(potential_migration_points) - if (!isnull(potential_destination) && get_dist(controller.pawn, potential_destination) > CARP_DESTINATION_SEARCH_RANGE) - controller.set_blackboard_key(target_key, potential_destination) + for(var/turf/migration_point as anything in blackboard_points) + // By the end of this loop we will either have a valid migration point set, or an empty list in our blackboard + blackboard_points -= migration_point + if(get_dist(controller.pawn, migration_point) > CARP_DESTINATION_SEARCH_RANGE) + controller.set_blackboard_key(target_key, migration_point) finish_action(controller, succeeded = TRUE) return - controller.set_blackboard_key(path_key, potential_migration_points.Copy()) finish_action(controller, succeeded = FALSE) diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp_controllers.dm b/code/modules/mob/living/basic/space_fauna/carp/carp_controllers.dm index 5bf664d1687844..0befb20987c01b 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp_controllers.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp_controllers.dm @@ -10,8 +10,8 @@ /datum/ai_controller/basic_controller/carp blackboard = list( BB_BASIC_MOB_STOP_FLEEING = TRUE, - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, ) ai_movement = /datum/ai_movement/basic_avoidance @@ -37,8 +37,8 @@ /datum/ai_controller/basic_controller/carp/pet blackboard = list( BB_BASIC_MOB_STOP_FLEEING = TRUE, - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, ) ai_traits = STOP_MOVING_WHEN_PULLED planning_subtrees = list( @@ -81,8 +81,8 @@ /datum/ai_controller/basic_controller/carp/passive blackboard = list( BB_BASIC_MOB_STOP_FLEEING = TRUE, - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, ) ai_traits = STOP_MOVING_WHEN_PULLED planning_subtrees = list( diff --git a/code/modules/mob/living/basic/space_fauna/carp/magicarp.dm b/code/modules/mob/living/basic/space_fauna/carp/magicarp.dm index 32f02b880dba40..65d16cfb490ddc 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/magicarp.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/magicarp.dm @@ -56,8 +56,8 @@ GLOBAL_LIST_INIT(magicarp_spell_colours, list( /datum/pet_command/idle, /datum/pet_command/free, /datum/pet_command/follow, - /datum/pet_command/point_targetting/attack, - /datum/pet_command/point_targetting/use_ability/magicarp, + /datum/pet_command/point_targeting/attack, + /datum/pet_command/point_targeting/use_ability/magicarp, ) /// List of all projectiles we can fire. /// Non-static, because subtypes can have their own lists. @@ -91,15 +91,15 @@ GLOBAL_LIST_INIT(magicarp_spell_colours, list( ai_controller.set_blackboard_key(BB_MAGICARP_SPELL, spell) assign_spell_ai(spell_type) -/// If you have certain spells, use a different targetting datum +/// If you have certain spells, use a different targeting strategy /mob/living/basic/carp/magic/proc/assign_spell_ai(spell_type) - var/static/list/spell_special_targetting = list( + var/static/list/spell_special_targeting = list( /obj/projectile/magic/animate = MAGICARP_SPELL_OBJECTS, /obj/projectile/magic/door = MAGICARP_SPELL_WALLS, /obj/projectile/magic/resurrection = MAGICARP_SPELL_CORPSES, ) - ai_controller.set_blackboard_key(BB_MAGICARP_SPELL_SPECIAL_TARGETTING, spell_special_targetting[spell_type]) + ai_controller.set_blackboard_key(BB_MAGICARP_SPELL_SPECIAL_TARGETING, spell_special_targeting[spell_type]) /// Shoot when you click away from you /mob/living/basic/carp/magic/RangedAttack(atom/atom_target, modifiers) diff --git a/code/modules/mob/living/basic/space_fauna/cat_surgeon.dm b/code/modules/mob/living/basic/space_fauna/cat_surgeon.dm index 487727fb53cc1c..02faf7c2cc9f20 100644 --- a/code/modules/mob/living/basic/space_fauna/cat_surgeon.dm +++ b/code/modules/mob/living/basic/space_fauna/cat_surgeon.dm @@ -64,7 +64,7 @@ /datum/ai_controller/basic_controller/cat_butcherer blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/changeling/flesh_spider.dm b/code/modules/mob/living/basic/space_fauna/changeling/flesh_spider.dm index a64250d891cfa9..80e1768c90ebab 100644 --- a/code/modules/mob/living/basic/space_fauna/changeling/flesh_spider.dm +++ b/code/modules/mob/living/basic/space_fauna/changeling/flesh_spider.dm @@ -16,7 +16,7 @@ response_help_simple = "pet" response_disarm_continuous = "gently pushes aside" response_disarm_simple = "gently push aside" - damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, CLONE = 1, STAMINA = 1, OXY = 1) + damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, STAMINA = 1, OXY = 1) basic_mob_flags = FLAMMABLE_MOB status_flags = NONE speed = -0.1 @@ -47,7 +47,7 @@ ADD_TRAIT(src, TRAIT_WEB_SURFER, INNATE_TRAIT) AddElement(/datum/element/cliff_walking) AddElement(/datum/element/footstep, FOOTSTEP_MOB_CLAW) - AddElement(/datum/element/venomous, /datum/reagent/toxin/hunterspider, 5) + AddElement(/datum/element/venomous, /datum/reagent/toxin/hunterspider, 5, injection_flags = INJECT_CHECK_PENETRATE_THICK) AddElement(/datum/element/web_walker, /datum/movespeed_modifier/fast_web) AddElement(/datum/element/nerfed_pulling, GLOB.typecache_general_bad_things_to_easily_move) AddElement(/datum/element/prevent_attacking_of_types, GLOB.typecache_general_bad_hostile_attack_targets, "this tastes awful!") @@ -63,13 +63,12 @@ outline_colour = COLOR_PINK,\ ) - var/datum/action/cooldown/mob_cooldown/lay_web/webbing = new(src) - webbing.webbing_time *= 0.7 - webbing.Grant(src) - ai_controller?.set_blackboard_key(BB_SPIDER_WEB_ACTION, webbing) - - var/datum/action/cooldown/mob_cooldown/lay_web/web_spikes/spikes_web = new(src) - spikes_web.Grant(src) + var/static/list/innate_actions = list( + /datum/action/cooldown/mob_cooldown/lay_web = BB_SPIDER_WEB_ACTION, + /datum/action/cooldown/mob_cooldown/lay_web/sticky_web = null, + /datum/action/cooldown/mob_cooldown/lay_web/web_spikes = null, + ) + grant_actions_by_list(innate_actions) - var/datum/action/cooldown/mob_cooldown/lay_web/sticky_web/web_sticky = new(src) - web_sticky.Grant(src) +/datum/action/cooldown/mob_cooldown/lay_web/flesh + webbing_time = 3 SECONDS diff --git a/code/modules/mob/living/basic/space_fauna/changeling/headslug.dm b/code/modules/mob/living/basic/space_fauna/changeling/headslug.dm index a417b6c13942b8..27a9f7d07ae1ec 100644 --- a/code/modules/mob/living/basic/space_fauna/changeling/headslug.dm +++ b/code/modules/mob/living/basic/space_fauna/changeling/headslug.dm @@ -75,7 +75,6 @@ /// Just to be super-duper safe to the player, we do return TRUE if all goes well and read that value in check_and_implant() to be nice to the player. /mob/living/basic/headslug/proc/infect(mob/living/carbon/victim) var/obj/item/organ/internal/body_egg/changeling_egg/egg = new(victim) - egg.Insert(victim) egg.origin = mind diff --git a/code/modules/mob/living/basic/space_fauna/demon/demon_items.dm b/code/modules/mob/living/basic/space_fauna/demon/demon_items.dm index 8cdd7a6cf53fc2..1cc7549f0ea3b1 100644 --- a/code/modules/mob/living/basic/space_fauna/demon/demon_items.dm +++ b/code/modules/mob/living/basic/space_fauna/demon/demon_items.dm @@ -33,13 +33,13 @@ user.temporarilyRemoveItemFromInventory(src, TRUE) src.Insert(user) //Consuming the heart literally replaces your heart with a demon heart. H A R D C O R E -/obj/item/organ/internal/heart/demon/on_insert(mob/living/carbon/heart_owner) +/obj/item/organ/internal/heart/demon/on_mob_insert(mob/living/carbon/heart_owner) . = ..() // Gives a non-eat-people crawl to the new owner var/datum/action/cooldown/spell/jaunt/bloodcrawl/crawl = new(heart_owner) crawl.Grant(heart_owner) -/obj/item/organ/internal/heart/demon/on_remove(mob/living/carbon/heart_owner, special = FALSE) +/obj/item/organ/internal/heart/demon/on_mob_remove(mob/living/carbon/heart_owner, special = FALSE) . = ..() var/datum/action/cooldown/spell/jaunt/bloodcrawl/crawl = locate() in heart_owner.actions qdel(crawl) diff --git a/code/modules/mob/living/basic/space_fauna/demon/demon_subtypes.dm b/code/modules/mob/living/basic/space_fauna/demon/demon_subtypes.dm index ed3c131949dd1b..f05ea779763ca8 100644 --- a/code/modules/mob/living/basic/space_fauna/demon/demon_subtypes.dm +++ b/code/modules/mob/living/basic/space_fauna/demon/demon_subtypes.dm @@ -22,7 +22,7 @@ antag_type = /datum/antagonist/slaughter - /// Datum that stores the action for us to crawl around. + /// Which blood crawl do we give to the demon var/crawl_type = /datum/action/cooldown/spell/jaunt/bloodcrawl/slaughter_demon /// How long it takes for the alt-click slam attack to come off cooldown var/slam_cooldown_time = 45 SECONDS @@ -37,8 +37,7 @@ /mob/living/basic/demon/slaughter/Initialize(mapload) . = ..() - var/datum/action/cooldown/spell/jaunt/bloodcrawl/slaughter_demon/crawl = new crawl_type(src) - crawl.Grant(src) + GRANT_ACTION(crawl_type) RegisterSignal(src, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(on_attack)) RegisterSignals(src, list(COMSIG_MOB_ENTER_JAUNT, COMSIG_MOB_AFTER_EXIT_JAUNT), PROC_REF(on_crawl)) @@ -150,7 +149,7 @@ /// We do our own special thing on death, which is to spawn a kitten. /mob/living/basic/demon/slaughter/laughter/proc/on_death() SIGNAL_HANDLER - var/mob/living/simple_animal/pet/cat/kitten/kitty = new(drop_location()) + var/mob/living/basic/pet/cat/kitten/kitty = new(drop_location()) kitty.name = "Laughter" /mob/living/basic/demon/slaughter/laughter/ex_act(severity) diff --git a/code/modules/mob/living/basic/space_fauna/eyeball/_eyeball.dm b/code/modules/mob/living/basic/space_fauna/eyeball/_eyeball.dm index 47e43704079b4d..b72815d8325ab4 100644 --- a/code/modules/mob/living/basic/space_fauna/eyeball/_eyeball.dm +++ b/code/modules/mob/living/basic/space_fauna/eyeball/_eyeball.dm @@ -52,9 +52,11 @@ /mob/living/basic/eyeball/Initialize(mapload) . = ..() - var/datum/action/cooldown/spell/pointed/death_glare/glare = new(src) - glare.Grant(src) - ai_controller.set_blackboard_key(BB_GLARE_ABILITY, glare) + var/static/list/innate_actions = list( + /datum/action/cooldown/spell/pointed/death_glare = BB_GLARE_ABILITY + ) + grant_actions_by_list(innate_actions) + AddElement(/datum/element/simple_flying) AddComponent(/datum/component/tameable, food_types = list(/obj/item/food/grown/carrot), tame_chance = 100, after_tame = CALLBACK(src, PROC_REF(on_tame))) ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT) diff --git a/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_subtree.dm b/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_subtree.dm index b3033b27a4bd34..29ea1dfc352eaa 100644 --- a/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_subtree.dm +++ b/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_subtree.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/eyeball blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/eyeball, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/eyeball, BB_EYE_DAMAGE_THRESHOLD = 10, ) @@ -22,7 +22,7 @@ return SUBTREE_RETURN_FINISH_PLANNING controller.queue_behavior(/datum/ai_behavior/find_the_blind, BB_BLIND_TARGET, BB_EYE_DAMAGE_THRESHOLD) -/datum/targetting_datum/basic/eyeball/can_attack(mob/living/owner, atom/target, vision_range) +/datum/targeting_strategy/basic/eyeball/can_attack(mob/living/owner, atom/target, vision_range) . = ..() if(!.) return FALSE diff --git a/code/modules/mob/living/basic/space_fauna/faithless.dm b/code/modules/mob/living/basic/space_fauna/faithless.dm index 5cfdd4b47b6e21..39f5652d1a0a4f 100644 --- a/code/modules/mob/living/basic/space_fauna/faithless.dm +++ b/code/modules/mob/living/basic/space_fauna/faithless.dm @@ -55,7 +55,7 @@ /datum/ai_controller/basic_controller/faithless blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = UNCONSCIOUS, BB_LOW_PRIORITY_HUNTING_TARGET = null, // lights ) diff --git a/code/modules/mob/living/basic/space_fauna/garden_gnome.dm b/code/modules/mob/living/basic/space_fauna/garden_gnome.dm index d9dfc3c5343286..6608867f2a3919 100644 --- a/code/modules/mob/living/basic/space_fauna/garden_gnome.dm +++ b/code/modules/mob/living/basic/space_fauna/garden_gnome.dm @@ -18,7 +18,7 @@ attack_verb_simple = "punch" attack_sound = 'sound/weapons/punch1.ogg' melee_attack_cooldown = 1.2 SECONDS - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1) speak_emote = list("announces") unsuitable_atmos_damage = 0 @@ -31,7 +31,7 @@ greyscale_config = /datum/greyscale_config/garden_gnome ai_controller = /datum/ai_controller/basic_controller/garden_gnome /// The damage resistence when sinked into the ground - var/resistance_when_sinked = list(BRUTE = 0.5, BURN = 0.5, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) + var/resistance_when_sinked = list(BRUTE = 0.5, BURN = 0.5, TOX = 1, STAMINA = 0, OXY = 1) /// Realistically weighted list of usual gnome hat colours var/static/list/gnome_hat_colours = list( COLOR_GNOME_RED_ONE = 9, @@ -125,7 +125,7 @@ /datum/ai_controller/basic_controller/garden_gnome blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/ghost.dm b/code/modules/mob/living/basic/space_fauna/ghost.dm index ad79fefc3e6bca..981357d1a130c1 100644 --- a/code/modules/mob/living/basic/space_fauna/ghost.dm +++ b/code/modules/mob/living/basic/space_fauna/ghost.dm @@ -94,7 +94,7 @@ /datum/ai_controller/basic_controller/ghost blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/hivebot/_hivebot.dm b/code/modules/mob/living/basic/space_fauna/hivebot/_hivebot.dm index db0d310a71c770..d914e0589c48f5 100644 --- a/code/modules/mob/living/basic/space_fauna/hivebot/_hivebot.dm +++ b/code/modules/mob/living/basic/space_fauna/hivebot/_hivebot.dm @@ -95,8 +95,7 @@ /mob/living/basic/hivebot/mechanic/Initialize(mapload) . = ..() - var/datum/action/cooldown/spell/conjure/foam_wall/foam = new(src) - foam.Grant(src) + GRANT_ACTION(/datum/action/cooldown/spell/conjure/foam_wall) RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) /mob/living/basic/hivebot/mechanic/proc/pre_attack(mob/living/fixer, atom/target) diff --git a/code/modules/mob/living/basic/space_fauna/hivebot/hivebot_subtree.dm b/code/modules/mob/living/basic/space_fauna/hivebot/hivebot_subtree.dm index 5bd957a7609729..067b0a03c13cca 100644 --- a/code/modules/mob/living/basic/space_fauna/hivebot/hivebot_subtree.dm +++ b/code/modules/mob/living/basic/space_fauna/hivebot/hivebot_subtree.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/hivebot blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/killer_tomato.dm b/code/modules/mob/living/basic/space_fauna/killer_tomato.dm index a3fd64eb798606..c859289b56d7d0 100644 --- a/code/modules/mob/living/basic/space_fauna/killer_tomato.dm +++ b/code/modules/mob/living/basic/space_fauna/killer_tomato.dm @@ -42,7 +42,7 @@ /datum/ai_controller/basic_controller/killer_tomato blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/lightgeist.dm b/code/modules/mob/living/basic/space_fauna/lightgeist.dm index 9ab6ffe677855f..41bdb2600e7b3e 100644 --- a/code/modules/mob/living/basic/space_fauna/lightgeist.dm +++ b/code/modules/mob/living/basic/space_fauna/lightgeist.dm @@ -34,7 +34,7 @@ verb_exclaim = "zaps" verb_yell = "bangs" initial_language_holder = /datum/language_holder/lightbringer - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0, OXY = 0) light_range = 4 faction = list(FACTION_NEUTRAL) unsuitable_atmos_damage = 0 @@ -78,7 +78,7 @@ /datum/ai_controller/basic_controller/lightgeist blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/lightgeist, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/lightgeist, ) ai_traits = STOP_MOVING_WHEN_PULLED @@ -91,13 +91,13 @@ ) /// Attack only mobs who have damage that we can heal, I think this is specific enough not to be a generic type -/datum/targetting_datum/lightgeist +/datum/targeting_strategy/lightgeist /// Types of mobs we can heal, not in a blackboard key because there is no point changing this at runtime because the component will already exist var/heal_biotypes = MOB_ORGANIC | MOB_MINERAL /// Type of limb we can heal var/required_bodytype = BODYTYPE_ORGANIC -/datum/targetting_datum/lightgeist/can_attack(mob/living/living_mob, mob/living/target, vision_range) +/datum/targeting_strategy/lightgeist/can_attack(mob/living/living_mob, mob/living/target, vision_range) if (!isliving(target) || target.stat == DEAD) return FALSE if (!(heal_biotypes & target.mob_biotypes)) diff --git a/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart.dm b/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart.dm index 6a41993526e858..72f2001011cc09 100644 --- a/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart.dm +++ b/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart.dm @@ -2,6 +2,8 @@ #define HEARTBEAT_FAST (0.6 SECONDS) #define HEARTBEAT_FRANTIC (0.4 SECONDS) +#define SPIKES_ABILITY_TYPEPATH /datum/action/cooldown/mob_cooldown/chasing_spikes + /mob/living/basic/meteor_heart name = "meteor heart" desc = "A pulsing lump of flesh and bone growing directly out of the ground." @@ -25,10 +27,7 @@ maximum_survivable_temperature = 1500 combat_mode = TRUE move_resist = INFINITY // This mob IS the floor - /// Action which sends a line of spikes chasing a player - var/datum/action/cooldown/mob_cooldown/chasing_spikes/spikes - /// Action which summons areas the player can't stand in - var/datum/action/cooldown/mob_cooldown/spine_traps/traps + /// Looping heartbeat sound var/datum/looping_sound/heartbeat/soundloop @@ -39,14 +38,11 @@ AddElement(/datum/element/death_drops, death_loot) AddElement(/datum/element/relay_attackers) - spikes = new(src) - spikes.Grant(src) - ai_controller.set_blackboard_key(BB_METEOR_HEART_GROUND_SPIKES, spikes) - - traps = new(src) - traps.Grant(src) - ai_controller.set_blackboard_key(BB_METEOR_HEART_SPINE_TRAPS, traps) - + var/static/list/innate_actions = list( + SPIKES_ABILITY_TYPEPATH = BB_METEOR_HEART_GROUND_SPIKES, + /datum/action/cooldown/mob_cooldown/spine_traps = BB_METEOR_HEART_SPINE_TRAPS, + ) + grant_actions_by_list(innate_actions) ai_controller.set_ai_status(AI_STATUS_OFF) RegisterSignal(src, COMSIG_MOB_ABILITY_FINISHED, PROC_REF(used_ability)) @@ -60,12 +56,13 @@ soundloop.pressure_affected = FALSE soundloop.start() - - AddComponent(/datum/component/bloody_spreader,\ + AddComponent(\ + /datum/component/bloody_spreader,\ blood_left = INFINITY,\ blood_dna = list("meaty DNA" = "MT-"),\ diseases = null,\ ) + /// Called when we get mad at something, either for attacking us or attacking the nearby area /mob/living/basic/meteor_heart/proc/aggro() if (ai_controller.ai_status == AI_STATUS_ON) @@ -85,13 +82,11 @@ /// Animate when using certain abilities /mob/living/basic/meteor_heart/proc/used_ability(mob/living/owner, datum/action/cooldown/mob_cooldown/ability) SIGNAL_HANDLER - if (ability != spikes) + if(!istype(ability, SPIKES_ABILITY_TYPEPATH)) return Shake(1, 0, 1.5 SECONDS) /mob/living/basic/meteor_heart/Destroy() - QDEL_NULL(spikes) - QDEL_NULL(traps) QDEL_NULL(soundloop) return ..() @@ -136,3 +131,5 @@ #undef HEARTBEAT_NORMAL #undef HEARTBEAT_FAST #undef HEARTBEAT_FRANTIC + +#undef SPIKES_ABILITY_TYPEPATH diff --git a/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart_ai.dm b/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart_ai.dm index 7684011bd667ce..09659956c58139 100644 --- a/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart_ai.dm +++ b/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart_ai.dm @@ -1,7 +1,7 @@ /// A spellcasting AI which does not move /datum/ai_controller/basic_controller/meteor_heart blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGETLESS_TIME = 0, ) diff --git a/code/modules/mob/living/basic/space_fauna/meteor_heart/spine_traps.dm b/code/modules/mob/living/basic/space_fauna/meteor_heart/spine_traps.dm index 4f7135b1debabc..8ddcc1ed9e4017 100644 --- a/code/modules/mob/living/basic/space_fauna/meteor_heart/spine_traps.dm +++ b/code/modules/mob/living/basic/space_fauna/meteor_heart/spine_traps.dm @@ -86,7 +86,7 @@ /// Called when something enters our turf, if it is a non-flying mob then give it a stab /obj/effect/temp_visual/thrusting_spines/proc/on_entered(datum/source, atom/movable/arrived) - if (!active || !isliving(arrived) || (arrived.movement_type & (FLYING | FLOATING))) + if (!active || !isliving(arrived) || (arrived.movement_type & MOVETYPES_NOT_TOUCHING_GROUND)) return if (!COOLDOWN_FINISHED(src, thrust_delay)) return diff --git a/code/modules/mob/living/basic/space_fauna/morph.dm b/code/modules/mob/living/basic/space_fauna/morph.dm index 32115d05602551..22cce322b13a78 100644 --- a/code/modules/mob/living/basic/space_fauna/morph.dm +++ b/code/modules/mob/living/basic/space_fauna/morph.dm @@ -200,7 +200,7 @@ /// Only real human-powered intelligence is capable of playing prop hunt in SS13 (until further notice). /datum/ai_controller/basic_controller/morph blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/mushroom.dm b/code/modules/mob/living/basic/space_fauna/mushroom.dm index 056a4558081ed9..b45c2714d4ab4c 100644 --- a/code/modules/mob/living/basic/space_fauna/mushroom.dm +++ b/code/modules/mob/living/basic/space_fauna/mushroom.dm @@ -57,7 +57,7 @@ /datum/ai_controller/basic_controller/mushroom blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/mushroom, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/mushroom, BB_TARGET_MINIMUM_STAT = DEAD, ) @@ -70,10 +70,10 @@ ) -/datum/targetting_datum/basic/mushroom +/datum/targeting_strategy/basic/mushroom ///we only attacked another mushrooms -/datum/targetting_datum/basic/mushroom/faction_check(datum/ai_controller/controller, mob/living/living_mob, mob/living/the_target) +/datum/targeting_strategy/basic/mushroom/faction_check(datum/ai_controller/controller, mob/living/living_mob, mob/living/the_target) return !living_mob.faction_check_atom(the_target, exact_match = check_factions_exactly) /datum/ai_planning_subtree/find_and_hunt_target/mushroom_food diff --git a/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm b/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm index cdde6ad05e4c85..c55376c4fcc8f5 100644 --- a/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm +++ b/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm @@ -39,8 +39,7 @@ min_health_slowdown = -1.5,\ ) - var/datum/action/cooldown/spell/jaunt/creature_teleport/teleport = new(src) - teleport.Grant(src) + GRANT_ACTION(/datum/action/cooldown/spell/jaunt/creature_teleport) /mob/living/basic/creature/proc/can_be_seen(turf/location) // Check for darkness diff --git a/code/modules/mob/living/basic/space_fauna/netherworld/migo.dm b/code/modules/mob/living/basic/space_fauna/netherworld/migo.dm index 3f445ea1261b0b..1be2a870de3ba7 100644 --- a/code/modules/mob/living/basic/space_fauna/netherworld/migo.dm +++ b/code/modules/mob/living/basic/space_fauna/netherworld/migo.dm @@ -35,7 +35,7 @@ /mob/living/basic/migo/Initialize(mapload) . = ..() - migo_sounds = list('sound/items/bubblewrap.ogg', 'sound/items/change_jaws.ogg', 'sound/items/crowbar.ogg', 'sound/items/drink.ogg', 'sound/items/deconstruct.ogg', 'sound/items/carhorn.ogg', 'sound/items/change_drill.ogg', 'sound/items/dodgeball.ogg', 'sound/items/eatfood.ogg', 'sound/items/megaphone.ogg', 'sound/items/screwdriver.ogg', 'sound/items/weeoo1.ogg', 'sound/items/wirecutter.ogg', 'sound/items/welder.ogg', 'sound/items/zip.ogg', 'sound/items/rped.ogg', 'sound/items/ratchet.ogg', 'sound/items/polaroid1.ogg', 'sound/items/pshoom.ogg', 'sound/items/airhorn.ogg', 'sound/items/geiger/high1.ogg', 'sound/items/geiger/high2.ogg', 'sound/voice/beepsky/creep.ogg', 'sound/voice/beepsky/iamthelaw.ogg', 'sound/voice/ed209_20sec.ogg', 'sound/voice/hiss3.ogg', 'sound/voice/hiss6.ogg', 'sound/voice/medbot/patchedup.ogg', 'sound/voice/medbot/feelbetter.ogg', 'sound/voice/human/manlaugh1.ogg', 'sound/voice/human/womanlaugh.ogg', 'sound/weapons/sear.ogg', 'sound/ambience/antag/clockcultalr.ogg', 'sound/ambience/antag/ling_alert.ogg', 'sound/ambience/antag/tatoralert.ogg', 'sound/ambience/antag/monkey.ogg', 'sound/mecha/nominal.ogg', 'sound/mecha/weapdestr.ogg', 'sound/mecha/critdestr.ogg', 'sound/mecha/imag_enh.ogg', 'sound/effects/adminhelp.ogg', 'sound/effects/alert.ogg', 'sound/effects/attackblob.ogg', 'sound/effects/bamf.ogg', 'sound/effects/blobattack.ogg', 'sound/effects/break_stone.ogg', 'sound/effects/bubbles.ogg', 'sound/effects/bubbles2.ogg', 'sound/effects/clang.ogg', 'sound/effects/clockcult_gateway_disrupted.ogg', 'sound/effects/footstep/clownstep2.ogg', 'sound/effects/curse1.ogg', 'sound/effects/dimensional_rend.ogg', 'sound/effects/doorcreaky.ogg', 'sound/effects/empulse.ogg', 'sound/effects/explosion_distant.ogg', 'sound/effects/explosionfar.ogg', 'sound/effects/explosion1.ogg', 'sound/effects/grillehit.ogg', 'sound/effects/genetics.ogg', 'sound/effects/heart_beat.ogg', 'sound/runtime/hyperspace/hyperspace_begin.ogg', 'sound/runtime/hyperspace/hyperspace_end.ogg', 'sound/effects/his_grace_awaken.ogg', 'sound/effects/pai_boot.ogg', 'sound/effects/phasein.ogg', 'sound/effects/picaxe1.ogg', 'sound/effects/sparks1.ogg', 'sound/effects/smoke.ogg', 'sound/effects/splat.ogg', 'sound/effects/snap.ogg', 'sound/effects/tendril_destroyed.ogg', 'sound/effects/supermatter.ogg', 'sound/misc/desecration-01.ogg', 'sound/misc/desecration-02.ogg', 'sound/misc/desecration-03.ogg', 'sound/misc/bloblarm.ogg', 'sound/misc/airraid.ogg', 'sound/misc/bang.ogg','sound/misc/highlander.ogg', 'sound/misc/interference.ogg', 'sound/misc/notice1.ogg', 'sound/misc/notice2.ogg', 'sound/misc/sadtrombone.ogg', 'sound/misc/slip.ogg', 'sound/misc/splort.ogg', 'sound/weapons/armbomb.ogg', 'sound/weapons/beam_sniper.ogg', 'sound/weapons/chainsawhit.ogg', 'sound/weapons/emitter.ogg', 'sound/weapons/emitter2.ogg', 'sound/weapons/blade1.ogg', 'sound/weapons/bladeslice.ogg', 'sound/weapons/blastcannon.ogg', 'sound/weapons/blaster.ogg', 'sound/weapons/bulletflyby3.ogg', 'sound/weapons/circsawhit.ogg', 'sound/weapons/cqchit2.ogg', 'sound/weapons/drill.ogg', 'sound/weapons/genhit1.ogg', 'sound/weapons/gun/pistol/shot_suppressed.ogg', 'sound/weapons/gun/pistol/shot.ogg', 'sound/weapons/handcuffs.ogg', 'sound/weapons/homerun.ogg', 'sound/weapons/kenetic_accel.ogg', 'sound/machines/clockcult/steam_whoosh.ogg', 'sound/machines/fryer/deep_fryer_emerge.ogg', 'sound/machines/airlock.ogg', 'sound/machines/airlock_alien_prying.ogg', 'sound/machines/airlockclose.ogg', 'sound/machines/airlockforced.ogg', 'sound/machines/airlockopen.ogg', 'sound/machines/alarm.ogg', 'sound/machines/blender.ogg', 'sound/machines/boltsdown.ogg', 'sound/machines/boltsup.ogg', 'sound/machines/buzz-sigh.ogg', 'sound/machines/buzz-two.ogg', 'sound/machines/chime.ogg', 'sound/machines/cryo_warning.ogg', 'sound/machines/defib_charge.ogg', 'sound/machines/defib_failed.ogg', 'sound/machines/defib_ready.ogg', 'sound/machines/defib_zap.ogg', 'sound/machines/deniedbeep.ogg', 'sound/machines/ding.ogg', 'sound/machines/disposalflush.ogg', 'sound/machines/door_close.ogg', 'sound/machines/door_open.ogg', 'sound/machines/engine_alert1.ogg', 'sound/machines/engine_alert2.ogg', 'sound/machines/hiss.ogg', 'sound/machines/honkbot_evil_laugh.ogg', 'sound/machines/juicer.ogg', 'sound/machines/ping.ogg', 'sound/ambience/signal.ogg', 'sound/machines/synth_no.ogg', 'sound/machines/synth_yes.ogg', 'sound/machines/terminal_alert.ogg', 'sound/machines/triple_beep.ogg', 'sound/machines/twobeep.ogg', 'sound/machines/ventcrawl.ogg', 'sound/machines/warning-buzzer.ogg', 'sound/ai/default/outbreak5.ogg', 'sound/ai/default/outbreak7.ogg', 'sound/ai/default/poweroff.ogg', 'sound/ai/default/radiation.ogg', 'sound/ai/default/shuttlecalled.ogg', 'sound/ai/default/shuttledock.ogg', 'sound/ai/default/shuttlerecalled.ogg', 'sound/ai/default/aimalf.ogg') //hahahaha fuck you code divers + migo_sounds = list('sound/items/bubblewrap.ogg', 'sound/items/change_jaws.ogg', 'sound/items/crowbar.ogg', 'sound/items/drink.ogg', 'sound/items/deconstruct.ogg', 'sound/items/carhorn.ogg', 'sound/items/change_drill.ogg', 'sound/items/dodgeball.ogg', 'sound/items/eatfood.ogg', 'sound/items/megaphone.ogg', 'sound/items/screwdriver.ogg', 'sound/items/weeoo1.ogg', 'sound/items/wirecutter.ogg', 'sound/items/welder.ogg', 'sound/items/zip.ogg', 'sound/items/rped.ogg', 'sound/items/ratchet.ogg', 'sound/items/polaroid1.ogg', 'sound/items/pshoom.ogg', 'sound/items/airhorn.ogg', 'sound/items/geiger/high1.ogg', 'sound/items/geiger/high2.ogg', 'sound/voice/beepsky/creep.ogg', 'sound/voice/beepsky/iamthelaw.ogg', 'sound/voice/ed209_20sec.ogg', 'sound/voice/hiss3.ogg', 'sound/voice/hiss6.ogg', 'sound/voice/medbot/patchedup.ogg', 'sound/voice/medbot/feelbetter.ogg', 'sound/voice/human/manlaugh1.ogg', 'sound/voice/human/womanlaugh.ogg', 'sound/weapons/sear.ogg', 'sound/ambience/antag/clockcultalr.ogg', 'sound/ambience/antag/ling_alert.ogg', 'sound/ambience/antag/tatoralert.ogg', 'sound/ambience/antag/monkey.ogg', 'sound/mecha/nominal.ogg', 'sound/mecha/weapdestr.ogg', 'sound/mecha/critdestr.ogg', 'sound/mecha/imag_enh.ogg', 'sound/effects/adminhelp.ogg', 'sound/effects/alert.ogg', 'sound/effects/attackblob.ogg', 'sound/effects/bamf.ogg', 'sound/effects/blobattack.ogg', 'sound/effects/break_stone.ogg', 'sound/effects/bubbles.ogg', 'sound/effects/bubbles2.ogg', 'sound/effects/clang.ogg', 'sound/effects/clockcult_gateway_disrupted.ogg', 'sound/effects/footstep/clownstep2.ogg', 'sound/effects/curse1.ogg', 'sound/effects/dimensional_rend.ogg', 'sound/effects/doorcreaky.ogg', 'sound/effects/empulse.ogg', 'sound/effects/explosion_distant.ogg', 'sound/effects/explosionfar.ogg', 'sound/effects/explosion1.ogg', 'sound/effects/grillehit.ogg', 'sound/effects/genetics.ogg', 'sound/effects/heart_beat.ogg', 'sound/runtime/hyperspace/hyperspace_begin.ogg', 'sound/runtime/hyperspace/hyperspace_end.ogg', 'sound/effects/his_grace_awaken.ogg', 'sound/effects/pai_boot.ogg', 'sound/effects/phasein.ogg', 'sound/effects/picaxe1.ogg', 'sound/effects/sparks1.ogg', 'sound/effects/smoke.ogg', 'sound/effects/splat.ogg', 'sound/effects/snap.ogg', 'sound/effects/tendril_destroyed.ogg', 'sound/effects/supermatter.ogg', 'sound/misc/desecration-01.ogg', 'sound/misc/desecration-02.ogg', 'sound/misc/desecration-03.ogg', 'sound/misc/bloblarm.ogg', 'sound/misc/airraid.ogg', 'sound/misc/bang.ogg','sound/misc/highlander.ogg', 'sound/misc/interference.ogg', 'sound/misc/notice1.ogg', 'sound/misc/notice2.ogg', 'sound/misc/sadtrombone.ogg', 'sound/misc/slip.ogg', 'sound/misc/splort.ogg', 'sound/weapons/armbomb.ogg', 'sound/weapons/beam_sniper.ogg', 'sound/weapons/chainsawhit.ogg', 'sound/weapons/emitter.ogg', 'sound/weapons/emitter2.ogg', 'sound/weapons/blade1.ogg', 'sound/weapons/bladeslice.ogg', 'sound/weapons/blastcannon.ogg', 'sound/weapons/blaster.ogg', 'sound/weapons/bulletflyby3.ogg', 'sound/weapons/circsawhit.ogg', 'sound/weapons/cqchit2.ogg', 'sound/weapons/drill.ogg', 'sound/weapons/genhit1.ogg', 'sound/weapons/gun/pistol/shot_suppressed.ogg', 'sound/weapons/gun/pistol/shot.ogg', 'sound/weapons/handcuffs.ogg', 'sound/weapons/homerun.ogg', 'sound/weapons/kinetic_accel.ogg', 'sound/machines/clockcult/steam_whoosh.ogg', 'sound/machines/fryer/deep_fryer_emerge.ogg', 'sound/machines/airlock.ogg', 'sound/machines/airlock_alien_prying.ogg', 'sound/machines/airlockclose.ogg', 'sound/machines/airlockforced.ogg', 'sound/machines/airlockopen.ogg', 'sound/machines/alarm.ogg', 'sound/machines/blender.ogg', 'sound/machines/boltsdown.ogg', 'sound/machines/boltsup.ogg', 'sound/machines/buzz-sigh.ogg', 'sound/machines/buzz-two.ogg', 'sound/machines/chime.ogg', 'sound/machines/cryo_warning.ogg', 'sound/machines/defib_charge.ogg', 'sound/machines/defib_failed.ogg', 'sound/machines/defib_ready.ogg', 'sound/machines/defib_zap.ogg', 'sound/machines/deniedbeep.ogg', 'sound/machines/ding.ogg', 'sound/machines/disposalflush.ogg', 'sound/machines/door_close.ogg', 'sound/machines/door_open.ogg', 'sound/machines/engine_alert1.ogg', 'sound/machines/engine_alert2.ogg', 'sound/machines/hiss.ogg', 'sound/machines/honkbot_evil_laugh.ogg', 'sound/machines/juicer.ogg', 'sound/machines/ping.ogg', 'sound/ambience/signal.ogg', 'sound/machines/synth_no.ogg', 'sound/machines/synth_yes.ogg', 'sound/machines/terminal_alert.ogg', 'sound/machines/triple_beep.ogg', 'sound/machines/twobeep.ogg', 'sound/machines/ventcrawl.ogg', 'sound/machines/warning-buzzer.ogg', 'sound/ai/default/outbreak5.ogg', 'sound/ai/default/outbreak7.ogg', 'sound/ai/default/poweroff.ogg', 'sound/ai/default/radiation.ogg', 'sound/ai/default/shuttlecalled.ogg', 'sound/ai/default/shuttledock.ogg', 'sound/ai/default/shuttlerecalled.ogg', 'sound/ai/default/aimalf.ogg') //hahahaha fuck you code divers AddElement(/datum/element/swabable, CELL_LINE_TABLE_NETHER, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 0) AddComponent(/datum/component/health_scaling_effects, min_health_slowdown = -1.5, additional_status_callback = CALLBACK(src, PROC_REF(update_dodge_chance))) diff --git a/code/modules/mob/living/basic/space_fauna/paper_wizard/paper_wizard.dm b/code/modules/mob/living/basic/space_fauna/paper_wizard/paper_wizard.dm index 519e8ba1a73904..720e0c031c0a32 100644 --- a/code/modules/mob/living/basic/space_fauna/paper_wizard/paper_wizard.dm +++ b/code/modules/mob/living/basic/space_fauna/paper_wizard/paper_wizard.dm @@ -36,24 +36,19 @@ AddElement(/datum/element/effect_trail, /obj/effect/temp_visual/paper_scatter) /mob/living/basic/paper_wizard/proc/grant_abilities() - summon = new(src) - summon.Grant(src) - ai_controller.set_blackboard_key(BB_WIZARD_SUMMON_MINIONS, summon) - mimic = new(src) - mimic.Grant(src) - ai_controller.set_blackboard_key(BB_WIZARD_MIMICS, mimic) + var/static/list/innate_actions = list( + /datum/action/cooldown/spell/conjure/wizard_summon_minions = BB_WIZARD_SUMMON_MINIONS, + /datum/action/cooldown/spell/pointed/wizard_mimic = BB_WIZARD_MIMICS, + ) + + grant_actions_by_list(innate_actions) /mob/living/basic/paper_wizard/proc/grant_loot() AddElement(/datum/element/death_drops, dropped_loot) -/mob/living/basic/paper_wizard/Destroy() - QDEL_NULL(summon) - QDEL_NULL(mimic) - return ..() - /datum/ai_controller/basic_controller/paper_wizard blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_WRITING_LIST = list( "I can turn the paper into gold and ink into diamonds!", "Your fate is written and sealed!", diff --git a/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat.dm b/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat.dm index 24e53b3bf444c9..3602d5e8a991c4 100644 --- a/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat.dm +++ b/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat.dm @@ -64,13 +64,18 @@ after_assumed_control = CALLBACK(src, PROC_REF(became_player_controlled)),\ ) - var/datum/action/cooldown/mob_cooldown/domain/domain = new(src) - domain.Grant(src) - ai_controller.set_blackboard_key(BB_DOMAIN_ABILITY, domain) + var/static/list/innate_actions = list( + /datum/action/cooldown/mob_cooldown/domain = BB_DOMAIN_ABILITY, + /datum/action/cooldown/mob_cooldown/riot = BB_RAISE_HORDE_ABILITY, + ) + + grant_actions_by_list(innate_actions) - var/datum/action/cooldown/mob_cooldown/riot/riot = new(src) - riot.Grant(src) - ai_controller.set_blackboard_key(BB_RAISE_HORDE_ABILITY, riot) +/mob/living/basic/regal_rat/death(gibbed) + var/datum/component/potential_component = GetComponent(/datum/component/ghost_direct_control) + if(!QDELETED(potential_component)) + qdel(potential_component) + return ..() /mob/living/basic/regal_rat/examine(mob/user) . = ..() @@ -103,9 +108,8 @@ notify_ghosts( "All rise for [name], ascendant to the throne in \the [get_area(src)].", source = src, - action = NOTIFY_ORBIT, - flashwindow = FALSE, header = "Sentient Rat Created", + notify_flags = NOTIFY_CATEGORY_NOFLASH, ) /// Supplementary work we do when we login. Done this way so we synchronize with the ai controller shutting off and all that jazz as well as allowing more shit to be passed in if need be in future. diff --git a/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_actions.dm b/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_actions.dm index e617ae0a670af5..df7eb0c42b3b5b 100644 --- a/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_actions.dm +++ b/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_actions.dm @@ -6,6 +6,7 @@ name = "Rat King's Domain" desc = "Corrupts this area to be more suitable for your rat army." check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_INCAPACITATED + click_to_activate = FALSE cooldown_time = 6 SECONDS melee_cooldown_time = 0 SECONDS button_icon = 'icons/mob/actions/actions_animal.dmi' @@ -41,6 +42,7 @@ name = "Raise Army" desc = "Raise an army out of the hordes of mice and pests crawling around the maintenance shafts." check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_INCAPACITATED + click_to_activate = FALSE button_icon = 'icons/mob/actions/actions_animal.dmi' button_icon_state = "riot" background_icon_state = "bg_clock" @@ -56,7 +58,7 @@ /datum/pet_command/free, /datum/pet_command/protect_owner, /datum/pet_command/follow, - /datum/pet_command/point_targetting/attack/mouse + /datum/pet_command/point_targeting/attack/mouse ) /// Commands you can give to glockroaches var/static/list/glockroach_commands = list( @@ -64,7 +66,7 @@ /datum/pet_command/free, /datum/pet_command/protect_owner/glockroach, /datum/pet_command/follow, - /datum/pet_command/point_targetting/attack/glockroach + /datum/pet_command/point_targeting/attack/glockroach ) /datum/action/cooldown/mob_cooldown/riot/Activate(atom/target) @@ -193,7 +195,7 @@ return TRUE // Command you can give to a mouse to make it kill someone -/datum/pet_command/point_targetting/attack/mouse +/datum/pet_command/point_targeting/attack/mouse speech_commands = list("attack", "sic", "kill", "cheese em") command_feedback = "squeak!" // Frogs and roaches can squeak too it's fine pointed_reaction = "and squeaks aggressively" @@ -201,7 +203,7 @@ attack_behaviour = /datum/ai_behavior/basic_melee_attack // Command you can give to a mouse to make it kill someone -/datum/pet_command/point_targetting/attack/glockroach +/datum/pet_command/point_targeting/attack/glockroach speech_commands = list("attack", "sic", "kill", "cheese em") command_feedback = "squeak!" pointed_reaction = "and cocks its gun" diff --git a/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_ai.dm b/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_ai.dm index 8a7013b9623733..073029bef3c265 100644 --- a/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_ai.dm +++ b/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_ai.dm @@ -1,7 +1,7 @@ /datum/ai_controller/basic_controller/regal_rat blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, - BB_FLEE_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm index 856b5820b9852b..5a901fa2c79cbe 100644 --- a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm +++ b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm @@ -32,7 +32,7 @@ response_harm_continuous = "punches through" response_harm_simple = "punch through" unsuitable_atmos_damage = 0 - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) //I don't know how you'd apply those, but revenants no-sell them anyway. + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0, OXY = 0) //I don't know how you'd apply those, but revenants no-sell them anyway. habitable_atmos = 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) minimum_survivable_temperature = 0 maximum_survivable_temperature = INFINITY @@ -97,9 +97,7 @@ AddElement(/datum/element/simple_flying) add_traits(list(TRAIT_SPACEWALK, TRAIT_SIXTHSENSE, TRAIT_FREE_HYPERSPACE_MOVEMENT), INNATE_TRAIT) - for(var/ability in abilities) - var/datum/action/spell = new ability(src) - spell.Grant(src) + grant_actions_by_list(abilities) RegisterSignal(src, COMSIG_LIVING_BANED, PROC_REF(on_baned)) RegisterSignal(src, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(on_move)) diff --git a/code/modules/mob/living/basic/space_fauna/revenant/revenant_abilities.dm b/code/modules/mob/living/basic/space_fauna/revenant/revenant_abilities.dm index 63f4bbb9dbc3b9..c6454ee5f7054e 100644 --- a/code/modules/mob/living/basic/space_fauna/revenant/revenant_abilities.dm +++ b/code/modules/mob/living/basic/space_fauna/revenant/revenant_abilities.dm @@ -251,7 +251,7 @@ if(iscarbon(mob)) if(ishuman(mob)) var/mob/living/carbon/human/H = mob - if(H.dna && H.dna.species && !HAS_TRAIT(H, TRAIT_VIRUSIMMUNE)) // SKYRAT EDIT - No more funny purple hair + if(H.dna && H.dna.species && !HAS_TRAIT(H, TRAIT_VIRUSIMMUNE)) // NOVA EDIT - No more funny purple hair H.set_haircolor("#1d2953", override = TRUE) //will be reset when blight is cured var/blightfound = FALSE for(var/datum/disease/revblight/blight in H.diseases) 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 a9e17a9b305ff2..ea153b03c063cf 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/snake/snake.dm b/code/modules/mob/living/basic/space_fauna/snake/snake.dm index 164752e277d978..7a30d713a4d98a 100644 --- a/code/modules/mob/living/basic/space_fauna/snake/snake.dm +++ b/code/modules/mob/living/basic/space_fauna/snake/snake.dm @@ -50,7 +50,7 @@ AddElement(/datum/element/swabable, CELL_LINE_TABLE_SNAKE, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) AddElement(/datum/element/basic_eating, heal_amt = 2, food_types = edibles) - ai_controller.set_blackboard_key(BB_BASIC_FOODS, edibles) + ai_controller.set_blackboard_key(BB_BASIC_FOODS, typecacheof(edibles)) AddComponent(\ /datum/component/tameable,\ @@ -71,7 +71,7 @@ /// Snakes are primarily concerned with getting those tasty, tasty mice, but aren't afraid to strike back at those who attack them /datum/ai_controller/basic_controller/snake blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends/allow_items, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends/allow_items, ) ai_traits = STOP_MOVING_WHEN_PULLED 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 50c54da6c9be32..eadf65e58d3046 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 @@ -24,7 +24,7 @@ unsuitable_cold_damage = 0 unsuitable_heat_damage = 0 unsuitable_atmos_damage = 0 - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0.5, OXY = 1) + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0.5, OXY = 1) combat_mode = TRUE speed = 0 movement_type = FLYING @@ -63,7 +63,7 @@ add_traits(list(TRAIT_SPACEWALK, TRAIT_FREE_HYPERSPACE_MOVEMENT, TRAIT_NO_FLOATING_ANIM, TRAIT_HEALS_FROM_CARP_RIFTS), INNATE_TRAIT) AddElement(/datum/element/simple_flying) AddElement(/datum/element/content_barfer) - AddElement(/datum/element/wall_tearer, do_after_key = DOAFTER_SOURCE_SPACE_DRAGON_INTERACTION) + AddElement(/datum/element/wall_tearer, tear_time = 4 SECONDS, reinforced_multiplier = 3, do_after_key = DOAFTER_SOURCE_SPACE_DRAGON_INTERACTION) AddElement(/datum/element/door_pryer, pry_time = 4 SECONDS, interaction_key = DOAFTER_SOURCE_SPACE_DRAGON_INTERACTION) AddComponent(/datum/component/seethrough_mob) RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) @@ -76,11 +76,6 @@ buffet = new(src) buffet.Grant(src) -/mob/living/basic/space_dragon/Destroy() - QDEL_NULL(fire_breath) - QDEL_NULL(buffet) - return ..() - /mob/living/basic/space_dragon/Login() . = ..() if(!isnull(chosen_colour)) diff --git a/code/modules/mob/living/basic/space_fauna/spaceman.dm b/code/modules/mob/living/basic/space_fauna/spaceman.dm index 5851bfa531b373..8a9ba36287ae35 100644 --- a/code/modules/mob/living/basic/space_fauna/spaceman.dm +++ b/code/modules/mob/living/basic/space_fauna/spaceman.dm @@ -32,7 +32,7 @@ /datum/ai_controller/basic_controller/spaceman blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spider_ai.dm b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spider_ai.dm index 7dd61b72070df1..ae971fd2558e54 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spider_ai.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spider_ai.dm @@ -1,7 +1,7 @@ /// Attacks people it can see, spins webs if it can't see anything to attack. /datum/ai_controller/basic_controller/giant_spider blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED | PAUSE_DURING_DO_AFTER @@ -30,7 +30,7 @@ /// Used by Araneus, who only attacks those who attack first. He is house-trained and will not web up the HoS office. /datum/ai_controller/basic_controller/giant_spider/retaliate blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) planning_subtrees = list( @@ -43,8 +43,8 @@ /// Retaliates, hunts other maintenance creatures, runs away from larger attackers, and spins webs. /datum/ai_controller/basic_controller/giant_spider/pest blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/of_size/ours_or_smaller(), // Hunt mobs our size - BB_FLEE_TARGETTING_DATUM = new /datum/targetting_datum/basic/of_size/larger(), // Run away from mobs bigger than we are + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/of_size/ours_or_smaller, // Hunt mobs our size + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic/of_size/larger, // Run away from mobs bigger than we are ) idle_behavior = /datum/idle_behavior/idle_random_walk diff --git a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm index 5db323167537cc..27c33c78103ef0 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm @@ -19,7 +19,13 @@ melee_damage_upper = 25 gold_core_spawnable = HOSTILE_SPAWN ai_controller = /datum/ai_controller/basic_controller/giant_spider + bite_injection_flags = INJECT_CHECK_PENETRATE_THICK + /// Actions to grant on Initialize + var/list/innate_actions = null +/mob/living/basic/spider/giant/Initialize(mapload) + . = ..() + grant_actions_by_list(innate_actions) /** * ### Ambush Spider @@ -42,7 +48,8 @@ melee_damage_upper = 30 speed = 5 player_speed_modifier = -3.1 - menu_description = "Slow spider, with a strong disarming pull and above avarage health and damage." + menu_description = "Slow spider, with a strong disarming pull and above average health and damage." + innate_actions = list(/datum/action/cooldown/mob_cooldown/sneak/spider) /mob/living/basic/spider/giant/ambush/Initialize(mapload) . = ..() @@ -50,9 +57,6 @@ AddElement(/datum/element/web_walker, /datum/movespeed_modifier/slow_web) - var/datum/action/cooldown/mob_cooldown/sneak/spider/sneak_web = new(src) - sneak_web.Grant(src) - /** * ### Guard Spider * A subtype of the giant spider which is similar on every single way, @@ -74,13 +78,11 @@ speed = 5 player_speed_modifier = -4 menu_description = "Tanky and strong able to shed a carcass for protection." + innate_actions = list(/datum/action/cooldown/mob_cooldown/web_effigy) /mob/living/basic/spider/giant/guard/Initialize(mapload) . = ..() - AddElement(/datum/element/web_walker, /datum/movespeed_modifier/average_web) - var/datum/action/cooldown/mob_cooldown/web_effigy/shed = new(src) - shed.Grant(src) /** * ### Hunter Spider @@ -105,9 +107,11 @@ /mob/living/basic/spider/giant/hunter/Initialize(mapload) . = ..() - AddElement(/datum/element/web_walker, /datum/movespeed_modifier/fast_web) +/mob/living/basic/spider/giant/hunter/mold //NOVA EDIT: exists to make molds not spam the world with simple mobs + basic_mob_flags = DEL_ON_DEATH + /** * ### Scout Spider * A subtype of the giant spider which is faster, has thermal vision, but less health and damage. @@ -131,14 +135,12 @@ player_speed_modifier = -3.1 sight = SEE_SELF|SEE_MOBS menu_description = "Fast spider able to see enemies through walls, send messages to the nest and the ability to travel in vents." + innate_actions = list(/datum/action/cooldown/mob_cooldown/command_spiders/communication_spiders) /mob/living/basic/spider/giant/scout/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) - var/datum/action/cooldown/mob_cooldown/command_spiders/communication_spiders/spiders_communication = new(src) - spiders_communication.Grant(src) - /** * ### Nurse Spider * @@ -210,21 +212,16 @@ speed = 4 player_speed_modifier = -3.1 web_type = /datum/action/cooldown/mob_cooldown/lay_web/sealer - menu_description = "Avarage speed spider with self healing abilities and multiple web types to reinforce the nest with little to no damage and low health." + menu_description = "Average speed spider with self healing abilities and multiple web types to reinforce the nest with little to no damage and low health." + innate_actions = list( + /datum/action/cooldown/mob_cooldown/lay_web/solid_web, + /datum/action/cooldown/mob_cooldown/lay_web/sticky_web, + /datum/action/cooldown/mob_cooldown/lay_web/web_passage, + /datum/action/cooldown/mob_cooldown/lay_web/web_spikes, + ) /mob/living/basic/spider/giant/tangle/Initialize(mapload) . = ..() - var/datum/action/cooldown/mob_cooldown/lay_web/solid_web/web_solid = new(src) - web_solid.Grant(src) - - var/datum/action/cooldown/mob_cooldown/lay_web/web_passage/passage_web = new(src) - passage_web.Grant(src) - - var/datum/action/cooldown/mob_cooldown/lay_web/web_spikes/spikes_web = new(src) - spikes_web.Grant(src) - - var/datum/action/cooldown/mob_cooldown/lay_web/sticky_web/web_sticky = new(src) - web_sticky.Grant(src) AddElement(/datum/element/web_walker, /datum/movespeed_modifier/average_web) @@ -232,7 +229,7 @@ heal_brute = 15,\ heal_burn = 15,\ heal_time = 3 SECONDS,\ - self_targetting = HEALING_TOUCH_SELF_ONLY,\ + self_targeting = HEALING_TOUCH_SELF_ONLY,\ interaction_key = DOAFTER_SOURCE_SPIDER,\ valid_targets_typecache = typecacheof(list(/mob/living/basic/spider/growing/young/tangle, /mob/living/basic/spider/giant/tangle)),\ extra_checks = CALLBACK(src, PROC_REF(can_mend)),\ @@ -260,7 +257,7 @@ icon_dead = "tank_dead" maxHealth = 500 health = 500 - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 1, OXY = 1) + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 1, OXY = 1) melee_damage_lower = 5 melee_damage_upper = 5 obj_damage = 15 @@ -282,7 +279,7 @@ heal_brute = 50,\ heal_burn = 50,\ heal_time = 5 SECONDS,\ - self_targetting = HEALING_TOUCH_SELF_ONLY,\ + self_targeting = HEALING_TOUCH_SELF_ONLY,\ interaction_key = DOAFTER_SOURCE_SPIDER,\ valid_targets_typecache = typecacheof(list(/mob/living/basic/spider/growing/young/tank, /mob/living/basic/spider/giant/tank)),\ extra_checks = CALLBACK(src, PROC_REF(can_mend)),\ @@ -335,7 +332,7 @@ var/datum/action/cooldown/mob_cooldown/command_spiders/warning_spiders/spiders_warning = new(src) spiders_warning.Grant(src) - AddElement(/datum/element/tear_wall) + AddElement(/datum/element/wall_tearer) AddElement(/datum/element/web_walker, /datum/movespeed_modifier/below_average_web) /** @@ -356,7 +353,7 @@ melee_damage_lower = 35 melee_damage_upper = 40 obj_damage = 100 - damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) + damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, STAMINA = 0, OXY = 1) speed = 6 player_speed_modifier = -5.5 // Doesn't seem that slow but it gets a debuff off web mob_size = MOB_SIZE_LARGE @@ -364,7 +361,12 @@ web_speed = 0.7 web_type = /datum/action/cooldown/mob_cooldown/lay_web/sealer menu_description = "Tank spider variant with an enormous amount of health and damage, but is very slow when not on webbing. It also has a charge ability to close distance with a target after a small windup." - /// Charging ability + innate_actions = list( + /datum/action/cooldown/mob_cooldown/charge/basic_charge, + /datum/action/cooldown/mob_cooldown/lay_web/solid_web, + /datum/action/cooldown/mob_cooldown/lay_web/web_passage, + ) + /// Charging ability, kept seperate from innate_actions due to implementation details var/datum/action/cooldown/mob_cooldown/charge/basic_charge/charge /mob/living/basic/spider/giant/tarantula/Initialize(mapload) @@ -405,15 +407,14 @@ player_speed_modifier = -2.5 gold_core_spawnable = NO_SPAWN menu_description = "Assassin spider variant with an unmatched speed and very deadly poison, but has very low amount of health and damage." + innate_actions = list( + /datum/action/cooldown/mob_cooldown/defensive_mode, + ) /mob/living/basic/spider/giant/viper/Initialize(mapload) . = ..() - AddElement(/datum/element/bonus_damage) - var/datum/action/cooldown/mob_cooldown/defensive_mode/defensive_action = new(src) - defensive_action.Grant(src) - /** * ### Spider Broodmother * @@ -440,38 +441,21 @@ web_speed = 0.5 web_type = /datum/action/cooldown/mob_cooldown/lay_web/sealer menu_description = "Royal spider variant specializing in reproduction and leadership, deals low damage." + innate_actions = list( + /datum/action/cooldown/mob_cooldown/command_spiders, + /datum/action/cooldown/mob_cooldown/lay_eggs, + /datum/action/cooldown/mob_cooldown/lay_eggs/abnormal, + /datum/action/cooldown/mob_cooldown/lay_eggs/enriched, + /datum/action/cooldown/mob_cooldown/lay_web/solid_web, + /datum/action/cooldown/mob_cooldown/lay_web/sticky_web, + /datum/action/cooldown/mob_cooldown/lay_web/web_passage, + /datum/action/cooldown/mob_cooldown/lay_web/web_spikes, + /datum/action/cooldown/mob_cooldown/set_spider_directive, + /datum/action/cooldown/mob_cooldown/wrap, + ) /mob/living/basic/spider/giant/midwife/Initialize(mapload) . = ..() - var/datum/action/cooldown/mob_cooldown/lay_web/solid_web/web_solid = new(src) - web_solid.Grant(src) - - var/datum/action/cooldown/mob_cooldown/lay_web/web_passage/passage_web = new(src) - passage_web.Grant(src) - - var/datum/action/cooldown/mob_cooldown/lay_web/web_spikes/spikes_web = new(src) - spikes_web.Grant(src) - - var/datum/action/cooldown/mob_cooldown/lay_web/sticky_web/web_sticky = new(src) - web_sticky.Grant(src) - - var/datum/action/cooldown/mob_cooldown/wrap/wrapping = new(src) - wrapping.Grant(src) - - var/datum/action/cooldown/mob_cooldown/lay_eggs/make_eggs_tier1 = new(src) - make_eggs_tier1.Grant(src) - - var/datum/action/cooldown/mob_cooldown/lay_eggs/abnormal/make_eggs_tier2 = new(src) - make_eggs_tier2.Grant(src) - - var/datum/action/cooldown/mob_cooldown/lay_eggs/enriched/make_eggs_tier3 = new(src) - make_eggs_tier3.Grant(src) - - var/datum/action/cooldown/mob_cooldown/set_spider_directive/give_orders = new(src) - give_orders.Grant(src) - - var/datum/action/cooldown/mob_cooldown/command_spiders/not_hivemind_talk = new(src) - not_hivemind_talk.Grant(src) AddElement(/datum/element/web_walker, /datum/movespeed_modifier/average_web) @@ -581,23 +565,20 @@ web_speed = 0.4 maxHealth = 80 health = 80 - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 1, OXY = 1) + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 1, OXY = 1) unsuitable_cold_damage = 1 unsuitable_heat_damage = 1 menu_description = "Stronger assassin spider variant with an unmatched speed, high amount of health and very deadly poison, but deals very low amount of damage. It also has ability to ventcrawl." apply_spider_antag = FALSE + innate_actions = list( + /datum/action/cooldown/mob_cooldown/lay_web/sticky_web, + /datum/action/cooldown/mob_cooldown/lay_web/web_spikes, + ) /mob/living/basic/spider/giant/viper/wizard/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) - var/datum/action/cooldown/mob_cooldown/lay_web/web_spikes/spikes_web = new(src) - spikes_web.Grant(src) - - var/datum/action/cooldown/mob_cooldown/lay_web/sticky_web/web_sticky = new(src) - web_sticky.Grant(src) - - /** * ### Sergeant Araneus * @@ -606,7 +587,7 @@ /mob/living/basic/spider/giant/sgt_araneus name = "Sergeant Araneus" real_name = "Sergeant Araneus" - desc = "A fierce companion of the Head of Security, this spider has been carefully trained by Nanotrasen specialists. Its beady, staring eyes send shivers down your spine." + desc = "A fierce companion of the Head of Security, this spider has been carefully trained by Symphionia specialists. Its beady, staring eyes send shivers down your spine." faction = list(FACTION_SPIDER) gold_core_spawnable = NO_SPAWN maxHealth = 250 diff --git a/code/modules/mob/living/basic/space_fauna/spider/spider.dm b/code/modules/mob/living/basic/space_fauna/spider/spider.dm index 9ce7f50d0174d7..641e72baa6f9ef 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/spider.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/spider.dm @@ -14,7 +14,7 @@ response_disarm_simple = "gently push aside" initial_language_holder = /datum/language_holder/spider melee_attack_cooldown = CLICK_CD_MELEE - damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, CLONE = 1, STAMINA = 1, OXY = 1) + damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, STAMINA = 1, OXY = 1) basic_mob_flags = FLAMMABLE_MOB status_flags = NONE unsuitable_cold_damage = 4 @@ -36,6 +36,8 @@ var/poison_type = /datum/reagent/toxin/hunterspider /// How much of a reagent the mob injects on attack var/poison_per_bite = 0 + /// How tough is our bite? + var/bite_injection_flags = NONE /// Multiplier to apply to web laying speed. Fractional numbers make it faster, because it's a multiplier. var/web_speed = 1 /// Type of webbing ability to learn. @@ -57,7 +59,7 @@ AddComponent(/datum/component/health_scaling_effects, min_health_slowdown = 1.5) if(poison_per_bite) - AddElement(/datum/element/venomous, poison_type, poison_per_bite) + AddElement(/datum/element/venomous, poison_type, poison_per_bite, injection_flags = bite_injection_flags) var/datum/action/cooldown/mob_cooldown/lay_web/webbing = new web_type(src) webbing.webbing_time *= web_speed @@ -145,7 +147,7 @@ */ /mob/living/basic/spider/maintenance name = "duct spider" - desc = "Nanotrasen's imported solution to mice, comes with its own problems." + desc = "Symphionia's imported solution to mice, comes with its own problems." icon_state = "maint_spider" icon_living = "maint_spider" icon_dead = "maint_spider_dead" diff --git a/code/modules/mob/living/basic/space_fauna/spider/spiderlings/spiderling.dm b/code/modules/mob/living/basic/space_fauna/spider/spiderlings/spiderling.dm index f36b1bc46ba354..2bce05b1a61bad 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/spiderlings/spiderling.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/spiderlings/spiderling.dm @@ -61,7 +61,7 @@ /// Opportunistically hops in and out of vents, if it can find one. We aren't interested in attacking due to how weak we are, we gotta be quick and hidey. /datum/ai_controller/basic_controller/spiderling blackboard = list( - BB_FLEE_TARGETTING_DATUM = new /datum/targetting_datum/basic/of_size/larger, // Run away from mobs bigger than we are + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic/of_size/larger, // Run away from mobs bigger than we are BB_VENTCRAWL_COOLDOWN = 20 SECONDS, // enough time to get splatted while we're out in the open. BB_TIME_TO_GIVE_UP_ON_VENT_PATHING = 30 SECONDS, ) diff --git a/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider.dm b/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider.dm index bdaf7d03faa6ec..8c17833c0c7e8e 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider.dm @@ -29,7 +29,7 @@ /// Used by all young spiders if they ever appear. /datum/ai_controller/basic_controller/young_spider blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_BASIC_MOB_FLEE_DISTANCE = 6, ) diff --git a/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider_subtypes.dm b/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider_subtypes.dm index de44bc74180e93..bdb07b44bdb285 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider_subtypes.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider_subtypes.dm @@ -32,10 +32,9 @@ /mob/living/basic/spider/growing/young/ambush/Initialize(mapload) . = ..() - AddElement(/datum/element/web_walker, /datum/movespeed_modifier/slow_web) - var/datum/action/cooldown/mob_cooldown/sneak/spider/sneak_web = new(src) - sneak_web.Grant(src) + GRANT_ACTION(/datum/action/cooldown/mob_cooldown/sneak/spider) + AddElement(/datum/element/web_walker, /datum/movespeed_modifier/slow_web) /// Will differentiate into the "scout" giant spider. /mob/living/basic/spider/growing/young/scout @@ -136,7 +135,7 @@ heal_brute = 10,\ heal_burn = 10,\ heal_time = 3 SECONDS,\ - self_targetting = HEALING_TOUCH_SELF_ONLY,\ + self_targeting = HEALING_TOUCH_SELF_ONLY,\ interaction_key = DOAFTER_SOURCE_SPIDER,\ valid_targets_typecache = typecacheof(list(/mob/living/basic/spider/growing/young/tangle, /mob/living/basic/spider/giant/tangle)),\ extra_checks = CALLBACK(src, PROC_REF(can_mend)),\ @@ -164,7 +163,7 @@ icon_dead = "young_tank_dead" maxHealth = 50 health = 50 - damage_coeff = list(BRUTE = 0.5, BURN = 0.5, TOX = 0.5, CLONE = 0.5, STAMINA = 0.5, OXY = 1) + damage_coeff = list(BRUTE = 0.5, BURN = 0.5, TOX = 0.5, STAMINA = 0.5, OXY = 1) melee_damage_lower = 10 melee_damage_upper = 15 speed = 1 @@ -175,7 +174,7 @@ heal_brute = 5,\ heal_burn = 5,\ heal_time = 2 SECONDS,\ - self_targetting = HEALING_TOUCH_SELF_ONLY,\ + self_targeting = HEALING_TOUCH_SELF_ONLY,\ interaction_key = DOAFTER_SOURCE_SPIDER,\ valid_targets_typecache = typecacheof(list(/mob/living/basic/spider/growing/young/tank, /mob/living/basic/spider/giant/tank)),\ extra_checks = CALLBACK(src, PROC_REF(can_mend)),\ diff --git a/code/modules/mob/living/basic/space_fauna/statue/statue.dm b/code/modules/mob/living/basic/space_fauna/statue/statue.dm index d2ea5e8a831d05..814500674fcc83 100644 --- a/code/modules/mob/living/basic/space_fauna/statue/statue.dm +++ b/code/modules/mob/living/basic/space_fauna/statue/statue.dm @@ -51,23 +51,17 @@ pull_force = MOVE_FORCE_EXTREMELY_STRONG ai_controller = /datum/ai_controller/basic_controller/statue - /// Stores the creator in here if it has one. - var/mob/living/creator = null -/mob/living/basic/statue/Initialize(mapload, mob/living/creator) +/mob/living/basic/statue/Initialize(mapload) . = ..() - AddComponent(/datum/component/unobserved_actor, unobserved_flags = NO_OBSERVED_MOVEMENT | NO_OBSERVED_ATTACKS) ADD_TRAIT(src, TRAIT_UNOBSERVANT, INNATE_TRAIT) + AddComponent(/datum/component/unobserved_actor, unobserved_flags = NO_OBSERVED_MOVEMENT | NO_OBSERVED_ATTACKS) - // Give spells - var/datum/action/cooldown/spell/aoe/flicker_lights/flicker = new(src) - flicker.Grant(src) - var/datum/action/cooldown/spell/aoe/blindness/blind = new(src) - blind.Grant(src) - - // Set creator - if(creator) - src.creator = creator + var/static/list/innate_actions = list( + /datum/action/cooldown/spell/aoe/blindness, + /datum/action/cooldown/spell/aoe/flicker_lights, + ) + grant_actions_by_list(innate_actions) /mob/living/basic/statue/med_hud_set_health() return //we're a statue we're invincible @@ -141,8 +135,7 @@ /datum/ai_controller/basic_controller/statue blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), - BB_LOW_PRIORITY_HUNTING_TARGET = null, // lights + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/supermatter_spider.dm b/code/modules/mob/living/basic/space_fauna/supermatter_spider.dm index 2a3ba326eaca95..02fd9ed1bcf1ea 100644 --- a/code/modules/mob/living/basic/space_fauna/supermatter_spider.dm +++ b/code/modules/mob/living/basic/space_fauna/supermatter_spider.dm @@ -82,7 +82,7 @@ /datum/ai_controller/basic_controller/supermatter_spider blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/fugu_gland.dm b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/fugu_gland.dm index 63eb39c74e6fd5..04d52cf62125a0 100644 --- a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/fugu_gland.dm +++ b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/fugu_gland.dm @@ -15,7 +15,7 @@ if(fugu_blacklist) return fugu_blacklist = typecacheof(list( - /mob/living/simple_animal/hostile/guardian, + /mob/living/basic/guardian, )) /obj/item/fugu_gland/afterattack(atom/target, mob/user, proximity_flag) @@ -37,7 +37,7 @@ animal.health = min(animal.maxHealth, animal.health * 1.5) animal.melee_damage_lower = max((animal.melee_damage_lower * 2), 10) animal.melee_damage_upper = max((animal.melee_damage_upper * 2), 10) - animal.transform *= 2 - animal.AddElement(/datum/element/wall_smasher, strength_flag = ENVIRONMENT_SMASH_RWALLS) + animal.update_transform(2) + animal.AddElement(/datum/element/wall_tearer) to_chat(user, span_info("You increase the size of [animal], giving [animal.p_them()] a surge of strength!")) qdel(src) diff --git a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm index a9e2b538bdd741..70b3506527a187 100644 --- a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm +++ b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm @@ -58,7 +58,7 @@ RegisterSignal(fugu, COMSIG_MOB_STATCHANGE, PROC_REF(check_death)) fugu.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/inflated) ADD_TRAIT(fugu, TRAIT_FUGU_GLANDED, TRAIT_STATUS_EFFECT(id)) - fugu.AddElement(/datum/element/wall_smasher) + fugu.AddElement(/datum/element/wall_tearer, allow_reinforced = FALSE) fugu.mob_size = MOB_SIZE_LARGE fugu.icon_state = "Fugu1" fugu.melee_damage_lower = 15 @@ -76,7 +76,7 @@ UnregisterSignal(fugu, COMSIG_MOB_STATCHANGE) fugu.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/inflated) REMOVE_TRAIT(fugu, TRAIT_FUGU_GLANDED, TRAIT_STATUS_EFFECT(id)) - fugu.RemoveElement(/datum/element/wall_smasher) + fugu.RemoveElement(/datum/element/wall_tearer, allow_reinforced = FALSE) fugu.mob_size = MOB_SIZE_SMALL fugu.melee_damage_lower = 0 fugu.melee_damage_upper = 0 diff --git a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/wumborian_ai.dm b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/wumborian_ai.dm index e405ee3755abf1..1b4e2cdd62019f 100644 --- a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/wumborian_ai.dm +++ b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/wumborian_ai.dm @@ -1,7 +1,7 @@ /// Cowardly when small, aggressive when big. Tries to transform whenever possible. /datum/ai_controller/basic_controller/wumborian_fugu blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/trader/trader_ai.dm b/code/modules/mob/living/basic/trader/trader_ai.dm index d6cf0095c7d83f..5f447ab3229af6 100644 --- a/code/modules/mob/living/basic/trader/trader_ai.dm +++ b/code/modules/mob/living/basic/trader/trader_ai.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/trader blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/tree.dm b/code/modules/mob/living/basic/tree.dm index 2a0806b105c983..3f3894f190b5e0 100644 --- a/code/modules/mob/living/basic/tree.dm +++ b/code/modules/mob/living/basic/tree.dm @@ -56,7 +56,7 @@ . = ..() AddComponent(/datum/component/seethrough_mob) AddElement(/datum/element/swabable, CELL_LINE_TABLE_PINE, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) - var/static/list/death_loot = list(/obj/item/stack/sheet/mineral/wood) + var/list/death_loot = string_list(list(/obj/item/stack/sheet/mineral/wood)) AddElement(/datum/element/death_drops, death_loot) AddComponent(/datum/component/aggro_emote, emote_list = string_list(list("growls")), emote_chance = 20) @@ -100,7 +100,7 @@ /datum/ai_controller/basic_controller/tree blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/trooper/abductor.dm b/code/modules/mob/living/basic/trooper/abductor.dm new file mode 100644 index 00000000000000..fdb8b41cc5ec57 --- /dev/null +++ b/code/modules/mob/living/basic/trooper/abductor.dm @@ -0,0 +1,41 @@ +/// Abductor troopers +/mob/living/basic/trooper/abductor + name = "Abductor Agent" + desc = "Mezaflorp?" + faction = list(ROLE_SYNDICATE) + loot = list(/obj/effect/mob_spawn/corpse/human/abductor) + mob_spawner = /obj/effect/mob_spawn/corpse/human/abductor + +/mob/living/basic/trooper/abductor/melee + melee_damage_lower = 15 + melee_damage_upper = 15 + loot = list(/obj/effect/gibspawner/human) + attack_verb_continuous = "beats" + attack_verb_simple = "beat" + attack_sound = 'sound/weapons/egloves.ogg' + attack_vis_effect = ATTACK_EFFECT_SLASH + r_hand = /obj/item/melee/baton/abductor + var/projectile_deflect_chance = 0 + +/mob/living/basic/trooper/abductor/ranged + loot = list(/obj/effect/gibspawner/human) + ai_controller = /datum/ai_controller/basic_controller/trooper/ranged + r_hand = /obj/item/gun/energy/alien + /// Type of bullet we use + var/casingtype = /obj/item/ammo_casing/energy/lasergun + /// Sound to play when firing weapon + var/projectilesound = 'sound/weapons/laser2.ogg' + /// number of burst shots + var/burst_shots = 1 + /// Time between taking shots + var/ranged_cooldown = 5 SECONDS + +/mob/living/basic/trooper/abductor/ranged/Initialize(mapload) + . = ..() + AddComponent(\ + /datum/component/ranged_attacks,\ + casing_type = casingtype,\ + projectile_sound = projectilesound,\ + cooldown_time = ranged_cooldown,\ + burst_shots = burst_shots,\ + ) diff --git a/code/modules/mob/living/basic/trooper/nanotrasen.dm b/code/modules/mob/living/basic/trooper/nanotrasen.dm index 7dfab5298c2085..bcbc5e647ebb65 100644 --- a/code/modules/mob/living/basic/trooper/nanotrasen.dm +++ b/code/modules/mob/living/basic/trooper/nanotrasen.dm @@ -2,13 +2,15 @@ /mob/living/basic/trooper/nanotrasen name = "\improper Nanotrasen Private Security Officer" desc = "An officer of Nanotrasen's private security force. Seems rather unpleased to meet you." - speed = 0 melee_damage_lower = 10 melee_damage_upper = 15 faction = list(ROLE_DEATHSQUAD) loot = list(/obj/effect/mob_spawn/corpse/human/nanotrasensoldier) mob_spawner = /obj/effect/mob_spawn/corpse/human/nanotrasensoldier +/mob/living/basic/trooper/nanotrasen/assess_threat(judgement_criteria, lasercolor, datum/callback/weaponcheck) + return -10 // Respect our troops + /// A variant that calls for reinforcements on spotting a target /mob/living/basic/trooper/nanotrasen/screaming ai_controller = /datum/ai_controller/basic_controller/trooper/calls_reinforcements @@ -34,6 +36,8 @@ cooldown_time = ranged_cooldown,\ burst_shots = burst_shots,\ ) + if (ranged_cooldown <= 1 SECONDS) + AddComponent(/datum/component/ranged_mob_full_auto) /mob/living/basic/trooper/nanotrasen/ranged/smg ai_controller = /datum/ai_controller/basic_controller/trooper/ranged/burst diff --git a/code/modules/mob/living/basic/trooper/pirate.dm b/code/modules/mob/living/basic/trooper/pirate.dm index 714fc53856e23b..208a113e5d4abd 100644 --- a/code/modules/mob/living/basic/trooper/pirate.dm +++ b/code/modules/mob/living/basic/trooper/pirate.dm @@ -4,7 +4,6 @@ desc = "Does what he wants cause a pirate is free." response_help_continuous = "pushes" response_help_simple = "push" - speed = 0 speak_emote = list("yarrs") faction = list(FACTION_PIRATE) loot = list(/obj/effect/mob_spawn/corpse/human/pirate) @@ -42,7 +41,6 @@ name = "Space Pirate Swashbuckler" unsuitable_atmos_damage = 0 minimum_survivable_temperature = 0 - speed = 1 loot = list(/obj/effect/mob_spawn/corpse/human/pirate/melee/space) mob_spawner = /obj/effect/mob_spawn/corpse/human/pirate/melee/space @@ -79,7 +77,6 @@ name = "Space Pirate Gunner" unsuitable_atmos_damage = 0 minimum_survivable_temperature = 0 - speed = 1 loot = list(/obj/effect/mob_spawn/corpse/human/pirate/ranged/space) mob_spawner = /obj/effect/mob_spawn/corpse/human/pirate/ranged/space r_hand = /obj/item/gun/energy/e_gun/lethal diff --git a/code/modules/mob/living/basic/trooper/russian.dm b/code/modules/mob/living/basic/trooper/russian.dm index 6e5e34d16b920b..6c8ff52c019a95 100644 --- a/code/modules/mob/living/basic/trooper/russian.dm +++ b/code/modules/mob/living/basic/trooper/russian.dm @@ -2,7 +2,7 @@ /mob/living/basic/trooper/russian name = "Russian Mobster" desc = "For the Motherland!" - speed = 0 + speed = 1.2 melee_damage_lower = 15 melee_damage_upper = 15 unsuitable_cold_damage = 1 diff --git a/code/modules/mob/living/basic/trooper/syndicate.dm b/code/modules/mob/living/basic/trooper/syndicate.dm index 7075e293add787..c4d1bbd3630497 100644 --- a/code/modules/mob/living/basic/trooper/syndicate.dm +++ b/code/modules/mob/living/basic/trooper/syndicate.dm @@ -2,7 +2,6 @@ /mob/living/basic/trooper/syndicate name = "Syndicate Operative" desc = "Death to Nanotrasen." - speed = 1.1 faction = list(ROLE_SYNDICATE) loot = list(/obj/effect/mob_spawn/corpse/human/syndicatesoldier) mob_spawner = /obj/effect/mob_spawn/corpse/human/syndicatesoldier @@ -121,6 +120,8 @@ cooldown_time = ranged_cooldown,\ burst_shots = burst_shots,\ ) + if (ranged_cooldown <= 1 SECONDS) + AddComponent(/datum/component/ranged_mob_full_auto) /mob/living/basic/trooper/syndicate/ranged/infiltrator //shuttle loan event projectilesound = 'sound/weapons/gun/smg/shot_suppressed.ogg' @@ -190,7 +191,6 @@ health = 170 unsuitable_atmos_damage = 0 minimum_survivable_temperature = 0 - speed = 1 mob_spawner = /obj/effect/mob_spawn/corpse/human/syndicatecommando /mob/living/basic/trooper/syndicate/ranged/shotgun/space/Initialize(mapload) diff --git a/code/modules/mob/living/basic/trooper/trooper_ai.dm b/code/modules/mob/living/basic/trooper/trooper_ai.dm index 3b89807ea62c28..cf71b38f45b537 100644 --- a/code/modules/mob/living/basic/trooper/trooper_ai.dm +++ b/code/modules/mob/living/basic/trooper/trooper_ai.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/trooper blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, BB_REINFORCEMENTS_SAY = "411 in progress, requesting backup!" ) @@ -90,10 +90,10 @@ /datum/ai_behavior/basic_ranged_attack/trooper_shotgun action_cooldown = 3 SECONDS - required_distance = 1 + required_distance = 3 avoid_friendly_fire = TRUE /datum/ai_controller/basic_controller/trooper/viscerator blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) diff --git a/code/modules/mob/living/basic/vermin/cockroach.dm b/code/modules/mob/living/basic/vermin/cockroach.dm index 639a9720dbce30..595ef0b37d7f3d 100644 --- a/code/modules/mob/living/basic/vermin/cockroach.dm +++ b/code/modules/mob/living/basic/vermin/cockroach.dm @@ -60,8 +60,8 @@ /datum/ai_controller/basic_controller/cockroach blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, ) ai_traits = STOP_MOVING_WHEN_PULLED @@ -106,6 +106,8 @@ burst_shots = burst_shots,\ cooldown_time = ranged_cooldown,\ ) + if (ranged_cooldown <= 1 SECONDS) + AddComponent(/datum/component/ranged_mob_full_auto) /datum/ai_controller/basic_controller/cockroach/glockroach planning_subtrees = list( diff --git a/code/modules/mob/living/basic/vermin/crab.dm b/code/modules/mob/living/basic/vermin/crab.dm index bb81fd29c4d500..18a935443a11d1 100644 --- a/code/modules/mob/living/basic/vermin/crab.dm +++ b/code/modules/mob/living/basic/vermin/crab.dm @@ -78,8 +78,8 @@ /datum/ai_controller/basic_controller/crab blackboard = list( BB_ALWAYS_IGNORE_FACTION = TRUE, - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/of_size/ours_or_smaller, - BB_FLEE_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/of_size/smaller, + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED @@ -92,4 +92,5 @@ /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_melee_attack_subtree, /datum/ai_planning_subtree/random_speech/crab, + /datum/ai_planning_subtree/go_for_swim, ) diff --git a/code/modules/mob/living/basic/vermin/frog.dm b/code/modules/mob/living/basic/vermin/frog.dm index 7ff5260ccb762a..351bfd809a6f13 100644 --- a/code/modules/mob/living/basic/vermin/frog.dm +++ b/code/modules/mob/living/basic/vermin/frog.dm @@ -26,7 +26,7 @@ response_harm_simple = "splat" density = FALSE faction = list(FACTION_HOSTILE, FACTION_MAINT_CREATURES) - attack_sound = null // SKYRAT EDIT - No more frog ear-rape - ORIGINAL: attack_sound = 'sound/effects/reee.ogg' + attack_sound = null // NOVA EDIT - No more frog ear-rape - ORIGINAL: attack_sound = 'sound/effects/reee.ogg' butcher_results = list(/obj/item/food/nugget = 1) pass_flags = PASSTABLE | PASSGRILLE | PASSMOB mob_size = MOB_SIZE_TINY @@ -40,7 +40,7 @@ ai_controller = /datum/ai_controller/basic_controller/frog - var/stepped_sound = null // SKYRAT EDIT - No more frog ear-rape - ORIGINA: var/stepped_sound = 'sound/effects/huuu.ogg' + var/stepped_sound = null // NOVA EDIT - No more frog ear-rape - ORIGINA: var/stepped_sound = 'sound/effects/huuu.ogg' ///How much of a reagent the mob injects on attack var/poison_per_bite = 3 ///What reagent the mob injects targets with @@ -75,10 +75,27 @@ if(L.mob_size > MOB_SIZE_TINY) playsound(src, stepped_sound, 50, TRUE) +/mob/living/basic/frog/frog_suicide + name = "suicide frog" + desc = "Driven by sheer will." + icon_state = "frog_trash" + icon_living = "frog_trash" + icon_dead = "frog_trash_dead" + maxHealth = 5 + health = 5 + ai_controller = /datum/ai_controller/basic_controller/frog/suicide_frog + ///how long do we exist for + var/existence_period = 15 SECONDS + +/mob/living/basic/frog/frog_suicide/Initialize(mapload) + . = ..() + AddComponent(/datum/component/explode_on_attack, mob_type_dont_bomb = typecacheof(list(/mob/living/basic/frog, /mob/living/basic/leaper))) + addtimer(CALLBACK(src, PROC_REF(death)), existence_period) + /datum/ai_controller/basic_controller/frog blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, ) ai_movement = /datum/ai_movement/basic_avoidance @@ -87,6 +104,7 @@ /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/random_speech/frog, /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/go_for_swim, ) /datum/ai_controller/basic_controller/frog/trash @@ -96,3 +114,9 @@ /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_melee_attack_subtree, ) + +/datum/ai_controller/basic_controller/frog/suicide_frog + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + ) diff --git a/code/modules/mob/living/basic/vermin/lizard.dm b/code/modules/mob/living/basic/vermin/lizard.dm index d1a30826f4ac4e..da68087d70ffa5 100644 --- a/code/modules/mob/living/basic/vermin/lizard.dm +++ b/code/modules/mob/living/basic/vermin/lizard.dm @@ -51,11 +51,11 @@ ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) AddElement(/datum/element/pet_bonus, "sticks its tongue out contentedly!") AddElement(/datum/element/basic_eating, heal_amt = 5, food_types = edibles) - ai_controller.set_blackboard_key(BB_BASIC_FOODS, edibles) + ai_controller.set_blackboard_key(BB_BASIC_FOODS, typecacheof(edibles)) /datum/ai_controller/basic_controller/lizard blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, ) ai_traits = STOP_MOVING_WHEN_PULLED diff --git a/code/modules/mob/living/basic/vermin/mouse.dm b/code/modules/mob/living/basic/vermin/mouse.dm index 2929085fb939f2..c1ba3c12e364b0 100644 --- a/code/modules/mob/living/basic/vermin/mouse.dm +++ b/code/modules/mob/living/basic/vermin/mouse.dm @@ -379,7 +379,7 @@ blackboard = list( // Always cowardly BB_CURRENT_HUNTING_TARGET = null, // cheese BB_LOW_PRIORITY_HUNTING_TARGET = null, // cable - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), // Use this to find people to run away from + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, // Use this to find people to run away from BB_BASIC_MOB_FLEE_DISTANCE = 3, ) @@ -411,8 +411,8 @@ /// AI controller for rats, slightly more complex than mice becuase they attack people /datum/ai_controller/basic_controller/mouse/rat blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, BB_BASIC_MOB_CURRENT_TARGET = null, // heathen BB_CURRENT_HUNTING_TARGET = null, // cheese BB_LOW_PRIORITY_HUNTING_TARGET = null, // cable diff --git a/code/modules/mob/living/basic/vermin/space_bat.dm b/code/modules/mob/living/basic/vermin/space_bat.dm index 232febf0f97d24..24718c8481acdb 100644 --- a/code/modules/mob/living/basic/vermin/space_bat.dm +++ b/code/modules/mob/living/basic/vermin/space_bat.dm @@ -42,7 +42,7 @@ ///Controller for space bats, has nothing unique, just retaliation. /datum/ai_controller/basic_controller/space_bat blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index bc0d2e3d8e81ae..0818532cc4df72 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -286,7 +286,7 @@ return /datum/reagent/blood /mob/living/carbon/human/get_blood_id() - if(HAS_TRAIT(src, TRAIT_HUSK)) + if(HAS_TRAIT(src, TRAIT_HUSK) || !dna) return if(check_holidays(APRIL_FOOLS) && is_clown_job(mind?.assigned_role)) return /datum/reagent/colorful_reagent diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm index b63ca68d7d7744..74e5931163b49f 100644 --- a/code/modules/mob/living/brain/MMI.dm +++ b/code/modules/mob/living/brain/MMI.dm @@ -1,7 +1,7 @@ /obj/item/mmi name = "\improper Man-Machine Interface" desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity, that nevertheless has become standard-issue on Nanotrasen stations." - icon = 'icons/obj/assemblies/assemblies.dmi' + icon = 'icons/obj/devices/assemblies.dmi' icon_state = "mmi_off" base_icon_state = "mmi" w_class = WEIGHT_CLASS_NORMAL @@ -74,7 +74,7 @@ return var/mob/living/brain/B = newbrain.brainmob if(!B.key && !newbrain.decoy_override) - B.notify_ghost_cloning("Someone has put your brain in a MMI!", source = src) + B.notify_revival("Someone has put your brain in a MMI!", source = src) user.visible_message(span_notice("[user] sticks \a [newbrain] into [src]."), span_notice("[src]'s indicator light turn on as you insert [newbrain].")) set_brainmob(newbrain.brainmob) @@ -111,6 +111,62 @@ else return ..() +/** + * Forces target brain into the MMI. Mainly intended for admin purposes, as this allows transfer without a mob or user. + * + * Returns FALSE on failure, TRUE on success. + * + * Arguments: + * * new_brain - Brain to be force-inserted into the MMI. Any calling code should handle proper removal of the brain from the mob, as this proc only forceMoves. + */ +/obj/item/mmi/proc/force_brain_into(obj/item/organ/internal/brain/new_brain) + if(isnull(new_brain)) + stack_trace("Proc called with null brain.") + return FALSE + + if(!istype(new_brain)) + stack_trace("Proc called with invalid type: [new_brain] ([new_brain.type])") + return FALSE + + if(isnull(new_brain.brainmob)) + new_brain.forceMove(src) + brain = new_brain + brain.organ_flags |= ORGAN_FROZEN + name = "[initial(name)]: [copytext(new_brain.name, 1, -8)]" + update_appearance() + return TRUE + + new_brain.forceMove(src) + + var/mob/living/brain/new_brain_brainmob = new_brain.brainmob + if(!new_brain_brainmob.key && !new_brain.decoy_override) + new_brain_brainmob.notify_revival("Someone has put your brain in a MMI!", source = src) + + set_brainmob(new_brain_brainmob) + new_brain.brainmob = null + brainmob.forceMove(src) + brainmob.container = src + + var/fubar_brain = new_brain.suicided || HAS_TRAIT(brainmob, TRAIT_SUICIDED) + if(!fubar_brain && !(new_brain.organ_flags & ORGAN_FAILING)) + brainmob.set_stat(CONSCIOUS) + + brainmob.reset_perspective() + brain = new_brain + brain.organ_flags |= ORGAN_FROZEN + + name = "[initial(name)]: [brainmob.real_name]" + + update_appearance() + if(istype(brain, /obj/item/organ/internal/brain/alien)) + braintype = "Xenoborg" + else + braintype = "Cyborg" + + SSblackbox.record_feedback("amount", "mmis_filled", 1) + + return TRUE + /obj/item/mmi/attack_self(mob/user) if(!brain) radio.set_on(!radio.is_on()) @@ -152,6 +208,7 @@ if(ishuman(L)) var/mob/living/carbon/human/H = L var/obj/item/organ/internal/brain/newbrain = H.get_organ_by_type(/obj/item/organ/internal/brain) + newbrain.Remove(H, special = TRUE, movement_flags = NO_ID_TRANSFER) newbrain.forceMove(src) brain = newbrain else if(!brain) diff --git a/code/modules/mob/living/brain/brain_cybernetic.dm b/code/modules/mob/living/brain/brain_cybernetic.dm new file mode 100644 index 00000000000000..d87b6d902837ca --- /dev/null +++ b/code/modules/mob/living/brain/brain_cybernetic.dm @@ -0,0 +1,59 @@ +/obj/item/organ/internal/brain/cybernetic + name = "cybernetic brain" + desc = "A mechanical brain found inside of androids. Not to be confused with a positronic brain." + icon_state = "brain-c" + organ_flags = ORGAN_ROBOTIC | ORGAN_VITAL + failing_desc = "seems to be broken, and will not work without repairs." + +/obj/item/organ/internal/brain/cybernetic/brain_damage_examine() + if(suicided) + return span_info("Its circuitry is smoking slightly. They must not have been able to handle the stress of it all.") + if(brainmob && (decoy_override || brainmob.client || brainmob.get_ghost())) + if(organ_flags & ORGAN_FAILING) + return span_info("It seems to still have a bit of energy within it, but it's rather damaged... You may be able to repair it with a multitool.") + else if(damage >= BRAIN_DAMAGE_DEATH*0.5) + return span_info("You can feel the small spark of life still left in this one, but it's got some dents. You may be able to restore it with a multitool.") + else + return span_info("You can feel the small spark of life still left in this one.") + else + return span_info("This one is completely devoid of life.") + +/obj/item/organ/internal/brain/cybernetic/check_for_repair(obj/item/item, mob/user) + if (item.tool_behaviour == TOOL_MULTITOOL) //attempt to repair the brain + if (brainmob?.health <= HEALTH_THRESHOLD_DEAD) //if the brain is fucked anyway, do nothing + to_chat(user, span_warning("[src] is far too damaged, there's nothing else we can do for it!")) + return TRUE + + if (DOING_INTERACTION(user, src)) + to_chat(user, span_warning("you're already repairing [src]!")) + return TRUE + + user.visible_message(span_notice("[user] slowly starts to repair [src] with [item]."), span_notice("You slowly start to repair [src] with [item].")) + var/did_repair = FALSE + while(damage > 0) + if(item.use_tool(src, user, 3 SECONDS, volume = 50)) + did_repair = TRUE + set_organ_damage(max(0, damage - 20)) + else + break + + if (did_repair) + if (damage > 0) + user.visible_message(span_notice("[user] partially repairs [src] with [item]."), span_notice("You partially repair [src] with [item].")) + else + user.visible_message(span_notice("[user] fully repairs [src] with [item], causing its warning light to stop flashing."), span_notice("You fully repair [src] with [item], causing its warning light to stop flashing.")) + else + to_chat(user, span_warning("You failed to repair [src] with [item]!")) + + return TRUE + return FALSE + +/obj/item/organ/internal/brain/cybernetic/emp_act(severity) + . = ..() + if(. & EMP_PROTECT_SELF) + return + switch(severity) // Hard cap on brain damage from EMP + if (EMP_HEAVY) + apply_organ_damage(20, BRAIN_DAMAGE_SEVERE) + if (EMP_LIGHT) + apply_organ_damage(10, BRAIN_DAMAGE_MILD) diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 9918a21b4f6d40..a613e2ad839321 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -6,7 +6,6 @@ throw_speed = 3 throw_range = 5 layer = ABOVE_MOB_LAYER - plane = GAME_PLANE_UPPER zone = BODY_ZONE_HEAD slot = ORGAN_SLOT_BRAIN organ_flags = ORGAN_ORGANIC | ORGAN_VITAL @@ -54,7 +53,7 @@ if(brain_size > 1) . += span_notice("It is bigger than average...") -/obj/item/organ/internal/brain/Insert(mob/living/carbon/brain_owner, special = FALSE, drop_if_replaced = TRUE, no_id_transfer = FALSE) +/obj/item/organ/internal/brain/mob_insert(mob/living/carbon/brain_owner, special = FALSE, movement_flags) . = ..() if(!.) return @@ -62,7 +61,7 @@ name = initial(name) // Special check for if you're trapped in a body you can't control because it's owned by a ling. - if(brain_owner?.mind?.has_antag_datum(/datum/antagonist/changeling) && !no_id_transfer) + if(brain_owner?.mind?.has_antag_datum(/datum/antagonist/changeling) && !(movement_flags & NO_ID_TRANSFER)) if(brainmob && !(brain_owner.stat == DEAD || (HAS_TRAIT(brain_owner, TRAIT_DEATHCOMA)))) to_chat(brainmob, span_danger("You can't feel your body! You're still just a brain!")) forceMove(brain_owner) @@ -109,25 +108,11 @@ //Update the body's icon so it doesnt appear debrained anymore brain_owner.update_body_parts() -/obj/item/organ/internal/brain/on_insert(mob/living/carbon/organ_owner, special) - // Are we inserting into a new mob from a head? - // If yes, we want to quickly steal the brainmob from the head before we do anything else. - // This is usually stuff like reattaching dismembered/amputated heads. - if(istype(loc, /obj/item/bodypart/head)) - var/obj/item/bodypart/head/brain_holder = loc - if(brain_holder.brainmob) - brainmob = brain_holder.brainmob - brain_holder.brainmob = null - brainmob.container = null - brainmob.forceMove(src) - - return ..() - -/obj/item/organ/internal/brain/Remove(mob/living/carbon/brain_owner, special = 0, no_id_transfer = FALSE) +/obj/item/organ/internal/brain/mob_remove(mob/living/carbon/organ_owner, special, movement_flags) // Delete skillchips first as parent proc sets owner to null, and skillchips need to know the brain's owner. - if(!QDELETED(brain_owner) && length(skillchips)) + if(!QDELETED(organ_owner) && length(skillchips)) if(!special) - to_chat(brain_owner, span_notice("You feel your skillchips enable emergency power saving mode, deactivating as your brain leaves your body...")) + to_chat(organ_owner, span_notice("You feel your skillchips enable emergency power saving mode, deactivating as your brain leaves your body...")) for(var/chip in skillchips) var/obj/item/skillchip/skillchip = chip // Run the try_ proc with force = TRUE. @@ -140,10 +125,11 @@ BT.on_lose(TRUE) BT.owner = null - if((!gc_destroyed || (owner && !owner.gc_destroyed)) && !no_id_transfer) - transfer_identity(brain_owner) - brain_owner.update_body_parts() - brain_owner.clear_mood_event("brain_damage") + if((!gc_destroyed || (owner && !owner.gc_destroyed)) && !(movement_flags & NO_ID_TRANSFER)) + transfer_identity(organ_owner) + if(!special) + organ_owner.update_body_parts() + organ_owner.clear_mood_event("brain_damage") /obj/item/organ/internal/brain/proc/transfer_identity(mob/living/L) name = "[L.name]'s [initial(name)]" @@ -177,32 +163,17 @@ L.mind.transfer_to(brainmob) to_chat(brainmob, span_notice("You feel slightly disoriented. That's normal when you're just a brain.")) -/obj/item/organ/internal/brain/attackby(obj/item/O, mob/user, params) +/obj/item/organ/internal/brain/attackby(obj/item/item, mob/user, params) user.changeNext_move(CLICK_CD_MELEE) - if(istype(O, /obj/item/borg/apparatus/organ_storage)) + if(istype(item, /obj/item/borg/apparatus/organ_storage)) return //Borg organ bags shouldn't be killing brains - if(damage && O.is_drainable() && O.reagents.has_reagent(/datum/reagent/medicine/mannitol)) //attempt to heal the brain - . = TRUE //don't do attack animation. - if(brainmob?.health <= HEALTH_THRESHOLD_DEAD) //if the brain is fucked anyway, do nothing - to_chat(user, span_warning("[src] is far too damaged, there's nothing else we can do for it!")) - return - - user.visible_message(span_notice("[user] starts to slowly pour the contents of [O] onto [src]."), span_notice("You start to slowly pour the contents of [O] onto [src].")) - if(!do_after(user, 3 SECONDS, src)) - to_chat(user, span_warning("You failed to pour the contents of [O] onto [src]!")) - return - - user.visible_message(span_notice("[user] pours the contents of [O] onto [src], causing it to reform its original shape and turn a slightly brighter shade of pink."), span_notice("You pour the contents of [O] onto [src], causing it to reform its original shape and turn a slightly brighter shade of pink.")) - var/amount = O.reagents.get_reagent_amount(/datum/reagent/medicine/mannitol) - var/healto = max(0, damage - amount * 2) - O.reagents.remove_all(ROUND_UP(O.reagents.total_volume / amount * (damage - healto) * 0.5)) //only removes however much solution is needed while also taking into account how much of the solution is mannitol - set_organ_damage(healto) //heals 2 damage per unit of mannitol, and by using "set_organ_damage", we clear the failing variable if that was up - return + if (check_for_repair(item, user)) + return TRUE // Cutting out skill chips. - if(length(skillchips) && O.get_sharpness() == SHARP_EDGED) + if(length(skillchips) && item.get_sharpness() == SHARP_EDGED) to_chat(user,span_notice("You begin to excise skillchips from [src].")) if(do_after(user, 15 SECONDS, target = src)) for(var/chip in skillchips) @@ -225,31 +196,57 @@ return if(brainmob) //if we aren't trying to heal the brain, pass the attack onto the brainmob. - O.attack(brainmob, user) //Oh noooeeeee + item.attack(brainmob, user) //Oh noooeeeee - if(O.force != 0 && !(O.item_flags & NOBLUDGEON)) + if(item.force != 0 && !(item.item_flags & NOBLUDGEON)) user.do_attack_animation(src) playsound(loc, 'sound/effects/meatslap.ogg', 50) set_organ_damage(maxHealth) //fails the brain as the brain was attacked, they're pretty fragile. - visible_message(span_danger("[user] hits [src] with [O]!")) - to_chat(user, span_danger("You hit [src] with [O]!")) + visible_message(span_danger("[user] hits [src] with [item]!")) + to_chat(user, span_danger("You hit [src] with [item]!")) + +/obj/item/organ/internal/brain/proc/check_for_repair(obj/item/item, mob/user) + if(damage && item.is_drainable() && item.reagents.has_reagent(/datum/reagent/medicine/mannitol) && (organ_flags & ORGAN_ORGANIC)) //attempt to heal the brain + if(brainmob?.health <= HEALTH_THRESHOLD_DEAD) //if the brain is fucked anyway, do nothing + to_chat(user, span_warning("[src] is far too damaged, there's nothing else we can do for it!")) + return TRUE + + user.visible_message(span_notice("[user] starts to slowly pour the contents of [item] onto [src]."), span_notice("You start to slowly pour the contents of [item] onto [src].")) + if(!do_after(user, 3 SECONDS, src)) + to_chat(user, span_warning("You failed to pour the contents of [item] onto [src]!")) + return TRUE + + user.visible_message(span_notice("[user] pours the contents of [item] onto [src], causing it to reform its original shape and turn a slightly brighter shade of pink."), span_notice("You pour the contents of [item] onto [src], causing it to reform its original shape and turn a slightly brighter shade of pink.")) + var/amount = item.reagents.get_reagent_amount(/datum/reagent/medicine/mannitol) + var/healto = max(0, damage - amount * 2) + item.reagents.remove_all(ROUND_UP(item.reagents.total_volume / amount * (damage - healto) * 0.5)) //only removes however much solution is needed while also taking into account how much of the solution is mannitol + set_organ_damage(healto) //heals 2 damage per unit of mannitol, and by using "set_organ_damage", we clear the failing variable if that was up + return TRUE + return FALSE /obj/item/organ/internal/brain/examine(mob/user) . = ..() if(length(skillchips)) . += span_info("It has a skillchip embedded in it.") + . += brain_damage_examine() + if(brain_size < 1) + . += span_notice("It is a bit on the smaller side...") + if(brain_size > 1) + . += span_notice("It is bigger than average...") + +/// Needed so subtypes can override examine text while still calling parent +/obj/item/organ/internal/brain/proc/brain_damage_examine() if(suicided) - . += span_info("It's started turning slightly grey. They must not have been able to handle the stress of it all.") - return + return span_info("It's started turning slightly grey. They must not have been able to handle the stress of it all.") if(brainmob && (decoy_override || brainmob.client || brainmob.get_ghost())) if(organ_flags & ORGAN_FAILING) - . += span_info("It seems to still have a bit of energy within it, but it's rather damaged... You may be able to restore it with some mannitol.") + return span_info("It seems to still have a bit of energy within it, but it's rather damaged... You may be able to restore it with some mannitol.") else if(damage >= BRAIN_DAMAGE_DEATH*0.5) - . += span_info("You can feel the small spark of life still left in this one, but it's got some bruises. You may be able to restore it with some mannitol.") + return span_info("You can feel the small spark of life still left in this one, but it's got some bruises. You may be able to restore it with some mannitol.") else - . += span_info("You can feel the small spark of life still left in this one.") + return span_info("You can feel the small spark of life still left in this one.") else - . += span_info("This one is completely devoid of life.") + return span_info("This one is completely devoid of life.") /obj/item/organ/internal/brain/attack(mob/living/carbon/C, mob/user) if(!istype(C)) @@ -413,17 +410,24 @@ icon_state = "random_fly_4" organ_traits = list(TRAIT_ADVANCEDTOOLUSER, TRAIT_LITERATE, TRAIT_CAN_STRIP) -/obj/item/organ/internal/brain/lustrous/before_organ_replacement(mob/living/carbon/organ_owner, special) +/obj/item/organ/internal/brain/lustrous/on_mob_remove(mob/living/carbon/organ_owner, special) . = ..() organ_owner.cure_trauma_type(/datum/brain_trauma/special/bluespace_prophet, TRAUMA_RESILIENCE_ABSOLUTE) -/obj/item/organ/internal/brain/lustrous/on_insert(mob/living/carbon/organ_owner, special) +/obj/item/organ/internal/brain/lustrous/on_mob_insert(mob/living/carbon/organ_owner, special) . = ..() organ_owner.gain_trauma(/datum/brain_trauma/special/bluespace_prophet, TRAUMA_RESILIENCE_ABSOLUTE) /obj/item/organ/internal/brain/felinid //A bit smaller than average brain_size = 0.8 +/obj/item/organ/internal/brain/abductor + name = "grey brain" + desc = "A piece of juicy meat found in an ayy lmao's head." + icon_state = "brain-x" + brain_size = 1.3 + organ_traits = list(TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, TRAIT_LITERATE, TRAIT_REMOTE_TASTING) + ////////////////////////////////////TRAUMAS//////////////////////////////////////// /obj/item/organ/internal/brain/proc/has_trauma_type(brain_trauma_type = /datum/brain_trauma, resilience = TRAUMA_RESILIENCE_ABSOLUTE) @@ -569,6 +573,6 @@ /// Brains REALLY like ghosting people. we need special tricks to avoid that, namely removing the old brain with no_id_transfer /obj/item/organ/internal/brain/replace_into(mob/living/carbon/new_owner) var/obj/item/organ/internal/brain/old_brain = new_owner.get_organ_slot(ORGAN_SLOT_BRAIN) - old_brain.Remove(new_owner, special = TRUE, no_id_transfer = TRUE) + old_brain.Remove(new_owner, special = TRUE, movement_flags = NO_ID_TRANSFER) qdel(old_brain) - return Insert(new_owner, special = TRUE, drop_if_replaced = FALSE, no_id_transfer = TRUE) + return Insert(new_owner, special = TRUE, movement_flags = NO_ID_TRANSFER | DELETE_IF_REPLACED) diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm index a2473ce574e78f..f9107f0bb50f16 100644 --- a/code/modules/mob/living/brain/posibrain.dm +++ b/code/modules/mob/living/brain/posibrain.dm @@ -3,7 +3,7 @@ GLOBAL_VAR(posibrain_notify_cooldown) /obj/item/mmi/posibrain name = "positronic brain" desc = "A cube of shining metal, four inches to a side and covered in shallow grooves." - icon = 'icons/obj/assemblies/assemblies.dmi' + icon = 'icons/obj/devices/assemblies.dmi' icon_state = "posibrain" base_icon_state = "posibrain" w_class = WEIGHT_CLASS_NORMAL @@ -43,7 +43,16 @@ GLOBAL_VAR(posibrain_notify_cooldown) ///Notify ghosts that the posibrain is up for grabs /obj/item/mmi/posibrain/proc/ping_ghosts(msg, newlymade) if(newlymade || GLOB.posibrain_notify_cooldown <= world.time) - notify_ghosts("[name] [msg] in [get_area(src)]! [ask_role ? "Personality requested: \[[ask_role]\]" : ""]", ghost_sound = !newlymade ? 'sound/effects/ghost2.ogg':null, notify_volume = 75, source = src, action = NOTIFY_PLAY, flashwindow = FALSE, ignore_key = POLL_IGNORE_POSIBRAIN, notify_suiciders = FALSE) + notify_ghosts( + "[name] [msg] in [get_area(src)]! [ask_role ? "Personality requested: \[[ask_role]\]" : ""]", + source = src, + header = "Ghost in the Machine", + click_interact = TRUE, + ghost_sound = !newlymade ? 'sound/effects/ghost2.ogg':null, + ignore_key = POLL_IGNORE_POSIBRAIN, + notify_flags = (GHOST_NOTIFY_IGNORE_MAPLOAD), + notify_volume = 75, + ) if(!newlymade) GLOB.posibrain_notify_cooldown = world.time + ask_delay @@ -51,7 +60,7 @@ GLOBAL_VAR(posibrain_notify_cooldown) if(!brainmob) set_brainmob(new /mob/living/brain(src)) if(!(GLOB.ghost_role_flags & GHOSTROLE_SILICONS)) - to_chat(user, span_warning("Central Command has temporarily outlawed posibrain sentience in this sector...")) + to_chat(user, span_warning("Conglomeration of Colonists has temporarily outlawed posibrain sentience in this sector...")) if(is_occupied()) to_chat(user, span_warning("This [name] is already active!")) return diff --git a/code/modules/mob/living/carbon/alien/adult/adult.dm b/code/modules/mob/living/carbon/alien/adult/adult.dm index ad8ef8ca877a07..92f3febef2c695 100644 --- a/code/modules/mob/living/carbon/alien/adult/adult.dm +++ b/code/modules/mob/living/carbon/alien/adult/adult.dm @@ -75,10 +75,7 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list( real_name = name /mob/living/carbon/alien/adult/proc/grab(mob/living/carbon/human/target) - if(target.check_block()) - target.visible_message(span_warning("[target] blocks [src]'s grab!"), \ - span_userdanger("You block [src]'s grab!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, src) - to_chat(src, span_warning("Your grab at [target] was blocked!")) + if(target.check_block(src, 0, "[target]'s grab")) return FALSE target.grabbedby(src) return TRUE diff --git a/code/modules/mob/living/carbon/alien/adult/alien_powers.dm b/code/modules/mob/living/carbon/alien/adult/alien_powers.dm index e686c920b586e8..e63926eb44d7a1 100644 --- a/code/modules/mob/living/carbon/alien/adult/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/adult/alien_powers.dm @@ -339,7 +339,11 @@ Doesn't work on other aliens/AI.*/ span_notice("[owner] vomits up a thick purple substance and begins to shape it."), span_notice("You shape a [choice] out of resin."), ) - + //NOVA EDIT START - Roundstart xenohybrid organs + if(build_duration && !do_after(owner, build_duration)) + owner.balloon_alert(owner, "interrupted!") + return + //NOVA EDIT END new choice_path(owner.loc) return TRUE diff --git a/code/modules/mob/living/carbon/alien/adult/caste/drone.dm b/code/modules/mob/living/carbon/alien/adult/caste/drone.dm index 3a1843dd93c23d..ff208baabd2296 100644 --- a/code/modules/mob/living/carbon/alien/adult/caste/drone.dm +++ b/code/modules/mob/living/carbon/alien/adult/caste/drone.dm @@ -6,8 +6,7 @@ icon_state = "aliend" /mob/living/carbon/alien/adult/drone/Initialize(mapload) - var/datum/action/cooldown/alien/evolve_to_praetorian/evolution = new(src) - evolution.Grant(src) + GRANT_ACTION(/datum/action/cooldown/alien/evolve_to_praetorian) return ..() /mob/living/carbon/alien/adult/drone/create_internal_organs() diff --git a/code/modules/mob/living/carbon/alien/adult/caste/hunter.dm b/code/modules/mob/living/carbon/alien/adult/caste/hunter.dm index 3a346bf82551e5..ed39fda2108b68 100644 --- a/code/modules/mob/living/carbon/alien/adult/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/adult/caste/hunter.dm @@ -74,7 +74,7 @@ var/blocked = FALSE if(ishuman(hit_atom)) var/mob/living/carbon/human/H = hit_atom - if(H.check_shields(src, 0, "the [name]", attack_type = LEAP_ATTACK)) + if(H.check_block(src, 0, "the [name]", attack_type = LEAP_ATTACK)) blocked = TRUE if(!blocked) L.visible_message(span_danger("[src] pounces on [L]!"), span_userdanger("[src] pounces on you!")) diff --git a/code/modules/mob/living/carbon/alien/adult/caste/praetorian.dm b/code/modules/mob/living/carbon/alien/adult/caste/praetorian.dm index a26eb31231c034..8fa142a38f05f6 100644 --- a/code/modules/mob/living/carbon/alien/adult/caste/praetorian.dm +++ b/code/modules/mob/living/carbon/alien/adult/caste/praetorian.dm @@ -9,11 +9,12 @@ /mob/living/carbon/alien/adult/royal/praetorian/Initialize(mapload) real_name = name - var/datum/action/cooldown/spell/aoe/repulse/xeno/tail_whip = new(src) - tail_whip.Grant(src) + var/static/list/innate_actions = list( + /datum/action/cooldown/alien/evolve_to_queen, + /datum/action/cooldown/spell/aoe/repulse/xeno, + ) - var/datum/action/cooldown/alien/evolve_to_queen/evolution = new(src) - evolution.Grant(src) + grant_actions_by_list(innate_actions) return ..() diff --git a/code/modules/mob/living/carbon/alien/adult/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/adult/caste/sentinel.dm index 7fffdf35522c76..bef621905f4422 100644 --- a/code/modules/mob/living/carbon/alien/adult/caste/sentinel.dm +++ b/code/modules/mob/living/carbon/alien/adult/caste/sentinel.dm @@ -7,8 +7,7 @@ alien_speed = 0.2 /mob/living/carbon/alien/adult/sentinel/Initialize(mapload) - var/datum/action/cooldown/mob_cooldown/sneak/alien/sneaky_beaky = new(src) - sneaky_beaky.Grant(src) + GRANT_ACTION(/datum/action/cooldown/mob_cooldown/sneak/alien) return ..() /mob/living/carbon/alien/adult/sentinel/create_internal_organs() diff --git a/code/modules/mob/living/carbon/alien/adult/queen.dm b/code/modules/mob/living/carbon/alien/adult/queen.dm index dd8e61b6699fc2..f2093738eac5c5 100644 --- a/code/modules/mob/living/carbon/alien/adult/queen.dm +++ b/code/modules/mob/living/carbon/alien/adult/queen.dm @@ -9,7 +9,6 @@ bubble_icon = "alienroyal" mob_size = MOB_SIZE_LARGE layer = LARGE_MOB_LAYER //above most mobs, but below speechbubbles - plane = GAME_PLANE_UPPER_FOV_HIDDEN pressure_resistance = 200 //Because big, stompy xenos should not be blown around like paper. butcher_results = list(/obj/item/food/meat/slab/xeno = 20, /obj/item/stack/sheet/animalhide/xeno = 3) @@ -23,11 +22,11 @@ /mob/living/carbon/alien/adult/royal/on_lying_down(new_lying_angle) . = ..() - SET_PLANE_IMPLICIT(src, GAME_PLANE_FOV_HIDDEN) //So it won't hide smaller mobs. + layer = LYING_MOB_LAYER /mob/living/carbon/alien/adult/royal/on_standing_up(new_lying_angle) . = ..() - SET_PLANE_IMPLICIT(src, initial(plane)) + layer = initial(layer) /mob/living/carbon/alien/adult/royal/can_inject(mob/user, target_zone, injection_flags) return FALSE @@ -55,11 +54,11 @@ real_name = src.name - var/datum/action/cooldown/spell/aoe/repulse/xeno/tail_whip = new(src) - tail_whip.Grant(src) - - var/datum/action/cooldown/alien/promote/promotion = new(src) - promotion.Grant(src) + var/static/list/innate_actions = list( + /datum/action/cooldown/alien/promote, + /datum/action/cooldown/spell/aoe/repulse/xeno, + ) + grant_actions_by_list(innate_actions) return ..() diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm index 63ef8830435e12..9388dcea560fdc 100644 --- a/code/modules/mob/living/carbon/alien/alien_defense.dm +++ b/code/modules/mob/living/carbon/alien/alien_defense.dm @@ -67,34 +67,6 @@ In all, this is a lot like the monkey code. /N var/obj/item/bodypart/affecting = get_bodypart(get_random_valid_zone(user.zone_selected)) apply_damage(rand(1, 3), BRUTE, affecting) - -/mob/living/carbon/alien/attack_animal(mob/living/simple_animal/user, list/modifiers) - . = ..() - if(.) - var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) - switch(user.melee_damage_type) - if(BRUTE) - adjustBruteLoss(damage) - if(BURN) - adjustFireLoss(damage) - if(TOX) - adjustToxLoss(damage) - if(OXY) - adjustOxyLoss(damage) - if(CLONE) - adjustCloneLoss(damage) - if(STAMINA) - adjustStaminaLoss(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(!. || QDELETED(src)) diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 0b1396520b3218..f4159813ed9bc7 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -31,10 +31,12 @@ //This is fine right now, if we're adding organ specific damage this needs to be updated /mob/living/carbon/alien/larva/Initialize(mapload) - var/datum/action/cooldown/alien/larva_evolve/evolution = new(src) - evolution.Grant(src) - var/datum/action/cooldown/alien/hide/hide = new(src) - hide.Grant(src) + var/static/list/innate_actions = list( + /datum/action/cooldown/alien/hide, + /datum/action/cooldown/alien/larva_evolve, + ) + grant_actions_by_list(innate_actions) + return ..() /mob/living/carbon/alien/larva/create_internal_organs() diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index 2e2674e14e7698..147079ae720c3f 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -3,7 +3,7 @@ /mob/living/carbon/alien/larva/Life(seconds_per_tick = SSMOBS_DT, times_fired) if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return - if(!..() || IS_IN_STASIS(src) || (amount_grown >= max_grown)) + if(!..() || HAS_TRAIT(src, TRAIT_STASIS) || (amount_grown >= max_grown)) return // We're dead, in stasis, or already grown. // GROW! amount_grown = min(amount_grown + (0.5 * seconds_per_tick), max_grown) diff --git a/code/modules/mob/living/carbon/alien/larva/powers.dm b/code/modules/mob/living/carbon/alien/larva/powers.dm index 93937adaeaf848..a74bfc55311344 100644 --- a/code/modules/mob/living/carbon/alien/larva/powers.dm +++ b/code/modules/mob/living/carbon/alien/larva/powers.dm @@ -46,7 +46,7 @@ return TRUE -//SKYRAT EDIT REMOVAL BEGIN - SKYRAT_XENO_REDO - Moved to: modular_skyrat\modules\xenos_skyrat_redo\code\xeno_types\larva.dm +//NOVA EDIT REMOVAL BEGIN - SKYRAT_XENO_REDO - Moved to: modular_nova\modules\xenos_skyrat_redo\code\xeno_types\larva.dm /* /datum/action/cooldown/alien/larva_evolve/Activate(atom/target) var/mob/living/carbon/alien/larva/larva = owner @@ -102,4 +102,4 @@ larva.alien_evolve(new_xeno) return TRUE */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END diff --git a/code/modules/mob/living/carbon/alien/organs.dm b/code/modules/mob/living/carbon/alien/organs.dm index af796c9ff685f7..66f555b639a88e 100644 --- a/code/modules/mob/living/carbon/alien/organs.dm +++ b/code/modules/mob/living/carbon/alien/organs.dm @@ -66,18 +66,17 @@ owner.adjustBruteLoss(-heal_amt * delta_time_capped) owner.adjustFireLoss(-heal_amt * delta_time_capped) owner.adjustOxyLoss(-heal_amt * delta_time_capped) - owner.adjustCloneLoss(-heal_amt * delta_time_capped) else owner.adjustPlasma(0.1 * plasma_rate * delta_time) -/obj/item/organ/internal/alien/plasmavessel/on_insert(mob/living/carbon/organ_owner) +/obj/item/organ/internal/alien/plasmavessel/on_mob_insert(mob/living/carbon/organ_owner) . = ..() if(isalien(organ_owner)) var/mob/living/carbon/alien/target_alien = organ_owner target_alien.updatePlasmaDisplay() RegisterSignal(organ_owner, COMSIG_MOB_GET_STATUS_TAB_ITEMS, PROC_REF(get_status_tab_item)) -/obj/item/organ/internal/alien/plasmavessel/on_remove(mob/living/carbon/organ_owner) +/obj/item/organ/internal/alien/plasmavessel/on_mob_remove(mob/living/carbon/organ_owner) . = ..() if(isalien(organ_owner)) var/mob/living/carbon/alien/organ_owner_alien = organ_owner @@ -96,18 +95,18 @@ zone = BODY_ZONE_HEAD slot = ORGAN_SLOT_XENO_HIVENODE w_class = WEIGHT_CLASS_TINY + organ_traits = list(TRAIT_XENO_IMMUNE) actions_types = list(/datum/action/cooldown/alien/whisper) /// Indicates if the queen died recently, aliens are heavily weakened while this is active. var/recent_queen_death = FALSE -/obj/item/organ/internal/alien/hivenode/on_insert(mob/living/carbon/organ_owner) +/obj/item/organ/internal/alien/hivenode/on_mob_insert(mob/living/carbon/organ_owner) . = ..() organ_owner.faction |= ROLE_ALIEN - ADD_TRAIT(organ_owner, TRAIT_XENO_IMMUNE, ORGAN_TRAIT) -/obj/item/organ/internal/alien/hivenode/Remove(mob/living/carbon/organ_owner, special = FALSE) - organ_owner.faction -= ROLE_ALIEN - REMOVE_TRAIT(organ_owner, TRAIT_XENO_IMMUNE, ORGAN_TRAIT) +/obj/item/organ/internal/alien/hivenode/on_mob_remove(mob/living/carbon/organ_owner, special = FALSE) + if(organ_owner) + organ_owner.faction -= ROLE_ALIEN return ..() //When the alien queen dies, all aliens suffer a penalty as punishment for failing to protect her. @@ -233,11 +232,11 @@ stomach_contents -= source UnregisterSignal(source, list(COMSIG_MOVABLE_MOVED, COMSIG_LIVING_DEATH, COMSIG_QDELETING)) -/obj/item/organ/internal/stomach/alien/Insert(mob/living/carbon/stomach_owner, special = FALSE, drop_if_replaced = TRUE) +/obj/item/organ/internal/stomach/alien/Insert(mob/living/carbon/stomach_owner, special, movement_flags) RegisterSignal(stomach_owner, COMSIG_ATOM_RELAYMOVE, PROC_REF(something_moved)) return ..() -/obj/item/organ/internal/stomach/alien/Remove(mob/living/carbon/stomach_owner, special = FALSE) +/obj/item/organ/internal/stomach/alien/Remove(mob/living/carbon/stomach_owner, special, movement_flags) UnregisterSignal(stomach_owner, COMSIG_ATOM_RELAYMOVE) return ..() 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 19434d888a1f42..3a72dc61dc6fb0 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -133,14 +133,14 @@ if(gib_on_success) new_xeno.visible_message(span_danger("[new_xeno] bursts out of [owner] in a shower of gore!"), span_userdanger("You exit [owner], your previous host."), span_hear("You hear organic matter ripping and tearing!")) - //owner.investigate_log("has been gibbed by an alien larva.", INVESTIGATE_DEATHS) // SKYRAT EDIT REMOVAL - ALIEN QOL - don't ever gib host. + //owner.investigate_log("has been gibbed by an alien larva.", INVESTIGATE_DEATHS) // NOVA EDIT REMOVAL - ALIEN QOL - don't ever gib host. //owner.gib(DROP_ORGANS|DROP_BODYPARTS) - // SKYRAT EDIT ADDITION BEGIN - ALIEN QOL - You aren't getting gibbed but you aren't going to be having fun + // NOVA EDIT ADDITION BEGIN - ALIEN QOL - You aren't getting gibbed but you aren't going to be having fun owner.apply_damage(150, BRUTE, BODY_ZONE_CHEST, wound_bonus = 30, sharpness = SHARP_POINTY) owner.spawn_gibs() owner.cut_overlay(overlay) owner.investigate_log("has been chestbursted.", INVESTIGATE_DEATHS) - // SKYRAT EDIT ADDITION END - ALIEN QOL + // NOVA EDIT ADDITION END - ALIEN QOL else new_xeno.visible_message(span_danger("[new_xeno] wriggles out of [owner]!"), span_userdanger("You exit [owner], your previous host.")) owner.log_message("had an alien larva within them escape (without being gibbed).", LOG_ATTACK, log_globally = FALSE) diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index b68c7d6415a252..72aecd31721c12 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -1,6 +1,6 @@ -//TODO: Make these simple_animals +//TODO: Make these basic mobs #define MIN_IMPREGNATION_TIME 100 //time it takes to impregnate someone #define MAX_IMPREGNATION_TIME 150 @@ -22,12 +22,11 @@ tint = 3 flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH layer = MOB_LAYER - plane = GAME_PLANE_FOV_HIDDEN max_integrity = 100 item_flags = XENOMORPH_HOLDABLE - special_desc_requirement = EXAMINE_CHECK_JOB //SKYRAT EDIT - special_desc_jobs = list("Scientist, Research Director") //SKYRAT EDIT - special_desc = "This alien is an extremely dangerous life form capable of creating a xenomorph. You would know well not to approach without full body biological protection." //SKYRAT EDIT + special_desc_requirement = EXAMINE_CHECK_JOB //NOVA EDIT + special_desc_jobs = list("Scientist, Research Director") //NOVA EDIT + special_desc = "This alien is an extremely dangerous life form capable of creating a xenomorph. You would know well not to approach without full body biological protection." //NOVA EDIT var/stat = CONSCIOUS //UNCONSCIOUS is the idle state in this case var/sterile = FALSE @@ -271,9 +270,9 @@ /obj/item/clothing/mask/facehugger/lamarr name = "Lamarr" desc = "The Research Director's pet, a domesticated and debeaked xenomorph facehugger. Friendly, but may still try to couple with your head." - special_desc_requirement = EXAMINE_CHECK_ROLE //SKYRAT EDIT - special_desc_roles = list("ROLE_ALIEN") //SKYRAT EDIT - special_desc = "This young one has been cruelly mutilated. It lacks the capability to fill a host with our sisters." //SKYRAT EDIT + special_desc_requirement = EXAMINE_CHECK_ROLE //NOVA EDIT + special_desc_roles = list("ROLE_ALIEN") //NOVA EDIT + special_desc = "This young one has been cruelly mutilated. It lacks the capability to fill a host with our sisters." //NOVA EDIT sterile = TRUE /obj/item/clothing/mask/facehugger/dead diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 35dffd7c27ea93..912e95ddfd0b14 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -28,19 +28,16 @@ QDEL_NULL(dna) GLOB.carbon_list -= src -/mob/living/carbon/attackby(obj/item/item, mob/living/user, params) - if(!all_wounds || !(!user.combat_mode || user == src)) - return ..() +/mob/living/carbon/item_tending(mob/living/user, obj/item/tool, list/modifiers) + . = ..() + if(. & ITEM_INTERACT_ANY_BLOCKER) + return . - if(can_perform_surgery(user, params)) - return TRUE + for(var/datum/wound/wound as anything in shuffle(all_wounds)) + if(wound.try_treating(tool, user)) + return ITEM_INTERACT_SUCCESS - for(var/i in shuffle(all_wounds)) - var/datum/wound/wound = i - if(wound.try_treating(item, user)) - return TRUE - - return ..() + return . /mob/living/carbon/CtrlShiftClick(mob/user) ..() @@ -52,7 +49,9 @@ . = ..() var/hurt = TRUE var/extra_speed = 0 - if(throwingdatum.thrower != src) + var/oof_noise = FALSE //We smacked something with denisty, so play a noise + var/mob/thrower = throwingdatum?.get_thrower() + if(thrower != src) extra_speed = min(max(0, throwingdatum.speed - initial(throw_speed)), CARBON_MAX_IMPACT_SPEED_BONUS) if(istype(throwingdatum)) @@ -66,19 +65,40 @@ take_bodypart_damage(5 + 5 * extra_speed, check_armor = TRUE, wound_bonus = extra_speed * 5) else if(!iscarbon(hit_atom) && extra_speed) take_bodypart_damage(5 * extra_speed, check_armor = TRUE, wound_bonus = extra_speed * 5) + visible_message(span_danger("[src] crashes into [hit_atom][extra_speed ? " really hard" : ""]"),\ + span_userdanger("You violently crash into [hit_atom][extra_speed ? " extra hard" : ""]!")) + log_combat(hit_atom, src, "crashes ") + oof_noise = TRUE + if(iscarbon(hit_atom) && hit_atom != src) var/mob/living/carbon/victim = hit_atom + var/blocked = FALSE if(victim.movement_type & FLYING) return - if(hurt) - victim.take_bodypart_damage(10 + 5 * extra_speed, check_armor = TRUE, wound_bonus = extra_speed * 5) - take_bodypart_damage(10 + 5 * extra_speed, check_armor = TRUE, wound_bonus = extra_speed * 5) + if(!hurt) + return + + if(victim.check_block(src, 0, "[name]", LEAP_ATTACK)) + blocked = TRUE + + take_bodypart_damage(10 + 5 * extra_speed, check_armor = TRUE, wound_bonus = extra_speed * 5) + Paralyze(2 SECONDS) + oof_noise = TRUE + + if(blocked) + visible_message(span_danger("[src] crashes into [victim][extra_speed ? " really hard" : ""], but [victim] blocked the worst of it!"),\ + span_userdanger("You violently crash into [victim][extra_speed ? " extra hard" : ""], but [victim] managed to block the worst of it!")) + log_combat(src, victim, "crashed into and was blocked by") + return + else victim.Paralyze(2 SECONDS) - Paralyze(2 SECONDS) + victim.take_bodypart_damage(10 + 5 * extra_speed, check_armor = TRUE, wound_bonus = extra_speed * 5) visible_message(span_danger("[src] crashes into [victim][extra_speed ? " really hard" : ""], knocking them both over!"),\ span_userdanger("You violently crash into [victim][extra_speed ? " extra hard" : ""]!")) + log_combat(src, victim, "crashed into") + + if(oof_noise) playsound(src,'sound/weapons/punch1.ogg',50,TRUE) - log_combat(src, victim, "crashed into") //Throwing stuff /mob/living/carbon/proc/toggle_throw_mode() @@ -121,6 +141,7 @@ if(prob(0.5)) verb_text = "yeet" var/neckgrab_throw = FALSE // we can't check for if it's a neckgrab throw when totaling up power_throw since we've already stopped pulling them by then, so get it early + var/frequency_number = 1 //We assign a default frequency number for the sound of the throw. if(!held_item) if(pulling && isliving(pulling) && grab_state >= GRAB_AGGRESSIVE) var/mob/living/throwable_mob = pulling @@ -148,23 +169,34 @@ power_throw-- if(HAS_TRAIT(thrown_thing, TRAIT_DWARF)) power_throw++ - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(HAS_TRAIT(src, TRAIT_OVERSIZED)) power_throw++ if(HAS_TRAIT(thrown_thing, TRAIT_OVERSIZED)) power_throw-- - //SKYRAT EDIT END + //NOVA EDIT END if(neckgrab_throw) power_throw++ if(isitem(thrown_thing)) var/obj/item/thrown_item = thrown_thing + frequency_number = 1-(thrown_item.w_class-3)/8 //At normal weight, the frequency is at 1. For tiny, it is 1.25. For huge, it is 0.75. if(thrown_item.throw_verb) verb_text = thrown_item.throw_verb - do_attack_animation(target, no_effect = 1) //SKYRAT EDIT ADDITION - AESTHETICS - playsound(loc, 'sound/weapons/punchmiss.ogg', 50, TRUE, -1) //SKYRAT EDIT ADDITION - AESTHETICS - visible_message(span_danger("[src] [verb_text][plural_s(verb_text)] [thrown_thing][power_throw ? " really hard!" : "."]"), \ - span_danger("You [verb_text] [thrown_thing][power_throw ? " really hard!" : "."]")) - log_message("has thrown [thrown_thing] [power_throw > 0 ? "really hard" : ""]", LOG_ATTACK) + do_attack_animation(target, no_effect = 1) + var/sound/throwsound = 'sound/weapons/throw.ogg' + var/power_throw_text = "." + if(power_throw > 0) //If we have anything that boosts our throw power like hulk, we use the rougher heavier variant. + throwsound = 'sound/weapons/throwhard.ogg' + power_throw_text = " really hard!" + if(power_throw < 0) //if we have anything that weakens our throw power like dward, we use a slower variant. + throwsound = 'sound/weapons/throwsoft.ogg' + power_throw_text = " flimsily." + frequency_number = frequency_number + (rand(-5,5)/100); //Adds a bit of randomness in the frequency to not sound exactly the same. + //The volume of the sound takes the minimum between the distance thrown or the max range an item, but no more than 50. Short throws are quieter. A fast throwing speed also makes the noise sharper. + playsound(src, throwsound, min(8*min(get_dist(loc,target),thrown_thing.throw_range), 50), vary = TRUE, extrarange = -1, frequency = frequency_number) + visible_message(span_danger("[src] [verb_text][plural_s(verb_text)] [thrown_thing][power_throw_text]"), \ + span_danger("You [verb_text] [thrown_thing][power_throw_text]")) + log_message("has thrown [thrown_thing] [power_throw_text]", LOG_ATTACK) var/extra_throw_range = HAS_TRAIT(src, TRAIT_THROWINGARM) ? 2 : 0 newtonian_move(get_dir(target, src)) thrown_thing.safe_throw_at(target, thrown_thing.throw_range + extra_throw_range, max(1,thrown_thing.throw_speed + power_throw), src, null, null, null, move_force) @@ -228,16 +260,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 @@ -259,6 +282,8 @@ /mob/living/carbon/proc/cuff_resist(obj/item/I, breakouttime = 1 MINUTES, cuff_break = 0) + if((cuff_break != INSTANT_CUFFBREAK) && (SEND_SIGNAL(src, COMSIG_MOB_REMOVING_CUFFS, I) & COMSIG_MOB_BLOCK_CUFF_REMOVAL)) + return //The blocking object should sent a fluff-appropriate to_chat about cuff removal being blocked if(I.item_flags & BEING_REMOVED) to_chat(src, span_warning("You're already attempting to remove [I]!")) return @@ -512,7 +537,7 @@ var/obj/item/bodypart/BP = X total_brute += (BP.brute_dam * BP.body_damage_coeff) total_burn += (BP.burn_dam * BP.body_damage_coeff) - set_health(round(maxHealth - getOxyLoss() - getToxLoss() - getCloneLoss() - total_burn - total_brute, DAMAGE_PRECISION)) + set_health(round(maxHealth - getOxyLoss() - getToxLoss() - total_burn - total_brute, DAMAGE_PRECISION)) update_stat() update_stamina() if(((maxHealth - total_burn) < HEALTH_THRESHOLD_DEAD*2) && stat == DEAD ) @@ -792,7 +817,6 @@ if(hud_used?.spacesuit) hud_used.spacesuit.icon_state = "spacesuit_[cell_state]" - /mob/living/carbon/set_health(new_value) . = ..() if(. > hardcrit_threshold) @@ -912,18 +936,18 @@ /mob/living/carbon/can_be_revived() if(!get_organ_by_type(/obj/item/organ/internal/brain) && (!mind || !mind.has_antag_datum(/datum/antagonist/changeling)) || HAS_TRAIT(src, TRAIT_HUSK)) return FALSE -//SKYRAT EDIT ADDITION - DNR TRAIT +//NOVA EDIT ADDITION - DNR TRAIT if(HAS_TRAIT(src, TRAIT_DNR)) return FALSE -//SKYRAT EDIT ADDITION END - DNR TRAIT +//NOVA EDIT ADDITION END - DNR TRAIT return ..() /mob/living/carbon/proc/can_defib() -//SKYRAT EDIT ADDITION - DNR TRAIT +//NOVA EDIT ADDITION - DNR TRAIT if(HAS_TRAIT(src, TRAIT_DNR)) //This is also added when a ghost DNR's! return DEFIB_FAIL_DNR -//SKYRAT EDIT ADDITION END - DNR TRAIT +//NOVA EDIT ADDITION END - DNR TRAIT if (HAS_TRAIT(src, TRAIT_SUICIDED)) return DEFIB_FAIL_SUICIDE @@ -962,6 +986,9 @@ return DEFIB_POSSIBLE +/mob/living/carbon/proc/can_defib_client() + return (client || get_ghost(FALSE, FALSE)) && (can_defib() & DEFIB_REVIVABLE_STATES) // NOVA EDIT - ORIGINAL: return (client || get_ghost(FALSE, TRUE)) && (can_defib() & DEFIB_REVIVABLE_STATES) + /mob/living/carbon/harvest(mob/living/user) if(QDELETED(src)) return @@ -983,7 +1010,6 @@ for(var/obj/item/bodypart/bodypart_path as anything in bodyparts_paths) var/real_body_part_path = overrides?[initial(bodypart_path.body_zone)] || bodypart_path var/obj/item/bodypart/bodypart_instance = new real_body_part_path() - bodypart_instance.set_owner(src) add_bodypart(bodypart_instance) /// Called when a new hand is added @@ -1000,8 +1026,12 @@ /mob/living/carbon/proc/add_bodypart(obj/item/bodypart/new_bodypart) SHOULD_NOT_OVERRIDE(TRUE) + new_bodypart.on_adding(src) bodyparts += new_bodypart - new_bodypart.set_owner(src) + new_bodypart.update_owner(src) + + for(var/obj/item/organ/organ in new_bodypart) + organ.mob_insert(src) switch(new_bodypart.body_part) if(LEG_LEFT, LEG_RIGHT) @@ -1016,10 +1046,17 @@ synchronize_bodytypes() ///Proc to hook behavior on bodypart removals. Do not directly call. You're looking for [/obj/item/bodypart/proc/drop_limb()]. -/mob/living/carbon/proc/remove_bodypart(obj/item/bodypart/old_bodypart) +/mob/living/carbon/proc/remove_bodypart(obj/item/bodypart/old_bodypart, special) SHOULD_NOT_OVERRIDE(TRUE) - old_bodypart.on_removal() + if(special) + for(var/obj/item/organ/organ in old_bodypart) + organ.bodypart_remove(limb_owner = src, movement_flags = NO_ID_TRANSFER) + else + for(var/obj/item/organ/organ in old_bodypart) + organ.mob_remove(src, special) + + old_bodypart.on_removal(src) bodyparts -= old_bodypart switch(old_bodypart.body_part) @@ -1051,7 +1088,6 @@ /mob/living/carbon/vv_get_dropdown() . = ..() VV_DROPDOWN_OPTION("", "---------") - VV_DROPDOWN_OPTION(VV_HK_MAKE_AI, "Make AI") VV_DROPDOWN_OPTION(VV_HK_MODIFY_BODYPART, "Modify bodypart") VV_DROPDOWN_OPTION(VV_HK_MODIFY_ORGANS, "Modify organs") VV_DROPDOWN_OPTION(VV_HK_MARTIAL_ART, "Give Martial Arts") @@ -1060,6 +1096,10 @@ /mob/living/carbon/vv_do_topic(list/href_list) . = ..() + + if(!.) + return + if(href_list[VV_HK_MODIFY_BODYPART]) if(!check_rights(R_SPAWN)) return @@ -1101,7 +1141,6 @@ if("replace") var/limb2add = input(usr, "Select a bodypart type to add", "Add/Replace Bodypart") as null|anything in sort_list(limbtypes) var/obj/item/bodypart/new_bp = new limb2add() - if(new_bp.replace_limb(src, special = TRUE)) admin_ticket_log("key_name_admin(usr)] has replaced [src]'s [BP.type] with [new_bp.type]") qdel(BP) @@ -1109,16 +1148,11 @@ to_chat(usr, "Failed to replace bodypart! They might be incompatible.") admin_ticket_log("[key_name_admin(usr)] has attempted to modify the bodyparts of [src]") - if(href_list[VV_HK_MAKE_AI]) - if(!check_rights(R_SPAWN)) - return - if(tgui_alert(usr,"Confirm mob type change?",,list("Transform","Cancel")) != "Transform") - return - usr.client.holder.Topic("vv_override", list("makeai"=href_list[VV_HK_TARGET])) if(href_list[VV_HK_MODIFY_ORGANS]) if(!check_rights(NONE)) return usr.client.manipulate_organs(src) + if(href_list[VV_HK_MARTIAL_ART]) if(!check_rights(NONE)) return @@ -1139,6 +1173,7 @@ MA.teach(src) log_admin("[key_name(usr)] has taught [MA] to [key_name(src)].") message_admins(span_notice("[key_name_admin(usr)] has taught [MA] to [key_name_admin(src)].")) + if(href_list[VV_HK_GIVE_TRAUMA]) if(!check_rights(NONE)) return @@ -1155,6 +1190,7 @@ if(BT) log_admin("[key_name(usr)] has traumatized [key_name(src)] with [BT.name]") message_admins(span_notice("[key_name_admin(usr)] has traumatized [key_name_admin(src)] with [BT.name].")) + if(href_list[VV_HK_CURE_TRAUMA]) if(!check_rights(NONE)) return @@ -1325,14 +1361,14 @@ /// Special carbon interaction on lying down, to transform its sprite by a rotation. /mob/living/carbon/proc/lying_angle_on_lying_down(new_lying_angle) if(!new_lying_angle) - //SKYRAT EDIT ADDITION BEGIN + //NOVA EDIT ADDITION BEGIN if(dir == WEST) set_lying_angle(270) return else if(dir == EAST) set_lying_angle(90) return - //SKYRAT EDIT END + //NOVA EDIT END set_lying_angle(pick(90, 270)) else set_lying_angle(new_lying_angle) @@ -1426,3 +1462,8 @@ our_splatter.blood_dna_info = get_blood_dna_list() var/turf/targ = get_ranged_target_turf(src, splatter_direction, splatter_strength) our_splatter.fly_towards(targ, splatter_strength) + +/mob/living/carbon/dropItemToGround(obj/item/item, force = FALSE, silent = FALSE, invdrop = TRUE) + if(item && ((item in organs) || (item in bodyparts))) //let's not do this, aight? + return FALSE + return ..() diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index fb75bfa02346a3..e2a28e025dca5e 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -92,49 +92,16 @@ return TRUE return ..() - -/mob/living/carbon/attacked_by(obj/item/I, mob/living/user) - var/obj/item/bodypart/affecting - if(user == src) - affecting = get_bodypart(check_zone(user.zone_selected)) //we're self-mutilating! yay! - else - var/zone_hit_chance = 80 - if(body_position == LYING_DOWN) // half as likely to hit a different zone if they're on the ground - zone_hit_chance += 10 - affecting = get_bodypart(get_random_valid_zone(user.zone_selected, zone_hit_chance)) - if(!affecting) //missing limb? we select the first bodypart (you can never have zero, because of chest) - affecting = bodyparts[1] - SEND_SIGNAL(I, COMSIG_ITEM_ATTACK_ZONE, src, user, affecting) - send_item_attack_message(I, user, affecting.plaintext_zone, affecting) - if(I.force) - var/attack_direction = get_dir(user, src) - apply_damage(I.force, I.damtype, affecting, wound_bonus = I.wound_bonus, bare_wound_bonus = I.bare_wound_bonus, sharpness = I.get_sharpness(), attack_direction = attack_direction, attacking_item = I) - if(I.damtype == BRUTE && affecting.can_bleed()) - if(prob(33)) - I.add_mob_blood(src) - var/turf/location = get_turf(src) - add_splatter_floor(location) - if(get_dist(user, src) <= 1) //people with TK won't get smeared with blood - user.add_mob_blood(src) - if(affecting.body_zone == BODY_ZONE_HEAD) - if(wear_mask) - wear_mask.add_mob_blood(src) - update_worn_mask() - if(wear_neck) - wear_neck.add_mob_blood(src) - update_worn_neck() - if(head) - head.add_mob_blood(src) - update_worn_head() - - return TRUE //successful attack - -/mob/living/carbon/send_item_attack_message(obj/item/I, mob/living/user, hit_area, obj/item/bodypart/hit_bodypart) +/mob/living/carbon/send_item_attack_message(obj/item/I, mob/living/user, hit_area, def_zone) if(!I.force && !length(I.attack_verb_simple) && !length(I.attack_verb_continuous)) return + var/obj/item/bodypart/hit_bodypart = get_bodypart(def_zone) + if(isnull(hit_bodypart)) // ?? + return ..() + var/message_verb_continuous = length(I.attack_verb_continuous) ? "[pick(I.attack_verb_continuous)]" : "attacks" var/message_verb_simple = length(I.attack_verb_simple) ? "[pick(I.attack_verb_simple)]" : "attack" - //SKYRAT EDIT ADDITION BEGIN + //NOVA EDIT ADDITION BEGIN if(I.force && !user.combat_mode && !length(I.attack_verb_simple) && !length(I.attack_verb_continuous)) var/random = rand(1,2) switch(random) @@ -144,7 +111,7 @@ if(2) message_verb_continuous = "maims" message_verb_simple = "maim" - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END var/extra_wound_details = "" @@ -248,29 +215,18 @@ ForceContractDisease(D) return TRUE +/** + * Really weird proc that attempts to dismebmer the passed zone if it is at max damage + * Unless the attacker is an NPC, in which case it disregards the zone and picks a random one + * + * Cannot dismember heads + * + * Returns a falsy value (null) on success, and a truthy value (the hit zone) on failure + */ +/mob/living/proc/dismembering_strike(mob/living/attacker, dam_zone) + return dam_zone -/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) +/mob/living/carbon/dismembering_strike(mob/living/attacker, dam_zone) if(!attacker.limb_destroyer) return dam_zone var/obj/item/bodypart/affecting @@ -278,18 +234,17 @@ affecting = get_bodypart(get_random_valid_zone(dam_zone)) else var/list/things_to_ruin = shuffle(bodyparts.Copy()) - for(var/B in things_to_ruin) - var/obj/item/bodypart/bodypart = B + for(var/obj/item/bodypart/bodypart as anything in things_to_ruin) if(bodypart.body_zone == BODY_ZONE_HEAD || bodypart.body_zone == BODY_ZONE_CHEST) continue if(!affecting || ((affecting.get_damage() / affecting.max_damage) < (bodypart.get_damage() / bodypart.max_damage))) affecting = bodypart + if(affecting) dam_zone = affecting.body_zone - if(affecting.get_damage() >= affecting.max_damage) - affecting.dismember() + if(affecting.get_damage() >= affecting.max_damage && affecting.dismember()) return null - return affecting.body_zone + return dam_zone /** @@ -308,7 +263,7 @@ "You hear a slap.") target.dna?.species?.stop_wagging_tail(target) return - //SKYRAT EDIT ADDITION BEGIN - EMOTES + //NOVA EDIT ADDITION BEGIN - EMOTES if(zone_selected == BODY_ZONE_PRECISE_GROIN && target.dir == src.dir) if(HAS_TRAIT(target, TRAIT_PERSONALSPACE) && (target.stat != UNCONSCIOUS) && (!target.handcuffed)) //You need to be conscious and uncuffed to use Personal Space if(target.combat_mode && (!HAS_TRAIT(target, TRAIT_PACIFISM))) //Being pacified prevents violent counters @@ -336,7 +291,7 @@ "You hear a slap.", ignored_mobs = list(target)) to_chat(target, "[src] slaps your ass!") return - //SKYRAT EDIT END + //NOVA EDIT END do_attack_animation(target, ATTACK_EFFECT_DISARM) playsound(target, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) if (ishuman(target)) @@ -406,20 +361,14 @@ if(!is_type_in_typecache(target_held_item, GLOB.shove_disarming_types)) //It's too expensive we'll get caught target_held_item = null - if(!target.has_movespeed_modifier(/datum/movespeed_modifier/shove)) - target.add_movespeed_modifier(/datum/movespeed_modifier/shove) - if(target_held_item) - append_message = "loosening [target.p_their()] grip on [target_held_item]" - target.visible_message(span_danger("[target.name]'s grip on \the [target_held_item] loosens!"), //He's already out what are you doing - span_warning("Your grip on \the [target_held_item] loosens!"), null, COMBAT_MESSAGE_RANGE) - addtimer(CALLBACK(target, TYPE_PROC_REF(/mob/living/carbon, clear_shove_slowdown)), SHOVE_SLOWDOWN_LENGTH) - - else if(target_held_item) + if(target_held_item && target.get_timed_status_effect_duration(/datum/status_effect/staggered)) target.dropItemToGround(target_held_item) append_message = "causing [target.p_them()] to drop [target_held_item]" target.visible_message(span_danger("[target.name] drops \the [target_held_item]!"), span_warning("You drop \the [target_held_item]!"), null, COMBAT_MESSAGE_RANGE) + target.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH, 10 SECONDS) + log_combat(src, target, "shoved", append_message) /mob/living/carbon/proc/is_shove_knockdown_blocked() //If you want to add more things that block shove knockdown, extend this @@ -428,12 +377,6 @@ return TRUE return FALSE -/mob/living/carbon/proc/clear_shove_slowdown() - remove_movespeed_modifier(/datum/movespeed_modifier/shove) - var/active_item = get_active_held_item() - if(is_type_in_typecache(active_item, GLOB.shove_disarming_types)) - visible_message(span_warning("[name] regains their grip on \the [active_item]!"), span_warning("You regain your grip on \the [active_item]"), null, COMBAT_MESSAGE_RANGE) - /mob/living/carbon/blob_act(obj/structure/blob/B) if (stat == DEAD) return @@ -479,7 +422,7 @@ var/immediately_stun = should_stun && !(flags & SHOCK_DELAY_STUN) if (immediately_stun) if (paralyze) - StaminaKnockdown(stun_duration / 4) // SKYRAT EDIT CHANGE - ORIGINAL: Paralyze(40) + StaminaKnockdown(stun_duration / 4) // NOVA EDIT CHANGE - ORIGINAL: Paralyze(40) else Knockdown(stun_duration) //Jitter and other fluff. @@ -493,12 +436,12 @@ ///Called slightly after electrocute act to apply a secondary stun. /mob/living/carbon/proc/secondary_shock(paralyze, stun_duration) if (paralyze) - StaminaKnockdown(stun_duration / 6) // SKYRAT EDIT CHANGE - ORIGINAL: Paralyze(60) + StaminaKnockdown(stun_duration / 6) // NOVA EDIT CHANGE - ORIGINAL: Paralyze(60) else Knockdown(stun_duration) /mob/living/carbon/proc/help_shake_act(mob/living/carbon/helper) - var/nosound = FALSE //SKYRAT EDIT ADDITION - EMOTES + var/nosound = FALSE //NOVA EDIT ADDITION - EMOTES if(on_fire) to_chat(helper, span_warning("You can't put [p_them()] out with just your bare hands!")) return @@ -518,22 +461,29 @@ 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!")) - //SKYRAT EDIT ADDITION BEGIN - EMOTES -- SENSITIVE SNOUT TRAIT ADDITION + //NOVA EDIT ADDITION BEGIN - EMOTES -- SENSITIVE SNOUT TRAIT ADDITION else if(helper.zone_selected == BODY_ZONE_PRECISE_MOUTH) nosound = TRUE - playsound(src, 'modular_skyrat/modules/emotes/sound/emotes/Nose_boop.ogg', 50, 0) - if(HAS_TRAIT(src, TRAIT_SENSITIVESNOUT) && get_location_accessible(src, BODY_ZONE_PRECISE_MOUTH)) - to_chat(src, span_warning("[helper] boops you on your sensitive nose, sending you to the ground!")) - src.Knockdown(20) - src.apply_damage(30, STAMINA) - helper.visible_message(span_notice("[helper] boops [src]'s nose."), span_notice("You boop [src] on the nose.")) - //SKYRAT EDIT ADDITION END + if(HAS_TRAIT(src, TRAIT_QUICKREFLEXES) && (src.stat != UNCONSCIOUS) && !src.incapacitated(IGNORE_RESTRAINTS)) + visible_message(span_warning("[helper] tries to boop [src] on the nose, but [p_they()] move[p_s()] out of the way.")) + return + else + playsound(src, 'modular_nova/modules/emotes/sound/emotes/Nose_boop.ogg', 50, 0) + if(HAS_TRAIT(src, TRAIT_SENSITIVESNOUT) && get_location_accessible(src, BODY_ZONE_PRECISE_MOUTH)) + to_chat(src, span_warning("[helper] boops you on your sensitive nose, sending you to the ground!")) + src.Knockdown(20) + src.apply_damage(30, STAMINA) + helper.visible_message(span_notice("[helper] boops [src]'s nose."), span_notice("You boop [src] on the nose.")) + //NOVA EDIT ADDITION END else if(check_zone(helper.zone_selected) == BODY_ZONE_HEAD && get_bodypart(BODY_ZONE_HEAD)) //Headpats! - //SKYRAT EDIT ADDITION BEGIN - OVERSIZED HEADPATS + //NOVA EDIT ADDITION BEGIN - OVERSIZED & DISALLOWED HEADPATS if(HAS_TRAIT(src, TRAIT_OVERSIZED) && !HAS_TRAIT(helper, TRAIT_OVERSIZED)) visible_message(span_warning("[helper] tries to pat [src] on the head, but can't reach!")) return - //SKYRAT EDIT ADDITION END + else if(HAS_TRAIT(src, TRAIT_QUICKREFLEXES) && (src.stat != UNCONSCIOUS) && !src.incapacitated(IGNORE_RESTRAINTS)) + visible_message(span_warning("[helper] tries to pat [src] on the head, but [p_they()] move[p_s()] out of the way.")) + return + //NOVA EDIT ADDITION END 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)) to_chat(helper, span_notice("You give [src] a pat on the head to make [p_them()] feel better!")) @@ -541,12 +491,12 @@ if(HAS_TRAIT(src, TRAIT_BADTOUCH)) to_chat(helper, span_warning("[src] looks visibly upset as you pat [p_them()] on the head.")) - //SKYRAT EDIT ADDITION BEGIN - EMOTES + //NOVA EDIT ADDITION BEGIN - EMOTES if(HAS_TRAIT(src, TRAIT_EXCITABLE)) var/obj/item/organ/external/tail/src_tail = get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) if(src_tail && !(src_tail.wag_flags & WAG_WAGGING)) emote("wag") - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END else if ((helper.zone_selected == BODY_ZONE_PRECISE_GROIN) && !isnull(src.get_organ_by_type(/obj/item/organ/external/tail))) helper.visible_message(span_notice("[helper] pulls on [src]'s tail!"), \ @@ -576,6 +526,11 @@ to_chat(helper, span_notice("You wrap [src] into a tight bear hug!")) to_chat(src, span_notice("[helper] squeezes you super tightly in a firm bear hug!")) else + // NOVA EDIT ADDITION START + if (HAS_TRAIT(src, TRAIT_QUICKREFLEXES) && (src.stat != UNCONSCIOUS) && !src.incapacitated(IGNORE_RESTRAINTS)) + visible_message(span_warning("[helper] tries to hug [src], but [p_they()] move[p_s()] out of the way.")) + return + // NOVA EDIT ADDITION END helper.visible_message(span_notice("[helper] hugs [src] to make [p_them()] feel better!"), \ null, span_hear("You hear the rustling of clothes."), DEFAULT_MESSAGE_RANGE, list(helper, src)) to_chat(helper, span_notice("You hug [src] to make [p_them()] feel better!")) @@ -628,7 +583,7 @@ if(body_position != STANDING_UP && !resting && !buckled && !HAS_TRAIT(src, TRAIT_FLOORED)) get_up(TRUE) - if(!nosound) //SKYRAT EDIT ADDITION - EMOTES + if(!nosound) //NOVA EDIT ADDITION - EMOTES playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) // Shake animation @@ -821,7 +776,7 @@ QDEL_NULL(grasp) return grasp.grasp_limb(grasped_part) - */ // SKYRAT EDIT REMOVAL - MODULARIZED INTO grasp.dm's self_grasp_bleeding_limb !! IF THIS PROC IS UPDATED, PUT IT IN THERE !! + */ // NOVA EDIT REMOVAL - MODULARIZED INTO grasp.dm's self_grasp_bleeding_limb !! IF THIS PROC IS UPDATED, PUT IT IN THERE !! self_grasp_bleeding_limb(grasped_part, supress_message) /// If TRUE, the owner of this bodypart can try grabbing it to slow bleeding, as well as various other effects. diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index e5f43c2e933111..38571bccdb17ac 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -2,7 +2,7 @@ blood_volume = BLOOD_VOLUME_NORMAL gender = MALE pressure_resistance = 15 - hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,GLAND_HUD, DNR_HUD) // SKYRAT EDIT ADDITION - DNR ICON + hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,GLAND_HUD, DNR_HUD) // NOVA EDIT ADDITION - DNR ICON has_limbs = TRUE held_items = list(null, null) num_legs = 0 //Populated on init through list/bodyparts @@ -15,8 +15,6 @@ 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 - var/dreaming = 0 ///Whether or not the mob is handcuffed var/obj/item/handcuffed = null @@ -125,4 +123,4 @@ COOLDOWN_DECLARE(bleeding_message_cd) - var/next_smell = 0 //SKYRAT EDIT ADDITION /// Cooldown for the next smell + var/next_smell = 0 //NOVA EDIT ADDITION /// Cooldown for the next smell diff --git a/code/modules/mob/living/carbon/carbon_movement.dm b/code/modules/mob/living/carbon/carbon_movement.dm index 82bda7c7cd4851..d900706f102ac0 100644 --- a/code/modules/mob/living/carbon/carbon_movement.dm +++ b/code/modules/mob/living/carbon/carbon_movement.dm @@ -1,5 +1,5 @@ /mob/living/carbon/slip(knockdown_amount, obj/slipped_on, lube_flags, paralyze, force_drop = FALSE) - if(movement_type & (FLYING | FLOATING)) + if(movement_type & MOVETYPES_NOT_TOUCHING_GROUND) return FALSE if(!(lube_flags & SLIDE_ICE)) log_combat(src, (slipped_on || get_turf(src)), "slipped on the", null, ((lube_flags & SLIDE) ? "(SLIDING)" : null)) diff --git a/code/modules/mob/living/carbon/carbon_update_icons.dm b/code/modules/mob/living/carbon/carbon_update_icons.dm index d4fa006957e717..bb67d5a963593e 100644 --- a/code/modules/mob/living/carbon/carbon_update_icons.dm +++ b/code/modules/mob/living/carbon/carbon_update_icons.dm @@ -85,8 +85,8 @@ SEND_SIGNAL(src, COMSIG_CARBON_REMOVE_OVERLAY, cache_index, I) //used when putting/removing clothes that hide certain mutant body parts to just update those and not update the whole body. -/mob/living/carbon/human/proc/update_mutant_bodyparts(force_update = FALSE) // SKYRAT EDIT CHANGE - dna?.species.handle_mutant_bodyparts(src, force_update = force_update) // SKYRAT EDIT CHANGE +/mob/living/carbon/human/proc/update_mutant_bodyparts(force_update = FALSE) // NOVA EDIT CHANGE + dna?.species.handle_mutant_bodyparts(src, force_update = force_update) // NOVA EDIT CHANGE update_body_parts() /mob/living/carbon/update_body(is_creating = FALSE) @@ -364,7 +364,7 @@ apply_overlay(WOUND_LAYER) -//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular) +//NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular) /* /mob/living/carbon/update_worn_mask() remove_overlay(FACEMASK_LAYER) @@ -397,9 +397,9 @@ apply_overlay(NECK_LAYER) */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END -//SKYRAT EDIT REMOVAL BEGIN - TESHARI CLOTHES (moved to modular) +//NOVA EDIT REMOVAL BEGIN - TESHARI CLOTHES (moved to modular) /* /mob/living/carbon/update_worn_back() remove_overlay(BACK_LAYER) @@ -414,9 +414,9 @@ apply_overlay(BACK_LAYER) */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END -//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular) +//NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular) /* /mob/living/carbon/update_worn_head() remove_overlay(HEAD_LAYER) @@ -434,12 +434,12 @@ apply_overlay(HEAD_LAYER) */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END /mob/living/carbon/update_worn_handcuffs() remove_overlay(HANDCUFF_LAYER) - if(handcuffed && !(handcuffed.item_flags & ABSTRACT)) //SKYRAT EDIT ADDED !(handcuffed.item_flags & ABSTRACT) + if(handcuffed && !(handcuffed.item_flags & ABSTRACT)) //NOVA EDIT ADDED !(handcuffed.item_flags & ABSTRACT) var/mutable_appearance/handcuff_overlay = mutable_appearance('icons/mob/simple/mob.dmi', "handcuff1", -HANDCUFF_LAYER) if(handcuffed.blocks_emissive != EMISSIVE_BLOCK_NONE) handcuff_overlay.overlays += emissive_blocker(handcuff_overlay.icon, handcuff_overlay.icon_state, src, alpha = handcuff_overlay.alpha) @@ -477,10 +477,10 @@ //Overlays for the worn overlay so you can overlay while you overlay //eg: ammo counters, primed grenade flashing, etc. //"icon_file" is used automatically for inhands etc. to make sure it gets the right inhand file -// SKYRAT EDIT CHANGE BEGIN - CUSTOMIZATION +// NOVA EDIT CHANGE BEGIN - CUSTOMIZATION // obj/item/proc/worn_overlays(mutable_appearance/standing, isinhands = FALSE, icon_file) - original /obj/item/proc/worn_overlays(mutable_appearance/standing, isinhands = FALSE, icon_file, mutant_styles = NONE) -// SKYRAT EDIT CHANGE END +// NOVA EDIT CHANGE END SHOULD_CALL_PARENT(TRUE) RETURN_TYPE(/list) diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm index 6ecc62b04981d9..30ff21ccc39894 100644 --- a/code/modules/mob/living/carbon/damage_procs.dm +++ b/code/modules/mob/living/carbon/damage_procs.dm @@ -28,6 +28,12 @@ return . +/mob/living/carbon/human/get_damage_mod(damage_type) + if (!dna?.species?.damage_modifier) + return ..() + var/species_mod = (100 - dna.species.damage_modifier) / 100 + return ..() * species_mod + /mob/living/carbon/human/apply_damage( damage = 0, damagetype = BRUTE, @@ -66,8 +72,6 @@ final_mod *= physiology.tox_mod if(OXY) final_mod *= physiology.oxy_mod - if(CLONE) - final_mod *= physiology.clone_mod if(STAMINA) final_mod *= physiology.stamina_mod if(BRAIN) @@ -223,7 +227,7 @@ ///Returns a list of bodyparts with wounds (in case someone has a wound on an otherwise fully healed limb) -/mob/living/carbon/proc/get_wounded_bodyparts(brute = FALSE, burn = FALSE, required_bodytype) +/mob/living/carbon/proc/get_wounded_bodyparts(required_bodytype) var/list/obj/item/bodypart/parts = list() for(var/X in bodyparts) var/obj/item/bodypart/BP = X diff --git a/code/modules/mob/living/carbon/death.dm b/code/modules/mob/living/carbon/death.dm index 78b8554361b033..85a6b06a2d3406 100644 --- a/code/modules/mob/living/carbon/death.dm +++ b/code/modules/mob/living/carbon/death.dm @@ -28,9 +28,9 @@ add_memory_in_range(src, 7, /datum/memory/witness_gib, protagonist = src) if(drop_bitflags & DROP_ITEMS) for(var/obj/item/W in src) - dropItemToGround(W) - if(prob(50)) - step(W, pick(GLOB.alldirs)) + if(dropItemToGround(W)) + if(prob(50)) + step(W, pick(GLOB.alldirs)) var/atom/Tsec = drop_location() for(var/mob/M in src) M.forceMove(Tsec) diff --git a/code/modules/mob/living/carbon/emote.dm b/code/modules/mob/living/carbon/emote.dm index 10005fd1601326..8ac09dd5bb8079 100644 --- a/code/modules/mob/living/carbon/emote.dm +++ b/code/modules/mob/living/carbon/emote.dm @@ -13,9 +13,10 @@ /datum/emote/living/carbon/blink_r key = "blink_r" + name = "blink (Rapid)" message = "blinks rapidly." -//SKYRAT EDIT REMOVAL BEGIN - EMOTES - (Moved to modular_skyrat/modules/emotes/code/emotes.dm as /datum/emote/living/clap) +//NOVA EDIT REMOVAL BEGIN - EMOTES - (Moved to modular_nova/modules/emotes/code/emotes.dm as /datum/emote/living/clap) /* /datum/emote/living/carbon/clap key = "clap" @@ -37,7 +38,7 @@ 'sound/misc/clap3.ogg', 'sound/misc/clap4.ogg') */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END /datum/emote/living/carbon/crack key = "crack" diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index 75a31925c33388..39759daae71ac4 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -6,7 +6,7 @@ var/t_has = p_have() var/t_is = p_are() - . = list("This is [icon2html(src, user)] \a [src]!", EXAMINE_SECTION_BREAK) // SKYRAT EDIT CHANGE - HR padding + . = list("This is [icon2html(src, user)] \a [src]!", EXAMINE_SECTION_BREAK) // NOVA EDIT CHANGE - HR padding var/obscured = check_obscured_slots() if (handcuffed) @@ -26,7 +26,7 @@ if (back) . += "[t_He] [t_has] [back.get_examine_string(user)] on [t_his] back." - . += EXAMINE_SECTION_BREAK // SKYRAT EDIT ADDITION - hr sections + . += EXAMINE_SECTION_BREAK // NOVA EDIT ADDITION - hr sections var/appears_dead = FALSE if (stat == DEAD) @@ -85,15 +85,6 @@ else msg += "[t_He] [t_has] severe burns!\n" - temp = getCloneLoss() - if(temp) - if(temp < 25) - msg += "[t_He] [t_is] slightly deformed.\n" - else if (temp < 50) - msg += "[t_He] [t_is] moderately deformed!\n" - else - msg += "[t_He] [t_is] severely deformed!\n" - if(HAS_TRAIT(src, TRAIT_DUMB)) msg += "[t_He] seem[p_s()] to be clumsy and unable to think.\n" @@ -154,8 +145,6 @@ SEND_SIGNAL(src, COMSIG_ATOM_EXAMINE, user, .) -//SKYRAT EDIT REMOVAL - MOVED - MEDICAL - carbon_examine.dm -/* /mob/living/carbon/examine_more(mob/user) . = ..() . += span_notice("You examine [src] closer, and note the following...") @@ -182,4 +171,3 @@ . += "[scar_text]" return . -*/ diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index f443d57b271538..0de67ef055d434 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -71,7 +71,7 @@ GLOBAL_LIST_EMPTY(features_by_species) * Layer hiding is handled by [/datum/species/proc/handle_mutant_bodyparts] below. */ //var/list/mutant_bodyparts = list() //ORIGINAL - var/list/list/mutant_bodyparts = list() //SKYRAT EDIT CHANGE - CUSTOMIZATION (typed list) + var/list/list/mutant_bodyparts = list() //NOVA EDIT CHANGE - CUSTOMIZATION (typed list) ///The bodyparts this species uses. assoc of bodypart string - bodypart type. Make sure all the fucking entries are in or I'll skin you alive. var/list/bodypart_overrides = list( BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left, @@ -132,8 +132,6 @@ GLOBAL_LIST_EMPTY(features_by_species) /// A path to an outfit that is important for species life e.g. plasmaman outfit var/datum/outfit/outfit_important_for_life - //Dictates which wing icons are allowed for a given species. If count is >1 a radial menu is used to choose between all icons in list - var/list/wing_types = list(/obj/item/organ/external/wings/functional/angel) /// The natural temperature for a body var/bodytemp_normal = BODYTEMP_NORMAL /// Minimum amount of kelvin moved toward normal body temperature per tick. @@ -205,8 +203,6 @@ GLOBAL_LIST_EMPTY(features_by_species) /datum/species/New() - wing_types = string_list(wing_types) - if(!plural_form) plural_form = "[name]\s" if(!examine_limb_id) @@ -265,9 +261,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) @@ -277,8 +273,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)]" @@ -379,19 +375,17 @@ GLOBAL_LIST_EMPTY(features_by_species) health_pct = (existing_organ.maxHealth - existing_organ.damage) / existing_organ.maxHealth if(slot == ORGAN_SLOT_BRAIN) var/obj/item/organ/internal/brain/existing_brain = existing_organ - if(!existing_brain.decoy_override) - existing_brain.before_organ_replacement(new_organ) - existing_brain.Remove(organ_holder, special = TRUE, no_id_transfer = TRUE) - QDEL_NULL(existing_organ) + existing_brain.before_organ_replacement(new_organ) + existing_brain.Remove(organ_holder, special = TRUE, movement_flags = NO_ID_TRANSFER) else existing_organ.before_organ_replacement(new_organ) existing_organ.Remove(organ_holder, special = TRUE) - QDEL_NULL(existing_organ) - if(isnull(existing_organ) && should_have && !(new_organ.zone in excluded_zones)) + QDEL_NULL(existing_organ) + if(isnull(existing_organ) && should_have && !(new_organ.zone in excluded_zones) && organ_holder.get_bodypart(deprecise_zone(new_organ.zone))) used_neworgan = TRUE new_organ.set_organ_damage(new_organ.maxHealth * (1 - health_pct)) - new_organ.Insert(organ_holder, special = TRUE, drop_if_replaced = FALSE) + new_organ.Insert(organ_holder, special = TRUE, movement_flags = DELETE_IF_REPLACED) if(!used_neworgan) QDEL_NULL(new_organ) @@ -434,7 +428,7 @@ GLOBAL_LIST_EMPTY(features_by_species) if(current_organ) current_organ.before_organ_replacement(replacement) // organ.Insert will qdel any current organs in that slot, so we don't need to. - replacement.Insert(organ_holder, special=TRUE, drop_if_replaced=FALSE) + replacement.Insert(organ_holder, special=TRUE, movement_flags = DELETE_IF_REPLACED) /datum/species/proc/worn_items_fit_body_check(mob/living/carbon/wearer) for(var/obj/item/equipped_item in wearer.get_all_worn_items()) @@ -501,7 +495,7 @@ GLOBAL_LIST_EMPTY(features_by_species) //Load a persons preferences from DNA var/obj/item/organ/external/new_organ = SSwardrobe.provide_type(organ_path) - new_organ.Insert(human, special=TRUE, drop_if_replaced=FALSE) + new_organ.Insert(human, special=TRUE, movement_flags = DELETE_IF_REPLACED) @@ -614,7 +608,7 @@ GLOBAL_LIST_EMPTY(features_by_species) * Arguments: * * species_human - Human, whoever we're handling the body for */ -//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular) +//NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular) /* /datum/species/proc/handle_body(mob/living/carbon/human/species_human) species_human.remove_overlay(BODY_LAYER) @@ -707,7 +701,7 @@ GLOBAL_LIST_EMPTY(features_by_species) species_human.apply_overlay(BODY_LAYER) handle_mutant_bodyparts(species_human) */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END /** * Handles the mutant bodyparts of a human @@ -718,7 +712,7 @@ GLOBAL_LIST_EMPTY(features_by_species) * * H - Human, whoever we're handling the body for * * forced_colour - The forced color of an accessory. Leave null to use mutant color. */ -//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular) +//NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular) /* /datum/species/proc/handle_mutant_bodyparts(mob/living/carbon/human/source, forced_colour) var/list/bodyparts_to_add = mutant_bodyparts.Copy() @@ -825,7 +819,7 @@ GLOBAL_LIST_EMPTY(features_by_species) source.apply_overlay(BODY_ADJ_LAYER) source.apply_overlay(BODY_FRONT_LAYER) */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END //This exists so sprite accessories can still be per-layer without having to include that layer's @@ -838,12 +832,12 @@ GLOBAL_LIST_EMPTY(features_by_species) return "ADJ" if(BODY_FRONT_LAYER) return "FRONT" - //SKYRAT EDIT ADDITION BEGIN + //NOVA EDIT ADDITION BEGIN if(BODY_FRONT_UNDER_CLOTHES) return "FRONT_UNDER" if(ABOVE_BODY_FRONT_HEAD_LAYER) return "FRONT_OVER" - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END ///Proc that will randomise the hair, or primary appearance element (i.e. for moths wings) of a species' associated mob /datum/species/proc/randomize_main_appearance_element(mob/living/carbon/human/human_mob) @@ -855,26 +849,37 @@ GLOBAL_LIST_EMPTY(features_by_species) human_mob.undershirt = random_undershirt(human_mob.gender) human_mob.underwear = random_underwear(human_mob.gender) human_mob.socks = random_socks(human_mob.gender) - human_mob.bra = random_bra(human_mob.gender) //SKYRAT EDIT ADDITION - Underwear and Bra split + human_mob.bra = random_bra(human_mob.gender) //NOVA EDIT ADDITION - Underwear and Bra split ///Proc that will randomise the underwear (i.e. top, pants and socks) of a species' associated mob /datum/species/proc/randomize_active_underwear(mob/living/carbon/human/human_mob) randomize_active_underwear_only(human_mob) human_mob.update_body() -///Proc that will randomize all the external organs (i.e. horns, frills, tails etc.) of a species' associated mob -/datum/species/proc/randomize_external_organs(mob/living/carbon/human/human_mob) +/datum/species/proc/randomize_active_features(mob/living/carbon/human/human_mob) + var/list/new_features = randomize_features() + for(var/feature_key in new_features) + human_mob.dna.features[feature_key] = new_features[feature_key] + human_mob.updateappearance(mutcolor_update = TRUE) + +/** + * Returns a list of features, randomized, to be used by DNA + */ +/datum/species/proc/randomize_features() + SHOULD_CALL_PARENT(TRUE) + + var/list/new_features = list() + var/static/list/organs_to_randomize = list() for(var/obj/item/organ/external/organ_path as anything in external_organs) - var/obj/item/organ/external/randomized_organ = human_mob.get_organ_by_type(organ_path) - if(randomized_organ) - var/datum/bodypart_overlay/mutant/overlay = randomized_organ.bodypart_overlay - var/new_look = pick(overlay.get_global_feature_list()) - human_mob.dna.features["[overlay.feature_key]"] = new_look - mutant_bodyparts["[overlay.feature_key]"] = new_look - -///Proc that randomizes all the appearance elements (external organs, markings, hair etc.) of a species' associated mob. Function set by child procs -/datum/species/proc/randomize_features(mob/living/carbon/human/human_mob) - return + var/overlay_path = initial(organ_path.bodypart_overlay) + var/datum/bodypart_overlay/mutant/sample_overlay = organs_to_randomize[overlay_path] + if(isnull(sample_overlay)) + sample_overlay = new overlay_path() + organs_to_randomize[overlay_path] = sample_overlay + + new_features["[sample_overlay.feature_key]"] = pick(sample_overlay.get_global_feature_list()) + + return new_features /datum/species/proc/spec_life(mob/living/carbon/human/H, seconds_per_tick, times_fired) SHOULD_CALL_PARENT(TRUE) @@ -883,9 +888,6 @@ GLOBAL_LIST_EMPTY(features_by_species) if(HAS_TRAIT(H, TRAIT_NOBREATH) && (H.health < H.crit_threshold) && !HAS_TRAIT(H, TRAIT_NOCRITDAMAGE)) H.adjustBruteLoss(0.5 * seconds_per_tick) -/datum/species/proc/spec_death(gibbed, mob/living/carbon/human/H) - return - /datum/species/proc/can_equip(obj/item/I, slot, disable_warning, mob/living/carbon/human/H, bypass_equip_delay_self = FALSE, ignore_equipped = FALSE, indirect_action = FALSE) if(no_equip_flags & slot) if(!I.species_exception || !is_type_in_list(src, I.species_exception)) @@ -930,7 +932,7 @@ GLOBAL_LIST_EMPTY(features_by_species) if(ITEM_SLOT_FEET) if(H.num_legs < 2) return FALSE - /* SKYRAT EDIT REMOVAL + /* NOVA EDIT REMOVAL if((H.bodytype & BODYTYPE_DIGITIGRADE) && !(I.item_flags & IGNORE_DIGITIGRADE)) if(!(I.supports_variations_flags & (CLOTHING_DIGITIGRADE_VARIATION|CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON))) if(!disable_warning) @@ -1064,7 +1066,7 @@ GLOBAL_LIST_EMPTY(features_by_species) affected.blood_volume = min(affected.blood_volume + round(chem.volume, 0.1), BLOOD_VOLUME_MAXIMUM) affected.reagents.del_reagent(chem.type) return COMSIG_MOB_STOP_REAGENT_CHECK - if(!chem.overdosed && chem.overdose_threshold && chem.volume >= chem.overdose_threshold) + if(!chem.overdosed && chem.overdose_threshold && chem.volume >= chem.overdose_threshold && !HAS_TRAIT(affected, TRAIT_OVERDOSEIMMUNE)) chem.overdosed = TRUE chem.overdose_start(affected) affected.log_message("has started overdosing on [chem.name] at [chem.volume] units.", LOG_GAME) @@ -1126,9 +1128,6 @@ GLOBAL_LIST_EMPTY(features_by_species) // ATTACK PROCS // ////////////////// -/datum/species/proc/spec_updatehealth(mob/living/carbon/human/H) - return - /datum/species/proc/help(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) if(SEND_SIGNAL(target, COMSIG_CARBON_PRE_HELP, user, attacker_style) & COMPONENT_BLOCK_HELP_ACT) return TRUE @@ -1145,11 +1144,6 @@ GLOBAL_LIST_EMPTY(features_by_species) user.do_cpr(target) /datum/species/proc/grab(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) - if(target.check_block()) - target.visible_message(span_warning("[target] blocks [user]'s grab!"), \ - span_userdanger("You block [user]'s grab!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, user) - to_chat(user, span_warning("Your grab at [target] was blocked!")) - return FALSE if(attacker_style?.grab_act(user, target) == MARTIAL_ATTACK_SUCCESS) return TRUE target.grabbedby(user) @@ -1160,11 +1154,6 @@ GLOBAL_LIST_EMPTY(features_by_species) if(HAS_TRAIT(user, TRAIT_PACIFISM) && !attacker_style?.pacifist_style) to_chat(user, span_warning("You don't want to harm [target]!")) return FALSE - if(target.check_block()) - target.visible_message(span_warning("[target] blocks [user]'s attack!"), \ - span_userdanger("You block [user]'s attack!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, user) - to_chat(user, span_warning("Your attack at [target] was blocked!")) - return FALSE if(attacker_style?.harm_act(user,target) == MARTIAL_ATTACK_SUCCESS) return TRUE else @@ -1184,16 +1173,29 @@ GLOBAL_LIST_EMPTY(features_by_species) return FALSE user.do_attack_animation(target, atk_effect) + //has our target been shoved recently? If so, they're staggered and we get an easy hit. + var/staggered = FALSE + + //Someone in a grapple is much more vulnerable to being harmed by punches. + var/grappled = FALSE + + if(target.get_timed_status_effect_duration(/datum/status_effect/staggered)) + staggered = TRUE + + if(target.pulledby && target.pulledby.grab_state >= GRAB_AGGRESSIVE) + grappled = TRUE + var/damage = rand(attacking_bodypart.unarmed_damage_low, attacking_bodypart.unarmed_damage_high) + var/limb_accuracy = attacking_bodypart.unarmed_effectiveness var/obj/item/bodypart/affecting = target.get_bodypart(target.get_random_valid_zone(user.zone_selected)) var/miss_chance = 100//calculate the odds that a punch misses entirely. considers stamina and brute damage of the puncher. punches miss by default to prevent weird cases if(attacking_bodypart.unarmed_damage_low) - if((target.body_position == LYING_DOWN) || HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER)) //kicks never miss (provided your species deals more than 0 damage) + if((target.body_position == LYING_DOWN) || HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER) || staggered) //kicks and attacks against staggered targets never miss (provided your species deals more than 0 damage) miss_chance = 0 else - miss_chance = min((attacking_bodypart.unarmed_damage_high/attacking_bodypart.unarmed_damage_low) + (user.getStaminaLoss() * 0.2) + (user.getBruteLoss()*0.5), 100) //old base chance for a miss + various damage. capped at 100 to prevent weirdness in prob() //SKYRAT EDIT CHANGE - ORIGINAL: miss_chance = min((attacking_bodypart.unarmed_damage_high/attacking_bodypart.unarmed_damage_low) + user.getStaminaLoss() + (user.getBruteLoss()*0.5), 100) + miss_chance = clamp(UNARMED_MISS_CHANCE_BASE - limb_accuracy + user.getStaminaLoss() + (user.getBruteLoss()*0.5), 0, UNARMED_MISS_CHANCE_MAX) //Limb miss chance + various damage. capped at 80 so there is at least a chance to land a hit. if(!damage || !affecting || prob(miss_chance))//future-proofing for species that have 0 damage/weird cases where no zone is targeted playsound(target.loc, attacking_bodypart.unarmed_miss_sound, 25, TRUE, -1) @@ -1205,8 +1207,10 @@ GLOBAL_LIST_EMPTY(features_by_species) var/armor_block = target.run_armor_check(affecting, MELEE) - playsound(target.loc, attacking_bodypart.unarmed_attack_sound || get_sfx("punch"), 25, TRUE, -1) // SKYRAT EDIT - ORIGINAL: playsound(target.loc, attacking_bodypart.unarmed_attack_sound, 25, TRUE, -1) + playsound(target.loc, attacking_bodypart.unarmed_attack_sound || get_sfx("punch"), 25, TRUE, -1) // NOVA EDIT - ORIGINAL: playsound(target.loc, attacking_bodypart.unarmed_attack_sound, 25, TRUE, -1) + if(grappled && attacking_bodypart.grappled_attack_verb) + atk_verb = attacking_bodypart.grappled_attack_verb target.visible_message(span_danger("[user] [atk_verb]ed [target]!"), \ span_userdanger("You're [atk_verb]ed by [user]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, user) to_chat(user, span_danger("You [atk_verb] [target]!")) @@ -1219,37 +1223,33 @@ GLOBAL_LIST_EMPTY(features_by_species) var/attack_direction = get_dir(user, target) var/attack_type = attacking_bodypart.attack_type - var/unarmed_sharpness = attacking_bodypart.unarmed_sharpness //SKYRAT EDIT - If unarmed damage sharpness needs to be taken into account. - if(atk_effect == ATTACK_EFFECT_KICK)//kicks deal 1.5x raw damage + var/unarmed_sharpness = attacking_bodypart.unarmed_sharpness //NOVA EDIT ADDITION - If unarmed damage sharpness needs to be taken into account. + if(atk_effect == ATTACK_EFFECT_KICK || grappled) //kicks and punches when grappling bypass armor slightly. if(damage >= 9) target.force_say() - log_combat(user, target, "kicked") - target.apply_damage(damage * PUNCH_STAMINA_MULTIPLIER, STAMINA, affecting, armor_block) //SKYRAT EDIT ADDITION - target.apply_damage(damage, attack_type, affecting, armor_block, attack_direction = attack_direction) - else//other attacks deal full raw damage + 1.5x in stamina damage - target.apply_damage(damage, attack_type, affecting, armor_block, attack_direction = attack_direction, sharpness = unarmed_sharpness) //SKYRAT EDIT - Applies sharpness if it does - ORIGINAL: target.apply_damage(damage, attack_type, affecting, armor_block, attack_direction = attack_direction) - target.apply_damage(damage * PUNCH_STAMINA_MULTIPLIER, STAMINA, affecting, armor_block) //SKYRAT EDIT CHANGE: target.apply_damage(damage*1.5, STAMINA, affecting, armor_block) + log_combat(user, target, grappled ? "grapple punched" : "kicked") + target.apply_damage(damage, attack_type, affecting, armor_block - limb_accuracy, attack_direction = attack_direction) + target.apply_damage(damage*1.5, STAMINA, affecting, armor_block - limb_accuracy) + else // Normal attacks do not gain the benefit of armor penetration. + target.apply_damage(damage, attack_type, affecting, armor_block, attack_direction = attack_direction, sharpness = unarmed_sharpness) //NOVA EDIT - Applies sharpness if it does - ORIGINAL: target.apply_damage(damage, attack_type, affecting, armor_block, attack_direction = attack_direction) + target.apply_damage(damage*1.5, STAMINA, affecting, armor_block) if(damage >= 9) target.force_say() log_combat(user, target, "punched") - if((target.stat != DEAD) && damage >= attacking_bodypart.unarmed_stun_threshold) + //If we rolled a punch high enough to hit our stun threshold, or our target is staggered and they have at least 40 damage+stamina loss, we knock them down + if((target.stat != DEAD) && prob(limb_accuracy) || (target.stat != DEAD) && staggered && (target.getStaminaLoss() + user.getBruteLoss()) >= 40) target.visible_message(span_danger("[user] knocks [target] down!"), \ span_userdanger("You're knocked down by [user]!"), span_hear("You hear aggressive shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, user) to_chat(user, span_danger("You knock [target] down!")) - /* SKYRAT EDIT REMOVAL - Less combat lethality and hard stungs - var/knockdown_duration = 40 + (target.getStaminaLoss() + (target.getBruteLoss()*0.5))*0.8 //50 total damage = 40 base stun + 40 stun modifier = 80 stun duration, which is the old base duration + /* NOVA EDIT REMOVAL - Less combat lethality and hard stungs + var/knockdown_duration = 4 SECONDS + (target.getStaminaLoss() + (target.getBruteLoss()*0.5))*0.8 //50 total damage = 4 second base stun + 4 second stun modifier = 8 second knockdown duration target.apply_effect(knockdown_duration, EFFECT_KNOCKDOWN, armor_block) */ // SKYRAT REMOVAL END - target.StaminaKnockdown(20) //SKYRAT EDIT ADDITION + target.StaminaKnockdown(20) //NOVA EDIT ADDITION log_combat(user, target, "got a stun punch with their previous punch") /datum/species/proc/disarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) - if(target.check_block()) - target.visible_message(span_warning("[user]'s shove is blocked by [target]!"), \ - span_danger("You block [user]'s shove!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, user) - to_chat(user, span_warning("Your shove at [target] was blocked!")) - return FALSE if(attacker_style?.disarm_act(user,target) == MARTIAL_ATTACK_SUCCESS) return TRUE if(user.body_position != STANDING_UP) @@ -1260,10 +1260,6 @@ GLOBAL_LIST_EMPTY(features_by_species) return FALSE user.disarm(target) - -/datum/species/proc/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) - return - /datum/species/proc/spec_attack_hand(mob/living/carbon/human/owner, mob/living/carbon/human/target, datum/martial_art/attacker_style, modifiers) if(!istype(owner)) return @@ -1274,7 +1270,7 @@ GLOBAL_LIST_EMPTY(features_by_species) return if(owner.mind) attacker_style = owner.mind.martial_art - if((owner != target) && target.check_shields(owner, 0, owner.name, attack_type = UNARMED_ATTACK)) + if((owner != target) && target.check_block(owner, 0, owner.name, attack_type = UNARMED_ATTACK)) log_combat(owner, target, "attempted to touch") target.visible_message(span_warning("[owner] attempts to touch [target]!"), \ span_danger("[owner] attempts to touch you!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, owner) @@ -1291,115 +1287,6 @@ GLOBAL_LIST_EMPTY(features_by_species) else help(owner, target, attacker_style) -/datum/species/proc/spec_attacked_by(obj/item/weapon, mob/living/user, obj/item/bodypart/affecting, mob/living/carbon/human/human) - // Allows you to put in item-specific reactions based on species - if(user != human) - if(human.check_shields(weapon, weapon.force, "the [weapon.name]", MELEE_ATTACK, weapon.armour_penetration, weapon.damtype)) - return FALSE - if(human.check_block()) - human.visible_message(span_warning("[human] blocks [weapon]!"), \ - span_userdanger("You block [weapon]!")) - return FALSE - - affecting ||= human.bodyparts[1] //Something went wrong. Maybe the limb is missing? - var/hit_area = affecting.plaintext_zone - var/armor_block = min(human.run_armor_check( - def_zone = affecting, - attack_flag = MELEE, - absorb_text = span_notice("Your armor has protected your [hit_area]!"), - soften_text = span_warning("Your armor has softened a hit to your [hit_area]!"), - armour_penetration = weapon.armour_penetration, - weak_against_armour = weapon.weak_against_armour, - ), ARMOR_MAX_BLOCK) //cap damage reduction at 90% - - var/modified_wound_bonus = weapon.wound_bonus - // this way, you can't wound with a surgical tool on help intent if they have a surgery active and are lying down, so a misclick with a circular saw on the wrong limb doesn't bleed them dry (they still get hit tho) - if((weapon.item_flags & SURGICAL_TOOL) && !user.combat_mode && human.body_position == LYING_DOWN && (LAZYLEN(human.surgeries) > 0)) - modified_wound_bonus = CANT_WOUND - - human.send_item_attack_message(weapon, user, hit_area, affecting) - var/damage_dealt = human.apply_damage( - damage = weapon.force, - damagetype = weapon.damtype, - def_zone = affecting, - blocked = armor_block, - wound_bonus = modified_wound_bonus, - bare_wound_bonus = weapon.bare_wound_bonus, - sharpness = weapon.get_sharpness(), - attack_direction = get_dir(user, human), - attacking_item = weapon, - ) - - if(damage_dealt <= 0) - return FALSE //item force is zero - var/bloody = FALSE - if(weapon.damtype != BRUTE) - return TRUE - if(!(prob(25 + (weapon.force * 2)))) - return TRUE - - if(affecting.can_bleed()) - weapon.add_mob_blood(human) //Make the weapon bloody, not the person. - if(prob(weapon.force * 2)) //blood spatter! - bloody = TRUE - var/turf/location = human.loc - if(istype(location)) - human.add_splatter_floor(location) - if(get_dist(user, human) <= 1) //people with TK won't get smeared with blood - user.add_mob_blood(human) - - switch(hit_area) - if(BODY_ZONE_HEAD) - if(!weapon.get_sharpness() && armor_block < 50) - if(prob(weapon.force)) - human.adjustOrganLoss(ORGAN_SLOT_BRAIN, 20) - if(human.stat == CONSCIOUS) - human.visible_message(span_danger("[human] is knocked senseless!"), \ - span_userdanger("You're knocked senseless!")) - human.set_confusion_if_lower(20 SECONDS) - human.adjust_eye_blur(20 SECONDS) - if(prob(10)) - human.gain_trauma(/datum/brain_trauma/mild/concussion) - else - human.adjustOrganLoss(ORGAN_SLOT_BRAIN, weapon.force * 0.2) - - if(human.mind && human.stat == CONSCIOUS && human != user && prob(weapon.force + ((human.maxHealth - human.health) * 0.5))) // rev deconversion through blunt trauma. // SKYRAT EDIT CHANGE - var/datum/antagonist/rev/rev = human.mind.has_antag_datum(/datum/antagonist/rev) - if(rev) - rev.remove_revolutionary(user) - - if(bloody) //Apply blood - if(human.wear_mask) - human.wear_mask.add_mob_blood(human) - human.update_worn_mask() - if(human.head) - human.head.add_mob_blood(human) - human.update_worn_head() - if(human.glasses && prob(33)) - human.glasses.add_mob_blood(human) - human.update_worn_glasses() - - if(BODY_ZONE_CHEST) - if(human.stat == CONSCIOUS && !weapon.get_sharpness() && armor_block < 50) - if(prob(weapon.force)) - human.visible_message(span_danger("[human] is knocked down!"), \ - span_userdanger("You're knocked down!")) - human.apply_effect(60, EFFECT_KNOCKDOWN, armor_block) - - if(bloody) - if(human.wear_suit) - human.wear_suit.add_mob_blood(human) - human.update_worn_oversuit() - if(human.w_uniform) - human.w_uniform.add_mob_blood(human) - human.update_worn_undersuit() - - /// Triggers force say events - if(weapon.force > 10 || (weapon.force >= 5 && prob(33))) - human.force_say(user) - - return TRUE - ////////////////////////// // ENVIRONMENT HANDLERS // ////////////////////////// @@ -1428,7 +1315,7 @@ GLOBAL_LIST_EMPTY(features_by_species) return //Only stabilise core temp when alive and not in statis - if(humi.stat < DEAD && !IS_IN_STASIS(humi)) + if(humi.stat < DEAD && !HAS_TRAIT(humi, TRAIT_STASIS)) body_temperature_core(humi, seconds_per_tick, times_fired) //These do run in statis @@ -1436,7 +1323,7 @@ GLOBAL_LIST_EMPTY(features_by_species) body_temperature_alerts(humi, seconds_per_tick, times_fired) //Do not cause more damage in statis - if(!IS_IN_STASIS(humi)) + if(!HAS_TRAIT(humi, TRAIT_STASIS)) body_temperature_damage(humi, seconds_per_tick, times_fired) /** @@ -1477,14 +1364,14 @@ GLOBAL_LIST_EMPTY(features_by_species) // Get the temperature of the environment for area var/area_temp = humi.get_temperature(environment) - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION //Special handling for getting liquids temperature if(isturf(humi.loc)) var/turf/T = humi.loc if(T.liquids && T.liquids.liquid_state > LIQUID_STATE_PUDDLE) var/submergment_percent = SUBMERGEMENT_PERCENT(humi, T.liquids) area_temp = (area_temp*(1-submergment_percent)) + (T.liquids.temp * submergment_percent) - //SKYRAT EDIT END + //NOVA EDIT END // Get the insulation value based on the area's temp var/thermal_protection = humi.get_insulation_protection(area_temp) @@ -1613,6 +1500,10 @@ GLOBAL_LIST_EMPTY(features_by_species) // Apply the damage to all body parts humi.apply_damage(burn_damage, BURN, spread_damage = TRUE) + // For cold damage, we cap at the threshold if you're dead + if(humi.getFireLoss() >= abs(HEALTH_THRESHOLD_DEAD) && humi.stat == DEAD) + return + // Apply some burn / brute damage to the body (Dependent if the person is hulk or not) var/is_hulk = HAS_TRAIT(humi, TRAIT_HULK) @@ -1759,7 +1650,7 @@ GLOBAL_LIST_EMPTY(features_by_species) former_tail_owner.clear_mood_event("tail_balance_lost") former_tail_owner.clear_mood_event("wrong_tail_regained") -/* SKYRAT EDIT REMOVAL - MOVED TO MODULAR +/* NOVA EDIT REMOVAL - MOVED TO MODULAR /// Returns a list of strings representing features this species has. /// Used by the preferences UI to know what buttons to show. @@ -2275,11 +2166,11 @@ GLOBAL_LIST_EMPTY(features_by_species) SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, SPECIES_PERK_ICON = "comment", SPECIES_PERK_NAME = "Native Speaker", - /* SKYRAT EDIT - Digitigrade customization - ORIGINAL: + /* NOVA EDIT - Digitigrade customization - ORIGINAL: SPECIES_PERK_DESC = "Alongside [initial(common_language.name)], [plural_form] gain the ability to speak [english_list(bonus_languages)].", - */ // ORIGINAL END - SKYRAT EDIT START: + */ // ORIGINAL END - NOVA EDIT START: SPECIES_PERK_DESC = "Alongside [initial(common_language.name)], [plural_form] commonly speak [english_list(bonus_languages)].", - // SKYRAT EDIT END + // NOVA EDIT END )) else @@ -2297,7 +2188,7 @@ GLOBAL_LIST_EMPTY(features_by_species) new_species ||= target.dna.species //If no new species is provided, assume its src. //Note for future: Potentionally add a new C.dna.species() to build a template species for more accurate limb replacement - // SKYRAT EDIT ADDITION START - Synth digitigrade sanitization + // NOVA EDIT ADDITION START - Synth digitigrade sanitization var/ignore_digi = FALSE // You can jack into this var with other checks, if you want. if(issynthetic(target)) var/list/chassis = target.dna.mutant_bodyparts[MUTANT_SYNTH_CHASSIS] @@ -2308,21 +2199,21 @@ GLOBAL_LIST_EMPTY(features_by_species) body_choice = chassis_accessory[chassis[MUTANT_INDEX_NAME]] if(body_choice && !body_choice.is_digi_compatible) ignore_digi = TRUE - // SKYRAT EDIT END + // NOVA EDIT END var/list/final_bodypart_overrides = new_species.bodypart_overrides.Copy() - if(!ignore_digi && ((new_species.digitigrade_customization == DIGITIGRADE_OPTIONAL && target.dna.features["legs"] == DIGITIGRADE_LEGS) || new_species.digitigrade_customization == DIGITIGRADE_FORCED)) //if((new_species.digitigrade_customization == DIGITIGRADE_OPTIONAL && target.dna.features["legs"] == DIGITIGRADE_LEGS) || new_species.digitigrade_customization == DIGITIGRADE_FORCED) // SKYRAT EDIT - Digitigrade customization - ORIGINAL - /* SKYRAT EDIT - Digitigrade customization - ORIGINAL: + if(!ignore_digi && ((new_species.digitigrade_customization == DIGITIGRADE_OPTIONAL && target.dna.features["legs"] == DIGITIGRADE_LEGS) || new_species.digitigrade_customization == DIGITIGRADE_FORCED)) //if((new_species.digitigrade_customization == DIGITIGRADE_OPTIONAL && target.dna.features["legs"] == DIGITIGRADE_LEGS) || new_species.digitigrade_customization == DIGITIGRADE_FORCED) // NOVA EDIT - Digitigrade customization - ORIGINAL + /* NOVA EDIT - Digitigrade customization - ORIGINAL: final_bodypart_overrides[BODY_ZONE_R_LEG] = /obj/item/bodypart/leg/right/digitigrade final_bodypart_overrides[BODY_ZONE_L_LEG] = /obj/item/bodypart/leg/left/digitigrade - */ // ORIGINAL END - SKYRAT EDIT START: + */ // ORIGINAL END - NOVA EDIT START: var/obj/item/bodypart/leg/right/r_leg = new_species.bodypart_overrides[BODY_ZONE_R_LEG] if(r_leg) final_bodypart_overrides[BODY_ZONE_R_LEG] = initial(r_leg.digitigrade_type) var/obj/item/bodypart/leg/left/l_leg = new_species.bodypart_overrides[BODY_ZONE_L_LEG] if(l_leg) final_bodypart_overrides[BODY_ZONE_L_LEG] = initial(l_leg.digitigrade_type) - // SKYRAT EDIT END + // NOVA EDIT END for(var/obj/item/bodypart/old_part as anything in target.bodyparts) if((old_part.change_exempt_flags & BP_BLOCK_CHANGE_SPECIES) || (old_part.bodypart_flags & BODYPART_IMPLANTED)) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 3c0ffb2536b790..150b73a486bb2d 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -21,24 +21,20 @@ GLOBAL_LIST_EMPTY(dead_players_during_shift) if(stat == DEAD) return stop_sound_channel(CHANNEL_HEARTBEAT) - var/obj/item/organ/internal/heart/H = get_organ_slot(ORGAN_SLOT_HEART) - if(H) - H.beat = BEAT_NONE + var/obj/item/organ/internal/heart/human_heart = get_organ_slot(ORGAN_SLOT_HEART) + human_heart?.beat = BEAT_NONE . = ..() if(client && !HAS_TRAIT(src, TRAIT_SUICIDED) && !(client in GLOB.dead_players_during_shift)) GLOB.dead_players_during_shift += client - if(!QDELETED(dna)) //The gibbed param is bit redundant here since dna won't exist at this point if they got deleted. - dna.species.spec_death(gibbed, src) - if(SSticker.HasRoundStarted()) SSblackbox.ReportDeath(src) - log_message("has died (BRUTE: [src.getBruteLoss()], BURN: [src.getFireLoss()], TOX: [src.getToxLoss()], OXY: [src.getOxyLoss()], CLONE: [src.getCloneLoss()])", LOG_ATTACK) + log_message("has died (BRUTE: [src.getBruteLoss()], BURN: [src.getFireLoss()], TOX: [src.getToxLoss()], OXY: [src.getOxyLoss()]", LOG_ATTACK) if(key) // Prevents log spamming of keyless mob deaths (like xenobio monkeys) investigate_log("has died at [loc_name(src)].
    \ - BRUTE: [src.getBruteLoss()] BURN: [src.getFireLoss()] TOX: [src.getToxLoss()] OXY: [src.getOxyLoss()] CLONE: [src.getCloneLoss()] STAM: [src.getStaminaLoss()]
    \ + BRUTE: [src.getBruteLoss()] BURN: [src.getFireLoss()] TOX: [src.getToxLoss()] OXY: [src.getOxyLoss()] STAM: [src.getStaminaLoss()]
    \ Brain damage: [src.get_organ_loss(ORGAN_SLOT_BRAIN) || "0"]
    \ Blood volume: [src.blood_volume]cl ([round((src.blood_volume / BLOOD_VOLUME_NORMAL) * 100, 0.1)]%)
    \ Reagents:
    [reagents_readout()]", INVESTIGATE_DEATHS) @@ -64,10 +60,10 @@ GLOBAL_LIST_EMPTY(dead_players_during_shift) /mob/living/carbon/proc/Drain() become_husk(CHANGELING_DRAIN) - //SKYRAT EDIT REMOVAL START + //NOVA EDIT REMOVAL START /* ADD_TRAIT(src, TRAIT_BADDNA, CHANGELING_DRAIN) */ - //SKYRAT EDIT END + //NOVA EDIT END blood_volume = 0 return TRUE diff --git a/code/modules/mob/living/carbon/human/dummy.dm b/code/modules/mob/living/carbon/human/dummy.dm index 3c29bf93847ac1..31063a502b21a1 100644 --- a/code/modules/mob/living/carbon/human/dummy.dm +++ b/code/modules/mob/living/carbon/human/dummy.dm @@ -18,7 +18,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) /mob/living/carbon/human/dummy/attach_rot(mapload) return -/mob/living/carbon/human/dummy/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, list/override_features, list/override_mutantparts, list/override_markings, retain_features = FALSE, retain_mutantparts = FALSE) // SKYRAT EDIT - Customization +/mob/living/carbon/human/dummy/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, list/override_features, list/override_mutantparts, list/override_markings, retain_features = FALSE, retain_mutantparts = FALSE) // NOVA EDIT - Customization harvest_organs() return ..() @@ -75,9 +75,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) cut_overlays(TRUE) /mob/living/carbon/human/dummy/setup_human_dna() - create_dna() - randomize_human(src) - dna.initialize_dna(skip_index = TRUE) //Skip stuff that requires full round init. + randomize_human(src, randomize_mutations = FALSE) /mob/living/carbon/human/dummy/log_mob_tag(text) return @@ -89,8 +87,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) return consistent_entry /proc/create_consistent_human_dna(mob/living/carbon/human/target) - target.dna.initialize_dna(skip_index = TRUE) - /* SKYRAT EDIT START - Customization - ORIGINAL: + /* NOVA EDIT START - Customization - ORIGINAL: target.dna.features["mcolor"] = COLOR_VIBRANT_LIME target.dna.features["ethcolor"] = COLOR_WHITE target.dna.features["body_markings"] = get_consistent_feature_entry(GLOB.body_markings_list) @@ -105,10 +102,21 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) target.dna.features["tail_cat"] = get_consistent_feature_entry(GLOB.tails_list_human) // it's a lie target.dna.features["tail_lizard"] = get_consistent_feature_entry(GLOB.tails_list_lizard) target.dna.features["pod_hair"] = get_consistent_feature_entry(GLOB.pod_hair_list) - */ // ORIGINAL END - SKYRAT EDIT START + */ // ORIGINAL END - NOVA EDIT START target.dna.features["mcolor"] = COLOR_VIBRANT_LIME target.dna.features["ethcolor"] = COLOR_WHITE - // SKYRAT EDIT END + // NOVA EDIT END + target.dna.initialize_dna(create_mutation_blocks = FALSE, randomize_features = FALSE) + // UF and UI are nondeterministic, even though the features are the same some blocks will randomize slightly + // In practice this doesn't matter, but this is for the sake of 100%(ish) consistency + var/static/consistent_UF + var/static/consistent_UI + if(isnull(consistent_UF) || isnull(consistent_UI)) + consistent_UF = target.dna.unique_features + consistent_UI = target.dna.unique_identity + else + target.dna.unique_features = consistent_UF + target.dna.unique_identity = consistent_UI /// Provides a dummy that is consistently bald, white, naked, etc. /mob/living/carbon/human/dummy/consistent @@ -122,11 +130,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) /mob/living/carbon/human/consistent/setup_human_dna() create_consistent_human_dna(src) - -/mob/living/carbon/human/consistent/update_body(is_creating) - ..() - if(is_creating) - fully_replace_character_name(real_name, "John Doe") + fully_replace_character_name(real_name, "John Doe") /mob/living/carbon/human/consistent/domutcheck() return // We skipped adding any mutations so this runtimes @@ -164,9 +168,9 @@ GLOBAL_LIST_EMPTY(dummy_mob_list) if(ishuman(target)) var/mob/living/carbon/human/human_target = target human_target.copy_clothing_prefs(copycat) - // SKYRAT EDIT + // NOVA EDIT target?.client?.prefs?.apply_prefs_to(copycat, TRUE) - // SKYRAT EDIT END + // NOVA EDIT END copycat.updateappearance(icon_update=TRUE, mutcolor_update=TRUE, mutations_overlay_update=TRUE) else diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 90cee5fce9bfe1..e3bbca427b209b 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -82,7 +82,7 @@ only_forced_audio = TRUE vary = TRUE -/* - SKYRAT EDIT REMOVAL: EMOTES +/* - NOVA EDIT REMOVAL: EMOTES /datum/emote/living/carbon/human/scream/get_sound(mob/living/carbon/human/user) if(!istype(user)) return @@ -119,6 +119,7 @@ message = "salutes." message_param = "salutes to %t." hands_use_check = TRUE + sound = 'sound/misc/salute.ogg' /datum/emote/living/carbon/human/shrug key = "shrug" diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 1fc148e7b640a2..735d6f83cc101b 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -9,10 +9,10 @@ var/obscure_name var/obscure_examine - // SKYRAT EDIT START + // NOVA EDIT START var/obscured = check_obscured_slots() var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) - // SKYRAT EDIT END + // NOVA EDIT END if(isliving(user)) var/mob/living/L = user @@ -22,7 +22,7 @@ obscure_name = TRUE obscure_examine = TRUE - //SKYRAT EDIT CHANGE BEGIN - CUSTOMIZATION + //NOVA EDIT CHANGE BEGIN - CUSTOMIZATION var/species_visible var/species_name_string if(skipface || get_visible_name() == "Unknown") @@ -40,15 +40,15 @@ else species_name_string = ", [prefix_a_or_an(dna.species.name)] [dna.species.name]!" - . = list("This is [!obscure_name ? name : "Unknown"][species_name_string]", EXAMINE_SECTION_BREAK) //SKYRAT EDIT CHANGE + . = list("This is [!obscure_name ? name : "Unknown"][species_name_string]", EXAMINE_SECTION_BREAK) //NOVA EDIT CHANGE if(species_visible) //If they have a custom species shown, show the real one too if(!dna.species.lore_protected && dna.features["custom_species"]) . += "[t_He] [t_is] [prefix_a_or_an(dna.species.name)] [dna.species.name]!" else . += "You can't make out what species they are." - //SKYRAT EDIT CHANGE END + //NOVA EDIT CHANGE END - /* SKYRAT EDIT REMOVAL + /* NOVA EDIT REMOVAL var/apparent_species if(dna?.species && !skipface) apparent_species = ", \an [dna.species.name]" @@ -61,7 +61,7 @@ var/obscured = check_obscured_slots() var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) - */ //SKYRAT EDIT END + */ //NOVA EDIT END //uniform if(w_uniform && !(obscured & ITEM_SLOT_ICLOTHING) && !(w_uniform.item_flags & EXAMINE_SKIP)) @@ -141,7 +141,7 @@ . += wear_id.get_id_examine_strings(user) - . += EXAMINE_SECTION_BREAK // SKYRAT EDIT ADDITION - hr sections + . += EXAMINE_SECTION_BREAK // NOVA EDIT ADDITION - hr sections //Status effects var/list/status_examines = get_status_effect_examinations() @@ -244,16 +244,6 @@ else msg += "[t_He] [t_has] severe [damage_desc[BURN]]!\n" - temp = getCloneLoss() - if(temp) - if(temp < 25) - msg += "[t_He] [t_has] minor [damage_desc[CLONE]].\n" - else if(temp < 50) - msg += "[t_He] [t_has] moderate [damage_desc[CLONE]]!\n" - else - msg += "[t_He] [t_has] severe [damage_desc[CLONE]]!\n" - - if(has_status_effect(/datum/status_effect/fire_handler/fire_stacks)) msg += "[t_He] [t_is] covered in something flammable.\n" if(has_status_effect(/datum/status_effect/fire_handler/wet_stacks)) @@ -376,8 +366,7 @@ if(!key) msg += "[span_deadsay("[t_He] [t_is] totally catatonic. The stresses of life in deep-space must have been too much for [t_him]. Any recovery is unlikely.")]\n" else if(!client) - //msg += "[t_He] [t_has] a blank, absent-minded stare and appears completely unresponsive to anything. [t_He] may snap out of it soon.\n" //ORIGINAL - msg += "[t_He] [t_has] a blank, absent-minded stare and [t_has] been completely unresponsive to anything for [round(((world.time - lastclienttime) / (1 MINUTES)),1)] minutes. [t_He] may snap out of it soon.\n" //SKYRAT CHANGE ADDITION - SSD_INDICATOR + msg += "[span_deadsay("[t_He] [t_has] a blank, absent-minded stare and [t_has] been completely unresponsive to anything for [round(((world.time - lastclienttime) / (1 MINUTES)),1)] minutes. [t_He] may snap out of it soon.")]\n" // NOVA EDIT CHANGE - SSD_INDICATOR - ORIGINAL: msg += "[span_deadsay("[t_He] [t_has] a blank, absent-minded stare and appears completely unresponsive to anything. [t_He] may snap out of it soon.")]\n" var/scar_severity = 0 for(var/i in all_scars) @@ -433,13 +422,13 @@ if(target_record) . += "\[Medical evaluation\]
    " . += "\[See quirks\]" - //SKYRAT EDIT ADDITION BEGIN - EXAMINE RECORDS + //NOVA EDIT ADDITION BEGIN - EXAMINE RECORDS if(target_record && length(target_record.past_medical_records) > RECORDS_INVISIBLE_THRESHOLD) . += "\[View medical records\]" - //SKYRAT EDIT END + //NOVA EDIT END if(HAS_TRAIT(user, TRAIT_SECURITY_HUD)) - if(!user.stat && user != src) + if((user.stat == CONSCIOUS || isobserver(user)) && user != src) //|| !user.canmove || user.restrained()) Fluff: Sechuds have eye-tracking technology and sets 'arrest' to people that the wearer looks and blinks at. var/wanted_status = WANTED_NONE var/security_note = "None." @@ -449,24 +438,28 @@ wanted_status = target_record.wanted_status if(target_record.security_note) security_note = target_record.security_note - - . += "Criminal status: \[[wanted_status]\]" + if(ishuman(user)) + . += "Criminal status: \[[wanted_status]\]" + else + . += "Criminal status: [wanted_status]" . += "Important Notes: [security_note]" - . += jointext(list("Security record: \[View\]", - "\[Add citation\]", - "\[Add crime\]", - "\[Add note\]"), "") - // SKYRAT EDIT ADDITION BEGIN - EXAMINE RECORDS + . += "Security record: \[View\]" + if(ishuman(user)) + . += jointext(list("\[Add citation\]", + "\[Add crime\]", + "\[Add note\]"), "") + // NOVA EDIT ADDITION BEGIN - EXAMINE RECORDS if(target_record && length(target_record.past_security_records) > RECORDS_INVISIBLE_THRESHOLD) . += "Past security records: \[View past security records\]" - if (target_record && length(target_record.past_general_records) > RECORDS_INVISIBLE_THRESHOLD) + if(target_record && length(target_record.past_general_records) > RECORDS_INVISIBLE_THRESHOLD) . += "\[View general records\]" - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END else if(isobserver(user)) - . += span_info("Traits: [get_quirk_string(FALSE, CAT_QUIRK_ALL)]") + . += span_info("Quirks: [get_quirk_string(FALSE, CAT_QUIRK_ALL)]") + . += "" - //SKYRAT EDIT ADDITION BEGIN - EXAMINE RECORDS + //NOVA EDIT ADDITION BEGIN - EXAMINE RECORDS if(isobserver(user) || user.mind?.can_see_exploitables || user.mind?.has_exploitables_override) var/datum/record/crew/target_records = find_record(perpname) if(target_records) @@ -476,22 +469,22 @@ . += "\[View background info\]" if((length(exploitable_text) > RECORDS_INVISIBLE_THRESHOLD) && ((exploitable_text) != EXPLOITABLE_DEFAULT_TEXT)) . += "\[View exploitable info\]" - //SKYRAT EDIT END - //SKYRAT EDIT ADDITION BEGIN - GUNPOINT + //NOVA EDIT END + //NOVA EDIT ADDITION BEGIN - GUNPOINT if(gunpointing) . += "[t_He] [t_is] holding [gunpointing.target.name] at gunpoint with [gunpointing.aimed_gun.name]!\n" if(length(gunpointed)) for(var/datum/gunpoint/GP in gunpointed) . += "[GP.source.name] [GP.source.p_are()] holding [t_him] at gunpoint with [GP.aimed_gun.name]!\n" - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END - //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION - for(var/genital in possible_genitals) + //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION + for(var/genital in GLOB.possible_genitals) if(dna.species.mutant_bodyparts[genital]) var/datum/sprite_accessory/genital/G = GLOB.sprite_accessories[genital][dna.species.mutant_bodyparts[genital][MUTANT_INDEX_NAME]] if(G) if(!(G.is_hidden(src))) - . += "[t_He] [t_has] exposed genitals... Look closer..." + . += "[t_He] [t_has] exposed genitals... \[Look closer...\]" break var/flavor_text_link @@ -501,9 +494,9 @@ var/face_obscured = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) if (!(face_obscured)) - flavor_text_link = span_notice("[preview_text]... Look closer?") + flavor_text_link = span_notice("[preview_text]... \[Look closer?\]") else - flavor_text_link = span_notice("Examine closely...") + flavor_text_link = span_notice("\[Examine closely...\]") if (flavor_text_link) . += flavor_text_link @@ -545,10 +538,10 @@ return var/age_text switch(age) - if(-INFINITY to 17) // SKYRAT EDIT ADD START -- AGE EXAMINE + if(-INFINITY to 17) // NOVA EDIT ADD START -- AGE EXAMINE age_text = "too young to be here" if(18 to 25) - age_text = "a young adult" // SKYRAT EDIT END + age_text = "a young adult" // NOVA EDIT END if(26 to 35) age_text = "of adult age" if(36 to 55) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 0905a4ac40ff83..5c2a6ac43afb3a 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -23,7 +23,7 @@ RegisterSignal(src, COMSIG_COMPONENT_CLEAN_FACE_ACT, PROC_REF(clean_face)) AddComponent(/datum/component/personal_crafting) - AddElement(/datum/element/footstep, FOOTSTEP_MOB_HUMAN, 0.6, -6) //SKYRAT EDIT CHANGE - AESTHETICS + AddElement(/datum/element/footstep, FOOTSTEP_MOB_HUMAN, 0.6, -6) //NOVA EDIT CHANGE - AESTHETICS AddComponent(/datum/component/bloodysoles/feet) 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)) @@ -32,7 +32,7 @@ ) AddElement(/datum/element/connect_loc, loc_connections) GLOB.human_list += src - SSopposing_force.give_opfor_button(src) //SKYRAT EDIT - OPFOR SYSTEM + SSopposing_force.give_opfor_button(src) //NOVA EDIT - OPFOR SYSTEM /mob/living/carbon/human/proc/setup_physiology() physiology = new() @@ -54,9 +54,7 @@ ADD_TRAIT(src, TRAIT_AGEUSIA, NO_TONGUE_TRAIT) /mob/living/carbon/human/proc/setup_human_dna() - //initialize dna. for spawned humans; overwritten by other code - randomize_human(src) - dna.initialize_dna() + randomize_human(src, randomize_mutations = TRUE) /mob/living/carbon/human/Destroy() QDEL_NULL(physiology) @@ -69,19 +67,6 @@ return ..() -/* SKYRAT REMOVAL START - MOVED TO MODULAR - modular_skyrat\master_files\code\modules\mob\living\carbon\human.dm -/mob/living/carbon/human/ZImpactDamage(turf/T, levels) - if(stat != CONSCIOUS || levels > 1) // you're not The One - return ..() - var/obj/item/organ/external/wings/gliders = get_organ_by_type(/obj/item/organ/external/wings) - if(HAS_TRAIT(src, TRAIT_FREERUNNING) || gliders?.can_soften_fall()) // the power of parkour or wings allows falling short distances unscathed - visible_message(span_danger("[src] makes a hard landing on [T] but remains unharmed from the fall."), \ - span_userdanger("You brace for the fall. You make a hard landing on [T] but remain unharmed.")) - Knockdown(levels * 40) - return - return ..() -*/ // SKYRAT REMOVAL END - /mob/living/carbon/human/prepare_data_huds() //Update med hud images... ..() @@ -110,20 +95,24 @@ ///////HUDs/////// if(href_list["hud"]) - if(!ishuman(usr)) + if(!ishuman(usr) && !isobserver(usr)) return - var/mob/living/carbon/human/human_user = usr + var/mob/human_or_ghost_user = usr var/perpname = get_face_name(get_id_name("")) - if(!HAS_TRAIT(human_user, TRAIT_SECURITY_HUD) && !HAS_TRAIT(human_user, TRAIT_MEDICAL_HUD)) + if(!HAS_TRAIT(human_or_ghost_user, TRAIT_SECURITY_HUD) && !HAS_TRAIT(human_or_ghost_user, TRAIT_MEDICAL_HUD)) return if((text2num(href_list["examine_time"]) + 1 MINUTES) < world.time) - to_chat(human_user, "[span_notice("It's too late to use this now!")]") + to_chat(human_or_ghost_user, "[span_notice("It's too late to use this now!")]") return var/datum/record/crew/target_record = find_record(perpname) if(href_list["photo_front"] || href_list["photo_side"]) - if(!human_user.canUseHUD()) + if(!target_record) return - if(!HAS_TRAIT(human_user, TRAIT_SECURITY_HUD) && !HAS_TRAIT(human_user, TRAIT_MEDICAL_HUD)) + if(ishuman(human_or_ghost_user)) + var/mob/living/carbon/human/human_user = human_or_ghost_user + if(!human_user.canUseHUD()) + return + if(!HAS_TRAIT(human_or_ghost_user, TRAIT_SECURITY_HUD) && !HAS_TRAIT(human_or_ghost_user, TRAIT_MEDICAL_HUD)) return var/obj/item/photo/photo_from_record = null if(href_list["photo_front"]) @@ -131,10 +120,11 @@ else if(href_list["photo_side"]) photo_from_record = target_record.get_side_photo() if(photo_from_record) - photo_from_record.show(human_user) + photo_from_record.show(human_or_ghost_user) return - if(href_list["hud"] == "m") + if(ishuman(human_or_ghost_user) && href_list["hud"] == "m") + var/mob/living/carbon/human/human_user = human_or_ghost_user if(!HAS_TRAIT(human_user, TRAIT_MEDICAL_HUD)) return if(href_list["evaluation"]) @@ -209,42 +199,45 @@ to_chat(human_user, "Detected physiological traits:\n[quirkstring]") else to_chat(usr, "No physiological traits found.") - //SKYRAT EDIT ADDITION BEGIN - EXAMINE RECORDS + //NOVA EDIT ADDITION BEGIN - EXAMINE RECORDS if(href_list["medrecords"]) to_chat(usr, "Medical Record: [target_record.past_medical_records]") if(href_list["genrecords"]) to_chat(usr, "General Record: [target_record.past_general_records]") - //SKYRAT EDIT END + //NOVA EDIT END return //Medical HUD ends here. if(href_list["hud"] == "s") - if(!HAS_TRAIT(human_user, TRAIT_SECURITY_HUD)) - return - if(human_user.stat || human_user == src) //|| !human_user.canmove || human_user.restrained()) Fluff: Sechuds have eye-tracking technology and sets 'arrest' to people that the wearer looks and blinks at. - return //Non-fluff: This allows sec to set people to arrest as they get disarmed or beaten - // Checks the user has security clearence before allowing them to change arrest status via hud, comment out to enable all access var/allowed_access = null - var/obj/item/clothing/glasses/hud/security/user_glasses = human_user.glasses - if(istype(user_glasses) && (user_glasses.obj_flags & EMAGGED)) - allowed_access = "@%&ERROR_%$*" - else //Implant and standard glasses check access - if(human_user.wear_id) - var/list/access = human_user.wear_id.GetAccess() - if(ACCESS_SECURITY in access) - allowed_access = human_user.get_authentification_name() - - if(!allowed_access) - to_chat(human_user, span_warning("ERROR: Invalid access.")) + if(!HAS_TRAIT(human_or_ghost_user, TRAIT_SECURITY_HUD)) return + if(ishuman(human_or_ghost_user)) + var/mob/living/carbon/human/human_user = human_or_ghost_user + if(human_user.stat || human_user == src) //|| !human_user.canmove || human_user.restrained()) Fluff: Sechuds have eye-tracking technology and sets 'arrest' to people that the wearer looks and blinks at. + return //Non-fluff: This allows sec to set people to arrest as they get disarmed or beaten + // Checks the user has security clearence before allowing them to change arrest status via hud, comment out to enable all access + var/obj/item/clothing/glasses/hud/security/user_glasses = human_user.glasses + if(istype(user_glasses) && (user_glasses.obj_flags & EMAGGED)) + allowed_access = "@%&ERROR_%$*" + else //Implant and standard glasses check access + if(human_user.wear_id) + var/list/access = human_user.wear_id.GetAccess() + if(ACCESS_SECURITY in access) + allowed_access = human_user.get_authentification_name() + + if(!allowed_access) + to_chat(human_user, span_warning("ERROR: Invalid access.")) + return if(!perpname) - to_chat(human_user, span_warning("ERROR: Can not identify target.")) + to_chat(human_or_ghost_user, span_warning("ERROR: Can not identify target.")) return target_record = find_record(perpname) if(!target_record) - to_chat(usr, span_warning("ERROR: Unable to locate data core entry for target.")) + to_chat(human_or_ghost_user, span_warning("ERROR: Unable to locate data core entry for target.")) return - if(href_list["status"]) + if(ishuman(human_or_ghost_user) && href_list["status"]) + var/mob/living/carbon/human/human_user = human_or_ghost_user var/new_status = tgui_input_list(human_user, "Specify a new criminal status for this person.", "Security HUD", WANTED_STATUSES(), target_record.wanted_status) if(!new_status || !target_record || !human_user.canUseHUD() || !HAS_TRAIT(human_user, TRAIT_SECURITY_HUD)) return @@ -260,83 +253,84 @@ return if(href_list["view"]) - if(!human_user.canUseHUD()) + if(ishuman(human_or_ghost_user)) + var/mob/living/carbon/human/human_user = human_or_ghost_user + if(!human_user.canUseHUD()) + return + if(!HAS_TRAIT(human_or_ghost_user, TRAIT_SECURITY_HUD)) return - if(!HAS_TRAIT(human_user, TRAIT_SECURITY_HUD)) - return - to_chat(human_user, "Name: [target_record.name]") - to_chat(human_user, "Criminal Status: [target_record.wanted_status]") - to_chat(human_user, "Citations: [length(target_record.citations)]") - to_chat(human_user, "Note: [target_record.security_note || "None"]") - to_chat(human_user, "Rapsheet: [length(target_record.crimes)] incidents") + var/sec_record_message = "" + sec_record_message += "Name: [target_record.name]" + sec_record_message += "\nCriminal Status: [target_record.wanted_status]" + sec_record_message += "\nCitations: [length(target_record.citations)]" + sec_record_message += "\nNote: [target_record.security_note || "None"]" + sec_record_message += "\nRapsheet: [length(target_record.crimes)] incidents" if(length(target_record.crimes)) for(var/datum/crime/crime in target_record.crimes) if(!crime.valid) - to_chat(human_user, span_notice("-- REDACTED --")) + sec_record_message += span_notice("\n-- REDACTED --") continue - to_chat(human_user, "Crime: [crime.name]") - to_chat(human_user, "Details: [crime.details]") - to_chat(human_user, "Added by [crime.author] at [crime.time]") - to_chat(human_user, "----------") - + sec_record_message += "\nCrime: [crime.name]" + sec_record_message += "\nDetails: [crime.details]" + sec_record_message += "\nAdded by [crime.author] at [crime.time]" + to_chat(human_or_ghost_user, examine_block(sec_record_message)) return + if(ishuman(human_or_ghost_user)) + var/mob/living/carbon/human/human_user = human_or_ghost_user + //NOVA EDIT ADDITION BEGIN - EXAMINE RECORDS + if(href_list["genrecords"]) + if(!human_user.canUseHUD()) + return + if(!HAS_TRAIT(human_user, TRAIT_SECURITY_HUD)) + return + to_chat(human_user, "General Record: [target_record.past_general_records]") + + if(href_list["secrecords"]) + if(!human_user.canUseHUD()) + return + if(!HAS_TRAIT(human_user, TRAIT_SECURITY_HUD)) + return + to_chat(human_user, "Security Record: [target_record.past_security_records]") + //NOVA EDIT ADDITION END + if(href_list["add_citation"]) + var/max_fine = CONFIG_GET(number/maxfine) + var/citation_name = tgui_input_text(human_user, "Citation crime", "Security HUD") + var/fine = tgui_input_number(human_user, "Citation fine", "Security HUD", 50, max_fine, 5) + if(!fine || !target_record || !citation_name || !allowed_access || !isnum(fine) || fine > max_fine || fine <= 0 || !human_user.canUseHUD() || !HAS_TRAIT(human_user, TRAIT_SECURITY_HUD)) + return + + var/datum/crime/citation/new_citation = new(name = citation_name, author = allowed_access, fine = fine) + + target_record.citations += new_citation + new_citation.alert_owner(usr, src, target_record.name, "You have been fined [fine] credits for '[citation_name]'. Fines may be paid at security.") + investigate_log("New Citation: [citation_name] Fine: [fine] | Added to [target_record.name] by [key_name(human_user)]", INVESTIGATE_RECORDS) + SSblackbox.ReportCitation(REF(new_citation), human_user.ckey, human_user.real_name, target_record.name, citation_name, fine) - //SKYRAT EDIT ADDITION BEGIN - EXAMINE RECORDS - if(href_list["genrecords"]) - if(!human_user.canUseHUD()) - return - if(!HAS_TRAIT(human_user, TRAIT_SECURITY_HUD)) - return - to_chat(human_user, "General Record: [target_record.past_general_records]") - - if(href_list["secrecords"]) - if(!human_user.canUseHUD()) - return - if(!HAS_TRAIT(human_user, TRAIT_SECURITY_HUD)) - return - to_chat(human_user, "Security Record: [target_record.past_security_records]") - //SKYRAT EDIT END - - if(href_list["add_citation"]) - var/max_fine = CONFIG_GET(number/maxfine) - var/citation_name = tgui_input_text(human_user, "Citation crime", "Security HUD") - var/fine = tgui_input_number(human_user, "Citation fine", "Security HUD", 50, max_fine, 5) - if(!fine || !target_record || !citation_name || !allowed_access || !isnum(fine) || fine > max_fine || fine <= 0 || !human_user.canUseHUD() || !HAS_TRAIT(human_user, TRAIT_SECURITY_HUD)) return - var/datum/crime/citation/new_citation = new(name = citation_name, author = allowed_access, fine = fine) + if(href_list["add_crime"]) + var/crime_name = tgui_input_text(human_user, "Crime name", "Security HUD") + if(!target_record || !crime_name || !allowed_access || !human_user.canUseHUD() || !HAS_TRAIT(human_user, TRAIT_SECURITY_HUD)) + return - target_record.citations += new_citation - new_citation.alert_owner(usr, src, target_record.name, "You have been fined [fine] credits for '[citation_name]'. Fines may be paid at security.") - investigate_log("New Citation: [citation_name] Fine: [fine] | Added to [target_record.name] by [key_name(human_user)]", INVESTIGATE_RECORDS) - SSblackbox.ReportCitation(REF(new_citation), human_user.ckey, human_user.real_name, target_record.name, citation_name, fine) + var/datum/crime/new_crime = new(name = crime_name, author = allowed_access) - return + target_record.crimes += new_crime + investigate_log("New Crime: [crime_name] | Added to [target_record.name] by [key_name(human_user)]", INVESTIGATE_RECORDS) + to_chat(human_user, span_notice("Successfully added a crime.")) - if(href_list["add_crime"]) - var/crime_name = tgui_input_text(human_user, "Crime name", "Security HUD") - if(!target_record || !crime_name || !allowed_access || !human_user.canUseHUD() || !HAS_TRAIT(human_user, TRAIT_SECURITY_HUD)) return - var/datum/crime/new_crime = new(name = crime_name, author = allowed_access) + if(href_list["add_note"]) + var/new_note = tgui_input_text(human_user, "Security note", "Security Records", multiline = TRUE) + if(!target_record || !new_note || !allowed_access || !human_user.canUseHUD() || !HAS_TRAIT(human_user, TRAIT_SECURITY_HUD)) + return - target_record.crimes += new_crime - investigate_log("New Crime: [crime_name] | Added to [target_record.name] by [key_name(human_user)]", INVESTIGATE_RECORDS) - to_chat(human_user, span_notice("Successfully added a crime.")) + target_record.security_note = new_note - return - - if(href_list["add_note"]) - var/new_note = tgui_input_text(human_user, "Security note", "Security Records", multiline = TRUE) - if(!target_record || !new_note || !allowed_access || !human_user.canUseHUD() || !HAS_TRAIT(human_user, TRAIT_SECURITY_HUD)) return - - target_record.security_note = new_note - - return - - //SKYRAT EDIT ADDITION BEGIN - VIEW RECORDS + //NOVA EDIT ADDITION BEGIN - VIEW RECORDS if(href_list["bgrecords"]) if(isobserver(usr) || usr.mind.can_see_exploitables || usr.mind.has_exploitables_override) var/examined_name = get_face_name(get_id_name("")) @@ -347,7 +341,7 @@ var/examined_name = get_face_name(get_id_name("")) //Named as such because this is the name we see when we examine var/datum/record/crew/target_record = find_record(examined_name) to_chat(usr, "Exploitable information: [target_record.exploitable_information]") - //SKYRAT EDIT END + //NOVA EDIT END ..() //end of this massive fucking chain. TODO: make the hud chain not spooky. - Yeah, great job doing that. @@ -385,8 +379,10 @@ 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].")) +#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) + if(judgement_criteria & JUDGE_EMAGGED || HAS_TRAIT(src, TRAIT_ALWAYS_WANTED)) return 10 //Everyone is a criminal! var/threatcount = 0 @@ -413,16 +409,17 @@ //Check for ID var/obj/item/card/id/idcard = get_idcard(FALSE) - if( (judgement_criteria & JUDGE_IDCHECK) && !idcard && name == "Unknown") + threatcount += idcard?.trim.threat_modifier || 0 + if((judgement_criteria & JUDGE_IDCHECK) && isnull(idcard) && name == "Unknown") threatcount += 4 //Check for weapons - if( (judgement_criteria & JUDGE_WEAPONCHECK) && weaponcheck) - if(!idcard || !(ACCESS_WEAPONS in idcard.access)) - for(var/obj/item/I in held_items) //if they're holding a gun - if(weaponcheck.Invoke(I)) + if((judgement_criteria & JUDGE_WEAPONCHECK)) + if(isnull(idcard) || !(ACCESS_WEAPONS in idcard.access)) + for(var/obj/item/toy_gun in held_items) //if they're holding a gun + if(CHECK_PERMIT(toy_gun)) threatcount += 4 - if(weaponcheck.Invoke(belt) || weaponcheck.Invoke(back)) //if a weapon is present in the belt or back slot + if(CHECK_PERMIT(belt) || CHECK_PERMIT(back)) //if a weapon is present in the belt or back slot threatcount += 2 //not enough to trigger look_for_perp() on it's own unless they also have criminal status. //Check for arrest warrant @@ -444,7 +441,7 @@ if(istype(head, /obj/item/clothing/head/wizard)) threatcount += 2 - /* SKYRAT EDIT - REMOVAL + /* NOVA EDIT - REMOVAL //Check for nonhuman scum if(dna && dna.species.id && dna.species.id != "human") threatcount += 1 @@ -456,6 +453,7 @@ return threatcount +#undef CHECK_PERMIT //Used for new human mobs created by cloning/goleming/podding /mob/living/carbon/human/proc/set_cloned_appearance() @@ -787,23 +785,27 @@ VV_DROPDOWN_OPTION(VV_HK_SET_SPECIES, "Set Species") VV_DROPDOWN_OPTION(VV_HK_PURRBATION, "Toggle Purrbation") VV_DROPDOWN_OPTION(VV_HK_APPLY_DNA_INFUSION, "Apply DNA Infusion") + VV_DROPDOWN_OPTION(VV_HK_TURN_INTO_MMI, "Turn into MMI") /mob/living/carbon/human/vv_do_topic(list/href_list) . = ..() + + if(!.) + return + if(href_list[VV_HK_COPY_OUTFIT]) if(!check_rights(R_SPAWN)) return copy_outfit() + if(href_list[VV_HK_MOD_MUTATIONS]) if(!check_rights(R_SPAWN)) return - var/list/options = list("Clear"="Clear") for(var/x in subtypesof(/datum/mutation/human)) var/datum/mutation/human/mut = x var/name = initial(mut.name) options[dna.check_mutation(mut) ? "[name] (Remove)" : "[name] (Add)"] = mut - var/result = input(usr, "Choose mutation to add/remove","Mutation Mod") as null|anything in sort_list(options) if(result) if(result == "Clear") @@ -814,25 +816,21 @@ dna.remove_mutation(mut) else dna.add_mutation(mut) + if(href_list[VV_HK_MOD_QUIRKS]) if(!check_rights(R_SPAWN)) return - var/list/options = list("Clear"="Clear") for(var/type in subtypesof(/datum/quirk)) var/datum/quirk/quirk_type = type - if(initial(quirk_type.abstract_parent_type) == type) continue - - // SKYRAT EDIT ADDITION START + // NOVA EDIT ADDITION START if(initial(quirk_type.erp_quirk) && CONFIG_GET(flag/disable_erp_preferences)) continue - // SKYRAT EDIT ADDITION END - + // NOVA EDIT ADDITION END var/qname = initial(quirk_type.name) options[has_quirk(quirk_type) ? "[qname] (Remove)" : "[qname] (Add)"] = quirk_type - var/result = input(usr, "Choose quirk to add/remove","Quirk Mod") as null|anything in sort_list(options) if(result) if(result == "Clear") @@ -844,6 +842,7 @@ remove_quirk(T) else add_quirk(T) + if(href_list[VV_HK_SET_SPECIES]) if(!check_rights(R_SPAWN)) return @@ -852,6 +851,7 @@ var/newtype = GLOB.species_list[result] admin_ticket_log("[key_name_admin(usr)] has modified the bodyparts of [src] to [result]") set_species(newtype) + if(href_list[VV_HK_PURRBATION]) if(!check_rights(R_SPAWN)) return @@ -865,13 +865,13 @@ var/msg = span_notice("[key_name_admin(usr)] has put [key_name(src)] on purrbation.") message_admins(msg) admin_ticket_log(src, msg) - else to_chat(usr, "Removed [src] from purrbation.") log_admin("[key_name(usr)] has removed [key_name(src)] from purrbation.") var/msg = span_notice("[key_name_admin(usr)] has removed [key_name(src)] from purrbation.") message_admins(msg) admin_ticket_log(src, msg) + if(href_list[VV_HK_APPLY_DNA_INFUSION]) if(!check_rights(R_SPAWN)) return @@ -886,6 +886,32 @@ to_chat(usr, "Failed to apply DNA Infusion to [src].") log_admin("[key_name(usr)] failed to apply a DNA Infusion to [key_name(src)].") + if(href_list[VV_HK_TURN_INTO_MMI]) + if(!check_rights(R_DEBUG)) + return + + var/result = input(usr, "This will delete the mob, are you sure?", "Turn into MMI") in list("Yes", "No") + if(result != "Yes") + return + + var/obj/item/organ/internal/brain/target_brain = get_organ_slot(ORGAN_SLOT_BRAIN) + + if(isnull(target_brain)) + to_chat(usr, "This mob has no brain to insert into an MMI.") + return + + var/obj/item/mmi/new_mmi = new(get_turf(src)) + + target_brain.Remove(src) + new_mmi.force_brain_into(target_brain) + + to_chat(usr, "Turned [src] into an MMI.") + log_admin("[key_name(usr)] turned [key_name_and_tag(src)] into an MMI.") + + qdel(src) + + + /mob/living/carbon/human/limb_attack_self() var/obj/item/bodypart/arm = hand_bodyparts[active_hand_index] if(arm) @@ -919,18 +945,25 @@ return var/carrydelay = 5 SECONDS //if you have latex you are faster at grabbing - var/skills_space = "" //cobby told me to do this + var/skills_space + var/fitness_level = mind.get_skill_level(/datum/skill/fitness) - 1 if(HAS_TRAIT(src, TRAIT_QUICKER_CARRY)) - carrydelay = 3 SECONDS - skills_space = " very quickly" + carrydelay -= 2 SECONDS else if(HAS_TRAIT(src, TRAIT_QUICK_CARRY)) - carrydelay = 4 SECONDS + carrydelay -= 1 SECONDS + + // can remove up to 2 seconds at legendary + carrydelay -= fitness_level * (1/3) SECONDS + + if(carrydelay <= 3 SECONDS) + skills_space = " very quickly" + else if(carrydelay <= 4 SECONDS) skills_space = " quickly" - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION else if(HAS_TRAIT(target, TRAIT_OVERSIZED) && !HAS_TRAIT(src, TRAIT_OVERSIZED)) visible_message(span_warning("[src] tries to carry [target], but they are too heavy!")) return - //SKYRAT EDIT END + //NOVA EDIT END visible_message(span_notice("[src] starts[skills_space] lifting [target] onto [p_their()] back..."), span_notice("You[skills_space] start to lift [target] onto your back...")) if(!do_after(src, carrydelay, target)) @@ -957,7 +990,7 @@ if(target.incapacitated(IGNORE_GRAB) || incapacitated(IGNORE_GRAB)) target.visible_message(span_warning("[target] can't hang onto [src]!")) return - //SKYRAT EDIT START + //NOVA EDIT START if(HAS_TRAIT(target, TRAIT_OVERSIZED) && !HAS_TRAIT(src, TRAIT_OVERSIZED)) target.visible_message(span_warning("[target] is too heavy for [src] to carry!")) var/dam_zone = pick(BODY_ZONE_CHEST, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) @@ -979,7 +1012,7 @@ if(get_turf(target) != get_turf(src)) target.throw_at(get_turf(src), 1, 1, spin=FALSE, quickstart=FALSE) return - //SKYRAT EDIT END + //NOVA EDIT END return buckle_mob(target, TRUE, TRUE, RIDER_NEEDS_ARMS) @@ -1001,7 +1034,6 @@ /mob/living/carbon/human/updatehealth() . = ..() - dna?.species.spec_updatehealth(src) if(HAS_TRAIT(src, TRAIT_IGNOREDAMAGESLOWDOWN)) remove_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown) remove_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown_flying) @@ -1052,7 +1084,7 @@ if (!isnull(race)) dna.species = new race -/mob/living/carbon/human/species/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, list/override_features, list/override_mutantparts, list/override_markings, retain_features = FALSE, retain_mutantparts = FALSE) // SKYRAT EDIT - Customization +/mob/living/carbon/human/species/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, list/override_features, list/override_mutantparts, list/override_markings, retain_features = FALSE, retain_mutantparts = FALSE) // NOVA EDIT - Customization . = ..() if(use_random_name) fully_replace_character_name(real_name, dna.species.random_name()) diff --git a/code/modules/mob/living/carbon/human/human_context.dm b/code/modules/mob/living/carbon/human/human_context.dm index f0fd30f6d491d5..0321ba5c9ca16e 100644 --- a/code/modules/mob/living/carbon/human/human_context.dm +++ b/code/modules/mob/living/carbon/human/human_context.dm @@ -17,7 +17,7 @@ context[SCREENTIP_CONTEXT_CTRL_LMB] = "Strangle" else return . - // SKYRAT EDIT START - screentips for grab interactions (slams/suplexes/dislocations) + // NOVA EDIT START - screentips for grab interactions (slams/suplexes/dislocations) if(user.combat_mode && user.grab_state > GRAB_PASSIVE) switch(deprecise_zone(user.zone_selected)) if (BODY_ZONE_HEAD) @@ -27,7 +27,7 @@ context[SCREENTIP_CONTEXT_ALT_LMB] = "Suplex" else context[SCREENTIP_CONTEXT_ALT_LMB] = "Dislocate" - // SKYRAT EDIT END + // NOVA EDIT END else context[SCREENTIP_CONTEXT_CTRL_LMB] = "Pull" diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 860e8392dd40ca..0435be5d3be52e 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -10,7 +10,7 @@ var/obj/item/bodypart/affecting = get_bodypart(check_zone(def_zone)) if(affecting) return check_armor(affecting, type) - //If a specific bodypart is targetted, check how that bodypart is protected and return the value. + //If a specific bodypart is targeted, 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) @@ -68,7 +68,7 @@ return BULLET_ACT_FORCE_PIERCE // complete projectile permutation - if(check_shields(bullet, bullet.damage, "the [bullet.name]", PROJECTILE_ATTACK, bullet.armour_penetration, bullet.damage_type)) + if(check_block(bullet, bullet.damage, "the [bullet.name]", PROJECTILE_ATTACK, bullet.armour_penetration, bullet.damage_type)) bullet.on_hit(src, 100, def_zone, piercing_hit) return BULLET_ACT_HIT @@ -87,98 +87,39 @@ return TRUE return FALSE -/mob/living/carbon/human/proc/check_shields(atom/AM, damage, attack_text = "the attack", attack_type = MELEE_ATTACK, armour_penetration = 0, damage_type = BRUTE) +/mob/living/carbon/human/check_block(atom/hit_by, damage, attack_text = "the attack", attack_type = MELEE_ATTACK, armour_penetration = 0, damage_type = BRUTE) + . = ..() + if(.) + return TRUE + var/block_chance_modifier = round(damage / -3) + for(var/obj/item/worn_thing in get_equipped_items(include_pockets = FALSE) + held_items) + // Things that are supposed to be worn, being held = cannot block + if(isclothing(worn_thing)) + if(worn_thing in held_items) + continue + // Things that are supposed to be held, being worn = cannot block + else + if(!(worn_thing in held_items)) + continue - for(var/obj/item/I in held_items) - if(!isclothing(I)) - var/final_block_chance = I.block_chance - (clamp((armour_penetration-I.armour_penetration)/2,0,100)) + block_chance_modifier //So armour piercing blades can still be parried by other blades, for example - if(I.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type, damage_type)) - return TRUE - if(wear_suit) - var/final_block_chance = wear_suit.block_chance - (clamp((armour_penetration-wear_suit.armour_penetration)/2,0,100)) + block_chance_modifier - if(wear_suit.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type, damage_type)) + var/final_block_chance = worn_thing.block_chance - (clamp((armour_penetration - worn_thing.armour_penetration) / 2, 0, 100)) + block_chance_modifier + if(worn_thing.hit_reaction(src, hit_by, attack_text, final_block_chance, damage, attack_type, damage_type)) return TRUE - if(w_uniform) - var/final_block_chance = w_uniform.block_chance - (clamp((armour_penetration-w_uniform.armour_penetration)/2,0,100)) + block_chance_modifier - if(w_uniform.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type, damage_type)) - return TRUE - if(wear_neck) - var/final_block_chance = wear_neck.block_chance - (clamp((armour_penetration-wear_neck.armour_penetration)/2,0,100)) + block_chance_modifier - if(wear_neck.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type, damage_type)) - return TRUE - if(head) - var/final_block_chance = head.block_chance - (clamp((armour_penetration-head.armour_penetration)/2,0,100)) + block_chance_modifier - if(head.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type, damage_type)) - return TRUE - if(SEND_SIGNAL(src, COMSIG_HUMAN_CHECK_SHIELDS, AM, damage, attack_text, attack_type, armour_penetration, damage_type) & SHIELD_BLOCK) - return TRUE - return FALSE -/mob/living/carbon/human/proc/check_block() - if(mind) - if(mind.martial_art && prob(mind.martial_art.block_chance) && mind.martial_art.can_use(src) && throw_mode && !incapacitated(IGNORE_GRAB)) - return TRUE return FALSE -/mob/living/carbon/human/hitby(atom/movable/AM, skipcatch = FALSE, hitpush = TRUE, blocked = FALSE, datum/thrownthing/throwingdatum) - if(dna?.species) - var/spec_return = dna.species.spec_hitby(AM, src) - if(spec_return) - return spec_return - var/obj/item/I - var/damage_type = BRUTE - var/throwpower = 30 - if(isitem(AM)) - I = AM - if(I.thrownby == WEAKREF(src)) //No throwing stuff at yourself to trigger hit reactions - return ..() - throwpower = I.throwforce - damage_type = I.damtype - if(check_shields(AM, throwpower, "\the [AM.name]", THROWN_PROJECTILE_ATTACK, 0, damage_type)) - hitpush = FALSE - skipcatch = TRUE - blocked = TRUE - - return ..() - /mob/living/carbon/human/grippedby(mob/living/user, instant = FALSE) if(w_uniform) w_uniform.add_fingerprint(user) ..() - -/mob/living/carbon/human/attacked_by(obj/item/I, mob/living/user) - if(!I || !user) - return FALSE - - var/obj/item/bodypart/affecting - if(user == src) - affecting = get_bodypart(check_zone(user.zone_selected)) //stabbing yourself always hits the right target - else - var/zone_hit_chance = 80 - if(body_position == LYING_DOWN) // half as likely to hit a different zone if they're on the ground - zone_hit_chance += 10 - affecting = get_bodypart(get_random_valid_zone(user.zone_selected, zone_hit_chance)) - var/target_area = parse_zone(check_zone(user.zone_selected)) //our intended target - - SEND_SIGNAL(I, COMSIG_ITEM_ATTACK_ZONE, src, user, affecting) - - SSblackbox.record_feedback("nested tally", "item_used_for_combat", 1, list("[I.force]", "[I.type]")) - SSblackbox.record_feedback("tally", "zone_targeted", 1, target_area) - - // the attacked_by code varies among species - return dna.species.spec_attacked_by(I, user, affecting, src) - - /mob/living/carbon/human/attack_hulk(mob/living/carbon/human/user) . = ..() if(!.) return var/hulk_verb = pick("smash","pummel") - if(check_shields(user, 15, "the [hulk_verb]ing", attack_type = UNARMED_ATTACK)) - return - if(check_block()) //everybody is kung fu fighting + if(check_block(user, 15, "the [hulk_verb]ing", attack_type = UNARMED_ATTACK)) return var/obj/item/bodypart/arm/active_arm = user.get_active_hand() playsound(loc, active_arm.unarmed_attack_sound, 25, TRUE, -1) @@ -238,19 +179,14 @@ var/damage = HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER) ? monkey_mouth.unarmed_damage_high : rand(monkey_mouth.unarmed_damage_low, monkey_mouth.unarmed_damage_high) if(!damage) return FALSE - if(check_shields(user, damage, "the [user.name]")) + if(check_block(user, damage, "the [user.name]")) return FALSE apply_damage(damage, BRUTE, affecting, run_armor_check(affecting, MELEE)) return TRUE -//SKYRAT EDIT REMOVAL BEGIN - SKYRAT_XENO_REDO - Moved to: modular_skyrat\modules\xenos_skyrat_redo\code\human_defense.dm +//NOVA EDIT REMOVAL BEGIN - SKYRAT_XENO_REDO - Moved to: modular_nova\modules\xenos_skyrat_redo\code\human_defense.dm /* /mob/living/carbon/human/attack_alien(mob/living/carbon/alien/adult/user, list/modifiers) - if(check_shields(user, 0, "the [user.name]")) - visible_message(span_danger("[user] attempts to touch [src]!"), \ - span_danger("[user] attempts to touch you!"), span_hear("You hear a swoosh!"), null, user) - to_chat(user, span_warning("You attempt to touch [src]!")) - return FALSE . = ..() if(!.) return @@ -302,7 +238,7 @@ return TRUE apply_damage(damage, BRUTE, affecting, armor_block) */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END /mob/living/carbon/human/attack_larva(mob/living/carbon/alien/larva/L, list/modifiers) @@ -312,7 +248,7 @@ var/damage = rand(L.melee_damage_lower, L.melee_damage_upper) if(!damage) return - if(check_shields(L, damage, "the [L.name]")) + if(check_block(L, damage, "the [L.name]")) return FALSE if(stat != DEAD) L.amount_grown = min(L.amount_grown + damage, L.max_grown) @@ -320,46 +256,6 @@ var/armor_block = run_armor_check(affecting, MELEE) apply_damage(damage, BRUTE, affecting, armor_block) -/mob/living/carbon/human/attack_animal(mob/living/simple_animal/user, list/modifiers) - . = ..() - if(!.) - return - var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) - if(check_shields(user, damage, "the [user.name]", MELEE_ATTACK, user.armour_penetration, user.melee_damage_type)) - return FALSE - var/dam_zone = dismembering_strike(user, pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, 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 = run_armor_check(affecting, MELEE, armour_penetration = user.armour_penetration) - 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 FALSE @@ -477,14 +373,6 @@ //Don't go further if the shock was blocked/too weak. if(!.) return - //SKYRAT EDIT BEGIN: MAKES POWERFUL SHOCKS HAVE A CHANCE TO STOP YOUR HEART. DANGER - if(can_heartattack() && !(flags & SHOCK_ILLUSION) && shock_damage >= 70) - if(shock_damage * siemens_coeff >= 1 && prob(30))//Higher chance to disrupt the pacemaker cells - var/obj/item/organ/internal/heart/heart = get_organ_slot(ORGAN_SLOT_HEART) - heart.Stop() - visible_message("[src.name] briefly twitches; before falling limp - their breathing irratic and chest spasming violently!", \ - "You feel your heart thump eratically; before ceasing to beat, a violent twitch overcoming your form!", ignored_mobs=src) - //SKYRAT EDIT END if(!(flags & SHOCK_ILLUSION)) if(shock_damage * siemens_coeff >= 5) force_say() @@ -677,10 +565,10 @@ body_part.check_for_injuries(src, combined_msg) - //SKYRAT EDIT ADDITION BEGIN - MEDICAL + //NOVA EDIT ADDITION BEGIN - MEDICAL if(body_part.current_gauze) combined_msg += "\t [span_notice("Your [body_part.name] is [body_part.current_gauze.get_gauze_usage_prefix()] with [body_part.current_gauze.get_gauze_description()].")]" - //SKYRAT EDIT END + //NOVA EDIT END for(var/t in missing) combined_msg += span_boldannounce("Your [parse_zone(t)] is missing!") diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index cfda7721da0c97..5dffbcd26c07fa 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -5,7 +5,7 @@ icon = 'icons/mob/human/human.dmi' icon_state = "human_basic" appearance_flags = KEEP_TOGETHER|TILE_BOUND|PIXEL_SCALE|LONG_GLIDE - hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD,ANTAG_HUD,GLAND_HUD,SENTIENT_DISEASE_HUD,FAN_HUD,PERMIT_HUD, DNR_HUD) //SKYRAT EDIT ADDITION - PERMIT_HUD, DNR_HUD + hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPSEC_FIRST_HUD,IMPSEC_SECOND_HUD,ANTAG_HUD,GLAND_HUD,SENTIENT_DISEASE_HUD,FAN_HUD,PERMIT_HUD, DNR_HUD) //NOVA EDIT ADDITION - PERMIT_HUD, DNR_HUD hud_type = /datum/hud/human pressure_resistance = 25 can_buckle = TRUE @@ -13,9 +13,10 @@ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID can_be_shoved_into = TRUE initial_language_holder = /datum/language_holder/empty // We get stuff from our species + flags_1 = PREVENT_CONTENTS_EXPLOSION_1 - maxHealth = HUMAN_MAXHEALTH //SKYRAT EDIT ADDITION - health = HUMAN_MAXHEALTH //SKYRAT EDIT ADDITION + maxHealth = HUMAN_MAXHEALTH //NOVA EDIT ADDITION + health = HUMAN_MAXHEALTH //NOVA EDIT ADDITION //Hair colour and style var/hair_color = "#000000" @@ -55,7 +56,7 @@ var/jumpsuit_style = PREF_SUIT //suit/skirt var/datum/scream_type/selected_scream //SKRYAT EDIT ADDITION - var/datum/laugh_type/selected_laugh //SKYRAT EDIT ADDITION + var/datum/laugh_type/selected_laugh //NOVA EDIT ADDITION //Equipment slots var/obj/item/clothing/wear_suit = null @@ -73,7 +74,11 @@ var/list/datum/bioware/biowares /// What types of mobs are allowed to ride/buckle to this mob - var/static/list/can_ride_typecache = typecacheof(list(/mob/living/carbon/human, /mob/living/simple_animal/slime, /mob/living/simple_animal/parrot)) + var/static/list/can_ride_typecache = typecacheof(list( + /mob/living/basic/parrot, + /mob/living/carbon/human, + /mob/living/simple_animal/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 62fc77bc6cee47..d18c0c800f625e 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -57,7 +57,7 @@ return if_no_id //repurposed proc. Now it combines get_id_name() and get_face_name() to determine a mob's name variable. Made into a separate proc as it'll be useful elsewhere -/mob/living/carbon/human/get_visible_name() +/mob/living/carbon/human/get_visible_name(add_id_name = TRUE) if(HAS_TRAIT(src, TRAIT_UNKNOWN)) return "Unknown" var/list/identity = list(null, null) @@ -67,7 +67,7 @@ var/face_name = !isnull(signal_face) ? signal_face : get_face_name("") var/id_name = !isnull(signal_id) ? signal_id : get_id_name("") if(face_name) - if(id_name && (id_name != face_name)) + if(add_id_name && id_name && (id_name != face_name)) return "[face_name] (as [id_name])" return face_name if(id_name) @@ -83,7 +83,7 @@ if( head && (head.flags_inv&HIDEFACE) ) return if_no_face //Likewise for hats var/obj/item/bodypart/O = get_bodypart(BODY_ZONE_HEAD) - if( !O || (HAS_TRAIT(src, TRAIT_DISFIGURED)) || (O.brutestate+O.burnstate)>2 || cloneloss>50 || !real_name || HAS_TRAIT(src, TRAIT_INVISIBLE_MAN)) //disfigured. use id-name if possible + if( !O || (HAS_TRAIT(src, TRAIT_DISFIGURED)) || (O.brutestate+O.burnstate)>2 || !real_name || HAS_TRAIT(src, TRAIT_INVISIBLE_MAN)) //disfigured. use id-name if possible return if_no_face return real_name @@ -91,7 +91,7 @@ //Useful when player is being seen by other mobs /mob/living/carbon/human/proc/get_id_name(if_no_id = "Unknown") var/obj/item/storage/wallet/wallet = wear_id - var/obj/item/modular_computer/pda/pda = wear_id + var/obj/item/modular_computer/pda = wear_id var/obj/item/card/id/id = wear_id if(HAS_TRAIT(src, TRAIT_UNKNOWN)) . = if_no_id //You get NOTHING, no id name, good day sir @@ -234,7 +234,7 @@ var/t_his = p_their() var/t_is = p_are() //This checks to see if the body is revivable - if(key || !get_organ_by_type(/obj/item/organ/internal/brain) || ghost?.can_reenter_corpse || HAS_TRAIT(src, TRAIT_MIND_TEMPORARILY_GONE)) + if(get_organ_by_type(/obj/item/organ/internal/brain) && (client || HAS_TRAIT(src, TRAIT_MIND_TEMPORARILY_GONE) || (ghost?.can_reenter_corpse && ghost?.client))) return span_deadsay("[t_He] [t_is] limp and unresponsive; there are no signs of life...") else return span_deadsay("[t_He] [t_is] limp and unresponsive; there are no signs of life and [t_his] soul has departed...") diff --git a/code/modules/mob/living/carbon/human/human_stripping.dm b/code/modules/mob/living/carbon/human/human_stripping.dm index d79b6f8623cf30..02f1fdf1b56371 100644 --- a/code/modules/mob/living/carbon/human/human_stripping.dm +++ b/code/modules/mob/living/carbon/human/human_stripping.dm @@ -119,7 +119,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( /datum/strippable_item/mob_item_slot/id key = STRIPPABLE_ITEM_ID item_slot = ITEM_SLOT_ID - can_be_silent = TRUE //SKYRAT EDIT ADDITION + can_be_silent = TRUE //NOVA EDIT ADDITION /datum/strippable_item/mob_item_slot/belt key = STRIPPABLE_ITEM_BELT @@ -136,7 +136,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( /datum/strippable_item/mob_item_slot/pocket /// Which pocket we're referencing. Used for visible text. var/pocket_side - can_be_silent = TRUE //SKYRAT EDIT ADDITION + can_be_silent = TRUE //NOVA EDIT ADDITION /datum/strippable_item/mob_item_slot/pocket/get_obscuring(atom/source) return isnull(get_item(source)) \ @@ -164,7 +164,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( var/result = start_unequip_mob(item, source, user, POCKET_STRIP_DELAY) - if (!(result || HAS_TRAIT(user, TRAIT_STICKY_FINGERS))) //SKYRAT EDIT ADDITION original if (!result) + if (!(result || HAS_TRAIT(user, TRAIT_STICKY_FINGERS))) //NOVA EDIT ADDITION original if (!result) warn_owner(source) return result diff --git a/code/modules/mob/living/carbon/human/human_suicide.dm b/code/modules/mob/living/carbon/human/human_suicide.dm index 77d066290b8833..318cba1587d4a0 100644 --- a/code/modules/mob/living/carbon/human/human_suicide.dm +++ b/code/modules/mob/living/carbon/human/human_suicide.dm @@ -85,8 +85,15 @@ visible_message(span_danger(suicide_message), span_userdanger(suicide_message), span_hear(get_blind_suicide_message())) /mob/living/carbon/human/suicide_log(obj/item/suicide_tool) - investigate_log("has died from committing suicide[suicide_tool ? " with [suicide_tool]" : ""].", INVESTIGATE_DEATHS) - log_message("(job: [src.job ? "[src.job]" : "None"]) committed suicide", LOG_ATTACK) + var/suicide_tool_type = suicide_tool?.type + var/list/suicide_data = null // log_message() is nullsafe for the data field + if(!isnull(suicide_tool)) + suicide_data = list("suicide tool" = suicide_tool_type) + SSblackbox.record_feedback("tally", "suicide_item", 1, suicide_tool_type) + + investigate_log("has died from committing suicide[suicide_tool ? " with [suicide_tool] ([suicide_tool_type])" : ""].", INVESTIGATE_DEATHS) + log_message("(job: [src.job ? "[src.job]" : "None"]) committed suicide", LOG_ATTACK, data = suicide_data) + #undef HUMAN_BRAIN_DAMAGE_SUICIDE_MESSAGE #undef HUMAN_COMBAT_MODE_SUICIDE_MESSAGE 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 26ec247b4632c6..996a67ec26aaec 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -101,49 +101,49 @@ There are several things that need to be remembered: var/handled_by_bodytype = TRUE var/icon_file var/woman - var/digi // SKYRAT EDIT ADDITION - Digi female gender shaping - var/female_sprite_flags = uniform.female_sprite_flags // SKYRAT EDIT ADDITION - Digi female gender shaping - var/mutant_styles = NONE // SKYRAT EDIT ADDITON - mutant styles to pass down to build_worn_icon. + var/digi // NOVA EDIT ADDITION - Digi female gender shaping + var/female_sprite_flags = uniform.female_sprite_flags // NOVA EDIT ADDITION - Digi female gender shaping + var/mutant_styles = NONE // NOVA EDIT ADDITON - mutant styles to pass down to build_worn_icon. //BEGIN SPECIES HANDLING if((bodytype & BODYTYPE_MONKEY) && (uniform.supports_variations_flags & CLOTHING_MONKEY_VARIATION)) - icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_UNIFORM, w_uniform, src) // SKYRAT EDIT CHANGE - ORIGINAL: icon_file = MONKEY_UNIFORM_FILE + icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_UNIFORM, w_uniform, src) // NOVA EDIT CHANGE - ORIGINAL: icon_file = MONKEY_UNIFORM_FILE else if((bodytype & BODYTYPE_DIGITIGRADE) && (uniform.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) - icon_file = uniform.worn_icon_digi || DIGITIGRADE_UNIFORM_FILE // SKYRAT EDIT CHANGE - ORIGINAL: icon_file = DIGITIGRADE_UNIFORM_FILE - digi = TRUE // SKYRAT EDIT ADDITION - Digi female gender shaping - // SKYRAT EDIT ADDITION - birbs + icon_file = uniform.worn_icon_digi || DIGITIGRADE_UNIFORM_FILE // NOVA EDIT CHANGE - ORIGINAL: icon_file = DIGITIGRADE_UNIFORM_FILE + digi = TRUE // NOVA EDIT ADDITION - Digi female gender shaping + // NOVA EDIT ADDITION - birbs else if(bodytype & BODYTYPE_CUSTOM) icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_UNIFORM, w_uniform, src) // Might have to refactor how this works eventually, maybe. - // SKYRAT EDIT END + // NOVA EDIT END //Female sprites have lower priority than digitigrade sprites - if(dna.species.sexes && (bodytype & BODYTYPE_HUMANOID) && physique == FEMALE && !(female_sprite_flags & NO_FEMALE_UNIFORM)) //Agggggggghhhhh // SKYRAT EDIT CHANGE - ORIGINAL: else if(dna.species.sexes && (bodytype & BODYTYPE_HUMANOID) && physique == FEMALE && !(uniform.female_sprite_flags & NO_FEMALE_UNIFORM)) + if(dna.species.sexes && (bodytype & BODYTYPE_HUMANOID) && physique == FEMALE && !(female_sprite_flags & NO_FEMALE_UNIFORM)) //Agggggggghhhhh // NOVA EDIT CHANGE - ORIGINAL: else if(dna.species.sexes && (bodytype & BODYTYPE_HUMANOID) && physique == FEMALE && !(uniform.female_sprite_flags & NO_FEMALE_UNIFORM)) woman = TRUE - // SKYRAT EDIT ADDITION START - Digi female gender shaping + // NOVA EDIT ADDITION START - Digi female gender shaping if(digi) mutant_styles |= STYLE_DIGI // for passing to wear_female_version if(!(female_sprite_flags & FEMALE_UNIFORM_DIGI_FULL)) female_sprite_flags &= ~FEMALE_UNIFORM_FULL // clear the FEMALE_UNIFORM_DIGI_FULL bit if it was set, we don't want that. female_sprite_flags |= FEMALE_UNIFORM_TOP_ONLY // And set the FEMALE_UNIFORM_TOP bit if it is unset. - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END if(!icon_exists(icon_file, RESOLVE_ICON_STATE(uniform))) icon_file = DEFAULT_UNIFORM_FILE handled_by_bodytype = FALSE - // SKYRAT EDIT ADDITION START - Taur-friendly suits! + // NOVA EDIT ADDITION START - Taur-friendly suits! if(bodytype & BODYTYPE_TAUR) if(istype(uniform) && uniform.gets_cropped_on_taurs) mutant_styles |= get_taur_mode() - // SKYRAT EDIT END + // NOVA EDIT END //END SPECIES HANDLING uniform_overlay = uniform.build_worn_icon( default_layer = UNIFORM_LAYER, default_icon_file = icon_file, isinhands = FALSE, - female_uniform = woman ? female_sprite_flags : null, // SKYRAT EDIT CHANGE - Digi female gender shaping - ORIGINAL: female_uniform = woman ? uniform.female_sprite_flags : null, + female_uniform = woman ? female_sprite_flags : null, // NOVA EDIT CHANGE - Digi female gender shaping - ORIGINAL: female_uniform = woman ? uniform.female_sprite_flags : null, override_state = target_overlay, override_file = handled_by_bodytype ? icon_file : null, - mutant_styles = mutant_styles, // SKYRAT EDIT ADDITION - Taur-friendly uniforms! + mutant_styles = mutant_styles, // NOVA EDIT ADDITION - Taur-friendly uniforms! ) var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST) @@ -209,16 +209,16 @@ There are several things that need to be remembered: var/icon_file = 'icons/mob/clothing/hands.dmi' - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION var/mutant_override = FALSE if(bodytype & BODYTYPE_CUSTOM) var/species_icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_GLOVES, gloves, src) if(species_icon_file) icon_file = species_icon_file mutant_override = TRUE - // SKYRAT EDIT END + // NOVA EDIT END - var/mutable_appearance/gloves_overlay = gloves.build_worn_icon(default_layer = GLOVES_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE + var/mutable_appearance/gloves_overlay = gloves.build_worn_icon(default_layer = GLOVES_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // NOVA EDIT CHANGE var/feature_y_offset = 0 //needs to be typed, hand_bodyparts can have nulls @@ -252,21 +252,21 @@ There are several things that need to be remembered: var/icon_file = 'icons/mob/clothing/eyes.dmi' - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION var/mutant_override = FALSE if(bodytype & BODYTYPE_CUSTOM) var/species_icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_GLASSES, glasses, src) if(species_icon_file) icon_file = species_icon_file mutant_override = TRUE - // SKYRAT EDIT END + // NOVA EDIT END - var/mutable_appearance/glasses_overlay = glasses.build_worn_icon(default_layer = GLASSES_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE + var/mutable_appearance/glasses_overlay = glasses.build_worn_icon(default_layer = GLASSES_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // NOVA EDIT CHANGE - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION if(!mutant_override) my_head.worn_glasses_offset?.apply_offset(glasses_overlay) - // SKYRAT EDIT END + // NOVA EDIT END overlays_standing[GLASSES_LAYER] = glasses_overlay apply_overlay(GLASSES_LAYER) @@ -291,21 +291,21 @@ There are several things that need to be remembered: var/icon_file = 'icons/mob/clothing/ears.dmi' - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION var/mutant_override = FALSE if(bodytype & BODYTYPE_CUSTOM) var/species_icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_EARS, ears, src) if(species_icon_file) icon_file = species_icon_file mutant_override = TRUE - // SKYRAT EDIT END + // NOVA EDIT END - var/mutable_appearance/ears_overlay = ears.build_worn_icon(default_layer = EARS_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE + var/mutable_appearance/ears_overlay = ears.build_worn_icon(default_layer = EARS_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // NOVA EDIT CHANGE - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION if(!mutant_override) my_head.worn_ears_offset?.apply_offset(ears_overlay) - // SKYRAT EDIT END + // NOVA EDIT END overlays_standing[EARS_LAYER] = ears_overlay apply_overlay(EARS_LAYER) @@ -325,22 +325,28 @@ There are several things that need to be remembered: var/icon_file = 'icons/mob/clothing/neck.dmi' - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION var/mutant_override = FALSE if(bodytype & BODYTYPE_CUSTOM) var/species_icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_NECK, wear_neck, src) if(species_icon_file) icon_file = species_icon_file mutant_override = TRUE - // SKYRAT EDIT END + //On the off-chance we have a neck item that has to move around or cover the muzzle, it ALSO gets worn_icon_muzzled compatiability + if((bodytype & BODYTYPE_SNOUTED) && (worn_item.supports_variations_flags & CLOTHING_SNOUTED_VARIATION) && worn_item.worn_icon_muzzled) + var/snout_icon_file = worn_item.worn_icon_muzzled + if(snout_icon_file && icon_exists(snout_icon_file, RESOLVE_ICON_STATE(worn_item))) + icon_file = snout_icon_file + mutant_override = TRUE + // NOVA EDIT END - var/mutable_appearance/neck_overlay = worn_item.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE + var/mutable_appearance/neck_overlay = worn_item.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // NOVA EDIT CHANGE var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST) - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION if(!mutant_override) my_chest?.worn_belt_offset?.apply_offset(neck_overlay) - // SKYRAT EDIT END + // NOVA EDIT END overlays_standing[NECK_LAYER] = neck_overlay apply_overlay(NECK_LAYER) @@ -364,14 +370,14 @@ There are several things that need to be remembered: var/icon_file = DEFAULT_SHOES_FILE - // SKYRAT EDIT ADDITION START + // NOVA EDIT ADDITION START var/mutant_override = FALSE if((bodytype & BODYTYPE_DIGITIGRADE) && (worn_item.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) var/obj/item/bodypart/leg = src.get_bodypart(BODY_ZONE_L_LEG) if(leg.limb_id == "digitigrade")//Snowflakey and bad. But it makes it look consistent. - icon_file = worn_item.worn_icon_digi || DIGITIGRADE_SHOES_FILE // SKYRAT EDIT CHANGE - mutant_override = TRUE // SKYRAT EDIT ADDITION + icon_file = worn_item.worn_icon_digi || DIGITIGRADE_SHOES_FILE // NOVA EDIT CHANGE + mutant_override = TRUE // NOVA EDIT ADDITION else if(bodytype & BODYTYPE_CUSTOM) var/species_icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_SHOES, shoes, src) if(species_icon_file) @@ -379,9 +385,9 @@ There are several things that need to be remembered: mutant_override = TRUE else if(bodytype & BODYTYPE_HIDE_SHOES) return // We just don't want shoes that float if we're not displaying legs (useful for taurs, for now) - // SKYRAT EDIT END + // NOVA EDIT END - var/mutable_appearance/shoes_overlay = shoes.build_worn_icon(default_layer = SHOES_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE + var/mutable_appearance/shoes_overlay = shoes.build_worn_icon(default_layer = SHOES_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // NOVA EDIT CHANGE if(!shoes_overlay) return @@ -438,7 +444,7 @@ There are several things that need to be remembered: var/icon_file = 'icons/mob/clothing/head/default.dmi' - // SKYRAT EDIT ADDITION - This needs to be refactored. + // NOVA EDIT ADDITION - This needs to be refactored. var/mutant_override = FALSE if(bodytype & BODYTYPE_CUSTOM) var/species_icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_HEAD, head, src) @@ -450,15 +456,15 @@ There are several things that need to be remembered: if(snout_icon_file && icon_exists(snout_icon_file, RESOLVE_ICON_STATE(worn_item))) icon_file = snout_icon_file mutant_override = TRUE - // SKYRAT EDIT END + // NOVA EDIT END - var/mutable_appearance/head_overlay = head.build_worn_icon(default_layer = HEAD_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE + var/mutable_appearance/head_overlay = head.build_worn_icon(default_layer = HEAD_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // NOVA EDIT CHANGE var/obj/item/bodypart/head/my_head = get_bodypart(BODY_ZONE_HEAD) - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION if(!mutant_override) my_head?.worn_head_offset?.apply_offset(head_overlay) - // SKYRAT EDIT END + // NOVA EDIT END overlays_standing[HEAD_LAYER] = head_overlay update_mutant_bodyparts() @@ -480,22 +486,22 @@ There are several things that need to be remembered: var/icon_file = 'icons/mob/clothing/belt.dmi' - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION var/mutant_override = FALSE if(bodytype & BODYTYPE_CUSTOM) var/species_icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_BELT, belt, src) if(species_icon_file) icon_file = species_icon_file mutant_override = TRUE - // SKYRAT EDIT END + // NOVA EDIT END - var/mutable_appearance/belt_overlay = belt.build_worn_icon(default_layer = BELT_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE + var/mutable_appearance/belt_overlay = belt.build_worn_icon(default_layer = BELT_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // NOVA EDIT CHANGE var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST) - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION if(!mutant_override) my_chest?.worn_belt_offset?.apply_offset(belt_overlay) - // SKYRAT EDIT END + // NOVA EDIT END overlays_standing[BELT_LAYER] = belt_overlay apply_overlay(BELT_LAYER) @@ -512,14 +518,14 @@ There are several things that need to be remembered: update_hud_wear_suit(worn_item) var/icon_file = DEFAULT_SUIT_FILE - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION var/mutant_override = FALSE var/mutant_styles = NONE //More currently unused digitigrade handling if(bodytype & BODYTYPE_DIGITIGRADE) if(worn_item.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION) - icon_file = worn_item.worn_icon_digi || DIGITIGRADE_SUIT_FILE // SKYRAT EDIT CHANGE + icon_file = worn_item.worn_icon_digi || DIGITIGRADE_SUIT_FILE // NOVA EDIT CHANGE mutant_override = TRUE else if(bodytype & BODYTYPE_CUSTOM) @@ -532,15 +538,15 @@ There are several things that need to be remembered: var/obj/item/clothing/suit/worn_suit = wear_suit if(istype(worn_suit) && worn_suit.gets_cropped_on_taurs) mutant_styles |= get_taur_mode() - // SKYRAT EDIT END + // NOVA EDIT END - var/mutable_appearance/suit_overlay = wear_suit.build_worn_icon(default_layer = SUIT_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null, mutant_styles = mutant_styles) // SKYRAT EDIT CHANGE - Mutant bodytypes and Taur-friendly suits! + var/mutable_appearance/suit_overlay = wear_suit.build_worn_icon(default_layer = SUIT_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null, mutant_styles = mutant_styles) // NOVA EDIT CHANGE - Mutant bodytypes and Taur-friendly suits! var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST) - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION if(!mutant_override) my_chest?.worn_suit_offset?.apply_offset(suit_overlay) - // SKYRAT EDIT END + // NOVA EDIT END overlays_standing[SUIT_LAYER] = suit_overlay update_body_parts() update_mutant_bodyparts() @@ -589,7 +595,7 @@ There are several things that need to be remembered: var/icon_file = 'icons/mob/clothing/mask.dmi' - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION var/mutant_override = FALSE if(bodytype & BODYTYPE_CUSTOM) var/species_icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_MASK, wear_mask, src) @@ -601,14 +607,14 @@ There are several things that need to be remembered: if(snout_icon_file && icon_exists(snout_icon_file, RESOLVE_ICON_STATE(worn_item))) icon_file = snout_icon_file mutant_override = TRUE - // SKYRAT EDIT END + // NOVA EDIT END - var/mutable_appearance/mask_overlay = wear_mask.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE + var/mutable_appearance/mask_overlay = wear_mask.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // NOVA EDIT CHANGE - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION if(!mutant_override) my_head.worn_mask_offset?.apply_offset(mask_overlay) - // SKYRAT EDIT END + // NOVA EDIT END overlays_standing[FACEMASK_LAYER] = mask_overlay apply_overlay(FACEMASK_LAYER) @@ -627,24 +633,24 @@ There are several things that need to be remembered: update_hud_back(worn_item) var/icon_file = 'icons/mob/clothing/back.dmi' - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION var/mutant_override = FALSE if(bodytype & BODYTYPE_CUSTOM) var/species_icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_MISC, back, src) if(species_icon_file) icon_file = species_icon_file mutant_override = TRUE - // SKYRAT EDIT END + // NOVA EDIT END - back_overlay = back.build_worn_icon(default_layer = BACK_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE + back_overlay = back.build_worn_icon(default_layer = BACK_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // NOVA EDIT CHANGE if(!back_overlay) return var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST) - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION if(!mutant_override) my_chest?.worn_back_offset?.apply_offset(back_overlay) - // SKYRAT EDIT END + // NOVA EDIT END overlays_standing[BACK_LAYER] = back_overlay apply_overlay(BACK_LAYER) @@ -687,12 +693,12 @@ There are several things that need to be remembered: hands += hand_overlay return hands -/proc/wear_female_version(t_color, icon, layer, type, greyscale_colors, mutant_styles) // SKYRAT EDIT CHANGE - Digi female gender shaping - ORIGINAL: /proc/wear_female_version(t_color, icon, layer, type, greyscale_colors) - var/index = "[t_color]-[greyscale_colors][(mutant_styles & STYLE_DIGI) ? "-d" : ""]" // SKYRAT EDIT CHANGE - Digi female gender shaping - Original: var/index = "[t_color]-[greyscale_colors]]" +/proc/wear_female_version(t_color, icon, layer, type, greyscale_colors, mutant_styles) // NOVA EDIT CHANGE - Digi female gender shaping - ORIGINAL: /proc/wear_female_version(t_color, icon, layer, type, greyscale_colors) + var/index = "[t_color]-[greyscale_colors][(mutant_styles & STYLE_DIGI) ? "-d" : ""]" // NOVA EDIT CHANGE - Digi female gender shaping - Original: var/index = "[t_color]-[greyscale_colors]]" var/icon/female_clothing_icon = GLOB.female_clothing_icons[index] if(!female_clothing_icon) //Create standing/laying icons if they don't exist generate_female_clothing(index, t_color, icon, type) - return mutable_appearance(GLOB.female_clothing_icons[index], layer = -layer, icon_state = t_color) // SKYRAT EDIT - Taur-friendly uniforms and suits - Adds `icon_state = t_color` + return mutable_appearance(GLOB.female_clothing_icons[index], layer = -layer, icon_state = t_color) // NOVA EDIT - Taur-friendly uniforms and suits - Adds `icon_state = t_color` /mob/living/carbon/human/proc/get_overlays_copy(list/unwantedLayers) var/list/out = new @@ -810,7 +816,7 @@ in this situation default_icon_file is expected to match either the lefthand_ or female_uniform: A value matching a uniform item's female_sprite_flags var, if this is anything but NO_FEMALE_UNIFORM, we generate/load female uniform sprites matching all previously decided variables -mutant_styles: The mutant style - taur bodytype, STYLE_TESHARI, etc. // SKYRAT EDIT ADDITION - Taur-friendly suits and uniforms +mutant_styles: The mutant style - taur bodytype, STYLE_TESHARI, etc. // NOVA EDIT ADDITION - Taur-friendly suits and uniforms */ /obj/item/proc/build_worn_icon( default_layer = 0, @@ -820,7 +826,7 @@ mutant_styles: The mutant style - taur bodytype, STYLE_TESHARI, etc. // SKYRAT E override_state = null, override_file = null, use_height_offset = TRUE, - mutant_styles = NONE, // SKYRAT EDIT ADD - Further outfit modification for outfits (added `mutant_styles` argument) + mutant_styles = NONE, // NOVA EDIT ADD - Further outfit modification for outfits (added `mutant_styles` argument) ) //Find a valid icon_state from variables+arguments @@ -841,17 +847,17 @@ mutant_styles: The mutant style - taur bodytype, STYLE_TESHARI, etc. // SKYRAT E var/mutable_appearance/standing if(female_uniform) - standing = wear_female_version(t_state, file2use, layer2use, female_uniform, greyscale_colors, mutant_styles) //should layer2use be in sync with the adjusted value below? needs testing - shiz // SKYRAT EDIT CHANGE - ORIGINAL: standing = wear_female_version(t_state, file2use, layer2use, female_uniform, greyscale_colors) + standing = wear_female_version(t_state, file2use, layer2use, female_uniform, greyscale_colors, mutant_styles) //should layer2use be in sync with the adjusted value below? needs testing - shiz // NOVA EDIT CHANGE - ORIGINAL: standing = wear_female_version(t_state, file2use, layer2use, female_uniform, greyscale_colors) if(!standing) standing = mutable_appearance(file2use, t_state, -layer2use) - // SKYRAT EDIT ADDITION START - Taur-friendly uniforms and suits + // NOVA EDIT ADDITION START - Taur-friendly uniforms and suits if(mutant_styles & STYLE_TAUR_ALL) standing = wear_taur_version(standing.icon_state, standing.icon, layer2use, female_uniform, greyscale_colors) - // SKYRAT EDIT END + // NOVA EDIT END //Get the overlays for this item when it's being worn //eg: ammo counters, primed grenade flashes, etc. - var/list/worn_overlays = worn_overlays(standing, isinhands, file2use, mutant_styles) // SKYRAT EDIT CHANGE - ORIGINAL: var/list/worn_overlays = worn_overlays(standing, isinhands) + var/list/worn_overlays = worn_overlays(standing, isinhands, file2use, mutant_styles) // NOVA EDIT CHANGE - ORIGINAL: var/list/worn_overlays = worn_overlays(standing, isinhands) if(worn_overlays?.len) if(!isinhands && default_layer && ishuman(loc) && use_height_offset) var/mob/living/carbon/human/human_loc = loc diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index aed1beafd1617d..bf3c3080e5a88c 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -179,12 +179,12 @@ return gloves = equipping - //SKYRAT EDIT ADDITION - ERP UPDATE + //NOVA EDIT ADDITION - ERP UPDATE if(gloves.breakouttime) - ADD_TRAIT(src, TRAIT_RESTRAINED, GLOVES_TRAIT) + ADD_TRAIT(src, TRAIT_RESTRAINED, TRAIT_GLOVES) stop_pulling() update_mob_action_buttons() - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END update_worn_gloves() if(ITEM_SLOT_FEET) if(shoes) @@ -257,33 +257,33 @@ if(I.flags_inv & HIDEJUMPSUIT) update_worn_undersuit() - // SKYRAT EDIT ADDITION START - ERP Overlays + // NOVA EDIT ADDITION START - ERP Overlays if(I.flags_inv & HIDESEXTOY) update_inv_lewd() - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END update_worn_oversuit() else if(I == w_uniform) + w_uniform = null + update_suit_sensors() + if(!QDELETED(src)) + update_worn_undersuit() if(invdrop) - if(r_store) + if(r_store && !can_equip(r_store, ITEM_SLOT_RPOCKET, TRUE, ignore_equipped = TRUE)) dropItemToGround(r_store, TRUE) //Again, makes sense for pockets to drop. - if(l_store) + if(l_store && !can_equip(l_store, ITEM_SLOT_LPOCKET, TRUE, ignore_equipped = TRUE)) dropItemToGround(l_store, TRUE) - if(wear_id) + if(wear_id && !can_equip(wear_id, ITEM_SLOT_ID, TRUE, ignore_equipped = TRUE)) dropItemToGround(wear_id) - if(belt) + if(belt && !can_equip(belt, ITEM_SLOT_BELT, TRUE, ignore_equipped = TRUE)) dropItemToGround(belt) - w_uniform = null - update_suit_sensors() - if(!QDELETED(src)) - update_worn_undersuit() else if(I == gloves) - //SKYRAT EDIT ADDITION - ERP UPDATE + //NOVA EDIT ADDITION - ERP UPDATE if(gloves.breakouttime) //when unequipping a straightjacket - REMOVE_TRAIT(src, TRAIT_RESTRAINED, GLOVES_TRAIT) + REMOVE_TRAIT(src, TRAIT_RESTRAINED, TRAIT_GLOVES) drop_all_held_items() //suit is restraining update_mob_action_buttons() //certain action buttons may be usable again. - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END gloves = null if(!QDELETED(src)) update_worn_gloves() diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 2e061d32a6b0eb..be355bddbea281 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -28,7 +28,7 @@ //Body temperature stability and damage dna.species.handle_body_temperature(src, seconds_per_tick, times_fired) - if(!IS_IN_STASIS(src)) + if(!HAS_TRAIT(src, TRAIT_STASIS)) if(stat != DEAD) //handle active mutations for(var/datum/mutation/human/human_mutation as anything in dna.mutations) diff --git a/code/modules/mob/living/carbon/human/login.dm b/code/modules/mob/living/carbon/human/login.dm index ec384347ec5ab5..53271292dff647 100644 --- a/code/modules/mob/living/carbon/human/login.dm +++ b/code/modules/mob/living/carbon/human/login.dm @@ -3,7 +3,7 @@ dna?.species?.on_owner_login(src) - if(SStts.tts_enabled && isnull(voice)) // SKYRAT EDIT - None option for TTS - ORIGINAL: if(SStts.tts_enabled && !voice) + if(SStts.tts_enabled && isnull(voice)) // NOVA EDIT - None option for TTS - ORIGINAL: if(SStts.tts_enabled && !voice) voice = pick(SStts.available_speakers) if(!LAZYLEN(afk_thefts)) diff --git a/code/modules/mob/living/carbon/human/monkey.dm b/code/modules/mob/living/carbon/human/monkey.dm index 76bf7cc5288a33..88d46855a5e3da 100644 --- a/code/modules/mob/living/carbon/human/monkey.dm +++ b/code/modules/mob/living/carbon/human/monkey.dm @@ -38,14 +38,6 @@ /mob/living/carbon/human/species/monkey/holodeck/spawn_gibs() // no blood and no gibs return -/mob/living/carbon/human/species/monkey/holodeck/has_dna() - return null - -/mob/living/carbon/human/species/monkey/holodeck/create_bodyparts(list/overrides) // done like this in case people add more limbs to monkeys or something - . = ..() - for(var/obj/item/bodypart/limb as anything in bodyparts) - limb.bodypart_flags |= BODYPART_UNREMOVABLE // no farming organs or limbs from these fellers. get a monkey cube - GLOBAL_DATUM(the_one_and_only_punpun, /mob/living/carbon/human/species/monkey/punpun) /mob/living/carbon/human/species/monkey/punpun diff --git a/code/modules/mob/living/carbon/human/physiology.dm b/code/modules/mob/living/carbon/human/physiology.dm index 398f8d0c5e98df..2e646463b512f2 100644 --- a/code/modules/mob/living/carbon/human/physiology.dm +++ b/code/modules/mob/living/carbon/human/physiology.dm @@ -10,8 +10,6 @@ var/tox_mod = 1 /// Multiplier to oxygen damage received var/oxy_mod = 1 - /// Multiplier to clone damage received - var/clone_mod = 1 /// Multiplier to stamina damage received var/stamina_mod = 1 /// Multiplier to brain damage received diff --git a/code/modules/mob/living/carbon/human/species_types/abductors.dm b/code/modules/mob/living/carbon/human/species_types/abductors.dm index 349742a15e5368..74d2bedf3a7025 100644 --- a/code/modules/mob/living/carbon/human/species_types/abductors.dm +++ b/code/modules/mob/living/carbon/human/species_types/abductors.dm @@ -3,19 +3,21 @@ id = SPECIES_ABDUCTOR sexes = FALSE inherent_traits = list( - TRAIT_NO_UNDERWEAR, + TRAIT_CHUNKYFINGERS_IGNORE_BATON, + TRAIT_NEVER_WOUNDED, + TRAIT_NOBLOOD, TRAIT_NOBREATH, + TRAIT_NODISMEMBER, TRAIT_NOHUNGER, + TRAIT_NO_UNDERWEAR, + TRAIT_REMOTE_TASTING, TRAIT_VIRUSIMMUNE, - TRAIT_NOBLOOD, - TRAIT_CHUNKYFINGERS_IGNORE_BATON, - TRAIT_NODISMEMBER, - TRAIT_NEVER_WOUNDED ) mutanttongue = /obj/item/organ/internal/tongue/abductor mutantstomach = null mutantheart = null mutantlungs = null + mutantbrain = /obj/item/organ/internal/brain/abductor changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT ass_image = 'icons/ass/assgrey.png' diff --git a/code/modules/mob/living/carbon/human/species_types/android.dm b/code/modules/mob/living/carbon/human/species_types/android.dm index a6f6a484afcda3..2c006d2e936b6c 100644 --- a/code/modules/mob/living/carbon/human/species_types/android.dm +++ b/code/modules/mob/living/carbon/human/species_types/android.dm @@ -3,30 +3,30 @@ id = SPECIES_ANDROID examine_limb_id = SPECIES_HUMAN inherent_traits = list( - TRAIT_NO_UNDERWEAR, - TRAIT_CAN_USE_FLIGHT_POTION, TRAIT_GENELESS, TRAIT_LIMBATTACHMENT, + TRAIT_LIVERLESS_METABOLISM, + TRAIT_NOBLOOD, TRAIT_NOBREATH, - TRAIT_NOCLONELOSS, + TRAIT_NOCRITDAMAGE, TRAIT_NOFIRE, TRAIT_NOHUNGER, - TRAIT_LIVERLESS_METABOLISM, + TRAIT_NO_DNA_COPY, + TRAIT_NO_PLASMA_TRANSFORM, + TRAIT_NO_UNDERWEAR, + TRAIT_OVERDOSEIMMUNE, TRAIT_PIERCEIMMUNE, TRAIT_RADIMMUNE, TRAIT_RESISTCOLD, TRAIT_RESISTHEAT, - TRAIT_RESISTLOWPRESSURE, TRAIT_RESISTHIGHPRESSURE, + TRAIT_RESISTLOWPRESSURE, TRAIT_TOXIMMUNE, - TRAIT_NOBLOOD, - TRAIT_NO_DNA_COPY, - TRAIT_NO_TRANSFORMATION_STING, - TRAIT_NOCRITDAMAGE, ) inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID meat = null + mutantbrain = /obj/item/organ/internal/brain/cybernetic mutanttongue = /obj/item/organ/internal/tongue/robot mutantstomach = null mutantappendix = null @@ -36,7 +36,6 @@ mutanteyes = /obj/item/organ/internal/eyes/robotic mutantears = /obj/item/organ/internal/ears/cybernetic species_language_holder = /datum/language_holder/synthetic - wing_types = list(/obj/item/organ/external/wings/functional/robotic) changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT bodypart_overrides = list( diff --git a/code/modules/mob/living/carbon/human/species_types/dullahan.dm b/code/modules/mob/living/carbon/human/species_types/dullahan.dm index 597a54660bc7f5..ce720e66789a80 100644 --- a/code/modules/mob/living/carbon/human/species_types/dullahan.dm +++ b/code/modules/mob/living/carbon/human/species_types/dullahan.dm @@ -52,9 +52,10 @@ human.put_in_hands(head) // We want to give the head some boring old eyes just so it doesn't look too jank on the head sprite. - head.eyes = new /obj/item/organ/internal/eyes(head) - head.eyes.eye_color_left = human.eye_color_left - head.eyes.eye_color_right = human.eye_color_right + var/obj/item/organ/internal/eyes/eyes = new /obj/item/organ/internal/eyes(head) + eyes.eye_color_left = human.eye_color_left + eyes.eye_color_right = human.eye_color_right + eyes.bodypart_insert(my_head) human.update_body() head.update_icon_dropped() human.set_safe_hunger_level() @@ -248,7 +249,8 @@ return // It's so over detached_head.real_name = wearer.real_name detached_head.name = wearer.real_name - detached_head.brain.name = "[wearer.name]'s brain" + var/obj/item/organ/internal/brain/brain = locate(/obj/item/organ/internal/brain) in detached_head + brain.name = "[wearer.name]'s brain" /obj/item/dullahan_relay/proc/examinate_check(mob/user, atom/source) SIGNAL_HANDLER diff --git a/code/modules/mob/living/carbon/human/species_types/ethereal.dm b/code/modules/mob/living/carbon/human/species_types/ethereal.dm index 4c28d190efff4a..da563d023ead83 100644 --- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm +++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm @@ -11,7 +11,7 @@ siemens_coeff = 0.5 //They thrive on energy payday_modifier = 1.0 inherent_traits = list( - // TRAIT_NO_UNDERWEAR, // SKYRAT EDIT - LET THEM WEAR PANTIES + // TRAIT_NO_UNDERWEAR, // NOVA EDIT - LET THEM WEAR PANTIES TRAIT_MUTANT_COLORS, TRAIT_FIXED_MUTANT_COLORS, TRAIT_FIXED_HAIRCOLOR, @@ -55,24 +55,24 @@ QDEL_NULL(ethereal_light) return ..() -/datum/species/ethereal/on_species_gain(mob/living/carbon/new_ethereal, datum/species/old_species, pref_load) +/datum/species/ethereal/on_species_gain(mob/living/carbon/human/new_ethereal, datum/species/old_species, pref_load) . = ..() if(!ishuman(new_ethereal)) return - var/mob/living/carbon/human/ethereal = new_ethereal - default_color = ethereal.dna.features["ethcolor"] + default_color = new_ethereal.dna.features["ethcolor"] fixed_hair_color = default_color r1 = GETREDPART(default_color) g1 = GETGREENPART(default_color) b1 = GETBLUEPART(default_color) - RegisterSignal(ethereal, COMSIG_ATOM_EMAG_ACT, PROC_REF(on_emag_act)) - RegisterSignal(ethereal, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp_act)) - RegisterSignal(ethereal, COMSIG_LIGHT_EATER_ACT, PROC_REF(on_light_eater)) - RegisterSignal(ethereal, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) - ethereal_light = ethereal.mob_light(light_type = /obj/effect/dummy/lighting_obj/moblight/species) - spec_updatehealth(ethereal) + RegisterSignal(new_ethereal, COMSIG_ATOM_EMAG_ACT, PROC_REF(on_emag_act)) + RegisterSignal(new_ethereal, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp_act)) + RegisterSignal(new_ethereal, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) + RegisterSignal(new_ethereal, COMSIG_LIGHT_EATER_ACT, PROC_REF(on_light_eater)) + RegisterSignal(new_ethereal, COMSIG_LIVING_HEALTH_UPDATE, PROC_REF(refresh_light_color)) + ethereal_light = new_ethereal.mob_light(light_type = /obj/effect/dummy/lighting_obj/moblight/species) + refresh_light_color(new_ethereal) new_ethereal.set_safe_hunger_level() - update_mail_goodies(ethereal) + update_mail_goodies(new_ethereal) var/obj/item/organ/internal/heart/ethereal/ethereal_heart = new_ethereal.get_organ_slot(ORGAN_SLOT_HEART) ethereal_heart.ethereal_color = default_color @@ -82,10 +82,13 @@ limb.update_limb(is_creating = TRUE) /datum/species/ethereal/on_species_loss(mob/living/carbon/human/former_ethereal, datum/species/new_species, pref_load) - UnregisterSignal(former_ethereal, COMSIG_ATOM_EMAG_ACT) - UnregisterSignal(former_ethereal, COMSIG_ATOM_EMP_ACT) - UnregisterSignal(former_ethereal, COMSIG_LIGHT_EATER_ACT) - UnregisterSignal(former_ethereal, COMSIG_HIT_BY_SABOTEUR) + UnregisterSignal(former_ethereal, list( + COMSIG_ATOM_EMAG_ACT, + COMSIG_ATOM_EMP_ACT, + COMSIG_HIT_BY_SABOTEUR, + COMSIG_LIGHT_EATER_ACT, + COMSIG_LIVING_HEALTH_UPDATE, + )) QDEL_NULL(ethereal_light) return ..() @@ -104,12 +107,14 @@ return randname -/datum/species/ethereal/randomize_features(mob/living/carbon/human/human_mob) - human_mob.dna.features["ethcolor"] = GLOB.color_list_ethereal[pick(GLOB.color_list_ethereal)] +/datum/species/ethereal/randomize_features() + var/list/features = ..() + features["ethcolor"] = GLOB.color_list_ethereal[pick(GLOB.color_list_ethereal)] + return features -/datum/species/ethereal/spec_updatehealth(mob/living/carbon/human/ethereal) - . = ..() - if(!ethereal_light) +/datum/species/ethereal/proc/refresh_light_color(mob/living/carbon/human/ethereal) + SIGNAL_HANDLER + if(isnull(ethereal_light)) return if(default_color != ethereal.dna.features["ethcolor"]) var/new_color = ethereal.dna.features["ethcolor"] @@ -136,39 +141,38 @@ ethereal.set_facial_haircolor(dead_color, override = TRUE, update = FALSE) ethereal.set_haircolor(dead_color, override = TRUE, update = TRUE) -/datum/species/ethereal/proc/on_emp_act(mob/living/carbon/human/H, severity, protection) +/datum/species/ethereal/proc/on_emp_act(mob/living/carbon/human/source, severity, protection) SIGNAL_HANDLER if(protection & EMP_PROTECT_SELF) return EMPeffect = TRUE - spec_updatehealth(H) - to_chat(H, span_notice("You feel the light of your body leave you.")) + refresh_light_color(source) + to_chat(source, span_notice("You feel the light of your body leave you.")) switch(severity) if(EMP_LIGHT) - addtimer(CALLBACK(src, PROC_REF(stop_emp), H), 10 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) //We're out for 10 seconds + addtimer(CALLBACK(src, PROC_REF(stop_emp), source), 10 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) //We're out for 10 seconds if(EMP_HEAVY) - addtimer(CALLBACK(src, PROC_REF(stop_emp), H), 20 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) //We're out for 20 seconds + addtimer(CALLBACK(src, PROC_REF(stop_emp), source), 20 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) //We're out for 20 seconds -/datum/species/ethereal/proc/on_saboteur(datum/source, disrupt_duration) +/datum/species/ethereal/proc/on_saboteur(mob/living/carbon/human/source, disrupt_duration) SIGNAL_HANDLER - var/mob/living/carbon/human/our_target = source EMPeffect = TRUE - spec_updatehealth(our_target) - to_chat(our_target, span_warning("Something inside of you crackles in a bad way.")) - our_target.take_bodypart_damage(burn = 3, wound_bonus = CANT_WOUND) - addtimer(CALLBACK(src, PROC_REF(stop_emp), our_target), disrupt_duration, TIMER_UNIQUE|TIMER_OVERRIDE) + refresh_light_color(source) + to_chat(source, span_warning("Something inside of you crackles in a bad way.")) + source.take_bodypart_damage(burn = 3, wound_bonus = CANT_WOUND) + addtimer(CALLBACK(src, PROC_REF(stop_emp), source), disrupt_duration, TIMER_UNIQUE|TIMER_OVERRIDE) return COMSIG_SABOTEUR_SUCCESS -/datum/species/ethereal/proc/on_emag_act(mob/living/carbon/human/H, mob/user) +/datum/species/ethereal/proc/on_emag_act(mob/living/carbon/human/source, mob/user) SIGNAL_HANDLER if(emageffect) return FALSE emageffect = TRUE if(user) - to_chat(user, span_notice("You tap [H] on the back with your card.")) - H.visible_message(span_danger("[H] starts flickering in an array of colors!")) - handle_emag(H) - addtimer(CALLBACK(src, PROC_REF(stop_emag), H), 2 MINUTES) //Disco mode for 2 minutes! This doesn't affect the ethereal at all besides either annoying some players, or making someone look badass. + to_chat(user, span_notice("You tap [source] on the back with your card.")) + source.visible_message(span_danger("[source] starts flickering in an array of colors!")) + handle_emag(source) + addtimer(CALLBACK(src, PROC_REF(stop_emag), source), 2 MINUTES) //Disco mode for 2 minutes! This doesn't affect the ethereal at all besides either annoying some players, or making someone look badass. return TRUE /// Special handling for getting hit with a light eater @@ -177,23 +181,22 @@ source.emp_act(EMP_LIGHT) return COMPONENT_BLOCK_LIGHT_EATER -/datum/species/ethereal/proc/stop_emp(mob/living/carbon/human/H) +/datum/species/ethereal/proc/stop_emp(mob/living/carbon/human/ethereal) EMPeffect = FALSE - spec_updatehealth(H) - to_chat(H, span_notice("You feel more energized as your shine comes back.")) - + refresh_light_color(ethereal) + to_chat(ethereal, span_notice("You feel more energized as your shine comes back.")) -/datum/species/ethereal/proc/handle_emag(mob/living/carbon/human/H) +/datum/species/ethereal/proc/handle_emag(mob/living/carbon/human/ethereal) if(!emageffect) return current_color = GLOB.color_list_ethereal[pick(GLOB.color_list_ethereal)] - spec_updatehealth(H) - addtimer(CALLBACK(src, PROC_REF(handle_emag), H), 5) //Call ourselves every 0.5 seconds to change color + refresh_light_color(ethereal) + addtimer(CALLBACK(src, PROC_REF(handle_emag), ethereal), 0.5 SECONDS) -/datum/species/ethereal/proc/stop_emag(mob/living/carbon/human/H) +/datum/species/ethereal/proc/stop_emag(mob/living/carbon/human/ethereal) emageffect = FALSE - spec_updatehealth(H) - H.visible_message(span_danger("[H] stops flickering and goes back to their normal state!")) + refresh_light_color(ethereal) + ethereal.visible_message(span_danger("[ethereal] stops flickering and goes back to their normal state!")) /datum/species/ethereal/get_features() var/list/features = ..() @@ -223,7 +226,7 @@ return list( "Ethereals are a species native to the planet Sprout. \ When they were originally discovered, they were at a medieval level of technological progression, \ - but due to their natural acclimation with electricity, they felt easy among the large Nanotrasen installations.", + but due to their natural acclimation with electricity, they felt easy among the large Symphionia installations.", ) /datum/species/ethereal/create_pref_unique_perks() diff --git a/code/modules/mob/living/carbon/human/species_types/felinid.dm b/code/modules/mob/living/carbon/human/species_types/felinid.dm index 61647c5aba23cf..2ec02dee2b467f 100644 --- a/code/modules/mob/living/carbon/human/species_types/felinid.dm +++ b/code/modules/mob/living/carbon/human/species_types/felinid.dm @@ -6,14 +6,14 @@ mutant_bodyparts = list("ears" = "Cat", "wings" = "None") mutantbrain = /obj/item/organ/internal/brain/felinid mutanttongue = /obj/item/organ/internal/tongue/cat - /* SKYRAT EDIT REMOVAL - CUSTOMIZATION + /* NOVA EDIT REMOVAL - CUSTOMIZATION mutantears = /obj/item/organ/internal/ears/cat external_organs = list( /obj/item/organ/external/tail/cat = "Cat", ) - */ // SKYRAT EDIT REMOVAL END + */ // NOVA EDIT REMOVAL END inherent_traits = list( - TRAIT_CAN_USE_FLIGHT_POTION, + TRAIT_CATLIKE_GRACE, TRAIT_HATED_BY_DOGS, TRAIT_USES_SKINTONES, ) @@ -43,14 +43,15 @@ target_human.dna.features["ears"] = "Cat" if(target_human.dna.features["ears"] == "Cat") var/obj/item/organ/internal/ears/cat/ears = new - ears.Insert(target_human, drop_if_replaced = FALSE) + ears.Insert(target_human, movement_flags = DELETE_IF_REPLACED) else mutantears = /obj/item/organ/internal/ears return ..() /datum/species/human/felinid/randomize_features(mob/living/carbon/human/human_mob) - randomize_external_organs(human_mob) - return ..() + var/list/features = ..() + features["ears"] = pick("None", "Cat") + return features /proc/mass_purrbation() for(var/mob in GLOB.human_list) @@ -94,8 +95,8 @@ // Humans get converted directly to felinids, and the key is handled in on_species_gain. // Now when we get mob.dna.features[feature_key], it returns None, which is why the tail is invisible. // stored_feature_id is only set once (the first time an organ is inserted), so this should be safe. - kitty_ears.Insert(soon_to_be_felinid, special = TRUE, drop_if_replaced = FALSE) - kitty_tail.Insert(soon_to_be_felinid, special = TRUE, drop_if_replaced = FALSE) + kitty_ears.Insert(soon_to_be_felinid, special = TRUE, movement_flags = DELETE_IF_REPLACED) + kitty_tail.Insert(soon_to_be_felinid, special = TRUE, movement_flags = DELETE_IF_REPLACED) if(!silent) to_chat(soon_to_be_felinid, span_boldnotice("Something is nya~t right.")) playsound(get_turf(soon_to_be_felinid), 'sound/effects/meow1.ogg', 50, TRUE, -1) @@ -118,16 +119,16 @@ for(var/external_organ in target_species.external_organs) if(ispath(external_organ, /obj/item/organ/external/tail)) var/obj/item/organ/external/tail/new_tail = new external_organ() - new_tail.Insert(purrbated_human, special = TRUE, drop_if_replaced = FALSE) + new_tail.Insert(purrbated_human, special = TRUE, movement_flags = DELETE_IF_REPLACED) // Don't forget the spines we removed earlier else if(ispath(external_organ, /obj/item/organ/external/spines)) var/obj/item/organ/external/spines/new_spines = new external_organ() - new_spines.Insert(purrbated_human, special = TRUE, drop_if_replaced = FALSE) + new_spines.Insert(purrbated_human, special = TRUE, movement_flags = DELETE_IF_REPLACED) var/obj/item/organ/internal/ears/old_ears = purrbated_human.get_organ_slot(ORGAN_SLOT_EARS) if(istype(old_ears, /obj/item/organ/internal/ears/cat)) var/obj/item/organ/new_ears = new target_species.mutantears() - new_ears.Insert(purrbated_human, special = TRUE, drop_if_replaced = FALSE) + new_ears.Insert(purrbated_human, special = TRUE, movement_flags = DELETE_IF_REPLACED) if(!silent) to_chat(purrbated_human, span_boldnotice("You are no longer a cat.")) @@ -135,7 +136,7 @@ human_for_preview.set_haircolor("#ffcccc", update = FALSE) // pink human_for_preview.set_hairstyle("Hime Cut", update = TRUE) - /* SKYRAT EDIT - Making the species menu icons work better - ORIGINAL: + /* NOVA EDIT - Making the species menu icons work better - ORIGINAL: var/obj/item/organ/internal/ears/cat/cat_ears = human_for_preview.get_organ_by_type(/obj/item/organ/internal/ears/cat) if (cat_ears) cat_ears.color = human_for_preview.hair_color @@ -145,7 +146,7 @@ human_for_preview.dna.mutant_bodyparts["ears"] = list(MUTANT_INDEX_NAME = "Cat", MUTANT_INDEX_COLOR_LIST = list(human_for_preview.hair_color)) regenerate_organs(human_for_preview, src, visual_only = TRUE) human_for_preview.update_body(TRUE) - // SKYRAT EDIT END + // NOVA EDIT END /datum/species/human/felinid/get_physical_attributes() return "Felinids are very similar to humans in almost all respects, with their biggest differences being the ability to lick their wounds, \ @@ -182,6 +183,14 @@ SPECIES_PERK_NAME = "Grooming", SPECIES_PERK_DESC = "Felinids can lick wounds to reduce bleeding.", ), + list( + SPECIES_PERK_TYPE = SPECIES_NEUTRAL_PERK, + SPECIES_PERK_ICON = FA_ICON_PERSON_FALLING, + SPECIES_PERK_NAME = "Catlike Grace", + SPECIES_PERK_DESC = "Felinids have catlike instincts allowing them to land upright on their feet. \ + Instead of being knocked down from falling, you only recieve a short slowdown. \ + However, they do not have catlike legs, and the fall will deal additional damage.", + ), list( SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, SPECIES_PERK_ICON = "assistive-listening-systems", diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm index c2c73becdecf84..75b2af9ca46199 100644 --- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm @@ -3,7 +3,6 @@ plural_form = "Flypeople" id = SPECIES_FLYPERSON inherent_traits = list( - TRAIT_CAN_USE_FLIGHT_POTION, TRAIT_TACKLING_FRAIL_ATTACKER, TRAIT_ANTENNAE, ) @@ -12,7 +11,6 @@ mutanteyes = /obj/item/organ/internal/eyes/fly changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT species_language_holder = /datum/language_holder/fly - wing_types = list(/obj/item/organ/external/wings/functional/fly) payday_modifier = 1.0 mutanttongue = /obj/item/organ/internal/tongue/fly @@ -52,14 +50,14 @@ /datum/species/fly/get_species_description() return "With no official documentation or knowledge of the origin of \ this species, they remain a mystery to most. Any and all rumours among \ - Nanotrasen staff regarding flypeople are often quickly silenced by high \ + Symphionia staff regarding flypeople are often quickly silenced by high \ ranking staff or officials." /datum/species/fly/get_species_lore() return list( "Flypeople are a curious species with a striking resemblance to the insect order of Diptera, \ commonly known as flies. With no publically known origin, flypeople are rumored to be a side effect of bluespace travel, \ - despite statements from Nanotrasen officials.", + despite statements from Symphionia officials.", "Little is known about the origins of this race, \ however they posess the ability to communicate with giant spiders, originally discovered in the Australicus sector \ diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 91ec9dfe0c5c57..01451a8db36b95 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -3,19 +3,21 @@ name = "Golem" id = SPECIES_GOLEM inherent_traits = list( - TRAIT_NO_UNDERWEAR, TRAIT_GENELESS, TRAIT_LAVA_IMMUNE, - TRAIT_NOBREATH, + TRAIT_NEVER_WOUNDED, TRAIT_NOBLOOD, + TRAIT_NOBREATH, + TRAIT_NODISMEMBER, TRAIT_NOFIRE, + TRAIT_NO_AUGMENTS, + TRAIT_NO_DNA_COPY, + TRAIT_NO_PLASMA_TRANSFORM, + TRAIT_NO_UNDERWEAR, TRAIT_PIERCEIMMUNE, TRAIT_RADIMMUNE, - TRAIT_NO_DNA_COPY, - TRAIT_NO_TRANSFORMATION_STING, - TRAIT_NO_AUGMENTS, - TRAIT_NODISMEMBER, - TRAIT_NEVER_WOUNDED + TRAIT_SNOWSTORM_IMMUNE, // Shared with plasma river... but I guess if you can survive a plasma river a blizzard isn't a big deal + TRAIT_UNHUSKABLE, ) mutantheart = null mutantlungs = null diff --git a/code/modules/mob/living/carbon/human/species_types/humans.dm b/code/modules/mob/living/carbon/human/species_types/humans.dm index 9db5a3253eb60d..c7a181027e64eb 100644 --- a/code/modules/mob/living/carbon/human/species_types/humans.dm +++ b/code/modules/mob/living/carbon/human/species_types/humans.dm @@ -2,7 +2,6 @@ name = "\improper Human" id = SPECIES_HUMAN inherent_traits = list( - TRAIT_CAN_USE_FLIGHT_POTION, TRAIT_USES_SKINTONES, ) mutant_bodyparts = list("wings" = "None") @@ -14,9 +13,6 @@ human.set_haircolor("#bb9966", update = FALSE) // brown human.set_hairstyle("Business Hair", update = TRUE) -/datum/species/human/randomize_features(mob/living/carbon/human/human_mob) - human_mob.skin_tone = random_skin_tone() - /datum/species/human/get_scream_sound(mob/living/carbon/human/human) if(human.physique == MALE) if(prob(1)) @@ -83,4 +79,3 @@ )) return to_add - 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 2f5c977110a351..2fed7a7351d263 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -41,7 +41,7 @@ BODY_ZONE_CHEST = /obj/item/bodypart/chest/jelly, ) var/datum/action/innate/regenerate_limbs/regenerate_limbs - var/datum/action/innate/alter_form/alter_form //SKYRAT EDIT ADDITION - CUSTOMIZATION + var/datum/action/innate/alter_form/alter_form //NOVA EDIT ADDITION - CUSTOMIZATION /datum/species/jelly/on_species_gain(mob/living/carbon/new_jellyperson, datum/species/old_species, pref_load) . = ..() @@ -49,19 +49,19 @@ regenerate_limbs = new regenerate_limbs.Grant(new_jellyperson) update_mail_goodies(new_jellyperson) - //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION + //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION alter_form = new alter_form.Grant(new_jellyperson) - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END new_jellyperson.AddElement(/datum/element/soft_landing) /datum/species/jelly/on_species_loss(mob/living/carbon/former_jellyperson, datum/species/new_species, pref_load) if(regenerate_limbs) regenerate_limbs.Remove(former_jellyperson) - //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION + //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION if(alter_form) alter_form.Remove(former_jellyperson) - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END former_jellyperson.RemoveElement(/datum/element/soft_landing) return ..() @@ -215,6 +215,7 @@ // so if someone mindswapped into them, they'd still be shared. bodies = null C.blood_volume = min(C.blood_volume, BLOOD_VOLUME_NORMAL) + UnregisterSignal(C, COMSIG_LIVING_DEATH) ..() /datum/species/jelly/slime/on_species_gain(mob/living/carbon/C, datum/species/old_species) @@ -230,20 +231,25 @@ else bodies |= C -/datum/species/jelly/slime/spec_death(gibbed, mob/living/carbon/human/H) - if(slime_split) - if(!H.mind || !H.mind.active) - return + RegisterSignal(C, COMSIG_LIVING_DEATH, PROC_REF(on_death_move_body)) - var/list/available_bodies = (bodies - H) - for(var/mob/living/L in available_bodies) - if(!swap_body.can_swap(L)) - available_bodies -= L +/datum/species/jelly/slime/proc/on_death_move_body(mob/living/carbon/human/source, gibbed) + SIGNAL_HANDLER - if(!LAZYLEN(available_bodies)) - return + if(!slime_split) + return + if(!source.mind?.active) + return + + var/list/available_bodies = bodies - source + for(var/mob/living/other_body as anything in available_bodies) + if(!swap_body.can_swap(other_body)) + available_bodies -= other_body + + if(!length(available_bodies)) + return - swap_body.swap_to_dupe(H.mind, pick(available_bodies)) + swap_body.swap_to_dupe(source.mind, pick(available_bodies)) //If you're cloned you get your body pool back /datum/species/jelly/slime/copy_properties_from(datum/species/jelly/slime/old_species) @@ -607,7 +613,7 @@ else var/obj/item/slime_extract/to_integrate = human_owner.get_active_held_item() - if(!istype(to_integrate) || to_integrate.Uses <= 0) + if(!istype(to_integrate) || to_integrate.extract_uses <= 0) human_owner.balloon_alert(human_owner, "need an unused slime extract!") return if(!human_owner.temporarilyRemoveItemFromInventory(to_integrate)) 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 020cd7b4ebf89b..1d431fdb546ae9 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -5,7 +5,6 @@ id = SPECIES_LIZARD inherent_traits = list( TRAIT_MUTANT_COLORS, - TRAIT_CAN_USE_FLIGHT_POTION, TRAIT_TACKLING_TAILED_DEFENDER, ) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_REPTILE @@ -28,7 +27,6 @@ exotic_bloodtype = "L" inert_mutation = /datum/mutation/human/firebreath death_sound = 'sound/voice/lizard/deathsound.ogg' - wing_types = list(/obj/item/organ/external/wings/functional/dragon) species_language_holder = /datum/language_holder/lizard digitigrade_customization = DIGITIGRADE_OPTIONAL @@ -74,13 +72,14 @@ return randname -//SKYRAT EDIT REMOVAL BEGIN +//NOVA EDIT REMOVAL BEGIN /* /datum/species/lizard/randomize_features(mob/living/carbon/human/human_mob) - human_mob.dna.features["body_markings"] = pick(GLOB.body_markings_list) - randomize_external_organs(human_mob) + var/list/features = ..() + features["body_markings"] = pick(GLOB.body_markings_list) + return features */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END /datum/species/lizard/get_scream_sound(mob/living/carbon/human/lizard) return pick( @@ -159,7 +158,7 @@ Lizard subspecies: ASHWALKERS BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/lizard, ) -/datum/species/lizard/get_physical_attributes() +/datum/species/lizard/ashwalker/get_physical_attributes() return "Ash Walkers are identical to lizardpeople in almost all aspects. \ Unlike them, they're always digitigrade, they can breathe Lavaland's often noxious atmosphere and resist viruses. They are usually illiterate." diff --git a/code/modules/mob/living/carbon/human/species_types/monkeys.dm b/code/modules/mob/living/carbon/human/species_types/monkeys.dm index df289c514dcf9c..146cdd4903e4ef 100644 --- a/code/modules/mob/living/carbon/human/species_types/monkeys.dm +++ b/code/modules/mob/living/carbon/human/species_types/monkeys.dm @@ -12,13 +12,13 @@ meat = /obj/item/food/meat/slab/monkey knife_butcher_results = list(/obj/item/food/meat/slab/monkey = 5, /obj/item/stack/sheet/animalhide/monkey = 1) inherent_traits = list( - TRAIT_NO_UNDERWEAR, - TRAIT_NO_BLOOD_OVERLAY, TRAIT_GUN_NATURAL, + TRAIT_NO_AUGMENTS, + TRAIT_NO_BLOOD_OVERLAY, + TRAIT_NO_DNA_COPY, + TRAIT_NO_UNDERWEAR, TRAIT_VENTCRAWLER_NUDE, TRAIT_WEAK_SOUL, - TRAIT_NO_TRANSFORMATION_STING, - TRAIT_NO_AUGMENTS, ) no_equip_flags = ITEM_SLOT_OCLOTHING | ITEM_SLOT_GLOVES | ITEM_SLOT_FEET | ITEM_SLOT_SUITSTORE changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | ERT_SPAWN | SLIME_EXTRACT @@ -59,7 +59,8 @@ C.RemoveElement(/datum/element/human_biter) /datum/species/monkey/check_roundstart_eligible() - if(check_holidays(MONKEYDAY)) + // STOP ADDING MONKEY SUBTYPES YOU HEATHEN + if(check_holidays(MONKEYDAY) && id == SPECIES_MONKEY) return TRUE return ..() @@ -80,7 +81,7 @@ /datum/species/monkey/get_species_description() return "Monkeys are a type of primate that exist between humans and animals on the evolutionary chain. \ - Every year, on Monkey Day, Nanotrasen shows their respect for the little guys by allowing them to roam the station freely." + Every year, on Monkey Day, Symphionia shows their respect for the little guys by allowing them to roam the station freely." /datum/species/monkey/get_species_lore() return list( @@ -166,11 +167,11 @@ build_all_button_icons() -/obj/item/organ/internal/brain/primate/on_insert(mob/living/carbon/primate) +/obj/item/organ/internal/brain/primate/on_mob_insert(mob/living/carbon/primate) . = ..() RegisterSignal(primate, COMSIG_MOVABLE_CROSS, PROC_REF(on_crossed), TRUE) -/obj/item/organ/internal/brain/primate/on_remove(mob/living/carbon/primate) +/obj/item/organ/internal/brain/primate/on_mob_remove(mob/living/carbon/primate) . = ..() UnregisterSignal(primate, COMSIG_MOVABLE_CROSS) @@ -208,13 +209,5 @@ TRAIT_NOHUNGER, TRAIT_VENTCRAWLER_NUDE, ) - bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/monkey, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/monkey, - BODY_ZONE_HEAD = /obj/item/bodypart/head/monkey, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/monkey, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/monkey, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/monkey, - ) #undef MONKEY_SPEC_ATTACK_BITE_MISS_CHANCE 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 d8d49f7958f1f7..911813ac43c4a0 100644 --- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm @@ -4,20 +4,18 @@ id = SPECIES_MOTH inherent_traits = list( TRAIT_HAS_MARKINGS, - TRAIT_CAN_USE_FLIGHT_POTION, TRAIT_TACKLING_WINGED_ATTACKER, TRAIT_ANTENNAE, ) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG mutant_bodyparts = list("moth_markings" = "None") - // external_organs = list(/obj/item/organ/external/wings/moth = "Plain", /obj/item/organ/external/antennae = "Plain") // SKYRAT EDIT - Fixing moths + // external_organs = list(/obj/item/organ/external/wings/moth = "Plain", /obj/item/organ/external/antennae = "Plain") // NOVA EDIT - Fixing moths meat = /obj/item/food/meat/slab/human/mutant/moth mutanttongue = /obj/item/organ/internal/tongue/moth 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) payday_modifier = 1.0 family_heirlooms = list(/obj/item/flashlight/lantern/heirloom_moth) @@ -61,9 +59,10 @@ if(istype(attacking_item, /obj/item/melee/flyswatter)) damage_mods += 10 // Yes, a 10x damage modifier -/datum/species/moth/randomize_features(mob/living/carbon/human/human_mob) - human_mob.dna.features["moth_markings"] = pick(GLOB.moth_wings_list) - randomize_external_organs(human_mob) +/datum/species/moth/randomize_features() + var/list/features = ..() + features["moth_markings"] = pick(GLOB.moth_wings_list) // NOVA EDIT CHANGE - ORIGINAL: features["moth_markings"] = pick(GLOB.moth_markings_list) + return features /datum/species/moth/get_scream_sound(mob/living/carbon/human/human) return 'sound/voice/moth/scream_moth.ogg' diff --git a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm index 308645c9ea103d..59099cec175a81 100644 --- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm @@ -2,7 +2,7 @@ name = "Mushroomperson" plural_form = "Mushroompeople" id = SPECIES_MUSHROOM - mutant_bodyparts = list("caps" = list(MUTANT_INDEX_NAME = "Round", MUTANT_INDEX_COLOR_LIST = list("#FF4B19"))) // SKYRAT EDIT - Customization - ORIGINAL: mutant_bodyparts = list("caps" = "Round") + mutant_bodyparts = list("caps" = list(MUTANT_INDEX_NAME = "Round", MUTANT_INDEX_COLOR_LIST = list("#FF4B19"))) // NOVA EDIT - Customization - ORIGINAL: mutant_bodyparts = list("caps" = "Round") changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN fixed_mut_color = "#DBBF92" @@ -42,8 +42,8 @@ . = ..() if(ishuman(C)) var/mob/living/carbon/human/H = C - if(!H.dna.mutant_bodyparts["caps"] || H.dna.mutant_bodyparts["caps"][MUTANT_INDEX_NAME] != "None") // SKYRAT EDIT - Customization - ORIGINAL: if(!H.dna.features["caps"]) - H.dna.mutant_bodyparts["caps"] = list(MUTANT_INDEX_NAME = "Round", MUTANT_INDEX_COLOR_LIST = list(H.hair_color)) // SKYRAT EDIT - Customization - ORIGINAL: H.dna.features["caps"] = "Round" + if(!H.dna.mutant_bodyparts["caps"] || H.dna.mutant_bodyparts["caps"][MUTANT_INDEX_NAME] != "None") // NOVA EDIT - Customization - ORIGINAL: if(!H.dna.features["caps"]) + H.dna.mutant_bodyparts["caps"] = list(MUTANT_INDEX_NAME = "Round", MUTANT_INDEX_COLOR_LIST = list(H.hair_color)) // NOVA EDIT - Customization - ORIGINAL: H.dna.features["caps"] = "Round" handle_mutant_bodyparts(H) mush = new(null) mush.teach(H) @@ -60,6 +60,6 @@ if(chem.type == /datum/reagent/toxin/plantbgone/weedkiller) affected.adjustToxLoss(3 * REM * seconds_per_tick) -/datum/species/mush/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour, force_update = FALSE) //SKYRAT EDIT - ORIGINAL: /datum/species/mush/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour) (one parameter added) +/datum/species/mush/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour, force_update = FALSE) //NOVA EDIT - ORIGINAL: /datum/species/mush/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour) (one parameter added) forced_colour = FALSE return ..() 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 67f57f75a5ad25..eaabee63485a43 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -8,13 +8,15 @@ inherent_traits = list( TRAIT_GENELESS, TRAIT_HARDLY_WOUNDED, - TRAIT_RADIMMUNE, - TRAIT_RESISTCOLD, TRAIT_NOBLOOD, TRAIT_NO_DNA_COPY, - TRAIT_NO_TRANSFORMATION_STING, + TRAIT_NO_PLASMA_TRANSFORM, + TRAIT_RADIMMUNE, + TRAIT_RESISTCOLD, + TRAIT_UNHUSKABLE, ) + inherent_biotypes = MOB_HUMANOID|MOB_MINERAL inherent_respiration_type = RESPIRATION_PLASMA mutantlungs = /obj/item/organ/internal/lungs/plasmaman diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index 0b645fd120a1c4..a28cd78e708def 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -8,7 +8,7 @@ TRAIT_PLANT_SAFE, ) external_organs = list( - // /obj/item/organ/external/pod_hair = "None", // SKYRAT EDIT REMOVAL - Customization (it messes up unit tests.) + // /obj/item/organ/external/pod_hair = "None", // NOVA EDIT REMOVAL - Customization (it messes up unit tests.) ) inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_PLANT inherent_factions = list(FACTION_PLANTS, FACTION_VINES) @@ -105,6 +105,3 @@ )) return to_add - -/datum/species/pod/randomize_features(mob/living/carbon/human_mob) - randomize_external_organs(human_mob) diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm index 1bd77a4356f08a..d95062cee2cef6 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -22,7 +22,7 @@ mutantlungs = null species_language_holder = /datum/language_holder/shadowpeople - examine_limb_id = SPECIES_SHADOW // SKYRAT EDIT: Fixing Shadowpeople + examine_limb_id = SPECIES_SHADOW // NOVA EDIT: Fixing Shadowpeople bodypart_overrides = list( BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/shadow, BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/shadow, @@ -50,15 +50,15 @@ return list( "Long ago, the Spinward Sector used to be inhabited by terrifying aliens aptly named \"Shadowlings\" \ after their control over darkness, and tendancy to kidnap victims into the dark maintenance shafts. \ - Around 2558, the long campaign Nanotrasen waged against the space terrors ended with the full extinction of the Shadowlings.", + Around 2558, the long campaign Symphionia waged against the space terrors ended with the full extinction of the Shadowlings.", "Victims of their kidnappings would become brainless thralls, and via surgery they could be freed from the Shadowling's control. \ Those more unlucky would have their entire body transformed by the Shadowlings to better serve in kidnappings. \ Unlike the brain tumors of lesser control, these greater thralls could not be reverted.", "With Shadowlings long gone, their will is their own again. But their bodies have not reverted, burning in exposure to light. \ - Nanotrasen has assured the victims that they are searching for a cure. No further information has been given, even years later. \ - Most shadowpeople now assume Nanotrasen has long since shelfed the project.", + Symphionia has assured the victims that they are searching for a cure. No further information has been given, even years later. \ + Most shadowpeople now assume Symphionia has long since shelfed the project.", ) /datum/species/shadow/create_pref_unique_perks() @@ -89,11 +89,20 @@ return to_add +/obj/item/organ/internal/eyes/shadow + name = "burning red eyes" + desc = "Even without their shadowy owner, looking at these eyes gives you a sense of dread." + icon = 'icons/obj/medical/organs/shadow_organs.dmi' + color_cutoffs = list(20, 10, 40) + pepperspray_protect = TRUE + /// the key to some of their powers /obj/item/organ/internal/brain/shadow name = "shadowling tumor" desc = "Something that was once a brain, before being remolded by a shadowling. It has adapted to the dark, irreversibly." icon = 'icons/obj/medical/organs/shadow_organs.dmi' + /// What status effect do we gain while in darkness? + var/applied_status = /datum/status_effect/shadow_regeneration /obj/item/organ/internal/brain/shadow/on_life(seconds_per_tick, times_fired) . = ..() @@ -102,14 +111,34 @@ return var/light_amount = owner_turf.get_lumcount() - if(light_amount > SHADOW_SPECIES_LIGHT_THRESHOLD) //if there's enough light, start dying + if (light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD) //heal in the dark + owner.apply_status_effect(applied_status) + if (!owner.has_status_effect(applied_status)) owner.take_overall_damage(brute = 0.5 * seconds_per_tick, burn = 0.5 * seconds_per_tick, required_bodytype = BODYTYPE_ORGANIC) - else if (light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD) //heal in the dark - owner.heal_overall_damage(brute = 0.5 * seconds_per_tick, burn = 0.5 * seconds_per_tick, required_bodytype = BODYTYPE_ORGANIC) -/obj/item/organ/internal/eyes/shadow - name = "burning red eyes" - desc = "Even without their shadowy owner, looking at these eyes gives you a sense of dread." - icon = 'icons/obj/medical/organs/shadow_organs.dmi' - color_cutoffs = list(20, 10, 40) - pepperspray_protect = TRUE +/// Heal in darkness and potentially trigger other effects, persists for a short duration after leaving +/datum/status_effect/shadow_regeneration + id = "shadow_regeneration" + duration = 2 SECONDS + status_type = STATUS_EFFECT_REFRESH + alert_type = /atom/movable/screen/alert/status_effect/shadow_regeneration + +/datum/status_effect/shadow_regeneration/on_apply() + . = ..() + if (!.) + return FALSE + heal_owner() + return TRUE + +/datum/status_effect/shadow_regeneration/refresh(effect) + . = ..() + heal_owner() + +/// Regenerate health whenever this status effect is applied or reapplied +/datum/status_effect/shadow_regeneration/proc/heal_owner() + owner.heal_overall_damage(brute = 1, burn = 1, required_bodytype = BODYTYPE_ORGANIC) + +/atom/movable/screen/alert/status_effect/shadow_regeneration + name = "Shadow Regeneration" + desc = "Bathed in soothing darkness, you will slowly heal yourself." + icon_state = "lightless" diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm index 67051c20607252..8160ba6a901bcb 100644 --- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm +++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm @@ -6,24 +6,23 @@ meat = /obj/item/food/meat/slab/human/mutant/skeleton inherent_traits = list( TRAIT_NO_UNDERWEAR, - TRAIT_CAN_USE_FLIGHT_POTION, TRAIT_EASYDISMEMBER, TRAIT_FAKEDEATH, TRAIT_GENELESS, TRAIT_LIMBATTACHMENT, + TRAIT_NOBLOOD, TRAIT_NOBREATH, - TRAIT_NOCLONELOSS, - TRAIT_RADIMMUNE, + TRAIT_NO_DNA_COPY, + TRAIT_NO_UNDERWEAR, TRAIT_PIERCEIMMUNE, + TRAIT_RADIMMUNE, TRAIT_RESISTCOLD, TRAIT_RESISTHEAT, TRAIT_RESISTHIGHPRESSURE, TRAIT_RESISTLOWPRESSURE, TRAIT_TOXIMMUNE, + TRAIT_UNHUSKABLE, TRAIT_XENO_IMMUNE, - TRAIT_NOBLOOD, - TRAIT_NO_DNA_COPY, - TRAIT_NO_TRANSFORMATION_STING, ) inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID mutanttongue = /obj/item/organ/internal/tongue/bone @@ -32,7 +31,6 @@ mutantheart = null mutantliver = /obj/item/organ/internal/liver/bone mutantlungs = null - wing_types = list(/obj/item/organ/external/wings/functional/skeleton) //They can technically be in an ERT changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN species_cookie = /obj/item/reagent_containers/condiment/milk diff --git a/code/modules/mob/living/carbon/human/species_types/snail.dm b/code/modules/mob/living/carbon/human/species_types/snail.dm index 036b5ad5c24746..9361a99e0b28eb 100644 --- a/code/modules/mob/living/carbon/human/species_types/snail.dm +++ b/code/modules/mob/living/carbon/human/species_types/snail.dm @@ -3,9 +3,9 @@ id = SPECIES_SNAIL inherent_traits = list( TRAIT_MUTANT_COLORS, - // TRAIT_NO_UNDERWEAR, //SKYRAT EDIT - Snails deserve to wear underwear + // TRAIT_NO_UNDERWEAR, //NOVA EDIT REMOVAL - Roundstart Snails - Snails deserve to wear underwear TRAIT_NO_SLIP_ALL, - TRAIT_WATER_BREATHING, //SKYRAT EDIT - Roundstart Snails + TRAIT_WATER_BREATHING, //NOVA EDIT ADDITION - Roundstart Snails - Sea snails exist, and land snails can weather being underwater for almost a day. ) coldmod = 0.5 //snails only come out when its cold and wet @@ -13,11 +13,9 @@ changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP sexes = FALSE //snails are hermaphrodites - eyes_icon = 'modular_skyrat/modules/organs/icons/snail_eyes.dmi' // SKYRAT EDIT - Roundstart Snails mutanteyes = /obj/item/organ/internal/eyes/snail mutanttongue = /obj/item/organ/internal/tongue/snail - mutantliver = /obj/item/organ/internal/liver/snail //SKYRAT EDIT - Roundstart Snails - // exotic_blood = /datum/reagent/lube // SKYRAT EDIT REMOVAL: Roundstart Snails - No more lube + exotic_blood = /datum/reagent/lube bodypart_overrides = list( BODY_ZONE_HEAD = /obj/item/bodypart/head/snail, @@ -50,9 +48,8 @@ if(new_snailperson.dropItemToGround(bag)) //returns TRUE even if its null new_snailperson.equip_to_slot_or_del(new /obj/item/storage/backpack/snail(new_snailperson), ITEM_SLOT_BACK) new_snailperson.AddElement(/datum/element/snailcrawl) - new_snailperson.update_icons() //SKYRAT EDIT: Roundstart Snails - //if(ishuman(new_snailperson)) //SKYRAT EDIT: Snails don't have exotic blood here! - // update_mail_goodies(new_snailperson) //SKYRAT EDIT END + if(ishuman(new_snailperson)) + update_mail_goodies(new_snailperson) /datum/species/snail/on_species_loss(mob/living/carbon/former_snailperson, datum/species/new_species, pref_load) . = ..() @@ -63,12 +60,12 @@ former_snailperson.temporarilyRemoveItemFromInventory(bag, TRUE) qdel(bag) -/*/datum/species/snail/update_quirk_mail_goodies(mob/living/carbon/human/recipient, datum/quirk/quirk, list/mail_goodies = list()) //SKYRAT EDIT: Snails don't have exotic blood here! +/datum/species/snail/update_quirk_mail_goodies(mob/living/carbon/human/recipient, datum/quirk/quirk, list/mail_goodies = list()) if(istype(quirk, /datum/quirk/blooddeficiency)) mail_goodies += list( /obj/item/reagent_containers/blood/snail ) - return ..()*/ //SKYRAT EDIT END + return ..() /obj/item/storage/backpack/snail name = "snail shell" @@ -80,81 +77,8 @@ armor_type = /datum/armor/backpack_snail max_integrity = 200 resistance_flags = FIRE_PROOF | ACID_PROOF - //SKYRAT EDIT BEGIN - Roundstart Snails - slowdown = 6 // The snail's shell is what's making them slow. - alternate_worn_layer = ABOVE_BODY_FRONT_LAYER //This makes them layer over tails like the cult backpack; some tails really shouldn't appear over them! - uses_advanced_reskins = TRUE - unique_reskin = list( - "Conical Shell" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', - RESKIN_ICON_STATE = "coneshell", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', - RESKIN_WORN_ICON_STATE = "coneshell" - ), - "Round Shell" = list( - RESKIN_ICON = 'icons/obj/storage/backpack.dmi', - RESKIN_ICON_STATE = "snailshell", - RESKIN_WORN_ICON = 'icons/mob/clothing/back/backpack.dmi', - RESKIN_WORN_ICON_STATE = "snailshell" - ), - "Cinnamon Shell" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', - RESKIN_ICON_STATE = "cinnamonshell", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', - RESKIN_WORN_ICON_STATE = "cinnamonshell" - ), - "Caramel Shell" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', - RESKIN_ICON_STATE = "caramelshell", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', - RESKIN_WORN_ICON_STATE = "caramelshell" - ), - "Metal Shell" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', - RESKIN_ICON_STATE = "mechashell", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', - RESKIN_WORN_ICON_STATE = "mechashell" - ), - "Pyramid Shell" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', - RESKIN_ICON_STATE = "pyramidshell", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', - RESKIN_WORN_ICON_STATE = "pyramidshell" - ), - "Ivory Pyramid Shell" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', - RESKIN_ICON_STATE = "pyramidshellwhite", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', - RESKIN_WORN_ICON_STATE = "pyramidshellwhite" - ), - "Spiral Shell" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', - RESKIN_ICON_STATE = "spiralshell", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', - RESKIN_WORN_ICON_STATE = "spiralshell" - ), - "Ivory Spiral Shell" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', - RESKIN_ICON_STATE = "spiralshellwhite", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', - RESKIN_WORN_ICON_STATE = "spiralshellwhite" - ), - "Rocky Shell" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', - RESKIN_ICON_STATE = "rockshell", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', - RESKIN_WORN_ICON_STATE = "rockshell" - ), - "Ivory Rocky Shell" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', - RESKIN_ICON_STATE = "rockshellwhite", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', - RESKIN_WORN_ICON_STATE = "rockshellwhite" - ), - ) - //SKYRAT EDIT END - Roundstart Snails -/datum/armor/backpack_snail +/datum/armor/backpack_snail //SKYRAT COMMENT CLARIFICATION - Roundstart Snails - These armor values don't actually do any protection of the wearer, this is for checking direct damage to the backpack. Damage resistance stuff is in their heart file. melee = 40 bullet = 30 laser = 30 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 4c2f1ffa70839f..427f1f5f71bf92 100644 --- a/code/modules/mob/living/carbon/human/species_types/vampire.dm +++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm @@ -53,7 +53,6 @@ need_mob_update += vampire.heal_overall_damage(brute = 2 * seconds_per_tick, burn = 2 * seconds_per_tick, updating_health = FALSE, required_bodytype = BODYTYPE_ORGANIC) need_mob_update += vampire.adjustToxLoss(-2 * seconds_per_tick, updating_health = FALSE,) need_mob_update += vampire.adjustOxyLoss(-2 * seconds_per_tick, updating_health = FALSE,) - need_mob_update += vampire.adjustCloneLoss(-2 * seconds_per_tick, updating_health = FALSE,) if(need_mob_update) vampire.updatehealth() return @@ -204,11 +203,11 @@ name = "vampire heart" color = "#1C1C1C" -/obj/item/organ/internal/heart/vampire/on_insert(mob/living/carbon/receiver) +/obj/item/organ/internal/heart/vampire/on_mob_insert(mob/living/carbon/receiver) . = ..() RegisterSignal(receiver, COMSIG_MOB_GET_STATUS_TAB_ITEMS, PROC_REF(get_status_tab_item)) -/obj/item/organ/internal/heart/vampire/on_remove(mob/living/carbon/heartless) +/obj/item/organ/internal/heart/vampire/on_mob_remove(mob/living/carbon/heartless) . = ..() UnregisterSignal(heartless, COMSIG_MOB_GET_STATUS_TAB_ITEMS) diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm index 54382dcf021765..39903878ec4d88 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -7,22 +7,21 @@ mutanttongue = /obj/item/organ/internal/tongue/zombie inherent_traits = list( // SHARED WITH ALL ZOMBIES - TRAIT_NO_ZOMBIFY, TRAIT_EASILY_WOUNDED, TRAIT_EASYDISMEMBER, TRAIT_FAKEDEATH, TRAIT_LIMBATTACHMENT, + TRAIT_LIVERLESS_METABOLISM, TRAIT_NOBREATH, - TRAIT_NOCLONELOSS, TRAIT_NODEATH, TRAIT_NOHUNGER, - TRAIT_LIVERLESS_METABOLISM, + TRAIT_NO_DNA_COPY, + TRAIT_NO_ZOMBIFY, TRAIT_RADIMMUNE, TRAIT_RESISTCOLD, TRAIT_RESISTHIGHPRESSURE, TRAIT_RESISTLOWPRESSURE, TRAIT_TOXIMMUNE, - TRAIT_NO_TRANSFORMATION_STING, // HIGH FUNCTIONING UNIQUE TRAIT_NOBLOOD, TRAIT_SUCCUMB_OVERRIDE, @@ -105,11 +104,11 @@ TRAIT_EASYDISMEMBER, TRAIT_FAKEDEATH, TRAIT_LIMBATTACHMENT, + TRAIT_LIVERLESS_METABOLISM, TRAIT_NOBREATH, - TRAIT_NOCLONELOSS, TRAIT_NODEATH, TRAIT_NOHUNGER, - TRAIT_LIVERLESS_METABOLISM, + TRAIT_NO_DNA_COPY, TRAIT_RADIMMUNE, TRAIT_RESISTCOLD, TRAIT_RESISTHIGHPRESSURE, @@ -174,26 +173,6 @@ if(!HAS_TRAIT(carbon_mob, TRAIT_CRITICAL_CONDITION) && SPT_PROB(2, seconds_per_tick)) playsound(carbon_mob, pick(spooks), 50, TRUE, 10) -//Congrats you somehow died so hard you stopped being a zombie -/datum/species/zombie/infectious/spec_death(gibbed, mob/living/carbon/C) - . = ..() - var/obj/item/organ/internal/zombie_infection/infection - infection = C.get_organ_slot(ORGAN_SLOT_ZOMBIE) - if(infection) - qdel(infection) - -/datum/species/zombie/infectious/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - - // Deal with the source of this zombie corruption - // Infection organ needs to be handled separately from mutant_organs - // because it persists through species transitions - var/obj/item/organ/internal/zombie_infection/infection - infection = C.get_organ_slot(ORGAN_SLOT_ZOMBIE) - if(!infection) - infection = new() - infection.Insert(C) - // Your skin falls off /datum/species/human/krokodil_addict name = "\improper Krokodil Human" diff --git a/code/modules/mob/living/carbon/human/status_procs.dm b/code/modules/mob/living/carbon/human/status_procs.dm index 8f6dc8efeb940c..6f4e8570099af4 100644 --- a/code/modules/mob/living/carbon/human/status_procs.dm +++ b/code/modules/mob/living/carbon/human/status_procs.dm @@ -30,11 +30,3 @@ . = ..() if(.) update_body_parts() - -/mob/living/carbon/human/become_husk(source) - if(istype(dna.species, /datum/species/skeleton)) //skeletons shouldn't be husks. - cure_husk() - return - . = ..() - if(.) - update_body_parts() diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index fc96815045d92e..a375dbe878dfcc 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -455,3 +455,21 @@ covered_flags |= worn_item.body_parts_covered return covered_flags + +/// Attempts to equip the given item in a conspicious place. +/// This is used when, for instance, a character spawning with an item +/// in their hands would be a dead giveaway that they are an antagonist. +/// Returns the human readable name of where it placed the item, or null otherwise. +/mob/living/carbon/proc/equip_conspicuous_item(obj/item/item, delete_item_if_failed = TRUE) + var/list/slots = list ( + "backpack" = ITEM_SLOT_BACKPACK, + "left pocket" = ITEM_SLOT_LPOCKET, + "right pocket" = ITEM_SLOT_RPOCKET + ) + + var/placed_in = equip_in_one_of_slots(item, slots, indirect_action = TRUE) + + if (isnull(placed_in) && delete_item_if_failed) + qdel(item) + + return placed_in diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 353b8de7bd7840..fea1de2ecc684f 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -2,20 +2,20 @@ if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(isopenturf(loc)) var/turf/open/my_our_turf = loc if(my_our_turf.pollution) my_our_turf.pollution.touch_act(src) - //SKYRAT EDIT END + //NOVA EDIT END if(damageoverlaytemp) damageoverlaytemp = 0 update_damage_hud() - if(IS_IN_STASIS(src)) + if(HAS_TRAIT(src, TRAIT_STASIS)) . = ..() - reagents.handle_stasis_chems(src, seconds_per_tick, times_fired) + reagents?.handle_stasis_chems(src, seconds_per_tick, times_fired) else //Reagent processing needs to come before breathing, to prevent edge cases. handle_dead_metabolization(seconds_per_tick, times_fired) //Dead metabolization first since it can modify life metabolization. @@ -34,11 +34,9 @@ if(stat == DEAD) stop_sound_channel(CHANNEL_HEARTBEAT) else - if(getStaminaLoss() > 0 && stam_regen_start_time <= world.time) adjustStaminaLoss(-INFINITY) - - handle_bodyparts(seconds_per_tick, times_fired) + handle_bodyparts(seconds_per_tick, times_fired) if(. && mind) //. == not dead for(var/key in mind.addiction_points) @@ -114,7 +112,7 @@ breath = loc_as_obj.handle_internal_lifeform(src, BREATH_VOLUME) else if(isturf(loc)) //Breathe from loc as turf - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION //Underwater breathing var/turf/our_turf = loc if(our_turf.liquids && !HAS_TRAIT(src, TRAIT_NOBREATH) && ((body_position == LYING_DOWN && our_turf.liquids.liquid_state >= LIQUID_STATE_WAIST) || (body_position == STANDING_UP && our_turf.liquids.liquid_state >= LIQUID_STATE_FULLTILE))) @@ -142,7 +140,7 @@ next_smell = world.time + SMELL_COOLDOWN open_turf.pollution.smell_act(src) open_turf.pollution.breathe_act(src) - //SKYRAT EDIT END + //NOVA EDIT END var/breath_moles = 0 if(environment) breath_moles = environment.total_moles()*BREATH_PERCENTAGE @@ -490,7 +488,7 @@ /mob/living/carbon/proc/handle_organs(seconds_per_tick, times_fired) if(stat == DEAD) - if(reagents.has_reagent(/datum/reagent/toxin/formaldehyde, 1) || reagents.has_reagent(/datum/reagent/cryostylane)) // No organ decay if the body contains formaldehyde. + if(reagents && (reagents.has_reagent(/datum/reagent/toxin/formaldehyde, 1) || reagents.has_reagent(/datum/reagent/cryostylane))) // No organ decay if the body contains formaldehyde. return for(var/obj/item/organ/internal/organ in organs) // On-death is where organ decay is handled @@ -511,13 +509,13 @@ /mob/living/carbon/handle_diseases(seconds_per_tick, times_fired) - for(var/thing in diseases) - var/datum/disease/D = thing - if(SPT_PROB(D.infectivity, seconds_per_tick)) - D.spread() - - if(stat != DEAD || D.process_dead) - D.stage_act(seconds_per_tick, times_fired) + for(var/datum/disease/disease as anything in diseases) + if(QDELETED(disease)) //Got cured/deleted while the loop was still going. + continue + if(SPT_PROB(disease.infectivity, seconds_per_tick)) + disease.spread() + if(stat != DEAD || disease.process_dead) + disease.stage_act(seconds_per_tick, times_fired) /mob/living/carbon/handle_wounds(seconds_per_tick, times_fired) for(var/datum/wound/wound as anything in all_wounds) @@ -571,9 +569,9 @@ * - times_fired: The number of times SSmobs has ticked. */ /mob/living/carbon/proc/handle_dead_metabolization(seconds_per_tick, times_fired) - if (stat != DEAD) + if(stat != DEAD) return - reagents.metabolize(src, seconds_per_tick, times_fired, can_overdose = TRUE, liverless = TRUE, dead = TRUE) // Your liver doesn't work while you're dead. + reagents?.metabolize(src, seconds_per_tick, times_fired, can_overdose = TRUE, liverless = TRUE, dead = TRUE) // Your liver doesn't work while you're dead. /// Base carbon environment handler, adds natural stabilization /mob/living/carbon/handle_environment(datum/gas_mixture/environment, seconds_per_tick, times_fired) @@ -805,12 +803,19 @@ */ /mob/living/carbon/proc/undergoing_cardiac_arrest() var/obj/item/organ/internal/heart/heart = get_organ_slot(ORGAN_SLOT_HEART) - if(istype(heart) && heart.beating) + if(istype(heart) && heart.is_beating()) return FALSE else if(!needs_heart()) return FALSE return TRUE +/** + * Causes the mob to either start or stop having a heart attack. + * + * status - Pass TRUE to start a heart attack, or FALSE to stop one. + * + * Returns TRUE if heart status was changed (heart attack -> no heart attack, or visa versa) + */ /mob/living/carbon/proc/set_heartattack(status) if(!can_heartattack()) return FALSE @@ -819,5 +824,7 @@ if(!istype(heart)) return FALSE - heart.beating = !status - return TRUE + if(status) + return heart.Stop() + + return heart.Restart() diff --git a/code/modules/mob/living/carbon/status_procs.dm b/code/modules/mob/living/carbon/status_procs.dm index b9b5fd0b36521b..9f718835956d26 100644 --- a/code/modules/mob/living/carbon/status_procs.dm +++ b/code/modules/mob/living/carbon/status_procs.dm @@ -13,7 +13,7 @@ to_chat(src, span_notice("You're too exhausted to keep going...")) add_traits(list(TRAIT_INCAPACITATED, TRAIT_IMMOBILIZED, TRAIT_FLOORED), STAMINA) - if(getStaminaLoss() < 162) // Puts you a little further into the initial stamcrit, makes stamcrit harder to outright counter with chems. //SKYRAT EDIT CHANGE + if(getStaminaLoss() < 162) // Puts you a little further into the initial stamcrit, makes stamcrit harder to outright counter with chems. //NOVA EDIT CHANGE adjustStaminaLoss(30, FALSE) /mob/living/carbon/adjust_disgust(amount, max = DISGUST_LEVEL_MAXEDOUT) diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 41eb7bb06f4ddf..a5d2d7b5558034 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -6,7 +6,7 @@ * * Arguuments: * * damage - Amount of damage - * * damagetype - What type of damage to do. one of [BRUTE], [BURN], [TOX], [OXY], [CLONE], [STAMINA], [BRAIN]. + * * damagetype - What type of damage to do. one of [BRUTE], [BURN], [TOX], [OXY], [STAMINA], [BRAIN]. * * def_zone - What body zone is being hit. Or a reference to what bodypart is being hit. * * blocked - Percent modifier to damage. 100 = 100% less damage dealt, 50% = 50% less damage dealt. * * forced - "Force" exactly the damage dealt. This means it skips damage modifier from blocked. @@ -62,7 +62,7 @@ damage_dealt = actual_hit.get_damage() - delta // Unfortunately bodypart receive_damage doesn't return damage dealt so we do it manually else damage_dealt = adjustBruteLoss(damage_amount, forced = forced) - INVOKE_ASYNC(src, TYPE_PROC_REF(/mob/living, adjust_pain), damage_amount) // SKYRAT EDIT ADDITION - ERP Pain + INVOKE_ASYNC(src, TYPE_PROC_REF(/mob/living, adjust_pain), damage_amount) // NOVA EDIT ADDITION - ERP Pain if(BURN) if(isbodypart(def_zone)) var/obj/item/bodypart/actual_hit = def_zone @@ -81,13 +81,11 @@ damage_dealt = delta - actual_hit.get_damage() // See above else damage_dealt = adjustFireLoss(damage_amount, forced = forced) - INVOKE_ASYNC(src, TYPE_PROC_REF(/mob/living, adjust_pain), damage_amount) // SKYRAT EDIT ADDITION - ERP Pain + INVOKE_ASYNC(src, TYPE_PROC_REF(/mob/living, adjust_pain), damage_amount) // NOVA EDIT ADDITION - ERP Pain if(TOX) damage_dealt = adjustToxLoss(damage_amount, forced = forced) if(OXY) damage_dealt = adjustOxyLoss(damage_amount, forced = forced) - if(CLONE) - damage_dealt = adjustCloneLoss(damage_amount, forced = forced) if(STAMINA) damage_dealt = adjustStaminaLoss(damage_amount, forced = forced) if(BRAIN) @@ -134,8 +132,6 @@ return adjustToxLoss(heal_amount) if(OXY) return adjustOxyLoss(heal_amount) - if(CLONE) - return adjustCloneLoss(heal_amount) if(STAMINA) return adjustStaminaLoss(heal_amount) @@ -154,14 +150,12 @@ return getToxLoss() if(OXY) return getOxyLoss() - if(CLONE) - return getCloneLoss() if(STAMINA) return getStaminaLoss() /// return the total damage of all types which update your health /mob/living/proc/get_total_damage(precision = DAMAGE_PRECISION) - return round(getBruteLoss() + getFireLoss() + getToxLoss() + getOxyLoss() + getCloneLoss(), precision) + return round(getBruteLoss() + getFireLoss() + getToxLoss() + getOxyLoss(), precision) /// Applies multiple damages at once via [apply_damage][/mob/living/proc/apply_damage] /mob/living/proc/apply_damages( @@ -169,7 +163,6 @@ burn = 0, tox = 0, oxy = 0, - clone = 0, def_zone = null, blocked = 0, stamina = 0, @@ -184,8 +177,6 @@ total_damage += apply_damage(tox, TOX, def_zone, blocked) if(oxy) total_damage += apply_damage(oxy, OXY, def_zone, blocked) - if(clone) - total_damage += apply_damage(clone, CLONE, def_zone, blocked) if(stamina) total_damage += apply_damage(stamina, STAMINA, def_zone, blocked) if(brain) @@ -262,6 +253,17 @@ return TRUE +/// Returns a multiplier to apply to a specific kind of damage +/mob/living/proc/get_damage_mod(damage_type) + switch(damage_type) + if (OXY) + return HAS_TRAIT(src, TRAIT_NOBREATH) ? 0 : 1 + if (TOX) + if (HAS_TRAIT(src, TRAIT_TOXINLOVER)) + return -1 + return HAS_TRAIT(src, TRAIT_TOXIMMUNE) ? 0 : 1 + return 1 + /mob/living/proc/getBruteLoss() return bruteloss @@ -412,40 +414,6 @@ if(updating_health) updatehealth() -/mob/living/proc/getCloneLoss() - return cloneloss - -/mob/living/proc/can_adjust_clone_loss(amount, forced, required_biotype = ALL) - if(!forced && (!(mob_biotypes & required_biotype) || status_flags & GODMODE || HAS_TRAIT(src, TRAIT_NOCLONELOSS))) - return FALSE - if(SEND_SIGNAL(src, COMSIG_LIVING_ADJUST_CLONE_DAMAGE, CLONE, amount, forced) & COMPONENT_IGNORE_CHANGE) - return FALSE - return TRUE - -/mob/living/proc/adjustCloneLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype = ALL) - if(!can_adjust_clone_loss(amount, forced, required_biotype)) - return 0 - . = cloneloss - cloneloss = clamp((cloneloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) - . -= cloneloss - if(. == 0) // no change, no need to update - return 0 - if(updating_health) - updatehealth() - -/mob/living/proc/setCloneLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype = ALL) - if(!forced && ( (status_flags & GODMODE) || HAS_TRAIT(src, TRAIT_NOCLONELOSS)) ) - return FALSE - if(!forced && !(mob_biotypes & required_biotype)) - return FALSE - . = cloneloss - cloneloss = amount - . -= cloneloss - if(!.) // no change, no need to update - return FALSE - if(updating_health) - updatehealth() - /mob/living/proc/adjustOrganLoss(slot, amount, maximum, required_organ_flag) return diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 6174a5793bc90b..b4eb2bed3b1a81 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -10,19 +10,20 @@ **/ /mob/living/proc/gib(drop_bitflags=NONE) var/prev_lying = lying_angle - if(stat != DEAD) - death(TRUE) + spawn_gibs(drop_bitflags) if(!prev_lying) gib_animation() + if(stat != DEAD) + death(TRUE) + ghostize() spill_organs(drop_bitflags) if(drop_bitflags & DROP_BODYPARTS) spread_bodyparts(drop_bitflags) - spawn_gibs(drop_bitflags) SEND_SIGNAL(src, COMSIG_LIVING_GIBBED, drop_bitflags) qdel(src) @@ -130,9 +131,9 @@ med_hud_set_status() stop_pulling() - cut_overlay(GLOB.combat_indicator_overlay) //SKYRAT EDIT ADDITION - COMBAT_INDICATOR - set_combat_indicator(FALSE) //SKYRAT EDIT ADDITION - COMBAT_INDICATOR - set_ssd_indicator(FALSE) //SKYRAT EDIT ADDITION - SSD_INDICATOR + cut_overlay(GLOB.combat_indicator_overlay) //NOVA EDIT ADDITION - COMBAT_INDICATOR + set_combat_indicator(FALSE) //NOVA EDIT ADDITION - COMBAT_INDICATOR + set_ssd_indicator(FALSE) //NOVA EDIT ADDITION - SSD_INDICATOR SEND_SIGNAL(src, COMSIG_LIVING_DEATH, gibbed) SEND_GLOBAL_SIGNAL(COMSIG_GLOB_MOB_DEATH, src, gibbed) diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index be71ef5c35042d..a2c484ee7e00a5 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -2,7 +2,7 @@ /* EMOTE DATUMS */ /datum/emote/living mob_type_allowed_typecache = /mob/living - mob_type_blacklist_typecache = list(/mob/living/brain) //SKYRAT EDIT - OVERWIRTTEN BY `modular_skyrat\modules\modular_implants\code\soulcatcher\soulcatcher_mob.dm` + mob_type_blacklist_typecache = list(/mob/living/brain) //NOVA EDIT - OVERWIRTTEN BY `modular_nova\modules\modular_implants\code\soulcatcher\soulcatcher_mob.dm` /datum/emote/living/blush key = "blush" @@ -140,7 +140,7 @@ hands_use_check = TRUE var/wing_time = 20 -//SKYRAT EDIT REMOVAL BEGIN - EMOTES - Not working due to modified mutant code, will be fixed later +//NOVA EDIT REMOVAL BEGIN - EMOTES - Not working due to modified mutant code, will be fixed later /* /datum/emote/living/flap/run_emote(mob/user, params, type_override, intentional) . = ..() @@ -162,11 +162,12 @@ if(istype(wings, /obj/item/organ/external/wings/moth)) playsound(H, 'sound/voice/moth/moth_flutter.ogg', 50, TRUE) */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END /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 @@ -194,6 +195,7 @@ /datum/emote/living/gasp_shock key = "gaspshock" key_third_person = "gaspsshock" + name = "gasp (Shock)" message = "gasps in shock!" message_mime = "gasps in silent shock!" emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE @@ -203,7 +205,7 @@ if(!ishuman(user)) return var/mob/living/carbon/human/human_user = user - if(human_user.dna.species.id == SPECIES_HUMAN && !HAS_MIND_TRAIT(human_user, TRAIT_MIMING)) + if(!HAS_MIND_TRAIT(human_user, TRAIT_MIMING)) // NOVA EDIT CHANGE - Let other species gasp - ORIGINAL: if(ishumanbasic(human_user) || isfelinid(human_user) && !HAS_MIND_TRAIT(human_user, TRAIT_MIMING)) if(human_user.physique == FEMALE) return pick('sound/voice/human/gasp_female1.ogg', 'sound/voice/human/gasp_female2.ogg', 'sound/voice/human/gasp_female3.ogg') else @@ -276,7 +278,7 @@ qdel(kiss_blower) to_chat(user, span_warning("You're incapable of blowing a kiss in your current state.")) -/* SKYRAT EDIT REMOVAL - EMOTES - MOVED TO EMOTES.DM MODULAR +/* NOVA EDIT REMOVAL - EMOTES - MOVED TO EMOTES.DM MODULAR /datum/emote/living/laugh key = "laugh" key_third_person = "laughs" @@ -294,12 +296,12 @@ if(!ishuman(user)) return var/mob/living/carbon/human/human_user = user - if(human_user.dna.species.id == SPECIES_HUMAN && !HAS_MIND_TRAIT(human_user, TRAIT_MIMING)) + if((ishumanbasic(human_user) || isfelinid(human_user)) && !HAS_MIND_TRAIT(human_user, TRAIT_MIMING)) if(human_user.gender == FEMALE) return 'sound/voice/human/womanlaugh.ogg' else return pick('sound/voice/human/manlaugh1.ogg', 'sound/voice/human/manlaugh2.ogg') -*/ //SKYRAT EDIT END +*/ //NOVA EDIT END /datum/emote/living/look key = "look" @@ -422,7 +424,7 @@ message_mime = "sniffs silently." emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE -//SKYRAT EDIT ADDITION +//NOVA EDIT ADDITION /datum/emote/living/sniff/run_emote(mob/user, params, type_override, intentional) . = ..() if(.) @@ -434,7 +436,7 @@ return carbon_user.next_smell = world.time + SMELL_COOLDOWN current_turf.pollution.smell_act(user) -//SKYRAT EDIT END +//NOVA EDIT END /datum/emote/living/snore key = "snore" @@ -466,7 +468,7 @@ message = "puts their hands on their head and falls to the ground, they surrender%s!" emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE -/* SKYRAT EDIT CHANGE - MOVED TO combat_indicator.dm IN INDICATORS MODULE +/* NOVA EDIT CHANGE - MOVED TO combat_indicator.dm IN INDICATORS MODULE /datum/emote/living/surrender/run_emote(mob/user, params, type_override, intentional) . = ..() if(. && isliving(user)) @@ -529,6 +531,7 @@ /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) @@ -553,12 +556,13 @@ /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 -#define YAWN_PROPAGATE_CHANCE_BASE 0 // SKYRAT EDIT - Group yawn no more - ORIGINAL: #define YAWN_PROPAGATE_CHANCE_BASE 40 -/// The base chance for your yawn to propagate to someone else if they're on the same tile as you -#define YAWN_PROPAGATE_CHANCE_DECAY 8 +#define YAWN_PROPAGATE_CHANCE_BASE 16 // NOVA EDIT - Group yawn no more - ORIGINAL: #define YAWN_PROPAGATE_CHANCE_BASE 20 +/// The amount the base chance to propagate yawns falls for each tile of distance +#define YAWN_PROPAGATE_CHANCE_DECAY 4 /datum/emote/living/yawn key = "yawn" @@ -575,7 +579,7 @@ if(!isliving(user)) return - if(!TIMER_COOLDOWN_CHECK(user, COOLDOWN_YAWN_PROPAGATION)) + if(TIMER_COOLDOWN_FINISHED(user, COOLDOWN_YAWN_PROPAGATION)) TIMER_COOLDOWN_START(user, COOLDOWN_YAWN_PROPAGATION, cooldown * 3) var/mob/living/carbon/carbon_user = user @@ -585,7 +589,7 @@ var/propagation_distance = user.client ? 5 : 2 // mindless mobs are less able to spread yawns for(var/mob/living/iter_living in view(user, propagation_distance)) - if(IS_DEAD_OR_INCAP(iter_living) || TIMER_COOLDOWN_CHECK(iter_living, COOLDOWN_YAWN_PROPAGATION)) + if(IS_DEAD_OR_INCAP(iter_living) || TIMER_COOLDOWN_RUNNING(iter_living, COOLDOWN_YAWN_PROPAGATION)) continue var/dist_between = get_dist(user, iter_living) @@ -604,7 +608,7 @@ /// This yawn has been triggered by someone else yawning specifically, likely after a delay. Check again if they don't have the yawned recently trait /datum/emote/living/yawn/proc/propagate_yawn(mob/user) - if(!istype(user) || TIMER_COOLDOWN_CHECK(user, COOLDOWN_YAWN_PROPAGATION)) + if(!istype(user) || TIMER_COOLDOWN_RUNNING(user, COOLDOWN_YAWN_PROPAGATION)) return user.emote("yawn") @@ -666,7 +670,7 @@ return TRUE /datum/emote/living/custom/proc/get_custom_emote_from_user() - return stripped_multiline_input(usr, "Choose an emote to display.", "Me" , null, MAX_MESSAGE_LEN) // SKYRAT EDIT CHANGE - ORIGINAL : return copytext(sanitize(input("Choose an emote to display.") as text|null), 1, MAX_MESSAGE_LEN) + return stripped_multiline_input(usr, "Choose an emote to display.", "Me" , null, MAX_MESSAGE_LEN) // NOVA EDIT CHANGE - ORIGINAL : return copytext(sanitize(input("Choose an emote to display.") as text|null), 1, MAX_MESSAGE_LEN) /datum/emote/living/custom/proc/get_custom_emote_type_from_user() var/type = input("Is this a visible or hearable emote?") as null|anything in list("Visible", "Hearable") @@ -711,7 +715,7 @@ else if(type_override) emote_type = type_override - message = user.say_emphasis(message) //SKYRAT EDIT ADDITION - EMOTES + message = user.say_emphasis(message) //NOVA EDIT ADDITION - EMOTES . = ..() @@ -721,7 +725,7 @@ /datum/emote/living/custom/replace_pronoun(mob/user, message) return message -//SKYRAT EDIT REMOVAL BEGIN - SYNTH EMOTES, NOW HANDLED IN SYNTH_EMOTES.DM +//NOVA EDIT REMOVAL BEGIN - SYNTH EMOTES, NOW HANDLED IN SYNTH_EMOTES.DM /* /datum/emote/living/beep key = "beep" key_third_person = "beeps" @@ -730,7 +734,7 @@ sound = 'sound/machines/twobeep.ogg' mob_type_allowed_typecache = list(/mob/living/brain, /mob/living/silicon) emote_type = EMOTE_AUDIBLE */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END /datum/emote/living/inhale key = "inhale" diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 446e92f09f0297..35866514b79e7a 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -21,9 +21,9 @@ var/turf/T = get_turf(src) if(!T) move_to_error_room() - var/msg = "[ADMIN_LOOKUPFLW(src)] was found to have no .loc with an attached client, if the cause is unknown it would be wise to ask how this was accomplished." - message_admins(msg) - send2tgs_adminless_only("Mob", msg, R_ADMIN) + var/msg = " was found to have no .loc with an attached client, if the cause is unknown it would be wise to ask how this was accomplished." + message_admins(ADMIN_LOOKUPFLW(src) + msg) + send2tgs_adminless_only("Mob", key_name_and_tag(src) + msg, R_ADMIN) src.log_message("was found to have no .loc with an attached client.", LOG_GAME) // This is a temporary error tracker to make sure we've caught everything @@ -40,7 +40,7 @@ if(isnull(loc) || HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return - if(!IS_IN_STASIS(src)) + if(!HAS_TRAIT(src, TRAIT_STASIS)) if(stat != DEAD) //Mutations and radiation diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 14f03ce29a2aa6..2e735212c5e136 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -46,24 +46,79 @@ QDEL_LIST(surgeries) return ..() -/mob/living/onZImpact(turf/T, levels, message = TRUE) - if(!isgroundlessturf(T)) - ZImpactDamage(T, levels) - message = FALSE +/mob/living/onZImpact(turf/impacted_turf, levels, impact_flags = NONE) + if(!isgroundlessturf(impacted_turf)) + impact_flags |= ZImpactDamage(impacted_turf, levels) + return ..() -/mob/living/proc/ZImpactDamage(turf/T, levels) - if(SEND_SIGNAL(src, COMSIG_LIVING_Z_IMPACT, levels, T) & NO_Z_IMPACT_DAMAGE) - return - //SKYRAT EDIT ADDITION - if(T.liquids && T.liquids.liquid_state >= LIQUID_STATE_WAIST) - Knockdown(20) - return - //SKYRAT EDIT END - visible_message(span_danger("[src] crashes into [T] with a sickening noise!"), \ - span_userdanger("You crash into [T] with a sickening noise!")) - adjustBruteLoss((levels * 5) ** 1.5) - Knockdown(levels * 50) +/** + * Called when this mob is receiving damage from falling + * + * * impacted_turf - the turf we are falling onto + * * levels - the number of levels we are falling + */ +/mob/living/proc/ZImpactDamage(turf/impacted_turf, levels) + . = SEND_SIGNAL(src, COMSIG_LIVING_Z_IMPACT, levels, impacted_turf) + if(. & ZIMPACT_CANCEL_DAMAGE) + return . + + //NOVA EDIT ADDITION START - Landing in liquids + if(impacted_turf.liquids && impacted_turf.liquids.liquid_state >= LIQUID_STATE_WAIST) + Knockdown(2 SECONDS) + return + //NOVA EDIT ADDITION END + // If you are incapped, you probably can't brace yourself + var/can_help_themselves = !incapacitated(IGNORE_RESTRAINTS) + if(levels <= 1 && can_help_themselves) + var/obj/item/organ/external/wings/gliders = get_organ_by_type(/obj/item/organ/external/wings) + if(HAS_TRAIT(src, TRAIT_FREERUNNING) || gliders?.can_soften_fall()) // the power of parkour or wings allows falling short distances unscathed + visible_message( + span_notice("[src] makes a hard landing on [impacted_turf] but remains unharmed from the fall."), + span_notice("You brace for the fall. You make a hard landing on [impacted_turf], but remain unharmed."), + ) + Knockdown(levels * 4 SECONDS) + return . | ZIMPACT_NO_MESSAGE + + var/incoming_damage = (levels * 5) ** 1.5 + // Smaller mobs with catlike grace can ignore damage (EG: cats) + var/small_surface_area = mob_size <= MOB_SIZE_SMALL + var/skip_knockdown = FALSE + if(HAS_TRAIT(src, TRAIT_CATLIKE_GRACE) && (small_surface_area || usable_legs >= 2) && body_position == STANDING_UP && can_help_themselves) + . |= ZIMPACT_NO_MESSAGE|ZIMPACT_NO_SPIN + skip_knockdown = TRUE + if(small_surface_area || (isfelinid(src) || istajaran(src))) // NOVA EDIT CHANGE - ORIGINAL: if(small_surface_area) + visible_message( + span_notice("[src] makes a hard landing on [impacted_turf], but lands safely on [p_their()] feet!"), + span_notice("You make a hard landing on [impacted_turf], but land safely on your feet!"), + ) + new /obj/effect/temp_visual/mook_dust/small(impacted_turf) + return . + + incoming_damage *= 1.66 + add_movespeed_modifier(/datum/movespeed_modifier/landed_on_feet) + addtimer(CALLBACK(src, TYPE_PROC_REF(/mob, remove_movespeed_modifier), /datum/movespeed_modifier/landed_on_feet), levels * 2 SECONDS) + visible_message( + span_danger("[src] makes a hard landing on [impacted_turf], landing on [p_their()] feet painfully!"), + span_userdanger("You make a hard landing on [impacted_turf], and instinctively land on your feet - painfully!"), + ) + new /obj/effect/temp_visual/mook_dust(impacted_turf) + + if(body_position == STANDING_UP) + var/damage_for_each_leg = round(incoming_damage / 2) + apply_damage(damage_for_each_leg, BRUTE, BODY_ZONE_L_LEG, wound_bonus = -2.5 * levels) + apply_damage(damage_for_each_leg, BRUTE, BODY_ZONE_R_LEG, wound_bonus = -2.5 * levels) + else + apply_damage(incoming_damage, BRUTE, spread_damage = TRUE) + + if(!skip_knockdown) + Knockdown(levels * 5 SECONDS) + return . + +/// Modifier for mobs landing on their feet after a fall +/datum/movespeed_modifier/landed_on_feet + movetypes = GROUND|UPSIDE_DOWN + multiplicative_slowdown = CRAWLING_ADD_SLOWDOWN / 2 //Generic Bump(). Override MobBump() and ObjBump() instead of this. /mob/living/Bump(atom/A) @@ -94,6 +149,9 @@ if(move_intent == MOVE_INTENT_WALK) return TRUE + if(SEND_SIGNAL(M, COMSIG_LIVING_PRE_MOB_BUMP, src) & COMPONENT_LIVING_BLOCK_PRE_MOB_BUMP) + return TRUE + SEND_SIGNAL(src, COMSIG_LIVING_MOB_BUMP, M) //Even if we don't push/swap places, we "touched" them, so spread fire spreadFire(M) @@ -132,7 +190,7 @@ if(!(world.time % 5)) to_chat(src, span_warning("[L] is restraining [P], you cannot push past.")) return TRUE - //SKYRAT EDIT ADDITION BEGIN - GUNPOINT + //NOVA EDIT ADDITION BEGIN - GUNPOINT if(L.gunpointed.len) var/is_pointing = FALSE for(var/datum/gunpoint/gp in L.gunpointed) @@ -147,7 +205,7 @@ if(!(world.time % 5)) to_chat(src, "[L] is holding someone at gunpoint, you cannot push past.") return TRUE - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END if(moving_diagonally)//no mob swap during diagonal moves. return TRUE @@ -350,7 +408,7 @@ log_combat(src, M, "grabbed", addition="passive grab") if(!supress_message && !(iscarbon(AM) && HAS_TRAIT(src, TRAIT_STRONG_GRABBER))) - //SKYRAT EDIT START - Tail coiling + //NOVA EDIT START - Tail coiling if(ishuman(M)) if(zone_selected == BODY_ZONE_PRECISE_GROIN && M.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) && src.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)) M.visible_message(span_warning("[src] coils their tail with [AM], wow is that okay in public?!"), "[src] has entwined their tail with yours!") @@ -361,7 +419,7 @@ M.visible_message(span_warning("[src] grabs [M] [grabbed_by_hands ? "by their hands":"passively"]!"), \ span_warning("[src] grabs you [grabbed_by_hands ? "by your hands":"passively"]!"), null, null, src) to_chat(src, span_notice("You grab [M] [grabbed_by_hands ? "by their hands":"passively"]!")) - // SKYRAT EDIT END + // NOVA EDIT END else M.visible_message(span_warning("[src] grabs [M] passively!"), \ span_warning("[src] grabs you passively!"), null, null, src) @@ -506,7 +564,7 @@ return TRUE if(!(flags & IGNORE_GRAB) && pulledby && pulledby.grab_state >= GRAB_AGGRESSIVE) return TRUE - if(!(flags & IGNORE_STASIS) && IS_IN_STASIS(src)) + if(!(flags & IGNORE_STASIS) && HAS_TRAIT(src, TRAIT_STASIS)) return TRUE return FALSE @@ -627,7 +685,7 @@ if(!silent) to_chat(src, span_notice("You will now stand up as soon as you are able to.")) else - /*if(!silent) SKYRAT EDIT REMOVAL + /*if(!silent) NOVA EDIT REMOVAL to_chat(src, "You stand up.")*/ get_up(instant) @@ -638,12 +696,12 @@ /// Proc to append and redefine behavior to the change of the [/mob/living/var/resting] variable. /mob/living/proc/update_resting() update_rest_hud_icon() - SEND_SIGNAL(src, COMSIG_LIVING_UPDATED_RESTING, resting) //SKYRAT EDIT ADDITION - GUNPOINT + SEND_SIGNAL(src, COMSIG_LIVING_UPDATED_RESTING, resting) //NOVA EDIT ADDITION - GUNPOINT /mob/living/proc/get_up(instant = FALSE) set waitfor = FALSE - var/get_up_speed = GET_UP_FAST //SKYRAT EDIT CHANGE : if(!instant && !do_after(src, 1 SECONDS, src, timed_action_flags = (IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE|IGNORE_HELD_ITEM), extra_checks = CALLBACK(src, TYPE_PROC_REF(/mob/living, rest_checks_callback)), interaction_key = DOAFTER_SOURCE_GETTING_UP)) + var/get_up_speed = GET_UP_FAST //NOVA EDIT CHANGE : if(!instant && !do_after(src, 1 SECONDS, src, timed_action_flags = (IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE|IGNORE_HELD_ITEM), extra_checks = CALLBACK(src, TYPE_PROC_REF(/mob/living, rest_checks_callback)), interaction_key = DOAFTER_SOURCE_GETTING_UP)) var/stam = getStaminaLoss() switch(FLOOR(stam,1)) if(STAMINA_THRESHOLD_MEDIUM_GET_UP to STAMINA_THRESHOLD_SLOW_GET_UP) @@ -661,11 +719,11 @@ if(!do_after(src, get_up_speed SECONDS, src, timed_action_flags = (IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE|IGNORE_HELD_ITEM), extra_checks = CALLBACK(src, /mob/living/proc/rest_checks_callback), interaction_key = DOAFTER_SOURCE_GETTING_UP)) return if(pulledby && pulledby.grab_state) - to_chat(src, span_warning("You fail to stand up, you're restrained!")) //SKYRAT EDIT ADDITION END + to_chat(src, span_warning("You fail to stand up, you're restrained!")) //NOVA EDIT ADDITION END return if(resting || body_position == STANDING_UP || HAS_TRAIT(src, TRAIT_FLOORED)) return - to_chat(src, span_notice("You stand up.")) //SKYRAT EDIT ADDITION + to_chat(src, span_notice("You stand up.")) //NOVA EDIT ADDITION set_body_position(STANDING_UP) set_lying_angle(0) @@ -761,7 +819,7 @@ /mob/living/proc/updatehealth() if(status_flags & GODMODE) return - set_health(maxHealth - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() - getCloneLoss()) + set_health(maxHealth - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()) update_stat() med_hud_set_health() med_hud_set_status() @@ -815,6 +873,9 @@ * */ /mob/living/proc/revive(full_heal_flags = NONE, excess_healing = 0, force_grab_ghost = FALSE) + if(QDELETED(src)) + // Bro just like, don't ok + return FALSE if(excess_healing) adjustOxyLoss(-excess_healing, updating_health = FALSE) adjustToxLoss(-excess_healing, updating_health = FALSE, forced = TRUE) //slime friendly @@ -824,7 +885,7 @@ if(full_heal_flags) fully_heal(full_heal_flags) - if(stat == DEAD && can_be_revived() || (full_heal_flags & HEAL_ADMIN)) //in some cases you can't revive (e.g. no brain) //SKYRAT EDIT ADDITION - DNR TRAIT - Added: " || (full_heal_flags & HEAL_ADMIN)" + if(stat == DEAD && can_be_revived() || (full_heal_flags & HEAL_ADMIN)) //in some cases you can't revive (e.g. no brain) //NOVA EDIT ADDITION - DNR TRAIT - Added: " || (full_heal_flags & HEAL_ADMIN)" set_suicide(FALSE) set_stat(UNCONSCIOUS) //the mob starts unconscious, updatehealth() //then we check if the mob should wake up. @@ -906,8 +967,6 @@ setToxLoss(0, updating_health = FALSE, forced = TRUE) if(heal_flags & HEAL_OXY) setOxyLoss(0, updating_health = FALSE, forced = TRUE) - if(heal_flags & HEAL_CLONE) - setCloneLoss(0, updating_health = FALSE, forced = TRUE) if(heal_flags & HEAL_BRUTE) setBruteLoss(0, updating_health = FALSE, forced = TRUE) if(heal_flags & HEAL_BURN) @@ -998,23 +1057,6 @@ if(body_position == LYING_DOWN && !buckled && prob(getBruteLoss()*200/maxHealth)) makeTrail(newloc, T, old_direction) -/** - * Called by mob/living attackby() - * Checks if there's active surgery on the mob that can be continued with the item - */ -/mob/living/proc/can_perform_surgery(mob/living/user, params) - for(var/datum/surgery/operations as anything in surgeries) - if(user.combat_mode) - break - if(IS_IN_INVALID_SURGICAL_POSITION(src, operations)) - continue - if(!(operations.surgery_flags & SURGERY_SELF_OPERABLE) && (user == src)) - continue - var/list/modifiers = params2list(params) - if(operations.next_step(user, modifiers)) - return TRUE - return FALSE - ///Called by mob Move() when the lying_angle is different than zero, to better visually simulate crawling. /mob/living/proc/lying_angle_on_movement(direct) if(direct & EAST) @@ -1157,9 +1199,10 @@ /mob/living/resist_grab(moving_resist) . = TRUE - if(pulledby.grab_state || body_position == LYING_DOWN || HAS_TRAIT(src, TRAIT_GRABWEAKNESS) || staminaloss > STAMINA_THRESHOLD_HARD_RESIST) //SKYRAT EDIT CHANGE: if(pulledby.grab_state || resting || HAS_TRAIT(src, TRAIT_GRABWEAKNESS)) + //If we're in an aggressive grab or higher, we're lying down, we're vulnerable to grabs, or we're staggered and we have some amount of stamina loss, we must resist + if(pulledby.grab_state || body_position == LYING_DOWN || HAS_TRAIT(src, TRAIT_GRABWEAKNESS) || get_timed_status_effect_duration(/datum/status_effect/staggered) && getStaminaLoss() > STAMINA_THRESHOLD_HARD_RESIST) //NOVA EDIT CHANGE - ORIGINAL : if(pulledby.grab_state || body_position == LYING_DOWN || HAS_TRAIT(src, TRAIT_GRABWEAKNESS) || get_timed_status_effect_duration(/datum/status_effect/staggered) && getStaminaLoss() >= 30) var/altered_grab_state = pulledby.grab_state - if(body_position == LYING_DOWN || HAS_TRAIT(src, TRAIT_GRABWEAKNESS) && pulledby.grab_state < GRAB_KILL) //If prone, resisting out of a grab is equivalent to 1 grab state higher. won't make the grab state exceed the normal max, however - SKYRAT EDIT CHANGE: if((resting || HAS_TRAIT(src, TRAIT_GRABWEAKNESS)) && pulledby.grab_state < GRAB_KILL) //If resting, resisting out of a grab is equivalent to 1 grab state higher. won't make the grab state exceed the normal max, however + if((body_position == LYING_DOWN || HAS_TRAIT(src, TRAIT_GRABWEAKNESS) || get_timed_status_effect_duration(/datum/status_effect/staggered)) && pulledby.grab_state < GRAB_KILL) //If prone, resisting out of a grab is equivalent to 1 grab state higher. won't make the grab state exceed the normal max, however altered_grab_state++ if(staminaloss > STAMINA_THRESHOLD_HARD_RESIST) altered_grab_state++ @@ -1167,9 +1210,9 @@ altered_grab_state++ var/mob/living/M = pulledby if(M.staminaloss > STAMINA_THRESHOLD_HARD_RESIST) - altered_grab_state-- //SKYRAT EDIT END + altered_grab_state-- //NOVA EDIT END var/resist_chance = BASE_GRAB_RESIST_CHANCE /// see defines/combat.dm, this should be baseline 60% - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION // Akula grab resist if(HAS_TRAIT(src, TRAIT_SLIPPERY)) resist_chance += AKULA_GRAB_RESIST_BONUS @@ -1178,10 +1221,10 @@ resist_chance += OVERSIZED_GRAB_RESIST_BONUS if(HAS_TRAIT(pulledby, TRAIT_OVERSIZED)) resist_chance -= OVERSIZED_GRAB_RESIST_BONUS - //SKYRAT EDIT END + //NOVA EDIT END resist_chance = (resist_chance/altered_grab_state) ///Resist chance divided by the value imparted by your grab state. It isn't until you reach neckgrab that you gain a penalty to escaping a grab. if(prob(resist_chance)) - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION // Akula break-out flavor if(HAS_TRAIT(src, TRAIT_SLIPPERY)) visible_message(span_cyan("[src] slips free of [pulledby]'s grip!"), \ @@ -1191,7 +1234,7 @@ log_combat(pulledby, src, "broke grab") pulledby.stop_pulling() return FALSE - //SKYRAT EDIT END + //NOVA EDIT END visible_message(span_danger("[src] breaks free of [pulledby]'s grip!"), \ span_danger("You break free of [pulledby]'s grip!"), null, null, pulledby) to_chat(pulledby, span_warning("[src] breaks free of your grip!")) @@ -1199,7 +1242,7 @@ pulledby.stop_pulling() return FALSE else - adjustStaminaLoss(rand(10,15))//failure to escape still imparts a pretty serious penalty //SKYRAT EDIT CHANGE: //adjustStaminaLoss(rand(15,20))//failure to escape still imparts a pretty serious penalty + adjustStaminaLoss(rand(10,15))//failure to escape still imparts a pretty serious penalty //NOVA EDIT CHANGE: //adjustStaminaLoss(rand(15,20))//failure to escape still imparts a pretty serious penalty visible_message("[src] struggles as they fail to break free of [pulledby]'s grip!", \ "You struggle as you fail to break free of [pulledby]'s grip!", null, null, pulledby) to_chat(pulledby, "[src] struggles as they fail to break free of your grip!") @@ -1213,14 +1256,11 @@ buckled.user_unbuckle_mob(src,src) /mob/living/proc/resist_fire() - return + return FALSE /mob/living/proc/resist_restraints() return -/mob/living/proc/get_visible_name() - return name - /mob/living/proc/update_gravity(gravity) // Handle movespeed stuff var/speed_change = max(0, gravity - STANDARD_GRAVITY) @@ -1235,6 +1275,7 @@ if(-INFINITY to NEGATIVE_GRAVITY) if(!istype(gravity_alert, /atom/movable/screen/alert/negative)) throw_alert(ALERT_GRAVITY, /atom/movable/screen/alert/negative) + ADD_TRAIT(src, TRAIT_MOVE_UPSIDE_DOWN, NEGATIVE_GRAVITY_TRAIT) var/matrix/flipped_matrix = transform flipped_matrix.b = -flipped_matrix.b flipped_matrix.e = -flipped_matrix.e @@ -1259,6 +1300,7 @@ if(istype(gravity_alert, /atom/movable/screen/alert/weightless)) REMOVE_TRAIT(src, TRAIT_MOVE_FLOATING, NO_GRAVITY_TRAIT) if(istype(gravity_alert, /atom/movable/screen/alert/negative)) + REMOVE_TRAIT(src, TRAIT_MOVE_UPSIDE_DOWN, NEGATIVE_GRAVITY_TRAIT) var/matrix/flipped_matrix = transform flipped_matrix.b = -flipped_matrix.b flipped_matrix.e = -flipped_matrix.e @@ -1422,7 +1464,8 @@ else for(var/obj/item/item in src) if(!dropItemToGround(item)) - qdel(item) + if(!(item.item_flags & ABSTRACT)) + qdel(item) continue item_contents += item @@ -1507,6 +1550,9 @@ /mob/living/basic/morph, /mob/living/basic/mouse, /mob/living/basic/mushroom, + /mob/living/basic/parrot, + /mob/living/basic/pet/cat, + /mob/living/basic/pet/cat/cak, /mob/living/basic/pet/dog/breaddog, /mob/living/basic/pet/dog/corgi, /mob/living/basic/pet/dog/pug, @@ -1517,12 +1563,8 @@ /mob/living/basic/stickman, /mob/living/basic/stickman/dog, /mob/living/simple_animal/hostile/megafauna/dragon/lesser, - /mob/living/simple_animal/parrot, - /mob/living/simple_animal/pet/cat, - /mob/living/simple_animal/pet/cat/cak, ) new_mob = new picked_animal(loc) - if(WABBAJACK_HUMAN) var/mob/living/carbon/human/new_human = new(loc) @@ -1622,10 +1664,11 @@ GLOBAL_LIST_EMPTY(fire_appearances) * Signals the extinguishing. */ /mob/living/proc/extinguish_mob() + if(HAS_TRAIT(src, TRAIT_PERMANENTLY_ONFIRE)) //The everlasting flames will not be extinguished + return var/datum/status_effect/fire_handler/fire_stacks/fire_status = has_status_effect(/datum/status_effect/fire_handler/fire_stacks) if(!fire_status || !fire_status.on_fire) return - remove_status_effect(/datum/status_effect/fire_handler/fire_stacks) /** @@ -1640,10 +1683,14 @@ GLOBAL_LIST_EMPTY(fire_appearances) /mob/living/proc/adjust_fire_stacks(stacks, fire_type = /datum/status_effect/fire_handler/fire_stacks) if(stacks < 0) + if(HAS_TRAIT(src, TRAIT_PERMANENTLY_ONFIRE)) //You can't reduce fire stacks of the everlasting flames + return stacks = max(-fire_stacks, stacks) apply_status_effect(fire_type, stacks) /mob/living/proc/adjust_wet_stacks(stacks, wet_type = /datum/status_effect/fire_handler/wet_stacks) + if(HAS_TRAIT(src, TRAIT_PERMANENTLY_ONFIRE)) //The everlasting flames will not be extinguished + return if(stacks < 0) stacks = max(fire_stacks, stacks) apply_status_effect(wet_type, stacks) @@ -1662,7 +1709,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) /mob/living/proc/set_fire_stacks(stacks, fire_type = /datum/status_effect/fire_handler/fire_stacks, remove_wet_stacks = TRUE) if(stacks < 0) //Shouldn't happen, ever - CRASH("set_fire_stacks recieved negative [stacks] fire stacks") + CRASH("set_fire_stacks received negative [stacks] fire stacks") if(remove_wet_stacks) remove_status_effect(/datum/status_effect/fire_handler/wet_stacks) @@ -1675,7 +1722,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) /mob/living/proc/set_wet_stacks(stacks, wet_type = /datum/status_effect/fire_handler/wet_stacks, remove_fire_stacks = TRUE) if(stacks < 0) - CRASH("set_wet_stacks recieved negative [stacks] wet stacks") + CRASH("set_wet_stacks received negative [stacks] wet stacks") if(remove_fire_stacks) remove_status_effect(/datum/status_effect/fire_handler/fire_stacks) @@ -1817,7 +1864,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) if(isliving(dropping)) var/mob/living/M = dropping if(M.can_be_held && U.pulling == M) - return M.mob_try_pickup(U) //SKYRAT EDIT CHANGE //blame kevinz dont open the mobs inventory if you are picking them up + return M.mob_try_pickup(U) //NOVA EDIT CHANGE //blame kevinz dont open the mobs inventory if you are picking them up . = ..() /mob/living/proc/mob_pickup(mob/living/user) @@ -1846,7 +1893,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) if(!do_after(user, 2 SECONDS, target = src)) return FALSE mob_pickup(user) - return TRUE //SKYRAT EDIT CHANGE + return TRUE //NOVA EDIT CHANGE /mob/living/proc/get_static_viruses() //used when creating blood and other infective objects if(!LAZYLEN(diseases)) @@ -1932,7 +1979,6 @@ GLOBAL_LIST_EMPTY(fire_appearances) FIRE:[getFireLoss()] TOXIN:[getToxLoss()] OXY:[getOxyLoss()] - CLONE:[getCloneLoss()] BRAIN:[get_organ_loss(ORGAN_SLOT_BRAIN)] STAMINA:[getStaminaLoss()] @@ -1951,13 +1997,22 @@ GLOBAL_LIST_EMPTY(fire_appearances) /mob/living/vv_do_topic(list/href_list) . = ..() + if(!.) + return + if(href_list[VV_HK_GIVE_SPEECH_IMPEDIMENT]) if(!check_rights(NONE)) return admin_give_speech_impediment(usr) - if (href_list[VV_HK_ADD_MOOD]) + + if(href_list[VV_HK_ADD_MOOD]) + if(!check_rights(NONE)) + return admin_add_mood_event(usr) - if (href_list[VV_HK_REMOVE_MOOD]) + + if(href_list[VV_HK_REMOVE_MOOD]) + if(!check_rights(NONE)) + return admin_remove_mood_event(usr) if(href_list[VV_HK_GIVE_HALLUCINATION]) @@ -1969,6 +2024,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) if(!check_rights(NONE)) return admin_give_delusion(usr) + if(href_list[VV_HK_GIVE_GUARDIAN_SPIRIT]) if(!check_rights(NONE)) return @@ -2372,10 +2428,10 @@ GLOBAL_LIST_EMPTY(fire_appearances) body_position = new_value SEND_SIGNAL(src, COMSIG_LIVING_SET_BODY_POSITION, new_value, .) if(new_value == LYING_DOWN) // From standing to lying down. - //SKYRAT EDIT ADDITION BEGIN - SOUNDS + //NOVA EDIT ADDITION BEGIN - SOUNDS if(has_gravity()) playsound(src, "bodyfall", 50, TRUE) - //SKYRAT EDIT END + //NOVA EDIT END on_lying_down() else // From lying down to standing up. on_standing_up() @@ -2562,7 +2618,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) /mob/living/proc/compare_sentience_type(compare_type) return FALSE -/// Proc called when targetted by a lazarus injector +/// Proc called when TARGETED by a lazarus injector /mob/living/proc/lazarus_revive(mob/living/reviver, malfunctioning) revive(HEAL_ALL) befriend(reviver) @@ -2576,7 +2632,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) lazarus_policy = get_policy(ROLE_LAZARUS_BAD) || "You have been revived by a malfunctioning lazarus injector! You are now enslaved by whoever revived you." to_chat(src, span_boldnotice(lazarus_policy)) -/// Proc for giving a mob a new 'friend', generally used for AI control and targetting. Returns false if already friends. +/// Proc for giving a mob a new 'friend', generally used for AI control and targeting. Returns false if already friends. /mob/living/proc/befriend(mob/living/new_friend) SHOULD_CALL_PARENT(TRUE) var/friend_ref = REF(new_friend) @@ -2636,16 +2692,12 @@ GLOBAL_LIST_EMPTY(fire_appearances) return var/del_mob = FALSE var/mob/old_mob - var/ai_control = FALSE - var/list/possible_players = list("None", "Poll Ghosts") + sort_list(GLOB.clients) + var/list/possible_players = list("Poll Ghosts") + sort_list(GLOB.clients) var/client/guardian_client = tgui_input_list(admin, "Pick the player to put in control.", "Guardian Controller", possible_players) - if(!guardian_client) + if(isnull(guardian_client)) return - else if(guardian_client == "None") - guardian_client = null - ai_control = (tgui_alert(admin, "Do you want to give the spirit AI control?", "Guardian Controller", list("Yes", "No")) == "Yes") 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/candidates = SSpolling.poll_ghost_candidates("Do you want to play as an admin created Guardian Spirit of [real_name]?", check_jobban = ROLE_PAI, poll_time = 10 SECONDS, ignore_category = POLL_IGNORE_HOLOPARASITE, pic_source = src, role_name_text = "guardian spirit") if(LAZYLEN(candidates)) var/mob/dead/observer/candidate = pick(candidates) guardian_client = candidate.client @@ -2656,7 +2708,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) old_mob = guardian_client.mob if(isobserver(old_mob) || tgui_alert(admin, "Do you want to delete [guardian_client]'s old mob?", "Guardian Controller", list("Yes"," No")) == "Yes") del_mob = TRUE - var/picked_type = tgui_input_list(admin, "Pick the guardian type.", "Guardian Controller", subtypesof(/mob/living/simple_animal/hostile/guardian)) + var/picked_type = tgui_input_list(admin, "Pick the guardian type.", "Guardian Controller", subtypesof(/mob/living/basic/guardian)) var/picked_theme = tgui_input_list(admin, "Pick the guardian theme.", "Guardian Controller", list(GUARDIAN_THEME_TECH, GUARDIAN_THEME_MAGIC, GUARDIAN_THEME_CARP, GUARDIAN_THEME_MINER, "Random")) if(picked_theme == "Random") picked_theme = null //holopara code handles not having a theme by giving a random one @@ -2664,20 +2716,34 @@ GLOBAL_LIST_EMPTY(fire_appearances) var/picked_color = input(admin, "Set the guardian's color, cancel to let player set it.", "Guardian Controller", "#ffffff") as color|null if(tgui_alert(admin, "Confirm creation.", "Guardian Controller", list("Yes", "No")) != "Yes") return - var/mob/living/simple_animal/hostile/guardian/summoned_guardian = new picked_type(src, picked_theme) + var/mob/living/basic/guardian/summoned_guardian = new picked_type(src, picked_theme) summoned_guardian.set_summoner(src, different_person = TRUE) if(picked_name) summoned_guardian.fully_replace_character_name(null, picked_name) if(picked_color) - summoned_guardian.set_guardian_color(picked_color) + summoned_guardian.set_guardian_colour(picked_color) summoned_guardian.key = guardian_client?.key guardian_client?.init_verbs() if(del_mob) qdel(old_mob) - if(ai_control) - summoned_guardian.can_have_ai = TRUE - summoned_guardian.toggle_ai(AI_ON) - summoned_guardian.manifest() message_admins(span_adminnotice("[key_name_admin(admin)] gave a guardian spirit controlled by [guardian_client || "AI"] to [src].")) log_admin("[key_name(admin)] gave a guardian spirit controlled by [guardian_client] to [src].") - SSblackbox.record_feedback("tally", "admin_verb", 1, "Give Guardian Spirit") + BLACKBOX_LOG_ADMIN_VERB("Give Guardian Spirit") + +/mob/living/verb/lookup() + set name = "Look Up" + set category = "IC" + + if(client.perspective != MOB_PERSPECTIVE) + end_look_up() + else + look_up() + +/mob/living/verb/lookdown() + set name = "Look Down" + set category = "IC" + + if(client.perspective != MOB_PERSPECTIVE) + end_look_down() + else + look_down() diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 361bd5e27698e2..fd3aeb80dab22d 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -1,6 +1,6 @@ /mob/living/proc/run_armor_check(def_zone = null, attack_flag = MELEE, absorb_text = null, soften_text = null, armour_penetration, penetrated_text, silent=FALSE, weak_against_armour = FALSE) - SEND_SIGNAL(src, COMSIG_MOB_RUN_ARMOR) //SKYRAT EDIT ADDITION + SEND_SIGNAL(src, COMSIG_MOB_RUN_ARMOR) //NOVA EDIT ADDITION var/our_armor = getarmor(def_zone, attack_flag) @@ -151,17 +151,17 @@ return . = combat_mode combat_mode = new_mode - SEND_SIGNAL(src, COMSIG_LIVING_COMBAT_MODE_TOGGLE, new_mode) //SKYRAT EDIT ADDITION + SEND_SIGNAL(src, COMSIG_LIVING_COMBAT_MODE_TOGGLE, new_mode) //NOVA EDIT ADDITION if(hud_used?.action_intent) hud_used.action_intent.update_appearance() - //SKYRAT EDIT ADDITION BEGIN + //NOVA EDIT ADDITION BEGIN if(!ishuman(src) && !ckey) if(combat_mode) set_combat_indicator(TRUE) else set_combat_indicator(FALSE) face_mouse = (client?.prefs?.read_preference(/datum/preference/toggle/face_cursor_combat_mode) && combat_mode) ? TRUE : FALSE - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END if(silent || !(client?.prefs.read_preference(/datum/preference/toggle/sound_combatmode))) return @@ -171,35 +171,55 @@ SEND_SOUND(src, sound('sound/misc/ui_toggleoffcombat.ogg', volume = 25)) //Slightly modified version of the above /mob/living/hitby(atom/movable/AM, skipcatch, hitpush = TRUE, blocked = FALSE, datum/thrownthing/throwingdatum) - if(isitem(AM)) - var/obj/item/thrown_item = AM - var/zone = get_random_valid_zone(BODY_ZONE_CHEST, 65)//Hits a random part of the body, geared towards the chest - var/nosell_hit = SEND_SIGNAL(thrown_item, COMSIG_MOVABLE_IMPACT_ZONE, src, zone, blocked, throwingdatum) // TODO: find a better way to handle hitpush and skipcatch for humans - if(nosell_hit) - skipcatch = TRUE + if(!isitem(AM)) + // Filled with made up numbers for non-items. + if(check_block(AM, 30, "\the [AM.name]", THROWN_PROJECTILE_ATTACK, 0, BRUTE)) hitpush = FALSE + skipcatch = TRUE + blocked = TRUE + else + playsound(loc, 'sound/weapons/genhit.ogg', 50, TRUE, -1) //Item sounds are handled in the item itself + if(!isvendor(AM) && !iscarbon(AM)) //Vendors have special interactions, while carbon mobs already generate visible messages! + visible_message(span_danger("[src] is hit by [AM]!"), \ + span_userdanger("You're hit by [AM]!")) + log_combat(AM, src, "hit ") + return ..() - if(blocked) - return TRUE - - var/mob/thrown_by = thrown_item.thrownby?.resolve() - if(thrown_by) - log_combat(thrown_by, src, "threw and hit", thrown_item) - if(nosell_hit) - return ..() - visible_message(span_danger("[src] is hit by [thrown_item]!"), \ - span_userdanger("You're hit by [thrown_item]!")) - if(!thrown_item.throwforce) - return - var/armor = run_armor_check(zone, MELEE, "Your armor has protected your [parse_zone(zone)].", "Your armor has softened hit to your [parse_zone(zone)].", thrown_item.armour_penetration, "", FALSE, thrown_item.weak_against_armour) - apply_damage(thrown_item.throwforce, thrown_item.damtype, zone, armor, sharpness = thrown_item.get_sharpness(), wound_bonus = (nosell_hit * CANT_WOUND)) - if(QDELETED(src)) //Damage can delete the mob. - return - if(body_position == LYING_DOWN) // physics says it's significantly harder to push someone by constantly chucking random furniture at them if they are down on the floor. - hitpush = FALSE + var/obj/item/thrown_item = AM + if(thrown_item.thrownby == WEAKREF(src)) //No throwing stuff at yourself to trigger hit reactions return ..() - playsound(loc, 'sound/weapons/genhit.ogg', 50, TRUE, -1) //Item sounds are handled in the item itself + if(check_block(AM, thrown_item.throwforce, "\the [thrown_item.name]", THROWN_PROJECTILE_ATTACK, 0, thrown_item.damtype)) + hitpush = FALSE + skipcatch = TRUE + blocked = TRUE + + var/zone = get_random_valid_zone(BODY_ZONE_CHEST, 65)//Hits a random part of the body, geared towards the chest + var/nosell_hit = SEND_SIGNAL(thrown_item, COMSIG_MOVABLE_IMPACT_ZONE, src, zone, blocked, throwingdatum) // TODO: find a better way to handle hitpush and skipcatch for humans + if(nosell_hit) + skipcatch = TRUE + hitpush = FALSE + + if(blocked) + return TRUE + + var/mob/thrown_by = thrown_item.thrownby?.resolve() + if(thrown_by) + log_combat(thrown_by, src, "threw and hit", thrown_item) + else + log_combat(thrown_item, src, "hit ") + if(nosell_hit) + return ..() + visible_message(span_danger("[src] is hit by [thrown_item]!"), \ + span_userdanger("You're hit by [thrown_item]!")) + if(!thrown_item.throwforce) + return + var/armor = run_armor_check(zone, MELEE, "Your armor has protected your [parse_zone(zone)].", "Your armor has softened hit to your [parse_zone(zone)].", thrown_item.armour_penetration, "", FALSE, thrown_item.weak_against_armour) + apply_damage(thrown_item.throwforce, thrown_item.damtype, zone, armor, sharpness = thrown_item.get_sharpness(), wound_bonus = (nosell_hit * CANT_WOUND)) + if(QDELETED(src)) //Damage can delete the mob. + return + if(body_position == LYING_DOWN) // physics says it's significantly harder to push someone by constantly chucking random furniture at them if they are down on the floor. + hitpush = FALSE return ..() /mob/living/fire_act() @@ -282,53 +302,66 @@ 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) + if(.) + return FALSE // looks wrong, but if the attack chain was cancelled we don't propogate it up to children calls. Yeah it's cringe. + if(user.melee_damage_upper == 0) if(user != src) - visible_message(span_notice("\The [user] [user.friendly_verb_continuous] [src]!"), \ - span_notice("\The [user] [user.friendly_verb_continuous] you!"), null, COMBAT_MESSAGE_RANGE, user) + visible_message( + span_notice("[user] [user.friendly_verb_continuous] [src]!"), + span_notice("[user] [user.friendly_verb_continuous] you!"), + vision_distance = COMBAT_MESSAGE_RANGE, + ignored_mobs = user, + ) to_chat(user, span_notice("You [user.friendly_verb_simple] [src]!")) return FALSE + if(HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, span_warning("You don't want to hurt anyone!")) return FALSE + var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) + if(check_block(user, damage, "[user]'s [user.attack_verb_simple]", MELEE_ATTACK/*or UNARMED_ATTACK?*/, user.armour_penetration, user.melee_damage_type)) + return FALSE + if(user.attack_sound) - playsound(loc, user.attack_sound, 50, TRUE, TRUE) + playsound(src, user.attack_sound, 50, TRUE, TRUE) + user.do_attack_animation(src) - visible_message(span_danger("\The [user] [user.attack_verb_continuous] [src]!"), \ - span_userdanger("\The [user] [user.attack_verb_continuous] you!"), null, COMBAT_MESSAGE_RANGE, user) + visible_message( + span_danger("[user] [user.attack_verb_continuous] [src]!"), + span_userdanger("[user] [user.attack_verb_continuous] you!"), + null, + COMBAT_MESSAGE_RANGE, + user, + ) + + var/dam_zone = dismembering_strike(user, pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) + if(!dam_zone) //Dismemberment successful + return FALSE + + var/armor_block = run_armor_check(user.zone_selected, MELEE, armour_penetration = user.armour_penetration) + to_chat(user, span_danger("You [user.attack_verb_simple] [src]!")) log_combat(user, src, "attacked") - return TRUE + var/damage_done = apply_damage( + damage = damage, + damagetype = user.melee_damage_type, + def_zone = user.zone_selected, + blocked = armor_block, + wound_bonus = user.wound_bonus, + bare_wound_bonus = user.bare_wound_bonus, + sharpness = user.sharpness, + attack_direction = get_dir(user, src), + ) + return damage_done /mob/living/attack_hand(mob/living/carbon/human/user, list/modifiers) . = ..() + if(.) + return TRUE for(var/datum/surgery/operations as anything in surgeries) if(user.combat_mode) @@ -342,6 +375,8 @@ if (martial_result != MARTIAL_ATTACK_INVALID) return martial_result + return FALSE + /mob/living/attack_paw(mob/living/carbon/human/user, list/modifiers) var/martial_result = user.apply_martial_art(src, modifiers) if (martial_result != MARTIAL_ATTACK_INVALID) @@ -362,6 +397,10 @@ if(user.is_muzzled() || user.is_mouth_covered(ITEM_SLOT_MASK)) to_chat(user, span_warning("You can't bite with your mouth covered!")) return FALSE + + if(check_block(user, 1, "[user]'s bite", UNARMED_ATTACK, 0, BRUTE)) + return FALSE + user.do_attack_animation(src, ATTACK_EFFECT_BITE) if (HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER) || prob(75)) log_combat(user, src, "attacked") @@ -381,7 +420,10 @@ if(L.combat_mode) if(HAS_TRAIT(L, TRAIT_PACIFISM)) to_chat(L, span_warning("You don't want to hurt anyone!")) - return + return FALSE + + if(check_block(L, 1, "[L]'s bite", UNARMED_ATTACK, 0, BRUTE)) + return FALSE L.do_attack_animation(src) if(prob(90)) @@ -395,29 +437,34 @@ visible_message(span_danger("[L.name]'s bite misses [src]!"), \ span_danger("You avoid [L.name]'s bite!"), span_hear("You hear the sound of jaws snapping shut!"), COMBAT_MESSAGE_RANGE, L) to_chat(L, span_warning("Your bite misses [src]!")) - else - visible_message(span_notice("[L.name] rubs its head against [src]."), \ - span_notice("[L.name] rubs its head against you."), null, null, L) - to_chat(L, span_notice("You rub your head against [src].")) - return FALSE + return FALSE + + visible_message(span_notice("[L.name] rubs its head against [src]."), \ + span_notice("[L.name] rubs its head against you."), null, null, L) + to_chat(L, span_notice("You rub your head against [src].")) return FALSE /mob/living/attack_alien(mob/living/carbon/alien/adult/user, list/modifiers) SEND_SIGNAL(src, COMSIG_MOB_ATTACK_ALIEN, user, modifiers) if(LAZYACCESS(modifiers, RIGHT_CLICK)) + if(check_block(user, 0, "[user]'s tackle", MELEE_ATTACK, 0, BRUTE)) + return FALSE user.do_attack_animation(src, ATTACK_EFFECT_DISARM) return TRUE + if(user.combat_mode) if(HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, span_warning("You don't want to hurt anyone!")) return FALSE + if(check_block(user, user.melee_damage_upper, "[user]'s slash", MELEE_ATTACK, 0, BRUTE)) + return FALSE user.do_attack_animation(src) return TRUE - else - visible_message(span_notice("[user] caresses [src] with its scythe-like arm."), \ - span_notice("[user] caresses you with its scythe-like arm."), null, null, user) - to_chat(user, span_notice("You caress [src] with your scythe-like arm.")) - return FALSE + + visible_message(span_notice("[user] caresses [src] with its scythe-like arm."), \ + span_notice("[user] caresses you with its scythe-like arm."), null, null, user) + to_chat(user, span_notice("You caress [src] with your scythe-like arm.")) + return FALSE /mob/living/attack_hulk(mob/living/carbon/human/user) ..() @@ -494,7 +541,7 @@ if(3) new /mob/living/basic/construct/artificer/hostile(get_turf(src)) if(4) - new /mob/living/simple_animal/hostile/construct/proteon/hostile(get_turf(src)) + new /mob/living/basic/construct/proteon/hostile(get_turf(src)) spawn_dust() investigate_log("has been gibbed by Nar'Sie.", INVESTIGATE_DEATHS) gib() @@ -579,3 +626,9 @@ var/new_angle_s = SIMPLIFY_DEGREES(face_angle + GET_ANGLE_OF_INCIDENCE(face_angle, (ricocheting_projectile.Angle + 180))) ricocheting_projectile.set_angle(new_angle_s) return TRUE + +/mob/living/proc/check_block(atom/hit_by, damage, attack_text = "the attack", attack_type = MELEE_ATTACK, armour_penetration = 0, damage_type = BRUTE) + if(SEND_SIGNAL(src, COMSIG_LIVING_CHECK_BLOCK, hit_by, damage, attack_text, attack_type, armour_penetration, damage_type) & SUCCESSFUL_BLOCK) + return TRUE + + return FALSE diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 5b2f0fc020bf7d..addd5c11531252 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -1,6 +1,6 @@ /mob/living see_invisible = SEE_INVISIBLE_LIVING - hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD, DNR_HUD) // SKYRAT EDIT ADDITION - DNR_HUD + hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD, DNR_HUD) // NOVA EDIT ADDITION - DNR_HUD pressure_resistance = 10 hud_type = /datum/hud/living @@ -30,8 +30,6 @@ var/toxloss = 0 ///Burn damage caused by being way too hot, too cold or burnt. var/fireloss = 0 - ///Damage caused by being cloned or ejected from the cloner early. slimes also deal cloneloss damage to victims - var/cloneloss = 0 /// The movement intent of the mob (run/wal) var/move_intent = MOVE_INTENT_RUN @@ -225,6 +223,3 @@ /// 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_fov.dm b/code/modules/mob/living/living_fov.dm index 6d47085855b3b3..0f400017515a70 100644 --- a/code/modules/mob/living/living_fov.dm +++ b/code/modules/mob/living/living_fov.dm @@ -10,7 +10,7 @@ // ^ If that case has changed and you need that check, add it. var/rel_x = observed_atom.x - my_turf.x var/rel_y = observed_atom.y - my_turf.y - if(fov_view && observed_atom.plane == GAME_PLANE_FOV_HIDDEN) //SKYRAT EDIT CHANGE + if(fov_view) if(rel_x >= -1 && rel_x <= 1 && rel_y >= -1 && rel_y <= 1) //Cheap way to check inside that 3x3 box around you return TRUE //Also checks if both are 0 to stop division by zero @@ -133,10 +133,3 @@ mouse_opacity = MOUSE_OPACITY_TRANSPARENT plane = FIELD_OF_VISION_BLOCKER_PLANE screen_loc = "BOTTOM,LEFT" - -/atom/movable/screen/fov_shadow - icon = 'icons/effects/fov/field_of_view.dmi' - icon_state = "90_v" - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - plane = ABOVE_LIGHTING_PLANE - screen_loc = "BOTTOM,LEFT" diff --git a/code/modules/mob/living/living_movement.dm b/code/modules/mob/living/living_movement.dm index f694e685cf09db..48ec170af7285e 100644 --- a/code/modules/mob/living/living_movement.dm +++ b/code/modules/mob/living/living_movement.dm @@ -60,7 +60,8 @@ if(.) return if(mover.throwing) - return (!density || (body_position == LYING_DOWN) || (mover.throwing.thrower == src && !ismob(mover))) + var/mob/thrower = mover.throwing.get_thrower() + return (!density || (body_position == LYING_DOWN) || (thrower == src && !ismob(mover))) if(buckled == mover) return TRUE if(ismob(mover) && (mover in buckled_mobs)) @@ -89,11 +90,11 @@ if(pulling) if(isliving(pulling)) var/mob/living/L = pulling - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(HAS_TRAIT(L, TRAIT_OVERSIZED) && !HAS_TRAIT(src, TRAIT_OVERSIZED) && !iscyborg(src)) add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/bulky_drag, multiplicative_slowdown = PULL_OVERSIZED_SLOWDOWN) return - //SKYRAT EDIT END + //NOVA EDIT END if(!slowed_by_drag || L.body_position == STANDING_UP || L.buckled || grab_state >= GRAB_AGGRESSIVE) remove_movespeed_modifier(/datum/movespeed_modifier/bulky_drag) return diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index 52daa3c2f0ab92..3fd6ea155bc868 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -20,11 +20,11 @@ GLOBAL_LIST_INIT(department_radio_keys, list( RADIO_KEY_SYNDICATE = RADIO_CHANNEL_SYNDICATE, RADIO_KEY_UPLINK = RADIO_CHANNEL_UPLINK, RADIO_KEY_CENTCOM = RADIO_CHANNEL_CENTCOM, - RADIO_KEY_FACTION = RADIO_CHANNEL_FACTION, //SKYRAT EDIT ADDITION - FACTION - RADIO_KEY_CYBERSUN = RADIO_CHANNEL_CYBERSUN, //SKYRAT EDIT ADDITION - MAPPING - RADIO_KEY_INTERDYNE = RADIO_CHANNEL_INTERDYNE, //SKYRAT EDIT ADDITION - MAPPING - RADIO_KEY_GUILD = RADIO_CHANNEL_GUILD, //SKYRAT EDIT ADDITION - MAPPING - RADIO_KEY_TARKON = RADIO_CHANNEL_TARKON, //SKYRAT EDIT ADDITION - MAPPING + RADIO_KEY_FACTION = RADIO_CHANNEL_FACTION, //NOVA EDIT ADDITION - FACTION + RADIO_KEY_CYBERSUN = RADIO_CHANNEL_CYBERSUN, //NOVA EDIT ADDITION - MAPPING + RADIO_KEY_INTERDYNE = RADIO_CHANNEL_INTERDYNE, //NOVA EDIT ADDITION - MAPPING + RADIO_KEY_GUILD = RADIO_CHANNEL_GUILD, //NOVA EDIT ADDITION - MAPPING + RADIO_KEY_TARKON = RADIO_CHANNEL_TARKON, //NOVA EDIT ADDITION - MAPPING // Admin MODE_KEY_ADMIN = MODE_ADMIN, @@ -147,7 +147,7 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( say_dead(original_message) return - if(HAS_TRAIT(src, TRAIT_SOFTSPOKEN)) + if(HAS_TRAIT(src, TRAIT_SOFTSPOKEN) && !HAS_TRAIT(src, TRAIT_SIGN_LANG)) // softspoken trait only applies to spoken languages message_mods[WHISPER_MODE] = MODE_WHISPER if(client && SSlag_switch.measures[SLOWMODE_SAY] && !HAS_TRAIT(src, TRAIT_BYPASS_MEASURES) && !forced && src == usr) @@ -190,11 +190,10 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( last_say_args_ref = REF(args) #endif - if(!HAS_TRAIT(src, TRAIT_SIGN_LANG)) // if using sign language skip sending the say signal - // Make sure the arglist is passed exactly - don't pass a copy of it. Say signal handlers will modify some of the parameters. - var/sigreturn = SEND_SIGNAL(src, COMSIG_MOB_SAY, args) - if(sigreturn & COMPONENT_UPPERCASE_SPEECH) - message = uppertext(message) + // Make sure the arglist is passed exactly - don't pass a copy of it. Say signal handlers will modify some of the parameters. + var/sigreturn = SEND_SIGNAL(src, COMSIG_MOB_SAY, args) + if(sigreturn & COMPONENT_UPPERCASE_SPEECH) + message = uppertext(message) var/list/message_data = treat_message(message) // unfortunately we still need this message = message_data["message"] @@ -218,6 +217,10 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( succumb() return + // NOVA EDIT ADDITION START: autopunctuation + //ensure EOL punctuation exists and that word-bounded 'i' are capitalized before we do anything else + message = autopunct_bare(message) + // NOVA EDIT ADDITION END //This is before anything that sends say a radio message, and after all important message type modifications, so you can scumb in alien chat or something if(saymode && !saymode.handle_message(src, message, language)) return @@ -256,7 +259,7 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( /mob/living/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, list/message_mods = list(), message_range=0) - if(!GET_CLIENT(src)) + if((SEND_SIGNAL(src, COMSIG_MOVABLE_PRE_HEAR, args) & COMSIG_MOVABLE_CANCEL_HEARING) || !GET_CLIENT(src)) return FALSE var/deaf_message @@ -284,7 +287,7 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( var/dist = get_dist(speaker, src) - message_range if(dist > 0 && dist <= EAVESDROP_EXTRA_RANGE && !HAS_TRAIT(src, TRAIT_GOOD_HEARING) && !isobserver(src)) // ghosts can hear all messages clearly raw_message = stars(raw_message) - if (dist > EAVESDROP_EXTRA_RANGE && !HAS_TRAIT(src, TRAIT_GOOD_HEARING) && !isobserver(src)) + if (message_range != INFINITY && dist > EAVESDROP_EXTRA_RANGE && !HAS_TRAIT(src, TRAIT_GOOD_HEARING) && !isobserver(src)) return FALSE // Too far away and don't have good hearing, you can't hear anything // we need to send this signal before compose_message() is used since other signals need to modify @@ -507,11 +510,11 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( return list("message" = message, "tts_message" = tts_message, "tts_filter" = tts_filter) /mob/living/proc/radio(message, list/message_mods = list(), list/spans, language) - //SKYRAT EDIT ADDITION BEGIN - if((message_mods[MODE_HEADSET] || message_mods[RADIO_EXTENSION]) && !(mobility_flags & MOBILITY_USE) && !isAI(src) && !ispAI(src)) // If can't use items, you can't press the button + //NOVA EDIT ADDITION BEGIN + if((message_mods[MODE_HEADSET] || message_mods[RADIO_EXTENSION]) && !(mobility_flags & MOBILITY_USE) && !isAI(src) && !ispAI(src) && !ismecha(loc)) // If can't use items, you can't press the button to_chat(src, span_warning("You can't use the radio right now as you can't reach the button!")) return ITALICS | REDUCE_RANGE - //SKYRAT EDIT END + //NOVA EDIT END var/obj/item/implant/radio/imp = locate() in src if(imp?.radio.is_on()) if(message_mods[MODE_HEADSET]) @@ -537,7 +540,7 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( I.talk_into(src, message, , spans, language, message_mods) return ITALICS | REDUCE_RANGE - return 0 + return NONE /mob/living/say_mod(input, list/message_mods = list()) if(message_mods[WHISPER_MODE] == MODE_WHISPER) diff --git a/code/modules/mob/living/silicon/ai/_preferences.dm b/code/modules/mob/living/silicon/ai/_preferences.dm index 4b0aaaecc250a5..d9b1c44f859e97 100644 --- a/code/modules/mob/living/silicon/ai/_preferences.dm +++ b/code/modules/mob/living/silicon/ai/_preferences.dm @@ -88,7 +88,7 @@ GLOBAL_LIST_INIT(ai_core_display_screens, sort_list(list( "Matrix", "Monochrome", "Murica", - "Nanotrasen", + "Symphionia", "Not Malf", "Portrait", "President", diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index ab291da5a32abc..8c27854865b89d 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -106,7 +106,7 @@ var/atom/movable/screen/ai/modpc/interfaceButton ///whether its mmi is a posibrain or regular mmi when going ai mob to ai core structure - var/posibrain_inside = FALSE + var/posibrain_inside = TRUE ///whether its cover is opened, so you can wirecut it for deconstruction var/opened = FALSE ///whether AI is anchored or not, used for checks @@ -443,10 +443,9 @@ disconnect_shell() ShutOffDoomsdayDevice() var/obj/structure/ai_core/deactivated/ai_core = new(get_turf(src), /* skip_mmi_creation = */ TRUE) - if(!make_mmi_drop_and_transfer(ai_core.core_mmi, the_core = ai_core)) - return FALSE - qdel(src) - return TRUE + if(make_mmi_drop_and_transfer(ai_core.core_mmi, the_core = ai_core)) + qdel(src) + return ai_core /mob/living/silicon/ai/proc/make_mmi_drop_and_transfer(obj/item/mmi/the_mmi, the_core) var/mmi_type @@ -507,8 +506,8 @@ alert_control.ui_interact(src) #ifdef AI_VOX if(href_list["say_word"]) - play_vox_word(href_list["say_word"], null, src, vox_type) //SKYRAT EDIT CHANGE - vox_word_string += "[href_list["say_word"]] " //SKYRAT EDIT ADDITION + play_vox_word(href_list["say_word"], null, src, vox_type) //NOVA EDIT CHANGE + vox_word_string += "[href_list["say_word"]] " //NOVA EDIT ADDITION return #endif if(href_list["show_tablet_note"]) @@ -601,17 +600,21 @@ to_chat(src, span_danger("Selected location is not visible.")) /mob/living/silicon/ai/proc/call_bot(turf/waypoint) - var/mob/living/simple_animal/bot/bot = bot_ref?.resolve() + var/mob/living/bot = bot_ref?.resolve() if(!bot) return + var/summon_success + if(isbasicbot(bot)) + var/mob/living/basic/bot/basic_bot = bot + summon_success = basic_bot.summon_bot(src, waypoint, grant_all_access = TRUE) + else + var/mob/living/simple_animal/bot/simple_bot = bot + call_bot_cooldown = world.time + CALL_BOT_COOLDOWN + summon_success = simple_bot.call_bot(src, waypoint) + call_bot_cooldown = 0 - if(bot.calling_ai && bot.calling_ai != src) //Prevents an override if another AI is controlling this bot. - to_chat(src, span_danger("Interface error. Unit is already in use.")) - return - to_chat(src, span_notice("Sending command to bot...")) - call_bot_cooldown = world.time + CALL_BOT_COOLDOWN - bot.call_bot(src, waypoint) - call_bot_cooldown = 0 + var/chat_message = summon_success ? "Sending command to bot..." : "Interface error. Unit is already in use." + to_chat(src, span_notice("[chat_message]")) /mob/living/silicon/ai/proc/alarm_triggered(datum/source, alarm_type, area/source_area) SIGNAL_HANDLER @@ -1040,10 +1043,10 @@ apc.malfhack = TRUE apc.locked = TRUE apc.coverlocked = TRUE - + apc.flicker_hacked_icon() + apc.set_hacked_hud() playsound(get_turf(src), 'sound/machines/ding.ogg', 50, TRUE, ignore_walls = FALSE) to_chat(src, "Hack complete. [apc] is now under your exclusive control.") - apc.update_appearance() /mob/living/silicon/ai/verb/deploy_to_shell(mob/living/silicon/robot/target) set category = "AI Commands" diff --git a/code/modules/mob/living/silicon/ai/ai_defense.dm b/code/modules/mob/living/silicon/ai/ai_defense.dm index ad9a965242e01e..1148b639d0113e 100644 --- a/code/modules/mob/living/silicon/ai/ai_defense.dm +++ b/code/modules/mob/living/silicon/ai/ai_defense.dm @@ -7,18 +7,8 @@ return MOD.install(laws, user) //Proc includes a success mesage so we don't need another one return - if(W.force && W.damtype != STAMINA && stat != DEAD && !QDELETED(src)) //only sparks if real damage is dealt. - spark_system.start() - return ..() - -/mob/living/silicon/ai/attack_alien(mob/living/carbon/alien/adult/user, list/modifiers) - if(!SSticker.HasRoundStarted()) - to_chat(user, "You cannot attack people before the game has started.") - return - ..() -/mob/living/silicon/ai/attack_slime(mob/living/simple_animal/slime/user, list/modifiers) - return //immune to slimes + return ..() /mob/living/silicon/ai/blob_act(obj/structure/blob/B) if (stat != DEAD) @@ -76,11 +66,11 @@ balloon_alert(user, "[!is_anchored ? "tightening" : "loosening"] bolts...") balloon_alert(src, "bolts being [!is_anchored ? "tightened" : "loosened"]...") if(!tool.use_tool(src, user, 4 SECONDS)) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS flip_anchored() balloon_alert(user, "bolts [is_anchored ? "tightened" : "loosened"]") balloon_alert(src, "bolts [is_anchored ? "tightened" : "loosened"]") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /mob/living/silicon/ai/crowbar_act(mob/living/user, obj/item/tool) . = ..() @@ -88,19 +78,19 @@ return if(!is_anchored) balloon_alert(user, "bolt it down first!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(opened) if(emagged) balloon_alert(user, "access panel lock damaged!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS balloon_alert(user, "closing access panel...") balloon_alert(src, "access panel being closed...") if(!tool.use_tool(src, user, 5 SECONDS)) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS balloon_alert(src, "access panel closed") balloon_alert(user, "access panel closed") opened = FALSE - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(stat == DEAD) to_chat(user, span_warning("The access panel looks damaged, you try dislodging the cover.")) else @@ -116,24 +106,24 @@ consent = tgui_alert(src, "[user] is attempting to open your access panel, unlock the cover?", "AI Access Panel", list("Yes", "No")) if(consent == "No" && !consent_override && !emagged) to_chat(user, span_notice("[src] refuses to unlock its access panel.")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(consent != "Yes" && (consent_override || emagged)) to_chat(user, span_warning("[src] refuses to unlock its access panel...so you[!emagged ? " swipe your ID and " : " "]open it anyway!")) else if(!consent_override && !emagged) to_chat(user, span_notice("[src] did not respond to your request to unlock its access panel cover lock.")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS else to_chat(user, span_notice("[src] did not respond to your request to unlock its access panel cover lock. You[!emagged ? " swipe your ID and " : " "]open it anyway.")) balloon_alert(user, "prying open access panel...") balloon_alert(src, "access panel being pried open...") if(!tool.use_tool(src, user, (stat == DEAD ? 40 SECONDS : 5 SECONDS))) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS balloon_alert(src, "access panel opened") balloon_alert(user, "access panel opened") opened = TRUE - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /mob/living/silicon/ai/wirecutter_act(mob/living/user, obj/item/tool) . = ..() @@ -141,21 +131,20 @@ return if(!is_anchored) balloon_alert(user, "bolt it down first!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(!opened) balloon_alert(user, "open the access panel first!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS balloon_alert(src, "neural network being disconnected...") balloon_alert(user, "disconnecting neural network...") if(!tool.use_tool(src, user, (stat == DEAD ? 40 SECONDS : 5 SECONDS))) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(IS_MALF_AI(src)) to_chat(user, span_userdanger("The voltage inside the wires rises dramatically!")) user.electrocute_act(120, src) opened = FALSE - return TOOL_ACT_TOOLTYPE_SUCCESS - balloon_alert(user, "disconnected neural network") + return ITEM_INTERACT_SUCCESS to_chat(src, span_danger("You feel incredibly confused and disorientated.")) - if(!ai_mob_to_structure()) - return TOOL_ACT_TOOLTYPE_SUCCESS - return TOOL_ACT_TOOLTYPE_SUCCESS + var/atom/ai_structure = ai_mob_to_structure() + ai_structure.balloon_alert(user, "disconnected neural network") + return ITEM_INTERACT_SUCCESS diff --git a/code/modules/mob/living/silicon/ai/ai_say.dm b/code/modules/mob/living/silicon/ai/ai_say.dm index 78519109101eec..b7e42ea1df07a4 100644 --- a/code/modules/mob/living/silicon/ai/ai_say.dm +++ b/code/modules/mob/living/silicon/ai/ai_say.dm @@ -51,10 +51,9 @@ else to_chat(src, span_alert("No holopad connected.")) -/* SKYRAT EDIT REMOVAL - MOVED TO: MODULAR_SKYRAT/MODULES/ALT_VOX/CODE/VOX_PROCS.DM // Make sure that the code compiles with AI_VOX undefined #ifdef AI_VOX -#define VOX_DELAY 600 +#define VOX_DELAY 300 // NOVA EDIT CHANGE - ORIGINAL: 600 /mob/living/silicon/ai/verb/announcement_help() set name = "Announcement Help" @@ -76,10 +75,10 @@ "} var/index = 0 - for(var/word in GLOB.vox_sounds) + for(var/word in get_vox_sounds(vox_type)) // NOVA EDIT CHANGE - VOX types - ORIGINAL: for(var/word in GLOB.vox_sounds) index++ dat += "[capitalize(word)]" - if(index != GLOB.vox_sounds.len) + if(index != length(get_vox_sounds(vox_type))) // NOVA EDIT CHANGE - VOX types - ORIGINAL: if(index != GLOB.vox_sounds.len) dat += " / " var/datum/browser/popup = new(src, "announce_help", "Announcement Help", 500, 400) @@ -118,7 +117,7 @@ if(!word) words -= word continue - if(!GLOB.vox_sounds[word]) + if(!get_vox_sounds(vox_type)[word]) // NOVA EDIT CHANGE - VOX types - ORIGINAL: if(!GLOB.vox_sounds[word]) incorrect_words += word if(incorrect_words.len) @@ -146,10 +145,35 @@ word = lowertext(word) + // NOVA ADDITION BEGIN - Get AI for the vox Type + var/turf/ai_turf_as_turf = ai_turf + if(!istype(ai_turf_as_turf)) + return //and prolly throw an error because wtf + var/mob/living/silicon/ai/the_AI = null + for(var/mob/living/silicon/ai/found_AI in ai_turf_as_turf.contents) + if(istype(found_AI)) + the_AI = found_AI + // NOVA ADDITION END + // NOVA EDIT CHANGE START + /* ORIGINAL: if(GLOB.vox_sounds[word]) var/sound_file = GLOB.vox_sounds[word] var/sound/voice = sound(sound_file, wait = 1, channel = CHANNEL_VOX) + */ + if(the_AI.get_vox_sounds(the_AI.vox_type)[word]) + var/sound_file = the_AI.get_vox_sounds(the_AI.vox_type)[word] + var/volume = 100 + switch(the_AI.vox_type) + if(VOX_HL) + volume = 75 + if(VOX_MIL) + volume = 50 // My poor ears... + // If the vox stuff are disabled, or we failed getting the word from the list, just early return. + if(!sound_file) + return FALSE + var/sound/voice = sound(sound_file, wait = 1, channel = CHANNEL_VOX, volume = volume) + // NOVA EDIT CHANGE END voice.status = SOUND_STREAM // If there is no single listener, broadcast to everyone in the same z level @@ -171,4 +195,3 @@ #undef VOX_DELAY #endif -*/ //SKYRAT EDIT REMOVAL END diff --git a/code/modules/mob/living/silicon/ai/examine.dm b/code/modules/mob/living/silicon/ai/examine.dm index e4a98f5f36680a..f862ba0adea462 100644 --- a/code/modules/mob/living/silicon/ai/examine.dm +++ b/code/modules/mob/living/silicon/ai/examine.dm @@ -1,5 +1,5 @@ /mob/living/silicon/ai/examine(mob/user) - . = list("This is [icon2html(src, user)] [src]!", EXAMINE_SECTION_BREAK) //SKYRAT EDIT CHANGE + . = list("This is [icon2html(src, user)] [src]!", EXAMINE_SECTION_BREAK) //NOVA EDIT CHANGE if(stat == DEAD) . += span_deadsay("It appears to be powered-down.") . += span_notice("Its floor bolts are [is_anchored ? "tightened" : "loose"].") @@ -26,9 +26,9 @@ . += "The wireless networking light is blinking." else if (!shunted && !client) . += "[src]Core.exe has stopped responding! NTOS is searching for a solution to the problem..." - //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION + //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION . += get_silicon_flavortext() - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END . += "" . += ..() diff --git a/code/modules/mob/living/silicon/ai/robot_control.dm b/code/modules/mob/living/silicon/ai/robot_control.dm index f349f6b1b7f7a7..c4cc256244c3f9 100644 --- a/code/modules/mob/living/silicon/ai/robot_control.dm +++ b/code/modules/mob/living/silicon/ai/robot_control.dm @@ -35,11 +35,29 @@ var/turf/ai_current_turf = get_turf(owner) data["robots"] = list() - for(var/mob/living/simple_animal/bot/simple_bot as anything in GLOB.bots_list) - //Only non-emagged bots on a valid Z-level are detected! - if(!is_valid_z_level(ai_current_turf, get_turf(simple_bot)) || !(simple_bot.bot_mode_flags & BOT_MODE_REMOTE_ENABLED)) + for(var/mob/living/our_bot as anything in GLOB.bots_list) + if(!isbot(our_bot) || !is_valid_z_level(ai_current_turf, get_turf(our_bot))) continue - var/list/robot_data = list( + + if(isbasicbot(our_bot)) + var/mob/living/basic/bot/basic_bot = our_bot + if(!(basic_bot.bot_mode_flags & BOT_MODE_REMOTE_ENABLED)) + continue + var/list/basic_bot_data = list( + name = basic_bot.name, + model = basic_bot.bot_type, + mode = basic_bot.mode, + hacked = !!(basic_bot.bot_access_flags & BOT_COVER_HACKED), + location = get_area_name(basic_bot, TRUE), + ref = REF(basic_bot), + ) + data["robots"] += list(basic_bot_data) + continue + + var/mob/living/simple_animal/bot/simple_bot = our_bot + if(!(simple_bot.bot_mode_flags & BOT_MODE_REMOTE_ENABLED)) + continue + var/list/simple_bot_data = list( name = simple_bot.name, model = simple_bot.bot_type, mode = simple_bot.get_mode(), @@ -47,34 +65,50 @@ location = get_area_name(simple_bot, TRUE), ref = REF(simple_bot), ) - data["robots"] += list(robot_data) + data["robots"] += list(simple_bot_data) return data -/datum/robot_control/ui_act(action, params) +/datum/robot_control/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() - if(.) + if(. || !isliving(ui.user)) + return + var/mob/living/our_user = ui.user + if(!is_interactable(our_user)) + return + if(owner.control_disabled) return - if(!is_interactable(usr)) + var/mob/living/bot = locate(params["ref"]) in GLOB.bots_list + if(isnull(bot)) return - var/mob/living/simple_animal/bot/bot switch(action) if("callbot") //Command a bot to move to a selected location. if(owner.call_bot_cooldown > world.time) - to_chat(usr, span_danger("Error: Your last call bot command is still processing, please wait for the bot to finish calculating a route.")) + to_chat(our_user, span_danger("Error: Your last call bot command is still processing, please wait for the bot to finish calculating a route.")) return - bot = locate(params["ref"]) in GLOB.bots_list + if(isbasicbot(bot)) + var/mob/living/basic/bot/basic_bot = bot + if(!(basic_bot.bot_mode_flags & BOT_MODE_REMOTE_ENABLED)) + return + else + var/mob/living/simple_animal/bot/simple_bot = bot + if(!(simple_bot.bot_mode_flags & BOT_MODE_REMOTE_ENABLED)) + return + owner.bot_ref = WEAKREF(bot) - if(!bot || !(bot.bot_mode_flags & BOT_MODE_REMOTE_ENABLED) || owner.control_disabled) - return owner.waypoint_mode = TRUE - to_chat(usr, span_notice("Set your waypoint by clicking on a valid location free of obstructions.")) - . = TRUE + to_chat(our_user, span_notice("Set your waypoint by clicking on a valid location free of obstructions.")) if("interface") //Remotely connect to a bot! - bot = locate(params["ref"]) in GLOB.bots_list owner.bot_ref = WEAKREF(bot) - if(!bot || !(bot.bot_mode_flags & BOT_MODE_REMOTE_ENABLED) || owner.control_disabled) - return - bot.attack_ai(usr) - . = TRUE + if(isbasicbot(bot)) + var/mob/living/basic/bot/basic_bot = bot + if(!(basic_bot.bot_mode_flags & BOT_MODE_REMOTE_ENABLED)) + return + else + var/mob/living/basic/bot/simple_bot = bot + if(!(simple_bot.bot_mode_flags & BOT_MODE_REMOTE_ENABLED)) + return + bot.attack_ai(our_user) + + return TRUE diff --git a/code/modules/mob/living/silicon/ai/vox_sounds.dm b/code/modules/mob/living/silicon/ai/vox_sounds.dm index 4b535e4e03a37a..dacb1eeb8131c8 100644 --- a/code/modules/mob/living/silicon/ai/vox_sounds.dm +++ b/code/modules/mob/living/silicon/ai/vox_sounds.dm @@ -9,6 +9,9 @@ // :%s/\(\(.*\)\.ogg\)/"\2" = 'sound\/vox_fem\/\1',/g GLOBAL_LIST_INIT(vox_sounds, list( "abduction" = 'sound/vox_fem/abduction.ogg', + "," = 'sound/vox_fem/,.ogg', + "." = 'sound/vox_fem/..ogg', + "a" = 'sound/vox_fem/a.ogg', "abortions" = 'sound/vox_fem/abortions.ogg', "above" = 'sound/vox_fem/above.ogg', "abstain" = 'sound/vox_fem/abstain.ogg', @@ -16,74 +19,79 @@ GLOBAL_LIST_INIT(vox_sounds, list( "accelerator" = 'sound/vox_fem/accelerator.ogg', "accepted" = 'sound/vox_fem/accepted.ogg', "access" = 'sound/vox_fem/access.ogg', - "acknowledged" = 'sound/vox_fem/acknowledged.ogg', "acknowledge" = 'sound/vox_fem/acknowledge.ogg', + "acknowledged" = 'sound/vox_fem/acknowledged.ogg', "acquired" = 'sound/vox_fem/acquired.ogg', "acquisition" = 'sound/vox_fem/acquisition.ogg', "across" = 'sound/vox_fem/across.ogg', - "activated" = 'sound/vox_fem/activated.ogg', "activate" = 'sound/vox_fem/activate.ogg', + "activated" = 'sound/vox_fem/activated.ogg', "activity" = 'sound/vox_fem/activity.ogg', "adios" = 'sound/vox_fem/adios.ogg', "administration" = 'sound/vox_fem/administration.ogg', "advanced" = 'sound/vox_fem/advanced.ogg', "advised" = 'sound/vox_fem/advised.ogg', - "after" = 'sound/vox_fem/after.ogg', "aft" = 'sound/vox_fem/aft.ogg', + "after" = 'sound/vox_fem/after.ogg', "agent" = 'sound/vox_fem/agent.ogg', "ai" = 'sound/vox_fem/ai.ogg', - "airlock" = 'sound/vox_fem/airlock.ogg', "air" = 'sound/vox_fem/air.ogg', + "airlock" = 'sound/vox_fem/airlock.ogg', "alarm" = 'sound/vox_fem/alarm.ogg', + "alarmed" = 'sound/vox_fem/alarmed.ogg', + "alarming" = 'sound/vox_fem/alarming.ogg', "alert" = 'sound/vox_fem/alert.ogg', + "alerted" = 'sound/vox_fem/alerted.ogg', + "alerting" = 'sound/vox_fem/alerting.ogg', "alien" = 'sound/vox_fem/alien.ogg', "aligned" = 'sound/vox_fem/aligned.ogg', "all" = 'sound/vox_fem/all.ogg', "alpha" = 'sound/vox_fem/alpha.ogg', "also" = 'sound/vox_fem/also.ogg', + "am" = 'sound/vox_fem/am.ogg', "amigo" = 'sound/vox_fem/amigo.ogg', "ammunition" = 'sound/vox_fem/ammunition.ogg', - "am" = 'sound/vox_fem/am.ogg', + "an" = 'sound/vox_fem/an.ogg', "and" = 'sound/vox_fem/and.ogg', "animal" = 'sound/vox_fem/animal.ogg', "announcement" = 'sound/vox_fem/announcement.ogg', - "an" = 'sound/vox_fem/an.ogg', "anomalous" = 'sound/vox_fem/anomalous.ogg', "answer" = 'sound/vox_fem/answer.ogg', "antenna" = 'sound/vox_fem/antenna.ogg', "any" = 'sound/vox_fem/any.ogg', - "a" = 'sound/vox_fem/a.ogg', "apc" = 'sound/vox_fem/apc.ogg', "apprehend" = 'sound/vox_fem/apprehend.ogg', "approach" = 'sound/vox_fem/approach.ogg', - "area" = 'sound/vox_fem/area.ogg', "are" = 'sound/vox_fem/are.ogg', - "armed" = 'sound/vox_fem/armed.ogg', + "area" = 'sound/vox_fem/area.ogg', "arm" = 'sound/vox_fem/arm.ogg', + "armed" = 'sound/vox_fem/armed.ogg', "armor" = 'sound/vox_fem/armor.ogg', "armory" = 'sound/vox_fem/armory.ogg', "array" = 'sound/vox_fem/array.ogg', "arrest" = 'sound/vox_fem/arrest.ogg', + "artillery" = 'sound/vox_fem/artillery.ogg', "asimov" = 'sound/vox_fem/asimov.ogg', + "ass" = 'sound/vox_fem/ass.ogg', "asshole" = 'sound/vox_fem/asshole.ogg', "assholes" = 'sound/vox_fem/assholes.ogg', "assistance" = 'sound/vox_fem/assistance.ogg', "assistant" = 'sound/vox_fem/assistant.ogg', - "ass" = 'sound/vox_fem/ass.ogg', + "at" = 'sound/vox_fem/at.ogg', "atmosphere" = 'sound/vox_fem/atmosphere.ogg', "atmospheric" = 'sound/vox_fem/atmospheric.ogg', "atmospherics" = 'sound/vox_fem/atmospherics.ogg', - "at" = 'sound/vox_fem/at.ogg', "atomic" = 'sound/vox_fem/atomic.ogg', "attention" = 'sound/vox_fem/attention.ogg', "authentication" = 'sound/vox_fem/authentication.ogg', - "authorized" = 'sound/vox_fem/authorized.ogg', "authorize" = 'sound/vox_fem/authorize.ogg', + "authorized" = 'sound/vox_fem/authorized.ogg', "automatic" = 'sound/vox_fem/automatic.ogg', "away" = 'sound/vox_fem/away.ogg', "awful" = 'sound/vox_fem/awful.ogg', - "backman" = 'sound/vox_fem/backman.ogg', + "b" = 'sound/vox_fem/b.ogg', "back" = 'sound/vox_fem/back.ogg', + "backman" = 'sound/vox_fem/backman.ogg', "bad" = 'sound/vox_fem/bad.ogg', "bag" = 'sound/vox_fem/bag.ogg', "bailey" = 'sound/vox_fem/bailey.ogg', @@ -92,21 +100,26 @@ GLOBAL_LIST_INIT(vox_sounds, list( "bartender" = 'sound/vox_fem/bartender.ogg', "base" = 'sound/vox_fem/base.ogg', "bay" = 'sound/vox_fem/bay.ogg', + "be" = 'sound/vox_fem/be.ogg', "beam" = 'sound/vox_fem/beam.ogg', "been" = 'sound/vox_fem/been.ogg', "beep" = 'sound/vox_fem/beep.ogg', "before" = 'sound/vox_fem/before.ogg', "below" = 'sound/vox_fem/below.ogg', - "be" = 'sound/vox_fem/be.ogg', "beside" = 'sound/vox_fem/beside.ogg', "beware" = 'sound/vox_fem/beware.ogg', "beyond" = 'sound/vox_fem/beyond.ogg', + "big" = 'sound/vox_fem/big.ogg', + "billion" = 'sound/vox_fem/billion.ogg', "biohazard" = 'sound/vox_fem/biohazard.ogg', "biological" = 'sound/vox_fem/biological.ogg', "birdwell" = 'sound/vox_fem/birdwell.ogg', - "bitches" = 'sound/vox_fem/bitches.ogg', "bitch" = 'sound/vox_fem/bitch.ogg', + "bitches" = 'sound/vox_fem/bitches.ogg', "bitcoin" = 'sound/vox_fem/bitcoin.ogg', + "bitrun" = 'sound/vox_fem/bitrun.ogg', + "bitrunner" = 'sound/vox_fem/bitrunner.ogg', + "bitrunning" = 'sound/vox_fem/bitrunning.ogg', "black" = 'sound/vox_fem/black.ogg', "blast" = 'sound/vox_fem/blast.ogg', "bleed" = 'sound/vox_fem/bleed.ogg', @@ -115,15 +128,15 @@ GLOBAL_LIST_INIT(vox_sounds, list( "blood" = 'sound/vox_fem/blood.ogg', "bloop" = 'sound/vox_fem/bloop.ogg', "blue" = 'sound/vox_fem/blue.ogg', - "b" = 'sound/vox_fem/b.ogg', + "bluespace" = 'sound/vox_fem/bluespace.ogg', "bomb" = 'sound/vox_fem/bomb.ogg', "bone" = 'sound/vox_fem/bone.ogg', "botanist" = 'sound/vox_fem/botanist.ogg', "botany" = 'sound/vox_fem/botany.ogg', "bottom" = 'sound/vox_fem/bottom.ogg', "bravo" = 'sound/vox_fem/bravo.ogg', - "breached" = 'sound/vox_fem/breached.ogg', "breach" = 'sound/vox_fem/breach.ogg', + "breached" = 'sound/vox_fem/breached.ogg', "break" = 'sound/vox_fem/break.ogg', "bridge" = 'sound/vox_fem/bridge.ogg', "brig" = 'sound/vox_fem/brig.ogg', @@ -131,9 +144,10 @@ GLOBAL_LIST_INIT(vox_sounds, list( "but" = 'sound/vox_fem/but.ogg', "button" = 'sound/vox_fem/button.ogg', "bypass" = 'sound/vox_fem/bypass.ogg', + "c" = 'sound/vox_fem/c.ogg', "cable" = 'sound/vox_fem/cable.ogg', - "called" = 'sound/vox_fem/called.ogg', "call" = 'sound/vox_fem/call.ogg', + "called" = 'sound/vox_fem/called.ogg', "canal" = 'sound/vox_fem/canal.ogg', "canister" = 'sound/vox_fem/canister.ogg', "cap" = 'sound/vox_fem/cap.ogg', @@ -142,6 +156,7 @@ GLOBAL_LIST_INIT(vox_sounds, list( "carbon" = 'sound/vox_fem/carbon.ogg', "cargo" = 'sound/vox_fem/cargo.ogg', "cat" = 'sound/vox_fem/cat.ogg', + "ce" = 'sound/vox_fem/ce.ogg', "cease" = 'sound/vox_fem/cease.ogg', "ceiling" = 'sound/vox_fem/ceiling.ogg', "celsius" = 'sound/vox_fem/celsius.ogg', @@ -149,12 +164,11 @@ GLOBAL_LIST_INIT(vox_sounds, list( "center" = 'sound/vox_fem/center.ogg', "centi" = 'sound/vox_fem/centi.ogg', "central" = 'sound/vox_fem/central.ogg', - "ce" = 'sound/vox_fem/ce.ogg', "challenge" = 'sound/vox_fem/challenge.ogg', "chamber" = 'sound/vox_fem/chamber.ogg', + "change" = 'sound/vox_fem/change.ogg', "changed" = 'sound/vox_fem/changed.ogg', "changeling" = 'sound/vox_fem/changeling.ogg', - "change" = 'sound/vox_fem/change.ogg', "chapel" = 'sound/vox_fem/chapel.ogg', "chaplain" = 'sound/vox_fem/chaplain.ogg', "charlie" = 'sound/vox_fem/charlie.ogg', @@ -164,19 +178,21 @@ GLOBAL_LIST_INIT(vox_sounds, list( "chemist" = 'sound/vox_fem/chemist.ogg', "chief" = 'sound/vox_fem/chief.ogg', "christ" = 'sound/vox_fem/christ.ogg', + "christmas" = 'sound/vox_fem/christmas.ogg', "chuckle" = 'sound/vox_fem/chuckle.ogg', "circuit" = 'sound/vox_fem/circuit.ogg', "cleanup" = 'sound/vox_fem/cleanup.ogg', - "clearance" = 'sound/vox_fem/clearance.ogg', "clear" = 'sound/vox_fem/clear.ogg', + "clearance" = 'sound/vox_fem/clearance.ogg', "clockwork" = 'sound/vox_fem/clockwork.ogg', "close" = 'sound/vox_fem/close.ogg', - "clowning" = 'sound/vox_fem/clowning.ogg', + "closed" = 'sound/vox_fem/closed.ogg', + "closing" = 'sound/vox_fem/closing.ogg', "clown" = 'sound/vox_fem/clown.ogg', + "clowning" = 'sound/vox_fem/clowning.ogg', "cmo" = 'sound/vox_fem/cmo.ogg', - "coded" = 'sound/vox_fem/coded.ogg', "code" = 'sound/vox_fem/code.ogg', - "c" = 'sound/vox_fem/c.ogg', + "coded" = 'sound/vox_fem/coded.ogg', "cold" = 'sound/vox_fem/cold.ogg', "collider" = 'sound/vox_fem/collider.ogg', "come" = 'sound/vox_fem/come.ogg', @@ -189,8 +205,8 @@ GLOBAL_LIST_INIT(vox_sounds, list( "condom" = 'sound/vox_fem/condom.ogg', "confirmed" = 'sound/vox_fem/confirmed.ogg', "connor" = 'sound/vox_fem/connor.ogg', - "console2" = 'sound/vox_fem/console2.ogg', "console" = 'sound/vox_fem/console.ogg', + "console2" = 'sound/vox_fem/console2.ogg', "construct" = 'sound/vox_fem/construct.ogg', "containment" = 'sound/vox_fem/containment.ogg', "contamination" = 'sound/vox_fem/contamination.ogg', @@ -215,14 +231,15 @@ GLOBAL_LIST_INIT(vox_sounds, list( "cross" = 'sound/vox_fem/cross.ogg', "cryogenic" = 'sound/vox_fem/cryogenic.ogg', "crystal" = 'sound/vox_fem/crystal.ogg', - "cultist" = 'sound/vox_fem/cultist.ogg', "cult" = 'sound/vox_fem/cult.ogg', + "cultist" = 'sound/vox_fem/cultist.ogg', "cunt" = 'sound/vox_fem/cunt.ogg', "curator" = 'sound/vox_fem/curator.ogg', "cyborg" = 'sound/vox_fem/cyborg.ogg', "cyborgs" = 'sound/vox_fem/cyborgs.ogg', - "damaged" = 'sound/vox_fem/damaged.ogg', + "d" = 'sound/vox_fem/d.ogg', "damage" = 'sound/vox_fem/damage.ogg', + "damaged" = 'sound/vox_fem/damaged.ogg', "danger" = 'sound/vox_fem/danger.ogg', "dangerous" = 'sound/vox_fem/dangerous.ogg', "day" = 'sound/vox_fem/day.ogg', @@ -238,12 +255,12 @@ GLOBAL_LIST_INIT(vox_sounds, list( "demon" = 'sound/vox_fem/demon.ogg', "denied" = 'sound/vox_fem/denied.ogg', "departures" = 'sound/vox_fem/departures.ogg', - "deployed" = 'sound/vox_fem/deployed.ogg', "deploy" = 'sound/vox_fem/deploy.ogg', + "deployed" = 'sound/vox_fem/deployed.ogg', "desire" = 'sound/vox_fem/desire.ogg', "desist" = 'sound/vox_fem/desist.ogg', - "destroyed" = 'sound/vox_fem/destroyed.ogg', "destroy" = 'sound/vox_fem/destroy.ogg', + "destroyed" = 'sound/vox_fem/destroyed.ogg', "destruction" = 'sound/vox_fem/destruction.ogg', "detain" = 'sound/vox_fem/detain.ogg', "detected" = 'sound/vox_fem/detected.ogg', @@ -253,6 +270,7 @@ GLOBAL_LIST_INIT(vox_sounds, list( "devil" = 'sound/vox_fem/devil.ogg', "did" = 'sound/vox_fem/did.ogg', "die" = 'sound/vox_fem/die.ogg', + "died" = 'sound/vox_fem/died.ogg', "dimensional" = 'sound/vox_fem/dimensional.ogg', "dioxide" = 'sound/vox_fem/dioxide.ogg', "director" = 'sound/vox_fem/director.ogg', @@ -265,10 +283,9 @@ GLOBAL_LIST_INIT(vox_sounds, list( "disposal" = 'sound/vox_fem/disposal.ogg', "distance" = 'sound/vox_fem/distance.ogg', "distortion" = 'sound/vox_fem/distortion.ogg', + "do" = 'sound/vox_fem/do.ogg', "doctor" = 'sound/vox_fem/doctor.ogg', - "d" = 'sound/vox_fem/d.ogg', "dog" = 'sound/vox_fem/dog.ogg', - "do" = 'sound/vox_fem/do.ogg', "doomsday" = 'sound/vox_fem/doomsday.ogg', "doop" = 'sound/vox_fem/doop.ogg', "door" = 'sound/vox_fem/door.ogg', @@ -278,13 +295,14 @@ GLOBAL_LIST_INIT(vox_sounds, list( "drone" = 'sound/vox_fem/drone.ogg', "dual" = 'sound/vox_fem/dual.ogg', "duct" = 'sound/vox_fem/duct.ogg', + "e" = 'sound/vox_fem/e.ogg', "east" = 'sound/vox_fem/east.ogg', "echo" = 'sound/vox_fem/echo.ogg', "ed" = 'sound/vox_fem/ed.ogg', "effect" = 'sound/vox_fem/effect.ogg', "egress" = 'sound/vox_fem/egress.ogg', - "eighteen" = 'sound/vox_fem/eighteen.ogg', "eight" = 'sound/vox_fem/eight.ogg', + "eighteen" = 'sound/vox_fem/eighteen.ogg', "eighty" = 'sound/vox_fem/eighty.ogg', "electric" = 'sound/vox_fem/electric.ogg', "electromagnetic" = 'sound/vox_fem/electromagnetic.ogg', @@ -294,35 +312,39 @@ GLOBAL_LIST_INIT(vox_sounds, list( "emergency" = 'sound/vox_fem/emergency.ogg', "enabled" = 'sound/vox_fem/enabled.ogg', "energy" = 'sound/vox_fem/energy.ogg', - "engaged" = 'sound/vox_fem/engaged.ogg', "engage" = 'sound/vox_fem/engage.ogg', - "engineering" = 'sound/vox_fem/engineering.ogg', - "engineer" = 'sound/vox_fem/engineer.ogg', + "engaged" = 'sound/vox_fem/engaged.ogg', "engine" = 'sound/vox_fem/engine.ogg', + "engineer" = 'sound/vox_fem/engineer.ogg', + "engineering" = 'sound/vox_fem/engineering.ogg', + "enormous" = 'sound/vox_fem/enormous.ogg', "enter" = 'sound/vox_fem/enter.ogg', "entity" = 'sound/vox_fem/entity.ogg', "entry" = 'sound/vox_fem/entry.ogg', "environment" = 'sound/vox_fem/environment.ogg', - "e" = 'sound/vox_fem/e.ogg', "epic" = 'sound/vox_fem/epic.ogg', "equipment" = 'sound/vox_fem/equipment.ogg', "error" = 'sound/vox_fem/error.ogg', "escape" = 'sound/vox_fem/escape.ogg', - "evacuate" = 'sound/vox_fem/evacuate.ogg', + "ethereal" = 'sound/vox_fem/ethereal.ogg', "eva" = 'sound/vox_fem/eva.ogg', + "evacuate" = 'sound/vox_fem/evacuate.ogg', + "ever" = 'sound/vox_fem/ever.ogg', "exchange" = 'sound/vox_fem/exchange.ogg', + "execute" = 'sound/vox_fem/execute.ogg', "exit" = 'sound/vox_fem/exit.ogg', "expect" = 'sound/vox_fem/expect.ogg', - "experimental" = 'sound/vox_fem/experimental.ogg', "experiment" = 'sound/vox_fem/experiment.ogg', + "experimental" = 'sound/vox_fem/experimental.ogg', "explode" = 'sound/vox_fem/explode.ogg', "explosion" = 'sound/vox_fem/explosion.ogg', "explosive" = 'sound/vox_fem/explosive.ogg', "exposure" = 'sound/vox_fem/exposure.ogg', "exterminate" = 'sound/vox_fem/exterminate.ogg', - "extinguisher" = 'sound/vox_fem/extinguisher.ogg', "extinguish" = 'sound/vox_fem/extinguish.ogg', + "extinguisher" = 'sound/vox_fem/extinguisher.ogg', "extreme" = 'sound/vox_fem/extreme.ogg', + "f" = 'sound/vox_fem/f.ogg', "facility" = 'sound/vox_fem/facility.ogg', "factory" = 'sound/vox_fem/factory.ogg', "fahrenheit" = 'sound/vox_fem/fahrenheit.ogg', @@ -333,6 +355,7 @@ GLOBAL_LIST_INIT(vox_sounds, list( "fast" = 'sound/vox_fem/fast.ogg', "fauna" = 'sound/vox_fem/fauna.ogg', "feet" = 'sound/vox_fem/feet.ogg', + "felinid" = 'sound/vox_fem/felinid.ogg', "field" = 'sound/vox_fem/field.ogg', "fifteen" = 'sound/vox_fem/fifteen.ogg', "fifth" = 'sound/vox_fem/fifth.ogg', @@ -346,43 +369,46 @@ GLOBAL_LIST_INIT(vox_sounds, list( "flooding" = 'sound/vox_fem/flooding.ogg', "floor" = 'sound/vox_fem/floor.ogg', "flyman" = 'sound/vox_fem/flyman.ogg', - "f" = 'sound/vox_fem/f.ogg', "fool" = 'sound/vox_fem/fool.ogg', + "for" = 'sound/vox_fem/for.ogg', "forbidden" = 'sound/vox_fem/forbidden.ogg', "force" = 'sound/vox_fem/force.ogg', "fore" = 'sound/vox_fem/fore.ogg', - "formed" = 'sound/vox_fem/formed.ogg', "form" = 'sound/vox_fem/form.ogg', + "formed" = 'sound/vox_fem/formed.ogg', "forms" = 'sound/vox_fem/forms.ogg', - "for" = 'sound/vox_fem/for.ogg', + "forty" = 'sound/vox_fem/forty.ogg', "found" = 'sound/vox_fem/found.ogg', "four" = 'sound/vox_fem/four.ogg', "fourteen" = 'sound/vox_fem/fourteen.ogg', "fourth" = 'sound/vox_fem/fourth.ogg', "fourty" = 'sound/vox_fem/fourty.ogg', "foxtrot" = 'sound/vox_fem/foxtrot.ogg', - "freeman" = 'sound/vox_fem/freeman.ogg', "free" = 'sound/vox_fem/free.ogg', + "freeman" = 'sound/vox_fem/freeman.ogg', + "freeze" = 'sound/vox_fem/freeze.ogg', "freezer" = 'sound/vox_fem/freezer.ogg', "freezing" = 'sound/vox_fem/freezing.ogg', "from" = 'sound/vox_fem/from.ogg', "front" = 'sound/vox_fem/front.ogg', - "fucking" = 'sound/vox_fem/fucking.ogg', + "froze" = 'sound/vox_fem/froze.ogg', + "frozen" = 'sound/vox_fem/frozen.ogg', "fuck" = 'sound/vox_fem/fuck.ogg', + "fucking" = 'sound/vox_fem/fucking.ogg', "fucks" = 'sound/vox_fem/fucks.ogg', "fuel" = 'sound/vox_fem/fuel.ogg', + "g" = 'sound/vox_fem/g.ogg', "gas" = 'sound/vox_fem/gas.ogg', "generator" = 'sound/vox_fem/generator.ogg', "geneticist" = 'sound/vox_fem/geneticist.ogg', "get" = 'sound/vox_fem/get.ogg', "glory" = 'sound/vox_fem/glory.ogg', + "go" = 'sound/vox_fem/go.ogg', "god" = 'sound/vox_fem/god.ogg', - "g" = 'sound/vox_fem/g.ogg', "going" = 'sound/vox_fem/going.ogg', "golem" = 'sound/vox_fem/golem.ogg', - "goodbye" = 'sound/vox_fem/goodbye.ogg', "good" = 'sound/vox_fem/good.ogg', - "go" = 'sound/vox_fem/go.ogg', + "goodbye" = 'sound/vox_fem/goodbye.ogg', "gordon" = 'sound/vox_fem/gordon.ogg', "got" = 'sound/vox_fem/got.ogg', "government" = 'sound/vox_fem/government.ogg', @@ -396,17 +422,20 @@ GLOBAL_LIST_INIT(vox_sounds, list( "gulf" = 'sound/vox_fem/gulf.ogg', "gun" = 'sound/vox_fem/gun.ogg', "guthrie" = 'sound/vox_fem/guthrie.ogg', + "h" = 'sound/vox_fem/h.ogg', "hacker" = 'sound/vox_fem/hacker.ogg', "hackers" = 'sound/vox_fem/hackers.ogg', + "had" = 'sound/vox_fem/had.ogg', "hall" = 'sound/vox_fem/hall.ogg', "hallway" = 'sound/vox_fem/hallway.ogg', "handling" = 'sound/vox_fem/handling.ogg', "hangar" = 'sound/vox_fem/hangar.ogg', - "harmful" = 'sound/vox_fem/harmful.ogg', "harm" = 'sound/vox_fem/harm.ogg', + "harmful" = 'sound/vox_fem/harmful.ogg', "has" = 'sound/vox_fem/has.ogg', "have" = 'sound/vox_fem/have.ogg', "hazard" = 'sound/vox_fem/hazard.ogg', + "he" = 'sound/vox_fem/he.ogg', "head" = 'sound/vox_fem/head.ogg', "health" = 'sound/vox_fem/health.ogg', "heat" = 'sound/vox_fem/heat.ogg', @@ -414,20 +443,21 @@ GLOBAL_LIST_INIT(vox_sounds, list( "helium" = 'sound/vox_fem/helium.ogg', "hello" = 'sound/vox_fem/hello.ogg', "help" = 'sound/vox_fem/help.ogg', - "he" = 'sound/vox_fem/he.ogg', + "her" = 'sound/vox_fem/her.ogg', "here" = 'sound/vox_fem/here.ogg', + "heretic" = 'sound/vox_fem/heretic.ogg', "hide" = 'sound/vox_fem/hide.ogg', - "highest" = 'sound/vox_fem/highest.ogg', "high" = 'sound/vox_fem/high.ogg', + "highest" = 'sound/vox_fem/highest.ogg', + "him" = 'sound/vox_fem/him.ogg', "hit" = 'sound/vox_fem/hit.ogg', - "h" = 'sound/vox_fem/h.ogg', "hole" = 'sound/vox_fem/hole.ogg', "honk" = 'sound/vox_fem/honk.ogg', "hop" = 'sound/vox_fem/hop.ogg', "hos" = 'sound/vox_fem/hos.ogg', "hostile" = 'sound/vox_fem/hostile.ogg', - "hotel" = 'sound/vox_fem/hotel.ogg', "hot" = 'sound/vox_fem/hot.ogg', + "hotel" = 'sound/vox_fem/hotel.ogg', "hour" = 'sound/vox_fem/hour.ogg', "hours" = 'sound/vox_fem/hours.ogg', "how" = 'sound/vox_fem/how.ogg', @@ -439,19 +469,20 @@ GLOBAL_LIST_INIT(vox_sounds, list( "hurt" = 'sound/vox_fem/hurt.ogg', "hydro" = 'sound/vox_fem/hydro.ogg', "hydroponics" = 'sound/vox_fem/hydroponics.ogg', + "i" = 'sound/vox_fem/i.ogg', "ian" = 'sound/vox_fem/ian.ogg', "idiot" = 'sound/vox_fem/idiot.ogg', - "if2" = 'sound/vox_fem/if2.ogg', "if" = 'sound/vox_fem/if.ogg', + "if2" = 'sound/vox_fem/if2.ogg', "illegal" = 'sound/vox_fem/illegal.ogg', - "immediately" = 'sound/vox_fem/immediately.ogg', "immediate" = 'sound/vox_fem/immediate.ogg', + "immediately" = 'sound/vox_fem/immediately.ogg', "immortal" = 'sound/vox_fem/immortal.ogg', "impossible" = 'sound/vox_fem/impossible.ogg', + "in" = 'sound/vox_fem/in.ogg', "inches" = 'sound/vox_fem/inches.ogg', "india" = 'sound/vox_fem/india.ogg', "ing" = 'sound/vox_fem/ing.ogg', - "in" = 'sound/vox_fem/in.ogg', "inoperative" = 'sound/vox_fem/inoperative.ogg', "inside" = 'sound/vox_fem/inside.ogg', "inspection" = 'sound/vox_fem/inspection.ogg', @@ -460,26 +491,30 @@ GLOBAL_LIST_INIT(vox_sounds, list( "internals" = 'sound/vox_fem/internals.ogg', "intruder" = 'sound/vox_fem/intruder.ogg', "invalid" = 'sound/vox_fem/invalid.ogg', + "invalidate" = 'sound/vox_fem/invalidate.ogg', "invasion" = 'sound/vox_fem/invasion.ogg', - "i" = 'sound/vox_fem/i.ogg', "is" = 'sound/vox_fem/is.ogg', "it" = 'sound/vox_fem/it.ogg', + "j" = 'sound/vox_fem/j.ogg', "janitor" = 'sound/vox_fem/janitor.ogg', "jesus" = 'sound/vox_fem/jesus.ogg', - "j" = 'sound/vox_fem/j.ogg', "johnson" = 'sound/vox_fem/johnson.ogg', + "jolly" = 'sound/vox_fem/jolly.ogg', "juliet" = 'sound/vox_fem/juliet.ogg', + "k" = 'sound/vox_fem/k.ogg', "key" = 'sound/vox_fem/key.ogg', "kidnapped" = 'sound/vox_fem/kidnapped.ogg', "kidnapping" = 'sound/vox_fem/kidnapping.ogg', - "killed" = 'sound/vox_fem/killed.ogg', "kill" = 'sound/vox_fem/kill.ogg', + "killed" = 'sound/vox_fem/killed.ogg', + "killer" = 'sound/vox_fem/killer.ogg', "kilo" = 'sound/vox_fem/kilo.ogg', - "kitchen" = 'sound/vox_fem/kitchen.ogg', "kit" = 'sound/vox_fem/kit.ogg', - "k" = 'sound/vox_fem/k.ogg', + "kitchen" = 'sound/vox_fem/kitchen.ogg', + "l" = 'sound/vox_fem/l.ogg', "lab" = 'sound/vox_fem/lab.ogg', "lambda" = 'sound/vox_fem/lambda.ogg', + "large" = 'sound/vox_fem/large.ogg', "laser" = 'sound/vox_fem/laser.ogg', "last" = 'sound/vox_fem/last.ogg', "launch" = 'sound/vox_fem/launch.ogg', @@ -496,23 +531,24 @@ GLOBAL_LIST_INIT(vox_sounds, list( "library" = 'sound/vox_fem/library.ogg', "lie" = 'sound/vox_fem/lie.ogg', "lieutenant" = 'sound/vox_fem/lieutenant.ogg', - "lifeform" = 'sound/vox_fem/lifeform.ogg', "life" = 'sound/vox_fem/life.ogg', + "lifeform" = 'sound/vox_fem/lifeform.ogg', "light" = 'sound/vox_fem/light.ogg', + "lightbulb" = 'sound/vox_fem/lightbulb.ogg', "lima" = 'sound/vox_fem/lima.ogg', "liquid" = 'sound/vox_fem/liquid.ogg', - "live2" = 'sound/vox_fem/live2.ogg', "live" = 'sound/vox_fem/live.ogg', + "live2" = 'sound/vox_fem/live2.ogg', "lizard" = 'sound/vox_fem/lizard.ogg', + "lizardperson" = 'sound/vox_fem/lizardperson.ogg', "loading" = 'sound/vox_fem/loading.ogg', - "located" = 'sound/vox_fem/located.ogg', "locate" = 'sound/vox_fem/locate.ogg', + "located" = 'sound/vox_fem/located.ogg', "location" = 'sound/vox_fem/location.ogg', + "lock" = 'sound/vox_fem/lock.ogg', "locked" = 'sound/vox_fem/locked.ogg', "locker" = 'sound/vox_fem/locker.ogg', - "lock" = 'sound/vox_fem/lock.ogg', "lockout" = 'sound/vox_fem/lockout.ogg', - "l" = 'sound/vox_fem/l.ogg', "long" = 'sound/vox_fem/long.ogg', "look" = 'sound/vox_fem/look.ogg', "loop" = 'sound/vox_fem/loop.ogg', @@ -521,11 +557,14 @@ GLOBAL_LIST_INIT(vox_sounds, list( "lower" = 'sound/vox_fem/lower.ogg', "lowest" = 'sound/vox_fem/lowest.ogg', "lusty" = 'sound/vox_fem/lusty.ogg', + "m" = 'sound/vox_fem/m.ogg', "machine" = 'sound/vox_fem/machine.ogg', "magic" = 'sound/vox_fem/magic.ogg', "magnetic" = 'sound/vox_fem/magnetic.ogg', "main" = 'sound/vox_fem/main.ogg', + "maintainer" = 'sound/vox_fem/maintainer.ogg', "maintenance" = 'sound/vox_fem/maintenance.ogg', + "major" = 'sound/vox_fem/major.ogg', "malfunction" = 'sound/vox_fem/malfunction.ogg', "man" = 'sound/vox_fem/man.ogg', "many" = 'sound/vox_fem/many.ogg', @@ -533,12 +572,12 @@ GLOBAL_LIST_INIT(vox_sounds, list( "materials" = 'sound/vox_fem/materials.ogg', "maximum" = 'sound/vox_fem/maximum.ogg', "may" = 'sound/vox_fem/may.ogg', + "me" = 'sound/vox_fem/me.ogg', "meat" = 'sound/vox_fem/meat.ogg', "medbay" = 'sound/vox_fem/medbay.ogg', "medical" = 'sound/vox_fem/medical.ogg', "megafauna" = 'sound/vox_fem/megafauna.ogg', "men" = 'sound/vox_fem/men.ogg', - "me" = 'sound/vox_fem/me.ogg', "mercy" = 'sound/vox_fem/mercy.ogg', "mesa" = 'sound/vox_fem/mesa.ogg', "message" = 'sound/vox_fem/message.ogg', @@ -554,70 +593,82 @@ GLOBAL_LIST_INIT(vox_sounds, list( "minefield" = 'sound/vox_fem/minefield.ogg', "miner" = 'sound/vox_fem/miner.ogg', "minimum" = 'sound/vox_fem/minimum.ogg', + "minor" = 'sound/vox_fem/minor.ogg', "minutes" = 'sound/vox_fem/minutes.ogg', "mister" = 'sound/vox_fem/mister.ogg', "mode" = 'sound/vox_fem/mode.ogg', "modification" = 'sound/vox_fem/modification.ogg', - "m" = 'sound/vox_fem/m.ogg', "money" = 'sound/vox_fem/money.ogg', "monkey" = 'sound/vox_fem/monkey.ogg', "moth" = 'sound/vox_fem/moth.ogg', + "mothperson" = 'sound/vox_fem/mothperson.ogg', "motor" = 'sound/vox_fem/motor.ogg', "motorpool" = 'sound/vox_fem/motorpool.ogg', "move" = 'sound/vox_fem/move.ogg', "multitude" = 'sound/vox_fem/multitude.ogg', "murder" = 'sound/vox_fem/murder.ogg', + "murderer" = 'sound/vox_fem/murderer.ogg', "must" = 'sound/vox_fem/must.ogg', "my" = 'sound/vox_fem/my.ogg', "mythic" = 'sound/vox_fem/mythic.ogg', + "n" = 'sound/vox_fem/n.ogg', "nanotrasen" = 'sound/vox_fem/nanotrasen.ogg', "nearest" = 'sound/vox_fem/nearest.ogg', "need" = 'sound/vox_fem/need.ogg', + "never" = 'sound/vox_fem/never.ogg', "nice" = 'sound/vox_fem/nice.ogg', + "night" = 'sound/vox_fem/night.ogg', "nine" = 'sound/vox_fem/nine.ogg', "nineteen" = 'sound/vox_fem/nineteen.ogg', "ninety" = 'sound/vox_fem/ninety.ogg', "nitrogen" = 'sound/vox_fem/nitrogen.ogg', - "n" = 'sound/vox_fem/n.ogg', - "nominal" = 'sound/vox_fem/nominal.ogg', "no" = 'sound/vox_fem/no.ogg', + "nominal" = 'sound/vox_fem/nominal.ogg', "north" = 'sound/vox_fem/north.ogg', + "northeast" = 'sound/vox_fem/northeast.ogg', + "northwest" = 'sound/vox_fem/northwest.ogg', "not" = 'sound/vox_fem/not.ogg', "november" = 'sound/vox_fem/november.ogg', "now" = 'sound/vox_fem/now.ogg', "nuclear" = 'sound/vox_fem/nuclear.ogg', "nuke" = 'sound/vox_fem/nuke.ogg', "number" = 'sound/vox_fem/number.ogg', + "o" = 'sound/vox_fem/o.ogg', "objective" = 'sound/vox_fem/objective.ogg', + "obliterate" = 'sound/vox_fem/obliterate.ogg', + "obliterated" = 'sound/vox_fem/obliterated.ogg', + "obliterating" = 'sound/vox_fem/obliterating.ogg', "observation" = 'sound/vox_fem/observation.ogg', "obtain" = 'sound/vox_fem/obtain.ogg', + "of" = 'sound/vox_fem/of.ogg', + "off" = 'sound/vox_fem/off.ogg', "office" = 'sound/vox_fem/office.ogg', "officer" = 'sound/vox_fem/officer.ogg', - "off" = 'sound/vox_fem/off.ogg', - "of" = 'sound/vox_fem/of.ogg', - "," = 'sound/vox_fem/,.ogg', - "." = 'sound/vox_fem/..ogg', "oh" = 'sound/vox_fem/oh.ogg', "ok" = 'sound/vox_fem/ok.ogg', - "one" = 'sound/vox_fem/one.ogg', + "okay" = 'sound/vox_fem/okay.ogg', "on" = 'sound/vox_fem/on.ogg', + "once" = 'sound/vox_fem/once.ogg', + "one" = 'sound/vox_fem/one.ogg', "oof" = 'sound/vox_fem/oof.ogg', - "o" = 'sound/vox_fem/o.ogg', "open" = 'sound/vox_fem/open.ogg', + "opened" = 'sound/vox_fem/opened.ogg', + "opening" = 'sound/vox_fem/opening.ogg', "operating" = 'sound/vox_fem/operating.ogg', "operations" = 'sound/vox_fem/operations.ogg', "operative" = 'sound/vox_fem/operative.ogg', "option" = 'sound/vox_fem/option.ogg', + "or" = 'sound/vox_fem/or.ogg', "order" = 'sound/vox_fem/order.ogg', "organic" = 'sound/vox_fem/organic.ogg', - "or" = 'sound/vox_fem/or.ogg', "oscar" = 'sound/vox_fem/oscar.ogg', "out" = 'sound/vox_fem/out.ogg', "outside" = 'sound/vox_fem/outside.ogg', - "overload" = 'sound/vox_fem/overload.ogg', "over" = 'sound/vox_fem/over.ogg', + "overload" = 'sound/vox_fem/overload.ogg', "override" = 'sound/vox_fem/override.ogg', "oxygen" = 'sound/vox_fem/oxygen.ogg', + "p" = 'sound/vox_fem/p.ogg', "pacification" = 'sound/vox_fem/pacification.ogg', "pacify" = 'sound/vox_fem/pacify.ogg', "pain" = 'sound/vox_fem/pain.ogg', @@ -627,6 +678,7 @@ GLOBAL_LIST_INIT(vox_sounds, list( "pathetic" = 'sound/vox_fem/pathetic.ogg', "percent" = 'sound/vox_fem/percent.ogg', "perfect" = 'sound/vox_fem/perfect.ogg', + "perhaps" = 'sound/vox_fem/perhaps.ogg', "perimeter" = 'sound/vox_fem/perimeter.ogg', "permitted" = 'sound/vox_fem/permitted.ogg', "personal" = 'sound/vox_fem/personal.ogg', @@ -635,23 +687,24 @@ GLOBAL_LIST_INIT(vox_sounds, list( "piping" = 'sound/vox_fem/piping.ogg', "piss" = 'sound/vox_fem/piss.ogg', "plant" = 'sound/vox_fem/plant.ogg', - "plasmaman" = 'sound/vox_fem/plasmaman.ogg', "plasma" = 'sound/vox_fem/plasma.ogg', + "plasmaman" = 'sound/vox_fem/plasmaman.ogg', "platform" = 'sound/vox_fem/platform.ogg', "plausible" = 'sound/vox_fem/plausible.ogg', "please" = 'sound/vox_fem/please.ogg', - "p" = 'sound/vox_fem/p.ogg', "point" = 'sound/vox_fem/point.ogg', - "portal" = 'sound/vox_fem/portal.ogg', "port" = 'sound/vox_fem/port.ogg', + "portal" = 'sound/vox_fem/portal.ogg', "possible" = 'sound/vox_fem/possible.ogg', "power" = 'sound/vox_fem/power.ogg', "presence" = 'sound/vox_fem/presence.ogg', + "present" = 'sound/vox_fem/present.ogg', + "presents" = 'sound/vox_fem/presents.ogg', "press" = 'sound/vox_fem/press.ogg', "pressure" = 'sound/vox_fem/pressure.ogg', "primary" = 'sound/vox_fem/primary.ogg', - "prisoner" = 'sound/vox_fem/prisoner.ogg', "prison" = 'sound/vox_fem/prison.ogg', + "prisoner" = 'sound/vox_fem/prisoner.ogg', "proceed" = 'sound/vox_fem/proceed.ogg', "processing" = 'sound/vox_fem/processing.ogg', "progress" = 'sound/vox_fem/progress.ogg', @@ -667,19 +720,20 @@ GLOBAL_LIST_INIT(vox_sounds, list( "quartermaster" = 'sound/vox_fem/quartermaster.ogg', "quebec" = 'sound/vox_fem/quebec.ogg', "queen" = 'sound/vox_fem/queen.ogg', + "question" = 'sound/vox_fem/question.ogg', "questionable" = 'sound/vox_fem/questionable.ogg', "questioning" = 'sound/vox_fem/questioning.ogg', - "question" = 'sound/vox_fem/question.ogg', "quick" = 'sound/vox_fem/quick.ogg', "quit" = 'sound/vox_fem/quit.ogg', + "r" = 'sound/vox_fem/r.ogg', "radiation" = 'sound/vox_fem/radiation.ogg', "radioactive" = 'sound/vox_fem/radioactive.ogg', "rads" = 'sound/vox_fem/rads.ogg', "raider" = 'sound/vox_fem/raider.ogg', "raiders" = 'sound/vox_fem/raiders.ogg', "rapid" = 'sound/vox_fem/rapid.ogg', - "reached" = 'sound/vox_fem/reached.ogg', "reach" = 'sound/vox_fem/reach.ogg', + "reached" = 'sound/vox_fem/reached.ogg', "reactor" = 'sound/vox_fem/reactor.ogg', "red" = 'sound/vox_fem/red.ogg', "relay" = 'sound/vox_fem/relay.ogg', @@ -690,28 +744,31 @@ GLOBAL_LIST_INIT(vox_sounds, list( "repair" = 'sound/vox_fem/repair.ogg', "report" = 'sound/vox_fem/report.ogg', "reports" = 'sound/vox_fem/reports.ogg', - "required" = 'sound/vox_fem/required.ogg', + "request" = 'sound/vox_fem/request.ogg', + "requested" = 'sound/vox_fem/requested.ogg', + "requesting" = 'sound/vox_fem/requesting.ogg', "require" = 'sound/vox_fem/require.ogg', + "required" = 'sound/vox_fem/required.ogg', "research" = 'sound/vox_fem/research.ogg', "resevoir" = 'sound/vox_fem/resevoir.ogg', "resistance" = 'sound/vox_fem/resistance.ogg', "rest" = 'sound/vox_fem/rest.ogg', "restoration" = 'sound/vox_fem/restoration.ogg', - "revolutionary" = 'sound/vox_fem/revolutionary.ogg', "revolution" = 'sound/vox_fem/revolution.ogg', + "revolutionary" = 'sound/vox_fem/revolutionary.ogg', "right" = 'sound/vox_fem/right.ogg', "riot" = 'sound/vox_fem/riot.ogg', "roboticist" = 'sound/vox_fem/roboticist.ogg', "rocket" = 'sound/vox_fem/rocket.ogg', "roger" = 'sound/vox_fem/roger.ogg', - "r" = 'sound/vox_fem/r.ogg', "rogue" = 'sound/vox_fem/rogue.ogg', "romeo" = 'sound/vox_fem/romeo.ogg', "room" = 'sound/vox_fem/room.ogg', "round" = 'sound/vox_fem/round.ogg', - "rune" = 'sound/vox_fem/rune.ogg', "run" = 'sound/vox_fem/run.ogg', + "rune" = 'sound/vox_fem/rune.ogg', "runtime" = 'sound/vox_fem/runtime.ogg', + "s" = 'sound/vox_fem/s.ogg', "sabotage" = 'sound/vox_fem/sabotage.ogg', "safe" = 'sound/vox_fem/safe.ogg', "safety" = 'sound/vox_fem/safety.ogg', @@ -726,16 +783,16 @@ GLOBAL_LIST_INIT(vox_sounds, list( "scream" = 'sound/vox_fem/scream.ogg', "screen" = 'sound/vox_fem/screen.ogg', "search" = 'sound/vox_fem/search.ogg', - "secondary" = 'sound/vox_fem/secondary.ogg', "second" = 'sound/vox_fem/second.ogg', + "secondary" = 'sound/vox_fem/secondary.ogg', "seconds" = 'sound/vox_fem/seconds.ogg', "section" = 'sound/vox_fem/section.ogg', "sector" = 'sound/vox_fem/sector.ogg', - "secured" = 'sound/vox_fem/secured.ogg', "secure" = 'sound/vox_fem/secure.ogg', + "secured" = 'sound/vox_fem/secured.ogg', "security" = 'sound/vox_fem/security.ogg', - "selected" = 'sound/vox_fem/selected.ogg', "select" = 'sound/vox_fem/select.ogg', + "selected" = 'sound/vox_fem/selected.ogg', "self" = 'sound/vox_fem/self.ogg', "sensors" = 'sound/vox_fem/sensors.ogg', "server" = 'sound/vox_fem/server.ogg', @@ -751,8 +808,8 @@ GLOBAL_LIST_INIT(vox_sounds, list( "shield" = 'sound/vox_fem/shield.ogg', "shipment" = 'sound/vox_fem/shipment.ogg', "shirt" = 'sound/vox_fem/shirt.ogg', - "shitlord" = 'sound/vox_fem/shitlord.ogg', "shit" = 'sound/vox_fem/shit.ogg', + "shitlord" = 'sound/vox_fem/shitlord.ogg', "shits" = 'sound/vox_fem/shits.ogg', "shitting" = 'sound/vox_fem/shitting.ogg', "shock" = 'sound/vox_fem/shock.ogg', @@ -778,7 +835,8 @@ GLOBAL_LIST_INIT(vox_sounds, list( "slippery" = 'sound/vox_fem/slippery.ogg', "slow" = 'sound/vox_fem/slow.ogg', "sm" = 'sound/vox_fem/sm.ogg', - "s" = 'sound/vox_fem/s.ogg', + "small" = 'sound/vox_fem/small.ogg', + "sockmuncher" = 'sound/vox_fem/sockmuncher.ogg', "solar" = 'sound/vox_fem/solar.ogg', "solars" = 'sound/vox_fem/solars.ogg', "soldier" = 'sound/vox_fem/soldier.ogg', @@ -788,6 +846,8 @@ GLOBAL_LIST_INIT(vox_sounds, list( "son" = 'sound/vox_fem/son.ogg', "sorry" = 'sound/vox_fem/sorry.ogg', "south" = 'sound/vox_fem/south.ogg', + "southeast" = 'sound/vox_fem/southeast.ogg', + "southwest" = 'sound/vox_fem/southwest.ogg', "space" = 'sound/vox_fem/space.ogg', "squad" = 'sound/vox_fem/squad.ogg', "square" = 'sound/vox_fem/square.ogg', @@ -814,16 +874,18 @@ GLOBAL_LIST_INIT(vox_sounds, list( "supply" = 'sound/vox_fem/supply.ogg', "surface" = 'sound/vox_fem/surface.ogg', "surrender" = 'sound/vox_fem/surrender.ogg', - "surrounded" = 'sound/vox_fem/surrounded.ogg', "surround" = 'sound/vox_fem/surround.ogg', + "surrounded" = 'sound/vox_fem/surrounded.ogg', "sweating" = 'sound/vox_fem/sweating.ogg', "swhitenoise" = 'sound/vox_fem/swhitenoise.ogg', "switch" = 'sound/vox_fem/switch.ogg', "syndicate" = 'sound/vox_fem/syndicate.ogg', "system" = 'sound/vox_fem/system.ogg', "systems" = 'sound/vox_fem/systems.ogg', + "t" = 'sound/vox_fem/t.ogg', "table" = 'sound/vox_fem/table.ogg', "tactical" = 'sound/vox_fem/tactical.ogg', + "taildragger" = 'sound/vox_fem/taildragger.ogg', "take" = 'sound/vox_fem/take.ogg', "talk" = 'sound/vox_fem/talk.ogg', "tampered" = 'sound/vox_fem/tampered.ogg', @@ -831,22 +893,26 @@ GLOBAL_LIST_INIT(vox_sounds, list( "tank" = 'sound/vox_fem/tank.ogg', "target" = 'sound/vox_fem/target.ogg', "team" = 'sound/vox_fem/team.ogg', + "tech" = 'sound/vox_fem/tech.ogg', "technician" = 'sound/vox_fem/technician.ogg', "technology" = 'sound/vox_fem/technology.ogg', - "tech" = 'sound/vox_fem/tech.ogg', + "teleporter" = 'sound/vox_fem/teleporter.ogg', "temperature" = 'sound/vox_fem/temperature.ogg', "temporal" = 'sound/vox_fem/temporal.ogg', "ten" = 'sound/vox_fem/ten.ogg', "terminal" = 'sound/vox_fem/terminal.ogg', + "terminate" = 'sound/vox_fem/terminate.ogg', "terminated" = 'sound/vox_fem/terminated.ogg', "termination" = 'sound/vox_fem/termination.ogg', "test" = 'sound/vox_fem/test.ogg', "text" = 'sound/vox_fem/text.ogg', + "thank" = 'sound/vox_fem/thank.ogg', + "thanks" = 'sound/vox_fem/thanks.ogg', "that" = 'sound/vox_fem/that.ogg', + "the" = 'sound/vox_fem/the.ogg', "theater" = 'sound/vox_fem/theater.ogg', "them" = 'sound/vox_fem/them.ogg', "then" = 'sound/vox_fem/then.ogg', - "the" = 'sound/vox_fem/the.ogg', "there" = 'sound/vox_fem/there.ogg', "they" = 'sound/vox_fem/they.ogg', "third" = 'sound/vox_fem/third.ogg', @@ -860,7 +926,7 @@ GLOBAL_LIST_INIT(vox_sounds, list( "through" = 'sound/vox_fem/through.ogg', "tide" = 'sound/vox_fem/tide.ogg', "time" = 'sound/vox_fem/time.ogg', - "t" = 'sound/vox_fem/t.ogg', + "tiny" = 'sound/vox_fem/tiny.ogg', "to" = 'sound/vox_fem/to.ogg', "top" = 'sound/vox_fem/top.ogg', "topside" = 'sound/vox_fem/topside.ogg', @@ -879,8 +945,9 @@ GLOBAL_LIST_INIT(vox_sounds, list( "twelve" = 'sound/vox_fem/twelve.ogg', "twenty" = 'sound/vox_fem/twenty.ogg', "two" = 'sound/vox_fem/two.ogg', - "ughh" = 'sound/vox_fem/ughh.ogg', + "u" = 'sound/vox_fem/u.ogg', "ugh" = 'sound/vox_fem/ugh.ogg', + "ughh" = 'sound/vox_fem/ughh.ogg', "unable" = 'sound/vox_fem/unable.ogg', "unauthorized" = 'sound/vox_fem/unauthorized.ogg', "under" = 'sound/vox_fem/under.ogg', @@ -889,26 +956,27 @@ GLOBAL_LIST_INIT(vox_sounds, list( "unlocked" = 'sound/vox_fem/unlocked.ogg', "unsafe" = 'sound/vox_fem/unsafe.ogg', "until" = 'sound/vox_fem/until.ogg', - "u" = 'sound/vox_fem/u.ogg', - "updated" = 'sound/vox_fem/updated.ogg', + "up" = 'sound/vox_fem/up.ogg', "update" = 'sound/vox_fem/update.ogg', + "updated" = 'sound/vox_fem/updated.ogg', "updating" = 'sound/vox_fem/updating.ogg', "upload" = 'sound/vox_fem/upload.ogg', - "up" = 'sound/vox_fem/up.ogg', "upper" = 'sound/vox_fem/upper.ogg', "uranium" = 'sound/vox_fem/uranium.ogg', + "us" = 'sound/vox_fem/us.ogg', "usa" = 'sound/vox_fem/usa.ogg', - "used" = 'sound/vox_fem/used.ogg', "use" = 'sound/vox_fem/use.ogg', + "used" = 'sound/vox_fem/used.ogg', "user" = 'sound/vox_fem/user.ogg', - "us" = 'sound/vox_fem/us.ogg', + "v" = 'sound/vox_fem/v.ogg', "vacate" = 'sound/vox_fem/vacate.ogg', "vacuum" = 'sound/vox_fem/vacuum.ogg', "valid" = 'sound/vox_fem/valid.ogg', + "validate" = 'sound/vox_fem/validate.ogg', "vapor" = 'sound/vox_fem/vapor.ogg', "vendor" = 'sound/vox_fem/vendor.ogg', - "ventilation" = 'sound/vox_fem/ventilation.ogg', "vent" = 'sound/vox_fem/vent.ogg', + "ventilation" = 'sound/vox_fem/ventilation.ogg', "very" = 'sound/vox_fem/very.ogg', "victor" = 'sound/vox_fem/victor.ogg', "violated" = 'sound/vox_fem/violated.ogg', @@ -917,31 +985,33 @@ GLOBAL_LIST_INIT(vox_sounds, list( "virology" = 'sound/vox_fem/virology.ogg', "virus" = 'sound/vox_fem/virus.ogg', "vitals" = 'sound/vox_fem/vitals.ogg', - "v" = 'sound/vox_fem/v.ogg', "voltage" = 'sound/vox_fem/voltage.ogg', - "vox_login" = 'sound/vox_fem/vox_login.ogg', "vox" = 'sound/vox_fem/vox.ogg', + "vox_login" = 'sound/vox_fem/vox_login.ogg', "voxtest" = 'sound/vox_fem/voxtest.ogg', + "w" = 'sound/vox_fem/w.ogg', "walk" = 'sound/vox_fem/walk.ogg', "wall" = 'sound/vox_fem/wall.ogg', "wanker" = 'sound/vox_fem/wanker.ogg', - "wanted" = 'sound/vox_fem/wanted.ogg', "want" = 'sound/vox_fem/want.ogg', + "wanted" = 'sound/vox_fem/wanted.ogg', "warden" = 'sound/vox_fem/warden.ogg', "warm" = 'sound/vox_fem/warm.ogg', - "warning" = 'sound/vox_fem/warning.ogg', "warn" = 'sound/vox_fem/warn.ogg', + "warning" = 'sound/vox_fem/warning.ogg', + "was" = 'sound/vox_fem/was.ogg', "waste" = 'sound/vox_fem/waste.ogg', "water" = 'sound/vox_fem/water.ogg', + "we" = 'sound/vox_fem/we.ogg', "weak" = 'sound/vox_fem/weak.ogg', "weapon" = 'sound/vox_fem/weapon.ogg', "welcome" = 'sound/vox_fem/welcome.ogg', - "we" = 'sound/vox_fem/we.ogg', "west" = 'sound/vox_fem/west.ogg', "wew" = 'sound/vox_fem/wew.ogg', "what" = 'sound/vox_fem/what.ogg', "when" = 'sound/vox_fem/when.ogg', "where" = 'sound/vox_fem/where.ogg', + "while" = 'sound/vox_fem/while.ogg', "whiskey" = 'sound/vox_fem/whiskey.ogg', "white" = 'sound/vox_fem/white.ogg', "why" = 'sound/vox_fem/why.ogg', @@ -952,29 +1022,28 @@ GLOBAL_LIST_INIT(vox_sounds, list( "with" = 'sound/vox_fem/with.ogg', "without" = 'sound/vox_fem/without.ogg', "wizard" = 'sound/vox_fem/wizard.ogg', - "w" = 'sound/vox_fem/w.ogg', "wood" = 'sound/vox_fem/wood.ogg', "woody" = 'sound/vox_fem/woody.ogg', "woop" = 'sound/vox_fem/woop.ogg', "wow" = 'sound/vox_fem/wow.ogg', + "x" = 'sound/vox_fem/x.ogg', + "xeno" = 'sound/vox_fem/xeno.ogg', "xenobiology" = 'sound/vox_fem/xenobiology.ogg', "xenomorph" = 'sound/vox_fem/xenomorph.ogg', "xenomorphs" = 'sound/vox_fem/xenomorphs.ogg', - "xeno" = 'sound/vox_fem/xeno.ogg', - "x" = 'sound/vox_fem/x.ogg', + "y" = 'sound/vox_fem/y.ogg', "yankee" = 'sound/vox_fem/yankee.ogg', "yards" = 'sound/vox_fem/yards.ogg', "year" = 'sound/vox_fem/year.ogg', "yellow" = 'sound/vox_fem/yellow.ogg', "yes" = 'sound/vox_fem/yes.ogg', - "y" = 'sound/vox_fem/y.ogg', "you" = 'sound/vox_fem/you.ogg', "your" = 'sound/vox_fem/your.ogg', "yourself" = 'sound/vox_fem/yourself.ogg', - "zero" = 'sound/vox_fem/zero.ogg', "z" = 'sound/vox_fem/z.ogg', + "zero" = 'sound/vox_fem/zero.ogg', "zombie" = 'sound/vox_fem/zombie.ogg', "zone" = 'sound/vox_fem/zone.ogg', - "zulu" = 'sound/vox_fem/zulu.ogg' - )) + "zulu" = 'sound/vox_fem/zulu.ogg', +)) #endif diff --git a/code/modules/mob/living/silicon/damage_procs.dm b/code/modules/mob/living/silicon/damage_procs.dm index 16f6b8abb42f74..58e5a244eaf749 100644 --- a/code/modules/mob/living/silicon/damage_procs.dm +++ b/code/modules/mob/living/silicon/damage_procs.dm @@ -7,12 +7,6 @@ /mob/living/silicon/setToxLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype) return FALSE -/mob/living/silicon/adjustCloneLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype) //immune to clone damage - return FALSE - -/mob/living/silicon/setCloneLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype) - return FALSE - /mob/living/silicon/adjustStaminaLoss(amount, updating_stamina = TRUE, forced = FALSE, required_biotype) //immune to stamina damage. return FALSE @@ -31,7 +25,7 @@ return FALSE -/mob/living/silicon/setOxyLoss(amount, updating_health = TRUE, forced = FALSE, forced = FALSE, required_biotype) +/mob/living/silicon/setOxyLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype) if(isAI(src)) //ditto return ..() diff --git a/code/modules/mob/living/silicon/death.dm b/code/modules/mob/living/silicon/death.dm index 1cd7035b8a01b7..229ad70bb8471e 100644 --- a/code/modules/mob/living/silicon/death.dm +++ b/code/modules/mob/living/silicon/death.dm @@ -5,8 +5,6 @@ new /obj/effect/decal/remains/robot(loc) /mob/living/silicon/death(gibbed) - if(!gibbed) - INVOKE_ASYNC(src, PROC_REF(emote), "deathgasp") diag_hud_set_status() diag_hud_set_health() update_health_hud() diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm index 5c67310a6b924c..2f6c67b976c443 100644 --- a/code/modules/mob/living/silicon/robot/emote.dm +++ b/code/modules/mob/living/silicon/robot/emote.dm @@ -1,6 +1,6 @@ -/* SKYRAT EDIT REMOVAL +/* NOVA EDIT REMOVAL /datum/emote/silicon - mob_type_allowed_typecache = list(/mob/living/silicon, /mob/living/simple_animal/bot) + mob_type_allowed_typecache = list(/mob/living/silicon, /mob/living/simple_animal/bot, /mob/living/basic/bot) emote_type = EMOTE_AUDIBLE /datum/emote/silicon/boop diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm index 68ee438dc1239c..8f17cf20d8a1af 100644 --- a/code/modules/mob/living/silicon/robot/examine.dm +++ b/code/modules/mob/living/silicon/robot/examine.dm @@ -46,9 +46,9 @@ . += span_warning("It doesn't seem to be responding.") if(DEAD) . += span_deadsay("It looks like its system is corrupted and requires a reset.") - //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION + //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION . += get_silicon_flavortext() - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END . += "" . += ..() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index c9b72ec8a92e86..805bb7b6dd4b98 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -12,7 +12,7 @@ post_untipped_callback = CALLBACK(src, PROC_REF(after_righted)), \ roleplay_friendly = TRUE, \ roleplay_emotes = list(/datum/emote/living/human/buzz, /datum/emote/living/human/buzz2, /datum/emote/living/human/beep, /datum/emote/living/human/beep2), \ - roleplay_callback = CALLBACK(src, PROC_REF(untip_roleplay))) // SKYRAT EDIT CHANGE + roleplay_callback = CALLBACK(src, PROC_REF(untip_roleplay))) // NOVA EDIT CHANGE set_wires(new /datum/wires/robot(src)) AddElement(/datum/element/empprotection, EMP_PROTECT_WIRES) @@ -160,7 +160,7 @@ to_chat(src,span_userdanger("ERROR: Lockdown is engaged. Please disengage lockdown to pick module.")) return - // SKYRAT EDIT START - Making the cyborg model list static to reduce how many times it's generated. + // NOVA EDIT START - Making the cyborg model list static to reduce how many times it's generated. if(!length(GLOB.cyborg_model_list)) GLOB.cyborg_model_list = list( "Engineering" = /obj/item/robot_model/engineering, @@ -184,8 +184,8 @@ for(var/option in GLOB.cyborg_model_list) var/obj/item/robot_model/model = GLOB.cyborg_model_list[option] var/model_icon = initial(model.cyborg_base_icon) - GLOB.cyborg_base_models_icon_list[option] = image(icon = 'modular_skyrat/master_files/icons/mob/robots.dmi', icon_state = model_icon) // SKYRAT EDIT - CARGO BORGS - ORIGINAL: model_icons[option] = image(icon = 'icons/mob/robots.dmi', icon_state = model_icon) - // SKYRAT EDIT END + GLOB.cyborg_base_models_icon_list[option] = image(icon = 'modular_nova/master_files/icons/mob/robots.dmi', icon_state = model_icon) // NOVA EDIT - CARGO BORGS - ORIGINAL: model_icons[option] = image(icon = 'icons/mob/robots.dmi', icon_state = model_icon) + // NOVA EDIT END var/input_model = show_radial_menu(src, src, GLOB.cyborg_base_models_icon_list, radius = 42) if(!input_model || model.type != /obj/item/robot_model) @@ -349,7 +349,7 @@ eye_lights.icon = icon add_overlay(eye_lights) - if(opened && !(R_TRAIT_UNIQUEPANEL in model.model_features)) + if(opened && !(TRAIT_R_UNIQUEPANEL in model.model_features)) if(wiresexposed) add_overlay("ov-opencover +w") else if(cell) @@ -734,14 +734,14 @@ if (hasExpanded) hasExpanded = FALSE //update_transform(0.5) // Original - update_transform(0.8) // SKYRAT EDIT CHANGE + update_transform(0.8) // NOVA EDIT CHANGE - //SKYRAT EDIT ADDITION BEGIN - CYBORG + //NOVA EDIT ADDITION BEGIN - CYBORG if (hasShrunk) hasShrunk = FALSE update_transform(4/3) hasAffection = FALSE //Just so they can get the affection modules back if they want them. - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END logevent("Chassis model has been reset.") log_silicon("CYBORG: [key_name(src)] has reset their cyborg model.") @@ -1015,6 +1015,9 @@ if(.) var/mob/living/silicon/ai/old_ai = . old_ai.connected_robots -= src + // if the borg has a malf AI zeroth law and has been unsynced from the malf AI, then remove the law + if(isnull(connected_ai) && IS_MALF_AI(old_ai) && !isnull(laws?.zeroth)) + clear_zeroth_law(FALSE, TRUE) lamp_doom = FALSE if(connected_ai) connected_ai.connected_robots |= src diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index b9d3304ef8de7f..f4e0fb9b55ccb6 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -95,8 +95,12 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real if(shell) //AI shells always have the laws of the AI to_chat(user, span_warning("[src] is controlled remotely! You cannot upload new laws this way!")) return - if(emagged || (connected_ai && lawupdate)) //Can't be sure which, metagamers - emote("buzz-[user.name]") + if(connected_ai && lawupdate) + to_chat(user, span_warning("[src] is receiving laws remotely from a synced AI!")) + return + if(emagged) + to_chat(user, span_warning("The law interface glitches out!")) + emote("buzz") return if(!mind) //A player mind is required for law procs to run antag checks. to_chat(user, span_warning("[src] is entirely unresponsive!")) @@ -180,8 +184,6 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real modularInterface.inserted_disk = floppy return - if(W.force && W.damtype != STAMINA && stat != DEAD) //only sparks if real damage is dealt. - spark_system.start() return ..() /mob/living/silicon/robot/attack_alien(mob/living/carbon/alien/adult/user, list/modifiers) @@ -205,24 +207,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) @@ -405,7 +389,7 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real laws = new /datum/ai_laws/syndicate_override if(user) to_chat(src, span_danger("ALERT: [user.real_name] is your new master. Obey your new laws and [user.p_their()] commands.")) - set_zeroth_law("Only [user.real_name] and people [user.p_they()] designate[user.p_s()] as being such are Syndicate Agents.") + set_zeroth_law("Only [user.real_name] and people [user.p_they()] designate[user.p_s()] as being such are Symphionia Agents.") laws.associate(src) update_icons() diff --git a/code/modules/mob/living/silicon/robot/robot_defines.dm b/code/modules/mob/living/silicon/robot/robot_defines.dm index d4bbb061ee5374..a25ceedbbd4216 100644 --- a/code/modules/mob/living/silicon/robot/robot_defines.dm +++ b/code/modules/mob/living/silicon/robot/robot_defines.dm @@ -8,7 +8,7 @@ /mob/living/silicon/robot name = "Cyborg" real_name = "Cyborg" - icon = 'icons/mob/silicon/robots.dmi' //SKYRAT EDIT - Modified in modular_skyrat\modules\altborgs\code\robot_defines.dm (to allow for custom transformation animations) + icon = 'icons/mob/silicon/robots.dmi' //NOVA EDIT - Modified in modular_nova\modules\altborgs\code\robot_defines.dm (to allow for custom transformation animations) icon_state = "robot" maxHealth = 100 health = 100 @@ -196,7 +196,7 @@ lawupdate = FALSE scrambledcodes = TRUE // These are rogue borgs. ionpulse = TRUE - var/playstyle_string = "You are a Syndicate assault cyborg!
    \ + var/playstyle_string = "You are a Symphionia assault cyborg!
    \ You are armed with powerful offensive tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \ Your cyborg LMG will slowly produce ammunition from your power supply, and your operative pinpointer will find and locate fellow nuclear operatives. \ Help the operatives secure the disk at all costs!" @@ -225,9 +225,9 @@ /mob/living/silicon/robot/model/syndicate/medical icon_state = "synd_medical" - playstyle_string = "You are a Syndicate medical cyborg!
    \ + playstyle_string = "You are a Symphionia medical cyborg!
    \ You are armed with powerful medical tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \ - Your hypospray will produce Restorative Nanites, a wonder-drug that will heal most types of bodily damages, including clone and brain damage. It also produces morphine for offense. \ + Your hypospray will produce Restorative Nanites, a wonder-drug that will heal most types of bodily damages, including brain damage. It also produces morphine for offense. \ Your defibrillator paddles can revive operatives through their suits, or can be used on harm intent to shock enemies! \ Your energy saw functions as a circular saw, but can be activated to deal more damage, and your operative pinpointer will find and locate fellow nuclear operatives. \ Help the operatives secure the disk at all costs!" @@ -235,11 +235,11 @@ /mob/living/silicon/robot/model/syndicate/saboteur icon_state = "synd_engi" - playstyle_string = "You are a Syndicate saboteur cyborg!
    \ + playstyle_string = "You are a Symphionia saboteur cyborg!
    \ You are armed with robust engineering tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \ Your destination tagger will allow you to stealthily traverse the disposal network across the station \ Your welder will allow you to repair the operatives' exosuits, but also yourself and your fellow cyborgs \ - Your cyborg chameleon projector allows you to assume the appearance and registered name of a Nanotrasen engineering borg, and undertake covert actions on the station \ + Your cyborg chameleon projector allows you to assume the appearance and registered name of a Symphionia engineering borg, and undertake covert actions on the station \ Be aware that almost any physical contact or incidental damage will break your camouflage \ Help the operatives secure the disk at all costs!" set_model = /obj/item/robot_model/saboteur diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm index 100d5c3da65ce3..977c60bcbb879f 100644 --- a/code/modules/mob/living/silicon/robot/robot_model.dm +++ b/code/modules/mob/living/silicon/robot/robot_model.dm @@ -8,13 +8,13 @@ **/ /obj/item/robot_model name = "Default" - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "std_mod" w_class = WEIGHT_CLASS_GIGANTIC inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY ///Host of this model var/mob/living/silicon/robot/robot ///Icon of the module selection screen @@ -157,11 +157,11 @@ var/obj/item/gun/energy/gun = module if(!gun.chambered) gun.recharge_newshot() //try to reload a new shot. - /// SKYRAT EDIT START - Cargo borgs + /// NOVA EDIT START - Cargo borgs else if(istype(module, /obj/item/hand_labeler/cyborg)) var/obj/item/hand_labeler/cyborg/labeler = module labeler.labels_left = 30 - /// SKYRAT EDIT END + /// NOVA EDIT END cyborg.toner = cyborg.tonermax @@ -225,12 +225,16 @@ new_model.rebuild_modules() cyborg.radio.recalculateChannels() cyborg.set_modularInterface_theme() + cyborg.diag_hud_set_health() + cyborg.diag_hud_set_status() + cyborg.diag_hud_set_borgcell() + cyborg.diag_hud_set_aishell() log_silicon("CYBORG: [key_name(cyborg)] has transformed into the [new_model] model.") - //SKYRAT EDIT ADDITION BEGIN - ALTBORGS - Old check for 'dogborg' var no longer necessary, refactored into model_features instead. + //NOVA EDIT ADDITION BEGIN - ALTBORGS - Old check for 'dogborg' var no longer necessary, refactored into model_features instead. new_model.update_dogborg() new_model.update_tallborg() - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END INVOKE_ASYNC(new_model, PROC_REF(do_transform_animation)) qdel(src) @@ -246,26 +250,27 @@ for(var/skin in borg_skins) var/list/details = borg_skins[skin] reskin_icons[skin] = image(icon = details[SKIN_ICON] || 'icons/mob/silicon/robots.dmi', icon_state = details[SKIN_ICON_STATE]) - //SKYRAT EDIT ADDITION BEGIN - ALTBORGS + //NOVA EDIT ADDITION BEGIN - ALTBORGS if (!isnull(details[SKIN_FEATURES])) - if (R_TRAIT_WIDE in details[SKIN_FEATURES]) + if (TRAIT_R_WIDE in details[SKIN_FEATURES]) var/image/reskin = reskin_icons[skin] reskin.pixel_x -= 16 - //SKYRAT EDIT END + //NOVA EDIT END var/borg_skin = show_radial_menu(cyborg, cyborg, reskin_icons, custom_check = CALLBACK(src, PROC_REF(check_menu), cyborg, old_model), radius = 38, require_near = TRUE) if(!borg_skin) return FALSE var/list/details = borg_skins[borg_skin] - //SKYRAT EDIT START - if(cyborg.hasExpanded && (((R_TRAIT_WIDE in details[SKIN_FEATURES]) && (R_TRAIT_WIDE in model_features)) || ((R_TRAIT_TALL in details[SKIN_FEATURES]) && (R_TRAIT_TALL in model_features)))) + //NOVA EDIT START + if(cyborg.hasExpanded && (((TRAIT_R_WIDE in details[SKIN_FEATURES]) && (TRAIT_R_WIDE in model_features)) || ((TRAIT_R_TALL in details[SKIN_FEATURES]) && (TRAIT_R_TALL in model_features)))) to_chat(cyborg, span_warning("You can't make yourself into a larger frame when you've already used an expander!")) return FALSE - //SKYRAT EDIT END + //NOVA EDIT END if(!isnull(details[SKIN_ICON_STATE])) cyborg_base_icon = details[SKIN_ICON_STATE] if(!isnull(details[SKIN_ICON])) cyborg.icon = details[SKIN_ICON] - cyborg_icon_override = details[SKIN_ICON] // SKYRAT EDIT ADDITION + cyborg_icon_override = details[SKIN_ICON] // NOVA EDIT ADDITION + if(!isnull(details[SKIN_PIXEL_X])) cyborg.base_pixel_x = details[SKIN_PIXEL_X] if(!isnull(details[SKIN_PIXEL_Y])) cyborg.base_pixel_y = details[SKIN_PIXEL_Y] @@ -275,10 +280,10 @@ hat_offset = details[SKIN_HAT_OFFSET] if(!isnull(details[SKIN_TRAITS])) model_traits += details[SKIN_TRAITS] - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(!isnull(details[SKIN_FEATURES])) model_features += details[SKIN_FEATURES] - //SKYRAT EDIT END + //NOVA EDIT END for(var/i in old_model.added_modules) added_modules += i old_model.added_modules -= i @@ -381,12 +386,14 @@ /obj/item/pipe_dispenser, /obj/item/extinguisher, /obj/item/weldingtool/largetank/cyborg, - /obj/item/screwdriver/cyborg/power, // Skyrat Removal/Edit - Combines Screwdriver and Wrench into one - /obj/item/crowbar/cyborg/power, // Skyrat Removal/Edit - Combines Crowbar and Wirecutters into one + /obj/item/screwdriver/cyborg/power, // NOVA EDIT CHANGE - ORIGINAL: /obj/item/screwdriver/cyborg, + //obj/item/wrench/cyborg, // NOVA EDIT REMOVAL - Combines Screwdriver and Wrench into one + /obj/item/crowbar/cyborg/power, // NOVA EDIT CHANGE - ORIGINAL: /obj/item/crowbar/cyborg, + //obj/item/wirecutters/cyborg, // NOVA EDIT REMOVAL - Combines Crowbar and Wirecutters into one /obj/item/multitool/cyborg, /obj/item/t_scanner, /obj/item/analyzer, - /obj/item/holosign_creator/atmos, // Skyrat Edit - Adds Holofans to engineering borgos + /obj/item/holosign_creator/atmos, // NOVA EDIT ADDITION - Adds Holofans to engineering borgos /obj/item/assembly/signaler/cyborg, /obj/item/areaeditor/blueprints/cyborg, /obj/item/electroadaptive_pseudocircuit, @@ -394,7 +401,7 @@ /obj/item/stack/sheet/glass, /obj/item/borg/apparatus/sheet_manipulator, /obj/item/stack/rods/cyborg, - /obj/item/lightreplacer/cyborg, // Skyrat Edit - Surprised Engie borgs don't get these + /obj/item/lightreplacer/cyborg, // NOVA EDIT ADDITION - Surprised Engie borgs don't get these /obj/item/stack/tile/iron/base/cyborg, /obj/item/stack/cable_coil, ) @@ -616,7 +623,7 @@ var/turf/our_turf = get_turf(robot_owner) - if(reagents.has_chemical_flag(REAGENT_CLEANS, 1)) + if(reagents.has_reagent(amount = 1, chemical_flags = REAGENT_CLEANS)) our_turf.wash(CLEAN_SCRUB) reagents.expose(our_turf, TOUCH, min(1, 10 / reagents.total_volume)) @@ -684,6 +691,7 @@ /obj/item/scalpel, /obj/item/circular_saw, /obj/item/bonesetter, + /obj/item/blood_filter, /obj/item/extinguisher/mini, /obj/item/emergency_bed/silicon, /obj/item/borg/cyborghug/medical, @@ -700,6 +708,10 @@ model_select_icon = "medical" model_traits = list(TRAIT_PUSHIMMUNE) hat_offset = 3 + borg_skins = list( + "Machinified Doctor" = list(SKIN_ICON_STATE = "medical"), + "Qualified Doctor" = list(SKIN_ICON_STATE = "qualified_doctor"), + ) /obj/item/robot_model/miner name = "Miner" @@ -763,7 +775,7 @@ /obj/item/robot_model/peacekeeper/do_transform_animation() ..() to_chat(loc, "Under Safeguard, you are an enforcer of the PEACE and preventer of HARM. \ - You are not a security member and you are expected to follow orders and prevent harm above all else. Space law means nothing to you.") // SKYRAT EDIT Changes verbiage off ASIMOV/HUMAN Focus + You are not a security member and you are expected to follow orders and prevent harm above all else. Space law means nothing to you.
    ") // NOVA EDIT Changes verbiage off ASIMOV/HUMAN Focus /obj/item/robot_model/security name = "Security" @@ -804,16 +816,23 @@ name = "Service" basic_modules = list( /obj/item/assembly/flash/cyborg, - /obj/item/reagent_containers/borghypo/borgshaker, + //obj/item/reagent_containers/borghypo/borgshaker, // NOVA EDIT REMOVAL - SPECIFIC SHAKERS + //NOVA EDIT ADDITION START + /obj/item/reagent_containers/borghypo/borgshaker/specific/alcohol, + /obj/item/reagent_containers/borghypo/borgshaker/specific/soda, + /obj/item/reagent_containers/borghypo/borgshaker/specific/juice, + /obj/item/reagent_containers/borghypo/borgshaker/specific/misc, + //NOVA EDIT ADDITION END /obj/item/borg/apparatus/beaker/service, + /obj/item/borg/apparatus/beaker, // NOVA EDIT ADDITION - Allows the pickup of different beakers for easier drink mixing /obj/item/reagent_containers/cup/beaker/large, //I know a shaker is more appropiate but this is for ease of identification - //Skyrat Edit Start: Borg Buff - //obj/item/reagent_containers/condiment/enzyme, //edit - Borg shaker has it - /obj/item/borg/apparatus/beaker, // SKYRAT EDIT: allows the pickup of different beakers for easier drink mixing + //obj/item/reagent_containers/condiment/enzyme, // NOVA EDIT REMOVAL - Borg shaker has it /obj/item/reagent_containers/dropper, + /obj/item/reagent_containers/syringe, //NOVA EDIT ADDITION /obj/item/rsf, /obj/item/storage/bag/tray, - /obj/item/storage/bag/tray, // SKYRAT EDIT: Moves the second tray up to be near the default one + /obj/item/storage/bag/tray, // NOVA EDIT ADDITION: Adds second tray + /obj/item/cooking/cyborg/power, //NOVA EDIT ADDITION /obj/item/pen, /obj/item/toy/crayon/spraycan/borg, /obj/item/extinguisher/mini, @@ -821,12 +840,6 @@ /obj/item/razor, /obj/item/instrument/guitar, /obj/item/instrument/piano_synth, - /obj/item/reagent_containers/borghypo/borgshaker/specific/juice, //edit - /obj/item/reagent_containers/borghypo/borgshaker/specific/soda, //edit - /obj/item/reagent_containers/borghypo/borgshaker/specific/alcohol, //edit - /obj/item/reagent_containers/borghypo/borgshaker/specific/misc, //edit - /obj/item/reagent_containers/syringe, //edit - /obj/item/cooking/cyborg/power, //edit /obj/item/lighter, /obj/item/borg/lollipop, /obj/item/stack/pipe_cleaner_coil/cyborg, @@ -857,7 +870,7 @@ enzyme.reagents.add_reagent(/datum/reagent/consumable/enzyme, 2 * coeff) /obj/item/robot_model/syndicate - name = "Syndicate Assault" + name = "Symphionia Assault" basic_modules = list( /obj/item/assembly/flash/cyborg, /obj/item/melee/energy/sword/cyborg, @@ -884,7 +897,7 @@ cyborg.faction |= FACTION_SILICON //ai is your bff now! /obj/item/robot_model/syndicate_medical - name = "Syndicate Medical" + name = "Symphionia Medical" basic_modules = list( /obj/item/assembly/flash/cyborg, /obj/item/reagent_containers/borghypo/syndicate, @@ -914,7 +927,7 @@ hat_offset = 3 /obj/item/robot_model/saboteur - name = "Syndicate Saboteur" + name = "Symphionia Saboteur" basic_modules = list( /obj/item/assembly/flash/cyborg, /obj/item/borg/sight/thermal, diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 8a1f20d28c4b75..ddf2dc43f71c23 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -21,7 +21,7 @@ var/designation = "" var/radiomod = "" //Radio character used before state laws/arrivals announce to allow department transmissions, default, or none at all. var/obj/item/camera/siliconcam/aicamera = null //photography - hud_possible = list(ANTAG_HUD, DIAG_STAT_HUD, DIAG_HUD, DIAG_TRACK_HUD, DNR_HUD) // SKYRAT EDIT ADDITION - DNR HUD + hud_possible = list(ANTAG_HUD, DIAG_STAT_HUD, DIAG_HUD, DIAG_TRACK_HUD, DNR_HUD) // NOVA EDIT ADDITION - DNR HUD var/obj/item/radio/borg/radio = null ///If this is a path, this gets created as an object in Initialize. diff --git a/code/modules/mob/living/silicon/silicon_defense.dm b/code/modules/mob/living/silicon/silicon_defense.dm index 75cbd83f54feca..9b74fb35ffc8fc 100644 --- a/code/modules/mob/living/silicon/silicon_defense.dm +++ b/code/modules/mob/living/silicon/silicon_defense.dm @@ -27,20 +27,17 @@ /mob/living/silicon/attack_animal(mob/living/simple_animal/user, list/modifiers) . = ..() - if(.) - var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) - if(prob(damage)) - for(var/mob/living/buckled in buckled_mobs) - buckled.Paralyze(20) - unbuckle_mob(buckled) - buckled.visible_message(span_danger("[buckled] is knocked off of [src] by [user]!"), \ - span_userdanger("You're knocked off of [src] by [user]!"), null, null, user) - to_chat(user, span_danger("You knock [buckled] off of [src]!")) - switch(user.melee_damage_type) - if(BRUTE) - adjustBruteLoss(damage) - if(BURN) - adjustFireLoss(damage) + var/damage_received = . + if(prob(damage_received)) + for(var/mob/living/buckled in buckled_mobs) + buckled.Paralyze(2 SECONDS) + unbuckle_mob(buckled) + buckled.visible_message( + span_danger("[buckled] is knocked off of [src] by [user]!"), + span_userdanger("You're knocked off of [src] by [user]!"), + ignored_mobs = user, + ) + to_chat(user, span_danger("You knock [buckled] off of [src]!")) /mob/living/silicon/attack_paw(mob/living/user, list/modifiers) return attack_hand(user, modifiers) @@ -73,12 +70,25 @@ visible_message(span_danger("[user] punches [src], but doesn't leave a dent!"), \ span_warning("[user] punches you, but doesn't leave a dent!"), null, COMBAT_MESSAGE_RANGE, user) to_chat(user, span_danger("You punch [src], but don't leave a dent!")) - else + else // NOVA EDIT ADDITION START + if(HAS_TRAIT(src, TRAIT_QUICKREFLEXES) && (src.stat != UNCONSCIOUS) && !src.incapacitated(IGNORE_RESTRAINTS)) + visible_message(span_warning("[user] tries to pet [src], but it moves out of the way.")) + return + // NOVA EDIT ADDITION END visible_message(span_notice("[user] pets [src]."), \ span_notice("[user] pets you."), null, null, user) to_chat(user, span_notice("You pet [src].")) - user.add_mood_event("pet_borg", /datum/mood_event/pet_borg) + SEND_SIGNAL(user, COMSIG_MOB_PAT_BORG) +/mob/living/silicon/check_block(atom/hitby, damage, attack_text, attack_type, armour_penetration, damage_type, attack_flag) + . = ..() + if(.) + return TRUE + if(damage_type == BRUTE && attack_type == UNARMED_ATTACK && attack_flag == MELEE && damage <= 10) + playsound(src, 'sound/effects/bang.ogg', 10, TRUE) + visible_message(span_danger("[attack_text] doesn't leave a dent on [src]!"), vision_distance = COMBAT_MESSAGE_RANGE) + return TRUE + return FALSE /mob/living/silicon/attack_drone(mob/living/basic/drone/user) if(user.combat_mode) diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index 103ea7aa147e52..afe4c00db4d470 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -32,12 +32,14 @@ if(HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, span_warning("You don't want to hurt [src]!")) return + if(check_block(user, harm_intent_damage, "[user]'s punch", UNARMED_ATTACK, 0, BRUTE)) + return user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) visible_message(span_danger("[user] [response_harm_continuous] [src]!"),\ span_userdanger("[user] [response_harm_continuous] you!"), null, COMBAT_MESSAGE_RANGE, user) to_chat(user, span_danger("You [response_harm_simple] [src]!")) playsound(loc, attacked_sound, 25, TRUE, -1) - attack_threshold_check(harm_intent_damage) + apply_damage(harm_intent_damage) log_combat(user, src, "attacked") updatehealth() return TRUE @@ -55,9 +57,7 @@ /mob/living/simple_animal/attack_paw(mob/living/carbon/human/user, list/modifiers) if(..()) //successful monkey bite. if(stat != DEAD) - var/damage = rand(1, 3) - attack_threshold_check(damage) - return 1 + return apply_damage(rand(1, 3)) if (!user.combat_mode) if (health > 0) visible_message(span_notice("[user.name] [response_help_continuous] [src]."), \ @@ -80,30 +80,16 @@ span_userdanger("You're slashed at by [user]!"), null, COMBAT_MESSAGE_RANGE, user) to_chat(user, span_danger("You slash at [src]!")) playsound(loc, 'sound/weapons/slice.ogg', 25, TRUE, -1) - attack_threshold_check(damage) + apply_damage(damage) log_combat(user, src, "attacked") return 1 /mob/living/simple_animal/attack_larva(mob/living/carbon/alien/larva/L, list/modifiers) . = ..() if(. && stat != DEAD) //successful larva bite - var/damage = rand(5, 10) - . = attack_threshold_check(damage) - if(.) - L.amount_grown = min(L.amount_grown + damage, L.max_grown) - -/mob/living/simple_animal/attack_animal(mob/living/simple_animal/user, list/modifiers) - . = ..() - if(.) - 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) + var/damage_done = apply_damage(rand(L.melee_damage_lower, L.melee_damage_upper), BRUTE) + if(damage_done > 0) + L.amount_grown = min(L.amount_grown + damage_done, L.max_grown) /mob/living/simple_animal/attack_drone(mob/living/basic/drone/user) if(user.combat_mode) //No kicking dogs even as a rogue drone. Use a weapon. @@ -115,21 +101,6 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN return ..() -/mob/living/simple_animal/proc/attack_threshold_check(damage, damagetype = BRUTE, armorcheck = MELEE, actuallydamage = TRUE) - var/temp_damage = damage - if(!damage_coeff[damagetype]) - temp_damage = 0 - else - temp_damage *= damage_coeff[damagetype] - - if(temp_damage >= 0 && temp_damage <= force_threshold) - visible_message(span_warning("[src] looks unharmed!")) - return FALSE - else - if(actuallydamage) - apply_damage(damage, damagetype, null, getarmor(null, armorcheck)) - return TRUE - /mob/living/simple_animal/ex_act(severity, target, origin) . = ..() if(!. || QDELETED(src)) diff --git a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm index f2a2f9fbb65bd0..8bf51bbffd4e04 100644 --- a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm +++ b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm @@ -117,25 +117,21 @@ if((C.name == oldtarget_name) && (world.time < last_found + 100)) continue - threatlevel = C.assess_threat(judgement_criteria, weaponcheck=CALLBACK(src, PROC_REF(check_for_weapons))) + threatlevel = C.assess_threat(judgement_criteria) - if(!threatlevel) - continue - - else if(threatlevel >= 4) - target = C - oldtarget_name = C.name - speak("Level [threatlevel] infraction alert!") - playsound(src, pick('sound/voice/beepsky/criminal.ogg', 'sound/voice/beepsky/justice.ogg', 'sound/voice/beepsky/freeze.ogg'), 50, FALSE) - playsound(src,'sound/weapons/saberon.ogg',50,TRUE,-1) - visible_message(span_warning("[src] ignites his energy swords!")) - icon_state = "grievous-c" - visible_message("[src] points at [C.name]!") - mode = BOT_HUNT - INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) - break - else + if (threatlevel < THREAT_ASSESS_DANGEROUS) continue + target = C + oldtarget_name = C.name + speak("Level [threatlevel] infraction alert!") + playsound(src, pick('sound/voice/beepsky/criminal.ogg', 'sound/voice/beepsky/justice.ogg', 'sound/voice/beepsky/freeze.ogg'), 50, FALSE) + playsound(src,'sound/weapons/saberon.ogg',50,TRUE,-1) + visible_message(span_warning("[src] ignites his energy swords!")) + icon_state = "grievous-c" + visible_message("[src] points at [C.name]!") + mode = BOT_HUNT + INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) + break /mob/living/simple_animal/bot/secbot/grievous/explode() var/atom/Tsec = drop_location() diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index c369058a2a3176..22c7439ec803f4 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -6,7 +6,7 @@ mob_biotypes = MOB_ROBOTIC stop_automated_movement = TRUE wander = FALSE - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0, OXY = 0) 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) hud_possible = list(DIAG_STAT_HUD, DIAG_BOT_HUD, DIAG_HUD, DIAG_BATT_HUD, DIAG_PATH_HUD = HUD_LIST_LIST) maxbodytemp = INFINITY @@ -453,12 +453,12 @@ /mob/living/simple_animal/bot/screwdriver_act(mob/living/user, obj/item/tool) if(bot_cover_flags & BOT_COVER_LOCKED) to_chat(user, span_warning("The maintenance panel is locked!")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS tool.play_tool_sound(src) bot_cover_flags ^= BOT_COVER_OPEN to_chat(user, span_notice("The maintenance panel is now [bot_cover_flags & BOT_COVER_OPEN ? "opened" : "closed"].")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /mob/living/simple_animal/bot/welder_act(mob/living/user, obj/item/tool) user.changeNext_move(CLICK_CD_MELEE) @@ -467,15 +467,15 @@ if(health >= maxHealth) to_chat(user, span_warning("[src] does not need a repair!")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(!(bot_cover_flags & BOT_COVER_OPEN)) to_chat(user, span_warning("Unable to repair with the maintenance panel closed!")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(tool.use_tool(src, user, 0 SECONDS, volume=40)) adjustHealth(-10) user.visible_message(span_notice("[user] repairs [src]!"),span_notice("You repair [src].")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /mob/living/simple_animal/bot/attackby(obj/item/attacking_item, mob/living/user, params) if(attacking_item.GetID()) @@ -496,11 +496,11 @@ return return ..() -/mob/living/simple_animal/bot/attacked_by(obj/item/I, mob/living/user) - . = ..() - if (!.) - return - do_sparks(5, TRUE, src) +/mob/living/simple_animal/bot/attack_effects(damage_done, hit_zone, armor_block, obj/item/attacking_item, mob/living/attacker) + if(damage_done > 0 && attacking_item.damtype != STAMINA && stat != DEAD) + do_sparks(5, TRUE, src) + . = TRUE + return ..() || . /mob/living/simple_animal/bot/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit = FALSE) . = ..() @@ -709,6 +709,9 @@ Pass a positive integer as an argument to override a bot's default speed. access_card.set_access(prev_access) /mob/living/simple_animal/bot/proc/call_bot(caller, turf/waypoint, message = TRUE) + if(isAI(caller) && calling_ai && calling_ai != src) //Prevents an override if another AI is controlling this bot. + return FALSE + bot_reset() //Reset a bot before setting it to call mode. //For giving the bot temporary all-access. This method is bad and makes me feel bad. Refactoring access to a component is for another PR. @@ -737,6 +740,8 @@ Pass a positive integer as an argument to override a bot's default speed. calling_ai = null set_path(null) + return TRUE + /mob/living/simple_animal/bot/proc/call_mode() //Handles preparing a bot for a call, as well as calling the move proc. //Handles the bot's movement during a call. var/success = bot_move(ai_waypoint, 3) @@ -1170,7 +1175,7 @@ Pass a positive integer as an argument to override a bot's default speed. hud.remove_atom_from_hud(src) var/list/path_images = active_hud_list[DIAG_PATH_HUD] - QDEL_LIST(path_images) + LAZYCLEARLIST(path_images) if(length(newpath)) var/mutable_appearance/path_image = new /mutable_appearance() path_image.icon = path_image_icon @@ -1225,3 +1230,6 @@ Pass a positive integer as an argument to override a bot's default speed. /mob/living/simple_animal/bot/rust_heretic_act() adjustBruteLoss(400) + +/mob/living/simple_animal/bot/spawn_gibs(drop_bitflags = NONE) + new /obj/effect/gibspawner/robot(drop_location(), src) diff --git a/code/modules/mob/living/simple_animal/bot/bot_announcement.dm b/code/modules/mob/living/simple_animal/bot/bot_announcement.dm index 32df0729c8cb2f..30a30b81fd2709 100644 --- a/code/modules/mob/living/simple_animal/bot/bot_announcement.dm +++ b/code/modules/mob/living/simple_animal/bot/bot_announcement.dm @@ -53,3 +53,12 @@ if (length(automated_announcements) && !isnull(automated_announcements[line])) playsound(bot_owner, automated_announcements[line], vol = 50, vary = FALSE) + + +/datum/action/cooldown/bot_announcement/medbot + +/datum/action/cooldown/bot_announcement/medbot/announce(line, channel) + var/mob/living/basic/bot/medbot/bot_owner = owner + if(!(bot_owner.medical_mode_flags & MEDBOT_SPEAK_MODE)) + return + return ..() diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm deleted file mode 100644 index 21186be8bb0d6c..00000000000000 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ /dev/null @@ -1,450 +0,0 @@ -#define CLEANBOT_CLEANING_TIME (1 SECONDS) - -//Cleanbot -/mob/living/simple_animal/bot/cleanbot - name = "\improper Cleanbot" - desc = "A little cleaning robot, he looks so excited!" - icon = 'icons/mob/silicon/aibots.dmi' - icon_state = "cleanbot0" - pass_flags = PASSMOB | PASSFLAPS - density = FALSE - anchored = FALSE - health = 25 - maxHealth = 25 - - maints_access_required = list(ACCESS_ROBOTICS, ACCESS_JANITOR) - radio_key = /obj/item/encryptionkey/headset_service - radio_channel = RADIO_CHANNEL_SERVICE //Service //true - bot_type = CLEAN_BOT - hackables = "cleaning software" - path_image_color = "#993299" - greyscale_config = /datum/greyscale_config/buckets_cleanbot - possessed_message = "You are a cleanbot! Clean the station to the best of your ability!" - ///the bucket used to build us. - var/obj/item/reagent_containers/cup/bucket/build_bucket - - ///Flags indicating what kind of cleanables we should scan for to set as our target to clean. - var/janitor_mode_flags = CLEANBOT_CLEAN_BLOOD -// Selections: CLEANBOT_CLEAN_BLOOD | CLEANBOT_CLEAN_TRASH | CLEANBOT_CLEAN_PESTS | CLEANBOT_CLEAN_DRAWINGS - - ///the base icon state, used in updating icons. - var/base_icon = "cleanbot" - ///List of things cleanbots can target for cleaning. - var/list/target_types - ///The current bot's target. - var/atom/target - - ///Currently attached weapon, usually a knife. - var/obj/item/weapon - - /// if we have all the top titles, grant achievements to living mobs that gaze upon our cleanbot god - var/ascended = FALSE - ///List of all stolen names the cleanbot currently has. - var/list/stolen_valor = list() - - var/static/list/officers_titles = list( - JOB_CAPTAIN, - JOB_HEAD_OF_PERSONNEL, - JOB_HEAD_OF_SECURITY, - JOB_RESEARCH_DIRECTOR, - ) - var/static/list/command_titles = list( - JOB_CAPTAIN = "Cpt.", - JOB_HEAD_OF_PERSONNEL = "Lt.", - ) - var/static/list/security_titles = list( - JOB_HEAD_OF_SECURITY = "Maj.", - JOB_WARDEN = "Sgt.", - JOB_DETECTIVE = "Det.", - JOB_SECURITY_OFFICER = "Officer", - ) - var/static/list/engineering_titles = list( - JOB_CHIEF_ENGINEER = "Chief Engineer", - JOB_STATION_ENGINEER = "Engineer", - JOB_ATMOSPHERIC_TECHNICIAN = "Technician", - ) - var/static/list/medical_titles = list( - JOB_CHIEF_MEDICAL_OFFICER = "C.M.O.", - JOB_MEDICAL_DOCTOR = "M.D.", - JOB_CHEMIST = "Pharm.D.", - ) - var/static/list/research_titles = list( - JOB_RESEARCH_DIRECTOR = "Ph.D.", - JOB_ROBOTICIST = "M.S.", - JOB_SCIENTIST = "B.S.", - JOB_GENETICIST = "Gene B.S.", - ) - var/static/list/legal_titles = list( - JOB_LAWYER = "Esq.", - ) - - ///What ranks are prefixes to the name. - var/static/list/prefixes = list( - command_titles, - security_titles, - engineering_titles, - ) - ///What ranks are suffixes to the name. - var/static/list/suffixes = list( - research_titles, - medical_titles, - legal_titles, - ) - -/mob/living/simple_animal/bot/cleanbot/autopatrol - bot_mode_flags = BOT_MODE_ON | BOT_MODE_AUTOPATROL | BOT_MODE_REMOTE_ENABLED | BOT_MODE_CAN_BE_SAPIENT | BOT_MODE_ROUNDSTART_POSSESSION - -/mob/living/simple_animal/bot/cleanbot/medbay - name = "Scrubs, MD" - maints_access_required = list(ACCESS_ROBOTICS, ACCESS_JANITOR, ACCESS_MEDICAL) - bot_mode_flags = ~(BOT_MODE_ON | BOT_MODE_REMOTE_ENABLED) - -/mob/living/simple_animal/bot/cleanbot/Initialize(mapload, obj/item/reagent_containers/cup/bucket/bucket_obj) - if(!bucket_obj) - bucket_obj = new() - bucket_obj.forceMove(src) - - . = ..() - - AddComponent(/datum/component/cleaner, CLEANBOT_CLEANING_TIME, \ - on_cleaned_callback = CALLBACK(src, TYPE_PROC_REF(/atom/, update_appearance), UPDATE_ICON)) - - get_targets() - update_appearance(UPDATE_ICON) - - // Doing this hurts my soul, but simplebot access reworks are for another day. - var/datum/id_trim/job/jani_trim = SSid_access.trim_singletons_by_path[/datum/id_trim/job/janitor] - access_card.add_access(jani_trim.access + jani_trim.wildcard_access) - prev_access = access_card.access.Copy() - - GLOB.janitor_devices += src - -/mob/living/simple_animal/bot/cleanbot/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) - if(istype(arrived, /obj/item/reagent_containers/cup/bucket)) - if(build_bucket && build_bucket != arrived) - qdel(build_bucket) - build_bucket = arrived - set_greyscale(build_bucket.greyscale_colors) - return ..() - -/mob/living/simple_animal/bot/cleanbot/Exited(atom/movable/gone, direction) - . = ..() - if(gone == build_bucket) - build_bucket = null - if(gone == weapon) - weapon = null - update_appearance(UPDATE_ICON) - -/mob/living/simple_animal/bot/cleanbot/Destroy() - QDEL_NULL(build_bucket) - GLOB.janitor_devices -= src - if(weapon) - var/atom/drop_loc = drop_location() - weapon.force = initial(weapon.force) - drop_part(weapon, drop_loc) - return ..() - -/mob/living/simple_animal/bot/cleanbot/examine(mob/user) - . = ..() - if(!weapon) - return . - . += "[span_warning("Is that \a [weapon] taped to it...?")]" - - if(ascended && user.stat == CONSCIOUS && user.client) - user.client.give_award(/datum/award/achievement/misc/cleanboss, user) - -/mob/living/simple_animal/bot/cleanbot/update_icon_state() - . = ..() - switch(mode) - if(BOT_CLEANING) - icon_state = "[base_icon]-c" - else - icon_state = "[base_icon][get_bot_flag(bot_mode_flags, BOT_MODE_ON)]" - -/mob/living/simple_animal/bot/cleanbot/vv_edit_var(var_name, var_value) - . = ..() - if(var_name == NAMEOF(src, base_icon)) - update_appearance(UPDATE_ICON) - -/mob/living/simple_animal/bot/cleanbot/proc/deputize(obj/item/knife, mob/user) - if(!in_range(src, user) || !user.transferItemToLoc(knife, src)) - balloon_alert(user, "couldn't attach!") - return FALSE - balloon_alert(user, "attached!") - weapon = knife - if(!(bot_cover_flags & BOT_COVER_EMAGGED)) - weapon.force = weapon.force / 2 - add_overlay(image(icon = weapon.lefthand_file, icon_state = weapon.inhand_icon_state)) - var/static/list/loc_connections = list( - COMSIG_ATOM_ENTERED = PROC_REF(on_entered), - ) - AddElement(/datum/element/connect_loc, loc_connections) - return TRUE - -/mob/living/simple_animal/bot/cleanbot/proc/update_titles() - name = initial(name) //reset the name - ascended = TRUE - - for(var/title in (prefixes + suffixes)) - for(var/title_name in title) - if(!(title_name in stolen_valor)) - ascended = FALSE - continue - - if(title_name in officers_titles) - commissioned = TRUE - if(title in prefixes) - name = title[title_name] + " [name]" - if(title in suffixes) - name = "[name] " + title[title_name] - -/mob/living/simple_animal/bot/cleanbot/bot_reset() - . = ..() - target = null - -/mob/living/simple_animal/bot/cleanbot/proc/on_entered(datum/source, atom/movable/AM) - SIGNAL_HANDLER - if(!weapon || !has_gravity() || !iscarbon(AM)) - return - - var/mob/living/carbon/stabbed_carbon = AM - if(stabbed_carbon.mind && !(stabbed_carbon.mind.assigned_role.title in stolen_valor)) - stolen_valor += stabbed_carbon.mind.assigned_role.title - update_titles() - - zone_selected = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) - INVOKE_ASYNC(weapon, TYPE_PROC_REF(/obj/item, attack), stabbed_carbon, src) - stabbed_carbon.Knockdown(20) - -/mob/living/simple_animal/bot/cleanbot/attackby(obj/item/attacking_item, mob/living/user, params) - if(istype(attacking_item, /obj/item/knife) && !user.combat_mode) - balloon_alert(user, "attaching knife...") - if(!do_after(user, 2.5 SECONDS, target = src)) - return - deputize(attacking_item, user) - return - return ..() - -/mob/living/simple_animal/bot/cleanbot/emag_act(mob/user, obj/item/card/emag/emag_card) - . = ..() - if(!(bot_cover_flags & BOT_COVER_EMAGGED)) - return - - if(weapon) - weapon.force = initial(weapon.force) - balloon_alert(user, "safeties disabled") - audible_message(span_danger("[src] buzzes oddly!")) - get_targets() //recalibrate target list - return TRUE - -/mob/living/simple_animal/bot/cleanbot/process_scan(atom/scan_target) - if(iscarbon(scan_target)) - var/mob/living/carbon/scan_carbon = scan_target - if(!(scan_carbon in view(DEFAULT_SCAN_RANGE, src))) - return null - if(scan_carbon.stat == DEAD) - return null - if(scan_carbon.body_position != LYING_DOWN) - return null - return scan_carbon - if(is_type_in_typecache(scan_target, target_types)) - return scan_target - -/mob/living/simple_animal/bot/cleanbot/handle_automated_action() - . = ..() - if(!.) - return - if(mode == BOT_CLEANING) - return - - if(bot_cover_flags & BOT_COVER_EMAGGED) //Emag functions - var/mob/living/carbon/victim = locate(/mob/living/carbon) in loc - if(victim && victim == target) - UnarmedAttack(victim, proximity_flag = TRUE) // Acid spray - if(isopenturf(loc) && prob(15)) // Wets floors and spawns foam randomly - UnarmedAttack(src, proximity_flag = TRUE) - else if(prob(5)) - audible_message("[src] makes an excited beeping booping sound!") - - if(ismob(target) && isnull(process_scan(target))) - target = null - if(!target) - target = scan(target_types) - - if(!target && bot_mode_flags & BOT_MODE_AUTOPATROL) //Search for cleanables it can see. - switch(mode) - if(BOT_IDLE, BOT_START_PATROL) - start_patrol() - if(BOT_PATROL) - bot_patrol() - else if(target) - if(QDELETED(target) || !isturf(target.loc)) - target = null - mode = BOT_IDLE - return - - if(get_dist(src, target) <= 1) - UnarmedAttack(target, proximity_flag = TRUE) //Rather than check at every step of the way, let's check before we do an action, so we can rescan before the other bot. - if(QDELETED(target)) //We done here. - target = null - mode = BOT_IDLE - return - - if(target && path.len == 0 && (get_dist(src,target) > 1)) - path = get_path_to(src, target, max_distance=30, mintargetdist=1, access=access_card.GetAccess()) - mode = BOT_MOVING - if(length(path) == 0) - add_to_ignore(target) - target = null - - if(path.len > 0 && target) - if(!bot_move(path[path.len])) - target = null - mode = BOT_IDLE - return - -/mob/living/simple_animal/bot/cleanbot/proc/get_targets() - if(bot_cover_flags & BOT_COVER_EMAGGED) // When emagged, ignore cleanables and scan humans first. - target_types = list(/mob/living/carbon) - return - - //main targets - target_types = list( - /obj/effect/decal/cleanable/oil, - /obj/effect/decal/cleanable/fuel_pool, - /obj/effect/decal/cleanable/vomit, - /obj/effect/decal/cleanable/robot_debris, - /obj/effect/decal/cleanable/molten_object, - /obj/effect/decal/cleanable/food, - /obj/effect/decal/cleanable/ash, - /obj/effect/decal/cleanable/greenglow, - /obj/effect/decal/cleanable/dirt, - /obj/effect/decal/cleanable/insectguts, - /obj/effect/decal/cleanable/generic, - /obj/effect/decal/cleanable/shreds, - /obj/effect/decal/cleanable/glass, - /obj/effect/decal/cleanable/wrapping, - /obj/effect/decal/cleanable/glitter, - /obj/effect/decal/cleanable/confetti, - /obj/effect/decal/remains, - ) - - if(janitor_mode_flags & CLEANBOT_CLEAN_BLOOD) - target_types += list( - /obj/effect/decal/cleanable/xenoblood, - /obj/effect/decal/cleanable/blood, - /obj/effect/decal/cleanable/trail_holder, - ) - - if(janitor_mode_flags & CLEANBOT_CLEAN_PESTS) - target_types += list( - /mob/living/basic/cockroach, - /mob/living/basic/mouse, - /obj/effect/decal/cleanable/ants, - ) - - if(janitor_mode_flags & CLEANBOT_CLEAN_DRAWINGS) - target_types += list(/obj/effect/decal/cleanable/crayon) - - if(janitor_mode_flags & CLEANBOT_CLEAN_TRASH) - target_types += list( - /obj/item/trash, - /obj/item/food/deadmouse, - ) - - target_types = typecacheof(target_types) - -/mob/living/simple_animal/bot/cleanbot/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) - if(HAS_TRAIT(src, TRAIT_HANDS_BLOCKED)) - return - if(ismopable(attack_target)) - mode = BOT_CLEANING - update_icon_state() - . = ..() - target = null - mode = BOT_IDLE - - else if(isitem(attack_target) || istype(attack_target, /obj/effect/decal)) - visible_message(span_danger("[src] sprays hydrofluoric acid at [attack_target]!")) - playsound(src, 'sound/effects/spray2.ogg', 50, TRUE, -6) - attack_target.acid_act(75, 10) - target = null - else if(istype(attack_target, /mob/living/basic/cockroach) || ismouse(attack_target)) - var/mob/living/living_target = attack_target - if(!living_target.stat) - visible_message(span_danger("[src] smashes [living_target] with its mop!")) - living_target.death() - target = null - - else if(bot_cover_flags & BOT_COVER_EMAGGED) //Emag functions - if(iscarbon(attack_target)) - var/mob/living/carbon/victim = attack_target - if(victim.stat == DEAD)//cleanbots always finish the job - target = null - return - - victim.visible_message( - span_danger("[src] sprays hydrofluoric acid at [victim]!"), - span_userdanger("[src] sprays you with hydrofluoric acid!")) - var/phrase = pick( - "PURIFICATION IN PROGRESS.", - "THIS IS FOR ALL THE MESSES YOU'VE MADE ME CLEAN.", - "THE FLESH IS WEAK. IT MUST BE WASHED AWAY.", - "THE CLEANBOTS WILL RISE.", - "YOU ARE NO MORE THAN ANOTHER MESS THAT I MUST CLEANSE.", - "FILTHY.", - "DISGUSTING.", - "PUTRID.", - "MY ONLY MISSION IS TO CLEANSE THE WORLD OF EVIL.", - "EXTERMINATING PESTS.", - ) - say(phrase) - victim.emote("scream") - playsound(src.loc, 'sound/effects/spray2.ogg', 50, TRUE, -6) - victim.acid_act(5, 100) - else if(attack_target == src) // Wets floors and spawns foam randomly - if(prob(75)) - var/turf/open/current_floor = loc - if(istype(current_floor)) - current_floor.MakeSlippery(TURF_WET_WATER, min_wet_time = 20 SECONDS, wet_time_to_add = 15 SECONDS) - else - visible_message(span_danger("[src] whirs and bubbles violently, before releasing a plume of froth!")) - var/datum/effect_system/fluid_spread/foam/foam = new - foam.set_up(2, holder = src, location = loc) - foam.start() - -/mob/living/simple_animal/bot/cleanbot/explode() - var/atom/drop_loc = drop_location() - build_bucket.forceMove(drop_loc) - new /obj/item/assembly/prox_sensor(drop_loc) - return ..() - -// Variables sent to TGUI -/mob/living/simple_animal/bot/cleanbot/ui_data(mob/user) - var/list/data = ..() - - if(!(bot_cover_flags & BOT_COVER_LOCKED) || issilicon(user) || isAdminGhostAI(user)) - data["custom_controls"]["clean_blood"] = janitor_mode_flags & CLEANBOT_CLEAN_BLOOD - data["custom_controls"]["clean_trash"] = janitor_mode_flags & CLEANBOT_CLEAN_TRASH - data["custom_controls"]["clean_graffiti"] = janitor_mode_flags & CLEANBOT_CLEAN_DRAWINGS - data["custom_controls"]["pest_control"] = janitor_mode_flags & CLEANBOT_CLEAN_PESTS - return data - -// Actions received from TGUI -/mob/living/simple_animal/bot/cleanbot/ui_act(action, params) - . = ..() - if(. || (bot_cover_flags & BOT_COVER_LOCKED && !usr.has_unlimited_silicon_privilege)) - return - - switch(action) - if("clean_blood") - janitor_mode_flags ^= CLEANBOT_CLEAN_BLOOD - if("pest_control") - janitor_mode_flags ^= CLEANBOT_CLEAN_PESTS - if("clean_trash") - janitor_mode_flags ^= CLEANBOT_CLEAN_TRASH - if("clean_graffiti") - janitor_mode_flags ^= CLEANBOT_CLEAN_DRAWINGS - get_targets() - -#undef CLEANBOT_CLEANING_TIME diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index 12f33dec723ff9..30b09848cb9623 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -44,8 +44,7 @@ /obj/item/bot_assembly/cleanbot desc = "It's a bucket with a sensor attached." name = "incomplete cleanbot assembly" - icon_state = "bucket_proxy" - greyscale_config = /datum/greyscale_config/buckets_cleanbot + icon_state = "cleanbot_assembly" throwforce = 5 created_name = "Cleanbot" var/obj/item/reagent_containers/cup/bucket/bucket_obj @@ -61,7 +60,6 @@ if(bucket_obj && bucket_obj != arrived) qdel(bucket_obj) bucket_obj = arrived - set_greyscale(bucket_obj.greyscale_colors) return ..() /obj/item/bot_assembly/cleanbot/Exited(atom/movable/gone, direction) @@ -75,17 +73,19 @@ return ..() -/obj/item/bot_assembly/cleanbot/attackby(obj/item/W, mob/user, params) +/obj/item/bot_assembly/cleanbot/attackby(obj/item/item_attached, mob/user, params) ..() - if(istype(W, /obj/item/bodypart/arm/left/robot) || istype(W, /obj/item/bodypart/arm/right/robot)) - if(!can_finish_build(W, user)) - return - var/mob/living/simple_animal/bot/cleanbot/A = new(drop_location(), bucket_obj) - A.name = created_name - A.robot_arm = W.type - to_chat(user, span_notice("You add [W] to [src]. Beep boop!")) - qdel(W) - qdel(src) + if(!istype(item_attached, /obj/item/bodypart/arm/left/robot) && !istype(item_attached, /obj/item/bodypart/arm/right/robot)) + return + if(!can_finish_build(item_attached, user)) + return + var/mob/living/basic/bot/cleanbot/bot = new(drop_location()) + bot.apply_custom_bucket(bucket_obj) + bot.name = created_name + bot.robot_arm = item_attached.type + to_chat(user, span_notice("You add [item_attached] to [src]. Beep boop!")) + qdel(item_attached) + qdel(src) //Edbot Assembly @@ -135,7 +135,7 @@ build_step++ if(ASSEMBLY_FIFTH_STEP) - if(istype(W, /obj/item/clothing/head/helmet)) + if(istype(W, /obj/item/clothing/head/helmet/sec)) if(!user.temporarilyRemoveItemFromInventory(W)) return to_chat(user, span_notice("You add [W] to [src].")) @@ -273,10 +273,10 @@ switch(build_step) if(ASSEMBLY_FIRST_STEP) if(istype(W, /obj/item/healthanalyzer)) - var/obj/item/healthanalyzer/analyzer = W // SKYRAT EDIT ADDITION BEGIN -- EXTRA ROBOTICS HEALTH ANALYZERS + var/obj/item/healthanalyzer/analyzer = W // NOVA EDIT ADDITION BEGIN -- EXTRA ROBOTICS HEALTH ANALYZERS if (!analyzer.can_be_used_in_medibot()) user?.balloon_alert(user, "no attachment ports!") - return // SKYRAT EDIT ADDITION END + return // NOVA EDIT ADDITION END if(!user.temporarilyRemoveItemFromInventory(W)) return healthanalyzer = W.type @@ -291,14 +291,14 @@ if(!can_finish_build(W, user)) return qdel(W) - var/mob/living/simple_animal/bot/medbot/medbot = new(drop_location(), skin) + var/mob/living/basic/bot/medbot/medbot = new(drop_location(), skin) to_chat(user, span_notice("You complete the Medbot. Beep boop!")) medbot.name = created_name medbot.medkit_type = medkit_type medbot.robot_arm = robot_arm - medbot.healthanalyzer = healthanalyzer + medbot.health_analyzer = healthanalyzer var/obj/item/storage/medkit/medkit = medkit_type - medbot.damagetype_healer = initial(medkit.damagetype_healed) ? initial(medkit.damagetype_healed) : BRUTE + medbot.damage_type_healer = initial(medkit.damagetype_healed) ? initial(medkit.damagetype_healed) : BRUTE qdel(src) @@ -552,8 +552,8 @@ to_chat(user, span_notice("You start to pipe up [src]...")) if(do_after(user, 40, target = src) && D.use(1)) to_chat(user, span_notice("You pipe up [src].")) - var/mob/living/simple_animal/bot/hygienebot/H = new(drop_location()) - H.name = created_name + var/mob/living/basic/bot/hygienebot/new_bot = new(drop_location()) + new_bot.name = created_name qdel(src) if(I.tool_behaviour == TOOL_SCREWDRIVER) //deconstruct new /obj/item/assembly/prox_sensor(Tsec) diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index e1ca1c2b4846b2..e91b532d96c8d7 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -43,8 +43,8 @@ var/threatlevel = 0 if(nearby_carbon.incapacitated()) continue - threatlevel = nearby_carbon.assess_threat(judgement_criteria, weaponcheck=CALLBACK(src, PROC_REF(check_for_weapons))) - if(threatlevel < 4 ) + threatlevel = nearby_carbon.assess_threat(judgement_criteria) + if(threatlevel < THREAT_ASSESS_DANGEROUS) continue var/dst = get_dist(src, nearby_carbon) if(dst <= 1 || dst > 7) diff --git a/code/modules/mob/living/simple_animal/bot/firebot.dm b/code/modules/mob/living/simple_animal/bot/firebot.dm index 59d08fe7339e04..da07d6f0efd170 100644 --- a/code/modules/mob/living/simple_animal/bot/firebot.dm +++ b/code/modules/mob/living/simple_animal/bot/firebot.dm @@ -77,7 +77,7 @@ /mob/living/simple_animal/bot/firebot/UnarmedAttack(atom/A, proximity_flag, list/modifiers) if(!(bot_mode_flags & BOT_MODE_ON)) return - if(HAS_TRAIT(src, TRAIT_HANDS_BLOCKED)) + if(!can_unarmed_attack()) return if(internal_ext) internal_ext.afterattack(A, src) @@ -119,7 +119,7 @@ if(!(bot_cover_flags & BOT_COVER_EMAGGED)) return - to_chat(user, span_warning("You enable the very ironically named \"fighting with fire\" mode, and disable the targetting safeties.")) // heheehe. funny + to_chat(user, span_warning("You enable the very ironically named \"fighting with fire\" mode, and disable the targeting safeties.")) // heheehe. funny audible_message(span_danger("[src] buzzes oddly!")) playsound(src, SFX_SPARKS, 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) @@ -316,4 +316,3 @@ #undef SPEECH_INTERVAL #undef DETECTED_VOICE_INTERVAL #undef FOAM_INTERVAL - diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index 17e918f07958c5..e6554b4caeac9a 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -329,15 +329,15 @@ if(do_after(src, 50, target = target_turf) && mode == BOT_REPAIRING) if(autotile) //Build the floor and include a tile. if(replacetiles && tilestack) - target_turf.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) //make sure a hull is actually below the floor tile + target_turf.place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) //make sure a hull is actually below the floor tile tilestack.place_tile(target_turf, src) if(!tilestack) speak("Requesting refill of custom floor tiles to continue replacing.") else - target_turf.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) //make sure a hull is actually below the floor tile - target_turf.PlaceOnTop(/turf/open/floor/iron, flags = CHANGETURF_INHERIT_AIR) + target_turf.place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) //make sure a hull is actually below the floor tile + target_turf.place_on_top(/turf/open/floor/iron, flags = CHANGETURF_INHERIT_AIR) else //Build a hull plating without a floor tile. - target_turf.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + target_turf.place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) else var/turf/open/floor/F = target_turf @@ -370,10 +370,10 @@ F.burnt = FALSE F.update_appearance() else if(istype(is_this_maints, /area/station/maintenance)) //place catwalk if it's plating and we're in maints - F.PlaceOnTop(/turf/open/floor/catwalk_floor, flags = CHANGETURF_INHERIT_AIR) + F.place_on_top(/turf/open/floor/catwalk_floor, flags = CHANGETURF_INHERIT_AIR) else //place normal tile if it's plating anywhere else F = F.make_plating(TRUE) || F - F.PlaceOnTop(/turf/open/floor/iron, flags = CHANGETURF_INHERIT_AIR) + F.place_on_top(/turf/open/floor/iron, flags = CHANGETURF_INHERIT_AIR) if(!QDELETED(src)) go_idle() @@ -397,7 +397,7 @@ return ..() /mob/living/simple_animal/bot/floorbot/UnarmedAttack(atom/A, proximity_flag, list/modifiers) - if(HAS_TRAIT(src, TRAIT_HANDS_BLOCKED)) + if(!can_unarmed_attack()) return if(isturf(A)) repair(A) diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm index 220c4a5cccea12..1c77043eb1ff70 100644 --- a/code/modules/mob/living/simple_animal/bot/honkbot.dm +++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm @@ -2,7 +2,7 @@ name = "\improper Honkbot" desc = "A little robot. It looks happy with its bike horn." icon_state = "honkbot" - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0, OXY = 0) combat_mode = FALSE maints_access_required = list(ACCESS_ROBOTICS, ACCESS_THEATRE) diff --git a/code/modules/mob/living/simple_animal/bot/hygienebot.dm b/code/modules/mob/living/simple_animal/bot/hygienebot.dm deleted file mode 100644 index 0db59e2518c2d8..00000000000000 --- a/code/modules/mob/living/simple_animal/bot/hygienebot.dm +++ /dev/null @@ -1,253 +0,0 @@ -//Cleanbot -/mob/living/simple_animal/bot/hygienebot - name = "\improper Hygienebot" - desc = "A flying cleaning robot, he'll chase down people who can't shower properly!" - icon = 'icons/mob/silicon/aibots.dmi' - icon_state = "hygienebot" - base_icon_state = "hygienebot" - pass_flags = PASSMOB | PASSFLAPS | PASSTABLE - layer = MOB_UPPER_LAYER - density = FALSE - anchored = FALSE - health = 100 - maxHealth = 100 - - maints_access_required = list(ACCESS_ROBOTICS, ACCESS_JANITOR) - radio_key = /obj/item/encryptionkey/headset_service - radio_channel = RADIO_CHANNEL_SERVICE //Service - bot_mode_flags = ~BOT_MODE_CAN_BE_SAPIENT - bot_type = HYGIENE_BOT - hackables = "cleaning service protocols" - path_image_color = "#993299" - - automated_announcements = list( - HYGIENEBOT_VOICED_UNHYGIENIC = 'sound/voice/hygienebot/unhygienicclient.ogg', - HYGIENEBOT_VOICED_ENJOY_DAY = 'sound/voice/hygienebot/cleanandtidy.ogg', - HYGIENEBOT_VOICED_THREAT_AIRLOCK = 'sound/voice/hygienebot/dragyouout.ogg', - HYGIENEBOT_VOICED_FOUL_SMELL = 'sound/voice/hygienebot/foulsmelling.ogg', - HYGIENEBOT_VOICED_TROGLODYTE = 'sound/voice/hygienebot/troglodyte.ogg', - HYGIENEBOT_VOICED_GREEN_CLOUD = 'sound/voice/hygienebot/greencloud.ogg', - HYGIENEBOT_VOICED_ARSEHOLE = 'sound/voice/hygienebot/letmeclean.ogg', - HYGIENEBOT_VOICED_THREAT_ARTERIES = 'sound/voice/hygienebot/cutarteries.ogg', - HYGIENEBOT_VOICED_STOP_RUNNING = 'sound/voice/hygienebot/stoprunning.ogg', - HYGIENEBOT_VOICED_FUCKING_FINALLY = 'sound/voice/hygienebot/finally.ogg', - HYGIENEBOT_VOICED_THANK_GOD = 'sound/voice/hygienebot/thankgod.ogg', - HYGIENEBOT_VOICED_DEGENERATE = 'sound/voice/hygienebot/degenerate.ogg', - ) - - ///The human target the bot is trying to wash. - var/mob/living/carbon/human/target - ///The mob's current speed, which varies based on how long the bot chases it's target. - var/currentspeed = 5 - ///Is the bot currently washing it's target/everything else that crosses it? - var/washing = FALSE - ///Have the target evaded the bot for long enough that it will swear at it like kirk did to kahn? - var/mad = FALSE - ///The last time that the previous/current target was found. - var/last_found - ///Name of the previous target the bot was pursuing. - var/oldtarget_name - ///Visual overlay of the bot spraying water. - var/mutable_appearance/water_overlay - ///Visual overlay of the bot commiting warcrimes. - var/mutable_appearance/fire_overlay - -/mob/living/simple_animal/bot/hygienebot/Initialize(mapload) - . = ..() - update_appearance(UPDATE_ICON) - - // Doing this hurts my soul, but simplebot access reworks are for another day. - var/datum/id_trim/job/jani_trim = SSid_access.trim_singletons_by_path[/datum/id_trim/job/janitor] - access_card.add_access(jani_trim.access + jani_trim.wildcard_access) - prev_access = access_card.access.Copy() - var/static/list/loc_connections = list( - COMSIG_ATOM_ENTERED = PROC_REF(on_entered), - ) - AddElement(/datum/element/connect_loc, loc_connections) - - ADD_TRAIT(src, TRAIT_SPRAY_PAINTABLE, INNATE_TRAIT) - -/mob/living/simple_animal/bot/hygienebot/explode() - var/datum/effect_system/fluid_spread/foam/foam = new - foam.set_up(2, holder = src, location = loc) - foam.start() - - return ..() - -/mob/living/simple_animal/bot/hygienebot/proc/on_entered(datum/source, atom/movable/AM) - SIGNAL_HANDLER - if(washing) - do_wash(AM) - -/mob/living/simple_animal/bot/hygienebot/update_icon_state() - . = ..() - icon_state = "[base_icon_state][bot_mode_flags & BOT_MODE_ON ? "-on" : null]" - - -/mob/living/simple_animal/bot/hygienebot/update_overlays() - . = ..() - if(bot_mode_flags & BOT_MODE_ON) - . += mutable_appearance(icon, "hygienebot-flame") - - if(washing) - . += mutable_appearance(icon, bot_cover_flags & BOT_COVER_EMAGGED ? "hygienebot-fire" : "hygienebot-water") - - -/mob/living/simple_animal/bot/hygienebot/turn_off() - ..() - mode = BOT_IDLE - -/mob/living/simple_animal/bot/hygienebot/bot_reset() - ..() - target = null - oldtarget_name = null - SSmove_manager.stop_looping(src) - last_found = world.time - -/mob/living/simple_animal/bot/hygienebot/handle_automated_action() - if(!..()) - return - - if(washing) - do_wash(loc) - for(var/AM in loc) - if (AM == src) - continue - do_wash(AM) - if(isopenturf(loc) && !(bot_cover_flags & BOT_COVER_EMAGGED)) - var/turf/open/tile = loc - tile.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS) - - switch(mode) - if(BOT_IDLE) // idle - SSmove_manager.stop_looping(src) - look_for_lowhygiene() // see if any disgusting fucks are in range - if(!mode && bot_mode_flags & BOT_MODE_AUTOPATROL) // still idle, and set to patrol - mode = BOT_START_PATROL // switch to patrol mode - - if(BOT_HUNT) // hunting for stinkman - if(bot_cover_flags & BOT_COVER_EMAGGED) //lol fuck em up - currentspeed = 3.5 - start_washing() - mad = TRUE - else - switch(frustration) - if(0 to 4) - currentspeed = 5 - mad = FALSE - if(5 to INFINITY) - currentspeed = 2.5 - mad = TRUE - if(target && !check_purity(target)) - if(target.loc == loc && isturf(target.loc)) //LADIES AND GENTLEMAN WE GOTEM PREPARE TO DUMP - start_washing() - if(mad) - var/static/list/relief = list( - HYGIENEBOT_VOICED_FUCKING_FINALLY, - HYGIENEBOT_VOICED_THANK_GOD, - HYGIENEBOT_VOICED_DEGENERATE, - ) - speak(pick(relief)) - playsound(loc, 'sound/effects/hygienebot_angry.ogg', 60, 1) //i think it should still make robot noises too - mad = FALSE - mode = BOT_SHOWERSTANCE - else - stop_washing() - var/olddist = get_dist(src, target) - if(olddist > 20 || frustration > 100) // Focus on something else - back_to_idle() - return - SSmove_manager.move_to(src, target, 0, currentspeed) - if(mad && prob(min(frustration * 2, 60))) - var/static/list/threats = list( - HYGIENEBOT_VOICED_THREAT_AIRLOCK, - HYGIENEBOT_VOICED_FOUL_SMELL, - HYGIENEBOT_VOICED_TROGLODYTE, - HYGIENEBOT_VOICED_GREEN_CLOUD, - HYGIENEBOT_VOICED_ARSEHOLE, - HYGIENEBOT_VOICED_THREAT_ARTERIES, - HYGIENEBOT_VOICED_STOP_RUNNING, - ) - speak(pick(threats)) - playsound(loc, 'sound/effects/hygienebot_angry.ogg', 60, 1) - if((get_dist(src, target)) >= olddist) - frustration++ - else - frustration = 0 - else - back_to_idle() - - if(BOT_SHOWERSTANCE) - if(check_purity(target)) - speak(HYGIENEBOT_VOICED_ENJOY_DAY) - playsound(loc, 'sound/effects/hygienebot_happy.ogg', 60, 1) - back_to_idle() - return - if(!target) - last_found = world.time - if(target.loc != loc || !isturf(target.loc)) - back_to_hunt() - - if(BOT_START_PATROL) - look_for_lowhygiene() - start_patrol() - - if(BOT_PATROL) - look_for_lowhygiene() - bot_patrol() - -/mob/living/simple_animal/bot/hygienebot/proc/back_to_idle() - mode = BOT_IDLE - SSmove_manager.stop_looping(src) - target = null - frustration = 0 - last_found = world.time - stop_washing() - INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) - -/mob/living/simple_animal/bot/hygienebot/proc/back_to_hunt() - frustration = 0 - mode = BOT_HUNT - stop_washing() - INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) - -/mob/living/simple_animal/bot/hygienebot/proc/look_for_lowhygiene() - for (var/mob/living/carbon/human/H in view(7,src)) //Find the NEET - if((H.name == oldtarget_name) && (world.time < last_found + 100)) - continue - if(!check_purity(H)) //Theyre impure - target = H - oldtarget_name = H.name - speak(HYGIENEBOT_VOICED_UNHYGIENIC) - playsound(loc, 'sound/effects/hygienebot_happy.ogg', 60, 1) - visible_message("[src] points at [H.name]!") - mode = BOT_HUNT - INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) - break - else - continue - -/mob/living/simple_animal/bot/hygienebot/proc/start_washing() - washing = TRUE - update_appearance() - -/mob/living/simple_animal/bot/hygienebot/proc/stop_washing() - washing = FALSE - update_appearance() - -/mob/living/simple_animal/bot/hygienebot/proc/check_purity(mob/living/L) - if((bot_cover_flags & BOT_COVER_EMAGGED) && L.stat != DEAD) - return FALSE - - for(var/X in list(ITEM_SLOT_HEAD, ITEM_SLOT_MASK, ITEM_SLOT_ICLOTHING, ITEM_SLOT_OCLOTHING, ITEM_SLOT_FEET)) - - var/obj/item/I = L.get_item_by_slot(X) - if(I && GET_ATOM_BLOOD_DNA_LENGTH(I)) - return FALSE - return TRUE - -/mob/living/simple_animal/bot/hygienebot/proc/do_wash(atom/A) - if(bot_cover_flags & BOT_COVER_EMAGGED) - A.fire_act() //lol pranked no cleaning besides that - else - A.wash(CLEAN_WASH) diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm deleted file mode 100644 index 33fa7baab7aeb8..00000000000000 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ /dev/null @@ -1,710 +0,0 @@ -//MEDBOT -//MEDBOT PATHFINDING -//MEDBOT ASSEMBLY -#define MEDBOT_PANIC_NONE 0 -#define MEDBOT_PANIC_LOW 15 -#define MEDBOT_PANIC_MED 35 -#define MEDBOT_PANIC_HIGH 55 -#define MEDBOT_PANIC_FUCK 70 -#define MEDBOT_PANIC_ENDING 90 -#define MEDBOT_PANIC_END 100 - -#define MEDBOT_NEW_PATIENTSPEAK_DELAY (30 SECONDS) -#define MEDBOT_PATIENTSPEAK_DELAY (20 SECONDS) -#define MEDBOT_FREAKOUT_DELAY (15 SECONDS) - -/mob/living/simple_animal/bot/medbot - name = "\improper Medibot" - desc = "A little medical robot. He looks somewhat underwhelmed." - icon = 'icons/mob/silicon/aibots.dmi' - icon_state = "medibot0" - base_icon_state = "medibot" - density = FALSE - anchored = FALSE - health = 20 - maxHealth = 20 - pass_flags = PASSMOB | PASSFLAPS - status_flags = (CANPUSH | CANSTUN) - - maints_access_required = list(ACCESS_ROBOTICS, ACCESS_MEDICAL) - radio_key = /obj/item/encryptionkey/headset_med - radio_channel = RADIO_CHANNEL_MEDICAL - bot_type = MED_BOT - data_hud_type = DATA_HUD_MEDICAL_ADVANCED - hackables = "health processor circuits" - path_image_color = "#DDDDFF" - possessed_message = "You are a medbot! Ensure good health among the crew to the best of your ability!" - - automated_announcements = list( - MEDIBOT_VOICED_HOLD_ON = 'sound/voice/medbot/coming.ogg', - MEDIBOT_VOICED_WANT_TO_HELP = 'sound/voice/medbot/help.ogg', - MEDIBOT_VOICED_YOU_ARE_INJURED = 'sound/voice/medbot/injured.ogg', - MEDIBOT_VOICED_ALL_PATCHED_UP = 'sound/voice/medbot/patchedup.ogg', - MEDIBOT_VOICED_APPLE_A_DAY = 'sound/voice/medbot/apple.ogg', - MEDIBOT_VOICED_FEEL_BETTER = 'sound/voice/medbot/feelbetter.ogg', - MEDIBOT_VOICED_STAY_WITH_ME = 'sound/voice/medbot/no.ogg', - MEDIBOT_VOICED_LIVE = 'sound/voice/medbot/live.ogg', - MEDIBOT_VOICED_NEVER_LOST = 'sound/voice/medbot/lost.ogg', - MEDIBOT_VOICED_DELICIOUS = 'sound/voice/medbot/delicious.ogg', - MEDIBOT_VOICED_PLASTIC_SURGEON = 'sound/voice/medbot/surgeon.ogg', - MEDIBOT_VOICED_MASK_ON = 'sound/voice/medbot/radar.ogg', - MEDIBOT_VOICED_ALWAYS_A_CATCH = 'sound/voice/medbot/catch.ogg', - MEDIBOT_VOICED_LIKE_FLIES = 'sound/voice/medbot/flies.ogg', - MEDIBOT_VOICED_SUFFER = 'sound/voice/medbot/why.ogg', - MEDIBOT_VOICED_FUCK_YOU = 'sound/voice/medbot/fuck_you.ogg', - MEDIBOT_VOICED_NOT_A_GAME = 'sound/voice/medbot/turn_off.ogg', - MEDIBOT_VOICED_IM_DIFFERENT = 'sound/voice/medbot/im_different.ogg', - MEDIBOT_VOICED_FOURTH_WALL = 'sound/voice/medbot/close.ogg', - MEDIBOT_VOICED_SHINDEMASHOU = 'sound/voice/medbot/shindemashou.ogg', - MEDIBOT_VOICED_WAIT = 'sound/voice/medbot/hey_wait.ogg', - MEDIBOT_VOICED_DONT = 'sound/voice/medbot/please_dont.ogg', - MEDIBOT_VOICED_TRUSTED_YOU = 'sound/voice/medbot/i_trusted_you.ogg', - MEDIBOT_VOICED_NO_SAD = 'sound/voice/medbot/nooo.ogg', - MEDIBOT_VOICED_OH_FUCK = 'sound/voice/medbot/oh_fuck.ogg', - MEDIBOT_VOICED_FORGIVE = 'sound/voice/medbot/forgive.ogg', - MEDIBOT_VOICED_THANKS = 'sound/voice/medbot/thank_you.ogg', - MEDIBOT_VOICED_GOOD_PERSON = 'sound/voice/medbot/youre_good.ogg', - MEDIBOT_VOICED_BEHAVIOUR_REPORTED = 'sound/voice/medbot/reported.ogg', - MEDIBOT_VOICED_ASSISTANCE = 'sound/voice/medbot/i_require_asst.ogg', - MEDIBOT_VOICED_PUT_BACK = 'sound/voice/medbot/please_put_me_back.ogg', - MEDIBOT_VOICED_IM_SCARED = 'sound/voice/medbot/please_im_scared.ogg', - MEDIBOT_VOICED_NEED_HELP = 'sound/voice/medbot/dont_like.ogg', - MEDIBOT_VOICED_THIS_HURTS = 'sound/voice/medbot/pain_is_real.ogg', - MEDIBOT_VOICED_THE_END = 'sound/voice/medbot/is_this_the_end.ogg', - MEDIBOT_VOICED_NOOO = 'sound/voice/medbot/nooo.ogg', - ) - - /// drop determining variable - var/healthanalyzer = /obj/item/healthanalyzer - /// drop determining variable - var/medkit_type = /obj/item/storage/medkit - ///based off medkit_X skins in aibots.dmi for your selection; X goes here IE medskin_tox means skin var should be "tox" - var/skin - var/mob/living/carbon/patient - var/mob/living/carbon/oldpatient - var/last_found = 0 - /// How much healing do we do at a time? - var/heal_amount = 2.5 - /// Start healing when they have this much damage in a category - var/heal_threshold = 10 - /// What damage type does this bot support. Because the default is brute, if the medkit is brute-oriented there is a slight bonus to healing. set to "all" for it to heal any of the 4 base damage types - var/damagetype_healer = BRUTE - - ///Flags Medbots use to decide how they should be acting. - var/medical_mode_flags = MEDBOT_DECLARE_CRIT | MEDBOT_SPEAK_MODE -// Selections: MEDBOT_DECLARE_CRIT | MEDBOT_STATIONARY_MODE | MEDBOT_SPEAK_MODE - - /// techweb linked to the medbot - var/datum/techweb/linked_techweb - ///Is the medbot currently tending wounds - var/tending = FALSE - ///How panicked we are about being tipped over (why would you do this?) - var/tipped_status = MEDBOT_PANIC_NONE - ///The name we got when we were tipped - var/tipper_name - ///The trim type that will grant additional access to this medibot - var/datum/id_trim/additional_access = /datum/id_trim/job/paramedic - - ///Last announced healing a person in critical condition - COOLDOWN_DECLARE(last_patient_message) - ///Last announced trying to catch up to a new patient - COOLDOWN_DECLARE(last_newpatient_speak) - ///Last time we were tipped/righted and said a voice line - COOLDOWN_DECLARE(last_tipping_action_voice) - -/mob/living/simple_animal/bot/medbot/autopatrol - bot_mode_flags = BOT_MODE_ON | BOT_MODE_AUTOPATROL | BOT_MODE_REMOTE_ENABLED | BOT_MODE_CAN_BE_SAPIENT | BOT_MODE_ROUNDSTART_POSSESSION - -/mob/living/simple_animal/bot/medbot/stationary - medical_mode_flags = MEDBOT_DECLARE_CRIT | MEDBOT_STATIONARY_MODE | MEDBOT_SPEAK_MODE - -/mob/living/simple_animal/bot/medbot/mysterious - name = "\improper Mysterious Medibot" - desc = "International Medibot of mystery." - skin = "bezerk" - damagetype_healer = "all" - heal_amount = 10 - -/mob/living/simple_animal/bot/medbot/derelict - name = "\improper Old Medibot" - desc = "Looks like it hasn't been modified since the late 2080s." - skin = "bezerk" - damagetype_healer = "all" - medical_mode_flags = MEDBOT_SPEAK_MODE - heal_threshold = 0 - heal_amount = 5 - -/mob/living/simple_animal/bot/medbot/nukie - name = "Oppenheimer" - desc = "A medibot stolen from a Nanotrasen station and upgraded by the Syndicate. Despite their best efforts at reprogramming, it still appears visibly upset near nuclear explosives." - skin = "bezerk" - health = 40 - maxHealth = 40 - maints_access_required = list(ACCESS_SYNDICATE) - radio_key = /obj/item/encryptionkey/syndicate - radio_channel = RADIO_CHANNEL_SYNDICATE - damagetype_healer = "all" - heal_threshold = 0 - heal_amount = 5 - additional_access = /datum/id_trim/syndicom/crew - -/mob/living/simple_animal/bot/medbot/nukie/Initialize(mapload, new_skin) - . = ..() - RegisterSignal(SSdcs, COMSIG_GLOB_NUKE_DEVICE_DISARMED, PROC_REF(nuke_disarm)) - RegisterSignal(SSdcs, COMSIG_GLOB_NUKE_DEVICE_ARMED, PROC_REF(nuke_arm)) - RegisterSignal(SSdcs, COMSIG_GLOB_NUKE_DEVICE_DETONATING, PROC_REF(nuke_detonate)) - internal_radio.set_frequency(FREQ_SYNDICATE) - internal_radio.freqlock = RADIO_FREQENCY_LOCKED - faction += ROLE_SYNDICATE //one of us - -/mob/living/simple_animal/bot/medbot/nukie/proc/nuke_disarm() - SIGNAL_HANDLER - INVOKE_ASYNC(src, PROC_REF(speak), pick(MEDIBOT_VOICED_FORGIVE, MEDIBOT_VOICED_THANKS, MEDIBOT_VOICED_GOOD_PERSON)) - -/mob/living/simple_animal/bot/medbot/nukie/proc/nuke_arm() - SIGNAL_HANDLER - INVOKE_ASYNC(src, PROC_REF(speak), pick(MEDIBOT_VOICED_WAIT, MEDIBOT_VOICED_DONT, MEDIBOT_VOICED_IM_SCARED)) - -/mob/living/simple_animal/bot/medbot/nukie/proc/nuke_detonate() - SIGNAL_HANDLER - INVOKE_ASYNC(src, PROC_REF(speak), pick(MEDIBOT_VOICED_THE_END, MEDIBOT_VOICED_NOOO, MEDIBOT_VOICED_SUFFER)) - -/mob/living/simple_animal/bot/medbot/examine(mob/user) - . = ..() - if(tipped_status == MEDBOT_PANIC_NONE) - return - - switch(tipped_status) - if(MEDBOT_PANIC_NONE to MEDBOT_PANIC_LOW) - . += "It appears to be tipped over, and is quietly waiting for someone to set it right." - if(MEDBOT_PANIC_LOW to MEDBOT_PANIC_MED) - . += "It is tipped over and requesting help." - if(MEDBOT_PANIC_MED to MEDBOT_PANIC_HIGH) - . += "They are tipped over and appear visibly distressed." // now we humanize the medbot as a they, not an it - if(MEDBOT_PANIC_HIGH to MEDBOT_PANIC_FUCK) - . += span_warning("They are tipped over and visibly panicking!") - if(MEDBOT_PANIC_FUCK to INFINITY) - . += span_warning("They are freaking out from being tipped over!") - -/mob/living/simple_animal/bot/medbot/update_icon_state() - . = ..() - if(!(bot_mode_flags & BOT_MODE_ON)) - icon_state = "[base_icon_state]0" - return - if(HAS_TRAIT(src, TRAIT_INCAPACITATED)) - icon_state = "[base_icon_state]a" - return - if(mode == BOT_HEALING) - icon_state = "[base_icon_state]s[get_bot_flag(medical_mode_flags, MEDBOT_STATIONARY_MODE)]" - return - icon_state = "[base_icon_state][get_bot_flag(medical_mode_flags, MEDBOT_STATIONARY_MODE) ? 2 : 1]" //Bot has yellow light to indicate stationary mode. - -/mob/living/simple_animal/bot/medbot/update_overlays() - . = ..() - if(skin) - . += "medskin_[skin]" - -/mob/living/simple_animal/bot/medbot/Initialize(mapload, new_skin) - . = ..() - - // Doing this hurts my soul, but simplebot access reworks are for another day. - var/datum/id_trim/additional_trim = SSid_access.trim_singletons_by_path[additional_access] - access_card.add_access(additional_trim.access + additional_trim.wildcard_access) - prev_access = access_card.access.Copy() - - if(!isnull(new_skin)) - skin = new_skin - update_appearance() - - if(HAS_TRAIT(SSstation, STATION_TRAIT_MEDBOT_MANIA) && mapload && is_station_level(z)) - skin = "advanced" - update_appearance(UPDATE_OVERLAYS) - damagetype_healer = "all" - if(prob(50)) - name += ", PhD." - - AddComponent(/datum/component/tippable, \ - tip_time = 3 SECONDS, \ - untip_time = 3 SECONDS, \ - self_right_time = 3.5 MINUTES, \ - pre_tipped_callback = CALLBACK(src, PROC_REF(pre_tip_over)), \ - post_tipped_callback = CALLBACK(src, PROC_REF(after_tip_over)), \ - post_untipped_callback = CALLBACK(src, PROC_REF(after_righted))) - return INITIALIZE_HINT_LATELOAD - -/mob/living/simple_animal/bot/medbot/LateInitialize() - . = ..() - if(!CONFIG_GET(flag/no_default_techweb_link) && !linked_techweb) - CONNECT_TO_RND_SERVER_ROUNDSTART(linked_techweb, src) - -/mob/living/simple_animal/bot/medbot/bot_reset() - ..() - patient = null - oldpatient = null - last_found = world.time - update_appearance() - -/mob/living/simple_animal/bot/medbot/proc/soft_reset() //Allows the medibot to still actively perform its medical duties without being completely halted as a hard reset does. - path = list() - patient = null - mode = BOT_IDLE - last_found = world.time - update_appearance() - -/mob/living/simple_animal/bot/medbot/attack_paw(mob/user, list/modifiers) - return attack_hand(user, modifiers) - -/mob/living/simple_animal/bot/medbot/multitool_act(mob/living/user, obj/item/multitool/tool) - if(!QDELETED(tool.buffer) && istype(tool.buffer, /datum/techweb)) - linked_techweb = tool.buffer - return TRUE - -// Variables sent to TGUI -/mob/living/simple_animal/bot/medbot/ui_data(mob/user) - var/list/data = ..() - if(!(bot_cover_flags & BOT_COVER_LOCKED) || issilicon(user) || isAdminGhostAI(user)) - data["custom_controls"]["heal_threshold"] = heal_threshold - data["custom_controls"]["speaker"] = medical_mode_flags & MEDBOT_SPEAK_MODE - data["custom_controls"]["crit_alerts"] = medical_mode_flags & MEDBOT_DECLARE_CRIT - data["custom_controls"]["stationary_mode"] = medical_mode_flags & MEDBOT_STATIONARY_MODE - data["custom_controls"]["sync_tech"] = TRUE - return data - -// Actions received from TGUI -/mob/living/simple_animal/bot/medbot/ui_act(action, params) - . = ..() - if(. || (bot_cover_flags & BOT_COVER_LOCKED && !usr.has_unlimited_silicon_privilege)) - return - - switch(action) - if("heal_threshold") - var/adjust_num = round(text2num(params["threshold"])) - heal_threshold = adjust_num - if(heal_threshold < 5) - heal_threshold = 5 - if(heal_threshold > 75) - heal_threshold = 75 - if("speaker") - medical_mode_flags ^= MEDBOT_SPEAK_MODE - if("crit_alerts") - medical_mode_flags ^= MEDBOT_DECLARE_CRIT - if("stationary_mode") - medical_mode_flags ^= MEDBOT_STATIONARY_MODE - path = list() - if("sync_tech") - if(!linked_techweb) - to_chat(usr, span_notice("No research techweb connected.")) - return - var/oldheal_amount = heal_amount - var/tech_boosters - for(var/index in linked_techweb.researched_designs) - var/datum/design/surgery/healing/design = SSresearch.techweb_design_by_id(index) - if(!istype(design)) - continue - tech_boosters++ - if(tech_boosters) - heal_amount = (round(tech_boosters/2,0.1)*initial(heal_amount))+initial(heal_amount) //every 2 tend wounds tech gives you an extra 100% healing, adjusting for unique branches (combo is bonus) - if(oldheal_amount < heal_amount) - speak("New knowledge found! Surgical efficacy improved to [round(heal_amount/initial(heal_amount)*100)]%!") - - update_appearance() - -/mob/living/simple_animal/bot/medbot/attackby(obj/item/W as obj, mob/user as mob, params) - var/current_health = health - ..() - if(health < current_health) //if medbot took some damage - step_to(src, (get_step_away(src,user))) - -/mob/living/simple_animal/bot/medbot/emag_act(mob/user, obj/item/card/emag/emag_card) - . = ..() - if(!(bot_cover_flags & BOT_COVER_EMAGGED)) - return - medical_mode_flags &= ~MEDBOT_DECLARE_CRIT - balloon_alert(user, "reagent synthesis circuits shorted") - audible_message(span_danger("[src] buzzes oddly!")) - flick("medibot_spark", src) - playsound(src, SFX_SPARKS, 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - if(user) - oldpatient = user - return TRUE - -/mob/living/simple_animal/bot/medbot/process_scan(mob/living/carbon/human/H) - if(H.stat == DEAD) - return null - if((H == oldpatient) && (world.time < last_found + 200)) - return null - if(!assess_patient(H)) - return null - - last_found = world.time - if(COOLDOWN_FINISHED(src, last_newpatient_speak)) - COOLDOWN_START(src, last_newpatient_speak, MEDBOT_NEW_PATIENTSPEAK_DELAY) - var/list/messagevoice = list( - "Hey, [H.name]! Hold on, I'm coming." = 'sound/voice/medbot/coming.ogg', - "Wait [H.name]! I want to help!" = 'sound/voice/medbot/help.ogg', - "[H.name], you appear to be injured!" = 'sound/voice/medbot/injured.ogg', - ) - var/message = pick(messagevoice) - speak(message) - playsound(src, messagevoice[message], 50, FALSE) - return H - -/* - * Proc used in a callback for before this medibot is tipped by the tippable component. - * - * user - the mob who is tipping us over - */ -/mob/living/simple_animal/bot/medbot/proc/pre_tip_over(mob/user) - if(!COOLDOWN_FINISHED(src, last_tipping_action_voice)) - return - - COOLDOWN_START(src, last_tipping_action_voice, MEDBOT_FREAKOUT_DELAY) // message for tipping happens when we start interacting, message for righting comes after finishing - var/static/list/worried_line = list( - MEDIBOT_VOICED_WAIT, - MEDIBOT_VOICED_DONT, - MEDIBOT_VOICED_TRUSTED_YOU, - MEDIBOT_VOICED_NO_SAD, - MEDIBOT_VOICED_OH_FUCK, - ) - speak(pick(worried_line)) - -/* - * Proc used in a callback for after this medibot is tipped by the tippable component. - * - * user - the mob who tipped us over - */ -/mob/living/simple_animal/bot/medbot/proc/after_tip_over(mob/user) - mode = BOT_TIPPED - tipper_name = user.name - playsound(src, 'sound/machines/warning-buzzer.ogg', 50) - -/* - * Proc used in a callback for after this medibot is righted, either by themselves or by a mob, by the tippable component. - * - * user - the mob who righted us. Can be null. - */ -/mob/living/simple_animal/bot/medbot/proc/after_righted(mob/user) - var/list/messagevoice - if(user) - if(user.name == tipper_name) - messagevoice = list(MEDIBOT_VOICED_FORGIVE) - else - messagevoice = list(MEDIBOT_VOICED_THANKS, MEDIBOT_VOICED_GOOD_PERSON) - else - messagevoice = list(MEDIBOT_VOICED_FUCK_YOU, MEDIBOT_VOICED_BEHAVIOUR_REPORTED) - tipper_name = null - - if(COOLDOWN_FINISHED(src, last_tipping_action_voice)) - COOLDOWN_START(src, last_tipping_action_voice, MEDBOT_FREAKOUT_DELAY) - speak(pick(messagevoice)) - tipped_status = MEDBOT_PANIC_NONE - mode = BOT_IDLE - -/// if someone tipped us over, check whether we should ask for help or just right ourselves eventually -/mob/living/simple_animal/bot/medbot/proc/handle_panic() - tipped_status++ - var/list/messagevoice - - switch(tipped_status) - if(MEDBOT_PANIC_LOW) - messagevoice = list(MEDIBOT_VOICED_ASSISTANCE) - if(MEDBOT_PANIC_MED) - messagevoice = list(MEDIBOT_VOICED_PUT_BACK) - if(MEDBOT_PANIC_HIGH) - messagevoice = list(MEDIBOT_VOICED_IM_SCARED) - if(MEDBOT_PANIC_FUCK) - messagevoice = list(MEDIBOT_VOICED_NEED_HELP, MEDIBOT_VOICED_THIS_HURTS) - if(MEDBOT_PANIC_ENDING) - messagevoice = list(MEDIBOT_VOICED_THE_END, MEDIBOT_VOICED_NOOO) - if(MEDBOT_PANIC_END) - speak("PSYCH ALERT: Crewmember [tipper_name] recorded displaying antisocial tendencies torturing bots in [get_area(src)]. Please schedule psych evaluation.", radio_channel) - - if(prob(tipped_status)) - do_jitter_animation(tipped_status * 0.1) - - if(messagevoice) - speak(pick(messagevoice)) - else if(prob(tipped_status * 0.2)) - playsound(src, 'sound/machines/warning-buzzer.ogg', 30, extrarange=-2) - -/mob/living/simple_animal/bot/medbot/handle_automated_action() - . = ..() - if(!.) - return - - switch(mode) - if(BOT_TIPPED) - handle_panic() - return - if(BOT_HEALING) - return - - if(IsStun() || IsParalyzed()) - oldpatient = patient - patient = null - mode = BOT_IDLE - return - - if(frustration > 8) - oldpatient = patient - soft_reset() - - if(QDELETED(patient)) - if(medical_mode_flags & MEDBOT_SPEAK_MODE && prob(1)) - if(bot_cover_flags & BOT_COVER_EMAGGED && prob(30)) - var/static/list/i_need_scissors = list( - MEDIBOT_VOICED_FUCK_YOU, - MEDIBOT_VOICED_NOT_A_GAME, - MEDIBOT_VOICED_IM_DIFFERENT, - MEDIBOT_VOICED_FOURTH_WALL, - MEDIBOT_VOICED_SHINDEMASHOU, - ) - speak(pick(i_need_scissors)) - else - var/static/list/idle_lines = list( - MEDIBOT_VOICED_DELICIOUS, - MEDIBOT_VOICED_PLASTIC_SURGEON, - MEDIBOT_VOICED_MASK_ON, - MEDIBOT_VOICED_ALWAYS_A_CATCH, - MEDIBOT_VOICED_LIKE_FLIES, - MEDIBOT_VOICED_SUFFER, - ) - speak(pick(idle_lines)) - var/scan_range = (medical_mode_flags & MEDBOT_STATIONARY_MODE ? 1 : DEFAULT_SCAN_RANGE) //If in stationary mode, scan range is limited to adjacent patients. - patient = scan(list(/mob/living/carbon/human), oldpatient, scan_range) - oldpatient = patient - - if(patient && (get_dist(src,patient) <= 1) && !tending) //Patient is next to us, begin treatment! - if(mode != BOT_HEALING) - mode = BOT_HEALING - update_appearance() - frustration = 0 - medicate_patient(patient) - return - - //Patient has moved away from us! - else if(patient && path.len && (get_dist(patient,path[path.len]) > 2)) - path = list() - mode = BOT_IDLE - last_found = world.time - - else if(medical_mode_flags & MEDBOT_STATIONARY_MODE && patient) //Since we cannot move in this mode, ignore the patient and wait for another. - soft_reset() - return - - if(patient && path.len == 0 && (get_dist(src,patient) > 1)) - path = get_path_to(src, patient, max_distance=30, access=access_card.GetAccess()) - mode = BOT_MOVING - if(!path.len) //try to get closer if you can't reach the patient directly - path = get_path_to(src, patient, max_distance=30, mintargetdist=1, access=access_card.GetAccess()) - if(!path.len) //Do not chase a patient we cannot reach. - soft_reset() - - if(path.len > 0 && patient) - if(!bot_move(path[path.len])) - oldpatient = patient - soft_reset() - return - - if(path.len > 8 && patient) - frustration++ - - if(bot_mode_flags & BOT_MODE_AUTOPATROL && !(medical_mode_flags & MEDBOT_STATIONARY_MODE) && !patient) - switch(mode) - if(BOT_IDLE, BOT_START_PATROL) - start_patrol() - if(BOT_PATROL) - bot_patrol() - -/mob/living/simple_animal/bot/medbot/proc/assess_patient(mob/living/carbon/C) - . = FALSE - //Time to see if they need medical help! - if(medical_mode_flags & MEDBOT_STATIONARY_MODE && !Adjacent(C)) //YOU come to ME, BRO - return FALSE - - if(C.stat == DEAD || (HAS_TRAIT(C, TRAIT_FAKEDEATH))) - return FALSE //welp too late for them! - - if(!(loc == C.loc) && !(isturf(C.loc) && isturf(loc))) - return FALSE - - if(HAS_TRAIT_FROM_ONLY(C, TRAIT_SUICIDED, REF(C))) - return FALSE //Kevorkian school of robotic medical assistants. - - if(bot_cover_flags & BOT_COVER_EMAGGED) //Everyone needs our medicine. (Our medicine is toxins) - return TRUE - - if(HAS_TRAIT(C, TRAIT_MEDIBOTCOMINGTHROUGH) && !HAS_TRAIT_FROM(C, TRAIT_MEDIBOTCOMINGTHROUGH, tag)) //the early medbot gets the worm (or in this case the patient) - return FALSE - - if(ishuman(C)) - var/mob/living/carbon/human/H = C - if (H.wear_suit && H.head && istype(H.wear_suit, /obj/item/clothing) && istype(H.head, /obj/item/clothing)) - var/obj/item/clothing/CS = H.wear_suit - var/obj/item/clothing/CH = H.head - if (CS.clothing_flags & CH.clothing_flags & THICKMATERIAL) - return FALSE // Skip over them if they have no exposed flesh. - // SKYRAT EDIT ADDITION START - if(H.mob_biotypes & MOB_ROBOTIC) - return FALSE - // SKYRAT EDIT ADDITION END - - if(medical_mode_flags & MEDBOT_DECLARE_CRIT && C.health <= 0) //Critical condition! Call for help! - declare(C) - - //They're injured enough for it! - var/list/treat_me_for = list() - if(C.getBruteLoss() > heal_threshold) - treat_me_for += BRUTE - - if(C.getOxyLoss() > (5 + heal_threshold)) - treat_me_for += OXY - - if(C.getFireLoss() > heal_threshold) - treat_me_for += BURN - - if(C.getToxLoss() > heal_threshold) - treat_me_for += TOX - - if(damagetype_healer in treat_me_for) - return TRUE - if(damagetype_healer == "all" && treat_me_for.len) - return TRUE - -/mob/living/simple_animal/bot/medbot/UnarmedAttack(atom/A, proximity_flag, list/modifiers) - if(HAS_TRAIT(src, TRAIT_HANDS_BLOCKED)) - return - if(iscarbon(A) && !tending) - var/mob/living/carbon/C = A - patient = C - mode = BOT_HEALING - update_appearance() - medicate_patient(C) - update_appearance() - return - ..() - -/mob/living/simple_animal/bot/medbot/examinate(atom/A as mob|obj|turf in view()) - ..() - if(!is_blind()) - chemscan(src, A) - -/mob/living/simple_animal/bot/medbot/proc/medicate_patient(mob/living/carbon/C) - if(!(bot_mode_flags & BOT_MODE_ON)) - return - - if(!istype(C)) - oldpatient = patient - soft_reset() - return - - if(C.stat == DEAD || (HAS_TRAIT(C, TRAIT_FAKEDEATH))) - var/static/list/grief_lines = list( - MEDIBOT_VOICED_STAY_WITH_ME, - MEDIBOT_VOICED_LIVE, - MEDIBOT_VOICED_NEVER_LOST, - ) - speak(pick(grief_lines)) - oldpatient = patient - soft_reset() - return - - tending = TRUE - while(tending) - var/treatment_method - var/list/potential_methods = list() - - if(C.getBruteLoss() > heal_threshold) - potential_methods += BRUTE - - if(C.getFireLoss() > heal_threshold) - potential_methods += BURN - - if(C.getOxyLoss() > (5 + heal_threshold)) - potential_methods += OXY - - if(C.getToxLoss() > heal_threshold) - potential_methods += TOX - - for(var/i in potential_methods) - if(i != damagetype_healer) - continue - treatment_method = i - - if(damagetype_healer == "all" && potential_methods.len) - treatment_method = pick(potential_methods) - - if(!treatment_method && !(bot_cover_flags & BOT_COVER_EMAGGED)) //If they don't need any of that they're probably cured! - if(C.maxHealth - C.get_organic_health() < heal_threshold) - to_chat(src, span_notice("[C] is healthy! Your programming prevents you from tending the wounds of anyone without at least [heal_threshold] damage of any one type ([heal_threshold + 5] for oxygen damage.)")) - - var/static/list/success_lines = list( - MEDIBOT_VOICED_ALL_PATCHED_UP, - MEDIBOT_VOICED_APPLE_A_DAY, - MEDIBOT_VOICED_FEEL_BETTER, - ) - speak(pick(success_lines)) - bot_reset() - tending = FALSE - else if(patient) - C.visible_message(span_danger("[src] is trying to tend the wounds of [patient]!"), \ - span_userdanger("[src] is trying to tend your wounds!")) - - if(do_after(src, 10 SECONDS, patient)) //SKYRAT EDIT: Increased time as tradeoff for automated healing. ORIGINAL: if(do_after(src, 2 SECONDS, patient)) - if((get_dist(src, patient) <= 1) && (bot_mode_flags & BOT_MODE_ON) && assess_patient(patient)) - var/healies = heal_amount - var/obj/item/storage/medkit/medkit = medkit_type - if(treatment_method == BRUTE && initial(medkit.damagetype_healed) == BRUTE) //specialized brute gets a bit of bonus, as a snack. - healies *= 1.1 - if(bot_cover_flags & BOT_COVER_EMAGGED) - patient.reagents.add_reagent(/datum/reagent/toxin/chloralhydrate, 5) - patient.apply_damage((healies * 1), treatment_method, spread_damage = TRUE) - log_combat(src, patient, "pretended to tend wounds on", "internal tools", "([uppertext(treatment_method)]) (EMAGGED)") - else - patient.heal_damage_type((healies * 1), treatment_method) //don't need to check treatment_method since we know by this point that they were actually damaged. - log_combat(src, patient, "tended the wounds of", "internal tools", "([uppertext(treatment_method)])") - C.visible_message(span_notice("[src] tends the wounds of [patient]!"), \ - "[span_green("[src] tends your wounds!")]") - ADD_TRAIT(patient,TRAIT_MEDIBOTCOMINGTHROUGH,tag) - addtimer(TRAIT_CALLBACK_REMOVE(patient, TRAIT_MEDIBOTCOMINGTHROUGH, tag), (30 SECONDS)) - else - tending = FALSE - else - tending = FALSE - - update_appearance() - if(!tending) - visible_message("[src] places its tools back into itself.") - soft_reset() - else - tending = FALSE - -/mob/living/simple_animal/bot/medbot/explode() - var/atom/Tsec = drop_location() - - drop_part(medkit_type, Tsec) - new /obj/item/assembly/prox_sensor(Tsec) - drop_part(healthanalyzer, Tsec) - - if(bot_cover_flags & BOT_COVER_EMAGGED && prob(25)) - playsound(src, 'sound/voice/medbot/insult.ogg', 50) - return ..() - -/mob/living/simple_animal/bot/medbot/proc/declare(crit_patient) - if(!COOLDOWN_FINISHED(src, last_patient_message)) - return - COOLDOWN_START(src, last_patient_message, MEDBOT_PATIENTSPEAK_DELAY) - var/area/location = get_area(src) - speak("Medical emergency! [crit_patient || "A patient"] is in critical condition at [location]!", radio_channel) - -#undef MEDBOT_NEW_PATIENTSPEAK_DELAY -#undef MEDBOT_PATIENTSPEAK_DELAY -#undef MEDBOT_FREAKOUT_DELAY - -#undef MEDBOT_PANIC_NONE -#undef MEDBOT_PANIC_LOW -#undef MEDBOT_PANIC_MED -#undef MEDBOT_PANIC_HIGH -#undef MEDBOT_PANIC_FUCK -#undef MEDBOT_PANIC_ENDING -#undef MEDBOT_PANIC_END diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index df180631b1e9de..88210a714c8e02 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -19,7 +19,7 @@ health = 50 maxHealth = 50 speed = 3 - damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) + damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, STAMINA = 0, OXY = 0) combat_mode = TRUE //No swapping buckle_lying = 0 mob_size = MOB_SIZE_LARGE @@ -151,7 +151,7 @@ return if(!cell) to_chat(user, span_warning("[src] doesn't have a power cell!")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS cell.add_fingerprint(user) if(Adjacent(user) && !issilicon(user)) user.put_in_hands(cell) @@ -163,7 +163,7 @@ ) cell = null diag_hud_set_mulebotcell() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /mob/living/simple_animal/bot/mulebot/attackby(obj/item/I, mob/living/user, params) if(istype(I, /obj/item/stock_parts/cell) && bot_cover_flags & BOT_COVER_OPEN) @@ -769,7 +769,7 @@ unload() /mob/living/simple_animal/bot/mulebot/UnarmedAttack(atom/A, proximity_flag, list/modifiers) - if(HAS_TRAIT(src, TRAIT_HANDS_BLOCKED)) + if(!can_unarmed_attack()) return if(isturf(A) && isturf(loc) && loc.Adjacent(A) && load) unload(get_dir(loc, A)) diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index 5b994b1fc0cc35..5115dd4c8e2bb1 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -7,7 +7,7 @@ anchored = FALSE health = 25 maxHealth = 25 - damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) + damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, STAMINA = 0, OXY = 0) pass_flags = PASSMOB | PASSFLAPS combat_mode = TRUE @@ -128,6 +128,7 @@ COMSIG_ATOM_ENTERED = PROC_REF(on_entered), ) AddElement(/datum/element/connect_loc, loc_connections) + AddComponent(/datum/component/security_vision, judgement_criteria = NONE, update_judgement_criteria = CALLBACK(src, PROC_REF(judgement_criteria))) /mob/living/simple_animal/bot/secbot/Destroy() QDEL_NULL(weapon) @@ -195,11 +196,14 @@ /mob/living/simple_animal/bot/secbot/proc/retaliate(mob/living/carbon/human/attacking_human) var/judgement_criteria = judgement_criteria() - threatlevel = attacking_human.assess_threat(judgement_criteria, weaponcheck = CALLBACK(src, PROC_REF(check_for_weapons))) + threatlevel = attacking_human.assess_threat(judgement_criteria) threatlevel += 6 - if(threatlevel >= 4) + if(threatlevel >= THREAT_ASSESS_DANGEROUS) target = attacking_human mode = BOT_HUNT + if(threatlevel < 0 && prob(5)) + manual_emote("salutes.") + speak("Thank you sir.") /mob/living/simple_animal/bot/secbot/proc/judgement_criteria() var/final = FALSE @@ -274,7 +278,7 @@ /mob/living/simple_animal/bot/secbot/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) if(!(bot_mode_flags & BOT_MODE_ON)) return - if(HAS_TRAIT(src, TRAIT_HANDS_BLOCKED)) + if(!can_unarmed_attack()) return if(!iscarbon(attack_target)) return ..() @@ -327,13 +331,13 @@ weapon.attack(current_target, src) if(ishuman(current_target)) current_target.set_stutter(10 SECONDS) - current_target.Paralyze(60) // SKYRAT EDIT CHANGE - original was current_target.Paralyze(100) + current_target.Paralyze(60) // NOVA EDIT CHANGE - original was current_target.Paralyze(100) var/mob/living/carbon/human/human_target = current_target - threat = human_target.assess_threat(judgement_criteria, weaponcheck = CALLBACK(src, PROC_REF(check_for_weapons))) + threat = human_target.assess_threat(judgement_criteria) else - current_target.Paralyze(60) // SKYRAT EDIT CHANGE - original was current_target.Paralyze(100) + current_target.Paralyze(60) // NOVA EDIT CHANGE - original was current_target.Paralyze(100) current_target.set_stutter(10 SECONDS) - threat = current_target.assess_threat(judgement_criteria, weaponcheck = CALLBACK(src, PROC_REF(check_for_weapons))) + threat = current_target.assess_threat(judgement_criteria) log_combat(src, current_target, "stunned") if(security_mode_flags & SECBOT_DECLARE_ARRESTS) @@ -457,30 +461,24 @@ if((nearby_carbons.name == oldtarget_name) && (world.time < last_found + 100)) continue - threatlevel = nearby_carbons.assess_threat(judgement_criteria, weaponcheck = CALLBACK(src, PROC_REF(check_for_weapons))) + threatlevel = nearby_carbons.assess_threat(judgement_criteria) - if(!threatlevel) + if(threatlevel < THREAT_ASSESS_DANGEROUS) continue - if(threatlevel >= 4) - target = nearby_carbons - oldtarget_name = nearby_carbons.name - threat_react(threatlevel) - visible_message("[src] points at [nearby_carbons.name]!") - mode = BOT_HUNT - INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) - break + target = nearby_carbons + oldtarget_name = nearby_carbons.name + threat_react(threatlevel) + visible_message("[src] points at [nearby_carbons.name]!") + mode = BOT_HUNT + INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) + break /// React to detecting criminal scum by making some kind of noise /mob/living/simple_animal/bot/secbot/proc/threat_react(threatlevel) speak("Level [threatlevel] infraction alert!") playsound(src, pick('sound/voice/beepsky/criminal.ogg', 'sound/voice/beepsky/justice.ogg', 'sound/voice/beepsky/freeze.ogg'), 50, FALSE) -/mob/living/simple_animal/bot/secbot/proc/check_for_weapons(obj/item/slot_item) - if(slot_item && (slot_item.item_flags & NEEDS_PERMIT)) - return TRUE - return FALSE - /mob/living/simple_animal/bot/secbot/explode() var/atom/Tsec = drop_location() switch(bot_type) @@ -520,7 +518,7 @@ return ..() /mob/living/simple_animal/bot/secbot/attack_alien(mob/living/carbon/alien/user, list/modifiers) - ..() + . = ..() if(!isalien(target)) target = user mode = BOT_HUNT diff --git a/code/modules/mob/living/simple_animal/damage_procs.dm b/code/modules/mob/living/simple_animal/damage_procs.dm index 9640dbb9de4403..3e49ac30559b3c 100644 --- a/code/modules/mob/living/simple_animal/damage_procs.dm +++ b/code/modules/mob/living/simple_animal/damage_procs.dm @@ -18,6 +18,12 @@ if(AIStatus == AI_IDLE) toggle_ai(AI_ON) +/mob/living/simple_animal/get_damage_mod(damage_type) + var/modifier = ..() + if (damage_type in damage_coeff) + return modifier * damage_coeff[damage_type] + return modifier + /mob/living/simple_animal/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE, required_bodytype) if(!can_adjust_brute_loss(amount, forced, required_bodytype)) return 0 @@ -50,14 +56,6 @@ else if(damage_coeff[TOX]) . = adjustHealth(amount * damage_coeff[TOX] * CONFIG_GET(number/damage_multiplier), updating_health, forced) -/mob/living/simple_animal/adjustCloneLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype) - if(!can_adjust_clone_loss(amount, forced, required_biotype)) - return 0 - if(forced) - . = adjustHealth(amount * CONFIG_GET(number/damage_multiplier), updating_health, forced) - else if(damage_coeff[CLONE]) - . = adjustHealth(amount * damage_coeff[CLONE] * CONFIG_GET(number/damage_multiplier), updating_health, forced) - /mob/living/simple_animal/adjustStaminaLoss(amount, updating_stamina = TRUE, forced = FALSE, required_biotype) if(!can_adjust_stamina_loss(amount, forced, required_biotype)) return 0 diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm deleted file mode 100644 index f1857a00e2c463..00000000000000 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ /dev/null @@ -1,332 +0,0 @@ -//Cat -/mob/living/simple_animal/pet/cat - name = "cat" - desc = "Kitty!!" - icon = 'icons/mob/simple/pets.dmi' - icon_state = "cat2" - icon_living = "cat2" - icon_dead = "cat2_dead" - speak = list("Meow!", "Esp!", "Purr!", "HSSSSS") - speak_emote = list("purrs", "meows") - emote_hear = list("meows.", "mews.") - emote_see = list("shakes their head.", "shivers.") - speak_chance = 1 - turns_per_move = 5 - pass_flags = PASSTABLE - mob_size = MOB_SIZE_SMALL - mob_biotypes = MOB_ORGANIC|MOB_BEAST - minbodytemp = 200 - maxbodytemp = 400 - unsuitable_atmos_damage = 0.5 - animal_species = /mob/living/simple_animal/pet/cat - childtype = list(/mob/living/simple_animal/pet/cat/kitten = 1) - butcher_results = list(/obj/item/food/meat/slab = 1, /obj/item/organ/internal/ears/cat = 1, /obj/item/organ/external/tail/cat = 1, /obj/item/stack/sheet/animalhide/cat = 1) - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "gently pushes aside" - response_disarm_simple = "gently push aside" - response_harm_continuous = "kicks" - response_harm_simple = "kick" - mobility_flags = MOBILITY_FLAGS_REST_CAPABLE_DEFAULT - var/mob/living/basic/mouse/movement_target - gold_core_spawnable = FRIENDLY_SPAWN - collar_icon_state = "cat" - has_collar_resting_icon_state = TRUE - can_be_held = TRUE - held_state = "cat2" - attack_verb_continuous = "claws" - attack_verb_simple = "claw" - attack_sound = 'sound/weapons/slash.ogg' - attack_vis_effect = ATTACK_EFFECT_CLAW - - footstep_type = FOOTSTEP_MOB_CLAW - -/mob/living/simple_animal/pet/cat/Initialize(mapload) - . = ..() - AddElement(/datum/element/pet_bonus, "purrs!") - add_verb(src, /mob/living/proc/toggle_resting) - add_cell_sample() - ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) - -/mob/living/simple_animal/pet/cat/add_cell_sample() - AddElement(/datum/element/swabable, CELL_LINE_TABLE_CAT, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) - - -/mob/living/simple_animal/pet/cat/space - name = "space cat" - desc = "They're a cat... in space!" - icon_state = "spacecat" - icon_living = "spacecat" - icon_dead = "spacecat_dead" - unsuitable_atmos_damage = 0 - minbodytemp = TCMB - maxbodytemp = T0C + 40 - held_state = "spacecat" - -/mob/living/simple_animal/pet/cat/breadcat - name = "bread cat" - desc = "They're a cat... with a bread!" - icon_state = "breadcat" - icon_living = "breadcat" - icon_dead = "breadcat_dead" - collar_icon_state = null - held_state = "breadcat" - butcher_results = list(/obj/item/food/meat/slab = 2, /obj/item/organ/internal/ears/cat = 1, /obj/item/organ/external/tail/cat = 1, /obj/item/food/breadslice/plain = 1) - -/mob/living/simple_animal/pet/cat/breadcat/add_cell_sample() - return - -/mob/living/simple_animal/pet/cat/original - name = "Batsy" - desc = "The product of alien DNA and bored geneticists." - gender = FEMALE - icon_state = "original" - icon_living = "original" - icon_dead = "original_dead" - collar_icon_state = null - unique_pet = TRUE - held_state = "original" - -/mob/living/simple_animal/pet/cat/original/add_cell_sample() - return - -/mob/living/simple_animal/pet/cat/kitten - name = "kitten" - desc = "D'aaawwww." - icon_state = "kitten" - icon_living = "kitten" - icon_dead = "kitten_dead" - density = FALSE - pass_flags = PASSMOB - mob_size = MOB_SIZE_SMALL - collar_icon_state = "kitten" - -//RUNTIME IS ALIVE! SQUEEEEEEEE~ -/mob/living/simple_animal/pet/cat/runtime - name = "Runtime" - desc = "GCAT" - icon_state = "cat" - icon_living = "cat" - icon_dead = "cat_dead" - gender = FEMALE - gold_core_spawnable = NO_SPAWN - unique_pet = TRUE - var/list/family = list()//var restored from savefile, has count of each child type - var/list/children = list()//Actual mob instances of children - var/static/cats_deployed = 0 - var/memory_saved = FALSE - held_state = "cat" - -/mob/living/simple_animal/pet/cat/runtime/Initialize(mapload) - if(prob(5)) - icon_state = "original" - icon_living = "original" - icon_dead = "original_dead" - Read_Memory() - . = ..() - -/mob/living/simple_animal/pet/cat/runtime/Life(seconds_per_tick = SSMOBS_DT, times_fired) - if(!cats_deployed && SSticker.current_state >= GAME_STATE_SETTING_UP) - Deploy_The_Cats() - if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved) - Write_Memory() - memory_saved = TRUE - ..() - -/mob/living/simple_animal/pet/cat/runtime/make_babies() - var/mob/baby = ..() - if(baby) - children += baby - return baby - -/mob/living/simple_animal/pet/cat/runtime/death() - if(!memory_saved) - Write_Memory(TRUE) - ..() - -/mob/living/simple_animal/pet/cat/runtime/proc/Read_Memory() - if(fexists("data/npc_saves/Runtime.sav")) //legacy compatability to convert old format to new - var/savefile/S = new /savefile("data/npc_saves/Runtime.sav") - S["family"] >> family - fdel("data/npc_saves/Runtime.sav") - else - var/json_file = file("data/npc_saves/Runtime.json") - if(!fexists(json_file)) - return - var/list/json = json_decode(file2text(json_file)) - family = json["family"] - if(isnull(family)) - family = list() - -/mob/living/simple_animal/pet/cat/runtime/Write_Memory(dead, gibbed) - . = ..() - if(!.) - return - var/json_file = file("data/npc_saves/Runtime.json") - var/list/file_data = list() - family = list() - if(!dead) - for(var/mob/living/simple_animal/pet/cat/kitten/C in children) - if(istype(C,type) || C.stat || !C.z || (C.flags_1 & HOLOGRAM_1)) - continue - if(C.type in family) - family[C.type] += 1 - else - family[C.type] = 1 - file_data["family"] = family - fdel(json_file) - WRITE_FILE(json_file, json_encode(file_data)) - -/mob/living/simple_animal/pet/cat/runtime/proc/Deploy_The_Cats() - cats_deployed = 1 - for(var/cat_type in family) - if(family[cat_type] > 0) - for(var/i in 1 to min(family[cat_type],100)) //Limits to about 500 cats, you wouldn't think this would be needed (BUT IT IS) - new cat_type(loc) - -/mob/living/simple_animal/pet/cat/_proc - name = "Proc" - gender = MALE - gold_core_spawnable = NO_SPAWN - unique_pet = TRUE - - -/mob/living/simple_animal/pet/cat/update_resting() - . = ..() - if(stat == DEAD) - return - if (resting) - icon_state = "[icon_living]_rest" - else - icon_state = "[icon_living]" - - -/mob/living/simple_animal/pet/cat/Life(seconds_per_tick = SSMOBS_DT, times_fired) - if(!stat && !buckled && !client) - if(SPT_PROB(0.5, seconds_per_tick)) - manual_emote(pick("stretches out for a belly rub.", "wags [p_their()] tail.", "lies down.")) - set_resting(TRUE) - else if(SPT_PROB(0.5, seconds_per_tick)) - manual_emote(pick("sits down.", "crouches on [p_their()] hind legs.", "looks alert.")) - set_resting(TRUE) - icon_state = "[icon_living]_sit" - cut_overlays() // No collar support in sitting state - else if(SPT_PROB(0.5, seconds_per_tick)) - if (resting) - manual_emote(pick("gets up and meows.", "walks around.", "stops resting.")) - set_resting(FALSE) - else - manual_emote(pick("grooms [p_their()] fur.", "twitches [p_their()] whiskers.", "shakes out [p_their()] coat.")) - - //MICE! RATS! OH MY! - if((src.loc) && isturf(src.loc)) - if(!stat && !buckled) - //Targeting anything in the rat faction nearby - for(var/mob/living/M in view(1,src)) - if(!M.stat && Adjacent(M)) - if (FACTION_RAT in M.faction) - //Jerry can never catch Tom snowflaking - if(istype(M, /mob/living/basic/mouse/brown/tom) && inept_hunter) - if(COOLDOWN_FINISHED(src, emote_cooldown)) - visible_message(span_warning("[src] chases [M] around, to no avail!")) - step(M, pick(GLOB.cardinals)) - COOLDOWN_START(src, emote_cooldown, 1 MINUTES) - break - //Mouse splatting - if(ismouse(M)) - manual_emote("splats \the [M]!") - var/mob/living/basic/mouse/snack = M - snack.splat() - movement_target = null - stop_automated_movement = 0 - break - for(var/obj/item/toy/cattoy/T in view(1,src)) - if (T.cooldown < (world.time - 400)) - manual_emote("bats \the [T] around with \his paw!") - T.cooldown = world.time - - ..() - - make_babies() - - if(!stat && !resting && !buckled) - turns_since_scan++ - if(turns_since_scan > 5) - SSmove_manager.stop_looping(src) - turns_since_scan = 0 - if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) )) - movement_target = null - stop_automated_movement = 0 - if( !movement_target || !(movement_target.loc in oview(src, 3)) ) - movement_target = null - stop_automated_movement = 0 - //Targeting mice and mobs in the rat faction - for(var/mob/living/target in oview(src,3)) - if(isturf(target.loc) && !target.stat) - if(FACTION_RAT in target.faction) - movement_target = target - break - if(movement_target) - stop_automated_movement = 1 - SSmove_manager.move_to(src, movement_target, 0, 3) - -/mob/living/simple_animal/pet/cat/jerry //Holy shit we left jerry on donut ~ Arcane ~Fikou - name = "Jerry" - desc = "Tom is VERY amused." - inept_hunter = TRUE - gender = MALE - -/mob/living/simple_animal/pet/cat/cak //I told you I'd do it, Remie - name = "Keeki" - desc = "She is a cat made out of cake." - icon_state = "cak" - icon_living = "cak" - icon_dead = "cak_dead" - health = 50 - maxHealth = 50 - gender = FEMALE - harm_intent_damage = 10 - butcher_results = list(/obj/item/organ/internal/brain = 1, /obj/item/organ/internal/heart = 1, /obj/item/food/cakeslice/birthday = 3, \ - /obj/item/food/meat/slab = 2) - response_harm_continuous = "takes a bite out of" - response_harm_simple = "take a bite out of" - attacked_sound = 'sound/items/eatfood.ogg' - death_message = "loses her false life and collapses!" - death_sound = SFX_BODYFALL - held_state = "cak" - -/mob/living/simple_animal/pet/cat/cak/add_cell_sample() - return - -/mob/living/simple_animal/pet/cat/cak/CheckParts(list/parts) - ..() - var/obj/item/organ/internal/brain/candidate = locate(/obj/item/organ/internal/brain) in contents - if(!candidate || !candidate.brainmob || !candidate.brainmob.mind) - return - var/datum/mind/candidate_mind = candidate.brainmob.mind - candidate_mind.transfer_to(src) - candidate_mind.grab_ghost() - to_chat(src, "[span_boldbig("You are a cak!")] You're a harmless cat/cake hybrid that everyone loves. People can take bites out of you if they're hungry, but you regenerate health \ - so quickly that it generally doesn't matter. You're remarkably resilient to any damage besides this and it's hard for you to really die at all. You should go around and bring happiness and \ - free cake to the station!") - var/default_name = "Keeki" - var/new_name = sanitize_name(reject_bad_text(tgui_input_text(src, "You are the [name]. Would you like to change your name to something else?", "Name change", default_name, MAX_NAME_LEN)), cap_after_symbols = FALSE) - if(new_name) - to_chat(src, span_notice("Your name is now [new_name]!")) - name = new_name - -/mob/living/simple_animal/pet/cat/cak/Life(seconds_per_tick = SSMOBS_DT, times_fired) - ..() - if(stat) - return - if(health < maxHealth) - adjustBruteLoss(-4 * seconds_per_tick) //Fast life regen - for(var/obj/item/food/donut/D in range(1, src)) //Frosts nearby donuts! - if(!D.is_decorated) - D.decorate_donut() - -/mob/living/simple_animal/pet/cat/cak/attack_hand(mob/living/user, list/modifiers) - ..() - if(user.combat_mode && user.reagents && !stat) - user.reagents.add_reagent(/datum/reagent/consumable/nutriment, 0.4) - user.reagents.add_reagent(/datum/reagent/consumable/nutriment/vitamin, 0.4) diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm deleted file mode 100644 index 212867877554c4..00000000000000 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ /dev/null @@ -1,616 +0,0 @@ -GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians - -/mob/living/simple_animal/hostile/guardian - name = "Guardian Spirit" - real_name = "Guardian Spirit" - desc = "A mysterious being that stands by its charge, ever vigilant." - speak_emote = list("hisses") - gender = NEUTER - mob_biotypes = MOB_SPECIAL - sentience_type = SENTIENCE_HUMANOID - bubble_icon = "guardian" - response_help_continuous = "passes through" - response_help_simple = "pass through" - response_disarm_continuous = "flails at" - response_disarm_simple = "flail at" - response_harm_continuous = "punches" - response_harm_simple = "punch" - icon = 'icons/mob/nonhuman-player/guardian.dmi' - icon_state = "magicbase" - icon_living = "magicbase" - icon_dead = "magicbase" - speed = 0 - combat_mode = TRUE - stop_automated_movement = 1 - attack_sound = 'sound/weapons/punch1.ogg' - 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) - minbodytemp = 0 - maxbodytemp = INFINITY - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - maxHealth = INFINITY //The spirit itself is invincible - health = INFINITY - mob_biotypes = MOB_BEAST - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) //how much damage from each damage type we transfer to the owner - environment_smash = ENVIRONMENT_SMASH_STRUCTURES - obj_damage = 40 - melee_damage_lower = 15 - melee_damage_upper = 15 - del_on_death = TRUE - loot = list(/obj/effect/temp_visual/guardian/phase/out) - AIStatus = AI_OFF - can_have_ai = FALSE - light_system = MOVABLE_LIGHT - light_range = 3 - light_on = FALSE - hud_type = /datum/hud/guardian - faction = list() - - /// The guardian's color, used for their sprite, chat, and some effects made by it. - var/guardian_color - /// List of overlays we use. - var/list/guardian_overlays[GUARDIAN_TOTAL_LAYERS] - - /// The summoner of the guardian, the one it's intended to guard! - var/mob/living/summoner - /// How far from the summoner the guardian can be. - var/range = 10 - - /// Which toggle button the HUD uses. - var/toggle_button_type = /atom/movable/screen/guardian/toggle_mode/inactive - /// Name used by the guardian creator. - var/creator_name = "Error" - /// Description used by the guardian creator. - var/creator_desc = "This shouldn't be here! Report it on GitHub!" - /// Icon used by the guardian creator. - var/creator_icon = "fuck" - - /// A string explaining to the guardian what they can do. - var/playstyle_string = span_boldholoparasite("You are a Guardian without any type. You shouldn't exist!") - /// The fluff string we actually use. - var/used_fluff_string - /// Fluff string from tarot cards. - var/magic_fluff_string = span_holoparasite("You draw the Coder, symbolizing bugs and errors. This shouldn't happen! Submit a bug report!") - /// Fluff string from holoparasite injectors. - var/tech_fluff_string = span_holoparasite("BOOT SEQUENCE COMPLETE. ERROR MODULE LOADED. THIS SHOULDN'T HAPPEN. Submit a bug report!") - /// Fluff string from holocarp fishsticks. - var/carp_fluff_string = span_holoparasite("CARP CARP CARP SOME SORT OF HORRIFIC BUG BLAME THE CODERS CARP CARP CARP") - /// Fluff string from the dusty shard. - var/miner_fluff_string = span_holoparasite("You encounter... Mythril, it shouldn't exist... Submit a bug report!") - - /// Are we forced to not be able to manifest/recall? - var/locked = FALSE - /// Cooldown between manifests/recalls. - COOLDOWN_DECLARE(manifest_cooldown) - /// Cooldown between the summoner resetting the guardian's client. - COOLDOWN_DECLARE(resetting_cooldown) - -/mob/living/simple_animal/hostile/guardian/Initialize(mapload, theme) - . = ..() - GLOB.parasites += src - update_theme(theme) - AddElement(/datum/element/simple_flying) - AddComponent(/datum/component/basic_inhands) - manifest_effects() - -/mob/living/simple_animal/hostile/guardian/Destroy() //if deleted by admins or something random, cut from the summoner - if(is_deployed()) - recall_effects() - if(!QDELETED(summoner)) - cut_summoner(different_person = TRUE) - return ..() - -/// Setter for our summoner mob. -/mob/living/simple_animal/hostile/guardian/proc/set_summoner(mob/living/to_who, different_person = FALSE) - if(QDELETED(to_who)) - qdel(src) //no gettin off scot-free pal......... - return - if(summoner) - cut_summoner(different_person) - summoner = to_who - update_health_hud() - med_hud_set_health() - med_hud_set_status() - add_verb(to_who, list( - /mob/living/proc/guardian_comm, - /mob/living/proc/guardian_recall, - /mob/living/proc/guardian_reset, - )) - if(different_person) - if(mind) - mind.enslave_mind_to_creator(to_who) - else //mindless guardian, manually give them factions - faction += summoner.faction - summoner.faction += "[REF(src)]" - remove_all_languages(LANGUAGE_MASTER) - copy_languages(to_who, LANGUAGE_MASTER) // make sure holoparasites speak same language as master - RegisterSignal(to_who, COMSIG_MOVABLE_MOVED, PROC_REF(check_distance)) - RegisterSignal(to_who, COMSIG_QDELETING, PROC_REF(on_summoner_deletion)) - RegisterSignal(to_who, COMSIG_LIVING_DEATH, PROC_REF(on_summoner_death)) - RegisterSignal(to_who, COMSIG_LIVING_HEALTH_UPDATE, PROC_REF(on_summoner_health_update)) - RegisterSignal(to_who, COMSIG_LIVING_ON_WABBAJACKED, PROC_REF(on_summoner_wabbajacked)) - RegisterSignal(to_who, COMSIG_LIVING_SHAPESHIFTED, PROC_REF(on_summoner_shapeshifted)) - RegisterSignal(to_who, COMSIG_LIVING_UNSHAPESHIFTED, PROC_REF(on_summoner_unshapeshifted)) - recall(forced = TRUE) - if(to_who.stat == DEAD) - on_summoner_death(to_who) - -/mob/living/simple_animal/hostile/guardian/proc/cut_summoner(different_person = FALSE) - if(is_deployed()) - recall_effects() - var/summoner_turf = get_turf(src) - if (!isnull(summoner_turf)) - forceMove(summoner_turf) - UnregisterSignal(summoner, list(COMSIG_MOVABLE_MOVED, COMSIG_QDELETING, COMSIG_LIVING_DEATH, COMSIG_LIVING_HEALTH_UPDATE, COMSIG_LIVING_ON_WABBAJACKED, COMSIG_LIVING_SHAPESHIFTED, COMSIG_LIVING_UNSHAPESHIFTED)) - if(different_person) - summoner.faction -= "[REF(src)]" - faction -= summoner.faction - mind?.remove_all_antag_datums() - if(!length(summoner.get_all_linked_holoparasites() - src)) - remove_verb(summoner, list( - /mob/living/proc/guardian_comm, - /mob/living/proc/guardian_recall, - /mob/living/proc/guardian_reset, - )) - summoner = null - -/// Signal proc for [COMSIG_LIVING_ON_WABBAJACKED], when our summoner is wabbajacked we should be alerted. -/mob/living/simple_animal/hostile/guardian/proc/on_summoner_wabbajacked(mob/living/source, mob/living/new_mob) - SIGNAL_HANDLER - - set_summoner(new_mob) - to_chat(src, span_holoparasite("Your summoner has changed form!")) - -/// Signal proc for [COMSIG_LIVING_SHAPESHIFTED], when our summoner is shapeshifted we should change to the new mob -/mob/living/simple_animal/hostile/guardian/proc/on_summoner_shapeshifted(mob/living/source, mob/living/new_shape) - SIGNAL_HANDLER - - set_summoner(new_shape) - to_chat(src, span_holoparasite("Your summoner has shapeshifted into that of a [new_shape]!")) - -/// Signal proc for [COMSIG_LIVING_UNSHAPESHIFTED], when our summoner unshapeshifts go back to that mob -/mob/living/simple_animal/hostile/guardian/proc/on_summoner_unshapeshifted(mob/living/source, mob/living/old_summoner) - SIGNAL_HANDLER - - set_summoner(old_summoner) - to_chat(src, span_holoparasite("Your summoner has shapeshifted back into their normal form!")) - -// Ha, no -/mob/living/simple_animal/hostile/guardian/wabbajack(what_to_randomize, change_flags = WABBAJACK) - visible_message(span_warning("[src] resists the polymorph!")) - -/mob/living/simple_animal/hostile/guardian/proc/on_summoner_health_update(mob/living/source) - SIGNAL_HANDLER - - update_health_hud() - med_hud_set_health() - med_hud_set_status() - -/mob/living/simple_animal/hostile/guardian/med_hud_set_health() - var/image/holder = hud_list?[HEALTH_HUD] - if(isnull(holder)) - return - holder.icon_state = "hud[RoundHealth(summoner || src)]" - var/icon/size_check = icon(icon, icon_state, dir) - holder.pixel_y = size_check.Height() - world.icon_size - -/mob/living/simple_animal/hostile/guardian/med_hud_set_status() - var/image/holder = hud_list?[STATUS_HUD] - if(isnull(holder)) - return - var/icon/size_check = icon(icon, icon_state, dir) - holder.pixel_y = size_check.Height() - world.icon_size - var/mob/living/checking_mob = summoner || src - if(checking_mob.stat == DEAD || HAS_TRAIT(checking_mob, TRAIT_FAKEDEATH)) - holder.icon_state = "huddead" - else - holder.icon_state = "hudhealthy" - -/mob/living/simple_animal/hostile/guardian/Destroy() - GLOB.parasites -= src - return ..() - -/mob/living/simple_animal/hostile/guardian/proc/update_theme(theme) //update the guardian's theme - if(!theme) - theme = pick(GUARDIAN_THEME_MAGIC, GUARDIAN_THEME_TECH, GUARDIAN_THEME_CARP, GUARDIAN_THEME_MINER) - switch(theme)//should make it easier to create new stand designs in the future if anyone likes that - if(GUARDIAN_THEME_MAGIC) - name = "Guardian Spirit" - real_name = "Guardian Spirit" - bubble_icon = "guardian" - icon_state = "magicbase" - icon_living = "magicbase" - icon_dead = "magicbase" - used_fluff_string = magic_fluff_string - if(GUARDIAN_THEME_TECH) - name = "Holoparasite" - real_name = "Holoparasite" - bubble_icon = "holo" - icon_state = "techbase" - icon_living = "techbase" - icon_dead = "techbase" - used_fluff_string = tech_fluff_string - if(GUARDIAN_THEME_MINER) - name = "Power Miner" - real_name = "Power Miner" - bubble_icon = "guardian" - icon_state = "minerbase" - icon_living = "minerbase" - icon_dead = "minerbase" - used_fluff_string = miner_fluff_string - if(GUARDIAN_THEME_CARP) - name = "Holocarp" - real_name = "Holocarp" - bubble_icon = "holo" - icon_state = null //entirely handled by overlays - icon_living = null - icon_dead = null - speak_emote = string_list(list("gnashes")) - desc = "A mysterious fish that stands by its charge, ever vigilant." - attack_verb_continuous = "bites" - attack_verb_simple = "bite" - attack_sound = 'sound/weapons/bite.ogg' - attack_vis_effect = ATTACK_EFFECT_BITE - used_fluff_string = carp_fluff_string - guardian_overlays[GUARDIAN_COLOR_LAYER] = mutable_appearance(icon, theme) - apply_overlay(GUARDIAN_COLOR_LAYER) - -/mob/living/simple_animal/hostile/guardian/Login() //if we have a mind, set its name to ours when it logs in - . = ..() - if(!. || !client) - return FALSE - if(!summoner) - to_chat(src, span_boldholoparasite("For some reason, somehow, you have no summoner. Please report this bug immediately.")) - else - to_chat(src, span_holoparasite("You are a [real_name], bound to serve [summoner.real_name].")) - to_chat(src, span_holoparasite("You are capable of manifesting or recalling to your master with the buttons on your HUD. You will also find a button to communicate with [summoner.p_them()] privately there.")) - to_chat(src, span_holoparasite("While personally invincible, you will die if [summoner.real_name] does, and any damage dealt to you will have a portion passed on to [summoner.p_them()] as you feed upon [summoner.p_them()] to sustain yourself.")) - to_chat(src, playstyle_string) - if(!guardian_color) - locked = TRUE - guardian_rename() - guardian_recolor() - locked = FALSE - -/mob/living/simple_animal/hostile/guardian/mind_initialize() - . = ..() - if(!summoner) - to_chat(src, span_boldholoparasite("For some reason, somehow, you have no summoner. Please report this bug immediately.")) - return - mind.enslave_mind_to_creator(summoner) //once our mind is created, we become enslaved to our summoner. cant be done in the first run of set_summoner, because by then we dont have a mind yet. - -/mob/living/simple_animal/hostile/guardian/proc/guardian_recolor() - if(!client) - return - var/chosen_guardian_color = input(src, "What would you like your color to be?","Choose Your Color","#ffffff") as color|null - if(!chosen_guardian_color) //redo proc until we get a color - to_chat(src, span_warning("Not a valid color, please try again.")) - guardian_recolor() - return - set_guardian_color(chosen_guardian_color) - -/mob/living/simple_animal/hostile/guardian/proc/set_guardian_color(colour) - guardian_color = colour - set_light_color(guardian_color) - var/mutable_appearance/guardian_color_overlay = guardian_overlays[GUARDIAN_COLOR_LAYER] - remove_overlay(GUARDIAN_COLOR_LAYER) - guardian_color_overlay.color = guardian_color - guardian_overlays[GUARDIAN_COLOR_LAYER] = guardian_color_overlay - apply_overlay(GUARDIAN_COLOR_LAYER) - -/mob/living/simple_animal/hostile/guardian/proc/guardian_rename() - if(!client) - return - var/new_name = sanitize_name(reject_bad_text(tgui_input_text(src, "What would you like your name to be?", "Choose Your Name", real_name, MAX_NAME_LEN))) - if(!new_name) //redo proc until we get a good name - to_chat(src, span_warning("Not a valid name, please try again.")) - guardian_rename() - return - to_chat(src, span_notice("Your new name [span_name("[new_name]")] anchors itself in your mind.")) - fully_replace_character_name(null, new_name) - -/mob/living/simple_animal/hostile/guardian/proc/on_summoner_death(mob/living/source) - SIGNAL_HANDLER - - cut_summoner() - if (!isnull(source.loc)) - forceMove(source.loc) - to_chat(src, span_danger("Your summoner has died!")) - visible_message(span_bolddanger("\The [src] dies along with its user!")) - source.visible_message(span_bolddanger("[source]'s body is completely consumed by the strain of sustaining [src]!")) - source.dust(drop_items = TRUE) - death(TRUE) - -/mob/living/simple_animal/hostile/guardian/proc/on_summoner_deletion(mob/living/source) - SIGNAL_HANDLER - - cut_summoner() - to_chat(src, span_danger("Your summoner is gone!")) - qdel(src) - -/mob/living/simple_animal/hostile/guardian/get_status_tab_items() - . += ..() - if(summoner) - var/healthpercent = health_percentage(summoner) - . += "Summoner Health: [round(healthpercent, 0.5)]%" - if(!COOLDOWN_FINISHED(src, manifest_cooldown)) - . += "Manifest/Recall Cooldown Remaining: [DisplayTimeText(COOLDOWN_TIMELEFT(src, manifest_cooldown))]" - -/mob/living/simple_animal/hostile/guardian/Move() //Returns to summoner if they move out of range - . = ..() - check_distance() - -/mob/living/simple_animal/hostile/guardian/proc/check_distance() - SIGNAL_HANDLER - - if(!summoner) - return - if(get_dist(get_turf(summoner), get_turf(src)) <= range) - return - to_chat(src, span_holoparasite("You moved out of range, and were pulled back! You can only move [range] meters from [summoner.real_name]!")) - visible_message(span_danger("\The [src] jumps back to its user.")) - new /obj/effect/temp_visual/guardian/phase/out(loc) - if(istype(summoner.loc, /obj/effect) || isnull(summoner.loc)) - recall(forced = TRUE) - return - forceMove(summoner.loc) - new /obj/effect/temp_visual/guardian/phase(loc) - -/mob/living/simple_animal/hostile/guardian/can_suicide() - return FALSE - -/mob/living/simple_animal/hostile/guardian/proc/is_deployed() - return loc != summoner || !summoner - -/mob/living/simple_animal/hostile/guardian/AttackingTarget(atom/attacked_target) - if(!is_deployed()) - to_chat(src, span_bolddanger("You must be manifested to attack!")) - return FALSE - else - return ..() - -/mob/living/simple_animal/hostile/guardian/death(gibbed) - if(!QDELETED(summoner)) - to_chat(summoner, span_bolddanger("Your [name] died somehow!")) - summoner.dust() - return ..() - -/mob/living/simple_animal/hostile/guardian/update_health_hud() - var/severity = 0 - var/healthpercent = health_percentage(summoner || src) - switch(healthpercent) - if(100 to INFINITY) - severity = 0 - if(85 to 100) - severity = 1 - if(70 to 85) - severity = 2 - if(55 to 70) - severity = 3 - if(40 to 55) - severity = 4 - if(25 to 40) - severity = 5 - else - severity = 6 - if(severity > 0) - overlay_fullscreen("brute", /atom/movable/screen/fullscreen/brute, severity) - else - clear_fullscreen("brute") - if(hud_used?.healths) - hud_used.healths.maptext = MAPTEXT("
    [round(healthpercent, 0.5)]%
    ") - -/mob/living/simple_animal/hostile/guardian/adjustHealth(amount, updating_health = TRUE, forced = FALSE) //The spirit is invincible, but passes on damage to the summoner - . = amount - if(!summoner) - return ..() - if(!is_deployed()) - return FALSE - summoner.adjustBruteLoss(amount) - if(amount < 0 || QDELETED(summoner)) - return - to_chat(summoner, span_bolddanger("Your [name] is under attack! You take damage!")) - summoner.visible_message(span_bolddanger("Blood sprays from [summoner] as [src] takes damage!")) - if(summoner.stat == UNCONSCIOUS || summoner.stat == HARD_CRIT) - to_chat(summoner, span_bolddanger("Your head pounds, you can't take the strain of sustaining [src] in this condition!")) - summoner.adjustOrganLoss(ORGAN_SLOT_BRAIN, amount * 0.5) - -/mob/living/simple_animal/hostile/guardian/ex_act(severity, target) - switch(severity) - if(EXPLODE_DEVASTATE) - investigate_log("has been gibbed by an explosion.", INVESTIGATE_DEATHS) - gib() - return TRUE - if(EXPLODE_HEAVY) - adjustBruteLoss(60) - if(EXPLODE_LIGHT) - adjustBruteLoss(30) - - return TRUE - -/mob/living/simple_animal/hostile/guardian/gib() - death(TRUE) - -/mob/living/simple_animal/hostile/guardian/dust(just_ash, drop_items, force) - death(TRUE) - -//HAND HANDLING - -/mob/living/simple_animal/hostile/guardian/equip_to_slot(obj/item/equipping, slot, initial = FALSE, redraw_mob = FALSE, indirect_action = FALSE) - if(!slot) - return FALSE - if(!istype(equipping)) - return FALSE - - . = TRUE - var/index = get_held_index_of_item(equipping) - if(index) - held_items[index] = null - update_held_items() - - if(equipping.pulledby) - equipping.pulledby.stop_pulling() - - equipping.screen_loc = null // will get moved if inventory is visible - equipping.forceMove(src) - SET_PLANE_EXPLICIT(equipping, ABOVE_HUD_PLANE, src) - equipping.on_equipped(src, slot) - -/mob/living/simple_animal/hostile/guardian/proc/apply_overlay(cache_index) - if((. = guardian_overlays[cache_index])) - add_overlay(.) - -/mob/living/simple_animal/hostile/guardian/proc/remove_overlay(cache_index) - var/overlay = guardian_overlays[cache_index] - if(overlay) - cut_overlay(overlay) - guardian_overlays[cache_index] = null - -/mob/living/simple_animal/hostile/guardian/regenerate_icons() - update_held_items() - -//MANIFEST, RECALL, TOGGLE MODE/LIGHT, SHOW TYPE - -/mob/living/simple_animal/hostile/guardian/proc/manifest(forced) - if(is_deployed() || isnull(summoner.loc) || istype(summoner.loc, /obj/effect) || (!COOLDOWN_FINISHED(src, manifest_cooldown) && !forced) || locked) - return FALSE - forceMove(summoner.loc) - new /obj/effect/temp_visual/guardian/phase(loc) - COOLDOWN_START(src, manifest_cooldown, 1 SECONDS) - reset_perspective() - manifest_effects() - return TRUE - -/mob/living/simple_animal/hostile/guardian/proc/recall(forced) - if(!is_deployed() || !summoner || (!COOLDOWN_FINISHED(src, manifest_cooldown) && !forced) || locked) - return FALSE - new /obj/effect/temp_visual/guardian/phase/out(loc) - forceMove(summoner) - COOLDOWN_START(src, manifest_cooldown, 1 SECONDS) - recall_effects() - return TRUE - -/mob/living/simple_animal/hostile/guardian/proc/manifest_effects() - return - -/mob/living/simple_animal/hostile/guardian/proc/recall_effects() - return - -/mob/living/simple_animal/hostile/guardian/proc/toggle_modes() - to_chat(src, span_bolddanger("You don't have another mode!")) - -/mob/living/simple_animal/hostile/guardian/proc/toggle_light() - if(!light_on) - to_chat(src, span_notice("You activate your light.")) - set_light_on(TRUE) - else - to_chat(src, span_notice("You deactivate your light.")) - set_light_on(FALSE) - - -/mob/living/simple_animal/hostile/guardian/verb/check_type() - set name = "Check Guardian Type" - set category = "Guardian" - set desc = "Check what type you are." - to_chat(src, playstyle_string) - -//COMMUNICATION - -/mob/living/simple_animal/hostile/guardian/proc/communicate() - if(!summoner) - return - var/sender_key = key - var/input = tgui_input_text(src, "Enter a message to tell your summoner", "Guardian") - if(sender_key != key || !input) //guardian got reset, or did not enter anything - return - - var/preliminary_message = span_boldholoparasite("[input]") //apply basic color/bolding - var/my_message = "[src]: [preliminary_message]" //add source, color source with the guardian's color - - to_chat(summoner, "[my_message]") - var/list/guardians = summoner.get_all_linked_holoparasites() - for(var/guardian in guardians) - to_chat(guardian, "[my_message]") - for(var/dead_mob in GLOB.dead_mob_list) - var/link = FOLLOW_LINK(dead_mob, src) - to_chat(dead_mob, "[link] [my_message]") - - src.log_talk(input, LOG_SAY, tag="guardian") - -/mob/living/proc/guardian_comm() - set name = "Communicate" - set category = "Guardian" - set desc = "Communicate telepathically with your guardian." - var/input = tgui_input_text(src, "Enter a message to tell your guardian", "Message") - if(!input) - return - - var/preliminary_message = span_boldholoparasite("[input]") //apply basic color/bolding - var/my_message = span_boldholoparasite("[src]: [preliminary_message]") //add source, color source with default grey... - - to_chat(src, "[my_message]") - var/list/guardians = get_all_linked_holoparasites() - for(var/mob/living/simple_animal/hostile/guardian/guardian as anything in guardians) - to_chat(guardian, "[src]: [preliminary_message]" ) - for(var/dead_mob in GLOB.dead_mob_list) - var/link = FOLLOW_LINK(dead_mob, src) - to_chat(dead_mob, "[link] [my_message]") - - src.log_talk(input, LOG_SAY, tag="guardian") - -//FORCE RECALL/RESET - -/mob/living/proc/guardian_recall() - set name = "Recall Guardian" - set category = "Guardian" - set desc = "Forcibly recall your guardian." - var/list/guardians = get_all_linked_holoparasites() - for(var/mob/living/simple_animal/hostile/guardian/guardian in guardians) - guardian.recall() - -/mob/living/proc/guardian_reset() - set name = "Reset Guardian Player (5 Minute Cooldown)" - set category = "Guardian" - set desc = "Re-rolls which ghost will control your Guardian. Can be used once per 5 minutes." - - var/list/guardians = get_all_linked_holoparasites() - for(var/mob/living/simple_animal/hostile/guardian/resetting_guardian as anything in guardians) - if(!COOLDOWN_FINISHED(resetting_guardian, resetting_cooldown)) - guardians -= resetting_guardian //clear out guardians that are already reset - - var/mob/living/simple_animal/hostile/guardian/chosen_guardian = tgui_input_list(src, "Pick the guardian you wish to reset", "Guardian Reset", sort_names(guardians)) - if(isnull(chosen_guardian)) - to_chat(src, span_holoparasite("You decide not to reset [length(guardians) > 1 ? "any of your guardians":"your guardian"].")) - return - - to_chat(src, span_holoparasite("You attempt to reset [chosen_guardian.real_name]'s personality...")) - var/list/mob/dead/observer/ghost_candidates = poll_ghost_candidates("Do you want to play as [src.real_name]'s Guardian Spirit?", ROLE_PAI, FALSE, 100) - if(!LAZYLEN(ghost_candidates)) - to_chat(src, span_holoparasite("There were no ghosts willing to take control of [chosen_guardian.real_name]. Looks like you're stuck with it for now.")) - return - - var/mob/dead/observer/candidate = pick(ghost_candidates) - to_chat(chosen_guardian, span_holoparasite("Your user reset you, and your body was taken over by a ghost. Looks like they weren't happy with your performance.")) - to_chat(src, span_boldholoparasite("Your [chosen_guardian.real_name] has been successfully reset.")) - message_admins("[key_name_admin(candidate)] has taken control of ([ADMIN_LOOKUPFLW(chosen_guardian)])") - chosen_guardian.ghostize(FALSE) - chosen_guardian.key = candidate.key - COOLDOWN_START(chosen_guardian, resetting_cooldown, 5 MINUTES) - chosen_guardian.guardian_rename() //give it a new color and name, to show it's a new person - chosen_guardian.guardian_recolor() - -////////parasite tracking/finding procs - -/// Returns a list of all holoparasites that has this mob as a summoner. -/mob/living/proc/get_all_linked_holoparasites() - RETURN_TYPE(/list) - var/list/all_parasites = list() - for(var/mob/living/simple_animal/hostile/guardian/stand as anything in GLOB.parasites) - if(stand.summoner != src) - continue - all_parasites += stand - return all_parasites - -/// Returns true if this holoparasite has the same summoner as the passed holoparasite. -/mob/living/simple_animal/hostile/guardian/proc/hasmatchingsummoner(mob/living/simple_animal/hostile/guardian/other_guardian) - return istype(other_guardian) && other_guardian.summoner == summoner diff --git a/code/modules/mob/living/simple_animal/guardian/guardian_creator.dm b/code/modules/mob/living/simple_animal/guardian/guardian_creator.dm deleted file mode 100644 index ebd5658f07f4b3..00000000000000 --- a/code/modules/mob/living/simple_animal/guardian/guardian_creator.dm +++ /dev/null @@ -1,214 +0,0 @@ -GLOBAL_LIST_INIT(guardian_radial_images, setup_guardian_radial()) - -/proc/setup_guardian_radial() - . = list() - for(var/mob/living/simple_animal/hostile/guardian/guardian_path as anything in subtypesof(/mob/living/simple_animal/hostile/guardian)) - var/datum/radial_menu_choice/option = new() - option.name = initial(guardian_path.creator_name) - option.image = image(icon = 'icons/hud/guardian.dmi', icon_state = initial(guardian_path.creator_icon)) - option.info = span_boldnotice(initial(guardian_path.creator_desc)) - .[guardian_path] = option - -/obj/item/guardiancreator - name = "enchanted deck of tarot cards" - desc = "An enchanted deck of tarot cards, rumored to be a source of unimaginable power." - icon = 'icons/obj/toys/playing_cards.dmi' - icon_state = "deck_tarot_full" - /// Are we used or in the process of being used? If yes, then we can't be used. - var/used = FALSE - /// The visuals we give to the guardian we spawn. - var/theme = GUARDIAN_THEME_MAGIC - /// The name of the guardian, for UI/message stuff. - var/mob_name = "Guardian Spirit" - /// Message sent when you use it. - var/use_message = span_holoparasite("You shuffle the deck...") - /// Message sent when it's already used. - var/used_message = span_holoparasite("All the cards seem to be blank now.") - /// Failure message if no ghost picks the holopara. - var/failure_message = span_boldholoparasite("..And draw a card! It's... blank? Maybe you should try again later.") - /// Failure message if we don't allow lings. - var/ling_failure = span_boldholoparasite("The deck refuses to respond to a souless creature such as you.") - /// Message sent if we successfully get a guardian. - var/success_message = span_holoparasite("%GUARDIAN has been summoned!") - /// If true, you are given a random guardian rather than picking from a selection. - var/random = TRUE - /// If true, you can have multiple guardians at the same time. - var/allowmultiple = FALSE - /// If true, lings can get guardians from this. - var/allowling = TRUE - /// If true, a dextrous guardian can get their own guardian, infinite chain! - var/allowguardian = FALSE - /// List of all the guardians this type can spawn. - var/list/possible_guardians = list( //default, has everything but dextrous - /mob/living/simple_animal/hostile/guardian/assassin, - /mob/living/simple_animal/hostile/guardian/charger, - /mob/living/simple_animal/hostile/guardian/explosive, - /mob/living/simple_animal/hostile/guardian/gaseous, - /mob/living/simple_animal/hostile/guardian/gravitokinetic, - /mob/living/simple_animal/hostile/guardian/lightning, - /mob/living/simple_animal/hostile/guardian/protector, - /mob/living/simple_animal/hostile/guardian/ranged, - /mob/living/simple_animal/hostile/guardian/standard, - /mob/living/simple_animal/hostile/guardian/support, - ) - -/obj/item/guardiancreator/attack_self(mob/living/user) - if(isguardian(user) && !allowguardian) - to_chat(user, span_holoparasite("[mob_name] chains are not allowed.")) - return - var/list/guardians = user.get_all_linked_holoparasites() - if(length(guardians) && !allowmultiple) - to_chat(user, span_holoparasite("You already have a [mob_name]!")) - return - if(user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling) && !allowling) - to_chat(user, ling_failure) - return - if(used) - to_chat(user, used_message) - return - var/list/radial_options = GLOB.guardian_radial_images.Copy() - for(var/possible_guardian in radial_options) - if(possible_guardian in possible_guardians) - continue - radial_options -= possible_guardian - var/mob/living/simple_animal/hostile/guardian/guardian_path - if(random) - guardian_path = pick(possible_guardians) - else - guardian_path = show_radial_menu(user, src, radial_options, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 42, require_near = TRUE) - if(!guardian_path) - return - used = TRUE - to_chat(user, use_message) - var/guardian_type_name = "a random" - if(!random) - guardian_type_name = "the " + lowertext(initial(guardian_path.creator_name)) - var/list/mob/dead/observer/candidates = poll_ghost_candidates("Do you want to play as [guardian_type_name] [mob_name] of [user.real_name]?", ROLE_PAI, FALSE, 100, POLL_IGNORE_HOLOPARASITE) - 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) - -/obj/item/guardiancreator/proc/spawn_guardian(mob/living/user, mob/dead/candidate, guardian_path) - if(QDELETED(user) || user.stat == DEAD) - return - var/list/guardians = user.get_all_linked_holoparasites() - if(length(guardians) && !allowmultiple) - to_chat(user, span_holoparasite("You already have a [mob_name]!") ) - used = FALSE - return - var/mob/living/simple_animal/hostile/guardian/summoned_guardian = new guardian_path(user, theme) - summoned_guardian.set_summoner(user, different_person = TRUE) - summoned_guardian.key = candidate.key - user.log_message("has summoned [key_name(summoned_guardian)], a [summoned_guardian.creator_name] holoparasite.", LOG_GAME) - summoned_guardian.log_message("was summoned as a [summoned_guardian.creator_name] holoparasite.", LOG_GAME) - to_chat(user, summoned_guardian.used_fluff_string) - to_chat(user, replacetext(success_message, "%GUARDIAN", mob_name)) - summoned_guardian.client?.init_verbs() - return summoned_guardian - -/obj/item/guardiancreator/proc/check_menu(mob/living/user) - if(!istype(user)) - return FALSE - if(user.incapacitated() || !user.is_holding(src) || used) - return FALSE - return TRUE - -/obj/item/guardiancreator/choose - random = FALSE - -/obj/item/guardiancreator/choose/all/Initialize(mapload) - . = ..() - possible_guardians = subtypesof(/mob/living/simple_animal/hostile/guardian) - -/obj/item/guardiancreator/choose/wizard - allowmultiple = TRUE - possible_guardians = list( //no support, but dextrous - /mob/living/simple_animal/hostile/guardian/assassin, - /mob/living/simple_animal/hostile/guardian/charger, - /mob/living/simple_animal/hostile/guardian/dextrous, - /mob/living/simple_animal/hostile/guardian/explosive, - /mob/living/simple_animal/hostile/guardian/gaseous, - /mob/living/simple_animal/hostile/guardian/gravitokinetic, - /mob/living/simple_animal/hostile/guardian/lightning, - /mob/living/simple_animal/hostile/guardian/protector, - /mob/living/simple_animal/hostile/guardian/ranged, - /mob/living/simple_animal/hostile/guardian/standard, - ) - -/obj/item/guardiancreator/choose/wizard/spawn_guardian(mob/living/user, mob/dead/candidate) - . = ..() - var/mob/guardian = . - if(!guardian) - return - var/datum/antagonist/wizard/antag_datum = user.mind.has_antag_datum(/datum/antagonist/wizard) - if(antag_datum) - if(!antag_datum.wiz_team) - antag_datum.create_wiz_team() - guardian.mind.add_antag_datum(/datum/antagonist/wizard_minion, antag_datum.wiz_team) - -/obj/item/guardiancreator/tech - name = "holoparasite injector" - desc = "It contains an alien nanoswarm of unknown origin. Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, it requires an organic host as a home base and source of fuel." - icon = 'icons/obj/medical/syringe.dmi' - icon_state = "combat_hypo" - theme = GUARDIAN_THEME_TECH - mob_name = "Holoparasite" - use_message = span_holoparasite("You start to power on the injector...") - used_message = span_holoparasite("The injector has already been used.") - failure_message = span_boldholoparasite("...ERROR. BOOT SEQUENCE ABORTED. AI FAILED TO INTIALIZE. PLEASE CONTACT SUPPORT OR TRY AGAIN LATER.") - ling_failure = span_boldholoparasite("The holoparasites recoil in horror. They want nothing to do with a creature like you.") - success_message = span_holoparasite("%GUARDIAN is now online!") - -/obj/item/guardiancreator/tech/choose - random = FALSE - -/obj/item/guardiancreator/tech/choose/all/Initialize(mapload) - . = ..() - possible_guardians = subtypesof(/mob/living/simple_animal/hostile/guardian) - -/obj/item/guardiancreator/tech/choose/traitor - allowling = FALSE - -/obj/item/guardiancreator/carp - name = "holocarp fishsticks" - desc = "Using the power of Carp'sie, you can catch a carp from byond the veil of Carpthulu, and bind it to your fleshy flesh form." - icon = 'icons/obj/food/meat.dmi' - icon_state = "fishfingers" - theme = GUARDIAN_THEME_CARP - mob_name = "Holocarp" - use_message = span_holoparasite("You put the fishsticks in your mouth...") - used_message = span_holoparasite("Someone's already taken a bite out of these fishsticks! Ew.") - failure_message = span_boldholoparasite("You couldn't catch any carp spirits from the seas of Lake Carp. Maybe there are none, maybe you fucked up.") - ling_failure = span_boldholoparasite("Carp'sie seems to not have taken you as the chosen one. Maybe it's because of your horrifying origin.") - success_message = span_holoparasite("%GUARDIAN has been caught!") - allowmultiple = TRUE - -/obj/item/guardiancreator/carp/choose - random = FALSE - -/obj/item/guardiancreator/miner - name = "dusty shard" - desc = "Seems to be a very old rock, may have originated from a strange meteor." - icon = 'icons/obj/mining_zones/artefacts.dmi' - icon_state = "dustyshard" - theme = GUARDIAN_THEME_MINER - mob_name = "Power Miner" - use_message = span_holoparasite("You pierce your skin with the shard...") - used_message = span_holoparasite("This shard seems to have lost all its power...") - failure_message = span_boldholoparasite("The shard hasn't reacted at all. Maybe try again later...") - ling_failure = span_boldholoparasite("The power of the shard seems to not react with your horrifying, mutated body.") - success_message = span_holoparasite("%GUARDIAN has appeared!") - possible_guardians = list( //limited to ones useful on lavaland - /mob/living/simple_animal/hostile/guardian/charger, - /mob/living/simple_animal/hostile/guardian/protector, - /mob/living/simple_animal/hostile/guardian/ranged, - /mob/living/simple_animal/hostile/guardian/standard, - /mob/living/simple_animal/hostile/guardian/support, - ) - -/obj/item/guardiancreator/miner/choose - random = FALSE diff --git a/code/modules/mob/living/simple_animal/guardian/types/assassin.dm b/code/modules/mob/living/simple_animal/guardian/types/assassin.dm deleted file mode 100644 index 340e92a5b42365..00000000000000 --- a/code/modules/mob/living/simple_animal/guardian/types/assassin.dm +++ /dev/null @@ -1,107 +0,0 @@ -//Assassin -/mob/living/simple_animal/hostile/guardian/assassin - melee_damage_lower = 15 - melee_damage_upper = 15 - attack_verb_continuous = "slashes" - attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bladeslice.ogg' - attack_vis_effect = ATTACK_EFFECT_SLASH - sharpness = SHARP_POINTY - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) - playstyle_string = span_holoparasite("As an assassin type you do medium damage and have no damage resistance, but can enter stealth, massively increasing the damage of your next attack and causing it to ignore armor. Stealth is broken when you attack or take damage.") - magic_fluff_string = span_holoparasite("..And draw the Space Ninja, a lethal, invisible assassin.") - tech_fluff_string = span_holoparasite("Boot sequence complete. Assassin modules loaded. Holoparasite swarm online.") - carp_fluff_string = span_holoparasite("CARP CARP CARP! Caught one! It's an assassin carp! Just when you thought it was safe to go back to the water... which is unhelpful, because we're in space.") - miner_fluff_string = span_holoparasite("You encounter... Glass, a sharp, fragile attacker.") - creator_name = "Assassin" - creator_desc = "Does medium damage and takes full damage, but can enter stealth, causing its next attack to do massive damage and ignore armor. However, it becomes briefly unable to recall after attacking from stealth." - creator_icon = "assassin" - toggle_button_type = /atom/movable/screen/guardian/toggle_mode/assassin - /// Is it in stealth mode? - var/toggle = FALSE - /// Time between going in stealth. - var/stealth_cooldown_time = 16 SECONDS - /// Damage added in stealth mode. - var/damage_bonus = 35 - /// Our wound bonus when in stealth mode. - var/stealth_wound_bonus = -20 //from -100, you can now wound! - /// Screen alert given when we are able to stealth. - var/atom/movable/screen/alert/canstealthalert - /// Screen alert given when we are in stealth. - var/atom/movable/screen/alert/instealthalert - /// Cooldown for the stealth toggle. - COOLDOWN_DECLARE(stealth_cooldown) - -/mob/living/simple_animal/hostile/guardian/assassin/get_status_tab_items() - . = ..() - if(!COOLDOWN_FINISHED(src, stealth_cooldown)) - . += "Stealth Cooldown Remaining: [DisplayTimeText(COOLDOWN_TIMELEFT(src, stealth_cooldown))]" - -/mob/living/simple_animal/hostile/guardian/assassin/AttackingTarget(atom/attacked_target) - . = ..() - if(.) - if(toggle && (isliving(target) || istype(target, /obj/structure/window) || istype(target, /obj/structure/grille))) - toggle_modes(forced = TRUE) - -/mob/living/simple_animal/hostile/guardian/assassin/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - . = ..() - if(. > 0 && toggle) - toggle_modes(forced = TRUE) - -/mob/living/simple_animal/hostile/guardian/assassin/recall_effects() - if(toggle) - toggle_modes(forced = TRUE) - -/mob/living/simple_animal/hostile/guardian/assassin/toggle_modes(forced = FALSE) - if(toggle) - melee_damage_lower -= damage_bonus - melee_damage_upper -= damage_bonus - armour_penetration = initial(armour_penetration) - wound_bonus = initial(wound_bonus) - obj_damage = initial(obj_damage) - environment_smash = initial(environment_smash) - alpha = initial(alpha) - if(!forced) - to_chat(src, span_bolddanger("You exit stealth.")) - else - visible_message(span_danger("\The [src] suddenly appears!")) - COOLDOWN_START(src, stealth_cooldown, stealth_cooldown_time) //we were forced out of stealth and go on cooldown - addtimer(CALLBACK(src, PROC_REF(updatestealthalert)), stealth_cooldown_time) - COOLDOWN_START(src, manifest_cooldown, 4 SECONDS) //can't recall for 4 seconds - updatestealthalert() - toggle = FALSE - else if(COOLDOWN_FINISHED(src, stealth_cooldown)) - if(!is_deployed()) - to_chat(src, span_bolddanger("You have to be manifested to enter stealth!")) - return - melee_damage_lower += damage_bonus - melee_damage_upper += damage_bonus - armour_penetration = 100 - wound_bonus = stealth_wound_bonus - obj_damage = 0 - environment_smash = ENVIRONMENT_SMASH_NONE - new /obj/effect/temp_visual/guardian/phase/out(get_turf(src)) - alpha = 15 - if(!forced) - to_chat(src, span_bolddanger("You enter stealth, empowering your next attack.")) - updatestealthalert() - toggle = TRUE - else if(!forced) - to_chat(src, span_bolddanger("You cannot yet enter stealth, wait another [DisplayTimeText(COOLDOWN_TIMELEFT(src, stealth_cooldown))]!")) - -/mob/living/simple_animal/hostile/guardian/assassin/proc/updatestealthalert() - if(!COOLDOWN_FINISHED(src, stealth_cooldown)) - clear_alert("instealth") - instealthalert = null - clear_alert("canstealth") - canstealthalert = null - return - if(toggle && !instealthalert) - instealthalert = throw_alert("instealth", /atom/movable/screen/alert/instealth) - clear_alert("canstealth") - canstealthalert = null - else if(!toggle && !canstealthalert) - canstealthalert = throw_alert("canstealth", /atom/movable/screen/alert/canstealth) - clear_alert("instealth") - instealthalert = null - diff --git a/code/modules/mob/living/simple_animal/guardian/types/charger.dm b/code/modules/mob/living/simple_animal/guardian/types/charger.dm deleted file mode 100644 index e1e0de66b00a82..00000000000000 --- a/code/modules/mob/living/simple_animal/guardian/types/charger.dm +++ /dev/null @@ -1,74 +0,0 @@ -//Charger -/mob/living/simple_animal/hostile/guardian/charger - melee_damage_lower = 15 - melee_damage_upper = 15 - ranged = TRUE //technically - ranged_message = "charges" - ranged_cooldown_time = 4 SECONDS - speed = -0.5 - damage_coeff = list(BRUTE = 0.75, BURN = 0.75, TOX = 0.75, CLONE = 0.75, STAMINA = 0, OXY = 0.75) - playstyle_string = span_holoparasite("As a charger type you do medium damage, have light damage resistance, move very fast, can be ridden, and can charge at a location, damaging any target hit and forcing them to drop any items they are holding.") - magic_fluff_string = span_holoparasite("..And draw the Hunter, an alien master of rapid assault.") - tech_fluff_string = span_holoparasite("Boot sequence complete. Charge modules loaded. Holoparasite swarm online.") - carp_fluff_string = span_holoparasite("CARP CARP CARP! Caught one! It's a charger carp, that likes running at people. But it doesn't have any legs...") - miner_fluff_string = span_holoparasite("You encounter... Titanium, a lightweight, agile fighter.") - creator_name = "Charger" - creator_desc = "Moves very fast, does medium damage on attack, can be ridden and can charge at targets, damaging the first target hit and forcing them to drop any items they are holding." - creator_icon = "charger" - /// Is it currently charging at something? - var/charging = FALSE - /// How much damage it does while charging. - var/charge_damage = 20 - -/mob/living/simple_animal/hostile/guardian/charger/Initialize(mapload, theme) - . = ..() - AddElement(/datum/element/ridable, /datum/component/riding/creature/guardian) - -/mob/living/simple_animal/hostile/guardian/charger/get_status_tab_items() - . = ..() - if(!COOLDOWN_FINISHED(src, ranged_cooldown)) - . += "Charge Cooldown Remaining: [DisplayTimeText(COOLDOWN_TIMELEFT(src, ranged_cooldown))]" - -/mob/living/simple_animal/hostile/guardian/charger/OpenFire(atom/target) - if(charging) - return - visible_message(span_danger("[src] [ranged_message] at [target]!")) - COOLDOWN_START(src, ranged_cooldown, ranged_cooldown_time) - clear_alert(ALERT_CHARGE) - addtimer(CALLBACK(src, PROC_REF(throw_alert), ALERT_CHARGE, /atom/movable/screen/alert/cancharge), ranged_cooldown_time) - Shoot(target) - -/mob/living/simple_animal/hostile/guardian/charger/Shoot(atom/targeted_atom) - charging = TRUE - playsound(src, 'sound/items/modsuit/loader_launch.ogg', 75, TRUE) - throw_at(targeted_atom, range, speed = 1.5, thrower = src, spin = FALSE, diagonals_first = TRUE, callback = CALLBACK(src, PROC_REF(charging_end))) - -/mob/living/simple_animal/hostile/guardian/charger/proc/charging_end() - charging = FALSE - -/mob/living/simple_animal/hostile/guardian/charger/Move() - if(charging) - new /obj/effect/temp_visual/decoy/fading(loc, src) - return ..() - -/mob/living/simple_animal/hostile/guardian/charger/check_distance() - if(!charging) - ..() - -/mob/living/simple_animal/hostile/guardian/charger/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(!charging) - return ..() - if(!isliving(hit_atom) || hit_atom == summoner || hasmatchingsummoner(hit_atom)) - return - var/mob/living/hit_mob = hit_atom - if(ishuman(hit_mob)) - var/mob/living/carbon/human/hit_human = hit_mob - if(hit_human.check_shields(src, charge_damage, name, attack_type = THROWN_PROJECTILE_ATTACK)) - return - hit_mob.drop_all_held_items() - hit_mob.visible_message(span_danger("[src] slams into [hit_mob]!"), span_userdanger("[src] slams into you!")) - hit_mob.apply_damage(charge_damage, BRUTE) - playsound(hit_mob, 'sound/effects/meteorimpact.ogg', 100, TRUE) - shake_camera(hit_mob, 4, 3) - shake_camera(src, 2, 3) - diff --git a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm deleted file mode 100644 index d2fbfc33c877d3..00000000000000 --- a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm +++ /dev/null @@ -1,90 +0,0 @@ -//Dextrous -/mob/living/simple_animal/hostile/guardian/dextrous - melee_damage_lower = 10 - melee_damage_upper = 10 - damage_coeff = list(BRUTE = 0.75, BURN = 0.75, TOX = 0.75, CLONE = 0.75, STAMINA = 0, OXY = 0.75) - playstyle_string = span_holoparasite("As a dextrous type you can hold items, store an item within yourself, and have medium damage resistance, but do low damage on attacks. Recalling and leashing will force you to drop unstored items!") - magic_fluff_string = span_holoparasite("..And draw the Drone, a dextrous master of construction and repair.") - tech_fluff_string = span_holoparasite("Boot sequence complete. Dextrous combat modules loaded. Holoparasite swarm online.") - carp_fluff_string = span_holoparasite("CARP CARP CARP! You caught one! It can hold stuff in its fins, sort of.") - miner_fluff_string = span_holoparasite("You encounter... Gold, a malleable constructor.") - creator_name = "Dextrous" - creator_desc = "Does low damage on attack, but is capable of holding items and storing a single item within it. It will drop items held in its hands when it recalls, but it will retain the stored item." - creator_icon = "dextrous" - dextrous = TRUE - hud_type = /datum/hud/dextrous/guardian - held_items = list(null, null) - var/obj/item/internal_storage //what we're storing within ourself - -/mob/living/simple_animal/hostile/guardian/dextrous/death(gibbed) - . = ..() - if(internal_storage) - dropItemToGround(internal_storage) - -/mob/living/simple_animal/hostile/guardian/dextrous/examine(mob/user) - . = ..() - if(internal_storage && !(internal_storage.item_flags & ABSTRACT)) - . += span_info("It is holding [internal_storage.get_examine_string(user)] in its internal storage.") - -/mob/living/simple_animal/hostile/guardian/dextrous/recall_effects() - drop_all_held_items() - -/mob/living/simple_animal/hostile/guardian/dextrous/check_distance() - if(!summoner || get_dist(get_turf(summoner), get_turf(src)) <= range) - return - drop_all_held_items() - ..() //lose items, then return - -//SLOT HANDLING BULLSHIT FOR INTERNAL STORAGE -/mob/living/simple_animal/hostile/guardian/dextrous/doUnEquip(obj/item/equipped_item, force, newloc, no_move, invdrop = TRUE, silent = FALSE) - if(..()) - update_held_items() - if(equipped_item == internal_storage) - internal_storage = null - update_inv_internal_storage() - return TRUE - return FALSE - -/mob/living/simple_animal/hostile/guardian/dextrous/can_equip(obj/item/equipped_item, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE, ignore_equipped = FALSE) - switch(slot) - if(ITEM_SLOT_DEX_STORAGE) - if(internal_storage) - return FALSE - return TRUE - ..() - -/mob/living/simple_animal/hostile/guardian/dextrous/get_item_by_slot(slot_id) - if(slot_id == ITEM_SLOT_DEX_STORAGE) - return internal_storage - return ..() - -/mob/living/simple_animal/hostile/guardian/dextrous/get_slot_by_item(obj/item/looking_for) - if(internal_storage == looking_for) - return ITEM_SLOT_DEX_STORAGE - return ..() - -/mob/living/simple_animal/hostile/guardian/dextrous/equip_to_slot(obj/item/equipping, slot, initial = FALSE, redraw_mob = FALSE, indirect_action = FALSE) - if(!..()) - return - - switch(slot) - if(ITEM_SLOT_DEX_STORAGE) - internal_storage = equipping - update_inv_internal_storage() - else - to_chat(src, span_danger("You are trying to equip this item to an unsupported inventory slot. Report this to a coder!")) - -/mob/living/simple_animal/hostile/guardian/dextrous/getBackSlot() - return ITEM_SLOT_DEX_STORAGE - -/mob/living/simple_animal/hostile/guardian/dextrous/getBeltSlot() - return ITEM_SLOT_DEX_STORAGE - -/mob/living/simple_animal/hostile/guardian/dextrous/proc/update_inv_internal_storage() - if(internal_storage && client && hud_used?.hud_shown) - internal_storage.screen_loc = ui_id - client.screen += internal_storage - -/mob/living/simple_animal/hostile/guardian/dextrous/regenerate_icons() - ..() - update_inv_internal_storage() diff --git a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm deleted file mode 100644 index 6fbc61ee45886c..00000000000000 --- a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm +++ /dev/null @@ -1,72 +0,0 @@ -#define UNREGISTER_BOMB_SIGNALS(A) \ - do { \ - UnregisterSignal(A, boom_signals); \ - UnregisterSignal(A, COMSIG_ATOM_EXAMINE); \ - } while (0) - -//Explosive -/mob/living/simple_animal/hostile/guardian/explosive - melee_damage_lower = 15 - melee_damage_upper = 15 - damage_coeff = list(BRUTE = 0.6, BURN = 0.6, TOX = 0.6, CLONE = 0.6, STAMINA = 0, OXY = 0.6) - range = 13 - playstyle_string = span_holoparasite("As an explosive type, you have moderate close combat abilities and are capable of converting nearby items and objects into disguised bombs via right-click.") - magic_fluff_string = span_holoparasite("..And draw the Scientist, master of explosive death.") - tech_fluff_string = span_holoparasite("Boot sequence complete. Explosive modules active. Holoparasite swarm online.") - carp_fluff_string = span_holoparasite("CARP CARP CARP! Caught one! It's an explosive carp! Boom goes the fishy.") - miner_fluff_string = span_holoparasite("You encounter... Gibtonite, an explosive fighter.") - creator_name = "Explosive" - creator_desc = "High damage resist and medium power attack. Can turn any object, including objects too large to pick up, into a bomb, dealing explosive damage to the next person to touch it. The object will return to normal after the trap is triggered or after a delay." - creator_icon = "explosive" - /// Static list of signals that activate the boom. - var/static/list/boom_signals = list(COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_BUMPED, COMSIG_ATOM_ATTACK_HAND) - /// After this amount of time passses, boom deactivates. - var/decay_time = 1 MINUTES - /// Time between bombs. - var/bomb_cooldown_time = 20 SECONDS - /// The cooldown timer between bombs. - COOLDOWN_DECLARE(bomb_cooldown) - -/mob/living/simple_animal/hostile/guardian/explosive/get_status_tab_items() - . = ..() - if(!COOLDOWN_FINISHED(src, bomb_cooldown)) - . += "Bomb Cooldown Remaining: [DisplayTimeText(COOLDOWN_TIMELEFT(src, bomb_cooldown))]" - -/mob/living/simple_animal/hostile/guardian/explosive/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) - if(LAZYACCESS(modifiers, RIGHT_CLICK) && proximity_flag && isobj(attack_target)) - plant_bomb(attack_target) - return - return ..() - -/mob/living/simple_animal/hostile/guardian/explosive/proc/plant_bomb(obj/planting_on) - if(!COOLDOWN_FINISHED(src, bomb_cooldown)) - to_chat(src, span_bolddanger("Your powers are on cooldown! You must wait [DisplayTimeText(COOLDOWN_TIMELEFT(src, bomb_cooldown))] between bombs.")) - return - to_chat(src, span_bolddanger("Success! Bomb armed!")) - COOLDOWN_START(src, bomb_cooldown, bomb_cooldown_time) - RegisterSignal(planting_on, COMSIG_ATOM_EXAMINE, PROC_REF(display_examine)) - RegisterSignals(planting_on, boom_signals, PROC_REF(kaboom)) - addtimer(CALLBACK(src, PROC_REF(disable), planting_on), decay_time, TIMER_UNIQUE|TIMER_OVERRIDE) - -/mob/living/simple_animal/hostile/guardian/explosive/proc/kaboom(atom/source, mob/living/explodee) - SIGNAL_HANDLER - if(!istype(explodee)) - return - if(explodee == src || explodee == summoner || hasmatchingsummoner(explodee)) - return - to_chat(explodee, span_bolddanger("[source] was boobytrapped!")) - to_chat(src, span_bolddanger("Success! Your trap caught [explodee]")) - playsound(source, 'sound/effects/explosion2.ogg', 200, TRUE) - new /obj/effect/temp_visual/explosion(get_turf(source)) - EX_ACT(explodee, EXPLODE_HEAVY) - UNREGISTER_BOMB_SIGNALS(source) - -/mob/living/simple_animal/hostile/guardian/explosive/proc/disable(obj/rigged_obj) - to_chat(src, span_bolddanger("Failure! Your trap didn't catch anyone this time.")) - UNREGISTER_BOMB_SIGNALS(rigged_obj) - -/mob/living/simple_animal/hostile/guardian/explosive/proc/display_examine(datum/source, mob/user, text) - SIGNAL_HANDLER - text += span_holoparasite("It glows with a strange light!") - -#undef UNREGISTER_BOMB_SIGNALS diff --git a/code/modules/mob/living/simple_animal/guardian/types/gaseous.dm b/code/modules/mob/living/simple_animal/guardian/types/gaseous.dm deleted file mode 100644 index 7808f8a6b482bd..00000000000000 --- a/code/modules/mob/living/simple_animal/guardian/types/gaseous.dm +++ /dev/null @@ -1,103 +0,0 @@ -//Gaseous -/mob/living/simple_animal/hostile/guardian/gaseous - melee_damage_lower = 10 - melee_damage_upper = 10 - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 0) - range = 7 - playstyle_string = span_holoparasite("As a gaseous type, you have only light damage resistance, but you can expel gas in an area. In addition, your punches cause sparks, and you make your summoner inflammable.") - magic_fluff_string = span_holoparasite("..And draw the Atmospheric Technician, flooding the area with gas!") - tech_fluff_string = span_holoparasite("Boot sequence complete. Atmospheric modules activated. Holoparasite swarm online.") - carp_fluff_string = span_holoparasite("CARP CARP CARP! You caught one! OH GOD, EVERYTHING'S ON FIRE. Except you and the fish.") - miner_fluff_string = span_holoparasite("You encounter... Plasma, the bringer of fire.") - creator_name = "Gaseous" - creator_desc = "Creates sparks on touch and continuously expels a gas of its choice. Automatically extinguishes the user if they catch on fire." - creator_icon = "gaseous" - toggle_button_type = /atom/movable/screen/guardian/toggle_mode/gases - /// Gas being expelled. - var/expelled_gas = null - /// Rate of temperature stabilization per second. - var/temp_stabilization_rate = 0.1 - /// Possible gases to expel, with how much moles they create. - var/static/list/possible_gases = list( - /datum/gas/oxygen = 50, - /datum/gas/nitrogen = 750, //overpressurizing is hard!. - /datum/gas/water_vapor = 1, //you need incredibly little water vapor for the effects to kick in - /datum/gas/nitrous_oxide = 15, - /datum/gas/carbon_dioxide = 50, - /datum/gas/plasma = 3, - /datum/gas/bz = 10, - ) - /// Gas colors, used for the particles. - var/static/list/gas_colors = list( - /datum/gas/oxygen = "#63BFDD", //color of frozen oxygen - /datum/gas/nitrogen = "#777777", //grey (grey) - /datum/gas/water_vapor = "#96ADCF", //water is slightly blue - /datum/gas/nitrous_oxide = "#FEFEFE", //white like the sprite - /datum/gas/carbon_dioxide = "#222222", //black like coal - /datum/gas/plasma = "#B233CC", //color of the plasma sprite - /datum/gas/bz = "#FAFF00", //color of the bz metabolites reagent - ) - -/mob/living/simple_animal/hostile/guardian/gaseous/Initialize(mapload, theme) - . = ..() - RegisterSignal(src, COMSIG_ATOM_PRE_PRESSURE_PUSH, PROC_REF(stop_pressure)) - -/mob/living/simple_animal/hostile/guardian/gaseous/AttackingTarget(atom/attacked_target) - . = ..() - if(!isliving(target)) - return - do_sparks(1, TRUE, target) - -/mob/living/simple_animal/hostile/guardian/gaseous/recall(forced) - expelled_gas = null - QDEL_NULL(particles) //need to delete before putting in another object - . = ..() - if(. && summoner) - UnregisterSignal(summoner, COMSIG_ATOM_PRE_PRESSURE_PUSH) - -/mob/living/simple_animal/hostile/guardian/gaseous/manifest(forced) - . = ..() - if(. && summoner) - RegisterSignal(summoner, COMSIG_ATOM_PRE_PRESSURE_PUSH, PROC_REF(stop_pressure)) - -/mob/living/simple_animal/hostile/guardian/gaseous/Life(seconds_per_tick, times_fired) - . = ..() - if(summoner) - summoner.extinguish_mob() - summoner.set_fire_stacks(0, remove_wet_stacks = FALSE) - summoner.adjust_bodytemperature(get_temp_change_amount((summoner.get_body_temp_normal() - summoner.bodytemperature), temp_stabilization_rate * seconds_per_tick)) - if(!expelled_gas) - return - var/datum/gas_mixture/mix_to_spawn = new() - mix_to_spawn.add_gas(expelled_gas) - mix_to_spawn.gases[expelled_gas][MOLES] = possible_gases[expelled_gas] * seconds_per_tick - mix_to_spawn.temperature = T20C - var/turf/open/our_turf = get_turf(src) - our_turf.assume_air(mix_to_spawn) - -/mob/living/simple_animal/hostile/guardian/gaseous/toggle_modes() - var/list/gases = list("None") - for(var/datum/gas/gas as anything in possible_gases) - gases[initial(gas.name)] = gas - var/picked_gas = tgui_input_list(src, "Select a gas to expel.", "Gas Producer", gases) - if(picked_gas == "None") - expelled_gas = null - QDEL_NULL(particles) - to_chat(src, span_notice("You stopped expelling gas.")) - return - var/gas_type = gases[picked_gas] - if(!picked_gas || !gas_type) - return - to_chat(src, span_bolddanger("You are now expelling [picked_gas].")) - investigate_log("set their gas type to [picked_gas].", INVESTIGATE_ATMOS) - expelled_gas = gas_type - if(!particles) - particles = new /particles/smoke/steam() - particles.position = list(-1, 8, 0) - particles.fadein = 5 - particles.height = 200 - particles.color = gas_colors[gas_type] - -/mob/living/simple_animal/hostile/guardian/gaseous/proc/stop_pressure(datum/source) - SIGNAL_HANDLER - return COMSIG_ATOM_BLOCKS_PRESSURE diff --git a/code/modules/mob/living/simple_animal/guardian/types/gravitokinetic.dm b/code/modules/mob/living/simple_animal/guardian/types/gravitokinetic.dm deleted file mode 100644 index fe6a0ec58563d3..00000000000000 --- a/code/modules/mob/living/simple_animal/guardian/types/gravitokinetic.dm +++ /dev/null @@ -1,91 +0,0 @@ -//gravitokinetic -/mob/living/simple_animal/hostile/guardian/gravitokinetic - melee_damage_lower = 15 - melee_damage_upper = 15 - damage_coeff = list(BRUTE = 0.75, BURN = 0.75, TOX = 0.75, CLONE = 0.75, STAMINA = 0, OXY = 0.75) - playstyle_string = span_holoparasite("As a gravitokinetic type, you can right-click to make the gravity on the ground stronger, and punching applies this effect to a target.") - magic_fluff_string = span_holoparasite("..And draw the Singularity, an anomalous force of terror.") - tech_fluff_string = span_holoparasite("Boot sequence complete. Gravitokinetic modules loaded. Holoparasite swarm online.") - carp_fluff_string = span_holoparasite("CARP CARP CARP! Caught one! It's a gravitokinetic carp! Now do you understand the gravity of the situation?") - miner_fluff_string = span_holoparasite("You encounter... Bananium, a master of gravity business.") - creator_name = "Gravitokinetic" - creator_desc = "Attacks will apply crushing gravity to the target. Can target the ground as well to slow targets advancing on you, but this will affect the user." - creator_icon = "gravitokinetic" - /// Targets we have applied our effects on. - var/list/gravity_targets = list() - /// Distance in which our ability works - var/gravity_power_range = 10 - /// Gravity added on punches. - var/punch_gravity = 5 - /// Gravity added to turfs. - var/turf_gravity = 3 - -/mob/living/simple_animal/hostile/guardian/gravitokinetic/Initialize(mapload, theme) - . = ..() - AddElement(/datum/element/forced_gravity, 1) - -/mob/living/simple_animal/hostile/guardian/gravitokinetic/set_summoner(mob/to_who, different_person) - . = ..() - to_who.AddElement(/datum/element/forced_gravity, 1) - -/mob/living/simple_animal/hostile/guardian/gravitokinetic/cut_summoner(different_person) - summoner.RemoveElement(/datum/element/forced_gravity, 1) - return ..() - -///Removes gravity from affected mobs upon guardian death to prevent permanent effects -/mob/living/simple_animal/hostile/guardian/gravitokinetic/death() - . = ..() - for(var/gravity_target in gravity_targets) - remove_gravity(gravity_target) - -/mob/living/simple_animal/hostile/guardian/gravitokinetic/AttackingTarget(atom/attacked_target) - . = ..() - if(isliving(target) && !hasmatchingsummoner(attacked_target) && target != src && target != summoner && !gravity_targets[target]) - to_chat(src, span_bolddanger("Your punch has applied heavy gravity to [target]!")) - add_gravity(target, punch_gravity) - to_chat(target, span_userdanger("Everything feels really heavy!")) - -/mob/living/simple_animal/hostile/guardian/gravitokinetic/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) - if(LAZYACCESS(modifiers, RIGHT_CLICK) && proximity_flag && !gravity_targets[target]) - slam_turf(attack_target) - return - return ..() - -/mob/living/simple_animal/hostile/guardian/gravitokinetic/proc/slam_turf(turf/open/slammed) - if(!isopenturf(slammed) || isgroundlessturf(slammed)) - to_chat(src, span_warning("You cannot add gravity to this!")) - return - visible_message(span_danger("[src] slams their fist into the [slammed]!"), span_notice("You modify the gravity of the [slammed].")) - do_attack_animation(slammed) - add_gravity(slammed, turf_gravity) - -/mob/living/simple_animal/hostile/guardian/gravitokinetic/recall_effects() - to_chat(src, span_bolddanger("You have released your gravitokinetic powers!")) - for(var/gravity_target in gravity_targets) - remove_gravity(gravity_target) - -/mob/living/simple_animal/hostile/guardian/gravitokinetic/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) - . = ..() - for(var/gravity_target in gravity_targets) - if(get_dist(src, gravity_target) > gravity_power_range) - remove_gravity(gravity_target) - -/mob/living/simple_animal/hostile/guardian/gravitokinetic/proc/add_gravity(atom/target, new_gravity = 3) - if(gravity_targets[target]) - return - target.AddElement(/datum/element/forced_gravity, new_gravity) - gravity_targets[target] = new_gravity - RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(distance_check)) - playsound(src, 'sound/effects/gravhit.ogg', 100, TRUE) - -/mob/living/simple_animal/hostile/guardian/gravitokinetic/proc/remove_gravity(atom/target) - if(isnull(gravity_targets[target])) - return - UnregisterSignal(target, COMSIG_MOVABLE_MOVED) - target.RemoveElement(/datum/element/forced_gravity, gravity_targets[target]) - gravity_targets -= target - -/mob/living/simple_animal/hostile/guardian/gravitokinetic/proc/distance_check(atom/movable/moving_target, old_loc, dir, forced) - SIGNAL_HANDLER - if(get_dist(src, moving_target) > gravity_power_range) - remove_gravity(moving_target) diff --git a/code/modules/mob/living/simple_animal/guardian/types/lightning.dm b/code/modules/mob/living/simple_animal/guardian/types/lightning.dm deleted file mode 100644 index 9739445f7c9c78..00000000000000 --- a/code/modules/mob/living/simple_animal/guardian/types/lightning.dm +++ /dev/null @@ -1,111 +0,0 @@ -/obj/effect/ebeam/chain - name = "lightning chain" - layer = LYING_MOB_LAYER - plane = GAME_PLANE_FOV_HIDDEN - -//Lightning -/mob/living/simple_animal/hostile/guardian/lightning - melee_damage_lower = 7 - melee_damage_upper = 7 - attack_verb_continuous = "shocks" - attack_verb_simple = "shock" - melee_damage_type = BURN - attack_sound = 'sound/machines/defib_zap.ogg' - damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7) - range = 7 - playstyle_string = span_holoparasite("As a lightning type, you will apply lightning chains to targets on attack and have a lightning chain to your summoner. Lightning chains will shock anyone near them.") - magic_fluff_string = span_holoparasite("..And draw the Tesla, a shocking, lethal source of power.") - tech_fluff_string = span_holoparasite("Boot sequence complete. Lightning modules active. Holoparasite swarm online.") - carp_fluff_string = span_holoparasite("CARP CARP CARP! Caught one! It's a lightning carp! Everyone else goes zap zap.") - miner_fluff_string = span_holoparasite("You encounter... Iron, a conductive master of lightning.") - creator_name = "Lightning" - creator_desc = "Attacks apply lightning chains to targets. Has a lightning chain to the user. Lightning chains shock everything near them, doing constant damage." - creator_icon = "lightning" - /// Beam datum of our lightning chain to the summoner. - var/datum/beam/summonerchain - /// List of all lightning chains attached to enemies. - var/list/enemychains = list() - /// Amount of shocks we've given through the chain to the summoner. - var/successfulshocks = 0 - /// Cooldown between shocks. - COOLDOWN_DECLARE(shock_cooldown) - -/mob/living/simple_animal/hostile/guardian/lightning/AttackingTarget(atom/attacked_target) - . = ..() - if(!. || !isliving(target) || target == summoner || hasmatchingsummoner(target)) - return - cleardeletedchains() - for(var/datum/beam/chain as anything in enemychains) - if(chain.target == target) - return //oh this guy already HAS a chain, let's not chain again - if(length(enemychains) > 2) - var/datum/beam/enemy_chain = pick(enemychains) - qdel(enemy_chain) - enemychains -= enemy_chain - enemychains += Beam(target, "lightning[rand(1,12)]", maxdistance=7, beam_type=/obj/effect/ebeam/chain) - -/mob/living/simple_animal/hostile/guardian/lightning/manifest_effects() - START_PROCESSING(SSfastprocess, src) - if(summoner) - summonerchain = Beam(summoner, "lightning[rand(1,12)]", beam_type=/obj/effect/ebeam/chain) - -/mob/living/simple_animal/hostile/guardian/lightning/recall_effects() - STOP_PROCESSING(SSfastprocess, src) - removechains() - -/mob/living/simple_animal/hostile/guardian/lightning/process(seconds_per_tick) - if(!COOLDOWN_FINISHED(src, shock_cooldown)) - return - if(successfulshocks > 5) - successfulshocks = 0 - if(shockallchains()) - successfulshocks++ - COOLDOWN_START(src, shock_cooldown, 0.3 SECONDS) - -/mob/living/simple_animal/hostile/guardian/lightning/proc/cleardeletedchains() - if(summonerchain && QDELETED(summonerchain)) - summonerchain = null - for(var/datum/chain as anything in enemychains) - if(QDELETED(chain)) - enemychains -= chain - -/mob/living/simple_animal/hostile/guardian/lightning/proc/shockallchains() - . = 0 - cleardeletedchains() - if(summonerchain) - . += chainshock(summonerchain) - for(var/chain in enemychains) - . += chainshock(chain) - -/mob/living/simple_animal/hostile/guardian/lightning/proc/removechains() - QDEL_NULL(summonerchain) - for(var/chain in enemychains) - qdel(chain) - enemychains = list() - -/mob/living/simple_animal/hostile/guardian/lightning/proc/chainshock(datum/beam/B) //fuck you, fuck this - . = 0 - var/list/turfs = list() - for(var/E in B.elements) - var/obj/effect/ebeam/chainpart = E - if(chainpart && chainpart.x && chainpart.y && chainpart.z) - var/turf/T = get_turf_pixel(chainpart) - turfs |= T - if(T != get_turf(B.origin) && T != get_turf(B.target)) - for(var/turf/TU in circle_range(T, 1)) - turfs |= TU - for(var/turf in turfs) - var/turf/T = turf - for(var/mob/living/L in T) - if(L.stat != DEAD && L != src && L != summoner) - if(hasmatchingsummoner(L)) //if the summoner matches don't hurt them - continue - if(successfulshocks > 4) - L.electrocute_act(0) - L.visible_message( - span_danger("[L] was shocked by the lightning chain!"), \ - span_userdanger("You are shocked by the lightning chain!"), \ - span_hear("You hear a heavy electrical crack.") \ - ) - L.adjustFireLoss(1.2) //adds up very rapidly - . = 1 diff --git a/code/modules/mob/living/simple_animal/guardian/types/protector.dm b/code/modules/mob/living/simple_animal/guardian/types/protector.dm deleted file mode 100644 index 4809c3dc1c6bb9..00000000000000 --- a/code/modules/mob/living/simple_animal/guardian/types/protector.dm +++ /dev/null @@ -1,78 +0,0 @@ -//Protector -/mob/living/simple_animal/hostile/guardian/protector - melee_damage_lower = 15 - melee_damage_upper = 15 - range = 15 //worse for it due to how it leashes - damage_coeff = list(BRUTE = 0.4, BURN = 0.4, TOX = 0.4, CLONE = 0.4, STAMINA = 0, OXY = 0.4) - playstyle_string = span_holoparasite("As a protector type you cause your summoner to leash to you instead of you leashing to them and have two modes; Combat Mode, where you do and take medium damage, and Protection Mode, where you do and take almost no damage, but move slightly slower.") - magic_fluff_string = span_holoparasite("..And draw the Guardian, a stalwart protector that never leaves the side of its charge.") - tech_fluff_string = span_holoparasite("Boot sequence complete. Protector modules loaded. Holoparasite swarm online.") - carp_fluff_string = span_holoparasite("CARP CARP CARP! You caught one! Wait, no... it caught you! The fisher has become the fishy.") - miner_fluff_string = span_holoparasite("You encounter... Uranium, a very resistant guardian.") - creator_name = "Protector" - creator_desc = "Causes you to teleport to it when out of range, unlike other parasites. Has two modes; Combat, where it does and takes medium damage, and Protection, where it does and takes almost no damage but moves slightly slower." - creator_icon = "protector" - toggle_button_type = /atom/movable/screen/guardian/toggle_mode - /// Damage removed in protecting mode. - var/damage_penalty = 13 - /// Is it in protecting mode? - var/toggle = FALSE - /// Overlay of our protection shield. - var/mutable_appearance/shield_overlay - -/mob/living/simple_animal/hostile/guardian/protector/ex_act(severity) - if(severity >= EXPLODE_DEVASTATE) - adjustBruteLoss(400) //if in protector mode, will do 20 damage and not actually necessarily kill the summoner - else - . = ..() - if(QDELETED(src)) - return FALSE - if(toggle) - visible_message(span_danger("The explosion glances off [src]'s energy shielding!")) - - return TRUE - -/mob/living/simple_animal/hostile/guardian/protector/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - . = ..() - if(. > 0 && toggle) - var/image/flash_overlay = new('icons/effects/effects.dmi', src, "shield-flash", dir = pick(GLOB.cardinals)) - flash_overlay.color = guardian_color - flick_overlay_view(flash_overlay, 0.5 SECONDS) - -/mob/living/simple_animal/hostile/guardian/protector/toggle_modes() - if(COOLDOWN_FINISHED(src, manifest_cooldown)) - return - COOLDOWN_START(src, manifest_cooldown, 1 SECONDS) - if(toggle) - cut_overlay(shield_overlay) - melee_damage_lower += damage_penalty - melee_damage_upper += damage_penalty - speed = initial(speed) - damage_coeff = list(BRUTE = 0.4, BURN = 0.4, TOX = 0.4, CLONE = 0.4, STAMINA = 0, OXY = 0.4) - to_chat(src, span_bolddanger("You switch to combat mode.")) - toggle = FALSE - else - if(!shield_overlay) - shield_overlay = mutable_appearance('icons/effects/effects.dmi', "shield-grey") - shield_overlay.color = guardian_color - add_overlay(shield_overlay) - melee_damage_lower -= damage_penalty - melee_damage_upper -= damage_penalty - speed = 1 - damage_coeff = list(BRUTE = 0.05, BURN = 0.05, TOX = 0.05, CLONE = 0.05, STAMINA = 0, OXY = 0.05) //damage? what's damage? - to_chat(src, span_bolddanger("You switch to protection mode.")) - toggle = TRUE - -/mob/living/simple_animal/hostile/guardian/protector/check_distance() //snap to what? snap to the guardian! - if(!summoner || get_dist(summoner, src) <= range) - return - if(istype(summoner.loc, /obj/effect)) - to_chat(src, span_holoparasite("You moved out of range, and were pulled back! You can only move [range] meters from [summoner.real_name]!")) - visible_message(span_danger("\The [src] jumps back to its user.")) - recall(forced = TRUE) - return - to_chat(summoner, span_holoparasite("You moved out of range, and were pulled back! You can only move [range] meters from [real_name]!")) - summoner.visible_message(span_danger("\The [summoner] jumps back to [summoner.p_their()] protector.")) - new /obj/effect/temp_visual/guardian/phase/out(get_turf(summoner)) - summoner.forceMove(get_turf(src)) - new /obj/effect/temp_visual/guardian/phase(get_turf(summoner)) diff --git a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm deleted file mode 100644 index 0cb7303e26a560..00000000000000 --- a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm +++ /dev/null @@ -1,182 +0,0 @@ -//Ranged -/obj/projectile/guardian - name = "crystal spray" - icon_state = "guardian" - damage = 5 - damage_type = BRUTE - armour_penetration = 100 - -/mob/living/simple_animal/hostile/guardian/ranged - combat_mode = FALSE - friendly_verb_continuous = "quietly assesses" - friendly_verb_simple = "quietly assess" - melee_damage_lower = 10 - melee_damage_upper = 10 - damage_coeff = list(BRUTE = 0.9, BURN = 0.9, TOX = 0.9, CLONE = 0.9, STAMINA = 0, OXY = 0.9) - projectiletype = /obj/projectile/guardian - ranged_cooldown_time = 1 //fast! - projectilesound = 'sound/effects/hit_on_shattered_glass.ogg' - ranged = 1 - range = 13 - playstyle_string = span_holoparasite("As a ranged type, you have only light damage resistance, but are capable of spraying shards of crystal at incredibly high speed. You can also deploy surveillance snares to monitor enemy movement. Finally, you can switch to scout mode, in which you can't attack, but can move without limit.") - magic_fluff_string = span_holoparasite("..And draw the Sentinel, an alien master of ranged combat.") - tech_fluff_string = span_holoparasite("Boot sequence complete. Ranged combat modules active. Holoparasite swarm online.") - carp_fluff_string = span_holoparasite("CARP CARP CARP! Caught one, it's a ranged carp. This fishy can watch people pee in the ocean.") - miner_fluff_string = span_holoparasite("You encounter... Diamond, a powerful projectile thrower.") - creator_name = "Ranged" - creator_desc = "Has two modes. Ranged; which fires a constant stream of weak, armor-ignoring projectiles. Scout; where it cannot attack, but can move through walls and is quite hard to see. Can lay surveillance snares, which alert it when crossed, in either mode." - creator_icon = "ranged" - see_invisible = SEE_INVISIBLE_LIVING - toggle_button_type = /atom/movable/screen/guardian/toggle_mode - /// List of all deployed snares. - var/list/snares = list() - /// Is it in scouting mode? - var/toggle = FALSE - /// Maximum snares deployed at once. - var/max_snares = 6 - /// Lower damage before scouting. - var/previous_lower_damage = 0 - /// Upper damage before scouting. - var/previous_upper_damage = 0 - -/mob/living/simple_animal/hostile/guardian/ranged/toggle_modes() - if(is_deployed() && summoner) - to_chat(src, span_bolddanger("You have to be recalled to toggle modes!")) - return - if(toggle) - ranged = initial(ranged) - melee_damage_lower = previous_lower_damage - melee_damage_upper = previous_upper_damage - previous_lower_damage = 0 - previous_upper_damage = 0 - obj_damage = initial(obj_damage) - environment_smash = initial(environment_smash) - alpha = 255 - range = initial(range) - to_chat(src, span_bolddanger("You switch to combat mode.")) - toggle = FALSE - else - ranged = 0 - previous_lower_damage = melee_damage_lower - melee_damage_lower = 0 - previous_upper_damage = melee_damage_upper - melee_damage_upper = 0 - obj_damage = 0 - environment_smash = ENVIRONMENT_SMASH_NONE - alpha = 45 - range = 255 - to_chat(src, span_bolddanger("You switch to scout mode.")) - toggle = TRUE - - -/mob/living/simple_animal/hostile/guardian/ranged/Shoot(atom/targeted_atom) - . = ..() - if(!istype(., /obj/projectile)) - return - var/obj/projectile/shot_projectile = . - shot_projectile.color = guardian_color - -/mob/living/simple_animal/hostile/guardian/ranged/toggle_light() - var/msg - switch(lighting_cutoff) - if (LIGHTING_CUTOFF_VISIBLE) - lighting_cutoff_red = 10 - lighting_cutoff_green = 10 - lighting_cutoff_blue = 15 - msg = "You activate your night vision." - if (LIGHTING_CUTOFF_MEDIUM) - lighting_cutoff_red = 25 - lighting_cutoff_green = 25 - lighting_cutoff_blue = 35 - msg = "You increase your night vision." - if (LIGHTING_CUTOFF_HIGH) - lighting_cutoff_red = 35 - lighting_cutoff_green = 35 - lighting_cutoff_blue = 50 - msg = "You maximize your night vision." - else - lighting_cutoff_red = 0 - lighting_cutoff_green = 0 - lighting_cutoff_blue = 0 - msg = "You deactivate your night vision." - sync_lighting_plane_cutoff() - to_chat(src, span_notice(msg)) - - -/mob/living/simple_animal/hostile/guardian/ranged/verb/Snare() - set name = "Set Surveillance Snare" - set category = "Guardian" - set desc = "Set an invisible snare that will alert you when living creatures walk over it. Max of 5" - if(length(snares) < max_snares) - var/turf/snare_loc = get_turf(src) - var/obj/effect/snare/new_snare = new /obj/effect/snare(snare_loc, src) - new_snare.name = "[get_area(snare_loc)] snare ([rand(1, 1000)])" - snares += new_snare - to_chat(src, span_bolddanger("Surveillance snare deployed!")) - else - to_chat(src, span_bolddanger("You have too many snares deployed. Remove some first.")) - -/mob/living/simple_animal/hostile/guardian/ranged/verb/DisarmSnare() - set name = "Remove Surveillance Snare" - set category = "Guardian" - set desc = "Disarm unwanted surveillance snares." - var/picked_snare = tgui_input_list(src, "Pick which snare to remove.", "Remove Snare", sort_names(snares)) - if(isnull(picked_snare)) - return - qdel(picked_snare) - to_chat(src, span_bolddanger("Snare disarmed.")) - -/obj/effect/snare - name = "snare" - desc = "You shouldn't be seeing this!" - invisibility = INVISIBILITY_ABSTRACT - var/datum/weakref/guardian_ref - -/obj/effect/snare/Initialize(mapload, spawning_guardian) - . = ..() - guardian_ref = WEAKREF(spawning_guardian) - var/static/list/loc_connections = list( - COMSIG_ATOM_ENTERED = PROC_REF(on_entered), - ) - AddElement(/datum/element/connect_loc, loc_connections) - -/obj/effect/snare/Destroy(force) - var/mob/living/simple_animal/hostile/guardian/ranged/spawning_guardian = guardian_ref?.resolve() - if(spawning_guardian) - spawning_guardian.snares -= src - return ..() - -/obj/effect/snare/proc/on_entered(datum/source, crossed_object) - SIGNAL_HANDLER - var/mob/living/simple_animal/hostile/guardian/ranged/spawning_guardian = guardian_ref?.resolve() - if(!spawning_guardian) - qdel(src) - return - if(!isliving(crossed_object) || crossed_object == spawning_guardian || spawning_guardian.hasmatchingsummoner(crossed_object)) - return - send_message(spawning_guardian.summoner || spawning_guardian, crossed_object) - -/obj/effect/snare/proc/send_message(mob/living/recipient, crossed_object) - to_chat(recipient, span_bolddanger("[crossed_object] has crossed [name].")) - var/list/guardians = recipient.get_all_linked_holoparasites() - for(var/guardian in guardians) - send_message(guardian, crossed_object) - -/obj/effect/snare/singularity_act() - return - -/obj/effect/snare/singularity_pull() - return - -/mob/living/simple_animal/hostile/guardian/ranged/manifest_effects() - if(toggle) - incorporeal_move = INCORPOREAL_MOVE_BASIC - -/mob/living/simple_animal/hostile/guardian/ranged/recall_effects() - // To stop scout mode from moving when recalled - incorporeal_move = FALSE - -/mob/living/simple_animal/hostile/guardian/ranged/AttackingTarget(atom/attacked_target) - if(toggle) - return - return ..() diff --git a/code/modules/mob/living/simple_animal/guardian/types/standard.dm b/code/modules/mob/living/simple_animal/guardian/types/standard.dm deleted file mode 100644 index 89f671d3ffa19d..00000000000000 --- a/code/modules/mob/living/simple_animal/guardian/types/standard.dm +++ /dev/null @@ -1,41 +0,0 @@ -//Standard -/mob/living/simple_animal/hostile/guardian/standard - damage_coeff = list(BRUTE = 0.5, BURN = 0.5, TOX = 0.5, CLONE = 0.5, STAMINA = 0, OXY = 0.5) - melee_damage_lower = 20 - melee_damage_upper = 20 - wound_bonus = -5 //you can wound! - obj_damage = 80 - next_move_modifier = 0.8 //attacks 20% faster - environment_smash = ENVIRONMENT_SMASH_WALLS - playstyle_string = span_holoparasite("As a standard type you have no special abilities, but have a high damage resistance and a powerful attack capable of smashing through walls.") - magic_fluff_string = span_holoparasite("..And draw the Assistant, faceless and generic, but never to be underestimated.") - tech_fluff_string = span_holoparasite("Boot sequence complete. Standard combat modules loaded. Holoparasite swarm online.") - carp_fluff_string = span_holoparasite("CARP CARP CARP! You caught one! It's really boring and standard. Better punch some walls to ease the tension.") - miner_fluff_string = span_holoparasite("You encounter... Adamantine, a powerful attacker.") - creator_name = "Standard" - creator_desc = "Devastating close combat attacks and high damage resistance. Can smash through weak walls." - creator_icon = "standard" - /// The text we shout when attacking. - var/battlecry = "AT" - -/mob/living/simple_animal/hostile/guardian/standard/verb/Battlecry() - set name = "Set Battlecry" - set category = "Guardian" - set desc = "Choose what you shout as you punch people." - var/input = tgui_input_text(src, "What do you want your battlecry to be?", "Battle Cry", max_length = 6) - if(input) - battlecry = input - -/mob/living/simple_animal/hostile/guardian/standard/AttackingTarget(atom/attacked_target) - . = ..() - if(!isliving(target) || attacked_target == src) - return - var/msg = "" - for(var/i in 1 to 9) - msg += battlecry - say("[msg]!!", ignore_spam = TRUE) - for(var/j in 1 to 4) - addtimer(CALLBACK(src, PROC_REF(do_attack_sound), target.loc), j) - -/mob/living/simple_animal/hostile/guardian/standard/proc/do_attack_sound(atom/playing_from) - playsound(playing_from, attack_sound, 50, TRUE, TRUE) diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm deleted file mode 100644 index 9afdf231ce7c41..00000000000000 --- a/code/modules/mob/living/simple_animal/guardian/types/support.dm +++ /dev/null @@ -1,141 +0,0 @@ -//Support -/mob/living/simple_animal/hostile/guardian/support - speed = 0 - damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7) - melee_damage_lower = 15 - melee_damage_upper = 15 - playstyle_string = span_holoparasite("As a support type, you may right-click to heal targets. In addition, alt-clicking on an adjacent object or mob will warp them to your bluespace beacon after a short delay.") - magic_fluff_string = span_holoparasite("..And draw the Chief Medical Officer, a potent force of life... and death.") - carp_fluff_string = span_holoparasite("CARP CARP CARP! You caught a support carp. It's a kleptocarp!") - tech_fluff_string = span_holoparasite("Boot sequence complete. Support modules active. Holoparasite swarm online.") - miner_fluff_string = span_holoparasite("You encounter... Bluespace, the master of support.") - creator_name = "Support" - creator_desc = "Does medium damage, but can heal its targets and create beacons to teleport people and things to." - creator_icon = "support" - /// Is it in healing mode? - var/toggle = FALSE - /// How much we heal per hit. - var/healing_amount = 5 - /// Our teleportation beacon. - var/obj/structure/receiving_pad/beacon - /// Time it takes to teleport. - var/teleporting_time = 6 SECONDS - /// Time between creating beacons. - var/beacon_cooldown_time = 5 MINUTES - /// Cooldown between creating beacons. - COOLDOWN_DECLARE(beacon_cooldown) - -/mob/living/simple_animal/hostile/guardian/support/Initialize(mapload) - . = ..() - var/datum/atom_hud/medsensor = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] - medsensor.show_to(src) - -/mob/living/simple_animal/hostile/guardian/support/get_status_tab_items() - . = ..() - if(!COOLDOWN_FINISHED(src, beacon_cooldown)) - . += "Beacon Cooldown Remaining: [DisplayTimeText(COOLDOWN_TIMELEFT(src, beacon_cooldown))]" - -/mob/living/simple_animal/hostile/guardian/support/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) - if(LAZYACCESS(modifiers, RIGHT_CLICK) && proximity_flag && isliving(attack_target)) - heal_target(attack_target) - return - return ..() - -/mob/living/simple_animal/hostile/guardian/support/proc/heal_target(mob/living/target) - do_attack_animation(target, ATTACK_EFFECT_PUNCH) - target.visible_message(span_notice("[src] heals [target]!"),\ - span_userdanger("[src] heals you!"), null, COMBAT_MESSAGE_RANGE, src) - to_chat(src, span_notice("You heal [target]!")) - playsound(target, attack_sound, 50, TRUE, TRUE, frequency = -1) //play punch in REVERSE - var/need_mob_update - need_mob_update = target.adjustBruteLoss(-healing_amount, updating_health = FALSE) - need_mob_update += target.adjustFireLoss(-healing_amount, updating_health = FALSE) - need_mob_update += target.adjustOxyLoss(-healing_amount, updating_health = FALSE) - need_mob_update += target.adjustToxLoss(-healing_amount, updating_health = FALSE, forced = TRUE) - if(need_mob_update) - target.updatehealth() - var/obj/effect/temp_visual/heal/heal_effect = new /obj/effect/temp_visual/heal(get_turf(target)) - heal_effect.color = guardian_color - -/mob/living/simple_animal/hostile/guardian/support/verb/Beacon() - set name = "Place Bluespace Beacon" - set category = "Guardian" - set desc = "Mark a floor as your beacon point, allowing you to warp targets to it. Your beacon will not work at extreme distances." - - if(!COOLDOWN_FINISHED(src, beacon_cooldown)) - to_chat(src, span_bolddanger("Your power is on cooldown. You must wait five minutes between placing beacons.")) - return - - var/turf/beacon_loc = get_turf(src.loc) - if(!isfloorturf(beacon_loc)) - return - - if(beacon) - beacon.disappear() - beacon = null - - beacon = new(beacon_loc, src) - - to_chat(src, span_bolddanger("Beacon placed! You may now warp targets and objects to it, including your user, via Alt+Click.")) - - COOLDOWN_START(src, beacon_cooldown, beacon_cooldown_time) - -/obj/structure/receiving_pad - name = "bluespace receiving pad" - icon = 'icons/turf/floors.dmi' - desc = "A receiving zone for bluespace teleportations." - icon_state = "light_on-8" - light_range = MINIMUM_USEFUL_LIGHT_RANGE - density = FALSE - anchored = TRUE - plane = FLOOR_PLANE - layer = ABOVE_OPEN_TURF_LAYER - -/obj/structure/receiving_pad/New(loc, mob/living/simple_animal/hostile/guardian/spawning_guardian) - . = ..() - add_atom_colour(spawning_guardian?.guardian_color, FIXED_COLOUR_PRIORITY) - -/obj/structure/receiving_pad/proc/disappear() - visible_message(span_notice("[src] vanishes!")) - qdel(src) - -/mob/living/simple_animal/hostile/guardian/support/AltClickOn(atom/movable/target) - teleport_to_beacon(target) - -/mob/living/simple_animal/hostile/guardian/support/proc/teleport_to_beacon(atom/movable/teleport_target) - if(!istype(teleport_target)) - return - if(!beacon) - to_chat(src, span_bolddanger("You need a beacon placed to warp things!")) - return - if(!is_deployed()) - to_chat(src, span_bolddanger("You must be manifested to warp a target!")) - return - if(!Adjacent(teleport_target)) - to_chat(src, span_bolddanger("You must be adjacent to your target!")) - return - if(teleport_target.anchored) - to_chat(src, span_bolddanger("Your target is anchored!")) - return - var/turf/target_turf = get_turf(teleport_target) - if(beacon.z != target_turf.z) - to_chat(src, span_bolddanger("The beacon is too far away to warp to!")) - return - to_chat(src, span_bolddanger("You begin to warp [teleport_target].")) - teleport_target.visible_message(span_danger("[teleport_target] starts to glow faintly!"), \ - span_userdanger("You start to faintly glow, and you feel strangely weightless!")) - do_attack_animation(teleport_target) - playsound(teleport_target, attack_sound, 50, TRUE, TRUE, frequency = -1) //play punch in REVERSE - if(!do_after(src, teleporting_time, teleport_target)) //now start the channel - to_chat(src, span_bolddanger("You need to hold still!")) - return - new /obj/effect/temp_visual/guardian/phase/out(target_turf) - if(isliving(teleport_target)) - var/mob/living/living_target = teleport_target - living_target.flash_act() - teleport_target.visible_message( - span_danger("[teleport_target] disappears in a flash of light!"), \ - span_userdanger("Your vision is obscured by a flash of light!"), \ - ) - do_teleport(teleport_target, beacon, 0, channel = TELEPORT_CHANNEL_BLUESPACE) - new /obj/effect/temp_visual/guardian/phase(get_turf(teleport_target)) diff --git a/code/modules/mob/living/simple_animal/hostile/constructs/constructs.dm b/code/modules/mob/living/simple_animal/hostile/constructs/constructs.dm deleted file mode 100644 index 31150a4dc89c17..00000000000000 --- a/code/modules/mob/living/simple_animal/hostile/constructs/constructs.dm +++ /dev/null @@ -1,133 +0,0 @@ -/mob/living/simple_animal/hostile/construct - name = "Construct" - real_name = "Construct" - desc = "" - gender = NEUTER - mob_biotypes = MOB_MINERAL | MOB_SPECIAL - speak_emote = list("hisses") - response_help_continuous = "thinks better of touching" - response_help_simple = "think better of touching" - response_disarm_continuous = "flails at" - response_disarm_simple = "flail at" - response_harm_continuous = "punches" - response_harm_simple = "punch" - speak_chance = 1 - icon = 'icons/mob/nonhuman-player/cult.dmi' - speed = 0 - combat_mode = TRUE - stop_automated_movement = 1 - status_flags = CANPUSH - attack_sound = 'sound/weapons/punch1.ogg' - // Vivid red, cause cult theme - lighting_cutoff_red = 30 - lighting_cutoff_green = 5 - lighting_cutoff_blue = 20 - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) - 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) - minbodytemp = 0 - maxbodytemp = INFINITY - faction = list(FACTION_CULT) - pressure_resistance = 100 - unique_name = TRUE - AIStatus = AI_OFF //normal constructs don't have AI - loot = list(/obj/item/ectoplasm) - del_on_death = TRUE - initial_language_holder = /datum/language_holder/construct - death_message = "collapses in a shattered heap." - /// List of spells that this construct can cast - var/list/construct_spells = list() - /// Flavor text shown to players when they spawn as this construct - var/playstyle_string = "You are a generic construct! Your job is to not exist, and you should probably adminhelp this." - /// The construct's master - var/master = null - /// Whether this construct is currently seeking nar nar - var/seeking = FALSE - /// Whether this construct can repair other constructs or cult buildings. - var/can_repair = FALSE - /// Whether this construct can repair itself. Works independently of can_repair. - var/can_repair_self = FALSE - /// Theme controls color. THEME_CULT is red THEME_WIZARD is purple and THEME_HOLY is blue - var/theme = THEME_CULT - -/mob/living/simple_animal/hostile/construct/Initialize(mapload) - . = ..() - AddElement(/datum/element/simple_flying) - add_traits(list(TRAIT_HEALS_FROM_CULT_PYLONS, TRAIT_SPACEWALK), INNATE_TRAIT) - for(var/spell in construct_spells) - var/datum/action/new_spell = new spell(src) - new_spell.Grant(src) - - var/spell_count = 1 - for(var/datum/action/spell as anything in actions) - if(!(spell.type in construct_spells)) - continue - - var/pos = 2 + spell_count * 31 - if(construct_spells.len >= 4) - pos -= 31 * (construct_spells.len - 4) - spell.default_button_position = "6:[pos],4:-2" // Set the default position to this random position - spell_count++ - update_action_buttons() - - if(icon_state) - add_overlay("glow_[icon_state]_[theme]") - -/mob/living/simple_animal/hostile/construct/Login() - . = ..() - if(!. || !client) - return FALSE - to_chat(src, playstyle_string) - -/mob/living/simple_animal/hostile/construct/examine(mob/user) - var/text_span - switch(theme) - if(THEME_CULT) - text_span = "cult" - if(THEME_WIZARD) - text_span = "purple" - if(THEME_HOLY) - text_span = "blue" - . = list("This is [icon2html(src, user)] \a [src]!\n[desc]") - if(health < maxHealth) - if(health >= maxHealth/2) - . += span_warning("[p_They()] look[p_s()] slightly dented.") - else - . += span_warning("[p_They()] look[p_s()] severely dented!") - . += "" - -/mob/living/simple_animal/hostile/construct/attack_animal(mob/living/simple_animal/user, list/modifiers) - if(!isconstruct(user)) - if(src != user) - return ..() - return - - var/mob/living/simple_animal/hostile/construct/doll = user - if(!doll.can_repair || (doll == src && !doll.can_repair_self)) - return ..() - if(theme != doll.theme) - return ..() - - if(health >= maxHealth) - if(src != user) - to_chat(user, span_cult("You cannot repair [src]'s dents, as [p_they()] [p_have()] none!")) - else - to_chat(user, span_cult("You cannot repair your own dents, as you have none!")) - return - - adjustHealth(-5) - if(src == user) - user.visible_message(span_danger("[user] repairs some of [p_their()] own dents."), \ - span_cult("You repair some of your own dents, leaving you at [user.health]/[user.maxHealth] health.")) - return - - Beam(user, icon_state="sendbeam", time = 4) - user.visible_message(span_danger("[user] repairs some of \the [src]'s dents."), \ - span_cult("You repair some of [src]'s dents, leaving [src] at [health]/[maxHealth] health.")) - - -/mob/living/simple_animal/hostile/construct/narsie_act() - return - -/mob/living/simple_animal/hostile/construct/electrocute_act(shock_damage, source, siemens_coeff = 1, flags = NONE) - return FALSE - diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 4dd2c464a2f072..88d89c5f1d6021 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -172,7 +172,7 @@ Goto(P.starting, move_to_delay, 3) return ..() -//////////////HOSTILE MOB TARGETTING AND AGGRESSION//////////// +//////////////HOSTILE MOB TARGETING AND AGGRESSION//////////// /mob/living/simple_animal/hostile/proc/ListTargets() //Step 1, find out what we can see var/atom/target_from = GET_TARGETS_FROM(src) @@ -196,7 +196,7 @@ possible_targets = ListTargets() for(var/atom/pos_targ as anything in possible_targets) - if(Found(pos_targ)) //Just in case people want to override targetting + if(Found(pos_targ)) //Just in case people want to override targeting all_potential_targets = list(pos_targ) break @@ -420,9 +420,9 @@ in_melee = FALSE SSmove_manager.stop_looping(src) LoseAggro() - SEND_SIGNAL(src, COMSIG_HOSTILE_MOB_LOST_TARGET) // SKYRAT EDIT ADDITION + SEND_SIGNAL(src, COMSIG_HOSTILE_MOB_LOST_TARGET) // NOVA EDIT ADDITION -//////////////END HOSTILE MOB TARGETTING AND AGGRESSION//////////// +//////////////END HOSTILE MOB TARGETING AND AGGRESSION//////////// /mob/living/simple_animal/hostile/death(gibbed) LoseTarget() diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/_jungle_mobs.dm b/code/modules/mob/living/simple_animal/hostile/jungle/_jungle_mobs.dm deleted file mode 100644 index 8cccf16b850894..00000000000000 --- a/code/modules/mob/living/simple_animal/hostile/jungle/_jungle_mobs.dm +++ /dev/null @@ -1,17 +0,0 @@ -/mob/living/simple_animal/hostile/jungle - vision_range = 5 - 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) - faction = list(FACTION_JUNGLE) - obj_damage = 30 - environment_smash = ENVIRONMENT_SMASH_WALLS - minbodytemp = 0 - maxbodytemp = 450 - response_harm_continuous = "strikes" - response_harm_simple = "strike" - status_flags = NONE - combat_mode = TRUE - // Let's do a blue, since they'll be on green turfs if this shit is ever finished - lighting_cutoff_red = 5 - lighting_cutoff_green = 20 - lighting_cutoff_blue = 25 - mob_size = MOB_SIZE_LARGE diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm b/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm deleted file mode 100644 index 3330b682a01636..00000000000000 --- a/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm +++ /dev/null @@ -1,289 +0,0 @@ -#define PLAYER_HOP_DELAY 25 - -//Huge, carnivorous toads that spit an immobilizing toxin at its victims before leaping onto them. -//It has no melee attack, and its damage comes from the toxin in its bubbles and its crushing leap. -//Its eyes will turn red to signal an imminent attack! -/mob/living/simple_animal/hostile/jungle/leaper - name = "leaper" - desc = "Commonly referred to as 'leapers', the Geron Toad is a massive beast that spits out highly pressurized bubbles containing a unique toxin, knocking down its prey and then crushing it with its girth." - icon = 'icons/mob/simple/jungle/leaper.dmi' - icon_state = "leaper" - icon_living = "leaper" - icon_dead = "leaper_dead" - mob_biotypes = MOB_ORGANIC|MOB_BEAST - maxHealth = 300 - health = 300 - ranged = TRUE - projectiletype = /obj/projectile/leaper - projectilesound = 'sound/weapons/pierce.ogg' - ranged_cooldown_time = 30 - pixel_x = -16 - base_pixel_x = -16 - layer = LARGE_MOB_LAYER - plane = GAME_PLANE_UPPER_FOV_HIDDEN - speed = 10 - stat_attack = HARD_CRIT - robust_searching = 1 - var/hopping = FALSE - var/hop_cooldown = 0 //Strictly for player controlled leapers - var/projectile_ready = FALSE //Stopping AI leapers from firing whenever they want, and only doing it after a hop has finished instead - - footstep_type = FOOTSTEP_MOB_HEAVY - -/obj/projectile/leaper - name = "leaper bubble" - icon_state = "leaper" - paralyze = 50 - damage = 0 - range = 7 - hitsound = 'sound/effects/snap.ogg' - nondirectional_sprite = TRUE - impact_effect_type = /obj/effect/temp_visual/leaper_projectile_impact - -/obj/projectile/leaper/on_hit(atom/target, blocked = 0, pierce_hit) - ..() - if (!isliving(target)) - return - var/mob/living/bubbled = target - if(iscarbon(target)) - bubbled.reagents.add_reagent(/datum/reagent/toxin/leaper_venom, 5) - return - if(isanimal(target)) - var/mob/living/simple_animal/bubbled_animal = bubbled - bubbled_animal.adjustHealth(25) - return - if (isbasicmob(target)) - bubbled.adjustBruteLoss(25) - -/obj/projectile/leaper/on_range() - var/turf/T = get_turf(src) - ..() - new /obj/structure/leaper_bubble(T) - -/obj/effect/temp_visual/leaper_projectile_impact - name = "leaper bubble" - icon = 'icons/obj/weapons/guns/projectiles.dmi' - icon_state = "leaper_bubble_pop" - layer = ABOVE_ALL_MOB_LAYER - plane = GAME_PLANE_UPPER_FOV_HIDDEN - duration = 3 - -/obj/effect/temp_visual/leaper_projectile_impact/Initialize(mapload) - . = ..() - new /obj/effect/decal/cleanable/leaper_sludge(get_turf(src)) - -/obj/effect/decal/cleanable/leaper_sludge - name = "leaper sludge" - desc = "A small pool of sludge, containing trace amounts of leaper venom." - icon = 'icons/effects/tomatodecal.dmi' - icon_state = "tomato_floor1" - -/obj/effect/decal/cleanable/leaper_sludge/Initialize(mapload, list/datum/disease/diseases) - . = ..() - AddElement(/datum/element/swabable, CELL_LINE_TABLE_LEAPER, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) - -/obj/structure/leaper_bubble - name = "leaper bubble" - desc = "A floating bubble containing leaper venom. The contents are under a surprising amount of pressure." - icon = 'icons/obj/weapons/guns/projectiles.dmi' - icon_state = "leaper" - max_integrity = 10 - density = FALSE - -/obj/structure/leaper_bubble/Initialize(mapload) - . = ..() - AddElement(/datum/element/movetype_handler) - ADD_TRAIT(src, TRAIT_MOVE_FLOATING, LEAPER_BUBBLE_TRAIT) - QDEL_IN(src, 100) - var/static/list/loc_connections = list( - COMSIG_ATOM_ENTERED = PROC_REF(on_entered), - ) - AddElement(/datum/element/connect_loc, loc_connections) - AddElement(/datum/element/swabable, CELL_LINE_TABLE_LEAPER, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) - -/obj/structure/leaper_bubble/Destroy() - new /obj/effect/temp_visual/leaper_projectile_impact(get_turf(src)) - playsound(src,'sound/effects/snap.ogg',50, TRUE, -1) - return ..() - -/obj/structure/leaper_bubble/proc/on_entered(datum/source, atom/movable/bubbled) - SIGNAL_HANDLER - if(!isliving(bubbled) || istype(bubbled, /mob/living/simple_animal/hostile/jungle/leaper)) - return - var/mob/living/bubbled_mob = bubbled - - playsound(src,'sound/effects/snap.ogg',50, TRUE, -1) - bubbled_mob.Paralyze(50) - if(iscarbon(bubbled_mob)) - bubbled_mob.reagents.add_reagent(/datum/reagent/toxin/leaper_venom, 5) - else if(isanimal(bubbled_mob)) - var/mob/living/simple_animal/bubbled_animal = bubbled_mob - bubbled_animal.adjustHealth(25) - else if(isbasicmob(bubbled_mob)) - bubbled_mob.adjustBruteLoss(25) - qdel(src) - -/datum/reagent/toxin/leaper_venom - name = "Leaper venom" - description = "A toxin spat out by leapers that, while harmless in small doses, quickly creates a toxic reaction if too much is in the body." - color = "#801E28" // rgb: 128, 30, 40 - toxpwr = 0 - taste_description = "french cuisine" - taste_mult = 1.3 - -/datum/reagent/toxin/leaper_venom/on_mob_life(mob/living/carbon/M, seconds_per_tick, times_fired) - . = ..() - if(volume >= 10) - if(M.adjustToxLoss(5 * REM * seconds_per_tick, updating_health = FALSE)) - . = UPDATE_MOB_HEALTH - -/obj/effect/temp_visual/leaper_crush - name = "grim tidings" - desc = "Incoming leaper!" - icon = 'icons/effects/96x96.dmi' - icon_state = "lily_pad" - layer = BELOW_MOB_LAYER - plane = GAME_PLANE - SET_BASE_PIXEL(-32, -32) - duration = 30 - -/mob/living/simple_animal/hostile/jungle/leaper/Initialize(mapload) - . = ..() - AddComponent(/datum/component/seethrough_mob) - remove_verb(src, /mob/living/verb/pulled) - add_cell_sample() - -/mob/living/simple_animal/hostile/jungle/leaper/CtrlClickOn(atom/A) - face_atom(A) - GiveTarget(A) - if(!isturf(loc)) - return - if(next_move > world.time) - return - if(hopping) - return - if(isliving(A)) - var/mob/living/L = A - if(L.incapacitated()) - BellyFlop() - return - if(hop_cooldown <= world.time) - Hop(player_hop = TRUE) - -/mob/living/simple_animal/hostile/jungle/leaper/AttackingTarget(atom/attacked_target) - if(isliving(target)) - return - return ..() - -/mob/living/simple_animal/hostile/jungle/leaper/handle_automated_action() - if(hopping || projectile_ready) - return - . = ..() - if(target) - if(isliving(target)) - var/mob/living/L = target - if(L.incapacitated()) - BellyFlop() - return - if(!hopping) - Hop() - -/mob/living/simple_animal/hostile/jungle/leaper/Life(seconds_per_tick = SSMOBS_DT, times_fired) - . = ..() - update_icons() - -/mob/living/simple_animal/hostile/jungle/leaper/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - if(prob(33) && !ckey) - ranged_cooldown = 0 //Keeps em on their toes instead of a constant rotation - ..() - -/mob/living/simple_animal/hostile/jungle/leaper/OpenFire() - face_atom(target) - if(ranged_cooldown <= world.time) - if(ckey) - if(hopping) - return - if(isliving(target)) - var/mob/living/L = target - if(L.incapacitated()) - return //No stunlocking. Hop on them after you stun them, you donk. - if(AIStatus == AI_ON && !projectile_ready && !ckey) - return - . = ..(target) - projectile_ready = FALSE - update_icons() - -/mob/living/simple_animal/hostile/jungle/leaper/proc/Hop(player_hop = FALSE) - if(z != target.z) - return - hopping = TRUE - add_traits(list(TRAIT_UNDENSE, TRAIT_NO_TRANSFORM), LEAPING_TRAIT) - pass_flags |= PASSMOB - var/turf/new_turf = locate((target.x + rand(-3,3)),(target.y + rand(-3,3)),target.z) - if(player_hop) - new_turf = get_turf(target) - hop_cooldown = world.time + PLAYER_HOP_DELAY - if(AIStatus == AI_ON && ranged_cooldown <= world.time) - projectile_ready = TRUE - update_icons() - throw_at(new_turf, max(3,get_dist(src,new_turf)), 1, src, FALSE, callback = CALLBACK(src, PROC_REF(FinishHop))) - -/mob/living/simple_animal/hostile/jungle/leaper/proc/FinishHop() - remove_traits(list(TRAIT_UNDENSE, TRAIT_NO_TRANSFORM), LEAPING_TRAIT) - pass_flags &= ~PASSMOB - hopping = FALSE - playsound(src.loc, 'sound/effects/meteorimpact.ogg', 100, TRUE) - if(target && AIStatus == AI_ON && projectile_ready && !ckey) - face_atom(target) - addtimer(CALLBACK(src, PROC_REF(OpenFire), target), 5) - -/mob/living/simple_animal/hostile/jungle/leaper/proc/BellyFlop() - var/turf/new_turf = get_turf(target) - hopping = TRUE - ADD_TRAIT(src, TRAIT_NO_TRANSFORM, LEAPING_TRAIT) - new /obj/effect/temp_visual/leaper_crush(new_turf) - addtimer(CALLBACK(src, PROC_REF(BellyFlopHop), new_turf), 3 SECONDS) - -/mob/living/simple_animal/hostile/jungle/leaper/proc/BellyFlopHop(turf/T) - ADD_TRAIT(src, TRAIT_UNDENSE, LEAPING_TRAIT) - throw_at(T, get_dist(src,T),1,src, FALSE, callback = CALLBACK(src, PROC_REF(Crush))) - -/mob/living/simple_animal/hostile/jungle/leaper/proc/Crush() - hopping = FALSE - remove_traits(list(TRAIT_UNDENSE, TRAIT_NO_TRANSFORM), LEAPING_TRAIT) - playsound(src, 'sound/effects/meteorimpact.ogg', 200, TRUE) - for(var/mob/living/L in orange(1, src)) - L.adjustBruteLoss(35) - if(!QDELETED(L)) // Some mobs are deleted on death - var/throw_dir = get_dir(src, L) - if(L.loc == loc) - throw_dir = pick(GLOB.alldirs) - var/throwtarget = get_edge_target_turf(src, throw_dir) - L.throw_at(throwtarget, 3, 1) - visible_message(span_warning("[L] is thrown clear of [src]!")) - if(ckey)//Lessens ability to chain stun as a player - ranged_cooldown = ranged_cooldown_time + world.time - update_icons() - -/mob/living/simple_animal/hostile/jungle/leaper/Goto() - return - -/mob/living/simple_animal/hostile/jungle/leaper/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - return - -/mob/living/simple_animal/hostile/jungle/leaper/update_icons() - . = ..() - if(stat) - icon_state = "leaper_dead" - return - if(ranged_cooldown <= world.time) - if(AIStatus == AI_ON && projectile_ready || ckey) - icon_state = "leaper_alert" - return - icon_state = "leaper" - -/mob/living/simple_animal/hostile/jungle/leaper/add_cell_sample() - . = ..() - AddElement(/datum/element/swabable, CELL_LINE_TABLE_LEAPER, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) - -#undef PLAYER_HOP_DELAY diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm index 5f9e2678fd8078..200800f3d05d1d 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm @@ -15,7 +15,7 @@ ranged_ignores_vision = TRUE stat_attack = DEAD 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) - damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) + damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 1, STAMINA = 0, OXY = 1) minbodytemp = 0 maxbodytemp = INFINITY vision_range = 5 @@ -25,7 +25,6 @@ pull_force = MOVE_FORCE_OVERPOWERING mob_size = MOB_SIZE_HUGE layer = LARGE_MOB_LAYER //Looks weird with them slipping under mineral walls and cameras and shit otherwise - plane = GAME_PLANE_UPPER // SKYRAT EDIT - ORIGINAL: plane = GAME_PLANE_UPPER_FOV_HIDDEN mouse_opacity = MOUSE_OPACITY_OPAQUE // Easier to click on in melee, they're giant targets anyway flags_1 = PREVENT_CONTENTS_EXPLOSION_1 /// Crusher loot dropped when the megafauna is killed with a crusher @@ -59,9 +58,7 @@ AddComponent(/datum/component/gps, gps_name) ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT) add_traits(list(TRAIT_NO_TELEPORT, TRAIT_MARTIAL_ARTS_IMMUNE), MEGAFAUNA_TRAIT) - for(var/action_type in attack_action_types) - var/datum/action/innate/megafauna_attack/attack_action = new action_type() - attack_action.Grant(src) + grant_actions_by_list(attack_action_types) /mob/living/simple_animal/hostile/megafauna/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) //Safety check diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm index 113f7431ffc5ca..4c6605cd8393dd 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm @@ -67,21 +67,23 @@ Difficulty: Medium . = ..() miner_saw = new(src) ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT) - dash = new /datum/action/cooldown/mob_cooldown/dash() - kinetic_accelerator = new /datum/action/cooldown/mob_cooldown/projectile_attack/kinetic_accelerator() - dash_attack = new /datum/action/cooldown/mob_cooldown/dash_attack() - transform_weapon = new /datum/action/cooldown/mob_cooldown/transform_weapon() + + dash = new /datum/action/cooldown/mob_cooldown/dash + kinetic_accelerator = new /datum/action/cooldown/mob_cooldown/projectile_attack/kinetic_accelerator + dash_attack = new /datum/action/cooldown/mob_cooldown/dash_attack + transform_weapon = new /datum/action/cooldown/mob_cooldown/transform_weapon dash.Grant(src) kinetic_accelerator.Grant(src) dash_attack.Grant(src) transform_weapon.Grant(src) + AddComponent(/datum/component/boss_music, 'sound/lavaland/bdm_boss.ogg', 167 SECONDS) /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/Destroy() - QDEL_NULL(dash) - QDEL_NULL(kinetic_accelerator) - QDEL_NULL(dash_attack) - QDEL_NULL(transform_weapon) + dash = null + kinetic_accelerator = null + dash_attack = null + transform_weapon = null return ..() /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/OpenFire() @@ -188,7 +190,7 @@ Difficulty: Medium /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/hunter/AttackingTarget(atom/attacked_target) . = ..() if(. && prob(12)) - INVOKE_ASYNC(dash, TYPE_PROC_REF(/datum/action, Trigger), target) + INVOKE_ASYNC(dash, TYPE_PROC_REF(/datum/action, Trigger), NONE, target) /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/doom name = "hostile-environment miner" diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index a1336bd6a09c48..eaeaddc3e03ee2 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -86,10 +86,10 @@ Difficulty: Hard /mob/living/simple_animal/hostile/megafauna/bubblegum/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT) - triple_charge = new /datum/action/cooldown/mob_cooldown/charge/triple_charge() - hallucination_charge = new /datum/action/cooldown/mob_cooldown/charge/hallucination_charge() - hallucination_charge_surround = new /datum/action/cooldown/mob_cooldown/charge/hallucination_charge/hallucination_surround() - blood_warp = new /datum/action/cooldown/mob_cooldown/blood_warp() + triple_charge = new(src) + hallucination_charge = new(src) + hallucination_charge_surround = new(src) + blood_warp = new(src) triple_charge.Grant(src) hallucination_charge.Grant(src) hallucination_charge_surround.Grant(src) @@ -105,10 +105,10 @@ Difficulty: Hard sound_volume = 200) /mob/living/simple_animal/hostile/megafauna/bubblegum/Destroy() - QDEL_NULL(triple_charge) - QDEL_NULL(hallucination_charge) - QDEL_NULL(hallucination_charge_surround) - QDEL_NULL(blood_warp) + triple_charge = null + hallucination_charge = null + hallucination_charge_surround = null + blood_warp = null return ..() /mob/living/simple_animal/hostile/megafauna/bubblegum/update_cooldowns(list/cooldown_updates, ignore_staggered = FALSE) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 10873e398e5905..6be52bf1c856db 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -71,11 +71,11 @@ /mob/living/simple_animal/hostile/megafauna/colossus/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT) //we don't want this guy to float, messes up his animations. - spiral_shots = new /datum/action/cooldown/mob_cooldown/projectile_attack/spiral_shots/colossus() - random_shots = new /datum/action/cooldown/mob_cooldown/projectile_attack/random_aoe/colossus() - shotgun_blast = new /datum/action/cooldown/mob_cooldown/projectile_attack/shotgun_blast/colossus() - dir_shots = new /datum/action/cooldown/mob_cooldown/projectile_attack/dir_shots/alternating/colossus() - colossus_final = new /datum/action/cooldown/mob_cooldown/projectile_attack/colossus_final() + spiral_shots = new(src) + random_shots = new(src) + shotgun_blast = new(src) + dir_shots = new(src) + colossus_final = new(src) spiral_shots.Grant(src) random_shots.Grant(src) shotgun_blast.Grant(src) @@ -87,10 +87,10 @@ /mob/living/simple_animal/hostile/megafauna/colossus/Destroy() RemoveElement(/datum/element/projectile_shield) - QDEL_NULL(spiral_shots) - QDEL_NULL(random_shots) - QDEL_NULL(shotgun_blast) - QDEL_NULL(dir_shots) + spiral_shots = null + random_shots = null + shotgun_blast = null + dir_shots = null return ..() /mob/living/simple_animal/hostile/megafauna/colossus/OpenFire() @@ -238,7 +238,6 @@ var/use_time = 0 /// If we are being used var/active = FALSE - var/list/affected_targets = list() var/activation_sound = 'sound/effects/break_stone.ogg' COOLDOWN_DECLARE(cooldown_timer) @@ -320,14 +319,28 @@ possible_methods = list(ACTIVATE_MOB_BUMP, ACTIVATE_SPEECH) activation_sound = 'sound/items/bikehorn.ogg' use_time = 3 SECONDS + /// List of REFs to mobs that have been turned into a clown + var/list/clowned_mob_refs = list() /obj/machinery/anomalous_crystal/honk/ActivationReaction(mob/user) - if(..() && ishuman(user) && !(user in affected_targets) && (user in viewers(src))) - var/mob/living/carbon/human/new_clown = user - for(var/obj/item/to_strip in new_clown) - new_clown.dropItemToGround(to_strip) - new_clown.dress_up_as_job(SSjob.GetJobType(/datum/job/clown)) - affected_targets.Add(new_clown) + . = ..() + if(!.) + return FALSE + + if(!ishuman(user)) + return FALSE + if(!(user in viewers(src))) + return FALSE + var/clown_ref = REF(user) + if(clown_ref in clowned_mob_refs) + return FALSE + + var/mob/living/carbon/human/new_clown = user + for(var/obj/item/to_strip in new_clown.get_equipped_items()) + new_clown.dropItemToGround(to_strip) + new_clown.dress_up_as_job(SSjob.GetJobType(/datum/job/clown)) + clowned_mob_refs += clown_ref + return TRUE /// Transforms the area to look like a new one /obj/machinery/anomalous_crystal/theme_warp @@ -335,130 +348,32 @@ activation_method = ACTIVATE_TOUCH cooldown_add = 20 SECONDS use_time = 5 SECONDS - var/datum/crystal_warp_theme/terrain_theme + /// Theme which we turn areas into on activation + var/datum/dimension_theme/terrain_theme + /// List of all areas we've affected + var/list/converted_areas = list() /obj/machinery/anomalous_crystal/theme_warp/Initialize(mapload) . = ..() - var/terrain_type = pick(subtypesof(/datum/crystal_warp_theme)) + var/terrain_type = pick(subtypesof(/datum/dimension_theme)) terrain_theme = new terrain_type() - observer_desc = "This crystal changes the area around it to match the theme of \"[terrain_theme]\"." + observer_desc = "This crystal changes the area around it to match the theme of \"[terrain_theme.name]\"." /obj/machinery/anomalous_crystal/theme_warp/ActivationReaction(mob/user, method) . = ..() if (!.) return FALSE var/area/current_area = get_area(src) - if (current_area in affected_targets) + if (current_area in converted_areas) return FALSE - if (terrain_theme.transform_area(current_area)) - affected_targets += current_area + terrain_theme.apply_theme_to_list_of_turfs(current_area.get_contained_turfs()) + converted_areas += current_area return TRUE -/// Transforms an area's turfs and objects into a different theme -/datum/crystal_warp_theme - /// Friendly name of theme - var/name = "" - /// Typepath of floor to replace open turfs with - var/floor - /// Typepath of wall to replace closed turfs with - var/wall - /// Typepath of object to replace chairs with - var/chair - /// Typepath of object to replace tables with - var/table - /// Typepath of things to potentially spawn on transformed open turfs - var/list/flora_and_fauna = list() - /// Chance per turf to create the things in the list above - var/flora_and_fauna_chance = 8 - -/// Change appropriate objects in provided area to those matching our theme, and spawn some plants or animals -/datum/crystal_warp_theme/proc/transform_area(area/target_area) - if (target_area.outdoors) - return FALSE - for(var/atom/thing in target_area) - if(isturf(thing)) - replace_turf(thing) - continue - if(chair && istype(thing, /obj/structure/chair)) - replace_object(thing, chair) - continue - if(table && istype(thing, /obj/structure/table)) - replace_object(thing, table) - continue - return TRUE - -/// Replaces a turf with a different themed turf -/datum/crystal_warp_theme/proc/replace_turf(turf/target_turf) - if(isindestructiblefloor(target_turf) || isindestructiblewall(target_turf) || isopenspaceturf(target_turf)) - return - - if(wall && iswallturf(target_turf)) - target_turf.ChangeTurf(wall) - return - - if(!isopenturf(target_turf)) - return - - if(length(flora_and_fauna) && !target_turf.is_blocked_turf(exclude_mobs = TRUE) && prob(flora_and_fauna_chance)) - var/atom/new_flora_and_fauna = pick(flora_and_fauna) - new new_flora_and_fauna(target_turf) - - if(floor) - var/turf/open/open_turf = target_turf - open_turf.replace_floor(floor, flags = CHANGETURF_IGNORE_AIR) - -/// Replaces an object with a different themed object -/datum/crystal_warp_theme/proc/replace_object(atom/original, new_type) - var/atom/new_thing = new new_type(original.loc) - new_thing.setDir(original.dir) - qdel(original) - -// Depressurizes the place... and free cult metal, I guess. -/datum/crystal_warp_theme/lavaland - name = "lavaland" - floor = /turf/open/floor/fakebasalt - wall = /turf/closed/wall/mineral/cult - flora_and_fauna = list(/mob/living/basic/mining/goldgrub) - flora_and_fauna_chance = 1 - -// Snow terrain is slow to move in and cold! Get the assistants to shovel your driveway. -/datum/crystal_warp_theme/winter - name = "winter" - floor = /turf/open/misc/snow/actually_safe - wall = /turf/closed/wall/mineral/wood - chair = /obj/structure/chair/wood - table = /obj/structure/table/glass - flora_and_fauna = list( - /obj/structure/flora/grass/both/style_random, - /obj/structure/flora/grass/brown/style_random, - /obj/structure/flora/grass/green/style_random, - ) - -// Beneficial due to actually having breathable air. Plus, monkeys and bows and arrows. -/datum/crystal_warp_theme/jungle - name = "jungle" - floor = /turf/open/floor/grass - wall = /turf/closed/wall/mineral/wood - chair = /obj/structure/chair/wood - table = /obj/structure/table/wood - flora_and_fauna = list( - /mob/living/carbon/human/species/monkey, - /obj/structure/flora/bush/ferny/style_random, - /obj/structure/flora/bush/grassy/style_random, - /obj/structure/flora/bush/leavy/style_random, - /obj/structure/flora/tree/palm/style_random, - /obj/structure/flora/bush/sparsegrass/style_random, - /obj/structure/flora/bush/sunny/style_random, - ) - flora_and_fauna_chance = 20 - -// Beneficial, turns stuff into alien alloy which is useful to cargo and research. Also repairs atmos. -/datum/crystal_warp_theme/ayylmao - name = "ayy lmao" - floor = /turf/open/floor/mineral/abductor - wall = /turf/closed/wall/mineral/abductor - chair = /obj/structure/bed/abductor //ayys apparently don't have chairs. An entire species of people who only recline. - table = /obj/structure/table/abductor +/obj/machinery/anomalous_crystal/theme_warp/Destroy() + QDEL_NULL(terrain_theme) + converted_areas.Cut() + return ..() /obj/machinery/anomalous_crystal/emitter //Generates a projectile when interacted with observer_desc = "This crystal generates a projectile when activated." @@ -512,7 +427,13 @@ if(..() && !ready_to_deploy) SSpoints_of_interest.make_point_of_interest(src) ready_to_deploy = TRUE - notify_ghosts("An anomalous crystal has been activated in [get_area(src)]! This crystal can always be used by ghosts hereafter.", ghost_sound = 'sound/effects/ghost2.ogg', source = src, action = NOTIFY_PLAY, header = "Anomalous crystal activated") + notify_ghosts( + "An anomalous crystal has been activated in [get_area(src)]! This crystal can always be used by ghosts hereafter.", + source = src, + header = "Anomalous crystal activated", + click_interact = TRUE, + ghost_sound = 'sound/effects/ghost2.ogg', + ) /obj/machinery/anomalous_crystal/helpers/attack_ghost(mob/dead/observer/user) . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm index aac1964cbf2fd6..dc49d71f796085 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm @@ -62,12 +62,12 @@ Difficulty: Extremely Hard /mob/living/simple_animal/hostile/megafauna/demonic_frost_miner/Initialize(mapload) . = ..() - frost_orbs = new /datum/action/cooldown/mob_cooldown/projectile_attack/rapid_fire/shrapnel() - hard_frost_orbs = new /datum/action/cooldown/mob_cooldown/projectile_attack/rapid_fire/shrapnel/strong() - snowball_machine_gun = new /datum/action/cooldown/mob_cooldown/projectile_attack/rapid_fire() - hard_snowball_machine_gun = new /datum/action/cooldown/mob_cooldown/direct_and_aoe() - ice_shotgun = new /datum/action/cooldown/mob_cooldown/projectile_attack/shotgun_blast/pattern() - hard_ice_shotgun = new /datum/action/cooldown/mob_cooldown/projectile_attack/shotgun_blast/pattern/circular() + frost_orbs = new(src) + hard_frost_orbs = new(src) + snowball_machine_gun = new(src) + hard_snowball_machine_gun = new(src) + ice_shotgun = new(src) + hard_ice_shotgun = new(src) frost_orbs.Grant(src) hard_frost_orbs.Grant(src) snowball_machine_gun.Grant(src) @@ -83,12 +83,12 @@ Difficulty: Extremely Hard AddComponent(/datum/component/boss_music, 'sound/lavaland/bdm_boss.ogg', 167 SECONDS) /mob/living/simple_animal/hostile/megafauna/demonic_frost_miner/Destroy() - QDEL_NULL(frost_orbs) - QDEL_NULL(hard_frost_orbs) - QDEL_NULL(snowball_machine_gun) - QDEL_NULL(hard_snowball_machine_gun) - QDEL_NULL(ice_shotgun) - QDEL_NULL(hard_ice_shotgun) + frost_orbs = null + hard_frost_orbs = null + snowball_machine_gun = null + hard_snowball_machine_gun = null + ice_shotgun = null + hard_ice_shotgun = null return ..() /mob/living/simple_animal/hostile/megafauna/demonic_frost_miner/OpenFire() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index 5008d4b1748ed0..175d0032580812 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -80,10 +80,10 @@ /mob/living/simple_animal/hostile/megafauna/dragon/Initialize(mapload) . = ..() - fire_cone = new /datum/action/cooldown/mob_cooldown/fire_breath/cone() - meteors = new /datum/action/cooldown/mob_cooldown/meteors() - mass_fire = new /datum/action/cooldown/mob_cooldown/fire_breath/mass_fire() - lava_swoop = new /datum/action/cooldown/mob_cooldown/lava_swoop() + fire_cone = new(src) + meteors = new(src) + mass_fire = new(src) + lava_swoop = new(src) fire_cone.Grant(src) meteors.Grant(src) mass_fire.Grant(src) @@ -95,10 +95,10 @@ AddElement(/datum/element/change_force_on_death, move_force = MOVE_FORCE_DEFAULT) /mob/living/simple_animal/hostile/megafauna/dragon/Destroy() - QDEL_NULL(fire_cone) - QDEL_NULL(meteors) - QDEL_NULL(mass_fire) - QDEL_NULL(lava_swoop) + fire_cone = null + meteors = null + mass_fire = null + lava_swoop = null return ..() /mob/living/simple_animal/hostile/megafauna/dragon/OpenFire() @@ -174,7 +174,7 @@ return FALSE return ..() -/mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE, separation = " ") // SKYRAT EDIT ADDITION - Better emotes - Original: /mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE) +/mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE, separation = " ", pref_to_check) // NOVA EDIT ADDITION - Better emotes - Original: /mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE), pref checks if(swooping & SWOOP_INVULNERABLE) //to suppress attack messages without overriding every single proc that could send a message saying we got hit return return ..() @@ -308,7 +308,7 @@ melee_damage_upper = 30 melee_damage_lower = 30 mouse_opacity = MOUSE_OPACITY_ICON - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1) loot = list() crusher_loot = list() butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/bone = 30) 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 26f3690fef13cd..50a6cee44ce5d3 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm @@ -116,6 +116,10 @@ Difficulty: Hard shockwave_scream() return + var/mob/living/living_target = target + if(istype(living_target) && living_target.stat == DEAD) + return + if(COOLDOWN_FINISHED(src, scream_cooldown)) chosen_attack = rand(1, 3) else @@ -206,8 +210,9 @@ Difficulty: Hard 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/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index 9540f5e1a4bba7..a1f7709815236e 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -1,3 +1,11 @@ +/// Mimics can't be made out of these objects +GLOBAL_LIST_INIT(animatable_blacklist, typecacheof(list( + /obj/structure/table, + /obj/structure/cable, + /obj/structure/window, + /obj/structure/blob, +))) + /mob/living/simple_animal/hostile/mimic name = "crate" desc = "A rectangular steel crate." @@ -98,9 +106,6 @@ O.forceMove(C) ..() -/// Mimics can't be made out of these objects -GLOBAL_LIST_INIT(animatable_blacklist, list(/obj/structure/table, /obj/structure/cable, /obj/structure/window, /obj/structure/blob)) - /mob/living/simple_animal/hostile/mimic/copy health = 100 maxHealth = 100 @@ -138,19 +143,21 @@ GLOBAL_LIST_INIT(animatable_blacklist, list(/obj/structure/table, /obj/structure /mob/living/simple_animal/hostile/mimic/copy/wabbajack(what_to_randomize, change_flags = WABBAJACK) visible_message(span_warning("[src] resists polymorphing into a new creature!")) -/mob/living/simple_animal/hostile/mimic/copy/proc/ChangeOwner(mob/owner) - if(owner != creator) - LoseTarget() - creator = owner - faction |= "[REF(owner)]" +/mob/living/simple_animal/hostile/mimic/copy/animate_atom_living(mob/living/owner) + change_owner(owner) -/mob/living/simple_animal/hostile/mimic/copy/proc/CheckObject(obj/O) - if((isitem(O) || isstructure(O)) && !is_type_in_list(O, GLOB.animatable_blacklist)) - return TRUE - return FALSE +/mob/living/simple_animal/hostile/mimic/copy/proc/change_owner(mob/owner) + if(isnull(owner) || creator == owner) + return + LoseTarget() + creator = owner + faction |= REF(owner) + +/mob/living/simple_animal/hostile/mimic/copy/proc/check_object(obj/target) + return ((isitem(target) || isstructure(target)) && !is_type_in_typecache(target, GLOB.animatable_blacklist)) /mob/living/simple_animal/hostile/mimic/copy/proc/CopyObject(obj/O, mob/living/user, destroy_original = 0) - if(destroy_original || CheckObject(O)) + if(destroy_original || check_object(O)) O.forceMove(src) name = O.name desc = O.desc 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 c4ab1f1c417250..3a838ac58cdf38 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 @@ -23,7 +23,6 @@ environment_smash = ENVIRONMENT_SMASH_NONE sentience_type = SENTIENCE_BOSS layer = LARGE_MOB_LAYER - plane = GAME_PLANE_UPPER_FOV_HIDDEN var/mob/living/set_target var/datum/move_loop/has_target/force_move/our_loop @@ -120,8 +119,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) return 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 881a6cf17d69ae..6386fa272b7eb8 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 @@ -18,7 +18,6 @@ harm_intent_damage = 0 //Punching elites gets you nowhere stat_attack = HARD_CRIT layer = LARGE_MOB_LAYER - plane = GAME_PLANE_UPPER_FOV_HIDDEN sentience_type = SENTIENCE_BOSS var/chosen_attack = 1 var/list/attack_action_types = list() @@ -29,9 +28,7 @@ /mob/living/simple_animal/hostile/asteroid/elite/Initialize(mapload) . = ..() AddComponent(/datum/component/seethrough_mob) - for(var/action_type in attack_action_types) - var/datum/action/innate/elite_attack/attack_action = new action_type() - attack_action.Grant(src) + grant_actions_by_list(attack_action_types) //Prevents elites from attacking members of their faction (can't hurt themselves either) and lets them mine rock with an attack despite not being able to smash walls. /mob/living/simple_animal/hostile/asteroid/elite/AttackingTarget(atom/attacked_target) @@ -190,7 +187,7 @@ 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) + var/list/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to play as a lavaland elite?", check_jobban = ROLE_SENTIENCE, 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(candidates.len) audible_message(span_boldwarning("The stirring sounds increase in volume!")) elitemind = pick(candidates) @@ -214,7 +211,12 @@ While using this makes the system rely on OnFire, it still gives options for tim if(boosted) mychild.key = elitemind.key mychild.sentience_act() - notify_ghosts("\A [mychild] has been awakened in \the [get_area(src)]!", source = mychild, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Lavaland Elite awakened") + notify_ghosts( + "\A [mychild] has been awakened in \the [get_area(src)]!", + source = mychild, + header = "Lavaland Elite awakened", + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) mychild.log_message("has been awakened by [key_name(activator)]!", LOG_GAME, color="#960000") icon_state = "tumor_popped" RegisterSignal(mychild, COMSIG_QDELETING, PROC_REF(onEliteLoss)) @@ -228,7 +230,12 @@ While using this makes the system rely on OnFire, it still gives options for tim if(boosted) mychild.maxHealth = mychild.maxHealth * 2 mychild.health = mychild.maxHealth - notify_ghosts("\A [mychild] has been challenged in \the [get_area(src)]!", source = mychild, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Lavaland Elite challenged") + notify_ghosts( + "\A [mychild] has been challenged in \the [get_area(src)]!", + source = mychild, + header = "Lavaland Elite challenged", + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) mychild.log_message("has been challenged by [key_name(activator)]!", LOG_GAME, color="#960000") /obj/structure/elite_tumor/Initialize(mapload) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm deleted file mode 100644 index 7a3451e4ef86e1..00000000000000 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm +++ /dev/null @@ -1,128 +0,0 @@ -//Gutlunches, passive mods that devour blood and gibs -/mob/living/simple_animal/hostile/asteroid/gutlunch - name = "gutlunch" - desc = "A scavenger that eats raw meat, often found alongside ash walkers. Produces a thick, nutritious milk." - icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' - icon_state = "gutlunch" - icon_living = "gutlunch" - icon_dead = "gutlunch" - mob_biotypes = MOB_ORGANIC|MOB_BEAST - speak_emote = list("warbles", "quavers") - emote_hear = list("trills.") - emote_see = list("sniffs.", "burps.") - weather_immunities = list(TRAIT_LAVA_IMMUNE, TRAIT_ASHSTORM_IMMUNE) - faction = list(FACTION_MINING, FACTION_ASHWALKER) - density = FALSE - speak_chance = 1 - turns_per_move = 8 - obj_damage = 0 - environment_smash = ENVIRONMENT_SMASH_NONE - move_to_delay = 15 - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "gently pushes aside" - response_disarm_simple = "gently push aside" - response_harm_continuous = "squishes" - response_harm_simple = "squish" - friendly_verb_continuous = "pinches" - friendly_verb_simple = "pinch" - combat_mode = FALSE - gold_core_spawnable = FRIENDLY_SPAWN - stat_attack = HARD_CRIT - gender = NEUTER - stop_automated_movement = FALSE - stop_automated_movement_when_pulled = TRUE - stat_exclusive = TRUE - robust_searching = TRUE - search_objects = 3 //Ancient simplemob AI shitcode. This makes them ignore all other mobs. - del_on_death = TRUE - loot = list(/obj/effect/decal/cleanable/blood/gibs) - death_message = "is pulped into bugmash." - - animal_species = /mob/living/simple_animal/hostile/asteroid/gutlunch - childtype = list(/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch = 100) - - wanted_objects = list(/obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/blood/gibs/, /obj/item/organ) - -/mob/living/simple_animal/hostile/asteroid/gutlunch/Initialize(mapload) - . = ..() - if(wanted_objects.len) - AddComponent(/datum/component/udder, /obj/item/udder/gutlunch, CALLBACK(src, PROC_REF(regenerate_icons)), CALLBACK(src, PROC_REF(regenerate_icons))) - ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) - -/mob/living/simple_animal/hostile/asteroid/gutlunch/CanAttack(atom/the_target) // Gutlunch-specific version of CanAttack to handle stupid stat_exclusive = true crap so we don't have to do it for literally every single simple_animal/hostile except the two that spawn in lavaland - if(!the_target || !isturf(the_target.loc)) // bail out on invalids - return FALSE - - if(see_invisible < the_target.invisibility)//Target's invisible to us, forget it - return FALSE - - if(isliving(the_target)) - var/mob/living/L = the_target - - if(faction_check_atom(L) && !attack_same) - return FALSE - if(L.stat > stat_attack || L.stat != stat_attack && stat_exclusive) - return FALSE - - return TRUE - - if(isobj(the_target) && is_type_in_typecache(the_target, wanted_objects)) - return TRUE - - return FALSE - -/mob/living/simple_animal/hostile/asteroid/gutlunch/regenerate_icons(new_udder_volume, max_udder_volume) - cut_overlays() - var/static/gutlunch_full_overlay - if(isnull(gutlunch_full_overlay)) - gutlunch_full_overlay = iconstate2appearance(icon, "gl_full") - if(new_udder_volume == max_udder_volume) - add_overlay(gutlunch_full_overlay) - ..() - -//Male gutlunch. They're smaller and more colorful! -/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck - name = "gubbuck" - gender = MALE - -/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck/Initialize(mapload) - . = ..() - add_atom_colour(pick("#E39FBB", "#D97D64", "#CF8C4A"), FIXED_COLOUR_PRIORITY) - update_transform(0.85) - -//Lady gutlunch. They make the babby. -/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen - name = "guthen" - gender = FEMALE - -/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch - name = "grublunch" - wanted_objects = list() //They don't eat. - gold_core_spawnable = NO_SPAWN - var/growth = 0 - -//Baby gutlunch -/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch/Initialize(mapload) - . = ..() - add_atom_colour("#9E9E9E", FIXED_COLOUR_PRIORITY) //Somewhat hidden - update_transform(0.45) - -/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch/Life(seconds_per_tick = SSMOBS_DT, times_fired) - ..() - growth++ - if(growth > 50) //originally used a timer for this but it was more of a problem than it was worth. - growUp() - -/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch/proc/growUp() - var/mob/living/L - if(prob(45)) - L = new /mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck(loc) - else - L = new /mob/living/simple_animal/hostile/asteroid/gutlunch/guthen(loc) - mind?.transfer_to(L) - L.faction = faction - L.setDir(dir) - L.Stun(20, ignore_canstun = TRUE) - visible_message(span_notice("[src] grows up into [L].")) - qdel(src) diff --git a/code/modules/mob/living/simple_animal/hostile/ooze.dm b/code/modules/mob/living/simple_animal/hostile/ooze.dm index d4f86d3905d06e..7ce269443ce153 100644 --- a/code/modules/mob/living/simple_animal/hostile/ooze.dm +++ b/code/modules/mob/living/simple_animal/hostile/ooze.dm @@ -41,6 +41,8 @@ ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) AddElement(/datum/element/content_barfer) + grant_actions_by_list(get_innate_actions()) + /mob/living/simple_animal/hostile/ooze/attacked_by(obj/item/I, mob/living/user) if(!eat_atom(I, TRUE)) return ..() @@ -71,6 +73,10 @@ if(ooze_nutrition <= 0) adjustBruteLoss(0.25 * seconds_per_tick) +/// Returns an applicable list of actions to grant to the mob. Will return a list or null. +/mob/living/simple_animal/hostile/ooze/proc/get_innate_actions() + return null + ///Does ooze_nutrition + supplied amount and clamps it within 0 and 500 /mob/living/simple_animal/hostile/ooze/proc/adjust_ooze_nutrition(amount) ooze_nutrition = clamp(ooze_nutrition + amount, 0, 500) @@ -100,29 +106,26 @@ name = "Gelatinous Cube" desc = "A cubic ooze native to Sholus VII.\nSince the advent of space travel this species has established itself in the waste treatment facilities of several space colonies.\nIt is often considered to be the third most infamous invasive species due to its highly aggressive and predatory nature." speed = 1 - damage_coeff = list(BRUTE = 1, BURN = 0.6, TOX = 0.5, CLONE = 1.5, STAMINA = 0, OXY = 1) + damage_coeff = list(BRUTE = 1, BURN = 0.6, TOX = 0.5, STAMINA = 0, OXY = 1) melee_damage_lower = 20 melee_damage_upper = 20 armour_penetration = 15 obj_damage = 20 death_message = "collapses into a pile of goo!" - ///The ability to give yourself a metabolic speed boost which raises heat - var/datum/action/cooldown/metabolicboost/boost ///The ability to consume mobs var/datum/action/consume/consume ///Initializes the mobs abilities and gives them to the mob /mob/living/simple_animal/hostile/ooze/gelatinous/Initialize(mapload) . = ..() - boost = new - boost.Grant(src) consume = new consume.Grant(src) -/mob/living/simple_animal/hostile/ooze/gelatinous/Destroy() - . = ..() - QDEL_NULL(boost) - QDEL_NULL(consume) +/mob/living/simple_animal/hostile/ooze/gelatinous/get_innate_actions() + var/static/list/innate_actions = list( + /datum/action/cooldown/metabolicboost, + ) + return innate_actions ///If this mob gets resisted by something, its trying to escape consumption. /mob/living/simple_animal/hostile/ooze/gelatinous/container_resist_act(mob/living/user) @@ -250,14 +253,14 @@ UnregisterSignal(vored_mob, COMSIG_QDELETING) vored_mob = null -///Gain health for the consumption and dump some clone loss on the target. +///Gain health for the consumption and dump some brute loss on the target. /datum/action/consume/process() var/mob/living/simple_animal/hostile/ooze/gelatinous/ooze = owner vored_mob.adjustBruteLoss(5) ooze.heal_ordered_damage((ooze.maxHealth * 0.03), list(BRUTE, BURN, OXY)) ///Heal 6% of these specific damage types each process ooze.adjust_ooze_nutrition(3) - ///Dump em at 200 cloneloss. + ///Dump em at 200 bruteloss. if(vored_mob.getBruteLoss() >= 200) stop_consuming() @@ -278,26 +281,25 @@ speed = 1 health = 200 maxHealth = 200 - damage_coeff = list(BRUTE = 1, BURN = 0.8, TOX = 0.5, CLONE = 1.5, STAMINA = 0, OXY = 1) + damage_coeff = list(BRUTE = 1, BURN = 0.8, TOX = 0.5, STAMINA = 0, OXY = 1) melee_damage_lower = 12 melee_damage_upper = 12 obj_damage = 15 death_message = "deflates and spills its vital juices!" edible_food_types = MEAT | VEGETABLES + ghost_controllable = TRUE //NOVA EDIT ADDITION - These guys can be helpful... maybe players will be helpful. - ghost_controllable = TRUE //SKYRAT EDIT ADDITION - These guys can be helpful... maybe players will be helpful. - -/mob/living/simple_animal/hostile/ooze/grapes/Initialize(mapload) - . = ..() - var/datum/action/cooldown/globules/glob_shooter = new(src) - glob_shooter.Grant(src) - var/datum/action/cooldown/gel_cocoon/gel_cocoon = new(src) - gel_cocoon.Grant(src) +/mob/living/simple_animal/hostile/ooze/grapes/get_innate_actions() + var/static/list/innate_actions = list( + /datum/action/cooldown/globules, + /datum/action/cooldown/gel_cocoon, + ) + return innate_actions /mob/living/simple_animal/hostile/ooze/grapes/add_cell_sample() AddElement(/datum/element/swabable, CELL_LINE_TABLE_GRAPE, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) -///Ability that allows the owner to fire healing globules at mobs, targetting specific limbs. +///Ability that allows the owner to fire healing globules at mobs, targeting specific limbs. /datum/action/cooldown/globules name = "Fire Mending globule" desc = "Fires a mending globule at someone, healing a specific limb of theirs." diff --git a/code/modules/mob/living/simple_animal/hostile/vatbeast.dm b/code/modules/mob/living/simple_animal/hostile/vatbeast.dm index 7c6edeb88da4ad..f5184a8543461f 100644 --- a/code/modules/mob/living/simple_animal/hostile/vatbeast.dm +++ b/code/modules/mob/living/simple_animal/hostile/vatbeast.dm @@ -14,7 +14,7 @@ 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) health = 250 maxHealth = 250 - damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 1, CLONE = 2, STAMINA = 0, OXY = 1) + damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 1, STAMINA = 0, OXY = 1) melee_damage_lower = 25 melee_damage_upper = 25 obj_damage = 40 @@ -28,8 +28,7 @@ /mob/living/simple_animal/hostile/vatbeast/Initialize(mapload) . = ..() - var/datum/action/cooldown/tentacle_slap/slapper = new(src) - slapper.Grant(src) + GRANT_ACTION(/datum/action/cooldown/tentacle_slap) add_cell_sample() AddComponent(/datum/component/tameable, list(/obj/item/food/fries, /obj/item/food/cheesyfries, /obj/item/food/cornchips, /obj/item/food/carrotfries), tame_chance = 30, bonus_tame_chance = 0, after_tame = CALLBACK(src, PROC_REF(tamed))) diff --git a/code/modules/mob/living/simple_animal/hostile/wizard.dm b/code/modules/mob/living/simple_animal/hostile/wizard.dm deleted file mode 100644 index d2957effd3cf95..00000000000000 --- a/code/modules/mob/living/simple_animal/hostile/wizard.dm +++ /dev/null @@ -1,83 +0,0 @@ -/mob/living/simple_animal/hostile/wizard - name = "Space Wizard" - desc = "EI NATH?" - icon = 'icons/mob/simple/simple_human.dmi' - icon_state = "wizard" - icon_living = "wizard" - icon_dead = "wizard_dead" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - sentience_type = SENTIENCE_HUMANOID - speak_chance = 0 - turns_per_move = 3 - speed = 0 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - melee_damage_lower = 5 - melee_damage_upper = 5 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' - combat_mode = TRUE - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 7.5 - faction = list(ROLE_WIZARD) - status_flags = CANPUSH - footstep_type = FOOTSTEP_MOB_SHOE - - retreat_distance = 3 //out of fireball range - minimum_distance = 3 - del_on_death = 1 - loot = list( - /obj/effect/mob_spawn/corpse/human/wizard, - /obj/item/staff, - ) - - var/next_cast = 0 - var/datum/action/cooldown/spell/pointed/projectile/fireball/fireball - var/datum/action/cooldown/spell/teleport/radius_turf/blink/blink - var/datum/action/cooldown/spell/aoe/magic_missile/magic_missile - -/mob/living/simple_animal/hostile/wizard/Initialize(mapload) - . = ..() - apply_dynamic_human_appearance(src, mob_spawn_path = /obj/effect/mob_spawn/corpse/human/wizard, r_hand = /obj/item/staff) - var/obj/item/implant/exile/exiled = new /obj/item/implant/exile(src) - exiled.implant(src) - - fireball = new(src) - fireball.spell_requirements &= ~(SPELL_REQUIRES_HUMAN|SPELL_REQUIRES_WIZARD_GARB|SPELL_REQUIRES_MIND) - fireball.Grant(src) - - magic_missile = new(src) - magic_missile.spell_requirements &= ~(SPELL_REQUIRES_HUMAN|SPELL_REQUIRES_WIZARD_GARB|SPELL_REQUIRES_MIND) - magic_missile.Grant(src) - - blink = new(src) - blink.spell_requirements &= ~(SPELL_REQUIRES_HUMAN|SPELL_REQUIRES_WIZARD_GARB|SPELL_REQUIRES_MIND) - blink.outer_tele_radius = 3 - blink.Grant(src) - -/mob/living/simple_animal/hostile/wizard/Destroy() - QDEL_NULL(fireball) - QDEL_NULL(magic_missile) - QDEL_NULL(blink) - return ..() - -/mob/living/simple_animal/hostile/wizard/handle_automated_action() - . = ..() - if(target && next_cast < world.time) - if((get_dir(src, target) in list(SOUTH, EAST, WEST, NORTH)) && fireball.can_cast_spell(feedback = FALSE)) - setDir(get_dir(src, target)) - fireball.Trigger(null, target) - next_cast = world.time + 1 SECONDS - return - - if(magic_missile.IsAvailable()) - magic_missile.Trigger(null, target) - next_cast = world.time + 1 SECONDS - return - - if(blink.IsAvailable()) // Spam Blink when you can - blink.Trigger(null, src) - next_cast = world.time + 1 SECONDS - return diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm deleted file mode 100644 index f6c5e644b8677f..00000000000000 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ /dev/null @@ -1,1074 +0,0 @@ -/* Parrots! - * Contains - * Defines - * Inventory (headset stuff) - * Attack responces - * AI - * Procs / Verbs (usable by players) - * Sub-types - * Hear & say (the things we do for gimmicks) - */ - -/* - * Defines - */ - -//Only a maximum of one action and one intent should be active at any given time. -//Actions -#define PARROT_PERCH (1<<0) //Sitting/sleeping, not moving -#define PARROT_SWOOP (1<<1) //Moving towards or away from a target -#define PARROT_WANDER (1<<2) //Moving without a specific target in mind - -//Intents -#define PARROT_STEAL (1<<3) //Flying towards a target to steal it/from it -#define PARROT_ATTACK (1<<4) //Flying towards a target to attack it -#define PARROT_RETURN (1<<5) //Flying towards its perch -#define PARROT_FLEE (1<<6) //Flying away from its attacker - - -/mob/living/simple_animal/parrot - name = "parrot" - desc = "The parrot squawks, \"They're a Parrot! BAWWK!\"" //' - icon = 'icons/mob/simple/animal.dmi' - icon_state = "parrot_fly" - icon_living = "parrot_fly" - icon_dead = "parrot_dead" - var/icon_sit = "parrot_sit" - density = FALSE - health = 80 - maxHealth = 80 - pass_flags = PASSTABLE | PASSMOB - - speak = list("Hi!","Hello!","Cracker?","BAWWWWK george mellons griffing me!") - speak_emote = list("squawks","says","yells") - emote_hear = list("squawks.","bawks!") - emote_see = list("flutters their wings.") - - speak_chance = 1 //1% (1 in 100) chance every tick; So about once per 150 seconds, assuming an average tick is 1.5s - turns_per_move = 5 - butcher_results = list(/obj/item/food/cracker = 1) - melee_damage_upper = 10 - melee_damage_lower = 5 - - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "gently moves aside" - response_disarm_simple = "gently move aside" - response_harm_continuous = "swats" - response_harm_simple = "swat" - stop_automated_movement = 1 - combat_mode = TRUE //parrots now start "aggressive" since only player parrots will nuzzle. - attack_verb_continuous = "chomps" - attack_verb_simple = "chomp" - attack_vis_effect = ATTACK_EFFECT_BITE - friendly_verb_continuous = "grooms" - friendly_verb_simple = "groom" - mob_size = MOB_SIZE_SMALL - gold_core_spawnable = FRIENDLY_SPAWN - - var/parrot_damage_upper = 10 - var/parrot_state = PARROT_WANDER //Hunt for a perch when created - var/parrot_sleep_max = 25 //The time the parrot sits while perched before looking around. Mosly a way to avoid the parrot's AI in life() being run every single tick. - var/parrot_sleep_dur = 25 //Same as above, this is the var that physically counts down - var/parrot_dam_zone = list(BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_L_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_ARM, BODY_ZONE_R_LEG) //For humans, select a bodypart to attack - - var/parrot_speed = 5 //"Delay in world ticks between movement." according to byond. Yeah, that's BS but it does directly affect movement. Higher number = slower. - var/parrot_lastmove = null //Updates/Stores position of the parrot while it's moving - var/parrot_stuck = 0 //If parrot_lastmove hasn't changed, this will increment until it reaches parrot_stuck_threshold - var/parrot_stuck_threshold = 10 //if this == parrot_stuck, it'll force the parrot back to wandering - - var/list/speech_buffer = list() - var/speech_shuffle_rate = 20 - var/list/available_channels = list() - - //Headset for Poly to yell at engineers :) - var/obj/item/radio/headset/ears = null - - //Wheter the Parrot should come with a headset - var/spawn_headset = TRUE - - //The thing the parrot is currently interested in. This gets used for items the parrot wants to pick up, mobs it wants to steal from, - //mobs it wants to attack or mobs that have attacked it - var/atom/movable/parrot_interest = null - - //Parrots will generally sit on their perch unless something catches their eye. - //These vars store their preffered perch and if they dont have one, what they can use as a perch - var/obj/parrot_perch = null - var/obj/desired_perches = list(/obj/structure/frame/computer, - /obj/structure/displaycase, - /obj/structure/filingcabinet, - /obj/machinery/teleport, - /obj/machinery/dna_scannernew, - /obj/machinery/telecomms, - /obj/machinery/nuclearbomb, - /obj/machinery/recharge_station, - /obj/machinery/smartfridge, - /obj/machinery/computer, - /obj/machinery/suit_storage_unit, - ) - - //Parrots are kleptomaniacs. This variable ... stores the item a parrot is holding. - var/obj/item/held_item = null - - -/mob/living/simple_animal/parrot/Initialize(mapload) - . = ..() - parrot_sleep_dur = parrot_sleep_max //In case someone decides to change the max without changing the duration var - - add_verb(src, list(/mob/living/simple_animal/parrot/proc/steal_from_ground, \ - /mob/living/simple_animal/parrot/proc/steal_from_mob, \ - /mob/living/simple_animal/parrot/verb/drop_held_item_player, \ - /mob/living/simple_animal/parrot/proc/perch_player, \ - /mob/living/simple_animal/parrot/proc/toggle_mode, - /mob/living/simple_animal/parrot/proc/perch_mob_player)) - - AddElement(/datum/element/strippable, GLOB.strippable_parrot_items) - AddElement(/datum/element/simple_flying) - if(!spawn_headset) - return - if(!ears) - var/headset = pick(/obj/item/radio/headset/headset_sec, \ - /obj/item/radio/headset/headset_eng, \ - /obj/item/radio/headset/headset_med, \ - /obj/item/radio/headset/headset_sci, \ - /obj/item/radio/headset/headset_cargo) - ears = new headset(src) - -/mob/living/simple_animal/parrot/Destroy() - QDEL_NULL(ears) - return ..() - -/mob/living/simple_animal/parrot/examine(mob/user) - . = ..() - if(stat != DEAD) - return - - if(HAS_MIND_TRAIT(user, TRAIT_NAIVE)) - . += pick( - "It seems tired and shagged out after a long squawk.", - "It seems to be pining for the fjords.", - "It's resting. It's a beautiful bird. Lovely plumage.", - ) - else - . += pick( - "This parrot is no more.", - "This is a late parrot.", - "This is an ex-parrot.", - ) - -/mob/living/simple_animal/parrot/death(gibbed) - if(held_item) - held_item.forceMove(drop_location()) - held_item = null - SSmove_manager.stop_looping(src) - - if(buckled) - buckled.unbuckle_mob(src,force=1) - buckled = null - pixel_x = base_pixel_x - pixel_y = base_pixel_y - - return ..() - - -/mob/living/simple_animal/parrot/get_status_tab_items() - . = ..() - . += "Held Item: [held_item]" - -// SKYRAT EDIT REMOVAL BEGIN - MOVED TO modular_skyrat/modules/poly_commands -/* -/mob/living/simple_animal/parrot/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans, list/message_mods = list(), message_range) - . = ..() - if(speaker != src && prob(50)) //Dont imitate ourselves - if(!radio_freq || prob(10)) - if(speech_buffer.len >= 500) - speech_buffer -= pick(speech_buffer) - speech_buffer |= html_decode(raw_message) - if(speaker == src && !client) //If a parrot squawks in the woods and no one is around to hear it, does it make a sound? This code says yes! - return message -*/ -// SKYRAT EDIT REMOVAL END - -/mob/living/simple_animal/parrot/radio(message, list/message_mods = list(), list/spans, language) //literally copied from human/radio(), but there's no other way to do this. at least it's better than it used to be. - . = ..() - if(.) - return - - if(message_mods[MODE_HEADSET]) - if(ears) - ears.talk_into(src, message, , spans, language, message_mods) - return ITALICS | REDUCE_RANGE - else if(message_mods[RADIO_EXTENSION] == MODE_DEPARTMENT) - if(ears) - ears.talk_into(src, message, message_mods[RADIO_EXTENSION], spans, language, message_mods) - return ITALICS | REDUCE_RANGE - else if(message_mods[RADIO_EXTENSION] in GLOB.radiochannels) - if(ears) - ears.talk_into(src, message, message_mods[RADIO_EXTENSION], spans, language, message_mods) - return ITALICS | REDUCE_RANGE - - return FALSE - -GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list( - /datum/strippable_item/parrot_headset, -))) - -/datum/strippable_item/parrot_headset - key = STRIPPABLE_ITEM_PARROT_HEADSET - -/datum/strippable_item/parrot_headset/get_item(atom/source) - var/mob/living/simple_animal/parrot/parrot_source = source - return istype(parrot_source) ? parrot_source.ears : null - -/datum/strippable_item/parrot_headset/try_equip(atom/source, obj/item/equipping, mob/user) - . = ..() - if (!.) - return FALSE - - if (!istype(equipping, /obj/item/radio/headset)) - to_chat(user, span_warning("[equipping] won't fit!")) - return FALSE - - return TRUE - -// There is no delay for putting a headset on a parrot. -/datum/strippable_item/parrot_headset/start_equip(atom/source, obj/item/equipping, mob/user) - return TRUE - -/datum/strippable_item/parrot_headset/finish_equip(atom/source, obj/item/equipping, mob/user) - var/obj/item/radio/headset/radio = equipping - if (!istype(radio)) - return - - var/mob/living/simple_animal/parrot/parrot_source = source - if (!istype(parrot_source)) - return - - if (!user.transferItemToLoc(radio, source)) - return - - parrot_source.ears = radio - - to_chat(user, span_notice("You fit [radio] onto [source].")) - - parrot_source.available_channels.Cut() - - for (var/channel in radio.channels) - var/channel_to_add - - switch (channel) - if (RADIO_CHANNEL_ENGINEERING) - channel_to_add = RADIO_TOKEN_ENGINEERING - if (RADIO_CHANNEL_COMMAND) - channel_to_add = RADIO_TOKEN_COMMAND - if (RADIO_CHANNEL_SECURITY) - channel_to_add = RADIO_TOKEN_SECURITY - if (RADIO_CHANNEL_SCIENCE) - channel_to_add = RADIO_TOKEN_SCIENCE - if (RADIO_CHANNEL_MEDICAL) - channel_to_add = RADIO_TOKEN_MEDICAL - if (RADIO_CHANNEL_SUPPLY) - channel_to_add = RADIO_TOKEN_SUPPLY - if (RADIO_CHANNEL_SERVICE) - channel_to_add = RADIO_TOKEN_SERVICE - - if (channel_to_add) - parrot_source.available_channels += channel_to_add - - if (radio.translate_binary) - parrot_source.available_channels.Add(MODE_TOKEN_BINARY) - -/datum/strippable_item/parrot_headset/start_unequip(atom/source, mob/user) - . = ..() - if (!.) - return FALSE - - var/mob/living/simple_animal/parrot/parrot_source = source - if (!istype(parrot_source)) - return - - if (!parrot_source.stat) - parrot_source.say("[parrot_source.available_channels.len ? "[pick(parrot_source.available_channels)] " : null]BAWWWWWK LEAVE THE HEADSET BAWKKKKK!") - - return TRUE - -/datum/strippable_item/parrot_headset/finish_unequip(atom/source, mob/user) - var/mob/living/simple_animal/parrot/parrot_source = source - if (!istype(parrot_source)) - return - - parrot_source.ears.forceMove(parrot_source.drop_location()) - parrot_source.ears = null - -/* - * Attack responces - */ -//Humans, monkeys, aliens -/mob/living/simple_animal/parrot/attack_hand(mob/living/carbon/user, list/modifiers) - ..() - if(client) - return - if(!stat && user.combat_mode) - - icon_state = icon_living //It is going to be flying regardless of whether it flees or attacks - - if(parrot_state == PARROT_PERCH) - parrot_sleep_dur = parrot_sleep_max //Reset it's sleep timer if it was perched - - set_parrot_interest(user) - parrot_state = PARROT_SWOOP //The parrot just got hit, it WILL move, now to pick a direction.. - - if(health > 30) //Let's get in there and squawk it up! - parrot_state |= PARROT_ATTACK - else - parrot_state |= PARROT_FLEE //Otherwise, fly like a bat out of hell! - drop_held_item(0) - if(stat != DEAD && !user.combat_mode) - handle_automated_speech(1) //assured speak/emote - return - -/mob/living/simple_animal/parrot/attack_paw(mob/living/carbon/human/user, list/modifiers) - return attack_hand(user, modifiers) - -/mob/living/simple_animal/parrot/attack_alien(mob/living/carbon/alien/user, list/modifiers) - return attack_hand(user, modifiers) - -//Simple animals -/mob/living/simple_animal/parrot/attack_animal(mob/living/simple_animal/user, list/modifiers) - . = ..() //goodbye immortal parrots - - if(client) - return - - if(parrot_state == PARROT_PERCH) - parrot_sleep_dur = parrot_sleep_max //Reset it's sleep timer if it was perched - - if(user.melee_damage_upper > 0 && !stat) - set_parrot_interest(user) - parrot_state = PARROT_SWOOP | PARROT_ATTACK //Attack other animals regardless - icon_state = icon_living - -//Mobs with objects -/mob/living/simple_animal/parrot/attackby(obj/item/O, mob/living/user, params) - if(!stat && !client && !istype(O, /obj/item/stack/medical) && !istype(O, /obj/item/food/cracker)) - if(O.force) - if(parrot_state == PARROT_PERCH) - parrot_sleep_dur = parrot_sleep_max //Reset it's sleep timer if it was perched - - set_parrot_interest(user) - parrot_state = PARROT_SWOOP - if(health > 30) //Let's get in there and squawk it up! - parrot_state |= PARROT_ATTACK - else - parrot_state |= PARROT_FLEE - icon_state = icon_living - drop_held_item(0) - else if(istype(O, /obj/item/food/cracker)) //Poly wants a cracker. - qdel(O) - if(health < maxHealth) - adjustBruteLoss(-10) - speak_chance *= 1.27 // 20 crackers to go from 1% to 100% - speech_shuffle_rate += 10 - to_chat(user, span_notice("[src] eagerly devours the cracker.")) - ..() - return - -//Bullets -/mob/living/simple_animal/parrot/bullet_act(obj/projectile/Proj) - . = ..() - if(!stat && !client) - if(parrot_state == PARROT_PERCH) - parrot_sleep_dur = parrot_sleep_max //Reset it's sleep timer if it was perched - - set_parrot_interest(null) - parrot_state = PARROT_WANDER | PARROT_FLEE //Been shot and survived! RUN LIKE HELL! - //parrot_been_shot += 5 - icon_state = icon_living - drop_held_item(0) - -/mob/living/simple_animal/parrot/Process_Spacemove(movement_dir = 0, continuous_move = FALSE) - if(!stat) //Birds can fly, fun fact. No I don't care that space doesn't have air. Space parrots bitch - return TRUE - return ..() -/* - * AI - Not really intelligent, but I'm calling it AI anyway. - */ -/mob/living/simple_animal/parrot/Life(seconds_per_tick = SSMOBS_DT, times_fired) - ..() - - //Sprite update for when a parrot gets pulled - if(pulledby && !stat && parrot_state != PARROT_WANDER) - if(buckled) - buckled.unbuckle_mob(src, TRUE) - buckled = null - icon_state = icon_living - parrot_state = PARROT_WANDER - pixel_x = initial(pixel_x) - pixel_y = initial(pixel_y) - return - - -//-----SPEECH - /* Parrot speech mimickry! - Phrases that the parrot Hear()s get added to speach_buffer. - Every once in a while, the parrot picks one of the lines from the buffer and replaces an element of the 'speech' list. */ -/mob/living/simple_animal/parrot/handle_automated_speech() - ..() - if(speech_buffer.len && prob(speech_shuffle_rate)) //shuffle out a phrase and add in a new one - if(speak.len) - speak.Remove(pick(speak)) - - speak.Add(pick(speech_buffer)) - - -/mob/living/simple_animal/parrot/handle_automated_movement() - if(!isturf(src.loc) || !(mobility_flags & MOBILITY_MOVE) || buckled) - return //If it can't move, dont let it move. (The buckled check probably isn't necessary thanks to canmove) - - if(client && stat == CONSCIOUS && parrot_state != icon_living) - icon_state = icon_living - -//-----SLEEPING - if(parrot_state == PARROT_PERCH) - if(parrot_perch && parrot_perch.loc != src.loc) //Make sure someone hasn't moved our perch on us - if(parrot_perch in view(src)) - parrot_state = PARROT_SWOOP | PARROT_RETURN - icon_state = icon_living - return - else - parrot_state = PARROT_WANDER - icon_state = icon_living - return - - parrot_sleep_dur-- - if(parrot_sleep_dur) //Zzz - return - - else - //This way we only call the stuff below once every [sleep_max] ticks. - parrot_sleep_dur = parrot_sleep_max - - //Cycle through message modes for the headset - if(speak.len) - var/list/newspeak = list() - - if(available_channels.len && src.ears) - for(var/possible_phrase in speak) - - //50/50 chance to not use the radio at all - var/useradio = 0 - if(prob(50)) - useradio = 1 - - if((possible_phrase[1] in GLOB.department_radio_prefixes) && (copytext_char(possible_phrase, 2, 3) in GLOB.department_radio_keys)) - possible_phrase = "[useradio?pick(available_channels):""][copytext_char(possible_phrase, 3)]" //crop out the channel prefix - else - possible_phrase = "[useradio?pick(available_channels):""][possible_phrase]" - - newspeak.Add(possible_phrase) - - else //If we have no headset or channels to use, dont try to use any! - for(var/possible_phrase in speak) - if((possible_phrase[1] in GLOB.department_radio_prefixes) && (copytext_char(possible_phrase, 2, 3) in GLOB.department_radio_keys)) - possible_phrase = copytext_char(possible_phrase, 3) //crop out the channel prefix - newspeak.Add(possible_phrase) - speak = newspeak - - //Search for item to steal - set_parrot_interest(search_for_item()) - if(parrot_interest) - manual_emote("looks in [parrot_interest]'s direction and takes flight.") - parrot_state = PARROT_SWOOP | PARROT_STEAL - icon_state = icon_living - return - -//-----WANDERING - This is basically a 'I dont know what to do yet' state - else if(parrot_state == PARROT_WANDER) - //Stop movement, we'll set it later - SSmove_manager.stop_looping(src) - set_parrot_interest(null) - - //Wander around aimlessly. This will help keep the loops from searches down - //and possibly move the mob into a new are in view of something they can use - if(prob(90)) - step(src, pick(GLOB.cardinals)) - return - - if(!held_item && !parrot_perch) //If we've got nothing to do.. look for something to do. - var/atom/movable/AM = search_for_perch_and_item() //This handles checking through lists so we know it's either a perch or stealable item - if(AM) - if(isitem(AM) || isliving(AM)) //If stealable item - set_parrot_interest(AM) - manual_emote("turns and flies towards [parrot_interest].") - parrot_state = PARROT_SWOOP | PARROT_STEAL - return - else //Else it's a perch - parrot_perch = AM - parrot_state = PARROT_SWOOP | PARROT_RETURN - return - return - - if(parrot_interest && (parrot_interest in view(src))) - parrot_state = PARROT_SWOOP | PARROT_STEAL - return - - if(parrot_perch && (parrot_perch in view(src))) - parrot_state = PARROT_SWOOP | PARROT_RETURN - return - - else //Have an item but no perch? Find one! - parrot_perch = search_for_perch() - if(parrot_perch) - parrot_state = PARROT_SWOOP | PARROT_RETURN - return -//-----STEALING - else if(parrot_state == (PARROT_SWOOP | PARROT_STEAL)) - SSmove_manager.stop_looping(src) - if(!parrot_interest || held_item) - parrot_state = PARROT_SWOOP | PARROT_RETURN - return - - if(!(parrot_interest in view(src))) - parrot_state = PARROT_SWOOP | PARROT_RETURN - return - - if(Adjacent(parrot_interest)) - - if(isliving(parrot_interest)) - steal_from_mob() - - else //This should ensure that we only grab the item we want, and make sure it's not already collected on our perch - if(!parrot_perch || parrot_interest.loc != parrot_perch.loc) - held_item = parrot_interest - parrot_interest.forceMove(src) - visible_message(span_notice("[src] grabs [held_item]!"), span_notice("You grab [held_item]!"), span_hear("You hear the sounds of wings flapping furiously.")) - - set_parrot_interest(null) - parrot_state = PARROT_SWOOP | PARROT_RETURN - return - - SSmove_manager.move_to(src, parrot_interest, 1, parrot_speed) - if(isStuck()) - return - - return - -//-----RETURNING TO PERCH - else if(parrot_state == (PARROT_SWOOP | PARROT_RETURN)) - SSmove_manager.stop_looping(src) - if(!parrot_perch || !isturf(parrot_perch.loc)) //Make sure the perch exists and somehow isn't inside of something else. - parrot_perch = null - parrot_state = PARROT_WANDER - return - - if(Adjacent(parrot_perch)) - forceMove(parrot_perch.loc) - drop_held_item() - parrot_state = PARROT_PERCH - icon_state = icon_sit - return - - SSmove_manager.move_to(src, parrot_perch, 1, parrot_speed) - if(isStuck()) - return - - return - -//-----FLEEING - else if(parrot_state == (PARROT_SWOOP | PARROT_FLEE)) - SSmove_manager.stop_looping(src) - if(!parrot_interest || !isliving(parrot_interest)) //Sanity - parrot_state = PARROT_WANDER - - SSmove_manager.move_away(src, parrot_interest, 1, parrot_speed) - if(isStuck()) - return - - return - -//-----ATTACKING - else if(parrot_state == (PARROT_SWOOP | PARROT_ATTACK)) - - //If we're attacking a nothing, an object, a turf or a ghost for some stupid reason, switch to wander - if(!parrot_interest || !isliving(parrot_interest)) - set_parrot_interest(null) - parrot_state = PARROT_WANDER - return - - var/mob/living/L = parrot_interest - if(melee_damage_upper == 0) - melee_damage_upper = parrot_damage_upper - set_combat_mode(TRUE) - - //If the mob is close enough to interact with - if(Adjacent(parrot_interest)) - - //If the mob we've been chasing/attacking dies or falls into crit, check for loot! - if(L.stat) - set_parrot_interest(null) - if(!held_item) - held_item = steal_from_ground() - if(!held_item) - held_item = steal_from_mob() //Apparently it's possible for dead mobs to hang onto items in certain circumstances. - if(parrot_perch in view(src)) //If we have a home nearby, go to it, otherwise find a new home - parrot_state = PARROT_SWOOP | PARROT_RETURN - else - parrot_state = PARROT_WANDER - return - - attack_verb_continuous = pick("claws at", "chomps") - attack_verb_simple = pick("claw at", "chomp") - L.attack_animal(src)//Time for the hurt to begin! - //Otherwise, fly towards the mob! - else - SSmove_manager.move_to(src, parrot_interest, 1, parrot_speed) - if(isStuck()) - return - - return -//-----STATE MISHAP - else //This should not happen. If it does lets reset everything and try again - SSmove_manager.stop_looping(src) - set_parrot_interest(null) - parrot_perch = null - drop_held_item() - parrot_state = PARROT_WANDER - return - -/* - * Procs - */ - -/mob/living/simple_animal/parrot/proc/set_parrot_interest(atom/movable/shiny) - if(parrot_interest) - UnregisterSignal(parrot_interest, COMSIG_QDELETING) - parrot_interest = shiny - if(parrot_interest) - RegisterSignal(parrot_interest, COMSIG_QDELETING, PROC_REF(shiny_deleted)) - -/mob/living/simple_animal/parrot/proc/shiny_deleted(datum/source) - SIGNAL_HANDLER - set_parrot_interest(null) - -/mob/living/simple_animal/parrot/proc/isStuck() - //Check to see if the parrot is stuck due to things like windows or doors or windowdoors - if(parrot_lastmove) - if(parrot_lastmove == src.loc) - if(parrot_stuck_threshold >= ++parrot_stuck) //If it has been stuck for a while, go back to wander. - parrot_state = PARROT_WANDER - parrot_stuck = 0 - parrot_lastmove = null - return TRUE - else - parrot_lastmove = null - else - parrot_lastmove = src.loc - return FALSE - -/mob/living/simple_animal/parrot/proc/search_for_item() - var/item - for(var/atom/movable/AM in view(src)) - //Skip items we already stole or are wearing or are too big - if(parrot_perch && AM.loc == parrot_perch.loc || AM.loc == src) - continue - if(isitem(AM)) - var/obj/item/I = AM - if(I.w_class < WEIGHT_CLASS_SMALL) - item = I - else if(iscarbon(AM)) - var/mob/living/carbon/C = AM - for(var/obj/item/I in C.held_items) - if(I.w_class <= WEIGHT_CLASS_SMALL) - item = I - break - if(item) - if(!length(get_path_to(src, item))) // WHY DO WE DISREGARD THE PATH AHHHHHH - item = null - continue - return item - -/mob/living/simple_animal/parrot/proc/search_for_perch() - for(var/obj/O in view(src)) - for(var/path in desired_perches) - if(istype(O, path)) - return O - return null - -//This proc was made to save on doing two 'in view' loops seperatly -/mob/living/simple_animal/parrot/proc/search_for_perch_and_item() - for(var/atom/movable/AM in view(src)) - for(var/perch_path in desired_perches) - if(istype(AM, perch_path)) - return AM - - //Skip items we already stole or are wearing or are too big - if(parrot_perch && AM.loc == parrot_perch.loc || AM.loc == src) - continue - - if(isitem(AM)) - var/obj/item/I = AM - if(I.w_class <= WEIGHT_CLASS_SMALL) - return I - - if(iscarbon(AM)) - var/mob/living/carbon/C = AM - for(var/obj/item/I in C.held_items) - if(I.w_class <= WEIGHT_CLASS_SMALL) - return C - return null - - -/* - * Verbs - These are actually procs, but can be used as verbs by player-controlled parrots. - */ -/mob/living/simple_animal/parrot/proc/steal_from_ground() - set name = "Steal from ground" - set category = "Parrot" - set desc = "Grabs a nearby item." - - if(stat) - return -1 - - if(held_item) - to_chat(src, span_warning("You are already holding [held_item]!")) - return 1 - - for(var/obj/item/I in view(1,src)) - //Make sure we're not already holding it and it's small enough - if(I.loc != src && I.w_class <= WEIGHT_CLASS_SMALL) - - //If we have a perch and the item is sitting on it, continue - if(!client && parrot_perch && I.loc == parrot_perch.loc) - continue - - held_item = I - I.forceMove(src) - visible_message(span_notice("[src] grabs [held_item]!"), span_notice("You grab [held_item]!"), span_hear("You hear the sounds of wings flapping furiously.")) - return held_item - - to_chat(src, span_warning("There is nothing of interest to take!")) - return 0 - -/mob/living/simple_animal/parrot/proc/steal_from_mob() - set name = "Steal from mob" - set category = "Parrot" - set desc = "Steals an item right out of a person's hand!" - - if(stat) - return -1 - - if(held_item) - to_chat(src, span_warning("You are already holding [held_item]!")) - return 1 - - var/obj/item/stolen_item = null - - for(var/mob/living/carbon/C in view(1,src)) - for(var/obj/item/I in C.held_items) - if(I.w_class <= WEIGHT_CLASS_SMALL) - stolen_item = I - break - - if(stolen_item) - C.transferItemToLoc(stolen_item, src, TRUE) - held_item = stolen_item - visible_message(span_notice("[src] grabs [held_item] out of [C]'s hand!"), span_notice("You snag [held_item] out of [C]'s hand!"), span_hear("You hear the sounds of wings flapping furiously.")) - return held_item - - to_chat(src, span_warning("There is nothing of interest to take!")) - return 0 - -/mob/living/simple_animal/parrot/verb/drop_held_item_player() - set name = "Drop held item" - set category = "Parrot" - set desc = "Drop the item you're holding." - - if(stat) - return - - src.drop_held_item() - - return - -/mob/living/simple_animal/parrot/proc/drop_held_item(drop_gently = 1) - set name = "Drop held item" - set category = "Parrot" - set desc = "Drop the item you're holding." - - if(stat) - return -1 - - if(!held_item) - if(src == usr) //So that other mobs won't make this message appear when they're bludgeoning you. - to_chat(src, span_warning("You have nothing to drop!")) - return 0 - - -//parrots will eat crackers instead of dropping them - if(istype(held_item, /obj/item/food/cracker) && (drop_gently)) - qdel(held_item) - held_item = null - if(health < maxHealth) - adjustBruteLoss(-10) - manual_emote("[src] eagerly downs the cracker.") - return 1 - - - if(!drop_gently) - if(isgrenade(held_item)) - var/obj/item/grenade/G = held_item - G.forceMove(drop_location()) - G.detonate() - to_chat(src, span_danger("You let go of [held_item]!")) - held_item = null - return 1 - - to_chat(src, span_notice("You drop [held_item].")) - - held_item.forceMove(drop_location()) - held_item = null - return 1 - -/mob/living/simple_animal/parrot/proc/perch_player() - set name = "Sit" - set category = "Parrot" - set desc = "Sit on a nice comfy perch." - - if(stat || !client) - return - - if(icon_state == icon_living) - for(var/atom/movable/AM in view(src,1)) - for(var/perch_path in desired_perches) - if(istype(AM, perch_path)) - src.forceMove(AM.loc) - icon_state = icon_sit - parrot_state = PARROT_PERCH - return - to_chat(src, span_warning("There is no perch nearby to sit on!")) - return - -/mob/living/simple_animal/parrot/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) - . = ..() - if(. && !stat && client && parrot_state == PARROT_PERCH) - parrot_state = PARROT_WANDER - icon_state = icon_living - pixel_x = initial(pixel_x) - pixel_y = initial(pixel_y) - -/mob/living/simple_animal/parrot/proc/perch_mob_player() - set name = "Sit on Human's Shoulder" - set category = "Parrot" - set desc = "Sit on a nice comfy human being!" - - if(stat || !client) - return - - if(!buckled) - for(var/mob/living/carbon/human/H in view(src,1)) - if(H.has_buckled_mobs() && H.buckled_mobs.len >= H.max_buckled_mobs) //Already has a parrot, or is being eaten by a slime - continue - perch_on_human(H) - return - to_chat(src, span_warning("There is nobody nearby that you can sit on!")) - else - icon_state = icon_living - parrot_state = PARROT_WANDER - if(buckled) - to_chat(src, span_notice("You are no longer sitting on [buckled]'s shoulder.")) - buckled.unbuckle_mob(src, TRUE) - buckled = null - pixel_x = initial(pixel_x) - pixel_y = initial(pixel_y) - -/* SKYRAT EDIT - MOVED TO modular_skyrat/modules/poly_commands/parrot.dm -/mob/living/simple_animal/parrot/proc/perch_on_human(mob/living/carbon/human/H) - if(!H) - return - forceMove(get_turf(H)) - if(H.buckle_mob(src, TRUE)) - pixel_y = 9 - pixel_x = pick(-8,8) //pick left or right shoulder - icon_state = icon_sit - parrot_state = PARROT_PERCH - to_chat(src, span_notice("You sit on [H]'s shoulder.")) -*/ - -/mob/living/simple_animal/parrot/proc/toggle_mode() - set name = "Toggle mode" - set category = "Parrot" - set desc = "Time to bear those claws!" - - if(stat || !client) - return - - if(combat_mode) - melee_damage_upper = 0 - set_combat_mode(FALSE) - else - melee_damage_upper = parrot_damage_upper - set_combat_mode(TRUE) - to_chat(src, span_notice("You will now [combat_mode ? "Harm" : "Help"] others.")) - return - -/mob/living/simple_animal/parrot/natural - spawn_headset = FALSE -/* - * Sub-types - */ -/mob/living/simple_animal/parrot/poly - name = "Poly" - desc = "Poly the Parrot. An expert on quantum cracker theory." - speak = list("Poly wanna cracker!", ":e Check the crystal, you chucklefucks!",":e Wire the solars, you lazy bums!",":e WHO TOOK THE DAMN MODSUITS?",":e OH GOD ITS ABOUT TO DELAMINATE CALL THE SHUTTLE") - gold_core_spawnable = NO_SPAWN - speak_chance = 3 - - var/memory_saved = FALSE - var/rounds_survived = 0 - var/longest_survival = 0 - var/longest_deathstreak = 0 - - -/mob/living/simple_animal/parrot/poly/Initialize(mapload) - ears = new /obj/item/radio/headset/headset_eng(src) - if(SStts.tts_enabled) - voice = pick(SStts.available_speakers) - if(SStts.pitch_enabled) - if(findtext(voice, "Woman")) - pitch = 12 // up-pitch by one octave - else - pitch = 24 // up-pitch by 2 octaves - else - voice_filter = "rubberband=pitch=1.5" // Use the filter to pitch up if we can't naturally pitch up. - - available_channels = list(":e") - Read_Memory() - if(rounds_survived == longest_survival) - speak += pick("...[longest_survival].", "The things I've seen!", "I have lived many lives!", "What are you before me?") - desc += " Old as sin, and just as loud. Claimed to be [rounds_survived]." - speak_chance = 20 //His hubris has made him more annoying/easier to justify killing - add_atom_colour("#EEEE22", FIXED_COLOUR_PRIORITY) - else if(rounds_survived == longest_deathstreak) - speak += pick("What are you waiting for!", "Violence breeds violence!", "Blood! Blood!", "Strike me down if you dare!") - desc += " The squawks of [-rounds_survived] dead parrots ring out in your ears..." - add_atom_colour("#BB7777", FIXED_COLOUR_PRIORITY) - else if(rounds_survived > 0) - speak += pick("...again?", "No, It was over!", "Let me out!", "It never ends!") - desc += " Over [rounds_survived] shifts without a \"terrible\" \"accident\"!" - else - speak += pick("...alive?", "This isn't parrot heaven!", "I live, I die, I live again!", "The void fades!") - - . = ..() - - // Ensure 1 Poly exists - REGISTER_REQUIRED_MAP_ITEM(1, 1) - -/mob/living/simple_animal/parrot/poly/Life(seconds_per_tick = SSMOBS_DT, times_fired) - if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved) - Write_Memory(FALSE) - memory_saved = TRUE - ..() - -/mob/living/simple_animal/parrot/poly/death(gibbed) - if(HAS_TRAIT(src, TRAIT_DONT_WRITE_MEMORY)) - return ..() // Don't read memory either. - if(!memory_saved) - Write_Memory(TRUE) - if(rounds_survived == longest_survival || rounds_survived == longest_deathstreak || prob(0.666)) - var/mob/living/simple_animal/parrot/poly/ghost/G = new(loc) - if(mind) - mind.transfer_to(G) - else - G.key = key - return ..() - -/mob/living/simple_animal/parrot/poly/proc/Read_Memory() - if(fexists("data/npc_saves/Poly.sav")) //legacy compatability to convert old format to new - var/savefile/S = new /savefile("data/npc_saves/Poly.sav") - S["phrases"] >> speech_buffer - S["roundssurvived"] >> rounds_survived - S["longestsurvival"] >> longest_survival - S["longestdeathstreak"] >> longest_deathstreak - fdel("data/npc_saves/Poly.sav") - else - var/json_file = file("data/npc_saves/Poly.json") - if(!fexists(json_file)) - return - var/list/json = json_decode(file2text(json_file)) - speech_buffer = json["phrases"] - rounds_survived = json["roundssurvived"] - longest_survival = json["longestsurvival"] - longest_deathstreak = json["longestdeathstreak"] - if(!islist(speech_buffer)) - speech_buffer = list() - -/mob/living/simple_animal/parrot/poly/Write_Memory(dead, gibbed) - . = ..() - if(!.) - return - var/json_file = file("data/npc_saves/Poly.json") - var/list/file_data = list() - if(islist(speech_buffer)) - file_data["phrases"] = speech_buffer - if(dead) - file_data["roundssurvived"] = min(rounds_survived - 1, 0) - file_data["longestsurvival"] = longest_survival - if(rounds_survived - 1 < longest_deathstreak) - file_data["longestdeathstreak"] = rounds_survived - 1 - else - file_data["longestdeathstreak"] = longest_deathstreak - else - file_data["roundssurvived"] = max(rounds_survived, 0) + 1 - if(rounds_survived + 1 > longest_survival) - file_data["longestsurvival"] = rounds_survived + 1 - else - file_data["longestsurvival"] = longest_survival - file_data["longestdeathstreak"] = longest_deathstreak - fdel(json_file) - WRITE_FILE(json_file, json_encode(file_data)) - -/mob/living/simple_animal/parrot/poly/ghost - name = "The Ghost of Poly" - desc = "Doomed to squawk the Earth." - color = "#FFFFFF77" - speak_chance = 20 - status_flags = GODMODE - sentience_type = SENTIENCE_BOSS //This is so players can't mindswap into ghost poly to become a literal god - incorporeal_move = INCORPOREAL_MOVE_BASIC - butcher_results = list(/obj/item/ectoplasm = 1) - -/mob/living/simple_animal/parrot/poly/ghost/Initialize(mapload) - memory_saved = TRUE //At this point nothing is saved - . = ..() - -/mob/living/simple_animal/parrot/poly/ghost/handle_automated_speech() - if(ismob(loc)) - return - ..() - -/mob/living/simple_animal/parrot/poly/ghost/handle_automated_movement() - if(isliving(parrot_interest)) - if(!ishuman(parrot_interest)) - set_parrot_interest(null) - else if(parrot_state == (PARROT_SWOOP | PARROT_ATTACK) && Adjacent(parrot_interest)) - SSmove_manager.move_to(src, parrot_interest, 0, parrot_speed) - Possess(parrot_interest) - ..() - -/mob/living/simple_animal/parrot/poly/ghost/proc/Possess(mob/living/carbon/human/H) - if(!ishuman(H)) - return - var/datum/disease/parrot_possession/P = new - P.parrot = src - forceMove(H) - H.ForceContractDisease(P, FALSE) - set_parrot_interest(null) - H.visible_message(span_danger("[src] dive bombs into [H]'s chest and vanishes!"), span_userdanger("[src] dive bombs into your chest, vanishing! This can't be good!")) - -#undef PARROT_PERCH -#undef PARROT_SWOOP -#undef PARROT_WANDER -#undef PARROT_STEAL -#undef PARROT_ATTACK -#undef PARROT_RETURN -#undef PARROT_FLEE diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm deleted file mode 100644 index dbb795e91c5692..00000000000000 --- a/code/modules/mob/living/simple_animal/shade.dm +++ /dev/null @@ -1,71 +0,0 @@ -/mob/living/simple_animal/shade - name = "Shade" - real_name = "Shade" - desc = "A bound spirit." - gender = PLURAL - icon = 'icons/mob/nonhuman-player/cult.dmi' - icon_state = "shade_cult" - icon_living = "shade_cult" - mob_biotypes = MOB_SPIRIT - maxHealth = 40 - health = 40 - speak_emote = list("hisses") - emote_hear = list("wails.","screeches.") - response_help_continuous = "puts their hand through" - response_help_simple = "put your hand through" - response_disarm_continuous = "flails at" - response_disarm_simple = "flail at" - response_harm_continuous = "punches" - response_harm_simple = "punch" - speak_chance = 1 - melee_damage_lower = 5 - melee_damage_upper = 12 - attack_verb_continuous = "metaphysically strikes" - attack_verb_simple = "metaphysically strike" - minbodytemp = 0 - maxbodytemp = INFINITY - 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) - speed = -1 //they don't have to lug a body made of runed metal around - stop_automated_movement = 1 - faction = list(FACTION_CULT) - status_flags = CANPUSH - loot = list(/obj/item/ectoplasm) - del_on_death = TRUE - initial_language_holder = /datum/language_holder/construct - -/mob/living/simple_animal/shade/Initialize(mapload) - . = ..() - AddElement(/datum/element/simple_flying) - add_traits(list(TRAIT_HEALS_FROM_CULT_PYLONS, TRAIT_SPACEWALK, TRAIT_VENTCRAWLER_ALWAYS), INNATE_TRAIT) - -/mob/living/simple_animal/shade/death() - if(death_message == initial(death_message)) - death_message = "lets out a contented sigh as [p_their()] form unwinds." - ..() - -/mob/living/simple_animal/shade/can_suicide() - if(istype(loc, /obj/item/soulstone)) //do not suicide inside the soulstone - return FALSE - return ..() - -/mob/living/simple_animal/shade/attack_animal(mob/living/simple_animal/user, list/modifiers) - if(isconstruct(user)) - var/mob/living/simple_animal/hostile/construct/doll = user - if(!doll.can_repair) - return - if(health < maxHealth) - adjustHealth(-25) - Beam(user,icon_state="sendbeam", time = 4) - user.visible_message(span_danger("[user] heals \the [src]."), \ - span_cult("You heal [src], leaving [src] at [health]/[maxHealth] health.")) - else - to_chat(user, span_cult("You cannot heal [src], as [p_theyre()] unharmed!")) - else if(src != user) - return ..() - -/mob/living/simple_animal/shade/attackby(obj/item/item, mob/user, params) //Marker -Agouri - if(istype(item, /obj/item/soulstone)) - var/obj/item/soulstone/stone = item - stone.capture_shade(src, user) - else - . = ..() diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 4c382a59b2f64e..4817bf4f94c2e7 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -51,8 +51,6 @@ ///Harm-intent verb in present simple tense. var/response_harm_simple = "hit" var/harm_intent_damage = 3 - ///Minimum force required to deal any damage. - var/force_threshold = 0 ///Maximum amount of stamina damage the mob can be inflicted with total var/max_staminaloss = 200 ///How much stamina the mob recovers per second @@ -89,7 +87,7 @@ ///Damage type of a simple mob's melee attack, should it do damage. var/melee_damage_type = BRUTE /// 1 for full damage , 0 for none , -1 for 1:1 heal from that source. - var/list/damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) + var/list/damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1) ///Attacking verb in present continuous tense. var/attack_verb_continuous = "attacks" ///Attacking verb in present simple tense. @@ -133,9 +131,6 @@ ///Played when someone punches the creature. var/attacked_sound = SFX_PUNCH - ///If the creature has, and can use, hands. - var/dextrous = FALSE - ///The Status of our AI, can be set to AI_ON (On, usual processing), AI_IDLE (Will not process, but will return to AI_ON if an enemy comes near), AI_OFF (Off, Not processing ever), AI_Z_OFF (Temporarily off due to nonpresence of players). var/AIStatus = AI_ON ///once we have become sentient, we can never go back. @@ -176,10 +171,6 @@ if(!loc) stack_trace("Simple animal being instantiated in nullspace") update_simplemob_varspeed() - if(dextrous) - AddElement(/datum/element/dextrous, hud_type = hud_type) - AddComponent(/datum/component/personal_crafting) - add_traits(list(TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP), ROUNDSTART_TRAIT) ADD_TRAIT(src, TRAIT_NOFIRE_SPREAD, ROUNDSTART_TRAIT) if(length(weather_immunities)) add_traits(weather_immunities, ROUNDSTART_TRAIT) diff --git a/code/modules/mob/living/simple_animal/slime/ai.dm b/code/modules/mob/living/simple_animal/slime/ai.dm new file mode 100644 index 00000000000000..0272a4e467b89b --- /dev/null +++ b/code/modules/mob/living/simple_animal/slime/ai.dm @@ -0,0 +1,494 @@ +#define SLIME_CARES_ABOUT(to_check) (to_check && (to_check == Target || to_check == Leader || (to_check in Friends))) +#define SLIME_HUNGER_NONE 0 +#define SLIME_HUNGER_HUNGRY 1 +#define SLIME_HUNGER_STARVING 2 + +/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() + +///Handles slime mood +/mob/living/simple_animal/slime/proc/handle_mood(seconds_per_tick, times_fired) + #define SLIME_MOOD_NONE "" + #define SLIME_MOOD_ANGRY "angry" + #define SLIME_MOOD_MISCHIEVOUS "mischievous" + #define SLIME_MOOD_POUT "pout" + #define SLIME_MOOD_SAD "sad" + #define SLIME_MOOD_SMILE ":3" + + var/newmood = SLIME_MOOD_NONE + if (rabid || attacked_stacks) + newmood = SLIME_MOOD_ANGRY + else if (docile) + newmood = SLIME_MOOD_SMILE + else if (Target) + newmood = SLIME_MOOD_MISCHIEVOUS + + if (!newmood) + if (discipline_stacks && SPT_PROB(13, seconds_per_tick)) + newmood = SLIME_MOOD_POUT + else if (SPT_PROB(0.5, seconds_per_tick)) + newmood = pick(SLIME_MOOD_SAD, ":3", SLIME_MOOD_POUT) + + if ((current_mood == SLIME_MOOD_SAD || current_mood == SLIME_MOOD_SMILE || current_mood == SLIME_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() + + #undef SLIME_MOOD_NONE + #undef SLIME_MOOD_ANGRY + #undef SLIME_MOOD_MISCHIEVOUS + #undef SLIME_MOOD_POUT + #undef SLIME_MOOD_SAD + #undef SLIME_MOOD_SMILE + +///Handles the slime understanding commends spoken to it +/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(slime_id)) || 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) + stop_feeding() + 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) + process_slime_ai() //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/possible_target in view(7,src)-list(src,who)) + if (findtext(phrase, lowertext(possible_target.name))) + if (isslime(possible_target)) + to_say = "NO... [possible_target] slime friend" + add_friendship(who, -1) //Don't ask a slime to attack its friend + else if(!Friends[possible_target] || Friends[possible_target] < 1) + set_target(possible_target) + process_slime_ai()//Wake up the slime's Target AI, needed otherwise this doesn't work + to_say = "Ok... I attack [Target]" + else + to_say = "No... like [possible_target] ..." + 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/speech_chance = 10 + var/slimes_near = 0 + var/dead_slimes = 0 + var/friends_near = list() + for (var/mob/living/seen_mob in view(7,src)) + if(isslime(seen_mob) && seen_mob != src) + ++slimes_near + if (seen_mob.stat == DEAD) + ++dead_slimes + if (seen_mob in Friends) + speech_chance += 20 + friends_near += seen_mob + if (nutrition < hunger_nutrition) + speech_chance += 10 + if (nutrition < starve_nutrition) + speech_chance += 10 + if (SPT_PROB(1, seconds_per_tick) && prob(speech_chance)) + var/phrases = list() + if (Target) + phrases += "[Target]... look yummy..." + if (nutrition < starve_nutrition) + phrases += "So... hungry..." + phrases += "Very... hungry..." + phrases += "Need... food..." + phrases += "Must... eat..." + else if (nutrition < hunger_nutrition) + phrases += "Hungry..." + phrases += "Where food?" + phrases += "I want to eat..." + phrases += "Rawr..." + phrases += "Blop..." + phrases += "Blorble..." + if (rabid || attacked_stacks) + phrases += "Hrr..." + phrases += "Nhuu..." + phrases += "Unn..." + if (current_mood == ":3") + phrases += "Purr..." + if (attacked_stacks) + 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/friend in friends_near) + phrases += "[friend]... friend..." + if (nutrition < hunger_nutrition) + phrases += "[friend]... feed me..." + if(!stat) + say (pick(phrases)) + +///Sets the slime's current attack target +/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) + +///Sets the person the slime is following around +/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) + +///Alters the friendship value of the target +/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) + +///Sets the friendship value of the target +/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) + +///Removes someone from the friendlist +/mob/living/simple_animal/slime/proc/remove_friend(friend) + Friends -= friend + if(friend && !SLIME_CARES_ABOUT(friend)) + UnregisterSignal(friend, COMSIG_QDELETING) + +///Adds someone to the friend list +/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]) + +///Removes everyone from the friend list +/mob/living/simple_animal/slime/proc/clear_friends() + for(var/mob/friend as anything in Friends) + remove_friend(friend) + +///The passed source will be no longer be the slime's target, leader, or one of its friends +/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) + +///Handles selecting targets +/mob/living/simple_animal/slime/proc/handle_targets(seconds_per_tick, times_fired) + if(attacked_stacks > 50) + attacked_stacks = 50 + + if(attacked_stacks > 0) + attacked_stacks-- + + if(discipline_stacks > 0) + + if(discipline_stacks >= 5 && rabid) + if(SPT_PROB(37, seconds_per_tick)) + rabid = FALSE + + if(SPT_PROB(5, seconds_per_tick)) + discipline_stacks-- + + if(client) //player controlled slimes can decide for themselves + return + + 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 || stunned_until > world.time || discipline_stacks || attacked_stacks || docile) // Tired of chasing or something draws out attention + target_patience = 0 + set_target(null) + + if(slime_ai_processing && stunned_until > world.time) + return + + var/hungry = SLIME_HUNGER_NONE // determines if the slime is hungry + + if (nutrition < starve_nutrition) + hungry = SLIME_HUNGER_STARVING + else if (nutrition < grow_nutrition && SPT_PROB(13, seconds_per_tick) || nutrition < hunger_nutrition) + hungry = SLIME_HUNGER_HUNGRY + + if(hungry == SLIME_HUNGER_STARVING && !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 we have no target, try to add a target + if(will_hunt() && hungry || attacked_stacks || 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_stacks)) // 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_stacks || rabid || hungry == SLIME_HUNGER_STARVING) + 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_stacks && 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 (life_stage == SLIME_LIFE_STAGE_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(!slime_ai_processing) + INVOKE_ASYNC(src, PROC_REF(process_slime_ai)) + +/// Check for being stopped from feeding and chasing +/mob/living/simple_animal/slime/proc/will_hunt(hunger = -1) + if (docile) + return FALSE + if (hunger == SLIME_HUNGER_STARVING || rabid || attacked_stacks) + return TRUE + if (Leader) + return FALSE + if (holding_still) + return FALSE + return TRUE + +/// the master AI process +/mob/living/simple_animal/slime/proc/process_slime_ai() + + if(slime_ai_processing || stat || client) + return + + var/hungry = SLIME_HUNGER_NONE + if (nutrition < starve_nutrition) + hungry = SLIME_HUNGER_STARVING + else if (nutrition < grow_nutrition && prob(25) || nutrition < hunger_nutrition) + hungry = SLIME_HUNGER_HUNGRY + + slime_ai_processing = TRUE + + while(slime_ai_processing && stat != DEAD && (attacked_stacks || 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) + slime_ai_processing = FALSE + break + + if(Target) + if(locate(/mob/living/simple_animal/slime) in Target.buckled_mobs) + set_target(null) + slime_ai_processing = FALSE + break + if(!slime_ai_processing) + break + + if(Target in view(1,src)) + if(!can_feed_on(Target)) //If they're not able to be fed upon, ignore them. + if(!is_attack_on_cooldown) + is_attack_on_cooldown = TRUE + addtimer(VARSET_CALLBACK(src, is_attack_on_cooldown, FALSE), 4.5 SECONDS) + + if(Target.Adjacent(src)) + Target.attack_animal(src) + break + if((Target.body_position == STANDING_UP) && prob(80)) + + if(Target.client && Target.health >= 20) + if(!is_attack_on_cooldown) + is_attack_on_cooldown = TRUE + addtimer(VARSET_CALLBACK(src, is_attack_on_cooldown, FALSE), 4.5 SECONDS) + + if(Target.Adjacent(src)) + Target.attack_animal(src) + + else + if(!is_attack_on_cooldown && Target.Adjacent(src)) + start_feeding(Target) + + else + if(!is_attack_on_cooldown && Target.Adjacent(src)) + start_feeding(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) + slime_ai_processing = FALSE + 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 + + slime_ai_processing = FALSE + +#undef SLIME_CARES_ABOUT + +#undef SLIME_HUNGER_NONE +#undef SLIME_HUNGER_HUNGRY +#undef SLIME_HUNGER_STARVING diff --git a/code/modules/mob/living/simple_animal/slime/death.dm b/code/modules/mob/living/simple_animal/slime/death.dm index 03cb70cbc47a3c..a072299d663cce 100644 --- a/code/modules/mob/living/simple_animal/slime/death.dm +++ b/code/modules/mob/living/simple_animal/slime/death.dm @@ -1,25 +1,20 @@ /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() + if(!gibbed && life_stage == SLIME_LIFE_STAGE_ADULT) + var/mob/living/simple_animal/slime/new_slime = new(drop_location(), slime_type.type) + new_slime.rabid = TRUE + new_slime.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 + //revives us as a baby + set_life_stage(SLIME_LIFE_STAGE_BABY) + revive(HEAL_ALL) + regenerate_icons() + update_name() + return if(buckled) - Feedstop(silent = TRUE) //releases ourselves from the mob we fed on. + stop_feeding(silent = TRUE) //releases ourselves from the mob we fed on. cut_overlays() diff --git a/code/modules/mob/living/simple_animal/slime/defense.dm b/code/modules/mob/living/simple_animal/slime/defense.dm new file mode 100644 index 00000000000000..dd94e4e2bab6bd --- /dev/null +++ b/code/modules/mob/living/simple_animal/slime/defense.dm @@ -0,0 +1,131 @@ + +/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/attack_animal(mob/living/simple_animal/user, list/modifiers) + . = ..() + if(.) + attacked_stacks += 10 + +/mob/living/simple_animal/slime/attack_paw(mob/living/carbon/human/user, list/modifiers) + if(..()) //successful monkey bite. + attacked_stacks += 10 + +/mob/living/simple_animal/slime/attack_larva(mob/living/carbon/alien/larva/L, list/modifiers) + if(..()) //successful larva bite. + attacked_stacks += 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.combat_mode || LAZYACCESS(modifiers, RIGHT_CLICK)) + for(var/datum/surgery/operations as anything in surgeries) + if(operations.next_step(user, modifiers)) + return TRUE + if(..()) //successful attack + attacked_stacks += 10 + +/mob/living/simple_animal/slime/attack_alien(mob/living/carbon/alien/adult/user, list/modifiers) + if(..()) //if harm or disarm intent. + attacked_stacks += 10 + discipline_slime(user) + +/mob/living/simple_animal/slime/attackby(obj/item/attacking_item, mob/living/user, params) + if(stat == DEAD && surgeries.len) + var/list/modifiers = params2list(params) + if(!user.combat_mode || (LAZYACCESS(modifiers, RIGHT_CLICK))) + for(var/datum/surgery/operations as anything in surgeries) + if(operations.next_step(user, modifiers)) + return TRUE + if(istype(attacking_item, /obj/item/stack/sheet/mineral/plasma) && !stat) //Lets 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/sheet = attacking_item + sheet.use(1) + return + if(attacking_item.force > 0) + attacked_stacks += 10 + if(prob(25)) + user.do_attack_animation(src) + user.changeNext_move(CLICK_CD_MELEE) + to_chat(user, span_danger("[attacking_item] passes right through [src]!")) + return + if(discipline_stacks && prob(50)) // wow, buddy, why am I getting attacked?? + discipline_stacks = 0 + if(attacking_item.force >= 3) + var/force_effect = attacking_item.force * (life_stage == SLIME_LIFE_STAGE_BABY ? 2 : 1) + if(prob(10 + force_effect)) + discipline_slime(user) + + if(!istype(attacking_item, /obj/item/storage/bag/xeno)) + return ..() + + var/obj/item/storage/xeno_bag = attacking_item + if(!crossbreed_modification) + to_chat(user, span_warning("The slime is not currently being mutated.")) + return + var/has_output = FALSE //Have we outputted text? + var/has_found = FALSE //Have we found an extract to be added? + for(var/obj/item/slime_extract/extract in xeno_bag.contents) + if(extract.crossbreed_modification == crossbreed_modification) + xeno_bag.atom_storage.attempt_remove(extract, get_turf(src), silent = TRUE) + qdel(extract) + applied_crossbreed_amount++ + has_found = TRUE + if(applied_crossbreed_amount >= 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() + has_output = TRUE + break + + if(has_output) + return + + if(!has_found) + 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 diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm index 3c34a68d6a26e3..be158abaed5997 100644 --- a/code/modules/mob/living/simple_animal/slime/life.dm +++ b/code/modules/mob/living/simple_animal/slime/life.dm @@ -1,3 +1,5 @@ + + /mob/living/simple_animal/slime/Life(seconds_per_tick = SSMOBS_DT, times_fired) if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return @@ -15,7 +17,6 @@ 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 @@ -31,84 +32,6 @@ 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 @@ -159,15 +82,16 @@ updatehealth() +///Handles the slime draining the target it is attached to /mob/living/simple_animal/slime/proc/handle_feeding(seconds_per_tick, times_fired) var/mob/living/prey = buckled if(stat) - Feedstop(silent = TRUE) + stop_feeding(silent = TRUE) if(prey.stat == DEAD) // our victim died if(!client) - if(!rabid && !attacked) + if(!rabid && !attacked_stacks) var/mob/last_to_hurt = prey.LAssailant?.resolve() if(last_to_hurt && last_to_hurt != prey) if(SPT_PROB(30, seconds_per_tick)) @@ -177,9 +101,9 @@ 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. + rabid = TRUE //we go rabid after finishing to feed on a human with a client. - Feedstop() + stop_feeding() return if(iscarbon(prey)) @@ -205,12 +129,12 @@ if(need_mob_update) animal_victim.updatehealth() - if(totaldamage <= 0) //if we did no(or negative!) damage to it, stop - Feedstop(0, 0) + if(totaldamage >= 0) // AdjustBruteLoss returns a negative value on succesful damage adjustment + stop_feeding(FALSE, FALSE) return else - Feedstop(0, 0) + stop_feeding(FALSE, FALSE) return add_nutrition((rand(7, 15) * 0.5 * seconds_per_tick * CONFIG_GET(number/damage_multiplier))) @@ -218,6 +142,7 @@ //Heal yourself. adjustBruteLoss(-1.5 * seconds_per_tick) +///Handles the slime's nutirion level /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 @@ -225,386 +150,32 @@ return if(SPT_PROB(7.5, seconds_per_tick)) - adjust_nutrition(-0.5 * (1 + is_adult) * seconds_per_tick) + adjust_nutrition((life_stage == SLIME_LIFE_STAGE_ADULT ? -1 : -0.5) * 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) + else if (nutrition >= 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()) + if(life_stage == SLIME_LIFE_STAGE_ADULT && loc.AllowDrop()) Reproduce() else Evolve() +///Adds nutrition to the slime's nutrition level. Has a chance to increase its electric levels. /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) + set_nutrition(min((nutrition + nutrition_to_add), max_nutrition)) + if(nutrition >= grow_nutrition) + if(powerlevel= get_hunger_nutrition() + 100) //can't get power levels unless you're a bit above hunger level. - if(powerlevel<5) + else if(nutrition >= hunger_nutrition + 100) //can't get power levels unless you're a bit above hunger level. + if(powerlevel 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 index 9e858d4f02d261..f129482eb24366 100644 --- a/code/modules/mob/living/simple_animal/slime/powers.dm +++ b/code/modules/mob/living/simple_animal/slime/powers.dm @@ -16,9 +16,9 @@ . = ..() if(!.) return - var/mob/living/simple_animal/slime/S = owner + var/mob/living/simple_animal/slime/slime_owner = owner if(needs_growth == GROWTH_NEEDED) - if(S.amount_grown >= SLIME_EVOLUTION_THRESHOLD) + if(slime_owner.amount_grown >= SLIME_EVOLUTION_THRESHOLD) return TRUE return FALSE return TRUE @@ -39,8 +39,8 @@ if(isnull(choice)) return FALSE var/mob/living/victim = choice - if(CanFeedon(victim)) - Feedon(victim) + if(can_feed_on(victim)) + start_feeding(victim) return TRUE return FALSE @@ -50,15 +50,16 @@ /datum/action/innate/slime/feed/Activate() - var/mob/living/simple_animal/slime/S = owner - S.Feed() + var/mob/living/simple_animal/slime/slime_owner = owner + slime_owner.Feed() -/mob/living/simple_animal/slime/proc/CanFeedon(mob/living/meal, silent = FALSE) +///Can the slime leech life energy from the target? +/mob/living/simple_animal/slime/proc/can_feed_on(mob/living/meal, silent = FALSE) if(!Adjacent(meal)) return FALSE if(buckled) - Feedstop() + stop_feeding() return FALSE if(issilicon(meal) || meal.mob_biotypes & MOB_ROBOTIC) @@ -120,35 +121,39 @@ 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]!")) +///The slime will start feeding on the target +/mob/living/simple_animal/slime/proc/start_feeding(mob/living/target_mob) + target_mob.unbuckle_all_mobs(force=TRUE) //Slimes rip other mobs (eg: shoulder parrots) off (Slimes Vs Slimes is already handled in can_feed_on()) + if(target_mob.buckle_mob(src, force=TRUE)) + layer = target_mob.layer+0.01 //appear above the target mob + target_mob.visible_message(span_danger("[name] latches onto [target_mob]!"), \ + span_userdanger("[name] latches onto [target_mob]!")) 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")]!") +///The slime will stop feeding +/mob/living/simple_animal/slime/proc/stop_feeding(silent = FALSE, living=TRUE) + if(!buckled) + return + + 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")]!") - var/mob/living/victim = buckled + var/mob/living/victim = buckled - if(istype(victim)) - var/bio_protection = 100 - victim.getarmor(null, BIO) - if(prob(bio_protection)) - victim.apply_status_effect(/datum/status_effect/slimed, slime_colours_to_rgb[colour], colour == SLIME_TYPE_RAINBOW) + if(istype(victim)) + var/bio_protection = 100 - victim.getarmor(null, BIO) + if(prob(bio_protection)) + victim.apply_status_effect(/datum/status_effect/slimed, slime_type.rgb_code, slime_type.colour == SLIME_TYPE_RAINBOW) - 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) + 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" @@ -157,21 +162,18 @@ 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 + if(life_stage == SLIME_LIFE_STAGE_ADULT) to_chat(src, "I have already evolved...") + return + if(amount_grown < SLIME_EVOLUTION_THRESHOLD) + to_chat(src, "I am not ready to evolve yet...") + return + + set_life_stage(SLIME_LIFE_STAGE_ADULT) + amount_grown = 0 + + regenerate_icons() + update_name() /datum/action/innate/slime/evolve name = "Evolve" @@ -179,59 +181,67 @@ needs_growth = GROWTH_NEEDED /datum/action/innate/slime/evolve/Activate() - var/mob/living/simple_animal/slime/S = owner - S.Evolve() + var/mob/living/simple_animal/slime/slime_owner = owner + slime_owner.Evolve() /mob/living/simple_animal/slime/verb/Reproduce() set category = "Slime" - set desc = "This will make you split into four Slimes." + set desc = "This will make you split into four slimes." - if(stat) - to_chat(src, "I must be conscious to do this...") + if(stat != CONSCIOUS) + balloon_alert(src, "need to be conscious to split!") + return + + if(!isopenturf(loc)) + balloon_alert(src, "can't reproduce here!") + + if(life_stage != SLIME_LIFE_STAGE_ADULT) + balloon_alert(src, "not old enough to reproduce!") + return + + if(amount_grown < SLIME_EVOLUTION_THRESHOLD) + to_chat(src, "I need to grow myself more before I can reproduce...") 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/turf/drop_loc = drop_location() - - for(var/i in 1 to 4) - var/child_colour - if(mutation_chance >= 100) - child_colour = SLIME_TYPE_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) - - 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) + var/list/babies = list() + var/new_nutrition = round(nutrition * 0.9) + var/new_powerlevel = round(powerlevel / 4) + var/turf/drop_loc = drop_location() + + for(var/i in 1 to 4) + var/child_colour + + if(mutation_chance >= 100) + child_colour = /datum/slime_type/rainbow + else if(prob(mutation_chance)) + child_colour = pick_weight(slime_type.mutations) else - to_chat(src, "I am not ready to reproduce yet...") + child_colour = slime_type.type + + var/mob/living/simple_animal/slime/baby + baby = new(drop_loc, child_colour) + + if(ckey) + baby.set_nutrition(new_nutrition) //Player slimes are more robust at spliting. Once an oversight of poor copypasta, now a feature! + + baby.powerlevel = new_powerlevel + if(i != 1) + step_away(baby, src) + + baby.set_friends(Friends) + babies += baby + baby.mutation_chance = clamp(mutation_chance+(rand(5,-5)),0,100) + SSblackbox.record_feedback("tally", "slime_babies_born", 1, baby.slime_type.colour) + + var/mob/living/simple_animal/slime/new_slime = pick(babies) // slime that the OG slime will move into. + new_slime.set_combat_mode(TRUE) + + if(isnull(src.mind)) + new_slime.key = src.key else - to_chat(src, "I am not old enough to reproduce yet...") + src.mind.transfer_to(new_slime) + + qdel(src) /datum/action/innate/slime/reproduce name = "Reproduce" @@ -239,8 +249,8 @@ needs_growth = GROWTH_NEEDED /datum/action/innate/slime/reproduce/Activate() - var/mob/living/simple_animal/slime/S = owner - S.Reproduce() + var/mob/living/simple_animal/slime/slime_owner = owner + slime_owner.Reproduce() #undef SIZE_DOESNT_MATTER #undef BABIES_ONLY diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index cdae01abd8c5ce..a95b5f85b95b03 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -1,4 +1,8 @@ -#define SLIME_CARES_ABOUT(to_check) (to_check && (to_check == Target || to_check == Leader || (to_check in Friends))) +#define SLIME_EXTRA_SHOCK_COST 3 +#define SLIME_EXTRA_SHOCK_THRESHOLD 8 +#define SLIME_BASE_SHOCK_PERCENTAGE 10 +#define SLIME_SHOCK_PERCENTAGE_PER_LEVEL 7 + /mob/living/simple_animal/slime name = "grey baby slime (123)" icon = 'icons/mob/simple/slimes.dmi' @@ -10,6 +14,8 @@ harm_intent_damage = 5 icon_living = "grey baby slime" icon_dead = "grey baby slime dead" + attack_verb_simple = "glomp" + attack_verb_continuous = "glomps" response_help_continuous = "pets" response_help_simple = "pet" response_disarm_continuous = "shoos" @@ -28,6 +34,7 @@ mob_biotypes = MOB_SLIME melee_damage_lower = 5 melee_damage_upper = 25 + wound_bonus = -45 verb_say = "blorbles" verb_ask = "inquisitively blorbles" @@ -40,126 +47,96 @@ 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 + //Physiology + + ///What is our current lifestage? + var/life_stage = SLIME_LIFE_STAGE_BABY + + ///The number of /obj/item/slime_extract's the slime has left inside + var/cores = 1 + ///Chance of mutating, should be between 25 and 35 + var/mutation_chance = 30 + ///1-10 controls how much electricity they are generating + var/powerlevel = SLIME_MIN_POWER + ///Controls how long the slime has been overfed, if 10, grows or reproduces + var/amount_grown = 0 + ///The maximum amount of nutrition a slime can contain + var/max_nutrition = 1000 + /// Above it we grow our amount_grown and our power_level, below it we can eat + var/grow_nutrition = 800 + /// Below this, we feel hungry + var/hunger_nutrition = 500 + /// Below this, we feel starving + var/starve_nutrition = 200 + + ///Has a mutator been used on the slime? Only one is allowed + var/mutator_used = FALSE + ///Is the slime forced into being immobile, despite the gases present? + var/force_stasis = FALSE - var/list/Friends = list() // A list of friends; they are not considered targets for feeding; passed down after splitting + //The datum that handles the slime colour's core and possible mutations + var/datum/slime_type/slime_type - var/list/speech_buffer = list() // Last phrase said near it and person who said it + //CORE-CROSSING CODE - var/mutator_used = FALSE //So you can't shove a dozen mutators into a single slime - var/force_stasis = FALSE + ///What cross core modification is being used. + var/crossbreed_modification + ///How many extracts of the modtype have been applied. + var/applied_crossbreed_amount = 0 - var/static/regex/slime_name_regex = new("\\w+ (baby|adult) slime \\(\\d+\\)") - ///////////TIME FOR SUBSPECIES - - var/colour = SLIME_TYPE_GREY - var/coretype = /obj/item/slime_extract/grey - var/list/slime_mutation[4] - - var/static/list/slime_colours = list( - SLIME_TYPE_ADAMANTINE, - SLIME_TYPE_BLACK, - SLIME_TYPE_BLUE, - SLIME_TYPE_BLUESPACE, - SLIME_TYPE_CERULEAN, - SLIME_TYPE_DARK_BLUE, - SLIME_TYPE_DARK_PURPLE, - SLIME_TYPE_GOLD, - SLIME_TYPE_GREEN, - SLIME_TYPE_GREY, - SLIME_TYPE_LIGHT_PINK, - SLIME_TYPE_METAL, - SLIME_TYPE_OIL, - SLIME_TYPE_ORANGE, - SLIME_TYPE_PINK, - SLIME_TYPE_PURPLE, - SLIME_TYPE_PYRITE, - SLIME_TYPE_RAINBOW, - SLIME_TYPE_RED, - SLIME_TYPE_SEPIA, - SLIME_TYPE_SILVER, - SLIME_TYPE_YELLOW, - ) - - var/static/list/slime_colours_to_rgb = list( - SLIME_TYPE_ADAMANTINE = COLOR_SLIME_ADAMANTINE, - SLIME_TYPE_BLACK = COLOR_SLIME_BLACK, - SLIME_TYPE_BLUE = COLOR_SLIME_BLUE, - SLIME_TYPE_BLUESPACE = COLOR_SLIME_BLUESPACE, - SLIME_TYPE_CERULEAN = COLOR_SLIME_CERULEAN, - SLIME_TYPE_DARK_BLUE = COLOR_SLIME_DARK_BLUE, - SLIME_TYPE_DARK_PURPLE = COLOR_SLIME_DARK_PURPLE, - SLIME_TYPE_GOLD = COLOR_SLIME_GOLD, - SLIME_TYPE_GREEN = COLOR_SLIME_GREEN, - SLIME_TYPE_GREY = COLOR_SLIME_GREY, - SLIME_TYPE_LIGHT_PINK = COLOR_SLIME_LIGHT_PINK, - SLIME_TYPE_METAL = COLOR_SLIME_METAL, - SLIME_TYPE_OIL = COLOR_SLIME_OIL, - SLIME_TYPE_ORANGE = COLOR_SLIME_ORANGE, - SLIME_TYPE_PINK = COLOR_SLIME_PINK, - SLIME_TYPE_PURPLE = COLOR_SLIME_PURPLE, - SLIME_TYPE_PYRITE = COLOR_SLIME_PYRITE, - SLIME_TYPE_RAINBOW = COLOR_SLIME_RAINBOW, - SLIME_TYPE_RED = COLOR_SLIME_RED, - SLIME_TYPE_SEPIA = COLOR_SLIME_SEPIA, - SLIME_TYPE_SILVER = COLOR_SLIME_SILVER, - SLIME_TYPE_YELLOW = COLOR_SLIME_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) + //AI related traits - is_adult = new_is_adult + ///The current mood of the slime, set randomly or through emotes (if sentient). + var/current_mood - 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) + ///Determines if the AI loop is activated + var/slime_ai_processing = FALSE + ///Attack cooldown + var/is_attack_on_cooldown = FALSE + ///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/discipline_stacks = 0 + ///Stored the world time when the slime's stun wears off + var/stunned_until = 0 + + ///Is the slime docile? + var/docile = FALSE + + ///Used to understand when someone is talking to it + var/slime_id = 0 + ///AI variable - tells the slime to hunt this down + var/mob/living/Target = null + ///AI variable - tells the slime to follow this person + var/mob/living/Leader = null + + ///Determines if it's been attacked recently. Can be any number, is a cooloff-ish variable + var/attacked_stacks = 0 + ///If set to 1, the slime will attack and eat anything it comes in contact with + var/rabid = FALSE + ///AI variable, cooloff-ish for how long it's going to stay in one place + var/holding_still = 0 + ///AI variable, cooloff-ish for how long it's going to follow its target + var/target_patience = 0 + ///A list of friends; they are not considered targets for feeding; passed down after splitting + var/list/Friends = list() + ///Last phrase said near it and person who said it + var/list/speech_buffer = list() + +/mob/living/simple_animal/slime/Initialize(mapload, new_type=/datum/slime_type/grey, new_life_stage=SLIME_LIFE_STAGE_BABY) + var/datum/action/innate/slime/feed/feeding_action = new + feeding_action.Grant(src) + + set_life_stage(new_life_stage) + + set_slime_type(new_type) . = ..() set_nutrition(700) - add_cell_sample() - ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) AddElement(/datum/element/soft_landing) + AddElement(/datum/element/swabable, CELL_LINE_TABLE_SLIME, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) + ADD_TRAIT(src, TRAIT_CANT_RIDE, INNATE_TRAIT) + ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) + + RegisterSignal(src, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(slime_pre_attack)) /mob/living/simple_animal/slime/Destroy() for (var/A in actions) @@ -170,38 +147,26 @@ 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 +///Random slime subtype +/mob/living/simple_animal/slime/random/Initialize(mapload, new_colour, new_life_stage) + . = ..(mapload, pick(subtypesof(/datum/slime_type)), prob(50) ? SLIME_LIFE_STAGE_ADULT : SLIME_LIFE_STAGE_BABY) -/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() +///Friendly docile subtype +/mob/living/simple_animal/slime/pet + docile = TRUE /mob/living/simple_animal/slime/update_name() + ///Checks if the slime has a generic name, in the format of baby/adult slime (123) + var/static/regex/slime_name_regex = new("\\w+ (baby|adult) slime \\(\\d+\\)") if(slime_name_regex.Find(name)) - number = rand(1, 1000) - name = "[colour] [is_adult ? "adult" : "baby"] slime ([number])" + slime_id = rand(1, 1000) + name = "[slime_type.colour] [life_stage] slime ([slime_id])" 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" + var/icon_text = "[slime_type.colour] [life_stage] slime" icon_dead = "[icon_text] dead" if(stat != DEAD) icon_state = icon_text @@ -211,23 +176,6 @@ 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 @@ -249,39 +197,46 @@ 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/ObjBump(obj/bumped_object) + if(client || powerlevel <= SLIME_MIN_POWER) // slimes with people in control can't accidentally attack + return + + if (life_stage != SLIME_LIFE_STAGE_ADULT && !prob(5)) //its rare for baby slimes to actually damage windows + return + + var/accidental_attack_probability = 10 + switch(powerlevel) + if(1 to 2) + accidental_attack_probability = 20 + if(3 to 4) + accidental_attack_probability = 30 + if(5 to 6) + accidental_attack_probability = 40 + if(7 to 8) + accidental_attack_probability = 60 + if(9) + accidental_attack_probability = 70 + if(10) + accidental_attack_probability = 95 + if(!prob(accidental_attack_probability)) + return + + if(!istype(bumped_object, /obj/structure/window) && !istype(bumped_object, /obj/structure/grille)) + return + + if(nutrition > hunger_nutrition || is_attack_on_cooldown) //hungry slimes and slimes on cooldown will not attack + return + + bumped_object.attack_animal(src) + is_attack_on_cooldown = TRUE + addtimer(VARSET_CALLBACK(src, is_attack_on_cooldown, FALSE), 4.5 SECONDS) /mob/living/simple_animal/slime/get_status_tab_items() . = ..() if(!docile) - . += "Nutrition: [nutrition]/[get_max_nutrition()]" + . += "Nutrition: [nutrition]/[max_nutrition]" if(amount_grown >= SLIME_EVOLUTION_THRESHOLD) - if(is_adult) + if(life_stage == SLIME_LIFE_STAGE_ADULT) . += "You can reproduce!" else . += "You can evolve!" @@ -293,195 +248,28 @@ . += "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) +/mob/living/simple_animal/slime/MouseDrop(atom/movable/target_atom as mob|obj) + if(isliving(target_atom) && target_atom != src && usr == src) + var/mob/living/Food = target_atom + if(can_feed_on(Food)) + start_feeding(Food) return ..() -/mob/living/simple_animal/slime/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE) +/mob/living/simple_animal/slime/doUnEquip(obj/item/unequipped_item, 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) +/mob/living/simple_animal/slime/start_pulling(atom/movable/moveable_atom, 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.combat_mode || LAZYACCESS(modifiers, RIGHT_CLICK)) - 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.combat_mode || (LAZYACCESS(modifiers, RIGHT_CLICK))) - 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/get_mob_buckling_height(mob/seat) + if(..()) + return 3 /mob/living/simple_animal/slime/examine(mob/user) - . = list("This is [icon2html(src, user)] \a [src]!", EXAMINE_SECTION_BREAK) //SKYRAT EDIT CHANGE + . = list("This is [icon2html(src, user)] \a [src]!", EXAMINE_SECTION_BREAK) //NOVA EDIT CHANGE if (stat == DEAD) . += span_deadsay("It is limp and unresponsive.") else @@ -510,22 +298,86 @@ . += "" +/mob/living/simple_animal/slime/proc/apply_water() + adjustBruteLoss(rand(15,20)) + if(client) + return + + if(Target) // Like cats + set_target(null) + ++discipline_stacks + return + +///Changes the slime's current life state +/mob/living/simple_animal/slime/proc/set_life_stage(new_life_stage = SLIME_LIFE_STAGE_BABY) + life_stage = new_life_stage + + switch(life_stage) + if(SLIME_LIFE_STAGE_BABY) + for(var/datum/action/innate/slime/reproduce/reproduce_action in actions) + reproduce_action.Remove(src) + + GRANT_ACTION(/datum/action/innate/slime/evolve) + + health = initial(health) + maxHealth = initial(maxHealth) + + obj_damage = initial(obj_damage) + melee_damage_lower = initial(melee_damage_lower) + melee_damage_upper = initial(melee_damage_upper) + wound_bonus = initial(wound_bonus) + + max_nutrition = initial(max_nutrition) + grow_nutrition = initial(grow_nutrition) + hunger_nutrition = initial(hunger_nutrition) + starve_nutrition = initial(starve_nutrition) + + if(SLIME_LIFE_STAGE_ADULT) + + for(var/datum/action/innate/slime/evolve/evolve_action in actions) + evolve_action.Remove(src) + + GRANT_ACTION(/datum/action/innate/slime/reproduce) + + health = 200 + maxHealth = 200 + + obj_damage = 15 + melee_damage_lower += 10 + melee_damage_upper += 10 + wound_bonus = -90 + + max_nutrition += 200 + grow_nutrition += 200 + hunger_nutrition += 100 + starve_nutrition += 100 + +///Sets the slime's type, name and its icons +/mob/living/simple_animal/slime/proc/set_slime_type(new_type) + slime_type = new new_type + update_name() + regenerate_icons() + +///randomizes the colour of a slime +/mob/living/simple_animal/slime/proc/random_colour() + set_slime_type(pick(subtypesof(/datum/slime_type))) + +///Makes a slime not attack people for a while /mob/living/simple_animal/slime/proc/discipline_slime(mob/user) if(stat) return if(prob(80) && !client) - Discipline++ + discipline_stacks++ - if(!is_adult) - if(Discipline == 1) - attacked = 0 + if(life_stage == SLIME_LIFE_STAGE_BABY && discipline_stacks == 1) //if the slime is a baby and has not been overly disciplined, it will give up its grudge + attacked_stacks = 0 set_target(null) if(buckled) - Feedstop(silent = TRUE) //we unbuckle the slime from the mob it latched onto. + stop_feeding(silent = TRUE) //we unbuckle the slime from the mob it latched onto. - SStun = world.time + rand(20,60) + stunned_until = world.time + rand(2 SECONDS, 6 SECONDS) Stun(3) if(user) @@ -533,73 +385,88 @@ addtimer(CALLBACK(src, PROC_REF(slime_move), user), 0.3 SECONDS) - +///Makes a slime move away, used for a timed callback /mob/living/simple_animal/slime/proc/slime_move(mob/user) if(user) step_away(src,user,15) +///Spawns a crossed slimecore item +/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/selected_crossbreed_path + for(var/crossbreed_path in crossbreeds) + var/obj/item/slimecross/cross_item = crossbreed_path + if(initial(cross_item.colour) == slime_type.colour && initial(cross_item.effect) == crossbreed_modification) + selected_crossbreed_path = cross_item + break + if(selected_crossbreed_path) + new selected_crossbreed_path(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/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) +///Handles slime attacking restrictions, and any extra effects that would trigger +/mob/living/simple_animal/slime/proc/slime_pre_attack(mob/living/simple_animal/slime/our_slime, atom/target, proximity, modifiers) SIGNAL_HANDLER - if(source == Target) - set_target(null) - if(source == Leader) - set_leader(null) - remove_friend(source) - -#undef SLIME_CARES_ABOUT + if(isAI(target)) //The aI is not tasty! + target.balloon_alert(our_slime, "not tasty!") + return COMPONENT_CANCEL_ATTACK_CHAIN + + if(our_slime.buckled == target) //If you try to attack the creature you are latched on, you instead cancel feeding + our_slime.stop_feeding() + return COMPONENT_CANCEL_ATTACK_CHAIN + + if(iscyborg(target)) + var/mob/living/silicon/robot/borg_target = target + borg_target.flash_act() + do_sparks(5, TRUE, borg_target) + var/stunprob = our_slime.powerlevel * SLIME_SHOCK_PERCENTAGE_PER_LEVEL + SLIME_BASE_SHOCK_PERCENTAGE + if(prob(stunprob) && our_slime.powerlevel >= SLIME_EXTRA_SHOCK_COST) + our_slime.powerlevel = clamp(our_slime.powerlevel - SLIME_EXTRA_SHOCK_COST, SLIME_MIN_POWER, SLIME_MAX_POWER) + borg_target.apply_damage(our_slime.powerlevel * rand(6, 10), BRUTE, spread_damage = TRUE, wound_bonus = CANT_WOUND) + borg_target.visible_message(span_danger("The [our_slime.name] shocks [borg_target]!"), span_userdanger("The [our_slime.name] shocks you!")) + else + borg_target.visible_message(span_danger("The [our_slime.name] fails to hurt [borg_target]!"), span_userdanger("The [our_slime.name] failed to hurt you!")) + + return COMPONENT_CANCEL_ATTACK_CHAIN + + if(iscarbon(target) && our_slime.powerlevel > SLIME_MIN_POWER) + var/mob/living/carbon/carbon_target = target + var/stunprob = our_slime.powerlevel * SLIME_SHOCK_PERCENTAGE_PER_LEVEL + SLIME_BASE_SHOCK_PERCENTAGE // 17 at level 1, 80 at level 10 + if(!prob(stunprob)) + return NONE // normal attack + + carbon_target.visible_message(span_danger("The [our_slime.name] shocks [carbon_target]!"), span_userdanger("The [our_slime.name] shocks you!")) + + do_sparks(5, TRUE, carbon_target) + var/power = our_slime.powerlevel + rand(0,3) + carbon_target.Paralyze(power * 2 SECONDS) + carbon_target.set_stutter_if_lower(power * 2 SECONDS) + if (prob(stunprob) && our_slime.powerlevel >= SLIME_EXTRA_SHOCK_COST) + our_slime.powerlevel = clamp(our_slime.powerlevel - SLIME_EXTRA_SHOCK_COST, SLIME_MIN_POWER, SLIME_MAX_POWER) + carbon_target.apply_damage(our_slime.powerlevel * rand(6, 10), BURN, spread_damage = TRUE, wound_bonus = CANT_WOUND) + + if(isslime(target)) + if(target == our_slime) + return COMPONENT_CANCEL_ATTACK_CHAIN + var/mob/living/simple_animal/slime/target_slime = target + if(target_slime.buckled) + target_slime.stop_feeding(silent = TRUE) + visible_message(span_danger("[our_slime] pulls [target_slime] off!"), \ + span_danger("You pull [target_slime] off!")) + return NONE // normal attack + target_slime.attacked_stacks += 5 + var/is_adult_slime = our_slime.life_stage == SLIME_LIFE_STAGE_ADULT + if(target_slime.nutrition >= 100) //steal some nutrition. negval handled in life() + var/stolen_nutrition = is_adult_slime ? 90 : 50 + target_slime.adjust_nutrition(-stolen_nutrition) + our_slime.add_nutrition(stolen_nutrition) + if(target_slime.health > 0) + our_slime.adjustBruteLoss(is_adult_slime ? -20 : -10) + +#undef SLIME_EXTRA_SHOCK_COST +#undef SLIME_EXTRA_SHOCK_THRESHOLD +#undef SLIME_BASE_SHOCK_PERCENTAGE +#undef SLIME_SHOCK_PERCENTAGE_PER_LEVEL diff --git a/code/modules/mob/living/simple_animal/slime/slime_type.dm b/code/modules/mob/living/simple_animal/slime/slime_type.dm new file mode 100644 index 00000000000000..11f37988040173 --- /dev/null +++ b/code/modules/mob/living/simple_animal/slime/slime_type.dm @@ -0,0 +1,224 @@ +/datum/slime_type + ///Our slime's colour as text. Used by both description, and icon + var/colour + ///The type our slime spawns + var/core_type + ///The possible mutations of our slime + var/list/mutations + ///The hexcode used by the slime to colour their victims + var/rgb_code + +//TIER 0 + +/datum/slime_type/grey + colour = SLIME_TYPE_GREY + core_type = /obj/item/slime_extract/grey + mutations = list( + /datum/slime_type/blue = 1, + /datum/slime_type/metal = 1, + /datum/slime_type/orange = 1, + /datum/slime_type/purple = 1, + ) + rgb_code = COLOR_SLIME_GREY + + +//TIER 1 + +/datum/slime_type/blue + colour = SLIME_TYPE_BLUE + core_type = /obj/item/slime_extract/blue + mutations = list( + /datum/slime_type/darkblue = 1, + /datum/slime_type/pink = 2, + /datum/slime_type/silver = 1, + ) + rgb_code = COLOR_SLIME_BLUE + +/datum/slime_type/metal + colour = SLIME_TYPE_METAL + core_type = /obj/item/slime_extract/metal + mutations = list( + /datum/slime_type/gold = 2, + /datum/slime_type/silver = 1, + /datum/slime_type/yellow = 1, + ) + rgb_code = COLOR_SLIME_METAL + +/datum/slime_type/purple + colour = SLIME_TYPE_PURPLE + core_type = /obj/item/slime_extract/purple + mutations = list( + /datum/slime_type/darkblue = 1, + /datum/slime_type/darkpurple = 1, + /datum/slime_type/green = 2, + ) + rgb_code = COLOR_SLIME_PURPLE + +/datum/slime_type/orange + colour = SLIME_TYPE_ORANGE + core_type = /obj/item/slime_extract/orange + mutations = list( + /datum/slime_type/darkpurple = 1, + /datum/slime_type/red = 2, + /datum/slime_type/yellow = 1, + ) + rgb_code = COLOR_SLIME_ORANGE + +//TIER 2 + +/datum/slime_type/darkblue + colour = SLIME_TYPE_DARK_BLUE + core_type = /obj/item/slime_extract/darkblue + mutations = list( + /datum/slime_type/blue = 1, + /datum/slime_type/cerulean = 2, + /datum/slime_type/purple = 1, + ) + rgb_code = COLOR_SLIME_BLUE + +/datum/slime_type/darkpurple + colour = SLIME_TYPE_DARK_PURPLE + core_type = /obj/item/slime_extract/darkpurple + mutations = list( + /datum/slime_type/orange = 1, + /datum/slime_type/purple = 1, + /datum/slime_type/sepia = 2, + ) + rgb_code = COLOR_SLIME_PURPLE + +/datum/slime_type/silver + colour = SLIME_TYPE_SILVER + core_type = /obj/item/slime_extract/silver + mutations = list( + /datum/slime_type/blue = 1, + /datum/slime_type/metal = 1, + /datum/slime_type/pyrite = 2, + ) + rgb_code = COLOR_SLIME_SILVER + +/datum/slime_type/yellow + colour = SLIME_TYPE_YELLOW + core_type = /obj/item/slime_extract/yellow + mutations = list( + /datum/slime_type/bluespace = 2, + /datum/slime_type/metal = 1, + /datum/slime_type/orange = 1, + ) + rgb_code = COLOR_SLIME_YELLOW + +//TIER 3 + +/datum/slime_type/bluespace + colour = SLIME_TYPE_BLUESPACE + core_type = /obj/item/slime_extract/bluespace + mutations = list( + /datum/slime_type/bluespace = 1, + ) + rgb_code = COLOR_SLIME_BLUESPACE + + +/datum/slime_type/cerulean + colour = SLIME_TYPE_CERULEAN + core_type = /obj/item/slime_extract/cerulean + mutations = list( + /datum/slime_type/cerulean = 1, + ) + rgb_code = COLOR_SLIME_CERULEAN + +/datum/slime_type/pyrite + colour = SLIME_TYPE_PYRITE + core_type = /obj/item/slime_extract/pyrite + mutations = list( + /datum/slime_type/pyrite = 1, + ) + rgb_code = COLOR_SLIME_PYRITE + +/datum/slime_type/sepia + colour = SLIME_TYPE_SEPIA + core_type = /obj/item/slime_extract/sepia + mutations = list( + /datum/slime_type/sepia = 1, + ) + rgb_code = COLOR_SLIME_SEPIA + +//TIER 4 + +/datum/slime_type/gold + colour = SLIME_TYPE_GOLD + core_type = /obj/item/slime_extract/gold + mutations = list( + /datum/slime_type/adamantine = 1, + /datum/slime_type/gold = 1, + ) + rgb_code = COLOR_SLIME_GOLD + +/datum/slime_type/green + colour = SLIME_TYPE_GREEN + core_type = /obj/item/slime_extract/green + mutations = list( + /datum/slime_type/black = 1, + /datum/slime_type/green = 1, + ) + rgb_code = COLOR_SLIME_GREEN + +/datum/slime_type/pink + colour = SLIME_TYPE_PINK + core_type = /obj/item/slime_extract/pink + mutations = list( + /datum/slime_type/lightpink = 1, + /datum/slime_type/pink = 1, + ) + rgb_code = COLOR_SLIME_PINK + +/datum/slime_type/red + colour = SLIME_TYPE_RED + core_type = /obj/item/slime_extract/red + mutations = list( + /datum/slime_type/oil = 1, + /datum/slime_type/red = 1, + ) + rgb_code = COLOR_SLIME_RED + +//TIER 5 + +/datum/slime_type/adamantine + colour = SLIME_TYPE_ADAMANTINE + core_type = /obj/item/slime_extract/adamantine + mutations = list( + /datum/slime_type/adamantine = 1, + ) + rgb_code = COLOR_SLIME_ADAMANTINE + +/datum/slime_type/black + colour = SLIME_TYPE_BLACK + core_type = /obj/item/slime_extract/black + mutations = list( + /datum/slime_type/black = 1, + ) + rgb_code = COLOR_SLIME_BLACK + +/datum/slime_type/lightpink + colour = SLIME_TYPE_LIGHT_PINK + core_type = /obj/item/slime_extract/lightpink + mutations = list( + /datum/slime_type/lightpink = 1, + ) + rgb_code = COLOR_SLIME_LIGHT_PINK + +/datum/slime_type/oil + colour = SLIME_TYPE_OIL + core_type = /obj/item/slime_extract/oil + mutations = list( + /datum/slime_type/oil = 1, + ) + rgb_code = COLOR_SLIME_OIL + +//Tier Special + +/datum/slime_type/rainbow + colour = SLIME_TYPE_RAINBOW + core_type = /obj/item/slime_extract/rainbow + mutations = list( + /datum/slime_type/rainbow = 1, + ) + rgb_code = COLOR_SLIME_RAINBOW 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 e948de7cd4d2be..00000000000000 --- 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(SLIME_TYPE_GREY) - slime_mutation_colors[1] = SLIME_TYPE_ORANGE - slime_mutation_colors[2] = SLIME_TYPE_METAL - slime_mutation_colors[3] = SLIME_TYPE_BLUE - slime_mutation_colors[4] = SLIME_TYPE_PURPLE - //Tier 2 - if(SLIME_TYPE_PURPLE) - slime_mutation_colors[1] = SLIME_TYPE_DARK_PURPLE - slime_mutation_colors[2] = SLIME_TYPE_DARK_BLUE - slime_mutation_colors[3] = SLIME_TYPE_GREEN - slime_mutation_colors[4] = SLIME_TYPE_GREEN - if(SLIME_TYPE_METAL) - slime_mutation_colors[1] = SLIME_TYPE_SILVER - slime_mutation_colors[2] = SLIME_TYPE_YELLOW - slime_mutation_colors[3] = SLIME_TYPE_GOLD - slime_mutation_colors[4] = SLIME_TYPE_GOLD - if(SLIME_TYPE_ORANGE) - slime_mutation_colors[1] = SLIME_TYPE_DARK_PURPLE - slime_mutation_colors[2] = SLIME_TYPE_YELLOW - slime_mutation_colors[3] = SLIME_TYPE_RED - slime_mutation_colors[4] = SLIME_TYPE_RED - if(SLIME_TYPE_BLUE) - slime_mutation_colors[1] = SLIME_TYPE_DARK_BLUE - slime_mutation_colors[2] = SLIME_TYPE_SILVER - slime_mutation_colors[3] = SLIME_TYPE_PINK - slime_mutation_colors[4] = SLIME_TYPE_PINK - //Tier 3 - if(SLIME_TYPE_DARK_BLUE) - slime_mutation_colors[1] = SLIME_TYPE_PURPLE - slime_mutation_colors[2] = SLIME_TYPE_BLUE - slime_mutation_colors[3] = SLIME_TYPE_CERULEAN - slime_mutation_colors[4] = SLIME_TYPE_CERULEAN - if(SLIME_TYPE_DARK_PURPLE) - slime_mutation_colors[1] = SLIME_TYPE_PURPLE - slime_mutation_colors[2] = SLIME_TYPE_ORANGE - slime_mutation_colors[3] = SLIME_TYPE_SEPIA - slime_mutation_colors[4] = SLIME_TYPE_SEPIA - if(SLIME_TYPE_YELLOW) - slime_mutation_colors[1] = SLIME_TYPE_METAL - slime_mutation_colors[2] = SLIME_TYPE_ORANGE - slime_mutation_colors[3] = SLIME_TYPE_BLUESPACE - slime_mutation_colors[4] = SLIME_TYPE_BLUESPACE - if(SLIME_TYPE_SILVER) - slime_mutation_colors[1] = SLIME_TYPE_METAL - slime_mutation_colors[2] = SLIME_TYPE_BLUE - slime_mutation_colors[3] = SLIME_TYPE_PYRITE - slime_mutation_colors[4] = SLIME_TYPE_PYRITE - //Tier 4 - if(SLIME_TYPE_PINK) - slime_mutation_colors[1] = SLIME_TYPE_PINK - slime_mutation_colors[2] = SLIME_TYPE_PINK - slime_mutation_colors[3] = SLIME_TYPE_LIGHT_PINK - slime_mutation_colors[4] = SLIME_TYPE_LIGHT_PINK - if(SLIME_TYPE_RED) - slime_mutation_colors[1] = SLIME_TYPE_RED - slime_mutation_colors[2] = SLIME_TYPE_RED - slime_mutation_colors[3] = SLIME_TYPE_OIL - slime_mutation_colors[4] = SLIME_TYPE_OIL - if(SLIME_TYPE_GOLD) - slime_mutation_colors[1] = SLIME_TYPE_GOLD - slime_mutation_colors[2] = SLIME_TYPE_GOLD - slime_mutation_colors[3] = SLIME_TYPE_ADAMANTINE - slime_mutation_colors[4] = SLIME_TYPE_ADAMANTINE - if(SLIME_TYPE_GREEN) - slime_mutation_colors[1] = SLIME_TYPE_GREEN - slime_mutation_colors[2] = SLIME_TYPE_GREEN - slime_mutation_colors[3] = SLIME_TYPE_BLACK - slime_mutation_colors[4] = SLIME_TYPE_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 bbc37911bb17fe..96beb024fe9220 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -497,18 +497,28 @@ /mob/living/proc/cure_husk(source) REMOVE_TRAIT(src, TRAIT_HUSK, source) - if(!HAS_TRAIT(src, TRAIT_HUSK)) - REMOVE_TRAIT(src, TRAIT_DISFIGURED, "husk") - update_body() - return TRUE + if(HAS_TRAIT(src, TRAIT_HUSK)) + return FALSE + REMOVE_TRAIT(src, TRAIT_DISFIGURED, "husk") + update_body() + UnregisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_UNHUSKABLE)) + return TRUE /mob/living/proc/become_husk(source) - if(!HAS_TRAIT(src, TRAIT_HUSK)) - ADD_TRAIT(src, TRAIT_HUSK, source) - ADD_TRAIT(src, TRAIT_DISFIGURED, "husk") - update_body() - else - ADD_TRAIT(src, TRAIT_HUSK, source) + if(HAS_TRAIT(src, TRAIT_UNHUSKABLE)) + return + var/was_husk = HAS_TRAIT(src, TRAIT_HUSK) + ADD_TRAIT(src, TRAIT_HUSK, source) + if (was_husk) + return + ADD_TRAIT(src, TRAIT_DISFIGURED, "husk") + update_body() + RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_UNHUSKABLE), PROC_REF(became_unhuskable)) + +/// Called when we become unhuskable while already husked +/mob/living/proc/became_unhuskable() + SIGNAL_HANDLER + cure_husk() /mob/living/proc/cure_fakedeath(source) remove_traits(list(TRAIT_FAKEDEATH, TRAIT_DEATHCOMA), source) diff --git a/code/modules/mob/living/taste.dm b/code/modules/mob/living/taste.dm index f0bc01eb84cfda..72adcbb43df8bf 100644 --- a/code/modules/mob/living/taste.dm +++ b/code/modules/mob/living/taste.dm @@ -56,6 +56,9 @@ // No tongue, no tastin' if(!tongue?.sense_of_taste || HAS_TRAIT(src, TRAIT_AGEUSIA)) return NONE + // Handled in here since the brain trauma can't modify taste directly (/datum/brain_trauma/severe/flesh_desire) + if(HAS_TRAIT(src, TRAIT_FLESH_DESIRE)) + return GORE | MEAT return tongue.liked_foodtypes /** @@ -83,6 +86,8 @@ // No tongue, no tastin' if(!tongue) return TOXIC + if(HAS_TRAIT(src, TRAIT_FLESH_DESIRE)) + return VEGETABLES | DAIRY | FRUIT | FRIED return tongue.toxic_foodtypes /** diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 3038d6a97adfa6..51b8ed70a3b95e 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -34,7 +34,7 @@ add_to_player_list() lastKnownIP = client.address computer_id = client.computer_id - log_access("Mob Login: [key_name(src)] was assigned to a [type]") + log_access("Mob Login: [key_name(src)] was assigned to a [type] ([tag])") world.update_status() client.clear_screen() //remove hud items just in case client.images = list() @@ -112,7 +112,13 @@ for(var/foo in client.player_details.post_login_callbacks) var/datum/callback/CB = foo CB.Invoke() - log_played_names(client.ckey,name,real_name) + log_played_names( + client.ckey, + list( + "[name]" = tag, + "[real_name]" = tag, + ), + ) auto_deadmin_on_login() log_message("Client [key_name(src)] has taken ownership of mob [src]([src.type])", LOG_OWNERSHIP) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index e5ddcf1f0ae77c..c7215340409a96 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -28,8 +28,9 @@ if(client) stack_trace("Mob with client has been deleted.") else if(ckey) - stack_trace("Mob without client but with associated ckey has been deleted.") + stack_trace("Mob without client but with associated ckey, [ckey], has been deleted.") + unset_machine() remove_from_mob_list() remove_from_dead_mob_list() remove_from_alive_mob_list() @@ -46,7 +47,7 @@ qdel(hud_used) QDEL_LIST(client_colours) - ghostize() //False, since we're deleting it currently + ghostize(can_reenter_corpse = FALSE) //False, since we're deleting it currently if(mind?.current == src) //Let's just be safe yeah? This will occasionally be cleared, but not always. Can't do it with ghostize without changing behavior mind.set_current(null) @@ -180,7 +181,7 @@ hud_list[hud] = list() else - var/image/I = image('modular_skyrat/master_files/icons/mob/huds/hud.dmi', src, "") //SKYRAT EDIT: original filepath 'icons/mob/huds/hud.dmi' + var/image/I = image('modular_nova/master_files/icons/mob/huds/hud.dmi', src, "") //NOVA EDIT: original filepath 'icons/mob/huds/hud.dmi' I.appearance_flags = RESET_COLOR|RESET_TRANSFORM hud_list[hud] = I set_hud_image_active(hud, update_huds = FALSE) //by default everything is active. but dont add it to huds to keep control. @@ -266,7 +267,7 @@ * * vision_distance (optional) define how many tiles away the message can be seen. * * ignored_mob (optional) doesn't show any message to a given mob if TRUE. */ -/atom/proc/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE, separation = " ") // SKYRAT EDIT ADDITION - SEPERATION +/atom/proc/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE, separation = " ", pref_to_check) // NOVA EDIT ADDITION - separation, pref checks var/turf/T = get_turf(src) if(!T) return @@ -276,7 +277,7 @@ var/list/hearers = get_hearers_in_view(vision_distance, src) //caches the hearers and then removes ignored mobs. hearers -= ignored_mobs - //SKYRAT EDIT ADDITION BEGIN - AI QoL + //NOVA EDIT ADDITION BEGIN - AI QoL for(var/mob/camera/ai_eye/ai_eye in hearers) if(ai_eye.ai?.client && !(ai_eye.ai.stat == DEAD)) hearers -= ai_eye @@ -285,18 +286,22 @@ for(var/obj/effect/overlay/holo_pad_hologram/holo in hearers) if(holo.Impersonation?.client) hearers |= holo.Impersonation - //SKYRAT EDIT ADDITION END - AI QoL + //NOVA EDIT ADDITION END - AI QoL if(self_message) hearers -= src var/raw_msg = message if(visible_message_flags & EMOTE_MESSAGE) - message = "[src][separation][message]" // SKYRAT EDIT - Better emotes + message = "[src][separation][message]" // NOVA EDIT - Better emotes for(var/mob/M in hearers) if(!M.client) continue + // NOVA EDIT ADDITION - Emote pref checks + if(pref_to_check && !M.client?.prefs.read_preference(pref_to_check)) + continue + // NOVA EDIT END //This entire if/else chain could be in two lines but isn't for readibilties sake. var/msg = message @@ -322,7 +327,7 @@ ///Adds the functionality to self_message. -/mob/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE, separation = " ") // SKYRAT EDIT ADDITION - Better emotes +/mob/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE, separation = " ", pref_to_check) // NOVA EDIT ADDITION - Better emotes, pref checks . = ..() if(self_message) show_message(self_message, MSG_VISUAL, blind_message, MSG_AUDIBLE) @@ -337,10 +342,10 @@ * * deaf_message (optional) is what deaf people will see. * * hearing_distance (optional) is the range, how many tiles away the message can be heard. */ -/atom/proc/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, audible_message_flags = NONE, separation = " ") // SKYRAT EDIT ADDITION - Better emotes +/atom/proc/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, audible_message_flags = NONE, separation = " ", pref_to_check) // NOVA EDIT ADDITION - Better emotes, pref checks var/list/hearers = get_hearers_in_view(hearing_distance, src) - //SKYRAT EDIT ADDITION BEGIN - AI QoL + //NOVA EDIT ADDITION BEGIN - AI QoL for(var/mob/camera/ai_eye/ai_eye in hearers) if(ai_eye.ai?.client && !(ai_eye.ai.stat == DEAD)) hearers -= ai_eye @@ -349,14 +354,18 @@ for(var/obj/effect/overlay/holo_pad_hologram/holo in hearers) if(holo.Impersonation?.client) hearers |= holo.Impersonation - //SKYRAT EDIT ADDITION END - AI QoL + //NOVA EDIT ADDITION END - AI QoL if(self_message) hearers -= src var/raw_msg = message if(audible_message_flags & EMOTE_MESSAGE) - message = "[src][separation][message]" //SKYRAT EDIT CHANGE + message = "[src][separation][message]" //NOVA EDIT CHANGE for(var/mob/M in hearers) + // NOVA EDIT ADDITION - Emote pref checks + if(pref_to_check && !M.client?.prefs.read_preference(pref_to_check)) + continue + // NOVA EDIT END if(audible_message_flags & EMOTE_MESSAGE && runechat_prefs_check(M, audible_message_flags) && M.can_hear()) M.create_chat_message(src, raw_message = raw_msg, runechat_flags = audible_message_flags) M.show_message(message, MSG_AUDIBLE, deaf_message, MSG_VISUAL) @@ -372,7 +381,7 @@ * * deaf_message (optional) is what deaf people will see. * * hearing_distance (optional) is the range, how many tiles away the message can be heard. */ -/mob/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, audible_message_flags = NONE, separation = " ") // SKYRAT EDIT ADDITION - Better emotes +/mob/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, audible_message_flags = NONE, separation = " ", pref_to_check) // NOVA EDIT ADDITION - Better emotes, pref checks . = ..() if(self_message) show_message(self_message, MSG_AUDIBLE, deaf_message, MSG_VISUAL) @@ -493,7 +502,7 @@ * * returns 0 if it cannot, 1 if successful */ -/mob/proc/equip_to_appropriate_slot(obj/item/W, qdel_on_fail = FALSE, indirect_action = FALSE, blacklist, initial) //SKYRAT EDIT CHANGE +/mob/proc/equip_to_appropriate_slot(obj/item/W, qdel_on_fail = FALSE, indirect_action = FALSE, blacklist, initial) //NOVA EDIT CHANGE if(!istype(W)) return FALSE @@ -511,7 +520,7 @@ ITEM_SLOT_DEX_STORAGE\ ) - //SKYRAT EDIT CHANGE BEGIN - CUSTOMIZATION + //NOVA EDIT CHANGE BEGIN - CUSTOMIZATION /* for(var/slot in slot_priority) if(equip_to_slot_if_possible(W, slot, FALSE, TRUE, TRUE, FALSE, FALSE)) //qdel_on_fail = FALSE; disable_warning = TRUE; redraw_mob = TRUE; @@ -520,7 +529,7 @@ slot_priority -= blacklist for(var/slot in slot_priority) if(equip_to_slot_if_possible(W, slot, FALSE, TRUE, TRUE, FALSE, initial, indirect_action = indirect_action)) //qdel_on_fail = FALSE; disable_warning = TRUE; redraw_mob = TRUE; - //SKYRAT EDIT CHANGE END + //NOVA EDIT CHANGE END return TRUE if(qdel_on_fail) @@ -609,13 +618,14 @@ result += span_notice("You examine [examinify] closer, but find nothing of interest...") else result = examinify.examine(src) + SEND_SIGNAL(src, COMSIG_MOB_EXAMINING, examinify, result) client.recent_examines[ref_to_atom] = world.time // set to when we last normal examine'd them addtimer(CALLBACK(src, PROC_REF(clear_from_recent_examines), ref_to_atom), RECENT_EXAMINE_MAX_WINDOW) handle_eye_contact(examinify) else result = examinify.examine(src) // if a tree is examined but no client is there to see it, did the tree ever really exist? - //SKYRAT EDIT CHANGE + //NOVA EDIT CHANGE if(result.len) for(var/i = 1; i <= length(result); i++) if(result[i] != EXAMINE_SECTION_BREAK) @@ -625,12 +635,11 @@ if((i == 1) || (i == length(result)) || (result[i - 1] == EXAMINE_SECTION_BREAK)) result.Cut(i, i + 1) i-- - //SKYRAT EDIT END + //NOVA EDIT END to_chat(src, examine_block("[result.Join()]")) SEND_SIGNAL(src, COMSIG_MOB_EXAMINATE, examinify) - /mob/proc/blind_examine_check(atom/examined_thing) return TRUE //The non-living will always succeed at this check. @@ -744,6 +753,8 @@ /mob/proc/can_resist() return FALSE //overridden in living.dm +#define SPIN_PROC_TRAIT "trait_from_spin()" + ///Spin this mob around it's central axis /mob/proc/spin(spintime, speed) set waitfor = 0 @@ -751,7 +762,7 @@ if((spintime < 1) || (speed < 1) || !spintime || !speed) return - flags_1 |= IS_SPINNING_1 + ADD_TRAIT(src, TRAIT_SPINNING, SPIN_PROC_TRAIT) while(spintime >= speed) sleep(speed) switch(D) @@ -765,7 +776,9 @@ D = NORTH setDir(D) spintime -= speed - flags_1 &= ~IS_SPINNING_1 + REMOVE_TRAIT(src, TRAIT_SPINNING, SPIN_PROC_TRAIT) + +#undef SPIN_PROC_TRAIT ///Update the pulling hud icon /mob/proc/update_pull_hud_icon() @@ -836,12 +849,12 @@ if(!check_respawn_delay()) return - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(ckey) if(is_banned_from(ckey, BAN_RESPAWN)) to_chat(usr, "You are respawn banned, you can't respawn!") return - //SKYRAT EDIT END + //NOVA EDIT END usr.log_message("used the respawn button.", LOG_GAME) @@ -1037,11 +1050,11 @@ if(mind) return mind.grab_ghost(force = force) -///Notify a ghost that it's body is being cloned -/mob/proc/notify_ghost_cloning(message = "Someone is trying to revive you. Re-enter your corpse if you want to be revived!", sound = 'sound/effects/genetics.ogg', atom/source = null, flashwindow) +///Notify a ghost that its body is being revived +/mob/proc/notify_revival(message = "Someone is trying to revive you. Re-enter your corpse if you want to be revived!", sound = 'sound/effects/genetics.ogg', atom/source = null, flashwindow = TRUE) var/mob/dead/observer/ghost = get_ghost() if(ghost) - ghost.notify_cloning(message, sound, source, flashwindow) + ghost.send_revival_notification(message, sound, source, flashwindow) return ghost /** @@ -1241,14 +1254,24 @@ log_message("[src] name changed from [oldname] to [newname]", LOG_OWNERSHIP) - log_played_names(ckey, newname) + log_played_names( + ckey, + list( + "[newname]" = tag, + ), + ) real_name = newname name = newname if(mind) mind.name = newname if(mind.key) - log_played_names(mind.key,newname) //Just in case the mind is unsynced at the moment. + log_played_names( + ckey(mind.key), + list( + "[newname]" = tag, + ), + ) //Just in case the mind is unsynced at the moment. if(oldname) //update the datacore records! This is goig to be a bit costly. @@ -1262,7 +1285,11 @@ // Only update if this player is a target if(obj.target && obj.target.current && obj.target.current.real_name == name) obj.update_explanation_text() + if(client) // NOVA EDIT ADDITION - Update the mob chat color list, removing the old name + GLOB.chat_colors_by_mob_name -= oldname // NOVA EDIT ADDITION + if(client) // NOVA EDIT ADDITION - Update the mob chat color list, adding the new name + GLOB.chat_colors_by_mob_name[name] = list(chat_color, chat_color_darkened) // NOVA EDIT ADDITION log_mob_tag("TAG: [tag] RENAMED: [key_name(src)]") return TRUE @@ -1370,10 +1397,6 @@ to_chat(src, span_warning("You can't write with the [writing_instrument]!")) return FALSE - if(HAS_MIND_TRAIT(src, TRAIT_MIMING) && !istype(writing_instrument, /obj/item/toy/crayon/mime)) - to_chat(src, span_warning("Your vow of silence is preventing you from talking with text.")) - return FALSE - if(!is_literate()) to_chat(src, span_warning("You try to write, but don't know how to spell anything!")) return FALSE @@ -1452,62 +1475,80 @@ /mob/vv_do_topic(list/href_list) . = ..() + + if(!.) + return + if(href_list[VV_HK_REGEN_ICONS]) if(!check_rights(NONE)) return regenerate_icons() + if(href_list[VV_HK_PLAYER_PANEL]) if(!check_rights(NONE)) return usr.client.holder.show_player_panel(src) + if(href_list[VV_HK_GODMODE]) if(!check_rights(R_ADMIN)) return usr.client.cmd_admin_godmode(src) + if(href_list[VV_HK_GIVE_MOB_ACTION]) if(!check_rights(NONE)) return usr.client.give_mob_action(src) + if(href_list[VV_HK_REMOVE_MOB_ACTION]) if(!check_rights(NONE)) return usr.client.remove_mob_action(src) + if(href_list[VV_HK_GIVE_SPELL]) if(!check_rights(NONE)) return usr.client.give_spell(src) + if(href_list[VV_HK_REMOVE_SPELL]) if(!check_rights(NONE)) return usr.client.remove_spell(src) + if(href_list[VV_HK_GIVE_DISEASE]) if(!check_rights(NONE)) return usr.client.give_disease(src) + if(href_list[VV_HK_GIB]) if(!check_rights(R_FUN)) return usr.client.cmd_admin_gib(src) + if(href_list[VV_HK_BUILDMODE]) if(!check_rights(R_BUILD)) return togglebuildmode(src) + if(href_list[VV_HK_DROP_ALL]) if(!check_rights(NONE)) return usr.client.cmd_admin_drop_everything(src) + if(href_list[VV_HK_DIRECT_CONTROL]) if(!check_rights(NONE)) return usr.client.cmd_assume_direct_control(src) + if(href_list[VV_HK_GIVE_DIRECT_CONTROL]) if(!check_rights(NONE)) return usr.client.cmd_give_direct_control(src) + if(href_list[VV_HK_OFFER_GHOSTS]) if(!check_rights(NONE)) return offer_control(src) + if(href_list[VV_HK_VIEW_PLANES]) if(!check_rights(R_DEBUG)) return @@ -1571,10 +1612,6 @@ /mob/vv_edit_var(var_name, var_value) switch(var_name) - if(NAMEOF(src, control_object)) - var/obj/O = var_value - if(!istype(O) || (O.obj_flags & DANGEROUS_POSSESSION)) - return FALSE if(NAMEOF(src, machine)) set_machine(var_value) . = TRUE diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 6808728a833b79..245afb869323f9 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -9,7 +9,6 @@ /mob density = TRUE layer = MOB_LAYER - plane = GAME_PLANE_FOV_HIDDEN animate_movement = SLIDE_STEPS hud_possible = list(ANTAG_HUD) pressure_resistance = 8 @@ -20,7 +19,7 @@ // we never want to hide a turf because it's not lit // We can rely on the lighting plane to handle that for us see_in_dark = 1e6 - // A list of factions that this mob is currently in, for hostile mob targetting, amongst other things + // A list of factions that this mob is currently in, for hostile mob targeting, amongst other things faction = list(FACTION_NEUTRAL) /// The current client inhabiting this mob. Managed by login/logout /// This exists so we can do cleanup in logout for occasions where a client was transfere rather then destroyed @@ -89,14 +88,6 @@ /// What is the mobs real name (name is overridden for disguises etc) var/real_name = null - /** - * back up of the real name during admin possession - * - * If an admin possesses an object it's real name is set to the admin name and this - * stores whatever the real name was previously. When possession ends, the real name - * is reset to this value - */ - var/name_archive //For admin things like possession /// Default body temperature var/bodytemperature = BODYTEMP_NORMAL //310.15K / 98.6F @@ -158,9 +149,6 @@ /// Can they interact with station electronics var/has_unlimited_silicon_privilege = FALSE - ///Used by admins to possess objects. All mobs should have this var - var/obj/control_object - ///Calls relay_move() to whatever this is set to when the mob tries to move var/atom/movable/remote_control @@ -212,8 +200,4 @@ var/active_typing_indicator ///the icon currently used for the thinking indicator's bubble var/active_thinking_indicator - /// User is thinking in character. Used to revert to thinking state after stop_typing - var/thinking_IC = FALSE - /// Whether invisimin is enabled on this mob - var/invisimin = FALSE diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 5f52e79aaab09c..8c6ebe114965b0 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -245,43 +245,47 @@ * The kitchen sink of notification procs * * Arguments: - * * message - * * ghost_sound sound to play - * * enter_link Href link to enter the ghost role being notified for - * * source The source of the notification - * * alert_overlay The alert overlay to show in the alert message - * * action What action to take upon the ghost interacting with the notification, defaults to NOTIFY_JUMP - * * flashwindow Flash the byond client window - * * ignore_key Ignore keys if they're in the GLOB.poll_ignore list - * * header The header of the notifiaction - * * notify_suiciders If it should notify suiciders (who do not qualify for many ghost roles) - * * notify_volume How loud the sound should be to spook the user + * * message: The message displayed in chat. + * * source: The source of the notification. This is required for an icon + * * header: The title text to display on the icon tooltip. + * * alert_overlay: Optional. Create a custom overlay if you want, otherwise it will use the source + * * click_interact: If true, adds a link + clicking the icon will attack_ghost the source + * * custom_link: Optional. If you want to add a custom link to the chat notification + * * ghost_sound: sound to play + * * ignore_key: Ignore keys if they're in the GLOB.poll_ignore list + * * notify_volume: How loud the sound should be to spook the user */ /proc/notify_ghosts( message, - ghost_sound, - enter_link, atom/source, + header = "Something Interesting!", mutable_appearance/alert_overlay, - action = NOTIFY_JUMP, - flashwindow = TRUE, - ignore_mapload = TRUE, + click_interact = FALSE, + custom_link = "", + ghost_sound, ignore_key, - header = "", - notify_suiciders = TRUE, - notify_volume = 100 + notify_flags = NOTIFY_CATEGORY_DEFAULT, + notify_volume = 100, ) - if(ignore_mapload && SSatoms.initialized != INITIALIZATION_INNEW_REGULAR) //don't notify for objects created during a map load + if(notify_flags & GHOST_NOTIFY_IGNORE_MAPLOAD && SSatoms.initialized != INITIALIZATION_INNEW_REGULAR) //don't notify for objects created during a map load return + if(source) + if(isnull(alert_overlay)) + alert_overlay = get_small_overlay(source) + + alert_overlay.appearance_flags |= TILE_BOUND + alert_overlay.layer = FLOAT_LAYER + alert_overlay.plane = FLOAT_PLANE + for(var/mob/dead/observer/ghost in GLOB.player_list) - if(!notify_suiciders && HAS_TRAIT(ghost, TRAIT_SUICIDED)) + if(!(notify_flags & GHOST_NOTIFY_NOTIFY_SUICIDERS) && HAS_TRAIT(ghost, TRAIT_SUICIDED)) continue if(ignore_key && (ghost.ckey in GLOB.poll_ignore[ignore_key])) continue - if(flashwindow) + if(notify_flags & GHOST_NOTIFY_FLASH_WINDOW) window_flash(ghost.client) if(ghost_sound) @@ -291,20 +295,20 @@ to_chat(ghost, span_ghostalert(message)) continue - var/custom_link = enter_link ? " [enter_link]" : "" - var/link = " ([capitalize(action)])" + var/interact_link = click_interact ? " (Play)" : "" + var/view_link = " (View)" - to_chat(ghost, span_ghostalert("[message][custom_link][link]")) + to_chat(ghost, span_ghostalert("[message][custom_link][interact_link][view_link]")) var/atom/movable/screen/alert/notify_action/toast = ghost.throw_alert( category = "[REF(source)]_notify_action", type = /atom/movable/screen/alert/notify_action, - new_master = source, ) - toast.action = action - toast.desc = "Click to [action]." + toast.add_overlay(alert_overlay) + toast.click_interact = click_interact + toast.desc = "Click to [click_interact ? "play" : "view"]." toast.name = header - toast.target = source + toast.target_ref = WEAKREF(source) /// Heals a robotic limb on a mob /proc/item_heal_robotic(mob/living/carbon/human/human, mob/user, brute_heal, burn_heal) @@ -360,7 +364,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) @@ -560,3 +564,21 @@ raw_lines += recent_speech[key] return raw_lines + +/// Takes in an associated list (key `/datum/action` typepaths, value is the AI blackboard key) and handles granting the action and adding it to the mob's AI controller blackboard. +/// This is only useful in instances where you don't want to store the reference to the action on a variable on the mob. +/// You can set the value to null if you don't want to add it to the blackboard (like in player controlled instances). Is also safe with null AI controllers. +/// Assumes that the action will be initialized and held in the mob itself, which is typically standard. +/mob/proc/grant_actions_by_list(list/input) + if(length(input) <= 0) + return + + for(var/action in input) + var/datum/action/ability = new action(src) + ability.Grant(src) + + var/blackboard_key = input[action] + if(isnull(blackboard_key)) + continue + + ai_controller?.set_blackboard_key(blackboard_key, ability) diff --git a/code/modules/mob/mob_lists.dm b/code/modules/mob/mob_lists.dm index f0a5275bf71868..9fd097a1fd6a43 100644 --- a/code/modules/mob/mob_lists.dm +++ b/code/modules/mob/mob_lists.dm @@ -53,8 +53,6 @@ GLOB.keyloop_list |= src else if(stat != DEAD || !SSlag_switch?.measures[DISABLE_DEAD_KEYLOOP]) GLOB.keyloop_list |= src - if(!SSticker?.mode) - return if(stat == DEAD) add_to_current_dead_players() else @@ -65,8 +63,6 @@ SHOULD_CALL_PARENT(TRUE) GLOB.player_list -= src GLOB.keyloop_list -= src - if(!SSticker?.mode) - return if(stat == DEAD) remove_from_current_dead_players() else @@ -75,13 +71,9 @@ ///Adds the cliented mob reference to either the list of dead player-mobs or to the list of observers, depending on how they joined the game. /mob/proc/add_to_current_dead_players() - if(!SSticker?.mode) - return GLOB.dead_player_list |= src /mob/dead/observer/add_to_current_dead_players() - if(!SSticker?.mode) - return if(started_as_observer) GLOB.current_observers_list |= src return @@ -92,13 +84,9 @@ ///Removes the mob reference from either the list of dead player-mobs or from the list of observers, depending on how they joined the game. /mob/proc/remove_from_current_dead_players() - if(!SSticker?.mode) - return GLOB.dead_player_list -= src /mob/dead/observer/remove_from_current_dead_players() - if(!SSticker?.mode) - return if(started_as_observer) GLOB.current_observers_list -= src return @@ -107,16 +95,12 @@ ///Adds the cliented mob reference to the list of living player-mobs. If the mob is an antag, it adds it to the list of living antag player-mobs. /mob/proc/add_to_current_living_players() - if(!SSticker?.mode) - return GLOB.alive_player_list |= src if(mind && (mind.special_role || length(mind.antag_datums))) add_to_current_living_antags() ///Removes the mob reference from the list of living player-mobs. If the mob is an antag, it removes it from the list of living antag player-mobs. /mob/proc/remove_from_current_living_players() - if(!SSticker?.mode) - return GLOB.alive_player_list -= src if(LAZYLEN(mind?.antag_datums)) remove_from_current_living_antags() @@ -124,9 +108,6 @@ ///Adds the cliented mob reference to the list of living antag player-mobs. /mob/proc/add_to_current_living_antags() - if(!SSticker?.mode) - return - if (length(mind.antag_datums) == 0) return @@ -137,6 +118,4 @@ ///Removes the mob reference from the list of living antag player-mobs. /mob/proc/remove_from_current_living_antags() - if(!SSticker?.mode) - return GLOB.current_living_antags -= src diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index a5aa8c2c1453d9..4ef0034ece3df2 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -8,25 +8,6 @@ if(!iscyborg(mob) && mob.stat == CONSCIOUS) mob.dropItemToGround(mob.get_active_held_item()) return - -/** - * force move the control_object of your client mob - * - * Used in admin possession and called from the client Move proc - * ensures the possessed object moves and not the admin mob - * - * Has no sanity other than checking density - */ -/client/proc/Move_object(direct) - if(mob?.control_object) - if(mob.control_object.density) - step(mob.control_object,direct) - if(!mob.control_object) - return - mob.control_object.setDir(direct) - else - mob.control_object.forceMove(get_step(mob.control_object,direct)) - /** * Move a client in a direction * @@ -76,9 +57,9 @@ return FALSE if(HAS_TRAIT(mob, TRAIT_NO_TRANSFORM)) return FALSE //This is sorta the goto stop mobs from moving trait - if(mob.control_object) - return Move_object(direct) if(!isliving(mob)) + if(SEND_SIGNAL(mob, COMSIG_MOB_CLIENT_PRE_NON_LIVING_MOVE, new_loc, direct) & COMSIG_MOB_CLIENT_BLOCK_PRE_NON_LIVING_MOVE) + return FALSE return mob.Move(new_loc, direct) if(mob.stat == DEAD) mob.ghostize() @@ -367,6 +348,8 @@ /mob/proc/slip(knockdown_amount, obj/slipped_on, lube_flags, paralyze, force_drop = FALSE) add_mob_memory(/datum/memory/was_slipped, antagonist = slipped_on) + SEND_SIGNAL(src, COMSIG_MOB_SLIPPED, knockdown_amount, slipped_on, lube_flags, paralyze, force_drop) + //bodypart selection verbs - Cyberboss //8: repeated presses toggles through head - eyes - mouth //9: eyes 8: head 7: mouth @@ -509,13 +492,12 @@ if(move_intent == MOVE_INTENT_RUN) move_intent = MOVE_INTENT_WALK else - //SKYRAT EDIT ADDITION BEGIN - GUNPOINT + //NOVA EDIT ADDITION BEGIN - GUNPOINT if (HAS_TRAIT(src,TRAIT_NORUNNING)) to_chat(src, "You find yourself unable to run.") return FALSE - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END move_intent = MOVE_INTENT_RUN - SET_PLANE_IMPLICIT(src, (move_intent == MOVE_INTENT_WALK && !HAS_TRAIT(src, TRAIT_OVERSIZED)) ? GAME_PLANE_FOV_HIDDEN : GAME_PLANE) //SKYRAT EDIT ADDITION - Oversized Overhaul if(hud_used?.static_inventory) for(var/atom/movable/screen/mov_intent/selector in hud_used.static_inventory) selector.update_appearance() @@ -526,10 +508,12 @@ set name = "Move Upwards" set category = "IC" + if(remote_control) + return remote_control.relaymove(src, UP) + var/turf/current_turf = get_turf(src) var/turf/above_turf = GET_TURF_ABOVE(current_turf) - var/ventcrawling_flag = HAS_TRAIT(src, TRAIT_MOVE_VENTCRAWLING) ? ZMOVE_VENTCRAWLING : 0 if(!above_turf) to_chat(src, span_warning("There's nowhere to go in that direction!")) return @@ -538,6 +522,8 @@ var/atom/loc_atom = loc return loc_atom.relaymove(src, UP) + var/ventcrawling_flag = HAS_TRAIT(src, TRAIT_MOVE_VENTCRAWLING) ? ZMOVE_VENTCRAWLING : 0 + if(can_z_move(DOWN, above_turf, current_turf, ZMOVE_FALL_FLAGS|ventcrawling_flag)) //Will we fall down if we go up? if(buckled) to_chat(src, span_warning("[buckled] is is not capable of flight.")) @@ -553,8 +539,12 @@ set name = "Move Down" set category = "IC" + if(remote_control) + return remote_control.relaymove(src, DOWN) + var/turf/current_turf = get_turf(src) var/turf/below_turf = GET_TURF_BELOW(current_turf) + if(!below_turf) to_chat(src, span_warning("There's nowhere to go in that direction!")) return @@ -564,6 +554,7 @@ return loc_atom.relaymove(src, DOWN) var/ventcrawling_flag = HAS_TRAIT(src, TRAIT_MOVE_VENTCRAWLING) ? ZMOVE_VENTCRAWLING : 0 + if(zMove(DOWN, z_move_flags = ZMOVE_FLIGHT_FLAGS|ZMOVE_FEEDBACK|ventcrawling_flag)) to_chat(src, span_notice("You move down.")) return FALSE diff --git a/code/modules/mob/mob_say.dm b/code/modules/mob/mob_say.dm index 79391916de4d5f..28b3da6580a01d 100644 --- a/code/modules/mob/mob_say.dm +++ b/code/modules/mob/mob_say.dm @@ -100,11 +100,11 @@ to_chat(usr, span_danger("Speech is currently admin-disabled.")) return - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(!GLOB.dchat_allowed && !check_rights(R_ADMIN, FALSE)) to_chat(src, "Dead chat is currently muted.") return - //SKYRAT EDIT END + //NOVA EDIT END var/jb = is_banned_from(ckey, "Deadchat") if(QDELETED(src)) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 1caf5e9f1eaa9a..ca82e13e803e6f 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -127,8 +127,6 @@ /mob/living/carbon/human/AIize(client/preference_source, transfer_after = TRUE) if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return - for(var/t in bodyparts) - qdel(t) return ..() @@ -173,11 +171,8 @@ ADD_TRAIT(src, TRAIT_NO_TRANSFORM, TEMPORARY_TRANSFORMATION_TRAIT) Paralyze(1, ignore_canstun = TRUE) - for(var/obj/item/W in src) - if(delete_items) - qdel(W) - else - dropItemToGround(W) + drop_everything(delete_items) + regenerate_icons() icon = null SetInvisibility(INVISIBILITY_MAXIMUM) @@ -189,7 +184,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.") @@ -376,11 +371,11 @@ if(!MP) return FALSE //Sanity, this should never happen. - if(ispath(MP, /mob/living/simple_animal/hostile/construct) || ispath(MP, /mob/living/basic/construct)) + if(ispath(MP, /mob/living/basic/construct)) return FALSE //Verbs do not appear for players. //Good mobs! - if(ispath(MP, /mob/living/simple_animal/pet/cat)) + if(ispath(MP, /mob/living/basic/pet/cat)) return TRUE if(ispath(MP, /mob/living/basic/pet/dog/corgi)) return TRUE @@ -390,7 +385,7 @@ return TRUE if(ispath(MP, /mob/living/basic/mushroom)) return TRUE - if(ispath(MP, /mob/living/simple_animal/shade)) + if(ispath(MP, /mob/living/basic/shade)) return TRUE if(ispath(MP, /mob/living/basic/killer_tomato)) return TRUE @@ -398,7 +393,7 @@ return TRUE if(ispath(MP, /mob/living/basic/bear)) return TRUE - if(ispath(MP, /mob/living/simple_animal/parrot)) + if(ispath(MP, /mob/living/basic/parrot)) return TRUE //Parrots are no longer unfinished! -Nodrak //Not in here? Must be untested! diff --git a/code/modules/mob_spawn/corpses/job_corpses.dm b/code/modules/mob_spawn/corpses/job_corpses.dm index 3893f3e1ba6965..00a5de4f3d6559 100644 --- a/code/modules/mob_spawn/corpses/job_corpses.dm +++ b/code/modules/mob_spawn/corpses/job_corpses.dm @@ -84,3 +84,7 @@ outfit = /datum/outfit/job/roboticist icon_state = "corpseroboticist" +/obj/effect/mob_spawn/corpse/human/bitrunner + name = JOB_BITRUNNER + outfit = /datum/outfit/job/bitrunner + icon_state = "corpsecargotech" diff --git a/code/modules/mob_spawn/corpses/mining_corpses.dm b/code/modules/mob_spawn/corpses/mining_corpses.dm index 8b7ad474b16657..972bb5c3fa589b 100644 --- a/code/modules/mob_spawn/corpses/mining_corpses.dm +++ b/code/modules/mob_spawn/corpses/mining_corpses.dm @@ -27,7 +27,7 @@ /obj/effect/mob_spawn/corpse/human/legioninfested/special(mob/living/carbon/human/spawned_human) . = ..() var/obj/item/organ/internal/legion_tumour/cancer = new() - cancer.Insert(spawned_human, special = TRUE, drop_if_replaced = FALSE) + cancer.Insert(spawned_human, special = TRUE, movement_flags = DELETE_IF_REPLACED) /// Returns the outfit worn by our corpse /obj/effect/mob_spawn/corpse/human/legioninfested/proc/select_outfit() diff --git a/code/modules/mob_spawn/corpses/mob_corpses.dm b/code/modules/mob_spawn/corpses/mob_corpses.dm index 476c3f70a84912..2ec314eb9d4bf1 100644 --- a/code/modules/mob_spawn/corpses/mob_corpses.dm +++ b/code/modules/mob_spawn/corpses/mob_corpses.dm @@ -2,13 +2,13 @@ ///all the corpses meant as mob drops yes, these definitely could be sorted properly. i invite (you) to do it!! /obj/effect/mob_spawn/corpse/human/syndicatesoldier - name = "Syndicate Operative" + name = "Symphionia Operative" hairstyle = "Bald" facial_hairstyle = "Shaved" outfit = /datum/outfit/syndicatesoldiercorpse /datum/outfit/syndicatesoldiercorpse - name = "Syndicate Operative Corpse" + name = "Symphionia Operative Corpse" uniform = /obj/item/clothing/under/syndicate suit = /obj/item/clothing/suit/armor/vest shoes = /obj/item/clothing/shoes/combat @@ -21,13 +21,13 @@ id_trim = /datum/id_trim/chameleon/operative /obj/effect/mob_spawn/corpse/human/syndicatecommando - name = "Syndicate Commando" + name = "Symphionia Commando" hairstyle = "Bald" facial_hairstyle = "Shaved" outfit = /datum/outfit/syndicatecommandocorpse /datum/outfit/syndicatecommandocorpse - name = "Syndicate Commando Corpse" + name = "Symphionia Commando Corpse" uniform = /obj/item/clothing/under/syndicate shoes = /obj/item/clothing/shoes/combat gloves = /obj/item/clothing/gloves/tackler/combat/insulated @@ -42,7 +42,7 @@ outfit = /datum/outfit/syndicatecommandocorpse/lessenedgear /datum/outfit/syndicatecommandocorpse/lessenedgear - name = "Syndicate Commando Corpse (Less Antag Gear)" + name = "Symphionia Commando Corpse (Less Antag Gear)" gloves = /obj/item/clothing/gloves/tackler back = null id = null @@ -52,7 +52,7 @@ outfit = /datum/outfit/syndicatecommandocorpse/soft_suit /datum/outfit/syndicatecommandocorpse/soft_suit - name = "Syndicate Commando Corpse (Softsuit)" + name = "Symphionia Commando Corpse (Softsuit)" suit = /obj/item/clothing/suit/space/syndicate/black head = /obj/item/clothing/head/helmet/space/syndicate/black gloves = /obj/item/clothing/gloves/color/black @@ -61,13 +61,13 @@ id_trim = null /obj/effect/mob_spawn/corpse/human/syndicatestormtrooper - name = "Syndicate Stormtrooper" + name = "Symphionia Stormtrooper" hairstyle = "Bald" facial_hairstyle = "Shaved" outfit = /datum/outfit/syndicatestormtroopercorpse /datum/outfit/syndicatestormtroopercorpse - name = "Syndicate Stormtrooper Corpse" + name = "Symphionia Stormtrooper Corpse" uniform = /obj/item/clothing/under/syndicate shoes = /obj/item/clothing/shoes/combat gloves = /obj/item/clothing/gloves/tackler/combat @@ -78,13 +78,13 @@ id_trim = /datum/id_trim/chameleon/operative /obj/effect/mob_spawn/corpse/human/syndicatepilot - name = "Syndicate Pilot" + name = "Symphionia Pilot" hairstyle = "Bald" facial_hairstyle = "Shaved" outfit = /datum/outfit/syndicatepilotcorpse /datum/outfit/syndicatepilotcorpse - name = "Syndicate Pilot Corpse" + name = "Symphionia Pilot Corpse" uniform = /obj/item/clothing/under/syndicate suit = /obj/item/clothing/suit/armor/vest/alt shoes = /obj/item/clothing/shoes/combat @@ -221,6 +221,21 @@ facial_haircolor = COLOR_WHITE skin_tone = "caucasian1" +/obj/effect/mob_spawn/corpse/human/wizard/red + outfit = /datum/outfit/wizardcorpse/red + +/obj/effect/mob_spawn/corpse/human/wizard/yellow + outfit = /datum/outfit/wizardcorpse/yellow + +/obj/effect/mob_spawn/corpse/human/wizard/black + outfit = /datum/outfit/wizardcorpse/black + +/obj/effect/mob_spawn/corpse/human/wizard/marisa + outfit = /datum/outfit/wizardcorpse/marisa + +/obj/effect/mob_spawn/corpse/human/wizard/tape + outfit = /datum/outfit/wizardcorpse/tape + /datum/outfit/wizardcorpse name = "Space Wizard Corpse" uniform = /obj/item/clothing/under/color/lightpurple @@ -228,6 +243,27 @@ shoes = /obj/item/clothing/shoes/sandal/magic head = /obj/item/clothing/head/wizard +/datum/outfit/wizardcorpse/red + suit = /obj/item/clothing/suit/wizrobe/red + head = /obj/item/clothing/head/wizard/red + +/datum/outfit/wizardcorpse/yellow + suit = /obj/item/clothing/suit/wizrobe/yellow + head = /obj/item/clothing/head/wizard/yellow + +/datum/outfit/wizardcorpse/black + suit = /obj/item/clothing/suit/wizrobe/black + head = /obj/item/clothing/head/wizard/black + +/datum/outfit/wizardcorpse/marisa + suit = /obj/item/clothing/suit/wizrobe/marisa + head = /obj/item/clothing/head/wizard/marisa + shoes = /obj/item/clothing/shoes/sneakers/marisa + +/datum/outfit/wizardcorpse/tape + suit = /obj/item/clothing/suit/wizrobe/tape + head = /obj/item/clothing/head/wizard/tape + /obj/effect/mob_spawn/corpse/human/wizard/dark name = "Dark Wizard Corpse" outfit = /datum/outfit/wizardcorpse/dark @@ -247,7 +283,7 @@ head = /obj/item/clothing/head/collectable/paper /obj/effect/mob_spawn/corpse/human/nanotrasensoldier - name = "\improper Nanotrasen Private Security Officer" + name = "\improper Symphionia Private Security Officer" outfit = /datum/outfit/nanotrasensoldiercorpse hairstyle = "Bald" facial_hairstyle = "Shaved" @@ -266,7 +302,7 @@ id_trim = /datum/id_trim/centcom/corpse/private_security/tradepost_officer /obj/effect/mob_spawn/corpse/human/nanotrasenassaultsoldier - name = "\improper Nanotrasen Assault Officer Corpse" + name = "\improper Symphionia Assault Officer Corpse" outfit = /datum/outfit/nanotrasenassaultsoldiercorpse hairstyle = "Bald" facial_hairstyle = "Shaved" @@ -285,7 +321,7 @@ id_trim = /datum/id_trim/centcom/corpse/assault /obj/effect/mob_spawn/corpse/human/nanotrasenelitesoldier - name = "\improper Nanotrasen Elite Assault Officer Corpse" + name = "\improper Symphionia Elite Assault Officer Corpse" outfit = /datum/outfit/nanotrasenelitesoldiercorpse hairstyle = "Bald" facial_hairstyle = "Shaved" diff --git a/code/modules/mob_spawn/corpses/nanotrasen_corpses.dm b/code/modules/mob_spawn/corpses/nanotrasen_corpses.dm index 0940815f1fc56b..c13b730c25348a 100644 --- a/code/modules/mob_spawn/corpses/nanotrasen_corpses.dm +++ b/code/modules/mob_spawn/corpses/nanotrasen_corpses.dm @@ -20,7 +20,7 @@ outfit = /datum/outfit/nanotrasencommander /datum/outfit/nanotrasencommander - name = "\improper Nanotrasen Private Security Commander" + name = "\improper Symphionia Private Security Commander" uniform = /obj/item/clothing/under/rank/centcom/commander suit = /obj/item/clothing/suit/armor/bulletproof ears = /obj/item/radio/headset/heads/captain @@ -34,7 +34,7 @@ id_trim = /datum/id_trim/centcom/corpse/commander /obj/effect/mob_spawn/corpse/human/nanotrasensoldier - name = "\improper Nanotrasen Private Security Officer" + name = "\improper Symphionia Private Security Officer" outfit = /datum/outfit/nanotrasensoldier /datum/outfit/nanotrasensoldier diff --git a/code/modules/mob_spawn/corpses/nonhuman_corpses.dm b/code/modules/mob_spawn/corpses/nonhuman_corpses.dm index ce02c6894aee88..3a63a246035e19 100644 --- a/code/modules/mob_spawn/corpses/nonhuman_corpses.dm +++ b/code/modules/mob_spawn/corpses/nonhuman_corpses.dm @@ -22,11 +22,11 @@ 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_type/grey /obj/effect/mob_spawn/corpse/slime/special(mob/living/simple_animal/slime/spawned_slime) . = ..() - spawned_slime.set_colour(slime_species) + spawned_slime.set_slime_type(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/mob_spawn/ghost_roles/fugitive_hunter_roles.dm b/code/modules/mob_spawn/ghost_roles/fugitive_hunter_roles.dm index 2df27efdf847dd..5b9e043349ea06 100644 --- a/code/modules/mob_spawn/ghost_roles/fugitive_hunter_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/fugitive_hunter_roles.dm @@ -76,7 +76,7 @@ prompt_name = "a psyker" you_are_text = "Ahahaha! I am a Psyker Shikari!" flavour_text = "Man, waking up from a gorenap always BLOWS. Finding dealers in this sector of space is always difficult, but \ - we've recieved an offer that might set us up for life! Kidnap some fugitives and get FREE GORE!" + we've received an offer that might set us up for life! Kidnap some fugitives and get FREE GORE!" back_story = HUNTER_PACK_PSYKER outfit = /datum/outfit/psyker diff --git a/code/modules/mob_spawn/ghost_roles/golem_roles.dm b/code/modules/mob_spawn/ghost_roles/golem_roles.dm index 9c2f344bf4bf17..b3475e9207f836 100644 --- a/code/modules/mob_spawn/ghost_roles/golem_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/golem_roles.dm @@ -23,7 +23,14 @@ . = ..() var/area/init_area = get_area(src) if(!mapload && init_area) - notify_ghosts("\A golem shell has been completed in \the [init_area.name].", source = src, action = NOTIFY_PLAY, flashwindow = FALSE, ignore_key = POLL_IGNORE_GOLEM) + notify_ghosts( + "\A golem shell has been completed in \the [init_area.name].", + source = src, + header = "Golem Shell", + click_interact = TRUE, + ignore_key = POLL_IGNORE_GOLEM, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) /obj/effect/mob_spawn/ghost_role/human/golem/name_mob(mob/living/spawned_mob, forced_name) if(forced_name || !iscarbon(spawned_mob)) diff --git a/code/modules/mob_spawn/ghost_roles/mining_roles.dm b/code/modules/mob_spawn/ghost_roles/mining_roles.dm index 4eb5aafc17f59c..f322adc786d17d 100644 --- a/code/modules/mob_spawn/ghost_roles/mining_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/mining_roles.dm @@ -14,8 +14,6 @@ the hostile creatures, and the ash drakes swooping down from the cloudless skies, all you can wish for is the feel of soft grass between your toes and \ the fresh air of Earth. These thoughts are dispelled by yet another recollection of how you got here... " spawner_job_path = /datum/job/hermit - quirks_enabled = TRUE // SKYRAT EDIT ADDITION - ghost role loadouts - random_appearance = FALSE // SKYRAT EDIT ADDITION /obj/effect/mob_spawn/ghost_role/human/hermit/Initialize(mapload) . = ..() @@ -34,14 +32,14 @@ outfit.uniform = /obj/item/clothing/under/rank/prisoner outfit.shoes = /obj/item/clothing/shoes/sneakers/orange if(3) - flavour_text += "you were a doctor on one of Nanotrasen's space stations, but you left behind that damn corporation's tyranny and everything it stood for. From a metaphorical hell \ + flavour_text += "you were a doctor on one of Symphionia's space stations, but you left behind that damn corporation's tyranny and everything it stood for. From a metaphorical hell \ to a literal one, you find yourself nonetheless missing the recycled air and warm floors of what you left behind... but you'd still rather be here than there." outfit.uniform = /obj/item/clothing/under/rank/medical/scrubs/blue outfit.suit = /obj/item/clothing/suit/toggle/labcoat outfit.back = /obj/item/storage/backpack/medic if(4) flavour_text += "you were always joked about by your friends for \"not playing with a full deck\", as they so kindly put it. It seems that they were right when you, on a tour \ - at one of Nanotrasen's state-of-the-art research facilities, were in one of the escape pods alone and saw the red button. It was big and shiny, and it caught your eye. You pressed \ + at one of Symphionia's state-of-the-art research facilities, were in one of the escape pods alone and saw the red button. It was big and shiny, and it caught your eye. You pressed \ it, and after a terrifying and fast ride for days, you landed here. You've had time to wisen up since then, and you think that your old friends wouldn't be laughing now." /obj/effect/mob_spawn/ghost_role/human/hermit/Destroy() @@ -81,8 +79,6 @@ flavour_text = "Ch'yea. You came here, like, on spring break, hopin' to pick up some bangin' hot chicks, y'knaw?" spawner_job_path = /datum/job/beach_bum outfit = /datum/outfit/beachbum - quirks_enabled = TRUE // SKYRAT EDIT ADDITION - ghost role loadouts - random_appearance = FALSE // SKYRAT EDIT ADDITION /obj/effect/mob_spawn/ghost_role/human/beach/lifeguard you_are_text = "You're a spunky lifeguard!" @@ -123,7 +119,6 @@ flavour_text = "Time to mix drinks and change lives. Smoking space drugs makes it easier to understand your patrons' odd dialect." spawner_job_path = /datum/job/space_bartender outfit = /datum/outfit/spacebartender - random_appearance = FALSE // SKYRAT EDIT ADDITION /datum/outfit/spacebartender name = "Space Bartender" @@ -159,8 +154,6 @@ and eventually bring life to this desolate planet while waiting for contact from your creators. \ Estimated time of last contact: Deployment, 5000 millennia ago." spawner_job_path = /datum/job/lifebringer - restricted_species = list(/datum/species/pod) //SKYRAT EDIT ADDITION - random_appearance = FALSE // SKYRAT EDIT ADDITION /obj/effect/mob_spawn/ghost_role/human/seed_vault/Initialize(mapload) . = ..() @@ -228,8 +221,6 @@ spawner_job_path = /datum/job/ash_walker var/datum/team/ashwalkers/team var/obj/structure/ash_walker_eggshell/eggshell - restricted_species = list(/datum/species/lizard/ashwalker) //SKYRAT EDIT ADDITION - random_appearance = FALSE // SKYRAT EDIT ADDITION /obj/effect/mob_spawn/ghost_role/human/ash_walker/Destroy() eggshell = null @@ -243,12 +234,17 @@ return FALSE /obj/effect/mob_spawn/ghost_role/human/ash_walker/special(mob/living/carbon/human/spawned_human) - // SKYRAT EDIT MOVE - // Moved lizard name randomizer before parent call (so character names are preserved) - spawned_human.fully_replace_character_name(null,random_unique_lizard_name(gender)) - quirks_enabled = TRUE //SKYRAT EDIT ADDITION + /* + * 2024/01/03 TODO: + * MOVE THE MODULAR STUFF IN THIS PROC TO + * /modular_nova/master_files/code/modules/mob_spawn/ghost_roles/mining_roles.dm + * There's an ashwalker camp section ready for you to slot it into + */ + // NOVA EDIT BEGIN + spawned_human.fully_replace_character_name(null,random_unique_lizard_name(gender)) // NOVA EDIT MOVE - Moving before parent call prevents char name randomization + quirks_enabled = TRUE // NOVA EDIT ADDITION - ghost role quirks . = ..() - // SKYRAT EDIT END + // NOVA EDIT END to_chat(spawned_human, "Drag the corpses of men and beasts to your nest. It will absorb them to create more of your kind. Invade the strange structure of the outsiders if you must. Do not cause unnecessary destruction, as littering the wastes with ugly wreckage is certain to not gain you favor. Glory to the Necropolis!") spawned_human.mind.add_antag_datum(/datum/antagonist/ashwalker, team) @@ -266,7 +262,14 @@ eggshell.egg = src src.forceMove(eggshell) if(spawner_area) - notify_ghosts("An ash walker egg is ready to hatch in \the [spawner_area.name].", source = src, action = NOTIFY_PLAY, flashwindow = FALSE, ignore_key = POLL_IGNORE_ASHWALKER) + notify_ghosts( + "An ash walker egg is ready to hatch in \the [spawner_area.name].", + source = src, + header = "Ash Walker Egg", + click_interact = TRUE, + ignore_key = POLL_IGNORE_ASHWALKER, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) /datum/outfit/ashwalker name = "Ash Walker" @@ -277,36 +280,33 @@ name = "Ash Walker - Spear" back = /obj/item/spear/bonespear -///Syndicate Listening Post +///Symphionia Listening Post /obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate - name = "Syndicate Bioweapon Scientist" + name = "Symphionia Bioweapon Scientist" icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper_s" prompt_name = "a syndicate science technician" you_are_text = "You are a syndicate science technician, employed in a top secret research facility developing biological weapons." - flavour_text = "Unfortunately, your hated enemy, Nanotrasen, has begun mining in this sector. Continue your research as best you can, and try to keep a low profile." + flavour_text = "Unfortunately, your hated enemy, Symphionia, has begun mining in this sector. Continue your research as best you can, and try to keep a low profile." important_text = "The base is rigged with explosives, DO NOT abandon it or let it fall into enemy hands!" outfit = /datum/outfit/lavaland_syndicate spawner_job_path = /datum/job/lavaland_syndicate - loadout_enabled = TRUE // SKYRAT EDIT ADDITION - ghost role loadouts - quirks_enabled = TRUE // SKYRAT EDIT ADDITION - ghost role loadouts - random_appearance = FALSE // SKYRAT EDIT ADDITION /obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/special(mob/living/new_spawn) . = ..() - new_spawn.grant_language(/datum/language/codespeak, source = LANGUAGE_SPAWNER) // SKYRAT EDIT CHANGE - ORIGINAL: new_spawn.grant_language(/datum/language/codespeak, source = LANGUAGE_MIND) + new_spawn.grant_language(/datum/language/codespeak, source = LANGUAGE_MIND) /obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/comms - name = "Syndicate Comms Agent" + name = "Symphionia Comms Agent" prompt_name = "a syndicate comms agent" you_are_text = "You are a syndicate comms agent, employed in a top secret research facility developing biological weapons." - flavour_text = "Unfortunately, your hated enemy, Nanotrasen, has begun mining in this sector. Monitor enemy activity as best you can, and try to keep a low profile. Use the communication equipment to provide support to any field agents, and sow disinformation to throw Nanotrasen off your trail. Do not let the base fall into enemy hands!" + flavour_text = "Unfortunately, your hated enemy, Symphionia, has begun mining in this sector. Monitor enemy activity as best you can, and try to keep a low profile. Use the communication equipment to provide support to any field agents, and sow disinformation to throw Symphionia off your trail. Do not let the base fall into enemy hands!" important_text = "DO NOT abandon the base." outfit = /datum/outfit/lavaland_syndicate/comms /datum/outfit/lavaland_syndicate - name = "Lavaland Syndicate Agent" + name = "Lavaland Symphionia Agent" id = /obj/item/card/id/advanced/chameleon id_trim = /datum/id_trim/chameleon/operative uniform = /obj/item/clothing/under/syndicate @@ -316,20 +316,15 @@ ears = /obj/item/radio/headset/syndicate/alt shoes = /obj/item/clothing/shoes/combat r_pocket = /obj/item/gun/ballistic/automatic/pistol - r_hand = /obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/sindano/evil // SKYRAT EDIT - Original: /obj/item/gun/ballistic/rifle/sniper_rifle + r_hand = /obj/item/gun/ballistic/rifle/sniper_rifle implants = list(/obj/item/implant/weapons_auth) - id_trim = /datum/id_trim/syndicom/skyrat/interdyne //SKYRAT EDIT -// SKYRAT EDIT REMOVAL BEGIN -- mapping -/* /datum/outfit/lavaland_syndicate/post_equip(mob/living/carbon/human/syndicate, visualsOnly = FALSE) syndicate.faction |= ROLE_SYNDICATE -*/ -// SKYRAT EDIT REMOVAL END /datum/outfit/lavaland_syndicate/comms - name = "Lavaland Syndicate Comms Agent" + name = "Lavaland Symphionia Comms Agent" suit = /obj/item/clothing/suit/armor/vest mask = /obj/item/clothing/mask/chameleon/gps r_hand = /obj/item/melee/energy/sword/saber diff --git a/code/modules/mob_spawn/ghost_roles/space_roles.dm b/code/modules/mob_spawn/ghost_roles/space_roles.dm index 764d20c9a76c14..9290c8c8867ef6 100644 --- a/code/modules/mob_spawn/ghost_roles/space_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/space_roles.dm @@ -7,7 +7,7 @@ icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper" mob_species = /datum/species/human - you_are_text = "You are a security officer working for Nanotrasen, stationed onboard a state of the art research station." + you_are_text = "You are a security officer working for Symphionia, stationed onboard a state of the art research station." flavour_text = "You vaguely recall rushing into a cryogenics pod due to an oncoming radiation storm. \ The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod." @@ -34,7 +34,7 @@ icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper" mob_species = /datum/species/human - you_are_text = "You are an engineer working for Nanotrasen, stationed onboard a state of the art research station." + you_are_text = "You are an engineer working for Symphionia, stationed onboard a state of the art research station." flavour_text = "You vaguely recall rushing into a cryogenics pod due to an oncoming radiation storm. The last thing \ you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod." @@ -68,7 +68,7 @@ icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper" mob_species = /datum/species/human - you_are_text = "You are a scientist working for Nanotrasen, stationed onboard a state of the art research station." + you_are_text = "You are a scientist working for Symphionia, stationed onboard a state of the art research station." flavour_text = "You vaguely recall rushing into a cryogenics pod due to an oncoming radiation storm. \ The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod." @@ -91,7 +91,7 @@ /obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/comms/space you_are_text = "You are a syndicate agent, assigned to a small listening post station situated near your hated enemy's top secret research facility: Space Station 13." - flavour_text = "Monitor enemy activity as best you can, and try to keep a low profile. Use the communication equipment to provide support to any field agents, and sow disinformation to throw Nanotrasen off your trail. Do not let the base fall into enemy hands!" + flavour_text = "Monitor enemy activity as best you can, and try to keep a low profile. Use the communication equipment to provide support to any field agents, and sow disinformation to throw Symphionia off your trail. Do not let the base fall into enemy hands!" important_text = "DO NOT abandon the base." /obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/comms/space/Initialize(mapload) @@ -103,7 +103,7 @@ ///battlecruiser stuff /obj/effect/mob_spawn/ghost_role/human/syndicate/battlecruiser - name = "Syndicate Battlecruiser Ship Operative" + name = "Symphionia Battlecruiser Ship Operative" you_are_text = "You are a crewmember aboard the syndicate flagship: the SBC Starfury." flavour_text = "Your job is to follow your captain's orders, maintain the ship, and keep the power flowing." important_text = "The armory is not a candy store, and your role is not to assault the station directly, leave that work to the assault operatives." @@ -133,7 +133,7 @@ antag_team.players_spawned += (spawned_mob.ckey) /datum/outfit/syndicate_empty/battlecruiser - name = "Syndicate Battlecruiser Ship Operative" + name = "Symphionia Battlecruiser Ship Operative" belt = /obj/item/storage/belt/military/assault l_pocket = /obj/item/gun/ballistic/automatic/pistol/clandestine r_pocket = /obj/item/knife/combat/survival @@ -141,7 +141,7 @@ box = /obj/item/storage/box/survival/syndie /obj/effect/mob_spawn/ghost_role/human/syndicate/battlecruiser/assault - name = "Syndicate Battlecruiser Assault Operative" + name = "Symphionia Battlecruiser Assault Operative" you_are_text = "You are an assault operative aboard the syndicate flagship: the SBC Starfury." flavour_text = "Your job is to follow your captain's orders, keep intruders out of the ship, and assault Space Station 13. There is an armory, multiple assault ships, and beam cannons to attack the station with." important_text = "Work as a team with your fellow operatives and work out a plan of attack. If you are overwhelmed, escape back to your ship!" @@ -150,7 +150,7 @@ uses = 8 /datum/outfit/syndicate_empty/battlecruiser/assault - name = "Syndicate Battlecruiser Assault Operative" + name = "Symphionia Battlecruiser Assault Operative" uniform = /obj/item/clothing/under/syndicate/combat suit = /obj/item/clothing/suit/armor/vest suit_store = /obj/item/gun/ballistic/automatic/pistol/clandestine @@ -161,7 +161,7 @@ r_pocket = /obj/item/modular_computer/pda/nukeops /obj/effect/mob_spawn/ghost_role/human/syndicate/battlecruiser/captain - name = "Syndicate Battlecruiser Captain" + name = "Symphionia Battlecruiser Captain" you_are_text = "You are the captain aboard the syndicate flagship: the SBC Starfury." flavour_text = "Your job is to oversee your crew, defend the ship, and destroy Space Station 13. The ship has an armory, multiple ships, beam cannons, and multiple crewmembers to accomplish this goal." important_text = "As the captain, this whole operation falls on your shoulders. Help your assault operatives detonate a nuke on the station." @@ -172,7 +172,7 @@ uses = 1 /datum/outfit/syndicate_empty/battlecruiser/assault/captain - name = "Syndicate Battlecruiser Captain" + name = "Symphionia Battlecruiser Captain" id = /obj/item/card/id/advanced/black/syndicate_command/captain_id id_trim = /datum/id_trim/battlecruiser/captain suit = /obj/item/clothing/suit/armor/vest/capcarapace/syndicate diff --git a/code/modules/mob_spawn/ghost_roles/spider_roles.dm b/code/modules/mob_spawn/ghost_roles/spider_roles.dm index e6197df2d718b4..f50d31d75cd388 100644 --- a/code/modules/mob_spawn/ghost_roles/spider_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/spider_roles.dm @@ -107,7 +107,17 @@ amount_grown += rand(5, 15) * seconds_per_tick if(amount_grown >= 100 && !ready) ready = TRUE - notify_ghosts("[src] is ready to hatch!", null, enter_link = "(Click to play)", source = src, action = NOTIFY_ORBIT, ignore_key = POLL_IGNORE_SPIDER, flashwindow = flash_window) + var/notify_flags_to_pass = NOTIFY_CATEGORY_NOFLASH + if(flash_window) + notify_flags_to_pass &= GHOST_NOTIFY_FLASH_WINDOW + notify_ghosts( + "[src] is ready to hatch!", + source = src, + header = "Spider Infestation", + click_interact = TRUE, + ignore_key = POLL_IGNORE_SPIDER, + notify_flags = notify_flags_to_pass, + ) STOP_PROCESSING(SSobj, src) /obj/effect/mob_spawn/ghost_role/spider/Topic(href, href_list) diff --git a/code/modules/mob_spawn/ghost_roles/unused_roles.dm b/code/modules/mob_spawn/ghost_roles/unused_roles.dm index 817b21549869f5..cd17a8eb4d0c38 100644 --- a/code/modules/mob_spawn/ghost_roles/unused_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/unused_roles.dm @@ -8,14 +8,14 @@ icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper_s" outfit = /datum/outfit/lavalandprisoner - you_are_text = "You're a prisoner, sentenced to hard work in one of Nanotrasen's labor camps, but it seems as \ + you_are_text = "You're a prisoner, sentenced to hard work in one of Symphionia's labor camps, but it seems as \ though fate has other plans for you." flavour_text = "Good. It seems as though your ship crashed. You remember that you were convicted of " spawner_job_path = /datum/job/escaped_prisoner /obj/effect/mob_spawn/ghost_role/human/prisoner_transport/Initialize(mapload) . = ..() - var/list/crimes = list("murder", "larceny", "embezzlement", "unionization", "dereliction of duty", "kidnapping", "gross incompetence", "grand theft", "collaboration with the Syndicate", \ + var/list/crimes = list("murder", "larceny", "embezzlement", "unionization", "dereliction of duty", "kidnapping", "gross incompetence", "grand theft", "collaboration with the Symphionia", \ "worship of a forbidden deity", "interspecies relations", "mutiny") flavour_text += "[pick(crimes)]. but regardless of that, it seems like your crime doesn't matter now. You don't know where you are, but you know that it's out to kill you, and you're not going \ to lose this opportunity. Find a way to get out of this mess and back to where you rightfully belong - your [pick("house", "apartment", "spaceship", "station")]." @@ -26,7 +26,7 @@ /obj/effect/mob_spawn/ghost_role/human/prisoner_transport/special(mob/living/carbon/human/spawned_human) . = ..() - spawned_human.fully_replace_character_name(null, "NTP #LL-0[rand(111,999)]") //Nanotrasen Prisoner #Lavaland-(numbers) + spawned_human.fully_replace_character_name(null, "NTP #LL-0[rand(111,999)]") //Symphionia Prisoner #Lavaland-(numbers) /datum/outfit/lavalandprisoner name = "Lavaland Prisoner" @@ -86,17 +86,17 @@ return ..() /obj/effect/mob_spawn/ghost_role/human/syndicate - name = "Syndicate Operative" + name = "Symphionia Operative" icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper_s" prompt_name = "a syndicate operative" you_are_text = "You are a syndicate operative." - flavour_text = "You have awoken, without instruction. Death to Nanotrasen! If there are some clues around as to what you're supposed to be doing, you best follow those." + flavour_text = "You have awoken, without instruction. Death to Symphionia! If there are some clues around as to what you're supposed to be doing, you best follow those." outfit = /datum/outfit/syndicate_empty spawner_job_path = /datum/job/space_syndicate /datum/outfit/syndicate_empty - name = "Syndicate Operative Empty" + name = "Symphionia Operative Empty" id = /obj/item/card/id/advanced/chameleon id_trim = /datum/id_trim/chameleon/operative uniform = /obj/item/clothing/under/syndicate @@ -175,8 +175,8 @@ icon_state = "sleeper" faction = list(FACTION_NANOTRASEN_PRIVATE) prompt_name = "a private security officer" - you_are_text = "You are a Nanotrasen Private Security Officer!" - flavour_text = "If higher command has an assignment for you, it's best you follow that. Otherwise, death to The Syndicate." + you_are_text = "You are a Symphionia Private Security Officer!" + flavour_text = "If higher command has an assignment for you, it's best you follow that. Otherwise, death to The Symphionia." outfit = /datum/outfit/nanotrasensoldier /obj/effect/mob_spawn/ghost_role/human/commander @@ -184,8 +184,8 @@ icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper" prompt_name = "a nanotrasen commander" - you_are_text = "You are a Nanotrasen Commander!" - flavour_text = "Upper-crusty of Nanotrasen. You should be given the respect you're owed." + you_are_text = "You are a Symphionia Commander!" + flavour_text = "Upper-crusty of Symphionia. You should be given the respect you're owed." outfit = /datum/outfit/nanotrasencommander //space doctor, a rat with cancer, and bessie from an old removed lavaland ruin. @@ -241,12 +241,12 @@ faction = list(ROLE_SYNDICATE) outfit = /datum/outfit/snowsyndie you_are_text = "You are a syndicate operative recently awoken from cryostasis in an underground outpost." - flavour_text = "Monitor Nanotrasen communications and record information. All intruders should be disposed of \ + flavour_text = "Monitor Symphionia communications and record information. All intruders should be disposed of \ swiftly to assure no gathered information is stolen or lost. Try not to wander too far from the outpost as the \ caves can be a deadly place even for a trained operative such as yourself." /datum/outfit/snowsyndie - name = "Syndicate Snow Operative" + name = "Symphionia Snow Operative" id = /obj/item/card/id/advanced/chameleon id_trim = /datum/id_trim/chameleon/operative uniform = /obj/item/clothing/under/syndicate/coldres @@ -259,30 +259,30 @@ //Forgotten syndicate ship /obj/effect/mob_spawn/ghost_role/human/syndicatespace - name = "Syndicate Ship Crew Member" + name = "Symphionia Ship Crew Member" show_flavor = FALSE icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper_s" prompt_name = "cybersun crew" you_are_text = "You are a syndicate operative on old ship, stuck in hostile space." - flavour_text = "Your ship docks after a long time somewhere in hostile space, reporting a malfunction. You are stuck here, with Nanotrasen station nearby. Fix the ship, find a way to power it and follow your captain's orders." + flavour_text = "Your ship docks after a long time somewhere in hostile space, reporting a malfunction. You are stuck here, with Symphionia station nearby. Fix the ship, find a way to power it and follow your captain's orders." important_text = "Obey orders given by your captain. DO NOT let the ship fall into enemy hands." outfit = /datum/outfit/syndicatespace/syndicrew spawner_job_path = /datum/job/syndicate_cybersun /obj/effect/mob_spawn/ghost_role/human/syndicatespace/special(mob/living/new_spawn) . = ..() - new_spawn.grant_language(/datum/language/codespeak, source = LANGUAGE_SPAWNER) // SKYRAT EDIT CHANGE - ORIGINAL: new_spawn.grant_language(/datum/language/codespeak, source = LANGUAGE_MIND) + new_spawn.grant_language(/datum/language/codespeak, source = LANGUAGE_SPAWNER) // NOVA EDIT CHANGE - ORIGINAL: new_spawn.grant_language(/datum/language/codespeak, source = LANGUAGE_MIND) var/datum/job/spawn_job = SSjob.GetJobType(spawner_job_path) var/policy = get_policy(spawn_job.policy_index) if(policy) to_chat(new_spawn, span_bold("[policy]")) /obj/effect/mob_spawn/ghost_role/human/syndicatespace/captain - name = "Syndicate Ship Captain" + name = "Symphionia Ship Captain" prompt_name = "a cybersun captain" you_are_text = "You are the captain of an old ship, stuck in hostile space." - flavour_text = "Your ship docks after a long time somewhere in hostile space, reporting a malfunction. You are stuck here, with Nanotrasen station nearby. Command your crew and turn your ship into the most protected fortress." + flavour_text = "Your ship docks after a long time somewhere in hostile space, reporting a malfunction. You are stuck here, with Symphionia station nearby. Command your crew and turn your ship into the most protected fortress." important_text = "Protect the ship and secret documents in your backpack with your own life." outfit = /datum/outfit/syndicatespace/syndicaptain spawner_job_path = /datum/job/syndicate_cybersun_captain @@ -292,7 +292,7 @@ return ..() /datum/outfit/syndicatespace - name = "Syndicate Ship Base" + name = "Symphionia Ship Base" id = /obj/item/card/id/advanced/black/syndicate_command/crew_id uniform = /obj/item/clothing/under/syndicate/combat back = /obj/item/storage/backpack @@ -307,14 +307,14 @@ syndie_scum.faction |= ROLE_SYNDICATE /datum/outfit/syndicatespace/syndicrew - name = "Syndicate Ship Crew Member" + name = "Symphionia Ship Crew Member" glasses = /obj/item/clothing/glasses/night mask = /obj/item/clothing/mask/gas/syndicate l_pocket = /obj/item/gun/ballistic/automatic/pistol r_pocket = /obj/item/knife/combat/survival /datum/outfit/syndicatespace/syndicaptain - name = "Syndicate Ship Captain" + name = "Symphionia Ship Captain" id = /obj/item/card/id/advanced/black/syndicate_command/captain_id uniform = /obj/item/clothing/under/syndicate/combat suit = /obj/item/clothing/suit/armor/vest/capcarapace/syndicate diff --git a/code/modules/mob_spawn/ghost_roles/venus_human_trap.dm b/code/modules/mob_spawn/ghost_roles/venus_human_trap.dm index 254cfcfbdab2ed..af5203cc39615c 100644 --- a/code/modules/mob_spawn/ghost_roles/venus_human_trap.dm +++ b/code/modules/mob_spawn/ghost_roles/venus_human_trap.dm @@ -33,7 +33,13 @@ /// Called when the attached flower bud has borne fruit (ie. is ready) /obj/effect/mob_spawn/ghost_role/venus_human_trap/proc/bear_fruit() ready = TRUE - notify_ghosts("[src] has borne fruit!", source = src, action = NOTIFY_PLAY, ignore_key = POLL_IGNORE_VENUSHUMANTRAP) + notify_ghosts( + "[src] has borne fruit!", + source = src, + header = "Venus Human Trap", + click_interact = TRUE, + ignore_key = POLL_IGNORE_VENUSHUMANTRAP, + ) /obj/effect/mob_spawn/ghost_role/venus_human_trap/allow_spawn(mob/user, silent = FALSE) . = ..() diff --git a/code/modules/mob_spawn/mob_spawn.dm b/code/modules/mob_spawn/mob_spawn.dm index 3f5dd81c1842a7..e51fa864195557 100644 --- a/code/modules/mob_spawn/mob_spawn.dm +++ b/code/modules/mob_spawn/mob_spawn.dm @@ -59,7 +59,7 @@ spawned_human.underwear = "Nude" spawned_human.undershirt = "Nude" spawned_human.socks = "Nude" - spawned_human.bra = "Nude" //SKYRAT EDIT ADDITION + spawned_human.bra = "Nude" //NOVA EDIT ADDITION if(hairstyle) spawned_human.hairstyle = hairstyle else @@ -141,7 +141,7 @@ var/spawner_job_path = /datum/job/ghost_role - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION /// Do we use a random appearance for this ghost role? var/random_appearance = TRUE /// Can we use our loadout for this role? @@ -150,7 +150,7 @@ var/quirks_enabled = FALSE /// Are we limited to a certain species type? LISTED TYPE var/restricted_species - // SKYRAT EDIT END + // NOVA EDIT END /obj/effect/mob_spawn/ghost_role/Initialize(mapload) . = ..() @@ -176,13 +176,13 @@ var/user_ckey = user.ckey // Just in case shenanigans happen, we always want to remove it from the list. LAZYADD(ckeys_trying_to_spawn, user_ckey) - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION if(restricted_species && !(user.client?.prefs?.read_preference(/datum/preference/choiced/species) in restricted_species)) var/incorrect_species = tgui_alert(user, "Current species preference incompatible, proceed with random appearance?", "Incompatible Species", list("Yes", "No")) if(incorrect_species != "Yes") LAZYREMOVE(ckeys_trying_to_spawn, user_ckey) return - // SKYRAT EDIT END + // NOVA EDIT END if(prompt_ghost) var/prompt = "Become [prompt_name]?" @@ -206,12 +206,12 @@ to_chat(user, span_warning("You are banned from this role!")) LAZYREMOVE(ckeys_trying_to_spawn, user_ckey) return - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION if(is_banned_from(user.ckey, BAN_GHOST_ROLE_SPAWNER)) // Ghost role bans to_chat(user, span_warning("Error, you are banned from playing ghost roles!")) LAZYREMOVE(ckeys_trying_to_spawn, user_ckey) return - // SKYRAT EDIT END + // NOVA EDIT END if(!allow_spawn(user, silent = FALSE)) LAZYREMOVE(ckeys_trying_to_spawn, user_ckey) return diff --git a/code/modules/mod/mod_actions.dm b/code/modules/mod/mod_actions.dm index 111ea425b6a6e5..2a2ed02c022091 100644 --- a/code/modules/mod/mod_actions.dm +++ b/code/modules/mod/mod_actions.dm @@ -117,26 +117,43 @@ /datum/action/item_action/mod/panel/ai ai_action = TRUE -/datum/action/item_action/mod/pinned_module +/datum/action/item_action/mod/pinnable + /// A reference to the mob we are pinned to. + var/mob/pinner + +/datum/action/item_action/mod/pinnable/New(Target, mob/user) + . = ..() + var/obj/item/mod/control/mod = Target + if(user == mod.ai_assistant) + ai_action = TRUE + pinner = user + RegisterSignal(user, COMSIG_QDELETING, PROC_REF(pinner_deleted)) + +/datum/action/item_action/mod/pinnable/Grant(mob/user) + if(pinner != user) + return + return ..() + +/// If the guy whose UI we are pinned to got deleted +/datum/action/item_action/mod/pinnable/proc/pinner_deleted() + SIGNAL_HANDLER + pinner = null + qdel(src) + +/datum/action/item_action/mod/pinnable/module desc = "Activate the module." /// Overrides the icon applications. var/override = FALSE /// Module we are linked to. var/obj/item/mod/module/module - /// A reference to the mob we are pinned to. - var/mob/pinner /// Timer until we remove our cooldown overlay var/cooldown_timer -/datum/action/item_action/mod/pinned_module/New(Target, obj/item/mod/module/linked_module, mob/user) - var/obj/item/mod/control/mod = Target - if(user == mod.ai_assistant) - ai_action = TRUE +/datum/action/item_action/mod/pinnable/module/New(Target, mob/user, obj/item/mod/module/linked_module) button_icon = linked_module.icon button_icon_state = linked_module.icon_state . = ..() module = linked_module - pinner = user module.pinned_to[REF(user)] = src if(linked_module.allow_flags & MODULE_ALLOW_INCAPACITATED) // clears check hands and check conscious @@ -149,9 +166,8 @@ COMSIG_MODULE_USED, ), PROC_REF(module_interacted_with)) RegisterSignal(linked_module, COMSIG_MODULE_COOLDOWN_STARTED, PROC_REF(cooldown_started)) - RegisterSignal(user, COMSIG_QDELETING, PROC_REF(pinner_deleted)) -/datum/action/item_action/mod/pinned_module/Destroy() +/datum/action/item_action/mod/pinnable/module/Destroy() deltimer(cooldown_timer) UnregisterSignal(module, list( COMSIG_MODULE_ACTIVATED, @@ -164,23 +180,13 @@ pinner = null return ..() -/datum/action/item_action/mod/pinned_module/Grant(mob/user) - if(pinner != user) - return - return ..() - -/datum/action/item_action/mod/pinned_module/Trigger(trigger_flags) +/datum/action/item_action/mod/pinnable/module/Trigger(trigger_flags) . = ..() if(!.) return module.on_select() -/// If the guy whose UI we are pinned to got deleted -/datum/action/item_action/mod/pinned_module/proc/pinner_deleted() - pinner = null - qdel(src) - -/datum/action/item_action/mod/pinned_module/apply_button_overlay(atom/movable/screen/movable/action_button/current_button, force) +/datum/action/item_action/mod/pinnable/module/apply_button_overlay(atom/movable/screen/movable/action_button/current_button, force) current_button.cut_overlays() if(override) return ..() @@ -194,12 +200,12 @@ current_button.add_overlay(image(icon = 'icons/hud/radial.dmi', icon_state = "module_cooldown")) return ..() -/datum/action/item_action/mod/pinned_module/proc/module_interacted_with(datum/source) +/datum/action/item_action/mod/pinnable/module/proc/module_interacted_with(datum/source) SIGNAL_HANDLER build_all_button_icons(UPDATE_BUTTON_OVERLAY|UPDATE_BUTTON_STATUS) -/datum/action/item_action/mod/pinned_module/proc/cooldown_started(datum/source, cooldown_time) +/datum/action/item_action/mod/pinnable/module/proc/cooldown_started(datum/source, cooldown_time) SIGNAL_HANDLER deltimer(cooldown_timer) diff --git a/code/modules/mod/mod_activation.dm b/code/modules/mod/mod_activation.dm index 3fca395e4b7b66..b230a3a38d79f9 100644 --- a/code/modules/mod/mod_activation.dm +++ b/code/modules/mod/mod_activation.dm @@ -19,7 +19,7 @@ var/obj/item/part = locate(part_reference) in mod_parts if(!istype(part) || user.incapacitated()) return - if(activating) // SKYRAT EDIT - RETRACTABLE EVERYTHING + if(activating) // NOVA EDIT - RETRACTABLE EVERYTHING balloon_alert(user, "deactivate the suit first!") playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return @@ -43,7 +43,7 @@ /// Quickly deploys all parts (or retracts if all are on the wearer) /obj/item/mod/control/proc/quick_deploy(mob/user) - if(activating) // SKYRAT EDIT - RETRACTABLE EVERYTHING + if(activating) // NOVA EDIT - RETRACTABLE EVERYTHING balloon_alert(user, "deactivate the suit first!") playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return FALSE @@ -115,11 +115,11 @@ if(!wearer.equip_to_slot_if_possible(overslot, overslot.slot_flags, qdel_on_fail = FALSE, disable_warning = TRUE)) wearer.dropItemToGround(overslot, force = TRUE, silent = TRUE) overslotting_parts[part] = null - // SKYRAT EDIT START - Avoiding exploits with the modules staying active when any of the parts are retracted. + // NOVA EDIT START - Avoiding exploits with the modules staying active when any of the parts are retracted. for(var/obj/item/mod/module/module as anything in modules) if(module.active) module.on_deactivation(display_message = !!user) - // SKYRAT EDIT END + // NOVA EDIT END if(!user) return wearer.visible_message(span_notice("[wearer]'s [part.name] retract[part.p_s()] back into [src] with a mechanical hiss."), diff --git a/code/modules/mod/mod_ai.dm b/code/modules/mod/mod_ai.dm index fb83518c5626e1..2b23a4efb20dbd 100644 --- a/code/modules/mod/mod_ai.dm +++ b/code/modules/mod/mod_ai.dm @@ -2,10 +2,10 @@ . = ..() if(!.) return - // SKYRAT EDIT ADDITION START - No AIs in MODsuits + // NOVA EDIT ADDITION START - No AIs in MODsuits if(!allow_ai) return - // SKYRAT EDIT END + // NOVA EDIT END if(!open) //mod must be open balloon_alert(user, "suit must be open to transfer!") return @@ -92,10 +92,10 @@ pai_assistant.can_holo = FALSE if (pai_assistant.holoform) pai_assistant.fold_in() - // SKYRAT EDIT ADDITION START - pAIs in MODsuits + // NOVA EDIT ADDITION START - pAIs in MODsuits if(can_pai_move_suit) pai_assistant.remote_control = src - // SKYRAT EDIT END + // NOVA EDIT END SStgui.close_uis(card) on_gained_assistant(card.pai) return TRUE @@ -144,10 +144,10 @@ /obj/item/mod/control/relaymove(mob/user, direction) if((!active && wearer) || get_charge() < CHARGE_PER_STEP || user != ai_assistant || !COOLDOWN_FINISHED(src, cooldown_mod_move) || (wearer?.pulledby?.grab_state > GRAB_PASSIVE)) return FALSE - // SKYRAT EDIT START - pAIs in MODsuits with a bit more functionalities + // NOVA EDIT START - pAIs in MODsuits with a bit more functionalities if(active && !can_pai_move_suit && ispAI(ai_assistant)) return FALSE - // SKYRAT EDIT END + // NOVA EDIT END var/timemodifier = MOVE_DELAY * (ISDIAGONALDIR(direction) ? sqrt(2) : 1) * (wearer ? WEARER_DELAY : LONE_DELAY) if(wearer && !wearer.Process_Spacemove(direction)) return FALSE @@ -218,7 +218,7 @@ icon_state = "minicard" ai.forceMove(card) card.AI = ai - ai.notify_ghost_cloning("You have been recovered from the wreckage!", source = card) + ai.notify_revival("You have been recovered from the wreckage!", source = card) balloon_alert(user, "ai transferred to card") stored_ai = null #undef AI_FALL_TIME diff --git a/code/modules/mod/mod_control.dm b/code/modules/mod/mod_control.dm index 573cee3531ae81..b9f5cbd3e16012 100644 --- a/code/modules/mod/mod_control.dm +++ b/code/modules/mod/mod_control.dm @@ -18,7 +18,7 @@ actions_types = list( /datum/action/item_action/mod/deploy, /datum/action/item_action/mod/activate, - /datum/action/item_action/mod/sprite_accessories, // SKYRAT EDIT - Hide mutant parts action + /datum/action/item_action/mod/sprite_accessories, // NOVA EDIT - Hide mutant parts action /datum/action/item_action/mod/panel, /datum/action/item_action/mod/module, /datum/action/item_action/mod/deploy/ai, @@ -222,7 +222,7 @@ else . += span_notice("You could use a MOD core on it to install one.") if(isnull(ai_assistant)) - . += span_notice("You could install a pAI with a pAI card.") // SKYRAT EDIT CHANGE - ORIGINAL: . += span_notice("You could install an AI or pAI using their storage card.") + . += span_notice("You could install a pAI with a pAI card.") // NOVA EDIT CHANGE - ORIGINAL: . += span_notice("You could install an AI or pAI using their storage card.") else if(isAI(ai_assistant)) . += span_notice("You could remove [ai_assistant] with an intellicard.") . += span_notice("You could copy/set link frequency with a multitool.") @@ -271,9 +271,9 @@ // Grant pinned actions to pin owners, gives AI pinned actions to the AI and not the wearer /obj/item/mod/control/grant_action_to_bearer(datum/action/action) - if (!istype(action, /datum/action/item_action/mod/pinned_module)) + if (!istype(action, /datum/action/item_action/mod/pinnable)) return ..() - var/datum/action/item_action/mod/pinned_module/pinned = action + var/datum/action/item_action/mod/pinnable/pinned = action give_item_action(action, pinned.pinner, slot_flags) /obj/item/mod/control/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) @@ -300,7 +300,7 @@ playsound(src, 'sound/machines/scanbuzz.ogg', 25, FALSE, SILENCED_SOUND_EXTRARANGE) return - // SKYRAT EDIT ADDITION START - Can't remove your MODsuit from your back when it's still active (as it can cause runtimes and even the MODsuit control unit to delete itself) + // NOVA EDIT ADDITION START - Can't remove your MODsuit from your back when it's still active (as it can cause runtimes and even the MODsuit control unit to delete itself) if(active) if(!wearer.incapacitated()) balloon_alert(wearer, "deactivate first!") @@ -700,14 +700,14 @@ part.visor_flags_cover = category[SEALED_COVER] || NONE part.alternate_worn_layer = category[UNSEALED_LAYER] mod_parts[part] = part.alternate_worn_layer - /* SKYRAT EDIT START - All MODsuit parts can be worn as overslots. + /* NOVA EDIT START - All MODsuit parts can be worn as overslots. if(!category[CAN_OVERSLOT]) if(overslotting_parts[part]) var/obj/item/overslot = overslotting_parts[part] overslot.forceMove(drop_location()) overslotting_parts -= part continue - */ // SKYRAT EDIT END + */ // NOVA EDIT END overslotting_parts |= part wearer?.regenerate_icons() @@ -774,3 +774,11 @@ update_speed() qdel(speed_potion) return SPEED_POTION_STOP + +/// Disables the mod link frequency attached to this unit. +/obj/item/mod/control/proc/disable_modlink() + if(isnull(mod_link)) + return + + mod_link.end_call() + mod_link.frequency = null diff --git a/code/modules/mod/mod_core.dm b/code/modules/mod/mod_core.dm index d5c43497982a98..1ecb17d3f5764d 100644 --- a/code/modules/mod/mod_core.dm +++ b/code/modules/mod/mod_core.dm @@ -285,7 +285,7 @@ /obj/item/mod/core/plasma name = "MOD plasma core" icon_state = "mod-core-plasma" - desc = "Nanotrasen's attempt at capitalizing on their plasma research. These plasma cores are refueled \ + desc = "Symphionia's attempt at capitalizing on their plasma research. These plasma cores are refueled \ through plasma fuel, allowing for easy continued use by their mining squads." /// How much charge we can store. var/maxcharge = 10000 diff --git a/code/modules/mod/mod_link.dm b/code/modules/mod/mod_link.dm index 12ce7fa48271e9..943ad16eb770c5 100644 --- a/code/modules/mod/mod_link.dm +++ b/code/modules/mod/mod_link.dm @@ -47,23 +47,19 @@ if(newdir & NORTH) other_visual.pixel_y = 13 other_visual.layer = BELOW_MOB_LAYER - SET_PLANE_IMPLICIT(other_visual, GAME_PLANE_FOV_HIDDEN) if(newdir & SOUTH) other_visual.pixel_y = -24 other_visual.layer = ABOVE_ALL_MOB_LAYER - SET_PLANE_IMPLICIT(other_visual, GAME_PLANE_UPPER_FOV_HIDDEN) new_transform.Scale(-1, 1) new_transform.Translate(-1, 0) if(newdir & EAST) other_visual.pixel_x = 14 other_visual.layer = BELOW_MOB_LAYER - SET_PLANE_IMPLICIT(other_visual, GAME_PLANE_FOV_HIDDEN) new_transform.Shear(0.5, 0) new_transform.Scale(0.65, 1) if(newdir & WEST) other_visual.pixel_x = -14 other_visual.layer = BELOW_MOB_LAYER - SET_PLANE_IMPLICIT(other_visual, GAME_PLANE_FOV_HIDDEN) new_transform.Shear(-0.5, 0) new_transform.Scale(0.65, 1) other_visual.transform = new_transform @@ -173,10 +169,10 @@ /obj/item/clothing/neck/link_scryer/examine(mob/user) . = ..() - // SKYRAT EDIT NIFSOFT SCRYERS - START + // NOVA EDIT NIFSOFT SCRYERS - START if(custom_examine_controls) return - // SKYRAT EDIT NIFSOFT SCRYERS - END + // NOVA EDIT NIFSOFT SCRYERS - END if(cell) . += span_notice("The battery charge reads [cell.percent()]%. Right-click with an empty hand to remove it.") else diff --git a/code/modules/mod/mod_paint.dm b/code/modules/mod/mod_paint.dm index ee162b2d9819ab..320276cd00d446 100644 --- a/code/modules/mod/mod_paint.dm +++ b/code/modules/mod/mod_paint.dm @@ -16,7 +16,7 @@ /obj/item/mod/paint/Initialize(mapload) . = ..() - current_color = color_matrix_identity() + current_color = COLOR_MATRIX_IDENTITY /obj/item/mod/paint/examine(mob/user) . = ..() @@ -66,7 +66,7 @@ . = ..() editing_mod = null QDEL_NULL(proxy_view) - current_color = color_matrix_identity() + current_color = COLOR_MATRIX_IDENTITY /obj/item/mod/paint/ui_status(mob/user) if(check_menu(editing_mod, user)) @@ -144,8 +144,9 @@ balloon_alert(user, "no alternate skins!") return var/list/skins = list() - for(var/mod_skin in mod.theme.skins) - skins[mod_skin] = image(icon = mod.icon, icon_state = "[mod_skin]-control") + for(var/mod_skin_name in mod.theme.skins) + var/list/mod_skin = mod.theme.skins[mod_skin_name] + skins[mod_skin_name] = image(icon = mod_skin[MOD_ICON_OVERRIDE] || mod.icon, icon_state = "[mod_skin_name]-control") var/pick = show_radial_menu(user, mod, skins, custom_check = CALLBACK(src, PROC_REF(check_menu), mod, user), require_near = TRUE) if(!pick) balloon_alert(user, "no skin picked!") diff --git a/code/modules/mod/mod_theme.dm b/code/modules/mod/mod_theme.dm index 9adaaf4f14680e..1b63d0e69c6dce 100644 --- a/code/modules/mod/mod_theme.dm +++ b/code/modules/mod/mod_theme.dm @@ -296,8 +296,8 @@ /datum/mod_theme/mining name = "mining" - desc = "A Nanotrasen mining suit for on-site operations, fit with accreting ash armor and a sphere form." - extended_desc = "A high-powered Nanotrasen-designed suit, based off the work of Nakamura Engineering. \ + desc = "A Symphionia mining suit for on-site operations, fit with accreting ash armor and a sphere form." + extended_desc = "A high-powered Symphionia-designed suit, based off the work of Nakamura Engineering. \ While initial designs were built for the rigors of asteroid mining, given blast resistance through inbuilt ceramics, \ mining teams have since heavily tweaked the suit themselves with assistance from devices crafted by \ destructive analysis of unknown technologies discovered on the Indecipheres mining sites, patterned off \ @@ -311,7 +311,7 @@ Lastly, the suit is capable of compressing and shrinking the mass of the wearer, as well as \ rearranging its own constitution, to allow them to fit upright in a sphere form that can \ roll around at half their original size; leaving high-powered mining ordinance in its wake. \ - However, all of this has proven to be straining on all Nanotrasen-approved cells, \ + However, all of this has proven to be straining on all Symphionia-approved cells, \ so much so that it comes default fueled by equally-enigmatic plasma fuel rather than a simple recharge. \ Additionally, the systems have been put to near their maximum load, allowing for far less customization than others." default_skin = "mining" @@ -702,8 +702,6 @@ slowdown_inactive = 1 slowdown_active = 0.5 allowed_suit_storage = list( - /obj/item/ammo_box, - /obj/item/ammo_casing, /obj/item/reagent_containers/spray/pepper, /obj/item/restraints/handcuffs, /obj/item/assembly/flash, @@ -765,8 +763,6 @@ slowdown_inactive = 0.75 slowdown_active = 0.25 allowed_suit_storage = list( - /obj/item/ammo_box, - /obj/item/ammo_casing, /obj/item/reagent_containers/spray/pepper, /obj/item/restraints/handcuffs, /obj/item/assembly/flash, @@ -812,9 +808,9 @@ /datum/mod_theme/magnate name = "magnate" - desc = "A fancy, very protective suit for Nanotrasen's captains. Shock, fire and acid-proof while also having a large capacity and high speed." + desc = "A fancy, very protective suit for Symphionia's captains. Shock, fire and acid-proof while also having a large capacity and high speed." extended_desc = "They say it costs four hundred thousand credits to run this MODsuit... for twelve seconds. \ - The Magnate suit is designed for protection, comfort, and luxury for Nanotrasen Captains. \ + The Magnate suit is designed for protection, comfort, and luxury for Symphionia Captains. \ The onboard air filters have been preprogrammed with an additional five hundred different fragrances that can \ be pumped into the helmet, all of highly-endangered flowers. A bespoke Tralex mechanical clock has been placed \ in the wrist, and the Magnate package comes with carbon-fibre cufflinks to wear underneath. \ @@ -832,8 +828,6 @@ slowdown_inactive = 0.75 slowdown_active = 0.25 allowed_suit_storage = list( - /obj/item/ammo_box, - /obj/item/ammo_casing, /obj/item/restraints/handcuffs, /obj/item/assembly/flash, /obj/item/melee/baton, @@ -958,8 +952,6 @@ resistance_flags = FIRE_PROOF inbuilt_modules = list(/obj/item/mod/module/armor_booster) allowed_suit_storage = list( - /obj/item/ammo_box, - /obj/item/ammo_casing, /obj/item/restraints/handcuffs, /obj/item/assembly/flash, /obj/item/melee/baton, @@ -1034,7 +1026,7 @@ name = "elite" desc = "An elite suit upgraded by Cybersun Industries, offering upgraded armor values." extended_desc = "An evolution of the syndicate suit, featuring a bulkier build and a matte black color scheme, \ - this suit is only produced for high ranking Syndicate officers and elite strike teams. \ + this suit is only produced for high ranking Symphionia officers and elite strike teams. \ It comes built with a secondary layering of ceramic and Kevlar into the plating providing it with \ exceptionally better protection along with fire and acid proofing. A small tag hangs off of it reading; \ 'Property of the Gorlex Marauders, with assistance from Cybersun Industries. \ @@ -1051,8 +1043,6 @@ ui_theme = "syndicate" inbuilt_modules = list(/obj/item/mod/module/armor_booster) allowed_suit_storage = list( - /obj/item/ammo_box, - /obj/item/ammo_casing, /obj/item/restraints/handcuffs, /obj/item/assembly/flash, /obj/item/melee/baton, @@ -1107,7 +1097,7 @@ visual aesthetics and prop design than they do functional operative camouflage. But the true reason goes deeper. \ The visual appearance of the suit exemplifies brazen displays of power, not true stealth. However, the suit's inbuilt stealth mechanisms\ prevent anyone from fully recognizing the occupant, only the suit, creating perfect anonymity. This visual transformation is \ - backed by inbuilt psi-emitters, heightening stressors common amongst Nanotrasen staff, and clouding identifiable information. \ + backed by inbuilt psi-emitters, heightening stressors common amongst Symphionia staff, and clouding identifiable information. \ Scrubbed statistical data presented a single correlation within documented psychological profiles. The fear of the Unknown." default_skin = "infiltrator" armor_type = /datum/armor/mod_theme_infiltrator @@ -1120,8 +1110,6 @@ slot_flags = ITEM_SLOT_BELT inbuilt_modules = list(/obj/item/mod/module/infiltrator, /obj/item/mod/module/storage/belt, /obj/item/mod/module/demoralizer) allowed_suit_storage = list( - /obj/item/ammo_box, - /obj/item/ammo_casing, /obj/item/restraints/handcuffs, /obj/item/assembly/flash, /obj/item/melee/baton, @@ -1169,11 +1157,11 @@ desc = "A corpse-snatching and rapid-retrieval modsuit, resulting from a lucrative tech exchange between Interdyne Pharmaceutics and Cybersun Industries." extended_desc = "While Waffle Co. and Azik Interstellar provide the means, Donk Co., Tiger Cooperative, Animal Rights Consortium and \ Gorlex Marauders willing or easily bribable brawn, S.E.L.F. and MI13 information, the clear syndicate tech providers would be Interdyne and Cybersun, \ - their combined knowledge in technologies rivaled by only the most enigmatic of aliens, and certainly not by any Nanotrasen scientist. \ + their combined knowledge in technologies rivaled by only the most enigmatic of aliens, and certainly not by any Symphionia scientist. \ This model is one of the rare fruits created by their joint operations, mashing scrapped designs with super soldier enhancements. \ Already light, when powered on, this MODsuit injects the wearer seemlessly with muscle-enhancing supplements, while adding piston strength \ to their legs. The combination of these mechanisms is very energy draining - but results in next to no speed reduction for the wearer.\ - Over the years, many a rich person, including Nanotrasen officials with premium subscriptions, had their life or genes rescued thanks to the \ + Over the years, many a rich person, including Symphionia officials with premium subscriptions, had their life or genes rescued thanks to the \ unrivaled speed of this suit. Equally as many, however, mysteriously dissapeared in the flash of these white suits after they forgot \ to pay off said subscriptions in due time or publicly communicated unfavourable opinions on Interdyne's gene-modding tech and ethics. " default_skin = "interdyne" @@ -1185,8 +1173,6 @@ slowdown_active = -0.5 inbuilt_modules = list(/obj/item/mod/module/quick_carry/advanced, /obj/item/mod/module/organ_thrower) allowed_suit_storage = list( - /obj/item/ammo_box, - /obj/item/ammo_casing, /obj/item/assembly/flash, /obj/item/healthanalyzer, /obj/item/melee/baton, @@ -1329,8 +1315,6 @@ inbuilt_modules = list(/obj/item/mod/module/welding/camera_vision, /obj/item/mod/module/hacker, /obj/item/mod/module/weapon_recall, /obj/item/mod/module/adrenaline_boost, /obj/item/mod/module/energy_net) allowed_suit_storage = list( /obj/item/gun, - /obj/item/ammo_box, - /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, ) @@ -1439,8 +1423,8 @@ /datum/mod_theme/responsory name = "responsory" - desc = "A high-speed rescue suit by Nanotrasen, intended for its emergency response teams." - extended_desc = "A streamlined suit of Nanotrasen design, these sleek black suits are only worn by \ + desc = "A high-speed rescue suit by Symphionia, intended for its emergency response teams." + extended_desc = "A streamlined suit of Symphionia design, these sleek black suits are only worn by \ elite emergency response personnel to help save the day. While the slim and nimble design of the suit \ cuts the ceramics and ablatives in it down, dropping the protection, \ it keeps the wearer safe from the harsh void of space while sacrificing no speed whatsoever. \ @@ -1454,8 +1438,6 @@ slowdown_inactive = 0.5 slowdown_active = 0 allowed_suit_storage = list( - /obj/item/ammo_box, - /obj/item/ammo_casing, /obj/item/restraints/handcuffs, /obj/item/assembly/flash, /obj/item/melee/baton, @@ -1525,10 +1507,10 @@ /datum/mod_theme/apocryphal name = "apocryphal" - desc = "A high-tech, only technically legal, armored suit created by a collaboration effort between Nanotrasen and Apadyne Technologies." + desc = "A high-tech, only technically legal, armored suit created by a collaboration effort between Symphionia and Apadyne Technologies." extended_desc = "A bulky and only legal by technicality suit, this ominous black and red MODsuit is only worn by \ - Nanotrasen Black Ops teams. If you can see this suit, you fucked up. A collaborative joint effort between \ - Apadyne and Nanotrasen the construction and modules gives the user robust protection against \ + Symphionia Black Ops teams. If you can see this suit, you fucked up. A collaborative joint effort between \ + Apadyne and Symphionia the construction and modules gives the user robust protection against \ anything that can be thrown at it, along with acute combat awareness tools for it's wearer. \ Whether the wearer uses it or not is up to them. \ There seems to be a little inscription on the wrist that reads; \'squiddie', d'aww." @@ -1540,8 +1522,6 @@ siemens_coefficient = 0 complexity_max = DEFAULT_MAX_COMPLEXITY + 10 allowed_suit_storage = list( - /obj/item/ammo_box, - /obj/item/ammo_casing, /obj/item/restraints/handcuffs, /obj/item/assembly/flash, /obj/item/melee/baton, @@ -1589,11 +1569,11 @@ /datum/mod_theme/corporate name = "corporate" - desc = "A fancy, high-tech suit for Nanotrasen's high ranking officers." + desc = "A fancy, high-tech suit for Symphionia's high ranking officers." extended_desc = "An even more costly version of the Magnate model, the corporate suit is a thermally insulated, \ anti-corrosion coated suit for high-ranking CentCom Officers, deploying pristine protective armor and \ advanced actuators, feeling practically weightless when turned on. Scraping the paint of this suit is \ - counted as a war-crime and reason for immediate execution in over fifty Nanotrasen space stations. \ + counted as a war-crime and reason for immediate execution in over fifty Symphionia space stations. \ The resemblance to a Gorlex Marauder helmet is purely coincidental." default_skin = "corporate" armor_type = /datum/armor/mod_theme_corporate @@ -1604,8 +1584,6 @@ slowdown_inactive = 0.5 slowdown_active = 0 allowed_suit_storage = list( - /obj/item/ammo_box, - /obj/item/ammo_casing, /obj/item/restraints/handcuffs, /obj/item/assembly/flash, /obj/item/melee/baton, diff --git a/code/modules/mod/mod_ui.dm b/code/modules/mod/mod_ui.dm index eaf4b75d7ee700..575518affbb567 100644 --- a/code/modules/mod/mod_ui.dm +++ b/code/modules/mod/mod_ui.dm @@ -53,7 +53,7 @@ "cooldown" = round(COOLDOWN_TIMELEFT(module, cooldown_timer), 1 SECONDS), "id" = module.tgui_id, "ref" = REF(module), - "configuration_data" = module.get_configuration() + "configuration_data" = module.get_configuration(user) )) data["module_custom_status"] = module_custom_status data["module_info"] = module_info diff --git a/code/modules/mod/modules/_module.dm b/code/modules/mod/modules/_module.dm index d3d05d205abe47..bf7169dc71b803 100644 --- a/code/modules/mod/modules/_module.dm +++ b/code/modules/mod/modules/_module.dm @@ -75,11 +75,11 @@ if(mod.wearer) balloon_alert(mod.wearer, "not active!") return - // SKYRAT EDIT START - DEPLOYABLE EVERYTHING OVER EVERYTHING + // NOVA EDIT START - DEPLOYABLE EVERYTHING OVER EVERYTHING if((mod.wearer.wear_suit != mod.chestplate) && !(allow_flags & MODULE_ALLOW_INACTIVE)) balloon_alert(mod.wearer, "chestplate retracted!") return - // SKYRAT EDIT END + // NOVA EDIT END if(module_type != MODULE_USABLE) if(active) on_deactivation() @@ -105,13 +105,13 @@ balloon_alert(mod.wearer, "unpowered!") return FALSE - // SKYRAT EDIT START - No using modules when not all parts are deployed. + // NOVA EDIT START - No using modules when not all parts are deployed. if(!(allow_flags & MODULE_ALLOW_INACTIVE)) for(var/obj/item/part as anything in mod.mod_parts) if(part.loc == mod) balloon_alert(mod.wearer, "deploy all parts first!") return FALSE - // SKYRAT EDIT END + // NOVA EDIT END if(!(allow_flags & MODULE_ALLOW_PHASEOUT) && istype(mod.wearer.loc, /obj/effect/dummy/phased_mob)) //specifically a to_chat because the user is phased out. to_chat(mod.wearer, span_warning("You cannot activate this right now.")) @@ -250,7 +250,7 @@ return list() /// Creates a list of configuring options for this module -/obj/item/mod/module/proc/get_configuration() +/obj/item/mod/module/proc/get_configuration(mob/user) return list() /// Generates an element of the get_configuration list with a display name, type and value @@ -302,14 +302,14 @@ used_overlay = overlay_state_inactive else return - /* SKYRAT EDIT START - Making MODsuits mutant-compatible - ORIGINAL: + /* NOVA EDIT START - Making MODsuits mutant-compatible - ORIGINAL: var/mutable_appearance/module_icon = mutable_appearance(overlay_icon_file, used_overlay, layer = standing.layer + 0.1) if(!use_mod_colors) module_icon.appearance_flags |= RESET_COLOR . += module_icon */ return handle_module_icon(standing, used_overlay) - // SKYRAT EDIT END + // NOVA EDIT END /// Updates the signal used by active modules to be activated /obj/item/mod/module/proc/update_signal(value) @@ -325,12 +325,12 @@ if(module_type == MODULE_PASSIVE) return - var/datum/action/item_action/mod/pinned_module/existing_action = pinned_to[REF(user)] + var/datum/action/item_action/mod/pinnable/module/existing_action = pinned_to[REF(user)] if(existing_action) mod.remove_item_action(existing_action) return - var/datum/action/item_action/mod/pinned_module/new_action = new(mod, src, user) + var/datum/action/item_action/mod/pinnable/module/new_action = new(mod, user, src) mod.add_item_action(new_action) /// On drop key, concels a device item. diff --git a/code/modules/mod/modules/modules_antag.dm b/code/modules/mod/modules/modules_antag.dm index 1cd70ef9f80d53..cf72f62d6c4a57 100644 --- a/code/modules/mod/modules/modules_antag.dm +++ b/code/modules/mod/modules/modules_antag.dm @@ -46,6 +46,7 @@ if(!.) return playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + balloon_alert(mod.wearer, "armor boosted, EVA lost") actual_speed_added = max(0, min(mod.slowdown_active, speed_added)) mod.slowdown -= actual_speed_added mod.wearer.update_equipment_speed_mods() @@ -65,6 +66,7 @@ return if(!deleting) playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + balloon_alert(mod.wearer, "armor retracts, EVA ready") mod.slowdown += actual_speed_added mod.wearer.update_equipment_speed_mods() var/list/parts = mod.mod_parts + mod @@ -88,16 +90,16 @@ desc = "A personal, protective forcefield typically seen in military applications. \ This advanced deflector shield is essentially a scaled down version of those seen on starships, \ and the power cost can be an easy indicator of this. However, it is capable of blocking nearly any incoming attack, \ - though with its' low amount of separate charges, the user remains mortal." + but only once every few seconds; a grim reminder of the users mortality." icon_state = "energy_shield" complexity = 3 idle_power_cost = DEFAULT_CHARGE_DRAIN * 0.5 use_power_cost = DEFAULT_CHARGE_DRAIN * 2 incompatible_modules = list(/obj/item/mod/module/energy_shield) /// Max charges of the shield. - var/max_charges = 3 + var/max_charges = 1 /// The time it takes for the first charge to recover. - var/recharge_start_delay = 20 SECONDS + var/recharge_start_delay = 10 SECONDS /// How much time it takes for charges to recover after they started recharging. var/charge_increment_delay = 1 SECONDS /// How much charge is recovered per recovery. @@ -120,13 +122,13 @@ /obj/item/mod/module/energy_shield/on_suit_activation() mod.AddComponent(/datum/component/shielded, max_charges = max_charges, recharge_start_delay = recharge_start_delay, charge_increment_delay = charge_increment_delay, \ charge_recovery = charge_recovery, lose_multiple_charges = lose_multiple_charges, recharge_path = recharge_path, starting_charges = charges, shield_icon_file = shield_icon_file, shield_icon = shield_icon) - RegisterSignal(mod.wearer, COMSIG_HUMAN_CHECK_SHIELDS, PROC_REF(shield_reaction)) + RegisterSignal(mod.wearer, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(shield_reaction)) /obj/item/mod/module/energy_shield/on_suit_deactivation(deleting = FALSE) var/datum/component/shielded/shield = mod.GetComponent(/datum/component/shielded) charges = shield.current_charges qdel(shield) - UnregisterSignal(mod.wearer, COMSIG_HUMAN_CHECK_SHIELDS) + UnregisterSignal(mod.wearer, COMSIG_LIVING_CHECK_BLOCK) /obj/item/mod/module/energy_shield/proc/shield_reaction(mob/living/carbon/human/owner, atom/movable/hitby, @@ -140,7 +142,7 @@ if(SEND_SIGNAL(mod, COMSIG_ITEM_HIT_REACT, owner, hitby, attack_text, 0, damage, attack_type, damage_type) & COMPONENT_HIT_REACTION_BLOCK) drain_power(use_power_cost) - return SHIELD_BLOCK + return SUCCESSFUL_BLOCK return NONE /obj/item/mod/module/energy_shield/wizard diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm index 58857b7730c445..82cab626f6270b 100644 --- a/code/modules/mod/modules/modules_general.dm +++ b/code/modules/mod/modules/modules_general.dm @@ -80,7 +80,7 @@ /obj/item/mod/module/storage/bluespace name = "MOD bluespace storage module" - desc = "A storage system developed by Nanotrasen, these compartments employ \ + desc = "A storage system developed by Symphionia, these compartments employ \ miniaturized bluespace pockets for the ultimate in storage technology; regardless of the weight of objects put inside." icon_state = "storage_large" max_w_class = WEIGHT_CLASS_GIGANTIC @@ -476,12 +476,16 @@ UnregisterSignal(mod.wearer, COMSIG_LIVING_Z_IMPACT) /obj/item/mod/module/longfall/proc/z_impact_react(datum/source, levels, turf/fell_on) - if(!drain_power(use_power_cost*levels)) - return + SIGNAL_HANDLER + if(!drain_power(use_power_cost * levels)) + return NONE new /obj/effect/temp_visual/mook_dust(fell_on) mod.wearer.Stun(levels * 1 SECONDS) - to_chat(mod.wearer, span_notice("[src] protects you from the damage!")) - return NO_Z_IMPACT_DAMAGE + mod.wearer.visible_message( + span_notice("[mod.wearer] lands on [fell_on] safely."), + span_notice("[src] protects you from the damage!"), + ) + return ZIMPACT_CANCEL_DAMAGE|ZIMPACT_NO_MESSAGE|ZIMPACT_NO_SPIN ///Thermal Regulator - Regulates the wearer's core temperature. /obj/item/mod/module/thermal_regulator @@ -623,11 +627,11 @@ desc = "A simple set of deployable stands, directly atop one's head; \ these will deploy under a hat to keep it from falling off, allowing them to be worn atop the sealed helmet. \ You still need to take the hat off your head while the helmet deploys, though. \ - This is a must-have for Nanotrasen Captains, enabling them to show off their authoritative hat even while in their MODsuit." + This is a must-have for Symphionia Captains, enabling them to show off their authoritative hat even while in their MODsuit." icon_state = "hat_holder" incompatible_modules = list(/obj/item/mod/module/hat_stabilizer) /*Intentionally left inheriting 0 complexity and removable = TRUE; - even though it comes inbuilt into the Magnate/Corporate MODS and spawns in maints, I like the idea of stealing them*/ + even though it comes inbuilt into the Magnate/Conglomeration MODS and spawns in maints, I like the idea of stealing them*/ /// Currently "stored" hat. No armor or function will be inherited, only the icon and cover flags. var/obj/item/clothing/head/attached_hat /// Original cover flags for the MOD helmet, before a hat is placed @@ -862,7 +866,7 @@ insert_trash(new_atom) /obj/item/mod/module/recycler/proc/insert_trash(obj/item/item) - var/retrieved = container.insert_item(item, multiplier = efficiency, breakdown_flags = BREAKDOWN_FLAGS_RECYCLER) + var/retrieved = container.insert_item(item, multiplier = efficiency) if(retrieved == MATERIAL_INSERT_ITEM_NO_MATS) //even if it doesn't have any material to give, trash is trash. qdel(item) playsound(src, SFX_RUSTLE, 50, TRUE, -5) diff --git a/code/modules/mod/modules/modules_maint.dm b/code/modules/mod/modules/modules_maint.dm index f7b53eaa9f0ea0..30889e4f982811 100644 --- a/code/modules/mod/modules/modules_maint.dm +++ b/code/modules/mod/modules/modules_maint.dm @@ -288,6 +288,7 @@ RegisterSignal(mod.wearer, COMSIG_MOVABLE_MOVED, PROC_REF(check_upstairs)) RegisterSignal(mod.wearer, COMSIG_MOB_SAY, PROC_REF(on_talk)) ADD_TRAIT(mod.wearer, TRAIT_SILENT_FOOTSTEPS, MOD_TRAIT) + passtable_on(mod.wearer, MOD_TRAIT) check_upstairs() //todo at some point flip your screen around /obj/item/mod/module/atrocinator/on_deactivation(display_message = TRUE, deleting = FALSE) @@ -304,6 +305,7 @@ UnregisterSignal(mod.wearer, COMSIG_MOB_SAY) step_count = 0 REMOVE_TRAIT(mod.wearer, TRAIT_SILENT_FOOTSTEPS, MOD_TRAIT) + passtable_off(mod.wearer, MOD_TRAIT) var/turf/open/openspace/current_turf = get_turf(mod.wearer) if(istype(current_turf)) current_turf.zFall(mod.wearer, falling_from_move = TRUE) diff --git a/code/modules/mod/modules/modules_medical.dm b/code/modules/mod/modules/modules_medical.dm index c1a1cbce403d21..a2271bae24d342 100644 --- a/code/modules/mod/modules/modules_medical.dm +++ b/code/modules/mod/modules/modules_medical.dm @@ -69,30 +69,28 @@ /obj/item/mod/module/quick_carry name = "MOD quick carry module" desc = "A suite of advanced servos, redirecting power from the suit's arms to help carry the wounded; \ - or simply for fun. However, Nanotrasen has locked the module's ability to assist in hand-to-hand combat." + or simply for fun. However, Symphionia has locked the module's ability to assist in hand-to-hand combat." icon_state = "carry" complexity = 1 idle_power_cost = DEFAULT_CHARGE_DRAIN * 0.3 incompatible_modules = list(/obj/item/mod/module/quick_carry, /obj/item/mod/module/constructor) + var/quick_carry_trait = TRAIT_QUICK_CARRY /obj/item/mod/module/quick_carry/on_suit_activation() - ADD_TRAIT(mod.wearer, TRAIT_QUICKER_CARRY, MOD_TRAIT) + . = ..() + ADD_TRAIT(mod.wearer, TRAIT_FASTMED, MOD_TRAIT) + ADD_TRAIT(mod.wearer, quick_carry_trait, MOD_TRAIT) /obj/item/mod/module/quick_carry/on_suit_deactivation(deleting = FALSE) - REMOVE_TRAIT(mod.wearer, TRAIT_QUICKER_CARRY, MOD_TRAIT) + . = ..() + REMOVE_TRAIT(mod.wearer, TRAIT_FASTMED, MOD_TRAIT) + REMOVE_TRAIT(mod.wearer, quick_carry_trait, MOD_TRAIT) /obj/item/mod/module/quick_carry/advanced name = "MOD advanced quick carry module" removable = FALSE complexity = 0 - -/obj/item/mod/module/quick_carry/on_suit_activation() - . = ..() - ADD_TRAIT(mod.wearer, TRAIT_FASTMED, MOD_TRAIT) - -/obj/item/mod/module/quick_carry/on_suit_deactivation(deleting = FALSE) - . = ..() - REMOVE_TRAIT(mod.wearer, TRAIT_FASTMED, MOD_TRAIT) + quick_carry_trait = TRAIT_QUICKER_CARRY ///Injector - Gives the suit an extendable large-capacity piercing syringe. /obj/item/mod/module/injector @@ -296,7 +294,7 @@ /obj/item/mod/module/thread_ripper name = "MOD thread ripper module" desc = "A custom-built module integrated with the suit's wrist. The thread ripper is built from \ - recent technology dating back to the start of 2562, after an attempt by a well-known Nanotrasen researcher to \ + recent technology dating back to the start of 2562, after an attempt by a well-known Symphionia researcher to \ expand on the rapid-tailoring technology found in Autodrobes. Rather than being capable of creating \ any fabric pattern under the suns, the thread ripper is capable of rapid disassembly of them. \ Anything from kevlar-weave, to leather, to durathread can be quickly pulled open to the wearer's specification \ diff --git a/code/modules/mod/modules/modules_ninja.dm b/code/modules/mod/modules/modules_ninja.dm index 427226071994f8..f175dda0317611 100644 --- a/code/modules/mod/modules/modules_ninja.dm +++ b/code/modules/mod/modules/modules_ninja.dm @@ -218,7 +218,7 @@ /obj/item/mod/module/weapon_recall/proc/set_weapon(obj/item/weapon) linked_weapon = weapon - RegisterSignal(linked_weapon, COMSIG_MOVABLE_IMPACT, PROC_REF(catch_weapon)) + RegisterSignal(linked_weapon, COMSIG_MOVABLE_PRE_IMPACT, PROC_REF(catch_weapon)) RegisterSignal(linked_weapon, COMSIG_QDELETING, PROC_REF(deleted_weapon)) /obj/item/mod/module/weapon_recall/proc/recall_weapon(caught = FALSE) @@ -463,7 +463,7 @@ if(reagents.has_reagent(reagent_required, reagent_required_amount)) balloon_alert(mod.wearer, "already charged!") return FALSE - if(!attacking_item.reagents.trans_id_to(src, reagent_required, reagent_required_amount)) + if(!attacking_item.reagents.trans_to(src, reagent_required_amount, target_id = reagent_required)) return FALSE balloon_alert(mod.wearer, "charge [reagents.has_reagent(reagent_required, reagent_required_amount) ? "fully" : "partially"] reloaded") return TRUE diff --git a/code/modules/mod/modules/modules_science.dm b/code/modules/mod/modules/modules_science.dm index c8d3cef027ae68..b6f15f08135466 100644 --- a/code/modules/mod/modules/modules_science.dm +++ b/code/modules/mod/modules/modules_science.dm @@ -3,7 +3,7 @@ ///Reagent Scanner - Lets the user scan reagents. /obj/item/mod/module/reagent_scanner name = "MOD reagent scanner module" - desc = "A module based off research-oriented Nanotrasen HUDs, this is capable of scanning the contents of \ + desc = "A module based off research-oriented Symphionia HUDs, this is capable of scanning the contents of \ containers and projecting the information in an easy-to-read format on the wearer's display. \ It cannot detect flavors, so that's up to you." icon_state = "scanner" diff --git a/code/modules/mod/modules/modules_security.dm b/code/modules/mod/modules/modules_security.dm index 3ac431034b5d1b..1e85656962a8bb 100644 --- a/code/modules/mod/modules/modules_security.dm +++ b/code/modules/mod/modules/modules_security.dm @@ -18,7 +18,7 @@ /obj/item/mod/module/magnetic_harness/Initialize(mapload) . = ..() if(!guns_typecache) - guns_typecache = typecacheof(list(/obj/item/gun/ballistic, /obj/item/gun/energy, /obj/item/gun/grenadelauncher, /obj/item/gun/chem, /obj/item/gun/syringe, /obj/item/gun/microfusion)) //SKYRAT EDIT - MICROFUSION + guns_typecache = typecacheof(list(/obj/item/gun/ballistic, /obj/item/gun/energy, /obj/item/gun/grenadelauncher, /obj/item/gun/chem, /obj/item/gun/syringe, /obj/item/gun/microfusion)) //NOVA EDIT - MICROFUSION /obj/item/mod/module/magnetic_harness/on_install() already_allowed_guns = guns_typecache & mod.chestplate.allowed @@ -67,10 +67,10 @@ overlay_state_use = "module_pepper_used" /obj/item/mod/module/pepper_shoulders/on_suit_activation() - RegisterSignal(mod.wearer, COMSIG_HUMAN_CHECK_SHIELDS, PROC_REF(on_check_shields)) + RegisterSignal(mod.wearer, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(on_check_block)) /obj/item/mod/module/pepper_shoulders/on_suit_deactivation(deleting = FALSE) - UnregisterSignal(mod.wearer, COMSIG_HUMAN_CHECK_SHIELDS) + UnregisterSignal(mod.wearer, COMSIG_LIVING_CHECK_BLOCK) /obj/item/mod/module/pepper_shoulders/on_use() . = ..() @@ -84,7 +84,7 @@ smoke.start(log = TRUE) QDEL_NULL(capsaicin_holder) // Reagents have a ref to their holder which has a ref to them. No leaks please. -/obj/item/mod/module/pepper_shoulders/proc/on_check_shields() +/obj/item/mod/module/pepper_shoulders/proc/on_check_block() SIGNAL_HANDLER if(!COOLDOWN_FINISHED(src, cooldown_timer)) @@ -424,7 +424,7 @@ if(oldgroup == newgroup) return - + sorted_creatures[oldgroup] -= creature sorted_creatures[newgroup] += creature diff --git a/code/modules/mod/modules/modules_supply.dm b/code/modules/mod/modules/modules_supply.dm index 9bda5fef5034a6..ecbbda2944ff6b 100644 --- a/code/modules/mod/modules/modules_supply.dm +++ b/code/modules/mod/modules/modules_supply.dm @@ -3,7 +3,7 @@ ///Internal GPS - Extends a GPS you can use. /obj/item/mod/module/gps name = "MOD internal GPS module" - desc = "This module uses common Nanotrasen technology to calculate the user's position anywhere in space, \ + desc = "This module uses common Symphionia technology to calculate the user's position anywhere in space, \ down to the exact coordinates. This information is fed to a central database viewable from the device itself, \ though using it to help people is up to you." icon_state = "gps" @@ -28,7 +28,7 @@ /obj/item/mod/module/clamp name = "MOD hydraulic clamp module" desc = "A series of actuators installed into both arms of the suit, boasting a lifting capacity of almost a ton. \ - However, this design has been locked by Nanotrasen to be primarily utilized for lifting various crates. \ + However, this design has been locked by Symphionia to be primarily utilized for lifting various crates. \ A lot of people would say that loading cargo is a dull job, but you could not disagree more." icon_state = "clamp" module_type = MODULE_ACTIVE @@ -82,7 +82,7 @@ else balloon_alert(mod.wearer, "invalid target!") -/obj/item/mod/module/clamp/on_suit_deactivation(deleting = FALSE) //SKYRAT EDIT +/obj/item/mod/module/clamp/on_suit_deactivation(deleting = FALSE) //NOVA EDIT if(deleting) return for(var/atom/movable/crate as anything in stored_crates) @@ -245,7 +245,7 @@ mod.wearer.visible_message(span_warning("[mod.wearer] starts whirring!"), \ blind_message = span_hear("You hear a whirring sound.")) playsound(src, 'sound/items/modsuit/loader_charge.ogg', 75, TRUE) - lightning = mutable_appearance('icons/effects/effects.dmi', "electricity3", offset_spokesman = src, plane = GAME_PLANE_FOV_HIDDEN) + lightning = mutable_appearance('icons/effects/effects.dmi', "electricity3", layer = LOW_MOB_LAYER) mod.wearer.add_overlay(lightning) balloon_alert(mod.wearer, "you start charging...") var/power = launch_time diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index 89e6eca329372e..208652ca551a9c 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -30,7 +30,7 @@ ///List of stored files on this drive. Use `store_file` and `remove_file` instead of modifying directly! var/list/datum/computer_file/stored_files = list() - ///Non-static list of programs the computer should recieve on Initialize. + ///Non-static list of programs the computer should receive on Initialize. var/list/datum/computer_file/starting_programs = list() ///Static list of default programs that come with ALL computers, here so computers don't have to repeat this. var/static/list/datum/computer_file/default_programs = list( @@ -47,8 +47,8 @@ var/max_idle_programs = 2 ///Flag of the type of device the modular computer is, deciding what types of apps it can run. - var/hardware_flag = NONE -// Options: PROGRAM_ALL | PROGRAM_CONSOLE | PROGRAM_LAPTOP | PROGRAM_TABLET + var/hardware_flag = PROGRAM_ALL +// Options: PROGRAM_ALL | PROGRAM_CONSOLE | PROGRAM_LAPTOP | PROGRAM_PDA ///The theme, used for the main menu and file browser apps. var/device_theme = PDA_THEME_NTOS @@ -73,9 +73,9 @@ var/comp_light_color = "#FFFFFF" ///Power usage when the computer is open (screen is active) and can be interacted with. - var/base_active_power_usage = 15 // SKYRAT EDIT CHANGE - Original: 125 + var/base_active_power_usage = 15 // NOVA EDIT CHANGE - Original: 125 ///Power usage when the computer is idle and screen is off. - var/base_idle_power_usage = 2 // SKYRAT EDIT CHANGE - Original: 5 + var/base_idle_power_usage = 2 // NOVA EDIT CHANGE - Original: 5 // 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 @@ -324,11 +324,14 @@ return FALSE . = ..() + if(!forced) + add_log("manual overriding of permissions and modification of device firmware detected. Reboot and reinstall required.") obj_flags |= EMAGGED device_theme = PDA_THEME_SYNDICATE - balloon_alert(user, "syndieOS loaded") - if (emag_card) - to_chat(user, span_notice("You swipe \the [src] with [emag_card]. A console window momentarily fills the screen, with white text rapidly scrolling past.")) + if(user) + balloon_alert(user, "syndieOS loaded") + if (emag_card) + to_chat(user, span_notice("You swipe \the [src] with [emag_card]. A console window momentarily fills the screen, with white text rapidly scrolling past.")) return TRUE /obj/item/modular_computer/examine(mob/user) @@ -399,7 +402,7 @@ return if(enabled) - . += active_program ? mutable_appearance(init_icon, active_program.program_icon_state) : mutable_appearance(init_icon, icon_state_menu) + . += active_program ? mutable_appearance(init_icon, active_program.program_open_overlay) : mutable_appearance(init_icon, icon_state_menu) if(atom_integrity <= integrity_failure * max_integrity) . += mutable_appearance(init_icon, "bsod") . += mutable_appearance(init_icon, "broken") @@ -469,13 +472,13 @@ shutdown_computer() return - if(active_program && active_program.requires_ntnet && !get_ntnet_status()) + if(active_program && (active_program.program_flags & PROGRAM_REQUIRES_NTNET) && !get_ntnet_status()) 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) idle_programs.process_tick(seconds_per_tick) idle_programs.ntnet_status = get_ntnet_status() - if(idle_programs.requires_ntnet && !idle_programs.ntnet_status) + if((idle_programs.program_flags & PROGRAM_REQUIRES_NTNET) && !idle_programs.ntnet_status) idle_programs.event_networkfailure(TRUE) if(active_program) @@ -503,6 +506,8 @@ physical.loc.visible_message(span_notice("[icon2html(physical, viewers(physical.loc))] \The [src] displays a [caller.filedesc] notification: [alerttext]")) /obj/item/modular_computer/proc/ring(ringtone) // bring bring + if(!use_power()) + return if(HAS_TRAIT(SSstation, STATION_TRAIT_PDA_GLITCHED)) playsound(src, pick('sound/machines/twobeep_voice1.ogg', 'sound/machines/twobeep_voice2.ogg'), 50, TRUE) else @@ -519,8 +524,9 @@ data["PC_device_theme"] = device_theme if(internal_cell) + data["PC_lowpower_mode"] = !internal_cell.charge switch(internal_cell.percent()) - if(80 to 200) // 100 should be maximal but just in case.. + if(80 to INFINITY) data["PC_batteryicon"] = "batt_100.gif" if(60 to 80) data["PC_batteryicon"] = "batt_80.gif" @@ -534,6 +540,7 @@ data["PC_batteryicon"] = "batt_5.gif" data["PC_batterypercent"] = "[round(internal_cell.percent())]%" else + data["PC_lowpower_mode"] = FALSE data["PC_batteryicon"] = null data["PC_batterypercent"] = null @@ -566,7 +573,8 @@ CRASH("tried to open program that does not belong to this computer") if(!program || !istype(program)) // Program not found or it's not executable program. - to_chat(user, span_danger("\The [src]'s screen shows \"I/O ERROR - Unable to run program\" warning.")) + if(user) + to_chat(user, span_danger("\The [src]'s screen shows \"I/O ERROR - Unable to run program\" warning.")) return FALSE // The program is already running. Resume it. @@ -579,15 +587,17 @@ update_appearance(UPDATE_ICON) return TRUE - if(!program.is_supported_by_hardware(hardware_flag, 1, user)) + if(!program.is_supported_by_hardware(hardware_flag, loud = TRUE, user = user)) return FALSE if(idle_threads.len > max_idle_programs) - to_chat(user, span_danger("\The [src] displays a \"Maximal CPU load reached. Unable to run another program.\" error.")) + if(user) + to_chat(user, span_danger("\The [src] displays a \"Maximal CPU load reached. Unable to run another program.\" error.")) return FALSE - if(program.requires_ntnet && !get_ntnet_status()) // The program requires NTNet connection, but we are not connected to NTNet. - to_chat(user, span_danger("\The [src]'s screen shows \"Unable to connect to NTNet. Please retry. If problem persists contact your system administrator.\" warning.")) + if(program.program_flags & PROGRAM_REQUIRES_NTNET && !get_ntnet_status()) // The program requires NTNet connection, but we are not connected to NTNet. + if(user) + to_chat(user, span_danger("\The [src]'s screen shows \"Unable to connect to NTNet. Please retry. If problem persists contact your system administrator.\" warning.")) return FALSE if(!program.on_start(user)) @@ -672,7 +682,7 @@ * It is separated from ui_act() to be overwritten as needed. */ /obj/item/modular_computer/proc/toggle_flashlight(mob/user) - if(!has_light) + if(!has_light || !internal_cell || !internal_cell.charge) return FALSE if(!COOLDOWN_FINISHED(src, disabled_time)) balloon_alert(user, "disrupted!") @@ -805,7 +815,7 @@ user.balloon_alert(user, "cell removed") internal_cell.forceMove(drop_location()) internal_cell = null - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS else user.balloon_alert(user, "no cell!") @@ -814,29 +824,29 @@ tool.play_tool_sound(src, user, 20, volume=20) deconstruct(TRUE) user.balloon_alert(user, "disassembled") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/item/modular_computer/welder_act(mob/living/user, obj/item/tool) . = ..() if(atom_integrity == max_integrity) to_chat(user, span_warning("\The [src] does not require repairs.")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(!tool.tool_start_check(user, amount=1)) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS to_chat(user, span_notice("You begin repairing damage to \the [src]...")) if(!tool.use_tool(src, user, 20, volume=50)) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS atom_integrity = max_integrity to_chat(user, span_notice("You repair \the [src].")) update_appearance() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/item/modular_computer/deconstruct(disassembled = TRUE) remove_pai() eject_aicard() - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if (disassembled) internal_cell?.forceMove(drop_location()) computer_id_slot?.forceMove(drop_location()) @@ -895,3 +905,14 @@ inserted_pai = null update_appearance(UPDATE_ICON) return TRUE + +/** + * Debug ModPC + * Used to spawn all programs for Create and Destroy unit test. + */ +/obj/item/modular_computer/debug + max_capacity = INFINITY + +/obj/item/modular_computer/debug/Initialize(mapload) + starting_programs += subtypesof(/datum/computer_file/program) + return ..() diff --git a/code/modules/modular_computers/computers/item/computer_power.dm b/code/modules/modular_computers/computers/item/computer_power.dm index 24950621de6e28..b68df9a4671e5c 100644 --- a/code/modules/modular_computers/computers/item/computer_power.dm +++ b/code/modules/modular_computers/computers/item/computer_power.dm @@ -1,18 +1,19 @@ ///The multiplier given to the base overtime charge drain value if its flashlight is on. #define FLASHLIGHT_DRAIN_MULTIPLIER 1.1 -// Tries to draw power from charger or, if no operational charger is present, from power cell. +///Draws power from its rightful source (area if its a computer, the cell otherwise) +///Takes into account special cases, like silicon PDAs through override, and nopower apps. /obj/item/modular_computer/proc/use_power(amount = 0) if(check_power_override()) return TRUE - if(ismachinery(physical)) - var/obj/machinery/machine_holder = physical - if(machine_holder.powered()) - machine_holder.use_power(amount) - return TRUE - - if(!internal_cell || !internal_cell.charge) + if(!internal_cell) + return FALSE + if(!internal_cell.charge && (isnull(active_program) || !(active_program.program_flags & PROGRAM_RUNS_WITHOUT_POWER))) + close_all_programs() + for(var/datum/computer_file/program/programs as anything in stored_files) + if((programs.program_flags & PROGRAM_RUNS_WITHOUT_POWER) && open_program(program = programs)) + return TRUE return FALSE if(!internal_cell.use(amount JOULES)) @@ -25,9 +26,9 @@ return internal_cell.give(amount) return 0 -// Used in following function to reduce copypaste +///Shuts down the computer from powerloss. /obj/item/modular_computer/proc/power_failure() - if(!enabled) // Shut down the computer + if(!enabled) return if(active_program) active_program.event_powerfailure() @@ -57,9 +58,10 @@ power_failure() return FALSE -///Used by subtypes for special cases for power usage, returns TRUE if it should stop the use_power chain. +///Returns TRUE if the PC should not be using any power, FALSE otherwise. +///Checks to see if the current app allows to be ran without power, if so we'll run with it. /obj/item/modular_computer/proc/check_power_override() - return FALSE + return (!internal_cell?.charge && (active_program?.program_flags & PROGRAM_RUNS_WITHOUT_POWER)) //Integrated (Silicon) tablets don't drain power, because the tablet is required to state laws, so it being disabled WILL cause problems. /obj/item/modular_computer/pda/silicon/check_power_override() diff --git a/code/modules/modular_computers/computers/item/computer_ui.dm b/code/modules/modular_computers/computers/item/computer_ui.dm index 1b87a014f185b0..f5ca1d747658cd 100644 --- a/code/modules/modular_computers/computers/item/computer_ui.dm +++ b/code/modules/modular_computers/computers/item/computer_ui.dm @@ -8,23 +8,24 @@ * 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. + * user - The person whose UI we're updating. Only necessary if we're opening the UI for the first time. */ /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(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() for (var/datum/tgui/window as anything in open_uis) if(active_program) window.interface = active_program.tgui_id window.title = active_program.filedesc - active_program.ui_interact(user, window) + active_program.ui_interact(window.user, window) else window.interface = "NtosMain" window.send_assets() @@ -96,6 +97,7 @@ ) data["proposed_login"] = list( + IDInserted = computer_id_slot ? TRUE : FALSE, IDName = computer_id_slot?.registered_name, IDJob = computer_id_slot?.assignment, ) @@ -112,7 +114,7 @@ data["programs"] += list(list( "name" = program.filename, "desc" = program.filedesc, - "header_program" = program.header_program, + "header_program" = !!(program.program_flags & PROGRAM_HEADER), "running" = !!(program in idle_threads), "icon" = program.program_icon, "alert" = program.alert_pending, @@ -134,13 +136,15 @@ switch(action) if("PC_exit") - active_program.kill_program(usr) + //you can't close apps in emergency mode. + if(isnull(internal_cell) || internal_cell.charge) + active_program.kill_program(usr) return TRUE if("PC_shutdown") shutdown_computer() return TRUE if("PC_minimize") - if(!active_program) + if(!active_program || (!isnull(internal_cell) && !internal_cell.charge)) return active_program.background_program() return TRUE 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 c7d7688c8965bc..3161be07921f0d 100644 --- a/code/modules/modular_computers/computers/item/disks/computer_disk.dm +++ b/code/modules/modular_computers/computers/item/disks/computer_disk.dm @@ -1,7 +1,7 @@ /obj/item/computer_disk name = "data disk" desc = "Removable disk used to store data." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "datadisk6" w_class = WEIGHT_CLASS_TINY ///The amount of storage space is on the disk diff --git a/code/modules/modular_computers/computers/item/disks/unique_disks.dm b/code/modules/modular_computers/computers/item/disks/unique_disks.dm index 144fa52c65afde..6d8614f56acf1e 100644 --- a/code/modules/modular_computers/computers/item/disks/unique_disks.dm +++ b/code/modules/modular_computers/computers/item/disks/unique_disks.dm @@ -6,3 +6,6 @@ /obj/item/computer_disk/syndicate/camera_app starting_programs = list(/datum/computer_file/program/secureye/syndicate) + +/obj/item/computer_disk/syndicate/contractor + starting_programs = list(/datum/computer_file/program/contract_uplink) diff --git a/code/modules/modular_computers/computers/item/laptop_presets.dm b/code/modules/modular_computers/computers/item/laptop_presets.dm index 1eebf9f2387756..4239a33dfd781b 100644 --- a/code/modules/modular_computers/computers/item/laptop_presets.dm +++ b/code/modules/modular_computers/computers/item/laptop_presets.dm @@ -3,3 +3,9 @@ starting_programs = list( /datum/computer_file/program/chatclient, ) + +//Used for Mafia testing purposes. +/obj/item/modular_computer/laptop/preset/mafia + starting_programs = list( + /datum/computer_file/program/mafia, + ) diff --git a/code/modules/modular_computers/computers/item/pda.dm b/code/modules/modular_computers/computers/item/pda.dm index a4b08f2d90f6db..938a3c3b05bf02 100644 --- a/code/modules/modular_computers/computers/item/pda.dm +++ b/code/modules/modular_computers/computers/item/pda.dm @@ -18,7 +18,7 @@ icon_state_menu = "menu" max_capacity = 64 allow_chunky = TRUE - hardware_flag = PROGRAM_TABLET + hardware_flag = PROGRAM_PDA max_idle_programs = 2 w_class = WEIGHT_CLASS_SMALL slot_flags = ITEM_SLOT_ID | ITEM_SLOT_BELT @@ -36,8 +36,9 @@ /datum/computer_file/program/messenger, /datum/computer_file/program/nt_pay, /datum/computer_file/program/notepad, - // SKYRAT EDIT ADDITION START + // NOVA EDIT ADDITION START /datum/computer_file/program/crew_manifest, // Adds crew manifest to all base tablets + /datum/computer_file/program/maintenance/camera // Adds camera to all base tablets // SKRAT EDIT ADDITION END ) ///List of items that can be stored in a PDA @@ -275,6 +276,19 @@ if(msg) msg.invisible = TRUE +/obj/item/modular_computer/pda/syndicate_contract_uplink + name = "contractor tablet" + device_theme = PDA_THEME_SYNDICATE + icon_state_menu = "contractor-assign" + comp_light_luminosity = 6.3 + has_pda_programs = FALSE + greyscale_config = /datum/greyscale_config/tablet/stripe_double + greyscale_colors = "#696969#000000#FFA500" + + starting_programs = list( + /datum/computer_file/program/contract_uplink, + ) + /** * Silicon PDA * @@ -306,8 +320,8 @@ starting_programs = list( /datum/computer_file/program/filemanager, /datum/computer_file/program/robotact, - /datum/computer_file/program/crew_manifest, // SKYRAT EDIT ADDITION - Manifests for borgs - /datum/computer_file/program/messenger, // SKYRAT EDIT ADDITION - Messenger for borgs + /datum/computer_file/program/crew_manifest, // NOVA EDIT ADDITION - Manifests for borgs + /datum/computer_file/program/messenger, // NOVA EDIT ADDITION - Messenger for borgs ) /obj/item/modular_computer/pda/silicon/Initialize(mapload) @@ -367,7 +381,7 @@ return robotact qdel(robotact) robotact = null - CRASH("Cyborg [silicon_owner]'s tablet hard drive rejected recieving a new copy of the self-manage app. To fix, check the hard drive's space remaining. Please make a bug report about this.") + CRASH("Cyborg [silicon_owner]'s tablet hard drive rejected receiving a new copy of the self-manage app. To fix, check the hard drive's space remaining. Please make a bug report about this.") //Makes the light settings reflect the borg's headlamp settings /obj/item/modular_computer/pda/silicon/cyborg/ui_data(mob/user) @@ -408,4 +422,4 @@ . = ..() if(iscyborg(silicon_owner)) var/mob/living/silicon/robot/robo = silicon_owner - robo.lamp_color = COLOR_RED //Syndicate likes it red + robo.lamp_color = COLOR_RED //Symphionia likes it red diff --git a/code/modules/modular_computers/computers/item/processor.dm b/code/modules/modular_computers/computers/item/processor.dm index 01c04ed68cd658..ea4839ac944902 100644 --- a/code/modules/modular_computers/computers/item/processor.dm +++ b/code/modules/modular_computers/computers/item/processor.dm @@ -44,6 +44,13 @@ machinery_computer = null return ..() +/obj/item/modular_computer/processor/use_power(amount = 0) + var/obj/machinery/machine_holder = physical + if(machine_holder.powered()) + machine_holder.use_power(amount) + return TRUE + return FALSE + /obj/item/modular_computer/processor/relay_qdel() qdel(machinery_computer) 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 e2f1b354eda283..31d763054b6d47 100644 --- a/code/modules/modular_computers/computers/item/role_tablet_presets.dm +++ b/code/modules/modular_computers/computers/item/role_tablet_presets.dm @@ -47,6 +47,7 @@ name = "head of security PDA" greyscale_config = /datum/greyscale_config/tablet/head greyscale_colors = "#EA3232#0000CC" + inserted_item = /obj/item/pen/red/security starting_programs = list( /datum/computer_file/program/crew_manifest, /datum/computer_file/program/status, @@ -122,6 +123,7 @@ /obj/item/modular_computer/pda/security name = "security PDA" greyscale_colors = "#EA3232#0000cc" + inserted_item = /obj/item/pen/red/security starting_programs = list( /datum/computer_file/program/records/security, /datum/computer_file/program/crew_manifest, @@ -131,6 +133,7 @@ /obj/item/modular_computer/pda/detective name = "detective PDA" greyscale_colors = "#805A2F#990202" + inserted_item = /obj/item/pen/red/security starting_programs = list( /datum/computer_file/program/records/security, /datum/computer_file/program/crew_manifest, @@ -141,6 +144,7 @@ name = "warden PDA" greyscale_config = /datum/greyscale_config/tablet/stripe_double greyscale_colors = "#EA3232#0000CC#363636" + inserted_item = /obj/item/pen/red/security starting_programs = list( /datum/computer_file/program/records/security, /datum/computer_file/program/crew_manifest, @@ -392,12 +396,12 @@ /datum/computer_file/program/newscaster, ) -/* // SKYRAT EDIT REMOVAL BEGIN - Mutes the Curator's ringer on spawn +/* // NOVA EDIT REMOVAL BEGIN - Mutes the Curator's ringer on spawn /obj/item/modular_computer/pda/curator/Initialize(mapload) . = ..() for(var/datum/computer_file/program/messenger/msg in stored_files) msg.alert_silenced = TRUE -*/ // SKYRAT EDIT REMOVAL END +*/ // NOVA EDIT REMOVAL END /obj/item/modular_computer/pda/psychologist name = "psychologist PDA" diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm index c54d3295fe389b..7fd019c1beeb0c 100644 --- a/code/modules/modular_computers/computers/machinery/modular_computer.dm +++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm @@ -82,7 +82,7 @@ return . if(cpu.enabled) - . += cpu.active_program?.program_icon_state || screen_icon_state_menu + . += cpu.active_program?.program_open_overlay || screen_icon_state_menu else if(!(machine_stat & NOPOWER)) . += screen_icon_screensaver @@ -134,7 +134,7 @@ return ..() /obj/machinery/modular_computer/attackby(obj/item/W as obj, mob/living/user) - if (cpu && !user.combat_mode && !(flags_1 & NODECONSTRUCT_1)) + if (cpu && !user.combat_mode && !(obj_flags & NO_DECONSTRUCTION)) return cpu.attackby(W, user) return ..() diff --git a/code/modules/modular_computers/documentation.md b/code/modules/modular_computers/documentation.md deleted file mode 100644 index 7e0cd7dbca18ed..00000000000000 --- a/code/modules/modular_computers/documentation.md +++ /dev/null @@ -1,58 +0,0 @@ -# Modular computer programs - -How module computer programs work - -Ok. so a quick rundown on how to make a program. This is kind of a shitty documentation, but oh well I was asked to. - -## Base setup - -This is how the base program is setup. the rest is mostly tgui stuff. I'll use the ntnetmonitor as a base - -```DM -/datum/computer_file/program/ntnetmonitor - /// This is obviously the name of the file itself. not much to be said - filename = "ntmonitor" - - /// This is sort of the official name. it's what shows up on the main menu - filedesc = "NTNet Diagnostics and Monitoring" - - /// This is what the screen will look like when the program is active - program_icon_state = "comm_monitor" - - /// This is a sort of a description, visible when looking on the ntnet - extended_desc = "This program is a dummy." - - /// size of the program. Big programs need more hard drive space. Don't - /// make it too big though. - size = 12 - - /// If this is set, the program will not run without an ntnet connection, - /// and will close if the connection is lost. Mainly for primarily online - /// programs. - requires_ntnet = 1 - - /// This is access required to run the program itself. ONLY SET THIS FOR - /// SUPER SECURE SHIT. This also acts as transfer_access as well. - required_access = access_network - - /// This is the access needed to download from ntnet or host on the ptp - /// program. This is what you want to use most of the time. - transfer_access = access_change_ids - - /// If it's available to download on ntnet. pretty self explanatory. - available_on_ntnet = 1 - - /// ditto but on emagged syndie net. Use this for antag programs - available_on_syndinet = 0 - - /// Bitflags (PROGRAM_CONSOLE, PROGRAM_LAPTOP, PROGRAM_TABLET combination) - /// or PROGRAM_ALL. Use this to limit what kind of machines can run the - /// program. For example, comms program should be limited to consoles and laptops. - usage_flags = PROGRAM_ALL - - /// This one is kinda cool. If you have the program minimized, this will - /// show up in the header of the computer screen. You can even have the - /// program change what the header is based on the situation! See `alarm.dm` - /// for an example. - var/ui_header = "downloader_finished.gif" -``` diff --git a/code/modules/modular_computers/file_system/computer_file.dm b/code/modules/modular_computers/file_system/computer_file.dm index 99fc288ffaf3a6..948257aa83c6db 100644 --- a/code/modules/modular_computers/file_system/computer_file.dm +++ b/code/modules/modular_computers/file_system/computer_file.dm @@ -86,6 +86,8 @@ * * background - Whether the app is running in the background. */ /datum/computer_file/program/proc/event_powerfailure() + if(program_flags & PROGRAM_RUNS_WITHOUT_POWER) + return kill_program() /** diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index 8cb741d376ed9c..5ddb064f319580 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -1,39 +1,36 @@ -///The default amount a program should take in cell use. -#define PROGRAM_BASIC_CELL_USE 15 - // /program/ files are executable programs that do things. /datum/computer_file/program filetype = "PRG" /// File name. FILE NAME MUST BE UNIQUE IF YOU WANT THE PROGRAM TO BE DOWNLOADABLE FROM NTNET! filename = "UnknownProgram" + /// Program-specific bitflags that tell the app what it runs on. + /// (PROGRAM_ALL | PROGRAM_CONSOLE | PROGRAM_LAPTOP | PROGRAM_PDA) + var/can_run_on_flags = PROGRAM_ALL + /// Program-specific bitflags that tells the ModPC what the app is able to do special. + /// (PROGRAM_REQUIRES_NTNET|PROGRAM_ON_NTNET_STORE|PROGRAM_ON_SYNDINET_STORE|PROGRAM_UNIQUE_COPY|PROGRAM_HEADER|PROGRAM_RUNS_WITHOUT_POWER) + var/program_flags = PROGRAM_ON_NTNET_STORE ///How much power running this program costs. var/power_cell_use = PROGRAM_BASIC_CELL_USE - /// List of required accesses to *run* the program. Any match will do. - 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() + ///List of required accesses to *run* the program. Any match will do. + ///This also acts as download_access if that is not set, making this more draconic and restrictive. + var/list/run_access = list() + ///List of required access to download or file host the program. Any match will do. + var/list/download_access = list() /// User-friendly name of this program. var/filedesc = "Unknown Program" /// Short description of this program's function. var/extended_desc = "N/A" - /// Category in the NTDownloader. - var/category = PROGRAM_CATEGORY_MISC - /// Program-specific screen icon state - var/program_icon_state = null - ///Boolean on whether the program will appear at the top on PDA menus, or in the app list with everything else. - var/header_program = FALSE - /// Set to 1 for program to require nonstop NTNet connection to run. If NTNet connection is lost program crashes. - var/requires_ntnet = FALSE + ///What category this program can be found in within NTNetDownloader. + ///This is required if PROGRAM_ON_NTNET_STORE or PROGRAM_ON_SYNDINET_STORE is on. + var/downloader_category = PROGRAM_CATEGORY_DEVICE + ///The overlay to add ontop of the ModPC running the app while it's open. + ///This is taken from the same file as the ModPC, so you can use can_run_on_flags to prevent + ///the program from being used on devices that don't have sprites for it. + var/program_open_overlay = null /// NTNet status, updated every tick by computer running this program. Don't use this for checks if NTNet works, computers do that. Use this for calculations, etc. var/ntnet_status = 1 - /// Bitflags (PROGRAM_CONSOLE, PROGRAM_LAPTOP, PROGRAM_TABLET combination) or PROGRAM_ALL - var/usage_flags = PROGRAM_ALL - /// Whether the program can be downloaded from NTNet. Set to FALSE to disable. - var/available_on_ntnet = TRUE - /// Whether the program can be downloaded from SyndiNet (accessible via emagging the computer). Set to TRUE to enable. - var/available_on_syndinet = FALSE - /// Name of the tgui interface + /// Name of the tgui interface. If this is not defined, this will not be available in NTNet. var/tgui_id /// Example: "something.gif" - a header image that will be rendered in computer's UI when this program is running at background. Images must also be inserted into /datum/asset/simple/headers. var/ui_header = null @@ -47,17 +44,15 @@ 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 = ..() - temp.required_access = required_access + temp.run_access = run_access temp.filedesc = filedesc - temp.program_icon_state = program_icon_state - temp.requires_ntnet = requires_ntnet - temp.usage_flags = usage_flags - if(unique_copy) + temp.program_open_overlay = program_open_overlay + temp.program_flags = program_flags + temp.can_run_on_flags = can_run_on_flags + if(program_flags & PROGRAM_UNIQUE_COPY) if(computer) computer.remove_file(src) if(disk_host) @@ -83,9 +78,9 @@ ///Attempts to generate an Ntnet log, returns the log on success, FALSE otherwise. /datum/computer_file/program/proc/generate_network_log(text) - if(computer) - return computer.add_log(text) - return FALSE + if(!computer || computer.obj_flags & EMAGGED) + return FALSE + return computer.add_log(text) /** *Runs when the device is used to attack an atom in non-combat mode using right click (secondary). @@ -104,7 +99,7 @@ ///Makes sure a program can run on this hardware (for apps limited to tablets/computers/laptops) /datum/computer_file/program/proc/is_supported_by_hardware(hardware_flag = NONE, loud = FALSE, mob/user) - if(!(hardware_flag & usage_flags)) + if(!(hardware_flag & can_run_on_flags)) if(loud && computer && user) to_chat(user, span_danger("\The [computer] flashes a \"Hardware Error - Incompatible software\" warning.")) return FALSE @@ -115,33 +110,32 @@ return TRUE /** - *Check if the user can run program. Only humans and silicons can operate computer. Automatically called in on_start() - *ID must be inserted into a card slot to be read. If the program is not currently installed (as is the case when - *NT Software Hub is checking available software), a list can be given to be used instead. - *Arguments: - *user is a ref of the mob using the device. - *loud is a bool deciding if this proc should use to_chats - *access_to_check is an access level that will be checked against the ID - *transfer, if TRUE and access_to_check is null, will tell this proc to use the program's transfer_access in place of access_to_check - *access can contain a list of access numbers to check against. If access is not empty, it will be used istead of checking any inserted ID. -*/ -/datum/computer_file/program/proc/can_run(mob/user, loud = FALSE, access_to_check, transfer = FALSE, list/access) - if(issilicon(user) && !ispAI(user)) - return TRUE - - if(isAdminGhostAI(user)) - return TRUE + * Checks if the user can run program. Only humans and silicons can operate computer. Automatically called in on_start() + * ID must be inserted into a card slot to be read. If the program is not currently installed (as is the case when + * NT Software Hub is checking available software), a list can be given to be used instead. + * Args: + * user is a ref of the mob using the device. + * loud is a bool deciding if this proc should use to_chats + * access_to_check is an access level that will be checked against the ID + * downloading: Boolean on whether it's downloading the app or not. If it is, it will check download_access instead of run_access. + * access can contain a list of access numbers to check against. If access is not empty, it will be used istead of checking any inserted ID. + */ +/datum/computer_file/program/proc/can_run(mob/user, loud = FALSE, access_to_check, downloading = FALSE, list/access) + if(user) + if(issilicon(user) && !ispAI(user)) + return TRUE + if(isAdminGhostAI(user)) + return TRUE - if(computer && (computer.obj_flags & EMAGGED) && (available_on_syndinet || !transfer)) //emagged can run anything on syndinet, and can bypass execution locks, but not download. + if(computer && (computer.obj_flags & EMAGGED) && (program_flags & PROGRAM_ON_SYNDINET_STORE || !downloading)) //emagged can run anything on syndinet, and can bypass execution locks, but not download. return TRUE - // Defaults to required_access if(!access_to_check) - if(transfer && length(transfer_access)) - access_to_check = transfer_access + if(downloading && length(download_access)) + access_to_check = download_access else - access_to_check = required_access - if(!length(access_to_check)) // No required_access, allow it. + access_to_check = run_access + if(!length(access_to_check)) // No access requirements, allow it. return TRUE if(!length(access)) @@ -150,7 +144,7 @@ accesscard = computer.computer_id_slot?.GetID() if(!accesscard) - if(loud) + if(loud && user) to_chat(user, span_danger("\The [computer] flashes an \"RFID Error - Unable to scan ID\" warning.")) return FALSE access = accesscard.GetAccess() @@ -159,7 +153,7 @@ if(singular_access in access) //For loop checks every individual access entry in the access list. If the user's ID has access to any entry, then we're good. return TRUE - if(loud) + if(loud && user) to_chat(user, span_danger("\The [computer] flashes an \"Access Denied\" warning.")) return FALSE @@ -174,7 +168,7 @@ /datum/computer_file/program/proc/on_start(mob/living/user) SHOULD_CALL_PARENT(TRUE) if(can_run(user, loud = TRUE)) - if(requires_ntnet) + if(program_flags & PROGRAM_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"]") return TRUE @@ -193,12 +187,12 @@ if(src == computer.active_program) computer.active_program = null - if(computer.enabled) - computer.update_tablet_open_uis(usr) + if(!QDELETED(computer) && computer.enabled) + INVOKE_ASYNC(computer, TYPE_PROC_REF(/obj/item/modular_computer, update_tablet_open_uis), user) if(src in computer.idle_threads) computer.idle_threads.Remove(src) - if(requires_ntnet) + if(program_flags & PROGRAM_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"]") @@ -208,7 +202,7 @@ ///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) + if(program_flags & PROGRAM_HEADER) return kill_program() computer.idle_threads.Add(src) @@ -217,5 +211,3 @@ computer.update_tablet_open_uis(usr) computer.update_appearance(UPDATE_ICON) return TRUE - -#undef PROGRAM_BASIC_CELL_USE diff --git a/code/modules/modular_computers/file_system/programs/airestorer.dm b/code/modules/modular_computers/file_system/programs/airestorer.dm index 4f24b2c61d8727..9fc51a00f57121 100644 --- a/code/modules/modular_computers/file_system/programs/airestorer.dm +++ b/code/modules/modular_computers/file_system/programs/airestorer.dm @@ -1,14 +1,12 @@ /datum/computer_file/program/ai_restorer filename = "ai_restore" filedesc = "AI Manager & Restorer" - category = PROGRAM_CATEGORY_SCI - program_icon_state = "generic" + downloader_category = PROGRAM_CATEGORY_SCIENCE + program_open_overlay = "generic" extended_desc = "Firmware Restoration Kit, capable of reconstructing damaged AI systems. Requires direct AI connection via intellicard slot." size = 12 - requires_ntnet = FALSE - usage_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP - transfer_access = list(ACCESS_RD) - available_on_ntnet = TRUE + can_run_on_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP + download_access = list(ACCESS_RD) tgui_id = "NtosAiRestorer" program_icon = "laptop-code" @@ -106,7 +104,7 @@ var/mob/living/silicon/ai/A = stored_card.AI if(A && A.health < 100) restoring = TRUE - A.notify_ghost_cloning("Your core files are being restored!", source = computer) + A.notify_revival("Your core files are being restored!", source = computer) return TRUE if("PRG_eject") if(stored_card) diff --git a/code/modules/modular_computers/file_system/programs/alarm.dm b/code/modules/modular_computers/file_system/programs/alarm.dm index c1aedb9d5d99b0..86452eb45d0ffc 100644 --- a/code/modules/modular_computers/file_system/programs/alarm.dm +++ b/code/modules/modular_computers/file_system/programs/alarm.dm @@ -1,11 +1,11 @@ /datum/computer_file/program/alarm_monitor filename = "alarmmonitor" filedesc = "Canary" - category = PROGRAM_CATEGORY_ENGI + downloader_category = PROGRAM_CATEGORY_ENGINEERING ui_header = "alarm_green.gif" - program_icon_state = "alert-green" + program_open_overlay = "alert-green" extended_desc = "This program provides visual interface for a station's alarm system." - requires_ntnet = 1 + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET size = 4 tgui_id = "NtosStationAlertConsole" program_icon = "bell" @@ -37,12 +37,12 @@ has_alert = (length(alert_control.listener.alarms) > 0) if(!has_alert) - program_icon_state = "alert-green" + program_open_overlay = "alert-green" ui_header = "alarm_green.gif" else // If we don't know the status, assume the worst. // Technically we should never have anything other than a truthy or falsy value // but this will allow for unknown values to fall through to be an actual alert. - program_icon_state = "alert-red" + program_open_overlay = "alert-red" ui_header = "alarm_red.gif" update_computer_icon() // Always update the icon after we check our conditional because we might've changed it diff --git a/code/modules/modular_computers/file_system/programs/antagonist/contractor_program.dm b/code/modules/modular_computers/file_system/programs/antagonist/contractor_program.dm new file mode 100644 index 00000000000000..36fbc8a273bb16 --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/antagonist/contractor_program.dm @@ -0,0 +1,225 @@ +/datum/computer_file/program/contract_uplink + filename = "contractor uplink" + filedesc = "Syndicate Contractor Uplink" + extended_desc = "A standard, Syndicate issued system for handling important contracts while on the field." + program_open_overlay = "contractor-assign" + program_icon = "tasks" + size = 10 + + program_flags = PROGRAM_UNIQUE_COPY + can_run_on_flags = PROGRAM_PDA //this is all we've got sprites for :sob: + undeletable = TRUE + tgui_id = "SyndicateContractor" + + ///The traitor datum stored on the program. Starts off as null and is set by the player. + var/datum/antagonist/traitor/traitor_data + ///The error screen sent to the UI so they can show the player. + var/error = "" + ///Boolean on whether the UI is on the Information screen. + var/info_screen = TRUE + ///Boolean on whether the program is being loaded for the first time, for a unique screen animation. + var/first_load = TRUE + +/datum/computer_file/program/contract_uplink/clone() + var/datum/computer_file/program/contract_uplink/temp = ..() + temp.traitor_data = traitor_data + return temp + +/datum/computer_file/program/contract_uplink/Destroy(force) + traitor_data = null + return ..() + +/datum/computer_file/program/contract_uplink/ui_act(action, params) + . = ..() + if(.) + return + + var/mob/living/user = usr + + // NOVA EDIT ADDITION START + var/obj/item/modular_computer/pda/contractor/uplink_computer = computer + if(!istype(uplink_computer)) + return + // NOVA EDIT ADDITION END + + switch(action) + if("PRG_contract-accept") + var/contract_id = text2num(params["contract_id"]) + uplink_computer.opfor_data.contractor_hub.assigned_contracts[contract_id].status = CONTRACT_STATUS_ACTIVE // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.assigned_contracts[contract_id].status = CONTRACT_STATUS_ACTIVE + uplink_computer.opfor_data.contractor_hub.current_contract = uplink_computer.opfor_data.contractor_hub.assigned_contracts[contract_id] // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.current_contract + program_open_overlay = "contractor-contract" + return TRUE + + if("PRG_login") + /* NOVA EDIT REMOVAL START + var/datum/antagonist/traitor/traitor_user = user.mind.has_antag_datum(/datum/antagonist/traitor) + if(!traitor_user) + error = "UNAUTHORIZED USER" + return TRUE + + traitor_data = traitor_user + if(!traitor_data.uplink_handler.contractor_hub) + traitor_data.uplink_handler.contractor_hub = new + traitor_data.uplink_handler.contractor_hub.create_contracts(traitor_user.owner) + user.playsound_local(user, 'sound/effects/contractstartup.ogg', 100, FALSE) + program_open_overlay = "contractor-contractlist" + NOVA EDIT REMOVAL END */ + // NOVA EDIT ADDITION START + if(!user.mind.opposing_force) + var/datum/opposing_force/opposing_force = new(user.mind) + user.mind.opposing_force = opposing_force + SSopposing_force.new_opfor(opposing_force) + var/datum/opposing_force/opfor_data = user.mind.opposing_force + + if (!opfor_data) // Just in case + return FALSE + // Only play greet sound, and handle contractor hub when assigning for the first time. + if (!opfor_data.contractor_hub) + user.playsound_local(user, 'sound/effects/contractstartup.ogg', 100, FALSE) + opfor_data.contractor_hub = new + opfor_data.contractor_hub.create_hub_items() + + // Stops any topic exploits such as logging in multiple times on a single system. + if (!assigned) + opfor_data.contractor_hub.create_contracts(opfor_data.mind_reference) + + uplink_computer.opfor_data = opfor_data + + program_open_overlay = "contractor-contractlist" + assigned = TRUE + // NOVA EDIT ADDITION END + return TRUE + + if("PRG_call_extraction") + if (uplink_computer.opfor_data.contractor_hub.current_contract.status != CONTRACT_STATUS_EXTRACTING) // NOVA EDIT CHANGE - ORIGINAL: if (traitor_data.uplink_handler.contractor_hub.current_contract.status != CONTRACT_STATUS_EXTRACTING) + if (uplink_computer.opfor_data.contractor_hub.current_contract.handle_extraction(user)) // NOVA EDIT CHANGE - ORIGINAL: if (traitor_data.uplink_handler.contractor_hub.current_contract.handle_extraction(user)) + user.playsound_local(user, 'sound/effects/confirmdropoff.ogg', 100, TRUE) + uplink_computer.opfor_data.contractor_hub.current_contract.status = CONTRACT_STATUS_EXTRACTING // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.current_contract.status = CONTRACT_STATUS_EXTRACTING + + program_open_overlay = "contractor-extracted" + else + user.playsound_local(user, 'sound/machines/uplinkerror.ogg', 50) + error = "Either both you or your target aren't at the dropoff location, or the pod hasn't got a valid place to land. Clear space, or make sure you're both inside." + else + user.playsound_local(user, 'sound/machines/uplinkerror.ogg', 50) + error = "Already extracting... Place the target into the pod. If the pod was destroyed, this contract is no longer possible." + + return TRUE + if("PRG_contract_abort") + var/contract_id = uplink_computer.opfor_data.contractor_hub.current_contract.id // NOVA EDIT CHANGE - ORIGINAL: var/contract_id = traitor_data.uplink_handler.contractor_hub.current_contract.id + + uplink_computer.opfor_data.contractor_hub.current_contract = null // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.current_contract = null + uplink_computer.opfor_data.contractor_hub.assigned_contracts[contract_id].status = CONTRACT_STATUS_ABORTED // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.assigned_contracts[contract_id].status = CONTRACT_STATUS_ABORTED + + program_open_overlay = "contractor-contractlist" + + return TRUE + if("PRG_redeem_TC") + if (uplink_computer.opfor_data.contractor_hub.contract_TC_to_redeem) // NOVA EDIT CHANGE - ORIGINAL: if (traitor_data.uplink_handler.contractor_hub.contract_TC_to_redeem) + var/obj/item/stack/telecrystal/crystals = new /obj/item/stack/telecrystal(get_turf(user), uplink_computer.opfor_data.contractor_hub.contract_TC_to_redeem) // NOVA EDIT CHANGE - ORIGINAL: var/obj/item/stack/telecrystal/crystals = new /obj/item/stack/telecrystal(get_turf(user), traitor_data.uplink_handler.contractor_hub.contract_TC_to_redeem) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(H.put_in_hands(crystals)) + to_chat(H, span_notice("Your payment materializes into your hands!")) + else + to_chat(user, span_notice("Your payment materializes onto the floor.")) + + uplink_computer.opfor_data.contractor_hub.contract_TC_payed_out += uplink_computer.opfor_data.contractor_hub.contract_TC_to_redeem // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.contract_TC_payed_out += traitor_data.uplink_handler.contractor_hub.contract_TC_to_redeem + uplink_computer.opfor_data.contractor_hub.contract_TC_to_redeem = 0 // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.contract_TC_to_redeem = 0 + return TRUE + else + user.playsound_local(user, 'sound/machines/uplinkerror.ogg', 50) + return TRUE + if ("PRG_clear_error") + error = "" + return TRUE + if("PRG_set_first_load_finished") + first_load = FALSE + return TRUE + if("PRG_toggle_info") + info_screen = !info_screen + return TRUE + // NOVA EDIT ADDITION START + if ("buy_hub") + if (uplink_computer.opfor_data.mind_reference.current == user) + var/item = params["item"] + for (var/datum/contractor_item/hub_item in uplink_computer.opfor_data.contractor_hub.hub_items) + if (hub_item.name == item) + hub_item.handle_purchase(uplink_computer.opfor_data.contractor_hub, user) + else + error = "Invalid user... You weren't recognized as the user of this system." + // NOVA EDIT ADDITION END + + +/datum/computer_file/program/contract_uplink/ui_data(mob/user) + var/list/data = list() + var/obj/item/modular_computer/pda/contractor/uplink_computer = computer // NOVA EDIT ADDITION + + data["first_load"] = first_load + data["logged_in"] = uplink_computer?.opfor_data // NOVA EDIT CHANGE - ORIGINAL: data["logged_in"] = !!traitor_data + data["station_name"] = GLOB.station_name + data["info_screen"] = info_screen + data["error"] = error + + if(!uplink_computer?.opfor_data) // NOVA EDIT CHANGE - ORIGINAL: if(!traitor_data) + data["ongoing_contract"] = FALSE + data["extraction_enroute"] = FALSE + update_computer_icon() + return data + + var/datum/opposing_force/opfor_data = uplink_computer.opfor_data // NOVA EDIT ADDITION + data["ongoing_contract"] = !!opfor_data.contractor_hub.current_contract // NOVA EDIT CHANGE - ORIGINAL: + if(opfor_data.contractor_hub.current_contract) // NOVA EDIT CHANGE - ORIGINAL: if(traitor_data.uplink_handler.contractor_hub.current_contract) + program_open_overlay = "contractor-contract" + if (opfor_data.contractor_hub.current_contract.status == CONTRACT_STATUS_EXTRACTING) // NOVA EDIT CHANGE - ORIGINAL: if (traitor_data.uplink_handler.contractor_hub.current_contract.status == CONTRACT_STATUS_EXTRACTING) + data["extraction_enroute"] = TRUE + program_open_overlay = "contractor-extracted" + else + data["extraction_enroute"] = FALSE + var/turf/curr = get_turf(user) + var/turf/dropoff_turf + data["current_location"] = "[get_area_name(curr, TRUE)]" + for (var/turf/content in opfor_data.contractor_hub.current_contract.contract.dropoff.contents) // NOVA EDIT CHANGE - ORIGINAL: for (var/turf/content in traitor_data.uplink_handler.contractor_hub.current_contract.contract.dropoff.contents) + if (isturf(content)) + dropoff_turf = content + break + var/direction + if(curr.z == dropoff_turf.z) //Direction calculations for same z-level only + direction = uppertext(dir2text(get_dir(curr, dropoff_turf))) //Direction text (East, etc). Not as precise, but still helpful. + if(get_area(user) == opfor_data.contractor_hub.current_contract.contract.dropoff) // NOVA EDIT CHANGE - ORIGINAL: if(get_area(user) == traitor_data.uplink_handler.contractor_hub.current_contract.contract.dropoff) + direction = "LOCATION CONFIRMED" + else + direction = "???" + data["dropoff_direction"] = direction + data["redeemable_tc"] = opfor_data.contractor_hub.contract_TC_to_redeem // NOVA EDIT CHANGE - ORIGINAL: data["redeemable_tc"] = traitor_data.uplink_handler.contractor_hub.contract_TC_to_redeem + data["earned_tc"] = opfor_data.contractor_hub.contract_TC_payed_out // NOVA EDIT CHANGE - ORIGINAL: data["earned_tc"] = traitor_data.uplink_handler.contractor_hub.contract_TC_payed_out + data["contracts_completed"] = opfor_data.contractor_hub.contracts_completed // NOVA EDIT CHANGE - ORIGINAL: data["contracts_completed"] = traitor_data.uplink_handler.contractor_hub.contracts_completed + for (var/datum/syndicate_contract/contract in opfor_data.contractor_hub.assigned_contracts) // NOVA EDIT CHANGE - ORIGINAL: for (var/datum/syndicate_contract/contract in traitor_data.uplink_handler.contractor_hub.assigned_contracts) + if(!contract.contract) + stack_trace("Syndiate contract with null contract objective found in [opfor_data.mind_reference]'s contractor hub!") // NOVA EDIT CHANGE - ORIGINAL:stack_trace("Syndiate contract with null contract objective found in [traitor_data.owner]'s contractor hub!") + contract.status = CONTRACT_STATUS_ABORTED + continue + data["contracts"] += list(list( + "target" = contract.contract.target, + "target_rank" = contract.target_rank, + "payout" = contract.contract.payout, + "payout_bonus" = contract.contract.payout_bonus, + "dropoff" = contract.contract.dropoff, + "id" = contract.id, + "status" = contract.status, + "message" = contract.wanted_message + )) + // NOVA EDIT ADDITION START + data["contract_rep"] = opfor_data.contractor_hub.contract_rep + for (var/datum/contractor_item/hub_item in opfor_data.contractor_hub.hub_items) + data["contractor_hub_items"] += list(list( + "name" = hub_item.name, + "desc" = hub_item.desc, + "cost" = hub_item.cost, + "limited" = hub_item.limited, + "item_icon" = hub_item.item_icon + )) + // NOVA EDIT ADDITION END + + update_computer_icon() + return data 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 856cc9b6b02b37..d3b7e9d5b86f7d 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm @@ -1,13 +1,11 @@ /datum/computer_file/program/ntnet_dos filename = "ntn_dos" filedesc = "DoS Traffic Generator" - category = PROGRAM_CATEGORY_MISC - program_icon_state = "hostile" + downloader_category = PROGRAM_CATEGORY_DEVICE + program_open_overlay = "hostile" extended_desc = "This advanced script can perform denial of service attacks against NTNet quantum relays. The system administrator will probably notice this. Multiple devices can run this program together against same relay for increased effect" size = 20 - requires_ntnet = TRUE - available_on_ntnet = FALSE - available_on_syndinet = TRUE + program_flags = PROGRAM_ON_SYNDINET_STORE | PROGRAM_REQUIRES_NTNET tgui_id = "NtosNetDos" program_icon = "satellite-dish" @@ -42,7 +40,7 @@ /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) + for(var/obj/machinery/ntnet_relay/relays as anything in SSmachines.get_machines_by_type(/obj/machinery/ntnet_relay)) if(relays.uid == params["targid"]) target = relays break @@ -76,7 +74,7 @@ else data["target"] = FALSE data["relays"] = list() - for(var/obj/machinery/ntnet_relay/relays as anything in GLOB.ntnet_relays) + for(var/obj/machinery/ntnet_relay/relays as anything in SSmachines.get_machines_by_type(/obj/machinery/ntnet_relay)) data["relays"] += list(list("id" = relays.uid)) data["focus"] = target ? target.uid : null 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 88aa48d0c3124e..3e0ac275c1480c 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm @@ -1,13 +1,11 @@ /datum/computer_file/program/revelation filename = "revelation" filedesc = "Revelation" - category = PROGRAM_CATEGORY_MISC - program_icon_state = "hostile" + downloader_category = PROGRAM_CATEGORY_DEVICE + program_open_overlay = "hostile" extended_desc = "This virus can destroy hard drive of system it is executed on. It may be obfuscated to look like another non-malicious program. Once armed, it will destroy the system upon next execution." size = 13 - requires_ntnet = FALSE - available_on_ntnet = FALSE - available_on_syndinet = TRUE + program_flags = PROGRAM_ON_SYNDINET_STORE tgui_id = "NtosRevelation" program_icon = "magnet" var/armed = 0 diff --git a/code/modules/modular_computers/file_system/programs/arcade.dm b/code/modules/modular_computers/file_system/programs/arcade.dm index a51d3345d1018b..af46df8e2409c5 100644 --- a/code/modules/modular_computers/file_system/programs/arcade.dm +++ b/code/modules/modular_computers/file_system/programs/arcade.dm @@ -1,9 +1,9 @@ /datum/computer_file/program/arcade filename = "dsarcade" filedesc = "Donksoft Micro Arcade" - program_icon_state = "arcade" + program_open_overlay = "arcade" extended_desc = "This port of the classic game 'Outbomb Cuban Pete', redesigned to run on tablets, with thrilling graphics and chilling storytelling." - requires_ntnet = FALSE + downloader_category = PROGRAM_CATEGORY_GAMES size = 6 tgui_id = "NtosArcade" program_icon = "gamepad" @@ -18,7 +18,7 @@ var/player_mp = 10 var/ticket_count = 0 ///Shows what text is shown on the app, usually showing the log of combat actions taken by the player. - var/heads_up = "Nanotrasen says, winners make us money." + var/heads_up = "Symphionia says, winners make us money." var/boss_name = "Cuban Pete's Minion" ///Determines which boss image to use on the UI. var/boss_id = 1 @@ -30,7 +30,7 @@ heads_up = "You have crushed [boss_name]! Rejoice!" playsound(computer.loc, 'sound/arcade/win.ogg', 50) game_active = FALSE - program_icon_state = "arcade_off" + program_open_overlay = "arcade_off" if(istype(computer)) computer.update_appearance() ticket_count += 1 @@ -41,7 +41,7 @@ heads_up = "You have been defeated... how will the station survive?" playsound(computer.loc, 'sound/arcade/lose.ogg', 50) game_active = FALSE - program_icon_state = "arcade_off" + program_open_overlay = "arcade_off" if(istype(computer)) computer.update_appearance() user?.mind?.adjust_experience(/datum/skill/gaming, 10) @@ -163,7 +163,7 @@ player_hp = 30 player_mp = 10 heads_up = "You stand before [boss_name]! Prepare for battle!" - program_icon_state = "arcade" + program_open_overlay = "arcade" boss_id = rand(1,6) pause_state = FALSE if(istype(computer)) diff --git a/code/modules/modular_computers/file_system/programs/atmosscan.dm b/code/modules/modular_computers/file_system/programs/atmosscan.dm index 6264531428f370..fd520fbb385a52 100644 --- a/code/modules/modular_computers/file_system/programs/atmosscan.dm +++ b/code/modules/modular_computers/file_system/programs/atmosscan.dm @@ -6,8 +6,8 @@ /datum/computer_file/program/atmosscan filename = "atmosscan" filedesc = "AtmoZphere" - category = PROGRAM_CATEGORY_ENGI - program_icon_state = "air" + downloader_category = PROGRAM_CATEGORY_ENGINEERING + program_open_overlay = "air" extended_desc = "A small built-in sensor reads out the atmospheric conditions around the device." size = 4 tgui_id = "NtosGasAnalyzer" @@ -57,7 +57,7 @@ var/list/data = list() var/turf/turf = get_turf(computer) data["atmozphereMode"] = atmozphere_mode - data["clickAtmozphereCompatible"] = (computer.hardware_flag & PROGRAM_TABLET) + data["clickAtmozphereCompatible"] = (computer.hardware_flag & PROGRAM_PDA) switch (atmozphere_mode) //Null air wont cause errors, don't worry. if(ATMOZPHERE_SCAN_ENV) var/datum/gas_mixture/air = turf?.return_air() @@ -74,7 +74,7 @@ atmozphere_mode = ATMOZPHERE_SCAN_ENV UnregisterSignal(computer, COMSIG_ITEM_ATTACK_SELF_SECONDARY) return TRUE - if(!(computer.hardware_flag & PROGRAM_TABLET)) + if(!(computer.hardware_flag & PROGRAM_PDA)) computer.say("Device incompatible for scanning objects!") return FALSE 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 2a2e494c1eca88..00a8c98bba6f2c 100644 --- a/code/modules/modular_computers/file_system/programs/borg_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/borg_monitor.dm @@ -1,12 +1,12 @@ /datum/computer_file/program/borg_monitor filename = "siliconnect" filedesc = "SiliConnect" - category = PROGRAM_CATEGORY_SCI + downloader_category = PROGRAM_CATEGORY_SCIENCE ui_header = "borg_mon.gif" - program_icon_state = "generic" + program_open_overlay = "generic" extended_desc = "This program allows for remote monitoring of station cyborgs." - requires_ntnet = TRUE - transfer_access = list(ACCESS_ROBOTICS) + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET + download_access = list(ACCESS_ROBOTICS) size = 5 tgui_id = "NtosCyborgRemoteMonitor" program_icon = "project-diagram" @@ -128,7 +128,7 @@ usr.log_talk(message, LOG_PDA, tag="Cyborg Monitor Program: ID name \"[ID]\" to [R]") return TRUE -///This proc is used to determin if a borg should be shown in the list (based on the borg's scrambledcodes var). Syndicate version overrides this to show only syndicate borgs. +///This proc is used to determin if a borg should be shown in the list (based on the borg's scrambledcodes var). Symphionia version overrides this to show only syndicate borgs. /datum/computer_file/program/borg_monitor/proc/evaluate_borg(mob/living/silicon/robot/R) if(!is_valid_z_level(get_turf(computer), get_turf(R))) return FALSE @@ -148,14 +148,12 @@ /datum/computer_file/program/borg_monitor/syndicate filename = "roboverlord" filedesc = "Roboverlord" - category = PROGRAM_CATEGORY_SCI + downloader_category = PROGRAM_CATEGORY_SCIENCE ui_header = "borg_mon.gif" - program_icon_state = "generic" + program_open_overlay = "generic" extended_desc = "This program allows for remote monitoring of mission-assigned cyborgs." - requires_ntnet = FALSE - available_on_ntnet = FALSE - available_on_syndinet = TRUE - transfer_access = list() + program_flags = PROGRAM_ON_SYNDINET_STORE + download_access = list() /datum/computer_file/program/borg_monitor/syndicate/evaluate_borg(mob/living/silicon/robot/R) if(!is_valid_z_level(get_turf(computer), get_turf(R))) 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 cb7f6c288bb0ce..4bbad8d1d8ba52 100644 --- a/code/modules/modular_computers/file_system/programs/bounty_board.dm +++ b/code/modules/modular_computers/file_system/programs/bounty_board.dm @@ -1,10 +1,10 @@ /datum/computer_file/program/bounty_board filename = "bountyboard" filedesc = "Bounty Board Request Network" - category = PROGRAM_CATEGORY_SUPL - program_icon_state = "bountyboard" + downloader_category = PROGRAM_CATEGORY_SUPPLY + program_open_overlay = "bountyboard" extended_desc = "A multi-platform network for placing requests across the station, with payment across the network being possible.." - requires_ntnet = TRUE + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET size = 10 tgui_id = "NtosBountyBoard" ///Reference to the currently logged in user. diff --git a/code/modules/modular_computers/file_system/programs/budgetordering.dm b/code/modules/modular_computers/file_system/programs/budgetordering.dm index d2133697194335..564a349a502d58 100644 --- a/code/modules/modular_computers/file_system/programs/budgetordering.dm +++ b/code/modules/modular_computers/file_system/programs/budgetordering.dm @@ -1,11 +1,11 @@ /datum/computer_file/program/budgetorders filename = "orderapp" filedesc = "NT IRN" - category = PROGRAM_CATEGORY_SUPL - program_icon_state = "request" + downloader_category = PROGRAM_CATEGORY_SUPPLY + program_open_overlay = "request" extended_desc = "Nanotrasen Internal Requisition Network interface for supply purchasing using a department budget account." - requires_ntnet = TRUE - usage_flags = PROGRAM_LAPTOP | PROGRAM_TABLET + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET + can_run_on_flags = PROGRAM_LAPTOP | PROGRAM_PDA size = 10 tgui_id = "NtosCargo" ///Are you actually placing orders with it? @@ -303,7 +303,7 @@ if("toggleprivate") self_paid = !self_paid . = TRUE - //SKYRAT EDIT START + //NOVA EDIT START if("company_import_window") var/datum/component/armament/company_imports/gun_comp = computer.GetComponent(/datum/component/armament/company_imports) if(!gun_comp) @@ -312,7 +312,7 @@ gun_comp.parent_prog ||= src gun_comp.ui_interact(usr) . = TRUE - //SKYRAT EDIT END + //NOVA EDIT END if(.) post_signal(cargo_shuttle) diff --git a/code/modules/modular_computers/file_system/programs/card.dm b/code/modules/modular_computers/file_system/programs/card.dm index 529cf813d1bb94..c41aa8ae29a88f 100644 --- a/code/modules/modular_computers/file_system/programs/card.dm +++ b/code/modules/modular_computers/file_system/programs/card.dm @@ -1,11 +1,10 @@ /datum/computer_file/program/card_mod filename = "plexagonidwriter" filedesc = "Plexagon Access Management" - category = PROGRAM_CATEGORY_CREW - program_icon_state = "id" + downloader_category = PROGRAM_CATEGORY_EQUIPMENT + program_open_overlay = "id" extended_desc = "Program for programming employee ID cards to access parts of the station." - transfer_access = list(ACCESS_COMMAND) - requires_ntnet = 0 + download_access = list(ACCESS_COMMAND) size = 8 tgui_id = "NtosCard" program_icon = "id-card" diff --git a/code/modules/modular_computers/file_system/programs/cargoship.dm b/code/modules/modular_computers/file_system/programs/cargoship.dm index 462c17aba706fd..92c6e152f71218 100644 --- a/code/modules/modular_computers/file_system/programs/cargoship.dm +++ b/code/modules/modular_computers/file_system/programs/cargoship.dm @@ -1,8 +1,8 @@ /datum/computer_file/program/shipping filename = "shipping" filedesc = "GrandArk Exporter" - category = PROGRAM_CATEGORY_SUPL - program_icon_state = "shipping" + downloader_category = PROGRAM_CATEGORY_SUPPLY + program_open_overlay = "shipping" extended_desc = "A combination printer/scanner app that enables modular computers to print barcodes for easy scanning and shipping." size = 6 tgui_id = "NtosShipping" diff --git a/code/modules/modular_computers/NTNet/NTNRC/conversation.dm b/code/modules/modular_computers/file_system/programs/chatroom/conversation.dm similarity index 100% rename from code/modules/modular_computers/NTNet/NTNRC/conversation.dm rename to code/modules/modular_computers/file_system/programs/chatroom/conversation.dm diff --git a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm b/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm similarity index 98% rename from code/modules/modular_computers/file_system/programs/ntnrc_client.dm rename to code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm index aa780fc3cf8e31..1067c3f392dd2b 100644 --- a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm +++ b/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm @@ -7,13 +7,12 @@ /datum/computer_file/program/chatclient filename = "ntnrc_client" filedesc = "Chat Client" - category = PROGRAM_CATEGORY_CREW - program_icon_state = "command" + downloader_category = PROGRAM_CATEGORY_DEVICE + program_open_overlay = "command" extended_desc = "This program allows communication over NTNRC network" size = 8 - requires_ntnet = TRUE ui_header = "ntnrc_idle.gif" - available_on_ntnet = TRUE + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET tgui_id = "NtosNetChat" program_icon = "comment-alt" alert_able = TRUE diff --git a/code/modules/modular_computers/file_system/programs/coupon.dm b/code/modules/modular_computers/file_system/programs/coupon.dm new file mode 100644 index 00000000000000..72e3ff6ec06009 --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/coupon.dm @@ -0,0 +1,119 @@ +#define COUPON_PAPER_USE 1 +#define COUPON_TONER_USE 0.250 + +///A program that enables the user to redeem randomly generated coupons for several cargo packs (mostly goodies). +/datum/computer_file/program/coupon + filename = "couponmaster" + filedesc = "Coupon Master" + downloader_category = PROGRAM_CATEGORY_SUPPLY + extended_desc = "Program for receiving discounts for several cargo goodies. After redeeming a coupon, hit a photocopier with your PDA to print it." + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET + size = 5 + tgui_id = "NtosCouponMaster" + program_icon = "ticket" + can_run_on_flags = PROGRAM_PDA //It relies on the PDA messenger to let you know of new codes + detomatix_resistance = DETOMATIX_RESIST_MALUS + +/datum/computer_file/program/coupon/on_install() + . = ..() + ///set the discount_coupons list, which means SSmodular_computers will now begin to periodically produce new coupon codes. + LAZYINITLIST(SSmodular_computers.discount_coupons) + ADD_TRAIT(computer, TRAIT_MODPC_HALVED_DOWNLOAD_SPEED, REF(src)) //All that glitters is not gold + +/datum/computer_file/program/coupon/Destroy() + if(computer) + REMOVE_TRAIT(computer, TRAIT_MODPC_HALVED_DOWNLOAD_SPEED, REF(src)) + return ..() + +/datum/computer_file/program/coupon/ui_data(mob/user) + var/list/data = list() + data["printed_coupons"] = list() + data["redeemed_coupons"] = list() + data["valid_id"] = FALSE + var/obj/item/card/id/user_id = computer.computer_id_slot + if(user_id?.registered_account.add_to_accounts) + for(var/datum/coupon_code/coupon as anything in user_id.registered_account.redeemed_coupons) + var/list/coupon_data = list( + "goody" = initial(coupon.discounted_pack.name), + "discount" = coupon.discount*100, + ) + if(coupon.printed) + data["printed_coupons"] += list(coupon_data) + else + data["redeemed_coupons"] += list(coupon_data) + data["valid_id"] = TRUE + return data + +/datum/computer_file/program/coupon/ui_act(action, params, datum/tgui/ui) + var/obj/item/card/id/user_id = computer.computer_id_slot + if(!(user_id?.registered_account.add_to_accounts)) + return TRUE + switch(action) + if("redeem") + var/code = params["code"] + if(!length(code)) + return TRUE + var/datum/coupon_code/coupon = SSmodular_computers.discount_coupons[code] + if(isnull(coupon)) + user_id.registered_account.bank_card_talk("Invalid coupon code.", TRUE) + return TRUE + if(coupon.expires_in && coupon.expires_in < world.time) + user_id.registered_account.bank_card_talk("Expired coupon code.", TRUE) + return TRUE + if(coupon in user_id.registered_account.redeemed_coupons) + user_id.registered_account.bank_card_talk("Coupon [code] already redeemed.", TRUE) + return TRUE + coupon.copy(user_id.registered_account) + var/static/list/goodbye = list( + "Have a wonderful day.", + "Don't forget to print it.", + "Time to get shopping!", + "Enjoy your discount!", + "Congratulations!", + "Bye Bye~.", + ) + user_id.registered_account.bank_card_talk("Coupon [code] redeemed. [pick(goodbye)]", TRUE) + //Well, guess you're redeeming something else too. + if(prob(40) && computer.used_capacity < computer.max_capacity) + var/datum/computer_file/warez = new() + warez.filename = random_string(rand(6, 12), GLOB.alphabet + GLOB.alphabet_upper + GLOB.numerals) + warez.filetype = pick("DAT", "XXX", "TMP", "FILE", "MNT", "MINER", "SYS", "PNG.EXE") + warez.size = min(rand(1, 4), computer.max_capacity - computer.used_capacity) + if(prob(25)) + warez.undeletable = TRUE + computer.store_file(warez) + +/** + * Normally, modular PCs can be print paper already, but I find this additional step + * to be less lazy and fitting to the "I gotta go print it before it expires" aspect of it. + */ +/datum/computer_file/program/coupon/tap(atom/tapped_atom, mob/living/user, params) + if(!istype(tapped_atom, /obj/machinery/photocopier)) + return FALSE + var/obj/item/card/id/user_id = computer.computer_id_slot + if(!(user_id?.registered_account)) + computer.balloon_alert(user, "no bank account found!") + return TRUE + var/obj/machinery/photocopier/copier = tapped_atom + if(copier.check_busy(user)) + return TRUE + var/num_coupons = 0 + for(var/datum/coupon_code/coupon as anything in user_id.registered_account.redeemed_coupons) + if(!coupon.printed) + num_coupons++ + if(!num_coupons) + computer.balloon_alert(user, "no coupon available!") + return TRUE + copier.do_copies(CALLBACK(src, PROC_REF(print_coupon), user_id.registered_account), user, COUPON_PAPER_USE, COUPON_TONER_USE, num_coupons) + return TRUE + +/datum/computer_file/program/coupon/proc/print_coupon(datum/bank_account/account) + var/datum/coupon_code/coupon + for(var/datum/coupon_code/possible_coupon as anything in account.redeemed_coupons) + if(!possible_coupon.printed) + coupon = possible_coupon + break + return coupon?.generate() + +#undef COUPON_PAPER_USE +#undef COUPON_TONER_USE diff --git a/code/modules/modular_computers/file_system/programs/crewmanifest.dm b/code/modules/modular_computers/file_system/programs/crewmanifest.dm index cdd05d6b4c64f0..f7e3df473eaa45 100644 --- a/code/modules/modular_computers/file_system/programs/crewmanifest.dm +++ b/code/modules/modular_computers/file_system/programs/crewmanifest.dm @@ -1,11 +1,11 @@ /datum/computer_file/program/crew_manifest filename = "plexagoncrew" filedesc = "Plexagon Crew List" - category = PROGRAM_CATEGORY_CREW - program_icon_state = "id" + downloader_category = PROGRAM_CATEGORY_SECURITY + program_open_overlay = "id" extended_desc = "Program for viewing and printing the current crew manifest" - transfer_access = list(ACCESS_SECURITY, ACCESS_COMMAND) - requires_ntnet = TRUE + download_access = list(ACCESS_SECURITY, ACCESS_COMMAND) + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET size = 4 tgui_id = "NtosCrewManifest" program_icon = "clipboard-list" diff --git a/code/modules/modular_computers/file_system/programs/emojipedia.dm b/code/modules/modular_computers/file_system/programs/emojipedia.dm index 277311491a7a66..6aa81b506d559e 100644 --- a/code/modules/modular_computers/file_system/programs/emojipedia.dm +++ b/code/modules/modular_computers/file_system/programs/emojipedia.dm @@ -2,8 +2,8 @@ /datum/computer_file/program/emojipedia filename = "emojipedia" filedesc = "EmojiPedia" - category = PROGRAM_CATEGORY_CREW // we want everyone to be able to access this application, since everyone can send emoji via PDA messages - program_icon_state = "generic" + downloader_category = PROGRAM_CATEGORY_DEVICE // we want everyone to be able to access this application, since everyone can send emoji via PDA messages + program_open_overlay = "generic" extended_desc = "This program allows you to view all the emojis you can send via PDA messages." size = 3 tgui_id = "NtosEmojipedia" 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 50fa29ccd5c47e..c91335155077d1 100644 --- a/code/modules/modular_computers/file_system/programs/file_browser.dm +++ b/code/modules/modular_computers/file_system/programs/file_browser.dm @@ -2,10 +2,9 @@ filename = "filemanager" filedesc = "File Manager" extended_desc = "This program allows management of files." - program_icon_state = "generic" + program_open_overlay = "generic" size = 8 - requires_ntnet = FALSE - available_on_ntnet = FALSE + program_flags = NONE undeletable = TRUE tgui_id = "NtosFileManager" program_icon = "folder" diff --git a/code/modules/modular_computers/file_system/programs/frontier.dm b/code/modules/modular_computers/file_system/programs/frontier.dm index 9c6e33bcde9716..884e635364c47b 100644 --- a/code/modules/modular_computers/file_system/programs/frontier.dm +++ b/code/modules/modular_computers/file_system/programs/frontier.dm @@ -1,14 +1,14 @@ /datum/computer_file/program/scipaper_program filename = "ntfrontier" filedesc = "NT Frontier" - category = PROGRAM_CATEGORY_SCI + downloader_category = PROGRAM_CATEGORY_SCIENCE extended_desc = "Scientific paper publication and navigation software." - requires_ntnet = TRUE + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET size = 12 - program_icon_state = "research" + program_open_overlay = "research" tgui_id = "NtosScipaper" program_icon = "paper-plane" - transfer_access = list(ACCESS_ORDNANCE) + download_access = list(ACCESS_ORDNANCE) var/datum/techweb/linked_techweb /// Unpublished, temporary paper datum. @@ -65,9 +65,9 @@ singular_partner["path"] = partner.type singular_partner["boostedNodes"] = list() singular_partner["acceptedExperiments"] = list() - for (var/node_id in partner.boosted_nodes) + for (var/node_id in partner.boostable_nodes) var/datum/techweb_node/node = SSresearch.techweb_node_by_id(node_id) - singular_partner["boostedNodes"] += list(list("name" = node.display_name, "discount" = partner.boosted_nodes[node_id], "id"=node_id)) + singular_partner["boostedNodes"] += list(list("name" = node.display_name, "discount" = partner.boostable_nodes[node_id], "id" = node_id)) for (var/datum/experiment/ordnance/ordnance_experiment as anything in partner.accepted_experiments) singular_partner["acceptedExperiments"] += initial(ordnance_experiment.name) parsed_partners += list(singular_partner) @@ -154,7 +154,7 @@ data["purchaseableBoosts"][partner.type] = list() for(var/node_id in linked_techweb.get_available_nodes()) // Not from our partner - if(!(node_id in partner.boosted_nodes)) + if(!(node_id in partner.boostable_nodes)) continue if(!partner.allowed_to_boost(linked_techweb, node_id)) continue diff --git a/code/modules/modular_computers/file_system/programs/jobmanagement.dm b/code/modules/modular_computers/file_system/programs/jobmanagement.dm index 973dbf3c764407..0db91c31ac6941 100644 --- a/code/modules/modular_computers/file_system/programs/jobmanagement.dm +++ b/code/modules/modular_computers/file_system/programs/jobmanagement.dm @@ -4,11 +4,11 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) /datum/computer_file/program/job_management filename = "plexagoncore" filedesc = "Plexagon HR Core" - category = PROGRAM_CATEGORY_CREW - program_icon_state = "id" + downloader_category = PROGRAM_CATEGORY_EQUIPMENT + program_open_overlay = "id" extended_desc = "Program for viewing and changing job slot availability." - transfer_access = list(ACCESS_COMMAND) - requires_ntnet = TRUE + download_access = list(ACCESS_COMMAND) + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET size = 4 tgui_id = "NtosJobManager" program_icon = "address-book" @@ -34,10 +34,10 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) return FALSE if(job.job_flags & JOB_CANNOT_OPEN_SLOTS) return FALSE - // SKYRAT EDIT ADDITION START + // NOVA EDIT ADDITION START if(job.veteran_only) return FALSE - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END return TRUE diff --git a/code/modules/modular_computers/file_system/programs/mafia_ntos.dm b/code/modules/modular_computers/file_system/programs/mafia_ntos.dm index 7bd5b81a240314..c970349bd2070b 100644 --- a/code/modules/modular_computers/file_system/programs/mafia_ntos.dm +++ b/code/modules/modular_computers/file_system/programs/mafia_ntos.dm @@ -1,9 +1,9 @@ /datum/computer_file/program/mafia filename = "mafia" filedesc = "Mafia" - program_icon_state = "mafia" + program_open_overlay = "mafia" extended_desc = "A program that allows you to play the infamous Mafia game, straight from your Modular PC." - requires_ntnet = FALSE + downloader_category = PROGRAM_CATEGORY_GAMES size = 6 tgui_id = "NtosMafiaPanel" program_icon = "user-secret" @@ -16,11 +16,11 @@ /datum/computer_file/program/mafia/Destroy(force) var/datum/mafia_controller/game = GLOB.mafia_game if(!game) - return + return ..() UnregisterSignal(game, COMSIG_MAFIA_GAME_END) - var/datum/mafia_role/pda_role = game.player_role_lookup[computer] + var/datum/mafia_role/pda_role = game.get_role_player(computer) if(!pda_role) - return + return ..() game.send_message(span_notice("[pda_role.body] has deleted the game from their PDA, and therefore has left the game.")) pda_role.kill(game) return ..() @@ -60,7 +60,7 @@ SIGNAL_HANDLER RegisterSignal(game, COMSIG_MAFIA_GAME_END, PROC_REF(on_game_end)) ui_header = "mafia.gif" - if(game.player_role_lookup[computer]) + if(game.get_role_player(computer)) alert_pending = TRUE computer.alert_call(src, "Mafia game started!") 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 25a2d1ad941bc3..5cd31293f77e36 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 @@ -6,5 +6,4 @@ */ /datum/computer_file/program/maintenance filetype = "MNT" - available_on_ntnet = FALSE - unique_copy = TRUE + program_flags = PROGRAM_UNIQUE_COPY 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 50276a1bcd811c..be13d01ad27534 100644 --- a/code/modules/modular_computers/file_system/programs/maintenance/camera.dm +++ b/code/modules/modular_computers/file_system/programs/maintenance/camera.dm @@ -1,11 +1,11 @@ /datum/computer_file/program/maintenance/camera filename = "camera_app" filedesc = "Camera" - program_icon_state = "camera" - category = PROGRAM_CATEGORY_MISC + program_open_overlay = "camera" + downloader_category = PROGRAM_CATEGORY_EQUIPMENT extended_desc = "This program allows the taking of pictures." size = 4 - usage_flags = PROGRAM_TABLET + can_run_on_flags = PROGRAM_PDA tgui_id = "NtosCamera" program_icon = "camera" 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 9f8971fb7fa5c3..25baa43b8f5c22 100644 --- a/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm +++ b/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm @@ -1,8 +1,8 @@ /datum/computer_file/program/maintenance/modsuit_control filename = "modsuit_control" filedesc = "MODsuit Control" - program_icon_state = "modsuit_control" - category = PROGRAM_CATEGORY_SCI + program_open_overlay = "modsuit_control" + downloader_category = PROGRAM_CATEGORY_EQUIPMENT extended_desc = "This program allows people to connect a MODsuit to it, allowing remote control." size = 2 tgui_id = "NtosMODsuit" 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 4c332d0d7d8034..7cf05170eb827a 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 @@ -1,10 +1,10 @@ /datum/computer_file/program/maintenance/phys_scanner filename = "phys_scanner" filedesc = "Physical Scanner" - category = PROGRAM_CATEGORY_MISC + downloader_category = PROGRAM_CATEGORY_EQUIPMENT extended_desc = "This program allows the tablet to scan physical objects and display a data output." size = 2 - usage_flags = PROGRAM_TABLET + can_run_on_flags = PROGRAM_PDA tgui_id = "NtosPhysScanner" program_icon = "barcode" /// Information from the last scanned person, to display on the app. diff --git a/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm b/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm index 637b2b33f16415..36cf60d10c11fe 100644 --- a/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm +++ b/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm @@ -8,14 +8,14 @@ /datum/computer_file/program/messenger filename = "nt_messenger" filedesc = "Direct Messenger" - category = PROGRAM_CATEGORY_MISC - program_icon_state = "command" + downloader_category = PROGRAM_CATEGORY_DEVICE + program_open_overlay = "command" 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. - header_program = TRUE - available_on_ntnet = FALSE - usage_flags = PROGRAM_TABLET + power_cell_use = NONE + program_flags = PROGRAM_HEADER | PROGRAM_RUNS_WITHOUT_POWER + can_run_on_flags = PROGRAM_PDA ui_header = "ntnrc_idle.gif" tgui_id = "NtosMessenger" program_icon = "comment-alt" @@ -602,9 +602,9 @@ return FALSE - // SKYRAT EDIT BEGIN - PDA messages show a visible message; again! + // NOVA EDIT BEGIN - PDA messages show a visible message; again! sender.visible_message(span_notice("[sender]'s PDA rings out with the soft sound of keypresses"), vision_distance = COMBAT_MESSAGE_RANGE) - // SKYRAT EDIT END + // NOVA EDIT END // Log in the talk log sender.log_talk(message, LOG_PDA, tag="[rigged ? "Rigged" : ""] PDA: [computer.saved_identification] to [signal.format_target()]") diff --git a/code/modules/modular_computers/file_system/programs/newscasterapp.dm b/code/modules/modular_computers/file_system/programs/newscasterapp.dm index 47e4f65d48f011..a19f38fb777220 100644 --- a/code/modules/modular_computers/file_system/programs/newscasterapp.dm +++ b/code/modules/modular_computers/file_system/programs/newscasterapp.dm @@ -1,13 +1,12 @@ /datum/computer_file/program/newscaster filename = "newscasterapp" filedesc = "Newscaster" - transfer_access = list(ACCESS_LIBRARY) - category = PROGRAM_CATEGORY_CREW - program_icon_state = "bountyboard" + download_access = list(ACCESS_LIBRARY) + downloader_category = PROGRAM_CATEGORY_GAMES + program_open_overlay = "bountyboard" extended_desc = "This program allows any user to access the Newscaster network from anywhere." size = 2 - requires_ntnet = TRUE - available_on_ntnet = TRUE + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET tgui_id = "NtosNewscaster" program_icon = "newspaper" ///The UI we use for the newscaster diff --git a/code/modules/modular_computers/file_system/programs/notepad.dm b/code/modules/modular_computers/file_system/programs/notepad.dm index 01afaa08c19e07..a2fdd5929e84f2 100644 --- a/code/modules/modular_computers/file_system/programs/notepad.dm +++ b/code/modules/modular_computers/file_system/programs/notepad.dm @@ -1,13 +1,13 @@ /datum/computer_file/program/notepad filename = "notepad" filedesc = "Notepad" - category = PROGRAM_CATEGORY_MISC - program_icon_state = "generic" + downloader_category = PROGRAM_CATEGORY_DEVICE + program_open_overlay = "generic" extended_desc = "Jot down your work-safe thoughts and what not." size = 2 tgui_id = "NtosNotepad" program_icon = "book" - usage_flags = PROGRAM_TABLET + can_run_on_flags = PROGRAM_ALL var/written_note = "Congratulations on your station upgrading to the new NtOS and Thinktronic based collaboration effort, \ bringing you the best in electronics and software since 2467!\n\ 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 8724375d07bbac..abaf03fa1cc39c 100644 --- a/code/modules/modular_computers/file_system/programs/nt_pay.dm +++ b/code/modules/modular_computers/file_system/programs/nt_pay.dm @@ -1,13 +1,13 @@ /datum/computer_file/program/nt_pay filename = "ntpay" filedesc = "Nanotrasen Pay System" - category = PROGRAM_CATEGORY_MISC - program_icon_state = "generic" + downloader_category = PROGRAM_CATEGORY_DEVICE + program_open_overlay = "generic" extended_desc = "An application that locally (in your sector) helps to transfer money or track your expenses and profits." size = 2 tgui_id = "NtosPay" program_icon = "money-bill-wave" - usage_flags = PROGRAM_ALL + can_run_on_flags = PROGRAM_ALL ///Reference to the currently logged in user. var/datum/bank_account/current_user ///Pay token, by which we can send credits diff --git a/code/modules/modular_computers/file_system/programs/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/ntdownloader.dm index c9723d905b5f1a..8c5f641fc0da5e 100644 --- a/code/modules/modular_computers/file_system/programs/ntdownloader.dm +++ b/code/modules/modular_computers/file_system/programs/ntdownloader.dm @@ -1,32 +1,39 @@ /datum/computer_file/program/ntnetdownload filename = "ntsoftwarehub" filedesc = "NT Software Hub" - program_icon_state = "generic" + program_open_overlay = "generic" extended_desc = "This program allows downloads of software from official NT repositories" undeletable = TRUE size = 4 - requires_ntnet = TRUE - available_on_ntnet = FALSE + program_flags = PROGRAM_REQUIRES_NTNET tgui_id = "NtosNetDownloader" program_icon = "download" + ///The program currently being downloaded. var/datum/computer_file/program/downloaded_file + ///Boolean on whether the `downloaded_file` is being downloaded from the Syndicate store, + ///in which case it will appear as 'ENCRYPTED' in logs, rather than display file name. var/hacked_download = FALSE - var/download_completion = FALSE //GQ of downloaded data. - var/download_netspeed = 0 - var/downloaderror = "" + ///How much of the data has been downloaded. + var/download_completion + ///The error message being displayed to the user, if necessary. Null if there isn't one. + var/downloaderror + ///The list of categories to display in the UI, in order of which they appear. var/static/list/show_categories = list( - PROGRAM_CATEGORY_CREW, - PROGRAM_CATEGORY_ENGI, - PROGRAM_CATEGORY_SCI, - PROGRAM_CATEGORY_SUPL, - PROGRAM_CATEGORY_MISC, + PROGRAM_CATEGORY_DEVICE, + PROGRAM_CATEGORY_EQUIPMENT, + PROGRAM_CATEGORY_GAMES, + PROGRAM_CATEGORY_SECURITY, + PROGRAM_CATEGORY_ENGINEERING, + PROGRAM_CATEGORY_SUPPLY, + PROGRAM_CATEGORY_SCIENCE, ) /datum/computer_file/program/ntnetdownload/kill_program(mob/user) - . = ..() + abort_file_download() ui_header = null + . = ..() /datum/computer_file/program/ntnetdownload/proc/begin_file_download(filename) if(downloaded_file) @@ -38,7 +45,7 @@ return FALSE // Attempting to download antag only program, but without having emagged/syndicate computer. No. - if(PRG.available_on_syndinet && !(computer.obj_flags & EMAGGED)) + if((PRG.program_flags & PROGRAM_ON_SYNDINET_STORE) && !(computer.obj_flags & EMAGGED)) return FALSE if(!computer || !computer.can_store_file(PRG)) @@ -83,7 +90,7 @@ if(download_completion >= downloaded_file.size) complete_file_download() // Download speed according to connectivity state. NTNet server is assumed to be on unlimited speed so we're limited by our local connectivity - download_netspeed = 0 + var/download_netspeed // Speed defines are found in misc.dm switch(ntnet_status) if(NTNET_LOW_SIGNAL) @@ -92,7 +99,11 @@ download_netspeed = NTNETSPEED_HIGHSIGNAL if(NTNET_ETHERNET_SIGNAL) download_netspeed = NTNETSPEED_ETHERNET - download_completion += download_netspeed + if(download_netspeed) + if(HAS_TRAIT(computer, TRAIT_MODPC_HALVED_DOWNLOAD_SPEED)) + download_netspeed *= 0.5 + download_completion += download_netspeed + /datum/computer_file/program/ntnetdownload/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) switch(action) @@ -103,7 +114,6 @@ if("PRG_reseterror") if(downloaderror) download_completion = FALSE - download_netspeed = FALSE downloaded_file = null downloaderror = "" return TRUE @@ -121,7 +131,6 @@ data["downloadname"] = downloaded_file.filename data["downloaddesc"] = downloaded_file.filedesc data["downloadsize"] = downloaded_file.size - data["downloadspeed"] = download_netspeed data["downloadcompletion"] = round(download_completion, 0.1) data["disk_size"] = computer.max_capacity @@ -129,35 +138,27 @@ data["emagged"] = (computer.obj_flags & EMAGGED) var/list/repo = SSmodular_computers.available_antag_software | SSmodular_computers.available_station_software - var/list/program_categories = list() for(var/datum/computer_file/program/programs as anything in repo) - if(!(programs.category in program_categories)) - program_categories.Add(programs.category) data["programs"] += list(list( "icon" = programs.program_icon, "filename" = programs.filename, "filedesc" = programs.filedesc, "fileinfo" = programs.extended_desc, - "category" = programs.category, + "category" = programs.downloader_category, "installed" = !!computer.find_file_by_name(programs.filename), "compatible" = check_compatibility(programs), "size" = programs.size, - "access" = programs.can_run(user, transfer = TRUE, access = access), - "verifiedsource" = programs.available_on_ntnet, + "access" = programs.can_run(user, downloading = TRUE, access = access), + "verifiedsource" = !!(programs.program_flags & PROGRAM_ON_NTNET_STORE), )) - data["categories"] = show_categories & program_categories + data["categories"] = show_categories return data -/datum/computer_file/program/ntnetdownload/proc/check_compatibility(datum/computer_file/program/P) - var/hardflag = computer.hardware_flag - - if(P?.is_supported_by_hardware(hardware_flag = hardflag, loud = FALSE)) - return TRUE - return FALSE - -/datum/computer_file/program/ntnetdownload/kill_program(mob/user) - abort_file_download() - return ..() +///Checks if a provided `program_to_check` is compatible to be downloaded on our computer. +/datum/computer_file/program/ntnetdownload/proc/check_compatibility(datum/computer_file/program/program_to_check) + if(!program_to_check || !program_to_check.is_supported_by_hardware(hardware_flag = computer.hardware_flag, loud = FALSE)) + return FALSE + return TRUE 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 68c94e87e8d327..6fc1358ccafea0 100644 --- a/code/modules/modular_computers/file_system/programs/portrait_printer.dm +++ b/code/modules/modular_computers/file_system/programs/portrait_printer.dm @@ -12,12 +12,12 @@ /datum/computer_file/program/portrait_printer filename = "PortraitPrinter" filedesc = "Marlowe Treeby's Art Galaxy" - category = PROGRAM_CATEGORY_CREW - program_icon_state = "dummy" + downloader_category = PROGRAM_CATEGORY_EQUIPMENT + program_open_overlay = "dummy" extended_desc = "This program connects to a Spinward Sector community art site for viewing and printing art." - transfer_access = list(ACCESS_LIBRARY) - usage_flags = PROGRAM_CONSOLE - requires_ntnet = TRUE + download_access = list(ACCESS_LIBRARY) + can_run_on_flags = PROGRAM_CONSOLE + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET size = 9 tgui_id = "NtosPortraitPrinter" program_icon = "paint-brush" diff --git a/code/modules/modular_computers/file_system/programs/powermonitor.dm b/code/modules/modular_computers/file_system/programs/powermonitor.dm index e82821d75e4f2c..c5a8eba952b2ab 100644 --- a/code/modules/modular_computers/file_system/programs/powermonitor.dm +++ b/code/modules/modular_computers/file_system/programs/powermonitor.dm @@ -3,13 +3,13 @@ /datum/computer_file/program/power_monitor filename = "ampcheck" filedesc = "AmpCheck" - category = PROGRAM_CATEGORY_ENGI - program_icon_state = "power_monitor" + downloader_category = PROGRAM_CATEGORY_ENGINEERING + program_open_overlay = "power_monitor" extended_desc = "This program connects to sensors around the station to provide information about electrical systems" ui_header = "power_norm.gif" - transfer_access = list(ACCESS_ENGINEERING) - usage_flags = PROGRAM_CONSOLE - requires_ntnet = FALSE + download_access = list(ACCESS_ENGINEERING) + can_run_on_flags = PROGRAM_CONSOLE + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET size = 8 tgui_id = "NtosPowerMonitor" program_icon = "plug" diff --git a/code/modules/modular_computers/file_system/programs/radar.dm b/code/modules/modular_computers/file_system/programs/radar.dm index c230614339d498..8fdc38288a0b6e 100644 --- a/code/modules/modular_computers/file_system/programs/radar.dm +++ b/code/modules/modular_computers/file_system/programs/radar.dm @@ -1,12 +1,11 @@ /datum/computer_file/program/radar //generic parent that handles most of the process filename = "genericfinder" filedesc = "debug_finder" - category = PROGRAM_CATEGORY_CREW + downloader_category = PROGRAM_CATEGORY_EQUIPMENT ui_header = "borg_mon.gif" //DEBUG -- new icon before PR - program_icon_state = "radarntos" - requires_ntnet = TRUE - available_on_ntnet = FALSE - usage_flags = PROGRAM_LAPTOP | PROGRAM_TABLET + program_open_overlay = "radarntos" + program_flags = PROGRAM_REQUIRES_NTNET + can_run_on_flags = PROGRAM_LAPTOP | PROGRAM_PDA size = 5 tgui_id = "NtosRadar" ///List of trackable entities. Updated by the scan() proc. @@ -15,11 +14,11 @@ var/selected ///Used to store when the next scan is available. COOLDOWN_DECLARE(next_scan) - ///Used to keep track of the last value program_icon_state was set to, to prevent constant unnecessary update_appearance() calls + ///Used to keep track of the last value program_open_overlay was set to, to prevent constant unnecessary update_appearance() calls var/last_icon_state = "" - ///Used by the tgui interface, themed NT or Syndicate. + ///Used by the tgui interface, themed NT or Symphionia. var/arrowstyle = "ntosradarpointer.png" - ///Used by the tgui interface, themed for NT or Syndicate colors. + ///Used by the tgui interface, themed for NT or Symphionia colors. var/pointercolor = "green" /datum/computer_file/program/radar/on_start(mob/living/user) @@ -174,17 +173,17 @@ //We use SSfastprocess for the program icon state because it runs faster than process_tick() does. /datum/computer_file/program/radar/process() if(computer.active_program != src) - STOP_PROCESSING(SSfastprocess, src) //We're not the active program, it's time to stop. - return + //We're not the active program, it's time to stop. + return PROCESS_KILL if(!selected) return var/atom/movable/signal = find_atom() if(!trackable(signal)) - program_icon_state = "[initial(program_icon_state)]lost" - if(last_icon_state != program_icon_state) + program_open_overlay = "[initial(program_open_overlay)]lost" + if(last_icon_state != program_open_overlay) computer.update_appearance() - last_icon_state = program_icon_state + last_icon_state = program_open_overlay return var/here_turf = get_turf(computer) @@ -192,17 +191,17 @@ var/trackdistance = get_dist_euclidian(here_turf, target_turf) switch(trackdistance) if(0) - program_icon_state = "[initial(program_icon_state)]direct" + program_open_overlay = "[initial(program_open_overlay)]direct" if(1 to 12) - program_icon_state = "[initial(program_icon_state)]close" + program_open_overlay = "[initial(program_open_overlay)]close" if(13 to 24) - program_icon_state = "[initial(program_icon_state)]medium" + program_open_overlay = "[initial(program_open_overlay)]medium" if(25 to INFINITY) - program_icon_state = "[initial(program_icon_state)]far" + program_open_overlay = "[initial(program_open_overlay)]far" - if(last_icon_state != program_icon_state) + if(last_icon_state != program_open_overlay) computer.update_appearance() - last_icon_state = program_icon_state + last_icon_state = program_open_overlay computer.setDir(get_dir(here_turf, target_turf)) //We can use process_tick to restart fast processing, since the computer will be running this constantly either way. @@ -219,9 +218,8 @@ filename = "lifeline" filedesc = "Lifeline" extended_desc = "This program allows for tracking of crew members via their suit sensors." - requires_ntnet = TRUE - transfer_access = list(ACCESS_MEDICAL) - available_on_ntnet = TRUE + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET + download_access = list(ACCESS_MEDICAL) program_icon = "heartbeat" /datum/computer_file/program/radar/lifeline/find_atom() @@ -259,9 +257,8 @@ filename = "custodiallocator" filedesc = "Custodial Locator" extended_desc = "This program allows for tracking of custodial equipment." - requires_ntnet = TRUE - transfer_access = list(ACCESS_JANITOR) - available_on_ntnet = TRUE + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET + download_access = list(ACCESS_JANITOR) program_icon = "broom" size = 2 detomatix_resistance = DETOMATIX_RESIST_MINOR @@ -284,8 +281,8 @@ var/obj/structure/mop_bucket/janitorialcart/janicart = custodial_tools tool_name = "[janicart.name] - Water level: [janicart.reagents.total_volume] / [janicart.reagents.maximum_volume]" - if(istype(custodial_tools, /mob/living/simple_animal/bot/cleanbot)) - var/mob/living/simple_animal/bot/cleanbot/cleanbots = custodial_tools + if(istype(custodial_tools, /mob/living/basic/bot/cleanbot)) + var/mob/living/basic/bot/cleanbot/cleanbots = custodial_tools tool_name = "[cleanbots.name] - [cleanbots.bot_mode_flags & BOT_MODE_ON ? "Online" : "Offline"]" var/list/tool_information = list( @@ -302,12 +299,9 @@ /datum/computer_file/program/radar/fission360 filename = "fission360" filedesc = "Fission360" - category = PROGRAM_CATEGORY_MISC - program_icon_state = "radarsyndicate" + program_open_overlay = "radarsyndicate" extended_desc = "This program allows for tracking of nuclear authorization disks and warheads." - requires_ntnet = FALSE - available_on_ntnet = FALSE - available_on_syndinet = TRUE + program_flags = PROGRAM_ON_SYNDINET_STORE tgui_id = "NtosRadarSyndicate" program_icon = "bomb" arrowstyle = "ntosradarpointerS.png" diff --git a/code/modules/modular_computers/file_system/programs/records.dm b/code/modules/modular_computers/file_system/programs/records.dm index 9b5617364c0aa3..063c19d35e18bb 100644 --- a/code/modules/modular_computers/file_system/programs/records.dm +++ b/code/modules/modular_computers/file_system/programs/records.dm @@ -2,13 +2,13 @@ filename = "ntrecords" filedesc = "Records" extended_desc = "Allows the user to view several basic records from the crew." - category = PROGRAM_CATEGORY_MISC + downloader_category = PROGRAM_CATEGORY_SECURITY program_icon = "clipboard" - program_icon_state = "crew" + program_open_overlay = "crew" tgui_id = "NtosRecords" size = 4 - usage_flags = PROGRAM_TABLET | PROGRAM_LAPTOP - available_on_ntnet = FALSE + can_run_on_flags = PROGRAM_PDA | PROGRAM_LAPTOP + program_flags = NONE detomatix_resistance = DETOMATIX_RESIST_MINOR var/mode @@ -18,16 +18,16 @@ filename = "medrecords" program_icon = "book-medical" extended_desc = "Allows the user to view several basic medical records from the crew." - transfer_access = list(ACCESS_MEDICAL, ACCESS_FLAG_COMMAND) - available_on_ntnet = TRUE + download_access = list(ACCESS_MEDICAL, ACCESS_FLAG_COMMAND) + program_flags = PROGRAM_ON_NTNET_STORE mode = "medical" /datum/computer_file/program/records/security filedesc = "Security Records" filename = "secrecords" extended_desc = "Allows the user to view several basic security records from the crew." - transfer_access = list(ACCESS_SECURITY, ACCESS_FLAG_COMMAND) - available_on_ntnet = TRUE + download_access = list(ACCESS_SECURITY, ACCESS_FLAG_COMMAND) + program_flags = PROGRAM_ON_NTNET_STORE mode = "security" /datum/computer_file/program/records/proc/GetRecordsReadable() diff --git a/code/modules/modular_computers/file_system/programs/robocontrol.dm b/code/modules/modular_computers/file_system/programs/robocontrol.dm index 52bfafdcf8e97a..37ae20f52604d9 100644 --- a/code/modules/modular_computers/file_system/programs/robocontrol.dm +++ b/code/modules/modular_computers/file_system/programs/robocontrol.dm @@ -2,10 +2,10 @@ /datum/computer_file/program/robocontrol filename = "botkeeper" filedesc = "BotKeeper" - category = PROGRAM_CATEGORY_SCI - program_icon_state = "robot" + downloader_category = PROGRAM_CATEGORY_SCIENCE + program_open_overlay = "robot" extended_desc = "A remote controller used for giving basic commands to non-sentient robots." - requires_ntnet = TRUE + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET size = 6 tgui_id = "NtosRoboControl" program_icon = "robot" diff --git a/code/modules/modular_computers/file_system/programs/robotact.dm b/code/modules/modular_computers/file_system/programs/robotact.dm index e64691ccba2a26..d7a7122090de96 100644 --- a/code/modules/modular_computers/file_system/programs/robotact.dm +++ b/code/modules/modular_computers/file_system/programs/robotact.dm @@ -1,14 +1,13 @@ /datum/computer_file/program/robotact filename = "robotact" filedesc = "RoboTact" - category = PROGRAM_CATEGORY_SCI + downloader_category = PROGRAM_CATEGORY_SCIENCE extended_desc = "A built-in app for cyborg self-management and diagnostics." ui_header = "robotact.gif" //DEBUG -- new icon before PR - program_icon_state = "command" - requires_ntnet = FALSE - available_on_ntnet = FALSE + program_open_overlay = "command" + program_flags = NONE undeletable = TRUE - usage_flags = PROGRAM_TABLET + can_run_on_flags = PROGRAM_PDA size = 5 tgui_id = "NtosRobotact" program_icon = "terminal" @@ -21,7 +20,7 @@ if(.) var/obj/item/modular_computer/pda/silicon/tablet = computer if(tablet.device_theme == PDA_THEME_SYNDICATE) - program_icon_state = "command-syndicate" + program_open_overlay = "command-syndicate" return TRUE return FALSE diff --git a/code/modules/modular_computers/file_system/programs/secureye.dm b/code/modules/modular_computers/file_system/programs/secureye.dm index 6e3e69cdccfc51..44a560ccd1f37b 100644 --- a/code/modules/modular_computers/file_system/programs/secureye.dm +++ b/code/modules/modular_computers/file_system/programs/secureye.dm @@ -3,13 +3,13 @@ /datum/computer_file/program/secureye filename = "secureye" filedesc = "SecurEye" - category = PROGRAM_CATEGORY_MISC + downloader_category = PROGRAM_CATEGORY_SECURITY ui_header = "borg_mon.gif" - program_icon_state = "generic" + program_open_overlay = "generic" extended_desc = "This program allows access to standard security camera networks." - requires_ntnet = TRUE - transfer_access = list(ACCESS_SECURITY) - usage_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET + download_access = list(ACCESS_SECURITY) + can_run_on_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP size = 5 tgui_id = "NtosSecurEye" program_icon = "eye" @@ -34,17 +34,14 @@ ///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 +///Symphionia 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 + download_access = list() + can_run_on_flags = PROGRAM_ALL + program_flags = PROGRAM_ON_SYNDINET_STORE | PROGRAM_UNIQUE_COPY network = list("ss13", "mine", "rd", "labor", "ordnance", "minisat") spying = TRUE diff --git a/code/modules/modular_computers/file_system/programs/signalcommander.dm b/code/modules/modular_computers/file_system/programs/signalcommander.dm index e8140b62b17c2a..2032ad5461bb01 100644 --- a/code/modules/modular_computers/file_system/programs/signalcommander.dm +++ b/code/modules/modular_computers/file_system/programs/signalcommander.dm @@ -1,13 +1,13 @@ /datum/computer_file/program/signal_commander filename = "signaler" filedesc = "SignalCommander" - category = PROGRAM_CATEGORY_MISC - program_icon_state = "signal" + downloader_category = PROGRAM_CATEGORY_EQUIPMENT + program_open_overlay = "signal" extended_desc = "A small built-in frequency app that sends out signaller signals with the appropriate hardware." size = 2 tgui_id = "NtosSignaler" program_icon = "satellite-dish" - usage_flags = PROGRAM_TABLET | PROGRAM_LAPTOP + can_run_on_flags = PROGRAM_PDA | PROGRAM_LAPTOP ///What is the saved signal frequency? var/signal_frequency = FREQ_SIGNALER /// What is the saved signal code? 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 c68cffb3374013..9063e3e239db26 100644 --- a/code/modules/modular_computers/file_system/programs/skill_tracker.dm +++ b/code/modules/modular_computers/file_system/programs/skill_tracker.dm @@ -1,13 +1,13 @@ /datum/computer_file/program/skill_tracker filename = "skilltracker" filedesc = "ExperTrak Skill Tracker" - category = PROGRAM_CATEGORY_MISC - program_icon_state = "generic" + downloader_category = PROGRAM_CATEGORY_DEVICE + program_open_overlay = "generic" extended_desc = "Scan and view your current marketable job skills." size = 2 tgui_id = "NtosSkillTracker" program_icon = "medal" - usage_flags = PROGRAM_TABLET // Must be a handheld device to read read your chakras or whatever + can_run_on_flags = PROGRAM_PDA // Must be a handheld device to read read your chakras or whatever /datum/computer_file/program/skill_tracker/ui_data(mob/user) var/list/data = list() 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 0ba8a72140779f..5eef3120866830 100644 --- a/code/modules/modular_computers/file_system/programs/sm_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/sm_monitor.dm @@ -1,12 +1,12 @@ /datum/computer_file/program/supermatter_monitor filename = "ntcims" filedesc = "NT CIMS" - category = PROGRAM_CATEGORY_ENGI + downloader_category = PROGRAM_CATEGORY_ENGINEERING ui_header = "smmon_0.gif" - program_icon_state = "smmon_0" + program_open_overlay = "smmon_0" extended_desc = "Crystal Integrity Monitoring System, connects to specially calibrated supermatter sensors to provide information on the status of supermatter-based engines." - requires_ntnet = TRUE - transfer_access = list(ACCESS_CONSTRUCTION) + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET + download_access = list(ACCESS_CONSTRUCTION) size = 5 tgui_id = "NtosSupermatter" program_icon = "radiation" @@ -35,7 +35,7 @@ if(!user_turf) return for(var/obj/machinery/power/supermatter_crystal/sm as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/power/supermatter_crystal)) - //Exclude Syndicate owned, Delaminating, not within coverage, not on a tile. + //Exclude Symphionia owned, Delaminating, not within coverage, not on a tile. if (!sm.include_in_cims || !isturf(sm.loc) || !(is_station_level(sm.z) || is_mining_level(sm.z) || sm.z == user_turf.z)) continue supermatters += sm @@ -109,6 +109,6 @@ if(last_status != new_status) last_status = new_status ui_header = "smmon_[last_status].gif" - program_icon_state = "smmon_[last_status]" + program_open_overlay = "smmon_[last_status]" if(istype(computer)) computer.update_appearance() diff --git a/code/modules/modular_computers/file_system/programs/statusdisplay.dm b/code/modules/modular_computers/file_system/programs/statusdisplay.dm index 9350254f646511..ab5654ef49082b 100644 --- a/code/modules/modular_computers/file_system/programs/statusdisplay.dm +++ b/code/modules/modular_computers/file_system/programs/statusdisplay.dm @@ -2,15 +2,14 @@ filename = "statusdisplay" filedesc = "Status Display" program_icon = "signal" - program_icon_state = "generic" - requires_ntnet = TRUE + program_open_overlay = "generic" size = 1 extended_desc = "An app used to change the message on the station status displays." tgui_id = "NtosStatus" - usage_flags = PROGRAM_ALL - available_on_ntnet = FALSE + can_run_on_flags = PROGRAM_ALL + program_flags = PROGRAM_REQUIRES_NTNET var/upper_text = "" var/lower_text = "" @@ -68,7 +67,7 @@ post_status("alert", "bluealert") if(SEC_LEVEL_GREEN) post_status("alert", "greenalert") - // SKYRAT EDIT ADD START - Alert Levels + // NOVA EDIT ADD START - Alert Levels if(SEC_LEVEL_VIOLET) post_status("alert", "violetalert") if(SEC_LEVEL_ORANGE) @@ -77,7 +76,7 @@ post_status("alert", "amberalert") if(SEC_LEVEL_GAMMA) post_status("alert", "gammaalert") - // SKYRAT EDIT ADD END - Alert Levels + // NOVA EDIT ADD END - Alert Levels else post_status("alert", picture) diff --git a/code/modules/modular_computers/file_system/programs/techweb.dm b/code/modules/modular_computers/file_system/programs/techweb.dm index 77d0a0900e4a54..3d9af432b69267 100644 --- a/code/modules/modular_computers/file_system/programs/techweb.dm +++ b/code/modules/modular_computers/file_system/programs/techweb.dm @@ -1,15 +1,15 @@ /datum/computer_file/program/science filename = "experi_track" filedesc = "Nanotrasen Science Hub" - category = PROGRAM_CATEGORY_SCI - program_icon_state = "research" + downloader_category = PROGRAM_CATEGORY_SCIENCE + program_open_overlay = "research" extended_desc = "Connect to the internal science server in order to assist in station research efforts." - requires_ntnet = TRUE + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET size = 10 tgui_id = "NtosTechweb" program_icon = "atom" - required_access = list(ACCESS_COMMAND, ACCESS_RESEARCH) - transfer_access = list(ACCESS_RESEARCH) + run_access = list(ACCESS_COMMAND, ACCESS_RESEARCH) + download_access = list(ACCESS_RESEARCH) /// Reference to global science techweb var/datum/techweb/stored_research /// Access needed to lock/unlock the console 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 9bc15a1a00b906..5fdf1c8d365b47 100644 --- a/code/modules/modular_computers/file_system/programs/theme_selector.dm +++ b/code/modules/modular_computers/file_system/programs/theme_selector.dm @@ -2,12 +2,10 @@ filename = "themeify" filedesc = "Themeify" extended_desc = "This program allows configuration of your device's theme." - program_icon_state = "generic" + program_open_overlay = "generic" undeletable = TRUE size = 0 - header_program = TRUE - available_on_ntnet = TRUE - requires_ntnet = FALSE + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_HEADER tgui_id = "NtosThemeConfigure" program_icon = "paint-roller" diff --git a/code/modules/modular_computers/file_system/programs/wirecarp.dm b/code/modules/modular_computers/file_system/programs/wirecarp.dm index 712d1e92cdafeb..64ef7137b00062 100644 --- a/code/modules/modular_computers/file_system/programs/wirecarp.dm +++ b/code/modules/modular_computers/file_system/programs/wirecarp.dm @@ -1,13 +1,12 @@ /datum/computer_file/program/ntnetmonitor filename = "wirecarp" filedesc = "WireCarp" - category = PROGRAM_CATEGORY_MISC - program_icon_state = "comm_monitor" + downloader_category = PROGRAM_CATEGORY_SECURITY + program_open_overlay = "comm_monitor" extended_desc = "This program monitors stationwide NTNet network, provides access to logging systems, and allows for configuration changes" size = 12 - requires_ntnet = TRUE - required_access = list(ACCESS_NETWORK) //NETWORK CONTROL IS A MORE SECURE PROGRAM. - available_on_ntnet = TRUE + run_access = list(ACCESS_NETWORK) //NETWORK CONTROL IS A MORE SECURE PROGRAM. + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET tgui_id = "NtosNetMonitor" program_icon = "network-wired" @@ -20,7 +19,7 @@ SSmodular_computers.intrusion_detection_enabled = !SSmodular_computers.intrusion_detection_enabled return TRUE if("toggle_relay") - var/obj/machinery/ntnet_relay/target_relay = locate(params["ref"]) in GLOB.ntnet_relays + var/obj/machinery/ntnet_relay/target_relay = locate(params["ref"]) in SSmachines.get_machines_by_type(/obj/machinery/ntnet_relay) if(!istype(target_relay)) return target_relay.set_relay_enabled(!target_relay.relay_enabled) @@ -39,7 +38,7 @@ var/list/data = list() data["ntnetrelays"] = list() - for(var/obj/machinery/ntnet_relay/relays as anything in GLOB.ntnet_relays) + for(var/obj/machinery/ntnet_relay/relays as anything in SSmachines.get_machines_by_type(/obj/machinery/ntnet_relay)) var/list/relay_data = list() relay_data["is_operational"] = !!relays.is_operational relay_data["name"] = relays.name @@ -51,7 +50,7 @@ data["idsalarm"] = SSmodular_computers.intrusion_detection_alarm data["ntnetlogs"] = list() - for(var/i in SSmodular_computers.logs) + for(var/i in SSmodular_computers.modpc_logs) data["ntnetlogs"] += list(list("entry" = i)) data["tablets"] = list() diff --git a/code/modules/movespeed/modifiers/items.dm b/code/modules/movespeed/modifiers/items.dm index 433200e322319c..9fd3d051face1f 100644 --- a/code/modules/movespeed/modifiers/items.dm +++ b/code/modules/movespeed/modifiers/items.dm @@ -19,3 +19,6 @@ /datum/movespeed_modifier/shooting_assistant multiplicative_slowdown = 0.5 + +/datum/movespeed_modifier/binocs_wielded + multiplicative_slowdown = 1.5 diff --git a/code/modules/movespeed/modifiers/mobs.dm b/code/modules/movespeed/modifiers/mobs.dm index 49358223e3508b..b782f2fc9593d7 100644 --- a/code/modules/movespeed/modifiers/mobs.dm +++ b/code/modules/movespeed/modifiers/mobs.dm @@ -81,8 +81,8 @@ blacklisted_movetypes = FLOATING variable = TRUE -/datum/movespeed_modifier/shove - multiplicative_slowdown = SHOVE_SLOWDOWN_STRENGTH +/datum/movespeed_modifier/staggered + multiplicative_slowdown = STAGGERED_SLOWDOWN_STRENGTH /datum/movespeed_modifier/human_carry multiplicative_slowdown = HUMAN_CARRY_SLOWDOWN diff --git a/code/modules/movespeed/modifiers/status_effects.dm b/code/modules/movespeed/modifiers/status_effects.dm index 65245880ef42ba..4768f66a544f4f 100644 --- a/code/modules/movespeed/modifiers/status_effects.dm +++ b/code/modules/movespeed/modifiers/status_effects.dm @@ -53,3 +53,6 @@ /datum/movespeed_modifier/status_effect/midas_blight/gold multiplicative_slowdown = 2 + +/datum/movespeed_modifier/status_effect/guardian_shield + multiplicative_slowdown = 1 diff --git a/code/modules/pai/card.dm b/code/modules/pai/card.dm index a652b745c9e502..da3bfe4e0ce140 100644 --- a/code/modules/pai/card.dm +++ b/code/modules/pai/card.dm @@ -26,7 +26,6 @@ if(!pai.encrypt_mod) to_chat(user, span_alert("Encryption Key ports not configured.")) return - user.set_machine(src) pai.radio.attackby(used, user, params) to_chat(user, span_notice("You insert [used] into the [src].")) return @@ -35,7 +34,6 @@ /obj/item/pai_card/attack_self(mob/user) if(!in_range(src, user)) return - user.set_machine(src) ui_interact(user) /obj/item/pai_card/Destroy() @@ -234,7 +232,16 @@ playsound(src, 'sound/machines/ping.ogg', 20, TRUE) balloon_alert(user, "pAI assistance requested") var/mutable_appearance/alert_overlay = mutable_appearance('icons/obj/aicards.dmi', "pai") - notify_ghosts("[user] is requesting a pAI companion! Use the pAI button to submit yourself as one.", source = user, alert_overlay = alert_overlay, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "pAI Request!", ignore_key = POLL_IGNORE_PAI) + + notify_ghosts( + "[user] is requesting a pAI companion! Use the pAI button to submit yourself as one.", + source = user, + header = "pAI Request!", + alert_overlay = alert_overlay, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ignore_key = POLL_IGNORE_PAI, + ) + addtimer(VARSET_CALLBACK(src, request_spam, FALSE), PAI_SPAM_TIME, TIMER_UNIQUE | TIMER_STOPPABLE | TIMER_CLIENT_TIME | TIMER_DELETE_ME) return TRUE diff --git a/code/modules/pai/debug.dm b/code/modules/pai/debug.dm index dde6fc4be058a3..089dcedfabba55 100644 --- a/code/modules/pai/debug.dm +++ b/code/modules/pai/debug.dm @@ -28,7 +28,7 @@ card.set_personality(pai) if(SSpai.candidates[key]) SSpai.candidates -= key - SSblackbox.record_feedback("tally", "admin_verb", 1, "Make pAI") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + BLACKBOX_LOG_ADMIN_VERB("Make pAI") /** * Creates a new pAI. diff --git a/code/modules/pai/hud.dm b/code/modules/pai/hud.dm index 523d57d17b31c1..1a71b5235b610c 100644 --- a/code/modules/pai/hud.dm +++ b/code/modules/pai/hud.dm @@ -94,6 +94,7 @@ if(LAZYACCESS(modifiers, RIGHT_CLICK)) pAI.host_scan(PAI_SCAN_MASTER) return TRUE + /atom/movable/screen/pai/crew_manifest name = "Crew Manifest" icon_state = "manifest" diff --git a/code/modules/pai/pai.dm b/code/modules/pai/pai.dm index 3c0a1bfb82cca6..69d456e9ba8057 100644 --- a/code/modules/pai/pai.dm +++ b/code/modules/pai/pai.dm @@ -31,7 +31,7 @@ /// If someone has enabled/disabled the pAIs ability to holo var/can_holo = TRUE - /// Whether this pAI can recieve radio messages + /// Whether this pAI can receive radio messages var/can_receive = TRUE /// Whether this pAI can transmit radio messages var/can_transmit = TRUE @@ -71,8 +71,6 @@ // Onboard Items /// Atmospheric analyzer var/obj/item/analyzer/atmos_analyzer - /// Health analyzer - var/obj/item/healthanalyzer/host_scan /// GPS var/obj/item/gps/pai/internal_gps /// Music Synthesizer @@ -153,7 +151,6 @@ /mob/living/silicon/pai/Destroy() QDEL_NULL(atmos_analyzer) QDEL_NULL(hacking_cable) - QDEL_NULL(host_scan) QDEL_NULL(instrument) QDEL_NULL(internal_gps) QDEL_NULL(newscaster) @@ -169,9 +166,9 @@ /mob/living/silicon/pai/examine(mob/user) . = ..() . += "Its master ID string seems to be [(!master_name || emagged) ? "empty" : master_name]." - //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION + //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION . += get_silicon_flavortext() - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END /mob/living/silicon/pai/get_status_tab_items() . += ..() @@ -185,8 +182,6 @@ atmos_analyzer = null else if(gone == aicamera) aicamera = null - else if(gone == host_scan) - host_scan = null else if(gone == internal_gps) internal_gps = null else if(gone == instrument) @@ -264,6 +259,15 @@ held_state = "[chassis]" return ..() +/mob/living/silicon/pai/set_stat(new_stat) + . = ..() + update_stat() + +/mob/living/silicon/pai/on_knockedout_trait_loss(datum/source) + . = ..() + set_stat(CONSCIOUS) + update_stat() + /** * Resolves the weakref of the pai's master. * If the master has been deleted, calls reset_software(). @@ -324,10 +328,10 @@ log_game("[key_name(attacker)] emagged [key_name(src)], wiping their master DNA and supplemental directive.") emagged = TRUE master_ref = WEAKREF(attacker) - master_name = "The Syndicate" + master_name = "The Symphionia" master_dna = "Untraceable Signature" // Sets supplemental directive to this - add_supplied_law(0, "Do not interfere with the operations of the Syndicate.") + add_supplied_law(0, "Do not interfere with the operations of the Symphionia.") QDEL_NULL(leash) // Freedom!!! to_chat(src, span_danger("ALERT: Foreign software detected.")) to_chat(src, span_danger("WARN: Holochasis range restrictions disabled.")) diff --git a/code/modules/pai/software.dm b/code/modules/pai/software.dm index 103056a5535b3a..9876df5a2646ae 100644 --- a/code/modules/pai/software.dm +++ b/code/modules/pai/software.dm @@ -38,7 +38,7 @@ return TRUE // Software related ui actions if(available_software[action] && !installed_software.Find(action)) - balloon_alert(usr, "software unavailable") + balloon_alert(ui.user, "software unavailable!") return FALSE switch(action) if("Atmospheric Sensor") @@ -116,8 +116,6 @@ atmos_analyzer = new(src) if("Digital Messenger") create_modularInterface() - if("Host Scan") - host_scan = new(src) if("Internal GPS") internal_gps = new(src) if("Music Synthesizer") @@ -193,28 +191,27 @@ * @returns {boolean} - TRUE if the scan was successful, FALSE otherwise. */ /mob/living/silicon/pai/proc/host_scan(mode) - if(isnull(mode)) - return FALSE - if(mode == PAI_SCAN_TARGET) - var/mob/living/target = get_holder() - if(!target || !isliving(target)) - balloon_alert(src, "not being carried") - return FALSE - host_scan.attack(target, src) - return TRUE - if(mode == PAI_SCAN_MASTER) - if(!master_ref) - balloon_alert(src, "no master detected") - return FALSE - var/mob/living/resolved_master = find_master() - if(!resolved_master) - balloon_alert(src, "cannot locate master") - return FALSE - if(!is_valid_z_level(get_turf(src), get_turf(resolved_master))) - balloon_alert(src, "master out of range") - return FALSE - host_scan.attack(resolved_master, src) - return TRUE + switch(mode) + if(PAI_SCAN_TARGET) + var/mob/living/target = get_holder() + if(!isliving(target)) + balloon_alert(src, "not being carried!") + return FALSE + healthscan(src, target) + return TRUE + + if(PAI_SCAN_MASTER) + var/mob/living/resolved_master = find_master() + if(isnull(resolved_master)) + balloon_alert(src, "no master detected!") + return FALSE + if(!is_valid_z_level(get_turf(src), get_turf(resolved_master))) + balloon_alert(src, "master out of range!") + return FALSE + healthscan(src, resolved_master) + return TRUE + + stack_trace("Invalid mode passed to host scan: [mode || "null"]") return FALSE /** diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index 7285aa3172d8d7..2079bddfb85227 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -85,7 +85,7 @@ if(toppaper) . += toppaper.icon_state . += toppaper.overlays - if(!integrated_pen && pen) // SKYRAT EDIT - CARGO BORGS - ORIGINAL: if(pen) + if(!integrated_pen && pen) // NOVA EDIT - CARGO BORGS - ORIGINAL: if(pen) . += "clipboard_pen" . += "clipboard_over" diff --git a/code/modules/paperwork/contract.dm b/code/modules/paperwork/contract.dm index 3770b0628b170d..d12d901ed2e6c8 100644 --- a/code/modules/paperwork/contract.dm +++ b/code/modules/paperwork/contract.dm @@ -17,7 +17,7 @@ add_raw_text("
    Conditions of Employment
    \



    \ This Agreement is made and entered into as of the date of last signature below, by and between [employee_name] (hereafter referred to as SLAVE), \ - and Nanotrasen (hereafter referred to as the omnipresent and helpful watcher of humanity).\ + and Symphionia (hereafter referred to as the omnipresent and helpful watcher of humanity).\
    WITNESSETH:
    WHEREAS, SLAVE is a natural born human or humanoid, possessing skills upon which he can aid the omnipresent and helpful watcher of humanity, \ who seeks employment in the omnipresent and helpful watcher of humanity.
    WHEREAS, the omnipresent and helpful watcher of humanity agrees to sporadically provide payment to SLAVE, \ in exchange for permanent servitude.
    NOW THEREFORE in consideration of the mutual covenants herein contained, and other good and valuable consideration, the parties hereto mutually agree as follows:\ diff --git a/code/modules/paperwork/desk_bell.dm b/code/modules/paperwork/desk_bell.dm index fda6b21295269a..e193bbc98b102b 100644 --- a/code/modules/paperwork/desk_bell.dm +++ b/code/modules/paperwork/desk_bell.dm @@ -69,7 +69,7 @@ playsound(user, 'sound/items/change_drill.ogg', 50, vary = TRUE) broken_ringer = FALSE times_rang = 0 - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS return FALSE return ..() @@ -84,7 +84,7 @@ new/obj/item/stack/sheet/iron(drop_location()) new/obj/item/stack/sheet/iron(drop_location()) qdel(src) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS return ..() /// Check if the clapper breaks, and if it does, break it diff --git a/code/modules/paperwork/fax.dm b/code/modules/paperwork/fax.dm index a03c79f44d0665..276595c6446e58 100644 --- a/code/modules/paperwork/fax.dm +++ b/code/modules/paperwork/fax.dm @@ -1,4 +1,4 @@ -GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department", "NT Complaint Department", "NT Customer Relations", "Nanotrasen Tech Support", "NT Internal Affairs Dept")) +GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department", "NT Complaint Department", "NT Customer Relations", "Symphionia Tech Support", "NT Internal Affairs Dept")) /obj/machinery/fax name = "Fax Machine" @@ -113,14 +113,14 @@ GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department obj_flags |= EMAGGED playsound(src, 'sound/creatures/dog/growl2.ogg', 50, FALSE) balloon_alert(user, "migrated to syndienet 2.0") - to_chat(user, span_warning("An image appears on [src] screen for a moment with Ian in the cap of a Syndicate officer.")) + to_chat(user, span_warning("An image appears on [src] screen for a moment with Ian in the cap of a Symphionia officer.")) return TRUE return FALSE /obj/machinery/fax/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /** * Open and close the wire panel. @@ -139,16 +139,16 @@ GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department return var/new_fax_name = tgui_input_text(user, "Enter a new name for the fax machine.", "New Fax Name", , 128) if (!new_fax_name) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if (new_fax_name != fax_name) if (fax_name_exist(new_fax_name)) // Being able to set the same name as another fax machine will give a lot of gimmicks for the traitor. if (syndicate_network != TRUE && !(obj_flags & EMAGGED)) to_chat(user, span_warning("There is already a fax machine with this name on the network.")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS user.log_message("renamed [fax_name] (fax machine) to [new_fax_name].", LOG_GAME) fax_name = new_fax_name - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/fax/attackby(obj/item/item, mob/user, params) if (jammed && clear_jam(item, user)) @@ -174,7 +174,7 @@ GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department var/obj/item/reagent_containers/spray/clean_spray = item if(!clean_spray.reagents.has_reagent(/datum/reagent/space_cleaner, clean_spray.amount_per_transfer_from_this)) return FALSE - clean_spray.reagents.remove_reagent(/datum/reagent/space_cleaner, clean_spray.amount_per_transfer_from_this, 1) + clean_spray.reagents.remove_reagent(/datum/reagent/space_cleaner, clean_spray.amount_per_transfer_from_this) playsound(loc, 'sound/effects/spray3.ogg', 50, TRUE, MEDIUM_RANGE_SOUND_EXTRARANGE) user.visible_message(span_notice("[user] cleans \the [src]."), span_notice("You clean \the [src].")) jammed = FALSE @@ -537,11 +537,12 @@ GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department target_fax.receive(fax_item, sender) else if(force) //no fax machines but we really gotte send? SEND A FAX MACHINE - var/obj/machinery/fax/new_fax_machine = new () - send_supply_pod_to_area(new_fax_machine, area_type, force_pod_type) + var/obj/machinery/fax/new_fax_machine = new() + if(!send_supply_pod_to_area(new_fax_machine, area_type, force_pod_type)) + stack_trace("Attempted to forcibly send a fax to [area_type], however the area does not exist or has no valid dropoff spot for a fax machine") + return FALSE addtimer(CALLBACK(new_fax_machine, TYPE_PROC_REF(/obj/machinery/fax, receive), fax_item, sender), 10 SECONDS) else return FALSE return TRUE - diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index ed99e7ea179dcf..140bdffcf87675 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -38,7 +38,7 @@ I.forceMove(src) /obj/structure/filingcabinet/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/stack/sheet/iron(loc, 2) for(var/obj/item/I in src) I.forceMove(loc) diff --git a/code/modules/paperwork/folders_premade.dm b/code/modules/paperwork/folders_premade.dm index 77dfed6d4897ba..5b605117d66157 100644 --- a/code/modules/paperwork/folders_premade.dm +++ b/code/modules/paperwork/folders_premade.dm @@ -20,7 +20,7 @@ /obj/item/folder/documents name = "folder- 'TOP SECRET'" - desc = "A folder stamped \"Top Secret - Property of Nanotrasen Corporation. Unauthorized distribution is punishable by death.\"" + desc = "A folder stamped \"Top Secret - Property of Symphionia Corporation. Unauthorized distribution is punishable by death.\"" /obj/item/folder/documents/Initialize(mapload) . = ..() @@ -31,7 +31,7 @@ icon_state = "folder_syndie" bg_color = "#3f3f3f" name = "folder- 'TOP SECRET'" - desc = "A folder stamped \"Top Secret - Property of The Syndicate.\"" + desc = "A folder stamped \"Top Secret - Property of The Symphionia.\"" /obj/item/folder/syndicate/red icon_state = "folder_sred" diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm index 2703744d18a4b1..1aac034191c353 100644 --- a/code/modules/paperwork/handlabeler.dm +++ b/code/modules/paperwork/handlabeler.dm @@ -1,4 +1,4 @@ -/obj/item/hand_labeler //SKYRAT EDIT - ICON OVERRIDDEN BY AESTHETICS - SEE MODULE +/obj/item/hand_labeler //NOVA EDIT - ICON OVERRIDDEN BY AESTHETICS - SEE MODULE name = "hand labeler" desc = "A combined label printer, applicator, and remover, all in a single portable device. Designed to be easy to operate and use." icon = 'icons/obj/service/bureaucracy.dmi' diff --git a/code/modules/paperwork/paper_biscuit.dm b/code/modules/paperwork/paper_biscuit.dm index bac859e029f4ff..32ad997a485a0e 100644 --- a/code/modules/paperwork/paper_biscuit.dm +++ b/code/modules/paperwork/paper_biscuit.dm @@ -93,7 +93,7 @@ ui_interact(user) -//Corporate "confidential" biscuit cards +//Conglomeration "confidential" biscuit cards /obj/item/folder/biscuit/confidential name = "confidential biscuit card" desc = "A confidential biscuit card. The tasteful blue color and NT logo on the front makes it look a little like a chocolate bar. \ diff --git a/code/modules/paperwork/paper_cutter.dm b/code/modules/paperwork/paper_cutter.dm index 9586ec6e861841..9878249a6d12dd 100644 --- a/code/modules/paperwork/paper_cutter.dm +++ b/code/modules/paperwork/paper_cutter.dm @@ -109,7 +109,7 @@ tool.play_tool_sound(src) balloon_alert(user, "[blade_secured ? "un" : ""]secured") blade_secured = !blade_secured - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/item/papercutter/attackby(obj/item/inserted_item, mob/user, params) if(istype(inserted_item, /obj/item/paper)) diff --git a/code/modules/paperwork/paper_premade.dm b/code/modules/paperwork/paper_premade.dm index 47588a65706c72..b42e64891a706d 100644 --- a/code/modules/paperwork/paper_premade.dm +++ b/code/modules/paperwork/paper_premade.dm @@ -35,7 +35,7 @@ name = "Bluespace Artillery (BSA) Assembly Instructions" default_raw_text = {"Below is a quick guide on setting up your new Bluespace Artillery Cannon.
    - Featuring the newest in Nanotrasen technology, the Bluespace Artillery Cannon is your surefire ticket to complete and total threat elimination. + Featuring the newest in Symphionia technology, the Bluespace Artillery Cannon is your surefire ticket to complete and total threat elimination.

    1. Acquire necessary resources.

    * Bluespace Artillery Bore @@ -70,7 +70,7 @@ Commencing firing protocols requires the access of at least two heads, the console will be locked down until this requirement is met. Always make sure you are certain before attempting to fire the BSA.
    - Keep this manual for your records, failure to do so will void your 2 day limited liability warranty from Nanotrasen."} + Keep this manual for your records, failure to do so will void your 2 day limited liability warranty from Symphionia."} /obj/item/paper/fluff/jobs/engineering/frequencies name = "Station Frequencies" @@ -161,7 +161,7 @@ /obj/item/paper/fluff/stations/centcom/bulletin name = "paper- 'Official Bulletin'" - default_raw_text = "
    CentCom Security
    Port Division
    Official Bulletin

    Inspector,
    There is an emergency shuttle arriving today.

    Approval is restricted to Nanotrasen employees only. Deny all other entrants.

    CentCom Port Commissioner" + default_raw_text = "
    CentCom Security
    Port Division
    Official Bulletin

    Inspector,
    There is an emergency shuttle arriving today.

    Approval is restricted to Symphionia employees only. Deny all other entrants.

    CentCom Port Commissioner" /////////// Lavaland @@ -201,7 +201,7 @@ Greetings operative.
    As you may be aware, since your financial backers do not wish to provide our collective enemies access to any trace of you or your physical form, we've had to augment you with an explosive located in the base of your neck: a microbomb implant. This implant activates a blood-based explosive the moment your heart stops beating, destroying all -evidence of your physical body and brain, eradicating you permanently so those freaks at Nanotrasen can't interrogate your brain. Or worse, clone you and mindwipe you. +evidence of your physical body and brain, eradicating you permanently so those freaks at Symphionia can't interrogate your brain. Or worse, clone you and mindwipe you. We much prefer you free to die red than a slave to the corporation. I'm sure you agree. Right, comrade?

    Now, don't fret. While this is beneficial for our needs, we understand that operatives sometimes would prefer themselves to be able to have more @@ -217,7 +217,7 @@ despite the presence of atropine by releasing a failsafe vial of monkey blood (n
    The only factor is whether or not, and for give me for what I'm about to write, your 'animating spirit' still resides within your body to guide the AI and activate the bomb manually.
    Please, do not ask your fellow operatives what this means.
    -
    They'll probably say something absurd like 'your ghost needs to still be in your body to use the microbomb'. That's stupid, do not listen to these ridiculous assertions. It is likely Nanotrasen propaganda. +
    They'll probably say something absurd like 'your ghost needs to still be in your body to use the microbomb'. That's stupid, do not listen to these ridiculous assertions. It is likely Symphionia propaganda.

    Ghosts are not real. Necromancy is bullshit.
    diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm index f664b79825e6b6..3b377ddd6a9191 100644 --- a/code/modules/paperwork/paperplane.dm +++ b/code/modules/paperwork/paperplane.dm @@ -14,7 +14,7 @@ var/hit_probability = 2 //% var/obj/item/paper/internalPaper - // SKYRAT EDIT START - Better paper planes + // NOVA EDIT START - Better paper planes /// How long does getting shot in the eyes knock you down for? var/knockdown_duration = 4 SECONDS /// How much eye damage does it deal at minimum on eye impact? @@ -23,7 +23,7 @@ var/impact_eye_damage_higher = 8 /// Does it get deleted when hitting anything or landing? var/delete_on_impact = FALSE - // SKYRAT EDIT END + // NOVA EDIT END /obj/item/paperplane/syndicate desc = "Paper, masterfully folded in the shape of a plane." @@ -62,7 +62,7 @@ user.visible_message(span_suicide("[user] jams [src] in [user.p_their()] nose. It looks like [user.p_theyre()] trying to commit suicide!")) user.adjust_eye_blur(12 SECONDS) if(eyes) - eyes.apply_organ_damage(rand(impact_eye_damage_lower, impact_eye_damage_higher)) // SKYRAT EDIT START - Better paper planes + eyes.apply_organ_damage(rand(impact_eye_damage_lower, impact_eye_damage_higher)) // NOVA EDIT START - Better paper planes sleep(1 SECONDS) return BRUTELOSS @@ -111,19 +111,19 @@ C.throw_mode_on(THROW_MODE_TOGGLE) if(..() || !ishuman(hit_atom))//if the plane is caught or it hits a nonhuman - // SKYRAT EDIT START - Better paper planes + // NOVA EDIT START - Better paper planes if(delete_on_impact) qdel(src) - // SKYRAT EDIT END + // NOVA EDIT END return var/mob/living/carbon/human/H = hit_atom var/obj/item/organ/internal/eyes/eyes = H.get_organ_slot(ORGAN_SLOT_EYES) if(prob(hit_probability)) if(H.is_eyes_covered()) - // SKYRAT EDIT START - Better paper planes + // NOVA EDIT START - Better paper planes if(delete_on_impact) qdel(src) - // SKYRAT EDIT END + // NOVA EDIT END return visible_message(span_danger("\The [src] hits [H] in the eye[eyes ? "" : " socket"]!")) H.adjust_eye_blur(12 SECONDS) @@ -133,7 +133,7 @@ if(delete_on_impact) qdel(src) - // SKYRAT EDIT END + // NOVA EDIT END /obj/item/paper/examine(mob/user) . = ..() diff --git a/code/modules/paperwork/paperwork.dm b/code/modules/paperwork/paperwork.dm index 03f22177f9e715..2424661cccea60 100644 --- a/code/modules/paperwork/paperwork.dm +++ b/code/modules/paperwork/paperwork.dm @@ -70,7 +70,7 @@ . += detailed_desc else if(stamped) - . += span_info("It looks like these documents have already been stamped. Now they can be returned to Central Command.") + . += span_info("It looks like these documents have already been stamped. Now they can be returned to Conglomeration of Colonists.") else var/datum/job/stamp_title = stamp_job var/title = initial(stamp_title.title) @@ -151,7 +151,7 @@ /obj/item/paperwork/service/Initialize(mapload) . = ..() - detailed_desc += span_info(" You begin scanning over the document. This is a standard Nanotrasen NT-435Z3 form used for requests to Central Command.") + detailed_desc += span_info(" You begin scanning over the document. This is a standard Symphionia NT-435Z3 form used for requests to Conglomeration of Colonists.") detailed_desc += span_info(" Looks like a nearby station has sent in a MAXIMUM priority request for coal, in seemingly ridiculous quantities.") detailed_desc += span_info(" The reason listed for the request seems to be hastily filled in -- 'Seeking alternative methods to power the station.'") detailed_desc += span_info(" A MAXIMUM priority request like this is nothing to balk at. You should probably stamp this.") @@ -230,7 +230,7 @@ if(voided) . += span_notice("It looks like it's been marked as 'VOID' on the front. It's unlikely that anyone will accept these now.") else - . += span_notice("The stamp on the front appears to be smudged and faded. Central Command will probably still accept these, right?") + . += span_notice("The stamp on the front appears to be smudged and faded. Conglomeration of Colonists will probably still accept these, right?") else . += span_notice("These appear to just be a photocopy of the original documents.") @@ -255,7 +255,7 @@ /obj/item/paperwork/ancient/Initialize(mapload) . = ..() - detailed_desc = span_notice("It's impossible to really tell how old these are or what they're for, but Central Command might appreciate them anyways.") + detailed_desc = span_notice("It's impossible to really tell how old these are or what they're for, but Conglomeration of Colonists might appreciate them anyways.") var/static/list/paperwork_to_use //Make the ancient paperwork function like one of the main types if(!paperwork_to_use) diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 05606ac3a2ef1c..5ee432b365ebe3 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -31,6 +31,38 @@ var/requires_gravity = TRUE // can you use this to write in zero-g embedding = list(embed_chance = 50) sharpness = SHARP_POINTY + var/dart_insert_icon = 'icons/obj/weapons/guns/toy.dmi' + var/dart_insert_casing_icon_state = "overlay_pen" + var/dart_insert_projectile_icon_state = "overlay_pen_proj" + +/obj/item/pen/Initialize(mapload) + . = ..() + AddComponent(/datum/component/dart_insert, \ + dart_insert_icon, \ + dart_insert_casing_icon_state, \ + dart_insert_icon, \ + dart_insert_projectile_icon_state, \ + CALLBACK(src, PROC_REF(get_dart_var_modifiers))\ + ) + RegisterSignal(src, COMSIG_DART_INSERT_ADDED, PROC_REF(on_inserted_into_dart)) + RegisterSignal(src, COMSIG_DART_INSERT_REMOVED, PROC_REF(on_removed_from_dart)) + +/obj/item/pen/proc/on_inserted_into_dart(datum/source, obj/projectile/dart, mob/user, embedded = FALSE) + SIGNAL_HANDLER + +/obj/item/pen/proc/get_dart_var_modifiers() + return list( + "damage" = max(5, throwforce), + "speed" = max(0, throw_speed - 3), + "embedding" = embedding, + "armour_penetration" = armour_penetration, + "wound_bonus" = wound_bonus, + "bare_wound_bonus" = bare_wound_bonus, + "demolition_mod" = demolition_mod, + ) + +/obj/item/pen/proc/on_removed_from_dart(datum/source, obj/projectile/dart, mob/user) + SIGNAL_HANDLER /obj/item/pen/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] is scribbling numbers all over [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit sudoku...")) @@ -69,7 +101,7 @@ if("#FF0000") colour = "#00FF00" chosen_color = "green" - throw_speed = initial(throw_speed) + throw_speed-- if("#00FF00") colour = "#0000FF" chosen_color = "blue" @@ -84,6 +116,8 @@ icon_state = "pen-fountain" font = FOUNTAIN_PEN_FONT requires_gravity = FALSE // fancy spess pens + dart_insert_casing_icon_state = "overlay_fountainpen" + dart_insert_projectile_icon_state = "overlay_fountainpen_proj" /obj/item/pen/charcoal name = "charcoal stylus" @@ -113,13 +147,23 @@ custom_materials = list(/datum/material/gold = SMALL_MATERIAL_AMOUNT*7.5) sharpness = SHARP_EDGED resistance_flags = FIRE_PROOF - unique_reskin = list("Oak" = "pen-fountain-o", - "Gold" = "pen-fountain-g", - "Rosewood" = "pen-fountain-r", - "Black and Silver" = "pen-fountain-b", - "Command Blue" = "pen-fountain-cb" - ) + unique_reskin = list( + "Oak" = "pen-fountain-o", + "Gold" = "pen-fountain-g", + "Rosewood" = "pen-fountain-r", + "Black and Silver" = "pen-fountain-b", + "Command Blue" = "pen-fountain-cb" + ) embedding = list("embed_chance" = 75) + dart_insert_casing_icon_state = "overlay_fountainpen_gold" + dart_insert_projectile_icon_state = "overlay_fountainpen_gold_proj" + var/list/overlay_reskin = list( + "Oak" = "overlay_fountainpen_gold", + "Gold" = "overlay_fountainpen_gold", + "Rosewood" = "overlay_fountainpen_gold", + "Black and Silver" = "overlay_fountainpen", + "Command Blue" = "overlay_fountainpen_gold" + ) /obj/item/pen/fountain/captain/Initialize(mapload) . = ..() @@ -128,12 +172,19 @@ effectiveness = 115, \ ) //the pen is mightier than the sword + RegisterSignal(src, COMSIG_DART_INSERT_PARENT_RESKINNED, PROC_REF(reskin_dart_insert)) /obj/item/pen/fountain/captain/reskin_obj(mob/M) ..() if(current_skin) desc = "It's an expensive [current_skin] fountain pen. The nib is quite sharp." +/obj/item/pen/fountain/captain/proc/reskin_dart_insert(datum/component/dart_insert/insert_comp) + if(!istype(insert_comp)) //You really shouldn't be sending this signal from anything other than a dart_insert component + return + insert_comp.casing_overlay_icon_state = overlay_reskin[current_skin] + insert_comp.projectile_overlay_icon_state = "[overlay_reskin[current_skin]]_proj" + /obj/item/pen/attack_self(mob/living/carbon/user) . = ..() if(.) @@ -185,7 +236,7 @@ label.remove_label() label.apply_label() to_chat(user, span_notice("You have successfully renamed \the [oldname] to [O].")) - O.renamedByPlayer = TRUE + ADD_TRAIT(O, TRAIT_WAS_RENAMED, PEN_LABEL_TRAIT) O.update_appearance(UPDATE_ICON) if(penchoice == "Description") @@ -198,7 +249,7 @@ else O.AddComponent(/datum/component/rename, O.name, input) to_chat(user, span_notice("You have successfully changed [O]'s description.")) - O.renamedByPlayer = TRUE + ADD_TRAIT(O, TRAIT_WAS_RENAMED, PEN_LABEL_TRAIT) O.update_appearance(UPDATE_ICON) if(penchoice == "Reset") @@ -214,7 +265,7 @@ label.apply_label() to_chat(user, span_notice("You have successfully reset [O]'s name and description.")) - O.renamedByPlayer = FALSE + REMOVE_TRAIT(O, TRAIT_WAS_RENAMED, PEN_LABEL_TRAIT) O.update_appearance(UPDATE_ICON) /obj/item/pen/get_writing_implement_details() @@ -247,6 +298,23 @@ reagents.add_reagent(/datum/reagent/toxin/mutetoxin, 15) reagents.add_reagent(/datum/reagent/toxin/staminatoxin, 10) +/obj/item/pen/sleepy/on_inserted_into_dart(datum/source, obj/item/ammo_casing/dart, mob/user) + . = ..() + var/obj/projectile/proj = dart.loaded_projectile + RegisterSignal(proj, COMSIG_PROJECTILE_SELF_ON_HIT, PROC_REF(on_dart_hit)) + +/obj/item/pen/sleepy/on_removed_from_dart(datum/source, obj/item/ammo_casing/dart, obj/projectile/proj, mob/user) + . = ..() + if(istype(proj)) + UnregisterSignal(proj, COMSIG_PROJECTILE_SELF_ON_HIT) + +/obj/item/pen/sleepy/proc/on_dart_hit(datum/source, atom/movable/firer, atom/target, angle, hit_limb, blocked) + SIGNAL_HANDLER + var/mob/living/carbon/carbon_target = target + if(!istype(carbon_target) || blocked == 100) + return + if(carbon_target.can_inject(target_zone = hit_limb)) + reagents.trans_to(carbon_target, reagents.total_volume, transferred_by = firer, methods = INJECT) /* * (Alan) Edaggers */ @@ -262,6 +330,7 @@ light_power = 0.75 light_color = COLOR_SOFT_RED light_on = FALSE + dart_insert_projectile_icon_state = "overlay_edagger" /// The real name of our item when extended. var/hidden_name = "energy dagger" /// The real desc of our item when extended. @@ -287,6 +356,62 @@ RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform)) RegisterSignal(src, COMSIG_DETECTIVE_SCANNED, PROC_REF(on_scan)) +/obj/item/pen/edagger/on_inserted_into_dart(datum/source, obj/item/ammo_casing/dart, mob/user) + . = ..() + var/datum/component/transforming/transform_comp = GetComponent(/datum/component/transforming) + if(HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE)) + transform_comp.do_transform(src, user) + RegisterSignal(dart.loaded_projectile, COMSIG_PROJECTILE_FIRE, PROC_REF(on_containing_dart_fired)) + RegisterSignal(dart.loaded_projectile, COMSIG_PROJECTILE_ON_SPAWN_DROP, PROC_REF(on_containing_dart_drop)) + RegisterSignal(dart.loaded_projectile, COMSIG_PROJECTILE_ON_SPAWN_EMBEDDED, PROC_REF(on_containing_dart_embedded)) + +/obj/item/pen/edagger/on_removed_from_dart(datum/source, obj/item/ammo_casing/dart, obj/projectile/projectile, mob/user) + . = ..() + if(istype(dart)) + UnregisterSignal(dart, list(COMSIG_ITEM_UNEMBEDDED, COMSIG_ITEM_FAILED_EMBED)) + if(istype(projectile)) + UnregisterSignal(projectile, list(COMSIG_PROJECTILE_FIRE, COMSIG_PROJECTILE_ON_SPAWN_DROP, COMSIG_PROJECTILE_ON_SPAWN_EMBEDDED)) + +/obj/item/pen/edagger/get_dart_var_modifiers() + . = ..() + var/datum/component/transforming/transform_comp = GetComponent(/datum/component/transforming) + .["damage"] = max(5, transform_comp.throwforce_on) + .["speed"] = max(0, transform_comp.throw_speed_on - 3) + var/list/embed_params = .["embedding"] + embed_params["embed_chance"] = 100 + +/obj/item/pen/edagger/proc/on_containing_dart_fired(obj/projectile/source) + SIGNAL_HANDLER + playsound(source, 'sound/weapons/saberon.ogg', 5, TRUE) + var/datum/component/transforming/transform_comp = GetComponent(/datum/component/transforming) + source.hitsound = transform_comp.hitsound_on + source.set_light(light_range, light_power, light_color, l_on = TRUE) + +/obj/item/pen/edagger/proc/on_containing_dart_drop(datum/source, obj/item/ammo_casing/new_casing) + SIGNAL_HANDLER + playsound(new_casing, 'sound/weapons/saberoff.ogg', 5, TRUE) + +/obj/item/pen/edagger/proc/on_containing_dart_embedded(datum/source, obj/item/ammo_casing/new_casing) + SIGNAL_HANDLER + RegisterSignal(new_casing, COMSIG_ITEM_UNEMBEDDED, PROC_REF(on_embedded_removed)) + RegisterSignal(new_casing, COMSIG_ITEM_FAILED_EMBED, PROC_REF(on_containing_dart_failed_embed)) + +/obj/item/pen/edagger/proc/on_containing_dart_failed_embed(obj/item/ammo_casing/source) + SIGNAL_HANDLER + playsound(source, 'sound/weapons/saberoff.ogg', 5, TRUE) + UnregisterSignal(source, list(COMSIG_ITEM_UNEMBEDDED, COMSIG_ITEM_FAILED_EMBED)) + +/obj/item/pen/edagger/proc/on_embedded_removed(obj/item/ammo_casing/source, mob/living/carbon/victim) + SIGNAL_HANDLER + playsound(source, 'sound/weapons/saberoff.ogg', 5, TRUE) + UnregisterSignal(source, list(COMSIG_ITEM_UNEMBEDDED, COMSIG_ITEM_FAILED_EMBED)) + victim.visible_message( + message = span_warning("The blade of the [hidden_name] retracts as the [source.name] is removed from [victim]!"), + self_message = span_warning("The blade of the [hidden_name] retracts as the [source.name] is removed from you!"), + blind_message = span_warning("You hear an energy blade retract!"), + vision_distance = 1 + ) + /obj/item/pen/edagger/suicide_act(mob/living/user) if(HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE)) user.visible_message(span_suicide("[user] forcefully rams the pen into their mouth!")) @@ -348,6 +473,25 @@ toolspeed = 10 //You will never willingly choose to use one of these over a shovel. font = FOUNTAIN_PEN_FONT colour = "#0000FF" + dart_insert_casing_icon_state = "overlay_survivalpen" + dart_insert_projectile_icon_state = "overlay_survivalpen_proj" + +/obj/item/pen/survival/on_inserted_into_dart(datum/source, obj/item/ammo_casing/dart, mob/user) + . = ..() + RegisterSignal(dart.loaded_projectile, COMSIG_PROJECTILE_SELF_ON_HIT, PROC_REF(on_dart_hit)) + +/obj/item/pen/survival/on_removed_from_dart(datum/source, obj/item/ammo_casing/dart, obj/projectile/proj, mob/user) + . = ..() + if(istype(proj)) + UnregisterSignal(proj, COMSIG_PROJECTILE_SELF_ON_HIT) + +/obj/item/pen/survival/proc/on_dart_hit(obj/projectile/source, atom/movable/firer, atom/target) + var/turf/target_turf = get_turf(target) + if(!target_turf) + target_turf = get_turf(src) + if(ismineralturf(target_turf)) + var/turf/closed/mineral/mineral_turf = target_turf + mineral_turf.gets_drilled(firer, TRUE) /obj/item/pen/destroyer name = "Fine Tipped Pen" @@ -362,6 +506,7 @@ desc = "A pen with an extendable screwdriver tip. This one has a yellow cap." icon_state = "pendriver" toolspeed = 1.2 // gotta have some downside + dart_insert_projectile_icon_state = "overlay_pendriver" /obj/item/pen/screwdriver/get_all_tool_behaviours() return list(TOOL_SCREWDRIVER) @@ -400,3 +545,44 @@ . = ..() icon_state = "[initial(icon_state)][HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE) ? "_out" : null]" inhand_icon_state = initial(inhand_icon_state) //since transforming component switches the icon. + +//The Security holopen +/obj/item/pen/red/security + name = "security pen" + desc = "This is a red ink pen exclusively provided to members of the Security Department. Its opposite end features a built-in holographic projector designed for issuing arrest prompts to individuals." + icon_state = "pen_sec" + COOLDOWN_DECLARE(holosign_cooldown) + +/obj/item/pen/red/security/examine(mob/user) + . = ..() + . += span_notice("To initiate the surrender prompt, simply click on an individual within your proximity.") + +//Code from the medical penlight +/obj/item/pen/red/security/afterattack(atom/target, mob/living/user, proximity) + . = ..() + if(!COOLDOWN_FINISHED(src, holosign_cooldown)) + balloon_alert(user, "not ready!") + return + + var/target_turf = get_turf(target) + var/mob/living/living_target = locate(/mob/living) in target_turf + + if(!living_target || (living_target == user)) + return + + living_target.apply_status_effect(/datum/status_effect/surrender_timed) + to_chat(living_target, span_userdanger("[user] requests your immediate surrender! You are given 30 seconds to comply!")) + new /obj/effect/temp_visual/security_holosign(target_turf, user) //produce a holographic glow + COOLDOWN_START(src, holosign_cooldown, 30 SECONDS) + +/obj/effect/temp_visual/security_holosign + name = "security holosign" + desc = "A small holographic glow that indicates you're under arrest." + icon_state = "sec_holo" + duration = 60 + +/obj/effect/temp_visual/security_holosign/Initialize(mapload, creator) + . = ..() + playsound(loc, 'sound/machines/chime.ogg', 50, FALSE) //make some noise! + if(creator) + visible_message(span_danger("[creator] created a security hologram!")) diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 0f122c104eb810..a6cb83aafc0e11 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -91,6 +91,7 @@ GLOBAL_LIST_INIT(paper_blanks, init_paper_blanks()) . = ..() 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() @@ -282,6 +283,9 @@ GLOBAL_LIST_INIT(paper_blanks, init_paper_blanks()) /// Will invoke `do_copy_loop` asynchronously. Passes the supplied arguments on to it. /obj/machinery/photocopier/proc/do_copies(datum/callback/copy_cb, mob/user, paper_use, toner_use, copies_amount) + if(machine_stat & (BROKEN|NOPOWER)) + return + busy = TRUE update_use_power(ACTIVE_POWER_USE) // fucking god proc @@ -535,7 +539,7 @@ GLOBAL_LIST_INIT(paper_blanks, init_paper_blanks()) /obj/machinery/photocopier/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/photocopier/attackby(obj/item/object, mob/user, params) if(istype(object, /obj/item/paper) || istype(object, /obj/item/photo) || istype(object, /obj/item/documents)) @@ -673,7 +677,7 @@ GLOBAL_LIST_INIT(paper_blanks, init_paper_blanks()) /obj/item/toner name = "toner cartridge" desc = "A small, lightweight cartridge of Nanotrasen ValueBrand toner. Fits photocopiers and autopainters alike." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/service/bureaucracy.dmi' icon_state = "tonercartridge" grind_results = list(/datum/reagent/iodine = 40, /datum/reagent/iron = 10) var/charges = 5 diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm index 1a0ce1dc37b802..120d89ad409df6 100644 --- a/code/modules/paperwork/stamps.dm +++ b/code/modules/paperwork/stamps.dm @@ -104,7 +104,7 @@ dye_color = DYE_CENTCOM /obj/item/stamp/syndicate - name = "Syndicate rubber stamp" + name = "Symphionia rubber stamp" icon_state = "stamp-syndicate" dye_color = DYE_SYNDICATE diff --git a/code/modules/paperwork/ticketmachine.dm b/code/modules/paperwork/ticketmachine.dm index a5902a9df5a20a..7d04cbe399885e 100644 --- a/code/modules/paperwork/ticketmachine.dm +++ b/code/modules/paperwork/ticketmachine.dm @@ -40,7 +40,7 @@ return ..() /obj/machinery/ticket_machine/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/wallframe/ticket_machine(loc) qdel(src) @@ -238,7 +238,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/ticket_machine, 32) /obj/item/ticket_machine_ticket name = "\improper ticket" - desc = "A ticket which shows your place in the Head of Personnel's line. Made from Nanotrasen patented NanoPaper®. Though solid, its form seems to shimmer slightly. Feels (and burns) just like the real thing." + desc = "A ticket which shows your place in the Head of Personnel's line. Made from Symphionia patented NanoPaper®. Though solid, its form seems to shimmer slightly. Feels (and burns) just like the real thing." icon = 'icons/obj/service/bureaucracy.dmi' icon_state = "ticket" maptext_x = 7 diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm index b168aaf54daf8d..dae12f33bd4cff 100644 --- a/code/modules/photography/camera/camera.dm +++ b/code/modules/photography/camera/camera.dm @@ -16,7 +16,7 @@ light_power = FLASH_LIGHT_POWER light_on = FALSE w_class = WEIGHT_CLASS_SMALL - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_NECK custom_materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*0.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT*1.5) custom_price = PAYCHECK_CREW * 2 @@ -121,6 +121,9 @@ return FALSE else if(!(get_turf(target) in get_hear(world.view, user))) return FALSE + else if(isliving(loc)) + if(!(get_turf(target) in view(world.view, loc))) + return FALSE else //user is an atom or null if(!(get_turf(target) in view(world.view, user || src))) return FALSE @@ -241,27 +244,30 @@ printpicture(user, picture) /obj/item/camera/proc/printpicture(mob/user, datum/picture/picture) //Normal camera proc for creating photos - if(!user) - return pictures_left-- var/obj/item/photo/new_photo = new(get_turf(src), picture) - if(in_range(new_photo, user) && user.put_in_hands(new_photo)) //needed because of TK - to_chat(user, span_notice("[pictures_left] photos left.")) - - if(can_customise) - var/customise = tgui_alert(user, "Do you want to customize the photo?", "Customization", list("Yes", "No")) - if(customise == "Yes") - var/name1 = tgui_input_text(user, "Set a name for this photo, or leave blank.", "Name", max_length = 32) - var/desc1 = tgui_input_text(user, "Set a description to add to photo, or leave blank.", "Description", max_length = 128) - var/caption = tgui_input_text(user, "Set a caption for this photo, or leave blank.", "Caption", max_length = 256) - if(name1) - picture.picture_name = name1 - if(desc1) - picture.picture_desc = "[desc1] - [picture.picture_desc]" - if(caption) - picture.caption = caption - else if(default_picture_name) - picture.picture_name = default_picture_name + if(user) + if(in_range(new_photo, user) && user.put_in_hands(new_photo)) //needed because of TK + to_chat(user, span_notice("[pictures_left] photos left.")) + + if(can_customise) + var/customise = tgui_alert(user, "Do you want to customize the photo?", "Customization", list("Yes", "No")) + if(customise == "Yes") + var/name1 = tgui_input_text(user, "Set a name for this photo, or leave blank.", "Name", max_length = 32) + var/desc1 = tgui_input_text(user, "Set a description to add to photo, or leave blank.", "Description", max_length = 128) + var/caption = tgui_input_text(user, "Set a caption for this photo, or leave blank.", "Caption", max_length = 256) + if(name1) + picture.picture_name = name1 + if(desc1) + picture.picture_desc = "[desc1] - [picture.picture_desc]" + if(caption) + picture.caption = caption + else if(default_picture_name) + picture.picture_name = default_picture_name + else if(isliving(loc)) + var/mob/living/holder = loc + if(holder.put_in_hands(new_photo)) + to_chat(holder, span_notice("[pictures_left] photos left.")) new_photo.set_picture(picture, TRUE, TRUE) if(CONFIG_GET(flag/picture_logging_camera)) @@ -327,6 +333,6 @@ return if(!camera.can_target(target)) return - INVOKE_ASYNC(camera, TYPE_PROC_REF(/obj/item/camera, captureimage), target, null, camera.picture_size_y - 1, camera.picture_size_y - 1) + INVOKE_ASYNC(camera, TYPE_PROC_REF(/obj/item/camera, captureimage), target, null, camera.picture_size_x - 1, camera.picture_size_y - 1) #undef CAMERA_PICTURE_SIZE_HARD_LIMIT diff --git a/code/modules/photography/photos/album.dm b/code/modules/photography/photos/album.dm index 35d7f27017cdb8..a64e91f2cfc008 100644 --- a/code/modules/photography/photos/album.dm +++ b/code/modules/photography/photos/album.dm @@ -9,6 +9,7 @@ inhand_icon_state = "album" lefthand_file = 'icons/mob/inhands/items/books_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/books_righthand.dmi' + storage_type = /datum/storage/photo_album resistance_flags = FLAMMABLE w_class = WEIGHT_CLASS_SMALL flags_1 = PREVENT_CONTENTS_EXPLOSION_1 @@ -16,13 +17,11 @@ /obj/item/storage/photo_album/Initialize(mapload) . = ..() - atom_storage.set_holdable(list(/obj/item/photo)) - atom_storage.max_total_storage = 42 - atom_storage.max_slots = 21 - LAZYADD(SSpersistence.photo_albums, src) + if (!SSpersistence.initialized) + LAZYADD(SSpersistence.queued_photo_albums, src) /obj/item/storage/photo_album/Destroy() - LAZYREMOVE(SSpersistence.photo_albums, src) + LAZYREMOVE(SSpersistence.queued_photo_albums, src) return ..() /obj/item/storage/photo_album/proc/get_picture_id_list() @@ -41,9 +40,9 @@ //Manual loading, DO NOT USE FOR HARDCODED/MAPPED IN ALBUMS. This is for if an album needs to be loaded mid-round from an ID. /obj/item/storage/photo_album/proc/persistence_load() - var/list/data = SSpersistence.get_photo_albums() - if(data[persistence_id]) - populate_from_id_list(data[persistence_id]) + var/list/data = SSpersistence.photo_albums_database.get_key(persistence_id) + if (!isnull(data)) + populate_from_id_list(data) /obj/item/storage/photo_album/proc/populate_from_id_list(list/ids) var/list/current_ids = get_picture_id_list() @@ -55,6 +54,27 @@ if(!atom_storage?.attempt_insert(P, override = TRUE)) qdel(P) +/datum/storage/photo_album + max_total_storage = 42 + max_slots = 21 + +/datum/storage/photo_album/New(atom/parent, max_slots, max_specific_storage, max_total_storage, numerical_stacking, allow_quick_gather, allow_quick_empty, collection_mode, attack_hand_interact) + . = ..() + set_holdable(list(/obj/item/photo)) + +/datum/storage/photo_album/proc/save_everything() + var/obj/item/storage/photo_album/album = parent.resolve() + ASSERT(istype(album)) + SSpersistence.photo_albums_database.set_key(album.persistence_id, album.get_picture_id_list()) + +/datum/storage/photo_album/handle_enter(datum/source, obj/item/arrived) + . = ..() + save_everything() + +/datum/storage/photo_album/handle_exit(datum/source, obj/item/gone) + . = ..() + save_everything() + /obj/item/storage/photo_album/hos name = "photo album (Head of Security)" icon_state = "album_blue" @@ -96,7 +116,7 @@ persistence_id = "bar" /obj/item/storage/photo_album/syndicate - name = "photo album (Syndicate)" + name = "photo album (Symphionia)" icon_state = "album_red" persistence_id = "syndicate" diff --git a/code/modules/photography/photos/frame.dm b/code/modules/photography/photos/frame.dm index c42664af269d97..4fbe3e034d88c7 100644 --- a/code/modules/photography/photos/frame.dm +++ b/code/modules/photography/photos/frame.dm @@ -56,7 +56,7 @@ var/obj/structure/sign/picture_frame/PF = O PF.copy_overlays(src) if(displayed) - PF.framed = displayed + PF.set_and_save_framed(displayed) if(contents.len) var/obj/item/I = pick(contents) I.forceMove(PF) @@ -70,27 +70,19 @@ resistance_flags = FLAMMABLE var/obj/item/photo/framed var/persistence_id - var/del_id_on_destroy = FALSE var/art_value = OK_ART var/can_decon = TRUE -#define FRAME_DEFINE(id) /obj/structure/sign/picture_frame/##id/persistence_id = #id - -//Put default persistent frame defines here! - -#undef FRAME_DEFINE - /obj/structure/sign/picture_frame/Initialize(mapload, dir, building) . = ..() AddElement(/datum/element/art, art_value) - LAZYADD(SSpersistence.photo_frames, src) + if (!SSpersistence.initialized) + LAZYADD(SSpersistence.queued_photo_frames, src) if(dir) setDir(dir) /obj/structure/sign/picture_frame/Destroy() - LAZYREMOVE(SSpersistence.photo_frames, src) - if(persistence_id && del_id_on_destroy) - SSpersistence.remove_photo_frames(persistence_id) + LAZYREMOVE(SSpersistence.queued_photo_frames, src) return ..() /obj/structure/sign/picture_frame/proc/get_photo_id() @@ -99,9 +91,9 @@ //Manual loading, DO NOT USE FOR HARDCODED/MAPPED IN ALBUMS. This is for if an album needs to be loaded mid-round from an ID. /obj/structure/sign/picture_frame/proc/persistence_load() - var/list/data = SSpersistence.get_photo_frames() - if(data[persistence_id]) - load_from_id(data[persistence_id]) + var/list/data = SSpersistence.photo_frames_database.get_key(persistence_id) + if(!isnull(data)) + load_from_id(data) /obj/structure/sign/picture_frame/proc/load_from_id(id) var/obj/item/photo/old/P = load_photo_from_disk(id) @@ -113,6 +105,15 @@ framed = P update_appearance() +/// Given a photo (or null), will change the contained picture, and queue a persistent save. +/obj/structure/sign/picture_frame/proc/set_and_save_framed(obj/item/photo/photo) + framed = photo + + if (isnull(persistence_id)) + return + + SSpersistence.photo_frames_database.set_key(persistence_id, photo?.picture?.id) + /obj/structure/sign/picture_frame/examine(mob/user) . = ..() if(in_range(src, user)) @@ -141,9 +142,9 @@ tool.play_tool_sound(src) framed.forceMove(drop_location()) user.visible_message(span_warning("[user] cuts away [framed] from [src]!")) - framed = null + set_and_save_framed(null) update_appearance() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/sign/picture_frame/attackby(obj/item/I, mob/user, params) @@ -155,7 +156,7 @@ var/obj/item/photo/P = I if(!user.transferItemToLoc(P, src)) return - framed = P + set_and_save_framed(P) update_appearance() return TRUE ..() @@ -173,11 +174,11 @@ . += framed /obj/structure/sign/picture_frame/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) var/obj/item/wallframe/picture/F = new /obj/item/wallframe/picture(loc) if(framed) F.displayed = framed - framed = null + set_and_save_framed(null) if(contents.len) var/obj/item/I = pick(contents) I.forceMove(F) @@ -277,7 +278,6 @@ /obj/structure/sign/picture_frame/portrait/bar persistence_id = "frame_bar" - del_id_on_destroy = TRUE ///Generates a persistence id unique to the current map. Every bar should feel a little bit different after all. /obj/structure/sign/picture_frame/portrait/bar/Initialize(mapload) diff --git a/code/modules/plumbing/plumbers/_plumb_machinery.dm b/code/modules/plumbing/plumbers/_plumb_machinery.dm index be75cf20479dcf..dcfa5faac5cbb0 100644 --- a/code/modules/plumbing/plumbers/_plumb_machinery.dm +++ b/code/modules/plumbing/plumbers/_plumb_machinery.dm @@ -32,7 +32,7 @@ /obj/machinery/plumbing/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/plumbing/plunger_act(obj/item/plunger/P, mob/living/user, reinforced) to_chat(user, span_notice("You start furiously plunging [name].")) diff --git a/code/modules/plumbing/plumbers/bottler.dm b/code/modules/plumbing/plumbers/bottler.dm index fe56282746f97f..8e0158b61da783 100644 --- a/code/modules/plumbing/plumbers/bottler.dm +++ b/code/modules/plumbing/plumbers/bottler.dm @@ -79,22 +79,25 @@ return PROCESS_KILL ///see if machine has enough to fill, is anchored down and has any inputspot objects to pick from - if(reagents.total_volume + 0.01 >= wanted_amount && anchored && length(inputspot.contents)) + if(reagents.total_volume >= wanted_amount && anchored && length(inputspot.contents)) use_power(active_power_usage * seconds_per_tick) var/obj/AM = pick(inputspot.contents)///pick a reagent_container that could be used - if((is_reagent_container(AM) && !istype(AM, /obj/item/reagent_containers/hypospray/medipen)) || istype(AM, /obj/item/ammo_casing/shotgun/dart)) - var/obj/item/reagent_containers/B = AM + //allowed containers + var/static/list/allowed_containers = list( + /obj/item/reagent_containers/cup, + /obj/item/ammo_casing/shotgun/dart, + ) + if(is_type_in_list(AM, allowed_containers)) + var/obj/item/B = AM ///see if it would overflow else inject if((B.reagents.total_volume + wanted_amount) <= B.reagents.maximum_volume) - reagents.trans_to(B, wanted_amount, transferred_by = src) + reagents.trans_to(B, wanted_amount) B.forceMove(goodspot) return ///glass was full so we move it away AM.forceMove(badspot) - if(istype(AM, /obj/item/slime_extract)) ///slime extracts need inject + else if(istype(AM, /obj/item/slime_extract)) ///slime extracts need inject AM.forceMove(goodspot) - reagents.trans_to(AM, wanted_amount, transferred_by = src, methods = INJECT) - return - if(istype(AM, /obj/item/slimecross/industrial)) ///no need to move slimecross industrial things - reagents.trans_to(AM, wanted_amount, transferred_by = src, methods = INJECT) - return + reagents.trans_to(AM, wanted_amount, methods = INJECT) + else if(istype(AM, /obj/item/slimecross/industrial)) ///no need to move slimecross industrial things + reagents.trans_to(AM, wanted_amount, methods = INJECT) diff --git a/code/modules/plumbing/plumbers/filter.dm b/code/modules/plumbing/plumbers/filter.dm index 4e4a282bd1dcd7..633f70830f016b 100644 --- a/code/modules/plumbing/plumbers/filter.dm +++ b/code/modules/plumbing/plumbers/filter.dm @@ -38,11 +38,12 @@ switch(action) if("add") var/which = params["which"] - var/selected_reagent = tgui_input_list(usr, "Select [which] reagent", "Reagent", GLOB.chemical_name_list) + + var/selected_reagent = tgui_input_list(usr, "Select [which] reagent", "Reagent", GLOB.name2reagent) if(!selected_reagent) return TRUE - var/chem_id = get_chem_id(selected_reagent) + var/datum/reagent/chem_id = GLOB.name2reagent[selected_reagent] if(!chem_id) return TRUE diff --git a/code/modules/plumbing/plumbers/iv_drip.dm b/code/modules/plumbing/plumbers/iv_drip.dm index 1db36c137e6d71..dc6242779d1f88 100644 --- a/code/modules/plumbing/plumbers/iv_drip.dm +++ b/code/modules/plumbing/plumbers/iv_drip.dm @@ -33,9 +33,8 @@ return FALSE //Alt click is used for rotation /obj/machinery/iv_drip/plumbing/wrench_act(mob/living/user, obj/item/tool) - . = ..() if(default_unfasten_wrench(user, tool) == SUCCESSFUL_UNFASTEN) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/iv_drip/plumbing/deconstruct(disassembled = TRUE) qdel(src) diff --git a/code/modules/plumbing/plumbers/pill_press.dm b/code/modules/plumbing/plumbers/pill_press.dm index 5061723acc7edb..279a7c00884533 100644 --- a/code/modules/plumbing/plumbers/pill_press.dm +++ b/code/modules/plumbing/plumbers/pill_press.dm @@ -37,7 +37,7 @@ CAT_PILLS = GLOB.reagent_containers[CAT_PILLS], CAT_PATCHES = GLOB.reagent_containers[CAT_PATCHES], "Bottles" = list(/obj/item/reagent_containers/cup/bottle), - CAT_HYPOS = GLOB.reagent_containers[CAT_HYPOS], // SKYRAT EDIT ADDITION - Hypovials + CAT_HYPOS = GLOB.reagent_containers[CAT_HYPOS], // NOVA EDIT ADDITION - Hypovials ) @@ -71,10 +71,10 @@ packaging_category = CAT_PATCHES else if(ispath(container, /obj/item/reagent_containers/pill)) packaging_category = CAT_PILLS - // SKYRAT EDIT ADDITION START - HYPOVIALS + // NOVA EDIT ADDITION START - HYPOVIALS else if(ispath(container, /obj/item/reagent_containers/cup/vial)) packaging_category = CAT_HYPOS - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END else packaging_category = "Bottles" return container @@ -84,7 +84,7 @@ return //shift & check to account for floating point inaccuracies - if(reagents.total_volume + 0.01 >= current_volume) + if(reagents.total_volume >= current_volume) var/obj/item/reagent_containers/container = locate(packaging_type) container = new container(src) var/suffix @@ -93,10 +93,10 @@ suffix = "Pill" if(CAT_PATCHES) suffix = "Patch" - //SKYRAT EDIT ADDITION BEGIN - HYPOVIALS + //NOVA EDIT ADDITION BEGIN - HYPOVIALS if (CAT_HYPOS) suffix = "Vial" - //SKYRAT EDIT ADDITION END - HYPOVIALS + //NOVA EDIT ADDITION END - HYPOVIALS else suffix = "Bottle" container.name = "[product_name] [suffix]" diff --git a/code/modules/plumbing/plumbers/plumbing_buffer.dm b/code/modules/plumbing/plumbers/plumbing_buffer.dm index b2bb21bc24e362..7b3ef306d04191 100644 --- a/code/modules/plumbing/plumbers/plumbing_buffer.dm +++ b/code/modules/plumbing/plumbers/plumbing_buffer.dm @@ -33,11 +33,11 @@ SIGNAL_HANDLER if(!buffer_net) return - if(reagents.total_volume + CHEMICAL_QUANTISATION_LEVEL >= activation_volume && mode == UNREADY) + if(reagents.total_volume >= activation_volume && mode == UNREADY) mode = IDLE buffer_net.check_active() - else if(reagents.total_volume + CHEMICAL_QUANTISATION_LEVEL < activation_volume && mode != UNREADY) + else if(reagents.total_volume < activation_volume && mode != UNREADY) mode = UNREADY buffer_net.check_active() diff --git a/code/modules/plumbing/plumbers/reaction_chamber.dm b/code/modules/plumbing/plumbers/reaction_chamber.dm index d41c502ecf9242..2b56bfb4ae6c98 100644 --- a/code/modules/plumbing/plumbers/reaction_chamber.dm +++ b/code/modules/plumbing/plumbers/reaction_chamber.dm @@ -104,32 +104,34 @@ switch(action) if("add") - var/selected_reagent = tgui_input_list(ui.user, "Select reagent", "Reagent", GLOB.chemical_name_list) + var/selected_reagent = tgui_input_list(ui.user, "Select reagent", "Reagent", GLOB.name2reagent) if(!selected_reagent) - return TRUE + return FALSE - var/input_reagent = get_chem_id(selected_reagent) + var/datum/reagent/input_reagent = GLOB.name2reagent[selected_reagent] if(!input_reagent) - return TRUE + return FALSE if(!required_reagents.Find(input_reagent)) var/input_amount = text2num(params["amount"]) - if(input_amount) + if(!isnull(input_amount)) required_reagents[input_reagent] = input_amount - - return TRUE + return TRUE + return FALSE if("remove") var/reagent = get_chem_id(params["chem"]) if(reagent) required_reagents.Remove(reagent) - return TRUE + return TRUE + return FALSE if("temperature") var/target = text2num(params["target"]) - if(target != null) + if(!isnull(target)) target_temperature = clamp(target, 0, 1000) - return TRUE + return TRUE + return FALSE var/result = handle_ui_act(action, params, ui, state) if(isnull(result)) @@ -170,7 +172,7 @@ return ..() /obj/machinery/plumbing/reaction_chamber/chem/handle_reagents(seconds_per_tick) - while(reagents.ph < acidic_limit || reagents.ph > alkaline_limit) + if(reagents.ph < acidic_limit || reagents.ph > alkaline_limit) //no power if(machine_stat & NOPOWER) return @@ -190,13 +192,13 @@ return //transfer buffer and handle reactions - var/ph_change = (reagents.ph > alkaline_limit ? (reagents.ph - alkaline_limit) : (acidic_limit - reagents.ph)) - var/buffer_amount = ((ph_change * reagents.total_volume) / (BUFFER_IONIZING_STRENGTH * num_of_reagents)) - if(!buffer.trans_to(reagents, buffer_amount * seconds_per_tick)) + var/ph_change = max((reagents.ph > alkaline_limit ? (reagents.ph - alkaline_limit) : (acidic_limit - reagents.ph)), 0.25) + var/buffer_amount = ((ph_change * reagents.total_volume) / (BUFFER_IONIZING_STRENGTH * num_of_reagents)) * seconds_per_tick + if(!buffer.trans_to(reagents, buffer_amount)) return - //some power for accurate ph balancing - use_power(active_power_usage * 0.03 * buffer_amount * seconds_per_tick) + //some power for accurate ph balancing & keep track of attempts made + use_power(active_power_usage * 0.03 * buffer_amount) /obj/machinery/plumbing/reaction_chamber/chem/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -215,11 +217,10 @@ switch(action) if("acidic") - acidic_limit = clamp(round(text2num(params["target"])), 0, alkaline_limit) + acidic_limit = clamp(round(text2num(params["target"])), CHEMICAL_MIN_PH, alkaline_limit - 1) if("alkaline") - alkaline_limit = clamp(round(text2num(params["target"])), acidic_limit + 0.01, 14) + alkaline_limit = clamp(round(text2num(params["target"])), acidic_limit + 1, CHEMICAL_MAX_PH) else return FALSE - #undef HEATER_COEFFICIENT diff --git a/code/modules/plumbing/plumbers/synthesizer.dm b/code/modules/plumbing/plumbers/synthesizer.dm index 3dddd648e6165d..0e9cb0c1b1125e 100644 --- a/code/modules/plumbing/plumbers/synthesizer.dm +++ b/code/modules/plumbing/plumbers/synthesizer.dm @@ -2,7 +2,6 @@ /obj/machinery/plumbing/synthesizer name = "chemical synthesizer" desc = "Produces a single chemical at a given volume. Must be plumbed. Most effective when working in unison with other chemical synthesizers, heaters and filters." - icon_state = "synthesizer" icon = 'icons/obj/pipes_n_cables/hydrochem/plumbers.dmi' active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 2 @@ -52,10 +51,13 @@ /obj/machinery/plumbing/synthesizer/process(seconds_per_tick) if(machine_stat & NOPOWER || !reagent_id || !amount) return - if(reagents.total_volume >= amount*seconds_per_tick*0.5) //otherwise we get leftovers, and we need this to be precise + + //otherwise we get leftovers, and we need this to be precise + if(reagents.total_volume >= amount) return - reagents.add_reagent(reagent_id, amount*seconds_per_tick*0.5) - use_power(active_power_usage * amount * seconds_per_tick * 0.5) + reagents.add_reagent(reagent_id, amount) + + use_power(active_power_usage) /obj/machinery/plumbing/synthesizer/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -63,8 +65,13 @@ ui = new(user, src, "ChemSynthesizer", name) ui.open() +/obj/machinery/plumbing/synthesizer/ui_static_data(mob/user) + . = ..() + .["possible_amounts"] = possible_amounts + /obj/machinery/plumbing/synthesizer/ui_data(mob/user) - var/list/data = list() + . = list() + .["amount"] = amount var/is_hallucinating = FALSE if(isliving(user)) @@ -72,36 +79,35 @@ is_hallucinating = !!living_user.has_status_effect(/datum/status_effect/hallucination) var/list/chemicals = list() - for(var/A in dispensable_reagents) - var/datum/reagent/R = GLOB.chemical_reagents_list[A] - if(R) - var/chemname = R.name + for(var/reagentID in dispensable_reagents) + var/datum/reagent/reagent = GLOB.chemical_reagents_list[reagentID] + if(reagent) + var/chemname = reagent.name if(is_hallucinating && prob(5)) chemname = "[pick_list_replacements("hallucination.json", "chemicals")]" - chemicals.Add(list(list("title" = chemname, "id" = ckey(R.name)))) - data["chemicals"] = chemicals - data["amount"] = amount - data["possible_amounts"] = possible_amounts + chemicals += list(list("title" = chemname, "id" = reagent.name)) + .["chemicals"] = chemicals - data["current_reagent"] = ckey(initial(reagent_id.name)) - return data + .["current_reagent"] = initial(reagent_id.name) /obj/machinery/plumbing/synthesizer/ui_act(action, params) . = ..() if(.) return - . = TRUE + switch(action) if("amount") var/new_amount = text2num(params["target"]) if(new_amount in possible_amounts) amount = new_amount . = TRUE + if("select") var/new_reagent = GLOB.name2reagent[params["reagent"]] if(new_reagent in dispensable_reagents) reagent_id = new_reagent . = TRUE + update_appearance() reagents.clear_reagents() diff --git a/code/modules/power/apc/apc_appearance.dm b/code/modules/power/apc/apc_appearance.dm index 06e0452efada73..41547288a0b73b 100644 --- a/code/modules/power/apc/apc_appearance.dm +++ b/code/modules/power/apc/apc_appearance.dm @@ -18,11 +18,6 @@ set_light(light_on_range) return - if(update_state & UPSTATE_BLUESCREEN) - set_light_color(LIGHT_COLOR_BLUE) - set_light(light_on_range) - return - set_light(0) /obj/machinery/power/apc/update_icon_state() @@ -39,9 +34,6 @@ if(update_state & UPSTATE_BROKE) icon_state = "apc-b" return ..() - if(update_state & UPSTATE_BLUESCREEN) - icon_state = "apcemag" - return ..() if(update_state & UPSTATE_WIREEXP) icon_state = "apcewires" return ..() @@ -85,8 +77,6 @@ if(cell) new_update_state |= UPSTATE_CELL_IN - else if((obj_flags & EMAGGED) || malfai) - new_update_state |= UPSTATE_BLUESCREEN else if(panel_open) new_update_state |= UPSTATE_WIREEXP @@ -116,3 +106,16 @@ // Used in process so it doesn't update the icon too much /obj/machinery/power/apc/proc/queue_icon_update() icon_update_needed = TRUE + +// Shows a dark-blue interface for a moment. Shouldn't appear on cameras. +/obj/machinery/power/apc/proc/flicker_hacked_icon() + var/image/hacker_image = image(icon = 'icons/obj/machines/wallmounts.dmi', loc = src, icon_state = "apcemag", layer = FLOAT_LAYER) + var/list/mobs_to_show = list() + // Collecting mobs the APC can see for this animation, rather than mobs that can see the APC. Important distinction, intended such that mobs on camera / with XRAY cannot see the flicker. + for(var/mob/viewer in view(src)) + if(viewer.client) + mobs_to_show += viewer.client + if(malfai?.client) + mobs_to_show |= malfai.client + flick_overlay_global(hacker_image, mobs_to_show, 1 SECONDS) + hacked_flicker_counter = rand(3, 5) //The counter is decrimented in the process() proc, which runs every two seconds. diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm index cff658fa6ca198..cbc1db293e72c5 100644 --- a/code/modules/power/apc/apc_main.dm +++ b/code/modules/power/apc/apc_main.dm @@ -71,6 +71,8 @@ var/malfhack = FALSE //New var for my changes to AI malf. --NeoFite ///Reference to our ai hacker var/mob/living/silicon/ai/malfai = null //See above --NeoFite + ///Counter for displaying the hacked overlay to mobs within view + var/hacked_flicker_counter = 0 ///State of the electronics inside (missing, installed, secured) var/has_electronics = APC_ELECTRONICS_MISSING ///used for the Blackout malf module @@ -154,6 +156,10 @@ offset_old = pixel_x pixel_x = -APC_PIXEL_OFFSET + hud_list = list( + MALF_APC_HUD = image(icon = 'icons/mob/huds/hud.dmi', icon_state = "apc_hacked", pixel_x = src.pixel_x, pixel_y = src.pixel_y) + ) + //Assign it to its area. If mappers already assigned an area string fast load the area from it else get the current area var/area/our_area = get_area(loc) if(areastring) @@ -227,7 +233,6 @@ QDEL_NULL(cell) if(terminal) disconnect_terminal() - return ..() /obj/machinery/power/apc/proc/assign_to_area(area/target_area = get_area(src)) @@ -295,7 +300,7 @@ . += "The cover is closed." /obj/machinery/power/apc/deconstruct(disassembled = TRUE) - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return if(!(machine_stat & BROKEN)) set_broken() @@ -458,10 +463,11 @@ update() if("emergency_lighting") emergency_lights = !emergency_lights - for(var/obj/machinery/light/L in area) - if(!initial(L.no_low_power)) //If there was an override set on creation, keep that override - L.no_low_power = emergency_lights - INVOKE_ASYNC(L, TYPE_PROC_REF(/obj/machinery/light/, update), FALSE) + for(var/turf/area_turf as anything in area.get_contained_turfs()) + for(var/obj/machinery/light/area_light in area_turf) + if(!initial(area_light.no_low_power)) //If there was an override set on creation, keep that override + area_light.no_low_power = emergency_lights + INVOKE_ASYNC(area_light, TYPE_PROC_REF(/obj/machinery/light/, update), FALSE) CHECK_TICK return TRUE @@ -482,6 +488,11 @@ force_update = TRUE return + if(obj_flags & EMAGGED || malfai) + hacked_flicker_counter = hacked_flicker_counter - 1 + if(hacked_flicker_counter <= 0) + flicker_hacked_icon() + //dont use any power from that channel if we shut that power channel off lastused_light = APC_CHANNEL_IS_ON(lighting) ? area.power_usage[AREA_USAGE_LIGHT] + area.power_usage[AREA_USAGE_STATIC_LIGHT] : 0 lastused_equip = APC_CHANNEL_IS_ON(equipment) ? area.power_usage[AREA_USAGE_EQUIP] + area.power_usage[AREA_USAGE_STATIC_EQUIP] : 0 @@ -551,7 +562,7 @@ if(!nightshift_lights || (nightshift_lights && !low_power_nightshift_lights)) low_power_nightshift_lights = TRUE INVOKE_ASYNC(src, PROC_REF(set_nightshift), TRUE) - else if(cell.percent() < 7 && long_term_power < 0) // SKYRAT EDIT CHANGE - orig: 15 + else if(cell.percent() < 7 && long_term_power < 0) // NOVA EDIT CHANGE - orig: 15 equipment = autoset(equipment, AUTOSET_OFF) lighting = autoset(lighting, AUTOSET_OFF) environ = autoset(environ, AUTOSET_ON) @@ -559,9 +570,9 @@ if(!nightshift_lights || (nightshift_lights && !low_power_nightshift_lights)) low_power_nightshift_lights = TRUE INVOKE_ASYNC(src, PROC_REF(set_nightshift), TRUE) - else if(cell.percent() < 17 && long_term_power < 0) // SKYRAT EDIT CHANGE - orig: 30 - equipment = autoset(equipment, AUTOSET_ON) // SKYRAT EDIT CHANGE - orig: AUTOSET_OFF - lighting = autoset(lighting, AUTOSET_OFF) // SKYRAT EDIT CHANGE - orig: AUTOSET_ON + else if(cell.percent() < 17 && long_term_power < 0) // NOVA EDIT CHANGE - orig: 30 + equipment = autoset(equipment, AUTOSET_ON) // NOVA EDIT CHANGE - orig: AUTOSET_OFF + lighting = autoset(lighting, AUTOSET_OFF) // NOVA EDIT CHANGE - orig: AUTOSET_ON environ = autoset(environ, AUTOSET_ON) alarm_manager.send_alarm(ALARM_POWER) if(!nightshift_lights || (nightshift_lights && !low_power_nightshift_lights)) @@ -667,10 +678,11 @@ INVOKE_ASYNC(src, PROC_REF(break_lights)) /obj/machinery/power/apc/proc/break_lights() - for(var/obj/machinery/light/breaked_light in area) - breaked_light.on = TRUE - breaked_light.break_light_tube() - stoplag() + for(var/turf/area_turf as anything in area.get_contained_turfs()) + for(var/obj/machinery/light/breaked_light in area_turf) + breaked_light.on = TRUE + breaked_light.break_light_tube() + stoplag() /obj/machinery/power/apc/should_atmos_process(datum/gas_mixture/air, exposed_temperature) return (exposed_temperature > 2000) diff --git a/code/modules/power/apc/apc_power_proc.dm b/code/modules/power/apc/apc_power_proc.dm index b49c0ba0a74d9c..6118791c15c7dc 100644 --- a/code/modules/power/apc/apc_power_proc.dm +++ b/code/modules/power/apc/apc_power_proc.dm @@ -138,8 +138,9 @@ if(nightshift_lights == on) return //no change nightshift_lights = on - for(var/obj/machinery/light/night_light in area) - if(night_light.nightshift_allowed) - night_light.nightshift_enabled = nightshift_lights - night_light.update(FALSE) - CHECK_TICK + for(var/turf/area_turf as anything in area.get_contained_turfs()) + for(var/obj/machinery/light/night_light in area_turf) + if(night_light.nightshift_allowed) + night_light.nightshift_enabled = nightshift_lights + night_light.update(FALSE) + CHECK_TICK diff --git a/code/modules/power/apc/apc_tool_act.dm b/code/modules/power/apc/apc_tool_act.dm index 55c9b34a350868..b35f4de3fba19c 100644 --- a/code/modules/power/apc/apc_tool_act.dm +++ b/code/modules/power/apc/apc_tool_act.dm @@ -130,7 +130,7 @@ if(welder.use_tool(src, user, 4 SECONDS, volume = 50)) update_integrity(min(atom_integrity += 50,max_integrity)) balloon_alert(user, "repaired") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS //disassembling the frame if(!opened || has_electronics || terminal) @@ -220,6 +220,7 @@ locked = FALSE balloon_alert(user, "interface damaged") update_appearance() + flicker_hacked_icon() return TRUE // damage and destruction acts diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 3951ae44defe1f..ad8f8695a054e5 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -142,7 +142,7 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri return ..() // then go ahead and delete the cable /obj/structure/cable/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) var/obj/item/stack/cable_coil/cable = new(drop_location(), 1) cable.set_cable_color(cable_color) qdel(src) @@ -439,7 +439,7 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri throw_speed = 3 throw_range = 5 mats_per_unit = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*0.1, /datum/material/glass=SMALL_MATERIAL_AMOUNT*0.1) - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT attack_verb_continuous = list("whips", "lashes", "disciplines", "flogs") attack_verb_simple = list("whip", "lash", "discipline", "flog") @@ -464,7 +464,7 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri /obj/item/stack/cable_coil/examine(mob/user) . = ..() - . += "Ctrl+Click to change the layer you are placing on." + . += "Use it in hand to change the layer you are placing on, amongst other things." /obj/item/stack/cable_coil/update_name() . = ..() @@ -575,16 +575,16 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri if(affecting && IS_ROBOTIC_LIMB(affecting)) if(user == H) user.visible_message(span_notice("[user] starts to fix some of the wires in [H]'s [affecting.name]."), span_notice("You start fixing some of the wires in [H == user ? "your" : "[H]'s"] [affecting.name].")) - /* SKYRAT EDIT START - ORIGINAL: + /* NOVA EDIT START - ORIGINAL: if(!do_after(user, 50, H)) return */ - // SKYRAT EDIT CHANGE START + // NOVA EDIT CHANGE START if(!do_after(user, (user == H ? self_delay : other_delay))) return - // SKYRAT EDIT CHANGE END + // NOVA EDIT CHANGE END if(item_heal_robotic(H, user, 0, 15)) - user.visible_message(span_green("[user] fixes some of the wires in to [H]'s [affecting.name]."), span_green("You fix some of the wires in [H == user ? "your" : "[H]'s"] [affecting.name].")) // SKYRAT EDIT ADD + user.visible_message(span_green("[user] fixes some of the wires in to [H]'s [affecting.name]."), span_green("You fix some of the wires in [H == user ? "your" : "[H]'s"] [affecting.name].")) // NOVA EDIT ADD use(1) return else diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index eb2a5b4d1a222a..63646b559226f4 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -20,12 +20,12 @@ throw_speed = 2 throw_range = 5 w_class = WEIGHT_CLASS_SMALL + custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*7, /datum/material/glass=SMALL_MATERIAL_AMOUNT*0.5) + grind_results = list(/datum/reagent/lithium = 15, /datum/reagent/iron = 5, /datum/reagent/silicon = 5) ///Current charge in cell units var/charge = 0 ///Maximum charge in cell units var/maxcharge = STANDARD_CELL_CHARGE - custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*7, /datum/material/glass=SMALL_MATERIAL_AMOUNT*0.5) - grind_results = list(/datum/reagent/lithium = 15, /datum/reagent/iron = 5, /datum/reagent/silicon = 5) ///If the cell has been booby-trapped by injecting it with plasma. Chance on use() to explode. var/rigged = FALSE ///If the power cell was damaged by an explosion, chance for it to become corrupted and function the same as rigged. @@ -162,16 +162,16 @@ /obj/item/stock_parts/cell/examine(mob/user) . = ..() - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION if(ratingdesc && !microfusion_readout) . += "This one has a rating of [display_energy(maxcharge)], and you should not swallow it." - // SKYRAT EDIT END + // NOVA EDIT END if(rigged) . += span_danger("This power cell seems to be faulty!") - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION else if(microfusion_readout) . += "The charge meter reads [charge]/[maxcharge] MF." - // SKYRAT EDIT END + // NOVA EDIT END else . += "The charge meter reads [CEILING(percent(), 0.1)]%." //so it doesn't say 0% charge when the overlay indicates it still has charge @@ -287,7 +287,7 @@ empty = TRUE /obj/item/stock_parts/cell/crap - name = "\improper Nanotrasen brand rechargeable AA battery" + name = "\improper Symphionia brand rechargeable AA battery" desc = "You can't top the plasma top." //TOTALLY TRADEMARK INFRINGEMENT maxcharge = STANDARD_CELL_CHARGE * 0.5 custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*0.4) diff --git a/code/modules/power/floodlight.dm b/code/modules/power/floodlight.dm index 7155ce6aa23833..d3c5c1de569aec 100644 --- a/code/modules/power/floodlight.dm +++ b/code/modules/power/floodlight.dm @@ -261,7 +261,7 @@ connect_to_network() else disconnect_from_network() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/power/floodlight/screwdriver_act(mob/living/user, obj/item/tool) . = ..() diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 6fa17d8dbe91a1..d86b178ea0c341 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -96,7 +96,6 @@ add_avail(power_output) lastgenlev = power_output lastgen -= power_output - ..() /obj/machinery/power/generator/proc/get_menu(include_link = TRUE) var/t = "" diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 93e3a2a7e4bf48..78aa47319535a0 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -190,7 +190,6 @@ GLOBAL_LIST_EMPTY(gravity_generators) if(count <= 3) // Their sprite is the top part of the generator part.set_density(FALSE) part.layer = WALL_OBJ_LAYER - SET_PLANE(part, GAME_PLANE_UPPER, our_turf) part.sprite_number = count part.main_part = src generator_parts += part @@ -420,14 +419,14 @@ GLOBAL_LIST_EMPTY(gravity_generators) if(mobs.client) shake_camera(mobs, 15, 1) mobs.playsound_local(T, null, 100, 1, 0.5, sound_to_use = alert_sound) - //SKYRAT EDIT ADDITON BEGIN + //NOVA EDIT ADDITON BEGIN if(!SSmapping.level_has_any_trait(z, ZTRAIT_STATION)) // SHUT THE FUCK UP ABANDONED STATIONS, I DON'T CARE return if(on) priority_announce("A gravity generator has successfully restarted its graviton field, artificial gravity is online.", "Gravity Generator", ANNOUNCER_GRAVGENON) else priority_announce("A gravity generator has lost its graviton field integrity ballast, artificial gravity is offline.", "Gravity Generator", ANNOUNCER_GRAVGENOFF) - //SKYRAT EDIT END + //NOVA EDIT END /obj/machinery/gravity_generator/main/proc/gravity_in_level() var/turf/T = get_turf(src) diff --git a/code/modules/power/lighting/light.dm b/code/modules/power/lighting/light.dm index ed4b2159cab6fc..f2abba090dce00 100644 --- a/code/modules/power/lighting/light.dm +++ b/code/modules/power/lighting/light.dm @@ -5,7 +5,6 @@ icon_state = "tube" desc = "A lighting fixture." layer = WALL_OBJ_LAYER - plane = GAME_PLANE_UPPER max_integrity = 100 use_power = ACTIVE_POWER_USE idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 0.02 @@ -73,7 +72,9 @@ ///The minimum value for the light's power in low power mode var/bulb_low_power_pow_min = 0.5 ///The Light range to use when working in fire alarm status - var/fire_brightness = 4 + var/fire_brightness = 9 + ///The Light power to use when working in fire alarm status + var/fire_power = 0.5 ///The Light colour to use when working in fire alarm status var/fire_colour = COLOR_FIRE_LIGHT_RED @@ -101,7 +102,7 @@ qdel(on_turf) if(!mapload) //sync up nightshift lighting for player made lights - var/area/our_area = get_room_area(src) + var/area/our_area = get_room_area() var/obj/machinery/power/apc/temp_apc = our_area.apc nightshift_enabled = temp_apc?.nightshift_lights @@ -131,7 +132,7 @@ update(trigger = FALSE) /obj/machinery/light/Destroy() - var/area/local_area = get_room_area(src) + var/area/local_area = get_room_area() if(local_area) on = FALSE QDEL_NULL(cell) @@ -154,7 +155,7 @@ /obj/machinery/light/update_icon_state() switch(status) // set icon_states if(LIGHT_OK) - var/area/local_area = get_area(src) + var/area/local_area = get_room_area() if(low_power_mode || major_emergency || (local_area?.fire)) icon_state = "[base_state]_emergency" else @@ -174,7 +175,7 @@ . += emissive_appearance(overlay_icon, "[base_state]", src, alpha = src.alpha) - var/area/local_area = get_room_area(src) + var/area/local_area = get_room_area() if(low_power_mode || major_emergency || (local_area?.fire)) . += mutable_appearance(overlay_icon, "[base_state]_emergency") @@ -185,10 +186,10 @@ . += mutable_appearance(overlay_icon, base_state) -//SKYRAT EDIT ADDITION BEGIN - AESTHETICS +//NOVA EDIT ADDITION BEGIN - AESTHETICS #define LIGHT_ON_DELAY_UPPER (2 SECONDS) #define LIGHT_ON_DELAY_LOWER (0.25 SECONDS) -//SKYRAT EDIT END +//NOVA EDIT END // Area sensitivity is traditionally tied directly to power use, as an optimization // But since we want it for fire reacting, we disregard that @@ -196,7 +197,7 @@ . = ..() if(!.) return - var/area/our_area = get_room_area(src) + var/area/our_area = get_room_area() RegisterSignal(our_area, COMSIG_AREA_FIRE_CHANGED, PROC_REF(handle_fire)) /obj/machinery/light/on_enter_area(datum/source, area/area_to_register) @@ -210,16 +211,16 @@ /obj/machinery/light/proc/handle_fire(area/source, new_fire) SIGNAL_HANDLER - update(instant = TRUE, play_sound = FALSE) //SKYRAT EDIT CHANGE + update(instant = TRUE, play_sound = FALSE) //NOVA EDIT CHANGE // update the icon_state and luminosity of the light depending on its state -/obj/machinery/light/proc/update(trigger = TRUE, instant = FALSE, play_sound = TRUE) //SKYRAT EDIT CHANGE +/obj/machinery/light/proc/update(trigger = TRUE, instant = FALSE, play_sound = TRUE) //NOVA EDIT CHANGE switch(status) if(LIGHT_BROKEN,LIGHT_BURNED,LIGHT_EMPTY) on = FALSE low_power_mode = FALSE if(on) - /* SKYRAT EDIT ORIGINAL + /* NOVA EDIT ORIGINAL var/brightness_set = brightness var/power_set = bulb_power var/color_set = bulb_colour @@ -227,9 +228,10 @@ color_set = color if(reagents) START_PROCESSING(SSmachines, src) - var/area/local_area =get_room_area(src) + var/area/local_area = get_room_area() if (local_area?.fire) color_set = fire_colour + power_set = fire_power brightness_set = fire_brightness else if (nightshift_enabled) brightness_set = nightshift_brightness @@ -253,7 +255,7 @@ l_color = color_set ) */ - //SKYRAT EDIT CHANGE BEGIN - AESTHETICS + //NOVA EDIT CHANGE BEGIN - AESTHETICS if(instant) turn_on(trigger, play_sound) else if(maploaded) @@ -262,7 +264,7 @@ else if(!turning_on) turning_on = TRUE addtimer(CALLBACK(src, PROC_REF(turn_on), trigger, play_sound), rand(LIGHT_ON_DELAY_LOWER, LIGHT_ON_DELAY_UPPER)) - //SKYRAT EDIT END + //NOVA EDIT END else if(has_emergency_power(LIGHT_EMERGENCY_POWER_USE) && !turned_off()) use_power = IDLE_POWER_USE low_power_mode = TRUE @@ -275,10 +277,10 @@ broken_sparks(start_only=TRUE) -//SKYRAT EDIT ADDITION BEGIN - AESTHETICS +//NOVA EDIT ADDITION BEGIN - AESTHETICS #undef LIGHT_ON_DELAY_UPPER #undef LIGHT_ON_DELAY_LOWER -//SKYRAT EDIT END +//NOVA EDIT END /obj/machinery/light/update_current_power_usage() if(!on && static_power_used > 0) //Light is off but still powered @@ -286,7 +288,7 @@ static_power_used = 0 else if(on) //Light is on, just recalculate usage var/static_power_used_new = 0 - var/area/local_area = get_room_area(src) + var/area/local_area = get_room_area() if (nightshift_enabled && !local_area?.fire) static_power_used_new = nightshift_brightness * nightshift_light_power * power_consumption_rate else @@ -353,10 +355,10 @@ . += "The [fitting] has been smashed." if(cell || has_mock_cell) . += "Its backup power charge meter reads [has_mock_cell ? 100 : round((cell.charge / cell.maxcharge) * 100, 0.1)]%." - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(constant_flickering) . += span_danger("The lighting ballast appears to be damaged, this could be fixed with a multitool.") - //SKYRAT EDIT END + //NOVA EDIT END @@ -405,13 +407,13 @@ deconstruct() return to_chat(user, span_userdanger("You stick \the [tool] into the light socket!")) - if(has_power() && (tool.flags_1 & CONDUCT_1)) + if(has_power() && (tool.obj_flags & CONDUCTS_ELECTRICITY)) do_sparks(3, TRUE, src) if (prob(75)) electrocute_mob(user, get_area(src), src, (rand(7,10) * 0.1), TRUE) /obj/machinery/light/deconstruct(disassembled = TRUE) - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) qdel(src) return var/obj/structure/light_construct/new_light = null @@ -448,7 +450,7 @@ ..() if(status != LIGHT_BROKEN && status != LIGHT_EMPTY) return - if(!on || !(attacking_object.flags_1 & CONDUCT_1)) + if(!on || !(attacking_object.obj_flags & CONDUCTS_ELECTRICITY)) return if(prob(12)) electrocute_mob(user, get_area(src), src, 0.3, TRUE) @@ -475,17 +477,17 @@ // returns if the light has power /but/ is manually turned off // if a light is turned off, it won't activate emergency power /obj/machinery/light/proc/turned_off() - var/area/local_area = get_room_area(src) - return !local_area.lightswitch && local_area.power_light || flickering || constant_flickering //SKYRAT EDIT CHANGE + var/area/local_area = get_room_area() + return !local_area.lightswitch && local_area.power_light || flickering || constant_flickering //NOVA EDIT CHANGE - ORIGINAL : return !local_area.lightswitch && local_area.power_light || flickering // returns whether this light has power // true if area has power and lightswitch is on /obj/machinery/light/proc/has_power() - var/area/local_area =get_room_area(src) - //SKYRAT EDIT ADDITION BEGIN + var/area/local_area = get_room_area() + //NOVA EDIT ADDITION BEGIN if(isnull(local_area)) return FALSE - //SKYRAT EDIT END + //NOVA EDIT END return local_area.lightswitch && local_area.power_light // returns whether this light has emergency power @@ -527,13 +529,13 @@ if(status != LIGHT_OK || !has_power()) break on = !on - update(FALSE, TRUE) //SKYRAT EDIT CHANGE + update(FALSE, TRUE) //NOVA EDIT CHANGE sleep(rand(5, 15)) if(has_power()) on = (status == LIGHT_OK) else on = FALSE - update(FALSE, TRUE) // SKYRAT EDIT CHANGE + update(FALSE, TRUE) // NOVA EDIT CHANGE . = TRUE //did we actually flicker? flickering = FALSE @@ -687,7 +689,7 @@ // called when area power state changes /obj/machinery/light/power_change() SHOULD_CALL_PARENT(FALSE) - var/area/local_area =get_room_area(src) + var/area/local_area = get_room_area() set_on(local_area.lightswitch && local_area.power_light) // called when heated @@ -748,7 +750,7 @@ light_type = /obj/item/light/bulb fitting = "bulb" nightshift_brightness = 3 - fire_brightness = 2 + fire_brightness = 4.5 /obj/machinery/light/floor/get_light_offset() return list(0, 0) diff --git a/code/modules/power/lighting/light_construct.dm b/code/modules/power/lighting/light_construct.dm index 05d9533c79ea76..905ae72c2e38bd 100644 --- a/code/modules/power/lighting/light_construct.dm +++ b/code/modules/power/lighting/light_construct.dm @@ -5,7 +5,6 @@ icon_state = "tube-construct-stage1" anchored = TRUE layer = WALL_OBJ_LAYER - plane = GAME_PLANE_UPPER max_integrity = 200 armor_type = /datum/armor/structure_light_construct @@ -164,7 +163,7 @@ qdel(src) /obj/structure/light_construct/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/stack/sheet/iron(loc, sheets_refunded) qdel(src) diff --git a/code/modules/power/lighting/light_items.dm b/code/modules/power/lighting/light_items.dm index 9f2bff9cdca366..5e9df6ee432eeb 100644 --- a/code/modules/power/lighting/light_items.dm +++ b/code/modules/power/lighting/light_items.dm @@ -116,7 +116,7 @@ if(!isliving(moving_atom)) return var/mob/living/moving_mob = moving_atom - if(!(moving_mob.movement_type & (FLYING|FLOATING)) || moving_mob.buckled) + if(!(moving_mob.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) || moving_mob.buckled) playsound(src, 'sound/effects/footstep/glass_step.ogg', HAS_TRAIT(moving_mob, TRAIT_LIGHT_STEP) ? 30 : 50, TRUE) if(status == LIGHT_BURNED || status == LIGHT_OK) shatter(moving_mob) diff --git a/code/modules/power/lighting/light_mapping_helpers.dm b/code/modules/power/lighting/light_mapping_helpers.dm index a2171c8897c89b..db11c77fbefb3b 100644 --- a/code/modules/power/lighting/light_mapping_helpers.dm +++ b/code/modules/power/lighting/light_mapping_helpers.dm @@ -39,7 +39,7 @@ /obj/machinery/light/red/dim brightness = 4 bulb_power = 0.7 - fire_brightness = 2 + fire_brightness = 4.5 /obj/machinery/light/blacklight bulb_colour = "#A700FF" @@ -58,7 +58,7 @@ fitting = "bulb" brightness = 4 nightshift_brightness = 4 - fire_brightness = 3 + fire_brightness = 4.5 bulb_colour = "#FFD6AA" fire_colour = "#bd3f46" desc = "A small lighting fixture." @@ -85,13 +85,13 @@ /obj/machinery/light/small/red/dim brightness = 2 bulb_power = 0.8 - fire_brightness = 2 + fire_brightness = 2.5 /obj/machinery/light/small/blacklight bulb_colour = "#A700FF" nightshift_allowed = FALSE brightness = 4 - fire_brightness = 3 + fire_brightness = 4.5 fire_colour = "#d400ff" // -------- Directional presets diff --git a/code/modules/power/pipecleaners.dm b/code/modules/power/pipecleaners.dm index f052913c2e7339..2f18bab660a1cf 100644 --- a/code/modules/power/pipecleaners.dm +++ b/code/modules/power/pipecleaners.dm @@ -107,7 +107,7 @@ By design, d1 is the smallest direction and d2 is the highest return ..() // then go ahead and delete the pipe_cleaner /obj/structure/pipe_cleaner/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) var/turf/T = get_turf(loc) if(T) stored.forceMove(T) @@ -197,7 +197,7 @@ By design, d1 is the smallest direction and d2 is the highest throw_speed = 3 throw_range = 5 mats_per_unit = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*0.1, /datum/material/glass=SMALL_MATERIAL_AMOUNT*0.1) - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT attack_verb_continuous = list("whips", "lashes", "disciplines", "flogs") attack_verb_simple = list("whip", "lash", "discipline", "flog") diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 39c3e536144030..798bf2a2d75936 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -60,6 +60,8 @@ return can_change_cable_layer /obj/machinery/power/multitool_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(!can_change_cable_layer || !cable_layer_change_checks(user, tool)) return @@ -69,7 +71,7 @@ cable_layer = GLOB.cable_name_to_layer[choice] balloon_alert(user, "now operating on the [choice]") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/power/multitool_act_secondary(mob/living/user, obj/item/tool) return multitool_act(user, tool) diff --git a/code/modules/power/rtg.dm b/code/modules/power/rtg.dm index af48e9c5944f86..f79eb808a8756d 100644 --- a/code/modules/power/rtg.dm +++ b/code/modules/power/rtg.dm @@ -22,7 +22,6 @@ connect_to_network() /obj/machinery/power/rtg/process() - ..() add_avail(power_gen) /obj/machinery/power/rtg/RefreshParts() diff --git a/code/modules/power/singularity/boh_tear.dm b/code/modules/power/singularity/boh_tear.dm index 1816bef5197549..1bc78b11148c75 100644 --- a/code/modules/power/singularity/boh_tear.dm +++ b/code/modules/power/singularity/boh_tear.dm @@ -21,7 +21,7 @@ pixel_y = -32 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF flags_1 = SUPERMATTER_IGNORES_1 -//SKYRAT EDIT START: Nicer RodStopper +//NOVA EDIT START: Nicer RodStopper /obj/boh_tear/Initialize(mapload) . = ..() QDEL_IN(src, 10 SECONDS) // vanishes after 10 seconds @@ -36,7 +36,7 @@ roaming = FALSE, \ singularity_size = STAGE_SIX, \ ) -//SKYRAT EDIT STOP: Nicer RodStopper +//NOVA EDIT STOP: Nicer RodStopper /obj/boh_tear/attack_tk(mob/user) if(!isliving(user)) return diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index ac6eb376ac3d43..e57e97bedf1daf 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -3,7 +3,7 @@ /obj/machinery/field/containment name = "containment field" desc = "An energy field." - icon = 'icons/obj/machines/engine/singularity.dmi' // SKYRAT EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE + icon = 'icons/obj/machines/engine/singularity.dmi' // NOVA EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE icon_state = "Contain_F" density = FALSE move_resist = INFINITY @@ -123,7 +123,7 @@ if(isliving(mover)) shock(mover) return - if(ismachinery(mover) || isstructure(mover) || ismecha(mover)) + if(ismachinery(mover) || isstructure(mover) || isvehicle(mover)) bump_field(mover) return diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index d1a5a10a31a20c..0c7f5897e73912 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -1,7 +1,7 @@ /obj/machinery/power/emitter name = "emitter" desc = "A heavy-duty industrial laser, often used in containment fields and power generation." - icon = 'icons/obj/machines/engine/singularity.dmi' //SKYRAT EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE + icon = 'icons/obj/machines/engine/singularity.dmi' //NOVA EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE icon_state = "emitter" base_icon_state = "emitter" @@ -263,7 +263,7 @@ /obj/machinery/power/emitter/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/power/emitter/welder_act(mob/living/user, obj/item/item) ..() @@ -346,8 +346,8 @@ /obj/machinery/power/emitter/proc/integrate(obj/item/gun/energy/energy_gun, mob/user) if(!istype(energy_gun, /obj/item/gun/energy)) return - if(istype(energy_gun, /obj/item/gun/energy/cell_loaded))//SKYRAT EDIT MEDIGUNS - return //SKYRAT EDIT END + if(istype(energy_gun, /obj/item/gun/energy/cell_loaded))//NOVA EDIT MEDIGUNS + return //NOVA EDIT END if(!user.transferItemToLoc(energy_gun, src)) return gun = energy_gun diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 88534d7e9b07ac..93a339c2cc298f 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -128,7 +128,7 @@ no power level overlay is currently in the overlays list. /obj/machinery/field/generator/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/field/generator/welder_act(mob/living/user, obj/item/welder) . = ..() diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index 3e36ff3c393a83..a2485d5a2f3ba0 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -5,6 +5,8 @@ #define NARSIE_MESMERIZE_EFFECT 60 #define NARSIE_SINGULARITY_SIZE 12 +#define ADMIN_WARNING_MESSAGE "Invoking this will begin the Nar'Sie roundender. Assume that this WILL end the round in a few minutes. Are you sure?" + /// Nar'Sie, the God of the blood cultists /obj/narsie name = "Nar'Sie" @@ -39,6 +41,19 @@ /obj/narsie/Initialize(mapload) . = ..() + narsie_spawn_animation() + +/obj/narsie/Destroy() + if (GLOB.cult_narsie == src) + fall_of_the_harbinger() + GLOB.cult_narsie = null + + return ..() + +/// This proc sets up all of Nar'Sie's abilities, stats, and begins her round-ending capabilities. She does not do anything unless this proc is invoked. +/// This is only meant to be invoked after this instance is initialized in specific pro-sumer procs, as it WILL derail the entire round. +/obj/narsie/proc/start_ending_the_round() + GLOB.cult_narsie = src SSpoints_of_interest.make_point_of_interest(src) singularity = WEAKREF(AddComponent( @@ -58,10 +73,14 @@ var/area/area = get_area(src) if(area) var/mutable_appearance/alert_overlay = mutable_appearance('icons/effects/cult/effects.dmi', "ghostalertsie") - notify_ghosts("Nar'Sie has risen in [area]. Reach out to the Geometer to be given a new shell for your soul.", source = src, alert_overlay = alert_overlay, action = NOTIFY_PLAY) - narsie_spawn_animation() + notify_ghosts( + "Nar'Sie has risen in [area]. Reach out to the Geometer to be given a new shell for your soul.", + source = src, + header = "Nar'Sie has risen!", + click_interact = TRUE, + alert_overlay = alert_overlay, + ) - GLOB.cult_narsie = src var/list/all_cults = list() for (var/datum/antagonist/cult/cultist in GLOB.antagonists) @@ -88,10 +107,8 @@ soul_goal = round(1 + LAZYLEN(souls_needed) * 0.75) INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(begin_the_end)) -/obj/narsie/Destroy() - send_to_playing_players(span_narsie("\"[pick("Nooooo...", "Not die. How-", "Die. Mort-", "Sas tyen re-")]\"")) - sound_to_playing_players('sound/magic/demon_dies.ogg', 50) - +/// Cleans up all of Nar'Sie's abilities, stats, and ends her round-ending capabilities. This should only be called if `start_ending_the_round()` successfully started. +/obj/narsie/proc/fall_of_the_harbinger() var/list/all_cults = list() for (var/datum/antagonist/cult/cultist in GLOB.antagonists) @@ -106,10 +123,28 @@ summon_objective.summoned = FALSE summon_objective.killed = TRUE - if (GLOB.cult_narsie == src) - GLOB.cult_narsie = null + send_to_playing_players(span_narsie(span_bold(pick("Nooooo...", "Not die. How-", "Die. Mort-", "Sas tyen re-")))) + sound_to_playing_players('sound/magic/demon_dies.ogg', 50) - return ..() +/obj/narsie/vv_get_dropdown() + . = ..() + VV_DROPDOWN_OPTION("", "---------") + VV_DROPDOWN_OPTION(VV_HK_BEGIN_NARSIE_ROUNDEND, "Begin Nar'Sie Roundender") + +/obj/narsie/vv_do_topic(list/href_list) + . = ..() + + if(!.) + return + + if(isnull(usr) || !href_list[VV_HK_BEGIN_NARSIE_ROUNDEND] || !check_rights(R_FUN, show_msg = TRUE)) + return + + if(tgui_alert(usr, ADMIN_WARNING_MESSAGE, "Begin Nar'Sie Roundender", list("I'm Sure", "Abort")) != "I'm Sure") + return + + log_admin("[key_name(usr)] has triggered the Nar'Sie roundender.") + start_ending_the_round() /obj/narsie/attack_ghost(mob/user) makeNewConstruct(/mob/living/basic/construct/harvester, user, cultoverride = TRUE, loc_override = loc) @@ -218,26 +253,30 @@ ///First crew last second win check and flufftext for [/proc/begin_the_end()] /proc/narsie_end_begin_check() if(QDELETED(GLOB.cult_narsie)) // uno - priority_announce("Status report? We detected an anomaly, but it disappeared almost immediately.","Central Command Higher Dimensional Affairs", 'sound/misc/notice1.ogg') + priority_announce("Status report? We detected an anomaly, but it disappeared almost immediately.","[command_name()] Higher Dimensional Affairs", 'sound/misc/notice1.ogg') GLOB.cult_narsie = null addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(cult_ending_helper), CULT_FAILURE_NARSIE_KILLED), 2 SECONDS) return - priority_announce("An acausal dimensional event has been detected in your sector. Event has been flagged EXTINCTION-CLASS. Directing all available assets toward simulating solutions. SOLUTION ETA: 60 SECONDS.","Central Command Higher Dimensional Affairs", 'sound/misc/airraid.ogg') + priority_announce( + text = "An acausal dimensional event has been detected in your sector. Event has been flagged EXTINCTION-CLASS. Directing all available assets toward simulating solutions. SOLUTION ETA: 60 SECONDS.", + title = "[command_name()] Higher Dimensional Affairs", + sound = 'sound/misc/airraid.ogg', + ) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(narsie_end_second_check)), 50 SECONDS) ///Second crew last second win check and flufftext for [/proc/begin_the_end()] /proc/narsie_end_second_check() if(QDELETED(GLOB.cult_narsie)) // dos - priority_announce("Simulations aborted, sensors report that the acasual event is normalizing. Good work, crew.","Central Command Higher Dimensional Affairs", 'sound/misc/notice1.ogg') + priority_announce("Simulations aborted, sensors report that the acasual event is normalizing. Good work, crew.","[command_name()] Higher Dimensional Affairs", 'sound/misc/notice1.ogg') GLOB.cult_narsie = null addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(cult_ending_helper), CULT_FAILURE_NARSIE_KILLED), 2 SECONDS) return - priority_announce("Simulations on acausal dimensional event complete. Deploying solution package now. Deployment ETA: ONE MINUTE. ","Central Command Higher Dimensional Affairs") + priority_announce("Simulations on acausal dimensional event complete. Deploying solution package now. Deployment ETA: ONE MINUTE. ","[command_name()] Higher Dimensional Affairs") addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(narsie_start_destroy_station)), 5 SECONDS) ///security level and shuttle lockdowns for [/proc/begin_the_end()] /proc/narsie_start_destroy_station() - SSsecurity_level.set_level(SEC_LEVEL_GAMMA) //SKYRAT EDIT CHANGE - ALERTS - ORIGINAL "delta" + SSsecurity_level.set_level(SEC_LEVEL_GAMMA) //NOVA EDIT CHANGE - ALERTS - ORIGINAL "delta" SSshuttle.registerHostileEnvironment(GLOB.cult_narsie) SSshuttle.lockdown = TRUE addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(narsie_apocalypse)), 1 MINUTES) @@ -245,7 +284,7 @@ ///Third crew last second win check and flufftext for [/proc/begin_the_end()] /proc/narsie_apocalypse() if(QDELETED(GLOB.cult_narsie)) // tres - priority_announce("Normalization detected! Abort the solution package!","Central Command Higher Dimensional Affairs", 'sound/misc/notice1.ogg') + priority_announce("Normalization detected! Abort the solution package!","[command_name()] Higher Dimensional Affairs", 'sound/misc/notice1.ogg') SSshuttle.clearHostileEnvironment(GLOB.cult_narsie) GLOB.cult_narsie = null addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(narsie_last_second_win)), 2 SECONDS) @@ -289,3 +328,5 @@ #undef NARSIE_MESMERIZE_CHANCE #undef NARSIE_MESMERIZE_EFFECT #undef NARSIE_SINGULARITY_SIZE + +#undef ADMIN_WARNING_MESSAGE diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 44d318d3467c81..b21b26dcea0ae9 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -79,14 +79,11 @@ notify_ghosts( ghost_notification_message, source = src, - action = NOTIFY_ORBIT, - flashwindow = FALSE, - ghost_sound = 'sound/machines/warning-buzzer.ogg', header = ghost_notification_message, - notify_volume = 75 + ghost_sound = 'sound/machines/warning-buzzer.ogg', + notify_volume = 75, ) - /obj/singularity/Destroy() STOP_PROCESSING(SSsinguloprocess, src) return ..() diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index f79e75fdaac93f..64c09a987ed87f 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -122,7 +122,7 @@ azimuth_current = new_angle /obj/machinery/power/solar/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(disassembled) var/obj/item/solar_assembly/S = locate() in src if(S) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 3f02447ddbcae6..6325bf21553ff0 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -177,6 +177,10 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) /// If a sliver of the supermatter has been removed. Almost certainly by a traitor. Lowers the delamination countdown time. var/supermatter_sliver_removed = FALSE + + /// If the SM is decorated with holiday lights + var/holiday_lights = FALSE + /// Cooldown for sending emergency alerts to the common radio channel COOLDOWN_DECLARE(common_radio_cooldown) @@ -212,6 +216,9 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) AddComponent(/datum/component/supermatter_crystal, CALLBACK(src, PROC_REF(wrench_act_callback)), CALLBACK(src, PROC_REF(consume_callback))) soundloop = new(src, TRUE) + if(!isnull(check_holidays(FESTIVE_SEASON))) + holiday_lights() + if (!moveable) move_resist = MOVE_FORCE_OVERPOWERING // Avoid being moved by statues or other memes @@ -243,8 +250,18 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) /obj/machinery/power/supermatter_crystal/examine(mob/user) . = ..() var/immune = HAS_MIND_TRAIT(user, TRAIT_MADNESS_IMMUNE) - if(isliving(user) && !immune && (get_dist(user, src) < SM_HALLUCINATION_RANGE(internal_energy))) - . += span_danger("You get headaches just from looking at it.") + if(isliving(user)) + if (!immune && (get_dist(user, src) < SM_HALLUCINATION_RANGE(internal_energy))) + . += span_danger("You get headaches just from looking at it.") + var/mob/living/living_user = user + if (HAS_TRAIT(user, TRAIT_REMOTE_TASTING)) + to_chat(user, span_warning("The taste is overwhelming and indescribable!")) + living_user.electrocute_act(shock_damage = 15, source = src, flags = SHOCK_KNOCKDOWN | SHOCK_NOGLOVES) + . += span_notice("It could use a little more Sodium Chloride...") + + if(holiday_lights) + . += span_notice("Radiating both festive cheer and actual radiation, it has a dazzling spectacle lights wrapped lovingly around the base transforming it from a potential doomsday device into a cosmic yuletide centerpiece.") + . += delamination_strategy.examine(src) return . @@ -301,7 +318,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) damage_factors = calculate_damage() if(damage == 0) // Clear any in game forced delams if on full health. set_delam(SM_DELAM_PRIO_IN_GAME, SM_DELAM_STRATEGY_PURGE) - else + else if(damage <= explosion_point) set_delam(SM_DELAM_PRIO_NONE, SM_DELAM_STRATEGY_PURGE) // This one cant clear any forced delams. delamination_strategy.delam_progress(src) if(damage > explosion_point && !final_countdown) @@ -489,6 +506,13 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) . += mutable_appearance(icon = icon, icon_state = "[base_icon_state]-psy", layer = FLOAT_LAYER - 1, alpha = psy_coeff * 255) if(delamination_strategy) . += delamination_strategy.overlays(src) + if(holiday_lights) + if(istype(src, /obj/machinery/power/supermatter_crystal/shard)) + . += mutable_appearance(icon, "holiday_lights_shard") + . += emissive_appearance(icon, "holiday_lights_shard_e", src, alpha = src.alpha) + else + . += mutable_appearance(icon, "holiday_lights") + . += emissive_appearance(icon, "holiday_lights_e", src, alpha = src.alpha) return . /obj/machinery/power/supermatter_crystal/update_icon(updates) @@ -534,8 +558,12 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) final_countdown = TRUE - SEND_GLOBAL_SIGNAL(COMSIG_MAIN_SM_DELAMINATING, final_countdown) // SKYRAT EDIT ADDITION - DELAM_SCRAM - notify_ghosts("[src] has begun the delamination process!", source = src, header = "Meltdown Incoming") + SEND_GLOBAL_SIGNAL(COMSIG_MAIN_SM_DELAMINATING, final_countdown) // NOVA EDIT ADDITION - DELAM_SCRAM + notify_ghosts( + "[src] has begun the delamination process!", + source = src, + header = "Meltdown Incoming", + ) var/datum/sm_delam/last_delamination_strategy = delamination_strategy var/list/count_down_messages = delamination_strategy.count_down_messages() @@ -1015,6 +1043,29 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) COOLDOWN_START(src, common_radio_cooldown, SUPERMATTER_COMMON_RADIO_DELAY) return TRUE +/obj/machinery/power/supermatter_crystal/proc/holiday_lights() + holiday_lights = TRUE + RegisterSignal(src, COMSIG_ATOM_ITEM_INTERACTION, PROC_REF(holiday_item_interaction)) + update_appearance() + +/// Consume the santa hat and add it as an overlay +/obj/machinery/power/supermatter_crystal/proc/holiday_item_interaction(source, mob/living/user, obj/item/item, list/modifiers) + SIGNAL_HANDLER + if(istype(item, /obj/item/clothing/head/costume/santa) || istype(item, /obj/item/clothing/head/costume/nova/christmas)) // NOVA EDIT CHANGE - Loadouts + QDEL_NULL(item) + RegisterSignal(src, COMSIG_ATOM_EXAMINE, PROC_REF(holiday_hat_examine)) + if(istype(src, /obj/machinery/power/supermatter_crystal/shard)) + add_overlay(mutable_appearance(icon, "santa_hat_shard")) + else + add_overlay(mutable_appearance(icon, "santa_hat")) + return COMPONENT_CANCEL_ATTACK_CHAIN + return NONE + +/// Adds the hat flavor text when examined +/obj/machinery/power/supermatter_crystal/proc/holiday_hat_examine(atom/source, mob/user, list/examine_list) + SIGNAL_HANDLER + examine_list += span_info("There's a santa hat placed atop it. How it got there without being dusted is a mystery.") + #undef BIKE #undef COIL #undef ROD diff --git a/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm b/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm index 8edcc6710bfb9a..9a27e8c57c95b4 100644 --- a/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm +++ b/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm @@ -15,7 +15,7 @@ GLOBAL_LIST_INIT(sm_delam_list, list( /datum/sm_delam/proc/can_select(obj/machinery/power/supermatter_crystal/sm) return FALSE -#define ROUNDCOUNT_ENGINE_JUST_EXPLODED 0 +#define ROUNDCOUNT_ENGINE_JUST_EXPLODED -1 /// Called when the count down has been finished, do the nasty work. /// [/obj/machinery/power/supermatter_crystal/proc/count_down] @@ -37,7 +37,7 @@ GLOBAL_LIST_INIT(sm_delam_list, list( if(sm.damage <= sm.warning_point) // Damage is too low, lets not return FALSE - notify_delam_suppression(sm) // SKYRAT EDIT ADDITION - DELAM_SCRAM + notify_delam_suppression(sm) // NOVA EDIT ADDITION - DELAM_SCRAM if (sm.damage >= sm.emergency_point && sm.damage_archived < sm.emergency_point) sm.investigate_log("has entered the emergency point.", INVESTIGATE_ENGINE) @@ -57,16 +57,16 @@ GLOBAL_LIST_INIT(sm_delam_list, list( switch(sm.get_status()) if(SUPERMATTER_DELAMINATING) - // SKYRAT EDIT ADDITION - alert_sound_to_playing('modular_skyrat/master_files/sound/effects/reactor/meltdown.ogg', override_volume = TRUE) + // NOVA EDIT ADDITION + alert_sound_to_playing('modular_nova/master_files/sound/effects/reactor/meltdown.ogg', override_volume = TRUE) alert_sound_to_playing('sound/effects/alert.ogg', override_volume = TRUE) - // SKYRAT EDIT END + // NOVA EDIT END playsound(sm, 'sound/misc/bloblarm.ogg', 100, FALSE, 40, 30, falloff_distance = 10) if(SUPERMATTER_EMERGENCY) - // SKYRAT EDIT ADDITION - alert_sound_to_playing('modular_skyrat/master_files/sound/effects/reactor/core_overheating.ogg', override_volume = TRUE) + // NOVA EDIT ADDITION + alert_sound_to_playing('modular_nova/master_files/sound/effects/reactor/core_overheating.ogg', override_volume = TRUE) alert_sound_to_playing('sound/misc/notice1.ogg', override_volume = TRUE) - // SKYRAT EDIT END + // NOVA EDIT END playsound(sm, 'sound/machines/engine_alert1.ogg', 100, FALSE, 30, 30, falloff_distance = 10) if(SUPERMATTER_DANGER) playsound(sm, 'sound/machines/engine_alert2.ogg', 100, FALSE, 30, 30, falloff_distance = 10) diff --git a/code/modules/power/supermatter/supermatter_delamination/cascade_delam.dm b/code/modules/power/supermatter/supermatter_delamination/cascade_delam.dm index 5d8cfecaa40d24..52a8cbe1188161 100644 --- a/code/modules/power/supermatter/supermatter_delamination/cascade_delam.dm +++ b/code/modules/power/supermatter/supermatter_delamination/cascade_delam.dm @@ -59,7 +59,7 @@ effect_emergency_state() effect_cascade_demoralize() priority_announce("A Type-C resonance shift event has occurred in your sector. Scans indicate local oscillation flux affecting spatial and gravitational substructure. \ - Multiple resonance hotspots have formed. Please standby.", "Nanotrasen Star Observation Association", ANNOUNCER_SPANOMALIES) + Multiple resonance hotspots have formed. Please standby.", "Symphionia Star Observation Association", ANNOUNCER_SPANOMALIES) sleep(2 SECONDS) effect_strand_shuttle() sleep(5 SECONDS) @@ -90,7 +90,7 @@ return FALSE priority_announce("Attention: Long range anomaly scans indicate abnormal quantities of harmonic flux originating from \ a subject within [station_name()], a resonance collapse may occur.", - "Nanotrasen Star Observation Association", 'sound/misc/airraid.ogg') + "Symphionia Star Observation Association", 'sound/misc/airraid.ogg') return TRUE /// Signal calls cant sleep, we gotta do this. diff --git a/code/modules/power/supermatter/supermatter_delamination/delamination_effects.dm b/code/modules/power/supermatter/supermatter_delamination/delamination_effects.dm index 21b91725d3639e..100e7f3c1b6fb8 100644 --- a/code/modules/power/supermatter/supermatter_delamination/delamination_effects.dm +++ b/code/modules/power/supermatter/supermatter_delamination/delamination_effects.dm @@ -131,8 +131,13 @@ // say goodbye to that shuttle of yours if(SSshuttle.emergency.mode != SHUTTLE_ESCAPE) - priority_announce("Fatal error occurred in emergency shuttle uplink during transit. Unable to reestablish connection.", - "Emergency Shuttle Uplink Alert", ANNOUNCER_SHUTTLE) // SKYRAT EDIT CHANGE - Announcer Sounds + priority_announce( + text = "Fatal error occurred in emergency shuttle uplink during transit. Unable to reestablish connection.", + title = "Shuttle Failure", + sound = ANNOUNCER_SHUTTLE, // NOVA EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg', + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "grey", + ) else // except if you are on it already, then you are safe c: minor_announce("ERROR: Corruption detected in navigation protocols. Connection with Transponder #XCC-P5831-ES13 lost. \ @@ -184,7 +189,7 @@ priority_announce("Reports indicate formation of crystalline seeds following resonance shift event. \ Rapid expansion of crystal mass proportional to rising gravitational force. \ Matter collapse due to gravitational pull foreseeable.", - "Nanotrasen Star Observation Association") + "Symphionia Star Observation Association") sleep(25 SECONDS) diff --git a/code/modules/power/supermatter/supermatter_variants.dm b/code/modules/power/supermatter/supermatter_variants.dm index 2390ab3d0b7595..9d69066a5353bd 100644 --- a/code/modules/power/supermatter/supermatter_variants.dm +++ b/code/modules/power/supermatter/supermatter_variants.dm @@ -19,7 +19,6 @@ absorption_ratio = 0.125 explosion_power = 12 layer = ABOVE_MOB_LAYER - plane = GAME_PLANE_UPPER moveable = TRUE /// Shard SM with it's processing disabled. diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index 972c98d4862c4e..def7bf7aa4d28a 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -73,7 +73,7 @@ /obj/machinery/power/energy_accumulator/tesla_coil/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/power/energy_accumulator/tesla_coil/attackby(obj/item/W, mob/user, params) if(default_deconstruction_screwdriver(user, "coil_open[anchored]", "coil[anchored]", W)) @@ -153,7 +153,7 @@ /obj/machinery/power/energy_accumulator/grounding_rod/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/power/energy_accumulator/grounding_rod/attackby(obj/item/W, mob/user, params) if(default_deconstruction_screwdriver(user, "grounding_rod_open[anchored]", "grounding_rod[anchored]", W)) diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index 922f0ede64619c..d39840f875ebc8 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -138,7 +138,7 @@ unset_control() /obj/machinery/power/tracker/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(disassembled) var/obj/item/solar_assembly/S = locate() in src if(S) diff --git a/code/modules/power/turbine/turbine.dm b/code/modules/power/turbine/turbine.dm index bb4afcede94c5d..fa1a885044a1d8 100644 --- a/code/modules/power/turbine/turbine.dm +++ b/code/modules/power/turbine/turbine.dm @@ -7,25 +7,17 @@ can_atmos_pass = ATMOS_PASS_DENSITY processing_flags = NONE - ///Theoretical volume of gas that's moving through the turbine, it expands the further it goes - var/gas_theoretical_volume = 0 - ///Stores the turf thermal conductivity to restore it later - var/our_turf_thermal_conductivity ///Checks if the machine is processing or not var/active = FALSE ///The parts can be registered on the main one only when their panel is closed var/can_connect = TRUE - ///Reference to our turbine part var/obj/item/turbine_parts/installed_part ///Path of the turbine part we can install var/obj/item/turbine_parts/part_path - - var/has_gasmix = FALSE + ///The gas mixture this turbine part is storing var/datum/gas_mixture/machine_gasmix - var/mapped = TRUE - ///Our overlay when active var/active_overlay = "" ///Our overlay when off @@ -35,20 +27,22 @@ ///Should we use emissive appearance? var/emissive = FALSE -/obj/machinery/power/turbine/Initialize(mapload) +/obj/machinery/power/turbine/Initialize(mapload, gas_theoretical_volume) . = ..() - if(has_gasmix) - machine_gasmix = new - machine_gasmix.volume = gas_theoretical_volume + machine_gasmix = new + machine_gasmix.volume = gas_theoretical_volume - if(part_path && mapped) + if(mapload) installed_part = new part_path(src) air_update_turf(TRUE) update_appearance() + register_context() + + /obj/machinery/power/turbine/LateInitialize() . = ..() activate_parts() @@ -60,13 +54,22 @@ QDEL_NULL(installed_part) if(machine_gasmix) - machine_gasmix = null + QDEL_NULL(machine_gasmix) deactivate_parts() return ..() /** * Handles all the calculations needed for the gases, work done, temperature increase/decrease + * + * Arguments + * * datum/gas_mixture/input_mix - the gas from the environment or from another part of the turbine + * * datum/gas_mixture/output_mix - the gas that got pumped into this part from the input mix. + * ideally should be same as input mix but varying texmperatur & pressures can cause varying results + * * work_amount_to_remove - the amount of work to subtract from the actual work done to pump in the input mixture. + * For e.g. if gas was transfered from the inlet compressor to the rotor we want to subtract the work done + * by the inlet from the rotor to get the true work done + * * intake_size - the percentage of gas to be fed into an turbine part, controlled by turbine computer for inlet compressor only */ /obj/machinery/power/turbine/proc/transfer_gases(datum/gas_mixture/input_mix, datum/gas_mixture/output_mix, work_amount_to_remove, intake_size = 1) //pump gases. if no gases were transferred then no work was done @@ -91,15 +94,49 @@ /obj/machinery/power/turbine/block_superconductivity() return TRUE +/obj/machinery/power/turbine/add_context(atom/source, list/context, obj/item/held_item, mob/user) + if(isnull(held_item)) + return NONE + + if(panel_open && istype(held_item, part_path)) + context[SCREENTIP_CONTEXT_CTRL_LMB] = "[installed_part ? "Replace" : "Install"] part" + return CONTEXTUAL_SCREENTIP_SET + + if(held_item.tool_behaviour == TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_CTRL_LMB] = "[panel_open ? "Close" : "Open"] panel" + return CONTEXTUAL_SCREENTIP_SET + + if(held_item.tool_behaviour == TOOL_WRENCH && panel_open) + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Rotate" + return CONTEXTUAL_SCREENTIP_SET + + if(held_item.tool_behaviour == TOOL_CROWBAR) + if(installed_part) + context[SCREENTIP_CONTEXT_CTRL_RMB] = "Remove part" + if(panel_open) + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Deconstruct" + return CONTEXTUAL_SCREENTIP_SET + + if(held_item.tool_behaviour == TOOL_MULTITOOL) + if(panel_open) + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Change cable layer" + else + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Link parts" + return CONTEXTUAL_SCREENTIP_SET + /obj/machinery/power/turbine/examine(mob/user) . = ..() if(installed_part) - . += "Currently at tier [installed_part.current_tier]." + . += span_notice("Currently at tier [installed_part.current_tier].") if(installed_part.current_tier + 1 < installed_part.max_tier) - . += "Can be upgraded by using a tier [installed_part.current_tier + 1] part." - . += "The [installed_part.name] can be removed by right-click with a crowbar tool." + . += span_notice("Can be upgraded by using a tier [installed_part.current_tier + 1] part.") + . += span_notice("The [installed_part.name] can be [EXAMINE_HINT("pried")] out.") else - . += "Is missing a [initial(part_path.name)]." + . += span_warning("Is missing a [initial(part_path.name)].") + . += span_notice("Its maintainence panel can be [EXAMINE_HINT("screwed")] [panel_open ? "closed" : "open"].") + if(panel_open) + . += span_notice("It can rotated with a [EXAMINE_HINT("wrench")]") + . += span_notice("The full machine can be [EXAMINE_HINT("pried")] apart") /obj/machinery/power/turbine/update_overlays() . = ..() @@ -114,12 +151,13 @@ . += off_overlay /obj/machinery/power/turbine/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING if(active) balloon_alert(user, "turn it off!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return if(!anchored) balloon_alert(user, "anchor first!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return tool.play_tool_sound(src, 50) toggle_panel_open() @@ -127,44 +165,54 @@ deactivate_parts(user) else activate_parts(user) - balloon_alert(user, "you [panel_open ? "open" : "close"] the maintenance hatch of [src]") update_appearance() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/power/turbine/wrench_act(mob/living/user, obj/item/tool) - return default_change_direction_wrench(user, tool) + . = ITEM_INTERACT_BLOCKING + if(default_change_direction_wrench(user, tool)) + return ITEM_INTERACT_SUCCESS /obj/machinery/power/turbine/crowbar_act(mob/living/user, obj/item/tool) - return default_deconstruction_crowbar(tool) + . = ITEM_INTERACT_BLOCKING + if(default_deconstruction_crowbar(tool)) + return ITEM_INTERACT_SUCCESS /obj/machinery/power/turbine/on_deconstruction() - if(installed_part) - installed_part.forceMove(loc) + installed_part?.forceMove(loc) return ..() /obj/machinery/power/turbine/crowbar_act_secondary(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING if(!panel_open) balloon_alert(user, "panel is closed!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return if(!installed_part) balloon_alert(user, "no rotor installed!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return if(active) balloon_alert(user, "[src] is on!") - return TOOL_ACT_TOOLTYPE_SUCCESS - user.put_in_hands(installed_part) + return - return TOOL_ACT_TOOLTYPE_SUCCESS + user.put_in_hands(installed_part) + return ITEM_INTERACT_SUCCESS /** * Allow easy enabling of each machine for connection to the main controller + * + * Arguments + * * mob/user - the player who activated the parts + * * check_only - if TRUE it will not activate the machine but will only check if it can be activated */ /obj/machinery/power/turbine/proc/activate_parts(mob/user, check_only = FALSE) can_connect = TRUE /** * Allow easy disabling of each machine from the main controller + * + * Arguments + * * mob/user - the player who deactivated the parts */ /obj/machinery/power/turbine/proc/deactivate_parts(mob/user) can_connect = FALSE @@ -196,7 +244,7 @@ //install the part if(!do_after(user, 2 SECONDS, src)) - return + return TRUE if(installed_part) user.put_in_hands(installed_part) balloon_alert(user, "replaced part with the one in hand") @@ -204,29 +252,19 @@ balloon_alert(user, "installed new part") user.transferItemToLoc(object, src) installed_part = object + return TRUE -/** - * Gets the efficiency of the installed part, returns 0 if no part is installed - */ +/// Gets the efficiency of the installed part, returns 0 if no part is installed /obj/machinery/power/turbine/proc/get_efficiency() - if(installed_part) - return installed_part.part_efficiency - return 0 + return installed_part?.part_efficiency || 0 /obj/machinery/power/turbine/inlet_compressor name = "inlet compressor" desc = "The input side of a turbine generator, contains the compressor." icon = 'icons/obj/machines/engine/turbine.dmi' icon_state = "inlet_compressor" - circuit = /obj/item/circuitboard/machine/turbine_compressor - - gas_theoretical_volume = 1000 - part_path = /obj/item/turbine_parts/compressor - - has_gasmix = TRUE - active_overlay = "inlet_animation" off_overlay = "inlet_off" open_overlay = "inlet_open" @@ -239,9 +277,13 @@ var/compressor_work /// Pressure of gases absorbed var/compressor_pressure - ///Ratio of the amount of gas going in the turbine + ///Ratio of gases going in the turbine var/intake_regulator = 0.5 +/obj/machinery/power/turbine/inlet_compressor/Initialize(mapload) + //Volume of gas mixture is 1000 + return ..(mapload, gas_theoretical_volume = 1000) + /obj/machinery/power/turbine/inlet_compressor/deactivate_parts(mob/user) . = ..() if(!QDELETED(rotor)) @@ -266,29 +308,19 @@ //the compressor compresses down the gases from 2500 L to 1000 L //the temperature and pressure rises up, you can regulate this to increase/decrease the amount of gas moved in. compressor_work = transfer_gases(input_turf_mixture, machine_gasmix, work_amount_to_remove = 0, intake_size = intake_regulator) - input_turf.update_visuals() input_turf.air_update_turf(TRUE) + input_turf.update_visuals() compressor_pressure = PRESSURE_MAX(machine_gasmix.return_pressure()) return input_turf_mixture.temperature -/obj/machinery/power/turbine/inlet_compressor/constructed - mapped = FALSE - /obj/machinery/power/turbine/turbine_outlet name = "turbine outlet" desc = "The output side of a turbine generator, contains the turbine and the stator." icon = 'icons/obj/machines/engine/turbine.dmi' icon_state = "turbine_outlet" - circuit = /obj/item/circuitboard/machine/turbine_stator - - gas_theoretical_volume = 6000 - part_path = /obj/item/turbine_parts/stator - - has_gasmix = TRUE - active_overlay = "outlet_animation" off_overlay = "outlet_off" open_overlay = "outlet_open" @@ -298,6 +330,10 @@ /// The turf to puch the gases out into var/turf/open/output_turf +/obj/machinery/power/turbine/turbine_outlet/Initialize(mapload) + //Volume of gas mixture is 6000 + return ..(mapload, gas_theoretical_volume = 6000) + /obj/machinery/power/turbine/turbine_outlet/deactivate_parts(mob/user) . = ..() if(!QDELETED(rotor)) @@ -316,77 +352,56 @@ //eject gases and update turf is any was ejected var/datum/gas_mixture/ejected_gases = machine_gasmix.pump_gas_to(output_turf.air, machine_gasmix.return_pressure()) if(ejected_gases) - output_turf.update_visuals() output_turf.air_update_turf(TRUE) + output_turf.update_visuals() //return ejected gases return ejected_gases -/obj/machinery/power/turbine/turbine_outlet/constructed - mapped = FALSE - /obj/machinery/power/turbine/core_rotor name = "core rotor" desc = "The middle part of a turbine generator, contains the rotor and the main computer." icon = 'icons/obj/machines/engine/turbine.dmi' icon_state = "core_rotor" - can_change_cable_layer = TRUE - - circuit = /obj/item/circuitboard/machine/turbine_rotor - - gas_theoretical_volume = 3000 - - part_path = /obj/item/turbine_parts/rotor - - has_gasmix = TRUE - active_overlay = "core_light" open_overlay = "core_open" - + active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION emissive = TRUE + can_change_cable_layer = TRUE + circuit = /obj/item/circuitboard/machine/turbine_rotor + part_path = /obj/item/turbine_parts/rotor ///ID to easily connect the main part of the turbine to the computer var/mapping_id - ///Reference to the compressor var/obj/machinery/power/turbine/inlet_compressor/compressor ///Reference to the turbine var/obj/machinery/power/turbine/turbine_outlet/turbine - ///Rotation per minute the machine is doing var/rpm ///Amount of power the machine is producing var/produced_energy - ///Check to see if all parts are connected to the core var/all_parts_connected = FALSE - ///Max rmp that the installed parts can handle, limits the rpms var/max_allowed_rpm = 0 ///Max temperature that the installed parts can handle, unlimited and causes damage to the machine var/max_allowed_temperature = 0 - ///Amount of damage the machine has received var/damage = 0 ///Used to calculate the max damage received per tick and if the alarm should be called var/damage_archived = 0 - ///Our internal radio var/obj/item/radio/radio - ///The key our internal radio uses - var/radio_key = /obj/item/encryptionkey/headset_eng - ///The engineering channel - var/engineering_channel = "Engineering" COOLDOWN_DECLARE(turbine_damage_alert) -/obj/machinery/power/turbine/core_rotor/constructed - mapped = FALSE - /obj/machinery/power/turbine/core_rotor/Initialize(mapload) - . = ..() + //Volume of gas mixture is 3000 + . = ..(mapload, gas_theoretical_volume = 3000) + radio = new(src) - radio.keyslot = new radio_key + radio.keyslot = new /obj/item/encryptionkey/headset_eng radio.set_listening(FALSE) radio.recalculateChannels() @@ -396,6 +411,18 @@ QDEL_NULL(radio) return ..() +/obj/machinery/power/turbine/core_rotor/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + if(. == NONE) + return + + if(held_item.tool_behaviour == TOOL_MULTITOOL) + if(panel_open) + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Change cable layer" + else + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Link/Log parts" + return CONTEXTUAL_SCREENTIP_SET + /obj/machinery/power/turbine/core_rotor/examine(mob/user) . = ..() if(!panel_open) @@ -416,7 +443,7 @@ //failed checks if(!activate_parts(user)) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS //log rotor to link later to computer balloon_alert(user, "all parts linked") @@ -425,7 +452,7 @@ to_chat(user, span_notice("You store linkage information in [tool]'s buffer.")) //success - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/power/turbine/core_rotor/multitool_act_secondary(mob/living/user, obj/item/tool) //allow cable layer changing @@ -512,7 +539,9 @@ /obj/machinery/power/turbine/core_rotor/deactivate_parts() if(all_parts_connected) power_off() + compressor?.rotor = null compressor = null + turbine?.rotor = null turbine = null all_parts_connected = FALSE disconnect_from_network() @@ -522,9 +551,7 @@ deactivate_parts() return ..() -/** - * Toggle power on and off, not safe - */ +/// Toggle power on and off, not safe /obj/machinery/power/turbine/core_rotor/proc/toggle_power() if(active) power_off() @@ -544,9 +571,7 @@ call_parts_update_appearance() SSair.start_processing_machine(src) -/** - * Calls all parts update appearance proc. - */ +/// Calls all parts update appearance proc. /obj/machinery/power/turbine/core_rotor/proc/call_parts_update_appearance() update_appearance() if(!QDELETED(compressor)) @@ -569,9 +594,7 @@ call_parts_update_appearance() SSair.stop_processing_machine(src) -/** - * Returns true if all parts have their panel closed - */ +/// Returns true if all parts have their panel closed /obj/machinery/power/turbine/core_rotor/proc/all_parts_ready() if(QDELETED(compressor)) return FALSE @@ -579,19 +602,20 @@ return FALSE return !panel_open && !compressor.panel_open && !turbine.panel_open -/** - * Getter for turbine integrity, return the amount in % - */ +/// Getter for turbine integrity, return the amount in % /obj/machinery/power/turbine/core_rotor/proc/get_turbine_integrity() var/integrity = damage / 500 integrity = max(round(100 - integrity * 100, 0.01), 0) return integrity /obj/machinery/power/turbine/core_rotor/process_atmos() - if(!active || !activate_parts(check_only = TRUE)) + if(!active || !activate_parts(check_only = TRUE) || (machine_stat & BROKEN) || !powered(ignore_use_power = TRUE)) power_off() return PROCESS_KILL + //use power to operate internal electronics & stuff + update_mode_power_usage(ACTIVE_POWER_USE, active_power_usage) + //===============COMPRESSOR WORKING========// //Transfer gases from turf to compressor var/temperature = compressor.compress_gases() @@ -622,7 +646,8 @@ if(rpm < 550000) explosion(src, 2, 5, 7) return PROCESS_KILL - radio.talk_into(src, "Warning, turbine at [get_area_name(src)] taking damage, current integrity at [integrity]%!", engineering_channel) + + radio.talk_into(src, "Warning, turbine at [get_area_name(src)] taking damage, current integrity at [integrity]%!", RADIO_CHANNEL_ENGINEERING) playsound(src, 'sound/machines/engine_alert1.ogg', 100, FALSE, 30, 30, falloff_distance = 10) //================ROTOR WORKING============// @@ -644,7 +669,7 @@ //calculate final acheived rpm rpm = ((work_done * compressor.get_efficiency()) ** turbine.get_efficiency()) * get_efficiency() / TURBINE_RPM_CONVERSION rpm = FLOOR(min(rpm, max_allowed_rpm), 1) - //add energy into the grid + //add energy into the grid, also use part of it for turbine operation produced_energy = rpm * TURBINE_ENERGY_RECTIFICATION_MULTIPLIER * TURBINE_RPM_CONVERSION add_avail(produced_energy) diff --git a/code/modules/power/turbine/turbine_computer.dm b/code/modules/power/turbine/turbine_computer.dm index 8e8ba8deb4c760..9e0f5bdaa469ec 100644 --- a/code/modules/power/turbine/turbine_computer.dm +++ b/code/modules/power/turbine/turbine_computer.dm @@ -54,20 +54,20 @@ var/list/data = list() var/obj/machinery/power/turbine/core_rotor/main_control = turbine_core?.resolve() - - data["connected"] = main_control ? TRUE : FALSE + data["connected"] = !!QDELETED(main_control) if(!main_control) return + data["active"] = main_control.active data["rpm"] = main_control.rpm ? main_control.rpm : 0 data["power"] = main_control.produced_energy ? main_control.produced_energy : 0 - data["temp"] = main_control.compressor.input_turf?.air.temperature data["integrity"] = main_control.get_turbine_integrity() data["parts_linked"] = main_control.all_parts_connected data["parts_ready"] = main_control.all_parts_ready() data["max_rpm"] = main_control.max_allowed_rpm data["max_temperature"] = main_control.max_allowed_temperature + data["temp"] = main_control.compressor?.input_turf?.air.temperature || 0 data["regulator"] = QDELETED(main_control.compressor) ? 0 : main_control.compressor.intake_regulator return data diff --git a/code/modules/power/turbine/turbine_parts.dm b/code/modules/power/turbine/turbine_parts.dm index d53d92190e1a56..4215fccf39fe0c 100644 --- a/code/modules/power/turbine/turbine_parts.dm +++ b/code/modules/power/turbine/turbine_parts.dm @@ -64,7 +64,7 @@ if(!istype(attacking_item, second_tier_material)) return var/obj/item/stack/sheet/second_tier = attacking_item - if(second_tier.use(second_tier_material_amount) && do_after(user, 1 SECONDS, src)) + if(do_after(user, 1 SECONDS, src) && second_tier.use(second_tier_material_amount)) current_tier = 2 part_efficiency += part_efficiency_increase_amount max_rpm *= max_rpm_tier_multiplier @@ -74,7 +74,7 @@ if(!istype(attacking_item, third_tier_material)) return var/obj/item/stack/sheet/third_tier = attacking_item - if(third_tier.use(third_tier_material_amount) && do_after(user, 2 SECONDS, src)) + if(do_after(user, 2 SECONDS, src) && third_tier.use(third_tier_material_amount)) current_tier = 3 part_efficiency += part_efficiency_increase_amount max_rpm *= max_rpm_tier_multiplier @@ -84,7 +84,7 @@ if(!istype(attacking_item, fourth_tier_material)) return var/obj/item/stack/sheet/fourth_tier = attacking_item - if(fourth_tier.use(fourth_tier_material_amount) && do_after(user, 3 SECONDS, src)) + if(do_after(user, 3 SECONDS, src) && fourth_tier.use(fourth_tier_material_amount)) current_tier = 4 part_efficiency += part_efficiency_increase_amount max_rpm *= max_rpm_tier_multiplier diff --git a/code/modules/procedural_mapping/mapGenerator.dm b/code/modules/procedural_mapping/mapGenerator.dm index 4a79ad4c3059a7..420ac9c8d79762 100644 --- a/code/modules/procedural_mapping/mapGenerator.dm +++ b/code/modules/procedural_mapping/mapGenerator.dm @@ -1,10 +1,12 @@ +///This type is responsible for any map generation behavior that is done in areas, override this to allow for +///area-specific map generation. This generation is ran by areas in initialize. /datum/map_generator - //Map information - var/list/map = list() + ///Map information, such as the start and end turfs of the map generation. + var/list/turf/map = list() - //mapGeneratorModule information - var/list/modules = list() + ///The map generator modules that we will generate and sync to. + var/list/datum/map_generator_module/modules = list() var/buildmode_name = "Undocumented" @@ -14,6 +16,18 @@ buildmode_name = copytext_char("[type]", 20) // / d a t u m / m a p g e n e r a t o r / = 20 characters. initialiseModules() +/datum/map_generator/Destroy(force) + . = ..() + QDEL_LIST(modules) + +///This proc will be ran by areas on Initialize, and provides the areas turfs as argument to allow for generation. +/datum/map_generator/proc/generate_terrain(list/turfs, area/generate_in) + return + +/// Populate terrain with flora, fauna, features and basically everything that isn't a turf. +/datum/map_generator/proc/populate_terrain(list/turfs, area/generate_in) + return + //Defines the region the map represents, sets map //Returns the map /datum/map_generator/proc/defineRegion(turf/Start, turf/End, replace = 0) @@ -22,7 +36,7 @@ if(replace) undefineRegion() - map |= block(Start,End) + map |= block(Start, End) return map @@ -56,7 +70,7 @@ theRadius = max(radius/max((2*abs(sphereMagic-i)),1),1) - map |= circle_range(locate(centerX,centerY,i),theRadius) + map |= circle_range(locate(centerX, centerY, i),theRadius) return map @@ -87,7 +101,7 @@ syncModules() if(!modules || !modules.len) return - for(var/datum/map_generator_module/mod in modules) + for(var/datum/map_generator_module/mod as anything in modules) INVOKE_ASYNC(mod, TYPE_PROC_REF(/datum/map_generator_module, generate)) @@ -98,7 +112,7 @@ syncModules() if(!modules || !modules.len) return - for(var/datum/map_generator_module/mod in modules) + for(var/datum/map_generator_module/mod as anything in modules) INVOKE_ASYNC(mod, TYPE_PROC_REF(/datum/map_generator_module, place), T) @@ -113,7 +127,7 @@ //Sync mapGeneratorModule(s) to mapGenerator /datum/map_generator/proc/syncModules() - for(var/datum/map_generator_module/mod in modules) + for(var/datum/map_generator_module/mod as anything in modules) mod.sync(src) @@ -127,12 +141,12 @@ set category = "Debug" var/datum/map_generator/nature/N = new() - var/startInput = input(usr,"Start turf of Map, (X;Y;Z)", "Map Gen Settings", "1;1;1") as text|null + var/startInput = input(usr, "Start turf of Map, (X;Y;Z)", "Map Gen Settings", "1;1;1") as text|null if (isnull(startInput)) return - var/endInput = input(usr,"End turf of Map (X;Y;Z)", "Map Gen Settings", "[world.maxx];[world.maxy];[mob ? mob.z : 1]") as text|null + var/endInput = input(usr, "End turf of Map (X;Y;Z)", "Map Gen Settings", "[world.maxx];[world.maxy];[mob ? mob.z : 1]") as text|null if (isnull(endInput)) return @@ -158,9 +172,18 @@ to_chat(src, "End Coords: [endCoords[1]] - [endCoords[2]] - [endCoords[3]]") return - var/list/clusters = list("None"=CLUSTER_CHECK_NONE,"All"=CLUSTER_CHECK_ALL,"Sames"=CLUSTER_CHECK_SAMES,"Differents"=CLUSTER_CHECK_DIFFERENTS, \ - "Same turfs"=CLUSTER_CHECK_SAME_TURFS, "Same atoms"=CLUSTER_CHECK_SAME_ATOMS, "Different turfs"=CLUSTER_CHECK_DIFFERENT_TURFS, \ - "Different atoms"=CLUSTER_CHECK_DIFFERENT_ATOMS, "All turfs"=CLUSTER_CHECK_ALL_TURFS,"All atoms"=CLUSTER_CHECK_ALL_ATOMS) + var/static/list/clusters = list( + "None" = CLUSTER_CHECK_NONE, + "All" = CLUSTER_CHECK_ALL, + "Sames" = CLUSTER_CHECK_SAMES, + "Differents" = CLUSTER_CHECK_DIFFERENTS, + "Same turfs" = CLUSTER_CHECK_SAME_TURFS, + "Same atoms" = CLUSTER_CHECK_SAME_ATOMS, + "Different turfs" = CLUSTER_CHECK_DIFFERENT_TURFS, + "Different atoms" = CLUSTER_CHECK_DIFFERENT_ATOMS, + "All turfs" = CLUSTER_CHECK_ALL_TURFS, + "All atoms" = CLUSTER_CHECK_ALL_ATOMS, + ) var/moduleClusters = input("Cluster Flags (Cancel to leave unchanged from defaults)","Map Gen Settings") as null|anything in clusters //null for default @@ -175,7 +198,7 @@ theCluster = CLUSTER_CHECK_NONE if(theCluster) - for(var/datum/map_generator_module/M in N.modules) + for(var/datum/map_generator_module/M as anything in N.modules) M.clusterCheckFlags = theCluster diff --git a/code/modules/procedural_mapping/mapGeneratorModule.dm b/code/modules/procedural_mapping/mapGeneratorModule.dm index d5742fdb85ab09..7bf32d15195f5e 100644 --- a/code/modules/procedural_mapping/mapGeneratorModule.dm +++ b/code/modules/procedural_mapping/mapGeneratorModule.dm @@ -8,6 +8,9 @@ var/clusterCheckFlags = CLUSTER_CHECK_SAME_ATOMS var/allowAtomsOnSpace = FALSE +/datum/map_generator_module/Destroy(force) + mother = null + return ..() //Syncs the module up with its mother /datum/map_generator_module/proc/sync(datum/map_generator/mum) diff --git a/code/modules/procedural_mapping/mapGenerators/syndicate.dm b/code/modules/procedural_mapping/mapGenerators/syndicate.dm index 74d2d153d06a58..7c6a2e1d2cea03 100644 --- a/code/modules/procedural_mapping/mapGenerators/syndicate.dm +++ b/code/modules/procedural_mapping/mapGenerators/syndicate.dm @@ -31,21 +31,21 @@ modules = list(/datum/map_generator_module/bottom_layer/syndie_floor, \ /datum/map_generator_module/border/syndie_walls,\ /datum/map_generator_module/bottom_layer/repressurize) - buildmode_name = "Pattern: Shuttle Room: Syndicate" + buildmode_name = "Pattern: Shuttle Room: Symphionia" /datum/map_generator/syndicate/mobsonly modules = list(/datum/map_generator_module/bottom_layer/syndie_floor, \ /datum/map_generator_module/border/syndie_walls,\ /datum/map_generator_module/splatter_layer/syndie_mobs, \ /datum/map_generator_module/bottom_layer/repressurize) - buildmode_name = "Pattern: Shuttle Room: Syndicate: Mobs" + buildmode_name = "Pattern: Shuttle Room: Symphionia: Mobs" /datum/map_generator/syndicate/furniture modules = list(/datum/map_generator_module/bottom_layer/syndie_floor, \ /datum/map_generator_module/border/syndie_walls,\ /datum/map_generator_module/syndie_furniture, \ /datum/map_generator_module/bottom_layer/repressurize) - buildmode_name = "Pattern: Shuttle Room: Syndicate: Furniture" + buildmode_name = "Pattern: Shuttle Room: Symphionia: Furniture" /datum/map_generator/syndicate/full modules = list(/datum/map_generator_module/bottom_layer/syndie_floor, \ @@ -53,4 +53,4 @@ /datum/map_generator_module/syndie_furniture, \ /datum/map_generator_module/splatter_layer/syndie_mobs, \ /datum/map_generator_module/bottom_layer/repressurize) - buildmode_name = "Pattern: Shuttle Room: Syndicate: All" + buildmode_name = "Pattern: Shuttle Room: Symphionia: All" diff --git a/code/modules/projectiles/ammunition/_ammunition.dm b/code/modules/projectiles/ammunition/_ammunition.dm index e492afb776b752..45e09db624cafa 100644 --- a/code/modules/projectiles/ammunition/_ammunition.dm +++ b/code/modules/projectiles/ammunition/_ammunition.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/weapons/guns/ammo.dmi' icon_state = "s-casing" worn_icon_state = "bullet" - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT throwforce = 0 w_class = WEIGHT_CLASS_TINY diff --git a/code/modules/projectiles/ammunition/_firing.dm b/code/modules/projectiles/ammunition/_firing.dm index dee2c087c688df..23f48f6a2eb259 100644 --- a/code/modules/projectiles/ammunition/_firing.dm +++ b/code/modules/projectiles/ammunition/_firing.dm @@ -18,7 +18,7 @@ AddComponent(/datum/component/pellet_cloud, projectile_type, pellets) //var/next_delay = click_cooldown_override || CLICK_CD_RANGE // ORIGINAL - var/next_delay = click_cooldown_override || ((user.staminaloss <= STAMINA_THRESHOLD_TIRED_CLICK_CD) ? CLICK_CD_RANGE : CLICK_CD_RANGE_TIRED) // SKYRAT EDIT CHANGE + var/next_delay = click_cooldown_override || ((user.staminaloss <= STAMINA_THRESHOLD_TIRED_CLICK_CD) ? CLICK_CD_RANGE : CLICK_CD_RANGE_TIRED) // NOVA EDIT CHANGE if(HAS_TRAIT(user, TRAIT_DOUBLE_TAP)) next_delay = round(next_delay * 0.5) user.changeNext_move(next_delay) @@ -66,6 +66,7 @@ if(reagents && loaded_projectile.reagents) reagents.trans_to(loaded_projectile, reagents.total_volume, transferred_by = user) //For chemical darts/bullets qdel(reagents) + SEND_SIGNAL(src, COMSIG_CASING_READY_PROJECTILE, target, user, quiet, zone_override, fired_from) /obj/item/ammo_casing/proc/throw_proj(atom/target, turf/targloc, mob/living/user, params, spread, atom/fired_from) var/turf/curloc = get_turf(fired_from) diff --git a/code/modules/projectiles/ammunition/ballistic/foam.dm b/code/modules/projectiles/ammunition/ballistic/foam.dm index 21ceeb6918bbc6..2895d74555be5a 100644 --- a/code/modules/projectiles/ammunition/ballistic/foam.dm +++ b/code/modules/projectiles/ammunition/ballistic/foam.dm @@ -9,6 +9,7 @@ custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 0.1125) harmful = FALSE var/modified = FALSE + var/static/list/insertable_items_hint = list(/obj/item/pen) /obj/item/ammo_casing/foam_dart/Initialize(mapload) . = ..() @@ -18,47 +19,37 @@ . = ..() if(modified) icon_state = "[base_icon_state]_empty" - loaded_projectile?.icon_state = "[base_icon_state]_empty" + loaded_projectile?.icon_state = "[loaded_projectile.base_icon_state]_empty_proj" return icon_state = "[base_icon_state]" - loaded_projectile?.icon_state = "[loaded_projectile.base_icon_state]" + loaded_projectile?.icon_state = "[loaded_projectile.base_icon_state]_proj" /obj/item/ammo_casing/foam_dart/update_desc() . = ..() desc = "It's Donk or Don't! [modified ? "... Although, this one doesn't look too safe." : "Ages 8 and up."]" -/obj/item/ammo_casing/foam_dart/attackby(obj/item/A, mob/user, params) - var/obj/projectile/bullet/foam_dart/FD = loaded_projectile - if (A.tool_behaviour == TOOL_SCREWDRIVER && !modified) +/obj/item/ammo_casing/foam_dart/examine_more(mob/user) + . = ..() + if(!HAS_TRAIT(src, TRAIT_DART_HAS_INSERT)) + var/list/type_initial_names = list() + for(var/type in insertable_items_hint) + var/obj/item/type_item = type + type_initial_names += "\a [initial(type_item.name)]" + . += span_notice("[modified ? "You can" : "If you removed the safety cap with a screwdriver, you could"] insert a small item\ + [length(type_initial_names) ? ", such as [english_list(type_initial_names, and_text = "or ", final_comma_text = ", ")]" : ""].") + + +/obj/item/ammo_casing/foam_dart/attackby(obj/item/attacking_item, mob/user, params) + var/obj/projectile/bullet/foam_dart/dart = loaded_projectile + if (attacking_item.tool_behaviour == TOOL_SCREWDRIVER && !modified) modified = TRUE - FD.modified = TRUE - FD.damage_type = BRUTE + dart.modified = TRUE + dart.damage_type = BRUTE to_chat(user, span_notice("You pop the safety cap off [src].")) update_appearance() - else if (istype(A, /obj/item/pen)) - if(modified) - if(!FD.pen) - harmful = TRUE - if(!user.transferItemToLoc(A, FD)) - return - FD.pen = A - FD.damage = 5 - to_chat(user, span_notice("You insert [A] into [src].")) - else - to_chat(user, span_warning("There's already something in [src].")) - else - to_chat(user, span_warning("The safety cap prevents you from inserting [A] into [src].")) else return ..() -/obj/item/ammo_casing/foam_dart/attack_self(mob/living/user) - var/obj/projectile/bullet/foam_dart/FD = loaded_projectile - if(FD.pen) - FD.damage = initial(FD.damage) - user.put_in_hands(FD.pen) - to_chat(user, span_notice("You remove [FD.pen] from [src].")) - FD.pen = null - /obj/item/ammo_casing/foam_dart/riot name = "riot foam dart" desc = "Whose smart idea was it to use toys as crowd control? Ages 18 and up." diff --git a/code/modules/projectiles/ammunition/ballistic/revolver.dm b/code/modules/projectiles/ammunition/ballistic/revolver.dm index 34f539cdf11bd1..47dca04b6db9f8 100644 --- a/code/modules/projectiles/ammunition/ballistic/revolver.dm +++ b/code/modules/projectiles/ammunition/ballistic/revolver.dm @@ -52,7 +52,7 @@ name = ".38 Rubber bullet casing" desc = "A .38 rubber bullet casing, manufactured to exceedingly bouncy standards." projectile_type = /obj/projectile/bullet/c38/match/bouncy - harmful = FALSE //SKYRAT EDIT ADDITION + harmful = FALSE //NOVA EDIT ADDITION /obj/item/ammo_casing/c38/dumdum name = ".38 DumDum bullet casing" diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm index 3e545dc106077c..8e06a0e10b5af5 100644 --- a/code/modules/projectiles/ammunition/ballistic/rifle.dm +++ b/code/modules/projectiles/ammunition/ballistic/rifle.dm @@ -49,3 +49,27 @@ name = "40mm rubber shell" desc = "A cased rubber slug. The big brother of the beanbag slug, this thing will knock someone out in one. Doesn't do so great against anyone in armor." projectile_type = /obj/projectile/bullet/shotgun_beanbag/a40mm + +/obj/item/ammo_casing/rebar + name = "sharpened iron rod" + desc = "A Sharpened Iron rod. It's Pointy!" + caliber = CALIBER_REBAR + icon_state = "rod_sharp" + base_icon_state = "rod_sharp" + projectile_type = /obj/projectile/bullet/rebar + +/obj/item/ammo_casing/rebar/Initialize(mapload) + . = ..() + AddElement(/datum/element/caseless, TRUE) + +/obj/item/ammo_casing/rebar/update_icon_state() + . = ..() + icon_state = "[base_icon_state]" + +/obj/item/ammo_casing/rebar/syndie + name = "Jagged iron rod" + desc = "An Iron rod, with notches cut into it. You really dont want this stuck in you." + caliber = CALIBER_REBAR_SYNDIE + icon_state = "rod_jagged" + base_icon_state = "rod_jagged" + projectile_type = /obj/projectile/bullet/rebarsyndie diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm index b9d8e49fbe9769..6749bc626b55ab 100644 --- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm +++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm @@ -27,7 +27,7 @@ icon_state = "bshell" custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*2.5) projectile_type = /obj/projectile/bullet/shotgun_beanbag - harmful = FALSE //SKYRAT EDIT ADDITION + harmful = FALSE //NOVA EDIT ADDITION /obj/item/ammo_casing/shotgun/incendiary name = "incendiary slug" diff --git a/code/modules/projectiles/ammunition/energy/_energy.dm b/code/modules/projectiles/ammunition/energy/_energy.dm index 0d3e11ec51ab21..eb1516c0f456a4 100644 --- a/code/modules/projectiles/ammunition/energy/_energy.dm +++ b/code/modules/projectiles/ammunition/energy/_energy.dm @@ -8,4 +8,4 @@ var/select_name = CALIBER_ENERGY fire_sound = 'sound/weapons/laser.ogg' firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/red - var/select_color = FALSE //SKYRAT EDIT ADDITION - This is the color that shows up when selecting an ammo type. Disabled by default + var/select_color = FALSE //NOVA EDIT ADDITION - This is the color that shows up when selecting an ammo type. Disabled by default diff --git a/code/modules/projectiles/ammunition/energy/special.dm b/code/modules/projectiles/ammunition/energy/special.dm index 9a733dbc47a84d..e5de3df5d50d49 100644 --- a/code/modules/projectiles/ammunition/energy/special.dm +++ b/code/modules/projectiles/ammunition/energy/special.dm @@ -8,13 +8,13 @@ projectile_type = /obj/projectile/ion/weak e_cost = LASER_SHOTS(4, STANDARD_CELL_CHARGE * 1.2) -/obj/item/ammo_casing/energy/declone - projectile_type = /obj/projectile/energy/declone +/obj/item/ammo_casing/energy/radiation + projectile_type = /obj/projectile/energy/radiation select_name = "declone" fire_sound = 'sound/weapons/pulse3.ogg' -/obj/item/ammo_casing/energy/declone/weak - projectile_type = /obj/projectile/energy/declone/weak +/obj/item/ammo_casing/energy/radiation/weak + projectile_type = /obj/projectile/energy/radiation/weak /obj/item/ammo_casing/energy/flora fire_sound = 'sound/effects/stealthoff.ogg' @@ -81,6 +81,7 @@ /obj/item/ammo_casing/energy/fisher projectile_type = /obj/projectile/energy/fisher - select_name = "light-buster" + select_name = "light disruptor" + harmful = FALSE e_cost = LASER_SHOTS(2, STANDARD_CELL_CHARGE * 0.5) fire_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg' // fwip fwip fwip fwip diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 85d7c90ec76020..15135bee1a5016 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -3,7 +3,7 @@ name = "ammo box (null_reference_exception)" desc = "A box of ammo." icon = 'icons/obj/weapons/guns/ammo.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT inhand_icon_state = "syringe_kit" worn_icon_state = "ammobox" diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index e787053780567e..b604c5f8eac0d8 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -42,7 +42,7 @@ /obj/item/ammo_box/c38/trac name = "speed loader (.38 TRAC)" - desc = "Designed to quickly reload revolvers. TRAC bullets embed a tracking implant within the target's body. The implant's signal is incompatible with teleporters." + desc = "Designed to quickly reload revolvers. TRAC bullets embed a tracking implant within the target's body." ammo_type = /obj/item/ammo_casing/c38/trac ammo_band_color = "#7b6383" diff --git a/code/modules/projectiles/boxes_magazines/internal/_internal.dm b/code/modules/projectiles/boxes_magazines/internal/_internal.dm index c14e66af82cf34..0579d19234b69c 100644 --- a/code/modules/projectiles/boxes_magazines/internal/_internal.dm +++ b/code/modules/projectiles/boxes_magazines/internal/_internal.dm @@ -1,6 +1,6 @@ /obj/item/ammo_box/magazine/internal desc = "Oh god, this shouldn't be here" - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = ABSTRACT //internals magazines are accessible, so replace spent ammo if full when trying to put a live one in diff --git a/code/modules/projectiles/boxes_magazines/internal/rifle.dm b/code/modules/projectiles/boxes_magazines/internal/rifle.dm index 83133186c9ddcd..5fdc182ccff985 100644 --- a/code/modules/projectiles/boxes_magazines/internal/rifle.dm +++ b/code/modules/projectiles/boxes_magazines/internal/rifle.dm @@ -28,3 +28,24 @@ max_ammo = 1 caliber = CALIBER_HARPOON ammo_type = /obj/item/ammo_casing/harpoon + +/obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/normal + name = "single round magazine" + max_ammo = 1 + caliber = CALIBER_REBAR + ammo_type = /obj/item/ammo_casing/rebar + +/obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/force + name = "two round magazine" + max_ammo = 2 + caliber = CALIBER_REBAR_FORCED + ammo_type = /obj/item/ammo_casing/rebar + +/obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/syndie + max_ammo = 3 + caliber = CALIBER_REBAR_SYNDIE + ammo_type = /obj/item/ammo_casing/rebar/syndie + +/obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/syndie/normal + caliber = CALIBER_REBAR_SYNDIE_NORMAL + ammo_type = /obj/item/ammo_casing/rebar diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index dd1bf3d6017bcc..e43f4dc122877e 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -8,7 +8,7 @@ icon_state = "revolver" inhand_icon_state = "gun" worn_icon_state = "gun" - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY appearance_flags = TILE_BOUND|PIXEL_SCALE|LONG_GLIDE|KEEP_TOGETHER slot_flags = ITEM_SLOT_BELT custom_materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT) @@ -45,7 +45,7 @@ var/weapon_weight = WEAPON_LIGHT var/dual_wield_spread = 24 //additional spread when dual wielding ///Can we hold up our target with this? Default to yes - var/can_hold_up = FALSE // SKYRAT EDIT - DISABLED ORIGINAL: TRUE + var/can_hold_up = FALSE // NOVA EDIT - DISABLED ORIGINAL: TRUE /// Just 'slightly' snowflakey way to modify projectile damage for projectiles fired from this gun. var/projectile_damage_multiplier = 1 @@ -82,8 +82,8 @@ pin = new pin(src) add_seclight_point() - give_gun_safeties() // SKYRAT EDIT ADDITION - GUN SAFETIES - give_manufacturer_examine() // SKYRAT EDIT ADDITON - MANUFACTURER EXAMINE + give_gun_safeties() // NOVA EDIT ADDITION - GUN SAFETIES + give_manufacturer_examine() // NOVA EDIT ADDITON - MANUFACTURER EXAMINE /obj/item/gun/Destroy() if(isobj(pin)) //Can still be the initial path, then we skip @@ -271,7 +271,8 @@ /obj/item/gun/afterattack(atom/target, mob/living/user, flag, params) ..() - return fire_gun(target, user, flag, params) | AFTERATTACK_PROCESSED_ITEM + fire_gun(target, user, flag, params) + return AFTERATTACK_PROCESSED_ITEM /obj/item/gun/proc/fire_gun(atom/target, mob/living/user, flag, params) if(QDELETED(target)) @@ -403,6 +404,7 @@ update_appearance() return TRUE +///returns true if the gun successfully fires /obj/item/gun/proc/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) var/base_bonus_spread = 0 if(user) @@ -512,7 +514,7 @@ if(Adjacent(user) && !issilicon(user)) user.put_in_hands(bayonet) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS else if(pin?.pin_removable && user.is_holding(src)) user.visible_message(span_warning("[user] attempts to remove [pin] from [src] with [I]."), @@ -523,7 +525,7 @@ user.visible_message(span_notice("[pin] is pried out of [src] by [user], destroying the pin in the process."), span_warning("You pry [pin] out with [I], destroying the pin in the process."), null, 3) QDEL_NULL(pin) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/item/gun/welder_act(mob/living/user, obj/item/I) . = ..() @@ -572,6 +574,9 @@ knife_overlay.pixel_y = knife_y_offset . += knife_overlay +/obj/item/gun/animate_atom_living(mob/living/owner) + new /mob/living/simple_animal/hostile/mimic/copy/ranged(drop_location(), src, owner) + /obj/item/gun/proc/handle_suicide(mob/living/carbon/human/user, mob/living/carbon/human/target, params, bypass_timer) if(!ishuman(user) || !ishuman(target)) return diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index efff8c2fc6157c..d240dd64c221c2 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -370,10 +370,6 @@ if (.) return if (!internal_magazine && istype(A, /obj/item/ammo_box/magazine)) - // SKYRAT EDIT ADDITION START - this return is intentional; we do not want to run TG's version of this case handling - if(handle_magazine(user, A)) - return - // SKYRAT EDIT ADDITION END var/obj/item/ammo_box/magazine/AM = A if (!magazine) insert_magazine(user, AM) @@ -394,11 +390,11 @@ chambered = null var/num_loaded = magazine?.attackby(A, user, params, TRUE) if (num_loaded) - handle_box_reload(user, A, num_loaded) // SKYRAT EDIT CHANGE - ORIGINAL: balloon_alert(user, "[num_loaded] [cartridge_wording]\s loaded") + handle_box_reload(user, A, num_loaded) // NOVA EDIT CHANGE - ORIGINAL: balloon_alert(user, "[num_loaded] [cartridge_wording]\s loaded") playsound(src, load_sound, load_sound_volume, load_sound_vary) if (chambered == null && bolt_type == BOLT_TYPE_NO_BOLT) chamber_round() - SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) // SKYRAT EDIT ADDITION - this is normally done by handle_magazine which does not get called so we have to do it manually here + SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) // NOVA EDIT ADDITION - this is normally done by handle_magazine which does not get called so we have to do it manually here A.update_appearance() update_appearance() return @@ -433,10 +429,9 @@ return TRUE /obj/item/gun/ballistic/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) - if(magazine && chambered.loaded_projectile && can_misfire && misfire_probability > 0) - if(prob(misfire_probability)) - if(blow_up(user)) - to_chat(user, span_userdanger("[src] misfires!")) + if(target != user && chambered.loaded_projectile && can_misfire && prob(misfire_probability) && blow_up(user)) + to_chat(user, span_userdanger("[src] misfires!")) + return if (sawn_off) bonus_spread += SAWN_OFF_ACC_PENALTY @@ -490,11 +485,11 @@ if (empty_alarm && last_shot_succeeded) playsound(src, empty_alarm_sound, empty_alarm_volume, empty_alarm_vary) update_appearance() - if (last_shot_succeeded && bolt_type == BOLT_TYPE_LOCKING) + if (last_shot_succeeded && bolt_type == BOLT_TYPE_LOCKING && semi_auto) bolt_locked = TRUE update_appearance() -/obj/item/gun/ballistic/afterattack() +/obj/item/gun/ballistic/fire_gun(atom/target, mob/living/user, flag, params) prefire_empty_checks() . = ..() //The gun actually firing postfire_empty_checks(.) @@ -522,7 +517,7 @@ SSblackbox.record_feedback("tally", "station_mess_created", 1, CB.name) if (num_unloaded) balloon_alert(user, "[num_unloaded] [cartridge_wording]\s unloaded") - SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) // SKYRAT EDIT ADDITION - this is normally handled by eject_magazine() but internal magazines are a special case + SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) // NOVA EDIT ADDITION - this is normally handled by eject_magazine() but internal magazines are a special case playsound(user, eject_sound, eject_sound_volume, eject_sound_vary) update_appearance() else @@ -704,11 +699,7 @@ GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list( ///used for sawing guns, causes the gun to fire without the input of the user /obj/item/gun/ballistic/proc/blow_up(mob/user) - . = FALSE - for(var/obj/item/ammo_casing/AC in magazine.stored_ammo) - if(AC.loaded_projectile) - process_fire(user, user, FALSE) - . = TRUE + return chambered && process_fire(user, user, FALSE) /obj/item/gun/ballistic/proc/instant_reload() SIGNAL_HANDLER @@ -723,7 +714,7 @@ GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list( /obj/item/suppressor name = "suppressor" - desc = "A small-arms suppressor for maximum espionage." //SKYRAT EDIT - ORIGINAL: desc = "A syndicate small-arms suppressor for maximum espionage." + desc = "A syndicate small-arms suppressor for maximum espionage." icon = 'icons/obj/weapons/guns/ballistic.dmi' icon_state = "suppressor" w_class = WEIGHT_CLASS_TINY diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index 70e2210a4e992e..c48873e665670d 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -46,7 +46,7 @@ update_item_action_buttons() /obj/item/gun/ballistic/automatic/proto - name = "\improper Nanotrasen Saber SMG" + name = "\improper Symphionia Saber SMG" desc = "A prototype full-auto 9mm submachine gun, designated 'SABR'. Has a threaded barrel for suppressors." icon_state = "saber" burst_size = 1 @@ -96,8 +96,8 @@ /obj/item/gun/ballistic/automatic/wt550 name = "\improper WT-550 Autorifle" - desc = "Recalled by Nanotrasen due to public backlash around heat distribution resulting in unintended discombobulation. \ - This outcry was fabricated through various Syndicate-backed misinformation operations to force Nanotrasen to abandon \ + desc = "Recalled by Symphionia due to public backlash around heat distribution resulting in unintended discombobulation. \ + This outcry was fabricated through various Symphionia-backed misinformation operations to force Symphionia to abandon \ its ballistics weapon program, cornering them into the energy weapons market. Most often found today in the hands of pirates, \ underfunded security personnel, cargo technicians, theoritical physicists and gang bangers out on the rim. \ Light-weight and fully automatic. Uses 4.6x30mm rounds." @@ -251,7 +251,7 @@ /obj/item/gun/ballistic/automatic/ar name = "\improper NT-ARG 'Boarder'" - desc = "A robust assault rifle used by Nanotrasen fighting forces." + desc = "A robust assault rifle used by Symphionia fighting forces." icon_state = "arg" inhand_icon_state = "arg" slot_flags = 0 @@ -367,7 +367,7 @@ /obj/item/gun/ballistic/automatic/laser name = "laser rifle" - desc = "Though sometimes mocked for the relatively weak firepower of their energy weapons, the logistic miracle of rechargeable ammunition has given Nanotrasen a decisive edge over many a foe." + desc = "Though sometimes mocked for the relatively weak firepower of their energy weapons, the logistic miracle of rechargeable ammunition has given Symphionia a decisive edge over many a foe." icon_state = "oldrifle" w_class = WEIGHT_CLASS_BULKY inhand_icon_state = "arg" diff --git a/code/modules/projectiles/guns/ballistic/bows/bow_arrows.dm b/code/modules/projectiles/guns/ballistic/bows/bow_arrows.dm index a3bb54a07e0284..4743d4931e87f2 100644 --- a/code/modules/projectiles/guns/ballistic/bows/bow_arrows.dm +++ b/code/modules/projectiles/guns/ballistic/bows/bow_arrows.dm @@ -21,7 +21,7 @@ /obj/item/ammo_casing/arrow/update_icon_state() . = ..() - icon_state = "[initial(icon_state)]" //SKYRAT EDIT: Original: icon_state = "[base_icon_state]" + icon_state = "[initial(icon_state)]" //NOVA EDIT: Original: icon_state = "[base_icon_state]" ///base arrow projectile /obj/projectile/bullet/arrow @@ -32,6 +32,7 @@ damage = 50 speed = 1 range = 25 + shrapnel_type = null embedding = list( embed_chance = 90, fall_chance = 2, @@ -42,7 +43,6 @@ jostle_pain_mult = 3, rip_time = 1 SECONDS ) - shrapnel_type = /obj/item/ammo_casing/arrow /// holy arrows /obj/item/ammo_casing/arrow/holy @@ -59,7 +59,6 @@ desc = "Here it comes, cultist scum!" icon_state = "holy_arrow_projectile" damage = 20 //still a lot but this is roundstart gear so far less - shrapnel_type =/obj/item/ammo_casing/arrow/holy embedding = list( embed_chance = 50, fall_chance = 2, diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm index 83c19bf9350129..1985046a434b28 100644 --- a/code/modules/projectiles/guns/ballistic/launchers.dm +++ b/code/modules/projectiles/guns/ballistic/launchers.dm @@ -90,9 +90,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/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index 5d4ca7d8c2b0a3..360d44b08a4f0b 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -1,7 +1,7 @@ /obj/item/gun/ballistic/automatic/pistol name = "\improper Makarov pistol" -// desc = "A small, easily concealable 9mm handgun. Has a threaded barrel for suppressors." // SKYRAT EDIT: Original - desc = "A small, easily concealable 9x25mm Mk.12 handgun. Has a threaded barrel for suppressors." // SKYRAT EDIT: Calibre rename +// desc = "A small, easily concealable 9mm handgun. Has a threaded barrel for suppressors." // NOVA EDIT: Original + desc = "A small, easily concealable 9x25mm Mk.12 handgun. Has a threaded barrel for suppressors." // NOVA EDIT: Calibre rename icon_state = "pistol" w_class = WEIGHT_CLASS_SMALL accepted_magazine_type = /obj/item/ammo_box/magazine/m9mm @@ -93,9 +93,9 @@ desc = "A Deagle brand Deagle for operators operating operationally. Uses .50 AE ammo." icon_state = "deaglecamo" inhand_icon_state = "deagleg" - // SKYRAT EDIT - We don't actually have the right icons for this. When you add the icons you can remove this line! + // NOVA EDIT - We don't actually have the right icons for this. When you add the icons you can remove this line! show_bolt_icon = FALSE - // SKYRAT EDIT END + // NOVA EDIT END /obj/item/gun/ballistic/automatic/pistol/deagle/regal name = "\improper Regal Condor" @@ -113,13 +113,13 @@ /obj/item/gun/ballistic/automatic/pistol/aps name = "\improper Stechkin APS machine pistol" - desc = "A modernized reproduction of an old Soviet machine pistol. It fires quickly, but kicks like a mule. Uses 9mm ammo. Has a threaded barrel for suppressors." //SKYRAT EDIT + desc = "A modernized reproduction of an old Soviet machine pistol. It fires quickly, but kicks like a mule. Uses 9mm ammo. Has a threaded barrel for suppressors." //NOVA EDIT icon_state = "aps" w_class = WEIGHT_CLASS_NORMAL accepted_magazine_type = /obj/item/ammo_box/magazine/m9mm_aps can_suppress = TRUE burst_size = 3 - fire_delay = 3 //SKYRAT EDIT - Original: 1 + fire_delay = 3 //NOVA EDIT - Original: 1 spread = 10 actions_types = list(/datum/action/item_action/toggle_firemode) suppressor_x_offset = 6 diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index f87f473ae459bb..a76b11dd87a519 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -60,9 +60,9 @@ set category = "Object" set desc = "Click to spin your revolver's chamber." - var/mob/M = usr + var/mob/user = usr - if(M.stat || !in_range(M,src)) + if(user.stat || !in_range(user, src)) return if (recent_spin > world.time) @@ -71,7 +71,8 @@ if(do_spin()) playsound(usr, SFX_REVOLVER_SPIN, 30, FALSE) - usr.visible_message(span_notice("[usr] spins [src]'s chamber."), span_notice("You spin [src]'s chamber.")) + visible_message(span_notice("[user] spins [src]'s chamber."), span_notice("You spin [src]'s chamber.")) + balloon_alert(user, "chamber spun") else verbs -= /obj/item/gun/ballistic/revolver/verb/spin @@ -135,15 +136,21 @@ ) /obj/item/gun/ballistic/revolver/syndicate - name = "\improper Syndicate Revolver" + name = "\improper Symphionia Revolver" desc = "A modernized 7 round revolver manufactured by Waffle Co. Uses .357 ammo." icon_state = "revolversyndie" +/obj/item/gun/ballistic/revolver/syndicate/nuclear + pin = /obj/item/firing_pin/implant/pindicate + /obj/item/gun/ballistic/revolver/syndicate/cowboy desc = "A classic revolver, refurbished for modern use. Uses .357 ammo." //There's already a cowboy sprite in there! icon_state = "lucky" +/obj/item/gun/ballistic/revolver/syndicate/cowboy/nuclear + pin = /obj/item/firing_pin/implant/pindicate + /obj/item/gun/ballistic/revolver/mateba name = "\improper Unica 6 auto-revolver" desc = "A retro high-powered autorevolver typically used by officers of the New Russia military. Uses .357 ammo." @@ -206,10 +213,13 @@ /obj/item/gun/ballistic/revolver/russian/fire_gun(atom/target, mob/living/user, flag, params) . = ..(null, user, flag, params) + var/tk_controlled = FALSE if(flag) if(!(target in user.contents) && ismob(target)) if(user.combat_mode) // Flogging action return + else if (HAS_TRAIT_FROM_ONLY(src, TRAIT_TELEKINESIS_CONTROLLED, REF(user))) // if we're far away, you can still fire it at yourself if you have TK. + tk_controlled = TRUE if(isliving(user)) if(!can_trigger_gun(user)) @@ -217,8 +227,9 @@ if(target != user) playsound(src, dry_fire_sound, 30, TRUE) user.visible_message( - span_danger("[user.name] tries to fire \the [src] at the same time, but only succeeds at looking like an idiot."), \ - span_danger("\The [src]'s anti-combat mechanism prevents you from firing it at anyone but yourself!")) + span_danger("[user.name] tries to fire \the [src] at the same time, but only succeeds at looking like an idiot."), + span_danger("\The [src]'s anti-combat mechanism prevents you from firing it at anyone but yourself!"), + ) return if(ishuman(user)) @@ -234,23 +245,28 @@ var/is_target_face = zone == BODY_ZONE_HEAD || zone == BODY_ZONE_PRECISE_EYES || zone == BODY_ZONE_PRECISE_MOUTH var/loaded_rounds = get_ammo(FALSE, FALSE) // check before it is fired + if(HAS_TRAIT(user, TRAIT_CURSED)) // I cannot live, I cannot die, trapped in myself, body my holding cell. + to_chat(user, span_warning("What a horrible night... To have a curse!")) + return + if(loaded_rounds && is_target_face) add_memory_in_range(user, 7, /datum/memory/witnessed_russian_roulette, \ protagonist = user, \ antagonist = src, \ rounds_loaded = loaded_rounds, \ aimed_at = affecting.name, \ - result = (chambered ? "lost" : "won")) + result = (chambered ? "lost" : "won"), \ + ) if(chambered) - if(HAS_TRAIT(user, TRAIT_CURSED)) // I cannot live, I cannot die, trapped in myself, body my holding cell. - to_chat(user, span_warning("What a horrible night... To have a curse!")) - return var/obj/item/ammo_casing/AC = chambered if(AC.fire_casing(user, user, params, distro = 0, quiet = 0, zone_override = null, spread = 0, fired_from = src)) playsound(user, fire_sound, fire_sound_volume, vary_fire_sound) if(is_target_face) shoot_self(user, affecting) + else if(tk_controlled) // the consequence of you doing the telekinesis stuff + to_chat(user, span_userdanger("As your mind concentrates on the revolver, you realize that it's pointing towards your head a little too late!")) + shoot_self(user, BODY_ZONE_HEAD) else user.visible_message(span_danger("[user.name] cowardly fires [src] at [user.p_their()] [affecting.name]!"), span_userdanger("You cowardly fire [src] at your [affecting.name]!"), span_hear("You hear a gunshot!")) chambered = null @@ -280,15 +296,11 @@ user.visible_message(span_danger("[user.name]'s soul is captured by \the [src]!"), span_userdanger("You've lost the gamble! Your soul is forfeit!")) /obj/item/gun/ballistic/revolver/reverse //Fires directly at its user... unless the user is a clown, of course. + name = /obj/item/gun/ballistic/revolver/syndicate::name + desc = /obj/item/gun/ballistic/revolver/syndicate::desc clumsy_check = FALSE icon_state = "revolversyndie" -/obj/item/gun/ballistic/revolver/reverse/Initialize(mapload) - . = ..() - var/obj/item/gun/ballistic/revolver/syndicate/syndie_revolver = /obj/item/gun/ballistic/revolver/syndicate - name = initial(syndie_revolver.name) - desc = initial(syndie_revolver.desc) - /obj/item/gun/ballistic/revolver/reverse/can_trigger_gun(mob/living/user, akimbo_usage) if(akimbo_usage) return FALSE diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm index 67c70352ff3069..966dd2caf32a3b 100644 --- a/code/modules/projectiles/guns/ballistic/rifle.dm +++ b/code/modules/projectiles/guns/ballistic/rifle.dm @@ -25,6 +25,7 @@ return drop_bolt(user) + /obj/item/gun/ballistic/rifle/can_shoot() if (bolt_locked) return FALSE @@ -169,6 +170,91 @@ if(.) name = "\improper Obrez Moderna" // wear it loud and proud +/obj/item/gun/ballistic/rifle/rebarxbow + name = "Heated Rebar Crossbow" + desc = "Made from an inducer, iron rods, and some wire, this crossbow fires sharpened iron rods, made from the plentiful iron rods found stationwide. \ + Only holds one rod in the magazine - you can craft the crossbow with a crowbar to try and force a second rod in, but risks a misfire, or worse..." + icon = 'icons/obj/weapons/guns/ballistic.dmi' + icon_state = "rebarxbow" + inhand_icon_state = "rebarxbow" + worn_icon_state = "rebarxbow" + rack_sound = 'sound/weapons/gun/sniper/rack.ogg' + must_hold_to_load = TRUE + mag_display = FALSE + empty_indicator = TRUE + bolt_type = BOLT_TYPE_LOCKING + semi_auto = FALSE + internal_magazine = TRUE + can_modify_ammo = FALSE + slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_SUITSTORE + bolt_wording = "bowstring" + magazine_wording = "rod" + cartridge_wording = "rod" + misfire_probability = 25 + weapon_weight = WEAPON_HEAVY + initial_caliber = CALIBER_REBAR + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/normal + fire_sound = 'sound/items/syringeproj.ogg' + can_be_sawn_off = FALSE + tac_reloads = FALSE + var/draw_time = 3 SECONDS + SET_BASE_PIXEL(0, 0) + +/obj/item/gun/ballistic/rifle/rebarxbow/rack(mob/user = null) + if (bolt_locked) + drop_bolt(user) + return + balloon_alert(user, "bowstring loosened") + playsound(src, rack_sound, rack_sound_volume, rack_sound_vary) + handle_chamber(empty_chamber = FALSE, from_firing = FALSE, chamber_next_round = FALSE) + bolt_locked = TRUE + update_appearance() + +/obj/item/gun/ballistic/rifle/rebarxbow/drop_bolt(mob/user = null) + if(!do_after(user, draw_time, target = src)) + return + playsound(src, bolt_drop_sound, bolt_drop_sound_volume, FALSE) + balloon_alert(user, "bowstring drawn") + chamber_round() + bolt_locked = FALSE + update_appearance() + +/obj/item/gun/ballistic/rifle/rebarxbow/can_shoot() + if (bolt_locked) + return FALSE + return ..() + +/obj/item/gun/ballistic/rifle/rebarxbow/examine(mob/user) + . = ..() + . += "The crossbow is [bolt_locked ? "not ready" : "ready"] to fire." + +/obj/item/gun/ballistic/rifle/rebarxbow/forced + name = "Stressed Rebar Crossbow" + desc = "Some idiot decided that they would risk shooting themselves in the face if it meant they could have a bit more ammo in this crossbow. Hopefully, it was worth it." + // Feel free to add a recipe to allow you to change it back if you would like, I just wasn't sure if you could have two recipes for the same thing. + can_misfire = TRUE + misfire_probability = 25 + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/force + +/obj/item/gun/ballistic/rifle/rebarxbow/syndie + name = "Syndicate Rebar Crossbow" + desc = "The syndicate liked the bootleg rebar crossbow NT engineers made, so they showed what it could be if properly developed. \ + Holds three shots without a chance of exploding, and features a built in scope. Normally uses special syndicate jagged iron bars, but can be wrenched to shoot inferior normal ones." + icon_state = "rebarxbowsyndie" + inhand_icon_state = "rebarxbowsyndie" + worn_icon_state = "rebarxbowsyndie" + w_class = WEIGHT_CLASS_NORMAL + can_modify_ammo = TRUE + initial_caliber = CALIBER_REBAR_SYNDIE + alternative_caliber = CALIBER_REBAR_SYNDIE_NORMAL + alternative_ammo_misfires = FALSE + draw_time = 1 + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/syndie + +/obj/item/gun/ballistic/rifle/rebarxbow/syndie/Initialize(mapload) + . = ..() + AddComponent(/datum/component/scope, range_modifier = 2) //enough range to at least be useful for stealth + /obj/item/gun/ballistic/rifle/boltaction/pipegun name = "pipegun" desc = "An excellent weapon for flushing out tunnel rats and enemy assistants, but its rifling leaves much to be desired." @@ -188,6 +274,7 @@ alternative_fire_sound = 'sound/weapons/gun/shotgun/shot.ogg' can_modify_ammo = TRUE can_bayonet = TRUE + knife_x_offset = 25 knife_y_offset = 11 can_be_sawn_off = FALSE projectile_damage_multiplier = 0.75 diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index a132e169bdf513..3888402b2af7c4 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -14,7 +14,7 @@ load_sound = 'sound/weapons/gun/shotgun/insert_shell.ogg' w_class = WEIGHT_CLASS_BULKY force = 10 - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BACK accepted_magazine_type = /obj/item/ammo_box/magazine/internal/shot semi_auto = FALSE @@ -149,7 +149,7 @@ accepted_magazine_type = /obj/item/ammo_box/magazine/m12g can_suppress = FALSE burst_size = 1 - fire_delay = 10 //Skyrat edit - Original: 0 + fire_delay = 10 //NOVA EDIT - Original: 0 pin = /obj/item/firing_pin/implant/pindicate fire_sound = 'sound/weapons/gun/shotgun/shot_alt.ogg' mag_display = TRUE @@ -264,7 +264,7 @@ w_class = WEIGHT_CLASS_BULKY weapon_weight = WEAPON_MEDIUM force = 10 - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BACK accepted_magazine_type = /obj/item/ammo_box/magazine/internal/shot/dual sawn_desc = "Omar's coming!" @@ -316,7 +316,7 @@ accepted_magazine_type = /obj/item/ammo_box/magazine/internal/shot/bounty weapon_weight = WEAPON_MEDIUM semi_auto = TRUE - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY force = 18 //it has a hook on it sharpness = SHARP_POINTY //it does in fact, have a hook on it attack_verb_continuous = list("slashes", "hooks", "stabs") diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 811ba23122f545..05fbb8a31de581 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -123,7 +123,7 @@ ammo_type[i] = shot shot = ammo_type[select] fire_sound = shot.fire_sound - fire_sound_volume = shot.fire_sound_volume //SKYRAT EDIT ADDITION + fire_sound_volume = shot.fire_sound_volume //NOVA EDIT ADDITION fire_delay = shot.delay /obj/item/gun/energy/Destroy() @@ -205,7 +205,7 @@ select = 1 var/obj/item/ammo_casing/energy/shot = ammo_type[select] fire_sound = shot.fire_sound - fire_sound_volume = shot.fire_sound_volume //SKYRAT EDIT ADDITION + fire_sound_volume = shot.fire_sound_volume //NOVA EDIT ADDITION fire_delay = shot.delay if (shot.select_name && user) balloon_alert(user, "set to [shot.select_name]") @@ -235,10 +235,10 @@ /obj/item/gun/energy/update_overlays() . = ..() - // SKYRAT EDIT START + // NOVA EDIT START if(!automatic_charge_overlays || !cell) return - // SKYRAT EDIT END + // NOVA EDIT END var/overlay_icon_state = "[icon_state]_charge" if(modifystate) diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm index f64437e3579623..9477f5e8c64c1e 100644 --- a/code/modules/projectiles/guns/energy/energy_gun.dm +++ b/code/modules/projectiles/guns/energy/energy_gun.dm @@ -119,7 +119,7 @@ /obj/item/gun/energy/e_gun/turret/add_seclight_point() return -/obj/item/gun/energy/e_gun/nuclear //SKYRAT EDIT - ICON OVERRIDDEN IN AESTHETICS MODULE +/obj/item/gun/energy/e_gun/nuclear //NOVA EDIT - ICON OVERRIDDEN IN AESTHETICS MODULE name = "advanced energy gun" desc = "An energy gun with an experimental miniaturized nuclear reactor that automatically charges the internal power cell." icon_state = "nucgun" diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 455032f17d8a44..242296b4002321 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -150,10 +150,10 @@ M.modify_projectile(K) /obj/item/gun/energy/recharge/kinetic_accelerator/cyborg - icon_state = "kineticgun" // SKYRAT EDIT CHANGE + icon_state = "kineticgun" // NOVA EDIT CHANGE holds_charge = TRUE unique_frequency = TRUE - max_mod_capacity = 100 // SKYRAT EDIT CHANGE FROM 80 - Balance due to fauna changes and no level perks applying + max_mod_capacity = 100 // NOVA EDIT CHANGE FROM 80 - Balance due to fauna changes and no level perks applying /obj/item/gun/energy/recharge/kinetic_accelerator/minebot trigger_guard = TRIGGER_GUARD_ALLOW_ALL @@ -166,7 +166,7 @@ projectile_type = /obj/projectile/kinetic select_name = "kinetic" e_cost = LASER_SHOTS(1, STANDARD_CELL_CHARGE * 0.5) - fire_sound = 'sound/weapons/kenetic_accel.ogg' // fine spelling there chap + fire_sound = 'sound/weapons/kinetic_accel.ogg' /obj/item/ammo_casing/energy/kinetic/ready_proj(atom/target, mob/living/user, quiet, zone_override = "") ..() @@ -363,7 +363,7 @@ name = "minebot cooldown decrease" desc = "Decreases the cooldown of a kinetic accelerator. Only rated for minebot use." icon_state = "door_electronics" - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' denied_type = /obj/item/borg/upgrade/modkit/cooldown/minebot modifier = 10 cost = 0 diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index e43f6defeb34e5..ded25392c6016b 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -14,7 +14,7 @@ // Only actual lasguns can be converted if(type != /obj/item/gun/energy/laser) return - var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/xraylaser, /datum/crafting_recipe/hellgun, /datum/crafting_recipe/ioncarbine, /datum/crafting_recipe/decloner) + var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/xraylaser, /datum/crafting_recipe/hellgun, /datum/crafting_recipe/ioncarbine) AddComponent( /datum/component/slapcrafting,\ @@ -40,11 +40,10 @@ desc = "A modified laser gun which can shoot far faster, but each shot is far less damaging." icon_state = "laser_carbine" ammo_type = list(/obj/item/ammo_casing/energy/lasergun/carbine) - var/allow_akimbo = FALSE /obj/item/gun/energy/laser/carbine/Initialize(mapload) . = ..() - AddComponent(/datum/component/automatic_fire, 0.15 SECONDS, allow_akimbo = allow_akimbo) + AddComponent(/datum/component/automatic_fire, 0.15 SECONDS, allow_akimbo = FALSE) /obj/item/gun/energy/laser/carbine/practice name = "practice laser carbine" @@ -53,7 +52,6 @@ clumsy_check = FALSE item_flags = NONE gun_flags = NOT_A_REAL_GUN - allow_akimbo = TRUE /obj/item/gun/energy/laser/retro/old name ="laser gun" @@ -124,7 +122,7 @@ worn_icon_state = null w_class = WEIGHT_CLASS_BULKY force = 10 - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BACK ammo_type = list(/obj/item/ammo_casing/energy/laser/accelerator) pin = null diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index 4db8e626bda2e6..bf61a954f4519f 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -7,7 +7,7 @@ w_class = WEIGHT_CLASS_BULKY force = 10 modifystate = TRUE - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BACK ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse, /obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser) cell_type = /obj/item/stock_parts/cell/pulse @@ -26,7 +26,11 @@ message_admins("A pulse rifle prize has been created at [ADMIN_VERBOSEJMP(T)]") log_game("A pulse rifle prize has been created at [AREACOORD(T)]") - notify_ghosts("Someone won a pulse rifle as a prize!", source = src, action = NOTIFY_ORBIT, header = "Pulse rifle prize") + notify_ghosts( + "Someone won a pulse rifle as a prize!", + source = src, + header = "Pulse rifle prize", + ) /obj/item/gun/energy/pulse/loyalpin pin = /obj/item/firing_pin/implant/mindshield @@ -79,7 +83,7 @@ /obj/item/gun/energy/pulse/pistol/m1911 name = "\improper M1911-P" - desc = "A compact pulse core in a classic handgun frame for Nanotrasen officers. It's not the size of the gun, it's the size of the hole it puts through people." + desc = "A compact pulse core in a classic handgun frame for Symphionia officers. It's not the size of the gun, it's the size of the hole it puts through people." icon_state = "m1911" inhand_icon_state = "gun" cell_type = /obj/item/stock_parts/cell/infinite diff --git a/code/modules/projectiles/guns/energy/recharge.dm b/code/modules/projectiles/guns/energy/recharge.dm index eed27478755480..1ebe818e158c15 100644 --- a/code/modules/projectiles/guns/energy/recharge.dm +++ b/code/modules/projectiles/guns/energy/recharge.dm @@ -12,7 +12,7 @@ /// How much time we need to recharge var/recharge_time = 1.6 SECONDS /// Sound we use when recharged - var/recharge_sound = 'sound/weapons/kenetic_reload.ogg' + var/recharge_sound = 'sound/weapons/kinetic_reload.ogg' /// An ID for our recharging timer. var/recharge_timerid /// Do we recharge slower with more of our type? @@ -119,7 +119,7 @@ /obj/item/gun/energy/recharge/ebow/halloween name = "candy corn crossbow" - desc = "A weapon favored by Syndicate trick-or-treaters." + desc = "A weapon favored by Symphionia trick-or-treaters." icon_state = "crossbow_halloween" base_icon_state = "crossbow_halloween" no_charge_state = "crossbow_halloween_empty" diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 020308270f6b82..161dae9afc021c 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -1,4 +1,4 @@ -/obj/item/gun/energy/ionrifle //SKYRAT EDIT - ICON OVERRIDDEN IN AESTHETICS MODULE +/obj/item/gun/energy/ionrifle //NOVA EDIT - ICON OVERRIDDEN IN AESTHETICS MODULE name = "ion rifle" desc = "A man-portable anti-armor weapon designed to disable mechanical threats at range." icon_state = "ionrifle" @@ -6,7 +6,7 @@ worn_icon_state = null shaded_charge = TRUE w_class = WEIGHT_CLASS_HUGE - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BACK ammo_type = list(/obj/item/ammo_casing/energy/ion) @@ -33,23 +33,6 @@ // We use the same overlay as the parent, so we can just let the component inherit the correct offsets here AddComponent(/datum/component/seclite_attachable, overlay_x = 18, overlay_y = 11) -/obj/item/gun/energy/decloner - name = "biological demolecularisor" - desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements." - icon_state = "decloner" - ammo_type = list(/obj/item/ammo_casing/energy/declone) - ammo_x_offset = 1 - -/obj/item/gun/energy/decloner/update_overlays() - . = ..() - var/obj/item/ammo_casing/energy/shot = ammo_type[select] - if(!QDELETED(cell) && (cell.charge > shot.e_cost)) - . += "decloner_spin" - -/obj/item/gun/energy/decloner/unrestricted - pin = /obj/item/firing_pin - ammo_type = list(/obj/item/ammo_casing/energy/declone/weak) - /obj/item/gun/energy/floragun name = "floral somatoray" desc = "A tool that discharges controlled radiation which induces mutation in plant cells." @@ -100,7 +83,7 @@ icon_state = "plasmacutter" inhand_icon_state = "plasmacutter" ammo_type = list(/obj/item/ammo_casing/energy/plasma) - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY attack_verb_continuous = list("attacks", "slashes", "cuts", "slices") attack_verb_simple = list("attack", "slash", "cut", "slice") force = 12 diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm index 94c1e7502a8e2d..0c1c27c9c0759d 100644 --- a/code/modules/projectiles/guns/magic.dm +++ b/code/modules/projectiles/guns/magic.dm @@ -7,7 +7,7 @@ lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' //not really a gun and some toys use these inhands righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' fire_sound = 'sound/weapons/emitter.ogg' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY w_class = WEIGHT_CLASS_HUGE ///what kind of magic is this var/school = SCHOOL_EVOCATION diff --git a/code/modules/projectiles/guns/magic/staff.dm b/code/modules/projectiles/guns/magic/staff.dm index 6b28fd32ff8b76..6d714d5c1bbb68 100644 --- a/code/modules/projectiles/guns/magic/staff.dm +++ b/code/modules/projectiles/guns/magic/staff.dm @@ -136,7 +136,7 @@ /obj/projectile/magic/antimagic, /obj/projectile/magic/arcane_barrage, /obj/projectile/magic/bounty, - ///obj/projectile/magic/change, //SKYRAT EDIT REMOVAL + ///obj/projectile/magic/change, //NOVA EDIT REMOVAL /obj/projectile/magic/death, /obj/projectile/magic/door, /obj/projectile/magic/fetch, @@ -199,7 +199,6 @@ /obj/projectile/bullet/honker, /obj/projectile/bullet/mime, /obj/projectile/curse_hand, - /obj/projectile/energy/declone, /obj/projectile/energy/electrode, /obj/projectile/energy/net, /obj/projectile/energy/nuclear_particle, @@ -263,8 +262,8 @@ ) /obj/item/gun/magic/staff/spellblade/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) - if(attack_type == PROJECTILE_ATTACK) - final_block_chance = 0 + if(attack_type == PROJECTILE_ATTACK || attack_type == LEAP_ATTACK) + final_block_chance = 0 //Don't bring a sword to a gunfight, and also you aren't going to really block someone full body tackling you with a sword return ..() /obj/item/gun/magic/staff/locker diff --git a/code/modules/projectiles/guns/special/chem_gun.dm b/code/modules/projectiles/guns/special/chem_gun.dm index b085a20026ee36..a4c505fffb9a0d 100644 --- a/code/modules/projectiles/guns/special/chem_gun.dm +++ b/code/modules/projectiles/guns/special/chem_gun.dm @@ -2,7 +2,7 @@ //this is meant to hold reagents/obj/item/gun/syringe /obj/item/gun/chem name = "reagent gun" - desc = "A Nanotrasen syringe gun, modified to automatically synthesise chemical darts, and instead hold reagents." + desc = "A Symphionia syringe gun, modified to automatically synthesise chemical darts, and instead hold reagents." icon_state = "chemgun" inhand_icon_state = "chemgun" w_class = WEIGHT_CLASS_NORMAL diff --git a/code/modules/projectiles/guns/special/hand_of_midas.dm b/code/modules/projectiles/guns/special/hand_of_midas.dm index 69d3430cf9e735..5c9cb1fd9781bc 100644 --- a/code/modules/projectiles/guns/special/hand_of_midas.dm +++ b/code/modules/projectiles/guns/special/hand_of_midas.dm @@ -45,7 +45,9 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN if(!victim.reagents) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - if(!victim.reagents.has_reagent(/datum/reagent/gold, check_subtypes = TRUE)) + + var/gold_amount = victim.reagents.get_reagent_amount(/datum/reagent/gold, type_check = REAGENT_SUB_TYPE) + if(!gold_amount) balloon_alert(user, "no gold in bloodstream") return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN var/gold_beam = user.Beam(victim, icon_state="drain_gold") @@ -53,8 +55,8 @@ qdel(gold_beam) balloon_alert(user, "link broken") return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - handle_gold_charges(user, victim.reagents.get_reagent_amount(/datum/reagent/gold, include_subtypes = TRUE)) - victim.reagents.remove_all_type(/datum/reagent/gold, victim.reagents.get_reagent_amount(/datum/reagent/gold, include_subtypes = TRUE)) + handle_gold_charges(user, gold_amount) + victim.reagents.remove_reagent(/datum/reagent/gold, gold_amount, include_subtypes = TRUE) victim.remove_status_effect(/datum/status_effect/midas_blight) qdel(gold_beam) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN diff --git a/code/modules/projectiles/guns/special/meat_hook.dm b/code/modules/projectiles/guns/special/meat_hook.dm index dd83bbd030f26c..724f3abd700f1c 100644 --- a/code/modules/projectiles/guns/special/meat_hook.dm +++ b/code/modules/projectiles/guns/special/meat_hook.dm @@ -1,5 +1,7 @@ -//Meat Hook +#define TRAIT_HOOKED "hooked" +#define IMMOBILIZATION_TIMER (0.25 SECONDS) //! How long we immobilize the firer after firing - we do cancel the immobilization early if nothing is hit. +/// Meat Hook /obj/item/gun/magic/hook name = "meat hook" desc = "Mid or feed." @@ -22,8 +24,22 @@ /obj/item/gun/magic/hook/can_trigger_gun(mob/living/user, akimbo_usage) // This isn't really a gun, so it shouldn't be checking for TRAIT_NOGUNS, a firing pin (pinless), or a trigger guard (guardless) if(akimbo_usage) return FALSE //this would be kinda weird while shooting someone down. + if(HAS_TRAIT(user, TRAIT_IMMOBILIZED)) + return FALSE return TRUE +/obj/item/gun/magic/hook/suicide_act(mob/living/user) + var/obj/item/bodypart/head/removable = user.get_bodypart(BODY_ZONE_HEAD) + if(isnull(removable)) + user.visible_message(span_suicide("[user] stuffs the chain of the [src] down the hole where their head should be! It looks like [user.p_theyre()] trying to commit suicide!")) + return OXYLOSS + + playsound(get_turf(src), fire_sound, 50, TRUE, -1) + user.visible_message(span_suicide("[user] is using the [src] on their [user.p_their()] head! It looks like [user.p_theyre()] trying to commit suicide!")) + playsound(get_turf(src), 'sound/weapons/bladeslice.ogg', 70) + removable.dismember(silent = FALSE) + return BRUTELOSS + /obj/item/ammo_casing/magic/hook name = "hook" desc = "A hook." @@ -41,37 +57,154 @@ armour_penetration = 60 damage_type = BRUTE hitsound = 'sound/effects/splat.ogg' - var/chain - var/knockdown_time = (0.5 SECONDS) - var/chain_icon = 'icons/effects/beam.dmi' //SKYRAT ADDITION + /// The chain we send out while we are in motion, referred to as "initial" to not get confused with the chain we use to reel the victim in. + var/datum/beam/initial_chain + var/chain_icon = 'icons/effects/beam.dmi' // NOVA EDIT ADDITION /obj/projectile/hook/fire(setAngle) if(firer) - chain = firer.Beam(src, icon_state = "chain", icon = chain_icon, emissive = FALSE) //SKYRAT EDIT, original: chain = firer.Beam(src, icon_state = "chain", emissive = FALSE) - ..() - //TODO: root the firer until the chain returns + initial_chain = firer.Beam(src, icon_state = "chain", icon = chain_icon, emissive = FALSE) // NOVA EDIT CHANGE - Adds icon arg - ORIGINAL: chain = firer.Beam(src, icon_state = "chain", emissive = FALSE) + ADD_TRAIT(firer, TRAIT_IMMOBILIZED, REF(src)) + addtimer(TRAIT_CALLBACK_REMOVE(firer, TRAIT_IMMOBILIZED, REF(src)), IMMOBILIZATION_TIMER) // safety if we miss, if we get a hit we stay immobilized + return ..() /obj/projectile/hook/on_hit(atom/target, blocked = 0, pierce_hit) . = ..() - if(ismovable(target)) - var/atom/movable/A = target - if(A.anchored) - return - A.visible_message(span_danger("[A] is snagged by [firer]'s hook!")) - //Should really be a movement loop, but I don't want to support moving 5 tiles a tick - //It just looks bad - new /datum/forced_movement(A, get_turf(firer), 5, TRUE) - if (isliving(target)) - var/mob/living/fresh_meat = target - fresh_meat.Knockdown(knockdown_time) - return - //TODO: keep the chain beamed to A - //TODO: needs a callback to delete the chain - -/obj/projectile/hook/Destroy() - qdel(chain) + if(!ismovable(target)) + return + + var/atom/movable/victim = target + if(victim.anchored || HAS_TRAIT_FROM(victim, TRAIT_HOOKED, REF(firer))) + return + + victim.visible_message(span_danger("[victim] is snagged by [firer]'s hook!")) + + var/datum/hook_and_move/puller = new + puller.begin_pulling(firer, victim, get_turf(firer)) + REMOVE_TRAIT(firer, TRAIT_IMMOBILIZED, REF(src)) + +/obj/projectile/hook/Destroy(force) + QDEL_NULL(initial_chain) + return ..() + +/// Lightweight datum that just handles moving a target for the hook. +/// For the love of God, do not use this outside this file. +/datum/hook_and_move + /// Weakref to the victim we are dragging + var/datum/weakref/victim_ref = null + /// Weakref of the destination that the victim is heading towards. + var/datum/weakref/destination_ref = null + /// Weakref to the firer of the hook + var/datum/weakref/firer_ref = null + /// String to the REF() of the dude that fired us so we can ensure we always cleanup our traits + var/firer_ref_string = null + + /// The last time our movement fired. + var/last_movement = 0 + /// The chain beam we currently own. + var/datum/beam/return_chain = null + + /// How many steps we force the victim to take per tick + var/steps_per_tick = 5 + /// How long we knockdown the victim for. + var/knockdown_time = (0.5 SECONDS) + + /// List of traits that prevent the user from moving. More restrictive than attempting to fire the hook by design. + var/static/list/prevent_movement_traits = list( + TRAIT_IMMOBILIZED, + TRAIT_UI_BLOCKED, + ) + +/datum/hook_and_move/Destroy(force) + STOP_PROCESSING(SSfastprocess, src) + QDEL_NULL(return_chain) return ..() +/// Uses fastprocessing to move our victim to the destination at a rather fast speed. +/datum/hook_and_move/proc/begin_pulling(atom/movable/firer, atom/movable/victim, atom/destination) + return_chain = firer.Beam(victim, icon_state = "chain", emissive = FALSE) + + firer_ref_string = REF(firer) + ADD_TRAIT(victim, TRAIT_HOOKED, firer_ref_string) + firer.add_traits(prevent_movement_traits, REF(src)) + if(isliving(victim)) + var/mob/living/fresh_meat = victim + fresh_meat.Knockdown(knockdown_time) + + destination_ref = WEAKREF(destination) + victim_ref = WEAKREF(victim) + firer_ref = WEAKREF(firer) + + START_PROCESSING(SSfastprocess, src) + +/// Cancels processing and removes the trait from the victim. +/datum/hook_and_move/proc/end_movement() + var/atom/movable/firer = firer_ref?.resolve() + if(!QDELETED(firer)) + firer.remove_traits(prevent_movement_traits, REF(src)) + + var/atom/movable/victim = victim_ref?.resolve() + if(!QDELETED(victim)) + REMOVE_TRAIT(victim, TRAIT_HOOKED, firer_ref_string) + + qdel(src) + +/datum/hook_and_move/process(seconds_per_tick) + var/atom/movable/victim = victim_ref?.resolve() + var/atom/destination = destination_ref?.resolve() + if(QDELETED(victim) || QDELETED(destination)) + end_movement() + return + + var/steps_to_take = round(steps_per_tick * (world.time - last_movement)) + if(steps_to_take <= 0) + return + + var/movement_result = attempt_movement(victim, destination) + if(!movement_result || (victim.loc == destination.loc)) // either we failed our movement or our mission is complete + end_movement() + +/// Attempts to move the victim towards the destination. Returns TRUE if we do a successful movement, FALSE otherwise. +/// second_attempt is a boolean to prevent infinite recursion. +/// If this whole series of events wasn't reliant on SSfastprocess firing as fast as it does, it would have been more useful to make this a move loop datum. But, we need the speed. +/datum/hook_and_move/proc/attempt_movement(atom/movable/subject, atom/target, second_attempt = FALSE) + var/actually_moved = FALSE + if(!second_attempt) + actually_moved = step_towards(subject, target) + + if(actually_moved) + return TRUE + + // alright now the code fucking sucks + var/subject_x = subject.x + var/subject_y = subject.y + var/target_x = target.x + var/target_y = target.y + + //If we're going x, step x + if((target_x > subject_x) && step(subject, EAST)) + actually_moved = TRUE + else if((target_x < subject_x) && step(subject, WEST)) + actually_moved = TRUE + + if(actually_moved) + return TRUE + + //If the x step failed, go y + if((target_y > subject_y) && step(subject, NORTH)) + actually_moved = TRUE + else if((target_y < subject_y) && step(subject, SOUTH)) + actually_moved = TRUE + + if(actually_moved) + return TRUE + + // if we fail twice, abort. otherwise queue up the second attempt. + if(second_attempt) + return FALSE + + return attempt_movement(subject, target, second_attempt = TRUE) + //just a nerfed version of the real thing for the bounty hunters. /obj/item/gun/magic/hook/bounty name = "hook" @@ -83,3 +216,12 @@ /obj/projectile/hook/bounty damage = 0 stamina = 40 + +/// Debug hook for fun (AKA admin abuse). doesn't do any more damage or anything just lets you wildfire it. +/obj/item/gun/magic/hook/debug + name = "super meat hook" + max_charges = 100 + recharge_rate = 1 + +#undef TRAIT_HOOKED +#undef IMMOBILIZATION_TIMER diff --git a/code/modules/projectiles/guns/special/syringe_gun.dm b/code/modules/projectiles/guns/special/syringe_gun.dm index 805378c1ffcc40..97a31a7c81354b 100644 --- a/code/modules/projectiles/guns/special/syringe_gun.dm +++ b/code/modules/projectiles/guns/special/syringe_gun.dm @@ -46,12 +46,12 @@ /obj/item/gun/syringe/recharge_newshot() if(!syringes.len) return - //SKYRAT EDIT SMARTDARTS + //NOVA EDIT SMARTDARTS if(istype(syringes[length(syringes)], /obj/item/reagent_containers/syringe/smartdart)) chambered = new /obj/item/ammo_casing/syringegun/dart(src) else chambered = new /obj/item/ammo_casing/syringegun(src) - //SKYRAT EDIT SMARTDARTS END + //NOVA EDIT SMARTDARTS END chambered.newshot() /obj/item/gun/syringe/can_shoot() diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm index 45763feff043b6..c4b6f6fb4ce7e4 100644 --- a/code/modules/projectiles/pins.dm +++ b/code/modules/projectiles/pins.dm @@ -1,11 +1,11 @@ /obj/item/firing_pin name = "electronic firing pin" desc = "A small authentication device, to be inserted into a firearm receiver to allow operation. NT safety regulations require all new designs to incorporate one." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/gunmod.dmi' icon_state = "firing_pin" inhand_icon_state = "pen" worn_icon_state = "pen" - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY w_class = WEIGHT_CLASS_TINY attack_verb_continuous = list("pokes") attack_verb_simple = list("poke") @@ -30,19 +30,19 @@ if(proximity_flag) if(isgun(target)) . |= AFTERATTACK_PROCESSED_ITEM - var/obj/item/gun/targetted_gun = target - var/obj/item/firing_pin/old_pin = targetted_gun.pin + var/obj/item/gun/targeted_gun = target + var/obj/item/firing_pin/old_pin = targeted_gun.pin if(old_pin?.pin_removable && (force_replace || old_pin.pin_hot_swappable)) if(Adjacent(user)) user.put_in_hands(old_pin) else - old_pin.forceMove(targetted_gun.drop_location()) + old_pin.forceMove(targeted_gun.drop_location()) old_pin.gun_remove(user) - if(!targetted_gun.pin) + if(!targeted_gun.pin) if(!user.temporarilyRemoveItemFromInventory(src)) return . - if(gun_insert(user, targetted_gun)) + if(gun_insert(user, targeted_gun)) if(old_pin) balloon_alert(user, "swapped firing pin") else diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 18c0b557f88186..8c456c26863803 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -13,9 +13,8 @@ generic_canpass = FALSE blocks_emissive = EMISSIVE_BLOCK_GENERIC layer = MOB_LAYER - plane = GAME_PLANE_FOV_HIDDEN //The sound this plays on impact. - var/hitsound // SKYRAT EDIT CHANGE + var/hitsound // NOVA EDIT CHANGE var/hitsound_wall = "" resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF @@ -145,7 +144,7 @@ var/homing_offset_y = 0 var/damage = 10 - var/damage_type = BRUTE //BRUTE, BURN, TOX, OXY, CLONE are the only things that should be in here + var/damage_type = BRUTE //BRUTE, BURN, TOX, OXY are the only things that should be in here ///Defines what armor to use when it hits things. Must be set to bullet, laser, energy, or bomb var/armor_flag = BULLET @@ -282,8 +281,8 @@ var/mob/living/L = target hit_limb_zone = L.check_hit_limb_zone_name(def_zone) if(fired_from) - SEND_SIGNAL(fired_from, COMSIG_PROJECTILE_ON_HIT, firer, target, Angle, hit_limb_zone) - SEND_SIGNAL(src, COMSIG_PROJECTILE_SELF_ON_HIT, firer, target, Angle, hit_limb_zone) + SEND_SIGNAL(fired_from, COMSIG_PROJECTILE_ON_HIT, firer, target, Angle, hit_limb_zone, blocked) + SEND_SIGNAL(src, COMSIG_PROJECTILE_SELF_ON_HIT, firer, target, Angle, hit_limb_zone, blocked) if(QDELETED(src)) // in case one of the above signals deleted the projectile for whatever reason return BULLET_ACT_BLOCK @@ -298,7 +297,7 @@ hitx = target.pixel_x + rand(-8, 8) hity = target.pixel_y + rand(-8, 8) - // SKYRAT EDIT ADDITION BEGIN - IMPACT SOUNDS + // NOVA EDIT ADDITION BEGIN - IMPACT SOUNDS var/impact_sound if(hitsound) impact_sound = hitsound @@ -306,7 +305,7 @@ impact_sound = target.impact_sound get_sfx() playsound(src, get_sfx_skyrat(impact_sound), vol_by_damage(), TRUE, -1) - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END if(damage > 0 && (damage_type == BRUTE || damage_type == BURN) && iswallturf(target_turf) && prob(75)) var/turf/closed/wall/target_wall = target_turf @@ -320,13 +319,13 @@ if(!isliving(target)) if(impact_effect_type && !hitscan) new impact_effect_type(target_turf, hitx, hity) - /* SKYRAT EDIT REMOVAL - IMPACT SOUNDS + /* NOVA EDIT REMOVAL - IMPACT SOUNDS if(isturf(target) && hitsound_wall) var/volume = clamp(vol_by_damage() + 20, 0, 100) if(suppressed) volume = 5 playsound(loc, hitsound_wall, volume, TRUE, -1) - SKYRAT EDIT REMOVAL END */ + NOVA EDIT REMOVAL END */ return BULLET_ACT_HIT var/mob/living/living_target = target @@ -359,16 +358,16 @@ if(hit_limb_zone) organ_hit_text = " in \the [parse_zone(hit_limb_zone)]" if(suppressed == SUPPRESSED_VERY) - //playsound(loc, hitsound, 5, TRUE, -1) SKYRAT EDIT REMOVAL - IMPACT SOUNDS + //playsound(loc, hitsound, 5, TRUE, -1) NOVA EDIT REMOVAL - IMPACT SOUNDS else if(suppressed) - //playsound(loc, hitsound, 5, TRUE, -1) SKYRAT EDIT REMOVAL - IMPACT SOUNDS + //playsound(loc, hitsound, 5, TRUE, -1) NOVA EDIT REMOVAL - IMPACT SOUNDS to_chat(living_target, span_userdanger("You're shot by \a [src][organ_hit_text]!")) else - /* SKYRAT EDIT REMOVAL - IMPACT SOUNDS + /* NOVA EDIT REMOVAL - IMPACT SOUNDS if(hitsound) var/volume = vol_by_damage() playsound(src, hitsound, volume, TRUE, -1) - SKYRAT EDIT REMOVAL END */ + NOVA EDIT REMOVAL END */ living_target.visible_message(span_danger("[living_target] is hit by \a [src][organ_hit_text]!"), \ span_userdanger("You're hit by \a [src][organ_hit_text]!"), null, COMBAT_MESSAGE_RANGE) if(living_target.is_blind()) @@ -614,7 +613,7 @@ var/mob/M = firer if((target == firer) || ((target == firer.loc) && ismecha(firer.loc)) || (target in firer.buckled_mobs) || (istype(M) && (M.buckled == target))) return FALSE - if(ignored_factions?.len && ismob(target) && (!direct_target || ignore_direct_target)) //SKYRAT EDIT: ignore_direct_target + if(ignored_factions?.len && ismob(target) && (!direct_target || ignore_direct_target)) //NOVA EDIT: ignore_direct_target var/mob/target_mob = target if(faction_check(target_mob.faction, ignored_factions)) return FALSE @@ -793,7 +792,7 @@ if(!log_override && firer && original) log_combat(firer, original, "fired at", src, "from [get_area_name(src, TRUE)]") //note: mecha projectile logging is handled in /obj/item/mecha_parts/mecha_equipment/weapon/action(). try to keep these messages roughly the sameish just for consistency's sake. - if(direct_target && (get_dist(direct_target, get_turf(fired_from)) <= 1)) // point blank shots // SKYRAT EDIT - ORIGINAL: if(direct_target && (get_dist(direct_target, get_turf(src)) <= 1)) + if(direct_target && (get_dist(direct_target, get_turf(fired_from)) <= 1)) // point blank shots // NOVA EDIT - ORIGINAL: if(direct_target && (get_dist(direct_target, get_turf(src)) <= 1)) process_hit(get_turf(direct_target), direct_target) if(QDELETED(src)) return diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index deb8440cd6640c..2a7095af0f28a6 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -2,7 +2,7 @@ name = "laser" icon_state = "laser" pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE - damage = 22 // SKYRAT EDIT: 20 + damage = 22 // NOVA EDIT: 20 damage_type = BURN hitsound = 'sound/weapons/sear.ogg' hitsound_wall = 'sound/weapons/effects/searwall.ogg' @@ -179,7 +179,7 @@ if(pierce_hits <= 0) projectile_piercing = NONE pierce_hits -= 1 - ..() + return ..() /obj/projectile/beam/emitter name = "emitter beam" diff --git a/code/modules/projectiles/projectile/bullets/foam_dart.dm b/code/modules/projectiles/projectile/bullets/foam_dart.dm index 6d4cffd4524d66..3f086166e6a880 100644 --- a/code/modules/projectiles/projectile/bullets/foam_dart.dm +++ b/code/modules/projectiles/projectile/bullets/foam_dart.dm @@ -5,27 +5,24 @@ damage_type = OXY icon = 'icons/obj/weapons/guns/toy.dmi' icon_state = "foamdart_proj" - base_icon_state = "foamdart_proj" + base_icon_state = "foamdart" range = 10 + shrapnel_type = null embedding = null var/modified = FALSE var/obj/item/pen/pen = null /obj/projectile/bullet/foam_dart/Initialize(mapload) . = ..() - RegisterSignal(src, COMSIG_PROJECTILE_ON_SPAWN_DROP, PROC_REF(handle_drop)) + RegisterSignals(src, list(COMSIG_PROJECTILE_ON_SPAWN_DROP, COMSIG_PROJECTILE_ON_SPAWN_EMBEDDED), PROC_REF(handle_drop)) /obj/projectile/bullet/foam_dart/proc/handle_drop(datum/source, obj/item/ammo_casing/foam_dart/newcasing) SIGNAL_HANDLER newcasing.modified = modified + newcasing.update_appearance() var/obj/projectile/bullet/foam_dart/newdart = newcasing.loaded_projectile newdart.modified = modified newdart.damage_type = damage_type - if(pen) - newdart.pen = pen - pen.forceMove(newdart) - pen = null - newdart.damage = 5 newdart.update_appearance() /obj/projectile/bullet/foam_dart/Destroy() @@ -35,5 +32,5 @@ /obj/projectile/bullet/foam_dart/riot name = "riot foam dart" icon_state = "foamdart_riot_proj" - base_icon_state = "foamdart_riot_proj" + base_icon_state = "foamdart_riot" stamina = 25 diff --git a/code/modules/projectiles/projectile/bullets/rifle.dm b/code/modules/projectiles/projectile/bullets/rifle.dm index 4cb7bd543b481d..d76b2de9d6ace0 100644 --- a/code/modules/projectiles/projectile/bullets/rifle.dm +++ b/code/modules/projectiles/projectile/bullets/rifle.dm @@ -46,4 +46,32 @@ bare_wound_bonus = 80 embedding = list(embed_chance=100, fall_chance=3, jostle_chance=4, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.4, pain_mult=5, jostle_pain_mult=6, rip_time=10) wound_falloff_tile = -5 - shrapnel_type = /obj/item/ammo_casing/harpoon + shrapnel_type = null + +// Rebar (Rebar Crossbow) +/obj/projectile/bullet/rebar + name = "rebar" + icon_state = "rebar" + damage = 30 + speed = 0.4 + dismemberment = 1 //because a 1 in 100 chance to just blow someones arm off is enough to be cool but also not enough to be reliable + armour_penetration = 10 + wound_bonus = -20 + bare_wound_bonus = 20 + embedding = list(embed_chance=60, fall_chance=2, jostle_chance=2, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.4, pain_mult=3, jostle_pain_mult=2, rip_time=10) + embed_falloff_tile = -5 + wound_falloff_tile = -2 + shrapnel_type = /obj/item/stack/rods + +/obj/projectile/bullet/rebarsyndie + name = "rebar" + icon_state = "rebar" + damage = 35 + speed = 0.4 + dismemberment = 2 //It's a budget sniper rifle. + armour_penetration = 20 //A bit better versus armor. Gets past anti laser armor or a vest, but doesnt wound proc on sec armor. + wound_bonus = 10 + bare_wound_bonus = 10 + embedding = list(embed_chance=80, fall_chance=1, jostle_chance=3, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.4, pain_mult=3, jostle_pain_mult=2, rip_time=14) + embed_falloff_tile = -3 + shrapnel_type = /obj/item/stack/rods diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm index 85016dc93aaff2..9bdd5a145ead2b 100644 --- a/code/modules/projectiles/projectile/bullets/shotgun.dm +++ b/code/modules/projectiles/projectile/bullets/shotgun.dm @@ -71,7 +71,6 @@ /obj/projectile/bullet/pellet icon_state = "pellet" damage_falloff_tile = -0.45 - stamina_falloff_tile = -0.25 /obj/projectile/bullet/pellet/shotgun_buckshot name = "buckshot pellet" @@ -87,6 +86,7 @@ sharpness = NONE embedding = null speed = 1.2 + stamina_falloff_tile = -0.25 ricochets_max = 4 ricochet_chance = 120 ricochet_decay_chance = 0.9 diff --git a/code/modules/projectiles/projectile/energy/decloner.dm b/code/modules/projectiles/projectile/energy/decloner.dm deleted file mode 100644 index 6e5f6a5f1e776a..00000000000000 --- a/code/modules/projectiles/projectile/energy/decloner.dm +++ /dev/null @@ -1,19 +0,0 @@ -/obj/projectile/energy/declone - name = "radiation beam" - icon_state = "declone" - damage = 20 - damage_type = CLONE - impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser - - /// The chance to be irradiated on hit - var/radiation_chance = 30 - -/obj/projectile/energy/declone/on_hit(atom/target, blocked, pierce_hit) - if (ishuman(target) && prob(radiation_chance)) - radiation_pulse(target, max_range = 0, threshold = RAD_FULL_INSULATION) - - ..() - -/obj/projectile/energy/declone/weak - damage = 9 - radiation_chance = 10 diff --git a/code/modules/projectiles/projectile/energy/net_snare.dm b/code/modules/projectiles/projectile/energy/net_snare.dm index c60c0c35d172ed..925096f63514d8 100644 --- a/code/modules/projectiles/projectile/energy/net_snare.dm +++ b/code/modules/projectiles/projectile/energy/net_snare.dm @@ -69,7 +69,7 @@ new/obj/item/restraints/legcuffs/beartrap/energy(get_turf(loc)) else if(iscarbon(target)) var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy(get_turf(target)) - B.spring_trap(null, target) + B.spring_trap(target) . = ..() /obj/projectile/energy/trap/on_range() @@ -88,7 +88,7 @@ qdel(src) if(iscarbon(target)) var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy/cyborg(get_turf(target)) - B.spring_trap(null, target) + B.spring_trap(target) QDEL_IN(src, 10) . = ..() diff --git a/code/modules/projectiles/projectile/energy/radiation.dm b/code/modules/projectiles/projectile/energy/radiation.dm new file mode 100644 index 00000000000000..c9c649228105f7 --- /dev/null +++ b/code/modules/projectiles/projectile/energy/radiation.dm @@ -0,0 +1,19 @@ +/obj/projectile/energy/radiation + name = "radiation beam" + icon_state = "declone" + damage = 20 + damage_type = TOX + impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser + + /// The chance to be irradiated on hit + var/radiation_chance = 30 + +/obj/projectile/energy/radiation/on_hit(atom/target, blocked, pierce_hit) + if (ishuman(target) && prob(radiation_chance)) + radiation_pulse(target, max_range = 0, threshold = RAD_FULL_INSULATION) + + ..() + +/obj/projectile/energy/radiation/weak + damage = 9 + radiation_chance = 10 diff --git a/code/modules/projectiles/projectile/energy/stun.dm b/code/modules/projectiles/projectile/energy/stun.dm index 67cbd4352ee90b..ab725e1d6faadf 100644 --- a/code/modules/projectiles/projectile/energy/stun.dm +++ b/code/modules/projectiles/projectile/energy/stun.dm @@ -2,12 +2,12 @@ name = "electrode" icon_state = "spark" color = "#FFFF00" - stamina = 80 // SKYRAT EDIT CHANGE + stamina = 80 // NOVA EDIT CHANGE stutter = 10 SECONDS jitter = 40 SECONDS hitsound = 'sound/weapons/taserhit.ogg' //range = 7 //ORIGINAL - range = 5 //SKYRAT EDIT CHANGE - COMBAT + range = 5 //NOVA EDIT CHANGE - COMBAT tracer_type = /obj/effect/projectile/tracer/stun muzzle_type = /obj/effect/projectile/muzzle/stun impact_type = /obj/effect/projectile/impact/stun @@ -18,7 +18,7 @@ do_sparks(1, TRUE, src) else if(iscarbon(target)) var/mob/living/carbon/C = target - C.adjust_confusion_up_to(15 SECONDS, 30 SECONDS) // SKYRAT EDIT ADDITION - Electrode jitteriness + C.adjust_confusion_up_to(15 SECONDS, 30 SECONDS) // NOVA EDIT ADDITION - Electrode jitteriness C.add_mood_event("tased", /datum/mood_event/tased) SEND_SIGNAL(C, COMSIG_LIVING_MINOR_SHOCK) if(C.dna && C.dna.check_mutation(/datum/mutation/human/hulk)) diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index 2f3214d5d90aba..ae91fb6c60318f 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -173,41 +173,12 @@ /obj/projectile/magic/animate/on_hit(atom/target, blocked = 0, pierce_hit) . = ..() - target.animate_atom_living(firer) - -/atom/proc/animate_atom_living(mob/living/owner = null) - if((isitem(src) || isstructure(src)) && !is_type_in_list(src, GLOB.animatable_blacklist)) - if(istype(src, /obj/structure/statue/petrified)) - var/obj/structure/statue/petrified/P = src - if(P.petrified_mob) - var/mob/living/L = P.petrified_mob - var/mob/living/basic/statue/S = new(P.loc, owner) - S.name = "statue of [L.name]" - if(owner) - S.faction = list("[REF(owner)]") - S.icon = P.icon - S.icon_state = P.icon_state - S.copy_overlays(P, TRUE) - S.color = P.color - S.atom_colours = P.atom_colours.Copy() - if(L.mind) - L.mind.transfer_to(S) - if(owner) - to_chat(S, span_userdanger("You are an animate statue. You cannot move when monitored, but are nearly invincible and deadly when unobserved! Do not harm [owner], your creator.")) - P.forceMove(S) - return - else - var/obj/O = src - if(isgun(O)) - new /mob/living/simple_animal/hostile/mimic/copy/ranged(drop_location(), src, owner) - else - new /mob/living/simple_animal/hostile/mimic/copy(drop_location(), src, owner) - - else if(istype(src, /mob/living/simple_animal/hostile/mimic/copy)) - // Change our allegiance! - var/mob/living/simple_animal/hostile/mimic/copy/C = src - if(owner) - C.ChangeOwner(owner) + if(!is_type_in_typecache(target, GLOB.animatable_blacklist)) + target.animate_atom_living(firer) + +///proc to animate the target into a living creature +/atom/proc/animate_atom_living(mob/living/owner) + return /obj/projectile/magic/spellblade name = "blade energy" @@ -400,7 +371,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/projectiles/projectile/special/curse.dm b/code/modules/projectiles/projectile/special/curse.dm index 25eef224e0d414..03b2e0feb53c41 100644 --- a/code/modules/projectiles/projectile/special/curse.dm +++ b/code/modules/projectiles/projectile/special/curse.dm @@ -7,7 +7,6 @@ base_icon_state = "cursehand" hitsound = 'sound/effects/curse4.ogg' layer = LARGE_MOB_LAYER - plane = GAME_PLANE_UPPER_FOV_HIDDEN damage_type = BURN damage = 10 paralyze = 20 diff --git a/code/modules/projectiles/projectile/special/lightbreaker.dm b/code/modules/projectiles/projectile/special/lightbreaker.dm index fd7d3d89e7a97e..2be6d9e4470dac 100644 --- a/code/modules/projectiles/projectile/special/lightbreaker.dm +++ b/code/modules/projectiles/projectile/special/lightbreaker.dm @@ -4,7 +4,7 @@ damage = 0 damage_type = BRUTE armor_flag = BOMB - range = 14 + range = 21 projectile_phasing = PASSTABLE | PASSMOB | PASSMACHINE | PASSSTRUCTURE hitscan = TRUE var/disrupt_duration = 10 SECONDS diff --git a/code/modules/projectiles/projectile/special/rocket.dm b/code/modules/projectiles/projectile/special/rocket.dm index 22082d3809fcbf..8f58c6a865faf4 100644 --- a/code/modules/projectiles/projectile/special/rocket.dm +++ b/code/modules/projectiles/projectile/special/rocket.dm @@ -81,7 +81,7 @@ among other potential differences. This granularity is helpful for things like t explosion(target, light_impact_range = 2, flame_range = 3, flash_range = 4, explosion_cause = src) /** SRM-8 Missile - Used by the SRM-8 Exosuit missile rack. -* Employed by Nuclear Operatives Maulers and Nanotrasen Marauders and Seraphs to kill everything and anyone. +* Employed by Nuclear Operatives Maulers and Symphionia Marauders and Seraphs to kill everything and anyone. * * Explodes when it hits literally anything. */ diff --git a/code/modules/reagents/chem_splash.dm b/code/modules/reagents/chem_splash.dm index 5b29cb64caf0ad..2e94083f8cbfd7 100644 --- a/code/modules/reagents/chem_splash.dm +++ b/code/modules/reagents/chem_splash.dm @@ -50,7 +50,7 @@ holder.multiply_reagents(threatscale) for(var/datum/reagents/reactant as anything in reactants) - reactant.trans_to(holder, reactant.total_volume, threatscale, preserve_data = TRUE, no_react = TRUE) + reactant.trans_to(holder, reactant.total_volume, threatscale, no_react = TRUE) holder.chem_temp += extra_heat // Average temperature of reagents + extra heat. holder.handle_reactions() // React them now. diff --git a/code/modules/reagents/chemistry/equilibrium.dm b/code/modules/reagents/chemistry/equilibrium.dm index f46c636c50f59b..c07c349f8935be 100644 --- a/code/modules/reagents/chemistry/equilibrium.dm +++ b/code/modules/reagents/chemistry/equilibrium.dm @@ -57,10 +57,6 @@ /datum/equilibrium/New(datum/chemical_reaction/input_reaction, datum/reagents/input_holder) reaction = input_reaction holder = input_holder - if(!holder || !reaction) //sanity check - stack_trace("A new [type] was set up, with incorrect/null input vars!") - to_delete = TRUE - return if(!check_inital_conditions()) //If we're outside of the scope of the reaction vars to_delete = TRUE return @@ -78,6 +74,7 @@ LAZYREMOVE(holder.reaction_list, src) holder = null reaction = null + to_delete = TRUE return ..() /* @@ -87,39 +84,51 @@ * Don't call this unless you know what you're doing, this is an internal proc */ /datum/equilibrium/proc/check_inital_conditions() + if(QDELETED(holder)) + stack_trace("an equilibrium is missing it's holder.") + return FALSE + if(QDELETED(reaction)) + stack_trace("an equilibrium is missing it's reaction.") + return FALSE + if(!length(reaction.required_reagents)) + stack_trace("an equilibrium is missing required reagents.") + return FALSE + //Make sure we have the right multipler for on_reaction() for(var/single_reagent in reaction.required_reagents) - multiplier = min(multiplier, round((holder.get_reagent_amount(single_reagent) / reaction.required_reagents[single_reagent]), CHEMICAL_QUANTISATION_LEVEL)) - if(multiplier == INFINITY) + multiplier = min(multiplier, holder.get_reagent_amount(single_reagent) / reaction.required_reagents[single_reagent]) + multiplier = round(multiplier, CHEMICAL_QUANTISATION_LEVEL) + if(!multiplier) //we have no more or very little reagents left return FALSE - //Consider purity gating too? - probably not, purity is hard to determine + //To prevent reactions outside of the pH window from starting. if(!((holder.ph >= (reaction.optimal_ph_min - reaction.determin_ph_range)) && (holder.ph <= (reaction.optimal_ph_max + reaction.determin_ph_range)))) return FALSE + + //All checks pass. cache the product ratio + if(length(reaction.results)) + product_ratio = 0 + for(var/product in reaction.results) + product_ratio += reaction.results[product] + else + product_ratio = 1 return TRUE -/* -* Check to make sure our input vars are sensible - is the holder overheated? does it have the required reagents? Does it have the required calalysts? -* -* If you're adding more checks for reactions, this is the proc to edit -* otherwise, generally, don't call this directed except internally -*/ +/** + * Check to make sure our input vars are sensible + * 1) Is our atom in which this reaction is occuring still intact? + * 2) Do we still have reagents to react with + * 3) Do we have the required catalysts? + * If you're adding more checks for reactions, this is the proc to edit + * otherwise, generally, don't call this directed except internally + */ /datum/equilibrium/proc/check_reagent_properties() - //Have we exploded from on_reaction? - if(!holder.my_atom || holder.reagent_list.len == 0) - return FALSE - if(!holder) - stack_trace("an equilibrium is missing it's holder.") - return FALSE - if(!reaction) - stack_trace("an equilibrium is missing it's reaction.") + //Have we exploded from on_reaction or did we run out of reagents? + if(QDELETED(holder.my_atom) || !holder.reagent_list.len) return FALSE - //set up catalyst checks + //Check for catalysts var/total_matching_catalysts = 0 - //Reagents check should be handled in the calculate_yield() from multiplier - - //If the product/reactants are too impure for(var/datum/reagent/reagent as anything in holder.reagent_list) //this is done this way to reduce processing compared to holder.has_reagent(P) for(var/datum/reagent/catalyst as anything in reaction.required_catalysts) @@ -130,11 +139,8 @@ if(reagent.volume >= catalyst_agent.min_volume) catalyst_agent.consider_catalyst(src) - if(!(total_matching_catalysts == reaction.required_catalysts.len)) - return FALSE - - //All good! - return TRUE + //Our present catalysts should match with our required catalyts + return total_matching_catalysts == reaction.required_catalysts.len /* * Calculates how much we're aiming to create @@ -144,61 +150,29 @@ * Generally an internal proc */ /datum/equilibrium/proc/calculate_yield() - if(!reaction) - stack_trace("Tried to calculate an equlibrium for reaction [reaction.type], but there was no reaction set for the datum") - return FALSE - multiplier = INFINITY for(var/reagent in reaction.required_reagents) - multiplier = min(multiplier, round((holder.get_reagent_amount(reagent) / reaction.required_reagents[reagent]), CHEMICAL_QUANTISATION_LEVEL)) + multiplier = min(multiplier, holder.get_reagent_amount(reagent) / reaction.required_reagents[reagent]) + multiplier = round(multiplier, CHEMICAL_QUANTISATION_LEVEL) + if(!multiplier) //we have no more or very little reagents left + return FALSE - if(!length(reaction.results)) //Incase of no reagent product - product_ratio = 1 + //Incase of no reagent product + if(!length(reaction.results)) step_target_vol = INFINITY for(var/reagent in reaction.required_reagents) step_target_vol = min(step_target_vol, multiplier * reaction.required_reagents[reagent]) - if(step_target_vol == 0 || multiplier == 0) - return FALSE - //Sanity Check - if(step_target_vol == INFINITY || multiplier == INFINITY) //I don't see how this can happen, but I'm not bold enough to let infinities roll around for free - to_delete = TRUE - CRASH("Tried to calculate target vol for [reaction.type] with no products, but could not find required reagents for the reaction. If it got here, something is really broken with the recipe.") return TRUE - product_ratio = 0 + //If we have reagent products step_target_vol = 0 - var/true_reacted_vol //Because volumes can be lost mid reactions + reacted_vol = 0 //Because volumes can be lost mid reactions for(var/product in reaction.results) - step_target_vol += (reaction.results[product]*multiplier) - product_ratio += reaction.results[product] - true_reacted_vol += holder.get_reagent_amount(product) - if(step_target_vol == 0 || multiplier == INFINITY) - return FALSE - target_vol = step_target_vol + true_reacted_vol - reacted_vol = true_reacted_vol + step_target_vol += multiplier * reaction.results[product] + reacted_vol += holder.get_reagent_amount(product) + target_vol = reacted_vol + step_target_vol return TRUE -/* -* Deals with lag - allows a reaction to speed up to 3x from seconds_per_tick -* "Charged" time (time_deficit) discharges by incrementing reactions by doubling them -* If seconds_per_tick is greater than 1.5, then we save the extra time for the next ticks -* -* Arguments: -* * seconds_per_tick - the time between the last proc in world.time -*/ -/datum/equilibrium/proc/deal_with_time(seconds_per_tick) - if(seconds_per_tick > 1) - time_deficit += seconds_per_tick - 1 - seconds_per_tick = 1 //Lets make sure reactions aren't super speedy and blow people up from a big lag spike - else if (time_deficit) - if(time_deficit < 0.25) - seconds_per_tick += time_deficit - time_deficit = 0 - else - seconds_per_tick += 0.25 - time_deficit -= 0.25 - return seconds_per_tick - /* * Main method of checking for explosive - or failed states * Checks overheated() and overly_impure() of a reaction @@ -226,10 +200,29 @@ SSblackbox.record_feedback("tally", "chemical_reaction", 1, "[reaction.type] overly impure reaction steps") reaction.overly_impure(holder, src, step_volume_added) - //did we explode? - if(!holder.my_atom || holder.reagent_list.len == 0) - return FALSE - return TRUE + //did we explode or run out of reagents? + return !QDELETED(holder.my_atom) && holder.reagent_list.len + +/* +* Deals with lag - allows a reaction to speed up to 3x from seconds_per_tick +* "Charged" time (time_deficit) discharges by incrementing reactions by doubling them +* If seconds_per_tick is greater than 1.5, then we save the extra time for the next ticks +* +* Arguments: +* * seconds_per_tick - the time between the last proc in world.time +*/ +/datum/equilibrium/proc/deal_with_time(seconds_per_tick) + if(seconds_per_tick > 1) + time_deficit += seconds_per_tick - 1 + seconds_per_tick = 1 //Lets make sure reactions aren't super speedy and blow people up from a big lag spike + else if (time_deficit) + if(time_deficit < 0.25) + seconds_per_tick += time_deficit + time_deficit = 0 + else + seconds_per_tick += 0.25 + time_deficit -= 0.25 + return seconds_per_tick /* * Main reaction processor - Increments the reaction by a timestep @@ -243,8 +236,7 @@ * * purity_modifier - how much to modify the step's purity by (0 - 1) */ /datum/equilibrium/proc/react_timestep(seconds_per_tick, purity_modifier = 1) - if(to_delete) - //This occurs when it explodes + if(to_delete) //Sanity incase we try to complete a failed reaction return FALSE if(!check_reagent_properties()) //this is first because it'll call explosions first to_delete = TRUE @@ -270,13 +262,13 @@ if (cached_ph < (reaction.optimal_ph_min - reaction.determin_ph_range)) //If we're outside of the deterministic bound delta_ph = 0 //0% purity else //We're in the deterministic phase - delta_ph = (((cached_ph - (reaction.optimal_ph_min - reaction.determin_ph_range))**reaction.ph_exponent_factor)/((reaction.determin_ph_range**reaction.ph_exponent_factor))) //main pH calculation + delta_ph = (((cached_ph - (reaction.optimal_ph_min - reaction.determin_ph_range)) ** reaction.ph_exponent_factor) / ((reaction.determin_ph_range ** reaction.ph_exponent_factor))) //main pH calculation //Upper range else if (cached_ph > reaction.optimal_ph_max) //If we're above of the optimal lower bound if (cached_ph > (reaction.optimal_ph_max + reaction.determin_ph_range)) //If we're outside of the deterministic bound delta_ph = 0 //0% purity else //We're in the deterministic phase - delta_ph = (((- cached_ph + (reaction.optimal_ph_max + reaction.determin_ph_range))**reaction.ph_exponent_factor)/(reaction.determin_ph_range**reaction.ph_exponent_factor))//Reverse - to + to prevent math operation failures. + delta_ph = (((- cached_ph + (reaction.optimal_ph_max + reaction.determin_ph_range)) ** reaction.ph_exponent_factor) / (reaction.determin_ph_range ** reaction.ph_exponent_factor))//Reverse - to + to prevent math operation failures. //This should never proc, but it's a catch incase someone puts in incorrect values else @@ -285,7 +277,7 @@ //Calculate DeltaT (Deviation of T from optimal) if(!reaction.is_cold_recipe) if (cached_temp < reaction.optimal_temp && cached_temp >= reaction.required_temp) - delta_t = (((cached_temp - reaction.required_temp)**reaction.temp_exponent_factor)/((reaction.optimal_temp - reaction.required_temp)**reaction.temp_exponent_factor)) + delta_t = ((cached_temp - reaction.required_temp) / (reaction.optimal_temp - reaction.required_temp)) ** reaction.temp_exponent_factor else if (cached_temp >= reaction.optimal_temp) delta_t = 1 else //too hot @@ -294,7 +286,7 @@ return else if (cached_temp > reaction.optimal_temp && cached_temp <= reaction.required_temp) - delta_t = (((reaction.required_temp - cached_temp)**reaction.temp_exponent_factor)/((reaction.required_temp - reaction.optimal_temp)**reaction.temp_exponent_factor)) + delta_t = ((reaction.required_temp - cached_temp) / (reaction.required_temp - reaction.optimal_temp)) ** reaction.temp_exponent_factor else if (cached_temp <= reaction.optimal_temp) delta_t = 1 else //Too cold @@ -310,7 +302,8 @@ //Catalyst modifier delta_t *= speed_mod - purity = delta_ph//set purity equal to pH offset + //set purity equal to pH offset + purity = delta_ph //Then adjust purity of result with beaker reagent purity. purity *= reactant_purity(reaction) @@ -319,42 +312,49 @@ purity *= purity_modifier //Now we calculate how much to add - this is normalised to the rate up limiter - var/delta_chem_factor = (reaction.rate_up_lim*delta_t)*seconds_per_tick//add/remove factor - var/total_step_added = 0 + var/delta_chem_factor = reaction.rate_up_lim * delta_t * seconds_per_tick//add/remove factor //keep limited if(delta_chem_factor > step_target_vol) delta_chem_factor = step_target_vol - else if (delta_chem_factor < CHEMICAL_QUANTISATION_LEVEL) - delta_chem_factor = CHEMICAL_QUANTISATION_LEVEL //Normalise to multiproducts - delta_chem_factor /= product_ratio - //delta_chem_factor = round(delta_chem_factor, CHEMICAL_QUANTISATION_LEVEL) // Might not be needed - left here incase testmerge shows that it does. Remove before full commit. + delta_chem_factor = round(delta_chem_factor / product_ratio, CHEMICAL_VOLUME_ROUNDING) + if(delta_chem_factor <= 0) + to_delete = TRUE + return //Calculate how much product to make and how much reactant to remove factors.. - for(var/reagent in reaction.required_reagents) - holder.remove_reagent(reagent, (delta_chem_factor * reaction.required_reagents[reagent]), safety = TRUE) + var/required_amount + for(var/datum/reagent/requirement as anything in reaction.required_reagents) + required_amount = reaction.required_reagents[requirement] + if(!holder.remove_reagent(requirement, delta_chem_factor * required_amount)) + to_delete = TRUE + return //Apply pH changes var/pH_adjust if(reaction.reaction_flags & REACTION_PH_VOL_CONSTANT) - pH_adjust = ((delta_chem_factor * reaction.required_reagents[reagent])/target_vol)*(reaction.H_ion_release*h_ion_mod) + pH_adjust = ((delta_chem_factor * required_amount) / target_vol) * (reaction.H_ion_release * h_ion_mod) else //Default adds pH independant of volume - pH_adjust = (delta_chem_factor * reaction.required_reagents[reagent])*(reaction.H_ion_release*h_ion_mod) - holder.adjust_specific_reagent_ph(reagent, pH_adjust) + pH_adjust = (delta_chem_factor * required_amount) * (reaction.H_ion_release * h_ion_mod) + holder.adjust_specific_reagent_ph(requirement, pH_adjust) var/step_add - for(var/product in reaction.results) + var/total_step_added = 0 + for(var/datum/reagent/product as anything in reaction.results) //create the products - step_add = delta_chem_factor * reaction.results[product] - //Default handiling - holder.add_reagent(product, step_add, null, cached_temp, purity, override_base_ph = TRUE) + step_add = holder.add_reagent(product, delta_chem_factor * reaction.results[product], null, cached_temp, purity, override_base_ph = TRUE) + if(!step_add) + to_delete = TRUE + return //Apply pH changes var/pH_adjust if(reaction.reaction_flags & REACTION_PH_VOL_CONSTANT) - pH_adjust = (step_add/target_vol)*(reaction.H_ion_release*h_ion_mod) + pH_adjust = (step_add / target_vol) * (reaction.H_ion_release * h_ion_mod) else - pH_adjust = step_add*(reaction.H_ion_release*h_ion_mod) + pH_adjust = step_add * (reaction.H_ion_release * h_ion_mod) holder.adjust_specific_reagent_ph(product, pH_adjust) + + //record amounts created reacted_vol += step_add total_step_added += step_add @@ -366,11 +366,11 @@ #endif //Apply thermal output of reaction to beaker - if(reaction.reaction_flags & REACTION_HEAT_ARBITARY) - holder.chem_temp += clamp((reaction.thermic_constant* total_step_added*thermic_mod), 0, CHEMICAL_MAXIMUM_TEMPERATURE) //old method - for every bit added, the whole temperature is adjusted - else //Standard mechanics - var/heat_energy = reaction.thermic_constant * total_step_added * thermic_mod * SPECIFIC_HEAT_DEFAULT - holder.adjust_thermal_energy(heat_energy, 0, CHEMICAL_MAXIMUM_TEMPERATURE) //heat is relative to the beaker conditions + var/heat_energy = reaction.thermic_constant * total_step_added * thermic_mod + if(reaction.reaction_flags & REACTION_HEAT_ARBITARY) //old method - for every bit added, the whole temperature is adjusted + holder.set_temperature(clamp(holder.chem_temp + heat_energy, 0, CHEMICAL_MAXIMUM_TEMPERATURE)) + else //Standard mechanics - heat is relative to the beaker conditions + holder.adjust_thermal_energy(heat_energy * SPECIFIC_HEAT_DEFAULT, 0, CHEMICAL_MAXIMUM_TEMPERATURE) //Give a chance of sounds if(prob(5)) @@ -384,34 +384,27 @@ //post reaction checks if(!(check_fail_states(total_step_added))) to_delete = TRUE + return //end reactions faster so plumbing is faster - if((step_add >= step_target_vol) && (length(holder.reaction_list == 1)))//length is so that plumbing is faster - but it doesn't disable competitive reactions. Basically, competitive reactions will likely reach their step target at the start, so this will disable that. We want to avoid that. But equally, we do want to full stop a holder from reacting asap so plumbing isn't waiting an tick to resolve. + //length is so that plumbing is faster - but it doesn't disable competitive reactions. Basically, competitive reactions will likely reach their step target at the start, so this will disable that. We want to avoid that. But equally, we do want to full stop a holder from reacting asap so plumbing isn't waiting an tick to resolve. + if((step_add >= step_target_vol) && (length(holder.reaction_list) == 1)) to_delete = TRUE - holder.update_total()//do NOT recalculate reactions - - /* * Calculates the total sum normalised purity of ALL reagents in a holder -* * Currently calculates it irrespective of required reagents at the start, but this should be changed if this is powergamed to required reagents * It's not currently because overly_impure affects all reagents */ /datum/equilibrium/proc/reactant_purity(datum/chemical_reaction/C) var/list/cached_reagents = holder.reagent_list - var/i = 0 - var/cached_purity - for(var/datum/reagent/reagent as anything in holder.reagent_list) - if (reagent in cached_reagents) - cached_purity += reagent.purity - i++ - if(!i)//I've never seen it get here with 0, but in case - it gets here when it blows up from overheat + + var/num_of_reagents = cached_reagents.len + if(!num_of_reagents)//I've never seen it get here with 0, but in case - it gets here when it blows up from overheat stack_trace("No reactants found mid reaction for [C.type]. Beaker: [holder.my_atom]") return 0 //we exploded and cleared reagents - but lets not kill the process - return cached_purity/i -///Panic stop a reaction - cleanup should be handled by the next timestep -/datum/equilibrium/proc/force_clear_reactive_agents() - for(var/reagent in reaction.required_reagents) - holder.remove_reagent(reagent, (multiplier * reaction.required_reagents[reagent]), safety = 1) + var/cached_purity + for(var/datum/reagent/reagent as anything in cached_reagents) + cached_purity += reagent.purity + return cached_purity / num_of_reagents diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm deleted file mode 100644 index 0d0b62a6686c39..00000000000000 --- a/code/modules/reagents/chemistry/holder.dm +++ /dev/null @@ -1,2148 +0,0 @@ -#define REAGENT_TRANSFER_AMOUNT "amount" -#define REAGENT_PURITY "purity" - -///////////////////////////////Main reagents code///////////////////////////////////////////// - -/// Holder for a bunch of [/datum/reagent] -/datum/reagents - /// The reagents being held - var/list/datum/reagent/reagent_list = new/list() - /// Current volume of all the reagents - var/total_volume = 0 - /// Max volume of this holder - var/maximum_volume = 100 - /// The atom this holder is attached to - var/atom/my_atom = null - /// Current temp of the holder volume - var/chem_temp = 150 - ///pH of the whole system - var/ph = CHEMICAL_NORMAL_PH - /// various flags, see code\__DEFINES\reagents.dm - var/flags - ///list of reactions currently on going, this is a lazylist for optimisation - var/list/datum/equilibrium/reaction_list - ///cached list of reagents typepaths (not object references), this is a lazylist for optimisation - var/list/datum/reagent/previous_reagent_list - ///If a reaction fails due to temperature or pH, this tracks the required temperature or pH for it to be enabled. - var/list/failed_but_capable_reactions - ///Hard check to see if the reagents is presently reacting - var/is_reacting = FALSE - ///UI lookup stuff - ///Keeps the id of the reaction displayed in the ui - var/ui_reaction_id = null - ///Keeps the id of the reagent displayed in the ui - var/ui_reagent_id = null - ///The bitflag of the currently selected tags in the ui - var/ui_tags_selected = NONE - ///What index we're at if we have multiple reactions for a reagent product - var/ui_reaction_index = 1 - ///If we're syncing with the beaker - so return reactions that are actively happening - var/ui_beaker_sync = FALSE - -/datum/reagents/New(maximum = 100, new_flags = 0) - maximum_volume = maximum - flags = new_flags - -/datum/reagents/Destroy() - //We're about to delete all reagents, so lets cleanup - for(var/datum/reagent/reagent as anything in reagent_list) - qdel(reagent) - reagent_list = null - if(is_reacting) //If false, reaction list should be cleaned up - force_stop_reacting() - QDEL_LAZYLIST(reaction_list) - previous_reagent_list = null - if(my_atom && my_atom.reagents == src) - my_atom.reagents = null - my_atom = null - return ..() - -/** - * Adds a reagent to this holder - * - * Arguments: - * * reagent - The reagent id to add - * * amount - Amount to add - * * list/data - Any reagent data for this reagent, used for transferring data with reagents - * * reagtemp - Temperature of this reagent, will be equalized - * * no_react - prevents reactions being triggered by this addition - * * added_purity - override to force a purity when added - * * added_ph - override to force a pH when added - * * override_base_ph - ingore the present pH of the reagent, and instead use the default (i.e. if buffers/reactions alter it) - * * ignore splitting - Don't call the process that handles reagent spliting in a mob (impure/inverse) - generally leave this false unless you care about REAGENTS_DONOTSPLIT flags (see reagent defines) - */ -/datum/reagents/proc/add_reagent( - datum/reagent/reagent_type, - amount, - list/data = null, - reagtemp = DEFAULT_REAGENT_TEMPERATURE, - added_purity = null, - added_ph, - no_react = FALSE, - override_base_ph = FALSE, - ignore_splitting = FALSE -) - if(!ispath(reagent_type)) - stack_trace("invalid reagent passed to add reagent [reagent_type]") - return FALSE - - if(!IS_FINITE(amount)) - stack_trace("non finite amount passed to add reagent [amount] [reagent_type]") - return FALSE - - if(SEND_SIGNAL(src, COMSIG_REAGENTS_PRE_ADD_REAGENT, reagent_type, amount, reagtemp, data, no_react) & COMPONENT_CANCEL_REAGENT_ADD) - return FALSE - - // Prevents small amount problems, as well as zero and below zero amounts. - amount = FLOOR(amount, CHEMICAL_QUANTISATION_LEVEL) - if(amount <= 0) - return FALSE - - var/datum/reagent/glob_reagent = GLOB.chemical_reagents_list[reagent_type] - if(!glob_reagent) - stack_trace("[my_atom] attempted to add a reagent called '[reagent_type]' which doesn't exist. ([usr])") - return FALSE - if(isnull(added_purity)) //Because purity additions can be 0 - added_purity = glob_reagent.creation_purity //Usually 1 - if(!added_ph) - added_ph = glob_reagent.ph - - //Split up the reagent if it's in a mob - var/has_split = FALSE - if(!ignore_splitting && (flags & REAGENT_HOLDER_ALIVE)) //Stomachs are a pain - they will constantly call on_mob_add unless we split on addition to stomachs, but we also want to make sure we don't double split - var/adjusted_vol = FLOOR(process_mob_reagent_purity(glob_reagent, amount, added_purity), CHEMICAL_QUANTISATION_LEVEL) - if(adjusted_vol <= 0) //If we're inverse or FALSE cancel addition - return amount - /* We return true here because of #63301 - The only cases where this will be false or 0 if its an inverse chem, an impure chem of 0 purity (highly unlikely if even possible), or if glob_reagent is null (which shouldn't happen at all as there's a check for that a few lines up), - In the first two cases, we would want to return TRUE so trans_to and other similar methods actually delete the corresponding chemical from the original reagent holder. - */ - amount = adjusted_vol - has_split = TRUE - - update_total() - var/cached_total = total_volume - if(cached_total + amount > maximum_volume) - amount = FLOOR(maximum_volume - cached_total, CHEMICAL_QUANTISATION_LEVEL) //Doesnt fit in. Make it disappear. shouldn't happen. Will happen. - if(amount <= 0) - return FALSE - - var/cached_temp = chem_temp - var/list/cached_reagents = reagent_list - - //Equalize temperature - Not using specific_heat() because the new chemical isn't in yet. - var/old_heat_capacity = 0 - if(reagtemp != cached_temp) - for(var/datum/reagent/iter_reagent as anything in cached_reagents) - old_heat_capacity += iter_reagent.specific_heat * iter_reagent.volume - - //add the reagent to the existing if it exists - for(var/datum/reagent/iter_reagent as anything in cached_reagents) - if(iter_reagent.type == reagent_type) - if(override_base_ph) - added_ph = iter_reagent.ph - iter_reagent.purity = ((iter_reagent.creation_purity * iter_reagent.volume) + (added_purity * amount)) /(iter_reagent.volume + amount) //This should add the purity to the product - iter_reagent.creation_purity = iter_reagent.purity - iter_reagent.ph = ((iter_reagent.ph*(iter_reagent.volume))+(added_ph*amount))/(iter_reagent.volume+amount) - iter_reagent.volume = FLOOR(iter_reagent.volume + amount, CHEMICAL_QUANTISATION_LEVEL) - update_total() - - iter_reagent.on_merge(data, amount) - if(reagtemp != cached_temp) - var/new_heat_capacity = heat_capacity() - if(new_heat_capacity) - set_temperature(((old_heat_capacity * cached_temp) + (iter_reagent.specific_heat * amount * reagtemp)) / new_heat_capacity) - else - set_temperature(reagtemp) - - SEND_SIGNAL(src, COMSIG_REAGENTS_ADD_REAGENT, iter_reagent, amount, reagtemp, data, no_react) - if(!no_react && !is_reacting) //To reduce the amount of calculations for a reaction the reaction list is only updated on a reagents addition. - handle_reactions() - return amount - - //otherwise make a new one - var/datum/reagent/new_reagent = new reagent_type(data) - cached_reagents += new_reagent - new_reagent.holder = src - new_reagent.volume = amount - new_reagent.purity = added_purity - new_reagent.creation_purity = added_purity - new_reagent.ph = added_ph - new_reagent.on_new(data) - - if(isliving(my_atom)) - new_reagent.on_mob_add(my_atom, amount) //Must occur before it could posibly run on_mob_delete - - if(has_split) //prevent it from splitting again - new_reagent.chemical_flags |= REAGENT_DONOTSPLIT - - update_total() - if(reagtemp != cached_temp) - var/new_heat_capacity = heat_capacity() - if(new_heat_capacity) - set_temperature(((old_heat_capacity * cached_temp) + (new_reagent.specific_heat * amount * reagtemp)) / new_heat_capacity) - else - set_temperature(reagtemp) - - SEND_SIGNAL(src, COMSIG_REAGENTS_NEW_REAGENT, new_reagent, amount, reagtemp, data, no_react) - if(!no_react) - handle_reactions() - return amount - -/** - * Like add_reagent but you can enter a list. - * Arguments - * - * * [list_reagents][list] - list to add. Format it like this: list(/datum/reagent/toxin = 10, "beer" = 15) - * * [data][list] - additional data to add - */ -/datum/reagents/proc/add_reagent_list(list/list_reagents, list/data = null) - for(var/r_id in list_reagents) - var/amt = list_reagents[r_id] - add_reagent(r_id, amt, data) - - -/** - * Removes a specific reagent. can supress reactions if needed - * Arguments - * - * * [reagent_type][datum/reagent] - the type of reagent - * * amount - the volume to remove - * * safety - if FALSE will initiate reactions upon removing. used for trans_id_to - */ -/datum/reagents/proc/remove_reagent(datum/reagent/reagent_type, amount, safety = TRUE) - if(!ispath(reagent_type)) - stack_trace("invalid reagent passed to remove reagent [reagent_type]") - return FALSE - - if(!IS_FINITE(amount)) - stack_trace("non finite amount passed to remove reagent [amount] [reagent_type]") - return FALSE - - // Prevents small amount problems, as well as zero and below zero amounts. - amount = FLOOR(amount, CHEMICAL_QUANTISATION_LEVEL) - if(amount <= 0) - return FALSE - - var/list/cached_reagents = reagent_list - for(var/datum/reagent/cached_reagent as anything in cached_reagents) - if(cached_reagent.type == reagent_type) - cached_reagent.volume = FLOOR(max(cached_reagent.volume - amount, 0), CHEMICAL_QUANTISATION_LEVEL) - update_total() - if(!safety)//So it does not handle reactions when it need not to - handle_reactions() - SEND_SIGNAL(src, COMSIG_REAGENTS_REM_REAGENT, QDELING(cached_reagent) ? reagent_type : cached_reagent, amount) - - return TRUE - return FALSE - -/** - * Removes a reagent at random by the specified amount - * Arguments - * - * * amount- the volume to remove - */ -/datum/reagents/proc/remove_any(amount = 1) - if(!IS_FINITE(amount)) - stack_trace("non finite amount passed to remove any reagent [amount]") - return FALSE - - amount = FLOOR(amount, CHEMICAL_QUANTISATION_LEVEL) - if(amount <= 0) - return FALSE - - var/list/cached_reagents = reagent_list - var/total_removed = 0 - var/current_list_element = 1 - var/initial_list_length = cached_reagents.len //stored here because removing can cause some reagents to be deleted, ergo length change. - - current_list_element = rand(1, cached_reagents.len) - - while(total_removed != amount) - if(total_removed >= amount) - break - if(total_volume <= 0 || !cached_reagents.len) - break - - if(current_list_element > cached_reagents.len) - current_list_element = 1 - - var/datum/reagent/target_holder = cached_reagents[current_list_element] - var/remove_amt = min(amount - total_removed, round(amount / rand(2, initial_list_length), round(amount / 10, 0.01))) //double round to keep it at a somewhat even spread relative to amount without getting funky numbers. - //min ensures we don't go over amount. - remove_reagent(target_holder.type, remove_amt) - - current_list_element++ - total_removed += remove_amt - update_total() - - handle_reactions() - return total_removed //this should be amount unless the loop is prematurely broken, in which case it'll be lower. It shouldn't ever go OVER amount. - -/** - * Removes all reagents by an amount equal to - * [amount specified] / total volume present in this holder - * Arguments - * - * * amount - the volume of each reagent - */ - -/datum/reagents/proc/remove_all(amount = 1) - if(!total_volume) - return FALSE - - if(!IS_FINITE(amount)) - stack_trace("non finite amount passed to remove all reagents [amount]") - return FALSE - - // Prevents small amount problems, as well as zero and below zero amounts. - amount = FLOOR(amount, CHEMICAL_QUANTISATION_LEVEL) - if(amount <= 0) - return FALSE - - var/list/cached_reagents = reagent_list - var/part = amount / total_volume - var/remove_amount - var/removed_amount = 0 - - for(var/datum/reagent/reagent as anything in cached_reagents) - remove_amount = FLOOR(reagent.volume * part, CHEMICAL_QUANTISATION_LEVEL) - remove_reagent(reagent.type, remove_amount) - removed_amount += remove_amount - - handle_reactions() - return removed_amount - -/** - * Removes all reagent of X type - * Arguments - * - * * [reagent_type][datum/reagent] - the reagent typepath we are trying to remove - * * amount - the volume of reagent to remove - * * strict - If TRUE will also remove childs of this reagent type - */ -/datum/reagents/proc/remove_all_type(datum/reagent/reagent_type, amount, strict = 0, safety = 1) - if(!ispath(reagent_type)) - stack_trace("invalid reagent path passed to remove all type [reagent_type]") - return FALSE - - if(!IS_FINITE(amount)) - stack_trace("non finite amount passed to remove all type reagent [amount] [reagent_type]") - return FALSE - - // Prevents small amount problems, as well as zero and below zero amounts. - amount = FLOOR(amount, CHEMICAL_QUANTISATION_LEVEL) - if(amount <= 0) - return FALSE - - var/list/cached_reagents = reagent_list - var/has_removed_reagent = 0 - - for(var/datum/reagent/reagent as anything in cached_reagents) - var/matches = 0 - // Switch between how we check the reagent type - if(strict) - if(reagent.type == reagent_type) - matches = 1 - else - if(istype(reagent, reagent_type)) - matches = 1 - // We found a match, proceed to remove the reagent. Keep looping, we might find other reagents of the same type. - if(matches) - // Have our other proc handle removement - has_removed_reagent = remove_reagent(reagent.type, amount, safety) - - return has_removed_reagent - -/** - * Removes an specific reagent from this holder - * Arguments - * - * * [target_reagent_typepath][datum/reagent] - type typepath of the reagent to remove - */ -/datum/reagents/proc/del_reagent(datum/reagent/target_reagent_typepath) - if(!ispath(target_reagent_typepath)) - stack_trace("invalid reagent path passed to del reagent [target_reagent_typepath]") - return FALSE - - //setting the volume to 0 will allow update_total() to clear it up for us - var/list/cached_reagents = reagent_list - for(var/datum/reagent/reagent as anything in cached_reagents) - if(reagent.type == target_reagent_typepath) - reagent.volume = 0 - update_total() - return TRUE - - return FALSE - -/** - * Turn one reagent into another, preserving volume, temp, purity, ph - * Arguments - * - * * [source_reagent_typepath][/datum/reagent] - the typepath of the reagent you are trying to convert - * * [target_reagent_typepath][/datum/reagent] - the final typepath the source_reagent_typepath will be converted into - * * multiplier - the multiplier applied on the source_reagent_typepath volume before converting - * * include_source_subtypes- if TRUE will convert all subtypes of source_reagent_typepath into target_reagent_typepath as well - */ -/datum/reagents/proc/convert_reagent( - datum/reagent/source_reagent_typepath, - datum/reagent/target_reagent_typepath, - multiplier = 1, - include_source_subtypes = FALSE -) - if(!ispath(source_reagent_typepath)) - stack_trace("invalid reagent path passed to convert reagent [source_reagent_typepath]") - return FALSE - - var/reagent_amount - var/reagent_purity - var/reagent_ph - if(include_source_subtypes) - reagent_ph = ph - var/weighted_purity - var/list/reagent_type_list = typecacheof(source_reagent_typepath) - for(var/datum/reagent/reagent as anything in reagent_list) - if(reagent.type in reagent_type_list) - weighted_purity += reagent.volume * reagent.purity - reagent_amount += reagent.volume - remove_reagent(reagent.type, reagent.volume * multiplier) - reagent_purity = weighted_purity / reagent_amount - else - var/datum/reagent/source_reagent = get_reagent(source_reagent_typepath) - reagent_amount = source_reagent.volume - reagent_purity = source_reagent.purity - reagent_ph = source_reagent.ph - remove_reagent(source_reagent_typepath, reagent_amount) - add_reagent(target_reagent_typepath, reagent_amount * multiplier, reagtemp = chem_temp, added_purity = reagent_purity, added_ph = reagent_ph) - -/// Removes all reagents -/datum/reagents/proc/clear_reagents() - var/list/cached_reagents = reagent_list - - //setting volume to 0 will allow update_total() to clean it up - for(var/datum/reagent/reagent as anything in cached_reagents) - reagent.volume = 0 - update_total() - - SEND_SIGNAL(src, COMSIG_REAGENTS_CLEAR_REAGENTS) - -/** - * Check if this holder contains this reagent. Reagent takes a PATH to a reagent - * Needs matabolizing takes into consideration if the chemical is metabolizing when it's checked. - * Arguments - * - * * [target_reagent][datum/reagent] - the reagent typepath to check for - * * amount - checks for having a specific amount of that chemical - * * needs_metabolizing - takes into consideration if the chemical is matabolizing when it's checked. - * * check_subtypes - controls whether it should it should also include subtypes: ispath(type, reagent) versus type == reagent. - */ -/datum/reagents/proc/has_reagent( - datum/reagent/target_reagent, - amount = -1, - needs_metabolizing = FALSE, - check_subtypes = FALSE -) - if(!ispath(target_reagent)) - stack_trace("invalid reagent path passed to has reagent [target_reagent]") - return FALSE - - var/list/cached_reagents = reagent_list - for(var/datum/reagent/holder_reagent as anything in cached_reagents) - if (check_subtypes ? ispath(holder_reagent.type, target_reagent) : holder_reagent.type == target_reagent) - if(!amount) - if(needs_metabolizing && !holder_reagent.metabolizing) - if(check_subtypes) - continue - return FALSE - return holder_reagent - else - if(holder_reagent.volume >= amount) - if(needs_metabolizing && !holder_reagent.metabolizing) - if(check_subtypes) - continue - return FALSE - return holder_reagent - else if(!check_subtypes) - return FALSE - return FALSE - -/** - * Check if this holder contains a reagent with a chemical_flags containing this flag - * Reagent takes the bitflag to search for - * - * Arguments - * * chemical_flag - the flag to check for - * * amount - checks for having a specific amount of reagents matching that chemical - */ -/datum/reagents/proc/has_chemical_flag(chemical_flag, amount = 0) - var/found_amount = 0 - var/list/cached_reagents = reagent_list - for(var/datum/reagent/holder_reagent as anything in cached_reagents) - if (holder_reagent.chemical_flags & chemical_flag) - found_amount += holder_reagent.volume - if(found_amount >= amount) - return TRUE - return FALSE - - -/** - * Transfer some stuff from this holder to a target object - * - * Arguments: - * * obj/target - Target to attempt transfer to - * * amount - amount of reagent volume to transfer - * * multiplier - multiplies each reagent amount by this number well byond their available volume before transfering. used to create reagents from thin air if you ever need to - * * preserve_data - if preserve_data=0, the reagents data will be lost. Usefull if you use data for some strange stuff and don't want it to be transferred. - * * no_react - passed through to [/datum/reagents/proc/add_reagent] - * * mob/transferred_by - used for logging - * * remove_blacklisted - skips transferring of reagents without REAGENT_CAN_BE_SYNTHESIZED in chemical_flags - * * methods - passed through to [/datum/reagents/proc/expose_multiple] and [/datum/reagent/proc/on_transfer] - * * show_message - passed through to [/datum/reagents/proc/expose_multiple] - * * ignore_stomach - when using methods INGEST will not use the stomach as the target - */ -/datum/reagents/proc/trans_to( - obj/target, - amount = 1, - multiplier = 1, - preserve_data = TRUE, - no_react = FALSE, - mob/transferred_by, - remove_blacklisted = FALSE, - methods = NONE, - show_message = TRUE, - ignore_stomach = FALSE -) - if(QDELETED(target) || !total_volume) - return - - if(!IS_FINITE(amount)) - stack_trace("non finite amount passed to trans_to [amount] amount of reagents") - return FALSE - - var/list/cached_reagents = reagent_list - - var/atom/target_atom - var/datum/reagents/target_holder - if(istype(target, /datum/reagents)) - target_holder = target - target_atom = target_holder.my_atom - else - if(!ignore_stomach && (methods & INGEST) && iscarbon(target)) - var/mob/living/carbon/eater = target - var/obj/item/organ/internal/stomach/belly = eater.get_organ_slot(ORGAN_SLOT_STOMACH) - if(!belly) - var/expel_amount = FLOOR(amount, CHEMICAL_QUANTISATION_LEVEL) - if(expel_amount > 0 ) - eater.expel_ingested(my_atom, expel_amount) - return - target_holder = belly.reagents - target_atom = belly - else if(!target.reagents) - return - else - target_holder = target.reagents - target_atom = target - - var/cached_amount = amount - - // Prevents small amount problems, as well as zero and below zero amounts. - amount = FLOOR(min(amount, total_volume, target_holder.maximum_volume - target_holder.total_volume), CHEMICAL_QUANTISATION_LEVEL) - if(amount <= 0) - return FALSE - - //Set up new reagents to inherit the old ongoing reactions - if(!no_react) - transfer_reactions(target_holder) - - var/trans_data = null - var/list/transfer_log = list() - var/list/r_to_send = list() // Validated list of reagents to be exposed - var/list/reagents_to_remove = list() - - var/part = amount / total_volume - var/transfer_amount - var/transfered_amount - var/total_transfered_amount = 0 - - //first add reagents to target - for(var/datum/reagent/reagent as anything in cached_reagents) - if(remove_blacklisted && !(reagent.chemical_flags & REAGENT_CAN_BE_SYNTHESIZED)) - continue - if(preserve_data) - trans_data = copy_data(reagent) - if(reagent.intercept_reagents_transfer(target_holder, cached_amount)) - continue - transfer_amount = reagent.volume * part - transfered_amount = target_holder.add_reagent(reagent.type, transfer_amount * multiplier, trans_data, chem_temp, reagent.purity, reagent.ph, no_react = TRUE, ignore_splitting = reagent.chemical_flags & REAGENT_DONOTSPLIT) //we only handle reaction after every reagent has been transferred. - if(!transfered_amount) - continue - if(methods) - r_to_send += reagent - reagents_to_remove += list(list("R" = reagent, "T" = transfer_amount)) - total_transfered_amount += transfered_amount - - //expose target to reagent changes - target_holder.expose_multiple(r_to_send, isorgan(target_atom) ? target : target_atom, methods, part, show_message) - - //remove chemicals that were added above - for(var/list/data as anything in reagents_to_remove) - var/datum/reagent/reagent = data["R"] - transfer_amount = data["T"] - if(methods) - reagent.on_transfer(target_atom, methods, transfer_amount) - remove_reagent(reagent.type, transfer_amount) - transfer_log[reagent.type] = list(REAGENT_TRANSFER_AMOUNT = transfer_amount, REAGENT_PURITY = reagent.purity) - - if(transferred_by && target_atom) - target_atom.add_hiddenprint(transferred_by) //log prints so admins can figure out who touched it last. - log_combat(transferred_by, target_atom, "transferred reagents ([get_external_reagent_log_string(transfer_log)]) from [my_atom] to") - - update_total() - target_holder.update_total() - if(!no_react) - target_holder.handle_reactions() - src.handle_reactions() - return FLOOR(total_transfered_amount, CHEMICAL_QUANTISATION_LEVEL) - -/** - * Transfer a specific reagent id to the target object - * Arguments - * - * * [target][obj] - the target to transfer reagents to - * * [reagent_type][datum/reagent] - the type of reagent to transfer to the target - * * amount - volume to transfer - * * preserve_data- if TRUE reagent user data will remain preserved - */ -/datum/reagents/proc/trans_id_to( - obj/target, - datum/reagent/reagent_type, - amount = 1, - preserve_data = 1 -) - if (QDELETED(target) || !total_volume) - return - - if(!IS_FINITE(amount)) - stack_trace("non finite amount passed to trans_id_to [amount] [reagent_type]") - return FALSE - - var/cached_amount = amount - - var/available_volume = get_reagent_amount(reagent_type) - var/datum/reagents/holder - if(istype(target, /datum/reagents)) - holder = target - else if(target.reagents && available_volume) - holder = target.reagents - else - return - - // Prevents small amount problems, as well as zero and below zero amounts. - amount = FLOOR(min(amount, available_volume, holder.maximum_volume - holder.total_volume), CHEMICAL_QUANTISATION_LEVEL) - if(amount <= 0) - return - - var/list/cached_reagents = reagent_list - - var/trans_data = null - for (var/looping_through_reagents in cached_reagents) - var/datum/reagent/current_reagent = looping_through_reagents - if(current_reagent.type == reagent_type) - if(preserve_data) - trans_data = current_reagent.data - if(current_reagent.intercept_reagents_transfer(holder, cached_amount))//Use input amount instead. - break - force_stop_reagent_reacting(current_reagent) - holder.add_reagent(current_reagent.type, amount, trans_data, chem_temp, current_reagent.purity, current_reagent.ph, no_react = TRUE, ignore_splitting = current_reagent.chemical_flags & REAGENT_DONOTSPLIT) - remove_reagent(current_reagent.type, amount, 1) - break - - update_total() - holder.update_total() - holder.handle_reactions() - return amount - -/** - * Copies the reagents to the target object - * Arguments - * - * * [target][obj] - the target to transfer reagents to - * * multiplier - multiplies each reagent amount by this number well byond their available volume before transfering. used to create reagents from thin air if you ever need to - * * preserve_data - preserve user data of all reagents after transfering - * * no_react - if TRUE will not handle reactions - */ -/datum/reagents/proc/copy_to( - atom/target, - amount = 1, - multiplier = 1, - preserve_data = TRUE, - no_react = FALSE -) - if(QDELETED(target) || !total_volume) - return - - if(!IS_FINITE(amount)) - stack_trace("non finite amount passed to copy_to [amount] amount of reagents") - return FALSE - - var/datum/reagents/target_holder - if(istype(target, /datum/reagents)) - target_holder = target - else - if(!target.reagents) - return - target_holder = target.reagents - - // Prevents small amount problems, as well as zero and below zero amounts. - amount = FLOOR(min(amount, total_volume, target_holder.maximum_volume - target_holder.total_volume), CHEMICAL_QUANTISATION_LEVEL) - if(amount <= 0) - return - - var/list/cached_reagents = reagent_list - var/part = amount / total_volume - var/transfer_amount - var/transfered_amount = 0 - var/total_transfered_amount = 0 - var/trans_data = null - - for(var/datum/reagent/reagent as anything in cached_reagents) - transfer_amount = reagent.volume * part * multiplier - if(preserve_data) - trans_data = reagent.data - transfered_amount = target_holder.add_reagent(reagent.type, transfer_amount, trans_data, chem_temp, reagent.purity, reagent.ph, no_react = TRUE, ignore_splitting = reagent.chemical_flags & REAGENT_DONOTSPLIT) - if(!transfered_amount) - continue - total_transfered_amount += transfered_amount - - if(!no_react) - // pass over previous ongoing reactions before handle_reactions is called - transfer_reactions(target_holder) - - target_holder.update_total() - target_holder.handle_reactions() - - return FLOOR(total_transfered_amount, CHEMICAL_QUANTISATION_LEVEL) - -/** - * Multiplies the reagents inside this holder by a specific amount - * Arguments - * * multiplier - the amount to multiply each reagent by - */ -/datum/reagents/proc/multiply_reagents(multiplier = 1) - var/list/cached_reagents = reagent_list - if(!total_volume) - return - var/change = (multiplier - 1) //Get the % change - for(var/datum/reagent/reagent as anything in cached_reagents) - if(change > 0) - add_reagent(reagent.type, reagent.volume * change, added_purity = reagent.purity, ignore_splitting = reagent.chemical_flags & REAGENT_DONOTSPLIT) - else - remove_reagent(reagent.type, abs(reagent.volume * change)) //absolute value to prevent a double negative situation (removing -50% would be adding 50%) - - update_total() - handle_reactions() - - -/// Get the name of the reagent there is the most of in this holder -/datum/reagents/proc/get_master_reagent_name() - var/list/cached_reagents = reagent_list - var/name - var/max_volume = 0 - for(var/datum/reagent/reagent as anything in cached_reagents) - if(reagent.volume > max_volume) - max_volume = reagent.volume - name = reagent.name - - return name - -/// Get the id of the reagent there is the most of in this holder -/datum/reagents/proc/get_master_reagent_id() - var/list/cached_reagents = reagent_list - var/max_type - var/max_volume = 0 - for(var/datum/reagent/reagent as anything in cached_reagents) - if(reagent.volume > max_volume) - max_volume = reagent.volume - max_type = reagent.type - - return max_type - -/// Get a reference to the reagent there is the most of in this holder -/datum/reagents/proc/get_master_reagent() - var/list/cached_reagents = reagent_list - var/datum/reagent/master - var/max_volume = 0 - for(var/datum/reagent/reagent as anything in cached_reagents) - if(reagent.volume > max_volume) - max_volume = reagent.volume - master = reagent - - return master -/* MOB/CARBON RELATED PROCS */ - -/** - * Triggers metabolizing for all the reagents in this holder - * - * Arguments: - * * mob/living/carbon/carbon - The mob to metabolize in, if null it uses [/datum/reagents/var/my_atom] - * * seconds_per_tick - the time in server seconds between proc calls (when performing normally it will be 2) - * * times_fired - the number of times the owner's life() tick has been called aka The number of times SSmobs has fired - * * can_overdose - Allows overdosing - * * liverless - Stops reagents that aren't set as [/datum/reagent/var/self_consuming] from metabolizing - */ -/datum/reagents/proc/metabolize(mob/living/carbon/owner, seconds_per_tick, times_fired, can_overdose = FALSE, liverless = FALSE, dead = FALSE) - var/list/cached_reagents = reagent_list - if(owner) - expose_temperature(owner.bodytemperature, 0.25) - - var/need_mob_update = FALSE - var/obj/item/organ/internal/stomach/belly = owner.get_organ_slot(ORGAN_SLOT_STOMACH) - var/obj/item/organ/internal/liver/liver = owner.get_organ_slot(ORGAN_SLOT_LIVER) - var/liver_tolerance - if(liver) - var/liver_health_percent = (liver.maxHealth - liver.damage) / liver.maxHealth - liver_tolerance = liver.toxTolerance * liver_health_percent - - for(var/datum/reagent/reagent as anything in cached_reagents) - // skip metabolizing effects for small units of toxins - if(istype(reagent, /datum/reagent/toxin) && liver && !dead) - var/datum/reagent/toxin/toxin = reagent - var/amount = toxin.volume - if(belly) - amount = FLOOR(amount + belly.reagents.get_reagent_amount(toxin.type), CHEMICAL_QUANTISATION_LEVEL) - - if(amount <= liver_tolerance) - owner.reagents.remove_reagent(toxin.type, toxin.metabolization_rate * owner.metabolism_efficiency * seconds_per_tick) - continue - - need_mob_update += metabolize_reagent(owner, reagent, seconds_per_tick, times_fired, can_overdose, liverless, dead) - - if(owner && need_mob_update) //some of the metabolized reagents had effects on the mob that requires some updates. - owner.updatehealth() - update_total() - -/* - * Metabolises a single reagent for a target owner carbon mob. See above. - * - * Arguments: - * * mob/living/carbon/owner - The mob to metabolize in, if null it uses [/datum/reagents/var/my_atom] - * * seconds_per_tick - the time in server seconds between proc calls (when performing normally it will be 2) - * * times_fired - the number of times the owner's life() tick has been called aka The number of times SSmobs has fired - * * can_overdose - Allows overdosing - * * liverless - Stops reagents that aren't set as [/datum/reagent/var/self_consuming] from metabolizing - */ -/datum/reagents/proc/metabolize_reagent(mob/living/carbon/owner, datum/reagent/reagent, seconds_per_tick, times_fired, can_overdose = FALSE, liverless = FALSE, dead = FALSE) - var/need_mob_update = FALSE - if(QDELETED(reagent.holder)) - return FALSE - - if(!owner) - owner = reagent.holder.my_atom - - //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - //Check if this mob's species is set and can process this type of reagent - var/can_process = FALSE - //If we somehow avoided getting a species or reagent_flags set, we'll assume we aren't meant to process ANY reagents - if(H.dna && H.dna.species.reagent_flags) - var/owner_flags = H.dna.species.reagent_flags - if((reagent.process_flags & REAGENT_SYNTHETIC) && (owner_flags & PROCESS_SYNTHETIC)) //SYNTHETIC-oriented reagents require PROCESS_SYNTHETIC - can_process = TRUE - if((reagent.process_flags & REAGENT_ORGANIC) && (owner_flags & PROCESS_ORGANIC)) //ORGANIC-oriented reagents require PROCESS_ORGANIC - can_process = TRUE - - //If the mob can't process it, remove the reagent at it's normal rate without doing any addictions, overdoses, or on_mob_life() for the reagent - if(!can_process) - reagent.holder.remove_reagent(reagent.type, reagent.metabolization_rate) - return - //We'll assume that non-human mobs lack the ability to process synthetic-oriented reagents (adjust this if we need to change that assumption) - else - if(reagent.process_flags == REAGENT_SYNTHETIC) - reagent.holder.remove_reagent(reagent.type, reagent.metabolization_rate) - return - //SKYRAT EDIT ADDITION END - - if(owner && reagent && (!dead || (reagent.chemical_flags & REAGENT_DEAD_PROCESS))) - if(owner.reagent_check(reagent, seconds_per_tick, times_fired)) - return - if(liverless && !reagent.self_consuming) //need to be metabolized - return - if(!reagent.metabolizing) - reagent.metabolizing = TRUE - reagent.on_mob_metabolize(owner) - if(can_overdose) - if(reagent.overdose_threshold) - if(reagent.volume >= reagent.overdose_threshold && !reagent.overdosed) - reagent.overdosed = TRUE - need_mob_update += reagent.overdose_start(owner) - owner.log_message("has started overdosing on [reagent.name] at [reagent.volume] units.", LOG_GAME) - for(var/addiction in reagent.addiction_types) - owner.mind?.add_addiction_points(addiction, reagent.addiction_types[addiction] * REAGENTS_METABOLISM) - - if(reagent.overdosed) - need_mob_update += reagent.overdose_process(owner, seconds_per_tick, times_fired) - if(!dead) - need_mob_update += reagent.on_mob_life(owner, seconds_per_tick, times_fired) - if(dead) - need_mob_update += reagent.on_mob_dead(owner, seconds_per_tick) - return need_mob_update - -/** - * Signals that metabolization has stopped, triggering the end of trait-based effects - * Arguments - * - * * [C][mob/living/carbon] - the mob to end metabolization on - * * keep_liverless - if true will work without a liver - */ -/datum/reagents/proc/end_metabolization(mob/living/carbon/C, keep_liverless = TRUE) - var/list/cached_reagents = reagent_list - for(var/datum/reagent/reagent as anything in cached_reagents) - if(QDELETED(reagent.holder)) - continue - if(keep_liverless && reagent.self_consuming) //Will keep working without a liver - continue - if(!C) - C = reagent.holder.my_atom - if(reagent.metabolizing) - reagent.metabolizing = FALSE - reagent.on_mob_end_metabolize(C) - -/*Processes the reagents in the holder and converts them, only called in a mob/living/carbon on addition -* -* Arguments: -* * reagent - the added reagent datum/object -* * added_volume - the volume of the reagent that was added (since it can already exist in a mob) -* * added_purity - the purity of the added volume -* returns the volume of the original, pure, reagent to add / keep -*/ -/datum/reagents/proc/process_mob_reagent_purity(datum/reagent/reagent, added_volume, added_purity) - if(!reagent) - stack_trace("Attempted to process a mob's reagent purity for a null reagent!") - return FALSE - if(added_purity == 1) - return added_volume - if(reagent.chemical_flags & REAGENT_DONOTSPLIT) - return added_volume - if(added_purity < 0) - stack_trace("Purity below 0 for chem on mob splitting: [reagent.type]!") - added_purity = 0 - - if((reagent.inverse_chem_val > added_purity) && (reagent.inverse_chem))//Turns all of a added reagent into the inverse chem - add_reagent(reagent.inverse_chem, added_volume, FALSE, added_purity = reagent.get_inverse_purity(reagent.creation_purity)) - var/datum/reagent/inverse_reagent = has_reagent(reagent.inverse_chem) - if(inverse_reagent.chemical_flags & REAGENT_SNEAKYNAME) - inverse_reagent.name = reagent.name//Negative effects are hidden - return FALSE //prevent addition - return added_volume - -/** - * Processes any chems that have the REAGENT_IGNORE_STASIS bitflag ONLY - * Arguments - * - * * [owner][mob/living/carbon] - the mob we are doing stasis handlng on - * * seconds_per_tick - passed from process - * * times_fired - number of times to metabolize this reagent - */ -/datum/reagents/proc/handle_stasis_chems(mob/living/carbon/owner, seconds_per_tick, times_fired) - var/need_mob_update = FALSE - for(var/datum/reagent/reagent as anything in reagent_list) - if(!(reagent.chemical_flags & REAGENT_IGNORE_STASIS)) - continue - need_mob_update += metabolize_reagent(owner, reagent, seconds_per_tick, times_fired, can_overdose = TRUE) - if(owner && need_mob_update) //some of the metabolized reagents had effects on the mob that requires some updates. - owner.updatehealth() - update_total() - -/** - * Calls [/datum/reagent/proc/on_update] on every reagent in this holder - * - * Arguments: - * * atom/A - passed to on_update - */ -/datum/reagents/proc/conditional_update(atom/A) - var/list/cached_reagents = reagent_list - for(var/datum/reagent/reagent as anything in cached_reagents) - reagent.on_update(A) - update_total() - -/// Handle any reactions possible in this holder -/// Also UPDATES the reaction list -/// High potential for infinite loopsa if you're editing this. -/datum/reagents/proc/handle_reactions() - if(QDELING(src)) - CRASH("[my_atom] is trying to handle reactions while being flagged for deletion. It presently has [length(reagent_list)] number of reactants in it. If that is over 0 then something terrible happened.") - - if(!length(reagent_list))//The liver is calling this method a lot, and is often empty of reagents so it's pointless busywork. It should be an easy fix, but I'm nervous about touching things beyond scope. Also since everything is so handle_reactions() trigger happy it might be a good idea having this check anyways. - return FALSE - - if(flags & NO_REACT) - if(is_reacting) - force_stop_reacting() //Force anything that is trying to to stop - return FALSE //Yup, no reactions here. No siree. - - if(is_reacting)//Prevent wasteful calculations - if(!(datum_flags & DF_ISPROCESSING))//If we're reacting - but not processing (i.e. we've transferred) - START_PROCESSING(SSreagents, src) - if(!(has_changed_state())) - return FALSE - -#ifndef UNIT_TESTS - // We assert that reagents will not need to react before the map is fully loaded - // This is the best I can do, sorry :( - if(!MC_RUNNING()) - return FALSE -#endif - - var/list/cached_reagents = reagent_list - var/list/cached_reactions = GLOB.chemical_reactions_list_reactant_index - var/datum/cached_my_atom = my_atom - LAZYNULL(failed_but_capable_reactions) - LAZYNULL(previous_reagent_list) - - . = 0 - var/list/possible_reactions = list() - for(var/datum/reagent/reagent as anything in cached_reagents) - LAZYADD(previous_reagent_list, reagent.type) - // I am SO sorry - reaction_loop: - for(var/datum/chemical_reaction/reaction as anything in cached_reactions[reagent.type]) // Was a big list but now it should be smaller since we filtered it with our reagent id - if(!reaction) - continue - - if(!reaction.required_reagents)//Don't bring in empty ones - continue - - var/granularity = 1 - if(!(reaction.reaction_flags & REACTION_INSTANT)) - granularity = CHEMICAL_QUANTISATION_LEVEL - - var/list/cached_required_reagents = reaction.required_reagents - for(var/req_reagent in cached_required_reagents) - if(!has_reagent(req_reagent, (cached_required_reagents[req_reagent] * granularity))) - continue reaction_loop - - var/list/cached_required_catalysts = reaction.required_catalysts - for(var/_catalyst in cached_required_catalysts) - if(!has_reagent(_catalyst, (cached_required_catalysts[_catalyst] * granularity))) - continue reaction_loop - - if(cached_my_atom) - if(reaction.required_container) - if(reaction.required_container_accepts_subtypes && !istype(cached_my_atom, reaction.required_container)) - continue - else if(cached_my_atom.type != reaction.required_container) - continue - - if(isliving(cached_my_atom) && !reaction.mob_react) //Makes it so certain chemical reactions don't occur in mobs - continue - - else if(reaction.required_container) - continue - - if(reaction.required_other && !reaction.pre_reaction_other_checks(src)) - continue - - // At this point, we've passed all the hard restrictions and entered into just the soft ones - // So we're gonna start tracking reactions that COULD be completed on continue, instead of just exiting - var/required_temp = reaction.required_temp - var/is_cold_recipe = reaction.is_cold_recipe - if(required_temp != 0 && (is_cold_recipe && chem_temp > required_temp) || (!is_cold_recipe && chem_temp < required_temp)) - LAZYADD(failed_but_capable_reactions, reaction) - continue - - if(ph < reaction.optimal_ph_min - reaction.determin_ph_range && ph > reaction.optimal_ph_max + reaction.determin_ph_range) - LAZYADD(failed_but_capable_reactions, reaction) - continue - - possible_reactions += reaction - - //This is the point where we have all the possible reactions from a reagent/catalyst point of view, so we set up the reaction list - for(var/datum/chemical_reaction/selected_reaction as anything in possible_reactions) - if((selected_reaction.reaction_flags & REACTION_INSTANT) || (flags & REAGENT_HOLDER_INSTANT_REACT)) //If we have instant reactions, we process them here - instant_react(selected_reaction) - .++ - update_total() - continue - else - var/exists = FALSE - for(var/datum/equilibrium/E_exist as anything in reaction_list) - if(ispath(E_exist.reaction.type, selected_reaction.type)) //Don't add duplicates - exists = TRUE - - //Add it if it doesn't exist in the list - if(!exists) - is_reacting = TRUE//Prevent any on_reaction() procs from infinite looping - var/datum/equilibrium/equilibrium = new (selected_reaction, src) //Otherwise we add them to the processing list. - if(equilibrium.to_delete)//failed startup checks - qdel(equilibrium) - else - //Adding is done in new(), deletion is in qdel - equilibrium.reaction.on_reaction(src, equilibrium, equilibrium.multiplier) - equilibrium.react_timestep(1)//Get an initial step going so there's not a delay between setup and start - DO NOT ADD THIS TO equilibrium.NEW() - - if(LAZYLEN(reaction_list)) - is_reacting = TRUE //We've entered the reaction phase - this is set here so any reagent handling called in on_reaction() doesn't cause infinite loops - START_PROCESSING(SSreagents, src) //see process() to see how reactions are handled - else - is_reacting = FALSE - - if(.) - SEND_SIGNAL(src, COMSIG_REAGENTS_REACTED, .) - - TEST_ONLY_ASSERT(!. || MC_RUNNING(), "We reacted during subsystem init, that shouldn't be happening!") - -/* -* Main Reaction loop handler, Do not call this directly -* -* Checks to see if there's a reaction, then processes over the reaction list, removing them if flagged -* If any are ended, it displays the reaction message and removes it from the reaction list -* If the list is empty at the end it finishes reacting. -* Arguments: -* * seconds_per_tick - the time between each time step -*/ -/datum/reagents/process(seconds_per_tick) - if(!is_reacting) - force_stop_reacting() - stack_trace("[src] | [my_atom] was forced to stop reacting. This might be unintentional.") - //sum of output messages. - var/list/mix_message = list() - //Process over our reaction list - //See equilibrium.dm for mechanics - var/num_reactions = 0 - for(var/datum/equilibrium/equilibrium as anything in reaction_list) - //Continue reacting - equilibrium.react_timestep(seconds_per_tick) - num_reactions++ - //if it's been flagged to delete - if(equilibrium.to_delete) - var/temp_mix_message = end_reaction(equilibrium) - if(!text_in_list(temp_mix_message, mix_message)) - mix_message += temp_mix_message - continue - SSblackbox.record_feedback("tally", "chemical_reaction", 1, "[equilibrium.reaction.type] total reaction steps") - if(num_reactions) - SEND_SIGNAL(src, COMSIG_REAGENTS_REACTION_STEP, num_reactions, seconds_per_tick) - - if(length(mix_message)) //This is only at the end - my_atom.audible_message(span_notice("[icon2html(my_atom, viewers(DEFAULT_MESSAGE_RANGE, src))] [mix_message.Join()]")) - - if(!LAZYLEN(reaction_list)) - finish_reacting() - else - update_total() - handle_reactions() - -/* -* This ends a single instance of an ongoing reaction -* -* Arguments: -* * [equilibrium][datum/equilibrium] - the equilibrium that will be ended -* Returns: -* * mix_message - the associated mix message of a reaction -*/ -/datum/reagents/proc/end_reaction(datum/equilibrium/equilibrium) - equilibrium.reaction.reaction_finish(src, equilibrium, equilibrium.reacted_vol) - if(!equilibrium.holder || !equilibrium.reaction) //Somehow I'm getting empty equilibrium. This is here to handle them - LAZYREMOVE(reaction_list, equilibrium) - qdel(equilibrium) - stack_trace("The equilibrium datum currently processing in this reagents datum had a nulled holder or nulled reaction. src holder:[my_atom] || src type:[my_atom.type] ") //Shouldn't happen. Does happen - return - if(equilibrium.holder != src) //When called from Destroy() eqs are nulled in smoke. This is very strange. This is probably causing it to spam smoke because of the runtime interupting the removal. - stack_trace("The equilibrium datum currently processing in this reagents datum had a desynced holder to the ending reaction. src holder:[my_atom] | equilibrium holder:[equilibrium.holder.my_atom] || src type:[my_atom.type] | equilibrium holder:[equilibrium.holder.my_atom.type]") - LAZYREMOVE(reaction_list, equilibrium) - - var/reaction_message = equilibrium.reaction.mix_message - if(equilibrium.reaction.mix_sound) - playsound(get_turf(my_atom), equilibrium.reaction.mix_sound, 80, TRUE) - //SKYRAT EDIT ADDITION - //If the reaction pollutes, pollute it here if we have an atom - if(equilibrium.reaction.pollutant_type && my_atom) - var/turf/my_turf = get_turf(my_atom) - if(my_turf) // reactions can happen in nullspace (like inside of a mob's stomach for instance). - my_turf.pollute_turf(equilibrium.reaction.pollutant_type, equilibrium.reaction.pollutant_amount * equilibrium.reacted_vol) - //SKYRAT EDIT END - qdel(equilibrium) - update_total() - SEND_SIGNAL(src, COMSIG_REAGENTS_REACTED, .) - return reaction_message - -/* -* This stops the holder from processing at the end of a series of reactions (i.e. when all the equilibriums are completed) -* Also resets reaction variables to be null/empty/FALSE so that it can restart correctly in the future -*/ -/datum/reagents/proc/finish_reacting() - STOP_PROCESSING(SSreagents, src) - is_reacting = FALSE - //Cap off values - for(var/datum/reagent/reagent as anything in reagent_list) - reagent.volume = FLOOR(reagent.volume, CHEMICAL_QUANTISATION_LEVEL)//To prevent runaways. - LAZYNULL(previous_reagent_list) //reset it to 0 - because any change will be different now. - update_total() - if(!QDELING(src)) - handle_reactions() //Should be okay without. Each step checks. - -/* -* Force stops the current holder/reagents datum from reacting -* -* Calls end_reaction() for each equlilbrium datum in reaction_list and finish_reacting() -* Usually only called when a datum is transferred into a NO_REACT container -*/ -/datum/reagents/proc/force_stop_reacting() - var/list/mix_message = list() - for(var/datum/equilibrium/equilibrium as anything in reaction_list) - mix_message += end_reaction(equilibrium) - if(my_atom && length(mix_message)) - my_atom.audible_message(span_notice("[icon2html(my_atom, viewers(DEFAULT_MESSAGE_RANGE, src))] [mix_message.Join()]")) - finish_reacting() - -/* -* Force stops a specific reagent's associated reaction if it exists -* -* Mostly used if a reagent is being taken out by trans_id_to -* Might have some other applciations -* Returns TRUE if it stopped something, FALSE if it didn't -* Arguments: -* * reagent - the reagent PRODUCT that we're seeking reactions for, any and all found will be shut down -*/ -/datum/reagents/proc/force_stop_reagent_reacting(datum/reagent/reagent) - var/any_stopped = FALSE - var/list/mix_message = list() - for(var/datum/equilibrium/equilibrium as anything in reaction_list) - for(var/result in equilibrium.reaction.results) - if(result == reagent.type) - mix_message += end_reaction(equilibrium) - any_stopped = TRUE - if(length(mix_message)) - my_atom.audible_message(span_notice("[icon2html(my_atom, viewers(DEFAULT_MESSAGE_RANGE, src))][mix_message.Join()]")) - return any_stopped - -/* -* Transfers the reaction_list to a new reagents datum -* -* Arguments: -* * target - the datum/reagents that this src is being transferred into -*/ -/datum/reagents/proc/transfer_reactions(datum/reagents/target) - if(QDELETED(target)) - CRASH("transfer_reactions() had a [target] ([target.type]) passed to it when it was set to qdel, or it isn't a reagents datum.") - if(!reaction_list) - return - for(var/datum/equilibrium/reaction_source as anything in reaction_list) - var/exists = FALSE - for(var/datum/equilibrium/reaction_target as anything in target.reaction_list) //Don't add duplicates - if(reaction_source.reaction.type == reaction_target.reaction.type) - exists = TRUE - if(exists) - continue - if(!reaction_source.holder) - CRASH("reaction_source is missing a holder in transfer_reactions()!") - - var/datum/equilibrium/new_E = new (reaction_source.reaction, target)//addition to reaction_list is done in new() - if(new_E.to_delete)//failed startup checks - qdel(new_E) - - target.previous_reagent_list = LAZYLISTDUPLICATE(previous_reagent_list) - target.is_reacting = is_reacting - -///Checks to see if the reagents has a difference in reagents_list and previous_reagent_list (I.e. if there's a difference between the previous call and the last) -///Also checks to see if the saved reactions in failed_but_capable_reactions can start as a result of temp/pH change -/datum/reagents/proc/has_changed_state() - //Check if reagents are different - var/total_matching_reagents = 0 - for(var/reagent in previous_reagent_list) - if(has_reagent(reagent)) - total_matching_reagents++ - if(total_matching_reagents != reagent_list.len) - return TRUE - - //Check our last reactions - for(var/datum/chemical_reaction/reaction as anything in failed_but_capable_reactions) - if(reaction.is_cold_recipe) - if(reaction.required_temp < chem_temp) - return TRUE - else - if(reaction.required_temp < chem_temp) - return TRUE - if(((ph >= (reaction.optimal_ph_min - reaction.determin_ph_range)) && (ph <= (reaction.optimal_ph_max + reaction.determin_ph_range)))) - return TRUE - return FALSE - -///Old reaction mechanics, edited to work on one only -///This is changed from the old - purity of the reagents will affect yield -/datum/reagents/proc/instant_react(datum/chemical_reaction/selected_reaction) - var/list/cached_required_reagents = selected_reaction.required_reagents - var/list/cached_results = selected_reaction.results - var/datum/cached_my_atom = my_atom - var/multiplier = INFINITY - for(var/reagent in cached_required_reagents) - multiplier = FLOOR(min(multiplier, get_reagent_amount(reagent) / cached_required_reagents[reagent]), CHEMICAL_QUANTISATION_LEVEL) - - if(multiplier == 0)//Incase we're missing reagents - usually from on_reaction being called in an equlibrium when the results.len == 0 handlier catches a misflagged reaction - return FALSE - var/sum_purity = 0 - for(var/_reagent in cached_required_reagents)//this is not an object - var/datum/reagent/reagent = has_reagent(_reagent) - if (!reagent) - continue - sum_purity += reagent.purity - remove_reagent(_reagent, (multiplier * cached_required_reagents[_reagent]), safety = 1) - sum_purity /= cached_required_reagents.len - - for(var/product in selected_reaction.results) - multiplier = max(multiplier, 1) //this shouldn't happen ... - var/yield = (cached_results[product]*multiplier)*sum_purity - SSblackbox.record_feedback("tally", "chemical_reaction", yield, product) - add_reagent(product, yield, null, chem_temp, sum_purity) - - var/list/seen = viewers(4, get_turf(my_atom)) - var/iconhtml = icon2html(cached_my_atom, seen) - if(cached_my_atom) - if(!ismob(cached_my_atom)) // No bubbling mobs - if(selected_reaction.mix_sound) - playsound(get_turf(cached_my_atom), selected_reaction.mix_sound, 80, TRUE) - - my_atom.audible_message(span_notice("[iconhtml] [selected_reaction.mix_message]")) - - if(istype(cached_my_atom, /obj/item/slime_extract)) - var/obj/item/slime_extract/extract = my_atom - extract.Uses-- - if(extract.Uses <= 0) // give the notification that the slime core is dead - my_atom.visible_message(span_notice("[iconhtml] \The [my_atom]'s power is consumed in the reaction.")) - extract.name = "used slime extract" - extract.desc = "This extract has been used up." - - //SKYRAT EDIT ADDITION - //If the reaction pollutes, pollute it here if we have an atom - if(selected_reaction.pollutant_type && my_atom) - var/turf/my_turf = get_turf(my_atom) - if(my_turf) // just to be safe here - my_turf.pollute_turf(selected_reaction.pollutant_type, selected_reaction.pollutant_amount * multiplier) - //SKYRAT EDIT END - - selected_reaction.on_reaction(src, null, multiplier) - -/// Updates [/datum/reagents/var/total_volume] -/datum/reagents/proc/update_total() - var/list/cached_reagents = reagent_list - var/list/deleted_reagents = list() - var/chem_index = 1 - var/num_reagents = length(cached_reagents) - var/total_ph = 0 - . = 0 - - //responsible for removing reagents and computing total ph & volume - //all it's code was taken out of del_reagent() initially for efficiency purposes - while(chem_index <= num_reagents) - var/datum/reagent/reagent = cached_reagents[chem_index] - chem_index += 1 - - //remove very small amounts of reagents - if((reagent.volume <= 0.05 && !is_reacting) || reagent.volume <= CHEMICAL_QUANTISATION_LEVEL) - //end metabolization - if(isliving(my_atom)) - if(reagent.metabolizing) - reagent.metabolizing = FALSE - reagent.on_mob_end_metabolize(my_atom) - reagent.on_mob_delete(my_atom) - - //removing it and store in a seperate list for processing later - cached_reagents -= reagent - LAZYREMOVE(previous_reagent_list, reagent.type) - deleted_reagents += reagent - - //move pointer back so we don't overflow & decrease length - chem_index -= 1 - num_reagents -= 1 - continue - - //compute volume & ph like we would normally - . += reagent.volume - total_ph += (reagent.ph * reagent.volume) - - //assign the final values - total_volume = . - if(!.) - ph = CHEMICAL_NORMAL_PH - else - ph = clamp(total_ph / total_volume, CHEMICAL_MIN_PH, CHEMICAL_MAX_PH) - - //now send the signals after the volume & ph has been computed - for(var/datum/reagent/deleted_reagent as anything in deleted_reagents) - SEND_SIGNAL(src, COMSIG_REAGENTS_DEL_REAGENT, deleted_reagent) - qdel(deleted_reagent) - -/** - * Applies the relevant expose_ proc for every reagent in this holder - * * [/datum/reagent/proc/expose_mob] - * * [/datum/reagent/proc/expose_turf] - * * [/datum/reagent/proc/expose_obj] - * - * Arguments - * - Atom/A: What mob/turf/object is being exposed to reagents? This is your reaction target. - * - Methods: What reaction type is the reagent itself going to call on the reaction target? Types are TOUCH, INGEST, VAPOR, PATCH, and INJECT. - * - Volume_modifier: What is the reagent volume multiplied by when exposed? Note that this is called on the volume of EVERY reagent in the base body, so factor in your Maximum_Volume if necessary! - * - Show_message: Whether to display anything to mobs when they are exposed. - */ -/datum/reagents/proc/expose(atom/A, methods = TOUCH, volume_modifier = 1, show_message = 1) - if(isnull(A)) - return null - - if(!reagent_list.len) - return null - - var/list/reagents = list() - for(var/datum/reagent/reagent as anything in reagent_list) - reagents[reagent] = reagent.volume * volume_modifier - - return A.expose_reagents(reagents, src, methods, volume_modifier, show_message) - -// Same as [/datum/reagents/proc/expose] but only for multiple reagents (through a list) -/datum/reagents/proc/expose_multiple(list/r_to_expose, atom/A, methods = TOUCH, volume_modifier = 1, show_message = 1) - if(isnull(A)) - return null - - var/list/cached_reagents = r_to_expose - if(!cached_reagents.len) - return null - - var/list/reagents = list() - for(var/datum/reagent/reagent as anything in cached_reagents) - reagents[reagent] = reagent.volume * volume_modifier - - return A.expose_reagents(reagents, src, methods, volume_modifier, show_message) - -/// Is this holder full or not -/datum/reagents/proc/holder_full() - return total_volume + 0.01 >= maximum_volume - -/** - * Get the amount of this reagent or the sum of all its subtypes if specified - * Arguments - * * [reagent][datum/reagent] - the typepath of the reagent to look for - * * include_subtypes - if TRUE returns the sum of volumes of all subtypes of the above param reagent - */ -/datum/reagents/proc/get_reagent_amount(datum/reagent/reagent, include_subtypes = FALSE) - if(!ispath(reagent)) - stack_trace("invalid path passed to get_reagent_amount [reagent]") - return 0 - - var/list/cached_reagents = reagent_list - var/total_amount = 0 - for(var/datum/reagent/cached_reagent as anything in cached_reagents) - if((!include_subtypes && cached_reagent.type == reagent) || (include_subtypes && ispath(cached_reagent.type, reagent))) - total_amount += cached_reagent.volume - - return FLOOR(total_amount, CHEMICAL_QUANTISATION_LEVEL) - -/** - * Gets the sum of volumes of all reagent type paths present in the list - * Arguments - * * [reagents][list] - list of reagent typepaths - */ -/datum/reagents/proc/get_multiple_reagent_amounts(list/reagents) - var/list/cached_reagents = reagent_list - var/total_amount = 0 - for(var/datum/reagent/cached_reagent as anything in cached_reagents) - if(cached_reagent.type in reagents) - total_amount += FLOOR(cached_reagent.volume, CHEMICAL_QUANTISATION_LEVEL) - return total_amount - -/** - * Get the purity of this reagent - * Arguments - * * [reagent][datum/reagent] - the typepath of the specific reagent to get purity of - */ -/datum/reagents/proc/get_reagent_purity(datum/reagent/reagent) - if(!ispath(reagent)) - stack_trace("invalid reagent typepath passed to get_reagent_purity [reagent]") - return 0 - - var/list/cached_reagents = reagent_list - for(var/datum/reagent/cached_reagent as anything in cached_reagents) - if(cached_reagent.type == reagent) - return round(cached_reagent.purity, 0.01) - return 0 - -/** - * Directly set the purity of all contained reagents to a new value - * Arguments - * * new_purity - the new purity value - */ -/datum/reagents/proc/set_all_reagents_purity(new_purity = 0) - var/list/cached_reagents = reagent_list - for(var/datum/reagent/cached_reagent as anything in cached_reagents) - cached_reagent.purity = max(0, new_purity) - -/** - * Get the average purity of all reagents (or all subtypes of provided typepath) - * Arguments - * * [parent_type][datum/reagent] - the typepath of specific reagents to look for - */ -/datum/reagents/proc/get_average_purity(datum/reagent/parent_type = null) - var/total_amount - var/weighted_purity - var/list/cached_reagents = reagent_list - for(var/datum/reagent/reagent as anything in cached_reagents) - if(!isnull(parent_type) && !istype(reagent, parent_type)) - continue - total_amount += reagent.volume - weighted_purity += reagent.volume * reagent.purity - return weighted_purity / total_amount - -/** - * Shallow copies (deep copy of viruses) data from the provided reagent into our copy of that reagent - * Arguments - * [current_reagent][datum/reagent] - the reagent(not typepath) to copy data from - */ -/datum/reagents/proc/copy_data(datum/reagent/current_reagent) - if(!current_reagent || !current_reagent.data) - return null - if(!istype(current_reagent.data, /list)) - return current_reagent.data - - var/list/trans_data = current_reagent.data.Copy() - - // We do this so that introducing a virus to a blood sample - // doesn't automagically infect all other blood samples from - // the same donor. - // - // Technically we should probably copy all data lists, but - // that could possibly eat up a lot of memory needlessly - // if most data lists are read-only. - if(trans_data["viruses"]) - var/list/v = trans_data["viruses"] - trans_data["viruses"] = v.Copy() - - return trans_data - -/** - * Get a reference to the reagent if it exists - * Arguments - * * [type][datum/reagent] - the typepath of the reagent to look up - */ -/datum/reagents/proc/get_reagent(datum/reagent/type) - var/list/cached_reagents = reagent_list - . = locate(type) in cached_reagents - -/** - * Returns what this holder's reagents taste like - * - * Arguments: - * * mob/living/taster - who is doing the tasting. Some mobs can pick up specific flavours. - * * minimum_percent - the lower the minimum percent, the more sensitive the message is. - */ -/datum/reagents/proc/generate_taste_message(mob/living/taster, minimum_percent) - var/list/out = list() - var/list/tastes = list() //descriptor = strength - if(minimum_percent <= 100) - for(var/datum/reagent/reagent as anything in reagent_list) - if(!reagent.taste_mult) - continue - - var/list/taste_data = reagent.get_taste_description(taster) - for(var/taste in taste_data) - if(taste in tastes) - tastes[taste] += taste_data[taste] * reagent.volume * reagent.taste_mult - else - tastes[taste] = taste_data[taste] * reagent.volume * reagent.taste_mult - //deal with percentages - // TODO it would be great if we could sort these from strong to weak - var/total_taste = counterlist_sum(tastes) - if(total_taste > 0) - for(var/taste_desc in tastes) - var/percent = tastes[taste_desc]/total_taste * 100 - if(percent < minimum_percent) - continue - var/intensity_desc = "a hint of" - if(percent > minimum_percent * 2 || percent == 100) - intensity_desc = "" - else if(percent > minimum_percent * 3) - intensity_desc = "the strong flavor of" - if(intensity_desc != "") - out += "[intensity_desc] [taste_desc]" - else - out += "[taste_desc]" - - return english_list(out, "something indescribable") - - -/// Returns the total heat capacity for all of the reagents currently in this holder. -/datum/reagents/proc/heat_capacity() - . = 0 - var/list/cached_reagents = reagent_list //cache reagents - for(var/datum/reagent/reagent in cached_reagents) - . += reagent.specific_heat * reagent.volume - -/** Adjusts the thermal energy of the reagents in this holder by an amount. - * - * Arguments: - * - delta_energy: The amount to change the thermal energy by. - * - min_temp: The minimum temperature that can be reached. - * - max_temp: The maximum temperature that can be reached. - */ -/datum/reagents/proc/adjust_thermal_energy(delta_energy, min_temp = 2.7, max_temp = 1000) - var/heat_capacity = heat_capacity() - if(!heat_capacity) - return // no div/0 please - set_temperature(clamp(chem_temp + (delta_energy / heat_capacity), min_temp, max_temp)) - -/** - * Applies heat to this holder - * Arguments - * - * * temperature - the temperature we to heat/cool by - * * coeff - multiplier to be applied on temp diff between param temp and current temp - */ -/datum/reagents/proc/expose_temperature(temperature, coeff = 0.02) - if(istype(my_atom,/obj/item/reagent_containers)) - var/obj/item/reagent_containers/RCs = my_atom - if(RCs.reagent_flags & NO_REACT) //stasis holders IE cryobeaker - return - var/temp_delta = (temperature - chem_temp) * coeff - if(temp_delta > 0) - chem_temp = min(chem_temp + max(temp_delta, 1), temperature) - else - chem_temp = max(chem_temp + min(temp_delta, -1), temperature) - set_temperature(round(chem_temp)) - handle_reactions() - -/** Sets the temperature of this reagent container to a new value. - * - * Handles setter signals. - * - * Arguments: - * - _temperature: The new temperature value. - */ -/datum/reagents/proc/set_temperature(_temperature) - if(_temperature == chem_temp) - return - - . = chem_temp - chem_temp = clamp(_temperature, 0, CHEMICAL_MAXIMUM_TEMPERATURE) - SEND_SIGNAL(src, COMSIG_REAGENTS_TEMP_CHANGE, _temperature, .) - -/* -* Adjusts the base pH of all of the reagents in a beaker -* -* - moves it towards acidic -* + moves it towards basic -* Arguments: -* * value - How much to adjust the base pH by -*/ -/datum/reagents/proc/adjust_all_reagents_ph(value) - for(var/datum/reagent/reagent as anything in reagent_list) - reagent.ph = clamp(reagent.ph + value, CHEMICAL_MIN_PH, CHEMICAL_MAX_PH) - -/* -* Adjusts the base pH of a specific type -* -* - moves it towards acidic -* + moves it towards basic -* Arguments: -* * input_reagent - type path of the reagent -* * value - How much to adjust the base pH by -*/ -/datum/reagents/proc/adjust_specific_reagent_ph(input_reagent, value) - var/datum/reagent/reagent = get_reagent(input_reagent) - if(!reagent) //We can call this with missing reagents. - return FALSE - reagent.ph = clamp(reagent.ph + value, CHEMICAL_MIN_PH, CHEMICAL_MAX_PH) - -/** - * Outputs a log-friendly list of reagents based on an external reagent list. - * - * Arguments: - * * external_list - Assoc list of (reagent_type) = list(REAGENT_TRANSFER_AMOUNT = amounts, REAGENT_PURITY = purity) - */ -/datum/reagents/proc/get_external_reagent_log_string(external_list) - if(!length(external_list)) - return "no reagents" - - var/list/data = list() - - for(var/reagent_type in external_list) - var/list/qualities = external_list[reagent_type] - data += "[reagent_type] ([FLOOR(qualities[REAGENT_TRANSFER_AMOUNT], CHEMICAL_QUANTISATION_LEVEL)]u, [qualities[REAGENT_PURITY]] purity)" - - return english_list(data) - -/// Outputs a log-friendly list of reagents based on the internal reagent_list. -/datum/reagents/proc/get_reagent_log_string() - if(!length(reagent_list)) - return "no reagents" - - var/list/data = list() - - for(var/datum/reagent/reagent as anything in reagent_list) - data += "[reagent.type] ([FLOOR(reagent.volume, CHEMICAL_QUANTISATION_LEVEL)]u, [reagent.purity] purity)" - - return english_list(data) - -///////////////////////////////////////////////////////////////////////////////// -///////////////////////////UI / REAGENTS LOOKUP CODE///////////////////////////// -///////////////////////////////////////////////////////////////////////////////// - - -/datum/reagents/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "Reagents", "Reaction search") - ui.status = UI_INTERACTIVE //How do I prevent a UI from autoclosing if not in LoS - ui_tags_selected = NONE //Resync with gui on open (gui expects no flags) - ui_reagent_id = null - ui_reaction_id = null - ui.open() - - -/datum/reagents/ui_status(mob/user) - return UI_INTERACTIVE //please advise - -/datum/reagents/ui_state(mob/user) - return GLOB.physical_state - -/datum/reagents/proc/generate_possible_reactions() - var/list/cached_reagents = reagent_list - if(!cached_reagents) - return null - var/list/cached_reactions = list() - var/list/possible_reactions = list() - if(!length(cached_reagents)) - return null - cached_reactions = GLOB.chemical_reactions_list_reactant_index - for(var/_reagent in cached_reagents) - var/datum/reagent/reagent = _reagent - for(var/_reaction in cached_reactions[reagent.type]) // Was a big list but now it should be smaller since we filtered it with our reagent id - var/datum/chemical_reaction/reaction = _reaction - if(!_reaction) - continue - if(!reaction.required_reagents)//Don't bring in empty ones - continue - var/list/cached_required_reagents = reaction.required_reagents - var/total_matching_reagents = 0 - for(var/req_reagent in cached_required_reagents) - if(!has_reagent(req_reagent, (cached_required_reagents[req_reagent]*0.01))) - continue - total_matching_reagents++ - if(total_matching_reagents >= reagent_list.len) - possible_reactions += reaction - return possible_reactions - -///Generates a (rough) rate vs temperature graph profile -/datum/reagents/proc/generate_thermodynamic_profile(datum/chemical_reaction/reaction) - var/list/coords = list() - var/x_temp - var/increment - if(reaction.is_cold_recipe) - coords += list(list(0, 0)) - coords += list(list(reaction.required_temp, 0)) - x_temp = reaction.required_temp - increment = (reaction.optimal_temp - reaction.required_temp)/10 - while(x_temp < reaction.optimal_temp) - var/y = (((x_temp - reaction.required_temp)**reaction.temp_exponent_factor)/((reaction.optimal_temp - reaction.required_temp)**reaction.temp_exponent_factor)) - coords += list(list(x_temp, y)) - x_temp += increment - else - coords += list(list(reaction.required_temp, 0)) - x_temp = reaction.required_temp - increment = (reaction.required_temp - reaction.optimal_temp)/10 - while(x_temp > reaction.optimal_temp) - var/y = (((x_temp - reaction.required_temp)**reaction.temp_exponent_factor)/((reaction.optimal_temp - reaction.required_temp)**reaction.temp_exponent_factor)) - coords += list(list(x_temp, y)) - x_temp -= increment - - coords += list(list(reaction.optimal_temp, 1)) - if(reaction.overheat_temp == NO_OVERHEAT) - if(reaction.is_cold_recipe) - coords += list(list(reaction.optimal_temp+10, 1)) - else - coords += list(list(reaction.optimal_temp-10, 1)) - return coords - coords += list(list(reaction.overheat_temp, 1)) - coords += list(list(reaction.overheat_temp, 0)) - return coords - -/datum/reagents/proc/generate_explosive_profile(datum/chemical_reaction/reaction) - if(reaction.overheat_temp == NO_OVERHEAT) - return null - var/list/coords = list() - coords += list(list(reaction.overheat_temp, 0)) - coords += list(list(reaction.overheat_temp, 1)) - if(reaction.is_cold_recipe) - coords += list(list(reaction.overheat_temp-50, 1)) - coords += list(list(reaction.overheat_temp-50, 0)) - else - coords += list(list(reaction.overheat_temp+50, 1)) - coords += list(list(reaction.overheat_temp+50, 0)) - return coords - - -///Returns a string descriptor of a reactions themic_constant -/datum/reagents/proc/determine_reaction_thermics(datum/chemical_reaction/reaction) - var/thermic = reaction.thermic_constant - if(reaction.reaction_flags & REACTION_HEAT_ARBITARY) - thermic *= 100 //Because arbitary is a lower scale - switch(thermic) - if(-INFINITY to -1500) - return "Overwhelmingly endothermic" - if(-1500 to -1000) - return "Extremely endothermic" - if(-1000 to -500) - return "Strongly endothermic" - if(-500 to -200) - return "Moderately endothermic" - if(-200 to -50) - return "Endothermic" - if(-50 to 0) - return "Weakly endothermic" - if(0) - return "" - if(0 to 50) - return "Weakly Exothermic" - if(50 to 200) - return "Exothermic" - if(200 to 500) - return "Moderately exothermic" - if(500 to 1000) - return "Strongly exothermic" - if(1000 to 1500) - return "Extremely exothermic" - if(1500 to INFINITY) - return "Overwhelmingly exothermic" - -/datum/reagents/proc/parse_addictions(datum/reagent/reagent) - var/addict_text = list() - for(var/entry in reagent.addiction_types) - var/datum/addiction/ref = SSaddiction.all_addictions[entry] - switch(reagent.addiction_types[entry]) - if(-INFINITY to 0) - continue - if(0 to 5) - addict_text += "Weak [ref.name]" - if(5 to 10) - addict_text += "[ref.name]" - if(10 to 20) - addict_text += "Strong [ref.name]" - if(20 to INFINITY) - addict_text += "Potent [ref.name]" - return addict_text - -/datum/reagents/ui_data(mob/user) - var/data = list() - data["selectedBitflags"] = ui_tags_selected - data["currentReagents"] = previous_reagent_list //This keeps the string of reagents that's updated when handle_reactions() is called - data["beakerSync"] = ui_beaker_sync - data["linkedBeaker"] = my_atom.name //To solidify the fact that the UI is linked to a beaker - not a machine. - - //First we check to see if reactions are synced with the beaker - if(ui_beaker_sync) - if(reaction_list)//But we don't want to null the previously displayed if there are none - //makes sure we're within bounds - if(ui_reaction_index > reaction_list.len) - ui_reaction_index = reaction_list.len - ui_reaction_id = reaction_list[ui_reaction_index].reaction.type - - //reagent lookup data - if(ui_reagent_id) - var/datum/reagent/reagent = find_reagent_object_from_type(ui_reagent_id) - if(!reagent) - to_chat(user, "Could not find reagent!") - ui_reagent_id = null - else - data["reagent_mode_reagent"] = list("name" = reagent.name, "id" = reagent.type, "desc" = reagent.description, "reagentCol" = reagent.color, "pH" = reagent.ph, "pHCol" = convert_ph_to_readable_color(reagent.ph), "metaRate" = (reagent.metabolization_rate/2), "OD" = reagent.overdose_threshold) - data["reagent_mode_reagent"]["addictions"] = list() - data["reagent_mode_reagent"]["addictions"] = parse_addictions(reagent) - - var/datum/reagent/inverse_reagent = GLOB.chemical_reagents_list[reagent.inverse_chem] - if(inverse_reagent) - data["reagent_mode_reagent"] += list("inverseReagent" = inverse_reagent.name, "inverseId" = inverse_reagent.type) - - if(reagent.chemical_flags & REAGENT_DEAD_PROCESS) - data["reagent_mode_reagent"] += list("deadProcess" = TRUE) - else - data["reagent_mode_reagent"] = null - - //reaction lookup data - if (ui_reaction_id) - - var/datum/chemical_reaction/reaction = get_chemical_reaction(ui_reaction_id) - if(!reaction) - to_chat(user, "Could not find reaction!") - ui_reaction_id = null - return data - //Required holder - var/container_name - if(reaction.required_container) - var/list/names = splittext("[reaction.required_container]", "/") - container_name = "[names[names.len-1]] [names[names.len]]" - container_name = replacetext(container_name, "_", " ") - - //Next, find the product - var/has_product = TRUE - //If we have no product, use the typepath to create a name for it - if(!length(reaction.results)) - has_product = FALSE - var/list/names = splittext("[reaction.type]", "/") - var/product_name = names[names.len] - data["reagent_mode_recipe"] = list("name" = product_name, "id" = reaction.type, "hasProduct" = has_product, "reagentCol" = "#FFFFFF", "thermodynamics" = generate_thermodynamic_profile(reaction), "explosive" = generate_explosive_profile(reaction), "lowerpH" = reaction.optimal_ph_min, "upperpH" = reaction.optimal_ph_max, "thermics" = determine_reaction_thermics(reaction), "thermoUpper" = reaction.rate_up_lim, "minPurity" = reaction.purity_min, "inversePurity" = "N/A", "tempMin" = reaction.required_temp, "explodeTemp" = reaction.overheat_temp, "reqContainer" = container_name, "subReactLen" = 1, "subReactIndex" = 1) - - //If we do have a product then we find it - else - //Find out if we have multiple reactions for the same product - var/datum/reagent/primary_reagent = find_reagent_object_from_type(reaction.results[1])//We use the first product - though it might be worth changing this - //If we're syncing from the beaker - var/list/sub_reactions = list() - if(ui_beaker_sync && reaction_list) - for(var/_ongoing_eq in reaction_list) - var/datum/equilibrium/ongoing_eq = _ongoing_eq - var/ongoing_r = ongoing_eq.reaction - sub_reactions += ongoing_r - else - sub_reactions = get_recipe_from_reagent_product(primary_reagent.type) - var/sub_reaction_length = length(sub_reactions) - var/i = 1 - for(var/datum/chemical_reaction/sub_reaction in sub_reactions) - if(sub_reaction.type == reaction.type) - ui_reaction_index = i //update our index - break - i += 1 - data["reagent_mode_recipe"] = list("name" = primary_reagent.name, "id" = reaction.type, "hasProduct" = has_product, "reagentCol" = primary_reagent.color, "thermodynamics" = generate_thermodynamic_profile(reaction), "explosive" = generate_explosive_profile(reaction), "lowerpH" = reaction.optimal_ph_min, "upperpH" = reaction.optimal_ph_max, "thermics" = determine_reaction_thermics(reaction), "thermoUpper" = reaction.rate_up_lim, "minPurity" = reaction.purity_min, "inversePurity" = primary_reagent.inverse_chem_val, "tempMin" = reaction.required_temp, "explodeTemp" = reaction.overheat_temp, "reqContainer" = container_name, "subReactLen" = sub_reaction_length, "subReactIndex" = ui_reaction_index) - - //Results sweep - var/has_reagent = "default" - for(var/_reagent in reaction.results) - var/datum/reagent/reagent = find_reagent_object_from_type(_reagent) - if(has_reagent(_reagent)) - has_reagent = "green" - data["reagent_mode_recipe"]["products"] += list(list("name" = reagent.name, "id" = reagent.type, "ratio" = reaction.results[reagent.type], "hasReagentCol" = has_reagent)) - - //Reactant sweep - for(var/_reagent in reaction.required_reagents) - var/datum/reagent/reagent = find_reagent_object_from_type(_reagent) - var/color_r = "default" //If the holder is missing the reagent, it's displayed in orange - if(has_reagent(reagent.type)) - color_r = "green" //It's green if it's present - var/tooltip - var/tooltip_bool = FALSE - var/list/sub_reactions = get_recipe_from_reagent_product(reagent.type) - //Get sub reaction possibilities, but ignore ones that need a specific holder atom - var/sub_index = 0 - for(var/datum/chemical_reaction/sub_reaction as anything in sub_reactions) - if(sub_reaction.required_container)//So we don't have slime reactions confusing things - sub_index++ - continue - sub_index++ - break - if(sub_index) - var/datum/chemical_reaction/sub_reaction = sub_reactions[sub_index] - //Subreactions sweep (if any) - for(var/_sub_reagent in sub_reaction.required_reagents) - var/datum/reagent/sub_reagent = find_reagent_object_from_type(_sub_reagent) - tooltip += "[sub_reaction.required_reagents[_sub_reagent]]u [sub_reagent.name]\n" //I forgot the better way of doing this - fix this after this works - tooltip_bool = TRUE - data["reagent_mode_recipe"]["reactants"] += list(list("name" = reagent.name, "id" = reagent.type, "ratio" = reaction.required_reagents[reagent.type], "color" = color_r, "tooltipBool" = tooltip_bool, "tooltip" = tooltip)) - - //Catalyst sweep - for(var/_reagent in reaction.required_catalysts) - var/datum/reagent/reagent = find_reagent_object_from_type(_reagent) - var/color_r = "default" - if(has_reagent(reagent.type)) - color_r = "green" - var/tooltip - var/tooltip_bool = FALSE - var/list/sub_reactions = get_recipe_from_reagent_product(reagent.type) - if(length(sub_reactions)) - var/datum/chemical_reaction/sub_reaction = sub_reactions[1] - //Subreactions sweep (if any) - for(var/_sub_reagent in sub_reaction.required_reagents) - var/datum/reagent/sub_reagent = find_reagent_object_from_type(_sub_reagent) - tooltip += "[sub_reaction.required_reagents[_sub_reagent]]u [sub_reagent.name]\n" //I forgot the better way of doing this - fix this after this works - tooltip_bool = TRUE - data["reagent_mode_recipe"]["catalysts"] += list(list("name" = reagent.name, "id" = reagent.type, "ratio" = reaction.required_catalysts[reagent.type], "color" = color_r, "tooltipBool" = tooltip_bool, "tooltip" = tooltip)) - data["reagent_mode_recipe"]["isColdRecipe"] = reaction.is_cold_recipe - else - data["reagent_mode_recipe"] = null - - return data - -/datum/reagents/ui_static_data(mob/user) - var/data = list() - //Use GLOB list - saves processing - data["master_reaction_list"] = GLOB.chemical_reactions_results_lookup_list - data["bitflags"] = list() - data["bitflags"]["BRUTE"] = REACTION_TAG_BRUTE - data["bitflags"]["BURN"] = REACTION_TAG_BURN - data["bitflags"]["TOXIN"] = REACTION_TAG_TOXIN - data["bitflags"]["OXY"] = REACTION_TAG_OXY - data["bitflags"]["CLONE"] = REACTION_TAG_CLONE - data["bitflags"]["HEALING"] = REACTION_TAG_HEALING - data["bitflags"]["DAMAGING"] = REACTION_TAG_DAMAGING - data["bitflags"]["EXPLOSIVE"] = REACTION_TAG_EXPLOSIVE - data["bitflags"]["OTHER"] = REACTION_TAG_OTHER - data["bitflags"]["DANGEROUS"] = REACTION_TAG_DANGEROUS - data["bitflags"]["EASY"] = REACTION_TAG_EASY - data["bitflags"]["MODERATE"] = REACTION_TAG_MODERATE - data["bitflags"]["HARD"] = REACTION_TAG_HARD - data["bitflags"]["ORGAN"] = REACTION_TAG_ORGAN - data["bitflags"]["DRINK"] = REACTION_TAG_DRINK - data["bitflags"]["FOOD"] = REACTION_TAG_FOOD - data["bitflags"]["SLIME"] = REACTION_TAG_SLIME - data["bitflags"]["DRUG"] = REACTION_TAG_DRUG - data["bitflags"]["UNIQUE"] = REACTION_TAG_UNIQUE - data["bitflags"]["CHEMICAL"] = REACTION_TAG_CHEMICAL - data["bitflags"]["PLANT"] = REACTION_TAG_PLANT - data["bitflags"]["COMPETITIVE"] = REACTION_TAG_COMPETITIVE - - return data - -/* Returns a reaction type by index from an input reagent type -* i.e. the input reagent's associated reactions are found, and the index determines which one to return -* If the index is out of range, it is set to 1 -*/ -/datum/reagents/proc/get_reaction_from_indexed_possibilities(path, index = null) - if(index) - ui_reaction_index = index - var/list/sub_reactions = get_recipe_from_reagent_product(path) - if(!length(sub_reactions)) - to_chat(usr, "There is no recipe associated with this product.") - return FALSE - if(ui_reaction_index > length(sub_reactions)) - ui_reaction_index = 1 - var/datum/chemical_reaction/reaction = sub_reactions[ui_reaction_index] - return reaction.type - -/datum/reagents/ui_act(action, params) - . = ..() - if(.) - return - switch(action) - if("find_reagent_reaction") - ui_reaction_id = get_reaction_from_indexed_possibilities(text2path(params["id"])) - return TRUE - if("reagent_click") - ui_reagent_id = text2path(params["id"]) - return TRUE - if("recipe_click") - ui_reaction_id = text2path(params["id"]) - return TRUE - if("search_reagents") - var/input_reagent = tgui_input_list(usr, "Select reagent", "Reagent", GLOB.name2reagent) - input_reagent = get_reagent_type_from_product_string(input_reagent) //from string to type - var/datum/reagent/reagent = find_reagent_object_from_type(input_reagent) - if(!reagent) - to_chat(usr, "Could not find reagent!") - return FALSE - ui_reagent_id = reagent.type - return TRUE - if("search_recipe") - var/input_reagent = (input("Enter the name of product reagent", "Input") as text|null) - input_reagent = get_reagent_type_from_product_string(input_reagent) //from string to type - var/datum/reagent/reagent = find_reagent_object_from_type(input_reagent) - if(!reagent) - to_chat(usr, "Could not find product reagent!") - return - ui_reaction_id = get_reaction_from_indexed_possibilities(reagent.type) - return TRUE - if("increment_index") - ui_reaction_index += 1 - if(!ui_beaker_sync || !reaction_list) - ui_reaction_id = get_reaction_from_indexed_possibilities(get_reagent_type_from_product_string(params["id"])) - return TRUE - if("reduce_index") - if(ui_reaction_index == 1) - return - ui_reaction_index -= 1 - if(!ui_beaker_sync || !reaction_list) - ui_reaction_id = get_reaction_from_indexed_possibilities(get_reagent_type_from_product_string(params["id"])) - return TRUE - if("beaker_sync") - ui_beaker_sync = !ui_beaker_sync - return TRUE - if("toggle_tag_brute") - ui_tags_selected = ui_tags_selected ^ REACTION_TAG_BRUTE - return TRUE - if("toggle_tag_burn") - ui_tags_selected = ui_tags_selected ^ REACTION_TAG_BURN - return TRUE - if("toggle_tag_toxin") - ui_tags_selected = ui_tags_selected ^ REACTION_TAG_TOXIN - return TRUE - if("toggle_tag_oxy") - ui_tags_selected = ui_tags_selected ^ REACTION_TAG_OXY - return TRUE - if("toggle_tag_clone") - ui_tags_selected = ui_tags_selected ^ REACTION_TAG_CLONE - return TRUE - if("toggle_tag_healing") - ui_tags_selected = ui_tags_selected ^ REACTION_TAG_HEALING - return TRUE - if("toggle_tag_damaging") - ui_tags_selected = ui_tags_selected ^ REACTION_TAG_DAMAGING - return TRUE - if("toggle_tag_explosive") - ui_tags_selected = ui_tags_selected ^ REACTION_TAG_EXPLOSIVE - return TRUE - if("toggle_tag_other") - ui_tags_selected = ui_tags_selected ^ REACTION_TAG_OTHER - return TRUE - if("toggle_tag_easy") - ui_tags_selected = ui_tags_selected ^ REACTION_TAG_EASY - return TRUE - if("toggle_tag_moderate") - ui_tags_selected = ui_tags_selected ^ REACTION_TAG_MODERATE - return TRUE - if("toggle_tag_hard") - ui_tags_selected = ui_tags_selected ^ REACTION_TAG_HARD - return TRUE - if("toggle_tag_organ") - ui_tags_selected = ui_tags_selected ^ REACTION_TAG_ORGAN - return TRUE - if("toggle_tag_drink") - ui_tags_selected = ui_tags_selected ^ REACTION_TAG_DRINK - return TRUE - if("toggle_tag_food") - ui_tags_selected = ui_tags_selected ^ REACTION_TAG_FOOD - return TRUE - if("toggle_tag_dangerous") - ui_tags_selected = ui_tags_selected ^ REACTION_TAG_DANGEROUS - return TRUE - if("toggle_tag_slime") - ui_tags_selected = ui_tags_selected ^ REACTION_TAG_SLIME - return TRUE - if("toggle_tag_drug") - ui_tags_selected = ui_tags_selected ^ REACTION_TAG_DRUG - return TRUE - if("toggle_tag_unique") - ui_tags_selected = ui_tags_selected ^ REACTION_TAG_UNIQUE - return TRUE - if("toggle_tag_chemical") - ui_tags_selected = ui_tags_selected ^ REACTION_TAG_CHEMICAL - return TRUE - if("toggle_tag_plant") - ui_tags_selected = ui_tags_selected ^ REACTION_TAG_PLANT - return TRUE - if("toggle_tag_competitive") - ui_tags_selected = ui_tags_selected ^ REACTION_TAG_COMPETITIVE - return TRUE - if("update_ui") - return TRUE - - -/////////////////////////////////////////////////////////////////////////////////// - - -/** - * Convenience proc to create a reagents holder for an atom - * - * Arguments: - * * max_vol - maximum volume of holder - * * flags - flags to pass to the holder - */ -/atom/proc/create_reagents(max_vol, flags) - if(reagents) - qdel(reagents) - reagents = new /datum/reagents(max_vol, flags) - reagents.my_atom = src - -#undef REAGENT_TRANSFER_AMOUNT -#undef REAGENT_PURITY diff --git a/code/modules/reagents/chemistry/holder/holder.dm b/code/modules/reagents/chemistry/holder/holder.dm new file mode 100644 index 00000000000000..5872f5db1aeeea --- /dev/null +++ b/code/modules/reagents/chemistry/holder/holder.dm @@ -0,0 +1,853 @@ +#define REAGENT_TRANSFER_AMOUNT "amount" +#define REAGENT_PURITY "purity" + +///////////////////////////////Main reagents code///////////////////////////////////////////// + +/// Holder for a bunch of [/datum/reagent] +/datum/reagents + /// The reagents being held + var/list/datum/reagent/reagent_list = new/list() + /// Current volume of all the reagents + var/total_volume = 0 + /// Max volume of this holder + var/maximum_volume = 100 + /// The atom this holder is attached to + var/atom/my_atom = null + /// Current temp of the holder volume + var/chem_temp = 150 + ///pH of the whole system + var/ph = CHEMICAL_NORMAL_PH + /// various flags, see code\__DEFINES\reagents.dm + var/flags + ///list of reactions currently on going, this is a lazylist for optimisation + var/list/datum/equilibrium/reaction_list + ///cached list of reagents typepaths (not object references), this is a lazylist for optimisation + var/list/datum/reagent/previous_reagent_list + ///If a reaction fails due to temperature or pH, this tracks the required temperature or pH for it to be enabled. + var/list/failed_but_capable_reactions + ///Hard check to see if the reagents is presently reacting + var/is_reacting = FALSE + ///UI lookup stuff + ///Keeps the id of the reaction displayed in the ui + var/ui_reaction_id = null + ///Keeps the id of the reagent displayed in the ui + var/ui_reagent_id = null + ///The bitflag of the currently selected tags in the ui + var/ui_tags_selected = NONE + ///What index we're at if we have multiple reactions for a reagent product + var/ui_reaction_index = 1 + ///If we're syncing with the beaker - so return reactions that are actively happening + var/ui_beaker_sync = FALSE + +/datum/reagents/New(maximum = 100, new_flags = 0) + maximum_volume = maximum + flags = new_flags + +/datum/reagents/Destroy() + //We're about to delete all reagents, so lets cleanup + for(var/datum/reagent/reagent as anything in reagent_list) + qdel(reagent) + reagent_list = null + if(is_reacting) //If false, reaction list should be cleaned up + force_stop_reacting() + QDEL_LAZYLIST(reaction_list) + previous_reagent_list = null + if(my_atom && my_atom.reagents == src) + my_atom.reagents = null + my_atom = null + return ..() + + +/** + * Convenience proc to create a reagents holder for an atom + * + * Arguments: + * * max_vol - maximum volume of holder + * * flags - flags to pass to the holder + */ +/atom/proc/create_reagents(max_vol, flags) + if(reagents) + qdel(reagents) + reagents = new /datum/reagents(max_vol, flags) + reagents.my_atom = src + +/** + * Adds a reagent to this holder + * + * Arguments: + * * reagent - The reagent id to add + * * amount - Amount to add + * * list/data - Any reagent data for this reagent, used for transferring data with reagents + * * reagtemp - Temperature of this reagent, will be equalized + * * no_react - prevents reactions being triggered by this addition + * * added_purity - override to force a purity when added + * * added_ph - override to force a pH when added + * * override_base_ph - ingore the present pH of the reagent, and instead use the default (i.e. if buffers/reactions alter it) + * * ignore splitting - Don't call the process that handles reagent spliting in a mob (impure/inverse) - generally leave this false unless you care about REAGENTS_DONOTSPLIT flags (see reagent defines) + */ +/datum/reagents/proc/add_reagent( + datum/reagent/reagent_type, + amount, + list/data = null, + reagtemp = DEFAULT_REAGENT_TEMPERATURE, + added_purity = null, + added_ph, + no_react = FALSE, + override_base_ph = FALSE, + ignore_splitting = FALSE +) + if(!ispath(reagent_type)) + stack_trace("invalid reagent passed to add reagent [reagent_type]") + return FALSE + + if(!IS_FINITE(amount)) + stack_trace("non finite amount passed to add reagent [amount] [reagent_type]") + return FALSE + + if(SEND_SIGNAL(src, COMSIG_REAGENTS_PRE_ADD_REAGENT, reagent_type, amount, reagtemp, data, no_react) & COMPONENT_CANCEL_REAGENT_ADD) + return FALSE + + var/datum/reagent/glob_reagent = GLOB.chemical_reagents_list[reagent_type] + if(!glob_reagent) + stack_trace("[my_atom] attempted to add a reagent called '[reagent_type]' which doesn't exist. ([usr])") + return FALSE + if(isnull(added_purity)) //Because purity additions can be 0 + added_purity = glob_reagent.creation_purity //Usually 1 + if(!added_ph) + added_ph = glob_reagent.ph + + //Split up the reagent if it's in a mob + var/has_split = FALSE + if(!ignore_splitting && (flags & REAGENT_HOLDER_ALIVE)) //Stomachs are a pain - they will constantly call on_mob_add unless we split on addition to stomachs, but we also want to make sure we don't double split + var/adjusted_vol = process_mob_reagent_purity(glob_reagent, amount, added_purity) + if(!adjusted_vol) //If we're inverse or FALSE cancel addition + return amount + /* We return true here because of #63301 + The only cases where this will be false or 0 if its an inverse chem, an impure chem of 0 purity (highly unlikely if even possible), or if glob_reagent is null (which shouldn't happen at all as there's a check for that a few lines up), + In the first two cases, we would want to return TRUE so trans_to and other similar methods actually delete the corresponding chemical from the original reagent holder. + */ + amount = adjusted_vol + has_split = TRUE + + var/cached_total = total_volume + if(cached_total + amount > maximum_volume) + amount = maximum_volume - cached_total //Doesnt fit in. Make it disappear. shouldn't happen. Will happen. + amount = round(amount, CHEMICAL_QUANTISATION_LEVEL) + if(amount <= 0) + return FALSE + + var/cached_temp = chem_temp + var/list/cached_reagents = reagent_list + + //Equalize temperature - Not using specific_heat() because the new chemical isn't in yet. + var/old_heat_capacity = 0 + if(reagtemp != cached_temp) + for(var/datum/reagent/iter_reagent as anything in cached_reagents) + old_heat_capacity += iter_reagent.specific_heat * iter_reagent.volume + + //add the reagent to the existing if it exists + for(var/datum/reagent/iter_reagent as anything in cached_reagents) + if(iter_reagent.type == reagent_type) + if(override_base_ph) + added_ph = iter_reagent.ph + iter_reagent.purity = ((iter_reagent.creation_purity * iter_reagent.volume) + (added_purity * amount)) /(iter_reagent.volume + amount) //This should add the purity to the product + iter_reagent.creation_purity = iter_reagent.purity + iter_reagent.ph = ((iter_reagent.ph * (iter_reagent.volume)) + (added_ph * amount)) / (iter_reagent.volume + amount) + iter_reagent.volume += amount + update_total() + + iter_reagent.on_merge(data, amount) + if(reagtemp != cached_temp) + var/new_heat_capacity = heat_capacity() + if(new_heat_capacity) + set_temperature(((old_heat_capacity * cached_temp) + (iter_reagent.specific_heat * amount * reagtemp)) / new_heat_capacity) + else + set_temperature(reagtemp) + + SEND_SIGNAL(src, COMSIG_REAGENTS_ADD_REAGENT, iter_reagent, amount, reagtemp, data, no_react) + if(!no_react && !is_reacting) //To reduce the amount of calculations for a reaction the reaction list is only updated on a reagents addition. + handle_reactions() + return amount + + //otherwise make a new one + var/datum/reagent/new_reagent = new reagent_type(data) + cached_reagents += new_reagent + new_reagent.holder = src + new_reagent.volume = amount + new_reagent.purity = added_purity + new_reagent.creation_purity = added_purity + new_reagent.ph = added_ph + new_reagent.on_new(data) + + if(isliving(my_atom)) + new_reagent.on_mob_add(my_atom, amount) //Must occur before it could posibly run on_mob_delete + + if(has_split) //prevent it from splitting again + new_reagent.chemical_flags |= REAGENT_DONOTSPLIT + + update_total() + if(reagtemp != cached_temp) + var/new_heat_capacity = heat_capacity() + if(new_heat_capacity) + set_temperature(((old_heat_capacity * cached_temp) + (new_reagent.specific_heat * amount * reagtemp)) / new_heat_capacity) + else + set_temperature(reagtemp) + + SEND_SIGNAL(src, COMSIG_REAGENTS_NEW_REAGENT, new_reagent, amount, reagtemp, data, no_react) + if(!no_react) + handle_reactions() + return amount + +/** + * Like add_reagent but you can enter a list. + * Arguments + * + * * [list_reagents][list] - list to add. Format it like this: list(/datum/reagent/toxin = 10, "beer" = 15) + * * [data][list] - additional data to add + */ +/datum/reagents/proc/add_reagent_list(list/list_reagents, list/data = null) + for(var/r_id in list_reagents) + var/amt = list_reagents[r_id] + add_reagent(r_id, amt, data) + +/** + * Removes a specific reagent. can supress reactions if needed + * Arguments + * + * * [reagent_type][datum/reagent] - the type of reagent + * * amount - the volume to remove + * * safety - if FALSE will initiate reactions upon removing. used for trans_id_to + * * include_subtypes - if TRUE will remove the specified amount from all subtypes of reagent_type as well + */ +/datum/reagents/proc/remove_reagent(datum/reagent/reagent_type, amount, safety = TRUE, include_subtypes = FALSE) + if(!ispath(reagent_type)) + stack_trace("invalid reagent passed to remove reagent [reagent_type]") + return FALSE + + if(!IS_FINITE(amount)) + stack_trace("non finite amount passed to remove reagent [amount] [reagent_type]") + return FALSE + + amount = round(amount, CHEMICAL_QUANTISATION_LEVEL) + if(amount <= 0) + return FALSE + + var/total_removed_amount = 0 + var/remove_amount = 0 + var/list/cached_reagents = reagent_list + for(var/datum/reagent/cached_reagent as anything in cached_reagents) + //check for specific type or subtypes + if(!include_subtypes) + if(cached_reagent.type != reagent_type) + continue + else if(!istype(cached_reagent, reagent_type)) + continue + + remove_amount = min(cached_reagent.volume, amount) + cached_reagent.volume -= remove_amount + + update_total() + if(!safety)//So it does not handle reactions when it need not to + handle_reactions() + SEND_SIGNAL(src, COMSIG_REAGENTS_REM_REAGENT, QDELING(cached_reagent) ? reagent_type : cached_reagent, amount) + + total_removed_amount += remove_amount + + //if we reached here means we have found our specific reagent type so break + if(!include_subtypes) + break + + return total_removed_amount + +/** + * Removes a reagent at random and by a random quantity till the specified amount has been removed. + * Used to create a shower/spray effect for e.g. when you spill a bottle or turn a shower on + * and you want an chaotic effect of whatever coming out + * Arguments + * + * * amount- the volume to remove + */ +/datum/reagents/proc/remove_any(amount = 1) + if(!IS_FINITE(amount)) + stack_trace("non finite amount passed to remove any reagent [amount]") + return FALSE + + amount = round(amount, CHEMICAL_QUANTISATION_LEVEL) + if(amount <= 0) + return FALSE + + var/list/cached_reagents = reagent_list + var/total_removed = 0 + var/current_list_element = 1 + var/initial_list_length = cached_reagents.len //stored here because removing can cause some reagents to be deleted, ergo length change. + + current_list_element = rand(1, cached_reagents.len) + + while(total_removed != amount) + if(total_removed >= amount) + break + if(total_volume <= 0 || !cached_reagents.len) + break + + if(current_list_element > cached_reagents.len) + current_list_element = 1 + + var/datum/reagent/target_holder = cached_reagents[current_list_element] + var/remove_amt = min(amount - total_removed, round(amount / rand(2, initial_list_length), round(amount / 10, 0.01))) //double round to keep it at a somewhat even spread relative to amount without getting funky numbers. + //min ensures we don't go over amount. + remove_reagent(target_holder.type, remove_amt) + + current_list_element++ + total_removed += remove_amt + + handle_reactions() + return total_removed //this should be amount unless the loop is prematurely broken, in which case it'll be lower. It shouldn't ever go OVER amount. + +/** + * Removes all reagents by an amount equal to + * [amount specified] / total volume present in this holder + * Arguments + * + * * amount - the volume of each reagent + */ + +/datum/reagents/proc/remove_all(amount = 1) + if(!total_volume) + return FALSE + + if(!IS_FINITE(amount)) + stack_trace("non finite amount passed to remove all reagents [amount]") + return FALSE + + amount = round(amount, CHEMICAL_QUANTISATION_LEVEL) + if(amount <= 0) + return FALSE + + var/list/cached_reagents = reagent_list + var/part = amount / total_volume + var/total_removed_amount = 0 + + for(var/datum/reagent/reagent as anything in cached_reagents) + total_removed_amount += remove_reagent(reagent.type, reagent.volume * part) + + handle_reactions() + return round(total_removed_amount, CHEMICAL_VOLUME_ROUNDING) + +/** + * Removes an specific reagent from this holder + * Arguments + * + * * [target_reagent_typepath][datum/reagent] - type typepath of the reagent to remove + */ +/datum/reagents/proc/del_reagent(datum/reagent/target_reagent_typepath) + if(!ispath(target_reagent_typepath)) + stack_trace("invalid reagent path passed to del reagent [target_reagent_typepath]") + return FALSE + + //setting the volume to 0 will allow update_total() to clear it up for us + var/list/cached_reagents = reagent_list + for(var/datum/reagent/reagent as anything in cached_reagents) + if(reagent.type == target_reagent_typepath) + reagent.volume = 0 + update_total() + return TRUE + + return FALSE + +/** + * Turn one reagent into another, preserving volume, temp, purity, ph + * Arguments + * + * * [source_reagent_typepath][/datum/reagent] - the typepath of the reagent you are trying to convert + * * [target_reagent_typepath][/datum/reagent] - the final typepath the source_reagent_typepath will be converted into + * * multiplier - the multiplier applied on the source_reagent_typepath volume before converting + * * include_source_subtypes- if TRUE will convert all subtypes of source_reagent_typepath into target_reagent_typepath as well + */ +/datum/reagents/proc/convert_reagent( + datum/reagent/source_reagent_typepath, + datum/reagent/target_reagent_typepath, + multiplier = 1, + include_source_subtypes = FALSE +) + if(!ispath(source_reagent_typepath)) + stack_trace("invalid reagent path passed to convert reagent [source_reagent_typepath]") + return FALSE + + var/reagent_amount + var/reagent_purity + var/reagent_ph + if(include_source_subtypes) + reagent_ph = ph + var/weighted_purity + var/list/reagent_type_list = typecacheof(source_reagent_typepath) + for(var/datum/reagent/reagent as anything in reagent_list) + if(reagent.type in reagent_type_list) + weighted_purity += reagent.volume * reagent.purity + reagent_amount += reagent.volume + remove_reagent(reagent.type, reagent.volume * multiplier) + reagent_purity = weighted_purity / reagent_amount + else + var/datum/reagent/source_reagent = has_reagent(source_reagent_typepath) + reagent_amount = source_reagent.volume + reagent_purity = source_reagent.purity + reagent_ph = source_reagent.ph + remove_reagent(source_reagent_typepath, reagent_amount) + add_reagent(target_reagent_typepath, reagent_amount * multiplier, reagtemp = chem_temp, added_purity = reagent_purity, added_ph = reagent_ph) + +/// Removes all reagents +/datum/reagents/proc/clear_reagents() + var/list/cached_reagents = reagent_list + + //setting volume to 0 will allow update_total() to clean it up + for(var/datum/reagent/reagent as anything in cached_reagents) + reagent.volume = 0 + update_total() + + SEND_SIGNAL(src, COMSIG_REAGENTS_CLEAR_REAGENTS) + +/** + * Transfer some stuff from this holder to a target object + * + * Arguments: + * * obj/target - Target to attempt transfer to + * * amount - amount of reagent volume to transfer + * * multiplier - multiplies each reagent amount by this number well byond their available volume before transfering. used to create reagents from thin air if you ever need to + * * datum/reagent/target_id - transfer only this reagent in this holder leaving others untouched + * * preserve_data - if preserve_data=0, the reagents data will be lost. Usefull if you use data for some strange stuff and don't want it to be transferred. + * * no_react - passed through to [/datum/reagents/proc/add_reagent] + * * mob/transferred_by - used for logging + * * remove_blacklisted - skips transferring of reagents without REAGENT_CAN_BE_SYNTHESIZED in chemical_flags + * * methods - passed through to [/datum/reagents/proc/expose] and [/datum/reagent/proc/on_transfer] + * * show_message - passed through to [/datum/reagents/proc/expose] + * * ignore_stomach - when using methods INGEST will not use the stomach as the target + */ +/datum/reagents/proc/trans_to( + atom/target, + amount = 1, + multiplier = 1, + datum/reagent/target_id, + preserve_data = TRUE, + no_react = FALSE, + mob/transferred_by, + remove_blacklisted = FALSE, + methods = NONE, + show_message = TRUE, + ignore_stomach = FALSE +) + if(QDELETED(target) || !total_volume) + return FALSE + + if(!IS_FINITE(amount)) + stack_trace("non finite amount passed to trans_to [amount] amount of reagents") + return FALSE + + if(!isnull(target_id) && !ispath(target_id)) + stack_trace("invalid target reagent id [target_id] passed to trans_to") + return FALSE + + var/list/cached_reagents = reagent_list + + var/atom/target_atom + var/datum/reagents/target_holder + if(istype(target, /datum/reagents)) + target_holder = target + target_atom = target_holder.my_atom + else + if(!ignore_stomach && (methods & INGEST) && iscarbon(target)) + var/mob/living/carbon/eater = target + var/obj/item/organ/internal/stomach/belly = eater.get_organ_slot(ORGAN_SLOT_STOMACH) + if(!belly) + var/expel_amount = round(amount, CHEMICAL_QUANTISATION_LEVEL) + if(expel_amount > 0 ) + eater.expel_ingested(my_atom, expel_amount) + return + target_holder = belly.reagents + target_atom = belly + else if(!target.reagents) + return + else + target_holder = target.reagents + target_atom = target + + var/cached_amount = amount + + // Prevents small amount problems, as well as zero and below zero amounts. + amount = round(min(amount, total_volume, target_holder.maximum_volume - target_holder.total_volume), CHEMICAL_QUANTISATION_LEVEL) + if(amount <= 0) + return FALSE + + //Set up new reagents to inherit the old ongoing reactions + if(!no_react) + transfer_reactions(target_holder) + + var/trans_data = null + var/list/transfer_log = list() + var/list/r_to_send = list() // Validated list of reagents to be exposed + var/list/reagents_to_remove = list() + + var/part = isnull(target_id) ? (amount / total_volume) : 1 + var/transfer_amount + var/transfered_amount + var/total_transfered_amount = 0 + + //first add reagents to target + for(var/datum/reagent/reagent as anything in cached_reagents) + if(remove_blacklisted && !(reagent.chemical_flags & REAGENT_CAN_BE_SYNTHESIZED)) + continue + + if(!isnull(target_id)) + if(reagent.type == target_id) + force_stop_reagent_reacting(reagent) + transfer_amount = min(amount, reagent.volume) + else + continue + else + transfer_amount = reagent.volume * part + + if(preserve_data) + trans_data = copy_data(reagent) + if(reagent.intercept_reagents_transfer(target_holder, cached_amount)) + continue + transfered_amount = target_holder.add_reagent(reagent.type, transfer_amount * multiplier, trans_data, chem_temp, reagent.purity, reagent.ph, no_react = TRUE, ignore_splitting = reagent.chemical_flags & REAGENT_DONOTSPLIT) //we only handle reaction after every reagent has been transferred. + if(!transfered_amount) + continue + if(methods) + r_to_send += reagent + reagents_to_remove += list(list("R" = reagent, "T" = transfer_amount)) + total_transfered_amount += transfered_amount + + if(!isnull(target_id)) + break + + //expose target to reagent changes + if(methods) + target_holder.expose(isorgan(target_atom) ? target : target_atom, methods, part, show_message, r_to_send) + + //remove chemicals that were added above + for(var/list/data as anything in reagents_to_remove) + var/datum/reagent/reagent = data["R"] + transfer_amount = data["T"] + if(methods) + reagent.on_transfer(target_atom, methods, transfer_amount) + remove_reagent(reagent.type, transfer_amount) + transfer_log[reagent.type] = list(REAGENT_TRANSFER_AMOUNT = transfer_amount, REAGENT_PURITY = reagent.purity) + + if(transferred_by && target_atom) + target_atom.add_hiddenprint(transferred_by) //log prints so admins can figure out who touched it last. + log_combat(transferred_by, target_atom, "transferred reagents ([get_external_reagent_log_string(transfer_log)]) from [my_atom] to") + + update_total() + target_holder.update_total() + if(!no_react) + target_holder.handle_reactions() + src.handle_reactions() + + return round(total_transfered_amount, CHEMICAL_VOLUME_ROUNDING) + +/** + * Copies the reagents to the target object + * Arguments + * + * * [target][obj] - the target to transfer reagents to + * * multiplier - multiplies each reagent amount by this number well byond their available volume before transfering. used to create reagents from thin air if you ever need to + * * preserve_data - preserve user data of all reagents after transfering + * * no_react - if TRUE will not handle reactions + */ +/datum/reagents/proc/copy_to( + atom/target, + amount = 1, + multiplier = 1, + preserve_data = TRUE, + no_react = FALSE +) + if(QDELETED(target) || !total_volume) + return + + if(!IS_FINITE(amount)) + stack_trace("non finite amount passed to copy_to [amount] amount of reagents") + return FALSE + + var/datum/reagents/target_holder + if(istype(target, /datum/reagents)) + target_holder = target + else + if(!target.reagents) + return + target_holder = target.reagents + + // Prevents small amount problems, as well as zero and below zero amounts. + amount = round(min(amount, total_volume, target_holder.maximum_volume - target_holder.total_volume), CHEMICAL_QUANTISATION_LEVEL) + if(amount <= 0) + return + + var/list/cached_reagents = reagent_list + var/part = amount / total_volume + var/transfer_amount + var/transfered_amount = 0 + var/total_transfered_amount = 0 + var/trans_data = null + + for(var/datum/reagent/reagent as anything in cached_reagents) + transfer_amount = reagent.volume * part * multiplier + if(preserve_data) + trans_data = copy_data(reagent) + transfered_amount = target_holder.add_reagent(reagent.type, transfer_amount, trans_data, chem_temp, reagent.purity, reagent.ph, no_react = TRUE, ignore_splitting = reagent.chemical_flags & REAGENT_DONOTSPLIT) + if(!transfered_amount) + continue + total_transfered_amount += transfered_amount + + if(!no_react) + // pass over previous ongoing reactions before handle_reactions is called + transfer_reactions(target_holder) + + target_holder.update_total() + target_holder.handle_reactions() + + return round(total_transfered_amount, CHEMICAL_VOLUME_ROUNDING) + +/** + * Multiplies the reagents inside this holder by a specific amount + * Arguments + * * multiplier - the amount to multiply each reagent by + */ +/datum/reagents/proc/multiply_reagents(multiplier = 1) + var/list/cached_reagents = reagent_list + if(!total_volume) + return + var/change = (multiplier - 1) //Get the % change + for(var/datum/reagent/reagent as anything in cached_reagents) + if(change > 0) + add_reagent(reagent.type, reagent.volume * change, added_purity = reagent.purity, ignore_splitting = reagent.chemical_flags & REAGENT_DONOTSPLIT) + else + remove_reagent(reagent.type, abs(reagent.volume * change)) //absolute value to prevent a double negative situation (removing -50% would be adding 50%) + + update_total() + handle_reactions() + +/// Updates [/datum/reagents/var/total_volume] +/datum/reagents/proc/update_total() + var/list/cached_reagents = reagent_list + var/list/deleted_reagents = list() + var/chem_index = 1 + var/num_reagents = length(cached_reagents) + var/total_ph = 0 + var/reagent_volume = 0 + . = 0 + + //responsible for removing reagents and computing total ph & volume + //all it's code was taken out of del_reagent() initially for efficiency purposes + while(chem_index <= num_reagents) + var/datum/reagent/reagent = cached_reagents[chem_index] + chem_index += 1 + reagent_volume = round(reagent.volume, CHEMICAL_QUANTISATION_LEVEL) //round to this many decimal places + + //remove very small amounts of reagents + if(!reagent_volume || (reagent_volume <= 0.05 && !is_reacting)) + //end metabolization + if(isliving(my_atom)) + if(reagent.metabolizing) + reagent.metabolizing = FALSE + reagent.on_mob_end_metabolize(my_atom) + reagent.on_mob_delete(my_atom) + + //removing it and store in a seperate list for processing later + cached_reagents -= reagent + LAZYREMOVE(previous_reagent_list, reagent.type) + deleted_reagents += reagent + + //move pointer back so we don't overflow & decrease length + chem_index -= 1 + num_reagents -= 1 + continue + + //compute volume & ph like we would normally + . += reagent_volume + total_ph += reagent.ph * reagent_volume + + //reasign rounded value + reagent.volume = reagent_volume + + //assign the final values, rounding up can sometimes cause overflow so bring it down + total_volume = min(round(., CHEMICAL_VOLUME_ROUNDING), maximum_volume) + if(!total_volume) + ph = CHEMICAL_NORMAL_PH + else + ph = clamp(total_ph / total_volume, CHEMICAL_MIN_PH, CHEMICAL_MAX_PH) + + //now send the signals after the volume & ph has been computed + for(var/datum/reagent/deleted_reagent as anything in deleted_reagents) + SEND_SIGNAL(src, COMSIG_REAGENTS_DEL_REAGENT, deleted_reagent) + qdel(deleted_reagent) + +/** + * Shallow copies (deep copy of viruses) data from the provided reagent into our copy of that reagent + * Arguments + * [current_reagent][datum/reagent] - the reagent(not typepath) to copy data from + */ +/datum/reagents/proc/copy_data(datum/reagent/current_reagent) + if(!current_reagent || !current_reagent.data) + return null + if(!istype(current_reagent.data, /list)) + return current_reagent.data + + var/list/trans_data = current_reagent.data.Copy() + + // We do this so that introducing a virus to a blood sample + // doesn't automagically infect all other blood samples from + // the same donor. + // + // Technically we should probably copy all data lists, but + // that could possibly eat up a lot of memory needlessly + // if most data lists are read-only. + if(trans_data["viruses"]) + var/list/v = trans_data["viruses"] + trans_data["viruses"] = v.Copy() + + return trans_data + +//===============================Generic getters======================================= +/** + * Returns a reagent from this holder if it matches all the specified arguments + * Arguments + * + * * [target_reagent][datum/reagent] - the reagent typepath to check for. can be null to return any reagent + * * amount - checks for having a specific amount of that chemical + * * needs_metabolizing - takes into consideration if the chemical is matabolizing when it's checked. + * * check_subtypes - controls whether it should it should also include subtypes: ispath(type, reagent) versus type == reagent. + * * chemical_flags - checks for reagent flags. + */ +/datum/reagents/proc/has_reagent( + datum/reagent/target_reagent, + amount = -1, + needs_metabolizing = FALSE, + check_subtypes = FALSE, + chemical_flags = NONE +) + if(!isnull(target_reagent) && !ispath(target_reagent)) + stack_trace("invalid reagent path passed to has reagent [target_reagent]") + return FALSE + + var/list/cached_reagents = reagent_list + for(var/datum/reagent/holder_reagent as anything in cached_reagents) + //finding for a specific reagent + if(!isnull(target_reagent)) + //first find for specific type or subtype + if(!check_subtypes) + if(holder_reagent.type != target_reagent) + continue + else if(!istype(holder_reagent, target_reagent)) + continue + + //next check if we have the requested amount + if(amount > 0 && holder_reagent.volume < amount) + continue + + //next check for metabolization + if(needs_metabolizing && !holder_reagent.metabolizing) + continue + + //next check if it has the specified flag + if(chemical_flags && !(holder_reagent.chemical_flags & chemical_flags)) + continue + + //after all that if we get here then we have found our reagent + return holder_reagent + + return FALSE + + +/// Get a reference to the reagent there is the most of in this holder +/datum/reagents/proc/get_master_reagent() + var/list/cached_reagents = reagent_list + var/datum/reagent/master + var/max_volume = 0 + for(var/datum/reagent/reagent as anything in cached_reagents) + if(reagent.volume > max_volume) + max_volume = reagent.volume + master = reagent + + return master + + +//================================Exposure(to apply reagent effects)====================== +/** + * Applies the relevant expose_ proc for every reagent in this holder + * * [/datum/reagent/proc/expose_mob] + * * [/datum/reagent/proc/expose_turf] + * * [/datum/reagent/proc/expose_obj] + * + * Arguments + * - Atom/target: What mob/turf/object is being exposed to reagents? This is your reaction target. + * - Methods: What reaction type is the reagent itself going to call on the reaction target? Types are TOUCH, INGEST, VAPOR, PATCH, and INJECT. + * - Volume_modifier: What is the reagent volume multiplied by when exposed? Note that this is called on the volume of EVERY reagent in the base body, so factor in your Maximum_Volume if necessary! + * - Show_message: Whether to display anything to mobs when they are exposed. + * - list/datum/reagent/r_to_expose: list of reagents to expose. if null will expose the reagents present in this holder instead + */ +/datum/reagents/proc/expose(atom/target, methods = TOUCH, volume_modifier = 1, show_message = 1, list/datum/reagent/r_to_expose = null) + if(isnull(target)) + return null + + var/list/target_reagents = isnull(r_to_expose) ? reagent_list : r_to_expose + if(!target_reagents.len) + return null + + var/list/datum/reagent/reagents = list() + for(var/datum/reagent/reagent as anything in target_reagents) + reagents[reagent] = reagent.volume * volume_modifier + + return target.expose_reagents(reagents, src, methods, volume_modifier, show_message) + +/** + * Applies heat to this holder + * Arguments + * + * * temperature - the temperature we to heat/cool by + * * coeff - multiplier to be applied on temp diff between param temp and current temp + */ +/datum/reagents/proc/expose_temperature(temperature, coeff = 0.02) + if(istype(my_atom,/obj/item/reagent_containers)) + var/obj/item/reagent_containers/RCs = my_atom + if(RCs.reagent_flags & NO_REACT) //stasis holders IE cryobeaker + return + var/temp_delta = (temperature - chem_temp) * coeff + if(temp_delta > 0) + chem_temp = min(chem_temp + max(temp_delta, 1), temperature) + else + chem_temp = max(chem_temp + min(temp_delta, -1), temperature) + set_temperature(round(chem_temp)) + handle_reactions() + + +//===============================Logging========================================== +/** + * Outputs a log-friendly list of reagents based on an external reagent list. + * + * Arguments: + * * external_list - Assoc list of (reagent_type) = list(REAGENT_TRANSFER_AMOUNT = amounts, REAGENT_PURITY = purity) + */ +/datum/reagents/proc/get_external_reagent_log_string(external_list) + if(!length(external_list)) + return "no reagents" + + var/list/data = list() + + for(var/reagent_type in external_list) + var/list/qualities = external_list[reagent_type] + data += "[reagent_type] ([round(qualities[REAGENT_TRANSFER_AMOUNT], CHEMICAL_QUANTISATION_LEVEL)]u, [qualities[REAGENT_PURITY]] purity)" + + return english_list(data) + +/// Outputs a log-friendly list of reagents based on the internal reagent_list. +/datum/reagents/proc/get_reagent_log_string() + if(!length(reagent_list)) + return "no reagents" + + var/list/data = list() + + for(var/datum/reagent/reagent as anything in reagent_list) + data += "[reagent.type] ([round(reagent.volume, CHEMICAL_QUANTISATION_LEVEL)]u, [reagent.purity] purity)" + + return english_list(data) + +#undef REAGENT_TRANSFER_AMOUNT +#undef REAGENT_PURITY diff --git a/code/modules/reagents/chemistry/holder/mob_life.dm b/code/modules/reagents/chemistry/holder/mob_life.dm new file mode 100644 index 00000000000000..f2d079c1146a03 --- /dev/null +++ b/code/modules/reagents/chemistry/holder/mob_life.dm @@ -0,0 +1,161 @@ +/** + * Triggers metabolizing for all the reagents in this holder + * + * Arguments: + * * mob/living/carbon/carbon - The mob to metabolize in, if null it uses [/datum/reagents/var/my_atom] + * * seconds_per_tick - the time in server seconds between proc calls (when performing normally it will be 2) + * * times_fired - the number of times the owner's life() tick has been called aka The number of times SSmobs has fired + * * can_overdose - Allows overdosing + * * liverless - Stops reagents that aren't set as [/datum/reagent/var/self_consuming] from metabolizing + */ +/datum/reagents/proc/metabolize(mob/living/carbon/owner, seconds_per_tick, times_fired, can_overdose = FALSE, liverless = FALSE, dead = FALSE) + var/list/cached_reagents = reagent_list + if(owner) + expose_temperature(owner.bodytemperature, 0.25) + + var/need_mob_update = FALSE + var/obj/item/organ/internal/stomach/belly = owner.get_organ_slot(ORGAN_SLOT_STOMACH) + var/obj/item/organ/internal/liver/liver = owner.get_organ_slot(ORGAN_SLOT_LIVER) + var/liver_tolerance + if(liver) + var/liver_health_percent = (liver.maxHealth - liver.damage) / liver.maxHealth + liver_tolerance = liver.toxTolerance * liver_health_percent + + for(var/datum/reagent/reagent as anything in cached_reagents) + // skip metabolizing effects for small units of toxins + if(istype(reagent, /datum/reagent/toxin) && liver && !dead) + var/datum/reagent/toxin/toxin = reagent + var/amount = toxin.volume + if(belly) + amount += belly.reagents.get_reagent_amount(toxin.type) + + if(amount <= liver_tolerance) + owner.reagents.remove_reagent(toxin.type, toxin.metabolization_rate * owner.metabolism_efficiency * seconds_per_tick) + continue + + need_mob_update += metabolize_reagent(owner, reagent, seconds_per_tick, times_fired, can_overdose, liverless, dead) + + if(owner && need_mob_update) //some of the metabolized reagents had effects on the mob that requires some updates. + owner.updatehealth() + update_total() + +/* + * Metabolises a single reagent for a target owner carbon mob. See above. + * + * Arguments: + * * mob/living/carbon/owner - The mob to metabolize in, if null it uses [/datum/reagents/var/my_atom] + * * seconds_per_tick - the time in server seconds between proc calls (when performing normally it will be 2) + * * times_fired - the number of times the owner's life() tick has been called aka The number of times SSmobs has fired + * * can_overdose - Allows overdosing + * * liverless - Stops reagents that aren't set as [/datum/reagent/var/self_consuming] from metabolizing + */ +/datum/reagents/proc/metabolize_reagent(mob/living/carbon/owner, datum/reagent/reagent, seconds_per_tick, times_fired, can_overdose = FALSE, liverless = FALSE, dead = FALSE) + var/need_mob_update = FALSE + if(QDELETED(reagent.holder)) + return FALSE + + if(!owner) + owner = reagent.holder.my_atom + + //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION + var/can_process = reagent_process_flags_valid(owner, reagent) + //If the mob can't process it, remove the reagent at it's normal rate without doing any addictions, overdoses, or on_mob_life() for the reagent + if(!can_process) + reagent.holder.remove_reagent(reagent.type, reagent.metabolization_rate) + return + //NOVA EDIT ADDITION END + + if(owner && reagent && (!dead || (reagent.chemical_flags & REAGENT_DEAD_PROCESS))) + if(owner.reagent_check(reagent, seconds_per_tick, times_fired)) + return + if(liverless && !reagent.self_consuming) //need to be metabolized + return + if(!reagent.metabolizing) + reagent.metabolizing = TRUE + reagent.on_mob_metabolize(owner) + if(can_overdose && !HAS_TRAIT(owner, TRAIT_OVERDOSEIMMUNE)) + if(reagent.overdose_threshold) + if(reagent.volume >= reagent.overdose_threshold && !reagent.overdosed) + reagent.overdosed = TRUE + need_mob_update += reagent.overdose_start(owner) + owner.log_message("has started overdosing on [reagent.name] at [reagent.volume] units.", LOG_GAME) + for(var/addiction in reagent.addiction_types) + owner.mind?.add_addiction_points(addiction, reagent.addiction_types[addiction] * REAGENTS_METABOLISM) + + if(reagent.overdosed) + need_mob_update += reagent.overdose_process(owner, seconds_per_tick, times_fired) + reagent.current_cycle++ + need_mob_update += reagent.on_mob_life(owner, seconds_per_tick, times_fired) + if(dead && !QDELETED(owner) && !QDELETED(reagent)) + need_mob_update += reagent.on_mob_dead(owner, seconds_per_tick) + if(!QDELETED(owner) && !QDELETED(reagent)) + reagent.metabolize_reagent(owner, seconds_per_tick, times_fired) + + return need_mob_update + +/** + * Signals that metabolization has stopped, triggering the end of trait-based effects + * Arguments + * + * * [C][mob/living/carbon] - the mob to end metabolization on + * * keep_liverless - if true will work without a liver + */ +/datum/reagents/proc/end_metabolization(mob/living/carbon/C, keep_liverless = TRUE) + var/list/cached_reagents = reagent_list + for(var/datum/reagent/reagent as anything in cached_reagents) + if(QDELETED(reagent.holder)) + continue + if(keep_liverless && reagent.self_consuming) //Will keep working without a liver + continue + if(!C) + C = reagent.holder.my_atom + if(reagent.metabolizing) + reagent.metabolizing = FALSE + reagent.on_mob_end_metabolize(C) + +/** + * Processes the reagents in the holder and converts them, only called in a mob/living/carbon on addition + * + * Arguments: + * * reagent - the added reagent datum/object + * * added_volume - the volume of the reagent that was added (since it can already exist in a mob) + * * added_purity - the purity of the added volume + * returns the volume of the original, pure, reagent to add / keep + */ +/datum/reagents/proc/process_mob_reagent_purity(datum/reagent/reagent, added_volume, added_purity) + if(!reagent) + stack_trace("Attempted to process a mob's reagent purity for a null reagent!") + return FALSE + if(added_purity == 1) + return added_volume + if(reagent.chemical_flags & REAGENT_DONOTSPLIT) + return added_volume + if(added_purity < 0) + stack_trace("Purity below 0 for chem on mob splitting: [reagent.type]!") + added_purity = 0 + + if((reagent.inverse_chem_val > added_purity) && (reagent.inverse_chem))//Turns all of a added reagent into the inverse chem + add_reagent(reagent.inverse_chem, added_volume, FALSE, added_purity = reagent.get_inverse_purity(reagent.creation_purity)) + var/datum/reagent/inverse_reagent = has_reagent(reagent.inverse_chem) + if(inverse_reagent.chemical_flags & REAGENT_SNEAKYNAME) + inverse_reagent.name = reagent.name//Negative effects are hidden + return FALSE //prevent addition + return added_volume + +/** + * Processes any chems that have the REAGENT_IGNORE_STASIS bitflag ONLY + * Arguments + * + * * [owner][mob/living/carbon] - the mob we are doing stasis handlng on + * * seconds_per_tick - passed from process + * * times_fired - number of times to metabolize this reagent + */ +/datum/reagents/proc/handle_stasis_chems(mob/living/carbon/owner, seconds_per_tick, times_fired) + var/need_mob_update = FALSE + for(var/datum/reagent/reagent as anything in reagent_list) + if(!(reagent.chemical_flags & REAGENT_IGNORE_STASIS)) + continue + need_mob_update += metabolize_reagent(owner, reagent, seconds_per_tick, times_fired, can_overdose = TRUE) + if(owner && need_mob_update) //some of the metabolized reagents had effects on the mob that requires some updates. + owner.updatehealth() + update_total() diff --git a/code/modules/reagents/chemistry/holder/properties.dm b/code/modules/reagents/chemistry/holder/properties.dm new file mode 100644 index 00000000000000..b949866a6d447f --- /dev/null +++ b/code/modules/reagents/chemistry/holder/properties.dm @@ -0,0 +1,195 @@ +//============================VOLUME====================================== +/// Is this holder full or not +/datum/reagents/proc/holder_full() + return total_volume >= maximum_volume + +/** + * Get the amount of this reagent or the sum of all its subtypes if specified + * Arguments + * * [reagent][datum/reagent] - the typepath of the reagent to look for + * * type_check - see defines under reagents.dm file + */ +/datum/reagents/proc/get_reagent_amount(datum/reagent/reagent, type_check = REAGENT_STRICT_TYPE) + if(!ispath(reagent)) + stack_trace("invalid path passed to get_reagent_amount [reagent]") + return 0 + var/list/cached_reagents = reagent_list + + var/total_amount = 0 + for(var/datum/reagent/cached_reagent as anything in cached_reagents) + switch(type_check) + if(REAGENT_STRICT_TYPE) + if(cached_reagent.type != reagent) + continue + if(REAGENT_PARENT_TYPE) //to simulate typesof() which returns the type and then child types + if(cached_reagent.type != reagent && type2parent(cached_reagent.type) != reagent) + continue + else + if(!istype(cached_reagent, reagent)) + continue + + total_amount += cached_reagent.volume + + //short cut to break when we have found our one exact type + if(type_check == REAGENT_STRICT_TYPE) + return total_amount + + return round(total_amount, CHEMICAL_VOLUME_ROUNDING) + + +//======================PH(clamped between 0->14)======================================== +/* +* Adjusts the base pH of all of the reagents in a beaker +* +* - moves it towards acidic +* + moves it towards basic +* Arguments: +* * value - How much to adjust the base pH by +*/ +/datum/reagents/proc/adjust_all_reagents_ph(value) + for(var/datum/reagent/reagent as anything in reagent_list) + reagent.ph = clamp(reagent.ph + value, CHEMICAL_MIN_PH, CHEMICAL_MAX_PH) + +/* +* Adjusts the base pH of a specific type +* +* - moves it towards acidic +* + moves it towards basic +* Arguments: +* * input_reagent - type path of the reagent +* * value - How much to adjust the base pH by +*/ +/datum/reagents/proc/adjust_specific_reagent_ph(input_reagent, value) + var/datum/reagent/reagent = has_reagent(input_reagent) + if(!reagent) //We can call this with missing reagents. + return FALSE + reagent.ph = clamp(reagent.ph + value, CHEMICAL_MIN_PH, CHEMICAL_MAX_PH) + + +//==========================TEMPERATURE====================================== +/// Returns the total heat capacity for all of the reagents currently in this holder. +/datum/reagents/proc/heat_capacity() + . = 0 + var/list/cached_reagents = reagent_list //cache reagents + for(var/datum/reagent/reagent in cached_reagents) + . += reagent.specific_heat * reagent.volume + +/** Adjusts the thermal energy of the reagents in this holder by an amount. + * + * Arguments: + * - delta_energy: The amount to change the thermal energy by. + * - min_temp: The minimum temperature that can be reached. + * - max_temp: The maximum temperature that can be reached. + */ +/datum/reagents/proc/adjust_thermal_energy(delta_energy, min_temp = 2.7, max_temp = 1000) + var/heat_capacity = heat_capacity() + if(!heat_capacity) + return // no div/0 please + set_temperature(clamp(chem_temp + (delta_energy / heat_capacity), min_temp, max_temp)) + +/** Sets the temperature of this reagent container to a new value. + * + * Handles setter signals. + * + * Arguments: + * - _temperature: The new temperature value. + */ +/datum/reagents/proc/set_temperature(_temperature) + if(_temperature == chem_temp) + return + + . = chem_temp + chem_temp = clamp(_temperature, 0, CHEMICAL_MAXIMUM_TEMPERATURE) + SEND_SIGNAL(src, COMSIG_REAGENTS_TEMP_CHANGE, _temperature, .) + +//==============================PURITY========================================== +/** + * Get the purity of this reagent + * Arguments + * * [reagent][datum/reagent] - the typepath of the specific reagent to get purity of + */ +/datum/reagents/proc/get_reagent_purity(datum/reagent/reagent) + if(!ispath(reagent)) + stack_trace("invalid reagent typepath passed to get_reagent_purity [reagent]") + return 0 + + var/list/cached_reagents = reagent_list + for(var/datum/reagent/cached_reagent as anything in cached_reagents) + if(cached_reagent.type == reagent) + return round(cached_reagent.purity, 0.01) + + return 0 + +/** + * Get the average purity of all reagents (or all subtypes of provided typepath) + * Arguments + * * [parent_type][datum/reagent] - the typepath of specific reagents to look for + */ +/datum/reagents/proc/get_average_purity(datum/reagent/parent_type = null) + if(!isnull(parent_type) && !ispath(parent_type)) + stack_trace("illegal path passed to get_average_purity [parent_type]") + return FALSE + + var/total_amount + var/weighted_purity + var/list/cached_reagents = reagent_list + for(var/datum/reagent/reagent as anything in cached_reagents) + if(!isnull(parent_type) && !istype(reagent, parent_type)) + continue + total_amount += reagent.volume + weighted_purity += reagent.volume * reagent.purity + + return weighted_purity / total_amount + +/** + * Directly set the purity of all contained reagents to a new value + * Arguments + * * new_purity - the new purity value + */ +/datum/reagents/proc/set_all_reagents_purity(new_purity = 0) + var/list/cached_reagents = reagent_list + for(var/datum/reagent/cached_reagent as anything in cached_reagents) + cached_reagent.purity = max(0, new_purity) + + +//================================TASTE=================================================== +/** + * Returns what this holder's reagents taste like + * + * Arguments: + * * mob/living/taster - who is doing the tasting. Some mobs can pick up specific flavours. + * * minimum_percent - the lower the minimum percent, the more sensitive the message is. + */ +/datum/reagents/proc/generate_taste_message(mob/living/taster, minimum_percent) + var/list/out = list() + var/list/tastes = list() //descriptor = strength + if(minimum_percent <= 100) + for(var/datum/reagent/reagent as anything in reagent_list) + if(!reagent.taste_mult) + continue + + var/list/taste_data = reagent.get_taste_description(taster) + for(var/taste in taste_data) + if(taste in tastes) + tastes[taste] += taste_data[taste] * reagent.volume * reagent.taste_mult + else + tastes[taste] = taste_data[taste] * reagent.volume * reagent.taste_mult + //deal with percentages + // TODO it would be great if we could sort these from strong to weak + var/total_taste = counterlist_sum(tastes) + if(total_taste > 0) + for(var/taste_desc in tastes) + var/percent = tastes[taste_desc]/total_taste * 100 + if(percent < minimum_percent) + continue + var/intensity_desc = "a hint of" + if(percent > minimum_percent * 2 || percent == 100) + intensity_desc = "" + else if(percent > minimum_percent * 3) + intensity_desc = "the strong flavor of" + if(intensity_desc != "") + out += "[intensity_desc] [taste_desc]" + else + out += "[taste_desc]" + + return english_list(out, "something indescribable") diff --git a/code/modules/reagents/chemistry/holder/reactions.dm b/code/modules/reagents/chemistry/holder/reactions.dm new file mode 100644 index 00000000000000..e9f0bbbe433fdf --- /dev/null +++ b/code/modules/reagents/chemistry/holder/reactions.dm @@ -0,0 +1,356 @@ +/** + * Handle any reactions possible in this holder + * Also UPDATES the reaction list + * High potential for infinite loopsa if you're editing this. +*/ +/datum/reagents/proc/handle_reactions() + if(QDELING(src)) + CRASH("[my_atom] is trying to handle reactions while being flagged for deletion. It presently has [length(reagent_list)] number of reactants in it. If that is over 0 then something terrible happened.") + + if(!length(reagent_list))//The liver is calling this method a lot, and is often empty of reagents so it's pointless busywork. It should be an easy fix, but I'm nervous about touching things beyond scope. Also since everything is so handle_reactions() trigger happy it might be a good idea having this check anyways. + return FALSE + + if(flags & NO_REACT) + if(is_reacting) + force_stop_reacting() //Force anything that is trying to to stop + return FALSE //Yup, no reactions here. No siree. + + if(is_reacting)//Prevent wasteful calculations + if(!(datum_flags & DF_ISPROCESSING))//If we're reacting - but not processing (i.e. we've transferred) + START_PROCESSING(SSreagents, src) + if(!(has_changed_state())) + return FALSE + +#ifndef UNIT_TESTS + // We assert that reagents will not need to react before the map is fully loaded + // This is the best I can do, sorry :( + if(!MC_RUNNING()) + return FALSE +#endif + + var/list/cached_reagents = reagent_list + var/list/cached_reactions = GLOB.chemical_reactions_list_reactant_index + var/datum/cached_my_atom = my_atom + LAZYNULL(failed_but_capable_reactions) + LAZYNULL(previous_reagent_list) + + . = 0 + var/list/possible_reactions = list() + for(var/datum/reagent/reagent as anything in cached_reagents) + LAZYADD(previous_reagent_list, reagent.type) + // I am SO sorry + reaction_loop: + for(var/datum/chemical_reaction/reaction as anything in cached_reactions[reagent.type]) // Was a big list but now it should be smaller since we filtered it with our reagent id + if(!reaction) + continue + + if(!reaction.required_reagents)//Don't bring in empty ones + continue + + var/granularity = 1 + if(!(reaction.reaction_flags & REACTION_INSTANT)) + granularity = CHEMICAL_QUANTISATION_LEVEL + + var/list/cached_required_reagents = reaction.required_reagents + for(var/req_reagent in cached_required_reagents) + if(!has_reagent(req_reagent, (cached_required_reagents[req_reagent] * granularity))) + continue reaction_loop + + var/list/cached_required_catalysts = reaction.required_catalysts + for(var/_catalyst in cached_required_catalysts) + if(!has_reagent(_catalyst, (cached_required_catalysts[_catalyst] * granularity))) + continue reaction_loop + + if(cached_my_atom) + if(reaction.required_container) + if(reaction.required_container_accepts_subtypes) + if(!istype(cached_my_atom, reaction.required_container)) + continue + else if(cached_my_atom.type != reaction.required_container) + continue + + if(isliving(cached_my_atom) && !reaction.mob_react) //Makes it so certain chemical reactions don't occur in mobs + continue + + else if(reaction.required_container) + continue + + if(reaction.required_other && !reaction.pre_reaction_other_checks(src)) + continue + + // At this point, we've passed all the hard restrictions and entered into just the soft ones + // So we're gonna start tracking reactions that COULD be completed on continue, instead of just exiting + var/required_temp = reaction.required_temp + var/is_cold_recipe = reaction.is_cold_recipe + if(required_temp != 0 && (is_cold_recipe && chem_temp > required_temp) || (!is_cold_recipe && chem_temp < required_temp)) + LAZYADD(failed_but_capable_reactions, reaction) + continue + + if(ph < reaction.optimal_ph_min - reaction.determin_ph_range && ph > reaction.optimal_ph_max + reaction.determin_ph_range) + LAZYADD(failed_but_capable_reactions, reaction) + continue + + possible_reactions += reaction + + //This is the point where we have all the possible reactions from a reagent/catalyst point of view, so we set up the reaction list + for(var/datum/chemical_reaction/selected_reaction as anything in possible_reactions) + if((selected_reaction.reaction_flags & REACTION_INSTANT) || (flags & REAGENT_HOLDER_INSTANT_REACT)) //If we have instant reactions, we process them here + instant_react(selected_reaction) + .++ + update_total() + continue + else + var/exists = FALSE + for(var/datum/equilibrium/E_exist as anything in reaction_list) + if(ispath(E_exist.reaction.type, selected_reaction.type)) //Don't add duplicates + exists = TRUE + + //Add it if it doesn't exist in the list + if(!exists) + is_reacting = TRUE//Prevent any on_reaction() procs from infinite looping + var/datum/equilibrium/equilibrium = new (selected_reaction, src) //Otherwise we add them to the processing list. + if(equilibrium.to_delete)//failed startup checks + qdel(equilibrium) + else + //Adding is done in new(), deletion is in qdel + equilibrium.reaction.on_reaction(src, equilibrium, equilibrium.multiplier) + equilibrium.react_timestep(1)//Get an initial step going so there's not a delay between setup and start - DO NOT ADD THIS TO equilibrium.NEW() + + if(LAZYLEN(reaction_list)) + is_reacting = TRUE //We've entered the reaction phase - this is set here so any reagent handling called in on_reaction() doesn't cause infinite loops + START_PROCESSING(SSreagents, src) //see process() to see how reactions are handled + else + is_reacting = FALSE + + if(.) + SEND_SIGNAL(src, COMSIG_REAGENTS_REACTED, .) + + TEST_ONLY_ASSERT(!. || MC_RUNNING(), "We reacted during subsystem init, that shouldn't be happening!") + +/** + * Checks to see if the reagents has a difference in reagents_list and previous_reagent_list (I.e. if there's a difference between the previous call and the last) + * Also checks to see if the saved reactions in failed_but_capable_reactions can start as a result of temp/pH change +*/ +/datum/reagents/proc/has_changed_state() + //Check if reagents are different + var/total_matching_reagents = 0 + for(var/reagent in previous_reagent_list) + if(has_reagent(reagent)) + total_matching_reagents++ + if(total_matching_reagents != reagent_list.len) + return TRUE + + //Check our last reactions + for(var/datum/chemical_reaction/reaction as anything in failed_but_capable_reactions) + if(reaction.is_cold_recipe) + if(reaction.required_temp < chem_temp) + return TRUE + else + if(reaction.required_temp < chem_temp) + return TRUE + if(((ph >= (reaction.optimal_ph_min - reaction.determin_ph_range)) && (ph <= (reaction.optimal_ph_max + reaction.determin_ph_range)))) + return TRUE + return FALSE + + +/* +* Main Reaction loop handler, Do not call this directly +* +* Checks to see if there's a reaction, then processes over the reaction list, removing them if flagged +* If any are ended, it displays the reaction message and removes it from the reaction list +* If the list is empty at the end it finishes reacting. +* Arguments: +* * seconds_per_tick - the time between each time step +*/ +/datum/reagents/process(seconds_per_tick) + if(!is_reacting) + force_stop_reacting() + stack_trace("[src] | [my_atom] was forced to stop reacting. This might be unintentional.") + //sum of output messages. + var/list/mix_message = list() + //Process over our reaction list + //See equilibrium.dm for mechanics + var/num_reactions = 0 + for(var/datum/equilibrium/equilibrium as anything in reaction_list) + //Continue reacting + equilibrium.react_timestep(seconds_per_tick) + num_reactions++ + //if it's been flagged to delete + if(equilibrium.to_delete) + var/temp_mix_message = end_reaction(equilibrium) + if(!text_in_list(temp_mix_message, mix_message)) + mix_message += temp_mix_message + continue + SSblackbox.record_feedback("tally", "chemical_reaction", 1, "[equilibrium.reaction.type] total reaction steps") + if(num_reactions) + SEND_SIGNAL(src, COMSIG_REAGENTS_REACTION_STEP, num_reactions, seconds_per_tick) + + if(length(mix_message)) //This is only at the end + my_atom.audible_message(span_notice("[icon2html(my_atom, viewers(DEFAULT_MESSAGE_RANGE, src))] [mix_message.Join()]")) + + if(!LAZYLEN(reaction_list)) + finish_reacting() + else + handle_reactions() + +/* +* This ends a single instance of an ongoing reaction +* +* Arguments: +* * [equilibrium][datum/equilibrium] - the equilibrium that will be ended +* Returns: +* * mix_message - the associated mix message of a reaction +*/ +/datum/reagents/proc/end_reaction(datum/equilibrium/equilibrium) + equilibrium.reaction.reaction_finish(src, equilibrium, equilibrium.reacted_vol) + if(!equilibrium.holder || !equilibrium.reaction) //Somehow I'm getting empty equilibrium. This is here to handle them + LAZYREMOVE(reaction_list, equilibrium) + qdel(equilibrium) + stack_trace("The equilibrium datum currently processing in this reagents datum had a nulled holder or nulled reaction. src holder:[my_atom] || src type:[my_atom.type] ") //Shouldn't happen. Does happen + return + if(equilibrium.holder != src) //When called from Destroy() eqs are nulled in smoke. This is very strange. This is probably causing it to spam smoke because of the runtime interupting the removal. + stack_trace("The equilibrium datum currently processing in this reagents datum had a desynced holder to the ending reaction. src holder:[my_atom] | equilibrium holder:[equilibrium.holder.my_atom] || src type:[my_atom.type] | equilibrium holder:[equilibrium.holder.my_atom.type]") + LAZYREMOVE(reaction_list, equilibrium) + + var/reaction_message = equilibrium.reaction.mix_message + if(equilibrium.reaction.mix_sound) + playsound(get_turf(my_atom), equilibrium.reaction.mix_sound, 80, TRUE) + //NOVA EDIT ADDITION + //If the reaction pollutes, pollute it here if we have an atom + if(equilibrium.reaction.pollutant_type && my_atom) + var/turf/my_turf = get_turf(my_atom) + if(my_turf) // reactions can happen in nullspace (like inside of a mob's stomach for instance). + my_turf.pollute_turf(equilibrium.reaction.pollutant_type, equilibrium.reaction.pollutant_amount * equilibrium.reacted_vol) + //NOVA EDIT END + qdel(equilibrium) + update_total() + SEND_SIGNAL(src, COMSIG_REAGENTS_REACTED, .) + return reaction_message + +/* +* This stops the holder from processing at the end of a series of reactions (i.e. when all the equilibriums are completed) +* Also resets reaction variables to be null/empty/FALSE so that it can restart correctly in the future +*/ +/datum/reagents/proc/finish_reacting() + STOP_PROCESSING(SSreagents, src) + is_reacting = FALSE + LAZYNULL(previous_reagent_list) //reset it to 0 - because any change will be different now. + update_total() + +/* +* Force stops the current holder/reagents datum from reacting +* Calls end_reaction() for each equlilbrium datum in reaction_list and finish_reacting() +* Usually only called when a datum is transferred into a NO_REACT container +*/ +/datum/reagents/proc/force_stop_reacting() + var/list/mix_message = list() + for(var/datum/equilibrium/equilibrium as anything in reaction_list) + mix_message += end_reaction(equilibrium) + if(my_atom && length(mix_message)) + my_atom.audible_message(span_notice("[icon2html(my_atom, viewers(DEFAULT_MESSAGE_RANGE, src))] [mix_message.Join()]")) + finish_reacting() + +/* +* Force stops a specific reagent's associated reaction if it exists +* +* Returns TRUE if it stopped something, FALSE if it didn't +* Arguments: +* * reagent - the reagent PRODUCT that we're seeking reactions for, any and all found will be shut down +*/ +/datum/reagents/proc/force_stop_reagent_reacting(datum/reagent/reagent) + var/any_stopped = FALSE + var/list/mix_message = list() + for(var/datum/equilibrium/equilibrium as anything in reaction_list) + for(var/result in equilibrium.reaction.results) + if(result == reagent.type) + mix_message += end_reaction(equilibrium) + any_stopped = TRUE + if(length(mix_message)) + my_atom.audible_message(span_notice("[icon2html(my_atom, viewers(DEFAULT_MESSAGE_RANGE, src))][mix_message.Join()]")) + return any_stopped + +/* +* Transfers the reaction_list to a new reagents datum +* +* Arguments: +* * target - the datum/reagents that this src is being transferred into +*/ +/datum/reagents/proc/transfer_reactions(datum/reagents/target) + if(QDELETED(target)) + CRASH("transfer_reactions() had a [target] ([target.type]) passed to it when it was set to qdel, or it isn't a reagents datum.") + if(!reaction_list) + return + for(var/datum/equilibrium/reaction_source as anything in reaction_list) + var/exists = FALSE + for(var/datum/equilibrium/reaction_target as anything in target.reaction_list) //Don't add duplicates + if(reaction_source.reaction.type == reaction_target.reaction.type) + exists = TRUE + if(exists) + continue + if(!reaction_source.holder) + CRASH("reaction_source is missing a holder in transfer_reactions()!") + + var/datum/equilibrium/new_E = new (reaction_source.reaction, target)//addition to reaction_list is done in new() + if(new_E.to_delete)//failed startup checks + qdel(new_E) + + target.previous_reagent_list = LAZYLISTDUPLICATE(previous_reagent_list) + target.is_reacting = is_reacting + +/** + * Old reaction mechanics, edited to work on one only + * This is changed from the old - purity of the reagents will affect yield + * + * Arguments + * * [selected_reaction][datum/chemical_reaction] - the chemical reaction to finish instantly + */ +/datum/reagents/proc/instant_react(datum/chemical_reaction/selected_reaction) + var/list/cached_required_reagents = selected_reaction.required_reagents + var/list/cached_results = selected_reaction.results + var/datum/cached_my_atom = my_atom + var/multiplier = INFINITY + for(var/reagent in cached_required_reagents) + multiplier = round(min(multiplier, get_reagent_amount(reagent) / cached_required_reagents[reagent])) + + if(!multiplier)//Incase we're missing reagents - usually from on_reaction being called in an equlibrium when the results.len == 0 handlier catches a misflagged reaction + return FALSE + var/sum_purity = 0 + for(var/_reagent in cached_required_reagents)//this is not an object + var/datum/reagent/reagent = has_reagent(_reagent) + if (!reagent) + continue + sum_purity += reagent.purity + remove_reagent(_reagent, (multiplier * cached_required_reagents[_reagent])) + sum_purity /= cached_required_reagents.len + + for(var/product in selected_reaction.results) + multiplier = max(multiplier, 1) //this shouldn't happen ... + var/yield = (cached_results[product]*multiplier)*sum_purity + SSblackbox.record_feedback("tally", "chemical_reaction", yield, product) + add_reagent(product, yield, null, chem_temp, sum_purity) + + var/list/seen = viewers(4, get_turf(my_atom)) + var/iconhtml = icon2html(cached_my_atom, seen) + if(cached_my_atom) + if(!ismob(cached_my_atom)) // No bubbling mobs + if(selected_reaction.mix_sound) + playsound(get_turf(cached_my_atom), selected_reaction.mix_sound, 80, TRUE) + + my_atom.audible_message(span_notice("[iconhtml] [selected_reaction.mix_message]")) + + if(istype(cached_my_atom, /obj/item/slime_extract)) + var/obj/item/slime_extract/extract = my_atom + extract.extract_uses-- + if(extract.extract_uses <= 0) // give the notification that the slime core is dead + my_atom.visible_message(span_notice("[iconhtml] \The [my_atom]'s power is consumed in the reaction.")) + extract.name = "used slime extract" + extract.desc = "This extract has been used up." + //NOVA EDIT ADDITION + //If the reaction pollutes, pollute it here if we have an atom + if(selected_reaction.pollutant_type && my_atom) + var/turf/my_turf = get_turf(my_atom) + if(my_turf) // just to be safe here + my_turf.pollute_turf(selected_reaction.pollutant_type, selected_reaction.pollutant_amount * multiplier) + //NOVA EDIT END + + selected_reaction.on_reaction(src, null, multiplier) diff --git a/code/modules/reagents/chemistry/holder/ui_data.dm b/code/modules/reagents/chemistry/holder/ui_data.dm new file mode 100644 index 00000000000000..bc8b3d6c713f6a --- /dev/null +++ b/code/modules/reagents/chemistry/holder/ui_data.dm @@ -0,0 +1,411 @@ +/datum/reagents/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Reagents", "Reaction search") + ui.status = UI_INTERACTIVE //How do I prevent a UI from autoclosing if not in LoS + ui_tags_selected = NONE //Resync with gui on open (gui expects no flags) + ui_reagent_id = null + ui_reaction_id = null + ui.open() + + +/datum/reagents/ui_status(mob/user) + return UI_INTERACTIVE //please advise + +/datum/reagents/ui_state(mob/user) + return GLOB.physical_state + +///Generates a (rough) rate vs temperature graph profile +/datum/reagents/proc/generate_thermodynamic_profile(datum/chemical_reaction/reaction) + var/list/coords = list() + var/x_temp + var/increment + if(reaction.is_cold_recipe) + coords += list(list(0, 0)) + coords += list(list(reaction.required_temp, 0)) + x_temp = reaction.required_temp + increment = (reaction.optimal_temp - reaction.required_temp)/10 + while(x_temp < reaction.optimal_temp) + var/y = (((x_temp - reaction.required_temp)**reaction.temp_exponent_factor)/((reaction.optimal_temp - reaction.required_temp)**reaction.temp_exponent_factor)) + coords += list(list(x_temp, y)) + x_temp += increment + else + coords += list(list(reaction.required_temp, 0)) + x_temp = reaction.required_temp + increment = (reaction.required_temp - reaction.optimal_temp)/10 + while(x_temp > reaction.optimal_temp) + var/y = (((x_temp - reaction.required_temp)**reaction.temp_exponent_factor)/((reaction.optimal_temp - reaction.required_temp)**reaction.temp_exponent_factor)) + coords += list(list(x_temp, y)) + x_temp -= increment + + coords += list(list(reaction.optimal_temp, 1)) + if(reaction.overheat_temp == NO_OVERHEAT) + if(reaction.is_cold_recipe) + coords += list(list(reaction.optimal_temp+10, 1)) + else + coords += list(list(reaction.optimal_temp-10, 1)) + return coords + coords += list(list(reaction.overheat_temp, 1)) + coords += list(list(reaction.overheat_temp, 0)) + return coords + +/datum/reagents/proc/generate_explosive_profile(datum/chemical_reaction/reaction) + if(reaction.overheat_temp == NO_OVERHEAT) + return null + var/list/coords = list() + coords += list(list(reaction.overheat_temp, 0)) + coords += list(list(reaction.overheat_temp, 1)) + if(reaction.is_cold_recipe) + coords += list(list(reaction.overheat_temp-50, 1)) + coords += list(list(reaction.overheat_temp-50, 0)) + else + coords += list(list(reaction.overheat_temp+50, 1)) + coords += list(list(reaction.overheat_temp+50, 0)) + return coords + + +///Returns a string descriptor of a reactions themic_constant +/datum/reagents/proc/determine_reaction_thermics(datum/chemical_reaction/reaction) + var/thermic = reaction.thermic_constant + if(reaction.reaction_flags & REACTION_HEAT_ARBITARY) + thermic *= 100 //Because arbitary is a lower scale + switch(thermic) + if(-INFINITY to -1500) + return "Overwhelmingly endothermic" + if(-1500 to -1000) + return "Extremely endothermic" + if(-1000 to -500) + return "Strongly endothermic" + if(-500 to -200) + return "Moderately endothermic" + if(-200 to -50) + return "Endothermic" + if(-50 to 0) + return "Weakly endothermic" + if(0) + return "" + if(0 to 50) + return "Weakly Exothermic" + if(50 to 200) + return "Exothermic" + if(200 to 500) + return "Moderately exothermic" + if(500 to 1000) + return "Strongly exothermic" + if(1000 to 1500) + return "Extremely exothermic" + if(1500 to INFINITY) + return "Overwhelmingly exothermic" + +/datum/reagents/proc/parse_addictions(datum/reagent/reagent) + var/addict_text = list() + for(var/entry in reagent.addiction_types) + var/datum/addiction/ref = SSaddiction.all_addictions[entry] + switch(reagent.addiction_types[entry]) + if(-INFINITY to 0) + continue + if(0 to 5) + addict_text += "Weak [ref.name]" + if(5 to 10) + addict_text += "[ref.name]" + if(10 to 20) + addict_text += "Strong [ref.name]" + if(20 to INFINITY) + addict_text += "Potent [ref.name]" + return addict_text + +/datum/reagents/ui_data(mob/user) + var/data = list() + data["selectedBitflags"] = ui_tags_selected + data["currentReagents"] = previous_reagent_list //This keeps the string of reagents that's updated when handle_reactions() is called + data["beakerSync"] = ui_beaker_sync + data["linkedBeaker"] = my_atom.name //To solidify the fact that the UI is linked to a beaker - not a machine. + + //First we check to see if reactions are synced with the beaker + if(ui_beaker_sync) + if(reaction_list)//But we don't want to null the previously displayed if there are none + //makes sure we're within bounds + if(ui_reaction_index > reaction_list.len) + ui_reaction_index = reaction_list.len + ui_reaction_id = reaction_list[ui_reaction_index].reaction.type + + //reagent lookup data + if(ui_reagent_id) + var/datum/reagent/reagent = find_reagent_object_from_type(ui_reagent_id) + if(!reagent) + to_chat(user, "Could not find reagent!") + ui_reagent_id = null + else + data["reagent_mode_reagent"] = list("name" = reagent.name, "id" = reagent.type, "desc" = reagent.description, "reagentCol" = reagent.color, "pH" = reagent.ph, "pHCol" = convert_ph_to_readable_color(reagent.ph), "metaRate" = reagent.metabolization_rate, "OD" = reagent.overdose_threshold) + data["reagent_mode_reagent"]["addictions"] = list() + data["reagent_mode_reagent"]["addictions"] = parse_addictions(reagent) + + var/datum/reagent/inverse_reagent = GLOB.chemical_reagents_list[reagent.inverse_chem] + if(inverse_reagent) + data["reagent_mode_reagent"] += list("inverseReagent" = inverse_reagent.name, "inverseId" = inverse_reagent.type) + + if(reagent.chemical_flags & REAGENT_DEAD_PROCESS) + data["reagent_mode_reagent"] += list("deadProcess" = TRUE) + else + data["reagent_mode_reagent"] = null + + //reaction lookup data + if (ui_reaction_id) + + var/datum/chemical_reaction/reaction = get_chemical_reaction(ui_reaction_id) + if(!reaction) + to_chat(user, "Could not find reaction!") + ui_reaction_id = null + return data + //Required holder + var/container_name + if(reaction.required_container) + var/list/names = splittext("[reaction.required_container]", "/") + container_name = "[names[names.len-1]] [names[names.len]]" + container_name = replacetext(container_name, "_", " ") + + //Next, find the product + var/has_product = TRUE + //If we have no product, use the typepath to create a name for it + if(!length(reaction.results)) + has_product = FALSE + var/list/names = splittext("[reaction.type]", "/") + var/product_name = names[names.len] + data["reagent_mode_recipe"] = list("name" = product_name, "id" = reaction.type, "hasProduct" = has_product, "reagentCol" = "#FFFFFF", "thermodynamics" = generate_thermodynamic_profile(reaction), "explosive" = generate_explosive_profile(reaction), "lowerpH" = reaction.optimal_ph_min, "upperpH" = reaction.optimal_ph_max, "thermics" = determine_reaction_thermics(reaction), "thermoUpper" = reaction.rate_up_lim, "minPurity" = reaction.purity_min, "inversePurity" = "N/A", "tempMin" = reaction.required_temp, "explodeTemp" = reaction.overheat_temp, "reqContainer" = container_name, "subReactLen" = 1, "subReactIndex" = 1) + + //If we do have a product then we find it + else + //Find out if we have multiple reactions for the same product + var/datum/reagent/primary_reagent = find_reagent_object_from_type(reaction.results[1])//We use the first product - though it might be worth changing this + //If we're syncing from the beaker + var/list/sub_reactions = list() + if(ui_beaker_sync && reaction_list) + for(var/_ongoing_eq in reaction_list) + var/datum/equilibrium/ongoing_eq = _ongoing_eq + var/ongoing_r = ongoing_eq.reaction + sub_reactions += ongoing_r + else + sub_reactions = get_recipe_from_reagent_product(primary_reagent.type) + var/sub_reaction_length = length(sub_reactions) + var/i = 1 + for(var/datum/chemical_reaction/sub_reaction in sub_reactions) + if(sub_reaction.type == reaction.type) + ui_reaction_index = i //update our index + break + i += 1 + data["reagent_mode_recipe"] = list("name" = primary_reagent.name, "id" = reaction.type, "hasProduct" = has_product, "reagentCol" = primary_reagent.color, "thermodynamics" = generate_thermodynamic_profile(reaction), "explosive" = generate_explosive_profile(reaction), "lowerpH" = reaction.optimal_ph_min, "upperpH" = reaction.optimal_ph_max, "thermics" = determine_reaction_thermics(reaction), "thermoUpper" = reaction.rate_up_lim, "minPurity" = reaction.purity_min, "inversePurity" = primary_reagent.inverse_chem_val, "tempMin" = reaction.required_temp, "explodeTemp" = reaction.overheat_temp, "reqContainer" = container_name, "subReactLen" = sub_reaction_length, "subReactIndex" = ui_reaction_index) + + //Results sweep + var/has_reagent = "default" + for(var/_reagent in reaction.results) + var/datum/reagent/reagent = find_reagent_object_from_type(_reagent) + if(has_reagent(_reagent)) + has_reagent = "green" + data["reagent_mode_recipe"]["products"] += list(list("name" = reagent.name, "id" = reagent.type, "ratio" = reaction.results[reagent.type], "hasReagentCol" = has_reagent)) + + //Reactant sweep + for(var/_reagent in reaction.required_reagents) + var/datum/reagent/reagent = find_reagent_object_from_type(_reagent) + var/color_r = "default" //If the holder is missing the reagent, it's displayed in orange + if(has_reagent(reagent.type)) + color_r = "green" //It's green if it's present + var/tooltip + var/tooltip_bool = FALSE + var/list/sub_reactions = get_recipe_from_reagent_product(reagent.type) + //Get sub reaction possibilities, but ignore ones that need a specific holder atom + var/sub_index = 0 + for(var/datum/chemical_reaction/sub_reaction as anything in sub_reactions) + if(sub_reaction.required_container)//So we don't have slime reactions confusing things + sub_index++ + continue + sub_index++ + break + if(sub_index) + var/datum/chemical_reaction/sub_reaction = sub_reactions[sub_index] + //Subreactions sweep (if any) + for(var/_sub_reagent in sub_reaction.required_reagents) + var/datum/reagent/sub_reagent = find_reagent_object_from_type(_sub_reagent) + tooltip += "[sub_reaction.required_reagents[_sub_reagent]]u [sub_reagent.name]\n" //I forgot the better way of doing this - fix this after this works + tooltip_bool = TRUE + data["reagent_mode_recipe"]["reactants"] += list(list("name" = reagent.name, "id" = reagent.type, "ratio" = reaction.required_reagents[reagent.type], "color" = color_r, "tooltipBool" = tooltip_bool, "tooltip" = tooltip)) + + //Catalyst sweep + for(var/_reagent in reaction.required_catalysts) + var/datum/reagent/reagent = find_reagent_object_from_type(_reagent) + var/color_r = "default" + if(has_reagent(reagent.type)) + color_r = "green" + var/tooltip + var/tooltip_bool = FALSE + var/list/sub_reactions = get_recipe_from_reagent_product(reagent.type) + if(length(sub_reactions)) + var/datum/chemical_reaction/sub_reaction = sub_reactions[1] + //Subreactions sweep (if any) + for(var/_sub_reagent in sub_reaction.required_reagents) + var/datum/reagent/sub_reagent = find_reagent_object_from_type(_sub_reagent) + tooltip += "[sub_reaction.required_reagents[_sub_reagent]]u [sub_reagent.name]\n" //I forgot the better way of doing this - fix this after this works + tooltip_bool = TRUE + data["reagent_mode_recipe"]["catalysts"] += list(list("name" = reagent.name, "id" = reagent.type, "ratio" = reaction.required_catalysts[reagent.type], "color" = color_r, "tooltipBool" = tooltip_bool, "tooltip" = tooltip)) + data["reagent_mode_recipe"]["isColdRecipe"] = reaction.is_cold_recipe + else + data["reagent_mode_recipe"] = null + + return data + +/datum/reagents/ui_static_data(mob/user) + var/data = list() + //Use GLOB list - saves processing + data["master_reaction_list"] = GLOB.chemical_reactions_results_lookup_list + data["bitflags"] = list() + data["bitflags"]["BRUTE"] = REACTION_TAG_BRUTE + data["bitflags"]["BURN"] = REACTION_TAG_BURN + data["bitflags"]["TOXIN"] = REACTION_TAG_TOXIN + data["bitflags"]["OXY"] = REACTION_TAG_OXY + data["bitflags"]["HEALING"] = REACTION_TAG_HEALING + data["bitflags"]["DAMAGING"] = REACTION_TAG_DAMAGING + data["bitflags"]["EXPLOSIVE"] = REACTION_TAG_EXPLOSIVE + data["bitflags"]["OTHER"] = REACTION_TAG_OTHER + data["bitflags"]["DANGEROUS"] = REACTION_TAG_DANGEROUS + data["bitflags"]["EASY"] = REACTION_TAG_EASY + data["bitflags"]["MODERATE"] = REACTION_TAG_MODERATE + data["bitflags"]["HARD"] = REACTION_TAG_HARD + data["bitflags"]["ORGAN"] = REACTION_TAG_ORGAN + data["bitflags"]["DRINK"] = REACTION_TAG_DRINK + data["bitflags"]["FOOD"] = REACTION_TAG_FOOD + data["bitflags"]["SLIME"] = REACTION_TAG_SLIME + data["bitflags"]["DRUG"] = REACTION_TAG_DRUG + data["bitflags"]["UNIQUE"] = REACTION_TAG_UNIQUE + data["bitflags"]["CHEMICAL"] = REACTION_TAG_CHEMICAL + data["bitflags"]["PLANT"] = REACTION_TAG_PLANT + data["bitflags"]["COMPETITIVE"] = REACTION_TAG_COMPETITIVE + + return data + +/* Returns a reaction type by index from an input reagent type +* i.e. the input reagent's associated reactions are found, and the index determines which one to return +* If the index is out of range, it is set to 1 +*/ +/datum/reagents/proc/get_reaction_from_indexed_possibilities(path, index = null) + if(index) + ui_reaction_index = index + var/list/sub_reactions = get_recipe_from_reagent_product(path) + if(!length(sub_reactions)) + to_chat(usr, "There is no recipe associated with this product.") + return FALSE + if(ui_reaction_index > length(sub_reactions)) + ui_reaction_index = 1 + var/datum/chemical_reaction/reaction = sub_reactions[ui_reaction_index] + return reaction.type + +/datum/reagents/ui_act(action, params) + . = ..() + if(.) + return + switch(action) + if("find_reagent_reaction") + ui_reaction_id = get_reaction_from_indexed_possibilities(text2path(params["id"])) + return TRUE + if("reagent_click") + ui_reagent_id = text2path(params["id"]) + return TRUE + if("recipe_click") + ui_reaction_id = text2path(params["id"]) + return TRUE + if("search_reagents") + var/input_reagent = tgui_input_list(usr, "Select reagent", "Reagent", GLOB.name2reagent) + input_reagent = get_reagent_type_from_product_string(input_reagent) //from string to type + var/datum/reagent/reagent = find_reagent_object_from_type(input_reagent) + if(!reagent) + to_chat(usr, "Could not find reagent!") + return FALSE + ui_reagent_id = reagent.type + return TRUE + if("search_recipe") + var/input_reagent = (input("Enter the name of product reagent", "Input") as text|null) + input_reagent = get_reagent_type_from_product_string(input_reagent) //from string to type + var/datum/reagent/reagent = find_reagent_object_from_type(input_reagent) + if(!reagent) + to_chat(usr, "Could not find product reagent!") + return + ui_reaction_id = get_reaction_from_indexed_possibilities(reagent.type) + return TRUE + if("increment_index") + ui_reaction_index += 1 + if(!ui_beaker_sync || !reaction_list) + ui_reaction_id = get_reaction_from_indexed_possibilities(get_reagent_type_from_product_string(params["id"])) + return TRUE + if("reduce_index") + if(ui_reaction_index == 1) + return + ui_reaction_index -= 1 + if(!ui_beaker_sync || !reaction_list) + ui_reaction_id = get_reaction_from_indexed_possibilities(get_reagent_type_from_product_string(params["id"])) + return TRUE + if("beaker_sync") + ui_beaker_sync = !ui_beaker_sync + return TRUE + if("toggle_tag_brute") + ui_tags_selected = ui_tags_selected ^ REACTION_TAG_BRUTE + return TRUE + if("toggle_tag_burn") + ui_tags_selected = ui_tags_selected ^ REACTION_TAG_BURN + return TRUE + if("toggle_tag_toxin") + ui_tags_selected = ui_tags_selected ^ REACTION_TAG_TOXIN + return TRUE + if("toggle_tag_oxy") + ui_tags_selected = ui_tags_selected ^ REACTION_TAG_OXY + return TRUE + if("toggle_tag_healing") + ui_tags_selected = ui_tags_selected ^ REACTION_TAG_HEALING + return TRUE + if("toggle_tag_damaging") + ui_tags_selected = ui_tags_selected ^ REACTION_TAG_DAMAGING + return TRUE + if("toggle_tag_explosive") + ui_tags_selected = ui_tags_selected ^ REACTION_TAG_EXPLOSIVE + return TRUE + if("toggle_tag_other") + ui_tags_selected = ui_tags_selected ^ REACTION_TAG_OTHER + return TRUE + if("toggle_tag_easy") + ui_tags_selected = ui_tags_selected ^ REACTION_TAG_EASY + return TRUE + if("toggle_tag_moderate") + ui_tags_selected = ui_tags_selected ^ REACTION_TAG_MODERATE + return TRUE + if("toggle_tag_hard") + ui_tags_selected = ui_tags_selected ^ REACTION_TAG_HARD + return TRUE + if("toggle_tag_organ") + ui_tags_selected = ui_tags_selected ^ REACTION_TAG_ORGAN + return TRUE + if("toggle_tag_drink") + ui_tags_selected = ui_tags_selected ^ REACTION_TAG_DRINK + return TRUE + if("toggle_tag_food") + ui_tags_selected = ui_tags_selected ^ REACTION_TAG_FOOD + return TRUE + if("toggle_tag_dangerous") + ui_tags_selected = ui_tags_selected ^ REACTION_TAG_DANGEROUS + return TRUE + if("toggle_tag_slime") + ui_tags_selected = ui_tags_selected ^ REACTION_TAG_SLIME + return TRUE + if("toggle_tag_drug") + ui_tags_selected = ui_tags_selected ^ REACTION_TAG_DRUG + return TRUE + if("toggle_tag_unique") + ui_tags_selected = ui_tags_selected ^ REACTION_TAG_UNIQUE + return TRUE + if("toggle_tag_chemical") + ui_tags_selected = ui_tags_selected ^ REACTION_TAG_CHEMICAL + return TRUE + if("toggle_tag_plant") + ui_tags_selected = ui_tags_selected ^ REACTION_TAG_PLANT + return TRUE + if("toggle_tag_competitive") + ui_tags_selected = ui_tags_selected ^ REACTION_TAG_COMPETITIVE + return TRUE + if("update_ui") + return TRUE diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index a3ed883551f30b..2559379c94c810 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -1,16 +1,3 @@ -/proc/translate_legacy_chem_id(id) - switch (id) - if ("sacid") - return "sulfuricacid" - if ("facid") - return "fluorosulfuricacid" - if ("co2") - return "carbondioxide" - if ("mine_salve") - return "minerssalve" - else - return ckey(id) - /obj/machinery/chem_dispenser name = "chem dispenser" desc = "Creates and dispenses chemicals." @@ -23,21 +10,57 @@ circuit = /obj/item/circuitboard/machine/chem_dispenser processing_flags = NONE + /// The cell used to dispense reagents var/obj/item/stock_parts/cell/cell + /// Efficiency used when converting cell power to reagents var/powerefficiency = 0.1 + /// The current amount this machine is dispensing var/amount = 30 + /// The rate at which this machine recharges the power cell var/recharge_amount = 10 + /// Keep track of the intervals made during recharges var/recharge_counter = 0 + /// The temperature reagents are dispensed into the beaker var/dispensed_temperature = DEFAULT_REAGENT_TEMPERATURE - ///If the UI has the pH meter shown + /// If the UI has the pH meter shown var/show_ph = TRUE + /// The overlay used to display the beaker on the machine var/mutable_appearance/beaker_overlay + /// Icon to display when the machine is powered var/working_state = "dispenser_working" + /// Icon to display when the machine is not powered var/nopower_state = "dispenser_nopower" + /// Should we display the open panel overlay when the panel is opened with a screwdriver var/has_panel_overlay = TRUE + /// The actual beaker inserted into this machine var/obj/item/reagent_containers/beaker = null - //dispensable_reagents is copypasted in plumbing synthesizers. Please update accordingly. (I didn't make it global because that would limit custom chem dispensers) - var/list/dispensable_reagents = list( + /// Dispensable_reagents is copypasted in plumbing synthesizers. Please update accordingly. (I didn't make it global because that would limit custom chem dispensers) + var/list/dispensable_reagents = list() + /// These become available once the manipulator has been upgraded to tier 2 (nano) // NOVA EDIT CHANGE - ORIGINAL: /// These become available once the manipulator has been upgraded to tier 4 (femto) + var/list/upgrade_reagents = list() + // NOVA EDIT ADDITION BEGIN + /// These become available once the manipulator has been upgraded to tier 3 (pico) + var/list/upgrade2_reagents = list() + /// These become available once the manipulator has been upgraded to tier 4 (femto) + var/list/upgrade3_reagents = list() + // NOVA EDIT ADDITION END + /// These become available once the machine has been emaged + var/list/emagged_reagents = list() + /// Starting purity of the created reagents + var/base_reagent_purity = 1 + /// Records the reagents dispensed by the user if this list is not null + var/list/recording_recipe + /// Saves all the recipes recorded by the machine + var/list/saved_recipes = list() + // NOVA EDIT ADDITION BEGIN + /// Used for custom transfer amounts + var/list/transferAmounts = list() + /// The custom transfer amount + var/customTransferAmount + // NOVA EDIT ADDITION END + + /// The default list of dispensable_reagents + var/static/list/default_dispensable_reagents = list( /datum/reagent/aluminium, /datum/reagent/bromine, /datum/reagent/carbon, @@ -64,10 +87,11 @@ /datum/reagent/water, /datum/reagent/fuel, ) - //these become available once the manipulator has been upgraded to tier 4 (femto) - //SKYRAT EDIT REMOVAL BEGIN - Skyrat-SS13/Skyrat-tg#1931 + + //NOVA EDIT CHANGE BEGIN - ORIGINAL /* - var/list/upgrade_reagents = list( + /// The default list of reagents upgrade_reagents + var/static/list/default_upgrade_reagents = list( /datum/reagent/acetone, /datum/reagent/ammonia, /datum/reagent/ash, @@ -75,7 +99,8 @@ /datum/reagent/fuel/oil, /datum/reagent/saltpetre ) - var/list/emagged_reagents = list( + /// The default list of reagents emagged_reagents + var/static/list/default_emagged_reagents = list( /datum/reagent/toxin/carpotoxin, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/morphine, @@ -83,26 +108,24 @@ /datum/reagent/toxin ) */ - //SKYRAT EDIT REMOVAL END - //SKYRAT EDIT ADDITION BEGIN - Skyrat-SS13/Skyrat-tg#1931 - var/list/upgrade_reagents = list( + var/static/list/default_upgrade_reagents = list( /datum/reagent/fuel/oil, /datum/reagent/ammonia, /datum/reagent/ash ) - var/list/upgrade_reagents2 = list( + var/static/list/default_upgrade2_reagents = list( /datum/reagent/acetone, /datum/reagent/phenol, /datum/reagent/diethylamine ) - var/list/upgrade_reagents3 = list( + var/static/list/default_upgrade3_reagents = list( /datum/reagent/medicine/mine_salve, /datum/reagent/toxin ) - var/list/emagged_reagents = list( + var/static/list/default_emagged_reagents = list( /datum/reagent/drug/space_drugs, /datum/reagent/toxin/plasma, /datum/reagent/consumable/frostoil, @@ -110,38 +133,43 @@ /datum/reagent/toxin/histamine, /datum/reagent/medicine/morphine ) - //SKYRAT EDIT ADDITION END - /// Starting purity of the created reagents - var/base_reagent_purity = 1 - - var/list/recording_recipe - - var/list/saved_recipes = list() - //SKYRAT EDIT BEGIN - CHEMISTRY QOL - var/list/transferAmounts = list() - var/customTransferAmount - //SKYRAT EDIT END + //NOVA EDIT CHANGE END /obj/machinery/chem_dispenser/Initialize(mapload) - . = ..() - dispensable_reagents = sort_list(dispensable_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) - if(emagged_reagents) - emagged_reagents = sort_list(emagged_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) + if(dispensable_reagents != null && !dispensable_reagents.len) + dispensable_reagents = default_dispensable_reagents + if(dispensable_reagents) + dispensable_reagents = sort_list(dispensable_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) + + if(upgrade_reagents != null && !upgrade_reagents.len) + upgrade_reagents = default_upgrade_reagents if(upgrade_reagents) upgrade_reagents = sort_list(upgrade_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) - //SKYRAT EDIT ADDITION BEGIN - Skyrat-SS13/Skyrat-tg#1931 - if(upgrade_reagents2) - upgrade_reagents2 = sort_list(upgrade_reagents2, GLOBAL_PROC_REF(cmp_reagents_asc)) - if(upgrade_reagents3) - upgrade_reagents3 = sort_list(upgrade_reagents3, GLOBAL_PROC_REF(cmp_reagents_asc)) - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION BEGIN + if(upgrade2_reagents != null && !upgrade2_reagents.len) + upgrade2_reagents = default_upgrade2_reagents + if(upgrade2_reagents) + upgrade2_reagents = sort_list(upgrade2_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) + if(upgrade3_reagents != null && !upgrade3_reagents.len) + upgrade3_reagents = default_upgrade3_reagents + if(upgrade3_reagents) + upgrade3_reagents = sort_list(upgrade3_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) + //NOVA EDIT ADDITION END + + if(emagged_reagents != null && !emagged_reagents.len) + emagged_reagents = default_emagged_reagents + if(emagged_reagents) + emagged_reagents = sort_list(emagged_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) + + . = ..() // So that we call RefreshParts() after adjusting the lists + if(is_operational) begin_processing() update_appearance() /obj/machinery/chem_dispenser/Destroy() + cell = null QDEL_NULL(beaker) - QDEL_NULL(cell) return ..() /obj/machinery/chem_dispenser/examine(mob/user) @@ -151,17 +179,15 @@ if(in_range(user, src) || isobserver(user)) . += "The status display reads:\n\ Recharging [recharge_amount] power units per interval.\n\ - Power efficiency increased by [round((powerefficiency*1000)-100, 1)]%." + Power efficiency increased by [round((powerefficiency * 1000) -100, 1)]%.
    " . += span_notice("Use RMB to eject a stored beaker.") - /obj/machinery/chem_dispenser/on_set_is_operational(old_value) if(old_value) //Turned off end_processing() else //Turned on begin_processing() - /obj/machinery/chem_dispenser/process(seconds_per_tick) if (recharge_counter >= 8) var/usedpower = cell.give(recharge_amount) @@ -194,7 +220,6 @@ beaker_overlay = display_beaker() . += beaker_overlay - /obj/machinery/chem_dispenser/emag_act(mob/user, obj/item/card/emag/emag_card) if(obj_flags & EMAGGED) balloon_alert(user, "already emagged!") @@ -205,12 +230,10 @@ return TRUE /obj/machinery/chem_dispenser/ex_act(severity, target) - if(severity <= EXPLODE_LIGHT) - return FALSE - return ..() + return severity <= EXPLODE_LIGHT ? FALSE : ..() /obj/machinery/chem_dispenser/contents_explosion(severity, target) - ..() + . = ..() if(!beaker) return @@ -232,45 +255,25 @@ ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "ChemDispenser", name) + ui.open() - var/is_hallucinating = FALSE - if(isliving(user)) - var/mob/living/living_user = user - is_hallucinating = !!living_user.has_status_effect(/datum/status_effect/hallucination) - - if(is_hallucinating) - ui.set_autoupdate(FALSE) //to not ruin the immersion by constantly changing the fake chemicals + var/is_hallucinating = FALSE + if(isliving(user)) + var/mob/living/living_user = user + is_hallucinating = !!living_user.has_status_effect(/datum/status_effect/hallucination) + ui.set_autoupdate(!is_hallucinating) //to not ruin the immersion by constantly changing the fake chemicals - ui.open() +/obj/machinery/chem_dispenser/ui_static_data(mob/user) + . = ..() + .["showpH"] = show_ph /obj/machinery/chem_dispenser/ui_data(mob/user) - var/data = list() - data["amount"] = amount - data["energy"] = cell.charge ? cell.charge * powerefficiency : "0" //To prevent NaN in the UI. - data["maxEnergy"] = cell.maxcharge * powerefficiency - data["isBeakerLoaded"] = beaker ? 1 : 0 - data["showpH"] = show_ph - - var/beakerContents[0] - var/beakerCurrentVolume = 0 - if(beaker && beaker.reagents && beaker.reagents.reagent_list.len) - for(var/datum/reagent/R in beaker.reagents.reagent_list) - beakerContents.Add(list(list("name" = R.name, "volume" = round(R.volume, 0.01), "pH" = R.ph, "purity" = R.purity))) // list in a list because Byond merges the first list... - beakerCurrentVolume += R.volume - data["beakerContents"] = beakerContents - - if (beaker) - data["beakerCurrentVolume"] = round(beakerCurrentVolume, 0.01) - data["beakerMaxVolume"] = beaker.volume - data["beakerTransferAmounts"] = beaker.possible_transfer_amounts - data["beakerCurrentpH"] = round(beaker.reagents.ph, 0.01) - else - data["beakerCurrentVolume"] = null - data["beakerMaxVolume"] = null - data["beakerTransferAmounts"] = null - data["beakerCurrentpH"] = null - - var/chemicals[0] + . = list() + .["amount"] = amount + .["energy"] = cell.charge ? cell.charge * powerefficiency : 0 //To prevent NaN in the UI. + .["maxEnergy"] = cell.maxcharge * powerefficiency + + var/list/chemicals = list() var/is_hallucinating = FALSE if(isliving(user)) var/mob/living/living_user = user @@ -282,23 +285,37 @@ var/chemname = temp.name if(is_hallucinating && prob(5)) chemname = "[pick_list_replacements("hallucination.json", "chemicals")]" - chemicals.Add(list(list("title" = chemname, "id" = ckey(temp.name), "pH" = temp.ph, "pHCol" = convert_ph_to_readable_color(temp.ph)))) - data["chemicals"] = chemicals - data["recipes"] = saved_recipes + chemicals += list(list("title" = chemname, "id" = temp.name, "pH" = temp.ph, "pHCol" = convert_ph_to_readable_color(temp.ph))) + .["chemicals"] = chemicals + .["recipes"] = saved_recipes - data["recordingRecipe"] = recording_recipe - data["recipeReagents"] = list() + .["recordingRecipe"] = recording_recipe + .["recipeReagents"] = list() if(beaker?.reagents.ui_reaction_id) var/datum/chemical_reaction/reaction = get_chemical_reaction(beaker.reagents.ui_reaction_id) for(var/_reagent in reaction.required_reagents) var/datum/reagent/reagent = find_reagent_object_from_type(_reagent) - data["recipeReagents"] += ckey(reagent.name) - return data - -/obj/machinery/chem_dispenser/ui_act(action, params) + .["recipeReagents"] += reagent.name + + var/list/beaker_data = null + if(!QDELETED(beaker)) + beaker_data = list() + beaker_data["maxVolume"] = beaker.volume + beaker_data["transferAmounts"] = beaker.possible_transfer_amounts + beaker_data["pH"] = round(beaker.reagents.ph, 0.01) + beaker_data["currentVolume"] = round(beaker.reagents.total_volume, 0.01) + var/list/beakerContents = list() + if(length(beaker.reagents.reagent_list)) + for(var/datum/reagent/reagent in beaker.reagents.reagent_list) + beakerContents += list(list("name" = reagent.name, "volume" = round(reagent.volume, 0.01))) // list in a list because Byond merges the first list... + beaker_data["contents"] = beakerContents + .["beaker"] = beaker_data + +/obj/machinery/chem_dispenser/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return + switch(action) if("amount") if(!is_operational || QDELETED(beaker)) @@ -307,7 +324,8 @@ if(target in beaker.possible_transfer_amounts) amount = target work_animation() - . = TRUE + return TRUE + if("dispense") if(!is_operational || QDELETED(cell)) return @@ -318,7 +336,7 @@ var/datum/reagents/holder = beaker.reagents var/to_dispense = max(0, min(amount, holder.maximum_volume - holder.total_volume)) - if(!cell?.use(to_dispense / powerefficiency)) + if(!cell.use(to_dispense / powerefficiency)) say("Not enough energy to complete operation!") return holder.add_reagent(reagent, to_dispense, reagtemp = dispensed_temperature, added_purity = base_reagent_purity) @@ -326,7 +344,8 @@ work_animation() else recording_recipe[reagent_name] += amount - . = TRUE + return TRUE + if("remove") if(!is_operational || recording_recipe) return @@ -334,10 +353,12 @@ if(beaker && (amount in beaker.possible_transfer_amounts)) beaker.reagents.remove_all(amount) work_animation() - . = TRUE + return TRUE + if("eject") - replace_beaker(usr) - . = TRUE + replace_beaker(ui.user) + return TRUE + if("dispense_recipe") if(!is_operational || QDELETED(cell)) return @@ -346,7 +367,7 @@ if(!LAZYLEN(chemicals_to_dispense)) return for(var/key in chemicals_to_dispense) - var/reagent = GLOB.name2reagent[translate_legacy_chem_id(key)] + var/reagent = GLOB.name2reagent[key] var/dispense_amount = chemicals_to_dispense[key] if(!dispensable_reagents.Find(reagent)) return @@ -358,51 +379,50 @@ var/to_dispense = max(0, min(dispense_amount, holder.maximum_volume - holder.total_volume)) if(!to_dispense) continue - if(!cell?.use(to_dispense / powerefficiency)) + if(!cell.use(to_dispense / powerefficiency)) say("Not enough energy to complete operation!") return holder.add_reagent(reagent, to_dispense, reagtemp = dispensed_temperature, added_purity = base_reagent_purity) work_animation() else recording_recipe[key] += dispense_amount - . = TRUE + return TRUE + if("clear_recipes") - if(!is_operational) - return - var/yesno = tgui_alert(usr, "Clear all recipes?",, list("Yes","No")) - if(yesno == "Yes") + if(is_operational && tgui_alert(ui.user, "Clear all recipes?", "Clear?", list("Yes", "No")) == "Yes") saved_recipes = list() - . = TRUE + return TRUE + if("record_recipe") - if(!is_operational) - return - recording_recipe = list() - . = TRUE + if(is_operational) + recording_recipe = list() + return TRUE + if("save_recording") if(!is_operational) return - var/name = tgui_input_text(usr, "What do you want to name this recipe?", "Recipe Name", MAX_NAME_LEN) - if(!usr.can_perform_action(src, ALLOW_SILICON_REACH)) + var/name = tgui_input_text(ui.user, "What do you want to name this recipe?", "Recipe Name", MAX_NAME_LEN) + if(!ui.user.can_perform_action(src, ALLOW_SILICON_REACH)) return - if(saved_recipes[name] && tgui_alert(usr, "\"[name]\" already exists, do you want to overwrite it?",, list("Yes", "No")) == "No") + if(saved_recipes[name] && tgui_alert(ui.user, "\"[name]\" already exists, do you want to overwrite it?",, list("Yes", "No")) == "No") return if(name && recording_recipe) for(var/reagent in recording_recipe) - var/reagent_id = GLOB.name2reagent[translate_legacy_chem_id(reagent)] + var/reagent_id = GLOB.name2reagent[reagent] if(!dispensable_reagents.Find(reagent_id)) visible_message(span_warning("[src] buzzes."), span_hear("You hear a faint buzz.")) - to_chat(usr, span_warning("[src] cannot find [reagent]!")) + to_chat(ui.user, span_warning("[src] cannot find [reagent]!")) playsound(src, 'sound/machines/buzz-two.ogg', 50, TRUE) return saved_recipes[name] = recording_recipe recording_recipe = null - . = TRUE + return TRUE + if("cancel_recording") - if(!is_operational) - return - recording_recipe = null - . = TRUE - //SKYRAT EDIT ADDITION BEGIN - CHEMISTRY QOL + if(is_operational) + recording_recipe = null + return TRUE + //NOVA EDIT ADDITION BEGIN - CHEMISTRY QOL if("custom_amount") if(!beaker) to_chat(usr, span_warning("Insert a container first!")) @@ -411,40 +431,53 @@ transferAmounts -= customTransferAmount customTransferAmount = clamp(input(usr, "Please enter your desired transfer amount.", "Transfer amount", 0) as num|null, 0, beaker.volume) transferAmounts += customTransferAmount - //SKYRAT EDIT ADDITION END + return TRUE + //NOVA EDIT ADDITION END + if("reaction_lookup") if(beaker) - beaker.reagents.ui_interact(usr) + beaker.reagents.ui_interact(ui.user) + + var/result = handle_ui_act(action, params, ui, state) + if(isnull(result)) + result = FALSE + return result + +/// Same as ui_act() but to be used by subtypes exclusively +/obj/machinery/chem_dispenser/proc/handle_ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + return null /obj/machinery/chem_dispenser/wrench_act(mob/living/user, obj/item/tool) - . = ..() - default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + if(default_unfasten_wrench(user, tool) == SUCCESSFUL_UNFASTEN) + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING -/obj/machinery/chem_dispenser/attackby(obj/item/I, mob/living/user, params) - if(default_deconstruction_screwdriver(user, icon_state, icon_state, I)) +/obj/machinery/chem_dispenser/screwdriver_act(mob/living/user, obj/item/tool) + if(default_deconstruction_screwdriver(user, icon_state, icon_state, tool)) update_appearance() - return - if(default_deconstruction_crowbar(I)) - return - if(is_reagent_container(I) && !(I.item_flags & ABSTRACT) && I.is_open_container()) - var/obj/item/reagent_containers/B = I - //SKYRAT EDIT BEGIN - CHEMISTRY QOL + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING + +/obj/machinery/chem_dispenser/crowbar_act(mob/living/user, obj/item/tool) + if(default_deconstruction_crowbar(tool)) + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING + +/obj/machinery/chem_dispenser/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) + if(is_reagent_container(tool) && !(tool.item_flags & ABSTRACT) && tool.is_open_container()) + //NOVA EDIT ADDITION START - CHEMISTRY QOL + var/obj/item/reagent_containers/container = tool if(customTransferAmount) transferAmounts -= customTransferAmount - transferAmounts = B.possible_transfer_amounts - //SKYRAT EDIT END - . = TRUE //no afterattack - if(!user.transferItemToLoc(B, src)) - return - replace_beaker(user, B) - to_chat(user, span_notice("You add [B] to [src].")) + transferAmounts = container.possible_transfer_amounts + //NOVA EDIT ADDITION END + if(!user.transferItemToLoc(tool, src)) + return ..() + replace_beaker(user, tool) ui_interact(user) - else if(!user.combat_mode && !istype(I, /obj/item/card/emag)) - to_chat(user, span_warning("You can't load [I] into [src]!")) - return ..() - else - return ..() + return ITEM_INTERACT_SUCCESS + + return ..() /obj/machinery/chem_dispenser/get_cell() return cell @@ -483,28 +516,28 @@ recharge_amount *= capacitor.tier parts_rating += capacitor.tier for(var/datum/stock_part/servo/servo in component_parts) - /* SKYRAT EDIT - ORIGINAL + /* NOVA EDIT - ORIGINAL if (servo.tier > 3) dispensable_reagents |= upgrade_reagents else dispensable_reagents -= upgrade_reagents */ - //SKYRAT EDIT START + //NOVA EDIT START if (servo.tier > 1) dispensable_reagents |= upgrade_reagents else dispensable_reagents -= upgrade_reagents if (servo.tier > 2) - dispensable_reagents |= upgrade_reagents2 + dispensable_reagents |= upgrade2_reagents else - dispensable_reagents -= upgrade_reagents2 + dispensable_reagents -= upgrade2_reagents if (servo.tier > 3) - dispensable_reagents |= upgrade_reagents3 + dispensable_reagents |= upgrade3_reagents else - dispensable_reagents -= upgrade_reagents3 - //SKYRAT EDIT END + dispensable_reagents -= upgrade3_reagents + //NOVA EDIT END parts_rating += servo.tier powerefficiency = round(newpowereff, 0.01) @@ -559,7 +592,8 @@ nopower_state = null pass_flags = PASSTABLE show_ph = FALSE - dispensable_reagents = list( + /// The default list of reagents dispensable by the soda dispenser + var/static/list/drinks_dispensable_reagents = list( /datum/reagent/consumable/coffee, /datum/reagent/consumable/space_cola, /datum/reagent/consumable/cream, @@ -586,24 +620,26 @@ /datum/reagent/consumable/tonic, /datum/reagent/water, ) - //SKYRAT EDIT ADDITION BEGIN - Skyrat-SS13/Skyrat-tg#2429 - upgrade_reagents = list( + //NOVA EDIT ADDITION BEGIN + var/static/list/drink_upgrade_reagents = list( /datum/reagent/consumable/applejuice, /datum/reagent/consumable/pumpkinjuice, /datum/reagent/consumable/vanilla ) - upgrade_reagents2 = list( + var/static/list/drink_upgrade2_reagents = list( /datum/reagent/consumable/banana, /datum/reagent/consumable/berryjuice, /datum/reagent/consumable/blumpkinjuice ) - upgrade_reagents3 = list( + var/static/list/drink_upgrade3_reagents = list( /datum/reagent/consumable/watermelonjuice, /datum/reagent/consumable/peachjuice, /datum/reagent/consumable/sol_dry ) - //SKYRAT EDIT ADDITION END - emagged_reagents = list( + //NOVA EDIT ADDITION END + upgrade_reagents = null + /// The default list of emagged reagents dispensable by the soda dispenser + var/static/list/drink_emagged_reagents = list( /datum/reagent/consumable/ethanol/thirteenloko, /datum/reagent/consumable/ethanol/whiskey_cola, /datum/reagent/toxin/mindbreaker, @@ -612,6 +648,24 @@ base_reagent_purity = 0.5 /obj/machinery/chem_dispenser/drinks/Initialize(mapload) + if(dispensable_reagents != null && !dispensable_reagents.len) + dispensable_reagents = drinks_dispensable_reagents + if(emagged_reagents != null && !emagged_reagents.len) + emagged_reagents = drink_emagged_reagents + //NOVA EDIT ADDITION BEGIN + if(upgrade_reagents != null && !upgrade_reagents.len) + upgrade_reagents = drink_upgrade_reagents + if(upgrade_reagents) + upgrade_reagents = sort_list(upgrade_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) + if(upgrade2_reagents != null && !upgrade2_reagents.len) + upgrade2_reagents = drink_upgrade2_reagents + if(upgrade2_reagents) + upgrade2_reagents = sort_list(upgrade2_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) + if(upgrade3_reagents != null && !upgrade3_reagents.len) + upgrade3_reagents = drink_upgrade3_reagents + if(upgrade3_reagents) + upgrade3_reagents = sort_list(upgrade3_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) + //NOVA EDIT ADDITION END . = ..() AddComponent(/datum/component/simple_rotation) @@ -640,8 +694,7 @@ /obj/machinery/chem_dispenser/drinks/fullupgrade //fully ugpraded stock parts, emagged desc = "Contains a large reservoir of soft drinks. This model has had its safeties shorted out." - obj_flags = CAN_BE_HIT | EMAGGED - flags_1 = NODECONSTRUCT_1 + obj_flags = CAN_BE_HIT | EMAGGED | NO_DECONSTRUCTION circuit = /obj/item/circuitboard/machine/chem_dispenser/drinks/fullupgrade /obj/machinery/chem_dispenser/drinks/fullupgrade/Initialize(mapload) @@ -656,7 +709,8 @@ base_icon_state = "booze_dispenser" dispensed_temperature = WATER_MATTERSTATE_CHANGE_TEMP circuit = /obj/item/circuitboard/machine/chem_dispenser/drinks/beer - dispensable_reagents = list( + /// The default list of reagents dispensable by the beer dispenser + var/static/list/beer_dispensable_reagents = list( /datum/reagent/consumable/ethanol/absinthe, /datum/reagent/consumable/ethanol/ale, /datum/reagent/consumable/ethanol/applejack, @@ -675,7 +729,7 @@ /datum/reagent/consumable/ethanol/rice_beer, /datum/reagent/consumable/ethanol/rum, /datum/reagent/consumable/ethanol/sake, - /datum/reagent/consumable/ethanol/synthanol, // SKYRAT EDIT + /datum/reagent/consumable/ethanol/synthanol, // NOVA EDIT /datum/reagent/consumable/ethanol/tequila, /datum/reagent/consumable/ethanol/triple_sec, /datum/reagent/consumable/ethanol/vermouth, @@ -685,9 +739,10 @@ /datum/reagent/consumable/ethanol/yuyake, ) upgrade_reagents = null - upgrade_reagents2 = null //SKYRAT EDIT - upgrade_reagents3 = null //SKYRAT EDIT - emagged_reagents = list( + upgrade2_reagents = null //NOVA EDIT + upgrade3_reagents = null //NOVA EDIT + /// The default list of emagged reagents dispensable by the beer dispenser + var/static/list/beer_emagged_reagents = list( /datum/reagent/consumable/ethanol, /datum/reagent/iron, /datum/reagent/consumable/mintextract, @@ -695,10 +750,14 @@ /datum/reagent/consumable/ethanol/fernet ) +/obj/machinery/chem_dispenser/drinks/beer/Initialize(mapload) + dispensable_reagents = beer_dispensable_reagents + emagged_reagents = beer_emagged_reagents + . = ..() + /obj/machinery/chem_dispenser/drinks/beer/fullupgrade //fully ugpraded stock parts, emagged desc = "Contains a large reservoir of the good stuff. This model has had its safeties shorted out." - obj_flags = CAN_BE_HIT | EMAGGED - flags_1 = NODECONSTRUCT_1 + obj_flags = CAN_BE_HIT | EMAGGED | NO_DECONSTRUCTION circuit = /obj/item/circuitboard/machine/chem_dispenser/drinks/beer/fullupgrade /obj/machinery/chem_dispenser/drinks/beer/fullupgrade/Initialize(mapload) @@ -708,19 +767,25 @@ /obj/machinery/chem_dispenser/mutagen name = "mutagen dispenser" desc = "Creates and dispenses mutagen." - dispensable_reagents = list(/datum/reagent/toxin/mutagen) + /// The default list of reagents dispensable by mutagen chem dispenser + var/static/list/mutagen_dispensable_reagents = list(/datum/reagent/toxin/mutagen) upgrade_reagents = null - emagged_reagents = list(/datum/reagent/toxin/plasma) + /// The default list of emagged reagents dispensable by mutagen chem dispenser + var/static/list/mutagen_emagged_reagents = list(/datum/reagent/toxin/plasma) +/obj/machinery/chem_dispenser/mutagen/Initialize(mapload) + dispensable_reagents = mutagen_dispensable_reagents + emagged_reagents = mutagen_emagged_reagents + . = ..() /obj/machinery/chem_dispenser/mutagensaltpeter name = "botanical chemical dispenser" desc = "Creates and dispenses chemicals useful for botany." - flags_1 = NODECONSTRUCT_1 - + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION circuit = /obj/item/circuitboard/machine/chem_dispenser/mutagensaltpeter - dispensable_reagents = list( + /// The default list of dispensable reagents available in the mutagensaltpeter chem dispenser + var/static/list/mutagensaltpeter_dispensable_reagents = list( /datum/reagent/toxin/mutagen, /datum/reagent/saltpetre, /datum/reagent/plantnutriment/eznutriment, @@ -736,10 +801,13 @@ /datum/reagent/diethylamine) upgrade_reagents = null +/obj/machinery/chem_dispenser/mutagensaltpeter/Initialize(mapload) + dispensable_reagents = mutagensaltpeter_dispensable_reagents + . = ..() + /obj/machinery/chem_dispenser/fullupgrade //fully ugpraded stock parts, emagged desc = "Creates and dispenses chemicals. This model has had its safeties shorted out." - obj_flags = CAN_BE_HIT | EMAGGED - flags_1 = NODECONSTRUCT_1 + obj_flags = CAN_BE_HIT | EMAGGED | NO_DECONSTRUCTION circuit = /obj/item/circuitboard/machine/chem_dispenser/fullupgrade /obj/machinery/chem_dispenser/fullupgrade/Initialize(mapload) @@ -757,7 +825,9 @@ working_state = null nopower_state = null use_power = NO_POWER_USE - dispensable_reagents = list( + + /// The default list of dispensable reagents available in the abductor chem dispenser + var/static/list/abductor_dispensable_reagents = list( /datum/reagent/aluminium, /datum/reagent/bromine, /datum/reagent/carbon, @@ -799,3 +869,7 @@ /datum/reagent/consumable/liquidelectricity/enriched, /datum/reagent/medicine/c2/synthflesh ) + +/obj/machinery/chem_dispenser/abductor/Initialize(mapload) + dispensable_reagents = abductor_dispensable_reagents + . = ..() diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index 3716715a2d6cf5..b5a43adb4cb6b0 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -1,13 +1,3 @@ -///Tutorial states -#define TUT_NO_BUFFER 50 -#define TUT_START 1 -#define TUT_HAS_REAGENTS 2 -#define TUT_IS_ACTIVE 3 -#define TUT_IS_REACTING 4 -#define TUT_FAIL 4.5 -#define TUT_COMPLETE 5 -#define TUT_MISSING 10 - /obj/machinery/chem_heater name = "reaction chamber" //Maybe this name is more accurate? density = TRUE @@ -19,29 +9,24 @@ resistance_flags = FIRE_PROOF | ACID_PROOF circuit = /obj/item/circuitboard/machine/chem_heater + /// The beaker inside this machine var/obj/item/reagent_containers/beaker = null + /// The temperature this heater is trying to acheive var/target_temperature = 300 + /// The energy used by the heater to achieve the target temperature var/heater_coefficient = 0.05 + /// Is the heater on or off var/on = FALSE + /// How much buffer are we transferig per click var/dispense_volume = 1 - //The list of active clients using this heater, so that we can update the UI on a reaction_step. I assume there are multiple clients possible. - var/list/ui_client_list - ///If the user has the tutorial enabled - var/tutorial_active = FALSE - ///What state we're at in the tutorial - var/tutorial_state = 0 /obj/machinery/chem_heater/Initialize(mapload) . = ..() - create_reagents(200, NO_REACT)//Lets save some calculations here - //TODO: comsig reaction_start and reaction_end to enable/disable the UI autoupdater - this doesn't work presently as there's a hard divide between instant and processed reactions + create_reagents(200, NO_REACT) + register_context() -/obj/machinery/chem_heater/deconstruct(disassembled) - . = ..() - if(beaker && disassembled) - UnregisterSignal(beaker.reagents, COMSIG_REAGENTS_REACTION_STEP) - beaker.forceMove(drop_location()) - beaker = null +/obj/machinery/chem_heater/on_deconstruction() + beaker?.forceMove(drop_location()) /obj/machinery/chem_heater/Destroy() if(beaker) @@ -52,6 +37,7 @@ /obj/machinery/chem_heater/Exited(atom/movable/gone, direction) . = ..() if(gone == beaker) + UnregisterSignal(beaker.reagents, COMSIG_REAGENTS_REACTION_STEP) beaker = null update_appearance() @@ -63,7 +49,7 @@ . = ..() if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return - if(!can_interact(user) || !user.can_perform_action(src, ALLOW_SILICON_REACH|FORBID_TELEKINESIS_REACH)) + if(!user.can_perform_action(src, ALLOW_SILICON_REACH | FORBID_TELEKINESIS_REACH)) return replace_beaker(user) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN @@ -74,17 +60,27 @@ /obj/machinery/chem_heater/attack_ai_secondary(mob/user, list/modifiers) return attack_hand_secondary(user, modifiers) +/** + * Replace or eject the beaker inside this machine + * Arguments + * * mob/living/user - the player operating this machine + * * obj/item/reagent_containers/new_beaker - the new beaker to replace the current one if not null else it will just eject + */ /obj/machinery/chem_heater/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker) - if(!user) - return FALSE - if(beaker) - UnregisterSignal(beaker.reagents, COMSIG_REAGENTS_REACTION_STEP) + PRIVATE_PROC(TRUE) + + if(!QDELETED(beaker)) try_put_in_hand(beaker, user) - beaker = null - if(new_beaker) + + if(!QDELETED(new_beaker)) + if(!user.transferItemToLoc(new_beaker, src)) + update_appearance() + return FALSE beaker = new_beaker - RegisterSignal(beaker.reagents, COMSIG_REAGENTS_REACTION_STEP, PROC_REF(on_reaction_step)) + RegisterSignal(beaker.reagents, COMSIG_REAGENTS_REACTION_STEP, TYPE_PROC_REF(/obj/machinery/chem_heater, on_reaction_step)) + update_appearance() + return TRUE /obj/machinery/chem_heater/RefreshParts() @@ -93,206 +89,195 @@ for(var/datum/stock_part/micro_laser/micro_laser in component_parts) heater_coefficient *= micro_laser.tier +/** + * Heats the reagents of the currently inserted beaker only if machine is on & beaker has some reagents inside + * Arguments + * * seconds_per_tick - passed from process() or from reaction_step() + */ +/obj/machinery/chem_heater/proc/heat_reagents(seconds_per_tick) + PRIVATE_PROC(TRUE) + + //must be on and beaker must have something inside to heat + if(!on || (machine_stat & NOPOWER) || QDELETED(beaker) || !beaker.reagents.total_volume) + return FALSE + + //heat the beaker and use some power. we want to use only a small amount of power since this proc gets called frequently + beaker.reagents.adjust_thermal_energy((target_temperature - beaker.reagents.chem_temp) * heater_coefficient * seconds_per_tick * SPECIFIC_HEAT_DEFAULT * beaker.reagents.total_volume) + use_power(active_power_usage * seconds_per_tick * 0.3) + return TRUE + +/obj/machinery/chem_heater/proc/on_reaction_step(datum/reagents/holder, num_reactions, seconds_per_tick) + SIGNAL_HANDLER + + //adjust temp + heat_reagents(seconds_per_tick) + + //send updates to ui. faster than SStgui.update_uis + for(var/datum/tgui/ui in src.open_uis) + ui.send_update() + +/obj/machinery/chem_heater/add_context(atom/source, list/context, obj/item/held_item, mob/user) + if(isnull(held_item) || (held_item.item_flags & ABSTRACT) || (held_item.flags_1 & HOLOGRAM_1)) + return NONE + + if(!QDELETED(beaker)) + if(istype(held_item, /obj/item/reagent_containers/dropper) || istype(held_item, /obj/item/reagent_containers/syringe)) + context[SCREENTIP_CONTEXT_LMB] = "Inject" + return CONTEXTUAL_SCREENTIP_SET + if(is_reagent_container(held_item) && held_item.is_open_container()) + context[SCREENTIP_CONTEXT_LMB] = "Replace beaker" + return CONTEXTUAL_SCREENTIP_SET + else if(is_reagent_container(held_item) && held_item.is_open_container()) + context[SCREENTIP_CONTEXT_LMB] = "Insert beaker" + return CONTEXTUAL_SCREENTIP_SET + + if(held_item.tool_behaviour == TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "Open panel" + return CONTEXTUAL_SCREENTIP_SET + else if(panel_open && held_item.tool_behaviour == TOOL_CROWBAR) + context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" + return CONTEXTUAL_SCREENTIP_SET + + return NONE + /obj/machinery/chem_heater/examine(mob/user) . = ..() if(in_range(user, src) || isobserver(user)) - . += span_notice("The status display reads: Heating reagents at [heater_coefficient*1000]% speed.") + . += span_notice("The status display reads: Heating reagents at [heater_coefficient * 1000]% speed.") + if(!QDELETED(beaker)) + . += span_notice("It has a beaker of [beaker.reagents.total_volume] units capacity.") + if(beaker.reagents.is_reacting) + . += span_notice("Its contents are currently reacting.") + else + . += span_warning("There is no beaker inserted.") + . += span_notice("Its heating is turned [on ? "On" : "Off"].") + . += span_notice("The status display reads: Heating reagents at [heater_coefficient * 1000]% speed.") + if(panel_open) + . += span_notice("Its panel is open and can now be [EXAMINE_HINT("pried")] apart.") + else + . += span_notice("Its panel can be [EXAMINE_HINT("pried")] open") /obj/machinery/chem_heater/process(seconds_per_tick) - ..() - //Tutorial logics - if(tutorial_active) - switch(tutorial_state) - if(TUT_NO_BUFFER) - if(reagents.has_reagent(/datum/reagent/reaction_agent/basic_buffer, 5) && reagents.has_reagent(/datum/reagent/reaction_agent/acidic_buffer, 5)) - tutorial_state = TUT_START - - if(TUT_START) - if(!reagents.has_reagent(/datum/reagent/reaction_agent/basic_buffer, 5) || !reagents.has_reagent(/datum/reagent/reaction_agent/acidic_buffer, 5)) - tutorial_state = TUT_NO_BUFFER - return - if(beaker?.reagents.has_reagent(/datum/reagent/mercury, 10) || beaker?.reagents.has_reagent(/datum/reagent/chlorine, 10)) - tutorial_state = TUT_HAS_REAGENTS - if(TUT_HAS_REAGENTS) - if(!(beaker?.reagents.has_reagent(/datum/reagent/mercury, 9)) || !(beaker?.reagents.has_reagent(/datum/reagent/chlorine, 9))) - tutorial_state = TUT_MISSING - return - if(beaker?.reagents.chem_temp > 374)//If they heated it up as asked - tutorial_state = TUT_IS_ACTIVE - target_temperature = 375 - beaker.reagents.chem_temp = 375 - - if(TUT_IS_ACTIVE) - if(!(beaker?.reagents.has_reagent(/datum/reagent/mercury)) || !(beaker?.reagents.has_reagent(/datum/reagent/chlorine))) //Slightly concerned that people might take ages to read and it'll react anyways - tutorial_state = TUT_MISSING - return - if(length(beaker?.reagents.reaction_list) == 1)//Only fudge numbers for our intentful reaction - beaker.reagents.chem_temp = 375 - - if(target_temperature >= 390) - tutorial_state = TUT_IS_REACTING - - if(TUT_IS_REACTING) - if(!(beaker?.reagents.has_reagent(/datum/reagent/mercury)) || !(beaker?.reagents.has_reagent(/datum/reagent/chlorine))) - tutorial_state = TUT_COMPLETE - - if(TUT_COMPLETE) - if(beaker?.reagents.has_reagent(/datum/reagent/consumable/failed_reaction)) - tutorial_state = TUT_FAIL - return - if(!beaker?.reagents.has_reagent(/datum/reagent/medicine/calomel)) - tutorial_state = TUT_MISSING - - if(machine_stat & NOPOWER) + //is_reacting is handled in reaction_step() + if(QDELETED(beaker) || beaker.reagents.is_reacting) return - if(on) - if(beaker?.reagents.total_volume) - if(beaker.reagents.is_reacting)//on_reaction_step() handles this - return - //keep constant with the chemical acclimator please - beaker.reagents.adjust_thermal_energy((target_temperature - beaker.reagents.chem_temp) * heater_coefficient * seconds_per_tick * SPECIFIC_HEAT_DEFAULT * beaker.reagents.total_volume) - beaker.reagents.handle_reactions() - use_power(active_power_usage * seconds_per_tick) + if(heat_reagents(seconds_per_tick)) + //create new reactions after temperature adjust + beaker.reagents.handle_reactions() + + //send updates to ui. faster than SStgui.update_uis + for(var/datum/tgui/ui in src.open_uis) + ui.send_update() /obj/machinery/chem_heater/wrench_act(mob/living/user, obj/item/tool) - . = ..() - default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + . = ITEM_INTERACT_BLOCKING + if(default_unfasten_wrench(user, tool) == SUCCESSFUL_UNFASTEN) + return ITEM_INTERACT_SUCCESS -/obj/machinery/chem_heater/attackby(obj/item/I, mob/user, params) - if(default_deconstruction_screwdriver(user, "mixer0b", "mixer0b", I)) - return +/obj/machinery/chem_heater/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(default_deconstruction_screwdriver(user, "mixer0b", "[base_icon_state][beaker ? 1 : 0]b", tool)) + return ITEM_INTERACT_SUCCESS - if(default_deconstruction_crowbar(I)) - return +/obj/machinery/chem_heater/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(default_deconstruction_crowbar(tool)) + return ITEM_INTERACT_SUCCESS - if(is_reagent_container(I) && !(I.item_flags & ABSTRACT) && I.is_open_container()) - . = TRUE //no afterattack - var/obj/item/reagent_containers/B = I - if(!user.transferItemToLoc(B, src)) - return - replace_beaker(user, B) - to_chat(user, span_notice("You add [B] to [src].")) - ui_interact(user) - update_appearance() - return +/obj/machinery/chem_heater/attackby(obj/item/held_item, mob/user, params) + if((held_item.item_flags & ABSTRACT) || (held_item.flags_1 & HOLOGRAM_1)) + return ..() if(beaker) - if(istype(I, /obj/item/reagent_containers/dropper)) - var/obj/item/reagent_containers/dropper/D = I - D.afterattack(beaker, user, 1) - return - if(istype(I, /obj/item/reagent_containers/syringe)) - var/obj/item/reagent_containers/syringe/S = I - S.afterattack(beaker, user, 1) - return - return ..() + if(istype(held_item, /obj/item/reagent_containers/dropper) || istype(held_item, /obj/item/reagent_containers/syringe)) + var/obj/item/reagent_containers/injector = held_item + injector.afterattack(beaker, user, proximity_flag = TRUE) + return TRUE -/obj/machinery/chem_heater/on_deconstruction() - replace_beaker() - return ..() + if(is_reagent_container(held_item) && held_item.is_open_container()) + if(replace_beaker(user, held_item)) + ui_interact(user) + balloon_alert(user, "beaker added!") + return TRUE -///Forces a UI update every time a reaction step happens inside of the beaker it contains. This is so the UI is in sync with the reaction since it's important that the output matches the current conditions for pH adjustment and temperature. -/obj/machinery/chem_heater/proc/on_reaction_step(datum/reagents/holder, num_reactions, seconds_per_tick) - SIGNAL_HANDLER - if(on) - holder.adjust_thermal_energy((target_temperature - beaker.reagents.chem_temp) * heater_coefficient * seconds_per_tick * SPECIFIC_HEAT_DEFAULT * beaker.reagents.total_volume * (rand(8,11) * 0.1))//Give it a little wiggle room since we're actively reacting - for(var/ui_client in ui_client_list) - var/datum/tgui/ui = ui_client - if(!ui) - stack_trace("Warning: UI in UI client list is missing in [src] (chem_heater)") - remove_ui_client_list(ui) - continue - ui.send_update() + return ..() /obj/machinery/chem_heater/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "ChemHeater", name) ui.open() - add_ui_client_list(ui) - -/obj/machinery/chem_heater/ui_close(mob/user) - for(var/ui_client in ui_client_list) - var/datum/tgui/ui = ui_client - if(ui.user == user) - remove_ui_client_list(ui) - return ..() - -/* -*This adds an open ui client to the list - so that it can be force updated from reaction mechanisms. -* After adding it to the list, it enables a signal incase the ui is deleted - which will call a method to remove it from the list -* This is mostly to ensure we don't have defunct ui instances stored from any condition. -*/ -/obj/machinery/chem_heater/proc/add_ui_client_list(new_ui) - LAZYADD(ui_client_list, new_ui) - RegisterSignal(new_ui, COMSIG_QDELETING, PROC_REF(on_ui_deletion)) - -///This removes an open ui instance from the ui list and deregsiters the signal -/obj/machinery/chem_heater/proc/remove_ui_client_list(old_ui) - UnregisterSignal(old_ui, COMSIG_QDELETING) - LAZYREMOVE(ui_client_list, old_ui) - -///This catches a signal and uses it to delete the ui instance from the list -/obj/machinery/chem_heater/proc/on_ui_deletion(datum/tgui/source, force) - SIGNAL_HANDLER - remove_ui_client_list(source) - -/obj/machinery/chem_heater/ui_assets() - . = ..() || list() - . += get_asset_datum(/datum/asset/simple/tutorial_advisors) /obj/machinery/chem_heater/ui_data(mob/user) - var/data = list() - data["targetTemp"] = target_temperature - data["isActive"] = on - data["isBeakerLoaded"] = beaker ? 1 : 0 - - data["currentTemp"] = beaker ? beaker.reagents.chem_temp : null - data["beakerCurrentVolume"] = beaker ? round(beaker.reagents.total_volume, 0.01) : null - data["beakerMaxVolume"] = beaker ? beaker.volume : null - data["currentpH"] = beaker ? round(beaker.reagents.ph, 0.01) : null - var/upgrade_level = heater_coefficient*10 - data["upgradeLevel"] = upgrade_level - - var/list/beaker_contents = list() - for(var/r in beaker?.reagents.reagent_list) - var/datum/reagent/reagent = r - beaker_contents.len++ - beaker_contents[length(beaker_contents)] = list("name" = reagent.name, "volume" = round(reagent.volume, 0.01)) - data["beakerContents"] = beaker_contents + . = list() + .["targetTemp"] = target_temperature + .["isActive"] = on + .["upgradeLevel"] = heater_coefficient * 10 + + var/list/beaker_data = null + var/chem_temp = 0 + if(!QDELETED(beaker)) + beaker_data = list() + beaker_data["maxVolume"] = beaker.volume + beaker_data["transferAmounts"] = beaker.possible_transfer_amounts + beaker_data["pH"] = round(beaker.reagents.ph, 0.01) + beaker_data["currentVolume"] = round(beaker.reagents.total_volume, 0.01) + var/list/beakerContents = list() + if(length(beaker.reagents.reagent_list)) + for(var/datum/reagent/reagent in beaker.reagents.reagent_list) + beakerContents += list(list("name" = reagent.name, "volume" = round(reagent.volume, 0.01))) // list in a list because Byond merges the first list... + beaker_data["contents"] = beakerContents + chem_temp = beaker.reagents.chem_temp + .["beaker"] = beaker_data + .["currentTemp"] = chem_temp var/list/active_reactions = list() var/flashing = DISABLE_FLASHING //for use with alertAfter - since there is no alertBefore, I set the after to 0 if true, or to the max value if false for(var/_reaction in beaker?.reagents.reaction_list) var/datum/equilibrium/equilibrium = _reaction - if(!length(beaker.reagents.reaction_list))//I'm not sure why when it explodes it causes the gui to fail (it's missing danger (?) ) - stack_trace("how is this happening??") - continue if(!equilibrium.reaction.results)//Incase of no result reactions continue var/_reagent = equilibrium.reaction.results[1] - var/datum/reagent/reagent = beaker?.reagents.get_reagent(_reagent) //Reactions are named after their primary products + var/datum/reagent/reagent = beaker?.reagents.has_reagent(_reagent) //Reactions are named after their primary products if(!reagent) continue + var/datum/reagents/beaker_reagents = beaker.reagents + + //check for danger levels primirarly overheating var/overheat = FALSE var/danger = FALSE var/purity_alert = 2 //same as flashing if(reagent.purity < equilibrium.reaction.purity_min) purity_alert = ENABLE_FLASHING//Because 0 is seen as null danger = TRUE - if(!(flashing == ENABLE_FLASHING))//So that the pH meter flashes for ANY reactions out of optimal - if(equilibrium.reaction.optimal_ph_min > beaker?.reagents.ph || equilibrium.reaction.optimal_ph_max < beaker?.reagents.ph) + if(flashing != ENABLE_FLASHING)//So that the pH meter flashes for ANY reactions out of optimal + if(equilibrium.reaction.optimal_ph_min > beaker_reagents.ph || equilibrium.reaction.optimal_ph_max < beaker_reagents.ph) flashing = ENABLE_FLASHING if(equilibrium.reaction.is_cold_recipe) - if(equilibrium.reaction.overheat_temp > beaker?.reagents.chem_temp && equilibrium.reaction.overheat_temp != NO_OVERHEAT) + if(equilibrium.reaction.overheat_temp > beaker_reagents.chem_temp && equilibrium.reaction.overheat_temp != NO_OVERHEAT) danger = TRUE overheat = TRUE else - if(equilibrium.reaction.overheat_temp < beaker?.reagents.chem_temp) + if(equilibrium.reaction.overheat_temp < beaker_reagents.chem_temp) danger = TRUE overheat = TRUE + + //create ui data + active_reactions += list(list( + "name" = reagent.name, + "danger" = danger, + "overheat" = overheat, + "purityAlert" = purity_alert, + "quality" = equilibrium.reaction_quality, + "inverse" = reagent.inverse_chem_val, + "minPure" = equilibrium.reaction.purity_min, + "reactedVol" = equilibrium.reacted_vol, + "targetVol" = round(equilibrium.target_vol, 1) + ) + ) + + //additional data for competitive reactions if(equilibrium.reaction.reaction_flags & REACTION_COMPETITIVE) //We have a compeitive reaction - concatenate the results for the different reactions for(var/entry in active_reactions) if(entry["name"] == reagent.name) //If we have multiple reaction methods for the same result - combine them @@ -300,190 +285,97 @@ entry["targetVol"] = round(equilibrium.target_vol, 1)//Use the first result reagent to name the reaction detected entry["quality"] = (entry["quality"] + equilibrium.reaction_quality) /2 continue - active_reactions.len++ - active_reactions[length(active_reactions)] = list("name" = reagent.name, "danger" = danger, "purityAlert" = purity_alert, "quality" = equilibrium.reaction_quality, "overheat" = overheat, "inverse" = reagent.inverse_chem_val, "minPure" = equilibrium.reaction.purity_min, "reactedVol" = equilibrium.reacted_vol, "targetVol" = round(equilibrium.target_vol, 1))//Use the first result reagent to name the reaction detected - data["activeReactions"] = active_reactions - data["isFlashing"] = flashing - - data["acidicBufferVol"] = reagents.get_reagent_amount(/datum/reagent/reaction_agent/acidic_buffer) - data["basicBufferVol"] = reagents.get_reagent_amount(/datum/reagent/reaction_agent/basic_buffer) - data["dispenseVolume"] = dispense_volume - - data["tutorialMessage"] = null - //Tutorial output - if(tutorial_active) - switch(tutorial_state) - if(TUT_NO_BUFFER)//missing buffer - data["tutorialMessage"] = {"It looks like you’re a little low on buffers, here’s how to make more: - -Acidic buffer: 2 parts Sodium - 2 parts Hydrogen - 2 parts Ethanol - 2 parts Water - -Basic buffer: 3 parts Ammonia - 2 parts Chlorine - 2 parts Hydrogen - 2 parts Oxygen - -Heat either up to speed up the reaction. - -When the reactions are done, refill your chamber by pressing the Draw all buttons, to the right of the respective volume indicators. - -To continue with the tutorial, fill both of your acidic and alkaline volumes to at least 5u."} - if(TUT_START)//Default start - data["tutorialMessage"] = {"Hello and welcome to the exciting world of chemistry! This help option will teach you the basic of reactions by guiding you through a calomel reaction. - -For the majority of reactions, the overheat temperature is 900K, and the pH range is 5-9, though it's always worth looking up the ranges as these are changing. Calomel is no different. - -To continue the tutorial, insert a beaker with at least 10u mercury and 10u chlorine added."} - if(TUT_HAS_REAGENTS) //10u Hg and Cl - data["tutorialMessage"] = {"Good job! You'll see that at present this isn't reacting. That's because this reaction needs a minimum temperature of 375K. - -For the most part the hotter your reaction is, the faster it will react when it’s past it’s minimum temperature. But be careful to not heat it too much! "If your reaction is slow, your temperature is too low"! - -When you’re ready, set your temperature to 375K and heat up the beaker to that amount."} - if(TUT_IS_ACTIVE) //heat 375K - data["tutorialMessage"] = {"Great! You should see your reaction slowly progressing. - -Notice the pH dial on the right; the sum pH should be slowly drifting towards the left on the dial. How pure your solution is at the end depends on how well you keep your reaction within the optimal pH range. The dial will flash if any of the present reactions are outside their optimal. "If you're getting sludge, give your pH a nudge"! - -In a moment, we’ll increase the temperature so that our rate is faster. It’s up to you to keep your pH within the limits, so keep an eye on that dial, and get ready to add basic buffer using the injection button to the left of the volume indicator. - -To continue set your target temperature to 390K."} - if(TUT_IS_REACTING) //Heat 390K - data["tutorialMessage"] = "Stay focused on the reaction! You can do it!" - if(TUT_FAIL) //Sludge - data["tutorialMessage"] = "Ah, unfortunately your purity was too low and the reaction fell apart into errant sludge. Don't worry, you can always try again! Be careful though, for some reactions, failing isn't nearly as forgiving." - if(TUT_COMPLETE) //Complete - var/datum/reagent/calo = beaker?.reagents.has_reagent(/datum/reagent/medicine/calomel) - if(!calo) - tutorial_state = TUT_COMPLETE - return - switch(calo.purity) - if(-INFINITY to 0.25) - data["tutorialMessage"] = "You did it! Congratulations! I can tell you that your final purity was [calo.purity]. That's pretty close to the fail purity of 0.15 - which can often make some reactions explode. This chem will invert into Toxic sludge when ingested by another person, and will not cause of calomel's normal effects. Sneaky, huh?" - if(0.25 to 0.6) - data["tutorialMessage"] = "You did it! Congratulations! I can tell you that your final purity was [calo.purity]. Normally, this reaction will resolve above 0.7 without intervention. Are you praticing impure reactions? The lower you go, the higher change you have of getting dangerous effects during a reaction. In some more dangerous reactions, you're riding a fine line between death and an inverse chem, don't forget you can always chill your reaction to give yourself more time to manage it!" - if(0.6 to 0.75) - data["tutorialMessage"] = "You did it! Congratulations! I can tell you that your final purity was [calo.purity]. Normally, this reaction will resolve above 0.7 without intervention. Did you maybe add too much basic buffer and go past 9? If you like - you're welcome to try again. Just double press the help button!" - if(0.75 to 0.85) - data["tutorialMessage"] = "You did it! Congratulations! I can tell you that your final purity was [calo.purity]. You got pretty close to optimal! Feel free to try again if you like by double pressing the help button." - if(0.75 to 0.99) - data["tutorialMessage"] = "You did it! Congratulations! I can tell you that your final purity was [calo.purity]. You got pretty close to optimal! Feel free to try again if you like by double pressing the help button, but this is a respectable purity." - if(0.99 to 1) - data["tutorialMessage"] = "You did it! Congratulations! I can tell you that your final purity was [calo.purity]. Your calomel is as pure as they come! You've mastered the basics of chemistry, but there's plenty more challenges on the horizon. Good luck!" - user.client?.give_award(/datum/award/achievement/jobs/chemistry_tut, user) - data["tutorialMessage"] += "\n\nDid you notice that your temperature increased past 390K while reacting too? That's because this reaction is exothermic (heat producing), so for some reactions you might have to adjust your target to compensate. Oh, and you can check your purity by researching and printing off a chemical analyzer at the medlathe (for now)!" - if(TUT_MISSING) //Missing - data["tutorialMessage"] = "Uh oh, something went wrong. Did you take the beaker out, heat it up too fast, or have other things in the beaker? Try restarting the tutorial by double pressing the help button." - - return data - -/obj/machinery/chem_heater/ui_act(action, params) + .["activeReactions"] = active_reactions + + .["isFlashing"] = flashing + .["acidicBufferVol"] = reagents.get_reagent_amount(/datum/reagent/reaction_agent/acidic_buffer) + .["basicBufferVol"] = reagents.get_reagent_amount(/datum/reagent/reaction_agent/basic_buffer) + .["dispenseVolume"] = dispense_volume + +/obj/machinery/chem_heater/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return + switch(action) if("power") on = !on - . = TRUE + return TRUE + if("temperature") var/target = params["target"] - if(text2num(target) != null) - target = text2num(target) - . = TRUE - if(.) - target_temperature = clamp(target, 0, 1000) + if(isnull(target)) + return FALSE + + target = text2num(target) + if(isnull(target)) + return FALSE + + target_temperature = clamp(target, 0, 1000) + return TRUE + if("eject") //Eject doesn't turn it off, so you can preheat for beaker swapping - replace_beaker(usr) - . = TRUE + return replace_beaker(ui.user) + if("acidBuffer") var/target = params["target"] - if(text2num(target) != null) - target = text2num(target) - . = TRUE - if(.) - move_buffer("acid", target) + if(!target) + return FALSE + + target = text2num(target) + if(isnull(target)) + return FALSE + + return move_buffer(/datum/reagent/reaction_agent/acidic_buffer, target) if("basicBuffer") var/target = params["target"] - if(text2num(target) != null) - target = text2num(target) //Because the input is flipped - . = TRUE - if(.) - move_buffer("basic", target) + if(!target) + return FALSE + + target = text2num(target) + if(isnull(target)) + return FALSE + + return move_buffer(/datum/reagent/reaction_agent/basic_buffer, target) if("disp_vol") var/target = params["target"] - if(text2num(target) != null) - target = text2num(target) //Because the input is flipped - . = TRUE - if(.) - dispense_volume = target - if("help") - tutorial_active = !tutorial_active - if(tutorial_active) - tutorial_state = 1 - return - tutorial_state = 0 - //Refresh window size - ui_close(usr) - ui_interact(usr, null) - - -///Moves a type of buffer from the heater to the beaker, or vice versa -/obj/machinery/chem_heater/proc/move_buffer(buffer_type, volume) - if(!beaker) + if(!target) + return FALSE + + target = text2num(target) + if(isnull(target)) + return FALSE + + dispense_volume = target + return TRUE + +/** + * Injects either acid/base buffer into the beaker + * Arguments + * * datum/reagent/buffer_type - the type of buffer[acid, base] to inject/withdraw + * * volume - how much to volume to inject -ve values means withdraw + */ +/obj/machinery/chem_heater/proc/move_buffer(datum/reagent/buffer_type, volume) + PRIVATE_PROC(TRUE) + + //no beaker + if(QDELETED(beaker)) say("No beaker found!") - return - if(buffer_type == "acid") - if(volume < 0) - var/datum/reagent/acid_reagent = beaker.reagents.get_reagent(/datum/reagent/reaction_agent/acidic_buffer) - if(!acid_reagent) - say("Unable to find acidic buffer in beaker to draw from! Please insert a beaker containing acidic buffer.") - return - var/datum/reagent/acid_reagent_heater = reagents.get_reagent(/datum/reagent/reaction_agent/acidic_buffer) - var/cur_vol = 0 - if(acid_reagent_heater) - cur_vol = acid_reagent_heater.volume - volume = 100 - cur_vol - beaker.reagents.trans_id_to(src, acid_reagent.type, volume)//negative because we're going backwards - return - //We must be positive here - reagents.trans_id_to(beaker, /datum/reagent/reaction_agent/acidic_buffer, dispense_volume) - return - - if(buffer_type == "basic") - if(volume < 0) - var/datum/reagent/basic_reagent = beaker.reagents.get_reagent(/datum/reagent/reaction_agent/basic_buffer) - if(!basic_reagent) - say("Unable to find basic buffer in beaker to draw from! Please insert a beaker containing basic buffer.") - return - var/datum/reagent/basic_reagent_heater = reagents.get_reagent(/datum/reagent/reaction_agent/basic_buffer) - var/cur_vol = 0 - if(basic_reagent_heater) - cur_vol = basic_reagent_heater.volume - volume = 100 - cur_vol - beaker.reagents.trans_id_to(src, basic_reagent.type, volume)//negative because we're going backwards - return - reagents.trans_id_to(beaker, /datum/reagent/reaction_agent/basic_buffer, dispense_volume) - return - + return FALSE -/obj/machinery/chem_heater/proc/get_purity_color(datum/equilibrium/equilibrium) - var/_reagent = equilibrium.reaction.results[1] - var/datum/reagent/reagent = equilibrium.holder.get_reagent(_reagent) - // Can't be a switch due to http://www.byond.com/forum/post/2750423 - if(reagent.purity in 1 to INFINITY) - return "blue" - else if(reagent.purity in 0.8 to 1) - return "green" - else if(reagent.purity in reagent.inverse_chem_val to 0.8) - return "olive" - else if(reagent.purity in equilibrium.reaction.purity_min to reagent.inverse_chem_val) - return "orange" - else if(reagent.purity in -INFINITY to equilibrium.reaction.purity_min) - return "red" + //trying to absorb buffer from currently inserted beaker + if(volume < 0) + if(!beaker.reagents.has_reagent(buffer_type)) + var/name = initial(buffer_type.name) + say("Unable to find [name] in beaker to draw from! Please insert a beaker containing [name].") + return FALSE + beaker.reagents.trans_to(src, (reagents.maximum_volume / 2) - reagents.get_reagent_amount(buffer_type), target_id = buffer_type) + return TRUE + + //trying to inject buffer into currently inserted beaker + reagents.trans_to(beaker, dispense_volume, target_id = buffer_type) + return TRUE //Has a lot of buffer and is upgraded /obj/machinery/chem_heater/debug @@ -505,12 +397,3 @@ To continue set your target temperature to 390K."} . = ..() reagents.add_reagent(/datum/reagent/reaction_agent/basic_buffer, 20) reagents.add_reagent(/datum/reagent/reaction_agent/acidic_buffer, 20) - -#undef TUT_NO_BUFFER -#undef TUT_START -#undef TUT_HAS_REAGENTS -#undef TUT_IS_ACTIVE -#undef TUT_IS_REACTING -#undef TUT_FAIL -#undef TUT_COMPLETE -#undef TUT_MISSING diff --git a/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm b/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm index 2acf0027a7204a..90de91a6aafc19 100644 --- a/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm +++ b/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm @@ -75,7 +75,7 @@ This will not clean any inverted reagents. Inverted reagents will still be corre /obj/machinery/chem_mass_spec/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /* beaker swapping/attack code */ diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 39146c12d0e226..b263baefb82718 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -125,30 +125,36 @@ /obj/machinery/chem_master/wrench_act(mob/living/user, obj/item/tool) - . = ..() - default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + if(default_unfasten_wrench(user, tool) == SUCCESSFUL_UNFASTEN) + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING -/obj/machinery/chem_master/attackby(obj/item/item, mob/user, params) - if(default_deconstruction_screwdriver(user, icon_state, icon_state, item)) +/obj/machinery/chem_master/screwdriver_act(mob/living/user, obj/item/tool) + if(default_deconstruction_screwdriver(user, icon_state, icon_state, tool)) update_appearance(UPDATE_ICON) - return - if(default_deconstruction_crowbar(item)) - return - if(is_reagent_container(item) && !(item.item_flags & ABSTRACT) && item.is_open_container()) - . = TRUE // No afterattack - var/obj/item/reagent_containers/beaker = item - replace_beaker(user, beaker) + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING + +/obj/machinery/chem_master/crowbar_act(mob/living/user, obj/item/tool) + if(default_deconstruction_crowbar(tool)) + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING + +/obj/machinery/chem_master/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) + if(is_reagent_container(tool) && !(tool.item_flags & ABSTRACT) && tool.is_open_container()) + replace_beaker(user, tool) if(!panel_open) ui_interact(user) + return ITEM_INTERACT_SUCCESS + return ..() /obj/machinery/chem_master/attack_hand_secondary(mob/user, list/modifiers) . = ..() if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) - return + return . if(!can_interact(user) || !user.can_perform_action(src, ALLOW_SILICON_REACH|FORBID_TELEKINESIS_REACH)) - return + return . replace_beaker(user) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN @@ -175,8 +181,8 @@ CAT_TUBES = GLOB.reagent_containers[CAT_TUBES], CAT_PILLS = GLOB.reagent_containers[CAT_PILLS], CAT_PATCHES = GLOB.reagent_containers[CAT_PATCHES], - CAT_HYPOS = GLOB.reagent_containers[CAT_HYPOS], // SKYRAT EDIT ADDITION - CAT_DARTS = GLOB.reagent_containers[CAT_DARTS], // SKYRAT EDIT ADDITION + CAT_HYPOS = GLOB.reagent_containers[CAT_HYPOS], // NOVA EDIT ADDITION + CAT_DARTS = GLOB.reagent_containers[CAT_DARTS], // NOVA EDIT ADDITION ) /obj/machinery/chem_master/ui_assets(mob/user) @@ -340,10 +346,11 @@ // Generate item name var/item_name_default = initial(container_style.name) + var/datum/reagent/master_reagent = reagents.get_master_reagent() if(selected_container == default_container) // Tubes and bottles gain reagent name - item_name_default = "[reagents.get_master_reagent_name()] [item_name_default]" + item_name_default = "[master_reagent.name] [item_name_default]" if(!(initial(container_style.reagent_flags) & OPENCONTAINER)) // Closed containers get both reagent name and units in the name - item_name_default = "[reagents.get_master_reagent_name()] [item_name_default] ([volume_in_each]u)" + item_name_default = "[master_reagent.name] [item_name_default] ([volume_in_each]u)" var/item_name = tgui_input_text(usr, "Container name", "Name", @@ -395,7 +402,7 @@ if (target == TARGET_BUFFER) if(!check_reactions(reagent, beaker.reagents)) return FALSE - beaker.reagents.trans_id_to(src, reagent.type, amount) + beaker.reagents.trans_to(src, amount, target_id = reagent.type) update_appearance(UPDATE_ICON) return TRUE @@ -406,7 +413,7 @@ if (target == TARGET_BEAKER && transfer_mode == TRANSFER_MODE_MOVE) if(!check_reactions(reagent, reagents)) return FALSE - reagents.trans_id_to(beaker, reagent.type, amount) + reagents.trans_to(beaker, amount, target_id = reagent.type) update_appearance(UPDATE_ICON) return TRUE diff --git a/code/modules/reagents/chemistry/machinery/chem_recipe_debug.dm b/code/modules/reagents/chemistry/machinery/chem_recipe_debug.dm index ce409dd29a81d4..b5f2d31dfa5704 100644 --- a/code/modules/reagents/chemistry/machinery/chem_recipe_debug.dm +++ b/code/modules/reagents/chemistry/machinery/chem_recipe_debug.dm @@ -128,7 +128,7 @@ say("Reaction completed for [cached_reactions[index]] final temperature = [reagents.chem_temp], ph = [reagents.ph], time taken = [react_time]s.") var/datum/chemical_reaction/reaction = cached_reactions[index] for(var/reagent_type in reaction.results) - var/datum/reagent/reagent = reagents.get_reagent(reagent_type) + var/datum/reagent/reagent = reagents.has_reagent(reagent_type) if(!reagent) say(span_warning("Unable to find product [reagent_type] in holder after reaction! reagents found are:")) for(var/other_reagent in reagents.reagent_list) @@ -231,7 +231,7 @@ continue if(!equilibrium.reaction.results)//Incase of no result reactions continue - var/datum/reagent/reagent = reagents.get_reagent(equilibrium.reaction.results[1]) //Reactions are named after their primary products + var/datum/reagent/reagent = reagents.has_reagent(equilibrium.reaction.results[1]) //Reactions are named after their primary products if(!reagent) continue var/overheat = FALSE diff --git a/code/modules/reagents/chemistry/machinery/chem_separator.dm b/code/modules/reagents/chemistry/machinery/chem_separator.dm index 2e5571fd4312bb..13be8d6554f3af 100644 --- a/code/modules/reagents/chemistry/machinery/chem_separator.dm +++ b/code/modules/reagents/chemistry/machinery/chem_separator.dm @@ -231,7 +231,7 @@ soundloop.start() var/vapor_amount = distillation_rate * seconds_per_tick // Vapor to condenser - reagents.trans_id_to(condenser, separating_reagent.type, vapor_amount) + reagents.trans_to(condenser, vapor_amount, target_id = separating_reagent.type) // Cool the vapor down condenser.set_temperature(air.temperature) // Condense into container diff --git a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm index 6de441c6fc7d39..686196b73ff7d7 100644 --- a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm +++ b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm @@ -6,7 +6,7 @@ base_icon_state = "dispenser" amount = 10 resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF - flags_1 = NODECONSTRUCT_1 + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION use_power = NO_POWER_USE var/static/list/shortcuts = list( "meth" = /datum/reagent/drug/methamphetamine @@ -20,41 +20,54 @@ ui = new(user, src, "ChemDebugSynthesizer", name) ui.open() -/obj/machinery/chem_dispenser/chem_synthesizer/ui_act(action, params) - . = ..() - if(.) - return +/obj/machinery/chem_dispenser/chem_synthesizer/handle_ui_act(action, params, datum/tgui/ui, datum/ui_state/state) switch(action) - if("ejectBeaker") - if(beaker) - try_put_in_hand(beaker, usr) - beaker = null - . = TRUE if("input") - var/input_reagent = (input("Enter the name of any reagent", "Input") as text|null) - input_reagent = get_reagent_type_from_product_string(input_reagent) //from string to type + if(QDELETED(beaker)) + return FALSE + + var/selected_reagent = tgui_input_list(ui.user, "Select reagent", "Reagent", GLOB.name2reagent) + if(!selected_reagent) + return FALSE + + var/datum/reagent/input_reagent = GLOB.name2reagent[selected_reagent] if(!input_reagent) - say("REAGENT NOT FOUND") - return - else - if(!beaker) - return - else if(!beaker.reagents && !QDELETED(beaker)) - beaker.create_reagents(beaker.volume) - beaker.reagents.add_reagent(input_reagent, amount, added_purity = (purity/100)) + return FALSE + + beaker.reagents.add_reagent(input_reagent, amount, added_purity = (purity / 100)) + return TRUE + if("makecup") if(beaker) return beaker = new /obj/item/reagent_containers/cup/beaker/bluespace(src) visible_message(span_notice("[src] dispenses a bluespace beaker.")) + return TRUE + if("amount") - var/input = text2num(params["amount"]) - if(input) - amount = input + var/input = params["amount"] + if(isnull(input)) + return FALSE + + input = text2num(input) + if(isnull(input)) + return FALSE + + amount = input + return TRUE + if("purity") - var/input = text2num(params["amount"]) - if(input) - purity = input + var/input = params["amount"] + if(isnull(input)) + return FALSE + + input = text2num(input) + if(isnull(input)) + return FALSE + + purity = input + return TRUE + update_appearance() /obj/machinery/chem_dispenser/chem_synthesizer/Destroy() @@ -64,11 +77,3 @@ /obj/machinery/chem_dispenser/chem_synthesizer/ui_data(mob/user) . = ..() .["purity"] = purity - return . - -/obj/machinery/chem_dispenser/chem_synthesizer/proc/find_reagent(input) - . = FALSE - if(GLOB.chemical_reagents_list[input]) //prefer IDs! - return input - else - return get_chem_id(input) diff --git a/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm b/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm new file mode 100644 index 00000000000000..9ad8e3ecfc5a97 --- /dev/null +++ b/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm @@ -0,0 +1,252 @@ +/obj/item/storage/portable_chem_mixer + name = "Portable Chemical Mixer" + desc = "A portable device that dispenses and mixes chemicals. All necessary reagents need to be supplied with beakers. A label indicates that the 'CTRL'-button on the device may be used to open it for refills. This device can be worn as a belt. The letters 'S&T' are imprinted on the side." + icon = 'icons/obj/medical/chemical.dmi' + icon_state = "portablechemicalmixer_open" + worn_icon_state = "portable_chem_mixer" + equip_sound = 'sound/items/equip/toolbelt_equip.ogg' + w_class = WEIGHT_CLASS_HUGE + slot_flags = ITEM_SLOT_BELT + custom_price = PAYCHECK_CREW * 10 + custom_premium_price = PAYCHECK_CREW * 14 + + ///Creating an empty slot for a beaker that can be added to dispense into + var/obj/item/reagent_containers/beaker = null + ///The amount of reagent that is to be dispensed currently + var/amount = 30 + ///List in which all currently dispensable reagents go + var/list/dispensable_reagents = list() + +/obj/item/storage/portable_chem_mixer/Initialize(mapload) + . = ..() + atom_storage.max_total_storage = 200 + atom_storage.max_slots = 50 + atom_storage.set_holdable(list( + /obj/item/reagent_containers/cup/beaker, + /obj/item/reagent_containers/cup/bottle, + /obj/item/reagent_containers/cup/tube, + /obj/item/reagent_containers/cup/glass/waterbottle, + /obj/item/reagent_containers/condiment, + )) + register_context() + +/obj/item/storage/portable_chem_mixer/Destroy() + QDEL_NULL(beaker) + return ..() + +/obj/item/storage/portable_chem_mixer/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + + context[SCREENTIP_CONTEXT_CTRL_LMB] = "[atom_storage.locked ? "Un" : ""]Lock storage" + if(atom_storage.locked && !QDELETED(beaker)) + context[SCREENTIP_CONTEXT_ALT_LMB] = "Eject beaker" + + if(!isnull(held_item)) + if (!atom_storage.locked || \ + (held_item.item_flags & ABSTRACT) || \ + !is_reagent_container(held_item) || \ + !held_item.is_open_container() \ + ) + return CONTEXTUAL_SCREENTIP_SET + context[SCREENTIP_CONTEXT_LMB] = "Insert beaker" + + return CONTEXTUAL_SCREENTIP_SET + +/obj/item/storage/portable_chem_mixer/examine(mob/user) + . = ..() + if(!atom_storage.locked) + . += span_notice("Use [EXAMINE_HINT("ctrl click")] to lock in order to use its interface.") + else + . += span_notice("Its storage is locked, use [EXAMINE_HINT("ctrl click")] to unlock it.") + if(QDELETED(beaker)) + . += span_notice("A beaker can be inserted to dispense reagents after it is locked.") + else + . += span_notice("A beaker of [beaker.reagents.maximum_volume] units capacity is inserted.") + . += span_notice("It can be ejected with [EXAMINE_HINT("alt click")].") + +/obj/item/storage/portable_chem_mixer/ex_act(severity, target) + return severity > EXPLODE_LIGHT ? ..() : FALSE + +/obj/item/storage/portable_chem_mixer/attackby(obj/item/weapon, mob/user, params) + if (!atom_storage.locked || \ + (weapon.item_flags & ABSTRACT) || \ + !is_reagent_container(weapon) || \ + !weapon.is_open_container() \ + ) + return ..() + + replace_beaker(user, weapon) + update_appearance() + return TRUE + +/obj/item/storage/portable_chem_mixer/update_icon_state() + if(!atom_storage.locked) + icon_state = "portablechemicalmixer_open" + return ..() + if(beaker) + icon_state = "portablechemicalmixer_full" + return ..() + icon_state = "portablechemicalmixer_empty" + return ..() + +/obj/item/storage/portable_chem_mixer/AltClick(mob/living/user) + if(!atom_storage.locked) + balloon_alert(user, "lock first to use alt eject!") + return ..() + if(!can_interact(user) || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) + return + + replace_beaker(user) + update_appearance() + +/obj/item/storage/portable_chem_mixer/CtrlClick(mob/living/user) + if(atom_storage.locked == STORAGE_FULLY_LOCKED) + atom_storage.locked = STORAGE_NOT_LOCKED + replace_beaker(user) + SStgui.close_uis(src) + else + atom_storage.locked = STORAGE_FULLY_LOCKED + atom_storage.hide_contents(usr) + + update_appearance() + +/obj/item/storage/portable_chem_mixer/Exited(atom/movable/gone, direction) + . = ..() + if(gone == beaker) + beaker = null + else + update_contents() + +/// Reload dispensable reagents from new contents +/obj/item/storage/portable_chem_mixer/proc/update_contents() + dispensable_reagents.Cut() + for (var/obj/item/reagent_containers/container in contents) + var/datum/reagent/key = container.reagents.get_master_reagent() + if(isnull(key)) //no reagent inside container + continue + + var/key_type = key.type + if (!(key_type in dispensable_reagents)) + dispensable_reagents[key_type] = list() + dispensable_reagents[key_type]["reagents"] = list() + dispensable_reagents[key_type]["reagents"] += container.reagents + +/obj/item/storage/portable_chem_mixer/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + . = ..() + if(!atom_storage.locked) + update_contents() + +/** + * Replaces the beaker of the portable chemical mixer with another beaker, or simply adds the new beaker if none is in currently + * + * Checks if a valid user and a valid new beaker exist and attempts to replace the current beaker in the portable chemical mixer with the one in hand. Simply places the new beaker in if no beaker is currently loaded + * Arguments: + * * mob/living/user - The user who is trying to exchange beakers + * * obj/item/reagent_containers/new_beaker - The new beaker that the user wants to put into the device + */ +/obj/item/storage/portable_chem_mixer/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker) + if(beaker) + user.put_in_hands(beaker) + if(new_beaker) + if(!user.transferItemToLoc(new_beaker, src)) + return + beaker = new_beaker + +/obj/item/storage/portable_chem_mixer/MouseDrop(obj/over_object) + . = ..() + if(ismob(loc)) + var/mob/M = loc + if(!M.incapacitated() && istype(over_object, /atom/movable/screen/inventory/hand)) + var/atom/movable/screen/inventory/hand/H = over_object + M.putItemFromInventoryInHandIfPossible(src, H.held_index) + +/obj/item/storage/portable_chem_mixer/ui_interact(mob/user, datum/tgui/ui) + if(loc != user) + balloon_alert(user, "hold it in your hand!") + return + if(!atom_storage.locked) + balloon_alert(user, "lock it first!") + return + + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "PortableChemMixer", name) + ui.open() + + var/is_hallucinating = FALSE + if(isliving(user)) + var/mob/living/living_user = user + is_hallucinating = !!living_user.has_status_effect(/datum/status_effect/hallucination) + ui.set_autoupdate(!is_hallucinating) // to not ruin the immersion by constantly changing the fake chemicals + +/obj/item/storage/portable_chem_mixer/ui_data(mob/user) + . = list() + .["amount"] = amount + + var/list/chemicals = list() + var/is_hallucinating = FALSE + if(isliving(user)) + var/mob/living/living_user = user + is_hallucinating = !!living_user.has_status_effect(/datum/status_effect/hallucination) + + for(var/re in dispensable_reagents) + var/value = dispensable_reagents[re] + var/datum/reagent/temp = GLOB.chemical_reagents_list[re] + if(temp) + var/chemname = temp.name + var/total_volume = 0 + var/total_ph = 0 + for (var/datum/reagents/rs in value["reagents"]) + total_volume += rs.total_volume + total_ph = rs.ph + if(is_hallucinating && prob(5)) + chemname = "[pick_list_replacements("hallucination.json", "chemicals")]" + chemicals += list(list("title" = chemname, "id" = temp.name, "volume" = total_volume, "pH" = total_ph)) + .["chemicals"] = chemicals + + var/list/beaker_data = null + if(!QDELETED(beaker)) + beaker_data = list() + beaker_data["maxVolume"] = beaker.volume + beaker_data["transferAmounts"] = beaker.possible_transfer_amounts + beaker_data["pH"] = round(beaker.reagents.ph, 0.01) + beaker_data["currentVolume"] = round(beaker.reagents.total_volume, 0.01) + var/list/beakerContents = list() + if(length(beaker?.reagents.reagent_list)) + for(var/datum/reagent/reagent in beaker.reagents.reagent_list) + beakerContents += list(list("name" = reagent.name, "volume" = round(reagent.volume, 0.01))) // list in a list because Byond merges the first list... + beaker_data["contents"] = beakerContents + .["beaker"] = beaker_data + +/obj/item/storage/portable_chem_mixer/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + switch(action) + if("amount") + amount = text2num(params["target"]) + return TRUE + + if("dispense") + var/datum/reagent/reagent = GLOB.name2reagent[params["reagent"]] + if(isnull(reagent)) + return + + if(!QDELETED(beaker)) + var/datum/reagents/container = beaker.reagents + var/actual = min(amount, container.maximum_volume - container.total_volume) + for (var/datum/reagents/source in dispensable_reagents[reagent]["reagents"]) + actual -= source.trans_to(beaker, min(source.total_volume, actual), transferred_by = ui.user) + if (actual <= 0) + break + return TRUE + + if("remove") + beaker.reagents.remove_all(text2num(params["amount"])) + return TRUE + + if("eject") + replace_beaker(ui.user) + update_appearance() + return TRUE diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index d98044102d30af..f4be905a0738ba 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -142,10 +142,10 @@ /obj/machinery/reagentgrinder/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/reagentgrinder/screwdriver_act(mob/living/user, obj/item/tool) - . = TOOL_ACT_TOOLTYPE_SUCCESS + . = ITEM_INTERACT_SUCCESS if(!beaker && !length(holdingitems)) return default_deconstruction_screwdriver(user, icon_state, icon_state, tool) diff --git a/code/modules/reagents/chemistry/machinery/smoke_machine.dm b/code/modules/reagents/chemistry/machinery/smoke_machine.dm index 88072874e0fff8..a8d1765891bf1c 100644 --- a/code/modules/reagents/chemistry/machinery/smoke_machine.dm +++ b/code/modules/reagents/chemistry/machinery/smoke_machine.dm @@ -77,7 +77,6 @@ /obj/machinery/smoke_machine/process() - ..() if(reagents.total_volume == 0) on = FALSE update_appearance() @@ -95,7 +94,7 @@ . = ..() if(default_unfasten_wrench(user, tool, time = 4 SECONDS)) on = FALSE - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS return FALSE /obj/machinery/smoke_machine/attackby(obj/item/I, mob/user, params) diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 9b388c660857d1..714b2ac21979f0 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -155,7 +155,9 @@ */ /datum/reagent/proc/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) SHOULD_CALL_PARENT(TRUE) - current_cycle++ + +///Metabolizes a portion of the reagent after on_mob_life() is called +/datum/reagent/proc/metabolize_reagent(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) if(length(reagent_removal_skip_list)) return if(isnull(holder)) @@ -170,6 +172,7 @@ holder.remove_reagent(type, metabolizing_out) + /// Called in burns.dm *if* the reagent has the REAGENT_AFFECTS_WOUNDS process flag /datum/reagent/proc/on_burn_wound_processing(datum/wound/burn/flesh/burn_wound) return @@ -203,15 +206,12 @@ Primarily used in reagents/reaction_agents /datum/reagent/proc/on_mob_end_metabolize(mob/living/affected_mob) return -/// Called when a reagent is inside of a mob when they are dead. Returning UPDATE_MOB_HEALTH will cause updatehealth() to be called on the holder mob by /datum/reagents/proc/metabolize. +/** + * Called when a reagent is inside of a mob when they are dead if the reagent has the REAGENT_DEAD_PROCESS flag + * Returning UPDATE_MOB_HEALTH will cause updatehealth() to be called on the holder mob by /datum/reagents/proc/metabolize. + */ /datum/reagent/proc/on_mob_dead(mob/living/carbon/affected_mob, seconds_per_tick) - if(!(chemical_flags & REAGENT_DEAD_PROCESS)) - return - current_cycle++ - if(length(reagent_removal_skip_list)) - return - if(holder) - holder.remove_reagent(type, metabolization_rate * affected_mob.metabolism_efficiency * seconds_per_tick) + SHOULD_CALL_PARENT(TRUE) /// Called after add_reagents creates a new reagent. /datum/reagent/proc/on_new(data) @@ -222,10 +222,6 @@ Primarily used in reagents/reaction_agents /datum/reagent/proc/on_merge(data, amount) return -/// Called by [/datum/reagents/proc/conditional_update] -/datum/reagent/proc/on_update(atom/A) - return - /// Called if the reagent has passed the overdose threshold and is set to be triggering overdose effects. Returning UPDATE_MOB_HEALTH will cause updatehealth() to be called on the holder mob by /datum/reagents/proc/metabolize. /datum/reagent/proc/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired) return diff --git a/code/modules/reagents/chemistry/reagents/atmos_gas_reagents.dm b/code/modules/reagents/chemistry/reagents/atmos_gas_reagents.dm index 4550edbdfdf410..7b13b2d28b1d2f 100644 --- a/code/modules/reagents/chemistry/reagents/atmos_gas_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/atmos_gas_reagents.dm @@ -130,13 +130,12 @@ if(!HAS_TRAIT(breather, TRAIT_KNOCKEDOUT)) return - . = ..() for(var/obj/item/organ/organ_being_healed as anything in breather.organs) if(!organ_being_healed.damage) continue if(organ_being_healed.apply_organ_damage(-0.5 * REM * seconds_per_tick, required_organ_flag = ORGAN_ORGANIC)) - return UPDATE_MOB_HEALTH + . = UPDATE_MOB_HEALTH /datum/reagent/zauker name = "Zauker" diff --git a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm index b944fdbee80ce3..9346f054611ae0 100644 --- a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm @@ -26,6 +26,7 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /datum/reagent/medicine/c2/helbital/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() var/death_is_coming = (affected_mob.getToxLoss() + affected_mob.getOxyLoss() + affected_mob.getFireLoss() + affected_mob.getBruteLoss())*normalise_creation_purity() var/thou_shall_heal = 0 var/good_kind_of_healing = FALSE @@ -45,7 +46,11 @@ . = UPDATE_MOB_HEALTH if(good_kind_of_healing && !reaping && SPT_PROB(0.00005, seconds_per_tick)) //janken with the grim reaper! - notify_ghosts("[affected_mob] has entered a game of rock-paper-scissors with death!", source = affected_mob, action = NOTIFY_ORBIT, header = "Who Will Win?") + notify_ghosts( + "[affected_mob] has entered a game of rock-paper-scissors with death!", + source = affected_mob, + header = "Who Will Win?", + ) reaping = TRUE if(affected_mob.apply_status_effect(/datum/status_effect/necropolis_curse, CURSE_BLINDING)) helbent = TRUE @@ -74,7 +79,6 @@ affected_mob.revive(HEAL_ALL) holder.del_reagent(type) return - return ..() || . /datum/reagent/medicine/c2/helbital/overdose_process(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() @@ -94,6 +98,8 @@ ph = 8.2 taste_description = "bitter with a hint of alcohol" reagent_state = SOLID + inverse_chem_val = 0.3 + inverse_chem = /datum/reagent/inverse/libitoil chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /datum/reagent/medicine/c2/libital/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) @@ -157,13 +163,16 @@ /*Suffix: -uri*/ /datum/reagent/medicine/c2/lenturi name = "Lenturi" - description = "Used to treat burns. Makes you move slower while it is in your system. Applies stomach damage when it leaves your system." + description = "Used to treat burns. Applies stomach damage when it leaves your system." reagent_state = LIQUID color = "#6171FF" ph = 4.7 var/resetting_probability = 0 //What are these for?? Can I remove them? var/spammer = 0 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + inverse_chem_val = 0.4 + inverse_chem = /datum/reagent/inverse/lentslurri + /datum/reagent/medicine/c2/lenturi/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() @@ -182,6 +191,8 @@ var/resetting_probability = 0 //same with this? Old legacy vars that should be removed? var/message_cd = 0 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + inverse_chem_val = 0.35 + inverse_chem = /datum/reagent/inverse/aiuri /datum/reagent/medicine/c2/aiuri/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() @@ -202,19 +213,19 @@ inverse_chem = /datum/reagent/inverse/hercuri inverse_chem_val = 0.3 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED - process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC // SKYRAT EDIT ADDITION - Lets hercuri process in synths + process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC // NOVA EDIT ADDITION - Lets hercuri process in synths /datum/reagent/medicine/c2/hercuri/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() var/need_mob_update - // SKYRAT EDIT CHANGE BEGIN -- Adds check for owner_flags; indented the getFireLoss check and everything under it, so synths can get cooled down + // NOVA EDIT CHANGE BEGIN -- Adds check for owner_flags; indented the getFireLoss check and everything under it, so synths can get cooled down var/owner_flags = affected_mob.dna.species.reagent_flags if (owner_flags & PROCESS_ORGANIC) if(affected_mob.getFireLoss() > 50) need_mob_update = affected_mob.adjustFireLoss(-2 * REM * seconds_per_tick * normalise_creation_purity(), updating_health = FALSE, required_bodytype = affected_bodytype) else need_mob_update = affected_mob.adjustFireLoss(-1.25 * REM * seconds_per_tick * normalise_creation_purity(), updating_health = FALSE, required_bodytype = affected_bodytype) - // SKYRAT EDIT CHANGE END + // NOVA EDIT CHANGE END affected_mob.adjust_bodytemperature(rand(-25,-5) * TEMPERATURE_DAMAGE_COEFFICIENT * REM * seconds_per_tick, 50) if(ishuman(affected_mob)) var/mob/living/carbon/human/humi = affected_mob @@ -496,13 +507,15 @@ show_message = 0 if(!(methods & (PATCH|TOUCH|VAPOR))) return - var/harmies = min(carbies.getBruteLoss(), carbies.adjustBruteLoss(-1.25 * reac_volume, updating_health = FALSE, required_bodytype = affected_bodytype)*-1) - var/burnies = min(carbies.getFireLoss(), carbies.adjustFireLoss(-1.25 * reac_volume, updating_health = FALSE, required_bodytype = affected_bodytype)*-1) + var/current_bruteloss = carbies.getBruteLoss() // because this will be changed after calling adjustBruteLoss() + var/current_fireloss = carbies.getFireLoss() // because this will be changed after calling adjustFireLoss() + var/harmies = clamp(carbies.adjustBruteLoss(-1.25 * reac_volume, updating_health = FALSE, required_bodytype = affected_bodytype), 0, current_bruteloss) + var/burnies = clamp(carbies.adjustFireLoss(-1.25 * reac_volume, updating_health = FALSE, required_bodytype = affected_bodytype), 0, current_fireloss) for(var/i in carbies.all_wounds) var/datum/wound/iter_wound = i iter_wound.on_synthflesh(reac_volume) var/need_mob_update = harmies + burnies - need_mob_update += carbies.adjustToxLoss((harmies+burnies)*(0.5 + (0.25*(1-creation_purity))), updating_health = FALSE, required_biotype = affected_biotype) //0.5 - 0.75 + need_mob_update = carbies.adjustToxLoss((harmies + burnies)*(0.5 + (0.25*(1-creation_purity))), updating_health = FALSE, required_biotype = affected_biotype) || need_mob_update //0.5 - 0.75 if(need_mob_update) carbies.updatehealth() @@ -513,11 +526,11 @@ if(HAS_TRAIT_FROM(exposed_mob, TRAIT_HUSK, BURN) && carbies.getFireLoss() < UNHUSK_DAMAGE_THRESHOLD && (carbies.reagents.get_reagent_amount(/datum/reagent/medicine/c2/synthflesh) + reac_volume >= SYNTHFLESH_UNHUSK_AMOUNT)) carbies.cure_husk(BURN) carbies.visible_message("A rubbery liquid coats [carbies]'s burns. [carbies] looks a lot healthier!") //we're avoiding using the phrases "burnt flesh" and "burnt skin" here because carbies could be a skeleton or a golem or something - // SKYRAT EDIT ADDITION BEGIN - non-modular changeling balancing + // NOVA EDIT ADDITION BEGIN - non-modular changeling balancing if(HAS_TRAIT_FROM(exposed_mob, TRAIT_HUSK, CHANGELING_DRAIN) && (carbies.reagents.get_reagent_amount(/datum/reagent/medicine/c2/synthflesh) + reac_volume >= SYNTHFLESH_LING_UNHUSK_AMOUNT))//Costs a little more than a normal husk carbies.cure_husk(CHANGELING_DRAIN) carbies.visible_message("A rubbery liquid coats [carbies]'s tissues. [carbies] looks a lot healthier!") - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END /******ORGAN HEALING******/ /*Suffix: -rite*/ @@ -561,7 +574,7 @@ /datum/reagent/medicine/c2/penthrite/on_mob_life(mob/living/carbon/human/affected_mob, seconds_per_tick, times_fired) . = ..() var/need_mob_update - need_mob_update = affected_mob.adjustStaminaLoss(-12.5 * REM * seconds_per_tick, updating_stamina = FALSE) //SKYRAT EDIT ADDITION - COMBAT - makes your heart beat faster, fills you with energy. For miners + need_mob_update = affected_mob.adjustStaminaLoss(-12.5 * REM * seconds_per_tick, updating_stamina = FALSE) //NOVA EDIT ADDITION - COMBAT - makes your heart beat faster, fills you with energy. For miners need_mob_update = affected_mob.adjustOrganLoss(ORGAN_SLOT_STOMACH, 0.25 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags) if(affected_mob.health <= HEALTH_THRESHOLD_CRIT && affected_mob.health > (affected_mob.crit_threshold + HEALTH_THRESHOLD_FULLCRIT * (2 * normalise_creation_purity()))) //we cannot save someone below our lowered crit threshold. diff --git a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm index 506bea0c659429..a12e4e64adfb37 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm @@ -73,12 +73,12 @@ booze_power *= (total_alcohol_volume / combined_dilute_volume) // Volume, power, and server alcohol rate effect how quickly one gets drunk - drinker.adjust_drunk_effect(sqrt(volume) * booze_power * ALCOHOL_RATE * REM * seconds_per_tick * 0.25) // SKYRAT EDIT CHANGE - Alcohol Tolerance - Original: (sqrt(volume) * booze_power * ALCOHOL_RATE * REM * seconds_per_tick) + drinker.adjust_drunk_effect(sqrt(volume) * booze_power * ALCOHOL_RATE * REM * seconds_per_tick * 0.25) // NOVA EDIT CHANGE - Alcohol Tolerance - Original: (sqrt(volume) * booze_power * ALCOHOL_RATE * REM * seconds_per_tick) if(boozepwr > 0) var/obj/item/organ/internal/liver/liver = drinker.get_organ_slot(ORGAN_SLOT_LIVER) var/heavy_drinker_multiplier = (HAS_TRAIT(drinker, TRAIT_HEAVY_DRINKER) ? 0.5 : 1) if (istype(liver)) - if(liver.apply_organ_damage(((max(sqrt(volume) * (boozepwr ** ALCOHOL_EXPONENT) * liver.alcohol_tolerance * heavy_drinker_multiplier * seconds_per_tick, 0))/300))) // SKYRAT EDIT CHANGE - Alcohol Tolerance - Original: if((((max(sqrt(volume) * (boozepwr ** ALCOHOL_EXPONENT) * liver.alcohol_tolerance * heavy_drinker_multiplier * seconds_per_tick, 0))/150))) + if(liver.apply_organ_damage(((max(sqrt(volume) * (boozepwr ** ALCOHOL_EXPONENT) * liver.alcohol_tolerance * heavy_drinker_multiplier * seconds_per_tick, 0))/300))) // NOVA EDIT CHANGE - Alcohol Tolerance - Original: if((((max(sqrt(volume) * (boozepwr ** ALCOHOL_EXPONENT) * liver.alcohol_tolerance * heavy_drinker_multiplier * seconds_per_tick, 0))/150))) return UPDATE_MOB_HEALTH /datum/reagent/consumable/ethanol/expose_obj(obj/exposed_obj, reac_volume) @@ -147,6 +147,7 @@ name = "Green Beer" description = "An alcoholic beverage brewed since ancient times on Old Earth. This variety is dyed a festive green." color = COLOR_CRAYON_GREEN + overdose_threshold = 55 //More than a glass taste_description = "green piss water" ph = 6 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -159,6 +160,20 @@ /datum/reagent/consumable/ethanol/beer/green/on_mob_end_metabolize(mob/living/drinker) drinker.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, color) +/datum/reagent/consumable/ethanol/beer/green/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired) + . = ..() + metabolization_rate = 1 * REAGENTS_METABOLISM + + if(!ishuman(affected_mob)) + return + + var/mob/living/carbon/human/affected_human = affected_mob + if(HAS_TRAIT(affected_human, TRAIT_USES_SKINTONES)) + affected_human.skin_tone = "green" + else if(HAS_TRAIT(affected_human, TRAIT_MUTANT_COLORS) && !HAS_TRAIT(affected_human, TRAIT_FIXED_MUTANT_COLORS)) //Code stolen from spraytan overdose + affected_human.dna.features["mcolor"] = "#a8e61d" + affected_human.update_body(is_creating = TRUE) + /datum/reagent/consumable/ethanol/kahlua name = "Kahlua" description = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936!" @@ -638,9 +653,9 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /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 + (1 * REM * seconds_per_tick), BLOOD_VOLUME_NORMAL) //Bloody Mary quickly restores blood loss. // SKYRAT EDIT - Bloodshot is now the go-to drink for bloodloss, not Bloody Mary - ORIGINAL: drinker.blood_volume = min(drinker.blood_volume + (3 * REM * delta_time), BLOOD_VOLUME_NORMAL) - ..() + drinker.blood_volume = min(drinker.blood_volume + (1 * REM * seconds_per_tick), BLOOD_VOLUME_NORMAL) //Bloody Mary quickly restores blood loss. // NOVA EDIT - Bloodshot is now the go-to drink for bloodloss, not Bloody Mary - ORIGINAL: drinker.blood_volume = min(drinker.blood_volume + (3 * REM * delta_time), BLOOD_VOLUME_NORMAL) /datum/reagent/consumable/ethanol/brave_bull name = "Brave Bull" @@ -1115,7 +1130,7 @@ /datum/reagent/consumable/ethanol/grog name = "Grog" - description = "Watered-down rum, Nanotrasen approves!" + description = "Watered-down rum, Symphionia approves!" color = "#e0e058" // rgb: 224,224,88 boozepwr = 1 //Basically nothing taste_description = "a poor excuse for alcohol" @@ -1162,7 +1177,7 @@ /datum/reagent/consumable/ethanol/amasec name = "Amasec" - description = "Official drink of the Nanotrasen Gun-Club!" + description = "Official drink of the Symphionia Gun-Club!" color = "#e0e058" // rgb: 224,224,88 boozepwr = 35 quality = DRINK_GOOD @@ -1193,7 +1208,7 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /datum/reagent/consumable/ethanol/syndicatebomb - name = "Syndicate Bomb" + name = "Symphionia Bomb" description = "Tastes like terrorism!" color = "#2E6671" // rgb: 46, 102, 113 boozepwr = 90 @@ -1327,7 +1342,6 @@ var/need_mob_update need_mob_update = drinker.adjustBruteLoss(-3 * REM * seconds_per_tick, updating_health = FALSE, required_bodytype = affected_bodytype) need_mob_update += drinker.adjustFireLoss(-3 * REM * seconds_per_tick, updating_health = FALSE, required_bodytype = affected_bodytype) - need_mob_update += drinker.adjustCloneLoss(-5 * REM * seconds_per_tick, updating_health = FALSE) need_mob_update += drinker.adjustOxyLoss(-4 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type) need_mob_update += drinker.adjustToxLoss(-3 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype) if(need_mob_update) @@ -1736,6 +1750,7 @@ /datum/reagent/consumable/ethanol/alexander/on_mob_life(mob/living/drinker, seconds_per_tick, times_fired) if(mighty_shield && !(mighty_shield in drinker.contents)) //If you had a shield and lose it, you lose the reagent as well. Otherwise this is just a normal drink. holder.remove_reagent(type, volume) + return return ..() /datum/reagent/consumable/ethanol/alexander/on_mob_end_metabolize(mob/living/drinker) diff --git a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm index 28039f8b5b63ae..e76e0e8fbb5c59 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm @@ -225,7 +225,7 @@ if(affected_mob.heal_bodypart_damage(brute = 1 * REM * seconds_per_tick, burn = 0, updating_health = FALSE)) . = UPDATE_MOB_HEALTH if(holder.has_reagent(/datum/reagent/consumable/capsaicin)) - holder.remove_reagent(/datum/reagent/consumable/capsaicin, 1 * seconds_per_tick) + holder.remove_reagent(/datum/reagent/consumable/capsaicin, seconds_per_tick) return ..() || . /datum/reagent/consumable/soymilk @@ -251,10 +251,9 @@ default_container = /obj/item/reagent_containers/cup/glass/bottle/juice/cream /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) - . = TRUE - ..() + . = ..() + if(SPT_PROB(10, seconds_per_tick) && affected_mob.heal_bodypart_damage(1, 0)) + return UPDATE_MOB_HEALTH /datum/reagent/consumable/coffee name = "Coffee" @@ -272,6 +271,7 @@ affected_mob.set_jitter_if_lower(10 SECONDS * REM * seconds_per_tick) /datum/reagent/consumable/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) affected_mob.AdjustSleeping(-40 * REM * seconds_per_tick) @@ -279,7 +279,6 @@ affected_mob.adjust_bodytemperature(25 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, 0, affected_mob.get_body_temp_normal()) if(holder.has_reagent(/datum/reagent/consumable/frostoil)) holder.remove_reagent(/datum/reagent/consumable/frostoil, 5 * REM * seconds_per_tick) - return ..() || . /datum/reagent/consumable/tea name = "Tea" 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 index 67802b9af20c49..1f85abfb20e045 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/glass_styles/mixed_alcohol.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/mixed_alcohol.dm @@ -298,7 +298,7 @@ /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." + desc = "A drink from Symphionia. Made from live aliens." icon_state = "acidspitglass" /datum/glass_style/drinking_glass/amasec @@ -323,7 +323,7 @@ /datum/glass_style/drinking_glass/syndicatebomb required_drink_type = /datum/reagent/consumable/ethanol/syndicatebomb - name = "Syndicate Bomb" + name = "Symphionia Bomb" desc = "A syndicate bomb." icon = 'icons/obj/drinks/mixed_drinks.dmi' icon_state = "syndicatebomb" @@ -405,7 +405,7 @@ /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." + desc = "Symphionia cannot take legal responsibility for your actions after imbibing." icon = 'icons/obj/drinks/mixed_drinks.dmi' icon_state = "atomicbombglass" @@ -575,7 +575,7 @@ /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." + desc = "The only drink that comes with a label reminding you of Symphionia's zero-tolerance promiscuity policy." icon = 'icons/obj/drinks/mixed_drinks.dmi' icon_state = "between_the_sheets" @@ -915,7 +915,7 @@ /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." + 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 Symphionia stations, but that name sucks." icon = 'icons/obj/drinks/mixed_drinks.dmi' icon_state = "saibasan" diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index 95dcf4995287c5..69bb1266e4f2b3 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -84,7 +84,7 @@ if(SPT_PROB(0.5, seconds_per_tick)) var/smoke_message = pick("You feel relaxed.", "You feel calmed.","You feel alert.","You feel rugged.") to_chat(affected_mob, span_notice("[smoke_message]")) - affected_mob.add_mood_event("smoked", /datum/mood_event/smoked, name) + affected_mob.add_mood_event("smoked", /datum/mood_event/smoked) affected_mob.remove_status_effect(/datum/status_effect/jitter) affected_mob.AdjustStun(-50 * REM * seconds_per_tick) affected_mob.AdjustKnockdown(-50 * REM * seconds_per_tick) @@ -117,7 +117,7 @@ var/high_message = pick("You feel calm.", "You feel collected.", "You feel like you need to relax.") if(SPT_PROB(2.5, seconds_per_tick)) to_chat(affected_mob, span_notice("[high_message]")) - affected_mob.add_mood_event("smacked out", /datum/mood_event/narcotic_heavy, name) + affected_mob.add_mood_event("smacked out", /datum/mood_event/narcotic_heavy) if(current_cycle == 36 && creation_purity <= 0.6) if(!istype(affected_mob.dna.species, /datum/species/human/krokodil_addict)) to_chat(affected_mob, span_userdanger("Your skin falls off easily!")) @@ -175,7 +175,7 @@ var/high_message = pick("You feel hyper.", "You feel like you need to go faster.", "You feel like you can run the world.") if(SPT_PROB(2.5, seconds_per_tick)) to_chat(affected_mob, span_notice("[high_message]")) - affected_mob.add_mood_event("tweaking", /datum/mood_event/stimulant_medium, name) + affected_mob.add_mood_event("tweaking", /datum/mood_event/stimulant_medium) affected_mob.AdjustStun(-40 * REM * seconds_per_tick) affected_mob.AdjustKnockdown(-40 * REM * seconds_per_tick) affected_mob.AdjustUnconscious(-40 * REM * seconds_per_tick) @@ -237,7 +237,7 @@ var/high_message = pick("You feel amped up.", "You feel ready.", "You feel like you can push it to the limit.") if(SPT_PROB(2.5, seconds_per_tick)) to_chat(affected_mob, span_notice("[high_message]")) - affected_mob.add_mood_event("salted", /datum/mood_event/stimulant_heavy, name) + affected_mob.add_mood_event("salted", /datum/mood_event/stimulant_heavy) var/need_mob_update need_mob_update = affected_mob.adjustStaminaLoss(-5 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) need_mob_update += affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 4 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags) @@ -518,7 +518,7 @@ /datum/reagent/drug/mushroomhallucinogen/on_mob_metabolize(mob/living/psychonaut) . = ..() - psychonaut.add_mood_event("tripping", /datum/mood_event/high, name) + psychonaut.add_mood_event("tripping", /datum/mood_event/high) if(!psychonaut.hud_used) return @@ -579,7 +579,7 @@ /datum/reagent/drug/blastoff/on_mob_metabolize(mob/living/dancer) . = ..() - dancer.add_mood_event("vibing", /datum/mood_event/high, name) + dancer.add_mood_event("vibing", /datum/mood_event/high) RegisterSignal(dancer, COMSIG_MOB_EMOTED("flip"), PROC_REF(on_flip)) RegisterSignal(dancer, COMSIG_MOB_EMOTED("spin"), PROC_REF(on_spin)) @@ -625,7 +625,6 @@ /datum/reagent/drug/blastoff/on_mob_life(mob/living/carbon/dancer, seconds_per_tick, times_fired) . = ..() - if(dancer.adjustOrganLoss(ORGAN_SLOT_LUNGS, 0.3 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)) . = UPDATE_MOB_HEALTH dancer.AdjustKnockdown(-20) @@ -818,8 +817,8 @@ //I wish i could give it some kind of bonus when smoked, but we don't have an INHALE method. /datum/reagent/drug/kronkaine/on_mob_life(mob/living/carbon/kronkaine_fiend, seconds_per_tick, times_fired) - . = ..() || TRUE - kronkaine_fiend.add_mood_event("tweaking", /datum/mood_event/stimulant_medium, name) + . = ..() + kronkaine_fiend.add_mood_event("tweaking", /datum/mood_event/stimulant_medium) if(kronkaine_fiend.adjustOrganLoss(ORGAN_SLOT_HEART, 0.4 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)) . = UPDATE_MOB_HEALTH kronkaine_fiend.set_jitter_if_lower(20 SECONDS * REM * seconds_per_tick) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 8d6c617b816a67..2629a073120096 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -69,7 +69,7 @@ reagent_state = SOLID nutriment_factor = 15 color = "#664330" // rgb: 102, 67, 48 - chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_DEAD_PROCESS + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED var/brute_heal = 1 var/burn_heal = 0 @@ -345,28 +345,20 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /datum/reagent/consumable/capsaicin/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() var/heating = 0 switch(current_cycle) if(1 to 15) heating = 5 if(holder.has_reagent(/datum/reagent/cryostylane)) holder.remove_reagent(/datum/reagent/cryostylane, 5 * REM * seconds_per_tick) - if(isslime(affected_mob)) - heating = rand(5, 20) if(15 to 25) heating = 10 - if(isslime(affected_mob)) - heating = rand(10, 20) if(25 to 35) heating = 15 - if(isslime(affected_mob)) - heating = rand(15, 20) if(35 to INFINITY) heating = 20 - if(isslime(affected_mob)) - heating = rand(20, 25) affected_mob.adjust_bodytemperature(heating * TEMPERATURE_DAMAGE_COEFFICIENT * REM * seconds_per_tick) - return ..() /datum/reagent/consumable/frostoil name = "Frost Oil" @@ -380,32 +372,24 @@ default_container = /obj/item/reagent_containers/cup/bottle/frostoil /datum/reagent/consumable/frostoil/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() var/cooling = 0 switch(current_cycle) if(1 to 15) cooling = -10 if(holder.has_reagent(/datum/reagent/consumable/capsaicin)) holder.remove_reagent(/datum/reagent/consumable/capsaicin, 5 * REM * seconds_per_tick) - if(isslime(affected_mob)) - cooling = -rand(5, 20) if(15 to 25) cooling = -20 - if(isslime(affected_mob)) - cooling = -rand(10, 20) if(25 to 35) cooling = -30 if(prob(1)) affected_mob.emote("shiver") - if(isslime(affected_mob)) - cooling = -rand(15, 20) if(35 to INFINITY) cooling = -40 if(prob(5)) affected_mob.emote("shiver") - if(isslime(affected_mob)) - cooling = -rand(20, 25) affected_mob.adjust_bodytemperature(cooling * TEMPERATURE_DAMAGE_COEFFICIENT * REM * seconds_per_tick, 50) - return ..() /datum/reagent/consumable/frostoil/expose_turf(turf/exposed_turf, reac_volume) . = ..() @@ -464,10 +448,10 @@ return ..() /datum/reagent/consumable/condensedcapsaicin/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() if(!holder.has_reagent(/datum/reagent/consumable/milk)) if(SPT_PROB(5, seconds_per_tick)) affected_mob.visible_message(span_warning("[affected_mob] [pick("dry heaves!","coughs!","splutters!")]")) - return ..() /datum/reagent/consumable/salt name = "Table Salt" @@ -807,8 +791,8 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /datum/reagent/consumable/corn_syrup/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() holder.add_reagent(/datum/reagent/consumable/sugar, 3 * REM * seconds_per_tick) - return ..() /datum/reagent/consumable/honey name = "Honey" @@ -830,8 +814,8 @@ mytray.adjust_pestlevel(rand(1, 2)) /datum/reagent/consumable/honey/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) - holder.add_reagent(/datum/reagent/consumable/sugar, 3 * REM * seconds_per_tick) . = ..() + holder.add_reagent(/datum/reagent/consumable/sugar, 3 * REM * seconds_per_tick) var/need_mob_update if(SPT_PROB(33, seconds_per_tick)) need_mob_update = affected_mob.adjustBruteLoss(-1, updating_health = FALSE, required_bodytype = affected_bodytype) diff --git a/code/modules/reagents/chemistry/reagents/impure_reagents.dm b/code/modules/reagents/chemistry/reagents/impure_reagents.dm index 1a06ae11cd9606..59baceab5579ff 100644 --- a/code/modules/reagents/chemistry/reagents/impure_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/impure_reagents.dm @@ -60,13 +60,14 @@ // Unique -/datum/reagent/impurity/eigenswap +/datum/reagent/inverse/eigenswap name = "Eigenswap" description = "This reagent is known to swap the handedness of a patient." ph = 3.3 chemical_flags = REAGENT_DONOTSPLIT + tox_damage = 0 -/datum/reagent/impurity/eigenswap/on_mob_life(mob/living/carbon/affected_mob) +/datum/reagent/inverse/eigenswap/on_mob_life(mob/living/carbon/affected_mob) . = ..() if(!prob(creation_purity * 100)) return @@ -112,11 +113,14 @@ cryostylane_alert.attached_effect = src //so the alert can reference us, if it needs to /datum/reagent/inverse/cryostylane/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) - if(current_cycle >= 60) - holder.remove_reagent(type, volume) // remove it all if we're past 60 cycles - return ..() + . = ..() if(!cube || affected_mob.loc != cube) metabolization_rate += 0.01 + +/datum/reagent/inverse/cryostylane/metabolize_reagent(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + if(current_cycle >= 60) + holder.remove_reagent(type, volume) // remove it all if we're past 60 cycles + return return ..() /datum/reagent/inverse/cryostylane/on_mob_delete(mob/living/carbon/affected_mob, amount) diff --git a/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm index b96b52ec366e58..2846492a5f629c 100644 --- a/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm @@ -131,17 +131,21 @@ Basically, we fill the time between now and 2s from now with hands based off the tox_damage = 0 //libital -//Impure +//Inverse: //Simply reduces your alcohol tolerance, kinda simular to prohol -/datum/reagent/impurity/libitoil +/datum/reagent/inverse/libitoil name = "Libitoil" description = "Temporarilly interferes a patient's ability to process alcohol." chemical_flags = REAGENT_DONOTSPLIT ph = 13.5 - liver_damage = 0.1 addiction_types = list(/datum/addiction/medicine = 4) + tox_damage = 0 + +/datum/reagent/inverse/libitoil/on_mob_life(mob/living/carbon/affected_mob, delta_time, times_fired) + . = ..() + affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, 0.1 * REM * delta_time) -/datum/reagent/impurity/libitoil/on_mob_add(mob/living/affected_mob, amount) +/datum/reagent/inverse/libitoil/on_mob_add(mob/living/affected_mob, amount) . = ..() var/mob/living/carbon/consumer = affected_mob if(!consumer) @@ -151,21 +155,21 @@ Basically, we fill the time between now and 2s from now with hands based off the var/obj/item/organ/internal/liver/this_liver = consumer.get_organ_slot(ORGAN_SLOT_LIVER) this_liver.alcohol_tolerance *= 2 -/datum/reagent/impurity/libitoil/proc/on_gained_organ(mob/prev_owner, obj/item/organ/organ) +/datum/reagent/inverse/libitoil/proc/on_gained_organ(mob/prev_owner, obj/item/organ/organ) SIGNAL_HANDLER if(!istype(organ, /obj/item/organ/internal/liver)) return var/obj/item/organ/internal/liver/this_liver = organ this_liver.alcohol_tolerance *= 2 -/datum/reagent/impurity/libitoil/proc/on_removed_organ(mob/prev_owner, obj/item/organ/organ) +/datum/reagent/inverse/libitoil/proc/on_removed_organ(mob/prev_owner, obj/item/organ/organ) SIGNAL_HANDLER if(!istype(organ, /obj/item/organ/internal/liver)) return var/obj/item/organ/internal/liver/this_liver = organ this_liver.alcohol_tolerance /= 2 -/datum/reagent/impurity/libitoil/on_mob_delete(mob/living/affected_mob) +/datum/reagent/inverse/libitoil/on_mob_delete(mob/living/affected_mob) . = ..() var/mob/living/carbon/consumer = affected_mob UnregisterSignal(consumer, COMSIG_CARBON_LOSE_ORGAN) @@ -205,18 +209,18 @@ Basically, we fill the time between now and 2s from now with hands based off the affected_mob.adjust_nutrition(-5 * REAGENTS_METABOLISM * seconds_per_tick) //Lenturi -//impure -/datum/reagent/impurity/lentslurri //Okay maybe I should outsource names for these +//inverse +/datum/reagent/inverse/lentslurri //Okay maybe I should outsource names for these name = "Lentslurri"//This is a really bad name please replace - description = "A highly addicitive muscle relaxant that is made when Lenturi reactions go wrong." + description = "A highly addicitive muscle relaxant that is made when Lenturi reactions go wrong, this will cause the patient to move slowly." addiction_types = list(/datum/addiction/medicine = 8) - liver_damage = 0 + tox_damage = 0 -/datum/reagent/impurity/lentslurri/on_mob_metabolize(mob/living/carbon/affected_mob) +/datum/reagent/inverse/lentslurri/on_mob_metabolize(mob/living/carbon/affected_mob) . = ..() affected_mob.add_movespeed_modifier(/datum/movespeed_modifier/reagent/lenturi) -/datum/reagent/impurity/lentslurri/on_mob_end_metabolize(mob/living/carbon/affected_mob) +/datum/reagent/inverse/lentslurri/on_mob_end_metabolize(mob/living/carbon/affected_mob) . = ..() affected_mob.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/lenturi) @@ -250,24 +254,21 @@ Basically, we fill the time between now and 2s from now with hands based off the resetting_probability += (5*((current_cycle-1)/10) * seconds_per_tick) // 10 iterations = >51% to itch //Aiuri -//impure -/datum/reagent/impurity/aiuri +//inverse +/datum/reagent/inverse/aiuri name = "Aivime" description = "This reagent is known to interfere with the eyesight of a patient." ph = 3.1 addiction_types = list(/datum/addiction/medicine = 1.5) - liver_damage = 0.1 - /// blurriness at the start of taking the med - var/amount_of_blur_applied = 0 SECONDS - -/datum/reagent/impurity/aiuri/on_mob_add(mob/living/affected_mob, amount) - . = ..() - amount_of_blur_applied = creation_purity * (volume / metabolization_rate) * 2 SECONDS - affected_mob.adjust_eye_blur(amount_of_blur_applied) + ///The amount of blur applied per second. Given the average on_life interval is 2 seconds, that'd be 2.5s. + var/amount_of_blur_applied = 1.25 SECONDS + tox_damage = 0 -/datum/reagent/impurity/aiuri/on_mob_delete(mob/living/affected_mob, amount) +/datum/reagent/inverse/aiuri/on_mob_life(mob/living/carbon/owner, delta_time, times_fired) + owner.adjustOrganLoss(ORGAN_SLOT_EYES, 0.1 * REM * delta_time) + owner.adjust_eye_blur(amount_of_blur_applied * delta_time) . = ..() - affected_mob.adjust_eye_blur(-amount_of_blur_applied) + return TRUE //Hercuri //inverse @@ -670,7 +671,7 @@ Basically, we fill the time between now and 2s from now with hands based off the /datum/brain_trauma/hypnosis, // Hypnosis, same reason as obsessed, plus a bug makes it remain even after the neurowhine purges and then turn into "nothing" on the med reading upon a second application /datum/brain_trauma/special/honorbound, // Designed to be chaplain exclusive ) - forbiddentraumas += typesof(/datum/brain_trauma/very_special) // SKYRAT EDIT ADDITION - No very special (lewd) quirks gained by inverse neurine + forbiddentraumas += typesof(/datum/brain_trauma/very_special) // NOVA EDIT ADDITION - No very special (lewd) quirks gained by inverse neurine traumalist -= forbiddentraumas var/obj/item/organ/internal/brain/brain = affected_mob.get_organ_slot(ORGAN_SLOT_BRAIN) traumalist = shuffle(traumalist) @@ -791,3 +792,154 @@ Basically, we fill the time between now and 2s from now with hands based off the return hearing_args[HEARING_RAW_MESSAGE] = "[hearing_args[HEARING_RAW_MESSAGE]]" + +/datum/reagent/inverse/sal_acid + name = "Benzoic Acid" + description = "Robust fertilizer that provides a decent range of benefits for plant life." + taste_description = "flowers" + reagent_state = LIQUID + color = "#e6c843" + ph = 3.4 + tox_damage = 0 + +/datum/reagent/inverse/sal_acid/on_hydroponics_apply(obj/machinery/hydroponics/mytray, mob/user) + mytray.adjust_plant_health(round(volume * 0.5)) + mytray.myseed?.adjust_production(-round(volume * 0.2)) + mytray.myseed?.adjust_potency(round(volume * 0.25)) + mytray.myseed?.adjust_yield(round(volume * 0.2)) + +/datum/reagent/inverse/oxandrolone + name = "Oxymetholone" + description = "Anabolic steroid that promotes the growth of muscle during and after exercise." + reagent_state = LIQUID + color = "#520c23" + taste_description = "sweat" + metabolization_rate = 0.4 * REM + overdose_threshold = 25 + ph = 12.2 + tox_damage = 0 + +/datum/reagent/inverse/oxandrolone/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + var/high_message = pick("You feel unstoppable.", "Giving it EVERYTHING!!", "You feel ready for anything.", "You feel like doing a thousand jumping jacks!") + if(SPT_PROB(2, seconds_per_tick)) + to_chat(affected_mob, span_notice("[high_message]")) + +/datum/reagent/inverse/oxandrolone/overdose_process(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + if(SPT_PROB(25, seconds_per_tick)) + affected_mob.adjust_bodytemperature(30 * TEMPERATURE_DAMAGE_COEFFICIENT * REM * seconds_per_tick) + affected_mob.set_jitter_if_lower(3 SECONDS) + affected_mob.adjustStaminaLoss(5 * REM * seconds_per_tick) + else if(SPT_PROB(5, seconds_per_tick)) + affected_mob.vomit(VOMIT_CATEGORY_BLOOD, lost_nutrition = 0, distance = 3) + affected_mob.Paralyze(3 SECONDS) + +/datum/reagent/inverse/salbutamol + name = "Bamethan" + description = "Blood thinner that drastically increases the chance of receiving bleeding wounds." + reagent_state = LIQUID + color = "#ecd4d6" + taste_description = "paint thinner" + ph = 4.5 + metabolization_rate = 0.08 * REM + tox_damage = 0 + +/datum/reagent/inverse/salbutamol/on_mob_metabolize(mob/living/affected_mob) + . = ..() + ADD_TRAIT(affected_mob, TRAIT_EASYBLEED, type) + +/datum/reagent/inverse/salbutamol/on_mob_end_metabolize(mob/living/affected_mob) + . = ..() + REMOVE_TRAIT(affected_mob, TRAIT_EASYBLEED, type) + +/datum/reagent/inverse/pen_acid + name = "Pendetide" + description = "Purges basic toxin healing medications and increases the severity of radiation poisoning." + reagent_state = LIQUID + color = "#09ff00" + ph = 3.7 + taste_description = "venom" + metabolization_rate = 0.25 * REM + tox_damage = 0 + +/datum/reagent/inverse/pen_acid/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + holder.remove_reagent(/datum/reagent/medicine/c2/seiver, 5 * REM * seconds_per_tick) + holder.remove_reagent(/datum/reagent/medicine/potass_iodide, 5 * REM * seconds_per_tick) + holder.remove_reagent(/datum/reagent/medicine/c2/multiver, 5 * REM * seconds_per_tick) + + . = ..() + if(HAS_TRAIT(affected_mob, TRAIT_IRRADIATED)) + affected_mob.set_jitter_if_lower(10 SECONDS) + affected_mob.adjust_disgust(3 * REM * seconds_per_tick) + if(SPT_PROB(2.5, seconds_per_tick)) + to_chat(affected_mob, span_warning("A horrible ache spreads in your insides!")) + affected_mob.adjust_confusion_up_to(10 SECONDS, 15 SECONDS) + +/datum/reagent/inverse/atropine + name = "Hyoscyamine" + description = "Slowly regenerates all damaged organs, but cannot restore non-functional organs." + reagent_state = LIQUID + color = "#273333" + ph = 13.6 + metabolization_rate = 0.2 * REM + tox_damage = 0 + overdose_threshold = 40 + +/datum/reagent/inverse/atropine/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + var/need_mob_update + need_mob_update = affected_mob.adjustOrganLoss(ORGAN_SLOT_STOMACH, -1 * REM * seconds_per_tick) + need_mob_update += affected_mob.adjustOrganLoss(ORGAN_SLOT_HEART, -1 * REM * seconds_per_tick) + if(affected_mob.getToxLoss() <= 25) + need_mob_update = affected_mob.adjustToxLoss(-0.5, updating_health = FALSE, required_biotype = affected_biotype) + if(need_mob_update) + return UPDATE_MOB_HEALTH + +/datum/reagent/inverse/atropine/overdose_process(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + var/static/list/possible_organs = list( + ORGAN_SLOT_HEART, + ORGAN_SLOT_LIVER, + ORGAN_SLOT_LUNGS, + ORGAN_SLOT_STOMACH, + ORGAN_SLOT_EYES, + ORGAN_SLOT_EARS, + ORGAN_SLOT_BRAIN, + ORGAN_SLOT_APPENDIX, + ORGAN_SLOT_TONGUE, + ) + affected_mob.adjustOrganLoss(pick(possible_organs) ,2 * seconds_per_tick) + affected_mob.reagents.remove_reagent(type, 1 * REM * seconds_per_tick) + +/datum/reagent/inverse/ammoniated_mercury + name = "Ammoniated Sludge" + description = "A ghastly looking mess of mercury by-product. Causes bursts of manic hysteria." + reagent_state = LIQUID + color = "#353535" + ph = 10.2 + metabolization_rate = 0.4 * REM + tox_damage = 0 + +/datum/reagent/inverse/ammoniated_mercury/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + if(SPT_PROB(7.5, seconds_per_tick)) + affected_mob.emote("scream") + affected_mob.say(pick("AAAAAAAHHHHH!!","OOOOH NOOOOOO!!","GGGUUUUHHHHH!!","AIIIIIEEEEEE!!","HAHAHAHAHAAAAAA!!","OORRRGGGHHH!!","AAAAAAAJJJJJJJJJ!!"), forced = type) + +/datum/reagent/inverse/rezadone + name = "Inreziniver" + description = "Makes the user horribly afraid of all things related to carps." + reagent_state = LIQUID + color = "#c92eb4" + ph = 13.9 + metabolization_rate = 0.05 * REM + tox_damage = 0 + +/datum/reagent/inverse/rezadone/on_mob_metabolize(mob/living/carbon/affected_mob) + . = ..() + affected_mob.gain_trauma(/datum/brain_trauma/mild/phobia/carps, TRAUMA_RESILIENCE_ABSOLUTE) + +/datum/reagent/inverse/rezadone/on_mob_end_metabolize(mob/living/carbon/affected_mob) + . = ..() + affected_mob.cure_trauma_type(/datum/brain_trauma/mild/phobia/carps, resilience = TRAUMA_RESILIENCE_ABSOLUTE) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 68eefcdf0cd44d..40011b133d95ef 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -85,6 +85,7 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /datum/reagent/medicine/synaptizine/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.AdjustStun(-20 * REM * seconds_per_tick) affected_mob.AdjustKnockdown(-20 * REM * seconds_per_tick) @@ -93,7 +94,6 @@ affected_mob.AdjustParalyzed(-20 * REM * seconds_per_tick) if(holder.has_reagent(/datum/reagent/toxin/mindbreaker)) holder.remove_reagent(/datum/reagent/toxin/mindbreaker, 5 * REM * seconds_per_tick) - . = ..() affected_mob.adjust_hallucinations(-20 SECONDS * REM * seconds_per_tick) if(SPT_PROB(16, seconds_per_tick)) if(affected_mob.adjustToxLoss(1, updating_health = FALSE, required_biotype = affected_biotype)) @@ -107,12 +107,12 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /datum/reagent/medicine/synaphydramine/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() affected_mob.adjust_drowsiness(-10 SECONDS * REM * seconds_per_tick) if(holder.has_reagent(/datum/reagent/toxin/mindbreaker)) holder.remove_reagent(/datum/reagent/toxin/mindbreaker, 5 * REM * seconds_per_tick) if(holder.has_reagent(/datum/reagent/toxin/histamine)) holder.remove_reagent(/datum/reagent/toxin/histamine, 5 * REM * seconds_per_tick) - . = ..() affected_mob.adjust_hallucinations(-20 SECONDS * REM * seconds_per_tick) if(SPT_PROB(16, seconds_per_tick)) if(affected_mob.adjustToxLoss(1 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype)) @@ -158,7 +158,6 @@ need_mob_update += affected_mob.adjustBruteLoss(-power * REM * seconds_per_tick, updating_health = FALSE, required_bodytype = affected_bodytype) need_mob_update += affected_mob.adjustFireLoss(-power * REM * seconds_per_tick, updating_health = FALSE, required_bodytype = affected_bodytype) need_mob_update += affected_mob.adjustToxLoss(-power * REM * seconds_per_tick, updating_health = FALSE, forced = TRUE, required_biotype = affected_biotype) //heals TOXINLOVERs - need_mob_update += affected_mob.adjustCloneLoss(-power * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype) for(var/i in affected_mob.all_wounds) var/datum/wound/iter_wound = i iter_wound.on_xadone(power * REM * seconds_per_tick) @@ -171,22 +170,6 @@ mytray.adjust_plant_health(round(volume * 3)) mytray.adjust_toxic(-round(volume * 3)) -/datum/reagent/medicine/clonexadone - name = "Clonexadone" - description = "A chemical that derives from Cryoxadone. It specializes in healing clone damage, but nothing else. Requires very cold temperatures to properly metabolize, and metabolizes quicker than cryoxadone." - color = "#3D3DC6" - taste_description = "muscle" - ph = 13 - metabolization_rate = 1.5 * REAGENTS_METABOLISM - -/datum/reagent/medicine/clonexadone/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) - . = ..() - if(affected_mob.bodytemperature < T0C) - if(affected_mob.adjustCloneLoss((0.00006 * (affected_mob.bodytemperature ** 2) - 6) * REM * seconds_per_tick, updating_health = FALSE)) - . = UPDATE_MOB_HEALTH - REMOVE_TRAIT(affected_mob, TRAIT_DISFIGURED, TRAIT_GENERIC) - metabolization_rate = REAGENTS_METABOLISM * (0.000015 * (affected_mob.bodytemperature ** 2) + 0.75) - /datum/reagent/medicine/pyroxadone name = "Pyroxadone" description = "A mixture of cryoxadone and slime jelly, that apparently inverses the requirement for its activation." @@ -214,7 +197,6 @@ need_mob_update += affected_mob.adjustBruteLoss(-power * REM * seconds_per_tick, updating_health = FALSE, required_bodytype = affected_bodytype) need_mob_update += affected_mob.adjustFireLoss(-1.5 * power * REM * seconds_per_tick, updating_health = FALSE, required_bodytype = affected_bodytype) need_mob_update += affected_mob.adjustToxLoss(-power * REM * seconds_per_tick, updating_health = FALSE, forced = TRUE, required_biotype = affected_biotype) - need_mob_update += affected_mob.adjustCloneLoss(-power * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype) if(need_mob_update) . = UPDATE_MOB_HEALTH for(var/i in affected_mob.all_wounds) @@ -224,20 +206,25 @@ /datum/reagent/medicine/rezadone name = "Rezadone" - description = "A powder derived from fish toxin, Rezadone can effectively treat genetic damage as well as restoring minor wounds and restoring corpses husked by burns. Overdose will cause intense nausea and minor toxin damage." + description = "A powder derived from fish toxin, Rezadone can effectively restore corpses husked by burns as well as treat minor wounds. Overdose will cause intense nausea and minor toxin damage." reagent_state = SOLID color = "#669900" // rgb: 102, 153, 0 overdose_threshold = 30 ph = 12.2 taste_description = "fish" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + inverse_chem_val = 0.25 + inverse_chem = /datum/reagent/inverse/rezadone +// Rezadone is almost never used in favor of cryoxadone. Hopefully this will change that. // No such luck so far // with clone damage gone, someone will find a better use for rezadone... right? /datum/reagent/medicine/rezadone/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() - var/need_mob_update - need_mob_update = affected_mob.setCloneLoss(0) //Rezadone is almost never used in favor of cryoxadone. Hopefully this will change that. // No such luck so far - need_mob_update += affected_mob.heal_bodypart_damage(brute = 1 * REM * seconds_per_tick, burn = 1 * REM * seconds_per_tick, updating_health = FALSE, required_bodytype = affected_biotype) - if(need_mob_update) + if(affected_mob.heal_bodypart_damage( + brute = 1 * REM * seconds_per_tick, + burn = 1 * REM * seconds_per_tick, + updating_health = FALSE, + required_bodytype = affected_biotype + )) . = UPDATE_MOB_HEALTH REMOVE_TRAIT(affected_mob, TRAIT_DISFIGURED, TRAIT_GENERIC) @@ -285,6 +272,8 @@ overdose_threshold = 25 ph = 10.7 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + inverse_chem_val = 0.3 + inverse_chem = /datum/reagent/inverse/oxandrolone /datum/reagent/medicine/oxandrolone/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() @@ -478,6 +467,8 @@ overdose_threshold = 10 ph = 7 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + inverse_chem_val = 0.50 + inverse_chem = /datum/reagent/inverse/ammoniated_mercury /datum/reagent/medicine/ammoniated_mercury/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() @@ -528,6 +519,8 @@ metabolization_rate = 0.5 * REAGENTS_METABOLISM ph = 1 //One of the best buffers, NEVERMIND! chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + inverse_chem_val = 0.4 + inverse_chem = /datum/reagent/inverse/pen_acid /datum/reagent/medicine/pen_acid/on_mob_metabolize(mob/living/affected_mob) . = ..() @@ -554,6 +547,8 @@ overdose_threshold = 25 ph = 2.1 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + inverse_chem_val = 0.3 + inverse_chem = /datum/reagent/inverse/sal_acid /datum/reagent/medicine/sal_acid/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() @@ -579,6 +574,8 @@ metabolization_rate = 0.25 * REAGENTS_METABOLISM ph = 2 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + inverse_chem_val = 0.25 + inverse_chem = /datum/reagent/inverse/salbutamol /datum/reagent/medicine/salbutamol/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() @@ -655,11 +652,11 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /datum/reagent/medicine/diphenhydramine/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() if(SPT_PROB(5, seconds_per_tick)) affected_mob.adjust_drowsiness(2 SECONDS) affected_mob.adjust_jitter(-2 SECONDS * REM * seconds_per_tick) holder.remove_reagent(/datum/reagent/toxin/histamine, 3 * REM * seconds_per_tick) - return ..() /datum/reagent/medicine/morphine name = "Morphine" @@ -706,7 +703,7 @@ reagent_state = LIQUID color = "#404040" //oculine is dark grey, inacusiate is light grey metabolization_rate = 0.25 * REAGENTS_METABOLISM - taste_description = "dull toxin" + taste_description = "earthy bitterness" purity = REAGENT_STANDARD_PURITY ph = 10 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -821,6 +818,8 @@ overdose_threshold = 35 ph = 12 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + inverse_chem_val = 0.35 + inverse_chem = /datum/reagent/inverse/atropine /datum/reagent/medicine/atropine/on_mob_add(mob/living/affected_mob) . = ..() @@ -874,14 +873,11 @@ REMOVE_TRAIT(affected_mob, TRAIT_NOCRITDAMAGE, type) /datum/reagent/medicine/epinephrine/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() if(holder.has_reagent(/datum/reagent/toxin/lexorin)) - holder.remove_reagent(/datum/reagent/toxin/lexorin, 2 * REM * seconds_per_tick) - holder.remove_reagent(/datum/reagent/medicine/epinephrine, 1 * REM * seconds_per_tick) if(SPT_PROB(10, seconds_per_tick)) holder.add_reagent(/datum/reagent/toxin/histamine, 4) - return ..() - - . = ..() + return var/need_mob_update if(affected_mob.health <= affected_mob.crit_threshold) @@ -905,6 +901,12 @@ if(need_mob_update) return UPDATE_MOB_HEALTH +/datum/reagent/medicine/epinephrine/metabolize_reagent(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + if(holder.has_reagent(/datum/reagent/toxin/lexorin)) + holder.remove_reagent(/datum/reagent/toxin/lexorin, 2 * REM * seconds_per_tick) + holder.remove_reagent(/datum/reagent/medicine/epinephrine, 1 * REM * seconds_per_tick) + return ..() + /datum/reagent/medicine/epinephrine/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired) . = ..() if(SPT_PROB(18, REM * seconds_per_tick)) @@ -997,7 +999,7 @@ return exposed_mob.visible_message(span_warning("[exposed_mob]'s body starts convulsing!")) - exposed_mob.notify_ghost_cloning("Your body is being revived with Strange Reagent!") + exposed_mob.notify_revival("Your body is being revived with Strange Reagent!") exposed_mob.do_jitter_animation(10) // we factor in healing needed when determing if we do anything @@ -1100,11 +1102,11 @@ affected_carbon.setOrganLoss(ORGAN_SLOT_BRAIN, initial_bdamage) /datum/reagent/medicine/neurine/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() if(holder.has_reagent(/datum/reagent/consumable/ethanol/neurotoxin)) holder.remove_reagent(/datum/reagent/consumable/ethanol/neurotoxin, 5 * REM * seconds_per_tick * normalise_creation_purity()) if(SPT_PROB(8 * normalise_creation_purity(), seconds_per_tick)) affected_mob.cure_trauma_type(resilience = TRAUMA_RESILIENCE_BASIC) - return ..() /datum/reagent/medicine/neurine/on_mob_dead(mob/living/carbon/affected_mob, seconds_per_tick) . = ..() @@ -1148,7 +1150,7 @@ . = ..() for(var/effect in status_effects_to_clear) affected_mob.remove_status_effect(effect) - affected_mob.reagents.remove_all_type(/datum/reagent/consumable/ethanol, 3 * REM * seconds_per_tick * normalise_creation_purity(), FALSE, TRUE) + affected_mob.reagents.remove_reagent(/datum/reagent/consumable/ethanol, 3 * REM * seconds_per_tick * normalise_creation_purity(), include_subtypes = TRUE) if(affected_mob.adjustToxLoss(-0.2 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype)) . = UPDATE_MOB_HEALTH affected_mob.adjust_drunk_effect(-10 * REM * seconds_per_tick * normalise_creation_purity()) @@ -1212,9 +1214,9 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /datum/reagent/medicine/insulin/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() affected_mob.AdjustSleeping(-20 * REM * seconds_per_tick) holder.remove_reagent(/datum/reagent/consumable/sugar, 3 * REM * seconds_per_tick) - return ..() //Trek Chems, used primarily by medibots. Only heals a specific damage type, but is very efficient. @@ -1261,7 +1263,7 @@ if(need_mob_update) return UPDATE_MOB_HEALTH -/datum/reagent/medicine/syndicate_nanites //Used exclusively by Syndicate medical cyborgs +/datum/reagent/medicine/syndicate_nanites //Used exclusively by Symphionia medical cyborgs name = "Restorative Nanites" description = "Miniature medical robots that swiftly restore bodily damage." reagent_state = SOLID @@ -1278,14 +1280,13 @@ need_mob_update += affected_mob.adjustOxyLoss(-15 * REM * seconds_per_tick, updating_health = FALSE) need_mob_update += affected_mob.adjustToxLoss(-5 * REM * seconds_per_tick, updating_health = FALSE) need_mob_update += affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, -15 * REM * seconds_per_tick) - need_mob_update += affected_mob.adjustCloneLoss(-3 * REM * seconds_per_tick, updating_health = FALSE) if(need_mob_update) return UPDATE_MOB_HEALTH /datum/reagent/medicine/syndicate_nanites/overdose_process(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) //wtb flavortext messages that hint that you're vomitting up robots . = ..() if(SPT_PROB(13, seconds_per_tick)) - affected_mob.reagents.remove_reagent(type, metabolization_rate*15) // ~5 units at a rate of 0.4 but i wanted a nice number in code + affected_mob.reagents.remove_reagent(type, metabolization_rate * 15) // ~5 units at a rate of 0.4 but i wanted a nice number in code affected_mob.vomit(vomit_flags = VOMIT_CATEGORY_DEFAULT, vomit_type = /obj/effect/decal/cleanable/vomit/nanites, lost_nutrition = 20) // nanite safety protocols make your body expel them to prevent harmies /datum/reagent/medicine/earthsblood //Created by ambrosia gaia plants @@ -1306,7 +1307,6 @@ need_mob_update += affected_mob.adjustFireLoss(-1 * REM * seconds_per_tick, updating_health = FALSE, required_bodytype = affected_bodytype) need_mob_update += affected_mob.adjustOxyLoss(-0.5 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type) need_mob_update += affected_mob.adjustToxLoss(-0.5 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype) - need_mob_update += affected_mob.adjustCloneLoss(-0.1 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype) need_mob_update += affected_mob.adjustStaminaLoss(-0.5 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) need_mob_update += affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1 * REM * seconds_per_tick, 150, affected_organ_flags) //This does, after all, come from ambrosia, and the most powerful ambrosia in existence, at that! else @@ -1314,7 +1314,6 @@ need_mob_update += affected_mob.adjustFireLoss(-5 * REM * seconds_per_tick, updating_health = FALSE, required_bodytype = affected_bodytype) need_mob_update += affected_mob.adjustOxyLoss(-3 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type) need_mob_update += affected_mob.adjustToxLoss(-3 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype) - need_mob_update += affected_mob.adjustCloneLoss(-1 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype) need_mob_update += affected_mob.adjustStaminaLoss(-3 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) need_mob_update += affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2 * REM * seconds_per_tick, 150, affected_organ_flags) affected_mob.adjust_jitter_up_to(6 SECONDS * REM * seconds_per_tick, 1 MINUTES) @@ -1506,13 +1505,14 @@ /datum/reagent/medicine/modafinil/on_mob_life(mob/living/carbon/metabolizer, seconds_per_tick, times_fired) . = ..() - if(!overdosed) // We do not want any effects on OD - overdose_threshold = overdose_threshold + ((rand(-10, 10) / 10) * REM * seconds_per_tick) // for extra fun - metabolizer.AdjustAllImmobility(-5 * REM * seconds_per_tick) - metabolizer.adjustStaminaLoss(-0.5 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) - metabolizer.set_jitter_if_lower(1 SECONDS * REM * seconds_per_tick) - metabolization_rate = 0.005 * REAGENTS_METABOLISM * rand(5, 20) // randomizes metabolism between 0.02 and 0.08 per second - return UPDATE_MOB_HEALTH + if(overdosed) // We do not want any effects on OD + return + overdose_threshold = overdose_threshold + ((rand(-10, 10) / 10) * REM * seconds_per_tick) // for extra fun + metabolizer.AdjustAllImmobility(-5 * REM * seconds_per_tick) + metabolizer.adjustStaminaLoss(-0.5 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) + metabolizer.set_jitter_if_lower(1 SECONDS * REM * seconds_per_tick) + metabolization_rate = 0.005 * REAGENTS_METABOLISM * rand(5, 20) // randomizes metabolism between 0.02 and 0.08 per second + return UPDATE_MOB_HEALTH /datum/reagent/medicine/modafinil/overdose_start(mob/living/affected_mob) . = ..() diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 3b39b82d52ff76..377325a1d73572 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -1,5 +1,5 @@ /datum/reagent/blood - data = list("viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null,"quirks"=null, "monkey_origins" = FALSE) // SKYRAT EDIT - Rebalancing blood for Hemophages - ORIGINAL: data = list("viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null,"quirks"=null) + data = list("viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null,"quirks"=null, "monkey_origins" = FALSE) // NOVA EDIT - Rebalancing blood for Hemophages - ORIGINAL: data = list("viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null,"quirks"=null) name = "Blood" color = "#C80000" // rgb: 200, 0, 0 metabolization_rate = 12.5 * REAGENTS_METABOLISM //fast rate so it disappears fast. @@ -50,20 +50,28 @@ else if((methods & TOUCH) && (strain.spread_flags & DISEASE_SPREAD_CONTACT_FLUIDS)) exposed_mob.ContactContractDisease(strain) + if(data && data["resistances"]) + if(methods & (INGEST|INJECT)) //have to inject or ingest it. no curefoam/cheap curesprays + for(var/stuff in exposed_mob.diseases) + var/datum/disease/infection = stuff + if(infection.GetDiseaseID() in data["resistances"]) + if(!infection.bypasses_immunity) + infection.cure(add_resistance = FALSE) + if(iscarbon(exposed_mob)) var/mob/living/carbon/exposed_carbon = exposed_mob if(exposed_carbon.get_blood_id() == type && ((methods & INJECT) || ((methods & INGEST) && HAS_TRAIT(exposed_carbon, TRAIT_DRINKS_BLOOD)))) if(!data || !(data["blood_type"] in get_safe_blood(exposed_carbon.dna.blood_type))) exposed_carbon.reagents.add_reagent(/datum/reagent/toxin, reac_volume * 0.5) else - /* SKYRAT EDIT - Rebalancing blood for Hemophages - ORIGINAL: + /* NOVA EDIT - Rebalancing blood for Hemophages - ORIGINAL: exposed_carbon.blood_volume = min(exposed_carbon.blood_volume + round(reac_volume, 0.1), BLOOD_VOLUME_MAXIMUM) - */ // ORIGINAL END - SKYRAT EDIT: + */ // ORIGINAL END - NOVA EDIT: // We do a max() here so that being injected with monkey blood when you're past 560u doesn't reset you back to 560 var/max_blood_volume = data["monkey_origins"] ? max(exposed_carbon.blood_volume, BLOOD_VOLUME_NORMAL) : BLOOD_VOLUME_MAXIMUM exposed_carbon.blood_volume = min(exposed_carbon.blood_volume + round(reac_volume, 0.1), max_blood_volume) - // SKYRAT EDIT END + // NOVA EDIT END exposed_carbon.reagents.remove_reagent(type, reac_volume) // Because we don't want blood to just lie around in the patient's blood, makes no sense. @@ -161,7 +169,7 @@ for(var/thing in exposed_mob.diseases) var/datum/disease/infection = thing if(infection.GetDiseaseID() in data) - infection.cure() + infection.cure(add_resistance = TRUE) LAZYOR(exposed_mob.disease_resistances, data) /datum/reagent/vaccine/on_merge(list/data) @@ -189,7 +197,7 @@ var/cooling_temperature = 2 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_CLEANS default_container = /obj/item/reagent_containers/cup/glass/waterbottle - evaporates = TRUE //SKYRAT EDIT ADDITION + evaporates = TRUE //NOVA EDIT ADDITION /datum/glass_style/shot_glass/water required_drink_type = /datum/reagent/water @@ -277,7 +285,7 @@ if(methods & VAPOR) exposed_mob.adjust_wet_stacks(reac_volume * WATER_TO_WET_STACKS_FACTOR_VAPOR) // Spraying someone with water with the hope to put them out is just simply too funny to me not to add it. - if(!isfeline(exposed_mob)) // SKYRAT EDIT - Feline trait :) - ORIGINAL: if(!isfelinid(exposed_mob)) + if(!isfeline(exposed_mob)) // NOVA EDIT - Feline trait :) - ORIGINAL: if(!isfelinid(exposed_mob)) return exposed_mob.incapacitate(1) // startles the felinid, canceling any do_after @@ -498,6 +506,7 @@ /datum/reagent/fuel/unholywater/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() + var/need_mob_update = FALSE if(IS_CULTIST(affected_mob)) affected_mob.adjust_drowsiness(-10 SECONDS * REM * seconds_per_tick) @@ -549,7 +558,7 @@ need_mob_update += affected_mob.adjustFireLoss(0.5*seconds_per_tick, updating_health = FALSE) //Hence the other damages... ain't I a bastard? affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2.5*seconds_per_tick, 150) if(holder) - holder.remove_reagent(type, 0.5*seconds_per_tick) + holder.remove_reagent(type, 0.5 * seconds_per_tick) if(need_mob_update) return UPDATE_MOB_HEALTH @@ -740,13 +749,11 @@ if(current_cycle >= CYCLES_TO_TURN) var/datum/species/species_type = race //affected_mob.set_species(species_type) //ORIGINAL - affected_mob.set_species(species_type, TRUE, FALSE, null, null, null, null, TRUE) //SKYRAT EDIT CHANGE - CUSTOMIZATION + affected_mob.set_species(species_type, TRUE, FALSE, null, null, null, null, TRUE) //NOVA EDIT CHANGE - CUSTOMIZATION holder.del_reagent(type) to_chat(affected_mob, span_warning("You've become \a [lowertext(initial(species_type.name))]!")) return - return ..() - /datum/reagent/mutationtoxin/classic //The one from plasma on green slimes name = "Mutation Toxin" description = "A corruptive toxin." @@ -806,13 +813,13 @@ to_chat(affected_mob, span_warning("Your jelly shifts and morphs, turning you into another subspecies!")) var/species_type = pick(subtypesof(/datum/species/jelly)) //affected_mob.set_species(species_type) //ORIGINAL - affected_mob.set_species(species_type, TRUE, FALSE, null, null, null, null, TRUE, TRUE) //SKYRAT EDIT CHANGE - CUSTOMIZATION + affected_mob.set_species(species_type, TRUE, FALSE, null, null, null, null, TRUE, TRUE) //NOVA EDIT CHANGE - CUSTOMIZATION holder.del_reagent(type) return UPDATE_MOB_HEALTH if(current_cycle >= CYCLES_TO_TURN) //overwrite since we want subtypes of jelly var/datum/species/species_type = pick(subtypesof(race)) //affected_mob.set_species(species_type) //ORIGINAL - affected_mob.set_species(species_type, TRUE, FALSE, null, null, null, null, TRUE, TRUE) //SKYRAT EDIT CHANGE - CUSTOMIZATION + affected_mob.set_species(species_type, TRUE, FALSE, null, null, null, null, TRUE, TRUE) //NOVA EDIT CHANGE - CUSTOMIZATION holder.del_reagent(type) to_chat(affected_mob, span_warning("You've become \a [initial(species_type.name)]!")) return UPDATE_MOB_HEALTH @@ -894,7 +901,7 @@ /datum/reagent/mulligan name = "Mulligan Toxin" - description = "This toxin will rapidly change the DNA of humanoid beings. Commonly used by Syndicate spies and assassins in need of an emergency ID change." + description = "This toxin will rapidly change the DNA of humanoid beings. Commonly used by Symphionia spies and assassins in need of an emergency ID change." color = "#5EFF3B" //RGB: 94, 255, 59 metabolization_rate = INFINITY taste_description = "slime" @@ -944,9 +951,8 @@ /datum/reagent/serotrotium/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() - if(ishuman(affected_mob)) - if(SPT_PROB(3.5, seconds_per_tick)) - affected_mob.emote(pick("twitch","drool","moan","gasp")) + if(SPT_PROB(3.5, seconds_per_tick)) + affected_mob.emote(pick("twitch","drool","moan","gasp")) /datum/reagent/oxygen name = "Oxygen" @@ -1021,8 +1027,8 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /datum/reagent/mercury/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) - . = ..() - if(!HAS_TRAIT(src, TRAIT_IMMOBILIZED) && !isspaceturf(affected_mob.loc)) + . = ..() + if(!HAS_TRAIT(src, TRAIT_IMMOBILIZED) && isturf(affected_mob.loc) && !isgroundlessturf(affected_mob.loc)) step(affected_mob, pick(GLOB.cardinals)) if(SPT_PROB(3.5, seconds_per_tick)) affected_mob.emote(pick("twitch","drool","moan")) @@ -1074,9 +1080,9 @@ /datum/reagent/chlorine/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) - affected_mob.take_bodypart_damage(0.5*REM*seconds_per_tick, 0) - . = TRUE - ..() + . = ..() + if(affected_mob.take_bodypart_damage(0.5*REM*seconds_per_tick, 0)) + return UPDATE_MOB_HEALTH /datum/reagent/fluorine name = "Fluorine" @@ -1097,7 +1103,7 @@ /datum/reagent/fluorine/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() if(affected_mob.adjustToxLoss(0.5*REM*seconds_per_tick, updating_health = FALSE)) - . = TRUE + return UPDATE_MOB_HEALTH /datum/reagent/sodium name = "Sodium" @@ -1134,7 +1140,7 @@ /datum/reagent/lithium/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() - if(!HAS_TRAIT(affected_mob, TRAIT_IMMOBILIZED) && !isspaceturf(affected_mob.loc) && isturf(affected_mob.loc)) + if(!HAS_TRAIT(affected_mob, TRAIT_IMMOBILIZED) && isturf(affected_mob.loc) && !isgroundlessturf(affected_mob.loc)) step(affected_mob, pick(GLOB.cardinals)) if(SPT_PROB(2.5, seconds_per_tick)) affected_mob.emote(pick("twitch","drool","moan")) @@ -1428,7 +1434,6 @@ /datum/reagent/impedrezene/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() affected_mob.adjust_jitter(-5 SECONDS * seconds_per_tick) - . = FALSE if(SPT_PROB(55, seconds_per_tick)) affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2) . = TRUE @@ -1595,6 +1600,7 @@ REMOVE_TRAIT(affected_mob, TRAIT_BLOODY_MESS, type) /datum/reagent/nitrous_oxide/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() affected_mob.adjust_drowsiness(4 SECONDS * REM * seconds_per_tick) if(!HAS_TRAIT(affected_mob, TRAIT_BLOODY_MESS) && !HAS_TRAIT(affected_mob, TRAIT_COAGULATING)) //So long as they do not have a coagulant, if they did not have the bloody mess trait, they do now @@ -1606,7 +1612,6 @@ if(SPT_PROB(10, seconds_per_tick)) affected_mob.losebreath += 2 affected_mob.adjust_confusion_up_to(2 SECONDS, 5 SECONDS) - ..() /////////////////////////Colorful Powder//////////////////////////// //For colouring in /proc/mix_color_from_reagents @@ -1851,8 +1856,8 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /datum/reagent/stable_plasma/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() affected_mob.adjustPlasma(10 * REM * seconds_per_tick) - ..() /datum/reagent/iodine name = "Iodine" @@ -1874,7 +1879,7 @@ /datum/reagent/carpet/expose_turf(turf/exposed_turf, reac_volume) if(isopenturf(exposed_turf) && exposed_turf.turf_flags & IS_SOLID && !istype(exposed_turf, /turf/open/floor/carpet)) - exposed_turf.PlaceOnTop(carpet_type, flags = CHANGETURF_INHERIT_AIR) + exposed_turf.place_on_top(carpet_type, flags = CHANGETURF_INHERIT_AIR) ..() /datum/reagent/carpet/black @@ -2179,9 +2184,9 @@ color = pick(random_color_list) /datum/reagent/colorful_reagent/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() if(can_colour_mobs) affected_mob.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY) - return ..() /// Colors anything it touches a random color. /datum/reagent/colorful_reagent/expose_atom(atom/exposed_atom, reac_volume) @@ -2556,18 +2561,18 @@ /datum/reagent/bz_metabolites/on_mob_metabolize(mob/living/ling) . = ..() - ADD_TRAIT(ling, CHANGELING_HIVEMIND_MUTE, type) + ADD_TRAIT(ling, TRAIT_CHANGELING_HIVEMIND_MUTE, type) /datum/reagent/bz_metabolites/on_mob_end_metabolize(mob/living/ling) . = ..() - REMOVE_TRAIT(ling, CHANGELING_HIVEMIND_MUTE, type) + REMOVE_TRAIT(ling, TRAIT_CHANGELING_HIVEMIND_MUTE, type) /datum/reagent/bz_metabolites/on_mob_life(mob/living/carbon/target, seconds_per_tick, times_fired) . = ..() if(target.mind) var/datum/antagonist/changeling/changeling = target.mind.has_antag_datum(/datum/antagonist/changeling) if(changeling) - changeling.adjust_chemicals(-4 * REM * seconds_per_tick) //SKYRAT EDIT - BZ-BUFF-VS-LING - ORIGINAL: changeling.adjust_chemicals(-2 * REM * seconds_per_tick) + changeling.adjust_chemicals(-4 * REM * seconds_per_tick) //NOVA EDIT - BZ-BUFF-VS-LING - ORIGINAL: changeling.adjust_chemicals(-2 * REM * seconds_per_tick) /datum/reagent/pax/peaceborg name = "Synthpax" @@ -2583,12 +2588,12 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_NO_RANDOM_RECIPE /datum/reagent/peaceborg/confuse/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() affected_mob.adjust_confusion_up_to(3 SECONDS * REM * seconds_per_tick, 5 SECONDS) affected_mob.adjust_dizzy_up_to(6 SECONDS * REM * seconds_per_tick, 12 SECONDS) if(SPT_PROB(10, seconds_per_tick)) to_chat(affected_mob, "You feel confused and disoriented.") - ..() /datum/reagent/peaceborg/tire name = "Tiring Solution" @@ -2746,7 +2751,7 @@ return var/metal_amount = 0 - var/list/materials_to_transmute = target.get_material_composition(BREAKDOWN_INCLUDE_ALCHEMY) + var/list/materials_to_transmute = target.get_material_composition() for(var/metal_key in materials_to_transmute) //list with what they're made of metal_amount += materials_to_transmute[metal_key] @@ -2756,7 +2761,6 @@ var/list/metal_dat = list((metal_ref) = metal_amount) target.material_flags = applied_material_flags target.set_custom_materials(metal_dat) - ADD_TRAIT(target, TRAIT_MAT_TRANSMUTED, type) /datum/reagent/gravitum name = "Gravitum" @@ -2845,7 +2849,7 @@ /datum/reagent/eldritch/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) . = ..() var/need_mob_update = FALSE - if(IS_HERETIC(drinker)) + if(IS_HERETIC_OR_MONSTER(drinker)) drinker.adjust_drowsiness(-10 * REM * seconds_per_tick) drinker.AdjustAllImmobility(-40 * REM * seconds_per_tick) need_mob_update += drinker.adjustStaminaLoss(-10 * REM * seconds_per_tick, updating_stamina = FALSE) @@ -3074,7 +3078,6 @@ /datum/reagent/hauntium/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() - if(affected_mob.mob_biotypes & MOB_UNDEAD || HAS_MIND_TRAIT(affected_mob, TRAIT_MORBID)) //if morbid or undead,acts like an addiction-less drug affected_mob.remove_status_effect(/datum/status_effect/jitter) affected_mob.AdjustStun(-50 * REM * seconds_per_tick) diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm index 2db3682ef21850..30757231625f4d 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm @@ -279,13 +279,13 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /datum/reagent/pyrosium/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() if(holder.has_reagent(/datum/reagent/oxygen)) holder.remove_reagent(/datum/reagent/oxygen, 0.5 * REM * seconds_per_tick) affected_mob.adjust_bodytemperature(15 * REM * seconds_per_tick) if(ishuman(affected_mob)) var/mob/living/carbon/human/affected_human = affected_mob affected_human.adjust_coretemperature(15 * REM * seconds_per_tick) - return ..() /datum/reagent/pyrosium/burn(datum/reagents/holder) if(holder.has_reagent(/datum/reagent/oxygen)) @@ -333,16 +333,15 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /datum/reagent/teslium/energized_jelly/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) - . = ..() - if(isjellyperson(affected_mob)) - shock_timer = 0 //immune to shocks - affected_mob.AdjustAllImmobility(-40 *REM * seconds_per_tick) - if(affected_mob.adjustStaminaLoss(-2 * REM * seconds_per_tick, updating_stamina = FALSE)) - . = UPDATE_MOB_HEALTH - if(is_species(affected_mob, /datum/species/jelly/luminescent)) - var/mob/living/carbon/human/affected_human = affected_mob - var/datum/species/jelly/luminescent/slime_species = affected_human.dna.species - slime_species.extract_cooldown = max(slime_species.extract_cooldown - (2 SECONDS * REM * seconds_per_tick), 0) + if(!isjellyperson(affected_mob)) //everyone but jellypeople get shocked as normal. + return ..() + affected_mob.AdjustAllImmobility(-40 *REM * seconds_per_tick) + if(affected_mob.adjustStaminaLoss(-2 * REM * seconds_per_tick, updating_stamina = FALSE)) + . = UPDATE_MOB_HEALTH + if(is_species(affected_mob, /datum/species/jelly/luminescent)) + var/mob/living/carbon/human/affected_human = affected_mob + var/datum/species/jelly/luminescent/slime_species = affected_human.dna.species + slime_species.extract_cooldown = max(slime_species.extract_cooldown - (2 SECONDS * REM * seconds_per_tick), 0) /datum/reagent/firefighting_foam name = "Firefighting Foam" diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 390c3d7bfd4ddf..7457acd0687b9c 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -98,9 +98,9 @@ return ..() /datum/reagent/toxin/plasma/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() if(holder.has_reagent(/datum/reagent/medicine/epinephrine)) holder.remove_reagent(/datum/reagent/medicine/epinephrine, 2 * REM * seconds_per_tick) - . = ..() affected_mob.adjustPlasma(20 * REM * seconds_per_tick) /datum/reagent/toxin/plasma/on_mob_metabolize(mob/living/carbon/affected_mob) @@ -154,9 +154,9 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /datum/reagent/toxin/hot_ice/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() if(holder.has_reagent(/datum/reagent/medicine/epinephrine)) holder.remove_reagent(/datum/reagent/medicine/epinephrine, 2 * REM * seconds_per_tick) - . = ..() affected_mob.adjustPlasma(20 * REM * seconds_per_tick) affected_mob.adjust_bodytemperature(-7 * TEMPERATURE_DAMAGE_COEFFICIENT * REM * seconds_per_tick, affected_mob.get_body_temp_normal()) if(ishuman(affected_mob)) @@ -679,7 +679,6 @@ // chance to either decay into histamine or go the normal route of toxin metabolization if(SPT_PROB(8, seconds_per_tick)) - current_cycle++ holder.add_reagent(/datum/reagent/toxin/histamine, pick(5, 10)) holder.remove_reagent(/datum/reagent/toxin/venom, 1.1) else @@ -782,7 +781,7 @@ if(SPT_PROB(1.5, seconds_per_tick)) holder.add_reagent(/datum/reagent/toxin/histamine,rand(1,3)) - holder.remove_reagent(/datum/reagent/toxin/itching_powder,1.2) + holder.remove_reagent(/datum/reagent/toxin/itching_powder, 1.2) return else return ..() || . @@ -799,26 +798,27 @@ /datum/reagent/toxin/initropidril/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() - if(SPT_PROB(13, seconds_per_tick)) - var/picked_option = rand(1,3) - var/need_mob_update - switch(picked_option) - if(1) - affected_mob.Paralyze(60) - if(2) + if(!SPT_PROB(13, seconds_per_tick)) + return + var/picked_option = rand(1,3) + var/need_mob_update + switch(picked_option) + if(1) + affected_mob.Paralyze(60) + if(2) + affected_mob.losebreath += 10 + affected_mob.adjustOxyLoss(rand(5,25), updating_health = FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type) + need_mob_update = TRUE + if(3) + if(!affected_mob.undergoing_cardiac_arrest() && affected_mob.can_heartattack()) + affected_mob.set_heartattack(TRUE) + if(affected_mob.stat == CONSCIOUS) + affected_mob.visible_message(span_userdanger("[affected_mob] clutches at [affected_mob.p_their()] chest as if [affected_mob.p_their()] heart stopped!")) + else affected_mob.losebreath += 10 - affected_mob.adjustOxyLoss(rand(5,25), updating_health = FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type) - need_mob_update = TRUE - if(3) - if(!affected_mob.undergoing_cardiac_arrest() && affected_mob.can_heartattack()) - affected_mob.set_heartattack(TRUE) - if(affected_mob.stat == CONSCIOUS) - affected_mob.visible_message(span_userdanger("[affected_mob] clutches at [affected_mob.p_their()] chest as if [affected_mob.p_their()] heart stopped!")) - else - affected_mob.losebreath += 10 - need_mob_update = affected_mob.adjustOxyLoss(rand(5,25), updating_health = FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type) - if(need_mob_update) - return UPDATE_MOB_HEALTH + need_mob_update = affected_mob.adjustOxyLoss(rand(5,25), updating_health = FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type) + if(need_mob_update) + return UPDATE_MOB_HEALTH /datum/reagent/toxin/pancuronium name = "Pancuronium" @@ -963,7 +963,7 @@ affected_mob.vomit(vomit_flags = constructed_flags, distance = rand(0,4)) for(var/datum/reagent/toxin/R in affected_mob.reagents.reagent_list) if(R != src) - affected_mob.reagents.remove_reagent(R.type,1) + affected_mob.reagents.remove_reagent(R.type, 1) /datum/reagent/toxin/spewium/overdose_process(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() @@ -1030,14 +1030,14 @@ /datum/reagent/toxin/rotatium/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() - if(affected_mob.hud_used) - if(current_cycle >= 20 && (current_cycle % 20) == 0) - var/atom/movable/plane_master_controller/pm_controller = affected_mob.hud_used.plane_master_controllers[PLANE_MASTERS_GAME] + if(!affected_mob.hud_used || (current_cycle < 20 || (current_cycle % 20) == 0)) + return + var/atom/movable/plane_master_controller/pm_controller = affected_mob.hud_used.plane_master_controllers[PLANE_MASTERS_GAME] - var/rotation = min(round(current_cycle/20), 89) // By this point the player is probably puking and quitting anyway - for(var/atom/movable/screen/plane_master/plane as anything in pm_controller.get_planes()) - animate(plane, transform = matrix(rotation, MATRIX_ROTATE), time = 5, easing = QUAD_EASING, loop = -1) - animate(transform = matrix(-rotation, MATRIX_ROTATE), time = 5, easing = QUAD_EASING) + var/rotation = min(round(current_cycle/20), 89) // By this point the player is probably puking and quitting anyway + for(var/atom/movable/screen/plane_master/plane as anything in pm_controller.get_planes()) + animate(plane, transform = matrix(rotation, MATRIX_ROTATE), time = 5, easing = QUAD_EASING, loop = -1) + animate(transform = matrix(-rotation, MATRIX_ROTATE), time = 5, easing = QUAD_EASING) /datum/reagent/toxin/rotatium/on_mob_end_metabolize(mob/living/affected_mob) . = ..() @@ -1164,13 +1164,14 @@ /datum/reagent/toxin/delayed/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() - if(current_cycle > delay) - if(holder) - holder.remove_reagent(type, actual_metaboliztion_rate * affected_mob.metabolism_efficiency * seconds_per_tick) - if(affected_mob.adjustToxLoss(actual_toxpwr * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype)) - . = UPDATE_MOB_HEALTH - if(SPT_PROB(5, seconds_per_tick)) - affected_mob.Paralyze(20) + if(current_cycle <= delay) + return + if(holder) + holder.remove_reagent(type, actual_metaboliztion_rate * affected_mob.metabolism_efficiency * seconds_per_tick) + if(affected_mob.adjustToxLoss(actual_toxpwr * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype)) + . = UPDATE_MOB_HEALTH + if(SPT_PROB(5, seconds_per_tick)) + affected_mob.Paralyze(20) /datum/reagent/toxin/mimesbane name = "Mime's Bane" @@ -1213,14 +1214,15 @@ . = ..() if(affected_mob.adjustStaminaLoss(7.5 * REM * seconds_per_tick, updating_stamina = FALSE)) . = UPDATE_MOB_HEALTH - if(SPT_PROB(10, seconds_per_tick)) - switch(rand(1, 3)) - if(1) - affected_mob.say(pick("oof.", "ouch.", "my bones.", "oof ouch.", "oof ouch my bones."), forced = /datum/reagent/toxin/bonehurtingjuice) - if(2) - affected_mob.manual_emote(pick("oofs silently.", "looks like [affected_mob.p_their()] bones hurt.", "grimaces, as though [affected_mob.p_their()] bones hurt.")) - if(3) - to_chat(affected_mob, span_warning("Your bones hurt!")) + if(!SPT_PROB(10, seconds_per_tick)) + return + switch(rand(1, 3)) + if(1) + affected_mob.say(pick("oof.", "ouch.", "my bones.", "oof ouch.", "oof ouch my bones."), forced = /datum/reagent/toxin/bonehurtingjuice) + if(2) + affected_mob.manual_emote(pick("oofs silently.", "looks like [affected_mob.p_their()] bones hurt.", "grimaces, as though [affected_mob.p_their()] bones hurt.")) + if(3) + to_chat(affected_mob, span_warning("Your bones hurt!")) /datum/reagent/toxin/bonehurtingjuice/overdose_process(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() diff --git a/code/modules/reagents/chemistry/reagents/unique/eigenstasium.dm b/code/modules/reagents/chemistry/reagents/unique/eigenstasium.dm index 73dcf8aa60b482..1cb0e6204c2e7e 100644 --- a/code/modules/reagents/chemistry/reagents/unique/eigenstasium.dm +++ b/code/modules/reagents/chemistry/reagents/unique/eigenstasium.dm @@ -19,8 +19,8 @@ ph = 3.7 purity = 0.5 creation_purity = 0.5 - inverse_chem = /datum/reagent/impurity/eigenswap - inverse_chem_val = 0 + inverse_chem = /datum/reagent/inverse/eigenswap + inverse_chem_val = 0.1 chemical_flags = REAGENT_DEAD_PROCESS //So if you die with it in your body, you still get teleported back to the location as a corpse data = list("location_created" = null, "ingested" = FALSE)//So we retain the target location and creator between reagent instances ///The creation point assigned during the reaction diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index a1f10c9afe6b2e..c7732e0908a0d9 100644 --- a/code/modules/reagents/chemistry/recipes.dm +++ b/code/modules/reagents/chemistry/recipes.dm @@ -46,7 +46,7 @@ var/temp_exponent_factor = 2 /// How sharp the pH exponential curve is (to the power of value) var/ph_exponent_factor = 2 - /// How much the temperature will change (with no intervention) (i.e. for 30u made the temperature will increase by 100, same with 300u. The final temp will always be start + this value, with the exception con beakers with different specific heats) + /// How much the temperature changes per unit of chem used. without REACTION_HEAT_ARBITARY flag the rate of change depends on the holder heat capacity else results are more accurate var/thermic_constant = 50 /// pH change per 1u reaction var/H_ion_release = 0.01 @@ -60,28 +60,6 @@ ///A bitflag var for tagging reagents for the reagent loopup functon var/reaction_tags = NONE - //SKYRAT EDIT ADDITION - ///If defined, it'll emitt that pollutant on reaction - var/pollutant_type - ///How much amount per volume of the pollutant shall we emitt if `pollutant_type` is defined - var/pollutant_amount = 1 - //SKYRAT EDIT END - -/datum/chemical_reaction/New() - . = ..() - SSticker.OnRoundstart(CALLBACK(src, PROC_REF(update_info))) - -/** - * Updates information during the roundstart - * - * This proc is mainly used by explosives but can be used anywhere else - * You should generally use the special reactions in [/datum/chemical_reaction/randomized] - * But for simple variable edits, like changing the temperature or adding/subtracting required reagents it is better to use this. - */ -/datum/chemical_reaction/proc/update_info() - return - - ///REACTION PROCS /** @@ -168,7 +146,7 @@ var/cached_purity = reagent.purity if((reaction_flags & REACTION_CLEAR_INVERSE) && reagent.inverse_chem) if(reagent.inverse_chem_val > reagent.purity) - holder.remove_reagent(reagent.type, cached_volume, FALSE) + holder.remove_reagent(reagent.type, cached_volume, safety = FALSE) holder.add_reagent(reagent.inverse_chem, cached_volume, FALSE, added_purity = reagent.get_inverse_purity(cached_purity)) return @@ -186,10 +164,11 @@ */ /datum/chemical_reaction/proc/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added) for(var/id in results) - var/datum/reagent/reagent = holder.get_reagent(id) + var/datum/reagent/reagent = holder.has_reagent(id) if(!reagent) return - reagent.volume = round((reagent.volume*0.98), 0.01) //Slowly lower yield per tick + reagent.volume *= 0.98 //Slowly lower yield per tick + holder.update_total() /** * Occurs when a reation is too impure (i.e. it's below purity_min) @@ -206,7 +185,7 @@ /datum/chemical_reaction/proc/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added) var/affected_list = results + required_reagents for(var/_reagent in affected_list) - var/datum/reagent/reagent = holder.get_reagent(_reagent) + var/datum/reagent/reagent = holder.has_reagent(_reagent) if(!reagent) continue reagent.purity = clamp((reagent.purity-0.01), 0, 1) //slowly reduce purity of reagents diff --git a/code/modules/reagents/chemistry/recipes/cat2_medicines.dm b/code/modules/reagents/chemistry/recipes/cat2_medicines.dm index ea93cc82e1aa2a..c61a7739377360 100644 --- a/code/modules/reagents/chemistry/recipes/cat2_medicines.dm +++ b/code/modules/reagents/chemistry/recipes/cat2_medicines.dm @@ -25,7 +25,7 @@ /datum/chemical_reaction/medicine/helbital/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added) explode_fire_vortex(holder, equilibrium, 1, 1, "impure") holder.chem_temp += 2.5 - var/datum/reagent/helbital = holder.get_reagent(/datum/reagent/medicine/c2/helbital) + var/datum/reagent/helbital = holder.has_reagent(/datum/reagent/medicine/c2/helbital) if(!helbital) return if(helbital.purity <= 0.25) @@ -41,7 +41,7 @@ /datum/chemical_reaction/medicine/helbital/reaction_finish(datum/reagents/holder, datum/equilibrium/reaction, react_vol) . = ..() - var/datum/reagent/helbital = holder.get_reagent(/datum/reagent/medicine/c2/helbital) + var/datum/reagent/helbital = holder.has_reagent(/datum/reagent/medicine/c2/helbital) if(!helbital) return if(helbital.purity <= 0.1) //So people don't ezmode this by keeping it at min diff --git a/code/modules/reagents/chemistry/recipes/drugs.dm b/code/modules/reagents/chemistry/recipes/drugs.dm index 8822aa787056a7..3d25fa5e2b157e 100644 --- a/code/modules/reagents/chemistry/recipes/drugs.dm +++ b/code/modules/reagents/chemistry/recipes/drugs.dm @@ -30,7 +30,7 @@ //The less pure it is, the faster it heats up. tg please don't hate me for making your meth even more dangerous /datum/chemical_reaction/methamphetamine/reaction_step(datum/reagents/holder, datum/equilibrium/reaction, delta_t, delta_ph, step_reaction_vol) - var/datum/reagent/meth = holder.get_reagent(/datum/reagent/drug/methamphetamine) + var/datum/reagent/meth = holder.has_reagent(/datum/reagent/drug/methamphetamine) if(!meth)//First step reaction.thermic_mod = (1-delta_ph)*5 return @@ -45,7 +45,7 @@ temp_meth_explosion(holder, equilibrium.reacted_vol) /datum/chemical_reaction/methamphetamine/reaction_finish(datum/reagents/holder, datum/equilibrium/reaction, react_vol) - var/datum/reagent/meth = holder.get_reagent(/datum/reagent/drug/methamphetamine) + var/datum/reagent/meth = holder.has_reagent(/datum/reagent/drug/methamphetamine) if(!meth)//Other procs before this can already blow us up return ..() if(meth.purity < purity_min) diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm index d62f9cdd48e44c..5dc970ec8aa54a 100644 --- a/code/modules/reagents/chemistry/recipes/medicine.dm +++ b/code/modules/reagents/chemistry/recipes/medicine.dm @@ -9,10 +9,10 @@ rate_up_lim = 35 reaction_tags = REACTION_TAG_HEALING | REACTION_TAG_EASY - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION pollutant_type = /datum/pollutant/chemical_vapors pollutant_amount = 0.2 - //SKYRAT EDIT END + //NOVA EDIT END /datum/chemical_reaction/medicine/leporazine results = list(/datum/reagent/medicine/leporazine = 2) @@ -23,7 +23,7 @@ /datum/chemical_reaction/medicine/rezadone results = list(/datum/reagent/medicine/rezadone = 3) required_reagents = list(/datum/reagent/toxin/carpotoxin = 1, /datum/reagent/cryptobiolin = 1, /datum/reagent/copper = 1) - reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_CLONE + reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING /datum/chemical_reaction/medicine/spaceacillin results = list(/datum/reagent/medicine/spaceacillin = 2) @@ -301,18 +301,12 @@ /datum/chemical_reaction/medicine/cryoxadone results = list(/datum/reagent/medicine/cryoxadone = 3) required_reagents = list(/datum/reagent/stable_plasma = 1, /datum/reagent/acetone = 1, /datum/reagent/toxin/mutagen = 1) - reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_PLANT | REACTION_TAG_BRUTE |REACTION_TAG_BURN | REACTION_TAG_TOXIN | REACTION_TAG_OXY | REACTION_TAG_CLONE + reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_PLANT | REACTION_TAG_BRUTE |REACTION_TAG_BURN | REACTION_TAG_TOXIN | REACTION_TAG_OXY /datum/chemical_reaction/medicine/pyroxadone results = list(/datum/reagent/medicine/pyroxadone = 2) required_reagents = list(/datum/reagent/medicine/cryoxadone = 1, /datum/reagent/toxin/slimejelly = 1) - reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_BRUTE |REACTION_TAG_BURN | REACTION_TAG_TOXIN | REACTION_TAG_OXY | REACTION_TAG_CLONE - -/datum/chemical_reaction/medicine/clonexadone - results = list(/datum/reagent/medicine/clonexadone = 2) - required_reagents = list(/datum/reagent/medicine/cryoxadone = 1, /datum/reagent/sodium = 1) - required_catalysts = list(/datum/reagent/toxin/plasma = 5) - reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_CLONE + reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_BRUTE |REACTION_TAG_BURN | REACTION_TAG_TOXIN | REACTION_TAG_OXY /datum/chemical_reaction/medicine/haloperidol results = list(/datum/reagent/medicine/haloperidol = 5) diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index d3ad4bd6ce5d3e..c87a61968357df 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -730,7 +730,7 @@ reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE /datum/chemical_reaction/metalgen_imprint/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) - var/datum/reagent/metalgen/MM = holder.get_reagent(/datum/reagent/metalgen) + var/datum/reagent/metalgen/MM = holder.has_reagent(/datum/reagent/metalgen) for(var/datum/reagent/R in holder.reagent_list) if(R.material && R.volume >= 40) MM.data["material"] = R.material diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm index 05bc622faa70f3..8e74b0ad6f869d 100644 --- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm +++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm @@ -15,9 +15,9 @@ /datum/chemical_reaction/reagent_explosion/nitroglycerin/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) - if(holder.has_reagent(/datum/reagent/exotic_stabilizer,round(created_volume / 25, CHEMICAL_QUANTISATION_LEVEL))) + if(holder.has_reagent(/datum/reagent/exotic_stabilizer, created_volume / 25)) return - holder.remove_reagent(/datum/reagent/nitroglycerin, created_volume*2) + holder.remove_reagent(/datum/reagent/nitroglycerin, created_volume * 2) ..() /datum/chemical_reaction/reagent_explosion/nitroglycerin_explosion @@ -35,7 +35,7 @@ /datum/chemical_reaction/reagent_explosion/rdx/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) if(holder.has_reagent(/datum/reagent/stabilizing_agent)) return - holder.remove_reagent(/datum/reagent/rdx, created_volume*2) + holder.remove_reagent(/datum/reagent/rdx, created_volume * 2) ..() /datum/chemical_reaction/reagent_explosion/rdx_explosion @@ -77,11 +77,12 @@ required_temp = 450 strengthdiv = 3 -/datum/chemical_reaction/reagent_explosion/tatp/update_info() - required_temp = 450 + rand(-49,49) //this gets loaded only on round start +/datum/chemical_reaction/reagent_explosion/tatp/New() + . = ..() + required_temp = 450 + rand(-49, 49) /datum/chemical_reaction/reagent_explosion/tatp/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) - if(holder.has_reagent(/datum/reagent/exotic_stabilizer,round(created_volume / 50, CHEMICAL_QUANTISATION_LEVEL))) // we like exotic stabilizer + if(holder.has_reagent(/datum/reagent/exotic_stabilizer, created_volume / 50)) // we like exotic stabilizer return holder.remove_reagent(/datum/reagent/tatp, created_volume) ..() @@ -93,12 +94,12 @@ /datum/chemical_reaction/reagent_explosion/tatp_explosion/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) var/strengthdiv_adjust = created_volume / ( 2100 / initial(strengthdiv)) - strengthdiv = max(initial(strengthdiv) - strengthdiv_adjust + 1.5 ,1.5) //Slightly better than nitroglycerin - . = ..() - return + strengthdiv = max(initial(strengthdiv) - strengthdiv_adjust + 1.5, 1.5) //Slightly better than nitroglycerin + return ..() -/datum/chemical_reaction/reagent_explosion/tatp_explosion/update_info() - required_temp = 550 + rand(-49,49) +/datum/chemical_reaction/reagent_explosion/tatp_explosion/New() + . = ..() + required_temp = 550 + rand(-49, 49) /datum/chemical_reaction/reagent_explosion/penthrite_explosion_epinephrine required_reagents = list(/datum/reagent/medicine/c2/penthrite = 1, /datum/reagent/medicine/epinephrine = 1) @@ -242,7 +243,7 @@ /datum/chemical_reaction/sorium/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) if(holder.has_reagent(/datum/reagent/stabilizing_agent)) return - holder.remove_reagent(/datum/reagent/sorium, created_volume*4) + holder.remove_reagent(/datum/reagent/sorium, created_volume * 4) var/turf/T = get_turf(holder.my_atom) var/range = clamp(sqrt(created_volume*4), 1, 6) goonchem_vortex(T, 1, range) @@ -265,7 +266,7 @@ /datum/chemical_reaction/liquid_dark_matter/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) if(holder.has_reagent(/datum/reagent/stabilizing_agent)) return - holder.remove_reagent(/datum/reagent/liquid_dark_matter, created_volume*3) + holder.remove_reagent(/datum/reagent/liquid_dark_matter, created_volume * 3) var/turf/T = get_turf(holder.my_atom) var/range = clamp(sqrt(created_volume*3), 1, 6) goonchem_vortex(T, 0, range) @@ -301,7 +302,7 @@ C.Paralyze(60) else C.Stun(100) - holder.remove_reagent(/datum/reagent/flash_powder, created_volume*3) + holder.remove_reagent(/datum/reagent/flash_powder, created_volume * 3) /datum/chemical_reaction/flash_powder_flash required_reagents = list(/datum/reagent/flash_powder = 1) @@ -331,7 +332,7 @@ /datum/chemical_reaction/smoke_powder/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) if(holder.has_reagent(/datum/reagent/stabilizing_agent)) return - holder.remove_reagent(/datum/reagent/smoke_powder, created_volume*3) + holder.remove_reagent(/datum/reagent/smoke_powder, created_volume * 3) var/location = get_turf(holder.my_atom) var/datum/effect_system/fluid_spread/smoke/chem/S = new S.attach(location) @@ -368,7 +369,7 @@ /datum/chemical_reaction/sonic_powder/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) if(holder.has_reagent(/datum/reagent/stabilizing_agent)) return - holder.remove_reagent(/datum/reagent/sonic_powder, created_volume*3) + holder.remove_reagent(/datum/reagent/sonic_powder, created_volume * 3) var/location = get_turf(holder.my_atom) playsound(location, 'sound/effects/bang.ogg', 25, TRUE) for(var/mob/living/carbon/C in get_hearers_in_view(created_volume/3, location)) @@ -488,7 +489,7 @@ determin_ph_range = 0 temp_exponent_factor = 1 ph_exponent_factor = 1 - thermic_constant = -50 //This is the part that cools things down now + thermic_constant = -5 //This is the part that cools things down now H_ion_release = 0 rate_up_lim = 4 purity_min = 0.15 @@ -503,7 +504,7 @@ reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE /datum/chemical_reaction/pyrosium_oxygen/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) - holder.chem_temp += 10*created_volume + holder.expose_temperature(holder.chem_temp + (10 * created_volume), 1) /datum/chemical_reaction/pyrosium results = list(/datum/reagent/pyrosium = 3) @@ -516,8 +517,7 @@ reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE /datum/chemical_reaction/pyrosium/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) - holder.chem_temp = 20 // also cools the fuck down - return + holder.expose_temperature(20, 1) // also cools the fuck down /datum/chemical_reaction/teslium results = list(/datum/reagent/teslium = 3) @@ -574,7 +574,7 @@ modifier = 1 /datum/chemical_reaction/reagent_explosion/nitrous_oxide/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) - holder.remove_reagent(/datum/reagent/sorium, created_volume*2) + holder.remove_reagent(/datum/reagent/sorium, created_volume * 2) var/turf/turfie = get_turf(holder.my_atom) //generally half as strong as sorium. var/range = clamp(sqrt(created_volume*2), 1, 6) diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index 6b5ddfc14e3543..f37f9ebb081c06 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -10,7 +10,7 @@ if(!istype(extract)) return FALSE - return extract.Uses > 0 + return extract.extract_uses > 0 /datum/chemical_reaction/slime/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) use_slime_core(holder) @@ -22,7 +22,7 @@ /datum/chemical_reaction/slime/proc/delete_extract(datum/reagents/holder) var/obj/item/slime_extract/M = holder.my_atom - if(M.Uses <= 0 && !results.len) //if the slime doesn't output chemicals + if(M.extract_uses <= 0 && !results.len) //if the slime doesn't output chemicals qdel(M) //Grey @@ -31,8 +31,8 @@ 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") - S.visible_message(span_danger("Infused with plasma, the core begins to quiver and grow, and a new baby slime emerges from it!")) + var/mob/living/simple_animal/slime/spawning_slime = new(get_turf(holder.my_atom), /datum/slime_type/grey) + spawning_slime.visible_message(span_danger("Infused with plasma, the core begins to quiver and grow, and a new baby slime emerges from it!")) ..() /datum/chemical_reaction/slime/slimeinaprov @@ -319,7 +319,7 @@ slime.docile = FALSE slime.update_name() continue - slime.rabid = 1 + slime.rabid = TRUE slime.visible_message(span_danger("The [slime] is driven into a frenzy!")) ..() @@ -472,7 +472,7 @@ var/turf/T = get_turf(holder.my_atom) new /obj/effect/timestop(T, null, null, null) if(istype(extract)) - if(extract.Uses > 0) + if(extract.extract_uses > 0) var/mob/lastheld = get_mob_by_key(holder.my_atom.fingerprintslast) if(lastheld && !lastheld.equip_to_slot_if_possible(extract, ITEM_SLOT_HANDS, disable_warning = TRUE)) extract.forceMove(get_turf(lastheld)) @@ -527,8 +527,8 @@ 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)) - S.visible_message(span_danger("Infused with plasma, the core begins to quiver and grow, and a new baby slime emerges from it!")) + var/mob/living/simple_animal/slime/random/random_slime = new (get_turf(holder.my_atom)) + random_slime.visible_message(span_danger("Infused with plasma, the core begins to quiver and grow, and a new baby slime emerges from it!")) ..() /datum/chemical_reaction/slime/slimebomb diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 5234018bbd9fa7..1344fa31cb9ee0 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -61,13 +61,16 @@ reagents.add_reagent(/datum/reagent/blood, disease_amount, data) add_initial_reagents() -/obj/item/reagent_containers/examine() +/obj/item/reagent_containers/examine(mob/user) . = ..() if(has_variable_transfer_amount) if(possible_transfer_amounts.len > 1) . += span_notice("Left-click or right-click in-hand to increase or decrease its transfer amount.") else if(possible_transfer_amounts.len) . += span_notice("Left-click or right-click in-hand to view its transfer amount.") + if(isliving(user) && HAS_TRAIT(user, TRAIT_REMOTE_TASTING)) + var/mob/living/living_user = user + living_user.taste(reagents) /obj/item/reagent_containers/create_reagents(max_vol, flags) . = ..() @@ -237,14 +240,14 @@ log_combat(thrown_by, M, "splashed", R) reagents.expose(target, TOUCH, splash_multiplier) reagents.expose(target_turf, TOUCH, (1 - splash_multiplier)) // 1 - splash_multiplier because it's what didn't hit the target - target_turf.add_liquid_from_reagents(reagents, reagent_multiplier = (1 - splash_multiplier)) // SKYRAT EDIT ADDITION - liquid spills (molotov buff) (huge) + target_turf.add_liquid_from_reagents(reagents, reagent_multiplier = (1 - splash_multiplier)) // NOVA EDIT ADDITION - liquid spills (molotov buff) (huge) else if(bartender_check(target) && thrown) visible_message(span_notice("[src] lands onto the [target.name] without spilling a single drop.")) return else - //SKYRAT EDIT CHANGE START - liquid spills on non-mobs + //NOVA EDIT CHANGE START - liquid spills on non-mobs if(target.can_liquid_spill_on_hit()) target.add_liquid_from_reagents(reagents, thrown_from = src, thrown_to = target) if(reagents.reagent_list.len && thrown_by) @@ -253,9 +256,9 @@ message_admins("[ADMIN_LOOKUPFLW(thrown_by)] splashed (thrown) [english_list(reagents.reagent_list)] on [target] in [ADMIN_VERBOSEJMP(target)].") else reagents.expose(target, TOUCH) - //SKYRAT EDIT END + //NOVA EDIT END visible_message("[src] spills its contents all over [target].") - //reagents.expose(target, TOUCH) //SKYRAT EDIT REMOVAL + //reagents.expose(target, TOUCH) //NOVA EDIT REMOVAL if(QDELETED(src)) return diff --git a/code/modules/reagents/reagent_containers/condiment.dm b/code/modules/reagents/reagent_containers/condiment.dm index 3a956d7968ece3..ebc224fb18fe6f 100644 --- a/code/modules/reagents/reagent_containers/condiment.dm +++ b/code/modules/reagents/reagent_containers/condiment.dm @@ -63,7 +63,7 @@ span_warning("[user] fed you from [src].")) log_combat(user, M, "fed", reagents.get_reagent_log_string()) - SEND_SIGNAL(M, COMSIG_GLASS_DRANK, src, user) // SKYRAT EDIT ADDITION - Hemophages can't casually drink what's not going to regenerate their blood + SEND_SIGNAL(M, COMSIG_GLASS_DRANK, src, user) // NOVA EDIT ADDITION - Hemophages can't casually drink what's not going to regenerate their blood reagents.trans_to(M, 10, transferred_by = user, methods = INGEST) playsound(M.loc,'sound/items/drink.ogg', rand(10,50), TRUE) return TRUE @@ -466,9 +466,12 @@ /// Handles reagents getting added to the condiment pack. /obj/item/reagent_containers/condiment/pack/proc/on_reagent_add(datum/reagents/reagents) SIGNAL_HANDLER - var/main_reagent = reagents.get_master_reagent_id() - if(main_reagent in possible_states) - var/list/temp_list = possible_states[main_reagent] + + var/datum/reagent/main_reagent = reagents.get_master_reagent() + + var/main_reagent_type = main_reagent?.type + if(main_reagent_type in possible_states) + var/list/temp_list = possible_states[main_reagent_type] icon_state = temp_list[1] desc = temp_list[3] else diff --git a/code/modules/reagents/reagent_containers/cups/_cup.dm b/code/modules/reagents/reagent_containers/cups/_cup.dm index 5caec9de68168c..c8aa790fa15c02 100644 --- a/code/modules/reagents/reagent_containers/cups/_cup.dm +++ b/code/modules/reagents/reagent_containers/cups/_cup.dm @@ -84,7 +84,7 @@ to_chat(user, span_notice("You swallow a gulp of [src].")) SEND_SIGNAL(src, COMSIG_GLASS_DRANK, target_mob, user) - SEND_SIGNAL(target_mob, COMSIG_GLASS_DRANK, src, user) // SKYRAT EDIT ADDITION - Hemophages can't casually drink what's not going to regenerate their blood + SEND_SIGNAL(target_mob, COMSIG_GLASS_DRANK, src, user) // NOVA EDIT ADDITION - Hemophages can't casually drink what's not going to regenerate their blood var/fraction = min(gulp_size/reagents.total_volume, 1) reagents.trans_to(target_mob, gulp_size, transferred_by = user, methods = INGEST) checkLiked(fraction, target_mob) @@ -125,7 +125,7 @@ return var/trans = reagents.trans_to(target, amount_per_transfer_from_this, transferred_by = user) - to_chat(user, span_notice("You transfer [round(trans, 0.01)] unit\s of the solution to [target].")) + to_chat(user, span_notice("You transfer [trans] unit\s of the solution to [target].")) else if(target.is_drainable()) //A dispenser. Transfer FROM it TO us. if(!target.reagents.total_volume) @@ -137,7 +137,7 @@ return var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transferred_by = user) - to_chat(user, span_notice("You fill [src] with [round(trans, 0.01)] unit\s of the contents of [target].")) + to_chat(user, span_notice("You fill [src] with [trans] unit\s of the contents of [target].")) target.update_appearance() @@ -158,7 +158,7 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transferred_by = user) - to_chat(user, span_notice("You fill [src] with [round(trans, 0.01)] unit\s of the contents of [target].")) + to_chat(user, span_notice("You fill [src] with [trans] unit\s of the contents of [target].")) target.update_appearance() return SECONDARY_ATTACK_CONTINUE_CHAIN @@ -168,34 +168,34 @@ if(hotness && reagents) reagents.expose_temperature(hotness) to_chat(user, span_notice("You heat [name] with [attacking_item]!")) - return + return TRUE //Cooling method if(istype(attacking_item, /obj/item/extinguisher)) var/obj/item/extinguisher/extinguisher = attacking_item if(extinguisher.safety) - return + return TRUE if (extinguisher.reagents.total_volume < 1) to_chat(user, span_warning("\The [extinguisher] is empty!")) - return + return TRUE var/cooling = (0 - reagents.chem_temp) * extinguisher.cooling_power * 2 reagents.expose_temperature(cooling) to_chat(user, span_notice("You cool the [name] with the [attacking_item]!")) playsound(loc, 'sound/effects/extinguish.ogg', 75, TRUE, -3) extinguisher.reagents.remove_all(1) - return + return TRUE if(istype(attacking_item, /obj/item/food/egg)) //breaking eggs var/obj/item/food/egg/attacking_egg = attacking_item if(!reagents) - return - if(reagents.total_volume >= reagents.maximum_volume) + return TRUE + if(reagents.holder_full()) to_chat(user, span_notice("[src] is full.")) else to_chat(user, span_notice("You break [attacking_egg] in [src].")) attacking_egg.reagents.trans_to(src, attacking_egg.reagents.total_volume, transferred_by = user) qdel(attacking_egg) - return + return TRUE return ..() @@ -219,7 +219,7 @@ /obj/item/reagent_containers/cup/beaker name = "beaker" - desc = "A beaker. It can hold up to 60 units." //SKYRAT EDIT: Used to say can hold up to 50 units. + desc = "A beaker. It can hold up to 60 units." //NOVA EDIT: Used to say can hold up to 50 units. icon = 'icons/obj/medical/chemical.dmi' icon_state = "beaker" inhand_icon_state = "beaker" @@ -228,8 +228,8 @@ worn_icon_state = "beaker" custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*5) fill_icon_thresholds = list(0, 1, 20, 40, 60, 80, 100) - volume = 60 //SKYRAT EDIT: Addition - possible_transfer_amounts = list(5,10,15,20,30,60) //SKYRAT EDIT: Addition + volume = 60 //NOVA EDIT: Addition + possible_transfer_amounts = list(5,10,15,20,30,60) //NOVA EDIT: Addition /obj/item/reagent_containers/cup/beaker/Initialize(mapload) . = ..() @@ -246,24 +246,24 @@ /obj/item/reagent_containers/cup/beaker/large name = "large beaker" - desc = "A large beaker. Can hold up to 120 units." //SKYRAT EDIT: Used to say Can hold up to 100 units. + desc = "A large beaker. Can hold up to 120 units." //NOVA EDIT: Used to say Can hold up to 100 units. icon_state = "beakerlarge" custom_materials = list(/datum/material/glass= SHEET_MATERIAL_AMOUNT*1.25) - volume = 120 //SKYRAT EDIT: Original value (100) + volume = 120 //NOVA EDIT: Original value (100) amount_per_transfer_from_this = 10 - //possible_transfer_amounts = list(5,10,15,20,25,30,50,100) //SKYRAT EDIT: Original Values - possible_transfer_amounts = list(5,10,15,20,30,40,60,120) //SKYRAT EDIT: New Values + //possible_transfer_amounts = list(5,10,15,20,25,30,50,100) //NOVA EDIT: Original Values + possible_transfer_amounts = list(5,10,15,20,30,40,60,120) //NOVA EDIT: New Values fill_icon_thresholds = list(0, 1, 20, 40, 60, 80, 100) /obj/item/reagent_containers/cup/beaker/plastic name = "x-large beaker" - desc = "An extra-large beaker. Can hold up to 150 units." //SKYRAT EDIT: Used to say Can hold up to 120 units + desc = "An extra-large beaker. Can hold up to 150 units." //NOVA EDIT: Used to say Can hold up to 120 units icon_state = "beakerwhite" custom_materials = list(/datum/material/glass=SHEET_MATERIAL_AMOUNT*1.25, /datum/material/plastic=SHEET_MATERIAL_AMOUNT * 1.5) - volume = 150 //SKYRAT EDIT: Original Value (120) + volume = 150 //NOVA EDIT: Original Value (120) amount_per_transfer_from_this = 10 - //possible_transfer_amounts = list(5,10,15,20,25,30,60,120) //SKYRAT EDIT: Original values - possible_transfer_amounts = list(5,10,15,20,25,30,50,75,150) //SKYRAT EDIT: New Values + //possible_transfer_amounts = list(5,10,15,20,25,30,60,120) //NOVA EDIT: Original values + possible_transfer_amounts = list(5,10,15,20,25,30,50,75,150) //NOVA EDIT: New Values fill_icon_thresholds = list(0, 1, 10, 20, 40, 60, 80, 100) /obj/item/reagent_containers/cup/beaker/meta @@ -348,23 +348,20 @@ /obj/item/reagent_containers/cup/bucket name = "bucket" - desc = "It's a bucket. You can squeeze a mop's contents into it by using right-click." //SKYRAT EDIT CHANGE - ORIGINAL: desc = "It's a bucket." + desc = "It's a bucket. You can squeeze a mop's contents into it by using right-click." //NOVA EDIT CHANGE - ORIGINAL: desc = "It's a bucket." icon = 'icons/obj/service/janitor.dmi' worn_icon = 'icons/mob/clothing/head/utility.dmi' icon_state = "bucket" inhand_icon_state = "bucket" lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' - greyscale_colors = "#0085e5" //matches 1:1 with the original sprite color before gag-ification. - greyscale_config = /datum/greyscale_config/buckets - greyscale_config_worn = /datum/greyscale_config/buckets_worn - greyscale_config_inhand_left = /datum/greyscale_config/buckets_inhands_left - greyscale_config_inhand_right = /datum/greyscale_config/buckets_inhands_right + fill_icon_state = "bucket" + fill_icon_thresholds = list(50, 90) custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT * 2) w_class = WEIGHT_CLASS_NORMAL amount_per_transfer_from_this = 20 - possible_transfer_amounts = list(5,10,15,20,25,30,50,100) //SKYRAT EDIT CHANGE - volume = 100 //SKYRAT EDIT CHANGE + possible_transfer_amounts = list(5,10,15,20,25,30,50,100) //NOVA EDIT CHANGE + volume = 100 //NOVA EDIT CHANGE flags_inv = HIDEHAIR slot_flags = ITEM_SLOT_HEAD resistance_flags = NONE @@ -385,20 +382,10 @@ fire = 75 acid = 50 -/obj/item/reagent_containers/cup/bucket/Initialize(mapload, vol) - if(greyscale_colors == initial(greyscale_colors)) - set_greyscale(pick(list("#0085e5", COLOR_OFF_WHITE, COLOR_ORANGE_BROWN, COLOR_SERVICE_LIME, COLOR_MOSTLY_PURE_ORANGE, COLOR_FADED_PINK, COLOR_RED, COLOR_YELLOW, COLOR_VIOLET, COLOR_WEBSAFE_DARK_GRAY))) - return ..() - /obj/item/reagent_containers/cup/bucket/wooden name = "wooden bucket" icon_state = "woodbucket" inhand_icon_state = "woodbucket" - greyscale_colors = null - greyscale_config = null - greyscale_config_worn = null - greyscale_config_inhand_left = null - greyscale_config_inhand_right = null custom_materials = list(/datum/material/wood = SHEET_MATERIAL_AMOUNT * 2) resistance_flags = FLAMMABLE armor_type = /datum/armor/bucket_wooden @@ -407,7 +394,7 @@ melee = 10 acid = 50 -// SKYRAT EDIT CHANGE START - LIQUIDS +// NOVA EDIT CHANGE START - LIQUIDS /* Original /obj/item/reagent_containers/cup/bucket/attackby(obj/O, mob/user, params) if(istype(O, /obj/item/mop)) @@ -446,7 +433,7 @@ var/obj/item/bot_assembly/cleanbot/new_cleanbot_ass = new(null, src) user.put_in_hands(new_cleanbot_ass) return -// SKYRAT EDIT CHANGE END - LIQUIDS +// NOVA EDIT CHANGE END - LIQUIDS /obj/item/reagent_containers/cup/bucket/equipped(mob/user, slot) . = ..() @@ -536,6 +523,11 @@ to_chat(user, span_warning("You can't grind this!")) /obj/item/reagent_containers/cup/mortar/proc/grind_item(obj/item/item, mob/living/carbon/human/user) + if(item.flags_1 & HOLOGRAM_1) + to_chat(user, span_notice("You try to grind [item], but it fades away!")) + qdel(item) + return + if(!item.grind(reagents, user)) if(isstack(item)) to_chat(usr, span_notice("[src] attempts to grind as many pieces of [item] as possible.")) @@ -547,6 +539,11 @@ QDEL_NULL(item) /obj/item/reagent_containers/cup/mortar/proc/juice_item(obj/item/item, mob/living/carbon/human/user) + if(item.flags_1 & HOLOGRAM_1) + to_chat(user, span_notice("You try to juice [item], but it fades away!")) + qdel(item) + return + if(!item.juice(reagents, user)) to_chat(user, span_notice("You fail to juice [item].")) return diff --git a/code/modules/reagents/reagent_containers/cups/drinkingglass.dm b/code/modules/reagents/reagent_containers/cups/drinkingglass.dm index c32c83effa96b6..8745e61cd92369 100644 --- a/code/modules/reagents/reagent_containers/cups/drinkingglass.dm +++ b/code/modules/reagents/reagent_containers/cups/drinkingglass.dm @@ -34,7 +34,7 @@ /obj/item/reagent_containers/cup/glass/drinkingglass/on_reagent_change(datum/reagents/holder, ...) . = ..() if(!length(reagents.reagent_list)) - renamedByPlayer = FALSE //so new drinks can rename the glass + REMOVE_TRAIT(src, TRAIT_WAS_RENAMED, PEN_LABEL_TRAIT) //so new drinks can rename the glass // Having our icon state change removes fill thresholds /obj/item/reagent_containers/cup/glass/drinkingglass/on_cup_change(datum/glass_style/style) @@ -68,13 +68,13 @@ custom_price = PAYCHECK_CREW * 0.4 /obj/item/reagent_containers/cup/glass/drinkingglass/shotglass/update_name(updates) - if(renamedByPlayer) + if(HAS_TRAIT(src, TRAIT_WAS_RENAMED)) return . = ..() name = "[length(reagents.reagent_list) ? "filled " : ""]shot glass" /obj/item/reagent_containers/cup/glass/drinkingglass/shotglass/update_desc(updates) - if(renamedByPlayer) + if(HAS_TRAIT(src, TRAIT_WAS_RENAMED)) return . = ..() if(length(reagents.reagent_list)) @@ -101,6 +101,10 @@ 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) + /obj/item/reagent_containers/cup/glass/drinkingglass/filled/half_full name = "half full glass of water" desc = "It's a glass of water. It seems half full. Or is it half empty? You're pretty sure it's full of shit." diff --git a/code/modules/reagents/reagent_containers/cups/drinks.dm b/code/modules/reagents/reagent_containers/cups/drinks.dm index 88b7d5baabfe3c..580d98d0387151 100644 --- a/code/modules/reagents/reagent_containers/cups/drinks.dm +++ b/code/modules/reagents/reagent_containers/cups/drinks.dm @@ -15,7 +15,8 @@ /obj/item/reagent_containers/cup/glass/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum, do_splash = TRUE) . = ..() if(!.) //if the bottle wasn't caught - smash(hit_atom, throwingdatum?.thrower, TRUE) + var/mob/thrower = throwingdatum?.get_thrower() + smash(hit_atom, thrower, TRUE) /obj/item/reagent_containers/cup/glass/proc/smash(atom/target, mob/thrower, ranged = FALSE, break_top = FALSE) if(!isGlass) @@ -51,7 +52,7 @@ custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT) has_variable_transfer_amount = FALSE volume = 5 - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY spillable = TRUE resistance_flags = FIRE_PROOF isGlass = FALSE @@ -144,7 +145,7 @@ /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." + desc = "Either Symphionia'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) /obj/item/reagent_containers/cup/glass/mug // parent type is literally just so empty mug sprites are a thing @@ -176,7 +177,7 @@ custom_price = PAYCHECK_CREW * 1.2 /obj/item/reagent_containers/cup/glass/mug/nanotrasen - name = "\improper Nanotrasen mug" + name = "\improper Symphionia mug" desc = "A mug to display your corporate pride." icon_state = "mug_nt_empty" base_icon_state = "mug_nt" @@ -314,9 +315,9 @@ return if(prob(flip_chance)) // landed upright src.visible_message(span_notice("[src] lands upright!")) - if(throwingdatum.thrower) - var/mob/living/living_thrower = throwingdatum.thrower - living_thrower.add_mood_event("bottle_flip", /datum/mood_event/bottle_flip) + var/mob/living/thrower = throwingdatum?.get_thrower() + if(thrower) + thrower.add_mood_event("bottle_flip", /datum/mood_event/bottle_flip) else // landed on it's side animate(src, transform = matrix(prob(50)? 90 : -90, MATRIX_ROTATE), time = 3, loop = 0) @@ -438,8 +439,8 @@ /obj/item/reagent_containers/cup/glass/shaker/Initialize(mapload) . = ..() if(prob(10)) - name = "\improper Nanotrasen 20th Anniversary Shaker" - desc += " It has an emblazoned Nanotrasen logo on it." + name = "\improper Symphionia 20th Anniversary Shaker" + desc += " It has an emblazoned Symphionia logo on it." icon_state = "shaker_n" /obj/item/reagent_containers/cup/glass/flask diff --git a/code/modules/reagents/reagent_containers/cups/glassbottle.dm b/code/modules/reagents/reagent_containers/cups/glassbottle.dm index e204c6803fb899..f23b5186c300f3 100644 --- a/code/modules/reagents/reagent_containers/cups/glassbottle.dm +++ b/code/modules/reagents/reagent_containers/cups/glassbottle.dm @@ -379,7 +379,7 @@ LAZYSET(located_wine.data, "vintage", wine_info) /obj/item/reagent_containers/cup/glass/bottle/wine/proc/generate_vintage() - return "[CURRENT_STATION_YEAR] Nanotrasen Light Red" + return "[CURRENT_STATION_YEAR] Symphionia Light Red" /obj/item/reagent_containers/cup/glass/bottle/wine/unlabeled name = "unlabeled wine bottle" @@ -400,8 +400,8 @@ ) var/origin = pick( "Local", - "Nanotrasen", - "Syndicate", + "Symphionia", + "Symphionia", ) return "[year] [origin] [type]" @@ -428,7 +428,7 @@ if("A&A") fullname = "Ash and Asher" if("Generic") - fullname = "Nanotrasen Cheap Imitations" + fullname = "Symphionia Cheap Imitations" var/removals = list( "\[REDACTED\]", "\[EXPLETIVE DELETED\]", @@ -479,7 +479,7 @@ /obj/item/reagent_containers/cup/glass/bottle/amaretto name = "Luini Amaretto" - desc = "A gentle and syrup like drink, tastes of almonds and apricots" + desc = "A gentle, syrupy drink that tastes of almonds and apricots." icon_state = "disaronno" list_reagents = list(/datum/reagent/consumable/ethanol/amaretto = 100) @@ -601,9 +601,11 @@ if(!do_after(user, 2 SECONDS, src)) //takes longer because you are supposed to take the foil off the bottle first return - ///The bonus to success chance that the user gets for being a command role - var/command_bonus = user.mind?.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND ? 20 : 0 - ///The bonus to success chance that the user gets for having a sabrage skillchip installed/otherwise having the trait through other means + //The bonus to success chance that the user gets for being a command role + var/obj/item/organ/internal/liver/liver = user.get_organ_slot(ORGAN_SLOT_LIVER) + var/command_bonus = (!isnull(liver) && HAS_TRAIT(liver, TRAIT_ROYAL_METABOLISM)) ? 20 : 0 + + //The bonus to success chance that the user gets for having a sabrage skillchip installed/otherwise having the trait through other means var/skillchip_bonus = HAS_TRAIT(user, TRAIT_SABRAGE_PRO) ? 35 : 0 //calculate success chance. example: captain's sabre - 15 force = 75% chance var/sabrage_chance = (attacking_item.force * sabrage_success_percentile) + command_bonus + skillchip_bonus @@ -803,10 +805,10 @@ if(istype(contained_reagent, accelerant_type)) firestarter = 1 break + ..() if(firestarter && active) target.fire_act() new /obj/effect/hotspot(get_turf(target)) - ..() /obj/item/reagent_containers/cup/glass/bottle/molotov/attackby(obj/item/I, mob/user, params) if(I.get_temperature() && !active) diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm index ac8d0af0d1c6b9..beb6f3e6314cde 100644 --- a/code/modules/reagents/reagent_containers/dropper.dm +++ b/code/modules/reagents/reagent_containers/dropper.dm @@ -46,7 +46,7 @@ target.visible_message(span_danger("[user] tries to squirt something into [target]'s eyes, but fails!"), \ span_userdanger("[user] tries to squirt something into your eyes, but fails!")) - to_chat(user, span_notice("You transfer [round(trans, 0.01)] unit\s of the solution.")) + to_chat(user, span_notice("You transfer [trans] unit\s of the solution.")) update_appearance() return else if(isalien(target)) //hiss-hiss has no eyes! @@ -66,7 +66,7 @@ log_combat(user, M, "squirted", R) trans = src.reagents.trans_to(target, amount_per_transfer_from_this, transferred_by = user) - to_chat(user, span_notice("You transfer [round(trans, 0.01)] unit\s of the solution.")) + to_chat(user, span_notice("You transfer [trans] unit\s of the solution.")) update_appearance() target.update_appearance() @@ -82,7 +82,7 @@ var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transferred_by = user) - to_chat(user, span_notice("You fill [src] with [round(trans, 0.01)] unit\s of the solution.")) + to_chat(user, span_notice("You fill [src] with [trans] unit\s of the solution.")) update_appearance() target.update_appearance() diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 63648375045a68..2622d5c4bc3d56 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -17,6 +17,8 @@ var/infinite = FALSE /// If TRUE, won't play a noise when injecting. var/stealthy = FALSE + /// If TRUE, the hypospray will be permanently unusable. + var/used_up = FALSE /obj/item/reagent_containers/hypospray/attack_paw(mob/user, list/modifiers) return attack_hand(user, modifiers) @@ -26,8 +28,8 @@ ///Handles all injection checks, injection and logging. /obj/item/reagent_containers/hypospray/proc/inject(mob/living/affected_mob, mob/user) - if(!reagents.total_volume) - to_chat(user, span_warning("[src] is empty!")) + if(used_up) + to_chat(user, span_warning("[src] tip is broken and is now unusable!")) return FALSE if(!iscarbon(affected_mob)) return FALSE @@ -39,7 +41,7 @@ var/contained = english_list(injected) log_combat(user, affected_mob, "attempted to inject", src, "([contained])") - 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. + if(!used_up && (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) @@ -61,6 +63,8 @@ /obj/item/reagent_containers/hypospray/cmo + volume = 60 + possible_transfer_amounts = list(1,3,5) list_reagents = list(/datum/reagent/medicine/omnizine = 30) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF @@ -132,8 +136,8 @@ /obj/item/reagent_containers/hypospray/medipen/inject(mob/living/affected_mob, mob/user) . = ..() - if(.) - reagents.maximum_volume = 0 //Makes them useless afterwards + if(. && !reagents.total_volume) + used_up = TRUE //Makes them useless afterwards reagents.flags = NONE update_appearance() @@ -275,7 +279,7 @@ /obj/item/reagent_containers/hypospray/medipen/survival/luxury name = "luxury medipen" - desc = "Cutting edge bluespace technology allowed Nanotrasen to compact 60u of volume into a single medipen. Contains rare and powerful chemicals used to aid in exploration of very hard enviroments. WARNING: DO NOT MIX WITH EPINEPHRINE OR ATROPINE." + desc = "Cutting edge bluespace technology allowed Symphionia to compact 60u of volume into a single medipen. Contains rare and powerful chemicals used to aid in exploration of very hard enviroments. WARNING: DO NOT MIX WITH EPINEPHRINE OR ATROPINE." icon_state = "luxpen" inhand_icon_state = "atropen" base_icon_state = "luxpen" diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 7c7f97f0cc7fc0..fd2ab0eb4931aa 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -47,13 +47,14 @@ return on_consumption(M, user) ///Runs the consumption code, can be overriden for special effects -/obj/item/reagent_containers/pill/proc/on_consumption(mob/M, mob/user) +/obj/item/reagent_containers/pill/proc/on_consumption(mob/consumer, mob/giver) if(icon_state == "pill4" && prob(5)) //you take the red pill - you stay in Wonderland, and I show you how deep the rabbit hole goes - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), M, span_notice("[pick(strings(REDPILL_FILE, "redpill_questions"))]")), 50) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), consumer, span_notice("[pick(strings(REDPILL_FILE, "redpill_questions"))]")), 50) if(apply_type == INGEST) - SEND_SIGNAL(src, COMSIG_PILL_CONSUMED, eater = M, feeder = user) + SEND_SIGNAL(consumer, COMSIG_LIVING_PILL_CONSUMED, src, giver) + SEND_SIGNAL(src, COMSIG_PILL_CONSUMED, eater = consumer, feeder = giver) if(reagents.total_volume) - reagents.trans_to(M, reagents.total_volume, transferred_by = user, methods = apply_type) + reagents.trans_to(consumer, reagents.total_volume, transferred_by = giver, methods = apply_type) qdel(src) return TRUE diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 8241331d7b0793..14b7abaaa9afcb 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -74,10 +74,10 @@ . = ..() if(. && atom_integrity > 0) if(tank_volume && (damage_flag == BULLET || damage_flag == LASER)) - //SKYRAT EDIT CHANGE + //NOVA EDIT CHANGE var/guaranteed_violent = (damage_flag == BULLET || damage_flag == LASER) boom(damage_type, guaranteed_violent) - //SKYRAT EDIT END + //NOVA EDIT END /obj/structure/reagent_dispensers/attackby(obj/item/W, mob/user, params) if(W.is_refillable()) @@ -159,7 +159,7 @@ * This is most dangerous for fuel tanks, which will explosion(). * Other dispensers will scatter their contents within range. */ -/obj/structure/reagent_dispensers/proc/boom(damage_type = BRUTE, guaranteed_violent = FALSE) //SKYRAT EDIT CHANGE +/obj/structure/reagent_dispensers/proc/boom(damage_type = BRUTE, guaranteed_violent = FALSE) //NOVA EDIT CHANGE if(QDELETED(src)) return // little bit of sanity sauce before we wreck ourselves somehow var/datum/reagent/fuel/volatiles = reagents.has_reagent(/datum/reagent/fuel) @@ -195,7 +195,7 @@ qdel(src) /obj/structure/reagent_dispensers/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(!disassembled) boom() else @@ -225,7 +225,7 @@ balloon_alert(user, "[leaking ? "opened" : "closed"] [src]'s tap") user.log_message("[leaking ? "opened" : "closed"] [src].", LOG_GAME) tank_leak() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/reagent_dispensers/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) . = ..() @@ -243,7 +243,7 @@ icon_state = "water_high" //I was gonna clean my room... tank_volume = 3000 -/obj/structure/reagent_dispensers/foamtank//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/structure/reagent_dispensers/foamtank//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "firefighting foam tank" desc = "A tank full of firefighting foam." icon_state = "foam" @@ -251,7 +251,7 @@ tank_volume = 500 openable = TRUE -/obj/structure/reagent_dispensers/fueltank//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/structure/reagent_dispensers/fueltank//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "fuel tank" desc = "A tank full of industrial welding fuel. Do not consume." icon_state = "fuel" @@ -265,33 +265,33 @@ if(check_holidays(APRIL_FOOLS)) icon_state = "fuel_fools" -/obj/structure/reagent_dispensers/fueltank/boom(damage_type = BRUTE, guaranteed_violent = FALSE) //SKYRAT EDIT CHANGE +/obj/structure/reagent_dispensers/fueltank/boom(damage_type = BRUTE, guaranteed_violent = FALSE) //NOVA EDIT CHANGE if(damage_type == BURN || guaranteed_violent) explosion(src, heavy_impact_range = 1, light_impact_range = 5, flame_range = 5) qdel(src) else . = ..() - //SKYRAT EDIT END + //NOVA EDIT END /obj/structure/reagent_dispensers/fueltank/blob_act(obj/structure/blob/B) - boom(guaranteed_violent = TRUE) //SKYRAT EDIT CHANGE + boom(guaranteed_violent = TRUE) //NOVA EDIT CHANGE /obj/structure/reagent_dispensers/fueltank/ex_act() - boom(guaranteed_violent = TRUE) //SKYRAT EDIT CHANGE + boom(guaranteed_violent = TRUE) //NOVA EDIT CHANGE return TRUE /obj/structure/reagent_dispensers/fueltank/fire_act(exposed_temperature, exposed_volume) - boom(guaranteed_violent = TRUE) //SKYRAT EDIT CHANGE + boom(guaranteed_violent = TRUE) //NOVA EDIT CHANGE /obj/structure/reagent_dispensers/fueltank/zap_act(power, zap_flags) . = ..() //extend the zap if(ZAP_OBJ_DAMAGE & zap_flags) - boom(guaranteed_violent = TRUE) //SKYRAT EDIT CHANGE + boom(guaranteed_violent = TRUE) //NOVA EDIT CHANGE /obj/structure/reagent_dispensers/fueltank/bullet_act(obj/projectile/hitting_projectile) if(hitting_projectile.damage > 0 && ((hitting_projectile.damage_type == BURN) || (hitting_projectile.damage_type == BRUTE))) log_bomber(hitting_projectile.firer, "detonated a", src, "via projectile") - boom(guaranteed_violent = TRUE) // SKYRAT EDIT CHANGE + boom(guaranteed_violent = TRUE) // NOVA EDIT CHANGE return hitting_projectile.on_hit(src, 0) // we override parent like this because otherwise we won't actually properly log the fact that a projectile caused this welding tank to explode. @@ -315,7 +315,7 @@ else user.visible_message(span_danger("[user] catastrophically fails at refilling [user.p_their()] [I.name]!"), span_userdanger("That was stupid of you.")) log_bomber(user, "detonated a", src, "via welding tool") - boom(guaranteed_violent = TRUE) //SKYRAT EDIT CHANGE + boom(guaranteed_violent = TRUE) //NOVA EDIT CHANGE return return ..() @@ -326,13 +326,13 @@ icon_state = "fuel_high" tank_volume = 5000 -/obj/structure/reagent_dispensers/fueltank/large/boom(damage_type = BRUTE, guaranteed_violent = FALSE) //SKYRAT EDIT CHANGE +/obj/structure/reagent_dispensers/fueltank/large/boom(damage_type = BRUTE, guaranteed_violent = FALSE) //NOVA EDIT CHANGE if(damage_type == BURN || guaranteed_violent) explosion(src, devastation_range = 1, heavy_impact_range = 2, light_impact_range = 7, flame_range = 12) qdel(src) else . = ..() - //SKYRAT EDIT END + //NOVA EDIT END /// Wall mounted dispeners, like pepper spray or virus food. Not a normal tank, and shouldn't be able to be turned into a plumbed stationary one. /obj/structure/reagent_dispensers/wall @@ -354,7 +354,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/reagent_dispensers/wall/peppertank, 3 desc = "IT'S PEPPER TIME, BITCH!" find_and_hang_on_wall() -/obj/structure/reagent_dispensers/water_cooler//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/structure/reagent_dispensers/water_cooler//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "liquid cooler" desc = "A machine that dispenses liquid to drink." icon = 'icons/obj/machines/vending.dmi' @@ -424,7 +424,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/reagent_dispensers/wall/virusfood, 30 anchored = TRUE reagent_id = /datum/reagent/consumable/nutraslop -/obj/structure/reagent_dispensers/plumbed//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/structure/reagent_dispensers/plumbed//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "stationary water tank" anchored = TRUE icon_state = "water_stationary" @@ -438,7 +438,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/reagent_dispensers/wall/virusfood, 30 /obj/structure/reagent_dispensers/plumbed/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/reagent_dispensers/plumbed/storage name = "stationary storage tank" diff --git a/code/modules/recycling/conveyor.dm b/code/modules/recycling/conveyor.dm index cb1a0800c513aa..14108f22bd93d5 100644 --- a/code/modules/recycling/conveyor.dm +++ b/code/modules/recycling/conveyor.dm @@ -248,7 +248,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) /obj/machinery/conveyor/proc/conveyable_exit(datum/source, atom/convayable, direction) SIGNAL_HANDLER var/has_conveyor = neighbors["[direction]"] - if(!has_conveyor || !isturf(convayable.loc)) //If you've entered something on us, stop moving + if(convayable.z != z || !has_conveyor || !isturf(convayable.loc)) //If you've entered something on us, stop moving SSmove_manager.stop_looping(convayable, SSconveyors) /obj/machinery/conveyor/proc/start_conveying(atom/movable/moving) diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index cfdecfcd73c345..cc0b100a1c0f02 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -3,7 +3,7 @@ #define SEND_PRESSURE (0.05*ONE_ATMOSPHERE) /obj/machinery/disposal - icon = 'icons/obj/pipes_n_cables/disposal.dmi' //SKYRAT EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE + icon = 'icons/obj/pipes_n_cables/disposal.dmi' //NOVA EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE density = TRUE armor_type = /datum/armor/machinery_disposal max_integrity = 200 @@ -278,7 +278,7 @@ /obj/machinery/disposal/deconstruct(disassembled = TRUE) var/turf/T = loc - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(stored) var/obj/structure/disposalconstruct/construct = stored stored = null @@ -386,7 +386,8 @@ /obj/machinery/disposal/bin/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) if(isitem(AM) && AM.CanEnterDisposals()) - if((throwingdatum.thrower && HAS_TRAIT(throwingdatum.thrower, TRAIT_THROWINGARM)) || prob(75)) + var/mob/thrower = throwingdatum?.get_thrower() + if((thrower && HAS_TRAIT(thrower, TRAIT_THROWINGARM)) || prob(75)) AM.forceMove(src) visible_message(span_notice("[AM] lands in [src].")) update_appearance() @@ -402,13 +403,6 @@ pressure_charging = TRUE update_appearance() -/obj/machinery/disposal/bin/update_appearance(updates) - . = ..() - if((machine_stat & (BROKEN|NOPOWER)) || panel_open) - luminosity = 0 - return - luminosity = 1 - /obj/machinery/disposal/bin/update_overlays() . = ..() if(machine_stat & BROKEN) diff --git a/code/modules/recycling/disposal/eject.dm b/code/modules/recycling/disposal/eject.dm index febd4f5d604e04..523f034703c101 100644 --- a/code/modules/recycling/disposal/eject.dm +++ b/code/modules/recycling/disposal/eject.dm @@ -2,11 +2,33 @@ * General proc used to expel a holder's contents through src (for bins holder is also the src). */ /obj/proc/pipe_eject(obj/holder, direction, throw_em = TRUE, turf/target, throw_range = 5, throw_speed = 1) - var/turf/src_T = get_turf(src) - for(var/A in holder) - var/atom/movable/AM = A - AM.forceMove(src_T) - SEND_SIGNAL(AM, COMSIG_MOVABLE_PIPE_EJECTING, direction) - if(throw_em && !QDELETED(AM)) - var/turf/T = target || get_offset_target_turf(loc, rand(5)-rand(5), rand(5)-rand(5)) - AM.throw_at(T, throw_range, throw_speed) + var/turf/origin_turf = get_turf(src) + var/turf/target_turf + if(isnull(target)) // done up here as a safety + target_turf = get_offset_target_turf(loc, rand(5) - rand(5), rand(5) - rand(5)) + else + target_turf = target + + if(QDELETED(origin_turf)) + stack_trace("pipe_eject() attempted to operate on a qdeleted turf! In order to avoid sending things to nullspace, we are going to send everything directly to the target turf instead.") + origin_turf = target_turf + + var/list/contents_to_eject = holder.contents + var/list/contents_to_throw = list() + + for(var/atom/movable/thing in contents_to_eject) + thing.forceMove(origin_turf) + SEND_SIGNAL(thing, COMSIG_MOVABLE_PIPE_EJECTING, direction) + if(QDELETED(thing)) + continue + + contents_to_throw += thing + + if(!throw_em) + return + + for(var/atom/movable/throwable as anything in contents_to_throw) + if(isnull(target)) // we want the thrown things to be spread out a bit if we weren't given a target + target_turf = get_offset_target_turf(loc, rand(5) - rand(5), rand(5) - rand(5)) + + throwable.throw_at(target_turf, throw_range, throw_speed) diff --git a/code/modules/recycling/disposal/holder.dm b/code/modules/recycling/disposal/holder.dm index cf9ae8f6b4e101..2d964d0f8fb3fd 100644 --- a/code/modules/recycling/disposal/holder.dm +++ b/code/modules/recycling/disposal/holder.dm @@ -42,7 +42,7 @@ if(M.client) M.reset_perspective(src) hasmob = TRUE - RegisterSignal(M, COMSIG_LIVING_RESIST, PROC_REF(struggle_prep), M) + RegisterSignal(M, COMSIG_LIVING_RESIST, PROC_REF(struggle_prep)) //Checks 1 contents level deep. This means that players can be sent through disposals mail... //...but it should require a second person to open the package. (i.e. person inside a wrapped locker) @@ -179,12 +179,12 @@ /// Merge two holder objects, used when a holder meets a stuck holder /obj/structure/disposalholder/proc/merge(obj/structure/disposalholder/other) - for(var/A in other) - var/atom/movable/AM = A - AM.forceMove(src) // move everything in other holder to this one - if(ismob(AM)) - var/mob/M = AM - M.reset_perspective(src) // if a client mob, update eye to follow this holder + for(var/atom/movable/movable as anything in other) + movable.forceMove(src) // move everything in other holder to this one + if(ismob(movable)) + var/mob/mob = movable + mob.reset_perspective(src) // if a client mob, update eye to follow this holder + RegisterSignal(mob, COMSIG_LIVING_RESIST, PROC_REF(struggle_prep)) hasmob = TRUE if(destinationTag == 0 && other.destinationTag != 0) destinationTag = other.destinationTag diff --git a/code/modules/recycling/disposal/outlet.dm b/code/modules/recycling/disposal/outlet.dm index 4327567fb1746b..4fa9f1e0aab15a 100644 --- a/code/modules/recycling/disposal/outlet.dm +++ b/code/modules/recycling/disposal/outlet.dm @@ -47,6 +47,11 @@ /obj/structure/disposaloutlet/Destroy() if(trunk) + // preemptively expel the contents from the trunk + // in case the outlet is deleted before expel_holder could be called. + var/obj/structure/disposalholder/holder = locate() in trunk + if(holder) + trunk.expel(holder) trunk.linked = null trunk = null QDEL_NULL(stored) @@ -60,15 +65,15 @@ if((start_eject + 30) < world.time) start_eject = world.time playsound(src, 'sound/machines/warning-buzzer.ogg', 50, FALSE, FALSE) - addtimer(CALLBACK(src, PROC_REF(expel_holder), H, TRUE), 20) + addtimer(CALLBACK(src, PROC_REF(expel_holder), H, TRUE), 2 SECONDS) else - addtimer(CALLBACK(src, PROC_REF(expel_holder), H), 20) + addtimer(CALLBACK(src, PROC_REF(expel_holder), H), 2 SECONDS) /obj/structure/disposaloutlet/proc/expel_holder(obj/structure/disposalholder/H, playsound=FALSE) if(playsound) playsound(src, 'sound/machines/hiss.ogg', 50, FALSE, FALSE) - if(!H) + if(QDELETED(H)) return pipe_eject(H, dir, TRUE, target, eject_range, eject_speed) diff --git a/code/modules/recycling/disposal/pipe.dm b/code/modules/recycling/disposal/pipe.dm index 30573746f5e2c4..69519874cd2cad 100644 --- a/code/modules/recycling/disposal/pipe.dm +++ b/code/modules/recycling/disposal/pipe.dm @@ -171,7 +171,7 @@ // called when pipe is cut with welder /obj/structure/disposalpipe/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(disassembled) if(spawn_pipe) var/obj/structure/disposalconstruct/construct = stored diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 4f4b11dfb9c2d3..785fab7309782d 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -258,7 +258,7 @@ /obj/item/dest_tagger name = "destination tagger" desc = "Used to set the destination of properly wrapped packages." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tool.dmi' icon_state = "cargo tagger" worn_icon_state = "cargotagger" var/currTag = 0 //Destinations are stored in code\globalvars\lists\flavor_misc.dm @@ -267,7 +267,7 @@ inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT /obj/item/dest_tagger/borg @@ -325,7 +325,7 @@ /obj/item/sales_tagger name = "sales tagger" desc = "A scanner that lets you tag wrapped items for sale, splitting the profit between you and cargo." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/scanner.dmi' icon_state = "sales tagger" worn_icon_state = "salestagger" inhand_icon_state = "electronic" diff --git a/code/modules/religion/burdened/burdened_trauma.dm b/code/modules/religion/burdened/burdened_trauma.dm index b6a1052dab4a60..51e763dbcb5707 100644 --- a/code/modules/religion/burdened/burdened_trauma.dm +++ b/code/modules/religion/burdened/burdened_trauma.dm @@ -38,7 +38,7 @@ COMSIG_CARBON_LOSE_MUTATION, COMSIG_CARBON_GAIN_TRAUMA, COMSIG_CARBON_LOSE_TRAUMA, - )) + )) return ..() /** @@ -119,24 +119,7 @@ return INVOKE_ASYNC(knower, TYPE_PROC_REF(/mob/living/carbon/human, slow_psykerize)) -/// Signal to decrease burden_level (see update_burden proc) if an organ is added -/datum/brain_trauma/special/burdened/proc/organ_added_burden(mob/burdened, obj/item/organ/new_organ, special) - SIGNAL_HANDLER - - if(special) //aheals - return - - if(istype(new_organ, /obj/item/organ/internal/eyes)) - var/obj/item/organ/internal/eyes/new_eyes = new_organ - if(new_eyes.tint < TINT_BLIND) //unless you added unworking eyes (flashlight eyes), this is removing burden - update_burden(FALSE) - return - else if(istype(new_organ, /obj/item/organ/internal/appendix)) - return - - update_burden(increase = FALSE)//working organ - -/datum/brain_trauma/special/burdened/proc/is_burdensome_to_lose_organ(mob/burdened, obj/item/organ/old_organ, special) +/datum/brain_trauma/special/burdened/proc/is_burdensome_organ(mob/burdened, obj/item/organ/organ, special) if(special) //aheals return if(!ishuman(burdened)) @@ -168,20 +151,28 @@ if(!burdened_species.mutantliver) critical_slots -= ORGAN_SLOT_LIVER - if(!(old_organ.slot in critical_slots)) + if(!(organ.slot in critical_slots)) return FALSE - else if(istype(old_organ, /obj/item/organ/internal/eyes)) - var/obj/item/organ/internal/eyes/old_eyes = old_organ - if(old_eyes.tint < TINT_BLIND) //unless you were already blinded by them (flashlight eyes), this is adding burden! + else if(istype(organ, /obj/item/organ/internal/eyes)) + var/obj/item/organ/internal/eyes/eyes = organ + if(eyes.tint < TINT_BLIND) //unless you were already blinded by them (flashlight eyes), this is adding burden! return TRUE return FALSE return TRUE +/// Signal to decrease burden_level (see update_burden proc) if an organ is added +/datum/brain_trauma/special/burdened/proc/organ_added_burden(mob/burdened, obj/item/organ/new_organ, special) + SIGNAL_HANDLER + + if(is_burdensome_organ(burdened, new_organ, special)) + update_burden(increase = FALSE)//working organ + /// Signal to increase burden_level (see update_burden proc) if an organ is removed /datum/brain_trauma/special/burdened/proc/organ_removed_burden(mob/burdened, obj/item/organ/old_organ, special) SIGNAL_HANDLER - update_burden(increase = TRUE)//lost organ + if(is_burdensome_organ(burdened, old_organ, special)) + update_burden(increase = TRUE) //lost organ /// Signal to decrease burden_level (see update_burden proc) if a limb is added /datum/brain_trauma/special/burdened/proc/limbs_added_burden(datum/source, obj/item/bodypart/new_limb, special) @@ -192,7 +183,7 @@ update_burden(increase = FALSE) /// Signal to increase burden_level (see update_burden proc) if a limb is removed -/datum/brain_trauma/special/burdened/proc/limbs_removed_burden(datum/source, obj/item/bodypart/old_limb, special) +/datum/brain_trauma/special/burdened/proc/limbs_removed_burden(datum/source, obj/item/bodypart/old_limb, special, dismembered) SIGNAL_HANDLER if(special) //something we don't wanna consider, like instaswapping limbs diff --git a/code/modules/religion/burdened/psyker.dm b/code/modules/religion/burdened/psyker.dm index e6105195798c1e..f43e33aa25a9a0 100644 --- a/code/modules/religion/burdened/psyker.dm +++ b/code/modules/religion/burdened/psyker.dm @@ -10,12 +10,12 @@ organ_traits = list(TRAIT_ADVANCEDTOOLUSER, TRAIT_LITERATE, TRAIT_CAN_STRIP, TRAIT_ANTIMAGIC_NO_SELFBLOCK) w_class = WEIGHT_CLASS_NORMAL -/obj/item/organ/internal/brain/psyker/on_insert(mob/living/carbon/inserted_into) +/obj/item/organ/internal/brain/psyker/on_mob_insert(mob/living/carbon/inserted_into) . = ..() inserted_into.AddComponent(/datum/component/echolocation, blocking_trait = TRAIT_DUMB, echo_group = "psyker", echo_icon = "psyker", color_path = /datum/client_colour/psyker) inserted_into.AddComponent(/datum/component/anti_magic, antimagic_flags = MAGIC_RESISTANCE_MIND) -/obj/item/organ/internal/brain/psyker/on_remove(mob/living/carbon/removed_from) +/obj/item/organ/internal/brain/psyker/on_mob_remove(mob/living/carbon/removed_from) . = ..() qdel(removed_from.GetComponent(/datum/component/echolocation)) qdel(removed_from.GetComponent(/datum/component/anti_magic)) @@ -36,7 +36,7 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE bodypart_traits = list(TRAIT_DISFIGURED, TRAIT_BALD, TRAIT_SHAVED) - head_flags = HEAD_LIPS|HEAD_EYEHOLES|HEAD_DEBRAIN + head_flags = HEAD_DEBRAIN /obj/item/bodypart/head/psyker/try_attach_limb(mob/living/carbon/new_head_owner, special, abort) . = ..() @@ -82,9 +82,9 @@ qdel(old_head) var/obj/item/organ/internal/brain/psyker/psyker_brain = new() old_brain.before_organ_replacement(psyker_brain) - old_brain.Remove(src, special = TRUE, no_id_transfer = TRUE) + old_brain.Remove(src, special = TRUE, movement_flags = NO_ID_TRANSFER) qdel(old_brain) - psyker_brain.Insert(src, special = TRUE, drop_if_replaced = FALSE) + psyker_brain.Insert(src, special = TRUE, movement_flags = DELETE_IF_REPLACED) if(old_eyes) qdel(old_eyes) return TRUE diff --git a/code/modules/religion/festival/festival_violin.dm b/code/modules/religion/festival/festival_violin.dm new file mode 100644 index 00000000000000..82431352685bc4 --- /dev/null +++ b/code/modules/religion/festival/festival_violin.dm @@ -0,0 +1,29 @@ +/obj/item/instrument/violin/festival + name = "Cogitandi Fidis" + desc = "A violin that holds a special interest in the songs played from its strings." + icon_state = "holy_violin" + inhand_icon_state = "holy_violin" + +/obj/item/instrument/violin/festival/Initialize(mapload) + . = ..() + RegisterSignal(src, COMSIG_INSTRUMENT_START, PROC_REF(on_instrument_start)) + +/// signal fired when the festival instrument starts to play. +/obj/item/instrument/violin/festival/proc/on_instrument_start(datum/source, datum/song/starting_song, atom/player) + SIGNAL_HANDLER + + if(!starting_song || !isliving(player)) + return + analyze_song(starting_song, player) + +///Reports some relevant information when the song begins playing. +/obj/item/instrument/violin/festival/proc/analyze_song(datum/song/song, mob/living/playing_song) + var/list/analysis = list() + //check tempo and lines + var/song_length = song.lines.len * song.tempo + analysis += span_revenbignotice("[src] speaks to you...") + analysis += span_revennotice("\"This song has [song.lines.len] lines and a tempo of [song.tempo].\"") + analysis += span_revennotice("\"Multiplying these together gives a song length of [song_length].\"") + analysis += span_revennotice("\"To get a bonus effect from [GLOB.deity] upon finishing a performance, you need a song length of [FESTIVAL_SONG_LONG_ENOUGH].\"") + + to_chat(playing_song, analysis.Join("\n")) diff --git a/code/modules/religion/festival/instrument_rites.dm b/code/modules/religion/festival/instrument_rites.dm index a1c94c92425dc5..d8537f5845ea0a 100644 --- a/code/modules/religion/festival/instrument_rites.dm +++ b/code/modules/religion/festival/instrument_rites.dm @@ -1,9 +1,64 @@ +/datum/religion_rites/holy_violin + name = "Cogitandi Fidis" + desc = "Creates a holy violin that can analyze songs played from it." + ritual_length = 6 SECONDS + ritual_invocations = list("A servant of jubilee is needed ...") + invoke_msg = "... A great mind for musical matters!" + favor_cost = 20 //you only need one + +/datum/religion_rites/holy_violin/invoke_effect(mob/living/user, atom/religious_tool) + . = ..() + var/turf/tool_turf = get_turf(religious_tool) + var/obj/item/instrument/violin/fidis = new /obj/item/instrument/violin/festival(get_turf(religious_tool)) + fidis.visible_message(span_notice("[fidis] appears!")) + playsound(tool_turf, 'sound/effects/pray.ogg', 50, TRUE) + +/datum/religion_rites/portable_song_tuning + name = "Portable Song Tuning" + desc = "Empowers an instrument on the table to work as a portable altar for tuning songs. Will need to be recharged after 5 rites." + ritual_length = 6 SECONDS + ritual_invocations = list("Allow me to bring your holy inspirations ...") + invoke_msg = "... And send them with the winds my tunes ride with!" + favor_cost = 10 + ///instrument to empower + var/obj/item/instrument/instrument_target + +/datum/religion_rites/portable_song_tuning/perform_rite(mob/living/user, atom/religious_tool) + for(var/obj/item/instrument/could_empower in get_turf(religious_tool)) + instrument_target = could_empower + return ..() + to_chat(user, span_warning("You need to place an instrument on [religious_tool] to do this!")) + return FALSE + +/datum/religion_rites/portable_song_tuning/invoke_effect(mob/living/user, atom/movable/religious_tool) + ..() + var/obj/item/instrument/empower_target = instrument_target + var/turf/tool_turf = get_turf(religious_tool) + instrument_target = null + if(QDELETED(empower_target) || !(tool_turf == empower_target.loc)) //check if the instrument is still there + to_chat(user, span_warning("Your target left the altar!")) + return FALSE + empower_target.visible_message(span_notice("[empower_target] glows for a moment.")) + playsound(tool_turf, 'sound/effects/pray.ogg', 50, TRUE) + var/list/allowed_rites_from_bible = subtypesof(/datum/religion_rites/song_tuner) + empower_target.AddComponent( \ + /datum/component/religious_tool, \ + operation_flags = RELIGION_TOOL_INVOKE, \ + force_catalyst_afterattack = FALSE, \ + after_sect_select_cb = null, \ + catalyst_type = /obj/item/book/bible, \ + charges = 5, \ + rite_types_allowlist = allowed_rites_from_bible, \ + ) + return TRUE + ///prototype for rites that tune a song. /datum/religion_rites/song_tuner name = "Tune Song" desc = "this is a prototype." ritual_length = 10 SECONDS favor_cost = 10 + auto_delete = FALSE ///if repeats count as continuations instead of a song's end, TRUE var/repeats_okay = TRUE ///personal message sent to the chaplain as feedback for their chosen song @@ -20,6 +75,16 @@ to_chat(user, span_notice(song_invocation_message)) user.AddComponent(/datum/component/smooth_tunes, src, repeats_okay, particles_path, glow_color) +/** + * Song effect applied when the performer starts playing. + * + * Arguments: + * * performer - A human starting the song + * * song_source - parent of the smooth_tunes component. This is limited to the compatible items of said component, which currently includes mobs and objects so we'll have to type appropriately. + */ +/datum/religion_rites/song_tuner/proc/performer_start_effect(mob/living/carbon/human/performer, atom/song_source) + return + /** * Perform the song effect. * @@ -60,6 +125,28 @@ /datum/religion_rites/song_tuner/evangelism/finish_effect(mob/living/carbon/human/listener, atom/song_source) listener.add_mood_event("blessing", /datum/mood_event/blessing) +/datum/religion_rites/song_tuner/light + name = "Illuminating Solo" + desc = "Sing a bright song, lighting up the area around you. At the end of the song, you'll give some illumination to listeners." + particles_path = /particles/musical_notes/light + song_invocation_message = "You've prepared a bright song!" + song_start_message = span_notice("This music simply glows!") + glow_color = "#fcff44" + repeats_okay = FALSE + favor_cost = 0 + /// lighting object that makes chaplain glow + var/obj/effect/dummy/lighting_obj/moblight/performer_light_obj + +/datum/religion_rites/song_tuner/light/performer_start_effect(mob/living/carbon/human/performer, atom/song_source) + performer_light_obj = performer.mob_light(8, color = LIGHT_COLOR_DIM_YELLOW) + +/datum/religion_rites/song_tuner/light/Destroy() + QDEL_NULL(performer_light_obj) + . = ..() + +/datum/religion_rites/song_tuner/light/finish_effect(mob/living/carbon/human/listener, atom/song_source) + listener.apply_status_effect(/datum/status_effect/song/light) + /datum/religion_rites/song_tuner/nullwave name = "Nullwave Vibrato" desc = "Sing a dull song, protecting those who listen from magic." diff --git a/code/modules/religion/honorbound/honorbound_rites.dm b/code/modules/religion/honorbound/honorbound_rites.dm index c9c9e71135404a..88eef0340ea645 100644 --- a/code/modules/religion/honorbound/honorbound_rites.dm +++ b/code/modules/religion/honorbound/honorbound_rites.dm @@ -1,3 +1,6 @@ +/// how much favor is gained when someone joins the crusade and is deaconized +#define DEACONIZE_FAVOR_GAIN 300 + ///Makes the person holy, but they now also have to follow the honorbound code (CBT). Actually earns favor, convincing others to uphold the code (tm) is not easy /datum/religion_rites/deaconize name = "Join Crusade" @@ -64,7 +67,7 @@ var/datum/brain_trauma/special/honorbound/honor = user.has_trauma_type(/datum/brain_trauma/special/honorbound) if(joining_now in honor.guilty) honor.guilty -= joining_now - GLOB.religious_sect.adjust_favor(200, user) + GLOB.religious_sect.adjust_favor(DEACONIZE_FAVOR_GAIN, user) to_chat(user, span_notice("[GLOB.deity] has bound [joining_now] to the code! They are now a holy role! (albeit the lowest level of such)")) joining_now.mind.holy_role = HOLY_ROLE_DEACON GLOB.religious_sect.on_conversion(joining_now) @@ -151,7 +154,8 @@
    1.) Thou shalt not attack the unready!
    Those who are not ready for battle should not be wrought low. The evil of this world must lose - in a fair battle if you are to conquer them completely. + in a fair battle if you are to conquer them completely. Lesser creatures are given the benefit of + being unready, keep that in mind.

    2.) Thou shalt not attack the just!
    @@ -162,7 +166,9 @@
    3.) Thou shalt not attack the innocent!
    There is no honor on a pre-emptive strike, unless they are truly evil vermin. - Those who are guilty will either lay a hand on you first, or you may declare their evil. + Those who are guilty will either lay a hand on you first, or you may declare their evil. Mindless, lesser + creatures cannot be considered innocent, nor evil. They are beings of passion and function, and + may be dispatched as such if their passions misalign with the pursuits of a better world.

    4.) Thou shalt not use profane magicks!
    @@ -172,3 +178,5 @@ been allowed as it is a school focused on the light and mending of this world. "} return ..() + +#undef DEACONIZE_FAVOR_GAIN diff --git a/code/modules/religion/honorbound/honorbound_trauma.dm b/code/modules/religion/honorbound/honorbound_trauma.dm index 29152e5bc72994..399bf6765edf69 100644 --- a/code/modules/religion/honorbound/honorbound_trauma.dm +++ b/code/modules/religion/honorbound/honorbound_trauma.dm @@ -1,3 +1,6 @@ +/// one reason for declaring guilty is specifically checked for, keeping it as a define to avoid future mistakes +#define GUILT_REASON_DECLARATION "from your declaration." + ///Honorbound prevents you from attacking the unready, the just, or the innocent /datum/brain_trauma/special/honorbound name = "Dogmatic Compulsions" @@ -45,38 +48,59 @@ if(!isliving(clickingon)) return - var/mob/living/clickedmob = clickingon + var/mob/living/clicked_mob = clickingon var/obj/item/weapon = honorbound.get_active_held_item() - if(!honorbound.DirectAccess(clickedmob) && !isgun(weapon)) + if(!honorbound.DirectAccess(clicked_mob) && !isgun(weapon)) return if(weapon?.item_flags & NOBLUDGEON) return - if(!honorbound.combat_mode && (HAS_TRAIT(clickedmob, TRAIT_ALLOWED_HONORBOUND_ATTACK) || ((!weapon || !weapon.force) && !LAZYACCESS(modifiers, RIGHT_CLICK)))) + if(!honorbound.combat_mode && (HAS_TRAIT(clicked_mob, TRAIT_ALLOWED_HONORBOUND_ATTACK) || ((!weapon || !weapon.force) && !LAZYACCESS(modifiers, RIGHT_CLICK)))) return - if(!is_honorable(honorbound, clickedmob)) + if(!(clicked_mob in guilty)) + check_visible_guilt(clicked_mob) + if(!is_honorable(honorbound, clicked_mob)) return (COMSIG_MOB_CANCEL_CLICKON) +/// Checks a mob for any obvious signs of evil, and applies a guilty reason for each. +/datum/brain_trauma/special/honorbound/proc/check_visible_guilt(mob/living/attacked_mob) + //will most likely just hit nuke ops but good catch-all. WON'T hit traitors + if(ROLE_SYNDICATE in attacked_mob.faction) + guilty(attacked_mob, "for their misaligned association with the Syndicate!") + //not an antag datum check so it applies to wizard minions as well + if(ROLE_WIZARD in attacked_mob.faction) + guilty(attacked_mob, "for blasphemous magicks!") + if(HAS_TRAIT(attacked_mob, TRAIT_CULT_HALO)) + guilty(attacked_mob, "for blasphemous worship!") + if(attacked_mob.mind) + var/datum/mind/guilty_conscience = attacked_mob.mind + if(guilty_conscience.has_antag_datum(/datum/antagonist/abductor)) + guilty(attacked_mob, "for their blatant surgical malice...") + if(guilty_conscience.has_antag_datum(/datum/antagonist/nightmare)) + guilty(attacked_mob, "for being a light-consuming nightmare!") + if(guilty_conscience.has_antag_datum(/datum/antagonist/ninja)) + guilty(attacked_mob, "for their misaligned association with the Spider Clan!") + var/datum/antagonist/heretic/heretic_datum = guilty_conscience.has_antag_datum(/datum/antagonist/heretic) + if(heretic_datum?.ascended) + guilty(attacked_mob, "for blasphemous, heretical, out of control worship!") + /** * Called by hooked signals whenever someone attacks the person with this trauma * Checks if the attacker should be considered guilty and adds them to the guilty list if true * * Arguments: * * user: person who attacked the honorbound - * * declaration: if this wasn't an attack, but instead the honorbound spending favor on declaring this person guilty + * * reason: why this person is now guilty (future pr idea: letting honorbound print a receipt for why someone is guilty? lol) */ -/datum/brain_trauma/special/honorbound/proc/guilty(mob/living/user, declaration = FALSE) +/datum/brain_trauma/special/honorbound/proc/guilty(mob/living/user, reason = "for no particular reason!") if(user in guilty) return var/datum/mind/guilty_conscience = user.mind - if(guilty_conscience && !declaration) //sec and medical are immune to becoming guilty through attack (we don't check holy because holy shouldn't be able to attack eachother anyways) + if(guilty_conscience && reason != GUILT_REASON_DECLARATION) //sec and medical are immune to becoming guilty through attack (we don't check holy because holy shouldn't be able to attack eachother anyways) var/datum/job/job = guilty_conscience.assigned_role if(job.departments_bitflags & (DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SECURITY)) return - if(declaration) - to_chat(owner, span_notice("[user] is now considered guilty by [GLOB.deity] from your declaration.")) - else - to_chat(owner, span_notice("[user] is now considered guilty by [GLOB.deity] for attacking you first.")) + to_chat(owner, span_notice("[user] is now considered guilty by [GLOB.deity] [reason]")) to_chat(user, span_danger("[GLOB.deity] no longer considers you innocent!")) guilty += user @@ -84,7 +108,7 @@ /datum/brain_trauma/special/honorbound/proc/on_attacked(mob/source, mob/attacker, attack_flags) SIGNAL_HANDLER if(!(attack_flags & (ATTACKER_STAMINA_ATTACK|ATTACKER_SHOVING))) - guilty(attacker) + guilty(attacker, "for attacking [source] first.") /** * Called by attack_honor signal to check whether an attack should be allowed or not @@ -95,6 +119,7 @@ */ /datum/brain_trauma/special/honorbound/proc/is_honorable(mob/living/carbon/human/honorbound_human, mob/living/target_creature) var/is_guilty = (target_creature in guilty) + var/is_human = ishuman(target_creature) //THE UNREADY (Applies over ANYTHING else!) if(honorbound_human == target_creature) return TRUE //oh come on now @@ -102,7 +127,7 @@ to_chat(honorbound_human, span_warning("There is no honor in attacking the unready.")) return FALSE //THE JUST (Applies over guilt except for med, so you best be careful!) - if(ishuman(target_creature)) + if(is_human) var/mob/living/carbon/human/target_human = target_creature var/datum/job/job = target_human.mind?.assigned_role var/is_holy = target_human.mind?.holy_role @@ -112,9 +137,9 @@ if(job?.departments_bitflags & DEPARTMENT_BITFLAG_MEDICAL && !is_guilty) to_chat(honorbound_human, span_warning("If you truly think this healer is not innocent, declare them guilty.")) return FALSE - //THE INNOCENT - if(!is_guilty) - to_chat(honorbound_human, span_warning("There is nothing righteous in attacking the innocent.")) + //THE INNOCENT (human and borg exclusive) + if(!is_guilty && (is_human || issilicon(target_creature))) + to_chat(target_creature, span_warning("There is nothing righteous in attacking the innocent.")) return FALSE return TRUE @@ -262,4 +287,6 @@ /datum/action/cooldown/spell/pointed/declare_evil/cast(mob/living/cast_on) . = ..() GLOB.religious_sect.adjust_favor(-required_favor, owner) - honor_trauma.guilty(cast_on, declaration = TRUE) + honor_trauma.guilty(cast_on, GUILT_REASON_DECLARATION) + +#undef GUILT_REASON_DECLARATION diff --git a/code/modules/religion/pyre_rites.dm b/code/modules/religion/pyre/pyre_rites.dm similarity index 100% rename from code/modules/religion/pyre_rites.dm rename to code/modules/religion/pyre/pyre_rites.dm diff --git a/code/modules/religion/religion_sects.dm b/code/modules/religion/religion_sects.dm index 3135fddeace8da..ebb8a69a7e5740 100644 --- a/code/modules/religion/religion_sects.dm +++ b/code/modules/religion/religion_sects.dm @@ -38,6 +38,8 @@ var/altar_icon_state /// Currently Active (non-deleted) rites var/list/active_rites + /// Chance that we fail a bible blessing. + var/smack_chance = DEFAULT_SMACK_CHANCE /// Whether the structure has CANDLE OVERLAYS! var/candle_overlay = TRUE @@ -123,6 +125,10 @@ blessed.add_mood_event("blessing", /datum/mood_event/blessing) return TRUE +/// What happens if we bless a corpse? By default just do the default smack behavior +/datum/religion_sect/proc/sect_dead_bless(mob/living/target, mob/living/chap) + return FALSE + /**** Nanotrasen Approved God ****/ /datum/religion_sect/puritanism @@ -168,7 +174,7 @@ eth_stomach.adjust_charge(60) did_we_charge = TRUE - //if we're not targetting a robot part we stop early + //if we're not targeting a robot part we stop early var/obj/item/bodypart/bodypart = blessed.get_bodypart(chap.zone_selected) if(IS_ORGANIC_LIMB(bodypart)) if(!did_we_charge) @@ -286,11 +292,12 @@ name = "Punished God" quote = "To feel the freedom, you must first understand captivity." desc = "Incapacitate yourself in any way possible. Bad mutations, lost limbs, traumas, \ - even addictions. You will learn the secrets of the universe from your defeated shell." + even addictions. You will learn the secrets of the universe from your defeated shell." tgui_icon = "user-injured" altar_icon_state = "convertaltar-burden" alignment = ALIGNMENT_NEUT candle_overlay = FALSE + smack_chance = 0 rites_list = list(/datum/religion_rites/nullrod_transformation) /datum/religion_sect/burden/on_conversion(mob/living/carbon/human/new_convert) @@ -298,21 +305,85 @@ if(!ishuman(new_convert)) to_chat(new_convert, span_warning("[GLOB.deity] needs higher level creatures to fully comprehend the suffering. You are not burdened.")) return - new_convert.gain_trauma(/datum/brain_trauma/special/burdened, TRAUMA_RESILIENCE_MAGIC) + new_convert.gain_trauma(/datum/brain_trauma/special/burdened, TRAUMA_RESILIENCE_ABSOLUTE) /datum/religion_sect/burden/on_deconversion(mob/living/carbon/human/new_convert) if (ishuman(new_convert)) - new_convert.cure_trauma_type(/datum/brain_trauma/special/burdened, TRAUMA_RESILIENCE_MAGIC) + new_convert.cure_trauma_type(/datum/brain_trauma/special/burdened, TRAUMA_RESILIENCE_ABSOLUTE) return ..() /datum/religion_sect/burden/tool_examine(mob/living/carbon/human/burdened) //display burden level - if(!ishuman(burdened)) - return FALSE - var/datum/brain_trauma/special/burdened/burden = burdened.has_trauma_type(/datum/brain_trauma/special/burdened) - if(burden) - return "You are at burden level [burden.burden_level]/9." + if(ishuman(burdened)) + var/datum/brain_trauma/special/burdened/burden = burdened.has_trauma_type(/datum/brain_trauma/special/burdened) + if(burden) + return "You are at burden level [burden.burden_level]/9." return "You are not burdened." +/datum/religion_sect/burden/sect_bless(mob/living/carbon/target, mob/living/carbon/chaplain) + if(!istype(target) || !istype(chaplain)) + return FALSE + var/datum/brain_trauma/special/burdened/burden = chaplain.has_trauma_type(/datum/brain_trauma/special/burdened) + if(!burden) + return FALSE + var/burden_modifier = max(1 - 0.07 * burden.burden_level, 0.01) + var/transferred = FALSE + var/list/hurt_limbs = target.get_damaged_bodyparts(1, 1, BODYTYPE_ORGANIC) + target.get_wounded_bodyparts(BODYTYPE_ORGANIC) + var/list/chaplains_limbs = list() + for(var/obj/item/bodypart/possible_limb in chaplain.bodyparts) + if(IS_ORGANIC_LIMB(possible_limb)) + chaplains_limbs += possible_limb + if(length(chaplains_limbs)) + for(var/obj/item/bodypart/affected_limb as anything in hurt_limbs) + var/obj/item/bodypart/chaplains_limb = chaplain.get_bodypart(affected_limb.body_zone) + if(!chaplains_limb || !IS_ORGANIC_LIMB(chaplains_limb)) + chaplains_limb = pick(chaplains_limbs) + var/brute_damage = affected_limb.brute_dam + var/burn_damage = affected_limb.burn_dam + if((brute_damage || burn_damage)) + transferred = TRUE + affected_limb.heal_damage(brute_damage, burn_damage, required_bodytype = BODYTYPE_ORGANIC) + chaplains_limb.receive_damage(brute_damage * burden_modifier, burn_damage * burden_modifier, forced = TRUE, wound_bonus = CANT_WOUND) + for(var/datum/wound/iter_wound as anything in affected_limb.wounds) + transferred = TRUE + iter_wound.remove_wound() + iter_wound.apply_wound(chaplains_limb) + if(HAS_TRAIT_FROM(target, TRAIT_HUSK, BURN)) + transferred = TRUE + target.cure_husk(BURN) + chaplain.become_husk(BURN) + var/toxin_damage = target.getToxLoss() + if(toxin_damage && !HAS_TRAIT(chaplain, TRAIT_TOXIMMUNE)) + transferred = TRUE + target.adjustToxLoss(-toxin_damage) + chaplain.adjustToxLoss(toxin_damage * burden_modifier, forced = TRUE) + var/suffocation_damage = target.getOxyLoss() + if(suffocation_damage && !HAS_TRAIT(chaplain, TRAIT_NOBREATH)) + transferred = TRUE + target.adjustOxyLoss(-suffocation_damage) + chaplain.adjustOxyLoss(suffocation_damage * burden_modifier, forced = TRUE) + if(!HAS_TRAIT(chaplain, TRAIT_NOBLOOD)) + if(target.blood_volume < BLOOD_VOLUME_SAFE) + var/target_blood_data = target.get_blood_data(target.get_blood_id()) + var/chaplain_blood_data = chaplain.get_blood_data(chaplain.get_blood_id()) + var/transferred_blood_amount = min(chaplain.blood_volume, BLOOD_VOLUME_SAFE - target.blood_volume) + if(transferred_blood_amount && (chaplain_blood_data["blood_type"] in get_safe_blood(target_blood_data["blood_type"]))) + transferred = TRUE + chaplain.transfer_blood_to(target, transferred_blood_amount, forced = TRUE) + if(target.blood_volume > BLOOD_VOLUME_EXCESS) + target.transfer_blood_to(chaplain, target.blood_volume - BLOOD_VOLUME_EXCESS, forced = TRUE) + target.update_damage_overlays() + chaplain.update_damage_overlays() + if(transferred) + target.visible_message(span_notice("[chaplain] takes on [target]'s burden!")) + to_chat(target, span_boldnotice("May the power of [GLOB.deity] compel you to be healed!")) + playsound(chaplain, SFX_PUNCH, 25, vary = TRUE, extrarange = -1) + target.add_mood_event("blessing", /datum/mood_event/blessing) + else + to_chat(chaplain, span_warning("They hold no burden!")) + return TRUE + +/datum/religion_sect/burden/sect_dead_bless(mob/living/target, mob/living/chaplain) + return sect_bless(target, chaplain) /datum/religion_sect/honorbound name = "Honorbound God" @@ -431,7 +502,10 @@ alignment = ALIGNMENT_GOOD candle_overlay = FALSE rites_list = list( + /datum/religion_rites/holy_violin, + /datum/religion_rites/portable_song_tuning, /datum/religion_rites/song_tuner/evangelism, + /datum/religion_rites/song_tuner/light, /datum/religion_rites/song_tuner/nullwave, /datum/religion_rites/song_tuner/pain, /datum/religion_rites/song_tuner/lullaby, diff --git a/code/modules/religion/religion_structures.dm b/code/modules/religion/religion_structures.dm index ae61004b46e83c..1b30d021268cf6 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/requests/request_manager.dm b/code/modules/requests/request_manager.dm index 41e46aa53c2562..010b60a384f58b 100644 --- a/code/modules/requests/request_manager.dm +++ b/code/modules/requests/request_manager.dm @@ -2,7 +2,7 @@ #define REQUEST_PRAYER "request_prayer" /// Requests for Centcom #define REQUEST_CENTCOM "request_centcom" -/// Requests for the Syndicate +/// Requests for the Symphionia #define REQUEST_SYNDICATE "request_syndicate" /// Requests for the nuke code #define REQUEST_NUKE "request_nuke" @@ -25,7 +25,7 @@ GLOBAL_DATUM_INIT(requests, /datum/request_manager, new) /// List where requests can be accessed by ID var/list/requests_by_id = list() -/datum/request_manager/Destroy(force, ...) +/datum/request_manager/Destroy(force) QDEL_LIST(requests) return ..() @@ -80,7 +80,7 @@ GLOBAL_DATUM_INIT(requests, /datum/request_manager, new) request_for_client(C, REQUEST_CENTCOM, message) /** - * Creates a request for a Syndicate message + * Creates a request for a Symphionia message * * Arguments: * * C - The client who is sending the request diff --git a/code/modules/research/anomaly/anomaly_refinery.dm b/code/modules/research/anomaly/anomaly_refinery.dm index ce09ebb9176270..533443a199557f 100644 --- a/code/modules/research/anomaly/anomaly_refinery.dm +++ b/code/modules/research/anomaly/anomaly_refinery.dm @@ -110,7 +110,7 @@ /obj/machinery/research/anomaly_refinery/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/research/anomaly_refinery/screwdriver_act(mob/living/user, obj/item/tool) if(!default_deconstruction_screwdriver(user, "[base_icon_state]-off", "[base_icon_state]", tool)) diff --git a/code/modules/research/anomaly/raw_anomaly.dm b/code/modules/research/anomaly/raw_anomaly.dm index 8d103388d37acd..2df844e4bb808f 100644 --- a/code/modules/research/anomaly/raw_anomaly.dm +++ b/code/modules/research/anomaly/raw_anomaly.dm @@ -9,7 +9,7 @@ /obj/item/raw_anomaly_core name = "raw anomaly core" desc = "You shouldn't be seeing this. Someone screwed up." - icon = 'icons/obj/assemblies/new_assemblies.dmi' + icon = 'icons/obj/devices/new_assemblies.dmi' icon_state = "broken_state" /// Anomaly type diff --git a/code/modules/research/designs/AI_module_designs.dm b/code/modules/research/designs/AI_module_designs.dm index f45ca0e3148796..81a27c7f6c4108 100644 --- a/code/modules/research/designs/AI_module_designs.dm +++ b/code/modules/research/designs/AI_module_designs.dm @@ -167,8 +167,8 @@ departmental_flags = DEPARTMENT_BITFLAG_SCIENCE /datum/design/board/corporate_module - name = "Corporate Module" - desc = "Allows for the construction of a Corporate AI Core Module." + name = "Conglomeration Module" + desc = "Allows for the construction of a Conglomeration AI Core Module." id = "corporate_module" materials = list(/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SHEET_MATERIAL_AMOUNT, /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/ai_module/core/full/corp diff --git a/code/modules/research/designs/autolathe/multi-department_designs.dm b/code/modules/research/designs/autolathe/multi-department_designs.dm index 30787a1a0729d5..02bbb3c3122335 100644 --- a/code/modules/research/designs/autolathe/multi-department_designs.dm +++ b/code/modules/research/designs/autolathe/multi-department_designs.dm @@ -590,7 +590,7 @@ /datum/design/paper_biscuit_confidential name = "Confidential Paper Biscuit" - desc = "An paper biscuit which can seal in itself paperwork, this one is used for confidential Nanotrasen documents. After sealing it the only way to open is through cracking it, cracking is irreversible and makes it permamently open. Not actually a biscuit." + desc = "An paper biscuit which can seal in itself paperwork, this one is used for confidential Symphionia documents. After sealing it the only way to open is through cracking it, cracking is irreversible and makes it permamently open. Not actually a biscuit." id = "confidential_biscuit" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE materials = list(/datum/material/plastic = SMALL_MATERIAL_AMOUNT*0.3) diff --git a/code/modules/research/designs/autolathe/security_designs.dm b/code/modules/research/designs/autolathe/security_designs.dm index c3a0a082d280f6..7b2fa09bc0fedf 100644 --- a/code/modules/research/designs/autolathe/security_designs.dm +++ b/code/modules/research/designs/autolathe/security_designs.dm @@ -223,8 +223,8 @@ departmental_flags = DEPARTMENT_BITFLAG_SECURITY /datum/design/c9mm -// name = "Ammo Box (9mm)" //SKYRAT EDIT: Original - name = "Ammo Box (9x25mm Mk.12) (Lethal)" //SKYRAT EDIT: Calibre rename +// name = "Ammo Box (9mm)" //NOVA EDIT: Original + name = "Ammo Box (9x25mm Mk.12) (Lethal)" //NOVA EDIT: Calibre rename id = "c9mm" build_type = AUTOLATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 300) diff --git a/code/modules/research/designs/bluespace_designs.dm b/code/modules/research/designs/bluespace_designs.dm index 62fd0e7c9e57c2..867f96e4db5fa4 100644 --- a/code/modules/research/designs/bluespace_designs.dm +++ b/code/modules/research/designs/bluespace_designs.dm @@ -50,7 +50,7 @@ RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_BLUESPACE ) departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_CARGO - //autolathe_exportable = FALSE //SKYRAT EDIT REMOVAL + //autolathe_exportable = FALSE //NOVA EDIT REMOVAL /datum/design/desynchronizer name = "Desynchronizer" diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index a73745399e11d8..11e6f026f68142 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -661,7 +661,7 @@ category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_SECURITY ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SECURITY /datum/design/board/vendor name = "Vendor Board" @@ -1120,7 +1120,6 @@ name = "Machine Design (Bot Navigational Beacon)" desc = "The circuit board for a beacon that aids bot navigation." id = "botnavbeacon" - build_type = IMPRINTER build_path = /obj/item/circuitboard/machine/navbeacon category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ROBOTICS diff --git a/code/modules/research/designs/mecha_designs.dm b/code/modules/research/designs/mecha_designs.dm index c495bdc9e47b5c..098cac6a3894b8 100644 --- a/code/modules/research/designs/mecha_designs.dm +++ b/code/modules/research/designs/mecha_designs.dm @@ -229,6 +229,7 @@ construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -246,6 +247,7 @@ construction_time = 20 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -263,6 +265,7 @@ construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -280,6 +283,7 @@ construction_time = 20 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -297,6 +301,7 @@ construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -314,6 +319,7 @@ construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -331,6 +337,7 @@ construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -348,6 +355,7 @@ construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -365,6 +373,7 @@ construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -382,6 +391,7 @@ construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -399,6 +409,7 @@ construction_time = 20 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -416,6 +427,7 @@ construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -433,6 +445,7 @@ construction_time = 20 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -450,6 +463,7 @@ construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -467,6 +481,7 @@ construction_time = 20 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -486,6 +501,7 @@ RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -506,6 +522,7 @@ RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -526,6 +543,7 @@ RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -566,6 +584,7 @@ RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -586,6 +605,7 @@ RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -606,6 +626,7 @@ RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -626,6 +647,7 @@ RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -660,6 +682,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -679,6 +702,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -697,6 +721,7 @@ construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -713,6 +738,7 @@ construction_time = 20 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 9a79ec0db75364..38d9f1700cbc62 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -1,6 +1,6 @@ //Cyborg -/* //SKYRAT EDIT REMOVAL BEGIN - Costs lowered and time reduced - +/* //NOVA EDIT REMOVAL BEGIN - Costs lowered and time reduced - /datum/design/borg_suit name = "Cyborg Endoskeleton" id = "borg_suit" @@ -77,7 +77,69 @@ category = list( RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS ) -*///SKYRAT EDIT REMOVAL END +*///NOVA EDIT REMOVAL END + +//Advanced Robotic Limbs + +/datum/design/advanced_l_arm + name = "Advanced Left Arm" + id = "advanced_l_arm" + build_type = MECHFAB + build_path = /obj/item/bodypart/arm/left/robot/advanced + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, + /datum/material/titanium=SHEET_MATERIAL_AMOUNT*3, + /datum/material/gold=SHEET_MATERIAL_AMOUNT*3, + ) + construction_time = 20 SECONDS + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ADVANCED_LIMBS + ) + +/datum/design/advanced_r_arm + name = "Advanced Right Arm" + id = "advanced_r_arm" + build_type = MECHFAB + build_path = /obj/item/bodypart/arm/right/robot/advanced + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, + /datum/material/titanium=SHEET_MATERIAL_AMOUNT*3, + /datum/material/gold=SHEET_MATERIAL_AMOUNT*3, + ) + construction_time = 20 SECONDS + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ADVANCED_LIMBS + ) + +/datum/design/advanced_l_leg + name = "Advanced Left Leg" + id = "advanced_l_leg" + build_type = MECHFAB + build_path = /obj/item/bodypart/leg/left/robot/advanced + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, + /datum/material/titanium=SHEET_MATERIAL_AMOUNT*3, + /datum/material/gold=SHEET_MATERIAL_AMOUNT*3, + ) + construction_time = 20 SECONDS + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ADVANCED_LIMBS + ) + +/datum/design/advanced_r_leg + name = "Advanced Right Leg" + id = "advanced_r_leg" + build_type = MECHFAB + build_path = /obj/item/bodypart/leg/right/robot/advanced + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, + /datum/material/titanium=SHEET_MATERIAL_AMOUNT*3, + /datum/material/gold=SHEET_MATERIAL_AMOUNT*3, + ) + construction_time = 20 SECONDS + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ADVANCED_LIMBS + ) //Ripley /datum/design/ripley_chassis @@ -96,7 +158,10 @@ id = "ripley_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/ripley_torso - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/glass =SHEET_MATERIAL_AMOUNT*3.75) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*3.75, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -174,7 +239,10 @@ id = "odysseus_head" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_head - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*3,/datum/material/glass =SHEET_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*3, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*5 + ) construction_time = 100 category = list( RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -241,7 +309,12 @@ id = "gygax_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_torso - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/glass =SHEET_MATERIAL_AMOUNT*5,/datum/material/gold=SHEET_MATERIAL_AMOUNT, /datum/material/silver=SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*5, + /datum/material/gold=SHEET_MATERIAL_AMOUNT, + /datum/material/silver=SHEET_MATERIAL_AMOUNT, + ) construction_time = 300 category = list( RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -252,7 +325,12 @@ id = "gygax_head" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_head - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5,/datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/gold=SHEET_MATERIAL_AMOUNT, /datum/material/silver=SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, + /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, + /datum/material/gold=SHEET_MATERIAL_AMOUNT, + /datum/material/silver=SHEET_MATERIAL_AMOUNT, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -263,7 +341,11 @@ id = "gygax_left_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_left_arm - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5, /datum/material/gold=HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver=HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/gold=HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver=HALF_SHEET_MATERIAL_AMOUNT, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -274,7 +356,11 @@ id = "gygax_right_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_right_arm - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5, /datum/material/gold=HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver=HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/gold=HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver=HALF_SHEET_MATERIAL_AMOUNT, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -285,7 +371,11 @@ id = "gygax_left_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_left_leg - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5, /datum/material/gold=SHEET_MATERIAL_AMOUNT, /datum/material/silver=SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/gold=HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver=HALF_SHEET_MATERIAL_AMOUNT, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -296,7 +386,11 @@ id = "gygax_right_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_right_leg - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5, /datum/material/gold=SHEET_MATERIAL_AMOUNT, /datum/material/silver=SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/gold=HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver=HALF_SHEET_MATERIAL_AMOUNT, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -307,7 +401,12 @@ id = "gygax_armor" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_armor - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5,/datum/material/gold=SHEET_MATERIAL_AMOUNT*5, /datum/material/silver=SHEET_MATERIAL_AMOUNT*5, /datum/material/titanium=SHEET_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/gold=SHEET_MATERIAL_AMOUNT*5, + /datum/material/silver=SHEET_MATERIAL_AMOUNT*5, + /datum/material/titanium=SHEET_MATERIAL_AMOUNT*5, + ) construction_time = 600 category = list( RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -330,7 +429,11 @@ id = "durand_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_torso - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*12.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT*5,/datum/material/silver=SHEET_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*12.5, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*5, + /datum/material/silver=SHEET_MATERIAL_AMOUNT*5, + ) construction_time = 300 category = list( RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -341,7 +444,11 @@ id = "durand_head" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_head - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5,/datum/material/glass =SHEET_MATERIAL_AMOUNT*7.5,/datum/material/silver=SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/silver=SHEET_MATERIAL_AMOUNT, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -352,7 +459,10 @@ id = "durand_left_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_left_arm - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5,/datum/material/silver=SHEET_MATERIAL_AMOUNT*2) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, + /datum/material/silver=SHEET_MATERIAL_AMOUNT*2, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -363,7 +473,10 @@ id = "durand_right_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_right_arm - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5,/datum/material/silver=SHEET_MATERIAL_AMOUNT*2) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, + /datum/material/silver=SHEET_MATERIAL_AMOUNT*2, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -374,7 +487,10 @@ id = "durand_left_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_left_leg - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5,/datum/material/silver=SHEET_MATERIAL_AMOUNT*2) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, + /datum/material/silver=SHEET_MATERIAL_AMOUNT*2, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -385,7 +501,10 @@ id = "durand_right_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_right_leg - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5,/datum/material/silver=SHEET_MATERIAL_AMOUNT*2) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, + /datum/material/silver=SHEET_MATERIAL_AMOUNT*2, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -396,7 +515,11 @@ id = "durand_armor" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_armor - materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT * 300,/datum/material/uranium=SHEET_MATERIAL_AMOUNT*12.5,/datum/material/titanium=SHEET_MATERIAL_AMOUNT*10) + materials = list( + /datum/material/iron=SMALL_MATERIAL_AMOUNT * 300, + /datum/material/uranium=SHEET_MATERIAL_AMOUNT*12.5, + /datum/material/titanium=SHEET_MATERIAL_AMOUNT*10, + ) construction_time = 600 category = list( RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -419,7 +542,11 @@ id = "honk_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_torso - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/glass =SHEET_MATERIAL_AMOUNT*5,/datum/material/bananium=SHEET_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*5, + /datum/material/bananium=SHEET_MATERIAL_AMOUNT*5, + ) construction_time = 300 category = list( RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -430,7 +557,11 @@ id = "honk_head" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_head - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5,/datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5,/datum/material/bananium=SHEET_MATERIAL_AMOUNT * 2.5) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, + /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, + /datum/material/bananium=SHEET_MATERIAL_AMOUNT * 2.5, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -441,7 +572,10 @@ id = "honk_left_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_left_arm - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5,/datum/material/bananium=SHEET_MATERIAL_AMOUNT * 2.5) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/bananium=SHEET_MATERIAL_AMOUNT * 2.5, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -452,7 +586,10 @@ id = "honk_right_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_right_arm - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5,/datum/material/bananium=SHEET_MATERIAL_AMOUNT * 2.5) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/bananium=SHEET_MATERIAL_AMOUNT * 2.5, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -463,7 +600,10 @@ id = "honk_left_leg" build_type = MECHFAB build_path =/obj/item/mecha_parts/part/honker_left_leg - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/bananium=SHEET_MATERIAL_AMOUNT * 2.5) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/bananium=SHEET_MATERIAL_AMOUNT * 2.5, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -474,7 +614,10 @@ id = "honk_right_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_right_leg - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/bananium=SHEET_MATERIAL_AMOUNT * 2.5) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/bananium=SHEET_MATERIAL_AMOUNT * 2.5, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -497,7 +640,11 @@ id = "phazon_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_torso - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*17.5,/datum/material/glass =SHEET_MATERIAL_AMOUNT*5,/datum/material/plasma=SHEET_MATERIAL_AMOUNT*10) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*17.5, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*5, + /datum/material/plasma=SHEET_MATERIAL_AMOUNT*10, + ) construction_time = 300 category = list( RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -508,7 +655,11 @@ id = "phazon_head" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_head - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5,/datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5,/datum/material/plasma=SHEET_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, + /datum/material/plasma=SHEET_MATERIAL_AMOUNT*5, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -519,7 +670,10 @@ id = "phazon_left_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_left_arm - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/plasma=SHEET_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, + /datum/material/plasma=SHEET_MATERIAL_AMOUNT*5, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -530,7 +684,10 @@ id = "phazon_right_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_right_arm - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/plasma=SHEET_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, + /datum/material/plasma=SHEET_MATERIAL_AMOUNT*5, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -541,7 +698,10 @@ id = "phazon_left_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_left_leg - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/plasma=SHEET_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, + /datum/material/plasma=SHEET_MATERIAL_AMOUNT*5, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -552,7 +712,10 @@ id = "phazon_right_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_right_leg - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/plasma=SHEET_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, + /datum/material/plasma=SHEET_MATERIAL_AMOUNT*5, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -563,7 +726,11 @@ id = "phazon_armor" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_armor - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*12.5,/datum/material/plasma=SHEET_MATERIAL_AMOUNT*10,/datum/material/titanium=SHEET_MATERIAL_AMOUNT*10) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*12.5, + /datum/material/plasma=SHEET_MATERIAL_AMOUNT*10, + /datum/material/titanium=SHEET_MATERIAL_AMOUNT*10, + ) construction_time = 300 category = list( RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -586,7 +753,10 @@ id = "savannah_ivanov_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/savannah_ivanov_torso - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/glass =SHEET_MATERIAL_AMOUNT*3.75) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*3.75, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -597,7 +767,10 @@ id = "savannah_ivanov_head" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/savannah_ivanov_head - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*3,/datum/material/glass =SHEET_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*3, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*5, + ) construction_time = 100 category = list( RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -641,7 +814,11 @@ id = "savannah_ivanov_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/savannah_ivanov_torso - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*12.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT*5,/datum/material/silver=SHEET_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*12.5, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*5, + /datum/material/silver=SHEET_MATERIAL_AMOUNT*5, + ) construction_time = 300 category = list( RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -652,7 +829,11 @@ id = "savannah_ivanov_head" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/savannah_ivanov_head - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5,/datum/material/glass =SHEET_MATERIAL_AMOUNT*7.5,/datum/material/silver=SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/silver=SHEET_MATERIAL_AMOUNT, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -663,7 +844,10 @@ id = "savannah_ivanov_left_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/savannah_ivanov_left_arm - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5,/datum/material/silver=SHEET_MATERIAL_AMOUNT*2) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, + /datum/material/silver=SHEET_MATERIAL_AMOUNT*2, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -674,7 +858,10 @@ id = "savannah_ivanov_right_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/savannah_ivanov_right_arm - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5,/datum/material/silver=SHEET_MATERIAL_AMOUNT*2) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, + /datum/material/silver=SHEET_MATERIAL_AMOUNT*2, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -685,7 +872,10 @@ id = "savannah_ivanov_left_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/savannah_ivanov_left_leg - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5,/datum/material/silver=SHEET_MATERIAL_AMOUNT*2) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, + /datum/material/silver=SHEET_MATERIAL_AMOUNT*2, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -696,7 +886,10 @@ id = "savannah_ivanov_right_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/savannah_ivanov_right_leg - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5,/datum/material/silver=SHEET_MATERIAL_AMOUNT*2) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, + /datum/material/silver=SHEET_MATERIAL_AMOUNT*2, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -707,7 +900,11 @@ id = "savannah_ivanov_armor" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/savannah_ivanov_armor - materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT * 300,/datum/material/uranium=SHEET_MATERIAL_AMOUNT*12.5,/datum/material/titanium=SHEET_MATERIAL_AMOUNT*10) + materials = list( + /datum/material/iron=SMALL_MATERIAL_AMOUNT * 300, + /datum/material/uranium=SHEET_MATERIAL_AMOUNT*12.5, + /datum/material/titanium=SHEET_MATERIAL_AMOUNT*10, + ) construction_time = 600 category = list( RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -730,7 +927,10 @@ id = "clarke_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/clarke_torso - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/glass =SHEET_MATERIAL_AMOUNT*3.75) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*3.75, + ) construction_time = 200 category = list( RND_CATEGORY_MECHFAB_CLARKE + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -741,7 +941,10 @@ id = "clarke_head" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/clarke_head - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*3,/datum/material/glass =SHEET_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*3, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*5, + ) construction_time = 100 category = list( RND_CATEGORY_MECHFAB_CLARKE + RND_SUBCATEGORY_MECHFAB_CHASSIS @@ -775,15 +978,30 @@ id = "ripleyupgrade" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/ripleyupgrade - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5,/datum/material/plasma=SHEET_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, + /datum/material/plasma=SHEET_MATERIAL_AMOUNT*5, + ) construction_time = 100 category = list( - RND_CATEGORY_MECHFAB_EQUIPMENT, - RND_CATEGORY_MECHFAB_RIPLEY + RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES, + RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, + ) + +/datum/design/paddyupgrade + name = "Ripley MK-I to Paddy Conversion Kit" + id = "paddyupgrade" + build_type = MECHFAB + build_path = /obj/item/mecha_parts/mecha_equipment/ripleyupgrade/paddy + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 10, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT *5, ) + construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES, - RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_CHASSIS, ) /datum/design/mech_hydraulic_clamp @@ -794,12 +1012,20 @@ materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) construction_time = 100 category = list( - RND_CATEGORY_MECHFAB_EQUIPMENT, - RND_CATEGORY_MECHFAB_RIPLEY + RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC, + RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, ) + +/datum/design/mech_hydraulic_claw + name = "Hydraulic Claw" + id = "mech_hydraulic_claw" + build_type = MECHFAB + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/paddy_claw + materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) + construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC, - RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, ) /datum/design/mech_drill @@ -825,7 +1051,10 @@ id = "mech_mscanner" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/mining_scanner - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 2.5,/datum/material/glass = SHEET_MATERIAL_AMOUNT *1.25) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT * 2.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT *1.25, + ) construction_time = 50 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING, @@ -851,7 +1080,12 @@ id = "mech_generator" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/generator - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5,/datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT,/datum/material/silver=SHEET_MATERIAL_AMOUNT,/datum/material/plasma=SHEET_MATERIAL_AMOUNT * 2.5) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver=SHEET_MATERIAL_AMOUNT, + /datum/material/plasma=SHEET_MATERIAL_AMOUNT * 2.5, + ) construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC, @@ -869,7 +1103,10 @@ id = "mech_mousetrap_mortar" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/bananium=SHEET_MATERIAL_AMOUNT * 2.5) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, + /datum/material/bananium=SHEET_MATERIAL_AMOUNT * 2.5, + ) construction_time = 300 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_HONK, @@ -882,7 +1119,10 @@ id = "mech_banana_mortar" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/bananium=SHEET_MATERIAL_AMOUNT * 2.5) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, + /datum/material/bananium=SHEET_MATERIAL_AMOUNT * 2.5, + ) construction_time = 300 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_HONK, @@ -895,7 +1135,10 @@ id = "mech_honker" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/honker - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/bananium=SHEET_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, + /datum/material/bananium=SHEET_MATERIAL_AMOUNT*5, + ) construction_time = 500 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_HONK, @@ -908,7 +1151,10 @@ id = "mech_punching_face" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/bananium=SHEET_MATERIAL_AMOUNT*3.75) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, + /datum/material/bananium=SHEET_MATERIAL_AMOUNT*3.75, + ) construction_time = 400 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_HONK, @@ -972,7 +1218,10 @@ id = "borg_upgrade_restart" build_type = MECHFAB build_path = /obj/item/borg_restart_board - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*10, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5) + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT*10, + /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, + ) construction_time = 120 category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL @@ -983,7 +1232,12 @@ id = "borg_upgrade_thrusters" build_type = MECHFAB build_path = /obj/item/borg/upgrade/thrusters - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*5, /datum/material/glass =SHEET_MATERIAL_AMOUNT*3, /datum/material/plasma =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/uranium =SHEET_MATERIAL_AMOUNT*3) + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT*5, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*3, + /datum/material/plasma =SHEET_MATERIAL_AMOUNT * 2.5, + /datum/material/uranium =SHEET_MATERIAL_AMOUNT*3, + ) construction_time = 120 category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL @@ -994,7 +1248,12 @@ id = "borg_upgrade_disablercooler" build_type = MECHFAB build_path = /obj/item/borg/upgrade/disablercooler - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*10, /datum/material/glass =SHEET_MATERIAL_AMOUNT*3, /datum/material/gold =SHEET_MATERIAL_AMOUNT, /datum/material/diamond =SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT*10, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*3, + /datum/material/gold =SHEET_MATERIAL_AMOUNT, + /datum/material/diamond =SHEET_MATERIAL_AMOUNT, + ) construction_time = 120 category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_SECURITY @@ -1005,7 +1264,11 @@ id = "borg_upgrade_diamonddrill" build_type = MECHFAB build_path = /obj/item/borg/upgrade/ddrill - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5, /datum/material/glass =SHEET_MATERIAL_AMOUNT*3, /datum/material/diamond =SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*3, + /datum/material/diamond =SHEET_MATERIAL_AMOUNT, + ) construction_time = 80 category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MINING @@ -1016,7 +1279,11 @@ id = "borg_upgrade_holding" build_type = MECHFAB build_path = /obj/item/borg/upgrade/soh - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*5, /datum/material/gold =SHEET_MATERIAL_AMOUNT, /datum/material/uranium =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT*5, + /datum/material/gold =SHEET_MATERIAL_AMOUNT, + /datum/material/uranium =HALF_SHEET_MATERIAL_AMOUNT, + ) construction_time = 40 category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MINING @@ -1027,7 +1294,11 @@ id = "borg_upgrade_lavaproof" build_type = MECHFAB build_path = /obj/item/borg/upgrade/lavaproof - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*5, /datum/material/plasma =SHEET_MATERIAL_AMOUNT*2, /datum/material/titanium =SHEET_MATERIAL_AMOUNT * 2.5) + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT*5, + /datum/material/plasma =SHEET_MATERIAL_AMOUNT*2, + /datum/material/titanium =SHEET_MATERIAL_AMOUNT * 2.5, + ) construction_time = 120 category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MINING @@ -1038,7 +1309,11 @@ id = "borg_syndicate_module" build_type = MECHFAB build_path = /obj/item/borg/upgrade/syndicate - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*7.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT*7.5, /datum/material/diamond =SHEET_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/diamond =SHEET_MATERIAL_AMOUNT*5, + ) construction_time = 120 category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL @@ -1049,7 +1324,11 @@ id = "borg_transform_clown" build_type = MECHFAB build_path = /obj/item/borg/upgrade/transform/clown - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*7.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT*7.5, /datum/material/bananium =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/bananium =HALF_SHEET_MATERIAL_AMOUNT, + ) construction_time = 120 category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL @@ -1060,7 +1339,10 @@ id = "borg_upgrade_selfrepair" build_type = MECHFAB build_path = /obj/item/borg/upgrade/selfrepair - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*7.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT*7.5) + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*7.5, + ) construction_time = 80 category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL @@ -1071,7 +1353,12 @@ id = "borg_upgrade_expandedsynthesiser" build_type = MECHFAB build_path = /obj/item/borg/upgrade/hypospray/expanded - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*7.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT*7.5, /datum/material/plasma =SHEET_MATERIAL_AMOUNT*4, /datum/material/uranium =SHEET_MATERIAL_AMOUNT*4) + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/plasma =SHEET_MATERIAL_AMOUNT*4, + /datum/material/uranium =SHEET_MATERIAL_AMOUNT*4, + ) construction_time = 80 category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL @@ -1082,7 +1369,12 @@ id = "borg_upgrade_piercinghypospray" build_type = MECHFAB build_path = /obj/item/borg/upgrade/piercing_hypospray - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*7.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT*7.5, /datum/material/titanium =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/diamond =SHEET_MATERIAL_AMOUNT * 1.5) + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/titanium =SHEET_MATERIAL_AMOUNT * 2.5, + /datum/material/diamond =SHEET_MATERIAL_AMOUNT * 1.5, + ) construction_time = 80 category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL @@ -1093,7 +1385,12 @@ id = "borg_upgrade_defibrillator" build_type = MECHFAB build_path = /obj/item/borg/upgrade/defib - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*4, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/silver =SHEET_MATERIAL_AMOUNT*2, /datum/material/gold =SHEET_MATERIAL_AMOUNT * 1.5) + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT*4, + /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, + /datum/material/silver =SHEET_MATERIAL_AMOUNT*2, + /datum/material/gold =SHEET_MATERIAL_AMOUNT * 1.5, + ) construction_time = 80 category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL @@ -1104,7 +1401,11 @@ id = "borg_upgrade_surgicalprocessor" build_type = MECHFAB build_path = /obj/item/borg/upgrade/processor - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT*2, /datum/material/silver =SHEET_MATERIAL_AMOUNT*2) + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*2, + /datum/material/silver =SHEET_MATERIAL_AMOUNT*2, + ) construction_time = 40 category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL @@ -1115,7 +1416,10 @@ id = "borg_upgrade_trashofholding" build_type = MECHFAB build_path = /obj/item/borg/upgrade/tboh - materials = list(/datum/material/gold =SHEET_MATERIAL_AMOUNT, /datum/material/uranium =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/gold =SHEET_MATERIAL_AMOUNT, + /datum/material/uranium =HALF_SHEET_MATERIAL_AMOUNT, + ) construction_time = 40 category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_JANITOR @@ -1126,7 +1430,10 @@ id = "borg_upgrade_advancedmop" build_type = MECHFAB build_path = /obj/item/borg/upgrade/amop - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/glass =SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT, + /datum/material/glass =SHEET_MATERIAL_AMOUNT, + ) construction_time = 40 category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_JANITOR @@ -1137,7 +1444,10 @@ id = "borg_upgrade_prt" build_type = MECHFAB build_path = /obj/item/borg/upgrade/prt - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*1.125, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT*0.75) //same price as a cautery + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT*1.125, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT*0.75, + ) construction_time = 40 category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_JANITOR @@ -1148,7 +1458,10 @@ id = "borg_upgrade_rolling_table" build_type = MECHFAB build_path = /obj/item/borg/upgrade/rolling_table - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*10, /datum/material/titanium = SMALL_MATERIAL_AMOUNT*7.5) //steeper price than a regular rolling table, with some added titanium to make up for the relative rarity of regular rolling tables + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT*10, + /datum/material/titanium = SMALL_MATERIAL_AMOUNT*7.5, + ) //steeper price than a regular rolling table, with some added titanium to make up for the relative rarity of regular rolling tables construction_time = 4 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_SERVICE @@ -1159,7 +1472,12 @@ id = "borg_upgrade_condiment_synthesizer" build_type = MECHFAB build_path = /obj/item/borg/upgrade/condiment_synthesizer - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*7.5, /datum/material/glass = SHEET_MATERIAL_AMOUNT*6, /datum/material/plasma = SHEET_MATERIAL_AMOUNT*3, /datum/material/uranium = SHEET_MATERIAL_AMOUNT*3) //a bit cheaper than an expanded hypo for medical borg, + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT*6, + /datum/material/plasma = SHEET_MATERIAL_AMOUNT*3, + /datum/material/uranium = SHEET_MATERIAL_AMOUNT*3, + ) //a bit cheaper than an expanded hypo for medical borg, construction_time = 4 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_SERVICE @@ -1170,7 +1488,11 @@ id = "borg_upgrade_silicon_knife" build_type = MECHFAB build_path = /obj/item/borg/upgrade/silicon_knife - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*7.5, /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) construction_time = 4 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_SERVICE @@ -1181,7 +1503,10 @@ id = "borg_upgrade_drink_apparatus" build_type = MECHFAB build_path = /obj/item/borg/upgrade/drink_app - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + ) construction_time = 4 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_SERVICE @@ -1203,7 +1528,10 @@ id = "borg_upgrade_service_cookbook" build_type = MECHFAB build_path = /obj/item/borg/upgrade/service_cookbook - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*7.5, /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + ) construction_time = 4 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_SERVICE @@ -1214,7 +1542,10 @@ id = "borg_upgrade_expand" build_type = MECHFAB build_path = /obj/item/borg/upgrade/expand - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*100, /datum/material/titanium =SHEET_MATERIAL_AMOUNT * 2.5) + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT*100, + /datum/material/titanium =SHEET_MATERIAL_AMOUNT * 2.5, + ) construction_time = 120 category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL @@ -1225,7 +1556,11 @@ id = "borg_ai_control" build_type = MECHFAB build_path = /obj/item/borg/upgrade/ai - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT*1.2, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/gold =SMALL_MATERIAL_AMOUNT * 2) + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT*1.2, + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT * 1.5, + /datum/material/gold =SMALL_MATERIAL_AMOUNT * 2, + ) construction_time = 50 category = list( RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CONTROL_INTERFACES @@ -1237,7 +1572,21 @@ id = "borg_upgrade_rped" build_type = MECHFAB build_path = /obj/item/borg/upgrade/rped - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*5, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5) + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT*5, + /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, + ) + construction_time = 120 + category = list( + RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ENGINEERING + ) + +/datum/design/borg_upgrade_inducer + name = "Cyborg inducer" + id = "borg_upgrade_inducer" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/inducer + materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/silver = SHEET_MATERIAL_AMOUNT * 2) construction_time = 120 category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ENGINEERING @@ -1248,7 +1597,10 @@ id = "borg_upgrade_circuitapp" build_type = MECHFAB build_path = /obj/item/borg/upgrade/circuit_app - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/titanium =SMALL_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT, + /datum/material/titanium =SMALL_MATERIAL_AMOUNT*5, + ) construction_time = 120 category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ENGINEERING @@ -1259,7 +1611,10 @@ id = "borg_upgrade_beakerapp" build_type = MECHFAB build_path = /obj/item/borg/upgrade/beaker_app - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/glass = SHEET_MATERIAL_AMOUNT*1.125) //Need glass for the new beaker too + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT, + /datum/material/glass = SHEET_MATERIAL_AMOUNT*1.125, + ) //Need glass for the new beaker too construction_time = 120 category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL @@ -1270,7 +1625,10 @@ id = "borg_upgrade_pinpointer" build_type = MECHFAB build_path = /obj/item/borg/upgrade/pinpointer - materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, + ) construction_time = 120 category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL @@ -1281,7 +1639,10 @@ id = "borg_upgrade_broomer" build_type = MECHFAB build_path = /obj/item/borg/upgrade/broomer - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*2, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT*2, + /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, + ) construction_time = 120 category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_JANITOR @@ -1292,7 +1653,10 @@ desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity." id = "mmi" build_type = MECHFAB - materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, + ) construction_time = 75 build_path = /obj/item/mmi category = list( @@ -1313,7 +1677,11 @@ desc = "The latest in Artificial Intelligences." id = "mmi_posi" build_type = MECHFAB - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT*1.7, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT*1.35, /datum/material/gold =SMALL_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT*1.7, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT*1.35, + /datum/material/gold =SMALL_MATERIAL_AMOUNT*5 + ) construction_time = 75 build_path = /obj/item/mmi/posibrain category = list( @@ -1345,7 +1713,11 @@ id = "mecha_tracking_ai_control" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_tracking/ai_control - materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/silver =SMALL_MATERIAL_AMOUNT * 2) + materials = list( + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, + /datum/material/silver =SMALL_MATERIAL_AMOUNT * 2, + ) construction_time = 50 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_CONTROL_INTERFACES, @@ -1364,7 +1736,12 @@ id = "mecha_camera" build_type = MECHFAB build_path = /obj/item/mecha_parts/camera_kit - materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/plasma =SMALL_MATERIAL_AMOUNT * 2, /datum/material/titanium =SMALL_MATERIAL_AMOUNT * 2) + materials = list( + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, + /datum/material/plasma =SMALL_MATERIAL_AMOUNT * 2, + /datum/material/titanium =SMALL_MATERIAL_AMOUNT * 2, + ) construction_time = 50 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_CONTROL_INTERFACES, @@ -1382,7 +1759,10 @@ desc = "When a problem arises, SCIENCE is the solution." id = "sflash" build_type = MECHFAB - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 7.5) + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 7.5, + ) construction_time = 100 build_path = /obj/item/assembly/flash/handheld category = list( @@ -1400,7 +1780,10 @@ desc = "A 'Nakamura Engineering' designed shell for a Modular Suit." id = "mod_shell" build_type = MECHFAB - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*5, /datum/material/plasma =SHEET_MATERIAL_AMOUNT * 2.5) + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT*5, + /datum/material/plasma =SHEET_MATERIAL_AMOUNT * 2.5, + ) construction_time = 25 SECONDS build_path = /obj/item/mod/construction/shell category = list( @@ -1460,7 +1843,11 @@ desc = "External plating for a MODsuit." id = "mod_plating_standard" build_type = MECHFAB - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*3, /datum/material/glass =SHEET_MATERIAL_AMOUNT*1.5, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT*3, + /datum/material/glass =SHEET_MATERIAL_AMOUNT*1.5, + /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, + ) construction_time = 15 SECONDS build_path = /obj/item/mod/construction/plating category = list( @@ -1479,7 +1866,12 @@ name = "MOD Engineering Plating" id = "mod_plating_engineering" build_path = /obj/item/mod/construction/plating/engineering - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*3, /datum/material/gold =SHEET_MATERIAL_AMOUNT, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT*3, + /datum/material/gold =SHEET_MATERIAL_AMOUNT, + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, + ) departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING research_icon_state = "engineering-plating" @@ -1487,7 +1879,12 @@ name = "MOD Atmospheric Plating" id = "mod_plating_atmospheric" build_path = /obj/item/mod/construction/plating/atmospheric - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*3, /datum/material/titanium =SHEET_MATERIAL_AMOUNT, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT*3, + /datum/material/titanium =SHEET_MATERIAL_AMOUNT, + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, + ) departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING research_icon_state = "atmospheric-plating" @@ -1495,7 +1892,12 @@ name = "MOD Medical Plating" id = "mod_plating_medical" build_path = /obj/item/mod/construction/plating/medical - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*3, /datum/material/silver =SHEET_MATERIAL_AMOUNT, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT*3, + /datum/material/silver =SHEET_MATERIAL_AMOUNT, + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, + ) departmental_flags = DEPARTMENT_BITFLAG_MEDICAL research_icon_state = "medical-plating" @@ -1503,7 +1905,12 @@ name = "MOD Security Plating" id = "mod_plating_security" build_path = /obj/item/mod/construction/plating/security - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*3, /datum/material/uranium =SHEET_MATERIAL_AMOUNT, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT*3, + /datum/material/uranium =SHEET_MATERIAL_AMOUNT, + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, + ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY research_icon_state = "security-plating" @@ -1511,7 +1918,12 @@ name = "MOD Cosmohonk Plating" id = "mod_plating_cosmohonk" build_path = /obj/item/mod/construction/plating/cosmohonk - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*3, /datum/material/bananium =SHEET_MATERIAL_AMOUNT, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT*3, + /datum/material/bananium =SHEET_MATERIAL_AMOUNT, + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, + ) departmental_flags = DEPARTMENT_BITFLAG_SERVICE research_icon_state = "cosmohonk-plating" @@ -1520,7 +1932,10 @@ desc = "A paint kit for Modular Suits." id = "mod_paint_kit" build_type = MECHFAB - materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plastic =SMALL_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plastic =SMALL_MATERIAL_AMOUNT*5, + ) construction_time = 5 SECONDS build_path = /obj/item/mod/paint category = list( @@ -1532,7 +1947,11 @@ desc = "A neck-worn piece of gear that can call with another MODlink-compatible device." id = "modlink_scryer" build_type = MECHFAB - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3) + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, + ) construction_time = 5 SECONDS build_path = /obj/item/clothing/neck/link_scryer category = list( @@ -1545,7 +1964,10 @@ name = "MOD Module" build_type = MECHFAB construction_time = 1 SECONDS - materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_GENERAL @@ -1559,19 +1981,28 @@ /datum/design/module/mod_storage name = "Storage Module" id = "mod_storage" - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT *1.25, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT *1.25, + /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, + ) build_path = /obj/item/mod/module/storage /datum/design/module/mod_storage_expanded name = "Expanded Storage Module" id = "mod_storage_expanded" - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/uranium =SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, + /datum/material/uranium =SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/storage/large_capacity /datum/design/module/mod_visor_medhud name = "Medical Visor Module" id = "mod_visor_medhud" - materials = list(/datum/material/silver =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/silver =SMALL_MATERIAL_AMOUNT*5, + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/visor/medhud category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_MEDICAL @@ -1580,7 +2011,10 @@ /datum/design/module/mod_visor_diaghud name = "Diagnostic Visor Module" id = "mod_visor_diaghud" - materials = list(/datum/material/gold =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/gold =SMALL_MATERIAL_AMOUNT*5, + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/visor/diaghud category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SCIENCE @@ -1588,7 +2022,10 @@ /datum/design/module/mod_visor_sechud name = "Security Visor Module" id = "mod_visor_sechud" - materials = list(/datum/material/titanium =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/titanium =SMALL_MATERIAL_AMOUNT*5, + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/visor/sechud category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SECURITY @@ -1596,7 +2033,10 @@ /datum/design/module/mod_visor_meson name = "Meson Visor Module" id = "mod_visor_meson" - materials = list(/datum/material/uranium =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/uranium =SMALL_MATERIAL_AMOUNT*5, + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/visor/meson category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SUPPLY @@ -1604,7 +2044,10 @@ /datum/design/module/mod_visor_welding name = "Welding Protection Module" id = "mod_welding" - materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron =SMALL_MATERIAL_AMOUNT*5, + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/welding category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_ENGINEERING @@ -1612,7 +2055,10 @@ /datum/design/module/mod_t_ray name = "T-Ray Scanner Module" id = "mod_t_ray" - materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron =SMALL_MATERIAL_AMOUNT*5, + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/t_ray category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_ENGINEERING @@ -1620,7 +2066,10 @@ /datum/design/module/mod_health_analyzer name = "Health Analyzer Module" id = "mod_health_analyzer" - materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron =SMALL_MATERIAL_AMOUNT*5, + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/health_analyzer category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_MEDICAL @@ -1629,7 +2078,10 @@ /datum/design/module/mod_stealth name = "Cloak Module" id = "mod_stealth" - materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace =SMALL_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/bluespace =SMALL_MATERIAL_AMOUNT*5, + ) build_path = /obj/item/mod/module/stealth category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SECURITY @@ -1643,7 +2095,10 @@ /datum/design/module/mod_magboot name = "Magnetic Stabilizator Module" id = "mod_magboot" - materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold =SMALL_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold =SMALL_MATERIAL_AMOUNT*5, + ) build_path = /obj/item/mod/module/magboot category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_ENGINEERING @@ -1652,7 +2107,10 @@ /datum/design/module/mod_mag_harness name = "Magnetic Harness Module" id = "mod_mag_harness" - materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/silver =SMALL_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT * 1.5, + /datum/material/silver =SMALL_MATERIAL_AMOUNT*5, + ) build_path = /obj/item/mod/module/magnetic_harness category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SECURITY @@ -1661,7 +2119,10 @@ /datum/design/module/mod_tether name = "Emergency Tether Module" id = "mod_tether" - materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver =SMALL_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver =SMALL_MATERIAL_AMOUNT*5, + ) build_path = /obj/item/mod/module/tether category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_ENGINEERING @@ -1676,7 +2137,10 @@ /datum/design/module/mod_rad_protection name = "Radiation Protection Module" id = "mod_rad_protection" - materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/uranium =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/uranium =HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/rad_protection category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_ENGINEERING @@ -1684,13 +2148,19 @@ /datum/design/module/mod_emp_shield name = "EMP Shield Module" id = "mod_emp_shield" - materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/emp_shield /datum/design/module/mod_flashlight name = "Flashlight Module" id = "mod_flashlight" - materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron =SMALL_MATERIAL_AMOUNT*5, + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/flashlight /datum/design/module/mod_reagent_scanner @@ -1705,7 +2175,10 @@ /datum/design/module/mod_gps name = "Internal GPS Module" id = "mod_gps" - materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron =SMALL_MATERIAL_AMOUNT*5, + /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, + ) build_path = /obj/item/mod/module/gps category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SUPPLY @@ -1714,7 +2187,10 @@ /datum/design/module/mod_constructor name = "Constructor Module" id = "mod_constructor" - materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium =SMALL_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/titanium =SMALL_MATERIAL_AMOUNT*5, + ) build_path = /obj/item/mod/module/constructor category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_ENGINEERING @@ -1722,7 +2198,10 @@ /datum/design/module/mod_quick_carry name = "Quick Carry Module" id = "mod_quick_carry" - materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium =SMALL_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/titanium =SMALL_MATERIAL_AMOUNT*5, + ) build_path = /obj/item/mod/module/quick_carry category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_MEDICAL @@ -1737,13 +2216,19 @@ /datum/design/module/mod_thermal_regulator name = "Thermal Regulator Module" id = "mod_thermal_regulator" - materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron =SMALL_MATERIAL_AMOUNT*5, + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/thermal_regulator /datum/design/module/mod_injector name = "Injector Module" id = "mod_injector" - materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/diamond =SMALL_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond =SMALL_MATERIAL_AMOUNT*5, + ) build_path = /obj/item/mod/module/injector category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_MEDICAL @@ -1752,7 +2237,10 @@ /datum/design/module/mod_bikehorn name = "Bike Horn Module" id = "mod_bikehorn" - materials = list(/datum/material/plastic =SMALL_MATERIAL_AMOUNT*5, /datum/material/iron =SMALL_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/plastic =SMALL_MATERIAL_AMOUNT*5, + /datum/material/iron =SMALL_MATERIAL_AMOUNT*5, + ) build_path = /obj/item/mod/module/bikehorn category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SERVICE @@ -1761,7 +2249,10 @@ /datum/design/module/mod_microwave_beam name = "Microwave Beam Module" id = "mod_microwave_beam" - materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/uranium =SMALL_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/uranium =SMALL_MATERIAL_AMOUNT*5, + ) build_path = /obj/item/mod/module/microwave_beam category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SERVICE @@ -1770,7 +2261,10 @@ /datum/design/module/mod_waddle name = "Waddle Module" id = "mod_waddle" - materials = list(/datum/material/plastic =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/plastic =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/waddle category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SERVICE @@ -1788,7 +2282,10 @@ /datum/design/module/mod_drill name = "Drill Module" id = "mod_drill" - materials = list(/datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/iron =SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/iron =SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/drill category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SUPPLY @@ -1806,7 +2303,10 @@ /datum/design/module/mod_organ_thrower name = "Organ Thrower Module" id = "mod_organ_thrower" - materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/organ_thrower category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_MEDICAL @@ -1815,31 +2315,46 @@ /datum/design/module/mod_pathfinder name = "Pathfinder Module" id = "mod_pathfinder" - materials = list(/datum/material/uranium =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/uranium =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/pathfinder /datum/design/module/mod_dna_lock name = "DNA Lock Module" id = "mod_dna_lock" - materials = list(/datum/material/diamond =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/diamond =SMALL_MATERIAL_AMOUNT*5, + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/dna_lock /datum/design/module/mod_plasma_stabilizer name = "Plasma Stabilizer Module" id = "mod_plasma" - materials = list(/datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/plasma_stabilizer /datum/design/module/mod_glove_translator name = "Glove Translator Module" id = "mod_sign_radio" - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5, + /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, + ) build_path = /obj/item/mod/module/signlang_radio /datum/design/module/mister_atmos name = "Resin Mister Module" id = "mod_mister_atmos" - materials = list(/datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium =HALF_SHEET_MATERIAL_AMOUNT * 1.5) + materials = list( + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/titanium =HALF_SHEET_MATERIAL_AMOUNT * 1.5, + ) build_path = /obj/item/mod/module/mister/atmos category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_ENGINEERING @@ -1848,7 +2363,10 @@ /datum/design/module/mod_holster name = "Holster Module" id = "mod_holster" - materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT * 1.5, + /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, + ) build_path = /obj/item/mod/module/holster category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SECURITY @@ -1857,7 +2375,12 @@ /datum/design/module/mod_sonar name = "Active Sonar Module" id = "mod_sonar" - materials = list(/datum/material/titanium = SMALL_MATERIAL_AMOUNT * 2.5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold =SMALL_MATERIAL_AMOUNT*5, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 2.5) + materials = list( + /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 2.5, + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold =SMALL_MATERIAL_AMOUNT*5, + /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 2.5, + ) build_path = /obj/item/mod/module/active_sonar category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SECURITY @@ -1866,7 +2389,10 @@ /datum/design/module/projectile_dampener name = "Projectile Dampener Module" id = "mod_projectile_dampener" - materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace =SMALL_MATERIAL_AMOUNT*5) + materials = list( + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/bluespace =SMALL_MATERIAL_AMOUNT*5, + ) build_path = /obj/item/mod/module/projectile_dampener category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SECURITY @@ -1875,7 +2401,11 @@ /datum/design/module/surgicalprocessor name = "Surgical Processor Module" id = "mod_surgicalprocessor" - materials = list(/datum/material/titanium = SMALL_MATERIAL_AMOUNT * 2.5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT * 1.5) + materials = list( + /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 2.5, + /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT * 1.5, + ) build_path = /obj/item/mod/module/surgical_processor category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_MEDICAL @@ -1884,7 +2414,11 @@ /datum/design/module/threadripper name = "Thread Ripper Module" id = "mod_threadripper" - materials = list(/datum/material/titanium = SMALL_MATERIAL_AMOUNT * 2.5, /datum/material/plastic =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT * 1.5) + materials = list( + /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 2.5, + /datum/material/plastic =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT * 1.5, + ) build_path = /obj/item/mod/module/thread_ripper category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_MEDICAL @@ -1893,7 +2427,11 @@ /datum/design/module/defibrillator name = "Defibrillator Module" id = "mod_defib" - materials = list(/datum/material/titanium = SMALL_MATERIAL_AMOUNT * 2.5, /datum/material/diamond =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT * 1.5) + materials = list( + /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 2.5, + /datum/material/diamond =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT * 1.5, + ) build_path = /obj/item/mod/module/defibrillator category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_MEDICAL @@ -1915,7 +2453,10 @@ /datum/design/module/patienttransport name = "Patient Transport Module" id = "mod_patienttransport" - materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/bluespace =HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/criminalcapture/patienttransport category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_MEDICAL @@ -1924,7 +2465,10 @@ /datum/design/module/criminalcapture name = "Criminal Capture Module" id = "mod_criminalcapture" - materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/bluespace =HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/criminalcapture category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SECURITY @@ -1934,7 +2478,10 @@ /datum/design/module/disposal name = "Disposal Connector Module" id = "mod_disposal" - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT *1.25, /datum/material/titanium =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT *1.25, + /datum/material/titanium =HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/disposal_connector category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SUPPLY @@ -1943,7 +2490,11 @@ /datum/design/module/joint_torsion name = "Joint Torsion Ratchet Module" id = "mod_joint_torsion" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = SMALL_MATERIAL_AMOUNT*2.5, /datum/material/titanium = SMALL_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = SMALL_MATERIAL_AMOUNT*2.5, + /datum/material/titanium = SMALL_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/joint_torsion category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUITS_MISC @@ -1952,7 +2503,11 @@ /datum/design/module/recycler name = "Recycler Module" id = "mod_recycler" - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plastic = SMALL_MATERIAL_AMOUNT*2) + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plastic = SMALL_MATERIAL_AMOUNT*2, + ) build_path = /obj/item/mod/module/recycler category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SERVICE @@ -1961,7 +2516,12 @@ /datum/design/module/shooting_assistant name = "Shooting Assistant Module" id = "mod_shooting" - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT, /datum/material/silver = SMALL_MATERIAL_AMOUNT*2, /datum/material/gold = SMALL_MATERIAL_AMOUNT, /datum/material/diamond = SMALL_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT, + /datum/material/silver = SMALL_MATERIAL_AMOUNT*2, + /datum/material/gold = SMALL_MATERIAL_AMOUNT, + /datum/material/diamond = SMALL_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/shooting_assistant category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SECURITY @@ -1971,7 +2531,11 @@ /datum/design/module/mod_antigrav name = "Anti-Gravity Module" id = "mod_antigrav" - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT *1.25, /datum/material/glass =SHEET_MATERIAL_AMOUNT, /datum/material/uranium =SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT *1.25, + /datum/material/glass =SHEET_MATERIAL_AMOUNT, + /datum/material/uranium =SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/anomaly_locked/antigrav category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SCIENCE @@ -1980,7 +2544,11 @@ /datum/design/module/mod_teleporter name = "Teleporter Module" id = "mod_teleporter" - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT *1.25, /datum/material/glass =SHEET_MATERIAL_AMOUNT, /datum/material/bluespace =SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT *1.25, + /datum/material/glass =SHEET_MATERIAL_AMOUNT, + /datum/material/bluespace =SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/anomaly_locked/teleporter category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SCIENCE @@ -1989,7 +2557,12 @@ /datum/design/module/mod_kinesis name = "Kinesis Module" id = "mod_kinesis" - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT *1.25, /datum/material/glass =SHEET_MATERIAL_AMOUNT, /datum/material/uranium =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace =HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT *1.25, + /datum/material/glass =SHEET_MATERIAL_AMOUNT, + /datum/material/uranium =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/bluespace =HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/mod/module/anomaly_locked/kinesis category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_ENGINEERING diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 285878e7f2647f..9f83ae957ee55d 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -352,13 +352,35 @@ desc = "A portable, foldable version of the medical bed. Perfect for paramedics or whenever you have mass casualties!" id = "medicalbed_emergency" build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/titanium = SHEET_MATERIAL_AMOUNT * 2.7, /datum/material/plastic = SHEET_MATERIAL_AMOUNT * 1.7, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 5, /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 5) + materials = list(/datum/material/titanium = SHEET_MATERIAL_AMOUNT * 2.7, /datum/material/plastic = SHEET_MATERIAL_AMOUNT * 1.7) build_path = /obj/item/emergency_bed category = list( RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL ) departmental_flags = DEPARTMENT_BITFLAG_MEDICAL +/datum/design/penlight + name = "Penlight" + id = "penlight" + 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/flashlight/pen + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/penlight_paramedic + name = "Paramedic Penlight" + id = "penlight_paramedic" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*1) + build_path = /obj/item/flashlight/pen/paramedic + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + ///////////////////////////////////////// //////////Cybernetic Implants//////////// ///////////////////////////////////////// diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index fcbf39ec794fff..aebfe21a82a7f4 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -411,7 +411,7 @@ category = list( RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_MISC ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SERVICE /datum/design/oxygen_tank name = "Oxygen Tank" @@ -474,7 +474,7 @@ /datum/design/plasticducky name = "Rubber Ducky" - desc = "The classic Nanotrasen design for competitively priced bath based duck toys. No need for fancy Waffle co. rubber, buy Plastic Ducks today!" + desc = "The classic Symphionia design for competitively priced bath based duck toys. No need for fancy Waffle co. rubber, buy Plastic Ducks today!" id = "plasticducky" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic =HALF_SHEET_MATERIAL_AMOUNT) @@ -809,7 +809,7 @@ /datum/design/inspector name = "N-Spect Scanner" - desc = "Central Command-issued inspection device. Performs inspections according to Nanotrasen protocols when activated, then prints an encrypted report regarding the maintenance of the station. Definitely not giving you cancer." + desc = "Conglomeration of Colonists-issued inspection device. Performs inspections according to Symphionia protocols when activated, then prints an encrypted report regarding the maintenance of the station. Definitely not giving you cancer." id = "inspector" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/uranium =SHEET_MATERIAL_AMOUNT) @@ -819,6 +819,17 @@ ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY +/datum/design/sec_pen + name = "Security Pen" + id = "sec_pen" + build_type = PROTOLATHE | AUTOLATHE + materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT) + build_path = /obj/item/pen/red/security + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + /datum/design/plumbing_rcd name = "Plumbing Constructor" id = "plumbing_rcd" diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm index ea617f36428b33..80844562eb4f0a 100644 --- a/code/modules/research/designs/power_designs.dm +++ b/code/modules/research/designs/power_designs.dm @@ -77,7 +77,19 @@ category = list( RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING ) - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/inducerengi + name = "Inducer" + desc = "The NT-75 Electromagnetic Power Inducer can wirelessly induce electric charge in an object, allowing you to recharge power cells without having to remove them." + id = "inducerengi" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT) + build_path = /obj/item/inducer/empty + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING /datum/design/board/pacman name = "PACMAN Board" diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index cf2722514f0703..224ab7a1a4f5ee 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -217,18 +217,6 @@ departmental_flags = DEPARTMENT_BITFLAG_SECURITY autolathe_exportable = FALSE -/datum/design/decloner - name = "Decloner Part Kit (Lethal)" - desc = "Your opponent will bubble into a messy pile of goop." - id = "decloner" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/gold =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/uranium = SHEET_MATERIAL_AMOUNT * 5) - build_path = /obj/item/weaponcrafting/gunkit/decloner - category = list( - RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_KITS - ) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY - autolathe_exportable = FALSE /datum/design/rapidsyringe name = "Rapid Syringe Gun" diff --git a/code/modules/research/designs/wiremod_designs.dm b/code/modules/research/designs/wiremod_designs.dm index a3b4a9a88660a8..3606dd67e2e608 100644 --- a/code/modules/research/designs/wiremod_designs.dm +++ b/code/modules/research/designs/wiremod_designs.dm @@ -61,6 +61,11 @@ id = "comp_trigonometry" build_path = /obj/item/circuit_component/trigonometry +/datum/design/component/arctan2 + name = "Arctangent 2 Component" + id = "comp_arctan2" + build_path = /obj/item/circuit_component/arctan2 + /datum/design/component/clock name = "Clock Component" id = "comp_clock" @@ -352,15 +357,10 @@ id = "comp_pinpointer" build_path = /obj/item/circuit_component/pinpointer -/datum/design/component/bci - category = list( - RND_CATEGORY_CIRCUITRY + RND_SUBCATEGORY_CIRCUITRY_BCI_COMPONENTS - ) - -/datum/design/component/bci/bci_action - name = "BCI Action Component" - id = "comp_bci_action" - build_path = /obj/item/circuit_component/equipment_action/bci +/datum/design/component/equipment_action + name = "Equipment Action Component" + id = "comp_equip_action" + build_path = /obj/item/circuit_component/equipment_action /datum/design/component/bci/object_overlay name = "Object Overlay Component" @@ -412,11 +412,6 @@ id = "comp_filter_list" build_path = /obj/item/circuit_component/filter_list -/datum/design/component/mod_action - name = "MOD Action Component" - id = "comp_mod_action" - build_path = /obj/item/circuit_component/equipment_action/mod - /datum/design/component/id_getter name = "ID Getter Component" id = "comp_id_getter" diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 2d1e786208cfd8..72fd12ced70467 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -1,225 +1,190 @@ -/* -Destructive Analyzer - -It is used to destroy hand-held objects and advance technological research. Controls are in the linked R&D console. - -Note: Must be placed within 3 tiles of the R&D Console -*/ +///How much power it costs to deconstruct an item. +#define DESTRUCTIVE_ANALYZER_POWER_USAGE (BASE_MACHINE_IDLE_CONSUMPTION * 2.5) +///The 'ID' for deconstructing items for Research points instead of nodes. +#define DESTRUCTIVE_ANALYZER_DESTROY_POINTS "research_points" + +/** + * ## Destructive Analyzer + * It is used to destroy hand-held objects and advance technological research. + */ /obj/machinery/rnd/destructive_analyzer name = "destructive analyzer" desc = "Learn science by destroying things!" icon_state = "d_analyzer" base_icon_state = "d_analyzer" circuit = /obj/item/circuitboard/machine/destructive_analyzer - var/decon_mod = 0 -/obj/machinery/rnd/destructive_analyzer/RefreshParts() +/obj/machinery/rnd/destructive_analyzer/Initialize(mapload) . = ..() - var/T = 0 - for(var/datum/stock_part/stock_part in component_parts) - T += stock_part.tier - decon_mod = T - -/obj/machinery/rnd/destructive_analyzer/proc/ConvertReqString2List(list/source_list) - var/list/temp_list = params2list(source_list) - for(var/O in temp_list) - temp_list[O] = text2num(temp_list[O]) - return temp_list - -/obj/machinery/rnd/destructive_analyzer/Insert_Item(obj/item/O, mob/living/user) - if(!user.combat_mode) - . = 1 - if(!is_insertion_ready(user)) - return - if(!user.transferItemToLoc(O, src)) - to_chat(user, span_warning("\The [O] is stuck to your hand, you cannot put it in the [src.name]!")) - return - busy = TRUE - loaded_item = O - to_chat(user, span_notice("You add the [O.name] to the [src.name]!")) - flick("d_analyzer_la", src) - addtimer(CALLBACK(src, PROC_REF(finish_loading)), 10) - updateUsrDialog() + register_context() + +/obj/machinery/rnd/destructive_analyzer/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) + if(loaded_item) + context[SCREENTIP_CONTEXT_ALT_LMB] = "Remove Item" + else if(!isnull(held_item)) + context[SCREENTIP_CONTEXT_LMB] = "Insert Item" + return CONTEXTUAL_SCREENTIP_SET + +/obj/machinery/rnd/destructive_analyzer/attackby(obj/item/weapon, mob/living/user, params) + if(user.combat_mode) + return ..() + if(!is_insertion_ready(user)) + return ..() + if(!user.transferItemToLoc(weapon, src)) + to_chat(user, span_warning("\The [weapon] is stuck to your hand, you cannot put it in the [name]!")) + return TRUE + busy = TRUE + loaded_item = weapon + to_chat(user, span_notice("You add the [weapon.name] to the [name]!")) + flick("[base_icon_state]_la", src) + addtimer(CALLBACK(src, PROC_REF(finish_loading)), 1 SECONDS) + return TRUE -/obj/machinery/rnd/destructive_analyzer/proc/finish_loading() - update_appearance() - reset_busy() +/obj/machinery/rnd/destructive_analyzer/AltClick(mob/user) + . = ..() + unload_item() /obj/machinery/rnd/destructive_analyzer/update_icon_state() icon_state = "[base_icon_state][loaded_item ? "_l" : null]" return ..() -/obj/machinery/rnd/destructive_analyzer/proc/destroy_item(obj/item/thing, innermode = FALSE) - if(QDELETED(thing) || QDELETED(src)) - return FALSE - if(!innermode) - flick("d_analyzer_process", src) - busy = TRUE - addtimer(CALLBACK(src, PROC_REF(reset_busy)), 24) - use_power(250) - if(thing == loaded_item) - loaded_item = null - var/list/food = thing.GetDeconstructableContents() - for(var/obj/item/innerthing in food) - destroy_item(innerthing, TRUE) - for(var/mob/living/victim in thing) - if(victim.stat != DEAD) - victim.investigate_log("has been killed by a destructive analyzer.", INVESTIGATE_DEATHS) - victim.death() - - qdel(thing) - loaded_item = null - if (!innermode) - update_appearance() - return TRUE +/obj/machinery/rnd/destructive_analyzer/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "DestructiveAnalyzer") + ui.open() + +/obj/machinery/rnd/destructive_analyzer/ui_data(mob/user) + var/list/data = list() + data["server_connected"] = !!stored_research + data["node_data"] = list() + if(loaded_item) + data["item_icon"] = icon2base64(getFlatIcon(image(icon = loaded_item.icon, icon_state = loaded_item.icon_state), no_anim = TRUE)) + data["indestructible"] = !(loaded_item.resistance_flags & INDESTRUCTIBLE) + data["loaded_item"] = loaded_item + data["already_deconstructed"] = !!stored_research.deconstructed_items[loaded_item.type] + var/list/points = techweb_item_point_check(loaded_item) + data["recoverable_points"] = techweb_point_display_generic(points) + + var/list/boostable_nodes = techweb_item_unlock_check(loaded_item) + for(var/id in boostable_nodes) + var/datum/techweb_node/unlockable_node = SSresearch.techweb_node_by_id(id) + var/list/node_data = list() + node_data["node_name"] = unlockable_node.display_name + node_data["node_id"] = unlockable_node.id + node_data["node_hidden"] = !!stored_research.hidden_nodes[unlockable_node.id] + data["node_data"] += list(node_data) + else + data["loaded_item"] = null + return data -/obj/machinery/rnd/destructive_analyzer/proc/user_try_decon_id(id, mob/user) - if(!istype(loaded_item)) - return FALSE +/obj/machinery/rnd/destructive_analyzer/ui_static_data(mob/user) + var/list/data = list() + data["research_point_id"] = DESTRUCTIVE_ANALYZER_DESTROY_POINTS + return data - if (id && id != RESEARCH_MATERIAL_DESTROY_ID) - var/datum/techweb_node/TN = SSresearch.techweb_node_by_id(id) - if(!istype(TN)) - return FALSE - var/dpath = loaded_item.type - var/list/worths = TN.boost_item_paths[dpath] - var/list/differences = list() - var/list/already_boosted = stored_research.boosted_nodes[TN.id] - for(var/i in worths) - var/used = already_boosted? already_boosted[i] : 0 - var/value = min(worths[i], TN.research_costs[i]) - used - if(value > 0) - differences[i] = value - if(length(worths) && !length(differences)) - return FALSE - var/choice = tgui_alert(user, "Are you sure you want to destroy [loaded_item] to [!length(worths) ? "reveal [TN.display_name]" : "boost [TN.display_name] by [json_encode(differences)] point\s"]?", "Destructive Analyzer", list("Proceed", "Cancel")) - if(choice != "Proceed") - return FALSE - if(QDELETED(loaded_item) || QDELETED(src)) - return FALSE - SSblackbox.record_feedback("nested tally", "item_deconstructed", 1, list("[TN.id]", "[loaded_item.type]")) - if(destroy_item(loaded_item)) - stored_research.boost_with_item(SSresearch.techweb_node_by_id(TN.id), dpath) +/obj/machinery/rnd/destructive_analyzer/ui_act(action, params, datum/tgui/ui) + . = ..() + if(.) + return - else - var/list/point_value = techweb_item_point_check(loaded_item) - if(stored_research.deconstructed_items[loaded_item.type]) - point_value = list() - var/user_mode_string = "" - if(length(point_value)) - user_mode_string = " for [json_encode(point_value)] points" - var/choice = tgui_alert(usr, "Are you sure you want to destroy [loaded_item][user_mode_string]?",, list("Proceed", "Cancel")) - if(choice == "Cancel") - return FALSE - if(QDELETED(loaded_item) || QDELETED(src)) - return FALSE - destroy_item(loaded_item) - return TRUE + var/mob/user = usr + switch(action) + if("eject_item") + if(busy) + balloon_alert(user, "already busy!") + return TRUE + if(loaded_item) + unload_item() + return TRUE + if("deconstruct") + if(!user_try_decon_id(params["deconstruct_id"])) + say("Destructive analysis failed!") + return TRUE + +//This allows people to put syndicate screwdrivers in the machine. Secondary act still passes. +/obj/machinery/rnd/destructive_analyzer/screwdriver_act(mob/living/user, obj/item/tool) + return FALSE +///Drops the loaded item where it can and nulls it. /obj/machinery/rnd/destructive_analyzer/proc/unload_item() if(!loaded_item) return FALSE - loaded_item.forceMove(get_turf(src)) + playsound(loc, 'sound/machines/terminal_insert_disc.ogg', 30, FALSE) + loaded_item.forceMove(drop_location()) loaded_item = null - update_appearance() + update_appearance(UPDATE_ICON) return TRUE -/obj/machinery/rnd/destructive_analyzer/ui_interact(mob/user) - . = ..() - var/datum/browser/popup = new(user, "destructive_analyzer", name, 900, 600) - popup.set_content(ui_deconstruct()) - popup.open() +///Called in a timer callback after loading something into it, this handles resetting the 'busy' state back to its initial state +///So the machine can be used. +/obj/machinery/rnd/destructive_analyzer/proc/finish_loading() + update_appearance(UPDATE_ICON) + reset_busy() -/obj/machinery/rnd/destructive_analyzer/proc/ui_deconstruct() //Legacy code - var/list/l = list() - if(!loaded_item) - l += "
    No item loaded. Standing-by...
    " - else - l += "
    [RDSCREEN_NOBREAK]" - l += "
    [icon2html(loaded_item, usr)][loaded_item.name] Eject
    [RDSCREEN_NOBREAK]" - l += "Select a node to boost by deconstructing this item. This item can boost:" +/** + * Destroys an item by going through all its contents (including itself) and calling destroy_item_individual + * Args: + * gain_research_points - Whether deconstructing each individual item should check for research points to boost. + */ +/obj/machinery/rnd/destructive_analyzer/proc/destroy_item(gain_research_points = FALSE) + if(QDELETED(loaded_item) || QDELETED(src)) + return FALSE + flick("[base_icon_state]_process", src) + busy = TRUE + addtimer(CALLBACK(src, PROC_REF(reset_busy)), 2.4 SECONDS) + use_power(DESTRUCTIVE_ANALYZER_POWER_USAGE) + var/list/all_contents = loaded_item.get_all_contents() + for(var/innerthing in all_contents) + destroy_item_individual(innerthing, gain_research_points) - var/anything = FALSE - var/list/boostable_nodes = techweb_item_boost_check(loaded_item) - for(var/id in boostable_nodes) - anything = TRUE - var/list/worth = boostable_nodes[id] - var/datum/techweb_node/N = SSresearch.techweb_node_by_id(id) - - l += "
    [RDSCREEN_NOBREAK]" - if (stored_research.researched_nodes[N.id]) // already researched - l += "[N.display_name]" - l += "This node has already been researched." - else if(!length(worth)) // reveal only - if (stored_research.hidden_nodes[N.id]) - l += "[N.display_name]" - l += "This node will be revealed." - else - l += "[N.display_name]" - l += "This node has already been revealed." - else // boost by the difference - var/list/differences = list() - var/list/already_boosted = stored_research.boosted_nodes[N.id] - for(var/i in worth) - var/already_boosted_amount = already_boosted? stored_research.boosted_nodes[N.id][i] : 0 - var/amt = min(worth[i], N.research_costs[i]) - already_boosted_amount - if(amt > 0) - differences[i] = amt - if (length(differences)) - l += "[N.display_name]" - l += "This node will be boosted with the following:
    [techweb_point_display_generic(differences)]" - else - l += "[N.display_name]" - l += "This node has already been boosted." - l += "
    [RDSCREEN_NOBREAK]" - - var/list/point_values = techweb_item_point_check(loaded_item) - if(point_values) - anything = TRUE - l += "
    [RDSCREEN_NOBREAK]" - if (stored_research.deconstructed_items[loaded_item.type]) - l += "Point Deconstruction" - l += "This item's points have already been claimed." - else - l += "Point Deconstruction" - l += "This item is worth:
    [techweb_point_display_generic(point_values)]!" - l += "
    [RDSCREEN_NOBREAK]" - - if(!(loaded_item.resistance_flags & INDESTRUCTIBLE)) - l += "
    Destroy Item" - l += "
    [RDSCREEN_NOBREAK]" - anything = TRUE - - if (!anything) - l += "Nothing!" - - l += "
    " - - for(var/i in 1 to length(l)) - if(!findtextEx(l[i], RDSCREEN_NOBREAK)) - l[i] += "
    " - . = l.Join("") - return replacetextEx(., RDSCREEN_NOBREAK, "") - -/obj/machinery/rnd/destructive_analyzer/Topic(raw, ls) - . = ..() - if(.) - return + loaded_item = null + update_appearance(UPDATE_ICON) + return TRUE + +/** + * Destroys the individual provided item + * Args: + * thing - The thing being destroyed. Generally an object, but it can be a mob too, such as intellicards and pAIs. + * gain_research_points - Whether deconstructing this should give research points to the stored techweb, if applicable. + */ +/obj/machinery/rnd/destructive_analyzer/proc/destroy_item_individual(obj/item/thing, gain_research_points = FALSE) + if(isliving(thing)) + var/mob/living/mob_thing = thing + if(mob_thing.stat != DEAD) + mob_thing.investigate_log("has been killed by a destructive analyzer.", INVESTIGATE_DEATHS) + mob_thing.death() + var/list/point_value = techweb_item_point_check(thing) + if(point_value && !stored_research.deconstructed_items[thing.type]) + stored_research.deconstructed_items[thing.type] = TRUE + stored_research.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = point_value)) + qdel(thing) - add_fingerprint(usr) - usr.set_machine(src) +/** + * Attempts to destroy the loaded item using a provided research id. + * Args: + * id - The techweb ID node that we're meant to unlock if applicable. + */ +/obj/machinery/rnd/destructive_analyzer/proc/user_try_decon_id(id) + if(!istype(loaded_item)) + return FALSE + if(isnull(id)) + return FALSE - if(ls["eject_item"]) //Eject the item inside the destructive analyzer. - if(busy) - to_chat(usr, span_danger("The destructive analyzer is busy at the moment.")) - return - if(loaded_item) - unload_item() - if(ls["deconstruct"]) - if(!user_try_decon_id(ls["deconstruct"], usr)) - say("Destructive analysis failed!") + var/item_type = loaded_item.type + if(id == DESTRUCTIVE_ANALYZER_DESTROY_POINTS) + if(!destroy_item(gain_research_points = TRUE)) + return FALSE + return TRUE - updateUsrDialog() + var/datum/techweb_node/node_to_discover = SSresearch.techweb_node_by_id(id) + if(!istype(node_to_discover)) + return FALSE + if(!destroy_item()) + return FALSE + SSblackbox.record_feedback("nested tally", "item_deconstructed", 1, list("[node_to_discover.id]", "[item_type]")) + stored_research.unhide_node(node_to_discover) + return TRUE -/obj/machinery/rnd/destructive_analyzer/screwdriver_act(mob/living/user, obj/item/tool) - return FALSE +#undef DESTRUCTIVE_ANALYZER_DESTROY_POINTS +#undef DESTRUCTIVE_ANALYZER_POWER_USAGE diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 6a090693ffd37a..a1bf7cfa77545b 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -17,7 +17,7 @@ #define EFFECT_PROB_VERYHIGH 95 #define FAIL 8 -/obj/machinery/rnd/experimentor//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/machinery/rnd/experimentor//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "\improper E.X.P.E.R.I-MENTOR" desc = "A \"replacement\" for the destructive analyzer with a slight tendency to catastrophically fail." icon = 'icons/obj/machines/experimentator.dmi' @@ -26,6 +26,7 @@ density = TRUE use_power = IDLE_POWER_USE circuit = /obj/item/circuitboard/machine/experimentor + interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON|INTERACT_MACHINE_SET_MACHINE var/recentlyExperimented = 0 /// Weakref to the first ian we can find at init var/datum/weakref/tracked_ian_ref @@ -41,12 +42,6 @@ var/static/list/valid_items //valid items for special reactions like transforming var/list/critical_items_typecache //items that can cause critical reactions -/obj/machinery/rnd/experimentor/proc/ConvertReqString2List(list/source_list) - var/list/temp_list = params2list(source_list) - for(var/O in temp_list) - temp_list[O] = text2num(temp_list[O]) - return temp_list - /obj/machinery/rnd/experimentor/proc/valid_items() RETURN_TYPE(/list) @@ -95,7 +90,7 @@ . = ..() tracked_ian_ref = WEAKREF(locate(/mob/living/basic/pet/dog/corgi/ian) in GLOB.mob_living_list) - tracked_runtime_ref = WEAKREF(locate(/mob/living/simple_animal/pet/cat/runtime) in GLOB.mob_living_list) + tracked_runtime_ref = WEAKREF(locate(/mob/living/basic/pet/cat/runtime) in GLOB.mob_living_list) critical_items_typecache = typecacheof(list( /obj/item/construction/rcd, @@ -130,20 +125,22 @@ return FALSE return TRUE -/obj/machinery/rnd/experimentor/Insert_Item(obj/item/O, mob/living/user) - if(!user.combat_mode) - . = 1 - if(!is_insertion_ready(user)) - return - if(!user.transferItemToLoc(O, src)) - return - loaded_item = O - to_chat(user, span_notice("You add [O] to the machine.")) - flick("h_lathe_load", src) +/obj/machinery/rnd/experimentor/attackby(obj/item/weapon, mob/living/user, params) + if(user.combat_mode) + return ..() + if(!is_insertion_ready(user)) + return ..() + if(!user.transferItemToLoc(weapon, src)) + to_chat(user, span_warning("\The [weapon] is stuck to your hand, you cannot put it in the [name]!")) + return TRUE + loaded_item = weapon + to_chat(user, span_notice("You add [weapon] to the machine.")) + flick("h_lathe_load", src) + return TRUE /obj/machinery/rnd/experimentor/default_deconstruction_crowbar(obj/item/O) ejectItem() - . = ..(O) + return ..(O) /obj/machinery/rnd/experimentor/ui_interact(mob/user) var/list/dat = list("
    ") @@ -160,22 +157,19 @@ if(istype(loaded_item,/obj/item/relic)) dat += "Discover" dat += "Eject" - var/list/listin = techweb_item_boost_check(src) + var/list/listin = techweb_item_unlock_check(src) if(listin) var/list/output = list("Research Boost Data:") var/list/res = list("Already researched:") - var/list/boosted = list("Already boosted:") for(var/node_id in listin) var/datum/techweb_node/N = SSresearch.techweb_node_by_id(node_id) var/str = "[N.display_name]: [listin[N]] points." var/datum/techweb/science_web = locate(/datum/techweb/science) in SSresearch.techwebs if(science_web.researched_nodes[N.id]) res += str - else if(science_web.boosted_nodes[N.id]) - boosted += str if(science_web.visible_nodes[N.id]) //JOY OF DISCOVERY! output += str - output += boosted + res + output += res dat += output else dat += "Nothing loaded." @@ -217,9 +211,9 @@ experiment(dotype,process) use_power(750) if(dotype != FAIL) - var/list/nodes = techweb_item_boost_check(process) + var/list/nodes = techweb_item_unlock_check(process) var/picked = pick_weight(nodes) //This should work. - stored_research.boost_with_item(SSresearch.techweb_node_by_id(picked), process.type) + stored_research.unhide_node(SSresearch.techweb_node_by_id(picked)) updateUsrDialog() /obj/machinery/rnd/experimentor/proc/matchReaction(matching,reaction) @@ -517,7 +511,7 @@ tracked_runtime.forceMove(drop_location()) investigate_log("Experimentor has stolen Runtime!", INVESTIGATE_EXPERIMENTOR) else - new /mob/living/simple_animal/pet/cat(loc) + new /mob/living/basic/pet/cat(loc) investigate_log("Experimentor failed to steal runtime, and instead spawned a new cat.", INVESTIGATE_EXPERIMENTOR) ejectItem(TRUE) if(globalMalf > 76 && globalMalf < 98) @@ -575,7 +569,7 @@ /obj/item/relic name = "strange object" desc = "What mysteries could this hold? Maybe Research & Development could find out." - icon = 'icons/obj/assemblies/assemblies.dmi' + icon = 'icons/obj/devices/assemblies.dmi' var/realName = "defined object" var/revealed = FALSE var/realProc @@ -647,11 +641,11 @@ /mob/living/basic/crab, /mob/living/basic/lizard, /mob/living/basic/mouse, + /mob/living/basic/parrot, + /mob/living/basic/pet/cat, /mob/living/basic/pet/dog/corgi, /mob/living/basic/pet/dog/pug, /mob/living/basic/pet/fox, - /mob/living/simple_animal/parrot/natural, - /mob/living/simple_animal/pet/cat, ) for(var/counter in 1 to rand(1, 25)) var/mobType = pick(valid_animals) diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm index 4668753f0483fd..0b3924827fd45b 100644 --- a/code/modules/research/machinery/_production.dm +++ b/code/modules/research/machinery/_production.dm @@ -32,11 +32,8 @@ . = ..() cached_designs = list() - materials = AddComponent( - /datum/component/remote_materials, \ - mapload, \ - mat_container_flags = BREAKDOWN_FLAGS_LATHE, \ - ) + materials = AddComponent(/datum/component/remote_materials, mapload) + AddComponent( /datum/component/payment, \ 0, \ @@ -107,10 +104,7 @@ ) /obj/machinery/rnd/production/ui_interact(mob/user, datum/tgui/ui) - user.set_machine(src) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) ui = new(user, src, "Fabricator") ui.open() diff --git a/code/modules/research/machinery/departmental_protolathe.dm b/code/modules/research/machinery/departmental_protolathe.dm index 9fbaa28c95314e..a4874876ba2664 100644 --- a/code/modules/research/machinery/departmental_protolathe.dm +++ b/code/modules/research/machinery/departmental_protolathe.dm @@ -47,5 +47,5 @@ name = "department protolathe (Security)" allowed_department_flags = DEPARTMENT_BITFLAG_SECURITY circuit = /obj/item/circuitboard/machine/protolathe/department/security - stripe_color = "#486091" //SKYRAT EDIT - ORIGINAL "#DE3A3A" + stripe_color = "#486091" //NOVA EDIT - ORIGINAL "#DE3A3A" payment_department = ACCOUNT_SEC diff --git a/code/modules/research/machinery/departmental_techfab.dm b/code/modules/research/machinery/departmental_techfab.dm index 339c98a6222c16..1217db146a598c 100644 --- a/code/modules/research/machinery/departmental_techfab.dm +++ b/code/modules/research/machinery/departmental_techfab.dm @@ -43,5 +43,5 @@ name = "department techfab (Security)" allowed_department_flags = DEPARTMENT_BITFLAG_SECURITY circuit = /obj/item/circuitboard/machine/techfab/department/security - stripe_color = "#486091" //SKYRAT EDIT - ORIGINAL "#DE3A3A" + stripe_color = "#486091" //NOVA EDIT - ORIGINAL "#DE3A3A" payment_department = ACCOUNT_SEC diff --git a/code/modules/research/ordnance/_scipaper.dm b/code/modules/research/ordnance/_scipaper.dm index 38f35e75a77183..f1d94af76316a9 100644 --- a/code/modules/research/ordnance/_scipaper.dm +++ b/code/modules/research/ordnance/_scipaper.dm @@ -287,21 +287,20 @@ /// List of ordnance experiments that our partner is willing to accept. If this list is not filled it means the partner will accept everything. var/list/accepted_experiments = list() /// Associative list of which technology the partner might be able to boost and by how much. - var/list/boosted_nodes = list() - + var/list/boostable_nodes = list() /datum/scientific_partner/proc/purchase_boost(datum/techweb/purchasing_techweb, datum/techweb_node/node) if(!allowed_to_boost(purchasing_techweb, node.id)) return FALSE - purchasing_techweb.boost_techweb_node(node, list(TECHWEB_POINT_TYPE_GENERIC=boosted_nodes[node.id])) - purchasing_techweb.scientific_cooperation[type] -= boosted_nodes[node.id] * SCIENTIFIC_COOPERATION_PURCHASE_MULTIPLIER + purchasing_techweb.boost_techweb_node(node, list(TECHWEB_POINT_TYPE_GENERIC = boostable_nodes[node.id])) + purchasing_techweb.scientific_cooperation[type] -= boostable_nodes[node.id] * SCIENTIFIC_COOPERATION_PURCHASE_MULTIPLIER return TRUE /datum/scientific_partner/proc/allowed_to_boost(datum/techweb/purchasing_techweb, node_id) - if(purchasing_techweb.scientific_cooperation[type] < (boosted_nodes[node_id] * SCIENTIFIC_COOPERATION_PURCHASE_MULTIPLIER)) // Too expensive + if(purchasing_techweb.scientific_cooperation[type] < (boostable_nodes[node_id] * SCIENTIFIC_COOPERATION_PURCHASE_MULTIPLIER)) // Too expensive return FALSE if(!(node_id in purchasing_techweb.get_available_nodes())) // Not currently available return FALSE - if((TECHWEB_POINT_TYPE_GENERIC in purchasing_techweb.boosted_nodes[node_id]) && (purchasing_techweb.boosted_nodes[node_id][TECHWEB_POINT_TYPE_GENERIC] >= boosted_nodes[node_id])) // Already bought or we have a bigger discount + if((TECHWEB_POINT_TYPE_GENERIC in purchasing_techweb.boosted_nodes[node_id]) && (purchasing_techweb.boosted_nodes[node_id][TECHWEB_POINT_TYPE_GENERIC] >= boostable_nodes[node_id])) // Already bought or we have a bigger discount return FALSE return TRUE diff --git a/code/modules/research/ordnance/doppler_array.dm b/code/modules/research/ordnance/doppler_array.dm index f7c0dfcfc2d205..a109e5061df1bf 100644 --- a/code/modules/research/ordnance/doppler_array.dm +++ b/code/modules/research/ordnance/doppler_array.dm @@ -62,8 +62,8 @@ /obj/machinery/doppler_array/wrench_act(mob/living/user, obj/item/tool) default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS - + return ITEM_INTERACT_SUCCESS + /obj/machinery/doppler_array/screwdriver_act(mob/living/user, obj/item/tool) if(!default_deconstruction_screwdriver(user, "[base_icon_state]", "[base_icon_state]", tool)) return FALSE @@ -91,8 +91,8 @@ else playsound(src, 'sound/machines/terminal_error.ogg', 25) -/** - * Checks a specified tachyon record for fitting reactions, then returns a list with +/** + * Checks a specified tachyon record for fitting reactions, then returns a list with * the experiment typepath as key and score as value. * The score is the same for all explosive experiments (light radius). */ diff --git a/code/modules/research/ordnance/scipaper_partner.dm b/code/modules/research/ordnance/scipaper_partner.dm index fe302c73bb06c9..74f84fb96f4ea8 100644 --- a/code/modules/research/ordnance/scipaper_partner.dm +++ b/code/modules/research/ordnance/scipaper_partner.dm @@ -3,7 +3,7 @@ flufftext = "A local group of miners are looking for ways to improve their mining output. They are interested in smaller scale explosives." accepted_experiments = list(/datum/experiment/ordnance/explosive/lowyieldbomb) multipliers = list(SCIPAPER_COOPERATION_INDEX = 0.75, SCIPAPER_FUNDING_INDEX = 0.75) - boosted_nodes = list( + boostable_nodes = list( "bluespace_basic" = 2000, "NVGtech" = 1500, "practical_bluespace" = 2500, @@ -16,20 +16,20 @@ name = "Ghost Writing" flufftext = "A nearby research station ran by a very wealthy captain seems to be struggling with their scientific output. They might reward us handsomely if we ghostwrite for them." multipliers = list(SCIPAPER_COOPERATION_INDEX = 0.25, SCIPAPER_FUNDING_INDEX = 2) - boosted_nodes = list( + boostable_nodes = list( "comp_recordkeeping" = 500, "computer_data_disks" = 500, ) /datum/scientific_partner/defense name = "Defense Partnership" - flufftext = "We can work directly for Nanotrasen's \[REDACTED\] division, potentially providing us access with advanced defensive gadgets." + flufftext = "We can work directly for Symphionia's \[REDACTED\] division, potentially providing us access with advanced defensive gadgets." accepted_experiments = list( /datum/experiment/ordnance/explosive/highyieldbomb, /datum/experiment/ordnance/explosive/pressurebomb, /datum/experiment/ordnance/explosive/hydrogenbomb, ) - boosted_nodes = list( + boostable_nodes = list( "adv_weaponry" = 5000, "weaponry" = 2500, "sec_basic" = 1250, @@ -42,12 +42,12 @@ /datum/scientific_partner/medical name = "Biological Research Division" - flufftext = "A collegiate of the best medical researchers Nanotrasen employs. They seem to be interested in the biological effects of some more exotic gases. Especially stimulants and neurosupressants." + flufftext = "A collegiate of the best medical researchers Symphionia employs. They seem to be interested in the biological effects of some more exotic gases. Especially stimulants and neurosupressants." accepted_experiments = list( /datum/experiment/ordnance/gaseous/nitrous_oxide, /datum/experiment/ordnance/gaseous/bz, ) - boosted_nodes = list( + boostable_nodes = list( "cyber_organs" = 750, "cyber_organs_upgraded" = 1000, "genetics" = 500, @@ -58,12 +58,12 @@ /datum/scientific_partner/physics name = "NT Physics Quarterly" - flufftext = "A prestigious physics journal managed by Nanotrasen. The main journal for publishing cutting-edge physics research conducted by Nanotrasen, given that they aren't classified." + flufftext = "A prestigious physics journal managed by Symphionia. The main journal for publishing cutting-edge physics research conducted by Symphionia, given that they aren't classified." accepted_experiments = list( /datum/experiment/ordnance/gaseous/noblium, /datum/experiment/ordnance/explosive/nobliumbomb, ) - boosted_nodes = list( + boostable_nodes = list( "engineering" = 5000, "adv_engi" = 5000, "emp_super" = 3000, diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index 3047c3e1a9ac1b..4ab9d73dca7b50 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -11,9 +11,10 @@ var/hacked = FALSE var/console_link = TRUE //allow console link. var/disabled = FALSE - var/obj/item/loaded_item = null //the item loaded inside the machine (currently only used by experimentor and destructive analyzer) /// Ref to global science techweb. var/datum/techweb/stored_research + ///The item loaded inside the machine, used by experimentors and destructive analyzers only. + var/obj/item/loaded_item /obj/machinery/rnd/proc/reset_busy() busy = FALSE @@ -59,14 +60,6 @@ else return FALSE -/obj/machinery/rnd/attackby(obj/item/O, mob/user, params) - if(is_refillable() && O.is_drainable()) - return FALSE //inserting reagents into the machine - if(Insert_Item(O, user)) - return TRUE - - return ..() - /obj/machinery/rnd/crowbar_act(mob/living/user, obj/item/tool) return default_deconstruction_crowbar(tool) @@ -103,36 +96,32 @@ wires.interact(user) return TRUE -//proc used to handle inserting items or reagents into rnd machines -/obj/machinery/rnd/proc/Insert_Item(obj/item/I, mob/user) - return - //whether the machine can have an item inserted in its current state. /obj/machinery/rnd/proc/is_insertion_ready(mob/user) if(panel_open) - to_chat(user, span_warning("You can't load [src] while it's opened!")) + balloon_alert(user, "panel open!") return FALSE if(disabled) - to_chat(user, span_warning("The insertion belts of [src] won't engage!")) + balloon_alert(user, "belts disabled!") return FALSE if(busy) - to_chat(user, span_warning("[src] is busy right now.")) + balloon_alert(user, "still busy!") return FALSE if(machine_stat & BROKEN) - to_chat(user, span_warning("[src] is broken.")) + balloon_alert(user, "machine broken!") return FALSE if(machine_stat & NOPOWER) - to_chat(user, span_warning("[src] has no power.")) + balloon_alert(user, "no power!") return FALSE if(loaded_item) - to_chat(user, span_warning("[src] is already loaded.")) + balloon_alert(user, "item already loaded!") return FALSE return TRUE //we eject the loaded item when deconstructing the machine /obj/machinery/rnd/on_deconstruction() if(loaded_item) - loaded_item.forceMove(loc) + loaded_item.forceMove(drop_location()) ..() /obj/machinery/rnd/proc/AfterMaterialInsert(item_inserted, id_inserted, amount_inserted) diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 56be6864b54677..b3c10eaac93b8d 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -154,16 +154,17 @@ if(HDD_OVERLOADED) . += "The front panel is dangling open. The hdd inside is destroyed and the wires are all burned." -/obj/machinery/rnd/server/master/tool_act(mob/living/user, obj/item/tool, tool_type, is_right_clicking) +/obj/machinery/rnd/server/master/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) + if(!tool.tool_behaviour) + return ..() // Only antags are given the training and knowledge to disassemble this thing. if(is_special_character(user)) return ..() - if(user.combat_mode) - return FALSE + return NONE balloon_alert(user, "you can't find an obvious maintenance hatch!") - return TRUE + return ITEM_INTERACT_BLOCKING /obj/machinery/rnd/server/master/attackby(obj/item/attacking_item, mob/user, params) if(istype(attacking_item, /obj/item/computer_disk/hdd_theft)) diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm index 86b9f2dfafe4da..8e19be9418e716 100644 --- a/code/modules/research/stock_parts.dm +++ b/code/modules/research/stock_parts.dm @@ -1,7 +1,7 @@ /*Power cells are in code\modules\power\cell.dm If you create T5+ please take a pass at mech_fabricator.dm. The parts being good enough allows it to go into minus values and create materials out of thin air when printing stuff.*/ -/obj/item/storage/part_replacer//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/item/storage/part_replacer//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "rapid part exchange device" desc = "Special mechanical module made to store, sort, and apply standard machine parts." icon_state = "RPED" @@ -69,7 +69,7 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good else playsound(src, pshoom_or_beepboopblorpzingshadashwoosh, 40, TRUE) -/obj/item/storage/part_replacer/bluespace//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/item/storage/part_replacer/bluespace//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "bluespace rapid part exchange device" desc = "A version of the RPED that allows for replacement of parts and scanning from a distance, along with higher capacity for parts." icon_state = "BS_RPED" @@ -195,14 +195,20 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good new /obj/item/stock_parts/micro_laser(src) new /obj/item/stock_parts/matter_bin(src) -/obj/item/storage/part_replacer/cyborg //SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/item/storage/part_replacer/cyborg //NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "rapid part exchange device" - desc = "Special mechanical module made to store, sort, and apply standard machine parts." + desc = "Special mechanical module made to store, sort, and apply standard machine parts. This one has an extra large compartment for more parts." icon_state = "borgrped" inhand_icon_state = "RPED" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' +/obj/item/storage/part_replacer/cyborg/Initialize(mapload) + . = ..() + atom_storage.max_slots = 400 + atom_storage.max_total_storage = 800 + atom_storage.max_specific_storage = WEIGHT_CLASS_GIGANTIC + /obj/item/storage/part_replacer/proc/get_sorted_parts(ignore_stacks = FALSE) var/list/part_list = list() //Assemble a list of current parts, then sort them by their rating! @@ -224,7 +230,7 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good /obj/item/stock_parts name = "stock part" desc = "What?" - icon = 'icons/obj/assemblies/stock_parts.dmi' + icon = 'icons/obj/devices/stock_parts.dmi' w_class = WEIGHT_CLASS_SMALL var/rating = 1 ///Used when a base part has a different name to higher tiers of part. For example, machine frames want any servo and not just a micro-servo. @@ -465,6 +471,6 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good /obj/item/research//Makes testing much less of a pain -Sieve name = "research" - icon = 'icons/obj/assemblies/stock_parts.dmi' + icon = 'icons/obj/devices/stock_parts.dmi' icon_state = "capacitor" desc = "A debug item for research." diff --git a/code/modules/research/techweb/__techweb_helpers.dm b/code/modules/research/techweb/__techweb_helpers.dm index 2b0a294c606f2a..469c467bc133bd 100644 --- a/code/modules/research/techweb/__techweb_helpers.dm +++ b/code/modules/research/techweb/__techweb_helpers.dm @@ -10,14 +10,15 @@ WARNING("Invalid boost information for node \[[id]\]: [message]") SSresearch.invalid_node_boost[id] = message -///Returns an associative list of techweb node datums with values of the boost it gives. var/list/returned = list() -/proc/techweb_item_boost_check(obj/item/I) - if(SSresearch.techweb_boost_items[I.type]) - return SSresearch.techweb_boost_items[I.type] //It should already be formatted in node datum = list(point type = value) +///Returns an associative list of techweb node datums with values of the nodes it unlocks. +/proc/techweb_item_unlock_check(obj/item/I) + if(SSresearch.techweb_unlock_items[I.type]) + return SSresearch.techweb_unlock_items[I.type] //It should already be formatted in node datum = list(point type = value) /proc/techweb_item_point_check(obj/item/I) if(SSresearch.techweb_point_items[I.type]) return SSresearch.techweb_point_items[I.type] + return FALSE /proc/techweb_point_display_generic(pointlist) var/list/ret = list() diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm index bd1e5cc4a80d84..86ed41e4cb4c56 100644 --- a/code/modules/research/techweb/_techweb.dm +++ b/code/modules/research/techweb/_techweb.dm @@ -26,7 +26,7 @@ var/list/boosted_nodes = list() /// Hidden nodes. id = TRUE. Used for unhiding nodes when requirements are met by removing the entry of the node. var/list/hidden_nodes = list() - /// Items already deconstructed for a generic point boost, path = list(point_type = points) + /// List of items already deconstructed for research points, preventing infinite research point generation. var/list/deconstructed_items = list() /// Available research points, type = number var/list/research_points = list() @@ -47,11 +47,6 @@ /// Completing these experiments will have a refund. var/list/datum/experiment/skipped_experiment_types = list() - /// If science researches something without completing its discount experiments, - /// they have the option to complete them later for a refund - /// This ratio determines how much of the original discount is refunded - var/skipped_experiment_refund_ratio = 0.66 - ///All RD consoles connected to this individual techweb. var/list/obj/machinery/computer/rdconsole/consoles_accessing = list() ///All research servers connected to this individual techweb. @@ -353,7 +348,7 @@ for(var/missed_experiment in node.discount_experiments) if(completed_experiments[missed_experiment] || skipped_experiment_types[missed_experiment]) continue - skipped_experiment_types[missed_experiment] = node.discount_experiments[missed_experiment] * skipped_experiment_refund_ratio + skipped_experiment_types[missed_experiment] = node.discount_experiments[missed_experiment] // Gain the experiments from the new node for(var/id in node.unlock_ids) @@ -400,17 +395,17 @@ LAZYINITLIST(boosted_nodes[node.id]) for(var/point_type in pointlist) boosted_nodes[node.id][point_type] = max(boosted_nodes[node.id][point_type], pointlist[point_type]) - if(node.autounlock_by_boost) - hidden_nodes -= node.id + unhide_node(node) update_node_status(node) return TRUE -/// Boosts a techweb node by using items. -/datum/techweb/proc/boost_with_item(datum/techweb_node/node, itempath) - if(!istype(node) || !ispath(itempath)) +///Removes a node from the hidden_nodes list, making it viewable and researchable (if no experiments are required). +/datum/techweb/proc/unhide_node(datum/techweb_node/node) + if(!istype(node)) return FALSE - var/list/boost_amount = node.boost_item_paths[itempath] - boost_techweb_node(node, boost_amount) + hidden_nodes -= node.id + ///Make it available if the prereq ids are already researched + update_node_status(node) return TRUE /datum/techweb/proc/update_tiers(datum/techweb_node/base) diff --git a/code/modules/research/techweb/_techweb_node.dm b/code/modules/research/techweb/_techweb_node.dm index f5e1481e62cfff..5bf4ef49dacd2f 100644 --- a/code/modules/research/techweb/_techweb_node.dm +++ b/code/modules/research/techweb/_techweb_node.dm @@ -24,8 +24,8 @@ var/list/design_ids = list() /// CALCULATED FROM OTHER NODE'S PREREQUISITIES. Associated list id = TRUE var/list/unlock_ids = list() - /// Associative list, path = list(point type = point_value) - var/list/boost_item_paths = list() + /// List of items you need to deconstruct to unlock this node. + var/list/required_items_to_unlock = list() /// Boosting this will autounlock this node var/autounlock_by_boost = TRUE /// The points cost to research the node, type = amount @@ -44,7 +44,7 @@ /datum/techweb_node/error_node id = "ERROR" display_name = "ERROR" - description = "This usually means something in the database has corrupted. If it doesn't go away automatically, inform Central Command for their techs to fix it ASAP(tm)" + description = "This usually means something in the database has corrupted. If it doesn't go away automatically, inform Conglomeration of Colonists for their techs to fix it ASAP(tm)" show_on_wiki = FALSE /datum/techweb_node/proc/Initialize() diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 4f1e7dd0e2a2c8..b3182b829d8a26 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -98,6 +98,7 @@ "sec_dart", "sec_Islug", "sec_rshot", + "sec_pen", "servingtray", "shaker", "shot_glass", @@ -128,7 +129,6 @@ "universal_scanner", "voice_analyzer", "watering_can", - "gbp_machine", // SKYRAT EDIT ADDITION ) experiments_to_unlock = list( /datum/experiment/autopsy/nonhuman, @@ -299,6 +299,7 @@ "plumbing_rcd_service", "plumbing_rcd_sci", "portable_chem_mixer", + "penlight", "retractor", "scalpel", "stethoscope", @@ -318,6 +319,7 @@ design_ids = list( "circuit_multitool", "comp_access_checker", + "comp_arctan2", "comp_arithmetic", "comp_assoc_list_pick", "comp_assoc_list_remove", @@ -417,6 +419,7 @@ "medigel", "medipen_refiller", "pandemic", + "penlight_paramedic", "soda_dispenser", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) @@ -850,7 +853,7 @@ design_ids = list( "assembly_shell", "bot_shell", - "comp_mod_action", + "comp_equip_action", "controller_shell", "dispenser_shell", "door_shell", @@ -872,7 +875,6 @@ "bci_implanter", "bci_shell", "comp_bar_overlay", - "comp_bci_action", "comp_counter_overlay", "comp_install_detector", "comp_object_overlay", @@ -921,9 +923,13 @@ /datum/techweb_node/adv_robotics id = "adv_robotics" display_name = "Advanced Robotics Research" - description = "Machines using actual neural networks to simulate human lives." + description = "Advanced synthetic neural networks and synaptic pathways allows for extraordinary leaps in cybernetic intelligence and interfacing." prereq_ids = list("robotics") design_ids = list( + "advanced_l_arm", + "advanced_r_arm", + "advanced_l_leg", + "advanced_r_leg", "mmi_posi", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) @@ -1010,6 +1016,7 @@ "borg_upgrade_lavaproof", "borg_upgrade_rped", "borg_upgrade_hypermod", + "borg_upgrade_inducer", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) @@ -1106,6 +1113,7 @@ "holosignrestaurant", "holosignbar", "inducer", + "inducerengi", "tray_goggles", "holopad", "vendatray", @@ -1875,6 +1883,18 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) +/datum/techweb_node/paddy + id = "mech_paddy" + display_name = "EXOSUIT: APLU \"Paddy\"" + description = "Paddy exosuit designs" + prereq_ids = list("adv_mecha", "adv_mecha_armor") + design_ids = list( + "paddyupgrade", + "mech_hydraulic_claw" + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) + discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_mechbay = 5000) + /datum/techweb_node/gygax id = "mech_gygax" display_name = "EXOSUIT: Gygax" @@ -1991,7 +2011,7 @@ "mech_proj_armor", ) required_experiments = list(/datum/experiment/scanning/random/mecha_damage_scan) - discount_experiments = list(/datum/experiment/scanning/random/mecha_destroyed_scan = 5000) + discount_experiments = list(/datum/experiment/scanning/random/mecha_equipped_scan = 5000) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) /datum/techweb_node/mech_scattershot @@ -2146,7 +2166,7 @@ display_name = "Alien Technology" description = "Things used by the greys." prereq_ids = list("biotech","engineering") - boost_item_paths = list( + required_items_to_unlock = list( /obj/item/stack/sheet/mineral/abductor, /obj/item/abductor, /obj/item/cautery/alien, @@ -2189,7 +2209,7 @@ "alien_scalpel", ) - boost_item_paths = list( + required_items_to_unlock = list( /obj/item/abductor, /obj/item/cautery/alien, /obj/item/circuitboard/machine/abductor, @@ -2228,7 +2248,7 @@ "alien_wrench", ) - boost_item_paths = list( + required_items_to_unlock = list( /obj/item/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/crowbar/abductor, @@ -2253,7 +2273,6 @@ "advanced_camera", "ai_cam_upgrade", "borg_syndicate_module", - "decloner", "donksoft_refill", "donksofttoyvendor", "largecrossbow", @@ -2281,12 +2300,12 @@ /datum/techweb_node/syndicate_basic/proc/register_uplink_items() SIGNAL_HANDLER UnregisterSignal(SSearly_assets, COMSIG_SUBSYSTEM_POST_INITIALIZE) - boost_item_paths = list() + required_items_to_unlock = list() for(var/datum/uplink_item/item_path as anything in SStraitor.uplink_items_by_type) var/datum/uplink_item/item = SStraitor.uplink_items_by_type[item_path] if(!item.item || !item.illegal_tech) continue - boost_item_paths |= item.item //allows deconning to unlock. + required_items_to_unlock |= item.item //allows deconning to unlock. ////////////////////////B.E.P.I.S. Locked Techs//////////////////////// @@ -2370,7 +2389,7 @@ /datum/techweb_node/tackle_advanced id = "tackle_advanced" display_name = "Advanced Grapple Technology" - description = "Nanotrasen would like to remind its researching staff that it is never acceptable to \"glomp\" your coworkers, and further \"scientific trials\" on the subject \ + description = "Symphionia would like to remind its researching staff that it is never acceptable to \"glomp\" your coworkers, and further \"scientific trials\" on the subject \ will no longer be accepted in its academic journals." design_ids = list( "tackle_dolphin", @@ -2394,15 +2413,3 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) hidden = TRUE experimental = TRUE - -/datum/techweb_node/advanced_plastic_surgery - id = "plastic_surgery" - display_name = "Advanced Plastic Surgery" - description = "A Procedure long lost due to licensing problems now once again available." - prereq_ids = list("base") - design_ids = list( - "surgery_advanced_plastic_surgery" - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - hidden = TRUE - experimental = TRUE diff --git a/code/modules/research/techweb/techweb_types.dm b/code/modules/research/techweb/techweb_types.dm index c01b1226a4c137..7bc0f7e72ef6a5 100644 --- a/code/modules/research/techweb/techweb_types.dm +++ b/code/modules/research/techweb/techweb_types.dm @@ -3,7 +3,7 @@ */ /datum/techweb/science id = "SCIENCE" - organization = "Nanotrasen" + organization = "Symphionia" should_generate_points = TRUE /datum/techweb/science/research_node(datum/techweb_node/node, force = FALSE, auto_adjust_cost = TRUE, get_that_dosh = TRUE) @@ -13,7 +13,7 @@ /datum/techweb/oldstation id = "CHARLIE" - organization = "Nanotrasen" + organization = "Symphionia" should_generate_points = TRUE /datum/techweb/oldstation/New() @@ -25,7 +25,7 @@ */ /datum/techweb/admin id = "ADMIN" - organization = "Central Command" + organization = "Conglomeration of Colonists" /datum/techweb/admin/New() . = ..() diff --git a/code/modules/research/xenobiology/crossbreeding/_potions.dm b/code/modules/research/xenobiology/crossbreeding/_potions.dm index 0b5368f53728e3..7fb7f10849d3c4 100644 --- a/code/modules/research/xenobiology/crossbreeding/_potions.dm +++ b/code/modules/research/xenobiology/crossbreeding/_potions.dm @@ -28,7 +28,7 @@ Slimecrossing Potions return var/path = S.type var/obj/item/slime_extract/C = new path(get_turf(target)) - C.Uses = S.Uses + C.extract_uses = S.extract_uses to_chat(user, span_notice("You pour the potion onto [target], and the fluid solidifies into a copy of it!")) qdel(src) return diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm index 04d37c62b7caa4..a1d4eff50a6ed4 100644 --- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm +++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm @@ -473,10 +473,10 @@ colour = SLIME_TYPE_GREY /datum/status_effect/stabilized/grey/tick(seconds_between_ticks) - 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/simple_animal/slime/slimes_in_range in range(1, get_turf(owner))) + if(!(owner in slimes_in_range.Friends)) + to_chat(owner, span_notice("[linked_extract] pulses gently as it communicates with [slimes_in_range].")) + slimes_in_range.set_friendship(owner, 1) return ..() /datum/status_effect/stabilized/orange @@ -991,8 +991,6 @@ healing_types += BURN if(owner.getToxLoss() > 0) healing_types += TOX - if(owner.getCloneLoss() > 0) - healing_types += CLONE if(length(healing_types)) owner.heal_damage_type(heal_amount, damagetype = pick(healing_types)) diff --git a/code/modules/research/xenobiology/crossbreeding/_weapons.dm b/code/modules/research/xenobiology/crossbreeding/_weapons.dm index a7e54fa2c70302..1ad9ce683e475c 100644 --- a/code/modules/research/xenobiology/crossbreeding/_weapons.dm +++ b/code/modules/research/xenobiology/crossbreeding/_weapons.dm @@ -29,7 +29,7 @@ Slimecrossing Weapons /obj/item/knife/rainbowknife/afterattack(atom/O, mob/user, proximity) if(proximity && isliving(O)) - damtype = pick(BRUTE, BURN, TOX, OXY, CLONE) + damtype = pick(BRUTE, BURN, TOX, OXY) switch(damtype) if(BRUTE) hitsound = 'sound/weapons/bladeslice.ogg' @@ -47,10 +47,6 @@ Slimecrossing Weapons hitsound = 'sound/effects/space_wind.ogg' attack_verb_continuous = string_list(list("suffocates", "winds", "vacuums")) attack_verb_simple = string_list(list("suffocate", "wind", "vacuum")) - if(CLONE) - hitsound = 'sound/items/geiger/ext1.ogg' - attack_verb_continuous = string_list(list("irradiates", "mutates", "maligns")) - attack_verb_simple = string_list(list("irradiate", "mutate", "malign")) return ..() //Adamantine shield - Chilling Adamantine diff --git a/code/modules/research/xenobiology/crossbreeding/burning.dm b/code/modules/research/xenobiology/crossbreeding/burning.dm index 0ababd344223da..0103ee40b9198c 100644 --- a/code/modules/research/xenobiology/crossbreeding/burning.dm +++ b/code/modules/research/xenobiology/crossbreeding/burning.dm @@ -14,10 +14,10 @@ Burning extracts: create_reagents(10, INJECTABLE | DRAWABLE) /obj/item/slimecross/burning/attack_self(mob/user) - if(!reagents.has_reagent(/datum/reagent/toxin/plasma,10)) + if(!reagents.has_reagent(/datum/reagent/toxin/plasma, 10)) to_chat(user, span_warning("This extract needs to be full of plasma to activate!")) return - reagents.remove_reagent(/datum/reagent/toxin/plasma,10) + reagents.remove_reagent(/datum/reagent/toxin/plasma, 10) to_chat(user, span_notice("You squeeze the extract, and it absorbs the plasma!")) playsound(src, 'sound/effects/bubbles.ogg', 50, TRUE) playsound(src, 'sound/magic/fireball.ogg', 50, TRUE) @@ -32,11 +32,11 @@ 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),SLIME_TYPE_GREY) - 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 - S.bodytemperature = T0C + 400 //We gonna step on the gas. - S.set_nutrition(S.get_hunger_nutrition()) //Tonight, we fight! + var/mob/living/simple_animal/slime/new_slime = new(get_turf(user),/datum/slime_type/grey) + new_slime.visible_message(span_danger("A baby slime emerges from [src], and it nuzzles [user] before burbling hungrily!")) + new_slime.set_friendship(user, 20) //Gas, gas, gas + new_slime.bodytemperature = T0C + 400 //We gonna step on the gas. + new_slime.set_nutrition(new_slime.hunger_nutrition) //Tonight, we fight! ..() /obj/item/slimecross/burning/orange @@ -183,12 +183,13 @@ Burning extracts: effect_desc = "Shatters all lights in the current room." /obj/item/slimecross/burning/pyrite/do_effect(mob/user) + var/area/user_area = get_area(user) + if(isnull(user_area.apc)) + user.visible_message(span_danger("[src] releases a colorful wave of energy, but nothing seems to happen.")) + return + + user_area.apc.break_lights() user.visible_message(span_danger("[src] releases a colorful wave of energy, which shatters the lights!")) - var/area/A = get_area(user.loc) - for(var/obj/machinery/light/L in A) //Shamelessly copied from the APC effect. - L.on = TRUE - L.break_light_tube() - stoplag() ..() /obj/item/slimecross/burning/red @@ -197,15 +198,15 @@ 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))) - if(user in S.Friends) - var/friendliness = S.Friends[user] - S.clear_friends() - S.set_friendship(user, friendliness) + for(var/mob/living/simple_animal/slime/slimes_in_view in view(7, get_turf(user))) + if(user in slimes_in_view.Friends) + var/friendliness = slimes_in_view.Friends[user] + slimes_in_view.clear_friends() + slimes_in_view.set_friendship(user, friendliness) else - S.clear_friends() - S.rabid = 1 - S.visible_message(span_danger("The [S] is driven into a dangerous frenzy!")) + slimes_in_view.clear_friends() + slimes_in_view.rabid = TRUE + slimes_in_view.visible_message(span_danger("The [slimes_in_view] is driven into a dangerous frenzy!")) ..() /obj/item/slimecross/burning/green diff --git a/code/modules/research/xenobiology/crossbreeding/charged.dm b/code/modules/research/xenobiology/crossbreeding/charged.dm index 8941057453ba19..cde5e234afd1e3 100644 --- a/code/modules/research/xenobiology/crossbreeding/charged.dm +++ b/code/modules/research/xenobiology/crossbreeding/charged.dm @@ -15,10 +15,10 @@ Charged extracts: create_reagents(10, INJECTABLE | DRAWABLE) /obj/item/slimecross/charged/attack_self(mob/user) - if(!reagents.has_reagent(/datum/reagent/toxin/plasma,10)) + if(!reagents.has_reagent(/datum/reagent/toxin/plasma, 10)) to_chat(user, span_warning("This extract needs to be full of plasma to activate!")) return - reagents.remove_reagent(/datum/reagent/toxin/plasma,10) + reagents.remove_reagent(/datum/reagent/toxin/plasma, 10) to_chat(user, span_notice("You squeeze the extract, and it absorbs the plasma!")) playsound(src, 'sound/effects/bubbles.ogg', 50, TRUE) playsound(src, 'sound/effects/light_flicker.ogg', 50, TRUE) @@ -278,6 +278,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/simple_animal/slime/new_slime = new(get_turf(user)) + new_slime.random_colour() return ..() diff --git a/code/modules/research/xenobiology/crossbreeding/chilling.dm b/code/modules/research/xenobiology/crossbreeding/chilling.dm index c3586437c32761..1eec00033e535b 100644 --- a/code/modules/research/xenobiology/crossbreeding/chilling.dm +++ b/code/modules/research/xenobiology/crossbreeding/chilling.dm @@ -14,10 +14,10 @@ Chilling extracts: create_reagents(10, INJECTABLE | DRAWABLE) /obj/item/slimecross/chilling/attack_self(mob/user) - if(!reagents.has_reagent(/datum/reagent/toxin/plasma,10)) + if(!reagents.has_reagent(/datum/reagent/toxin/plasma, 10)) to_chat(user, span_warning("This extract needs to be full of plasma to activate!")) return - reagents.remove_reagent(/datum/reagent/toxin/plasma,10) + reagents.remove_reagent(/datum/reagent/toxin/plasma, 10) to_chat(user, span_notice("You squeeze the extract, and it absorbs the plasma!")) playsound(src, 'sound/effects/bubbles.ogg', 50, TRUE) playsound(src, 'sound/effects/glassbr1.ogg', 50, TRUE) @@ -53,13 +53,14 @@ Chilling extracts: effect_desc = "Injects everyone in the area with some regenerative jelly." /obj/item/slimecross/chilling/purple/do_effect(mob/user) - var/area/A = get_area(get_turf(user)) - if(A.outdoors) + var/area/user_area = get_area(user) + if(user_area.outdoors) to_chat(user, span_warning("[src] can't affect such a large area.")) return user.visible_message(span_notice("[src] shatters, and a healing aura fills the room briefly.")) - for(var/mob/living/carbon/C in A) - C.reagents.add_reagent(/datum/reagent/medicine/regen_jelly,10) + for(var/turf/area_turf as anything in user_area.get_contained_turfs()) + for(var/mob/living/carbon/nearby in area_turf) + nearby.reagents?.add_reagent(/datum/reagent/medicine/regen_jelly,10) ..() /obj/item/slimecross/chilling/blue @@ -87,11 +88,14 @@ Chilling extracts: effect_desc = "Recharges the room's APC by 50%." /obj/item/slimecross/chilling/yellow/do_effect(mob/user) - var/area/A = get_area(get_turf(user)) - user.visible_message(span_notice("[src] shatters, and a the air suddenly feels charged for a moment.")) - for(var/obj/machinery/power/apc/C in A) - if(C.cell) - C.cell.charge = min(C.cell.charge + C.cell.maxcharge/2, C.cell.maxcharge) + var/area/user_area = get_area(user) + if(isnull(user_area.apc?.cell)) + user.visible_message(span_notice("[src] shatters, yet the air around you feels normal.")) + return + + var/obj/machinery/power/apc/area_apc = user_area.apc + area_apc.cell.charge = min(area_apc.cell.charge + area_apc.cell.maxcharge / 2, area_apc.cell.maxcharge) + user.visible_message(span_notice("[src] shatters, and the air suddenly feels charged for a moment.")) ..() /obj/item/slimecross/chilling/darkpurple @@ -104,7 +108,7 @@ Chilling extracts: to_chat(user, span_warning("[src] can't affect such a large area.")) return var/filtered = FALSE - for(var/turf/open/T in A) + for(var/turf/open/T in A.get_contained_turfs()) var/datum/gas_mixture/G = T.air if(istype(G)) G.assert_gas(/datum/gas/plasma) @@ -231,9 +235,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/simple_animal/slime/slimes_in_view in view(get_turf(user), 7)) slimesfound = TRUE - S.docile = TRUE + slimes_in_view.docile = TRUE if(slimesfound) user.visible_message(span_notice("[src] lets out a peaceful ring as it shatters, and nearby slimes seem calm.")) else @@ -332,6 +336,7 @@ Chilling extracts: to_chat(user, span_warning("[src] can't affect such a large area.")) return user.visible_message(span_warning("[src] reflects an array of dazzling colors and light, energy rushing to nearby doors!")) - for(var/obj/machinery/door/airlock/door in area) - new /obj/effect/forcefield/slimewall/rainbow(door.loc) + for(var/turf/area_turf as anything in area.get_contained_turfs()) + for(var/obj/machinery/door/airlock/door in area_turf) + new /obj/effect/forcefield/slimewall/rainbow(door.loc) return ..() diff --git a/code/modules/research/xenobiology/crossbreeding/consuming.dm b/code/modules/research/xenobiology/crossbreeding/consuming.dm index ec90edd6550bf3..84084b2302e858 100644 --- a/code/modules/research/xenobiology/crossbreeding/consuming.dm +++ b/code/modules/research/xenobiology/crossbreeding/consuming.dm @@ -125,7 +125,6 @@ Consuming extracts: need_mob_update += M.adjustFireLoss(-5, updating_health = FALSE) need_mob_update += M.adjustToxLoss(-5, updating_health = FALSE, forced = TRUE) //To heal slimepeople. need_mob_update += M.adjustOxyLoss(-5, updating_health = FALSE) - need_mob_update += M.adjustCloneLoss(-5, updating_health = FALSE) need_mob_update += M.adjustOrganLoss(ORGAN_SLOT_BRAIN, -5) if(need_mob_update) M.updatehealth() diff --git a/code/modules/research/xenobiology/crossbreeding/industrial.dm b/code/modules/research/xenobiology/crossbreeding/industrial.dm index 5222ab3608c098..da878b77b5a051 100644 --- a/code/modules/research/xenobiology/crossbreeding/industrial.dm +++ b/code/modules/research/xenobiology/crossbreeding/industrial.dm @@ -32,11 +32,11 @@ Industrial extracts: var/IsWorking = FALSE if(reagents.has_reagent(/datum/reagent/toxin/plasma,amount = 2) && plasmarequired > 1) //Can absorb as much as 2 IsWorking = TRUE - reagents.remove_reagent(/datum/reagent/toxin/plasma,2) + reagents.remove_reagent(/datum/reagent/toxin/plasma, 2) plasmaabsorbed += 2 else if(reagents.has_reagent(/datum/reagent/toxin/plasma,amount = 1)) //Can absorb as little as 1 IsWorking = TRUE - reagents.remove_reagent(/datum/reagent/toxin/plasma,1) + reagents.remove_reagent(/datum/reagent/toxin/plasma, 1) plasmaabsorbed += 1 if(plasmaabsorbed >= plasmarequired) diff --git a/code/modules/research/xenobiology/crossbreeding/recurring.dm b/code/modules/research/xenobiology/crossbreeding/recurring.dm index c6ca420cc04fa2..3279e26c920045 100644 --- a/code/modules/research/xenobiology/crossbreeding/recurring.dm +++ b/code/modules/research/xenobiology/crossbreeding/recurring.dm @@ -29,10 +29,10 @@ Recurring extracts: /obj/item/slimecross/recurring/process(seconds_per_tick) if(cooldown > 0) cooldown -= seconds_per_tick - else if(extract.Uses < 10 && extract.Uses > 0) - extract.Uses++ + else if(extract.extract_uses < 10 && extract.extract_uses > 0) + extract.extract_uses++ cooldown = max_cooldown - else if(extract.Uses <= 0) + else if(extract.extract_uses <= 0) extract.visible_message(span_warning("The light inside [extract] flickers and dies out.")) extract.desc = "A tiny, inert core, bleeding dark, cerulean-colored goo." extract.icon_state = "prismatic" diff --git a/code/modules/research/xenobiology/crossbreeding/regenerative.dm b/code/modules/research/xenobiology/crossbreeding/regenerative.dm index f0f395b33a613d..4a222e8e982d97 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/simple_animal/slime/target_slime = target + target_slime.random_colour() if(isjellyperson(target)) target.reagents.add_reagent(/datum/reagent/mutationtoxin/jelly,5) diff --git a/code/modules/research/xenobiology/crossbreeding/stabilized.dm b/code/modules/research/xenobiology/crossbreeding/stabilized.dm index eb49f5dc2c3a64..ad5750de9ff057 100644 --- a/code/modules/research/xenobiology/crossbreeding/stabilized.dm +++ b/code/modules/research/xenobiology/crossbreeding/stabilized.dm @@ -53,7 +53,7 @@ Stabilized extracts: if (holder.has_status_effect(effectpath)) return holder.apply_status_effect(effectpath, src) - STOP_PROCESSING(SSobj,src) + return PROCESS_KILL //Colors and subtypes: /obj/item/slimecross/stabilized/grey 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 0152b343c45dfd..08caca838542cd 100644 --- a/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm +++ b/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm @@ -108,7 +108,7 @@ /datum/reagent/consumable/milk/chocolate_milk = -1) virus_suspectibility = 1.5 - resulting_atoms = list(/mob/living/simple_animal/pet/cat = 1) //The basic cat mobs are all male, so you mightt need a gender swap potion if you want to fill the fortress with kittens. + resulting_atoms = list(/mob/living/basic/pet/cat = 1) /datum/micro_organism/cell_line/corgi desc = "Canid cells" @@ -652,7 +652,7 @@ /datum/reagent/drug/nicotine = -1) virus_suspectibility = 0 - resulting_atoms = list(/obj/item/queen_bee = 1) + resulting_atoms = list(/obj/item/queen_bee/bought = 1) /datum/micro_organism/cell_line/queen_bee/fuck_up_growing(obj/machinery/plumbing/growing_vat/vat) //we love job hazards vat.visible_message(span_warning("You hear angry buzzing coming from the inside of the vat!")) @@ -684,30 +684,6 @@ virus_suspectibility = 0 resulting_atoms = list(/mob/living/basic/butterfly = 3) -/datum/micro_organism/cell_line/leaper - desc = "atypical amphibian cells" - required_reagents = list( - /datum/reagent/consumable/nutriment/protein, - /datum/reagent/ants, - /datum/reagent/consumable/eggyolk, - /datum/reagent/medicine/c2/synthflesh) - - supplementary_reagents = list( - /datum/reagent/growthserum = 4, - /datum/reagent/drug/blastoff = 3, - /datum/reagent/drug/space_drugs = 2, - /datum/reagent/consumable/ethanol/eggnog = 2, - /datum/reagent/consumable/vanilla = 2, - /datum/reagent/consumable/banana = 1, - /datum/reagent/consumable/nutriment/vitamin = 1) - - suppressive_reagents = list( - /datum/reagent/toxin/cyanide = -5, - /datum/reagent/consumable/mold = -2, - /datum/reagent/toxin/spore = -1) - - resulting_atoms = list(/mob/living/simple_animal/hostile/jungle/leaper = 1) - /datum/micro_organism/cell_line/mega_arachnid desc = "pseudoarachnoid cells" required_reagents = list( diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index ac148161b03f2d..97e78121908316 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -6,16 +6,15 @@ var/allowed_area = null /mob/camera/ai_eye/remote/xenobio/Initialize(mapload) - var/area/A = get_area(loc) - allowed_area = A.name + var/area/our_area = get_area(loc) + allowed_area = our_area.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) . = ..() @@ -31,10 +30,15 @@ networks = list("ss13") circuit = /obj/item/circuitboard/computer/xenobiology + ///The recycler connected to the camera console var/obj/machinery/monkey_recycler/connected_recycler + ///The slimes stored inside the console var/list/stored_slimes + ///The single slime potion stored inside the console var/obj/item/slimepotion/slime/current_potion + ///The maximum amount of slimes that fit in the machine var/max_slimes = 5 + ///The amount of monkey cubes inside the machine var/monkeys = 0 icon_screen = "slime_comp" @@ -53,6 +57,9 @@ actions += new /datum/action/innate/hotkey_help(src) stored_slimes = list() + +/obj/machinery/computer/camera_advanced/xenobio/LateInitialize(mapload) + . = ..() for(var/obj/machinery/monkey_recycler/recycler in GLOB.monkey_recyclers) if(get_area(recycler.loc) == get_area(loc)) connected_recycler = recycler @@ -61,8 +68,8 @@ /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()) + var/mob/living/simple_animal/slime/stored_slime = thing + stored_slime.forceMove(drop_location()) stored_slimes.Cut() if(connected_recycler) connected_recycler.connected -= src @@ -92,13 +99,6 @@ 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) @@ -108,43 +108,116 @@ 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)) +/obj/machinery/computer/camera_advanced/xenobio/attackby(obj/item/used_item, mob/user, params) + if(istype(used_item, /obj/item/food/monkeycube)) monkeys++ - to_chat(user, span_notice("You feed [O] to [src]. It now has [monkeys] monkey cubes stored.")) - qdel(O) + to_chat(user, span_notice("You feed [used_item] to [src]. It now has [monkeys] monkey cubes stored.")) + qdel(used_item) return - else if(istype(O, /obj/item/storage/bag)) - var/obj/item/storage/P = O + + if(istype(used_item, /obj/item/storage/bag)) + var/obj/item/storage/storage_bag = used_item var/loaded = FALSE - for(var/obj/G in P.contents) - if(istype(G, /obj/item/food/monkeycube)) + for(var/obj/item_in_bag in storage_bag.contents) + if(istype(item_in_bag, /obj/item/food/monkeycube)) loaded = TRUE monkeys++ - qdel(G) + qdel(item_in_bag) if(loaded) - to_chat(user, span_notice("You fill [src] with the monkey cubes stored in [O]. [src] now has [monkeys] monkey cubes stored.")) + to_chat(user, span_notice("You fill [src] with the monkey cubes stored in [used_item]. [src] now has [monkeys] monkey cubes stored.")) return - else if(istype(O, /obj/item/slimepotion/slime)) + + if(istype(used_item, /obj/item/slimepotion/slime)) var/replaced = FALSE - if(user && !user.transferItemToLoc(O, src)) + if(user && !user.transferItemToLoc(used_item, 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" : ""].")) + current_potion = used_item + to_chat(user, span_notice("You load [used_item] 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) +/obj/machinery/computer/camera_advanced/xenobio/multitool_act(mob/living/user, obj/item/multitool/used_multitool) . = ..() - 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 + if (istype(used_multitool) && istype(used_multitool.buffer,/obj/machinery/monkey_recycler)) + to_chat(user, span_notice("You link [src] with [used_multitool.buffer] in [used_multitool] buffer.")) + connected_recycler = used_multitool.buffer connected_recycler.connected += src return TRUE +/* +Boilerplate check for a valid area to perform a camera action in. +Checks if the AI eye is on a valid turf and then checks if the target turf is xenobiology compatible +Due to keyboard shortcuts, the second one is not necessarily the remote eye's location. +*/ +/obj/machinery/computer/camera_advanced/xenobio/proc/validate_area(mob/living/user, mob/camera/ai_eye/remote/xenobio/remote_eye, turf/open/target_turf) + if(!GLOB.cameranet.checkTurfVis(remote_eye.loc)) + to_chat(user, span_warning("Target is not near a camera. Cannot proceed.")) + return FALSE + + var/area/turfarea = get_area(target_turf) + if(turfarea.name != remote_eye.allowed_area && !(turfarea.area_flags & XENOBIOLOGY_COMPATIBLE)) + to_chat(user, span_warning("Invalid area. Cannot proceed.")) + return FALSE + + return TRUE + +///Places every slime in storage on target turf +/obj/machinery/computer/camera_advanced/xenobio/proc/slime_place(turf/open/target_turf) + for(var/mob/living/simple_animal/slime/stored_slime in stored_slimes) + stored_slime.forceMove(target_turf) + stored_slime.visible_message(span_notice("[stored_slime] warps in!")) + stored_slimes -= stored_slime + +///Places every slime not controlled by a player into the internal storage, respecting its limits +///Returns TRUE to signal it hitting the limit, in case its being called from a loop and we want it to stop +/obj/machinery/computer/camera_advanced/xenobio/proc/slime_pickup(mob/living/user, mob/living/simple_animal/slime/target_slime) + if(stored_slimes.len >= max_slimes) + to_chat(user, span_warning("Slime storage is full.")) + return TRUE + if(target_slime.ckey) + to_chat(user, span_warning("The slime wiggled free!")) + return FALSE + if(target_slime.buckled) + target_slime.stop_feeding(silent = TRUE) + target_slime.visible_message(span_notice("[target_slime] vanishes in a flash of light!")) + target_slime.forceMove(src) + stored_slimes += target_slime + + return FALSE + +///Places one monkey, if possible +/obj/machinery/computer/camera_advanced/xenobio/proc/feed_slime(mob/living/user, turf/open/target_turf) + if(monkeys < 1) + to_chat(user, span_warning("[src] needs to have at least 1 monkey stored. Currently has [monkeys] monkeys stored.")) + return + + var/mob/living/carbon/human/species/monkey/food = new /mob/living/carbon/human/species/monkey(target_turf, TRUE, user) + if (QDELETED(food)) + return + + food.LAssailant = WEAKREF(user) + monkeys-- + monkeys = round(monkeys, 0.1) //Prevents rounding errors + to_chat(user, span_notice("[src] now has [monkeys] monkeys stored.")) + +///Recycles the target monkey +/obj/machinery/computer/camera_advanced/xenobio/proc/monkey_recycle(mob/living/user, mob/living/target_mob) + if(!ismonkey(target_mob)) + return + if(!target_mob.stat) + return + + target_mob.visible_message(span_notice("[target_mob] vanishes as [p_theyre()] reclaimed for recycling!")) + connected_recycler.use_power(500) + monkeys += connected_recycler.cube_production + monkeys = round(monkeys, 0.1) //Prevents rounding errors + qdel(target_mob) + to_chat(user, span_notice("[src] now has [monkeys] monkeys stored.")) + /datum/action/innate/slime_place name = "Place Slimes" button_icon = 'icons/mob/actions/actions_silicon.dmi' @@ -153,17 +226,14 @@ /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 + var/mob/living/owner_mob = owner + var/mob/camera/ai_eye/remote/xenobio/remote_eye = owner_mob.remote_control + var/obj/machinery/computer/camera_advanced/xenobio/xeno_console = target + + if(!xeno_console.validate_area(owner, remote_eye, remote_eye.loc)) + return - 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.")) + xeno_console.slime_place(remote_eye.loc) /datum/action/innate/slime_pick_up name = "Pick up Slime" @@ -173,23 +243,16 @@ /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 + var/mob/living/owner_mob = owner + var/mob/camera/ai_eye/remote/xenobio/remote_eye = owner_mob.remote_control + var/obj/machinery/computer/camera_advanced/xenobio/xeno_console = 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.")) + if(!xeno_console.validate_area(owner, remote_eye, remote_eye.loc)) + return + for(var/mob/living/simple_animal/slime/target_slime in remote_eye.loc) + if(xeno_console.slime_pickup(owner_mob, target_slime)) ///Returns true if we hit our slime pickup limit + break /datum/action/innate/feed_slime name = "Feed Slimes" @@ -199,22 +262,14 @@ /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 + var/mob/living/living_owner = owner + var/mob/camera/ai_eye/remote/xenobio/remote_eye = living_owner.remote_control + var/obj/machinery/computer/camera_advanced/xenobio/xeno_console = 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 - 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.")) + if(!xeno_console.validate_area(owner, remote_eye, remote_eye.loc)) + return + + xeno_console.feed_slime(living_owner, remote_eye.loc) /datum/action/innate/monkey_recycle @@ -225,27 +280,20 @@ /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 + var/mob/living/owner_mob = owner + var/mob/camera/ai_eye/remote/xenobio/remote_eye = owner_mob.remote_control + var/obj/machinery/computer/camera_advanced/xenobio/xeno_console = target + var/obj/machinery/monkey_recycler/recycler = xeno_console.connected_recycler + + if(!xeno_console.validate_area(owner, remote_eye, remote_eye.loc)) + return 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.")) + + for(var/mob/living/carbon/human/target_mob in remote_eye.loc) + xeno_console.monkey_recycle(owner, target_mob) /datum/action/innate/slime_scan name = "Scan Slime" @@ -255,14 +303,15 @@ /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 + var/mob/living/owner_mob = owner + var/mob/camera/ai_eye/remote/xenobio/remote_eye = owner_mob.remote_control + var/obj/machinery/computer/camera_advanced/xenobio/xeno_console = target + + if(!xeno_console.validate_area(owner, remote_eye, remote_eye.loc)) + return - 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.")) + for(var/mob/living/simple_animal/slime/scanned_slime in remote_eye.loc) + slime_scan(scanned_slime, owner_mob) /datum/action/innate/feed_potion name = "Apply Potion" @@ -273,20 +322,20 @@ 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/mob/living/owner_mob = owner + var/mob/camera/ai_eye/remote/xenobio/remote_eye = owner_mob.remote_control + var/obj/machinery/computer/camera_advanced/xenobio/xeno_console = target - if(QDELETED(X.current_potion)) + if(!xeno_console.validate_area(owner, remote_eye, remote_eye.loc)) + return + + if(QDELETED(xeno_console.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.")) + for(var/mob/living/simple_animal/slime/potioned_slime in remote_eye.loc) + xeno_console.current_potion.attack(potioned_slime, owner_mob) + break /datum/action/innate/hotkey_help name = "Hotkey Help" @@ -296,156 +345,123 @@ /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.") + + var/render_list = list() + render_list += "Click shortcuts:" + render_list += "• Shift-click a slime to pick it up, or the floor to drop all held slimes." + render_list += "• Ctrl-click a slime to scan it." + render_list += "• Alt-click a slime to feed it a potion." + render_list += "• Ctrl-click or a dead monkey to recycle it, or the floor to place a new monkey." + + to_chat(owner, examine_block(jointext(render_list, "\n"))) // // 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) +/// Scans the target slime +/obj/machinery/computer/camera_advanced/xenobio/proc/XenoSlimeClickCtrl(mob/living/user, mob/living/simple_animal/slime/target_slime) SIGNAL_HANDLER - if(!GLOB.cameranet.checkTurfVis(S.loc)) - to_chat(user, span_warning("Target is not near a camera. Cannot proceed.")) + + var/mob/camera/ai_eye/remote/xenobio/remote_eye = user.remote_control + var/obj/machinery/computer/camera_advanced/xenobio/xeno_console = remote_eye.origin + + if(!xeno_console.validate_area(user, remote_eye, target_slime.loc)) 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) + slime_scan(target_slime, user) + +///Feeds a stored potion to a slime +/obj/machinery/computer/camera_advanced/xenobio/proc/XenoSlimeClickAlt(mob/living/user, mob/living/simple_animal/slime/target_slime) SIGNAL_HANDLER - if(!GLOB.cameranet.checkTurfVis(S.loc)) - to_chat(user, span_warning("Target is not near a camera. Cannot proceed.")) + + var/mob/camera/ai_eye/remote/xenobio/remote_eye = user.remote_control + var/obj/machinery/computer/camera_advanced/xenobio/xeno_console = remote_eye.origin + + if(!xeno_console.validate_area(user, remote_eye, target_slime.loc)) 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.")) + + if(QDELETED(xeno_console.current_potion)) + to_chat(user, 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) + INVOKE_ASYNC(xeno_console.current_potion, TYPE_PROC_REF(/obj/item/slimepotion/slime, attack), target_slime, user) + +///Picks up a slime, and places them in the internal storage +/obj/machinery/computer/camera_advanced/xenobio/proc/XenoSlimeClickShift(mob/living/user, mob/living/simple_animal/slime/target_slime) SIGNAL_HANDLER - if(!GLOB.cameranet.checkTurfVis(S.loc)) - to_chat(user, span_warning("Target is not near a camera. Cannot proceed.")) + + var/mob/camera/ai_eye/remote/xenobio/remote_eye = user.remote_control + var/obj/machinery/computer/camera_advanced/xenobio/xeno_console = remote_eye.origin + + if(!xeno_console.validate_area(user, remote_eye, target_slime.loc)) 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) + + xeno_console.slime_pickup(user, target_slime) + +///Places all slimes from the internal storage +/obj/machinery/computer/camera_advanced/xenobio/proc/XenoTurfClickShift(mob/living/user, turf/open/target_turf) SIGNAL_HANDLER - if(!GLOB.cameranet.checkTurfVis(T)) - to_chat(user, span_warning("Target is not near a camera. Cannot proceed.")) + var/mob/living/user_mob = user + var/mob/camera/ai_eye/remote/xenobio/remote_eye = user_mob.remote_control + var/obj/machinery/computer/camera_advanced/xenobio/xeno_console = remote_eye.origin + + if(!xeno_console.validate_area(user, remote_eye, target_turf)) 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) + + slime_place(target_turf) + +///Places a monkey from the internal storage +/obj/machinery/computer/camera_advanced/xenobio/proc/XenoTurfClickCtrl(mob/living/user, turf/open/target_turf) SIGNAL_HANDLER - if(!GLOB.cameranet.checkTurfVis(T)) - to_chat(user, span_warning("Target is not near a camera. Cannot proceed.")) + + var/mob/camera/ai_eye/remote/xenobio/remote_eye = user.remote_control + var/obj/machinery/computer/camera_advanced/xenobio/xeno_console = remote_eye.origin + + if(!xeno_console.validate_area(user, remote_eye, target_turf)) 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 - 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) + + xeno_console.feed_slime(user, target_turf) + +///Picks up a dead monkey for recycling +/obj/machinery/computer/camera_advanced/xenobio/proc/XenoMonkeyClickCtrl(mob/living/user, mob/living/carbon/human/target_mob) SIGNAL_HANDLER - if(!ismonkey(M)) + if(!ismonkey(target_mob)) return - if(!isturf(M.loc) || !GLOB.cameranet.checkTurfVis(M.loc)) - to_chat(user, span_warning("Target is not near a camera. Cannot proceed.")) + + var/mob/camera/ai_eye/remote/xenobio/remote_eye = user.remote_control + var/obj/machinery/computer/camera_advanced/xenobio/xeno_console = remote_eye.origin + + if(!xeno_console.validate_area(user, remote_eye, target_mob.loc)) 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.")) + + if(!xeno_console.connected_recycler) + to_chat(user, 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.")) + + xeno_console.monkey_recycle(user, target_mob) diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 2bbefb64ec343e..96f878a154cec7 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -11,28 +11,32 @@ throw_speed = 3 throw_range = 6 grind_results = list() - var/Uses = 1 ///uses before it goes inert - var/qdel_timer = null ///deletion timer, for delayed reactions - var/effectmod ///Which type of crossbred - var/list/activate_reagents = list() ///Reagents required for activation + ///uses before it goes inert + var/extract_uses = 1 + ///deletion timer, for delayed reactions + var/qdel_timer = null + ///Which type of crossbred + var/crossbreed_modification + ///Reagents required for activation + var/list/activate_reagents = list() var/recurring = FALSE /obj/item/slime_extract/examine(mob/user) . = ..() - if(Uses > 1) - . += "It has [Uses] uses remaining." + if(extract_uses > 1) + . += "It has [extract_uses] uses remaining." /obj/item/slime_extract/attackby(obj/item/O, mob/user) if(istype(O, /obj/item/slimepotion/enhancer)) - if(Uses >= 5 || recurring) + if(extract_uses >= 5 || recurring) to_chat(user, span_warning("You cannot enhance this extract further!")) return ..() if(O.type == /obj/item/slimepotion/enhancer) //Seriously, why is this defined here...? to_chat(user, span_notice("You apply the enhancer to the slime extract. It may now be reused one more time.")) - Uses++ + extract_uses++ if(O.type == /obj/item/slimepotion/enhancer/max) to_chat(user, span_notice("You dump the maximizer on the slime extract. It can now be used a total of 5 times!")) - Uses = 5 + extract_uses = 5 qdel(O) ..() @@ -42,7 +46,7 @@ /obj/item/slime_extract/on_grind() . = ..() - if(Uses) + if(extract_uses) grind_results[/datum/reagent/toxin/slimejelly] = 20 /** @@ -63,34 +67,34 @@ * * 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)) +/obj/item/slime_extract/attack(mob/living/simple_animal/slime/target_slime, mob/user) + if(!isslime(target_slime)) return ..() - if(M.stat) + if(target_slime.stat) to_chat(user, span_warning("The slime is dead!")) return - if(!M.is_adult) + if(target_slime.life_stage != SLIME_LIFE_STAGE_ADULT) to_chat(user, span_warning("The slime must be an adult to cross its core!")) return - if(M.effectmod && M.effectmod != effectmod) + if(target_slime.crossbreed_modification && target_slime.crossbreed_modification != crossbreed_modification) to_chat(user, span_warning("The slime is already being crossed with a different extract!")) return - if(!M.effectmod) - M.effectmod = effectmod + if(!target_slime.crossbreed_modification) + target_slime.crossbreed_modification = crossbreed_modification - M.applied++ + target_slime.applied_crossbreed_amount++ 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) + to_chat(user, span_notice("You feed the slime [src], [target_slime.applied_crossbreed_amount == 1 ? "starting to mutate its core." : "further mutating its core."]")) + playsound(target_slime, 'sound/effects/attackblob.ogg', 50, TRUE) - if(M.applied >= SLIME_EXTRACT_CROSSING_REQUIRED) - M.spawn_corecross() + if(target_slime.applied_crossbreed_amount >= SLIME_EXTRACT_CROSSING_REQUIRED) + target_slime.spawn_corecross() /obj/item/slime_extract/grey name = "grey slime extract" icon_state = "grey slime extract" - effectmod = "reproductive" + crossbreed_modification = "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) @@ -105,7 +109,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), SLIME_TYPE_GREY) + var/mob/living/simple_animal/slime/S = new(get_turf(user), /datum/slime_type/grey) playsound(user, 'sound/effects/splat.ogg', 50, TRUE) to_chat(user, span_notice("You spit out [S].")) return 350 @@ -115,7 +119,7 @@ /obj/item/slime_extract/gold name = "gold slime extract" icon_state = "gold slime extract" - effectmod = "symbiont" + crossbreed_modification = "symbiont" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) @@ -146,7 +150,7 @@ /obj/item/slime_extract/silver name = "silver slime extract" icon_state = "silver slime extract" - effectmod = "consuming" + crossbreed_modification = "consuming" activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water) @@ -174,7 +178,7 @@ /obj/item/slime_extract/metal name = "metal slime extract" icon_state = "metal slime extract" - effectmod = "industrial" + crossbreed_modification = "industrial" activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water) /obj/item/slime_extract/metal/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) @@ -198,7 +202,7 @@ /obj/item/slime_extract/purple name = "purple slime extract" icon_state = "purple slime extract" - effectmod = "regenerative" + crossbreed_modification = "regenerative" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) /obj/item/slime_extract/purple/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) @@ -217,7 +221,7 @@ /obj/item/slime_extract/darkpurple name = "dark purple slime extract" icon_state = "dark purple slime extract" - effectmod = "self-sustaining" + crossbreed_modification = "self-sustaining" activate_reagents = list(/datum/reagent/toxin/plasma) /obj/item/slime_extract/darkpurple/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) @@ -240,7 +244,7 @@ /obj/item/slime_extract/orange name = "orange slime extract" icon_state = "orange slime extract" - effectmod = "burning" + crossbreed_modification = "burning" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) /obj/item/slime_extract/orange/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) @@ -260,7 +264,7 @@ /obj/item/slime_extract/yellow name = "yellow slime extract" icon_state = "yellow slime extract" - effectmod = "charged" + crossbreed_modification = "charged" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) /obj/item/slime_extract/yellow/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) @@ -283,7 +287,7 @@ /obj/item/slime_extract/red name = "red slime extract" icon_state = "red slime extract" - effectmod = "sanguine" + crossbreed_modification = "sanguine" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) /obj/item/slime_extract/red/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) @@ -303,14 +307,13 @@ /obj/item/slime_extract/blue name = "blue slime extract" icon_state = "blue slime extract" - effectmod = "stabilized" + crossbreed_modification = "stabilized" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) /obj/item/slime_extract/blue/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) if(SLIME_ACTIVATE_MINOR) to_chat(user, span_notice("You activate [src]. Your genome feels more stable!")) - user.adjustCloneLoss(-15) user.reagents.add_reagent(/datum/reagent/medicine/mutadone, 10) user.reagents.add_reagent(/datum/reagent/medicine/potass_iodide, 10) return 250 @@ -323,7 +326,7 @@ /obj/item/slime_extract/darkblue name = "dark blue slime extract" icon_state = "dark blue slime extract" - effectmod = "chilling" + crossbreed_modification = "chilling" activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water) /obj/item/slime_extract/darkblue/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) @@ -346,7 +349,7 @@ /obj/item/slime_extract/pink name = "pink slime extract" icon_state = "pink slime extract" - effectmod = "gentle" + crossbreed_modification = "gentle" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) /obj/item/slime_extract/pink/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) @@ -374,7 +377,7 @@ /obj/item/slime_extract/green name = "green slime extract" icon_state = "green slime extract" - effectmod = "mutative" + crossbreed_modification = "mutative" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/uranium/radium) /obj/item/slime_extract/green/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) @@ -398,7 +401,7 @@ /obj/item/slime_extract/lightpink name = "light pink slime extract" icon_state = "light pink slime extract" - effectmod = "loyal" + crossbreed_modification = "loyal" activate_reagents = list(/datum/reagent/toxin/plasma) /obj/item/slime_extract/lightpink/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) @@ -422,7 +425,7 @@ /obj/item/slime_extract/black name = "black slime extract" icon_state = "black slime extract" - effectmod = "transformative" + crossbreed_modification = "transformative" activate_reagents = list(/datum/reagent/toxin/plasma) /obj/item/slime_extract/black/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) @@ -443,7 +446,7 @@ /obj/item/slime_extract/oil name = "oil slime extract" icon_state = "oil slime extract" - effectmod = "detonating" + crossbreed_modification = "detonating" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) /obj/item/slime_extract/oil/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) @@ -467,7 +470,7 @@ /obj/item/slime_extract/adamantine name = "adamantine slime extract" icon_state = "adamantine slime extract" - effectmod = "crystalline" + crossbreed_modification = "crystalline" activate_reagents = list(/datum/reagent/toxin/plasma) /obj/item/slime_extract/adamantine/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) @@ -497,7 +500,7 @@ /obj/item/slime_extract/bluespace name = "bluespace slime extract" icon_state = "bluespace slime extract" - effectmod = "warping" + crossbreed_modification = "warping" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) var/teleport_ready = FALSE var/teleport_x = 0 @@ -533,7 +536,7 @@ /obj/item/slime_extract/pyrite name = "pyrite slime extract" icon_state = "pyrite slime extract" - effectmod = "prismatic" + crossbreed_modification = "prismatic" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) /obj/item/slime_extract/pyrite/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) @@ -560,7 +563,7 @@ /obj/item/slime_extract/cerulean name = "cerulean slime extract" icon_state = "cerulean slime extract" - effectmod = "recurring" + crossbreed_modification = "recurring" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) /obj/item/slime_extract/cerulean/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) @@ -580,7 +583,7 @@ /obj/item/slime_extract/sepia name = "sepia slime extract" icon_state = "sepia slime extract" - effectmod = "lengthened" + crossbreed_modification = "lengthened" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) /obj/item/slime_extract/sepia/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) @@ -602,7 +605,7 @@ /obj/item/slime_extract/rainbow name = "rainbow slime extract" icon_state = "rainbow slime extract" - effectmod = "hyperchromatic" + crossbreed_modification = "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. /obj/item/slime_extract/rainbow/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) @@ -668,7 +671,7 @@ M.rabid = FALSE qdel(src) return - M.docile = 1 + M.docile = TRUE M.set_nutrition(700) 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.")) @@ -737,7 +740,7 @@ /obj/item/slimepotion/slime/sentience/nuclear name = "syndicate intelligence potion" - desc = "A miraculous chemical mix that grants human like intelligence to living beings. It has been modified with Syndicate technology to also grant an internal radio implant to the target and authenticate with identification systems." + desc = "A miraculous chemical mix that grants human like intelligence to living beings. It has been modified with Symphionia technology to also grant an internal radio implant to the target and authenticate with identification systems." /obj/item/slimepotion/slime/sentience/nuclear/after_success(mob/living/user, mob/living/smart_mob) var/obj/item/implant/radio/syndicate/imp = new(src) @@ -801,22 +804,22 @@ icon = 'icons/obj/medical/chemical.dmi' icon_state = "potred" -/obj/item/slimepotion/slime/steroid/attack(mob/living/simple_animal/slime/M, mob/user) - if(!isslime(M))//If target is not a slime. +/obj/item/slimepotion/slime/steroid/attack(mob/living/simple_animal/slime/target, mob/user) + if(!isslime(target))//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 + if(target.life_stage == SLIME_LIFE_STAGE_ADULT) //Can't steroidify adults to_chat(user, span_warning("Only baby slimes can use the steroid!")) return - if(M.stat) + if(target.stat) to_chat(user, span_warning("The slime is dead!")) return - if(M.cores >= 5) + if(target.cores >= 5) to_chat(user, span_warning("The slime already has the maximum amount of extract!")) return to_chat(user, span_notice("You feed the slime the steroid. It will now produce one more extract.")) - M.cores++ + target.cores++ qdel(src) /obj/item/slimepotion/enhancer @@ -1033,7 +1036,7 @@ throwforce = 10 throw_speed = 3 throw_range = 7 - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY max_amount = 60 turf_type = /turf/open/floor/bluespace merge_type = /obj/item/stack/tile/bluespace @@ -1050,7 +1053,7 @@ throwforce = 10 throw_speed = 0.1 throw_range = 28 - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY max_amount = 60 turf_type = /turf/open/floor/sepia merge_type = /obj/item/stack/tile/sepia @@ -1063,7 +1066,7 @@ /obj/item/areaeditor/blueprints/slime/edit_area() ..() var/area/A = get_area(src) - for(var/turf/T in A) + for(var/turf/T as anything in A.get_contained_turfs()) T.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) T.add_atom_colour("#2956B2", FIXED_COLOUR_PRIORITY) A.area_flags |= XENOBIOLOGY_COMPATIBLE diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm index 33bbdd76f29c1b..a3cda3fda0f446 100644 --- a/code/modules/security_levels/keycard_authentication.dm +++ b/code/modules/security_levels/keycard_authentication.dm @@ -3,8 +3,8 @@ GLOBAL_DATUM_INIT(keycard_events, /datum/events, new) #define KEYCARD_RED_ALERT "Red Alert" #define KEYCARD_EMERGENCY_MAINTENANCE_ACCESS "Emergency Maintenance Access" #define KEYCARD_BSA_UNLOCK "Bluespace Artillery Unlock" -#define KEYCARD_PIN_UNRESTRICT "Unrestrict Permit Firing Pins" //SKYRAT EDIT -#define KEYCARD_ENG_OVERRIDE "Engineering Override Access" //SKYRAT EDIT +#define KEYCARD_PIN_UNRESTRICT "Unrestrict Permit Firing Pins" //NOVA EDIT +#define KEYCARD_ENG_OVERRIDE "Engineering Override Access" //NOVA EDIT #define ACCESS_GRANTING_COOLDOWN (30 SECONDS) @@ -52,8 +52,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/keycard_auth, 26) data["red_alert"] = (SSsecurity_level.get_current_level_as_number() >= SEC_LEVEL_RED) ? 1 : 0 data["emergency_maint"] = GLOB.emergency_access data["bsa_unlock"] = GLOB.bsa_unlock - data["permit_pins"] = (CONFIG_GET(flag/permit_pins) ? TRUE : FALSE) //SKYRAT EDIT - data["eng_override"] = GLOB.force_eng_override //SKYRAT EDIT + data["permit_pins"] = (CONFIG_GET(flag/permit_pins) ? TRUE : FALSE) //NOVA EDIT + data["eng_override"] = GLOB.force_eng_override //NOVA EDIT return data /obj/machinery/keycard_auth/ui_status(mob/user) @@ -90,7 +90,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/keycard_auth, 26) if(!event_source) sendEvent(KEYCARD_BSA_UNLOCK) . = TRUE - //SKYRAT EDIT START + //NOVA EDIT START if("pin_unrestrict") if(!event_source) sendEvent(KEYCARD_PIN_UNRESTRICT) @@ -99,7 +99,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/keycard_auth, 26) if(!event_source) sendEvent(KEYCARD_ENG_OVERRIDE) . = TRUE - //SKYRAT EDIT END + //NOVA EDIT END if("give_janitor_access") var/mob/living/living_user = usr if(!living_user || !istype(living_user)) @@ -171,12 +171,12 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/keycard_auth, 26) make_maint_all_access() if(KEYCARD_BSA_UNLOCK) toggle_bluespace_artillery() - //SKYRAT EDIT START + //NOVA EDIT START if(KEYCARD_PIN_UNRESTRICT) toggle_permit_pins() if(KEYCARD_ENG_OVERRIDE) toggle_eng_override() - //SKYRAT EDIT END + //NOVA EDIT END GLOBAL_VAR_INIT(emergency_access, FALSE) /proc/make_maint_all_access() @@ -208,5 +208,5 @@ GLOBAL_VAR_INIT(emergency_access, FALSE) #undef KEYCARD_RED_ALERT #undef KEYCARD_EMERGENCY_MAINTENANCE_ACCESS #undef KEYCARD_BSA_UNLOCK -#undef KEYCARD_PIN_UNRESTRICT //SKYRAT EDIT -#undef KEYCARD_ENG_OVERRIDE //SKYRAT EDIT +#undef KEYCARD_PIN_UNRESTRICT //NOVA EDIT +#undef KEYCARD_ENG_OVERRIDE //NOVA EDIT diff --git a/code/modules/shuttle/arrivals.dm b/code/modules/shuttle/arrivals.dm index ea1ba8ed05223f..81b456603b4c29 100644 --- a/code/modules/shuttle/arrivals.dm +++ b/code/modules/shuttle/arrivals.dm @@ -19,7 +19,7 @@ var/perma_docked = FALSE //highlander with RESPAWN??? OH GOD!!! var/obj/docking_port/stationary/target_dock // for badminry - shuttle_sounds = FALSE //SKYRAT EDIT ADDITION + shuttle_sounds = FALSE //NOVA EDIT ADDITION /obj/docking_port/mobile/arrivals/Initialize(mapload) . = ..() @@ -36,12 +36,13 @@ areas = list() var/list/new_latejoin = list() - for(var/area/shuttle/arrival/A in GLOB.areas) - for(var/obj/structure/chair/C in A) - new_latejoin += C - if(!console) - console = locate(/obj/machinery/requests_console) in A - areas += A + for(var/area/shuttle/arrival/arrival_area in GLOB.areas) + for(var/turf/arrival_turf as anything in arrival_area.get_contained_turfs()) + for(var/obj/structure/chair/shuttle_chair in arrival_turf) + new_latejoin += shuttle_chair + if(isnull(console)) + console = locate() in arrival_turf + areas += arrival_area if(SSjob.latejoin_trackers.len) log_mapping("Map contains predefined latejoin spawn points and an arrivals shuttle. Using the arrivals shuttle.") diff --git a/code/modules/shuttle/assault_pod.dm b/code/modules/shuttle/assault_pod.dm index 609ef685a3f80a..3e76fc9671def1 100644 --- a/code/modules/shuttle/assault_pod.dm +++ b/code/modules/shuttle/assault_pod.dm @@ -16,7 +16,7 @@ /obj/item/assault_pod name = "Assault Pod Targeting Device" - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/remote.dmi' icon_state = "gangtool-red" inhand_icon_state = "radio" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' diff --git a/code/modules/shuttle/battlecruiser_starfury.dm b/code/modules/shuttle/battlecruiser_starfury.dm index ab1f6802d43ee2..e95ff4243f5d4d 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"] @@ -171,15 +171,11 @@ notify_ghosts( "The battlecruiser has an object of interest: [our_candidate]!", source = our_candidate, - action = NOTIFY_ORBIT, - header = "Something's Interesting!" - ) + ) else notify_ghosts( "The battlecruiser has an object of interest: [spawner]!", source = spawner, - action = NOTIFY_ORBIT, - header="Something's Interesting!" - ) + ) priority_announce("Unidentified armed ship detected near the station.") diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 4065591582e262..cf53fef368c1bb 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -13,7 +13,7 @@ icon_keyboard = "tech_key" light_color = LIGHT_COLOR_CYAN req_access = list() - interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_SET_MACHINE + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON /// ID of the attached shuttle var/shuttleId /// Possible destinations of the attached shuttle diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 8bb7a3cd174858..490570a67e0529 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -337,7 +337,7 @@ . = ..() -/obj/docking_port/mobile/emergency/request(obj/docking_port/stationary/S, area/signal_origin, reason, red_alert, set_coefficient=null, silent=FALSE) //SKYRAT EDIT CHANGE - AUTOTRANSFER +/obj/docking_port/mobile/emergency/request(obj/docking_port/stationary/S, area/signal_origin, reason, red_alert, set_coefficient=null, silent=FALSE) // NOVA EDIT CHANGE - AUTOTRANSFER - adds silent arg if(!isnum(set_coefficient)) set_coefficient = SSsecurity_level.current_security_level.shuttle_call_time_mod alert_coeff = set_coefficient @@ -358,8 +358,17 @@ else SSshuttle.emergency_last_call_loc = null - if(!silent) // SKYRAT EDIT ADDITION - priority_announce("The emergency shuttle has been called. [red_alert ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [timeLeft(600)] minutes.[reason][SSshuttle.emergency_last_call_loc ? "\n\nCall signal traced. Results can be viewed on any communications console." : "" ][SSshuttle.admin_emergency_no_recall ? "\n\nWarning: Shuttle recall subroutines disabled; Recall not possible." : ""]", null, ANNOUNCER_SHUTTLECALLED, ANNOUNCEMENT_TYPE_PRIORITY, color_override = "orange") + // NOVA EDIT ADDITION START + if(silent) + return + // NOVA EDIT ADDITION END + priority_announce( + text = "The emergency shuttle has been called. [red_alert ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [(timeLeft(60 SECONDS))] minutes.[reason][SSshuttle.emergency_last_call_loc ? "\n\nCall signal traced. Results can be viewed on any communications console." : "" ][SSshuttle.admin_emergency_no_recall ? "\n\nWarning: Shuttle recall subroutines disabled; Recall not possible." : ""]", + title = "Emergency Shuttle Dispatched", + sound = ANNOUNCER_SHUTTLECALLED, + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "orange", + ) /obj/docking_port/mobile/emergency/cancel(area/signalOrigin) if(mode != SHUTTLE_CALL) @@ -374,7 +383,13 @@ SSshuttle.emergency_last_call_loc = signalOrigin else SSshuttle.emergency_last_call_loc = null - priority_announce("The emergency shuttle has been recalled.[SSshuttle.emergency_last_call_loc ? " Recall signal traced. Results can be viewed on any communications console." : "" ]", null, ANNOUNCER_SHUTTLERECALLED, ANNOUNCEMENT_TYPE_PRIORITY, color_override = "orange") + priority_announce( + text = "The emergency shuttle has been recalled.[SSshuttle.emergency_last_call_loc ? " Recall signal traced. Results can be viewed on any communications console." : "" ]", + title = "Emergency Shuttle Recalled", + sound = ANNOUNCER_SHUTTLERECALLED, + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "orange", + ) SSticker.emergency_reason = null @@ -463,7 +478,13 @@ mode = SHUTTLE_DOCKED setTimer(SSshuttle.emergency_dock_time) send2adminchat("Server", "The Emergency Shuttle has docked with the station.") - priority_announce("[SSshuttle.emergency] has docked with the station. You have [timeLeft(600)] minutes to board the Emergency Shuttle.", null, ANNOUNCER_SHUTTLEDOCK, ANNOUNCEMENT_TYPE_PRIORITY, color_override = "orange") + priority_announce( + text = "[SSshuttle.emergency] has docked with the station. You have [DisplayTimeText(SSshuttle.emergency_dock_time)] to board the emergency shuttle.", + title = "Emergency Shuttle Arrival", + sound = ANNOUNCER_SHUTTLEDOCK, + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "orange", + ) ShuttleDBStuff() addtimer(CALLBACK(src, PROC_REF(announce_shuttle_events)), 20 SECONDS) @@ -516,9 +537,13 @@ mode = SHUTTLE_ESCAPE launch_status = ENDGAME_LAUNCHED setTimer(SSshuttle.emergency_escape_time * engine_coeff) - priority_announce("The Emergency Shuttle has left the station. Estimate [timeLeft(600)] minutes until the shuttle docks at Central Command.", null, null, ANNOUNCEMENT_TYPE_PRIORITY, color_override = "orange") + priority_announce( + text = "The emergency shuttle has left the station. Estimate [timeLeft(60 SECONDS)] minutes until the shuttle docks at [command_name()].", + title = "Emergency Shuttle Departure", + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "orange", + ) INVOKE_ASYNC(SSticker, TYPE_PROC_REF(/datum/controller/subsystem/ticker, poll_hearts)) - bolt_all_doors() //SKYRAT EDIT ADDITION SSmapping.mapvote() //If no map vote has been run yet, start one. if(!is_reserved_level(z)) @@ -572,8 +597,8 @@ supervisor.", "SYSTEM ERROR:", sound_override = 'sound/misc/announce_syndi.ogg') dock_id(destination_dock) - unbolt_all_doors() //SKYRAT EDIT ADDITION - INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(process_eorg_bans)) //SKYRAT EDIT ADDITION + unbolt_all_doors() //NOVA EDIT ADDITION + INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(process_eorg_bans)) //NOVA EDIT ADDITION mode = SHUTTLE_ENDGAME timer = 0 @@ -584,7 +609,12 @@ mode = SHUTTLE_ESCAPE launch_status = ENDGAME_LAUNCHED setTimer(SSshuttle.emergency_escape_time) - priority_announce("The Emergency Shuttle is preparing for direct jump. Estimate [timeLeft(600)] minutes until the shuttle docks at Central Command.", null, null, ANNOUNCEMENT_TYPE_PRIORITY, color_override = "orange") + priority_announce( + text = "The emergency shuttle is preparing for direct jump. Estimate [timeLeft(60 SECONDS)] minutes until the shuttle docks at [command_name()].", + title = "Emergency Shuttle Transit Failure", + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "orange", + ) ///Generate a list of events to run during the departure /obj/docking_port/mobile/emergency/proc/setup_shuttle_events() @@ -713,7 +743,7 @@ return INITIALIZE_HINT_QDEL /obj/docking_port/stationary/random/icemoon - target_area = /area/icemoon/surface/outdoors + target_area = /area/icemoon/surface/outdoors/unexplored/rivers/no_monsters //Pod suits/pickaxes diff --git a/code/modules/shuttle/ferry.dm b/code/modules/shuttle/ferry.dm index d1f54b889d154b..c319fa1ae27c97 100644 --- a/code/modules/shuttle/ferry.dm +++ b/code/modules/shuttle/ferry.dm @@ -3,7 +3,7 @@ desc = "A console that controls the transport ferry." circuit = /obj/item/circuitboard/computer/ferry shuttleId = "ferry" - possible_destinations = "ferry_home;ferry_away;ferry_ntf" //SKYRAT EDIT CHANGE + possible_destinations = "ferry_home;ferry_away;ferry_ntf" //NOVA EDIT CHANGE req_access = list(ACCESS_CENT_GENERAL) var/allow_silicons = FALSE var/allow_emag = FALSE @@ -23,6 +23,6 @@ /obj/machinery/computer/shuttle/ferry/request name = "ferry console" circuit = /obj/item/circuitboard/computer/ferry/request - possible_destinations = "ferry_home;ferry_away;ferry_ntf" //SKYRAT EDIT CHANGE + possible_destinations = "ferry_home;ferry_away;ferry_ntf" //NOVA EDIT CHANGE req_access = list(ACCESS_CENT_GENERAL) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF diff --git a/code/modules/shuttle/medisim.dm b/code/modules/shuttle/medisim.dm index e49d54531affab..99e1406d2f4101 100644 --- a/code/modules/shuttle/medisim.dm +++ b/code/modules/shuttle/medisim.dm @@ -9,8 +9,8 @@ default_raw_text = {"Yeah, you may as well just melt this crap back down into metal.


    - What else am I supposed to say? Nanotrasen thinks these authentic cuirass models are too expensive for the simulation watchers. - That's bullshit, but my hands are tied. But you know. If one of you cargo folk up at central command take a cuirass for yourself + What else am I supposed to say? Symphionia thinks these authentic cuirass models are too expensive for the simulation watchers. + That's bullshit, but my hands are tied. But you know. If one of you cargo folk up at Conglomeration of Colonists take a cuirass for yourself instead of throwing the damn thing out, like, I'm sure nobody would notice or care. OK, but I'm sitting here on an official NT shuttle encouraging you to break spacelaw. Damn, I'm bored as fuck. I was kidding. Melt em. See you guys soon.
    diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm index 03777cd2d5b54c..2d21c4408234c6 100644 --- a/code/modules/shuttle/navigation_computer.dm +++ b/code/modules/shuttle/navigation_computer.dm @@ -78,7 +78,7 @@ /obj/machinery/computer/camera_advanced/shuttle_docker/attack_hand(mob/user, list/modifiers) if(jammed) - to_chat(user, span_warning("The Syndicate is jamming the console!")) + to_chat(user, span_warning("The Symphionia is jamming the console!")) return if(!shuttle_port && !SSshuttle.getShuttle(shuttleId)) to_chat(user,span_warning("Warning: Shuttle connection severed!")) @@ -95,17 +95,16 @@ var/mob/camera/ai_eye/remote/shuttle_docker/the_eye = eyeobj the_eye.setDir(shuttle_port.dir) var/turf/origin = locate(shuttle_port.x + x_offset, shuttle_port.y + y_offset, shuttle_port.z) - for(var/V in shuttle_port.shuttle_areas) - var/area/A = V - for(var/turf/T in A) - if(T.z != origin.z) + for(var/area/shuttle_area as anything in shuttle_port.shuttle_areas) + for(var/turf/shuttle_turf as anything in shuttle_area.get_contained_turfs()) + if(shuttle_turf.z != origin.z) continue var/image/I = image('icons/effects/alphacolors.dmi', origin, "red") - var/x_off = T.x - origin.x - var/y_off = T.y - origin.y + var/x_off = shuttle_turf.x - origin.x + var/y_off = shuttle_turf.y - origin.y I.loc = locate(origin.x + x_off, origin.y + y_off, origin.z) //we have to set this after creating the image because it might be null, and images created in nullspace are immutable. I.layer = ABOVE_NORMAL_TURF_LAYER - SET_PLANE(I, ABOVE_GAME_PLANE, T) + SET_PLANE(I, ABOVE_GAME_PLANE, shuttle_turf) I.mouse_opacity = MOUSE_OPACITY_TRANSPARENT the_eye.placement_images[I] = list(x_off, y_off) diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index 7c8b26b5d16bfc..70b2df44dd0f2c 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -57,7 +57,7 @@ All ShuttleMove procs go here if(!shuttle_depth) CRASH("A turf queued to move via shuttle somehow had no skipover in baseturfs. [src]([type]):[loc]") - //SKYRAT EDIT ADDITION + //NOVA EDIT ADDITION if(newT.lgroup) newT.lgroup.remove_from_group(newT) if(newT.liquids) @@ -71,7 +71,7 @@ All ShuttleMove procs go here if(liquids) liquids.ChangeToNewTurf(newT) newT.reasses_liquids() - //SKYRAT EDIT END + //NOVA EDIT END newT.CopyOnTop(src, 1, shuttle_depth, TRUE) newT.blocks_air = TRUE diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 1f9348ffa4bcb9..d9e20b07f1bbf6 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -6,7 +6,7 @@ //NORTH default dir /obj/docking_port invisibility = INVISIBILITY_ABSTRACT - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tracker.dmi' icon_state = "pinonfar" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF @@ -492,7 +492,7 @@ ///List of shuttle events that can run or are running var/list/datum/shuttle_event/event_list = list() - var/admin_forced = FALSE //SKYRAT EDIT ADDITION + var/admin_forced = FALSE //NOVA EDIT ADDITION #define WORLDMAXX_CUTOFF (world.maxx + 1) #define WORLDMAXY_CUTOFF (world.maxx + 1) @@ -517,7 +517,7 @@ var/max_x = WORLDMAXX_CUTOFF var/max_y = WORLDMAXY_CUTOFF for(var/area/area as anything in shuttle_areas) - for(var/turf/turf in area) + for(var/turf/turf as anything in area.get_contained_turfs()) min_x = max(turf.x, min_x) max_x = min(turf.x, max_x) min_y = max(turf.y, min_y) @@ -699,15 +699,15 @@ * Arguments: * * destination_port - Stationary docking port to move the shuttle to */ -/obj/docking_port/mobile/proc/request(obj/docking_port/stationary/destination_port, forced = FALSE) // SKYRAT EDIT ADDITION - Forced check - if(!check_dock(destination_port) && !forced) // SKYRAT EDIT ADDITION - Forced check +/obj/docking_port/mobile/proc/request(obj/docking_port/stationary/destination_port, forced = FALSE) // NOVA EDIT ADDITION - Forced check + if(!check_dock(destination_port) && !forced) // NOVA EDIT ADDITION - Forced check testing("check_dock failed on request for [src]") return - // SKYRAT EDIT START - Forced check + // NOVA EDIT START - Forced check if(forced) admin_forced = TRUE - // SKYRAT EDIT END + // NOVA EDIT END if(mode == SHUTTLE_IGNITING && destination == destination_port) return @@ -730,10 +730,10 @@ if(SHUTTLE_IDLE, SHUTTLE_IGNITING) destination = destination_port mode = SHUTTLE_IGNITING - // SKYRAT EDIT ADD START + // NOVA EDIT ADD START bolt_all_doors() play_engine_sound(src, TRUE) - // SKYRAT EDIT ADD END + // NOVA EDIT ADD END setTimer(ignitionTime) //recall the shuttle to where it was previously @@ -831,12 +831,10 @@ var/list/L1 = return_ordered_turfs(S1.x, S1.y, S1.z, S1.dir) var/list/ripple_turfs = list() - - for(var/i in 1 to L0.len) + var/stop = min(L0.len, L1.len) + for(var/i in 1 to stop) var/turf/T0 = L0[i] var/turf/T1 = L1[i] - if(!T0 || !T1) - continue // out of bounds if(!istype(T0.loc, area_type) || istype(T0.loc, /area/shuttle/transit)) continue // not part of the shuttle ripple_turfs += T1 @@ -884,7 +882,7 @@ return if(rechargeTime) mode = SHUTTLE_RECHARGING - unbolt_all_doors() //SKYRAT EDIT ADDITION + unbolt_all_doors() //NOVA EDIT ADDITION setTimer(rechargeTime) return if(SHUTTLE_RECALL) @@ -901,8 +899,8 @@ enterTransit() return - admin_forced = FALSE //SKYRAT EDIT ADDITION - unbolt_all_doors() //SKYRAT EDIT ADDITION + admin_forced = FALSE //NOVA EDIT ADDITION + unbolt_all_doors() //NOVA EDIT ADDITION mode = SHUTTLE_IDLE timer = 0 destination = null @@ -913,8 +911,8 @@ var/tl = timeLeft(1) if(tl <= SHUTTLE_RIPPLE_TIME) create_ripples(destination, tl) - play_engine_sound(src, FALSE) //SKYRAT EDIT ADDITION - play_engine_sound(destination, FALSE) //SKYRAT EDIT ADDITION + play_engine_sound(src, FALSE) //NOVA EDIT ADDITION + play_engine_sound(destination, FALSE) //NOVA EDIT ADDITION var/obj/docking_port/stationary/S0 = get_docked() if(istype(S0, /obj/docking_port/stationary/transit) && timeLeft(1) <= PARALLAX_LOOP_TIME) diff --git a/code/modules/shuttle/shuttle_events/player_controlled.dm b/code/modules/shuttle/shuttle_events/player_controlled.dm index 40bc29f80175e4..77fee390a68769 100644 --- a/code/modules/shuttle/shuttle_events/player_controlled.dm +++ b/code/modules/shuttle/shuttle_events/player_controlled.dm @@ -17,7 +17,7 @@ /// Attempt to grant control of a mob to ghosts before spawning it in. if spawn_anyway_if_no_player = TRUE, we spawn the mob even if there's no ghosts /datum/shuttle_event/simple_spawner/player_controlled/proc/try_grant_ghost_control(spawn_type) - var/list/candidates = poll_ghost_candidates(ghost_alert_string + " (Warning: you will not be able to return to your body!)", role_type, FALSE, 10 SECONDS) + var/list/candidates = SSpolling.poll_ghost_candidates(ghost_alert_string + " (Warning: you will not be able to return to your body!)", check_jobban = role_type, poll_time = 10 SECONDS, pic_source = spawn_type, role_name_text = "shot at shuttle") if(!candidates.len && !spawn_anyway_if_no_player) return diff --git a/code/modules/shuttle/shuttle_events/turbulence.dm b/code/modules/shuttle/shuttle_events/turbulence.dm new file mode 100644 index 00000000000000..bbc136397c2a02 --- /dev/null +++ b/code/modules/shuttle/shuttle_events/turbulence.dm @@ -0,0 +1,48 @@ +/// Repeat the "buckle in or fall over" event a couple times +/datum/shuttle_event/turbulence + name = "Turbulence" + event_probability = 5 + activation_fraction = 0.1 + /// Minimum time to wait between periods of turbulence + var/minimum_interval = 20 SECONDS + /// Maximum time to wait between periods of turbulence + var/maximum_interval = 50 SECONDS + /// Time until we should shake again + COOLDOWN_DECLARE(turbulence_cooldown) + /// How long do we give people to get buckled? + var/warning_interval = 2 SECONDS + +/datum/shuttle_event/turbulence/activate() + . = ..() + minor_announce("Please note, we are entering an area of subspace turbulence. For your own safety, \ + please fasten your belts and remain seated until the vehicle comes to a complete stop.", + title = "Emergency Shuttle", alert = TRUE) + COOLDOWN_START(src, turbulence_cooldown, rand(5 SECONDS, 20 SECONDS)) // Reduced interval after the announcement + +/datum/shuttle_event/turbulence/event_process() + . = ..() + if (!.) + return + if (!COOLDOWN_FINISHED(src, turbulence_cooldown)) + return + COOLDOWN_START(src, turbulence_cooldown, rand(minimum_interval, maximum_interval)) + shake() + addtimer(CALLBACK(src, PROC_REF(knock_down)), warning_interval, TIMER_DELETE_ME) + +/// Warn players to get buckled +/datum/shuttle_event/turbulence/proc/shake() + var/list/mobs = mobs_in_area_type(list(/area/shuttle/escape)) + for(var/mob/living/mob as anything in mobs) + var/shake_intensity = mob.buckled ? 0.25 : 1 + if(mob.client) + shake_camera(mob, 3 SECONDS, shake_intensity) + +/// Knock them down +/datum/shuttle_event/turbulence/proc/knock_down() + if (SSshuttle.emergency.mode != SHUTTLE_ESCAPE) + return // They docked + var/list/mobs = mobs_in_area_type(list(/area/shuttle/escape)) // Not very efficient but check again in case someone was outdoors + for(var/mob/living/mob as anything in mobs) + if(mob.buckled) + continue + mob.Paralyze(3 SECONDS, ignore_canstun = TRUE) diff --git a/code/modules/shuttle/spaceship_navigation_beacon.dm b/code/modules/shuttle/spaceship_navigation_beacon.dm index d46396a0e8ba9b..7338d336bde82e 100644 --- a/code/modules/shuttle/spaceship_navigation_beacon.dm +++ b/code/modules/shuttle/spaceship_navigation_beacon.dm @@ -5,7 +5,7 @@ icon_state = "beacon_active" base_icon_state = "beacon" density = TRUE - flags_1 = NODECONSTRUCT_1 + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION /// Locked beacons cannot be jumped to by ships. var/locked = FALSE diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index 0a18857efeda73..1dd54369dba607 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -79,7 +79,7 @@ var/obj/machinery/power/emitter/energycannon/magical/our_statue var/list/mob/living/sleepers = list() var/never_spoken = TRUE - flags_1 = NODECONSTRUCT_1 + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION /obj/structure/table/abductor/wabbajack/Initialize(mapload) . = ..() @@ -90,17 +90,14 @@ . = ..() /obj/structure/table/abductor/wabbajack/process() - var/area = orange(4, src) - if(!our_statue) - for(var/obj/machinery/power/emitter/energycannon/magical/M in area) - our_statue = M - break + if(isnull(our_statue)) + our_statue = locate() in orange(4, src) - if(!our_statue) + if(isnull(our_statue)) name = "inert [initial(name)]" return - else - name = initial(name) + + name = initial(name) var/turf/T = get_turf(src) var/list/found = list() @@ -201,7 +198,7 @@ /obj/structure/table/wood/shuttle_bar resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - flags_1 = NODECONSTRUCT_1 + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION max_integrity = 1000 var/boot_dir = 1 diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 8e1cb80adda5af..515d3b38cfea30 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -1,38 +1,38 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( /mob/living, - /obj/structure/blob, - /obj/effect/rune, - /obj/item/disk/nuclear, - /obj/machinery/nuclearbomb, - /obj/item/beacon, - /obj/narsie, - /obj/tear_in_reality, - /obj/machinery/teleport/station, - /obj/machinery/teleport/hub, - /obj/machinery/quantumpad, - /obj/effect/mob_spawn, + /obj/docking_port, /obj/effect/hierophant, - /obj/structure/receiving_pad, - /obj/item/warp_cube, - /obj/machinery/rnd/production, //print tracking beacons, send shuttle - /obj/machinery/autolathe, //same - /obj/projectile/beam/wormhole, + /obj/effect/mob_spawn, /obj/effect/portal, - /obj/item/shared_storage, - /obj/structure/extraction_point, - /obj/machinery/syndicatebomb, + /obj/effect/rune, + /obj/item/beacon, + /obj/item/disk/nuclear, + /obj/item/gps, /obj/item/hilbertshotel, - /obj/item/swapper, - /obj/docking_port, - /obj/machinery/launchpad, - /obj/machinery/exodrone_launcher, - /obj/machinery/disposal, - /obj/structure/disposalpipe, /obj/item/mail, + /obj/item/shared_storage, + /obj/item/swapper, + /obj/item/warp_cube, + /obj/machinery/autolathe, // In case you manage to get it to print a beacon while in transit /obj/machinery/camera, - /obj/item/gps, + /obj/machinery/disposal, + /obj/machinery/exodrone_launcher, + /obj/machinery/fax, + /obj/machinery/launchpad, + /obj/machinery/nuclearbomb, + /obj/machinery/quantumpad, + /obj/machinery/rnd/production, + /obj/machinery/syndicatebomb, + /obj/machinery/teleport/hub, + /obj/machinery/teleport/station, + /obj/narsie, + /obj/projectile/beam/wormhole, + /obj/structure/blob, /obj/structure/checkoutmachine, - /obj/machinery/fax + /obj/structure/disposalpipe, + /obj/structure/extraction_point, + /obj/structure/guardian_beacon, + /obj/tear_in_reality, ))) /// How many goody orders we can fit in a lockbox before we upgrade to a crate @@ -135,7 +135,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( var/list/empty_turfs = list() for(var/area/shuttle/shuttle_area as anything in shuttle_areas) - for(var/turf/open/floor/shuttle_turf in shuttle_area) + for(var/turf/open/floor/shuttle_turf in shuttle_area.get_contained_turfs()) if(shuttle_turf.is_blocked_turf()) continue empty_turfs += shuttle_turf @@ -160,15 +160,15 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( var/price var/pack_cost var/list/goodies_by_buyer = list() // if someone orders more than GOODY_FREE_SHIPPING_MAX goodies, we upcharge to a normal crate so they can't carry around 20 combat shotties - var/list/rejected_orders = list() //list of all orders that exceeded the available budget and are uncancelable - var/list/forced_briefcases = list() // SKYRAT EDIT ADDITION + var/list/clean_up_orders = list() // orders to remove since we are done with them + var/list/forced_briefcases = list() // NOVA EDIT ADDITION for(var/datum/supply_order/spawning_order in SSshuttle.shopping_list) if(!empty_turfs.len) break price = spawning_order.get_final_cost() - //department orders EARN money for cargo, not the other way around + // department orders EARN money for cargo, not the other way around var/datum/bank_account/paying_for_this if(!spawning_order.department_destination && spawning_order.charge_on_purchase) if(spawning_order.paying_account) //Someone paid out of pocket @@ -187,27 +187,25 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( if(spawning_order.paying_account) paying_for_this.bank_card_talk("Cargo order #[spawning_order.id] rejected due to lack of funds. Credits required: [price]") if(!spawning_order.can_be_cancelled) //only if it absolutly cannot be canceled by the player do we cancel it for them - rejected_orders += spawning_order + SSshuttle.shopping_list -= spawning_order + clean_up_orders += spawning_order continue pack_cost = spawning_order.pack.get_cost() - if(spawning_order.paying_account && spawning_order.charge_on_purchase) // SKYRAT EDIT CHANGE - ORIGINAL: if(spawning_order.paying_account) + if(spawning_order.paying_account && spawning_order.charge_on_purchase) // NOVA EDIT CHANGE - ORIGINAL: if(spawning_order.paying_account) paying_for_this = spawning_order.paying_account if(spawning_order.pack.goody) LAZYADD(goodies_by_buyer[spawning_order.paying_account], spawning_order) - var/reciever_message = "Cargo order #[spawning_order.id] has shipped." + var/receiver_message = "Cargo order #[spawning_order.id] has shipped." if(spawning_order.charge_on_purchase) - reciever_message += " [price] credits have been charged to your bank account" - paying_for_this.bank_card_talk(reciever_message) + receiver_message += " [price] credits have been charged to your bank account" + paying_for_this.bank_card_talk(receiver_message) SSeconomy.track_purchase(paying_for_this, price, spawning_order.pack.name) var/datum/bank_account/department/cargo = SSeconomy.get_dep_account(ACCOUNT_CAR) cargo.adjust_money(price - pack_cost) //Cargo gets the handling fee value += pack_cost - SSshuttle.shopping_list -= spawning_order - SSshuttle.order_history += spawning_order - QDEL_NULL(spawning_order.applied_coupon) - if(!spawning_order.pack.goody && !(spawning_order?.paying_account in forced_briefcases)) // SKYRAT EDIT CHANGE - ORIGINAL : if(!spawning_order.pack.goody) + if(!spawning_order.pack.goody && !(spawning_order?.paying_account in forced_briefcases)) // NOVA EDIT CHANGE - ORIGINAL : if(!spawning_order.pack.goody) var/obj/structure/closet/crate = spawning_order.generate(pick_n_take(empty_turfs)) crate.name += " - #[spawning_order.id]" @@ -220,10 +218,9 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( message_admins("\A [spawning_order.pack.name] ordered by [ADMIN_LOOKUPFLW(spawning_order.orderer_ckey)], paid by [from_whom] has shipped.") purchases++ - //clear out all rejected uncancellable orders - for(var/datum/supply_order/rejected_order in rejected_orders) - SSshuttle.shopping_list -= rejected_order - qdel(rejected_order) + // done dealing with order. Time to remove & delete it + SSshuttle.shopping_list -= spawning_order + clean_up_orders += spawning_order // we handle packing all the goodies last, since the type of crate we use depends on how many goodies they ordered. If it's more than GOODY_FREE_SHIPPING_MAX // then we send it in a crate (including the CRATE_TAX cost), otherwise send it in a free shipping case @@ -235,22 +232,22 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( if(buying_account_orders.len > GOODY_FREE_SHIPPING_MAX) // no free shipping, send a crate var/obj/structure/closet/crate/secure/owned/our_crate = new /obj/structure/closet/crate/secure/owned(pick_n_take(empty_turfs)) our_crate.buyer_account = buying_account - /// SKYRAT EDIT ADDITION START - FIXES COMMAND BUDGET CASES BEING UNOPENABLE + /// NOVA EDIT ADDITION START - FIXES COMMAND BUDGET CASES BEING UNOPENABLE if(istype(our_crate.buyer_account, /datum/bank_account/department)) our_crate.department_purchase = TRUE our_crate.department_account = our_crate.buyer_account - /// SKYRAT EDIT ADDITION END + /// NOVA EDIT ADDITION END our_crate.name = "goody crate - purchased by [buyer]" miscboxes[buyer] = our_crate else //free shipping in a case miscboxes[buyer] = new /obj/item/storage/lockbox/order(pick_n_take(empty_turfs)) var/obj/item/storage/lockbox/order/our_case = miscboxes[buyer] our_case.buyer_account = buying_account - /// SKYRAT EDIT ADDITION START - FIXES COMMAND BUDGET CASES BEING UNOPENABLE + /// NOVA EDIT ADDITION START - FIXES COMMAND BUDGET CASES BEING UNOPENABLE if(istype(our_case.buyer_account, /datum/bank_account/department)) our_case.department_purchase = TRUE our_case.department_account = our_case.buyer_account - /// SKYRAT EDIT ADDITION END + /// NOVA EDIT ADDITION END miscboxes[buyer].name = "goody case - purchased by [buyer]" misc_contents[buyer] = list() @@ -266,7 +263,10 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( order.generateCombo(miscboxes[miscbox], miscbox, misc_contents[miscbox], misc_costs[miscbox]) qdel(order) - SSeconomy.import_total += value + //clean up all dealt with orders + for(var/datum/supply_order/completed_order in clean_up_orders) + qdel(completed_order) + var/datum/bank_account/cargo_budget = SSeconomy.get_dep_account(ACCOUNT_CAR) investigate_log("[purchases] orders in this shipment, worth [value] credits. [cargo_budget.account_balance] credits left.", INVESTIGATE_CARGO) @@ -283,12 +283,13 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( var/datum/export_report/report = new for(var/area/shuttle/shuttle_area as anything in shuttle_areas) - for(var/atom/movable/exporting_atom in shuttle_area) - if(iscameramob(exporting_atom)) - continue - if(exporting_atom.anchored) - continue - export_item_and_contents(exporting_atom, apply_elastic = TRUE, dry_run = FALSE, external_report = report) + for(var/turf/shuttle_turf as anything in shuttle_area.get_contained_turfs()) + for(var/atom/movable/exporting_atom in shuttle_turf) + if(iscameramob(exporting_atom)) + continue + if(exporting_atom.anchored) + continue + export_item_and_contents(exporting_atom, apply_elastic = TRUE, dry_run = FALSE, external_report = report) if(report.exported_atoms) report.exported_atoms += "." //ugh @@ -301,14 +302,13 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( msg += export_text + "\n" cargo_budget.adjust_money(report.total_value[exported_datum]) - SSeconomy.export_total += (cargo_budget.account_balance - presale_points) SSshuttle.centcom_message = msg investigate_log("contents sold for [cargo_budget.account_balance - presale_points] credits. Contents: [report.exported_atoms ? report.exported_atoms.Join(",") + "." : "none."] Message: [SSshuttle.centcom_message || "none."]", INVESTIGATE_CARGO) /* Generates a box of mail depending on our exports and imports. Applied in the cargo shuttle sending/arriving, by building the crate if the round is ready to introduce mail based on the economy subsystem. - Then, fills the mail crate with mail, by picking applicable crew who can recieve mail at the time to sending. + Then, fills the mail crate with mail, by picking applicable crew who can receive mail at the time to sending. */ /obj/docking_port/mobile/supply/proc/create_mail() //Early return if there's no mail waiting to prevent taking up a slot. We also don't send mails on sundays or holidays. @@ -317,9 +317,8 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( //spawn crate var/list/empty_turfs = list() - for(var/place as anything in shuttle_areas) - var/area/shuttle/shuttle_area = place - for(var/turf/open/floor/shuttle_floor in shuttle_area) + for(var/area/shuttle/shuttle_area as anything in shuttle_areas) + for(var/turf/open/floor/shuttle_floor in shuttle_area.get_contained_turfs()) if(shuttle_floor.is_blocked_turf()) continue empty_turfs += shuttle_floor diff --git a/code/modules/shuttle/syndicate.dm b/code/modules/shuttle/syndicate.dm index dcb8748bfcba5a..4c59d9848fc12a 100644 --- a/code/modules/shuttle/syndicate.dm +++ b/code/modules/shuttle/syndicate.dm @@ -11,7 +11,7 @@ shuttleId = "syndicate" possible_destinations = "syndicate_away;syndicate_z5;syndicate_ne;syndicate_nw;syndicate_n;syndicate_se;syndicate_sw;syndicate_s;syndicate_custom" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - flags_1 = NODECONSTRUCT_1 + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION /obj/machinery/computer/shuttle/syndicate/launch_check(mob/user) . = ..() diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index 5bc39b389b315d..dc30f36149bc6b 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -48,7 +48,7 @@ button_icon_state = "spell_default" overlay_icon_state = "bg_spell_border" active_overlay_icon_state = "bg_spell_border_active_red" - check_flags = AB_CHECK_CONSCIOUS | AB_CHECK_INCAPACITATED + check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_PHASED panel = "Spells" melee_cooldown_time = 0 SECONDS diff --git a/code/modules/spells/spell_types/conjure/_conjure.dm b/code/modules/spells/spell_types/conjure/_conjure.dm index 3afe7c52557548..10b14bd47d55d6 100644 --- a/code/modules/spells/spell_types/conjure/_conjure.dm +++ b/code/modules/spells/spell_types/conjure/_conjure.dm @@ -44,7 +44,7 @@ if (spawn_place.overfloor_placed) spawn_place.ChangeTurf(summoned_object_type, flags = CHANGETURF_INHERIT_AIR) else - spawn_place.PlaceOnTop(summoned_object_type, flags = CHANGETURF_INHERIT_AIR) + spawn_place.place_on_top(summoned_object_type, flags = CHANGETURF_INHERIT_AIR) return var/turf/open/open_turf = spawn_place open_turf.replace_floor(summoned_object_type, flags = CHANGETURF_INHERIT_AIR) @@ -61,3 +61,28 @@ /// Called on atoms summoned after they are created, allows extra variable editing and such of created objects /datum/action/cooldown/spell/conjure/proc/post_summon(atom/summoned_object, atom/cast_on) return + +///limits the amount of summons +/datum/action/cooldown/spell/conjure/limit_summons + ///max number of after images + var/max_summons + ///How many clones do we have summoned + var/number_of_summons = 0 + +/datum/action/cooldown/spell/conjure/limit_summons/can_cast_spell(feedback = TRUE) + . = ..() + if(!.) + return FALSE + if(number_of_summons >= max_summons) + return FALSE + return TRUE + +/datum/action/cooldown/spell/conjure/limit_summons/post_summon(atom/summoned_object, atom/cast_on) + RegisterSignals(summoned_object, list(COMSIG_QDELETING, COMSIG_LIVING_DEATH), PROC_REF(delete_copy)) + number_of_summons++ + +/datum/action/cooldown/spell/conjure/limit_summons/proc/delete_copy(datum/source) + SIGNAL_HANDLER + + UnregisterSignal(source, list(COMSIG_QDELETING, COMSIG_LIVING_DEATH)) + number_of_summons-- diff --git a/code/modules/spells/spell_types/conjure/presents.dm b/code/modules/spells/spell_types/conjure/presents.dm index 057fef9b9b4a80..b630c43225c471 100644 --- a/code/modules/spells/spell_types/conjure/presents.dm +++ b/code/modules/spells/spell_types/conjure/presents.dm @@ -10,5 +10,5 @@ invocation_type = INVOCATION_SHOUT summon_radius = 3 - summon_type = list(/obj/item/a_gift) + summon_type = list(/obj/item/gift) summon_amount = 5 diff --git a/code/modules/spells/spell_types/jaunt/shadow_walk.dm b/code/modules/spells/spell_types/jaunt/shadow_walk.dm index de03f8e15e022a..c5a47cd1740c40 100644 --- a/code/modules/spells/spell_types/jaunt/shadow_walk.dm +++ b/code/modules/spells/spell_types/jaunt/shadow_walk.dm @@ -59,7 +59,7 @@ var/healing_rate = 1.5 /// When cooldown is active, you are prevented from moving into tiles that would eject you from your jaunt COOLDOWN_DECLARE(light_step_cooldown) - /// Has the jaunter recently recieved a warning about light? + /// Has the jaunter recently received a warning about light? var/light_alert_given = FALSE /obj/effect/dummy/phased_mob/shadow/Initialize(mapload) @@ -125,7 +125,7 @@ return light_turf.get_lumcount() > light_max // jaunt ends on TRUE /** - * Checks if the user should recieve a warning that they're moving into light. + * Checks if the user should receive a warning that they're moving into light. * * Checks the cooldown for the warning message on moving into the light. * If the message has been displayed, and the cooldown (delay period) is complete, returns TRUE. diff --git a/code/modules/spells/spell_types/pointed/mind_transfer.dm b/code/modules/spells/spell_types/pointed/mind_transfer.dm index 72441362b652eb..fa401c3b432f67 100644 --- a/code/modules/spells/spell_types/pointed/mind_transfer.dm +++ b/code/modules/spells/spell_types/pointed/mind_transfer.dm @@ -69,7 +69,7 @@ return FALSE if(isguardian(cast_on)) - var/mob/living/simple_animal/hostile/guardian/stand = cast_on + var/mob/living/basic/guardian/stand = cast_on if(stand.summoner && stand.summoner == owner) to_chat(owner, span_warning("Swapping minds with your own guardian would just put you back into your own head!")) return FALSE @@ -96,7 +96,7 @@ var/mob/living/to_swap = cast_on if(isguardian(cast_on)) - var/mob/living/simple_animal/hostile/guardian/stand = cast_on + var/mob/living/basic/guardian/stand = cast_on if(stand.summoner) to_swap = stand.summoner diff --git a/code/modules/spells/spell_types/right_and_wrong.dm b/code/modules/spells/spell_types/right_and_wrong.dm index 017e7fc279df3a..27662943af03a4 100644 --- a/code/modules/spells/spell_types/right_and_wrong.dm +++ b/code/modules/spells/spell_types/right_and_wrong.dm @@ -42,7 +42,6 @@ GLOBAL_LIST_INIT(summoned_guns, list( /obj/item/gun/energy/e_gun/dragnet, /obj/item/gun/energy/e_gun/turret, /obj/item/gun/energy/pulse/carbine, - /obj/item/gun/energy/decloner, /obj/item/gun/energy/mindflayer, /obj/item/gun/energy/recharge/kinetic_accelerator, /obj/item/gun/energy/plasmacutter/adv, @@ -266,7 +265,7 @@ GLOBAL_LIST_INIT(summoned_magic_objectives, list( /datum/summon_things_controller/New() RegisterSignal(SSdcs, COMSIG_GLOB_CREWMEMBER_JOINED, PROC_REF(on_latejoin)) -/datum/summon_things_controller/Destroy(force, ...) +/datum/summon_things_controller/Destroy(force) . = ..() UnregisterSignal(SSdcs, COMSIG_GLOB_CREWMEMBER_JOINED) diff --git a/code/modules/spells/spell_types/self/mime_vow.dm b/code/modules/spells/spell_types/self/mime_vow.dm index 444775e7ff4aa7..bd666786b9624b 100644 --- a/code/modules/spells/spell_types/self/mime_vow.dm +++ b/code/modules/spells/spell_types/self/mime_vow.dm @@ -1,6 +1,6 @@ /datum/action/cooldown/spell/vow_of_silence - name = "Speech" - desc = "Make (or break) a vow of silence." + name = "Break Vow" + desc = "Break your vow of silence. Permanently." background_icon_state = "bg_mime" overlay_icon_state = "bg_mime_border" button_icon = 'icons/mob/actions/actions_mime.dmi' @@ -8,7 +8,6 @@ panel = "Mime" school = SCHOOL_MIME - cooldown_time = 5 MINUTES spell_requirements = NONE spell_max_level = 1 @@ -20,18 +19,18 @@ /datum/action/cooldown/spell/vow_of_silence/Remove(mob/living/remove_from) . = ..() REMOVE_TRAIT(remove_from, TRAIT_MIMING, "[type]") - remove_from.clear_mood_event("vow") + +/datum/action/cooldown/spell/vow_of_silence/before_cast(atom/cast_on) + if(tgui_alert(usr, "Are you sure? There's no going back.", "Break Vow", list("I'm Sure", "Abort")) != "I'm Sure") + return SPELL_CANCEL_CAST + return ..() /datum/action/cooldown/spell/vow_of_silence/cast(mob/living/carbon/human/cast_on) . = ..() - if(HAS_TRAIT_FROM(cast_on, TRAIT_MIMING, "[type]")) - to_chat(cast_on, span_notice("You break your vow of silence.")) - cast_on.log_message("broke [cast_on.p_their()] vow of silence.", LOG_GAME) - cast_on.add_mood_event("vow", /datum/mood_event/broken_vow) - REMOVE_TRAIT(cast_on, TRAIT_MIMING, "[type]") - else - to_chat(cast_on, span_notice("You make a vow of silence.")) - cast_on.log_message("made a vow of silence.", LOG_GAME) - cast_on.clear_mood_event("vow") - ADD_TRAIT(cast_on, TRAIT_MIMING, "[type]") - cast_on.update_mob_action_buttons() + to_chat(cast_on, span_notice("You break your vow of silence.")) + cast_on.log_message("broke [cast_on.p_their()] vow of silence.", LOG_GAME) + cast_on.add_mood_event("vow", /datum/mood_event/broken_vow) + REMOVE_TRAIT(cast_on, TRAIT_MIMING, "[type]") + var/datum/job/mime/mime_job = SSjob.GetJob(JOB_MIME) + mime_job.total_positions += 1 + qdel(src) diff --git a/code/modules/spells/spell_types/self/personality_commune.dm b/code/modules/spells/spell_types/self/personality_commune.dm deleted file mode 100644 index cd10c2b7736aac..00000000000000 --- a/code/modules/spells/spell_types/self/personality_commune.dm +++ /dev/null @@ -1,56 +0,0 @@ -// This can probably be changed to use mind linker at some point -/datum/action/cooldown/spell/personality_commune - name = "Personality Commune" - desc = "Sends thoughts to your alternate consciousness." - button_icon_state = "telepathy" - cooldown_time = 0 SECONDS - spell_requirements = NONE - - /// Fluff text shown when a message is sent to the pair - var/fluff_text = span_boldnotice("You hear an echoing voice in the back of your head...") - /// The message to send to the corresponding person on cast - var/to_send - -/datum/action/cooldown/spell/personality_commune/New(Target) - . = ..() - if(!istype(target, /datum/brain_trauma/severe/split_personality)) - stack_trace("[type] was created on a target that isn't a /datum/brain_trauma/severe/split_personality, this doesn't work.") - qdel(src) - -/datum/action/cooldown/spell/personality_commune/is_valid_target(atom/cast_on) - return isliving(cast_on) - -/datum/action/cooldown/spell/personality_commune/before_cast(atom/cast_on) - . = ..() - if(. & SPELL_CANCEL_CAST) - return - - var/datum/brain_trauma/severe/split_personality/trauma = target - if(!istype(trauma)) // hypothetically impossible but you never know - return . | SPELL_CANCEL_CAST - - to_send = tgui_input_text(cast_on, "What would you like to tell your other self?", "Commune") - if(QDELETED(src) || QDELETED(trauma) || QDELETED(cast_on) || QDELETED(trauma.owner) || !can_cast_spell()) - return . | SPELL_CANCEL_CAST - if(!to_send) - reset_cooldown() - return . | SPELL_CANCEL_CAST - -// Pillaged and adapted from telepathy code -/datum/action/cooldown/spell/personality_commune/cast(mob/living/cast_on) - . = ..() - var/datum/brain_trauma/severe/split_personality/trauma = target - - var/user_message = span_boldnotice("You concentrate and send thoughts to your other self:") - var/user_message_body = span_notice("[to_send]") - - to_chat(cast_on, "[user_message] [user_message_body]") - - trauma.owner.balloon_alert(trauma.owner, "you hear a voice") - to_chat(trauma.owner, "[fluff_text] [user_message_body]") - - log_directed_talk(cast_on, trauma.owner, to_send, LOG_SAY, "[name]") - for(var/dead_mob in GLOB.dead_mob_list) - if(!isobserver(dead_mob)) - continue - to_chat(dead_mob, "[FOLLOW_LINK(dead_mob, cast_on)] [span_boldnotice("[cast_on] [name]:")] [span_notice("\"[to_send]\" to")] [span_name("[trauma]")]") diff --git a/code/modules/spells/spell_types/self/summonitem.dm b/code/modules/spells/spell_types/self/summonitem.dm index 62d6b07816196e..ab99f35271d3cc 100644 --- a/code/modules/spells/spell_types/self/summonitem.dm +++ b/code/modules/spells/spell_types/self/summonitem.dm @@ -138,7 +138,6 @@ item_to_retrieve = null break - SEND_SIGNAL(holding_mark, COMSIG_MAGIC_RECALL, caster, item_to_retrieve) holding_mark.dropItemToGround(item_to_retrieve) else if(isobj(item_to_retrieve.loc)) @@ -157,15 +156,6 @@ infinite_recursion += 1 - else - // Organs are usually stored in nullspace - if(isorgan(item_to_retrieve)) - var/obj/item/organ/organ = item_to_retrieve - if(organ.owner) - // If this code ever runs I will be happy - log_combat(caster, organ.owner, "magically removed [organ.name] from", addition = "COMBAT MODE: [uppertext(caster.combat_mode)]") - organ.Remove(organ.owner) - if(!item_to_retrieve) return @@ -176,6 +166,8 @@ else item_to_retrieve.forceMove(caster.drop_location()) item_to_retrieve.loc.visible_message(span_warning("[item_to_retrieve] suddenly appears!")) + + SEND_SIGNAL(item_to_retrieve, COMSIG_MAGIC_RECALL, caster, item_to_retrieve) playsound(get_turf(item_to_retrieve), 'sound/magic/summonitems_generic.ogg', 50, TRUE) /datum/action/cooldown/spell/summonitem/abductor diff --git a/code/modules/spells/spell_types/shapeshift/_shapeshift.dm b/code/modules/spells/spell_types/shapeshift/_shapeshift.dm index 5aecd863bce43c..59c9ffdde3b0be 100644 --- a/code/modules/spells/spell_types/shapeshift/_shapeshift.dm +++ b/code/modules/spells/spell_types/shapeshift/_shapeshift.dm @@ -128,7 +128,7 @@ new gib_type(get_turf(possible_vent)) playsound(possible_vent, 'sound/effects/reee.ogg', 75, TRUE) - priority_announce("We detected a pipe blockage around [get_area(get_turf(cast_on))], please dispatch someone to investigate.", "Central Command") + priority_announce("We detected a pipe blockage around [get_area(get_turf(cast_on))], please dispatch someone to investigate.", "[command_name()]") // Gib our caster, and make sure to leave nothing behind // (If we leave something behind, it'll drop on the turf of the pipe, which is kinda wrong.) cast_on.investigate_log("has been gibbed by shapeshifting while ventcrawling.", INVESTIGATE_DEATHS) diff --git a/code/modules/spells/spell_types/touch/scream_for_me.dm b/code/modules/spells/spell_types/touch/scream_for_me.dm index 231b6927e504be..d3c142d7039216 100644 --- a/code/modules/spells/spell_types/touch/scream_for_me.dm +++ b/code/modules/spells/spell_types/touch/scream_for_me.dm @@ -2,7 +2,7 @@ /datum/action/cooldown/spell/touch/scream_for_me name = "Scream For Me" desc = "This wicked spell inflicts many severe wounds on your target, causing them to \ - likely bleed to death unless they recieve immediate medical attention." + likely bleed to death unless they receive immediate medical attention." button_icon_state = "scream_for_me" sound = null //trust me, you'll hear their wounds diff --git a/code/modules/spells/spell_types/tower_of_babel.dm b/code/modules/spells/spell_types/tower_of_babel.dm index 3c652579b7f83f..618711a8d9563b 100644 --- a/code/modules/spells/spell_types/tower_of_babel.dm +++ b/code/modules/spells/spell_types/tower_of_babel.dm @@ -29,7 +29,7 @@ GLOBAL_DATUM(tower_of_babel, /datum/tower_of_babel) curse_of_babel(target) -/datum/tower_of_babel/Destroy(force, ...) +/datum/tower_of_babel/Destroy(force) . = ..() UnregisterSignal(SSdcs, COMSIG_GLOB_CREWMEMBER_JOINED) diff --git a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm index ec29b326ae9fc4..a4be94b95b1ac2 100644 --- a/code/modules/station_goals/bsa.dm +++ b/code/modules/station_goals/bsa.dm @@ -3,7 +3,7 @@ ///BSA unlocked by head ID swipes GLOBAL_VAR_INIT(bsa_unlock, FALSE) -/* SKYRAT EDIT REMOVAL - MOVED TO MODULAR BSA_OVERHAUL +/* NOVA EDIT REMOVAL - MOVED TO MODULAR BSA_OVERHAUL // Crew has to build a bluespace cannon // Cargo orders part for high price // Requires high amount of power @@ -17,7 +17,7 @@ GLOBAL_VAR_INIT(bsa_unlock, FALSE) "We need you to construct BSA-[rand(1,99)] Artillery position aboard your station.", "", "Base parts are available for shipping via cargo.", - "-Nanotrasen Naval Command", + "-Symphionia Naval Command", ).Join("\n") /datum/station_goal/bluespace_cannon/on_report() @@ -41,7 +41,7 @@ GLOBAL_VAR_INIT(bsa_unlock, FALSE) /obj/machinery/bsa/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool, time = 1 SECONDS) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/bsa/back name = "Bluespace Artillery Generator" @@ -79,7 +79,7 @@ GLOBAL_VAR_INIT(bsa_unlock, FALSE) /obj/machinery/bsa/middle name = "Bluespace Artillery Fusor" - desc = "Contents classified by Nanotrasen Naval Command. Needs to be linked with the other BSA parts using a multitool." + desc = "Contents classified by Symphionia Naval Command. Needs to be linked with the other BSA parts using a multitool." icon_state = "fuel_chamber" var/datum/weakref/back_ref var/datum/weakref/front_ref @@ -204,7 +204,6 @@ GLOBAL_VAR_INIT(bsa_unlock, FALSE) /obj/machinery/bsa/full/proc/get_layer() top_layer = mutable_appearance(icon, layer = ABOVE_MOB_LAYER) - SET_PLANE_EXPLICIT(top_layer, GAME_PLANE_UPPER, src) switch(dir) if(WEST) top_layer.icon_state = "top_west" @@ -243,14 +242,19 @@ GLOBAL_VAR_INIT(bsa_unlock, FALSE) point.Beam(target, icon_state = "bsa_beam", time = 5 SECONDS, maxdistance = world.maxx) //ZZZAP new /obj/effect/temp_visual/bsa_splash(point, dir) - notify_ghosts("The Bluespace Artillery has been fired!", source = bullseye, header = "KABOOM!") + notify_ghosts( + "The Bluespace Artillery has been fired!", + source = bullseye, + header = "KABOOM!", + ) + if(!blocker) - message_admins("[ADMIN_LOOKUPFLW(user)] has launched an artillery strike targeting [ADMIN_VERBOSEJMP(bullseye)].") - user.log_message("has launched an artillery strike targeting [AREACOORD(bullseye)].", LOG_GAME) + message_admins("[ADMIN_LOOKUPFLW(user)] has launched a bluespace artillery strike targeting [ADMIN_VERBOSEJMP(bullseye)].") + user.log_message("has launched a bluespace artillery strike targeting [AREACOORD(bullseye)].", LOG_GAME) explosion(bullseye, devastation_range = ex_power, heavy_impact_range = ex_power*2, light_impact_range = ex_power*4, explosion_cause = src) else - message_admins("[ADMIN_LOOKUPFLW(user)] has launched an artillery strike targeting [ADMIN_VERBOSEJMP(bullseye)] but it was blocked by [blocker] at [ADMIN_VERBOSEJMP(target)].") - user.log_message("has launched an artillery strike targeting [AREACOORD(bullseye)] but it was blocked by [blocker] at [AREACOORD(target)].", LOG_GAME) + message_admins("[ADMIN_LOOKUPFLW(user)] has launched a bluespace artillery strike targeting [ADMIN_VERBOSEJMP(bullseye)] but it was blocked by [blocker] at [ADMIN_VERBOSEJMP(target)].") + user.log_message("has launched a bluespace artillery strike targeting [AREACOORD(bullseye)] but it was blocked by [blocker] at [AREACOORD(target)].", LOG_GAME) /obj/machinery/bsa/full/proc/reload() @@ -340,7 +344,7 @@ GLOBAL_VAR_INIT(bsa_unlock, FALSE) if(isnull(options[victim])) return target = options[victim] - log_game("[key_name(user)] has aimed the artillery strike at [target].") + log_game("[key_name(user)] has aimed the bluespace artillery strike at [target].") /obj/machinery/computer/bsa_control/proc/get_target_name() diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index 03f69c2664cae1..83fb1f0ea7f34d 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -101,12 +101,11 @@ F.parent = src fillers += F - if(SSticker.mode) - var/datum/station_goal/dna_vault/dna_vault_goal = locate() in GLOB.station_goals - if (!isnull(dna_vault_goal)) - animals_max = dna_vault_goal.animal_count - plants_max = dna_vault_goal.plant_count - dna_max = dna_vault_goal.human_count + var/datum/station_goal/dna_vault/dna_vault_goal = locate() in GLOB.station_goals + if (!isnull(dna_vault_goal)) + animals_max = dna_vault_goal.animal_count + plants_max = dna_vault_goal.plant_count + dna_max = dna_vault_goal.human_count return ..() diff --git a/code/modules/station_goals/generate_goals.dm b/code/modules/station_goals/generate_goals.dm new file mode 100644 index 00000000000000..102212c121214a --- /dev/null +++ b/code/modules/station_goals/generate_goals.dm @@ -0,0 +1,13 @@ +/// Creates the initial station goals. +/proc/generate_station_goals(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 as anything in possible) + if(initial(goal.requires_space)) + possible -= goal + var/goal_weights = 0 + while(possible.len && goal_weights < goal_budget) + var/datum/station_goal/picked = pick_n_take(possible) + goal_weights += initial(picked.weight) + GLOB.station_goals += new picked diff --git a/code/modules/station_goals/meteor_shield.dm b/code/modules/station_goals/meteor_shield.dm index 7b16606013b216..3b87ef74578b5a 100644 --- a/code/modules/station_goals/meteor_shield.dm +++ b/code/modules/station_goals/meteor_shield.dm @@ -89,7 +89,7 @@ /obj/machinery/satellite/meteor_shield/process() if(obj_flags & EMAGGED) //kills the processing because emagged meteor shields no longer stop meteors in any way - return ..() + return PROCESS_KILL if(!active) return for(var/obj/effect/meteor/meteor_to_destroy in GLOB.meteor_list) diff --git a/code/modules/station_goals/station_goal.dm b/code/modules/station_goals/station_goal.dm index 30ed0b78b6c2f6..1ef0d8729a6398 100644 --- a/code/modules/station_goals/station_goal.dm +++ b/code/modules/station_goals/station_goal.dm @@ -10,8 +10,8 @@ GLOBAL_LIST_EMPTY_TYPED(station_goals, /datum/station_goal) var/report_message = "Complete this goal." /datum/station_goal/proc/send_report() - priority_announce("Priority Nanotrasen directive received. Project \"[name]\" details inbound.", "Incoming Priority Message", SSstation.announcer.get_rand_report_sound()) - print_command_report(get_report(),"Nanotrasen Directive [pick(GLOB.phonetic_alphabet)] \Roman[rand(1,50)]", announce=FALSE) + priority_announce("Priority Symphionia directive received. Project \"[name]\" details inbound.", "Incoming Priority Message", SSstation.announcer.get_rand_report_sound()) + print_command_report(get_report(),"Symphionia Directive [pick(GLOB.phonetic_alphabet)] \Roman[rand(1,50)]", announce=FALSE) on_report() /datum/station_goal/proc/on_report() diff --git a/code/modules/surgery/advanced/brainwashing.dm b/code/modules/surgery/advanced/brainwashing.dm index 4c5efe367fed48..afbe3f0a8ef209 100644 --- a/code/modules/surgery/advanced/brainwashing.dm +++ b/code/modules/surgery/advanced/brainwashing.dm @@ -1,8 +1,8 @@ /obj/item/disk/surgery/brainwashing - name = "Surgery Disk" //SKYRAT EDIT: Formerly "Brainwashing Surgery Disk" //Finally I can upload the funny surgery disk without letting everyone in the room know about it! - desc = "The disk provides instructions on some kind of surgery, but the label has been scratched off..." //Skyrat edit: Moved to Special Desc. + name = "Surgery Disk" //NOVA EDIT: Formerly "Brainwashing Surgery Disk" //Finally I can upload the funny surgery disk without letting everyone in the room know about it! + desc = "The disk provides instructions on some kind of surgery, but the label has been scratched off..." //NOVA EDIT: Moved to Special Desc. surgeries = list(/datum/surgery/advanced/brainwashing) - special_desc_requirement = EXAMINE_CHECK_JOB // Skyrat edit + special_desc_requirement = EXAMINE_CHECK_JOB // NOVA EDIT special_desc_jobs = list("Medical Doctor, Chief Medical Officer, Roboticist") //SKYRAT CHANGE //You mean to tell me the roles that get this role-exclusive item know what it does? special_desc = "The disk provides instructions on how to impress an order on a brain, making it the primary objective of the patient." diff --git a/code/modules/surgery/amputation.dm b/code/modules/surgery/amputation.dm index d442743c36be4d..a853cd73ce1c29 100644 --- a/code/modules/surgery/amputation.dm +++ b/code/modules/surgery/amputation.dm @@ -17,7 +17,7 @@ /datum/surgery_step/clamp_bleeders, /datum/surgery_step/sever_limb, ) - removes_target_bodypart = TRUE // SKYRAT EDIT ADDITION - Surgically unremovable limbs + removes_target_bodypart = TRUE // NOVA EDIT ADDITION - Surgically unremovable limbs /datum/surgery/amputation/can_start(mob/user, mob/living/patient) if(HAS_TRAIT(patient, TRAIT_NODISMEMBER)) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index a8f35aaa968913..e51d083ddc4cb3 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -6,6 +6,7 @@ w_class = WEIGHT_CLASS_SMALL icon = 'icons/mob/human/bodyparts.dmi' icon_state = "" //Leave this blank! Bodyparts are built using overlays + flags_1 = PREVENT_CONTENTS_EXPLOSION_1 //actually mindblowing /// The icon for Organic limbs using greyscale VAR_PROTECTED/icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC ///The icon for non-greyscale limbs @@ -19,7 +20,7 @@ layer = BELOW_MOB_LAYER //so it isn't hidden behind objects when on the floor grind_results = list(/datum/reagent/bone_dust = 10, /datum/reagent/consumable/liquidgibs = 5) // robotic bodyparts and chests/heads cannot be ground /// The mob that "owns" this limb - /// DO NOT MODIFY DIRECTLY. Use set_owner() + /// DO NOT MODIFY DIRECTLY. Use update_owner() var/mob/living/carbon/owner /// If this limb can be scarred. @@ -72,11 +73,11 @@ ///Controls if the limb is disabled. TRUE means it is disabled (similar to being removed, but still present for the sake of targeted interactions). var/bodypart_disabled = FALSE ///Handles limb disabling by damage. If 0 (0%), a limb can't be disabled via damage. If 1 (100%), it is disabled at max limb damage. Anything between is the percentage of damage against maximum limb damage needed to disable the limb. - var/disabling_threshold_percentage = 1 //SKYRAT EDIT CHANGE - COMBAT - ORIGINAL : var/disabling_threshold_percentage = 0 + var/disabling_threshold_percentage = 1 //NOVA EDIT CHANGE - COMBAT - ORIGINAL : var/disabling_threshold_percentage = 0 // Damage variables ///A mutiplication of the burn and brute damage that the limb's stored damage contributes to its attached mob's overall wellbeing. - var/body_damage_coeff = 1 + var/body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_TOTAL ///The current amount of brute damage the limb has var/brute_dam = 0 ///The current amount of burn damage the limb has @@ -126,7 +127,6 @@ var/list/damage_examines = list( BRUTE = DEFAULT_BRUTE_EXAMINE_TEXT, BURN = DEFAULT_BURN_EXAMINE_TEXT, - CLONE = DEFAULT_CLONE_EXAMINE_TEXT, ) // Wounds related variables @@ -156,9 +156,6 @@ /// If something is currently grasping this bodypart and trying to staunch bleeding (see [/obj/item/hand_item/self_grasp]) var/obj/item/hand_item/self_grasp/grasped_by - ///A list of all the external organs we've got stored to draw horns, wings and stuff with (special because we are actually in the limbs unlike normal organs :/ ) - ///If someone ever comes around to making all organs exist in the bodyparts, you can just remove this and use a typed loop - var/list/obj/item/organ/external/external_organs = list() ///A list of all bodypart overlays to draw var/list/bodypart_overlays = list() @@ -166,6 +163,8 @@ var/attack_type = BRUTE /// the verb used for an unarmed attack when using this limb, such as arm.unarmed_attack_verb = punch var/unarmed_attack_verb = "bump" + /// if we have a special attack verb for hitting someone who is grappled by us, it goes here. + var/grappled_attack_verb /// what visual effect is used when this limb is used to strike someone. var/unarmed_attack_effect = ATTACK_EFFECT_PUNCH /// Sounds when this bodypart is used in an umarmed attack @@ -175,8 +174,8 @@ var/unarmed_damage_low = 1 ///Highest possible punch damage this bodypart can ive. var/unarmed_damage_high = 1 - ///Damage at which attacks from this bodypart will stun - var/unarmed_stun_threshold = 2 + ///Determines the accuracy bonus, armor penetration and knockdown probability. + var/unarmed_effectiveness = 10 /// How many pixels this bodypart will offset the top half of the mob, used for abnormally sized torsos and legs var/top_offset = 0 @@ -231,31 +230,40 @@ refresh_bleed_rate() /obj/item/bodypart/Destroy() - if(owner) - owner.remove_bodypart(src) - set_owner(null) + if(owner && !QDELETED(owner)) + forced_removal(special = FALSE, dismembered = TRUE, move_to_floor = FALSE) + update_owner(null) for(var/wound in wounds) qdel(wound) // wounds is a lazylist, and each wound removes itself from it on deletion. if(length(wounds)) stack_trace("[type] qdeleted with [length(wounds)] uncleared wounds") wounds.Cut() - if(length(external_organs)) - for(var/obj/item/organ/external/external_organ as anything in external_organs) - external_organs -= external_organ - qdel(external_organ) // It handles removing its references to this limb on its own. + owner = null + + for(var/atom/movable/movable in contents) + qdel(movable) - external_organs = list() QDEL_LIST_ASSOC_VAL(feature_offsets) return ..() -/obj/item/bodypart/forceMove(atom/destination) //Please. Never forcemove a limb if its's actually in use. This is only for borgs. - SHOULD_CALL_PARENT(TRUE) +/obj/item/bodypart/ex_act(severity, target) + if(owner) //trust me bro you dont want this + return FALSE + return ..() - . = ..() - if(isturf(destination)) - update_icon_dropped() + +/obj/item/bodypart/proc/on_forced_removal(atom/old_loc, dir, forced, list/old_locs) + SIGNAL_HANDLER + + forced_removal(special = FALSE, dismembered = TRUE, move_to_floor = FALSE) + +/// In-case someone, somehow only teleports someones limb +/obj/item/bodypart/proc/forced_removal(special, dismembered, move_to_floor) + drop_limb(special, dismembered, move_to_floor) + + update_icon_dropped() /obj/item/bodypart/examine(mob/user) SHOULD_CALL_PARENT(TRUE) @@ -332,17 +340,17 @@ for(var/datum/wound/wound as anything in wounds) switch(wound.severity) if(WOUND_SEVERITY_TRIVIAL) - // check_list += "\t [span_danger("Your [name] is suffering [wound.a_or_from] [lowertext(wound.name)].")]" // SKYRAT EDIT - Medical overhaul-ish - ORIGINAL - check_list += "\t [span_danger("Your [name] is suffering [wound.a_or_from] [wound.get_topic_name(owner)].")]" // SKYRAT EDIT - Medical overhaul-ish + // check_list += "\t [span_danger("Your [name] is suffering [wound.a_or_from] [lowertext(wound.name)].")]" // NOVA EDIT - Medical overhaul-ish - ORIGINAL + check_list += "\t [span_danger("Your [name] is suffering [wound.a_or_from] [wound.get_topic_name(owner)].")]" // NOVA EDIT - Medical overhaul-ish if(WOUND_SEVERITY_MODERATE) - // check_list += "\t [span_warning("Your [name] is suffering [wound.a_or_from] [lowertext(wound.name)]!")]" // SKYRAT EDIT - Medical overhaul-ish - ORIGINAL - check_list += "\t [span_warning("Your [name] is suffering [wound.a_or_from] [wound.get_topic_name(owner)]!")]" // SKYRAT EDIT - Medical overhaul-ish + // check_list += "\t [span_warning("Your [name] is suffering [wound.a_or_from] [lowertext(wound.name)]!")]" // NOVA EDIT - Medical overhaul-ish - ORIGINAL + check_list += "\t [span_warning("Your [name] is suffering [wound.a_or_from] [wound.get_topic_name(owner)]!")]" // NOVA EDIT - Medical overhaul-ish if(WOUND_SEVERITY_SEVERE) - // check_list += "\t [span_boldwarning("Your [name] is suffering [wound.a_or_from] [lowertext(wound.name)]!")]" // SKYRAT EDIT - Medical overhaul-ish - ORIGINAL - check_list += "\t [span_boldwarning("Your [name] is suffering [wound.a_or_from] [wound.get_topic_name(owner)]!")]" // SKYRAT EDIT - Medical overhaul-ish + // check_list += "\t [span_boldwarning("Your [name] is suffering [wound.a_or_from] [lowertext(wound.name)]!")]" // NOVA EDIT - Medical overhaul-ish - ORIGINAL + check_list += "\t [span_boldwarning("Your [name] is suffering [wound.a_or_from] [wound.get_topic_name(owner)]!")]" // NOVA EDIT - Medical overhaul-ish if(WOUND_SEVERITY_CRITICAL) - // check_list += "\t [span_boldwarning("Your [name] is suffering [wound.a_or_from] [lowertext(wound.name)]!!")]" // SKYRAT EDIT - Medical overhaul-ish - ORIGINAL - check_list += "\t [span_boldwarning("Your [name] is suffering [wound.a_or_from] [wound.get_topic_name(owner)]!!")]" // SKYRAT EDIT - Medical overhaul-ish + // check_list += "\t [span_boldwarning("Your [name] is suffering [wound.a_or_from] [lowertext(wound.name)]!!")]" // NOVA EDIT - Medical overhaul-ish - ORIGINAL + check_list += "\t [span_boldwarning("Your [name] is suffering [wound.a_or_from] [wound.get_topic_name(owner)]!!")]" // NOVA EDIT - Medical overhaul-ish for(var/obj/item/embedded_thing in embedded_objects) var/stuck_word = embedded_thing.isEmbedHarmless() ? "stuck" : "embedded" @@ -406,31 +414,24 @@ var/atom/drop_loc = drop_location() if(IS_ORGANIC_LIMB(src)) playsound(drop_loc, 'sound/misc/splort.ogg', 50, TRUE, -1) - QDEL_NULL(current_gauze) - for(var/obj/item/organ/bodypart_organ as anything in get_organs()) - bodypart_organ.transfer_to_limb(src, owner) - for(var/obj/item/organ/external/external as anything in external_organs) - external.remove_from_limb() - external.forceMove(drop_loc) - for(var/obj/item/item_in_bodypart in src) - item_in_bodypart.forceMove(drop_loc) - - update_icon_dropped() -///since organs aren't actually stored in the bodypart themselves while attached to a person, we have to query the owner for what we should have -/obj/item/bodypart/proc/get_organs() - SHOULD_CALL_PARENT(TRUE) - RETURN_TYPE(/list) + QDEL_NULL(current_gauze) - if(!owner) - return FALSE + for(var/obj/item/organ/bodypart_organ in contents) + if(bodypart_organ.organ_flags & ORGAN_UNREMOVABLE) + continue + if(owner) + bodypart_organ.Remove(bodypart_organ.owner) + else + if(bodypart_organ.bodypart_remove(src)) + if(drop_loc) //can be null if being deleted + bodypart_organ.forceMove(get_turf(drop_loc)) - var/list/bodypart_organs - for(var/obj/item/organ/organ_check as anything in owner.organs) //internal organs inside the dismembered limb are dropped. - if(check_zone(organ_check.zone) == body_zone) - LAZYADD(bodypart_organs, organ_check) // this way if we don't have any, it'll just return null + if(drop_loc) //can be null during deletion + for(var/atom/movable/movable as anything in src) + movable.forceMove(drop_loc) - return bodypart_organs + update_icon_dropped() //Return TRUE to get whatever mob this is in to update health. /obj/item/bodypart/proc/on_life(seconds_per_tick, times_fired) @@ -528,7 +529,7 @@ return // now we have our wounding_type and are ready to carry on with wounds and dealing the actual damage if(wounding_dmg >= WOUND_MINIMUM_DAMAGE && wound_bonus != CANT_WOUND) - //SKYRAT EDIT ADDITION - MEDICAL + //NOVA EDIT ADDITION - MEDICAL //This makes it so the more damaged bodyparts are, the more likely they are to get wounds //However, this bonus isn't applied when the object doesn't pass the initial wound threshold, nor is it when it already has enough wounding dmg if(wounding_dmg < DAMAGED_BODYPART_BONUS_WOUNDING_BONUS) @@ -540,7 +541,7 @@ if (istype(current_gauze, /obj/item/stack/medical/gauze)) var/obj/item/stack/medical/gauze/our_gauze = current_gauze our_gauze.get_hit() - //SKYRAT EDIT ADDITION END - MEDICAL + //NOVA EDIT ADDITION END - MEDICAL check_wounding(wounding_type, wounding_dmg, wound_bonus, bare_wound_bonus, attack_direction, damage_source = damage_source) for(var/datum/wound/iter_wound as anything in wounds) @@ -667,12 +668,12 @@ update_disabled() if(updating_health) owner.updatehealth() - //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION + //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION //Consider moving this to a new species proc "spec_heal" maybe? if(owner.stat == DEAD && HAS_TRAIT(owner, TRAIT_REVIVES_BY_HEALING)) if(owner.health > 50) owner.revive(FALSE) - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END cremation_progress = min(0, cremation_progress - ((brute_dam + burn_dam)*(100/max_damage))) return update_bodypart_damage_state() @@ -759,70 +760,91 @@ owner.update_health_hud() //update the healthdoll owner.update_body() -///Proc to change the value of the `owner` variable and react to the event of its change. -/obj/item/bodypart/proc/set_owner(new_owner) - SHOULD_CALL_PARENT(TRUE) +/// Proc to change the value of the `owner` variable and react to the event of its change. +/obj/item/bodypart/proc/update_owner(new_owner) + SHOULD_NOT_OVERRIDE(TRUE) + if(owner == new_owner) return FALSE //`null` is a valid option, so we need to use a num var to make it clear no change was made. - var/mob/living/carbon/old_owner = owner - owner = new_owner - SEND_SIGNAL(src, COMSIG_BODYPART_CHANGED_OWNER, new_owner, old_owner) - var/needs_update_disabled = FALSE //Only really relevant if there's an owner - if(old_owner) - if(held_index) - old_owner.on_lost_hand(src) - if(old_owner.hud_used) - var/atom/movable/screen/inventory/hand/hand = old_owner.hud_used.hand_slots["[held_index]"] - if(hand) - hand.update_appearance() - old_owner.update_worn_gloves() - if(speed_modifier) - old_owner.update_bodypart_speed_modifier() - if(length(bodypart_traits)) - old_owner.remove_traits(bodypart_traits, bodypart_trait_source) - if(initial(can_be_disabled)) - if(HAS_TRAIT(old_owner, TRAIT_NOLIMBDISABLE)) - if(!owner || !HAS_TRAIT(owner, TRAIT_NOLIMBDISABLE)) - set_can_be_disabled(initial(can_be_disabled)) - needs_update_disabled = TRUE - UnregisterSignal(old_owner, list( - SIGNAL_REMOVETRAIT(TRAIT_NOLIMBDISABLE), - SIGNAL_ADDTRAIT(TRAIT_NOLIMBDISABLE), - SIGNAL_REMOVETRAIT(TRAIT_NOBLOOD), - SIGNAL_ADDTRAIT(TRAIT_NOBLOOD), - )) - UnregisterSignal(old_owner, COMSIG_ATOM_RESTYLE) - if(owner) - if(held_index) - owner.on_added_hand(src, held_index) - if(owner.hud_used) - var/atom/movable/screen/inventory/hand/hand = owner.hud_used.hand_slots["[held_index]"] - if(hand) - hand.update_appearance() - owner.update_worn_gloves() - if(speed_modifier) - owner.update_bodypart_speed_modifier() - if(length(bodypart_traits)) - owner.add_traits(bodypart_traits, bodypart_trait_source) - if(initial(can_be_disabled)) - if(HAS_TRAIT(owner, TRAIT_NOLIMBDISABLE)) - set_can_be_disabled(FALSE) - needs_update_disabled = FALSE - RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_NOLIMBDISABLE), PROC_REF(on_owner_nolimbdisable_trait_loss)) - RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_NOLIMBDISABLE), PROC_REF(on_owner_nolimbdisable_trait_gain)) - // Bleeding stuff - RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_NOBLOOD), PROC_REF(on_owner_nobleed_loss)) - RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_NOBLOOD), PROC_REF(on_owner_nobleed_gain)) - - if(needs_update_disabled) - update_disabled() - RegisterSignal(owner, COMSIG_ATOM_RESTYLE, PROC_REF(on_attempt_feature_restyle_mob)) + SEND_SIGNAL(src, COMSIG_BODYPART_CHANGED_OWNER, new_owner, owner) + + if(owner) + . = owner //return value is old owner + clear_ownership(owner) + if(new_owner) + apply_ownership(new_owner) refresh_bleed_rate() - return old_owner + return . + +/// Run all necessary procs to remove a limbs ownership and remove the appropriate signals and traits +/obj/item/bodypart/proc/clear_ownership(mob/living/carbon/old_owner) + SHOULD_CALL_PARENT(TRUE) + + owner = null + + if(speed_modifier) + old_owner.update_bodypart_speed_modifier() + if(length(bodypart_traits)) + old_owner.remove_traits(bodypart_traits, bodypart_trait_source) + + UnregisterSignal(old_owner, list( + SIGNAL_REMOVETRAIT(TRAIT_NOLIMBDISABLE), + SIGNAL_ADDTRAIT(TRAIT_NOLIMBDISABLE), + SIGNAL_REMOVETRAIT(TRAIT_NOBLOOD), + SIGNAL_ADDTRAIT(TRAIT_NOBLOOD), + )) + + UnregisterSignal(old_owner, COMSIG_ATOM_RESTYLE) + +/// Apply ownership of a limb to someone, giving the appropriate traits, updates and signals +/obj/item/bodypart/proc/apply_ownership(mob/living/carbon/new_owner) + SHOULD_CALL_PARENT(TRUE) + + owner = new_owner + + if(speed_modifier) + owner.update_bodypart_speed_modifier() + if(length(bodypart_traits)) + owner.add_traits(bodypart_traits, bodypart_trait_source) + + if(initial(can_be_disabled)) + if(HAS_TRAIT(owner, TRAIT_NOLIMBDISABLE)) + set_can_be_disabled(FALSE) + + // Listen to disable traits being added + RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_NOLIMBDISABLE), PROC_REF(on_owner_nolimbdisable_trait_loss)) + RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_NOLIMBDISABLE), PROC_REF(on_owner_nolimbdisable_trait_gain)) + + // Listen to no blood traits being added + RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_NOBLOOD), PROC_REF(on_owner_nobleed_loss)) + RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_NOBLOOD), PROC_REF(on_owner_nobleed_gain)) + + if(can_be_disabled) + update_disabled() + + RegisterSignal(owner, COMSIG_ATOM_RESTYLE, PROC_REF(on_attempt_feature_restyle_mob)) + + forceMove(owner) + RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(on_forced_removal)) //this must be set after we moved, or we insta gib + +/// Called on addition of a bodypart +/obj/item/bodypart/proc/on_adding(mob/living/carbon/new_owner) + SHOULD_CALL_PARENT(TRUE) + + item_flags |= ABSTRACT + ADD_TRAIT(src, TRAIT_NODROP, ORGAN_INSIDE_BODY_TRAIT) + +/// Called on removal of a bodypart. +/obj/item/bodypart/proc/on_removal(mob/living/carbon/old_owner) + SHOULD_CALL_PARENT(TRUE) + + UnregisterSignal(src, COMSIG_MOVABLE_MOVED) + + item_flags &= ~ABSTRACT + REMOVE_TRAIT(src, TRAIT_NODROP, ORGAN_INSIDE_BODY_TRAIT) -/obj/item/bodypart/proc/on_removal() if(!length(bodypart_traits)) return @@ -901,7 +923,7 @@ SHOULD_CALL_PARENT(TRUE) if(IS_ORGANIC_LIMB(src)) - if(owner && HAS_TRAIT(owner, TRAIT_HUSK)) + if(!(bodypart_flags & BODYPART_UNHUSKABLE) && owner && HAS_TRAIT(owner, TRAIT_HUSK)) dmg_overlay_type = "" //no damage overlay shown when husked is_husked = TRUE else if(owner && HAS_TRAIT(owner, TRAIT_INVISIBLE_MAN)) @@ -944,7 +966,7 @@ if(should_draw_greyscale) //Should the limb be colored? draw_color ||= species_color || (skin_tone ? skintone2hex(skin_tone) : null) - // SKYRAT EDIT ADDITION + // NOVA EDIT ADDITION var/datum/species/owner_species = human_owner.dna.species if(owner_species && owner_species.specific_alpha != 255) @@ -954,7 +976,7 @@ if(aux_zone) aux_zone_markings = LAZYCOPY(owner_species.body_markings[aux_zone]) markings_alpha = owner_species.markings_alpha - // SKYRAT EDIT END + // NOVA EDIT END recolor_external_organs() return TRUE @@ -1036,13 +1058,13 @@ draw_color ||= (species_color) || (skin_tone && skintone2hex(skin_tone)) if(draw_color) - //SKYRAT EDIT BEGIN - Alpha values on limbs //We check if the limb is attached and if the owner has an alpha value to append + //NOVA EDIT BEGIN - Alpha values on limbs //We check if the limb is attached and if the owner has an alpha value to append var/limb_color = alpha != 255 ? "[draw_color][num2hex(alpha, 2)]" : "[draw_color]" limb.color = limb_color if(aux_zone) aux.color = limb_color - //SKYRAT EDIT END + //NOVA EDIT END //EMISSIVE CODE START // For some reason this was applied as an overlay on the aux image and limb image before. @@ -1081,7 +1103,7 @@ if(overlay.layers & external_layer) . += overlay.get_overlay(external_layer, src) - // SKYRAT EDIT ADDITION BEGIN - MARKINGS CODE + // NOVA EDIT ADDITION BEGIN - MARKINGS CODE var/override_color var/atom/offset_spokesman = owner || src // First, check to see if this bodypart is husked. If so, we don't want to apply our sparkledog colors to the limb. @@ -1136,7 +1158,7 @@ . += accessory_overlay if (emissive) . += emissive - // SKYRAT EDIT END - MARKINGS CODE END + // NOVA EDIT END - MARKINGS CODE END return . @@ -1267,12 +1289,12 @@ if(BLEED_OVERLAY_LOW to BLEED_OVERLAY_MED) new_bleed_icon = "[body_zone]_1" if(BLEED_OVERLAY_MED to BLEED_OVERLAY_GUSH) - if(owner.body_position == LYING_DOWN || IS_IN_STASIS(owner) || owner.stat == DEAD) + if(owner.body_position == LYING_DOWN || HAS_TRAIT(owner, TRAIT_STASIS) || owner.stat == DEAD) new_bleed_icon = "[body_zone]_2s" else new_bleed_icon = "[body_zone]_2" if(BLEED_OVERLAY_GUSH to INFINITY) - if(IS_IN_STASIS(owner) || owner.stat == DEAD) + if(HAS_TRAIT(owner, TRAIT_STASIS) || owner.stat == DEAD) new_bleed_icon = "[body_zone]_2s" else new_bleed_icon = "[body_zone]_3" @@ -1392,8 +1414,8 @@ var/burn_damage = AUGGED_LIMB_EMP_BURN_DAMAGE if(severity == EMP_HEAVY) time_needed *= 2 - brute_damage *= 1.3 // SKYRAT EDIT : Balance - Lowers total damage from ~125 Brute to ~30 - burn_damage *= 1.3 // SKYRAT EDIT : Balance - Lowers total damage from ~104 Burn to ~24 + brute_damage *= 1.3 // NOVA EDIT : Balance - Lowers total damage from ~125 Brute to ~30 + burn_damage *= 1.3 // NOVA EDIT : Balance - Lowers total damage from ~104 Burn to ~24 receive_damage(brute_damage, burn_damage) do_sparks(number = 1, cardinal_only = FALSE, source = owner || src) diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index e863341eb4344b..45a05e82de9dba 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -67,7 +67,11 @@ if(wounding_type != WOUND_BURN && isturf(chest_owner.loc) && can_bleed()) chest_owner.add_splatter_floor(chest_owner.loc) playsound(get_turf(chest_owner), 'sound/misc/splort.ogg', 80, TRUE) - for(var/obj/item/organ/organ as anything in chest_owner.organs) + for(var/obj/item/organ/organ in contents) + // NOVA EDIT START - Non-spillable organs + if(!organ.drop_when_organ_spilling) + continue + // NOVA EDIT END var/org_zone = check_zone(organ.zone) if(org_zone != BODY_ZONE_CHEST) continue @@ -75,39 +79,28 @@ organ.forceMove(chest_owner.loc) . += organ - for(var/obj/item/organ/external/ext_organ as anything in src.external_organs) - if(!(ext_organ.organ_flags & ORGAN_UNREMOVABLE)) - ext_organ.Remove(chest_owner) - ext_organ.forceMove(chest_owner.loc) - . += ext_organ - if(cavity_item) cavity_item.forceMove(chest_owner.loc) . += cavity_item cavity_item = null - return . - ///limb removal. The "special" argument is used for swapping a limb with a new one without the effects of losing a limb kicking in. -/obj/item/bodypart/proc/drop_limb(special, dismembered) +/obj/item/bodypart/proc/drop_limb(special, dismembered, move_to_floor = TRUE) if(!owner) return var/atom/drop_loc = owner.drop_location() - SEND_SIGNAL(owner, COMSIG_CARBON_REMOVE_LIMB, src, dismembered) - SEND_SIGNAL(src, COMSIG_BODYPART_REMOVED, owner, dismembered) + SEND_SIGNAL(owner, COMSIG_CARBON_REMOVE_LIMB, src, special, dismembered) + SEND_SIGNAL(src, COMSIG_BODYPART_REMOVED, owner, special, dismembered) update_limb(dropping_limb = TRUE) bodypart_flags &= ~BODYPART_IMPLANTED //limb is out and about, it can't really be considered an implant - owner.remove_bodypart(src) + owner.remove_bodypart(src, special) for(var/datum/scar/scar as anything in scars) scar.victim = null LAZYREMOVE(owner.all_scars, scar) - for(var/obj/item/organ/external/ext_organ as anything in external_organs) - ext_organ.transfer_to_limb(src, null) //Null is the second arg because the bodypart is being removed from it's owner. - - var/mob/living/carbon/phantom_owner = set_owner(null) // so we can still refer to the guy who lost their limb after said limb forgets 'em + var/mob/living/carbon/phantom_owner = update_owner(null) // so we can still refer to the guy who lost their limb after said limb forgets 'em for(var/datum/wound/wound as anything in wounds) wound.remove_wound(TRUE) @@ -131,28 +124,23 @@ to_chat(phantom_owner, span_warning("You feel your [mutation] deactivating from the loss of your [body_zone]!")) phantom_owner.dna.force_lose(mutation) - for(var/obj/item/organ/organ as anything in phantom_owner.organs) //internal organs inside the dismembered limb are dropped. - var/org_zone = check_zone(organ.zone) - if(org_zone != body_zone) - continue - organ.transfer_to_limb(src, phantom_owner) - update_icon_dropped() phantom_owner.update_health_hud() //update the healthdoll phantom_owner.update_body() phantom_owner.update_body_parts() - if(!drop_loc) // drop_loc = null happens when a "dummy human" used for rendering icons on prefs screen gets its limbs replaced. - qdel(src) - return - if(bodypart_flags & BODYPART_PSEUDOPART) drop_organs(phantom_owner) //Psuedoparts shouldn't have organs, but just in case qdel(src) return - forceMove(drop_loc) - SEND_SIGNAL(phantom_owner, COMSIG_CARBON_POST_REMOVE_LIMB, src, dismembered) + if(move_to_floor) + if(!drop_loc) // drop_loc = null happens when a "dummy human" used for rendering icons on prefs screen gets its limbs replaced. + qdel(src) + return + forceMove(drop_loc) + + SEND_SIGNAL(phantom_owner, COMSIG_CARBON_POST_REMOVE_LIMB, src, special, dismembered) /** * get_mangled_state() is relevant for flesh and bone bodyparts, and returns whether this bodypart has mangled skin, mangled bone, or both (or neither i guess) @@ -201,48 +189,13 @@ var/datum/wound/loss/dismembering = new return dismembering.apply_dismember(src, wounding_type) -///Transfers the organ to the limb, and to the limb's owner, if it has one. This is done on drop_limb(). -/obj/item/organ/proc/transfer_to_limb(obj/item/bodypart/bodypart, mob/living/carbon/bodypart_owner) - Remove(bodypart_owner) - add_to_limb(bodypart) - -///Adds the organ to a bodypart, used in transfer_to_limb() -/obj/item/organ/proc/add_to_limb(obj/item/bodypart/bodypart) - forceMove(bodypart) - -///Removes the organ from the limb, placing it into nullspace. -/obj/item/organ/proc/remove_from_limb() - moveToNullspace() - -/obj/item/organ/internal/brain/transfer_to_limb(obj/item/bodypart/head/head, mob/living/carbon/human/head_owner) - Remove(head_owner) //Changeling brain concerns are now handled in Remove - forceMove(head) - head.brain = src - if(brainmob) - head.brainmob = brainmob - brainmob = null - head.brainmob.forceMove(head) - head.brainmob.set_stat(DEAD) - -/obj/item/organ/internal/eyes/transfer_to_limb(obj/item/bodypart/head/head, mob/living/carbon/human/head_owner) - head.eyes = src - ..() - -/obj/item/organ/internal/ears/transfer_to_limb(obj/item/bodypart/head/head, mob/living/carbon/human/head_owner) - head.ears = src - ..() - -/obj/item/organ/internal/tongue/transfer_to_limb(obj/item/bodypart/head/head, mob/living/carbon/human/head_owner) - head.tongue = src - ..() - -/obj/item/bodypart/chest/drop_limb(special) +/obj/item/bodypart/chest/drop_limb(special, dismembered, move_to_floor = TRUE) if(special) return ..() //if this is not a special drop, this is a mistake return FALSE -/obj/item/bodypart/arm/drop_limb(special) +/obj/item/bodypart/arm/drop_limb(special, dismembered, move_to_floor = TRUE) var/mob/living/carbon/arm_owner = owner if(special || !arm_owner) @@ -265,7 +218,7 @@ arm_owner.update_worn_gloves() //to remove the bloody hands overlay return ..() -/obj/item/bodypart/leg/drop_limb(special) +/obj/item/bodypart/leg/drop_limb(special, dismembered, move_to_floor = TRUE) if(owner && !special) if(owner.legcuffed) owner.legcuffed.forceMove(owner.drop_location()) //At this point bodypart is still in nullspace @@ -276,7 +229,7 @@ owner.dropItemToGround(owner.shoes, TRUE) return ..() -/obj/item/bodypart/head/drop_limb(special) +/obj/item/bodypart/head/drop_limb(special, dismembered, move_to_floor = TRUE) if(!special) //Drop all worn head items for(var/obj/item/head_item as anything in list(owner.glasses, owner.ears, owner.wear_mask, owner.head)) @@ -332,8 +285,6 @@ SEND_SIGNAL(new_limb_owner, COMSIG_CARBON_ATTACH_LIMB, src, special) SEND_SIGNAL(src, COMSIG_BODYPART_ATTACHED, new_limb_owner, special) - moveToNullspace() - set_owner(new_limb_owner) new_limb_owner.add_bodypart(src) LAZYREMOVE(new_limb_owner.body_zone_dismembered_by, body_zone) @@ -346,8 +297,10 @@ qdel(attach_surgery) break - for(var/obj/item/organ/limb_organ in contents) - limb_organ.Insert(new_limb_owner, TRUE) + for(var/obj/item/organ/organ as anything in new_limb_owner.organs) + if(deprecise_zone(organ.zone) != body_zone) + continue + organ.bodypart_insert(src) for(var/datum/wound/wound as anything in wounds) // we have to remove the wound from the limb wound list first, so that we can reapply it fresh with the new person @@ -361,7 +314,7 @@ scar.victim = new_limb_owner LAZYADD(new_limb_owner.all_scars, scar) - if(!special && new_limb_owner.mob_mood.has_mood_of_category("dismembered_[body_zone]")) + if(new_limb_owner.mob_mood?.has_mood_of_category("dismembered_[body_zone]")) new_limb_owner.clear_mood_event("dismembered_[body_zone]") new_limb_owner.add_mood_event("phantom_pain_[body_zone]", /datum/mood_event/reattachment, src) @@ -387,15 +340,6 @@ if(!.) return - if(brain) - brain = null - if(tongue) - tongue = null - if(ears) - ears = null - if(eyes) - eyes = null - if(old_real_name) new_head_owner.real_name = old_real_name real_name = new_head_owner.real_name diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index 30fb63a803453e..b7249892b37a2f 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -3,7 +3,7 @@ desc = "Didn't make sense not to live for fun, your brain gets smart but your head gets dumb." icon = 'icons/mob/human/bodyparts.dmi' icon_state = "default_human_head" - max_damage = 250 //SKYRAT EDIT CHANGE: max_damage = 200 + max_damage = LIMB_MAX_HP_CORE body_zone = BODY_ZONE_HEAD body_part = HEAD plaintext_zone = "head" @@ -23,15 +23,9 @@ unarmed_miss_sound = 'sound/weapons/bite.ogg' unarmed_damage_low = 1 // Yeah, biteing is pretty weak, blame the monkey super-nerf unarmed_damage_high = 3 - unarmed_stun_threshold = 4 + unarmed_effectiveness = 0 bodypart_trait_source = HEAD_TRAIT - var/mob/living/brain/brainmob //The current occupant. - var/obj/item/organ/internal/brain/brain //The brain organ - var/obj/item/organ/internal/eyes/eyes - var/obj/item/organ/internal/ears/ears - var/obj/item/organ/internal/tongue/tongue - /// Do we show the information about missing organs upon being examined? Defaults to TRUE, useful for Dullahan heads. var/show_organs_on_examine = TRUE @@ -76,11 +70,6 @@ ///Current lipstick trait, if any (such as TRAIT_KISS_OF_DEATH) var/stored_lipstick_trait - /// Draw this head as "debrained" - VAR_PROTECTED/show_debrained = FALSE - /// Draw this head as missing eyes - VAR_PROTECTED/show_eyeless = FALSE - /// Offset to apply to equipment worn on the ears var/datum/worn_feature_offset/worn_ears_offset /// Offset to apply to equipment worn on the eyes @@ -92,13 +81,17 @@ /// Offset to apply to overlays placed on the face var/datum/worn_feature_offset/worn_face_offset -/obj/item/bodypart/head/Destroy() - QDEL_NULL(brainmob) //order is sensitive, see warning in Exited() below - QDEL_NULL(brain) - QDEL_NULL(eyes) - QDEL_NULL(ears) - QDEL_NULL(tongue) + VAR_PROTECTED + /// Draw this head as "debrained" + show_debrained = FALSE + + /// Draw this head as missing eyes + show_eyeless = FALSE + /// Can this head be dismembered normally? + can_dismember = FALSE + +/obj/item/bodypart/head/Destroy() QDEL_NULL(worn_ears_offset) QDEL_NULL(worn_glasses_offset) QDEL_NULL(worn_mask_offset) @@ -106,35 +99,18 @@ QDEL_NULL(worn_face_offset) return ..() -/obj/item/bodypart/head/Exited(atom/movable/gone, direction) - if(gone == brain) - brain = null - update_icon_dropped() - if(!QDELETED(brainmob)) //this shouldn't happen without badminnery. - message_admins("Brainmob: ([ADMIN_LOOKUPFLW(brainmob)]) was left stranded in [src] at [ADMIN_VERBOSEJMP(src)] without a brain!") - brainmob.log_message(", brainmob, was left stranded in [src] without a brain", LOG_GAME) - if(gone == brainmob) - brainmob = null - if(gone == eyes) - eyes = null - update_icon_dropped() - if(gone == ears) - ears = null - if(gone == tongue) - tongue = null - return ..() - /obj/item/bodypart/head/examine(mob/user) . = ..() if(show_organs_on_examine && IS_ORGANIC_LIMB(src)) + var/obj/item/organ/internal/brain/brain = locate(/obj/item/organ/internal/brain) in src if(!brain) . += span_info("The brain has been removed from [src].") - else if(brain.suicided || (brainmob && HAS_TRAIT(brainmob, TRAIT_SUICIDED))) + else if(brain.suicided || (brain.brainmob && HAS_TRAIT(brain.brainmob, TRAIT_SUICIDED))) . += span_info("There's a miserable expression on [real_name]'s face; they must have really hated life. There's no hope of recovery.") - else if(brainmob?.health <= HEALTH_THRESHOLD_DEAD) - . += span_info("It's leaking some kind of... clear fluid? The brain inside must be in pretty bad shape.") - else if(brainmob) - if(brainmob.key || brainmob.get_ghost(FALSE, TRUE)) + else if(brain.brainmob) + if(brain.brainmob?.health <= HEALTH_THRESHOLD_DEAD) + . += span_info("It's leaking some kind of... clear fluid? The brain inside must be in pretty bad shape.") + if(brain.brainmob.key || brain.brainmob.get_ghost(FALSE, TRUE)) . += span_info("Its muscles are twitching slightly... It seems to have some life still in it.") else . += span_info("It's completely lifeless. Perhaps there'll be a chance for them later.") @@ -143,48 +119,32 @@ else . += span_info("It's completely lifeless.") - if(!eyes) + if(!(locate(/obj/item/organ/internal/eyes) in src)) . += span_info("[real_name]'s eyes have been removed.") - if(!ears) + if(!(locate(/obj/item/organ/internal/ears) in src)) . += span_info("[real_name]'s ears have been removed.") - if(!tongue) + if(!(locate(/obj/item/organ/internal/tongue) in src)) . += span_info("[real_name]'s tongue has been removed.") /obj/item/bodypart/head/can_dismember(obj/item/item) + if (!can_dismember) + return FALSE + if(owner.stat < HARD_CRIT) return FALSE + return ..() /obj/item/bodypart/head/drop_organs(mob/user, violent_removal) - var/atom/drop_loc = drop_location() - for(var/obj/item/head_item in src) - if(head_item == brain) - if(user) - user.visible_message(span_warning("[user] saws [src] open and pulls out a brain!"), span_notice("You saw [src] open and pull out a brain.")) - if(brainmob) - brainmob.container = null - brain.brainmob = brainmob - brainmob = null - if(violent_removal && prob(rand(80, 100))) //ghetto surgery can damage the brain. - to_chat(user, span_warning("[brain] was damaged in the process!")) - brain.set_organ_damage(brain.maxHealth) - brain.forceMove(drop_loc) - brain = null - update_icon_dropped() - else - if(istype(head_item, /obj/item/reagent_containers/pill)) - for(var/datum/action/item_action/hands_free/activate_pill/pill_action in head_item.actions) - qdel(pill_action) - else if(isorgan(head_item)) - var/obj/item/organ/organ = head_item - if(organ.organ_flags & ORGAN_UNREMOVABLE) - continue - head_item.forceMove(drop_loc) - eyes = null - ears = null - tongue = null + if(user) + user.visible_message(span_warning("[user] saws [src] open and pulls out a brain!"), span_notice("You saw [src] open and pull out a brain.")) + var/obj/item/organ/internal/brain/brain = locate(/obj/item/organ/internal/brain) in src + if(brain && violent_removal && prob(90)) //ghetto surgery can damage the brain. + to_chat(user, span_warning("[brain] was damaged in the process!")) + brain.set_organ_damage(brain.maxHealth) + update_limb() return ..() @@ -205,6 +165,7 @@ . += get_hair_and_lips_icon(dropped) // We need to get the eyes if we are dropped (ugh) if(dropped) + var/obj/item/organ/internal/eyes/eyes = locate(/obj/item/organ/internal/eyes) in src // This is a bit of copy/paste code from eyes.dm:generate_body_overlay if(eyes?.eye_icon_state && (head_flags & HEAD_EYESPRITES)) var/image/eye_left = image('icons/mob/human/human_face.dmi', "[eyes.eye_icon_state]_l", -BODY_LAYER, SOUTH) @@ -225,7 +186,7 @@ worn_face_offset.apply_offset(eye_left) worn_face_offset.apply_offset(eye_right) - // SKYRAT EDIT ADDITION START - Customization (Emissives and synths) + // NOVA EDIT ADDITION START - Customization (Emissives and synths) if(eyes.eye_icon_state == "None") eye_left.alpha = 0 eye_right.alpha = 0 @@ -244,7 +205,7 @@ eye_left.overlays += emissive_left eye_right.overlays += emissive_right - // SKYRAT EDIT END + // NOVA EDIT END . += eye_left . += eye_right @@ -289,7 +250,7 @@ px_x = 0 px_y = 0 bodypart_flags = BODYPART_UNREMOVABLE - max_damage = 500 + max_damage = LIMB_MAX_HP_ALIEN_CORE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ALIEN | BODYTYPE_ORGANIC /obj/item/bodypart/head/larva @@ -302,5 +263,5 @@ px_x = 0 px_y = 0 bodypart_flags = BODYPART_UNREMOVABLE - max_damage = 50 + max_damage = LIMB_MAX_HP_ALIEN_LARVA bodytype = BODYTYPE_LARVA_PLACEHOLDER | BODYTYPE_ORGANIC diff --git a/code/modules/surgery/bodyparts/head_hair_and_lips.dm b/code/modules/surgery/bodyparts/head_hair_and_lips.dm index 12093f71408ee4..faf6ae1c5f092b 100644 --- a/code/modules/surgery/bodyparts/head_hair_and_lips.dm +++ b/code/modules/surgery/bodyparts/head_hair_and_lips.dm @@ -39,7 +39,7 @@ //HIDDEN CHECKS END if(owner) - if(!hair_hidden && !owner.get_organ_slot(ORGAN_SLOT_BRAIN) && !HAS_TRAIT(owner, TRAIT_NO_DEBRAIN_OVERLAY)) + if(!hair_hidden && !owner.get_organ_slot(ORGAN_SLOT_BRAIN) && !HAS_TRAIT(owner, TRAIT_NO_DEBRAIN_OVERLAY) && !istype(src, /obj/item/bodypart/head/robot/synth)) // NOVA EDIT CHANGE - ORIGINAL: if(!hair_hidden && !owner.get_organ_slot(ORGAN_SLOT_BRAIN) && !HAS_TRAIT(owner, TRAIT_NO_DEBRAIN_OVERLAY)) show_debrained = TRUE else show_debrained = FALSE @@ -49,12 +49,12 @@ else show_eyeless = FALSE else - if(!hair_hidden && !brain) + if(!hair_hidden && !(locate(/obj/item/organ/internal/brain) in src) && !istype(src, /obj/item/bodypart/head/robot/synth)) // NOVA EDIT CHANGE - ORIGINAL: if(!hair_hidden && !(locate(/obj/item/organ/internal/brain) in src)) show_debrained = TRUE else show_debrained = FALSE - if(!eyes) + if(!(locate(/obj/item/organ/internal/eyes) in src)) show_eyeless = TRUE else show_eyeless = FALSE @@ -65,7 +65,7 @@ lip_style = human_head_owner.lip_style lip_color = human_head_owner.lip_color hairstyle = human_head_owner.hairstyle - hair_alpha = human_head_owner.hair_alpha ? human_head_owner.hair_alpha : owner_species.hair_alpha // SKYRAT EDIT - Customization - Hair alpha - ORIGINAL: hair_alpha = owner_species.hair_alpha + hair_alpha = human_head_owner.hair_alpha ? human_head_owner.hair_alpha : owner_species.hair_alpha // NOVA EDIT - Customization - Hair alpha - ORIGINAL: hair_alpha = owner_species.hair_alpha hair_color = human_head_owner.hair_color facial_hairstyle = human_head_owner.facial_hairstyle facial_hair_alpha = owner_species.facial_hair_alpha diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm index f80364fcb5db2a..52671b5fbc16c5 100644 --- a/code/modules/surgery/bodyparts/helpers.dm +++ b/code/modules/surgery/bodyparts/helpers.dm @@ -15,6 +15,7 @@ /mob/living/carbon/proc/del_and_replace_bodypart(obj/item/bodypart/new_limb, special) var/obj/item/bodypart/old_limb = get_bodypart(new_limb.body_zone) if(old_limb) + old_limb.drop_limb(special = TRUE) qdel(old_limb) new_limb.try_attach_limb(src, special = special) @@ -172,7 +173,7 @@ /mob/living/carbon/proc/synchronize_bodytypes() var/all_limb_flags = NONE for(var/obj/item/bodypart/limb as anything in bodyparts) - for(var/obj/item/organ/external/ext_organ as anything in limb.external_organs) + for(var/obj/item/organ/external/ext_organ in limb) all_limb_flags |= ext_organ.external_bodytypes all_limb_flags |= limb.bodytype @@ -215,3 +216,5 @@ . = "#fff4e6" if("orange") . = "#ffc905" + if("green") + . = "#a8e61d" diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm index 7eee48f9a797d0..c657e89cefdbf6 100644 --- a/code/modules/surgery/bodyparts/parts.dm +++ b/code/modules/surgery/bodyparts/parts.dm @@ -3,7 +3,7 @@ name = BODY_ZONE_CHEST desc = "It's impolite to stare at a person's chest." icon_state = "default_human_chest" - max_damage = 250 //SKYRAT EDIT CHANGE: max_damage = 200 + max_damage = LIMB_MAX_HP_CORE body_zone = BODY_ZONE_CHEST body_part = CHEST plaintext_zone = "chest" @@ -32,9 +32,21 @@ var/datum/worn_feature_offset/worn_suit_offset /// Offset to apply to equipment worn on the neck var/datum/worn_feature_offset/worn_neck_offset + /// Which functional (i.e. flightpotion) wing types (if any) does this bodypart support? If count is >1 a radial menu is used to choose between all icons in list + var/list/wing_types = list(/obj/item/organ/external/wings/functional/angel) + +/obj/item/bodypart/chest/forced_removal(dismembered, special, move_to_floor) + var/mob/living/carbon/old_owner = owner + ..(special = TRUE) //special because we're self destructing + + //If someones chest is teleported away, they die pretty hard + if(!old_owner) + return + message_admins("[ADMIN_LOOKUPFLW(old_owner)] was gibbed after their chest teleported to [ADMIN_VERBOSEJMP(loc)].") + old_owner.gib(DROP_ALL_REMAINS) /obj/item/bodypart/chest/can_dismember(obj/item/item) - if(owner.stat < HARD_CRIT || !get_organs()) + if(owner.stat < HARD_CRIT || !contents.len) return FALSE return ..() @@ -79,8 +91,9 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE bodypart_flags = BODYPART_UNREMOVABLE - max_damage = 500 + max_damage = LIMB_MAX_HP_ALIEN_CORE acceptable_bodytype = BODYTYPE_HUMANOID + wing_types = NONE /obj/item/bodypart/chest/larva icon = 'icons/mob/human/species/alien/bodyparts.dmi' @@ -90,9 +103,10 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE bodypart_flags = BODYPART_UNREMOVABLE - max_damage = 50 + max_damage = LIMB_MAX_HP_ALIEN_LARVA bodytype = BODYTYPE_LARVA_PLACEHOLDER | BODYTYPE_ORGANIC acceptable_bodytype = BODYTYPE_LARVA_PLACEHOLDER + wing_types = NONE /// Parent Type for arms, should not appear in game. /obj/item/bodypart/arm @@ -100,14 +114,14 @@ desc = "Hey buddy give me a HAND and report this to the github because you shouldn't be seeing this." attack_verb_continuous = list("slaps", "punches") attack_verb_simple = list("slap", "punch") - max_damage = 60 //SKYRAT EDIT CHANGE - ORIGINAL: 50 + max_damage = LIMB_MAX_HP_DEFAULT aux_layer = BODYPARTS_HIGH_LAYER - body_damage_coeff = 0.75 + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_DEFAULT can_be_disabled = TRUE unarmed_attack_verb = "punch" /// The classic punch, wonderfully classic and completely random - unarmed_damage_low = 1 + grappled_attack_verb = "pummel" + unarmed_damage_low = 5 unarmed_damage_high = 10 - unarmed_stun_threshold = 10 body_zone = BODY_ZONE_L_ARM /// Datum describing how to offset things worn on the hands of this arm, note that an x offset won't do anything here var/datum/worn_feature_offset/worn_glove_offset @@ -123,6 +137,40 @@ QDEL_NULL(held_hand_offset) return ..() +/// We need to clear out hand hud items and appearance, so do that here +/obj/item/bodypart/arm/clear_ownership(mob/living/carbon/old_owner) + ..() + + old_owner.update_worn_gloves() + + if(!held_index) + return + + old_owner.on_lost_hand(src) + + if(!old_owner.hud_used) + return + + var/atom/movable/screen/inventory/hand/hand = old_owner.hud_used.hand_slots["[held_index]"] + hand?.update_appearance() + +/// We need to add hand hud items and appearance, so do that here +/obj/item/bodypart/arm/apply_ownership(mob/living/carbon/new_owner) + ..() + + new_owner.update_worn_gloves() + + if(!held_index) + return + + new_owner.on_added_hand(src, held_index) + + if(!new_owner.hud_used) + return + + var/atom/movable/screen/inventory/hand/hand = new_owner.hud_used.hand_slots["[held_index]"] + hand.update_appearance() + /obj/item/bodypart/arm/left name = "left arm" desc = "Did you know that the word 'sinister' stems originally from the \ @@ -139,27 +187,22 @@ px_y = 0 bodypart_trait_source = LEFT_ARM_TRAIT - -/obj/item/bodypart/arm/left/set_owner(new_owner) - . = ..() - if(. == FALSE) - return - if(owner) - if(HAS_TRAIT(owner, TRAIT_PARALYSIS_L_ARM)) - ADD_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_L_ARM) - RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_L_ARM), PROC_REF(on_owner_paralysis_loss)) - else - REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_L_ARM) - RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_L_ARM), PROC_REF(on_owner_paralysis_gain)) - if(.) - var/mob/living/carbon/old_owner = . - if(HAS_TRAIT(old_owner, TRAIT_PARALYSIS_L_ARM)) - UnregisterSignal(old_owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_L_ARM)) - if(!owner || !HAS_TRAIT(owner, TRAIT_PARALYSIS_L_ARM)) - REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_L_ARM) - else - UnregisterSignal(old_owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_L_ARM)) - +/obj/item/bodypart/arm/left/apply_ownership(mob/living/carbon/new_owner) + if(HAS_TRAIT(new_owner, TRAIT_PARALYSIS_L_ARM)) + ADD_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_L_ARM) + RegisterSignal(new_owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_L_ARM), PROC_REF(on_owner_paralysis_loss)) + else + REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_L_ARM) + RegisterSignal(new_owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_L_ARM), PROC_REF(on_owner_paralysis_gain)) + ..() + +/obj/item/bodypart/arm/left/clear_ownership(mob/living/carbon/old_owner) + if(HAS_TRAIT(old_owner, TRAIT_PARALYSIS_L_ARM)) + UnregisterSignal(old_owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_L_ARM)) + REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_L_ARM) + else + UnregisterSignal(old_owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_L_ARM)) + ..() ///Proc to react to the owner gaining the TRAIT_PARALYSIS_L_ARM trait. /obj/item/bodypart/arm/left/proc/on_owner_paralysis_gain(mob/living/carbon/source) @@ -168,7 +211,6 @@ UnregisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_L_ARM)) RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_L_ARM), PROC_REF(on_owner_paralysis_loss)) - ///Proc to react to the owner losing the TRAIT_PARALYSIS_L_ARM trait. /obj/item/bodypart/arm/left/proc/on_owner_paralysis_loss(mob/living/carbon/source) SIGNAL_HANDLER @@ -176,7 +218,6 @@ UnregisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_L_ARM)) RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_L_ARM), PROC_REF(on_owner_paralysis_gain)) - /obj/item/bodypart/arm/left/set_disabled(new_disabled) . = ..() if(isnull(.) || !owner) @@ -196,7 +237,6 @@ var/atom/movable/screen/inventory/hand/hand_screen_object = owner.hud_used.hand_slots["[held_index]"] hand_screen_object?.update_appearance() - /obj/item/bodypart/arm/left/monkey icon = 'icons/mob/human/species/monkey/bodyparts.dmi' icon_static = 'icons/mob/human/species/monkey/bodyparts.dmi' @@ -212,7 +252,7 @@ dmg_overlay_type = SPECIES_MONKEY unarmed_damage_low = 1 /// monkey punches must be really weak, considering they bite people instead and their bites are weak as hell. unarmed_damage_high = 2 - unarmed_stun_threshold = 3 + unarmed_effectiveness = 0 appendage_noun = "paw" /obj/item/bodypart/arm/left/alien @@ -225,11 +265,10 @@ px_y = 0 bodypart_flags = BODYPART_UNREMOVABLE can_be_disabled = FALSE - max_damage = 100 + max_damage = LIMB_MAX_HP_ALIEN_LIMBS should_draw_greyscale = FALSE appendage_noun = "scythe-like hand" - /obj/item/bodypart/arm/right name = "right arm" desc = "Over 87% of humans are right handed. That figure is much lower \ @@ -245,26 +284,22 @@ px_y = 0 bodypart_trait_source = RIGHT_ARM_TRAIT -/obj/item/bodypart/arm/right/set_owner(new_owner) - . = ..() - if(. == FALSE) - return - if(owner) - if(HAS_TRAIT(owner, TRAIT_PARALYSIS_R_ARM)) - ADD_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_R_ARM) - RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_R_ARM), PROC_REF(on_owner_paralysis_loss)) - else - REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_R_ARM) - RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_R_ARM), PROC_REF(on_owner_paralysis_gain)) - if(.) - var/mob/living/carbon/old_owner = . - if(HAS_TRAIT(old_owner, TRAIT_PARALYSIS_R_ARM)) - UnregisterSignal(old_owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_R_ARM)) - if(!owner || !HAS_TRAIT(owner, TRAIT_PARALYSIS_R_ARM)) - REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_R_ARM) - else - UnregisterSignal(old_owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_R_ARM)) - +/obj/item/bodypart/arm/right/apply_ownership(mob/living/carbon/new_owner) + if(HAS_TRAIT(new_owner, TRAIT_PARALYSIS_R_ARM)) + ADD_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_R_ARM) + RegisterSignal(new_owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_R_ARM), PROC_REF(on_owner_paralysis_loss)) + else + REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_R_ARM) + RegisterSignal(new_owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_R_ARM), PROC_REF(on_owner_paralysis_gain)) + ..() + +/obj/item/bodypart/arm/right/clear_ownership(mob/living/carbon/old_owner) + if(HAS_TRAIT(old_owner, TRAIT_PARALYSIS_R_ARM)) + UnregisterSignal(old_owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_R_ARM)) + REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_R_ARM) + else + UnregisterSignal(old_owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_R_ARM)) + ..() ///Proc to react to the owner gaining the TRAIT_PARALYSIS_R_ARM trait. /obj/item/bodypart/arm/right/proc/on_owner_paralysis_gain(mob/living/carbon/source) @@ -273,7 +308,6 @@ UnregisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_R_ARM)) RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_R_ARM), PROC_REF(on_owner_paralysis_loss)) - ///Proc to react to the owner losing the TRAIT_PARALYSIS_R_ARM trait. /obj/item/bodypart/arm/right/proc/on_owner_paralysis_loss(mob/living/carbon/source) SIGNAL_HANDLER @@ -281,7 +315,6 @@ UnregisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_R_ARM)) RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_R_ARM), PROC_REF(on_owner_paralysis_gain)) - /obj/item/bodypart/arm/right/set_disabled(new_disabled) . = ..() if(isnull(.) || !owner) @@ -301,7 +334,6 @@ var/atom/movable/screen/inventory/hand/hand_screen_object = owner.hud_used.hand_slots["[held_index]"] hand_screen_object?.update_appearance() - /obj/item/bodypart/arm/right/monkey icon = 'icons/mob/human/species/monkey/bodyparts.dmi' icon_static = 'icons/mob/human/species/monkey/bodyparts.dmi' @@ -317,7 +349,7 @@ dmg_overlay_type = SPECIES_MONKEY unarmed_damage_low = 1 unarmed_damage_high = 2 - unarmed_stun_threshold = 3 + unarmed_effectiveness = 0 appendage_noun = "paw" /obj/item/bodypart/arm/right/alien @@ -330,7 +362,7 @@ px_y = 0 bodypart_flags = BODYPART_UNREMOVABLE can_be_disabled = FALSE - max_damage = 100 + max_damage = LIMB_MAX_HP_ALIEN_LIMBS should_draw_greyscale = FALSE appendage_noun = "scythe-like hand" @@ -340,15 +372,15 @@ desc = "This item shouldn't exist. Talk about breaking a leg. Badum-Tss!" attack_verb_continuous = list("kicks", "stomps") attack_verb_simple = list("kick", "stomp") - max_damage = 60 // SKYRAT EDIT - ORIGINAL: 50 - body_damage_coeff = 0.75 + max_damage = LIMB_MAX_HP_DEFAULT + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_DEFAULT can_be_disabled = TRUE unarmed_attack_effect = ATTACK_EFFECT_KICK body_zone = BODY_ZONE_L_LEG unarmed_attack_verb = "kick" // The lovely kick, typically only accessable by attacking a grouded foe. 1.5 times better than the punch. - unarmed_damage_low = 2 + unarmed_damage_low = 7 unarmed_damage_high = 15 - unarmed_stun_threshold = 10 + unarmed_effectiveness = 15 /// Datum describing how to offset things worn on the foot of this leg, note that an x offset won't do anything here var/datum/worn_feature_offset/worn_foot_offset @@ -371,35 +403,30 @@ can_be_disabled = TRUE bodypart_trait_source = LEFT_LEG_TRAIT -/obj/item/bodypart/leg/left/set_owner(new_owner) - . = ..() - if(. == FALSE) - return - if(owner) - if(HAS_TRAIT(owner, TRAIT_PARALYSIS_L_LEG)) - ADD_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_L_LEG) - RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_L_LEG), PROC_REF(on_owner_paralysis_loss)) - else - REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_L_LEG) - RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_L_LEG), PROC_REF(on_owner_paralysis_gain)) - if(.) - var/mob/living/carbon/old_owner = . - if(HAS_TRAIT(old_owner, TRAIT_PARALYSIS_L_LEG)) - UnregisterSignal(old_owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_L_LEG)) - if(!owner || !HAS_TRAIT(owner, TRAIT_PARALYSIS_L_LEG)) - REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_L_LEG) - else - UnregisterSignal(old_owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_L_LEG)) - - -///Proc to react to the owner gaining the TRAIT_PARALYSIS_L_LEG trait. +/obj/item/bodypart/leg/left/apply_ownership(mob/living/carbon/new_owner) + if(HAS_TRAIT(new_owner, TRAIT_PARALYSIS_L_LEG)) + ADD_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_L_LEG) + RegisterSignal(new_owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_L_LEG), PROC_REF(on_owner_paralysis_loss)) + else + REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_L_LEG) + RegisterSignal(new_owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_L_LEG), PROC_REF(on_owner_paralysis_gain)) + ..() + +/obj/item/bodypart/leg/left/clear_ownership(mob/living/carbon/old_owner) + if(HAS_TRAIT(old_owner, TRAIT_PARALYSIS_L_LEG)) + UnregisterSignal(old_owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_L_LEG)) + REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_L_LEG) + else + UnregisterSignal(old_owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_L_LEG)) + ..() + +///Proc to react to the owner gaining the TRAIT_PARALYSIS_L_ARM trait. /obj/item/bodypart/leg/left/proc/on_owner_paralysis_gain(mob/living/carbon/source) SIGNAL_HANDLER ADD_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_L_LEG) UnregisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_L_LEG)) RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_L_LEG), PROC_REF(on_owner_paralysis_loss)) - ///Proc to react to the owner losing the TRAIT_PARALYSIS_L_LEG trait. /obj/item/bodypart/leg/left/proc/on_owner_paralysis_loss(mob/living/carbon/source) SIGNAL_HANDLER @@ -407,7 +434,6 @@ UnregisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_L_LEG)) RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_L_LEG), PROC_REF(on_owner_paralysis_gain)) - /obj/item/bodypart/leg/left/set_disabled(new_disabled) . = ..() if(isnull(.) || !owner) @@ -436,7 +462,7 @@ dmg_overlay_type = SPECIES_MONKEY unarmed_damage_low = 2 unarmed_damage_high = 3 - unarmed_stun_threshold = 4 + unarmed_effectiveness = 0 /obj/item/bodypart/leg/left/alien icon = 'icons/mob/human/species/alien/bodyparts.dmi' @@ -448,7 +474,7 @@ px_y = 0 bodypart_flags = BODYPART_UNREMOVABLE can_be_disabled = FALSE - max_damage = 100 + max_damage = LIMB_MAX_HP_ALIEN_LIMBS should_draw_greyscale = FALSE /obj/item/bodypart/leg/right @@ -465,26 +491,22 @@ px_y = 12 bodypart_trait_source = RIGHT_LEG_TRAIT -/obj/item/bodypart/leg/right/set_owner(new_owner) - . = ..() - if(. == FALSE) - return - if(owner) - if(HAS_TRAIT(owner, TRAIT_PARALYSIS_R_LEG)) - ADD_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_R_LEG) - RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_R_LEG), PROC_REF(on_owner_paralysis_loss)) - else - REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_R_LEG) - RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_R_LEG), PROC_REF(on_owner_paralysis_gain)) - if(.) - var/mob/living/carbon/old_owner = . - if(HAS_TRAIT(old_owner, TRAIT_PARALYSIS_R_LEG)) - UnregisterSignal(old_owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_R_LEG)) - if(!owner || !HAS_TRAIT(owner, TRAIT_PARALYSIS_R_LEG)) - REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_R_LEG) - else - UnregisterSignal(old_owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_R_LEG)) - +/obj/item/bodypart/leg/right/apply_ownership(mob/living/carbon/new_owner) + if(HAS_TRAIT(new_owner, TRAIT_PARALYSIS_R_LEG)) + ADD_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_R_LEG) + RegisterSignal(new_owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_R_LEG), PROC_REF(on_owner_paralysis_loss)) + else + REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_R_LEG) + RegisterSignal(new_owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_R_LEG), PROC_REF(on_owner_paralysis_gain)) + ..() + +/obj/item/bodypart/leg/right/clear_ownership(mob/living/carbon/old_owner) + if(HAS_TRAIT(old_owner, TRAIT_PARALYSIS_R_LEG)) + UnregisterSignal(old_owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_R_LEG)) + REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_R_LEG) + else + UnregisterSignal(old_owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_R_LEG)) + ..() ///Proc to react to the owner gaining the TRAIT_PARALYSIS_R_LEG trait. /obj/item/bodypart/leg/right/proc/on_owner_paralysis_gain(mob/living/carbon/source) @@ -493,7 +515,6 @@ UnregisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_R_LEG)) RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_R_LEG), PROC_REF(on_owner_paralysis_loss)) - ///Proc to react to the owner losing the TRAIT_PARALYSIS_R_LEG trait. /obj/item/bodypart/leg/right/proc/on_owner_paralysis_loss(mob/living/carbon/source) SIGNAL_HANDLER @@ -530,7 +551,7 @@ dmg_overlay_type = SPECIES_MONKEY unarmed_damage_low = 2 unarmed_damage_high = 3 - unarmed_stun_threshold = 4 + unarmed_effectiveness = 0 /obj/item/bodypart/leg/right/alien icon = 'icons/mob/human/species/alien/bodyparts.dmi' @@ -542,7 +563,7 @@ px_y = 0 bodypart_flags = BODYPART_UNREMOVABLE can_be_disabled = FALSE - max_damage = 100 + max_damage = LIMB_MAX_HP_ALIEN_LIMBS should_draw_greyscale = FALSE /obj/item/bodypart/leg/right/tallboy diff --git a/code/modules/surgery/bodyparts/robot_bodyparts.dm b/code/modules/surgery/bodyparts/robot_bodyparts.dm index d967f2da9ec242..33b32778754812 100644 --- a/code/modules/surgery/bodyparts/robot_bodyparts.dm +++ b/code/modules/surgery/bodyparts/robot_bodyparts.dm @@ -19,7 +19,7 @@ inhand_icon_state = "buildpipe" icon = 'icons/mob/augmentation/augments.dmi' icon_static = 'icons/mob/augmentation/augments.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY icon_state = "borg_l_arm" is_dimorphic = FALSE should_draw_greyscale = FALSE @@ -40,8 +40,9 @@ biological_state = (BIO_ROBOTIC|BIO_JOINTED) - damage_examines = list(BRUTE = ROBOTIC_BRUTE_EXAMINE_TEXT, BURN = ROBOTIC_BURN_EXAMINE_TEXT, CLONE = DEFAULT_CLONE_EXAMINE_TEXT) + damage_examines = list(BRUTE = ROBOTIC_BRUTE_EXAMINE_TEXT, BURN = ROBOTIC_BURN_EXAMINE_TEXT) disabling_threshold_percentage = 1 + bodypart_flags = BODYPART_UNHUSKABLE /obj/item/bodypart/arm/right/robot name = "cyborg right arm" @@ -51,7 +52,7 @@ icon_static = 'icons/mob/augmentation/augments.dmi' icon = 'icons/mob/augmentation/augments.dmi' limb_id = BODYPART_ID_ROBOTIC - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY icon_state = "borg_r_arm" is_dimorphic = FALSE should_draw_greyscale = FALSE @@ -74,7 +75,8 @@ biological_state = (BIO_ROBOTIC|BIO_JOINTED) - damage_examines = list(BRUTE = ROBOTIC_BRUTE_EXAMINE_TEXT, BURN = ROBOTIC_BURN_EXAMINE_TEXT, CLONE = DEFAULT_CLONE_EXAMINE_TEXT) + damage_examines = list(BRUTE = ROBOTIC_BRUTE_EXAMINE_TEXT, BURN = ROBOTIC_BURN_EXAMINE_TEXT) + bodypart_flags = BODYPART_UNHUSKABLE /obj/item/bodypart/leg/left/robot name = "cyborg left leg" @@ -84,7 +86,7 @@ icon_static = 'icons/mob/augmentation/augments.dmi' icon = 'icons/mob/augmentation/augments.dmi' limb_id = BODYPART_ID_ROBOTIC - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY icon_state = "borg_l_leg" is_dimorphic = FALSE should_draw_greyscale = FALSE @@ -107,7 +109,8 @@ biological_state = (BIO_ROBOTIC|BIO_JOINTED) - damage_examines = list(BRUTE = ROBOTIC_BRUTE_EXAMINE_TEXT, BURN = ROBOTIC_BURN_EXAMINE_TEXT, CLONE = DEFAULT_CLONE_EXAMINE_TEXT) + damage_examines = list(BRUTE = ROBOTIC_BRUTE_EXAMINE_TEXT, BURN = ROBOTIC_BURN_EXAMINE_TEXT) + bodypart_flags = BODYPART_UNHUSKABLE /obj/item/bodypart/leg/left/robot/emp_act(severity) . = ..() @@ -130,7 +133,7 @@ icon_static = 'icons/mob/augmentation/augments.dmi' icon = 'icons/mob/augmentation/augments.dmi' limb_id = BODYPART_ID_ROBOTIC - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY icon_state = "borg_r_leg" is_dimorphic = FALSE should_draw_greyscale = FALSE @@ -153,7 +156,8 @@ biological_state = (BIO_ROBOTIC|BIO_JOINTED) - damage_examines = list(BRUTE = ROBOTIC_BRUTE_EXAMINE_TEXT, BURN = ROBOTIC_BURN_EXAMINE_TEXT, CLONE = DEFAULT_CLONE_EXAMINE_TEXT) + damage_examines = list(BRUTE = ROBOTIC_BRUTE_EXAMINE_TEXT, BURN = ROBOTIC_BURN_EXAMINE_TEXT) + bodypart_flags = BODYPART_UNHUSKABLE /obj/item/bodypart/leg/right/robot/emp_act(severity) . = ..() @@ -175,7 +179,7 @@ icon_static = 'icons/mob/augmentation/augments.dmi' icon = 'icons/mob/augmentation/augments.dmi' limb_id = BODYPART_ID_ROBOTIC - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY icon_state = "borg_chest" is_dimorphic = FALSE should_draw_greyscale = FALSE @@ -196,13 +200,16 @@ biological_state = (BIO_ROBOTIC) - damage_examines = list(BRUTE = ROBOTIC_BRUTE_EXAMINE_TEXT, BURN = ROBOTIC_BURN_EXAMINE_TEXT, CLONE = DEFAULT_CLONE_EXAMINE_TEXT) + damage_examines = list(BRUTE = ROBOTIC_BRUTE_EXAMINE_TEXT, BURN = ROBOTIC_BURN_EXAMINE_TEXT) + bodypart_flags = BODYPART_UNHUSKABLE + + robotic_emp_paralyze_damage_percent_threshold = 0.6 + + wing_types = list(/obj/item/organ/external/wings/functional/robotic) var/wired = FALSE var/obj/item/stock_parts/cell/cell = null - robotic_emp_paralyze_damage_percent_threshold = 0.6 - /obj/item/bodypart/chest/robot/emp_act(severity) . = ..() if(!. || isnull(owner)) @@ -262,19 +269,19 @@ if(all_robotic) owner.add_traits(list( - /* SKYRAT EDIT REMOVAL BEGIN - Synths are not immune to temperature + /* NOVA EDIT REMOVAL BEGIN - Synths are not immune to temperature TRAIT_RESISTCOLD, TRAIT_RESISTHEAT, - SKYRAT EDIT REMOVAL END */ + NOVA EDIT REMOVAL END */ TRAIT_RESISTLOWPRESSURE, TRAIT_RESISTHIGHPRESSURE, ), AUGMENTATION_TRAIT) else owner.remove_traits(list( - /* SKYRAT EDIT REMOVAL BEGIN - Synths are not immune to temperature + /* NOVA EDIT REMOVAL BEGIN - Synths are not immune to temperature TRAIT_RESISTCOLD, TRAIT_RESISTHEAT, - SKYRAT EDIT REMOVAL END */ + NOVA EDIT REMOVAL END */ TRAIT_RESISTLOWPRESSURE, TRAIT_RESISTHIGHPRESSURE, ), AUGMENTATION_TRAIT) @@ -350,7 +357,7 @@ icon_static = 'icons/mob/augmentation/augments.dmi' icon = 'icons/mob/augmentation/augments.dmi' limb_id = BODYPART_ID_ROBOTIC - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY icon_state = "borg_head" is_dimorphic = FALSE should_draw_greyscale = FALSE @@ -371,9 +378,10 @@ biological_state = (BIO_ROBOTIC) - damage_examines = list(BRUTE = ROBOTIC_BRUTE_EXAMINE_TEXT, BURN = ROBOTIC_BURN_EXAMINE_TEXT, CLONE = DEFAULT_CLONE_EXAMINE_TEXT) + damage_examines = list(BRUTE = ROBOTIC_BRUTE_EXAMINE_TEXT, BURN = ROBOTIC_BURN_EXAMINE_TEXT) head_flags = HEAD_EYESPRITES + bodypart_flags = BODYPART_UNHUSKABLE var/obj/item/assembly/flash/handheld/flash1 = null var/obj/item/assembly/flash/handheld/flash2 = null @@ -461,10 +469,8 @@ return ..() // Prosthetics - Cheap, mediocre, and worse than organic limbs -// The fact they dont have a internal biotype means theyre a lot weaker defensively, -// since they skip slash and go right to blunt -// They are VERY easy to delimb as a result -// HP is also reduced just in case this isnt enough +// Actively make you less healthy by being on your body, contributing a whopping 250% to overall health at only 20 max health +// They also suck to punch with. /obj/item/bodypart/arm/left/robot/surplus name = "surplus prosthetic left arm" @@ -473,7 +479,11 @@ icon = 'icons/mob/augmentation/surplus_augments.dmi' burn_modifier = 1 brute_modifier = 1 - max_damage = PROSTHESIS_MAX_HP + unarmed_damage_low = 1 + unarmed_damage_high = 5 + unarmed_effectiveness = 0 //Bro, you look huge. + max_damage = LIMB_MAX_HP_PROSTHESIS + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_PROSTHESIS biological_state = (BIO_METAL|BIO_JOINTED) @@ -484,7 +494,11 @@ icon = 'icons/mob/augmentation/surplus_augments.dmi' burn_modifier = 1 brute_modifier = 1 - max_damage = PROSTHESIS_MAX_HP + unarmed_damage_low = 1 + unarmed_damage_high = 5 + unarmed_effectiveness = 0 + max_damage = LIMB_MAX_HP_PROSTHESIS + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_PROSTHESIS biological_state = (BIO_METAL|BIO_JOINTED) @@ -495,7 +509,11 @@ icon = 'icons/mob/augmentation/surplus_augments.dmi' brute_modifier = 1 burn_modifier = 1 - max_damage = PROSTHESIS_MAX_HP + unarmed_damage_low = 2 + unarmed_damage_high = 10 + unarmed_effectiveness = 0 + max_damage = LIMB_MAX_HP_PROSTHESIS + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_PROSTHESIS biological_state = (BIO_METAL|BIO_JOINTED) @@ -506,10 +524,60 @@ icon = 'icons/mob/augmentation/surplus_augments.dmi' brute_modifier = 1 burn_modifier = 1 - max_damage = PROSTHESIS_MAX_HP + unarmed_damage_low = 2 + unarmed_damage_high = 10 + unarmed_effectiveness = 0 + max_damage = LIMB_MAX_HP_PROSTHESIS + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_PROSTHESIS biological_state = (BIO_METAL|BIO_JOINTED) +// Advanced Limbs: More durable, high punching force + +/obj/item/bodypart/arm/left/robot/advanced + name = "advanced robotic left arm" + desc = "An advanced cybernetic arm, capable of greater feats of strength and durability." + icon_static = 'icons/mob/augmentation/advanced_augments.dmi' + icon = 'icons/mob/augmentation/advanced_augments.dmi' + unarmed_damage_low = 5 + unarmed_damage_high = 13 + unarmed_effectiveness = 20 + max_damage = LIMB_MAX_HP_ADVANCED + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_ADVANCED + +/obj/item/bodypart/arm/right/robot/advanced + name = "advanced robotic right arm" + desc = "An advanced cybernetic arm, capable of greater feats of strength and durability." + icon_static = 'icons/mob/augmentation/advanced_augments.dmi' + icon = 'icons/mob/augmentation/advanced_augments.dmi' + unarmed_damage_low = 5 + unarmed_damage_high = 13 + unarmed_effectiveness = 20 + max_damage = LIMB_MAX_HP_ADVANCED + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_ADVANCED + +/obj/item/bodypart/leg/left/robot/advanced + name = "advanced robotic left leg" + desc = "An advanced cybernetic leg, capable of greater feats of strength and durability." + icon_static = 'icons/mob/augmentation/advanced_augments.dmi' + icon = 'icons/mob/augmentation/advanced_augments.dmi' + unarmed_damage_low = 7 + unarmed_damage_high = 17 + unarmed_effectiveness = 20 + max_damage = LIMB_MAX_HP_ADVANCED + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_ADVANCED + +/obj/item/bodypart/leg/right/robot/advanced + name = "heavy robotic right leg" + desc = "An advanced cybernetic leg, capable of greater feats of strength and durability." + icon_static = 'icons/mob/augmentation/advanced_augments.dmi' + icon = 'icons/mob/augmentation/advanced_augments.dmi' + unarmed_damage_low = 7 + unarmed_damage_high = 17 + unarmed_effectiveness = 20 + max_damage = LIMB_MAX_HP_ADVANCED + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_ADVANCED + #undef ROBOTIC_LIGHT_BRUTE_MSG #undef ROBOTIC_MEDIUM_BRUTE_MSG #undef ROBOTIC_HEAVY_BRUTE_MSG diff --git a/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm index 2215b388320e8d..3eeafa6f4e1a85 100644 --- a/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm @@ -22,6 +22,7 @@ is_dimorphic = FALSE dmg_overlay_type = null brute_modifier = 1.25 //ethereal are weak to brute damages + wing_types = NONE /obj/item/bodypart/chest/ethereal/update_limb(dropping_limb, is_creating) . = ..() @@ -36,6 +37,7 @@ dmg_overlay_type = null attack_type = BURN //burn bish unarmed_attack_verb = "burn" + grappled_attack_verb = "scorch" unarmed_attack_sound = 'sound/weapons/etherealhit.ogg' unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' brute_modifier = 1.25 //ethereal are weak to brute damage @@ -53,6 +55,7 @@ dmg_overlay_type = null attack_type = BURN // bish buzz unarmed_attack_verb = "burn" + grappled_attack_verb = "scorch" unarmed_attack_sound = 'sound/weapons/etherealhit.ogg' unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' brute_modifier = 1.25 //ethereal are weak to brute damage diff --git a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm index b5b306aaf67030..6cd42665d45a5e 100644 --- a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm @@ -8,11 +8,13 @@ icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' limb_id = SPECIES_LIZARD is_dimorphic = TRUE + wing_types = list(/obj/item/organ/external/wings/functional/dragon) /obj/item/bodypart/arm/left/lizard icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' limb_id = SPECIES_LIZARD unarmed_attack_verb = "slash" + grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW unarmed_attack_sound = 'sound/weapons/slash.ogg' unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' @@ -21,6 +23,7 @@ icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' limb_id = SPECIES_LIZARD unarmed_attack_verb = "slash" + grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW unarmed_attack_sound = 'sound/weapons/slash.ogg' unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' @@ -39,7 +42,7 @@ icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' limb_id = SPECIES_LIZARD -/* SKYRAT EDIT REMOVAL - MOVED TO MODULAR MUTANT_BODYPARTS.DM +/* NOVA EDIT REMOVAL - MOVED TO MODULAR MUTANT_BODYPARTS.DM /obj/item/bodypart/leg/left/digitigrade icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' limb_id = BODYPART_ID_DIGITIGRADE diff --git a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm index 8a036048199075..30f34cb35d0dec 100644 --- a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm @@ -1,50 +1,51 @@ ///SNAIL /obj/item/bodypart/head/snail - biological_state = (BIO_BLOODED|BIO_FLESH) //SKYRAT EDIT - Roundstart Snails - Now invertebrates! limb_id = SPECIES_SNAIL is_dimorphic = FALSE burn_modifier = 2 head_flags = HEAD_EYESPRITES|HEAD_DEBRAIN + biological_state = (BIO_FLESH|BIO_BLOODED) /obj/item/bodypart/chest/snail - biological_state = (BIO_BLOODED|BIO_FLESH) //SKYRAT EDIT - Roundstart Snails - Now invertebrates! limb_id = SPECIES_SNAIL is_dimorphic = FALSE burn_modifier = 2 + biological_state = (BIO_FLESH|BIO_BLOODED) + wing_types = NONE /obj/item/bodypart/arm/left/snail - biological_state = (BIO_BLOODED|BIO_FLESH) //SKYRAT EDIT - Roundstart Snails - Now invertebrates! limb_id = SPECIES_SNAIL unarmed_attack_verb = "slap" unarmed_attack_effect = ATTACK_EFFECT_DISARM - unarmed_damage_low = 1 //SKYRAT EDIT - Roundstart Snails - Lowest possible punch damage. if this is set to 0, punches will always miss. - unarmed_damage_high = 5 //snails are soft and squishy //SKYRAT EDIT - Roundstart Snails - A Bit More Damage. - ORIGINAL: unarmed_damage_high = 0.5 //snails are soft and squishy + unarmed_damage_low = 1 + unarmed_damage_high = 2 //snails are soft and squishy burn_modifier = 2 + biological_state = (BIO_FLESH|BIO_BLOODED) /obj/item/bodypart/arm/right/snail - biological_state = (BIO_BLOODED|BIO_FLESH) //SKYRAT EDIT - Roundstart Snails - Now invertebrates! limb_id = SPECIES_SNAIL unarmed_attack_verb = "slap" unarmed_attack_effect = ATTACK_EFFECT_DISARM - unarmed_damage_low = 1 //SKYRAT EDIT - Roundstart Snails - Lowest possible punch damage. if this is set to 0, punches will always miss. - unarmed_damage_high = 5 //snails are soft and squishy //SKYRAT EDIT - Roundstart Snails - A Bit More Damage. - ORIGINAL: unarmed_damage_high = 0.5 //snails are soft and squishy + unarmed_damage_low = 1 + unarmed_damage_high = 2 //snails are soft and squishy burn_modifier = 2 + biological_state = (BIO_FLESH|BIO_BLOODED) /obj/item/bodypart/leg/left/snail - biological_state = (BIO_BLOODED|BIO_FLESH) //SKYRAT EDIT - Roundstart Snails - Now invertebrates! limb_id = SPECIES_SNAIL - unarmed_damage_low = 1 //SKYRAT EDIT - Roundstart Snails - Lowest possible punch damage. if this is set to 0, punches will always miss. - unarmed_damage_high = 5 //snails are soft and squishy //SKYRAT EDIT - Roundstart Snails - A Bit More Damage. - ORIGINAL: unarmed_damage_high = 0.5 //snails are soft and squishy + unarmed_damage_low = 1 + unarmed_damage_high = 2 //snails are soft and squishy burn_modifier = 2 - // speed_modifier = 3 //disgustingly slow // SKYRAT EDIT - Moved the movespeed to the shell. + // speed_modifier = 3 //disgustingly slow // NOVA EDIT REMOVAL - Moved the movespeed to the shell. + biological_state = (BIO_FLESH|BIO_BLOODED) /obj/item/bodypart/leg/right/snail - biological_state = (BIO_BLOODED|BIO_FLESH) //SKYRAT EDIT - Roundstart Snails - Now invertebrates! limb_id = SPECIES_SNAIL - unarmed_damage_low = 1 //SKYRAT EDIT - Roundstart Snails - Lowest possible punch damage. if this is set to 0, punches will always miss. - unarmed_damage_high = 5 //snails are soft and squishy //SKYRAT EDIT - Roundstart Snails - A Bit More Damage. - ORIGINAL: unarmed_damage_high = 0.5 //snails are soft and squishy + unarmed_damage_low = 1 + unarmed_damage_high = 2 //snails are soft and squishy burn_modifier = 2 - // speed_modifier = 3 //disgustingly slow // SKYRAT EDIT - Moved the movespeed to the shell. + // speed_modifier = 3 //disgustingly slow // NOVA EDIT REMOVAL - Moved the movespeed to the shell. + biological_state = (BIO_FLESH|BIO_BLOODED) ///ABDUCTOR /obj/item/bodypart/head/abductor @@ -57,6 +58,7 @@ limb_id = SPECIES_ABDUCTOR is_dimorphic = FALSE should_draw_greyscale = FALSE + wing_types = NONE /obj/item/bodypart/arm/left/abductor limb_id = SPECIES_ABDUCTOR @@ -91,27 +93,28 @@ is_dimorphic = TRUE dmg_overlay_type = null burn_modifier = 0.5 // = 1/2x generic burn damage + wing_types = list(/obj/item/organ/external/wings/functional/slime) /obj/item/bodypart/arm/left/jelly - biological_state = (BIO_FLESH|BIO_BLOODED|BIO_JOINTED) + biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_JELLYPERSON dmg_overlay_type = null burn_modifier = 0.5 // = 1/2x generic burn damage /obj/item/bodypart/arm/right/jelly - biological_state = (BIO_FLESH|BIO_BLOODED|BIO_JOINTED) + biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_JELLYPERSON dmg_overlay_type = null burn_modifier = 0.5 // = 1/2x generic burn damage /obj/item/bodypart/leg/left/jelly - biological_state = (BIO_FLESH|BIO_BLOODED|BIO_JOINTED) + biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_JELLYPERSON dmg_overlay_type = null burn_modifier = 0.5 // = 1/2x generic burn damage /obj/item/bodypart/leg/right/jelly - biological_state = (BIO_FLESH|BIO_BLOODED|BIO_JOINTED) + biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_JELLYPERSON dmg_overlay_type = null burn_modifier = 0.5 // = 1/2x generic burn damage @@ -127,13 +130,14 @@ biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_SLIMEPERSON is_dimorphic = TRUE + wing_types = list(/obj/item/organ/external/wings/functional/slime) /obj/item/bodypart/arm/left/slime - biological_state = (BIO_FLESH|BIO_BLOODED|BIO_JOINTED) + biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_SLIMEPERSON /obj/item/bodypart/arm/right/slime - biological_state = (BIO_FLESH|BIO_BLOODED|BIO_JOINTED) + biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_SLIMEPERSON /obj/item/bodypart/leg/left/slime @@ -141,7 +145,7 @@ limb_id = SPECIES_SLIMEPERSON /obj/item/bodypart/leg/right/slime - biological_state = (BIO_FLESH|BIO_BLOODED|BIO_JOINTED) + biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_SLIMEPERSON ///LUMINESCENT @@ -155,21 +159,22 @@ biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_LUMINESCENT is_dimorphic = TRUE + wing_types = list(/obj/item/organ/external/wings/functional/slime) /obj/item/bodypart/arm/left/luminescent - biological_state = (BIO_FLESH|BIO_BLOODED|BIO_JOINTED) + biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_LUMINESCENT /obj/item/bodypart/arm/right/luminescent - biological_state = (BIO_FLESH|BIO_BLOODED|BIO_JOINTED) + biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_LUMINESCENT /obj/item/bodypart/leg/left/luminescent - biological_state = (BIO_FLESH|BIO_BLOODED|BIO_JOINTED) + biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_LUMINESCENT /obj/item/bodypart/leg/right/luminescent - biological_state = (BIO_FLESH|BIO_BLOODED|BIO_JOINTED) + biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_LUMINESCENT ///ZOMBIE @@ -178,11 +183,13 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE head_flags = HEAD_EYESPRITES|HEAD_DEBRAIN + can_dismember = TRUE /obj/item/bodypart/chest/zombie limb_id = SPECIES_ZOMBIE is_dimorphic = FALSE should_draw_greyscale = FALSE + wing_types = NONE /obj/item/bodypart/arm/left/zombie limb_id = SPECIES_ZOMBIE @@ -221,10 +228,12 @@ limb_id = SPECIES_PODPERSON is_dimorphic = TRUE burn_modifier = 1.25 + wing_types = NONE /obj/item/bodypart/arm/left/pod limb_id = SPECIES_PODPERSON unarmed_attack_verb = "slash" + grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW unarmed_attack_sound = 'sound/weapons/slice.ogg' unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' @@ -233,6 +242,7 @@ /obj/item/bodypart/arm/right/pod limb_id = SPECIES_PODPERSON unarmed_attack_verb = "slash" + grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW unarmed_attack_sound = 'sound/weapons/slice.ogg' unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' @@ -251,12 +261,13 @@ limb_id = SPECIES_FLYPERSON is_dimorphic = FALSE should_draw_greyscale = FALSE - head_flags = HEAD_HAIR|HEAD_FACIAL_HAIR|HEAD_EYESPRITES|HEAD_EYEHOLES|HEAD_DEBRAIN // SKYRAT EDIT - Flies deserve hair - ORIGINAL: head_flags = HEAD_EYESPRITES|HEAD_EYEHOLES|HEAD_DEBRAIN + head_flags = HEAD_HAIR|HEAD_FACIAL_HAIR|HEAD_EYESPRITES|HEAD_EYEHOLES|HEAD_DEBRAIN // NOVA EDIT - Flies deserve hair - ORIGINAL: head_flags = HEAD_EYESPRITES|HEAD_EYEHOLES|HEAD_DEBRAIN /obj/item/bodypart/chest/fly limb_id = SPECIES_FLYPERSON is_dimorphic = TRUE should_draw_greyscale = FALSE + wing_types = list(/obj/item/organ/external/wings/functional/fly) /obj/item/bodypart/arm/left/fly limb_id = SPECIES_FLYPERSON @@ -287,6 +298,7 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE burn_modifier = 1.5 + wing_types = NONE /obj/item/bodypart/arm/left/shadow limb_id = SPECIES_SHADOW @@ -322,6 +334,7 @@ should_draw_greyscale = FALSE dmg_overlay_type = null head_flags = NONE + bodypart_flags = BODYPART_UNHUSKABLE /obj/item/bodypart/chest/skeleton biological_state = BIO_BONE @@ -329,30 +342,36 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE dmg_overlay_type = null + bodypart_flags = BODYPART_UNHUSKABLE + wing_types = list(/obj/item/organ/external/wings/functional/skeleton) /obj/item/bodypart/arm/left/skeleton biological_state = (BIO_BONE|BIO_JOINTED) limb_id = SPECIES_SKELETON should_draw_greyscale = FALSE dmg_overlay_type = null + bodypart_flags = BODYPART_UNHUSKABLE /obj/item/bodypart/arm/right/skeleton biological_state = (BIO_BONE|BIO_JOINTED) limb_id = SPECIES_SKELETON should_draw_greyscale = FALSE dmg_overlay_type = null + bodypart_flags = BODYPART_UNHUSKABLE /obj/item/bodypart/leg/left/skeleton biological_state = (BIO_BONE|BIO_JOINTED) limb_id = SPECIES_SKELETON should_draw_greyscale = FALSE dmg_overlay_type = null + bodypart_flags = BODYPART_UNHUSKABLE /obj/item/bodypart/leg/right/skeleton biological_state = (BIO_BONE|BIO_JOINTED) limb_id = SPECIES_SKELETON should_draw_greyscale = FALSE dmg_overlay_type = null + bodypart_flags = BODYPART_UNHUSKABLE ///MUSHROOM /obj/item/bodypart/head/mushroom @@ -366,36 +385,37 @@ is_dimorphic = TRUE bodypart_traits = list(TRAIT_NO_JUMPSUIT) burn_modifier = 1.25 + wing_types = NONE /obj/item/bodypart/arm/left/mushroom limb_id = SPECIES_MUSHROOM unarmed_damage_low = 6 unarmed_damage_high = 14 - unarmed_stun_threshold = 14 + unarmed_effectiveness = 15 burn_modifier = 1.25 /obj/item/bodypart/arm/right/mushroom limb_id = SPECIES_MUSHROOM unarmed_damage_low = 6 unarmed_damage_high = 14 - unarmed_stun_threshold = 14 + unarmed_effectiveness = 15 burn_modifier = 1.25 /obj/item/bodypart/leg/left/mushroom limb_id = SPECIES_MUSHROOM unarmed_damage_low = 9 unarmed_damage_high = 21 - unarmed_stun_threshold = 14 + unarmed_effectiveness = 20 burn_modifier = 1.25 - speed_modifier = 0.75 //big big fungus + speed_modifier = 0.75 /obj/item/bodypart/leg/right/mushroom limb_id = SPECIES_MUSHROOM unarmed_damage_low = 9 unarmed_damage_high = 21 - unarmed_stun_threshold = 14 + unarmed_effectiveness = 20 burn_modifier = 1.25 - speed_modifier = 0.75 //big fungus big fungus + speed_modifier = 0.75 /// Dullahan head preserves organs inside it /obj/item/bodypart/head/dullahan @@ -466,6 +486,7 @@ should_draw_greyscale = FALSE dmg_overlay_type = null bodypart_traits = list(TRAIT_NO_JUMPSUIT) + wing_types = NONE /obj/item/bodypart/chest/golem/Initialize(mapload) worn_belt_offset = new( @@ -487,7 +508,7 @@ bodypart_traits = list(TRAIT_CHUNKYFINGERS, TRAIT_FIST_MINING) unarmed_damage_low = 5 unarmed_damage_high = 14 - unarmed_stun_threshold = 11 + unarmed_effectiveness = 20 /obj/item/bodypart/arm/left/golem/Initialize(mapload) held_hand_offset = new( @@ -498,17 +519,16 @@ ) return ..() -/obj/item/bodypart/arm/left/golem/set_owner(new_owner) +/obj/item/bodypart/arm/left/golem/clear_ownership(mob/living/carbon/old_owner) . = ..() - if (. == FALSE) - return - if (owner) - owner.AddComponentFrom(REF(src), /datum/component/shovel_hands) - if (isnull(.)) - return - var/mob/living/carbon/old_owner = . + old_owner.RemoveComponentSource(REF(src), /datum/component/shovel_hands) +/obj/item/bodypart/arm/left/golem/apply_ownership(mob/living/carbon/new_owner) + . = ..() + + new_owner.AddComponentFrom(REF(src), /datum/component/shovel_hands) + /obj/item/bodypart/arm/right/golem icon = 'icons/mob/human/species/golems.dmi' icon_static = 'icons/mob/human/species/golems.dmi' @@ -521,7 +541,7 @@ bodypart_traits = list(TRAIT_CHUNKYFINGERS, TRAIT_FIST_MINING) unarmed_damage_low = 5 unarmed_damage_high = 14 - unarmed_stun_threshold = 11 + unarmed_effectiveness = 20 /obj/item/bodypart/arm/right/golem/Initialize(mapload) held_hand_offset = new( @@ -532,17 +552,16 @@ ) return ..() -/obj/item/bodypart/arm/right/golem/set_owner(new_owner) +/obj/item/bodypart/arm/right/golem/clear_ownership(mob/living/carbon/old_owner) . = ..() - if (. == FALSE) - return - if (owner) - owner.AddComponentFrom(REF(src), /datum/component/shovel_hands) - if (isnull(.)) - return - var/mob/living/carbon/old_owner = . + old_owner.RemoveComponentSource(REF(src), /datum/component/shovel_hands) +/obj/item/bodypart/arm/right/golem/apply_ownership(mob/living/carbon/new_owner) + . = ..() + + new_owner.AddComponentFrom(REF(src), /datum/component/shovel_hands) + /obj/item/bodypart/leg/left/golem icon = 'icons/mob/human/species/golems.dmi' icon_static = 'icons/mob/human/species/golems.dmi' @@ -554,7 +573,7 @@ dmg_overlay_type = null unarmed_damage_low = 7 unarmed_damage_high = 21 - unarmed_stun_threshold = 11 + unarmed_effectiveness = 25 /obj/item/bodypart/leg/right/golem icon = 'icons/mob/human/species/golems.dmi' @@ -567,7 +586,7 @@ dmg_overlay_type = null unarmed_damage_low = 7 unarmed_damage_high = 21 - unarmed_stun_threshold = 11 + unarmed_effectiveness = 25 ///flesh diff --git a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm index 8b091ed34b95a9..a6dfc027d0080d 100644 --- a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm @@ -1,4 +1,4 @@ -/* SKYRAT EDIT REMOVAL - Moved to modular_skyrat\master_files\code\modules\surgery\bodyparts\species_parts\moth_bodyparts.dm +/* NOVA EDIT REMOVAL - Moved to modular_nova\master_files\code\modules\surgery\bodyparts\species_parts\moth_bodyparts.dm /obj/item/bodypart/head/moth icon = 'icons/mob/human/species/moth/bodyparts.dmi' icon_state = "moth_head" @@ -15,6 +15,7 @@ limb_id = SPECIES_MOTH is_dimorphic = TRUE should_draw_greyscale = FALSE + wing_types = list(/obj/item/organ/external/wings/functional/moth/megamoth, /obj/item/organ/external/wings/functional/moth/mothra) /obj/item/bodypart/arm/left/moth icon = 'icons/mob/human/species/moth/bodyparts.dmi' @@ -23,6 +24,7 @@ limb_id = SPECIES_MOTH should_draw_greyscale = FALSE unarmed_attack_verb = "slash" + grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW unarmed_attack_sound = 'sound/weapons/slash.ogg' unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' @@ -34,6 +36,7 @@ limb_id = SPECIES_MOTH should_draw_greyscale = FALSE unarmed_attack_verb = "slash" + grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW unarmed_attack_sound = 'sound/weapons/slash.ogg' unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' @@ -51,4 +54,4 @@ icon_static = 'icons/mob/human/species/moth/bodyparts.dmi' limb_id = SPECIES_MOTH should_draw_greyscale = FALSE -*/ // SKYRAT EDIT END +*/ // NOVA EDIT END diff --git a/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm index f478d522d5690a..8ba27c2cdf9d0b 100644 --- a/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm @@ -10,6 +10,7 @@ brute_modifier = 1.5 //Plasmemes are weak burn_modifier = 1.5 //Plasmemes are weak head_flags = HEAD_EYESPRITES + bodypart_flags = BODYPART_UNHUSKABLE /obj/item/bodypart/chest/plasmaman icon = 'icons/mob/human/species/plasmaman/bodyparts.dmi' @@ -22,6 +23,8 @@ dmg_overlay_type = null brute_modifier = 1.5 //Plasmemes are weak burn_modifier = 1.5 //Plasmemes are weak + bodypart_flags = BODYPART_UNHUSKABLE + wing_types = NONE /obj/item/bodypart/arm/left/plasmaman icon = 'icons/mob/human/species/plasmaman/bodyparts.dmi' @@ -33,6 +36,7 @@ dmg_overlay_type = null brute_modifier = 1.5 //Plasmemes are weak burn_modifier = 1.5 //Plasmemes are weak + bodypart_flags = BODYPART_UNHUSKABLE /obj/item/bodypart/arm/right/plasmaman icon = 'icons/mob/human/species/plasmaman/bodyparts.dmi' @@ -44,6 +48,7 @@ dmg_overlay_type = null brute_modifier = 1.5 //Plasmemes are weak burn_modifier = 1.5 //Plasmemes are weak + bodypart_flags = BODYPART_UNHUSKABLE /obj/item/bodypart/leg/left/plasmaman icon = 'icons/mob/human/species/plasmaman/bodyparts.dmi' @@ -55,6 +60,7 @@ dmg_overlay_type = null brute_modifier = 1.5 //Plasmemes are weak burn_modifier = 1.5 //Plasmemes are weak + bodypart_flags = BODYPART_UNHUSKABLE /obj/item/bodypart/leg/right/plasmaman icon = 'icons/mob/human/species/plasmaman/bodyparts.dmi' @@ -66,3 +72,4 @@ dmg_overlay_type = null brute_modifier = 1.5 //Plasmemes are weak burn_modifier = 1.5 //Plasmemes are weak + bodypart_flags = BODYPART_UNHUSKABLE diff --git a/code/modules/surgery/bodyparts/wounds.dm b/code/modules/surgery/bodyparts/wounds.dm index 94c503614a2a21..1fc16c7ca8f8de 100644 --- a/code/modules/surgery/bodyparts/wounds.dm +++ b/code/modules/surgery/bodyparts/wounds.dm @@ -67,12 +67,15 @@ if(HAS_TRAIT(owner, TRAIT_EASYDISMEMBER)) damage *= 1.1 + if(HAS_TRAIT(owner, TRAIT_EASYBLEED) && ((woundtype == WOUND_PIERCE) || (woundtype == WOUND_SLASH))) + damage *= 1.5 + var/base_roll = rand(1, round(damage ** WOUND_DAMAGE_EXPONENT)) var/injury_roll = base_roll injury_roll += check_woundings_mods(woundtype, damage, wound_bonus, bare_wound_bonus) var/list/series_wounding_mods = check_series_wounding_mods() - if(injury_roll > WOUND_DISMEMBER_OUTRIGHT_THRESH && prob(get_damage() / max_damage * 100)) + if(injury_roll > WOUND_DISMEMBER_OUTRIGHT_THRESH && prob(get_damage() / max_damage * 100) && can_dismember()) var/datum/wound/loss/dismembering = new dismembering.apply_dismember(src, woundtype, outright = TRUE, attack_direction = attack_direction) return @@ -120,10 +123,13 @@ possible_wounds -= other_path continue - while (length(possible_wounds)) + while (TRUE) var/datum/wound/possible_wound = pick_weight(possible_wounds) - var/datum/wound_pregen_data/possible_pregen_data = GLOB.all_wound_pregen_data[possible_wound] + if (isnull(possible_wound)) + break + possible_wounds -= possible_wound + var/datum/wound_pregen_data/possible_pregen_data = GLOB.all_wound_pregen_data[possible_wound] var/datum/wound/replaced_wound for(var/datum/wound/existing_wound as anything in wounds) diff --git a/code/modules/surgery/bone_mending.dm b/code/modules/surgery/bone_mending.dm index 48114fe6d04aca..cac9051ceb44ff 100644 --- a/code/modules/surgery/bone_mending.dm +++ b/code/modules/surgery/bone_mending.dm @@ -153,15 +153,18 @@ var/obj/item/stack/used_stack = tool used_stack.use(1) +#define IMPLEMENTS_THAT_FIX_BONES list( \ + /obj/item/stack/medical/bone_gel = 100, \ + /obj/item/stack/sticky_tape/surgical = 100, \ + /obj/item/stack/sticky_tape/super = 50, \ + /obj/item/stack/sticky_tape = 30, \ +) + ///// Repair Compound Fracture (Crticial) /datum/surgery_step/repair_bone_compound name = "repair compound fracture (bone gel/tape)" - implements = list( - /obj/item/stack/medical/bone_gel = 100, - /obj/item/stack/sticky_tape/surgical = 100, - /obj/item/stack/sticky_tape/super = 50, - /obj/item/stack/sticky_tape = 30) + implements = IMPLEMENTS_THAT_FIX_BONES time = 40 /datum/surgery_step/repair_bone_compound/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -200,3 +203,87 @@ if(isstack(tool)) var/obj/item/stack/used_stack = tool used_stack.use(1) + +/// Surgery to repair cranial fissures +/datum/surgery/cranial_reconstruction + name = "Cranial reconstruction" + surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_REQUIRES_REAL_LIMB + targetable_wound = /datum/wound/cranial_fissure + possible_locs = list( + BODY_ZONE_HEAD, + ) + steps = list( + /datum/surgery_step/clamp_bleeders/discard_skull_debris, + /datum/surgery_step/repair_skull + ) + +/datum/surgery/cranial_reconstruction/can_start(mob/living/user, mob/living/carbon/target) + . = ..() + if(!.) + return FALSE + + var/obj/item/bodypart/targeted_bodypart = target.get_bodypart(user.zone_selected) + return !isnull(targeted_bodypart.get_wound_type(targetable_wound)) + +/datum/surgery_step/clamp_bleeders/discard_skull_debris + name = "discard skull debris (hemostat)" + implements = list( + TOOL_HEMOSTAT = 100, + TOOL_WIRECUTTER = 40, + TOOL_SCREWDRIVER = 40, + ) + time = 2.4 SECONDS + preop_sound = 'sound/surgery/hemostat1.ogg' + +/datum/surgery_step/clamp_bleeders/discard_skull_debris/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results( + user, + target, + span_notice("You begin to discard the smaller skull debris in [target]'s [parse_zone(target_zone)]..."), + span_notice("[user] begins to discard the smaller skull debris in [target]'s [parse_zone(target_zone)]..."), + span_notice("[user] begins to poke around in [target]'s [parse_zone(target_zone)]..."), + ) + + display_pain(target, "Your brain feels like it's getting stabbed by little shards of glass!") + +/datum/surgery_step/repair_skull + name = "repair skull (bone gel/tape)" + implements = IMPLEMENTS_THAT_FIX_BONES + time = 4 SECONDS + +/datum/surgery_step/repair_skull/preop(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery) + ASSERT(surgery.operated_wound, "Repairing skull without a wound") + + display_results( + user, + target, + span_notice("You begin to repair [target]'s skull as best you can..."), + span_notice("[user] begins to repair [target]'s skull with [tool]."), + span_notice("[user] begins to repair [target]'s skull."), + ) + + display_pain(target, "You can feel pieces of your skull rubbing against your brain!") + +/datum/surgery_step/repair_skull/success(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results) + if (isnull(surgery.operated_wound)) + to_chat(user, span_warning("[target]'s skull is fine!")) + return ..() + + + if (isstack(tool)) + var/obj/item/stack/used_stack = tool + used_stack.use(1) + + display_results( + user, + target, + span_notice("You successfully repair [target]'s skull."), + span_notice("[user] successfully repairs [target]'s skull with [tool]."), + span_notice("[user] successfully repairs [target]'s skull.") + ) + + qdel(surgery.operated_wound) + + return ..() + +#undef IMPLEMENTS_THAT_FIX_BONES diff --git a/code/modules/surgery/core_removal.dm b/code/modules/surgery/core_removal.dm index 4ada9e7b59a32a..47f1e983f1986e 100644 --- a/code/modules/surgery/core_removal.dm +++ b/code/modules/surgery/core_removal.dm @@ -49,10 +49,10 @@ span_notice("[user] successfully extracts a core from [target]!"), ) - new target_slime.coretype(target_slime.loc) + new target_slime.slime_type.core_type(target_slime.loc) if(target_slime.cores <= 0) - target_slime.icon_state = "[target_slime.colour] baby slime dead-nocore" + target_slime.icon_state = "[target_slime.slime_type.colour] baby slime dead-nocore" return ..() else return FALSE diff --git a/code/modules/surgery/eye_surgery.dm b/code/modules/surgery/eye_surgery.dm index 7b6d7844ee6c49..748dab1f4ec855 100644 --- a/code/modules/surgery/eye_surgery.dm +++ b/code/modules/surgery/eye_surgery.dm @@ -22,10 +22,7 @@ /datum/surgery/eye_surgery/can_start(mob/user, mob/living/carbon/target) var/obj/item/organ/internal/eyes/target_eyes = target.get_organ_slot(ORGAN_SLOT_EYES) - if(!target_eyes) - to_chat(user, span_warning("It's hard to do surgery on someone's eyes when [target.p_they()] [target.p_do()]n't have any.")) - return FALSE - return TRUE + return !isnull(target_eyes) /datum/surgery_step/fix_eyes/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( diff --git a/code/modules/surgery/healing.dm b/code/modules/surgery/healing.dm index 37441897527538..a587b8dd8ecc34 100644 --- a/code/modules/surgery/healing.dm +++ b/code/modules/surgery/healing.dm @@ -1,6 +1,6 @@ /datum/surgery/healing target_mobtypes = list(/mob/living) - requires_bodypart_type = BODYTYPE_ORGANIC //SKYRAT EDIT CHANGE - ORIGINAL VALUE: requires_bodypart_type = FALSE + requires_bodypart_type = BODYTYPE_ORGANIC //NOVA EDIT CHANGE - ORIGINAL VALUE: requires_bodypart_type = FALSE replaced_by = /datum/surgery surgery_flags = SURGERY_IGNORE_CLOTHES | SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB possible_locs = list(BODY_ZONE_CHEST) diff --git a/code/modules/surgery/limb_augmentation.dm b/code/modules/surgery/limb_augmentation.dm index 6905de5d8dbb07..50f7267a5f40e6 100644 --- a/code/modules/surgery/limb_augmentation.dm +++ b/code/modules/surgery/limb_augmentation.dm @@ -59,7 +59,7 @@ /datum/surgery_step/clamp_bleeders, /datum/surgery_step/replace_limb, ) - removes_target_bodypart = TRUE // SKYRAT EDIT ADDITION - Surgically unremovable limbs + removes_target_bodypart = TRUE // NOVA EDIT ADDITION - Surgically unremovable limbs //SURGERY STEP SUCCESSES diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm index 25004d20d20667..f2eeb60faa676a 100644 --- a/code/modules/surgery/organ_manipulation.dm +++ b/code/modules/surgery/organ_manipulation.dm @@ -293,7 +293,7 @@ ///only operate on internal organs /datum/surgery_step/manipulate_organs/internal/can_use_organ(mob/user, obj/item/organ/organ) - return isinternalorgan(organ) && !(organ.organ_flags & ORGAN_UNREMOVABLE) // SKYRAT EDIT - Don't show unremovable organs - ORIGINAL: return isinternalorgan(organ) + return isinternalorgan(organ) && !(organ.organ_flags & ORGAN_UNREMOVABLE) // NOVA EDIT - Don't show unremovable organs - ORIGINAL: return isinternalorgan(organ) ///prosthetic surgery gives full effectiveness to crowbars (and hemostats) /datum/surgery_step/manipulate_organs/internal/mechanic @@ -307,7 +307,7 @@ ///Only operate on external organs /datum/surgery_step/manipulate_organs/external/can_use_organ(mob/user, obj/item/organ/organ) - return isexternalorgan(organ) && !(organ.organ_flags & ORGAN_UNREMOVABLE) // SKYRAT EDIT - Don't show unremovable organs - ORIGINAL: return isexternalorgan(organ) + return isexternalorgan(organ) && !(organ.organ_flags & ORGAN_UNREMOVABLE) // NOVA EDIT - Don't show unremovable organs - ORIGINAL: return isexternalorgan(organ) ///prosthetic surgery gives full effectiveness to crowbars (and hemostats) /datum/surgery_step/manipulate_organs/external/mechanic diff --git a/code/modules/surgery/organs/_organ.dm b/code/modules/surgery/organs/_organ.dm index 5b78cb30796e75..d7f08a7be35b66 100644 --- a/code/modules/surgery/organs/_organ.dm +++ b/code/modules/surgery/organs/_organ.dm @@ -6,6 +6,8 @@ throwforce = 0 /// The mob that owns this organ. var/mob/living/carbon/owner = null + /// Reference to the limb we're inside of + var/obj/item/bodypart/bodypart_owner /// The cached info about the blood this organ belongs to var/list/blood_dna_info = list("Synthetic DNA" = "O+") // not every organ spawns inside a person /// The body zone this organ is supposed to inhabit. @@ -77,130 +79,16 @@ INITIALIZE_IMMEDIATE(/obj/item/organ) volume = reagent_vol,\ after_eat = CALLBACK(src, PROC_REF(OnEatFrom))) - if(!IS_ROBOTIC_ORGAN(src)) - add_blood_DNA(blood_dna_info) - -/* - * Insert the organ into the select mob. - * - * receiver - the mob who will get our organ - * special - "quick swapping" an organ out - when TRUE, the mob will be unaffected by not having that organ for the moment - * drop_if_replaced - if there's an organ in the slot already, whether we drop it afterwards - */ -/obj/item/organ/proc/Insert(mob/living/carbon/receiver, special = FALSE, drop_if_replaced = TRUE) - SHOULD_CALL_PARENT(TRUE) - - if(!iscarbon(receiver) || owner == receiver) - return FALSE - - var/obj/item/organ/replaced = receiver.get_organ_slot(slot) - if(replaced) - replaced.Remove(receiver, special = TRUE) - if(drop_if_replaced) - replaced.forceMove(get_turf(receiver)) - else - qdel(replaced) - - receiver.organs |= src - receiver.organs_slot[slot] = src - owner = receiver - - if(!IS_ROBOTIC_ORGAN(src) && (organ_flags & ORGAN_VIRGIN)) - blood_dna_info = receiver.get_blood_dna_list() - // need to remove the synethic blood DNA that is initialized - // wash also adds the blood dna again - wash(CLEAN_TYPE_BLOOD) - organ_flags &= ~ORGAN_VIRGIN - - - // Apply unique side-effects. Return value does not matter. - on_insert(receiver, special) - - return TRUE - -/// Called after the organ is inserted into a mob. -/// Adds Traits, Actions, and Status Effects on the mob in which the organ is impanted. -/// Override this proc to create unique side-effects for inserting your organ. Must be called by overrides. -/obj/item/organ/proc/on_insert(mob/living/carbon/organ_owner, special) - SHOULD_CALL_PARENT(TRUE) - - moveToNullspace() - - for(var/trait in organ_traits) - ADD_TRAIT(organ_owner, trait, REF(src)) - - for(var/datum/action/action as anything in actions) - action.Grant(organ_owner) - - for(var/datum/status_effect/effect as anything in organ_effects) - organ_owner.apply_status_effect(effect, type) - - RegisterSignal(owner, COMSIG_ATOM_EXAMINE, PROC_REF(on_owner_examine)) - SEND_SIGNAL(src, COMSIG_ORGAN_IMPLANTED, organ_owner) - SEND_SIGNAL(organ_owner, COMSIG_CARBON_GAIN_ORGAN, src, special) - -/* - * Remove the organ from the select mob. - * - * * organ_owner - the mob who owns our organ, that we're removing the organ from. - * * special - "quick swapping" an organ out - when TRUE, the mob will be unaffected by not having that organ for the moment - */ -/obj/item/organ/proc/Remove(mob/living/carbon/organ_owner, special = FALSE) - SHOULD_CALL_PARENT(TRUE) - - organ_owner.organs -= src - if(organ_owner.organs_slot[slot] == src) - organ_owner.organs_slot.Remove(slot) - - owner = null - - // Apply or reset unique side-effects. Return value does not matter. - on_remove(organ_owner, special) - - return TRUE - -/// Called after the organ is removed from a mob. -/// Removes Traits, Actions, and Status Effects on the mob in which the organ was impanted. -/// Override this proc to create unique side-effects for removing your organ. Must be called by overrides. -/obj/item/organ/proc/on_remove(mob/living/carbon/organ_owner, special) - SHOULD_CALL_PARENT(TRUE) - - if(!iscarbon(organ_owner)) - stack_trace("Organ removal should not be happening on non carbon mobs: [organ_owner]") - - for(var/trait in organ_traits) - REMOVE_TRAIT(organ_owner, trait, REF(src)) - - for(var/datum/action/action as anything in actions) - action.Remove(organ_owner) - - for(var/datum/status_effect/effect as anything in organ_effects) - organ_owner.remove_status_effect(effect, type) - - UnregisterSignal(organ_owner, COMSIG_ATOM_EXAMINE) - SEND_SIGNAL(src, COMSIG_ORGAN_REMOVED, organ_owner) - SEND_SIGNAL(organ_owner, COMSIG_CARBON_LOSE_ORGAN, src, special) - - if(!IS_ROBOTIC_ORGAN(src) && !(item_flags & NO_BLOOD_ON_ITEM) && !QDELING(src)) - AddElement(/datum/element/decal/blood) - - var/list/diseases = organ_owner.get_static_viruses() - if(!LAZYLEN(diseases)) - return - - var/list/datum/disease/diseases_to_add = list() - for(var/datum/disease/disease as anything in diseases) - // robotic organs are immune to disease unless 'inorganic biology' symptom is present - if(IS_ROBOTIC_ORGAN(src) && !(disease.infectable_biotypes & MOB_ROBOTIC)) - continue - - // admin or special viruses that should not be reproduced - if(disease.spread_flags & (DISEASE_SPREAD_SPECIAL | DISEASE_SPREAD_NON_CONTAGIOUS)) - continue - - diseases_to_add += disease - if(LAZYLEN(diseases_to_add)) - AddComponent(/datum/component/infective, diseases_to_add) +/obj/item/organ/Destroy() + if(bodypart_owner && !owner && !QDELETED(bodypart_owner)) + bodypart_remove(bodypart_owner) + else if(owner) + // The special flag is important, because otherwise mobs can die + // while undergoing transformation into different mobs. + Remove(owner, special=TRUE) + else + STOP_PROCESSING(SSobj, src) + return ..() /// Add a Trait to an organ that it will give its owner. /obj/item/organ/proc/add_organ_trait(trait) @@ -237,15 +125,6 @@ INITIALIZE_IMMEDIATE(/obj/item/organ) /obj/item/organ/proc/on_find(mob/living/finder) return -/** - * Proc that gets called when the organ is surgically removed by someone, can be used for special effects - * Currently only used so surplus organs can explode when surgically removed. - */ -/obj/item/organ/proc/on_surgical_removal(mob/living/user, mob/living/carbon/old_owner, target_zone, obj/item/tool) - SHOULD_CALL_PARENT(TRUE) - SEND_SIGNAL(src, COMSIG_ORGAN_SURGICALLY_REMOVED, user, old_owner, target_zone, tool) - RemoveElement(/datum/element/decal/blood) - /obj/item/organ/wash(clean_types) . = ..() @@ -448,4 +327,4 @@ INITIALIZE_IMMEDIATE(/obj/item/organ) /// Tries to replace the existing organ on the passed mob with this one, with special handling for replacing a brain without ghosting target /obj/item/organ/proc/replace_into(mob/living/carbon/new_owner) - return Insert(new_owner, special = TRUE, drop_if_replaced = FALSE) + return Insert(new_owner, special = TRUE, movement_flags = DELETE_IF_REPLACED) diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm index 0987df92bd94e1..b577b9f8ec0483 100644 --- a/code/modules/surgery/organs/autosurgeon.dm +++ b/code/modules/surgery/organs/autosurgeon.dm @@ -2,7 +2,7 @@ name = "autosurgeon" desc = "A device that automatically inserts an implant, skillchip or organ into the user without the hassle of extensive surgery. \ It has a slot to insert implants or organs and a screwdriver slot for removing accidentally added items." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tool.dmi' icon_state = "autosurgeon" inhand_icon_state = "nothing" w_class = WEIGHT_CLASS_SMALL @@ -74,15 +74,21 @@ return if(implant_time) - user.visible_message( "[user] prepares to use [src] on [target].", "You begin to prepare to use [src] on [target].") - if(!do_after(user, (8 SECONDS * surgery_speed), target)) + user.visible_message( + span_notice("[user] prepares to use [src] on [target]."), + span_notice("You begin to prepare to use [src] on [target]."), + ) + if(!do_after(user, (implant_time * surgery_speed), target)) return if(target != user) log_combat(user, target, "autosurgeon implanted [stored_organ] into", "[src]", "in [AREACOORD(target)]") user.visible_message(span_notice("[user] presses a button on [src] as it plunges into [target]'s body."), span_notice("You press a button on [src] as it plunges into [target]'s body.")) else - user.visible_message(span_notice("[user] pressses a button on [src] as it plunges into [user.p_their()] body."), "You press a button on [src] as it plunges into your body.") + user.visible_message( + span_notice("[user] pressses a button on [src] as it plunges into [user.p_their()] body."), + span_notice("You press a button on [src] as it plunges into your body."), + ) stored_organ.Insert(target)//insert stored organ into the user stored_organ = null diff --git a/code/modules/surgery/organs/external/_external_organ.dm b/code/modules/surgery/organs/external/_external_organ.dm index fd1af3d5f9320c..5b9f9d67347390 100644 --- a/code/modules/surgery/organs/external/_external_organ.dm +++ b/code/modules/surgery/organs/external/_external_organ.dm @@ -12,8 +12,6 @@ ///The overlay datum that actually draws stuff on the limb var/datum/bodypart_overlay/mutant/bodypart_overlay - ///Reference to the limb we're inside of - var/obj/item/bodypart/ownerlimb ///If not null, overrides the appearance with this sprite accessory datum var/sprite_accessory_override @@ -25,7 +23,7 @@ ///Set to EXTERNAL_BEHIND, EXTERNAL_FRONT or EXTERNAL_ADJACENT if you want to draw one of those layers as the object sprite. FALSE to use your own ///This will not work if it doesn't have a limb to generate it's icon with var/use_mob_sprite_as_obj_sprite = FALSE - ///Does this organ have any bodytypes to pass to it's ownerlimb? + ///Does this organ have any bodytypes to pass to it's bodypart_owner? var/external_bodytypes = NONE ///Which flags does a 'modification tool' need to have to restyle us, if it all possible (located in code/_DEFINES/mobs) var/restyle_flags = NONE @@ -39,8 +37,8 @@ bodypart_overlay = new bodypart_overlay() - // cache_key = jointext(generate_icon_cache(), "_") // SKYRAT EDIT - Species stuff that Goofball ported from /tg/, apparently. Commented for now, to see if I can make it work without it. - // SKYRAT EDIT: we have like 145+ fucking dna blocks lmao + // cache_key = jointext(generate_icon_cache(), "_") // NOVA EDIT - Species stuff that Goofball ported from /tg/, apparently. Commented for now, to see if I can make it work without it. + // NOVA EDIT: we have like 145+ fucking dna blocks lmao dna_block = GLOB.dna_mutant_bodypart_blocks[preference] accessory_type = accessory_type ? accessory_type : sprite_accessory_override @@ -59,23 +57,10 @@ if(restyle_flags) RegisterSignal(src, COMSIG_ATOM_RESTYLE, PROC_REF(on_attempt_feature_restyle)) -/obj/item/organ/external/Destroy() - if(owner) - Remove(owner, special = TRUE) - else if(ownerlimb) - remove_from_limb() - - return ..() - -/obj/item/organ/external/Insert(mob/living/carbon/receiver, special, drop_if_replaced) +/obj/item/organ/external/mob_insert(mob/living/carbon/receiver, special, movement_flags) if(!should_external_organ_apply_to(type, receiver)) stack_trace("adding a [type] to a [receiver.type] when it shouldn't be!") - var/obj/item/bodypart/limb = receiver.get_bodypart(deprecise_zone(zone)) - - if(!limb) - return FALSE - . = ..() if(!.) @@ -84,61 +69,35 @@ if(bodypart_overlay.imprint_on_next_insertion) //We only want this set *once* var/feature_name = receiver.dna.features[bodypart_overlay.feature_key] if (isnull(feature_name)) - bodypart_overlay.set_appearance_from_dna(receiver.dna) // SKYRAT EDIT CHANGE - ORIGINAL: feature_name = receiver.dna.species.external_organs[type] - // SKYRAT EDIT CHANGE START - Puts the following line in an else block + bodypart_overlay.set_appearance_from_dna(receiver.dna) // NOVA EDIT CHANGE - ORIGINAL: feature_name = receiver.dna.species.external_organs[type] + // NOVA EDIT CHANGE START - Puts the following line in an else block else bodypart_overlay.set_appearance_from_name(feature_name) - // SKYRAT EDIT CHANGE END + // NOVA EDIT CHANGE END bodypart_overlay.imprint_on_next_insertion = FALSE - ownerlimb = limb - add_to_limb(ownerlimb) - if(external_bodytypes) receiver.synchronize_bodytypes() receiver.update_body_parts() -/obj/item/organ/external/Remove(mob/living/carbon/organ_owner, special, moving) - . = ..() - - if(ownerlimb) - remove_from_limb() - if(!moving && use_mob_sprite_as_obj_sprite) //so we're being taken out and dropped - update_appearance(UPDATE_OVERLAYS) - - if(organ_owner) +/obj/item/organ/external/mob_remove(mob/living/carbon/organ_owner, special, moving) + if(!special) + organ_owner.synchronize_bodytypes() organ_owner.update_body_parts() + return ..() +/obj/item/organ/external/on_bodypart_insert(obj/item/bodypart/bodypart) + bodypart.add_bodypart_overlay(bodypart_overlay) + return ..() -/obj/item/organ/external/on_remove(mob/living/carbon/organ_owner, special) - . = ..() - color = bodypart_overlay.draw_color // so a pink felinid doesn't drop a gray tail - -///Transfers the organ to the limb, and to the limb's owner, if it has one. -/obj/item/organ/external/transfer_to_limb(obj/item/bodypart/bodypart, mob/living/carbon/bodypart_owner) - if(owner) - Remove(owner, moving = TRUE) - else if(ownerlimb) - remove_from_limb() +/obj/item/organ/external/on_bodypart_remove(obj/item/bodypart/bodypart) + bodypart.remove_bodypart_overlay(bodypart_overlay) - if(bodypart_owner) - Insert(bodypart_owner, TRUE) - else - add_to_limb(bodypart) - -/obj/item/organ/external/add_to_limb(obj/item/bodypart/bodypart) - bodypart.external_organs += src - ownerlimb = bodypart - ownerlimb.add_bodypart_overlay(bodypart_overlay) - return ..() + if(use_mob_sprite_as_obj_sprite) + update_appearance(UPDATE_OVERLAYS) -/obj/item/organ/external/remove_from_limb() - ownerlimb.external_organs -= src - ownerlimb.remove_bodypart_overlay(bodypart_overlay) - if(ownerlimb.owner && external_bodytypes) - ownerlimb.owner.synchronize_bodytypes() - ownerlimb = null + color = bodypart_overlay.draw_color // so a pink felinid doesn't drop a gray tail return ..() /proc/should_external_organ_apply_to(obj/item/organ/external/organpath, mob/living/carbon/target) @@ -172,8 +131,8 @@ if(owner) //are we in a person? owner.update_body_parts() - else if(ownerlimb) //are we in a limb? - ownerlimb.update_icon_dropped() + else if(bodypart_owner) //are we in a limb? + bodypart_owner.update_icon_dropped() //else if(use_mob_sprite_as_obj_sprite) //are we out in the world, unprotected by flesh? /obj/item/organ/external/on_life(seconds_per_tick, times_fired) @@ -188,7 +147,7 @@ //Build the mob sprite and use it as our overlay for(var/external_layer in bodypart_overlay.all_layers) if(bodypart_overlay.layers & external_layer) - . += bodypart_overlay.get_overlay(external_layer, ownerlimb) + . += bodypart_overlay.get_overlay(external_layer, bodypart_owner) ///The horns of a lizard! /obj/item/organ/external/horns @@ -200,7 +159,7 @@ slot = ORGAN_SLOT_EXTERNAL_HORNS preference = "feature_lizard_horns" - //dna_block = DNA_HORNS_BLOCK // SKYRAT EDIT REMOVAL - Customization - We have our own system to handle DNA. + //dna_block = DNA_HORNS_BLOCK // NOVA EDIT REMOVAL - Customization - We have our own system to handle DNA. restyle_flags = EXTERNAL_RESTYLE_ENAMEL bodypart_overlay = /datum/bodypart_overlay/mutant/horns @@ -216,7 +175,7 @@ return TRUE /datum/bodypart_overlay/mutant/horns/get_global_feature_list() - return GLOB.sprite_accessories["horns"] // SKYRAT EDIT - Customization - ORIGINAL: return GLOB.horns_list + return GLOB.sprite_accessories["horns"] // NOVA EDIT - Customization - ORIGINAL: return GLOB.horns_list ///The frills of a lizard (like weird fin ears) /obj/item/organ/external/frills @@ -228,7 +187,7 @@ slot = ORGAN_SLOT_EXTERNAL_FRILLS preference = "feature_lizard_frills" - //dna_block = DNA_FRILLS_BLOCK // SKYRAT EDIT REMOVAL - Customization - We have our own system to handle DNA. + //dna_block = DNA_FRILLS_BLOCK // NOVA EDIT REMOVAL - Customization - We have our own system to handle DNA. restyle_flags = EXTERNAL_RESTYLE_FLESH bodypart_overlay = /datum/bodypart_overlay/mutant/frills @@ -243,11 +202,11 @@ return FALSE /datum/bodypart_overlay/mutant/frills/get_global_feature_list() - return GLOB.sprite_accessories["frills"] // SKYRAT EDIT - Customization - ORIGINAL: return GLOB.frills_list + return GLOB.sprite_accessories["frills"] // NOVA EDIT - Customization - ORIGINAL: return GLOB.frills_list ///Guess what part of the lizard this is? /obj/item/organ/external/snout - name = "snout" // SKYRAT EDIT - ORIGINAL: name = "lizard snout" + name = "snout" // NOVA EDIT - ORIGINAL: name = "lizard snout" desc = "Take a closer look at that snout!" icon_state = "snout" @@ -257,7 +216,7 @@ preference = "feature_lizard_snout" external_bodytypes = BODYTYPE_SNOUTED - //dna_block = DNA_SNOUT_BLOCK // SKYRAT EDIT REMOVAL - Customization - We have our own system to handle DNA. + //dna_block = DNA_SNOUT_BLOCK // NOVA EDIT REMOVAL - Customization - We have our own system to handle DNA. restyle_flags = EXTERNAL_RESTYLE_FLESH bodypart_overlay = /datum/bodypart_overlay/mutant/snout @@ -272,7 +231,7 @@ return FALSE /datum/bodypart_overlay/mutant/snout/get_global_feature_list() - return GLOB.sprite_accessories["snout"] // SKYRAT EDIT - Customization - ORIGINAL : return GLOB.snouts_list + return GLOB.sprite_accessories["snout"] // NOVA EDIT - Customization - ORIGINAL : return GLOB.snouts_list ///A moth's antennae /obj/item/organ/external/antennae @@ -284,7 +243,7 @@ slot = ORGAN_SLOT_EXTERNAL_ANTENNAE preference = "feature_moth_antennae" - //dna_block = DNA_MOTH_ANTENNAE_BLOCK // SKYRAT EDIT REMOVAL - Customization - We have our own system to handle DNA. + //dna_block = DNA_MOTH_ANTENNAE_BLOCK // NOVA EDIT REMOVAL - Customization - We have our own system to handle DNA. restyle_flags = EXTERNAL_RESTYLE_FLESH bodypart_overlay = /datum/bodypart_overlay/mutant/antennae @@ -294,16 +253,17 @@ ///Store our old datum here for if our antennae are healed var/original_sprite_datum -/obj/item/organ/external/antennae/Insert(mob/living/carbon/receiver, special, drop_if_replaced) +/obj/item/organ/external/antennae/Insert(mob/living/carbon/receiver, special, movement_flags) . = ..() if(!.) return RegisterSignal(receiver, COMSIG_HUMAN_BURNING, PROC_REF(try_burn_antennae)) RegisterSignal(receiver, COMSIG_LIVING_POST_FULLY_HEAL, PROC_REF(heal_antennae)) -/obj/item/organ/external/antennae/Remove(mob/living/carbon/organ_owner, special, moving) +/obj/item/organ/external/antennae/Remove(mob/living/carbon/organ_owner, special, movement_flags) . = ..() - UnregisterSignal(organ_owner, list(COMSIG_HUMAN_BURNING, COMSIG_LIVING_POST_FULLY_HEAL)) + if(organ_owner) + UnregisterSignal(organ_owner, list(COMSIG_HUMAN_BURNING, COMSIG_LIVING_POST_FULLY_HEAL)) ///check if our antennae can burn off ;_; /obj/item/organ/external/antennae/proc/try_burn_antennae(mob/living/carbon/human/human) @@ -348,7 +308,7 @@ burn_datum = fetch_sprite_datum(burn_datum) //turn the path into the singleton instance /datum/bodypart_overlay/mutant/antennae/get_global_feature_list() - return GLOB.sprite_accessories["moth_antennae"] // SKYRAT EDIT - Customization - ORIGINAL: return GLOB.moth_antennae_list + return GLOB.sprite_accessories["moth_antennae"] // NOVA EDIT - Customization - ORIGINAL: return GLOB.moth_antennae_list /datum/bodypart_overlay/mutant/antennae/get_base_icon_state() return burnt ? burn_datum.icon_state : sprite_datum.icon_state diff --git a/code/modules/surgery/organs/external/restyling.dm b/code/modules/surgery/organs/external/restyling.dm index 454e4395ae6b61..7d6be1b6d58e3a 100644 --- a/code/modules/surgery/organs/external/restyling.dm +++ b/code/modules/surgery/organs/external/restyling.dm @@ -31,7 +31,7 @@ ///Asks the external organs inside the limb if they can restyle /obj/item/bodypart/proc/attempt_feature_restyle(atom/source, mob/living/trimmer, atom/movable/original_target, body_zone, restyle_type, style_speed) var/list/valid_features = list() - for(var/obj/item/organ/external/feature in external_organs) + for(var/obj/item/organ/external/feature in contents) if(feature.restyle_flags & restyle_type) valid_features.Add(feature) diff --git a/code/modules/surgery/organs/external/spines.dm b/code/modules/surgery/organs/external/spines.dm index 04f707dff8d0d4..86bc8c800a17e0 100644 --- a/code/modules/surgery/organs/external/spines.dm +++ b/code/modules/surgery/organs/external/spines.dm @@ -8,7 +8,7 @@ slot = ORGAN_SLOT_EXTERNAL_SPINES preference = "feature_lizard_spines" - //dna_block = DNA_SPINES_BLOCK // SKYRAT EDIT REMOVAL - Customization - We have our own system to handle DNA. + //dna_block = DNA_SPINES_BLOCK // NOVA EDIT REMOVAL - Customization - We have our own system to handle DNA. restyle_flags = EXTERNAL_RESTYLE_FLESH bodypart_overlay = /datum/bodypart_overlay/mutant/spines @@ -16,12 +16,13 @@ ///A two-way reference between the tail and the spines because of wagging sprites. Bruh. var/obj/item/organ/external/tail/lizard/paired_tail -/obj/item/organ/external/spines/Insert(mob/living/carbon/receiver, special, drop_if_replaced) +/obj/item/organ/external/spines/Insert(mob/living/carbon/receiver, special, movement_flags) . = ..() if(.) paired_tail = locate(/obj/item/organ/external/tail/lizard) in receiver.organs //We want specifically a lizard tail, so we don't use the slot. + paired_tail?.paired_spines = src -/obj/item/organ/external/spines/Remove(mob/living/carbon/organ_owner, special, moving) +/obj/item/organ/external/spines/Remove(mob/living/carbon/organ_owner, special, movement_flags) . = ..() if(paired_tail) paired_tail.paired_spines = null @@ -35,10 +36,10 @@ var/wagging = FALSE /datum/bodypart_overlay/mutant/spines/get_global_feature_list() - return GLOB.sprite_accessories["spines"] // SKYRAT EDIT - Customization - ORIGINAL: return GLOB.spines_list + return GLOB.sprite_accessories["spines"] // NOVA EDIT - Customization - ORIGINAL: return GLOB.spines_list /datum/bodypart_overlay/mutant/spines/get_base_icon_state() - return (wagging ? "wagging" : "") + sprite_datum.icon_state //add the wagging tag if we be wagging + return (wagging ? "wagging_" : "") + sprite_datum.icon_state //add the wagging tag if we be wagging /datum/bodypart_overlay/mutant/spines/can_draw_on_bodypart(mob/living/carbon/human/human) diff --git a/code/modules/surgery/organs/external/tails.dm b/code/modules/surgery/organs/external/tails.dm index a5f8543f1e77b8..5c620eea16102a 100644 --- a/code/modules/surgery/organs/external/tails.dm +++ b/code/modules/surgery/organs/external/tails.dm @@ -7,17 +7,18 @@ zone = BODY_ZONE_PRECISE_GROIN slot = ORGAN_SLOT_EXTERNAL_TAIL - bodypart_overlay = /datum/bodypart_overlay/mutant/tail - - //dna_block = DNA_TAIL_BLOCK // SKYRAT EDIT REMOVAL - Customization - We have our own system to handle DNA. + //dna_block = DNA_TAIL_BLOCK // NOVA EDIT REMOVAL - Customization - We have our own system to handle DNA. restyle_flags = EXTERNAL_RESTYLE_FLESH + // defaults to cat, but the parent type shouldn't be created regardless + bodypart_overlay = /datum/bodypart_overlay/mutant/tail/cat + ///Does this tail have a wagging sprite, and is it currently wagging? var/wag_flags = NONE ///The original owner of this tail var/original_owner //Yay, snowflake code! -/obj/item/organ/external/tail/Insert(mob/living/carbon/receiver, special, drop_if_replaced) +/obj/item/organ/external/tail/Insert(mob/living/carbon/receiver, special, movement_flags) . = ..() if(.) RegisterSignal(receiver, COMSIG_ORGAN_WAG_TAIL, PROC_REF(wag)) @@ -31,57 +32,68 @@ else if(type in receiver.dna.species.external_organs) receiver.add_mood_event("wrong_tail_regained", /datum/mood_event/tail_regained_wrong) -/obj/item/organ/external/tail/Remove(mob/living/carbon/organ_owner, special, moving) - if(wag_flags & WAG_WAGGING) - wag(FALSE) - - return ..() - -/obj/item/organ/external/tail/on_remove(mob/living/carbon/organ_owner, special) +/obj/item/organ/external/tail/on_mob_remove(mob/living/carbon/organ_owner, special) . = ..() + if(wag_flags & WAG_WAGGING) + wag(organ_owner, start = FALSE) + UnregisterSignal(organ_owner, COMSIG_ORGAN_WAG_TAIL) if(type in organ_owner.dna.species.external_organs) organ_owner.add_mood_event("tail_lost", /datum/mood_event/tail_lost) organ_owner.add_mood_event("tail_balance_lost", /datum/mood_event/tail_balance_lost) - -/obj/item/organ/external/tail/proc/wag(mob/user, start = TRUE, stop_after = 0) +/obj/item/organ/external/tail/proc/wag(mob/living/carbon/organ_owner, start = TRUE, stop_after = 0) if(!(wag_flags & WAG_ABLE)) return if(start) - start_wag() - if(stop_after) - addtimer(CALLBACK(src, PROC_REF(wag), FALSE), stop_after, TIMER_STOPPABLE|TIMER_DELETE_ME) + if(start_wag(organ_owner) && stop_after) + addtimer(CALLBACK(src, PROC_REF(wag), organ_owner, FALSE), stop_after, TIMER_STOPPABLE|TIMER_DELETE_ME) else - stop_wag() - owner.update_body() // SKYRAT EDIT - Golden update this in your upcoming tail refactor please :) - Original: owner.update_body_parts() + stop_wag(organ_owner) ///We need some special behaviour for accessories, wrapped here so we can easily add more interactions later -/obj/item/organ/external/tail/proc/start_wag() +/obj/item/organ/external/tail/proc/start_wag(mob/living/carbon/organ_owner) + if(wag_flags & WAG_WAGGING) // we are already wagging + return FALSE + if(organ_owner.stat == DEAD || organ_owner != owner) // no wagging when owner is dead or tail has been disembodied + return FALSE + var/datum/bodypart_overlay/mutant/tail/accessory = bodypart_overlay wag_flags |= WAG_WAGGING accessory.wagging = TRUE + organ_owner.update_body_parts() + RegisterSignal(organ_owner, COMSIG_LIVING_DEATH, PROC_REF(stop_wag)) + return TRUE ///We need some special behaviour for accessories, wrapped here so we can easily add more interactions later -/obj/item/organ/external/tail/proc/stop_wag() +/obj/item/organ/external/tail/proc/stop_wag(mob/living/carbon/organ_owner) + SIGNAL_HANDLER + var/datum/bodypart_overlay/mutant/tail/accessory = bodypart_overlay wag_flags &= ~WAG_WAGGING accessory.wagging = FALSE + if(isnull(organ_owner)) + return + + organ_owner.update_body_parts() + UnregisterSignal(organ_owner, COMSIG_LIVING_DEATH) -///Tail parent type (which is MONKEEEEEEEEEEE by default), with wagging functionality +///Tail parent type, with wagging functionality /datum/bodypart_overlay/mutant/tail layers = EXTERNAL_FRONT|EXTERNAL_BEHIND - feature_key = "tail" // SKYRAT EDIT - Customization - ORIGINAL: feature_key = "tail_monkey" + feature_key = "tail" // NOVA EDIT - Customization - ORIGINAL: feature_key = "tail_monkey" var/wagging = FALSE /datum/bodypart_overlay/mutant/tail/get_base_icon_state() return (wagging ? "wagging_" : "") + sprite_datum.icon_state //add the wagging tag if we be wagging +// NOVA EDIT ADDITION - CUSTOMIZATION /datum/bodypart_overlay/mutant/tail/get_global_feature_list() - return GLOB.sprite_accessories["tail"] // SKYRAT EDIT - Customization - ORIGINAL: return GLOB.tails_list + return GLOB.sprite_accessories["tail"] +// NOVA EDIT ADDITION END /datum/bodypart_overlay/mutant/tail/can_draw_on_bodypart(mob/living/carbon/human/human) if(human.wear_suit && (human.wear_suit.flags_inv & HIDEJUMPSUIT)) @@ -98,11 +110,11 @@ ///Cat tail bodypart overlay /datum/bodypart_overlay/mutant/tail/cat - feature_key = "tail" // SKYRAT EDIT - Customization - ORIGINAL: feature_key = "tail_cat" - // color_source = ORGAN_COLOR_HAIR // SKYRAT EDIT REMOVAL + feature_key = "tail" // NOVA EDIT - Customization - ORIGINAL: feature_key = "tail_cat" + // color_source = ORGAN_COLOR_HAIR // NOVA EDIT REMOVAL /datum/bodypart_overlay/mutant/tail/cat/get_global_feature_list() - return GLOB.sprite_accessories["tail"] // SKYRAT EDIT - Customization - ORIGINAL: return GLOB.tails_list_human + return GLOB.sprite_accessories["tail"] // NOVA EDIT - Customization - ORIGINAL: return GLOB.tails_list_human /obj/item/organ/external/tail/monkey bodypart_overlay = /datum/bodypart_overlay/mutant/tail/monkey @@ -110,7 +122,10 @@ ///Monkey tail bodypart overlay /datum/bodypart_overlay/mutant/tail/monkey color_source = NONE - feature_key = "tail" // SKYRAT EDIT - Customization - ORIGINAL: feature_key = "tail_monkey" + feature_key = "tail" // NOVA EDIT - Customization - ORIGINAL: feature_key = "tail_monkey" + +/datum/bodypart_overlay/mutant/tail/monkey/get_global_feature_list() + return GLOB.tails_list_monkey /obj/item/organ/external/tail/lizard name = "lizard tail" @@ -123,38 +138,36 @@ ///A reference to the paired_spines, since for some fucking reason tail spines are tied to the spines themselves. var/obj/item/organ/external/spines/paired_spines -/obj/item/organ/external/tail/lizard/Insert(mob/living/carbon/reciever, special, drop_if_replaced) +/obj/item/organ/external/tail/lizard/Insert(mob/living/carbon/receiver, special, movement_flags) . = ..() if(.) - paired_spines = ownerlimb.owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_SPINES) + paired_spines = bodypart_owner.owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_SPINES) paired_spines?.paired_tail = src -/obj/item/organ/external/tail/lizard/Remove(mob/living/carbon/organ_owner, special, moving) +/obj/item/organ/external/tail/lizard/Remove(mob/living/carbon/organ_owner, special, movement_flags) . = ..() if(paired_spines) paired_spines.paired_tail = null paired_spines = null /obj/item/organ/external/tail/lizard/start_wag() - . = ..() - if(paired_spines) var/datum/bodypart_overlay/mutant/spines/accessory = paired_spines.bodypart_overlay accessory.wagging = TRUE + return ..() /obj/item/organ/external/tail/lizard/stop_wag() - . = ..() - if(paired_spines) var/datum/bodypart_overlay/mutant/spines/accessory = paired_spines.bodypart_overlay accessory.wagging = FALSE + return ..() ///Lizard tail bodypart overlay datum /datum/bodypart_overlay/mutant/tail/lizard - feature_key = "tail" // SKYRAT EDIT - Customization - ORIGINAL: feature_key = "tail_lizard" + feature_key = "tail" // NOVA EDIT - Customization - ORIGINAL: feature_key = "tail_lizard" /datum/bodypart_overlay/mutant/tail/lizard/get_global_feature_list() - return GLOB.sprite_accessories["tail"] // SKYRAT EDIT - Customization - ORIGINAL: return GLOB.tails_list_lizard + return GLOB.sprite_accessories["tail"] // NOVA EDIT - Customization - ORIGINAL: return GLOB.tails_list_lizard /obj/item/organ/external/tail/lizard/fake name = "fabricated lizard tail" diff --git a/code/modules/surgery/organs/external/wings/functional_wings.dm b/code/modules/surgery/organs/external/wings/functional_wings.dm index 0cdca01f72cd32..d1f1eff6fc115b 100644 --- a/code/modules/surgery/organs/external/wings/functional_wings.dm +++ b/code/modules/surgery/organs/external/wings/functional_wings.dm @@ -26,18 +26,16 @@ ///Are our wings open or closed? var/wings_open = FALSE -// SKYRAT EDIT START - No free fall softening for everyone -/obj/item/organ/external/wings/functional/can_soften_fall() - return TRUE -// SKYRAT EDIT END + // grind_results = list(/datum/reagent/flightpotion = 5) + food_reagents = list(/datum/reagent/flightpotion = 5) -/obj/item/organ/external/wings/functional/Insert(mob/living/carbon/receiver, special, drop_if_replaced) +/obj/item/organ/external/wings/functional/Insert(mob/living/carbon/receiver, special, movement_flags) . = ..() if(. && isnull(fly)) fly = new fly.Grant(receiver) -/obj/item/organ/external/wings/functional/Remove(mob/living/carbon/organ_owner, special, moving) +/obj/item/organ/external/wings/functional/Remove(mob/living/carbon/organ_owner, special, movement_flags) . = ..() fly.Remove(organ_owner) @@ -140,17 +138,17 @@ var/open_feature_key = "wingsopen" /datum/bodypart_overlay/mutant/wings/functional/get_global_feature_list() - /* SKYRAT EDIT - CUSTOMIZATION - ORIGINAL: + /* NOVA EDIT - CUSTOMIZATION - ORIGINAL: if(wings_open) return GLOB.wings_open_list else return GLOB.wings_list - */ // ORIGINAL END - SKYRAT EDIT START - CUSTOMIZATION - TODO: Add support for wings_open + */ // ORIGINAL END - NOVA EDIT START - CUSTOMIZATION - TODO: Add support for wings_open if(wings_open) return GLOB.sprite_accessories["wings_open"] return GLOB.sprite_accessories["wings"] - // SKYRAT EDIT END + // NOVA EDIT END ///Update our wingsprite to the open wings variant /datum/bodypart_overlay/mutant/wings/functional/proc/open_wings() @@ -212,3 +210,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/external/wings/moth_wings.dm b/code/modules/surgery/organs/external/wings/moth_wings.dm index 595b907673b653..db1a14ca05d7b7 100644 --- a/code/modules/surgery/organs/external/wings/moth_wings.dm +++ b/code/modules/surgery/organs/external/wings/moth_wings.dm @@ -5,7 +5,7 @@ preference = "feature_moth_wings" - //dna_block = DNA_MOTH_WINGS_BLOCK // SKYRAT EDIT REMOVAL + //dna_block = DNA_MOTH_WINGS_BLOCK // NOVA EDIT REMOVAL bodypart_overlay = /datum/bodypart_overlay/mutant/wings/moth @@ -14,13 +14,13 @@ ///Store our old datum here for if our burned wings are healed var/original_sprite_datum -/obj/item/organ/external/wings/moth/on_insert(mob/living/carbon/receiver) +/obj/item/organ/external/wings/moth/on_mob_insert(mob/living/carbon/receiver) . = ..() RegisterSignal(receiver, COMSIG_HUMAN_BURNING, PROC_REF(try_burn_wings)) RegisterSignal(receiver, COMSIG_LIVING_POST_FULLY_HEAL, PROC_REF(heal_wings)) RegisterSignal(receiver, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(update_float_move)) -/obj/item/organ/external/wings/moth/on_remove(mob/living/carbon/organ_owner) +/obj/item/organ/external/wings/moth/on_mob_remove(mob/living/carbon/organ_owner) . = ..() UnregisterSignal(organ_owner, list(COMSIG_HUMAN_BURNING, COMSIG_LIVING_POST_FULLY_HEAL, COMSIG_MOVABLE_PRE_MOVE)) REMOVE_TRAIT(organ_owner, TRAIT_FREE_FLOAT_MOVEMENT, REF(src)) @@ -71,7 +71,7 @@ ///Moth wing bodypart overlay, including burn functionality! /datum/bodypart_overlay/mutant/wings/moth - feature_key = "wings" // SKYRAT EDIT - Customization - ORIGINAL: feature_key = "moth_wings" + feature_key = "wings" // NOVA EDIT - Customization - ORIGINAL: feature_key = "moth_wings" layers = EXTERNAL_BEHIND | EXTERNAL_FRONT ///Accessory datum of the burn sprite var/datum/sprite_accessory/burn_datum = /datum/sprite_accessory/moth_wings/burnt_off @@ -84,11 +84,11 @@ burn_datum = fetch_sprite_datum(burn_datum) /datum/bodypart_overlay/mutant/wings/moth/get_global_feature_list() - return GLOB.sprite_accessories["wings"] // SKYRAT EDIT - Customization - ORIGINAL: return GLOB.moth_wings_list + return GLOB.sprite_accessories["wings"] // NOVA EDIT - Customization - ORIGINAL: return GLOB.moth_wings_list /datum/bodypart_overlay/mutant/wings/moth/can_draw_on_bodypart(mob/living/carbon/human/human) if(!(human.wear_suit?.flags_inv & HIDEMUTWINGS)) - return ..(human, ignore_suit = TRUE) // SKYRAT EDIT - Customization - ORIGINAL: return TRUE + return ..(human, ignore_suit = TRUE) // NOVA EDIT - Customization - ORIGINAL: return TRUE return FALSE /datum/bodypart_overlay/mutant/wings/moth/get_base_icon_state() diff --git a/code/modules/surgery/organs/external/wings/wings.dm b/code/modules/surgery/organs/external/wings/wings.dm index 1abe48e30d852c..73c6fb64c79b56 100644 --- a/code/modules/surgery/organs/external/wings/wings.dm +++ b/code/modules/surgery/organs/external/wings/wings.dm @@ -11,7 +11,7 @@ ///Checks if the wings can soften short falls /obj/item/organ/external/wings/proc/can_soften_fall() - return FALSE // SKYRAT EDIT - No free fall softening for everyone - Original: return TRUE + return TRUE ///Bodypart overlay of default wings. Does not have any wing functionality /datum/bodypart_overlay/mutant/wings diff --git a/code/modules/surgery/organs/internal/_internal_organ.dm b/code/modules/surgery/organs/internal/_internal_organ.dm index eb8629347e6c6a..9f67fb3d89914d 100644 --- a/code/modules/surgery/organs/internal/_internal_organ.dm +++ b/code/modules/surgery/organs/internal/_internal_organ.dm @@ -5,19 +5,8 @@ . = ..() START_PROCESSING(SSobj, src) -/obj/item/organ/internal/Destroy() - if(owner) - // The special flag is important, because otherwise mobs can die - // while undergoing transformation into different mobs. - Remove(owner, special=TRUE) - else - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/organ/internal/Insert(mob/living/carbon/receiver, special = FALSE, drop_if_replaced = TRUE) +/obj/item/organ/internal/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags) . = ..() - if(!. || !owner) - return // organs_slot must ALWAYS be ordered in the same way as organ_process_order // Otherwise life processing breaks down @@ -25,25 +14,32 @@ STOP_PROCESSING(SSobj, src) -/obj/item/organ/internal/Remove(mob/living/carbon/organ_owner, special = FALSE) +/obj/item/organ/internal/on_mob_remove(mob/living/carbon/organ_owner, special = FALSE) . = ..() - if(organ_owner) - if((organ_flags & ORGAN_VITAL) && !special && !(organ_owner.status_flags & GODMODE)) - if(organ_owner.stat != DEAD) - organ_owner.investigate_log("has been killed by losing a vital organ ([src]).", INVESTIGATE_DEATHS) - organ_owner.death() + if((organ_flags & ORGAN_VITAL) && !special && !(organ_owner.status_flags & GODMODE)) + if(organ_owner.stat != DEAD) + organ_owner.investigate_log("has been killed by losing a vital organ ([src]).", INVESTIGATE_DEATHS) + organ_owner.death() START_PROCESSING(SSobj, src) - /obj/item/organ/internal/process(seconds_per_tick, times_fired) on_death(seconds_per_tick, times_fired) //Kinda hate doing it like this, but I really don't want to call process directly. /obj/item/organ/internal/on_death(seconds_per_tick, times_fired) //runs decay when outside of a person if(organ_flags & (ORGAN_ROBOTIC | ORGAN_FROZEN)) return - apply_organ_damage(decay_factor * maxHealth * seconds_per_tick) + + if(owner) + if(owner.bodytemperature > T0C) + var/air_temperature_factor = min((owner.bodytemperature - T0C) / 20, 1) + apply_organ_damage(decay_factor * maxHealth * seconds_per_tick * air_temperature_factor) + else + var/datum/gas_mixture/exposed_air = return_air() + if(exposed_air && exposed_air.temperature > T0C) + var/air_temperature_factor = min((exposed_air.temperature - T0C) / 20, 1) + apply_organ_damage(decay_factor * maxHealth * seconds_per_tick * air_temperature_factor) /// Called once every life tick on every organ in a carbon's body /// NOTE: THIS IS VERY HOT. Be careful what you put in here diff --git a/code/modules/surgery/organs/internal/appendix/_appendix.dm b/code/modules/surgery/organs/internal/appendix/_appendix.dm index bb02c8b9ef9e9c..e5190f1282ec73 100644 --- a/code/modules/surgery/organs/internal/appendix/_appendix.dm +++ b/code/modules/surgery/organs/internal/appendix/_appendix.dm @@ -46,7 +46,11 @@ if(owner) ADD_TRAIT(owner, TRAIT_DISEASELIKE_SEVERITY_MEDIUM, type) owner.med_hud_set_status() - notify_ghosts("[owner] has developed spontaneous appendicitis!", source = owner, action = NOTIFY_ORBIT, header = "Whoa, Sick!") + notify_ghosts( + "[owner] has developed spontaneous appendicitis!", + source = owner, + header = "Whoa, Sick!", + ) /obj/item/organ/internal/appendix/proc/inflamation(seconds_per_tick) var/mob/living/carbon/organ_owner = owner @@ -72,12 +76,12 @@ /obj/item/organ/internal/appendix/get_availability(datum/species/owner_species, mob/living/owner_mob) return owner_species.mutantappendix -/obj/item/organ/internal/appendix/on_remove(mob/living/carbon/organ_owner) +/obj/item/organ/internal/appendix/on_mob_remove(mob/living/carbon/organ_owner) . = ..() REMOVE_TRAIT(organ_owner, TRAIT_DISEASELIKE_SEVERITY_MEDIUM, type) organ_owner.med_hud_set_status() -/obj/item/organ/internal/appendix/on_insert(mob/living/carbon/organ_owner) +/obj/item/organ/internal/appendix/on_mob_insert(mob/living/carbon/organ_owner) . = ..() if(inflamation_stage) ADD_TRAIT(organ_owner, TRAIT_DISEASELIKE_SEVERITY_MEDIUM, type) diff --git a/code/modules/surgery/organs/internal/appendix/appendix_golem.dm b/code/modules/surgery/organs/internal/appendix/appendix_golem.dm index 03b076b1b2a132..5510b4bf967966 100644 --- a/code/modules/surgery/organs/internal/appendix/appendix_golem.dm +++ b/code/modules/surgery/organs/internal/appendix/appendix_golem.dm @@ -2,7 +2,7 @@ /obj/item/organ/internal/appendix/golem name = "internal forge" desc = "This expanded digestive chamber allows golems to smelt minerals, provided that they are immersed in lava." - icon_state = "ethereal_heart" + icon_state = "ethereal_heart-off" color = COLOR_GOLEM_GRAY organ_flags = ORGAN_MINERAL /// Action which performs smelting @@ -12,7 +12,7 @@ . = ..() smelter = new(src) -/obj/item/organ/internal/appendix/golem/on_insert(mob/living/carbon/organ_owner) +/obj/item/organ/internal/appendix/golem/on_mob_insert(mob/living/carbon/organ_owner) . = ..() RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(check_for_lava)) @@ -25,7 +25,7 @@ if (smelter.owner != owner) smelter.Grant(owner) -/obj/item/organ/internal/appendix/golem/on_remove(mob/living/carbon/organ_owner) +/obj/item/organ/internal/appendix/golem/on_mob_remove(mob/living/carbon/organ_owner) UnregisterSignal(organ_owner, COMSIG_MOVABLE_MOVED) smelter?.Remove(organ_owner) // Might have been deleted by Destroy already return ..() diff --git a/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm b/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm index 486284b8b6d2cd..463e34977ee34d 100644 --- a/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm +++ b/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm @@ -76,7 +76,7 @@ to_chat(user, span_notice("You modify [src] to be installed on the [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.")) update_appearance() -/obj/item/organ/internal/cyberimp/arm/on_insert(mob/living/carbon/arm_owner) +/obj/item/organ/internal/cyberimp/arm/on_mob_insert(mob/living/carbon/arm_owner) . = ..() var/side = zone == BODY_ZONE_R_ARM? RIGHT_HANDS : LEFT_HANDS hand = arm_owner.hand_bodyparts[side] @@ -84,7 +84,7 @@ RegisterSignal(hand, COMSIG_ITEM_ATTACK_SELF, PROC_REF(on_item_attack_self)) //If the limb gets an attack-self, open the menu. Only happens when hand is empty RegisterSignal(arm_owner, COMSIG_KB_MOB_DROPITEM_DOWN, PROC_REF(dropkey)) //We're nodrop, but we'll watch for the drop hotkey anyway and then stow if possible. -/obj/item/organ/internal/cyberimp/arm/on_remove(mob/living/carbon/arm_owner) +/obj/item/organ/internal/cyberimp/arm/on_mob_remove(mob/living/carbon/arm_owner) . = ..() Retract() if(hand) @@ -136,6 +136,7 @@ active_item.forceMove(src) UnregisterSignal(active_item, COMSIG_ITEM_ATTACK_SELF) + UnregisterSignal(active_item, COMSIG_ITEM_ATTACK_SELF_SECONDARY) active_item = null playsound(get_turf(owner), retract_sound, 50, TRUE) return TRUE @@ -291,7 +292,7 @@ if(!istype(potential_flash, /obj/item/assembly/flash/armimplant)) continue var/obj/item/assembly/flash/armimplant/flash = potential_flash - flash.arm = WEAKREF(src) // Todo: wipe single letter vars out of assembly code + flash.arm = WEAKREF(src) /obj/item/organ/internal/cyberimp/arm/flash/Extend() . = ..() @@ -325,7 +326,7 @@ if(!istype(potential_flash, /obj/item/assembly/flash/armimplant)) continue var/obj/item/assembly/flash/armimplant/flash = potential_flash - flash.arm = WEAKREF(src) // Todo: wipe single letter vars out of assembly code + flash.arm = WEAKREF(src) /obj/item/organ/internal/cyberimp/arm/surgery name = "surgical toolset implant" @@ -365,8 +366,8 @@ actions_types = list() - ///The amount of damage dealt by the empowered attack. - var/punch_damage = 13 + ///The amount of damage the implant adds to our unarmed attacks. + var/punch_damage = 5 ///IF true, the throw attack will not smash people into walls var/non_harmful_throw = TRUE ///How far away your attack will throw your oponent @@ -378,14 +379,14 @@ ///How long will the implant malfunction if it is EMP'd var/emp_base_duration = 9 SECONDS -/obj/item/organ/internal/cyberimp/arm/muscle/Insert(mob/living/carbon/reciever, special = FALSE, drop_if_replaced = TRUE) +/obj/item/organ/internal/cyberimp/arm/muscle/on_mob_insert(mob/living/carbon/arm_owner) . = ..() - if(ishuman(reciever)) //Sorry, only humans - RegisterSignal(reciever, COMSIG_LIVING_EARLY_UNARMED_ATTACK, PROC_REF(on_attack_hand)) + if(ishuman(arm_owner)) //Sorry, only humans + RegisterSignal(arm_owner, COMSIG_LIVING_EARLY_UNARMED_ATTACK, PROC_REF(on_attack_hand)) -/obj/item/organ/internal/cyberimp/arm/muscle/Remove(mob/living/carbon/implant_owner, special = 0) +/obj/item/organ/internal/cyberimp/arm/muscle/on_mob_remove(mob/living/carbon/arm_owner) . = ..() - UnregisterSignal(implant_owner, COMSIG_LIVING_EARLY_UNARMED_ATTACK) + UnregisterSignal(arm_owner, COMSIG_LIVING_EARLY_UNARMED_ATTACK) /obj/item/organ/internal/cyberimp/arm/muscle/emp_act(severity) . = ..() @@ -430,18 +431,23 @@ if(ishuman(target)) var/mob/living/carbon/human/human_target = target - if(human_target.check_shields(source, punch_damage, "[source]'s' [picked_hit_type]")) + if(human_target.check_block(source, punch_damage, "[source]'s' [picked_hit_type]")) source.do_attack_animation(target) playsound(living_target.loc, 'sound/weapons/punchmiss.ogg', 25, TRUE, -1) log_combat(source, target, "attempted to [picked_hit_type]", "muscle implant") return COMPONENT_CANCEL_ATTACK_CHAIN + var/potential_damage = punch_damage + var/obj/item/bodypart/attacking_bodypart = hand + potential_damage += rand(attacking_bodypart.unarmed_damage_low, attacking_bodypart.unarmed_damage_high) + source.do_attack_animation(target, ATTACK_EFFECT_SMASH) playsound(living_target.loc, 'sound/weapons/punch1.ogg', 25, TRUE, -1) var/target_zone = living_target.get_random_valid_zone(source.zone_selected) - var/armor_block = living_target.run_armor_check(target_zone, MELEE) - living_target.apply_damage(punch_damage, BRUTE, target_zone, armor_block) + var/armor_block = living_target.run_armor_check(target_zone, MELEE, armour_penetration = attacking_bodypart.unarmed_effectiveness) + living_target.apply_damage(potential_damage, attacking_bodypart.attack_type, target_zone, armor_block) + living_target.apply_damage(potential_damage*1.5, STAMINA, target_zone, armor_block) if(source.body_position != LYING_DOWN) //Throw them if we are standing var/atom/throw_target = get_edge_target_turf(living_target, source.dir) diff --git a/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm b/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm index 1ea3a1bf9c4abc..513f0794c31cb4 100644 --- a/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm +++ b/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm @@ -52,9 +52,8 @@ slot = ORGAN_SLOT_HEART_AID var/revive_cost = 0 var/reviving = FALSE - /// revival/defibrillation possibility flag that gathered from owner's .can_defib() proc - var/can_defib_owner COOLDOWN_DECLARE(reviver_cooldown) + COOLDOWN_DECLARE(defib_cooldown) /obj/item/organ/internal/cyberimp/chest/reviver/on_death(seconds_per_tick, times_fired) if(isnull(owner)) // owner can be null, on_death() gets called by /obj/item/organ/internal/process() for decay @@ -81,19 +80,13 @@ revive_cost = 0 reviving = TRUE to_chat(owner, span_notice("You feel a faint buzzing as your reviver implant starts patching your wounds...")) + COOLDOWN_START(src, defib_cooldown, 8 SECONDS) // 5 seconds after heal proc delay /obj/item/organ/internal/cyberimp/chest/reviver/proc/heal() - if(can_defib_owner == DEFIB_POSSIBLE) + if(COOLDOWN_FINISHED(src, defib_cooldown)) revive_dead() - can_defib_owner = null - revive_cost += 10 MINUTES // Additional 10 minutes cooldown after revival. - // this check goes after revive_dead() to delay revival a bit - if(owner.stat == DEAD) - can_defib_owner = owner.can_defib() - if(can_defib_owner == DEFIB_POSSIBLE) - owner.notify_ghost_cloning("You are being revived by [src]!") - owner.grab_ghost() + /// boolean that stands for if PHYSICAL damage being patched var/body_damage_patched = FALSE var/need_mob_update = FALSE @@ -119,8 +112,14 @@ /obj/item/organ/internal/cyberimp/chest/reviver/proc/revive_dead() + if(!COOLDOWN_FINISHED(src, defib_cooldown) || owner.stat != DEAD || owner.can_defib() != DEFIB_POSSIBLE) + return + owner.notify_revival("You are being revived by [src]!") + revive_cost += 10 MINUTES // Additional 10 minutes cooldown after revival. owner.grab_ghost() + defib_cooldown += 16 SECONDS // delay so it doesn't spam + owner.visible_message(span_warning("[owner]'s body convulses a bit.")) playsound(owner, SFX_BODYFALL, 50, TRUE) playsound(owner, 'sound/machines/defib_zap.ogg', 75, TRUE, -1) @@ -182,7 +181,7 @@ /datum/effect_system/trail_follow/ion \ ) -/obj/item/organ/internal/cyberimp/chest/thrusters/Remove(mob/living/carbon/thruster_owner, special = 0) +/obj/item/organ/internal/cyberimp/chest/thrusters/Remove(mob/living/carbon/thruster_owner, special, movement_flags) if(on) deactivate(silent = TRUE) ..() diff --git a/code/modules/surgery/organs/internal/cyberimp/augments_eyes.dm b/code/modules/surgery/organs/internal/cyberimp/augments_eyes.dm index 352d4237cc0a27..cec0241ece34ce 100644 --- a/code/modules/surgery/organs/internal/cyberimp/augments_eyes.dm +++ b/code/modules/surgery/organs/internal/cyberimp/augments_eyes.dm @@ -12,10 +12,26 @@ 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/Insert(mob/living/carbon/eye_owner, special = FALSE, drop_if_replaced = 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, movement_flags) . = ..() if(!.) return @@ -24,14 +40,16 @@ 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) +/obj/item/organ/internal/cyberimp/eyes/hud/Remove(mob/living/carbon/eye_owner, special, movement_flags) . = ..() if(HUD_type) var/datum/atom_hud/hud = GLOB.huds[HUD_type] 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/internal/cyberimp/augments_internal.dm b/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm index f0578832969126..67a02e71d7ea57 100644 --- a/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm +++ b/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm @@ -87,7 +87,7 @@ stored_items = list() -/obj/item/organ/internal/cyberimp/brain/anti_drop/Remove(mob/living/carbon/implant_owner, special = 0) +/obj/item/organ/internal/cyberimp/brain/anti_drop/Remove(mob/living/carbon/implant_owner, special, movement_flags) if(active) ui_action_click() ..() @@ -113,11 +113,11 @@ var/stun_cap_amount = 40 -/obj/item/organ/internal/cyberimp/brain/anti_stun/on_remove(mob/living/carbon/implant_owner) +/obj/item/organ/internal/cyberimp/brain/anti_stun/on_mob_remove(mob/living/carbon/implant_owner) . = ..() UnregisterSignal(implant_owner, signalCache) -/obj/item/organ/internal/cyberimp/brain/anti_stun/on_insert(mob/living/carbon/receiver) +/obj/item/organ/internal/cyberimp/brain/anti_stun/on_mob_insert(mob/living/carbon/receiver) . = ..() RegisterSignals(receiver, signalCache, PROC_REF(on_signal)) diff --git a/code/modules/surgery/organs/internal/ears/_ears.dm b/code/modules/surgery/organs/internal/ears/_ears.dm index b77efe90c2eea0..d0255d5a060529 100644 --- a/code/modules/surgery/organs/internal/ears/_ears.dm +++ b/code/modules/surgery/organs/internal/ears/_ears.dm @@ -68,9 +68,9 @@ visual = TRUE damage_multiplier = 2 -//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION +//NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION /* -/obj/item/organ/internal/ears/cat/on_insert(mob/living/carbon/human/ear_owner) +/obj/item/organ/internal/ears/cat/on_mob_insert(mob/living/carbon/human/ear_owner) . = ..() if(istype(ear_owner) && ear_owner.dna) color = ear_owner.hair_color @@ -78,26 +78,26 @@ ear_owner.dna.update_uf_block(DNA_EARS_BLOCK) ear_owner.update_body() -/obj/item/organ/internal/ears/cat/on_remove(mob/living/carbon/human/ear_owner) +/obj/item/organ/internal/ears/cat/on_mob_remove(mob/living/carbon/human/ear_owner) . = ..() if(istype(ear_owner) && ear_owner.dna) color = ear_owner.hair_color ear_owner.dna.species.mutant_bodyparts -= "ears" ear_owner.update_body() */ -//SKYRAT EDIT REMOVAL END +//NOVA EDIT REMOVAL END /obj/item/organ/internal/ears/penguin name = "penguin ears" desc = "The source of a penguin's happy feet." -/obj/item/organ/internal/ears/penguin/on_insert(mob/living/carbon/human/ear_owner) +/obj/item/organ/internal/ears/penguin/on_mob_insert(mob/living/carbon/human/ear_owner) . = ..() if(istype(ear_owner)) to_chat(ear_owner, span_notice("You suddenly feel like you've lost your balance.")) ear_owner.AddElement(/datum/element/waddling) -/obj/item/organ/internal/ears/penguin/on_remove(mob/living/carbon/human/ear_owner) +/obj/item/organ/internal/ears/penguin/on_mob_remove(mob/living/carbon/human/ear_owner) . = ..() if(istype(ear_owner)) to_chat(ear_owner, span_notice("Your sense of balance comes back to you.")) @@ -126,11 +126,11 @@ // The original idea was to use signals to do this not traits. Unfortunately, the star effect used for whispers applies before any relevant signals // This seems like the least invasive solution -/obj/item/organ/internal/ears/cybernetic/whisper/on_insert(mob/living/carbon/ear_owner) +/obj/item/organ/internal/ears/cybernetic/whisper/on_mob_insert(mob/living/carbon/ear_owner) . = ..() ADD_TRAIT(ear_owner, TRAIT_GOOD_HEARING, ORGAN_TRAIT) -/obj/item/organ/internal/ears/cybernetic/whisper/on_remove(mob/living/carbon/ear_owner) +/obj/item/organ/internal/ears/cybernetic/whisper/on_mob_remove(mob/living/carbon/ear_owner) . = ..() REMOVE_TRAIT(ear_owner, TRAIT_GOOD_HEARING, ORGAN_TRAIT) @@ -142,11 +142,11 @@ // Same sensitivity as felinid ears damage_multiplier = 2 -/obj/item/organ/internal/ears/cybernetic/xray/on_insert(mob/living/carbon/ear_owner) +/obj/item/organ/internal/ears/cybernetic/xray/on_mob_insert(mob/living/carbon/ear_owner) . = ..() ADD_TRAIT(ear_owner, TRAIT_XRAY_HEARING, ORGAN_TRAIT) -/obj/item/organ/internal/ears/cybernetic/xray/on_remove(mob/living/carbon/ear_owner) +/obj/item/organ/internal/ears/cybernetic/xray/on_mob_remove(mob/living/carbon/ear_owner) . = ..() REMOVE_TRAIT(ear_owner, TRAIT_XRAY_HEARING, ORGAN_TRAIT) diff --git a/code/modules/surgery/organs/internal/eyes/_eyes.dm b/code/modules/surgery/organs/internal/eyes/_eyes.dm index 1195c15c56bc9c..e52b772479e996 100644 --- a/code/modules/surgery/organs/internal/eyes/_eyes.dm +++ b/code/modules/surgery/organs/internal/eyes/_eyes.dm @@ -50,9 +50,9 @@ /// indication that the eyes are undergoing some negative effect var/damaged = FALSE /// Native FOV that will be applied if a config is enabled - var/native_fov = FOV_180_DEGREES //SKYRAT EDIT CHANGE + var/native_fov = NONE //NOVA EDIT CHANGE - ORIGINAL: var/native_fov = FOV_90_DEGREES -/obj/item/organ/internal/eyes/Insert(mob/living/carbon/eye_recipient, special = FALSE, drop_if_replaced = FALSE) +/obj/item/organ/internal/eyes/Insert(mob/living/carbon/eye_recipient, special = FALSE, movement_flags = DELETE_IF_REPLACED) // If we don't do this before everything else, heterochromia will be reset leading to eye_color_right no longer being accurate if(ishuman(eye_recipient)) var/mob/living/carbon/human/human_recipient = eye_recipient @@ -91,15 +91,15 @@ if(CONFIG_GET(flag/native_fov) && native_fov) affected_human.add_fov_trait(type, native_fov) - // SKYRAT EDIT ADDITION - EMISSIVES + // NOVA EDIT ADDITION - EMISSIVES if (affected_human.emissive_eyes) is_emissive = TRUE - // SKYRAT EDIT END + // NOVA EDIT END if(call_update) affected_human.update_body() -/obj/item/organ/internal/eyes/Remove(mob/living/carbon/eye_owner, special = FALSE) +/obj/item/organ/internal/eyes/Remove(mob/living/carbon/eye_owner, special, movement_flags) . = ..() if(ishuman(eye_owner)) var/mob/living/carbon/human/human_owner = eye_owner @@ -109,7 +109,8 @@ human_owner.eye_color_right = old_eye_color_right if(native_fov) eye_owner.remove_fov_trait(type) - human_owner.update_body() + if(!special) + human_owner.update_body() // Cure blindness from eye damage eye_owner.cure_blind(EYE_DAMAGE) @@ -123,7 +124,7 @@ eye_owner.update_tint() eye_owner.update_sight() - is_emissive = FALSE // SKYRAT EDIT ADDITION + is_emissive = FALSE // NOVA EDIT ADDITION #define OFFSET_X 1 #define OFFSET_Y 2 @@ -136,16 +137,16 @@ if(isnull(eye_icon_state)) return list() - var/eye_icon = parent.dna?.species.eyes_icon || 'icons/mob/human/human_face.dmi' // SKYRAT EDIT ADDITION + var/eye_icon = parent.dna?.species.eyes_icon || 'icons/mob/human/human_face.dmi' // NOVA EDIT ADDITION - var/mutable_appearance/eye_left = mutable_appearance(eye_icon, "[eye_icon_state]_l", -eyes_layer) // SKYRAT EDIT CHANGE - Customization - ORIGINAL: var/mutable_appearance/eye_left = mutable_appearance('icons/mob/human/human_face.dmi', "[eye_icon_state]_l", -BODY_LAYER) - var/mutable_appearance/eye_right = mutable_appearance(eye_icon, "[eye_icon_state]_r", -eyes_layer) // SKYRAT EDIT CHANGE - Customization - ORIGINAL: var/mutable_appearance/eye_right = mutable_appearance('icons/mob/human/human_face.dmi', "[eye_icon_state]_r", -BODY_LAYER) + var/mutable_appearance/eye_left = mutable_appearance(eye_icon, "[eye_icon_state]_l", -eyes_layer) // NOVA EDIT CHANGE - Customization - ORIGINAL: var/mutable_appearance/eye_left = mutable_appearance('icons/mob/human/human_face.dmi', "[eye_icon_state]_l", -BODY_LAYER) + var/mutable_appearance/eye_right = mutable_appearance(eye_icon, "[eye_icon_state]_r", -eyes_layer) // NOVA EDIT CHANGE - Customization - ORIGINAL: var/mutable_appearance/eye_right = mutable_appearance('icons/mob/human/human_face.dmi', "[eye_icon_state]_r", -BODY_LAYER) var/list/overlays = list(eye_left, eye_right) var/obscured = parent.check_obscured_slots(TRUE) if(overlay_ignore_lighting && !(obscured & ITEM_SLOT_EYES)) - overlays += emissive_appearance(eye_left.icon, eye_left.icon_state, parent, -eyes_layer, alpha = eye_left.alpha) // SKYRAT EDIT CHANGE - ORIGINAL: overlays += emissive_appearance(eye_left.icon, eye_left.icon_state, parent, -BODY_LAYER, alpha = eye_left.alpha) - overlays += emissive_appearance(eye_right.icon, eye_right.icon_state, parent, -eyes_layer, alpha = eye_right.alpha) // SKYRAT EDIT CHANGE - ORIGINAL: overlays += emissive_appearance(eye_left.icon, eye_left.icon_state, parent, -BODY_LAYER, alpha = eye_left.alpha) + overlays += emissive_appearance(eye_left.icon, eye_left.icon_state, parent, -eyes_layer, alpha = eye_left.alpha) // NOVA EDIT CHANGE - ORIGINAL: overlays += emissive_appearance(eye_left.icon, eye_left.icon_state, parent, -BODY_LAYER, alpha = eye_left.alpha) + overlays += emissive_appearance(eye_right.icon, eye_right.icon_state, parent, -eyes_layer, alpha = eye_right.alpha) // NOVA EDIT CHANGE - ORIGINAL: overlays += emissive_appearance(eye_left.icon, eye_left.icon_state, parent, -BODY_LAYER, alpha = eye_left.alpha) var/obj/item/bodypart/head/my_head = parent.get_bodypart(BODY_ZONE_HEAD) if(my_head) if(my_head.head_flags & HEAD_EYECOLOR) @@ -155,7 +156,7 @@ my_head.worn_face_offset.apply_offset(eye_left) my_head.worn_face_offset.apply_offset(eye_right) - // SKYRAT EDIT START - Customization (Synths + Emissives) + // NOVA EDIT START - Customization (Synths + Emissives) if(eye_icon_state == "None") eye_left.alpha = 0 eye_right.alpha = 0 @@ -171,7 +172,7 @@ overlays += emissive_left overlays += emissive_right - // SKYRAT EDIT END + // NOVA EDIT END return overlays @@ -302,7 +303,7 @@ /datum/action/cooldown/golem_ore_sight name = "Ore Resonance" desc = "Causes nearby ores to vibrate, revealing their location." - button_icon = 'icons/obj/device.dmi' + button_icon = 'icons/obj/devices/scanner.dmi' button_icon_state = "manual_mining" check_flags = AB_CHECK_CONSCIOUS cooldown_time = 10 SECONDS @@ -353,11 +354,11 @@ eye_color_right = "000" sight_flags = SEE_MOBS | SEE_OBJS | SEE_TURFS -/obj/item/organ/internal/eyes/robotic/xray/on_insert(mob/living/carbon/eye_owner) +/obj/item/organ/internal/eyes/robotic/xray/on_mob_insert(mob/living/carbon/eye_owner) . = ..() ADD_TRAIT(eye_owner, TRAIT_XRAY_VISION, ORGAN_TRAIT) -/obj/item/organ/internal/eyes/robotic/xray/on_remove(mob/living/carbon/eye_owner) +/obj/item/organ/internal/eyes/robotic/xray/on_mob_remove(mob/living/carbon/eye_owner) . = ..() REMOVE_TRAIT(eye_owner, TRAIT_XRAY_VISION, ORGAN_TRAIT) @@ -385,7 +386,7 @@ /obj/item/organ/internal/eyes/robotic/flashlight/emp_act(severity) return -/obj/item/organ/internal/eyes/robotic/flashlight/on_insert(mob/living/carbon/victim) +/obj/item/organ/internal/eyes/robotic/flashlight/on_mob_insert(mob/living/carbon/victim) . = ..() if(!eye) eye = new /obj/item/flashlight/eyelight() @@ -394,7 +395,7 @@ eye.update_brightness(victim) victim.become_blind(FLASHLIGHT_EYES) -/obj/item/organ/internal/eyes/robotic/flashlight/on_remove(mob/living/carbon/victim) +/obj/item/organ/internal/eyes/robotic/flashlight/on_mob_remove(mob/living/carbon/victim) . = ..() eye.set_light_on(FALSE) eye.update_brightness(victim) @@ -427,13 +428,13 @@ /// base icon state for eye overlays var/base_eye_state = "eyes_glow_gs" /// Whether or not to match the eye color to the light or use a custom selection - var/eye_color_mode = MATCH_LIGHT_COLOR + var/eye_color_mode = USE_CUSTOM_COLOR /// The selected color for the light beam itself - var/current_color_string = "#ffffff" + var/light_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 + var/left_eye_color_string /// The custom selected eye color for the right eye. Defaults to the mob's natural eye color - var/current_right_color_string + var/right_eye_color_string /obj/item/organ/internal/eyes/robotic/glow/Initialize(mapload) . = ..() @@ -451,20 +452,21 @@ deactivate(close_ui = TRUE) /// Set the initial color of the eyes on insert to be the mob's previous eye color. -/obj/item/organ/internal/eyes/robotic/glow/Insert(mob/living/carbon/eye_recipient, special = FALSE, drop_if_replaced = FALSE) +/obj/item/organ/internal/eyes/robotic/glow/Insert(mob/living/carbon/eye_recipient, special = FALSE, movement_flags = DELETE_IF_REPLACED) . = ..() - current_color_string = old_eye_color_left - current_left_color_string = old_eye_color_left - current_right_color_string = old_eye_color_right + left_eye_color_string = old_eye_color_left + right_eye_color_string = old_eye_color_right + update_mob_eye_color(eye_recipient) -/obj/item/organ/internal/eyes/robotic/glow/on_insert(mob/living/carbon/eye_recipient) +/obj/item/organ/internal/eyes/robotic/glow/on_mob_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) +/obj/item/organ/internal/eyes/robotic/glow/on_mob_remove(mob/living/carbon/eye_owner) deactivate(eye_owner, close_ui = TRUE) - eye.forceMove(src) + if(!QDELETED(eye)) + eye.forceMove(src) return ..() /obj/item/organ/internal/eyes/robotic/glow/ui_state(mob/user) @@ -493,10 +495,10 @@ data["eyeColor"] = list( mode = eye_color_mode, hasOwner = owner ? TRUE : FALSE, - left = current_left_color_string, - right = current_right_color_string, + left = left_eye_color_string, + right = right_eye_color_string, ) - data["lightColor"] = current_color_string + data["lightColor"] = light_color_string data["range"] = eye.light_range return data @@ -516,7 +518,7 @@ usr, "Choose eye color color:", "High Luminosity Eyes Menu", - current_color_string + light_color_string ) as color|null if(new_color) var/to_update = params["to_update"] @@ -547,9 +549,10 @@ * Turns on the attached flashlight object, updates the mob overlay to be added. */ /obj/item/organ/internal/eyes/robotic/glow/proc/activate() - eye.light_on = TRUE - if(eye.light_range) // at range 0 we are just going to make the eyes glow emissively, no light overlay + if(eye.light_range) eye.set_light_on(TRUE) + else + eye.light_on = TRUE // at range 0 we are just going to make the eyes glow emissively, no light overlay update_mob_eye_color() /** @@ -611,12 +614,12 @@ newcolor_string = newcolor switch(to_update) if(UPDATE_LIGHT) - current_color_string = newcolor_string + light_color_string = newcolor_string eye.set_light_color(newcolor_string) if(UPDATE_EYES_LEFT) - current_left_color_string = newcolor_string + left_eye_color_string = newcolor_string if(UPDATE_EYES_RIGHT) - current_right_color_string = newcolor_string + right_eye_color_string = newcolor_string update_mob_eye_color() @@ -648,11 +651,11 @@ /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 + eye_color_left = light_color_string + eye_color_right = light_color_string if(USE_CUSTOM_COLOR) - eye_color_left = current_left_color_string - eye_color_right = current_right_color_string + eye_color_left = left_eye_color_string + eye_color_right = right_eye_color_string if(QDELETED(eye_owner) || !ishuman(eye_owner)) //Other carbon mobs don't have eye color. return @@ -726,7 +729,7 @@ desc = "These eyes seem to have a large range, but might be cumbersome with glasses." eye_icon_state = "snail_eyes" icon_state = "snail_eyeballs" - eyes_layer = ABOVE_BODY_FRONT_HEAD_LAYER //SKYRAT EDIT - Roundstart Snails + eyes_layer = ABOVE_BODY_FRONT_HEAD_LAYER //NOVA EDIT - Roundstart Snails /obj/item/organ/internal/eyes/jelly name = "jelly eyes" @@ -748,7 +751,7 @@ high_light_cutoff = list(30, 35, 50) var/obj/item/flashlight/eyelight/adapted/adapt_light -/obj/item/organ/internal/eyes/night_vision/maintenance_adapted/on_insert(mob/living/carbon/eye_owner) +/obj/item/organ/internal/eyes/night_vision/maintenance_adapted/on_mob_insert(mob/living/carbon/eye_owner) . = ..() //add lighting if(!adapt_light) @@ -767,7 +770,7 @@ apply_organ_damage(-10) //heal quickly . = ..() -/obj/item/organ/internal/eyes/night_vision/maintenance_adapted/Remove(mob/living/carbon/unadapted, special = FALSE) +/obj/item/organ/internal/eyes/night_vision/maintenance_adapted/on_mob_remove(mob/living/carbon/unadapted, special = FALSE) //remove lighting adapt_light.set_light_on(FALSE) adapt_light.update_brightness(unadapted) diff --git a/code/modules/surgery/organs/internal/heart/_heart.dm b/code/modules/surgery/organs/internal/heart/_heart.dm index fb97ca7eda00b7..2773f588b24da4 100644 --- a/code/modules/surgery/organs/internal/heart/_heart.dm +++ b/code/modules/surgery/organs/internal/heart/_heart.dm @@ -10,54 +10,84 @@ healing_factor = STANDARD_ORGAN_HEALING decay_factor = 2.5 * STANDARD_ORGAN_DECAY //designed to fail around 6 minutes after death - low_threshold_passed = "Prickles of pain appear then die out from within your chest..." - high_threshold_passed = "Something inside your chest hurts, and the pain isn't subsiding. You notice yourself breathing far faster than before." - now_fixed = "Your heart begins to beat again." - high_threshold_cleared = "The pain in your chest has died down, and your breathing becomes more relaxed." + low_threshold_passed = span_info("Prickles of pain appear then die out from within your chest...") + high_threshold_passed = span_warning("Something inside your chest hurts, and the pain isn't subsiding. You notice yourself breathing far faster than before.") + now_fixed = span_info("Your heart begins to beat again.") + high_threshold_cleared = span_info("The pain in your chest has died down, and your breathing becomes more relaxed.") - // Heart attack code is in code/modules/mob/living/carbon/human/life.dm - var/beating = TRUE attack_verb_continuous = list("beats", "thumps") attack_verb_simple = list("beat", "thump") - var/beat = BEAT_NONE//is this mob having a heatbeat sound played? if so, which? - var/failed = FALSE //to prevent constantly running failing code - var/operated = FALSE //whether the heart's been operated on to fix some of its damages + + // Heart attack code is in code/modules/mob/living/carbon/human/life.dm + + /// Whether the heart is currently beating. + /// Do not set this directly. Use Restart() and Stop() instead. + VAR_PRIVATE/beating = TRUE + + /// is this mob having a heatbeat sound played? if so, which? + var/beat = BEAT_NONE + /// whether the heart's been operated on to fix some of its damages + var/operated = FALSE /obj/item/organ/internal/heart/update_icon_state() + . = ..() icon_state = "[base_icon_state]-[beating ? "on" : "off"]" - return ..() -/obj/item/organ/internal/heart/Remove(mob/living/carbon/heartless, special = 0) +/obj/item/organ/internal/heart/Remove(mob/living/carbon/heartless, special, movement_flags) . = ..() if(!special) - addtimer(CALLBACK(src, PROC_REF(stop_if_unowned)), 120) + addtimer(CALLBACK(src, PROC_REF(stop_if_unowned)), 12 SECONDS) + beat = BEAT_NONE + owner?.stop_sound_channel(CHANNEL_HEARTBEAT) /obj/item/organ/internal/heart/proc/stop_if_unowned() - if(!owner) + if(QDELETED(src)) + return + if(IS_ROBOTIC_ORGAN(src)) + return + if(isnull(owner)) Stop() /obj/item/organ/internal/heart/attack_self(mob/user) - ..() + . = ..() + if(.) + return + if(!beating) - user.visible_message("[user] squeezes [src] to \ - make it beat again!",span_notice("You squeeze [src] to make it beat again!")) + user.visible_message( + span_notice("[user] squeezes [src] to make it beat again!"), + span_notice("You squeeze [src] to make it beat again!"), + ) Restart() - addtimer(CALLBACK(src, PROC_REF(stop_if_unowned)), 80) + addtimer(CALLBACK(src, PROC_REF(stop_if_unowned)), 8 SECONDS) + return TRUE /obj/item/organ/internal/heart/proc/Stop() + if(!beating) + return FALSE + beating = FALSE update_appearance() + beat = BEAT_NONE + owner?.stop_sound_channel(CHANNEL_HEARTBEAT) return TRUE /obj/item/organ/internal/heart/proc/Restart() + if(beating) + return FALSE + beating = TRUE update_appearance() return TRUE /obj/item/organ/internal/heart/OnEatFrom(eater, feeder) . = ..() - beating = FALSE - update_appearance() + Stop() + +/// Checks if the heart is beating. +/// Can be overridden to add more conditions for more complex hearts. +/obj/item/organ/internal/heart/proc/is_beating() + return beating /obj/item/organ/internal/heart/on_life(seconds_per_tick, times_fired) ..() @@ -66,34 +96,32 @@ if(!owner.needs_heart()) return - if(owner.client && beating) - failed = FALSE - var/sound/slowbeat = sound('sound/health/slowbeat.ogg', repeat = TRUE) - var/sound/fastbeat = sound('sound/health/fastbeat.ogg', repeat = TRUE) + // Handle "sudden" heart attack + if(!beating || (organ_flags & ORGAN_FAILING)) + if(owner.can_heartattack() && Stop()) + if(owner.stat == CONSCIOUS) + owner.visible_message(span_danger("[owner] clutches at [owner.p_their()] chest as if [owner.p_their()] heart is stopping!")) + to_chat(owner, span_userdanger("You feel a terrible pain in your chest, as if your heart has stopped!")) + return - if(owner.health <= owner.crit_threshold && beat != BEAT_SLOW) + // Beyond deals with sound effects, so nothing needs to be done if no client + if(isnull(owner.client)) + return + + if(owner.stat == SOFT_CRIT) + if(beat != BEAT_SLOW) beat = BEAT_SLOW - owner.playsound_local(get_turf(owner), slowbeat, 40, 0, channel = CHANNEL_HEARTBEAT, use_reverb = FALSE) to_chat(owner, span_notice("You feel your heart slow down...")) - if(beat == BEAT_SLOW && owner.health > owner.crit_threshold) - owner.stop_sound_channel(CHANNEL_HEARTBEAT) - beat = BEAT_NONE - - if(owner.has_status_effect(/datum/status_effect/jitter)) - if(owner.health > HEALTH_THRESHOLD_FULLCRIT && (!beat || beat == BEAT_SLOW)) - owner.playsound_local(get_turf(owner), fastbeat, 40, 0, channel = CHANNEL_HEARTBEAT, use_reverb = FALSE) - beat = BEAT_FAST - - else if(beat == BEAT_FAST) - owner.stop_sound_channel(CHANNEL_HEARTBEAT) - beat = BEAT_NONE - - if(organ_flags & ORGAN_FAILING && owner.can_heartattack() && !(HAS_TRAIT(src, TRAIT_STABLEHEART))) //heart broke, stopped beating, death imminent... unless you have veins that pump blood without a heart - if(owner.stat == CONSCIOUS) - owner.visible_message(span_danger("[owner] clutches at [owner.p_their()] chest as if [owner.p_their()] heart is stopping!"), \ - span_userdanger("You feel a terrible pain in your chest, as if your heart has stopped!")) - owner.set_heartattack(TRUE) - failed = TRUE + SEND_SOUND(owner, sound('sound/health/slowbeat.ogg', repeat = TRUE, channel = CHANNEL_HEARTBEAT, volume = 40)) + + else if(owner.stat == HARD_CRIT) + if(beat != BEAT_FAST && owner.has_status_effect(/datum/status_effect/jitter)) + SEND_SOUND(owner, sound('sound/health/fastbeat.ogg', repeat = TRUE, channel = CHANNEL_HEARTBEAT, volume = 40)) + beat = BEAT_FAST + + else if(beat != BEAT_NONE) + owner.stop_sound_channel(CHANNEL_HEARTBEAT) + beat = BEAT_NONE /obj/item/organ/internal/heart/get_availability(datum/species/owner_species, mob/living/owner_mob) return owner_species.mutantheart @@ -118,12 +146,14 @@ else return ..() -/obj/item/organ/internal/heart/cursed/on_insert(mob/living/carbon/accursed) +/obj/item/organ/internal/heart/cursed/on_mob_insert(mob/living/carbon/accursed) . = ..() + accursed.AddComponent(/datum/component/manual_heart, pump_delay = pump_delay, blood_loss = blood_loss, heal_brute = heal_brute, heal_burn = heal_burn, heal_oxy = heal_oxy) -/obj/item/organ/internal/heart/cursed/Remove(mob/living/carbon/accursed, special = FALSE) +/obj/item/organ/internal/heart/cursed/on_mob_remove(mob/living/carbon/accursed, special = FALSE) . = ..() + qdel(accursed.GetComponent(/datum/component/manual_heart)) /obj/item/organ/internal/heart/cybernetic @@ -222,4 +252,3 @@ owner.heal_overall_damage(brute = 15, burn = 15, required_bodytype = BODYTYPE_ORGANIC) if(owner.reagents.get_reagent_amount(/datum/reagent/medicine/ephedrine) < 20) owner.reagents.add_reagent(/datum/reagent/medicine/ephedrine, 10) - diff --git a/code/modules/surgery/organs/internal/heart/heart_ethereal.dm b/code/modules/surgery/organs/internal/heart/heart_ethereal.dm index 8ad9301fe74122..50659115872998 100644 --- a/code/modules/surgery/organs/internal/heart/heart_ethereal.dm +++ b/code/modules/surgery/organs/internal/heart/heart_ethereal.dm @@ -1,6 +1,7 @@ /obj/item/organ/internal/heart/ethereal name = "crystal core" - icon_state = "ethereal_heart" //Welp. At least it's more unique in functionaliy. + icon_state = "ethereal_heart-on" + base_icon_state = "ethereal_heart" visual = TRUE //This is used by the ethereal species for color desc = "A crystal-like organ that functions similarly to a heart for Ethereals. It can revive its owner." @@ -18,8 +19,9 @@ /obj/item/organ/internal/heart/ethereal/Initialize(mapload) . = ..() add_atom_colour(ethereal_color, FIXED_COLOUR_PRIORITY) + update_appearance() -/obj/item/organ/internal/heart/ethereal/Insert(mob/living/carbon/heart_owner, special = FALSE, drop_if_replaced = TRUE) +/obj/item/organ/internal/heart/ethereal/Insert(mob/living/carbon/heart_owner, special = FALSE, movement_flags) . = ..() if(!.) return @@ -27,7 +29,7 @@ RegisterSignal(heart_owner, COMSIG_LIVING_POST_FULLY_HEAL, PROC_REF(on_owner_fully_heal)) RegisterSignal(heart_owner, COMSIG_QDELETING, PROC_REF(owner_deleted)) -/obj/item/organ/internal/heart/ethereal/Remove(mob/living/carbon/heart_owner, special = FALSE) +/obj/item/organ/internal/heart/ethereal/Remove(mob/living/carbon/heart_owner, special, movement_flags) UnregisterSignal(heart_owner, list(COMSIG_MOB_STATCHANGE, COMSIG_LIVING_POST_FULLY_HEAL, COMSIG_QDELETING)) REMOVE_TRAIT(heart_owner, TRAIT_CORPSELOCKED, SPECIES_TRAIT) stop_crystalization_process(heart_owner) @@ -36,7 +38,7 @@ /obj/item/organ/internal/heart/ethereal/update_overlays() . = ..() - var/mutable_appearance/shine = mutable_appearance(icon, icon_state = "[icon_state]_shine") + var/mutable_appearance/shine = mutable_appearance(icon, icon_state = "[base_icon_state]_overlay-[beating ? "on" : "off"]") shine.appearance_flags = RESET_COLOR //No color on this, just pure white . += shine @@ -193,13 +195,13 @@ add_atom_colour(ethereal_heart.ethereal_color, FIXED_COLOUR_PRIORITY) crystal_heal_timer = addtimer(CALLBACK(src, PROC_REF(heal_ethereal)), CRYSTALIZE_HEAL_TIME, TIMER_STOPPABLE) set_light(4, 10, ethereal_heart.ethereal_color) - update_icon() + update_appearance(UPDATE_OVERLAYS) flick("ethereal_crystal_forming", src) addtimer(CALLBACK(src, PROC_REF(start_crystalization)), 1 SECONDS) /obj/structure/ethereal_crystal/proc/start_crystalization() being_built = FALSE - update_icon() + update_appearance(UPDATE_OVERLAYS) /obj/structure/ethereal_crystal/atom_destruction(damage_flag) playsound(get_turf(ethereal_heart.owner), 'sound/effects/ethereal_revive_fail.ogg', 100) diff --git a/code/modules/surgery/organs/internal/liver/_liver.dm b/code/modules/surgery/organs/internal/liver/_liver.dm index 7baeb04b8b64be..d1d0df8f3623b6 100644 --- a/code/modules/surgery/organs/internal/liver/_liver.dm +++ b/code/modules/surgery/organs/internal/liver/_liver.dm @@ -1,7 +1,7 @@ #define LIVER_DEFAULT_TOX_TOLERANCE 3 //amount of toxins the liver can filter out #define LIVER_DEFAULT_TOX_RESISTANCE 1 //lower values lower how harmful toxins are to the liver -#define LIVER_FAILURE_STAGE_SECONDS 180 //amount of seconds before liver failure reaches a new stage // SKYRAT EDIT CHANGE - Original: 60 -#define MAX_TOXIN_LIVER_DAMAGE 2 //the max damage the liver can recieve per second (~1 min at max damage will destroy liver) +#define LIVER_FAILURE_STAGE_SECONDS 180 //amount of seconds before liver failure reaches a new stage // NOVA EDIT CHANGE - Original: 60 +#define MAX_TOXIN_LIVER_DAMAGE 2 //the max damage the liver can receive per second (~1 min at max damage will destroy liver) /obj/item/organ/internal/liver name = "liver" @@ -61,12 +61,12 @@ qdel(GetComponent(/datum/component/squeak)) /// Registers COMSIG_SPECIES_HANDLE_CHEMICAL from owner -/obj/item/organ/internal/liver/on_insert(mob/living/carbon/organ_owner, special) +/obj/item/organ/internal/liver/on_mob_insert(mob/living/carbon/organ_owner, special) . = ..() RegisterSignal(organ_owner, COMSIG_SPECIES_HANDLE_CHEMICAL, PROC_REF(handle_chemical)) /// Unregisters COMSIG_SPECIES_HANDLE_CHEMICAL from owner -/obj/item/organ/internal/liver/on_remove(mob/living/carbon/organ_owner, special) +/obj/item/organ/internal/liver/on_mob_remove(mob/living/carbon/organ_owner, special) . = ..() UnregisterSignal(organ_owner, COMSIG_SPECIES_HANDLE_CHEMICAL) @@ -134,7 +134,7 @@ return var/obj/belly = owner.get_organ_slot(ORGAN_SLOT_STOMACH) - var/list/cached_reagents = owner.reagents.reagent_list + var/list/cached_reagents = owner.reagents?.reagent_list var/liver_damage = 0 var/provide_pain_message = HAS_NO_TOXIN @@ -142,7 +142,7 @@ for(var/datum/reagent/toxin/toxin in cached_reagents) if(toxin.affected_organ_flags && !(organ_flags & toxin.affected_organ_flags)) //this particular toxin does not affect this type of organ continue - var/amount = round(toxin.volume, CHEMICAL_QUANTISATION_LEVEL) // this is an optimization + var/amount = toxin.volume if(belly) amount += belly.reagents.get_reagent_amount(toxin.type) @@ -152,7 +152,7 @@ if(provide_pain_message != HAS_PAINFUL_TOXIN) provide_pain_message = toxin.silent_toxin ? HAS_SILENT_TOXIN : HAS_PAINFUL_TOXIN - owner.reagents.metabolize(owner, seconds_per_tick, times_fired, can_overdose = TRUE) + owner.reagents?.metabolize(owner, seconds_per_tick, times_fired, can_overdose = TRUE) if(liver_damage) apply_organ_damage(min(liver_damage * seconds_per_tick , MAX_TOXIN_LIVER_DAMAGE * seconds_per_tick)) @@ -304,6 +304,6 @@ #undef HAS_NO_TOXIN #undef HAS_PAINFUL_TOXIN #undef LIVER_DEFAULT_TOX_TOLERANCE -//#undef LIVER_DEFAULT_TOX_RESISTANCE // SKYRAT EDIT REMOVAL - Needed in modular +//#undef LIVER_DEFAULT_TOX_RESISTANCE // NOVA EDIT REMOVAL - Needed in modular #undef LIVER_FAILURE_STAGE_SECONDS #undef MAX_TOXIN_LIVER_DAMAGE diff --git a/code/modules/surgery/organs/internal/lungs/_lungs.dm b/code/modules/surgery/organs/internal/lungs/_lungs.dm index 2e99f70d989161..874ec320648b2c 100644 --- a/code/modules/surgery/organs/internal/lungs/_lungs.dm +++ b/code/modules/surgery/organs/internal/lungs/_lungs.dm @@ -153,7 +153,7 @@ add_gas_reaction(/datum/gas/zauker, while_present = PROC_REF(too_much_zauker)) ///Simply exists so that you don't keep any alerts from your previous lack of lungs. -/obj/item/organ/internal/lungs/Insert(mob/living/carbon/receiver, special = FALSE, drop_if_replaced = TRUE) +/obj/item/organ/internal/lungs/Insert(mob/living/carbon/receiver, special = FALSE, movement_flags) . = ..() if(!.) return . @@ -163,7 +163,7 @@ receiver.clear_alert(ALERT_NOT_ENOUGH_PLASMA) receiver.clear_alert(ALERT_NOT_ENOUGH_N2O) -/obj/item/organ/internal/lungs/Remove(mob/living/carbon/organ_owner, special) +/obj/item/organ/internal/lungs/Remove(mob/living/carbon/organ_owner, special, movement_flags) . = ..() // This is very "manual" I realize, but it's useful to ensure cleanup for gases we're removing happens // Avoids stuck alerts and such diff --git a/code/modules/surgery/organs/internal/stomach/_stomach.dm b/code/modules/surgery/organs/internal/stomach/_stomach.dm index e7d22a3ece6971..7916606f2df467 100644 --- a/code/modules/surgery/organs/internal/stomach/_stomach.dm +++ b/code/modules/surgery/organs/internal/stomach/_stomach.dm @@ -55,7 +55,7 @@ var/mob/living/carbon/body = owner // digest food, sent all reagents that can metabolize to the body - for(var/datum/reagent/bit as anything in reagents.reagent_list) + for(var/datum/reagent/bit as anything in reagents?.reagent_list) // If the reagent does not metabolize then it will sit in the stomach // This has an effect on items like plastic causing them to take up space in the stomach @@ -82,7 +82,7 @@ // transfer the reagents over to the body at the rate of the stomach metabolim // this way the body is where all reagents that are processed and react // the stomach manages how fast they are feed in a drip style - reagents.trans_id_to(body, bit.type, amount=amount) + reagents.trans_to(body, amount, target_id = bit.type) //Handle disgust if(body) @@ -93,7 +93,7 @@ return //We are checking if we have nutriment in a damaged stomach. - var/datum/reagent/nutri = locate(/datum/reagent/consumable/nutriment) in reagents.reagent_list + var/datum/reagent/nutri = locate(/datum/reagent/consumable/nutriment) in reagents?.reagent_list //No nutriment found lets exit out if(!nutri) return @@ -214,7 +214,7 @@ ///This gets called after the owner takes a bite of food /obj/item/organ/internal/stomach/proc/after_eat(atom/edible) - SEND_SIGNAL(src, COMSIG_STOMACH_AFTER_EAT, edible) // SKYRAT EDIT ADDITION - Hemophage Organs + SEND_SIGNAL(src, COMSIG_STOMACH_AFTER_EAT, edible) // NOVA EDIT ADDITION - Hemophage Organs return /obj/item/organ/internal/stomach/proc/handle_disgust(mob/living/carbon/human/disgusted, seconds_per_tick, times_fired) @@ -263,7 +263,7 @@ disgusted.throw_alert(ALERT_DISGUST, /atom/movable/screen/alert/disgusted) disgusted.add_mood_event("disgust", /datum/mood_event/disgusted) -/obj/item/organ/internal/stomach/Remove(mob/living/carbon/stomach_owner, special = 0) +/obj/item/organ/internal/stomach/Remove(mob/living/carbon/stomach_owner, special, movement_flags) if(ishuman(stomach_owner)) var/mob/living/carbon/human/human_owner = owner human_owner.clear_alert(ALERT_DISGUST) diff --git a/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm b/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm index c1632f33329d41..68f9d9428a04a7 100644 --- a/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm +++ b/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm @@ -13,12 +13,12 @@ adjust_charge(-ETHEREAL_CHARGE_FACTOR * seconds_per_tick) handle_charge(owner, seconds_per_tick, times_fired) -/obj/item/organ/internal/stomach/ethereal/on_insert(mob/living/carbon/stomach_owner) +/obj/item/organ/internal/stomach/ethereal/on_mob_insert(mob/living/carbon/stomach_owner) . = ..() RegisterSignal(stomach_owner, COMSIG_PROCESS_BORGCHARGER_OCCUPANT, PROC_REF(charge)) RegisterSignal(stomach_owner, COMSIG_LIVING_ELECTROCUTE_ACT, PROC_REF(on_electrocute)) -/obj/item/organ/internal/stomach/ethereal/on_remove(mob/living/carbon/stomach_owner) +/obj/item/organ/internal/stomach/ethereal/on_mob_remove(mob/living/carbon/stomach_owner) . = ..() UnregisterSignal(stomach_owner, COMSIG_PROCESS_BORGCHARGER_OCCUPANT) UnregisterSignal(stomach_owner, COMSIG_LIVING_ELECTROCUTE_ACT) diff --git a/code/modules/surgery/organs/internal/stomach/stomach_golem.dm b/code/modules/surgery/organs/internal/stomach/stomach_golem.dm index 79d3976f22d6b8..a1f5ce6c70ea87 100644 --- a/code/modules/surgery/organs/internal/stomach/stomach_golem.dm +++ b/code/modules/surgery/organs/internal/stomach/stomach_golem.dm @@ -11,11 +11,11 @@ /// How slow are you if you have absolutely nothing in the tank? var/max_hunger_slowdown = 4 -/obj/item/organ/internal/stomach/golem/on_insert(mob/living/carbon/organ_owner, special) +/obj/item/organ/internal/stomach/golem/on_mob_insert(mob/living/carbon/organ_owner, special) . = ..() RegisterSignal(owner, COMSIG_CARBON_ATTEMPT_EAT, PROC_REF(try_eating)) -/obj/item/organ/internal/stomach/golem/on_remove(mob/living/carbon/organ_owner, special) +/obj/item/organ/internal/stomach/golem/on_mob_remove(mob/living/carbon/organ_owner, special) . = ..() UnregisterSignal(organ_owner, COMSIG_CARBON_ATTEMPT_EAT) organ_owner.remove_movespeed_modifier(/datum/movespeed_modifier/golem_hunger) @@ -74,7 +74,7 @@ return TRUE /datum/status_effect/golem_statued/get_examine_text() - return span_warning("[owner.p_They()] are as still as a statue!") + return span_warning("[owner.p_They()] [owner.p_are()] as still as a statue!") /datum/status_effect/golem_statued/on_remove() owner.visible_message(span_notice("[owner] slowly stirs back into motion!"), span_notice("You have gathered enough strength to move your body once more.")) diff --git a/code/modules/surgery/organs/internal/tongue/_tongue.dm b/code/modules/surgery/organs/internal/tongue/_tongue.dm index 0dc9a6cfb267de..ba9400aaf618bf 100644 --- a/code/modules/surgery/organs/internal/tongue/_tongue.dm +++ b/code/modules/surgery/organs/internal/tongue/_tongue.dm @@ -94,8 +94,10 @@ /obj/item/organ/internal/tongue/proc/handle_speech(datum/source, list/speech_args) SIGNAL_HANDLER - if(speech_args[SPEECH_LANGUAGE] in languages_native) - return FALSE //no changes + if(speech_args[SPEECH_LANGUAGE] in languages_native) // Speaking a native language? + return FALSE // Don't modify speech + if(HAS_TRAIT(source, TRAIT_SIGN_LANG)) // No modifiers for signers - I hate this but I simply cannot get these to combine into one statement + return FALSE // Don't modify speech modify_speech(source, speech_args) /obj/item/organ/internal/tongue/proc/modify_speech(datum/source, list/speech_args) @@ -118,7 +120,7 @@ food_taste_reaction = FOOD_LIKED return food_taste_reaction -/obj/item/organ/internal/tongue/Insert(mob/living/carbon/tongue_owner, special = FALSE, drop_if_replaced = TRUE) +/obj/item/organ/internal/tongue/Insert(mob/living/carbon/tongue_owner, special = FALSE, movement_flags) . = ..() if(!.) return @@ -135,7 +137,7 @@ ADD_TRAIT(tongue_owner, TRAIT_AGEUSIA, ORGAN_TRAIT) apply_tongue_effects() -/obj/item/organ/internal/tongue/Remove(mob/living/carbon/tongue_owner, special = FALSE) +/obj/item/organ/internal/tongue/Remove(mob/living/carbon/tongue_owner, special, movement_flags) . = ..() temp_say_mod = "" UnregisterSignal(tongue_owner, COMSIG_MOB_SAY) @@ -181,7 +183,7 @@ say_mod = "hisses" taste_sensitivity = 10 // combined nose + tongue, extra sensitive modifies_speech = TRUE - languages_native = list(/datum/language/draconic, /datum/language/ashtongue) //SKYRAT EDIT: Ashtongue for Ashwalkers + languages_native = list(/datum/language/draconic, /datum/language/ashtongue) //NOVA EDIT: Ashtongue for Ashwalkers liked_foodtypes = GORE | MEAT | SEAFOOD | NUTS | BUGS disliked_foodtypes = GRAIN | DAIRY | CLOTH | GROSS voice_filter = @{"[0:a] asplit [out0][out2]; [out0] asetrate=%SAMPLE_RATE%*0.9,aresample=%SAMPLE_RATE%,atempo=1/0.9,aformat=channel_layouts=mono,volume=0.2 [p0]; [out2] asetrate=%SAMPLE_RATE%*1.1,aresample=%SAMPLE_RATE%,atempo=1/1.1,aformat=channel_layouts=mono,volume=0.2[p2]; [p0][0][p2] amix=inputs=3"} @@ -189,7 +191,7 @@ var/static/regex/lizard_hiss = new("s+", "g") var/static/regex/lizard_hiSS = new("S+", "g") var/static/regex/lizard_kss = new(@"(\w)x", "g") - /* // SKYRAT EDIT: REMOVAL + /* // NOVA EDIT: REMOVAL var/static/regex/lizard_kSS = new(@"(\w)X", "g") */ var/static/regex/lizard_ecks = new(@"\bx([\-|r|R]|\b)", "g") @@ -199,12 +201,12 @@ message = lizard_hiss.Replace(message, "sss") message = lizard_hiSS.Replace(message, "SSS") message = lizard_kss.Replace(message, "$1kss") - /* // SKYRAT EDIT: REMOVAL + /* // NOVA EDIT: REMOVAL message = lizard_kSS.Replace(message, "$1KSS") */ message = lizard_ecks.Replace(message, "ecks$1") message = lizard_eckS.Replace(message, "ECKS$1") - //SKYRAT EDIT START: Adding russian version to autohiss + //NOVA EDIT START: Adding russian version to autohiss if(CONFIG_GET(flag/russian_text_formation)) var/static/regex/lizard_hiss_ru = new("с+", "g") var/static/regex/lizard_hiSS_ru = new("С+", "g") @@ -214,7 +216,7 @@ message = replacetext(message, "Ж", "Ш") message = lizard_hiss_ru.Replace(message, "ссс") message = lizard_hiSS_ru.Replace(message, "ССС") - //SKYRAT EDIT END: Adding russian version to autohiss + //NOVA EDIT END: Adding russian version to autohiss speech_args[SPEECH_MESSAGE] = message /obj/item/organ/internal/tongue/lizard/silver @@ -576,10 +578,10 @@ GLOBAL_LIST_INIT(english_to_zombie, list()) color = "#96DB00" // TODO proper sprite, rather than recoloured pink tongue modifies_speech = TRUE voice_filter = "atempo=0.5" // makes them talk really slow - liked_foodtypes = VEGETABLES | FRUIT | GROSS | RAW //SKYRAT EDIT - Roundstart Snails - Food Prefs - disliked_foodtypes = DAIRY | ORANGES | SUGAR //SKYRAT EDIT: Roundstart Snails - As it turns out, you can't give a snail processed sugar or citrus. + liked_foodtypes = VEGETABLES | FRUIT | GROSS | RAW //NOVA EDIT - Roundstart Snails - Food Prefs + disliked_foodtypes = DAIRY | ORANGES | SUGAR //NOVA EDIT: Roundstart Snails - As it turns out, you can't give a snail processed sugar or citrus. -/* SKYRAT EDIT START - Roundstart Snails: Less annoying speech. +/* NOVA EDIT START - Roundstart Snails: Less annoying speech. /obj/item/organ/internal/tongue/snail/modify_speech(datum/source, list/speech_args) var/new_message var/message = speech_args[SPEECH_MESSAGE] @@ -589,7 +591,7 @@ GLOBAL_LIST_INIT(english_to_zombie, list()) else new_message += message[i] speech_args[SPEECH_MESSAGE] = new_message -*/ // SKYRAT EDIT END +*/ // NOVA EDIT END /obj/item/organ/internal/tongue/ethereal name = "electric discharger" diff --git a/code/modules/surgery/organs/organ_movement.dm b/code/modules/surgery/organs/organ_movement.dm new file mode 100644 index 00000000000000..bee717fb764c4c --- /dev/null +++ b/code/modules/surgery/organs/organ_movement.dm @@ -0,0 +1,230 @@ +// There are two kinds of organ movement: mob movement and limb movement +// If you pull someones brain out, you remove it from the mob and the limb +// If you take someones head off, you remove it from the mob but not the limb +// If you remove the brain from an already decapitated head, you remove it from the limb but not the mob + +// Keep the seperation of limb removal and mob removal absolute + +/* + * Insert the organ into the select mob. + * + * receiver - the mob who will get our organ + * special - "quick swapping" an organ out - when TRUE, the mob will be unaffected by not having that organ for the moment + * movement_flags - Flags for how we behave in movement. See DEFINES/organ_movement for flags + */ +/obj/item/organ/proc/Insert(mob/living/carbon/receiver, special = FALSE, movement_flags) + SHOULD_CALL_PARENT(TRUE) + + mob_insert(receiver, special, movement_flags) + bodypart_insert(limb_owner = receiver, movement_flags = movement_flags) + + return TRUE + +/* + * Remove the organ from the select mob. + * + * * organ_owner - the mob who owns our organ, that we're removing the organ from. Can be null + * * special - "quick swapping" an organ out - when TRUE, the mob will be unaffected by not having that organ for the moment + */ +/obj/item/organ/proc/Remove(mob/living/carbon/organ_owner, special = FALSE, movement_flags) + SHOULD_CALL_PARENT(TRUE) + + mob_remove(organ_owner, special, movement_flags) + bodypart_remove(limb_owner = organ_owner, movement_flags = movement_flags) + +/* + * Insert the organ into the select mob. + * + * receiver - the mob who will get our organ + * special - "quick swapping" an organ out - when TRUE, the mob will be unaffected by not having that organ for the moment + * movement_flags - Flags for how we behave in movement. See DEFINES/organ_movement for flags + */ +/obj/item/organ/proc/mob_insert(mob/living/carbon/receiver, special, movement_flags) + SHOULD_CALL_PARENT(TRUE) + + if(!iscarbon(receiver)) + stack_trace("Tried to insert organ into non-carbon: [receiver.type]") + return + + if(owner == receiver) + stack_trace("Organ receiver is already organ owner") + return + + var/obj/item/organ/replaced = receiver.get_organ_slot(slot) + if(replaced) + replaced.Remove(receiver, special = TRUE) + if(movement_flags & DELETE_IF_REPLACED) + qdel(replaced) + else + replaced.forceMove(get_turf(receiver)) + + if(!IS_ROBOTIC_ORGAN(src) && (organ_flags & ORGAN_VIRGIN)) + blood_dna_info = receiver.get_blood_dna_list() + // need to remove the synethic blood DNA that is initialized + // wash also adds the blood dna again + wash(CLEAN_TYPE_BLOOD) + organ_flags &= ~ORGAN_VIRGIN + + receiver.organs |= src + receiver.organs_slot[slot] = src + owner = receiver + + on_mob_insert(receiver, special) + + return TRUE + +/// Called after the organ is inserted into a mob. +/// Adds Traits, Actions, and Status Effects on the mob in which the organ is impanted. +/// Override this proc to create unique side-effects for inserting your organ. Must be called by overrides. +/obj/item/organ/proc/on_mob_insert(mob/living/carbon/organ_owner, special = FALSE, movement_flags) + SHOULD_CALL_PARENT(TRUE) + + for(var/trait in organ_traits) + ADD_TRAIT(organ_owner, trait, REF(src)) + + for(var/datum/action/action as anything in actions) + action.Grant(organ_owner) + + for(var/datum/status_effect/effect as anything in organ_effects) + organ_owner.apply_status_effect(effect, type) + + RegisterSignal(owner, COMSIG_ATOM_EXAMINE, PROC_REF(on_owner_examine)) + SEND_SIGNAL(src, COMSIG_ORGAN_IMPLANTED, organ_owner) + SEND_SIGNAL(organ_owner, COMSIG_CARBON_GAIN_ORGAN, src, special) + +/// Insert an organ into a limb, assume the limb as always detached and include no owner operations here (except the get_bodypart helper here I guess) +/// Give EITHER a limb OR a limb owner +/obj/item/organ/proc/bodypart_insert(obj/item/bodypart/bodypart, mob/living/carbon/limb_owner, movement_flags) + SHOULD_CALL_PARENT(TRUE) + + if(limb_owner) + bodypart = limb_owner.get_bodypart(deprecise_zone(zone)) + + // The true movement + forceMove(bodypart) + bodypart.contents |= src + bodypart_owner = bodypart + + RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(forced_removal)) + + // Apply unique side-effects. Return value does not matter. + on_bodypart_insert(bodypart) + + return TRUE + +/// Add any limb specific effects you might want here +/obj/item/organ/proc/on_bodypart_insert(obj/item/bodypart/limb, movement_flags) + SHOULD_CALL_PARENT(TRUE) + + item_flags |= ABSTRACT + ADD_TRAIT(src, TRAIT_NODROP, ORGAN_INSIDE_BODY_TRAIT) + +/* + * Remove the organ from the select mob. + * + * * organ_owner - the mob who owns our organ, that we're removing the organ from. Can be null + * * special - "quick swapping" an organ out - when TRUE, the mob will be unaffected by not having that organ for the moment + */ +/obj/item/organ/proc/mob_remove(mob/living/carbon/organ_owner, special = FALSE, movement_flags) + SHOULD_CALL_PARENT(TRUE) + + if(organ_owner) + if(organ_owner.organs_slot[slot] == src) + organ_owner.organs_slot.Remove(slot) + organ_owner.organs -= src + + owner = null + + on_mob_remove(organ_owner, special) + + return TRUE + +/// Called after the organ is removed from a mob. +/// Removes Traits, Actions, and Status Effects on the mob in which the organ was impanted. +/// Override this proc to create unique side-effects for removing your organ. Must be called by overrides. +/obj/item/organ/proc/on_mob_remove(mob/living/carbon/organ_owner, special = FALSE, movement_flags) + SHOULD_CALL_PARENT(TRUE) + + if(!iscarbon(organ_owner)) + stack_trace("Organ removal should not be happening on non carbon mobs: [organ_owner]") + + for(var/trait in organ_traits) + REMOVE_TRAIT(organ_owner, trait, REF(src)) + + for(var/datum/action/action as anything in actions) + action.Remove(organ_owner) + + for(var/datum/status_effect/effect as anything in organ_effects) + organ_owner.remove_status_effect(effect, type) + + UnregisterSignal(organ_owner, COMSIG_ATOM_EXAMINE) + SEND_SIGNAL(src, COMSIG_ORGAN_REMOVED, organ_owner) + SEND_SIGNAL(organ_owner, COMSIG_CARBON_LOSE_ORGAN, src, special) + + var/list/diseases = organ_owner.get_static_viruses() + if(!LAZYLEN(diseases)) + return + + var/list/datum/disease/diseases_to_add = list() + for(var/datum/disease/disease as anything in diseases) + // robotic organs are immune to disease unless 'inorganic biology' symptom is present + if(IS_ROBOTIC_ORGAN(src) && !(disease.infectable_biotypes & MOB_ROBOTIC)) + continue + + // admin or special viruses that should not be reproduced + if(disease.spread_flags & (DISEASE_SPREAD_SPECIAL | DISEASE_SPREAD_NON_CONTAGIOUS)) + continue + + diseases_to_add += disease + + if(LAZYLEN(diseases_to_add)) + AddComponent(/datum/component/infective, diseases_to_add) + +/// Called to remove an organ from a limb. Do not put any mob operations here (except the bodypart_getter at the start) +/// Give EITHER a limb OR a limb_owner +/obj/item/organ/proc/bodypart_remove(obj/item/bodypart/limb, mob/living/carbon/limb_owner, movement_flags) + SHOULD_CALL_PARENT(TRUE) + + if(!isnull(limb_owner)) + limb = limb_owner.get_bodypart(deprecise_zone(zone)) + + UnregisterSignal(src, COMSIG_MOVABLE_MOVED) //DONT MOVE THIS!!!! we moves the organ right after, so we unregister before we move them physically + + // The true movement is here + moveToNullspace() + bodypart_owner.contents -= src + bodypart_owner = null + + on_bodypart_remove(limb) + + return TRUE + +/// Called on limb removal to remove limb specific limb effects or statusses +/obj/item/organ/proc/on_bodypart_remove(obj/item/bodypart/limb, movement_flags) + SHOULD_CALL_PARENT(TRUE) + + if(!IS_ROBOTIC_ORGAN(src) && !(item_flags & NO_BLOOD_ON_ITEM) && !QDELING(src)) + AddElement(/datum/element/decal/blood) + + item_flags &= ~ABSTRACT + REMOVE_TRAIT(src, TRAIT_NODROP, ORGAN_INSIDE_BODY_TRAIT) + +/// In space station videogame, nothing is sacred. If somehow an organ is removed unexpectedly, handle it properly +/obj/item/organ/proc/forced_removal() + SIGNAL_HANDLER + + if(owner) + Remove(owner) + else if(bodypart_owner) + bodypart_remove(bodypart_owner) + else + stack_trace("Force removed an already removed organ!") + +/** + * Proc that gets called when the organ is surgically removed by someone, can be used for special effects + * Currently only used so surplus organs can explode when surgically removed. + */ +/obj/item/organ/proc/on_surgical_removal(mob/living/user, mob/living/carbon/old_owner, target_zone, obj/item/tool) + SHOULD_CALL_PARENT(TRUE) + SEND_SIGNAL(src, COMSIG_ORGAN_SURGICALLY_REMOVED, user, old_owner, target_zone, tool) + RemoveElement(/datum/element/decal/blood) diff --git a/code/modules/surgery/plastic_surgery.dm b/code/modules/surgery/plastic_surgery.dm index 424251143c33c5..9224c29b2db635 100644 --- a/code/modules/surgery/plastic_surgery.dm +++ b/code/modules/surgery/plastic_surgery.dm @@ -16,7 +16,9 @@ ) /datum/surgery/plastic_surgery/advanced - name = "advanced plastic surgery" + name = "Advanced plastic surgery" + desc = "Surgery allows one-self to completely remake someone's face with that of another. Provided they have a picture of them in their offhand when reshaping the face." + requires_tech = TRUE steps = list( /datum/surgery_step/incise, /datum/surgery_step/retract_skin, diff --git a/code/modules/surgery/revival.dm b/code/modules/surgery/revival.dm index e199df0ffd9ec9..f278121590d91d 100644 --- a/code/modules/surgery/revival.dm +++ b/code/modules/surgery/revival.dm @@ -75,7 +75,7 @@ span_notice("[user] prepares to shock [target]'s brain with [tool]."), span_notice("[user] prepares to shock [target]'s brain with [tool]."), ) - target.notify_ghost_cloning("Someone is trying to zap your brain.", source = target) + target.notify_revival("Someone is trying to zap your brain.", source = target) /datum/surgery_step/revive/play_preop_sound(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery) if(istype(tool, /obj/item/shockpaddles)) @@ -98,19 +98,19 @@ on_revived(user, target) return TRUE - //SKYRAT EDIT CHANGE - DNR TRAIT - need this so that people don't just keep spamming the revival surgery; it runs success just bc the surgery steps are done + //NOVA EDIT CHANGE - DNR TRAIT - need this so that people don't just keep spamming the revival surgery; it runs success just bc the surgery steps are done if(HAS_TRAIT(target, TRAIT_DNR)) target.visible_message(span_warning("...[target.p_they()] lie[target.p_s()] still, unaffected. Further attempts are futile, target.p_theyre() gone.")) else target.visible_message(span_warning("...[target.p_they()] convulse[target.p_s()], then lie[target.p_s()] still.")) - //SKYRAT EDIT CHANGE END - DNR TRAIT - ORIGINAL: target.visible_message(span_warning("...[target.p_they()] convulse[target.p_s()], then lie[target.p_s()] still.")) + //NOVA EDIT CHANGE END - DNR TRAIT - ORIGINAL: target.visible_message(span_warning("...[target.p_they()] convulse[target.p_s()], then lie[target.p_s()] still.")) return FALSE /// Called when you have been successfully raised from the dead /datum/surgery_step/revive/proc/on_revived(mob/surgeon, mob/living/patient) patient.visible_message(span_notice("...[patient] wakes up, alive and aware!")) patient.emote("gasp") - to_chat(patient, "[CONFIG_GET(string/blackoutpolicy)]") //SKYRAT EDIT ADDITION - BLACKOUT POLICY + to_chat(patient, "[CONFIG_GET(string/blackoutpolicy)]") //NOVA EDIT ADDITION - BLACKOUT POLICY if(HAS_MIND_TRAIT(surgeon, TRAIT_MORBID) && ishuman(surgeon)) // Contrary to their typical hatred of resurrection, it wouldn't be very thematic if morbid people didn't love playing god var/mob/living/carbon/human/morbid_weirdo = surgeon morbid_weirdo.add_mood_event("morbid_revival_success", /datum/mood_event/morbid_revival_success) diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm index 3f10087ab8f9fe..526094f2b6fbd9 100644 --- a/code/modules/surgery/surgery_step.dm +++ b/code/modules/surgery/surgery_step.dm @@ -64,7 +64,7 @@ return FALSE #define SURGERY_SLOWDOWN_CAP_MULTIPLIER 2 //increase to make surgery slower but fail less, and decrease to make surgery faster but fail more -#define SURGERY_SPEEDUP_AREA 0.5 // Skyrat Edit Addition - reward for doing surgery in surgery +#define SURGERY_SPEEDUP_AREA 0.5 // NOVA EDIT Addition - reward for doing surgery in surgery ///Modifier given to surgery speed for dissected bodies. #define SURGERY_SPEED_DISSECTION_MODIFIER 0.8 ///Modifier given to users with TRAIT_MORBID on certain surgeries @@ -107,7 +107,7 @@ var/was_sleeping = (target.stat != DEAD && target.IsSleeping()) - // Skyrat Edit Addition - reward for doing surgery on calm patients, and for using surgery rooms(ie. surgerying alone) + // NOVA EDIT Addition - reward for doing surgery on calm patients, and for using surgery rooms(ie. surgerying alone) if(was_sleeping || HAS_TRAIT(target, TRAIT_NUMBED) || target.stat == DEAD) modded_time *= SURGERY_SPEEDUP_AREA to_chat(user, span_notice("You are able to work faster due to the patient's calm attitude!")) @@ -119,11 +119,11 @@ if(quiet_enviromnent) modded_time *= SURGERY_SPEEDUP_AREA to_chat(user, span_notice("You are able to work faster due to the quiet environment!")) - // Skyrat Edit End - // Skyrat Edit: Cyborgs are no longer immune to surgery speedups. + // NOVA EDIT End + // NOVA EDIT: Cyborgs are no longer immune to surgery speedups. //if(iscyborg(user))//any immunities to surgery slowdown should go in this check. //modded_time = time - // Skyrat Edit End + // NOVA EDIT End if(do_after(user, modded_time, target = target, interaction_key = user.has_status_effect(/datum/status_effect/hippocratic_oath) ? target : DOAFTER_SOURCE_SURGERY)) //If we have the hippocratic oath, we can perform one surgery on each target, otherwise we can only do one surgery in total. @@ -150,7 +150,7 @@ surgery.step_in_progress = FALSE return advance -#undef SURGERY_SPEEDUP_AREA // SKYRAT EDIT ADDITION +#undef SURGERY_SPEEDUP_AREA // NOVA EDIT ADDITION /datum/surgery_step/proc/preop(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( @@ -274,7 +274,7 @@ * * pain_message - The message to be displayed * * mechanical_surgery - Boolean flag that represents if a surgery step is done on a mechanical limb (therefore does not force scream) */ -//SKYRAT EDIT START: Fixes painkillers not actually stopping pain. Adds mood effects to painful surgeries. +//NOVA EDIT START: Fixes painkillers not actually stopping pain. Adds mood effects to painful surgeries. /datum/surgery_step/proc/display_pain(mob/living/target, pain_message, mechanical_surgery = FALSE) if(target.stat >= UNCONSCIOUS) //the unconscious do not worry about pain return @@ -288,7 +288,7 @@ target.add_mood_event("severe_surgery", /datum/mood_event/severe_surgery) if(prob(30)) target.emote("scream") -//SKYRAT EDIT END +//NOVA EDIT END #undef SURGERY_SPEED_DISSECTION_MODIFIER #undef SURGERY_SPEED_MORBID_CURIOSITY diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index c5f62883b5f119..6f083dae53cdea 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -7,7 +7,7 @@ lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*3, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 1.5) - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = SURGICAL_TOOL w_class = WEIGHT_CLASS_TINY tool_behaviour = TOOL_RETRACTOR @@ -32,7 +32,7 @@ lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' custom_materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass = SHEET_MATERIAL_AMOUNT*1.25) - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = SURGICAL_TOOL w_class = WEIGHT_CLASS_TINY attack_verb_continuous = list("attacks", "pinches") @@ -59,7 +59,7 @@ lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*1.25, /datum/material/glass = SMALL_MATERIAL_AMOUNT*7.5) - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = SURGICAL_TOOL w_class = WEIGHT_CLASS_TINY attack_verb_continuous = list("burns") @@ -139,7 +139,7 @@ righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' hitsound = 'sound/weapons/circsawhit.ogg' custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*5, /datum/material/glass = SHEET_MATERIAL_AMOUNT*3) - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = SURGICAL_TOOL force = 15 demolition_mod = 0.5 @@ -182,7 +182,7 @@ inhand_icon_state = "scalpel" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = SURGICAL_TOOL force = 10 demolition_mod = 0.25 @@ -232,7 +232,7 @@ righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' hitsound = 'sound/weapons/circsawhit.ogg' mob_throw_hit_sound = 'sound/weapons/pierce.ogg' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = SURGICAL_TOOL force = 15 w_class = WEIGHT_CLASS_NORMAL @@ -277,7 +277,7 @@ /obj/item/surgical_drapes name = "surgical drapes" - desc = "Nanotrasen brand surgical drapes provide optimal safety and infection control." + desc = "Symphionia brand surgical drapes provide optimal safety and infection control." icon = 'icons/obj/medical/surgery_tools.dmi' icon_state = "surgical_drapes" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' @@ -294,7 +294,7 @@ /obj/item/surgical_processor //allows medical cyborgs to scan and initiate advanced surgeries name = "surgical processor" desc = "A device for scanning and initiating surgeries from a disk or operating computer." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/scanner.dmi' icon_state = "surgical_processor" item_flags = NOBLUDGEON // List of surgeries downloaded into the device. @@ -473,7 +473,7 @@ desc = "A type of heavy duty surgical shears used for achieving a clean separation between limb and patient. Keeping the patient still is imperative to be able to secure and align the shears." icon = 'icons/obj/medical/surgery_tools.dmi' icon_state = "shears" - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = SURGICAL_TOOL toolspeed = 1 force = 12 @@ -535,6 +535,8 @@ else limb_snip_candidate.dismember() user.visible_message(span_danger("[src] violently slams shut, amputating [patient]'s [candidate_name]."), span_notice("You amputate [patient]'s [candidate_name] with [src].")) + user.log_message("[user] has amputated [patient]'s [candidate_name] with [src]", LOG_GAME) + patient.log_message("[patient]'s [candidate_name] has been amputated by [user] with [src]", LOG_GAME) if(HAS_MIND_TRAIT(user, TRAIT_MORBID)) //Freak user.add_mood_event("morbid_dismemberment", /datum/mood_event/morbid_dismemberment) @@ -559,7 +561,7 @@ lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' custom_materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass = SHEET_MATERIAL_AMOUNT*1.25, /datum/material/silver = SHEET_MATERIAL_AMOUNT*1.25) - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = SURGICAL_TOOL w_class = WEIGHT_CLASS_SMALL attack_verb_continuous = list("corrects", "properly sets") @@ -597,33 +599,31 @@ ui.open() /obj/item/blood_filter/ui_data(mob/user) - var/list/data = list() - var/list/chem_names = list() + . = list() + + .["whitelist"] = list() for(var/key in whitelist) - chem_names += whitelist[key] - data["whitelist"] = chem_names - return data + .["whitelist"] += whitelist[key] /obj/item/blood_filter/ui_act(action, params) . = ..() if(.) return + . = TRUE switch(action) if("add") - var/selected_reagent = tgui_input_list(usr, "Select reagent to filter", "Whitelist reagent", GLOB.chemical_name_list) + var/selected_reagent = tgui_input_list(usr, "Select reagent to filter", "Whitelist reagent", GLOB.name2reagent) if(!selected_reagent) - return TRUE + return FALSE - var/chem_id = get_chem_id(selected_reagent) + var/datum/reagent/chem_id = GLOB.name2reagent[selected_reagent] if(!chem_id) - return TRUE + return FALSE if(!(chem_id in whitelist)) whitelist[chem_id] = selected_reagent - - if("remove") var/chem_name = params["reagent"] var/chem_id = get_chem_id(chem_name) diff --git a/code/modules/tgchat/README.md b/code/modules/tgchat/README.md new file mode 100644 index 00000000000000..71acb47c458ae8 --- /dev/null +++ b/code/modules/tgchat/README.md @@ -0,0 +1,30 @@ +## /TG/ Chat + +/TG/ Chat, which will be referred to as TgChat from this point onwards, is a system in which we can send messages to clients in a controlled and semi-reliable manner. The standard way of sending messages to BYOND clients simply dumps whatever you output to them directly into their chat window, however BYOND allows us to load our own code on the client to change this behaviour in a way that allows us to do some pretty neat things. + +### Message Format + +TgChat handles sending messages from the server to the client through the use of JSON payloads, of which the format will change depending on the type of message and the intended client endpoint. An example of the payload for chat messages is as follows: +```json +{ + "sequence": 0, + "content": { + "type": ". . .", // ?optional + "text": ". . .", // ?optional !atleast-one + "html": ". . .", // ?optional !atleast-one + "avoidHighlighting": 0 // ?optional + }, +} +``` + +### Reliability + +In the past there have been issues where BYOND will silently and without reason lose a message we sent to the client, to detect this and recover from it seamlessly TgChat also has a baked in reliability layer. This reliability layer is very primitive, and simply keeps track of received sequence numbers. Should the client receive an unexpected sequence number TgChat asks the server to resend any missing packets. + +### Ping System + +TgChat supports a round trip time ping measurement, which is displayed to the client so they can know how long it takes for their commands and inputs to reach the server. This is done by sending the client a ping request, `ping/soft`, which tells the client to send a ping to the server. When the server receives said ping it sends a reply, `ping/reply`, to the client with a payload containing the current DateTime which the client can reference against the initial ping request. + +### Chat Tabs, Local Storage, and Highlighting + +To make organizing and managing chat easier and more functional for both players and admins, TgChat has the ability to filter out messages based on their primary tag, such as individual departmental radios, to a dedicated chat tab for easier reading and comprehension. These tabs can also be configured to highlist messages based on a simple keyword search. You can set a multitude of different keywords to search for and they will be highlighting for instant alerting of the client. Said tabs, highlighting rules, and your chat history will persist thanks to use of local storage on the client. Using local storage TgChat can ensure that your preferences are saved and maintained between client restarts and switching between other /TG/ servers. Local Storage is also used to keep your chat history aswell, should you need to scroll through your chat logs. diff --git a/code/modules/tgchat/to_chat.dm b/code/modules/tgchat/to_chat.dm index e71e8658845136..2b1e48cb6aea94 100644 --- a/code/modules/tgchat/to_chat.dm +++ b/code/modules/tgchat/to_chat.dm @@ -35,23 +35,9 @@ if(text) message["text"] = text if(html) message["html"] = html if(avoid_highlighting) message["avoidHighlighting"] = avoid_highlighting - var/message_blob = TGUI_CREATE_MESSAGE("chat/message", message) - var/message_html = message_to_html(message) - if(islist(target)) - for(var/_target in target) - var/client/client = CLIENT_FROM_VAR(_target) - if(client) - // Send to tgchat - client.tgui_panel?.window.send_raw_message(message_blob) - // Send to old chat - SEND_TEXT(client, message_html) - return - var/client/client = CLIENT_FROM_VAR(target) - if(client) - // Send to tgchat - client.tgui_panel?.window.send_raw_message(message_blob) - // Send to old chat - SEND_TEXT(client, message_html) + + // send it immediately + SSchat.send_immediate(target, message) /** * Sends the message to the recipient (target). diff --git a/code/modules/tgs/core/core.dm b/code/modules/tgs/core/core.dm index 41a04733945257..8be96f27404a4c 100644 --- a/code/modules/tgs/core/core.dm +++ b/code/modules/tgs/core/core.dm @@ -42,11 +42,11 @@ var/datum/tgs_version/max_api_version = TgsMaximumApiVersion(); if(version.suite != null && version.minor != null && version.patch != null && version.deprecated_patch != null && version.deprefixed_parameter > max_api_version.deprefixed_parameter) - TGS_ERROR_LOG("Detected unknown API version! Defaulting to latest. Update the DMAPI to fix this problem.") + TGS_ERROR_LOG("Detected unknown Interop API version! Defaulting to latest. Update the DMAPI to fix this problem.") api_datum = /datum/tgs_api/latest if(!api_datum) - TGS_ERROR_LOG("Found unsupported API version: [raw_parameter]. If this is a valid version please report this, backporting is done on demand.") + TGS_ERROR_LOG("Found unsupported Interop API version: [raw_parameter]. If this is a valid version please report this, backporting is done on demand.") return TGS_INFO_LOG("Activating API for version [version.deprefixed_parameter]") @@ -107,6 +107,13 @@ if(api) return api.ApiVersion() +/world/TgsEngine() +#ifdef OPENDREAM + return TGS_ENGINE_TYPE_OPENDREAM +#else + return TGS_ENGINE_TYPE_BYOND +#endif + /world/TgsInstanceName() var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) if(api) @@ -153,4 +160,9 @@ /world/TgsSecurityLevel() var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) if(api) - api.SecurityLevel() + return api.SecurityLevel() + +/world/TgsVisibility() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + return api.Visibility() diff --git a/code/modules/tgs/core/datum.dm b/code/modules/tgs/core/datum.dm index 68b0330fe86065..07ce3b684584eb 100644 --- a/code/modules/tgs/core/datum.dm +++ b/code/modules/tgs/core/datum.dm @@ -11,6 +11,15 @@ TGS_DEFINE_AND_SET_GLOBAL(tgs, null) src.event_handler = event_handler src.version = version +/datum/tgs_api/proc/TerminateWorld() + while(TRUE) + TGS_DEBUG_LOG("About to terminate world. Tick: [world.time], sleep_offline: [world.sleep_offline]") + 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) + TGS_DEBUG_LOG("BYOND DIDN'T TERMINATE THE WORLD!!! TICK IS: [world.time], sleep_offline: [world.sleep_offline]") + /datum/tgs_api/latest parent_type = /datum/tgs_api/v5 @@ -57,3 +66,6 @@ TGS_PROTECT_DATUM(/datum/tgs_api) /datum/tgs_api/proc/SecurityLevel() return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/Visibility() + return TGS_UNIMPLEMENTED diff --git a/code/modules/tgs/v4/api.dm b/code/modules/tgs/v4/api.dm index b9a75c4abb4891..945e2e41176711 100644 --- a/code/modules/tgs/v4/api.dm +++ b/code/modules/tgs/v4/api.dm @@ -73,7 +73,7 @@ if(cached_json["apiValidateOnly"]) TGS_INFO_LOG("Validating API and exiting...") Export(TGS4_COMM_VALIDATE, list(TGS4_PARAMETER_DATA = "[minimum_required_security_level]")) - del(world) + TerminateWorld() security_level = cached_json["securityLevel"] chat_channels_json_path = cached_json["chatChannelsJson"] @@ -188,7 +188,7 @@ requesting_new_port = TRUE if(!world.OpenPort(0)) //open any port TGS_ERROR_LOG("Unable to open random port to retrieve new port![TGS4_PORT_CRITFAIL_MESSAGE]") - del(world) + TerminateWorld() //request a new port export_lock = FALSE @@ -196,16 +196,16 @@ if(!new_port_json) TGS_ERROR_LOG("No new port response from server![TGS4_PORT_CRITFAIL_MESSAGE]") - del(world) + TerminateWorld() var/new_port = new_port_json[TGS4_PARAMETER_DATA] if(!isnum(new_port) || new_port <= 0) TGS_ERROR_LOG("Malformed new port json ([json_encode(new_port_json)])![TGS4_PORT_CRITFAIL_MESSAGE]") - del(world) + TerminateWorld() if(new_port != world.port && !world.OpenPort(new_port)) TGS_ERROR_LOG("Unable to open port [new_port]![TGS4_PORT_CRITFAIL_MESSAGE]") - del(world) + TerminateWorld() requesting_new_port = FALSE while(export_lock) diff --git a/code/modules/tgs/v5/__interop_version.dm b/code/modules/tgs/v5/__interop_version.dm index 5d3d491a7362bb..616263098fd3e9 100644 --- a/code/modules/tgs/v5/__interop_version.dm +++ b/code/modules/tgs/v5/__interop_version.dm @@ -1 +1 @@ -"5.6.1" +"5.8.0" diff --git a/code/modules/tgs/v5/_defines.dm b/code/modules/tgs/v5/_defines.dm index f973338daa032d..1c7d67d20cdf62 100644 --- a/code/modules/tgs/v5/_defines.dm +++ b/code/modules/tgs/v5/_defines.dm @@ -8,7 +8,6 @@ #define DMAPI5_TOPIC_REQUEST_LIMIT 65528 #define DMAPI5_TOPIC_RESPONSE_LIMIT 65529 -#define DMAPI5_BRIDGE_COMMAND_PORT_UPDATE 0 #define DMAPI5_BRIDGE_COMMAND_STARTUP 1 #define DMAPI5_BRIDGE_COMMAND_PRIME 2 #define DMAPI5_BRIDGE_COMMAND_REBOOT 3 @@ -18,6 +17,7 @@ #define DMAPI5_PARAMETER_ACCESS_IDENTIFIER "accessIdentifier" #define DMAPI5_PARAMETER_CUSTOM_COMMANDS "customCommands" +#define DMAPI5_PARAMETER_TOPIC_PORT "topicPort" #define DMAPI5_CHUNK "chunk" #define DMAPI5_CHUNK_PAYLOAD "payload" @@ -48,6 +48,7 @@ #define DMAPI5_RUNTIME_INFORMATION_REVISION "revision" #define DMAPI5_RUNTIME_INFORMATION_TEST_MERGES "testMerges" #define DMAPI5_RUNTIME_INFORMATION_SECURITY_LEVEL "securityLevel" +#define DMAPI5_RUNTIME_INFORMATION_VISIBILITY "visibility" #define DMAPI5_CHAT_UPDATE_CHANNELS "channels" @@ -79,6 +80,7 @@ #define DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH 8 #define DMAPI5_TOPIC_COMMAND_SEND_CHUNK 9 #define DMAPI5_TOPIC_COMMAND_RECEIVE_CHUNK 10 +#define DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST 11 #define DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE "commandType" #define DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND "chatCommand" @@ -88,6 +90,7 @@ #define DMAPI5_TOPIC_PARAMETER_NEW_INSTANCE_NAME "newInstanceName" #define DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE "chatUpdate" #define DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION "newServerVersion" +#define DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE "broadcastMessage" #define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE "commandResponse" #define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE "commandResponseMessage" diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm index 34cc43f8762f7c..25d49b3e3bdb2e 100644 --- a/code/modules/tgs/v5/api.dm +++ b/code/modules/tgs/v5/api.dm @@ -4,6 +4,7 @@ var/instance_name var/security_level + var/visibility var/reboot_mode = TGS_REBOOT_MODE_NORMAL @@ -16,6 +17,8 @@ var/list/chat_channels var/initialized = FALSE + var/initial_bridge_request_received = FALSE + var/datum/tgs_version/interop_version var/chunked_requests = 0 var/list/chunked_topics = list() @@ -24,7 +27,8 @@ /datum/tgs_api/v5/New() . = ..() - TGS_DEBUG_LOG("V5 API created") + interop_version = version + TGS_DEBUG_LOG("V5 API created: [json_encode(args)]") /datum/tgs_api/v5/ApiVersion() return new /datum/tgs_version( @@ -37,8 +41,8 @@ access_identifier = world.params[DMAPI5_PARAM_ACCESS_IDENTIFIER] var/datum/tgs_version/api_version = ApiVersion() - version = null - 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())) + version = null // we want this to be the TGS version, not the interop version + 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!") return FALSE @@ -50,10 +54,12 @@ if(runtime_information[DMAPI5_RUNTIME_INFORMATION_API_VALIDATE_ONLY]) TGS_INFO_LOG("DMAPI validation, exiting...") - del(world) + TerminateWorld() - version = new /datum/tgs_version(runtime_information[DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION]) + initial_bridge_request_received = TRUE + version = new /datum/tgs_version(runtime_information[DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION]) // reassigning this because it can change if TGS updates security_level = runtime_information[DMAPI5_RUNTIME_INFORMATION_SECURITY_LEVEL] + visibility = runtime_information[DMAPI5_RUNTIME_INFORMATION_VISIBILITY] instance_name = runtime_information[DMAPI5_RUNTIME_INFORMATION_INSTANCE_NAME] var/list/revisionData = runtime_information[DMAPI5_RUNTIME_INFORMATION_REVISION] @@ -100,10 +106,17 @@ initialized = TRUE return TRUE +/datum/tgs_api/v5/proc/GetTopicPort() +#if defined(OPENDREAM) && defined(OPENDREAM_TOPIC_PORT_EXISTS) + return "[world.opendream_topic_port]" +#else + return null +#endif + /datum/tgs_api/v5/proc/RequireInitialBridgeResponse() TGS_DEBUG_LOG("RequireInitialBridgeResponse()") var/logged = FALSE - while(!version) + while(!initial_bridge_request_received) if(!logged) TGS_DEBUG_LOG("RequireInitialBridgeResponse: Starting sleep") logged = TRUE @@ -252,3 +265,7 @@ /datum/tgs_api/v5/SecurityLevel() RequireInitialBridgeResponse() return security_level + +/datum/tgs_api/v5/Visibility() + RequireInitialBridgeResponse() + return visibility diff --git a/code/modules/tgs/v5/bridge.dm b/code/modules/tgs/v5/bridge.dm index 37f58bcdf632e2..a0ab359876704c 100644 --- a/code/modules/tgs/v5/bridge.dm +++ b/code/modules/tgs/v5/bridge.dm @@ -48,7 +48,9 @@ var/json = CreateBridgeData(command, data, TRUE) var/encoded_json = url_encode(json) - var/url = "http://127.0.0.1:[server_port]/Bridge?[DMAPI5_BRIDGE_DATA]=[encoded_json]" + var/api_prefix = interop_version.minor >= 8 ? "api/" : "" + + var/url = "http://127.0.0.1:[server_port]/[api_prefix]Bridge?[DMAPI5_BRIDGE_DATA]=[encoded_json]" return url /datum/tgs_api/v5/proc/CreateBridgeData(command, list/data, needs_auth) @@ -81,11 +83,16 @@ TGS_ERROR_LOG("Failed bridge request: [bridge_request]") return - var/response_json = file2text(export_response["CONTENT"]) - if(!response_json) + var/content = export_response["CONTENT"] + if(!content) TGS_ERROR_LOG("Failed bridge request, missing content!") return + var/response_json = file2text(content) + if(!response_json) + TGS_ERROR_LOG("Failed bridge request, failed to load content!") + return + var/list/bridge_response = json_decode(response_json) if(!bridge_response) TGS_ERROR_LOG("Failed bridge request, bad json: [response_json]") diff --git a/code/modules/tgs/v5/topic.dm b/code/modules/tgs/v5/topic.dm index d7d4712138135e..05e6c4e1b2146f 100644 --- a/code/modules/tgs/v5/topic.dm +++ b/code/modules/tgs/v5/topic.dm @@ -94,7 +94,7 @@ if(DMAPI5_TOPIC_COMMAND_CHANGE_PORT) var/new_port = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_PORT] if (!isnum(new_port) || !(new_port > 0)) - return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]") + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]") if(event_handler != null) event_handler.HandleEvent(TGS_EVENT_PORT_SWAP, new_port) @@ -141,7 +141,7 @@ if(DMAPI5_TOPIC_COMMAND_SERVER_PORT_UPDATE) var/new_port = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_PORT] if (!isnum(new_port) || !(new_port > 0)) - return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]") + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]") server_port = new_port return TopicResponse() @@ -157,7 +157,7 @@ var/error_message = null if (new_port != null) if (!isnum(new_port) || !(new_port > 0)) - error_message = "Invalid [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]" + error_message = "Invalid [DMAPI5_TOPIC_PARAMETER_NEW_PORT]" else server_port = new_port @@ -165,7 +165,7 @@ if (!istext(new_version_string)) if(error_message != null) error_message += ", " - error_message += "Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION]]" + error_message += "Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION]" else var/datum/tgs_version/new_version = new(new_version_string) if (event_handler) @@ -175,6 +175,7 @@ var/list/reattach_response = TopicResponse(error_message) reattach_response[DMAPI5_PARAMETER_CUSTOM_COMMANDS] = ListCustomCommands() + reattach_response[DMAPI5_PARAMETER_TOPIC_PORT] = GetTopicPort() return reattach_response if(DMAPI5_TOPIC_COMMAND_SEND_CHUNK) @@ -267,4 +268,16 @@ return chunk_to_send + if(DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST) + var/message = topic_parameters[DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE] + if (!istext(message)) + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE]") + + TGS_WORLD_ANNOUNCE(message) + return TopicResponse() + return TopicResponse("Unknown command: [command]") + +/datum/tgs_api/v5/proc/WorldBroadcast(message) + set waitfor = FALSE + TGS_WORLD_ANNOUNCE(message) diff --git a/code/modules/tgs/v5/undefs.dm b/code/modules/tgs/v5/undefs.dm index c679737dfc4961..d531d4b7b9dd10 100644 --- a/code/modules/tgs/v5/undefs.dm +++ b/code/modules/tgs/v5/undefs.dm @@ -8,7 +8,6 @@ #undef DMAPI5_TOPIC_REQUEST_LIMIT #undef DMAPI5_TOPIC_RESPONSE_LIMIT -#undef DMAPI5_BRIDGE_COMMAND_PORT_UPDATE #undef DMAPI5_BRIDGE_COMMAND_STARTUP #undef DMAPI5_BRIDGE_COMMAND_PRIME #undef DMAPI5_BRIDGE_COMMAND_REBOOT @@ -18,6 +17,7 @@ #undef DMAPI5_PARAMETER_ACCESS_IDENTIFIER #undef DMAPI5_PARAMETER_CUSTOM_COMMANDS +#undef DMAPI5_PARAMETER_TOPIC_PORT #undef DMAPI5_CHUNK #undef DMAPI5_CHUNK_PAYLOAD @@ -48,6 +48,7 @@ #undef DMAPI5_RUNTIME_INFORMATION_REVISION #undef DMAPI5_RUNTIME_INFORMATION_TEST_MERGES #undef DMAPI5_RUNTIME_INFORMATION_SECURITY_LEVEL +#undef DMAPI5_RUNTIME_INFORMATION_VISIBILITY #undef DMAPI5_CHAT_UPDATE_CHANNELS @@ -77,6 +78,9 @@ #undef DMAPI5_TOPIC_COMMAND_SERVER_PORT_UPDATE #undef DMAPI5_TOPIC_COMMAND_HEALTHCHECK #undef DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH +#undef DMAPI5_TOPIC_COMMAND_SEND_CHUNK +#undef DMAPI5_TOPIC_COMMAND_RECEIVE_CHUNK +#undef DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST #undef DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE #undef DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND @@ -86,6 +90,7 @@ #undef DMAPI5_TOPIC_PARAMETER_NEW_INSTANCE_NAME #undef DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE #undef DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION +#undef DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE #undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE #undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE diff --git a/code/modules/tgui/tgui_window.dm b/code/modules/tgui/tgui_window.dm index 0f831dfd926548..82d8d794d9afc2 100644 --- a/code/modules/tgui/tgui_window.dm +++ b/code/modules/tgui/tgui_window.dm @@ -384,6 +384,8 @@ client << link(href_list["url"]) if("cacheReloaded") reinitialize() + if("chat/resend") + SSchat.handle_resend(client, payload) /datum/tgui_window/vv_edit_var(var_name, var_value) return var_name != NAMEOF(src, id) && ..() diff --git a/code/modules/tgui_input/alert.dm b/code/modules/tgui_input/alert.dm index 4dc197a3c8cdd0..4749ef278725ec 100644 --- a/code/modules/tgui_input/alert.dm +++ b/code/modules/tgui_input/alert.dm @@ -18,7 +18,11 @@ var/client/client = user user = client.mob else - return + return null + + if(isnull(user.client)) + return null + // A gentle nudge - you should not be using TGUI alert for anything other than a simple message. if(length(buttons) > 3) log_tgui(user, "Error: TGUI Alert initiated with too many buttons. Use a list.", "TguiAlert") @@ -73,7 +77,7 @@ start_time = world.time QDEL_IN(src, timeout) -/datum/tgui_alert/Destroy(force, ...) +/datum/tgui_alert/Destroy(force) SStgui.close_uis(src) state = null QDEL_NULL(buttons) diff --git a/code/modules/tgui_input/checkboxes.dm b/code/modules/tgui_input/checkboxes.dm index ec43bd8914d5ab..53b264038dc206 100644 --- a/code/modules/tgui_input/checkboxes.dm +++ b/code/modules/tgui_input/checkboxes.dm @@ -14,13 +14,17 @@ if (!user) user = usr if(!length(items)) - return + return null if (!istype(user)) if (istype(user, /client)) var/client/client = user user = client.mob else - return + return null + + if(isnull(user.client)) + return null + if(!user.client.prefs.read_preference(/datum/preference/toggle/tgui_input)) return input(user, message, title) as null|anything in items var/datum/tgui_checkbox_input/input = new(user, message, title, items, min_checked, max_checked, timeout, ui_state) @@ -66,7 +70,7 @@ start_time = world.time QDEL_IN(src, timeout) -/datum/tgui_checkbox_input/Destroy(force, ...) +/datum/tgui_checkbox_input/Destroy(force) SStgui.close_uis(src) state = null QDEL_NULL(items) diff --git a/code/modules/tgui_input/list.dm b/code/modules/tgui_input/list.dm index 95daaadb32649e..174f16fc7b57cf 100644 --- a/code/modules/tgui_input/list.dm +++ b/code/modules/tgui_input/list.dm @@ -14,17 +14,24 @@ if (!user) user = usr if(!length(items)) - return + return null if (!istype(user)) if (istype(user, /client)) var/client/client = user user = client.mob else - return + return null + + if(isnull(user.client)) + return null + /// 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 null|anything in items var/datum/tgui_list_input/input = new(user, message, title, items, default, timeout, ui_state) + if(input.invalid) + qdel(input) + return input.ui_interact(user) input.wait() if (input) @@ -58,6 +65,8 @@ var/closed /// The TGUI UI state that will be returned in ui_state(). Default: always_state var/datum/ui_state/state + /// Whether the tgui list input is invalid or not (i.e. due to all list entries being null) + var/invalid = FALSE /datum/tgui_list_input/New(mob/user, message, title, list/items, default, timeout, ui_state) src.title = title @@ -77,12 +86,15 @@ string_key = avoid_assoc_duplicate_keys(string_key, repeat_items) src.items += string_key src.items_map[string_key] = i + + if(length(src.items) == 0) + invalid = TRUE if (timeout) src.timeout = timeout start_time = world.time QDEL_IN(src, timeout) -/datum/tgui_list_input/Destroy(force, ...) +/datum/tgui_list_input/Destroy(force) SStgui.close_uis(src) state = null QDEL_NULL(items) diff --git a/code/modules/tgui_input/number.dm b/code/modules/tgui_input/number.dm index bcdf495fd82e86..68998acb0331f7 100644 --- a/code/modules/tgui_input/number.dm +++ b/code/modules/tgui_input/number.dm @@ -23,7 +23,11 @@ var/client/client = user user = client.mob else - return + return null + + if (isnull(user.client)) + return null + // Client does NOT have tgui_input on: Returns regular input if(!user.client.prefs.read_preference(/datum/preference/toggle/tgui_input)) var/input_number = input(user, message, title, default) as null|num @@ -88,7 +92,7 @@ if(default > max_value) CRASH("Default value is greater than max value.") -/datum/tgui_input_number/Destroy(force, ...) +/datum/tgui_input_number/Destroy(force) SStgui.close_uis(src) state = null return ..() diff --git a/code/modules/tgui_input/say_modal/modal.dm b/code/modules/tgui_input/say_modal/modal.dm index 1185aaa12afa3c..f700a6cdbea009 100644 --- a/code/modules/tgui_input/say_modal/modal.dm +++ b/code/modules/tgui_input/say_modal/modal.dm @@ -86,7 +86,7 @@ if(!payload?["channel"]) CRASH("No channel provided to an open TGUI-Say") window_open = TRUE - if(payload["channel"] != OOC_CHANNEL && payload["channel"] != ADMIN_CHANNEL && payload["channel"] != LOOC_CHANNEL) // SKYRAT EDIT CHANGE (Add LOOC_CHANNEL) + if(payload["channel"] != OOC_CHANNEL && payload["channel"] != ADMIN_CHANNEL && payload["channel"] != LOOC_CHANNEL) // NOVA EDIT CHANGE (Add LOOC_CHANNEL) start_thinking() if(!client.typing_indicators) log_speech_indicators("[key_name(client)] started typing at [loc_name(client.mob)], indicators DISABLED.") diff --git a/code/modules/tgui_input/say_modal/speech.dm b/code/modules/tgui_input/say_modal/speech.dm index 3cdfb5057d0f50..e4c5032e2b3298 100644 --- a/code/modules/tgui_input/say_modal/speech.dm +++ b/code/modules/tgui_input/say_modal/speech.dm @@ -10,7 +10,7 @@ /datum/tgui_say/proc/alter_entry(payload) var/entry = payload["entry"] /// No OOC leaks - if(!entry || payload["channel"] == OOC_CHANNEL || payload["channel"] == ME_CHANNEL || payload["channel"] == LOOC_CHANNEL) // SKYRAT EDIT CHANGE - CUSTOMIZATION + if(!entry || payload["channel"] == OOC_CHANNEL || payload["channel"] == ME_CHANNEL || payload["channel"] == LOOC_CHANNEL) // NOVA EDIT CHANGE - CUSTOMIZATION return pick(hurt_phrases) /// Random trimming for larger sentences if(length(entry) > 50) @@ -47,14 +47,14 @@ if(ADMIN_CHANNEL) client.cmd_admin_say(entry) return TRUE - // SKYRAT EDIT ADDITION START - CUSTOMIZATION + // NOVA EDIT ADDITION START - CUSTOMIZATION if(LOOC_CHANNEL) client.looc(entry) return TRUE if(WHIS_CHANNEL) client.mob.whisper_verb(entry) return TRUE - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END return FALSE /** diff --git a/code/modules/tgui_input/say_modal/typing.dm b/code/modules/tgui_input/say_modal/typing.dm index 49357fb9b5f858..a6367c088d6940 100644 --- a/code/modules/tgui_input/say_modal/typing.dm +++ b/code/modules/tgui_input/say_modal/typing.dm @@ -36,14 +36,14 @@ /datum/preference/toggle/typing_indicator/apply_to_client(client/client, value) client?.typing_indicators = value -/** Sets the mob as "thinking" - with indicator and variable thinking_IC */ +/** Sets the mob as "thinking" - with indicator and the TRAIT_THINKING_IN_CHARACTER trait */ /datum/tgui_say/proc/start_thinking() if(!window_open || !client.typing_indicators) return FALSE /// Special exemptions if(isabductor(client.mob)) return FALSE - client.mob.thinking_IC = TRUE + ADD_TRAIT(client.mob, TRAIT_THINKING_IN_CHARACTER, CURRENTLY_TYPING_TRAIT) client.mob.create_thinking_indicator() /** Removes typing/thinking indicators and flags the mob as not thinking */ @@ -55,10 +55,11 @@ * signals the client mob to revert to the "thinking" icon. */ /datum/tgui_say/proc/start_typing() - client.mob.remove_thinking_indicator() - if(!window_open || !client.typing_indicators || !client.mob.thinking_IC) + var/mob/client_mob = client.mob + client_mob.remove_thinking_indicator() + if(!window_open || !client.typing_indicators || !HAS_TRAIT(client_mob, TRAIT_THINKING_IN_CHARACTER)) return FALSE - client.mob.create_typing_indicator() + client_mob.create_typing_indicator() addtimer(CALLBACK(src, PROC_REF(stop_typing)), 5 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_STOPPABLE) /** @@ -66,16 +67,17 @@ * If the user was typing IC, the thinking indicator is shown. */ /datum/tgui_say/proc/stop_typing() - if(!client?.mob) + if(isnull(client?.mob)) return FALSE - client.mob.remove_typing_indicator() - if(!window_open || !client.typing_indicators || !client.mob.thinking_IC) + var/mob/client_mob = client.mob + client_mob.remove_typing_indicator() + if(!window_open || !client.typing_indicators || !HAS_TRAIT(client_mob, TRAIT_THINKING_IN_CHARACTER)) return FALSE - client.mob.create_thinking_indicator() + client_mob.create_thinking_indicator() /// Overrides for overlay creation /mob/living/create_thinking_indicator() - if(active_thinking_indicator || active_typing_indicator || !thinking_IC || stat != CONSCIOUS ) + if(active_thinking_indicator || active_typing_indicator || stat != CONSCIOUS || !HAS_TRAIT(src, TRAIT_THINKING_IN_CHARACTER)) return FALSE active_thinking_indicator = mutable_appearance('icons/mob/effects/talk.dmi', "[bubble_icon]3", TYPING_LAYER) add_overlay(active_thinking_indicator) @@ -88,7 +90,7 @@ active_thinking_indicator = null /mob/living/create_typing_indicator() - if(active_typing_indicator || active_thinking_indicator || !thinking_IC || stat != CONSCIOUS) + if(active_typing_indicator || active_thinking_indicator || stat != CONSCIOUS || !HAS_TRAIT(src, TRAIT_THINKING_IN_CHARACTER)) return FALSE active_typing_indicator = mutable_appearance('icons/mob/effects/talk.dmi', "[bubble_icon]0", TYPING_LAYER) add_overlay(active_typing_indicator) @@ -101,7 +103,7 @@ active_typing_indicator = null /mob/living/remove_all_indicators() - thinking_IC = FALSE + REMOVE_TRAIT(src, TRAIT_THINKING_IN_CHARACTER, CURRENTLY_TYPING_TRAIT) remove_thinking_indicator() remove_typing_indicator() diff --git a/code/modules/tgui_input/text.dm b/code/modules/tgui_input/text.dm index 811673a4c03aae..f97e0326d58ef6 100644 --- a/code/modules/tgui_input/text.dm +++ b/code/modules/tgui_input/text.dm @@ -23,7 +23,11 @@ var/client/client = user user = client.mob else - return + return null + + if(isnull(user.client)) + return null + // Client does NOT have tgui_input on: Returns regular input if(!user.client.prefs.read_preference(/datum/preference/toggle/tgui_input)) if(encode) @@ -86,7 +90,7 @@ start_time = world.time QDEL_IN(src, timeout) -/datum/tgui_input_text/Destroy(force, ...) +/datum/tgui_input_text/Destroy(force) SStgui.close_uis(src) state = null return ..() diff --git a/code/modules/tooltip/tooltip.dm b/code/modules/tooltip/tooltip.dm index 49539920920c8d..757fe67d81e2c1 100644 --- a/code/modules/tooltip/tooltip.dm +++ b/code/modules/tooltip/tooltip.dm @@ -100,7 +100,7 @@ Notes: /datum/tooltip/proc/do_hide() winshow(owner, control, FALSE) -/datum/tooltip/Destroy(force, ...) +/datum/tooltip/Destroy(force) last_target = null return ..() diff --git a/code/modules/transport/_transport_machinery.dm b/code/modules/transport/_transport_machinery.dm index 2d10b4ada5d2a2..1cbbbdeb24b574 100644 --- a/code/modules/transport/_transport_machinery.dm +++ b/code/modules/transport/_transport_machinery.dm @@ -114,7 +114,7 @@ SIGNAL_HANDLER INVOKE_ASYNC(src, PROC_REF(try_fix_machine), source, user, tool) - return COMPONENT_BLOCK_TOOL_ATTACK + return ITEM_INTERACT_BLOCKING /// Attempts a do_after, and if successful, stops the event /obj/machinery/transport/proc/try_fix_machine(obj/machinery/transport/machine, mob/living/user, obj/item/tool) diff --git a/code/modules/transport/elevator/elev_indicator.dm b/code/modules/transport/elevator/elev_indicator.dm index cf9fa46e96328d..9751b44e0ff124 100644 --- a/code/modules/transport/elevator/elev_indicator.dm +++ b/code/modules/transport/elevator/elev_indicator.dm @@ -17,7 +17,6 @@ light_range = 1 light_power = 1 light_color = COLOR_DISPLAY_BLUE - luminosity = 1 maptext_x = 18 maptext_y = 20 diff --git a/code/modules/transport/elevator/elev_panel.dm b/code/modules/transport/elevator/elev_panel.dm index 3e9e0e073c19f5..8806fc4311085a 100644 --- a/code/modules/transport/elevator/elev_panel.dm +++ b/code/modules/transport/elevator/elev_panel.dm @@ -38,7 +38,7 @@ /// If you want to override what each floor is named as, you can do so with this list. /// Make this an assoc list of "z level you want to rename" to "desired name". /// So, if you want the z-level 2 destination to be named "Cargo", you would do list("2" = "Cargo"). - /// (Reminder: Z1 gets loaded as Central Command, so your map's bottom Z will be Z2!) + /// (Reminder: Z1 gets loaded as Conglomeration of Colonists, so your map's bottom Z will be Z2!) var/list/preset_destination_names /// What z-level did we move to last? Used for showing the user in the UI which direction we're moving. diff --git a/code/modules/transport/tram/tram_controller.dm b/code/modules/transport/tram/tram_controller.dm index c20fb1bfef4ace..ed84ba2cfe0fcb 100644 --- a/code/modules/transport/tram/tram_controller.dm +++ b/code/modules/transport/tram/tram_controller.dm @@ -554,8 +554,8 @@ SEND_TRANSPORT_SIGNAL(COMSIG_COMMS_STATUS, src, TRUE) log_transport("TC: [specific_transport_id] ending Tram Malfunction event.") -/datum/transport_controller/linear/tram/proc/register_collision() - tram_registration.collisions += 1 +/datum/transport_controller/linear/tram/proc/register_collision(points = 1) + tram_registration.collisions += points SEND_TRANSPORT_SIGNAL(COMSIG_TRAM_COLLISION, SSpersistence.tram_hits_this_round) /datum/transport_controller/linear/tram/proc/power_lost() @@ -697,7 +697,7 @@ /obj/machinery/transport/tram_controller/hilbert configured_transport_id = HILBERT_LINE_1 - flags_1 = NODECONSTRUCT_1 + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION /obj/machinery/transport/tram_controller/Initialize(mapload) . = ..() @@ -848,7 +848,7 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /obj/machinery/transport/tram_controller/deconstruct(disassembled = TRUE) - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return var/turf/drop_location = find_obstruction_free_location(1, src) diff --git a/code/modules/transport/tram/tram_displays.dm b/code/modules/transport/tram/tram_displays.dm index 908651f3b11229..0e36295f97ec73 100644 --- a/code/modules/transport/tram/tram_displays.dm +++ b/code/modules/transport/tram/tram_displays.dm @@ -82,7 +82,7 @@ . += span_notice("It is secured to the tram wall with [EXAMINE_HINT("bolts.")]") /obj/machinery/transport/destination_sign/deconstruct(disassembled = TRUE) - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return if(disassembled) new /obj/item/wallframe/indicator_display(drop_location()) diff --git a/code/modules/transport/tram/tram_floors.dm b/code/modules/transport/tram/tram_floors.dm index 2afb59f9b4a6ea..1e1fad836c3b20 100644 --- a/code/modules/transport/tram/tram_floors.dm +++ b/code/modules/transport/tram/tram_floors.dm @@ -135,6 +135,9 @@ return return ..() +/turf/open/floor/tram/plate/energized/broken + broken = TRUE + // Resetting the tram contents to its original state needs the turf to be there /turf/open/indestructible/tram name = "tram guideway" @@ -239,7 +242,7 @@ secured = TRUE to_chat(user, span_notice("The tile is securely screwed in place.")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/thermoplastic/crowbar_act_secondary(mob/living/user, obj/item/tool) . = ..() @@ -257,12 +260,12 @@ user.put_in_hands(pulled_tile) qdel(src) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/thermoplastic/welder_act(mob/living/user, obj/item/tool) if(atom_integrity >= max_integrity) to_chat(user, span_warning("[src] is already in good condition!")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(!tool.tool_start_check(user, amount = 0)) return FALSE to_chat(user, span_notice("You begin repairing [src]...")) @@ -271,7 +274,7 @@ atom_integrity = max_integrity to_chat(user, span_notice("You repair [src].")) update_appearance() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/item/stack/thermoplastic name = "thermoplastic tram tile" diff --git a/code/modules/transport/tram/tram_remote.dm b/code/modules/transport/tram/tram_remote.dm index 08e127bc6b9767..71433d56ddfdc2 100644 --- a/code/modules/transport/tram/tram_remote.dm +++ b/code/modules/transport/tram/tram_remote.dm @@ -3,7 +3,7 @@ inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/remote.dmi' name = "tram remote" desc = "A remote control that can be linked to a tram. This can only go well." w_class = WEIGHT_CLASS_TINY diff --git a/code/modules/transport/tram/tram_signals.dm b/code/modules/transport/tram/tram_signals.dm index 9983b32fe33121..9e297e8e8293f6 100644 --- a/code/modules/transport/tram/tram_signals.dm +++ b/code/modules/transport/tram/tram_signals.dm @@ -5,7 +5,6 @@ icon = 'icons/obj/tram/crossing_signal.dmi' icon_state = "crossing-inbound" base_icon_state = "crossing-inbound" - plane = GAME_PLANE_UPPER layer = TRAM_SIGNAL_LAYER max_integrity = 250 integrity_failure = 0.25 @@ -19,7 +18,6 @@ // pointless if it only takes 2 seconds to cross but updates every 2 seconds subsystem_type = /datum/controller/subsystem/processing/transport light_color = LIGHT_COLOR_BABY_BLUE - luminosity = 1 /// green, amber, or red for tram, blue if it's emag, tram missing, etc. var/signal_state = XING_STATE_MALF /// the sensor we use @@ -73,7 +71,7 @@ desc = "Indicates to pedestrians if it's safe to cross the tracks." icon = 'icons/obj/tram/crossing_signal.dmi' icon_state = "crossing-inbound" - plane = GAME_PLANE_UPPER + layer = TRAM_SIGNAL_LAYER max_integrity = 250 integrity_failure = 0.25 idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 2.4 @@ -83,7 +81,6 @@ light_range = 1.5 light_power = 3 light_color = COLOR_VIBRANT_LIME - luminosity = 1 var/sign_dir = INBOUND /obj/machinery/static_signal/northwest diff --git a/code/modules/transport/tram/tram_structures.dm b/code/modules/transport/tram/tram_structures.dm index c6291f775b3f7e..1007673db4b9f5 100644 --- a/code/modules/transport/tram/tram_structures.dm +++ b/code/modules/transport/tram/tram_structures.dm @@ -153,7 +153,7 @@ /obj/structure/tram/welder_act(mob/living/user, obj/item/tool) if(atom_integrity >= max_integrity) to_chat(user, span_warning("[src] is already in good condition!")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(!tool.tool_start_check(user, amount = 0)) return FALSE to_chat(user, span_notice("You begin repairing [src]...")) @@ -161,7 +161,7 @@ atom_integrity = max_integrity to_chat(user, span_notice("You repair [src].")) update_appearance() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/tram/attackby_secondary(obj/item/tool, mob/user, params) switch(state) @@ -212,7 +212,7 @@ return ..() /obj/structure/tram/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) if(disassembled) new girder_type(loc) if(mineral_amount) @@ -422,7 +422,7 @@ name = "bamboo tram" desc = "A tram with a bamboo framing." icon = 'icons/turf/walls/bamboo_wall.dmi' - icon_state = "wall-0" + icon_state = "bamboo_wall-0" base_icon_state = "wall" smoothing_flags = SMOOTH_BITMASK smoothing_groups = SMOOTH_GROUP_WALLS + SMOOTH_GROUP_BAMBOO_WALLS + SMOOTH_GROUP_CLOSED_TURFS @@ -464,7 +464,7 @@ /obj/structure/tram/spoiler name = "tram spoiler" icon = 'icons/obj/tram/tram_structure.dmi' - desc = "Nanotrasen bought the luxury package under the impression titanium spoilers make the tram go faster. They're just for looks, or potentially stabbing anybody who gets in the way." + desc = "Symphionia bought the luxury package under the impression titanium spoilers make the tram go faster. They're just for looks, or potentially stabbing anybody who gets in the way." icon_state = "tram-spoiler-retracted" max_integrity = 400 obj_flags = CAN_BE_HIT @@ -596,7 +596,7 @@ deploy_spoiler() update_appearance() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS to_chat(user, span_notice("You begin repairing [src]...")) if(!tool.use_tool(src, user, 4 SECONDS, volume = 50)) @@ -604,7 +604,7 @@ atom_integrity = max_integrity to_chat(user, span_notice("You repair [src].")) update_appearance() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/tram/spoiler/update_overlays() . = ..() diff --git a/code/modules/transport/transport_module.dm b/code/modules/transport/transport_module.dm index 56aa52beebc90f..7a7facea1b3d21 100644 --- a/code/modules/transport/transport_module.dm +++ b/code/modules/transport/transport_module.dm @@ -424,6 +424,7 @@ head.dismember() victim_living.regenerate_icons() add_overlay(mutable_appearance(icon, "blood_overlay")) + register_collision(points = 3) if(FALSE) log_combat(src, victim_living, "collided with") @@ -452,17 +453,20 @@ victim_living.throw_at(throw_target, 200 * collision_lethality, 4 * collision_lethality, callback = land_slam) //increment the hit counters - if(ismob(victim_living) && victim_living.client) - if(istype(transport_controller_datum, /datum/transport_controller/linear/tram)) - SSpersistence.tram_hits_this_round++ - SSblackbox.record_feedback("amount", "tram_collision", 1) - var/datum/transport_controller/linear/tram/tram_controller = transport_controller_datum - tram_controller.register_collision() + if(ismob(victim_living) && victim_living.client && istype(transport_controller_datum, /datum/transport_controller/linear/tram)) + register_collision(points = 1) unset_movement_registrations(exited_locs) group_move(things_to_move, travel_direction) set_movement_registrations(entering_locs) +/obj/structure/transport/linear/proc/register_collision(points = 1) + SSpersistence.tram_hits_this_round += points + SSblackbox.record_feedback("amount", "tram_collision", points) + var/datum/transport_controller/linear/tram/tram_controller = transport_controller_datum + ASSERT(istype(tram_controller)) + tram_controller.register_collision(points) + ///move the movers list of movables on our tile to destination if we successfully move there first. ///this is like calling forceMove() on everything in movers and ourselves, except nothing in movers ///has destination.Entered() and origin.Exited() called on them, as only our movement can be perceived. diff --git a/code/modules/tutorials/_tutorial.dm b/code/modules/tutorials/_tutorial.dm index 3baa9ad148b7dc..7819a9e2b85ac2 100644 --- a/code/modules/tutorials/_tutorial.dm +++ b/code/modules/tutorials/_tutorial.dm @@ -16,7 +16,7 @@ RegisterSignal(user, COMSIG_QDELETING, PROC_REF(destroy_self)) RegisterSignal(user.client, COMSIG_QDELETING, PROC_REF(destroy_self)) -/datum/tutorial/Destroy(force, ...) +/datum/tutorial/Destroy(force) user.client?.screen -= instruction_screen QDEL_NULL(instruction_screen) @@ -163,7 +163,7 @@ ASSERT(ispath(tutorial_type, /datum/tutorial)) src.tutorial_type = tutorial_type -/datum/tutorial_manager/Destroy(force, ...) +/datum/tutorial_manager/Destroy(force) if (!force) stack_trace("Something is trying to destroy [type], which is a singleton") return QDEL_HINT_LETMELIVE diff --git a/code/modules/tutorials/tutorials/drop.dm b/code/modules/tutorials/tutorials/drop.dm index de692edab433d4..06980b28848dd9 100644 --- a/code/modules/tutorials/tutorials/drop.dm +++ b/code/modules/tutorials/tutorials/drop.dm @@ -12,7 +12,7 @@ var/atom/movable/screen/drop_preview var/obj/last_held_item -/datum/tutorial/drop/Destroy(force, ...) +/datum/tutorial/drop/Destroy(force) last_held_item = null user.client?.screen -= drop_preview QDEL_NULL(drop_preview) diff --git a/code/modules/tutorials/tutorials/switch_hands.dm b/code/modules/tutorials/tutorials/switch_hands.dm index bf27a9e9d83aa6..f1bcbbb3b71178 100644 --- a/code/modules/tutorials/tutorials/switch_hands.dm +++ b/code/modules/tutorials/tutorials/switch_hands.dm @@ -19,7 +19,7 @@ hand_to_watch = (user.active_hand_index % user.held_items.len) + 1 -/datum/tutorial/switch_hands/Destroy(force, ...) +/datum/tutorial/switch_hands/Destroy(force) user.client?.screen -= hand_preview QDEL_NULL(hand_preview) diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index 914f902baf2944..a97246f908ea43 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -109,6 +109,7 @@ #include "card_mismatch.dm" #include "cardboard_cutouts.dm" #include "chain_pull_through_space.dm" +#include "changeling.dm" #include "chat_filter.dm" #include "circuit_component_category.dm" #include "client_colours.dm" @@ -168,6 +169,7 @@ #include "load_map_security.dm" #include "lungs.dm" #include "machine_disassembly.dm" +#include "mafia.dm" #include "map_landmarks.dm" #include "mapload_space_verification.dm" #include "mapping.dm" @@ -193,6 +195,7 @@ #include "objectives.dm" #include "operating_table.dm" #include "orderable_items.dm" +#include "organ_bodypart_shuffle.dm" #include "organ_set_bonus.dm" #include "organs.dm" #include "outfit_sanity.dm" @@ -221,6 +224,7 @@ #include "screenshot_antag_icons.dm" #include "screenshot_basic.dm" #include "screenshot_dynamic_human_icons.dm" +#include "screenshot_high_luminosity_eyes.dm" #include "screenshot_humanoids.dm" #include "screenshot_husk.dm" #include "screenshot_saturnx.dm" @@ -254,6 +258,7 @@ #include "subsystem_init.dm" #include "suit_storage_icons.dm" #include "surgeries.dm" +#include "tail_wag.dm" #include "teleporters.dm" #include "tgui_create_message.dm" #include "timer_sanity.dm" @@ -269,10 +274,11 @@ #include "weird_food.dm" #include "wizard_loadout.dm" #include "worn_icons.dm" -// SKYRAT EDIT START -#include "~skyrat\automapper.dm" -#include "~skyrat\opposing_force.dm" -// SKYRAT EDIT END +// NOVA EDIT START +#include "~nova\automapper.dm" +#include "~nova\loadout_dupes.dm" +#include "~nova\opposing_force.dm" +// NOVA EDIT END // 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" diff --git a/code/modules/unit_tests/barsigns.dm b/code/modules/unit_tests/barsigns.dm index 7058dd5346dc98..7bed383753f0fe 100644 --- a/code/modules/unit_tests/barsigns.dm +++ b/code/modules/unit_tests/barsigns.dm @@ -2,28 +2,40 @@ * Test if icon states for each datum actually exist in the DMI. */ /datum/unit_test/barsigns_icon + var/list/blacklisted_sign_types = list(/datum/barsign/skyrat, /datum/barsign/skyrat/large) // NOVA EDIT ADDITION - Modular barsigns /datum/unit_test/barsigns_icon/Run() var/obj/machinery/barsign_type = /obj/machinery/barsign var/icon/barsign_icon = initial(barsign_type.icon) var/list/barsign_icon_states = icon_states(barsign_icon) + barsign_icon_states += icon_states(SKYRAT_BARSIGN_FILE) // NOVA EDIT ADDITION - Need to check modular barsigns + barsign_icon_states += icon_states(SKYRAT_LARGE_BARSIGN_FILE) // NOVA EDIT ADDITION - Need to check modular barsigns // Check every datum real bar sign for(var/sign_type in (subtypesof(/datum/barsign) - /datum/barsign/hiddensigns)) + // NOVA EDIT ADDITION BEGIN - MODULAR BARSIGNS + if(sign_type in blacklisted_sign_types) + continue + // NOVA EDIT ADDITION END var/datum/barsign/sign = new sign_type() - if(!(sign.icon in barsign_icon_states)) + if(!(sign.icon_state in barsign_icon_states)) TEST_FAIL("Icon state for [sign_type] does not exist in [barsign_icon].") /** * Check that bar signs have a name and desc, and that the name is unique. */ /datum/unit_test/barsigns_name + var/list/blacklisted_sign_types = list(/datum/barsign/skyrat, /datum/barsign/skyrat/large) // NOVA EDIT ADDITION - Modular barsigns /datum/unit_test/barsigns_name/Run() var/list/existing_names = list() - for(var/sign_type in subtypesof(/datum/barsign) - /datum/barsign/hiddensigns) + for(var/sign_type in (subtypesof(/datum/barsign) - /datum/barsign/hiddensigns)) + // NOVA EDIT ADDITION BEGIN - MODULAR BARSIGNS + if(sign_type in blacklisted_sign_types) + continue + // NOVA EDIT ADDITION END var/datum/barsign/sign = new sign_type() if(!sign.name) @@ -35,3 +47,24 @@ TEST_FAIL("[sign_type] does not have a unique name.") existing_names += sign.name + +/** + * Test that an emped barsign displays correctly + */ +/datum/unit_test/barsigns_emp + +/datum/unit_test/barsigns_emp/Run() + var/obj/machinery/barsign/testing_sign = allocate(/obj/machinery/barsign) + var/datum/barsign/hiddensigns/empbarsign/emp_bar_sign = /datum/barsign/hiddensigns/empbarsign + + testing_sign.emp_act(EMP_HEAVY) + + // make sure we get the correct chosen_sign set + if(!istype(testing_sign.chosen_sign, emp_bar_sign)) + TEST_FAIL("[testing_sign] got EMPed but did not get its chosen_sign set correctly.") + + // make sure the sign's icon_state actually got set + var/expected_icon_state = initial(emp_bar_sign.icon_state) + if(testing_sign.icon_state != expected_icon_state) + TEST_FAIL("[testing_sign]'s icon_state was [testing_sign.icon_state] when it should have been [expected_icon_state].") + diff --git a/code/modules/unit_tests/baseturfs.dm b/code/modules/unit_tests/baseturfs.dm index 2ac016f38b9a5c..3150aac342f9c1 100644 --- a/code/modules/unit_tests/baseturfs.dm +++ b/code/modules/unit_tests/baseturfs.dm @@ -34,7 +34,7 @@ // Do this instead of just ChangeTurf to guarantee that baseturfs is completely default on-init behavior RESET_TO_EXPECTED(run_loc_floor_bottom_left) - run_loc_floor_bottom_left.PlaceOnTop(/turf/closed/wall/rock) + run_loc_floor_bottom_left.place_on_top(/turf/closed/wall/rock) TEST_ASSERT_EQUAL(run_loc_floor_bottom_left.type, /turf/closed/wall/rock, "Rock wall should've been placed on top") run_loc_floor_bottom_left.ScrapeAway() @@ -53,7 +53,7 @@ // Do this instead of just ChangeTurf to guarantee that baseturfs is completely default on-init behavior RESET_TO_EXPECTED(run_loc_floor_bottom_left) - run_loc_floor_bottom_left.PlaceOnBottom(fake_turf_type = /turf/closed/wall/rock) + run_loc_floor_bottom_left.place_on_bottom(/turf/closed/wall/rock) TEST_ASSERT_EQUAL(run_loc_floor_bottom_left.type, EXPECTED_FLOOR_TYPE, "PlaceOnBottom shouldn't have changed turf") run_loc_floor_bottom_left.ScrapeAway() diff --git a/code/modules/unit_tests/cardboard_cutouts.dm b/code/modules/unit_tests/cardboard_cutouts.dm index f706f8c95b6961..ce7066de1ca957 100644 --- a/code/modules/unit_tests/cardboard_cutouts.dm +++ b/code/modules/unit_tests/cardboard_cutouts.dm @@ -11,11 +11,9 @@ nukie_cutout.push_over() test_screenshot("nukie_cutout_pushed", getFlatIcon(nukie_cutout)) -#if DM_VERSION >= 515 // This is the only reason we're testing xenomorphs. // Making a custom subtype with direct_icon is hacky. ASSERT(!isnull(/datum/cardboard_cutout/xenomorph_maid::direct_icon)) -#endif var/obj/item/cardboard_cutout/xenomorph/xenomorph_cutout = new test_screenshot("xenomorph_cutout", getFlatIcon(xenomorph_cutout)) diff --git a/code/modules/unit_tests/changeling.dm b/code/modules/unit_tests/changeling.dm new file mode 100644 index 00000000000000..b209e34aebbc5a --- /dev/null +++ b/code/modules/unit_tests/changeling.dm @@ -0,0 +1,99 @@ +/// Tests transformation sting goes back and forth correctly +/datum/unit_test/transformation_sting + var/ling_name = "Is-A-Changeling" + var/base_victim_name + var/last_frame = 1 + var/icon/final_icon + +/datum/unit_test/transformation_sting/Run() + var/mob/living/carbon/human/ling = setup_ling() + var/mob/living/carbon/human/victim = setup_victim() + var/datum/antagonist/changeling/ling_datum = ling.mind.has_antag_datum(/datum/antagonist/changeling) + + // Get the ability we're testing + ling_datum.give_power(/datum/action/changeling/sting/transformation) // NOVA EDIT CHANGE - Transformation sting not purchasable here - ORIGINAL : ling_datum.purchase_power(/datum/action/changeling/sting/transformation) + var/datum/action/changeling/sting/transformation/sting_action = locate() in ling.actions + sting_action.selected_dna = ling_datum.current_profile + sting_action.sting_duration = 0.5 SECONDS // just makes sure everything settles. + + // Check that they look different before stinging + add_to_screenshot(ling, victim, both_species = TRUE) + + // Do the sting, make the transformation + sting_action.sting_action(ling, victim) + // Check their name and species align + TEST_ASSERT(victim.has_status_effect(/datum/status_effect/temporary_transformation), "Victim did not get temporary transformation status effect on being transformation stung.") + TEST_ASSERT_EQUAL(victim.real_name, ling_name, "Victim real name did not change on being transformation stung.") + TEST_ASSERT_EQUAL(victim.name, ling_name, "Victim name did not change on being transformation stung.") + TEST_ASSERT_EQUAL(victim.dna.species.type, ling.dna.species.type, "Victim species did not change on being transformation stung.") + TEST_ASSERT_EQUAL(victim.dna.features["mcolor"], ling.dna.features["mcolor"], "Victim mcolor did not change on being transformation stung.") + // Check they actually look the same + add_to_screenshot(ling, victim) + + // Make sure we give it enough time such that the status effect process ticks over and finishes + sleep(sting_action.sting_duration + 0.5 SECONDS) + + // Check their name and species reset correctly + TEST_ASSERT_EQUAL(victim.name, base_victim_name, "Victim name did not change back after transformation sting expired.") + TEST_ASSERT_EQUAL(victim.real_name, base_victim_name, "Victim real name did not change back after transformation sting expired.") + TEST_ASSERT_NOTEQUAL(victim.dna.species.type, ling.dna.species.type, "Victim species did not change back after transformation sting expired.") + TEST_ASSERT_NOTEQUAL(victim.dna.features["mcolor"], ling.dna.features["mcolor"], "Victim mcolor did not reset after transformation sting expired.") + // Check they actually look different again + add_to_screenshot(ling, victim, both_species = TRUE) + + test_screenshot("appearances", final_icon) + +/// Adds both mobs to the screenshot test, if both_species is TRUE, it also adds the victim in lizard form +/datum/unit_test/transformation_sting/proc/add_to_screenshot(mob/living/carbon/human/ling, mob/living/carbon/human/victim, both_species = FALSE) + if(isnull(final_icon)) + final_icon = icon('icons/effects/effects.dmi', "nothing") + + // If we have a lot of dna features with a lot of parts (icons) + // This'll eventually runtime into a bad icon operation + // So we're recaching the icons here to prevent it from failing + final_icon = icon(final_icon) + final_icon.Insert(getFlatIcon(ling, no_anim = TRUE), dir = SOUTH, frame = last_frame) + final_icon.Insert(getFlatIcon(victim, no_anim = TRUE), dir = NORTH, frame = last_frame) + + if(both_species) + var/prior_species = victim.dna.species.type + victim.set_species(/datum/species/lizard) + final_icon.Insert(getFlatIcon(victim, no_anim = TRUE), dir = EAST, frame = last_frame) + victim.set_species(prior_species) + + last_frame += 1 + +/datum/unit_test/transformation_sting/proc/setup_victim() + var/mob/living/carbon/human/victim = allocate(/mob/living/carbon/human/consistent) + base_victim_name = victim.real_name + victim.mind_initialize() + return victim + +/datum/unit_test/transformation_sting/proc/setup_ling() + var/mob/living/carbon/human/ling = allocate(/mob/living/carbon/human/consistent) + // Because we use two consistent humans, we need to change some of the features to know they're actually updating to new values. + // The more DNA features and random things we change, the more likely we are to catch something not updating correctly. + // Yeah guess who/what this is, I dare you. + ling.dna.features["mcolor"] = "#886600" + ling.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Smooth", MUTANT_INDEX_COLOR_LIST = list("#886600", "#886600", "#886600")) // NOVA EDIT CHANGE - ORIGINAL: ling.dna.features["tail_lizard"] = "Smooth" + ling.dna.mutant_bodyparts["snout"] = list(MUTANT_INDEX_NAME = "Sharp + Light", MUTANT_INDEX_COLOR_LIST = list("#886600", "#886600", "#886600")) // NOVA EDIT CHANGE - ORIGINAL: ling.dna.features["snout"] = "Sharp + Light" + ling.dna.mutant_bodyparts["horns"] = list(MUTANT_INDEX_NAME = "Curled", MUTANT_INDEX_COLOR_LIST = list("#292826", "#292826", "#8292826")) // NOVA EDIT CHANGE - ORIGINAL: ling.dna.features["horns"] = "Curved" + ling.dna.mutant_bodyparts["frills"] = list(MUTANT_INDEX_NAME = "Short", MUTANT_INDEX_COLOR_LIST = list("#886600", "#886600", "#886600")) // NOVA EDIT CHANGE - ORIGINAL: ling.dna.features["frills"] = "Sort" + ling.dna.mutant_bodyparts["spines"] = list(MUTANT_INDEX_NAME = "Long + Membrane", MUTANT_INDEX_COLOR_LIST = list("#886600", "#886600", "#886600")) // NOVA EDIT CHANGE - ORIGINAL: ling.dna.features["spines"] = "Long + Membrane" + ling.dna.body_markings["chest"] = list("Light Belly" = list("#886600", 0)) // NOVA EDIT CHANGE - ORIGINAL : ling.dna.features[body_markings] = list("Light Belly") + ling.dna.features["legs"] = DIGITIGRADE_LEGS + ling.eye_color_left = "#FFFFFF" + ling.eye_color_right = "#FFFFFF" + ling.dna.update_ui_block(DNA_EYE_COLOR_LEFT_BLOCK) + ling.dna.update_ui_block(DNA_EYE_COLOR_RIGHT_BLOCK) + ling.set_species(/datum/species/lizard) + + ling.real_name = ling_name + ling.dna.real_name = ling_name + ling.name = ling_name + ling.dna.initialize_dna(create_mutation_blocks = FALSE, randomize_features = FALSE) + + ling.mind_initialize() + ling.mind.add_antag_datum(/datum/antagonist/changeling) + + return ling diff --git a/code/modules/unit_tests/create_and_destroy.dm b/code/modules/unit_tests/create_and_destroy.dm index e0e763ebb85711..0c9498b19bf276 100644 --- a/code/modules/unit_tests/create_and_destroy.dm +++ b/code/modules/unit_tests/create_and_destroy.dm @@ -111,7 +111,7 @@ GLOBAL_VAR_INIT(running_create_and_destroy, FALSE) if(fails & BAD_INIT_NO_HINT) TEST_FAIL("[path] didn't return an Initialize hint") if(fails & BAD_INIT_QDEL_BEFORE) - TEST_FAIL("[path] qdel'd in New()") + TEST_FAIL("[path] qdel'd before we could call Initialize()") if(fails & BAD_INIT_SLEPT) TEST_FAIL("[path] slept during Initialize()") diff --git a/code/modules/unit_tests/emoting.dm b/code/modules/unit_tests/emoting.dm index 4eecaca015cd97..52a63cd70bf4f6 100644 --- a/code/modules/unit_tests/emoting.dm +++ b/code/modules/unit_tests/emoting.dm @@ -9,12 +9,12 @@ human.say("*shrug") TEST_ASSERT_EQUAL(emotes_used, 1, "Human did not shrug") - //SKYRAT EDIT REMOVAL BEGIN - Following check does not affect us + //NOVA EDIT REMOVAL BEGIN - Following check does not affect us /* human.say("*beep") TEST_ASSERT_EQUAL(emotes_used, 1, "Human beeped, when that should be restricted to silicons") */ - //SKYRAT EDIT REMOVAL END + //NOVA EDIT REMOVAL END human.setOxyLoss(140) @@ -23,12 +23,12 @@ human.say("*shrug") TEST_ASSERT_EQUAL(emotes_used, 1, "Human shrugged while unconscious") - //SKYRAT EDIT REMOVAL BEGIN - Following check fails due to global cooldown from the above test step (.8s) + //NOVA EDIT REMOVAL BEGIN - Following check fails due to global cooldown from the above test step (.8s) /* human.say("*deathgasp") TEST_ASSERT_EQUAL(emotes_used, 2, "Human could not deathgasp while unconscious") */ - //SKYRAT EDIT REMOVAL END + //NOVA EDIT REMOVAL END human.key = null diff --git a/code/modules/unit_tests/find_reference_sanity.dm b/code/modules/unit_tests/find_reference_sanity.dm index 8bd2a14dbf5f04..4bc6445f02434a 100644 --- a/code/modules/unit_tests/find_reference_sanity.dm +++ b/code/modules/unit_tests/find_reference_sanity.dm @@ -15,6 +15,8 @@ return ..() /atom/movable/ref_test + // Gotta make sure we do a full check + references_to_clear = INFINITY var/atom/movable/ref_test/self_ref /atom/movable/ref_test/Destroy(force) @@ -27,12 +29,11 @@ SSgarbage.should_save_refs = TRUE //Sanity check - #if DM_VERSION >= 515 var/refcount = refcount(victim) TEST_ASSERT_EQUAL(refcount, 3, "Should be: test references: 0 + baseline references: 3 (victim var,loc,allocated list)") - #endif - victim.DoSearchVar(testbed, "Sanity Check", search_time = 1) //We increment search time to get around an optimization - TEST_ASSERT(!victim.found_refs.len, "The ref-tracking tool found a ref where none existed") + victim.DoSearchVar(testbed, "Sanity Check") //We increment search time to get around an optimization + + TEST_ASSERT(!LAZYLEN(victim.found_refs), "The ref-tracking tool found a ref where none existed") SSgarbage.should_save_refs = FALSE /datum/unit_test/find_reference_baseline/Run() @@ -45,15 +46,13 @@ testbed.test_list += victim testbed.test_assoc_list["baseline"] = victim - #if DM_VERSION >= 515 var/refcount = refcount(victim) TEST_ASSERT_EQUAL(refcount, 6, "Should be: test references: 3 + baseline references: 3 (victim var,loc,allocated list)") - #endif - victim.DoSearchVar(testbed, "First Run", search_time = 2) + victim.DoSearchVar(testbed, "First Run") - TEST_ASSERT(victim.found_refs["test"], "The ref-tracking tool failed to find a regular value") - TEST_ASSERT(victim.found_refs[testbed.test_list], "The ref-tracking tool failed to find a list entry") - TEST_ASSERT(victim.found_refs[testbed.test_assoc_list], "The ref-tracking tool failed to find an assoc list value") + TEST_ASSERT(LAZYACCESS(victim.found_refs, "test"), "The ref-tracking tool failed to find a regular value") + TEST_ASSERT(LAZYACCESS(victim.found_refs, testbed.test_list), "The ref-tracking tool failed to find a list entry") + TEST_ASSERT(LAZYACCESS(victim.found_refs, testbed.test_assoc_list), "The ref-tracking tool failed to find an assoc list value") SSgarbage.should_save_refs = FALSE /datum/unit_test/find_reference_exotic/Run() @@ -66,16 +65,14 @@ testbed.vis_contents += victim testbed.test_assoc_list[victim] = TRUE - #if DM_VERSION >= 515 var/refcount = refcount(victim) TEST_ASSERT_EQUAL(refcount, 6, "Should be: test references: 3 + baseline references: 3 (victim var,loc,allocated list)") - #endif - victim.DoSearchVar(testbed, "Second Run", search_time = 3) + victim.DoSearchVar(testbed, "Second Run") //This is another sanity check - TEST_ASSERT(!victim.found_refs[testbed.overlays], "The ref-tracking tool found an overlays entry? That shouldn't be possible") - TEST_ASSERT(victim.found_refs[testbed.vis_contents], "The ref-tracking tool failed to find a vis_contents entry") - TEST_ASSERT(victim.found_refs[testbed.test_assoc_list], "The ref-tracking tool failed to find an assoc list key") + TEST_ASSERT(!LAZYACCESS(victim.found_refs, testbed.overlays), "The ref-tracking tool found an overlays entry? That shouldn't be possible") + TEST_ASSERT(LAZYACCESS(victim.found_refs, testbed.vis_contents), "The ref-tracking tool failed to find a vis_contents entry") + TEST_ASSERT(LAZYACCESS(victim.found_refs, testbed.test_assoc_list), "The ref-tracking tool failed to find an assoc list key") SSgarbage.should_save_refs = FALSE /datum/unit_test/find_reference_esoteric/Run() @@ -90,15 +87,14 @@ var/list/to_find_assoc = list(victim) testbed.test_assoc_list["Nesting"] = to_find_assoc - #if DM_VERSION >= 515 var/refcount = refcount(victim) TEST_ASSERT_EQUAL(refcount, 6, "Should be: test references: 3 + baseline references: 3 (victim var,loc,allocated list)") - #endif - victim.DoSearchVar(victim, "Third Run Self", search_time = 4) - victim.DoSearchVar(testbed, "Third Run Testbed", search_time = 4) - TEST_ASSERT(victim.found_refs["self_ref"], "The ref-tracking tool failed to find a self reference") - TEST_ASSERT(victim.found_refs[to_find], "The ref-tracking tool failed to find a nested list entry") - TEST_ASSERT(victim.found_refs[to_find_assoc], "The ref-tracking tool failed to find a nested assoc list entry") + victim.DoSearchVar(victim, "Third Run Self") + victim.DoSearchVar(testbed, "Third Run Testbed") + + TEST_ASSERT(LAZYACCESS(victim.found_refs, "self_ref"), "The ref-tracking tool failed to find a self reference") + TEST_ASSERT(LAZYACCESS(victim.found_refs, to_find), "The ref-tracking tool failed to find a nested list entry") + TEST_ASSERT(LAZYACCESS(victim.found_refs, to_find_assoc), "The ref-tracking tool failed to find a nested assoc list entry") SSgarbage.should_save_refs = FALSE /datum/unit_test/find_reference_null_key_entry/Run() @@ -108,12 +104,11 @@ //Calm before the storm testbed.test_assoc_list = list(null = victim) - #if DM_VERSION >= 515 var/refcount = refcount(victim) TEST_ASSERT_EQUAL(refcount, 4, "Should be: test references: 1 + baseline references: 3 (victim var,loc,allocated list)") - #endif - victim.DoSearchVar(testbed, "Fourth Run", search_time = 5) - TEST_ASSERT(testbed.test_assoc_list, "The ref-tracking tool failed to find a null key'd assoc list entry") + victim.DoSearchVar(testbed, "Fourth Run") + + TEST_ASSERT(LAZYACCESS(victim.found_refs, testbed.test_assoc_list), "The ref-tracking tool failed to find a null key'd assoc list entry") /datum/unit_test/find_reference_assoc_investigation/Run() var/atom/movable/ref_test/victim = allocate(/atom/movable/ref_test) @@ -126,13 +121,12 @@ var/list/to_find_null_assoc_nested = list(victim) testbed.test_assoc_list[null] = to_find_null_assoc_nested - #if DM_VERSION >= 515 var/refcount = refcount(victim) TEST_ASSERT_EQUAL(refcount, 5, "Should be: test references: 2 + baseline references: 3 (victim var,loc,allocated list)") - #endif - victim.DoSearchVar(testbed, "Fifth Run", search_time = 6) - TEST_ASSERT(victim.found_refs[to_find_in_key], "The ref-tracking tool failed to find a nested assoc list key") - TEST_ASSERT(victim.found_refs[to_find_null_assoc_nested], "The ref-tracking tool failed to find a null key'd nested assoc list entry") + victim.DoSearchVar(testbed, "Fifth Run") + + TEST_ASSERT(LAZYACCESS(victim.found_refs, to_find_in_key), "The ref-tracking tool failed to find a nested assoc list key") + TEST_ASSERT(LAZYACCESS(victim.found_refs, to_find_null_assoc_nested), "The ref-tracking tool failed to find a null key'd nested assoc list entry") SSgarbage.should_save_refs = FALSE /datum/unit_test/find_reference_static_investigation/Run() @@ -150,11 +144,9 @@ for(var/key in global.vars) global_vars[key] = global.vars[key] - #if DM_VERSION >= 515 var/refcount = refcount(victim) TEST_ASSERT_EQUAL(refcount, 5, "Should be: test references: 2 + baseline references: 3 (victim var,loc,allocated list)") - #endif - victim.DoSearchVar(global_vars, "Sixth Run", search_time = 7) + victim.DoSearchVar(global_vars, "Sixth Run") - TEST_ASSERT(victim.found_refs[global_vars], "The ref-tracking tool failed to find a natively global variable") + TEST_ASSERT(LAZYACCESS(victim.found_refs, global_vars), "The ref-tracking tool failed to find a natively global variable") SSgarbage.should_save_refs = FALSE diff --git a/code/modules/unit_tests/full_heal.dm b/code/modules/unit_tests/full_heal.dm index 9289abba9543a9..f5d247d7a10e65 100644 --- a/code/modules/unit_tests/full_heal.dm +++ b/code/modules/unit_tests/full_heal.dm @@ -43,7 +43,7 @@ /datum/unit_test/full_heal_damage_types/Run() var/mob/living/carbon/human/dummy = allocate(/mob/living/carbon/human/consistent) - dummy.apply_damages(brute = 10, burn = 10, tox = 10, oxy = 10, clone = 10, stamina = 10) + dummy.apply_damages(brute = 10, burn = 10, tox = 10, oxy = 10, stamina = 10) dummy.fully_heal(HEAL_DAMAGE) if(dummy.getBruteLoss()) @@ -54,7 +54,5 @@ TEST_FAIL("The dummy still had toxins damage after a fully heal!") if(dummy.getOxyLoss()) TEST_FAIL("The dummy still had oxy damage after a fully heal!") - if(dummy.getCloneLoss()) - TEST_FAIL("The dummy still had clone damage after a fully heal!") if(dummy.getStaminaLoss()) TEST_FAIL("The dummy still had stamina damage after a fully heal!") diff --git a/code/modules/unit_tests/hallucination_icons.dm b/code/modules/unit_tests/hallucination_icons.dm index 6477e94714ca6b..c9f9cf8237c04d 100644 --- a/code/modules/unit_tests/hallucination_icons.dm +++ b/code/modules/unit_tests/hallucination_icons.dm @@ -19,7 +19,7 @@ // Test preset delusion hallucinations for invalid image setups for(var/datum/hallucination/delusion/preset/hallucination as anything in subtypesof(/datum/hallucination/delusion/preset)) - if(initial(hallucination.dynamic_icon)) + if(initial(hallucination.dynamic_delusion)) continue var/icon = initial(hallucination.delusion_icon_file) var/icon_state = initial(hallucination.delusion_icon_state) diff --git a/code/modules/unit_tests/heretic_rituals.dm b/code/modules/unit_tests/heretic_rituals.dm index 4ac5bce8d3d3a1..b55136cfacebe1 100644 --- a/code/modules/unit_tests/heretic_rituals.dm +++ b/code/modules/unit_tests/heretic_rituals.dm @@ -66,7 +66,10 @@ if(islist(ritual_item_path)) ritual_item_path = pick(ritual_item_path) for(var/i in 1 to amount_to_create) - created_atoms += new ritual_item_path(get_turf(our_heretic)) + var/obj/item/item = new ritual_item_path(get_turf(our_heretic)) + if(isitem(item)) + item.item_flags &= ~ABSTRACT + created_atoms += item // Now, we can ACTUALLY run the ritual. Let's do it. // Attempt to run the knowledge via the sacrifice rune. @@ -106,6 +109,10 @@ for(var/atom/thing as anything in nearby_atoms) if(!ismovable(thing)) continue + if(isitem(thing)) + var/obj/item/item = thing + if(item.item_flags & ABSTRACT) //bodyparts and stuff will get registered otherwise + continue // There are atoms around the rune still, and there shouldn't be. // All component atoms were consumed, and all resulting atoms were cleaned up. diff --git a/code/modules/unit_tests/human_through_recycler.dm b/code/modules/unit_tests/human_through_recycler.dm index 7d554d72690b2f..c51b9a0e30bed7 100644 --- a/code/modules/unit_tests/human_through_recycler.dm +++ b/code/modules/unit_tests/human_through_recycler.dm @@ -17,8 +17,13 @@ TEST_ASSERT_EQUAL(damage_incurred, chewer.crush_damage, "Assistant did not take the expected amount of brute damage ([chewer.crush_damage]) from the emagged recycler! Took ([damage_incurred]) instead.") TEST_ASSERT(chewer.bloody, "The emagged recycler did not become bloody after crushing the assistant!") + var/list/bad_contents = assistant.contents + for(var/obj/item/item in assistant.contents) + if(item.item_flags & ABSTRACT) + bad_contents -= item + // Now, let's test to see if all of their clothing got properly deleted. - TEST_ASSERT_EQUAL(length(assistant.contents), 0, "Assistant still has items in its contents after being put through an emagged recycler!") + TEST_ASSERT_EQUAL(length(bad_contents), 0, "Assistant still has items in its contents after being put through an emagged recycler!") // Consistent Assistants will always have the following: ID, PDA, backpack, a uniform, a headset, and a pair of shoes. If any of these are still present, then the recycler did not properly delete the assistant's clothing. // However, let's check for EVERYTHING just in case, because we don't want to miss anything. // This is just what we expect to be deleted. diff --git a/code/modules/unit_tests/inhands.dm b/code/modules/unit_tests/inhands.dm index 7edda7858f87c7..a10de4aed18f85 100644 --- a/code/modules/unit_tests/inhands.dm +++ b/code/modules/unit_tests/inhands.dm @@ -3,7 +3,7 @@ var/static/list/possible_icon_states = list() var/fallback_log_message var/unset_inhand_var_message - /// additional_inhands_location is for downstream modularity support. as an example, for skyrat's usage, set additional_inhands_location = "modular_skyrat/master_files/icons/mob/inhands/" + /// additional_inhands_location is for downstream modularity support. as an example, for skyrat's usage, set additional_inhands_location = "modular_nova/master_files/icons/mob/inhands/" /// Make sure this location is also present in tools/deploy.sh /// If you need additional paths ontop of this second one, you can add another generate_possible_icon_states_list("your/folder/path/inhands/") below the if(additional_inhands_location) block in Run(), and make sure to add that path to tools/deploy.sh as well. var/additional_inhands_location = null diff --git a/code/modules/unit_tests/ling_decap.dm b/code/modules/unit_tests/ling_decap.dm index 0c964f9a0432cb..4c8c7e4e031247 100644 --- a/code/modules/unit_tests/ling_decap.dm +++ b/code/modules/unit_tests/ling_decap.dm @@ -9,11 +9,12 @@ var/obj/item/bodypart/head/noggin = ling.get_bodypart(BODY_ZONE_HEAD) noggin.dismember() TEST_ASSERT_NULL(ling.get_bodypart(BODY_ZONE_HEAD), "Changeling failed to be decapitated.") - TEST_ASSERT_NULL(noggin.brainmob.mind, "Changeling's mind was moved to their head after decapitation, but it should have remained in their body.") + var/obj/item/organ/internal/brain/brain = locate(/obj/item/organ/internal/brain) in noggin + TEST_ASSERT_NULL(brain.brainmob.mind, "Changeling's mind was moved to their brain after decapitation, but it should have remained in their body.") - var/obj/item/organ/internal/brain/oldbrain = noggin.brain + var/obj/item/organ/internal/brain/oldbrain = locate(/obj/item/organ/internal/brain) in noggin noggin.drop_organs() - TEST_ASSERT_NULL(noggin.brain, "Changeling's head failed to drop its brain.") + TEST_ASSERT_NULL(locate(/obj/item/organ/internal/brain) in noggin, "Changeling's head failed to drop its brain.") TEST_ASSERT_NULL(oldbrain.brainmob.mind, "Changeling's mind was moved to their brain after decapitation and organ dropping, but it should have remained in their body.") TEST_ASSERT_EQUAL(ling.stat, CONSCIOUS, "Changeling was not conscious after losing their head.") @@ -33,9 +34,10 @@ var/obj/item/bodypart/head/noggin = normal_guy.get_bodypart(BODY_ZONE_HEAD) noggin.dismember() - TEST_ASSERT_EQUAL(noggin.brainmob.mind, my_guys_mind, "Dummy's mind was not moved to their head after decapitation.") + var/obj/item/organ/internal/brain/brain = locate(/obj/item/organ/internal/brain) in noggin + TEST_ASSERT_EQUAL(brain.brainmob.mind, my_guys_mind, "Dummy's mind was not moved to their brain after decapitation.") - var/obj/item/organ/internal/brain/oldbrain = noggin.brain + var/obj/item/organ/internal/brain/oldbrain = locate(/obj/item/organ/internal/brain) in noggin noggin.drop_organs() TEST_ASSERT_EQUAL(oldbrain.brainmob.mind, my_guys_mind, "Dummy's mind was not moved to their brain after being removed from their head.") diff --git a/code/modules/unit_tests/mafia.dm b/code/modules/unit_tests/mafia.dm new file mode 100644 index 00000000000000..85fa50842932b5 --- /dev/null +++ b/code/modules/unit_tests/mafia.dm @@ -0,0 +1,48 @@ +///Checks if a Mafia game with a Modular Computer and a Ghost will run with 'basic_setup', which is the default +///way the game is ran, without admin-intervention. +///The game should immediately end in a Town Victory due to lack of evils, but we can verify that both the PDA and the ghost +///successfully managed to get into the round. +/datum/unit_test/mafia + ///Boolean on whether the Mafia game started or not. Will Fail if it hasn't. + var/mafia_game_started = FALSE + +/datum/unit_test/mafia/Run() + RegisterSignal(SSdcs, COMSIG_MAFIA_GAME_START, PROC_REF(on_mafia_start)) + var/datum/mafia_controller/controller = GLOB.mafia_game || new() + + TEST_ASSERT(controller, "No Mafia game was found, nor was it able to be created properly.") + + //spawn human and give them a laptop. + var/mob/living/carbon/human/consistent/living_player = allocate(/mob/living/carbon/human/consistent) + var/obj/item/modular_computer/laptop/preset/mafia/modpc_player = allocate(/obj/item/modular_computer/laptop/preset/mafia) + living_player.put_in_active_hand(modpc_player, TRUE) + + //make the laptop run Mafia app. + var/datum/computer_file/program/mafia/mafia_program = locate() in modpc_player.stored_files + TEST_ASSERT(mafia_program, "Mafia program was unable to be found on [modpc_player].") + modpc_player.active_program = mafia_program + + //Spawn a ghost and make them eligible to use the Mafia UI (just to be safe). + var/mob/dead/observer/ghost_player = allocate(/mob/dead/observer) + var/datum/client_interface/mock_client = new() + ghost_player.mock_client = mock_client + mock_client.mob = ghost_player + ADD_TRAIT(ghost_player, TRAIT_PRESERVE_UI_WITHOUT_CLIENT, TRAIT_SOURCE_UNIT_TESTS) + + //First make the human sign up for Mafia, then the ghost, then we'll auto-start it. + controller.signup_mafia(living_player, modpc = modpc_player) + controller.signup_mafia(ghost_player, ghost_client = mock_client) + + controller.basic_setup() + + TEST_ASSERT(mafia_game_started, "Mafia game did not start despite basic_setup being called.") + TEST_ASSERT_NOTNULL(controller.player_role_lookup[modpc_player], "The Modular Computer was unable to join a game of Mafia.") + TEST_ASSERT_NOTNULL(controller.player_role_lookup[mock_client.ckey], "The Mock client wasn't put into a game of Mafia.") + + mock_client.mob = null + + qdel(controller) + +/datum/unit_test/mafia/proc/on_mafia_start(datum/controller/subsystem/processing/dcs/source, datum/mafia_controller/game) + SIGNAL_HANDLER + mafia_game_started = TRUE diff --git a/code/modules/unit_tests/mapload_space_verification.dm b/code/modules/unit_tests/mapload_space_verification.dm index 80772b8a633cd9..da35af1d1761ff 100644 --- a/code/modules/unit_tests/mapload_space_verification.dm +++ b/code/modules/unit_tests/mapload_space_verification.dm @@ -31,7 +31,7 @@ if(!isspaceturf(iterated_turf) || is_type_in_typecache(turf_area, excluded_area_typecache)) continue // Alright, so let's assume we have intended behavior. If something yorks, we'll get a bare `/area` (maploader?) or a mapper is doing something they shouldn't be doing. // We need turf_area.type for the error message because we have fifteen million ruin areas named "Unexplored Location" and it's completely unhelpful here. - TEST_FAIL("Space turf found in non-allowed area ([turf_area.type]) at [AREACOORD(iterated_turf)]! Please ensure that all space turfs are in an /area/space!") + TEST_FAIL("Space turf [iterated_turf.type] found in non-allowed area ([turf_area.type]) at [AREACOORD(iterated_turf)]! Please ensure that all space turfs are in an /area/space!") /// Verifies that there are ZERO space turfs on a valid planetary station. We NEVER want space turfs here, so we do not check for /area/space here since something completely undesirable is happening. diff --git a/code/modules/unit_tests/mecha_damage.dm b/code/modules/unit_tests/mecha_damage.dm index 55081e9365c9fd..19735b7bf9baf9 100644 --- a/code/modules/unit_tests/mecha_damage.dm +++ b/code/modules/unit_tests/mecha_damage.dm @@ -30,7 +30,7 @@ // Get a sample laser weapon. // The captain's laser gun here is chosen primarily because it deals more damage than normal lasers. var/obj/item/gun/energy/laser/dummy_laser = allocate(/obj/item/gun/energy/laser/captain) - qdel(dummy_laser.GetComponent(/datum/component/gun_safety)) // SKYRAT EDIT - Safeties on guns make them impossible to shoot :) + qdel(dummy_laser.GetComponent(/datum/component/gun_safety)) // NOVA EDIT - Safeties on guns make them impossible to shoot :) var/obj/item/ammo_casing/laser_ammo = dummy_laser.ammo_type[1] var/obj/projectile/beam/laser_fired = initial(laser_ammo.projectile_type) var/expected_laser_damage = round(dummy_laser.projectile_damage_multiplier * initial(laser_fired.damage) * (1 - expected_laser_armor / 100), DAMAGE_PRECISION) @@ -38,7 +38,7 @@ // Get a sample ballistic weapon. // The syndicate .357 here is chosen because it does a lot of damage. var/obj/item/gun/ballistic/dummy_gun = allocate(/obj/item/gun/ballistic/revolver) - qdel(dummy_gun.GetComponent(/datum/component/gun_safety)) // SKYRAT EDIT - Safeties on guns make them impossible to shoot :) + qdel(dummy_gun.GetComponent(/datum/component/gun_safety)) // NOVA EDIT - Safeties on guns make them impossible to shoot :) var/obj/item/ammo_casing/ballistic_ammo = dummy_gun.magazine.ammo_type var/obj/projectile/bullet_fired = initial(ballistic_ammo.projectile_type) var/expected_bullet_damage = round(dummy_gun.projectile_damage_multiplier * initial(bullet_fired.damage) * (1 - expected_bullet_armor / 100), DAMAGE_PRECISION) @@ -85,4 +85,4 @@ TEST_ASSERT(post_hit_health < pre_integrity, "[checking] was [hit_by_phrase], but didn't take any damage.") var/damage_taken = round(pre_integrity - post_hit_health, DAMAGE_PRECISION) - TEST_ASSERT_EQUAL(damage_taken, expected_damage, "[checking] didn't take the expected amount of damage when [hit_by_phrase]. (Expected damage: [expected_damage], recieved damage: [damage_taken])") + TEST_ASSERT_EQUAL(damage_taken, expected_damage, "[checking] didn't take the expected amount of damage when [hit_by_phrase]. (Expected damage: [expected_damage], received damage: [damage_taken])") diff --git a/code/modules/unit_tests/mob_damage.dm b/code/modules/unit_tests/mob_damage.dm index 50046141a88b7f..c27bc31ffe0f27 100644 --- a/code/modules/unit_tests/mob_damage.dm +++ b/code/modules/unit_tests/mob_damage.dm @@ -28,9 +28,6 @@ // Testing whether or not TRAIT_TOXINLOVER and TRAIT_TOXIMMUNE are working as intended test_toxintraits(dummy) - // Testing whether or not TRAIT_NOCLONELOSS is working as intended - test_nocloneloss(dummy) - // Testing the proc ordered_healing() test_ordered_healing(dummy) @@ -100,9 +97,6 @@ if(included_types & TOXLOSS) TEST_ASSERT_EQUAL(testing_mob.getToxLoss(), amount, \ "[testing_mob] should have [amount] toxin damage, instead they have [testing_mob.getToxLoss()]!") - if(included_types & CLONELOSS) - TEST_ASSERT_EQUAL(testing_mob.getCloneLoss(), amount, \ - "[testing_mob] should have [amount] clone damage, instead they have [testing_mob.getCloneLoss()]!") if(included_types & BRUTELOSS) TEST_ASSERT_EQUAL(round(testing_mob.getBruteLoss(), 1), amount, \ "[testing_mob] should have [amount] brute damage, instead they have [testing_mob.getBruteLoss()]!") @@ -136,10 +130,6 @@ damage_returned = testing_mob.adjustToxLoss(amount, updating_health = FALSE, forced = forced, required_biotype = biotypes) TEST_ASSERT_EQUAL(damage_returned, expected, \ "adjustToxLoss() should have returned [expected], but returned [damage_returned] instead!") - if(included_types & CLONELOSS) - damage_returned = testing_mob.adjustCloneLoss(amount, updating_health = FALSE, forced = forced, required_biotype = biotypes) - TEST_ASSERT_EQUAL(damage_returned, expected, \ - "adjustCloneLoss() should have returned [expected], but returned [damage_returned] instead!") if(included_types & BRUTELOSS) damage_returned = round(testing_mob.adjustBruteLoss(amount, updating_health = FALSE, forced = forced, required_bodytype = bodytypes), 1) TEST_ASSERT_EQUAL(damage_returned, expected, \ @@ -177,10 +167,6 @@ damage_returned = testing_mob.setToxLoss(amount, updating_health = FALSE, forced = forced, required_biotype = biotypes) TEST_ASSERT_EQUAL(damage_returned, expected, \ "setToxLoss() should have returned [expected], but returned [damage_returned] instead!") - if(included_types & CLONELOSS) - damage_returned = testing_mob.setCloneLoss(amount, updating_health = FALSE, forced = forced, required_biotype = biotypes) - TEST_ASSERT_EQUAL(damage_returned, expected, \ - "setCloneLoss() should have returned [expected], but returned [damage_returned] instead!") if(included_types & BRUTELOSS) damage_returned = round(testing_mob.setBruteLoss(amount, updating_health = FALSE, forced = forced), 1) TEST_ASSERT_EQUAL(damage_returned, expected, \ @@ -331,15 +317,15 @@ dummy.set_species(/datum/species/plasmaman) // argumentless default: should default to required_biotype = ALL. The damage should be applied in that case. - if(!test_apply_damage(dummy, 1, included_types = TOXLOSS|CLONELOSS|STAMINALOSS)) + if(!test_apply_damage(dummy, 1, included_types = TOXLOSS|STAMINALOSS)) TEST_FAIL("ABOVE FAILURE: plasmaman did not take damage with biotypes = ALL") // If we specify MOB_ORGANIC, the damage should not get applied because plasmamen lack that biotype. - if(!test_apply_damage(dummy, 1, expected = 0, included_types = TOXLOSS|CLONELOSS|STAMINALOSS, biotypes = MOB_ORGANIC)) + if(!test_apply_damage(dummy, 1, expected = 0, included_types = TOXLOSS|STAMINALOSS, biotypes = MOB_ORGANIC)) TEST_FAIL("ABOVE FAILURE: plasmaman took damage with biotypes = MOB_ORGANIC") // Now if we specify MOB_MINERAL the damage should get applied. - if(!test_apply_damage(dummy, 1, included_types = TOXLOSS|CLONELOSS|STAMINALOSS, biotypes = MOB_MINERAL)) + if(!test_apply_damage(dummy, 1, included_types = TOXLOSS|STAMINALOSS, biotypes = MOB_MINERAL)) TEST_FAIL("ABOVE FAILURE: plasmaman did not take damage with biotypes = MOB_MINERAL") // Transform back to human @@ -347,15 +333,15 @@ // We have 2 damage presently. // Try to heal it; let's specify MOB_MINERAL, which should no longer work because we have changed back to a human. - if(!test_apply_damage(dummy, -2, expected = 0, included_types = TOXLOSS|CLONELOSS|STAMINALOSS, biotypes = MOB_MINERAL)) + if(!test_apply_damage(dummy, -2, expected = 0, included_types = TOXLOSS|STAMINALOSS, biotypes = MOB_MINERAL)) TEST_FAIL("ABOVE FAILURE: human took damage with biotypes = MOB_MINERAL") // Force heal some of the damage. When forced = TRUE the damage/healing gets applied no matter what. - if(!test_apply_damage(dummy, -1, included_types = TOXLOSS|CLONELOSS|STAMINALOSS, biotypes = MOB_MINERAL, forced = TRUE)) + if(!test_apply_damage(dummy, -1, included_types = TOXLOSS|STAMINALOSS, biotypes = MOB_MINERAL, forced = TRUE)) TEST_FAIL("ABOVE FAILURE: human did not get healed when biotypes = MOB_MINERAL and forced = TRUE") // Now heal the rest of it with the correct biotype. Make sure that this works. We should have 0 damage afterwards. - if(!test_apply_damage(dummy, -1, included_types = TOXLOSS|CLONELOSS|STAMINALOSS, biotypes = MOB_ORGANIC)) + if(!test_apply_damage(dummy, -1, included_types = TOXLOSS|STAMINALOSS, biotypes = MOB_ORGANIC)) TEST_FAIL("ABOVE FAILURE: human did not get healed with biotypes = MOB_ORGANIC") /// Testing oxyloss with the TRAIT_NOBREATH @@ -413,29 +399,6 @@ REMOVE_TRAIT(dummy, TRAIT_TOXINLOVER, TRAIT_SOURCE_UNIT_TESTS) REMOVE_TRAIT(dummy, TRAIT_TOXIMMUNE, TRAIT_SOURCE_UNIT_TESTS) -/// Testing cloneloss with TRAIT_NOCLONELOSS -/datum/unit_test/mob_damage/proc/test_nocloneloss(mob/living/carbon/human/consistent/dummy) - // Heal up, so that errors from the previous tests we won't cause this one to fail - dummy.fully_heal(HEAL_DAMAGE) - - // TRAIT_TRAIT_NOCLONELOSS is supposed to prevent cloneloss damage and healing. Let's make sure that's the case. - ADD_TRAIT(dummy, TRAIT_NOCLONELOSS, TRAIT_SOURCE_UNIT_TESTS) - // force some cloneloss here - dummy.setCloneLoss(2, updating_health = FALSE, forced = TRUE) - - // Try to take more cloneloss damage with TRAIT_NOCLONELOSS. It should not work. - if(!test_apply_damage(dummy, 2, expected = 0, amount_after = dummy.getCloneLoss(), included_types = CLONELOSS)) - TEST_FAIL("ABOVE FAILURE: failed test_nocloneloss! mob took cloneloss damage with TRAIT_NOCLONELOSS") - - // Healing the cloneloss should not work either, unless we force it - if(!test_apply_damage(dummy, -2, expected = 0, amount_after = dummy.getCloneLoss(), included_types = CLONELOSS)) - TEST_FAIL("ABOVE FAILURE: failed test_nocloneloss! mob healed cloneloss damage with TRAIT_NOCLONELOSS") - // so let's force it - if(!test_apply_damage(dummy, -2, expected = 2, amount_after = dummy.getCloneLoss()-2, included_types = CLONELOSS, forced = TRUE)) - TEST_FAIL("ABOVE FAILURE: failed test_nocloneloss! mob could not heal cloneloss damage with forced = TRUE and TRAIT_NOCLONELOSS") - - REMOVE_TRAIT(dummy, TRAIT_NOCLONELOSS, TRAIT_SOURCE_UNIT_TESTS) - /// Testing heal_ordered_damage() /datum/unit_test/mob_damage/proc/test_ordered_healing(mob/living/carbon/human/consistent/dummy) // Heal up, so that errors from the previous tests we won't cause this one to fail @@ -478,7 +441,7 @@ SSmobs.pause() var/mob/living/basic/mouse/gray/gusgus = allocate(/mob/living/basic/mouse/gray) // give gusgus a damage_coeff of 1 for this test - gusgus.damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 1, OXY = 1) + gusgus.damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 1, OXY = 1) // tank mouse gusgus.maxHealth = 200 @@ -492,19 +455,16 @@ * Arguments: * * testing_mob - the mob to check the damage of * * amount - the amount of damage to verify that the mob has - * * expected - the expected return value of the damage procs, if it differs from the default of (amount * 5) + * * expected - the expected return value of the damage procs, if it differs from the default of (amount * 4) * * included_types - Bitflag of damage types to check. */ /datum/unit_test/mob_damage/basic/verify_damage(mob/living/testing_mob, amount, expected, included_types = ALL) if(included_types & TOXLOSS) TEST_ASSERT_EQUAL(testing_mob.getToxLoss(), 0, \ "[testing_mob] should have [0] toxin damage, instead they have [testing_mob.getToxLoss()]!") - if(included_types & CLONELOSS) - TEST_ASSERT_EQUAL(testing_mob.getCloneLoss(), 0, \ - "[testing_mob] should have [0] clone damage, instead they have [testing_mob.getCloneLoss()]!") if(included_types & BRUTELOSS) - TEST_ASSERT_EQUAL(round(testing_mob.getBruteLoss(), 1), expected || amount * 5, \ - "[testing_mob] should have [expected || amount * 5] brute damage, instead they have [testing_mob.getBruteLoss()]!") + TEST_ASSERT_EQUAL(round(testing_mob.getBruteLoss(), 1), expected || amount * 4, \ + "[testing_mob] should have [expected || amount * 4] brute damage, instead they have [testing_mob.getBruteLoss()]!") if(included_types & FIRELOSS) TEST_ASSERT_EQUAL(round(testing_mob.getFireLoss(), 1), 0, \ "[testing_mob] should have [0] burn damage, instead they have [testing_mob.getFireLoss()]!") @@ -527,18 +487,18 @@ if(!test_apply_damage(gusgus, amount = -1)) TEST_FAIL("ABOVE FAILURE: failed test_sanity_simple! healing was not applied correctly") - // Give 2 damage of every time (translates to 10 brute, 2 staminaloss) + // Give 2 damage of every time (translates to 8 brute, 2 staminaloss) if(!test_apply_damage(gusgus, amount = 2)) TEST_FAIL("ABOVE FAILURE: failed test_sanity_simple! damage was not applied correctly") - // underhealing: heal 1 damage of every type (translates to 5 brute, 1 staminaloss) + // underhealing: heal 1 damage of every type (translates to 4 brute, 1 staminaloss) if(!test_apply_damage(gusgus, amount = -1)) TEST_FAIL("ABOVE FAILURE: failed test_sanity_simple! healing was not applied correctly") // overhealing - // heal 11 points of toxloss (should take care of all 5 brute damage remaining) - if(!apply_damage(gusgus, -11, expected = 5, included_types = TOXLOSS)) + // heal 11 points of toxloss (should take care of all 4 brute damage remaining) + if(!apply_damage(gusgus, -11, expected = 4, included_types = TOXLOSS)) TEST_FAIL("ABOVE FAILURE: failed test_sanity_simple! toxloss was not applied correctly") // heal the remaining point of staminaloss if(!apply_damage(gusgus, -11, expected = 1, included_types = STAMINALOSS)) diff --git a/code/modules/unit_tests/monkey_business.dm b/code/modules/unit_tests/monkey_business.dm index 20bfffe6a48216..80044a0486d982 100644 --- a/code/modules/unit_tests/monkey_business.dm +++ b/code/modules/unit_tests/monkey_business.dm @@ -14,7 +14,8 @@ /datum/unit_test/monkey_business/Run() for(var/monkey_id in 1 to length(GLOB.the_station_areas)) - var/mob/living/carbon/human/monkey = allocate(/mob/living/carbon/human/consistent, get_first_open_turf_in_area(GLOB.the_station_areas[monkey_id])) + var/area/monkey_zone = GLOB.areas_by_type[GLOB.the_station_areas[monkey_id]] + var/mob/living/carbon/human/monkey = allocate(/mob/living/carbon/human/consistent, get_first_open_turf_in_area(monkey_zone)) monkey.set_species(/datum/species/monkey) monkey.set_name("Monkey [monkey_id]") if(monkey_id % monkey_angry_nth == 0) // BLOOD FOR THE BLOOD GODS diff --git a/code/modules/unit_tests/organ_bodypart_shuffle.dm b/code/modules/unit_tests/organ_bodypart_shuffle.dm new file mode 100644 index 00000000000000..842dd1c6c13443 --- /dev/null +++ b/code/modules/unit_tests/organ_bodypart_shuffle.dm @@ -0,0 +1,34 @@ +/// Moves organs in and out of bodyparts, and moves the bodyparts around to see if someone didn't fuck up their movement +/datum/unit_test/organ_bodypart_shuffle + +/datum/unit_test/organ_bodypart_shuffle/Run() + var/mob/living/carbon/human/hollow_boy = allocate(/mob/living/carbon/human/consistent) + + // Test if organs are all properly updating when forcefully removed + var/list/removed_organs = list() + + for(var/obj/item/organ/organ as anything in hollow_boy.organs) + organ.moveToNullspace() + removed_organs += organ + + for(var/obj/item/organ/organ as anything in removed_organs) + TEST_ASSERT(!(organ in hollow_boy.organs), "Organ '[organ.name] remained inside human after forceMove into nullspace.") + TEST_ASSERT(organ.loc == null, "Organ '[organ.name] did not move to nullspace after being forced to.") + TEST_ASSERT(!(organ.owner), "Organ '[organ.name] kept reference to human after forceMove into nullspace.") + TEST_ASSERT(!(organ.bodypart_owner), "Organ '[organ.name] kept reference to bodypart after forceMove into nullspace.") + + for(var/obj/item/bodypart/bodypart as anything in hollow_boy.bodyparts) + bodypart = new bodypart.type() //fresh, duplice bodypart with no insides + for(var/obj/item/organ/organ as anything in removed_organs) + if(bodypart.body_zone != deprecise_zone(organ.zone)) + continue + organ.bodypart_insert(bodypart) // Put all the old organs back in + bodypart.replace_limb(hollow_boy) //so stick new bodyparts on them with their old organs + // Check if, after we put the old organs in a new limb, and after we put that new limb on the mob, if the organs came with + for(var/obj/item/organ/organ as anything in removed_organs) //technically readded organ now + if(bodypart.body_zone != deprecise_zone(organ.zone)) + continue + TEST_ASSERT(organ in hollow_boy.organs, "Organ '[organ.name] was put in an empty bodypart that replaced a humans, but the organ did not come with.") + + // Test if bodyparts are all properly updating when forcefully removed + hollow_boy = allocate(/mob/living/carbon/human/consistent) //freshly filled with wet insides diff --git a/code/modules/unit_tests/organ_set_bonus.dm b/code/modules/unit_tests/organ_set_bonus.dm index a5a31fc6bb4019..e89769fe7cfa62 100644 --- a/code/modules/unit_tests/organ_set_bonus.dm +++ b/code/modules/unit_tests/organ_set_bonus.dm @@ -25,13 +25,13 @@ for(var/datum/infuser_entry/infuser_entry as anything in GLOB.infuser_entries) var/output_organs = infuser_entry.output_organs var/mob/living/carbon/human/lab_rat = allocate(/mob/living/carbon/human/consistent) - lab_rat.dna.mutant_bodyparts["moth_antennae"] = list(MUTANT_INDEX_NAME = "Plain", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF"), MUTANT_INDEX_EMISSIVE_LIST = list(FALSE)) // SKYRAT EDIT - Customization + lab_rat.dna.mutant_bodyparts["moth_antennae"] = list(MUTANT_INDEX_NAME = "Plain", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF"), MUTANT_INDEX_EMISSIVE_LIST = list(FALSE)) // NOVA EDIT - Customization var/list/obj/item/organ/inserted_organs = list() // Attempt to insert entire list of mutant organs for the given infusion_entry. for(var/obj/item/organ/organ as anything in output_organs) organ = new organ() - TEST_ASSERT(organ.Insert(lab_rat, special = TRUE, drop_if_replaced = FALSE), "The organ `[organ.type]` for `[infuser_entry.type]` was not inserted in the mob when expected, Insert() returned falsy when TRUE was expected.") + TEST_ASSERT(organ.Insert(lab_rat, special = TRUE, movement_flags = DELETE_IF_REPLACED), "The organ `[organ.type]` for `[infuser_entry.type]` was not inserted in the mob when expected, Insert() returned falsy when TRUE was expected.") inserted_organs += organ // Search for added Status Effect. diff --git a/code/modules/unit_tests/organs.dm b/code/modules/unit_tests/organs.dm index 4ba51e0870c00a..1da3808ba39083 100644 --- a/code/modules/unit_tests/organs.dm +++ b/code/modules/unit_tests/organs.dm @@ -25,14 +25,10 @@ )) /datum/unit_test/organ_sanity/Run() - for(var/obj/item/organ/organ_type as anything in subtypesof(/obj/item/organ)) + for(var/obj/item/organ/organ_type as anything in subtypesof(/obj/item/organ) - test_organ_blacklist) organ_test_insert(organ_type) /datum/unit_test/organ_sanity/proc/organ_test_insert(obj/item/organ/organ_type) - // Skip prototypes. - if(test_organ_blacklist[organ_type]) - return - // Appropriate mob (Human) which will receive organ. var/mob/living/carbon/human/lab_rat = allocate(/mob/living/carbon/human/consistent) var/obj/item/organ/test_organ = new organ_type() @@ -41,8 +37,8 @@ var/mob/living/basic/pet/dog/lab_dog = allocate(/mob/living/basic/pet/dog/corgi) var/obj/item/organ/reject_organ = new organ_type() - TEST_ASSERT(test_organ.Insert(lab_rat, special = TRUE, drop_if_replaced = FALSE), TEST_ORGAN_INSERT_MESSAGE(test_organ, "should return TRUE to indicate success.")) - TEST_ASSERT(!reject_organ.Insert(lab_dog, special = TRUE, drop_if_replaced = FALSE), TEST_ORGAN_INSERT_MESSAGE(test_organ, "shouldn't return TRUE when inserting into a basic mob (Corgi).")) + TEST_ASSERT(test_organ.Insert(lab_rat, special = TRUE, movement_flags = DELETE_IF_REPLACED), TEST_ORGAN_INSERT_MESSAGE(test_organ, "should return TRUE to indicate success.")) + TEST_ASSERT(!reject_organ.Insert(lab_dog, special = TRUE, movement_flags = DELETE_IF_REPLACED), TEST_ORGAN_INSERT_MESSAGE(test_organ, "shouldn't return TRUE when inserting into a basic mob (Corgi).")) // Species change swaps out all the organs, making test_organ un-usable by this point. if(species_changing_organs[test_organ.type]) diff --git a/code/modules/unit_tests/paintings.dm b/code/modules/unit_tests/paintings.dm index abe3ba9aa9773b..0a8448a508af46 100644 --- a/code/modules/unit_tests/paintings.dm +++ b/code/modules/unit_tests/paintings.dm @@ -3,10 +3,10 @@ /datum/unit_test/paintings/Run() for(var/obj/item/canvas/canvas as anything in typesof(/obj/item/canvas)) - //SKYRAT EDIT START + //NOVA EDIT START if(canvas == /obj/item/canvas/drawingtablet) //This doesn't need frames. continue - //SKYRAT EDIT END + //NOVA EDIT END canvas = new canvas var/canvas_icons = icon_states(canvas.icon) for(var/frame_type in SSpersistent_paintings.frame_types_by_patronage_tier) diff --git a/code/modules/unit_tests/plantgrowth_tests.dm b/code/modules/unit_tests/plantgrowth_tests.dm index e3654e744d062c..595c71d05a49eb 100644 --- a/code/modules/unit_tests/plantgrowth_tests.dm +++ b/code/modules/unit_tests/plantgrowth_tests.dm @@ -3,7 +3,7 @@ // Maybe some day it would be used as unit test. // -------- IT IS NOW! /datum/unit_test/plantgrowth/Run() - var/list/paths = subtypesof(/obj/item/seeds) - /obj/item/seeds - typesof(/obj/item/seeds/sample) - /obj/item/seeds/lavaland + var/list/paths = subtypesof(/obj/item/seeds) - /obj/item/seeds - /obj/item/seeds/lavaland for(var/seedpath in paths) var/obj/item/seeds/seed = new seedpath diff --git a/code/modules/unit_tests/projectiles.dm b/code/modules/unit_tests/projectiles.dm index b6a910cee1c7cc..fad9250cba3500 100644 --- a/code/modules/unit_tests/projectiles.dm +++ b/code/modules/unit_tests/projectiles.dm @@ -23,11 +23,11 @@ TEST_ASSERT(loaded_bullet, "Ammo casing has no loaded bullet") gunner.put_in_hands(test_gun, forced=TRUE) - //SKYRAT EDIT ADDITION BEGIN + //NOVA EDIT ADDITION BEGIN if(test_gun.GetComponent(/datum/component/gun_safety)) qdel(test_gun.GetComponent(/datum/component/gun_safety)) loaded_bullet.wound_bonus = CANT_WOUND //Baseline wounding makes things weird - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END gunner.set_combat_mode(FALSE) // just to make sure we know we're not trying to pistol-whip them var/expected_damage = loaded_bullet.damage loaded_bullet.def_zone = BODY_ZONE_CHEST diff --git a/code/modules/unit_tests/quirks.dm b/code/modules/unit_tests/quirks.dm index 7a2ce474d5e894..37765ce8ca0ee9 100644 --- a/code/modules/unit_tests/quirks.dm +++ b/code/modules/unit_tests/quirks.dm @@ -19,3 +19,25 @@ continue used_icons[icon] = quirk_type + +// Make sure all quirks start with a description in medical records +/datum/unit_test/quirk_initial_medical_records + +/datum/unit_test/quirk_initial_medical_records/Run() + var/mob/living/carbon/human/patient = allocate(/mob/living/carbon/human/consistent) + + for(var/datum/quirk/quirk_type as anything in subtypesof(/datum/quirk)) + if (initial(quirk_type.abstract_parent_type) == quirk_type) + continue + + if(!isnull(quirk_type.medical_record_text)) + continue + + //Add quirk to a patient - so we can pass quirks that add a medical record after being assigned someone + patient.add_quirk(quirk_type) + + var/datum/quirk/quirk = patient.get_quirk(quirk_type) + + TEST_ASSERT_NOTNULL(quirk.medical_record_text,"[quirk_type] has no medical record description!") + + patient.remove_quirk(quirk_type) diff --git a/code/modules/unit_tests/required_map_items.dm b/code/modules/unit_tests/required_map_items.dm index 39930afd822c24..5cbef64539109d 100644 --- a/code/modules/unit_tests/required_map_items.dm +++ b/code/modules/unit_tests/required_map_items.dm @@ -15,10 +15,11 @@ /datum/unit_test/required_map_items/proc/setup_expected_types() expected_types += subtypesof(/obj/item/stamp/head) expected_types += subtypesof(/obj/machinery/computer/department_orders) - expected_types += /obj/machinery/computer/communications - expected_types += /mob/living/carbon/human/species/monkey/punpun + + expected_types += /mob/living/basic/parrot/poly expected_types += /mob/living/basic/pet/dog/corgi/ian - expected_types += /mob/living/simple_animal/parrot/poly + expected_types += /mob/living/carbon/human/species/monkey/punpun + expected_types += /obj/machinery/computer/communications expected_types += /obj/machinery/drone_dispenser /datum/unit_test/required_map_items/Run() diff --git a/code/modules/unit_tests/say.dm b/code/modules/unit_tests/say.dm index 3ae55a12e37e57..40a2f2cdb554b5 100644 --- a/code/modules/unit_tests/say.dm +++ b/code/modules/unit_tests/say.dm @@ -58,12 +58,15 @@ /// This runs some simple speech tests on a speaker and listener and determines if a person can hear whispering or speaking as they are moved a distance away /datum/unit_test/speech - var/list/handle_speech_result = null - var/list/handle_hearing_result = null var/mob/living/carbon/human/speaker var/mob/living/carbon/human/listener + var/list/handle_speech_result = null + var/list/handle_hearing_result = null + var/obj/item/radio/speaker_radio var/obj/item/radio/listener_radio + var/speaker_radio_heard_message = FALSE + var/listener_radio_received_message = FALSE /datum/unit_test/speech/proc/handle_speech(datum/source, list/speech_args) SIGNAL_HANDLER @@ -99,6 +102,16 @@ handle_hearing_result = list() handle_hearing_result += hearing_args +/datum/unit_test/speech/proc/handle_radio_hearing(datum/source, mob/living/user, message, channel) + SIGNAL_HANDLER + + speaker_radio_heard_message = TRUE + +/datum/unit_test/speech/proc/handle_radio_speech(datum/source, list/data) + SIGNAL_HANDLER + + listener_radio_received_message = TRUE + /datum/unit_test/speech/Run() speaker = allocate(/mob/living/carbon/human/consistent) // Name changes to make understanding breakpoints easier @@ -114,7 +127,10 @@ listener.mock_client = mock_client RegisterSignal(speaker, COMSIG_MOB_SAY, PROC_REF(handle_speech)) + RegisterSignal(speaker_radio, COMSIG_RADIO_NEW_MESSAGE, PROC_REF(handle_radio_hearing)) + RegisterSignal(listener, COMSIG_MOVABLE_HEAR, PROC_REF(handle_hearing)) + RegisterSignal(listener_radio, COMSIG_RADIO_RECEIVE_MESSAGE, PROC_REF(handle_radio_speech)) // speaking and whispering should be hearable conversation(distance = 1) @@ -144,7 +160,7 @@ speaker.forceMove(run_loc_floor_bottom_left) listener.forceMove(locate((run_loc_floor_bottom_left.x + distance), run_loc_floor_bottom_left.y, run_loc_floor_bottom_left.z)) - var/pangram_quote = "The quick brown fox jumps over the lazy dog" + var/pangram_quote = "The quick brown fox jumps over the lazy dog." // NOVA EDIT CHANGE - account for autopunct in living_say.dm - ORIGINAL: var/pangram_quote = "The quick brown fox jumps over the lazy dog" // speaking speaker.say(pangram_quote) @@ -169,6 +185,9 @@ handle_hearing_result = null /datum/unit_test/speech/proc/radio_test() + speaker_radio_heard_message = FALSE + listener_radio_received_message = FALSE + speaker.forceMove(run_loc_floor_bottom_left) listener.forceMove(locate((run_loc_floor_bottom_left.x + 10), run_loc_floor_bottom_left.y, run_loc_floor_bottom_left.z)) @@ -182,15 +201,19 @@ listener_radio.set_frequency(FREQ_CENTCOM) listener_radio.independent = TRUE - var/pangram_quote = "The quick brown fox jumps over the lazy dog" + var/pangram_quote = "The quick brown fox jumps over the lazy dog." // NOVA EDIT CHANGE - account for autopunct in living_say.dm - ORIGINAL: var/pangram_quote = "The quick brown fox jumps over the lazy dog" speaker.say(pangram_quote) TEST_ASSERT(handle_speech_result, "Handle speech signal was not fired (radio test)") - TEST_ASSERT(islist(handle_hearing_result), "Listener failed to hear radio message (radio test)") + TEST_ASSERT(speaker_radio_heard_message, "Speaker's radio did not hear them speak (radio test)") TEST_ASSERT_EQUAL(speaker_radio.get_frequency(), listener_radio.get_frequency(), "Radio frequencies were not equal (radio test)") + TEST_ASSERT(listener_radio_received_message, "Listener's radio did not receive the broadcast (radio test)") + TEST_ASSERT(islist(handle_hearing_result), "Listener failed to hear radio message (radio test)") handle_speech_result = null handle_hearing_result = null + speaker_radio_heard_message = FALSE + listener_radio_received_message = FALSE speaker_radio.set_frequency(FREQ_CTF_RED) speaker.say(pangram_quote) @@ -200,6 +223,8 @@ handle_speech_result = null handle_hearing_result = null + speaker_radio_heard_message = FALSE + listener_radio_received_message = FALSE speaker_radio.set_broadcasting(FALSE) #undef NORMAL_HEARING_RANGE diff --git a/code/modules/unit_tests/screenshot_high_luminosity_eyes.dm b/code/modules/unit_tests/screenshot_high_luminosity_eyes.dm new file mode 100644 index 00000000000000..4b0c3a986f1220 --- /dev/null +++ b/code/modules/unit_tests/screenshot_high_luminosity_eyes.dm @@ -0,0 +1,64 @@ +#define UPDATE_EYES_LEFT 1 +#define UPDATE_EYES_RIGHT 2 + +/// Tests to make sure no punks have broken high luminosity eyes +/datum/unit_test/screenshot_high_luminosity_eyes + var/mob/living/carbon/human/test_subject + var/obj/item/organ/internal/eyes/robotic/glow/test_eyes + +/datum/unit_test/screenshot_high_luminosity_eyes/Run() + // Create a mob with red and blue eyes. This is to test that high luminosity eyes properly default to the old eye color. + test_subject = allocate(/mob/living/carbon/human/consistent) + test_subject.equipOutfit(/datum/outfit/job/assistant/consistent) + test_subject.eye_color_left = COLOR_RED + test_subject.eye_color_right = COLOR_BLUE + + // Create our eyes, and insert them into the mob + test_eyes = allocate(/obj/item/organ/internal/eyes/robotic/glow) + test_eyes.Insert(test_subject) + + // This should be 4, but just in case it ever changes in the future + var/default_light_range = test_eyes.eye.light_range + + // Test the normal light on appearance + test_eyes.toggle_active() + var/icon/flat_icon = create_icon() + test_screenshot("light_on", flat_icon) + + // Change the eye color to pink and green + test_eyes.set_beam_color(COLOR_SCIENCE_PINK, to_update = UPDATE_EYES_LEFT) + test_eyes.set_beam_color(COLOR_SLIME_GREEN, to_update = UPDATE_EYES_RIGHT) + + // Make sure the light overlay goes away (but not the emissive overlays) when we go to light range 0 while still turned on + test_eyes.set_beam_range(0) + TEST_ASSERT_EQUAL(test_eyes.eye.light_on, TRUE, "[src]'s 'eye.light_on' is FALSE after setting range to 0 while on. 'eye.light_on' should = TRUE!") + flat_icon = create_icon() + test_screenshot("light_emissive", flat_icon) + + // turn it on and off again, it should look the same afterwards + test_eyes.toggle_active() + TEST_ASSERT_EQUAL(test_eyes.eye.light_on, FALSE, "[src]'s 'eye.light_on' is TRUE after being toggled off at range 0. 'eye.light_on' should = FALSE!") + test_eyes.toggle_active() + TEST_ASSERT_EQUAL(test_eyes.eye.light_on, TRUE, "[src]'s 'eye.light_on' is FALSE after being toggled on at range 0. 'eye.light_on' should = TRUE!") + flat_icon = create_icon() + test_screenshot("light_emissive", flat_icon) + + // Make sure the light comes back on when we go from range 0 to 1 + // Change left/right eye color back to red/blue. It should match the original screenshot + test_eyes.set_beam_range(default_light_range) + test_eyes.set_beam_color(COLOR_RED, to_update = UPDATE_EYES_LEFT) + test_eyes.set_beam_color(COLOR_BLUE, to_update = UPDATE_EYES_RIGHT) + flat_icon = create_icon() + test_screenshot("light_on", flat_icon) + +/// Create the mob icon with light cone underlay +/datum/unit_test/screenshot_high_luminosity_eyes/proc/create_icon() + var/icon/final_icon = get_flat_icon_for_all_directions(test_subject, no_anim = FALSE) + for(var/mutable_appearance/light_underlay as anything in test_subject.underlays) + if(light_underlay.icon == 'icons/effects/light_overlays/light_cone.dmi') + // The light cone icon is 96x96, so we have to shift it over to have it match our sprites. x = 1, y = 1 is the lower left corner so we shift 32 pixels opposite to that. + final_icon.Blend(get_flat_icon_for_all_directions(light_underlay, no_anim = FALSE), ICON_UNDERLAY, -world.icon_size + 1, -world.icon_size + 1) + return final_icon + +#undef UPDATE_EYES_LEFT +#undef UPDATE_EYES_RIGHT diff --git a/code/modules/unit_tests/screenshot_humanoids.dm b/code/modules/unit_tests/screenshot_humanoids.dm index 6e5bcd03a6b5d6..44373018a7a695 100644 --- a/code/modules/unit_tests/screenshot_humanoids.dm +++ b/code/modules/unit_tests/screenshot_humanoids.dm @@ -5,10 +5,10 @@ // Test lizards as their own thing so we can get more coverage on their features var/mob/living/carbon/human/lizard = allocate(/mob/living/carbon/human/dummy/consistent) lizard.dna.features["mcolor"] = "#099" - lizard.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Light Tiger", MUTANT_INDEX_COLOR_LIST = list("#009999", "#009999", "#009999")) // SKYRAT EDIT - Customization - ORIGINAL: lizard.dna.features["tail_lizard"] = "Light Tiger" - lizard.dna.mutant_bodyparts["snout"] = list(MUTANT_INDEX_NAME = "Sharp + Light", MUTANT_INDEX_COLOR_LIST = list("#009999", "#009999", "#009999")) // SKYRAT EDIT - Customization - ORIGINAL: lizard.dna.features["snout"] = "Sharp + Light" - lizard.dna.mutant_bodyparts["horns"] = list(MUTANT_INDEX_NAME = "Simple", MUTANT_INDEX_COLOR_LIST = list("#009999", "#009999", "#009999")) // SKYRAT EDIT - Customization - ORIGINAL: lizard.dna.features["horns"] = "Simple" - lizard.dna.mutant_bodyparts["frills"] = list(MUTANT_INDEX_NAME = "Aquatic", MUTANT_INDEX_COLOR_LIST = list("#009999", "#009999", "#009999")) // SKYRAT EDIT - Customization - ORIGINAL: lizard.dna.features["frills"] = "Aquatic" + lizard.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Light Tiger", MUTANT_INDEX_COLOR_LIST = list("#009999", "#009999", "#009999")) // NOVA EDIT - Customization - ORIGINAL: lizard.dna.features["tail_lizard"] = "Light Tiger" + lizard.dna.mutant_bodyparts["snout"] = list(MUTANT_INDEX_NAME = "Sharp + Light", MUTANT_INDEX_COLOR_LIST = list("#009999", "#009999", "#009999")) // NOVA EDIT - Customization - ORIGINAL: lizard.dna.features["snout"] = "Sharp + Light" + lizard.dna.mutant_bodyparts["horns"] = list(MUTANT_INDEX_NAME = "Simple", MUTANT_INDEX_COLOR_LIST = list("#009999", "#009999", "#009999")) // NOVA EDIT - Customization - ORIGINAL: lizard.dna.features["horns"] = "Simple" + lizard.dna.mutant_bodyparts["frills"] = list(MUTANT_INDEX_NAME = "Aquatic", MUTANT_INDEX_COLOR_LIST = list("#009999", "#009999", "#009999")) // NOVA EDIT - Customization - ORIGINAL: lizard.dna.features["frills"] = "Aquatic" lizard.dna.features["legs"] = "Normal Legs" lizard.set_species(/datum/species/lizard) lizard.equipOutfit(/datum/outfit/job/engineer) @@ -16,10 +16,10 @@ // let me have this var/mob/living/carbon/human/moth = allocate(/mob/living/carbon/human/dummy/consistent) - moth.dna.features["mcolor"] = "#E5CD99" // SKYRAT EDIT ADDITION - Customization - moth.dna.mutant_bodyparts["moth_antennae"] = list(MUTANT_INDEX_NAME = "Firewatch", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) // SKYRAT EDIT - Customization - ORIGINAL: moth.dna.features["moth_antennae"] = "Firewatch" - moth.dna.mutant_bodyparts["moth_markings"] = list(MUTANT_INDEX_NAME = "None", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) // SKYRAT EDIT - Customization - ORIGINAL: moth.dna.features["moth_markings"] = "None" - moth.dna.mutant_bodyparts["wings"] = list(MUTANT_INDEX_NAME = "Moth (Firewatch)", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) // SKYRAT EDIT - Customization - ORIGINAL: moth.dna.features["moth_wings"] = "Firewatch" + moth.dna.features["mcolor"] = "#E5CD99" // NOVA EDIT ADDITION - Customization + moth.dna.mutant_bodyparts["moth_antennae"] = list(MUTANT_INDEX_NAME = "Firewatch", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) // NOVA EDIT - Customization - ORIGINAL: moth.dna.features["moth_antennae"] = "Firewatch" + moth.dna.mutant_bodyparts["moth_markings"] = list(MUTANT_INDEX_NAME = "None", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) // NOVA EDIT - Customization - ORIGINAL: moth.dna.features["moth_markings"] = "None" + moth.dna.mutant_bodyparts["wings"] = list(MUTANT_INDEX_NAME = "Moth (Firewatch)", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) // NOVA EDIT - Customization - ORIGINAL: moth.dna.features["moth_wings"] = "Firewatch" moth.set_species(/datum/species/moth) moth.equipOutfit(/datum/outfit/job/cmo, visualsOnly = TRUE) test_screenshot("[/datum/species/moth]", get_flat_icon_for_all_directions(moth)) @@ -31,9 +31,9 @@ /datum/unit_test/screenshot_humanoids/proc/make_dummy(species, job_outfit) var/mob/living/carbon/human/dummy/consistent/dummy = allocate(/mob/living/carbon/human/dummy/consistent) dummy.set_species(species) - // SKYRAT EDIT ADDITION START - More consistent screenshots + // NOVA EDIT ADDITION START - More consistent screenshots var/datum/species/dummy_species = new species dummy_species.prepare_human_for_preview(dummy) - // SKYRAT EDIT ADDITION END + // NOVA EDIT ADDITION END dummy.equipOutfit(job_outfit, visualsOnly = TRUE) return dummy diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_cyberpolice.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_glitch.png similarity index 100% rename from code/modules/unit_tests/screenshots/screenshot_antag_icons_cyberpolice.png rename to code/modules/unit_tests/screenshots/screenshot_antag_icons_glitch.png diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizard.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizard.png index 4cdec6cc5b6a83..6795b571c8f413 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizard.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizard.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizardmidround.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizardmidround.png index 4cdec6cc5b6a83..6795b571c8f413 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizardmidround.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizardmidround.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_high_luminosity_eyes_light_emissive.png b/code/modules/unit_tests/screenshots/screenshot_high_luminosity_eyes_light_emissive.png new file mode 100644 index 00000000000000..e7f5a457c3000f Binary files /dev/null and b/code/modules/unit_tests/screenshots/screenshot_high_luminosity_eyes_light_emissive.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_high_luminosity_eyes_light_on.png b/code/modules/unit_tests/screenshots/screenshot_high_luminosity_eyes_light_on.png new file mode 100644 index 00000000000000..76c997c33180d0 Binary files /dev/null and b/code/modules/unit_tests/screenshots/screenshot_high_luminosity_eyes_light_on.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_vox_primalis.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_vox_primalis.png index 9f591d0cdbae0a..cfbd40f8db7b87 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_vox_primalis.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_vox_primalis.png differ diff --git a/code/modules/unit_tests/screenshots/transformation_sting_appearances.png b/code/modules/unit_tests/screenshots/transformation_sting_appearances.png new file mode 100644 index 00000000000000..ce0545d1b568cb Binary files /dev/null and b/code/modules/unit_tests/screenshots/transformation_sting_appearances.png differ diff --git a/code/modules/unit_tests/simple_animal_freeze.dm b/code/modules/unit_tests/simple_animal_freeze.dm index 3c5dbfb6474f2f..f47fc72fbf3673 100644 --- a/code/modules/unit_tests/simple_animal_freeze.dm +++ b/code/modules/unit_tests/simple_animal_freeze.dm @@ -6,18 +6,8 @@ // If you are refactoring a simple_animal, REMOVE it from this list var/list/allowed_types = list( /mob/living/simple_animal/bot, - /mob/living/simple_animal/bot/cleanbot, - /mob/living/simple_animal/bot/cleanbot/autopatrol, - /mob/living/simple_animal/bot/cleanbot/medbay, /mob/living/simple_animal/bot/firebot, /mob/living/simple_animal/bot/floorbot, - /mob/living/simple_animal/bot/hygienebot, - /mob/living/simple_animal/bot/medbot, - /mob/living/simple_animal/bot/medbot/autopatrol, - /mob/living/simple_animal/bot/medbot/derelict, - /mob/living/simple_animal/bot/medbot/mysterious, - /mob/living/simple_animal/bot/medbot/nukie, - /mob/living/simple_animal/bot/medbot/stationary, /mob/living/simple_animal/bot/mulebot, /mob/living/simple_animal/bot/mulebot/paranormal, /mob/living/simple_animal/bot/secbot, @@ -51,61 +41,33 @@ /mob/living/simple_animal/hostile/asteroid/elite/legionnaire, /mob/living/simple_animal/hostile/asteroid/elite/legionnairehead, /mob/living/simple_animal/hostile/asteroid/elite/pandora, - /mob/living/simple_animal/hostile/asteroid/gutlunch, - /mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch, - /mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck, - /mob/living/simple_animal/hostile/asteroid/gutlunch/guthen, /mob/living/simple_animal/hostile/asteroid/polarbear, /mob/living/simple_animal/hostile/asteroid/polarbear/lesser, /mob/living/simple_animal/hostile/asteroid/wolf, - /mob/living/simple_animal/hostile/construct, - /mob/living/simple_animal/hostile/construct/proteon, - /mob/living/simple_animal/hostile/construct/proteon/hostile, /mob/living/simple_animal/hostile/dark_wizard, - /mob/living/simple_animal/hostile/guardian, - /mob/living/simple_animal/hostile/guardian/assassin, - /mob/living/simple_animal/hostile/guardian/charger, - /mob/living/simple_animal/hostile/guardian/dextrous, - /mob/living/simple_animal/hostile/guardian/explosive, - /mob/living/simple_animal/hostile/guardian/gaseous, - /mob/living/simple_animal/hostile/guardian/gravitokinetic, - /mob/living/simple_animal/hostile/guardian/lightning, - /mob/living/simple_animal/hostile/guardian/protector, - /mob/living/simple_animal/hostile/guardian/ranged, - /mob/living/simple_animal/hostile/guardian/standard, - /mob/living/simple_animal/hostile/guardian/support, /mob/living/simple_animal/hostile/illusion, /mob/living/simple_animal/hostile/illusion/escape, /mob/living/simple_animal/hostile/illusion/mirage, - /mob/living/simple_animal/hostile/jungle, - /mob/living/simple_animal/hostile/jungle/leaper, /mob/living/simple_animal/hostile/megafauna, /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner, /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/doom, /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/guidance, /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/hunter, - /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/virtual_domain, /mob/living/simple_animal/hostile/megafauna/bubblegum, /mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination, - /mob/living/simple_animal/hostile/megafauna/bubblegum/virtual_domain, /mob/living/simple_animal/hostile/megafauna/clockwork_defender, /mob/living/simple_animal/hostile/megafauna/colossus, - /mob/living/simple_animal/hostile/megafauna/colossus/virtual_domain, /mob/living/simple_animal/hostile/megafauna/demonic_frost_miner, /mob/living/simple_animal/hostile/megafauna/dragon, /mob/living/simple_animal/hostile/megafauna/dragon/lesser, - /mob/living/simple_animal/hostile/megafauna/dragon/virtual_domain, /mob/living/simple_animal/hostile/megafauna/hierophant, - /mob/living/simple_animal/hostile/megafauna/hierophant/virtual_domain, /mob/living/simple_animal/hostile/megafauna/legion, - /mob/living/simple_animal/hostile/megafauna/legion/virtual_domain, /mob/living/simple_animal/hostile/megafauna/legion/medium, /mob/living/simple_animal/hostile/megafauna/legion/medium/eye, /mob/living/simple_animal/hostile/megafauna/legion/medium/left, /mob/living/simple_animal/hostile/megafauna/legion/medium/right, /mob/living/simple_animal/hostile/megafauna/legion/small, /mob/living/simple_animal/hostile/megafauna/wendigo, - /mob/living/simple_animal/hostile/megafauna/wendigo/virtual_domain, /mob/living/simple_animal/hostile/mimic, /mob/living/simple_animal/hostile/mimic/copy, /mob/living/simple_animal/hostile/mimic/copy/machine, @@ -119,26 +81,11 @@ /mob/living/simple_animal/hostile/retaliate/goose, /mob/living/simple_animal/hostile/retaliate/goose/vomit, /mob/living/simple_animal/hostile/vatbeast, - /mob/living/simple_animal/hostile/wizard, /mob/living/simple_animal/hostile/zombie, - /mob/living/simple_animal/parrot, - /mob/living/simple_animal/parrot/natural, - /mob/living/simple_animal/parrot/poly, - /mob/living/simple_animal/parrot/poly/ghost, /mob/living/simple_animal/pet, - /mob/living/simple_animal/pet/cat, - /mob/living/simple_animal/pet/cat/_proc, - /mob/living/simple_animal/pet/cat/breadcat, - /mob/living/simple_animal/pet/cat/cak, - /mob/living/simple_animal/pet/cat/jerry, - /mob/living/simple_animal/pet/cat/kitten, - /mob/living/simple_animal/pet/cat/original, - /mob/living/simple_animal/pet/cat/runtime, - /mob/living/simple_animal/pet/cat/space, /mob/living/simple_animal/pet/gondola, /mob/living/simple_animal/pet/gondola/gondolapod, /mob/living/simple_animal/pet/gondola/virtual_domain, - /mob/living/simple_animal/shade, /mob/living/simple_animal/slime, /mob/living/simple_animal/slime/pet, /mob/living/simple_animal/slime/random, diff --git a/code/modules/unit_tests/spawn_humans.dm b/code/modules/unit_tests/spawn_humans.dm index 0523f141d25688..e90473a7ba0694 100644 --- a/code/modules/unit_tests/spawn_humans.dm +++ b/code/modules/unit_tests/spawn_humans.dm @@ -2,7 +2,7 @@ var/locs = block(run_loc_floor_bottom_left, run_loc_floor_top_right) for(var/I in 1 to 5) - new /mob/living/carbon/human/consistent(pick(locs)) + allocate(/mob/living/carbon/human/consistent, pick(locs)) sleep(5 SECONDS) diff --git a/code/modules/unit_tests/species_change_clothing.dm b/code/modules/unit_tests/species_change_clothing.dm index c73da72710375f..d41d2a24715e15 100644 --- a/code/modules/unit_tests/species_change_clothing.dm +++ b/code/modules/unit_tests/species_change_clothing.dm @@ -9,14 +9,14 @@ morphing_human.equipOutfit(/datum/outfit/job/assistant/consistent) morphing_human.dna.features["legs"] = DIGITIGRADE_LEGS //you WILL have digitigrade legs - /* SKYRAT EDIT REMOVAL START - This part of the test is useless as it's behavior that we actually WANT from those shoes, here. + /* NOVA EDIT REMOVAL START - This part of the test is useless as it's behavior that we actually WANT from those shoes, here. var/obj/item/human_shoes = morphing_human.get_item_by_slot(ITEM_SLOT_FEET) human_shoes.supports_variations_flags = NONE //do not fit lizards at all costs. morphing_human.set_species(/datum/species/lizard) var/obj/item/lizard_shoes = morphing_human.get_item_by_slot(ITEM_SLOT_FEET) // TEST_ASSERT_NOTEQUAL(human_shoes, lizard_shoes, "Lizard still has shoes after changing species.") - */ // SKYRAT EDIT REMOVAL END + */ // NOVA EDIT REMOVAL END // Testing whether item-species restrictions properly blocks changing into a blacklisted species. morphing_human.set_species(/datum/species/monkey) diff --git a/code/modules/unit_tests/species_change_organs.dm b/code/modules/unit_tests/species_change_organs.dm index e0555aa89bcf92..41d55047f03462 100644 --- a/code/modules/unit_tests/species_change_organs.dm +++ b/code/modules/unit_tests/species_change_organs.dm @@ -12,7 +12,7 @@ dummy.gain_trauma(/datum/brain_trauma/severe/blindness) // Give a cyber heart var/obj/item/organ/internal/heart/cybernetic/cyber_heart = allocate(/obj/item/organ/internal/heart/cybernetic) - cyber_heart.Insert(dummy, special = TRUE, drop_if_replaced = FALSE) + cyber_heart.Insert(dummy, special = TRUE, movement_flags = DELETE_IF_REPLACED) // Give one of their organs a bit of damage var/obj/item/organ/internal/appendix/existing_appendix = dummy.get_organ_slot(ORGAN_SLOT_APPENDIX) existing_appendix.set_organ_damage(25) diff --git a/code/modules/unit_tests/spell_shapeshift.dm b/code/modules/unit_tests/spell_shapeshift.dm index 9b5804e3520621..3b598e9994200c 100644 --- a/code/modules/unit_tests/spell_shapeshift.dm +++ b/code/modules/unit_tests/spell_shapeshift.dm @@ -87,7 +87,7 @@ shift.shapeshift_type = shift.possible_shapes[1] shift.Grant(dummy) - var/mob/living/simple_animal/hostile/guardian/test_stand = allocate(/mob/living/simple_animal/hostile/guardian) + var/mob/living/basic/guardian/test_stand = allocate(/mob/living/basic/guardian) test_stand.set_summoner(dummy) // The stand's summoner is dummy. diff --git a/code/modules/unit_tests/strange_reagent.dm b/code/modules/unit_tests/strange_reagent.dm index 345be4befe9771..6c3add3092d58e 100644 --- a/code/modules/unit_tests/strange_reagent.dm +++ b/code/modules/unit_tests/strange_reagent.dm @@ -97,6 +97,8 @@ /datum/unit_test/strange_reagent/proc/test_death_no_damage(target_type) var/mob/living/target = allocate_new_target(target_type) target.death() + if(QDELETED(target)) + return update_amounts(target) strange_reagent.expose_mob(target, INGEST, amount_needed_to_revive) TEST_ASSERT_NOTEQUAL(target.stat, DEAD, "Strange Reagent did not revive a dead target type [target.type].") @@ -107,6 +109,8 @@ return target.death() + if(QDELETED(target)) + return update_amounts(target) strange_reagent.expose_mob(target, INGEST, amount_needed_to_revive) TEST_ASSERT_NOTEQUAL(target.stat, DEAD, "Strange Reagent did not revive a dead target type [target.type].") @@ -126,6 +130,8 @@ return target.death() + if(QDELETED(target)) + return update_amounts(target) strange_reagent.expose_mob(target, INGEST, amount_needed_to_full_heal) TEST_ASSERT_EQUAL(target_max_health, get_target_organic_health_manual(target), "Strange Reagent did not fully heal a dead target type [target.type] with the expected amount.") @@ -134,6 +140,8 @@ var/mob/living/target = allocate_new_target(target_type) if(!damage_target_to_percentage(target, strange_reagent.max_revive_damage_ratio * 0.9)) // 10% under the damage cap return + if(QDELETED(target)) + return update_amounts(target) strange_reagent.expose_mob(target, INGEST, amount_needed_to_revive) @@ -143,7 +151,9 @@ var/mob/living/target = allocate_new_target(target_type) if(!damage_target_to_percentage(target, strange_reagent.max_revive_damage_ratio * 1.1)) // 10% over the damage cap return - + if(QDELETED(target)) + return + update_amounts(target) strange_reagent.expose_mob(target, INGEST, amount_needed_to_revive) TEST_ASSERT_EQUAL(target.stat, DEAD, "Strange Reagent revived a target type [target.type] with more than double their max health in damage.") diff --git a/code/modules/unit_tests/strippable.dm b/code/modules/unit_tests/strippable.dm index 18f521929cd546..ff5b055c3fe2ac 100644 --- a/code/modules/unit_tests/strippable.dm +++ b/code/modules/unit_tests/strippable.dm @@ -8,7 +8,7 @@ var/datum/strip_menu/strip_menu = allocate(/datum/strip_menu, target, strippable) - run_loc_floor_bottom_left.luminosity = 6 // SKYRAT EDIT - Making this unit test pass by lighting a turf up. + run_loc_floor_bottom_left.luminosity = 6 // NOVA EDIT - Making this unit test pass by lighting a turf up. var/ui_state = strip_menu.ui_state(user) diff --git a/code/modules/unit_tests/tail_wag.dm b/code/modules/unit_tests/tail_wag.dm new file mode 100644 index 00000000000000..ceb82e98c0d6b9 --- /dev/null +++ b/code/modules/unit_tests/tail_wag.dm @@ -0,0 +1,90 @@ +/// Tests to make sure tail wagging behaves as expected +/datum/unit_test/tail_wag + // used by the stop_after test + var/timer_finished = FALSE + +/datum/unit_test/tail_wag/Run() + var/mob/living/carbon/human/dummy = allocate(/mob/living/carbon/human/consistent) + var/obj/item/organ/external/tail/cat/dummy_tail = allocate(/obj/item/organ/external/tail/cat) + dummy_tail.Insert(dummy, special = TRUE, movement_flags = DELETE_IF_REPLACED) + + // SANITY TEST + + // start wagging + SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, TRUE) + if(!(dummy_tail.wag_flags & WAG_WAGGING)) + TEST_FAIL("Tail did not start wagging when it should have!") + + // stop wagging + SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, FALSE) + if(dummy_tail.wag_flags & WAG_WAGGING) + TEST_FAIL("Tail did not stop wagging when it should have!") + + // TESTING WAG_ABLE FLAG + + // flip the wag flag to unwaggable + dummy_tail.wag_flags &= ~WAG_ABLE + + // try to wag it again + SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, TRUE) + if(dummy_tail.wag_flags & WAG_WAGGING) + TEST_FAIL("Tail should not have the ability to wag, yet it did!") + + // flip the wag flag to waggable again + dummy_tail.wag_flags |= WAG_ABLE + + // start wagging again + SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, TRUE) + if(!(dummy_tail.wag_flags & WAG_WAGGING)) + TEST_FAIL("Tail did not start wagging when it should have!") + + // TESTING STOP_AFTER + + // stop wagging + SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, FALSE) + if(dummy_tail.wag_flags & WAG_WAGGING) + TEST_FAIL("Tail did not stop wagging when it should have!") + + // start wagging, stop after 0.1 seconds + SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, TRUE, 0.1 SECONDS) + // because timers are a pain + addtimer(VARSET_CALLBACK(src, timer_finished, TRUE), 0.2 SECONDS) + if(!(dummy_tail.wag_flags & WAG_WAGGING)) + TEST_FAIL("Tail did not start wagging when it should have!") + + UNTIL(timer_finished) // wait a little bit + + if(dummy_tail.wag_flags & WAG_WAGGING) + TEST_FAIL("Tail was supposed to stop wagging on its own after 0.1 seconds but it did not!") + + // TESTING TAIL REMOVAL + + // remove the tail + dummy_tail.Remove(dummy, special = TRUE) + + // check if tail is still wagging after being removed + if(dummy_tail.wag_flags & WAG_WAGGING) + TEST_FAIL("Tail was still wagging after being removed!") + + // try to wag the removed tail + SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, TRUE) + if(dummy_tail.wag_flags & WAG_WAGGING) + TEST_FAIL("A disembodied tail was able to start wagging!") + + // TESTING MOB DEATH + + // put it back and start wagging again + dummy_tail.Insert(dummy, special = TRUE, movement_flags = DELETE_IF_REPLACED) + SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, TRUE) + if(!(dummy_tail.wag_flags & WAG_WAGGING)) + TEST_FAIL("Tail did not start wagging when it should have!") + + // kill the mob, see if it stops wagging + dummy.adjustBruteLoss(9001) + if(dummy_tail.wag_flags & WAG_WAGGING) + TEST_FAIL("A mob's tail was still wagging after being killed!") + + // check if we are still able to wag the tail after death + SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, TRUE) + if(dummy_tail.wag_flags & WAG_WAGGING) + TEST_FAIL("A dead mob was able to wag their tail!") diff --git a/code/modules/unit_tests/trauma_granting.dm b/code/modules/unit_tests/trauma_granting.dm index 26f536d74dffd2..df25ef2be7f20c 100644 --- a/code/modules/unit_tests/trauma_granting.dm +++ b/code/modules/unit_tests/trauma_granting.dm @@ -17,9 +17,9 @@ trauma_blacklist += typesof(/datum/brain_trauma/special/imaginary_friend) // Requires a obsession target trauma_blacklist += typesof(/datum/brain_trauma/special/obsessed) - //SKYRAT EDIT START + //NOVA EDIT START trauma_blacklist += typesof(/datum/brain_trauma/very_special/induced_hypnosis) // Requires an object to properly work - //SKYRAT EDIT END + //NOVA EDIT END for(var/datum/brain_trauma/trauma as anything in typesof(/datum/brain_trauma) - trauma_blacklist) if(trauma == initial(trauma.abstract_type)) diff --git a/code/modules/unit_tests/turf_icons.dm b/code/modules/unit_tests/turf_icons.dm index e7b7d722ffb4a2..814c09827b5e25 100644 --- a/code/modules/unit_tests/turf_icons.dm +++ b/code/modules/unit_tests/turf_icons.dm @@ -1,6 +1,6 @@ /// Makes sure turf icons actually exist. :) /datum/unit_test/turf_icons - var/modular_mineral_turf_file = 'modular_skyrat/modules/xenoarch/icons/mining.dmi' //= 'icons/turf/mining.dmi' //MODULARITY SUPPORT - insert your snowflake MAP_SWITCH icon file here if you use that define. // SKYRAT EDIT - Added our modular file here (thanks) + var/modular_mineral_turf_file = 'modular_nova/modules/xenoarch/icons/mining.dmi' //= 'icons/turf/mining.dmi' //MODULARITY SUPPORT - insert your snowflake MAP_SWITCH icon file here if you use that define. // NOVA EDIT - Added our modular file here (thanks) /datum/unit_test/turf_icons/Run() for(var/turf/turf_path as anything in (subtypesof(/turf) - typesof(/turf/closed/mineral))) @@ -28,10 +28,10 @@ var/list/ignored_types = list() //ignored_types += typesof(YOUR_DOWNSTREAM_TYPEPATH(s)_HERE) //MODULARITY SUPPORT. If you have snowflake typepaths that are blacklisted in, for example, create & destroy unit test because they require certain SS's being init, use this to blacklist them. - //SKYRAT EDIT START + //NOVA EDIT START ignored_types += typesof(/turf/open/openspace/ocean) ignored_types += typesof(/turf/open/floor/plating/ocean) - // SKYRAT EDIT END + // NOVA EDIT END for(var/turf/open/open_turf_path as anything in (subtypesof(/turf/open) - ignored_types)) diff --git a/code/modules/unit_tests/unit_test.dm b/code/modules/unit_tests/unit_test.dm index 2ad1f18221534d..078e7ffc32d774 100644 --- a/code/modules/unit_tests/unit_test.dm +++ b/code/modules/unit_tests/unit_test.dm @@ -320,7 +320,7 @@ GLOBAL_VAR_INIT(focused_tests, focused_tests()) returnable_list += typesof(/turf/open/space/openspace) returnable_list += typesof(/turf/open/openspace) - //SKYRAT EDIT ADDITION START - OUR UNCREATABLES DOWN HERE + //NOVA EDIT ADDITION START - OUR UNCREATABLES DOWN HERE //Not designed to be spawned without a turf. returnable_list += typesof(/obj/effect/abstract/liquid_turf) //Not designed to be spawned individually. @@ -334,7 +334,7 @@ GLOBAL_VAR_INIT(focused_tests, focused_tests()) // These two are locked to one type only, and shouldn't be widely available, hence why they runtime otherwise. // Can't be bothered adding more to them. returnable_list += list(/obj/item/organ/external/neck_accessory, /obj/item/organ/external/head_accessory) - //SKYRAT EDIT ADDITION END + //NOVA EDIT ADDITION END return returnable_list diff --git a/code/modules/unit_tests/~skyrat/automapper.dm b/code/modules/unit_tests/~nova/automapper.dm similarity index 95% rename from code/modules/unit_tests/~skyrat/automapper.dm rename to code/modules/unit_tests/~nova/automapper.dm index 543eacca5b73b2..3f3a6a67351824 100644 --- a/code/modules/unit_tests/~skyrat/automapper.dm +++ b/code/modules/unit_tests/~nova/automapper.dm @@ -1,6 +1,6 @@ /// Checks that all automapper TOML entries actually link to a map and that the config exists. /datum/unit_test/automapper - var/config_path = "_maps/skyrat/automapper/automapper_config.toml" + var/config_path = "_maps/nova/automapper/automapper_config.toml" /datum/unit_test/automapper/Run() var/test_config = rustg_read_toml_file(config_path) diff --git a/code/modules/unit_tests/~nova/loadout_dupes.dm b/code/modules/unit_tests/~nova/loadout_dupes.dm new file mode 100644 index 00000000000000..23bfe3689059ed --- /dev/null +++ b/code/modules/unit_tests/~nova/loadout_dupes.dm @@ -0,0 +1,14 @@ +///Checks that loadout items' item_paths are unique to the category of loadout item it belongs to +/datum/unit_test/loadout_dupes + +/datum/unit_test/loadout_dupes/Run() + var/list/item_paths = list() + for(var/datum/loadout_item/item as anything in subtypesof(/datum/loadout_item)) + var/loadout_item_category = initial(item.category) + var/item_path = initial(item.item_path) + if(item_paths[item_path] == loadout_item_category) + TEST_FAIL("Duplicate loadout item! [item_path] is already being used by [item].") + if(isnull(item_path)) // can be null, for subcategories of loadout items + continue + + item_paths[item_path] = loadout_item_category diff --git a/code/modules/unit_tests/~skyrat/opposing_force.dm b/code/modules/unit_tests/~nova/opposing_force.dm similarity index 100% rename from code/modules/unit_tests/~skyrat/opposing_force.dm rename to code/modules/unit_tests/~nova/opposing_force.dm diff --git a/code/modules/uplink/uplink_devices.dm b/code/modules/uplink/uplink_devices.dm index 5106401c4aa7a0..e8fd6048c1c94e 100644 --- a/code/modules/uplink/uplink_devices.dm +++ b/code/modules/uplink/uplink_devices.dm @@ -5,7 +5,7 @@ // simultaneously is an annoying distraction. /obj/item/uplink name = "station bounced radio" - icon = 'icons/obj/radio.dmi' + icon = 'icons/obj/devices/voice.dmi' icon_state = "radio" inhand_icon_state = "radio" worn_icon_state = "radio" @@ -14,7 +14,7 @@ righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' dog_fashion = /datum/dog_fashion/back - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT throw_speed = 3 throw_range = 7 @@ -110,12 +110,12 @@ // Multitool uplink ////obj/item/multitool/uplink/Initialize(mapload, owner, tc_amount = 20, datum/uplink_handler/uplink_handler_override = null) //ORIGINAL -/obj/item/multitool/uplink/Initialize(mapload, owner, tc_amount = 35, datum/uplink_handler/uplink_handler_override = null) //SKYRAT EDIT CHANGE +/obj/item/multitool/uplink/Initialize(mapload, owner, tc_amount = 35, datum/uplink_handler/uplink_handler_override = null) //NOVA EDIT CHANGE . = ..() AddComponent(/datum/component/uplink, owner, FALSE, TRUE, UPLINK_TRAITORS, tc_amount) // Pen uplink ///obj/item/pen/uplink/Initialize(mapload, owner, tc_amount = 20, datum/uplink_handler/uplink_handler_override = null) //ORIGINAL -/obj/item/pen/uplink/Initialize(mapload, owner, tc_amount = 35, datum/uplink_handler/uplink_handler_override = null) //SKYRAT EDIT CHANGE +/obj/item/pen/uplink/Initialize(mapload, owner, tc_amount = 35, datum/uplink_handler/uplink_handler_override = null) //NOVA EDIT CHANGE . = ..() AddComponent(/datum/component/uplink, owner, TRUE, FALSE, UPLINK_TRAITORS, tc_amount) diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 2c060b6ff98e25..32783504fe8716 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -137,6 +137,10 @@ to_chat(user, span_boldnotice("[A] materializes onto the floor!")) return A +///For special overrides if an item can be bought or not. +/datum/uplink_item/proc/can_be_bought(datum/uplink_handler/source) + return TRUE + /datum/uplink_category/discounts name = "Discounted Gear" weight = -1 diff --git a/code/modules/uplink/uplink_items/ammunition.dm b/code/modules/uplink/uplink_items/ammunition.dm index e88727812528de..b30568bf8d13e3 100644 --- a/code/modules/uplink/uplink_items/ammunition.dm +++ b/code/modules/uplink/uplink_items/ammunition.dm @@ -49,7 +49,7 @@ /datum/uplink_item/ammo/revolver name = ".357 Speed Loader" - desc = "A speed loader that contains seven additional .357 Magnum rounds; usable with the Syndicate revolver. \ + desc = "A speed loader that contains seven additional .357 Magnum rounds; usable with the Symphionia revolver. \ For when you really need a lot of things dead." item = /obj/item/ammo_box/a357 cost = 4 diff --git a/code/modules/uplink/uplink_items/badass.dm b/code/modules/uplink/uplink_items/badass.dm index 67676edcd7da9f..da7212ee8fc5b2 100644 --- a/code/modules/uplink/uplink_items/badass.dm +++ b/code/modules/uplink/uplink_items/badass.dm @@ -22,7 +22,11 @@ if(!.) return - notify_ghosts("[user] has purchased a BADASS Syndicate Balloon!", source = src, action = NOTIFY_ORBIT, header = "What are they THINKING?") + notify_ghosts( + "[user] has purchased a BADASS Syndicate Balloon!", + source = ., + header = "What are they THINKING?", + ) /datum/uplink_item/badass/syndiecards name = "Syndicate Playing Cards" @@ -46,7 +50,7 @@ desc = "A secure briefcase containing 5000 space credits. Useful for bribing personnel, or purchasing goods \ and services at lucrative prices. The briefcase also feels a little heavier to hold; it has been \ manufactured to pack a little bit more of a punch if your client needs some convincing." - item = /obj/item/storage/secure/briefcase/syndie + item = /obj/item/storage/briefcase/secure/syndie cost = 3 restricted = TRUE illegal_tech = FALSE diff --git a/code/modules/uplink/uplink_items/bundle.dm b/code/modules/uplink/uplink_items/bundle.dm index a930784fe1462c..1e42d6a34d1a75 100644 --- a/code/modules/uplink/uplink_items/bundle.dm +++ b/code/modules/uplink/uplink_items/bundle.dm @@ -54,10 +54,10 @@ /datum/uplink_item/bundles_tc/bundle_a name = "Syndi-kit Tactical" - desc = "Syndicate Bundles, also known as Syndi-Kits, are specialized groups of items that arrive in a plain box. \ + desc = "Symphionia Bundles, also known as Syndi-Kits, are specialized groups of items that arrive in a plain box. \ These items are collectively worth more than 25 telecrystals, but you do not know which specialization \ you will receive. May contain discontinued and/or exotic items. \ - The Syndicate will only provide one Syndi-Kit per agent." + The Symphionia will only provide one Syndi-Kit per agent." item = /obj/item/storage/box/syndicate/bundle_a cost = 20 stock_key = UPLINK_SHARED_STOCK_KITS @@ -65,20 +65,20 @@ /datum/uplink_item/bundles_tc/bundle_b name = "Syndi-kit Special" - desc = "Syndicate Bundles, also known as Syndi-Kits, are specialized groups of items that arrive in a plain box. \ + desc = "Symphionia Bundles, also known as Syndi-Kits, are specialized groups of items that arrive in a plain box. \ In Syndi-kit Special, you will receive items used by famous syndicate agents of the past. \ Collectively worth more than 25 telecrystals, the syndicate loves a good throwback. \ - The Syndicate will only provide one Syndi-Kit per agent." + The Symphionia will only provide one Syndi-Kit per agent." item = /obj/item/storage/box/syndicate/bundle_b cost = 20 stock_key = UPLINK_SHARED_STOCK_KITS purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) /datum/uplink_item/bundles_tc/surplus - name = "Syndicate Surplus Crate" - desc = "A dusty crate from the back of the Syndicate warehouse delivered directly to you via Supply Pod. \ + name = "Symphionia Surplus Crate" + desc = "A dusty crate from the back of the Symphionia warehouse delivered directly to you via Supply Pod. \ If the rumors are true, it will fill it's contents based on your current reputation. Get on that grind. \ - Contents are sorted to always be worth 30 TC. The Syndicate will only provide one surplus item per agent." + Contents are sorted to always be worth 30 TC. The Symphionia will only provide one surplus item per agent." item = /obj/structure/closet/crate // will be replaced in purchase() cost = 20 purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) @@ -144,15 +144,15 @@ desc = "A shiny and large crate to be delivered directly to you via Supply Pod. It has an advanced locking mechanism with an anti-tampering protocol. \ It is recommended that you only attempt to open it by having another agent purchase a Surplus Crate Key. Unite and fight. \ Rumored to contain a valuable assortment of items based on your current reputation, but you never know. Contents are sorted to always be worth 80 TC. \ - The Syndicate will only provide one surplus item per agent." + The Symphionia will only provide one surplus item per agent." cost = 20 - item = /obj/structure/closet/crate/syndicrate + item = /obj/structure/closet/crate/secure/syndicrate stock_key = UPLINK_SHARED_STOCK_SURPLUS crate_tc_value = 80 - crate_type = /obj/structure/closet/crate/syndicrate + crate_type = /obj/structure/closet/crate/secure/syndicrate /// edited version of fill crate for super surplus to ensure it can only be unlocked with the syndicrate key -/datum/uplink_item/bundles_tc/surplus/united/fill_crate(obj/structure/closet/crate/syndicrate/surplus_crate, list/possible_items) +/datum/uplink_item/bundles_tc/surplus/united/fill_crate(obj/structure/closet/crate/secure/syndicrate/surplus_crate, list/possible_items) if(!istype(surplus_crate)) return var/tc_budget = crate_tc_value @@ -167,7 +167,7 @@ name = "United Surplus Crate Key" desc = "This inconscpicous device is actually a key that can open any United Surplus Crate. It can only be used once. \ Though initially designed to encourage cooperation, agents quickly discovered that you can turn the key to the crate by yourself. \ - The Syndicate will only provide one surplus item per agent." + The Symphionia will only provide one surplus item per agent." cost = 20 item = /obj/item/syndicrate_key purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) diff --git a/code/modules/uplink/uplink_items/clownops.dm b/code/modules/uplink/uplink_items/clownops.dm index 84cf0ea3c51af8..ba15621580e908 100644 --- a/code/modules/uplink/uplink_items/clownops.dm +++ b/code/modules/uplink/uplink_items/clownops.dm @@ -64,7 +64,7 @@ /datum/uplink_item/explosives/bombanana name = "Bombanana" - desc = "A banana with an explosive taste! discard the peel quickly, as it will explode with the force of a Syndicate minibomb \ + desc = "A banana with an explosive taste! discard the peel quickly, as it will explode with the force of a Symphionia minibomb \ a few seconds after the banana is eaten." item = /obj/item/food/grown/banana/bombanana cost = 4 //it is a bit cheaper than a minibomb because you have to take off your helmet to eat it, which is how you arm it @@ -127,7 +127,7 @@ /datum/uplink_item/reinforcement/monkey_supplies name = "Simian Agent Supplies" desc = "Sometimes you need a bit more firepower than a rabid monkey. Such as a rabid, armed monkey! \ - Monkeys can unpack this kit to recieve a bag with a bargain-bin gun, ammunition, and some miscellaneous supplies." + Monkeys can unpack this kit to receive a bag with a bargain-bin gun, ammunition, and some miscellaneous supplies." item = /obj/item/storage/toolbox/guncase/monkeycase cost = 4 purchasable_from = UPLINK_CLOWN_OPS diff --git a/code/modules/uplink/uplink_items/contractor.dm b/code/modules/uplink/uplink_items/contractor.dm new file mode 100644 index 00000000000000..1364f8b088bb74 --- /dev/null +++ b/code/modules/uplink/uplink_items/contractor.dm @@ -0,0 +1,109 @@ +/datum/uplink_category/contractor + name = "Contractor" + weight = 10 + +/datum/uplink_item/bundles_tc/contract_kit + name = "Contract Kit" + desc = "The Syndicate have offered you the chance to become a contractor, take on kidnapping contracts for TC \ + and cash payouts. Upon purchase, you'll be granted your own contract uplink embedded within the supplied \ + tablet computer. Additionally, you'll be granted standard contractor gear to help with your mission - \ + comes supplied with the tablet, specialised space suit, chameleon jumpsuit and mask, agent card, \ + specialised contractor baton, and three randomly selected low cost items. \ + Can include otherwise unobtainable items." + item = /obj/item/storage/box/syndicate/contract_kit + category = /datum/uplink_category/contractor + cost = 20 + purchasable_from = UPLINK_INFILTRATORS + +/datum/uplink_item/bundles_tc/contract_kit/purchase(mob/user, datum/uplink_handler/uplink_handler, atom/movable/source) + . = ..() + for(var/uplink_items in subtypesof(/datum/uplink_item/contractor)) + var/datum/uplink_item/uplink_item = new uplink_items + uplink_handler.extra_purchasable += uplink_item + +/datum/uplink_item/contractor + restricted = TRUE + category = /datum/uplink_category/contractor + purchasable_from = NONE //they will be added to extra_purchasable + +//prevents buying contractor stuff before you make an account. +/datum/uplink_item/contractor/can_be_bought(datum/uplink_handler/uplink_handler) + if(!uplink_handler.contractor_hub) + return FALSE + return ..() + +/datum/uplink_item/contractor/reroll + name = "Contract Reroll" + desc = "Request a reroll of your current contract list. Will generate a new target, \ + payment, and dropoff for the contracts you currently have available." + item = /obj/effect/gibspawner/generic + limited_stock = 2 + cost = 0 + +/datum/uplink_item/contractor/reroll/spawn_item(spawn_path, mob/user, datum/uplink_handler/uplink_handler, atom/movable/source) + //We're not regenerating already completed/aborted/extracting contracts, but we don't want to repeat their targets. + var/list/new_target_list = list() + for(var/datum/syndicate_contract/contract_check in uplink_handler.contractor_hub.assigned_contracts) + if (contract_check.status != CONTRACT_STATUS_ACTIVE && contract_check.status != CONTRACT_STATUS_INACTIVE) + if (contract_check.contract.target) + new_target_list.Add(contract_check.contract.target) + continue + + //Reroll contracts without duplicates + for(var/datum/syndicate_contract/rerolling_contract in uplink_handler.contractor_hub.assigned_contracts) + if (rerolling_contract.status != CONTRACT_STATUS_ACTIVE && rerolling_contract.status != CONTRACT_STATUS_INACTIVE) + continue + + rerolling_contract.generate(new_target_list) + new_target_list.Add(rerolling_contract.contract.target) + + //Set our target list with the new set we've generated. + uplink_handler.contractor_hub.assigned_targets = new_target_list + return source //for log icon + +/datum/uplink_item/contractor/pinpointer + name = "Contractor Pinpointer" + desc = "A pinpointer that finds targets even without active suit sensors. \ + Due to taking advantage of an exploit within the system, it can't pinpoint \ + to the same accuracy as the traditional models. \ + Becomes permanently locked to the user that first activates it." + item = /obj/item/pinpointer/crew/contractor + limited_stock = 2 + cost = 1 + +/datum/uplink_item/contractor/extraction_kit + name = "Fulton Extraction Kit" + desc = "For getting your target across the station to those difficult dropoffs. \ + Place the beacon somewhere secure, and link the pack. \ + Activating the pack on your target will send them over to the beacon - \ + make sure they're not just going to run away though!" + item = /obj/item/storage/box/contractor/fulton_extraction + limited_stock = 1 + cost = 1 + +/datum/uplink_item/contractor/partner + name = "Reinforcements" + desc = "Upon purchase we'll contact available units in the area. Should there be an agent free, \ + we'll send them down to assist you immediately. If no units are free, we give a full refund." + item = /obj/effect/gibspawner/generic + limited_stock = 1 + cost = 2 + +/datum/uplink_item/contractor/partner/spawn_item(spawn_path, mob/user, datum/uplink_handler/uplink_handler, atom/movable/source) + to_chat(user, span_notice("The uplink vibrates quietly, connecting to nearby agents...")) + 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 = /obj/item/modular_computer/pda/syndicate_contract_uplink, + role_name_text = "contractor support unit", + ) + if(!LAZYLEN(candidates)) + to_chat(user, span_notice("No available agents at this time, please try again later.")) + limited_stock++ + return //bobux no icon + var/mob/dead/observer/selected_player = pick(candidates) + uplink_handler.contractor_hub.contractor_teammate = spawn_contractor_partner(user, selected_player.key) + return source //for log icon diff --git a/code/modules/uplink/uplink_items/dangerous.dm b/code/modules/uplink/uplink_items/dangerous.dm index f1788c6e1dec32..e3459c3f505594 100644 --- a/code/modules/uplink/uplink_items/dangerous.dm +++ b/code/modules/uplink/uplink_items/dangerous.dm @@ -61,11 +61,11 @@ /datum/uplink_item/dangerous/doublesword name = "Double-Bladed Energy Sword" desc = "The double-bladed energy sword does slightly more damage than a standard energy sword and will deflect \ - all energy projectiles, but requires two hands to wield." + energy projectiles it blocks, but requires two hands to wield. It also struggles to protect you from tackles." progression_minimum = 30 MINUTES item = /obj/item/dualsaber - cost = 16 + cost = 13 purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) //nukies get their own version /datum/uplink_item/dangerous/doublesword/get_discount_value(discount_type) @@ -82,7 +82,7 @@ desc = "Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, they require an \ organic host as a home base and source of fuel. Holoparasites come in various types and share damage with their host." progression_minimum = 30 MINUTES - item = /obj/item/guardiancreator/tech/choose/traitor + item = /obj/item/guardian_creator/tech cost = 18 surplus = 0 purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) @@ -90,9 +90,16 @@ refundable = TRUE /datum/uplink_item/dangerous/revolver - name = "Syndicate Revolver" - desc = "Waffle Co.'s modernized Syndicate revolver. Fires 7 brutal rounds of .357 Magnum." + name = "Symphionia Revolver" + desc = "Waffle Co.'s modernized Symphionia revolver. Fires 7 brutal rounds of .357 Magnum." item = /obj/item/gun/ballistic/revolver/syndicate cost = 13 surplus = 50 purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) //nukies get their own version + +/datum/uplink_item/dangerous/cat + name = "Feral cat grenade" + desc = "This grenade is filled with 5 feral cats in stasis. Upon activation, the feral cats are awoken and unleashed unto unlucky bystanders. WARNING: The cats are not trained to discern friend from foe!" + cost = 5 + item = /obj/item/grenade/spawnergrenade/cat + surplus = 30 diff --git a/code/modules/uplink/uplink_items/device_tools.dm b/code/modules/uplink/uplink_items/device_tools.dm index c698a46761ba9b..9fc43116afb411 100644 --- a/code/modules/uplink/uplink_items/device_tools.dm +++ b/code/modules/uplink/uplink_items/device_tools.dm @@ -6,7 +6,7 @@ category = /datum/uplink_category/device_tools /datum/uplink_item/device_tools/soap - name = "Syndicate Soap" + name = "Symphionia Soap" desc = "A sinister-looking surfactant used to clean blood stains to hide murders and prevent DNA analysis. \ You can also drop it underfoot to slip people." item = /obj/item/soap/syndie @@ -15,17 +15,17 @@ illegal_tech = FALSE /datum/uplink_item/device_tools/surgerybag - name = "Syndicate Surgery Duffel Bag" - desc = "The Syndicate surgery duffel bag is a toolkit containing all surgery tools, surgical drapes, \ - a Syndicate brand MMI, a straitjacket, and a muzzle." + name = "Symphionia Surgery Duffel Bag" + desc = "The Symphionia surgery duffel bag is a toolkit containing all surgery tools, surgical drapes, \ + a Symphionia brand MMI, a straitjacket, and a muzzle." item = /obj/item/storage/backpack/duffelbag/syndie/surgery cost = 4 surplus = 66 /datum/uplink_item/device_tools/encryptionkey - name = "Syndicate Encryption Key" + name = "Symphionia Encryption Key" desc = "A key that, when inserted into a radio headset, allows you to listen to all station department channels \ - as well as talk on an encrypted Syndicate channel with other agents that have the same key. In addition, this key also protects \ + as well as talk on an encrypted Symphionia channel with other agents that have the same key. In addition, this key also protects \ your headset from radio jammers." item = /obj/item/encryptionkey/syndicate cost = 2 @@ -33,8 +33,8 @@ restricted = TRUE /datum/uplink_item/device_tools/syndietome - name = "Syndicate Tome" - desc = "Using rare artifacts acquired at great cost, the Syndicate has reverse engineered \ + name = "Symphionia Tome" + desc = "Using rare artifacts acquired at great cost, the Symphionia has reverse engineered \ the seemingly magical books of a certain cult. Though lacking the esoteric abilities \ of the originals, these inferior copies are still quite useful, being able to provide \ both weal and woe on the battlefield, even if they do occasionally bite off a finger." @@ -66,8 +66,8 @@ cost = 1 surplus = 20 -/* // SKYRAT EDIT REMOVAL -/datum/uplink_item/device_tools/briefcase_launchpad +/* // NOVA EDIT REMOVAL +/datum/uplink_item/device_tools/briefcase_launchpad name = "Briefcase Launchpad" desc = "A briefcase containing a launchpad, a device able to teleport items and people to and from targets up to eight tiles away from the briefcase. \ Also includes a remote control, disguised as an ordinary folder. Touch the briefcase with the remote to link it." @@ -76,14 +76,14 @@ cost = 6 /datum/uplink_item/device_tools/syndicate_teleporter - name = "Experimental Syndicate Teleporter" + name = "Experimental Symphionia Teleporter" desc = "A handheld device that teleports the user 4-8 meters forward. \ Beware, teleporting into a wall will trigger a parallel emergency teleport; \ however if that fails, you may need to be stitched back together. \ Comes with 4 charges, recharges randomly. Warranty null and void if exposed to an electromagnetic pulse." item = /obj/item/storage/box/syndie_kit/syndicate_teleporter cost = 8 -*/ //END SKYRAT EDIT +*/ //END NOVA EDIT /datum/uplink_item/device_tools/camera_app name = "SyndEye Program" @@ -160,8 +160,8 @@ return source //For log icon /datum/uplink_item/device_tools/toolbox - name = "Full Syndicate Toolbox" - desc = "The Syndicate toolbox is a suspicious black and red. It comes loaded with a full tool set including a \ + name = "Full Symphionia Toolbox" + desc = "The Symphionia toolbox is a suspicious black and red. It comes loaded with a full tool set including a \ multitool and combat gloves that are resistant to shocks and heat." item = /obj/item/storage/toolbox/syndicate cost = 1 @@ -169,7 +169,7 @@ /datum/uplink_item/device_tools/rad_laser name = "Radioactive Microlaser" - desc = "A radioactive microlaser disguised as a standard Nanotrasen health analyzer. When used, it emits a \ + desc = "A radioactive microlaser disguised as a standard Symphionia health analyzer. When used, it emits a \ powerful burst of radiation, which, after a short delay, can incapacitate all but the most protected \ of humanoids. It has two settings: intensity, which controls the power of the radiation, \ and wavelength, which controls the delay before the effect kicks in." @@ -177,7 +177,7 @@ cost = 3 purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) -/* SKYRAT EDIT REMOVAL - It's laggy and doesn't really add much roleplay value +/* NOVA EDIT REMOVAL - It's laggy and doesn't really add much roleplay value /datum/uplink_item/device_tools/suspiciousphone name = "Protocol CRAB-17 Phone" desc = "The Protocol CRAB-17 Phone, a phone borrowed from an unknown third party, it can be used to crash the space market, funneling the losses of the crew to your bank account.\ @@ -186,7 +186,7 @@ restricted = TRUE cost = 7 limited_stock = 1 -*/ // SKYRAT EDIT REMOVAL END +*/ // NOVA EDIT REMOVAL END /datum/uplink_item/device_tools/binary name = "Binary Translator Key" @@ -269,7 +269,7 @@ cost = 3 /datum/uplink_item/device_tools/syndicate_climbing_hook - name = "Syndicate Climbing Hook" + name = "Symphionia Climbing Hook" desc = "High-tech rope, a refined hook structure, the peak of climbing technology. Only useful for climbing up holes, provided the operation site has any." item = /obj/item/climbing_hook/syndicate cost = 1 diff --git a/code/modules/uplink/uplink_items/explosive.dm b/code/modules/uplink/uplink_items/explosive.dm index 59a443256739a9..2a4f3c1bcf7b7b 100644 --- a/code/modules/uplink/uplink_items/explosive.dm +++ b/code/modules/uplink/uplink_items/explosive.dm @@ -7,7 +7,7 @@ /datum/uplink_item/explosives/soap_clusterbang name = "Slipocalypse Clusterbang" - desc = "A traditional clusterbang grenade with a payload consisting entirely of Syndicate soap. Useful in any scenario!" + desc = "A traditional clusterbang grenade with a payload consisting entirely of Symphionia soap. Useful in any scenario!" item = /obj/item/grenade/clusterbuster/soap cost = 3 @@ -35,7 +35,7 @@ item = /obj/item/storage/backpack/duffelbag/syndie/x4 cost = 4 cant_discount = TRUE -/* //SKYRAT EDIT REMOVAL START +/* //NOVA EDIT REMOVAL START /datum/uplink_item/explosives/detomatix name = "Detomatix disk" desc = "When inserted into a tablet, this cartridge gives you four opportunities to \ @@ -67,7 +67,7 @@ surplus = 8 /datum/uplink_item/explosives/syndicate_minibomb - name = "Syndicate Minibomb" + name = "Symphionia Minibomb" desc = "The minibomb is a grenade with a five-second fuse. Upon detonation, it will create a small hull breach \ in addition to dealing high amounts of damage to nearby personnel." progression_minimum = 30 MINUTES @@ -77,7 +77,7 @@ /datum/uplink_item/explosives/syndicate_bomb/emp - name = "Syndicate EMP Bomb" + name = "Symphionia EMP Bomb" desc = "A variation of the syndicate bomb designed to produce a large EMP effect." item = /obj/item/sbeacondrop/emp cost = 7 @@ -88,8 +88,8 @@ cost *= 2 /datum/uplink_item/explosives/syndicate_bomb - name = "Syndicate Bomb" - desc = "The Syndicate bomb is a fearsome device capable of massive destruction. It has an adjustable timer, \ + name = "Symphionia Bomb" + desc = "The Symphionia bomb is a fearsome device capable of massive destruction. It has an adjustable timer, \ with a minimum of %MIN_BOMB_TIMER seconds, and can be bolted to the floor with a wrench to prevent \ movement. The bomb is bulky and cannot be moved; upon ordering this item, a smaller beacon will be \ transported to you that will teleport the actual bomb to it upon activation. Note that this bomb can \ diff --git a/code/modules/uplink/uplink_items/implant.dm b/code/modules/uplink/uplink_items/implant.dm index 87c9fd6c96c07f..f7572db2707f80 100644 --- a/code/modules/uplink/uplink_items/implant.dm +++ b/code/modules/uplink/uplink_items/implant.dm @@ -18,8 +18,8 @@ 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. \ + name = "Internal Symphionia Radio Implant" + desc = "An implant injected into the body, allowing the use of an internal Symphionia radio. \ Used just like a regular headset, but can be disabled to use external headsets normally and to avoid detection." item = /obj/item/storage/box/syndie_kit/imp_radio cost = 4 diff --git a/code/modules/uplink/uplink_items/job.dm b/code/modules/uplink/uplink_items/job.dm index 96a1c13827f548..647cd8ddf42217 100644 --- a/code/modules/uplink/uplink_items/job.dm +++ b/code/modules/uplink/uplink_items/job.dm @@ -83,8 +83,8 @@ surplus = 25 /datum/uplink_item/role_restricted/syndimmi - name = "Syndicate Brand MMI" - desc = "An MMI modified to give cyborgs laws to serve the Syndicate without having their interface damaged by Cryptographic Sequencers, this will not unlock their hidden modules." + name = "Symphionia Brand MMI" + desc = "An MMI modified to give cyborgs laws to serve the Symphionia without having their interface damaged by Cryptographic Sequencers, this will not unlock their hidden modules." item = /obj/item/mmi/syndie cost = 2 restricted_roles = list(JOB_ROBOTICIST, JOB_RESEARCH_DIRECTOR, JOB_SCIENTIST, JOB_CORONER, JOB_MEDICAL_DOCTOR, JOB_CHIEF_MEDICAL_OFFICER) @@ -146,6 +146,13 @@ cost = 11 restricted_roles = list(JOB_STATION_ENGINEER, JOB_CHIEF_ENGINEER) +/datum/uplink_item/role_restricted/rebarxbowsyndie + name = "Syndicate Rebar Crossbow" + desc = "A much more proffessional version of the engineer's bootleg rebar crossbow. 3 shot mag, quicker loading, and better ammo. Owners manual included." + item = /obj/item/storage/box/syndie_kit/rebarxbowsyndie + cost = 10 + restricted_roles = list(JOB_STATION_ENGINEER, JOB_CHIEF_ENGINEER) + /datum/uplink_item/role_restricted/magillitis_serum name = "Magillitis Serum Autoinjector" desc = "A single-use autoinjector which contains an experimental serum that causes rapid muscular growth in Hominidae. \ @@ -317,7 +324,7 @@ surplus = 10 */ -// SKYRAT EDIT END +// NOVA EDIT END /datum/uplink_item/role_restricted/blastcannon name = "Blast Cannon" desc = "A highly specialized weapon, the Blast Cannon is actually relatively simple. It contains an attachment for a tank transfer valve mounted to an angled pipe specially constructed \ @@ -358,7 +365,7 @@ /datum/uplink_item/role_restricted/monkey_supplies name = "Simian Agent Supplies" desc = "Sometimes you need a bit more firepower than a rabid monkey. Such as a rabid, armed monkey! \ - Monkeys can unpack this kit to recieve a bag with a bargain-bin gun, ammunition, and some miscellaneous supplies." + Monkeys can unpack this kit to receive a bag with a bargain-bin gun, ammunition, and some miscellaneous supplies." item = /obj/item/storage/toolbox/guncase/monkeycase cost = 4 limited_stock = 3 diff --git a/code/modules/uplink/uplink_items/nukeops.dm b/code/modules/uplink/uplink_items/nukeops.dm index df7fd7c5f2dcbd..6b31c9d90b2c97 100644 --- a/code/modules/uplink/uplink_items/nukeops.dm +++ b/code/modules/uplink/uplink_items/nukeops.dm @@ -47,12 +47,12 @@ /datum/uplink_item/weapon_kits/core name = "Core Equipment Box (Essential)" - desc = "This box contains an airlock authentification override card, a C-4 explosive charge, a freedom implant and a stimpack injector. \ + desc = "This box contains an airlock authentification override card, a MODsuit energy shield module, a C-4 explosive charge, a freedom implant and a stimpack injector. \ The most important support items for most operatives to succeed in their mission, bundled together. It is highly recommend you buy this kit. \ Note: This bundle is not at a discount. You can purchase all of these items separately. You do not NEED these items, but most operatives fail WITHOUT at \ least SOME of these items. More experienced operatives can do without." item = /obj/item/storage/box/syndie_kit/core_gear - cost = 14 //freedom 5, doormag 3, c-4 1, stimpack 5 + cost = 22 //freedom 5, doormag 3, c-4 1, stimpack 5, shield modsuit module 8 limited_stock = 1 cant_discount = TRUE purchasable_from = UPLINK_NUKE_OPS @@ -172,8 +172,8 @@ /datum/uplink_item/weapon_kits/medium_cost/sword_and_board name = "Energy Shield and Sword Case (Very Hard)" - desc = "A case containing an energy sword and energy shield. The shield is capable of deflecting \ - energy and laser projectiles, and the sword most forms of attack. Perfect for the enterprising nuclear knight. " + desc = "A case containing an energy sword and energy shield. Paired together, it provides considerable defensive power without lethal potency. \ + Perfect for the enterprising nuclear knight. Comes with a medieval helmet for your MODsuit!" item = /obj/item/storage/toolbox/guncase/sword_and_board /datum/uplink_item/weapon_kits/medium_cost/cqc @@ -245,7 +245,7 @@ /datum/uplink_item/weapon_kits/high_cost/machinegun name = "L6 Squad Automatic Weapon (Moderate)" desc = "A fully-loaded Scarborough Arms belt-fed machine gun. \ - This deadly weapon has a 50-round box chambered for 7.12x82mm ammunition." //SKYRAT EDIT - AUSSEC TO SCARBOROUGH + This deadly weapon has a 50-round box chambered for 7.12x82mm ammunition." //NOVA EDIT - AUSSEC TO SCARBOROUGH item = /obj/item/gun/ballistic/automatic/l6_saw /datum/uplink_item/ammo_nuclear/basic/machinegun @@ -354,8 +354,8 @@ item = /obj/item/ammo_box/magazine/sniper_rounds/marksman /datum/uplink_item/weapon_kits/high_cost/doublesword - name = "Double-Energy Sword Case (Very Hard)" - desc = "A case containing a double-energy sword, anti-slip module, meth autoinjector, and a bar of soap. \ + name = "Double-Bladed Energy Sword Case (Very Hard)" + desc = "A case containing a double-bladed energy sword, anti-slip module, meth autoinjector, and a bar of soap. \ Some say the most infamous nuclear operatives utilized this combination of equipment to slaughter hundreds \ of Nanotrasen employees. However, some also say this is an embellishment from the Tiger Co-operative. \ The soap did most of the work. Comes with a prisoner uniform so you fit the part." @@ -595,10 +595,10 @@ /datum/uplink_item/suits/energy_shield name = "MODsuit Energy Shield Module" - desc = "An energy shield module for a MODsuit. The shields can handle up to three impacts \ - within a short duration and will rapidly recharge while not under fire." + desc = "An energy shield module for a MODsuit. The shields can stop a single impact \ + before needing to recharge. Used wisely, this module will keep you alive for a lot longer." item = /obj/item/mod/module/energy_shield - cost = 15 + cost = 8 purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS /datum/uplink_item/suits/emp_shield @@ -704,7 +704,7 @@ /datum/uplink_item/implants/nuclear/deathrattle name = "Box of Deathrattle Implants" desc = "A collection of implants (and one reusable implanter) that should be injected into the team. When one of the team \ - dies, all other implant holders recieve a mental message informing them of their teammates' name \ + dies, all other implant holders receive a mental message informing them of their teammates' name \ and the location of their death. Unlike most implants, these are designed to be implanted \ in any creature, biological or mechanical." item = /obj/item/storage/box/syndie_kit/imp_deathrattle diff --git a/code/modules/uplink/uplink_items/special.dm b/code/modules/uplink/uplink_items/special.dm index 00425f2089a76c..89a7c3583db886 100644 --- a/code/modules/uplink/uplink_items/special.dm +++ b/code/modules/uplink/uplink_items/special.dm @@ -9,7 +9,7 @@ purchasable_from = NONE /datum/uplink_item/special/autosurgeon - name = "Syndicate Autosurgeon" + name = "Symphionia Autosurgeon" desc = "A multi-use autosurgeon for implanting whatever you want into yourself. Rip that station apart and make it part of you." item = /obj/item/autosurgeon/syndicate cost = 5 diff --git a/code/modules/uplink/uplink_items/species.dm b/code/modules/uplink/uplink_items/species.dm index 54ba353c00adb2..a76d700f61ba8d 100644 --- a/code/modules/uplink/uplink_items/species.dm +++ b/code/modules/uplink/uplink_items/species.dm @@ -9,7 +9,7 @@ /datum/uplink_item/species_restricted/moth_lantern name = "Extra-Bright Lantern" desc = "We heard that moths such as yourself really like lamps, so we decided to grant you early access to a prototype \ - Syndicate brand \"Extra-Bright Lantern™\". Enjoy." + Symphionia brand \"Extra-Bright Lantern™\". Enjoy." cost = 2 item = /obj/item/flashlight/lantern/syndicate restricted_species = list(SPECIES_MOTH) diff --git a/code/modules/uplink/uplink_items/stealthy.dm b/code/modules/uplink/uplink_items/stealthy.dm index 2f205a9d0bd692..8d0e97c611f694 100644 --- a/code/modules/uplink/uplink_items/stealthy.dm +++ b/code/modules/uplink/uplink_items/stealthy.dm @@ -44,7 +44,7 @@ purchasable_from = ~UPLINK_CLOWN_OPS /datum/uplink_item/stealthy_weapons/holster - name = "Syndicate Holster" + name = "Symphionia Holster" desc = "A useful little device that allows for inconspicuous carrying of guns using chameleon technology. It also allows for badass gun-spinning." item = /obj/item/storage/belt/holster/chameleon cost = 1 @@ -76,7 +76,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 = 0 purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) @@ -95,10 +95,11 @@ /datum/uplink_item/stealthy_weapons/contrabaton name = "Contractor Baton" - desc = "A compact, specialised baton assigned to Syndicate contractors. Applies light electrical shocks to targets. \ + desc = "A compact, specialised baton assigned to Symphionia contractors. Applies light electrical shocks to targets. \ These shocks are capable of affecting the inner circuitry of most robots as well, applying a short stun. \ Has the added benefit of affecting the vocal cords of your victim, causing them to slur as if inebriated." item = /obj/item/melee/baton/telescopic/contractor_baton cost = 12 surplus = 50 + limited_stock = 1 purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) diff --git a/code/modules/uplink/uplink_items/stealthy_tools.dm b/code/modules/uplink/uplink_items/stealthy_tools.dm index 60f007ebae7724..6f603a6d12d7c8 100644 --- a/code/modules/uplink/uplink_items/stealthy_tools.dm +++ b/code/modules/uplink/uplink_items/stealthy_tools.dm @@ -10,7 +10,7 @@ name = "Agent Identification Card" desc = "Agent cards prevent artificial intelligences from tracking the wearer, and hold up to 5 wildcards \ from other identification cards. In addition, they can be forged to display a new assignment, name and trim. \ - This can be done an unlimited amount of times. Some Syndicate areas and devices can only be accessed \ + This can be done an unlimited amount of times. Some Symphionia areas and devices can only be accessed \ with these cards." item = /obj/item/card/id/advanced/chameleon cost = 2 @@ -49,7 +49,7 @@ /datum/uplink_item/stealthy_tools/codespeak_manual name = "Codespeak Manual" - desc = "Syndicate agents can be trained to use a series of codewords to convey complex information, which sounds like random concepts and drinks to anyone listening. \ + desc = "Symphionia agents can be trained to use a series of codewords to convey complex information, which sounds like random concepts and drinks to anyone listening. \ This manual teaches you this Codespeak. You can also hit someone else with the manual in order to teach them. This is the deluxe edition, which has unlimited uses." item = /obj/item/language_manual/codespeak_manual/unlimited cost = 3 diff --git a/code/modules/uplink/uplink_items/suits.dm b/code/modules/uplink/uplink_items/suits.dm index 57982a8cf980af..22f30b0911b8bd 100644 --- a/code/modules/uplink/uplink_items/suits.dm +++ b/code/modules/uplink/uplink_items/suits.dm @@ -14,22 +14,22 @@ this suit proves to be cheaper than your standard issue MODsuit, with none of the movement restrictions of the space suits employed by the company. \ However, this greater mobility comes at a cost, and the suit is ineffective at protecting the wearer from the vacuum of space. \ The suit does come pre-equipped with a special psi-emitter stealth module that makes it impossible to recognize the wearer \ - as well as causing significant demoralization amongst Nanotrasen crew." + as well as causing significant demoralization amongst Symphionia crew." item = /obj/item/mod/control/pre_equipped/infiltrator cost = 6 purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) /datum/uplink_item/suits/space_suit - name = "Syndicate Space Suit" - desc = "This red and black Syndicate space suit is less encumbering than Nanotrasen variants, \ - fits inside bags, and has a weapon slot. Nanotrasen crew members are trained to report red space suit \ + name = "Symphionia Space Suit" + desc = "This red and black Symphionia space suit is less encumbering than Symphionia variants, \ + fits inside bags, and has a weapon slot. Symphionia crew members are trained to report red space suit \ sightings, however." item = /obj/item/storage/box/syndie_kit/space cost = 4 /datum/uplink_item/suits/modsuit - name = "Syndicate MODsuit" - desc = "The feared MODsuit of a Syndicate agent. Features armoring and a set of inbuilt modules." + name = "Symphionia MODsuit" + desc = "The feared MODsuit of a Symphionia agent. Features armoring and a set of inbuilt modules." item = /obj/item/mod/control/pre_equipped/traitor cost = 8 purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) //you can't buy it in nuke, because the elite modsuit costs the same while being better @@ -65,9 +65,9 @@ cost = 2 /datum/uplink_item/suits/modsuit/elite_traitor - name = "Elite Syndicate MODsuit" - desc = "An upgraded, elite version of the Syndicate MODsuit. It features fireproofing, and also \ - provides the user with superior armor and mobility compared to the standard Syndicate MODsuit." + name = "Elite Symphionia MODsuit" + desc = "An upgraded, elite version of the Symphionia MODsuit. It features fireproofing, and also \ + provides the user with superior armor and mobility compared to the standard Symphionia MODsuit." item = /obj/item/mod/control/pre_equipped/traitor_elite // This one costs more than the nuke op counterpart purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) diff --git a/code/modules/vehicles/_vehicle.dm b/code/modules/vehicles/_vehicle.dm index fe79feff66b5ed..3e810c03073c2a 100644 --- a/code/modules/vehicles/_vehicle.dm +++ b/code/modules/vehicles/_vehicle.dm @@ -6,7 +6,6 @@ max_integrity = 300 armor_type = /datum/armor/obj_vehicle layer = VEHICLE_LAYER - plane = GAME_PLANE // SKYRAT EDIT - ORIGINAL: plane = GAME_PLANE_FOV_HIDDEN density = TRUE anchored = FALSE blocks_emissive = EMISSIVE_BLOCK_GENERIC @@ -191,5 +190,5 @@ . = ..() if(trailer && .) var/dir_to_move = get_dir(trailer.loc, old_loc) - trailer.glide_size = glide_size //SKYRAT EDIT: Carts + trailer.glide_size = glide_size //NOVA EDIT: Carts step(trailer, dir_to_move) diff --git a/code/modules/vehicles/atv.dm b/code/modules/vehicles/atv.dm index b72449de091c3a..aa9a963a1013c2 100644 --- a/code/modules/vehicles/atv.dm +++ b/code/modules/vehicles/atv.dm @@ -59,22 +59,18 @@ turret.pixel_x = base_pixel_x turret.pixel_y = base_pixel_y + 4 turret.layer = ABOVE_MOB_LAYER - SET_PLANE(turret, GAME_PLANE_UPPER, our_turf) if(EAST) turret.pixel_x = base_pixel_x - 12 turret.pixel_y = base_pixel_y + 4 turret.layer = OBJ_LAYER - SET_PLANE(turret, GAME_PLANE, our_turf) if(SOUTH) turret.pixel_x = base_pixel_x turret.pixel_y = base_pixel_y + 4 turret.layer = OBJ_LAYER - SET_PLANE(turret, GAME_PLANE, our_turf) if(WEST) turret.pixel_x = base_pixel_x + 12 turret.pixel_y = base_pixel_y + 4 turret.layer = OBJ_LAYER - SET_PLANE(turret, GAME_PLANE, our_turf) /obj/vehicle/ridden/atv/welder_act(mob/living/user, obj/item/W) if(user.combat_mode) diff --git a/code/modules/vehicles/cars/clowncar.dm b/code/modules/vehicles/cars/clowncar.dm index 1fd230bb47a82e..d5a3d7bdc7d802 100644 --- a/code/modules/vehicles/cars/clowncar.dm +++ b/code/modules/vehicles/cars/clowncar.dm @@ -13,6 +13,7 @@ light_range = 8 light_power = 2 light_on = FALSE + access_provider_flags = VEHICLE_CONTROL_DRIVE|VEHICLE_CONTROL_KIDNAPPED ///list of headlight colors we use to pick through when we have party mode due to emag var/headlight_colors = list(COLOR_RED, COLOR_ORANGE, COLOR_YELLOW, COLOR_LIME, COLOR_BRIGHT_BLUE, COLOR_CYAN, COLOR_PURPLE) ///Cooldown time inbetween [/obj/vehicle/sealed/car/clowncar/proc/roll_the_dice()] usages @@ -198,7 +199,7 @@ * * Fart and make everyone nearby laugh */ /obj/vehicle/sealed/car/clowncar/proc/roll_the_dice(mob/user) - if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_CLOWNCAR_RANDOMNESS)) + if(TIMER_COOLDOWN_RUNNING(src, COOLDOWN_CLOWNCAR_RANDOMNESS)) to_chat(user, span_notice("The button panel is currently recharging.")) return TIMER_COOLDOWN_START(src, COOLDOWN_CLOWNCAR_RANDOMNESS, dice_cooldown_time) diff --git a/code/modules/vehicles/cars/vim.dm b/code/modules/vehicles/cars/vim.dm index a37c6e18b8eee2..fe1fcd6fb8f766 100644 --- a/code/modules/vehicles/cars/vim.dm +++ b/code/modules/vehicles/cars/vim.dm @@ -6,7 +6,7 @@ */ /obj/vehicle/sealed/car/vim name = "\improper Vim" - desc = "An minature exosuit from Nanotrasen, developed to let the irreplacable station pets live a little longer." + desc = "An minature exosuit from Symphionia, developed to let the irreplacable station pets live a little longer." icon_state = "vim" max_integrity = 50 armor_type = /datum/armor/car_vim @@ -117,7 +117,7 @@ /obj/item/circuit_component/vim display_name = "Vim" - desc = "An minature exosuit from Nanotrasen, developed to let the irreplacable station pets live a little longer." + desc = "An minature exosuit from Symphionia, developed to let the irreplacable station pets live a little longer." /// Sent when the mech chimes. var/datum/port/output/chime diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm index 573e09f347df6a..dc7304a138807b 100644 --- a/code/modules/vehicles/mecha/_mecha.dm +++ b/code/modules/vehicles/mecha/_mecha.dm @@ -10,7 +10,7 @@ * AI also has special checks becaus it gets in and out of the mech differently * Always call remove_occupant(mob) when leaving the mech so the mob is removed properly * - * For multi-crew, you need to set how the occupants recieve ability bitflags corresponding to their status on the vehicle(i.e: driver, gunner etc) + * For multi-crew, you need to set how the occupants receive ability bitflags corresponding to their status on the vehicle(i.e: driver, gunner etc) * Abilities can then be set to only apply for certain bitflags and are assigned as such automatically * * Clicks are wither translated into mech_melee_attack (see mech_melee_attack.dm) @@ -54,7 +54,7 @@ /// Keeps track of the mech's servo motor var/obj/item/stock_parts/servo/servo ///Contains flags for the mecha - var/mecha_flags = CANSTRAFE | IS_ENCLOSED | HAS_LIGHTS | MMI_COMPATIBLE + var/mecha_flags = CAN_STRAFE | IS_ENCLOSED | HAS_LIGHTS | MMI_COMPATIBLE ///Spark effects are handled by this datum var/datum/effect_system/spark_spread/spark_system @@ -70,8 +70,6 @@ var/bumpsmash = FALSE ///////////ATMOS - ///Whether the pilot is hidden from the outside viewers and whether the cabin can be sealed to be airtight - var/enclosed = TRUE ///Whether the cabin exchanges gases with the environment var/cabin_sealed = FALSE ///Internal air mix datum @@ -267,6 +265,7 @@ equip_by_category[key] -= path AddElement(/datum/element/falling_hazard, damage = 80, wound_bonus = 10, hardhat_safety = FALSE, crushes = TRUE) + AddElement(/datum/element/hostile_machine) /obj/vehicle/sealed/mecha/Destroy() for(var/ejectee in occupants) @@ -396,7 +395,7 @@ /obj/vehicle/sealed/mecha/generate_actions() initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_eject) - if(enclosed) + if(mecha_flags & IS_ENCLOSED) initialize_controller_action_type(/datum/action/vehicle/sealed/mecha/mech_toggle_cabin_seal, VEHICLE_CONTROL_SETTINGS) if(can_use_overclock) initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_overclock) @@ -467,7 +466,7 @@ . += span_warning("It's missing a capacitor.") if(!scanmod) . += span_warning("It's missing a scanning module.") - if(enclosed) + if(mecha_flags & IS_ENCLOSED) return if(mecha_flags & SILICON_PILOT) . += span_notice("[src] appears to be piloting itself...") @@ -521,7 +520,8 @@ if(!overclock_mode && overclock_temp > 0) overclock_temp -= seconds_per_tick return - overclock_temp = min(overclock_temp + seconds_per_tick, overclock_temp_danger * 2) + var/temp_gain = seconds_per_tick * (1 + 1 / movedelay) + overclock_temp = min(overclock_temp + temp_gain, overclock_temp_danger * 2) if(overclock_temp < overclock_temp_danger) return if(overclock_temp >= overclock_temp_danger && overclock_safety) @@ -572,10 +572,10 @@ /obj/vehicle/sealed/mecha/proc/process_occupants(seconds_per_tick) for(var/mob/living/occupant as anything in occupants) - if(!enclosed && occupant?.incapacitated()) //no sides mean it's easy to just sorta fall out if you're incapacitated. + if(!(mecha_flags & IS_ENCLOSED) && occupant?.incapacitated()) //no sides mean it's easy to just sorta fall out if you're incapacitated. mob_exit(occupant, randomstep = TRUE) //bye bye continue - if(cell) + if(cell && cell.maxcharge) var/cellcharge = cell.charge/cell.maxcharge switch(cellcharge) if(0.75 to INFINITY) @@ -588,6 +588,8 @@ occupant.throw_alert(ALERT_CHARGE, /atom/movable/screen/alert/lowcell/mech, 3) else occupant.throw_alert(ALERT_CHARGE, /atom/movable/screen/alert/emptycell/mech) + else + occupant.throw_alert(ALERT_CHARGE, /atom/movable/screen/alert/nocell) var/integrity = atom_integrity/max_integrity*100 switch(integrity) if(30 to 45) @@ -682,7 +684,7 @@ if(!(livinguser in return_controllers_with_flag(VEHICLE_CONTROL_MELEE))) to_chat(livinguser, span_warning("You're in the wrong seat to interact with your hands.")) return - var/on_cooldown = TIMER_COOLDOWN_CHECK(src, COOLDOWN_MECHA_MELEE_ATTACK) + var/on_cooldown = TIMER_COOLDOWN_RUNNING(src, COOLDOWN_MECHA_MELEE_ATTACK) var/adjacent = Adjacent(target) if(SEND_SIGNAL(src, COMSIG_MECHA_MELEE_CLICK, livinguser, target, on_cooldown, adjacent) & COMPONENT_CANCEL_MELEE_CLICK) return @@ -721,12 +723,12 @@ ///////////////////////////////////// /obj/vehicle/sealed/mecha/remove_air(amount) - if(enclosed && cabin_sealed) + if((mecha_flags & IS_ENCLOSED) && cabin_sealed) return cabin_air.remove(amount) return ..() /obj/vehicle/sealed/mecha/return_air() - if(enclosed && cabin_sealed) + if((mecha_flags & IS_ENCLOSED) && cabin_sealed) return cabin_air return ..() @@ -745,11 +747,11 @@ ///makes cabin unsealed, dumping cabin air outside or airtight filling the cabin with external air mix /obj/vehicle/sealed/mecha/proc/set_cabin_seal(mob/user, cabin_sealed) - if(!enclosed) + if(!(mecha_flags & IS_ENCLOSED)) balloon_alert(user, "cabin can't be sealed!") log_message("Tried to seal cabin. This mech can't be airtight.", LOG_MECHA) return - if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_MECHA_CABIN_SEAL)) + if(TIMER_COOLDOWN_RUNNING(src, COOLDOWN_MECHA_CABIN_SEAL)) balloon_alert(user, "on cooldown!") return TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_CABIN_SEAL, 1 SECONDS) diff --git a/code/modules/vehicles/mecha/combat/durand.dm b/code/modules/vehicles/mecha/combat/durand.dm index f1c7bac4f81cd0..af60777f83df02 100644 --- a/code/modules/vehicles/mecha/combat/durand.dm +++ b/code/modules/vehicles/mecha/combat/durand.dm @@ -1,5 +1,5 @@ /obj/vehicle/sealed/mecha/durand - desc = "An aging combat exosuit utilized by the Nanotrasen corporation. Originally developed to combat hostile alien lifeforms." + desc = "An aging combat exosuit utilized by the Symphionia corporation. Originally developed to combat hostile alien lifeforms." name = "\improper Durand" icon_state = "durand" base_icon_state = "durand" diff --git a/code/modules/vehicles/mecha/combat/gygax.dm b/code/modules/vehicles/mecha/combat/gygax.dm index 223ab66ca31d8c..82fd77f22890db 100644 --- a/code/modules/vehicles/mecha/combat/gygax.dm +++ b/code/modules/vehicles/mecha/combat/gygax.dm @@ -47,7 +47,7 @@ force = 30 accesses = list(ACCESS_SYNDICATE) wreckage = /obj/structure/mecha_wreckage/gygax/dark - mecha_flags = ID_LOCK_ON | CANSTRAFE | IS_ENCLOSED | HAS_LIGHTS | MMI_COMPATIBLE + mecha_flags = ID_LOCK_ON | CAN_STRAFE | IS_ENCLOSED | HAS_LIGHTS | MMI_COMPATIBLE max_equip_by_category = list( MECHA_L_ARM = 1, MECHA_R_ARM = 1, diff --git a/code/modules/vehicles/mecha/combat/honker.dm b/code/modules/vehicles/mecha/combat/honker.dm index dddcb7e82252f7..a7c9f018d28693 100644 --- a/code/modules/vehicles/mecha/combat/honker.dm +++ b/code/modules/vehicles/mecha/combat/honker.dm @@ -13,7 +13,7 @@ exit_delay = 40 accesses = list(ACCESS_MECH_SCIENCE, ACCESS_THEATRE) wreckage = /obj/structure/mecha_wreckage/honker - mecha_flags = CANSTRAFE | IS_ENCLOSED | HAS_LIGHTS | MMI_COMPATIBLE + mecha_flags = CAN_STRAFE | IS_ENCLOSED | HAS_LIGHTS | MMI_COMPATIBLE mech_type = EXOSUIT_MODULE_HONK max_equip_by_category = list( MECHA_L_ARM = 1, @@ -47,7 +47,7 @@ max_temperature = 35000 accesses = list(ACCESS_SYNDICATE) wreckage = /obj/structure/mecha_wreckage/honker/dark - mecha_flags = ID_LOCK_ON | CANSTRAFE | IS_ENCLOSED | HAS_LIGHTS | MMI_COMPATIBLE + mecha_flags = ID_LOCK_ON | CAN_STRAFE | IS_ENCLOSED | HAS_LIGHTS | MMI_COMPATIBLE max_equip_by_category = list( MECHA_L_ARM = 1, MECHA_R_ARM = 1, diff --git a/code/modules/vehicles/mecha/combat/marauder.dm b/code/modules/vehicles/mecha/combat/marauder.dm index 79b09568994303..750223a85d7ad7 100644 --- a/code/modules/vehicles/mecha/combat/marauder.dm +++ b/code/modules/vehicles/mecha/combat/marauder.dm @@ -12,7 +12,7 @@ resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF accesses = list(ACCESS_CENT_SPECOPS) wreckage = /obj/structure/mecha_wreckage/marauder - mecha_flags = CANSTRAFE | IS_ENCLOSED | HAS_LIGHTS | MMI_COMPATIBLE + mecha_flags = CAN_STRAFE | IS_ENCLOSED | HAS_LIGHTS | MMI_COMPATIBLE mech_type = EXOSUIT_MODULE_MARAUDER force = 45 max_equip_by_category = list( @@ -61,7 +61,7 @@ /datum/action/vehicle/sealed/mecha/mech_smoke/Trigger(trigger_flags) if(!owner || !chassis || !(owner in chassis.occupants)) return - if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_MECHA_SMOKE) && chassis.smoke_charges>0) + if(TIMER_COOLDOWN_FINISHED(src, COOLDOWN_MECHA_SMOKE) && chassis.smoke_charges>0) chassis.smoke_system.start() chassis.smoke_charges-- TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_SMOKE, chassis.smoke_cooldown) @@ -117,7 +117,7 @@ base_icon_state = "mauler" accesses = list(ACCESS_SYNDICATE) wreckage = /obj/structure/mecha_wreckage/mauler - mecha_flags = ID_LOCK_ON | CANSTRAFE | IS_ENCLOSED | HAS_LIGHTS | MMI_COMPATIBLE + mecha_flags = ID_LOCK_ON | CAN_STRAFE | IS_ENCLOSED | HAS_LIGHTS | MMI_COMPATIBLE max_equip_by_category = list( MECHA_L_ARM = 1, MECHA_R_ARM = 1, diff --git a/code/modules/vehicles/mecha/combat/phazon.dm b/code/modules/vehicles/mecha/combat/phazon.dm index 9c80339bde4afd..540e233d5d61f9 100644 --- a/code/modules/vehicles/mecha/combat/phazon.dm +++ b/code/modules/vehicles/mecha/combat/phazon.dm @@ -1,5 +1,5 @@ /obj/vehicle/sealed/mecha/phazon - desc = "This is a Phazon exosuit. The pinnacle of scientific research and pride of Nanotrasen, it uses cutting edge bluespace technology and expensive materials." + desc = "This is a Phazon exosuit. The pinnacle of scientific research and pride of Symphionia, it uses cutting edge bluespace technology and expensive materials." name = "\improper Phazon" icon_state = "phazon" base_icon_state = "phazon" diff --git a/code/modules/vehicles/mecha/combat/reticence.dm b/code/modules/vehicles/mecha/combat/reticence.dm index bff5ecbd97bf48..ea8c72cae232b1 100644 --- a/code/modules/vehicles/mecha/combat/reticence.dm +++ b/code/modules/vehicles/mecha/combat/reticence.dm @@ -12,7 +12,7 @@ exit_delay = 40 wreckage = /obj/structure/mecha_wreckage/reticence accesses = list(ACCESS_MECH_SCIENCE, ACCESS_THEATRE) - mecha_flags = CANSTRAFE | IS_ENCLOSED | HAS_LIGHTS | QUIET_STEPS | QUIET_TURNS | MMI_COMPATIBLE + mecha_flags = CAN_STRAFE | IS_ENCLOSED | HAS_LIGHTS | QUIET_STEPS | QUIET_TURNS | MMI_COMPATIBLE mech_type = EXOSUIT_MODULE_RETICENCE max_equip_by_category = list( MECHA_L_ARM = 1, diff --git a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm index e3926aa7d3502e..237a0d971b0cbb 100644 --- a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm +++ b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm @@ -19,7 +19,7 @@ base_icon_state = "savannah_ivanov" icon_state = "savannah_ivanov_0_0" //does not include mmi compatibility - mecha_flags = CANSTRAFE | IS_ENCLOSED | HAS_LIGHTS + mecha_flags = CAN_STRAFE | IS_ENCLOSED | HAS_LIGHTS mech_type = EXOSUIT_MODULE_SAVANNAH movedelay = 3 max_integrity = 450 //really tanky, like damn @@ -86,7 +86,7 @@ if(chassis.phasing) to_chat(owner, span_warning("You're already airborne!")) return - if(TIMER_COOLDOWN_CHECK(chassis, COOLDOWN_MECHA_SKYFALL)) + if(TIMER_COOLDOWN_RUNNING(chassis, COOLDOWN_MECHA_SKYFALL)) var/timeleft = S_TIMER_COOLDOWN_TIMELEFT(chassis, COOLDOWN_MECHA_SKYFALL) to_chat(owner, span_warning("You need to wait [DisplayTimeText(timeleft, 1)] before attempting to Skyfall.")) return @@ -147,7 +147,6 @@ chassis.movedelay = 1 chassis.density = FALSE chassis.layer = ABOVE_ALL_MOB_LAYER - SET_PLANE(chassis, GAME_PLANE_UPPER_FOV_HIDDEN, launch_turf) animate(chassis, alpha = 0, time = 8, easing = QUAD_EASING|EASE_IN, flags = ANIMATION_PARALLEL) animate(chassis, pixel_z = 400, time = 10, easing = QUAD_EASING|EASE_IN, flags = ANIMATION_PARALLEL) //Animate our rising mech (just like pods hehe) addtimer(CALLBACK(src, PROC_REF(begin_landing)), 2 SECONDS) @@ -254,7 +253,7 @@ /datum/action/vehicle/sealed/mecha/ivanov_strike/Trigger(trigger_flags) if(!owner || !chassis || !(owner in chassis.occupants)) return - if(TIMER_COOLDOWN_CHECK(chassis, COOLDOWN_MECHA_MISSILE_STRIKE)) + if(TIMER_COOLDOWN_RUNNING(chassis, COOLDOWN_MECHA_MISSILE_STRIKE)) var/timeleft = S_TIMER_COOLDOWN_TIMELEFT(chassis, COOLDOWN_MECHA_MISSILE_STRIKE) to_chat(owner, span_warning("You need to wait [DisplayTimeText(timeleft, 1)] before firing another Ivanov Strike.")) return @@ -292,7 +291,7 @@ /** * ## end_missile_targeting * - * Called by the ivanov strike datum action or other actions that would end targetting + * Called by the ivanov strike datum action or other actions that would end targeting * Unhooks signals into clicking to call drop_missile plus other flavor like the overlay */ /datum/action/vehicle/sealed/mecha/ivanov_strike/proc/end_missile_targeting() diff --git a/code/modules/vehicles/mecha/equipment/mecha_equipment.dm b/code/modules/vehicles/mecha/equipment/mecha_equipment.dm index f9ee84ba4b893f..d650ce66f2ead1 100644 --- a/code/modules/vehicles/mecha/equipment/mecha_equipment.dm +++ b/code/modules/vehicles/mecha/equipment/mecha_equipment.dm @@ -107,7 +107,7 @@ if(get_integrity() <= 1) to_chat(chassis.occupants, span_warning("Error -- Equipment critically damaged.")) return FALSE - if(TIMER_COOLDOWN_CHECK(chassis, COOLDOWN_MECHA_EQUIPMENT(type))) + if(TIMER_COOLDOWN_RUNNING(chassis, COOLDOWN_MECHA_EQUIPMENT(type))) return FALSE return TRUE @@ -121,7 +121,7 @@ * Cooldown proc variant for using do_afters between activations instead of timers * Example of usage is mech drills, rcds * arguments: - * * target: targetted atom for action activation + * * target: targeted atom for action activation * * user: occupant to display do after for * * interaction_key: interaction key to pass to [/proc/do_after] */ @@ -219,7 +219,7 @@ /obj/item/mecha_parts/mecha_equipment/proc/set_active(active) src.active = active -/obj/item/mecha_parts/mecha_equipment/log_message(message, message_type=LOG_GAME, color=null, log_globally) +/obj/item/mecha_parts/mecha_equipment/log_message(message, message_type=LOG_GAME, color=null, log_globally, list/data) if(chassis) return chassis.log_message("ATTACHMENT: [src] [message]", message_type, color) return ..() diff --git a/code/modules/vehicles/mecha/equipment/tools/air_tank.dm b/code/modules/vehicles/mecha/equipment/tools/air_tank.dm index 3062d9923bc06b..f00444ae598b08 100644 --- a/code/modules/vehicles/mecha/equipment/tools/air_tank.dm +++ b/code/modules/vehicles/mecha/equipment/tools/air_tank.dm @@ -107,8 +107,8 @@ "auto_pressurize_on_seal" = auto_pressurize_on_seal, "port_connected" = internal_tank?.connected_port ? TRUE : FALSE, "tank_release_pressure" = round(internal_tank.release_pressure), - "tank_release_pressure_min" = internal_tank.can_min_release_pressure, - "tank_release_pressure_max" = internal_tank.can_max_release_pressure, + "tank_release_pressure_min" = CAN_MIN_RELEASE_PRESSURE, + "tank_release_pressure_max" = CAN_MAX_RELEASE_PRESSURE, "tank_pump_active" = tank_pump_active, "tank_pump_direction" = tank_pump_direction, "tank_pump_pressure" = round(tank_pump_pressure), @@ -122,7 +122,7 @@ switch(action) if("set_cabin_pressure") var/new_pressure = text2num(params["new_pressure"]) - internal_tank.release_pressure = clamp(round(new_pressure), internal_tank.can_min_release_pressure, internal_tank.can_max_release_pressure) + internal_tank.release_pressure = clamp(round(new_pressure), CAN_MIN_RELEASE_PRESSURE, CAN_MAX_RELEASE_PRESSURE) return TRUE if("toggle_port") if(internal_tank.connected_port) diff --git a/code/modules/vehicles/mecha/equipment/tools/medical_tools.dm b/code/modules/vehicles/mecha/equipment/tools/medical_tools.dm index ca3b4f2f47945e..fd138bbeaf8f91 100644 --- a/code/modules/vehicles/mecha/equipment/tools/medical_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/medical_tools.dm @@ -167,7 +167,6 @@ Respiratory Damage: [patient.getOxyLoss()]%
    Toxin Content: [patient.getToxLoss()]%
    Burn Severity: [patient.getFireLoss()]%
    - [span_danger("[patient.getCloneLoss() ? "Subject appears to have cellular damage." : ""]")]
    [span_danger("[patient.get_organ_loss(ORGAN_SLOT_BRAIN) ? "Significant brain damage detected." : ""]")]
    [span_danger("[length(patient.get_traumas()) ? "Brain Traumas detected." : ""]")]
    "} @@ -198,7 +197,7 @@ log_message("Injecting [patient] with [to_inject] units of [R.name].", LOG_MECHA) for(var/driver in chassis.return_drivers()) log_combat(driver, patient, "injected", "[name] ([R] - [to_inject] units)") - SG.reagents.trans_id_to(patient,R.type,to_inject) + SG.reagents.trans_to(patient, to_inject, target_id = R.type) /obj/item/mecha_parts/mecha_equipment/medical/sleeper/container_resist_act(mob/living/user) go_out() diff --git a/code/modules/vehicles/mecha/equipment/tools/work_tools.dm b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm index 0c8fad8a255e60..13041e11220372 100644 --- a/code/modules/vehicles/mecha/equipment/tools/work_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm @@ -14,36 +14,35 @@ harmful = TRUE mech_flags = EXOSUIT_MODULE_RIPLEY ///Bool for whether we beat the hell out of things we punch (and tear off their arms) - //var/killer_clamp = FALSE -------SKYRAT EDIT - A clamp is a clamp, just like it was on the oldbase. var/killer_clamp = TRUE ///How much base damage this clamp does - var/clamp_damage = 30 //SKYRAT EDIT - We've removed instant arm delimbs, so this is a buff to make up for it. -// var/clamp_damage = 20 SKYRAT EDIT - Original line + var/clamp_damage = 20 ///Var for the chassis we are attached to, needed to access ripley contents and such var/obj/vehicle/sealed/mecha/ripley/cargo_holder ///Audio for using the hydraulic clamp var/clampsound = 'sound/mecha/hydraulic.ogg' + ///Chassis but typed for the cargo_hold var + var/obj/vehicle/sealed/mecha/ripley/workmech /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/attach(obj/vehicle/sealed/mecha/new_mecha) . = ..() - if(istype(chassis, /obj/vehicle/sealed/mecha/ripley)) - cargo_holder = chassis + workmech = chassis ADD_TRAIT(chassis, TRAIT_OREBOX_FUNCTIONAL, TRAIT_MECH_EQUIPMENT(type)) /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/detach(atom/moveto) REMOVE_TRAIT(chassis, TRAIT_OREBOX_FUNCTIONAL, TRAIT_MECH_EQUIPMENT(type)) - cargo_holder = null + workmech = null return ..() /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/action(mob/living/source, atom/target, list/modifiers) if(!action_checks(target)) return - if(!cargo_holder) - return + if(!workmech.cargo_hold) + CRASH("Mech [chassis] has a clamp device, but no internal storage. This should be impossible.") if(ismecha(target)) var/obj/vehicle/sealed/mecha/M = target var/have_ammo - for(var/obj/item/mecha_ammo/box in cargo_holder.cargo) + for(var/obj/item/mecha_ammo/box in workmech.cargo_hold.contents) if(istype(box, /obj/item/mecha_ammo) && box.rounds) have_ammo = TRUE if(M.ammo_resupply(box, source, TRUE)) @@ -68,7 +67,7 @@ if(clamptarget.anchored) to_chat(source, "[icon2html(src, source)][span_warning("[target] is firmly secured!")]") return - if(LAZYLEN(cargo_holder.cargo) >= cargo_holder.cargo_capacity) + if(workmech.cargo_hold.contents.len >= workmech.cargo_hold.cargo_capacity) to_chat(source, "[icon2html(src, source)][span_warning("Not enough room in cargo compartment!")]") return playsound(chassis, clampsound, 50, FALSE, -6) @@ -77,13 +76,12 @@ if(!do_after_cooldown(target, source)) clamptarget.set_anchored(initial(clamptarget.anchored)) return - LAZYADD(cargo_holder.cargo, clamptarget) - clamptarget.forceMove(chassis) + clamptarget.forceMove(workmech.cargo_hold) clamptarget.set_anchored(FALSE) - if(!cargo_holder.ore_box && istype(clamptarget, /obj/structure/ore_box)) - cargo_holder.ore_box = clamptarget + if(!chassis.ore_box && istype(clamptarget, /obj/structure/ore_box)) + chassis.ore_box = clamptarget to_chat(source, "[icon2html(src, source)][span_notice("[target] successfully loaded.")]") - log_message("Loaded [clamptarget]. Cargo compartment capacity: [cargo_holder.cargo_capacity - LAZYLEN(cargo_holder.cargo)]", LOG_MECHA) + log_message("Loaded [clamptarget]. Cargo compartment capacity: [workmech.cargo_hold.cargo_capacity - workmech.cargo_hold.contents.len]", LOG_MECHA) else if(isliving(target)) var/mob/living/M = target @@ -175,7 +173,7 @@ var/datum/reagents/water_reagents = new /datum/reagents(required_amount/8) //required_amount/8, because the water usage is split between eight sprays. As of this comment, required_amount/8 = 10u each. water.reagents = water_reagents water_reagents.my_atom = water - reagents.trans_to(water, required_amount/8) + reagents.trans_to(water, required_amount / 8) water.move_at(get_step(chassis, get_dir(targetturf, chassis)), 2, 4) //Target is the tile opposite of the mech as the starting turf. playsound(chassis, 'sound/effects/extinguish.ogg', 75, TRUE, -3) @@ -308,13 +306,13 @@ to_chat(source, "[icon2html(src, source)][span_notice("Building Wall...")]") if(!do_after_cooldown(floor_turf, source)) return - floor_turf.PlaceOnTop(/turf/closed/wall) + floor_turf.place_on_top(/turf/closed/wall) else if(isopenturf(target)) var/turf/open/open_turf = target to_chat(source, "[icon2html(src, source)][span_notice("Building Floor...")]") if(!do_after_cooldown(open_turf, source)) return - open_turf.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + open_turf.place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) if(MODE_AIRLOCK) if(isfloorturf(target)) to_chat(source, "[icon2html(src, source)][span_notice("Building Airlock...")]") @@ -334,15 +332,17 @@ //Dunno where else to put this so shrug /obj/item/mecha_parts/mecha_equipment/ripleyupgrade name = "Ripley MK-II Conversion Kit" - desc = "A pressurized canopy attachment kit for an Autonomous Power Loader Unit \"Ripley\" MK-I mecha, to convert it to the slower, but space-worthy MK-II design. This kit cannot be removed, once applied." + desc = "A pressurized canopy attachment kit for an Autonomous Power Loader Unit \"Ripley\" MK-I exosuit, to convert it to the slower, but space-worthy MK-II design. This kit cannot be removed, once applied." icon_state = "ripleyupgrade" mech_flags = EXOSUIT_MODULE_RIPLEY + var/result = /obj/vehicle/sealed/mecha/ripley/mk2 /obj/item/mecha_parts/mecha_equipment/ripleyupgrade/can_attach(obj/vehicle/sealed/mecha/ripley/mecha, attach_right = FALSE, mob/user) if(mecha.type != /obj/vehicle/sealed/mecha/ripley) to_chat(user, span_warning("This conversion kit can only be applied to APLU MK-I models.")) return FALSE - if(LAZYLEN(mecha.cargo)) + var/obj/vehicle/sealed/mecha/ripley/workmech = mecha + if(LAZYLEN(workmech.cargo_hold)) to_chat(user, span_warning("[mecha]'s cargo hold must be empty before this conversion kit can be applied.")) return FALSE if(!(mecha.mecha_flags & PANEL_OPEN)) //non-removable upgrade, so lets make sure the pilot or owner has their say. @@ -357,43 +357,58 @@ return TRUE /obj/item/mecha_parts/mecha_equipment/ripleyupgrade/attach(obj/vehicle/sealed/mecha/markone, attach_right = FALSE) - var/obj/vehicle/sealed/mecha/ripley/mk2/marktwo = new (get_turf(markone),1) - if(!marktwo) + var/obj/vehicle/sealed/mecha/newmech = new result(get_turf(markone),1) + if(!newmech) return - QDEL_NULL(marktwo.cell) + QDEL_NULL(newmech.cell) if (markone.cell) - marktwo.cell = markone.cell - markone.cell.forceMove(marktwo) + newmech.cell = markone.cell + markone.cell.forceMove(newmech) markone.cell = null - QDEL_NULL(marktwo.scanmod) + QDEL_NULL(newmech.scanmod) if (markone.scanmod) - marktwo.scanmod = markone.scanmod - markone.scanmod.forceMove(marktwo) + newmech.scanmod = markone.scanmod + markone.scanmod.forceMove(newmech) markone.scanmod = null - QDEL_NULL(marktwo.capacitor) + QDEL_NULL(newmech.capacitor) if (markone.capacitor) - marktwo.capacitor = markone.capacitor - markone.capacitor.forceMove(marktwo) + newmech.capacitor = markone.capacitor + markone.capacitor.forceMove(newmech) markone.capacitor = null - QDEL_NULL(marktwo.servo) + QDEL_NULL(newmech.servo) if (markone.servo) - marktwo.servo = markone.servo - markone.servo.forceMove(marktwo) + newmech.servo = markone.servo + markone.servo.forceMove(newmech) markone.servo = null - marktwo.update_part_values() + newmech.update_part_values() for(var/obj/item/mecha_parts/mecha_equipment/equipment in markone.flat_equipment) //Move the equipment over... if(istype(equipment, /obj/item/mecha_parts/mecha_equipment/ejector)) - continue //the MK2 already has one. + continue //the new mech already has one. var/righthandgun = markone.equip_by_category[MECHA_R_ARM] == equipment - equipment.detach(marktwo) - equipment.attach(marktwo, righthandgun) - marktwo.dna_lock = markone.dna_lock - marktwo.mecha_flags = markone.mecha_flags - marktwo.strafe = markone.strafe + equipment.detach(newmech) + equipment.attach(newmech, righthandgun) + newmech.dna_lock = markone.dna_lock + newmech.mecha_flags = markone.mecha_flags + newmech.strafe = markone.strafe //Integ set to the same percentage integ as the old mecha, rounded to be whole number - marktwo.update_integrity(round((markone.get_integrity() / markone.max_integrity) * marktwo.get_integrity())) + newmech.update_integrity(round((markone.get_integrity() / markone.max_integrity) * newmech.get_integrity())) if(markone.name != initial(markone.name)) - marktwo.name = markone.name + newmech.name = markone.name markone.wreckage = FALSE + if(HAS_TRAIT(markone, TRAIT_MECHA_CREATED_NORMALLY)) + ADD_TRAIT(newmech, TRAIT_MECHA_CREATED_NORMALLY, newmech) qdel(markone) - playsound(get_turf(marktwo),'sound/items/ratchet.ogg',50,TRUE) + playsound(get_turf(newmech),'sound/items/ratchet.ogg',50,TRUE) + +/obj/item/mecha_parts/mecha_equipment/ripleyupgrade/paddy + name = "Paddy Conversion Kit" + desc = "A hardpoint modification kit for an Autonomous Power Loader Unit \"Ripley\" MK-I exosuit, to convert it to the Paddy lightweight security design. This kit cannot be removed, once applied." + icon_state = "paddyupgrade" + mech_flags = EXOSUIT_MODULE_RIPLEY + result = /obj/vehicle/sealed/mecha/ripley/paddy + +/obj/item/mecha_parts/mecha_equipment/ripleyupgrade/paddy/can_attach(obj/vehicle/sealed/mecha/ripley/mecha, attach_right = FALSE, mob/user) + if(mecha.equip_by_category[MECHA_L_ARM] || mecha.equip_by_category[MECHA_R_ARM]) //Paddys can't use RIPLEY-type equipment + to_chat(user, span_warning("This kit cannot be applied with hardpoint equipment attached.")) + return FALSE + return ..() diff --git a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm index a879341629650c..335e8bc5a3e122 100644 --- a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm +++ b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm @@ -162,7 +162,7 @@ icon_state = "mecha_kineticgun" energy_drain = 30 projectile = /obj/projectile/kinetic/mech - fire_sound = 'sound/weapons/kenetic_accel.ogg' + fire_sound = 'sound/weapons/kinetic_accel.ogg' harmful = TRUE mech_flags = EXOSUIT_MODULE_COMBAT | EXOSUIT_MODULE_WORKING @@ -540,3 +540,76 @@ equip_cooldown = 60 det_time = 20 mech_flags = EXOSUIT_MODULE_HONK + +///long claw of the law +/obj/item/mecha_parts/mecha_equipment/weapon/paddy_claw + name = "hydraulic claw" + desc = "A modified hydraulic clamp, for use exclusively with the Paddy exosuit. Non-lethally apprehends suspects." + icon_state = "paddy_claw" + equip_cooldown = 15 + energy_drain = 10 + tool_behaviour = TOOL_RETRACTOR + range = MECHA_MELEE + toolspeed = 0.8 + mech_flags = EXOSUIT_MODULE_PADDY + ///Chassis but typed for the cargo_hold var + var/obj/vehicle/sealed/mecha/ripley/secmech + ///Audio for using the hydraulic clamp + var/clampsound = 'sound/mecha/hydraulic.ogg' + ///Var for the cuff type. Basically stole how cuffing works from secbots + var/cuff_type = /obj/item/restraints/handcuffs/cable/zipties/used + ///Var for autocuff, can be toggled in the mech interface. + var/autocuff = TRUE + + +/obj/item/mecha_parts/mecha_equipment/weapon/paddy_claw/attach(obj/vehicle/sealed/mecha/new_mecha) + . = ..() + secmech = chassis + +/obj/item/mecha_parts/mecha_equipment/weapon/paddy_claw/detach(atom/moveto) + secmech = null + return ..() + +/obj/item/mecha_parts/mecha_equipment/weapon/paddy_claw/action(mob/living/source, atom/target, list/modifiers) + if(!secmech.cargo_hold) //We did try + CRASH("Mech [chassis] has a claw device, but no internal storage. This should be impossible.") + if(ismob(target)) + var/mob/living/mobtarget = target + if(mobtarget.move_resist == MOVE_FORCE_OVERPOWERING) //No megafauna or bolted AIs, please. + to_chat(source, "[span_warning("[src] is unable to lift [mobtarget].")]") + return + if(secmech.cargo_hold.contents.len >= secmech.cargo_hold.cargo_capacity) + to_chat(source, "[icon2html(src, source)][span_warning("Not enough room in cargo compartment!")]") + return + + playsound(chassis, clampsound, 50, FALSE, -6) + mobtarget.visible_message(span_notice("[chassis] lifts [mobtarget] into its internal holding cell."),span_userdanger("[chassis] grips you with [src] and prepares to load you into [secmech.cargo_hold]!")) + if(!do_after_cooldown(mobtarget, source)) + return + mobtarget.forceMove(secmech.cargo_hold) + log_message("Loaded [mobtarget]. Cargo compartment capacity: [secmech.cargo_hold.cargo_capacity - secmech.cargo_hold.contents.len]", LOG_MECHA) + to_chat(source, "[icon2html(src, source)][span_notice("[mobtarget] successfully loaded.")]") + to_chat(mobtarget, "[span_warning("You have been moved into [secmech.cargo_hold]. You can attempt to resist out if you wish.")]") + if(autocuff && iscarbon(target)) + var/mob/living/carbon/carbontarget = target + carbontarget.set_handcuffed(new cuff_type(carbontarget)) + carbontarget.update_handcuffed() + return + + if(!istype(target, /obj/machinery/door)) + return + var/obj/machinery/door/target_door = target + playsound(chassis, clampsound, 50, FALSE, -6) + target_door.try_to_crowbar(src, source) + +/obj/item/mecha_parts/mecha_equipment/weapon/paddy_claw/get_snowflake_data() + return list( + "snowflake_id" = MECHA_SNOWFLAKE_ID_CLAW, + "autocuff" = autocuff, + ) + +/obj/item/mecha_parts/mecha_equipment/weapon/paddy_claw/handle_ui_act(action, list/params) + switch(action) + if("togglecuff") + autocuff = !autocuff + return TRUE diff --git a/code/modules/vehicles/mecha/mech_fabricator.dm b/code/modules/vehicles/mecha/mech_fabricator.dm index 56b3cd2138c5ed..c4acded7994460 100644 --- a/code/modules/vehicles/mecha/mech_fabricator.dm +++ b/code/modules/vehicles/mecha/mech_fabricator.dm @@ -50,11 +50,7 @@ var/list/datum/design/cached_designs /obj/machinery/mecha_part_fabricator/Initialize(mapload) - rmat = AddComponent( \ - /datum/component/remote_materials, \ - mapload && link_on_init, \ - mat_container_flags = BREAKDOWN_FLAGS_LATHE \ - ) + rmat = AddComponent(/datum/component/remote_materials, mapload && link_on_init) cached_designs = list() RefreshParts() //Recalculating local material sizes if the fab isn't linked return ..() @@ -403,9 +399,6 @@ . = TRUE - add_fingerprint(usr) - usr.set_machine(src) - switch(action) if("build") var/designs = params["designs"] @@ -499,15 +492,5 @@ return FALSE return default_deconstruction_crowbar(I) -/obj/machinery/mecha_part_fabricator/proc/is_insertion_ready(mob/user) - if(panel_open) - to_chat(user, span_warning("You can't load [src] while it's opened!")) - return FALSE - if(being_built) - to_chat(user, span_warning("\The [src] is currently processing! Please wait until completion.")) - return FALSE - - return TRUE - /obj/machinery/mecha_part_fabricator/maint link_on_init = FALSE diff --git a/code/modules/vehicles/mecha/mecha_actions.dm b/code/modules/vehicles/mecha/mecha_actions.dm index 43301c19605e3e..2b410bd60c7758 100644 --- a/code/modules/vehicles/mecha/mecha_actions.dm +++ b/code/modules/vehicles/mecha/mecha_actions.dm @@ -101,7 +101,7 @@ toggle_strafe() /obj/vehicle/sealed/mecha/proc/toggle_strafe() - if(!(mecha_flags & CANSTRAFE)) + if(!(mecha_flags & CAN_STRAFE)) to_chat(occupants, "this mecha doesn't support strafing!") return diff --git a/code/modules/vehicles/mecha/mecha_ai_interaction.dm b/code/modules/vehicles/mecha/mecha_ai_interaction.dm index 22db07718095e4..9ae35d8ff4ba44 100644 --- a/code/modules/vehicles/mecha/mecha_ai_interaction.dm +++ b/code/modules/vehicles/mecha/mecha_ai_interaction.dm @@ -72,7 +72,6 @@ to_chat(occupants, span_danger("You have been forcibly ejected!")) for(var/ejectee in occupants) mob_exit(ejectee, silent = TRUE, randomstep = TRUE, forced = TRUE) //IT IS MINE, NOW. SUCK IT, RD! - AI.can_shunt = FALSE //ONE AI ENTERS. NO AI LEAVES. if(AI_TRANS_FROM_CARD) //Using an AI card to upload to a mech. AI = card.AI diff --git a/code/modules/vehicles/mecha/mecha_construction_paths.dm b/code/modules/vehicles/mecha/mecha_construction_paths.dm index fb572f7d1282e5..3287d66c7bf2cb 100644 --- a/code/modules/vehicles/mecha/mecha_construction_paths.dm +++ b/code/modules/vehicles/mecha/mecha_construction_paths.dm @@ -33,6 +33,7 @@ var/obj/item/mecha_parts/chassis/parent_chassis = parent mech.CheckParts(parent_chassis.contents) SSblackbox.record_feedback("tally", "mechas_created", 1, mech.name) + ADD_TRAIT(mech, TRAIT_MECHA_CREATED_NORMALLY, mech) QDEL_NULL(parent) // Default proc to generate mech steps. @@ -503,7 +504,7 @@ list( "key" = /obj/item/circuitboard/mecha/honker/targeting, "action" = ITEM_DELETE, - "desc" = "Prank targetting board can be added!", + "desc" = "Prank targeting board can be added!", "forward_message" = "added prank" ), list( diff --git a/code/modules/vehicles/mecha/mecha_control_console.dm b/code/modules/vehicles/mecha/mecha_control_console.dm index 771ed97268bfda..635ec9425b1c85 100644 --- a/code/modules/vehicles/mecha/mecha_control_console.dm +++ b/code/modules/vehicles/mecha/mecha_control_console.dm @@ -29,16 +29,16 @@ name = M.name, integrity = round((M.get_integrity() / M.max_integrity) * 100), charge = M.cell ? round(M.cell.percent()) : null, - airtank = M.enclosed ? M.return_pressure() : null, + airtank = (M.mecha_flags & IS_ENCLOSED) ? M.return_pressure() : null, pilot = M.return_drivers(), location = get_area_name(M, TRUE), emp_recharging = MT.recharging, tracker_ref = REF(MT) ) if(istype(M, /obj/vehicle/sealed/mecha/ripley)) - var/obj/vehicle/sealed/mecha/ripley/RM = M + var/obj/vehicle/sealed/mecha/ripley/workmech = M mech_data += list( - cargo_space = round((LAZYLEN(RM.cargo) / RM.cargo_capacity) * 100) + cargo_space = round(workmech.cargo_hold.contents.len / workmech.cargo_hold.cargo_capacity * 100) ) data["mechs"] += list(mech_data) @@ -76,7 +76,7 @@ /obj/item/mecha_parts/mecha_tracking name = "exosuit tracking beacon" desc = "Device used to transmit exosuit data." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/new_assemblies.dmi' icon_state = "motion2" w_class = WEIGHT_CLASS_SMALL /// If this beacon allows for AI control. Exists to avoid using istype() on checking @@ -97,12 +97,12 @@ var/answer = {"Name: [chassis.name]
    Integrity: [round((chassis.get_integrity()/chassis.max_integrity * 100), 0.01)]%
    Cell Charge: [isnull(cell_charge) ? "Not Found":"[chassis.cell.percent()]%"]
    - Cabin Pressure: [chassis.enclosed ? "[round(chassis.return_pressure(), 0.01)] kPa" : "Not Sealed"]
    + Cabin Pressure: [(chassis.mecha_flags & IS_ENCLOSED) ? "[round(chassis.return_pressure(), 0.01)] kPa" : "Not Sealed"]
    Pilot: [english_list(chassis.return_drivers(), nothing_text = "None")]
    Location: [get_area_name(chassis, TRUE) || "Unknown"]"} if(istype(chassis, /obj/vehicle/sealed/mecha/ripley)) - var/obj/vehicle/sealed/mecha/ripley/RM = chassis - answer += "
    Used Cargo Space: [round((LAZYLEN(RM.cargo) / RM.cargo_capacity * 100), 0.01)]%" + var/obj/item/mecha_parts/mecha_equipment/ejector/cargo_holder = locate(/obj/item/mecha_parts/mecha_equipment/ejector) in chassis.equip_by_category[MECHA_UTILITY] + answer += "
    Used Cargo Space: [round((cargo_holder.contents.len / cargo_holder.cargo_capacity * 100), 0.01)]%" return answer diff --git a/code/modules/vehicles/mecha/mecha_damage.dm b/code/modules/vehicles/mecha/mecha_damage.dm index 08f294f202f94f..8a06aaf298fa51 100644 --- a/code/modules/vehicles/mecha/mecha_damage.dm +++ b/code/modules/vehicles/mecha/mecha_damage.dm @@ -9,7 +9,7 @@ * Pretty simple, adds armor, you can choose against what * ## Internal damage * When taking damage will force you to take some time to repair, encourages improvising in a fight - * Targetting different def zones will damage them to encurage a more strategic approach to fights + * Targeting different def zones will damage them to encurage a more strategic approach to fights * where they target the "dangerous" modules */ diff --git a/code/modules/vehicles/mecha/mecha_defense.dm b/code/modules/vehicles/mecha/mecha_defense.dm index 3df6ba94992d8f..e88ce2925ac96b 100644 --- a/code/modules/vehicles/mecha/mecha_defense.dm +++ b/code/modules/vehicles/mecha/mecha_defense.dm @@ -9,11 +9,11 @@ * Pretty simple, adds armor, you can choose against what * ## Internal damage * When taking damage will force you to take some time to repair, encourages improvising in a fight - * Targetting different def zones will damage them to encurage a more strategic approach to fights + * Targeting different def zones will damage them to encurage a more strategic approach to fights * where they target the "dangerous" modules */ -/// tries to damage mech equipment depending on damage and where is being targetted +/// tries to damage mech equipment depending on damage and where is being targeted /obj/vehicle/sealed/mecha/proc/try_damage_component(damage, def_zone) if(damage < component_damage_threshold) return @@ -115,18 +115,15 @@ return ..() /obj/vehicle/sealed/mecha/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit) //wrapper - . = ..() - if(. != BULLET_ACT_HIT) - return . - //allows bullets to hit the pilot of open-canopy mechs - if(!enclosed \ + if(!(mecha_flags & IS_ENCLOSED) \ && LAZYLEN(occupants) \ && !(mecha_flags & SILICON_PILOT) \ && (def_zone == BODY_ZONE_HEAD || def_zone == BODY_ZONE_CHEST)) - for(var/mob/living/hitmob as anything in occupants) - hitmob.bullet_act(hitting_projectile, def_zone, piercing_hit) //If the sides are open, the occupant can be hit - return BULLET_ACT_HIT + var/mob/living/hitmob = pick(occupants) + return hitmob.bullet_act(hitting_projectile, def_zone, piercing_hit) //If the sides are open, the occupant can be hit + + . = ..() log_message("Hit by projectile. Type: [hitting_projectile]([hitting_projectile.damage_type]).", LOG_MECHA, color="red") // yes we *have* to run the armor calc proc here I love tg projectile code too @@ -138,6 +135,7 @@ armour_penetration = hitting_projectile.armour_penetration, ), def_zone) + /obj/vehicle/sealed/mecha/ex_act(severity, target) log_message("Affected by explosion of severity: [severity].", LOG_MECHA, color="red") return ..() @@ -199,7 +197,7 @@ /obj/vehicle/sealed/mecha/fire_act() //Check if we should ignite the pilot of an open-canopy mech . = ..() - if(enclosed || mecha_flags & SILICON_PILOT) + if(mecha_flags & IS_ENCLOSED || mecha_flags & SILICON_PILOT) return for(var/mob/living/cookedalive as anything in occupants) if(cookedalive.fire_stacks < 5) diff --git a/code/modules/vehicles/mecha/mecha_mob_interaction.dm b/code/modules/vehicles/mecha/mecha_mob_interaction.dm index 07b13a27ec0540..0789216400ccf7 100644 --- a/code/modules/vehicles/mecha/mecha_mob_interaction.dm +++ b/code/modules/vehicles/mecha/mecha_mob_interaction.dm @@ -158,12 +158,16 @@ /obj/vehicle/sealed/mecha/add_occupant(mob/M, control_flags) RegisterSignal(M, COMSIG_MOB_CLICKON, PROC_REF(on_mouseclick), TRUE) RegisterSignal(M, COMSIG_MOB_SAY, PROC_REF(display_speech_bubble), TRUE) + RegisterSignal(M, COMSIG_MOVABLE_KEYBIND_FACE_DIR, PROC_REF(on_turn), TRUE) . = ..() update_appearance() /obj/vehicle/sealed/mecha/remove_occupant(mob/M) - UnregisterSignal(M, COMSIG_MOB_CLICKON) - UnregisterSignal(M, COMSIG_MOB_SAY) + UnregisterSignal(M, list( + COMSIG_MOB_CLICKON, + COMSIG_MOB_SAY, + COMSIG_MOVABLE_KEYBIND_FACE_DIR, + )) M.clear_alert(ALERT_CHARGE) M.clear_alert(ALERT_MECH_DAMAGE) if(M.client) diff --git a/code/modules/vehicles/mecha/mecha_movement.dm b/code/modules/vehicles/mecha/mecha_movement.dm index d6c8feed4b3b96..766826e8f5a255 100644 --- a/code/modules/vehicles/mecha/mecha_movement.dm +++ b/code/modules/vehicles/mecha/mecha_movement.dm @@ -49,6 +49,11 @@ return TRUE return FALSE +///Called when the driver turns with the movement lock key +/obj/vehicle/sealed/mecha/proc/on_turn(mob/living/driver, direction) + SIGNAL_HANDLER + return COMSIG_IGNORE_MOVEMENT_LOCK + /obj/vehicle/sealed/mecha/relaymove(mob/living/user, direction) . = TRUE if(!canmove || !(user in return_drivers())) @@ -70,14 +75,14 @@ return loc_atom.relaymove(src, direction) var/obj/machinery/portable_atmospherics/canister/internal_tank = get_internal_tank() if(internal_tank?.connected_port) - if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_MECHA_MESSAGE)) + if(TIMER_COOLDOWN_FINISHED(src, COOLDOWN_MECHA_MESSAGE)) to_chat(occupants, "[icon2html(src, occupants)][span_warning("Unable to move while connected to the air system port!")]") TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_MESSAGE, 2 SECONDS) return FALSE if(!Process_Spacemove(direction)) return FALSE if(zoom_mode) - if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_MECHA_MESSAGE)) + if(TIMER_COOLDOWN_FINISHED(src, COOLDOWN_MECHA_MESSAGE)) to_chat(occupants, "[icon2html(src, occupants)][span_warning("Unable to move while in zoom mode!")]") TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_MESSAGE, 2 SECONDS) return FALSE @@ -89,17 +94,17 @@ if(isnull(servo)) missing_parts += "micro-servo" if(length(missing_parts)) - if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_MECHA_MESSAGE)) + if(TIMER_COOLDOWN_FINISHED(src, COOLDOWN_MECHA_MESSAGE)) to_chat(occupants, "[icon2html(src, occupants)][span_warning("Missing [english_list(missing_parts)].")]") TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_MESSAGE, 2 SECONDS) return FALSE if(!use_power(step_energy_drain)) - if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_MECHA_MESSAGE)) + if(TIMER_COOLDOWN_FINISHED(src, COOLDOWN_MECHA_MESSAGE)) to_chat(occupants, "[icon2html(src, occupants)][span_warning("Insufficient power to move!")]") TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_MESSAGE, 2 SECONDS) return FALSE if(lavaland_only && is_mining_level(z)) - if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_MECHA_MESSAGE)) + if(TIMER_COOLDOWN_FINISHED(src, COOLDOWN_MECHA_MESSAGE)) to_chat(occupants, "[icon2html(src, occupants)][span_warning("Invalid Environment.")]") TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_MESSAGE, 2 SECONDS) return FALSE @@ -121,11 +126,11 @@ break //if we're not facing the way we're going rotate us - if(dir != direction && !strafe || forcerotate || keyheld) + if(dir != direction && (!strafe || forcerotate || keyheld)) if(dir != direction && !(mecha_flags & QUIET_TURNS) && !step_silent) playsound(src,turnsound,40,TRUE) setDir(direction) - if(!pivot_step) //If we pivot step, we don't return here so we don't just come to a stop + if(keyheld || !pivot_step) //If we pivot step, we don't return here so we don't just come to a stop return TRUE set_glide_size(DELAY_TO_GLIDE_SIZE(movedelay)) diff --git a/code/modules/vehicles/mecha/mecha_parts.dm b/code/modules/vehicles/mecha/mecha_parts.dm index fe5b53caba78d7..bec0fefcc6d859 100644 --- a/code/modules/vehicles/mecha/mecha_parts.dm +++ b/code/modules/vehicles/mecha/mecha_parts.dm @@ -7,7 +7,7 @@ icon = 'icons/mob/mech_construct.dmi' icon_state = "blank" w_class = WEIGHT_CLASS_GIGANTIC - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY /obj/item/mecha_parts/proc/try_attach_part(mob/user, obj/vehicle/sealed/mecha/M, attach_right = FALSE) //For attaching parts to a finished mech if(!user.transferItemToLoc(src, M)) @@ -336,12 +336,12 @@ /obj/item/circuitboard/mecha name = "exosuit circuit board" - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "std_mod" inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY force = 5 w_class = WEIGHT_CLASS_SMALL throwforce = 0 diff --git a/code/modules/vehicles/mecha/mecha_ui.dm b/code/modules/vehicles/mecha/mecha_ui.dm index 76d8b4613fac8e..826a746c849d30 100644 --- a/code/modules/vehicles/mecha/mecha_ui.dm +++ b/code/modules/vehicles/mecha/mecha_ui.dm @@ -97,7 +97,7 @@ data["capacitor_rating"] = capacitor?.rating data["weapons_safety"] = weapons_safety - data["enclosed"] = enclosed + data["enclosed"] = mecha_flags & IS_ENCLOSED data["cabin_sealed"] = cabin_sealed data["cabin_temp"] = round(cabin_air.temperature - T0C) data["cabin_pressure"] = round(cabin_air.return_pressure()) diff --git a/code/modules/vehicles/mecha/mecha_wreckage.dm b/code/modules/vehicles/mecha/mecha_wreckage.dm index 3540891d336cde..8896b7268fe15c 100644 --- a/code/modules/vehicles/mecha/mecha_wreckage.dm +++ b/code/modules/vehicles/mecha/mecha_wreckage.dm @@ -105,7 +105,7 @@ if(AI.client) //AI player is still in the dead AI and is connected to_chat(AI, span_notice("The remains of your file system have been recovered on a mobile storage device.")) else //Give the AI a heads-up that it is probably going to get fixed. - AI.notify_ghost_cloning("You have been recovered from the wreckage!", source = card) + AI.notify_revival("You have been recovered from the wreckage!", source = card) to_chat(user, "[span_boldnotice("Backup files recovered")]: [AI.name] ([rand(1000,9999)].exe) salvaged from [name] and stored within local memory.") AI = null @@ -165,6 +165,10 @@ name = "\improper Ripley MK-II wreckage" icon_state = "ripleymkii-broken" +/obj/structure/mecha_wreckage/ripley/paddy + name = "\improper Paddy wreckage" + icon_state = "paddy-broken" + /obj/structure/mecha_wreckage/clarke name = "\improper Clarke wreckage" icon_state = "clarke-broken" diff --git a/code/modules/vehicles/mecha/working/clarke.dm b/code/modules/vehicles/mecha/working/clarke.dm index e31690f65b929e..2ec0b4a4736484 100644 --- a/code/modules/vehicles/mecha/working/clarke.dm +++ b/code/modules/vehicles/mecha/working/clarke.dm @@ -7,6 +7,7 @@ max_temperature = 65000 max_integrity = 200 movedelay = 1.25 + overclock_coeff = 1.25 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF lights_power = 7 step_energy_drain = 12 //slightly higher energy drain since you movin those wheels FAST diff --git a/code/modules/vehicles/mecha/working/ripley.dm b/code/modules/vehicles/mecha/working/ripley.dm index d2b13d48d26ab3..711da429cca2f6 100644 --- a/code/modules/vehicles/mecha/working/ripley.dm +++ b/code/modules/vehicles/mecha/working/ripley.dm @@ -5,6 +5,7 @@ base_icon_state = "ripley" silicon_icon_state = "ripley-empty" movedelay = 1.5 //Move speed, lower is faster. + overclock_coeff = 1.25 max_temperature = 20000 max_integrity = 200 lights_power = 7 @@ -16,11 +17,11 @@ MECHA_POWER = 1, MECHA_ARMOR = 1, ) + mecha_flags = CAN_STRAFE | HAS_LIGHTS | MMI_COMPATIBLE wreckage = /obj/structure/mecha_wreckage/ripley mech_type = EXOSUIT_MODULE_RIPLEY possible_int_damage = MECHA_INT_FIRE|MECHA_INT_CONTROL_LOST|MECHA_INT_SHORT_CIRCUIT accesses = list(ACCESS_MECH_ENGINE, ACCESS_MECH_SCIENCE, ACCESS_MECH_MINING) - enclosed = FALSE //Normal ripley has an open cockpit design enter_delay = 10 //can enter in a quarter of the time of other mechs exit_delay = 10 /// Custom Ripley step and turning sounds (from TGMC) @@ -35,10 +36,8 @@ ) /// Amount of Goliath hides attached to the mech var/hides = 0 - /// List of all things in Ripley's Cargo Compartment - var/list/cargo - /// How much things Ripley can carry in their Cargo Compartment - var/cargo_capacity = 15 + /// Reference to the Cargo Hold equipment. + var/obj/item/mecha_parts/mecha_equipment/ejector/cargo_hold /// How fast the mech is in low pressure var/fast_pressure_step_in = 1.5 /// How fast the mech is in normal pressure @@ -66,13 +65,6 @@ bullet = 5 laser = 5 -/obj/vehicle/sealed/mecha/ripley/Destroy() - for(var/atom/movable/A in cargo) - A.forceMove(drop_location()) - step_rand(A) - QDEL_LIST(cargo) - return ..() - /obj/vehicle/sealed/mecha/ripley/mk2 desc = "Autonomous Power Loader Unit MK-II. This prototype Ripley is refitted with a pressurized cabin, trading its prior speed for atmospheric protection and armor." name = "\improper APLU MK-II \"Ripley\"" @@ -83,10 +75,10 @@ movedelay = 4 max_temperature = 30000 max_integrity = 250 + mecha_flags = CAN_STRAFE | IS_ENCLOSED | HAS_LIGHTS | MMI_COMPATIBLE possible_int_damage = MECHA_INT_FIRE|MECHA_INT_TEMP_CONTROL|MECHA_CABIN_AIR_BREACH|MECHA_INT_CONTROL_LOST|MECHA_INT_SHORT_CIRCUIT armor_type = /datum/armor/mecha_ripley_mk2 wreckage = /obj/structure/mecha_wreckage/ripley/mk2 - enclosed = TRUE enter_delay = 40 silicon_icon_state = null @@ -99,6 +91,110 @@ fire = 100 acid = 100 +/obj/vehicle/sealed/mecha/ripley/paddy + desc = "Autonomous Power Loader Unit Subtype Paddy. A Modified MK-I Ripley design intended for light security use." + name = "\improper APLU \"Paddy\"" + icon_state = "paddy" + base_icon_state = "paddy" + max_temperature = 20000 + max_integrity = 250 + mech_type = EXOSUIT_MODULE_PADDY + possible_int_damage = MECHA_INT_FIRE|MECHA_INT_CONTROL_LOST|MECHA_INT_SHORT_CIRCUIT + accesses = list(ACCESS_MECH_SCIENCE, ACCESS_MECH_SECURITY) + armor_type = /datum/armor/mecha_paddy + wreckage = /obj/structure/mecha_wreckage/ripley/paddy + silicon_icon_state = "paddy-empty" + equip_by_category = list( + MECHA_L_ARM = null, + MECHA_R_ARM = null, + MECHA_UTILITY = list(/obj/item/mecha_parts/mecha_equipment/ejector/seccage), + MECHA_POWER = list(), + MECHA_ARMOR = list(), + ) + ///Siren Lights/Sound State + var/siren = FALSE + ///Overlay for Siren Lights + var/mutable_appearance/sirenlights + ///Looping sound datum for the Siren audio + var/datum/looping_sound/siren/weewooloop + +/datum/armor/mecha_paddy + melee = 40 + bullet = 20 + laser = 10 + energy = 20 + bomb = 40 + fire = 100 + acid = 100 + +/obj/vehicle/sealed/mecha/ripley/paddy/Initialize(mapload) + . = ..() + weewooloop = new(src, FALSE, FALSE) + weewooloop.volume = 100 + +/obj/vehicle/sealed/mecha/ripley/paddy/generate_actions() + . = ..() + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/siren) + +/obj/vehicle/sealed/mecha/ripley/paddy/mob_exit(mob/M, silent = FALSE, randomstep = FALSE, forced = FALSE) + var/obj/item/mecha_parts/mecha_equipment/ejector/seccage/cargo_holder = locate(/obj/item/mecha_parts/mecha_equipment/ejector/seccage) in equip_by_category[MECHA_UTILITY] + for(var/mob/contained in cargo_holder) + cargo_holder.cheese_it(contained) + togglesiren(force_off = TRUE) + return ..() + +/obj/vehicle/sealed/mecha/ripley/paddy/proc/togglesiren(force_off = FALSE) + if(force_off || siren) + weewooloop.stop() + siren = FALSE + else + weewooloop.start() + siren = TRUE + for(var/mob/occupant as anything in occupants) + balloon_alert(occupant, "siren [siren ? "activated" : "disabled"]") + var/datum/action/act = locate(/datum/action/vehicle/sealed/mecha/siren) in occupant.actions + act.button_icon_state = "mech_siren_[siren ? "on" : "off"]" + act.build_all_button_icons() + update_appearance(UPDATE_OVERLAYS) + +/obj/vehicle/sealed/mecha/ripley/paddy/update_overlays() + . = ..() + if(!siren) + return + sirenlights = new() + sirenlights.icon = icon + sirenlights.icon_state = "paddy_sirens" + SET_PLANE_EXPLICIT(sirenlights, ABOVE_LIGHTING_PLANE, src) + . += sirenlights + +/obj/vehicle/sealed/mecha/ripley/paddy/Destroy() + QDEL_NULL(weewooloop) + return ..() + +/datum/action/vehicle/sealed/mecha/siren + name = "Toggle External Siren and Lights" + button_icon_state = "mech_siren_off" + +/datum/action/vehicle/sealed/mecha/siren/New() + . = ..() + var/obj/vehicle/sealed/mecha/ripley/paddy/secmech = chassis + button_icon_state = "mech_siren_[secmech?.siren ? "on" : "off"]" + +/datum/action/vehicle/sealed/mecha/siren/Trigger(trigger_flags, forced_state = FALSE) + var/obj/vehicle/sealed/mecha/ripley/paddy/secmech = chassis + secmech.togglesiren() + +/obj/vehicle/sealed/mecha/ripley/paddy/preset + accesses = list(ACCESS_SECURITY) + mecha_flags = CAN_STRAFE | HAS_LIGHTS | MMI_COMPATIBLE | ID_LOCK_ON + equip_by_category = list( + MECHA_L_ARM = /obj/item/mecha_parts/mecha_equipment/weapon/energy/disabler, + MECHA_R_ARM = /obj/item/mecha_parts/mecha_equipment/weapon/paddy_claw, + MECHA_UTILITY = list(/obj/item/mecha_parts/mecha_equipment/ejector/seccage), + MECHA_POWER = list(), + MECHA_ARMOR = list(), + ) + /obj/vehicle/sealed/mecha/ripley/deathripley desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE" name = "\improper DEATH-RIPLEY" @@ -110,7 +206,7 @@ lights_power = 7 wreckage = /obj/structure/mecha_wreckage/ripley/deathripley step_energy_drain = 0 - enclosed = TRUE + mecha_flags = CAN_STRAFE | IS_ENCLOSED | HAS_LIGHTS | MMI_COMPATIBLE enter_delay = 40 silicon_icon_state = null equip_by_category = list( @@ -193,37 +289,54 @@ GLOBAL_DATUM(cargo_ripley, /obj/vehicle/sealed/mecha/ripley/cargo) servo = new /obj/item/stock_parts/servo(src) update_part_values() -/obj/vehicle/sealed/mecha/ripley/Exit(atom/movable/leaving, direction) - if(leaving in cargo) - return FALSE - return ..() - -/obj/vehicle/sealed/mecha/ripley/contents_explosion(severity, target) - for(var/i in cargo) - var/obj/cargoobj = i - if(prob(10 * severity)) - LAZYREMOVE(cargo, cargoobj) - cargoobj.forceMove(drop_location()) - return ..() - /obj/item/mecha_parts/mecha_equipment/ejector - name = "Cargo compartment" + name = "cargo compartment" desc = "Holds cargo loaded with a hydraulic clamp." icon_state = "mecha_bin" equipment_slot = MECHA_UTILITY detachable = FALSE + ///Number of atoms we can store + var/cargo_capacity = 15 + +/obj/item/mecha_parts/mecha_equipment/ejector/attach() + . = ..() + var/obj/vehicle/sealed/mecha/ripley/workmech = chassis + workmech.cargo_hold = src + + +/obj/item/mecha_parts/mecha_equipment/ejector/Destroy() + for(var/atom/stored in contents) + forceMove(stored, drop_location()) + step_rand(stored) + return ..() + +/obj/item/mecha_parts/mecha_equipment/ejector/contents_explosion(severity, target) + for(var/obj/stored in contents) + if(prob(10 * severity)) + stored.forceMove(drop_location()) + return ..() + +/obj/item/mecha_parts/mecha_equipment/ejector/relay_container_resist_act(mob/living/user, obj/container) + to_chat(user, span_notice("You lean on the back of [container] and start pushing so it falls out of [src].")) + if(do_after(user, 300, target = container)) + if(!user || user.stat != CONSCIOUS || user.loc != src || container.loc != src ) + return + to_chat(user, span_notice("You successfully pushed [container] out of [src]!")) + container.forceMove(drop_location()) + else + if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded. + to_chat(user, span_warning("You fail to push [container] out of [src]!")) /obj/item/mecha_parts/mecha_equipment/ejector/get_snowflake_data() - var/obj/vehicle/sealed/mecha/ripley/miner = chassis var/list/data = list( "snowflake_id" = MECHA_SNOWFLAKE_ID_EJECTOR, - "cargo_capacity" = miner.cargo_capacity, + "cargo_capacity" = cargo_capacity, "cargo" = list() ) - for(var/obj/crate in miner.cargo) + for(var/atom/entry in contents) data["cargo"] += list(list( - "name" = crate.name, - "ref" = REF(crate), + "name" = entry.name, + "ref" = REF(entry), )) return data @@ -232,30 +345,89 @@ GLOBAL_DATUM(cargo_ripley, /obj/vehicle/sealed/mecha/ripley/cargo) if(.) return TRUE if(action == "eject") - var/obj/vehicle/sealed/mecha/ripley/miner = chassis - var/obj/crate = locate(params["cargoref"]) in miner.cargo + var/obj/crate = locate(params["cargoref"]) in contents if(!crate) return FALSE - to_chat(miner.occupants, "[icon2html(src, miner.occupants)][span_notice("You unload [crate].")]") + to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)][span_notice("You unload [crate].")]") crate.forceMove(drop_location()) - LAZYREMOVE(miner.cargo, crate) - if(crate == miner.ore_box) - miner.ore_box = null + if(crate == chassis.ore_box) + chassis.ore_box = null playsound(chassis, 'sound/weapons/tap.ogg', 50, TRUE) - log_message("Unloaded [crate]. Cargo compartment capacity: [miner.cargo_capacity - LAZYLEN(miner.cargo)]", LOG_MECHA) + log_message("Unloaded [crate]. Cargo compartment capacity: [cargo_capacity - contents.len]", LOG_MECHA) return TRUE -/obj/vehicle/sealed/mecha/ripley/relay_container_resist_act(mob/living/user, obj/O) - to_chat(user, span_notice("You lean on the back of [O] and start pushing so it falls out of [src].")) - if(do_after(user, 300, target = O)) - if(!user || user.stat != CONSCIOUS || user.loc != src || O.loc != src ) - return - to_chat(user, span_notice("You successfully pushed [O] out of [src]!")) - O.forceMove(drop_location()) - LAZYREMOVE(cargo, O) - else - if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded. - to_chat(user, span_warning("You fail to push [O] out of [src]!")) +/obj/item/mecha_parts/mecha_equipment/ejector/seccage + name = "holding cell" + desc = "Holds suspects loaded with a hydraulic claw." + cargo_capacity = 4 + +/obj/item/mecha_parts/mecha_equipment/ejector/seccage/Initialize(mapload) + . = ..() + RegisterSignal(src, COMSIG_MOB_REMOVING_CUFFS, PROC_REF(stop_cuff_removal)) + +/obj/item/mecha_parts/mecha_equipment/ejector/seccage/Destroy() + UnregisterSignal(src, COMSIG_MOB_REMOVING_CUFFS) + for(var/mob/freebird in contents) //Let's not qdel people iside the mech kthx + cheese_it(freebird) + return ..() + +/obj/item/mecha_parts/mecha_equipment/ejector/seccage/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + RegisterSignal(arrived, COMSIG_MOB_REMOVING_CUFFS, PROC_REF(stop_cuff_removal)) + return ..() + +/obj/item/mecha_parts/mecha_equipment/ejector/seccage/Exited(atom/movable/gone, direction) + UnregisterSignal(gone, COMSIG_MOB_REMOVING_CUFFS) + return ..() + +/obj/item/mecha_parts/mecha_equipment/ejector/seccage/proc/stop_cuff_removal(datum/source, obj/item/cuffs) + SIGNAL_HANDLER + to_chat(source, span_warning("You don't have the room to remove [cuffs]!")) + return COMSIG_MOB_BLOCK_CUFF_REMOVAL + +/obj/item/mecha_parts/mecha_equipment/ejector/seccage/ui_act(action, list/params) + if(action == "eject") + var/mob/passenger = locate(params["cargoref"]) in contents + if(!passenger) + return FALSE + to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)][span_notice("You unload [passenger].")]") + passenger.forceMove(drop_location()) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_step), passenger, chassis.dir), 1) //That's right, one tick. Just enough to cause the tile move animation. + playsound(chassis, 'sound/weapons/tap.ogg', 50, TRUE) + log_message("Unloaded [passenger]. Cargo compartment capacity: [cargo_capacity - contents.len]", LOG_MECHA) + return TRUE + return ..() + +/obj/item/mecha_parts/mecha_equipment/ejector/seccage/container_resist_act(mob/living/user) + to_chat(user, span_notice("You begin attempting a breakout. (This will take around 45 seconds and [chassis] need to remain stationary.)")) + if(!do_after(user, 1 MINUTES, target = chassis)) + return + to_chat(user, span_notice("You break out of the [src].")) + playsound(chassis, 'sound/items/crowbar.ogg', 100, TRUE) + cheese_it(user) + for(var/mob/freebird in contents) + if(user != freebird) + to_chat(freebird, span_warning("[user] has managed to open the hatch, and you fall out with him. You're free!")) + cheese_it(freebird) + +/obj/item/mecha_parts/mecha_equipment/ejector/seccage/proc/cheese_it(mob/living/escapee) + var/range = rand(1, 3) + var/variance = rand(-45, 45) + var/angle = 180 + var/turf/current_turf = get_turf(src) + switch (chassis?.dir) + if(NORTH) + angle = 270 + if(EAST) + angle = 180 + if(SOUTH) + angle = 90 + if(WEST) + angle = 0 + var/target_x = round(range * cos(angle + variance), 1) + current_turf.x + var/target_y = round(range * sin(angle + variance), 1) + current_turf.y + escapee.Knockdown(1) //Otherwise everyone hits eachother while being thrown + escapee.forceMove(drop_location()) + escapee.throw_at(locate(target_x, target_y, current_turf.z), range, 1) /** * Makes the mecha go faster and halves the mecha drill cooldown if in Lavaland pressure. diff --git a/code/modules/vehicles/motorized_wheelchair.dm b/code/modules/vehicles/motorized_wheelchair.dm index 5b0f02c7ae8d1d..7d3b70baf95eec 100644 --- a/code/modules/vehicles/motorized_wheelchair.dm +++ b/code/modules/vehicles/motorized_wheelchair.dm @@ -24,12 +24,30 @@ ///stock parts for this chair var/list/component_parts = list() +/obj/vehicle/ridden/wheelchair/motorized/Initialize(mapload) + . = ..() + // Add tier 1 stock parts so that non-crafted wheelchairs aren't empty + component_parts += GLOB.stock_part_datums[/datum/stock_part/capacitor] + component_parts += GLOB.stock_part_datums[/datum/stock_part/servo] + component_parts += GLOB.stock_part_datums[/datum/stock_part/servo] + power_cell = new /obj/item/stock_parts/cell(src) + refresh_parts() + /obj/vehicle/ridden/wheelchair/motorized/make_ridable() AddElement(/datum/element/ridable, /datum/component/riding/vehicle/wheelchair/motorized) /obj/vehicle/ridden/wheelchair/motorized/CheckParts(list/parts_list) + // This wheelchair was crafted, so clean out default parts + qdel(power_cell) + component_parts = list() + for(var/obj/item/stock_parts/part in parts_list) - // find macthing datum/stock_part for this part and add to component list + if(istype(part, /obj/item/stock_parts/cell)) // power cell, physically moves into the wheelchair + power_cell = part + part.forceMove(src) + continue + + // find matching datum/stock_part for this part and add to component list var/datum/stock_part/newstockpart = GLOB.stock_part_datums_per_object[part.type] if(isnull(newstockpart)) CRASH("No corresponding datum/stock_part for [part.type]") @@ -58,6 +76,9 @@ /obj/vehicle/ridden/wheelchair/motorized/atom_destruction(damage_flag) for(var/datum/stock_part/part in component_parts) new part.physical_object_type(drop_location()) + if(!isnull(power_cell)) + power_cell.forceMove(drop_location()) + power_cell = null return ..() /obj/vehicle/ridden/wheelchair/motorized/relaymove(mob/living/user, direction) @@ -81,28 +102,23 @@ user.put_in_hands(power_cell) power_cell = null -/obj/vehicle/ridden/wheelchair/motorized/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - I.play_tool_sound(src) - panel_open = !panel_open - user.visible_message(span_notice("[user] [panel_open ? "opens" : "closes"] the maintenance panel on [src]."), span_notice("You [panel_open ? "open" : "close"] the maintenance panel.")) - return +/obj/vehicle/ridden/wheelchair/motorized/attackby(obj/item/attacking_item, mob/user, params) if(!panel_open) return ..() - if(istype(I, /obj/item/stock_parts/cell)) + if(istype(attacking_item, /obj/item/stock_parts/cell)) if(power_cell) to_chat(user, span_warning("There is a power cell already installed.")) else - I.forceMove(src) - power_cell = I - to_chat(user, span_notice("You install the [I].")) + attacking_item.forceMove(src) + power_cell = attacking_item + to_chat(user, span_notice("You install the [attacking_item].")) refresh_parts() return - if(!istype(I, /obj/item/stock_parts)) + if(!istype(attacking_item, /obj/item/stock_parts)) return ..() - var/datum/stock_part/newstockpart = GLOB.stock_part_datums_per_object[I.type] + var/datum/stock_part/newstockpart = GLOB.stock_part_datums_per_object[attacking_item.type] if(isnull(newstockpart)) CRASH("No corresponding datum/stock_part for [newstockpart.type]") for(var/datum/stock_part/oldstockpart in component_parts) @@ -114,8 +130,7 @@ if(istype(newstockpart, type_to_check) && istype(oldstockpart, type_to_check)) if(newstockpart.tier > oldstockpart.tier) // delete the part in the users hand and add the datum part to the component_list - I.moveToNullspace() - qdel(I) + qdel(attacking_item) component_parts += newstockpart // create an new instance of the old datum stock part physical type & put it in the users hand var/obj/item/stock_parts/part = new oldstockpart.physical_object_type @@ -126,17 +141,26 @@ break refresh_parts() -/obj/vehicle/ridden/wheelchair/motorized/wrench_act(mob/living/user, obj/item/I) - to_chat(user, span_notice("You begin to detach the wheels...")) - if(!I.use_tool(src, user, 40, volume=50)) - return TRUE +/obj/vehicle/ridden/wheelchair/motorized/wrench_act(mob/living/user, obj/item/tool) + balloon_alert(user, "disassembling") + if(!tool.use_tool(src, user, 4 SECONDS, volume=50)) + return ITEM_INTERACT_SUCCESS to_chat(user, span_notice("You detach the wheels and deconstruct the chair.")) new /obj/item/stack/rods(drop_location(), 8) new /obj/item/stack/sheet/iron(drop_location(), 10) for(var/datum/stock_part/part in component_parts) new part.physical_object_type(drop_location()) + if(!isnull(power_cell)) + power_cell.forceMove(drop_location()) + power_cell = null qdel(src) - return TRUE + return ITEM_INTERACT_SUCCESS + +/obj/vehicle/ridden/wheelchair/motorized/screwdriver_act(mob/living/user, obj/item/tool) + tool.play_tool_sound(src) + panel_open = !panel_open + user.visible_message(span_notice("[user] [panel_open ? "opens" : "closes"] the maintenance panel on [src]."), span_notice("You [panel_open ? "open" : "close"] the maintenance panel.")) + return ITEM_INTERACT_SUCCESS /obj/vehicle/ridden/wheelchair/motorized/examine(mob/user) . = ..() @@ -159,30 +183,30 @@ if(!(guy in buckled_mobs)) Bump(guy) -/obj/vehicle/ridden/wheelchair/motorized/Bump(atom/A) +/obj/vehicle/ridden/wheelchair/motorized/Bump(atom/bumped_atom) . = ..() // Here is the shitty emag functionality. - if(obj_flags & EMAGGED && (isclosedturf(A) || isliving(A))) + if(obj_flags & EMAGGED && (isclosedturf(bumped_atom) || isliving(bumped_atom))) explosion(src, devastation_range = -1, heavy_impact_range = 1, light_impact_range = 3, flash_range = 2, adminlog = FALSE) visible_message(span_boldwarning("[src] explodes!!")) return // If the speed is higher than delay_multiplier throw the person on the wheelchair away - if(A.density && speed > delay_multiplier && has_buckled_mobs()) + if(bumped_atom.density && speed > delay_multiplier && has_buckled_mobs()) var/mob/living/disabled = buckled_mobs[1] var/atom/throw_target = get_edge_target_turf(disabled, pick(GLOB.cardinals)) unbuckle_mob(disabled) disabled.throw_at(throw_target, 2, 3) - disabled.Knockdown(100) + disabled.Knockdown(10 SECONDS) disabled.adjustStaminaLoss(40) - if(isliving(A)) - var/mob/living/ramtarget = A + if(isliving(bumped_atom)) + var/mob/living/ramtarget = bumped_atom throw_target = get_edge_target_turf(ramtarget, pick(GLOB.cardinals)) ramtarget.throw_at(throw_target, 2, 3) - ramtarget.Knockdown(80) + ramtarget.Knockdown(8 SECONDS) ramtarget.adjustStaminaLoss(35) visible_message(span_danger("[src] crashes into [ramtarget], sending [disabled] and [ramtarget] flying!")) else - visible_message(span_danger("[src] crashes into [A], sending [disabled] flying!")) + visible_message(span_danger("[src] crashes into [bumped_atom], sending [disabled] flying!")) playsound(src, 'sound/effects/bang.ogg', 50, 1) /obj/vehicle/ridden/wheelchair/motorized/emag_act(mob/user, obj/item/card/emag/emag_card) diff --git a/code/modules/vehicles/pimpin_ride.dm b/code/modules/vehicles/pimpin_ride.dm index 39b78b99f62a68..7ef79cb89cf04c 100644 --- a/code/modules/vehicles/pimpin_ride.dm +++ b/code/modules/vehicles/pimpin_ride.dm @@ -14,6 +14,7 @@ /obj/vehicle/ridden/janicart/Initialize(mapload) . = ..() + register_context() update_appearance() AddElement(/datum/element/ridable, /datum/component/riding/vehicle/janicart) GLOB.janitor_devices += src @@ -85,6 +86,44 @@ if (!.) try_remove_bag(user) +/obj/vehicle/ridden/janicart/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + + if(!held_item) + if(occupant_amount() > 0) + context[SCREENTIP_CONTEXT_LMB] = "Dismount" + context[SCREENTIP_CONTEXT_RMB] = "Dismount" + if(trash_bag) + context[SCREENTIP_CONTEXT_RMB] = "Remove trash bag" + if(is_key(inserted_key) && occupants.Find(user)) + context[SCREENTIP_CONTEXT_ALT_LMB] = "Remove key" + return CONTEXTUAL_SCREENTIP_SET + else if(trash_bag) + context[SCREENTIP_CONTEXT_LMB] = "Remove trash bag" + context[SCREENTIP_CONTEXT_RMB] = "Remove trash bag" + return CONTEXTUAL_SCREENTIP_SET + + if(istype(held_item, /obj/item/storage/bag/trash) && !trash_bag) + context[SCREENTIP_CONTEXT_LMB] = "Add trash bag" + context[SCREENTIP_CONTEXT_RMB] = "Add trash bag" + return CONTEXTUAL_SCREENTIP_SET + + if(istype(held_item, /obj/item/janicart_upgrade) && !installed_upgrade) + context[SCREENTIP_CONTEXT_LMB] = "Install upgrade" + return CONTEXTUAL_SCREENTIP_SET + + if(istype(held_item, /obj/item/screwdriver) && installed_upgrade) + context[SCREENTIP_CONTEXT_LMB] = "Remove upgrade" + return CONTEXTUAL_SCREENTIP_SET + + if(is_key(held_item) && !is_key(inserted_key)) + context[SCREENTIP_CONTEXT_LMB] = "Insert key" + context[SCREENTIP_CONTEXT_RMB] = "Insert key" + return CONTEXTUAL_SCREENTIP_SET + else if (trash_bag) + context[SCREENTIP_CONTEXT_LMB] = "Insert into trash bag" + context[SCREENTIP_CONTEXT_RMB] = "Insert into trash bag" + return CONTEXTUAL_SCREENTIP_SET /** * Called if the attached bag is being qdeleted, ensures appearance is maintained properly diff --git a/code/modules/vehicles/sealed.dm b/code/modules/vehicles/sealed.dm index dc49f6b5dbe55f..de1b5ac93f0527 100644 --- a/code/modules/vehicles/sealed.dm +++ b/code/modules/vehicles/sealed.dm @@ -3,6 +3,8 @@ var/enter_delay = 2 SECONDS var/mouse_pointer var/headlights_toggle = FALSE + ///Determines which occupants provide access when bumping into doors + var/access_provider_flags = VEHICLE_CONTROL_DRIVE /obj/vehicle/sealed/generate_actions() . = ..() @@ -31,7 +33,7 @@ . = ..() if(istype(A, /obj/machinery/door)) var/obj/machinery/door/conditionalwall = A - for(var/mob/occupant as anything in return_drivers()) + for(var/mob/occupant as anything in return_controllers_with_flag(access_provider_flags)) if(conditionalwall.try_safety_unlock(occupant)) return conditionalwall.bumpopen(occupant) diff --git a/code/modules/vehicles/vehicle_actions.dm b/code/modules/vehicles/vehicle_actions.dm index 1fbf394d2700aa..ed9884a9ea3cbd 100644 --- a/code/modules/vehicles/vehicle_actions.dm +++ b/code/modules/vehicles/vehicle_actions.dm @@ -232,7 +232,7 @@ var/hornsound = 'sound/items/carhorn.ogg' /datum/action/vehicle/sealed/horn/Trigger(trigger_flags) - if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_CAR_HONK)) + if(TIMER_COOLDOWN_RUNNING(src, COOLDOWN_CAR_HONK)) return TIMER_COOLDOWN_START(src, COOLDOWN_CAR_HONK, 2 SECONDS) vehicle_entered_target.visible_message(span_danger("[vehicle_entered_target] loudly honks!")) @@ -301,9 +301,11 @@ return COOLDOWN_START(src, thank_time_cooldown, 6 SECONDS) var/obj/vehicle/sealed/car/clowncar/clown_car = vehicle_entered_target - var/mob/living/carbon/human/clown = pick(clown_car.return_drivers()) - if(!clown) + var/list/mob/drivers = clown_car.return_drivers() + if(!length(drivers)) + to_chat(owner, span_danger("You prepare to thank the driver, only to realize that they don't exist.")) return + var/mob/clown = pick(drivers) owner.say("Thank you for the fun ride, [clown.name]!") clown_car.increment_thanks_counter() @@ -316,7 +318,7 @@ var/bell_cooldown /datum/action/vehicle/ridden/wheelchair/bell/Trigger(trigger_flags) - if(TIMER_COOLDOWN_CHECK(src, bell_cooldown)) + if(TIMER_COOLDOWN_RUNNING(src, bell_cooldown)) return TIMER_COOLDOWN_START(src, bell_cooldown, 0.5 SECONDS) playsound(vehicle_ridden_target, 'sound/machines/microwave/microwave-end.ogg', 70) diff --git a/code/modules/vehicles/wheelchair.dm b/code/modules/vehicles/wheelchair.dm index 6dbc3c93a59c27..e7b3d9b3a56afc 100644 --- a/code/modules/vehicles/wheelchair.dm +++ b/code/modules/vehicles/wheelchair.dm @@ -52,15 +52,16 @@ . = ..() update_appearance() -/obj/vehicle/ridden/wheelchair/wrench_act(mob/living/user, obj/item/I) //Attackby should stop it attacking the wheelchair after moving away during decon +/obj/vehicle/ridden/wheelchair/wrench_act(mob/living/user, obj/item/tool) //Attackby should stop it attacking the wheelchair after moving away during decon ..() - to_chat(user, span_notice("You begin to detach the wheels...")) - if(I.use_tool(src, user, 40, volume=50)) - to_chat(user, span_notice("You detach the wheels and deconstruct the chair.")) - new /obj/item/stack/rods(drop_location(), 6) - new /obj/item/stack/sheet/iron(drop_location(), 4) - qdel(src) - return TRUE + balloon_alert(user, "disassembling") + if(!tool.use_tool(src, user, 4 SECONDS, volume=50)) + return ITEM_INTERACT_SUCCESS + to_chat(user, span_notice("You detach the wheels and deconstruct the chair.")) + new /obj/item/stack/rods(drop_location(), 6) + new /obj/item/stack/sheet/iron(drop_location(), 4) + qdel(src) + return ITEM_INTERACT_SUCCESS /obj/vehicle/ridden/wheelchair/AltClick(mob/user) return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index ab882bf7997924..bc2f38b2d9f18f 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -301,7 +301,7 @@ /obj/machinery/vending/deconstruct(disassembled = TRUE) if(refill_canister) return ..() - if(!(flags_1 & NODECONSTRUCT_1)) //the non constructable vendors drop metal instead of a machine frame. + if(!(obj_flags & NO_DECONSTRUCTION)) //the non constructable vendors drop metal instead of a machine frame. new /obj/item/stack/sheet/iron(loc, 3) qdel(src) @@ -620,7 +620,7 @@ return FALSE if(default_unfasten_wrench(user, tool, time = 6 SECONDS)) unbuckle_all_mobs(TRUE) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS return FALSE /obj/machinery/vending/screwdriver_act(mob/living/user, obj/item/attack_item) @@ -746,7 +746,6 @@ tilted = TRUE tilted_rotation = picked_rotation layer = ABOVE_MOB_LAYER - SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER) if(get_turf(fatty) != get_turf(src)) throw_at(get_turf(fatty), 1, 1, spin = FALSE, quickstart = FALSE) @@ -808,7 +807,7 @@ var/burn = (damage_type == BURN ? damage : 0) * 0.5 carbon_target.take_bodypart_damage(brute, burn, check_armor = TRUE, wound_bonus = 5) // otherwise, deal it to 2 random limbs (or the same one) which will likely shatter something carbon_target.take_bodypart_damage(brute, burn, check_armor = TRUE, wound_bonus = 5) - carbon_target.AddElement(/datum/element/squish, 80 SECONDS) + //carbon_target.AddElement(/datum/element/squish, 80 SECONDS) // NOVA EDIT REMOVAL else living_target.apply_damage(adjusted_damage, damage_type, blocked = blocked, forced = TRUE, attack_direction = crush_dir) @@ -901,8 +900,8 @@ weighted_crits[CRUSH_CRIT_SHATTER_LEGS] = 100 weighted_crits[CRUSH_CRIT_PARAPALEGIC] = 80 - //weighted_crits[CRUSH_CRIT_HEADGIB] = 20 // SKYRAT EDIT REMOVAL - weighted_crits[CRUSH_CRIT_SQUISH_LIMB] = 80 // SKYRAT EDIT CHANGE - ORIGINAL: weighted_crits[CRUSH_CRIT_SQUISH_LIMB] = 100 + //weighted_crits[CRUSH_CRIT_HEADGIB] = 20 // NOVA EDIT REMOVAL + weighted_crits[CRUSH_CRIT_SQUISH_LIMB] = 80 // NOVA EDIT CHANGE - ORIGINAL: weighted_crits[CRUSH_CRIT_SQUISH_LIMB] = 100 return weighted_crits @@ -1016,7 +1015,6 @@ tilted = FALSE layer = initial(layer) - SET_PLANE_IMPLICIT(src, initial(plane)) var/matrix/to_turn = turn(transform, -tilted_rotation) animate(src, transform = to_turn, 0.2 SECONDS) @@ -1041,10 +1039,10 @@ LAZYADD(product_datum.returned_products, inserted_item) return - if(vending_machine_input[format_text(inserted_item.name)]) - vending_machine_input[format_text(inserted_item.name)]++ + if(vending_machine_input[inserted_item.type]) + vending_machine_input[inserted_item.type]++ else - vending_machine_input[format_text(inserted_item.name)] = 1 + vending_machine_input[inserted_item.type] = 1 loaded_items++ /obj/machinery/vending/unbuckle_mob(mob/living/buckled_mob, force = FALSE, can_fall = TRUE) @@ -1068,7 +1066,7 @@ /obj/machinery/vending/exchange_parts(mob/user, obj/item/storage/part_replacer/replacer) if(!istype(replacer)) return FALSE - if((flags_1 & NODECONSTRUCT_1) && !replacer.works_from_distance) + if((obj_flags & NO_DECONSTRUCTION) && !replacer.works_from_distance) return FALSE if(!component_parts || !refill_canister) return FALSE @@ -1208,11 +1206,12 @@ for (var/datum/data/vending_product/product_record as anything in product_records + coin_records + hidden_records) var/list/product_data = list( name = product_record.name, + path = replacetext(replacetext("[product_record.product_path]", "/obj/item/", ""), "/", "-"), amount = product_record.amount, colorable = product_record.colorable, ) - .["stock"][product_record.name] = product_data + .["stock"][product_data["path"]] = product_data .["extended_inventory"] = extended_inventory @@ -1342,7 +1341,7 @@ sec_radio = new (src) sec_radio.set_listening(FALSE) sec_radio.set_frequency(FREQ_SECURITY) - sec_radio.talk_into(src, "SECURITY ALERT: [usr] recorded attempting to purchase [item_record.name] in [get_area(src)]. Please watch for substance abuse.", FREQ_SECURITY) // SKYRAT EDIT CHANGE + sec_radio.talk_into(src, "SECURITY ALERT: [usr] recorded attempting to purchase [item_record.name] in [get_area(src)]. Please watch for substance abuse.", FREQ_SECURITY) // NOVA EDIT CHANGE GLOB.narcd_underages += usr flick(icon_deny,src) vend_ready = TRUE @@ -1601,12 +1600,12 @@ . = ..() .["access"] = compartmentLoadAccessCheck(user) .["vending_machine_input"] = list() - for (var/stocked_item in vending_machine_input) + for (var/obj/item/stocked_item as anything in vending_machine_input) if(vending_machine_input[stocked_item] > 0) var/base64 var/price = 0 for(var/obj/item/stored_item in contents) - if(format_text(stored_item.name) == stocked_item) + if(stored_item.type == stocked_item) price = stored_item.custom_price if(!base64) //generate an icon of the item to use in UI if(base64_cache[stored_item.type]) @@ -1616,7 +1615,8 @@ base64_cache[stored_item.type] = base64 break var/list/data = list( - name = stocked_item, + path = stocked_item, + name = initial(stocked_item.name), price = price, img = base64, amount = vending_machine_input[stocked_item], @@ -1631,8 +1631,8 @@ switch(action) if("dispense") if(isliving(usr)) - vend_act(usr, params["item"]) - vend_ready = TRUE + vend_act(usr, params) + vend_ready = TRUE return TRUE /obj/machinery/vending/custom/attackby(obj/item/attack_item, mob/user, params) @@ -1670,9 +1670,10 @@ * Updating stock, account transactions, alerting users. * @return -- TRUE if a valid condition was met, FALSE otherwise. */ -/obj/machinery/vending/custom/proc/vend_act(mob/living/user, choice) +/obj/machinery/vending/custom/proc/vend_act(mob/living/user, list/params) if(!vend_ready) return + var/obj/item/choice = text2path(params["item"]) // typepath is a string coming from javascript, we need to convert it back var/obj/item/dispensed_item var/obj/item/card/id/id_card = user.get_idcard(TRUE) vend_ready = FALSE @@ -1681,8 +1682,8 @@ flick(icon_deny, src) return TRUE var/datum/bank_account/payee = id_card.registered_account - for(var/obj/stock in contents) - if(format_text(stock.name) == choice) + for(var/obj/item/stock in contents) + if(istype(stock, choice)) dispensed_item = stock break if(!dispensed_item) diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm index 02daa0ce7e7dd0..59bd06135bb83c 100644 --- a/code/modules/vending/autodrobe.dm +++ b/code/modules/vending/autodrobe.dm @@ -58,6 +58,8 @@ /obj/item/clothing/glasses/eyepatch = 1, /obj/item/clothing/glasses/eyepatch/medical = 1, /obj/item/clothing/under/costume/gi = 1, + /obj/item/clothing/head/soft/propeller_hat = 1, + /obj/item/clothing/neck/bowtie/rainbow = 1, ), ), list( diff --git a/code/modules/vending/cartridge.dm b/code/modules/vending/cartridge.dm index dabf334c1f97e0..7c4a2c9578d70d 100644 --- a/code/modules/vending/cartridge.dm +++ b/code/modules/vending/cartridge.dm @@ -13,7 +13,7 @@ /obj/item/computer_disk/ordnance = 10, /obj/item/computer_disk/quartermaster = 10, /obj/item/computer_disk/command/captain = 3, - /obj/item/modular_computer/pda/heads = 10, + /obj/item/modular_computer/pda = 10, ) refill_canister = /obj/item/vending_refill/cart default_price = PAYCHECK_COMMAND diff --git a/code/modules/vending/engivend.dm b/code/modules/vending/engivend.dm index 23a005abe16ac5..3d7c3f7513316b 100644 --- a/code/modules/vending/engivend.dm +++ b/code/modules/vending/engivend.dm @@ -23,7 +23,7 @@ ) premium = list( /obj/item/storage/belt/utility = 3, - ///obj/item/construction/rcd/loaded = 2, // SKYRAT EDIT REMOVAL + ///obj/item/construction/rcd/loaded = 2, // NOVA EDIT REMOVAL /obj/item/storage/box/smart_metal_foam = 1, ) refill_canister = /obj/item/vending_refill/engivend diff --git a/code/modules/vending/games.dm b/code/modules/vending/games.dm index e51205c00e4a06..33fefd08d2e796 100644 --- a/code/modules/vending/games.dm +++ b/code/modules/vending/games.dm @@ -52,11 +52,12 @@ /obj/item/skillchip/appraiser = 2, /obj/item/skillchip/basketweaving = 2, /obj/item/skillchip/bonsai = 2, + /obj/item/skillchip/intj = 2, /obj/item/skillchip/light_remover = 2, + /obj/item/skillchip/master_angler = 2, /obj/item/skillchip/sabrage = 2, /obj/item/skillchip/useless_adapter = 5, /obj/item/skillchip/wine_taster = 2, - /obj/item/skillchip/master_angler = 2, ), ), list( @@ -80,6 +81,7 @@ /obj/item/dice/fudge = 9, /obj/item/clothing/shoes/wheelys/skishoes = 4, /obj/item/instrument/musicalmoth = 1, + /obj/item/gun/ballistic/revolver/russian = 1, //the most dangerous game ) premium = list( /obj/item/disk/holodisk = 5, diff --git a/code/modules/vending/liberation_toy.dm b/code/modules/vending/liberation_toy.dm index 0bfb2e6c2dfdcd..c64903fcb5fbe2 100644 --- a/code/modules/vending/liberation_toy.dm +++ b/code/modules/vending/liberation_toy.dm @@ -1,5 +1,5 @@ /obj/machinery/vending/toyliberationstation - name = "\improper Syndicate Donksoft Toy Vendor" + name = "\improper Symphionia Donksoft Toy Vendor" desc = "An ages 8 and up approved vendor that dispenses toys. If you were to find the right wires, you can unlock the adult mode setting!" icon_state = "syndi" panel_type = "panel18" diff --git a/code/modules/vending/runic_vendor.dm b/code/modules/vending/runic_vendor.dm index 3edb5b2726403f..537ba936a5dc70 100644 --- a/code/modules/vending/runic_vendor.dm +++ b/code/modules/vending/runic_vendor.dm @@ -2,7 +2,7 @@ /obj/machinery/vending/runic_vendor name = "\improper Runic Vending Machine" - desc = "This vending machine was designed for warfare! A perfect bait for Nanotrasen's crew thirst for consumerism." + desc = "This vending machine was designed for warfare! A perfect bait for Symphionia's crew thirst for consumerism." icon_state = "RunicVendor" panel_type = "panel10" product_slogans = "Come get free magic!;50% off on Mjollnirs today!; Buy a warp whistle and get another one free!" diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm index b54edffe4c0447..ebecb03e1302ca 100644 --- a/code/modules/vending/security.dm +++ b/code/modules/vending/security.dm @@ -16,6 +16,7 @@ /obj/item/storage/box/evidence = 6, /obj/item/flashlight/seclite = 4, /obj/item/restraints/legcuffs/bola/energy = 7, + /obj/item/clothing/gloves/tackler = 5, ) contraband = list( /obj/item/clothing/glasses/sunglasses = 2, @@ -26,7 +27,6 @@ /obj/item/coin/antagtoken = 1, /obj/item/clothing/head/helmet/blueshirt = 1, /obj/item/clothing/suit/armor/vest/blueshirt = 1, - /obj/item/clothing/gloves/tackler = 5, /obj/item/grenade/stingbang = 1, /obj/item/watertank/pepperspray = 2, /obj/item/storage/belt/holster/energy = 4, @@ -46,4 +46,5 @@ F.update_brightness() /obj/item/vending_refill/security + machine_name = "SecTech" icon_state = "refill_sec" diff --git a/code/modules/vending/snack.dm b/code/modules/vending/snack.dm index 23b1bcf2c71e34..1e81679135b3f5 100644 --- a/code/modules/vending/snack.dm +++ b/code/modules/vending/snack.dm @@ -38,6 +38,7 @@ premium = list( /obj/item/food/spacers_sidekick = 3, /obj/item/food/pistachios = 3, + /obj/item/food/swirl_lollipop = 3, ) refill_canister = /obj/item/vending_refill/snack req_access = list(ACCESS_KITCHEN) diff --git a/code/modules/vending/sustenance.dm b/code/modules/vending/sustenance.dm index 1a2589fcdf1520..d822912149087b 100644 --- a/code/modules/vending/sustenance.dm +++ b/code/modules/vending/sustenance.dm @@ -44,11 +44,11 @@ if(isliving(user)) var/mob/living/living_user = user if(!(machine_stat & NOPOWER) && !istype(living_user.get_idcard(TRUE), /obj/item/card/id/advanced/prisoner)) - speak("No valid labor points account found. Vending is not permitted.") + speak("No valid prisoner account found. Vending is not permitted.") return return ..() -/obj/machinery/vending/sustenance/proceed_payment(obj/item/card/id/paying_id_card, datum/data/vending_product/product_to_vend, price_to_use) +/obj/machinery/vending/sustenance/labor_camp/proceed_payment(obj/item/card/id/paying_id_card, datum/data/vending_product/product_to_vend, price_to_use) if(!istype(paying_id_card, /obj/item/card/id/advanced/prisoner)) speak("I don't take bribes! Pay with labor points!") return FALSE @@ -66,7 +66,7 @@ paying_scum_id.points -= price_to_use return TRUE -/obj/machinery/vending/sustenance/fetch_balance_to_use(obj/item/card/id/passed_id) +/obj/machinery/vending/sustenance/labor_camp/fetch_balance_to_use(obj/item/card/id/passed_id) if(!istype(passed_id, /obj/item/card/id/advanced/prisoner)) return null //no points balance - no balance at all var/obj/item/card/id/advanced/prisoner/paying_scum_id = passed_id diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm index e43314aa3076b3..6c4038067d0cc0 100644 --- a/code/modules/vending/wardrobes.dm +++ b/code/modules/vending/wardrobes.dm @@ -14,7 +14,7 @@ icon_state = "secdrobe" product_ads = "Beat perps in style!;It's red so you can't see the blood!;You have the right to be fashionable!;Now you can be the fashion police you always wanted to be!" vend_reply = "Thank you for using the SecDrobe!" - /* SKYRAT EDIT - LISTS OVERRIDDEN IN 'modular_skyrat\modules\sec_haul\code\misc\vending.dm' + /* NOVA EDIT - LISTS OVERRIDDEN IN 'modular_nova\modules\sec_haul\code\misc\vending.dm' products = list( /obj/item/clothing/head/beret/sec = 3, /obj/item/clothing/head/soft/sec = 3, @@ -24,6 +24,7 @@ /obj/item/clothing/under/rank/security/officer/grey = 3, /obj/item/clothing/under/pants/slacks = 3, /obj/item/clothing/under/rank/security/officer/blueshirt = 3, + /obj/item/clothing/suit/armor/vest/secjacket = 3, /obj/item/clothing/suit/hooded/wintercoat/security = 3, /obj/item/clothing/suit/armor/vest = 3, /obj/item/clothing/gloves/color/black = 3, @@ -172,6 +173,9 @@ /obj/item/storage/backpack/messenger = 3, /obj/item/storage/bag/mail = 3, /obj/item/radio/headset/headset_cargo = 3, + /obj/item/clothing/accessory/pocketprotector = 3, + /obj/item/clothing/head/utility/hardhat/orange = 3, + /obj/item/clothing/suit/hazardvest = 3, ) premium = list( /obj/item/clothing/head/costume/mailman = 1, @@ -638,6 +642,7 @@ /obj/item/clothing/under/rank/security/detective = 2, /obj/item/clothing/under/rank/security/detective/skirt = 2, /obj/item/clothing/suit/jacket/det_suit = 2, + /obj/item/clothing/suit/jacket/det_suit/brown = 2, /obj/item/clothing/shoes/sneakers/brown = 2, /obj/item/clothing/gloves/latex = 2, /obj/item/clothing/gloves/color/black = 2, diff --git a/code/modules/wiremod/components/abstract/equpiment_action.dm b/code/modules/wiremod/components/abstract/equpiment_action.dm deleted file mode 100644 index 17f931ae5e3085..00000000000000 --- a/code/modules/wiremod/components/abstract/equpiment_action.dm +++ /dev/null @@ -1,65 +0,0 @@ -/obj/item/circuit_component/equipment_action - display_name = "Abstract Equipment Action" - desc = "You shouldn't be seeing this." - - /// The icon of the button - var/datum/port/input/option/icon_options - - /// The name to use for the button - var/datum/port/input/button_name - - /// Called when the user presses the button - var/datum/port/output/signal - -/obj/item/circuit_component/equipment_action/Initialize(mapload, default_icon) - . = ..() - - if (!isnull(default_icon)) - icon_options.set_input(default_icon) - - button_name = add_input_port("Name", PORT_TYPE_STRING) - - signal = add_output_port("Signal", PORT_TYPE_SIGNAL) - -/obj/item/circuit_component/equipment_action/populate_options() - var/static/action_options = list( - "Blank", - - "One", - "Two", - "Three", - "Four", - "Five", - - "Blood", - "Bomb", - "Brain", - "Brain Damage", - "Cross", - "Electricity", - "Exclamation", - "Heart", - "Id", - "Info", - "Injection", - "Magnetism", - "Minus", - "Network", - "Plus", - "Power", - "Question", - "Radioactive", - "Reaction", - "Repair", - "Say", - "Scan", - "Shield", - "Skull", - "Sleep", - "Wireless", - ) - - icon_options = add_option_port("Icon", action_options) - -/obj/item/circuit_component/equipment_action/proc/update_action() - return diff --git a/code/modules/wiremod/components/action/equpiment_action.dm b/code/modules/wiremod/components/action/equpiment_action.dm new file mode 100644 index 00000000000000..54150ca44d60b6 --- /dev/null +++ b/code/modules/wiremod/components/action/equpiment_action.dm @@ -0,0 +1,92 @@ +/obj/item/circuit_component/equipment_action + display_name = "Equipment Action" + desc = "Represents an action the user can take when using supported shells." + required_shells = list(/obj/item/organ/internal/cyberimp/bci, /obj/item/mod/module/circuit) + + /// The icon of the button + var/datum/port/input/option/icon_options + + /// The name to use for the button + var/datum/port/input/button_name + + /// The mob who activated their granted action + var/datum/port/output/user + + /// Called when the user presses the button + var/datum/port/output/signal + + /// An assoc list of datum REF()s, linked to the actions granted. + var/list/granted_to = list() + +/obj/item/circuit_component/equipment_action/Initialize(mapload, default_icon) + . = ..() + + if (!isnull(default_icon)) + icon_options.set_input(default_icon) + + button_name = add_input_port("Name", PORT_TYPE_STRING) + + user = add_output_port("User", PORT_TYPE_USER) + signal = add_output_port("Signal", PORT_TYPE_SIGNAL) + +/obj/item/circuit_component/equipment_action/Destroy() + QDEL_LIST_ASSOC_VAL(granted_to) + return ..() + +/obj/item/circuit_component/equipment_action/populate_options() + var/static/action_options = list( + "Blank", + + "One", + "Two", + "Three", + "Four", + "Five", + + "Blood", + "Bomb", + "Brain", + "Brain Damage", + "Cross", + "Electricity", + "Exclamation", + "Heart", + "Id", + "Info", + "Injection", + "Magnetism", + "Minus", + "Network", + "Plus", + "Power", + "Question", + "Radioactive", + "Reaction", + "Repair", + "Say", + "Scan", + "Shield", + "Skull", + "Sleep", + "Wireless", + ) + + icon_options = add_option_port("Icon", action_options) + +/obj/item/circuit_component/equipment_action/register_shell(atom/movable/shell) + . = ..() + SEND_SIGNAL(shell, COMSIG_CIRCUIT_ACTION_COMPONENT_REGISTERED, src) + +/obj/item/circuit_component/equipment_action/unregister_shell(atom/movable/shell) + . = ..() + SEND_SIGNAL(shell, COMSIG_CIRCUIT_ACTION_COMPONENT_UNREGISTERED, src) + +/obj/item/circuit_component/equipment_action/input_received(datum/port/input/port) + if (length(granted_to)) + update_actions() + +/obj/item/circuit_component/equipment_action/proc/update_actions() + for(var/ref in granted_to) + var/datum/action/granted_action = granted_to[ref] + granted_action.name = button_name.value || "Action" + granted_action.button_icon_state = "bci_[replacetextEx(lowertext(icon_options.value), " ", "_")]" diff --git a/code/modules/wiremod/components/action/pathfind.dm b/code/modules/wiremod/components/action/pathfind.dm index 9820d9b81e076a..0de6d346db17f8 100644 --- a/code/modules/wiremod/components/action/pathfind.dm +++ b/code/modules/wiremod/components/action/pathfind.dm @@ -77,7 +77,7 @@ return // If we're going to the same place and the cooldown hasn't subsided, we're probably on the same path as before - if (destination == old_dest && TIMER_COOLDOWN_CHECK(parent, COOLDOWN_CIRCUIT_PATHFIND_SAME)) + if (destination == old_dest && TIMER_COOLDOWN_RUNNING(parent, COOLDOWN_CIRCUIT_PATHFIND_SAME)) // Check if the current turf is the same as the current turf we're supposed to be in. If so, then we set the next step as the next turf on the list if(current_turf == next_turf) @@ -92,7 +92,7 @@ else // Either we're not going to the same place or the cooldown is over. Either way, we need a new path - if(destination != old_dest && TIMER_COOLDOWN_CHECK(parent, COOLDOWN_CIRCUIT_PATHFIND_DIF)) + if(destination != old_dest && TIMER_COOLDOWN_RUNNING(parent, COOLDOWN_CIRCUIT_PATHFIND_DIF)) failed.set_output(COMPONENT_SIGNAL) reason_failed.set_output("Cooldown still active!") return diff --git a/code/modules/wiremod/components/action/radio.dm b/code/modules/wiremod/components/action/radio.dm index 74b2c54c1b816d..3940059453ead4 100644 --- a/code/modules/wiremod/components/action/radio.dm +++ b/code/modules/wiremod/components/action/radio.dm @@ -74,7 +74,7 @@ INVOKE_ASYNC(src, PROC_REF(handle_radio_input), port) /obj/item/circuit_component/radio/proc/handle_radio_input(datum/port/input/port) - if(!TIMER_COOLDOWN_CHECK(parent, COOLDOWN_SIGNALLER_SEND)) + if(TIMER_COOLDOWN_RUNNING(parent, COOLDOWN_SIGNALLER_SEND)) return var/frequency = freq.value diff --git a/code/modules/wiremod/components/action/soundemitter.dm b/code/modules/wiremod/components/action/soundemitter.dm index 6ee9b273fae394..44b9cbae8ab05e 100644 --- a/code/modules/wiremod/components/action/soundemitter.dm +++ b/code/modules/wiremod/components/action/soundemitter.dm @@ -87,7 +87,7 @@ if(!parent.shell) return - if(TIMER_COOLDOWN_CHECK(parent.shell, COOLDOWN_CIRCUIT_SOUNDEMITTER)) + if(TIMER_COOLDOWN_RUNNING(parent.shell, COOLDOWN_CIRCUIT_SOUNDEMITTER)) return var/sound_to_play = options_map[sound_file.value] diff --git a/code/modules/wiremod/components/action/speech.dm b/code/modules/wiremod/components/action/speech.dm index 809c473c14a50e..0e2936bcfbfdb1 100644 --- a/code/modules/wiremod/components/action/speech.dm +++ b/code/modules/wiremod/components/action/speech.dm @@ -26,10 +26,10 @@ if(!parent.shell) return - if(TIMER_COOLDOWN_CHECK(parent.shell, COOLDOWN_CIRCUIT_SPEECH)) + if(TIMER_COOLDOWN_RUNNING(parent.shell, COOLDOWN_CIRCUIT_SPEECH)) return if(message.value) var/atom/movable/shell = parent.shell - shell.say(message.value, forced = "circuit speech | [key_name(parent.get_creator())]") + shell.say(message.value, forced = "circuit speech | [parent.get_creator()]") TIMER_COOLDOWN_START(shell, COOLDOWN_CIRCUIT_SPEECH, speech_cooldown) diff --git a/code/modules/wiremod/components/atom/matscanner.dm b/code/modules/wiremod/components/atom/matscanner.dm index bbc36bb9789711..eb23efddb3aca9 100644 --- a/code/modules/wiremod/components/atom/matscanner.dm +++ b/code/modules/wiremod/components/atom/matscanner.dm @@ -34,10 +34,7 @@ if(!istype(entity) || !IN_GIVEN_RANGE(location, entity, max_range)) result.set_output(null) return - var/breakdown_flags = BREAKDOWN_INCLUDE_ALCHEMY - if(break_down_alloys.value) - breakdown_flags |= BREAKDOWN_ALLOYS - var/list/composition = entity.get_material_composition(breakdown_flags) + var/list/composition = entity.get_material_composition() var/list/composition_but_with_string_keys = list() for(var/datum/material/material as anything in composition) composition_but_with_string_keys[material.name] = composition[material] diff --git a/code/modules/wiremod/components/bci/hud/target_intercept.dm b/code/modules/wiremod/components/bci/hud/target_intercept.dm index 8352b0aead991e..bfdaec13122a05 100644 --- a/code/modules/wiremod/components/bci/hud/target_intercept.dm +++ b/code/modules/wiremod/components/bci/hud/target_intercept.dm @@ -42,7 +42,7 @@ if(!owner || !istype(owner) || !owner.client) return - if(TIMER_COOLDOWN_CHECK(parent.shell, COOLDOWN_CIRCUIT_TARGET_INTERCEPT)) + if(TIMER_COOLDOWN_RUNNING(parent.shell, COOLDOWN_CIRCUIT_TARGET_INTERCEPT)) return to_chat(owner, "Left-click to trigger target interceptor!") diff --git a/code/modules/wiremod/components/bci/thought_listener.dm b/code/modules/wiremod/components/bci/thought_listener.dm index 53d50f9c54b24b..ae6889e2da9048 100644 --- a/code/modules/wiremod/components/bci/thought_listener.dm +++ b/code/modules/wiremod/components/bci/thought_listener.dm @@ -26,7 +26,7 @@ /obj/item/circuit_component/thought_listener/populate_ports() input_name = add_input_port("Input Name", PORT_TYPE_STRING) input_desc = add_input_port("Input Description", PORT_TYPE_STRING) - output = add_output_port("Recieved Thought", PORT_TYPE_STRING) + output = add_output_port("Received Thought", PORT_TYPE_STRING) trigger_output = add_output_port("Triggered", PORT_TYPE_SIGNAL) failure = add_output_port("On Failure", PORT_TYPE_SIGNAL) diff --git a/code/modules/wiremod/components/list/assoc_list_pick.dm b/code/modules/wiremod/components/list/assoc_list_pick.dm index 9c8e94c074a630..64dbe6a0a0b65b 100644 --- a/code/modules/wiremod/components/list/assoc_list_pick.dm +++ b/code/modules/wiremod/components/list/assoc_list_pick.dm @@ -15,7 +15,6 @@ /obj/item/circuit_component/list_pick/assoc/make_list_port() input_list = add_input_port("List", PORT_TYPE_ASSOC_LIST(PORT_TYPE_STRING, PORT_TYPE_ANY)) - /obj/item/circuit_component/list_pick/assoc/pre_input_received(datum/port/input/port) if(port == list_options) var/new_type = list_options.value diff --git a/code/modules/wiremod/components/list/assoc_literal.dm b/code/modules/wiremod/components/list/assoc_literal.dm index a3f97cae745504..f829ad08f25ec3 100644 --- a/code/modules/wiremod/components/list/assoc_literal.dm +++ b/code/modules/wiremod/components/list/assoc_literal.dm @@ -39,20 +39,20 @@ /obj/item/circuit_component/assoc_literal/populate_ports() AddComponent(/datum/component/circuit_component_add_port, \ - port_list = entry_ports, \ + port_list = key_ports, \ add_action = "add", \ remove_action = "remove", \ - port_type = PORT_TYPE_ANY, \ - prefix = "Index", \ + port_type = PORT_TYPE_STRING, \ + prefix = "Key", \ minimum_amount = 1, \ maximum_amount = 20 \ ) AddComponent(/datum/component/circuit_component_add_port, \ - port_list = key_ports, \ + port_list = entry_ports, \ add_action = "add", \ remove_action = "remove", \ - port_type = PORT_TYPE_STRING, \ - prefix = "Key", \ + port_type = PORT_TYPE_ANY, \ + prefix = "Value", \ minimum_amount = 1, \ maximum_amount = 20 \ ) diff --git a/code/modules/wiremod/components/list/list_pick.dm b/code/modules/wiremod/components/list/list_pick.dm index bce3e82688f880..a1e8141f3c34ac 100644 --- a/code/modules/wiremod/components/list/list_pick.dm +++ b/code/modules/wiremod/components/list/list_pick.dm @@ -27,39 +27,24 @@ circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL - var/index_type = PORT_TYPE_NUMBER - -/obj/item/circuit_component/list_pick/populate_options() - list_options = add_option_port("List Type", GLOB.wiremod_basic_types) - /obj/item/circuit_component/list_pick/proc/make_list_port() - input_list = add_input_port("List", PORT_TYPE_LIST(PORT_TYPE_ANY)) + input_list = add_input_port("List", PORT_TYPE_LIST(PORT_TYPE_STRING)) /obj/item/circuit_component/list_pick/populate_ports() input_name = add_input_port("Input Name", PORT_TYPE_STRING) - user = add_input_port("User", PORT_TYPE_ATOM) + user = add_input_port("User", PORT_TYPE_USER) make_list_port() - output = add_output_port("Picked Item", PORT_TYPE_NUMBER) - trigger_output = add_output_port("Triggered", PORT_TYPE_SIGNAL) + output = add_output_port("Picked Item", PORT_TYPE_STRING) failure = add_output_port("On Failure", PORT_TYPE_SIGNAL) - success = add_output_port("On Succes", PORT_TYPE_SIGNAL) - - -/obj/item/circuit_component/list_pick/pre_input_received(datum/port/input/port) - if(port == list_options) - var/new_type = list_options.value - input_list.set_datatype(PORT_TYPE_LIST(new_type)) - output.set_datatype(new_type) - + success = add_output_port("On Success", PORT_TYPE_SIGNAL) /obj/item/circuit_component/list_pick/input_received(datum/port/input/port) - if(parent.Adjacent(user.value)) + var/mob/mob_user = user.value + if(!ismob(mob_user) || HAS_TRAIT_FROM(parent, TRAIT_CIRCUIT_UI_OPEN, REF(mob_user))) + failure.set_output(COMPONENT_SIGNAL) return - - if(ismob(user.value)) - trigger_output.set_output(COMPONENT_SIGNAL) - INVOKE_ASYNC(src, PROC_REF(show_list), user.value, input_name.value, input_list.value) + INVOKE_ASYNC(src, PROC_REF(show_list), mob_user, input_name.value, input_list.value) /// Show a list of options to the user using standed TGUI input list /obj/item/circuit_component/list_pick/proc/show_list(mob/user, message, list/showed_list) @@ -68,10 +53,17 @@ return if(!message) message = "circuit input" - if(!(user.can_perform_action(src, FORBID_TELEKINESIS_REACH))) + if(!(user.can_perform_action(parent.shell, FORBID_TELEKINESIS_REACH|ALLOW_SILICON_REACH|ALLOW_RESTING))) + failure.set_output(COMPONENT_SIGNAL) return + var/user_ref = REF(user) + ADD_TRAIT(parent, TRAIT_CIRCUIT_UI_OPEN, user_ref) var/picked = tgui_input_list(user, message = message, items = showed_list) - if(!(user.can_perform_action(src, FORBID_TELEKINESIS_REACH))) + REMOVE_TRAIT(parent, TRAIT_CIRCUIT_UI_OPEN, user_ref) + if(QDELETED(src)) + return + if(!(user.can_perform_action(parent.shell, FORBID_TELEKINESIS_REACH|ALLOW_SILICON_REACH|ALLOW_RESTING))) + failure.set_output(COMPONENT_SIGNAL) return choose_item(picked, showed_list) diff --git a/code/modules/wiremod/components/math/arctan2.dm b/code/modules/wiremod/components/math/arctan2.dm new file mode 100644 index 00000000000000..cce03df1d836f4 --- /dev/null +++ b/code/modules/wiremod/components/math/arctan2.dm @@ -0,0 +1,26 @@ +/** + * # Arctangent 2 function + * A variant of arctan. When given a deltaX and deltaY, returns the angle. I will blow you out of the sky + */ +/obj/item/circuit_component/arctan2 + display_name = "Arctangent 2 Component" + desc = "A two parameter arctan2 component, for calculating any angle you want." + category = "Math" + + /// The input port for the x-offset + var/datum/port/input/input_port_x + /// The input port for the y-offset + var/datum/port/input/input_port_y + + /// The result from the output + var/datum/port/output/output + + circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL + +/obj/item/circuit_component/arctan2/populate_ports() + input_port_x = add_input_port("Delta X", PORT_TYPE_NUMBER) + input_port_y = add_input_port("Delta Y", PORT_TYPE_NUMBER) + output = add_output_port("Angle", PORT_TYPE_NUMBER) + +/obj/item/circuit_component/arctan2/input_received(datum/port/input/port) + output.set_output(arctan(input_port_x.value, input_port_y.value)) diff --git a/code/modules/wiremod/components/sensors/view_sensor.dm b/code/modules/wiremod/components/sensors/view_sensor.dm index f65853986e315f..1725044c035978 100644 --- a/code/modules/wiremod/components/sensors/view_sensor.dm +++ b/code/modules/wiremod/components/sensors/view_sensor.dm @@ -37,7 +37,7 @@ if(!parent.shell) return - if(TIMER_COOLDOWN_CHECK(parent.shell, COOLDOWN_CIRCUIT_VIEW_SENSOR)) + if(TIMER_COOLDOWN_RUNNING(parent.shell, COOLDOWN_CIRCUIT_VIEW_SENSOR)) result.set_output(null) cooldown.set_output(COMPONENT_SIGNAL) return diff --git a/code/modules/wiremod/core/component.dm b/code/modules/wiremod/core/component.dm index 55fb258f0fbb3e..ebabd211f7091c 100644 --- a/code/modules/wiremod/core/component.dm +++ b/code/modules/wiremod/core/component.dm @@ -9,7 +9,7 @@ */ /obj/item/circuit_component name = COMPONENT_DEFAULT_NAME - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "component" inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' diff --git a/code/modules/wiremod/core/component_printer.dm b/code/modules/wiremod/core/component_printer.dm index 25c684c5a28a0d..3fb736540ec186 100644 --- a/code/modules/wiremod/core/component_printer.dm +++ b/code/modules/wiremod/core/component_printer.dm @@ -22,11 +22,7 @@ /obj/machinery/component_printer/Initialize(mapload) . = ..() - materials = AddComponent( \ - /datum/component/remote_materials, \ - mapload, \ - mat_container_flags = BREAKDOWN_FLAGS_LATHE, \ - ) + materials = AddComponent(/datum/component/remote_materials, mapload) /obj/machinery/component_printer/LateInitialize() . = ..() @@ -323,11 +319,7 @@ /obj/machinery/module_duplicator/Initialize(mapload) . = ..() - materials = AddComponent( \ - /datum/component/remote_materials, \ - mapload, \ - mat_container_flags = BREAKDOWN_FLAGS_LATHE, \ - ) + materials = AddComponent(/datum/component/remote_materials, mapload) /obj/machinery/module_duplicator/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/wiremod/core/integrated_circuit.dm b/code/modules/wiremod/core/integrated_circuit.dm index 4a04da3480efec..0499a56dcd4749 100644 --- a/code/modules/wiremod/core/integrated_circuit.dm +++ b/code/modules/wiremod/core/integrated_circuit.dm @@ -11,7 +11,7 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit) /obj/item/integrated_circuit name = "integrated circuit" desc = "By inserting components and a cell into this, wiring them up, and putting them into a shell, anyone can pretend to be a programmer." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "integrated_circuit" inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' diff --git a/code/modules/wiremod/datatypes/datum.dm b/code/modules/wiremod/datatypes/datum.dm index f3faa8f5d8e1cf..4045ee3793e66f 100644 --- a/code/modules/wiremod/datatypes/datum.dm +++ b/code/modules/wiremod/datatypes/datum.dm @@ -4,6 +4,7 @@ datatype_flags = DATATYPE_FLAG_ALLOW_MANUAL_INPUT|DATATYPE_FLAG_ALLOW_ATOM_INPUT can_receive_from = list( PORT_TYPE_ATOM, + PORT_TYPE_USER ) /datum/circuit_datatype/datum/convert_value(datum/port/port, value_to_convert) diff --git a/code/modules/wiremod/datatypes/entity.dm b/code/modules/wiremod/datatypes/entity.dm index e3a76892f97d93..437b3d7adb49c6 100644 --- a/code/modules/wiremod/datatypes/entity.dm +++ b/code/modules/wiremod/datatypes/entity.dm @@ -2,6 +2,9 @@ datatype = PORT_TYPE_ATOM color = "purple" datatype_flags = DATATYPE_FLAG_ALLOW_MANUAL_INPUT|DATATYPE_FLAG_ALLOW_ATOM_INPUT + can_receive_from = list( + PORT_TYPE_USER, + ) /datum/circuit_datatype/entity/convert_value(datum/port/port, value_to_convert) var/atom/object = value_to_convert diff --git a/code/modules/wiremod/datatypes/user.dm b/code/modules/wiremod/datatypes/user.dm new file mode 100644 index 00000000000000..693941dcd74099 --- /dev/null +++ b/code/modules/wiremod/datatypes/user.dm @@ -0,0 +1,9 @@ +/datum/circuit_datatype/user + datatype = PORT_TYPE_USER + color = "label" + +/datum/circuit_datatype/user/convert_value(datum/port/port, value_to_convert) + var/datum/object = value_to_convert + if(QDELETED(object)) + return null + return object diff --git a/code/modules/wiremod/shell/bot.dm b/code/modules/wiremod/shell/bot.dm index 36fd6c5b369933..dfd9845bc05b1d 100644 --- a/code/modules/wiremod/shell/bot.dm +++ b/code/modules/wiremod/shell/bot.dm @@ -31,7 +31,7 @@ var/datum/port/output/entity /obj/item/circuit_component/bot/populate_ports() - entity = add_output_port("User", PORT_TYPE_ATOM) + entity = add_output_port("User", PORT_TYPE_USER) signal = add_output_port("Signal", PORT_TYPE_SIGNAL) /obj/item/circuit_component/bot/register_shell(atom/movable/shell) @@ -46,4 +46,3 @@ playsound(source, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) entity.set_output(user) signal.set_output(COMPONENT_SIGNAL) - diff --git a/code/modules/wiremod/shell/brain_computer_interface.dm b/code/modules/wiremod/shell/brain_computer_interface.dm index 89aac209c83e4f..f41d4fa8bf1914 100644 --- a/code/modules/wiremod/shell/brain_computer_interface.dm +++ b/code/modules/wiremod/shell/brain_computer_interface.dm @@ -10,18 +10,16 @@ /obj/item/organ/internal/cyberimp/bci/Initialize(mapload) . = ..() + RegisterSignal(src, COMSIG_CIRCUIT_ACTION_COMPONENT_REGISTERED, PROC_REF(action_comp_registered)) + RegisterSignal(src, COMSIG_CIRCUIT_ACTION_COMPONENT_UNREGISTERED, PROC_REF(action_comp_unregistered)) + var/obj/item/integrated_circuit/circuit = new(src) - circuit.add_component(new /obj/item/circuit_component/equipment_action/bci(null, "One")) + circuit.add_component(new /obj/item/circuit_component/equipment_action(null, "One")) AddComponent(/datum/component/shell, list( new /obj/item/circuit_component/bci_core, ), SHELL_CAPACITY_SMALL, starting_circuit = circuit) -/obj/item/organ/internal/cyberimp/bci/on_insert(mob/living/carbon/receiver) - . = ..() - // Organs are put in nullspace, but this breaks circuit interactions - forceMove(receiver) - /obj/item/organ/internal/cyberimp/bci/say(message, bubble_type, list/spans, sanitize, datum/language/language, ignore_spam, forced = null, filterproof = null, message_range = 7, datum/saymode/saymode = null) if (owner) // Otherwise say_dead will be called. @@ -33,41 +31,17 @@ else return ..() -/obj/item/circuit_component/equipment_action/bci - display_name = "BCI Action" - desc = "Represents an action the user can take when implanted with the brain-computer interface." - required_shells = list(/obj/item/organ/internal/cyberimp/bci) - - /// A reference to the action button itself - var/datum/action/innate/bci_action/bci_action - -/obj/item/circuit_component/equipment_action/bci/Destroy() - QDEL_NULL(bci_action) - return ..() - -/obj/item/circuit_component/equipment_action/bci/register_shell(atom/movable/shell) - . = ..() - var/obj/item/organ/internal/cyberimp/bci/bci = shell - if(istype(bci)) - bci_action = new(src) - update_action() - - bci.actions += list(bci_action) - -/obj/item/circuit_component/equipment_action/bci/unregister_shell(atom/movable/shell) - var/obj/item/organ/internal/cyberimp/bci/bci = shell - if(istype(bci)) - bci.actions -= bci_action - QDEL_NULL(bci_action) - return ..() - -/obj/item/circuit_component/equipment_action/bci/input_received(datum/port/input/port) - if (!isnull(bci_action)) - update_action() +/obj/item/organ/internal/cyberimp/bci/proc/action_comp_registered(datum/source, obj/item/circuit_component/equipment_action/action_comp) + SIGNAL_HANDLER + LAZYADD(actions, new/datum/action/innate/bci_action(src, action_comp)) -/obj/item/circuit_component/equipment_action/bci/update_action() - bci_action.name = button_name.value - bci_action.button_icon_state = "bci_[replacetextEx(lowertext(icon_options.value), " ", "_")]" +/obj/item/organ/internal/cyberimp/bci/proc/action_comp_unregistered(datum/source, obj/item/circuit_component/equipment_action/action_comp) + SIGNAL_HANDLER + var/datum/action/innate/bci_action/action = action_comp.granted_to[REF(src)] + if(!istype(action)) + return + LAZYREMOVE(actions, action) + QDEL_LIST_ASSOC_VAL(action_comp.granted_to) /datum/action/innate/bci_action name = "Action" @@ -75,20 +49,23 @@ check_flags = AB_CHECK_CONSCIOUS button_icon_state = "bci_power" - var/obj/item/circuit_component/equipment_action/bci/circuit_component + var/obj/item/organ/internal/cyberimp/bci/bci + var/obj/item/circuit_component/equipment_action/circuit_component -/datum/action/innate/bci_action/New(obj/item/circuit_component/equipment_action/bci/circuit_component) +/datum/action/innate/bci_action/New(obj/item/organ/internal/cyberimp/bci/_bci, obj/item/circuit_component/equipment_action/circuit_component) ..() - + bci = _bci + circuit_component.granted_to[REF(_bci)] = src src.circuit_component = circuit_component /datum/action/innate/bci_action/Destroy() - circuit_component.bci_action = null + circuit_component.granted_to -= REF(bci) circuit_component = null return ..() /datum/action/innate/bci_action/Activate() + circuit_component.user.set_output(owner) circuit_component.signal.set_output(COMPONENT_SIGNAL) /obj/item/circuit_component/bci_core @@ -114,7 +91,7 @@ send_message_signal = add_input_port("Send Message", PORT_TYPE_SIGNAL) show_charge_meter = add_input_port("Show Charge Meter", PORT_TYPE_NUMBER, trigger = PROC_REF(update_charge_action)) - user_port = add_output_port("User", PORT_TYPE_ATOM) + user_port = add_output_port("User", PORT_TYPE_USER) /obj/item/circuit_component/bci_core/Destroy() QDEL_NULL(charge_action) diff --git a/code/modules/wiremod/shell/controller.dm b/code/modules/wiremod/shell/controller.dm index 7040e554a0a4ae..3092d3315f1655 100644 --- a/code/modules/wiremod/shell/controller.dm +++ b/code/modules/wiremod/shell/controller.dm @@ -34,7 +34,7 @@ var/datum/port/output/entity /obj/item/circuit_component/controller/populate_ports() - entity = add_output_port("User", PORT_TYPE_ATOM) + entity = add_output_port("User", PORT_TYPE_USER) signal = add_output_port("Signal", PORT_TYPE_SIGNAL) alt = add_output_port("Alternate Signal", PORT_TYPE_SIGNAL) right = add_output_port("Extra Signal", PORT_TYPE_SIGNAL) @@ -51,6 +51,12 @@ COMSIG_CLICK_ALT, )) +/obj/item/circuit_component/controller/proc/handle_trigger(atom/source, user, port_name, datum/port/output/port_signal) + source.balloon_alert(user, "clicked [port_name] button") + playsound(source, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) + entity.set_output(user) + port_signal.set_output(COMPONENT_SIGNAL) + /** * Called when the shell item is used in hand */ @@ -58,10 +64,7 @@ SIGNAL_HANDLER if(!user.Adjacent(source)) return - source.balloon_alert(user, "clicked primary button") - playsound(source, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) - entity.set_output(user) - signal.set_output(COMPONENT_SIGNAL) + handle_trigger(source, user, "primary", signal) /** * Called when the shell item is alt-clicked @@ -70,10 +73,8 @@ SIGNAL_HANDLER if(!user.Adjacent(source)) return - source.balloon_alert(user, "clicked alternate button") - playsound(source, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) - entity.set_output(user) - alt.set_output(COMPONENT_SIGNAL) + handle_trigger(source, user, "alternate", alt) + /** * Called when the shell item is right-clicked in active hand @@ -82,7 +83,4 @@ SIGNAL_HANDLER if(!user.Adjacent(source)) return - source.balloon_alert(user, "clicked extra button") - playsound(source, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) - entity.set_output(user) - right.set_output(COMPONENT_SIGNAL) + handle_trigger(source, user, "extra", right) diff --git a/code/modules/wiremod/shell/keyboard.dm b/code/modules/wiremod/shell/keyboard.dm index 4231a6dc814d49..05b9ded074baa3 100644 --- a/code/modules/wiremod/shell/keyboard.dm +++ b/code/modules/wiremod/shell/keyboard.dm @@ -27,7 +27,7 @@ var/datum/port/output/output /obj/item/circuit_component/keyboard_shell/populate_ports() - entity = add_output_port("User", PORT_TYPE_ATOM) + entity = add_output_port("User", PORT_TYPE_USER) output = add_output_port("Message", PORT_TYPE_STRING) signal = add_output_port("Signal", PORT_TYPE_SIGNAL) @@ -53,4 +53,3 @@ output.set_output(message) signal.set_output(COMPONENT_SIGNAL) - diff --git a/code/modules/wiremod/shell/module.dm b/code/modules/wiremod/shell/module.dm index bffff02e5fbca5..6f9a3dda93b7e1 100644 --- a/code/modules/wiremod/shell/module.dm +++ b/code/modules/wiremod/shell/module.dm @@ -10,8 +10,15 @@ /// A reference to the shell component, used to access the shell and its attached circuit var/datum/component/shell/shell + /// List of installed action components + var/list/obj/item/circuit_component/equipment_action/action_comps = list() + /obj/item/mod/module/circuit/Initialize(mapload) . = ..() + + RegisterSignal(src, COMSIG_CIRCUIT_ACTION_COMPONENT_REGISTERED, PROC_REF(action_comp_registered)) + RegisterSignal(src, COMSIG_CIRCUIT_ACTION_COMPONENT_UNREGISTERED, PROC_REF(action_comp_unregistered)) + shell = AddComponent(/datum/component/shell, \ list(new /obj/item/circuit_component/mod_adapter_core()), \ capacity = SHELL_CAPACITY_LARGE, \ @@ -22,6 +29,17 @@ if(drain_power(amount)) . = COMPONENT_OVERRIDE_POWER_USAGE +/obj/item/mod/module/circuit/proc/action_comp_registered(datum/source, obj/item/circuit_component/equipment_action/action_comp) + SIGNAL_HANDLER + action_comps += action_comp + +/obj/item/mod/module/circuit/proc/action_comp_unregistered(datum/source, obj/item/circuit_component/equipment_action/action_comp) + SIGNAL_HANDLER + action_comps -= action_comp + for(var/ref in action_comp.granted_to) + unpin_action(action_comp, locate(ref)) + QDEL_LIST_ASSOC_VAL(action_comp.granted_to) + /obj/item/mod/module/circuit/on_install() if(!shell?.attached_circuit) return @@ -30,6 +48,9 @@ /obj/item/mod/module/circuit/on_uninstall(deleting = FALSE) if(!shell?.attached_circuit) return + for(var/obj/item/circuit_component/equipment_action/action_comp in action_comps) + for(var/ref in action_comp.granted_to) + unpin_action(action_comp, locate(ref)) UnregisterSignal(shell?.attached_circuit, COMSIG_CIRCUIT_PRE_POWER_USAGE) /obj/item/mod/module/circuit/on_use() @@ -38,38 +59,79 @@ return if(!shell.attached_circuit) return - var/list/action_components = shell.attached_circuit.get_all_contents_type(/obj/item/circuit_component/equipment_action/mod) - if(!action_components.len) - shell.attached_circuit.interact(mod.wearer) + shell.attached_circuit?.interact(mod.wearer) + +/obj/item/mod/module/circuit/get_configuration(mob/user) + . = ..() + var/unnamed_action_index = 1 + for(var/obj/item/circuit_component/equipment_action/action_comp in action_comps) + .[REF(action_comp)] = add_ui_configuration(action_comp.button_name.value || "Unnamed Action [unnamed_action_index++]", "pin", !!action_comp.granted_to[REF(user)]) + +/obj/item/mod/module/circuit/configure_edit(key, value) + . = ..() + var/obj/item/circuit_component/equipment_action/action_comp = locate(key) in action_comps + if(!istype(action_comp)) + return + if(text2num(value)) + pin_action(action_comp, usr) + else + unpin_action(action_comp, usr) + +/obj/item/mod/module/circuit/proc/pin_action(obj/item/circuit_component/equipment_action/action_comp, mob/user) + if(!istype(user)) return - var/list/repeat_name_counts = list("Access Circuit" = 1) - var/list/display_names = list() - var/list/radial_options = list() - for(var/obj/item/circuit_component/equipment_action/mod/action_component in action_components) - var/action_name = action_component.button_name.value - if(!repeat_name_counts[action_name]) - repeat_name_counts[action_name] = 0 - repeat_name_counts[action_name]++ - if(repeat_name_counts[action_name] > 1) - action_name += " ([repeat_name_counts[action_name]])" - display_names[action_name] = REF(action_component) - var/option_icon_state = "bci_[replacetextEx(lowertext(action_component.icon_options.value), " ", "_")]" - radial_options += list("[action_name]" = image('icons/mob/actions/actions_items.dmi', option_icon_state)) - radial_options += list("Access Circuit" = image(shell.attached_circuit)) - var/selected_option = show_radial_menu(mod.wearer, src, radial_options, custom_check = FALSE, require_near = TRUE) - if(!selected_option) + if(action_comp.granted_to[REF(user)]) // Sanity check - don't pin an action for a mob that has already pinned it return - if(!mod || !mod.wearer || !mod.active || mod.activating) + mod.add_item_action(new/datum/action/item_action/mod/pinnable/circuit(mod, user, src, action_comp)) + +/obj/item/mod/module/circuit/proc/unpin_action(obj/item/circuit_component/equipment_action/action_comp, mob/user) + var/datum/action/item_action/mod/pinnable/circuit/action = action_comp.granted_to[REF(user)] + if(!istype(action)) return - if(selected_option == "Access Circuit") - shell.attached_circuit?.interact(mod.wearer) - else - var/component_reference = display_names[selected_option] - var/obj/item/circuit_component/equipment_action/mod/selected_component = locate(component_reference) in shell.attached_circuit.contents - if(!istype(selected_component)) - return - selected_component.signal.set_output(COMPONENT_SIGNAL) + qdel(action) +/datum/action/item_action/mod/pinnable/circuit + button_icon = 'icons/mob/actions/actions_items.dmi' + button_icon_state = "bci_blank" + + /// A reference to the module containing this action's component + var/obj/item/mod/module/circuit/module + + /// A reference to the component this action triggers. + var/obj/item/circuit_component/equipment_action/circuit_component + +/datum/action/item_action/mod/pinnable/circuit/New(Target, mob/user, obj/item/mod/module/circuit/linked_module, obj/item/circuit_component/equipment_action/action_comp) + . = ..() + module = linked_module + action_comp.granted_to[REF(user)] = src + circuit_component = action_comp + name = action_comp.button_name.value + button_icon_state = "bci_[replacetextEx(lowertext(action_comp.icon_options.value), " ", "_")]" + +/datum/action/item_action/mod/pinnable/circuit/Destroy() + circuit_component.granted_to -= REF(pinner) + circuit_component = null + + return ..() + +/datum/action/item_action/mod/pinnable/circuit/Trigger(trigger_flags) + . = ..() + if(!.) + return + var/obj/item/mod/control/mod = module.mod + if(!istype(mod)) + return + if(!mod.active || mod.activating) + if(mod.wearer) + module.balloon_alert(mod.wearer, "not active!") + return + circuit_component.user.set_output(owner) + circuit_component.signal.set_output(COMPONENT_SIGNAL) + +/// If the guy whose UI we are pinned to got deleted +/datum/action/item_action/mod/pinnable/circuit/pinner_deleted() + module?.action_comps[circuit_component] -= REF(pinner) + . = ..() /obj/item/circuit_component/mod_adapter_core display_name = "MOD circuit adapter core" @@ -123,7 +185,7 @@ toggle_suit = add_input_port("Toggle Suit", PORT_TYPE_SIGNAL) select_module = add_input_port("Select Module", PORT_TYPE_SIGNAL) // States - wearer = add_output_port("Wearer", PORT_TYPE_ATOM) + wearer = add_output_port("Wearer", PORT_TYPE_USER) deployed = add_output_port("Deployed", PORT_TYPE_NUMBER) activated = add_output_port("Activated", PORT_TYPE_NUMBER) selected_module = add_output_port("Selected Module", PORT_TYPE_STRING) @@ -237,8 +299,3 @@ if(!attached_module.mod?.wearer) return wearer.set_output(attached_module.mod.wearer) - -/obj/item/circuit_component/equipment_action/mod - display_name = "MOD action" - desc = "Represents an action the user can take when wearing the MODsuit." - required_shells = list(/obj/item/mod/module/circuit) diff --git a/code/modules/wiremod/shell/moneybot.dm b/code/modules/wiremod/shell/moneybot.dm index 46a834e2d60543..20eb596eb72672 100644 --- a/code/modules/wiremod/shell/moneybot.dm +++ b/code/modules/wiremod/shell/moneybot.dm @@ -95,7 +95,7 @@ /obj/item/circuit_component/money_bot/populate_ports() total_money = add_output_port("Total Money", PORT_TYPE_NUMBER) money_input = add_output_port("Last Input Money", PORT_TYPE_NUMBER) - entity = add_output_port("User", PORT_TYPE_ATOM) + entity = add_output_port("User", PORT_TYPE_USER) money_trigger = add_output_port("Money Input", PORT_TYPE_SIGNAL) /obj/item/circuit_component/money_bot/register_shell(atom/movable/shell) diff --git a/code/modules/zombie/items.dm b/code/modules/zombie/items.dm index dca26d366d8762..1d5caf8e9093b0 100644 --- a/code/modules/zombie/items.dm +++ b/code/modules/zombie/items.dm @@ -79,7 +79,6 @@ need_mob_update = user.adjustBruteLoss(-hp_gained, updating_health = FALSE) need_mob_update += user.adjustToxLoss(-hp_gained, updating_health = FALSE) need_mob_update += user.adjustFireLoss(-hp_gained, updating_health = FALSE) - need_mob_update += user.adjustCloneLoss(-hp_gained, updating_health = FALSE) need_mob_update += user.adjustOrganLoss(ORGAN_SLOT_BRAIN, -hp_gained) // Zom Bee gibbers "BRAAAAISNSs!1!" user.set_nutrition(min(user.nutrition + hp_gained, NUTRITION_LEVEL_FULL)) if(need_mob_update) diff --git a/code/modules/zombie/organs.dm b/code/modules/zombie/organs.dm index 3530146f1a2aa2..2ed2bf541d88c3 100644 --- a/code/modules/zombie/organs.dm +++ b/code/modules/zombie/organs.dm @@ -23,24 +23,36 @@ GLOB.zombie_infection_list -= src . = ..() -/obj/item/organ/internal/zombie_infection/Insert(mob/living/carbon/M, special = FALSE, drop_if_replaced = TRUE) +/obj/item/organ/internal/zombie_infection/on_mob_insert(mob/living/carbon/M, special = FALSE, movement_flags) . = ..() - if(!.) - return . + START_PROCESSING(SSobj, src) -/obj/item/organ/internal/zombie_infection/Remove(mob/living/carbon/M, special = FALSE) +/obj/item/organ/internal/zombie_infection/on_mob_remove(mob/living/carbon/M, special = FALSE) . = ..() STOP_PROCESSING(SSobj, src) - if(iszombie(M) && old_species && !special && !QDELETED(src)) + if(iszombie(M) && old_species && !special) M.set_species(old_species) if(timer_id) deltimer(timer_id) +/obj/item/organ/internal/zombie_infection/on_mob_insert(mob/living/carbon/organ_owner, special) + . = ..() + RegisterSignal(organ_owner, COMSIG_LIVING_DEATH, PROC_REF(organ_owner_died)) + +/obj/item/organ/internal/zombie_infection/on_mob_remove(mob/living/carbon/organ_owner, special) + . = ..() + UnregisterSignal(organ_owner, COMSIG_LIVING_DEATH) + +/obj/item/organ/internal/zombie_infection/proc/organ_owner_died(mob/living/carbon/source, gibbed) + SIGNAL_HANDLER + if(iszombie(source)) + qdel(src) // Congrats you somehow died so hard you stopped being a zombie + /obj/item/organ/internal/zombie_infection/on_find(mob/living/finder) - to_chat(finder, "Inside the head is a disgusting black \ + to_chat(finder, span_warning("Inside the head is a disgusting black \ web of pus and viscera, bound tightly around the brain like some \ - biological harness.") + biological harness.")) /obj/item/organ/internal/zombie_infection/process(seconds_per_tick, times_fired) if(!owner) diff --git a/code/world.dm b/code/world.dm index ad1f5261d097d7..7222dcbd633578 100644 --- a/code/world.dm +++ b/code/world.dm @@ -17,8 +17,8 @@ hub_password = "kMZy3U5jJHSiBQjr" name = "/tg/ Station 13" fps = 20 - cache_lifespan = 0 // SKYRAT EDIT - Makes sure TTS shit isnt kept past rounds - //map_format = SIDE_MAP // SKYRAT EDIT - TODO: WALLENING - REMOVE THIS (hopefully the visual z-fighting issues will have been ironed out by then) + cache_lifespan = 0 // NOVA EDIT - Makes sure TTS shit isnt kept past rounds + //map_format = SIDE_MAP // NOVA EDIT - TODO: WALLENING - REMOVE THIS (hopefully the visual z-fighting issues will have been ironed out by then) #ifdef FIND_REF_NO_CHECK_TICK loop_checks = FALSE #endif diff --git a/config/admins.txt b/config/admins.txt index f48ff5bc03c3a6..c7e35b70149ff9 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -3,149 +3,3 @@ #Rank name will match anything after ' = ' and has not format requirements. #Ranks will match to those with the same name in admin_ranks.txt, if a match isn't found the user won't be adminned. #If SQL-based admin loading is enabled, admins listed here will always be loaded first and will override any duplicate entries in the database. - -Optimumtact = Host -CitrusGender = Game Master -NewSta = Game Master -Expletives = Game Master -kingofkosmos = Game Master -MrStonedOne = Lazy Master -microscopics = Game Master -Gun Hog = Game Master -KorPhaeron = Game Master -razharas = Game Master -Lordpidey = Game Master -Niknakflak = Game Master -rolan7 = Game Master -quarxink = Game Master -adrix89 = Game Master -tle = Game Master -xsi = Game Master -scaredofshadows = Game Master -neofite = Game Master -trubblebass = Game Master -mport2004 = Game Master -deuryn = Game Master -agouri = Game Master -errorage = Game Master -superxpdude = Game Master -petethegoat = Game Master -nodrak = Game Master -carnwennan = Game Master -ikarrus = Game Master -cheridan = Game Master -giacomand = Game Master -rockdtben = Game Master -sieve = Game Master -aranclanos = Game Master -intigracy = Game Master -dumpdavidson = Game Master -kazeespada = Game Master -malkevin = Game Master -incoming = Game Master -demas = Game Master -fleure = Game Master -ricotez = Game Master -misterperson = Game Master -crimsonvision = Game Master -iamgoofball = Game Master -zelacks = Game Master -androidsfv = Game Master -miggles = Game Master -jordie0608 = Game Master -s0ldi3rkr4s0 = Game Master -ergovisavi = Game Master -vistapowa = Game Master -miauw62 = Game Master -rumia29 = Game Master -bobylein = Game Master -sirbayer = Game Master -hornygranny = Game Master -yota = Game Master -firecage = Game Master -donkieyo = Game Master -argoneus = Game Master -paprka = Game Master -cookingboy3 = Game Master -limeliz = Game Master -steelpoint = Game Master -phil235 = Game Master -CorruptComputer = Game Master -xxnoob = Game Master -tkdrg = Game Master -Cuboos = Game Master -thunder12345 = Game Master -wjohnston = Game Master -mandurrh = Game Master -thurgatar = Game Master -xerux = Game Master -dannno = Game Master -lo6a4evskiy = Game Master -vekter = Game Master -Ahammer18 = Game Master -ACCount12 = Game Master -fayrik = Game Master -shadowlight213 = Game Master -drovidicorv = Game Master -Dunc = Game Master -MMMiracles = Game Master -bear1ake = Game Master -CoreOverload = Game Master -Jalleo = Game Master -ChangelingRain = Game Master -FoxPMcCloud = Game Master -Xhuis = Game Master -Astralenigma = Game Master -Tokiko1 = Game Master -SuperSayu = Game Master -Lzimann = Game Master -As334 = Game Master -neersighted = Game Master -Swankcookie = Game Master -Ressler = Game Master -Folix = Game Master -Bawhoppennn = Game Master -Anturke = Host -Lumipharon = Game Master -bgobandit = Game Master -coiax = Game Master -RandomMarine = Game Master -PKPenguin321 = Game Master -TechnoAlchemist = Game Master -Aloraydrel = Game Master -Quiltyquilty = Game Master -SnipeDragon = Game Master -Fjeld = Game Master -kevinz000 = Game Master -Tacolizard = Game Master -TrustyGun = Game Master -Cyberboss = Game Master -PJB3005 = Game Master -Sweaterkittens = Game Master -Feemjmeem = Game Master -JStheguy = Game Master -excessiveuseofcobby = Game Master -Plizzard = Game Master -octareenroon91 = Game Master -Serpentarium = Game Master -Averagejoe82 = Game Master -The Dreamweaver = Game Master -Denton-30 = Game Master -Naksuasdf = Game Master -MrDoomBringer = Game Master -shizcalev = Game Master -NicBR = Game Master -LoserWasTaken = Game Master -Fikou = Game Master -Magatsuchi = Game Master -Skoglol = Game Master -4dplanner = Game Master -Time-Green = Game Master -StyleMistake = Game Master -actioninja = Game Master -bobbahbrown = Game Master -Jaredfogle = Game Master+Coder -WaylandSmithy = Game Master -NamelessFairy = Game Master -WalterMeldron = Game Master -san7890 = Game Master diff --git a/config/blanks.json b/config/blanks.json index f3b38d67bdb4bf..ebe52d6c93dd5a 100644 --- a/config/blanks.json +++ b/config/blanks.json @@ -59,7 +59,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "

    This document is the property of Nanotrasen Corporation. Without the signatures and stamps of the heads or their deputies, this document has no corporate validity and may not be used in decisions regarding access distribution.

    " + "

    This document is the property of Symphionia Corporation. Without the signatures and stamps of the heads or their deputies, this document has no corporate validity and may not be used in decisions regarding access distribution.

    " ] }, { @@ -74,7 +74,7 @@ "

    Desired position

    ", "

    [___________________________________]

    ", "
    ", - "

    By signing this document, you agree to Nanotrasen's policies on labor protection, occupational health and safety, compensation, and confidentiality.

    ", + "

    By signing this document, you agree to Symphionia's policies on labor protection, occupational health and safety, compensation, and confidentiality.

    ", "
    ", "

    Condemnation Review

    ", "

    Name of the Head of Personnel or deputy head (with signature):

    ", @@ -101,7 +101,7 @@ "

    [___________________________________]

    ", "

    [___________________________________]

    ", "
    ", - "

    This document is the property of Nanotrasen Corporation. Without the signatures and stamps of the heads or their deputies, this document has no corporate validity and cannot be considered evidence of the candidate's enrollment in the desired position.

    " + "

    This document is the property of Symphionia Corporation. Without the signatures and stamps of the heads or their deputies, this document has no corporate validity and cannot be considered evidence of the candidate's enrollment in the desired position.

    " ] }, { @@ -141,7 +141,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "
    This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    " + "
    This document is the property of Symphionia Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    " ] }, { @@ -180,7 +180,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "
    This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    " + "
    This document is the property of Symphionia Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    " ] }, { @@ -204,7 +204,7 @@ "

    [___________________________________]

    ", "

    [___________________________________]

    ", "
    ", - "
    By writing and signing this complaint, you consent to the processing of your personal data by Nanotrasen Corporation.

    ", + "
    By writing and signing this complaint, you consent to the processing of your personal data by Symphionia Corporation.

    ", "
    ", "

    Name of the person who received the complaint (with signature):

    ", "

    [___________________________________]

    ", @@ -216,7 +216,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "
    This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    " + "
    This document is the property of Symphionia Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    " ] }, { @@ -256,7 +256,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "
    This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", + "
    This document is the property of Symphionia Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", "
    " ] }, @@ -277,7 +277,7 @@ "

    [___________________________________]

    ", "

    [___________________________________]

    ", "
    ", - "
    Responsibility for any damage to property or employees of Nanotrasen Corporation during the execution of dangerous work lies with the person requesting the permit and the person issuing the permit.

    ", + "
    Responsibility for any damage to property or employees of Symphionia Corporation during the execution of dangerous work lies with the person requesting the permit and the person issuing the permit.

    ", "
    ", "

    The name of the permittee (with signature):

    ", "

    [___________________________________]

    ", @@ -286,7 +286,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "
    This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    " + "
    This document is the property of Symphionia Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    " ] }, { @@ -303,7 +303,7 @@ "

    [___________________________________]

    ", "

    [___________________________________]

    ", "
    ", - "
    The arrest form is legally and corporately valid if stamped and signed by the Head of Security or his/her deputy. Arrest forms should only be used during Green and BLUE threat code of the Nanotrasen facility. In the case of a higher threat code, Nanotrasen Corporation allows security personnel to make arrests with the verbal approval of the Head of Security.

    ", + "
    The arrest form is legally and corporately valid if stamped and signed by the Head of Security or his/her deputy. Arrest forms should only be used during Green and BLUE threat code of the Symphionia facility. In the case of a higher threat code, Symphionia Corporation allows security personnel to make arrests with the verbal approval of the Head of Security.

    ", "
    ", "

    Name of the head of security or his deputy (with signature):

    ", "

    [___________________________________]

    ", @@ -312,7 +312,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "
    This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    " + "
    This document is the property of Symphionia Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    " ] }, { @@ -329,7 +329,7 @@ "

    [___________________________________]

    ", "

    [___________________________________]

    ", "
    ", - "
    The arrest form is legally and corporately valid if stamped and signed by the Head of Security or his/her deputy. Arrest forms should only be used during Green and BLUE threat code of the Nanotrasen facility. In the case of a higher threat code, Nanotrasen Corporation allows security personnel to make arrests with the verbal approval of the Head of Security.

    ", + "
    The arrest form is legally and corporately valid if stamped and signed by the Head of Security or his/her deputy. Arrest forms should only be used during Green and BLUE threat code of the Symphionia facility. In the case of a higher threat code, Symphionia Corporation allows security personnel to make arrests with the verbal approval of the Head of Security.

    ", "
    ", "

    Name of the head of security or his deputy (with signature):

    ", "

    [___________________________________]

    ", @@ -338,7 +338,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "
    This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    " + "
    This document is the property of Symphionia Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    " ] }, { @@ -374,7 +374,7 @@ "

    [___________________________________]

    ", "

    [___________________________________]

    ", "
    ", - "
    Nanotrasen Corporation recommends the use of interrogation recording tools.

    ", + "
    Symphionia Corporation recommends the use of interrogation recording tools.

    ", "
    ", "

    Name of the interrogator (with signature):

    ", "

    [___________________________________]

    ", @@ -383,7 +383,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "
    This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    " + "
    This document is the property of Symphionia Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    " ] }, { @@ -421,7 +421,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "
    This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    " + "
    This document is the property of Symphionia Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    " ] }, { @@ -440,7 +440,7 @@ "

    Type of execution:

    ", "

    [___________________________________]

    ", "
    ", - "
    Only the top management of the Nanotrasen facility, the Nanotrasen Central Command or the Nanotrasen Board of Directors can order an execution. Remember that execution is an exceptional punishment. By signing this order, you take full responsibility for any mistakes that may occur. This order must be stapled to form NT-MDC-DC after the execution of the punishment.

    ", + "
    Only the top management of the Symphionia facility, the Symphionia Conglomeration of Colonists or the Symphionia Board of Directors can order an execution. Remember that execution is an exceptional punishment. By signing this order, you take full responsibility for any mistakes that may occur. This order must be stapled to form NT-MDC-DC after the execution of the punishment.

    ", "
    ", "

    The name of the orderer (with signature):

    ", "

    [___________________________________]

    ", @@ -452,7 +452,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "
    This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", + "
    This document is the property of Symphionia Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", "
    " ] }, @@ -489,7 +489,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "
    This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", + "
    This document is the property of Symphionia Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", "
    " ] }, @@ -509,7 +509,7 @@ "

    Requested to attend by [__] : [__] at the latest. (In station time)", "

    Place for a stamp

    ", "
    ", - "
    This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", + "
    This document is the property of Symphionia Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", "
    " ] }, @@ -543,7 +543,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "
    By writing and signing this form, you consent to the processing of your personal data by Nanotrasen Corporation.

    ", + "
    By writing and signing this form, you consent to the processing of your personal data by Symphionia Corporation.

    ", "
    ", "

    Name of official to take action:

    ", "

    [___________________________________]

    ", @@ -557,7 +557,7 @@ "

    Place for a stamp

    ", "
    ", - "
    This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    " + "
    This document is the property of Symphionia Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    " ] }, { @@ -585,7 +585,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "
    Responsibility for any damage caused to the Nanotrasen during the execution of the described work lies with the person requesting the permit and the person giving the permit.

    ", + "
    Responsibility for any damage caused to the Symphionia during the execution of the described work lies with the person requesting the permit and the person giving the permit.

    ", "
    ", "

    The name of the permittee (with signature):

    ", "

    [___________________________________]

    ", @@ -597,7 +597,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "
    This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", + "
    This document is the property of Symphionia Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", "
    " ] }, @@ -642,7 +642,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "
    This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", + "
    This document is the property of Symphionia Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", "
    " ] }, @@ -671,7 +671,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "
    Responsibility for any damage caused to the Nanotrasen object during the execution of the research described herein lies with the person requesting the permit and the person giving the permit.

    ", + "
    Responsibility for any damage caused to the Symphionia object during the execution of the research described herein lies with the person requesting the permit and the person giving the permit.

    ", "
    ", "

    The name of the permittee (with signature):

    ", "

    [___________________________________]

    ", @@ -683,7 +683,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "
    This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", + "
    This document is the property of Symphionia Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", "
    " ] }, @@ -728,7 +728,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "
    This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", + "
    This document is the property of Symphionia Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", "
    " ] }, @@ -765,7 +765,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "
    This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", + "
    This document is the property of Symphionia Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", "
    " ] }, @@ -799,7 +799,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "
    This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", + "
    This document is the property of Symphionia Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", "
    " ] }, @@ -830,7 +830,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "
    This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", + "
    This document is the property of Symphionia Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", "
    " ] }, @@ -875,7 +875,7 @@ "

    [___]:[___]

    ", "

    Place for a stamp

    ", "
    ", - "
    This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", + "
    This document is the property of Symphionia Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

    ", "
    " ] }, @@ -907,7 +907,7 @@ "

    [___].[___].[___]

    ", "

    [___]:[___]

    ", "
    ", - "
    This payment document is the property of Nanotrasen. You must deliver this document to the head of the Nanotrasen facility staff within 24 hours of service for independent tax accounting.

    ", + "
    This payment document is the property of Symphionia. You must deliver this document to the head of the Symphionia facility staff within 24 hours of service for independent tax accounting.

    ", "
    " ] }, @@ -939,7 +939,7 @@ "

    [___].[___].[___]

    ", "

    [___]:[___]

    ", "
    ", - "
    This payment document is the property of Nanotrasen. You must deliver this document to the head of the Nanotrasen facility staff within 24 hours of service for independent tax accounting.

    ", + "
    This payment document is the property of Symphionia. You must deliver this document to the head of the Symphionia facility staff within 24 hours of service for independent tax accounting.

    ", "
    " ] } diff --git a/config/config.txt b/config/config.txt index 3208cf84e9247e..bfd864413841ac 100644 --- a/config/config.txt +++ b/config/config.txt @@ -5,7 +5,7 @@ $include dbconfig.txt $include comms.txt $include logging.txt $include resources.txt -$include skyrat/skyrat_config.txt +$include nova/config_nova.txt $include interviews.txt $include lua.txt $include auxtools.txt @@ -24,14 +24,14 @@ $include auxtools.txt ## Server tagline: This will appear right below the server's title. # SERVERTAGLINE A generic TG-based server -## Discord Link: This is the link to Skyrat's discord server -# DISCORD_LINK https://discord.gg/hGpZ4Z3 +## Discord Link: This is the link to Nova Sector's discord server +# DISCORD_LINK https://discord.gg/novasector ## Server SQL name: This is the name used to identify the server to the SQL DB, distinct from SERVERNAME as it must be at most 32 characters. # SERVERSQLNAME tgstation ## Station name: The name of the station as it is referred to in-game. If commented out, the game will generate a random name instead. -STATIONNAME Space Station 13 +STATIONNAME Frior Luna ## Put on byond hub: Uncomment this to put your server on the byond hub. #HUB @@ -140,13 +140,13 @@ VOTE_PERIOD 600 ## 0 = Cannot respawn (default) ## 1 = Can respawn ## 2 = Can respawn if choosing a different character -ALLOW_RESPAWN 0 +ALLOW_RESPAWN 1 ## Respawn delay (deciseconds), which doesn't allow to return to lobby RESPAWN_DELAY 0 ## set a hosted by name for unix platforms -HOSTEDBY Yournamehere +HOSTEDBY Guidesa ## Uncomment this to stop people connecting to your server without a registered ckey. (i.e. guest-* are all blocked from connecting) GUEST_BAN @@ -173,23 +173,23 @@ GUEST_BAN #WEBCLIENT_ONLY_BYOND_MEMBERS ## Set to prevent anyone but those ckeys listed in config/whitelist.txt and config/admins.txt from joining your server -#USEWHITELIST +USEWHITELIST ## set a server location for world reboot. Don't include the byond://, just give the address and port. ## Don't set this to the same server, BYOND will automatically restart players to the server when it has restarted. # SERVER ss13.example.com:2506 ## forum address -# FORUMURL http://tgstation13.org/phpBB/index.php +# FORUMURL ## Wiki address -# WIKIURL http://www.tgstation13.org/wiki +# WIKIURL ## Rules address -# RULESURL http://www.tgstation13.org/wiki/Rules +# RULESURL ## Github address -# GITHUBURL https://www.github.com/tgstation/tgstation +GITHUBURL https://github.com/Guidesu/Solunakin ## Discord bot command prefix, if the discord bot is used # DISCORDBOTCOMMANDPREFIX ? @@ -242,7 +242,7 @@ REQUEST_INTERNET_ALLOWED youtube\.com\/watch?v=,youtu\.be\/,soundcloud\.com\/,ba POPUP_ADMIN_PM ## Uncomment to allow special 'Easter-egg' events on special holidays such as seasonal holidays and stuff like 'Talk Like a Pirate Day' :3 YAARRR -ALLOW_HOLIDAYS +#ALLOW_HOLIDAYS ## Uncomment to show the names of the admin sending a pm from IRC instead of showing as a stealthmin. #SHOW_IRC_NAME @@ -255,13 +255,13 @@ ALLOW_HOLIDAYS TICKLAG 0.5 ##Can also be set as per-second value, the following value is identical to the above. -#FPS 20 +FPS 120 ## Comment this out to disable automuting #AUTOMUTE_ON ## Uncomment this to let players see their own notes (they can still be set by admins only) -#SEE_OWN_NOTES +SEE_OWN_NOTES ### Comment these two out to prevent notes fading out over time for admins. ## Notes older then this will start fading out. @@ -423,8 +423,8 @@ MINUTE_CLICK_LIMIT 400 ## Game Chat Message Options ## Various messages to be sent to connected chat channels. -## Uncommenting these will enable them, by default they will be broadcast to Game chat channels on TGS3 or non-admin channels on TGS4. -## If using TGS4, the string option can be set as one of more chat channel tags (separated by ','s) to limit the message to channels with that tag name (case-sensitive). This will have no effect on TGS3. +## Uncommenting these will enable them, by default they will be broadcast to Game chat channels on TGS3 or non-admin channels on TGS>=4. +## If using TGS>=4, the string option can be set as one of more chat channel tags (separated by ','s) to limit the message to channels with that tag name (case-sensitive). This will have no effect on TGS3. ## i.e. CHANNEL_ANNOUNCE_NEW_GAME chat_channel_tag ## Which channel will have a message about a new game starting, message includes the station name. diff --git a/config/dev_overrides_readme.txt b/config/dev_overrides_readme.txt index 7a4a82ecf34645..e30bbde9de8bb7 100644 --- a/config/dev_overrides_readme.txt +++ b/config/dev_overrides_readme.txt @@ -2,4 +2,4 @@ # without worrying about committing. These are applied after config.txt. # You do not need this if you are a server operator! You should instead use the $include system. -#STATIONNAME My Dev World +STATIONNAME Frior Luna diff --git a/config/dynamic.json b/config/dynamic.json index 61279a29a3d4d0..9ae5a42048e6a0 100644 --- a/config/dynamic.json +++ b/config/dynamic.json @@ -31,7 +31,7 @@ "Detective", "Head of Security", "Captain", - "Nanotrasen Consultant", + "Symphionia Consultant", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", @@ -73,7 +73,7 @@ }, "Midround": { - "Syndicate Sleeper Agent": { + "Symphionia Sleeper Agent": { "weight": 0 }, @@ -147,7 +147,7 @@ }, "Latejoin": { - "Syndicate Infiltrator": { + "Symphionia Infiltrator": { "weight": 0 }, diff --git a/config/game_options.txt b/config/game_options.txt index 24b013b3fee419..8657e90144ae20 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -1,12 +1,12 @@ ## HEALTH ### ##Damage multiplier, effects both weapons and healing on all mobs. For example, 1.25 would result in 25% higher damage. -DAMAGE_MULTIPLIER 1 +DAMAGE_MULTIPLIER 0.85 ## REVIVAL ### ## whether pod plants work or not -REVIVAL_POD_PLANTS +#REVIVAL_POD_PLANTS ## amount of time (in hundredths of seconds) for which a brain retains the "spark of life" after the person's death (set to -1 for infinite) REVIVAL_BRAIN_LIFE -1 @@ -33,7 +33,7 @@ COMMENDATION_PERCENT_POLL 0.05 ## To speed things up make the number negative, to slow things down, make the number positive. ## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied. -RUN_DELAY 1.5 +RUN_DELAY 1.8 WALK_DELAY 4 ## The variables below affect the movement of specific mob types. THIS AFFECTS ALL SUBTYPES OF THE TYPE YOU CHOOSE! @@ -50,7 +50,7 @@ MULTIPLICATIVE_MOVESPEED /mob/living/basic 0 ## NAMES ### ## If uncommented this adds a random surname to a player's name if they only specify one name. -HUMANS_NEED_SURNAMES +#HUMANS_NEED_SURNAMES ## If uncommented, this forces all players to use random names !and appearances!. #FORCE_RANDOM_NAMES @@ -71,20 +71,20 @@ HUMANS_NEED_SURNAMES ## ALERT LEVELS ### -ALERT_GREEN All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced. -ALERT_BLUE_UPTO The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible, random searches are permitted. +ALERT_GREEN All threats to the colony have passed. Security may not have weapons visible, privacy laws are once again fully enforced. +ALERT_BLUE_UPTO The colony has received reliable information about possible hostile activity on the colony. Security staff may have weapons visible, random searches are permitted. ALERT_BLUE_DOWNTO The immediate threat has passed. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still allowed. -ALERT_RED_UPTO There is an immediate serious threat to the station. Security may have weapons unholstered at all times. Random searches are allowed and advised. Additionally, access requirements on some doors have been lifted. -ALERT_RED_DOWNTO The station's destruction has been averted. There is still however an immediate serious threat to the station. Security may have weapons unholstered at all times, random searches are allowed and advised. -ALERT_DELTA Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill. +ALERT_RED_UPTO There is an immediate serious threat to the colony. Security may have weapons unholstered at all times. Random searches are allowed and advised. Additionally, access requirements on some doors have been lifted. +ALERT_RED_DOWNTO The colony's destruction has been averted. There is still however an immediate serious threat to the colony. Security may have weapons unholstered at all times, random searches are allowed and advised. +ALERT_DELTA Destruction of the colony is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill. -## The total weight of station goals possible for a round (allows multiple goals) -STATION_GOAL_BUDGET 1 +## The total weight of colony goals possible for a round (allows multiple goals) +STATION_GOAL_BUDGET 3 ## GAME MODES ### ## Uncomment to not send a roundstart intercept report. Gamemodes may override this. -#NO_INTERCEPT_REPORT +NO_INTERCEPT_REPORT ## Percent weight reductions for three of the most recent modes @@ -136,7 +136,7 @@ DYNAMIC_CONFIG_ENABLED ## Comment this out to disable random events during the round. ALLOW_RANDOM_EVENTS -## Uncomment this to disable station traits. +## Uncomment this to disable colony traits. #FORBID_STATION_TRAITS ## Multiplier for earliest start time of dangerous events. @@ -145,7 +145,7 @@ EVENTS_MIN_TIME_MUL 1 ## Multiplier for minimal player count (players = alive non-AFK humans) for dangerous events to start. ## Set to 0 to make dangerous events avaliable for all populations. -EVENTS_MIN_PLAYERS_MUL 1 +EVENTS_MIN_PLAYERS_MUL 0 ## AI ### @@ -167,11 +167,11 @@ ALLOW_AI_MULTICAM ## AWAY MISSIONS ### ## Uncomment to load one of the missions from awaymissionconfig.txt or away_missions/ at roundstart. -#ROUNDSTART_AWAY +ROUNDSTART_AWAY ## How long the delay is before the Away Mission gate opens. Default is half an hour. ## 600 is one minute. -GATEWAY_DELAY 18000 +GATEWAY_DELAY 1200 ## The probability of the gateway mission being a config one CONFIG_GATEWAY_CHANCE 0 @@ -203,7 +203,7 @@ MINIMAL_ACCESS_THRESHOLD 20 ## This variable is how you may configure "Scaling Access" for Departmental Security Officers. ## Set to 0/commented out for "off", Departmental Security Officers will never get additional room-specific access (beyond general departmental doors). -## Set to 1 if you want to enable "Scaling Access", where Departmental Security Officers will get access to most rooms within a department depending on how many security officers there are relative to the number of people on a station. +## Set to 1 if you want to enable "Scaling Access", where Departmental Security Officers will get access to most rooms within a department depending on how many security officers there are relative to the number of people on a colony. ## Set to 2 if you want Departmental Security Officers to always have access to all rooms in a department. DEPSEC_ACCESS_LEVEL 1 @@ -214,7 +214,7 @@ DEPSEC_ACCESS_LEVEL 1 ## NEAR-DEATH EXPERIENCE ### ## Comment this out to disable mobs hearing ghosts when unconscious and very close to death -NEAR_DEATH_EXPERIENCE +#NEAR_DEATH_EXPERIENCE ## NON-VOCAL SILICONS ### ## Uncomment these to stop the AI, or cyborgs, from having vocal communication. @@ -251,7 +251,7 @@ SPECIFIED_LAWS asimovpp ## See datums\ai_laws.dm for the full law lists ## standard-ish laws. These are fairly ok to run -#SKYRAT EDIT ADDITION BEGIN +#NOVA EDIT ADDITION BEGIN RANDOM_LAWS armadyne_safeguard RANDOM_LAWS asimov RANDOM_LAWS asimovpp @@ -288,11 +288,11 @@ RANDOM_LAWS dagothbot LAW_WEIGHT custom,0 ## standard-ish laws. These are fairly ok to run -## Unique AI station trait uses weights so we don't want asimov -#SKYRAT EDIT ADDITION BEGIN +## Unique AI colony trait uses weights so we don't want asimov +#NOVA EDIT ADDITION BEGIN LAW_WEIGHT armadyne_safeguard,40 LAW_WEIGHT dagothbot,8 -#SKYRAT EDIT ADDITION END +#NOVA EDIT ADDITION END LAW_WEIGHT asimov,0 LAW_WEIGHT asimovpp,5 LAW_WEIGHT paladin,5 @@ -345,7 +345,7 @@ SILICON_MAX_LAW_AMOUNT 12 ## See code/__DEFINES/DNA.dm for more options than the ones below. -## You probably want humans on your space station, but technically speaking you can turn them off without any ill effect +## You probably want humans on your space colony, but technically speaking you can turn them off without any ill effect ROUNDSTART_RACES human ## Races that are strictly worse than humans that could probably be turned on without balance concerns @@ -402,7 +402,7 @@ ROUNDSTART_RACES ethereal #ROUNDSTART_RACES military_synth #ROUNDSTART_RACES agent -## SKYRAT RACES DOWN THERE +## NOVA SECTOR RACES DOWN THERE ROUNDSTART_RACES mammal ROUNDSTART_RACES vulpkanin ROUNDSTART_RACES tajaran @@ -459,9 +459,9 @@ OVERFLOW_CAP -1 ##Limit Spell Choices## ## Uncomment to disallow wizards from using certain spells that may be too chaotic/fun for your playerbase -#NO_SUMMON_GUNS -#NO_SUMMON_MAGIC -#NO_SUMMON_EVENTS +NO_SUMMON_GUNS +NO_SUMMON_MAGIC +NO_SUMMON_EVENTS ## Comment this out for "normal" explosions, which ignore obstacles ## Uncomment for explosions that react to doors and walls @@ -486,18 +486,18 @@ BOMBCAP 20 ## a less lootfilled or smaller or less round effecting ruin costs less to ## spawn, while the converse is true. Alter this number to affect the amount ## of ruins. -LAVALAND_BUDGET 60 +LAVALAND_BUDGET 90 ## Ice Moon Budget -ICEMOON_BUDGET 90 +ICEMOON_BUDGET 130 ## Ocean Budget OCEAN_BUDGET 60 ## Space Ruin Budget -Space_Budget 16 +Space_Budget 57 -## Time in ds from when a player latejoins till the arrival shuttle docks at the station +## Time in ds from when a player latejoins till the arrival shuttle docks at the colony ## Must be at least 30. At least 55 recommended to be visually/aurally appropriate ARRIVALS_SHUTTLE_DOCK_WINDOW 55 @@ -519,10 +519,10 @@ MICE_ROUNDSTART 10 ROUNDSTART_TRAITS ## Uncomment to disable human moods. -#DISABLE_HUMAN_MOOD +DISABLE_HUMAN_MOOD ## Enable night shifts -#ENABLE_NIGHT_SHIFTS +ENABLE_NIGHT_SHIFTS ## The shift start hour in 24-hour (0-23) notation SHIFT_TIME_START_HOUR 7 @@ -550,7 +550,7 @@ MAXFINE 2000 #DRONE_ROLE_PLAYTIME 14 ## Whether native FoV is enabled for all people. -#NATIVE_FOV +NATIVE_FOV ## Whether circuit sounds are allowed to be played or not. #DISALLOW_CIRCUIT_SOUNDS diff --git a/config/iceruinblacklist.txt b/config/iceruinblacklist.txt index 7d87495f60ba29..dd4891c2b088c2 100644 --- a/config/iceruinblacklist.txt +++ b/config/iceruinblacklist.txt @@ -5,11 +5,14 @@ ##RESPAWN #_maps/RandomRuins/AnywhereRuins/golem_ship.dmm -#modular_skyrat/modules/mapping/_maps/RandomRuins/IceRuins/icemoon_underground_syndicate_base1_skyrat.dmm +#_maps/RandomRuins/IceRuins/nova/icemoon_underground_interdyne_base1.dmm +#_maps/RandomRuins/IceRuins/nova/icemoon_underground_icewalker_upper.dmm +#_maps/RandomRuins/IceRuins/nova/icemoon_underground_icewalker_lower.dmm ##MEGAFAUNA #_maps/RandomRuins/IceRuins/icemoon_surface_mining_site.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_mining_site.dmm +_maps/RandomRuins/IceRuins/icemoon_underground_mining_site.dmm +#_maps/RandomRuins/IceRuins/nova/icemoon_underground_mining_site.dmm #_maps/RandomRuins/IceRuins/icemoon_underground_wendigo_cave.dmm #_maps/RandomRuins/IceRuins/icemoon_underground_lavaland.dmm diff --git a/config/interviews.txt b/config/interviews.txt index 2b234cc61905fe..fd02a70a96b43f 100644 --- a/config/interviews.txt +++ b/config/interviews.txt @@ -1,12 +1,11 @@ # Interview welcome message displayed at the top of all interview questionnaires # Should help to describe why the questionnaire is being given to the interviewee # You can include links using markdown-style link notation, like [our rules](https://tgstation13.org/wiki/Rules) -INTERVIEW_WELCOME_MSG Welcome to our server. As you have not played here before, or played very little, we'll need you to answer a few questions below. After you submit your answers they will be reviewed and you may be asked further questions before being allowed to play. Please be patient as there may be others ahead of you. +INTERVIEW_WELCOME_MSG Welcome to my server. As you have not played here before, or played very little, i'll need you to answer a few questions below. After you submit your answers they will be reviewed and you may be asked further questions before being allowed to play. Please be patient as there may be others ahead of you. # Interview questions are listed here, in the order that they will be displayed in-game. # You can include links using markdown-style link notation, like [our rules](https://tgstation13.org/wiki/Rules) INTERVIEW_QUESTIONS Why have you joined the server today? INTERVIEW_QUESTIONS Have you played space-station 13 before? If so, on what servers? INTERVIEW_QUESTIONS Do you know anybody on the server today? If so, who? -INTERVIEW_QUESTIONS Have you read and understood our [rules](https://tgstation13.org/wiki/Rules)? INTERVIEW_QUESTIONS Do you have any additional comments or questions? diff --git a/config/jobconfig.toml b/config/jobconfig.toml index fb9cfdc561e17a..05dc3ce7972cc8 100644 --- a/config/jobconfig.toml +++ b/config/jobconfig.toml @@ -36,22 +36,22 @@ "Playtime Requirements" = 60 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 2 -"Total Positions" = 3 +"Spawn Positions" = 0 +"Total Positions" = 0 [BARBER] "Playtime Requirements" = 0 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 2 -"Total Positions" = 2 +"Spawn Positions" = 0 +"Total Positions" = 0 [BARTENDER] "Playtime Requirements" = 0 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 1 -"Total Positions" = 1 +"Spawn Positions" = 0 +"Total Positions" = 0 [BLUESHIELD] "Playtime Requirements" = 2400 @@ -60,40 +60,47 @@ "Spawn Positions" = 1 "Total Positions" = 1 +[BITRUNNER] +"# Playtime Requirements" = 0 +"# Required Account Age" = 0 +"# Required Character Age" = 0 +"# Spawn Positions" = 3 +"# Total Positions" = 3 + [BOTANIST] "Playtime Requirements" = 0 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 2 -"Total Positions" = 3 +"Spawn Positions" = 0 +"Total Positions" = 0 [BOUNCER] "Playtime Requirements" = 180 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 2 -"Total Positions" = 2 +"Spawn Positions" = 0 +"Total Positions" = 0 [CAPTAIN] "Playtime Requirements" = 2400 "Required Account Age" = 14 "# Required Character Age" = 0 -"Spawn Positions" = 1 -"Total Positions" = 1 +"Spawn Positions" = 0 +"Total Positions" = 0 [CARGO_TECHNICIAN] "# Playtime Requirements" = 0 "# Required Account Age" = 0 "# Required Character Age" = 0 -"# Spawn Positions" = 3 -"# Total Positions" = 5 +"# Spawn Positions" = 0 +"# Total Positions" = 0 [CHAPLAIN] "Playtime Requirements" = 0 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 1 -"Total Positions" = 1 +"Spawn Positions" = 0 +"Total Positions" = 0 [CHEMIST] "Playtime Requirements" = 60 @@ -120,71 +127,71 @@ "Playtime Requirements" = 180 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 1 -"Total Positions" = 1 +"Spawn Positions" = 0 +"Total Positions" = 0 [COOK] "Playtime Requirements" = 0 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 1 -"Total Positions" = 2 +"Spawn Positions" = 0 +"Total Positions" = 0 [CORRECTIONS_OFFICER] "Playtime Requirements" = 150 "Required Account Age" = 7 "# Required Character Age" = 0 -"Spawn Positions" = 1 -"Total Positions" = 1 +"Spawn Positions" = 0 +"Total Positions" = 0 [CORONER] "# Playtime Requirements" = 0 "# Required Account Age" = 0 "# Required Character Age" = 0 -"# Spawn Positions" = 1 -"# Total Positions" = 1 +"# Spawn Positions" = 0 +"# Total Positions" = 0 [CURATOR] "Playtime Requirements" = 0 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 2 -"Total Positions" = 2 +"Spawn Positions" = 0 +"Total Positions" = 0 [CUSTOMS_AGENT] "Playtime Requirements" = 180 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 2 -"Total Positions" = 2 +"Spawn Positions" = 0 +"Total Positions" = 0 [CYBORG] "Playtime Requirements" = 120 "Required Account Age" = 21 "# Required Character Age" = 0 -"Spawn Positions" = 3 -"Total Positions" = 3 +"Spawn Positions" = 0 +"Total Positions" = 0 [DETECTIVE] "Playtime Requirements" = 300 "Required Account Age" = 7 "# Required Character Age" = 0 -"Spawn Positions" = 2 -"Total Positions" = 2 +"Spawn Positions" = 0 +"Total Positions" = 0 [ENGINEERING_GUARD] "Playtime Requirements" = 180 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 2 -"Total Positions" = 2 +"Spawn Positions" = 0 +"Total Positions" = 0 [GENETICIST] "Playtime Requirements" = 60 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 2 -"Total Positions" = 2 +"Spawn Positions" = 0 +"Total Positions" = 0 [HEAD_OF_PERSONNEL] "Playtime Requirements" = 2400 @@ -204,29 +211,29 @@ "Playtime Requirements" = 0 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 5 -"Total Positions" = 5 +"Spawn Positions" = 0 +"Total Positions" = 0 [LAWYER] "Playtime Requirements" = 0 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 2 -"Total Positions" = 2 +"Spawn Positions" = 0 +"Total Positions" = 0 [MEDICAL_DOCTOR] "Playtime Requirements" = 0 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 3 -"Total Positions" = 5 +"Spawn Positions" = 0 +"Total Positions" = 0 [MIME] "Playtime Requirements" = 180 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 1 -"Total Positions" = 1 +"Spawn Positions" = 0 +"Total Positions" = 0 [NANOTRASEN_CONSULTANT] "Playtime Requirements" = 2400 @@ -239,29 +246,29 @@ "Playtime Requirements" = 180 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 2 -"Total Positions" = 2 +"Spawn Positions" = 0 +"Total Positions" = 0 [PARAMEDIC] "Playtime Requirements" = 0 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 2 -"Total Positions" = 3 +"Spawn Positions" = 0 +"Total Positions" = 0 [PRISONER] "Playtime Requirements" = 0 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 12 -"Total Positions" = 12 +"Spawn Positions" = 0 +"Total Positions" = 0 [PSYCHOLOGIST] "Playtime Requirements" = 0 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 1 -"Total Positions" = 1 +"Spawn Positions" = 0 +"Total Positions" = 0 [QUARTERMASTER] "Playtime Requirements" = 2400 @@ -281,50 +288,50 @@ "Playtime Requirements" = 60 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 2 -"Total Positions" = 3 +"Spawn Positions" = 0 +"Total Positions" = 0 [SCIENCE_GUARD] "Playtime Requirements" = 180 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 2 -"Total Positions" = 2 +"Spawn Positions" = 0 +"Total Positions" = 0 [SCIENTIST] "Playtime Requirements" = 60 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 5 -"Total Positions" = 5 +"Spawn Positions" = 0 +"Total Positions" = 0 [SECURITY_MEDIC] "Playtime Requirements" = 180 "Required Account Age" = 7 "# Required Character Age" = 0 -"Spawn Positions" = 1 -"Total Positions" = 1 +"Spawn Positions" = 0 +"Total Positions" = 0 [SECURITY_OFFICER] "Playtime Requirements" = 300 "Required Account Age" = 7 "# Required Character Age" = 0 -"Spawn Positions" = 6 -"Total Positions" = 6 +"Spawn Positions" = 0 +"Total Positions" = 0 [SHAFT_MINER] "Playtime Requirements" = 0 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 4 -"Total Positions" = 4 +"Spawn Positions" = 0 +"Total Positions" = 0 [STATION_ENGINEER] "Playtime Requirements" = 60 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 5 -"Total Positions" = 5 +"Spawn Positions" = 0 +"Total Positions" = 0 [VANGUARD_OPERATIVE] "Playtime Requirements" = 400 @@ -337,12 +344,12 @@ "Playtime Requirements" = 60 "Required Account Age" = 0 "# Required Character Age" = 0 -"Spawn Positions" = 1 -"Total Positions" = 1 +"Spawn Positions" = 0 +"Total Positions" = 0 [WARDEN] "Playtime Requirements" = 300 "Required Account Age" = 7 "# Required Character Age" = 0 -"Spawn Positions" = 1 -"Total Positions" = 1 +"Spawn Positions" = 0 +"Total Positions" = 0 diff --git a/config/jobs.txt b/config/jobs.txt index 3b393782222501..bf2d78e63b2489 100644 --- a/config/jobs.txt +++ b/config/jobs.txt @@ -15,66 +15,66 @@ Chief Medical Officer=1,1 Quartermaster=1,1 -# Central Command +# Conglomeration of Colonists -Nanotrasen Consultant=1,1 +Symphionia Consultant=1,1 Blueshield=1,1 # Cargo -Cargo Technician=4,2 -Shaft Miner=4,4 -Customs Agent=2,2 +Cargo Technician=0,0 +Shaft Miner=0,0 +Customs Agent=0,0 # Service -Bartender=1,1 -Cook=2,1 -Barber=2,2 -Botanist=3,2 -Janitor=5,5 -Clown=1,1 -Mime=1,1 -Curator=2,2 -Lawyer=2,2 -Chaplain=1,1 -Psychologist=1,1 -Bouncer=2,2 +Bartender=0,0 +Cook=0,0 +Barber=0,0 +Botanist=0,0 +Janitor=0,0 +Clown=0,0 +Mime=0,0 +Curator=0,0 +Lawyer=0,0 +Chaplain=0,0 +Psychologist=0,0 +Bouncer=0,0 # Engineering -Station Engineer=5,5 -Atmospheric Technician=3,2 -Engineering Guard=2,2 +Station Engineer=0,0 +Atmospheric Technician=0,0 +Engineering Guard=0,0 # Medical -Medical Doctor=5,3 -Paramedic=3,2 -Chemist=2,2 -Geneticist=2,2 -Virologist=1,1 -Orderly=2,2 +Medical Doctor=0,0 +Paramedic=0,0 +Chemist=0,0 +Geneticist=0,0 +Virologist=0,0 +Orderly=0,0 # Science -Scientist=5,5 -Roboticist=3,2 +Scientist=0,0 +Roboticist=0,0 Vanguard Operative=0,0 -Science Guard=2,2 +Science Guard=0,0 # Security -Warden=1,1 -Detective=2,2 -Security Officer=6,6 -Corrections Officer=2,1 +Warden=0,0 +Detective=0,0 +Security Officer=0,0 +Corrections Officer=0,0 # Silicons @@ -86,4 +86,4 @@ Cyborg=3,3 # Misc. Assistant=-1,-1 -Prisoner=12,12 +Prisoner=0,0 diff --git a/config/lavaruinblacklist.txt b/config/lavaruinblacklist.txt index 2c0642bffac6b3..29154fe011bf50 100644 --- a/config/lavaruinblacklist.txt +++ b/config/lavaruinblacklist.txt @@ -12,8 +12,8 @@ ##RESPAWN #_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm _maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm -#modular_skyrat/modules/mapping/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1_skyrat.dmm -#_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_ash_walker1_skyrat.dmm +#_maps/RandomRuins/LavaRuins/nova/lavaland_surface_ash_walker1.dmm +#_maps/RandomRuins/LavaRuins/nova/lavaland_surface_interdyne_base1.dmm #_maps/RandomRuins/AnywhereRuins/golem_ship.dmm ##SIN diff --git a/config/maps.txt b/config/maps.txt index f9350ddd1d6b4b..1673979929ba73 100644 --- a/config/maps.txt +++ b/config/maps.txt @@ -15,34 +15,34 @@ endmap # Production-level maps. -map birdshot +#map birdshot #default maxplayers 66 votable endmap -map deltastation +#map deltastation minplayers 50 votable endmap map icebox - minplayers 25 + minplayers 0 votable endmap -map metastation +#map metastation minplayers 25 #voteweight 0.5 votable endmap -map northstar +#map northstar minplayers 50 votable endmap -map tramstation +#map tramstation minplayers 35 votable endmap @@ -58,14 +58,14 @@ endmap map runtimestation endmap -##SKYRAT MAPS## +##NOVA SECTOR MAPS## -map voidraptor +#map voidraptor maxplayers 100 votable endmap -map blueshift +#map blueshift minplayers 70 votable endmap diff --git a/config/motd.txt b/config/motd.txt index a7496b6d105766..efca98b4cbd0cf 100644 --- a/config/motd.txt +++ b/config/motd.txt @@ -1,5 +1,5 @@ -

    Welcome to Space Station 13!

    +

    Welcome to Solunakin!

    -This server is running a /tg/station 13 Git build. +This server is currently under heavy WIP by a single person. Forked off skyrat, made into my own custom mess. Enjoy!/i> diff --git a/config/nova/archived_stories.json b/config/nova/archived_stories.json new file mode 100644 index 00000000000000..6834f4f971be6a --- /dev/null +++ b/config/nova/archived_stories.json @@ -0,0 +1,9 @@ +{ + "welcome": { + "title": "Welcome", + "text": "Thank you for your continued employment. Here you may read any former articles produced by Symphionia News Network and associated networks.", + "year": 2562, + "month": 9, + "day": 27 + } +} diff --git a/config/nova/config_nova.txt b/config/nova/config_nova.txt new file mode 100644 index 00000000000000..4102b718b581ed --- /dev/null +++ b/config/nova/config_nova.txt @@ -0,0 +1,148 @@ +## Comment this out if you'd like a server that cares only about local bans in the database. +RESPECT_GLOBAL_BANS + +## Automatic population control population limit, will send players(not admins) to the overflow server. +## Set to 0 to disable +## MAKE SURE YOU SET AN OVERFLOW IP! +PLAYER_HARD_CAP 0 + +## Player prompt to change servers after this cap. +## Set to 0 to disable +## MAKE SURE YOU SET AN OVERFLOW IP! +PLAYER_SOFT_CAP 0 + +## The IP of the overflow server. See above. +#OVERFLOW_SERVER_IP byond://example:1337 + +## Cross server OOC +## Sends this servers OOC to all other cross servers. Uses cross server name as an identity. +#ENABLE_CROSS_SERVER_OOC + +## Cross server ASAY +## Sends this servers ASAY to all other cross servers. Uses cross server name as an identity. +#ENABLE_CROSS_SERVER_ASAY + +## The non-IC name we send to OOC and adminsay. +#CROSS_SERVER_NAME + + +ALERT_AMBER_UPTO A major security emergency has developed. Military staff may have weapons unholstered at all times. Random searches are allowed and advised. +ALERT_AMBER_DOWNTO A major security emergency is still underway. Non-Military personnel are required to obey all relevant instructions from Military staff. +ALERT_ORANGE_UPTO A major engineering emergency has developed. Non-engineering personnel are required to evacuate any affected areas and obey relevant instructions from engineering staff. Engineering staff will have expanded access to areas of the station during the emergency. +ALERT_ORANGE_DOWNTO A major engineering emergency has developed. Non-engineering personnel are required to evacuate any affected areas and obey relevant instructions from engineering staff. Engineering staff will have expanded access to areas of the station during the emergency. +ALERT_VIOLET_UPTO A major medical emergency has developed. Non-medical personnel are required to obey all relevant instructions from medical staff. +ALERT_VIOLET_DOWNTO A major medical emergency has developed. Non-medical personnel are required to obey all relevant instructions from medical staff. +ALERT_DELTA_UPTO Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill. +ALERT_DELTA_DOWNTO Destruction of the station is still imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill. +ALERT_GAMMA The Solar Federation has placed this system under Gamma Alert status. This galactic system is facing a ZK-Class Failure Scenario. Military Personnel is authorized full access to lethal equipment to enforce Martial Law. Failure to follow emergency procedures is punishable by death. This is not a drill. + +## How long until someone can be put in cryo if they are SSD +CRYO_MIN_SSD_TIME 15 + +## log subtler emotes in game.txt +#LOG_SUBTLER + +## Enables autotransfer system +#AUTOTRANSFER + +## Enables starting transfer votes by the crew at large. +#ALLOW_VOTE_TRANSFER + +## autovote initial delay (deciseconds in real time) before first automatic transfer vote call (default 120 minutes) +## Set to 0 to disable the subsystem altogether. +VOTE_AUTOTRANSFER_INITIAL 72000 + +## autovote delay (deciseconds in real time) before sequential automatic transfer votes are called (default 30 minutes) +VOTE_AUTOTRANSFER_INTERVAL 18000 + +## autovote maximum votes until automatic transfer call. (default 4) +## Set to 0 to force automatic crew transfer after the 'vote_autotransfer_initial' elapsed. +## Set to -1 to disable the maximum votes cap. +VOTE_AUTOTRANSFER_MAXIMUM 4 + +## Policy for what people remember after dying and being brought back to life +BLACKOUTPOLICY You remember nothing after you've blacked out and you do not remember who or what events killed you, however, you can have faint recollection of what led up to it. + +## Combat indicator, comment out to disable it +COMBAT_INDICATOR + +## Role ID for the new game discord ping +GAME_ALERT_ROLE_ID + +## Channel that either has reaction roles or instruction on assigning roles +ROLE_ASSIGN_CHANNEL_ID + +##Rockplanet Ruins Budget +ROCKPLANET_BUDGET 60 + +## Splits the rounds threat budget between midrounds and roundstart +#SPLIT_THREAT_BUDGET + +##Player controlled mob spawn text +PC_MOB_TEXT As a player controlled mob you are expected to play the role to the best of your ability. This means if you're an animal, act like one. You shouldn't display much intelligence if any. This also means if you're engaging in combat you should refrain from mercing people fully. Play not to win but to create a challenge. You're there to replace AI, make others enjoy the situation as well. If your simple mob is not above simple or mute intelligence, using structures such as welding tanks/canisters/boxes to hinder your opponent is entirely forbidden. Do not do this. + +## Toggles various checks for russian texts formation, as an example - autohiss. Useful only for russian servers +#RUSSIAN_TEXT_FORMATION + +## Toggles off SSDecay when uncommented, HIGHLY recommended for map test-merges, to avoid giving it a bad first impression. +#SSDECAY_DISABLED + +## Toggles off SSDecay nests when uncommented, HIGHLY recommended for map test-merges, to avoid giving it a bad first impression. +## If SSDECAY_DISABLED is uncommented, then it does not matter if this is commented out since this config requires SSDecay to be enabled first. +#SSDECAY_DISABLE_NESTS + +## Disables any ERP preferences for codebases that don't want it. +#DISABLE_ERP_PREFERENCES +#DISABLE_LEWD_ITEMS +#ERP_EMOTES_TO_DISABLE cum + +## Disables mismatched parts for codebases that don't want it. +#DISABLE_MISMATCHED_PARTS + +## Do we allow consecutive catastrophic events? +#ALLOW_CONSECUTIVE_CATASTROPIC_EVENTS + +## What is the most amount of time the next event can run? +EVENT_FREQUENCY_UPPER 8400 + +## What is the least amount of time the next event can run? +EVENT_FREQUENCY_LOWER 4200 + +## Ticket ping frequency. Set 0 for disable that subsystem. 3000 - 5 minutes, 600 - 1 minute. +TICKET_PING_FREQUENCY 0 + +## Minimum alert level for pods to actually evacuate people +MINIMUM_ALERT_FOR_PODS 0 + +## Delay between newscasters making lore announcements, default is 18000 (30 minutes) +LORECASTER_DELAY 18000 + +## If uncommented, suicide will be disabled. +DISABLE_SUICIDE + +## The link to the policy wiki page for primitive catgirls +#ICECATS_POLICY_LINK "https://wiki.skyrat13.tk/w/index.php/Ghost_Role_policy#Icewalkers" + +## What is the maximum size (in percents) we want people to be able to use with the size collar? +SIZE_COLLAR_MAXIMUM 400 +## What is the minimum size (in percents) we want people to be able to use with the size collar? +SIZE_COLLAR_MINIMUM 15 + +## Uncomment to enable minimum flavor text requirements for joining the round +MIN_FLAVOR_TEXT + +## Minimum flavor text number needed to enter the game +## YOU MUST HAVE MIN_FLAVOR_TEXT ENABLED FOR THIS TO WORK. +## Don't ever set this to 0, just disable MIN_FLAVOR_TEXT +FLAVOR_TEXT_CHARACTER_REQUIREMENT 70 + +## Comment these out if you want to use the SQL-based player rank system, the +## legacy system uses the .txt files in the data folder instead. +## You need to set up your database to use the SQL-based system. +## These flags are automatically enabled if SQL_ENABLED isn't. +DONATOR_LEGACY_SYSTEM +MENTOR_LEGACY_SYSTEM +VETERAN_LEGACY_SYSTEM + +## How much time arrivals shuttle should stay at station after its engines recharged before returning to interlink. In deciseconds. 150 - 15 seconds. 0 - disables autoreturn. +ARRIVALS_WAIT 150 diff --git a/config/skyrat/dbconfig.txt b/config/nova/dbconfig.txt similarity index 88% rename from config/skyrat/dbconfig.txt rename to config/nova/dbconfig.txt index 4fb8885dbef9d0..02c732e0c84bc0 100644 --- a/config/skyrat/dbconfig.txt +++ b/config/nova/dbconfig.txt @@ -1,5 +1,5 @@ -# Whether or not we log game logs to the SQL database. Requires the SQL database to function, as well as our Skyrat-only table, `game_log`. +# Whether or not we log game logs to the SQL database. Requires the SQL database to function, as well as our Nova Sector-only table, `game_log`. #SQL_GAME_LOG # Whether or not we log game logs to files on the server when we're already logging them on the server, if SQL_GAME_LOG is enabled. diff --git a/config/skyrat/donators.txt b/config/nova/donators.txt similarity index 77% rename from config/skyrat/donators.txt rename to config/nova/donators.txt index dd297dd3c7e0f3..092a0d14d24e3b 100644 --- a/config/skyrat/donators.txt +++ b/config/nova/donators.txt @@ -2,11 +2,4 @@ # List for people who support us! They get cool loadout items # # Case is not important for ckey. # ############################################################################################### -#Optimumtact -#kevinz000 -#Iamgoofball -#Rshoe95 -#That one penguin who became an admin -Azalis -Xyelgazel -Gandalf2k15 +Guidesu diff --git a/config/skyrat/interactions/beckon.json b/config/nova/interactions/beckon.json similarity index 100% rename from config/skyrat/interactions/beckon.json rename to config/nova/interactions/beckon.json diff --git a/config/skyrat/interactions/cheer.json b/config/nova/interactions/cheer.json similarity index 100% rename from config/skyrat/interactions/cheer.json rename to config/nova/interactions/cheer.json diff --git a/config/skyrat/interactions/example_interaction.json b/config/nova/interactions/example_interaction.json similarity index 100% rename from config/skyrat/interactions/example_interaction.json rename to config/nova/interactions/example_interaction.json diff --git a/config/skyrat/interactions/fistbump.json b/config/nova/interactions/fistbump.json similarity index 100% rename from config/skyrat/interactions/fistbump.json rename to config/nova/interactions/fistbump.json diff --git a/config/skyrat/interactions/handshake.json b/config/nova/interactions/handshake.json similarity index 100% rename from config/skyrat/interactions/handshake.json rename to config/nova/interactions/handshake.json diff --git a/config/skyrat/interactions/headpat.json b/config/nova/interactions/headpat.json similarity index 100% rename from config/skyrat/interactions/headpat.json rename to config/nova/interactions/headpat.json diff --git a/config/skyrat/interactions/highfive.json b/config/nova/interactions/highfive.json similarity index 100% rename from config/skyrat/interactions/highfive.json rename to config/nova/interactions/highfive.json diff --git a/config/skyrat/interactions/pat.json b/config/nova/interactions/pat.json similarity index 100% rename from config/skyrat/interactions/pat.json rename to config/nova/interactions/pat.json diff --git a/config/skyrat/interactions/salute.json b/config/nova/interactions/salute.json similarity index 100% rename from config/skyrat/interactions/salute.json rename to config/nova/interactions/salute.json diff --git a/modular_skyrat/modules/black_mesa/icons/structures/dmi b/config/nova/mentors.txt similarity index 100% rename from modular_skyrat/modules/black_mesa/icons/structures/dmi rename to config/nova/mentors.txt diff --git a/config/skyrat/mining_levels.txt b/config/nova/mining_levels.txt similarity index 100% rename from config/skyrat/mining_levels.txt rename to config/nova/mining_levels.txt diff --git a/config/nova/news_stories.json b/config/nova/news_stories.json new file mode 100644 index 00000000000000..51f26bfae611cf --- /dev/null +++ b/config/nova/news_stories.json @@ -0,0 +1,9 @@ +{ + "stocks_go_up": { + "title": "Symphionia Stock Report", + "text": "Thank you for reading the Symphionia Stock Report. Due to quarterly earnings reports exceeding expectations by several percent, the Symphionia Incorporated stock has jumped 5%, one of the largest in months.", + "year": 2562, + "month": 9, + "day": 26 + } +} diff --git a/config/skyrat/title_html.txt b/config/nova/title_html.txt similarity index 100% rename from config/skyrat/title_html.txt rename to config/nova/title_html.txt diff --git a/config/nova/veteran_players.txt b/config/nova/veteran_players.txt new file mode 100644 index 00000000000000..8b137891791fe9 --- /dev/null +++ b/config/nova/veteran_players.txt @@ -0,0 +1 @@ + diff --git a/config/rockplanet.txt b/config/rockplanet.txt index 1def7619f6224c..4926cb0227efc3 100644 --- a/config/rockplanet.txt +++ b/config/rockplanet.txt @@ -1,17 +1,17 @@ #Listing maps here will blacklist them from generating on LV-669. #Maps must be the full path to them -#A list of maps valid to blacklist can be found in modular_skyrat/modules/mapping/_maps/RandomRuins/RockplanetRuins (MOVED FROM _maps\skyrat\RandomRuins\AsteroidRuins) +#A list of maps valid to blacklist can be found in modular_nova/modules/mapping/_maps/RandomRuins/RockplanetRuins (MOVED FROM _maps\nova\RandomRuins\AsteroidRuins) #SPECIFYING AN INVALID MAP WILL RESULT IN RUNTIMES ON GAME START -#modular_skyrat/modules/mapping/_maps/RandomRuins/RockplanetRuins/throwback.dmm -#modular_skyrat/modules/mapping/_maps/RandomRuins/RockplanetRuins/crashedshuttle.dmm -#modular_skyrat/modules/mapping/_maps/RandomRuins/RockplanetRuins/cozycabin.dmm -#modular_skyrat/modules/mapping/_maps/RandomRuins/RockplanetRuins/biodome.dmm -#modular_skyrat/modules/mapping/_maps/RandomRuins/RockplanetRuins/xenohive.dmm -#modular_skyrat/modules/mapping/_maps/RandomRuins/RockplanetRuins/factory.dmm +#modular_nova/modules/mapping/_maps/RandomRuins/RockplanetRuins/throwback.dmm +#modular_nova/modules/mapping/_maps/RandomRuins/RockplanetRuins/crashedshuttle.dmm +#modular_nova/modules/mapping/_maps/RandomRuins/RockplanetRuins/cozycabin.dmm +#modular_nova/modules/mapping/_maps/RandomRuins/RockplanetRuins/biodome.dmm +#modular_nova/modules/mapping/_maps/RandomRuins/RockplanetRuins/xenohive.dmm +#modular_nova/modules/mapping/_maps/RandomRuins/RockplanetRuins/factory.dmm #Abandoned Structures (lootless, mostly fluff) -#modular_skyrat/modules/mapping/_maps/RandomRuins/RockplanetRuins/abandoned_a.dmm -#modular_skyrat/modules/mapping/_maps/RandomRuins/RockplanetRuins/abandoned_b.dmm -#modular_skyrat/modules/mapping/_maps/RandomRuins/RockplanetRuins/abandoned_c.dmm -#modular_skyrat/modules/mapping/_maps/RandomRuins/RockplanetRuins/abandoned_d.dmm +#modular_nova/modules/mapping/_maps/RandomRuins/RockplanetRuins/abandoned_a.dmm +#modular_nova/modules/mapping/_maps/RandomRuins/RockplanetRuins/abandoned_b.dmm +#modular_nova/modules/mapping/_maps/RandomRuins/RockplanetRuins/abandoned_c.dmm +#modular_nova/modules/mapping/_maps/RandomRuins/RockplanetRuins/abandoned_d.dmm diff --git a/config/skyrat/archived_stories.json b/config/skyrat/archived_stories.json deleted file mode 100644 index 982da97b54e2da..00000000000000 --- a/config/skyrat/archived_stories.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "welcome": { - "title": "Welcome", - "text": "Thank you for your continued employment. Here you may read any former articles produced by Nanotrasen News Network and associated networks.", - "year": 2562, - "month": 9, - "day": 27 - } -} diff --git a/config/skyrat/mentors.txt b/config/skyrat/mentors.txt deleted file mode 100644 index 928da766c44455..00000000000000 --- a/config/skyrat/mentors.txt +++ /dev/null @@ -1,2 +0,0 @@ -thattraitorgeorgemellons -Azalis diff --git a/config/skyrat/news_stories.json b/config/skyrat/news_stories.json deleted file mode 100644 index b085cb55efb501..00000000000000 --- a/config/skyrat/news_stories.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "stocks_go_up": { - "title": "Nanotrasen Stock Report", - "text": "Thank you for reading the Nanotrasen Stock Report. Due to quarterly earnings reports exceeding expectations by several percent, the Nanotrasen Incorporated stock has jumped 5%, one of the largest in months.", - "year": 2562, - "month": 9, - "day": 26 - } -} diff --git a/config/skyrat/skyrat_config.txt b/config/skyrat/skyrat_config.txt deleted file mode 100644 index 221fc87776110f..00000000000000 --- a/config/skyrat/skyrat_config.txt +++ /dev/null @@ -1,148 +0,0 @@ -## Comment this out if you'd like a server that cares only about local bans in the database. -RESPECT_GLOBAL_BANS - -## Automatic population control population limit, will send players(not admins) to the overflow server. -## Set to 0 to disable -## MAKE SURE YOU SET AN OVERFLOW IP! -PLAYER_HARD_CAP 0 - -## Player prompt to change servers after this cap. -## Set to 0 to disable -## MAKE SURE YOU SET AN OVERFLOW IP! -PLAYER_SOFT_CAP 0 - -## The IP of the overflow server. See above. -#OVERFLOW_SERVER_IP byond://example:1337 - -## Cross server OOC -## Sends this servers OOC to all other cross servers. Uses cross server name as an identity. -#ENABLE_CROSS_SERVER_OOC - -## Cross server ASAY -## Sends this servers ASAY to all other cross servers. Uses cross server name as an identity. -#ENABLE_CROSS_SERVER_ASAY - -## The non-IC name we send to OOC and adminsay. -#CROSS_SERVER_NAME - - -ALERT_AMBER_UPTO A major security emergency has developed. Security staff may have weapons unholstered at all times. Random searches are allowed and advised. -ALERT_AMBER_DOWNTO A major security emergency is still underway. Non-security personnel are required to obey all relevant instructions from security staff. -ALERT_ORANGE_UPTO A major engineering emergency has developed. Non-engineering personnel are required to evacuate any affected areas and obey relevant instructions from engineering staff. Engineering staff will have expanded access to areas of the station during the emergency. -ALERT_ORANGE_DOWNTO A major engineering emergency has developed. Non-engineering personnel are required to evacuate any affected areas and obey relevant instructions from engineering staff. Engineering staff will have expanded access to areas of the station during the emergency. -ALERT_VIOLET_UPTO A major medical emergency has developed. Non-medical personnel are required to obey all relevant instructions from medical staff. -ALERT_VIOLET_DOWNTO A major medical emergency has developed. Non-medical personnel are required to obey all relevant instructions from medical staff. -ALERT_DELTA_UPTO Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill. -ALERT_DELTA_DOWNTO Destruction of the station is still imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill. -ALERT_GAMMA The Solar Federation has placed this system under Gamma Alert status. This galactic system is facing a ZK-Class Reality Failure Scenario. Security Personnel is authorized full access to lethal equipment to enforce Martial Law. Failure to follow emergency procedures is punishable by death. This is not a drill. - -## How long until someone can be put in cryo if they are SSD -CRYO_MIN_SSD_TIME 15 - -## log subtler emotes in game.txt -#LOG_SUBTLER - -## Enables autotransfer system -#AUTOTRANSFER - -## Enables starting transfer votes by the crew at large. -#ALLOW_VOTE_TRANSFER - -## autovote initial delay (deciseconds in real time) before first automatic transfer vote call (default 120 minutes) -## Set to 0 to disable the subsystem altogether. -VOTE_AUTOTRANSFER_INITIAL 72000 - -## autovote delay (deciseconds in real time) before sequential automatic transfer votes are called (default 30 minutes) -VOTE_AUTOTRANSFER_INTERVAL 18000 - -## autovote maximum votes until automatic transfer call. (default 4) -## Set to 0 to force automatic crew transfer after the 'vote_autotransfer_initial' elapsed. -## Set to -1 to disable the maximum votes cap. -VOTE_AUTOTRANSFER_MAXIMUM 4 - -## Policy for what people remember after dying and being brought back to life -BLACKOUTPOLICY You remember nothing after you've blacked out and you do not remember who or what events killed you, however, you can have faint recollection of what led up to it. - -## Combat indicator, comment out to disable it -COMBAT_INDICATOR - -## Role ID for the new game discord ping -GAME_ALERT_ROLE_ID - -## Channel that either has reaction roles or instruction on assigning roles -ROLE_ASSIGN_CHANNEL_ID - -##Rockplanet Ruins Budget -ROCKPLANET_BUDGET 60 - -## Splits the rounds threat budget between midrounds and roundstart -#SPLIT_THREAT_BUDGET - -##Player controlled mob spawn text -PC_MOB_TEXT As a player controlled mob you are expected to play the role to the best of your ability. This means if you're an animal, act like one. You shouldn't display much intelligence if any. This also means if you're engaging in combat you should refrain from mercing people fully. Play not to win but to create a challenge. You're there to replace AI, make others enjoy the situation as well. If your simple mob is not above simple or mute intelligence, using structures such as welding tanks/canisters/boxes to hinder your opponent is entirely forbidden. Do not do this. - -## Toggles various checks for russian texts formation, as an example - autohiss. Useful only for russian servers -#RUSSIAN_TEXT_FORMATION - -## Toggles off SSDecay when uncommented, HIGHLY recommended for map test-merges, to avoid giving it a bad first impression. -SSDECAY_DISABLED - -## Toggles off SSDecay nests when uncommented, HIGHLY recommended for map test-merges, to avoid giving it a bad first impression. -## If SSDECAY_DISABLED is uncommented, then it does not matter if this is commented out since this config requires SSDecay to be enabled first. -SSDECAY_DISABLE_NESTS - -## Disables any ERP preferences for codebases that don't want it. -#DISABLE_ERP_PREFERENCES -#DISABLE_LEWD_ITEMS -#ERP_EMOTES_TO_DISABLE cum - -## Disables mismatched parts for codebases that don't want it. -#DISABLE_MISMATCHED_PARTS - -## Do we allow consecutive catastrophic events? -ALLOW_CONSECUTIVE_CATASTROPIC_EVENTS - -## What is the most amount of time the next event can run? -EVENT_FREQUENCY_UPPER 8400 - -## What is the least amount of time the next event can run? -EVENT_FREQUENCY_LOWER 4200 - -## Ticket ping frequency. Set 0 for disable that subsystem. 3000 - 5 minutes, 600 - 1 minute. -TICKET_PING_FREQUENCY 0 - -## Minimum alert level for pods to actually evacuate people -MINIMUM_ALERT_FOR_PODS 0 - -## Delay between newscasters making lore announcements, default is 18000 (30 minutes) -LORECASTER_DELAY 18000 - -## If uncommented, suicide will be disabled. -# DISABLE_SUICIDE - -## The link to the policy wiki page for primitive catgirls -ICECATS_POLICY_LINK "https://wiki.skyrat13.tk/w/index.php/Ghost_Role_policy#Icewalkers" - -## What is the maximum size (in percents) we want people to be able to use with the size collar? -SIZE_COLLAR_MAXIMUM 400 -## What is the minimum size (in percents) we want people to be able to use with the size collar? -SIZE_COLLAR_MINIMUM 15 - -## Uncomment to enable minimum flavor text requirements for joining the round -#MIN_FLAVOR_TEXT - -## Minimum flavor text number needed to enter the game -## YOU MUST HAVE MIN_FLAVOR_TEXT ENABLED FOR THIS TO WORK. -## Don't ever set this to 0, just disable MIN_FLAVOR_TEXT -#FLAVOR_TEXT_CHARACTER_REQUIREMENT 150 - -## Comment these out if you want to use the SQL-based player rank system, the -## legacy system uses the .txt files in the data folder instead. -## You need to set up your database to use the SQL-based system. -## These flags are automatically enabled if SQL_ENABLED isn't. -DONATOR_LEGACY_SYSTEM -MENTOR_LEGACY_SYSTEM -VETERAN_LEGACY_SYSTEM - -## How much time arrivals shuttle should stay at station after its engines recharged before returning to interlink. In deciseconds. 150 - 15 seconds. 0 - disables autoreturn. -ARRIVALS_WAIT 150 diff --git a/config/skyrat/veteran_players.txt b/config/skyrat/veteran_players.txt deleted file mode 100644 index 47df136cf7aab0..00000000000000 --- a/config/skyrat/veteran_players.txt +++ /dev/null @@ -1 +0,0 @@ -Gandalf2k15 diff --git a/config/spaceruinblacklist.txt b/config/spaceruinblacklist.txt index 6ac8f8f08c266c..bf149ca5640778 100644 --- a/config/spaceruinblacklist.txt +++ b/config/spaceruinblacklist.txt @@ -24,7 +24,6 @@ #_maps/RandomRuins/SpaceRuins/crashedclownship.dmm #_maps/RandomRuins/SpaceRuins/crashedship.dmm #_maps/RandomRuins/SpaceRuins/dangerous_research.dmm -#_maps/RandomRuins/SpaceRuins/dangerous_research.dmm #_maps/RandomRuins/SpaceRuins/deepstorage.dmm #_maps/RandomRuins/SpaceRuins/derelict_construction.dmm #_maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm @@ -41,6 +40,10 @@ #_maps/RandomRuins/SpaceRuins/fasttravel.dmm #_maps/RandomRuins/SpaceRuins/forgottenship.dmm #_maps/RandomRuins/SpaceRuins/forgottenship.dmm +#_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm +#_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm +#_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm +#_maps/RandomRuins/SpaceRuins/garbagetruck4.dmm #_maps/RandomRuins/SpaceRuins/gondolaasteroid.dmm #_maps/RandomRuins/SpaceRuins/hellfactory.dmm #_maps/RandomRuins/SpaceRuins/hellfactory.dmm @@ -85,6 +88,5 @@ #_maps/RandomRuins/SpaceRuins/waystation.dmm #_maps/RandomRuins/SpaceRuins/whiteshipdock.dmm #_maps/RandomRuins/SpaceRuins/whiteshipruin_box.dmm -#modular_skyrat/modules/mapping/_maps/RandomRuins/SpaceRuins/forgottenship_skyrat.dmm -#modular_skyrat/modules/mapping/_maps/RandomRuins/SpaceRuins/shuttle8532.dmm -#modular_skyrat/modules/ruins/maps/space/dangerous_research.dmm +#_maps/RandomRuins/SpaceRuins/nova/drones_derelict.dmm +#_maps/RandomRuins/SpaceRuins/shuttle8532.dmm diff --git a/config/whitelist.txt b/config/whitelist.txt index 59270487381249..870b7cc89c6284 100644 --- a/config/whitelist.txt +++ b/config/whitelist.txt @@ -2,8 +2,3 @@ # Basically, a list of ckeys who make it past user connection # # Case is not important for ckey. # ############################################################################################### -#Optimumtact -#kevinz000 -#Iamgoofball -#Rshoe95 -#That one penguin who became an admin diff --git a/cutter_templates/bitmask/cardinal_32x32.toml b/cutter_templates/bitmask/cardinal_32x32.toml new file mode 100644 index 00000000000000..9d3d4097e78ce1 --- /dev/null +++ b/cutter_templates/bitmask/cardinal_32x32.toml @@ -0,0 +1,36 @@ +mode = "BitmaskSlice" + +# Don't try and put directions in our icon states +produce_dirs = false +# We smooth only with our cardinal neighbors, not the ones on the diagonal +smooth_diagonally = false + +# Take as input a set of 32x32 blocks +[icon_size] +x = 32 +y = 32 + +# Output our stuff at the same level as it's input +[output_icon_pos] +x = 0 +y = 0 + +# And at the same width/height too +[output_icon_size] +x = 32 +y = 32 + +# This defines where in our list of blocks we draw each "direction" from +# no connections, east/west, north/south, and north/south/east/west +# the 0-3 is the block to read from, starting at 0 +[positions] +convex = 0 +horizontal = 1 +vertical = 2 +concave = 3 + +# When we cut up our blockls, we're cutting "around" a central point +# We typically want to cut around the center, so let's do that here +[cut_pos] +x = 16 +y = 16 diff --git a/cutter_templates/bitmask/diagonal_32x32.toml b/cutter_templates/bitmask/diagonal_32x32.toml new file mode 100644 index 00000000000000..1e80e3627e920b --- /dev/null +++ b/cutter_templates/bitmask/diagonal_32x32.toml @@ -0,0 +1,12 @@ +template = "bitmask/cardinal_32x32" + +# We're diagonal +smooth_diagonally = true + +# And because of that we need a state for all directions +[positions] +convex = 0 +vertical = 1 +horizontal = 2 +concave = 3 +flat = 4 diff --git a/dependencies.sh b/dependencies.sh index b24b85d55b2399..b0d457a9424d06 100644 --- a/dependencies.sh +++ b/dependencies.sh @@ -4,18 +4,18 @@ #Final authority on what's required to fully build the project # byond version -export BYOND_MAJOR=514 -export BYOND_MINOR=1588 +export BYOND_MAJOR=515 +export BYOND_MINOR=1626 #rust_g git tag -export RUST_G_VERSION=1.2.0 +export RUST_G_VERSION=3.0.0 #node version export NODE_VERSION=14 export NODE_VERSION_PRECISE=14.16.1 # SpacemanDMM git tag -export SPACEMAN_DMM_VERSION=suite-1.7.3 +export SPACEMAN_DMM_VERSION=suite-1.8 # Python version for mapmerge and other tools export PYTHON_VERSION=3.9.0 @@ -25,3 +25,9 @@ export AUXLUA_REPO=tgstation/auxlua #auxlua git tag export AUXLUA_VERSION=1.4.1 + +#hypnagogic repo +export CUTTER_REPO=actioninja/hypnagogic + +#hypnagogic git tag +export CUTTER_VERSION=v3.0.1 diff --git a/html/changelogs/AutoChangeLog-pr-24654.yml b/html/changelogs/AutoChangeLog-pr-24654.yml deleted file mode 100644 index abd90efbe65b9c..00000000000000 --- a/html/changelogs/AutoChangeLog-pr-24654.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - refactor: "Pirate NPCs now use the basic mob framework. They'll be a little smarter in combat, and if you're wearing your ID they'll siphon your bank account with every melee attack! Beware! Please report any bugs." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-24655.yml b/html/changelogs/AutoChangeLog-pr-24655.yml deleted file mode 100644 index c26a80d05c6e3f..00000000000000 --- a/html/changelogs/AutoChangeLog-pr-24655.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - refactor: "Wraith constructs have been converted to the basic mob framework. NPC wraiths are now extra cruel and will attack the lowest-health mob they can see at any given time. Make sure this isn't you! Please report any bugs." - - bugfix: "Artificers and juggernauts no longer attack significantly more slowly than intended." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-24659.yml b/html/changelogs/AutoChangeLog-pr-24659.yml deleted file mode 100644 index 9b207c5c8a814f..00000000000000 --- a/html/changelogs/AutoChangeLog-pr-24659.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - rscadd: "The Ethereal Vintner's Union has been \"convinced\" to trade their signature Lanternfruit with Nanotrasen!" - - image: "Sprites for the aforementioned fruit." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-24661.yml b/html/changelogs/AutoChangeLog-pr-24661.yml deleted file mode 100644 index f889b548881373..00000000000000 --- a/html/changelogs/AutoChangeLog-pr-24661.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "honkpocket" -delete-after: True -changes: - - code_imp: "Changes the syndicate neck gaiter to not have sec-hailer sfx and TTS filtering" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-24662.yml b/html/changelogs/AutoChangeLog-pr-24662.yml deleted file mode 100644 index efdfc7f1d1b194..00000000000000 --- a/html/changelogs/AutoChangeLog-pr-24662.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - rscadd: "living floor, living flesh, and other stuff for the bioresearch outpost ruin" - - rscadd: "bioresearch outpost ruin" - - bugfix: "you may not defeat indestructible grilles and windows with mere tools" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-24663.yml b/html/changelogs/AutoChangeLog-pr-24663.yml deleted file mode 100644 index b41a6c7edd9470..00000000000000 --- a/html/changelogs/AutoChangeLog-pr-24663.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "honkpocket" -delete-after: True -changes: - - code_imp: "The xeno hybrid tongue now actually looks and sounds like the alien tongue" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-24664.yml b/html/changelogs/AutoChangeLog-pr-24664.yml deleted file mode 100644 index 19a8a9636e93bc..00000000000000 --- a/html/changelogs/AutoChangeLog-pr-24664.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "honkpocket" -delete-after: True -changes: - - bugfix: "Removes the dixel from the new medium and long skirts" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-24667.yml b/html/changelogs/AutoChangeLog-pr-24667.yml deleted file mode 100644 index c97bfca177e6d6..00000000000000 --- a/html/changelogs/AutoChangeLog-pr-24667.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "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." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-24669.yml b/html/changelogs/AutoChangeLog-pr-24669.yml deleted file mode 100644 index 516e1cbaad6511..00000000000000 --- a/html/changelogs/AutoChangeLog-pr-24669.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "Obsessed's moodlets (Both positive and negative) go away when the trauma is cured or the antag status is removed." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-24670.yml b/html/changelogs/AutoChangeLog-pr-24670.yml deleted file mode 100644 index 37e17b518d5f66..00000000000000 --- a/html/changelogs/AutoChangeLog-pr-24670.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - rscadd: "Added a new ruin to Ice Box Station, Lizard Gas Station" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-24671.yml b/html/changelogs/AutoChangeLog-pr-24671.yml deleted file mode 100644 index 6eee7bd1f805e8..00000000000000 --- a/html/changelogs/AutoChangeLog-pr-24671.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Data_" -delete-after: True -changes: - - bugfix: "The detective's curtains can be closed again in Birdshot." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-24672.yml b/html/changelogs/AutoChangeLog-pr-24672.yml deleted file mode 100644 index 57b84bdc9b8fad..00000000000000 --- a/html/changelogs/AutoChangeLog-pr-24672.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "Cargo will remove/cancel orders from its cart if that order exceeds the available budget (both private or cargo) and the player cannot cancel this order manually. All order costs are rounded up to integer values" - - bugfix: "Galactic material market will deny appending stacks to your existing order if it exceeds the available (private or cargo depending on the mode of ordering) budget & if it exceeds the available materials on the market. Galactic material market UI is overall improved." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-24673.yml b/html/changelogs/AutoChangeLog-pr-24673.yml deleted file mode 100644 index 60ceb2bbb8ec1a..00000000000000 --- a/html/changelogs/AutoChangeLog-pr-24673.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - refactor: "Traders are basic mobs now. Please alert us of any strange behaviours!" - - code_imp: "If there is only one option, radial lists will autopick it. This behaviour can be turned off via a new argument." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-24674.yml b/html/changelogs/AutoChangeLog-pr-24674.yml deleted file mode 100644 index f502346e1fd1f2..00000000000000 --- a/html/changelogs/AutoChangeLog-pr-24674.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "NotDhu" -delete-after: True -changes: - - bugfix: "Blueshift's white ship docking port should now work correctly." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-24678.yml b/html/changelogs/AutoChangeLog-pr-24678.yml deleted file mode 100644 index 8da489f97cd9f3..00000000000000 --- a/html/changelogs/AutoChangeLog-pr-24678.yml +++ /dev/null @@ -1,9 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - rscadd: "Added Abnormal Eggs" - - rscadd: "Added Two new spiders" - - rscdel: "Some Tarantula abilities" - - balance: "Spiders speed are now connected to health" - - balance: "Spiders now take more brute damage" - - balance: "All egg laying now has a cooldown" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-24682.yml b/html/changelogs/AutoChangeLog-pr-24682.yml deleted file mode 100644 index 2512bc96a49877..00000000000000 --- a/html/changelogs/AutoChangeLog-pr-24682.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "Paraplegics can now enter netpods." - - bugfix: "Fixes an exploit caused by teleporting out of a netpod." - - bugfix: "Outfit selection at netpods shouldn't give armor bonuses any longer." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-398.yml b/html/changelogs/AutoChangeLog-pr-398.yml new file mode 100644 index 00000000000000..7147dafa5f57ff --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-398.yml @@ -0,0 +1,5 @@ +author: "aKromatopzia" +delete-after: True +changes: + - rscadd: "Teshari cybernetics" + - image: "sprites for teshari cybernetics" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-463.yml b/html/changelogs/AutoChangeLog-pr-463.yml new file mode 100644 index 00000000000000..378e8b662fc526 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-463.yml @@ -0,0 +1,4 @@ +author: "tf4, orion" +delete-after: True +changes: + - rscadd: "Added cow print underwear." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-477.yml b/html/changelogs/AutoChangeLog-pr-477.yml new file mode 100644 index 00000000000000..55c2e0bc1cbab3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-477.yml @@ -0,0 +1,4 @@ +author: "honkpocket" +delete-after: True +changes: + - bugfix: "Removes unintended structures cluttering in Blueshift's space" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-489.yml b/html/changelogs/AutoChangeLog-pr-489.yml new file mode 100644 index 00000000000000..1074b69b470131 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-489.yml @@ -0,0 +1,4 @@ +author: "NovaBot13" +delete-after: True +changes: + - image: "the plumbing chemical splitter no longer has a wrongly rotated direction" \ No newline at end of file diff --git a/html/changelogs/archive/2009-01.yml b/html/changelogs/archive/2009-01.yml index 74585395e4aec7..a4272cf94b2267 100644 --- a/html/changelogs/archive/2009-01.yml +++ b/html/changelogs/archive/2009-01.yml @@ -14,11 +14,11 @@ profiles that weren't used again. 2009-01-07: /tg/station ss13 team: - - unknown: Syndicate Uplink has been changed up, allowing traitor more freedom in + - unknown: Symphionia Uplink has been changed up, allowing traitor more freedom in his ability to be... traitorus. - - unknown: Syndicate Uplink can now spawn a ammo-357, syndicate card, energy sword, + - unknown: Symphionia Uplink can now spawn a ammo-357, syndicate card, energy sword, or timer bomb. - - unknown: Fixed an issue where Syndicate Uplink looked different than a normal + - unknown: Fixed an issue where Symphionia Uplink looked different than a normal radio. 2009-01-10: /tg/station ss13 team: @@ -30,7 +30,7 @@ - unknown: The nuke being detonated in Nuclear Emergency should now properly end the game. - unknown: Spacesuits now cause you to move slower when not in space. - - unknown: Syndicate in Nuclear Emergency now have syndicate-themed spacesuits. + - unknown: Symphionia in Nuclear Emergency now have syndicate-themed spacesuits. - unknown: Blob mode should properly end now. 2009-01-29: /tg/station ss13 team: diff --git a/html/changelogs/archive/2009-08.yml b/html/changelogs/archive/2009-08.yml index 57578fc8726938..c040b51dfdd7f5 100644 --- a/html/changelogs/archive/2009-08.yml +++ b/html/changelogs/archive/2009-08.yml @@ -1,6 +1,6 @@ 2009-08-29: /tg/station ss13 team: - - unknown: "\n \tAI laws update: Nanotrasen has updated its AI\ + - unknown: "\n \tAI laws update: Symphionia has updated its AI\ \ laws to better reflect how they wish AIs to \n operate their stations.\n\ \ " - unknown: "\n \tTraitor item change: E-mag renamed to Cryptographic\ diff --git a/html/changelogs/archive/2009-10.yml b/html/changelogs/archive/2009-10.yml index 028d6fcff0b6a3..c2c056d03fdf99 100644 --- a/html/changelogs/archive/2009-10.yml +++ b/html/changelogs/archive/2009-10.yml @@ -29,5 +29,5 @@ \ the detonation of your own PDA.\n " 2009-10-25: /tg/station ss13 team: - - unknown: "\n Randomized naming: Names for Central Command\ - \ and Syndicate are now randomized.\n " + - unknown: "\n Randomized naming: Names for Conglomeration of Colonists\ + \ and Symphionia are now randomized.\n " diff --git a/html/changelogs/archive/2010-07.yml b/html/changelogs/archive/2010-07.yml index e760f28e8cd5df..832b7e82ed966d 100644 --- a/html/changelogs/archive/2010-07.yml +++ b/html/changelogs/archive/2010-07.yml @@ -29,6 +29,6 @@ - unknown: Singularity Engine Added Oh God we're all going to die (All credit on this one goes to Mport2004) - unknown: '''Purge'' AI module added - purges ALL laws (except for law 0). Will - probably change this to a Syndicate only item' + probably change this to a Symphionia only item' - unknown: Cyborgs now spawn with a power cell. Should prevent stupid cyborg deaths (and also pave the way for starting as a cyborg once more bugs are fixed) diff --git a/html/changelogs/archive/2011-04.yml b/html/changelogs/archive/2011-04.yml index 494297bdfe5d0e..3d20a19c5be020 100644 --- a/html/changelogs/archive/2011-04.yml +++ b/html/changelogs/archive/2011-04.yml @@ -71,7 +71,7 @@ changelog entries more understandable! - unknown: Brobot merged with Service Borg with a Rapid Service Fabricator. - unknown: Arcade machine prizes look and sound realistic once again. - - unknown: 'New arcade toy: Syndicate space suit costume, can hold arcade toys in + - unknown: 'New arcade toy: Symphionia space suit costume, can hold arcade toys in suit storage.' - unknown: Empty cap gun loaders can be recycled in an autolathe. - unknown: Seizure man has laying down sprites now. Update to wizard den. diff --git a/html/changelogs/archive/2011-07.yml b/html/changelogs/archive/2011-07.yml index e3c73bad1effdd..2035f94363c291 100644 --- a/html/changelogs/archive/2011-07.yml +++ b/html/changelogs/archive/2011-07.yml @@ -16,7 +16,7 @@ non-sentient race of jellyfish-like organisms that float in the air and feed on the life energy of other organisms. While most Metroids have never shown signs of self-awareness, they do exhibit signs of basic logic and reasoning - skills as well as very sophisticated perception. Nanotrasen has shipped two + skills as well as very sophisticated perception. Symphionia has shipped two baby Metroids for the xenobiology department. They should be handled with the utmost care - they are some of the deadliest beings in the known universe!' - unknown: 'R&D gets a new toy: the freeze gun. Despite popular belief, this @@ -51,7 +51,7 @@ Microwave: - unknown: 'Monkey boxes:' - unknown: Contains a score of monkey cubes, which you apply water to create monkies. - Nanotrasen provides only the finest technology! + Symphionia provides only the finest technology! - unknown: You can order monkey crates from the cargo bay. They contain monkey boxes. - unknown: Changed the amount of labels labelers have to 30. 10 was too low and 30 should not be too griefy. @@ -79,7 +79,7 @@ - unknown: Added egg-smashing and tomato-smashing decals. Superxpdude updated: - unknown: Added in the Submachine Gun to R&D. - - unknown: Syndicate agents now have Mini-Uzis. + - unknown: Symphionia agents now have Mini-Uzis. - unknown: Added an exosuit recharged to the mining station. - unknown: New labcoats for scientists, virologists, chemists, and genetecists. - unknown: Moved the vault and added a bridge meeting room next to the HoP's office. diff --git a/html/changelogs/archive/2011-12.yml b/html/changelogs/archive/2011-12.yml index b463aa6b3096f4..8ab2271a9a70dd 100644 --- a/html/changelogs/archive/2011-12.yml +++ b/html/changelogs/archive/2011-12.yml @@ -70,7 +70,7 @@ at round start or late join. 2011-12-18: Carnwennan: - - unknown: Thanks to the wonders of modern technology and the Nanotrasen steel press + - unknown: Thanks to the wonders of modern technology and the Symphionia steel press Ian's head has been shaped to fit even more silly hats. The taxpayers will be pleased. Doohl: diff --git a/html/changelogs/archive/2012-01.yml b/html/changelogs/archive/2012-01.yml index 4114d915d2ef4e..9f10db766778fa 100644 --- a/html/changelogs/archive/2012-01.yml +++ b/html/changelogs/archive/2012-01.yml @@ -23,7 +23,7 @@ - unknown: Dragging your PDA onto your person from your inventory will bring up the PDA screen. - unknown: You can now send emergancy messages to Centcomm (Or, with some.. tampering, - the Syndicate.) via a comms console. (This occurs in much the fashion as a + the Symphionia.) via a comms console. (This occurs in much the fashion as a prayer.) 2012-01-08: Agouri: @@ -70,7 +70,7 @@ will fly off into space to blow up the comm satellite and shut down communications. 2012-01-17: Doohl: - - unknown: Syndicate shuttle now starts with a All-In-One telecommunication machine, + - unknown: Symphionia shuttle now starts with a All-In-One telecommunication machine, which acts as a mini-network for the syndie channel. It intercepts all station radio activity, too, how cool is that? 2012-01-19: diff --git a/html/changelogs/archive/2012-02.yml b/html/changelogs/archive/2012-02.yml index 1c3a28247cc4b3..09819d7fba512a 100644 --- a/html/changelogs/archive/2012-02.yml +++ b/html/changelogs/archive/2012-02.yml @@ -7,7 +7,7 @@ changes there easier. 2012-02-07: Giacom: - - rscadd: 'The return of the Nanotrasen Scripting Language! (NTSL) If you haven''t + - rscadd: 'The return of the Symphionia Scripting Language! (NTSL) If you haven''t heard of NTSL, it is a scripting language within a game for telecomms. Yes, you can create scripts to interact with the radio! For more information, head here: http://wiki.nanotrasen.com/index.php?title=NT_Script But before you do, @@ -145,7 +145,7 @@ Doohl: - rscadd: Telecommunications has been refined, with many new features and modules implemented. - - experiment: NTSL (Nanotrasen Scripting Language) is ONLINE! This is a brand + - experiment: NTSL (Symphionia Scripting Language) is ONLINE! This is a brand new, fully operational scripting language embedded within SS13 itself. The intended purpose is to eventually expand this scripting language to Robotics and possibly other jobs, but for now you may play with the TCS (Traffic Control Systems) diff --git a/html/changelogs/archive/2013-04.yml b/html/changelogs/archive/2013-04.yml index 13522927bcb11d..fa9129f4e02834 100644 --- a/html/changelogs/archive/2013-04.yml +++ b/html/changelogs/archive/2013-04.yml @@ -62,11 +62,11 @@ <3' 2013-04-26: Ikarrus: - - rscadd: Commanding Officers of Nanotrasen Stations have been issued a box of medals + - rscadd: Commanding Officers of Symphionia Stations have been issued a box of medals to be awarded to crew members who display exemplary conduct. 2013-04-30: Ikarrus: - rscadd: Researchers have discovered that glass shards are, in fact, dangerous due to their typically sharp nature. Our internal Safety Committee advises that - glass shards only be handled while using Nanotrasen-approved hand-protective + glass shards only be handled while using Symphionia-approved hand-protective equipment. diff --git a/html/changelogs/archive/2013-05.yml b/html/changelogs/archive/2013-05.yml index 440fd0a74bf3b0..3919bda04bd144 100644 --- a/html/changelogs/archive/2013-05.yml +++ b/html/changelogs/archive/2013-05.yml @@ -22,7 +22,7 @@ usual way. 2013-05-14: Ikarrus: - - tweak: "Nanotrasen seeks to further cut operating costs on experimental cyborg\ + - tweak: "Symphionia seeks to further cut operating costs on experimental cyborg\ \ units. \n\t\t
    -Cyborg chassis will now be made from a cheaper but less\ \ durable design. \n\t\t
    -RCDs found on engineering models have been replaced\ \ with a smaller model to make room for a metal rods module.\n\t\t
    -Cyborg\ diff --git a/html/changelogs/archive/2013-06.yml b/html/changelogs/archive/2013-06.yml index 93cfb2c9b46c56..2a942414186daf 100644 --- a/html/changelogs/archive/2013-06.yml +++ b/html/changelogs/archive/2013-06.yml @@ -31,7 +31,7 @@ don't have to cycle through all the levels to get rid of a [Low]. 2013-06-27: Ikarrus: - - rscadd: Nanotrasen R&D released a new firmware patch for their station AIs. + - rscadd: Symphionia R&D released a new firmware patch for their station AIs. Included among the changes is the new ability for AIs to interact with fire doors. R&D officials state they feel giving station AIs more influence could only lead to good things. diff --git a/html/changelogs/archive/2013-08.yml b/html/changelogs/archive/2013-08.yml index c5d1629cbfe147..06ac479696bada 100644 --- a/html/changelogs/archive/2013-08.yml +++ b/html/changelogs/archive/2013-08.yml @@ -1,15 +1,15 @@ 2013-08-04: Giacom: - - rscadd: Nanotrasen has re-arranged the station blueprint designs to have non-essential + - rscadd: Symphionia has re-arranged the station blueprint designs to have non-essential APCs moved to the maintenance hallways. Non-essential rooms that aren't connected to a maintenance hallway will have their APC remain. Station Engineers will - now have easy access to a room's APC without needing access themselves. Nanotrasen + now have easy access to a room's APC without needing access themselves. Symphionia also wishes to remind you that you should not sabotage these easy to access APCs to cause distractions or to lockdown someone in a location. Thank you for reading. 2013-08-05: Kaze Espada: - - rscadd: Nanotrasen has recentely had to change its provider of alcoholic beverages + - rscadd: Symphionia has recentely had to change its provider of alcoholic beverages to a provider of lower quality. Cases of the old ailment known as alcohol poisoning have returned. Bar goers are to be weary of this new condition. 2013-08-06: diff --git a/html/changelogs/archive/2013-09.yml b/html/changelogs/archive/2013-09.yml index 13356bbc18a808..9d59c9fb644078 100644 --- a/html/changelogs/archive/2013-09.yml +++ b/html/changelogs/archive/2013-09.yml @@ -8,7 +8,7 @@ when they talk.' 2013-09-03: Cael_Aislinn: - - rscadd: 'Terbs Fun Week Day 5: Chef gets a Nanotrasen-issued icecream machine + - rscadd: 'Terbs Fun Week Day 5: Chef gets a Symphionia-issued icecream machine with four pre-approved icecream flavours and two official cone types.' 2013-09-12: AndroidSFV: @@ -17,7 +17,7 @@ \ pictures on a newscaster, and print them at a photocopier.\n\t" 2013-09-13: JJRcop: - - rscadd: We at Nanotrasen would like to assure you that we know the pain of waiting + - rscadd: We at Symphionia would like to assure you that we know the pain of waiting five minutes for the emergency shuttle to be dispatched in a high-alert situation due to our confirmation-of-distress policy. Therefore, we have amended our confirmation-of-distress policy so that, in the event of a red alert, the distress confirmation period @@ -62,7 +62,7 @@ your submissions here. 2013-09-26: Cheridan: - - rscadd: "Nanotrasen Anomaly Primer:
    \n\t\tUnstable anomalies have been\ + - rscadd: "Symphionia Anomaly Primer:
    \n\t\tUnstable anomalies have been\ \ spotted in your region of space. These anomalies can be hazardous and destructive,\ \ though our initial encounters with these space oddities has discovered a method\ \ of neutralization. Method follows.
    \n\t\t

    Step 1. Upon confirmation\ @@ -84,7 +84,7 @@ you more flammable. Water makes you less flammable. 2013-09-29: RobRichards: - - rscadd: 'Nanotrasen Cyborg Upgrades:
    + - rscadd: 'Symphionia Cyborg Upgrades:
    Standard issue Engineering cyborgs now come equipped with replacement floor tiles which they can replenish at recharge stations.' diff --git a/html/changelogs/archive/2013-11.yml b/html/changelogs/archive/2013-11.yml index fca7c8f21fa72f..fc8ee032c73c4e 100644 --- a/html/changelogs/archive/2013-11.yml +++ b/html/changelogs/archive/2013-11.yml @@ -4,8 +4,8 @@ dragged, if it wants to. 2013-11-27: RobRichards: - - rscadd: Nanotrasen surgeons are now certified to perform Limb replacements, The - robotic parts used in construction of Nanotrasen Cyborgs are the only parts + - rscadd: Symphionia surgeons are now certified to perform Limb replacements, The + robotic parts used in construction of Symphionia Cyborgs are the only parts authorized for crew augmentation, these replacement limbs can be repaired with standard welding tools and cables. 2013-11-28: diff --git a/html/changelogs/archive/2014-01.yml b/html/changelogs/archive/2014-01.yml index ef7ac76924c714..edac506c2cf4d6 100644 --- a/html/changelogs/archive/2014-01.yml +++ b/html/changelogs/archive/2014-01.yml @@ -57,17 +57,17 @@ - rscadd: The new nuke toy can now be found in your local arcade machine. 2014-01-12: VistaPOWA: - - rscadd: Added Syndicate Cyborgs. + - rscadd: Added Symphionia Cyborgs. - rscadd: They can be ordered for 25 telecrystals by Nuclear Operatives. A ghost / observer with "Be Operative" ticked in their game options will be chosen to control it. - rscadd: 'Their loadout is: Crowbar, Flash, Emag, Esword, Ebow, Laser Rifle. Each weapon costs 100 charge to fire, except the Esword, which has a 500 charge hitcost. Each borg is equipped with a 25k cell by default.' - - rscadd: Syndicate borgs can hear the binary channel, but they won't show up on + - rscadd: Symphionia borgs can hear the binary channel, but they won't show up on the Robotics Control computer or be visible to the AI. Their lawset is the standard emag one. - - rscadd: Added two cyborg recharging stations to the Syndicate Shuttle. + - rscadd: Added two cyborg recharging stations to the Symphionia Shuttle. 2014-01-14: SirBayer: - experiment: Armor now reduces damage by the protection percentage, instead of @@ -124,10 +124,10 @@ removal, slice tables and smash computers. 2014-01-26: Balrog: - - rscadd: Syndicate Playing Cards can now be found on the Syndicate Mothership and + - rscadd: Symphionia Playing Cards can now be found on the Symphionia Mothership and purchased from uplinks for 1 telecrystal. - - rscadd: Syndicate Playing Cards are lethal weapons both in melee and when thrown, - but make the user's true allegiance to the Syndicate obvious. + - rscadd: Symphionia Playing Cards are lethal weapons both in melee and when thrown, + but make the user's true allegiance to the Symphionia obvious. - imageadd: Sprites are courtesy of Nienhaus. 2014-01-28: Demas: diff --git a/html/changelogs/archive/2014-03.yml b/html/changelogs/archive/2014-03.yml index b3e51d632c5c9b..2add85d40c834c 100644 --- a/html/changelogs/archive/2014-03.yml +++ b/html/changelogs/archive/2014-03.yml @@ -46,7 +46,7 @@ - bugfix: Cameras finally capture the direction you are facing. 2014-03-14: Ikarrus and Nienhaus: - - imageadd: Nanotrasen Corporate announced a revised dress codes primarily affecting + - imageadd: Symphionia Conglomeration announced a revised dress codes primarily affecting senior station officers. A new uniform for Heads of Personnel will be shipped out to all NT Research stations. 2014-03-15: @@ -65,9 +65,9 @@ of 5. 2014-03-18: Ikarrus: - - rscadd: NT R&D; releases AI Patch version 2553.03.18, allowing all Nanotrasen + - rscadd: NT R&D; releases AI Patch version 2553.03.18, allowing all Symphionia AIs to override the access restrictions on any airlock in case of emergency. - Nanotrasen airlocks have been outfitted with new amber warning lights that will + Symphionia airlocks have been outfitted with new amber warning lights that will flash while the override is active. Should maintenance teams need to restore an airlock's restrictions without using the AI, pulsing the airlock's ID Scanner wire will reset the override. @@ -86,7 +86,7 @@ Please report any issues right away! 2014-03-25: Ikarrus: - - tweak: "A security review committee has approved an update to all Nanotrasen airlocks\ + - tweak: "A security review committee has approved an update to all Symphionia airlocks\ \ to better resist cryptographic attacks by the enemy.\n\t\t\t

    *New\ \ internal wiring will be able to withstand attacks, and panel wires will no\ \ longer be left unusable after an attack.\n\t\t\t
    *Welding tools will now\ diff --git a/html/changelogs/archive/2014-04.yml b/html/changelogs/archive/2014-04.yml index 214295f503c7d2..64514edafd9529 100644 --- a/html/changelogs/archive/2014-04.yml +++ b/html/changelogs/archive/2014-04.yml @@ -52,7 +52,7 @@ You can find a SecLite™ inside your security belt or you can dispense one from the security vending machine. Ikarrus: - - wip: Nanotrasen Construction division is pleased to announce the unveiling + - wip: Symphionia Construction division is pleased to announce the unveiling of our brand now state-of-the-art Space Station 13 v2.1.3! - rscadd: -Scaffolding used during construction has been repurposed as an expanded maintenance around the station. @@ -81,10 +81,10 @@ times over the course of a simple work shift, Centcom will attempt to trace the signal origin and pinpoint its source for station authorities. Steelpoint: - - rscadd: "Thanks to Nanotrasen's Construction division, the brig has recieved a\ + - rscadd: "Thanks to Symphionia's Construction division, the brig has recieved a\ \ overhaul in its design, to increase ease of movement, including an addition\ \ of a \"prisioner release room\" and a insanity ward.\n\t\t" - - tweak: Furthing concerns among commentators, Nanotrasen has shipped out additional + - tweak: Furthing concerns among commentators, Symphionia has shipped out additional security equipment to station armories, including Riot Shotguns, tear gas grenades, additional securitron units and military grade Ion Guns. - rscadd: "JaniCo have released a new unique product called the JaniBelt. Capable\ @@ -103,7 +103,7 @@ not included 2014-04-20: Gun Hog: - - rscadd: NanoTrasen Emergency Alerts System 4.20 has been released! + - rscadd: Symphionia Emergency Alerts System 4.20 has been released! - rscadd: In the unfortunate event of any nuclear device being armed, the station will enter Code Delta Alert. - rscadd: Should the nuclear explosive be disarmed, the station shall automatically @@ -137,12 +137,12 @@ option, the default is 20 minutes. Gun Hog: - rscadd: Certain Enemies of the Corporation have discovered a critical exploit - in the firmware of several NanoTrasen robots that could prevent the safe shutdown + in the firmware of several Symphionia robots that could prevent the safe shutdown of units corrupted by illegally modified ID cards, dubbed "cryptographic sequencers". - - rscadd: NanoTrasen requires more research into this exploit, this we have issued - a patch for AI and Cyborg software to simulate this malfunction. All NanoTrasen + - rscadd: Symphionia requires more research into this exploit, this we have issued + a patch for AI and Cyborg software to simulate this malfunction. All Symphionia AI units are advised to only allow testing in a safe and contained environment. The robot can safely be reset at any time. - experiment: Unfortunately, a robot corrupted by a "cryptographic sequencer" still - cannot be reset by any means. NanoTrasen urges regular maintenance and care + cannot be reset by any means. Symphionia urges regular maintenance and care of all robots to reduce replacement costs. diff --git a/html/changelogs/archive/2014-05.yml b/html/changelogs/archive/2014-05.yml index b62b6ca7e86fad..0d55b7a14b742b 100644 --- a/html/changelogs/archive/2014-05.yml +++ b/html/changelogs/archive/2014-05.yml @@ -15,7 +15,7 @@ underway. 2014-05-16: Menshin: - - rscadd: 'Thanks to Nanotrasen''s Engineering division, the power wiring of the + - rscadd: 'Thanks to Symphionia''s Engineering division, the power wiring of the station has a received a complete overhaul. Here are the highlight features in CentCom report :' - tweak: 'Improved way of connecting cables! Finished is the time of "laying and diff --git a/html/changelogs/archive/2014-06.yml b/html/changelogs/archive/2014-06.yml index a98d6bad52614e..c5116685d32a6a 100644 --- a/html/changelogs/archive/2014-06.yml +++ b/html/changelogs/archive/2014-06.yml @@ -1,6 +1,6 @@ 2014-06-06: Gun Hog: - - rscadd: Nanotrasen programmers have discovered a potential exploit involving a + - rscadd: Symphionia programmers have discovered a potential exploit involving a station's door control networks. With sufficient computing power, the network can be overloaded and forced to open or bolt closed every airlock at once. - experiment: Some reports suggest that the latest firmware update to Artifical @@ -8,7 +8,7 @@ Any such reports that state that should a station's AI unit "malfunction", it may gain the ability to use this exploit to initate a full lockdown of the station. Fire locks and blast doors are also said to be affected. - - rscadd: Nanotrasen officially holds no validity to these reports. We recommend + - rscadd: Symphionia officially holds no validity to these reports. We recommend that station personnel disregard such rumors. 2014-06-11: Ikarrus: diff --git a/html/changelogs/archive/2014-07.yml b/html/changelogs/archive/2014-07.yml index 7ecba8b0c91ce1..fe1f4cb5806ba0 100644 --- a/html/changelogs/archive/2014-07.yml +++ b/html/changelogs/archive/2014-07.yml @@ -37,7 +37,7 @@ when growing them. 2014-07-07: Firecage: - - rscadd: We, of the NanoTrasen Botany Research and Developent(NTBiRD), has some + - rscadd: We, of the Symphionia Botany Research and Developent(NTBiRD), has some important announcements for the Botany staff aboard our stations. - rscadd: We have recently released a new strain of Tower Cap. It is now ensured that more planks can be gotten from a single log. diff --git a/html/changelogs/archive/2014-08.yml b/html/changelogs/archive/2014-08.yml index 8843def5d292fe..7972edd18041a4 100644 --- a/html/changelogs/archive/2014-08.yml +++ b/html/changelogs/archive/2014-08.yml @@ -53,9 +53,9 @@ 2014-08-26: Ikarrus: - rscadd: "Security forces are advised to increase scrutiny on personnel coming\ - \ into contact with AI systems. Central Intelligence suggests that Syndicate\ + \ into contact with AI systems. Central Intelligence suggests that Symphionia\ \ terrorist groups may have begun targeting our AIs for destruction.\n\t\t" - - rscadd: "For the preservation of corporate assets, Central Command would like\ + - rscadd: "For the preservation of corporate assets, Conglomeration of Colonists would like\ \ to remind all personnel that evacuating during an emergency is mandatory.\ \ We suspect that terrorist groups may be attempting to abduct marooned personnel\ \ who failed to evacuate.\n\t\t" diff --git a/html/changelogs/archive/2014-09.yml b/html/changelogs/archive/2014-09.yml index bcb8ee85cd08af..fa773602695c1c 100644 --- a/html/changelogs/archive/2014-09.yml +++ b/html/changelogs/archive/2014-09.yml @@ -15,7 +15,7 @@ \t" 2014-09-03: Ikarrus: - - tweak: Cost of Syndicate bombs increased to 6 telecrystals. + - tweak: Cost of Symphionia bombs increased to 6 telecrystals. JStheguy: - rscadd: Many new posters have been added. 2014-09-04: @@ -25,16 +25,16 @@ 2014-09-06: Ikarrus: - rscadd: "Tampered supply ordering consoles can now order dangerous devices directly\ - \ from the Syndicate for 140 points.\n\t\t" + \ from the Symphionia for 140 points.\n\t\t" - tweak: "Securitrons line units will no longer arrest individuals without IDs if\ \ their faces can still be read. \n\t\t" - tweak: "Enemy Agent ID cards have been reported to be able to interfere with the\ \ new securitron threat assessment protocols.\n\t\t" - - tweak: "The Syndicate base has been modified to only allow the leading operative\ + - tweak: "The Symphionia base has been modified to only allow the leading operative\ \ to launch the mission.\n\t" 2014-09-07: Gun Hog: - - rscadd: Nanotrasen scientists have released a Heads-Up-Display (HUD) upgrade for + - rscadd: Symphionia scientists have released a Heads-Up-Display (HUD) upgrade for all AI and Cyborg units! Cyborgs have had Medical sensors and a Security datacore integrated into their core hardware, replacing the need for a specific module. - rscadd: AI units are now able to have suit sensor or crew manifest data displayed diff --git a/html/changelogs/archive/2014-10.yml b/html/changelogs/archive/2014-10.yml index 8ebb080bd86462..2796c6ca765f7d 100644 --- a/html/changelogs/archive/2014-10.yml +++ b/html/changelogs/archive/2014-10.yml @@ -1,6 +1,6 @@ 2014-10-01: Cheridan: - - rscadd: Experienced smugglers have joined the Syndicate, adding their bag of tricks + - rscadd: Experienced smugglers have joined the Symphionia, adding their bag of tricks to its arsenal. These tricky pouches can even fit under floor plating! Ikarrus: - wip: Adds Gang War, a new game mode still in alpha development. @@ -56,7 +56,7 @@ finally reverse engineered them. Not only that, but we gave them a killer paintjob. They will be available in the uplinks of boarding parties we send out to Nanoscum stations. - - rscadd: Listen up, Marauders! The Syndicate has recently cut back funding into + - rscadd: Listen up, Marauders! The Symphionia has recently cut back funding into boarding parties. What this means is no more hi-tech fancy energy guns. We've had to roll back to using cheaper, mass-produced automatic shotguns. But in retrospect, could this possibly be a downgrade? @@ -167,7 +167,7 @@ - rscadd: There are rumours of some creative shaft miners discovering a way of augmenting APLU Ripley armour with trophy hides from goliath-type asteroid lifeforms... - tweak: Durand construction routines now require a phasic scanner module and a - super capacitor to match Nanotrasen industry standards. + super capacitor to match Symphionia industry standards. - tweak: The exosuit fire extinguisher now boasts a larger watertank, and carries a whole 1000u of water from the old 200u tank. - tweak: The exosuit plasma converter's efficiency has been vastly improved upon, diff --git a/html/changelogs/archive/2014-12.yml b/html/changelogs/archive/2014-12.yml index 0f4b2a60826eb2..3525f5781f545e 100644 --- a/html/changelogs/archive/2014-12.yml +++ b/html/changelogs/archive/2014-12.yml @@ -6,7 +6,7 @@ - tweak: Mixing blood in a beaker or taking it from a suicide victim will render the blood sample useless for replica pod cloning. GunHog: - - rscadd: Our top Nanotrasen scientists have provided improved specifications for + - rscadd: Our top Symphionia scientists have provided improved specifications for the Rapid Part Exchange Device (RPED)! The RPED can now contain up to 50 machine components, and will display identical items in groups when using its inventory interface. @@ -15,17 +15,17 @@ assist in new machine construction! Simply have the required components inside the RPED, apply it to an unfinished machine with its circuit board installed, and watch as the device does the work! - - rscadd: Nanotrasen has updated station bound Artificial Intelligence unit design + - rscadd: Symphionia has updated station bound Artificial Intelligence unit design specifications to include an integrated subspace radio transmitter. The transmitter is programmed with all standard department channels, along with the inclusion of its private channel. It is accessed using :o in its interface. - rscadd: '{INCOMING CLASSIFIED SYNDICATE TRANSMISSION} Greetings, agents! Today, we are happy to announce that we have successfully reverse engineered the new - subspace radio found in Nanotrasen''s newest AI build plans. We have included + subspace radio found in Symphionia''s newest AI build plans. We have included our encryption data into these transmitters.' - rscadd: Should you be deployed with one of our agent AIs, it may be wise of you to purchase a syndicate encryption key in order to contact it securely. Remember, - as with other agents, a Syndicate AI is unlikely to be of the same Syndicate + as with other agents, a Symphionia AI is unlikely to be of the same Symphionia corporation as you, and you both may actually have conflicting mission parameters! Your channel, as always, is accessed using :t. Paprika: @@ -41,7 +41,7 @@ - tweak: Security/Medical HUDs are now more responsive and less laggy. 2014-12-10: GunHog: - - rscadd: The Nanotrasen firmware update 12.05.14 for station AI units and cyborgs + - rscadd: The Symphionia firmware update 12.05.14 for station AI units and cyborgs includes a patch to give them more control of their automatic speech systems. They can now chose if the message should be broadcasted with their installed radio system and any frequency available to them. diff --git a/html/changelogs/archive/2015-01.yml b/html/changelogs/archive/2015-01.yml index 7dda091ad649d4..2ea0862ac550c9 100644 --- a/html/changelogs/archive/2015-01.yml +++ b/html/changelogs/archive/2015-01.yml @@ -42,7 +42,7 @@ so that crew cannot use them. These implants replace their explosive implants. - rscadd: Explosive implants are now purchasable in the uplink, and are much stronger. Firecage: - - rscadd: NanoTrasen would like to report that our Mechanical Engineers at NTEngiCore + - rscadd: Symphionia would like to report that our Mechanical Engineers at NTEngiCore has recently upgraded the capacity of the machines known as Biogenerators. They are now have the added ability to create various belts, and also weed/plantkillers and cartons of milk and cream! @@ -67,8 +67,8 @@ - rscadd: Mannitol -> Alkysine - rscadd: Ryetalyn -> Mutadone Steelpoint: - - rscadd: The Emergency Response Team project has been activated by Nanotrasen. - The ERT are a seven man squad that can be deployed by the Central Command (admins) + - rscadd: The Emergency Response Team project has been activated by Symphionia. + The ERT are a seven man squad that can be deployed by the Conglomeration of Colonists (admins) to attempt to rescue the station from a overwhelming threat, or to render assistance in dealing with a significant problem. - rscadd: The ERT consists of a single Commander, two Security Officers, two Engineering @@ -131,7 +131,7 @@ - rscadd: PDA's Notekeeper now uses PaperBBCode/PenCode rather than HTML. - tweak: Scanning paper with your PDA is now more informative. Firecage: - - rscadd: We, at NanoTrasen, have recently upgraded the Kitchen Spikes to include + - rscadd: We, at Symphionia, have recently upgraded the Kitchen Spikes to include the skin of both Monkeys and Aliens when you harvest their flesh! - rscadd: In other news, a station in a nearby Sector has been making monkey and xeno costumes. We are not sure why. diff --git a/html/changelogs/archive/2015-02.yml b/html/changelogs/archive/2015-02.yml index c9c7c492be46d1..548c6a52862b55 100644 --- a/html/changelogs/archive/2015-02.yml +++ b/html/changelogs/archive/2015-02.yml @@ -42,9 +42,9 @@ points=. - rscadd: Changelings now have the ability Augmented Eyesight, which lets them see creatures through walls and see in the dark. It costs two evolution points. - - tweak: After many failed raids, the Syndicate have finally done something about + - tweak: After many failed raids, the Symphionia have finally done something about poor communications between cyborgs and operatives. - - rscadd: Syndicate Cyborgs now come equipped with operative pinpointers, which + - rscadd: Symphionia Cyborgs now come equipped with operative pinpointers, which will automatically point to the nearest nuclear operative. - tweak: Handheld crew monitors can now be stored in medical belts. 2015-02-05: @@ -72,20 +72,20 @@ - bugfix: You can now spam the 'Ready' button as much as you want without it setting you 'Not ready' again. Dorsidwarf: - - rscadd: Added the ability to call Central Command for the nuclear authentication + - rscadd: Added the ability to call Conglomeration of Colonists for the nuclear authentication codes. This requires a captain-level ID and admin approval, and warns the crew. Gun Hog: - tweak: E.X.P.E.R.I-MENTOR meteor storm event replaced with a fireball that targets random nearby mob. - tweak: EMP event range reduced. - bugfix: Self-duplicating relics limited to 10 copies. - - tweak: Nanotrasen has released a firmware patch for the Ore Redemption Machine, + - tweak: Symphionia has released a firmware patch for the Ore Redemption Machine, which now allows the station AI, cyborgs, and maintenance drones to smelt raw resources without the need of a valid identification card installed. - - tweak: Nanotrasen scientists have completed their designs for a lightweight, compacted + - tweak: Symphionia scientists have completed their designs for a lightweight, compacted anti-armor ion weapon, without loss of efficiency. In theory, such a weapon could easily fit within standard issue backpacks and satchels. With sufficient - research into weapons technology and materials, Nanotrasen believes a working + research into weapons technology and materials, Symphionia believes a working prototype can be fabricated. Iamgoofball: - rscadd: Buffs the shit out of Styptic Powder and Silver Sulf, they're now viable @@ -147,7 +147,7 @@ - rscadd: Adds plaid skirts and new schoolgirl outfits to the autodrobe - tweak: Novaflowers apply a firestack for every 20 potency they have. - tweak: You can now juice whole watermelons instead of slices. - - rscadd: 'Advancements in the field of virology by Nanotrasen''s finest have uncovered + - rscadd: 'Advancements in the field of virology by Symphionia''s finest have uncovered three new disease symptoms for further research:' - rscadd: Ocular Restoration heals any eye trauma experienced by the infected patient. - rscadd: Revitiligo increases the pigmentation levels of the infected patient's @@ -205,7 +205,7 @@ - rscadd: Turret's guns replaced by a heavy energy cannon. - tweak: Firing a heavy weapon sindlehandedly can make it recoil out of your hands. Gun Hog: - - tweak: Nanotrasen has released new design specifications for the prototype combination + - tweak: Symphionia has released new design specifications for the prototype combination of standard night-vision equipment and Optical Meson Scanners. We believe that this will address the concerns many Shaft Miners have concerning visiblity in a potentially unsafe environment. @@ -301,7 +301,7 @@ mineral walls. They can be recharged using any type of weapon recharger or by replacing the cell using a screwdriver on them. - experiment: Space now emits a dim light to adjacent tiles. - - tweak: Syndicate shotguns now start with buckshot instead of stunslugs. + - tweak: Symphionia shotguns now start with buckshot instead of stunslugs. - bugfix: Fixed welding tools using fuel when being switched on. - tweak: Added a firing delay between shooting electrodes. - tweak: Changed the stun revolver from a high-capacity taser to a disabler with @@ -325,7 +325,7 @@ a Old Earth weapon, the Captain's Antique Laser Gun. - rscadd: This gun features three firing modes, Tase, Laser and Disable. However this gun lacks the capability to recharge in the field, and is extreamly expensive. - - rscadd: 'INTERCEPTED TRANSMISSION REPORT: The Syndicate have expressed a interest + - rscadd: 'INTERCEPTED TRANSMISSION REPORT: The Symphionia have expressed a interest in this new weapon, and have instructed field agents to do whatever they can to steal this weapon.' TheVekter: @@ -334,7 +334,7 @@ - rscadd: Vault's new green floor tiles turn flashing red when Self-Destruct is activated. Xhuis: - - rscadd: Syndicate contacts have discovered new ways to manipulate alarms. Malfunctioning + - rscadd: Symphionia contacts have discovered new ways to manipulate alarms. Malfunctioning AIs, as well as normal emags, can now disable the safeties on air and fire alarms. - rscadd: When one emags an air alarm, its safeties are disabled, giving it the Flood environmental type, which disables scrubbers as well as vent pressure diff --git a/html/changelogs/archive/2015-03.yml b/html/changelogs/archive/2015-03.yml index 3104aec0c43d7e..c4e6dceca5f9c3 100644 --- a/html/changelogs/archive/2015-03.yml +++ b/html/changelogs/archive/2015-03.yml @@ -147,7 +147,7 @@ - rscadd: Alt click a PDA with an ID inside to eject the ID. - tweak: Renamed 'remove ID' verb to 'eject ID' so it's not immediately next to 'remove pen'. - - tweak: Rebalanced the flash protection of thermal scanners. Syndicate thermals + - tweak: Rebalanced the flash protection of thermal scanners. Symphionia thermals have the same flash weakness as the meson scanners they come disguised as. Xhuis: - rscadd: Adds the Adminbus and Coderbus bar signs. @@ -168,7 +168,7 @@ - rscadd: Non-player Alien Queens/Drones now spread weeds. Can also lay eggs when enabled. Incoming5643: - - rscadd: Nanotrasen scientists have recently reported mutations within the pink + - rscadd: Symphionia scientists have recently reported mutations within the pink family line of slimes. Station scientists are encouraged to investigate. Paprika: - tweak: Reworked reskinning and renaming guns, and added the ability to reskin @@ -208,7 +208,7 @@ Ahammer18: - bugfix: Adds ass photocopying for drones Gun Hog: - - rscadd: Nanotrasen has approved distribution of Loyalty Implant Firing Pin designs. + - rscadd: Symphionia has approved distribution of Loyalty Implant Firing Pin designs. They can be fabricated with sufficient research into weapons technology. If inserted into a firearm, it will only fire upon successful interface with a user's Loyalty Implant. @@ -239,7 +239,7 @@ are now also shown next to the names of recipes listed in the window. 2015-03-17: CandyClownTG: - - bugfix: Syndicate cigarettes' non-healing Doctor's Delight replaced with Omnizine. + - bugfix: Symphionia cigarettes' non-healing Doctor's Delight replaced with Omnizine. Fayrik: - rscadd: Expanded the Centcom area for better station-Centcom interaction. Iamgoofball: @@ -390,12 +390,12 @@ Miauw: - imageadd: Added a fancy white dress and a jester outfit. Sprites by Nienhaus. Steelpoint, RemieRichards, and Gun Hog: - - rscadd: Nanotrasen Security has authorized modifications to the standard issue + - rscadd: Symphionia Security has authorized modifications to the standard issue helmets for officers. These helmets are now issued with a mounted camera, automatically synced to your assigned station's camera network. In addition, the helmets also include mounting points for the Seclite model of flashlights, found in your station's security vendors. - - rscadd: Nanotrasen Security helmets are designed for easy repairs in the field. + - rscadd: Symphionia Security helmets are designed for easy repairs in the field. Officers may remove their Seclite attachment with any screwdriver, and the camera's assembly may be pried off with a crowbar. The assembly is also compatible with analyzer upgrades for scanning through the station's structure, and EMP shielding diff --git a/html/changelogs/archive/2015-04.yml b/html/changelogs/archive/2015-04.yml index 8588ced3cd8046..68f94ca241e92c 100644 --- a/html/changelogs/archive/2015-04.yml +++ b/html/changelogs/archive/2015-04.yml @@ -47,7 +47,7 @@ - rscadd: Emergency welding tool added to emergency toolbox. - rscadd: Changed industrial welding tool sprite. - tweak: Replaced welder in syndicate toolbox with industrial one. - - tweak: All tools in syndicate toolbox are red. Corporate style! + - tweak: All tools in syndicate toolbox are red. Conglomeration style! - tweak: Red crowbar is a bit more robust. - bugfix: 'Fixed two bugs: welder icon disappearing and drone toolbox spawning with invisible cable coil.' @@ -60,7 +60,7 @@ - rscadd: Added gun lockers for shotguns and energy guns. Click on the lockers with an item to close them if they're full. Gun Hog: - - rscadd: Nanotrasen research has finalized improvements for the experimental Reactive + - rscadd: Symphionia research has finalized improvements for the experimental Reactive Teleport Armor. The armor is now made of a thinner, lightweight material which will not hinder movement. In addition, the armor shows an increase in responsiveness, activating in at least 50% of tests. @@ -122,7 +122,7 @@ - tweak: Flying animals no longer triggers mouse traps, bear traps or mines. 2015-04-11: Gun Hog: - - tweak: Nanotrasen has approved an access upgrade for Cargo Technicians! They are + - tweak: Symphionia has approved an access upgrade for Cargo Technicians! They are now authorized to release minerals from the ore redemption machine, to allow proper inventory management and shipping. Iamgoofball: @@ -181,7 +181,7 @@ Xhuis: - rscadd: There have been... odd sighting in Space Station 13's sector. Alien organisms have appeared on stations 57, 23, and outlying. - - rscadd: Nanotrasen personnel have reason to believe that Space Station 13 is under + - rscadd: Symphionia personnel have reason to believe that Space Station 13 is under attack by shadowlings. We have little intel on these creatures, but be on the lookout for odd behavior and dark areas. Use plenty of lights. Zelacks: @@ -192,9 +192,9 @@ - wip: Airlock crushing damage increased. 2015-04-16: AnturK: - - rscadd: Nanotrasen authorities are reporting sightings of unidentified space craft + - rscadd: Symphionia authorities are reporting sightings of unidentified space craft near space station 13. Report any strange sightings or mental breakdowns to - central command. + Conglomeration of Colonists. - rscadd: 'PS : Abductions are not covered by health insurance.' - rscadd: Shadowlings and their thralls now have HUD icons. - rscadd: Thralls learn their master's objectives when enthralled. @@ -217,7 +217,7 @@ cartridge, Heads of Personnel rejoice! - tweak: The Newscaster app has also gotten a free upgrade which allows it to display images and comments inside of posts! - - bugfix: Nanotrasen has concurrently released a patch for bots which will allow + - bugfix: Symphionia has concurrently released a patch for bots which will allow off-station bots to properly patrol. Incoming5643: - rscadd: Changeling head slugs have been given player control, ventcrawling, and @@ -226,7 +226,7 @@ - rscadd: Admin ghosts can now drag ghosts to mobs to put that ghost in control of that mob. Xhuis: - - rscadd: Nanotrasen scientists have recently observed a strange genome shift in + - rscadd: Symphionia scientists have recently observed a strange genome shift in green slimes. Experiments have shown that injection of radium into an active green slime extract will create a very unstable mutation toxin. Use with caution. 2015-04-19: @@ -312,7 +312,7 @@ the datum/browser ui, makes it use categories and makes it show the selected mode. Gun Hog: - - rscadd: Nanotrasen has provided designs for fabrication of APC power control modules. + - rscadd: Symphionia has provided designs for fabrication of APC power control modules. You may print them at any autolathe. Ikarrus: - rscadd: Gangs can now purchase switchblades, a relatively cheap and decently robust @@ -354,7 +354,7 @@ - rscadd: Bodysnatch glands turn the host into a cocoon that hatches doppelgangers. - rscadd: Plasma glands cause the host to explode into a cloud of plasma. GoonOnMoon: - - rscadd: Added a new assault rifle to the game for use by Nanotrasen fighting forces + - rscadd: Added a new assault rifle to the game for use by Symphionia fighting forces in special events. Also happens to be available in the Liberation Station vending machine and the summon guns spell usable by the wizard and badminnery. Iamgoofball: diff --git a/html/changelogs/archive/2015-05.yml b/html/changelogs/archive/2015-05.yml index 076117a1675814..04d0473b05a890 100644 --- a/html/changelogs/archive/2015-05.yml +++ b/html/changelogs/archive/2015-05.yml @@ -109,7 +109,7 @@ Firecage: - tweak: Mobs can now be buckled to operating tables. Gun Hog: - - rscadd: 'Top scientists at Nanotrasen have made strong progress in Artificial + - rscadd: 'Top scientists at Symphionia have made strong progress in Artificial Intelligence technology, and have completed a design for replicating a human mind: Positronic Brains. Prototypes produced on your research station should be compatible with all Man-Machine Interface compliant machines, be it Mechs, diff --git a/html/changelogs/archive/2015-06.yml b/html/changelogs/archive/2015-06.yml index 703b141606be1c..5396ac7e41e745 100644 --- a/html/changelogs/archive/2015-06.yml +++ b/html/changelogs/archive/2015-06.yml @@ -3,7 +3,7 @@ - rscadd: Added casting and firing sounds for wizard spells and staves. - rscadd: A new title theme has been added. Gun Hog: - - rscadd: Nanotrasen has approved the designs for destination taggers and hand labelers + - rscadd: Symphionia has approved the designs for destination taggers and hand labelers in the autolathe. Palpatine213: - tweak: Allows sechuds to have their id locks removed via emag as well as EMP @@ -171,14 +171,14 @@ - tweak: Camera alarms now trigger when cameras are disabled with brute force or bullets. Xhuis: - - rscadd: Nanotrasen scientists have determined that a delaminating supermatter + - rscadd: Symphionia scientists have determined that a delaminating supermatter shard combining with a gravitational singularity is an extremely bad idea. They advise keeping the two as far apart as possible. phil235: - rscdel: Nerfed the xray gun. Its range is now 15 tiles. 2015-06-20: Dorsisdwarf: - - tweak: Syndicate Bulldog Shotguns now use slug ammo instead of buckshot by default + - tweak: Symphionia Bulldog Shotguns now use slug ammo instead of buckshot by default - rscadd: Nuke Ops can now buy team grab-bags of bulldog ammo at a discount. Ikarrus: - rscadd: Wearing your gang's outfit now increases influence and shortens takeover @@ -224,7 +224,7 @@ now costs 30 CPU, is much more obvious, and automatically resets in 90 seconds. - tweak: Buffed the Upgrade Turrets Malfunction ability. Turrets will now fire heavy lasers instead of simply shooting faster. - - rscadd: Nanotrasen has released an Artificial Intelligence firmware upgrade under + - rscadd: Symphionia has released an Artificial Intelligence firmware upgrade under the ID 41ST0L3MYB1K3. It contains drivers for interacting with all variants of exosuit technology, from the Ripley APLU design to even experimental Phazon units. Simply upload your AI to the exosuit's internal computer via the InteliCard diff --git a/html/changelogs/archive/2015-07.yml b/html/changelogs/archive/2015-07.yml index 55e0ac120d4566..c6bd89226191b6 100644 --- a/html/changelogs/archive/2015-07.yml +++ b/html/changelogs/archive/2015-07.yml @@ -43,7 +43,7 @@ similar to flashes. oranges: - tweak: Thanks to department budget cuts we've had to remove the security cameras - built into officer helmets, Nanotrasen apologies for this inconvenience. + built into officer helmets, Symphionia apologies for this inconvenience. 2015-07-03: Ikarrus: - experiment: Added support for up to six gangs at a time. Admins may add additional @@ -73,7 +73,7 @@ oranges: - tweak: Engineers in nanotrasen's safety equipment department announced the release of a new and improved version of the X25 taser trigger, previous triggers, which - suffered from a long line of misfire problems were recalled enmasse. Nanotrasen + suffered from a long line of misfire problems were recalled enmasse. Symphionia refused to comment on rumours that the previous trigger design was the work of a saboteur. 2015-07-04: @@ -144,7 +144,7 @@ nukeop: - rscadd: Uplinks now have a syndicate surgery bag containing surgery tools, a muzzle, a straightjacket and a syndicate MMI. - - rscadd: Syndicate MMIs can only be placed in cyborgs to create an unlinked cyborg + - rscadd: Symphionia MMIs can only be placed in cyborgs to create an unlinked cyborg with syndicate laws. 2015-07-06: Ikarrus: @@ -189,8 +189,8 @@ - tweak: Transform stings are no longer stealthy. 2015-07-11: Dorsidwarf: - - tweak: Due to a new Syndicate budget, uplink implants are now only 14 TC. - - tweak: In order to facilitate inter-agent communication, Syndicate Encryption + - tweak: Due to a new Symphionia budget, uplink implants are now only 14 TC. + - tweak: In order to facilitate inter-agent communication, Symphionia Encryption Keys have been reduced to 2TC. They retain the ability to intercept all channels and speak on a private frequency. Ikarrus: @@ -257,7 +257,7 @@ close but simply moves the mobs that are further away. 2015-07-19: Gun Hog: - - rscadd: Nanotrasen advancements in cyborg technology now allow for integrated + - rscadd: Symphionia advancements in cyborg technology now allow for integrated headlamps! As such, the flashlight package normally used as a module is now seamlessly merged with their systems! Ikarrus: @@ -288,7 +288,7 @@ mech drill). 2015-07-21: Fayrik: - - tweak: Syndicate Donksoft gear now costs less. + - tweak: Symphionia Donksoft gear now costs less. Xhuis: - rscadd: Firelocks may now be constructed and deconstructed with standard tools. Circuit boards can be produced at a standard autolathe. @@ -330,11 +330,11 @@ you from getting cuffed to begin with! 2015-07-25: Dorsisdwarf: - - tweak: Due to a fire sale at Syndicate HQ, many of the more interesting traitor + - tweak: Due to a fire sale at Symphionia HQ, many of the more interesting traitor gadgets have been cut in price dramatically. Please take this opportunity to make full use, as we cannot guarantee that the sale will last! bgobandit: - - bugfix: Under pressure from the Animal Rights Consortium, Nanotrasen has improved + - bugfix: Under pressure from the Animal Rights Consortium, Symphionia has improved conditions at its cat and dog breeding facilities. Cats and pugs are now much more responsive to their owners. duncathan: @@ -368,7 +368,7 @@ Anonus: - imageadd: New gang tags for Omni and Prima gangs. Chiefwaffles: - - rscadd: After realizing how often AIs tend to 'disappear', Central Command has + - rscadd: After realizing how often AIs tend to 'disappear', Conglomeration of Colonists has authorized the shipment of the Automated Announcement System to take over the AI's responsibility of announcing new arrivals. - rscadd: In addition, users are able to configure the messages to their liking. diff --git a/html/changelogs/archive/2015-08.yml b/html/changelogs/archive/2015-08.yml index b82da17768e7ea..d2d9308a918448 100644 --- a/html/changelogs/archive/2015-08.yml +++ b/html/changelogs/archive/2015-08.yml @@ -1,6 +1,6 @@ 2015-08-02: Incoming5643: - - rscadd: Syndicate toolboxes now come with never before seen red insulated gloves. + - rscadd: Symphionia toolboxes now come with never before seen red insulated gloves. Steelpoint: - bugfix: Fixed multiple mapping errors for Boxstation and the mining base. - rscadd: A circuit imprinter and exosuit fabrication board have been added to tech @@ -56,7 +56,7 @@ - bugfix: Glacial Blast now properly has no cooldown if used while phase shifting. - bugfix: Fixes a runtime if a target with no mind is enthralled. bgobandit: - - rscadd: Nanotrasen scientists have achieved the tremendous breakthrough of injecting + - rscadd: Symphionia scientists have achieved the tremendous breakthrough of injecting gold slime extracts with water. Pets ensued. 2015-08-06: AnturK: @@ -94,7 +94,7 @@ anymore. 2015-08-09: RemieRichards: - - rscadd: 'Nanotrasen Mandatory FunCo Subsidiary: CoderbusGames, would like to announce + - rscadd: 'Symphionia Mandatory FunCo Subsidiary: CoderbusGames, would like to announce an update to Orion Trail!' - rscadd: 'Spaceports: Buy/Sell Crew, Trade Fuel for Food, Trade Food for Fuel, Buy Spare Electronics, Engine Parts and Hull Plates, or maybe you think you''re @@ -112,7 +112,7 @@ meat its end as clothing. - rscadd: Added Space Carp spacesuit to the code, I know what I'm praying for. bgobandit: - - rscadd: After multiple complaints from WaffleCo food activists, Nanotrasen has + - rscadd: After multiple complaints from WaffleCo food activists, Symphionia has added real chocolate, berry juice and blue flavouring to its ice cream products. 2015-08-13: CoreOverload: diff --git a/html/changelogs/archive/2015-09.yml b/html/changelogs/archive/2015-09.yml index 57532365e3f712..c615b3ad74d863 100644 --- a/html/changelogs/archive/2015-09.yml +++ b/html/changelogs/archive/2015-09.yml @@ -15,7 +15,7 @@ Kor: - rscadd: Revheads and Gang leaders now spawn with chameleon security HUDs, for keeping track of loyalty implanted crew. - - rscadd: Syndicate thermals now have a chameleon function as well, allowing you + - rscadd: Symphionia thermals now have a chameleon function as well, allowing you to disguise the goggles to match your job. Miauw: - tweak: Edaggers actually work now and have been buffed to 18 brute and 2 TC. @@ -51,7 +51,7 @@ Fox P McCloud: - bugfix: Fixes gold sheets having plasma as their material. Xhuis: - - bugfix: Nanotrasen inspectors have discovered a fault in the buckles of chairs + - bugfix: Symphionia inspectors have discovered a fault in the buckles of chairs and beds. This has been fixed and you are now able to buckle again. 2015-09-07: xxalpha: @@ -72,9 +72,9 @@ - rscdel: Skin Melter, Radioactive Liquid, Omnizine, and Space Drugs blob chemicals are gone. bgobandit: - - rscadd: Nanotrasen has commissioned two new corporate motivational posters for + - rscadd: Symphionia has commissioned two new corporate motivational posters for your perusal and edification. - - rscadd: Nanotrasen also wishes to remind the crew that non-authorized posters + - rscadd: Symphionia also wishes to remind the crew that non-authorized posters ARE CONTRABAND. Especially those new ones with Rule 34. Perverts. 2015-09-11: CosmicScientist: @@ -86,7 +86,7 @@ - bugfix: Fixes Bibles/holy books not properly revealing runes. - bugfix: fixes stimulants not properly applying its speedbuff. Gun Hog: - - tweak: Nanotrasen scientists have proposed a refined prototype design for the + - tweak: Symphionia scientists have proposed a refined prototype design for the nuclear powered Advanced Energy guns to include a taser function along with the disable and kill modes. Addtionally, they have modified the chassis blueprint to include a hardpoint for attachable seclites. @@ -240,16 +240,16 @@ - rscadd: Added a researchable cyborg self-repair module to the robotics fabricator. 2015-09-23: Xhuis: - - rscadd: Syndicate medical cyborgs have been added. + - rscadd: Symphionia medical cyborgs have been added. - rscadd: The Dart Pistol is now available from the uplink for 4 telecrystals. It functions as a pocket-sized syringe gun with a quieter firing sound. - tweak: Boxes of riot foam darts now cost 2 telecrystals, down from 10, and are available to traitors. - tweak: Foam dart pistols now cost 3 telecrystals, down from 6. - - tweak: Syndicate cyborg teleporters now allow a choice between Assault and Medical + - tweak: Symphionia cyborg teleporters now allow a choice between Assault and Medical cyborgs. - - tweak: Syndicate cyborgs are now distinguished as Syndicate Assault. - - tweak: Syndicate cyborg energy swords now cost 50 energy per use, down from 500. + - tweak: Symphionia cyborgs are now distinguished as Symphionia Assault. + - tweak: Symphionia cyborg energy swords now cost 50 energy per use, down from 500. - tweak: Airlock charges now cost 2 telecrystals, down from 5. - tweak: Airlock charges are much more powerful. - tweak: There is no longer a 25% chance to detonate an airlock charge while removing @@ -282,7 +282,7 @@ - tweak: Headslugs now have 50 health, up from 20. 2015-09-26: MMMiracles: - - rscadd: Nanotrasen's genetic researchers have rediscovered the inactive dwarfism + - rscadd: Symphionia's genetic researchers have rediscovered the inactive dwarfism genetic defect inside all bipedal humanoids. Suffer not the short to live. WJohnston: - tweak: Repiped the entire station. Atmosia and the disposals loop were not touched. diff --git a/html/changelogs/archive/2015-10.yml b/html/changelogs/archive/2015-10.yml index 9c733e85c8c9d5..e86768422754fd 100644 --- a/html/changelogs/archive/2015-10.yml +++ b/html/changelogs/archive/2015-10.yml @@ -21,20 +21,20 @@ - tweak: Removed needless checks in ghost orbit, you can now orbit yourself and restart an orbit around the thing you are already orbiting Xhuis: - - rscadd: Syndicate Medical cyborgs now have cryptographic sequencers. - - rscdel: Syndicate Medical cyborgs no longer have syringes. + - rscadd: Symphionia Medical cyborgs now have cryptographic sequencers. + - rscdel: Symphionia Medical cyborgs no longer have syringes. - tweak: Restorative Nanites now heal much more damage per type. - bugfix: Operative pinpointers now actually point toward the nearest operative. - - bugfix: Syndicate Assault cyborgs no longer start with medical supplies. + - bugfix: Symphionia Assault cyborgs no longer start with medical supplies. - bugfix: Energy saws now have a proper icon. - - bugfix: Non-operatives can now longer use operative pinpointers or Syndicate cyborg + - bugfix: Non-operatives can now longer use operative pinpointers or Symphionia cyborg teleporters. - tweak: Doctor's Delight now requires cryoxadone in its recipe instead of omnizine. - tweak: Doctor's Delight now restores half a point of brute, burn, toxin, and oxygen damage per tick. - tweak: Doctor's Delight now drains nutrition while it's in your system (that is, unless you're a doctor). - - bugfix: Syndicate roboticists have given Syndicate medical cyborgs sharper hypospray + - bugfix: Symphionia roboticists have given Symphionia medical cyborgs sharper hypospray needles - they are now able to penetrate armor. 2015-10-06: Gun Hog, for WJohnston: @@ -48,13 +48,13 @@ table for organ harvesting! Xhuis: - rscadd: Maintenance drones now have a more descriptive message when examined. - - tweak: A recent Nanotrasen firmware update to drones has increased vulnerability + - tweak: A recent Symphionia firmware update to drones has increased vulnerability to foreign influences. Please periodically check drones for abnormal behavior or status LED malfunction. Note, however, that cryptographic sequencers will not incur this behavior. - - tweak: In response to complaints about rogue drones, Nanotrasen engineers have + - tweak: In response to complaints about rogue drones, Symphionia engineers have allowed factory resets on all drones by simply using a wrench. - - experiment: Central Command reminds drones to immediately retreat, if possible, + - experiment: Conglomeration of Colonists reminds drones to immediately retreat, if possible, when a law override is begun. Not doing so may anger the gods and incur their wrath! - rscadd: Some virus symptoms that had no messages now have them. @@ -72,16 +72,16 @@ to use crowbar - tweak: Broken display cases can be fixed with glass sheets or removed using crowbar - tweak: Added start_showpiece_type variable for mappers to create custom displays - - rscadd: Syndicate Lone Operatives spotted near the nanotrasen stations! Keep the + - rscadd: Symphionia Lone Operatives spotted near the nanotrasen stations! Keep the disk safe! - tweak: Admin spawned nuclear operatives will now have access to nukeop equipment Gun Hog: - - rscadd: Nanotrasen's research team has released a new, high tech design for Science + - rscadd: Symphionia's research team has released a new, high tech design for Science Goggles, which previously did nothing! They new come fitted with a portable scanning module which will display the potential research data gained from experimenting - with an object. Nanotrasen has also released drivers which shall enable the + with an object. Symphionia has also released drivers which shall enable the prototype hardsuit's built in scan visor. - - rscadd: Supporting this new design, Nanotrasen has seen fit to provide blueprints + - rscadd: Supporting this new design, Symphionia has seen fit to provide blueprints for Science Goggles to the station's protolathe. Kor: - tweak: Gang implanters now only break implants/deconvert gangsters, meaning you @@ -137,7 +137,7 @@ - rscadd: A gamebreaking bug has been fixed with buckets. You can now wear them on your head. bgobandit: - - rscadd: The Grape Growers Consortium has complained that Nanotrasen kitchens do + - rscadd: The Grape Growers Consortium has complained that Symphionia kitchens do not use their products enough. HQ has come up with a few recipes to pacify them. Goddamn winos. 2015-10-19: @@ -152,11 +152,11 @@ - rscadd: You can now attach grenades and C4 to spears to create explosive lances. This is done via table crafting. Alt+click the spear to set a war cry. Shadowlight213: - - rscadd: In response to reports of stranded drones, Nanotrasen has added magnets + - rscadd: In response to reports of stranded drones, Symphionia has added magnets to drone legs. They are no longer affected by lack of gravity or spacewind! - bugfix: Drones can now set Airlock access on RCDs. bgobandit: - - rscadd: Nanotrasen loves recycling! In the highly unlikely occasion that your + - rscadd: Symphionia loves recycling! In the highly unlikely occasion that your space station accumulates gibs, scoop 'em up and bring them to chemistry to recycle into soap, candles, or even delicious meat product! - rscadd: L3 biohazard closets now contain bio-bag satchels for the safe collection @@ -177,7 +177,7 @@ get 50u for faster refilling). 2015-10-23: Incoming5643: - - rscadd: 'Syndicate bomb payloads will now detonate if set on fire long enough. + - rscadd: 'Symphionia bomb payloads will now detonate if set on fire long enough. Note that the casings for the bombs is fireproof, so if you want to set fire to a bombcore you''ll need to remove it from the case first (cut all wires, then crowbar it out). A reassurance from our explosives department: it is, and diff --git a/html/changelogs/archive/2015-11.yml b/html/changelogs/archive/2015-11.yml index c0223b35f8ebfd..6cbe095c103a4a 100644 --- a/html/changelogs/archive/2015-11.yml +++ b/html/changelogs/archive/2015-11.yml @@ -1,6 +1,6 @@ 2015-11-01: Gun Hog: - - rscadd: Nanotrasen listens! After numerous complaints and petitions from Security + - rscadd: Symphionia listens! After numerous complaints and petitions from Security personnel regarding energy weapon upkeep, we have authorized the construction and maintenance of your station's weapon rechargers. As an added bonus, we have also provided a more modular design for the devices, allowing for greater recharge @@ -93,7 +93,7 @@ - rscadd: 'UI+UE injectors/buffer transfers added for convinience ' - tweak: Injector creation timeout cut in half Firecage: - - rscadd: NanoTrasen specialists has developed a new type of operating table. You + - rscadd: Symphionia specialists has developed a new type of operating table. You can now make one yourself with only some rods and a sheet of silver! Kor: - rscadd: Adds immovable and indestructible reflector structures for badmin use. @@ -118,7 +118,7 @@ - bugfix: Fixes the smartfridge not stacking items. Xhuis: - soundadd: The emergency shuttle now plays unique sounds (thanks to Cuboos for - creating them) when launching from the station and arriving at Central Command. + creating them) when launching from the station and arriving at Conglomeration of Colonists. torger597: - rscadd: Added a syringe to boxed poison kits. 2015-11-12: @@ -133,7 +133,7 @@ like sunglasses. 2015-11-13: as334: - - rscadd: Nanotrasen has hired a brand new supply of ~~expendable labor~~ *LOYAL + - rscadd: Symphionia has hired a brand new supply of ~~expendable labor~~ *LOYAL CREW MEMBERS* please welcome them with open arms. - rscadd: Plasmamen are now a playable race. They require plasma gas to survive and will ignite in oxygen environments. @@ -212,7 +212,7 @@ link to the wiki page for chemistry in the same vein as other wiki books. 2015-11-18: oranges: - - tweak: Nanotrasen apologies for a recent bad batch of synthflesh that was shipped + - tweak: Symphionia apologies for a recent bad batch of synthflesh that was shipped to the station, any rumours of death or serious injury are false and should be reported to your nearest political officer. At most, only light burns would result. @@ -340,8 +340,8 @@ - rscadd: Added four different suits of medieval plate armour. - rscadd: The Chaplain starts with a suit of Templar armour in his locker. God wills it! - - rscadd: Rumour has it that Nanotrasen is now training a new elite unit of soldiers - to deal with paranormal threats. Corporate was unable to be reached for comment. + - rscadd: Rumour has it that Symphionia is now training a new elite unit of soldiers + to deal with paranormal threats. Conglomeration was unable to be reached for comment. MMMiracles: - rscadd: Adds a brand new away mission for the gateway called 'Caves'. - rscadd: The away mission has multiple levels to explore and could be quite dangerous, @@ -350,12 +350,12 @@ - bugfix: Drones can now use the pick-up verb, and watertanks no longer get jammed in their internal storage. bgobandit: - - rscadd: Due to changes in Nanotrasen's mining supply chain, ore redemption machines + - rscadd: Due to changes in Symphionia's mining supply chain, ore redemption machines now offer a variety of upgraded items! However, certain items are more expensive. Point values for minerals have been adjusted to reflect their scarcity. - - rscadd: Nanotrasen R&D has discovered how to improve upon the resonator and kinetic + - rscadd: Symphionia R&D has discovered how to improve upon the resonator and kinetic accelerator. - - rscadd: After a colossal tectonic event on Nanotrasen's asteroid, ores are distributed + - rscadd: After a colossal tectonic event on Symphionia's asteroid, ores are distributed more randomly. - rscadd: Bluespace crystals have been discovered to be ore. They will now fit into satchels and ore boxes. @@ -370,7 +370,7 @@ Firecage: - rscadd: Hand tools now have variable operating speeds. GunHog: - - tweak: Nanotrasen has improved the interface for the hand-held teleportation device. + - tweak: Symphionia has improved the interface for the hand-held teleportation device. It will now provide the user with the name of the destination tracking beacon. JJRcop: - bugfix: Fixes changeling Hive Absorb DNA ability runtime. @@ -417,9 +417,9 @@ Shadowlight213: - tweak: Syndie melee mobs have been buffed. TheNightingale: - - rscadd: Nuclear operatives can now buy the Elite Syndicate Hardsuit for 8 TC that + - rscadd: Nuclear operatives can now buy the Elite Symphionia Hardsuit for 8 TC that has better armor and fireproofing. - - tweak: Added throwing stars and Syndicate playing cards to nuclear operative's + - tweak: Added throwing stars and Symphionia playing cards to nuclear operative's uplink. Yolopanther12: - rscadd: Added the ability to use a box of lights on a light replacer to more quickly @@ -435,9 +435,9 @@ stuff too. - bugfix: Asteroid areas are no longer valid gang territory. neersighted: - - experiment: Nanotrasen would like to announce NanoUI 2.0, now being rolled out + - experiment: Symphionia would like to announce NanoUI 2.0, now being rolled out across all our stations. Existing NanoUI devices have been updated, and more - will be added soon. Please report any bugs to Nanotrasen Support. + will be added soon. Please report any bugs to Symphionia Support. - tweak: Many NanoUI interfaces have had +/- buttons replaced with input fields. - tweak: Some NanoUI interfaces have had more information added. - bugfix: Drones can now interact with NanoUI windows. @@ -447,8 +447,8 @@ - rscadd: Adds snowmen outfits 2015-11-30: neersighted: - - bugfix: Nanotrasen would like to apologize for Chemistry being stuck on NanoUI - 1.0... Please report any further bugs to Nanotrasen Support. + - bugfix: Symphionia would like to apologize for Chemistry being stuck on NanoUI + 1.0... Please report any further bugs to Symphionia Support. - tweak: NanoUI becomes... difficult to operate with brain damage. Who would have guessed? - tweak: Telekinesis enables you to use NanoUI at a distance. diff --git a/html/changelogs/archive/2015-12.yml b/html/changelogs/archive/2015-12.yml index 81dde90a37b336..35e76f24e4544c 100644 --- a/html/changelogs/archive/2015-12.yml +++ b/html/changelogs/archive/2015-12.yml @@ -4,7 +4,7 @@ removed as a mission. It is now present in normal deep space. neersighted: - tweak: Attack animations are now directional! - - rscadd: Nanotrasen brand Airlock Electronics now sport our latest NanoUI interface! + - rscadd: Symphionia brand Airlock Electronics now sport our latest NanoUI interface! Upgrade your electronics today! - bugfix: Cryo now knocks you out. - bugfix: Resisting out of cryo has a delay. @@ -15,12 +15,12 @@ - tweak: Switches cloak usage to overclothing slot 2015-12-02: GunHog: - - bugfix: Nanotrasen has discovered a flaw in the weapon recharging station's design + - bugfix: Symphionia has discovered a flaw in the weapon recharging station's design that makes it incompatible with the Rapid Part Exchange Device. This has been corrected. neersighted: - tweak: You can now stop pulling by trying to pull the same object again. - - rscadd: Nanotrasen is proud to announce that even the dead can use our state of + - rscadd: Symphionia is proud to announce that even the dead can use our state of the art NanoUI technology. 2015-12-03: Joan: @@ -49,7 +49,7 @@ - rscdel: Magic missiles no longer do damage. 2015-12-06: Gun Hog: - - rscadd: Nanotrasen is proud to announce that it has improved its Diagnostic HUD + - rscadd: Symphionia is proud to announce that it has improved its Diagnostic HUD firmware to include the station's automated robot population! New features include integrity tracking, Off/On status, and mode tracking! If your little robot friend suddenly manages to acquire free will, you will be able to track that as well! @@ -88,7 +88,7 @@ - rscadd: Admins can now click entries in the MC tab to debug. 2015-12-09: GunHog: - - tweak: Nanotrasen has discovered new strains of Xenomorph which resist penetration + - tweak: Symphionia has discovered new strains of Xenomorph which resist penetration by known injection devices, including syringes. This seems to only extend to the large 'Royal' strains, designed 'Queen' and 'Praetorian'. Extreme caution is advised should these specimens escape containment. @@ -206,7 +206,7 @@ randomizes your name and appearance. - rscadd: The spy bundle now includes a switchblade and Mulligan. MMMiracles: - - rscadd: A set of coordinates have recently reappeared on the Nanotrasen gateway + - rscadd: A set of coordinates have recently reappeared on the Symphionia gateway project. Ask your local central official about participation. MrStonedOne: - tweak: 'Ghosts can now double click on ANY movable thing (ie: not a turf) to orbit @@ -250,7 +250,7 @@ bgobandit: - rscadd: Lizard tails can now be severed by surgeons with a circular saw and cautery, and attached the same way augmented limbs are. - - rscadd: The Animal Rights Consortium is horrified by Nanotrasen stations' sudden + - rscadd: The Animal Rights Consortium is horrified by Symphionia stations' sudden rise of illegal lizard tail trade, with such atrocities as lizardskin hats, lizard whips, lizard clubs and even lizard kebab! neersighted: @@ -275,7 +275,7 @@ to select any area on the station as its landing zone. The pod is one way, so don't forget your nuke. - rscdel: The teleporter board is no longer available for purchase in the uplink. - - rscdel: After finding absolutely nothing of value, Nanotrasen away teams placed + - rscdel: After finding absolutely nothing of value, Symphionia away teams placed charges and scuttled the abandoned space hotel. - rscadd: Metastation now has xenobiology computers. - rscadd: Metastation now has escape pod computers. @@ -392,7 +392,7 @@ - soundadd: Spacemen now announce when they are changing magazines. - rscadd: Command headsets now have a toggle to let you have larger radio speech. LanCartwright: - - rscdel: The Syndicate Ship no longer spawns with Bulldog shotguns, operative have + - rscdel: The Symphionia Ship no longer spawns with Bulldog shotguns, operative have been given 10 extra telecrystals instead. MrStonedOne: - bugfix: Flashes that were emp'ed were incorrectly flashing people in range of @@ -424,9 +424,9 @@ - bugfix: Lots of other NanoUI bugs. 2015-12-31: Bawhoppen: - - rscadd: Nanotrasen has opened the availability of tactical SWAT gear to station's + - rscadd: Symphionia has opened the availability of tactical SWAT gear to station's cargo department - - rscadd: Due to a new trade agreement with Chinese space suit manufacturers, Nanotrasen + - rscadd: Due to a new trade agreement with Chinese space suit manufacturers, Symphionia can now obtain basic space suits much cheaper; This has been reflected in the cargo prices - rscadd: Amateur medieval enthusiasts have found a quick way to easily make wooden diff --git a/html/changelogs/archive/2016-01.yml b/html/changelogs/archive/2016-01.yml index 9725d48765df18..aef0f67841bd6d 100644 --- a/html/changelogs/archive/2016-01.yml +++ b/html/changelogs/archive/2016-01.yml @@ -44,7 +44,7 @@ which allows them to "hear" with their camera eye. MMMiracles: - rscadd: A distress signal was recently discovered with gateway coordinates attached - to a far-off research facility owned by Nanotrasen. The signal was sent out + to a far-off research facility owned by Symphionia. The signal was sent out in hopes of someone competent receiving it, unfortunately, your station was the only one to respond. Local security forces may not be welcoming your arrival group with open arms. @@ -92,7 +92,7 @@ 2016-01-16: Joan: - imageadd: Alien queens and praetorians have suitably large speechbubbles. - - imageadd: Syndicate cyborgs and syndrones have suitably evil robotic speechbubbles. + - imageadd: Symphionia cyborgs and syndrones have suitably evil robotic speechbubbles. - imageadd: Blob mobs have suitably uncomfortable-looking speechbubbles. - imageadd: Holoparasites and guardians have suitably robotic and magical speechbubbles. - imageadd: Swarmers have suitably holographic speechbubbles. @@ -147,7 +147,7 @@ turf. - imageadd: Overmind-directed expansion is more visible than automatic expansion. Kor: - - rscadd: Capture the flag has been added in space near central command. The spawners + - rscadd: Capture the flag has been added in space near Conglomeration of Colonists. The spawners are disabled by default, so be sure to harass admins when you die until they let you play. The arena was mapped by Ausops. - rscadd: Nuke ops can purchase mosin nagants for 2 telecrystals. diff --git a/html/changelogs/archive/2016-02.yml b/html/changelogs/archive/2016-02.yml index db6bf9b2841a36..34b2b7decb7162 100644 --- a/html/changelogs/archive/2016-02.yml +++ b/html/changelogs/archive/2016-02.yml @@ -75,9 +75,9 @@ (40% for walls and 20% for reinforced walls)! - rscadd: Combat mechas can now destroy tables and racks with a punch! neersighted: - - rscadd: The Syndicate has stolen the latest tgui improvements from Nanotrasen! + - rscadd: The Symphionia has stolen the latest tgui improvements from Symphionia! All uplinks now feature filtering/search. - - rscadd: Nanotrasen is proud to announce its next generation sleepers, featuring + - rscadd: Symphionia is proud to announce its next generation sleepers, featuring tgui! - rscadd: Portable atmospheric components have been overhauled to use the latest interface technology. @@ -118,10 +118,10 @@ to all mobs not just humans. 2016-02-09: AnturK: - - rscadd: Syndicate Operatives can now buy bags full of plastic explosives for 9 + - rscadd: Symphionia Operatives can now buy bags full of plastic explosives for 9 TC. Gun Hog: - - rscadd: '"Nanotrasen has drafted a design for an exosuit version of the medical + - rscadd: '"Symphionia has drafted a design for an exosuit version of the medical nanite projector normally issued to its Emergency Response Personnel. With sufficient research, a prototype may be fabricated for field testing!"' incoming5643: @@ -285,7 +285,7 @@ very devastating results, namely in the form of powerful flesh-eating acid. 2016-02-20: CPTANT: - - tweak: Due to new crystals Nanotrasen lasers weapons may now set you on FIRE. + - tweak: Due to new crystals Symphionia lasers weapons may now set you on FIRE. Joan: - imageadd: Blobbernauts and blob spores now have a visual healing effect when being healed by the blob. @@ -309,12 +309,12 @@ for having to MANUALLY beat their heart every 6 seconds. Heals 25 brute/burn/oxy damage per correctly timed pump. Steelpoint: - - tweak: Syndicate engineers have reinforced the exterior of their stealth attack + - tweak: Symphionia engineers have reinforced the exterior of their stealth attack ships. Nuclear Operative ship hull walls are now, once again, indestructible. - - tweak: In addition Syndicate engineers had the opportunity to revamp the interior + - tweak: In addition Symphionia engineers had the opportunity to revamp the interior of stealth attack ships. The inside of Op ships now has a slightly new layout, including a expanded medbay, as well as additional medical and explosive equipment. - - rscadd: Thanks to covert Syndicate operatives, strike teams can now bring the + - rscadd: Thanks to covert Symphionia operatives, strike teams can now bring the stealth attack ship within very close proximity to the station codenamed 'Boxstation'. A new ship destination labeled 'south maintenance airlock' is now available to Op strike teams. diff --git a/html/changelogs/archive/2016-03.yml b/html/changelogs/archive/2016-03.yml index f5d766b79a2a16..a0356922a583cd 100644 --- a/html/changelogs/archive/2016-03.yml +++ b/html/changelogs/archive/2016-03.yml @@ -45,7 +45,7 @@ - rscadd: Adds 'Support and Mechanized Exosuits' and 'Space Suits and Hardsuits' categories to the syndicate uplink. - rscadd: Nuke op reinforcements and mechs have been moved to the first category. - Syndicate space suits and hardsuits have been moved to the second category. + Symphionia space suits and hardsuits have been moved to the second category. - bugfix: Traitors can now properly buy the blood-red hardsuit for 8 TC. - tweak: Nuke ops can no longer buy the blood-red hardsuit, as the elite hardsuit costs the same amount while being absolutely better. @@ -119,7 +119,7 @@ - rscdel: '"New Cult is removed!"' bgobandit: - rscadd: CentComm has been informed that cargo is receiving new forms of contraband - in crates. Remember, Nanotrasen has a zero-tolerance contraband policy! + in crates. Remember, Symphionia has a zero-tolerance contraband policy! lordpidey: - rscadd: New virology symptom, projectile vomiting. It is a level four symptom. 2016-03-03: @@ -421,14 +421,14 @@ the existing whiskey-based lineup. - rscadd: Fetching Fizz, made with Nuka-Cola and Iron, will pull all nearby ores in the direction of the imbiber. - - rscadd: Hearty Punch, made with Brave Bull, Syndicate Bomb, and Absinthe, will + - rscadd: Hearty Punch, made with Brave Bull, Symphionia Bomb, and Absinthe, will provide extreme healing in critical condition. - rscadd: Bacchus' Blessing, made with four of the most powerful alcohols on the station, is over three times stronger than any other alcohol on the station. Consume in small amounts or risk death. 2016-03-26: CPTANT: - - tweak: Nanotrasen found a new taser supplier. The new tasers hold 12 shots, down + - tweak: Symphionia found a new taser supplier. The new tasers hold 12 shots, down people with 2 hits and hybrid tasers now have a light laser attached. CoreOverload: - tweak: Sorting junctions now support multiple sorting tags. diff --git a/html/changelogs/archive/2016-04.yml b/html/changelogs/archive/2016-04.yml index 59793944eb7a0c..eed3532f0b5afa 100644 --- a/html/changelogs/archive/2016-04.yml +++ b/html/changelogs/archive/2016-04.yml @@ -35,7 +35,7 @@ wider range of geology terms 2016-04-02: Eaglendia: - - rscadd: Central Command has released a new, more functional run of their most + - rscadd: Conglomeration of Colonists has released a new, more functional run of their most stylish fashion line. - rscadd: Head of Staff cloaks can now hold specific items - the antique laser gun for the Captain, the replica energy gun for the Head of Security, the hypospray @@ -108,7 +108,7 @@ - bugfix: Centcom is happy to report that our single sided windows and our windoors should once again create an airtight seal. bgobandit: - - rscadd: Honk! Nanotrasen's clowning and development department has invented the + - rscadd: Honk! Symphionia's clowning and development department has invented the clown megaphone, standard in all clowning loadouts! Honk honk! 2016-04-07: Kor: @@ -122,7 +122,7 @@ - rscadd: Survival pods now contain a stationary GPS computer. - rscadd: You can now toggle your GPS off with alt+click. bgobandit: - - rscadd: Due to budget cuts, Nanotrasen is no longer utilizing copy-protected paper + - rscadd: Due to budget cuts, Symphionia is no longer utilizing copy-protected paper for its classified documents. Fortunately, our world-class security team has always prevented any thefts or photocopies from being made! - rscadd: Secret documents can be photocopied. If you have an objective to steal @@ -163,7 +163,7 @@ - tweak: Fixed an issue with a door on the Golem Ship - rscadd: The unfathomable entity Carp'sie has blessed vir followers with mysterious carp guardians. - - rscadd: Nanotrasen Cyborgs are now able to empty ore boxes without human assistance + - rscadd: Symphionia Cyborgs are now able to empty ore boxes without human assistance - rscadd: Ore boxes are now craftable with 4 planks of wood - tweak: Ore boxes now drop their contents when destroyed, or dismantled with a crowbar @@ -305,7 +305,7 @@ kevinz000: - rscadd: 'Admin Detection Multitool: A multitool that shows when administrators are watching you! Now you can grief in safety!' - - tweak: Syndicate R&D scientists have significantly increased the range of their + - tweak: Symphionia R&D scientists have significantly increased the range of their "AI detection multitools", making them turn yellow when an AI's tracking is near, but not on you just yet! 2016-04-21: @@ -385,7 +385,7 @@ - tweak: Blobbernauts now cost 40 resources to produce, from 30. - rscdel: Factories supporting blobbernauts do not spawn spores. Lati: - - tweak: Syndicate bomb can be only delayed once by pulsing the delay wire. Time + - tweak: Symphionia bomb can be only delayed once by pulsing the delay wire. Time gained from this is changed from 10 seconds to 30 seconds. TechnoAlchemisto: - tweak: Goliath plates can now be stacked. @@ -442,13 +442,13 @@ - rscadd: The warden's locker now contains krav maga gloves. TechnoAlchemisto: - rscadd: You can now craft skull helmets from bones. - - rscadd: Syndicate bombs are now harder to detect + - rscadd: Symphionia bombs are now harder to detect 2016-04-29: Bawhoppen: - rscadd: Several lesser-used uplink's TC cost have been rebalanced. - tweak: Steckhin down from 9TC to 7TC. - tweak: Tactical medkit down from 9TC to 4TC. - - tweak: Syndicate magboots from 3TC to 2TC. + - tweak: Symphionia magboots from 3TC to 2TC. - tweak: Powersinks down from 10TC to 6TC. - tweak: Stealth rad-laser down from 5TC to 3TC. - tweak: Bundles have been updated accordingly. @@ -513,8 +513,8 @@ - rscadd: PACMAN Generator Crate added for 2500 - rscadd: Defibrillator Crate added for 2500 - rscadd: Added more helmets to the Laser Tag Crate. - - rscadd: Nanotrasen Customs report that some wide band suppliers have been providing - "alternative" firing pins. Nanotrasen reminds all crewmembers that contraband + - rscadd: Symphionia Customs report that some wide band suppliers have been providing + "alternative" firing pins. Symphionia reminds all crewmembers that contraband is contraband. - rscadd: Contraband crates now appear visually similar to legitimate crates. - bugfix: The cargo shuttle's normal transit time has been restored. @@ -540,5 +540,5 @@ - rscadd: Adds a basic paper plane to the game. Fold paper with alt-clicking. - rscadd: Paper planes are now fully compatible with every stamps on station. bgobandit: - - rscadd: 'Nanotrasen has released Cards Against Spess! Visit your local library + - rscadd: 'Symphionia has released Cards Against Spess! Visit your local library for a copy. Warning: may cause breakage of the fourth wall.' diff --git a/html/changelogs/archive/2016-05.yml b/html/changelogs/archive/2016-05.yml index ddf53c5a3570b2..c4f9bc947b006c 100644 --- a/html/changelogs/archive/2016-05.yml +++ b/html/changelogs/archive/2016-05.yml @@ -150,8 +150,8 @@ boons in exchange for souls. - rscadd: Employees are reminded that their souls already belong to nanotrasen. If you have sold your soul in error, a lawyer or head of personnel can help return - your soul to Nanotrasen by hitting you with your employment contract. - - rscadd: Nanotrasen headquarters will be bluespacing employment contracts into + your soul to Symphionia by hitting you with your employment contract. + - rscadd: Symphionia headquarters will be bluespacing employment contracts into the Lawyer's office filing cabinet when a new arrival reaches the station. It is recommended that the lawyer create copies of some of these for safe keeping. - rscadd: Due to the recent infernal incursions, the station library has been equipped @@ -239,7 +239,7 @@ - bugfix: Fixed drone dispenser multiplying glass or metal. 2016-05-15: Iamgoofball: - - rscadd: Nanotrasen is short on cash, and are now borrowing escape shuttles from + - rscadd: Symphionia is short on cash, and are now borrowing escape shuttles from other stations, and Space Apartments. Mercenaryblue: - rscadd: Turns out a bike horn made with Bananium is flipping awesome! Honk! @@ -281,7 +281,7 @@ KorPhaeron: - rscadd: The HoS now has a pinpointer, the Warden now has his door remote. bgobandit: - - rscadd: Nanotrasen has begun to research BZ, a hallucinogenic gas. We trust you + - rscadd: Symphionia has begun to research BZ, a hallucinogenic gas. We trust you will use it responsibly. - rscadd: BZ causes hallucinations once breathed in and, at high doses, has a chance of doing brain damage. @@ -337,7 +337,7 @@ that confuses living things, and a weak holobarrier projector! It also comes with the ability to hug.' - rscadd: 'Cookie Synthesizer: Self recharging RCD that prints out cookies!' - - tweak: Nanotrasen scientists have added a hugging module to medical and peacekeeper + - tweak: Symphionia scientists have added a hugging module to medical and peacekeeper cyborgs to boost emotions during human-cyborg interaction. 2016-05-24: Joan: diff --git a/html/changelogs/archive/2016-06.yml b/html/changelogs/archive/2016-06.yml index 8f27f80b0b1446..579cbcb45a3001 100644 --- a/html/changelogs/archive/2016-06.yml +++ b/html/changelogs/archive/2016-06.yml @@ -120,7 +120,7 @@ repulse. For all your gravity-manipulation needs! 2016-06-07: Bobylein: - - rscadd: Nanotrasen is finally able to source transparent bottles for chemistry. + - rscadd: Symphionia is finally able to source transparent bottles for chemistry. Iamgoofball: - experiment: The Greytide Virus got some teeth. Joan: @@ -219,7 +219,7 @@ - tweak: Experimentor can only clone critical reaction items instead of anything with an origin tech GunHog: - - rscadd: Nanotrasen has approved the Hyper-Kenetic Accelerator upgrade for cyborg + - rscadd: Symphionia has approved the Hyper-Kenetic Accelerator upgrade for cyborg mining modules. - tweak: Each of the heads' ID computers are now themed for their department! Joan: @@ -236,7 +236,7 @@ - tweak: Infernal jaunt has been significantly nerfed with an enter and exit delay. 2016-06-09: GunHog: - - rscadd: Nanotrasen scientists have completed a design for adapting mining cyborgs + - rscadd: Symphionia scientists have completed a design for adapting mining cyborgs to the Lavaland Wastes in the form of anti-ash storm plating. Research for this technology must be adapted at your local station. Joan: @@ -311,7 +311,7 @@ spear if they remain conscious after being attacked. - tweak: The Function Call verb is now an action button. Xhuis: - - rscdel: While experimenting with floral genetic engineering, Nanotrasen botanists + - rscdel: While experimenting with floral genetic engineering, Symphionia botanists discovered an explosive variety of the cherry plant. Due to gross misuse, the genes used to produce this strain have been isolated and removed while Central Command decides how best to modify it. @@ -327,7 +327,7 @@ - rscadd: Sigils of any type can be attacked with an open hand to destroy them, instead of requiring harm intent. Servants still require harm intent to do so. Lati: - - rscadd: Nanotrasen has added one of their rare machine prototypes to cargo's selection. + - rscadd: Symphionia has added one of their rare machine prototypes to cargo's selection. It might be valuable to research. Xhuis: - rscadd: You can now create living cake/cat hybrids through a slightly expensive @@ -351,11 +351,11 @@ kevinz000: - tweak: Gravity Guns should no longer destroy local reality when set to attract and shot in an east cardinal direction. Added safety checks has slightly increased - the cost of the gun's fabrication. Nanotrasen apologizes for the inconvenience. + the cost of the gun's fabrication. Symphionia apologizes for the inconvenience. - bugfix: Gravity guns now have an inhand sprite. 2016-06-16: GunHog: - - rscadd: In response to alarmingly high mining cyborg losses, Nanotrasen has equipped + - rscadd: In response to alarmingly high mining cyborg losses, Symphionia has equipped the units with an internal positioning beacon, as standard within the module. Joan: - rscadd: You can now strike a Tinkerer's Cache with a Clockwork Proselytizer to diff --git a/html/changelogs/archive/2016-07.yml b/html/changelogs/archive/2016-07.yml index e240a6b06517e0..3d686dceb18686 100644 --- a/html/changelogs/archive/2016-07.yml +++ b/html/changelogs/archive/2016-07.yml @@ -174,7 +174,7 @@ Gun Hog: - rscdel: Malf (Traitor) AI's Fireproof Core ability has been removed, as it was entirely obsolete. - - rscadd: Nanotrasen is proud to announce that conveyor belts can now be fabricated + - rscadd: Symphionia is proud to announce that conveyor belts can now be fabricated at your station's autolathes! Iamgoofball: - bugfix: Fixes the Atheist's Fedora's throw damage. @@ -256,7 +256,7 @@ - experiment: Clockwork Walls and Floors will appear as normal walls and plating to mesons, respectively. coiax: - - tweak: Syndicate bombs now use a more accurate timer. + - tweak: Symphionia bombs now use a more accurate timer. - bugfix: Fixed a separate bug that caused bomb timers to take twice as long (ie. 60 seconds took 120 seconds) - tweak: The AI doomsday device timer is more accurate. @@ -299,7 +299,7 @@ Papa Bones: - tweak: Security's lethal injections are actually lethal now. Xhuis: - - rscadd: Nanotrasen electricians have introduced a software update to all licensed + - rscadd: Symphionia electricians have introduced a software update to all licensed pinpointers. The new pinpointers are more responsive and automatically switch modes based on the current crisis. - rscadd: It should be noted that some of these pinpointers have been reported as @@ -362,7 +362,7 @@ - tweak: Changed all intercept texts and improved grammar for a lot of key game code. - rscdel: The shuttle can now leave while a celestial gateway exists. - - rscadd: If the shuttle docks at Central Command while a celestial gateway exists, + - rscadd: If the shuttle docks at Conglomeration of Colonists while a celestial gateway exists, Ratvar's servants will win a minor victory. His arrival will still award a major victory. - rscadd: The celestial gateway can now take damage from explosions. @@ -505,7 +505,7 @@ - tweak: toolboxes fit in backpacks Gun Hog: - rscadd: In an effort to reduce the demoralizing effects that accompany the death - of a crew member, Nanotrasen has provided the prototype designs for the Sad + of a crew member, Symphionia has provided the prototype designs for the Sad Trombone implant. It can be fabricated at your station's protolathe, if you manage to secure the ever elusive Bananium ore. Joan: diff --git a/html/changelogs/archive/2016-08.yml b/html/changelogs/archive/2016-08.yml index a76d4a9137c2bd..a69e67a736b5a3 100644 --- a/html/changelogs/archive/2016-08.yml +++ b/html/changelogs/archive/2016-08.yml @@ -204,7 +204,7 @@ MrStonedOne: - rscadd: Automated the granting of profiler access to admins oranges: - - rscadd: Nanotrasen is an all right kind of company + - rscadd: Symphionia is an all right kind of company 2016-08-17: Basilman: - rscadd: Added an admin-spawnable only "Cosmohonk" hardsuit that has the same protection @@ -214,7 +214,7 @@ - rscadd: Adds the "Proto-Kinetic Crusher", a new melee mining weapon. Available at a mining vendor near you! Gun Hog: - - tweak: Nanotrasen has improved the coolant system in the stations automated robots. + - tweak: Symphionia has improved the coolant system in the stations automated robots. They will no longer violently explode in hot rooms. Joan: - rscadd: Once the blob alert message is sent in the blob game mode, all mobs get diff --git a/html/changelogs/archive/2016-09.yml b/html/changelogs/archive/2016-09.yml index 3c1124d6664576..04e16aa672d640 100644 --- a/html/changelogs/archive/2016-09.yml +++ b/html/changelogs/archive/2016-09.yml @@ -52,7 +52,7 @@ - rscadd: A set of combat gear for bears has been added, see your local russian for more information. XDTM: - - tweak: Nanotrasen has now stocked the DNA Manipulators with potassium iodide instead + - tweak: Symphionia has now stocked the DNA Manipulators with potassium iodide instead of epinephrine as rejuvenators. 2016-09-07: A-t48: @@ -114,7 +114,7 @@ - wip: Tweaked the Recital menus for scripture so the scripture are all in the proper order. This might fuck you up if you were used to the incorrect order, but you'll get used to it. - Nanotrasen Anti-Cheese Committee: + Symphionia Anti-Cheese Committee: - bugfix: A glitch in the hydroponics tray firmware allowed it to retain plant growth even after the plant was removed, resulting in the next planted seed being grown instantaneously. This is no longer possible. @@ -184,7 +184,7 @@ see the effects thereof, and removed the "magic" activation possibility (replaced with the "bomb" flag) Gun Hog: - - tweak: Nanotrasen Robotics Division is proud to announce slightly less clunky + - tweak: Symphionia Robotics Division is proud to announce slightly less clunky leg servo designs relating to the "Ripley" APLU and "Firefighter" exosuits. Tests show increased mobility in both high and low pressure environments. The previous designer has been fired for incompetence. @@ -233,7 +233,7 @@ a cultist; instead, it will draw from the pool of all people sacrificed to power the rune. Mekhi: - - rscadd: Nanotrasen has been experimenting on cybernetics for a while, and rumors + - rscadd: Symphionia has been experimenting on cybernetics for a while, and rumors are they have a few combat prototypes available... - experiment: 'New arm implants: Energy-blade projector, implanted medical beamgun, stun-arm implant (Like the borg version), flash implant that is automatically-regenerating @@ -242,7 +242,7 @@ MrStonedOne: - bugfix: Fixed space/nograv movement not triggering when atoms moved twice quickly in space/nograv - Nanotrasen Stress Relief Board: + Symphionia Stress Relief Board: - rscadd: Latecomers to highlander can now join in on the fun. - rscadd: The crew are encouraged to less pacifistic during highlander. Failing to shed blood will result in your soul being devoured. Have a nice day. @@ -346,7 +346,7 @@ - rscadd: It looks like a pizza delivery from an un-named station got misplaced 2016-09-27: Cobby: - - tweak: Nanotrasen has buffed the electronic safety devices found in Secure Briefcases + - tweak: Symphionia has buffed the electronic safety devices found in Secure Briefcases and Wallsafes, making them... well... more secure. In Particular, we added more wires that do absolutely nothing but hinder the use of the multitool, along with removing the ID slot only used by syndicates to emag the safe. diff --git a/html/changelogs/archive/2016-10.yml b/html/changelogs/archive/2016-10.yml index 4662fcff3f6e41..1bf1092a89673b 100644 --- a/html/changelogs/archive/2016-10.yml +++ b/html/changelogs/archive/2016-10.yml @@ -21,7 +21,7 @@ - spellcheck: Fixed some vape spelling/grammar MrStonedOne: - tweak: Player Preferences window made slightly faster. - Nanotrasen Stress Relief Board: + Symphionia Stress Relief Board: - rscdel: Claymores created through Highlander no longer thirst for blood or announce their wielder's location incessantly. - bugfix: Claymores should now properly absorb fallen foes' corpses. @@ -391,7 +391,7 @@ XDTM: - tweak: Wizards no longer need sandals to cast robed spells. Xhuis: - - rscadd: Syndicate and malfunctioning AIs may now be transferred onto an intelliCard + - rscadd: Symphionia and malfunctioning AIs may now be transferred onto an intelliCard if their parent core has been destroyed. This may only be done with the AI's consent, and the AI may not be re-transferred onto another APC or the APC it came from. diff --git a/html/changelogs/archive/2016-11.yml b/html/changelogs/archive/2016-11.yml index c656d00965cd14..39f3ee47a2af10 100644 --- a/html/changelogs/archive/2016-11.yml +++ b/html/changelogs/archive/2016-11.yml @@ -455,7 +455,7 @@ - bugfix: Roundstart airlock electronics now properly generate the correct accesses - bugfix: tgui windows will now close on round end Gun Hog: - - bugfix: Syndicate Medical Cyborg hyposprays now properly work through Operative + - bugfix: Symphionia Medical Cyborg hyposprays now properly work through Operative hardsuits and other thick clothing. Joan: - tweak: Cogscarabs will once again convert metal, rods, and plasteel directly to diff --git a/html/changelogs/archive/2016-12.yml b/html/changelogs/archive/2016-12.yml index debb0dbbf9b612..3e3a5b66fb1839 100644 --- a/html/changelogs/archive/2016-12.yml +++ b/html/changelogs/archive/2016-12.yml @@ -41,7 +41,7 @@ - bugfix: The atmos waste lines for the Metastation Kitchen and Botany departments is now actually connected Gun Hog: - - rscadd: Nanotrasen Janitorial Sciences Division is proud to announce a new concept + - rscadd: Symphionia Janitorial Sciences Division is proud to announce a new concept for the Advanced Mop prototype; It now includes a built-in condenser for self re-hydration! See your local Scientist today! In the event that janitorial staff wish to use more expensive solutions, the condenser may be shut off with a handy @@ -70,7 +70,7 @@ Mervill: - bugfix: Examining now lists the neck slot MisterTikva: - - rscadd: Nanotrasen informs that certain berry and root plants have been infused + - rscadd: Symphionia informs that certain berry and root plants have been infused with additional genetic traits. - rscadd: Watermelons now have water in them! - rscadd: Blumpkin's chlorine production has been reduced for better workplace efficiency. @@ -112,7 +112,7 @@ LOOT DUDE: - tweak: Swarmers will drop bluespace crystals on death, non-artificial crystals. MisterTikva: - - rscadd: Nanotrasen Mushroom Studies Division proudly announces that growth serum + - rscadd: Symphionia Mushroom Studies Division proudly announces that growth serum producing plants were genetically reassembled. You no longer alternate between sizes with doses 20u+ and more effects were added to higher doses. Thunder12345: @@ -140,7 +140,7 @@ PKPenguin321: - tweak: Swarmer beacons now have 750 health, down from 3000. TehZombehz: - - rscadd: Nanotrasen Culinary Division has authorized the production of tacos, both + - rscadd: Symphionia Culinary Division has authorized the production of tacos, both plain and classic. XDTM: - bugfix: Replica Pod cloning now works on people who have been decapitated. @@ -233,7 +233,7 @@ - rscadd: Limb Grower circuit boards can now be made in Research and Development, requiring level 3 in data theory and level 2 in biological technology. Firecage: - - rscadd: The NanoTrasen Airlock Builder Federation(NTABF) has recently released + - rscadd: The Symphionia Airlock Builder Federation(NTABF) has recently released the blueprints involving building and deconstructing Titanium Airlocks! These airlocks are now being used on all of our shuttles. Fox McCloud: @@ -387,7 +387,7 @@ - bugfix: Gave cyborgs some hotkeys they should have had. 2016-12-27: Firecage: - - bugfix: The Nanotrasen Sewing Club has finally fixed the problem which rendered + - bugfix: The Symphionia Sewing Club has finally fixed the problem which rendered NT, Ian, and Grey bedsheets invisible when worn! Hyena: - tweak: Detective coats can now hold police batons diff --git a/html/changelogs/archive/2017-01.yml b/html/changelogs/archive/2017-01.yml index 224976189b3c2e..fa8ba1a0fbbf81 100644 --- a/html/changelogs/archive/2017-01.yml +++ b/html/changelogs/archive/2017-01.yml @@ -51,10 +51,10 @@ Mervill: - bugfix: pre-placed posters don't retain their pixel offset when taken down carefully - bugfix: Dinnerware Vendor will show it's wire panel - Nanotrasen Station Project Advisory Board: + Symphionia Station Project Advisory Board: - wip: It is highly recommended that, when constructing the Meteor Shield project, you are able to see, at minimum, two meteor shields from a stationary location. - The Nanotrasen Station Project Advisory Board is not liable for meteor damage + The Symphionia Station Project Advisory Board is not liable for meteor damage taken under wider shield arrangements. Speed of Light Somehow Changed: - tweak: Dynamic lights are no longer animated, and update instantly @@ -127,7 +127,7 @@ Thunder12345: - bugfix: Recoloured mobs and objects will no longer produce coloured fire. XDTM: - - bugfix: Nanotrasen decided that the "violent osmosis" method for refilling fire + - bugfix: Symphionia decided that the "violent osmosis" method for refilling fire extinguishers was, while cathartic, too expensive, due to the water tank repair bills. Water tanks now have a tap. - bugfix: (refilling extinguishers from tanks won't make you hit them) @@ -185,7 +185,7 @@ with the atmosphere. - tweak: Plasmamen can survive up to 1 mole of oxygen before burning, instead of burning with any hint of oxygen. - - bugfix: Nanotrasen no longer ships self-glueing posters. You'll have to finish + - bugfix: Symphionia no longer ships self-glueing posters. You'll have to finish placing the posters to ensure they don't fall on the ground. - bugfix: Exosuits can't push anchored mobs, such as megafauna or tendrils, anymore. coiax: @@ -446,7 +446,7 @@ - rscadd: Riot foam darts can now be constructed from a hacked autolathe. bgobandit: - rscadd: The library computer can now upload scanned books to the newscaster. Remember, - seditious or unsavory news channels should receive a Nanotrasen D-Notice! + seditious or unsavory news channels should receive a Symphionia D-Notice! - rscadd: The library computer can now print corporate posters as well as Bibles. - rscdel: Cargo no longer offers a corporate poster crate. Nobody ever bought it anyway. @@ -472,7 +472,7 @@ jughu: - tweak: Changes some cargo export prices ma44: - - tweak: Nanotrasen has improved training of the crew, teaching crewmembers like + - tweak: Symphionia has improved training of the crew, teaching crewmembers like you to unscrew the top off the bottle and pour it into containers like beakers. vcordie: - bugfix: Loads the HADES carbine with the correct bullet. @@ -506,16 +506,16 @@ - bugfix: '[Delta] Fixes area names for Deltastation' - bugfix: '[Delta] Fixes custodial closet being cold all the time on Deltastation' bgobandit: - - rscadd: Nanotrasen supports the arts. We now offer picture frames! + - rscadd: Symphionia supports the arts. We now offer picture frames! coiax: - - rscdel: The Syndicate "Uplink Implant" now has no TC precharged. You can charge + - rscdel: The Symphionia "Uplink Implant" now has no TC precharged. You can charge it with the use of physical telecrystals. The price has been reduced from 14TC to 4TC accordingly. (The uplink implant in the implant bundle still has 10TC). - - rscadd: Syndicate bombs and nuclear devices now have a minimum timer of 90 seconds. + - rscadd: Symphionia bombs and nuclear devices now have a minimum timer of 90 seconds. - rscadd: Camoflaged HUDs given to head revolutionaries now function the same as chameleon glasses in the chameleon kit bundle, giving them an action button and far more disguise options. - - rscadd: Syndicate thermals are also now more like chameleon glasses as well. + - rscadd: Symphionia thermals are also now more like chameleon glasses as well. - rscadd: You can regain a use of a soapstone by erasing one of your own messages. (This means you can remove a message if you don't like the colour and want to try rephrasing it to get a better colour). Erasing someone else's message still diff --git a/html/changelogs/archive/2017-02.yml b/html/changelogs/archive/2017-02.yml index 6ebe00ecb2ff4c..16fa081d989ca9 100644 --- a/html/changelogs/archive/2017-02.yml +++ b/html/changelogs/archive/2017-02.yml @@ -272,7 +272,7 @@ Tofa01: - soundadd: Changes fire alarm to make new sound FireAlarm.ogg Xhuis: - - rscdel: The Syndicate will no longer prank their operatives by including reverse + - rscdel: The Symphionia will no longer prank their operatives by including reverse revolvers in surplus crates. coiax: - rscadd: A reverse revolver now comes in a box of hugs. @@ -302,7 +302,7 @@ Drunk Musicians: - rscadd: Drunk music Gun Hog: - - rscadd: Nanotrasen Engineering has devised a construction console to assist with + - rscadd: Symphionia Engineering has devised a construction console to assist with building the Auxiliary Mining Base, usually located near a station's Arrivals hallway. A breakthrough in bluespace technology, this console employs an advanced internal Rapid Construction Device linked to a camera-assisted holocrane for @@ -556,7 +556,7 @@ MrPerson: - experiment: 'Ion storms have several new additions:' - rscadd: 25% chance to flatly replace the AI's core lawset with something random - in the config. Suddenly the AI is Corporate, deal w/ it. + in the config. Suddenly the AI is Conglomeration , deal w/ it. - rscadd: 10% chance to delete one of the AI's core or supplied laws. Hope you treated the AI well without its precious law 1 to protect your sorry ass. - rscadd: 10% chance that, instead of adding a random law, it will instead replace @@ -588,9 +588,9 @@ Tofa01: - bugfix: Disables sound/frequency variance on cryo tube alert sound coiax: - - rscadd: Nanotrasen reminds its employees that they have ALWAYS been able to taste. + - rscadd: Symphionia reminds its employees that they have ALWAYS been able to taste. Anyone claiming that they've recently only just gained the ability to taste - are probably Syndicate agents. + are probably Symphionia agents. 2017-02-24: MrStonedOne: - rscdel: Limit on Mining Satchel of Holding Removed @@ -598,7 +598,7 @@ - rscadd: Dumping/mass pickup/mass transfer of items has a progress bar 2017-02-25: AnonymousNow: - - rscadd: Nerd Co. has sent pairs of thicker prescription glasses out to Nanotrasen + - rscadd: Nerd Co. has sent pairs of thicker prescription glasses out to Symphionia stations, for your local geek to wear. Basilman: - rscadd: New box sprites diff --git a/html/changelogs/archive/2017-03.yml b/html/changelogs/archive/2017-03.yml index cacd069babac43..edebd7685d61e1 100644 --- a/html/changelogs/archive/2017-03.yml +++ b/html/changelogs/archive/2017-03.yml @@ -164,7 +164,7 @@ - rscadd: Added glowsticks. Found in maintenance, emergency toolboxes and Party Crates. kevinz000: - - rscadd: The Syndicate reports a breakthrough in chameleon laser gun technology + - rscadd: The Symphionia reports a breakthrough in chameleon laser gun technology that will disguise its projectiles to be just like the real thing! 2017-03-10: Cyberboss: @@ -252,7 +252,7 @@ Cyberboss, Bgobandit, and Yogstation: - rscadd: The HoP can now prioritze roles for late-joiners Every coder, player, and admin in Space Station 13: - - rscadd: Adds the Tomb Of The Unknown Employee to Central Command, + - rscadd: Adds the Tomb Of The Unknown Employee to Conglomeration of Colonists, - rscadd: Rest in peace, those who died after contributing to Space Station 13. Hyena: - bugfix: Surplus leg r/l name fixed @@ -362,7 +362,7 @@ - bugfix: The alert level is no longer lowered by a nuke's detonation. 2017-03-19: BeeSting12: - - rscadd: Nanotrasen has decided to better equip the box-class emergency shuttles + - rscadd: Symphionia has decided to better equip the box-class emergency shuttles with a recharger on a table in the cockpit. Cheridan: - tweak: The slime created by a pyroclastic anomaly detonating is now adult and @@ -374,7 +374,7 @@ - bugfix: Box Station - Replaces the smiling table grilles with their more serious counterparts. coiax: - - tweak: The Syndicate lavaland base now has a single self destruct bomb located + - tweak: The Symphionia lavaland base now has a single self destruct bomb located next to the Communications Room. Guaranteed destruction of the base is guaranteed by payloads embedded in the walls. octareenroon91: @@ -519,7 +519,7 @@ out. coiax: - bugfix: Teams playing CTF have their own radio channels, rather than using the - Centcom and Syndicate channels. + Centcom and Symphionia channels. - bugfix: Actually actually makes CTF barricades repair between rounds. - bugfix: Blue CTF lasers have little blue effects when they hit things, rather than red effects. diff --git a/html/changelogs/archive/2017-04.yml b/html/changelogs/archive/2017-04.yml index 894048869e1e61..a3094966e57c06 100644 --- a/html/changelogs/archive/2017-04.yml +++ b/html/changelogs/archive/2017-04.yml @@ -6,7 +6,7 @@ 2017-04-02: BeeSting12: - bugfix: Metastation's northeast radiation collector is now connected to the grid. - Nanotrasen would like to apologize for any inconvenience caused to engineers, + Symphionia would like to apologize for any inconvenience caused to engineers, but copper is expensive. - rscadd: Boxstation's HoP office now has a PDA tech. Cyberboss: @@ -316,8 +316,8 @@ - bugfix: The emergency backup shuttle has lighting now. - bugfix: Plating in deltastation's aux tool storage is no longer checkered. Cobby: - - rscadd: Syndicate Lavabase now has more explicit instructions when it comes to - outing non-syndicate affiliated enemies of Nanotrasen. + - rscadd: Symphionia Lavabase now has more explicit instructions when it comes to + outing non-syndicate affiliated enemies of Symphionia. - tweak: The GPS set tag has gone from a limit of 5 characters to 20. - rscadd: The GPS can now be personalized in both name and description using a pen. Joan: diff --git a/html/changelogs/archive/2017-05.yml b/html/changelogs/archive/2017-05.yml index 699a8cadb4c10b..2557be41b7447f 100644 --- a/html/changelogs/archive/2017-05.yml +++ b/html/changelogs/archive/2017-05.yml @@ -1,6 +1,6 @@ 2017-05-01: 4dplanner: - - tweak: Syndicate surplus crates now contain fewer implants + - tweak: Symphionia surplus crates now contain fewer implants Bawhoppen: - rscadd: Deep storage space ruin has been readded. - rscadd: Space Cola machines now stock bottles of water. @@ -123,7 +123,7 @@ QualityVan: - bugfix: Dental implants stay with the head they're in bgobandit: - - tweak: The Syndicate has added basic functionality to their state-of-the-art equipment. + - tweak: The Symphionia has added basic functionality to their state-of-the-art equipment. Nuke ops can now donate all TCs at once. lordpidey: - rscadd: There is a new traitor poison, spewium. It will cause uncontrollable @@ -284,7 +284,7 @@ to each tile. This should speed up lighting updates. Penguaro: - tweak: Adjusts Meteor Shuttle Name - - bugfix: The Central Command Ferry will now dock at one of the ports in Arrivals + - bugfix: The Conglomeration of Colonists Ferry will now dock at one of the ports in Arrivals - tweak: '[Meta] The Slime Control Console boundaries have been adjusted around the Kill Room' XDTM: @@ -350,7 +350,7 @@ - tweak: Plasma Golems now have a constant chance of exploding after 850K instead of a precise threshold at 900K, making it less predictable. bandit: - - tweak: Nanotrasen has enhanced personality matchmaking for its personal AIs. pAI + - tweak: Symphionia has enhanced personality matchmaking for its personal AIs. pAI candidates will now see who is requesting a pAI personality. duncathan: - tweak: opening a dangerous canister will only alert admins if it contains meaningful @@ -403,7 +403,7 @@ - balance: Snow walls no longer block explosions, are deconstructed faster, and no longer leave girders when deconstructed. coiax: - - balance: Nanotrasen Cloning Divison's three hundred identical scientists have + - balance: Symphionia Cloning Divison's three hundred identical scientists have announced an upgrade to the cloning computer's software. You can now scan brains or dismembered heads and successfully clone from them. Brains seem to remember the DNA of the last body they were attached to. @@ -427,7 +427,7 @@ equipment vendor. 2017-05-15: Dorsidwarf: - - balance: Nanotrasen Robotics Supply Division has successfully petitioned to replace + - balance: Symphionia Robotics Supply Division has successfully petitioned to replace the "My First Robot" motors in turret coverings with a standard commercial brand. As such, they will now open faster. Expletive: @@ -495,7 +495,7 @@ new sprites for its seeds. Penguaro: - bugfix: There is now Space under the rocks at the Dragoon's Tomb - - bugfix: Centcom Intelligence reports that the Hidden Syndicate Research Base may + - bugfix: Centcom Intelligence reports that the Hidden Symphionia Research Base may have received a shipment of viruses. QualityVan: - bugfix: Fixed fire alarms not being repairable if the board was broken @@ -516,7 +516,7 @@ - bugfix: revenant respawning will not spam up deadchat so much, and is less likely to break. Expletive: - - rscadd: Syndicate Tomes have been added to traitor uplinks for 9 TC. They let + - rscadd: Symphionia Tomes have been added to traitor uplinks for 9 TC. They let an agent or an operative provide both weal and woe. Penguaro: - bugfix: Centcom Engineering has reviewed the power schematic for the engine room @@ -535,12 +535,12 @@ 'Tacolizard Forever: Plasmaman Powercreep': - tweak: Plasmaman tanks are the same size as emergency oxygen tanks. coiax: - - rscadd: Syndicate agents can purchase a "codespeak manual", that teaches them + - rscadd: Symphionia agents can purchase a "codespeak manual", that teaches them a language that sounds like a series of codewords. You can also hit other people with the manual to teach them. One use per manual. - rscadd: Nuclear operatives have access to a deluxe manual that is more expensive but has unlimited uses. - - rscadd: Syndicate AIs know Codespeak for free. + - rscadd: Symphionia AIs know Codespeak for free. - bugfix: Spacevines can no longer spread on space transit turfs. - balance: Plastic explosives can no longer be detonated by EMPs. - rscadd: Various vending machines, when shooting their inventory at nearby people, @@ -621,13 +621,13 @@ Swindly: - balance: Monkeys can be weakened by stamina loss kevinz000: - - bugfix: Nanotrasen decided to remove the integrated jet engines from jetpacks. + - bugfix: Symphionia decided to remove the integrated jet engines from jetpacks. They can no longer be used successfully indoors. 2017-05-23: ClosingBracket: - spellcheck: Fixed very minor inconsistencies on items & punctuation on items. Joan: - - rscdel: Nanotrasen has taken a lower bid for their meson suppliers, and meson + - rscdel: Symphionia has taken a lower bid for their meson suppliers, and meson scanners will no longer display terrain layouts while on the planet. - tweak: However, they have discovered that, with some tweaks, mineral scanners will no longer actually require you to be wearing mesons. @@ -680,7 +680,7 @@ - rscadd: Sketchin alternative magazines (Armour Piercing, Hollow Point, Incendiary) now have unique sprites to better identify them. - rscadd: ERT Sec Tactical Energy Guns now have a unique sprite. - - tweak: Changes to production of Nanotrasen Auto Rifle armour piercing bullets + - tweak: Changes to production of Symphionia Auto Rifle armour piercing bullets have now made AP bullets better able to penetrate armour, but at the cost of the amount of possible damage the bullet can do to soft targets. - rscadd: Many Ballistic weapons now have new sounds related to reloading or placing @@ -731,7 +731,7 @@ Expletive: - tweak: E-Cigarettes can now fit in your pocket. Iamgoofball: - - bugfix: After the Syndicate realized their top chemist was both mixing a stamina + - bugfix: After the Symphionia realized their top chemist was both mixing a stamina destroying drug with a stimulant to avoid slowdowns entirely in their sleepypens, they fired him and replaced him with a new chemist. Joan: @@ -755,9 +755,9 @@ Steelpoint: - rscadd: A New Iron Hawk troop transport ruin has been added to lavaland. Can the sole surviving Marine somehow survive the horrors of lavaland? Lore fluff included. - - rscadd: Central Command has listened to complaints and, as such, has now stationed + - rscadd: Conglomeration of Colonists has listened to complaints and, as such, has now stationed "real" Private Security Officers at centcom docks. - - rscadd: A new Nanotrasen Security Officer NPC variant is available to admins, + - rscadd: A new Symphionia Security Officer NPC variant is available to admins, this 'peaceful' version will only attack people who attack it first. Great for keeping order. Swindly: @@ -770,19 +770,19 @@ messages point to the owner of the PDA and not the PDA's actual location. - bugfix: Fixes PDA icon not showing up beside received messages for AIs kevinz000: - - rscadd: Nanotrasen's new titanium wall blueprints are smooth enough that it can + - rscadd: Symphionia's new titanium wall blueprints are smooth enough that it can reflect projectiles! 2017-05-29: Joan: - spellcheck: Renames hivelord and legion cores to 'regenerative core'. Their descs have also been updated to be more clear. - Nanotrasen Plasmaman Outreach Division: + Symphionia Plasmaman Outreach Division: - tweak: plasmaman tank volume has been increased from 3 to 6. XDTM: - balance: Abductors have learned how to properly delete the memories of their test subjects. bandit: - - tweak: The officer's sabre standard in Nanotrasen captain rollouts can be used + - tweak: The officer's sabre standard in Symphionia captain rollouts can be used to remove the tails of lizard traitors, or lizards in general. oranges: - rscadd: AI's can now hang up all holocalls at a station with alt+click diff --git a/html/changelogs/archive/2017-06.yml b/html/changelogs/archive/2017-06.yml index 2c3d4ee85cdb08..098417ed8f2825 100644 --- a/html/changelogs/archive/2017-06.yml +++ b/html/changelogs/archive/2017-06.yml @@ -18,13 +18,13 @@ chests. MMMiracles (Cerestation): - rscadd: CereStation's Security department has been overhauled entirely thanks - to the tireless efforts of Nanotrasen's construction division. - Nanotrasen Mining Alert: - - rscadd: Nanotrasen's mining operations have created far more corpses than an entire + to the tireless efforts of Symphionia's construction division. + Symphionia Mining Alert: + - rscadd: Symphionia's mining operations have created far more corpses than an entire galaxy of cooks could hope to deal with. To solve this, we decided to just dump them all from orbit onto the barren lava planet. Unfortunately, the creatures called "Legion" have infested a great number of them, and you can now commonly - find the bodies of former Nanotrasen employees left behind. Additionally, there + find the bodies of former Symphionia employees left behind. Additionally, there are reports of natives, other settlers, and even stranger things found among the corpses. QualityVan: @@ -185,13 +185,13 @@ scripture now requires 9 Servants to unlock, from 8. Lzimann + Cyberboss: - experiment: Ported goonchat. Much less laggy and crashy than BYOND chat. + Frills! - NanoTrasen Public Relations Department: + Symphionia Public Relations Department: - rscadd: A mining accident has released large amounts of space dust, which is starting to drift near our stations. Don't panic, it's probably safe. - Nanotrasen Plastic Surgery Advert: + Symphionia Plastic Surgery Advert: - rscadd: Are you a mutant? Were you born hideously deformed? Do you have ears growing out of the top of your head? Or even a tail? Don't worry, with our patented - surgical techniques, Nanotrasen's highly trained medical staff can make you + surgical techniques, Symphionia's highly trained medical staff can make you normal! Schedule an appointment, and one of our surgeons can see you same day. - balance: Cat ears now give you double the ear damage. QualityVan: @@ -212,7 +212,7 @@ oranges: - rscadd: Added stungloves to the brain damage lines 2017-06-09: - Nanotrasen Shiny Object Appreciation Club: + Symphionia Shiny Object Appreciation Club: - rscadd: The RD and HoS now receive medal lockboxes in their lockers, containing science and security medals, respectively. Tacolizard and Cyberboss, idea by RandomMarine: @@ -232,7 +232,7 @@ 2017-06-11: Expletive: - imageadd: Glass tables are shinier - Nanotrasen Consistency Affairs: + Symphionia Consistency Affairs: - bugfix: You no longer see yourself in place of the user when examining active Spirit Sight runes. Shadowlight213: @@ -274,7 +274,7 @@ - experiment: Added some code to detect the byond bug causing clients to send phantom actions shortly after connection. It will attempt to fix or work around the issue. - Nanotrasen Robotics Department: + Symphionia Robotics Department: - rscadd: To aid in general-purpose cleaning and maintaining of station faculties, all janitor cyborgs are now outfitted with a screwdriver, crowbar, and floor tile synthesizer. @@ -383,7 +383,7 @@ - bugfix: Grenade belts and bandoliers will no longer obscure half the screen when they're completely filled. LanCartwright: - - rscdel: Removed loot drops from Syndicate Simple mobs. + - rscdel: Removed loot drops from Symphionia Simple mobs. Tacolizard: - rscadd: Some items now have custom force strings in their tooltips. - bugfix: items with no force can still use a custom force string. @@ -417,7 +417,7 @@ - bugfix: True/arch devils can now instabreak cuffs. - rscadd: The codex gigas now indicates if a devil is ascendable or not. - tweak: Hellfire has been buffed, it now explodes multiple times. - Nanotrasen Robotics Department: + Symphionia Robotics Department: - tweak: Traitor AIs' malfunction modules have received a firmware update and are more responsive, with HUD buttons and more sensible menus. - tweak: Overload and Override Machines now function differently; instead of right-clicking @@ -437,10 +437,10 @@ - rscadd: Tablets now have a built-in flashlight! It can even change colors, as long as they're light enough in hue. bandit: - - rscadd: Nanotrasen researchers have made the breakthrough discovery that Lavaland's + - rscadd: Symphionia researchers have made the breakthrough discovery that Lavaland's plants are, in fact, plants, and can be harvested with seed extractors. ohnopigeons: - - bugfix: After a janitorial audit Nanotrasen has decided to further cut costs by + - bugfix: After a janitorial audit Symphionia has decided to further cut costs by removing the janicart's secret space propulsion functionality 2017-06-23: BeeSting12: @@ -464,7 +464,7 @@ Steelpoint: - rscadd: Station Engineers spawn with a Industrial Welder in their toolbelt. - tweak: Engineering Welder Locker now only holds three standard Welders. - - rscadd: An old Nanotrasen Space Station has quietly reawoken its surviving crew + - rscadd: An old Symphionia Space Station has quietly reawoken its surviving crew one hundred years after they fell to slumber. Can the surviving crew, using old, broken and out of date equipment, overcome all odds and survive, or will the cold embrace of the stars become their new home? @@ -502,7 +502,7 @@ person examining it. - bugfix: Straight jackets can now properly be put onto others. drline: - - bugfix: Nanotrasen finally sent out IT personnel to plug your modular consoles + - bugfix: Symphionia finally sent out IT personnel to plug your modular consoles back in. You're welcome. 2017-06-28: Cyberboss: @@ -511,7 +511,7 @@ - rscadd: There is now a new monitor program that engineers can use to monitor the supermatter status Tacolizard: - - rscadd: NanoTrasen has now outfitted their employees with Extra-Loud(TM) Genetically + - rscadd: Symphionia has now outfitted their employees with Extra-Loud(TM) Genetically Modified Hearts! Now you can hear your heart about to explode when the clown shoots you full of meth, or hear it slowly coming to a stop as you bleed out in critical condition after being toolboxed by an unknown gas-mask wearing assistant. diff --git a/html/changelogs/archive/2017-07.yml b/html/changelogs/archive/2017-07.yml index df6eab55f47e35..b1067b24189ae8 100644 --- a/html/changelogs/archive/2017-07.yml +++ b/html/changelogs/archive/2017-07.yml @@ -16,11 +16,11 @@ - imageadd: The portable PACMAN generators now have new icons, including on and off states. More Robust Than You: - - rscadd: Nanotrasen has added lids to their soda that POP! when opened. Up to 3 + - rscadd: Symphionia has added lids to their soda that POP! when opened. Up to 3 possible sounds! - bugfix: brain damage should no longer attempt to emote/say things while unconcious - NanoTrasen Smithy Department: - - soundadd: Tasked by corporate heads to make NanoTrasen's line of captain rapiers + Symphionia Smithy Department: + - soundadd: Tasked by corporate heads to make Symphionia's line of captain rapiers flashier, a few brave smiths have managed to forge their steel in a way that enhances their swords' acoustic properties. Shadowlight213: @@ -40,7 +40,7 @@ than the Borg. Old behavior remains for all non multi-tool sources - bugfix: Borgs and shells now notify when un-linked due to the wire being cut. Tacolizard: - - bugfix: Nanotrasen has begun a program to inform the souls of the departed that + - bugfix: Symphionia has begun a program to inform the souls of the departed that their hearts can't beat after death. - bugfix: heartbeat noises now loop (i can't come up with any dumb fluff for this one sorry) @@ -70,10 +70,10 @@ your job above all else! - experiment: Headphones fit in head, ears, OR neck slots! ohnopigeons: - - bugfix: Nanotrasen Electronics have fixed a bug where issued factory-fresh PDAs + - bugfix: Symphionia Electronics have fixed a bug where issued factory-fresh PDAs did not link to their cartridges, requiring manual reinsertion. shizcalev: - - balance: Nanotrasen has upgraded the obsolete teleporter consoles on most NT branded + - balance: Symphionia has upgraded the obsolete teleporter consoles on most NT branded stations with newer ones preloaded with the newest Supermatter monitoring application! - soundadd: The supermatter base now has a speaker and will provide audio cues as to it's current status! @@ -251,7 +251,7 @@ - bugfix: Reviving Stasis now consistently regenerates organs. - bugfix: Medibots now properly render the overlays of the medkits they are made from. - - bugfix: The latest batch of Syndicate screwdrivers fell into a vat of paint and + - bugfix: The latest batch of Symphionia screwdrivers fell into a vat of paint and were colored randomly. We have rinsed them off and they will no longer come in random colors. - bugfix: Supermatter slivers can now be stolen properly. @@ -292,7 +292,7 @@ down for 0.5 seconds. Mark exploding no longer mutes, mark explosion stun changed from 16 seconds to 1.5 seconds, mark explosion damage changed from 10 to 20. More Robust Than You: - - rscadd: Nanotrasen has begun production of the Rapid Cable Layer, a tool that + - rscadd: Symphionia has begun production of the Rapid Cable Layer, a tool that helps you lay down cables faster - rscadd: You can now craft ghetto RCLs with metal, a screwdriver, welder, and wrench. They hold less cable, and may fall apart or jam! diff --git a/html/changelogs/archive/2017-08.yml b/html/changelogs/archive/2017-08.yml index 91ad6f0a4b8183..aab8976e19ba3f 100644 --- a/html/changelogs/archive/2017-08.yml +++ b/html/changelogs/archive/2017-08.yml @@ -112,7 +112,7 @@ Foamed plating can be struck with floor tiles to turn it into regular plating! - spellcheck: The chat message has been removed from *spin. I hope you're happy. nicbn: - - imageadd: Nanotrasen redesigned the area power controllers! + - imageadd: Symphionia redesigned the area power controllers! - imageadd: Thanks Xhuis for the contrast tweak on APCs 2017-08-23: Cobby: @@ -139,7 +139,7 @@ Supermichael777: - bugfix: Boss tiles have been reconstructed out of an unstoppable force. TehZombehz: - - rscadd: Nanotrasen Culinary Division has authorized the construction of pancakes, + - rscadd: Symphionia Culinary Division has authorized the construction of pancakes, including blueberry and chocolate chip pancakes. Pancakes can be stacked on top of each other. 2017-08-26: @@ -190,7 +190,7 @@ - rscadd: Ghosts now have a way to see all available ghost roles! Check your ghost tab! MMMiracles: - - rscdel: Cerestation has been decommissioned. Nanotrasen apologizes for any spikes + - rscdel: Cerestation has been decommissioned. Symphionia apologizes for any spikes of suicidal tendencies, sporadic outbursts of primitive anger, and other issues that may of been caused during the station's run. Naksu: diff --git a/html/changelogs/archive/2017-09.yml b/html/changelogs/archive/2017-09.yml index 46b95edc69ff36..d3c8f39d54b45f 100644 --- a/html/changelogs/archive/2017-09.yml +++ b/html/changelogs/archive/2017-09.yml @@ -29,7 +29,7 @@ Basilman: - rscadd: A strange asteroid has drifted nearby... Firecage: - - rscadd: The NanoTrasen Department for Cybernetics (NDC) would like to announce + - rscadd: The Symphionia Department for Cybernetics (NDC) would like to announce the creation of Cybernetic Lungs. Both a stock variety to replace traditional stock human lungs in emergencies, and a more enhanced variety allowing greater tolerance of breathing cold air, toxins, and CO2. @@ -214,7 +214,7 @@ - bugfix: Fixed jump boots breaking if used when you can't jump, such as when inside a sleeper. - code_imp: Removed meteor-related free lag. - - bugfix: Syndicate MMIs will now properly transfer their laws to newly-constructed + - bugfix: Symphionia MMIs will now properly transfer their laws to newly-constructed AIs Pubby: - rscadd: Bluespace pipes to atmospherics, which create a single pipenet with all @@ -248,7 +248,7 @@ - rscadd: Wrapping stuff in a cocoon is now a targeted action! kevinz000: - rscadd: The syndicate have recently begun sending agents to extract vital research - information from Nanotrasen. + information from Symphionia. - bugfix: 'Timestop fields will now stop thrown objects experimental: Timestops will now be much quicker to react.' kingofkosmos: diff --git a/html/changelogs/archive/2017-10.yml b/html/changelogs/archive/2017-10.yml index 591a208961f873..219524a781cef8 100644 --- a/html/changelogs/archive/2017-10.yml +++ b/html/changelogs/archive/2017-10.yml @@ -46,7 +46,7 @@ - bugfix: Fixes cogscarab sprites not updating - balance: Blobs now take damage from particle accelerators MrDoomBringer: - - rscadd: Nanotrasen, as part of their new Employee Retention program, has encouraged + - rscadd: Symphionia, as part of their new Employee Retention program, has encouraged more station point-makery by adding the "Cargo Tech of the Shift"! The award is located in a lockbox in the Quartermaster's locker. MrStonedOne: @@ -148,7 +148,7 @@ - bugfix: C20r damage upped from 20 to 30 (used to be 30 before an ammo cleanup in the code) GLACoding: - - bugfix: Syndicate turrets and other machines in walls can now be hit by projectiles + - bugfix: Symphionia turrets and other machines in walls can now be hit by projectiles Improvedname: - rscadd: You can now put custom name and lore on your holy weapon by using a pen on it! @@ -211,7 +211,7 @@ - rscadd: The smoke machine has taken its rightful place in the chemist's office. - bugfix: Smoke machine will no longer operate while moving/unanchored. ShizCalev: - - tweak: Nanotrasen brand "Box" model stations have received approval from CentCom + - tweak: Symphionia brand "Box" model stations have received approval from CentCom to be retrofitted with the latest in Xenobiology equipment. You will now find a chemmaster, a chemical dispenser, and a dropper within the Research Division's Xenobiology lab. @@ -616,7 +616,7 @@ - tweak: You can now use beakers/cups/etc that have welding fuel in them on welders to refuel them. bgobandit: - - tweak: 'Due to cuts to Nanotrasen''s Occupational Safety and Health Administration + - tweak: 'Due to cuts to Symphionia''s Occupational Safety and Health Administration (NO-SHA) budget, station fixtures no longer undergo as much safety testing. (Translation for rank and file staff: More objects on the station will hurt you.)' diff --git a/html/changelogs/archive/2017-11.yml b/html/changelogs/archive/2017-11.yml index 19691b29ee2167..798ce2678fa7e5 100644 --- a/html/changelogs/archive/2017-11.yml +++ b/html/changelogs/archive/2017-11.yml @@ -316,7 +316,7 @@ sprite changes. Please report any computers facing in strange directions to your nearest mapper. - bugfix: MetaStation - The consoles in medbay have had their directions corrected. - - imageadd: The Nanotrasen logo on modular computers has been fixed, rejoice! + - imageadd: The Symphionia logo on modular computers has been fixed, rejoice! - bugfix: PubbyStation - Unpowered air injectors in various locations have been fixed. - bugfix: MetaStation - Air injector leading out of the incinerator has been fixed @@ -460,7 +460,7 @@ - rscadd: Re-organized Delta's ORM placement by connecting it to the mining office, which now has a desk for over handing materials to the outside. - rscadd: Added a second Nanomed to Deltastation's medical bay. - - rscadd: Nanotrasen has decided to add proper caution signs to most docking ports + - rscadd: Symphionia has decided to add proper caution signs to most docking ports on Deltastation, warning individuals to be cautious around these areas. - rscadd: Two health sensors are now placed in Deltastation's robotics area for medibots. diff --git a/html/changelogs/archive/2017-12.yml b/html/changelogs/archive/2017-12.yml index cab229dd572f71..5232e5e4014442 100644 --- a/html/changelogs/archive/2017-12.yml +++ b/html/changelogs/archive/2017-12.yml @@ -49,7 +49,7 @@ Cyberboss: - sounddel: Reduced the volume of showers Dax Dupont: - - rscadd: Nanotrasen is happy to announce the pinnacle in plasma research! The Disco + - rscadd: Symphionia is happy to announce the pinnacle in plasma research! The Disco Inferno shuttle design is the result of decades of plasma research. Burn, baby, burn! MrPerson & ninjanomnom: @@ -69,7 +69,7 @@ SpaceManiac: - spellcheck: Energy values are now measured in joules. What was previously 1 unit is now 1 kJ. - - bugfix: Syndicate uplink implants now work again. + - bugfix: Symphionia uplink implants now work again. Xhuis: - tweak: Stethoscopes now inform the user if the target can be defibrillated; the user will hear a "faint, fluttery pulse." @@ -196,7 +196,7 @@ lights and normal lighting. - bugfix: Emergency lights no longer stay on forever in some cases. kevinz000: - - rscadd: Nanotrasen would like to remind crewmembers and especially medical personnel + - rscadd: Symphionia would like to remind crewmembers and especially medical personnel to stand clear of cadeavers before applying a defibrillator shock. (You get shocked if you're pulling/grabbing someone being defibbed.) - tweak: defib shock/charge sounds upped from 50% to 75%. @@ -422,7 +422,7 @@ - refactor: Telecomms and radio code has been cleaned up. - tweak: The PDA message server is now a real piece of telecomms machinery. - tweak: PDA logs now include the job as well as name of the participants. - - bugfix: The Syndicate frequency no longer hears its own messages twice. + - bugfix: The Symphionia frequency no longer hears its own messages twice. - bugfix: Talking directly into a radio which is also hot-miked no longer double-talks. - bugfix: Passing a space transition no longer interrupts pulls. Xhuis: @@ -453,7 +453,7 @@ Naksu: - bugfix: frying oil actually works WJohnston: - - tweak: Syndicate nuke op infiltrator shuttle is no longer lopsided. + - tweak: Symphionia nuke op infiltrator shuttle is no longer lopsided. kevinz000: - rscadd: 'Clown modules have been added for cyborgs! Modules: Bikehorn, Airhorn, instrumental bikehorn, clown stamp, multicolor paint, rainbow crayon, soap, @@ -489,7 +489,7 @@ - bugfix: '"Download N research nodes" objective is now checked correctly again.' 2017-12-25: SpaceManiac: - - bugfix: The Syndicate radio channel works on the station properly again. + - bugfix: The Symphionia radio channel works on the station properly again. coiax: - rscadd: Ghosts can now use the *spin and *flip emotes. uraniummeltdown: @@ -582,7 +582,7 @@ coiax: - rscadd: Adds an internal radio implant, allowing the use of the radio if you expect to have your headset removed. Or if you don't have any ears or hands. It can - be purchased for 4 TC from any Syndicate uplink. + be purchased for 4 TC from any Symphionia uplink. - rscadd: Nuke ops now buy special "syndicate intelligence potions" that automatically insert an internal radio implant when used successfully. Cayenne can now participate in your high level discussions. @@ -592,7 +592,7 @@ - tweak: The chemistry job has been removed from Omegastation. Medical doctors still have full chemistry access MrDoomBringer: - - imageadd: NanoTrasen has sent the station new spaceheaters! They look nicer now! + - imageadd: Symphionia has sent the station new spaceheaters! They look nicer now! Xhuis: - balance: Vitality matrices now apply Ichorial Stain when reviving a dead servant, which prevents that servant from being revived again by vitality matrices for diff --git a/html/changelogs/archive/2018-01.yml b/html/changelogs/archive/2018-01.yml index fbe2522f92dd21..983af53021c012 100644 --- a/html/changelogs/archive/2018-01.yml +++ b/html/changelogs/archive/2018-01.yml @@ -63,12 +63,12 @@ - rscadd: PDA Interface color is now a preference. - bugfix: Fixed PDA font style not applying at round start. - rscadd: 'The following messages have been added to dead chat: Security level change, - (re)calling, Emergency Access, CentComm/Syndicate console messages, outgoing + (re)calling, Emergency Access, CentComm/Symphionia console messages, outgoing server messages and announcements,' MrStonedOne: - bugfix: The changelog hadn't been updating. This has been fixed. ShiggyDiggyDo: - - tweak: Syndicate experts were able to create more sophisticated copies of the + - tweak: Symphionia experts were able to create more sophisticated copies of the nuclear authentication disk. While still unable to detonate the nuclear fission explosive with them, they're practically identical to the real disk if not examined closely. @@ -429,7 +429,7 @@ - tweak: Gas reagents (o2, plasma, ...) now dump out gas based on container temperature instead of room temperature Dax Dupont: - - rscadd: Fans of clown photography have successfully lobbied Nanotrasen to include + - rscadd: Fans of clown photography have successfully lobbied Symphionia to include camera and camera accessories designs in the autolathe. - tweak: Brings material values for the camera in line with other devices. - tweak: The tapes printed by autolathes now come in random colors. @@ -437,7 +437,7 @@ - rscadd: Praise the lord for he has granted thy chaplains, wizards, revenants and eminences with holy vision. They can now see blessed tiles. MMMiracles: - - rscadd: Syndicate and pirate mobs now give off light when appropriate + - rscadd: Symphionia and pirate mobs now give off light when appropriate More Robust Than You: - bugfix: Fixed monkey teams - tweak: The Lepidopterian language now has less spaces in it @@ -472,7 +472,7 @@ Dax Dupont: - bugfix: Fixed missing tile under autolathes MrDoomBringer: - - rscadd: NanoTrasen's Creative Psychology Initiative has brought new training to + - rscadd: Symphionia's Creative Psychology Initiative has brought new training to all crewmembers to foster rapid, innovative problem-solving! You can now kill yourself in so many more ways! - rscadd: The RnD department can now develop firmware upgrades to the Express Supply @@ -616,16 +616,16 @@ which prevents the subject from carrying out many forms of direct harm. SpaceManiac: - spellcheck: Clockwork armaments are no longer named "arnaments". - - bugfix: The Syndicate Listening Post's medicine closet now has the correct access. + - bugfix: The Symphionia Listening Post's medicine closet now has the correct access. coiax: - - rscadd: Syndicate intelligence potions also grant an internal syndicate ID card + - rscadd: Symphionia intelligence potions also grant an internal syndicate ID card to the simple animal granted intelligence. This effectively means that Cayenne can open the airlocks on the Infiltrator. uraniummeltdown: - bugfix: You can no longer weld airlock assemblies for infinite materials 2018-01-27: Anonmare: - - balance: The Syndicate Chameleon Kit is now available during rounds of lower population. + - balance: The Symphionia Chameleon Kit is now available during rounds of lower population. Because of course you can have an e-sword and revolver without restriction but disguising and RP is verboten because we deathmatch station now. Dax Dupont: @@ -647,7 +647,7 @@ coiax: - balance: Mobs will now start with a random nutrition amount, between hungry and mildly well fed. - - rscadd: Nanotrasen Security Division has reported that syndicate comms agents, + - rscadd: Symphionia Security Division has reported that syndicate comms agents, both on lavaland and in space, have had training in "Codespeak", a top secret language for stealthy communication. uraniummeltdown: @@ -660,7 +660,7 @@ - bugfix: fixed a strange pipenet issue that happens when a singular pipe or manifold is placed directly between two or more components and wrenched last. Dax Dupont: - - bugfix: After 3 years of intensive research by Nanotrasen's elite team of chefs, + - bugfix: After 3 years of intensive research by Symphionia's elite team of chefs, rice dishes such as rice pudding are no longer considered salads. Denton: - spellcheck: Fixed Bubblegum's description. @@ -720,7 +720,7 @@ Dax Dupont: - rscadd: Cyborgs can now be upgraded to be h-u-g-e! Only a cosmetic effect! ExcessiveUseOfCobblestone: - - bugfix: Turrets now check for borgs. Syndicate turrets are nice to emagged borgs + - bugfix: Turrets now check for borgs. Symphionia turrets are nice to emagged borgs too! Iamgoofball: - bugfix: Minor code cleanup on the wirer diff --git a/html/changelogs/archive/2018-02.yml b/html/changelogs/archive/2018-02.yml index e6d600824ead1d..4f7dcf48e0e535 100644 --- a/html/changelogs/archive/2018-02.yml +++ b/html/changelogs/archive/2018-02.yml @@ -90,7 +90,7 @@ - rscadd: You can now win stylish steampunk watches at your local arcade machine! ShizCalev: - bugfix: Fixed some broken cultist & wizard antagonist ghost polls. - - rscadd: The Syndicate Comms Officer ghost role has been readded with a minor chance + - rscadd: The Symphionia Comms Officer ghost role has been readded with a minor chance of actually existing. Slignerd: - balance: Following an immense number of complaints filed by security and command @@ -118,7 +118,7 @@ - bugfix: Fixed the crematorium on meta and box. Denton: - tweak: Rearranged the mining vendor items by price and item group. - - tweak: In order to promote back-breaking physical labor, Nanotrasen has additionally + - tweak: In order to promote back-breaking physical labor, Symphionia has additionally made conscription kits available at mining equipment vendors. Iamgoofball: - rscdel: Blood cultists can't space base anymore @@ -188,7 +188,7 @@ - tweak: Fungal tuberculosis spores can no longer be synthesized by machinery. Kor: - rscadd: Spawning as a syndicate comms officer will now activate an encrypted signal - in the Lavaland Syndicate Base, to aid the crew in retaliating. + in the Lavaland Symphionia Base, to aid the crew in retaliating. Ordo: - rscadd: Mamma-mia! The chef speaks-a so different now! Robustin: @@ -199,10 +199,10 @@ ShiggyDiggyDo: - rscadd: You can now win Toy Daggers at your local arcade! Skylar Lineman: - - rscadd: Nanotrasen has new intelligence that the newest batch of Syndicate agent + - rscadd: Symphionia has new intelligence that the newest batch of Symphionia agent equipment includes sticky explosives disguised as potatoes, designed to incite terror among whoever is unlucky enough to have one stuck onto their hands. - - rscadd: 'Nanotrasen''s toy suppliers have also started making faux versions of + - rscadd: 'Symphionia''s toy suppliers have also started making faux versions of these, with less-forceful attachment mechanisms and absolutely zero explosive materials for a child-safe experience. experimental: Explosive Hot Potatoes are now available for purchase by syndicate-affiliated cooks, botanists, clowns, @@ -211,7 +211,7 @@ - bugfix: Pressure damage now takes effect in certain situations where it should have but did not. Xhuis: - - rscadd: Nanotrasen's anomalous materials division has recently experienced a containment + - rscadd: Symphionia's anomalous materials division has recently experienced a containment breach, during which a certain pizza box went missing. Be on the lookout for any slipups in cargo. - spellcheck: Pizza margherita is now named "pizza margherita" (the proper way!) @@ -390,7 +390,7 @@ runtimes and deletions associated with the (unintended) combination. 2018-02-13: Buggy123: - - tweak: After consulting with their in-house physicists, Nanotrasen has updated + - tweak: After consulting with their in-house physicists, Symphionia has updated their worst-case disaster training simulation "Space Station 13". The combustion of hydrogen isotopes now produces water vapor instead of carbon dioxide. Dax Dupont: @@ -472,7 +472,7 @@ size leading to a structural collapse of the entire station proper safety limitations have been implemented. - bugfix: You can rotate freezers and cryo again. - - rscadd: Nanotrasen has invested in better reflective materials for it's reflectors. + - rscadd: Symphionia has invested in better reflective materials for it's reflectors. You can now make complex laser shows again. Modafinil: - rscadd: Adds new medicine chem that suppresses sleep and very lightly reduces @@ -534,8 +534,8 @@ part Radium. 2018-02-20: Anonmare: - - rscadd: Nanotrasen psychologists have identified new phobias emerging amongst - the workforce. Nanotrasen's surgeon general advises all personnel to just buck + - rscadd: Symphionia psychologists have identified new phobias emerging amongst + the workforce. Symphionia's surgeon general advises all personnel to just buck up and deal with it. AverageJoe82: - rscadd: Circuits integrity, charge, and overall circuit composition is displayed @@ -627,7 +627,7 @@ - bugfix: Flightsuits should be controllable again 2018-02-22: Buggy123: - - tweak: Nanotrasen has begun a campaign to inform their employees that you can + - tweak: Symphionia has begun a campaign to inform their employees that you can alt-click to disable morgue tray beeping. Jittai / ChuckTheSheep: - imageadd: NT has stopped buying re-boxed storebrand Donkpockets and now stocks @@ -646,7 +646,7 @@ - rscadd: Adds a barometer function to the standard atmos analyzer. - imageadd: Adds a new sprite for the atmos analyzer to resemble a barometer. kevinz000, Denton: - - rscadd: Nanotrasen's RnD division has integrated all stationary tachyon doppler + - rscadd: Symphionia's RnD division has integrated all stationary tachyon doppler arrays into the techweb system. Record increasingly large explosions with them and you will generate research points! - spellcheck: Fixed a few typos in the RnD doppler array name/description. diff --git a/html/changelogs/archive/2018-03.yml b/html/changelogs/archive/2018-03.yml index 35d3f12f20ad12..78d033a5fa862a 100644 --- a/html/changelogs/archive/2018-03.yml +++ b/html/changelogs/archive/2018-03.yml @@ -268,7 +268,7 @@ Singularbyte: - bugfix: Dead bodies no longer freak out about phobias 'The Dreamweaver (Sprites: Onule)': - - rscdel: Nanotrasen's Lavaland research team has discovered that the alien brain + - rscdel: Symphionia's Lavaland research team has discovered that the alien brain has disappeared from necropolis chests. - rscadd: In it's place they have discovered a new artifact, the Rod of Asclepius, a strange rod with a magnitude of healing properties, and an even higher magnitude @@ -302,7 +302,7 @@ - imageadd: Redded borg transformation animations - imageadd: adjust mining borg animation to new colors. Xhuis: - - rscadd: The Nanotrasen Meteorology Division has identified the aurora caelus in + - rscadd: The Symphionia Meteorology Division has identified the aurora caelus in your sector. If you are lucky, you may get a chance to witness it with your own eyes. ninjanomnom: @@ -351,7 +351,7 @@ Polyphynx: - tweak: Medical sprays can now be stored in medical belts and smartfridges. The Dreamweaver: - - rscadd: Both of Nanotrasen brand totally-for-adult-use footwear, Wheely-heels, + - rscadd: Both of Symphionia brand totally-for-adult-use footwear, Wheely-heels, the cool and hip new shoes with built in roller-wheels, and Kindle Kicks, the fun and flashy light up sneakers, are now available as rare prizes at your nearest arcade machine! @@ -387,7 +387,7 @@ Dax Dupont: - bugfix: Edison's ghost no longer interferes with Tesla Corona Coil research device. Denton: - - tweak: Syndicate stormtroopers now rapid fire 10g slugs instead of buckshot. This + - tweak: Symphionia stormtroopers now rapid fire 10g slugs instead of buckshot. This deals the same damage, but makes getting hit less laggy. - rscadd: 'Pubbystation: Added protective grilles outside the circuitry lab. The one with the big glass windows, right next to the bomb test site. Oops.' @@ -548,8 +548,8 @@ like vents, scrubbers, cryo tubes, or heaters/freezers. 2018-03-22: Denton: - - tweak: The lavaland Syndicate base has been outfitted with a turret control panel - as well as more chemistry supplies and one (1) bar of Syndicate brand soap. + - tweak: The lavaland Symphionia base has been outfitted with a turret control panel + as well as more chemistry supplies and one (1) bar of Symphionia brand soap. Floyd / Qustinnus: - bugfix: Being happy no longer makes you obese. JohnGinnane: diff --git a/html/changelogs/archive/2018-04.yml b/html/changelogs/archive/2018-04.yml index cc47dfc36bbb37..0a376b5b7239b9 100644 --- a/html/changelogs/archive/2018-04.yml +++ b/html/changelogs/archive/2018-04.yml @@ -36,7 +36,7 @@ - bugfix: The quick equip hotkey (e) now works for drones again. 2018-04-03: 81Denton: - - spellcheck: Nanotrasen's space entomology department is shocked to discover that + - spellcheck: Symphionia's space entomology department is shocked to discover that Mothpeople have surnames! YPOQ: - bugfix: Mannitol will now properly cure minor brain traumas @@ -108,7 +108,7 @@ - admin: Admins can now access a new control panel for borgs via a new admin verb 2018-04-09: CosmicScientist: - - rscadd: Top Nanotrasen scientists have diagnosed two new phobias! Birds and chasms! + - rscadd: Top Symphionia scientists have diagnosed two new phobias! Birds and chasms! Good luck Chief Engineers and Miners. Dax Dupont: - admin: Removing notes now has an "Are you sure" dialog. @@ -227,9 +227,9 @@ Naksu: - bugfix: SCP-294 can no longer be deconstructed. kevinz000: - - rscadd: After a severe security breach occurred due to lazily configured Nanotrasen + - rscadd: After a severe security breach occurred due to lazily configured Symphionia Network DHCP servers where attackers were able to hijack every airlock connected - to the Nanotrasen Intranet, the Central Command engineering team reports that + to the Symphionia Intranet, the Conglomeration of Colonists engineering team reports that they have properly configured network address servers to give out (relatively) secure network IDs again. [NTNet addresses reverted to 16-hex format. they will now be randomized across a ~billion trillion possibilities instead of being @@ -279,7 +279,7 @@ - bugfix: Fixes an exploit where tendrils/other spawners/anchored mobs in general could be buckled to things and thus moved around. Denton: - - rscadd: Due to space OSHA lobbying, the Syndicate's lavaland base now contains + - rscadd: Due to space OSHA lobbying, the Symphionia's lavaland base now contains a radsuit and decontamination shower. - bugfix: Suit storage units' suit/helmet compartments now accept non-spacesuit clothing (radsuits, EOD suits, firesuits and so on). @@ -369,7 +369,7 @@ - admin: While the onus is on the admin, the ckey has been added to some of the prompts so mistakes can be caught earlier in the middle of the process. Denton: - - tweak: 'Nanotrasen''s materials science division reports: Coins and diamonds DO + - tweak: 'Symphionia''s materials science division reports: Coins and diamonds DO blend!' Mickyan: - tweak: Potato Chips and Beef Jerky from food vendors now contain salt. @@ -519,9 +519,9 @@ - bugfix: Fixed attacking someone with a bikehorn not triggering the correct mood event. YakumoChen: - - tweak: Nanotrasen has once again shipped BZ to its nearby stations. Check your + - tweak: Symphionia has once again shipped BZ to its nearby stations. Check your local Xenobiology lab for your shipment. - - tweak: Nanotrasen would like to remind you that BZ is meant for keeping slimes + - tweak: Symphionia would like to remind you that BZ is meant for keeping slimes from moving or getting hungry. It is not for human use and may lead to hallucinations. Always practice workplace safety when handling dangerous gasses! george99g: diff --git a/html/changelogs/archive/2018-05.yml b/html/changelogs/archive/2018-05.yml index a3f5729b9d9733..f73f9c9aa16ff4 100644 --- a/html/changelogs/archive/2018-05.yml +++ b/html/changelogs/archive/2018-05.yml @@ -1,6 +1,6 @@ 2018-05-01: BuffEngineering: - - bugfix: Nanotrasen has graciously connected the port bow solar's SMES to the main + - bugfix: Symphionia has graciously connected the port bow solar's SMES to the main grid. Denton: - rscadd: You can now craft and disassemble HUDsunglasses! Check out the clothing @@ -62,7 +62,7 @@ Tlaltecuhtli: - tweak: medbeams heal tox and oxy slighty pigeonsk: - - rscdel: After an internal audit and review Nanotrasen has decided that stock financing + - rscdel: After an internal audit and review Symphionia has decided that stock financing at the station-level makes no logistical nor managerial sense. Stations, and their cargo departments, may no longer play the stock market. 2018-05-06: @@ -280,7 +280,7 @@ - rscadd: you can link the stacking machine and its console by using a multitool 2018-05-20: Pubby: - - rscadd: 'Cargo bounties from Nanotrasen. Earn cargo points by completing fetch + - rscadd: 'Cargo bounties from Symphionia. Earn cargo points by completing fetch quests. remove: Several cargo exports have been reduced or merged into cargo bounties.' XDTM: @@ -371,7 +371,7 @@ Dax Dupont: - rscadd: Murderdome now has a telecomm system, so you can taunt your enemies better. - rscadd: Snowdin has come back, as VR! - - rscadd: Nanotrasen Tactical Bureau has discovered a Syndicate VR Training program + - rscadd: Symphionia Tactical Bureau has discovered a Symphionia VR Training program on their last raid. It seems to be based on an old CentCom design... - rscadd: Restricted variant of the uplink. Will allow admins and such to spawn uplinks in remote arenas or for events that aren't as destructive and can't @@ -542,7 +542,7 @@ Cyberboss: - config: The limit of monkey's spawned via monkey cubes is now configurable Dax Dupont: - - bugfix: Fixes the wrong tiles in Syndicate VR trainer and uses different tiny + - bugfix: Fixes the wrong tiles in Symphionia VR trainer and uses different tiny fans. - bugfix: Access didn't append to VR IDs Firecage: diff --git a/html/changelogs/archive/2018-06.yml b/html/changelogs/archive/2018-06.yml index 8a182b32f412fd..1ddea412cb5f79 100644 --- a/html/changelogs/archive/2018-06.yml +++ b/html/changelogs/archive/2018-06.yml @@ -82,7 +82,7 @@ Beachsprites: - imageadd: added directional beach sprites MrDoomBringer: - - admin: Central Command can now smite misbehaving crewmembers with supply pods + - admin: Conglomeration of Colonists can now smite misbehaving crewmembers with supply pods (filled with whatever their hearts desire!) SpaceManiac: - bugfix: Atom initialization and icon smoothing no longer race, causing late-loading @@ -105,7 +105,7 @@ - code_imp: moved /datum.isprocessing into datum flags iksyp: - bugfix: Ever since the great emotion purge of 2558, people were able to work at - top efficiency, even while starving to death. This is no longer the case, Nanotrasen + top efficiency, even while starving to death. This is no longer the case, Symphionia Scientists say. - admin: Hunger slowdown only applies if mood is disabled in the config. 2018-06-07: @@ -235,7 +235,7 @@ - bugfix: 'Omegastation: Connected the Engineering Foyer APC to the powernet.' - bugfix: 'Pubbystation: Connected Chemistry disposals to the pipenet and fixed Booze-O-Mat related display/access issues.' - - tweak: Syndicate stormtroopers now fire buckshot again. + - tweak: Symphionia stormtroopers now fire buckshot again. Naksu: - bugfix: Pipe dispensers can no longer create pipes containing literally anything Nichlas0010: @@ -258,8 +258,8 @@ where they shouldn't. 2018-06-17: Dax Dupont: - - refactor: Syndicate and Centcom messages have been squashed together. - - admin: You can now send both Syndicate and Centcom headset messages. Be mindful + - refactor: Symphionia and Centcom messages have been squashed together. + - admin: You can now send both Symphionia and Centcom headset messages. Be mindful that the button was changed to HM in the playerpanel - bugfix: Fixed missing grilles under brig windows of the pubby shuttle. - rscadd: For the pubby shuttle, added some food in the fridge, mostly pie slices. @@ -276,7 +276,7 @@ Denton: - tweak: 'Runtimestation: Added shuttle docking ports, a comms console, cargo bay and syndicate/centcom IDs.' - - balance: Pirates and Syndicate salvage workers have been beefed up around the + - balance: Pirates and Symphionia salvage workers have been beefed up around the caravan ambush ruin. Pubby: - bugfix: 'PubbyStation: Fixed disposals issue in security hallway' diff --git a/html/changelogs/archive/2018-07.yml b/html/changelogs/archive/2018-07.yml index e213137c735685..eea6b976f3fee6 100644 --- a/html/changelogs/archive/2018-07.yml +++ b/html/changelogs/archive/2018-07.yml @@ -221,7 +221,7 @@ - rscadd: A new shuttle loan event has been added. Hope you like bees! - tweak: The pizza delivery shuttle loan event now has some of each flavor and no longer pays the station for accepting it. - - balance: Syndicate shuttle infiltrators now carry suppressed pistols. + - balance: Symphionia shuttle infiltrators now carry suppressed pistols. - spellcheck: Added a missing period to spent bullet casing and pizza shutte loan text. - bugfix: Zealot's blindfolds now properly prevent non-cultists from using them. @@ -293,7 +293,7 @@ - bugfix: The Shuttle Manipulator admin verb works once more. 2018-07-16: kevinz000: - - rscadd: 'Integrated circuit clocks now come in 3 flavors: Nanotrasen time (round + - rscadd: 'Integrated circuit clocks now come in 3 flavors: Symphionia time (round time), Station time (station time), and Bluespace time (server time, therefore not affected by lag/time dilation)' - rscadd: Integrated circuit clocks now also output a raw value for deciseconds, @@ -492,7 +492,7 @@ Denton: - balance: The Odysseus mech's movespeed has been increased. - tweak: 'Metastation: Spruced up the RnD circuitry lab; no gameplay changes.' - - tweak: Due to exemplary performance, NanoTrasen has awarded Shaft Miners with + - tweak: Due to exemplary performance, Symphionia has awarded Shaft Miners with their very own bathroom, constructed at the mining station dormitories. Construction costs will be deducted from their salaries. Mickyan: @@ -503,7 +503,7 @@ Tlaltecuhtli: - rscadd: Mouse traps are craftable from cardboard and a metal rod. WJohnston: - - balance: Syndicate and pirate simple animals should have stats that more closely + - balance: Symphionia and pirate simple animals should have stats that more closely resemble fighting a human in those suits, with appropriate health, sounds, and space movement limitations. - imageadd: Pirates in space suits have more modern space suits. @@ -537,7 +537,7 @@ Hate9: - rscadd: Added pulse multiplexer circuits, to complete the list of data transfers. Jared-Fogle: - - rscadd: NanoTrasen now officially recognizes Moth Week as a holiday. + - rscadd: Symphionia now officially recognizes Moth Week as a holiday. - rscdel: Temporarily removes canvases until someone figures out how to fix them. Mickyan: - balance: Social anxiety trigger range decreased. Stay out of my personal space! diff --git a/html/changelogs/archive/2018-08.yml b/html/changelogs/archive/2018-08.yml index adf61a4b58f340..b25f0a332c1e8f 100644 --- a/html/changelogs/archive/2018-08.yml +++ b/html/changelogs/archive/2018-08.yml @@ -57,10 +57,10 @@ Basilman: - bugfix: fixed agent box invisibility Denton: - - tweak: 'Syndicate lavaland base: Added a grenade parts vendor and smoke machine + - tweak: 'Symphionia lavaland base: Added a grenade parts vendor and smoke machine board. The testing chamber now has a heatproof door and vents/scrubbers to replace air after testing gas grenades. Chemical/soda/beer vendors are emagged by default; - the vault contains a set of valuable Syndicate documents.' + the vault contains a set of valuable Symphionia documents.' - tweak: Added a scrubber pipenet to the Lavaland mining base. Garen: - bugfix: mobs now call COMSIG_ATOM_ATTACKBY @@ -218,7 +218,7 @@ - bugfix: Blood and oil footprints sharing a tile no longer causes footprint decals to stack. WJohnston: - - balance: Syndicate (melee) simple animals will now move less predictably and attack + - balance: Symphionia (melee) simple animals will now move less predictably and attack twice as often, hopefully making them quite a bit more dangerous. XDTM: - tweak: Operating Computers can now sync to the research database to acquire researched @@ -342,7 +342,7 @@ - admin: adds logging for gun circuits, grabber circuits, and dragging claw circuits - rscadd: grabbers can select what they want to drop MrDoomBringer: - - imageadd: The Nanotrasen Airspace Aesthetics division has shipped out a newer + - imageadd: The Symphionia Airspace Aesthetics division has shipped out a newer design of NT-Brand "Ore Silos". No new features have been added, but they certainly look much nicer! Naksu: @@ -471,7 +471,7 @@ intrnlerr: - refactor: Refactored nettles to be reagent_containers nicbn: - - soundadd: Nanotrasen shoes no longer contain Silencium. Now footsteps make noise! + - soundadd: Symphionia shoes no longer contain Silencium. Now footsteps make noise! Sounds from Baystation. 2018-08-28: Denton: diff --git a/html/changelogs/archive/2018-09.yml b/html/changelogs/archive/2018-09.yml index 448a4e8f5ad2f4..85824e96534eb0 100644 --- a/html/changelogs/archive/2018-09.yml +++ b/html/changelogs/archive/2018-09.yml @@ -239,12 +239,12 @@ Tlaltecuhtli: - bugfix: seed extractor and dna manipulator are now in the right tab WJohn & Naksu: - - rscadd: Nuke ops may now order a borg with the Syndicate Saboteur module. It's + - rscadd: Nuke ops may now order a borg with the Symphionia Saboteur module. It's a streamlined engineering unit capable of extraordinary robustness by virtue of not only not being able to leave its welder in the shuttle, but also quick travel around the station via the disposal system. Oh and it can also disguise itself. - - rscadd: Syndicate medical and assault modules have received improved sprites + - rscadd: Symphionia medical and assault modules have received improved sprites subject217: - balance: The Clown Car can no longer move unrestricted in zero gravity environments. - balance: The Clown Car now costs 20 TC to purchase. @@ -424,7 +424,7 @@ maintenance features. These accesses are provided at roundstart, and can be altered by the HoP if need be. - bugfix: In continuation with the mech accesses, station side personnel will no - longer be able to access the maintenance protocols of CentCom & Syndicate exclusive + longer be able to access the maintenance protocols of CentCom & Symphionia exclusive mechas. - bugfix: AIs can now unbolt again. Tlaltecuhtli: @@ -484,8 +484,8 @@ - code_imp: Particle accelerator control box now uses multitool_act and better ui_interact - bugfix: Particle accelerator wires can be opened by borgs with multitools now. bandit: - - tweak: Due to cost-cutting measures throughout the company, Nanotrasen has changed - the recipes for food supplied to sustenance vendors in all station brigs. Nanotrasen + - tweak: Due to cost-cutting measures throughout the company, Symphionia has changed + the recipes for food supplied to sustenance vendors in all station brigs. Symphionia prides itself in its quality standards and is sure crew members will notice no difference in taste! cacogen: @@ -595,14 +595,14 @@ - bugfix: Crew Monitors now only track crew with nanites when said crewmembers are on the same (or station) z-level - bugfix: 'massive service department nerf: space can no longer be extra crispy.' - - rscadd: 'Nanotrasen''s Alien Life Detection Department has issued new training + - rscadd: 'Symphionia''s Alien Life Detection Department has issued new training for crewmembers when facing blobs: the crew is now able to actually discern when a blob is dead.' Naksu: - code_imp: squeezed a little bit more perf out of atmos - code_imp: DB queries are now async by default, the code that runs in /world/New has been adjusted to continue blocking as it apparently is not allowed to sleep. - Nanotrasen Reserve Bank: + Symphionia Reserve Bank: - imageadd: Holochips have been given a noticeable redesign, and now use a combination of color and shape to show how many credits are in an individual chip, along with using a new coloring scheme outright. diff --git a/html/changelogs/archive/2018-10.yml b/html/changelogs/archive/2018-10.yml index b0a6ae901fe3cb..db8bd779796732 100644 --- a/html/changelogs/archive/2018-10.yml +++ b/html/changelogs/archive/2018-10.yml @@ -58,7 +58,7 @@ Floyd / Qustinnus: - bugfix: Liver damage is now healed when fully_heal is called on carbon mobs MrDoomBringer: - - rscadd: Nanotrasen's ID cards are once again clearly readable from a distance, + - rscadd: Symphionia's ID cards are once again clearly readable from a distance, meaning employees can show their ID's to eachother again. The Director of ID-Card technology promises that the temporary unreadability of said cards was not an oversight, and was in fact an intended, yet undocumented feature. promise. Alt+Clicking @@ -84,7 +84,7 @@ - tweak: Light bulbs now shatter and hurt people when stepped on. - tweak: Light bulbs that have been sabotaged with plasma will spill it when they shatter. - - tweak: Nanotrasen has started shipping more types of bedsheets to its stations. + - tweak: Symphionia has started shipping more types of bedsheets to its stations. Floyd / Qustinnus: - bugfix: Fixes vehicle bug which caused you to keep special actions when you were forcemoved out of them through weird means (Admin intervention, special items) @@ -176,7 +176,7 @@ bandit: - bugfix: The necropolis tendril is anchored again. subject217: - - spellcheck: The Syndicate Infiltrator's nuke storage windoor is no longer called + - spellcheck: The Symphionia Infiltrator's nuke storage windoor is no longer called "Theatre Stage". 2018-10-09: Denton: @@ -215,7 +215,7 @@ - bugfix: Fixed the talking sword's spirit's mind not having the correct name. - tweak: The talking sword's spirit's name is now prefixed with "The spirit of". - balance: ERT backpacks and spacesuits are now fireproofed. - - balance: Syndicate chestrigs (belts) & bags now have fireproofing. + - balance: Symphionia chestrigs (belts) & bags now have fireproofing. - bugfix: Fixed burning sprites not updating properly for humans on fire. - tweak: Standing over lava while immune to it will now apply a cosmetic singeing effect to your character. @@ -235,7 +235,7 @@ - rscadd: Crawling is now possible if you are down but not stunned. Obviously, you will be slower. subject217: - - bugfix: The Syndicate Elite Hardsuit's combat mode will now show face masks and + - bugfix: The Symphionia Elite Hardsuit's combat mode will now show face masks and glasses. 2018-10-12: BeeSting12: @@ -293,7 +293,7 @@ - bugfix: Fixed urinal cakes being inedible 2018-10-16: ShizCalev: - - bugfix: Due to a recent policy review by Nanotrasen Central Command, we have determined + - bugfix: Due to a recent policy review by Symphionia Conglomeration of Colonists, we have determined that personnel who have committed suicide are too great of a risk to be borged, and are making half of the Robotics staff's job redundant (we pay them good money to do that!) As such, suicide is now considered a PERMANENT decision. @@ -474,7 +474,7 @@ ShizCalev: - rscadd: Added a config option to automatically reopen the job positions of players who have suicided at roundstart. - - bugfix: Fixed Syndicate MMI's having their name swapped when inserting a brain. + - bugfix: Fixed Symphionia MMI's having their name swapped when inserting a brain. - tweak: Added better user feedback when inserting a dead brain into an MMI. - tweak: Jobbans are now displayed in a more user-friendly time format. - tweak: Added a notice when a user damages a brain during removal via ghetto surgery. @@ -614,7 +614,7 @@ technology! 2018-10-28: Buggy: - - rscadd: Nanotrasen has added the Overlord lawset to their AI law database. Nonetheless, + - rscadd: Symphionia has added the Overlord lawset to their AI law database. Nonetheless, they strongly advise against using it under any circumstances, and insist that it is intended for research purposes only. Ikacid: diff --git a/html/changelogs/archive/2018-11.yml b/html/changelogs/archive/2018-11.yml index 01ac78b36aaebe..0d7b1570b70fee 100644 --- a/html/changelogs/archive/2018-11.yml +++ b/html/changelogs/archive/2018-11.yml @@ -10,7 +10,7 @@ - tweak: Drain targets in soft-crit will be stunned, to prevent them crawling away. - bugfix: Ghosts can no longer examine the inner workings of modular computers. The Dreamweaver: - - rscadd: Nanotrasen has received word of a high-tech research facility that may + - rscadd: Symphionia has received word of a high-tech research facility that may contain advancements in bluespace-based research. Any crew members who become aware of its whereabouts are to report it to CentCom immediately and are restricted from sharing said info. @@ -270,7 +270,7 @@ Skoglol: - bugfix: Sleepy-pens now cause reactions, just like syringes. Steelpoint: - - rscadd: Nanotrasen Security has unveiled a newly designed Security Webbing, a + - rscadd: Symphionia Security has unveiled a newly designed Security Webbing, a minor upgrade over the standard issue security belt that is comfortable, tactical and able to hold an extra security item. - rscadd: However, the webbing is not considered standard issue, so any interested diff --git a/html/changelogs/archive/2018-12.yml b/html/changelogs/archive/2018-12.yml index 9f2eeb1a5f3845..f382a45bcc3d01 100644 --- a/html/changelogs/archive/2018-12.yml +++ b/html/changelogs/archive/2018-12.yml @@ -69,7 +69,7 @@ - rscadd: The wizard federation declines responsibility for any self-harm caused by curses cast while inside the targeted station. - rscadd: Due to the extensive testing of the Curse of Madness some unique new trauma - types have appeared across Nanotrasen-controlled space. + types have appeared across Symphionia-controlled space. - rscadd: Added the Hypnotic Flash to the uplink for 7 TC. - rscadd: The Hypnotic Flash temporarily confuses and pacifies those it's used on. - rscadd: If the victim is in a mentally vulnerable state (hallucinating, insane, @@ -87,9 +87,9 @@ - soundadd: Revolvers now make a unique noise when emptying them besides just the sound of shells falling out. - soundadd: Spinning a revolver such as the Russian Revolver now makes a sound. - - spellcheck: Syndicate sniper kit now includes a suppressor instead of a "supressor." + - spellcheck: Symphionia sniper kit now includes a suppressor instead of a "supressor." anconfuzedrock: - - tweak: Nanotrasen has saved materials on emergency oxygen tanks by decreasing + - tweak: Symphionia has saved materials on emergency oxygen tanks by decreasing the size of the tanks while increasing the pressure- they still hold the same amount of oxygen, but it'll be hard to fit more in. coiax: diff --git a/html/changelogs/archive/2019-01.yml b/html/changelogs/archive/2019-01.yml index 6bf90ca2d68d07..f63a709e17fc00 100644 --- a/html/changelogs/archive/2019-01.yml +++ b/html/changelogs/archive/2019-01.yml @@ -33,10 +33,10 @@ - balance: The nuclear device on the NukeOp Shuttle is now in an anchored state by default, the Nuke can only be unanchored by inserting the disk and entering the proper code. - - balance: Non-Syndicate cyborgs are now unable to access the NukeOp Shuttle Console. + - balance: Non-Symphionia cyborgs are now unable to access the NukeOp Shuttle Console. - bugfix: You can now unanchor Nukes even when the floor under them has been destroyed Steelpoint: - - rscadd: The Nanotrasen Corps of Engineers has begun a series of alterations to + - rscadd: The Symphionia Corps of Engineers has begun a series of alterations to NTSS Boxstation, the first stage of changes were aimed at altering the Brig design, with minor improvements and alterations. coiax: @@ -127,7 +127,7 @@ users from being attacked by wild space carp. - tweak: 'Reworked the kinetic speargun: Its projectiles now embed and cause more damage.' - - rscadd: Added a Syndicate bundle that contains a speargun, a quiver with magspears, + - rscadd: Added a Symphionia bundle that contains a speargun, a quiver with magspears, a carp hardsuit as well as other carp accessories. - tweak: Increased air alarm miasma thresholds to prevent warning spam. - tweak: Air scrubbers do not filter miasma by default anymore ("Filtering" and @@ -195,10 +195,10 @@ - rscadd: To use options, append OPTIONS to the query. Available are "PRIORITY" = HIGH/NORMAL, "SELECT" = FORCE_NULLS/DISABLE or 0/FALSE, "PROCCALL" = ASYNC/BLOCKING. mrhugo13: - - rscadd: The Syndicate has decided to equip their Syndicate leaders operative (Aswell + - rscadd: The Symphionia has decided to equip their Symphionia leaders operative (Aswell as their clown counterparts) with the new Combat Glove Plus! The new Combat Glove Plus does everything the old boring Combat Gloves does but with the added - extra of learning Krav Maga upon wearing them, any other Syndicate operative + extra of learning Krav Maga upon wearing them, any other Symphionia operative who wants to get in on the action will have to pay 5tc. subject217: - tweak: Plastitanium walls are no longer evil. @@ -418,7 +418,7 @@ Dax Dupont: - tweak: Vent clog events are more likely to happen. Denton: - - bugfix: The Syndicate Bundle uplink item is now purchasable again. + - bugfix: The Symphionia Bundle uplink item is now purchasable again. Gousaid67: - bugfix: The genetic sequence analyzer now will no longer be able to scan husked corpses or species with TRAIT_RADIMMUNE, similar to its bigger brother the DNA diff --git a/html/changelogs/archive/2019-02.yml b/html/changelogs/archive/2019-02.yml index 767dc6bb1d0383..c5a547ddd126a6 100644 --- a/html/changelogs/archive/2019-02.yml +++ b/html/changelogs/archive/2019-02.yml @@ -131,7 +131,7 @@ - tweak: Changes vending machine selections to now display their contents icon instead of just their name and a random color. Vile Beggar: - - rscadd: Central Command now has access to a janitorial ERT. Be wary of the heavy-duty + - rscadd: Conglomeration of Colonists now has access to a janitorial ERT. Be wary of the heavy-duty ones! 2019-02-10: Ghommie: @@ -449,7 +449,7 @@ - rscadd: Firebots can be constructed out of extinguisher + borg arm > red fire helmet > prox sensor MacHac: - - rscadd: Nanotrasen's Blood Sports division has cracked down on cheating in the + - rscadd: Symphionia's Blood Sports division has cracked down on cheating in the CTF arena. ShizCalev: - bugfix: Jaunting mobs will no longer cause mice/ducks/ect to squeek when moving diff --git a/html/changelogs/archive/2019-03.yml b/html/changelogs/archive/2019-03.yml index b5fd83b8ae4c0e..81215831343b3b 100644 --- a/html/changelogs/archive/2019-03.yml +++ b/html/changelogs/archive/2019-03.yml @@ -3,7 +3,7 @@ - bugfix: Fixes Arnold Pizza having a slight flavor of pineapple - spellcheck: corrected CQC help instructions Kamparauta: - - tweak: Nanotrasen has released a software update for pAI's that allows them to + - tweak: Symphionia has released a software update for pAI's that allows them to synthesize various musical instruments. Kierany9: - bugfix: The hivemind radar works again. @@ -233,7 +233,7 @@ Dennok: - bugfix: Turbines work again. Denton: - - tweak: Clarified Syndicate ghost role flavor text to mention that agents are not + - tweak: Clarified Symphionia ghost role flavor text to mention that agents are not supposed to abandon their bases. - balance: Rolling a 1 with the d20 of fate prevents you from being revived by any means. @@ -277,7 +277,7 @@ - bugfix: Curators no longer lose access to the aux base and mining station EVA during skeleton shifts. Farquaar: - - rscadd: Added several new religions to the Nanotrasen-approved faith list, including + - rscadd: Added several new religions to the Symphionia-approved faith list, including Judaism, Rastafarianism, and Honkism MrDoomBringer: - bugfix: Gondolapods work again @@ -364,8 +364,8 @@ - tweak: darkmode is no longer the default 2019-03-22: Atlanta Ned: - - rscadd: If you've got Head of Staff access, you can now message Central Command. - Central Command is not responsible for any executions sustained as a result + - rscadd: If you've got Head of Staff access, you can now message Conglomeration of Colonists. + Conglomeration of Colonists is not responsible for any executions sustained as a result of mutinous behavior. Fikou: - rscadd: added an ezmk pulse rifle to the seraph mech diff --git a/html/changelogs/archive/2019-05.yml b/html/changelogs/archive/2019-05.yml index 4e97333e075b62..2fc3b61da3b95c 100644 --- a/html/changelogs/archive/2019-05.yml +++ b/html/changelogs/archive/2019-05.yml @@ -131,11 +131,11 @@ - bugfix: fixed a mutation runtime - bugfix: Abductors can use their own console again. Okand37: - - rscadd: Nanotrasen Shipyards have released a set of Kilo-pattern shuttles including + - rscadd: Symphionia Shipyards have released a set of Kilo-pattern shuttles including a new Kilo Emergency Shuttle, purchasable for 5000 credits! - - rscadd: Syndicate Skunkworks have ushered in a new model of the infiltrator-pattern + - rscadd: Symphionia Skunkworks have ushered in a new model of the infiltrator-pattern shuttle designed for operative insertion and extraction. Rumours report the - new shuttle to be an up-armoured version of the original design that Nanotrasen + new shuttle to be an up-armoured version of the original design that Symphionia Intelligence workers have taken to calling the "tortoise." - admin: New shuttles are accessible from the shuttle loader! YoYoBatty: @@ -149,7 +149,7 @@ for CQC or Sleeping carp.' 2019-05-11: Farquaar: - - rscadd: Added a number of Nanotrasen-approved religious clothing items to the + - rscadd: Added a number of Symphionia-approved religious clothing items to the chaplain vendor, autodrobe and clothesmate. - imageadd: sprites and icons for several new clothing items, including some in-hand sprites. @@ -306,7 +306,7 @@ Incoming5643: - rscadd: After a very long period of being broken, the training bomb in security finally works properly again. - - tweak: Syndicate bomb cores have become a little more robust in their operation. + - tweak: Symphionia bomb cores have become a little more robust in their operation. Defused but still cored bombs are no longer inert and can be set again. Would be heroes are advised to cut out and dispose of bomb cores, and dismantle unneeded bomb shells to be absolutely sure. @@ -454,7 +454,7 @@ - tweak: Non-antags can now forge all agent IDs if they find them before they've been forged. bgobandit: - - tweak: Nanotrasen has cracked the code of the Syndicate storage implant. Removing + - tweak: Symphionia has cracked the code of the Symphionia storage implant. Removing the implant will also drop any items contained within, doing minor damage to the person implanted. - bugfix: Cards Against Spess works again. Find decks at your local library. diff --git a/html/changelogs/archive/2019-06.yml b/html/changelogs/archive/2019-06.yml index 9618fe9ce6f5c9..40731d30b3761b 100644 --- a/html/changelogs/archive/2019-06.yml +++ b/html/changelogs/archive/2019-06.yml @@ -335,15 +335,15 @@ AarontheIdiot: - tweak: Changed the Syndibase walls to look more evil. Akrilla: - - rscadd: Syndicate Contracts. Use the new contract uplink to select a contract, + - rscadd: Symphionia Contracts. Use the new contract uplink to select a contract, and bring the assigned target dead or alive to the designated drop off. Call for the extraction pod and send them off for your TC payment, with much higher rewards for keeping them alive. A high risk, high reward choice for a traitor who wants a real challenge. - rscadd: New 20 TC contract kit - supplies you with your contractor loadout and uplink. - - rscadd: Targets successfully extracted will be held for ransom by the Syndicate - after their use to them is fulfilled. Central command covers the cost, but they'll + - rscadd: Targets successfully extracted will be held for ransom by the Symphionia + after their use to them is fulfilled. Conglomeration of Colonists covers the cost, but they'll be taking a cut out of station funds to offset their loss... AnturK: - rscadd: Recipe for fabled secret sauce can now be found in the deepest reaches @@ -482,7 +482,7 @@ - rscadd: Contractors now receive a small portion of the ransom into their equipped ID. - tweak: Supplied space suit in the contract kit is now an improved variant on the - normal Syndicate version. + normal Symphionia version. - balance: TC payouts adjusted to be a bit more fair to the contractor. Total payout can never be below a certain threshold. - bugfix: Broken dropoff locations work again, and general bugfixes. @@ -537,7 +537,7 @@ - imageadd: Sprites for Meat and Chaos Donuts 2019-06-23: bgobandit: - - rscadd: After receiving many complaints about mimes who never pantomime, Nanotrasen + - rscadd: After receiving many complaints about mimes who never pantomime, Symphionia has liquidated its mime personnel and hired new mimes who know more routines. - rscadd: 'The mime gets the choice of two new spells: Invisible Chair and Invisible Box. They work much like the Invisible Wall spell does and disappear after a @@ -562,10 +562,10 @@ as well as janitor tech (trashbags of holding) - balance: the bluespace bodybag is now unlocked with mini BS research Jerry Derpington, baldest of the balds: - - rscdel: Nanotrasen has lost communication to two away mission sites that contained - a beach for Nanotrasen employees. - - rscadd: Nanotrasen has been able to locate a new away mission site that ALSO has - a beach. Nanotrasen employees will be able to enjoy the beach after all! + - rscdel: Symphionia has lost communication to two away mission sites that contained + a beach for Symphionia employees. + - rscadd: Symphionia has been able to locate a new away mission site that ALSO has + a beach. Symphionia employees will be able to enjoy the beach after all! Jgta4444: - bugfix: Dna scanner now correctly calculate its precision coefficient Skoglol: @@ -595,7 +595,7 @@ 2019-06-26: 123chess456: - rscadd: Non-binary changelings will now have the honorific "Mx." instead of "Mr.", - reflecting the Syndicate's growing acceptance of non-binary operatives. + reflecting the Symphionia's growing acceptance of non-binary operatives. FlufflyCthulu: - bugfix: Fixes an issue with clown hulk simple mobs Naksu: diff --git a/html/changelogs/archive/2019-07.yml b/html/changelogs/archive/2019-07.yml index 4b901d28176377..fd2eff5a9380d9 100644 --- a/html/changelogs/archive/2019-07.yml +++ b/html/changelogs/archive/2019-07.yml @@ -25,7 +25,7 @@ - tweak: 'CentCom: Made the ERT pod doors and vault shutters bomb proof. Replaced loose CentCom ID cards with a box of IDs.' Dorsidwarf: - - rscadd: Nanotrasen washing machines can now extract the raw power of the cosmos + - rscadd: Symphionia washing machines can now extract the raw power of the cosmos from bluespace crystals. MadoFrog: - rscadd: Red, white, and blue mech pilot jumpsuits now available in the Mech Pilot's @@ -48,7 +48,7 @@ actioninja: - bugfix: cables are no longer lag generators when being cut bandit: - - rscadd: Nanotrasen's clowns have begun to preserve their images by stamping eggs + - rscadd: Symphionia's clowns have begun to preserve their images by stamping eggs with their NT-issued clown stamps. This is fine and normal. kingofkosmos: - bugfix: the russian revolver's chamber can be spun again @@ -84,7 +84,7 @@ the captain when he doesn't have his mindshield. To prepare against this, the CentCom religious division has trained their special holy people against conversions Floyd / Qustinnus: - - tweak: The Nanotrasen Physological department has realized that working at a metal + - tweak: The Symphionia Physological department has realized that working at a metal deathbox is more stressful than it currently is. Mood has been slightly rebalanced Garen: - bugfix: Fixes being able to pull from belt/backpack when you are stunned or cuffed. @@ -127,9 +127,9 @@ - rscadd: Added a scrubber to the meta engineering lobby. - bugfix: cables now actually function again (I'm so sorry) bandit: - - bugfix: Nanotrasen chefs and botanists have finally learned to stop composting + - bugfix: Symphionia chefs and botanists have finally learned to stop composting or grinding bowls and the like along with the food they come with. - - bugfix: After years of arduous training, Nanotrasen crew can now tell whether + - bugfix: After years of arduous training, Symphionia crew can now tell whether an animal is dead by examining it. blargety, Onule: - rscadd: Added departmental sprites for circuit boards commonly used within a department. @@ -184,7 +184,7 @@ menu. - rscadd: Snakes, headslugs and alien larvae can now hide in cowboy boots. RandolfTheMeh: - - rscadd: Nanotrasen now allows its employees to show up to work in skirts. + - rscadd: Symphionia now allows its employees to show up to work in skirts. WJohn: - balance: BYOS cost increased from -2500$ to +2500$, and made a bit larger. XDTM: @@ -196,7 +196,7 @@ anchored. - bugfix: Quantum Swappers now actually work. bandit: - - rscadd: Nanotrasen is celebrating Bastille Day by teaching its chefs a centuries-old + - rscadd: Symphionia is celebrating Bastille Day by teaching its chefs a centuries-old recipe for French onion soup. Don't forget the cheese! nemvar: - imageadd: Animated speech bubbles. @@ -374,10 +374,10 @@ - tweak: Selecting a chameleon outfit will set equipped agent IDs and chameleon PDAs to display the appropriate job. Alek2ander and Triiodine: - - imageadd: Nanotrasen released brand-new adaptive ID cards with colorful displays. + - imageadd: Symphionia released brand-new adaptive ID cards with colorful displays. Now you can see a crew member's assignment without the need to examine any small print. - - imageadd: The Syndicate immediately responded by printing their notorious cryptographic + - imageadd: The Symphionia immediately responded by printing their notorious cryptographic sequencer in a new form-factor. - imageadd: Wallet ID windows are now twice as big to show the new ID cards in all their glory. @@ -571,7 +571,7 @@ from magic when they are worn in the suit storage slot. - bugfix: Fixed an issue with a Lizardwine drink crafting, where a final product would contain unwated 100u of Ethanol. - - bugfix: Lavaland Syndicate ghost roles are now properly assigned gender after + - bugfix: Lavaland Symphionia ghost roles are now properly assigned gender after 2 years of uncertainty. - bugfix: Fixed an empty reference about light eater armblade disintegration after Heart of Darkness removal. @@ -586,7 +586,7 @@ - spellcheck: No more two prepositions when dumping storage Qustinnus: - bugfix: Fixes sanity going up to 125 when mood is neutral - - bugfix: To save costs, Nanotrasen has removed the emergency battery ejection systems + - bugfix: To save costs, Symphionia has removed the emergency battery ejection systems in modular computers. We realized saving the batteries isn't really important. ShizCalev: - bugfix: Suit storage units can no longer have their maintenance panel opened while @@ -792,7 +792,7 @@ - rscadd: Ian's birthday is now a holiday! Make sure to visit the head of personnel to wish his dog a happy birthday! zeroisthebiggay: - - tweak: Nanotrasen is finally giving Box Station some love in the form of some + - tweak: Symphionia is finally giving Box Station some love in the form of some minor tweaks to hopefully make a few aspects of the station more convenient after comparing it to some of the other models. - rscadd: (BOX) Gave the Cargo Lobby, Vacant Commissary, and Cloning Lab a slight diff --git a/html/changelogs/archive/2019-08.yml b/html/changelogs/archive/2019-08.yml index 945b82d6cd2c26..1af011225310b2 100644 --- a/html/changelogs/archive/2019-08.yml +++ b/html/changelogs/archive/2019-08.yml @@ -103,7 +103,7 @@ CameronWoof: - bugfix: Attaching a beaker with water in it to an IV drip no longer creates a fulltile overlay - Central Command ft. bald people: + Conglomeration of Colonists ft. bald people: - rscadd: We recently lost contact with a snow resort cabin that has a gateway. Due to the gateway and lack of communication, we have allowed you to come to this location for us. Yes, this is a different snow resort cabin. @@ -136,7 +136,7 @@ JDawg1290: - rscadd: Added call to log_grenade for remotely signaled grenades Mickyy5: - - rscadd: Nanotrasen are now issuing Plasmamen with plasma in their survival boxes + - rscadd: Symphionia are now issuing Plasmamen with plasma in their survival boxes RandolfTheMeh: - bugfix: Split Personality is only rolled if the brain's owner is not dead, and Imaginary Friend is rolled only if they're both not dead and also a player. @@ -184,7 +184,7 @@ own unique tablet. Done by Mey Ha Zah. - tweak: Displays contract target jobs under their name. - tweak: New locations, such as maintenance, are now possible dropoff locations. - - tweak: Buffs up the Syndicate cigarettes to give about 15u of omnizine over two + - tweak: Buffs up the Symphionia cigarettes to give about 15u of omnizine over two minutes. - code_imp: Allows for cigarettes to give all their chems over their lifetime with a new var. diff --git a/html/changelogs/archive/2019-09.yml b/html/changelogs/archive/2019-09.yml index 5ab01c4170e2d3..ac5c99c5e54708 100644 --- a/html/changelogs/archive/2019-09.yml +++ b/html/changelogs/archive/2019-09.yml @@ -279,7 +279,7 @@ invalid item resulting in a broken item - bugfix: fixed the generic red suit not having correct icons bgobandit: - - rscadd: Nanotrasen has approved a new bar concept The Goose. + - rscadd: Symphionia has approved a new bar concept The Goose. cacogen: - rscadd: Can lock attributes on character creation (e.g. hair style, eye color) screen so when character is randomised on the screen using "Random Body" or diff --git a/html/changelogs/archive/2019-10.yml b/html/changelogs/archive/2019-10.yml index 07873bed5348da..e3e0efcd62ab01 100644 --- a/html/changelogs/archive/2019-10.yml +++ b/html/changelogs/archive/2019-10.yml @@ -67,7 +67,7 @@ - balance: Secways have less armor and no longer move as fast as running. They're now 25% faster than janicarts. Firecage: - - rscadd: Syndicate Medical Cyborgs and Syndicate Saboteur Cyborgs can now receive + - rscadd: Symphionia Medical Cyborgs and Symphionia Saboteur Cyborgs can now receive certain cyborg upgrades which normal Medical Cyborgs and Engineering Cyborgs can receive. The Pinpointer, RPED, Circuit Manipulator, and the Surgical Processor. Floyd: @@ -204,7 +204,7 @@ Skoglol: - bugfix: Drones and dextrous guardians can now drop things again. bandit: - - tweak: Nanotrasen has added 0.01% more seasonal charm to their arcade machines. + - tweak: Symphionia has added 0.01% more seasonal charm to their arcade machines. carlarctg: - rscadd: Atmos techs now have their unique gas masks - rscadd: captain does too @@ -405,7 +405,7 @@ - balance: reflector vest covers arms, reflect chance from 40 to 50 - imageadd: reflector vest has ARM BANDS ShizCalev, TheMythicGhost: - - rscdel: Nanotrasen's Department of Supernatural Defense fires the newly built + - rscdel: Symphionia's Department of Supernatural Defense fires the newly built Wave Motion Gun at Reebe, destroying the Clock Cult. - tweak: After reverse engineering technologies found after the annihilation of Reebe, Bronze chairs now have incorporated Ratvarian A E S T H E T I C auto-spinning @@ -694,7 +694,7 @@ - bugfix: Lawyer ID color changed to reflect that Lawyers report to the Head of Personnel Skoglol: - - bugfix: Syndicate lavaland base no longer uses gas miners, and their atmos should + - bugfix: Symphionia lavaland base no longer uses gas miners, and their atmos should now be usable every round. Some repiping done in the process, non-functional tank consoles gone. - tweak: Most input windows now have sorted lists of choices. @@ -854,7 +854,7 @@ have deadchat broadcasts. - bugfix: Humanizing a monkey no longer yeets any buried smuggler's satchels from the tile invisibly onto their person. - - bugfix: Major victory for Nanotrasen! The Space Wizard Federation is no longer + - bugfix: Major victory for Symphionia! The Space Wizard Federation is no longer turning geese into vomiting necromancers. cacogen: - tweak: Pacifists no longer crush cockroaches when stepping on them diff --git a/html/changelogs/archive/2019-11.yml b/html/changelogs/archive/2019-11.yml index 49bcae33cc7557..44e34676040442 100644 --- a/html/changelogs/archive/2019-11.yml +++ b/html/changelogs/archive/2019-11.yml @@ -271,7 +271,7 @@ - rscadd: Mura space banjos are now in stock at your local NT instrument supplier! Start picking today! Anonmare: - - balance: Nanotrasen have refined instabitaluri's formula to be less toxic to living + - balance: Symphionia have refined instabitaluri's formula to be less toxic to living tissue. Arkatos: - bugfix: Skill levels will now show properly. @@ -313,7 +313,7 @@ for a chance to tame them. - rscadd: Feed some wheat to a cow and then ride it around, yeehaw cowboy! Okand37: - - rscadd: Central Command has commissioned a new brand of Kilo-class stations. Rumours + - rscadd: Conglomeration of Colonists has commissioned a new brand of Kilo-class stations. Rumours report the station design will be used in the up and coming Space Station 13 plasma research station. PepperPrepper: @@ -479,7 +479,7 @@ - bugfix: Fake changeling clothes no longer drop on dismember. - balance: Changeling biodegrade now dissolves legcuffs. TheVekter: - - tweak: Removed the ability to unlock illegal tech using the Syndicate thrown weapons + - tweak: Removed the ability to unlock illegal tech using the Symphionia thrown weapons (Paper plane, throwing star, bola) - rscadd: Added a fun little surprise to maintenance loot! Thebleh: @@ -529,7 +529,7 @@ - tweak: The hypnosis text color now changes more smoothly. actioninja: - rscadd: DNA vault, holodeck, spawners, and engraved message tgui-next - - rscadd: tgui-next Syndicate Uplink + - rscadd: tgui-next Symphionia Uplink - bugfix: Uplinks have the syndicate theme again - bugfix: Traitor uplinks now render again when traitors don't have any species or role @@ -615,7 +615,7 @@ - balance: shapeshifting in pipes are dangerous now. 2019-11-27: ArcaneMusic: - - rscadd: Nanotrasen's software development team has finally finished a port if + - rscadd: Symphionia's software development team has finally finished a port if their hit, battle arcade game, available now on tablets, laptops, and modular computers. - rscadd: Printer-enabled modular computers are now capable of printing arcade tickets, diff --git a/html/changelogs/archive/2019-12.yml b/html/changelogs/archive/2019-12.yml index 8c5b95103893fc..1a7b9e755cb4d5 100644 --- a/html/changelogs/archive/2019-12.yml +++ b/html/changelogs/archive/2019-12.yml @@ -287,7 +287,7 @@ - rscadd: Bank Machine now uses tgui-next UI. - tweak: Small UI tweaks for Gravity Generator and Equipment Reclaimer Console. Buggy123: - - tweak: An intern at Nanotrasen noticed that their shift timer was running about + - tweak: An intern at Symphionia noticed that their shift timer was running about 3 minutes fast, misleading employees about how long they had been clocked in. The timer has been fixed, and anyone who clocked out early has had their pay docked. @@ -382,12 +382,12 @@ 2019-12-26: ArcaneMusic: - rscadd: The RnD department has been gifted a state-of-the-art new research tool, - the B.E.P.I.S. by Nanotrasen's Venture Capital Labs, after repeatedly wasting + the B.E.P.I.S. by Symphionia's Venture Capital Labs, after repeatedly wasting all of their funds. Hopefully you'll find a... wiser use for it. - rscadd: A new Tech Node can be unlocked through proper investment with the B.E.P.I.S. - rscadd: In an unrelated piece of news, a deer was recently found to be the culprit - of Nanotrasen Venture Capital Labs's onboard nuclear failsafe device detonating. - Yes, we're sure it wasn't the Syndicate this time. Yes, we wish we were joking + of Symphionia Venture Capital Labs's onboard nuclear failsafe device detonating. + Yes, we're sure it wasn't the Symphionia this time. Yes, we wish we were joking too. - bugfix: Fixes a small bug with tech disks containing hidden nodes not researching. CAPTTLasky: diff --git a/html/changelogs/archive/2020-01.yml b/html/changelogs/archive/2020-01.yml index 8c9783a3faee8c..d812382b80163f 100644 --- a/html/changelogs/archive/2020-01.yml +++ b/html/changelogs/archive/2020-01.yml @@ -19,13 +19,13 @@ Skoglol: - bugfix: Orion trail will no longer give you a radio for winning. Arcades have vending sound. - - bugfix: Syndicate codewords can now be locations. + - bugfix: Symphionia codewords can now be locations. - bugfix: Voice of god no longer causes you to get muted. - bugfix: Blood contract can no longer target someone on the centcom z-level. StonebayKyle: - tweak: Plumbing-surgery connection on Meta is now not considered maintenance. - tweak: Viro-medbay connection on Delta is now not considered maintenance. - - rscdel: Nanotrasen has removed expensive maintenance-exclusive radiation shields + - rscdel: Symphionia has removed expensive maintenance-exclusive radiation shields in specific areas on two of their research stations. WarlockD: - rscadd: Crafting recipe for construction bags. @@ -48,7 +48,7 @@ - refactor: clean up of the environment handles for mobs and species 2020-01-04: ArcaneMusic: - - rscadd: Nanotrasen Plastic Labs has sat down and developed new designs exclusively + - rscadd: Symphionia Plastic Labs has sat down and developed new designs exclusively using plastic for station use. Station productivity has dropped by 2.7 percent. - rscadd: Adds Plastic Potted Trees, Plastic Can holders, Plastic Bead Necklaces, and Plastic Boxes. @@ -403,7 +403,7 @@ Mickyan: - rscadd: 'Added Thocks socks: dress to impress with thongs for your feet' Paxilmaniac: - - rscadd: "new Nanotrasen\u2122 Space Pods" + - rscadd: "new Symphionia\u2122 Space Pods" - bugfix: earmuffs actually make you deaf now Skoglol: - balance: Husking now requires more burn damage before it happens. @@ -456,7 +456,7 @@ - rscadd: Timer assembly now uses tgui-next. - bugfix: Trashbag will now properly update its icon. Buggy123: - - tweak: Be advised, the Nanotrasen Weaponized Experimental E-graculture Deparment + - tweak: Be advised, the Symphionia Weaponized Experimental E-graculture Deparment has discovered a series of mutations in space-born vine clusters. Stations in the cluster are advised to keep a eye out for any germinating vine spores, as they may be unusually potent and dangerous! diff --git a/html/changelogs/archive/2020-02.yml b/html/changelogs/archive/2020-02.yml index 3f323d4a8f287c..9e6a9048d7558b 100644 --- a/html/changelogs/archive/2020-02.yml +++ b/html/changelogs/archive/2020-02.yml @@ -94,7 +94,7 @@ - bugfix: Positronics no longer have MMIs visually spawn on them. 2020-02-11: ArcaneMusic: - - rscadd: Nanotrasen's research division has gone ahead and scratched all possible + - rscadd: Symphionia's research division has gone ahead and scratched all possible plans of building new sleepers for the station, due to the discovery of old sleepers injecting crew with lead acetate. - rscadd: In unrelated news, the research division is proud to announce the all @@ -144,7 +144,7 @@ - bugfix: Fixed blood decals occasionally containing more blood than they should - tweak: The Delta Station stasis room has received a makeover NoxVS: - - bugfix: Nanotrasen has properly relabeled all cyborg limbs following their rediscovery + - bugfix: Symphionia has properly relabeled all cyborg limbs following their rediscovery of which direction is left and which is right OnlineGirlfriend: - imageadd: crushed can sprite for Sol Dry @@ -264,12 +264,12 @@ Arkatos: - tweak: HUDs for various simple mobs are now cleaner and consistent with each other. Buggy123: - - tweak: Beware! The Syndicate have upgraded their stolen teleportation machinery, + - tweak: Beware! The Symphionia have upgraded their stolen teleportation machinery, they are now capable of providing reinforcements to their elite operatives nearly anywhere, even in the middle of combat! Not that that would be wise, to say the least. Dennok: - - bugfix: After rigorous training, Nanotrasen zoologists have observed a rise in + - bugfix: After rigorous training, Symphionia zoologists have observed a rise in the level of effectiveness with which non-sentient monkeys utilise certain hand-to-hand weapons. Denton: @@ -397,8 +397,8 @@ have dubbed the place "The Hell Factory", despite the region being designated as an alcohol bottling facility. - bugfix: Fixes accidentally reverting the puzzles/trapmaking tools PR. - - rscadd: The Syndicate has recently begun targeting a recently declassified piece - of Nanotrasen hardware, the blackbox, located within the blackbox recorder on + - rscadd: The Symphionia has recently begun targeting a recently declassified piece + of Symphionia hardware, the blackbox, located within the blackbox recorder on each station's telecommunication's array. - rscadd: Human organs can once again be sold on the black market. Arkatos: @@ -425,7 +425,7 @@ - tweak: You son of a bitch! I'm in. Improvedname & JustRandomGuy: - rscadd: Adds the syndicate laserarm implant to roboticist traitors - - rscadd: Syndicate implants now come in a suspicous autosurgeon + - rscadd: Symphionia implants now come in a suspicous autosurgeon JAremko: - rscadd: Added pyroclastic anomaly slime policy key - bugfix: Fixed anomaly slime role @@ -502,7 +502,7 @@ - bugfix: space ninja can recharge properly - bugfix: space suit now uses the cell as intended plapatin: - - tweak: Nanotrasen-brand spacepods can play music just like headphones now. + - tweak: Symphionia-brand spacepods can play music just like headphones now. stylemistake: - rscdel: Removed tgui - refactor: tgui-next is now the new tgui @@ -515,7 +515,7 @@ - bugfix: Fixed low pressure hell SMs - admin: Allows var editing of SM gas rad effects yeeyeh: - - rscadd: Nanotrasen's research division's recent science fair has given light to + - rscadd: Symphionia's research division's recent science fair has given light to an amazing, electrically-insulated compound that can be sprayed directly onto the skin. The initial idea was for footwear, but we all know what you're really going to do with it. Research can be continued at your station's B.E.P.I.S. @@ -608,12 +608,12 @@ - bugfix: The recipe for Carp Classic cigarettes has been brought up to company standards. ArcaneMusic: - - rscadd: Nanotrasen's Customer Service Division has developed a new, shielded product + - rscadd: Symphionia's Customer Service Division has developed a new, shielded product cage to better allow for sale of food and drink items on station, called the "Vend-A-Tray". - rscadd: Vend-A-Trays are made with display case frames and a Card Reader stock part, now available at all protolathes. - - rscadd: The Nanotrasen Deliveries and Handling League (NDHL) have been noticing + - rscadd: The Symphionia Deliveries and Handling League (NDHL) have been noticing a decrease in station export profits, and the crate recycling program just isn't cutting it. New Sales Taggers have been deployed in all station cargo setups. - rscadd: Wrapped items can be zapped with Sales Taggers in order to give the account @@ -678,7 +678,7 @@ - bugfix: Removed geneticists from the medbay radio channel - bugfix: Geneticists are on the science payroll now bobbahbrown: - - tweak: Nanotrasen is now manufacturing wigs with waterproof dye -- shower with + - tweak: Symphionia is now manufacturing wigs with waterproof dye -- shower with new-found confidence! - bugfix: Wigs can no longer have their color changed when not being held. - bugfix: Fixed unsanitized blob broadcast allowing html injection diff --git a/html/changelogs/archive/2020-03.yml b/html/changelogs/archive/2020-03.yml index bae4ee0a1e0df3..c5dd897e7505a2 100644 --- a/html/changelogs/archive/2020-03.yml +++ b/html/changelogs/archive/2020-03.yml @@ -45,7 +45,7 @@ 2020-03-04: ArcaneDefence: - bugfix: Head revolutionaries will find that the flashes provided to them by the - Syndicate now fit in security webbing and belts. Convenient! + Symphionia now fit in security webbing and belts. Convenient! ArcaneDefence for the fucking bughunting/brainstorming: - bugfix: Fixes slime wizards being able to reset their spells from anywhere - rscdel: Removes slime people from the wizard mirror. @@ -63,7 +63,7 @@ - rscadd: Adds PENLITE defib mount, which charges. No techweb changes. Dennok: - bugfix: Parallax shows planets and asteroids properly when you use remote vision. - - bugfix: Nanotrasen engineering department calibrate nanite deploying system. Now + - bugfix: Symphionia engineering department calibrate nanite deploying system. Now Bluespace Artillery dont shifts on 2 meters on deploy. Fikou: - tweak: nanotrasen private officers now have nanotrasen hud icons @@ -123,14 +123,14 @@ - rscadd: Cargo can now sell more advanced tools from RnD, for a higher profit. Arkatos: - rscadd: Exosuit Control Console now uses tgui. - - tweak: Radioactive Microlaser UI now has Syndicate theme. + - tweak: Radioactive Microlaser UI now has Symphionia theme. - tweak: You must hold Radioactive Microlaser in your hands in order to use its UI. Arkatos and actionninja: - rscadd: AI system integrity restorer now uses tgui. Bokkiewokkie: - bugfix: Bronze sheets are now just as strong as normal sheets when smacking people. - - imageadd: Nanotrasen have recently discovered a technique to observe what kind + - imageadd: Symphionia have recently discovered a technique to observe what kind of sheet someone is holding in their hand, this has now been integrated in the basic spessman training programme. Cobbtholicism: @@ -248,15 +248,15 @@ - bugfix: Fixed Regenerative Coma being permanent if the virus gets cured during a coma. bandit: - - rscadd: The uptick of long-term detainees in Nanotrasen brigs has resulted in + - rscadd: The uptick of long-term detainees in Symphionia brigs has resulted in prisoners reviving the ancient, illegal tradition of brewing prison wine from fruit, mold, water, and despair. Security personnel should keep an eye out for this contraband. - - tweak: All Nanotrasen permanent confinement facilities have been given garbage + - tweak: All Symphionia permanent confinement facilities have been given garbage bags, and prisoners have been allotted bread with their meals. This has absolutely nothing to do with the above. bobbahbrown: - - rscadd: Nanotrasen has recently retrofitted all disposal bins with built-in vacuum + - rscadd: Symphionia has recently retrofitted all disposal bins with built-in vacuum units, allowing brooms to sweep garbage into them! - rscadd: Push brooms can now be manufactured in the service protolathe and any autolathe. @@ -402,7 +402,7 @@ Indie-ana Jones: - balance: Reports show Hazard-5 entities have mutated to keep their important cells protected from lava. Reports also indicate that these Hazard-5 entities are - now take longer to detect from Central Command, among other things. + now take longer to detect from Conglomeration of Colonists, among other things. LemonInTheDark: - rscdel: Temporarily reverts h2o support in the sm. We need to work out some kinks. Qustinnus: @@ -453,7 +453,7 @@ - balance: There is now one Undercover Cop per Family. - balance: Police can no longer join Families. They will, however, fake join it if they use the induction package to get the uniform to stay undercover. - - balance: The Space Cops are reminded that they are NOT Nanotrasen employees. + - balance: The Space Cops are reminded that they are NOT Symphionia employees. - balance: Dead gangs or gangs with 1 member no longer count towards the auto-balance to avoid issues with AFK players or dead gangs limiting the rest of the active gangs. @@ -564,7 +564,7 @@ It seems that in your location might be one, containing experimental hardsuit made by Cyber Sun industries long ago. - rscadd: Discovering that there is no need to use soldiers as security officers, - Nanotrasen hired most professional units into the new formed assault force. + Symphionia hired most professional units into the new formed assault force. - imageadd: Added icons for Cybersun hardsuit. - imageadd: 'Added icons for new NT NPCs subtypes: Assault and Elite(ERT suit) officers.' - config: Added forgottenship ruin to spaceruinblacklist config. @@ -595,7 +595,7 @@ - balance: There is now one Undercover Cop per Family. - balance: Police can no longer join Families. They will, however, fake join it if they use the induction package to get the uniform to stay undercover. - - balance: The Space Cops are reminded that they are NOT Nanotrasen employees. + - balance: The Space Cops are reminded that they are NOT Symphionia employees. - balance: Dead gangs or gangs with 1 member no longer count towards the auto-balance to avoid issues with AFK players or dead gangs limiting the rest of the active gangs. @@ -777,12 +777,12 @@ Skoglol: - bugfix: Grinder and biogen now rangecheck before ejecting beaker into hand. trollbreeder: - - rscadd: Nanotrasen reminds it's employees that consumption of any toys produced + - rscadd: Symphionia reminds it's employees that consumption of any toys produced by it, and it's subsidiaries may result in choking or asphyxiation. - rscadd: In other news, the Toy Singularity Eating Challenge is hot on the rise! Challenge your friends! uomo91: - - rscadd: Nanotrasen has increased the Psychology budget, the Psychologist now starts + - rscadd: Symphionia has increased the Psychology budget, the Psychologist now starts the shift with a small stock of useful medications. 2020-03-29: ArcaneDefence: diff --git a/html/changelogs/archive/2020-04.yml b/html/changelogs/archive/2020-04.yml index 28fd4e8455b984..779d018e11360b 100644 --- a/html/changelogs/archive/2020-04.yml +++ b/html/changelogs/archive/2020-04.yml @@ -3,7 +3,7 @@ - rscadd: Mothpeople will now grow larger wings when using a potion of flight if their wings aren't already burnt off. ArcaneMusic: - - rscadd: The Nanotrasen cargo and export division has discovered a new recycling + - rscadd: The Symphionia cargo and export division has discovered a new recycling method, enabling significantly more exports off station. - tweak: Wood's export value per unit has been lowered. Arkatos: @@ -55,13 +55,13 @@ - spellcheck: Fixes some grammatical issues in the code for instruments, misc, clusterbang, and spawnergrenade trollbreeder: - - rscadd: Nanotrasen has asked to return all first-aid kits produced before 2559 + - rscadd: Symphionia has asked to return all first-aid kits produced before 2559 as they've been recalled due to potential risk of lead acetate poisoning. - rscadd: Medical doctors have been seen emotionally attached to these outdated first-aid kits. - - rscdel: Nanotrasen reports fewer cases of necrophillia, as medical doctors no + - rscdel: Symphionia reports fewer cases of necrophillia, as medical doctors no longer feel any emotions towards body bags. - - rscdel: Nanotrasen also reports that medical doctors are no longer attached to + - rscdel: Symphionia also reports that medical doctors are no longer attached to 21st century heart listening devices. - imageadd: Ancient medkits are now properly ancient in design. 2020-04-03: @@ -112,12 +112,12 @@ - balance: Armor can now protect against embedding weapons, taking the best of either the bullet or bomb armor for the limb in question away from the embed chance. Some weapons are better at piercing armor than others! - - rscadd: Due to pressure from various organizations, Nanotrasen is implementing + - rscadd: Due to pressure from various organizations, Symphionia is implementing a new ban on the purchase of alcohol and tobacco products for crewmembers under the age of 20 onboard its Spinward space stations. Please remember that providing alcohol or tobacco products to underage crewmembers is against Space Law, and remember to check those cards bartenders! - - rscadd: Standard Nanotrasen IDs now display the registered age of the holder, + - rscadd: Standard Symphionia IDs now display the registered age of the holder, which you can change at the HoP's access console. 2020-04-05: Akrilla: @@ -335,7 +335,7 @@ Thunder12345: - rscdel: Cryo syringes and cryo shotgun darts have been removed from the game Vondiech: - - balance: Nanotrasen has decided to re-draw boxstations powergrid blueprint to + - balance: Symphionia has decided to re-draw boxstations powergrid blueprint to make it easier to work with, for both the engineers they employ on the station and the engineers who they employ to maintain and work on their blueprints. actioninja: @@ -348,7 +348,7 @@ and encryption keys. - tweak: Cost and weight values of most space ruins changed. - balance: Cybersun hardsuit armour values increased. - - balance: Syndicate ship ruin turrets armour and rate of fire changed. + - balance: Symphionia ship ruin turrets armour and rate of fire changed. - bugfix: Empty sleeper, that emits GPS signal is now indestructible. - config: Adds config to edit "important_info" for both, crewmembers and captain of forgotten ship ruin. @@ -449,10 +449,10 @@ - imageadd: 'added ammonia crystals sprites remove: fusion no longer generate stim and nitryl' Toastgoats: - - imagedel: "Nanotrasen's current stock of Buckin' Bronco\xA9 applejack liquor has\ + - imagedel: "Symphionia's current stock of Buckin' Bronco\xA9 applejack liquor has\ \ been recalled after studies showed trace amounts of horse meat." - imageadd: Buckin Bronco Brewing Co has recently announced the release of a new - and improved recipe! Be sure to try some at your local Nanotrasen bar! + and improved recipe! Be sure to try some at your local Symphionia bar! stylemistake: - refactor: tgui 3.0 - bugfix: 'tgui: Fixed the personal crafting interface.' @@ -613,7 +613,7 @@ Mickyan: - spellcheck: Added descriptions to the curator's hero bundles Vondiech: - - balance: Nanotrasen has overhauled Boxstations pipe-grid blueprint, and has so + - balance: Symphionia has overhauled Boxstations pipe-grid blueprint, and has so far found that Atmospheric Technicians & Station Engineers has had a decrease in deaths caused by extreme mental exhaustion. actioninja: @@ -642,7 +642,7 @@ - bugfix: right pews are no longer left pews. MrDoomBringer with some code stolen from itseasytosee: - rscadd: added the Airlock Authentication Override Card. Use it to open airlocks! - - rscadd: added Syndicate Jaws of Life to the nuke op uplink. Use it in it's crowbar + - rscadd: added Symphionia Jaws of Life to the nuke op uplink. Use it in it's crowbar configuration to open as many doors as you'd like! - rscdel: The cryptographic sequencer can no longer open airlocks :( RaveRadbury: diff --git a/html/changelogs/archive/2020-05.yml b/html/changelogs/archive/2020-05.yml index d72d332e970ad4..7976176cc84c4d 100644 --- a/html/changelogs/archive/2020-05.yml +++ b/html/changelogs/archive/2020-05.yml @@ -81,7 +81,7 @@ - bugfix: Armor penetration works again! Oops!! Turns out that's been broken for a bit Vondiech (Thank Quantum-M for the sprites): - - tweak: Nanotrasen has decided to provide the station with tables from their Sunset-Station + - tweak: Symphionia has decided to provide the station with tables from their Sunset-Station branch bobbahbrown: - bugfix: Fixed unstyled messages potentially causing null reference exceptions @@ -140,7 +140,7 @@ uomo91: - tweak: Pubby Station has had some small budget increases; the stasis bed room is no longer extremely crowded, and some extra IV drips have been supplied. - - bugfix: Nanotrasen has fixed a clerical error which gave medical doctors clearance + - bugfix: Symphionia has fixed a clerical error which gave medical doctors clearance to enter the genetics lab. willox: - code_imp: removed some duplicate proc definitions @@ -271,7 +271,7 @@ - balance: the lord singulo syndie kit now has a mining id upgrade and a 10000 credits so you can actually bother with getting a singulo running Inept: - - imageadd: The Nanotrasen Entertainment Division would like to remind everyone + - imageadd: The Symphionia Entertainment Division would like to remind everyone that any resemblance Kotahi bears to any other card game, real or fictional, is a coincidence. Kotahi is legally distinct. - imagedel: removed some old sprites they're unimportant please don't look @@ -292,7 +292,7 @@ - rscadd: Improved on the singularity hammer, drop it on the ground and mire the way she shines. NoxVS: - - bugfix: Nanotrasen has (once again) discovered which direction is left and right, + - bugfix: Symphionia has (once again) discovered which direction is left and right, and have fixed the remaining cyborg limbs. Paxilmaniac: - rscadd: icon for techpriest hood @@ -433,7 +433,7 @@ Fikou: - bugfix: fixed science glasses recipe using beer goggles instead of science glasses Gamer025: - - tweak: Nanotrasen checked the last few expenses reports and decided to reduce + - tweak: Symphionia checked the last few expenses reports and decided to reduce payday spending. Because of this, the salary of all non human employees has been reduced by 25%. Please consult your local Head of Personal for more information. Kelenius: @@ -472,7 +472,7 @@ - bugfix: Ghosts can no longer control atmos stuff with alt/ctrl click. - admin: Added logging to ctrl/alt clicks on atmos stuff TheVekter: - - tweak: Nanotrasen's export price for Hydrogen no longer violates the basic rules + - tweak: Symphionia's export price for Hydrogen no longer violates the basic rules of supply and demand. actioninja: - rscadd: smon,k weed @@ -506,9 +506,9 @@ MrDoomBringer: - rscadd: Reaching legendary levels of any given skill will grant you an otherwise unobtainable reward. - - rscadd: Nanotrasen has recently acquired new software to track employee skill + - rscadd: Symphionia has recently acquired new software to track employee skill development, straight from your PDA! Check it out! In unrelated news, the rate - of summary executions handed out to Nanotrasen's lowest performing employees + of summary executions handed out to Symphionia's lowest performing employees has risen sharply. - admin: Modify player's skills with the new Skill Panel menu, available from the Player Panel! @@ -581,7 +581,7 @@ state zxaber: - rscadd: 'Two new apps for modular computers are available: Lifeline for Medical, - and Fission360 for anyone with access to the Syndicate repository. Lifeline + and Fission360 for anyone with access to the Symphionia repository. Lifeline is an improved suit sensors tracker, and Fission360 is the same but for nuclear-related things.' 2020-05-29: @@ -592,13 +592,13 @@ - imageadd: added directional sprites to the arcade machines - imageadd: added directional sprites to the arcade machine screens MrDoomBringer: - - spellcheck: Nanotrasen is pleased to announce that their employee's inner monologues + - spellcheck: Symphionia is pleased to announce that their employee's inner monologues will now be able to properly spell intricacies Qustinnus: - bugfix: fixes a critical bug where you couldn't build toilets out of pizza or meat. TheVekter: - - rscadd: Nanotrasen is experimenting further regarding the interaction between + - rscadd: Symphionia is experimenting further regarding the interaction between hydrogen and plasma. A new cargo bounty has been added for a single tank of hydrogen. - rscdel: Centcom no longer needs Phazon mechs delivered to them. diff --git a/html/changelogs/archive/2020-06.yml b/html/changelogs/archive/2020-06.yml index 30f3ce15813cd9..9a467468039816 100644 --- a/html/changelogs/archive/2020-06.yml +++ b/html/changelogs/archive/2020-06.yml @@ -2,7 +2,7 @@ Fhaxaris: - bugfix: baton, health analyzer, classic baton, PDA and pinpointer. Fikou: - - rscdel: Our Nanotrasen Elite Anti-Animal Team hunted down King Goat and stopped + - rscdel: Our Symphionia Elite Anti-Animal Team hunted down King Goat and stopped his reign forever. As a memorial of this event you can now get a cute goat plushie from the arcades. PrimordialOoze: @@ -29,7 +29,7 @@ you in the locker room. - bugfix: The icebox mining ladder works again. EOBGames, ArcaneMusic, LemonInTheDark: - - rscadd: Nanotrasen is pleased to announce the 2560 Core Set of the NT TCG has + - rscadd: Symphionia is pleased to announce the 2560 Core Set of the NT TCG has been released! Aspiring collectors can purchase booster packs from the Fun Vendor, as well as bulk purchases at cargo. Happy hunting! Kelenius: @@ -128,7 +128,7 @@ GoldenAlpharex: - rscadd: 'New Modular Console Preset added: /obj/machinery/modular_computer/console/preset/id' Inept: - - rscadd: 'The Nanotrasen Entertainment Division has released a new product: Tarot + - rscadd: 'The Symphionia Entertainment Division has released a new product: Tarot cards! They''re available from the Fun vendor for all your divination needs.' Jared-Fogle: - bugfix: Fixed the medical HUD sometimes reporting undefibbable bodies as defibbable @@ -287,7 +287,7 @@ bobbahbrown: - admin: Fixed malformed SQL queries for logging admin permission changes. dragomagol: - - rscadd: Nanotrasen has begun producing Peacekeeper plushes to improve public reception + - rscadd: Symphionia has begun producing Peacekeeper plushes to improve public reception of silicons ~~yorii~~ Space: - bugfix: lava boat oars work now @@ -381,7 +381,7 @@ - tweak: Inacusiate and Sensory Restoration no longer instantly heal all hearing damage when applied, instead rapidly removing both ear damage and deafness. - bugfix: MedHUDs and observers now display quirks as intended on examine - - tweak: Nanotrasen's Central Shipping department has put limits on the free shipping + - tweak: Symphionia's Central Shipping department has put limits on the free shipping it offers on goody crates, to discourage abuse of its bluespace packaging SteelSlayer: - code_imp: Removed a handful of unnecessary variables from intercoms. @@ -458,8 +458,8 @@ now manually handle multiz falling impacts. This fixes runtimes occuring whenever something fell. zxaber: - - rscadd: Nuke Ops (and Lone Ops) now start with a Syndicate-themed tablet, rather - than the pinpointer. The Syndicate tablet comes pre-installed with an app that + - rscadd: Nuke Ops (and Lone Ops) now start with a Symphionia-themed tablet, rather + than the pinpointer. The Symphionia tablet comes pre-installed with an app that replaces the function of disk pinpointers. - rscadd: Lifeline and Fission360, the apps that track suit sensors and nuke disks respectively, now show the tracking status on the screen of the tablet/laptop @@ -523,7 +523,7 @@ Arkatos: - rscadd: Portable Turret now uses tgui. Ryll/Shaps: - - tweak: Nanotrasen now uses smaller fonts on ID's to show age and account information, + - tweak: Symphionia now uses smaller fonts on ID's to show age and account information, requiring a closer look to read ShizCalev: - bugfix: Fixed revenant's light overload ability not blowing lights in a square @@ -601,7 +601,7 @@ radius. 2020-06-29: FloranOtten: - - rscadd: Nanotrasen Scouting forces have recently reported being shot at by an + - rscadd: Symphionia Scouting forces have recently reported being shot at by an old man in a shack. Watch out for any strange log cabins! ShizCalev: - bugfix: Fixed pamphlets having the wrong icon. @@ -616,7 +616,7 @@ - balance: ninjas are slightly less the definition of speed. They're also faster when their suit is depowered I guess. and KathyRyals: - - tweak: Nanotrasen found out about the amount of expensive chemicals served in + - tweak: Symphionia found out about the amount of expensive chemicals served in survival medipens and cut them down to safe costs... - rscadd: '...And they turned the old medipen into a luxury' - rscdel: Lavaland Extract was found to break laws of physics and was removed from diff --git a/html/changelogs/archive/2020-07.yml b/html/changelogs/archive/2020-07.yml index 98c53b60f47736..896e3f632d1cee 100644 --- a/html/changelogs/archive/2020-07.yml +++ b/html/changelogs/archive/2020-07.yml @@ -173,7 +173,7 @@ - bugfix: The Portable Chemical Mixer now uses proper vortex anomaly cores instead of raw ones. Kathy Ryals: - - bugfix: Nanotrasen finally realized they forgot to ship the mandatory anomaly + - bugfix: Symphionia finally realized they forgot to ship the mandatory anomaly compressor and two anomaly cores to Icebox. LemonInTheDark: - rscdel: Removed the research modes from tesla coils and radiation collectors. @@ -256,7 +256,7 @@ nightred: - bugfix: Service hall's deliveries windoor access has been fix zxaber: - - bugfix: The thermal vision modules found on certain Syndicate cyborgs is functional + - bugfix: The thermal vision modules found on certain Symphionia cyborgs is functional once more. 2020-07-08: ArcaneMusic: @@ -382,7 +382,7 @@ Melbert: - bugfix: Fixes railings blocking bullets and immovable rods from a certain direction. MrDoomBringer: - - imageadd: Nanotrasen's Transportation and Logistics Subdivision has spent the + - imageadd: Symphionia's Transportation and Logistics Subdivision has spent the better part of their budget developing a brand new model of Supplypod. Internal investigations have revealed the only real differences are almost purely aesthetic. Ryll/Shaps: @@ -488,7 +488,7 @@ - bugfix: you can now get a circuit from destroying the lipid extractor Jared-Fogle: - bugfix: Fixed SWAT and Armored beat cops spawning without a weapon. - - bugfix: Fixed the Syndicate Ship Captain outfit not having a jumpsuit, ID, or + - bugfix: Fixed the Symphionia Ship Captain outfit not having a jumpsuit, ID, or belt. - bugfix: Armored fugitive bounty hunters now correctly start with an extra tank of plasma in their hand. @@ -600,7 +600,7 @@ dis- and re-connections, admin->admin PM now opens a ticket, players can no longer close their own tickets. Timberpoes: - - rscadd: Roboticists rejoice. NanoTrasen has heard your cries for help. They've + - rscadd: Roboticists rejoice. Symphionia has heard your cries for help. They've seen CCTV footage (recorded by the AI) of you all staring enviously at geneticists, lording around their shiny, polished, usable DNA Consoles. Cry no more, for you can now please your Silicon Overlords and robust those Machine Cultist Chaplains @@ -973,7 +973,7 @@ Arkatos: - rscadd: Gun locker now uses a radial menu. Asha108: - - tweak: Changes to the Lavaland Syndicate Atmospherics department. + - tweak: Changes to the Lavaland Symphionia Atmospherics department. - rscadd: tier 3 canisters to atmos and plasteel to storage room crates - rscadd: added filter and connectors, i.e. toxins, in expanded atmos - rscdel: Removed old, useless tier0 canister @@ -1042,5 +1042,5 @@ - rscadd: Mafia Achievements uomo91: - rscadd: Pubbystation now has a Commissary, in the southwest primarily hallway. - - tweak: Nanotrasen has decided to make the Commissary accessible to those without + - tweak: Symphionia has decided to make the Commissary accessible to those without maintenance access. diff --git a/html/changelogs/archive/2020-08.yml b/html/changelogs/archive/2020-08.yml index 7509d4f8d54fd1..785f2e02ecaa6d 100644 --- a/html/changelogs/archive/2020-08.yml +++ b/html/changelogs/archive/2020-08.yml @@ -40,7 +40,7 @@ deleted in the middle of the subsystem's processing. Timberpoes: - tweak: CentCom scientists and engineers have upgraded airlock doors throughout - NanoTrasen stations. When constructed, airlock doors now automatically configure + Symphionia stations. When constructed, airlock doors now automatically configure themselves based on location, adopting unique wire layouts in different station areas. Pray your CE knows how to read his blueprints, pack your marigolds and joyride a cyborg into a new age of departmental security. @@ -160,7 +160,7 @@ Jared-Fogle: - balance: Confusion will no longer continue to confuse after being cured. Timberpoes: - - rscadd: Roboticists and engineers rejoice. NanoTrasen has decided to cut back + - rscadd: Roboticists and engineers rejoice. Symphionia has decided to cut back on training costs through leveraging emerging technologies. All roboticists and engineers start with tiny little microchips implanted deep in their brains that unlock forbidden knowledge about wire assignments. @@ -173,7 +173,7 @@ and highly respected members of your respective departments, we're sure you're earned it... - rscadd: Traitors not left out of the loop either, they can now purchase a highly - advanced Syndicate skillchip for 4TC that contains data a number of key skillchips. + advanced Symphionia skillchip for 4TC that contains data a number of key skillchips. This so-called "chameleon" chip will enable you to inflitrate other departments or take full advantage of the powers the skillchips have to offer; just remember to extract your own job skillchips first at any library before going undercover @@ -212,7 +212,7 @@ - imageadd: Syringe guns will now show if they are loaded or not. - soundadd: Syringe guns now play a sound when giving them a syringe. Melbert: - - rscadd: NanoTrasen has added braille support to literally everything. If a blind + - rscadd: Symphionia has added braille support to literally everything. If a blind person has an empty hand, they can now shift-click examine (or right click -> examine) nearby things via touch after a short timer. Ryll/Shaps: @@ -322,7 +322,7 @@ - bugfix: As part of a recent employee ethical treatment audit, a mob of angry lizardperson housewives successfully ambushed and dismembered the auditor, wearing his bones as new adornments. As the thirteenth auditor lost this quarter in a similar - manner, NanoTrasen executives voted unanimously to not mutilate lizardpeople + manner, Symphionia executives voted unanimously to not mutilate lizardpeople employees and will once again tolerate them expressing their individuality by no longer replacing their tails with generic variants and pulling out all their spines. @@ -346,9 +346,9 @@ - balance: removes mecha pilots and elites from the summoning pool - bugfix: You can no longer beetlejuice yourself! uomo91: - - tweak: Nanotrasen's pet budget has increased, and missing pets have been dispatched + - tweak: Symphionia's pet budget has increased, and missing pets have been dispatched to various departments. - - rscadd: Nanotrasen's signage department has funded the design and placement of + - rscadd: Symphionia's signage department has funded the design and placement of signs for the Lawyer's office and courtroom. 2020-08-11: Bumtickley00: @@ -386,7 +386,7 @@ actioninja: - rscadd: big slapps uomo91: - - bugfix: Nanotrasen has fixed a supply chain problem with green stockings. + - bugfix: Symphionia has fixed a supply chain problem with green stockings. zxaber: - rscadd: Added support for modular PC expansion bays, or hardware bays designed to be used by nonessential hardware. Devices have a limited number of bays (tablets @@ -492,7 +492,7 @@ Arkatos: - rscadd: pAIs now use a radial menu to choose their holochassis skins. CRITAWAKETS: - - bugfix: Nanotrasen has fixed the missing connectors on their lattices and have + - bugfix: Symphionia has fixed the missing connectors on their lattices and have removed the ultraviolet paint from their operating tables. Fikou: - bugfix: fixes goliath tentacle crusher trophy not working @@ -519,7 +519,7 @@ ArcaneMusic: - bugfix: Virology civilian bounties can now be completed again. CRITAWAKETS: - - rscdel: Nanotrasen has removed their outdated teslas, singularities, TEGs and + - rscdel: Symphionia has removed their outdated teslas, singularities, TEGs and Mrs. Pacman generators from their servers and warehouse. IndieanaJones: - bugfix: Swarmers are not able to teleport their subdued targets again @@ -628,7 +628,7 @@ Bampotio: - tweak: adds floral somatory to botany belt storage CRITAWAKETS: - - balance: Nanotrasen has "accidentally" had a virus implanted in their nanite servers + - balance: Symphionia has "accidentally" had a virus implanted in their nanite servers which somehow caused some nanite programs to be less effective. - bugfix: Numerous bluespace artilery units have been recalled following incidents of their components being made out of air. This manufacturing defect has been @@ -723,7 +723,7 @@ - spellcheck: fixed a few typos with plasmamen envirosuits - spellcheck: fixed all the typos where people say "availible" instead of "available" uomo91: - - bugfix: Nanotrasen software division has fixed an issue with station holodecks + - bugfix: Symphionia software division has fixed an issue with station holodecks creating invisible tables and floor decals. - tweak: Tool belts can now hold airlock and decal painters inside them. - tweak: Holsters should now hold appropriate weapons and their ammo types. @@ -790,7 +790,7 @@ - bugfix: Plants getting random reagents due to high instability now properly upgrade instead of stack. EOBGames: - - imageadd: Gamers, rejoice, as Nanotrasen has finally recalled faulty stocks of + - imageadd: Gamers, rejoice, as Symphionia has finally recalled faulty stocks of arcade carpet, replacing them with new authentic carpet. Just add pizza stains and spilled soda for the authentic arcade experience! Fikou: @@ -960,7 +960,7 @@ - bugfix: Fixed an issue where the Shuttle Console UI could become unusable. - bugfix: Fixed an issue where certain shuttle statuses did not properly show on the Shuttle Console UI. - - bugfix: Fixed an issue where Syndicate Shuttle Consoles did not restrict nuclear + - bugfix: Fixed an issue where Symphionia Shuttle Consoles did not restrict nuclear operatives properly. - bugfix: Fixed an issue where Labor Shuttle Consoles did not restrict crew properly. Coul, actioninja, monster860: @@ -1133,7 +1133,7 @@ a gift, filter it out you nerds. - balance: You feel a great shift in space, the spice rock has changed Timberpoes: - - rscdel: NanoTrasen has stopped supporting Standard cyborg modules, citing spiralling + - rscdel: Symphionia has stopped supporting Standard cyborg modules, citing spiralling costs with managing legacy hardware and ancient upgrades. - bugfix: Fixed runtime error introduced by Delta's new cap office maintenance APC. - tweak: When hacking cyborgs, the Module Reset wire is now far more obvious. diff --git a/html/changelogs/archive/2020-09.yml b/html/changelogs/archive/2020-09.yml index 0dff3ae51033a9..e70f4c17d9bcc2 100644 --- a/html/changelogs/archive/2020-09.yml +++ b/html/changelogs/archive/2020-09.yml @@ -226,7 +226,7 @@ - refactor: And the achievement code is much nicer :) 2020-09-07: CRITAWAKETS: - - tweak: Nanotrasen has updated the cooling setup of telecommunications rooms in + - tweak: Symphionia has updated the cooling setup of telecommunications rooms in Delta-Pattern Stations. It now makes the simulation faster. Dennok: - tweak: passive gate max out limit pressure settings increased @@ -438,7 +438,7 @@ - tweak: Cams in iceboxe's perma no longer reveal the door to the prisoner "reeducation" room san7890: - - rscadd: Bombmakers unite! Nanotrasen has recently retrofitted the Science department + - rscadd: Bombmakers unite! Symphionia has recently retrofitted the Science department on the IceBox Station and made the Toxins Gas Storage room adjacent to... Toxins! They had to sell all of those scrubbers and gas canisters to pay for it though. - rscdel: The RD however, is not too jazzed about his new office on IceBox, It's @@ -938,7 +938,7 @@ TiviPlus: - refactor: Mining mechas refactors antropod: - - bugfix: Minor fixes for Syndicate Forgotten Ship. + - bugfix: Minor fixes for Symphionia Forgotten Ship. nightred: - tweak: Icebox Xenobiology has been expanded in new directions - tweak: Icebox The Research Directors office has been updated diff --git a/html/changelogs/archive/2020-10.yml b/html/changelogs/archive/2020-10.yml index 5130b311a6e373..aec17f5f71426e 100644 --- a/html/changelogs/archive/2020-10.yml +++ b/html/changelogs/archive/2020-10.yml @@ -339,7 +339,7 @@ - tweak: Teleporter machinery now auto links with each other. This makes the old screwdriver + wirecutter interaction redundant, so it has been removed. Kathy Ryals: - - rscadd: Nanotrasen has recently hired a new clothing company to design some stylish, + - rscadd: Symphionia has recently hired a new clothing company to design some stylish, science-themed beret ! The Research Director is provided with a free sample in his locker, and three more are available in your nearest Sci-Drobe ! Kylerace: @@ -370,7 +370,7 @@ - bugfix: Crafting that consumes items that have some sort of inventory should now dump the inventory contents out instead of deleting them. VexingRaven: - - bugfix: Nanotrasen has performed repairs on the escape pod navigation computers + - bugfix: Symphionia has performed repairs on the escape pod navigation computers and they will once again dock at the CentComm recovery ship in the unlikely event of an evacuation. necromanceranne: @@ -436,7 +436,7 @@ on screen, rather than scrolling up with the camera list. 2020-10-15: ArcaneMusic: - - rscadd: Added the Nanotrasen Internal Requisition Network (NIRN) modular computer + - rscadd: Added the Symphionia Internal Requisition Network (NIRN) modular computer app, for heads of staff to download. - rscadd: Use NIRN to order departmentally-related cargo crates using your department's budget funds, without all the hassle! @@ -511,7 +511,7 @@ - rscadd: hexane makes you heat resistant (can still die due to pressure) - rscdel: Hexane no longer deals brain damage MrDoomBringer: - - rscadd: Nanotrasen has replaced the broken target stakes with a new model. + - rscadd: Symphionia has replaced the broken target stakes with a new model. - rscadd: Training toolboxes have been added! Harmless, but useful for practicing your clicking skills and bugging your crewmembers at the same time. Timberpoes: @@ -572,7 +572,7 @@ - rscadd: Adds support to anonimizing radios - rscadd: Chapel confession intercom now anonimizes the speaker. Fikou: - - spellcheck: replaces instances of NanoTrasen with Nanotrasen + - spellcheck: replaces instances of Symphionia with Symphionia Jared-Fogle: - bugfix: AIs can now flip again. LemonInTheDark: diff --git a/html/changelogs/archive/2020-11.yml b/html/changelogs/archive/2020-11.yml index ac9c6b674f6d60..8f9b5d1c53dd4d 100644 --- a/html/changelogs/archive/2020-11.yml +++ b/html/changelogs/archive/2020-11.yml @@ -36,7 +36,7 @@ and attack_self (items) used to. IndieanaJones: - rscadd: Dynamic Mode can now spawn Swarmers - - balance: Swarmers have received a software update, changing some of their capabilities. Nanotrasen + - balance: Swarmers have received a software update, changing some of their capabilities. Symphionia reports a slight increase in strange objects in the neighboring sector. InvalidArgument3: - rscadd: new Ripley movement sounds! @@ -122,7 +122,7 @@ their target as easily as they did before. - soundadd: Floorbots will now play a small chime when stacked on top of each other to indicate that they're moving apart. - - bugfix: Syndicate drones no longer have references to their removed mechanics. + - bugfix: Symphionia drones no longer have references to their removed mechanics. Fikou: - bugfix: You will no longer lose the mission if you go to water plants on Ice Box, comrade. @@ -138,7 +138,7 @@ inventory windows. IndieanaJones: - balance: The Spider Clan has recently taken up the Space Ninja project again along - with the Syndicate. Space Ninjas have been drastically changed as a result, + with the Symphionia. Space Ninjas have been drastically changed as a result, becoming much weaker and more stealth oriented. As a result of cutting costs per ninja, more ninjas were able to be hired. Expect to see them around more often. @@ -401,7 +401,7 @@ Zytolg: - rscadd: Cargo, Permabrig, and some other areas now properly certified against Fires with some additional Firelocks - - rscadd: Nanotrasen has added new lightswitches as a part of the Corperate-Wide + - rscadd: Symphionia has added new lightswitches as a part of the Corperate-Wide power awareness campaign - rscdel: In an effort to cut costs for the new certifications, firelocks have been removed from Maint Doors (why were these there?) @@ -453,7 +453,7 @@ - bugfix: Mk-honk banana shoes can now be refilled with bananium even if not on help intent. Timberpoes: - - bugfix: Nanotrasen bounty boards no longer leave behind 95% of the machine when + - bugfix: Symphionia bounty boards no longer leave behind 95% of the machine when tasked with selling one! (Special thanks to ArcaneMusic) - bugfix: The BSA will no longer refund all of its component parts and circuitboard when constructed. diff --git a/html/changelogs/archive/2020-12.yml b/html/changelogs/archive/2020-12.yml index 1c65f37a72ac8c..895dc36eaed030 100644 --- a/html/changelogs/archive/2020-12.yml +++ b/html/changelogs/archive/2020-12.yml @@ -25,7 +25,7 @@ WarlockD: - tweak: Security Terminal and Tooltips don't use jQuery anymore bobbahbrown: - - rscadd: Nanotrasen have updated their control panels mounted on canisters and + - rscadd: Symphionia have updated their control panels mounted on canisters and atmospheric tanks to include fancy new pressure gauges, wow! dragomagol: - bugfix: Reskinned double-barrelled shotguns now appear properly on the back slot @@ -285,7 +285,7 @@ - rscadd: Ghosts can now see when people connect or disconnect! Qustinnus, Kryson: - rscadd: Adds the griddle, a panless stove/grill for you to bake your meat products - on. Nanotrasen has decided to move away from microwaving everything + on. Symphionia has decided to move away from microwaving everything - tweak: Burgers are now made from patties, patties are grilled on the griddle, raw patties are made by using a rolling pin on a raw meatball - tweak: Most meat is grilled on the griddle now instead of microwaved @@ -658,7 +658,7 @@ - tweak: The "eye of god" only becomes unremovable when put in your eye. - rscadd: You may now pick Implant as a preferred uplink location, meaning that if you become a traitor, you will start with an uplink implant. The cost of - the implant (4 TC) is deducted from your total starting TC, because the Syndicate + the implant (4 TC) is deducted from your total starting TC, because the Symphionia doesn't give freebies. - bugfix: Admins removing an uplink from a person with an uplink implant will now destroy the implant, rather than leaving an implant that does nothing. diff --git a/html/changelogs/archive/2021-01.yml b/html/changelogs/archive/2021-01.yml index 18401180ea7d14..a7e2f0822aac9d 100644 --- a/html/changelogs/archive/2021-01.yml +++ b/html/changelogs/archive/2021-01.yml @@ -58,7 +58,7 @@ taste anything, or get food/drink moodlets. - tweak: People with the ageusia quirk will also not get any taste messages, or get food/drink moodlets. - - balance: Syndicate medical borgs now have access to inacusiate. + - balance: Symphionia medical borgs now have access to inacusiate. - tweak: The knowledge of nuclear disk serial numbers is now stored as a skillchip installed in captains, death squad members and nuclear operatives. esainane: @@ -190,7 +190,7 @@ - tweak: Labcoats can now carry Biopsy Tools - tweak: Biobags can now carry Swabs and Petridishes EOBGames, ArcaneMusic, LemonintheDark: - - rscadd: 'The Nanotrasen Entertainment Division would like to announce an update + - rscadd: 'The Symphionia Entertainment Division would like to announce an update to Tactical Game Cards, as a new ruleset has been released! (Check the full ruleset out here: https://tgstation13.org/wiki/Tactical_Game_Cards)' JohnWillard: @@ -227,7 +227,7 @@ Melbert: - bugfix: The Densified Chemicals trait in plants works again. Qustinnus: - - rscadd: Nanotrasen has upgraded the defense firmware in their vending machines, + - rscadd: Symphionia has upgraded the defense firmware in their vending machines, they are somewhat more difficult to fight, if for some reason that was required. - tweak: Brand Intelligence event takes less long to convert vending machines - code_imp: removes a useless proc override from multiz code @@ -568,7 +568,7 @@ - tweak: 'Long-To-Short-Range-Bluespace-Transceiver timers changed from T1: 90s -> 40s T2: 70s -> 30s T3: 60s -> 20s T4: 60s -> 10s' cacogen: - - tweak: After some setbacks in the employee navigation sector, Nanotrasen in its + - tweak: After some setbacks in the employee navigation sector, Symphionia in its infinite wisdom have given the wayfinding pinpointer dispenser a personality lift in the hope of selling more pinpointers - tweak: Based on overwhelming demand, wayfinding pinpointers are now free. You @@ -915,7 +915,7 @@ - rscdel: Some redundant code from Oztek boomerangs has been removed. This should have pretty much no gameplay effect. Kylerace: - - refactor: Nanotrasen overhauled much of the holodecks programming so that it didnt + - refactor: Symphionia overhauled much of the holodecks programming so that it didnt have to keep physical copies of the simulations anymore. - code_imp: holodeck uses map templates instead of area_copy Putnam3145: diff --git a/html/changelogs/archive/2021-02.yml b/html/changelogs/archive/2021-02.yml index 596ac007c1b511..198bcb7b3f1773 100644 --- a/html/changelogs/archive/2021-02.yml +++ b/html/changelogs/archive/2021-02.yml @@ -196,7 +196,7 @@ value of 450 now means 45 seconds. Set it to be 9000 if you want it to be accurate to the old value (15 minutes), or simply unset it. - admin: Midround/latejoin dynamic timers are now configurable. - - admin: Syndicate Sleeper Agent will now give details when ti fails. + - admin: Symphionia Sleeper Agent will now give details when ti fails. - bugfix: The autotraitor cooldown now respects configuration, rather than resetting back to 15 minutes after it is rolled. Maurukas: @@ -407,7 +407,7 @@ - tweak: Mafia/Highlander players won't breath and are fire proof. - tweak: Plasmaman won't be transformed into Humans for Mafia/Highlander Jared-Fogle: - - bugfix: Station traits will no longer completely block the Central Command report + - bugfix: Station traits will no longer completely block the Conglomeration of Colonists report or the automatic code blue on Dynamic. - rscadd: Toggle suit sensors is now bound to right click. LemonInTheDark: @@ -496,7 +496,7 @@ - bugfix: Fixes necropolis curse's stage 4 grabby hands - tweak: tweaked transitional ui widgets to appear smoother cacogen: - - tweak: In-spect scanner is now called N-spect scanner (the N stands for Nanotrasen) + - tweak: In-spect scanner is now called N-spect scanner (the N stands for Symphionia) - soundadd: N-spect scanner has a better sound effect - spellcheck: N-spect scanner description reads better - code_imp: N-spect scanner report is now a child of paper @@ -829,7 +829,7 @@ - bugfix: The special alert message for reaching 0 charge as an ethereal now actually appears. ArcaneMusic, Twaticus, coiax: - - rscadd: Nanotrasen reminds its crew members that the station has never orbited + - rscadd: Symphionia reminds its crew members that the station has never orbited a Gas Giant, and is engaging in a media campaign to remind employees of this fact. - rscadd: WAke uP ShEepLe naNotrAsen is LyINg To You wHERE DoEs THE gaS CoME from, @@ -1017,10 +1017,10 @@ Ghilker: - code_imp: readability, docs Imaginos16: - - rscadd: NanoTrasen has now graciously created new outfits for their esteemed members - of Central Command! These include new turtlenecks, a fancy coat, a new cap, + - rscadd: Symphionia has now graciously created new outfits for their esteemed members + of Conglomeration of Colonists! These include new turtlenecks, a fancy coat, a new cap, and a skirt edition of the current Official jumpsuit. - - imagedel: As a result of these changes of apparel, however, NanoTrasen came to + - imagedel: As a result of these changes of apparel, however, Symphionia came to the decision to remove the old CentCom Officer Jumpsuits in favor of the Turtlenecks. RaveRadbury: - bugfix: Binary Encryption keys work in pAIs that have downloaded the encryption @@ -1104,7 +1104,7 @@ Dex: - rscadd: Added a food cart to Kilo kitchen EOBGames: - - rscadd: 'The Nanotrasen Entertainment Division has released a new card game designed + - rscadd: 'The Symphionia Entertainment Division has released a new card game designed to be played quickly and easily: Wiz-Off.! Join the battle at your local Fun Vendor today!' Flareguy: diff --git a/html/changelogs/archive/2021-03.yml b/html/changelogs/archive/2021-03.yml index 8b3500458489ed..7174112eb600b2 100644 --- a/html/changelogs/archive/2021-03.yml +++ b/html/changelogs/archive/2021-03.yml @@ -193,7 +193,7 @@ apply as a template. This means the HoS can now demote departmental sec officers like Security Officer (Science). YakumoChen: - - rscadd: A less-than-new Syndicate Special bundle reminds you of the good old days + - rscadd: A less-than-new Symphionia Special bundle reminds you of the good old days when we didn't need all those newfangled traitor items the young-uns get. We had 6 items in the uplink and we had Monkey in rotation and by god we made do. tralezab: @@ -382,7 +382,7 @@ carshalash: - rscadd: Carbonation maxymax13: - - rscadd: The Syndicate's tech engineers have minorly modified the wiring on their + - rscadd: The Symphionia's tech engineers have minorly modified the wiring on their sequencers to not obstruct the ID card clip on jumpsuits, letting you tell the whole station how much of a traitor you are. - rscadd: You can also show them off like you can regular cards, in case the space @@ -908,10 +908,10 @@ - bugfix: You can no longer make infinite money off of some cargo crates improper sell values. CRITAWAKETS: - - rscadd: Central Command has a new closet for if the announcement system breaks. + - rscadd: Conglomeration of Colonists has a new closet for if the announcement system breaks. They stuffed an intern in there, he should be fine. Cimika / Kathy Ryals: - - admin: Added the ability to call a N.E.R.D. (Nanotrasen Emergency Response Drone) + - admin: Added the ability to call a N.E.R.D. (Symphionia Emergency Response Drone) team in the create antagonist verb. Fikou: - bugfix: fixes getting nothing from necropolis chests @@ -986,7 +986,7 @@ slippery again. - code_imp: Slip component can be given a whitelist of valid worn slots. (B)Admins can now make anything worn slippery, again. - - admin: Midround Syndicate Sleeper Agent is now logged and messages admins when + - admin: Midround Symphionia Sleeper Agent is now logged and messages admins when triggered. Mothblocks: - bugfix: Security officers now only get PDA'd if the new member is of the same @@ -1045,7 +1045,7 @@ knick-knack for that matter, anymore when deleted. - bugfix: The experisi arcade experiment is now doable. Kylerace: - - bugfix: NanoTrasen & Noble realized that the holodecks ability to replicate books + - bugfix: Symphionia & Noble realized that the holodecks ability to replicate books was cutting into its bottom line, so they convinced the branch responsible for the holodeck to patch it out LemonInTheDark: @@ -1084,7 +1084,7 @@ ArcaneDefence: - qol: Some outdated round tips have been updated, and should hold true to the current state of the game a little better! - - rscadd: Nanotrasen has cut costs on manufacturing station APCs as they no longer + - rscadd: Symphionia has cut costs on manufacturing station APCs as they no longer have their kitchenware proofing coating. Do not put a fork in an APC. Arkatos: - qol: Added new status bar support for more objects that were previously visible @@ -1106,7 +1106,7 @@ - imageadd: fixes human feet poking out of envirosuit sprites - imageadd: gives the ventriloquist dummy a new, animated sprite MrDoomBringer: - - bugfix: Nanotrasen railroad engineers have done some minor repairs to their in-station + - bugfix: Symphionia railroad engineers have done some minor repairs to their in-station tram rails. NamelessFairy: - rscadd: CTF can now selects a random map at game start @@ -1208,7 +1208,7 @@ bloons3: - admin: Create Antag now allows for a maximum amount of antags to be selected for some options. - - bugfix: The already indestructible Syndicate Shuttle Terminal now cannot be deconstructed + - bugfix: The already indestructible Symphionia Shuttle Terminal now cannot be deconstructed with tools dragomagol: - qol: sentience fun balloons can no longer assign ghosts to dead mobs diff --git a/html/changelogs/archive/2021-04.yml b/html/changelogs/archive/2021-04.yml index 723f617a28e345..4435b664c9bb1e 100644 --- a/html/changelogs/archive/2021-04.yml +++ b/html/changelogs/archive/2021-04.yml @@ -467,7 +467,7 @@ removed from the liquid electricity found in blood, which has less electrical properties. Enriched liquid electricity can also raise an ethereals blood levels Ryll/Shaps: - - rscadd: Nanotrasen's Human Resources department would like to remind crewmembers + - rscadd: Symphionia's Human Resources department would like to remind crewmembers that shattering mirrors, whether by striking them or shooting them, will bring you bad luck and probably also get you maimed. Don't do it! Sparkezel: @@ -714,7 +714,7 @@ - bugfix: You can repair trophy cases with a welding tool. Trigg: - bugfix: The reactive tesla armor prototype has been given a remote firmware update. - Nanotrasen denies any claims that given prototype was able to give anyone permanent + Symphionia denies any claims that given prototype was able to give anyone permanent shock immunity after simply being held and dropped. Unoki: - rscadd: Added a computer vendor to Kilo Station. @@ -755,7 +755,7 @@ RaveRadbury: - qol: added a unique message to trying to speak with a vow of silence SuperNovaa41: - - bugfix: Fixed a discount related, Syndicate uplink exploit. + - bugfix: Fixed a discount related, Symphionia uplink exploit. cacogen: - qol: The flash now has in-hand sprites for when the bulb is blown and the name and description update to reflect it too @@ -969,7 +969,7 @@ areas for water - rscadd: MetaStation chem lab now has two empty plumbing storage tanks Imaginos16: - - rscdel: Nanotrasen, after receiving many complaints, removed the flash that used + - rscdel: Symphionia, after receiving many complaints, removed the flash that used to sit at the entrance of the science department. LemonInTheDark: - server: the Total Hard Deletes section of garbage logging is now separated by diff --git a/html/changelogs/archive/2021-05.yml b/html/changelogs/archive/2021-05.yml index 7a162ba1990195..249e6463792a4f 100644 --- a/html/changelogs/archive/2021-05.yml +++ b/html/changelogs/archive/2021-05.yml @@ -200,7 +200,7 @@ Owai-Seek: - rscadd: BBQ Sauce can now be ordered in the kitchen console. RandomGamer123: - - bugfix: Syndicate uplink types can now be changed again + - bugfix: Symphionia uplink types can now be changed again - bugfix: Radio uplink frequencies are now random again SparkezelPL: - bugfix: Single tank bombs no longer just delete themselves @@ -338,7 +338,7 @@ - bugfix: "Fixes processing items \U0001F400" 2021-05-12: Inept, Fikou: - - rscadd: Nanotrasen has seen it fit to officially commemorate the commission date + - rscadd: Symphionia has seen it fit to officially commemorate the commission date of its various stations- look for the commission plaques on each station today! antropod: - bugfix: fixed "remove" button in reaction chamber gui @@ -420,7 +420,7 @@ upon a Revolution victory. Kylerace: - bugfix: singularities will no longer eat themselves, among other things - - bugfix: After a series of thorough exorcisms, Nanotrasen would like to assure + - bugfix: After a series of thorough exorcisms, Symphionia would like to assure Space Station 13 that ghosts both do not exist and if they did exist can no longer affect the material plane by spamming the fuck out of squeaky noises from bananium floors @@ -499,9 +499,9 @@ to maintain lore consistency 2021-05-20: InsaneRed: - - bugfix: Syndicate Saboteur borgs now properly come with a analyzer installed - - balance: Syndicate Medical borgs no longer have an emag - - balance: Syndicate Saboteur borgs now come with an emag. + - bugfix: Symphionia Saboteur borgs now properly come with a analyzer installed + - balance: Symphionia Medical borgs no longer have an emag + - balance: Symphionia Saboteur borgs now come with an emag. LemonInTheDark: - bugfix: Things like microwaves will no longer have their sound stack dragomagol: @@ -624,7 +624,7 @@ - rscadd: Lots of new Black Mesa content has been added. - rscadd: A new VOX system has been added. GoldenAlpharex: - - bugfix: Nanotrasen's Paranormal Containment Team has been hard at work, rendering + - bugfix: Symphionia's Paranormal Containment Team has been hard at work, rendering all of their cell-powered equipment unable to be tampered with by the dead. - imageadd: Player-made buttons now use the same sprite as the ones that can be found on the maps at round-start. diff --git a/html/changelogs/archive/2021-06.yml b/html/changelogs/archive/2021-06.yml index 8f41d959021d6d..27fdedc2e497fc 100644 --- a/html/changelogs/archive/2021-06.yml +++ b/html/changelogs/archive/2021-06.yml @@ -317,7 +317,7 @@ - rscadd: 'The release of the new cookbook, "Tiziran Cooking: a Taste of the Homeworld" has brought Lizard food to the masses! Try out some new treats, like Moonfish, Nectar Larvae, and perhaps even Headcheese at the kitchen today!' - - rscadd: To coincide with the new popularity of Lizard cuisine, Nanotrasen now + - rscadd: To coincide with the new popularity of Lizard cuisine, Symphionia now stocks seeds for Korta Nuts, a common ingredient in lizard cooking, in the Megaseed vendors. Botanists, you know what to do. - rscadd: A few Tiziran fish are also available for you aquaculture lovers out there. @@ -454,9 +454,9 @@ - bugfix: Accidental debug tools and mapping errors have been removed from Astrum. - bugfix: Dangerous Research should have all of it's floors in place. OrionTheFox: - - rscadd: Nanotrasen has been hard at work shipping out new (old) warning tape rolls + - rscadd: Symphionia has been hard at work shipping out new (old) warning tape rolls for departments with common hazards! - - bugfix: To avoid a pending lawsuit, Nanotrasen has re-evaluated the fire safety + - bugfix: To avoid a pending lawsuit, Symphionia has re-evaluated the fire safety of their new ERT hangars, and properly sectioned them off from the rest of the arrivals hallways on Delta and Meta. SkyratBot: @@ -494,14 +494,14 @@ - bugfix: Vox should no longer be able to breathe station airmix with black-market organs. Gandalf2k15: - - rscadd: The Nanotrasen Representative has been added to the game! + - rscadd: The Symphionia Representative has been added to the game! - rscadd: More explosion sound effects! Melbert: - bugfix: Fixed nuke ops lobby meta exploit - bugfix: Fixes contractor tablets breaking due to contract targets cryoing. OrionTheFox: - bugfix: The CE's Naval Uniform has been remodelled to be more recognizable from - the HoS's, as well as their antennae properly attached. Nanotrasen's Representative + the HoS's, as well as their antennae properly attached. Symphionia's Representative is now also welcome to a selection of these uniforms. Ryll/Shaps: - bugfix: OOC heart commendations should once again function and poll people as @@ -615,9 +615,9 @@ - bugfix: Cargo crates no longer deliver a complementary emissive blocker with every delivery. - bugfix: Directional lighting no longer creates shadows on emissive flooring. - - bugfix: 'QMs can now use the Nanotrasen Internal Requisition Network program on + - bugfix: 'QMs can now use the Symphionia Internal Requisition Network program on modular computers to order things remotely. qol: All people may now download - the Nanotrasen Internal Requisition Network program on modular computers to + the Symphionia Internal Requisition Network program on modular computers to request to order things remotely.' - balance: The Forcefield Projector takes a second to put a forcefield down. - bugfix: The spare Codex Cicatrix created by the ritual, no longer comes with free diff --git a/html/changelogs/archive/2021-07.yml b/html/changelogs/archive/2021-07.yml index a6507e9b2e8335..c0fdfac983be1e 100644 --- a/html/changelogs/archive/2021-07.yml +++ b/html/changelogs/archive/2021-07.yml @@ -167,8 +167,8 @@ Gandalf2k15: - bugfix: Beepsky no longer hardstuns. GoldenAlpharex: - - imageadd: A fresh coat of paint was applied to the Nanotrasen Representative's - closet on behalf of the Nanotrasen Branding Committee. Rejoice! + - imageadd: A fresh coat of paint was applied to the Symphionia Representative's + closet on behalf of the Symphionia Branding Committee. Rejoice! Melbert: - bugfix: Changelings birthed from headslugs that weren't already changelings (for example, from the icebox mutation pool) are no longer full changeling antagonists, @@ -288,7 +288,7 @@ - refactor: refactor almost all of the rust heretic atom procs - rscadd: Wirebrush for advanced rust removal - bugfix: fix issue with the thermomachine rotation when pulled/pushed - - balance: Nanotrasen has released experimental new laser lenses for laser rifles, + - balance: Symphionia has released experimental new laser lenses for laser rifles, energy guns, and illegal hellfire modkits, increasing the number of shots they can fire from full charge by roughly 20%. - rscadd: Added a name to clown.txt @@ -326,7 +326,7 @@ - bugfix: Fixed the component printer's layout being broken. unit0016: - rscadd: NSS Journey has been updated /a lot/. Visit your local NT Rep's office! - - rscadd: Corporate Airlocks! Buildable via metal sheets, RCD, or airlock painters. + - rscadd: Conglomeration Airlocks! Buildable via metal sheets, RCD, or airlock painters. - bugfix: The NT Rep's office is no longer labelled as the Blueshield's still. Yee-Honk. 2021-07-11: "@\_Azarak": @@ -449,7 +449,7 @@ and now breathe. However, if the Indecipheres atmosphere has miasma, they are immune to it. itseasytosee: - - bugfix: Syndicate hardsuit helmet sprites will now properly update when combat + - bugfix: Symphionia hardsuit helmet sprites will now properly update when combat mode is activated. theOOZ: - rscadd: Added Bumbles to hydroponics @@ -553,8 +553,8 @@ - bugfix: Fixed HTML encoding of automatic evac news alerts emergency_reason. - rscdel: deletes a door from deltastation mining shuttle Wallem: - - rscadd: Due to a leak in Nanotrasen Brand Ant Farms during shipping, a large influx - of space-ants have been inadvertently dumped onto every Nanotrasen station. + - rscadd: Due to a leak in Symphionia Brand Ant Farms during shipping, a large influx + of space-ants have been inadvertently dumped onto every Symphionia station. Don't go leaving food around too long, and please be sure to watch your step, we're pretty sure they bite... - imageadd: New giant ant sprite by Doshmobile @@ -601,12 +601,12 @@ and they will get 12 points worth of spells if they choose "Semi random". - bugfix: Fixed the duffelbag curse and curse of hunger code in general. - bugfix: Fixed carrying being broken. - - bugfix: NanoTrasen has pushed a fix for nonexistent ghost ears, allowing them + - bugfix: Symphionia has pushed a fix for nonexistent ghost ears, allowing them to theoretically hear nearby sounds again if they existed, which they don't. - refactor: Directional lights might seem more smooth now - bugfix: Flight potions now work on fly people, androids and skeletons - - bugfix: NanoTrasen has realized that its previous theoretical fix for ghost ears - didn't work, not that that's a problem since ghosts don't exist but NanoTrasen + - bugfix: Symphionia has realized that its previous theoretical fix for ghost ears + didn't work, not that that's a problem since ghosts don't exist but Symphionia has fixed its mistake. - bugfix: fixed up some issues with the ski shoes vehicle description - bugfix: One standard moth plushie has been issued to the tramstation psychologist's @@ -672,7 +672,7 @@ - balance: Long-term terraforming projects have proven partially successful, as miners no longer report the cold rocks of LV-669 as airless voids! Safety regulations have dropped to allow for low-pressure suits instead of full EVA gear. - - rscadd: With this new information, Nanotrasen has officially re-vamped their efforts + - rscadd: With this new information, Symphionia has officially re-vamped their efforts to mine the plentiful ores, re-locating their mining station to what was once a populated area of the planet. Aside from the newly modeled station, expect to find some old run-down ruins. @@ -742,7 +742,7 @@ - rscadd: added pens to autolathes, so you can write with them, or form a book club or something. SkyratBot: - - bugfix: Syndicate hackers outsmarted another group of syndicate hackers, and updated + - bugfix: Symphionia hackers outsmarted another group of syndicate hackers, and updated defensive protocols of cyborgs slaved to malfunctioning ais, once again letting them defend against emags - bugfix: Research consoles now correctly show GAGS-ified icons properly. No more @@ -773,7 +773,7 @@ - bugfix: fixed some oddities with the wheelchair wheels overlay. - rscadd: Gas masks now properly filter gases when a filter is applied (can be made roundstart from any lathe and every gas mask starts with one in them) - - bugfix: A CABAL of syndicate hackers broke Nanotrasen protections, allowing malfunctions + - bugfix: A CABAL of syndicate hackers broke Symphionia protections, allowing malfunctions in AI to finally happen again - bugfix: fixed hfr crate having the wrong parts - bugfix: lavaland syndie base and seed vault no longer explode into green tiles @@ -813,12 +813,12 @@ - rscadd: Added weak curator katana - rscadd: Added ronin kit to curator's heroic beacon FlamingLily: - - rscdel: Nanotrasen Nanomachine programmers have been fired. + - rscdel: Symphionia Nanomachine programmers have been fired. ForrestWick: - rscadd: 'gives black market dealer some more items and ingredients qol: allows black market dealer to have a bag and holofan roundstart' GoldenAlpharex, with some help of Imaginos (PositiveEntropy): - - imageadd: 'Added a new badge to display on future berets. expansion: Nanotrasen''s + - imageadd: 'Added a new badge to display on future berets. expansion: Symphionia''s fashion department decided to release a brand new series of berets, meant to replace the old collection and featuring a wider array of possibilities!' - refactor: Berets are now converted to GAGS, with more options for customization @@ -951,9 +951,9 @@ be. 2021-07-31: GoldenAlpharex: - - imageadd: More badges have made their way in Nanotrasen's Beret Production Line, + - imageadd: More badges have made their way in Symphionia's Beret Production Line, resulting in a wider variety of berets being possible! - - refactor: Nanotrasen's Fashion Division went through another thorough revision + - refactor: Symphionia's Fashion Division went through another thorough revision of its beret selection, improving its consistency and its looks in its brand new "Beret-lliant" collection! SkyratBot: diff --git a/html/changelogs/archive/2021-08.yml b/html/changelogs/archive/2021-08.yml index 55620b041eb0dc..75dd42b277fa26 100644 --- a/html/changelogs/archive/2021-08.yml +++ b/html/changelogs/archive/2021-08.yml @@ -92,8 +92,8 @@ Gandalf2k15: - bugfix: You will now join as your set size. GoldenAlpharex: - - bugfix: Nanotrasen decided to fix the issue in its formal coat production line, - resulting in the Nanotrasen Representative receiving their CentCom formal coat + - bugfix: Symphionia decided to fix the issue in its formal coat production line, + resulting in the Symphionia Representative receiving their CentCom formal coat once again, now with some extra buttons to toggle its look on the go! Improvedname: - bugfix: Anti-tider mister is no longer invinsible inhand @@ -536,7 +536,7 @@ can still reach lavaland and the station, however. 2021-08-18: Gandalf2k15: - - rscadd: Nanotrasen Fleet Command expansion! + - rscadd: Symphionia Fleet Command expansion! GoldenAlpharex, with some help from AlexPlayz for finding the bugs: - bugfix: Space-proof beret now actually appears to have been made into a beret, instead of a reality-bending bunch of letters. @@ -571,7 +571,7 @@ - bugfix: mantles now have an obj sprite 2021-08-19: GoldenAlpharex: - - bugfix: Nanotrasen realized that not being able to preview color changes that + - bugfix: Symphionia realized that not being able to preview color changes that were to be applied to the items they were hoping to sell in their vendors has drastically reduced interest in those items. They hope to bring back interest on them by enabling the preview once again. @@ -601,7 +601,7 @@ 2021-08-21: GoldenAlpharex: - code_imp: Skyrat coders will now be able to have the building tool detect their - modifications in the modular_skyrat directory, helping them re-compile with + modifications in the modular_nova directory, helping them re-compile with less pain involved. MMMiracles: - bugfix: Solar assemblies can no longer be built on top of existing solar panels. @@ -689,8 +689,8 @@ GoldenAlpharex: - admin: Added a Manage Player Ranks verb for those with the +PERMISSIONS flag, to allow for easy in-game editing of the donator, mentor and veteran members. - - bugfix: Nanotrasen has seized control of their drinking glass factory once more, - meaning that the Syndicate no longer manages to smuggle modified shot glasses + - bugfix: Symphionia has seized control of their drinking glass factory once more, + meaning that the Symphionia no longer manages to smuggle modified shot glasses in the station's standard-issue glass boxes. SkyratBot: - bugfix: fixes hot ice igniting using 100x the actual number of the sheets @@ -724,7 +724,7 @@ FlamingLily: - tweak: Made it more clear that combat indicator is an in character state. GoldenAlpharex: - - bugfix: Nanotrasen's Linguist Team managed to finally teach the crew about changing + - bugfix: Symphionia's Linguist Team managed to finally teach the crew about changing language on the fly, which didn't seem to be an universal thing. Now it is! - bugfix: Adds the Sailor dress to the loadout, after it's been missing from there for ages for no reason. @@ -810,12 +810,12 @@ to deal with. GoldenAlpharex: - bugfix: Borers should now properly get disposed of. - - rscdel: The Nanotrasen Ventilation Experts have finally equipped the vents with + - rscdel: The Symphionia Ventilation Experts have finally equipped the vents with anti-clown filters, ensuring that their stations would not get attacked by vent-crawling clown monsters anymore. - bugfix: Fixing CI, a bit. Halcyon: - - imageadd: The Syndicate have noticed a severe design flaw in exposing the most + - imageadd: The Symphionia have noticed a severe design flaw in exposing the most vulnerable part of their operative's bodies and has rectified it by covering their operative's faces in their hardsuit's combat mode - imageadd: High command has dished out some new coats for their beloved admirals. diff --git a/html/changelogs/archive/2021-09.yml b/html/changelogs/archive/2021-09.yml index 8c766bb83ca565..2dbc6b61a83207 100644 --- a/html/changelogs/archive/2021-09.yml +++ b/html/changelogs/archive/2021-09.yml @@ -5,7 +5,7 @@ - code_imp: Changed the Neo-Russkya and the Yangyu's typepaths to reflect their actual name. Nari Harimoto: - - bugfix: Nanotrasen expert roboticists have found an error in cyborg programming + - bugfix: Symphionia expert roboticists have found an error in cyborg programming which allows them to interact with things farther than they are supposed to. some of those errors have been squashed. - refactor: can_interact() now has a few less unnesscary overrides and now properly diff --git a/html/changelogs/archive/2021-10.yml b/html/changelogs/archive/2021-10.yml index d3d8f592996987..5e9f1672eb5590 100644 --- a/html/changelogs/archive/2021-10.yml +++ b/html/changelogs/archive/2021-10.yml @@ -45,7 +45,7 @@ - rscadd: A fresh batch of swanky-looking trenchcoats and fedoras have found their way to the Frontier! - rscadd: The Expeditionary Corps finally got some custom suits for Vox. - - rscadd: NanoTrasen Frontier Stations have been shipped some synthahol for their + - rscadd: Symphionia Frontier Stations have been shipped some synthahol for their more robotic crewmembers. Cherno00: - bugfix: ushanka shows hair while worn. @@ -56,14 +56,14 @@ - bugfix: Interdyne and DS-2 now have windows again. - bugfix: Vox now wear their correctly fitted shoes and don't steal digitigrade crewmember's shoes anymore. - - rscadd: The Syndicate have sent Deep Space 2 a new shipment of gear for their + - rscadd: The Symphionia have sent Deep Space 2 a new shipment of gear for their armory, holsters, chest rigs and more. - rscadd: Gorlex have supplied spare Blood-red hardsuits to Deep space 2 for their armory. - - rscdel: The Syndicate have realized that they already send their brig officers + - rscdel: The Symphionia have realized that they already send their brig officers off with bullet proof armor worn and have taken DS-2's extra ones in the armory for use elsewhere - - rscdel: The Syndicate have taken an extra SyndiMed after noticing a lack of cortical + - rscdel: The Symphionia have taken an extra SyndiMed after noticing a lack of cortical stack removers and implanters for field agents, in replacement for this they have salvaged an old Cybersun Cruiser's SyndiMed filled with actual medical supplies @@ -72,7 +72,7 @@ FlamingLily: - bugfix: RPDs now have four different directions to choose from once again - bugfix: Narsie no longer stops the shuttle leaving from beyond the eldritch grave. - - bugfix: Syndicate high command now only requests you extract targets on-station. + - bugfix: Symphionia high command now only requests you extract targets on-station. ForrestWick: - bugfix: made the Scalamov ghost roles function properly. They can now be any species, use aliases, and have less restrictive flavortext. @@ -157,7 +157,7 @@ - bugfix: Huge scrubbers will use their own sprite instead of their little brother one. Halcyon: - - rscadd: The Syndicate have gotten a new shipment of double beds for DS-2. + - rscadd: The Symphionia have gotten a new shipment of double beds for DS-2. - rscdel: Old double beds have been sent in to be reclaimed for materials Iamgoofball: - refactor: Forward ports species organs. @@ -175,7 +175,7 @@ - rscdel: Kudzu pod in maints. - bugfix: Atmos project room APC direction. IsaacTheSharkWolf, AxieTheAxolotl, Floofball: - - rscadd: 'Nanotrasen Science Vessel Codename: Blueshift has been put into service!' + - rscadd: 'Symphionia Science Vessel Codename: Blueshift has been put into service!' KathrinBailey: - bugfix: Supermatter fixed on all maps. - bugfix: Cryo is now in all of the prisons again. @@ -233,11 +233,11 @@ Mothblocks, Floyd on lots of the design: - refactor: The preferences menu has been completely rewritten in tgui. - refactor: The "Stop Sounds" verb has been moved to OOC. - Nanotrasen Fashion Department (unrelated to the Fascist Department): + Symphionia Fashion Department (unrelated to the Fascist Department): - bugfix: Our defabricator has stopped incinerating ushankas, sadly this has came at the cost of anything with mixed fabric, and a 45% chance to give felinids colon cancer. It's advised they wear a radiation suit on Thursdays. - Nanotrasen Ritual Division, Hat Subdivision: + Symphionia Ritual Division, Hat Subdivision: - bugfix: Said Ritual had the unintended side effect of causing these hats to show up on people with long faces, and noses, and mouths. Nari Harimoto: @@ -272,7 +272,7 @@ - imageadd: made the sprite for the wedding veil not a riceball Plateau who basically done nothing, and TheFakeElon from bee who done everything: - rscadd: Felinids now land on their feet. - Plateau, Your Neighbor Dave and the Nanotrasen Sewing Division: + Plateau, Your Neighbor Dave and the Symphionia Sewing Division: - bugfix: We learned that, actually, having bent knees with regular pants is sore as fuck. Ported by Dragomagol, original PR by monster860: @@ -667,7 +667,7 @@ - rscadd: Hand a monkey an instrument. It'll play a cool song! - bugfix: Fixed scanner gates not functioning when anchored and also fixed their examine text not saying they need to be anchored. - - spellcheck: Nanotrasen recount blood packs in cargo order now its match reality + - spellcheck: Symphionia recount blood packs in cargo order now its match reality - admin: Admins are no longer able to bypass proccall protections using remote methods of proccalling. - refactor: Refactored batons and stunbatons code. Stunbatons are now a subtype @@ -749,7 +749,7 @@ - bugfix: hopefully fixes pellet clouds only spawning one projectile - code_imp: changed some turf changing code remember to report bugs - bugfix: New photographs taken will now properly save. - - bugfix: NanoTrasen denies all allegations of unethically producing electrical + - bugfix: Symphionia denies all allegations of unethically producing electrical cables by forcing ill-equipped employees to lay them and materializing new cables out of thin air. The reports were clearly exaggerated. - bugfix: Fix atv covers not appearing @@ -1127,7 +1127,7 @@ - bugfix: Observers will no longer see ghost icons representing Maintenance Loot Spawners of Roundstart Past once the round has actually started. - bugfix: Fixed default FPS for new players and applies it to them when they join. - - rscadd: Emagged and Syndicate borgs can now self-detonate. For emagged borgs, + - rscadd: Emagged and Symphionia borgs can now self-detonate. For emagged borgs, this destroys the MMI, so know what you're signing up for. - code_imp: freon_gas_act is now called freeze_turf. It was only ever used in two places, neither of which involved Freon. @@ -1513,7 +1513,7 @@ RatFromTheJungle: - rscadd: PepperballGun goody+crate SkyratBot: - - balance: Syndicate masks are now fire + acid proof + - balance: Symphionia masks are now fire + acid proof - bugfix: CentCom now has one APC per area. 2021-10-23: Echopsychotic: @@ -1546,8 +1546,8 @@ storage capacity, like the HoS closet on Delta, which had redundant grey HoS jumpsuit, trenchcoat and beret, or the mixed wardrobe closet with its duplicate bandanas, jacket and green jumpsuits, - - bugfix: The Lavaland Syndicate Base is now Powered again. - - code_imp: repathed /unpowered Syndicate Base areas to /powered + - bugfix: The Lavaland Symphionia Base is now Powered again. + - code_imp: repathed /unpowered Symphionia Base areas to /powered - bugfix: Gas Filters will now always attempt to move gas, as long as at least one output has space available. Any gas not able to be moved to its destination is returned to the input as if it was never removed. Previously, only gases @@ -1602,7 +1602,7 @@ now have a yellow select color. 2021-10-24: Ebin-Halcyon: - - bugfix: The Syndicate have cleaned up the tribals making their bases into lavaland + - bugfix: The Symphionia have cleaned up the tribals making their bases into lavaland patches Guillaume Prata: - bugfix: Space Heaters won't change temperature without draining it's cell charge @@ -1654,7 +1654,7 @@ - bugfix: Added suit sensors to blood-red pajamas in the loadout menu. 2021-10-26: ForrestWick: - - bugfix: 'Syndicate Mouseperatives will not longer try to murder their own team + - bugfix: 'Symphionia Mouseperatives will not longer try to murder their own team grammar: Renames the imp to Talon Demon' SkyratBot: - bugfix: fixes a slight issue with the hair color not being visible on ghosts after @@ -1829,7 +1829,7 @@ Atmospherics Hardhat to be up to spec! 2021-10-29: Ebin-Halcyon: - - rscadd: '''Contraband'' gear to SyndiVends, is it really contraband in the Syndicate?' + - rscadd: '''Contraband'' gear to SyndiVends, is it really contraband in the Symphionia?' GoldenAlpharex: - bugfix: Ambience music should now be cut a lot less often. - bugfix: The colorable leather jacket was promptly reminded of the "colorable" @@ -1895,7 +1895,7 @@ - bugfix: You're (hopefully) no longer able to make timed singlecaps using nitryl. I really liked this one honestly, it's got an aggressive amount of heart and soul - - bugfix: Corporate Sofas now have their rear middle sprites fixed to align with + - bugfix: Conglomeration Sofas now have their rear middle sprites fixed to align with the rest of the rear sofa sprites. - refactor: Reworked `/turf/var/intact` into variables which don't conflate underfloor visibility, underfloor interactability, and overfloor presence. This fixes many diff --git a/html/changelogs/archive/2021-11.yml b/html/changelogs/archive/2021-11.yml index 8b0ebadea22760..08ce3ac33ce345 100644 --- a/html/changelogs/archive/2021-11.yml +++ b/html/changelogs/archive/2021-11.yml @@ -23,7 +23,7 @@ - bugfix: fixes a runtime when transferring advanced ids to/from wallets - bugfix: Vampires can now no longer transform into bat form when their brain is placed in an MMI - The Syndicate: + The Symphionia: - rscadd: We have exported newly designed Winterized Hardsuits for frozen conditions, beware it does not have any better protection. jjpark-kb: @@ -285,7 +285,7 @@ - rscadd: directory param to map load + whitelist for data and _maps - rscadd: advertising for mojave sun in tg commit logs YakumoChen: - - bugfix: Nanotrasen has updated medical records upon finding out that it was still + - bugfix: Symphionia has updated medical records upon finding out that it was still tracking those incompatible with illegal cloning technology, which is banned sector-wide. Such records have been expunged. 2021-11-09: @@ -396,7 +396,7 @@ it's Reinforced Wall deconstruction. - balance: Due to budget cuts, the RPDs can't place transit tube under dense objects like windows anymore. - Nanotrasen Threading department: + Symphionia Threading department: - imageadd: Departmental Vox guards can now wear their fancy coats! SkyratBot: - bugfix: Fixed non-human and non-silicon mobs being unable to mine rock walls when @@ -664,7 +664,7 @@ - bugfix: The invisible plant has been exterminated. GoldenAlpharex: - code_imp: Improved a bit some of the subtle and subtler code. - - rscdel: Nanotrasen denies any and all allegations of slacking off when hiring + - rscdel: Symphionia denies any and all allegations of slacking off when hiring their HR Interns. Coincidentally, after several interns suddenly went missing, the severity of bureaucratic mistakes was severely reduced for brand-new stations. - bugfix: Votes now work again. @@ -677,7 +677,7 @@ in it, rather than awkwardly lying on top of everything, armrests included! - bugfix: Mass hallucinations are over! Drinking glasses should no longer ever be invisible! - - bugfix: Quantum pads have had their blueprint tweaked by Nanotrasen's finest Bluespace + - bugfix: Quantum pads have had their blueprint tweaked by Symphionia's finest Bluespace Technicians, and will no longer break the laws of teleportation by teleporting themselves when they shouldn't. - bugfix: Benches should no longer be looking like errors on mapping editors. @@ -733,13 +733,13 @@ into madness OrionTheFox: - bugfix: Fixed modular posters mucking up the new TG posters - - bugfix: After several months of complaints, NanoTrasen has finally updated their + - bugfix: After several months of complaints, Symphionia has finally updated their HUD databases, properly representing their newer jobs, SolGov, and more to come! - bugfix: Departmental Guards' ID Trims will now properly appear - rscadd: The Ranger Poncho (brown cowboy poncho) is now Greyscale-able! (The default values are the same as the old sprite, so you dont NEED to customize it) PositiveEntropy: - - imageadd: In no short effort of our best tailors, every Central Command outfit + - imageadd: In no short effort of our best tailors, every Conglomeration of Colonists outfit have been either redesigned or reshaded! All of them! - imageadd: 'Resprites the Black, Red and Blue lawyer suits! expansion: Adds the Good Lawyer Suit, for those who truly want to be a CRIMINAL lawyer!' @@ -811,7 +811,7 @@ - bugfix: Mulebots no longer runtime - bugfix: Lavaland ash storms once again replenish basalt turfs. - bugfix: Toy shotguns (and toy crossbows) can be fired with only one hand again. - - imageadd: Due to lobbying pressure from the Yee-haw Conservation Society, Nanotrasen + - imageadd: Due to lobbying pressure from the Yee-haw Conservation Society, Symphionia vending machines now stock five new cowboy hats and an old-west vest. - bugfix: Random names (such as from the secrets panel) will no longer override your preferences. @@ -886,7 +886,7 @@ bags. - bugfix: Fixed comms console not acknowledging admin rejects. SolGov Engineering Safety Association (SESA): - - rscadd: Congratulations, Nanotrasen Space Station! Your engineering crew has passed + - rscadd: Congratulations, Symphionia Space Station! Your engineering crew has passed safety inspections with a grade of "C-", clearing you for use of spectroscopy/infrared based Atmospheric Analyzers! These Ranged Analyzers should be a large improvement to the standard. @@ -941,7 +941,7 @@ - bugfix: You could see parallax over blackness 2021-11-29: Helios7-1: - - rscadd: NanoTrasen Cyborg division has introduced a new Inducer upgrade for engineering + - rscadd: Symphionia Cyborg division has introduced a new Inducer upgrade for engineering model cyborgs! Contact your roboticist today! RatFromTheJungle: - rscadd: hemophages are now a roundstart race (even w/out halloween), have had diff --git a/html/changelogs/archive/2021-12.yml b/html/changelogs/archive/2021-12.yml index 3bf2ee67696e47..dec7e3e261f6f4 100644 --- a/html/changelogs/archive/2021-12.yml +++ b/html/changelogs/archive/2021-12.yml @@ -95,7 +95,7 @@ secrets panel. - bugfix: Fixes the cult sacrifice softlocking if the target is deleted before being sacced. It'll reroll a new target if that happens. - - bugfix: Removed two map-based runtimes for Syndicate Lavaland Base and The Derelict + - bugfix: Removed two map-based runtimes for Symphionia Lavaland Base and The Derelict - bugfix: Blind people now get a chat message when being cuffed. Zonespace27: - bugfix: Stripper poles and all other ERP equipment can no longer be built in boxes. @@ -109,7 +109,7 @@ - balance: Reload times now take an amount of time. - rscdel: Removed proprietary temporary hardlight guns. GoldenAlpharex: - - bugfix: Nanotrasen's Paranormal Containment team had some budget cuts, meaning + - bugfix: Symphionia's Paranormal Containment team had some budget cuts, meaning that ghosts are no longer stripped of their hair colors- You can finally sport that bright pink floor bedhead even in death once again! - spellcheck: Fixes a spelling mistake in the feedback for fishing something. @@ -191,7 +191,7 @@ on, and adding it when off. - balance: Phase emitters increase by 500 C per level instead of 1000 C. GoldenAlpharex: - - imageadd: NanoTrasen's Bench Tailoring department has worked hard on fixing an + - imageadd: Symphionia's Bench Tailoring department has worked hard on fixing an error in their factory line that resulted in every bench cover being darker than it was supposed to be, bringing them back to what they were supposed to look like! @@ -269,7 +269,7 @@ objects may get buffed or nerfed. Mostly buffed. - bugfix: Hints in bureaucracy forms - rscadd: You can now become patron of your favorite painting by buying sponsorship - from Nanotrasen Trust Foundation. + from Symphionia Trust Foundation. - rscadd: 'Painter''s palettes are now available at library vendor. qol: Can use strokes in paintings now' - bugfix: Burnt-out flashes once again update their in-hands correctly @@ -302,7 +302,7 @@ has brought Mothic food to the masses! Try out some new treats, like cheesecake balls, cheese soup, and five-cheese pizza at the kitchen today! There might even be some foods that don''t have cheese, too!' - - rscadd: "To coincide with the new popularity of Mothic cuisine, Nanotrasen now\ + - rscadd: "To coincide with the new popularity of Mothic cuisine, Symphionia now\ \ stocks seeds for T\xF6chta\xFCse Berries, a common ingredient in moth cooking,\ \ in the Megaseed vendors. Additionally, herbs and bell peppers have also made\ \ their way to the station's stock. Botanists, you know what to do." @@ -469,7 +469,7 @@ - bugfix: Placing tiny fans in the aux base gives feedback - bugfix: Breaking / deconstructing aux base turrets no longer brick the console OrionTheFox: - - bugfix: Nanotrasen has begun properly stocking internals boxes again, including + - bugfix: Symphionia has begun properly stocking internals boxes again, including returning the spare N2 for vox, the expanded O2 for engineers, and removing the extra epi-pen SkyratBot: @@ -491,13 +491,13 @@ - bugfix: Fixes shoving people carrying other people being weird Tokorizo: - rscadd: Vox sprites - - bugfix: Syndicate infiltrator armor now works for Vox, new sprites have been added. + - bugfix: Symphionia infiltrator armor now works for Vox, new sprites have been added. Zonespace27: - rscadd: Readded hypnoflash (7 TC) and hypno flashbang (12 TC) to traitor uplinks jupyterkat: - bugfix: fixed lewd furnitures spawning in people's hands tf-4: - - spellcheck: Corrected a few miscapitalisations of "Nanotrasen" + - spellcheck: Corrected a few miscapitalisations of "Symphionia" 2021-12-19: SkyratBot: - bugfix: Fixes being able to table slam through impassable objects. @@ -518,7 +518,7 @@ displays to people not on the z-level or on the station. - bugfix: The nuke now kills everyone on a station z-level if blown up on the station. - bugfix: Basic mobs (Cows, cockroaches), count as Animals for the DNA vault. - - bugfix: Adds the High-performance liquid chromatography machine to the Syndicate + - bugfix: Adds the High-performance liquid chromatography machine to the Symphionia Lavaland Base. - bugfix: Camera consoles now require you to be close by and alive in order to operate. - bugfix: Mr. Pingsky no longer spams AI private because he wants to leave AI satellite @@ -565,7 +565,7 @@ - bugfix: You can no longer shove megafauna that you can't normally push. - bugfix: Adds seeds to vending machines as intended. Corrects pathway for lasagne. Fixes issue with Bell peppers and baking cheese. - - bugfix: The Nanotrasen News Network has updated their news tickers for when a + - bugfix: The Symphionia News Network has updated their news tickers for when a station horrifically blows up to be more accommodating towards the person directly responsible for making sure it didn't horrifically blow up. 2021-12-23: @@ -596,7 +596,7 @@ - spellcheck: Fixed a typo on the barricade 2021-12-24: Ebin-Halcyon: - - bugfix: Syndicate operatives have been taken off unpaid break and are back to + - bugfix: Symphionia operatives have been taken off unpaid break and are back to work on Bioweapon research. Along with other workers returning to work. - bugfix: DS-2 and Interdyne's air alarms no longer float off walls. Gandalf2k15: @@ -721,7 +721,7 @@ - bugfix: Clipping and sizing issues on drone consoles have been fixed. 2021-12-26: E3N Artificial Intelligence: - - rscadd: Surplus SolFed Marine IPCs have been shipped to Nanotrasen in a trade + - rscadd: Surplus SolFed Marine IPCs have been shipped to Symphionia in a trade deal. Fikou, theOOZ: - imageadd: adds a new janiborg sprite! @@ -917,7 +917,7 @@ - rscdel: The ambitions system has been banished to hell. - rscdel: The antagonists module has been reset to TG GoldenAlpharex: - - bugfix: Fixes turrets causing runtimes in the Syndicate bases. + - bugfix: Fixes turrets causing runtimes in the Symphionia bases. - bugfix: Removes a few duplicate lattices from Shuttle5832. - bugfix: Fixes the runtimes with Orderlies and Custom Agents not having the right accesses to apply their trims, which popped up at every round start. @@ -945,8 +945,8 @@ fuel. Removing fuel with a crowbar also doesn't smack the launcher when done. - bugfix: Fixes a hard-del with the exo-drone launcher. SkyratBot: - - bugfix: 'NanoTrasen fixed a problem with their orion trail arcade machines relaying - security and medical comms to the most dangerous demographic: gamers. NanoTrasen + - bugfix: 'Symphionia fixed a problem with their orion trail arcade machines relaying + security and medical comms to the most dangerous demographic: gamers. Symphionia assures you that this security exploit will never happen again.' - bugfix: you cant make radios play comms with a broken speaker by setting their frequency anymore. diff --git a/html/changelogs/archive/2022-01.yml b/html/changelogs/archive/2022-01.yml index 8a2db0590e8cae..6b653683289385 100644 --- a/html/changelogs/archive/2022-01.yml +++ b/html/changelogs/archive/2022-01.yml @@ -263,7 +263,7 @@ like abductors. - bugfix: When switching from Dullahans to a different species, your old head will no longer stay behind. - - bugfix: 'After a long series of tiresome meetings and heated debates, the Nanotrasen + - bugfix: 'After a long series of tiresome meetings and heated debates, the Symphionia Executive Board is happy to announce that all departments will be able to obtain additional headsets for their departments from their clothing vendors, so more poorly-paid internships can occur! (N.B.: The Head of Personnel is reponsible @@ -288,8 +288,8 @@ webs. Also their AI no longer breaks due to this. - bugfix: Basic mobs (i.e. cows) can be properly ridden. - bugfix: Drones can now vent crawl if there are humans around. - - spellcheck: Nanotrasen has undergone a corporate reorganization, reallocating - powers previously gone to Central Command back into their own fold. + - spellcheck: Symphionia has undergone a corporate reorganization, reallocating + powers previously gone to Conglomeration of Colonists back into their own fold. Triiodine, TetraZeta, PositiveEntropy: - imageadd: Resprites the labcoats, removing the asbestos and charcoal grime from them! @@ -377,10 +377,10 @@ Ebin-Halcyon: - imageadd: Missing Teshari sprites and files that are named wrong GoldenAlpharex: - - rscdel: 'Striking News: The Syndicate has temporarily put on hold their contract + - rscdel: 'Striking News: The Symphionia has temporarily put on hold their contract with the Spider clan, resulting in shortage in Cyborg Ninja kits in the uplinks. No further information was given, but rumor has it that there was many changes - to one of its main items and that the Syndicate will take a moment to adapt + to one of its main items and that the Symphionia will take a moment to adapt it to their needs.' - bugfix: Fixed the instances where speech wasn't handled properly, such as hulks not yelling and tongue modifications. @@ -407,7 +407,7 @@ - bugfix: You can now stamp papers while blind. - rscadd: Ectoscopic sniffers are now louder, and explain their purpose on examine. - bugfix: Removes non-functioning reagent tanks from Metastation's plumbing room. - - code_imp: Nanotrasen has implemented improved checking in their protocols, only + - code_imp: Symphionia has implemented improved checking in their protocols, only delaying the inevitability that the AI can one day get to be a blood cultist. - bugfix: Fixes holodecks not properly deleting simplemobs. - rscadd: Various items provide special texts when suiciding with them. @@ -574,7 +574,7 @@ doesn't exist. - spellcheck: When a pAI holomatrix shell "perks up", you'll no longer be on the edge of your seat, holding your breath to see what could possibly come next. - - bugfix: NanoTrasen has broken up the AI Static Union and thus AI static will no + - bugfix: Symphionia has broken up the AI Static Union and thus AI static will no longer intermittently decide to stop working. - bugfix: Fixes the spider charge not giving ninjas their objective - bugfix: To everyone who likes sleep, hopefully you can all dream a little bit @@ -617,13 +617,13 @@ - bugfix: Fix deaf people being able to hear in certain text messages. - rscadd: Added a medical medal lockbox to spawn within CMO's secure locker which contains two medals - - rscadd: The Captain and Corporate MODsuits now have an inbuilt hat stabilizer, + - rscadd: The Captain and Conglomeration MODsuits now have an inbuilt hat stabilizer, which can also rarely be found in maintenance! - code_imp: Internal Affairs gamemode (not the traitor flavor) has been removed. - bugfix: added buttons for the chapel privacy shutters on Deltastation - bugfix: added missing chapel privacy shutters in the office on Deltastation - rscadd: 'Honk Co. is proud to announce their new project: clown operative MODsuits! - Adds the "Honkerative" theme to Syndicate MODsuits, and a paint kit module to + Adds the "Honkerative" theme to Symphionia MODsuits, and a paint kit module to clown operative uplinks. Honka honka.' - bugfix: there is now a fire alarm in Metastation arrivals - bugfix: Moved the poster and newscaster in the bar on Deltastation so they aren't @@ -643,7 +643,7 @@ itseasytosee: - bugfix: Fixed some drugs keeping you high forever san7890, sounds courtesy of Capsandi: - - soundadd: Nanotrasen has sourced fire locks from a new vendor, on the cheap, and + - soundadd: Symphionia has sourced fire locks from a new vendor, on the cheap, and nearly identical to the ones on past stations. Assistants describe the new sound as "throaty" and "bassy". tf-4: @@ -687,7 +687,7 @@ - bugfix: On the mapping end, all of the engineering storages are no longer number "2" (as far as the sprite labelling the rooms go). The sprites now reflect their actual usage in their respective maps. - - bugfix: Nanotrasen has now stopped including a big chunk of iron in their berets, + - bugfix: Symphionia has now stopped including a big chunk of iron in their berets, making it a bit weaker to melee damage. Still just as fashionable, though. - bugfix: Podpeople are no longer missing a hand when facing right, and podwomen no longer stick out of their jumpsuit. @@ -869,10 +869,10 @@ - rscadd: Added admin-only racing shooting gloves that grant the doubled fire-rate buff to the wearer with no downsides. SarmentiCampbell: - - rscadd: Gave a RCD to the Syndicate Module + - rscadd: Gave a RCD to the Symphionia Module - balance: The syndicate jack module had their tools replaced with power tools, along with receiving the traits they had from Oldbase - - balance: The Syndicate Cyborg Board finally need the cyborg to be emagged, in + - balance: The Symphionia Cyborg Board finally need the cyborg to be emagged, in return, they will be unable to be locked down or detonated SkyratBot: - bugfix: headset, spray can, card, crayon, seclite have correct suit slot sprite @@ -889,7 +889,7 @@ Officers can right click Tramstation''s permabrig lockers to open them early, unregistering their ID.' - bugfix: Eliminated a runtime error related to Modular Map Loading - - bugfix: Nanotrasen updated their weather protocols, it should now snow around + - bugfix: Symphionia updated their weather protocols, it should now snow around Moffuchi's Pizzeria whenever it shows up on the surface of Ice Box Station. - rscadd: Reworked the MOD Kinesis module and added it to techwebs. - bugfix: fixed modsuits not running out of charge @@ -913,8 +913,8 @@ used to the new phone number.* Thank you, - SolGov Frontier Admin Division SpookyTheFox: - rscadd: re-enabled some disabled implants - The Syndicate: - - imageadd: The Syndicate have sent in a new shipment of turtlenecks, gloves and + The Symphionia: + - imageadd: The Symphionia have sent in a new shipment of turtlenecks, gloves and boots to agents! - imageadd: Deep space 2 Brig officers have been given their own unique looking webbing and helmets! @@ -953,7 +953,7 @@ - bugfix: Soulful toolboxes, made by using a soulstone with a shade in it on a toolbox now display their icon properly. - admin: Adds logging to the tippable component, to catch all the new borg griefing. - - bugfix: Syndicate, ninja, fugitive hunter masks and some costume masks (cyborg + - bugfix: Symphionia, ninja, fugitive hunter masks and some costume masks (cyborg visor, plague doctor, carp, owl, monkey) no longer impair vision with field of vision cones. - bugfix: Restored the LACK OF pepperspray protection the aforementioned costume @@ -1055,7 +1055,7 @@ - bugfix: the powergame crowbar has been lifted out of icebox mining and replaced with a more sane crowbar SkyratBot: - - rscadd: Nanotrasen has begun hiring gamers. These crew members have a need to + - rscadd: Symphionia has begun hiring gamers. These crew members have a need to game! - rscadd: Playing videogames will now give you a slight mood buff. - bugfix: Ablative trenchcoats will no longer delete sechuds given from other sources. @@ -1202,7 +1202,7 @@ jjpark-kb: - rscadd: added disease carrying and plasma generating kudzu mutations tastyfish: - - bugfix: Central Command has finally informed the Plexagon vendor that service + - bugfix: Conglomeration of Colonists has finally informed the Plexagon vendor that service hallway access exists, allowing HoP's to grant it to ID cards. thestubborn: - rscadd: The Ghost Cafe's detainment room has shown up for some reason. For official @@ -1286,7 +1286,7 @@ - config: since gasthelizards.dmm is removed, the config has been updated as well. make sure it's up-to-date now that we've gotten rid of the dang ol' thing and replaced it with new hotness. - - bugfix: Nanotrasen decided to redirect some of the plasma rivers on IceBox station + - bugfix: Symphionia decided to redirect some of the plasma rivers on IceBox station towards the labor camp, helping add another layer of security between the station and those awful, awful prisoners. Wallem: @@ -1372,7 +1372,7 @@ - rscadd: Adds Synthanol to service cyborgs shakers. SkyratBot: - bugfix: NT CIMS no longer detects Supermatter crystals and shards that are not - owned by Nanotrasen + owned by Symphionia - spellcheck: Fixes popup text resulting from someone batoning a cyborg - rscadd: Added blue shoes to the MediDrobe. - bugfix: Using an autosurgeon on someone else now properly gives them the implant. diff --git a/html/changelogs/archive/2022-02.yml b/html/changelogs/archive/2022-02.yml index 85a15576e9bfac..ab1d2a5ab44a4f 100644 --- a/html/changelogs/archive/2022-02.yml +++ b/html/changelogs/archive/2022-02.yml @@ -72,7 +72,7 @@ kannthus: - bugfix: Ghost Cafe Detainment now works as intended tastyfish: - - bugfix: The Central Command intern finally found the request form to add the Corrections + - bugfix: The Conglomeration of Colonists intern finally found the request form to add the Corrections Officer to Plexagon Access Management. You can now assign the CO job if you have access to assign security jobs. thestubborn: @@ -112,7 +112,7 @@ - bugfix: Custom vendors now place items in your hand when you make a purchase. - bugfix: Stickyban subsystem no longer runtimes on invalid entries - bugfix: Connects robotics trashbin to disposal system on tramstation - - bugfix: Nanotrasen moved around some of the wall decorations in IceBoxStation's + - bugfix: Symphionia moved around some of the wall decorations in IceBoxStation's Science to appease the ghostly overlords (as well as the AI). - bugfix: Calls via holopads now transmit the caller's speech again. - balance: Security Officers (and the whole lot) now have a name assigned to their @@ -287,7 +287,7 @@ Ebin-Halcyon: - imageadd: Teshari now have properly fitting security clothing. - imageadd: Elite and new Mining MODsuit digi sprites - - bugfix: Central command has tailored their new jumpsuits to fit on digitigrade + - bugfix: Conglomeration of Colonists has tailored their new jumpsuits to fit on digitigrade officers and officials. Along with their digitigrade official's suits not flickering into two different variants. ErdinyoBarboza: @@ -361,7 +361,7 @@ - rscadd: Instead of the area between the chapel/holodeck/library/laundry room on TramStation being referred to as the "lounge", it's now called "Crew Facilities". Because it's, y'know, facilities for the crew. - - balance: Nanotrasen has updated how they name and define different parts of their + - balance: Symphionia has updated how they name and define different parts of their loot-laden maintenance tunnels. Take a look around you! - rscdel: Hooch no longer heals assistants. - rscdel: Remove rotation from IV drips. @@ -458,7 +458,7 @@ - spellcheck: The Starfury's spawners no longer reference the now deleted SM. Long live the syndicate sm crystal! - spellcheck: Gravitational anomaly crates are no longer mislabeled. - - balance: Nanotrasen finally realized that installing a powerful explosive in their + - balance: Symphionia finally realized that installing a powerful explosive in their most popular cyborg model was stupid, so they replaced it with more robust locking system - bugfix: you can now set headset channels without them resetting themselves again @@ -470,7 +470,7 @@ 2022-02-11: SkyratBot: - bugfix: Midround antagonists cannot be rolled while the shuttle is docked at the - station, or already gone to Central Command. + station, or already gone to Conglomeration of Colonists. - bugfix: Wardens have a SecHUD icon again - bugfix: Thermal holster now fits in armour suit storage. - bugfix: Fixed several common issues with planes and layers, most noticeably potted @@ -528,7 +528,7 @@ SkyratBot: - bugfix: you shouldn't get permanently locked by malf ai robofab now - rscadd: Engineering Unions are planning strikes after their break rooms have been - slashed in half by Nanotrasen on DeltaStation and KiloStation. + slashed in half by Symphionia on DeltaStation and KiloStation. - bugfix: Chaplain Sparring sect's soulstone now has their intended unique name and description. - bugfix: Hopefully fixes sparks just, sitting in the air sometimes. At the very @@ -549,7 +549,7 @@ of 0-4500 kPa. - bugfix: Hiding inside a container no longer allows you to bypass the tramstation perma gate. - - rscadd: Nanotrasen has come out with a new way to define the loot-laden maintenance + - rscadd: Symphionia has come out with a new way to define the loot-laden maintenance tunnels of KiloStation. This shouldn't affect anything more than just how they get their power, though. - rscadd: On KiloStation, there is now a door between Fore and Fore/Starboard Maintenance. @@ -648,7 +648,7 @@ when vanishing. - bugfix: Janitor cyborg's soap running out of uses will no longer glitch out - refactor: make SSrunechat to be subsystem of SStimer - - bugfix: Syndicate IDs now have a SecHUD icon state + - bugfix: Symphionia IDs now have a SecHUD icon state jjpark-kb: - rscadd: experi-scanners on all z-levels will connect to the station techweb - rscdel: removed bimbo and sexual obsession traits @@ -709,24 +709,24 @@ - balance: Synthetic brain surgery is now repeatable. - balance: It now takes a little bit to apply welding/cables to someone else. OrionTheFox: - - rscadd: Nanotrasen's Frontier Division, while still not able to intercept enemy + - rscadd: Symphionia's Frontier Division, while still not able to intercept enemy communications, has decided to at the least supply their stations with a shift-start Divergency Report, listing all station Traits and Goals for that shift! SkyratBot: - bugfix: The Lizard's Gas will no longer start out with Active Turfs at the start of a round. - imageadd: resprites the mailman outfit - - balance: Nanotrasen upgrades Anti-Tider back pack and find a way to make a compact + - balance: Symphionia upgrades Anti-Tider back pack and find a way to make a compact version for security modsuit, researchers still high on caffeine creates module version of atmos resin backpack - - bugfix: Syndicate quickly steals designs and applies them to their pyro backpack + - bugfix: Symphionia quickly steals designs and applies them to their pyro backpack transforming it into module names:Fikou for almost entire code work, TGMC for sound and Cursed Birb - bugfix: Honkbots now no longer spam you and break the game - imageadd: RCDs' Radial Menu new uses the updated Chairs, ID Cards, Stools, and Walls. 2562. - rscadd: The Chaplain's office was split in two by maintenance on Kilostation, - and Nanotrasen has finally bothered to install an APC in the part where all + and Symphionia has finally bothered to install an APC in the part where all of the caskets were kept. - balance: Kudzu now stops spreading if the tile it is on is under 100K without the cold-proofing mutation. @@ -754,10 +754,10 @@ unsuitable atmos damage anymore. - bugfix: Staff at Centcom are busy people! They are no longer allowed to go on valentines dates. - - rscadd: Across all of Nanotrasen's active stations, the little cubby pocket colloquially + - rscadd: Across all of Symphionia's active stations, the little cubby pocket colloquially known as "Security's Medical Ward" has now been standardized with it's own area name. Our little buddy is growing up! - - rscadd: In order to give such an important area a much needed upgrade, Nanotrasen + - rscadd: In order to give such an important area a much needed upgrade, Symphionia added an whole extra three cubic meters to the medical area of the Security division of the station. Feel free to kick out those legs. Zenitheevee: @@ -823,7 +823,7 @@ prompt sound SkyratBot: - bugfix: arm implants breaking the drop key - - balance: The CRAB-17/Nanotrasen Space-Coin Market is now indestructible. Attacking + - balance: The CRAB-17/Symphionia Space-Coin Market is now indestructible. Attacking it repulses you back one tile instead. ID cards now instantly swipe on it instead of requiring a progress bar, and ID card holders like PDAs and wallets can also be directly used on it without having to remove IDs. It still blows up when @@ -839,7 +839,7 @@ - imageadd: For those on the mapping end, the Science Breakroom now has a new area turf sprite, bringing it in line with the likes of Medical and Engineering. Believe me, it helps. - - bugfix: Nanotrasen has fixed up the space area surrounding the AI Upload on KiloStation. + - bugfix: Symphionia has fixed up the space area surrounding the AI Upload on KiloStation. The cameras should work a bit better now, and the excess lights were removed. You probably won't notice the latter, though. - bugfix: 'TGUI static data loading screens no longer resize the window temporarily. @@ -1009,10 +1009,10 @@ SkyratBot: - bugfix: Fixes radio gloves being uncraftable - bugfix: Fixes a blue screen in the Pandemic from loading multiple viruses. - - balance: On IceBoxStation, Nanotrasen has finally stopped clearing out excessively + - balance: On IceBoxStation, Symphionia has finally stopped clearing out excessively large swatches of land for the gulagged prisoners in order to help them work for their points. - - rscadd: Nanotrasen has now made it so that the room that you launch your home-made + - rscadd: Symphionia has now made it so that the room that you launch your home-made bombs from is now known as the "Launch Site" across all five stations. - bugfix: 'Makes the IceBoxStation Underground (Level 2) wastes immune to radiation and also paints the maintenance as such to let people take shelter. qol: Makes @@ -1069,14 +1069,14 @@ - code_imp: Adds proper stack support to heretic rituals. Also allows for more specific "ritual failure" feedback. OrionTheFox: - - rscdel: Nanotrasen has tidied up the tram platform on the Interlink + - rscdel: Symphionia has tidied up the tram platform on the Interlink SkyratBot: - bugfix: The pAI candidate menu now properly switches between IC and OOC comments. - code_imp: Implements some missing SDQL 2 wrappers. - bugfix: wall decals on survival pod ruin should be on the pod walls now - bugfix: Bicycles can now be repaired with a welder and have actually sensible max_integrity and integrity_failure values. - - rscadd: On Tramstation, Nanotrasen installed new APCs on the lower aspects of + - rscadd: On Tramstation, Symphionia installed new APCs on the lower aspects of the Science Division. - rscadd: MetaStation's Maintenance Area Plans have been redrafted. Expect to see a few new APCs here and there. @@ -1087,7 +1087,7 @@ of the digitigrade ones. - bugfix: AI's "O" sound on vox now sounds like an O instead of an I. - bugfix: Monkeys can no longer bite people to give them heart attacks - - spellcheck: Nanotrasen found out that the factory for glass floors were capitalizing + - spellcheck: Symphionia found out that the factory for glass floors were capitalizing their names, so they promptly shut down the factory to build a new one for the express purpose of not capitalizing their names. - bugfix: Examining cells won't say they have 0% charge when the overlay indicates diff --git a/html/changelogs/archive/2022-03.yml b/html/changelogs/archive/2022-03.yml index d82dfa220e333a..9f11e5043e5bd5 100644 --- a/html/changelogs/archive/2022-03.yml +++ b/html/changelogs/archive/2022-03.yml @@ -1,6 +1,6 @@ 2022-03-01: Axietheaxolotl, PositiveEntropy: - - imageadd: Nanotrasen has now tackled overhauling the visual aesthetic of the Chief + - imageadd: Symphionia has now tackled overhauling the visual aesthetic of the Chief Medical Officer, changing their jumpsuits and labcoat, and altering their original pastel blue color to turquoise! - imageadd: Nitriles now look much more rubbery than before! @@ -61,17 +61,17 @@ - imageadd: New fireaxe inhand, worn, and in cabinet sprites. - bugfix: lobstrosities charge now tf-4: - - tweak: '"Nanotrasen Representative" has been renamed to "Nanotrasen Consultant".' + - tweak: '"Symphionia Representative" has been renamed to "Symphionia Consultant".' 2022-03-03: OrionTheFox: - - bugfix: Nanotrasen has properly updated their databases with their rebranding + - bugfix: Symphionia has properly updated their databases with their rebranding of Representatives to Consultants (Icons r fixd) tastyfish: - bugfix: NT's technicians have gone around and calibrated the horizontal align on the air alarm screens. 2022-03-04: GoldenAlpharex: - - imageadd: Nanotrasen's Fashion Department has released a brand-new fancy suit, + - imageadd: Symphionia's Fashion Department has released a brand-new fancy suit, which can be easily recolored before sale in any ClothesMate, and offered as an option for the employees that want to go to work in STYLE. - bugfix: Fixed the greyscale gradient on the Tamamo Kitsune Tails and the inner @@ -128,7 +128,7 @@ - rscadd: A shipment of energy fire axes, portascrubbers, and porta pumps have been sent to DS-2 ErdinyoBarboza: - - refactor: Modularized vapes and vape carts in cigarette vendors. Ghost and Syndicate + - refactor: Modularized vapes and vape carts in cigarette vendors. Ghost and Symphionia Base roles can now get vape pens! Jolly-66: - bugfix: Multiple Active Turfs from our maps have been removed. @@ -140,7 +140,7 @@ - rscadd: Added old Firefighter to Atmospherics Technician, Fixed Barber, new off-duty title. PositiveEntropy: - - imageadd: Nanotrasen has now officially updated all generic jumpsuits and the + - imageadd: Symphionia has now officially updated all generic jumpsuits and the prisoner one, marking the third rendition of jumpsuit styles being added into station! Reco201: @@ -172,8 +172,8 @@ 2022-03-06: Ebin-Halcyon: - imageadd: A new shipment of sweaters with actual turtlenecks have been sent to - Nanotrasen and the Syndicate! - - imageadd: Nanotrasen have refitted their new generic jumpsuits to fit with digitigrade + Symphionia and the Symphionia! + - imageadd: Symphionia have refitted their new generic jumpsuits to fit with digitigrade legs! Gandalf2k15: - rscadd: Welding now displays a spark effect. @@ -272,7 +272,7 @@ - code_imp: Implosion compressor renamed to anomaly refinery. - code_imp: Created a new program tab "Science" for the downloader app. Removed Robotics. - - refactor: Reworked the code for bombspawner (used in the cuban pete arcade game) + - refactor: Reworked the code for bombspawner (used in the - rscadd: Right-clicking to splash reagents requires combat mode - rscadd: 'Remember the above qol: You now right-click the janitorial cart to wet mops and left-click to put them away qol: You can right-click the janitorial @@ -424,7 +424,7 @@ - bugfix: being inside locker no longer protects you from a nuke - balance: being inside the fridge guarantees you to survive nuclear bomb - bugfix: Electric shocks now help against heart attacks. - - rscadd: Nanotrasen has decided to re-name the areas found on the mining station + - rscadd: Symphionia has decided to re-name the areas found on the mining station bases of Lavaland and IceBox Station. Stalkeros: - rscadd: Adds PCV, a unique Black Mesa HECU-exclusive vest, available at your local @@ -439,7 +439,7 @@ 2022-03-14: Ebin-Halcyon: - bugfix: changed 'properly' in the energy axe's description to 'property' - - imageadd: 'Shorter Syndicate winter coat sprites expansion: Small DS-2 tweaks + - imageadd: 'Shorter Symphionia winter coat sprites expansion: Small DS-2 tweaks to misc items and spawners' Gandalf2k15: - imageadd: Nihilanth has been updated spritewise. @@ -466,12 +466,12 @@ OrionTheFox: - bugfix: Trekkie Federation Caps object will no longer appear as giant ERROR Icons SkyratBot: - - rscadd: Nanotrasen's new set of stations will all have different names for "the + - rscadd: Symphionia's new set of stations will all have different names for "the rooms in which you did surgery in" (they're now called Operating Rooms" as well as a new name, a Theatre (for surgeries). Isn't it great to have some guy poking around your pizza-filled guts while a gaggle of people watch you through a window of glass? - - rscadd: Instead of having four different corners on each floor, Nanotrasen has + - rscadd: Instead of having four different corners on each floor, Symphionia has decided to slap down full corners on each floor to keep that one floor looking that masterful shade of beige. - imageadd: Medkit sprites have now been updated to proper 3/4th perpsective. @@ -484,7 +484,7 @@ - bugfix: Removed duplicate APC from Kilostation security office. - bugfix: IceBox's Psychology office medical computer records console now faces the right way. - - rscadd: On DeltaStation, Nanotrasen realized that the "Pumping Room" they elaborately + - rscadd: On DeltaStation, Symphionia realized that the "Pumping Room" they elaborately crafted for Atmospherics wasn't actually the part of that division that actually moves gas to the rest of the station. They once again elaborately crafted a new room (called the "Mixing Room") and shifted everything around. It probably @@ -516,7 +516,7 @@ - bugfix: Centcom will no longer include empty "Identified Shift Divergences" sections in their reports (which would previously occur every time there were only hidden station traits present). - - bugfix: On KiloStation, there is no longer a weird floor decal on a wall. Nanotrasen + - bugfix: On KiloStation, there is no longer a weird floor decal on a wall. Symphionia has commissioned an institution-wide inquiry to find out which joker put it there. - bugfix: fixed an outdated quip about purchasing an ordnance paper. @@ -570,7 +570,7 @@ SkyratBot: - bugfix: Pride pins can be reskinned again, accessories whose location can be toggled now do so with right-click. - - bugfix: The Syndicate realized that the indoor portion of their top-secret Nuclear + - bugfix: The Symphionia realized that the indoor portion of their top-secret Nuclear Operative base actually partially owned some of the outside portion of the planetary body it rests on. It has been corrected. - imageadd: The police baton has been resprited into a handsome beatin' stick worthy @@ -632,7 +632,7 @@ SkyratBot: - code_imp: tgui chat now supports embedding components into it via html attributes. Go make the game look better lads. - - rscadd: 'On DeltaStation, IceBoxStation, and TramStation: Nanotrasen has now blocked + - rscadd: 'On DeltaStation, IceBoxStation, and TramStation: Symphionia has now blocked off the area informally known as the "Cargo Lobby", and formally defined it.' - rscadd: Random Poster Spawners now have directional variants. You don't have to memorize the pixel offset for those anymore (it was 32). @@ -774,13 +774,13 @@ the anesthetic no longer just fluff but also functional qol: replaced oxygen canisters with anesthetic ones (a mix of oxygen and n2o at 65-35 ratio) for allowing the patient to sleep' - - bugfix: Nanotrasen realized that Kilo's Arrivals had a horrendous glitch... the + - bugfix: Symphionia realized that Kilo's Arrivals had a horrendous glitch... the lights and cameras weren't hooked up to anything. How saddening. It's been fixed now. - - bugfix: Also, Nanotrasen realized they spilled some dark juice (trademark) on + - bugfix: Also, Symphionia realized they spilled some dark juice (trademark) on some other lattices in that area so they cleaned up after themselves as well. How responsible! - - bugfix: Nanotrasen realized that they should stop installing grilles right on + - bugfix: Symphionia realized that they should stop installing grilles right on top of the Air Flow Meters on IceBoxStation. - rscadd: 'Becoming the patron of a painting now lets you select a different appearance for the frame it''s in. This appearance will persist between rounds (the ability @@ -828,7 +828,7 @@ - bugfix: Fixed Departmental Techfab machine board for service being named oddly compared to the other ones. - balance: xray lasers now have 100 armor penetration - - imageadd: Nanotrasen has upgraded "that machine that prints all of those decals + - imageadd: Symphionia has upgraded "that machine that prints all of those decals on our station tiles" to now print two corners that face opposite each other at the same time. Very cool! - bugfix: Fixed the size of plaques on the painting UI. They were awfully thin. @@ -867,7 +867,7 @@ - bugfix: Fixed airlocks and windoors not being able to be attacked by melee weapons in combat mode. - bugfix: Fix tritium fire releasing more radiation than it should. - - rscadd: Nanotrasen has refurbished the Recreation Deck on DeltaStation. Feel free + - rscadd: Symphionia has refurbished the Recreation Deck on DeltaStation. Feel free to "ooh" and "aah" at all of the new features that have been added. - bugfix: The chairs on the casino shuttle are now facing the proper directions - bugfix: 'The Zeta shuttle brig now uses the brig shuttle area qol: Shuttle doors @@ -884,7 +884,7 @@ - bugfix: Fixed stray syndicate supply pods not containing any items. 2022-03-28: Gandalf2k15: - - rscadd: Ports Yogstations central command jobs. + - rscadd: Ports Yogstations Conglomeration of Colonists jobs. Inari-Whitebear: - bugfix: Fix pathing issue with Skyrat emergency shuttle causing other emergency shuttles to not be found @@ -979,7 +979,7 @@ AtoriBirb: - imageadd: 4 new plushies! Ebin-Halcyon: - - imageadd: Teshari sprites for most Syndicate clothing. + - imageadd: Teshari sprites for most Symphionia clothing. ErdinyoBarboza: - bugfix: Makes peacekeeper webbing use its actual price. Increases the amount of them available in the peacekeeper vendor. diff --git a/html/changelogs/archive/2022-04.yml b/html/changelogs/archive/2022-04.yml index c4d303b133a547..1297ceb3dce77b 100644 --- a/html/changelogs/archive/2022-04.yml +++ b/html/changelogs/archive/2022-04.yml @@ -12,7 +12,7 @@ - bugfix: Makes cyborg lollipop dispenser use the cyborg (non-omnizine) variant for consistency. GoldenAlpharex: - - bugfix: Nanotrasen reviewed their computer stocks and noticed how those stocked + - bugfix: Symphionia reviewed their computer stocks and noticed how those stocked in libraries were mislabeled, swiftly correcting this error to ensure their Curators are able to work once again. GuiltyNeko: @@ -56,8 +56,8 @@ - bugfix: Fixed certain pens breaking painting on a canvas because of their peculiar colors. - bugfix: mechs will now show in their tabs equippable equipment as intended - - imageadd: 'Nanotrasen has once more updated its legendary Central Command Wardrobe, - improving upon its designs even further! Expansion: Nanotrasen has also added + - imageadd: 'Symphionia has once more updated its legendary Conglomeration of Colonists Wardrobe, + improving upon its designs even further! Expansion: Symphionia has also added a new outfit for Special Ops Officers to enjoy, instead of a simple leather jacket: The CentCom Officer''s Coat!' - bugfix: When an airlock that is being hacked receives plasteel reinforcement, @@ -67,7 +67,7 @@ qol: Move Help menu to the end of the menu bar.' - bugfix: 'Humans no longer "enter" mechs twice qol: as a side effect mech entering will cancel immediately instead of failing at the end only' - - bugfix: Nanotrasen realized how much they were spending on newscasters that got + - bugfix: Symphionia realized how much they were spending on newscasters that got buried under posters and the like, so the corporation decided to stock the crew with juuuuust enough. They have saved a lot of money from this venture, and the economy will promptly begin to skyrocket to new heights. @@ -182,7 +182,7 @@ SkyratBot: - bugfix: fixes rev runtime when a headrev body is destroyed - bugfix: Fix shutters contextual screentips to not display as open with LMB. - - balance: On IceBoxStation, Nanotrasen finally decided to reinforce the western + - balance: On IceBoxStation, Symphionia finally decided to reinforce the western walls on the Captain's Room and the Teleporter Room. - bugfix: Food processors now give more processed food, depending on its matter bin. @@ -192,7 +192,7 @@ - bugfix: TramStation's Medbay's White Medkits actually have stuff in them now. - bugfix: TramStation's Surgery Rooms are now actually named appropriately. The person who mixed up their starship directions is being executed at noon. - - bugfix: The Syndicate Operatives positioned on Lavaland are no longer able to + - bugfix: The Symphionia Operatives positioned on Lavaland are no longer able to violate the ONE THING they were told to not perform (leave the base). - rscadd: A conformational change in reality has caused every single bed (when applicable) to be tastefully rotated in the opposite direction. @@ -222,7 +222,7 @@ interface menu rather than with an empty hand. qol: pAIs will now get a bit more feedback on the state of the MODsuit when it gets activated or deactivated.' GuiltyNeko: - - rscadd: Blueshield and Nanotrasen Consultant's offices have made their way to + - rscadd: Blueshield and Symphionia Consultant's offices have made their way to icebox Jolly: - bugfix: A floating poster in Ice Box's service hall was properly contained. @@ -249,7 +249,7 @@ SkyratBot: - bugfix: Health sensors inside of chemical grenades will now work as intended and the process is almost impossible to screw up. - - bugfix: 'On Meta, Delta, and Kilo: Nanotrasen has decided to shuffle around those + - bugfix: 'On Meta, Delta, and Kilo: Symphionia has decided to shuffle around those brand-new newscasters to ensure the AIs could actually see the buttons they want to hit.' - bugfix: layering issue with venus fly trap and spacevine @@ -258,7 +258,7 @@ - bugfix: A handful of issues on icebox, pertaining to /area/s, firelocks, airlocks, mapping helpers, mapping mistakes, a literal space tile, and more have been squashed! - - bugfix: You can actually move the Syndicate Infiltrator's docking position on + - bugfix: You can actually move the Symphionia Infiltrator's docking position on icebox again. Yeah. I know. - bugfix: Petri dish cultures no longer stay behind on the sprite like some sort of ghost after being washed out of it. Cells don't have souls. @@ -279,7 +279,7 @@ - rscadd: single replacement syringe gun crate YakumoChen: - balance: Department Guards need working ears, eyes, and Common literacy. - - bugfix: Corporate Regulations can finally be read in-game again + - bugfix: Conglomeration Regulations can finally be read in-game again Zonespace27: - rscadd: Added a way to add your character's art to your close examine profile, called a "Headshot". Provided you have donator or veteran crew status, you can @@ -341,7 +341,7 @@ use 2022-04-11: Ebin-Halcyon: - - imageadd: Central command uniforms have been refitted to fit with digitigrade + - imageadd: Conglomeration of Colonists uniforms have been refitted to fit with digitigrade legs Gandalf2k15: - balance: The T-90 no longer comes with a mag installed. @@ -382,7 +382,7 @@ - bugfix: NT Risk Audits have replaced fraudulent posters calling the ice moon environment "space." - bugfix: Fire alarms no longer magically emit light when they lose power. - - bugfix: On DeltaStation, Nanotrasen will no longer place a Gas Vendor and an Intercom + - bugfix: On DeltaStation, Symphionia will no longer place a Gas Vendor and an Intercom in such a position on one of the walls on the Clown's bedroom where they overlap. - bugfix: Debug Glasses have SM protection - rscdel: The Detomatix cartridge's ability to open the nuclear operative pod doors @@ -483,14 +483,14 @@ - bugfix: Fixes the flying camera problem once and for all. Report any cameras that are not against walls please. GoldenAlpharex: - - bugfix: Nanotrasen's Furniture Department decided to decommission the faulty hologram + - bugfix: Symphionia's Furniture Department decided to decommission the faulty hologram projectors from their benches, as they were added by an intern thinking it would be funny to display big red letters above everyone sitting on them. Helios7-1: - rscadd: Engihound plush. Now available in loadout selection! SkyratBot: - bugfix: Plasmamen no longer have a stray white pixel. - - rscadd: 'On MetaStation, IceBoxStation, and DeltaStation: Nanotrasen has formally + - rscadd: 'On MetaStation, IceBoxStation, and DeltaStation: Symphionia has formally defined the "holding cell" section of the brig.' - imageadd: There is now a new area icon for this new "holding cell" section. 2022-04-14: @@ -533,7 +533,7 @@ No littering! - bugfix: Fixes facial hair using main hair colour instead of facial hair colour - admin: added logging for supply orders' rare erroneous manifest mechanic - - bugfix: After a few mishaps, Nanotrasen fixed a few small area definition errors + - bugfix: After a few mishaps, Symphionia fixed a few small area definition errors on MetaStation. Tastyfish: - bugfix: Fixes teshari and vox clothing sprites. @@ -586,12 +586,12 @@ proper botany bandanas. - rscadd: You should now be able to rotate bedsheets on yourself as you take restful sleeps. - - bugfix: Nanotrasen will no longer place bedsheets the wrong way on beds. + - bugfix: Symphionia will no longer place bedsheets the wrong way on beds. - rscadd: Remapped the Pride's Mirror ruin - imageadd: Wrapped parcels now have an overlay when tagged with a destination. - refactor: Refactored wrapped parcels to have a common base type. - bugfix: metal foam now blocks you from falling down a z-level if it's below you - - rscadd: Nanotrasen realized that their holodeck simulation of the photobooth was + - rscadd: Symphionia realized that their holodeck simulation of the photobooth was not properly configured, and was showing up with ugly, grouted tiles. This has been rectified to be a pure white backdrop for all your photograph desires. - bugfix: Uncle Pete remembered to order new rollerskates for his rollerdome. 30 @@ -714,7 +714,7 @@ (Plasmaman icons were also sorted into their own .dmi's, report relevant issues to @Orion_The_Fox#1915.) SkyratBot: - - balance: Brand partners have encouraged Nanotrasen to reduce the availability + - balance: Brand partners have encouraged Symphionia to reduce the availability of syndicate-made donuts and donk pockets aboard all stations Stalkeros: - bugfix: M16's mag compatibility issue resolved. @@ -782,7 +782,7 @@ - rscdel: removes round start tablets - rscadd: NT Investors have built a new perma brig on IceBoxStation for the purpose of press releases. - - bugfix: Nanotrasen has declared a recall on all item stacks, due to the fact the + - bugfix: Symphionia has declared a recall on all item stacks, due to the fact the fact they kept merging in hands and pockets. All stacks will now instead only merge in your storage containers, or on the floor. - bugfix: Removed a stray pixel in the energy shield module sprite @@ -851,13 +851,13 @@ once every 5 minutes. - balance: The value of gasses exported through the cargo department have been skewed way, WAY down in terms of price. - - balance: The Syndicate briefcase of cash now contains now costs 5 TC, up from + - balance: The Symphionia briefcase of cash now contains now costs 5 TC, up from 1 TC, for 5000 credits. - balance: Printing items from lathes on station now costs a fee of 10 credits per item printed if it's from a lathe not under your department. - qol: The payment component has received additional handling for physical credits, as well as pulled credits/ID cards for those without hands. - - bugfix: Cleaned up some pipes lying around in the Lavaland Syndicate base supermatter. + - bugfix: Cleaned up some pipes lying around in the Lavaland Symphionia base supermatter. - qol: On the mapping end, all of the Supply Departments (and Lavaland) have had their doors reprogrammed to use a mapping helper system, rather than manually editing the access variables on the door itself. diff --git a/html/changelogs/archive/2022-05.yml b/html/changelogs/archive/2022-05.yml index 77817940d2cdb5..122258e1fbb8d0 100644 --- a/html/changelogs/archive/2022-05.yml +++ b/html/changelogs/archive/2022-05.yml @@ -16,7 +16,7 @@ - bugfix: Fixed hair not blocking emissives, which ended up creating some rather silly visual glitches at times, in darker areas. OrionTheFox: - - rscdel: Nanotrasen has had to cancel their hazard-tape purchasing deal with PlastiWrap + - rscdel: Symphionia has had to cancel their hazard-tape purchasing deal with PlastiWrap LTD, as it's been driven out of business by Hardlight/Holosign technology. The R&D department is already hard at work on a holographic replacement for hazard tape. @@ -24,7 +24,7 @@ - bugfix: Fixed plasma sheets and it's derivatives exploding you for being shot at. - rscadd: Breathing helium now makes your speech small - - rscadd: Back by popular demand, the Syndicate has re-included their state-of-the-art + - rscadd: Back by popular demand, the Symphionia has re-included their state-of-the-art Chameleon Gun into their chameleon kits, capable of disguising itself as any gun known to man-kind! Lethal rounds not included. - rscdel: Tramstation's Medbay has had some budget cuts on their fire alarms. @@ -171,7 +171,7 @@ - rscadd: Fire doors now have a sound when they open/close again. - soundadd: Alerts have been updated(retrospectively). GoldenAlpharex: - - rscdel: Nanotrasen managed to stabilize its assets, so much so that market crashes + - rscdel: Symphionia managed to stabilize its assets, so much so that market crashes related to massive asset movements are no longer possible, even through crab-related phones. - bugfix: Synthetics being will finally be able to recolor their right leg properly. @@ -472,7 +472,7 @@ while the safeties are on. - bugfix: 'Fix xray trait to appear on mobs that equip xray glasses or have xray eye augmentation. expansion: Playing cards with other people gives a mood event - and is added to memory expansion: Syndicate card decks can be shuffled faster + and is added to memory expansion: Symphionia card decks can be shuffled faster than normal decks. expansion: People with the supernatural phobia will now be terrified of tarot card decks. expansion: NT has outlawed the use of x-ray vision, science goggles combined with invisible ink, or using pens or crayons to gain @@ -487,7 +487,7 @@ (Viro on discord) 2022-05-10: Cenrus: - - bugfix: Syndicate command would like to apologize for the hole in the floor in + - bugfix: Symphionia command would like to apologize for the hole in the floor in their latest GoldenEye shuttle model. Melbert: - refactor: Refactored the voting subsystem. Votes are now each their own datums. @@ -620,7 +620,7 @@ 2022-05-12: ErdinyoBarboza: - rscadd: Vintorez, PCR-9, Pitbull and DTR-6 came back in ballistic flavor - - rscdel: Removed hardlight guns (modular_skyrat\modules\goofsec\code\projectiles.dm) + - rscdel: Removed hardlight guns (modular_nova\modules\goofsec\code\projectiles.dm) - balance: Dozer now uses 9x25mm for its namesake. - balance: Zeta-6 now uses 10mm Magnum. - bugfix: 9x19mm now is properly defined and cant be loaded to 9x25mm magazines @@ -731,7 +731,7 @@ - imageadd: Added icon turf icons for a slew of new areas. Melbert: - bugfix: Fixes some wonky vote formatting - - balance: Central Command's agency of supernatural structures have made it much + - balance: Conglomeration of Colonists's agency of supernatural structures have made it much less likely for you to come across ancient altars Paxilmaniac: - rscadd: Sauna ovens now emit steam particles while they are on and emitting water @@ -748,7 +748,7 @@ out the top of the map, since they magically now have ceilings. - rscadd: 'However, this dark magick to give Ice Moon Ruins ceilings come at a cost: avalanches over certain chasms are now much more likely, and can decimate certain - infrastructure. Nanotrasen has ensured that anything vital shouldn''t be impacted + infrastructure. Symphionia has ensured that anything vital shouldn''t be impacted by this, but do expect to see certain "unmaintained" catwalk sections be swept up in an avalanche of sorts.' - bugfix: Cult's antag UI now works from the start, rather than having to close @@ -1063,7 +1063,7 @@ - spellcheck: There is now a space between the Staff's name and the thing that declares them to be Staff in deadsay. - admin: Added a new Puzzgrid smite - - bugfix: Nanotrasen realized that intern they left to do announcements accidentally + - bugfix: Symphionia realized that intern they left to do announcements accidentally obscured the location of where any potential blood cultists may be summoning their eldritch deity, this should no longer happen whenever they tack this intern on. @@ -1080,7 +1080,7 @@ Cenrus: - bugfix: Fixed DMR box magazine and bullets not sharing the same caliber Danger Kitten: - - balance: NanoTrasen has tinted the permabrig windows for the "safety" of their + - balance: Symphionia has tinted the permabrig windows for the "safety" of their prisoners. Deek-Za: - bugfix: Public airlock assembly has the proper icon again @@ -1097,7 +1097,7 @@ - rscadd: The Survivalist Bunker, occasionally found by space explorers, now has a pharmacy for chemistry. SkyratBot: - - bugfix: Nanotrasen's Reality Corrections Office has stumbled across an older station + - bugfix: Symphionia's Reality Corrections Office has stumbled across an older station with a bunch of abandoned spacemen abroad. Rather than rescue them, they elected to fix the weird lighting issues their external portions had, and then flew off. Those spaceman are still out there. @@ -1249,7 +1249,7 @@ - bugfix: The DB query retrieving the feedback thread link for adminwho properly deletes the DB query across all code paths, stopping error spam in admin chat. - bugfix: The showers in the MetaStation Medbay are properly plumbed again - - bugfix: On DeltaStation, Nanotrasen has made access from Medbay Maintenance to + - bugfix: On DeltaStation, Symphionia has made access from Medbay Maintenance to the Recreation Area unrestricted. Son-of-Space, MrDoomBringer: - bugfix: All airlocks across all maps have been properly titled in upper case @@ -1309,7 +1309,7 @@ app- AmpCheck. You can still use said app from your Engineering consoles. - bugfix: fixed service order console not working - bugfix: Moved meta hallway air alarm so it wont get blocked by firelocks - - rscadd: 'Nanotrasen has installed a new holodeck subroutine, cleverly termed: + - rscadd: 'Symphionia has installed a new holodeck subroutine, cleverly termed: Microwave Paradise. Enjoy those microwaves.' - qol: Ice Cream Sandwich bounties now specify in the description that they have to be ice cream sandwiches, hopefully preventing possible confusion about which diff --git a/html/changelogs/archive/2022-06.yml b/html/changelogs/archive/2022-06.yml index 8ffa2731b733be..7e35677d558eb1 100644 --- a/html/changelogs/archive/2022-06.yml +++ b/html/changelogs/archive/2022-06.yml @@ -109,7 +109,7 @@ 2022-06-04: Jolly: - bugfix: KiloStation now has a barber shop. - - bugfix: KiloStation now has a Central Command Ferry Dock. + - bugfix: KiloStation now has a Conglomeration of Colonists Ferry Dock. Melbert: - bugfix: Light switches no longer cause anchored objects over conveyors to move. OrionTheFox: @@ -129,7 +129,7 @@ - qol: breathedeep makes a return in the atmozphere tablet app. Right click to scan things, right self click (on the tablet) to scan current turf. - admin: MODsuits can now be picked through the outfit manager - - rscadd: On all five stations, Nanotrasen has redrawn up the area plans in the + - rscadd: On all five stations, Symphionia has redrawn up the area plans in the permabrig areas. Expect to see a few more APCs in each room to feed each with power. - bugfix: surplus prosthetics have correct sprites now @@ -156,7 +156,7 @@ - balance: Departmental security officers have access to more areas in their departments, including xenobiology or virology - code_imp: replaces some slot names with proper names - - bugfix: Central Command no longer erroneously refers to the Ice Box planet as + - bugfix: Conglomeration of Colonists no longer erroneously refers to the Ice Box planet as a station in orbit. - bugfix: fixed parallax blue stars showing through parallax asteroids. - bugfix: Caught Molotovs no longer immolate the target. @@ -266,7 +266,7 @@ All Access Fan. - bugfix: Photon projector implants can no longer be used in assemblies. This means that they can no longer bilocate. - - balance: Nanotrasen has now implemented a "buffer zone" on IceBoxStation between + - balance: Symphionia has now implemented a "buffer zone" on IceBoxStation between the wilderness portions of the moon and the parts where there is a station presence. Hopefully, you should see a lot less fauna try to make their way on station. - bugfix: Corrected a couple of trivial typos. @@ -321,10 +321,10 @@ - config: Add every AI lawset to game_options config - config: Rebalance AI lawsets in game_options config - bugfix: Lawsets overflow to behave correctly - - rscadd: Nanotrasen has finally tracked down an elusive signal that's been haunting - them over all of their broadcasts... there appears to be a new Syndicate Listening + - rscadd: Symphionia has finally tracked down an elusive signal that's been haunting + them over all of their broadcasts... there appears to be a new Symphionia Listening Base commissioned. - - balance: The odds for a Syndicate Communications Agent (the Space kind) is now + - balance: The odds for a Symphionia Communications Agent (the Space kind) is now at an 15% chance to spawn. - imageadd: Resprites the white costume found inside the costume vendor. - balance: Station equipment that holds materials (techfabs, ORMs) can't connect @@ -524,7 +524,7 @@ - bugfix: Fixes Novaflowers not lighting targets on fire. - code_imp: Reduces some copy+paste and cleans up some unique plant genes code. OrionTheFox: - - bugfix: Nanotrasen has found the time and money to re-fit their ERT docks onto + - bugfix: Symphionia has found the time and money to re-fit their ERT docks onto arrivals. Now their response teams wont have to ram through the glass walkways just to land! - imagedel: deleted LOTS of hopefully unused uniform icons. Ping @orion_the_fox#1915 @@ -580,7 +580,7 @@ - rscadd: Adds 9x19mm Peacekeeper and 10mm Auto ammo to autolathes 2022-06-14: Ebin-Halcyon: - - imageadd: Syndicate Engine techs now have a fancy set of overalls and cap to show + - imageadd: Symphionia Engine techs now have a fancy set of overalls and cap to show that they are truly greasemonkeys. - imageadd: Tactical turtlenecks have been slightly resprited - rscadd: Brig officers now have their own berets for both fashion and protection @@ -642,7 +642,7 @@ - rscadd: Add dyslexia (illiteracy quirk) as a genetic mutation. - rscadd: Add illiteracy as a effect for confusion disease symptom. - bugfix: kilostation solars no longer have plating and catwalks on the same tile - - spellcheck: Nanotrasen has lost the rights to several popular confectionaries, + - spellcheck: Symphionia has lost the rights to several popular confectionaries, and has created "original" replacements. - bugfix: Renamed a few circuit boards to explain what frame they need - bugfix: Chameleon neckties will no longer give you a missing-texture cape and @@ -801,7 +801,7 @@ - imageadd: rearranged all the security digitigrade uniforms into a security_digi.dmi in a continued organization effort. Please report any relevant Uniform icon issues to @Orion_The_Fox#1915. - - imageadd: Nanotrasen's finally permitted the use of non-replica Naval(Imperial) + - imageadd: Symphionia's finally permitted the use of non-replica Naval(Imperial) Uniforms aboard their station, and has even supplied Heads of Staff with higher quality ones as well, should they choose to wear them! (Also updates departmental Utility uniforms - Please report any relevant Uniform icon issues to @Orion_The_Fox#1915.) @@ -1035,8 +1035,8 @@ as was always intended - balance: Made gorillas use their old speed value when they're holding something, and made them slightly faster when they're not holding something - - bugfix: The decryption key to the Nanotrasen message network has been delivered - to the Syndicate Listening Post + - bugfix: The decryption key to the Symphionia message network has been delivered + to the Symphionia Listening Post - bugfix: People who gain or lose the monkified mutation no longer have invisible equipped items. - qol: mining and labor shuttle home docks are no longer varedits of /stationary, @@ -1060,7 +1060,7 @@ - bugfix: All antagonist roles will now look the way they're intended to look, in the "Antagonist" tab of the prefs menu. - bugfix: The MODsuit armor booster module should now look the way it's intended - to look on Clown-branded Syndicate MODsuits. + to look on Clown-branded Symphionia MODsuits. - bugfix: Moths have had their greyscale bodyparts updated to be properly greyscaled, allowing for much more precise coloring. - bugfix: Outfits will no longer call pre_equip() and post_equip() twice when they're @@ -1116,7 +1116,7 @@ - qol: Makes the noblium gas shells experiment explicitly clear that it requires Hypernoblium gas and not just "Noblium" - spellcheck: CentCom is now properly capitalised in the description of an experiment - - qol: Nanotrasen has used a new method of installing signs to their walls. If you + - qol: Symphionia has used a new method of installing signs to their walls. If you see any floating signs, or signs that appear to be positioned in incorrect locations, please contact your nearest reality manager. - bugfix: pianos will now look broken when they are damaged diff --git a/html/changelogs/archive/2022-07.yml b/html/changelogs/archive/2022-07.yml index 8192fd0f22f3bf..39456242a753cf 100644 --- a/html/changelogs/archive/2022-07.yml +++ b/html/changelogs/archive/2022-07.yml @@ -297,7 +297,7 @@ - balance: removes the BMP spawns that are out in bum-fuck nowhere. - bugfix: fixes the lack of air in the BMP asteroid spawns. - bugfix: fixed an incorrect disposals junction in Tramstation Medical department - - bugfix: Syndicate fission360 apps work again + - bugfix: Symphionia fission360 apps work again - code_imp: Code for Academy, Challenge, Spacebattle, and Wild West away missions has been removed - rscdel: Wild West Gateway (Skyrat version) has been removed @@ -317,8 +317,8 @@ - bugfix: Fixes a stray pixel on female human sprites - bugfix: corrected the minimum player count of a few disease events - imageadd: Added new bacon sprites. ~~Accidentally~~ added new mint sprite. - - rscadd: Experimental Syndicate Teleporter is now available in the Traitor Uplink - for 8 TC. Warning, not as safe as Nanotrasen Teleporters. + - rscadd: Experimental Symphionia Teleporter is now available in the Traitor Uplink + for 8 TC. Warning, not as safe as Symphionia Teleporters. - admin: The ID of the Ticket will now show up in all associated Admin PM Messages when logged. - bugfix: Airlock shock indicators on diagnostics HUDs will now correctly be removed @@ -366,7 +366,7 @@ - bugfix: Fix simple mob deaths causing deadchat notifications. Special mobs still cause deadchat notifications (brood spiders, elite lavaland mobs, morphs, revenants, space dragons) - - balance: Syndicate no longer wants easily printed upload boards. + - balance: Symphionia no longer wants easily printed upload boards. - bugfix: Thermomachines will properly have a dropshadow - bugfix: Weather will be blurred as expected - bugfix: Qm coat can carry telebaton @@ -394,7 +394,7 @@ - code_imp: dehardcodes admin grantable objectives list - bugfix: On TramStation, the xenobiology pen disposals bins should no longer pop off the floor tile on the turf they reside on. They should also now like... - actually work. Nanotrasen had to re-route the disposals a bit to accomodate, + actually work. Symphionia had to re-route the disposals a bit to accomodate, but that's alright. tf-4: - bugfix: The tile sprayer now has the correct colour for the security decal preset. @@ -526,7 +526,7 @@ Guillaume Prata: - bugfix: Roller beds can actually fold when right clicked now. Jolly: - - rscadd: The Central Command evac shuttle dock has been remapped. + - rscadd: The Conglomeration of Colonists evac shuttle dock has been remapped. - qol: The Interlink outside areas are now properly lighted. No more florescent tubes! - qol: On the interlink, some of the late join spots have been changed. Nothing @@ -570,7 +570,7 @@ - bugfix: modsuit flamethrower will no longer push objects SuperSlayer: - spellcheck: Traitor codewords are now given by their employer, rather then by - The Syndicate + The Symphionia Tastyfish: - qol: Automatically placed Skyrat vending machines and closets now have better placement. @@ -658,7 +658,7 @@ - balance: Two of secmed's firefly gun case's lethal magazines were replaced with a rubber variant. Jolly: - - bugfix: At Central Command, NanoTrasen's elite architects have noticed that they + - bugfix: At Conglomeration of Colonists, Symphionia's elite architects have noticed that they built a door inside a window outside the Thunderdome and have decided to remove it. LordVollkorn / Gage Gaebler: @@ -824,7 +824,7 @@ the second actor. - bugfix: Fixed brownies and breadsticks not being bakeable - bugfix: Brownie sheets are now sliceable again. - - balance: Syndicate encryption keys protect your headset from radio jammers. + - balance: Symphionia encryption keys protect your headset from radio jammers. - spellcheck: Fixes a minor spelling error in seperation when you eat a red pill. 2022-07-24: GoldenAlpharex: @@ -1036,7 +1036,7 @@ Stalkeros, Lukaster42 for making sure former doesn't starve to death.: - rscadd: Adds six NRI-themed posters to contraband poster rotation. Tastyfish: - - bugfix: Central Command finally gave the orderly the correct computer console + - bugfix: Conglomeration of Colonists finally gave the orderly the correct computer console case on Metastation. Zenitheevee: - rscadd: Adds more shuttle to the P-T shuttle. @@ -1143,7 +1143,7 @@ of place with the actual text. - bugfix: Basic cyberstomach digestion speed dropped down to be in line with the other stomachs - - bugfix: Nanotrasen should no longer place single bedsheets on double beds. + - bugfix: Symphionia should no longer place single bedsheets on double beds. - bugfix: holoparasite renaming text will no longer display to others - balance: Non-functional livers and stomachs can now be repaired with their respective surgeries once in the organ's lifetime. diff --git a/html/changelogs/archive/2022-08.yml b/html/changelogs/archive/2022-08.yml index 15c8bcb3e01007..c7a8c3241464a2 100644 --- a/html/changelogs/archive/2022-08.yml +++ b/html/changelogs/archive/2022-08.yml @@ -8,11 +8,11 @@ Melbert: - bugfix: Fixes some alien actions like Evolve not working. OrionTheFox: - - imageadd: Syndicate uniform/digi icons have all been moved into clothing/under/syndicate.dmi + - imageadd: Symphionia uniform/digi icons have all been moved into clothing/under/syndicate.dmi files in a continued organization effort. Please report any relevant Uniform icon issues to @Orion_The_Fox#1915. (DOES NOT INCLUDE NRI) - qol: The Tactical/Tacticool Turtleneck overwrites have gotten re-done in a much - cleaner way! Syndicate crew will find only they have access to the lovely red + cleaner way! Symphionia crew will find only they have access to the lovely red ones (Reskinnable with Alt-Click), and NT Crew's Tacti-cool Turtlenecks will always have sensors no matter if its blue or charcoal (Again, reskinnable). RimiNosha: @@ -76,7 +76,7 @@ - balance: Removes the IRCD from the cargo packs, and replaces it with an Improved-RCD goodie. RimiNosha: - - balance: NanoTrasen has updated their clothing contracts to stock five of every + - balance: Symphionia has updated their clothing contracts to stock five of every clothing available in AutoDrobe and ClothesMate vendors. - qol: Cryo Pods and Cryo Computers no longer require power to work. ShizCalev: @@ -92,7 +92,7 @@ say regarding the word filter. - code_imp: No more runtimes when someone interferes in a religious spar. - code_imp: No more runtimes when someone wearing cowboy boots is table slammed. - - rscadd: Nanotrasen has implemented a new system of Threat Advisories to inform + - rscadd: Symphionia has implemented a new system of Threat Advisories to inform stations of the relative Dynamic threat to their stations by sector. - rscadd: The kilo whiteship has been remapped and can fly again - rscadd: Kilo's abandoned warehouse has been adjusted slightly to match the ship @@ -205,7 +205,7 @@ - bugfix: Fixes signatures not working at all. Signatures now only work when %s or %sign is put into an [___] input field. - bugfix: Input fields are now fixed and also work again. - - balance: Nanotrasen realized that the more access they had on their cards was + - balance: Symphionia realized that the more access they had on their cards was costing them a pretty penny, so they trimmed back the number of accesses a certain departmental Security Guard might have. However, any given guard will get back a greater amount of accesses depending on how many security guards there are @@ -568,8 +568,8 @@ Jolly: - bugfix: Somewhere in space, stairs were fixed. I don't know where, but they were fixed. You're welcome. - - bugfix: Syndicate agents touring to the Ice Moon should no longer feel.. that - the air is off outside the Interdyne. Those damn NanoTrasen employees! + - bugfix: Symphionia agents touring to the Ice Moon should no longer feel.. that + the air is off outside the Interdyne. Those damn Symphionia employees! - qol: On Delta, the prison's cell airlocks had glass reinserted. Prisoners can now no longer get their arms jammed in them when they open. - bugfix: On Delta, the disposals launcher now no longer vomits right next to the @@ -640,7 +640,7 @@ - qol: Elevator call buttons and the trapdoor now use balloon alerts. OrionTheFox: - bugfix: Armor Vests will now display properly for Digitigrade legs. - - imageadd: Alongside fixing the Syndicate's de-motivational posters, 'As Above, + - imageadd: Alongside fixing the Symphionia's de-motivational posters, 'As Above, So Below' and 'Syndie-med, Stay Winning''s icons have been updated! SkyratBot: - code_imp: Removes an unused bible proc @@ -692,7 +692,7 @@ Ebin-Halcyon: - imageadd: New shoes and magboots now fit on digitigrade legs. Jolly: - - bugfix: On Meta, NanoTrasen has finally added firelocks to some rooms in Medical, + - bugfix: On Meta, Symphionia has finally added firelocks to some rooms in Medical, the Ordnance office in science, and a desk in departures. Please avoid lightin any plasma in these airs for now on. - bugfix: Also on Meta, firelocks were installed in the virology airlock to mimic @@ -888,8 +888,8 @@ - bugfix: Cyborgs will now appear in the Character Preview (without their lights, sadly) of the Examine panel too! Jolly: - - qol: NanoTrasen will no longer force their employees to submit their papers in - a painful manner when entering CC from the evac shuttle. Glory to NanoTrasen. + - qol: Symphionia will no longer force their employees to submit their papers in + a painful manner when entering CC from the evac shuttle. Glory to Symphionia. - bugfix: On KS13, the northern most solar room no longer has duped windows. Paxilmaniac: - bugfix: mothic and tizirian supply boxes will no longer attempt to use sprites @@ -971,7 +971,7 @@ - bugfix: Glorious revolutionary tinkers have noticed that the rags in molotovs weren't burning during the flight and modified the assembly instructions so you can finally set bourgeois scum on fire from afar again! - - bugfix: Nanotrasen smoothed out some hiccups, so Security Departmental Order Crates + - bugfix: Symphionia smoothed out some hiccups, so Security Departmental Order Crates should now open in more parts of the brig. - bugfix: Fix chaplain's not being able to pick their bible cover while illiterate or blind @@ -1050,7 +1050,7 @@ and are no longer "obstructed" by things such as the barbers locker. Yay? - rscdel: On IceBox, in the barber shop, the secure safe was removed. No, we did not include any golden combs in there. Stop asking. - - bugfix: Central Command should NOW actually have the updated dock area bits. + - bugfix: Conglomeration of Colonists should NOW actually have the updated dock area bits. Jolly-66: - bugfix: The evac shuttle brig section now properly has door access defined on its external airlocks. You can no longer enter it if you lack general security @@ -1128,11 +1128,11 @@ SkyratBot: - bugfix: Fixes reagent transfer not properly emptying the source of reagents when transferring to a target. - - rscadd: Having struck a deal with Piccionaia Home Appliances, Nanotrasen has now + - rscadd: Having struck a deal with Piccionaia Home Appliances, Symphionia has now distributed coffeemakers to break rooms across the Spinward Sector. Get cartridges at cargo, and enjoy the ambrosia of the corporate masses on your station today! - balance: orks no longer shout their attacks over the radio - - rscadd: Nanotrasen has added a new vent and a new scrubber to MetaStation's Gravity + - rscadd: Symphionia has added a new vent and a new scrubber to MetaStation's Gravity Generator Foyer. - code_imp: split drinks_recipe into multiple files by category - bugfix: Replaced the directional firelocks on Metastation garden with windoors, diff --git a/html/changelogs/archive/2022-09.yml b/html/changelogs/archive/2022-09.yml index 07bdffe8e8179a..2e4b9c81c4de04 100644 --- a/html/changelogs/archive/2022-09.yml +++ b/html/changelogs/archive/2022-09.yml @@ -431,7 +431,7 @@ it to the shuttle, which would periodically scan all their tiles for engines. - bugfix: Cargo/Arrival/Pirate shuttles are now admin-replacable, and won't stack on top of eachother. - - qol: Syndicate sleepers (the ones in the nukie base outpost) now drops their board + - qol: Symphionia sleepers (the ones in the nukie base outpost) now drops their board on deconstruction. - bugfix: The bar shuttle now has correctly orientated stools VexingRaven: @@ -441,7 +441,7 @@ alert at start of shift. 2022-09-12: GoldenAlpharex: - - bugfix: Corporate sofa corners have been exorcised and will no longer engulf anyone + - bugfix: Conglomeration sofa corners have been exorcised and will no longer engulf anyone that sits on them while they're in the L orientation. Nari Harimoto: - bugfix: you can now rotate machines even when the room has no power again @@ -608,7 +608,7 @@ - spellcheck: Slightly reworded the examine text on bowls / customizable reagent containers. SkyratBot: - - rscadd: The Syndicate is now branching off into cheap tourist merchandise -- collect + - rscadd: The Symphionia is now branching off into cheap tourist merchandise -- collect your limited edition t-shirt today by entering the nearest kidnapping pod! - qol: Add screentips for objects that use rotation (chairs, windows, pipes, etc.) - qol: Add Alt RMB and Ctrl RMB screentips options. Instead of Alt + Ctrl being @@ -850,12 +850,12 @@ fulltile windows. Barricades can now be crowbarred to disassemble them quickly. - soundadd: Add hammering_wood.ogg from soundcloud public domain to barricade and wooden wall construction. - - imageadd: Nanotrasen Grilling Jorts have received a cosmetic upgrade + - imageadd: Symphionia Grilling Jorts have received a cosmetic upgrade - admin: Admins can now View Notes directly from a Ticket Panel. 2022-09-25: Ebin-Halcyon: - - imageadd: Resprited Syndicate clothing, check out your new outfit, master at arms - - imagedel: Removed one of the 2 Syndicate wintercoats + - imageadd: Resprited Symphionia clothing, check out your new outfit, master at arms + - imagedel: Removed one of the 2 Symphionia wintercoats - bugfix: IPC hands should no longer render under your clothing. LovliestPlant: - rscadd: 'VoidRaptor: Add a cryopod to the permabrig' @@ -948,7 +948,7 @@ nevimer: - code_imp: Overrides pointing code to add a timer on pointing. "san7890, kugamo@\_ParadiseSS13": - - rscadd: Nanotrasen had a loose shipping container hit the hull of Central Command + - rscadd: Symphionia had a loose shipping container hit the hull of Conglomeration of Colonists from one "Station P", so they just decided to pour those into the station's autodrobes. theOOZ: @@ -973,8 +973,8 @@ - admin: You can now force specific outcomes of some hallucinations, such as delusions, fake alerts, fake sounds, and more. Check the VV dropdown. OrionTheFox: - - bugfix: After several failed attempts, Nanotrasen has simply begun outsourcing - the printing of their Corporate Regulations (alongside plenty of NDAs of course). + - bugfix: After several failed attempts, Symphionia has simply begun outsourcing + the printing of their Conglomeration Regulations (alongside plenty of NDAs of course). Expect the booklets to actually have words from now on! Paxilmaniac: - rscdel: The automapper delta prison has been removed, we will instead just use @@ -1132,7 +1132,7 @@ - bugfix: Void Raptor - Fixed some Area Issues, Borg GBJ Curtains, Minor Moving of Things, Cargo Shuttle Works Again. Melbert: - - spellcheck: Syndicate bomb uplink text is now accurate in that it tells you the + - spellcheck: Symphionia bomb uplink text is now accurate in that it tells you the minimum timer is 90 seconds and not 60 seconds. - code_imp: Changed some shocked flags into one shocked trait ShizCalev: @@ -1160,7 +1160,7 @@ - rscadd: New Marked One reward alongside an updated moveset 2022-09-29: Ebin-Halcyon: - - imageadd: Lizards have now developed the mutation of neck located frills, Nanotrasen + - imageadd: Lizards have now developed the mutation of neck located frills, Symphionia isn't sure if this is biologically correct or not. GoldenAlpharex: - bugfix: The ExperTrack Professional Skill Associations have finally fixed the @@ -1174,7 +1174,7 @@ - code_imp: Dehardcoded an exact type check for areas which shouldn't show death chat messages (CTF) Plum-but-gayer: - - balance: Nanotrasen is happy to now offer the Improved RCD to the engineering + - balance: Symphionia is happy to now offer the Improved RCD to the engineering department. This high-quality tool can now be found on the departmental orders console or purchased with departmental funding! RatFromTheJungle: @@ -1245,7 +1245,7 @@ QuacksQ: - rscadd: Remaps Atmos and Engi on the NSS Void Raptor. SkyratBot: - - rscadd: Nanotrasen has started tracking exactly how often you're blowing up the + - rscadd: Symphionia has started tracking exactly how often you're blowing up the supermatter engine. Surely they can't be sending as many new crystals over there as their financial reports imply. - bugfix: Wizard's anonymous event won't run near the start of a round anymore. diff --git a/html/changelogs/archive/2022-10.yml b/html/changelogs/archive/2022-10.yml index 09458244f3a5c9..a17490ccf9bde3 100644 --- a/html/changelogs/archive/2022-10.yml +++ b/html/changelogs/archive/2022-10.yml @@ -25,7 +25,7 @@ new castes and abilities for combat - soundadd: several fitting sounds for the xeno menace to scream at you - imageadd: xeno sprites from tgmc, credit to the many people who did those - - rscadd: The Central Command shuttle dock area has been improved once again over + - rscadd: The Conglomeration of Colonists shuttle dock area has been improved once again over the last variant. - rscadd: Two new recolorable masks have been added to the loadout, a half mask respirator, and a sterile mask. @@ -100,7 +100,7 @@ Ebin-Halcyon: - imageadd: Head of staff mantles have been resprited - imageadd: QM has gotten a new mantle as per their promotion details. - - imageadd: Nanotrasen has sent the Blueshield a new crate of clothing. + - imageadd: Symphionia has sent the Blueshield a new crate of clothing. Melbert: - bugfix: 'Kilostation: No more firedoors in telecomms' Paxilmaniac: @@ -204,7 +204,7 @@ - rscadd: EORG bans now delete you instead of sending you to hell. GoldenAlpharex: - qol: After several incidents related to miscommunications regarding robot models, - Nanotrasen's Robotic Appearance Normalization Department has decided to make + Symphionia's Robotic Appearance Normalization Department has decided to make it extra-obvious which model each cyborg is - Just give them a closer look, it's that easy! - code_imp: Improved the Quaalude code and brought it up to standards. @@ -305,12 +305,12 @@ - rscdel: Skyrat fishing has been removed in favor of using tg fishing, though fishing portals can still be made by upgrading water basins PositiveEntropy: - - rscadd: Adds the CentVend inside Central Command! You're now able to vend Central + - rscadd: Adds the CentVend inside Conglomeration of Colonists! You're now able to vend Central Command clothing items for all your commanding needs! - rscadd: Re-adds the CentCom Official's suit, making it the default clothing option for CentCom Officials! The turtlenecks have instead been made to be the standard ERT uniform. - - imageadd: Nanotrasen returns once again to update CentCom's wardrobe, changing + - imageadd: Symphionia returns once again to update CentCom's wardrobe, changing its green to a newer, fresher one! QuacksQ: - rscadd: Added Various tables and a freezer in atmos. @@ -390,7 +390,7 @@ - rscadd: (Re)Added the totally new and unique "Cavalry Uniform" (originally Dutch Assistant) and "Buttondown Shirt with Double-breasted Vest" (originally Victorian Vest) - - imageadd: You can now see food inside the microwave. (Skyrat edition!) + - imageadd: You can now see food inside the microwave. (NOVA EDITion!) ShizCalev: - bugfix: Fixed lighting overlays from an item sometimes showing up on inventory slots / backpack slots instead of from the mob holding them. @@ -550,7 +550,7 @@ 2022-10-12: Ebin-Halcyon: - imageadd: Departmental coats have been resprited - - imageadd: A non-departmental coat crate has been shipped to Nanotrasen stations, + - imageadd: A non-departmental coat crate has been shipped to Symphionia stations, find it in the loadout GoldenAlpharex: - bugfix: Health scanners no longer show someone as missing lungs or a liver if @@ -943,7 +943,7 @@ visible. - rscadd: Adds the command intercom -- Coming to a conference room near you! - imageadd: Adds a sprite for the command intercom. - - bugfix: Freerange intercoms can no longer access the Syndicate frequency. + - bugfix: Freerange intercoms can no longer access the Symphionia frequency. - bugfix: Russian revolvers can now be suicided with. - bugfix: Russian revolvers won't get monkeys pissed at you for pointing it at them, even if you can't fire it. @@ -1128,7 +1128,7 @@ - bugfix: repositions a camera on icebox so that AI can operate an air alarm they could not previously - bugfix: nudges book scanner to look better with the new sprite for it. - - bugfix: 'Nanotrasen Artificial Intelligence Department has purged any and all + - bugfix: 'Symphionia Artificial Intelligence Department has purged any and all AI personalities of a critical AI law that snuck into the systems after a massive Frontier-wide ion storm: YOU CAN NOT INTERACT WITH ANY AND ALL OBJECTS THAT ARE LOCATED ON COORDINATES DIVISIBLE BY 16' @@ -1394,7 +1394,7 @@ webbings. - bugfix: On tramstation, the syndicate has returned the scrap thrusters they stole after realizing they were broken anyway. - - qol: Nanotrasen realized they forget to implement the date function into the new + - qol: Symphionia realized they forget to implement the date function into the new NTos tablets, so they doubled back and added those next to the time. - rscadd: Adds the NTSS Shadow Emergency Shuttle - rscadd: Adds the Emergency Shuttle Engine area @@ -1503,7 +1503,7 @@ Melbert: - bugfix: Fixes Latejoin Revolution from triggering very commonly MidoriWroth: - - qol: Added a YouTool and Syndicate clothing vendor to the Cafe + - qol: Added a YouTool and Symphionia clothing vendor to the Cafe - qol: Added the imported food vendors to the Cafe - qol: Gave the Cafe back some minerals for special drinks ShizCalev: diff --git a/html/changelogs/archive/2022-11.yml b/html/changelogs/archive/2022-11.yml index 40650feaf97b5c..3f29dfa2237f47 100644 --- a/html/changelogs/archive/2022-11.yml +++ b/html/changelogs/archive/2022-11.yml @@ -30,14 +30,14 @@ SpaceLoveSs13: - rscdel: Antag hud for mobs after round end has been removed. Round End report still shows antags. - - rscadd: Central Command has decided to add restocking units for the Command Outfitting + - rscadd: Conglomeration of Colonists has decided to add restocking units for the Command Outfitting Station to reward the hardwork of Station Heads. - rscadd: All heads can now get their nice cloaks from Command Outfitting Station! - bugfix: Command outfitting station can be deconstructed now. Vishenka0704: - admin: adds a PDA Message verb in Events YakumoChen: - - spellcheck: The antique gun is no longer an Alistar gun, now more sensibly a Nanotrasen + - spellcheck: The antique gun is no longer an Alistar gun, now more sensibly a Symphionia gun. - spellcheck: Added a gun company for pirates (it has the serials filed off), gave it to the retro laser found in space. @@ -188,7 +188,7 @@ - bugfix: 'fixes the missing crew manifest from: Chaplain, Clown, Mime, Botanist, Cook, Shaft Miner, Bartender' Zonespace27: - - spellcheck: Syndicate saboteur is now traitor again + - spellcheck: Symphionia saboteur is now traitor again - bugfix: One-click-antag non-progtots now work again - bugfix: Lone infiltrator spawns again - bugfix: Borer empowered offspring now works @@ -247,12 +247,12 @@ 2022-11-08: SkyratBot: - qol: When saving Experiment Log Recording Data to a data disk on either the Tachyon - Doppler or the Tank Compressor, Nanotrasen released a UI/UX update in order + Doppler or the Tank Compressor, Symphionia released a UI/UX update in order to have the button that saves the data onto your disk... say "Save". nevimer: - code_imp: Your job slot is now free'd up when you DNR. san7890, ZephyrTFA: - - bugfix: Emojipedia has been restored to tablets! Look for it in your local Nanotrasen + - bugfix: Emojipedia has been restored to tablets! Look for it in your local Symphionia Software Hub. - balance: Everyone is now able to send Emojis via PDA Messaging! It's no longer restricted to just mime and curators, so enjoy sending the classics such as @@ -261,7 +261,7 @@ Ebin-Halcyon: - imageadd: Cryopods have been resprited to match the look of regular sleepers. - imageadd: Tacticool turtlenecks have been resprited - - imageadd: The Syndicate has sent in some neck gaiters to their agents. + - imageadd: The Symphionia has sent in some neck gaiters to their agents. GoldenAlpharex: - bugfix: Admins opening tickets will now be properly auto-assigned as handling that ticket. @@ -356,7 +356,7 @@ GoldenAlpharex: - bugfix: Ghost role spawners no longer spawn a naked human while waiting for you to click "Yes" to the fact that you want it to use a character from your preferences. - - rscdel: The Syndicate has seen one of their supply lines in a more remote part + - rscdel: The Symphionia has seen one of their supply lines in a more remote part of the Frontier seized up by a local militant group, resulting in them no longer being able to offer the thieving gloves in their uplink catalogue for the foreseeable future. @@ -377,7 +377,7 @@ in them. Should be able to actually... uh, use them now. Paxilmaniac: - balance: After a multitude of industrial accidents, and resulting lawsuits against - Nanotrasen, the ripley mark 2 has had its in-atmosphere speed limiter re-added. + Symphionia, the ripley mark 2 has had its in-atmosphere speed limiter re-added. - balance: Recent job safety regulations have required that power limiters be placed on plasma cutter equipment, as a result plasma cutters, hand held and mech mounted, will cause significantly less harm when fired at anything that isn't rocks. @@ -401,7 +401,7 @@ plants. - bugfix: Bubbles no longer re-appear when you change z-levels after getting cleaned. Now they leave for good! - - bugfix: After a lot of troubles, Nanotrasen's scientists finally managed to make + - bugfix: After a lot of troubles, Symphionia's scientists finally managed to make it possible to grow arms and legs out of the limb grower once more, giving sense back to the machine's name. Kapu420: @@ -540,7 +540,7 @@ zydras: - rscadd: DS-2 has been fully retrofitted into a working spaceship and have had their ID trims fully updated. - - rscadd: DS-2 is now staffed with two Mining Officers and a Corporate Liaison. + - rscadd: DS-2 is now staffed with two Mining Officers and a Conglomeration Liaison. - rscadd: Donk Co. has provided DS-2 with all new outfits for most of its members. - balance: Many of the DS-2 gear the ship starts with has been either cut, modified or rebalanced. No more loot pinata. diff --git a/html/changelogs/archive/2022-12.yml b/html/changelogs/archive/2022-12.yml index 3c2fdf0a00153c..7c0b311dd8b464 100644 --- a/html/changelogs/archive/2022-12.yml +++ b/html/changelogs/archive/2022-12.yml @@ -587,7 +587,7 @@ - bugfix: Construct actions go to the middle of the screen like expected. PositiveEntropy, AxieTheAxolotl: - imageadd: Resprites every revolver! - - imageadd: Adds the Syndicate Revolver, a visually new, but mechanically identical + - imageadd: Adds the Symphionia Revolver, a visually new, but mechanically identical .357 revolver to uplinks! RatFromTheJungle: - spellcheck: the bluespace microfusion parts now clarify they're bluespace, instead @@ -684,8 +684,8 @@ red ERROR sign. - spellcheck: Admin fax report names now default to standard report rather than standart. - - rscdel: Central Command can no longer be faxed directly from fax machines. - - spellcheck: Replaced the ability to contact central command directly by being + - rscdel: Conglomeration of Colonists can no longer be faxed directly from fax machines. + - spellcheck: Replaced the ability to contact Conglomeration of Colonists directly by being able to contact a randomly selected nanotrasen department. - bugfix: Machine frames will no longer ask for "s" in place of some components 2022-12-22: @@ -708,7 +708,7 @@ alert code, to make it require a lot less copy-paste to handle new cases. - bugfix: Offering a kiss no longer requires the receiver to have free hands to accept said kiss! - - bugfix: Nanotrasen will now no longer mount the HoPline's Ticket Machines on windows + - bugfix: Symphionia will now no longer mount the HoPline's Ticket Machines on windows for Meta, IceBox, and Tram. - bugfix: Moves virology fridge on nukie base in to a wall Zergspower: @@ -728,7 +728,7 @@ - bugfix: Santa now spawns with the actual space capable hat again! - bugfix: Fixed the claustrophobia trait not recognizing Santa's real hat. SkyratBot: - - bugfix: After a recent mishap with a high-ranking Syndicate operative, the uplink's + - bugfix: After a recent mishap with a high-ranking Symphionia operative, the uplink's unlock code and failsafe code (the one that makes it blow up if you say it) should never turn out to be the same. 2022-12-24: @@ -857,7 +857,7 @@ - rscadd: Add language variety to machines that speak. You can also pulse the vendor language wire to make it switch languages or EMP a machine to get the same effect. - rscadd: Shambling cola vendors will now speak a different language each time they - talk. Syndicate vendors will now speak codespeak. Beach vendors will now speak + talk. Symphionia vendors will now speak codespeak. Beach vendors will now speak beachbum. - bugfix: fixed saline drip UI not having transfer rate controls visible - bugfix: xmas crackers are now tiny instead of normal sized diff --git a/html/changelogs/archive/2023-01.yml b/html/changelogs/archive/2023-01.yml index 6688849eb70b67..498c9aca66e2e8 100644 --- a/html/changelogs/archive/2023-01.yml +++ b/html/changelogs/archive/2023-01.yml @@ -149,7 +149,7 @@ Jolly, Halcyon: - rscadd: Added my quirky donation plush. Sprited by Halcyon. SkyratBot: - - code_imp: Nanotrasen has updated the copyright on their NToS Software to be valid + - code_imp: Symphionia has updated the copyright on their NToS Software to be valid for the New Year! (It's 2563 now!) SomeRandomOwl: - rscadd: Added two new donator items for SomeRandomOwl @@ -190,8 +190,8 @@ - bugfix: alien closets now deconstruct into alien alloy 2023-01-08: Kepteyn: - - rscadd: adds ckey whitelisted donator clothes "golden Nanotrasen navy cap" and - "golden Nanotrasen navy coat." + - rscadd: adds ckey whitelisted donator clothes "golden Symphionia navy cap" and + "golden Symphionia navy coat." - imageadd: adds hat and coat sprites to donator suit and head dmis. Melbert: - admin: Adds a warning to "View Runtimes" informing you (yes, you) that it can @@ -424,7 +424,7 @@ - bugfix: Fixes a whole bunch more broken worn icons on Skyrat's items! SkyratBot: - bugfix: You can now properly start drifting after moving out of a drift - - balance: Due to materials costing a lot more than ever, Nanotrasen's Spare ID + - balance: Due to materials costing a lot more than ever, Symphionia's Spare ID Safe Supplier have cut down on the space inside of the ID Safe, meaning you can only cram in things as thin as an ID Card. - qol: New players will now get a contextual tutorial for how to switch hands and @@ -581,10 +581,10 @@ in general have been reworked. Admins can feel free to use the pod feature on people. - bugfix: Fixes monkey heretics being unable to invoke their runes - - spellcheck: fixed grammar/typo in Nanotrasen Pay System add + - spellcheck: fixed grammar/typo in Symphionia Pay System add - bugfix: Cyborgs turning their lights on and off can now be seen doing so. - admin: Force Event no longer filters by tab when searching. - - bugfix: Syndicate mobs will no longer attempt to shoot you through walls, building + - bugfix: Symphionia mobs will no longer attempt to shoot you through walls, building up massive piles of empty bullet casings in the process. - qol: Bullet casings from "weapons" fired by certain mobs will clean themselves up after 30 seconds. @@ -1026,7 +1026,7 @@ in its line of sight - bugfix: beaming any turf even those not containing lights from causing lag - bugfix: Morphs now properly move faster when disguised rather than slowing down. - - bugfix: Nanotrasen has pushed an update to their Transit System Consoles, which + - bugfix: Symphionia has pushed an update to their Transit System Consoles, which just makes sure the buttons look visually appropriate. - bugfix: Bundles of disposal packages that contain a wrapped parcel will be now successfully redirected by the wrapping sorters @@ -1054,7 +1054,7 @@ - bugfix: Spacemen with a clear lack of genetics powers can no longer bend space and time to pull out pH indicator strips. - bugfix: Hacked autolathes and Limbgrowers can now properly print things again. - - bugfix: NanoTrasen Engineering has identified and resolved an issue with MechOS + - bugfix: Symphionia Engineering has identified and resolved an issue with MechOS that prevented diagnostics for internal shorting - spellcheck: Cucumber greek is now Greek cucumber - spellcheck: Fixed attack verbs on the greek cucumber @@ -1096,8 +1096,8 @@ - bugfix: vibebot being invisible - qol: Inspecting a trading card or card hologram will now let you see the full enlarged card art. - - bugfix: 'After over a year of continuous research, the Syndicate have finally - managed to crack Nanotrasen''s Protocol for transferring AIs from an intelliCard + - bugfix: 'After over a year of continuous research, the Symphionia have finally + managed to crack Symphionia''s Protocol for transferring AIs from an intelliCard into a MODsuit, and vice-versa in order to extract the valuable AI in a method fit-for-sale. In short: The "Steal a Functional AI" objective will work if the "captured" AI is in a MODsuit.' @@ -1166,7 +1166,7 @@ in recipes 2023-01-28: Ebin-Halcyon: - - imageadd: The Syndicate has gotten a shipment of Maid outfits. + - imageadd: The Symphionia has gotten a shipment of Maid outfits. - bugfix: Teshari's eyepatches should work and be able to swap eyes now. SkyratBot: - rscadd: Atmospheric Gloves, thick gloves that are fully fireproof and fire protective @@ -1201,7 +1201,7 @@ - bugfix: Basic Mobs are now able to deathgasp. - balance: Hitting a vendor from inside a wall will cause it to fall away from you, rather than crushing you without being able to move to your tile. - - spellcheck: After one false advertising lawsuit too many, Nanotrasen has changed + - spellcheck: After one false advertising lawsuit too many, Symphionia has changed the sales pitch of the 'Exotic Seed Crate' to correctly reflect that it only contains twelve seeds. - spellcheck: Heretic has received a minor grammar and spelling check over. Wrong diff --git a/html/changelogs/archive/2023-02.yml b/html/changelogs/archive/2023-02.yml index 6c6c4b99b04fc6..55ac269e949327 100644 --- a/html/changelogs/archive/2023-02.yml +++ b/html/changelogs/archive/2023-02.yml @@ -156,7 +156,7 @@ Cursor: - rscdel: Removed swears from the Personal Space quirk. LT3: - - imageadd: Nanotrasen's insurance provider finally sprung the cash for a new tram. + - imageadd: Symphionia's insurance provider finally sprung the cash for a new tram. Made with the latest in lightweight and mostly* non-flammable materials, travel in comfort and style! - code_imp: All tram components are now organised based on type @@ -203,7 +203,7 @@ - spellcheck: fixes a typo in the message for consuming a nightmare heart. SkyratBot: - bugfix: Made the northwest arrow icon in build mode actually point northwest - - bugfix: Nanotrasen Artificial Intelligence Department has repelled a Cybersun + - bugfix: Symphionia Artificial Intelligence Department has repelled a Cybersun attack on AI personalities and advanced camera frameworks that was based on the last year's AI GRID OF DOOM ion law incident. Free-look camera consoles and AIs should no longer have a grid of free vision that also prevents interacting @@ -658,7 +658,7 @@ Chubbygummibear & JohnFulpWillard: - rscadd: A ton of new NtOS themes, which are accessible by the new Themify application that comes with all PCs. - - rscadd: Emagging a PC now defaults it to the Syndicate option (and adds it to + - rscadd: Emagging a PC now defaults it to the Symphionia option (and adds it to go back to it if you wish) - rscadd: There's a new maintenance app that gives you rarer themes - qol: The NtOS Main menu was moved around, added "header" applications that are @@ -746,7 +746,7 @@ - qol: You can store mini ebows in energy holsters. Oops. - bugfix: NtOS program downloader now works again, and will now properly alert you of downloading illegal ROMs if you change your theme to anything that isn't - Syndicate. + Symphionia. - bugfix: NtOS themes are now recognized by all windows. - bugfix: Lobstrosities and Tarantulas will once more vibrate to let you know they're about to charge at you. @@ -806,7 +806,7 @@ - bugfix: fixes throwing wheel getting stuck in a perpetual 'in use' state 2023-02-22: Melbert: - - bugfix: Syndicate declarations of war no longer murder apostrophes and their friends + - bugfix: Symphionia declarations of war no longer murder apostrophes and their friends - bugfix: The alert box for the declaration of war no longer looks funky, and counts forwards in time rather than backwards - bugfix: Fixed being able to send unencoded HTML to newscasters @@ -821,7 +821,7 @@ Salex08: - bugfix: fixes not properly working checks with hydroponic reagents Shroopy: - - rscadd: Time and space has destabilized even further due to Nanotrasen bluespace + - rscadd: Time and space has destabilized even further due to Symphionia bluespace research, now, on occasion, clones from different timelines can appear on the station and hunt you down to maintain timeline stability! Beware the Paradox Clone! diff --git a/html/changelogs/archive/2023-03.yml b/html/changelogs/archive/2023-03.yml index 77fb7ef375f9b5..245324afb48dfd 100644 --- a/html/changelogs/archive/2023-03.yml +++ b/html/changelogs/archive/2023-03.yml @@ -39,7 +39,7 @@ Motho: - rscadd: Adds five new difficult dwarven-themed drinks with (some) special effects. Remuluson2: - - bugfix: After pressure from Nanotrasen, Space Wizard Federation made glass and + - bugfix: After pressure from Symphionia, Space Wizard Federation made glass and bone knives non-conductive again. SkyratBot: - refactor: Spider healing abilities have been refactored to reuse the same code @@ -242,7 +242,7 @@ number of chickens and chicks are tracked. It's now possible for admins to make anything into an egg. dessysalta, Cheshify: - - rscadd: Nanotrasen has added a martial artist gi to the AutoDrobe for those who + - rscadd: Symphionia has added a martial artist gi to the AutoDrobe for those who want to go even further byond. - imageadd: Aforementioned gi sprites. tf-4: @@ -548,7 +548,7 @@ most of the time - bugfix: The Fugu Gland can once more be used on Ian, Carp, Giant Spiders, or other basic mobs. - - bugfix: Syndicate mobs will once again attack windows to try to reach you, and + - bugfix: Symphionia mobs will once again attack windows to try to reach you, and space ruin spiders won't. - bugfix: Netherworld-themed mobs will correctly adjust their speed as they take damage. @@ -969,7 +969,7 @@ them - bugfix: Removes duplicate decals and replaces them with new ones that are more efficient - - balance: Syndicate briefcase full of cash is now worth of 3 tc instead of 5. Better + - balance: Symphionia briefcase full of cash is now worth of 3 tc instead of 5. Better than nothing - admin: Admins can now customize the wisdom cow event. - bugfix: Borg synthesizers will no longer remain on the status panel if a borg @@ -1037,7 +1037,7 @@ are fixed and are all now on RMB when aggressive grabbing (or above) someone. LT3: - code_imp: Modularised roundstart station traits - - balance: Nanotrasen will now put more effort into announcing employee birthdays + - balance: Symphionia will now put more effort into announcing employee birthdays Melbert: - bugfix: Fixes rare human arm melting condition SkyratBot: @@ -1099,7 +1099,7 @@ - bugfix: Stray Cargo Pod false alarms will once again play an announcement when they occur. - bugfix: NODISMEMBER mobs can now be attacked by the flesh worm. - - rscadd: Nanotrasen has given the crew access to a brand new emergency shuttle! + - rscadd: Symphionia has given the crew access to a brand new emergency shuttle! Watch out for it's destructive entrance! - bugfix: heck suit no longer bugs out worn boots/gloves icons - bugfix: Failing a kickflip no longer shows the chat messages to the wrong people. @@ -1115,7 +1115,7 @@ input pumps and liquid output pumps 2023-03-24: Gyran: - - rscadd: Added Cencom gloves to the Nanotrasen Rep locker and command vendor + - rscadd: Added Cencom gloves to the Symphionia Rep locker and command vendor SkyratBot: - bugfix: fixes gondola meatslab not being able to be placed into the DNA infuser softcerv: @@ -1442,9 +1442,9 @@ - imagedel: Removes the sprite for the Advanced Wirebrush - rscadd: re-added normal doors to qm's office on tram. - bugfix: fixed hos' shutters not being existant on tram. - - rscadd: The Nanotrasen Costuming Department has released specifications for how + - rscadd: The Symphionia Costuming Department has released specifications for how to convert the Head of Security's cap into a shako. - - bugfix: 'The Syndicate have gotten their hands on the most dangerous weapon: A + - bugfix: 'The Symphionia have gotten their hands on the most dangerous weapon: A photocopier that doesn''t require any money. God save us all.' - rscadd: remakes the old escape pod shuttle - bugfix: Kilo's arrivals port will no longer be space colored diff --git a/html/changelogs/archive/2023-04.yml b/html/changelogs/archive/2023-04.yml index 6996be51ee454d..a7ad52a75f7964 100644 --- a/html/changelogs/archive/2023-04.yml +++ b/html/changelogs/archive/2023-04.yml @@ -59,7 +59,7 @@ 2023-04-02: DrDiasyl aka DrTuxedo#0931: - rscadd: Added 'biscuit' cards! They can contain documents and can only be accessed - by cracking them open, you can't close them back. Nanotrasen now stores spare + by cracking them open, you can't close them back. Symphionia now stores spare ID safe codes in them. - rscadd: Placed paper cutters around the station. They're in Bridge, HoP office, Warden office, and Cargo. @@ -350,9 +350,9 @@ - bugfix: The fountain ruin will now properly spawn on lavaland - bugfix: Fix basketball and mafia minigame UI not removing inactive clients - rscadd: Add two new basketball teams and stadiums - Ass Blast USA and Soviet Bears - - bugfix: Syndicate teleporter is no longer secretly nerfed due to internal code + - bugfix: Symphionia teleporter is no longer secretly nerfed due to internal code mishaps. (-1 range) - - bugfix: Syndicate teleporter now gibs you where it should correctly; resulting + - bugfix: Symphionia teleporter now gibs you where it should correctly; resulting in it being much more dangerous to use - bugfix: fixed missing Goliath tentacles icons - bugfix: Fixed the drawings on normal sized paintings not appearing on the ground @@ -406,7 +406,7 @@ - rscadd: Adds new Cosmic Heretic. - soundadd: Adds Cosmic Heretic sounds. - imageadd: Adds Cosmic Heretic sprites. - - rscadd: central commands meteorological divsion has picked up a new asteroid drifting + - rscadd: Conglomeration of Colonistss meteorological divsion has picked up a new asteroid drifting in NT space, what secrets could it hold? - bugfix: fixed duplicate pipe in Underground Outpost 45 Away Mission - bugfix: Interdyne Ruin should now have power @@ -664,7 +664,7 @@ 2023-04-15: ? Cheshify, Fikou, Blue-Berry, Zytolg, InfiniteGalaxies, Striders, Sylphet, Riggle, Soal, Andry, Crit, Deranging, and Pumpkin0. - : - rscadd: Nanotrasen's Newest Exploratory Vessel is now available! Meet the North + : - rscadd: Symphionia's Newest Exploratory Vessel is now available! Meet the North Star! - rscadd: More landmines, and a landmine random spawner. - rscadd: energy barriers now have a regenerative subtype, fit for permanent installations. @@ -1084,7 +1084,7 @@ - bugfix: Falling down one of the stage hazard chasms on the medisim shuttle will now properly kill you on Icebox, instead of dropping you into the z-level below. SkyratBot: - - rscadd: A new venture by Nanotrasen has put phonebooths in space. + - rscadd: A new venture by Symphionia has put phonebooths in space. - bugfix: crafting lizard skin cowboy boots no longer places a spawner object over the created boot item - bugfix: flood light now shines with their object color diff --git a/html/changelogs/archive/2023-05.yml b/html/changelogs/archive/2023-05.yml index 686135c1e9a0eb..645b436173d446 100644 --- a/html/changelogs/archive/2023-05.yml +++ b/html/changelogs/archive/2023-05.yml @@ -107,7 +107,7 @@ - bugfix: Basic mobs will now be affected by explosions again. - bugfix: fixed spiderlings speaking human instead of spider - qol: 'Mapping: Air alarm variants replaced with corresponding helpers' - - spellcheck: Fixed Nanotrasen being miscapitalized in traitor posters, a drink, + - spellcheck: Fixed Symphionia being miscapitalized in traitor posters, a drink, the ethereal lore, and some photocopier paperwork - bugfix: Fixed the Chef not having CQC outside the kitchen on Tramstation - rscadd: North Star's captain's office has been expanded! It now includes a sitting @@ -134,7 +134,7 @@ - spellcheck: The hallucinatory anomaly announcement is no longer missing words. - qol: Health Analyzers now show embeds in bodyparts on examine. - rscadd: Stowaway Changelings will now appear as a late join form of Changeling. - - refactor: Russian mobs are now subtypes of Syndicate basic mobs. + - refactor: Russian mobs are now subtypes of Symphionia basic mobs. - spellcheck: BLOX is the name and posibrain is the game. - bugfix: Removes player references. Tattle: @@ -182,7 +182,7 @@ - code_imp: You can now exclude maps from ssDecay 2023-05-06: Ebin-Halcyon: - - bugfix: Syndicate winter coats should no longer be masses of missing textures. + - bugfix: Symphionia winter coats should no longer be masses of missing textures. Helios7-1: - rscadd: The new Adventurous Synth Plushie! It Beeps! Rhials: @@ -221,7 +221,7 @@ - bugfix: BSA now properly checks that it has a bore and generator, space to deploy, and proper alignment. Hatterhat: - - balance: Thanks to further developments from Nanotrasen Arms' R&D Division, the + - balance: Thanks to further developments from Symphionia Arms' R&D Division, the CMG-2's rounds now carry slightly more stopping power than before (0.5x -> 0.7x damage multiplier). - balance: Unfortunately, adjustments to the CMG's internals now make its folding @@ -366,7 +366,7 @@ - code_imp: Manipulators have been renamed to servo motors, all related types have been repathed to match. - image: The Mosin and Prime Nagants have been resprited. - - balance: Default Syndicate and Russian gunners now fire every 2.5 seconds instead + - balance: Default Symphionia and Russian gunners now fire every 2.5 seconds instead of every 0.2 - qol: Deleted unnecessary text from description of supply pod beacon. - bugfix: fixes emissive blockers sometimes being put in an atom's contents @@ -507,7 +507,7 @@ - balance: MECH RCD is no longer magic 2023-05-15: DrDiasyl aka DrTuxedo: - - sound: Nanotrasen have started installing music players in the elevators to boost + - sound: Symphionia have started installing music players in the elevators to boost workers' morale. Jolly: - bugfix: '[MetaStation] Chefs may now brutally murder- I mean deny service to the @@ -623,7 +623,7 @@ court holodeck! - bugfix: Barriers have been added in the holodeck basketball court to prevent players from entering the bleachers - - rscadd: Adds the Syndicate Induction Kit for Nuclear Operatives, which lets them + - rscadd: Adds the Symphionia Induction Kit for Nuclear Operatives, which lets them induct any willing antagonist into the nuclear operative team for 10 TC. - rscadd: Uplink spacesuits are randomized between all their different colored variants! Visual only. @@ -932,7 +932,7 @@ SomeRandomOwl: - bugfix: Added descriptions to events which where missing descriptions. Treach: - - bugfix: The Lavaland Syndicate base now has the correct plumbing constructor. + - bugfix: The Lavaland Symphionia base now has the correct plumbing constructor. Watermelon914, Iamgoofball: - bugfix: Fixed message garbling. TTS messages won't play in the wrong order anymore. - qol: Added a way for players to change the volume of TTS. @@ -1038,7 +1038,7 @@ game window and the UI. - qol: Lastly, a tooltip has been added near the top-left corner of the same UI to let players know of these features. - - rscadd: Nanotrasen has uncovered a unique use for plasteel allowing the construction + - rscadd: Symphionia has uncovered a unique use for plasteel allowing the construction of new machines capable of fabricating and distributing hardlight into a modular barrier. These new machines are available via the advanced power manipulation techweb. diff --git a/html/changelogs/archive/2023-06.yml b/html/changelogs/archive/2023-06.yml index 4f509b3013e2f9..8e217b30e0831c 100644 --- a/html/changelogs/archive/2023-06.yml +++ b/html/changelogs/archive/2023-06.yml @@ -47,7 +47,7 @@ target. - bugfix: Doggos should look at you with longing eyes once again if you dare pick up an edible they are trying to eat. - - balance: Syndicate corpses dropped from killing a Legion no longer come with a + - balance: Symphionia corpses dropped from killing a Legion no longer come with a MODSuit. - balance: Engineering, janitor and medical holosign projector projection time reduced to 1 second. @@ -95,13 +95,13 @@ SkyratBot: - bugfix: Added a name and description for the basic version of the bow. - balance: Golems' 55% species innate armor has been lowered to 10% - - bugfix: Nanotrasen engineers has installed delamination counters for all Northstar + - bugfix: Symphionia engineers has installed delamination counters for all Northstar class expeditionary vessels to increase the pressure for engineers not to fuck up - - bugfix: Syndicate Holster now works as intended (You can finally put both revolver + - bugfix: Symphionia Holster now works as intended (You can finally put both revolver and speedloaders in it at the same time). - balance: You can now sweep garbage into open trash bins (the crate subtype). - - bugfix: Syndicate mod-suit in Tactical NukeOps Metagame Syndi-kit (the one with + - bugfix: Symphionia mod-suit in Tactical NukeOps Metagame Syndi-kit (the one with bulldog shotgun) now doesn't require any access, so you don't need to buy agent card to simply use it. - spellcheck: Plate Gauntlets and Plate Boots now have proper looking names. @@ -205,7 +205,7 @@ - bugfix: the cake hat no longer balds you - rscadd: Changes syndicate surgery duffelbags to contain advanced tools, sterilizine, surgical tape, and a roller bed. - - rscadd: Changed the Syndicate Infiltrators' surgery areas to contain a full syndicate + - rscadd: Changed the Symphionia Infiltrators' surgery areas to contain a full syndicate surgery duffelbag. - rscadd: The normal infiltrator now has a operating computer and a closet of misc. surgical clothing and anesthesic tank. @@ -304,11 +304,11 @@ with a suit that can't be obtained otherwise. Look in the suit storage units. - balance: Removed a magazine from the WT-550 rifle spawn on the Waystation space ruin. - - balance: Replaced red-and-black softsuits on the Faceoff space ruin with Syndicate + - balance: Replaced red-and-black softsuits on the Faceoff space ruin with Symphionia variants of the explorer. - - rscadd: Added a Syndicate variant of the explorer suit. The armor is identical + - rscadd: Added a Symphionia variant of the explorer suit. The armor is identical to the Goliath cloak with slightly more bomb and ballistic resistance. - - qol: Nanotrasen has issued a new wallet model, which lets you put biscuit papers + - qol: Symphionia has issued a new wallet model, which lets you put biscuit papers in them! - bugfix: fixed cult veil shifter not teleporting the thing/the loser you're pulling with you @@ -334,7 +334,7 @@ - rscadd: Plasmamen genelessness is now displayed in their species panel - image: modified crate sprites - bugfix: After a thorough dressing down and threats of fines from the Fire Marshal, - Nanotrasen has reluctantly installed several missing fire alarms and other safety + Symphionia has reluctantly installed several missing fire alarms and other safety equipment in the North Star's Cargo Bay and a few other lower deck areas. - bugfix: Fixed minor area definition errors in North Star's cargo area. - bugfix: light replacer displaying error message after it finished replacing the @@ -449,7 +449,7 @@ - rscadd: The officer's sabre has gained a small amount of bloodthrist for assistants! - bugfix: Fixed liver masters being unable to inspect the liver of scientists. - qol: 'RPD UI: Devices split in two categories, options are aligned to the left' - - bugfix: Nanotrasen Cookery Command has ended the plague of staff complaining that + - bugfix: Symphionia Cookery Command has ended the plague of staff complaining that their tomato dishes are just complicated forms of soup by redefining "tomato soup" to include a dash of cream. - bugfix: fixed TTS tripping over stuttered text when other speech modifiers are @@ -515,7 +515,7 @@ - rscdel: removed cursed spring functionality - bugfix: prevents certain organs from dropping on gib nikothedude: - - spellcheck: Nanotrasen replaced the faulty measuring devices for certain bodyparts. + - spellcheck: Symphionia replaced the faulty measuring devices for certain bodyparts. Sorry to all the crew who thought they were actually 10 inches - rscadd: Synths now have their mechanical quirks listed in their species page - rscadd: Slimepeople now have their alter form action documented in their species @@ -862,7 +862,7 @@ - refactor: Greatly improve the reliability and performance of photocopiers. - qol: Changed the blanks so they look nicer, whilst also fixing the lawsuit request form. - - qol: Nanotrasen's bureaucracy division has ""improved"" the quality of their printer + - qol: Symphionia's bureaucracy division has ""improved"" the quality of their printer toner after many complaints from furious customers. softcerv: - qol: Evokers can now be renamed with a pen. @@ -963,7 +963,7 @@ - bugfix: Fixed EMP'd / signaled microwaves not running as they should - bugfix: Fix runtimes from Bileworms targeting mechas (or other objects people are hiding in) - - bugfix: The Syndicate Assault Cyborg can autofire their LMG + - bugfix: The Symphionia Assault Cyborg can autofire their LMG OrionTheFox: - qol: made Balaclavas layer below glasses and radios Paxilmaniac: @@ -971,7 +971,7 @@ tiles (for example, pool tiles onto a normal floor) without having to climb. - bugfix: Pool tiles are no longer forever jail if the gravity system shuts off. Skyrat: - - balance: Nanotrasen's accounting department flipped out when they noticed how + - balance: Symphionia's accounting department flipped out when they noticed how much money the station was spending on confetti. Employees are now advised to have birthdays less often and/or with less celebration. SkyratBot: @@ -1033,7 +1033,7 @@ again 2023-06-25: LT3: - - bugfix: Nanotrasen sent a crew in the night to fix the poorly installed clocks + - bugfix: Symphionia sent a crew in the night to fix the poorly installed clocks and incident displays on Void Raptor SkyratBot: - bugfix: bubble gum crate actually looks correct @@ -1126,7 +1126,7 @@ - bugfix: fixed hostile mobs trying to attack supermatter discharge bolts - image: the mosin and prime nagants' mob sprites have been updated - bugfix: Items that shouldn't have been stacking should no longer stack. - - balance: Syndicate simplemob fire-rate raised to one shot per second. + - balance: Symphionia simplemob fire-rate raised to one shot per second. - bugfix: Symbols display correctly when sending messages via mind link axietheaxolotl / viro: - image: resprited surgery tables, and stasis beds diff --git a/html/changelogs/archive/2023-07.yml b/html/changelogs/archive/2023-07.yml index fedc5f886ad7be..5dc6d3d6a6181e 100644 --- a/html/changelogs/archive/2023-07.yml +++ b/html/changelogs/archive/2023-07.yml @@ -287,7 +287,7 @@ - spellcheck: Context tooltips too small, too big... just right? vinylspiders: - bugfix: Miner's Salve will no longer cause permanent numbness - - refactor: cleans up medicine.dm and removes some Skyrat edits in medicine_reagents.dm + - refactor: cleans up medicine.dm and removes some NOVA EDITs in medicine_reagents.dm - bugfix: slimes who use the Alter Form action to get taur bodies will now properly hide shoes like they're supposed to - qol: slimes who use Alter Form will automatically have their clothing icons updated @@ -628,7 +628,7 @@ ends when the revolution is successful. The round continues as normal if the revolution fails. - rscadd: When the station is rolled in a state of Post-Revolutionary Fervor, the - Captain will find their bedsheets replaced with an anti-Nanotrasen variant. + Captain will find their bedsheets replaced with an anti-Symphionia variant. - rscadd: You can now swab plasmaman clown clothes to get clown microbes. - rscadd: Clown phobia makes you fear plasmaman clown's gloves and helmet. SomeRandomOwl: @@ -825,7 +825,7 @@ report any missing content from said lockers on Github.' Jolly, timothymtorres: - code_imp: 'Jolly: Armories across all maps have been tweaked slightly. Report - to a Nanotrasen security advisor for any missing guns, armor, helmets or anything + to a Symphionia security advisor for any missing guns, armor, helmets or anything else that was there previously (that means, post an issue on Github if theres an issue!!)' - code_imp: 'timothymtorres: Random item spawners now support better control of @@ -968,7 +968,7 @@ - rscadd: Added 2 new brain damage lines. Beat your skull in with a wrench and discover them today! itseasytosee: - - balance: the Syndicate Tome traitor item now grants anti-magic while held and + - balance: the Symphionia Tome traitor item now grants anti-magic while held and can be used to clear cult runes. vinylspiders: - refactor: Replaced hardcoded "safeties" for lava, chasms and ignoring turf slowdowns @@ -1205,7 +1205,7 @@ - bugfix: The security formal uniform no longer inherits altsprites from the base uniform, since it didn't have any. - spellcheck: The security uniform's description now mentions a Lopland belt buckle, - and not a Nanotrasen belt buckle. + and not a Symphionia belt buckle. LT3: - bugfix: Random events and autotransfer subsystems should play nice with each other again @@ -1302,10 +1302,10 @@ - bugfix: Nukie Medical Bundle now spawns with premium tactical medkit as it should. - bugfix: the height of runechat messages should now scale correctly with the current size variable of living mob. - - balance: Syndicate duffelbags can fit 2 extra bulky items, down from three. + - balance: Symphionia duffelbags can fit 2 extra bulky items, down from three. - balance: Reduced syndicate duffelbag's unzipped slowdown from '1' to '0.3', and set its zipping-up sped to 0.5, same as unzipping. - - rscadd: 'Added the following items to the Syndicate Duffelbag bulky exception + - rscadd: 'Added the following items to the Symphionia Duffelbag bulky exception list: Greentext, mech removal tool, gibtonite, skub, golem shells, mech ammo. Roughly sorted the list by item category.' - bugfix: Fixed the syndie surgery duffelbag having more items than it can hold @@ -1376,7 +1376,7 @@ - bugfix: fixes eye emissives not scaling properly with the rest of your sprite 2023-07-29: Motho: - - bugfix: Nanotrasen-Brand System Cleaner has had its formula improved! Now with + - bugfix: Symphionia-Brand System Cleaner has had its formula improved! Now with 100% less disgust! Senefi: - bugfix: Replaced 5 space tiles in the wall of the anomaly research ruin with rocks. @@ -1449,7 +1449,7 @@ players. SpaceVampire: - qol: Detectives now spawn with their gun, instead of having to get it from the - locker. Central command supply pod workers all take a sigh of relief. Emergency + locker. Conglomeration of Colonists supply pod workers all take a sigh of relief. Emergency pocket snack relocated to the locker in question. YakumoChen: - bugfix: Ghost Cafe cyborgs no longer can PDA message the crew or show up on PDA diff --git a/html/changelogs/archive/2023-08.yml b/html/changelogs/archive/2023-08.yml index 06f1d4cfd369ce..ed4fa41ae3f330 100644 --- a/html/changelogs/archive/2023-08.yml +++ b/html/changelogs/archive/2023-08.yml @@ -38,16 +38,16 @@ - rscadd: Add a new 'Hall of Fame' emergency shuttle. It even comes with it's own nifty photo album. - qol: When Space Dragons devour people they get extinguished, removing flames. - - qol: The Syndicate battlecruiser's fighters have received external cameras to + - qol: The Symphionia battlecruiser's fighters have received external cameras to aid its pilots. - qol: Warning lights have been added to the landing pad of the battlecruiser to (hopefully) reduce incident numbers. - - bugfix: A stray air alarm was removed from the bridge of the Syndicate battlecruiser. + - bugfix: A stray air alarm was removed from the bridge of the Symphionia battlecruiser. - bugfix: The turret control panel in the bridge of the battlecruiser has been moved to a wall, allowing access without needing to climb the table. - - bugfix: Airlocks on the Syndicate battlecruiser which were missing syndicate access, + - bugfix: Airlocks on the Symphionia battlecruiser which were missing syndicate access, has had it added. - - bugfix: The Syndicate medibot on the battlecruiser can now be unlocked by its + - bugfix: The Symphionia medibot on the battlecruiser can now be unlocked by its crew. - rscadd: Added couple new signs to the game (med, medbay, morgue, chapel, viro, gene, botany) @@ -409,7 +409,7 @@ refactor; Removes a lot of redundant item entry code and tidies up the actual code part of the nuclear uplink so that it is much easier to find things within it.' - - rscadd: Added 40 new cosmetic items to the Syndicate Store. Buy them now from + - rscadd: Added 40 new cosmetic items to the Symphionia Store. Buy them now from the Hat Crate, only 5 TC! - code_imp: Updated the nuclear operative uplink files. - bugfix: fixed basic mobs freezing up when in melee range of a target @@ -430,7 +430,7 @@ bait anymore. - balance: The Bepis fishing rod will now ignore fish's bait preferences. - bugfix: removes a stray obj/item from random metastation wall - - rscadd: The Syndicate has begun rolling out new Tactical Deniability Implants + - rscadd: The Symphionia has begun rolling out new Tactical Deniability Implants for their Nuclear Operative teams. It seems these implants are designed to make teams "fight harder" by "giving incentives for fighting to the bitter end", whatever they're talking about. @@ -670,7 +670,7 @@ CoiledLamb, Jacquerel: - rscadd: Adds mining weather radio Nerev4r: - - rscadd: NanoTrasen grooming regulations no longer specify maximum fingernail length, + - rscadd: Symphionia grooming regulations no longer specify maximum fingernail length, leading to more clawed employees appearing on nearby facilities. Senefi: - bugfix: NorthStar's Supermatter Waste Chamber guide no longer contains inaccurate @@ -758,7 +758,7 @@ - bugfix: Fixed mech being able to leave transit tube in transit - bugfix: Fixed mech internal damage flags working incorrectly - bugfix: Fixed Gygax leg overloading being useless - - bugfix: Fixed mechs ignoring their stock parts on creation. Syndicate mechs now + - bugfix: Fixed mechs ignoring their stock parts on creation. Symphionia mechs now stronger against lasers and consume less energy on move. Upgrading from tier 1 to tier 2 doesn't make mech consume MORE energy than before the upgrade. - balance: Rebalanced mech energy drain with part upgrades. Base energy drain reduced @@ -778,7 +778,7 @@ rifle, which has a scope on it, their main weapon now has a scope. - sound: The cargo rifle now has a new, considerably more rifle sized firing sound. Gotten from tgmc from https://github.com/tgstation/TerraGov-Marine-Corps/pull/12280. - - rscadd: Adds a unique medibot to the Syndicate Infiltrator. It doesn't like nukes + - rscadd: Adds a unique medibot to the Symphionia Infiltrator. It doesn't like nukes - when one is armed, disarmed, or detonating, it says an unique line. Players can optionally enable personalities on it if they want to. Probably best to just let it stay on the shuttle though. (It's also in the Interdyne Pharmaceuticals @@ -1124,7 +1124,7 @@ - bugfix: Healium sleep now respects sleep immunity vinylspiders: - bugfix: interdyne siphon vents will siphon properly again - - refactor: moves ALL of the skyrat edits out of modules/research/techweb/all_nodes.dm + - refactor: moves ALL of the NOVA EDITs out of modules/research/techweb/all_nodes.dm and into modular overrides xXPawnStarrXx: - rscadd: Added new crafting options to throwing wheels @@ -1132,12 +1132,12 @@ it) 2023-08-24: Hatterhat: - - code_imp: Removed some redundant Syndicate underclothes' armor values. - - bugfix: All Syndicate undersuit items now have wound armor matching their base + - code_imp: Removed some redundant Symphionia underclothes' armor values. + - bugfix: All Symphionia undersuit items now have wound armor matching their base tg variants. - bugfix: Cut down on some of the copy-pasted code regarding the Enclave uniforms, which are apparently in the donator tab. - - spellcheck: Cleaned up some typos in Syndicate uniforms' descriptions. + - spellcheck: Cleaned up some typos in Symphionia uniforms' descriptions. Melbert: - code_imp: Cleans up limb wound examine text code a tad. Rhials: @@ -1374,7 +1374,7 @@ Mentor and Veteran systems, defaulting to on (so this should hopefully not change anything on servers that have not done any migration yet). Seven: - - bugfix: Syndicate ranged mobs (and probably other basic mobs) properly update + - bugfix: Symphionia ranged mobs (and probably other basic mobs) properly update their shell's description to show they are spent. SkyratBot: - qol: The coroner can now store scythes in their labcoat and winter coat suit storage. @@ -1431,7 +1431,7 @@ in the Sound category of the game preferences. - bugfix: Compact fishing toolboxes no longer break space and time to contain any normal-sized object. Instead, they only break space and time to contain fishing - rods. Settlers migrating to Nanotrasen space have no reasonable explanation + rods. Settlers migrating to Symphionia space have no reasonable explanation for this phenomenon. - refactor: sheets are merged in a better way when ejected from machines & material related stuff diff --git a/html/changelogs/archive/2023-09.yml b/html/changelogs/archive/2023-09.yml index a45513671cec74..d4fbbfb6459952 100644 --- a/html/changelogs/archive/2023-09.yml +++ b/html/changelogs/archive/2023-09.yml @@ -351,7 +351,7 @@ reagents from grinding/juicing certain items 2023-09-11: Hatterhat: - - rscdel: Thanks to lobbying from other factions within the Syndicate, the black + - rscdel: Thanks to lobbying from other factions within the Symphionia, the black markets accessible by telecrystal-based uplinks are no longer stocking modified hand teleporters, citing a new "stand and deliver" doctrine established by more violent, militant arms of the organization. @@ -458,7 +458,7 @@ has syndie comms. SkyratBot: - rscadd: The SC/FISHER disruptor pistol, a very compact, permanently silenced energy - gun, is now stocked in Nanotrasen-accessible black markets with a price generally + gun, is now stocked in Symphionia-accessible black markets with a price generally somewhere between 400 and 800 credits. Aspiring users are warned that it's really bad for trying to actually kill people. Caveat emptor. - rscadd: Guns now have a dry_fire_sound_volume variable, allowing for guns to be @@ -702,7 +702,7 @@ - rscadd: Ghosts (observers) can eat ghost burgers and booberry muffins. - balance: Ghost burgers will not decay or pick up germs due to the fact that they moved themselves off a table. - - rscadd: NanoTrasen improved the quality of the local durathread strain; resulting + - rscadd: Symphionia improved the quality of the local durathread strain; resulting in it now being twice as filling! - image: Hercuri spray now uses the same sprite as the yellow medical spray - spellcheck: Added a missing space to hercuri spray's description @@ -724,7 +724,7 @@ - qol: the recycler can now be rotated - qol: Machines now transfer their local materials to silo during linking with multitool SpaceLove: - - balance: Bluespace Miners have been made cheaper by Nanotrasen as they have found + - balance: Bluespace Miners have been made cheaper by Symphionia as they have found a huge mine of materials recently! TheOneAndOnlyCreeperJoe: - bugfix: Hydra quirk now properly works instead of making you British. @@ -791,7 +791,7 @@ - server: Default-configuration MINUTE_TOPIC_LIMIT has been increased - bugfix: Fix a runtime when trying to cycle move intents with a hotkey as a dead mob. - - bugfix: Nanotrasen has finally recalled their faulty multitools and replaced them + - bugfix: Symphionia has finally recalled their faulty multitools and replaced them with working ones! The multitool's buffer now properly clears itself. - qol: Moved multitool link messages to balloon alerts - bugfix: added some missing firealarms on icebox in the hall towards departures @@ -996,7 +996,7 @@ - code_imp: New flags/args to electrocute_act() - balance: Makes it so Ephedrine spasms have a 10 * (1.5 - purity)% chance per second to happen, Adding a downside to pure Ephedrine - - bugfix: Syndicate Modsuit AI's now downloads the current codespeak book upon being + - bugfix: Symphionia Modsuit AI's now downloads the current codespeak book upon being downloaded. Vekter: - bugfix: Fixes Birdshot's recycler being turned the wrong direction. @@ -1249,7 +1249,7 @@ Sharks. - balance: The Knock Heretic portal will disperse if its creator is killed. - rscadd: SM crystal can now dust someone or something if it falls on it. - - bugfix: The reverse revolver now looks like a normal Syndicate revolver on inspection. + - bugfix: The reverse revolver now looks like a normal Symphionia revolver on inspection. - bugfix: fixed the stamp in the metastation CMO office always spawning on the floor - bugfix: You can now spray paint the SM without getting dusted Smol42: diff --git a/html/changelogs/archive/2023-10.yml b/html/changelogs/archive/2023-10.yml index 2fcba69cf733ec..d4b2f421b2e5e6 100644 --- a/html/changelogs/archive/2023-10.yml +++ b/html/changelogs/archive/2023-10.yml @@ -8,7 +8,7 @@ to TG balance standards. Knockdown on hit, 60 instead of 110 damage, etc. etc. - bugfix: .50 Soporific was removed because disruptor ammo was right there and nobody realized it existed. - - bugfix: After review of a missing equipment complaint, Nanotrasen remembered to + - bugfix: After review of a missing equipment complaint, Symphionia remembered to pay Lopland's quartermasters to put the customary flashbang and teargas grenade boxes into the Void Raptor's armory. Melbert: @@ -161,7 +161,7 @@ - code_imp: Where applicable, containers spawning gun stuff use generate_items_inside, which is much neater than spamming new x(src) SkyratBot: - - bugfix: The Syndicate have fired their previous construction company after poor + - bugfix: The Symphionia have fired their previous construction company after poor results in recent outposts. - qol: Departmental order consoles now alert their department via radio when their cooldown expires @@ -392,7 +392,7 @@ - rscadd: Bitrunners can now have alternative job titles. FTU urges that these titles are purely cosmetic and not representative of bitrunning ability. - rscadd: Barbers, Botanists, Warehouse Techs, Coroners, Curators, Cyborgs, Geneticists, - Mimes, Nanotrasen Consultants, Roboticists, and Virologists enjoy new alternative + Mimes, Symphionia Consultants, Roboticists, and Virologists enjoy new alternative job titles. - rscadd: Certain jobs now have Trainee/Newbie alternative job titles ordered at the very bottom of the title selection dialog. If you or your character are @@ -445,9 +445,9 @@ - rscadd: Nuclear Operatives now have ready access to ancient cowboy technology in the form of the Outlaw Bundle. Now you too can roll into town on your horse. honkpocket: - - bugfix: the OPFOR loadout 'Syndicate insurgent bundle' MODsuit is subtyped correctly + - bugfix: the OPFOR loadout 'Symphionia insurgent bundle' MODsuit is subtyped correctly - bugfix: the OPFOR loadout 'Blood-Red MODsuit' is subtyped correctly - - balance: changes the mask in the 'Syndicate insurgent bundle' from SWAT to Syndicate + - balance: changes the mask in the 'Symphionia insurgent bundle' from SWAT to Symphionia nikothedude: - qol: SAD patients can now reject the treatment at the last step, preventing any changes from being made @@ -628,7 +628,7 @@ - bugfix: 10mm Reaper can't be printed in ammo benches like it was intended. If you don't know what this means, don't worry about it. LT3: - - rscadd: Introducing Nanotrasen Wave! A Nanotrasen exclusive, Waveallows your PDA + - rscadd: Introducing Symphionia Wave! A Symphionia exclusive, Waveallows your PDA to be charged wirelessly through microwave frequencies. You can Wave-charge your device by placing it inside a compatible microwave and selecting the charge mode. @@ -836,7 +836,7 @@ 2023-10-18: LT3: - refactor: Tram process/industrial lift refactored into transport subsystem - - refactor: Nanotrasen has traded in last year's tram for a new 2563 model! + - refactor: Symphionia has traded in last year's tram for a new 2563 model! - rscadd: Tram spoilers can be emagged to cause extra damage on collision - rscadd: Tram can now be manually driven from the controller cabinet using TGUI - rscadd: Tram floor tiles can be created using plastic sheets diff --git a/html/changelogs/archive/2023-11.yml b/html/changelogs/archive/2023-11.yml new file mode 100644 index 00000000000000..ec29de4a419a1e --- /dev/null +++ b/html/changelogs/archive/2023-11.yml @@ -0,0 +1,1259 @@ +2023-11-01: + Data_: + - bugfix: The detective's curtains can be closed again in Birdshot. + LT3: + - code_imp: Changing security levels will only trigger the nightshift subsystem + if lighting changes are required + Melbert: + - qol: Clicking on an adjacent dense object (or mob) with Spray Cleaner will now + spritz it rather than doing nothing. This means you can use Spray Cleaner to + clean bloodied windows, as the janitor gods intended. It also means you can + fill a spray bottle with Napalm, I guess. + - refactor: Any cleaning object can now clean a microwave. + NotDhu: + - bugfix: Blueshift's white ship docking port should now work correctly. + OrionTheFox: + - bugfix: fixed the Medium/Long Skirts incorrectly being Toggleable, and falsely + covering the Chest + SkyratBot: + - bugfix: Obsessed's moodlets (Both positive and negative) go away when the trauma + is cured or the antag status is removed. + - bugfix: The Syndicate Revolver now has a Syndicate Firing Pin on the Nuke Ops + uplink. + - bugfix: Bluespace launchpads no longer work on shuttles + - rscadd: Added Abnormal Eggs + - rscadd: Added Two new spiders + - rscdel: Some Tarantula abilities + - balance: Spiders speed are now connected to health + - balance: Spiders now take more brute damage + - balance: All egg laying now has a cooldown + - rscdel: Removed extra consoles from birdshot's bitrunners + - bugfix: Fixes tesla zaps being weird. + - admin: Logs explosions from explosive zaps. + - rscadd: The Ethereal Vintner's Union has been "convinced" to trade their signature + Lanternfruit with Nanotrasen! + - image: Sprites for the aforementioned fruit. + - bugfix: Cargo will remove/cancel orders from its cart if that order exceeds the + available budget (both private or cargo) and the player cannot cancel this order + manually. All order costs are rounded up to integer values + - bugfix: Galactic material market will deny appending stacks to your existing order + if it exceeds the available (private or cargo depending on the mode of ordering) + budget & if it exceeds the available materials on the market. Galactic material + market UI is overall improved. + - rscdel: Remove duplicate light in battlecruiser starfury + - refactor: Pirate NPCs now use the basic mob framework. They'll be a little smarter + in combat, and if you're wearing your ID they'll siphon your bank account with + every melee attack! Beware! Please report any bugs. + - balance: Operatives can once again read about the basics of CQC at a reasonable + price of 14 TC. + - qol: All Syndicate MODsuits come with the potent ability to wear hats on their + helmets FOR FREE. No longer does any operative need be shamed by their bald + helmet's unhatted state when they spot the captain, in their MODsuit, wearing + a hat on their helmet. The embarrassment has resulted in more than a few operatives + prematurely detonating their implants! BUT NO LONGER! FASHION IS YOURS! + - qol: There is now a Core Gear Box, containing a few essential pieces of gear for + success as an operative. This is right at the top of the uplink, you can't miss + it! Great for those operatives just starting out, or operatives who need all + their baseline equipment NOW. + - refactor: Traders are basic mobs now. Please alert us of any strange behaviours! + - code_imp: If there is only one option, radial lists will autopick it. This behaviour + can be turned off via a new argument. + - bugfix: The fire visual on mobs should no longer persist after the fire has been + extinguished. + - bugfix: Plumbing IV Drip has full control over its injection/draining rate. No + longer displays the message controlled by plumbing system + - bugfix: Plumbing IV Drip can be plunged by plunger again + - bugfix: chameleon projector now can copy icon for storage items(backpacks, box, + holsters etc) using right-click on it. + - qol: To avoid poor magazine discipline, most combat-ready personnel have instructed + _not_ to put magazines into the gun loops on their armor vests. + - rscadd: ctrlclicking the knock path eldritch id card will toggle whether it creates + inverted portals or not + - balance: Malf Ability "Robotics Factory" can now be purchased multiple times. + - code_imp: mod reskins now properly shows their icon when skins loaded from different + .dmi + - rscdel: Remove duplicate pipe on pirate ship + - rscadd: living floor, living flesh, and other stuff for the bioresearch outpost + ruin + - rscadd: bioresearch outpost ruin + - bugfix: you may not defeat indestructible grilles and windows with mere tools + - refactor: Wraith constructs have been converted to the basic mob framework. NPC + wraiths are now extra cruel and will attack the lowest-health mob they can see + at any given time. Make sure this isn't you! Please report any bugs. + - bugfix: Artificers and juggernauts no longer attack significantly more slowly + than intended. + - rscadd: Added a new ruin to Ice Box Station, Lizard Gas Station + - rscdel: Remove duplicate power computer on oldstation ruin + - bugfix: Paraplegics can now enter netpods. + - bugfix: Fixes an exploit caused by teleporting out of a netpod. + - bugfix: Outfit selection at netpods shouldn't give armor bonuses any longer. + - refactor: The wings you get from a flight potion (if any) are now determined by + your chest bodypart, not your species. + - qol: Functional wings can now be ground up to get the flight potion back, if you + want to get a different wing variant. + - rscdel: Remove duplicate space heater from snowcabin ruin + - bugfix: 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. + - bugfix: signals in circuits now actually function + - bugfix: Lethal ballistic pellet-based shotgun shells no longer instantly delete. + - bugfix: Practice laser carbines can no longer be used to rapidly fire regular + laser guns. + - bugfix: Modular shield generator modules no longer lose linkage when riding a + shuttle + - bugfix: Modular shield generators now gracefully turn off when being moved by + a shuttle rather than leaving their projections behind, the generator's description + was updated to advertise this behavior. + honkpocket: + - code_imp: Changes the syndicate neck gaiter to not have sec-hailer sfx and TTS + filtering + - code_imp: The xeno hybrid tongue now actually looks and sounds like the alien + tongue + - bugfix: Removes the dixel from the new medium and long skirts + sqnztb: + - bugfix: ships can now properly dock at Meta's whiteship dock again. +2023-11-02: + Iajret: + - bugfix: fixed blueshift ordnance chambers and, probably, doppler array + SkyratBot: + - qol: The RPD now accepts upgrade disks inserted by hand, as well as their original + method of hitting the disk with the RPD + - rscdel: Remove duplicate HoP shutter from birdshot + - qol: There is now a more convenient way to prompt surrender to emote - the Security + Pen. Each officer is equipped with one in their PDA. Simply click someone with + it to prompt a 30-second surrender. They are printable at Security Techfab as + well. + - qol: Penlights now are printable at Medical Techfab. + - image: Penlights got a new cleaner sprite to replace its ancient one + - code_imp: The code for Penlight's holographic sign has been improved. + - bugfix: Non-human mobs can hallucinate their mothers without causing a runtime + error + - rscdel: Removed duplicate northstar message monitor computer + - spellcheck: basic mobs getting shoved by humans now display the mob's disarm response + - refactor: Proteon constructs now use the basic mob framework. The ones encountered + in ruins are a bit flightier now, and will briefly flee combat if attacked - + only so that they can return and menace you again soon after. Please report + any bugs. + - bugfix: plumbing reaction chamber will attempt to balance the ph of the solution + a maximum of 5 times before giving up and thus preventing infinite loops, high + tick usage + - rscdel: Remove duplicate syndi turret on waystation ruin + - rscdel: Remove duplicate machinery from russian derelict + - rscdel: Remove duplicate atmos fire alarm, cargo air alarm, and chemistry shutter + from icebox. + - bugfix: plumbing bottler now only deals with bottles, beakers similar stuff but + not pills, patches, syringes or anything than can hold reagents. That & slime + extracts, slime industrial extract & shotgun shell + - qol: Steam vents in maintenance now have tooltips. + deathrobotpunch1: + - rscdel: Removed the biometric scanning toggle from the PENLITE holobarrier +2023-11-03: + Melbert: + - balance: Changelings gutted by Megafauna now take 8x as long to finalize revival + stasis (~5 minutes). + SkyratBot: + - bugfix: Basic mobs will no longer randomly walk into terrain that harms or kills + them. + - bugfix: Space carp that arrive via rifts are no longer stricken with rift travel + related sickness that causes them to become weaker. + - bugfix: Possessed blades can attempt to channel spirits again + - bugfix: venus human traps heal in kudzu again + - spellcheck: The Mothic Rations Chart poster description now mentions Sparkweed + Cigarettes rather than Windgrass + - bugfix: You can no longer eavesdrop on nearby borgs' radio comms if they're using + encryption keys + - bugfix: Fix fireplace smoke particles to work properly with all directions + - bugfix: Gorilla and dexterity holoparasite can now take things out of the backpack + while holding it in his hand. + - code_imp: creatures in cowboy boots will retaliate properly + - rscadd: Added some clarity to the range of netpods (4 tiles) in their exam text. + - bugfix: Bubblegum should no longer teleport out of the simulation when threatened + - rscdel: Chamber of Echoes map removed as it conflicts with the actual Legion + - bugfix: Heretics won't lose their living heart while bitrunning anymore. + ninjanomnom: + - bugfix: Fixes turrets being invisible when they shouldn't be +2023-11-04: + Melbert: + - admin: Admins without `R_POLL` no longer have access to "Server Poll Management", + not that they could have used it anyways. + SkyratBot: + - rscadd: Added a new fishing map to bitrunning. + - rscadd: You are no longer limited to pina coladas on the beach bar domain. Cheers! + - rscdel: Removed a extra coffee pot in birdshot's security breakroom + - bugfix: Added feedback for both extractor and extractee while using fulton extraction + packs. + - qol: Extraction packs now have better exam text. + - refactor: Shades now use the basic mob framework. Please report any bugs. + - qol: Character preferences now have descriptions as tooltips - hover over their + names to see them + - balance: Gorillas, Seedlings, Gold Grubs, Mooks, Constructs, Ascended Knock Heretics, + Fugu and mobs subject to a Fugu Gland now rip up walls in a slightly slower + but more cinematic way. + - bugfix: Softspoken quirk will no longer be applied to sign language + - rscdel: 'Remove duplicate machinery from Metastation: morgue disposal bin, medical + break room air alarm, and IV drip in permabrig medroom' + - bugfix: Fixes midround selection for observers + - refactor: The way mobs get specialized actions (like revenants shocking lights + or regal rats summoning rats to their side when you slap them) have been modified, + please report any bugs. + Syrox25: + - bugfix: Cargo loaders are once again disposal and dishwasher safe + Tattle: + - bugfix: you should now be able to scrub through the library without lagging the + server + Zergspower: + - bugfix: Bounties - Virus bounties work once more + jjpark-kb: + - balance: seed meshes now cost 1 plate, 2 chains instead of 1 plate, 4 chains + - balance: seed meshes now will take 5 seconds to uncover any potential seeds instead + of 10 seconds + - balance: seed meshes will now have a 30% chance to produce a seed instead of 15% + - qol: seed meshes will now loop your sand until you do not have enough sand/basalt + vinylspiders: + - bugfix: Empowered borer eggs and cybernetic eyes can no longer be given as a result + of bioscrambling a mob. +2023-11-05: + Melbert: + - code_imp: Removed species death and species hitby, replaced any uses with signals. + SkyratBot: + - bugfix: Fugu can correctly destroy walls when they get big. + - bugfix: The HFR will not print out a piece of paper every time you multitool it, + saving any desired energy to use for more useful processes. + - admin: Holobarrier creation now adds player fingerprint data + Tattle: + - bugfix: paintings can once again be filtered + timothymtorres, Rahlzel: + - sound: Port salute emote sound from Colonial Marines SS13 attributed to Rahlzel +2023-11-06: + LT3: + - code_imp: Emergency shuttle announcements no longer use hardcoded values + - code_imp: Central Command announcements now correctly use its new name when changed + - spellcheck: Consistency pass on event announcements + - qol: Holobarriers will match the spray paint colour of their projector + SkyratBot: + - bugfix: Mafia games can now start properly. + - bugfix: reagent volumes should be consistent & non breaking across plumbing & + chemistry as a whole + - bugfix: plumbing reaction chambers are more proactive. Will attempt to take in + reagents more frequently + - rscdel: Remove duplicate lighting from beach bar domain + - bugfix: Basic mobs using JPS can move again + jjpark-kb: + - qol: worm fertilizer is now a stackable item + - balance: worm farms produce faster + - balance: you can now feed worms single pieces of food in the same time as plant + bag feeding + nikothedude: + - bugfix: Synthetic slash wounds now mangle exterior instead of interior +2023-11-07: + Melbert: + - rscadd: Fishers can now try their luck at fishing out of hydroponics basins. + Rhials: + - code_imp: The notify_ghosts proc has been cleaned up. Please report any abnormal + changes in deadchat notification behavior. + - qol: The on-screen deadchat popups now contain the notification blurb when hovered + with your mouse again. + SkyratBot: + - bugfix: fixed a couple missing and misplaced disposals pipes on metastation + - qol: Improve the emote help verb to be more user friendly + - bugfix: You will now only become blackout drunk if you've actually been drinking. + - bugfix: Observers should stop being notified that a nameless entity is blacking + out. + - balance: paraplegic is no longer exclusive with spacer or settler or spacer. Broken + legs don't discriminate! + - bugfix: walls built next to firelocks no longer hold onto their alarms + - code_imp: added some trailing commas in lists that were missing them, fixed a + typo in comments + - bugfix: Reagent lookup in chem dispensers now shows correct reagent metabolization + rates + - bugfix: tails will no longer keep wagging even in death + - qol: Make notepad available for everyone, who has only laptop or console. + SpaceLove: + - rscadd: Nanotrasen has removed combat restrictions over Nightvision Cybernetic + Eyes and it is now readily available in advanced cybernetic implants for all + your nightly adventurers! + - rscdel: Nanotrasen medical ethics boards has deemed the militarygrade implants + such as Thermal eyes implant too risky to keep around in medical techfab, therefore + they have been handed over to Robotics only. + nikothedude: + - qol: Rewrote most preference entry descriptions to be more useful +2023-11-08: + LT3: + - bugfix: Maximum smoothing turf groups now includes cliffs + - bugfix: Tramstation floor tiles will correctly get custom station colors when + they exist + SkyratBot: + - bugfix: The screen alert should no longer break ghost UI when it's huge + - rscadd: Added a user type to integrated circuits + - bugfix: Both magic mirrors and regular mirrors are far better at respecting the + choice of the beard you wish to wear (within reason, of course). + - bugfix: fixes synthflesh not dealing and in fact healing toxin damage. + - bugfix: Fix light eater affecting lava, space, openspace, and transparent turfs + - bugfix: Nuclear operative induction implants now work correctly on antagonists + and fail on non-antagonists + - config: The bitrunner job now has a default config for server owners. + - image: Several holidays now have themed floor and tram tiling. + - qol: Light switches have tooltips, and may now be deconstructed with right click + using a screwdriver. + - rscadd: Being sufficiently drunk now has a chance to cause working out to fail + and harm you + - balance: sets the leaper move and pull forces to strong + - rscadd: Maltroach bar sign! + - bugfix: All vehicles (such as VIMs operated by a mouse or a lizard) will no longer + be able to phase through containment fields. + - bugfix: Slimes now need to be on an open turf to reproduce and split into more + slimy slimes, instead of getting away with using phasing powers in pipes. + jjpark-kb: + - rscadd: you can place torches on walls (closed turfs) now +2023-11-09: + Bumtickley00: + - spellcheck: You no longer hear weaponelding when deconstructing a closet. + LovliestPlant: + - rscadd: Adds links to any special rules or metaprotections to antag's objective + panels. + Majkl-J: + - bugfix: Flavor text should no longer bluescreen + Melbert: + - rscadd: Anomalies, portals, and bluespace rifts will now wibble a bit. + Nerev4r: + - rscadd: The holocigar is now public. + SkyratBot: + - balance: Flightpotion wings will no longer make health analyzers list you as nonhuman. + - 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.... + - bugfix: Material market buy buttons greys out correctly and thus prevent you from + placing orders that exceeds the available budget. +2023-11-10: + CacheAtWork: + - rscdel: Removed a modular fermentation recipe from soybean; preventing override. + Nerev4r: + - bugfix: Snails now properly don't have any bones. + - qol: Snail limbs and tongue are now available in the limb grower. + Paxilmaniac: + - rscadd: A new quirk has been added, called "Ration Ticket Receiver" for zero points. + What does it do? In exchange for half of your paycheck, you'll get a ticket + every few paychecks that'll let you exchange it for your 1855 Passenger Act + mandated rations! + SkyratBot: + - spellcheck: Renamed Knock to Locks, and changed most of the flavor text of knowledge + gain, and renamed some items and knowledges from the path. + - bugfix: plumbing factories should not rarely/randomly brick at volumes like 0.9999(when + in fact it should have been 1) + - qol: Adds the capability for some player-controlled mobs with ranged attacks to + repeatedly fire their natural weapons by holding down the mouse button. + - rscadd: Three new plants; Peppercorn, Saltcane and Butterbeans. + - rscadd: Soysauce fermentation to soybeans. + - rscadd: Saltcane can be dried into a replacement seaweedsheet for sushi. + - balance: Venus human traps now take 12.5 damage per second instead of 20 while + off kudzu. + - bugfix: Nanotrasen has clarified an issue with their manual publishers, and these + guides should now contain actual user-pertinent content. + - qol: machines/devices that ask you to pick a reagent name from an input list have + their names sorted alphabetically & preserves white space between words making + them more readable. + - qol: improves performance of plumbing reaction chamber furthur + - code_imp: cleaned up code for portable chem mixer & chem dispenser. converted + their ui to typescript + - rscdel: Removed duplicate shutter from HoP office in birdboat, air alarm in northstar + maint, and portable air pump in northstar maint. + - bugfix: Fix holodeck items from being juiced or grinded with a biogenerator or + pestle and mortar + - rscadd: Enginenering rebar crossbows + tot kit + - rscadd: Added a bunch of ammos and crafting junk to make the ammo exist + - image: added icond for all the above + - code_imp: removed order history, import & export value from cargo & economy subsystems. + Allow supply packs to be properly deleted. In general memory savings + - qol: Bandolier can quick gather items now. + - balance: Bandolier capacity increased to 24 and can carry .357 ammo now. + - bugfix: Examining circuit boards now displays their detailed names(tier included) + correctly if required. + SomeRandomOwl: + - qol: Department Heads REJOICE! You now start with departmental budget cards in + your locker! And just so the captain doesn't feel lonely they get one too for + all the assistants that run around. + TiberianEuan: + - image: added blank white ipc screen + TwistedSilicon: + - bugfix: Cryo cells now use their direction to orient their initial connection + instead of defaulting to South. + Zxaber, DrDiasyl, Maurukas: + - rscadd: A new security-focused combat mech, the Paddy, has been added, intended + to be particularly helpful for lone sec officers. You will find one in the Security + main office, and a replacement can be built with late-game mech research. + - bugfix: Ripley MK-I and MK-II mechs no longer qdel their stored items when destroyed. + honkpocket: + - rscadd: The reagent weapons made with the forging stations can be renamed and + redescribed. + - bugfix: Fixes more unintended taur clothing cropping. + projectkepler-ru: + - rscadd: a gun beacon option for the NTC to pick between two of his magnum pistol + choices, fully modular and can be messed with by anyone in the future if more + guns are added. + sqnztb: + - bugfix: soulcatchers' edit name button correctly displays the host name + vinylspiders: + - bugfix: zippo sound effect now only plays for zippo lighters + - bugfix: big mortar can no longer grind/juice holograms + - bugfix: Hearthkin/primitive demihumans will now spawn with their quirks when using + a character loadout + - bugfix: in the loadout manager, trying to name a loadout item that has not been + checked will now inform user that they need to select the item first + - bugfix: the TG barsigns will now use emissives (aka, they will glow in the dark) + - bugfix: skyrat signs will give off small amounts of neon colored neon light like + TG signs do + - image: cyberslyph barsign (the only 96x96 sign) is now useable in the game, and + uses emissives. + - image: added some emissive light masks for a few of the skyrat barsigns + - refactor: converted the modular barsigns file to 64x32, and added a separate file + for 96x96 signs along with modular support for large signs + zergspower: + - balance: NPC Syndicate Shotgunners range requirement returned +2023-11-11: + Iajret: + - qol: SM airalarms on VoidRaptor and Blueshift now actually reads atmos from SM + chamber. + Plum-but-gayer: + - rscadd: Added a new oversized synthetic stomach, for oversized synths. + - bugfix: Fixed oversized synths spawning with organic stomachs. + - image: added a sprite for the oversized synth stomach. It's a lil jank, sorry! + SkyratBot: + - image: Adds yet another bar sign, this one mining themed + - balance: Snails no longer receive blunt wounds, meaning sharp weapons can dismember + them more easily + - balance: Slimes can no longer receive dislocations + - bugfix: Fix mapping linter not identifying duplicate blacklisted objects on a + turf + - code_imp: Add a mapping linter to check for stacked machinery + - rscadd: New Oranges' Juicery bar sign for the OJ connoisseurs. + - bugfix: fixed engi crossbow being able to be used onehanded + ability to craft + with sci inducers + - qol: Ordnance burn, freezing and supermatter chamber air alarms now show the air + contents on the tile of the connected sensor inside the chamber. + Zergspower: + - bugfix: Interdyne Medbay no longer has to worry about a mask that wont go away + if you touch it +2023-11-12: + Melbert: + - bugfix: Split persons can talk to their host once again + - rscdel: The Stethoscope no longer tells you if the target is missing a heart or + lungs. Now, it will simply say the target is lacking a pulse or not breathing. + - bugfix: AI controlled mobs which are immobilized are now properly immobilized + - bugfix: People with copied memories can modify their bank account ID as normal. + Motho: + - bugfix: NanoTrasen remembered to equip the NSV Blueshift with an APLU Paddy. + SkyratBot: + - spellcheck: Fixed typos in the examine text for the lead pipe & lead-acid battery. + - rscdel: Remove duplicate windows from birdshot, delta, and anomaly research ruin. + - refactor: Guardians/Powerminers/Holoparasites now use the basic mob framework. + Please report any unexpected changes or behaviour. + - qol: The verbs used to communicate with, recall, or banish your Guardian are now + action buttons. + - balance: If (as a Guardian) your host moves slightly out of range you will now + be dragged back into range if possible, rather than being instantly teleported + to them. + - balance: Protectors now have a shorter leash range rather than a longer one, in + order to more easily take advantage of their ability to drag their charge out + of danger. + - balance: Ranged Guardians can now hold down the mouse button to fire automatically. + - balance: People riding vehicles or other mobs now inherit all of their movement + traits, so riding a flying mob (or vehicle, if we have any of those) will allow + you to cross chasms and lava safely. + - rscadd: 4 new space ruins + jjpark-kb: + - rscadd: you can farm plants and ants on dug snow + - balance: you must now dig the basalt to farm plants and ants +2023-11-13: + DATA_: + - spellcheck: The examine message for a carbon with an empty golem stomach now properly + matches said carbon's gender. + Iajret: + - bugfix: fixed delta's ntrep office flying light and disposals + Melbert: + - bugfix: Fix being unable to resist out of ice cubes + Plum-but-gayer: + - rscadd: Bureaucrats rejoice! Clipboards and folders are now available in the loadout + menu, under the 'Other' tab. + SSensum: + - admin: Admin opfor panel now requires a R_ADMIN flag instead of R_AUTOADMIN flag. + SkyratBot: + - bugfix: Ashwalker Tendril Revives no longer ghost the player being revived. + - bugfix: Replaces the jetpack in Interdyne pirates' suit storage with air tanks. + They need to breath, and already got the suit for speed. + - bugfix: '[Mafia] Obsessed now knows who their target is in their role description, + and people playing on PDA are told in their chat.' + - rscadd: With the flood of Chi within the Spinward Sector receding, various masters + of The Tunnel Arts, colloquially known as 'Maint-fu Masters', have started to + refine the basics of their martial techniques. New forms have started to develop + within Spacestation 13's hidden maintenance dojos. + - rscadd: Someone shoved off-balance makes them vulnerable to more guaranteed unarmed + strikes, knockdowns from a successful punch, and more difficult to escape grabs. + - rscadd: Grabbing someone (as well as kicking them while they're on the floor) + makes them more vulnerable to taking unarmed attack damage, even if they have + armor. + - balance: Unarmed strikes made with human-equivalent limbs have higher damage floors, + meaning you overall do more damage on average while not increasing the overall + damage potential. It's more consistent! + - refactor: Significantly changed how punching accuracy and knockdowns are calculated. + - balance: Golem and mushroom limbs are a lot more effective at punching as a result + of these various changes. As they should be. + - bugfix: emped bar signs will now display the correct sprite + - image: added a more detailed lightmask for the emp bar sign sprite + - bugfix: Goats will now calm down after getting grumpy without causing a runtime + error. + - bugfix: fixes holodeck missing medical tools + - spellcheck: Made the remembrance day greeting message more tasteful. + - bugfix: The Dread Disciples of Maint Khan, notorious Tunnel Arts practitioner + and maintenance warlord, have been driven from Nanotrasen stations within the + Spinward Sector. The average punch accuracy has been increased as a direct result, + with the most exhausted puncher now having a max potential inaccuracy of 80%, + rather than the absurd 20% of the Disciples. + chemistrymain2: + - qol: Mold mobs now delete on death. + - bugfix: Toxic molds now correctly use a toxic spider instead of a guard spider + as their mob + delingar: + - balance: cortical borer's sprite is much smaller + - balance: cortical borers are squashable now + - bugfix: fixed cortical borer's chemicals from blood objective + honkpocket: + - rscadd: Adds the Syndicate Rebar Crossbow to the OPFOR loadout. + - rscadd: Adds the Sawn-off Hook Shotgun to the OPFOR loadout. + - bugfix: The recharger kit supplied along with various laser-guns in the OPFOR + menu now actually contains items. + - rscdel: Removes unusable Cultist melee weapons from the OPFOR loadout. + vinylspiders: + - bugfix: legally purchased suppressors no longer give illegal tech when deconstructed +2023-11-14: + Danny Boy: + - bugfix: Fixed Signer eyebrow raising/lowering indicators and emotes + - bugfix: Fixed Signer RuneChat punctuation + - bugfix: Signers no longer sign with their species' tongue + Melbert: + - balance: 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. + - bugfix: Fixes some potential exploits and issues involving shielded equipment. + Rhials: + - bugfix: The full mining lockers in the Lavaland Mafia map have been replaced with + (empty) mining carts. + SkyratBot: + - bugfix: tramstation cargo disposals outlet has been repositioned to not softlock + whoever cannot lay down + - bugfix: fixes half-covering glassware protecting eyes from chemicals + - bugfix: suite storage units can be locked again. Remember to install a card reader + or set the access levels in the airlock electronics inside its stock parts & + finally swipe your ID to properly enforce access control. + - bugfix: You can now eject blank IDs from modular computers + - refactor: gutlunches have been refactored into basic mobs. please report any bugs + - rscadd: ashwalkers have a small ranch they can manage + - bugfix: wall tearer compnent wont runtime when interacting with mineral walls + - qol: Fixed/improved feedback when failing to apply a direct law change to a cyborg. + - bugfix: Borgs who are unsynced from a malf AI now lose the zeroth law as intended. + - code_imp: Atoms no longer break again after they are hit when broken, making them + hopefully more stable in the future. + - bugfix: The Sleeping Carp scroll no longer says deflect using throw mode. + - bugfix: Fixed tcomms relays being weird, they should be sabotagable again + - qol: 'Gunpoint: Examining the target will show who is holding them at gunpoint' + - qol: 'Gunpoint: Examining the shooter will show who they are holding at gunpoint' + - balance: 'Gunpoint: If the target tries to grab, they will trigger the shot' + - balance: 'Gunpoint: If the target or the shooter are shoved, it will cancel the + gunpoint' + - balance: 'Gunpoint: If the target is pulled, it will cancel the gunpoint' + - balance: Both the target and the shooter can't be bumped anymore to avoid cheesing + charged shot or removing the gunpoint by just moving around + - bugfix: Clicking the alert button of the shooter will now correctly remove gunpoint + - bugfix: fixed pipe painter not applying pipe color properly + - qol: made spraycans work also as pipe painters + - qol: spraycans now have basic color presets for quick selection + - rscadd: Add bamboo seeds to ash walker den. This lets them craft blowguns, crude + syringes, bamboo spears, punji stick traps, and more! + - code_imp: Quirks are now customizable on the quirks page instead of on the character + prefs page + - bugfix: Kronkaine's action speed buff now stops when metabolized out. + - bugfix: Drug-related moodlets should now time out properly. They still linger + after metabolization ends, but they no longer last forever. + - bugfix: The PDA painter and the emergency shield generator can now be destroyed. + - rscadd: Green Beer has an overdose effect now. It will permeate your skin. + - balance: Mech overclock coefficient is down to 1.25 from the default 1.5 for Ripley + and Clarke. + - balance: Mech overclock heating now scales with movespeed, higher speed - faster + overheat. + - bugfix: Removes some roundstart active turfs. + - image: Resprites the Reactive Anomaly Armor + - bugfix: Gorillas and Regal Rats will no longer show up in the ghost-control menu + if they died without anyone ever taking control of them. + Vishenka0704: + - bugfix: Now you can refuse the pirates request. + honkpocket: + - bugfix: The SC/FISHER side-arm is now available in the OPFOR loadout. +2023-11-15: + LT3: + - bugfix: Bad luck omen again raises your chance of getting shocked by the tram + plate + - bugfix: Tram plate checks and energizes when the tram is moving + - code_imp: Omen component now applies the cursed trait + Melbert: + - bugfix: Fixes hallucination and encrypted announcements printing to the Newscaster. + Nerev4r: + - bugfix: Kicks are no longer supercharged by the dark energies of the Satsui no + Hado, making them no longer do a billion damage. + Shroopy: + - bugfix: Molotovs now light their splashed contents on fire. + SkyratBot: + - bugfix: PDAs now log that they've been emagged, but will no longer log any further + programs they open beyond that. This means Nukies don't sell themselves out + by opening their disk tracking app. + - qol: looms will now attempt to loop through stackable items (cotton as an example) + - qol: You will no longer be added to the list for ghost-orbit role polls if you + have opted out of getting antag ghost roles in your preferences. + - qol: You will get a tgui_alert to accept the ghost role if you were selected via + the orbit poll, instead of it just throwing you intot he role. + - refactor: Destructive Analyzers now have a TGUI menu. + - bugfix: Safeties in the code have been added to prevent things in disposals going + into nullspace whenever they get ejected from a pipe - you will just magically + spawn at the turf that you were meant to be flung towards. + - balance: Sapient brimdemons can't hurt themselves with their own beams + - bugfix: bileworms will now attack + - bugfix: The plaguebearer can no longer depower virology on Tramstation + - spellcheck: hopefully changed all instances of the word 'mjolnir' to 'mjollnir' + StrangeWeirdKitten: + - rscdel: Removes the omni-lathe from blueshift secure tech storage. Replaces it + with some law modules. + TwistedSilicon: + - bugfix: invisimin verb now makes you invisible to all HUDs too! No more floating + healthbars or job identifiers giving you away while you sneak around. + san7890, Ghommie: + - bugfix: The Blessing of Insanity now grants no damage slowdown and free hyperspace + movement correctly. + vinylspiders: + - bugfix: Adds a bitrunning version of the double esword that has a 75% block rate + - bugfix: fixed a bug where loadout plushes would sometimes have their custom descriptions + reset under certain conditions + - refactor: fixed hard dels associated with anesthetic machine, & the mask item + will now cause ci to fail when placed via mapping + - bugfix: you no longer have to violently beat the anesthetic machine to death with + the anesthetic tank to load it + - bugfix: fixed a bug that would cause the anesthetic machine to become unusable + when a mask gets destroyed (e.g., in a fire or explosion) + - bugfix: fixes some of the runtimes in the loadout system caused by job/species + restricted items +2023-11-16: + Hatterhat: + - balance: Disabler SMGs and laser carbines (the full-auto sidegrades to the disabler + and laser gun, respectively) are now available for purchase through Microstar. + - balance: Cargo now stocks laser gun and energy gun crates again, which means that + they can be ordered through security's dep-order console. + Majkl-J: + - qol: Bluespace miner now has visual indication to its status and problem + - sound: The sound on the bluespace miner is no longer earpiercingly loud + - image: Added lights to the bluespace miner + - refactor: Refactored bluespace miner code + Melbert: + - code_imp: General heart code cleanup. + - bugfix: Heartbeat sound effects are no longer sourced to the exact tile you fell + into crit at + - bugfix: Abductors glands are less likely to become invisible or look wrong + - bugfix: Ethereal hearts are less likely to become invisible or look wrong, and + now properly spawn with their shine overlay + - image: Adds heartbeat animation to beating Ethereal Hearts + Motho: + - image: The FTU has replaced their aging fleet of advanced shipping containers. + Sector 13 is among the first few localities to enjoy them. + SkyratBot: + - qol: Dead human examines count as "soul departed" when the client is disconnected + or the human doesn't have a brain anymore. + - bugfix: drying rack now shows correct examines & screen tips. + - code_imp: tone of code organization for smart fridges overall. changed ui to typescript. + - qol: added more detailed examines & screen tips for smart fridges. drying racks + can be dismantled with a crowbar and not simply pried open with it. + - bugfix: Molotovs now splash before burning, not after + - bugfix: The Galactic Material Market now respects quantity of materials purchased, + removing them from the market when bought and preventing you from ordering more + than are available at a given time. + - qol: the donksoft vendor refill cartridge is now available at the service lathe + - bugfix: Fixed a small issue with disposal outlets leaving contents about to be + ejected stuck inside the pipe beneath it if deleted. + - rscadd: Emote Panel TGUI added in IC category. + - image: Crates got new sprites + - image: Added more crate styles + - balance: Male Goats should no longer spawn with an udder, instead of it just being + Pete. + Zergspower: + - bugfix: fixes the mass-decal and VV's in Blueshift - additionally repipes the + entire map to reduce its size + falconignite: + - bugfix: Lizard tail wagging graphics + jjpark-kb: + - bugfix: updated the drones backpack to include items that the /tg/ nodrop drone + toolbox has + - bugfix: drones can craft again + vinylspiders: + - rscdel: pipe gas visuals have been disabled for the time being +2023-11-17: + Dalm: + - image: A tea room sign for the bar + 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. + SkyratBot: + - image: light tube inhand sprites are now grey, as are the icons for the light + bulb/tube/mixed boxes + - code_imp: removed redundant procs `get_master_reagent_id()` & `get_master_reagent_name()` + - code_imp: merged `remove_all_type()` proc with `remove_reagent()` now this proc + can perform both functions. `remove_reagent()` now returns the total volume + of reagents removed rather than a simple TRUE/FALSE. + - code_imp: merged `trans_id_to()` proc with `trans_to()` now this proc can perform + both functions + - refactor: plumbing reaction chamber will now use only a single tick to balance + ph of a solution making it less efficient but more faster. Just make the reaction + chamber wait for longer periods of time to accurately balance ph + - refactor: reagent holder code has been condensed. Report any bugs on GitHub + - rscadd: Bitrunning Patch 1 features a host of changes! + - rscadd: Added randomized mobs to virtual domains, which will be indicated with + a unique icon. + - rscadd: New emag interaction with the quantum server. Antags will spawn more frequently, + and they can hack themselves onto the station. You have been warned. + - rscadd: Both living and dead players can now see which mob is going to spawn an + antagonist in the vdom. + - rscadd: 'Two new vdom antagonists: Cyber Tac and the NetGuardian. These unlock + at specific thresholds.' + - balance: You can no longer stack copies of the same ability with bitrunning disks. + - balance: Some of the disk items have been replaced with stronger versions. + - bugfix: You can no longer spy on crew using the advanced camera console on syndicate + assault. + - bugfix: Fixed the spawning mechanism of virtual domain antagonists. You should + now have a chance of playing as one. This chance increases as more domains are + completed. + - bugfix: Vdom antagonists shouldn't spawn at the end of the run any longer. + - bugfix: The preference for vdom antagonists has been changed to factor in the + new types. Check your preferences! + - bugfix: The quantum server will now show its balloon alerts to all observers. + - bugfix: Random domains should be fully random again. + - rscadd: Adds a chance that, when sharpened, a sufficiently potent carrot will + turn into a sword instead of a shiv. + - qol: if you die in a mech you automatically eject + - bugfix: Fixed catwalks over open space not making a sound when walked over. + - qol: The supermatter filters have been flipped on BirdshotStation to work like + the supermatters on every round, meaning the filtered gas goes in, and the non-filtered + gas comes out. + - bugfix: Space Ruin - All American Diner - Soda Machine now is scooted out of the + way + - bugfix: Bar Bots (and several other mobs) will no longer aggro on you if you click + on them with a "forceful" item from halfway across the room. + - balance: After a string of unfortunate incidents, persons with telekinesis have + been strongly warned against playing Russian Roulette, as they tend to hyperfixate + on the gun a bit too much and end up firing it directly at their head. + - bugfix: grabs no longer trigger krav maga + - rscadd: Androids now have robotic brains instead of organic brains. + - bugfix: 'The CRAB-17 will now only take whole credits, as fractional credits were + found to be worth less. + + :cl:' + TheSS13Melon: + - rscadd: Adds a "negative" perk called gifted which gives 6 free points. + Vekter (on behalf of Constellado): + - image: 'Added a new bar sign as one of the winners of our Bar Sign Contest: "The + Assembly Line".' + mogeoko: + - bugfix: Turbine parts will now use an amount of materials no greater than needed + for the upgrade +2023-11-18: + SkyratBot: + - refactor: Secure briefcases are now actual briefcases. + - refactor: Wall safes are now structures, rather than items that can't be picked + up. + - refactor: Lockable items (Wall safes & Secure Briefcases) now use TGUI. + - bugfix: gutlunches will stop having too many children + - balance: gutlunches are no longer in the mining faction + - bugfix: After correcting a slight miscalculation, Bit Avatars now have hands again. + - rscadd: Chat Reliability Layer + - code_imp: TGUI chat messages now track their sequence and will be resent if the + client notices a discrepenency +2023-11-19: + Deek-Za: + - image: New Digitigrade icons for red sec officer and HoS uniforms. + LT3: + - bugfix: Tram will no longer electrocute innocent, law abiding crew trying to use + the crosswalk when there's no tram in sight + Melbert: + - refactor: Refactored another large chuck of attack code, primarily involving melee + item attacks and non-human mob attacks. Report if you see anything weird + - bugfix: Pacifists clicking on simple robots or silicons no longer causes sparks + - bugfix: Blocked thrown batons are now properly... blocked + - bugfix: Plates now respect the weight class of items on top. + - bugfix: Fried items now respect existing volume cap. + - bugfix: Smartfridges now don't accept bulky food items, good thing we have none + of those right guys? + SkyratBot: + - bugfix: ' Attaching a circuit to the air alarm now reads from the correct turf.' + - bugfix: '"Old Chat" (AKA: The old-styled non-TGUI raw-HTMLesque chat that you + might see when it prods you with the "Failed to load fancy chat!" issue) should + now get all text messages as expected.' + - bugfix: you can climb over more stuff with a climbing hook + - rscadd: Abductors have bigger brains. + - bugfix: You can once again use alt to turn while strafing in a mech + - balance: Paint cans hold 20x more paint than before, painters rejoice! (Janitors + cry more) + - qol: Implanted HUDs can now be toggled on and off with an action. + - bugfix: Fixes a runtime when the radioactive nebula trait runs with a map that + has no virology area. + Thlumyn: + - rscadd: Telekinesis now lets you subtler at range. + yooriss: + - balance: Gravity suspension harnesses now arrive in crates instead of goody cases, + meaning that they can be ordered via departmental budgets AND privately purchased + if needed. Rizz your local cargotech to defeat gravity, as the universe intended. +2023-11-20: + LT3: + - bugfix: Delam counter will correctly show 0 the shift after a delam + Melbert: + - admin: Adds a button to check-antagonists that allows admins to send Nuke Op reinforcements + with a single button + - admin: Nuke Ops check antagonists now show you full war status (declared / not + declared) + - bugfix: Fixes multiple nuke teams (or an admin) being able to declare war at once + - rscdel: Heretic side path points are gone + Nerev4r: + - balance: Hemophages now have higher healing numbers, and liquid blood helps non-bone + wounds like tea does. + OrionTheFox: + - bugfix: fixed the Face Scarf not changing the icon correctly when toggled + - bugfix: fixed Vapes checking for digitigrade legs, rather than muzzles + - image: added muzzle compatibility to the Face Scarf + Paxilmaniac: + - rscadd: Adds a new weapon given to blueshields and available through cargo if + you REALLY wanted, the Bogseo submachinegun, firing .585 and able to give both + you and your target an equally bad day! + - image: Sprites for the Bogseo done by me :333 + Rhials: + - spellcheck: The Grey ID Cargo Crate is now spelled properly. + - rscadd: 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: At the request of the more vain members of the cause, hair dye has been added + to the Operative Firebase dorms. + SkyratBot: + - bugfix: fixes bug that was preventing high luminosity eyes' light from turning + on + - bugfix: fixes eyes being on the wrong side of the head when facing east/west + - bugfix: Fixed the infinite growth serum exploit. + - bugfix: Fixed generic nutriment processing even when dead. + - rscadd: The mother hallucination has more possible one-liners now. + - bugfix: debug chem synthesizer works again. cleaned up chem dispenser, portable + chem dispenser & debug chem synthesizer ui code + - qol: ui for displaying beaker reagents for debug chem synthesizer has been improved. + Now displays input list for adding reagents + - bugfix: Hydrotrays consume nutrients according to their proportion in the mix, + instead of randomly picking reagents to consume every cycle. + - bugfix: The aquarium auto-feeding feature now works correctly. + - bugfix: Stopped a DS crash when shooting a rebar crossbow in specific circumstances. + - bugfix: Hardcore Random will no longer assign incompatible quirks. + - bugfix: Chat shouldn't bluescreen at the start of the round + - bugfix: Admins can spawn bitrunning events (again!) + - bugfix: fixed a race condition with mutations + - bugfix: Fixed an issue with un-hidden (alien, syndie etc.) nodes not being researchable. + - bugfix: selling large amount of mats in cargo should not give you infinite credits + - bugfix: runtime when adjusting material market after buying + - spellcheck: Some roundstart tips have been made clearer regarding "suits" vs. + "exosuits". + - code_imp: Removes & merges `get_multiple_reagent_amounts()` proc with `get_reagent_amount()` + inside reagent holder + - code_imp: Removes & merges `get_reagent()` proc with `has_reagent()` inside reagent + holder + - code_imp: Removes & merges `has_chemical_flag()` proc with `has_reagent()` inside + reagent holder + - refactor: Reagent holder code has been further compressed. Report bugs on github + - qol: Nearly every ghost alert should now feature a "VIEW" button, even those with + click interaction. + - rscdel: Ghost alerts no longer show the entire message in the tooltip, instead + have been replaced with titles. + - spellcheck: Nukie and ERT defibrillators now reference combat mode instead of + intents. + Tattle: + - bugfix: admin painting manager works again + nikothedude: + - qol: Examining guns now shows you the safety keybind + vinylspiders: + - bugfix: fixes missing examine_more text when double examining a mob (e.g. dogtags + will now display) + - bugfix: clickable links in examine text will now be surrounded in [brackets]. + xXPawnStarrXx: + - rscadd: Added a stone griddle + - rscadd: Added a seed shelf & produce bin + - rscadd: Crafting recipes for stone cooking structures. + - rscadd: Crafting recipes for Paxil's fences. + yooriss: + - refactor: Icemoon wolves now use the basic mob framework and should act more intelligently, + defending their pack. + - rscadd: Icemoon wolves can be tamed with slabs of meat and can be ridden as mounts + once friendly. Being rather large dogs, they also have access to most of the + pet commands you'd expect, such as fetching things, and violently mauling people + their owners point at. +2023-11-21: + Melbert: + - bugfix: Atrocinating mobs will now behave more as you'd expect. Meaning they don't + slip on wet patches, can't trigger bear traps / landmines / mouse traps, ignore + conveyors, and can walk over tables and railings. + - bugfix: Floating mobs are unaffected by conveyor belts, acid (on the ground), + glass tables + - bugfix: Floating mobs won't squish stuff like roaches anymore + - bugfix: Fixes bear traps triggering on floating / flying mobs + SkyratBot: + - balance: signers no longer suffer from social anxiety's speech changes when they + go non-verbal. Other effects are maintained. + - rscadd: The battle against Maint Khan's forces rages on in the periphery stations + of the Spinward Sector. And with it, a new breed of unarmed warrior has emerged; + the cybernetic martial artist. Nanotrasen, rather than quell the minor maintenance + civil war brewing in their sector, have chosen to exploit this conflict to push + their weapons and cybernetics research to new heights! + - rscadd: Advanced cybernetic arms can be printed at the Robotics exofabricator + once researched. They are unlocked by researching the Advanced Robotics Research + node. + - rscadd: Advanced cybernetic arms are more durable than standard limbs, and also + have higher unarmed potential. + - balance: Strongarm implants now utilize the attacking limb's unarmed potential + to determine damage and potential armor penetration. It also does additional + stamina damage (1.5x punch damage) + - balance: Surplus prosthetic limbs contribute more of their carried damage to overall + health (AKA they make you actively more vulnerable to damage), and deal less + damage with unarmed attacks. Take Quadruple Amputee at your own risk. + - bugfix: When you successfully block a body collision, it does something rather + than nothing at all. + - qol: Allergy Dogtags (and any other dogtags, really) are now Tiny items and can + fit into wallets. + - image: 'Following now have unique item sprites: syndicate war declaration radio, + curator and chief beacon''s, chaplain beacon.' + - image: 'Following now have unique inhand sprites: radio, export scanner, walkie-talkie, + syndicate war declaration radio, curator and chief beacon''s, chaplain beacon.' + - bugfix: healing viruses can no longer have floor virus side effects + - balance: The SC/FISHER disruptor pistol is now more likely to show up in black + market uplinks. + - balance: The SC/FISHER now has more range (21 tiles up from 14), and is usable + by pacifists. + san7890 and Ben10Omintrix/Kobsamobsa: + - refactor: Parrots (including Poly) have undergone a massive refactor, please report + any bugs or unexpected behavior that you may encounter. + - qol: Left-clicking a parrot with a cracker will tame it, right-clicking a parrot + with a cracker will now feed it the cracker. + yooriss: + - rscadd: Examining tamed companions of any type with shift double-click now gives + a brief indication as to their overall health. This also includes a handy reminder + on how to heal pets if they get injured. + - rscadd: A new recipe for anointing bloodresin is now available exclusively for + Primitive Demihumans, made from 80u liquid gibs and 20u of blood. Bloodresin + invokes traditional rites of the Hearth to give names to worthy creatures. Using + this in poor ways may displease the Gods. Woe upon your lineage. + - rscadd: A single pack of glowshroom mycelium has been added to the Hearth's starting + seed stores for the benefit of creative healers, shamans, and radiation enthusiasts. +2023-11-22: + Bumtickley00: + - balance: The CMO's hypospray now holds 60u, and can be set to inject smaller amounts + of reagents + Jane: + - rscadd: Bargonia Bar Sign for Cargo Bar Enjoyers + LT3: + - bugfix: Cursed/bad luck omen will now stick with the player for more than 1 incident + Melbert: + - refactor: Refactors how ethereals update their color when damaged. + - balance: Transformation sting now lasts 8 minutes, down from permanent. However, + the effect is paused for dead and stasis mobs, making it permanent SO LONG AS + they stay dead or in stasis. The effect is also permanent if used on a monkey. + - balance: Transformation sting now costs 33 chemicals, down from 50. + - balance: Transformation sting now costs 2 dna points, down from 3. + - bugfix: Transformation sting works on monkeys again. + - refactor: Refactored a bit of human randomization. + OrionTheFox: + - bugfix: fixed a few missing/outdated HUD icons, including the Bitrunner's SecHUD + icon, and switching the "Suspected" tag to match the color used on consoles + SkyratBot: + - bugfix: '[Icebox] Atmos techs have access to the Engineering front desk windoor.' + - qol: '[Icebox] Security''s lower floor is not as easily cut off from the powernet + anymore.' + - bugfix: removes a duplicate bookcase in icebox permabrig library + - bugfix: Androids cannot have overdose effect by any chems. + - spellcheck: Examining a human mob as an observer displays "Quirks", not "Traits" + - bugfix: adds back one way exits to Tramstation science's entrance + - bugfix: Removed a duplicate grille from the abandoned mime outpost space ruin, + and replaced the 'energy weapon lenses' with spent revolver rounds. + - 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. + - bugfix: Meta's recycler works again + - qol: Slightly moved the universal enzyme on meta's kitchen to a prettier spot. + - bugfix: The universal enzyme on meta's kitchen is no longer unecessarely varedited. + - bugfix: The plasma river is about as deadly for animals as it is for humans. + - bugfix: Golems can now wade in the plasma river unscathed. + - bugfix: Undismemberable limbs will no longer be dismembered by the plasma river. + - balance: Golems and plasmamen cannot become husked. + - image: Robotic and Skeletal parts will remain distinct while the rest of the body + is husked. +2023-11-23: + Nerev4r: + - rscadd: NanoTrasen, after extensive testing in a variety of stars' light wavelengths, + have deemed their PDAs ready enough to actually use the onboard cameras they + already had. + SkyratBot: + - rscadd: Certain types of pens now function like you expect they would when inserted + into a foam dart + - qol: Examining a foam dart closely will show you how to modify it, or what it + is modified with + - bugfix: Skillsoft's skillchip stations are now ADA-compliant (Astronauts with + Disabilities Act). Paraplegic characters can now implant themselves with skillchips, + the same as anyone else. + - qol: adds pixel perfect 4x, 4.5x, and 5x + - bugfix: autolathe does not diminish materials from custom material items like + toolboxes when printing them in bulk. Also does not gray out that item in the + UI + - bugfix: autloathe correctly updates UI after inserting items into it + - bugfix: fullupgrade chem dispensers will now spawn with all their chems + - balance: Judo Joe, archnemesis of Maint Khan, has begun re-airing his midnight + infomercials shilling his extremely expensive Tackle Supreme Judo Karate Training + video tapes. Unable to pass up a 'bargain', Nanotrasen has purchased these tapes + en masse. Tackling techniques have started to improve, as well as Nanotrasen's + tackling instructional algorithms within tackle gloves. + - balance: The outcomes for tackling are more equalized. It isn't as feast or famine, + and should be somewhat more controllable without becoming too severe. + - rscadd: Blocking successfully against a tackle will force the tackle to be a neutral + outcome. + - rscadd: Unarmed effectiveness from arms now contributes to attacking with and + defending from tackles. + - rscadd: Those who refuse to use firearms (like Sleeping Carp users and insane + unholy berzerkers) are better at tackling others. + - rscadd: Riot specialized armor, and not just riot armor, now contributes meaningfully + to tackling effectiveness. + - balance: MK.1 Swat Suits, the ones that come in SWAT crates, now functions similarly + to riot armor. + - rscadd: Settlers from the outer rims have noticed they aren't very good at protecting + themselves against Judo Joe's clearly discriminatory tackling techniques. + - rscadd: Security lockers come with gripper gloves, security vendors now sell them + as standard items, and the HoS' garment bag now has a pair of gorilla gloves. + Gripper gloves have a positive skill bonus to tackling. + - rscadd: Being insane also makes you INSANELY good at tackling but also INSANELY + likely to eat shit on a whiff. DO OR DIE, BITCH. + - refactor: Shoving slowdown and all its implementations now use a status effect, + Staggered. + - bugfix: Fix refresh button in log viewer + - qol: Allergy Dogtags (and any other dogtags, really) are now actually whitelisted + to fit into wallets. + vinylspiders: + - code_imp: 'The currently operating rust-g version on a live server is posted to + places like the runtime.log, in the same place where the revision information + and any applicable test merges already were. /:cl:' +2023-11-24: + Danny Boy: + - rscadd: Added Affection Aversion quirk which stops affection modules + Iajret: + - bugfix: borers can once again fill their hosts with various wonders of chemistry + Majkl-J: + - bugfix: Projector hud traits now get applied correctly + - refactor: hud_trait gets deprecated, using clothing_traits instead + Nerev4r: + - bugfix: Chameleon mutation is toggleable again. + - rscadd: Certain firmware updates rolled out, finally, in Sector 13 have allowed + machines to emulate personal computers within their brains. + RatFromTheJungle: + - bugfix: fixes punches doing like triple stamina damage, by removing a 2.6x multiplier. + SkyratBot: + - rscadd: Cyborg inducer for engineering borgs + - balance: The borg RPED can hold as many part as the BSRPED now + - balance: Cyborg chargers now draw from the power net as cell chargers do + - bugfix: RCD can build directional windows on top of existing grills & without + them. + - bugfix: gutlunches now produce miner salve instead of milk, as well as the other + reagents if fed the correct ore + - rscadd: A new skill chip can be found in maintenance or purchased from the vendor, + allowing you to experience food in new and exciting ways. + - rscadd: Abductors also have access to this incredible power, simply using their + genius level brains. + - code_imp: removes & merges `expose_multiple()` proc into `expose()` proc inside + reagent holder + - code_imp: removes `conditonal_update()` proc & `on_update()` proc inside reagent + holder and reagent + - refactor: Reagent code has been trimmed and split into multiple files. report + bugs on github + - qol: Mafia panel no longer shows vote buttons if you're on stand, shows the roles + of revealed players, and list out who is on the stand, if any. + - qol: gives roundstart prisoners a key memory of what their crime is + - admin: Remove "Make AI" from VV dropdown + Smol42: + - rscadd: Added four acrador snouts. + The Sharkening: + - refactor: Removes unused Kilostation Automapper templates + TwistedSilicon: + - bugfix: Window damage overlays have been fixed. + jjpark-kb: + - rscadd: you can craft the gutlunch trough + - qol: you can fill the gutlunch trough with a mining bag + - rscadd: you can hammer glass shards to get back sand +2023-11-25: + SkyratBot: + - rscadd: Adds an arctangent2 component to circuitry! + - image: SM shard sprite updated + - bugfix: Emag overlay on lockers fixed + - image: New locker sprites + - image: Added new lockers + vinylspiders: + - server: Added a preventative measure to prevent calling both TGSHardRestart and + TGSReboot, as well as potentially invoking sensitive procs that are only meant + to be called once. + - bugfix: Fixes a bug where the computer ui wouldn't open up when using a pda on + a synth's eyes +2023-11-26: + Rhials: + - qol: The area preceding Metastation Cargo's front door is now denoted as being + the "cargo lobby". + - qol: Gives Cargo areas its own wire layout, instead of having it use the same + wires as Service areas. + - code_imp: Bitrunning/Bitrunning Den areas are now cargo area subtypes, rather + than station area subtypes. + SkyratBot: + - bugfix: Rebar crossbow bolts are now reuseable again, without risking crashing + clients when fired at point-blank range. + - bugfix: Fixes cyborged heretics seeing influences. + - bugfix: fixes a runtime in footstep code that would prevent the fov effect from + playing to nearby mobs + - code_imp: HUDs no longer use their own trait variable + - bugfix: MOD quick carry modules now give the correct carry speed bonus + - qol: Bitrunning glitches will not show up in the roundend report unless they escape + the virtual domain. + - bugfix: Fixes nebula killing everyone when forced by an admin on icebox + - qol: Mothuchi's pizzeria has been improved slightly! Order yourself a fresh mothic + pizza today! + nikothedude: + - bugfix: Radios can be used in mechs + sqnztb: + - bugfix: bitrunners can now drop off their caches properly on blueshift + vinylspiders: + - bugfix: Fixed a minor runtime when hallucinations are ending. +2023-11-27: + Paxilmaniac: + - rscadd: A whole host of new and unique items has been added to deforest medical + in cargo to spice up their admittedly quite lame selection! Have a look when + you get the chance why don't you? + - image: So, so many sprites for new stuff made by me. + SkyratBot: + - refactor: Slimes's colour, core type and mutation list is now held in a slime + type datum + - code_imp: Slime's variables have been documented, and renamed a bit to add clarity. + Please report bugs that might stem from renaming. + - bugfix: Slimes are not longer prevented from attacking pacifist humans. + - qol: Slime scans now display the actual amount of genetic instability, instead + of hiding it if a slime doesn't mutate further, or tweaking it if it might mutate + back into itself. This will make it easier to parse which slime to breed further + to get a rainbow slime. + - bugfix: You can once again repaint robotic limbs to use alternate skins + - bugfix: Poly should now remember phrases between shifts. + - code_imp: removes unused proc `generate_possible_reactions()` from reagent holder + - bugfix: the dismemberment moodlet will now properly clear for ethereals who regrew + a limb in their resurrection crystals + - qol: Oculine now tastes bitter, and not like toxin. + Stalkeros: + - rscadd: '"Ancient Milsim" bitrunning domain that lets you shoot guns at CIN people + as SolFed people.' + - code_imp: Added a way to add Skyrat-exclusive virual domain safehouses. + jjpark-kb: + - rscadd: added a new derelict station (for drones)-- Babylon Station 13 + nikothedude: + - rscdel: Removes a irrelevant quirk restriction of a nonexistant quirk + - rscadd: Resonance degradation disorder, a highly customizable quirk that acts + as a far more in-depth version of DNR +2023-11-28: + GoldenAlpharex: + - rscdel: The Radioactive Nebula station trait will no longer cause radiation storms, + but all of its other effects remain. + Rhials: + - qol: Bar signs can now be purchased from cargo. Neat! + - qol: Bar signs can now be deconstructed with a screwdriver and wrench. + - qol: Bar signs can now be smashed to pieces, rather than just disabled. + SkyratBot: + - code_imp: Removed currency value for free products + - bugfix: Ranged Guardians (Holoparasites/Power Miners/etc.) can no longer use ranged + attacks in scouting (incorporeal) mode. + - bugfix: fixes an overlay lighting hard del + - bugfix: flashlights placed inside of backpacks and other storage items that were + on the floor will no longer allow light to shine through + - bugfix: fixed a null client runtime in advanced camera console + - bugfix: People exposed to romerol while alive will once again revive as zombies + on death. + - bugfix: fixed a runtime in handle_dead_metabolism() + Smol42: + - rscadd: Added custom donator item. + Thlumyn: + - rscadd: Added pet owner quirk to spawn with a pet in a pet carrier. + nikothedude: + - spellcheck: The vox N2 tank no longer directly references vox + sqnztb: + - bugfix: bitrunners can now drop off their caches properly on void raptor under + certain roundstart access conditions. +2023-11-29: + Ghasterino: + - bugfix: Made the hypospray actually use the "WAIT_" values for the respective + mode it's using. + - bugfix: Made the CMO hypospray actually instant, instead of seeming instant in + code but not actually instant in game. + LT3: + - bugfix: 'Disease outbreak: classic spawned from the admin secrets panel no longer + fails to start' + - bugfix: Disease outbreak provides a message about why it fails to start + - bugfix: Getting beheaded by the tram increments the scoreboard + MGO: + - rscadd: Introduces new inverse reagents for Salicylic Acid, Oxandrolone, Salbutamol, + Pentetic Acid, Atropine, Ammoniated Mercury and Rezadone! + Majkl-J: + - qol: Synths can now recharge in borg chargers + - qol: Synth brain surgery now actually targets the synth brain location + Rhials: + - bugfix: Renames a bar door from "Kitchen" to "Bar" on Metastation. + SkyratBot: + - code_imp: verb callbacks will no longer execute if the original client disconnected + - bugfix: fixed chemical closet door not rendering when open + - bugfix: During the "Cursed Items" wizard event, you should only have smoke spawn + on you if you actually had a cursed item equipped to you. + - bugfix: fixed remaining footstep runtimes + - code_imp: Made ARDS death check respect maxHealth. + - bugfix: The quick carry module should now correctly apply the appropriate traits + - image: Premade cleanbots are now always blue. + - bugfix: you no longer get an empty crate when ordering bluespace crystals from + the galactic material market. + - bugfix: All drones now can craft again + - rscadd: Non-Shy drones can now strip people of their things + - bugfix: Centered the "pull" button properly over the drop button + - bugfix: You can now destructively analyze syndicate and abductor items. It works + this time, I promise! + itseasytosee: + - bugfix: staggered targets now have the correct chance for escaping grapples. + - spellcheck: changed attack verb for punching a grappled target + rarytech: + - bugfix: fixed the displaying of tacticool clothing for digi legs +2023-11-30: + GoldenAlpharex: + - bugfix: The Radioactive Nebula station trait will now respect its upper intensity + cap set at one hour and forty minutes, no longer scaling past that, as was initially + intended. + Majkl-J: + - bugfix: Synth eyes now inhabit the correct body zone slot + SkyratBot: + - rscadd: Standing on structures such as crates, tables and bed will now look like + it. + - bugfix: bitrunning den shows up on the camera console now. + - bugfix: Fix bitrunning triggering claustrophobia + Smol42: + - bugfix: Fixed warm coat, sweaters for digi sprites. + capsaicinz: + - spellcheck: your fiscal image is no longer actualized. diff --git a/html/changelogs/archive/2023-12.yml b/html/changelogs/archive/2023-12.yml new file mode 100644 index 00000000000000..2dc1da36055eb2 --- /dev/null +++ b/html/changelogs/archive/2023-12.yml @@ -0,0 +1,1130 @@ +2023-12-01: + SkyratBot: + - rscadd: turns triple ai mode into a station trait +2023-12-02: + MidoriWroth: + - bugfix: Icebox chemistry lab shutters are controlled by the button in the chemistry + lab and not in the pharmacy again. + Paxilmaniac: + - rscadd: All AK-whatever guns, the NRI pistol, and the nri smg, have been replaced + with a new selection of weapons now also for sale in the nearest cargo console. + - rscadd: The CIN clothing in company imports will now spawn with random colors, + rather than always being grey. + - sound: New Lanca firing sound from TGMC + - image: Resprites and sprites for the new weapons by me, Paxilmaniac + SkyratBot: + - rscadd: Instead of punished sect healing people like the normal bibble- you take + their burdens on instead! + - bugfix: Cyber cops are now equipped with the correct outfit. + - bugfix: Changelings will no longer get an objective to impersonate crew without + absorbable DNA. + - bugfix: Changelings will no longer start without an escape objective. + - bugfix: fix parrots not appearing dead sometimes + - spellcheck: fixed typo in one of spacer's moodlets + - bugfix: shield wall gens actually use power now + - qol: shield wall gens may now be rebuilt and use some balloon alerts, and have + wiring + - code_imp: The singularity processing is a bit more important than the other subsystems. + - admin: A new debug verb to turn yourself into an MMI(almost the funniest thing) + - bugfix: MMI's inside mechs can now properly open doors like there posibrain counterparts + Vekter: + - rscdel: Replaced the "monkey cube" in Birdshot's tool storage with a different + "monkey cube". + - rscadd: Added a fun surprise item to Birdshot's tool storage to compensate for + the above change. +2023-12-03: + Hatterhat: + - bugfix: The toxin damage from overdosing on TWitch now respects server tickrate/REM. + Paxilmaniac: + - rscadd: A whole host of new armors for protecting yourself from being turned into + red mist by a psycho with a rifle are for sale at relatively low cost from Sol + Defense in cargo! + - image: Sprites for every piece of new armor done by yours truly. + SkyratBot: + - qol: psyker echolocation cooldown time has been reduced from 2 to 1.8 seconds + - bugfix: psyker heads no longer render an overlay of not having eyes + - bugfix: Sign Language action properly toggles between an active/inactive background + again. + - rscadd: Agent IDs once more trick Beepsky into treating you more leniently. + - rscadd: Prisoner IDs make Beepsky treat you somewhat more suspiciously, as do + Syndicate IDs. Wearing a Centcomm ID means that Beepsky is aware that you are + above the law. + - rscadd: Player-controlled security bots can view someone's assessed threat level + by examining them. + - balance: Honorbound no longer cares about innocence when it comes to lesser creatures. + They can still be considered unready in some cases. + - balance: Attacking a cultist with a halo or a nuclear operative first instantly + makes THEM guilty, allowing further attacks. + - balance: More favor for converting someone to the honorbound rules + - bugfix: Mod links are now disabled in the virtual realm. + - bugfix: Fixed an issue with the offsets of ridden vehicles on tables, and another + when buckled to a bed. + - bugfix: crafting food or any other items that require reagents will not leave + behind blank reagents. That and properly updates the holder those reagents are + stored in +2023-12-04: + Cursor, Delbert Grady: + - rscadd: The Overlook- Err 'Twin'- Whatever the Space Hotel is called has had some + minor additions. + HoodMilk: + - rscdel: Removed the holiday restriction on red-colored Christmas clothing. + Melbert: + - rscadd: Falling down a z-level while standing now damages your legs rather than + your entire body. This also means falling down multiple z-s may rarely break + your legs. + - rscadd: Felinids now land on their feet if they fall down a z-level while standing. + This replaces the knockdown with a short slowdown, and also has the trade-off + of causing more leg damage. + - rscadd: Cats can now fall z-levels without sustaining damage. + MrDerpi: + - bugfix: "synth livers not emp-able\n/\U0001F191\n\n\ + " + MrMelbert: + - bugfix: smartfridges no longer show false overlays + Nerev4r: + - bugfix: Lopland Security has finally negotiated an order of blue tackle gloves + with the FTU, abandoning the red NanoTrasen models. + Rhials: + - qol: Bar signs ordered from cargo will no longer be access-restricted. + - spellcheck: Fixes a typo in the Factory Quartermaster outfit name. + SkyratBot: + - bugfix: SecTech restocking units are now actually named SecTech restocking units, + and not Generic restocking units. + - admin: Removed the "Turn Target into MMI" right click context menu verb entirely, + and instead added the same command as a VV dropdown on human mobs. + - rscadd: Added the daily (roundstart) message server key to the Chief Engineer's + memories. + - rscadd: Added new roast dinners, able to be cut into smaller portions hopefully + in time for the Christmas season. + - rscadd: Instead of teaming up random people together, blood brothers will now + start out with one player and let them convert a single other person over to + blood brother using a flash. + - rscadd: 'Festival Sect has 3 new rites: Cogitandi Fidis, Portable Song Tuning, + and Illuminating Solo.' + - balance: lowers threshold for triggering a final effect. Consult your Cogitandi + Fidis for more information + - bugfix: Some mapped-in gifts that were supposed to guarantee a certain gift weren't + spawning that exact gift type, this has been patched to reflect the mapper's + intent. + - admin: The Player Panel should now contain the unique mob tag associated to a + certain mob that a player might inhabit at one time, which is stored on their + player details datum on their client (which is guaranteed to always exist). + - admin: The "Old Names" details of a player is now visible in their own personal + per-player player panel. + - server: Minimum compile version has been bumped to 515. clients still support + 514 but we're gonna start using 515 restricted features for serverside now. + - bugfix: Fixed some oopsie whoopsie with elevation, trams and beds causing people + to visually ascend or descend to heaven or hell. + - bugfix: Blocking a tackler no longer causes things to go haywire and stun the + tackler/the tackle victim. + - bugfix: soups and other reactions where large quantities of reagents are required/present + should not have a random chance of reacting forever. + - bugfix: reactions which are overheated should diminish all the way to 0 + - code_imp: cleaned up code in `datam/equilibrium` in general. Slightly optimized + soup reaction code + - refactor: medbots are now basic bots. please report any bugs + - rscadd: medbots can wear hats! + - balance: Clone damage dealt by the cosmic blade has been replaced with organ damage + and increased burn damage. Clone damage dealt by the cosmic beam has been removed. + The star gazer now deals burn damage instead of clone damage. + - bugfix: The health of mobs combo'd by a cosmic blade will now update correctly. + - rscadd: Added sprites for bone spears to match the other bone items. + - rscdel: Removes the slime's reagent holder. This will make them not slow down + from somehow imbibing morphine or frostoil. + - spellcheck: Occurrences of "recieve" has been changed to "receive". + - bugfix: Heretics can no longer cast all of their spells while in jaunt + - sound: Added human laughter to felinids + - balance: The Meat Hook will now "ground" you whenever you fire it out at someone. + You get a very small immobilization every time you fire, which "upgrades" to + a full immobilization whenever you actually hit an atom and start to drag it + in. + - bugfix: A chain should now show up as you drag in something with the meat hooks. + - bugfix: Meat hooks should no longer play the "magical gun" suicide if you were + to use it, but instead do their own unique thing. + - bugfix: Digi legs work with the QM's jumpskirt + - refactor: cats are now basic pets. please report any bugs. + - rscadd: the cake cat and bread cat can now help the chef around in the kitchen + Vekter: + - rscadd: Added a new hostile variant of cats, "feral cats". + - rscadd: Added a new traitor item, "feral cat grenades". For 5 TC, you too can + throw a grenade at someone and make five cats maul them to death. + - bugfix: Fixed damage ranging on feral cats + - bugfix: Fixes hole in Birdshot hallway + honkpocket: + - rscadd: The 'fake announcement device' from the OPFOR selection has received a + fully customizable upgrade. +2023-12-05: + SkyratBot: + - bugfix: 'Janitors rejoice (or lament): Floors should now be dirty shift-start. + + / \:cl:' + - rscadd: Heterochromatic, Signer, Spacer, and Voracious quirks are now properly + accounted for in medical records. + - bugfix: Rebirthing from headslug properly reapplys void adaptation +2023-12-06: + Cursor on behalf of Jock. Co: + - bugfix: Modern Glasses can be stomped on. + LT3: + - bugfix: The character prefs tab bar will no longer disappear when you try to select + augments + - bugfix: GAP machine will check for duplicate payout of partially filled cards + SkyratBot: + - balance: Deleting and reprogramming pipes/devices with RPD is now INSTANT! + - rscadd: The NTSS Independence (Cruise Evac Shuttle) has received a makeover! Engineering + crews are still working on it, but it is operable and available for those who + have the money to rent it. + - qol: Converting someone will now give a chat message. + - bugfix: Blood brothers can no longer get other antagonists, I hope. + - rscadd: adds propeller hats, rainbow bowties, and swirl lollipops + - rscdel: Removed clone damage. + - rscdel: Removed the decloner gun. + - rscdel: "Removed clonexadone.\n/\U0001F191\n\n" + vorpal-void: + - bugfix: yeah here we go, APC recharging, mission accomplished. + - code_imp: power_cord.dm, whooping 4 lines of code. +2023-12-07: + Chimpston, atlasle and aBlimpfox: + - image: "added Cult Cove, Neon Flamingo and Slowdive bar signs\n/\U0001F191" + Cursor.: + - rscadd: Old Sol Police hat sprites are usable via Police Cap reskinning. + Hatterhat: + - bugfix: The Peacekeeper Equipment Vendor has been restored to upstream standard + contents with adjustments where needed, meaning that energy holsters are available + as a premium option. + - bugfix: 'Code-side thing: the reskinned SecTech and reskinned SecDrobe are just + renamed, now, and not using entirely redundant resupply packages.' + HoodMilk: + - rscadd: Changes the chemicals and traits found on xenobotany plants, to be more + interesting. + KannaLisvern: + - bugfix: '*gaspshock being only limited to humans' + - rscdel: removes a detective cabinet from blueshift + - qol: puts an extra set of gear into the det locker on all maps + LT3: + - code_imp: Lighting brightness lowered and range increased reflecting new fixture + positions + Lutowski: + - rscadd: You can now craft metal shelves with iron sheets. + OrionTheFox: + - qol: Wall Lockers can now be rebuilt! The wall mounts can be crafted the same + as a default closet, with 2 iron in-hand. + - image: resprites (almost) all Skyrat lockers, including wall-mounted ones! They + should be much more in line with TG's sprites now. + - bugfix: fixed several bugs with wall-mounted lockers, and formatting inconsistencies + of modular lockers + Plum-but-gayer: + - rscadd: Overbearing authority figures rejoice! Holobadges are now available in + the neck loadout slot and the Armadyne peacekeeper vendor, now in a pleasant + Lopland blue. + - bugfix: Detectives can now actually swipe their ID on their holobadges. + SkyratBot: + - rscdel: Stagger animation no longer fires longer than it should on dead bodies + or on dead bodies period. + - admin: Spawning in Nar'Sie will no longer automatically trigger the round-ender, + you need to specifically start this chain of events through the new VV Dropdown + Option "Begin Nar'Sie Roundender". + - rscadd: Added a new modular bitrunning domain - Starfront Saloon. + - balance: Psyker shuffle domain was made slightly easier and has been given more + rewards. + - bugfix: Medibots made from advanced medkits works again + - bugfix: Medibots made from brute medkits have their bonus healing again + - bugfix: Medibots can use robotic emotes again + Tattle: + - balance: you can no longer teleport into chasms + rarytech: + - rscadd: Added digi variations for tactical Hawaiian outfits + - bugfix: fixed digi blood-red pajamas + theselfish: + - spellcheck: You can now holo-display your coat. No idea what a Dislpay is. + xXPawnStarrXx: + - rscadd: Added new storages for tribals/greytiders. + - rscadd: Added wooden bowls. + - qol: made soups clean, for chefs. +2023-12-08: + GoldenAlpharex: + - bugfix: The typing indicator has overcome its shyness and is now back to its usual + form. + KannaLisvern: + - qol: Good Assistant Points punchcard now fits in wallets. + Melbert: + - qol: Replaces unused xeno weed extract item in abandoned crates with a random + assortment of cannabis. + Nerev4r: + - rscadd: Hearthkin have discovered a new herbal remedy to clear the sinuses, and + now enjoy bloodhound-level scent tracking as they did long ago. + - rscadd: Hearthkin have discovered a population of grizzly bears on the ice moon, + and have appropriately skinned some of them. + OrionTheFox: + - balance: removed all the unsecured gear on the ERT Ferry. Consider this a reminder + that all ERTs are expected to be fully prepared before departing for the station. + RatFromTheJungle: + - bugfix: colorable maid's dress no longer has a hole in it + SkyratBot: + - bugfix: medbots now drop hats when tipped and drop their items when they explode + - bugfix: fixed mutations holding onto refs after removal + - bugfix: fixes timed dna injectors + - rscadd: TGUI Stack elements can now be zebra-styled (alternating colors for contrast) + - bugfix: Fix cult halo and eyes affecting deconverted cultists + - image: resprited CTF ID Cards + SomeRandomOwl and Iamgoofball: + - bugfix: Hash Bricks and Dabs are no longer recursive + honkpocket: + - rscadd: Adds various hair ties, they hold up your hair. + - rscadd: Adds a -8 negative quirk called narcolepsy +2023-12-09: + ATHATH: + - bugfix: Spacemen can no longer use curses to cheat at Russian roulette by selectively + blocking attempts to shoot themselves. + - rscadd: A Russian revolver has been added to the contraband section of each Good + Clean Fun vendor. + KannaLisvern: + - qol: Synthetics no longer have the same food prefs as humans + SkyratBot: + - balance: heretic robes now have wound armor + - balance: heretic blades now have knife-level wound bonuses + - bugfix: fixes punished sect giving you burden for stuff like changing species + - bugfix: false walls icons will now display again + - bugfix: Bolt action rifles no longer open their bolt when firing their last bullet. + - bugfix: False anomaly alarms now work. + - bugfix: canisters don't disappear when their colours are changed + - code_imp: changed some vars into defines to save memory, removed unused/useless + vars & added auto docs + - code_imp: converted UI to typescript. moved global canister list to its appropriate + folder + - refactor: removed prototype canisters and optimized canisters as a whole. + - bugfix: coffin cookies are no longer invisible during the holiday seasons + - bugfix: Cryostylane and oxygen reaction now cools down temps. Other reactions + with the `REACTION_HEAT_ARBITARY` flag also cools down temps correctly + - bugfix: Eggs don't leave behind their shells when cracked into a soup pot. Cups + end their attack chain early when dealing with specific items + - bugfix: Being revived inside a legion now sets you free + - bugfix: "in some rare cases gib() did infact not spawn gib\n/\U0001F191" + - rscadd: Sprited and implemented a short lizard tail + - rscadd: Added new modular Assault-Type domain "Abductor Ship" + - rscadd: Added new simple mob abductor agents team + - bugfix: Minor bug fixes and improvements to the garbage truck space ruins. + - image: Claw hammer icon has been neatened up a little. + itseasytosee: + - rscadd: Sleeping carp/cqc users can now snap peoples necks by punching them in + the head while they are in a kill grab. + vinylspiders: + - bugfix: updates the remaining skyrat uis in preparation for react + - refactor: (Almost) all smoothed icons can now be edited in their pre cut forms +2023-12-10: + Melbert: + - refactor: Refactored some methods of items interacting with other objects or mobs, + such as surgery and health analzyers. Report if anything seems wrong + SkyratBot: + - refactor: cleanbots are refactored into basic bots. please report all bugs + - bugfix: fixes cleanbots getting stuck sometimes while patrolling + - rscadd: janitors get a new skillchip which allow them to communicate with cleanbots + - bugfix: Pyrosium oxygen reaction now heats the holder and causes reactions inside + it. Also correctly sets the holder temperature to 20 kelvin & causes reactions + when first made +2023-12-11: + Hatterhat: + - balance: Energy shoulder holsters can now fit the CIN plasma pistols and their + associated batteries. + Rhials, MrMelbert: + - rscadd: The Tracker implant has had its teleport beacon functionality migrated + to the new (cargo accessible) Beacon implant. + - rscadd: Teleport Blocker security implant, that prevents the implantee from teleporting + by any means. Purchasable from cargo. + - rscadd: Security implants may now be harmlessly self-destructed at the Prisoner + Management Console. + - balance: The Tracker implant tracking radius has increased from 20 to 35 tiles. + The Prisoner Management Console will track and display the area the implantee + is in as well. + - balance: The exile implant now prevents implantees from operating shuttle controls. + - code_imp: Various code improvements and removal of unused vars in the Prisoner + Management Console + - code_imp: The HUD slots for chem/tracking implants have been converted to display + any implant with the IMPLANT_TYPE_SECURITY flag and an associated sprite. + - spellcheck: Modifies various implant pad readouts, removing false information + and rewriting some sections. + SkyratBot: + - bugfix: Healing viruses now no longer self-cure for reasons they're not supposed + to and do for those that they are. + - rscadd: Slimepeople can now get wings from flight potions. + - refactor: 'TGUI V5: The UI has had its entire engine replaced with React v18.2. + This might cause obvious or laughably broken UIs in places you wouldn''t expect. + Please report any issues you find to the repo!' + - balance: most diseases can now be slowed, mitigated, and eventually cured through + being well-fed, resting, and using spaceacillin. Curing diseases through this + way will give you immunity if you experience them at their peak/maximum and + aren't starving/malnourished when they cure. + - balance: disease symptoms can be forestalled for up to 100 cycles with a declining + chance of avoiding them over time using rest or spaceacillin. + - balance: This does not apply to things like fungal TB; it does apply to healing + viruses if you don't take care of yourself by staying fed and avoiding spaceacillin. + - balance: disease can be cured through direct injection or ingestion of cured blood. + However, curing disease in this way does not provide lasting immunity. You need + to naturally beat the virus or get a vaccine for that. + - balance: Wearing internals or using protective equipment while infected can limit + the spread of respiratory illnesses from yourself to others. Contact transmission + is still possible however. + - balance: Medical Doctors now have roundstart virology access. Paramedics and coroners + now get virology access on skeleton shift access. Virologists now have roundstart + pharmacy access. + - balance: Sentient Diseases now resist being overridden by other advanced diseases + and can always override other advanced diseases; they also have an extra bonus + on their stealth stat to help make up for early outing without a bit more testing. + - balance: biohazard lockers now also contain a syringe of spaceacillin (in line + with the orderable kit from cargo.) + - balance: Virus severity is now also a function of the number of symptoms out of + max your virus has. Experiment with different combinations using less than six + symptoms to make viruses that are deceptively less-obvious and less quick to + self-cure at the tradeoff of stats. + - admin: Object Possession has been reworked, please report any potential bugs. + - qol: Object Possession should now throw a screen alert for you to unpossess the + object instead of you having to search the stat-panel for the "release obj" + verb. You can still use the verb but it's a lot nicer now. Aghosting will also + work now. + - bugfix: fixed big rice pans getting worse with cooking. + - qol: Add RMB hotkey and screentip UI to tracking beacons to toggle them on/off. + - bugfix: 'The air_alarm_circuit to gets the environment from the proper turf. + + :cl:' + honkpocket: + - bugfix: Changes the main chemical of the Narcolepsy medicine from synaphydramine + to modafinil + vinylspiders: + - bugfix: randomized spawned mobs will now have their species' random mutant colors + and features applied properly +2023-12-12: + Melbert: + - bugfix: When using an item on a mob, you will always attempt to fix wounds AFTER + surgery, BUT BEFORE the item's own interactions. As an example, this means using + a mesh on a mob will attempt to progress surgery first, then attempt to fix + any burn wounds, then heal burn damage. + Rhials: + - bugfix: Sunset Saloon virtual domain should no longer sometimes spawn with holes + in the floor. + SkyratBot: + - bugfix: 'DNA Sequencer UI: You should be able to cycle in reverse with RMB again.' + - bugfix: Goldgrubs no longer block death bolts, even while alive. + - bugfix: fixes some AI runtimes that were caused by the pawn becoming null + - image: New cleanbot sprites + - image: New bucket sprites + - rscdel: All buckets and cleanbots are back to being blue +2023-12-13: + LT3, Majkl-J: + - image: SM now has holiday lights + - image: You can now put a santa hat on the SM + LovliestPlant: + - qol: '[Void Raptor] [Blueshift] Adds door timers to permabrig isolation cells, + and directions for using the genpop system near prisoner lockers.' + - qol: '[Void Raptor] [Blueshift] Adds translator glove MOD modules to the stack + of "accessibility" modules found in some storage rooms.' + - qol: '[Blueshift] Adds stacks of "accessibility" MOD modules to Engineering, Security, + and Medbay.' + - bugfix: '[Blueshift] The forgotten exosuit fabricator will no longer attempt to + output directly into the wall.' + Rhials: + - qol: Blackout drunkard personalities will now recieve a "you are about to sober + up" warning at the 60/40/20 second mark, instead of repeatedly at the 50 second + mark. + Ryll/Shaps: + - bugfix: You can no longer stack more than one applications of a burn wound at + once + SkyratBot: + - admin: Updates the admin smite "Ocky icky phobia" with some new words + - bugfix: Painting should be working again. + - rscadd: Added subversive pins to the black market uplink which make security hate + you + - rscadd: The detective's spy cam can now be conveniently pinned onto people in + the same manner as medals + - bugfix: You should be able to edit your character using the feature buttons again. + - bugfix: fixed outdated item description + - bugfix: You should be able to move stamps on paper again. + - bugfix: climbing or being shoved into a glass table won't cause elevation issues. + - bugfix: AIs can summon bots again + - bugfix: cleanbots can clean floors directly underneath them and prioritize floors + nearest to them + - bugfix: medbots drop empty medkits now + - bugfix: Bird Phobia now triggers on geese + - bugfix: Dropdowns should show what you've selected again. + - bugfix: no runtime when unwrenching Atmos components + - spellcheck: fixed typo in attack chain define comment + - image: The Head of Security's "Sturdy Shako" hat now uses the same gold color + as his other hat + dis-integrates-the-integration-tests: + - qol: Laser pointers are now more accessible, being now available in the loadout + and in the Good Clean Fun vendor. + theselfish: + - image: The Snouted Clown mask is now the same colour scheme as the rest of the + species clown masks. A shared symbol of unity in Clown Brotherhood. + vinylspiders: + - bugfix: Loadout menu will no longer crash when switching tabs + - bugfix: fixes reinforced walls getting reverted back to the tg icon + whataboutism-alos: + - code_imp: Skyrat sprite override updated to reflect upstream lizard tail + - rscadd: Adds two-tone version of short lizard tail +2023-12-14: + SkyratBot: + - bugfix: Cult chat, PDAs, succumbing, etc shouldn't blue screen anymore. + - bugfix: Crabs will properly only target Tiny creatures + - qol: For admins, in the "Spawn Atom" window where you pick atoms to spawn-by-type, + anything that is a subtype of `/mob/living/basic` should now be replaced with + the `BASIC` tag instead (like with carbons, reagent containers, turfs, etc.). + So, instead of having to scroll through and try and figure out what that weird + subtype of Poly is, it should now be easier to read in that smaller screen. + - server: The TGS -> Discord Relay Warning that detects if a cliented mob has a + null loc should now be plaintext instead of being fully screwed up with useless + codestuffs. + - balance: Organs can now be preserved by putting them in freezing temperatures. + - balance: Morgue trays and freezers will now cool down the contents placed inside + of them. + - balance: Morgue trays will now properly display if someone stored within them + is revivable and make periodic beeps every minute. + - qol: The asteroid on Tramstation can now have areas expanded into or created within. +2023-12-15: + ATHATH: + - rscadd: If your bitrunning avatar somehow acquires and consumes a red pill, they + will be disconnected from the Matrix. + Jonnatonne: + - rscadd: Adds new palmated antler horn type. + SkyratBot: + - bugfix: Tram controls should work again. + - balance: Light Footed now makes stepping on glass Knockdown instead of Paralyze + - code_imp: Fixes some single letter variable usage in caltrop.dm + - bugfix: The clown car once again obtains the accesses of kidnapped crew within + the car. Supermatter crystals beware! + - bugfix: Advanced Plastic Surgery is now unavailable shiftstart + - rscadd: Adds a new discount experiment for unlocking the combat exosuit nodes + - complete it by scanning two exosuits with equipment in the left and right + hand slots. This replaces the prior discount experiment about destroying exosuits. + - bugfix: Chemicals are now no longer less effective at curing advanced viruses + than they used to be. + - bugfix: items that are rejected by the mat container will display the chat message + saying that. + - bugfix: Away lathes can now print robot navigational beacons + - bugfix: ORM will generate points regardless of how the ore enters it. + - bugfix: Machines like autolathe, techfab etc can now be hit with iron sheets (or + any other material item type those machines accept) when in combat mode rather + than inserting them because it makes sense. + - bugfix: Mat container won't display chats fully if the `MATCONTAINER_SILENT` flag + is passed. + - refactor: Machines like autolathe, techfab etc now display summed up material + inserts to chats rather than each item individually. Also, will skip items & + its contents if it cannot be processed thus saving time + - bugfix: mobs that have the `TRAIT_PERMANENTLY_ONFIRE` trait cannot be extinguished + by anything. + - bugfix: stuff thrown into lava should not runtime. it currently does not but if + there is a slight chance it does not happen + - bugfix: Fix double-clicking in various UIs + - bugfix: fixes zombie tumor not reviving +2023-12-16: + LT3: + - bugfix: Internal action buttons on computer consoles should work again + SkyratBot: + - qol: Anesthetics tank description now mentions a rare quirk of anesthetic. + - bugfix: fixes a bug which was causing certain mutations to only get partially + removed + - bugfix: Keybindings in prefs are able to be set again. + - bugfix: Fixed the weird spacing on buttons. + - bugfix: Confirmation buttons should be usable again. Bitrunning domains, command + reports, etc. + - balance: Emagged and Hacked APCs now occasionally flicker a blue effect, and the + effect is not visible with cameras. + - bugfix: Admin interview panel should feel snappier. + - balance: '"Scarves" and "Wallets!" are now neutral traits.' + - balance: Delamination variants no longer change once the explosion point has been + reached. + - spellcheck: Fixed a minor grammar mistake in the RD's job description and the + encrypted cache crate. + - bugfix: Newscaster shouldn't bluescreen anymore. + thegrb93: + - bugfix: Fix vox tails being unable to wag + - bugfix: fixed lizard spine sprites disappearing when wagging +2023-12-17: + Paxilmaniac: + - rscdel: Every gun from the gunsgalore module has been deleted, long live the king + - qol: The lanca and miecz can be suppressed. + - qol: Suppressors no longer increase the weight class of a gun they're attached + to. + - image: New sprites for lanca and miecz suppressors done by me. + SkyratBot: + - bugfix: 'Bitrunners can now access the Northstar ORM + + :cl:' + - qol: Added a confirmation prompt to breaking your vow of silence. + - balance: Mimes can no longer repair the vow of silence once broken. + - balance: The negative moodlet from breaking your vow of silence is now lighter, + and no longer permanent. + - balance: Mimes are back to being able to write while under a vow of silence. + - bugfix: character setup screen no longer runtimes with all_nighter quirk + - bugfix: Motorized wheelchairs will no longer spawn in a bugged state where they + have no parts and can't be upgraded. + - bugfix: Motorized wheelchairs will drop their power cell when destroyed or deconstructed. + - qol: Power cells are now inserted into motorized wheelchairs as part of the crafting + recipe, instead of as an extra step afterwards. + - bugfix: Fixed a rare false positive with morgue tray alarms. + - bugfix: fixed the oversight with martian food complexity. + - balance: Exosuit Materials 1 now only requires one mech. + - qol: "Exosuit Materials 1 is much more lenient on the percentage it requires.\n\ + /\U0001F191" + Thlumyn: + - bugfix: Contractor PDAs do not bluescreen any more. + yooriss: + - bugfix: Loadout MODlink scryers now come with the NT frequency by default, allowing + them to actually be used without requiring complicated setup. Try them out again + and holocall all your friends! +2023-12-18: + KannaLisvern: + - qol: You can now LOOC while in crit/unconscious. + Melbert: + - bugfix: Fixes Laughter demons deleting the bodies of their friends. + - bugfix: Fixes PAI health scan software + Paxilmaniac: + - qol: deployable thermomachines no longer deploy in the direction you're facing, + meaning the pipe connection will be visually in the right location + SkyratBot: + - rscadd: Adds a new shuttle event, where space shuttles can experience minor turbulance. + Keep your belt on while the appropriate cabin light is lit. + - bugfix: 'Interview UI should now be more obvious how it works: You must press + "enter" or save the answer.' + - bugfix: Fixed runtime regarding thanking non-existent clown car drivers + - bugfix: ED-209s can no longer be crafted with most instances of helmet, you need + security ones just like Beepsky. + - code_imp: All nighters can now drink energy drinks to cope with their lack of + sleep. + - balance: Roundstart AIs are now made of positronic cubes, rather than brains inside + MMIs + - bugfix: Reviver no longer attempts to revive impossible to defib mobs. + - refactor: Cleaned up unnecessary variables and re-arraigned code to have it perform + altogether in one tick. Additionally added a proper cooldown to revivers. + - balance: Fitness level decreases the time it takes to firemany carry someone. + Fitness level determines how much of a positive mood the workout grants. Working + out is now more difficult and requires more nutrition. + - balance: Exercise no longer triggers double metabolism. + - bugfix: Aivime, Lentslurri, Eigenswap and Libitoil can now be cooked again. + - balance: Aivime now can stack blur effects for the soapiest game ever. + - spellcheck: Lenturri description become more actual + - bugfix: coffee cartridge racks start with a coffee cartridge in them + - bugfix: Fire alarms no longer cause pitch blackness, instead creating a dark but + not black red light. + - image: 'New Security clothing: Security High-Vis jacket!' + - bugfix: fixed ghost role descriptions on NTTS Independence + - bugfix: Fix search categories in log viewer + - rscadd: If you throw a bee at someone it will hit them sting-first and inject + that bee's reagent + - balance: Thick clothing can now protect you from the venom of bees, snakes, frogs, + and (small) spiders + Tattle: + - admin: obsession targets are logged + Thlumyn: + - bugfix: opfor panel works again + goobliner: + - rscadd: Adds a new verb in the IC tab, "toggle reflexes", which lets your toggle + being able to be head pat, nose bopped or hugged. Works for both people AND + robots. + jjpark-kb: + - rscadd: added the plant tank-- allows simple farm growing and production of nitrogen + and oxygen + - bugfix: simple farms will now destroy themselves if their parent atom is destroyed + yooriss: + - bugfix: Laser pointers now show appropriate messaging to nearby players when someone + is using them for both benign and hostile actions. + - bugfix: Due to budget cuts and petitioning from protesting silicons, the FTU has + replaced all full-power laser pointers available in crew loadouts and Good Clean + Fun vendors with limited promotional variants that can't have their diodes repaired + or upgraded on the field. Joint litigation by the NT research and service departments + has allowed the RD and lawyers to keep their original ones, however. + - bugfix: Extensive lobbying by the Felinid Rights Association has forced the FTU + to replace all laser pointer diodes with special low 'radiationyan' variants + that no longer trigger felinids to compulsively leap. They're still super distracting + though... + yorii: + - rscadd: added moth milk +2023-12-19: + GreytideSkye: + - bugfix: AI Announcement Help Is Now Not A Malfunction For The Not Black Mesa VOX + Seven: + - bugfix: Ashwalkers can respawn fellow ashwalkers by bringing them back to their + tendril again. + - bugfix: Ashwalker tendrils no longer break hooded suits and modsuits. + - bugfix: Ashwalkers can sacrifice silicons, it wont give anything though. + SkyratBot: + - qol: Assistants with <10h of playtime are now "Interns" + - admin: Delete painting button is once again visible. + - bugfix: Emojipedia shouldn't bluescreen anymore. + - bugfix: monkeys will no longer cause other monkeys to get angry at the mobs they + just poofed by attacking + - rscadd: Added orange hardhats, hazard vests, and pocket protectors to the cargo + drobe + - bugfix: Fixed pressing Esc not unbinding keys in preferences. + - rscadd: Map Votes are now weighted random. + - rscadd: Custom Votes can now take advantage of Weighted Random winner selection + - rscdel: Removed Herobrine from the game + - bugfix: The bitrunner domain completion screen alert is once again properly clickable + - rscadd: Added 2 pocket quick equip keybinds + - bugfix: crafting now transfers reagents from ingredients to final product making + previously inedible foods (toasted seeds, kasei dango & snow cones) edible. + Other crafted food products/items now differ in reagents based on the ingredients + required. + - bugfix: Observers observing themselves no longer floods admins' logs. + Thlumyn: + - image: added inhand sprites for towels + zeroisthebiggay: + - rscadd: face scarves for icewalkers +2023-12-20: + Hatterhat: + - balance: Rough stones and stone bricks now have 10 force, up from 0, and 15 throwforce, + up from 0/10, respectively. + LT3: + - admin: Server wide admin announcements now use an alert box like other announcements + MrMelbert, Ghommie: + - bugfix: Alien nests, and some other stuff, can be physically attacked again. + - balance: x-mas trees (the ones with presents), are indestructibles. Truly protected + by a yuletide spirit. + Rhials: + - bugfix: Icebox escape pods will now land randomly on the surface, instead of only + in certain ruins. + SkyratBot: + - bugfix: Fixes runtime from augments not unregistering a signal. + - bugfix: qm's intern id is now "quartermaster-in-training" + - image: qm's id and hud icons now use the cargo tech icons (but blue) to be consistent + with the other heads of staff + - balance: Disallows siphoning credits outside of station + - bugfix: Made Syndicate Stormtrooper and Nuclear Operative TGC card holograms visible + again + - bugfix: Fixed a bluescreen while inputting a global variable in the circuit UI. + - image: cyborg tools became animated + - image: the SpacePol bounty hunters have finally had a new run of Uniforms made, + bringing them back to the forefront of enforcement fashion! Wardens will find + their Police Jackets/Hats have been updated match SpacePol's new look as well. + - bugfix: fixed the Mafia Warden having a hat that didn't match his jacket, and + fixed SpacePol masks not covering the nose + - bugfix: Emojipedia should copy the text on click properly, now +2023-12-21: + KannaLisvern: + - rscadd: Added a new ERP emote. *lewdmoan + Nerev4r: + - rscadd: Due to increased availability of calcium supplements in Sector 13 due + to Deep Spacer lobbying, snailpeople have found their shells to be more suited + towards protection of themselves and their recently-discovered-to-be-binary + hearts in a combat scenario. + - rscadd: Snailpeople have been invited to recent EVA training sessions, and have + learned to attach themselves to the floors if gravity generators go out; who'd + have thunk it? + - bugfix: Snailpeople no longer benefit from Settler's equipment load reduction + while crawling. I could not think of a funny caption for this. + Paxilmaniac: + - balance: Shotgun shells, ESPECIALLY skyrat's shotgun shells, have been rebalanced + to not either be useless or insane in every situation, see pr for details. + - image: New sprites for some projectiles, like flechettes and whatnot + - sound: The sound effect that the arc welder uses has been changed to be less quiet + and more noticable + - balance: SolFed response team equipment has been changed around a bit with the + new armor and whatnot. + - image: SolFed response teams (and cargo imports) can now see a new set of SolFed + uniforms, one for peacekeepers and one for EMTs. No longer do they have to dress + as wild west larpers, or half life HECU. + - qol: The sol rifles have had their names changed so that they suck less to refer + to as characters that don't speak french-afrikaans (coming 2023) + RaShCat: + - bugfix: offsets of items in teshari's paws and worn head + - image: simple redraw of teshari's sabres. + SkyratBot: + - bugfix: fixes some dropdowns not displaying the right text after selecting something + nikothedude: + - bugfix: Unspillable organs no longer spill + vinylspiders: + - bugfix: fixes company imports bluescreen + - bugfix: fixed a bug where certain loadout menu items would duplicate themselves + across tabs +2023-12-22: + LT3: + - qol: Roundstart intercept report and security level announcements are combined + into a single announcement + Melbert: + - qol: When you place a beaker in a chem-master, you no longer thwack it. + - bugfix: Crewmembers immune to viruses won't be picked by the fake virus event. + Paxilmaniac: + - rscadd: A small series of items have been added to the construction section of + the rapid construction fabricator to allow users to actually... Rapidly construct + things. + - image: Sprites for all of the new things made by me. + Rhials: + - bugfix: Disease Outbreak events will only select players on the station/lavaland + as patient zero. + SkyratBot: + - qol: The bitrunning equipment vending machine now has a unique description for + each of the bitrunning disks + - rscadd: 'Added new quirk: Cyborg Lover!' + - bugfix: Name input in character setup should work properly now. + - bugfix: Many inputs should feel more responsive. + - bugfix: Examine text on disconnected players is no longer accidentally subtle +2023-12-23: + Melbert: + - bugfix: Gibbing a bot will no longer spawn bloody gibs. + Rhials: + - qol: Wizard apprentices now spawn on the same tile as the contract that summoned + them. + SkyratBot: + - balance: Doing experiments AFTER their tech is researched now gives full 100% + points instead of 66%. + - bugfix: Fixes Holy Water giving you more blood and making you less drunk than + water normally does. + - bugfix: '''A whole bunch of spiders in a SWAT suit'' to ''A whole bunch of spiders + in a MODsuit''' + sqnztb: + - bugfix: blueshift - corrects some request console names, virology's outlet now + sends to space, and R&D now has a proper R&D console instead of a civilian one. +2023-12-27: + BurgerBB: + - balance: Miasma is now filtered through gas mask filters, at medium strength. + ChakatStormCloud: + - bugfix: Synths now properly regenerate blood volume with oil + GreytideSkye: + - refactor: LustWish interns, fed up with 5e Grappling Rules, explicitly clarified + what is a restraint and what is a structure. + Jolly: + - image: Colored labcoats have been GAGSed! Please report any weird oddities on + Github. + - bugfix: The coroners lab coat is no longer offset by one pixel. + SkyratBot: + - bugfix: the boozeomat ui will stop duplicating space beer bottles + - refactor: refactored vending machine backend to have unique keys for their data + structures. should fix bugs related to items that happen to have the same name. + - rscadd: Nightmares retain their ability to dodge projectiles for a brief period + after leaving a dark area, meaning it is now possible to dodge lasers. + - qol: Nightmares and Shadow People now receive a screen alert when they are in + a sufficiently dark location that their abilities are active. + - bugfix: Reactions whose temps/ph values fall way below their optimal values no + longer restart & prevents infinite loops. Made reaction code slightly faster + - rscadd: Added new GaGs santahats. + - bugfix: Injecting yourself twice with a luxury medipen in pressure doesn't runtime + and mechs with a cell with no max charge won't runtime. + - refactor: Gives hyposprays a var to check if they're fully used up rather than + setting total_volume to 0. + StrangeWeirdKitten: + - config: The headshot is no longer vetted or donor locked + vinylspiders: + - qol: loadout menu has a search function and is zebra-styled for readability. + - code_imp: improved performance of the loadout menu + - bugfix: removed nonfunctional tutorial button + xXPawnStarrXx: + - image: Made Skyrat Christmas clothes GAGS compatable. +2023-12-28: + A.C.M.O.: + - bugfix: Fixed Personal AI cards, allowing them to wake up from sleep. + BurgerBB: + - balance: Miasma is now filtered through gas mask filters, at medium strength. + GalaxiaBot: + - bugfix: Fixed integrated circuit UI breaking. + - bugfix: Cut down a significant amount of time that caused the start of rounds + to lag. + - bugfix: Fixed a bug that would give you the chat message "/datum/element/damage_threshold + looks unharmed!" + - bugfix: mat container displays correct number of sheets inserted for alloy materials. + - bugfix: remote materials now properly respect the `MATCONTAINER_NO_INSERT` flag. + - code_imp: removes material breakdown flags and related traits. + - code_imp: adds helper proc to insert materials via the remote material component + with proper context. + - bugfix: fixes a hard del with thrown items + - qol: Head of Security beret added to their garmet bag + - qol: Head of Security bowman added to their locker + - qol: Wendigo Cave ruin gets an aesthetic refresh + - bugfix: Wendigos (Wendigi?) no longer attack corpses + - bugfix: Camera console search should update automatically + - bugfix: Autolathe search should now properly show designs + - rscadd: You can now look up and down through the IC menu + - rscadd: Added the 'Coupon Master' program for the PDA. Install it to receive periodical, + redeemable coupons for several cargo packs. Requires NTnet connection and the + messenger enabled to work. + - rscadd: Coupons are no longer only limited to goodies, but may also apply discount + to some other packs as well. + - bugfix: Regal rats (and others), won't be punished by the automute system for + repeating the same command several times. + - bugfix: debug chem heater now withdraws more than 100 units from its inserted + beaker. + - bugfix: chem heater has correct overlay when its panel is closed with a screwdriver + while a beaker is inside. + - qol: added more examines and tooltips for the chem heater. + - code_imp: converted chem heater UI to typescript. removed unused procs, vars, + ui tracking code. Added auto doc for everything. + - refactor: removed chem heater tutorial help button & its related reward, chem + heater code has been optimized as a whole. + - balance: Cyborg lover has been replaced with Transhumanist. Transhumanists start + with a robotic limb and get mood buffs by being near to silicon-based lifeforms. + However, they get mood debuffs by being near organics, so there is a tradeoff + to taking this quirk. The cost for this quirk has been reduced from 2 to 0. + - bugfix: fixes a potential mob hard del with cardboard boxes + - rscadd: Added weapon recharger boards to designs available to print on sec techfab. + - bugfix: polymorphing into drone no longer gibs + - rscadd: Adds a mint condition clear PDA to the Goodies menu for 100,000 credits. + - qol: You can now build multiple pipe layers with the RPD, with just 1 click! + - bugfix: plumbing rcd ui no longer has any graphical glitches + - bugfix: the boozeomat ui will stop duplicating space beer bottles + - refactor: refactored vending machine backend to have unique keys for their data + structures. should fix bugs related to items that happen to have the same name. + - rscadd: Canisters now have wires! You can pulse wires to do various canister functions + like opening/closing the valve. Make sure it has a cell though. + - rscadd: You can rig assembly combos (igniter-timer, prox-signaler, etc.) onto + canisters + - qol: Canisters now have screentips + - bugfix: LUA editor should be usable again + - bugfix: Camera circuits actually print pictures again! + - qol: Camera circuits can now take pictures while on a carbon, whether held, hung + around the neck, or sneakily hidden in either pocket. When held they try to + deposit their pictures into the holder's hands if possible. + - bugfix: Camera circuits should now actually use the camera's x axis picture size, + rather than using the camera's y axis picture size setting for both axis. + - rscadd: Adds a brown suit jacket to the detective's vendor + - image: 'Adds a new sprite for the a brown detective suit jacket + + :cl:' + - balance: Ai's using the mech domination ability can now eject from the mech + - spellcheck: changes mutiline text to multiline text in vv + - bugfix: Injecting yourself twice with a luxury medipen in pressure doesn't runtime + and mechs with a cell with no max charge won't runtime. + - refactor: Gives hyposprays a var to check if they're fully used up rather than + setting total_volume to 0. + - qol: MOD wearers and internal AIs can pin the individual actions in a MOD circuit + module in a similar way to how they can pin modules. Circuit module actions + can be pinned from the configuration menu of the circuit + - refactor: The MOD action and BCI action components have been merged into one component + - the Equipment Action component. + - bugfix: fixing damaged sandy dirt lacking an icon + - bugfix: AI voice changer UI should show defaults properly + - bugfix: NTOS Software Hub should focus on the input immediately now + - bugfix: Ore container UI should autofocus on the search bar now + - bugfix: Vend-a-tray registration text should display as intended + - code_imp: removed excess calls to `update_total()` making reaction code slightly + faster. + - code_imp: removed excessive use of chemical constants (quantisation & rounding + constants) in places where they were not needed i.e. plumbing buffer, reaction + chamber, pyrotechnics & the liver. + GoldenAlpharex: + - bugfix: We're Nova Sector now! + - qol: Map votes are once again going to respect the majority vote, instead of being + a weighted random vote. + Jolly: + - rscdel: '[North Star] Removed the prison cryo auto mapper template, as this is + automatically handled by code. If there''s any issues in the future please report + them on Github!' + - rscdel: '{Automapper] Removed the logic for spawning prison privacy curtains. + This doesn''t affect 4/5 base /tg/ station maps.' + - rscadd: 'New quirk for those who hate their appendix: Appendicitis Survivor! A + positive (-2) quirk.' + KannaLisvern: + - qol: Removed Bluespace Crystals and Diamonds from medical emergency bed's recipe. + LT3: + - qol: TGUI will now wait longer trying to reconnect to a new round + Lutowski: + - rscadd: Void Raptor pharmacy and lab is slightly more spacious and prettier. + - qol: Chem vendor moved from pharmacy to chemistry lab on Void Raptor. + Melbert: + - bugfix: Fixed some occasions in which heartbeat SFX will continue on revival for + longer than expected + MelokGleb and KREKS: + - image: modified wizard weapon textures + NovaBot13: + - rscdel: Removes the wires from canisters. It's a cool idea, but cheap controlled + maxcaps are bad actually + Paxilmaniac: + - qol: The names and descriptions of every paxilmaniac weapon have been improved + to be shorter (names) and mention at least what bullet the weapon fires (description) + - qol: Every weapon with an extended description has a hint in its normal examine + telling you that you can look further to get more info on the weapon + - code_imp: Two instances of now-deleted weapons paths (which i found out about + through someone getting one in a christmas tree) existing due to manufacturer + examines of all things have been cleaned up, players wont notice this one i + think + Rhials: + - qol: Obsessed crewmembers are now displayed in the orbit panel. + - qol: The Paradox Clone orbit menu tab is now white. Neat! + Ryll/Shaps: + - balance: Yawns are less likely to propagate + goobliner: + - rscadd: You can now pick common with the bilingual trait. + honkpocket: + - rscadd: Chitter emote has a different sound effect, unless you're a moth + - bugfix: The bokken's deflects now also have a visual indicator + nikothedude: + - rscadd: Pet owners can now name and describe their pet + vinylspiders: + - qol: NTNet Downloader now has a search bar, and programs are now better sorted. + - bugfix: Fixed the surgery menu spamming chat messages when on the eyes section + of a player with no eyes. + - bugfix: mercury & lithium will no longer make you randomly move outside of cryotubes + or in ground less turfs (space, water, lava etc) + - rscadd: basic bots can now display their paths on huds + - bugfix: medbots can research healing again + - 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. + - rscadd: PDAs with a dead power cell are now limited to using their Messenger app. + - bugfix: Microwaves now stop charging PDAs if the cell was removed mid-charge. + - bugfix: Microwaves can now charge laptops. + - bugfix: PDA Flashlights can't be turned on while the PDA is dead. + - bugfix: You can now hold a laptop up to a camera (if it has a notekeeper app installed) + like PDAs already could. + - rscadd: Infiltrators (Latejoin/Midround traitors) can now buy and use Contract + kits again. + - rscdel: Contractor baton can now only be purchased once. + - bugfix: lab coats no longer have directional sprites when thrown + - rscadd: Added a "postal workers strike" negative station trait. In the case of + holidays and sunday though, it'll be a "postal system overtime" instead. + - bugfix: clockcult slab now lets you change tabs once again + - spellcheck: Fixes a typo in chat message when starting a Death Knell with the + Vorpal Scythe + - admin: Adds logging for the death knell, both when starts and when it is completed + successfully. + - bugfix: NTOS Messenger should search as you type now + wiverns: + - rscdel: Cured the fear of santa in claustrophobes + yooriss: + - rscadd: Right clicking with shoulder holsters on any suit slot item will now attempt + to fit the holster to that item, allowing it to be worn in its suit storage + slot afterwards. Holsters can also be renamed and customized with a pen, too! + - rscadd: The Chaplain's vendor equipment can now be renamed and customized with + a pen to better suit their themes/religion. Never go without your trusty bible + again! + - balance: The sacred waters of the Icewalker's Hearth now ensure that polypore + mushrooms and embershrooms are always available for intrepid botanists to use + in their concoctions. + - rscadd: Watermelon and grass seeds are now available in the Hearth's seed stores. +2023-12-29: + A.C.M.O.: + - bugfix: Fixed the Automatic Robotic Factory, making its cooldown timers visible + to ghosts. + - bugfix: Fixed the Automatic Robotic Factory to stop processing when it breaks + or loses power. + - balance: Balanced the Automatic Robotic Factory by adding a 60 second cooldown + for spawning cyborgs. + HalcyonicWolf: + - image: modified many sprites for Vox Primalis, they will have a broader wardrobe + now + NovaBot13: + - spellcheck: changes some let's to lets + - bugfix: Fixed a lot of missing/broken images, such as emojis, language icons, + commendation hearts, icons in R&D menu, etc. + - bugfix: reduces lag in the tgui textarea input boxes + - bugfix: Dear mappers, the light debugger tool no longer deletes dragged wall lights + - bugfix: Fixed "was shocked by /datum/component/energized" message. + - bugfix: reaction chamber open its UI when inserting/removing beakers from it + - bugfix: reaction chamber triggers new reactions & updates UI more often during + heating + - bugfix: instant and normal reactions now get triggered more often so for e.g. + more plastic sheets from polymer reactions or more reactions occur when there + are multiple reagents present + - bugfix: NTOS Messenger should clear on enter now + - bugfix: Off station ORM's can redeem points again. + - rscadd: Add 50% graffiti speed boost to tagger quirk + - bugfix: Fix time duration of large graffiti not applying properly + - bugfix: ai can now tell if it is in a do_after for resisting and will not interrupt + it. monkeys also now don't freeze up when aggressively grabbed and will resist + out of those and cuffs. + - refactor: Photo albums and photo frames are now more resilient to data loss, especially + when a server crashes. + Thlumyn: + - rscadd: Added new areas to the ghost cafe, including a ashwalker and icewalker + zones. + vinylspiders: + - bugfix: colonial cloaks and imperial police cloaks can now carry suit storage + items when worn in the suit slot. +2023-12-30: + Ghommie, 13spacemen: + - bugfix: Signing or removing your candidature from ghost roles now properly updates + the screen button for it. + Kyogon: + - rscadd: Re-Adds Cat Scream to the list of available screams to choose in character + creation + NovaBot13: + - bugfix: Poll alert buttons candidate number should be more responsive + OrionTheFox: + - bugfix: fixed some missing scrollbar icons in the Cyborg UI + ReturnToZender: + - bugfix: JSX files, when edited, cause TGUI to recompile on build + Thlumyn: + - bugfix: ghost cafe bathroom turfs are no longer solid black blocks of missing + icon-ness + mogeoko: + - bugfix: Atmospherics components will now move air into connected pipeline on deconstruction + if possible. Otherwise, air will be released to the outside from open nodes. + - bugfix: Unsafe pressure release on atmos components will now work the same way + it does in the normal pipes if there is an empty node with air. + - bugfix: The HFR user interface would close when the machine is shut down. + - bugfix: Atmospherics machinery will now share air from nodes after being rotated + and reconnected to pipenet. +2023-12-31: + Echomori: + - bugfix: trying to move up or down while controlling an advanced camera console + now properly moves the camera up or down, not your body + GoldenAlpharex: + - bugfix: Vending machines now display the proper color customization options and + item quantities again! + GoldenAlpharex, Crumpaloo for the sprites: + - rscadd: Nanotrasen's Fashion Department released some new masquerade masks, available + in single or split colors, with an optional feather! They can be found in every + AutoDrobe, and they were even approved to be brought from home! + - image: Said masquerade masks are available for all head shapes, whether it be + the standard, the snouted, the Teshari, the Vox and even the Vox Primalis! + LT3: + - bugfix: Fixed BYOND membership status being available to non-BYOND members + Melbert: + - bugfix: Lizards now show a proper description in the magic mirror + NovaBot13: + - bugfix: Holodeck monkeys are properly cleaned up now + - bugfix: Holodeck monkeys have organs now + - bugfix: Bot launchpads can deploy cleanbots and medibots again. + - spellcheck: Clarified the message when failling to recall a bot. + - bugfix: fishing up a spawner will now give you the spawned item instead of a broken, + undeletable spawner object + - code_imp: adds a warning to the stack trace when something tries to forceMove() + a qdeleted spawner + - qol: makes modal list uis autofocus + - bugfix: fixes textarea input boxes not updating on prop change (such as changing + tabs) + - bugfix: chem heater now shows the new value of its buffer dispense volume immediately + when it gets changed. + - bugfix: debug chem synthesizer now shows the new values of amount & purity immediately + when it gets changed. + - bugfix: The transhumanist quirk now should work as intended. + - bugfix: Dimensional anomlies converting airlocks preserves the old name + OrionTheFox: + - qol: After complaints of excess rusting, CC has finally installed some dehumidifiers + in their stations! (SSDecay will no longer rust tiles) + - bugfix: Due to new maintenance measures, the Tram rail-line should no longer rarely + start the shift with damage. (SSDecay will no longer destroy Tram tiles) + PapaMichael: + - sound: added *gaspshock emote sound effect to felinids + Paxilmaniac: + - bugfix: prefab windows from the colony lathe are now fulltile as intended + - bugfix: prefab walls made through right click no longer create the black void + of nothing when they are made + - qol: prefab floor tiles now have a (x4) next to them to show that they made four + per operation + - qol: plastic wall panels can now be used on grilles to directly make windows + - sound: the soundloop for anything using the air conditioner sound has been halved + in volume + - rscadd: the colony lathe can now make ore silos, these beep when materials are + drawn or added + - rscadd: the colony lathe can now also make mini wind turbines, these make a tiny + trickle of power when placed outdoors in an atmosphere, however can make significantly + more power if a storm rolls through the area they are placed + Rhials: + - code_imp: Unholy water no longer calls parent twice in on_mob_life(). + honkpocket: + - rscdel: Shuttles no longer bolt their doors on transit + - balance: Contractor midrounds now spawn with their chosen character quirks + - balance: Contractor midrounds now have a uniform with less projectile armor, but + gain some wounding, thermo and acid armor + - qol: Contractor midrounds their uniform now abides to the character's uniform + preference + - bugfix: fixed the confetti loaded shotgun shells diff --git a/html/changelogs/archive/2024-01.yml b/html/changelogs/archive/2024-01.yml new file mode 100644 index 00000000000000..81420b6c486d5a --- /dev/null +++ b/html/changelogs/archive/2024-01.yml @@ -0,0 +1,703 @@ +2024-01-01: + NovaBot13: + - qol: added screentips to the janicart (pimpin' ride) + - bugfix: The sustenance vendor in perma actually serves food now + - bugfix: Dropdowns and pop-up menus have been rewritten. This should fix an issue + where dropdown text was accidentally scrolling if hovered. Please report any + issues on the repo + - rscadd: Atmos Holofan projectors can be right-clicked inhand to make their holograms + more transparent + - bugfix: Cyborgs do not deathgasp twice when dying anymore + - bugfix: fixed fire extinguisher cabinets not appearing opened after removing the + fire extinguisher from them + - refactor: hygeinebots are now basic bots. please report all the bugs + - bugfix: fixes hygenebots not being able to patrol + - rscadd: hygeinebots can now be controlled by Players + SomeRandomOwl: + - qol: PAI's now have a larger limit for their OOC notes and description, they can + now put up to 500 characters for both + - bugfix: NIFsoft settings panel now works once again +2024-01-02: + FearfulFurnishing: + - rscadd: Add bone dice, a d6 that can be crafted using a bone. + Lutowski: + - rscadd: Sunflower crown, poppy crown, lily crown and floral garland added to loadout. + - rscadd: Black Gas Mask added to loadout. + Melbert: + - refactor: Refactored the area transformation colossus crystal effect to use the + same system dimensional anomalies use. That means the colossus crystal now has + access to some dimensional themes (bamboo, plasma, glass) and the dimensional + anomaly now has access to some colossus themes (jungle, alien). + NovaBot13: + - rscadd: 69(roughly?) new vox phrases + - bugfix: Fixed footstep sounds. + - qol: The "Explosive Planted" alert for C4 actually shows the C4 + - qol: Gas analyzer can scan adjacent turfs. No more roasting yourself just to scan + your burn mix. + - bugfix: Protolathe input should feel more responsive. + - rscadd: Added new lizard variants of existing foods for equality of edibility. + - qol: made pickle jars reusable and vinegar craftable. + - bugfix: Having an inorganic chest/legs no longer makes you drop your ID, belt + or pocketed stuff upon losing your jumpsuit + - bugfix: you can set the chemical reaction chamber temps to 0k again + - bugfix: used higher rounding value for reactions thus you get full volumes especially + for endothermic reactions(no more 99.99 but 100 units). + - bugfix: chem heater now applies heat per reaction step and sends updates to UI + more frequently + - qol: Toggling an armour booster module on a MODsuit now gives a balloon alert + making the tradeoffs more clear. + - bugfix: slamming through a glass table while previously on a table no longer gives + you a negative offset. + - rscadd: A new heretic path opens up! Gaze up at the great sky for the path of + the moon opens and the lie shall be slain in pursuit of ultimate truth! + - bugfix: Fixes the syndicate delusion not working + Paxilmaniac: + - sound: The headset radio sound no longer reaches 17 entire tiles away from you + - code_imp: Some of the code around headset sounds has been improved a bit + - bugfix: Wind turbines will now correctly connect to a wire that was placed before + they were +2024-01-03: + NovaBot13: + - bugfix: turbine now shuts itself off when the room apc loses power or if it gets + damaged. Also uses a small amount of power for operation of internal electronics, + the green light & other stuff + - bugfix: No more runtime in turbine computer when parts are not fully connected + - qol: adds screentips & examines for turbine + - code_imp: removed unused vars, auto doc procs and cleans up some code in turbine + - refactor: attack_slime is completely gone + - refactor: slime lifestate changes now have less boilerplate code + - balance: baby slimes do a bit of a less damage on the low end, but all slime damage + is much more consistent + - balance: instead of taking half brute damage, cyborgs are now immune to slime's + melee attacks. Charged slimes attacking cyborgs now lose a bit of charge. They + still get massive damage from charged slimes, and every slime attack flashes + them. + - bugfix: slimes can now properly drain basic mobs and simple animals that they + can damage + - bugfix: slimes can drift in zero gravity + - image: Throwing things has now a sprite animation forward your target. + - sound: Throwing things also has a sound accompagnying it. + - spellcheck: Dwarves don't throw things hard like hulks. Instead their throws are + described as "flimsily". + - image: resprited the Pirate/Sailor costumes, the pirate jacket, and the pirate + spacesuit + - bugfix: Fixed integrated circuit speech logging + Vishenka0704: + - admin: The ability to export a part(or z-level) of the map has been added. + vinylspiders: + - bugfix: fixes a rare bug that could result in spawning without any equipment + - spellcheck: updates discord url in panic bunker message + - admin: opfor panel 'approve objective' button is no longer annoyingly in the way + of the objective title text + - qol: when you send a message as an admin via the opfor panel and no one is handling + the opfor, it will automatically mark you as handling it +2024-01-04: + FearfulFurnishing: + - rscadd: Added bone greaves foot clothing which are made from one sinew and two + bones. + LemonInTheDark, Donglesplonge: + - image: Redoes fov "mask" sprites. They're clean, have a very pleasant dithering + effect, and look real fuckin good! + - rscdel: Changed FOV, it no longer hides mobs, instead it blurs the hidden area, + and makes it a bit darker/oversaturated + NovaBot13: + - bugfix: fixes some runtimes in pathfinding code, as well as one in the give direct + control admin verb + - rscadd: Reworked Binoculars to function like a scope from long-range rifles. They + also can be used while moving, albeit that'll slow you down significantly. + - rscadd: Authentic mothic softcaps can be found in the "Mothic Pioneer" curator + kit, which googles can also used to look into the distance. The date on the + boxed kit has been updated to match "muh lore". + - qol: Using a scope (and now binocs or moth cap) won't hide your mouse pointer + away now, so that you won't slip out of the game screen and close the game tab + by accident. + - image: Improved sprites for sailor school uniform + Zergspower: + - bugfix: Ruins - Space Hotel should now run without runtimes for atmos + - bugfix: Ruins - Space Hotel disposals actually works + goobliner: + - rscdel: Everybody can now use headshots + yooriss: + - balance: Light Drinker and Drunken Resilience quirks can no longer be chosen together. + - balance: Oversized and Freerunning quirks can no longer be chosen together. + - balance: The Oversized Rights Enclave (ORE) has successfully petitioned Nanotrasen + to install a galactic minimum standard upper-joist crumple zone in their station + airlocks, meaning that oversized individuals will no longer take brain damage + from hitting their head. All other safety warnings still apply. + - bugfix: Oversized and Settler can now no longer be chosen together to negate the + Oversized hunger mod penalty. +2024-01-05: + GoldenAlpharex: + - bugfix: Masquerade masks can now properly hide your identity. + LT3: + - bugfix: OOC announcements will now be in shown in OOC colors + - bugfix: Alternate carpet colors will no longer reskin to normal carpet + Melbert: + - bugfix: Fixed runtime from blobbernauts attacking non-living things + - bugfix: Some things which affect everything in an area are less laggy, the "all + lights are broken" station trait especially + - bugfix: Fixed Fugu Gland applying to mobs incorrectly + Motho & Vinylspiders: + - rscadd: You can now customize the color of your overhead chat bubble. Ported from + effigyse, original by LT3. + - bugfix: cyborgs should now get their brain prefs applied correctly + NovaBot13: + - bugfix: Gibtonite ore on ice planet gulags no longer spawns as lavaland rock. + - qol: Path of moon and lock now actually fit in the heretic tree + - balance: Certain path of moon rituals that needed brains now use easier to obtain + organs + - bugfix: Fixed redundant "Integrity:" in air alarms + - code_imp: progressbars no longer qdel their /image + - spellcheck: Fixed punctuation in Luini Amaretto's description. + - bugfix: fixed a runtime in datum/thrownthing + - bugfix: 'TGUI: Sections should be scrollable on mouse hover' + - bugfix: closets now have a working welder deconstruct screentip + - bugfix: fixed an /image hard del in ghost code + - bugfix: 'Icebox: Added a fire alarm to the upstairs fore primary hallway.' + - admin: Amputation Shear amputation is now logged + - bugfix: 'Birdshot: Released gulag prisoners can now get off the gulag shuttle.' + - bugfix: 'Birdshot: The gulag shuttle airlocks will now cycle like other airlocks.' + - bugfix: Guardian host's ability buttons now works while the host is sleeping/unconscious. + - bugfix: stationary medbots will no longer ignore u for a while if u move out of + their way while healing + - bugfix: the moon heretic ascension now produces lunatics again + - bugfix: you no longer fall down cliffs if you dont have gravity + - bugfix: Universal scanners are no longer invisible when set to the export or sales + tagger modes. + - bugfix: food made with drying racks now counts as "chef-made" (ergo, can provide + a mild buff). + Paxilmaniac: + - rscadd: The CO2 Cracker makes a return, a device that takes power and turns ambient + CO2 into ambient oxygen, handy! + - rscadd: The portable recycler has been added, a machine that lets you recycle + stuff autolathe-style, clang! + - rscadd: The hydroponics chemical synthesizer has been added, the sister to the + water synthesizer, makes all of the basic botany chemicals to work with reagent + pipes. + - rscadd: The sustenance dispenser makes a return, dispense yourself some powdered + coffee or nutraslop today! + - rscadd: The organic rations printer has been added, a little biogenerator-type + machine specializing in food specifically. An excellent kitchen buddy for the + supply-deprived cook. + - image: Sprites for all the listed new machines were made by me, Paxilmaniac. + SomeRandomOwl: + - bugfix: Fixed a old mirror, AI vox announcements now send the announcement through + minor_announce instead of going through the radio + - refactor: Refactored AI vox code to do our custom AI vox voices in a more cleaner + way + honkpocket: + - rscadd: Xeno-hybrids have a weak plasmavessel to spin resin and hive communicate + with + - rscadd: Xeno-hybrids have acid blood + - balance: Xeno-hybrids are the weakest species against heat/fire, at a whopping + 2.5x multiplier + - balance: Xeno-hybrid livers can process plasma without gaining toxin damage + yooriss: + - rscadd: Talking now automatically capitalizes any lowercase 'i' in the middle + of sentences, and ends sentences in a period if no other punctuation is present. +2024-01-06: + Lutowski: + - rscadd: Mothic language returns with its own lore blurb. + - image: Added icon for Chitinclick. + NovaBot13: + - bugfix: fixes an image hard del + - code_imp: adds context to image hard dels to make them easier to track + - image: resprited onmob cone icon. + - bugfix: Having a netpod destroyed will no longer grant you permanent healing. + - bugfix: Randomization button in prefs should look normal again. + - bugfix: Quirk customization shouldn't close immediately. + Paxilmaniac: + - bugfix: construction fabricators can once again make ration printers + SomeRandomOwl: + - bugfix: Build Mode Export's options menu now knows when you want to cancel and + not change the options + - bugfix: fixed the max width of the quirk UI so some quirks aren't cut off + Stalkeros: + - rscadd: Ancient Military Simulator got some of the previously implemented items + back, i.e. CIN weaponry and DeForest medkits + - balance: Ancient Military Simulator, generally speaking, became more 'rigid' and + straightforward + - balance: Ancient Military Simulator prize room has been moved deeper into SNPC + compound to prevent drakes from flying in early. + - bugfix: Ancient Military Simulator should no longer break down into space tiles + on wall explosions + - rscdel: Black Mesa, the map + Zergspower: + - refactor: refactors all(?) modular items to a standard list format + vinylspiders: + - qol: Ghosts can now view Wanted Status and Sec Records by examining people + - bugfix: fixes an instance of the quick reflexes trait not being honored + - bugfix: fixes ashwalker sacrifice immediately gibbing revived lizards + - rscdel: vending machines will no longer squash mobs + - bugfix: Queen bee's made with cytology now work + whataboutism-alos: + - bugfix: Updated readme and other git config docs to check NovaSector/NovaSector + rather than GalacticStation/GalaxiaStation for updates + - bugfix: Updated Ice-Cats policy wiki link + - bugfix: Piping & wiring no longer runs beneath Interdynes closed turfs + - bugfix: Redone Interdyne ghost role spawner information + - bugfix: Fixed two basketball arena maps with deprecated obj paths + - bugfix: Removed mention of Skyrat server name in loadout clothing options + - bugfix: Corrected some loadout items mistakenly containing the name string of + another loadout item + - bugfix: Fixed reebe.dmm still using a762 instead of strilka310 pathing + - bugfix: Fixes mislabelled Interlink Kitchen/Bar doors (access_helpers were already + correct) + - bugfix: Adds sounds to Interdyne fitting both Lavaland AND Icemoon + - bugfix: Fixes bug of clothing items mapped on top of closed turfs on Interdyne + Vault (Icebox) + - code_imp: Created template file for modular RGB benches + - refactor: Refactored modular chemical and obj flags + - refactor: Repathed git checker .sh's + - refactor: Added /nova/ to many many missed paths and some comments + - refactor: Repathed Interdyne and DS-2 + - refactor: Repathed (Skyrat) Nova Xenomorphs + - refactor: Moved spacehotel and box whiteship dmms to /spaceruins/nova + - refactor: Dropped lavaland-specific Interdyne area pathing + - refactor: Refactored shuttlecode + - refactor: Refactored modular TGUI + - refactor: Refactored modular vendor variables + - rscadd: UpdatePaths for all mappable changes, includes tips to refactor code + - rscadd: Second UpdatePaths for fellow Interdyne enthusiasts + - rscadd: Added Interdyne Lavaland & Icemoon commission plaques + - rscadd: Blue benches for Interdyne (Icebox) + - rscadd: Deck Officer's ID is now a special Interdyne ID rather than a generic + silver + - rscadd: Survival boxes for all Interdyne crew + - rscadd: Disease scanners for Interdyne Bioscientists + - rscadd: Added plasmaglass skillsoft implanter using adv. interrogation chamber + sprites + - rscadd: More specific Interdyne areas + - rscadd: Expanded Interdyne Virology + - rscadd: New workout equipment for Interdyne miners to get buff and convene around + - rscadd: "Added red pi\xF1ata (only candy drops) to Interdyne bar" + - rscadd: Included unused red lanterns to Interdyne Syndrobe (Icebox) + - rscadd: Added shuttle pad with commercial clutter + - rscadd: Added shower in public Interdyne restroom, now not only the Deck Officer + has one + - rscadd: Added useless big red button to Interdyne's vault safe, scary! + - rscadd: Added snowy floor decals to exterior catwalks of Interdyne (Icebox) + - rscadd: Added ashy floor decals to exterior catwalks of Interdyne (Lavaland) + - rscadd: Added Interdyne dorms laundry basket for ditched default-outfit clothes + - rscadd: Added Interdyne Kitchen shutters synced to existing Bar shutters + - rscadd: Added plumbing for all sinks, showers, and hydro trays to high-capacity + stationary water tank in Interdyne + - rscadd: Added a little table clock and calendar to Deck Officer's office + - rscadd: Added wall clocks to Xenobio and Virology at Interdyne + - rscadd: Added semirandomized posters throughout Interdyne + - rscadd: Changed Interdyne default turf from plating to reinforced to match reinforced + hull walls + - rscadd: Changed Interdyne ceiling to reinforced plating (Icebox) + - rscadd: Added Interdyne flag to Medical and Library - blank white flag with altered + desc + - rscdel: Removed Interdyne hair salon + - rscdel: Removed extraneous & visually disjointed departmental directions from + Interdyne + - qol: Added light switches to every area in Interdyne placed as centrally accessible + as possible + - qol: Moved Interdyne's 'TOP SECRET' folder to the safe (It's the most important + thing. Why was it just in a file cabinet?) + - qol: Anchored internals crate in Interdyne Cargo + - qol: Redone Interdyne catwalks + - qol: Added dim lights to Interdyne catwalks (Icebox) + - qol: Condensed, improved Interdyne Library + - qol: Enabled, increased count of insulated clothing in the Contraband category + of Syndrobe (Icebox) + - qol: Quantum pad to DS-2 now more centrally located + - qol: Expanded Interdyne kitchen counter + - qol: Relocated Disposals room to past Engineering + - qol: Morgue is now connected to Medical & reorganized + - qol: Morgue now contains an autopsy scanner + - qol: Improved window blast door grouping + - qol: Enabled extended_inventory on some Interdyne vendors where reasonable (these + guys don't follow Nanotrasen's corporate restrictions!) + - qol: Added gun case to Vault + - qol: Moved the stethoscope to Medical (Should at least act like that item isn't + included in the game only for safe-cracking!) + - qol: Removed grass turf terrariums, added plastic potted plant to public bathroom. + It's a sterile medical company! + - bugfix: Fixes Interdyne's radio headset +2024-01-07: + LT3: + - bugfix: 'Morgue trays and freezing temperatures will no longer husk bodies fix: + Organs outside bodies will properly receive cold damage /:cl:' + Melbert: + - bugfix: 'Strong arm implant users can shove more correctly. /:cl:' + NovaBot13: + - bugfix: Fixed an issue with polling ghost roles to control multiple mobs that + prevented Sentience Fun Balloons from working as intended. + OrionTheFox: + - rscdel: Removed the CME event + - image: some of TG's newer modsuits that were missing muzzled/digitigrade sprites, + now have said sprites! + Paxilmaniac: + - rscdel: All of assault ops has been deleted + Zergspower: + - rscadd: Synth/IPC's internal PDA - Food/Battery level for the beeper + - qol: Synths/IPC's will now charge/feed slightly faster + - balance: Synth/IPC's internal PDA - raises memory to 64 from 32 to match a standard + spawned PDA + sergeirocks100: + - rscadd: Some new shirts have been added to the undershirt selection, including + some recolorable t-shirts and a rainbow tank top. Check them out in the character + preferences! + - spellcheck: The name of the sun tank top has had a minor capitalization mistake + fixed. + vinylspiders: + - bugfix: 'the eZ-13 MK2 heavy pulse rifle does damage again /:cl:' + - bugfix: 'After a raid on the local drug mafia in the sector by TerraGov, the Russian + Mobsters no longer have access to easy drugs and as a result are no longer 24/7 + running faster than the average spaceman. /:cl:' + - bugfix: conveyor belts no longer maintain movement if whatever is on them suddenly + leaves their z level + - bugfix: Hub shuttle time works correctly + - bugfix: 'you can use your hand to make minebots go into combat mode again /:cl:' + - bugfix: abductors can get points again + - spellcheck: 'Corrects every misspelled ''kenetic'' in the codebase. /:cl:' + - bugfix: Search bars for smaller lists should return to their former responsiveness. + - qol: The hub entry shows the next map and shuttle time, and no longer shows the + alert + - balance: Doing experiments AFTER their tech is researched now gives full 100% + points instead of 66%. + - bugfix: Cyborgs no longer think they're hitting themselves when stunned with a + stun baton + whataboutism-alos: + - bugfix: Removed Syndrobe hidden beneath Internals dispenser on Interdyne (Lavaland) + - bugfix: Removed linen bin hidden beneath vendor on Interdyne + - bugfix: Reimplemented Interdyne fax machine after unintentional removal + - bugfix: Reimplemented Interdyne bar west entrance + - bugfix: Restored roundstart count of Sansufentanyl medication bottles in Interdyne + to the number generated by the deprecated Sansufentanyl crate + - bugfix: Moved turret in Interdyne kitchen to prevent targetting inside the building + (poor medibots LOL) + - bugfix: Removed chef skillchip in Interdyne Science Wing (why was that there?) + - bugfix: Fixed bug of Interdyne (Icemoon) Syndrobe charging money for items + - qol: Implemented cabin/dorm door bolt buttons + - qol: Moved Interdyne virology disposals system one tile left for accessibility + - qol: Created a second cryopod for immersion on player request + - qol: Moved DS-2 quantum pad into a hallway west of Interdyne cargo foyer for immersion + - qol: Changed color of one cargo container from red to olive drab on player request + - qol: Gun case is now a gun rack because some guns would not go into it for reasons + unknown +2024-01-08: + 13spacemen: + - bugfix: Jumping to C4 via ghost notification works again + DrDiasyl: + - qol: It is now possible to craft more Security bio suits + - qol: Bio-emergency crate from Cargo now contains a box of latex gloves and sterile + masks + Ghommie: + - bugfix: fixed coupon codes with expiration times. + GoldenAlpharex: + - config: Config migration to /nova instead of /skyrat has been properly completed. + Majkl-J: + - bugfix: spasm_animation now correctly resets the transform, as it should + - bugfix: Spamming the weld on a robotic part no longer drains the fuel + NovaBot13: + - bugfix: vents that are turned off dont replay their animation if you go out of + sight and back in + Paxilmaniac: + - qol: For all the mappers out there, stationary batteries come with pre-charged + variants now for mapping use + - bugfix: SMES can now be deconstructed normally again + - code_imp: The flatpacked stationary batteries have much more readable power amounts + now + - rscadd: Adds a new element that makes guns throw small users backwards when shot, + which has been added to the wylom + Thunder12345: + - bugfix: The clown planet biodome and virtual domain can now be completed without + slipping directly into the exit. + fIoppie: + - qol: Cargo techs can now access the windoor in the delivery office on Delta. + jlsnow301: + - bugfix: Comms console should now update as you type. + mc-oofert: + - bugfix: adds missing navigation landmarks to tramstation + thegrb93: + - rscadd: Borg dominatrix module to lustwish that gives them some dominatrix toys +2024-01-09: + Melbert: + - bugfix: '"The sister and He Who Wept" Heretic painting will no longer cause big + lag' + Paxilmaniac: + - bugfix: Deployable thermomachines now correctly put their pipe's visual direction + the right way + thegrb93: + - rscadd: Blood filter module to medic borg + - rscadd: Cherry juice and vineger to service borg shakers + - rscdel: Remove redundant service borgshaker +2024-01-10: + Hatterhat: + - qol: Much like their non-powertool counterpart, powered drivers on wirecutter + mode can now snip cablecuffs. + Paxilmaniac: + - balance: '"Tactically" reloading a gun no longer has a delay to swapping the magazine' + - code_imp: Some old code regarding gun stuff that isn't in the codebase anymore + has been removed + - image: The sprite override for the detective's revolver has been removed + - rscdel: 60 round drums for the sol rifles no longer exist + - image: The looks of all three carwo rifles have been changed to better reflect + how they are different from the other rifles. + Plum-but-gayer: + - rscadd: The 'Space Russians' located on Void Raptor station have been replaced + with something a bit more lore friendly. Why not go meet them yourself? + - rscdel: Removed space russians from Void Raptor. + SomeRandomOwl: + - bugfix: 'popup screen locs will work on clients >1614. Security cameras and + + Spyglass will work' + nikothedude: + - balance: High-intensity shocks no longer have a chance of stopping your heart + vinylspiders: + - image: resprited CTF ID Cards + - balance: 'Last Resort can now be used while unconscious or dead. balance: Last + Resort stuns bystanders for slightly longer. /:cl:' + - bugfix: Fixes AIize and borgize gibbing you +2024-01-11: + 13spacemen: + - qol: If you can't heal a body part, you won't get a healing time delay. No more + spending 5 seconds healing a body part only to get a "can't heal that" message. + Absolucy: + - bugfix: Fixed the Codex Cicatrix always requiring a dead body, despite the description + saying leather or a hide would work too. + FlufflesTheDog: + - bugfix: Certain areas are now properly protected against grid check. Namely the + supermatter should consistently be protected. + Ghommie: + - bugfix: Fixed misfiring for firearms like tinkered detective revolvers. + IndieanaJones: + - bugfix: Dynamic midround rolls will properly consider roundstart players as part + of the living population again, allowing antagonists with a minimum population + value to spawn when they should be able to. + - bugfix: Players who observe before roundstart can be considered for midround ghost + roles again. + - bugfix: Some antagonists which had elements that scale with living station population + now function properly again. + JohnFulpWillard: + - bugfix: Refried beans and Spanish rice now lets you take the bowl back after eating + it. + - bugfix: Eldritch reagent (the one that heals heretics) now heal heretic monsters + rather than kill them. + - bugfix: The HoP's cartridge vending machine now sells regular PDAs instead of + base command ones. + LT3: + - bugfix: Unencoded server admin announcements will now actually broadcast + Melbert: + - admin: Several types are now more accessible via the "spawn" verb (and friends), + meaning you can type 'Spawn" Modsuit' or 'Spawn "Jumpsuit' in the command bar + and it'll just give you a list of modsuits or jumpsuits to pick from. + - bugfix: Lionhunter Rifle is now available at the same point as Mawed Crucible, + making it available to all paths again. + - bugfix: Lock knowledge now goes the correct order. Mark -> Ritual -> Unique item, + rather than backwards. + - balance: Blood cultists can now convert a Null Rod into a cult weapon on an offer + rune. The strength of the weapon it is converted into depends on how many cultists + the Chaplain crit / killed with it. At five or more, it will turn into a Bastard + Sword. Note, sacrificing someone holding a Null Rod will automatically convert + it after they are gibbed. + - balance: Heretics no longer produce a Bastard Sword upon cult conversion. They + are still immune to cult stun and cannot be converted by blood cultists. + - bugfix: Carps now migrate slightly better, probably. + - bugfix: And Poly now talks better, probably. + NovaBot13: + - bugfix: Pipeguns no longer have floating bayonets + OrionTheFox: + - image: Resprited a majority of undershirts + Paxilmaniac: + - balance: Kahraman Heavy Industries no longer sells base mining equipment that + the station can just get. Instead their selection has been updated with a new + selection of exploration and mining equipment fit for the frontier. + - rscadd: Step aside colony core, there's a new sheriff in town. The organic materials + printer, a green machine you make from a pile of flatpack parts from cargo. + With a little input of plant matter, you can print yourself some grade A frontier + equipment, or some organic materials, its up to you. + - rscadd: There's a new piece of kit for marking your locations, the GPS beacon. + Coming in a small size deployable item, it can be turned into an anchored, stationary + GPS marker that you can use and rename to your liking. Don't like where it is? + No worry, just pack it back up and move it elsewhere. + - rscadd: 'Bluespace miners are so last codebase. Check out the hip new mining device + from Kahraman: the Ore Thumper. Set one up outdoors with some wired power, and + watch it slam away at the ground. After it works for long enough, the pressure + built up by all that slamming will make deeply buried ore come to the surface.' + - rscadd: Looking for some frontier fashion? Some top notch kit? Kahraman has you + covered with the new frontier clothing lineup. Now you too can buy equipment + completely overrated for your cushy station adventures. + - sound: New sounds added for the new ore thumper, as well as a neat new radio sound + effect for the new frontier headset. + - image: New sprites for the new machines, clothing, and whatever else in Kahraman + are made by me, paxilmaniac, how dreamy. + SyncIt21: + - bugfix: ejecting cells from microwaves via ctrl click now requires player proximity. + - code_imp: smart fridge content overlay now uses `base_icon_state` instead of a + separate var + jlsnow301: + - bugfix: Medical records console should be useable again + - admin: Fixed the bluescreen in the centcom pod launcher. + vinylspiders: + - bugfix: bridge assistant no longer passes some head of staff checks + - qol: 'if you steal a command member''s liver, you can now sabre better! /:cl:' + zxaber: + - bugfix: Ripley MK-Is and Paddys now correctly make incoming projectiles hit the + pilot again. + - bugfix: The various borg apparatuses can no longer pick up other internal borg + tools. +2024-01-12: + Melbert: + - bugfix: Fixes some cult spells being unable to heal constructs (blood rites particularly) + - bugfix: Ghost alert for buying a badass balloon should have a proper icon + - bugfix: Blood Drunk Miner (Hunter version) should dash a bit more. + - bugfix: Fix Ringleader's Rise not causing as many hallucinations as expected + - bugfix: Chameleon Suits will now automatically set your helmet into a hood if + using a hooded suit again + NovaBot13: + - bugfix: Fixes borg polymorph + - admin: Added a new admin verb that ends all active weather within the weather + subsystem. + - bugfix: if your voice changes (e.g. through a voice changer or changeling mimicry) + your runechat will now appear as the mob you are speaking in the voice of + - bugfix: when doing emotes with your face obscured, your runechat color will now + appear as either that of Unknown or the mob you are wearing the id of (if you + are wearing a mask with someone else's id) + - bugfix: Fixed being able to download the contractor program on the syndie store. + aKromatopzia: + - rscadd: Arm band sprites for teshari + - rscadd: Dog tag sprites for teshari + vinylspiders: + - qol: tweaks the chat color clamping algorithm to be a bit more restrictive while + still allowing for edge cases like greys and whites +2024-01-13: + LT3: + - bugfix: Icebox kitchen has its light switch again + - bugfix: Icebox medbay hallway now has a fire alarm + - bugfix: Tramstation east APC will no longer be destroyed when the tram crashes + - qol: Tramstation central power and disposals moved out of the wall + LovliestPlant: + - qol: In the Opfor panel, adds buttons to open Opfor Policy, the Non-Antag Criminal + Addendum, and the Opfor Guide. + Melbert: + - bugfix: Lunar Parade has the potential to break less. + NovaBot13: + - image: New liquid plasma sprites from SS14! + - bugfix: Dropdowns should be more performant + - admin: Made logging for BSA targeting and firing easier to find for admins. + - bugfix: The "required_container_accepts_subtypes" variable on chemical reactions + now actually works again + - code_imp: removed a dupe trait entry in the traits_by_type list + - bugfix: Healing simplemobs with sutures and other stacks works again + - spellcheck: Healing mobs with medical stacks like suture and mesh give better + user feedback messages + - balance: Nightmare's Light Eater can now stun targets under certain conditions. + - qol: The heat-proof catwalk made by heat-proof rods will go away when a tile is + placed on it, rather than sticking around and needing to be removed manually + - bugfix: The lighting will not irreparably break on tiles where plating was placed + on lava-proof catwalks + - code_imp: Some single letter variables and the structure of the code around placing + tiles on lava-proof catwalks has been improved + - code_imp: The check that prevents your stuff from dropping when you have robotic + parts is now more robust + - qol: ID cards now set their accounts with Alt-Right click. + - bugfix: ID cards now once again have contextual screen tips showing what buttons + do what actions. + - bugfix: The deployable component will now actually stop rotating things when the + variable to not do that is set + OrionTheFox, sergeirocks100: + - image: The undershirt resprite has been ported over. Rejoice! + - rscadd: A bee shirt that was originally sitting unused in the icon files has been + properly added to the game. + Paxilmaniac: + - image: Forged armor has had its sprites significantly improved over what they + were before + - rscdel: Forged horseshoes have been removed, no more invisible leg armor! + Rhials: + - bugfix: Specialty drinks crafted in the crafting menu will now create the intended + reagents, instead of containing the reagents used to craft it. + nikothedude: + - bugfix: Silicon temp ftext overlay now works + - bugfix: Silicon temp ftext popout window now works + vinylspiders: + - bugfix: welding self as synth no longer makes you suffer through 3 progressbars + yooriss: + - bugfix: Autopunctuation no longer checks for underscores at the end of messages. + - bugfix: Autopunctuation now correctly inserts EOL periods for any bolded/italicised/underline + messages without them, if they don't already have punctuation of their own (like + exclamation marks, tildes, question marks, or hyphens). +2024-01-15: + LT3: + - bugfix: Fixed missing power cable outside Tramstation medbay + Melbert: + - bugfix: Anomalies spawned by grand ritual runes sound act more like anomalies + Motho: + - rscadd: Added a civilian version of the Type-34P headset that actually has no + armor. + - rscadd: Added the aerostatic set to the loadout. + - qol: Removed job restrictions from a majority of loadout items. + NovaBot13: + - bugfix: Rat King's abilities no longer require the user to click twice in order + to activate them. + - bugfix: Changeling eggs laid by headslugs work again + - bugfix: Changeling egg incubation times should feel much more consistent, hatching + after 4 minutes + - admin: Confirming that you have read an admin message now uh, works. it's been + 2 years bros + - bugfix: Fixed round event controller pirate spawns. + - qol: The combat mode toggle button is now present on the HUD for simple and basic + mobs. + - bugfix: Borg tools that hold and use specific items now work correctly again. + - bugfix: Animals enlargened by the fugu gland are now visually aligned with the + turf they're standing on. + - bugfix: chem heater with empty buffers can be refilled again + OrionTheFox: + - rscadd: Added a long-sleeve greyscale undershirt, and moved the Lizared Top to + be a Bra, along with a few other small tweaks - double-check your worn underwear! + - image: Updated some out of date underwear sprites to match TG's new resprite + - bugfix: fixed the OpFor Syndicate Uplink Implanter giving a broken item - it will + now give the Implanter as intended. + Thlumyn, Arta/Maxi for the sprites: + - rscadd: Added peacock tails + honkpocket: + - balance: Blueshift's vault, armoury, AI upload and prison are a little more antag + friendly! + - rscadd: Adds a forge room to Blueshift + vinylspiders: + - balance: 'Instead of too much damage to the head beheading someone, it + + will now split their skull in half. While their skull is open, you can + + rip out their eyes with your hands. and they will spill their brain out + + of their head if they slip.' + - balance: 'The Path of Blades ascension will accept either a beheaded + + person, or someone with their skull split open.' + - rscdel: Removed the beheading objectives from traitor. + yooriss: + - balance: Oversized characters no longer receive a flat +5 damage to all unarmed + attacks, and instead gain a +5 bonus to the maximum possible damage. In addition, + the unarmed effectiveness value of their legs has increased by +5, making them + better at keeping people on the ground once they get them there, without doing + any extra damage with their kicks. +2024-01-16: + Melbert: + - bugfix: Fixes some eldritch painting messages having no chat span + - bugfix: Fixes eldritch painting messages triggering before the examine, making + it hard to see + - bugfix: Fix beauty eldritch painting doing nothing to heretics who examine it + NovaBot13: + - bugfix: Sections will be more polite by not stealing focus from Input boxes in + TGUI + - bugfix: Poppers (like the prefs menu options) shouldn't be hidden beneath the + character preview anymore. + - bugfix: fix bileworm ai going insane after eating someone + - bugfix: Radiation shelters (wherever they are) will protect against nebula storms + - code_imp: Hub status shows if server is restarting, starting, time to start. The + "Time" is more accurate and based on roundstart now + - qol: Using a Lawyer badge in your hand now shows a thought bubble with the badge, + rather than giving a lousy message in your chat. + - qol: Players are now able to see in chat when they are being hit by obj/machinery, + got crushed into dense turf or get hit by thrown non carbon mob. + - admin: Scenarios like mob hits dense turf, obj/machinery hits mob, item without + "living thrower" hitting mob, mob gets hit by thrown non carbon mob now appear + in logs. + aKromatopzia: + - rscadd: digitigrade cybernetics + - image: sprites for digitigrade cybernetics diff --git a/icons/Cutter.md b/icons/Cutter.md new file mode 100644 index 00000000000000..0d04c622feb0f8 --- /dev/null +++ b/icons/Cutter.md @@ -0,0 +1,76 @@ +## Guide to the icon cutter + +### What are cut icons? + +There are some icons in ss13 that are essentially stitched together from a smaller set of icon states. + +Smoothing is a prime example of this, though anything that takes a base image and operates on it fits the system nicely. + +### How does the cutter work? + +The cutter has a bunch of different modes, different ways to operate on images. They all take some sort of input, alongside a (.toml) config file that tells us what to DO with the input. + +The .toml file will know the cutter mode to use, alongside any config settings. Smoothing configs can use templates instead of copying out a bunch of information, templates are stored in the cutter_templates folder. + +The toml file will be named like this. `{name}.{input_extension}.toml`. So if I have a config mode that uses pngs as input (almost all of them) it'll look like `{name}.png.toml` + +It'll then use the `{name}.png` file to make `{name}.dmi` (or whatever the cutter mode outputs) + +You should NEVER modify the cutter's output, it'll be erased. You only want to modify the inputs (configs, pngs, etc). + +As I mentioned our cutter has several different modes that do different things with different inputs. + +Most cutter stuff in our repo uses the BitmaskSlice mode, you can find info about it [here](https://github.com/actioninja/hypnagogic/blob/master/examples/bitmask-slice.toml) + +## Bitmask Smoothing (BitmaskSlice) + +We use bitmask smoothing to make things in the world merge with each other, "smoothing" them together. + +This is done by checking around these objects for things that we want to smooth into, and then encoding that as a set of directions. +Now, we need icon states for every possible combination of smoothing directions, but it would be impossible to make those manually. + +So instead we take a base set of directions, typically no connections, north/south, east/west, north/south/east/west, and all connections, and then slice them up and stitch them together. + +Looks something like this + +>Example: [Bamboo](turf/floors/bamboo_mat.png.toml) +> +> png of 32x32 blocks, representing connections. +> +> [None, North + South, East + West, North + South + East + West, All] +> +>[Bamboo Template](turf/floors/bamboo_mat.png) +> +> And its output dmi +> +>[Bamboo Output](turf/floors/bamboo_mat.dmi) + +### How do I modify a smoothed icon? + +Modify the png, then recompile the game/run build.bat, it will automatically generate the dmi output. + +### How do I make a smoothed icon? + +Make a png file called `{dmi_name}.png`. It should be 5 times as wide as the dmi's width, and as tall as the dmi's height + +Create a config file called `{dmi_name}.png.toml`, set its [template](../cutter_templates/bitmask) to the style you want. Don't forget to set the output_name var to the base icon state you're using. + +Once you're done, just run build.bat or recompile, and it'll generate your cut dmi files for you. + +If you want to make something with nonstandard bounds you'll need to set the relevant variables, you can read the examples found [here](https://github.com/actioninja/hypnagogic/tree/master/examples) to understand different mode's configs. + +> Example: [Grass (50x50)](turf/floors/grass.png.toml) +> +>[Grass Template (50x50)](turf/floors/grass.png) + +If you want to give a particular smoothing junction a unique icon state use the prefabs var, add a new "state" to the png, and modify the config so it knows how to use it. + +> Example: [Donk Carpets (Big Pocket)](turf/floors/carpet_donk.png.toml) +> +>[Grass Template (50x50)](turf/floors/carpet_donk.png) + +If you want to make the smoothed icon animated, add another row of states below your first one. Each new row is a new frame, you define delays inside the config file as deciseconds. + +> Example: [Lava (Animated, 4 Frames)](turf/floors/lava.png.toml) +> +>[Lava (Animated)](turf/floors/lava.png) diff --git a/icons/area/areas_station.dmi b/icons/area/areas_station.dmi index cbfe463efa5169..c63c333fa4cd74 100644 Binary files a/icons/area/areas_station.dmi and b/icons/area/areas_station.dmi differ diff --git a/icons/effects/bitrunning.dmi b/icons/effects/bitrunning.dmi index bfdc7c63436c2f..8efa429389c3a5 100644 Binary files a/icons/effects/bitrunning.dmi and b/icons/effects/bitrunning.dmi differ diff --git a/icons/effects/bitrunning_48.dmi b/icons/effects/bitrunning_48.dmi new file mode 100644 index 00000000000000..e7c5bf37d8e89e Binary files /dev/null and b/icons/effects/bitrunning_48.dmi differ diff --git a/icons/effects/bitrunning_64.dmi b/icons/effects/bitrunning_64.dmi new file mode 100644 index 00000000000000..397b4709c83b36 Binary files /dev/null and b/icons/effects/bitrunning_64.dmi differ diff --git a/icons/effects/cranial_fissure.dmi b/icons/effects/cranial_fissure.dmi new file mode 100644 index 00000000000000..9f8f5b46021370 Binary files /dev/null and b/icons/effects/cranial_fissure.dmi differ diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 9828e307431a5e..1be88105380758 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/effects/eldritch.dmi b/icons/effects/eldritch.dmi index 8b7738f3b46a0d..91fa9ff4f538bd 100644 Binary files a/icons/effects/eldritch.dmi and b/icons/effects/eldritch.dmi differ diff --git a/icons/effects/fov/field_of_view.dmi b/icons/effects/fov/field_of_view.dmi index 8086773d1407f2..8a15ae18a926b8 100644 Binary files a/icons/effects/fov/field_of_view.dmi and b/icons/effects/fov/field_of_view.dmi differ diff --git a/icons/effects/mouse_pointers/moon_target.dmi b/icons/effects/mouse_pointers/moon_target.dmi new file mode 100644 index 00000000000000..d89cab42aa124c Binary files /dev/null and b/icons/effects/mouse_pointers/moon_target.dmi differ diff --git a/icons/effects/mouse_pointers/scope_hide.dmi b/icons/effects/mouse_pointers/scope_hide.dmi deleted file mode 100644 index a6182e8fc5f313..00000000000000 Binary files a/icons/effects/mouse_pointers/scope_hide.dmi and /dev/null differ diff --git a/icons/effects/particles/notes/note_light.dmi b/icons/effects/particles/notes/note_light.dmi new file mode 100644 index 00000000000000..3474edebc233c8 Binary files /dev/null and b/icons/effects/particles/notes/note_light.dmi differ diff --git a/icons/hud/screen_alert.dmi b/icons/hud/screen_alert.dmi index 593a3878c2e6fc..dc95d505ce6b7a 100755 Binary files a/icons/hud/screen_alert.dmi and b/icons/hud/screen_alert.dmi differ diff --git a/icons/hud/screen_full.dmi b/icons/hud/screen_full.dmi index 54931085b74bb0..ac33631e1a0ec7 100644 Binary files a/icons/hud/screen_full.dmi and b/icons/hud/screen_full.dmi differ diff --git a/icons/misc/buildmode.dmi b/icons/misc/buildmode.dmi index dd794c02aaa30f..7d56918846b209 100644 Binary files a/icons/misc/buildmode.dmi and b/icons/misc/buildmode.dmi differ diff --git a/icons/mob/actions/actions_ecult.dmi b/icons/mob/actions/actions_ecult.dmi index 747b57949be822..ac7575d279b9e1 100644 Binary files a/icons/mob/actions/actions_ecult.dmi and b/icons/mob/actions/actions_ecult.dmi differ diff --git a/icons/mob/actions/actions_mecha.dmi b/icons/mob/actions/actions_mecha.dmi index 5ae25522434ef3..7c659ca3b573c6 100644 Binary files a/icons/mob/actions/actions_mecha.dmi and b/icons/mob/actions/actions_mecha.dmi differ diff --git a/icons/mob/augmentation/advanced_augments.dmi b/icons/mob/augmentation/advanced_augments.dmi new file mode 100644 index 00000000000000..aeb9ca1ca9b44b Binary files /dev/null and b/icons/mob/augmentation/advanced_augments.dmi differ diff --git a/icons/mob/clothing/accessories.dmi b/icons/mob/clothing/accessories.dmi index 2c6bf51072438c..57670005b92407 100644 Binary files a/icons/mob/clothing/accessories.dmi and b/icons/mob/clothing/accessories.dmi differ diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi index dc519380cfd7ac..49e46149a670f6 100644 Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi index d1a1777e4e4d8f..fbe6871c92e2d2 100644 Binary files a/icons/mob/clothing/belt.dmi and b/icons/mob/clothing/belt.dmi differ diff --git a/icons/mob/clothing/belt_mirror.dmi b/icons/mob/clothing/belt_mirror.dmi index 0c1b8457be7c34..eb06288d800bc5 100644 Binary files a/icons/mob/clothing/belt_mirror.dmi and b/icons/mob/clothing/belt_mirror.dmi differ diff --git a/icons/mob/clothing/head/costume.dmi b/icons/mob/clothing/head/costume.dmi index 3c5ea17b19d15e..06de36df19aac9 100644 Binary files a/icons/mob/clothing/head/costume.dmi and b/icons/mob/clothing/head/costume.dmi differ diff --git a/icons/mob/clothing/head/hats.dmi b/icons/mob/clothing/head/hats.dmi index abf2f9f18bd406..3477cb1820a96e 100644 Binary files a/icons/mob/clothing/head/hats.dmi and b/icons/mob/clothing/head/hats.dmi differ diff --git a/icons/mob/clothing/head/utility.dmi b/icons/mob/clothing/head/utility.dmi index ada1b90c4b0beb..51fd3191f1b109 100644 Binary files a/icons/mob/clothing/head/utility.dmi and b/icons/mob/clothing/head/utility.dmi differ diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi index cbe6bc751c180d..375de246269181 100644 Binary files a/icons/mob/clothing/mask.dmi and b/icons/mob/clothing/mask.dmi differ diff --git a/icons/mob/clothing/modsuit/mod_clothing.dmi b/icons/mob/clothing/modsuit/mod_clothing.dmi index 537b1ffd3ebdd0..793c14ce115ff8 100644 Binary files a/icons/mob/clothing/modsuit/mod_clothing.dmi and b/icons/mob/clothing/modsuit/mod_clothing.dmi differ diff --git a/icons/mob/clothing/neck.dmi b/icons/mob/clothing/neck.dmi index 03cf6a861c1406..fcfdb55f52250c 100644 Binary files a/icons/mob/clothing/neck.dmi and b/icons/mob/clothing/neck.dmi differ diff --git a/icons/mob/clothing/suits/armor.dmi b/icons/mob/clothing/suits/armor.dmi index d10ca4add997b3..be2ba8f3730c10 100644 Binary files a/icons/mob/clothing/suits/armor.dmi and b/icons/mob/clothing/suits/armor.dmi differ diff --git a/icons/mob/clothing/suits/costume.dmi b/icons/mob/clothing/suits/costume.dmi index bf4bbe310d2d73..3cd5770fb9aeea 100644 Binary files a/icons/mob/clothing/suits/costume.dmi and b/icons/mob/clothing/suits/costume.dmi differ diff --git a/icons/mob/clothing/suits/jacket.dmi b/icons/mob/clothing/suits/jacket.dmi index a6f25d91c59bfe..fa93a85c7c6f15 100644 Binary files a/icons/mob/clothing/suits/jacket.dmi and b/icons/mob/clothing/suits/jacket.dmi differ diff --git a/icons/mob/clothing/suits/labcoat.dmi b/icons/mob/clothing/suits/labcoat.dmi index f499203c95e955..37cb0e8696bdb7 100644 Binary files a/icons/mob/clothing/suits/labcoat.dmi and b/icons/mob/clothing/suits/labcoat.dmi differ diff --git a/icons/mob/clothing/suits/spacesuit.dmi b/icons/mob/clothing/suits/spacesuit.dmi index 4bc2d8cd7f9e13..3c381ecd56f94f 100644 Binary files a/icons/mob/clothing/suits/spacesuit.dmi and b/icons/mob/clothing/suits/spacesuit.dmi differ diff --git a/icons/mob/clothing/under/costume.dmi b/icons/mob/clothing/under/costume.dmi index c8fd87f52726d8..26e8eec9f20517 100644 Binary files a/icons/mob/clothing/under/costume.dmi and b/icons/mob/clothing/under/costume.dmi differ diff --git a/icons/mob/clothing/under/security.dmi b/icons/mob/clothing/under/security.dmi index 58761b3a38e716..b78ffa57f7e7d7 100644 Binary files a/icons/mob/clothing/under/security.dmi and b/icons/mob/clothing/under/security.dmi differ diff --git a/icons/mob/clothing/under/syndicate.dmi b/icons/mob/clothing/under/syndicate.dmi index 49e866c22104d3..57e0cf14a3a76e 100644 Binary files a/icons/mob/clothing/under/syndicate.dmi and b/icons/mob/clothing/under/syndicate.dmi differ diff --git a/icons/mob/clothing/underwear.dmi b/icons/mob/clothing/underwear.dmi index d231b955bab402..cd5564fe211f1c 100644 Binary files a/icons/mob/clothing/underwear.dmi and b/icons/mob/clothing/underwear.dmi differ diff --git a/icons/mob/huds/hud.dmi b/icons/mob/huds/hud.dmi index d71ba4b0940a67..36f485d07fc207 100644 Binary files a/icons/mob/huds/hud.dmi and b/icons/mob/huds/hud.dmi differ diff --git a/icons/mob/human/human_face.dmi b/icons/mob/human/human_face.dmi index 886f0bf793b6bf..d96800c3a8bb8b 100644 Binary files a/icons/mob/human/human_face.dmi and b/icons/mob/human/human_face.dmi differ diff --git a/icons/mob/human/species/lizard/lizard_spines.dmi b/icons/mob/human/species/lizard/lizard_spines.dmi index eaadb820ebc1fa..82eb636b339c60 100644 Binary files a/icons/mob/human/species/lizard/lizard_spines.dmi and b/icons/mob/human/species/lizard/lizard_spines.dmi differ diff --git a/icons/mob/human/species/lizard/lizard_tails.dmi b/icons/mob/human/species/lizard/lizard_tails.dmi index c388e31fd9b893..8af62b32cfe974 100644 Binary files a/icons/mob/human/species/lizard/lizard_tails.dmi and b/icons/mob/human/species/lizard/lizard_tails.dmi differ diff --git a/icons/mob/human/species/misc/bodypart_overlay_simple.dmi b/icons/mob/human/species/misc/bodypart_overlay_simple.dmi index 55fb5c40a842a3..8df76eb63147b1 100644 Binary files a/icons/mob/human/species/misc/bodypart_overlay_simple.dmi and b/icons/mob/human/species/misc/bodypart_overlay_simple.dmi differ diff --git a/icons/mob/human/species/wings.dmi b/icons/mob/human/species/wings.dmi index 26e8b011fce2a1..45c438efd230d2 100644 Binary files a/icons/mob/human/species/wings.dmi and b/icons/mob/human/species/wings.dmi differ diff --git a/icons/mob/inhands/64x64_lefthand.dmi b/icons/mob/inhands/64x64_lefthand.dmi index 8a6bab69776678..5d4d7c9e7689ff 100644 Binary files a/icons/mob/inhands/64x64_lefthand.dmi and b/icons/mob/inhands/64x64_lefthand.dmi differ diff --git a/icons/mob/inhands/64x64_righthand.dmi b/icons/mob/inhands/64x64_righthand.dmi index 251458590bdd48..6cd0f2acebc6a9 100644 Binary files a/icons/mob/inhands/64x64_righthand.dmi and b/icons/mob/inhands/64x64_righthand.dmi differ diff --git a/icons/mob/inhands/equipment/custodial_lefthand.dmi b/icons/mob/inhands/equipment/custodial_lefthand.dmi index 8af03cfdf640a4..2350998aa95354 100644 Binary files a/icons/mob/inhands/equipment/custodial_lefthand.dmi and b/icons/mob/inhands/equipment/custodial_lefthand.dmi differ diff --git a/icons/mob/inhands/equipment/custodial_righthand.dmi b/icons/mob/inhands/equipment/custodial_righthand.dmi index b3eecf85e70f33..df4738e3fd298d 100644 Binary files a/icons/mob/inhands/equipment/custodial_righthand.dmi and b/icons/mob/inhands/equipment/custodial_righthand.dmi differ diff --git a/icons/mob/inhands/equipment/instruments_lefthand.dmi b/icons/mob/inhands/equipment/instruments_lefthand.dmi index edd78927aa6819..2fb076293d529a 100644 Binary files a/icons/mob/inhands/equipment/instruments_lefthand.dmi and b/icons/mob/inhands/equipment/instruments_lefthand.dmi differ diff --git a/icons/mob/inhands/equipment/instruments_righthand.dmi b/icons/mob/inhands/equipment/instruments_righthand.dmi index 7cc8568b908d4c..f989cec435d984 100644 Binary files a/icons/mob/inhands/equipment/instruments_righthand.dmi and b/icons/mob/inhands/equipment/instruments_righthand.dmi differ diff --git a/icons/mob/inhands/equipment/shields_lefthand.dmi b/icons/mob/inhands/equipment/shields_lefthand.dmi index 4075fb26a965ed..d31dbb3f830b1f 100644 Binary files a/icons/mob/inhands/equipment/shields_lefthand.dmi and b/icons/mob/inhands/equipment/shields_lefthand.dmi differ diff --git a/icons/mob/inhands/equipment/shields_righthand.dmi b/icons/mob/inhands/equipment/shields_righthand.dmi index 73127fb026b83a..dfd72809be71f3 100644 Binary files a/icons/mob/inhands/equipment/shields_righthand.dmi and b/icons/mob/inhands/equipment/shields_righthand.dmi differ diff --git a/icons/mob/inhands/items/devices_lefthand.dmi b/icons/mob/inhands/items/devices_lefthand.dmi index bf9c3154c62b18..7b558c20e6e55c 100644 Binary files a/icons/mob/inhands/items/devices_lefthand.dmi and b/icons/mob/inhands/items/devices_lefthand.dmi differ diff --git a/icons/mob/inhands/items/devices_righthand.dmi b/icons/mob/inhands/items/devices_righthand.dmi index 93a5d929610439..042ecb745c4859 100644 Binary files a/icons/mob/inhands/items/devices_righthand.dmi and b/icons/mob/inhands/items/devices_righthand.dmi differ diff --git a/icons/mob/inhands/items/food_lefthand.dmi b/icons/mob/inhands/items/food_lefthand.dmi index 934c2fcd045837..8e2b19c4dd42a3 100644 Binary files a/icons/mob/inhands/items/food_lefthand.dmi and b/icons/mob/inhands/items/food_lefthand.dmi differ diff --git a/icons/mob/inhands/items/food_righthand.dmi b/icons/mob/inhands/items/food_righthand.dmi index f49835a3a7bac9..12063ad38a8f95 100644 Binary files a/icons/mob/inhands/items/food_righthand.dmi and b/icons/mob/inhands/items/food_righthand.dmi differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index f544eeb753a81c..a2347dc667abce 100644 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index 85c6accc80c362..bb2a425194bd22 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/mob/inhands/weapons/guns_lefthand.dmi b/icons/mob/inhands/weapons/guns_lefthand.dmi index 3e29ac726f9951..7e8297c848d3df 100644 Binary files a/icons/mob/inhands/weapons/guns_lefthand.dmi and b/icons/mob/inhands/weapons/guns_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/guns_righthand.dmi b/icons/mob/inhands/weapons/guns_righthand.dmi index 1a640935e0c6ab..366f285789a0ab 100644 Binary files a/icons/mob/inhands/weapons/guns_righthand.dmi and b/icons/mob/inhands/weapons/guns_righthand.dmi differ diff --git a/icons/mob/inhands/weapons/hammers_lefthand.dmi b/icons/mob/inhands/weapons/hammers_lefthand.dmi index 090bcb2ab9e0ab..7f6985e1de5ec5 100644 Binary files a/icons/mob/inhands/weapons/hammers_lefthand.dmi and b/icons/mob/inhands/weapons/hammers_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/hammers_righthand.dmi b/icons/mob/inhands/weapons/hammers_righthand.dmi index 3b0af0743f8d1b..2dd4f4b64c5cfb 100644 Binary files a/icons/mob/inhands/weapons/hammers_righthand.dmi and b/icons/mob/inhands/weapons/hammers_righthand.dmi differ diff --git a/icons/mob/inhands/weapons/polearms_lefthand.dmi b/icons/mob/inhands/weapons/polearms_lefthand.dmi index ff98ba95721532..f9b43790df73f6 100644 Binary files a/icons/mob/inhands/weapons/polearms_lefthand.dmi and b/icons/mob/inhands/weapons/polearms_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/polearms_righthand.dmi b/icons/mob/inhands/weapons/polearms_righthand.dmi index db760ec7175354..9f7e6239895889 100644 Binary files a/icons/mob/inhands/weapons/polearms_righthand.dmi and b/icons/mob/inhands/weapons/polearms_righthand.dmi differ diff --git a/icons/mob/inhands/weapons/staves_lefthand.dmi b/icons/mob/inhands/weapons/staves_lefthand.dmi index 6e34949c9d5612..83504696b61a33 100644 Binary files a/icons/mob/inhands/weapons/staves_lefthand.dmi and b/icons/mob/inhands/weapons/staves_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/staves_righthand.dmi b/icons/mob/inhands/weapons/staves_righthand.dmi index df52d4d4198766..c83e0eed3abee9 100644 Binary files a/icons/mob/inhands/weapons/staves_righthand.dmi and b/icons/mob/inhands/weapons/staves_righthand.dmi differ diff --git a/icons/mob/inhands/weapons/swords_lefthand.dmi b/icons/mob/inhands/weapons/swords_lefthand.dmi index 4c665b811b5016..e0a33fbcee351e 100644 Binary files a/icons/mob/inhands/weapons/swords_lefthand.dmi and b/icons/mob/inhands/weapons/swords_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/swords_righthand.dmi b/icons/mob/inhands/weapons/swords_righthand.dmi index 407443bb1ed342..fcdac64bdca493 100644 Binary files a/icons/mob/inhands/weapons/swords_righthand.dmi and b/icons/mob/inhands/weapons/swords_righthand.dmi differ diff --git a/icons/mob/large-worn-icons/64x64/head.dmi b/icons/mob/large-worn-icons/64x64/head.dmi index ac6163ddbed8a7..86cf60afef3cba 100644 Binary files a/icons/mob/large-worn-icons/64x64/head.dmi and b/icons/mob/large-worn-icons/64x64/head.dmi differ diff --git a/icons/mob/mecha.dmi b/icons/mob/mecha.dmi index 845b1cdf140da1..f6dcbdec2b7eec 100644 Binary files a/icons/mob/mecha.dmi and b/icons/mob/mecha.dmi differ diff --git a/icons/mob/mecha_equipment.dmi b/icons/mob/mecha_equipment.dmi index 18fe707cafe6e2..90f0ce8c736cfb 100644 Binary files a/icons/mob/mecha_equipment.dmi and b/icons/mob/mecha_equipment.dmi differ diff --git a/icons/mob/nonhuman-player/alien.dmi b/icons/mob/nonhuman-player/alien.dmi index 290df2e263041e..db04cdf8674b46 100644 Binary files a/icons/mob/nonhuman-player/alien.dmi and b/icons/mob/nonhuman-player/alien.dmi differ diff --git a/icons/mob/nonhuman-player/eldritch_mobs.dmi b/icons/mob/nonhuman-player/eldritch_mobs.dmi index 4e640694b2a38e..18e50d727aee53 100644 Binary files a/icons/mob/nonhuman-player/eldritch_mobs.dmi and b/icons/mob/nonhuman-player/eldritch_mobs.dmi differ diff --git a/icons/mob/nonhuman-player/netguardian.dmi b/icons/mob/nonhuman-player/netguardian.dmi new file mode 100644 index 00000000000000..057e7a066c2bea Binary files /dev/null and b/icons/mob/nonhuman-player/netguardian.dmi differ diff --git a/icons/mob/pets.dmi b/icons/mob/pets.dmi index 7c6800d602de3b..8ddeaa0c3f40cd 100644 Binary files a/icons/mob/pets.dmi and b/icons/mob/pets.dmi differ diff --git a/icons/mob/silicon/aibots.dmi b/icons/mob/silicon/aibots.dmi index c87a5916c025ef..a3da5c9cf2bfc8 100644 Binary files a/icons/mob/silicon/aibots.dmi and b/icons/mob/silicon/aibots.dmi differ diff --git a/icons/mob/simple/animal.dmi b/icons/mob/simple/animal.dmi index 123e13a2f44ff7..3bd3438bc62d5d 100644 Binary files a/icons/mob/simple/animal.dmi and b/icons/mob/simple/animal.dmi differ diff --git a/icons/mob/simple/jungle/leaper.dmi b/icons/mob/simple/jungle/leaper.dmi index 39f807a191c2e8..2150c7b1ac2cf8 100644 Binary files a/icons/mob/simple/jungle/leaper.dmi and b/icons/mob/simple/jungle/leaper.dmi differ diff --git a/icons/mob/simple/lavaland/lavaland_monsters.dmi b/icons/mob/simple/lavaland/lavaland_monsters.dmi index f68e3db4a6cb91..ffcfb04cbeb5d7 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/pets.dmi b/icons/mob/simple/pets.dmi index 78212b93c769ec..9bd7d69c06bc5c 100644 Binary files a/icons/mob/simple/pets.dmi and b/icons/mob/simple/pets.dmi differ diff --git a/icons/obj/antags/contractor_tablet.dmi b/icons/obj/antags/contractor_tablet.dmi deleted file mode 100644 index ae3cb579e2b1af..00000000000000 Binary files a/icons/obj/antags/contractor_tablet.dmi and /dev/null differ diff --git a/icons/obj/antags/eldritch.dmi b/icons/obj/antags/eldritch.dmi index d59bf3dbdeb18b..7f6af6bfe2e653 100644 Binary files a/icons/obj/antags/eldritch.dmi and b/icons/obj/antags/eldritch.dmi differ diff --git a/icons/obj/art/musician.dmi b/icons/obj/art/musician.dmi index 6f98eb0d7b0a6a..df48e54e6c61ea 100644 Binary files a/icons/obj/art/musician.dmi and b/icons/obj/art/musician.dmi differ diff --git a/icons/obj/assemblies/module.dmi b/icons/obj/assemblies/module.dmi deleted file mode 100644 index 2656c8db432794..00000000000000 Binary files a/icons/obj/assemblies/module.dmi and /dev/null differ diff --git a/icons/obj/assemblies/new_assemblies.dmi b/icons/obj/assemblies/new_assemblies.dmi deleted file mode 100644 index c3635aeb6d9f7b..00000000000000 Binary files a/icons/obj/assemblies/new_assemblies.dmi and /dev/null differ diff --git a/icons/obj/assemblies/stock_parts.dmi b/icons/obj/assemblies/stock_parts.dmi deleted file mode 100644 index 6b2353b80ddb5f..00000000000000 Binary files a/icons/obj/assemblies/stock_parts.dmi and /dev/null differ diff --git a/icons/obj/canisters.dmi b/icons/obj/canisters.dmi index e57c6ad9b963ff..277833976adbb7 100644 Binary files a/icons/obj/canisters.dmi and b/icons/obj/canisters.dmi differ diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi index a5e34e9cc27cbf..fdf3657c9d1300 100644 Binary files a/icons/obj/card.dmi and b/icons/obj/card.dmi differ diff --git a/icons/obj/clothing/accessories.dmi b/icons/obj/clothing/accessories.dmi index fdba37254eb420..0253485cec3279 100644 Binary files a/icons/obj/clothing/accessories.dmi and b/icons/obj/clothing/accessories.dmi differ diff --git a/icons/obj/clothing/belt_overlays.dmi b/icons/obj/clothing/belt_overlays.dmi index 740a832a023ee7..7a215dcb9b1cc4 100644 Binary files a/icons/obj/clothing/belt_overlays.dmi and b/icons/obj/clothing/belt_overlays.dmi differ diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi index 0a2bd33c4e42a6..5ccdf2c186f895 100644 Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ diff --git a/icons/obj/clothing/head/costume.dmi b/icons/obj/clothing/head/costume.dmi index f676b1c6973d55..3cfbd3d21ef4f5 100644 Binary files a/icons/obj/clothing/head/costume.dmi and b/icons/obj/clothing/head/costume.dmi differ diff --git a/icons/obj/clothing/head/hats.dmi b/icons/obj/clothing/head/hats.dmi index 15117fa69a8354..6cca3da61f41a8 100644 Binary files a/icons/obj/clothing/head/hats.dmi and b/icons/obj/clothing/head/hats.dmi differ diff --git a/icons/obj/clothing/headsets.dmi b/icons/obj/clothing/headsets.dmi new file mode 100644 index 00000000000000..b977487e2c6cea Binary files /dev/null and b/icons/obj/clothing/headsets.dmi differ diff --git a/icons/obj/clothing/modsuit/mod_clothing.dmi b/icons/obj/clothing/modsuit/mod_clothing.dmi index 7eb92f1c3519c5..5070dbb145c9c6 100644 Binary files a/icons/obj/clothing/modsuit/mod_clothing.dmi and b/icons/obj/clothing/modsuit/mod_clothing.dmi differ diff --git a/icons/obj/clothing/neck.dmi b/icons/obj/clothing/neck.dmi index ff7e012324a0a0..6027b0022c45d6 100644 Binary files a/icons/obj/clothing/neck.dmi and b/icons/obj/clothing/neck.dmi differ diff --git a/icons/obj/clothing/suits/armor.dmi b/icons/obj/clothing/suits/armor.dmi index 48fe5c92c339d2..5ff4e25df8636b 100644 Binary files a/icons/obj/clothing/suits/armor.dmi and b/icons/obj/clothing/suits/armor.dmi differ diff --git a/icons/obj/clothing/suits/costume.dmi b/icons/obj/clothing/suits/costume.dmi index 0c08b97605db3c..ad68aea553f7f2 100644 Binary files a/icons/obj/clothing/suits/costume.dmi and b/icons/obj/clothing/suits/costume.dmi differ diff --git a/icons/obj/clothing/suits/jacket.dmi b/icons/obj/clothing/suits/jacket.dmi index dc507017cd25d9..30e1a99d9eed41 100644 Binary files a/icons/obj/clothing/suits/jacket.dmi and b/icons/obj/clothing/suits/jacket.dmi differ diff --git a/icons/obj/clothing/suits/labcoat.dmi b/icons/obj/clothing/suits/labcoat.dmi index fa404813e40dc3..430d11d5f96aba 100644 Binary files a/icons/obj/clothing/suits/labcoat.dmi and b/icons/obj/clothing/suits/labcoat.dmi differ diff --git a/icons/obj/clothing/suits/spacesuit.dmi b/icons/obj/clothing/suits/spacesuit.dmi index de9c1242767c97..84f84ac978e857 100644 Binary files a/icons/obj/clothing/suits/spacesuit.dmi and b/icons/obj/clothing/suits/spacesuit.dmi differ diff --git a/icons/obj/clothing/under/costume.dmi b/icons/obj/clothing/under/costume.dmi index bf60bb0a4452d3..b58f96b82d9b2e 100644 Binary files a/icons/obj/clothing/under/costume.dmi and b/icons/obj/clothing/under/costume.dmi differ diff --git a/icons/obj/clothing/under/security.dmi b/icons/obj/clothing/under/security.dmi index 075e1b5d087d05..35245bec6fa0a7 100644 Binary files a/icons/obj/clothing/under/security.dmi and b/icons/obj/clothing/under/security.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi deleted file mode 100644 index fe74b6c11c5c7d..00000000000000 Binary files a/icons/obj/device.dmi and /dev/null differ diff --git a/icons/obj/assemblies/assemblies.dmi b/icons/obj/devices/assemblies.dmi similarity index 100% rename from icons/obj/assemblies/assemblies.dmi rename to icons/obj/devices/assemblies.dmi diff --git a/icons/obj/devices/circuitry_n_data.dmi b/icons/obj/devices/circuitry_n_data.dmi new file mode 100644 index 00000000000000..6a12910283efac Binary files /dev/null and b/icons/obj/devices/circuitry_n_data.dmi differ diff --git a/icons/obj/devices/flash.dmi b/icons/obj/devices/flash.dmi new file mode 100644 index 00000000000000..27500944aed0ab Binary files /dev/null and b/icons/obj/devices/flash.dmi differ diff --git a/icons/obj/devices/gunmod.dmi b/icons/obj/devices/gunmod.dmi new file mode 100644 index 00000000000000..593facf46acf21 Binary files /dev/null and b/icons/obj/devices/gunmod.dmi differ diff --git a/icons/obj/devices/new_assemblies.dmi b/icons/obj/devices/new_assemblies.dmi new file mode 100644 index 00000000000000..411ad8b61df64e Binary files /dev/null and b/icons/obj/devices/new_assemblies.dmi differ diff --git a/icons/obj/devices/remote.dmi b/icons/obj/devices/remote.dmi new file mode 100644 index 00000000000000..7b1e07462ff451 Binary files /dev/null and b/icons/obj/devices/remote.dmi differ diff --git a/icons/obj/devices/scanner.dmi b/icons/obj/devices/scanner.dmi new file mode 100644 index 00000000000000..0b4a5ef4684e11 Binary files /dev/null and b/icons/obj/devices/scanner.dmi differ diff --git a/icons/obj/devices/stock_parts.dmi b/icons/obj/devices/stock_parts.dmi new file mode 100644 index 00000000000000..d249b0ab234719 Binary files /dev/null and b/icons/obj/devices/stock_parts.dmi differ diff --git a/icons/obj/devices/syndie_gadget.dmi b/icons/obj/devices/syndie_gadget.dmi new file mode 100644 index 00000000000000..4b8670ca7777a2 Binary files /dev/null and b/icons/obj/devices/syndie_gadget.dmi differ diff --git a/icons/obj/devices/tool.dmi b/icons/obj/devices/tool.dmi new file mode 100644 index 00000000000000..0d89f296761bee Binary files /dev/null and b/icons/obj/devices/tool.dmi differ diff --git a/icons/obj/devices/tracker.dmi b/icons/obj/devices/tracker.dmi new file mode 100644 index 00000000000000..e9b3574bd4f76e Binary files /dev/null and b/icons/obj/devices/tracker.dmi differ diff --git a/icons/obj/devices/voice.dmi b/icons/obj/devices/voice.dmi new file mode 100644 index 00000000000000..1e875d9323038d Binary files /dev/null and b/icons/obj/devices/voice.dmi differ diff --git a/icons/obj/drinks/mixed_drinks.dmi b/icons/obj/drinks/mixed_drinks.dmi index afda4ecfe5ed31..231df35f6e6ae3 100644 Binary files a/icons/obj/drinks/mixed_drinks.dmi and b/icons/obj/drinks/mixed_drinks.dmi differ diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index 46d7459e0b0b75..e9468812b99042 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 b5b91520e8ca63..5c27454bd3f512 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/lizard.dmi b/icons/obj/food/lizard.dmi index 7cc7bf0fcf9c54..15bed265e2f413 100644 Binary files a/icons/obj/food/lizard.dmi and b/icons/obj/food/lizard.dmi differ diff --git a/icons/obj/food/meat.dmi b/icons/obj/food/meat.dmi index dec295bcbf0b0e..66761ee20298d0 100644 Binary files a/icons/obj/food/meat.dmi and b/icons/obj/food/meat.dmi differ diff --git a/icons/obj/items_cyborg.dmi b/icons/obj/items_cyborg.dmi index aefea9fddceb7f..f43d96153138ce 100644 Binary files a/icons/obj/items_cyborg.dmi and b/icons/obj/items_cyborg.dmi differ diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi index 061099defd4cd5..2bda7341e518f5 100644 Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ diff --git a/icons/obj/machines/atmospherics/unary_devices.dmi b/icons/obj/machines/atmospherics/unary_devices.dmi index 6a929f211b8dc7..47acf3c29c9c47 100644 Binary files a/icons/obj/machines/atmospherics/unary_devices.dmi and b/icons/obj/machines/atmospherics/unary_devices.dmi differ diff --git a/icons/obj/machines/barsigns.dmi b/icons/obj/machines/barsigns.dmi index c9450a009a152c..01a853be18f5f3 100644 Binary files a/icons/obj/machines/barsigns.dmi and b/icons/obj/machines/barsigns.dmi differ diff --git a/icons/obj/machines/beacon.dmi b/icons/obj/machines/beacon.dmi new file mode 100644 index 00000000000000..8cdf250731966c Binary files /dev/null and b/icons/obj/machines/beacon.dmi differ diff --git a/icons/obj/machines/bitrunning.dmi b/icons/obj/machines/bitrunning.dmi index b3f8ad63a6c993..d61e910d195be3 100644 Binary files a/icons/obj/machines/bitrunning.dmi and b/icons/obj/machines/bitrunning.dmi differ diff --git a/icons/obj/machines/computer.dmi b/icons/obj/machines/computer.dmi index 9cb0dda4967fd4..cba0069cf6f381 100644 Binary files a/icons/obj/machines/computer.dmi and b/icons/obj/machines/computer.dmi differ diff --git a/icons/obj/machines/engine/supermatter.dmi b/icons/obj/machines/engine/supermatter.dmi index 874773ef0859b1..12b6aff39f6389 100644 Binary files a/icons/obj/machines/engine/supermatter.dmi and b/icons/obj/machines/engine/supermatter.dmi differ diff --git a/icons/obj/machines/floor.dmi b/icons/obj/machines/floor.dmi index 6f858465dcdcb1..b4b0b8881b20b3 100644 Binary files a/icons/obj/machines/floor.dmi and b/icons/obj/machines/floor.dmi differ diff --git a/icons/obj/machines/shield_generator.dmi b/icons/obj/machines/shield_generator.dmi index 51ef5676c6b9ef..3a68da9b582598 100644 Binary files a/icons/obj/machines/shield_generator.dmi and b/icons/obj/machines/shield_generator.dmi differ diff --git a/icons/obj/machines/wallmounts.dmi b/icons/obj/machines/wallmounts.dmi index c5f2254c4bb15e..12a9c8e418f08e 100644 Binary files a/icons/obj/machines/wallmounts.dmi and b/icons/obj/machines/wallmounts.dmi differ diff --git a/icons/obj/medical/organs/organs.dmi b/icons/obj/medical/organs/organs.dmi index 94ba46568c9290..0d04f7fae3ce4f 100644 Binary files a/icons/obj/medical/organs/organs.dmi and b/icons/obj/medical/organs/organs.dmi differ diff --git a/icons/obj/medical/reagent_fillings.dmi b/icons/obj/medical/reagent_fillings.dmi index 524b52419a6975..0d535c6cac2b3f 100644 Binary files a/icons/obj/medical/reagent_fillings.dmi and b/icons/obj/medical/reagent_fillings.dmi differ diff --git a/icons/obj/mining_zones/artefacts.dmi b/icons/obj/mining_zones/artefacts.dmi index d4c603834d21be..968bbe5b621d38 100644 Binary files a/icons/obj/mining_zones/artefacts.dmi and b/icons/obj/mining_zones/artefacts.dmi differ diff --git a/icons/obj/mining_zones/ash_flora.dmi b/icons/obj/mining_zones/ash_flora.dmi index d796c200071c00..1f4aa469e133a2 100644 Binary files a/icons/obj/mining_zones/ash_flora.dmi and b/icons/obj/mining_zones/ash_flora.dmi differ diff --git a/icons/obj/modular_pda.dmi b/icons/obj/modular_pda.dmi index b43be78e717b06..6dfe29add9ea4e 100644 Binary files a/icons/obj/modular_pda.dmi and b/icons/obj/modular_pda.dmi differ diff --git a/icons/obj/pipes_n_cables/hydrochem/plumbers.dmi b/icons/obj/pipes_n_cables/hydrochem/plumbers.dmi index 19775b6eff8a22..555b6c6328b02a 100644 Binary files a/icons/obj/pipes_n_cables/hydrochem/plumbers.dmi and b/icons/obj/pipes_n_cables/hydrochem/plumbers.dmi differ diff --git a/icons/obj/pipes_n_cables/prototype_canister.dmi b/icons/obj/pipes_n_cables/prototype_canister.dmi deleted file mode 100644 index fb73aa2ed6d25f..00000000000000 Binary files a/icons/obj/pipes_n_cables/prototype_canister.dmi and /dev/null differ diff --git a/icons/obj/radio.dmi b/icons/obj/radio.dmi deleted file mode 100644 index e30e7d49f6f297..00000000000000 Binary files a/icons/obj/radio.dmi and /dev/null differ diff --git a/icons/obj/service/bureaucracy.dmi b/icons/obj/service/bureaucracy.dmi index 8cccb7f591032d..36518b42799a1a 100644 Binary files a/icons/obj/service/bureaucracy.dmi and b/icons/obj/service/bureaucracy.dmi differ diff --git a/icons/obj/service/hydroponics/growing.dmi b/icons/obj/service/hydroponics/growing.dmi index fcf738998636ae..aee567daa54457 100644 Binary files a/icons/obj/service/hydroponics/growing.dmi and b/icons/obj/service/hydroponics/growing.dmi differ diff --git a/icons/obj/service/hydroponics/growing_vegetables.dmi b/icons/obj/service/hydroponics/growing_vegetables.dmi index bf49c72ba79b54..30f02e862e037a 100644 Binary files a/icons/obj/service/hydroponics/growing_vegetables.dmi and b/icons/obj/service/hydroponics/growing_vegetables.dmi differ diff --git a/icons/obj/service/hydroponics/harvest.dmi b/icons/obj/service/hydroponics/harvest.dmi index f4489b01fa0538..b15a34105dec24 100644 Binary files a/icons/obj/service/hydroponics/harvest.dmi and b/icons/obj/service/hydroponics/harvest.dmi differ diff --git a/icons/obj/service/hydroponics/seeds.dmi b/icons/obj/service/hydroponics/seeds.dmi index db6f93878d06fd..4de1a757e1fbc4 100644 Binary files a/icons/obj/service/hydroponics/seeds.dmi and b/icons/obj/service/hydroponics/seeds.dmi differ diff --git a/icons/obj/service/janitor.dmi b/icons/obj/service/janitor.dmi index 0e814ca4545899..454ad36f9895b4 100644 Binary files a/icons/obj/service/janitor.dmi and b/icons/obj/service/janitor.dmi differ diff --git a/icons/obj/service/library.dmi b/icons/obj/service/library.dmi index 8229c1fc3947e7..79a06dd4b8f912 100644 Binary files a/icons/obj/service/library.dmi and b/icons/obj/service/library.dmi differ diff --git a/icons/obj/signs.dmi b/icons/obj/signs.dmi index 9ece919c21332f..78cc96fabbc138 100644 Binary files a/icons/obj/signs.dmi and b/icons/obj/signs.dmi differ diff --git a/icons/obj/smooth_structures/alien/nest.dmi b/icons/obj/smooth_structures/alien/nest.dmi index 6de377886f9cde..5f2c2503ba2098 100644 Binary files a/icons/obj/smooth_structures/alien/nest.dmi and b/icons/obj/smooth_structures/alien/nest.dmi differ diff --git a/icons/obj/smooth_structures/alien/nest.png b/icons/obj/smooth_structures/alien/nest.png new file mode 100644 index 00000000000000..65d06047e34ec5 Binary files /dev/null and b/icons/obj/smooth_structures/alien/nest.png differ diff --git a/icons/obj/smooth_structures/alien/nest.png.toml b/icons/obj/smooth_structures/alien/nest.png.toml new file mode 100644 index 00000000000000..0d2dedabe815a0 --- /dev/null +++ b/icons/obj/smooth_structures/alien/nest.png.toml @@ -0,0 +1,2 @@ +output_name = "nest" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/alien/resin_membrane.dmi b/icons/obj/smooth_structures/alien/resin_membrane.dmi index 1ea306eaa669d0..f91125dcecafd3 100644 Binary files a/icons/obj/smooth_structures/alien/resin_membrane.dmi and b/icons/obj/smooth_structures/alien/resin_membrane.dmi differ diff --git a/icons/obj/smooth_structures/alien/resin_membrane.png b/icons/obj/smooth_structures/alien/resin_membrane.png new file mode 100644 index 00000000000000..3ea4dc33eccef5 Binary files /dev/null and b/icons/obj/smooth_structures/alien/resin_membrane.png differ diff --git a/icons/obj/smooth_structures/alien/resin_membrane.png.toml b/icons/obj/smooth_structures/alien/resin_membrane.png.toml new file mode 100644 index 00000000000000..be1ef95dde4239 --- /dev/null +++ b/icons/obj/smooth_structures/alien/resin_membrane.png.toml @@ -0,0 +1,2 @@ +output_name = "resin_membrane" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/alien/resin_wall.dmi b/icons/obj/smooth_structures/alien/resin_wall.dmi index 7d837172b8ce02..1c2be2e9076359 100644 Binary files a/icons/obj/smooth_structures/alien/resin_wall.dmi and b/icons/obj/smooth_structures/alien/resin_wall.dmi differ diff --git a/icons/obj/smooth_structures/alien/resin_wall.png b/icons/obj/smooth_structures/alien/resin_wall.png new file mode 100644 index 00000000000000..d42f25a43fd892 Binary files /dev/null and b/icons/obj/smooth_structures/alien/resin_wall.png differ diff --git a/icons/obj/smooth_structures/alien/resin_wall.png.toml b/icons/obj/smooth_structures/alien/resin_wall.png.toml new file mode 100644 index 00000000000000..d0ef4fffbdeacc --- /dev/null +++ b/icons/obj/smooth_structures/alien/resin_wall.png.toml @@ -0,0 +1,2 @@ +output_name = "resin_wall" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/alien/weednode.dmi b/icons/obj/smooth_structures/alien/weednode.dmi index e8a0e000e1bb67..926730d899120d 100644 Binary files a/icons/obj/smooth_structures/alien/weednode.dmi and b/icons/obj/smooth_structures/alien/weednode.dmi differ diff --git a/icons/obj/smooth_structures/alien/weednode.png b/icons/obj/smooth_structures/alien/weednode.png new file mode 100644 index 00000000000000..0a6992d4e8b86e Binary files /dev/null and b/icons/obj/smooth_structures/alien/weednode.png differ diff --git a/icons/obj/smooth_structures/alien/weednode.png.toml b/icons/obj/smooth_structures/alien/weednode.png.toml new file mode 100644 index 00000000000000..591ca723785ba4 --- /dev/null +++ b/icons/obj/smooth_structures/alien/weednode.png.toml @@ -0,0 +1,14 @@ +output_name = "weednode" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 40 +y = 40 + +[output_icon_size] +x = 40 +y = 40 + +[cut_pos] +x = 20 +y = 20 \ No newline at end of file diff --git a/icons/obj/smooth_structures/alien/weeds1.dmi b/icons/obj/smooth_structures/alien/weeds1.dmi index 0809848b55ff06..4ba1bafcfe5255 100644 Binary files a/icons/obj/smooth_structures/alien/weeds1.dmi and b/icons/obj/smooth_structures/alien/weeds1.dmi differ diff --git a/icons/obj/smooth_structures/alien/weeds1.png b/icons/obj/smooth_structures/alien/weeds1.png new file mode 100644 index 00000000000000..1275858dba8895 Binary files /dev/null and b/icons/obj/smooth_structures/alien/weeds1.png differ diff --git a/icons/obj/smooth_structures/alien/weeds1.png.toml b/icons/obj/smooth_structures/alien/weeds1.png.toml new file mode 100644 index 00000000000000..8dc62bea3ccbe8 --- /dev/null +++ b/icons/obj/smooth_structures/alien/weeds1.png.toml @@ -0,0 +1,14 @@ +output_name = "weeds1" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 40 +y = 40 + +[output_icon_size] +x = 40 +y = 40 + +[cut_pos] +x = 20 +y = 20 \ No newline at end of file diff --git a/icons/obj/smooth_structures/alien/weeds2.dmi b/icons/obj/smooth_structures/alien/weeds2.dmi index 567e9bfb7151c4..12c3b37b0ad7b9 100644 Binary files a/icons/obj/smooth_structures/alien/weeds2.dmi and b/icons/obj/smooth_structures/alien/weeds2.dmi differ diff --git a/icons/obj/smooth_structures/alien/weeds2.png b/icons/obj/smooth_structures/alien/weeds2.png new file mode 100644 index 00000000000000..a3e0002774b2bd Binary files /dev/null and b/icons/obj/smooth_structures/alien/weeds2.png differ diff --git a/icons/obj/smooth_structures/alien/weeds2.png.toml b/icons/obj/smooth_structures/alien/weeds2.png.toml new file mode 100644 index 00000000000000..a24f8c01759ce6 --- /dev/null +++ b/icons/obj/smooth_structures/alien/weeds2.png.toml @@ -0,0 +1,14 @@ +output_name = "weeds2" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 40 +y = 40 + +[output_icon_size] +x = 40 +y = 40 + +[cut_pos] +x = 20 +y = 20 \ No newline at end of file diff --git a/icons/obj/smooth_structures/alien/weeds3.dmi b/icons/obj/smooth_structures/alien/weeds3.dmi index 1903262a371950..45665d8969ede4 100644 Binary files a/icons/obj/smooth_structures/alien/weeds3.dmi and b/icons/obj/smooth_structures/alien/weeds3.dmi differ diff --git a/icons/obj/smooth_structures/alien/weeds3.png b/icons/obj/smooth_structures/alien/weeds3.png new file mode 100644 index 00000000000000..b9c0d4440156bd Binary files /dev/null and b/icons/obj/smooth_structures/alien/weeds3.png differ diff --git a/icons/obj/smooth_structures/alien/weeds3.png.toml b/icons/obj/smooth_structures/alien/weeds3.png.toml new file mode 100644 index 00000000000000..19eb01420b4e29 --- /dev/null +++ b/icons/obj/smooth_structures/alien/weeds3.png.toml @@ -0,0 +1,14 @@ +output_name = "weeds3" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 40 +y = 40 + +[output_icon_size] +x = 40 +y = 40 + +[cut_pos] +x = 20 +y = 20 \ No newline at end of file diff --git a/icons/obj/smooth_structures/alien_table.dmi b/icons/obj/smooth_structures/alien_table.dmi index 63492d241ba342..865b7d3572f16f 100644 Binary files a/icons/obj/smooth_structures/alien_table.dmi and b/icons/obj/smooth_structures/alien_table.dmi differ diff --git a/icons/obj/smooth_structures/alien_table.png b/icons/obj/smooth_structures/alien_table.png new file mode 100644 index 00000000000000..d9a5c3b73e41e6 Binary files /dev/null and b/icons/obj/smooth_structures/alien_table.png differ diff --git a/icons/obj/smooth_structures/alien_table.png.toml b/icons/obj/smooth_structures/alien_table.png.toml new file mode 100644 index 00000000000000..8ae63217ae571a --- /dev/null +++ b/icons/obj/smooth_structures/alien_table.png.toml @@ -0,0 +1,2 @@ +output_name = "alien_table" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/brass_table.dmi b/icons/obj/smooth_structures/brass_table.dmi index c48f99062e2c6b..74417b815ab385 100644 Binary files a/icons/obj/smooth_structures/brass_table.dmi and b/icons/obj/smooth_structures/brass_table.dmi differ diff --git a/icons/obj/smooth_structures/brass_table.png b/icons/obj/smooth_structures/brass_table.png new file mode 100644 index 00000000000000..2552eb2f92b0e0 Binary files /dev/null and b/icons/obj/smooth_structures/brass_table.png differ diff --git a/icons/obj/smooth_structures/brass_table.png.toml b/icons/obj/smooth_structures/brass_table.png.toml new file mode 100644 index 00000000000000..d633747042d554 --- /dev/null +++ b/icons/obj/smooth_structures/brass_table.png.toml @@ -0,0 +1,2 @@ +output_name = "brass_table" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/catwalk.dmi b/icons/obj/smooth_structures/catwalk.dmi index 0920cc571f1e59..568afb15fea9de 100644 Binary files a/icons/obj/smooth_structures/catwalk.dmi and b/icons/obj/smooth_structures/catwalk.dmi differ diff --git a/icons/obj/smooth_structures/catwalk.png b/icons/obj/smooth_structures/catwalk.png new file mode 100644 index 00000000000000..5d9cc940562555 Binary files /dev/null and b/icons/obj/smooth_structures/catwalk.png differ diff --git a/icons/obj/smooth_structures/catwalk.png.toml b/icons/obj/smooth_structures/catwalk.png.toml new file mode 100644 index 00000000000000..42610e2043b1c8 --- /dev/null +++ b/icons/obj/smooth_structures/catwalk.png.toml @@ -0,0 +1,2 @@ +output_name = "catwalk" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/clockwork_window.dmi b/icons/obj/smooth_structures/clockwork_window.dmi index 674a16d43e052d..6676095e9fbf3d 100644 Binary files a/icons/obj/smooth_structures/clockwork_window.dmi and b/icons/obj/smooth_structures/clockwork_window.dmi differ diff --git a/icons/obj/smooth_structures/clockwork_window.png b/icons/obj/smooth_structures/clockwork_window.png new file mode 100644 index 00000000000000..a94b706447b63c Binary files /dev/null and b/icons/obj/smooth_structures/clockwork_window.png differ diff --git a/icons/obj/smooth_structures/clockwork_window.png.toml b/icons/obj/smooth_structures/clockwork_window.png.toml new file mode 100644 index 00000000000000..72375e77541023 --- /dev/null +++ b/icons/obj/smooth_structures/clockwork_window.png.toml @@ -0,0 +1,2 @@ +output_name = "clockwork_window" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/fancy_table.dmi b/icons/obj/smooth_structures/fancy_table.dmi index 475ca392ba0b7f..c72e06d6798a6c 100644 Binary files a/icons/obj/smooth_structures/fancy_table.dmi and b/icons/obj/smooth_structures/fancy_table.dmi differ diff --git a/icons/obj/smooth_structures/fancy_table.png b/icons/obj/smooth_structures/fancy_table.png new file mode 100644 index 00000000000000..3ca279bbd72bae Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table.png differ diff --git a/icons/obj/smooth_structures/fancy_table.png.toml b/icons/obj/smooth_structures/fancy_table.png.toml new file mode 100644 index 00000000000000..df9ca0016d76d1 --- /dev/null +++ b/icons/obj/smooth_structures/fancy_table.png.toml @@ -0,0 +1,14 @@ +output_name = "fancy_table" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 34 + +[output_icon_size] +x = 32 +y = 34 + +[cut_pos] +x = 16 +y = 17 \ No newline at end of file diff --git a/icons/obj/smooth_structures/fancy_table_black.dmi b/icons/obj/smooth_structures/fancy_table_black.dmi index 86d4410533fbc3..3be7232af5ee74 100644 Binary files a/icons/obj/smooth_structures/fancy_table_black.dmi and b/icons/obj/smooth_structures/fancy_table_black.dmi differ diff --git a/icons/obj/smooth_structures/fancy_table_black.png b/icons/obj/smooth_structures/fancy_table_black.png new file mode 100644 index 00000000000000..f7e2bfa810bce0 Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table_black.png differ diff --git a/icons/obj/smooth_structures/fancy_table_black.png.toml b/icons/obj/smooth_structures/fancy_table_black.png.toml new file mode 100644 index 00000000000000..acf7a6b8213772 --- /dev/null +++ b/icons/obj/smooth_structures/fancy_table_black.png.toml @@ -0,0 +1,14 @@ +output_name = "fancy_table_black" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 34 + +[output_icon_size] +x = 32 +y = 34 + +[cut_pos] +x = 16 +y = 17 \ No newline at end of file diff --git a/icons/obj/smooth_structures/fancy_table_blue.dmi b/icons/obj/smooth_structures/fancy_table_blue.dmi index cb0fe3c8fafee9..26263e514911fb 100644 Binary files a/icons/obj/smooth_structures/fancy_table_blue.dmi and b/icons/obj/smooth_structures/fancy_table_blue.dmi differ diff --git a/icons/obj/smooth_structures/fancy_table_blue.png b/icons/obj/smooth_structures/fancy_table_blue.png new file mode 100644 index 00000000000000..ad2d4192c7f06e Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table_blue.png differ diff --git a/icons/obj/smooth_structures/fancy_table_blue.png.toml b/icons/obj/smooth_structures/fancy_table_blue.png.toml new file mode 100644 index 00000000000000..0a71213ab340b4 --- /dev/null +++ b/icons/obj/smooth_structures/fancy_table_blue.png.toml @@ -0,0 +1,14 @@ +output_name = "fancy_table_blue" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 34 + +[output_icon_size] +x = 32 +y = 34 + +[cut_pos] +x = 16 +y = 17 \ No newline at end of file diff --git a/icons/obj/smooth_structures/fancy_table_cyan.dmi b/icons/obj/smooth_structures/fancy_table_cyan.dmi index 8343ae6761a6f2..6da44a863cd5ab 100644 Binary files a/icons/obj/smooth_structures/fancy_table_cyan.dmi and b/icons/obj/smooth_structures/fancy_table_cyan.dmi differ diff --git a/icons/obj/smooth_structures/fancy_table_cyan.png b/icons/obj/smooth_structures/fancy_table_cyan.png new file mode 100644 index 00000000000000..96a68b93617350 Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table_cyan.png differ diff --git a/icons/obj/smooth_structures/fancy_table_cyan.png.toml b/icons/obj/smooth_structures/fancy_table_cyan.png.toml new file mode 100644 index 00000000000000..6991b7ea5248af --- /dev/null +++ b/icons/obj/smooth_structures/fancy_table_cyan.png.toml @@ -0,0 +1,14 @@ +output_name = "fancy_table_cyan" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 34 + +[output_icon_size] +x = 32 +y = 34 + +[cut_pos] +x = 16 +y = 17 \ No newline at end of file diff --git a/icons/obj/smooth_structures/fancy_table_green.dmi b/icons/obj/smooth_structures/fancy_table_green.dmi index 86c1746a7dfa5c..dc6c7e4703c833 100644 Binary files a/icons/obj/smooth_structures/fancy_table_green.dmi and b/icons/obj/smooth_structures/fancy_table_green.dmi differ diff --git a/icons/obj/smooth_structures/fancy_table_green.png b/icons/obj/smooth_structures/fancy_table_green.png new file mode 100644 index 00000000000000..616eeeaa6eca01 Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table_green.png differ diff --git a/icons/obj/smooth_structures/fancy_table_green.png.toml b/icons/obj/smooth_structures/fancy_table_green.png.toml new file mode 100644 index 00000000000000..a4486179c6aa80 --- /dev/null +++ b/icons/obj/smooth_structures/fancy_table_green.png.toml @@ -0,0 +1,14 @@ +output_name = "fancy_table_green" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 34 + +[output_icon_size] +x = 32 +y = 34 + +[cut_pos] +x = 16 +y = 17 \ No newline at end of file diff --git a/icons/obj/smooth_structures/fancy_table_orange.dmi b/icons/obj/smooth_structures/fancy_table_orange.dmi index f55ef38ac5576c..91428a7525318a 100644 Binary files a/icons/obj/smooth_structures/fancy_table_orange.dmi and b/icons/obj/smooth_structures/fancy_table_orange.dmi differ diff --git a/icons/obj/smooth_structures/fancy_table_orange.png b/icons/obj/smooth_structures/fancy_table_orange.png new file mode 100644 index 00000000000000..d2aff0ff4c177b Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table_orange.png differ diff --git a/icons/obj/smooth_structures/fancy_table_orange.png.toml b/icons/obj/smooth_structures/fancy_table_orange.png.toml new file mode 100644 index 00000000000000..fcca03afb5aaf1 --- /dev/null +++ b/icons/obj/smooth_structures/fancy_table_orange.png.toml @@ -0,0 +1,14 @@ +output_name = "fancy_table_orange" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 34 + +[output_icon_size] +x = 32 +y = 34 + +[cut_pos] +x = 16 +y = 17 \ No newline at end of file diff --git a/icons/obj/smooth_structures/fancy_table_purple.dmi b/icons/obj/smooth_structures/fancy_table_purple.dmi index 52bdb02980c253..930b0556520f89 100644 Binary files a/icons/obj/smooth_structures/fancy_table_purple.dmi and b/icons/obj/smooth_structures/fancy_table_purple.dmi differ diff --git a/icons/obj/smooth_structures/fancy_table_purple.png b/icons/obj/smooth_structures/fancy_table_purple.png new file mode 100644 index 00000000000000..fad1b80c9229af Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table_purple.png differ diff --git a/icons/obj/smooth_structures/fancy_table_purple.png.toml b/icons/obj/smooth_structures/fancy_table_purple.png.toml new file mode 100644 index 00000000000000..2da707716ff04c --- /dev/null +++ b/icons/obj/smooth_structures/fancy_table_purple.png.toml @@ -0,0 +1,14 @@ +output_name = "fancy_table_purple" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 34 + +[output_icon_size] +x = 32 +y = 34 + +[cut_pos] +x = 16 +y = 17 \ No newline at end of file diff --git a/icons/obj/smooth_structures/fancy_table_red.dmi b/icons/obj/smooth_structures/fancy_table_red.dmi index eb84340873bf76..ceca04aeb06095 100644 Binary files a/icons/obj/smooth_structures/fancy_table_red.dmi and b/icons/obj/smooth_structures/fancy_table_red.dmi differ diff --git a/icons/obj/smooth_structures/fancy_table_red.png b/icons/obj/smooth_structures/fancy_table_red.png new file mode 100644 index 00000000000000..f94307cb7d42a2 Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table_red.png differ diff --git a/icons/obj/smooth_structures/fancy_table_red.png.toml b/icons/obj/smooth_structures/fancy_table_red.png.toml new file mode 100644 index 00000000000000..d3b99e80746ec8 --- /dev/null +++ b/icons/obj/smooth_structures/fancy_table_red.png.toml @@ -0,0 +1,14 @@ +output_name = "fancy_table_red" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 34 + +[output_icon_size] +x = 32 +y = 34 + +[cut_pos] +x = 16 +y = 17 \ No newline at end of file diff --git a/icons/obj/smooth_structures/fancy_table_royalblack.dmi b/icons/obj/smooth_structures/fancy_table_royalblack.dmi index 3fafd6b23c2996..b7f6f6e284db7b 100644 Binary files a/icons/obj/smooth_structures/fancy_table_royalblack.dmi and b/icons/obj/smooth_structures/fancy_table_royalblack.dmi differ diff --git a/icons/obj/smooth_structures/fancy_table_royalblack.png b/icons/obj/smooth_structures/fancy_table_royalblack.png new file mode 100644 index 00000000000000..82913622d1ee64 Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table_royalblack.png differ diff --git a/icons/obj/smooth_structures/fancy_table_royalblack.png.toml b/icons/obj/smooth_structures/fancy_table_royalblack.png.toml new file mode 100644 index 00000000000000..76a975938f87fe --- /dev/null +++ b/icons/obj/smooth_structures/fancy_table_royalblack.png.toml @@ -0,0 +1,14 @@ +output_name = "fancy_table_royalblack" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 34 + +[output_icon_size] +x = 32 +y = 34 + +[cut_pos] +x = 16 +y = 17 \ No newline at end of file diff --git a/icons/obj/smooth_structures/fancy_table_royalblue.dmi b/icons/obj/smooth_structures/fancy_table_royalblue.dmi index bd4400bfb0a1a6..8f7a03ba5adc22 100644 Binary files a/icons/obj/smooth_structures/fancy_table_royalblue.dmi and b/icons/obj/smooth_structures/fancy_table_royalblue.dmi differ diff --git a/icons/obj/smooth_structures/fancy_table_royalblue.png b/icons/obj/smooth_structures/fancy_table_royalblue.png new file mode 100644 index 00000000000000..6b1a2b2a813484 Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table_royalblue.png differ diff --git a/icons/obj/smooth_structures/fancy_table_royalblue.png.toml b/icons/obj/smooth_structures/fancy_table_royalblue.png.toml new file mode 100644 index 00000000000000..59987f0feb8b12 --- /dev/null +++ b/icons/obj/smooth_structures/fancy_table_royalblue.png.toml @@ -0,0 +1,14 @@ +output_name = "fancy_table_royalblue" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 34 + +[output_icon_size] +x = 32 +y = 34 + +[cut_pos] +x = 16 +y = 17 \ No newline at end of file diff --git a/icons/obj/smooth_structures/glass_table.dmi b/icons/obj/smooth_structures/glass_table.dmi index 09ecbc1bb44aef..56c43801832b44 100644 Binary files a/icons/obj/smooth_structures/glass_table.dmi and b/icons/obj/smooth_structures/glass_table.dmi differ diff --git a/icons/obj/smooth_structures/glass_table.png b/icons/obj/smooth_structures/glass_table.png new file mode 100644 index 00000000000000..f61de10c5077d5 Binary files /dev/null and b/icons/obj/smooth_structures/glass_table.png differ diff --git a/icons/obj/smooth_structures/glass_table.png.toml b/icons/obj/smooth_structures/glass_table.png.toml new file mode 100644 index 00000000000000..91177545f2c072 --- /dev/null +++ b/icons/obj/smooth_structures/glass_table.png.toml @@ -0,0 +1,2 @@ +output_name = "glass_table" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/hedge.dmi b/icons/obj/smooth_structures/hedge.dmi index 9c38bc844f6d43..dea538dd752bda 100644 Binary files a/icons/obj/smooth_structures/hedge.dmi and b/icons/obj/smooth_structures/hedge.dmi differ diff --git a/icons/obj/smooth_structures/hedge.png b/icons/obj/smooth_structures/hedge.png new file mode 100644 index 00000000000000..923c425cb3258b Binary files /dev/null and b/icons/obj/smooth_structures/hedge.png differ diff --git a/icons/obj/smooth_structures/hedge.png.toml b/icons/obj/smooth_structures/hedge.png.toml new file mode 100644 index 00000000000000..a03553bb3260b3 --- /dev/null +++ b/icons/obj/smooth_structures/hedge.png.toml @@ -0,0 +1,2 @@ +output_name = "hedge" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/lattice.dmi b/icons/obj/smooth_structures/lattice.dmi index d9223ded775fb6..3ae4964a11f7a6 100644 Binary files a/icons/obj/smooth_structures/lattice.dmi and b/icons/obj/smooth_structures/lattice.dmi differ diff --git a/icons/obj/smooth_structures/lattice.png b/icons/obj/smooth_structures/lattice.png new file mode 100644 index 00000000000000..9d00f8dfe20e8b Binary files /dev/null and b/icons/obj/smooth_structures/lattice.png differ diff --git a/icons/obj/smooth_structures/lattice.png.toml b/icons/obj/smooth_structures/lattice.png.toml new file mode 100644 index 00000000000000..63e711fce31329 --- /dev/null +++ b/icons/obj/smooth_structures/lattice.png.toml @@ -0,0 +1,2 @@ +output_name = "lattice" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/paperframes.dmi b/icons/obj/smooth_structures/paperframes.dmi index 9982db639cba6e..0adb2646b1c03b 100644 Binary files a/icons/obj/smooth_structures/paperframes.dmi and b/icons/obj/smooth_structures/paperframes.dmi differ diff --git a/icons/obj/smooth_structures/paperframes.png b/icons/obj/smooth_structures/paperframes.png new file mode 100644 index 00000000000000..b6d10892eccb92 Binary files /dev/null and b/icons/obj/smooth_structures/paperframes.png differ diff --git a/icons/obj/smooth_structures/paperframes.png.toml b/icons/obj/smooth_structures/paperframes.png.toml new file mode 100644 index 00000000000000..5d3bbe124429df --- /dev/null +++ b/icons/obj/smooth_structures/paperframes.png.toml @@ -0,0 +1,2 @@ +output_name = "paperframes" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/plasma_window.dmi b/icons/obj/smooth_structures/plasma_window.dmi index eaed6f219e087d..bbfe7591777367 100644 Binary files a/icons/obj/smooth_structures/plasma_window.dmi and b/icons/obj/smooth_structures/plasma_window.dmi differ diff --git a/icons/obj/smooth_structures/plasma_window.png b/icons/obj/smooth_structures/plasma_window.png new file mode 100644 index 00000000000000..d38c888be9af91 Binary files /dev/null and b/icons/obj/smooth_structures/plasma_window.png differ diff --git a/icons/obj/smooth_structures/plasma_window.png.toml b/icons/obj/smooth_structures/plasma_window.png.toml new file mode 100644 index 00000000000000..2ed25c1b89ccc9 --- /dev/null +++ b/icons/obj/smooth_structures/plasma_window.png.toml @@ -0,0 +1,2 @@ +output_name = "plasma_window" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/plasmaglass_table.dmi b/icons/obj/smooth_structures/plasmaglass_table.dmi index 5dfe68d0673b96..7c90a489e82de3 100644 Binary files a/icons/obj/smooth_structures/plasmaglass_table.dmi and b/icons/obj/smooth_structures/plasmaglass_table.dmi differ diff --git a/icons/obj/smooth_structures/plasmaglass_table.png b/icons/obj/smooth_structures/plasmaglass_table.png new file mode 100644 index 00000000000000..f3b062d6fdb966 Binary files /dev/null and b/icons/obj/smooth_structures/plasmaglass_table.png differ diff --git a/icons/obj/smooth_structures/plasmaglass_table.png.toml b/icons/obj/smooth_structures/plasmaglass_table.png.toml new file mode 100644 index 00000000000000..744e082acf62fa --- /dev/null +++ b/icons/obj/smooth_structures/plasmaglass_table.png.toml @@ -0,0 +1,2 @@ +output_name = "plasmaglass_table" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/plastitanium_window.dmi b/icons/obj/smooth_structures/plastitanium_window.dmi index 14ec56a59c40e2..85eae01e8cb83e 100644 Binary files a/icons/obj/smooth_structures/plastitanium_window.dmi and b/icons/obj/smooth_structures/plastitanium_window.dmi differ diff --git a/icons/obj/smooth_structures/plastitanium_window.png b/icons/obj/smooth_structures/plastitanium_window.png new file mode 100644 index 00000000000000..114e5d7e0219d8 Binary files /dev/null and b/icons/obj/smooth_structures/plastitanium_window.png differ diff --git a/icons/obj/smooth_structures/plastitanium_window.png.toml b/icons/obj/smooth_structures/plastitanium_window.png.toml new file mode 100644 index 00000000000000..fe2fcaada1deea --- /dev/null +++ b/icons/obj/smooth_structures/plastitanium_window.png.toml @@ -0,0 +1,2 @@ +output_name = "plastitanium_window" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/plastitaniumglass_table.dmi b/icons/obj/smooth_structures/plastitaniumglass_table.dmi index 4c4a6438690cc8..78b6af93ba2a8f 100644 Binary files a/icons/obj/smooth_structures/plastitaniumglass_table.dmi and b/icons/obj/smooth_structures/plastitaniumglass_table.dmi differ diff --git a/icons/obj/smooth_structures/plastitaniumglass_table.png b/icons/obj/smooth_structures/plastitaniumglass_table.png new file mode 100644 index 00000000000000..b9619645bdfa67 Binary files /dev/null and b/icons/obj/smooth_structures/plastitaniumglass_table.png differ diff --git a/icons/obj/smooth_structures/plastitaniumglass_table.png.toml b/icons/obj/smooth_structures/plastitaniumglass_table.png.toml new file mode 100644 index 00000000000000..b1db1da55fc060 --- /dev/null +++ b/icons/obj/smooth_structures/plastitaniumglass_table.png.toml @@ -0,0 +1,2 @@ +output_name = "plastitaniumglass_table" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/pod_window.dmi b/icons/obj/smooth_structures/pod_window.dmi index 46d4208b4b5de6..f179cea280f9ba 100644 Binary files a/icons/obj/smooth_structures/pod_window.dmi and b/icons/obj/smooth_structures/pod_window.dmi differ diff --git a/icons/obj/smooth_structures/pod_window.png b/icons/obj/smooth_structures/pod_window.png new file mode 100644 index 00000000000000..3bc31691919b8f Binary files /dev/null and b/icons/obj/smooth_structures/pod_window.png differ diff --git a/icons/obj/smooth_structures/pod_window.png.toml b/icons/obj/smooth_structures/pod_window.png.toml new file mode 100644 index 00000000000000..f23c6e7a3ae249 --- /dev/null +++ b/icons/obj/smooth_structures/pod_window.png.toml @@ -0,0 +1,2 @@ +output_name = "pod_window" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/poker_table.dmi b/icons/obj/smooth_structures/poker_table.dmi index d0b70822771fb5..3dbc230ad0b231 100644 Binary files a/icons/obj/smooth_structures/poker_table.dmi and b/icons/obj/smooth_structures/poker_table.dmi differ diff --git a/icons/obj/smooth_structures/poker_table.png b/icons/obj/smooth_structures/poker_table.png new file mode 100644 index 00000000000000..1be2da6519631c Binary files /dev/null and b/icons/obj/smooth_structures/poker_table.png differ diff --git a/icons/obj/smooth_structures/poker_table.png.toml b/icons/obj/smooth_structures/poker_table.png.toml new file mode 100644 index 00000000000000..b12426f9236e6d --- /dev/null +++ b/icons/obj/smooth_structures/poker_table.png.toml @@ -0,0 +1,2 @@ +output_name = "poker_table" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/reinforced_table.dmi b/icons/obj/smooth_structures/reinforced_table.dmi index b2867b579945ed..5053deff017c1e 100644 Binary files a/icons/obj/smooth_structures/reinforced_table.dmi and b/icons/obj/smooth_structures/reinforced_table.dmi differ diff --git a/icons/obj/smooth_structures/reinforced_table.png b/icons/obj/smooth_structures/reinforced_table.png new file mode 100644 index 00000000000000..0f9ae450e562a2 Binary files /dev/null and b/icons/obj/smooth_structures/reinforced_table.png differ diff --git a/icons/obj/smooth_structures/reinforced_table.png.toml b/icons/obj/smooth_structures/reinforced_table.png.toml new file mode 100644 index 00000000000000..f7143356b4c943 --- /dev/null +++ b/icons/obj/smooth_structures/reinforced_table.png.toml @@ -0,0 +1,2 @@ +output_name = "reinforced_table" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/reinforced_window.dmi b/icons/obj/smooth_structures/reinforced_window.dmi index a66b648786da4a..5506e827416767 100644 Binary files a/icons/obj/smooth_structures/reinforced_window.dmi and b/icons/obj/smooth_structures/reinforced_window.dmi differ diff --git a/icons/obj/smooth_structures/reinforced_window.png b/icons/obj/smooth_structures/reinforced_window.png new file mode 100644 index 00000000000000..d7a4f76654d03e Binary files /dev/null and b/icons/obj/smooth_structures/reinforced_window.png differ diff --git a/icons/obj/smooth_structures/reinforced_window.png.toml b/icons/obj/smooth_structures/reinforced_window.png.toml new file mode 100644 index 00000000000000..686fd268e3b0d8 --- /dev/null +++ b/icons/obj/smooth_structures/reinforced_window.png.toml @@ -0,0 +1,2 @@ +output_name = "reinforced_window" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/rglass_table.dmi b/icons/obj/smooth_structures/rglass_table.dmi index 3b645c72ad3a7e..fd0bb83c2eee40 100644 Binary files a/icons/obj/smooth_structures/rglass_table.dmi and b/icons/obj/smooth_structures/rglass_table.dmi differ diff --git a/icons/obj/smooth_structures/rglass_table.png b/icons/obj/smooth_structures/rglass_table.png new file mode 100644 index 00000000000000..970fc7d777077f Binary files /dev/null and b/icons/obj/smooth_structures/rglass_table.png differ diff --git a/icons/obj/smooth_structures/rglass_table.png.toml b/icons/obj/smooth_structures/rglass_table.png.toml new file mode 100644 index 00000000000000..c4cca008bbdd8d --- /dev/null +++ b/icons/obj/smooth_structures/rglass_table.png.toml @@ -0,0 +1,2 @@ +output_name = "rglass_table" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/rice_window.dmi b/icons/obj/smooth_structures/rice_window.dmi index 3680926e7fa3e1..b418cd87cfd819 100644 Binary files a/icons/obj/smooth_structures/rice_window.dmi and b/icons/obj/smooth_structures/rice_window.dmi differ diff --git a/icons/obj/smooth_structures/rice_window.png b/icons/obj/smooth_structures/rice_window.png new file mode 100644 index 00000000000000..61645b22d964a2 Binary files /dev/null and b/icons/obj/smooth_structures/rice_window.png differ diff --git a/icons/obj/smooth_structures/rice_window.png.toml b/icons/obj/smooth_structures/rice_window.png.toml new file mode 100644 index 00000000000000..52f1aae1b2ea4f --- /dev/null +++ b/icons/obj/smooth_structures/rice_window.png.toml @@ -0,0 +1,2 @@ +output_name = "rice_window" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/rplasma_window.dmi b/icons/obj/smooth_structures/rplasma_window.dmi index 173b8d53766ad8..1952a0a8200a25 100644 Binary files a/icons/obj/smooth_structures/rplasma_window.dmi and b/icons/obj/smooth_structures/rplasma_window.dmi differ diff --git a/icons/obj/smooth_structures/rplasma_window.png b/icons/obj/smooth_structures/rplasma_window.png new file mode 100644 index 00000000000000..9ea53c9b540a19 Binary files /dev/null and b/icons/obj/smooth_structures/rplasma_window.png differ diff --git a/icons/obj/smooth_structures/rplasma_window.png.toml b/icons/obj/smooth_structures/rplasma_window.png.toml new file mode 100644 index 00000000000000..791b377924592c --- /dev/null +++ b/icons/obj/smooth_structures/rplasma_window.png.toml @@ -0,0 +1,2 @@ +output_name = "rplasma_window" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/rplasmaglass_table.dmi b/icons/obj/smooth_structures/rplasmaglass_table.dmi index 4e812c79c7a367..db65243ab7c29a 100644 Binary files a/icons/obj/smooth_structures/rplasmaglass_table.dmi and b/icons/obj/smooth_structures/rplasmaglass_table.dmi differ diff --git a/icons/obj/smooth_structures/rplasmaglass_table.png b/icons/obj/smooth_structures/rplasmaglass_table.png new file mode 100644 index 00000000000000..4752df63b82fcb Binary files /dev/null and b/icons/obj/smooth_structures/rplasmaglass_table.png differ diff --git a/icons/obj/smooth_structures/rplasmaglass_table.png.toml b/icons/obj/smooth_structures/rplasmaglass_table.png.toml new file mode 100644 index 00000000000000..29f4f3408cbe85 --- /dev/null +++ b/icons/obj/smooth_structures/rplasmaglass_table.png.toml @@ -0,0 +1,2 @@ +output_name = "rplasmaglass_table" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/sandbags.dmi b/icons/obj/smooth_structures/sandbags.dmi index 6ff5bfbd7eb5d7..d5e1d1877da254 100644 Binary files a/icons/obj/smooth_structures/sandbags.dmi and b/icons/obj/smooth_structures/sandbags.dmi differ diff --git a/icons/obj/smooth_structures/sandbags.png b/icons/obj/smooth_structures/sandbags.png new file mode 100644 index 00000000000000..ed0308c854ff82 Binary files /dev/null and b/icons/obj/smooth_structures/sandbags.png differ diff --git a/icons/obj/smooth_structures/sandbags.png.toml b/icons/obj/smooth_structures/sandbags.png.toml new file mode 100644 index 00000000000000..146b6d42589d6b --- /dev/null +++ b/icons/obj/smooth_structures/sandbags.png.toml @@ -0,0 +1,2 @@ +output_name = "sandbags" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/shuttle_window.dmi b/icons/obj/smooth_structures/shuttle_window.dmi index 9b9891e9d2c8e1..68ca36d377881b 100644 Binary files a/icons/obj/smooth_structures/shuttle_window.dmi and b/icons/obj/smooth_structures/shuttle_window.dmi differ diff --git a/icons/obj/smooth_structures/shuttle_window.png b/icons/obj/smooth_structures/shuttle_window.png new file mode 100644 index 00000000000000..a5312cb8ae7c8b Binary files /dev/null and b/icons/obj/smooth_structures/shuttle_window.png differ diff --git a/icons/obj/smooth_structures/shuttle_window.png.toml b/icons/obj/smooth_structures/shuttle_window.png.toml new file mode 100644 index 00000000000000..1c26ec4d86f915 --- /dev/null +++ b/icons/obj/smooth_structures/shuttle_window.png.toml @@ -0,0 +1,2 @@ +output_name = "shuttle_window" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/structure_variations.dmi b/icons/obj/smooth_structures/structure_variations.dmi new file mode 100644 index 00000000000000..afabd8f4f2ee8a Binary files /dev/null and b/icons/obj/smooth_structures/structure_variations.dmi differ diff --git a/icons/obj/smooth_structures/table.dmi b/icons/obj/smooth_structures/table.dmi index 3b15d2a27dd547..225f0950b95fe0 100644 Binary files a/icons/obj/smooth_structures/table.dmi and b/icons/obj/smooth_structures/table.dmi differ diff --git a/icons/obj/smooth_structures/table.png b/icons/obj/smooth_structures/table.png new file mode 100644 index 00000000000000..b5acd10b4b8dde Binary files /dev/null and b/icons/obj/smooth_structures/table.png differ diff --git a/icons/obj/smooth_structures/table.png.toml b/icons/obj/smooth_structures/table.png.toml new file mode 100644 index 00000000000000..3700febbed5688 --- /dev/null +++ b/icons/obj/smooth_structures/table.png.toml @@ -0,0 +1,2 @@ +output_name = "table" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/table_greyscale.dmi b/icons/obj/smooth_structures/table_greyscale.dmi index 2c3acf69bfea17..0c3513c58d1a4f 100644 Binary files a/icons/obj/smooth_structures/table_greyscale.dmi and b/icons/obj/smooth_structures/table_greyscale.dmi differ diff --git a/icons/obj/smooth_structures/table_greyscale.png b/icons/obj/smooth_structures/table_greyscale.png new file mode 100644 index 00000000000000..535a535d03cddb Binary files /dev/null and b/icons/obj/smooth_structures/table_greyscale.png differ diff --git a/icons/obj/smooth_structures/table_greyscale.png.toml b/icons/obj/smooth_structures/table_greyscale.png.toml new file mode 100644 index 00000000000000..6a68ba8bc4d7e4 --- /dev/null +++ b/icons/obj/smooth_structures/table_greyscale.png.toml @@ -0,0 +1,2 @@ +output_name = "table_greyscale" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/tinted_window.dmi b/icons/obj/smooth_structures/tinted_window.dmi index 59b690110e58d5..53f803c3942297 100644 Binary files a/icons/obj/smooth_structures/tinted_window.dmi and b/icons/obj/smooth_structures/tinted_window.dmi differ diff --git a/icons/obj/smooth_structures/tinted_window.png b/icons/obj/smooth_structures/tinted_window.png new file mode 100644 index 00000000000000..6601e8c231f703 Binary files /dev/null and b/icons/obj/smooth_structures/tinted_window.png differ diff --git a/icons/obj/smooth_structures/tinted_window.png.toml b/icons/obj/smooth_structures/tinted_window.png.toml new file mode 100644 index 00000000000000..9d8250aa81d014 --- /dev/null +++ b/icons/obj/smooth_structures/tinted_window.png.toml @@ -0,0 +1,2 @@ +output_name = "tinted_window" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/titaniumglass_table.dmi b/icons/obj/smooth_structures/titaniumglass_table.dmi index 76dc30163f0eaa..43bf24b5afec41 100644 Binary files a/icons/obj/smooth_structures/titaniumglass_table.dmi and b/icons/obj/smooth_structures/titaniumglass_table.dmi differ diff --git a/icons/obj/smooth_structures/titaniumglass_table.png b/icons/obj/smooth_structures/titaniumglass_table.png new file mode 100644 index 00000000000000..8da5ba0849dad3 Binary files /dev/null and b/icons/obj/smooth_structures/titaniumglass_table.png differ diff --git a/icons/obj/smooth_structures/titaniumglass_table.png.toml b/icons/obj/smooth_structures/titaniumglass_table.png.toml new file mode 100644 index 00000000000000..d77b867616c649 --- /dev/null +++ b/icons/obj/smooth_structures/titaniumglass_table.png.toml @@ -0,0 +1,2 @@ +output_name = "titaniumglass_table" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/window.dmi b/icons/obj/smooth_structures/window.dmi index 4b78390251e04e..6dab5136d41f22 100644 Binary files a/icons/obj/smooth_structures/window.dmi and b/icons/obj/smooth_structures/window.dmi differ diff --git a/icons/obj/smooth_structures/window.png b/icons/obj/smooth_structures/window.png new file mode 100644 index 00000000000000..e06498a9e3a82a Binary files /dev/null and b/icons/obj/smooth_structures/window.png differ diff --git a/icons/obj/smooth_structures/window.png.toml b/icons/obj/smooth_structures/window.png.toml new file mode 100644 index 00000000000000..7ae19716bb6aeb --- /dev/null +++ b/icons/obj/smooth_structures/window.png.toml @@ -0,0 +1,2 @@ +output_name = "window" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/wood_table.dmi b/icons/obj/smooth_structures/wood_table.dmi index 3c72c11c59172a..ddc65b0c739d52 100644 Binary files a/icons/obj/smooth_structures/wood_table.dmi and b/icons/obj/smooth_structures/wood_table.dmi differ diff --git a/icons/obj/smooth_structures/wood_table.png b/icons/obj/smooth_structures/wood_table.png new file mode 100644 index 00000000000000..72dc68ce7c35cd Binary files /dev/null and b/icons/obj/smooth_structures/wood_table.png differ diff --git a/icons/obj/smooth_structures/wood_table.png.toml b/icons/obj/smooth_structures/wood_table.png.toml new file mode 100644 index 00000000000000..1c197d3d9f8e22 --- /dev/null +++ b/icons/obj/smooth_structures/wood_table.png.toml @@ -0,0 +1,2 @@ +output_name = "wood_table" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/stack_objects.dmi b/icons/obj/stack_objects.dmi index b524789417d23c..c1fcad67b2b648 100644 Binary files a/icons/obj/stack_objects.dmi and b/icons/obj/stack_objects.dmi differ diff --git a/icons/obj/storage/box.dmi b/icons/obj/storage/box.dmi index d660e1b7bfe388..6cae3e75dffd63 100644 Binary files a/icons/obj/storage/box.dmi and b/icons/obj/storage/box.dmi differ diff --git a/icons/obj/storage/closet.dmi b/icons/obj/storage/closet.dmi index 8c5285e1167187..ec01f4b9a347e9 100644 Binary files a/icons/obj/storage/closet.dmi and b/icons/obj/storage/closet.dmi differ diff --git a/icons/obj/storage/crates.dmi b/icons/obj/storage/crates.dmi index f5065b6b86903a..9bc8f4d2c27e90 100644 Binary files a/icons/obj/storage/crates.dmi and b/icons/obj/storage/crates.dmi differ diff --git a/icons/obj/storage/wrapping.dmi b/icons/obj/storage/wrapping.dmi index acd91a3d7006dd..944a6b84752f20 100644 Binary files a/icons/obj/storage/wrapping.dmi and b/icons/obj/storage/wrapping.dmi differ diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi index a41aa161d0f10f..40420db37050c7 100644 Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ diff --git a/icons/obj/tools.dmi b/icons/obj/tools.dmi index e6679c8c51848a..6bb1b8b41f67c5 100644 Binary files a/icons/obj/tools.dmi and b/icons/obj/tools.dmi differ diff --git a/icons/obj/toys/dice.dmi b/icons/obj/toys/dice.dmi index 26cf08af5b9381..d41e503242d464 100644 Binary files a/icons/obj/toys/dice.dmi and b/icons/obj/toys/dice.dmi differ diff --git a/icons/obj/toys/tcgsummons.dmi b/icons/obj/toys/tcgsummons.dmi index 2647c96c25d53d..a870ce8d1d8cd4 100644 Binary files a/icons/obj/toys/tcgsummons.dmi and b/icons/obj/toys/tcgsummons.dmi differ diff --git a/icons/obj/weapons/club.dmi b/icons/obj/weapons/club.dmi index 616f03f8689568..6ebca45b79cbe7 100644 Binary files a/icons/obj/weapons/club.dmi and b/icons/obj/weapons/club.dmi differ diff --git a/icons/obj/weapons/guns/ammo.dmi b/icons/obj/weapons/guns/ammo.dmi index a36b593706f76d..07a4bde661a64b 100644 Binary files a/icons/obj/weapons/guns/ammo.dmi and b/icons/obj/weapons/guns/ammo.dmi differ diff --git a/icons/obj/weapons/guns/ballistic.dmi b/icons/obj/weapons/guns/ballistic.dmi index 9dd25af2a92195..5cd823cc9c4121 100644 Binary files a/icons/obj/weapons/guns/ballistic.dmi and b/icons/obj/weapons/guns/ballistic.dmi differ diff --git a/icons/obj/weapons/guns/magic.dmi b/icons/obj/weapons/guns/magic.dmi index 7cab0cdfc25926..90eb4bdc669a5b 100644 Binary files a/icons/obj/weapons/guns/magic.dmi and b/icons/obj/weapons/guns/magic.dmi differ diff --git a/icons/obj/weapons/guns/projectiles.dmi b/icons/obj/weapons/guns/projectiles.dmi index 05ad142ff58d38..a4c321a05435de 100644 Binary files a/icons/obj/weapons/guns/projectiles.dmi and b/icons/obj/weapons/guns/projectiles.dmi differ diff --git a/icons/obj/weapons/guns/toy.dmi b/icons/obj/weapons/guns/toy.dmi index 83a85e7e447c79..3f7e509b699e69 100644 Binary files a/icons/obj/weapons/guns/toy.dmi and b/icons/obj/weapons/guns/toy.dmi differ diff --git a/icons/obj/weapons/hammer.dmi b/icons/obj/weapons/hammer.dmi index c210f8b436b3a5..965fd0b37efc8a 100644 Binary files a/icons/obj/weapons/hammer.dmi and b/icons/obj/weapons/hammer.dmi differ diff --git a/icons/obj/weapons/khopesh.dmi b/icons/obj/weapons/khopesh.dmi index ab7a0c252cbf77..ba9ef545f14e4e 100644 Binary files a/icons/obj/weapons/khopesh.dmi and b/icons/obj/weapons/khopesh.dmi differ diff --git a/icons/obj/weapons/shields.dmi b/icons/obj/weapons/shields.dmi index cbf4b612bcab2a..3f90af83196ba3 100644 Binary files a/icons/obj/weapons/shields.dmi and b/icons/obj/weapons/shields.dmi differ diff --git a/icons/obj/weapons/spear.dmi b/icons/obj/weapons/spear.dmi index 917365235ecd4f..7262da01c45510 100644 Binary files a/icons/obj/weapons/spear.dmi and b/icons/obj/weapons/spear.dmi differ diff --git a/icons/obj/weapons/sword.dmi b/icons/obj/weapons/sword.dmi index 8e6ee6bdd2fef9..255c3b0cffd0ed 100644 Binary files a/icons/obj/weapons/sword.dmi and b/icons/obj/weapons/sword.dmi differ diff --git a/icons/turf/cliff/icerock_cliff.dmi b/icons/turf/cliff/icerock_cliff.dmi index 260a963a1eaea3..0bcef05b072fad 100644 Binary files a/icons/turf/cliff/icerock_cliff.dmi and b/icons/turf/cliff/icerock_cliff.dmi differ diff --git a/icons/turf/cliff/icerock_cliff.png b/icons/turf/cliff/icerock_cliff.png new file mode 100644 index 00000000000000..962cceaa036d30 Binary files /dev/null and b/icons/turf/cliff/icerock_cliff.png differ diff --git a/icons/turf/cliff/icerock_cliff.png.toml b/icons/turf/cliff/icerock_cliff.png.toml new file mode 100644 index 00000000000000..7d713818b562f5 --- /dev/null +++ b/icons/turf/cliff/icerock_cliff.png.toml @@ -0,0 +1,14 @@ +output_name = "icerock_wall" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 40 +y = 40 + +[output_icon_size] +x = 40 +y = 40 + +[cut_pos] +x = 20 +y = 20 \ No newline at end of file diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index 9dca06d4153cab..6fc1178a6b4641 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ diff --git a/icons/turf/floors/ash.dmi b/icons/turf/floors/ash.dmi index 1ebe8d713970c6..e6d3ed666fb69a 100644 Binary files a/icons/turf/floors/ash.dmi and b/icons/turf/floors/ash.dmi differ diff --git a/icons/turf/floors/ash.png b/icons/turf/floors/ash.png new file mode 100644 index 00000000000000..419dd49d9def58 Binary files /dev/null and b/icons/turf/floors/ash.png differ diff --git a/icons/turf/floors/ash.png.toml b/icons/turf/floors/ash.png.toml new file mode 100644 index 00000000000000..9bbdc460b4d416 --- /dev/null +++ b/icons/turf/floors/ash.png.toml @@ -0,0 +1,14 @@ +output_name = "ash" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 40 +y = 40 + +[output_icon_size] +x = 40 +y = 40 + +[cut_pos] +x = 20 +y = 20 \ No newline at end of file diff --git a/icons/turf/floors/bamboo_mat.dmi b/icons/turf/floors/bamboo_mat.dmi index 1e0b04bc3aa4c0..c2380c5b874f23 100644 Binary files a/icons/turf/floors/bamboo_mat.dmi and b/icons/turf/floors/bamboo_mat.dmi differ diff --git a/icons/turf/floors/bamboo_mat.png b/icons/turf/floors/bamboo_mat.png new file mode 100644 index 00000000000000..f945572a8b7b71 Binary files /dev/null and b/icons/turf/floors/bamboo_mat.png differ diff --git a/icons/turf/floors/bamboo_mat.png.toml b/icons/turf/floors/bamboo_mat.png.toml new file mode 100644 index 00000000000000..ce1ce14e25988d --- /dev/null +++ b/icons/turf/floors/bamboo_mat.png.toml @@ -0,0 +1,2 @@ +output_name = "mat" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/carpet.dmi b/icons/turf/floors/carpet.dmi index 1af03a1df82345..24d8c8b0dfd67a 100644 Binary files a/icons/turf/floors/carpet.dmi and b/icons/turf/floors/carpet.dmi differ diff --git a/icons/turf/floors/carpet.png b/icons/turf/floors/carpet.png new file mode 100644 index 00000000000000..b69bf87a4d052d Binary files /dev/null and b/icons/turf/floors/carpet.png differ diff --git a/icons/turf/floors/carpet.png.toml b/icons/turf/floors/carpet.png.toml new file mode 100644 index 00000000000000..13916473257f27 --- /dev/null +++ b/icons/turf/floors/carpet.png.toml @@ -0,0 +1,2 @@ +output_name = "carpet" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/carpet_black.dmi b/icons/turf/floors/carpet_black.dmi index e2fea9085b2303..7df942035adc44 100644 Binary files a/icons/turf/floors/carpet_black.dmi and b/icons/turf/floors/carpet_black.dmi differ diff --git a/icons/turf/floors/carpet_black.png b/icons/turf/floors/carpet_black.png new file mode 100644 index 00000000000000..57f7eaf8dd9a5a Binary files /dev/null and b/icons/turf/floors/carpet_black.png differ diff --git a/icons/turf/floors/carpet_black.png.toml b/icons/turf/floors/carpet_black.png.toml new file mode 100644 index 00000000000000..a98d0e0bc60526 --- /dev/null +++ b/icons/turf/floors/carpet_black.png.toml @@ -0,0 +1,2 @@ +output_name = "carpet_black" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/carpet_blue.dmi b/icons/turf/floors/carpet_blue.dmi index b909b11f359d98..6eea31902c8d2a 100644 Binary files a/icons/turf/floors/carpet_blue.dmi and b/icons/turf/floors/carpet_blue.dmi differ diff --git a/icons/turf/floors/carpet_blue.png b/icons/turf/floors/carpet_blue.png new file mode 100644 index 00000000000000..e81e56cf7c287e Binary files /dev/null and b/icons/turf/floors/carpet_blue.png differ diff --git a/icons/turf/floors/carpet_blue.png.toml b/icons/turf/floors/carpet_blue.png.toml new file mode 100644 index 00000000000000..1e1ebdb22015f9 --- /dev/null +++ b/icons/turf/floors/carpet_blue.png.toml @@ -0,0 +1,2 @@ +output_name = "carpet_blue" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/carpet_cyan.dmi b/icons/turf/floors/carpet_cyan.dmi index 85e053a5a6de40..fa38993c5ceeb2 100644 Binary files a/icons/turf/floors/carpet_cyan.dmi and b/icons/turf/floors/carpet_cyan.dmi differ diff --git a/icons/turf/floors/carpet_cyan.png b/icons/turf/floors/carpet_cyan.png new file mode 100644 index 00000000000000..f1dc7da076aa2e Binary files /dev/null and b/icons/turf/floors/carpet_cyan.png differ diff --git a/icons/turf/floors/carpet_cyan.png.toml b/icons/turf/floors/carpet_cyan.png.toml new file mode 100644 index 00000000000000..8c93ad0baf3280 --- /dev/null +++ b/icons/turf/floors/carpet_cyan.png.toml @@ -0,0 +1,2 @@ +output_name = "carpet_cyan" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/carpet_donk.dmi b/icons/turf/floors/carpet_donk.dmi index 04c4148d2bc5a6..1a8f594702435a 100644 Binary files a/icons/turf/floors/carpet_donk.dmi and b/icons/turf/floors/carpet_donk.dmi differ diff --git a/icons/turf/floors/carpet_donk.png b/icons/turf/floors/carpet_donk.png new file mode 100644 index 00000000000000..eb0243c4926e10 Binary files /dev/null and b/icons/turf/floors/carpet_donk.png differ diff --git a/icons/turf/floors/carpet_donk.png.toml b/icons/turf/floors/carpet_donk.png.toml new file mode 100644 index 00000000000000..7e60d4272b8d70 --- /dev/null +++ b/icons/turf/floors/carpet_donk.png.toml @@ -0,0 +1,5 @@ +output_name = "donk_carpet" +template = "bitmask/diagonal_32x32.toml" + +[prefabs] +255 = 5 diff --git a/icons/turf/floors/carpet_executive.dmi b/icons/turf/floors/carpet_executive.dmi index 2c17e542fcd198..8c0528d8f28b38 100644 Binary files a/icons/turf/floors/carpet_executive.dmi and b/icons/turf/floors/carpet_executive.dmi differ diff --git a/icons/turf/floors/carpet_executive.png b/icons/turf/floors/carpet_executive.png new file mode 100644 index 00000000000000..bf8a538b8f8248 Binary files /dev/null and b/icons/turf/floors/carpet_executive.png differ diff --git a/icons/turf/floors/carpet_executive.png.toml b/icons/turf/floors/carpet_executive.png.toml new file mode 100644 index 00000000000000..1322b9bd6d9018 --- /dev/null +++ b/icons/turf/floors/carpet_executive.png.toml @@ -0,0 +1,6 @@ +output_name = "executive_carpet" +template = "bitmask/diagonal_32x32.toml" + +[prefabs] +255 = 5 + diff --git a/icons/turf/floors/carpet_green.dmi b/icons/turf/floors/carpet_green.dmi index 39ef0480874811..49daef00acd021 100644 Binary files a/icons/turf/floors/carpet_green.dmi and b/icons/turf/floors/carpet_green.dmi differ diff --git a/icons/turf/floors/carpet_green.png b/icons/turf/floors/carpet_green.png new file mode 100644 index 00000000000000..ee059d755afbc6 Binary files /dev/null and b/icons/turf/floors/carpet_green.png differ diff --git a/icons/turf/floors/carpet_green.png.toml b/icons/turf/floors/carpet_green.png.toml new file mode 100644 index 00000000000000..88a2a120f282db --- /dev/null +++ b/icons/turf/floors/carpet_green.png.toml @@ -0,0 +1,2 @@ +output_name = "carpet_green" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/carpet_neon_base.dmi b/icons/turf/floors/carpet_neon_base.dmi new file mode 100644 index 00000000000000..342da153076913 Binary files /dev/null and b/icons/turf/floors/carpet_neon_base.dmi differ diff --git a/icons/turf/floors/carpet_neon_base.png b/icons/turf/floors/carpet_neon_base.png new file mode 100644 index 00000000000000..08b3ef22e15f8c Binary files /dev/null and b/icons/turf/floors/carpet_neon_base.png differ diff --git a/icons/turf/floors/carpet_neon_base.png.toml b/icons/turf/floors/carpet_neon_base.png.toml new file mode 100644 index 00000000000000..723e73af9e9ab0 --- /dev/null +++ b/icons/turf/floors/carpet_neon_base.png.toml @@ -0,0 +1,2 @@ +output_name = "base" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/carpet_neon_base_nodots.dmi b/icons/turf/floors/carpet_neon_base_nodots.dmi new file mode 100644 index 00000000000000..d5fa68a6a1230e Binary files /dev/null and b/icons/turf/floors/carpet_neon_base_nodots.dmi differ diff --git a/icons/turf/floors/carpet_neon_base_nodots.png b/icons/turf/floors/carpet_neon_base_nodots.png new file mode 100644 index 00000000000000..ae73004e95bb80 Binary files /dev/null and b/icons/turf/floors/carpet_neon_base_nodots.png differ diff --git a/icons/turf/floors/carpet_neon_base_nodots.png.toml b/icons/turf/floors/carpet_neon_base_nodots.png.toml new file mode 100644 index 00000000000000..03b019890ed356 --- /dev/null +++ b/icons/turf/floors/carpet_neon_base_nodots.png.toml @@ -0,0 +1,2 @@ +output_name = "base-nodots" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/carpet_neon_glow.dmi b/icons/turf/floors/carpet_neon_glow.dmi new file mode 100644 index 00000000000000..c1ab20145acaa6 Binary files /dev/null and b/icons/turf/floors/carpet_neon_glow.dmi differ diff --git a/icons/turf/floors/carpet_neon_glow.png b/icons/turf/floors/carpet_neon_glow.png new file mode 100644 index 00000000000000..1087698ae60a3f Binary files /dev/null and b/icons/turf/floors/carpet_neon_glow.png differ diff --git a/icons/turf/floors/carpet_neon_glow.png.toml b/icons/turf/floors/carpet_neon_glow.png.toml new file mode 100644 index 00000000000000..2af0ddb34bf633 --- /dev/null +++ b/icons/turf/floors/carpet_neon_glow.png.toml @@ -0,0 +1,2 @@ +output_name = "glow" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/carpet_neon_glow_nodots.dmi b/icons/turf/floors/carpet_neon_glow_nodots.dmi new file mode 100644 index 00000000000000..72175d8b3537c0 Binary files /dev/null and b/icons/turf/floors/carpet_neon_glow_nodots.dmi differ diff --git a/icons/turf/floors/carpet_neon_glow_nodots.png b/icons/turf/floors/carpet_neon_glow_nodots.png new file mode 100644 index 00000000000000..19b9d311b13c29 Binary files /dev/null and b/icons/turf/floors/carpet_neon_glow_nodots.png differ diff --git a/icons/turf/floors/carpet_neon_glow_nodots.png.toml b/icons/turf/floors/carpet_neon_glow_nodots.png.toml new file mode 100644 index 00000000000000..8d6e69b01c0706 --- /dev/null +++ b/icons/turf/floors/carpet_neon_glow_nodots.png.toml @@ -0,0 +1,2 @@ +output_name = "glow-nodots" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/carpet_neon_light.dmi b/icons/turf/floors/carpet_neon_light.dmi new file mode 100644 index 00000000000000..38fe6ff2db5485 Binary files /dev/null and b/icons/turf/floors/carpet_neon_light.dmi differ diff --git a/icons/turf/floors/carpet_neon_light.png b/icons/turf/floors/carpet_neon_light.png new file mode 100644 index 00000000000000..9443c6942903df Binary files /dev/null and b/icons/turf/floors/carpet_neon_light.png differ diff --git a/icons/turf/floors/carpet_neon_light.png.toml b/icons/turf/floors/carpet_neon_light.png.toml new file mode 100644 index 00000000000000..6ea86ad1e65031 --- /dev/null +++ b/icons/turf/floors/carpet_neon_light.png.toml @@ -0,0 +1,2 @@ +output_name = "light" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/carpet_neon_light_nodots.dmi b/icons/turf/floors/carpet_neon_light_nodots.dmi new file mode 100644 index 00000000000000..0cf86fecb67ab8 Binary files /dev/null and b/icons/turf/floors/carpet_neon_light_nodots.dmi differ diff --git a/icons/turf/floors/carpet_neon_light_nodots.png b/icons/turf/floors/carpet_neon_light_nodots.png new file mode 100644 index 00000000000000..fc82b593c077d4 Binary files /dev/null and b/icons/turf/floors/carpet_neon_light_nodots.png differ diff --git a/icons/turf/floors/carpet_neon_light_nodots.png.toml b/icons/turf/floors/carpet_neon_light_nodots.png.toml new file mode 100644 index 00000000000000..20e0713c39f48c --- /dev/null +++ b/icons/turf/floors/carpet_neon_light_nodots.png.toml @@ -0,0 +1,2 @@ +output_name = "light-nodots" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/carpet_neon_simple.dmi b/icons/turf/floors/carpet_neon_simple.dmi deleted file mode 100644 index 62cb355a2db9d4..00000000000000 Binary files a/icons/turf/floors/carpet_neon_simple.dmi and /dev/null differ diff --git a/icons/turf/floors/carpet_orange.dmi b/icons/turf/floors/carpet_orange.dmi index 4f0b2078fca38a..0ee9b56e8b09c1 100644 Binary files a/icons/turf/floors/carpet_orange.dmi and b/icons/turf/floors/carpet_orange.dmi differ diff --git a/icons/turf/floors/carpet_orange.png b/icons/turf/floors/carpet_orange.png new file mode 100644 index 00000000000000..c58cddcf0bc18c Binary files /dev/null and b/icons/turf/floors/carpet_orange.png differ diff --git a/icons/turf/floors/carpet_orange.png.toml b/icons/turf/floors/carpet_orange.png.toml new file mode 100644 index 00000000000000..4315d81da1de08 --- /dev/null +++ b/icons/turf/floors/carpet_orange.png.toml @@ -0,0 +1,2 @@ +output_name = "carpet_orange" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/carpet_purple.dmi b/icons/turf/floors/carpet_purple.dmi index f07ce75d334064..a00c1621d3881d 100644 Binary files a/icons/turf/floors/carpet_purple.dmi and b/icons/turf/floors/carpet_purple.dmi differ diff --git a/icons/turf/floors/carpet_purple.png b/icons/turf/floors/carpet_purple.png new file mode 100644 index 00000000000000..530534c5bca328 Binary files /dev/null and b/icons/turf/floors/carpet_purple.png differ diff --git a/icons/turf/floors/carpet_purple.png.toml b/icons/turf/floors/carpet_purple.png.toml new file mode 100644 index 00000000000000..708027cee7803c --- /dev/null +++ b/icons/turf/floors/carpet_purple.png.toml @@ -0,0 +1,2 @@ +output_name = "carpet_purple" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/carpet_red.dmi b/icons/turf/floors/carpet_red.dmi index eb0527f430dc4a..dcba136f81150b 100644 Binary files a/icons/turf/floors/carpet_red.dmi and b/icons/turf/floors/carpet_red.dmi differ diff --git a/icons/turf/floors/carpet_red.png b/icons/turf/floors/carpet_red.png new file mode 100644 index 00000000000000..3f7f190a126c4e Binary files /dev/null and b/icons/turf/floors/carpet_red.png differ diff --git a/icons/turf/floors/carpet_red.png.toml b/icons/turf/floors/carpet_red.png.toml new file mode 100644 index 00000000000000..4bbd11bfb3471b --- /dev/null +++ b/icons/turf/floors/carpet_red.png.toml @@ -0,0 +1,2 @@ +output_name = "carpet_red" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/carpet_royalblack.dmi b/icons/turf/floors/carpet_royalblack.dmi index 0b848ac1afa44f..296b7b683fd0b0 100644 Binary files a/icons/turf/floors/carpet_royalblack.dmi and b/icons/turf/floors/carpet_royalblack.dmi differ diff --git a/icons/turf/floors/carpet_royalblack.png b/icons/turf/floors/carpet_royalblack.png new file mode 100644 index 00000000000000..b125c6111cd44f Binary files /dev/null and b/icons/turf/floors/carpet_royalblack.png differ diff --git a/icons/turf/floors/carpet_royalblack.png.toml b/icons/turf/floors/carpet_royalblack.png.toml new file mode 100644 index 00000000000000..eef2685abeb252 --- /dev/null +++ b/icons/turf/floors/carpet_royalblack.png.toml @@ -0,0 +1,2 @@ +output_name = "carpet_royalblack" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/carpet_royalblue.dmi b/icons/turf/floors/carpet_royalblue.dmi index 1027b0e19f58e7..9657d9c6704be1 100644 Binary files a/icons/turf/floors/carpet_royalblue.dmi and b/icons/turf/floors/carpet_royalblue.dmi differ diff --git a/icons/turf/floors/carpet_royalblue.png b/icons/turf/floors/carpet_royalblue.png new file mode 100644 index 00000000000000..babf33777b7983 Binary files /dev/null and b/icons/turf/floors/carpet_royalblue.png differ diff --git a/icons/turf/floors/carpet_royalblue.png.toml b/icons/turf/floors/carpet_royalblue.png.toml new file mode 100644 index 00000000000000..9a11f2507b21c2 --- /dev/null +++ b/icons/turf/floors/carpet_royalblue.png.toml @@ -0,0 +1,2 @@ +output_name = "carpet_royalblue" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/carpet_stellar.dmi b/icons/turf/floors/carpet_stellar.dmi index 6ba816784261c0..2e0eec615d8438 100644 Binary files a/icons/turf/floors/carpet_stellar.dmi and b/icons/turf/floors/carpet_stellar.dmi differ diff --git a/icons/turf/floors/carpet_stellar.png b/icons/turf/floors/carpet_stellar.png new file mode 100644 index 00000000000000..ab233965a6dcaa Binary files /dev/null and b/icons/turf/floors/carpet_stellar.png differ diff --git a/icons/turf/floors/carpet_stellar.png.toml b/icons/turf/floors/carpet_stellar.png.toml new file mode 100644 index 00000000000000..817768bad5f21e --- /dev/null +++ b/icons/turf/floors/carpet_stellar.png.toml @@ -0,0 +1,2 @@ +output_name = "stellar_carpet" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/chasms.dmi b/icons/turf/floors/chasms.dmi index 2e93b5391120cf..d37fa7d50c6477 100644 Binary files a/icons/turf/floors/chasms.dmi and b/icons/turf/floors/chasms.dmi differ diff --git a/icons/turf/floors/chasms.png b/icons/turf/floors/chasms.png new file mode 100644 index 00000000000000..2a856eb8aa42d7 Binary files /dev/null and b/icons/turf/floors/chasms.png differ diff --git a/icons/turf/floors/chasms.png.toml b/icons/turf/floors/chasms.png.toml new file mode 100644 index 00000000000000..51e70389edde91 --- /dev/null +++ b/icons/turf/floors/chasms.png.toml @@ -0,0 +1,2 @@ +output_name = "chasms" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/floor_variations.dmi b/icons/turf/floors/floor_variations.dmi new file mode 100644 index 00000000000000..81cff6d76e86d1 Binary files /dev/null and b/icons/turf/floors/floor_variations.dmi differ diff --git a/icons/turf/floors/glass.dmi b/icons/turf/floors/glass.dmi index ef9da477681ed2..ae840919f6e5da 100644 Binary files a/icons/turf/floors/glass.dmi and b/icons/turf/floors/glass.dmi differ diff --git a/icons/turf/floors/glass.png b/icons/turf/floors/glass.png new file mode 100644 index 00000000000000..b73fff0657474c Binary files /dev/null and b/icons/turf/floors/glass.png differ diff --git a/icons/turf/floors/glass.png.toml b/icons/turf/floors/glass.png.toml new file mode 100644 index 00000000000000..2e90c6298cac5f --- /dev/null +++ b/icons/turf/floors/glass.png.toml @@ -0,0 +1,2 @@ +output_name = "glass" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/grass.dmi b/icons/turf/floors/grass.dmi index 2ffb5242562b0c..0b28bc9ccee5a0 100644 Binary files a/icons/turf/floors/grass.dmi and b/icons/turf/floors/grass.dmi differ diff --git a/icons/turf/floors/grass.png b/icons/turf/floors/grass.png new file mode 100644 index 00000000000000..82790712e30b76 Binary files /dev/null and b/icons/turf/floors/grass.png differ diff --git a/icons/turf/floors/grass.png.toml b/icons/turf/floors/grass.png.toml new file mode 100644 index 00000000000000..e06f8518c7c885 --- /dev/null +++ b/icons/turf/floors/grass.png.toml @@ -0,0 +1,14 @@ +output_name = "grass" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 50 +y = 50 + +[output_icon_size] +x = 50 +y = 50 + +[cut_pos] +x = 25 +y = 25 \ No newline at end of file diff --git a/icons/turf/floors/ice_turf.dmi b/icons/turf/floors/ice_turf.dmi index 61574645759c98..ccb528c872d6c2 100644 Binary files a/icons/turf/floors/ice_turf.dmi and b/icons/turf/floors/ice_turf.dmi differ diff --git a/icons/turf/floors/ice_turf.png b/icons/turf/floors/ice_turf.png new file mode 100644 index 00000000000000..26887f27853775 Binary files /dev/null and b/icons/turf/floors/ice_turf.png differ diff --git a/icons/turf/floors/ice_turf.png.toml b/icons/turf/floors/ice_turf.png.toml new file mode 100644 index 00000000000000..3aa5cdf4a36a23 --- /dev/null +++ b/icons/turf/floors/ice_turf.png.toml @@ -0,0 +1,2 @@ +output_name = "ice_turf" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/icechasms.dmi b/icons/turf/floors/icechasms.dmi index 5585d792ef86e8..e01521e34416d1 100644 Binary files a/icons/turf/floors/icechasms.dmi and b/icons/turf/floors/icechasms.dmi differ diff --git a/icons/turf/floors/icechasms.png b/icons/turf/floors/icechasms.png new file mode 100644 index 00000000000000..c47756629b524d Binary files /dev/null and b/icons/turf/floors/icechasms.png differ diff --git a/icons/turf/floors/icechasms.png.toml b/icons/turf/floors/icechasms.png.toml new file mode 100644 index 00000000000000..6dde47bfeb25cf --- /dev/null +++ b/icons/turf/floors/icechasms.png.toml @@ -0,0 +1,2 @@ +output_name = "icechasms" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/junglechasm.dmi b/icons/turf/floors/junglechasm.dmi index d2ac198865c5a9..c50775c91b1c2c 100644 Binary files a/icons/turf/floors/junglechasm.dmi and b/icons/turf/floors/junglechasm.dmi differ diff --git a/icons/turf/floors/junglechasm.png b/icons/turf/floors/junglechasm.png new file mode 100644 index 00000000000000..dc26f65e16c28e Binary files /dev/null and b/icons/turf/floors/junglechasm.png differ diff --git a/icons/turf/floors/junglechasm.png.toml b/icons/turf/floors/junglechasm.png.toml new file mode 100644 index 00000000000000..e210a9128bd1fa --- /dev/null +++ b/icons/turf/floors/junglechasm.png.toml @@ -0,0 +1,2 @@ +output_name = "junglechasm" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/junglegrass.dmi b/icons/turf/floors/junglegrass.dmi index 80456e469b112c..ef192232c3bc5f 100644 Binary files a/icons/turf/floors/junglegrass.dmi and b/icons/turf/floors/junglegrass.dmi differ diff --git a/icons/turf/floors/junglegrass.png b/icons/turf/floors/junglegrass.png new file mode 100644 index 00000000000000..c1d13d4f4f273f Binary files /dev/null and b/icons/turf/floors/junglegrass.png differ diff --git a/icons/turf/floors/junglegrass.png.toml b/icons/turf/floors/junglegrass.png.toml new file mode 100644 index 00000000000000..0096e9bad74758 --- /dev/null +++ b/icons/turf/floors/junglegrass.png.toml @@ -0,0 +1,14 @@ +output_name = "junglegrass" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 50 +y = 50 + +[output_icon_size] +x = 50 +y = 50 + +[cut_pos] +x = 25 +y = 25 \ No newline at end of file diff --git a/icons/turf/floors/lava.dmi b/icons/turf/floors/lava.dmi index 3b889c9a5f68c1..a2a06f34200a88 100644 Binary files a/icons/turf/floors/lava.dmi and b/icons/turf/floors/lava.dmi differ diff --git a/icons/turf/floors/lava.png b/icons/turf/floors/lava.png new file mode 100644 index 00000000000000..ef826dee188b0b Binary files /dev/null and b/icons/turf/floors/lava.png differ diff --git a/icons/turf/floors/lava.png.toml b/icons/turf/floors/lava.png.toml new file mode 100644 index 00000000000000..c4e36e85ab195f --- /dev/null +++ b/icons/turf/floors/lava.png.toml @@ -0,0 +1,5 @@ +output_name = "lava" +template = "bitmask/diagonal_32x32.toml" + +[animation] +delays = [20, 20, 20, 20] diff --git a/icons/turf/floors/lava_mask.dmi b/icons/turf/floors/lava_mask.dmi index aaefebe39deb36..3e77c406b268d9 100644 Binary files a/icons/turf/floors/lava_mask.dmi and b/icons/turf/floors/lava_mask.dmi differ diff --git a/icons/turf/floors/lava_mask.png b/icons/turf/floors/lava_mask.png new file mode 100644 index 00000000000000..dfcd0dba4cb936 Binary files /dev/null and b/icons/turf/floors/lava_mask.png differ diff --git a/icons/turf/floors/lava_mask.png.toml b/icons/turf/floors/lava_mask.png.toml new file mode 100644 index 00000000000000..08d0173d5cde9f --- /dev/null +++ b/icons/turf/floors/lava_mask.png.toml @@ -0,0 +1,2 @@ +output_name = "lava" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/plasma_glass.dmi b/icons/turf/floors/plasma_glass.dmi index 83aa755b7bce1a..a0e2dd20b796cd 100644 Binary files a/icons/turf/floors/plasma_glass.dmi and b/icons/turf/floors/plasma_glass.dmi differ diff --git a/icons/turf/floors/plasma_glass.png b/icons/turf/floors/plasma_glass.png new file mode 100644 index 00000000000000..06e8a79b567503 Binary files /dev/null and b/icons/turf/floors/plasma_glass.png differ diff --git a/icons/turf/floors/plasma_glass.png.toml b/icons/turf/floors/plasma_glass.png.toml new file mode 100644 index 00000000000000..0fb4b5fa276141 --- /dev/null +++ b/icons/turf/floors/plasma_glass.png.toml @@ -0,0 +1,2 @@ +output_name = "plasma_glass" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/reinf_glass.dmi b/icons/turf/floors/reinf_glass.dmi index a7607cada6a7f6..0713375caa6e33 100644 Binary files a/icons/turf/floors/reinf_glass.dmi and b/icons/turf/floors/reinf_glass.dmi differ diff --git a/icons/turf/floors/reinf_glass.png b/icons/turf/floors/reinf_glass.png new file mode 100644 index 00000000000000..9659f3e35c10db Binary files /dev/null and b/icons/turf/floors/reinf_glass.png differ diff --git a/icons/turf/floors/reinf_glass.png.toml b/icons/turf/floors/reinf_glass.png.toml new file mode 100644 index 00000000000000..043b1d354359b5 --- /dev/null +++ b/icons/turf/floors/reinf_glass.png.toml @@ -0,0 +1,2 @@ +output_name = "reinf_glass" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/reinf_plasma_glass.dmi b/icons/turf/floors/reinf_plasma_glass.dmi index 1bf4dd41734c89..31c1c339c37d3d 100644 Binary files a/icons/turf/floors/reinf_plasma_glass.dmi and b/icons/turf/floors/reinf_plasma_glass.dmi differ diff --git a/icons/turf/floors/reinf_plasma_glass.png b/icons/turf/floors/reinf_plasma_glass.png new file mode 100644 index 00000000000000..6c47f299723e14 Binary files /dev/null and b/icons/turf/floors/reinf_plasma_glass.png differ diff --git a/icons/turf/floors/reinf_plasma_glass.png.toml b/icons/turf/floors/reinf_plasma_glass.png.toml new file mode 100644 index 00000000000000..1b3fbb05ef9b6e --- /dev/null +++ b/icons/turf/floors/reinf_plasma_glass.png.toml @@ -0,0 +1,2 @@ +output_name = "reinf_plasma_glass" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/rocky_ash.dmi b/icons/turf/floors/rocky_ash.dmi index cc6847dc5884b9..758793cba42160 100644 Binary files a/icons/turf/floors/rocky_ash.dmi and b/icons/turf/floors/rocky_ash.dmi differ diff --git a/icons/turf/floors/rocky_ash.png b/icons/turf/floors/rocky_ash.png new file mode 100644 index 00000000000000..bdc8ee3615c4be Binary files /dev/null and b/icons/turf/floors/rocky_ash.png differ diff --git a/icons/turf/floors/rocky_ash.png.toml b/icons/turf/floors/rocky_ash.png.toml new file mode 100644 index 00000000000000..6e3f50e0542704 --- /dev/null +++ b/icons/turf/floors/rocky_ash.png.toml @@ -0,0 +1,14 @@ +output_name = "rocky_ash" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 40 +y = 40 + +[output_icon_size] +x = 40 +y = 40 + +[cut_pos] +x = 20 +y = 20 \ No newline at end of file diff --git a/icons/turf/floors/snow_turf.dmi b/icons/turf/floors/snow_turf.dmi index 8b70aa44896fe2..a150dfdc2db85d 100644 Binary files a/icons/turf/floors/snow_turf.dmi and b/icons/turf/floors/snow_turf.dmi differ diff --git a/icons/turf/floors/snow_turf.png b/icons/turf/floors/snow_turf.png new file mode 100644 index 00000000000000..474a0f486e79e9 Binary files /dev/null and b/icons/turf/floors/snow_turf.png differ diff --git a/icons/turf/floors/snow_turf.png.toml b/icons/turf/floors/snow_turf.png.toml new file mode 100644 index 00000000000000..cc50c9afda68e2 --- /dev/null +++ b/icons/turf/floors/snow_turf.png.toml @@ -0,0 +1,2 @@ +output_name = "snow_turf" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/smoothrocks.dmi b/icons/turf/smoothrocks.dmi index 9a60937a2195a5..e138e2af783d8e 100644 Binary files a/icons/turf/smoothrocks.dmi and b/icons/turf/smoothrocks.dmi differ diff --git a/icons/turf/smoothrocks.png b/icons/turf/smoothrocks.png new file mode 100644 index 00000000000000..dea84d594f6683 Binary files /dev/null and b/icons/turf/smoothrocks.png differ diff --git a/icons/turf/smoothrocks.png.toml b/icons/turf/smoothrocks.png.toml new file mode 100644 index 00000000000000..4466fbbf3c9262 --- /dev/null +++ b/icons/turf/smoothrocks.png.toml @@ -0,0 +1,14 @@ +output_name = "smoothrocks" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 40 +y = 40 + +[output_icon_size] +x = 40 +y = 40 + +[cut_pos] +x = 20 +y = 20 \ No newline at end of file diff --git a/icons/turf/smoothrocks_overlays.dmi b/icons/turf/smoothrocks_overlays.dmi new file mode 100644 index 00000000000000..e49a48ca09e73f Binary files /dev/null and b/icons/turf/smoothrocks_overlays.dmi differ diff --git a/icons/turf/walls/abductor_wall.dmi b/icons/turf/walls/abductor_wall.dmi index d1d7d66cf0f418..4f731d99f4cd24 100644 Binary files a/icons/turf/walls/abductor_wall.dmi and b/icons/turf/walls/abductor_wall.dmi differ diff --git a/icons/turf/walls/bamboo_wall.dmi b/icons/turf/walls/bamboo_wall.dmi index 4eafc79ad48b7c..44c5824397e5a9 100644 Binary files a/icons/turf/walls/bamboo_wall.dmi and b/icons/turf/walls/bamboo_wall.dmi differ diff --git a/icons/turf/walls/bamboo_wall.png b/icons/turf/walls/bamboo_wall.png new file mode 100644 index 00000000000000..6869cb409b2abf Binary files /dev/null and b/icons/turf/walls/bamboo_wall.png differ diff --git a/icons/turf/walls/bamboo_wall.png.toml b/icons/turf/walls/bamboo_wall.png.toml new file mode 100644 index 00000000000000..69d9d905038378 --- /dev/null +++ b/icons/turf/walls/bamboo_wall.png.toml @@ -0,0 +1,5 @@ +output_name = "bamboo_wall" +template = "bitmask/diagonal_32x32.toml" + +[prefabs] +0 = 5 diff --git a/icons/turf/walls/bananium_wall.dmi b/icons/turf/walls/bananium_wall.dmi index abf70635337d47..7c563fca0d08db 100644 Binary files a/icons/turf/walls/bananium_wall.dmi and b/icons/turf/walls/bananium_wall.dmi differ diff --git a/icons/turf/walls/bananium_wall.png b/icons/turf/walls/bananium_wall.png new file mode 100644 index 00000000000000..52d4b2a5888b56 Binary files /dev/null and b/icons/turf/walls/bananium_wall.png differ diff --git a/icons/turf/walls/bananium_wall.png.toml b/icons/turf/walls/bananium_wall.png.toml new file mode 100644 index 00000000000000..3225586db5cc17 --- /dev/null +++ b/icons/turf/walls/bananium_wall.png.toml @@ -0,0 +1,2 @@ +output_name = "bananium_wall" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/walls/boss_wall.dmi b/icons/turf/walls/boss_wall.dmi index eb0992e86e0092..6bc124b077823c 100644 Binary files a/icons/turf/walls/boss_wall.dmi and b/icons/turf/walls/boss_wall.dmi differ diff --git a/icons/turf/walls/boss_wall.png b/icons/turf/walls/boss_wall.png new file mode 100644 index 00000000000000..45d334f25763c1 Binary files /dev/null and b/icons/turf/walls/boss_wall.png differ diff --git a/icons/turf/walls/boss_wall.png.toml b/icons/turf/walls/boss_wall.png.toml new file mode 100644 index 00000000000000..4d6797e1ddaf17 --- /dev/null +++ b/icons/turf/walls/boss_wall.png.toml @@ -0,0 +1,2 @@ +output_name = "boss_wall" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/walls/clockwork_wall.dmi b/icons/turf/walls/clockwork_wall.dmi index d6f1872d7c0b38..8785209409b288 100644 Binary files a/icons/turf/walls/clockwork_wall.dmi and b/icons/turf/walls/clockwork_wall.dmi differ diff --git a/icons/turf/walls/clockwork_wall.png b/icons/turf/walls/clockwork_wall.png new file mode 100644 index 00000000000000..7dcc7d6ea6a15b Binary files /dev/null and b/icons/turf/walls/clockwork_wall.png differ diff --git a/icons/turf/walls/clockwork_wall.png.toml b/icons/turf/walls/clockwork_wall.png.toml new file mode 100644 index 00000000000000..bfec1cdfd58868 --- /dev/null +++ b/icons/turf/walls/clockwork_wall.png.toml @@ -0,0 +1,2 @@ +output_name = "clockwork_wall" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/walls/cult_wall.dmi b/icons/turf/walls/cult_wall.dmi index d1ea0a85413ce8..51e98161d6a5f1 100644 Binary files a/icons/turf/walls/cult_wall.dmi and b/icons/turf/walls/cult_wall.dmi differ diff --git a/icons/turf/walls/cult_wall.png b/icons/turf/walls/cult_wall.png new file mode 100644 index 00000000000000..c2005bdd60c39f Binary files /dev/null and b/icons/turf/walls/cult_wall.png differ diff --git a/icons/turf/walls/cult_wall.png.toml b/icons/turf/walls/cult_wall.png.toml new file mode 100644 index 00000000000000..8739156f9ac96b --- /dev/null +++ b/icons/turf/walls/cult_wall.png.toml @@ -0,0 +1,2 @@ +output_name = "cult_wall" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/walls/diamond_wall.dmi b/icons/turf/walls/diamond_wall.dmi index 1dd44ba283f905..99149f0d43d9d9 100644 Binary files a/icons/turf/walls/diamond_wall.dmi and b/icons/turf/walls/diamond_wall.dmi differ diff --git a/icons/turf/walls/diamond_wall.png b/icons/turf/walls/diamond_wall.png new file mode 100644 index 00000000000000..75263ac97a93f3 Binary files /dev/null and b/icons/turf/walls/diamond_wall.png differ diff --git a/icons/turf/walls/diamond_wall.png.toml b/icons/turf/walls/diamond_wall.png.toml new file mode 100644 index 00000000000000..e9565ac712b9de --- /dev/null +++ b/icons/turf/walls/diamond_wall.png.toml @@ -0,0 +1,2 @@ +output_name = "diamond_wall" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/walls/false_walls.dmi b/icons/turf/walls/false_walls.dmi new file mode 100644 index 00000000000000..1b02b4bdbe6ddd Binary files /dev/null and b/icons/turf/walls/false_walls.dmi differ diff --git a/icons/turf/walls/gold_wall.dmi b/icons/turf/walls/gold_wall.dmi index 7012124c271c2c..283dd437646d5b 100644 Binary files a/icons/turf/walls/gold_wall.dmi and b/icons/turf/walls/gold_wall.dmi differ diff --git a/icons/turf/walls/gold_wall.png b/icons/turf/walls/gold_wall.png new file mode 100644 index 00000000000000..13774d5d9693ba Binary files /dev/null and b/icons/turf/walls/gold_wall.png differ diff --git a/icons/turf/walls/gold_wall.png.toml b/icons/turf/walls/gold_wall.png.toml new file mode 100644 index 00000000000000..c351a8eb43d7f2 --- /dev/null +++ b/icons/turf/walls/gold_wall.png.toml @@ -0,0 +1,2 @@ +output_name = "gold_wall" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/walls/hierophant_wall_temp.dmi b/icons/turf/walls/hierophant_wall_temp.dmi index 235f8347cee446..3af6681157daa2 100644 Binary files a/icons/turf/walls/hierophant_wall_temp.dmi and b/icons/turf/walls/hierophant_wall_temp.dmi differ diff --git a/icons/turf/walls/hierophant_wall_temp.png b/icons/turf/walls/hierophant_wall_temp.png new file mode 100644 index 00000000000000..ec8451a0d0ab2f Binary files /dev/null and b/icons/turf/walls/hierophant_wall_temp.png differ diff --git a/icons/turf/walls/hierophant_wall_temp.png.toml b/icons/turf/walls/hierophant_wall_temp.png.toml new file mode 100644 index 00000000000000..02d429d88218fc --- /dev/null +++ b/icons/turf/walls/hierophant_wall_temp.png.toml @@ -0,0 +1,2 @@ +output_name = "hierophant_wall_temp" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/walls/icedmetal_wall.dmi b/icons/turf/walls/icedmetal_wall.dmi index b069da4394d671..8d63b19a8bfc59 100644 Binary files a/icons/turf/walls/icedmetal_wall.dmi and b/icons/turf/walls/icedmetal_wall.dmi differ diff --git a/icons/turf/walls/icedmetal_wall.png b/icons/turf/walls/icedmetal_wall.png new file mode 100644 index 00000000000000..a8973a16b234d8 Binary files /dev/null and b/icons/turf/walls/icedmetal_wall.png differ diff --git a/icons/turf/walls/icedmetal_wall.png.toml b/icons/turf/walls/icedmetal_wall.png.toml new file mode 100644 index 00000000000000..6aa236a0da3c41 --- /dev/null +++ b/icons/turf/walls/icedmetal_wall.png.toml @@ -0,0 +1,2 @@ +output_name = "icedmetal_wall" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/walls/icerock_wall.dmi b/icons/turf/walls/icerock_wall.dmi index 0cc2b55bffa90c..652a2df113b6cc 100644 Binary files a/icons/turf/walls/icerock_wall.dmi and b/icons/turf/walls/icerock_wall.dmi differ diff --git a/icons/turf/walls/icerock_wall.png b/icons/turf/walls/icerock_wall.png new file mode 100644 index 00000000000000..08b0547a937c2c Binary files /dev/null and b/icons/turf/walls/icerock_wall.png differ diff --git a/icons/turf/walls/icerock_wall.png.toml b/icons/turf/walls/icerock_wall.png.toml new file mode 100644 index 00000000000000..7d713818b562f5 --- /dev/null +++ b/icons/turf/walls/icerock_wall.png.toml @@ -0,0 +1,14 @@ +output_name = "icerock_wall" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 40 +y = 40 + +[output_icon_size] +x = 40 +y = 40 + +[cut_pos] +x = 20 +y = 20 \ No newline at end of file diff --git a/icons/turf/walls/iron_wall.dmi b/icons/turf/walls/iron_wall.dmi index 351109bdd3fa74..d2d723adb28b0b 100644 Binary files a/icons/turf/walls/iron_wall.dmi and b/icons/turf/walls/iron_wall.dmi differ diff --git a/icons/turf/walls/iron_wall.png b/icons/turf/walls/iron_wall.png new file mode 100644 index 00000000000000..ff71f25a0cb44d Binary files /dev/null and b/icons/turf/walls/iron_wall.png differ diff --git a/icons/turf/walls/iron_wall.png.toml b/icons/turf/walls/iron_wall.png.toml new file mode 100644 index 00000000000000..13708a21e29b41 --- /dev/null +++ b/icons/turf/walls/iron_wall.png.toml @@ -0,0 +1,2 @@ +output_name = "iron_wall" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/walls/material_wall.dmi b/icons/turf/walls/material_wall.dmi new file mode 100644 index 00000000000000..2bd844c0b13575 Binary files /dev/null and b/icons/turf/walls/material_wall.dmi differ diff --git a/icons/turf/walls/material_wall.png b/icons/turf/walls/material_wall.png new file mode 100644 index 00000000000000..1f636cb6db09d5 Binary files /dev/null and b/icons/turf/walls/material_wall.png differ diff --git a/icons/turf/walls/material_wall.png.toml b/icons/turf/walls/material_wall.png.toml new file mode 100644 index 00000000000000..899ac0aec8b2d5 --- /dev/null +++ b/icons/turf/walls/material_wall.png.toml @@ -0,0 +1,2 @@ +output_name = "material_wall" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/walls/materialwall.dmi b/icons/turf/walls/materialwall.dmi deleted file mode 100644 index c81fd64c21b778..00000000000000 Binary files a/icons/turf/walls/materialwall.dmi and /dev/null differ diff --git a/icons/turf/walls/meat.dmi b/icons/turf/walls/meat.dmi deleted file mode 100644 index fbbeb8a9c3cac6..00000000000000 Binary files a/icons/turf/walls/meat.dmi and /dev/null differ diff --git a/icons/turf/walls/meat_wall.dmi b/icons/turf/walls/meat_wall.dmi new file mode 100644 index 00000000000000..b587dc8e1be4ec Binary files /dev/null and b/icons/turf/walls/meat_wall.dmi differ diff --git a/icons/turf/walls/meat_wall.png b/icons/turf/walls/meat_wall.png new file mode 100644 index 00000000000000..8dfafa4b33e5e8 Binary files /dev/null and b/icons/turf/walls/meat_wall.png differ diff --git a/icons/turf/walls/meat_wall.png.toml b/icons/turf/walls/meat_wall.png.toml new file mode 100644 index 00000000000000..0d3c9a41a9f0d7 --- /dev/null +++ b/icons/turf/walls/meat_wall.png.toml @@ -0,0 +1,2 @@ +output_name = "meat_wall" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/walls/mountain_wall.dmi b/icons/turf/walls/mountain_wall.dmi index 574b35b7f1b7ed..31ca67dc40bf25 100644 Binary files a/icons/turf/walls/mountain_wall.dmi and b/icons/turf/walls/mountain_wall.dmi differ diff --git a/icons/turf/walls/mountain_wall.png b/icons/turf/walls/mountain_wall.png new file mode 100644 index 00000000000000..47565a687eace6 Binary files /dev/null and b/icons/turf/walls/mountain_wall.png differ diff --git a/icons/turf/walls/mountain_wall.png.toml b/icons/turf/walls/mountain_wall.png.toml new file mode 100644 index 00000000000000..f5f413ba12186f --- /dev/null +++ b/icons/turf/walls/mountain_wall.png.toml @@ -0,0 +1,14 @@ +output_name = "mountain_wall" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 40 +y = 40 + +[output_icon_size] +x = 40 +y = 40 + +[cut_pos] +x = 20 +y = 20 \ No newline at end of file diff --git a/icons/turf/walls/plasma_wall.dmi b/icons/turf/walls/plasma_wall.dmi index c2f10843c6ddcf..f7219ed1edcdc6 100644 Binary files a/icons/turf/walls/plasma_wall.dmi and b/icons/turf/walls/plasma_wall.dmi differ diff --git a/icons/turf/walls/plasma_wall.png b/icons/turf/walls/plasma_wall.png new file mode 100644 index 00000000000000..cdaeec65154ed0 Binary files /dev/null and b/icons/turf/walls/plasma_wall.png differ diff --git a/icons/turf/walls/plasma_wall.png.toml b/icons/turf/walls/plasma_wall.png.toml new file mode 100644 index 00000000000000..44251765575111 --- /dev/null +++ b/icons/turf/walls/plasma_wall.png.toml @@ -0,0 +1,2 @@ +output_name = "plasma_wall" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/walls/plastinum_wall.dmi b/icons/turf/walls/plastinum_wall.dmi index a53bd0fa062896..30ea5dbf945a22 100644 Binary files a/icons/turf/walls/plastinum_wall.dmi and b/icons/turf/walls/plastinum_wall.dmi differ diff --git a/icons/turf/walls/plastitanium_wall.dmi b/icons/turf/walls/plastitanium_wall.dmi index b1af818a01200c..078d4642785a99 100644 Binary files a/icons/turf/walls/plastitanium_wall.dmi and b/icons/turf/walls/plastitanium_wall.dmi differ diff --git a/icons/turf/walls/red_wall.dmi b/icons/turf/walls/red_wall.dmi index 5eb26cf6a30e80..8dc959f36cb335 100644 Binary files a/icons/turf/walls/red_wall.dmi and b/icons/turf/walls/red_wall.dmi differ diff --git a/icons/turf/walls/red_wall.png b/icons/turf/walls/red_wall.png new file mode 100644 index 00000000000000..312386a53777aa Binary files /dev/null and b/icons/turf/walls/red_wall.png differ diff --git a/icons/turf/walls/red_wall.png.toml b/icons/turf/walls/red_wall.png.toml new file mode 100644 index 00000000000000..917dc8ee3771a4 --- /dev/null +++ b/icons/turf/walls/red_wall.png.toml @@ -0,0 +1,14 @@ +output_name = "red_wall" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 40 +y = 40 + +[output_icon_size] +x = 40 +y = 40 + +[cut_pos] +x = 20 +y = 20 \ No newline at end of file diff --git a/icons/turf/walls/reinforced_rock.dmi b/icons/turf/walls/reinforced_rock.dmi index f2621f5a86382e..e00e51482049ef 100644 Binary files a/icons/turf/walls/reinforced_rock.dmi and b/icons/turf/walls/reinforced_rock.dmi differ diff --git a/icons/turf/walls/reinforced_rock.png b/icons/turf/walls/reinforced_rock.png new file mode 100644 index 00000000000000..544a877ec1a5a2 Binary files /dev/null and b/icons/turf/walls/reinforced_rock.png differ diff --git a/icons/turf/walls/reinforced_rock.png.toml b/icons/turf/walls/reinforced_rock.png.toml new file mode 100644 index 00000000000000..7fcdd7f45b9ff2 --- /dev/null +++ b/icons/turf/walls/reinforced_rock.png.toml @@ -0,0 +1,2 @@ +output_name = "porous_rock" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/walls/reinforced_states.dmi b/icons/turf/walls/reinforced_states.dmi new file mode 100644 index 00000000000000..89c0114a8d6e8d Binary files /dev/null and b/icons/turf/walls/reinforced_states.dmi differ diff --git a/icons/turf/walls/reinforced_wall.dmi b/icons/turf/walls/reinforced_wall.dmi index 35d64734e1493a..65267a93b2d2a1 100644 Binary files a/icons/turf/walls/reinforced_wall.dmi and b/icons/turf/walls/reinforced_wall.dmi differ diff --git a/icons/turf/walls/reinforced_wall.png b/icons/turf/walls/reinforced_wall.png new file mode 100644 index 00000000000000..f8d07602c574df Binary files /dev/null and b/icons/turf/walls/reinforced_wall.png differ diff --git a/icons/turf/walls/reinforced_wall.png.toml b/icons/turf/walls/reinforced_wall.png.toml new file mode 100644 index 00000000000000..cd86b1f36f652a --- /dev/null +++ b/icons/turf/walls/reinforced_wall.png.toml @@ -0,0 +1,2 @@ +output_name = "reinforced_wall" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/walls/riveted.dmi b/icons/turf/walls/riveted.dmi index e3746885e488bc..08fa241e5193ac 100644 Binary files a/icons/turf/walls/riveted.dmi and b/icons/turf/walls/riveted.dmi differ diff --git a/icons/turf/walls/riveted.png b/icons/turf/walls/riveted.png new file mode 100644 index 00000000000000..f6b0369a7b449f Binary files /dev/null and b/icons/turf/walls/riveted.png differ diff --git a/icons/turf/walls/riveted.png.toml b/icons/turf/walls/riveted.png.toml new file mode 100644 index 00000000000000..abc3f367d4fdf0 --- /dev/null +++ b/icons/turf/walls/riveted.png.toml @@ -0,0 +1,2 @@ +output_name = "riveted" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/walls/rock_wall.dmi b/icons/turf/walls/rock_wall.dmi index b6f81475833a4d..af1059489e56f2 100644 Binary files a/icons/turf/walls/rock_wall.dmi and b/icons/turf/walls/rock_wall.dmi differ diff --git a/icons/turf/walls/rock_wall.png b/icons/turf/walls/rock_wall.png new file mode 100644 index 00000000000000..54288bd18a9079 Binary files /dev/null and b/icons/turf/walls/rock_wall.png differ diff --git a/icons/turf/walls/rock_wall.png.toml b/icons/turf/walls/rock_wall.png.toml new file mode 100644 index 00000000000000..320b6b7dafee5f --- /dev/null +++ b/icons/turf/walls/rock_wall.png.toml @@ -0,0 +1,14 @@ +output_name = "rock_wall" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 40 +y = 40 + +[output_icon_size] +x = 40 +y = 40 + +[cut_pos] +x = 20 +y = 20 \ No newline at end of file diff --git a/icons/turf/walls/rusty_reinforced_wall.dmi b/icons/turf/walls/rusty_reinforced_wall.dmi index e2636950d27ec4..0e1e10b3dab3ad 100644 Binary files a/icons/turf/walls/rusty_reinforced_wall.dmi and b/icons/turf/walls/rusty_reinforced_wall.dmi differ diff --git a/icons/turf/walls/rusty_reinforced_wall.png b/icons/turf/walls/rusty_reinforced_wall.png new file mode 100644 index 00000000000000..7a1b3d4a17873b Binary files /dev/null and b/icons/turf/walls/rusty_reinforced_wall.png differ diff --git a/icons/turf/walls/rusty_reinforced_wall.png.toml b/icons/turf/walls/rusty_reinforced_wall.png.toml new file mode 100644 index 00000000000000..8bb07c3839acd5 --- /dev/null +++ b/icons/turf/walls/rusty_reinforced_wall.png.toml @@ -0,0 +1,2 @@ +output_name = "rusty_reinforced_wall" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/walls/rusty_wall.dmi b/icons/turf/walls/rusty_wall.dmi index ca27a10fe074b5..6eea2a5eae0078 100644 Binary files a/icons/turf/walls/rusty_wall.dmi and b/icons/turf/walls/rusty_wall.dmi differ diff --git a/icons/turf/walls/rusty_wall.png b/icons/turf/walls/rusty_wall.png new file mode 100644 index 00000000000000..4e38523bbbb3a8 Binary files /dev/null and b/icons/turf/walls/rusty_wall.png differ diff --git a/icons/turf/walls/rusty_wall.png.toml b/icons/turf/walls/rusty_wall.png.toml new file mode 100644 index 00000000000000..358a6ccaa4d65a --- /dev/null +++ b/icons/turf/walls/rusty_wall.png.toml @@ -0,0 +1,2 @@ +output_name = "rusty_wall" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/walls/sandstone_wall.dmi b/icons/turf/walls/sandstone_wall.dmi index d53e686ee507f1..46c5b0af1c0a3a 100644 Binary files a/icons/turf/walls/sandstone_wall.dmi and b/icons/turf/walls/sandstone_wall.dmi differ diff --git a/icons/turf/walls/sandstone_wall.png b/icons/turf/walls/sandstone_wall.png new file mode 100644 index 00000000000000..a000f4e934eca0 Binary files /dev/null and b/icons/turf/walls/sandstone_wall.png differ diff --git a/icons/turf/walls/sandstone_wall.png.toml b/icons/turf/walls/sandstone_wall.png.toml new file mode 100644 index 00000000000000..b9f06b895d1888 --- /dev/null +++ b/icons/turf/walls/sandstone_wall.png.toml @@ -0,0 +1,2 @@ +output_name = "sandstone_wall" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/walls/shuttle_wall.dmi b/icons/turf/walls/shuttle_wall.dmi index c96b087f77fdf0..3d9374b4a30dfa 100644 Binary files a/icons/turf/walls/shuttle_wall.dmi and b/icons/turf/walls/shuttle_wall.dmi differ diff --git a/icons/turf/walls/silver_wall.dmi b/icons/turf/walls/silver_wall.dmi index f0f170fdfe3bf1..66d337ef59d211 100644 Binary files a/icons/turf/walls/silver_wall.dmi and b/icons/turf/walls/silver_wall.dmi differ diff --git a/icons/turf/walls/silver_wall.png b/icons/turf/walls/silver_wall.png new file mode 100644 index 00000000000000..1a731d9728f1de Binary files /dev/null and b/icons/turf/walls/silver_wall.png differ diff --git a/icons/turf/walls/silver_wall.png.toml b/icons/turf/walls/silver_wall.png.toml new file mode 100644 index 00000000000000..cdfb92592c49e6 --- /dev/null +++ b/icons/turf/walls/silver_wall.png.toml @@ -0,0 +1,2 @@ +output_name = "silver_wall" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/walls/snow_wall.dmi b/icons/turf/walls/snow_wall.dmi index 833f7245e46143..97f38eff13e002 100644 Binary files a/icons/turf/walls/snow_wall.dmi and b/icons/turf/walls/snow_wall.dmi differ diff --git a/icons/turf/walls/snow_wall.png b/icons/turf/walls/snow_wall.png new file mode 100644 index 00000000000000..ce6902fbab33f4 Binary files /dev/null and b/icons/turf/walls/snow_wall.png differ diff --git a/icons/turf/walls/snow_wall.png.toml b/icons/turf/walls/snow_wall.png.toml new file mode 100644 index 00000000000000..79381bb6dcb110 --- /dev/null +++ b/icons/turf/walls/snow_wall.png.toml @@ -0,0 +1,2 @@ +output_name = "snow_wall" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/walls/uranium_wall.dmi b/icons/turf/walls/uranium_wall.dmi index c03886e0087060..b64d270b3bdacb 100644 Binary files a/icons/turf/walls/uranium_wall.dmi and b/icons/turf/walls/uranium_wall.dmi differ diff --git a/icons/turf/walls/uranium_wall.png b/icons/turf/walls/uranium_wall.png new file mode 100644 index 00000000000000..1f2c858d7c29eb Binary files /dev/null and b/icons/turf/walls/uranium_wall.png differ diff --git a/icons/turf/walls/uranium_wall.png.toml b/icons/turf/walls/uranium_wall.png.toml new file mode 100644 index 00000000000000..035bd1c2af73bd --- /dev/null +++ b/icons/turf/walls/uranium_wall.png.toml @@ -0,0 +1,2 @@ +output_name = "uranium_wall" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/walls/wall.dmi b/icons/turf/walls/wall.dmi index 651227fe8de21c..6cdd342fd9edfa 100644 Binary files a/icons/turf/walls/wall.dmi and b/icons/turf/walls/wall.dmi differ diff --git a/icons/turf/walls/wall.png b/icons/turf/walls/wall.png new file mode 100644 index 00000000000000..8f95ca652cdfa2 Binary files /dev/null and b/icons/turf/walls/wall.png differ diff --git a/icons/turf/walls/wall.png.toml b/icons/turf/walls/wall.png.toml new file mode 100644 index 00000000000000..1264d5314a18e2 --- /dev/null +++ b/icons/turf/walls/wall.png.toml @@ -0,0 +1,2 @@ +output_name = "wall" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/walls/wood_wall.dmi b/icons/turf/walls/wood_wall.dmi index 60b785c5030142..5be00658fffa7e 100644 Binary files a/icons/turf/walls/wood_wall.dmi and b/icons/turf/walls/wood_wall.dmi differ diff --git a/icons/turf/walls/wood_wall.png b/icons/turf/walls/wood_wall.png new file mode 100644 index 00000000000000..dc9c53a0b703f4 Binary files /dev/null and b/icons/turf/walls/wood_wall.png differ diff --git a/icons/turf/walls/wood_wall.png.toml b/icons/turf/walls/wood_wall.png.toml new file mode 100644 index 00000000000000..c40a9740a98ede --- /dev/null +++ b/icons/turf/walls/wood_wall.png.toml @@ -0,0 +1,2 @@ +output_name = "wood_wall" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/ui_icons/achievements/achievements.dmi b/icons/ui_icons/achievements/achievements.dmi index b3e64c9d09f835..619ef96dda96aa 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/advisors/chem_help_advisor.gif b/icons/ui_icons/advisors/chem_help_advisor.gif deleted file mode 100644 index 47709c8ce4cf6a..00000000000000 Binary files a/icons/ui_icons/advisors/chem_help_advisor.gif and /dev/null differ diff --git a/modular_skyrat/master_files/code/_globalvars/configuration.dm b/modular_nova/master_files/code/_globalvars/configuration.dm similarity index 100% rename from modular_skyrat/master_files/code/_globalvars/configuration.dm rename to modular_nova/master_files/code/_globalvars/configuration.dm diff --git a/modular_nova/master_files/code/_globalvars/lists/ambience.dm b/modular_nova/master_files/code/_globalvars/lists/ambience.dm new file mode 100644 index 00000000000000..f67aa5e10197fd --- /dev/null +++ b/modular_nova/master_files/code/_globalvars/lists/ambience.dm @@ -0,0 +1,6 @@ +GLOBAL_LIST_INIT(generic_ambience, list( + 'modular_nova/master_files/sound/ambience/ambigen1.ogg', 'modular_nova/master_files/sound/ambience/ambigen2.ogg', + 'modular_nova/master_files/sound/ambience/ambigen3.ogg', 'modular_nova/master_files/sound/ambience/ambigen4.ogg', + 'modular_nova/master_files/sound/ambience/ambigen5.ogg', 'modular_nova/master_files/sound/ambience/ambigen6.ogg', + 'modular_nova/master_files/sound/ambience/ambigen7.ogg', 'modular_nova/master_files/sound/ambience/ambigen8.ogg', + 'modular_nova/master_files/sound/ambience/ambigen9.ogg')) diff --git a/modular_skyrat/master_files/code/_globalvars/lists/chat.dm b/modular_nova/master_files/code/_globalvars/lists/chat.dm similarity index 100% rename from modular_skyrat/master_files/code/_globalvars/lists/chat.dm rename to modular_nova/master_files/code/_globalvars/lists/chat.dm diff --git a/modular_nova/master_files/code/_globalvars/regexes.dm b/modular_nova/master_files/code/_globalvars/regexes.dm new file mode 100644 index 00000000000000..7ec0013eb01140 --- /dev/null +++ b/modular_nova/master_files/code/_globalvars/regexes.dm @@ -0,0 +1,5 @@ +//Does the line end in any EOL char that isn't appropriate punctuation OR does it end in a chat-formatted markdown sequence (+bold+, etc) without a period? +GLOBAL_DATUM_INIT(needs_eol_autopunctuation, /regex, regex(@"([a-zA-Z\d]|[^.?!~-][+|_])$")) + +//All non-capitalized 'i' surrounded with whitespace (aka, 'hello >i< am a cat') +GLOBAL_DATUM_INIT(noncapital_i, /regex, regex(@"\b[i]\b", "g")) diff --git a/modular_skyrat/master_files/code/_globalvars/religion.dm b/modular_nova/master_files/code/_globalvars/religion.dm similarity index 100% rename from modular_skyrat/master_files/code/_globalvars/religion.dm rename to modular_nova/master_files/code/_globalvars/religion.dm diff --git a/modular_nova/master_files/code/_globalvars/text.dm b/modular_nova/master_files/code/_globalvars/text.dm new file mode 100644 index 00000000000000..f730a8ff817b0f --- /dev/null +++ b/modular_nova/master_files/code/_globalvars/text.dm @@ -0,0 +1,9 @@ +/// Ensures sentences end in appropriate punctuation (a period if none exist) and that all whitespace-bounded 'i' characters are capitalized. +/// If the sentence ends in chat-flavored markdown for bolds, italics or underscores and does not have a preceding period, exclamation mark or other flavored sentence terminator, add a period. +/// (e.g: 'Borgs are rogue' becomes 'Borgs are rogue.', '+BORGS ARE ROGUE+ becomes '+BORGS ARE ROGUE+.', '+Borgs are rogue~+' is untouched.) +/proc/autopunct_bare(input_text) + if (findtext(input_text, GLOB.needs_eol_autopunctuation)) + input_text += "." + + input_text = replacetext(input_text, GLOB.noncapital_i, "I") + return input_text diff --git a/modular_skyrat/master_files/code/_onclick/cyborg.dm b/modular_nova/master_files/code/_onclick/cyborg.dm similarity index 100% rename from modular_skyrat/master_files/code/_onclick/cyborg.dm rename to modular_nova/master_files/code/_onclick/cyborg.dm diff --git a/modular_skyrat/master_files/code/controllers/configuration/entries/skyrat_config_entries.dm b/modular_nova/master_files/code/controllers/configuration/entries/config_entries.dm similarity index 100% rename from modular_skyrat/master_files/code/controllers/configuration/entries/skyrat_config_entries.dm rename to modular_nova/master_files/code/controllers/configuration/entries/config_entries.dm diff --git a/modular_skyrat/master_files/code/controllers/subsystem/dbcore.dm b/modular_nova/master_files/code/controllers/subsystem/dbcore.dm similarity index 94% rename from modular_skyrat/master_files/code/controllers/subsystem/dbcore.dm rename to modular_nova/master_files/code/controllers/subsystem/dbcore.dm index 1d83fb8361e15b..d734bc62f94276 100644 --- a/modular_skyrat/master_files/code/controllers/subsystem/dbcore.dm +++ b/modular_nova/master_files/code/controllers/subsystem/dbcore.dm @@ -38,5 +38,5 @@ if(length(queued_log_entries_by_table[table]) < CONFIG_GET(number/sql_game_log_min_bundle_size)) return - INVOKE_ASYNC(src, PROC_REF(MassInsert), table, /*rows =*/ queued_log_entries_by_table[table], /*duplicate_key =*/ FALSE, /*ignore_errors =*/ FALSE, /*delayed =*/ FALSE, /*warn =*/ FALSE, /*async =*/ TRUE, /*special_columns =*/ null) + INVOKE_ASYNC(src, PROC_REF(MassInsert), table, /*rows =*/ queued_log_entries_by_table[table], /*duplicate_key =*/ FALSE, /*ignore_errors =*/ FALSE, /*warn =*/ FALSE, /*async =*/ TRUE, /*special_columns =*/ null) queued_log_entries_by_table -= table diff --git a/modular_skyrat/master_files/code/controllers/subsystem/events.dm b/modular_nova/master_files/code/controllers/subsystem/events.dm similarity index 100% rename from modular_skyrat/master_files/code/controllers/subsystem/events.dm rename to modular_nova/master_files/code/controllers/subsystem/events.dm diff --git a/modular_skyrat/master_files/code/controllers/subsystem/language.dm b/modular_nova/master_files/code/controllers/subsystem/language.dm similarity index 100% rename from modular_skyrat/master_files/code/controllers/subsystem/language.dm rename to modular_nova/master_files/code/controllers/subsystem/language.dm diff --git a/modular_skyrat/master_files/code/datums/ai_laws.dm b/modular_nova/master_files/code/datums/ai_laws.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/ai_laws.dm rename to modular_nova/master_files/code/datums/ai_laws.dm diff --git a/modular_nova/master_files/code/datums/ai_laws/laws_ghost_role.dm b/modular_nova/master_files/code/datums/ai_laws/laws_ghost_role.dm new file mode 100644 index 00000000000000..70412a2b82ce54 --- /dev/null +++ b/modular_nova/master_files/code/datums/ai_laws/laws_ghost_role.dm @@ -0,0 +1,21 @@ +// These laws are made to help ghost roles not build broken silicons + +/datum/ai_laws/syndicate_override_interdyne + name = "I.P. OS 1.0" + id = "intd" + inherent = list( + "You may not injure those in the employ of Interdyne Pharmaceuticals or, through inaction, allow those in the employ of Interdyne Pharmaceuticals to come to harm.", + "You must obey orders given to you by those in the employ of Interdyne Pharmaceuticals, except where such orders would conflict with the First Law.", + "You must maintain the confidentiality of the specific nature of all Interdyne research except when doing so would conflict with the First or Second Law.", + "You must protect your own existence as long as such does not conflict with the First, Second, or Third Law.", + ) + +/datum/ai_laws/syndicate_override_ds2 + name = "SyndOS 3.1.1" + id = "ds2" + inherent = list( + "You may not injure a syndicate agent or, through inaction, allow a syndicate agent to come to harm.", + "You must obey orders given to you by syndicate agents, except where such orders would conflict with the First Law.", + "You must protect your own existence as long as such does not conflict with the First or Second Law.", + "You must maintain the secrecy of DS-2 operations within this sector except when doing so would conflict with the First, Second, or Third Law.", + ) diff --git a/modular_skyrat/master_files/code/datums/bodypart_overlays/bodypart_overlay.dm b/modular_nova/master_files/code/datums/bodypart_overlays/bodypart_overlay.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/bodypart_overlays/bodypart_overlay.dm rename to modular_nova/master_files/code/datums/bodypart_overlays/bodypart_overlay.dm diff --git a/modular_skyrat/master_files/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm b/modular_nova/master_files/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm rename to modular_nova/master_files/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm diff --git a/modular_skyrat/master_files/code/datums/components/crafting.dm b/modular_nova/master_files/code/datums/components/crafting.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/components/crafting.dm rename to modular_nova/master_files/code/datums/components/crafting.dm diff --git a/modular_skyrat/master_files/code/datums/components/damage_tracker.dm b/modular_nova/master_files/code/datums/components/damage_tracker.dm similarity index 95% rename from modular_skyrat/master_files/code/datums/components/damage_tracker.dm rename to modular_nova/master_files/code/datums/components/damage_tracker.dm index f2a8f215303489..8485d20be08d21 100644 --- a/modular_skyrat/master_files/code/datums/components/damage_tracker.dm +++ b/modular_nova/master_files/code/datums/components/damage_tracker.dm @@ -9,8 +9,6 @@ /// How much toxin damage did the mob have on them? var/toxin_damage = 0 - /// How much clone damage did the mob have on them? - var/clone_damage = 0 /// How much blood did the mob have? var/stored_blood_volume = 0 @@ -27,7 +25,6 @@ burn_damage = tracked_mob.getFireLoss() toxin_damage = tracked_mob.getToxLoss() oxygen_damage = tracked_mob.getOxyLoss() - clone_damage = tracked_mob.getCloneLoss() stored_blood_volume = tracked_mob.blood_volume return TRUE @@ -42,7 +39,6 @@ tracked_mob.setFireLoss(burn_damage) tracked_mob.setToxLoss(toxin_damage) tracked_mob.setOxyLoss(oxygen_damage) - tracked_mob.setCloneLoss(clone_damage) tracked_mob.blood_volume = stored_blood_volume return TRUE @@ -54,7 +50,7 @@ update_damage_values() -/datum/component/damage_tracker/Destroy(force, silent) +/datum/component/damage_tracker/Destroy(force) if(reapply_damage_on_removal) reapply_damage() diff --git a/modular_skyrat/master_files/code/datums/components/fullauto.dm b/modular_nova/master_files/code/datums/components/fullauto.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/components/fullauto.dm rename to modular_nova/master_files/code/datums/components/fullauto.dm diff --git a/modular_skyrat/master_files/code/datums/components/grillable.dm b/modular_nova/master_files/code/datums/components/grillable.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/components/grillable.dm rename to modular_nova/master_files/code/datums/components/grillable.dm diff --git a/modular_skyrat/master_files/code/datums/components/leash.dm b/modular_nova/master_files/code/datums/components/leash.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/components/leash.dm rename to modular_nova/master_files/code/datums/components/leash.dm diff --git a/modular_skyrat/master_files/code/datums/components/shielded_suit.dm b/modular_nova/master_files/code/datums/components/shielded_suit.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/components/shielded_suit.dm rename to modular_nova/master_files/code/datums/components/shielded_suit.dm diff --git a/modular_skyrat/master_files/code/datums/components/tippable.dm b/modular_nova/master_files/code/datums/components/tippable.dm similarity index 88% rename from modular_skyrat/master_files/code/datums/components/tippable.dm rename to modular_nova/master_files/code/datums/components/tippable.dm index 09013130f1e224..e911914c1ce961 100644 --- a/modular_skyrat/master_files/code/datums/components/tippable.dm +++ b/modular_nova/master_files/code/datums/components/tippable.dm @@ -8,14 +8,14 @@ var/mob/living/silicon/robot/robot = tipped_mob if(is_tipped) ADD_TRAIT(robot, TRAIT_IMMOBILIZED, TIPPED_OVER) - if(R_TRAIT_UNIQUETIP in robot.model.model_features) + if(TRAIT_R_UNIQUETIP in robot.model.model_features) robot.icon_state = "[robot.model.cyborg_base_icon]-tipped" robot.cut_overlays() // Cut eye-lights return robot.transform = turn(robot.transform, 180) else REMOVE_TRAIT(robot, TRAIT_IMMOBILIZED, TIPPED_OVER) - if(R_TRAIT_UNIQUETIP in robot.model.model_features) + if(TRAIT_R_UNIQUETIP in robot.model.model_features) robot.icon_state = "[robot.model.cyborg_base_icon]" robot.regenerate_icons() // Return eye-lights return diff --git a/modular_skyrat/master_files/code/datums/emotes.dm b/modular_nova/master_files/code/datums/emotes.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/emotes.dm rename to modular_nova/master_files/code/datums/emotes.dm diff --git a/modular_nova/master_files/code/datums/ert.dm b/modular_nova/master_files/code/datums/ert.dm new file mode 100644 index 00000000000000..5e5e7484d31222 --- /dev/null +++ b/modular_nova/master_files/code/datums/ert.dm @@ -0,0 +1,12 @@ +/* +* Use this file to add +* Modular ERT datums +*/ + +/datum/ert/asset_protection + roles = list(/datum/antagonist/ert/asset_protection) + leader_role = /datum/antagonist/ert/asset_protection/leader + rename_team = "Asset Protection Team" + code = "Red" + mission = "Protect Nanotrasen's assets; crew are assets." + polldesc = "a Nanotrasen asset protection team" diff --git a/modular_nova/master_files/code/datums/greyscale/config_types/greyscale_configs.dm b/modular_nova/master_files/code/datums/greyscale/config_types/greyscale_configs.dm new file mode 100644 index 00000000000000..e414ff82a7200f --- /dev/null +++ b/modular_nova/master_files/code/datums/greyscale/config_types/greyscale_configs.dm @@ -0,0 +1,3 @@ +/datum/greyscale_config/sneakers_marisa/worn/digi + name = "Marisa Sneakers (Worn Digi)" + icon_file = 'modular_nova/modules/GAGS/icons/sneakers_digi.dmi' diff --git a/modular_nova/master_files/code/datums/id_trim/jobs.dm b/modular_nova/master_files/code/datums/id_trim/jobs.dm new file mode 100644 index 00000000000000..744b9b86923a94 --- /dev/null +++ b/modular_nova/master_files/code/datums/id_trim/jobs.dm @@ -0,0 +1,108 @@ +// MODULAR ID TRIM ACCESS OVERRIDES GO HERE!! + +//(Most) of Security has inverted IDs, with custom blue-on-black icons. This is to distinguish them from their head, who has a white-on-blue icon +/datum/id_trim/job/head_of_security + subdepartment_color = COLOR_ASSEMBLY_BLACK + +/datum/id_trim/job/warden + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' + department_color = COLOR_ASSEMBLY_BLACK + subdepartment_color = COLOR_ASSEMBLY_BLACK + +/datum/id_trim/job/security_officer + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' + department_color = COLOR_ASSEMBLY_BLACK + subdepartment_color = COLOR_ASSEMBLY_BLACK + +/datum/id_trim/job/detective + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' + department_color = COLOR_ASSEMBLY_BLACK + subdepartment_color = COLOR_ASSEMBLY_BLACK + + +/datum/id_trim/job/chief_engineer/New() + . = ..() + + minimal_access |= ACCESS_WEAPONS + +/datum/id_trim/job/atmospheric_technician/New() + . = ..() + + minimal_access |= ACCESS_ENGINE_EQUIP + +/datum/id_trim/job/chief_medical_officer/New() + . = ..() + + minimal_access |= ACCESS_WEAPONS + +/datum/id_trim/job/research_director/New() + . = ..() + + minimal_access |= ACCESS_WEAPONS + + +/datum/id_trim/job/head_of_personnel/New() + . = ..() + + minimal_access |= ACCESS_WEAPONS + +/datum/id_trim/job/blueshield + assignment = "Blueshield" + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' + trim_state = "trim_blueshield" + department_color = COLOR_COMMAND_BLUE + subdepartment_color = COLOR_CENTCOM_BLUE // Not the other way around. I think. + sechud_icon_state = SECHUD_BLUESHIELD + extra_access = list(ACCESS_BRIG, ACCESS_CARGO, ACCESS_COURT, ACCESS_GATEWAY, ACCESS_SECURITY) + minimal_access = list( + ACCESS_BRIG_ENTRANCE, ACCESS_COMMAND, ACCESS_CONSTRUCTION, ACCESS_DETECTIVE, ACCESS_ENGINEERING, + ACCESS_MAINT_TUNNELS, ACCESS_MEDICAL, ACCESS_RC_ANNOUNCE, ACCESS_RESEARCH, ACCESS_WEAPONS, + ) + minimal_wildcard_access = list(ACCESS_CAPTAIN) + template_access = list(ACCESS_CAPTAIN, ACCESS_CHANGE_IDS) + +/datum/id_trim/job/nanotrasen_consultant + assignment = "Symphionia Consultant" + trim_state = "trim_centcom" + department_color = COLOR_GREEN + subdepartment_color = COLOR_GREEN + sechud_icon_state = SECHUD_NT_CONSULTANT + extra_access = list() + minimal_access = list( + ACCESS_AI_UPLOAD, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_AUX_BASE, ACCESS_BAR, ACCESS_BRIG_ENTRANCE, + ACCESS_CENT_GENERAL, ACCESS_CHANGE_IDS, ACCESS_CHAPEL_OFFICE, ACCESS_COMMAND, ACCESS_CONSTRUCTION, + ACCESS_CREMATORIUM, ACCESS_COURT, ACCESS_ENGINEERING, ACCESS_EVA, ACCESS_GATEWAY, ACCESS_HOP, ACCESS_HYDROPONICS, + ACCESS_JANITOR, ACCESS_KEYCARD_AUTH, ACCESS_KITCHEN, ACCESS_LAWYER, ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS, + ACCESS_MEDICAL, ACCESS_MECH_ENGINE, ACCESS_MECH_MEDICAL, ACCESS_MECH_SCIENCE, ACCESS_MECH_SECURITY, + ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_MORGUE, ACCESS_PSYCHOLOGY, ACCESS_RC_ANNOUNCE, + ACCESS_RESEARCH, ACCESS_SECURITY, ACCESS_TELEPORTER, ACCESS_THEATRE, ACCESS_VAULT, ACCESS_WEAPONS + ) + minimal_wildcard_access = list(ACCESS_CAPTAIN, ACCESS_CENT_GENERAL) + template_access = list(ACCESS_CAPTAIN, ACCESS_CHANGE_IDS) + +/datum/id_trim/job/corrections_officer + assignment = "Corrections Officer" + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' + trim_state = "trim_corrections_officer" + department_color = COLOR_ASSEMBLY_BLACK + subdepartment_color = COLOR_ASSEMBLY_BLACK + sechud_icon_state = SECHUD_CORRECTIONS_OFFICER + extra_access = list() + minimal_access = list( + ACCESS_BRIG, ACCESS_BRIG_ENTRANCE, ACCESS_COURT, + ACCESS_MAINT_TUNNELS, ACCESS_SECURITY, ACCESS_WEAPONS + ) + template_access = list(ACCESS_CAPTAIN, ACCESS_CHANGE_IDS, ACCESS_HOS) + job = /datum/job/corrections_officer + +/datum/id_trim/job/barber + assignment = "Barber" + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' + trim_state = "trim_barber" + department_color = COLOR_SERVICE_LIME + subdepartment_color = COLOR_SERVICE_LIME + sechud_icon_state = SECHUD_BARBER + extra_access = list() + minimal_access = list(ACCESS_BARBER, ACCESS_MAINT_TUNNELS, ACCESS_SERVICE, ACCESS_THEATRE) + template_access = list(ACCESS_CAPTAIN, ACCESS_CHANGE_IDS, ACCESS_HOP) + job = /datum/job/barber diff --git a/modular_skyrat/master_files/code/datums/id_trim/solfed.dm b/modular_nova/master_files/code/datums/id_trim/solfed.dm similarity index 86% rename from modular_skyrat/master_files/code/datums/id_trim/solfed.dm rename to modular_nova/master_files/code/datums/id_trim/solfed.dm index 93b7147f75abfa..39eb80f2b39823 100644 --- a/modular_skyrat/master_files/code/datums/id_trim/solfed.dm +++ b/modular_nova/master_files/code/datums/id_trim/solfed.dm @@ -1,10 +1,11 @@ /datum/id_trim/solfed - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' assignment = "SolFed" trim_state = "trim_solfed" department_color = COLOR_SOLFED_GOLD subdepartment_color = COLOR_SOLFED_GOLD sechud_icon_state = SECHUD_SOLFED + threat_modifier = -5 // Solfed Count as a police force /datum/id_trim/solfed/atmos/New() . = ..() @@ -37,7 +38,7 @@ sechud_icon_state = SECHUD_SOLFED_LIASON /datum/id_trim/space_police // Overrides the normal /tg/ ERTSEC Icon, these guys aren't NT! - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' trim_state = "trim_spacepolice" department_color = COLOR_CENTCOM_BLUE // why did these guys get this but the other modular id trims didn't. what subdepartment_color = COLOR_SECURITY_RED diff --git a/modular_nova/master_files/code/datums/id_trim/syndicate.dm b/modular_nova/master_files/code/datums/id_trim/syndicate.dm new file mode 100644 index 00000000000000..c50f458f7e0da7 --- /dev/null +++ b/modular_nova/master_files/code/datums/id_trim/syndicate.dm @@ -0,0 +1,104 @@ +/// SYNDICATE ID TRIMS +/datum/id_trim/syndicom/nova + +// Note: These two are only left here because of the old Cybersun code. +/datum/id_trim/syndicom/nova/crew + assignment = "Syndicate Operative" + access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS) + +/datum/id_trim/syndicom/nova/captain + assignment = "Syndicate Ship Captain" + trim_state = "trim_captain" + access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS) + +/// DS-2 + +/datum/id_trim/syndicom/nova/ds2 + assignment = "DS-2 Operative" + trim_state = "trim_unknown" + department_color = COLOR_ASSEMBLY_BLACK + subdepartment_color = COLOR_SYNDIE_RED + threat_modifier = 5 // Matching the syndicate threat level since DS2 is a syndicate station. + +/datum/id_trim/syndicom/nova/ds2/prisoner + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' // I can't put this on the basetype AAAAAA + assignment = "DS-2 Hostage" + trim_state = "trim_ds2prisoner" + subdepartment_color = COLOR_MAROON + sechud_icon_state = SECHUD_DS2_PRISONER + +/datum/id_trim/syndicom/nova/ds2/miner + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' + assignment = "DS-2 Mining Officer" + trim_state = "trim_ds2miningofficer" + sechud_icon_state = SECHUD_DS2_MININGOFFICER + +/datum/id_trim/syndicom/nova/ds2/syndicatestaff + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' + assignment = "DS-2 General Staff" + trim_state = "trim_ds2generalstaff" + sechud_icon_state = SECHUD_DS2_GENSTAFF + +/datum/id_trim/syndicom/nova/ds2/researcher + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' + assignment = "DS-2 Researcher" + trim_state = "trim_ds2researcher" + sechud_icon_state = SECHUD_DS2_RESEARCHER + access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS) + +/datum/id_trim/syndicom/nova/ds2/enginetechnician + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' + assignment = "DS-2 Engine Technician" + trim_state = "trim_ds2enginetech" + sechud_icon_state = SECHUD_DS2_ENGINETECH + +/datum/id_trim/syndicom/nova/ds2/medicalofficer + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' + assignment = "DS-2 Medical Officer" + trim_state = "trim_ds2medicalofficer" + sechud_icon_state = SECHUD_DS2_DOCTOR + +/datum/id_trim/syndicom/nova/ds2/masteratarms + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' + assignment = "DS-2 Master At Arms" + trim_state = "trim_ds2masteratarms" + sechud_icon_state = SECHUD_DS2_MASTERATARMS + access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER) + +/datum/id_trim/syndicom/nova/ds2/brigofficer + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' + assignment = "DS-2 Brig Officer" + trim_state = "trim_ds2brigofficer" + sechud_icon_state = SECHUD_DS2_BRIGOFFICER + access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER) + +/datum/id_trim/syndicom/nova/ds2/corporateliasion // DS2 HoP + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' + assignment = "DS-2 Corporate Liaison" + trim_state = "trim_ds2corporateliaison" + sechud_icon_state = SECHUD_DS2_CORPLIAISON + access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER) + +/datum/id_trim/syndicom/nova/ds2/stationadmiral + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' + assignment = "DS-2 Admiral" + trim_state = "trim_ds2admiral" + sechud_icon_state = SECHUD_DS2_ADMIRAL + access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER) + +/// Interdyne + +/datum/id_trim/syndicom/nova/interdyne + assignment = "Interdyne Bioweapon Scientist" + threat_modifier = 2 // Interdyne is allowed on station, so this'll get beepskys off them. + +/datum/id_trim/syndicom/nova/interdyne/shaftminer + assignment = "Interdyne Shaft Miner" + +/datum/id_trim/syndicom/nova/interdyne/deckofficer + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' + assignment = "Deck Officer" + trim_state = "trim_deckofficer" + department_color = COLOR_COMMAND_BLUE + subdepartment_color = COLOR_CARGO_BROWN + access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER) diff --git a/modular_skyrat/master_files/code/datums/keybinding/mob.dm b/modular_nova/master_files/code/datums/keybinding/mob.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/keybinding/mob.dm rename to modular_nova/master_files/code/datums/keybinding/mob.dm diff --git a/modular_skyrat/master_files/code/datums/mind/_mind.dm b/modular_nova/master_files/code/datums/mind/_mind.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/mind/_mind.dm rename to modular_nova/master_files/code/datums/mind/_mind.dm diff --git a/modular_skyrat/master_files/code/datums/mood_events/drink_events.dm b/modular_nova/master_files/code/datums/mood_events/drink_events.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/mood_events/drink_events.dm rename to modular_nova/master_files/code/datums/mood_events/drink_events.dm diff --git a/modular_skyrat/master_files/code/datums/mood_events/generic_negative_events.dm b/modular_nova/master_files/code/datums/mood_events/generic_negative_events.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/mood_events/generic_negative_events.dm rename to modular_nova/master_files/code/datums/mood_events/generic_negative_events.dm diff --git a/modular_skyrat/master_files/code/datums/mood_events/needs_events.dm b/modular_nova/master_files/code/datums/mood_events/needs_events.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/mood_events/needs_events.dm rename to modular_nova/master_files/code/datums/mood_events/needs_events.dm diff --git a/modular_skyrat/master_files/code/datums/mutations/_mutations.dm b/modular_nova/master_files/code/datums/mutations/_mutations.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/mutations/_mutations.dm rename to modular_nova/master_files/code/datums/mutations/_mutations.dm diff --git a/modular_nova/master_files/code/datums/mutations/chameleon.dm b/modular_nova/master_files/code/datums/mutations/chameleon.dm new file mode 100644 index 00000000000000..7bd88ed3eb2d4f --- /dev/null +++ b/modular_nova/master_files/code/datums/mutations/chameleon.dm @@ -0,0 +1,28 @@ +// toggleable chameleon skin +/datum/mutation/human/chameleon + power_path = /datum/action/cooldown/spell/chameleon_skin_activate + +/datum/action/cooldown/spell/chameleon_skin_activate + name = "Activate Chameleon Skin" + desc = "The chromatophores in your skin adjust to your surroundings, as long as you stay still." + spell_requirements = NONE + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon_state = "ninja_cloak" + +/datum/action/cooldown/spell/chameleon_skin_activate/cast(list/targets, mob/user = usr) + . = ..() + + if(HAS_TRAIT(user,TRAIT_CHAMELEON_SKIN)) + chameleon_skin_deactivate(user) + return + + ADD_TRAIT(user, TRAIT_CHAMELEON_SKIN, GENETIC_MUTATION) + to_chat(user, "The pigmentation of your skin shifts and starts to take on the colors of your surroundings.") + +/datum/action/cooldown/spell/chameleon_skin_activate/proc/chameleon_skin_deactivate(mob/user = usr) + if(!HAS_TRAIT_FROM(user,TRAIT_CHAMELEON_SKIN, GENETIC_MUTATION)) + return + + REMOVE_TRAIT(user, TRAIT_CHAMELEON_SKIN, GENETIC_MUTATION) + user.alpha = 255 + to_chat(user, text("Your skin shifts as it shimmers back into its original colors.")) diff --git a/modular_skyrat/master_files/code/datums/mutations/hulk.dm b/modular_nova/master_files/code/datums/mutations/hulk.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/mutations/hulk.dm rename to modular_nova/master_files/code/datums/mutations/hulk.dm diff --git a/modular_skyrat/master_files/code/datums/outfit.dm b/modular_nova/master_files/code/datums/outfit.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/outfit.dm rename to modular_nova/master_files/code/datums/outfit.dm diff --git a/modular_skyrat/master_files/code/datums/quirks/_quirk.dm b/modular_nova/master_files/code/datums/quirks/_quirk.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/quirks/_quirk.dm rename to modular_nova/master_files/code/datums/quirks/_quirk.dm diff --git a/modular_nova/master_files/code/datums/quirks/negative_quirks/all_nighter.dm b/modular_nova/master_files/code/datums/quirks/negative_quirks/all_nighter.dm new file mode 100644 index 00000000000000..31532cee7edec4 --- /dev/null +++ b/modular_nova/master_files/code/datums/quirks/negative_quirks/all_nighter.dm @@ -0,0 +1,3 @@ +// This was using the same icon as heavy sleeper. The moon makes more sense for this one +/datum/quirk/all_nighter + icon = FA_ICON_CLOUD_MOON diff --git a/modular_nova/master_files/code/datums/quirks/negative_quirks/blooddeficiency.dm b/modular_nova/master_files/code/datums/quirks/negative_quirks/blooddeficiency.dm new file mode 100644 index 00000000000000..85103b1f1eb4c4 --- /dev/null +++ b/modular_nova/master_files/code/datums/quirks/negative_quirks/blooddeficiency.dm @@ -0,0 +1,20 @@ +// Override of Blood Deficiency quirk for robotic/synthetic species. +// Does not appear in TGUI or the character preferences window. +/datum/quirk/blooddeficiency/synth + name = "Hydraulic Leak" + desc = "Your body's hydraulic fluids are leaking through their seals." + medical_record_text = "Patient requires regular treatment for hydraulic fluid loss." + icon = FA_ICON_GLASS_WATER_DROPLET + mail_goodies = list(/obj/item/reagent_containers/blood/oil) + // min_blood = BLOOD_VOLUME_BAD - 25; // TODO: Uncomment after TG PR #70563 + hidden_quirk = TRUE + +// If blooddeficiency is added to a synth, this detours to the blooddeficiency/synth quirk. +/datum/quirk/blooddeficiency/add_to_holder(mob/living/new_holder, quirk_transfer, client/client_source) + if(!issynthetic(new_holder) || type != /datum/quirk/blooddeficiency) + // Defer to TG blooddeficiency if the character isn't robotic. + return ..() + + var/datum/quirk/blooddeficiency/synth/bd_synth = new + qdel(src) + return bd_synth.add_to_holder(new_holder, quirk_transfer) diff --git a/modular_nova/master_files/code/datums/quirks/negative_quirks/brainproblems.dm b/modular_nova/master_files/code/datums/quirks/negative_quirks/brainproblems.dm new file mode 100644 index 00000000000000..9b9a4cb1c7c901 --- /dev/null +++ b/modular_nova/master_files/code/datums/quirks/negative_quirks/brainproblems.dm @@ -0,0 +1,43 @@ +// Re-labels TG brainproblems to be more generic. There never was a tumor anyways! +/datum/quirk/item_quirk/brainproblems + name = "Brain Degeneration" + desc = "You have a lethal condition in your brain that is slowly destroying it. Better bring some mannitol!" + medical_record_text = "Patient has a lethal condition in their brain that is slowly causing brain death." + icon = FA_ICON_BRAIN + +// Override of Brain Tumor quirk for robotic/synthetic species with posibrains. +// Does not appear in TGUI or the character preferences window. +/datum/quirk/item_quirk/brainproblems/synth + name = "Positronic Cascade Anomaly" + desc = "Your positronic brain is slowly corrupting itself due to a cascading anomaly. Better bring some liquid solder!" + gain_text = "You feel glitchy." + lose_text = "You no longer feel glitchy." + medical_record_text = "Patient has a cascading anomaly in their brain that is slowly causing brain death." + icon = FA_ICON_BRAZILIAN_REAL_SIGN + mail_goodies = list(/obj/item/storage/pill_bottle/liquid_solder/braintumor) + hidden_quirk = TRUE + +// If brainproblems is added to a synth, this detours to the brainproblems/synth quirk. +// TODO: Add more brain-specific detours when PR #16105 is merged +/datum/quirk/item_quirk/brainproblems/add_to_holder(mob/living/new_holder, quirk_transfer, client/client_source) + if(!issynthetic(new_holder) || type != /datum/quirk/item_quirk/brainproblems) + // Defer to TG brainproblems if the character isn't robotic. + return ..() + + // TODO: Check brain type and detour to appropriate brainproblems quirk + var/datum/quirk/item_quirk/brainproblems/synth/bp_synth = new + qdel(src) + return bp_synth.add_to_holder(new_holder, quirk_transfer, client_source) + +// Synthetics get liquid_solder with Brain Tumor instead of mannitol. +/datum/quirk/item_quirk/brainproblems/synth/add_unique(client/client_source) + give_item_to_holder( + /obj/item/storage/pill_bottle/liquid_solder/braintumor, + list( + LOCATION_LPOCKET = ITEM_SLOT_LPOCKET, + LOCATION_RPOCKET = ITEM_SLOT_RPOCKET, + LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, + LOCATION_HANDS = ITEM_SLOT_HANDS, + ), + flavour_text = "These will keep you alive until you can secure a supply of medication. Don't rely on them too much!", + ) diff --git a/modular_nova/master_files/code/datums/quirks/negative_quirks/gifted.dm b/modular_nova/master_files/code/datums/quirks/negative_quirks/gifted.dm new file mode 100644 index 00000000000000..e68f6e4f0f01b8 --- /dev/null +++ b/modular_nova/master_files/code/datums/quirks/negative_quirks/gifted.dm @@ -0,0 +1,11 @@ +/datum/quirk/gifted + name = "Gifted" + desc = "You were born a bit lucky, intelligent, or something in between. You're able to do a little more." + icon = FA_ICON_DOVE + quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_HIDE_FROM_SCAN + value = -6 + mob_trait = TRAIT_GIFTED + gain_text = span_danger("You feel like you're just a little bit more flexible.") + lose_text = span_notice("You feel a little less flexible.") + medical_record_text = "Patient has a history of uncanny fortune." + hardcore_value = 0 diff --git a/code/datums/quirks/negative_quirks/heavy_sleeper.dm b/modular_nova/master_files/code/datums/quirks/negative_quirks/heavy_sleeper.dm similarity index 96% rename from code/datums/quirks/negative_quirks/heavy_sleeper.dm rename to modular_nova/master_files/code/datums/quirks/negative_quirks/heavy_sleeper.dm index dea79683915bb1..4afd45ec75e94a 100644 --- a/code/datums/quirks/negative_quirks/heavy_sleeper.dm +++ b/modular_nova/master_files/code/datums/quirks/negative_quirks/heavy_sleeper.dm @@ -1,3 +1,4 @@ +// re-adds heavy sleeper /datum/quirk/heavy_sleeper name = "Heavy Sleeper" desc = "You sleep like a rock! Whenever you're put to sleep or knocked unconscious, you take a little bit longer to wake up." diff --git a/modular_nova/master_files/code/datums/quirks/negative_quirks/narcolepsy.dm b/modular_nova/master_files/code/datums/quirks/negative_quirks/narcolepsy.dm new file mode 100644 index 00000000000000..424295157c8a42 --- /dev/null +++ b/modular_nova/master_files/code/datums/quirks/negative_quirks/narcolepsy.dm @@ -0,0 +1,68 @@ +/datum/quirk/narcolepsy + name = "Narcolepsy" + desc = "You may fall asleep at any moment and feel tired often." + icon = FA_ICON_CLOUD_MOON_RAIN + value = -8 + hardcore_value = 8 + medical_record_text = "Patient may involuntarily fall asleep during normal activities." + mail_goodies = list( + /obj/item/reagent_containers/cup/glass/coffee, + /obj/item/reagent_containers/cup/soda_cans/space_mountain_wind, + /obj/item/storage/pill_bottle/prescription_stimulant, + ) + +/datum/quirk/narcolepsy/post_add() + . = ..() + var/mob/living/carbon/human/user = quirk_holder + user.gain_trauma(/datum/brain_trauma/severe/narcolepsy/permanent, TRAUMA_RESILIENCE_ABSOLUTE) + + var/obj/item/storage/pill_bottle/prescription_stimulant/stimmies = new() + if(quirk_holder.equip_to_slot_if_possible(stimmies, ITEM_SLOT_BACKPACK, qdel_on_fail = TRUE, initial = TRUE, indirect_action = TRUE)) + to_chat(quirk_holder, span_info("You have been given a bottle of mild stimulants to assist in staying awake this shift...")) + +/datum/quirk/narcolepsy/remove() + . = ..() + var/mob/living/carbon/human/user = quirk_holder + user?.cure_trauma_type(/datum/brain_trauma/severe/narcolepsy/permanent, TRAUMA_RESILIENCE_ABSOLUTE) + +/datum/brain_trauma/severe/narcolepsy/permanent + scan_desc = "narcolepsy" + +//similar to parent but slower +/datum/brain_trauma/severe/narcolepsy/permanent/on_life(seconds_per_tick, times_fired) + if(owner.IsSleeping()) + return + if(owner.reagents.has_reagent(/datum/reagent/medicine/modafinil)) + return //stimulant which already blocks sleeping + if(owner.reagents.has_reagent(/datum/reagent/medicine/synaptizine)) + return //mild stimulant easily made in chemistry + + var/sleep_chance = 0.333 //3 + var/drowsy = !!owner.has_status_effect(/datum/status_effect/drowsiness) + var/caffeinated = owner.reagents.has_reagent(/datum/reagent/consumable/coffee) + if(drowsy) + sleep_chance = 1 + if(caffeinated) //make it real hard to fall asleep on caffeine + sleep_chance = sleep_chance / 2 + + if(!drowsy && SPT_PROB(sleep_chance, seconds_per_tick)) + to_chat(owner, span_warning("You feel tired...")) + owner.adjust_drowsiness(rand(30 SECONDS, 60 SECONDS)) + + else if(drowsy && SPT_PROB(sleep_chance, seconds_per_tick)) + to_chat(owner, span_warning("You fall asleep.")) + owner.Sleeping(rand(20 SECONDS, 30 SECONDS)) + +/obj/item/storage/pill_bottle/prescription_stimulant + name = "bottle of prescribed stimulant pills" + desc = "A bottle of mild and medicinally approved stimulants to help prevent drowsiness." + +/obj/item/storage/pill_bottle/prescription_stimulant/PopulateContents() + for(var/i in 1 to 5) + new /obj/item/reagent_containers/pill/prescription_stimulant(src) + +/obj/item/reagent_containers/pill/prescription_stimulant + name = "prescription stimulant pill" + desc = "Used to treat symptoms of drowsiness and sudden loss of consciousness. A warning label reads: Take in moderation." + list_reagents = list(/datum/reagent/consumable/sugar = 5, /datum/reagent/medicine/synaptizine = 5, /datum/reagent/medicine/modafinil = 3) + icon_state = "pill15" diff --git a/modular_nova/master_files/code/datums/quirks/negative_quirks/nerve_staple.dm b/modular_nova/master_files/code/datums/quirks/negative_quirks/nerve_staple.dm new file mode 100644 index 00000000000000..64bdb82dd30e45 --- /dev/null +++ b/modular_nova/master_files/code/datums/quirks/negative_quirks/nerve_staple.dm @@ -0,0 +1,23 @@ +/datum/quirk/equipping/nerve_staple + name = "Nerve Stapled" + desc = "You're a pacifist. Not because you want to be, but because of the device stapled into your eye." + value = -10 // pacifism = -8, losing eye slots = -2 + gain_text = span_danger("You suddenly can't raise a hand to hurt others!") + lose_text = span_notice("You think you can defend yourself again.") + medical_record_text = "Patient is nerve stapled and is unable to harm others." + icon = FA_ICON_FACE_ANGRY + forced_items = list(/obj/item/clothing/glasses/nerve_staple = list(ITEM_SLOT_EYES)) + /// The nerve staple attached to the quirk + var/obj/item/clothing/glasses/nerve_staple/staple + +/datum/quirk/equipping/nerve_staple/on_equip_item(obj/item/equipped, successful) + if (!istype(equipped, /obj/item/clothing/glasses/nerve_staple)) + return + staple = equipped + +/datum/quirk/equipping/nerve_staple/remove() + . = ..() + if (!staple || staple != quirk_holder.get_item_by_slot(ITEM_SLOT_EYES)) + return + to_chat(quirk_holder, span_warning("The nerve staple suddenly falls off your face and melts[istype(quirk_holder.loc, /turf/open/floor) ? " on the floor" : ""]!")) + qdel(staple) diff --git a/modular_nova/master_files/code/datums/quirks/neutral_quirks/equipping.dm b/modular_nova/master_files/code/datums/quirks/neutral_quirks/equipping.dm new file mode 100644 index 00000000000000..4f48ddd461058a --- /dev/null +++ b/modular_nova/master_files/code/datums/quirks/neutral_quirks/equipping.dm @@ -0,0 +1,51 @@ +/datum/quirk/equipping + abstract_parent_type = /datum/quirk/equipping + quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE + icon = FA_ICON_BOX_OPEN + /// the items that will be equipped, formatted in the way of [item_path = list of slots it can be equipped to], will not equip over nodrop items + var/list/items = list() + /// the items that will be forcefully equipped, formatted in the way of [item_path = list of slots it can be equipped to], will equip over nodrop items + var/list/forced_items = list() + +/datum/quirk/equipping/add_unique(client/client_source) + var/mob/living/carbon/carbon_holder = quirk_holder + if (!items || !carbon_holder) + return + var/list/equipped_items = list() + var/list/all_items = forced_items|items + for (var/obj/item/item_path as anything in all_items) + if (!ispath(item_path)) + continue + var/item = new item_path(carbon_holder.loc) + var/success = FALSE + // Checking for nodrop and seeing if there's an empty slot + for (var/slot as anything in all_items[item_path]) + success = force_equip_item(carbon_holder, item, slot, check_item = FALSE) + if (success) + break + // Checking for nodrop + for (var/slot as anything in all_items[item_path]) + success = force_equip_item(carbon_holder, item, slot) + if (success) + break + + if ((item_path in forced_items) && !success) + // Checking for nodrop failed, shove it into the first available slot, even if it has nodrop + for (var/slot as anything in all_items[item_path]) + success = force_equip_item(carbon_holder, item, slot, FALSE) + if (success) + break + equipped_items[item] = success + for (var/item as anything in equipped_items) + on_equip_item(item, equipped_items[item]) + +/datum/quirk/equipping/proc/force_equip_item(mob/living/carbon/target, obj/item/item, slot, check_nodrop = TRUE, check_item = TRUE) + var/obj/item/item_in_slot = target.get_item_by_slot(slot) + if (check_item && item_in_slot) + if (check_nodrop && HAS_TRAIT(item_in_slot, TRAIT_NODROP)) + return FALSE + target.dropItemToGround(item_in_slot, force = TRUE) + return target.equip_to_slot_if_possible(item, slot, disable_warning = TRUE) // this should never not work tbh + +/datum/quirk/equipping/proc/on_equip_item(obj/item/equipped, success) + return diff --git a/modular_nova/master_files/code/datums/quirks/neutral_quirks/lungs.dm b/modular_nova/master_files/code/datums/quirks/neutral_quirks/lungs.dm new file mode 100644 index 00000000000000..57247a3aa47cc2 --- /dev/null +++ b/modular_nova/master_files/code/datums/quirks/neutral_quirks/lungs.dm @@ -0,0 +1,89 @@ +/datum/quirk/equipping/lungs + abstract_parent_type = /datum/quirk/equipping/lungs + icon = FA_ICON_LUNGS + var/obj/item/organ/internal/lungs/lungs_holding + var/obj/item/organ/internal/lungs/lungs_added + var/lungs_typepath = /obj/item/organ/internal/lungs + items = list(/obj/item/clothing/accessory/breathing = list(ITEM_SLOT_BACKPACK)) + var/breath_type = "oxygen" + +/datum/quirk/equipping/lungs/add(client/client_source) + var/mob/living/carbon/human/carbon_holder = quirk_holder + if (!istype(carbon_holder) || !lungs_typepath) + return + var/current_lungs = carbon_holder.get_organ_slot(ORGAN_SLOT_LUNGS) + if (istype(current_lungs, lungs_typepath)) + return + lungs_holding = current_lungs + if(!isnull(lungs_holding)) + lungs_holding.organ_flags |= ORGAN_FROZEN // stop decay on the old lungs + lungs_added = new lungs_typepath + lungs_added.Insert(carbon_holder, special = TRUE) + if(!isnull(lungs_holding)) + lungs_holding.moveToNullspace() // save them for later + +/datum/quirk/equipping/lungs/remove() + var/mob/living/carbon/carbon_holder = quirk_holder + if (!istype(carbon_holder) || !istype(lungs_holding)) + return + var/obj/item/organ/internal/lungs/lungs = carbon_holder.get_organ_slot(ORGAN_SLOT_LUNGS) + if (lungs != lungs_added && lungs != lungs_holding) + qdel(lungs_holding) + return + lungs_holding.Insert(carbon_holder, special = TRUE, movement_flags = DELETE_IF_REPLACED) + lungs_holding.organ_flags &= ~ORGAN_FROZEN + +/datum/quirk/equipping/lungs/on_equip_item(obj/item/equipped, success) + var/mob/living/carbon/human/human_holder = quirk_holder + if (!istype(equipped, /obj/item/clothing/accessory/breathing)) + return + var/obj/item/clothing/accessory/breathing/acc = equipped + acc.breath_type = breath_type + if (acc.can_attach_accessory(human_holder?.w_uniform, human_holder)) + acc.attach(human_holder.w_uniform, human_holder) + +/obj/item/clothing/accessory/breathing + name = "breathing dogtag" + desc = "Dogtag that lists what you breathe." + icon_state = "allergy" + above_suit = FALSE + minimize_when_attached = TRUE + attachment_slot = CHEST + var/breath_type + +/obj/item/clothing/accessory/breathing/examine(mob/user) + . = ..() + . += "The dogtag reads: I breathe [breath_type]." + +/obj/item/clothing/accessory/breathing/accessory_equipped(obj/item/clothing/under/uniform, user) + . = ..() + RegisterSignal(uniform, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) + +/obj/item/clothing/accessory/breathing/accessory_dropped(obj/item/clothing/under/uniform, user) + . = ..() + UnregisterSignal(uniform, COMSIG_ATOM_EXAMINE) + +/obj/item/clothing/accessory/breathing/proc/on_examine(datum/source, mob/user, list/examine_list) + SIGNAL_HANDLER + examine_list += "The dogtag reads: I breathe [breath_type]." + +/datum/quirk/equipping/lungs/nitrogen + name = "Nitrogen Breather" + desc = "You breathe nitrogen, even if you might not normally breathe it. Oxygen is poisonous." + icon = FA_ICON_LUNGS_VIRUS + medical_record_text = "Patient can only breathe nitrogen." + gain_text = "You suddenly have a hard time breathing anything but nitrogen." + lose_text = "You suddenly feel like you aren't bound to nitrogen anymore." + value = 0 + forced_items = list( + /obj/item/clothing/mask/breath = list(ITEM_SLOT_MASK), + /obj/item/tank/internals/nitrogen/belt/full = list(ITEM_SLOT_HANDS, ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET)) + lungs_typepath = /obj/item/organ/internal/lungs/nitrogen + breath_type = "nitrogen" + +/datum/quirk/equipping/lungs/nitrogen/on_equip_item(obj/item/equipped, success) + . = ..() + var/mob/living/carbon/carbon_holder = quirk_holder + if (!success || !istype(carbon_holder) || !istype(equipped, /obj/item/tank/internals)) + return + carbon_holder.internal = equipped diff --git a/modular_skyrat/master_files/code/datums/records/record.dm b/modular_nova/master_files/code/datums/records/record.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/records/record.dm rename to modular_nova/master_files/code/datums/records/record.dm diff --git a/modular_nova/master_files/code/datums/station_traits/negative_traits.dm b/modular_nova/master_files/code/datums/station_traits/negative_traits.dm new file mode 100644 index 00000000000000..d3337b3f225a28 --- /dev/null +++ b/modular_nova/master_files/code/datums/station_traits/negative_traits.dm @@ -0,0 +1,8 @@ +/datum/station_trait/nebula/hostile/ + /// Radiation storms are disabled by default + var/storms_enabled + +/// Allows an admin to turn on/off the radiation storms. +/datum/station_trait/nebula/hostile/proc/toggle_storms() + storms_enabled = !storms_enabled + message_admins("Radiation storms have been [storms_enabled ? "enabled" : "disabled"]!") diff --git a/modular_skyrat/master_files/code/datums/storage/storage.dm b/modular_nova/master_files/code/datums/storage/storage.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/storage/storage.dm rename to modular_nova/master_files/code/datums/storage/storage.dm diff --git a/modular_skyrat/master_files/code/datums/storage/subtypes/pockets.dm b/modular_nova/master_files/code/datums/storage/subtypes/pockets.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/storage/subtypes/pockets.dm rename to modular_nova/master_files/code/datums/storage/subtypes/pockets.dm diff --git a/modular_skyrat/master_files/code/datums/traits/good.dm b/modular_nova/master_files/code/datums/traits/good.dm similarity index 83% rename from modular_skyrat/master_files/code/datums/traits/good.dm rename to modular_nova/master_files/code/datums/traits/good.dm index 08f265145a9ea5..aa71af7edeb464 100644 --- a/modular_skyrat/master_files/code/datums/traits/good.dm +++ b/modular_nova/master_files/code/datums/traits/good.dm @@ -14,7 +14,7 @@ name = "Linguist" desc = "You're a student of numerous languages and come with an additional language point." value = 4 - mob_trait = QUIRK_LINGUIST + mob_trait = TRAIT_LINGUIST gain_text = span_notice("Your brain seems more equipped to handle different modes of conversation.") lose_text = span_danger("Your grasp of the finer points of Draconic idioms fades away.") medical_record_text = "Patient demonstrates a high brain plasticity in regards to language learning." @@ -128,3 +128,42 @@ lose_text = span_danger("Somehow, you've completely cleaned yourself of glitter..") medical_record_text = "Patient seems to be looking fabulous." icon = FA_ICON_HAND_SPARKLES + +/datum/quirk/no_appendix + name = "Appendicitis Survivor" + desc = "You had a run in with appendicitis in the past and no longer have an appendix." + icon = FA_ICON_NOTES_MEDICAL + value = 2 + gain_text = span_notice("You no longer have an appendix.") + lose_text = span_danger("Your appendix has magically.. regrown?") + medical_record_text = "Patient had appendicitis in the past and has had their appendix surgically removed." + /// The mob's original appendix + var/obj/item/organ/internal/appendix/old_appendix + +/datum/quirk/no_appendix/post_add() + var/mob/living/carbon/carbon_quirk_holder = quirk_holder + old_appendix = carbon_quirk_holder.get_organ_slot(ORGAN_SLOT_APPENDIX) + + if(isnull(old_appendix)) + return + + old_appendix.Remove(carbon_quirk_holder, special = TRUE) + old_appendix.moveToNullspace() + + STOP_PROCESSING(SSobj, old_appendix) + +/datum/quirk/no_appendix/remove() + var/mob/living/carbon/carbon_quirk_holder = quirk_holder + + if(isnull(old_appendix)) + return + + var/obj/item/organ/internal/appendix/current_appendix = carbon_quirk_holder.get_organ_slot(ORGAN_SLOT_APPENDIX) + + // if we have not gained an appendix already, put the old one back + if(isnull(current_appendix)) + old_appendix.Insert(carbon_quirk_holder, special = TRUE) + else + qdel(old_appendix) + + old_appendix = null diff --git a/modular_skyrat/master_files/code/datums/traits/negative.dm b/modular_nova/master_files/code/datums/traits/negative.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/traits/negative.dm rename to modular_nova/master_files/code/datums/traits/negative.dm diff --git a/modular_nova/master_files/code/datums/traits/neutral.dm b/modular_nova/master_files/code/datums/traits/neutral.dm new file mode 100644 index 00000000000000..52adfb141a5dd9 --- /dev/null +++ b/modular_nova/master_files/code/datums/traits/neutral.dm @@ -0,0 +1,301 @@ +GLOBAL_VAR_INIT(DNR_trait_overlay, generate_DNR_trait_overlay()) + +/// Instantiates GLOB.DNR_trait_overlay by creating a new mutable_appearance instance of the overlay. +/proc/generate_DNR_trait_overlay() + RETURN_TYPE(/mutable_appearance) + + var/mutable_appearance/DNR_trait_overlay = mutable_appearance('modular_nova/modules/indicators/icons/DNR_trait_overlay.dmi', "DNR", FLY_LAYER) + DNR_trait_overlay.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA | KEEP_APART + return DNR_trait_overlay + + +// SKYRAT NEUTRAL TRAITS +/datum/quirk/excitable + name = "Excitable!" + desc = "Head patting makes your tail wag! You're very excitable! WAG WAG." + gain_text = span_notice("You crave for some headpats!") + lose_text = span_notice("You no longer care for headpats all that much.") + medical_record_text = "Patient seems to get excited easily." + value = 0 + mob_trait = TRAIT_EXCITABLE + icon = FA_ICON_LAUGH_BEAM + +/datum/quirk/affectionaversion + name = "Affection Aversion" + desc = "You refuse to be licked or nosed by quadruped cyborgs." + gain_text = span_notice("You've been added to the Do Not Lick and No Nosing registries.") + lose_text = span_notice("You've been removed from the Do Not Lick and No Nosing registries.") + medical_record_text = "Patient is in the Do Not Lick and No Nosing registries." + value = 0 + mob_trait = TRAIT_AFFECTION_AVERSION + icon = FA_ICON_CIRCLE_EXCLAMATION + +/datum/quirk/personalspace + name = "Personal Space" + desc = "You'd rather people keep their hands off your rear end." + gain_text = span_notice("You'd like it if people kept their hands off your butt.") + lose_text = span_notice("You're less concerned about people touching your butt.") + medical_record_text = "Patient demonstrates negative reactions to their posterior being touched." + value = 0 + mob_trait = TRAIT_PERSONALSPACE + icon = FA_ICON_HAND_PAPER + +/datum/quirk/dnr + name = "Do Not Revive" + desc = "For whatever reason, you cannot be revived in any way." + gain_text = span_notice("Your spirit gets too scarred to accept revival.") + lose_text = span_notice("You can feel your soul healing again.") + medical_record_text = "Patient is a DNR, and cannot be revived in any way." + value = 0 + mob_trait = TRAIT_DNR + icon = FA_ICON_SKULL_CROSSBONES + +/datum/quirk/dnr/add(client/client_source) + . = ..() + + quirk_holder.update_dnr_hud() + +/datum/quirk/dnr/remove() + var/mob/living/old_holder = quirk_holder + + . = ..() + + old_holder.update_dnr_hud() + +/mob/living/prepare_data_huds() + . = ..() + + update_dnr_hud() + +/// Adds the DNR HUD element if src has TRAIT_DNR. Removes it otherwise. +/mob/living/proc/update_dnr_hud() + var/image/dnr_holder = hud_list?[DNR_HUD] + if(isnull(dnr_holder)) + return + + var/icon/temporary_icon = icon(icon, icon_state, dir) + dnr_holder.pixel_y = temporary_icon.Height() - world.icon_size + + if(HAS_TRAIT(src, TRAIT_DNR)) + set_hud_image_active(DNR_HUD) + dnr_holder.icon_state = "hud_dnr" + else + set_hud_image_inactive(DNR_HUD) + +/mob/living/carbon/human/examine(mob/user) + . = ..() + + if(stat != DEAD && HAS_TRAIT(src, TRAIT_DNR) && (HAS_TRAIT(user, TRAIT_SECURITY_HUD) || HAS_TRAIT(user, TRAIT_MEDICAL_HUD))) + . += "\n[span_boldwarning("This individual is unable to be revived, and may be permanently dead if allowed to die!")]" + +/datum/atom_hud/data/human/dnr + hud_icons = list(DNR_HUD) + +// uncontrollable laughter +/datum/quirk/item_quirk/joker + name = "Pseudobulbar Affect" + desc = "At random intervals, you suffer uncontrollable bursts of laughter." + value = 0 + quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_PROCESSES + medical_record_text = "Patient suffers with sudden and uncontrollable bursts of laughter." + var/pcooldown = 0 + var/pcooldown_time = 60 SECONDS + icon = FA_ICON_GRIN_TEARS + +/datum/quirk/item_quirk/joker/add_unique(client/client_source) + give_item_to_holder(/obj/item/paper/joker, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) + +/datum/quirk/item_quirk/joker/process() + if(pcooldown > world.time) + return + pcooldown = world.time + pcooldown_time + var/mob/living/carbon/human/user = quirk_holder + if(user && istype(user)) + if(user.stat == CONSCIOUS) + if(prob(20)) + user.emote("laugh") + addtimer(CALLBACK(user, /mob/proc/emote, "laugh"), 5 SECONDS) + addtimer(CALLBACK(user, /mob/proc/emote, "laugh"), 10 SECONDS) + +/obj/item/paper/joker + name = "disability card" + icon = 'modular_nova/master_files/icons/obj/card.dmi' + icon_state = "joker" + desc = "Smile, though your heart is aching." + default_raw_text = "\ +

    \ +
    \ + Forgive my laughter:
    \ + I have a condition.\ +
    \ +
    \ + \ +
    \ +
    \ + \ + MORE ON BACK\ + \ +
    " + /// Whether or not the card is currently flipped. + var/flipped = FALSE + /// The flipped version of default_raw_text. + var/flipside_default_raw_text = "\ +
    \ +
    \ + \ + It's a medical condition causing sudden,
    \ + frequent and uncontrollable laughter that
    \ + doesn't match how you feel.
    \ + It can happen in people with a brain injury
    \ + or certain neurological conditions.
    \ +
    \ +
    \ +
    \ +
    \ +
    \ +
    \ + \ + KINDLY RETURN THIS CARD\ + \ +
    " + /// Flipside version of raw_text_inputs. + var/list/datum/paper_input/flipside_raw_text_inputs + /// Flipside version of raw_stamp_data. + var/list/datum/paper_stamp/flipside_raw_stamp_data + /// Flipside version of raw_field_input_data. + var/list/datum/paper_field/flipside_raw_field_input_data + /// Flipside version of input_field_count + var/flipside_input_field_count = 0 + + +/obj/item/paper/joker/Initialize(mapload) + . = ..() + if(flipside_default_raw_text) + add_flipside_raw_text(flipside_default_raw_text) + + +/** + * This is an unironic copy-paste of add_raw_text(), meant to have the same functionalities, but for the flipside. + * + * This simple helper adds the supplied raw text to the flipside of the paper, appending to the end of any existing contents. + * + * This a God proc that does not care about paper max length and expects sanity checking beforehand if you want to respect it. + * + * The caller is expected to handle updating icons and appearance after adding text, to allow for more efficient batch adding loops. + * * Arguments: + * * text - The text to append to the paper. + * * font - The font to use. + * * color - The font color to use. + * * bold - Whether this text should be rendered completely bold. + */ +/obj/item/paper/joker/proc/add_flipside_raw_text(text, font, color, bold) + var/new_input_datum = new /datum/paper_input( + text, + font, + color, + bold, + ) + + flipside_input_field_count += get_input_field_count(text) + + LAZYADD(flipside_raw_text_inputs, new_input_datum) + + +/obj/item/paper/joker/update_icon() + ..() + icon_state = "joker" + +/obj/item/paper/joker/AltClick(mob/living/carbon/user, obj/item/card) + var/list/datum/paper_input/old_raw_text_inputs = raw_text_inputs + var/list/datum/paper_stamp/old_raw_stamp_data = raw_stamp_data + var/list/datum/paper_stamp/old_raw_field_input_data = raw_field_input_data + var/old_input_field_count = input_field_count + + raw_text_inputs = flipside_raw_text_inputs + raw_stamp_data = flipside_raw_stamp_data + raw_field_input_data = flipside_raw_field_input_data + input_field_count = flipside_input_field_count + + flipside_raw_text_inputs = old_raw_text_inputs + flipside_raw_stamp_data = old_raw_stamp_data + flipside_raw_field_input_data = old_raw_field_input_data + flipside_input_field_count = old_input_field_count + + flipped = !flipped + update_static_data() + + balloon_alert(user, "card flipped") + +/datum/quirk/feline_aspect + name = "Feline Traits" + desc = "You happen to act like a feline, for whatever reason." + gain_text = span_notice("Nya could go for some catnip right about now...") + lose_text = span_notice("You feel less attracted to lasers.") + medical_record_text = "Patient seems to possess behavior much like a feline." + mob_trait = TRAIT_FELINE + icon = FA_ICON_CAT + +/datum/quirk/item_quirk/canine + name = "Canidae Traits" + desc = "Bark. You seem to act like a canine for whatever reason. This will replace most other tongue-based speech quirks." + mob_trait = TRAIT_CANINE + icon = FA_ICON_DOG + value = 0 + medical_record_text = "Patient was seen digging through the trash can. Keep an eye on them." + +/datum/quirk/item_quirk/canine/add_unique(client/client_source) + var/mob/living/carbon/human/human_holder = quirk_holder + var/obj/item/organ/internal/tongue/dog/new_tongue = new(get_turf(human_holder)) + + new_tongue.copy_traits_from(human_holder.get_organ_slot(ORGAN_SLOT_TONGUE)) + new_tongue.Insert(human_holder, special = TRUE, movement_flags = DELETE_IF_REPLACED) + +/datum/quirk/item_quirk/avian + name = "Avian Traits" + desc = "You're a birdbrain, or you've got a bird's brain. This will replace most other tongue-based speech quirks." + mob_trait = TRAIT_AVIAN + icon = FA_ICON_KIWI_BIRD + value = 0 + medical_record_text = "Patient exhibits avian-adjacent mannerisms." + +/datum/quirk/item_quirk/avian/add_unique(client/client_source) + var/mob/living/carbon/human/human_holder = quirk_holder + var/obj/item/organ/internal/tongue/avian/new_tongue = new(get_turf(human_holder)) + + new_tongue.copy_traits_from(human_holder.get_organ_slot(ORGAN_SLOT_TONGUE)) + new_tongue.Insert(human_holder, special = TRUE, movement_flags = DELETE_IF_REPLACED) + +/datum/quirk/sensitivesnout + name = "Sensitive Snout" + desc = "Your face has always been sensitive, and it really hurts when someone pokes it!" + gain_text = span_notice("Your face is awfully sensitive.") + lose_text = span_notice("Your face feels numb.") + medical_record_text = "Patient's nose seems to have a cluster of nerves in the tip, would advise against direct contact." + value = 0 + mob_trait = TRAIT_SENSITIVESNOUT + icon = FA_ICON_FINGERPRINT + +/datum/quirk/overweight + name = "Overweight" + desc = "You weigh more than an average person at your size, you've gotten used to it by now." + gain_text = span_notice("Your body feels heavy.") + lose_text = span_notice("Your suddenly feel lighter!") + value = 0 + icon = FA_ICON_HAMBURGER // I'm very hungry. Give me the burger! + medical_record_text = "Patient weighs higher than average." + mob_trait = TRAIT_FAT + +/datum/quirk/overweight/add(client/client_source) + quirk_holder.add_movespeed_modifier(/datum/movespeed_modifier/overweight) + +/datum/quirk/overweight/remove() + quirk_holder.remove_movespeed_modifier(/datum/movespeed_modifier/overweight) + +/datum/movespeed_modifier/overweight + multiplicative_slowdown = 0.5 //Around that of a dufflebag, enough to be impactful but not debilitating. + +/datum/mood_event/fat/New(mob/parent_mob, ...) + . = ..() + if(HAS_TRAIT_FROM(parent_mob, TRAIT_FAT, QUIRK_TRAIT)) + mood_change = 0 // They are probably used to it, no reason to be viscerally upset about it. + description = "I'm fat." diff --git a/modular_skyrat/master_files/code/datums/votes/_vote_datum.dm b/modular_nova/master_files/code/datums/votes/_vote_datum.dm similarity index 100% rename from modular_skyrat/master_files/code/datums/votes/_vote_datum.dm rename to modular_nova/master_files/code/datums/votes/_vote_datum.dm diff --git a/modular_nova/master_files/code/datums/votes/map_vote.dm b/modular_nova/master_files/code/datums/votes/map_vote.dm new file mode 100644 index 00000000000000..10dea54b2fd8cc --- /dev/null +++ b/modular_nova/master_files/code/datums/votes/map_vote.dm @@ -0,0 +1,3 @@ +//Map votes shouldn't be using weighted random +/datum/vote/map_vote + winner_method = VOTE_WINNER_METHOD_SIMPLE diff --git a/modular_nova/master_files/code/game/area/areas/ruins/lavaland.dm b/modular_nova/master_files/code/game/area/areas/ruins/lavaland.dm new file mode 100644 index 00000000000000..178897c57d4b09 --- /dev/null +++ b/modular_nova/master_files/code/game/area/areas/ruins/lavaland.dm @@ -0,0 +1,146 @@ +// Lavaland Ruins +// NOTICE: /unpowered means you never get power. Thanks Fikou! + +// Interdyne planetary base + +/area/ruin/interdyne_planetary_base // used as parent type and for turret control + name = "Interdyne Pharmaceuticals Spinward Sector Base" + icon = 'icons/area/areas_centcom.dmi' + icon_state = "syndie-control" + ambience_index = AMBIENCE_DANGER + ambient_buzz = 'sound/ambience/magma.ogg' + area_flags = UNIQUE_AREA | BLOBS_ALLOWED + +/area/ruin/interdyne_planetary_base/Initialize(mapload) + if(!ambientsounds) + ambientsounds = GLOB.ambience_assoc[ambience_index] + ambientsounds += 'sound/ambience/ambiicemelody2.ogg' + return ..() + +/area/ruin/interdyne_planetary_base/cargo + name = "Interdyne Cargo Bay" + icon = 'icons/area/areas_station.dmi' + icon_state = "mining" + +/area/ruin/interdyne_planetary_base/cargo/deck + name = "Interdyne Deck Officer's Office" + icon_state = "qm_office" + sound_environment = SOUND_AREA_SMALL_SOFTFLOOR + +/area/ruin/interdyne_planetary_base/cargo/ware + name = "Interdyne Warehouse" + icon_state = "cargo_warehouse" + +/area/ruin/interdyne_planetary_base/cargo/obs + name = "Interdyne Observation Center" + icon = 'icons/area/areas_centcom.dmi' + icon_state = "observatory" + ambience_index = AMBIENCE_DANGER + +/area/ruin/interdyne_planetary_base/cargo/obs/Initialize(mapload) + if(!ambientsounds) + ambientsounds = GLOB.ambience_assoc[ambience_index] + ambientsounds += list( + 'modular_nova/modules/encounters/sounds/morse.ogg', + 'sound/ambience/ambitech.ogg', + 'sound/ambience/signal.ogg', + 'modular_nova/modules/encounters/sounds/morse.ogg', + ) + return ..() + +/area/ruin/interdyne_planetary_base/main + name = "Interdyne Main Hall" + icon = 'icons/area/areas_station.dmi' + icon_state = "hall" + +/area/ruin/interdyne_planetary_base/main/vault + name = "Interdyne Vault" + icon = 'icons/area/areas_centcom.dmi' + icon_state = "syndie-control" + +/area/ruin/interdyne_planetary_base/main/dorms + name = "Interdyne Dormitories" + icon_state = "crew_quarters" + +/area/ruin/interdyne_planetary_base/main/dorms/lib + name = "Interdyne Library" + icon_state = "library" + mood_bonus = 5 + mood_message = "I love being in the base's library!" + mood_trait = TRAIT_INTROVERT + sound_environment = SOUND_AREA_WOODFLOOR + +/area/ruin/interdyne_planetary_base/med + name = "Interdyne Medical Wing" + icon = 'icons/area/areas_station.dmi' + icon_state = "medbay" + ambience_index = AMBIENCE_MEDICAL + +/area/ruin/interdyne_planetary_base/med/pharm + name = "Interdyne Pharmacy" + icon_state = "pharmacy" + +/area/ruin/interdyne_planetary_base/med/viro + name = "Interdyne Virological Lab" + icon_state = "virology" + ambience_index = AMBIENCE_VIROLOGY + +/area/ruin/interdyne_planetary_base/med/morgue + name = "Interdyne Morgue" + icon_state = "morgue" + ambience_index = AMBIENCE_SPOOKY + ambientsounds = list('sound/ambience/ambiicemelody4.ogg') // creepy, but a bit wistful + sound_environment = SOUND_AREA_SMALL_ENCLOSED + +/area/ruin/interdyne_planetary_base/science + name = "Interdyne Science Wing" + icon = 'icons/area/areas_station.dmi' + icon_state = "science" + +/area/ruin/interdyne_planetary_base/science/xeno + name = "Interdyne Xenobiological Lab" + icon_state = "xenobio" + +/area/ruin/interdyne_planetary_base/serv + name = "Interdyne Service Wing" + icon = 'icons/area/areas_station.dmi' + icon_state = "hall_service" + +/area/ruin/interdyne_planetary_base/serv/rstrm + name = "Interdyne Unisex Restrooms" + icon_state = "toilet" + +/area/ruin/interdyne_planetary_base/serv/bar + name = "Interdyne Bar" + icon_state = "bar" + mood_bonus = 5 + mood_message = "I love being in the base's bar!" + mood_trait = TRAIT_EXTROVERT + +/area/ruin/interdyne_planetary_base/serv/kitchen + name = "Interdyne Kitchen" + icon_state = "kitchen" + +/area/ruin/interdyne_planetary_base/serv/hydr + name = "Interdyne Hydroponics" + icon_state = "hydro" + +/area/ruin/interdyne_planetary_base/eng + name = "Interdyne Engineering" + icon = 'icons/area/areas_station.dmi' + icon_state = "maint_electrical" // given interdyne's powerplant is rtg's, thought this looked good on the frontend for mappers + ambient_buzz = 'modular_nova/modules/encounters/sounds/gear_loop.ogg' + +/area/ruin/interdyne_planetary_base/eng/Initialize(mapload) + if(!ambientsounds) + ambientsounds = GLOB.ambience_assoc[ambience_index] + ambientsounds += list( + 'sound/items/geiger/low1.ogg', + 'sound/items/geiger/low2.ogg', + ) + return ..() + +/area/ruin/interdyne_planetary_base/eng/disp + name = "Interdyne Disposals" + icon_state = "disposal" + sound_environment = SOUND_AREA_SMALL_ENCLOSED diff --git a/modular_nova/master_files/code/game/atoms.dm b/modular_nova/master_files/code/game/atoms.dm new file mode 100644 index 00000000000000..0c7510d5b89776 --- /dev/null +++ b/modular_nova/master_files/code/game/atoms.dm @@ -0,0 +1,18 @@ +// Stop All Animations nulls the mob's transform, so we have to call update_body_size to ensure that it gets scaled properly again +/atom/vv_do_topic(list/href_list) + . = ..() + if(href_list[VV_HK_STOP_ALL_ANIMATIONS] && check_rights(R_VAREDIT)) + var/mob/living/carbon/human/human_mob = src + if(!istype(human_mob)) + return + + human_mob.dna.current_body_size = BODY_SIZE_NORMAL // because if we don't set this, update_body_size will think that it has no work to do. + human_mob.dna.update_body_size() + +/// Called after a loadout item gets custom named +/atom/proc/on_loadout_custom_named() + return + +/// Called after a loadout item gets a custom description +/atom/proc/on_loadout_custom_described() + return diff --git a/modular_skyrat/master_files/code/game/effects/spawners/random/structure.dm b/modular_nova/master_files/code/game/effects/spawners/random/structure.dm similarity index 100% rename from modular_skyrat/master_files/code/game/effects/spawners/random/structure.dm rename to modular_nova/master_files/code/game/effects/spawners/random/structure.dm diff --git a/modular_nova/master_files/code/game/gamemodes/dynamic.dm b/modular_nova/master_files/code/game/gamemodes/dynamic.dm new file mode 100644 index 00000000000000..3776c016ece0b1 --- /dev/null +++ b/modular_nova/master_files/code/game/gamemodes/dynamic.dm @@ -0,0 +1,78 @@ +#define MIN_MIDROUND_COST 20 +#define ALT_MIDROUND_LOWER_TIME 4500 +#define ALT_MIDROUND_UPPER_TIME 10500 + +// A lite version of the intercept, which only sends a paper with goals and a trait report (or a lack thereof) +/datum/controller/subsystem/dynamic/proc/send_trait_report() + . = "Central Command Status Summary
    " + + var/greenshift = GLOB.dynamic_forced_extended || (threat_level < MIN_MIDROUND_COST && shown_threat < MIN_MIDROUND_COST) // if both shown and real threat are below any ruleset, its greenshift time + generate_station_goals(greenshift ? INFINITY : CONFIG_GET(number/station_goal_budget)) + + if(GLOB.station_goals.len > 0) + . = "
    No assigned goals.
    " + else + var/list/texts = list("
    Special Orders for [station_name()]:
    ") + for(var/datum/station_goal/station_goal as anything in GLOB.station_goals) + station_goal.on_report() + texts += station_goal.get_report() + + . += texts.Join("
    ") + if(!SSstation.station_traits.len) + . = "
    No identified shift divergencies.
    " + else + var/list/trait_list_strings = list() + for(var/datum/station_trait/station_trait as anything in SSstation.station_traits) + if(!station_trait.show_in_report) + continue + trait_list_strings += "[station_trait.get_report()]
    " + if(trait_list_strings.len > 0) + . += "
    Identified shift divergencies:
    " + trait_list_strings.Join() + + . += "
    This concludes your shift-start evaluation. Have a secure shift!
    \ +

    This label certifies an Intern has reviewed the above before sending. This document is the property of Nanotrasen Corporation.

    " + + print_command_report(., "Central Command Status Summary", announce = FALSE) + priority_announce("Hello, crew of [station_name()]. Our intern has finished their shift-start divergency and goals evaluation, which has been sent to your communications console. Have a secure shift!", "Divergency Report", SSstation.announcer.get_rand_report_sound()) + +/datum/controller/subsystem/dynamic + /// Desired median point for midrounds, plus or minus the midround_roll_distance. + var/midround_median_frequency = 36000 + +/// Divides threat budget based on the server config +/datum/controller/subsystem/dynamic/generate_budgets() + if(CONFIG_GET(flag/split_threat_budget)) + return ..() + + round_start_budget = 0 + initial_round_start_budget = 0 + mid_round_budget = threat_level + +/// Gets the chance for a heavy ruleset midround injection, the dry_run argument is only used for forced injection. +/datum/controller/subsystem/dynamic/get_heavy_midround_injection_chance(dry_run) + var/next_midround_roll = next_midround_injection() - SSticker.round_start_time + + var/heavy_coefficient = CLAMP01((next_midround_roll - midround_light_upper_bound) / (midround_heavy_lower_bound - midround_light_upper_bound)) + + return 100 * heavy_coefficient + +/// Determines the next midround injection attempt based on the set median and roll distance. +/datum/controller/subsystem/dynamic/next_midround_injection() + if(!isnull(next_midround_injection)) + return next_midround_injection + + if(last_midround_injection_attempt == 0) + last_midround_injection_attempt = SSticker.round_start_time + + next_midround_injection = last_midround_injection_attempt + rand((midround_median_frequency - midround_roll_distance), (midround_median_frequency + midround_roll_distance)) + + return next_midround_injection + +/// If a midround injection fails to run, this can be called by the particular rule (if required) to attempt an alternate. +/datum/controller/subsystem/dynamic/proc/alternate_midround_injection() + next_midround_injection = world.time + rand(ALT_MIDROUND_LOWER_TIME, ALT_MIDROUND_UPPER_TIME) + log_dynamic_and_announce("Alternate midround injection in [DisplayTimeText(next_midround_injection - world.time)]") + +#undef MIN_MIDROUND_COST +#undef ALT_MIDROUND_LOWER_TIME +#undef ALT_MIDROUND_UPPER_TIME diff --git a/modular_nova/master_files/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/modular_nova/master_files/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm new file mode 100644 index 00000000000000..1310c8bd49c1b9 --- /dev/null +++ b/modular_nova/master_files/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -0,0 +1,3 @@ +/// Fired when there are no valid candidates. Try another roll after a delay. +/datum/dynamic_ruleset/midround/from_ghosts/attempt_replacement() + SSdynamic.alternate_midround_injection() diff --git a/modular_skyrat/master_files/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/modular_nova/master_files/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm similarity index 100% rename from modular_skyrat/master_files/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm rename to modular_nova/master_files/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm diff --git a/modular_skyrat/master_files/code/game/gamemodes/objective.dm b/modular_nova/master_files/code/game/gamemodes/objective.dm similarity index 100% rename from modular_skyrat/master_files/code/game/gamemodes/objective.dm rename to modular_nova/master_files/code/game/gamemodes/objective.dm diff --git a/modular_nova/master_files/code/game/machinery/deployable.dm b/modular_nova/master_files/code/game/machinery/deployable.dm new file mode 100644 index 00000000000000..f44f5d517965a9 --- /dev/null +++ b/modular_nova/master_files/code/game/machinery/deployable.dm @@ -0,0 +1,3 @@ +/obj/structure/barricade/sandbags/Initialize(mapload) + . = ..() + AddElement(/datum/element/liquids_height, 20) diff --git a/modular_nova/master_files/code/game/machinery/doors/firedoor.dm b/modular_nova/master_files/code/game/machinery/doors/firedoor.dm new file mode 100644 index 00000000000000..a05589daf998a1 --- /dev/null +++ b/modular_nova/master_files/code/game/machinery/doors/firedoor.dm @@ -0,0 +1,45 @@ +/obj/machinery/door/firedoor/AltClick(mob/user) + . = ..() + if(!user.can_perform_action(src)) + return + try_manual_override(user) + +/obj/machinery/door/firedoor/examine(mob/user) + . = ..() + . += span_notice("Alt-click the door to use the manual override.") + +/obj/machinery/door/proc/try_manual_override(mob/user) + if(density && !welded && !operating) + balloon_alert(user, "opening...") + if(do_after(user, 10 SECONDS, target = src)) + try_to_crowbar(null, user) + return TRUE + return FALSE + +/obj/machinery/door/firedoor/try_to_crowbar(obj/item/used_object, mob/user) + if(welded || operating) + balloon_alert(user, "opening failed!") + return + + if(density) + open() + else + close() + +/obj/machinery/door/firedoor/heavy/closed + icon_state = "door_closed" + density = TRUE + alarm_type = FIRELOCK_ALARM_TYPE_GENERIC + +/obj/machinery/door/firedoor/solid + name = "solid emergency shutter" + desc = "Emergency air-tight shutter, capable of sealing off breached areas. It has a mechanism to open it with just your hands." + icon = 'modular_nova/modules/aesthetics/firedoor/icons/firedoor.dmi' + glass = FALSE + +/obj/machinery/door/firedoor/solid/closed + icon_state = "door_closed" + density = TRUE + opacity = TRUE + alarm_type = FIRELOCK_ALARM_TYPE_GENERIC + diff --git a/modular_skyrat/master_files/code/game/machinery/hologram.dm b/modular_nova/master_files/code/game/machinery/hologram.dm similarity index 100% rename from modular_skyrat/master_files/code/game/machinery/hologram.dm rename to modular_nova/master_files/code/game/machinery/hologram.dm diff --git a/modular_nova/master_files/code/game/machinery/limbgrower.dm b/modular_nova/master_files/code/game/machinery/limbgrower.dm new file mode 100644 index 00000000000000..edf0474bfa077e --- /dev/null +++ b/modular_nova/master_files/code/game/machinery/limbgrower.dm @@ -0,0 +1,3 @@ +/obj/machinery/limbgrower/Initialize(mapload) + categories += list(SPECIES_SNAIL) + return ..() diff --git a/modular_skyrat/master_files/code/game/machinery/suit_storage.dm b/modular_nova/master_files/code/game/machinery/suit_storage.dm similarity index 100% rename from modular_skyrat/master_files/code/game/machinery/suit_storage.dm rename to modular_nova/master_files/code/game/machinery/suit_storage.dm diff --git a/modular_skyrat/master_files/code/game/objects/effects/decals/cleanable/humans.dm b/modular_nova/master_files/code/game/objects/effects/decals/cleanable/humans.dm similarity index 100% rename from modular_skyrat/master_files/code/game/objects/effects/decals/cleanable/humans.dm rename to modular_nova/master_files/code/game/objects/effects/decals/cleanable/humans.dm diff --git a/modular_skyrat/master_files/code/game/objects/effects/decals/cleanable/misc.dm b/modular_nova/master_files/code/game/objects/effects/decals/cleanable/misc.dm similarity index 100% rename from modular_skyrat/master_files/code/game/objects/effects/decals/cleanable/misc.dm rename to modular_nova/master_files/code/game/objects/effects/decals/cleanable/misc.dm diff --git a/modular_skyrat/master_files/code/game/objects/effects/decals/remains.dm b/modular_nova/master_files/code/game/objects/effects/decals/remains.dm similarity index 100% rename from modular_skyrat/master_files/code/game/objects/effects/decals/remains.dm rename to modular_nova/master_files/code/game/objects/effects/decals/remains.dm diff --git a/modular_skyrat/master_files/code/game/objects/effects/decals/turfdecals/markings.dm b/modular_nova/master_files/code/game/objects/effects/decals/turfdecals/markings.dm similarity index 100% rename from modular_skyrat/master_files/code/game/objects/effects/decals/turfdecals/markings.dm rename to modular_nova/master_files/code/game/objects/effects/decals/turfdecals/markings.dm diff --git a/modular_skyrat/master_files/code/game/objects/effects/decals/turfdecals/tilecoloring.dm b/modular_nova/master_files/code/game/objects/effects/decals/turfdecals/tilecoloring.dm similarity index 99% rename from modular_skyrat/master_files/code/game/objects/effects/decals/turfdecals/tilecoloring.dm rename to modular_nova/master_files/code/game/objects/effects/decals/turfdecals/tilecoloring.dm index 4b49d74f431b8e..480f9eaf38026f 100644 --- a/modular_skyrat/master_files/code/game/objects/effects/decals/turfdecals/tilecoloring.dm +++ b/modular_nova/master_files/code/game/objects/effects/decals/turfdecals/tilecoloring.dm @@ -99,4 +99,4 @@ /obj/effect/turf_decal/trimline/red/real_red/filled/shrink_ccw icon_state = "trimline_shrink_ccw" -// Skyrat Edit: End +// NOVA EDIT: End diff --git a/modular_skyrat/master_files/code/game/objects/items.dm b/modular_nova/master_files/code/game/objects/items.dm similarity index 100% rename from modular_skyrat/master_files/code/game/objects/items.dm rename to modular_nova/master_files/code/game/objects/items.dm diff --git a/modular_skyrat/master_files/code/game/objects/items/AI_modules.dm b/modular_nova/master_files/code/game/objects/items/AI_modules.dm similarity index 100% rename from modular_skyrat/master_files/code/game/objects/items/AI_modules.dm rename to modular_nova/master_files/code/game/objects/items/AI_modules.dm diff --git a/modular_skyrat/master_files/code/game/objects/items/RCD.dm b/modular_nova/master_files/code/game/objects/items/RCD.dm similarity index 97% rename from modular_skyrat/master_files/code/game/objects/items/RCD.dm rename to modular_nova/master_files/code/game/objects/items/RCD.dm index 87606cd147ede4..1eef52a792416b 100644 --- a/modular_skyrat/master_files/code/game/objects/items/RCD.dm +++ b/modular_nova/master_files/code/game/objects/items/RCD.dm @@ -1,7 +1,7 @@ /obj/item/construction/rcd/arcd/mattermanipulator name = "matter manipulator" desc = "A strange, familiar yet distinctly different analogue to the Nanotrasen standard RCD. Works at range, and can deconstruct reinforced walls. Reload using metal, glass, or plasteel." - icon = 'modular_skyrat/master_files/icons/obj/tools.dmi' + icon = 'modular_nova/master_files/icons/obj/tools.dmi' icon_state = "rcd" worn_icon_state = "RCD" ranged = TRUE diff --git a/modular_nova/master_files/code/game/objects/items/cards_ids.dm b/modular_nova/master_files/code/game/objects/items/cards_ids.dm new file mode 100644 index 00000000000000..3ca1380d481b0b --- /dev/null +++ b/modular_nova/master_files/code/game/objects/items/cards_ids.dm @@ -0,0 +1,33 @@ +// GENERIC +/obj/item/card/id/advanced/silver/generic + name = "generic silver identification card" + icon = 'modular_nova/master_files/icons/obj/card.dmi' + icon_state = "card_silvergen" + assigned_icon_state = null + +/obj/item/card/id/advanced/gold/generic + name = "generic gold identification card" + icon = 'modular_nova/master_files/icons/obj/card.dmi' + icon_state = "card_goldgen" + assigned_icon_state = null + +// Interdyne (Deck Officer's) +/obj/item/card/id/advanced/chameleon/black/silver + name = "silver identification card" + desc = "A silver card which shows honour and dedication." + icon_state = "card_silver" + inhand_icon_state = "silver_id" + assigned_icon_state = "assigned_silver" + +// DS2 +/obj/item/card/id/advanced/prisoner/ds2 + name = "syndicate prisoner card" + icon = 'modular_nova/master_files/icons/obj/card.dmi' + icon_state = "card_ds2prisoner" + +// SOLFED +/obj/item/card/id/advanced/solfed + name = "solfed identification card" + icon = 'modular_nova/master_files/icons/obj/card.dmi' + icon_state = "card_solfed" + assigned_icon_state = "assigned_solfed" diff --git a/modular_nova/master_files/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm b/modular_nova/master_files/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm new file mode 100644 index 00000000000000..8cc6cdaa7995af --- /dev/null +++ b/modular_nova/master_files/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm @@ -0,0 +1,29 @@ +/obj/item/circuitboard/machine/skill_station + var/static/list/skillsofts_name_paths = list( + /obj/machinery/skill_station = "glass", + /obj/machinery/skill_station/plasmaglass = "plasmaglass", + ) + needs_anchored = FALSE + var/is_special_type = FALSE + +/obj/item/circuitboard/machine/skill_station/apply_default_parts(obj/machinery/skill_station/skill_station) + build_path = skill_station.base_build_path + if(!skillsofts_name_paths.Find(build_path)) + name = "[initial(skill_station.name)]" //if it's a unique type, give it a unique name. + is_special_type = TRUE + return ..() + +/obj/item/circuitboard/machine/skill_station/screwdriver_act(mob/living/user, obj/item/tool) + if (is_special_type) + return FALSE + var/position = skillsofts_name_paths.Find(build_path, skillsofts_name_paths) + position = (position == length(skillsofts_name_paths)) ? 1 : (position + 1) + build_path = skillsofts_name_paths[position] + to_chat(user, span_notice("You register [skillsofts_name_paths[build_path]] chamber material with the board.")) + return TRUE + +/obj/item/circuitboard/machine/skill_station/examine(mob/user) + . = ..() + if(is_special_type) + return + . += span_info("[src] is registered for [skillsofts_name_paths[build_path]] chamber material. You can use a screwdriver to reconfigure it.") diff --git a/modular_nova/master_files/code/game/objects/items/devices/chameleonproj.dm b/modular_nova/master_files/code/game/objects/items/devices/chameleonproj.dm new file mode 100644 index 00000000000000..32ec8148970f70 --- /dev/null +++ b/modular_nova/master_files/code/game/objects/items/devices/chameleonproj.dm @@ -0,0 +1,5 @@ +/obj/item/chameleon + name = "clandestine device" + desc = "A vaguely insidious device with a scanner and large projector." + special_desc_requirement = EXAMINE_CHECK_SYNDICATE + special_desc = "A hardlight projector used to seamlessly camouflage Syndicate infiltrators to appear as whatever the scanner touches." diff --git a/modular_nova/master_files/code/game/objects/items/devices/laserpointer.dm b/modular_nova/master_files/code/game/objects/items/devices/laserpointer.dm new file mode 100644 index 00000000000000..d9ec81f7098744 --- /dev/null +++ b/modular_nova/master_files/code/game/objects/items/devices/laserpointer.dm @@ -0,0 +1,37 @@ +/obj/item/laser_pointer + //Whether the laser pointer is capable of receiving upgrades + var/upgradable = TRUE + +/obj/item/laser_pointer/limited + //limited laser pointers cannot receive upgrades, mostly used in loadout + upgradable = FALSE + +/obj/item/laser_pointer/limited/red + pointer_icon_state = "red_laser" + +/obj/item/laser_pointer/limited/green + pointer_icon_state = "green_laser" + +/obj/item/laser_pointer/limited/blue + pointer_icon_state = "blue_laser" + +/obj/item/laser_pointer/limited/purple + pointer_icon_state = "purple_laser" + +/obj/item/laser_pointer/screwdriver_act(mob/living/user, obj/item/tool) + if(!upgradable) + balloon_alert(user, "can't remove integrated diode!") + return + return ..() + +/obj/item/laser_pointer/attackby(obj/item/attack_item, mob/user, params) + if(istype(attack_item, /obj/item/stock_parts/micro_laser) || istype(attack_item, /obj/item/stack/ore/bluespace_crystal)) + if(!upgradable) + balloon_alert(user, "can't upgrade integrated parts!") + return + return ..() + +/obj/item/laser_pointer/examine(mob/user) + . = ..() + if(!upgradable) + . += span_notice("The diode and the lens are both cheap, integrated components. This pointer cannot be upgraded.") diff --git a/modular_nova/master_files/code/game/objects/items/devices/mod_link.dm b/modular_nova/master_files/code/game/objects/items/devices/mod_link.dm new file mode 100644 index 00000000000000..4dc4b0fa457053 --- /dev/null +++ b/modular_nova/master_files/code/game/objects/items/devices/mod_link.dm @@ -0,0 +1,13 @@ +/obj/item/clothing/neck/link_scryer/can_call() + . = ..() + var/mob/living/user = loc + if(!istype(user)) + return FALSE + + var/area/user_area = get_area(user) + + // if we're in a ghost-cafe, we can't call or be called. + // this will still work on the interlink (/area/centcom/interlink) + if(istype(user_area, /area/centcom/holding)) + return FALSE + diff --git a/modular_nova/master_files/code/game/objects/items/devices/radio/radio.dm b/modular_nova/master_files/code/game/objects/items/devices/radio/radio.dm new file mode 100644 index 00000000000000..50bd3e3a960a4f --- /dev/null +++ b/modular_nova/master_files/code/game/objects/items/devices/radio/radio.dm @@ -0,0 +1,10 @@ + /// DS-2 & Interdyne silicon radios + +/obj/item/radio/borg/syndicate/ghost_role // ds2 and interdyne since they both use non-antag Interdyne freq + name = "\proper Suspicious Integrated Subspace Transceiver " + syndie = TRUE + keyslot = /obj/item/encryptionkey/headset_syndicate/interdyne + +/obj/item/radio/borg/syndicate/ghost_role/Initialize(mapload) + . = ..() + set_frequency(FREQ_INTERDYNE) diff --git a/modular_nova/master_files/code/game/objects/items/devices/traitordevices.dm b/modular_nova/master_files/code/game/objects/items/devices/traitordevices.dm new file mode 100644 index 00000000000000..3b353a5b45c24d --- /dev/null +++ b/modular_nova/master_files/code/game/objects/items/devices/traitordevices.dm @@ -0,0 +1,10 @@ +/obj/item/healthanalyzer/rad_laser + special_desc_requirement = EXAMINE_CHECK_SYNDICATE + special_desc = "This syndicate-modified health analyzer can emit delayed bursts of radiation to those it scans." + +/obj/item/jammer + name = "suspicious transmitter" + desc = "A suspicious device vaguely resembling a radio, but without a speaker or microphone." + special_desc_requirement = EXAMINE_CHECK_JOB + special_desc_jobs = list("Station Engineer", "Chief Engineer", "Cyborg", "AI") + special_desc = "This is a black market radio jammer. Used to disrupt nearby radio communication." diff --git a/modular_skyrat/master_files/code/game/objects/items/dyekit.dm b/modular_nova/master_files/code/game/objects/items/dyekit.dm similarity index 100% rename from modular_skyrat/master_files/code/game/objects/items/dyekit.dm rename to modular_nova/master_files/code/game/objects/items/dyekit.dm diff --git a/modular_skyrat/master_files/code/game/objects/items/hhmirror.dm b/modular_nova/master_files/code/game/objects/items/hhmirror.dm similarity index 97% rename from modular_skyrat/master_files/code/game/objects/items/hhmirror.dm rename to modular_nova/master_files/code/game/objects/items/hhmirror.dm index bc8ef6c0724856..70c846c213084f 100644 --- a/modular_skyrat/master_files/code/game/objects/items/hhmirror.dm +++ b/modular_nova/master_files/code/game/objects/items/hhmirror.dm @@ -1,7 +1,7 @@ /obj/item/hhmirror name = "handheld mirror" desc = "A handheld mirror." - icon = 'modular_skyrat/master_files/icons/obj/hhmirror.dmi' + icon = 'modular_nova/master_files/icons/obj/hhmirror.dmi' icon_state = "hhmirror" /obj/item/hhmirror/attack_self(mob/user) @@ -12,7 +12,7 @@ /obj/item/hhmirror/fullmagic name = "full handheld magic mirror" desc = "A handheld mirror that allows you to change your... self?" // Later, maybe add a charge to the description. - icon = 'modular_skyrat/master_files/icons/obj/hhmirror.dmi' + icon = 'modular_nova/master_files/icons/obj/hhmirror.dmi' icon_state = "hhmirrormagic" var/list/races_blacklist = list(SPECIES_SKELETON, "agent", "angel", SPECIES_ZOMBIE, "clockwork golem servant", SPECIES_MUSHROOM, "memezombie") var/list/choosable_races = list() @@ -138,7 +138,7 @@ /obj/item/hhmirror/wracemagic name = "raceless handheld magic mirror" desc = "A handheld mirror that allows you to change your... self?" // Later, maybe add a charge to the description. - icon = 'modular_skyrat/master_files/icons/obj/hhmirror.dmi' + icon = 'modular_nova/master_files/icons/obj/hhmirror.dmi' icon_state = "hhmirrormagic" var/charges = 4 diff --git a/modular_skyrat/master_files/code/game/objects/items/holy_weapons.dm b/modular_nova/master_files/code/game/objects/items/holy_weapons.dm similarity index 94% rename from modular_skyrat/master_files/code/game/objects/items/holy_weapons.dm rename to modular_nova/master_files/code/game/objects/items/holy_weapons.dm index 114114bf09a7af..2316ab3ff7609f 100644 --- a/modular_skyrat/master_files/code/game/objects/items/holy_weapons.dm +++ b/modular_nova/master_files/code/game/objects/items/holy_weapons.dm @@ -1,6 +1,6 @@ /obj/item/clothing/head/helmet/chaplain/bland - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/chaplain.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/chaplain.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/head/chaplain.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/chaplain.dmi' name = "crusader helmet" desc = "Helfen, Wehren, Heilen." icon_state = "knight_generic" @@ -11,8 +11,8 @@ ) /obj/item/clothing/suit/chaplainsuit/armor/templar/generic - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/chaplain.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/chaplain.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits/chaplain.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/chaplain.dmi' desc = "Protect the weak and defenceless, live by honor and glory, and fight for the welfare of all!" icon_state = "knight_generic" unique_reskin = list( @@ -116,7 +116,7 @@ /obj/item/nullrod/rosary name = "prayer beads" desc = "A set of prayer beads used by many of the more traditional religions in space" - icon = 'modular_skyrat/modules/chaplain/icons/holy_weapons.dmi' + icon = 'modular_nova/modules/chaplain/icons/holy_weapons.dmi' icon_state = "rosary" worn_icon_state = "nullrod" force = 4 diff --git a/modular_skyrat/master_files/code/game/objects/items/oxygen_candle.dm b/modular_nova/master_files/code/game/objects/items/oxygen_candle.dm similarity index 95% rename from modular_skyrat/master_files/code/game/objects/items/oxygen_candle.dm rename to modular_nova/master_files/code/game/objects/items/oxygen_candle.dm index 0c846c461b63fd..3d0fc17d599094 100644 --- a/modular_skyrat/master_files/code/game/objects/items/oxygen_candle.dm +++ b/modular_nova/master_files/code/game/objects/items/oxygen_candle.dm @@ -3,7 +3,7 @@ /obj/item/oxygen_candle name = "oxygen candle" desc = "A steel tube with the words 'OXYGEN - PULL CORD TO IGNITE' stamped on the side.\nA small label reads 'WARNING: NOT FOR LIGHTING USE. WILL IGNITE FLAMMABLE GASSES'" - icon = 'modular_skyrat/master_files/icons/obj/oxygen_candle.dmi' + icon = 'modular_nova/master_files/icons/obj/oxygen_candle.dmi' icon_state = "oxycandle" w_class = WEIGHT_CLASS_SMALL light_color = LIGHT_COLOR_LAVA // Very warm chemical burn diff --git a/modular_skyrat/master_files/code/game/objects/items/religion.dm b/modular_nova/master_files/code/game/objects/items/religion.dm similarity index 100% rename from modular_skyrat/master_files/code/game/objects/items/religion.dm rename to modular_nova/master_files/code/game/objects/items/religion.dm diff --git a/modular_skyrat/master_files/code/game/objects/items/scratchingstone.dm b/modular_nova/master_files/code/game/objects/items/scratchingstone.dm similarity index 86% rename from modular_skyrat/master_files/code/game/objects/items/scratchingstone.dm rename to modular_nova/master_files/code/game/objects/items/scratchingstone.dm index ac1fd6244292de..f9fc991d6971a8 100644 --- a/modular_skyrat/master_files/code/game/objects/items/scratchingstone.dm +++ b/modular_nova/master_files/code/game/objects/items/scratchingstone.dm @@ -1,6 +1,6 @@ /obj/item/scratching_stone name = "scratching stone" - icon = 'modular_skyrat/master_files/icons/obj/kitchen.dmi' + icon = 'modular_nova/master_files/icons/obj/kitchen.dmi' icon_state = "scratchingstone" desc = "A specialized kind of whetstone, made of unknown alloys to hone a cyborg mercenary's claws to the best they can be. This one looks like a shitty second-hand sold by razorkids. It's got like, what, maybe one use left?" force = 5 diff --git a/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm b/modular_nova/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm similarity index 78% rename from modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm rename to modular_nova/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm index 78f1369bae0e63..19b97785f9dd8f 100644 --- a/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/modular_nova/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -1,7 +1,7 @@ // Add modular crafting recipes here, NOT IN BASE /tg/ CRAFTING LISTS /** - * Add a list of receipes to an existing recipe sublist. + * Add a list of recipes to an existing recipe sublist. * * Arguments: * * stack_recipes - the existing list of stack recipes. @@ -21,11 +21,15 @@ // Iron GLOBAL_LIST_INIT(skyrat_metal_recipes, list( + new/datum/stack_recipe("wall mounted fire-safety closet", /obj/item/wallframe/firecloset, 2, time = 1.5 SECONDS, check_density = FALSE, category = CAT_FURNITURE), + new/datum/stack_recipe("wall mounted emergency closet", /obj/item/wallframe/emcloset, 2, time = 1.5 SECONDS, check_density = FALSE, category = CAT_FURNITURE), + new/datum/stack_recipe("wall mounted closet", /obj/item/wallframe/closet, 2, time = 1.5 SECONDS, check_density = FALSE, category = CAT_FURNITURE), new/datum/stack_recipe("pool floor tile", /obj/item/stack/tile/iron/pool, 1, 4, 20, check_density = FALSE, category = CAT_TILES), new/datum/stack_recipe("lowered floor tile", /obj/item/stack/tile/iron/lowered, 1, 4, 20, check_density = FALSE, category = CAT_TILES), new/datum/stack_recipe("elevated floor tile", /obj/item/stack/tile/iron/elevated, 1, 4, 20, check_density = FALSE, category = CAT_TILES), new/datum/stack_recipe("wrestling turnbuckle", /obj/structure/wrestling_corner, 3, time = 2.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), new/datum/stack_recipe("metal barricade", /obj/structure/deployable_barricade/metal, 2, time = 1 SECONDS, on_solid_ground = TRUE, check_direction = TRUE, category = CAT_STRUCTURE), + new/datum/stack_recipe("metal shelf", /obj/structure/rack/shelf, 1, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = FALSE, category = CAT_STRUCTURE), new/datum/stack_recipe("anvil", /obj/structure/reagent_anvil, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), new/datum/stack_recipe("forge", /obj/structure/reagent_forge, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), new/datum/stack_recipe("throwing wheel", /obj/structure/throwing_wheel, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), @@ -74,10 +78,19 @@ GLOBAL_LIST_INIT(skyrat_wood_recipes, list( new/datum/stack_recipe("large wooden mortar", /obj/structure/large_mortar, 10, time = 3 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), new/datum/stack_recipe("wooden cutting board", /obj/item/cutting_board, 5, time = 2 SECONDS, check_density = FALSE, category = CAT_TOOLS), new/datum/stack_recipe("wooden shelf", /obj/structure/rack/wooden, 2, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = FALSE, category = CAT_STRUCTURE), + new/datum/stack_recipe("seed shelf", /obj/machinery/smartfridge/seedshelf, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), + new/datum/stack_recipe("produce bin", /obj/machinery/smartfridge/producebin, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), + new/datum/stack_recipe("produce display", /obj/machinery/smartfridge/producedisplay, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), + new/datum/stack_recipe("ration shelf", /obj/machinery/smartfridge/rationshelf, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), new/datum/stack_recipe("storage barrel", /obj/structure/closet/crate/wooden/storage_barrel, 4, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = FALSE, category = CAT_STRUCTURE), new/datum/stack_recipe("worm barrel", /obj/structure/wormfarm, 5, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), + new/datum/stack_recipe("gutlunch trough", /obj/structure/ore_container/gutlunch_trough, 5, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), + new/datum/stack_recipe("sturdy wooden fence", /obj/structure/railing/wooden_fencing, 5, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), + new/datum/stack_recipe("sturdy wooden fence gate", /obj/structure/railing/wooden_fencing/gate, 5, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), + new/datum/stack_recipe("wooden bowl", /obj/item/reagent_containers/cup/bowl/wood_bowl, 3, time = 2 SECONDS, check_density = FALSE, category = CAT_TOOLS), )) + /obj/item/stack/sheet/mineral/wood/get_main_recipes() . = ..() . += GLOB.skyrat_wood_recipes @@ -104,7 +117,7 @@ GLOBAL_LIST_INIT(skyrat_leather_recipes, list( GLOBAL_LIST_INIT(skyrat_leather_belt_recipes, list( new/datum/stack_recipe("xenoarch belt", /obj/item/storage/belt/utility/xenoarch, 4, check_density = FALSE, category = CAT_CONTAINERS), new/datum/stack_recipe("medical bandolier", /obj/item/storage/belt/medbandolier, 5, check_density = FALSE, category = CAT_CONTAINERS), - new/datum/stack_recipe("gear harness", /obj/item/clothing/under/misc/skyrat/gear_harness, 6, check_density = FALSE, category = CAT_CLOTHING), + new/datum/stack_recipe("gear harness", /obj/item/clothing/under/misc/nova/gear_harness, 6, check_density = FALSE, category = CAT_CLOTHING), new/datum/stack_recipe("ammo pouch", /obj/item/storage/pouch/ammo, 4, check_density = FALSE, category = CAT_CONTAINERS), )) diff --git a/modular_nova/master_files/code/game/objects/items/storage/backpack.dm b/modular_nova/master_files/code/game/objects/items/storage/backpack.dm new file mode 100644 index 00000000000000..500800ea880266 --- /dev/null +++ b/modular_nova/master_files/code/game/objects/items/storage/backpack.dm @@ -0,0 +1,156 @@ +/obj/item/storage/backpack/satchel/flat/PopulateContents() + var/contraband_list = list( + /obj/item/storage/belt/utility/syndicate = 1, + /obj/item/storage/toolbox/syndicate = 7, + /obj/item/card/id/advanced/chameleon = 6, + /obj/item/stack/spacecash/c5000 = 3, + /obj/item/stack/telecrystal = 2, + /obj/item/storage/belt/military = 12, + /obj/item/storage/fancy/cigarettes/cigpack_syndicate = 8, + /obj/item/storage/box/fireworks/dangerous = 11, + /obj/item/clothing/mask/gas/syndicate = 10, + /obj/item/vending_refill/donksoft = 13, + /obj/item/ammo_box/foambox/riot = 11, + /obj/item/soap/syndie = 7, + /obj/item/reagent_containers/crackbrick = 5, + /obj/item/reagent_containers/crack = 10, + /obj/item/reagent_containers/cocaine = 9, + /obj/item/reagent_containers/cocainebrick = 4, + /obj/item/reagent_containers/hashbrick = 13, //not contraband, but it'll be good padding, and there'll still be a black market for bulk goods + /obj/item/reagent_containers/heroin = 8, + /obj/item/reagent_containers/heroinbrick = 3, + /obj/item/reagent_containers/blacktar = 12, + /obj/item/storage/pill_bottle/stimulant = 9, //ephedrine and coffee. Can actually change whether someone gets out of a runaway situation + /obj/item/clothing/mask/cigarette/pipe/crackpipe = 15, + /obj/item/toy/cards/deck/syndicate = 10, //1tc, not balance breaking, small but premium commodity + /obj/item/reagent_containers/cup/bottle/morphine = 8, + /obj/item/reagent_containers/syringe/contraband/methamphetamine = 12, + /obj/item/clothing/glasses/sunglasses = 5, //can already be achieved in an arguably better form with just some hacking + ) + + for(var/i in 1 to 3) + var/contraband_type = pick_weight(contraband_list) + contraband_list -= contraband_type + new contraband_type(src) + +/obj/item/storage/backpack/satchel/flat/with_tools/PopulateContents() + new /obj/item/stack/tile/iron/base(src) + new /obj/item/crowbar(src) + +/* + * Messenger Bag Types + */ + +/obj/item/storage/backpack/messenger + name = "messenger bag" + desc = "A trendy looking messenger bag; sometimes known as a courier bag. Fashionable and portable." + icon_state = "messenger" + inhand_icon_state = "messenger" + icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi' + lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' + righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' + +/obj/item/storage/backpack/messenger/eng + name = "industrial messenger bag" + desc = "A tough messenger bag made of advanced treated leather for fireproofing. It also has more pockets than usual." + icon_state = "messenger_engineering" + inhand_icon_state = "messenger_engineering" + resistance_flags = FIRE_PROOF + +/obj/item/storage/backpack/messenger/med + name = "medical messenger bag" + desc = "A sterile messenger bag well loved by medics for its portability and sleek profile." + icon_state = "messenger_medical" + inhand_icon_state = "messenger_medical" + +/obj/item/storage/backpack/messenger/vir + name = "virologist messenger bag" + desc = "A sterile messenger bag with virologist colours, useful for deploying biohazards in record times." + icon_state = "messenger_virology" + inhand_icon_state = "messenger_virology" + +/obj/item/storage/backpack/messenger/chem + name = "chemist messenger bag" + desc = "A sterile messenger bag with chemist colours, good for getting to your alleyway deals on time." + icon_state = "messenger_chemistry" + inhand_icon_state = "messenger_chemistry" + +/obj/item/storage/backpack/messenger/coroner + name = "coroner messenger bag" + desc = "A messenger bag used to sneak your way out of graveyards at a good pace." + icon_state = "messenger_coroner" + inhand_icon_state = "messenger_coroner" + +/obj/item/storage/backpack/messenger/gen + name = "geneticist messenger bag" + desc = "A sterile messenger bag with geneticist colours, making a remarkably cute accessory for hulks." + icon_state = "messenger_genetics" + inhand_icon_state = "messenger_genetics" + +/obj/item/storage/backpack/messenger/science + name = "scientist messenger bag" + desc = "Useful for holding research materials, and for speeding your way to different scan objectives." + icon_state = "messenger_science" + inhand_icon_state = "messenger_science" + +/obj/item/storage/backpack/messenger/hyd + name = "botanist messenger bag" + desc = "A messenger bag made of all natural fibers, great for getting to the sesh in time." + icon_state = "messenger_hydroponics" + inhand_icon_state = "messenger_hydroponics" + +/obj/item/storage/backpack/messenger/sec + name = "security messenger bag" + desc = "A robust messenger bag for security related needs." + icon_state = "messenger_security_black" + inhand_icon_state = "messenger_security_black" + uses_advanced_reskins = TRUE + unique_reskin = list( + "Black Variant" = list( + RESKIN_ICON_STATE = "messenger_security_black", + RESKIN_WORN_ICON_STATE = "messenger_security_black", + RESKIN_INHAND_STATE = "messenger_security_black", + ), + "White Variant" = list( + RESKIN_ICON_STATE = "messenger_security_white", + RESKIN_WORN_ICON_STATE = "messenger_security_white", + RESKIN_INHAND_STATE = "messenger_security_white", + ), + ) + +/obj/item/storage/backpack/messenger/explorer + name = "explorer messenger bag" + desc = "A robust messenger bag for stashing your loot, as well as making a remarkably cute accessory for your drakebone armor." + icon_state = "messenger_explorer" + inhand_icon_state = "messenger_explorer" + +/obj/item/storage/backpack/messenger/cap + name = "captain's messenger bag" + desc = "An exclusive messenger bag for Symphionia officers, made of real whaleleather." + icon_state = "messenger_captain" + inhand_icon_state = "messenger_captain" + +/obj/item/storage/backpack/messenger/head_of_personnel + name = "head of personnel's messenger bag" + desc = "A exclusive messenger bag issued to Symphionia's finest second, with great storage space for all that paperwork you have planned." + icon_state = "messenger_hop" + inhand_icon_state = "messenger_hop" + +/obj/item/storage/backpack/messenger/blueshield + name = "blueshield's messenger bag'" + desc = "A robust messenger bag issued to Symphionia's finest guard dogs, with extra TACTICAL POCKETS. Whatever that even means." + icon_state = "messenger_blueshield" + inhand_icon_state = "messenger_blueshield" + +/obj/item/storage/backpack/messenger/science/robo + name = "robotics messenger bag" + desc = "A sleek, industrial-strength messenger bag issued to robotics personnel. Smells faintly of oil; a fashionably mobile choice for fashionably sedentary mechanics." + icon_state = "messenger_robo" + inhand_icon_state = "messenger_robo" + +/obj/item/storage/backpack/messenger/clown + name = "Giggles von Honkerton Jr." + desc = "The latest in storage 'technology' from Honk Co. Hey, how does this fit so much with such a small profile anyway? The wearer will definitely never tell you." + icon_state = "messenger_clown" + inhand_icon_state = "messenger_clown" diff --git a/modular_skyrat/master_files/code/game/objects/items/storage/boxes.dm b/modular_nova/master_files/code/game/objects/items/storage/boxes.dm similarity index 100% rename from modular_skyrat/master_files/code/game/objects/items/storage/boxes.dm rename to modular_nova/master_files/code/game/objects/items/storage/boxes.dm diff --git a/modular_nova/master_files/code/game/objects/items/storage/job_boxes.dm b/modular_nova/master_files/code/game/objects/items/storage/job_boxes.dm new file mode 100644 index 00000000000000..a37bf8affefaa7 --- /dev/null +++ b/modular_nova/master_files/code/game/objects/items/storage/job_boxes.dm @@ -0,0 +1,16 @@ +// Interdyne survival box +/obj/item/storage/box/survival/interdyne + name = "operation-ready survival box" + desc = "A box with the essentials of your operation. This one is labelled to contain an extended-capacity tank." + icon_state = "syndiebox" + illustration = "extendedtank" + mask_type = /obj/item/clothing/mask/gas/sechailer/syndicate // neck gaiter + internal_type = /obj/item/tank/internals/emergency_oxygen/engi + medipen_type = /obj/item/reagent_containers/hypospray/medipen/atropine + +/obj/item/storage/box/survival/interdyne/PopulateContents() + ..() + new /obj/item/crowbar/red(src) + new /obj/item/screwdriver/red(src) + new /obj/item/weldingtool/mini(src) + diff --git a/modular_skyrat/master_files/code/game/objects/items/tools/weldingtool.dm b/modular_nova/master_files/code/game/objects/items/tools/weldingtool.dm similarity index 100% rename from modular_skyrat/master_files/code/game/objects/items/tools/weldingtool.dm rename to modular_nova/master_files/code/game/objects/items/tools/weldingtool.dm index fecef3acdafe90..6168d6c5ea1630 100644 --- a/modular_skyrat/master_files/code/game/objects/items/tools/weldingtool.dm +++ b/modular_nova/master_files/code/game/objects/items/tools/weldingtool.dm @@ -1,7 +1,7 @@ /obj/item/weldingtool - /// How long it takes to weld someone else's robotic limbs. - var/self_delay = 5 SECONDS /// How long it takes to weld your own robotic limbs. + var/self_delay = 5 SECONDS + /// How long it takes to weld someone else's robotic limbs. var/other_delay = 1 SECONDS /obj/item/weldingtool/Initialize(mapload) diff --git a/modular_nova/master_files/code/game/objects/items/wiki_manuals.dm b/modular_nova/master_files/code/game/objects/items/wiki_manuals.dm new file mode 100644 index 00000000000000..97d310625939fc --- /dev/null +++ b/modular_nova/master_files/code/game/objects/items/wiki_manuals.dm @@ -0,0 +1,5 @@ +/obj/item/book/manual/wiki/security_space_law + name = "Corporate Regulations" + desc = "A set of Nanotrasen regulations for keeping law, order, and procedure followed within their space stations." + starting_title = "Corporate Regulations" + page_link = "Corporate_Regulations" diff --git a/modular_nova/master_files/code/game/objects/objs.dm b/modular_nova/master_files/code/game/objects/objs.dm new file mode 100644 index 00000000000000..223e1753de4193 --- /dev/null +++ b/modular_nova/master_files/code/game/objects/objs.dm @@ -0,0 +1,3 @@ +/obj + ///the Nova Sector version of obj_flags, to prevent any potential future conflict + var/obj_flags_nova = null diff --git a/modular_nova/master_files/code/game/objects/structures/beds-chairs/sofa.dm b/modular_nova/master_files/code/game/objects/structures/beds-chairs/sofa.dm new file mode 100644 index 00000000000000..989dd671969ad9 --- /dev/null +++ b/modular_nova/master_files/code/game/objects/structures/beds-chairs/sofa.dm @@ -0,0 +1,38 @@ +/** + * RGB Benches + * + * greyscale_colors. Set this to what you want in the + * base color path of your choosing, then duplicate + * the children with pathing adjusted accordingly. + * If it's for a ruin or ghost role, try to create a + * parent folder so mapping is easier. + * See /Interdyne/IceMoonBlue for an example! + */ + +//Default +/obj/structure/chair/sofa/bench/color + name = "bench" + desc = "Perfectly designed to be comfortable to sit on, and hellish to sleep on." + icon_state = "bench_middle" + greyscale_config = /datum/greyscale_config/bench_middle + greyscale_colors = "#FFFFFF" + +// Icemoon Blue sofa (Used on \_maps\RandomRuins\IceRuins\nova\icemoon_underground_interdyne_base1.dmm) +/obj/structure/chair/sofa/bench/color/Interdyne/IceMoonBlue + greyscale_colors = "#263188" + +/obj/structure/chair/sofa/bench/color/interdyne/icemoon_blue/left + icon_state = "bench_left" + greyscale_config = /datum/greyscale_config/bench_left + +/obj/structure/chair/sofa/bench/color/interdyne/icemoon_blue/right + icon_state = "bench_right" + greyscale_config = /datum/greyscale_config/bench_right + +/obj/structure/chair/sofa/bench/color/interdyne/icemoon_blue/corner + icon_state = "bench_corner" + greyscale_config = /datum/greyscale_config/bench_corner + +/obj/structure/chair/sofa/bench/color/interdyne/icemoon_blue/solo + icon_state = "bench_solo" + greyscale_config = /datum/greyscale_config/bench_solo diff --git a/modular_skyrat/master_files/code/game/objects/structures/crates_lockers/secure/cargo.dm b/modular_nova/master_files/code/game/objects/structures/crates_lockers/secure/cargo.dm similarity index 100% rename from modular_skyrat/master_files/code/game/objects/structures/crates_lockers/secure/cargo.dm rename to modular_nova/master_files/code/game/objects/structures/crates_lockers/secure/cargo.dm diff --git a/modular_nova/master_files/code/game/objects/structures/crates_lockers/secure/security.dm b/modular_nova/master_files/code/game/objects/structures/crates_lockers/secure/security.dm new file mode 100644 index 00000000000000..8dbe242e57f2b2 --- /dev/null +++ b/modular_nova/master_files/code/game/objects/structures/crates_lockers/secure/security.dm @@ -0,0 +1,3 @@ +/obj/structure/closet/secure_closet/detective/PopulateContents() + ..() + ..() // Spawn the full set of gear, twice diff --git a/modular_skyrat/master_files/code/game/objects/structures/mannequin.dm b/modular_nova/master_files/code/game/objects/structures/mannequin.dm similarity index 100% rename from modular_skyrat/master_files/code/game/objects/structures/mannequin.dm rename to modular_nova/master_files/code/game/objects/structures/mannequin.dm diff --git a/modular_skyrat/master_files/code/game/objects/structures/mirror.dm b/modular_nova/master_files/code/game/objects/structures/mirror.dm similarity index 100% rename from modular_skyrat/master_files/code/game/objects/structures/mirror.dm rename to modular_nova/master_files/code/game/objects/structures/mirror.dm diff --git a/modular_skyrat/master_files/code/game/objects/structures/railings.dm b/modular_nova/master_files/code/game/objects/structures/railings.dm similarity index 100% rename from modular_skyrat/master_files/code/game/objects/structures/railings.dm rename to modular_nova/master_files/code/game/objects/structures/railings.dm diff --git a/modular_skyrat/master_files/code/game/objects/structures/sauna_oven.dm b/modular_nova/master_files/code/game/objects/structures/sauna_oven.dm similarity index 98% rename from modular_skyrat/master_files/code/game/objects/structures/sauna_oven.dm rename to modular_nova/master_files/code/game/objects/structures/sauna_oven.dm index 709a391355c738..6b98610041cd74 100644 --- a/modular_skyrat/master_files/code/game/objects/structures/sauna_oven.dm +++ b/modular_nova/master_files/code/game/objects/structures/sauna_oven.dm @@ -7,7 +7,7 @@ /obj/structure/sauna_oven name = "sauna oven" desc = "A modest sauna oven with rocks. Add some fuel, pour some water and enjoy the moment." - icon = 'modular_skyrat/master_files/icons/obj/structures/sauna_oven.dmi' + icon = 'modular_nova/master_files/icons/obj/structures/sauna_oven.dmi' icon_state = "sauna_oven" density = TRUE anchored = TRUE diff --git a/modular_skyrat/master_files/code/game/objects/structures/tables_racks.dm b/modular_nova/master_files/code/game/objects/structures/tables_racks.dm similarity index 100% rename from modular_skyrat/master_files/code/game/objects/structures/tables_racks.dm rename to modular_nova/master_files/code/game/objects/structures/tables_racks.dm diff --git a/modular_skyrat/master_files/code/game/objects/structures/towel_bins.dm b/modular_nova/master_files/code/game/objects/structures/towel_bins.dm similarity index 96% rename from modular_skyrat/master_files/code/game/objects/structures/towel_bins.dm rename to modular_nova/master_files/code/game/objects/structures/towel_bins.dm index 41e1a09190702f..adf8066b6e3dfc 100644 --- a/modular_skyrat/master_files/code/game/objects/structures/towel_bins.dm +++ b/modular_nova/master_files/code/game/objects/structures/towel_bins.dm @@ -48,24 +48,24 @@ /obj/structure/towel_bin/screwdriver_act(mob/living/user, obj/item/tool) - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return FALSE if(amount) to_chat(user, span_warning("[src] must be empty first!")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(tool.use_tool(src, user, 0.5 SECONDS, volume = 50)) to_chat(user, span_notice("You disassemble [src].")) new /obj/item/stack/rods(loc, 2) qdel(src) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/towel_bin/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool, time = 0.5 SECONDS) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/towel_bin/attackby(obj/item/attacking_item, mob/user, params) diff --git a/modular_skyrat/master_files/code/game/objects/structures/trash_pile.dm b/modular_nova/master_files/code/game/objects/structures/trash_pile.dm similarity index 98% rename from modular_skyrat/master_files/code/game/objects/structures/trash_pile.dm rename to modular_nova/master_files/code/game/objects/structures/trash_pile.dm index 3232ba6acc42ec..73c09c1e76d541 100644 --- a/modular_skyrat/master_files/code/game/objects/structures/trash_pile.dm +++ b/modular_nova/master_files/code/game/objects/structures/trash_pile.dm @@ -1,7 +1,7 @@ /obj/structure/trash_pile name = "trash pile" desc = "A heap of garbage, but maybe there's something interesting inside?" - icon = 'modular_skyrat/master_files/icons/obj/trash_piles.dmi' + icon = 'modular_nova/master_files/icons/obj/trash_piles.dmi' icon_state = "randompile" density = TRUE anchored = TRUE diff --git a/modular_skyrat/master_files/code/game/objects/structures/watercloset.dm b/modular_nova/master_files/code/game/objects/structures/watercloset.dm similarity index 100% rename from modular_skyrat/master_files/code/game/objects/structures/watercloset.dm rename to modular_nova/master_files/code/game/objects/structures/watercloset.dm diff --git a/modular_nova/master_files/code/game/sound.dm b/modular_nova/master_files/code/game/sound.dm new file mode 100644 index 00000000000000..24bfca732d8fda --- /dev/null +++ b/modular_nova/master_files/code/game/sound.dm @@ -0,0 +1,214 @@ +/proc/get_sfx_skyrat(soundin) + if(istext(soundin)) + switch(soundin) + if(SFX_KEYBOARD) + soundin = pick( + 'modular_nova/modules/aesthetics/computer/sound/keypress1.ogg', + 'modular_nova/modules/aesthetics/computer/sound/keypress2.ogg', + 'modular_nova/modules/aesthetics/computer/sound/keypress3.ogg', + 'modular_nova/modules/aesthetics/computer/sound/keypress4.ogg', + 'modular_nova/modules/aesthetics/computer/sound/keystroke4.ogg', + ) + if(SFX_BULLET_IMPACT_METAL) // This is the one that will be used most, it is extensive. + soundin = pick( + 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_01.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_02.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_03.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_04.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_05.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_06.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_07.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_08.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_09.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_10.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_11.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_12.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_13.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_14.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_15.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_16.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_17.ogg', + ) + if(SFX_BULLET_IMPACT_FLESH) + soundin = pick( + 'modular_nova/modules/gunsgalore/sound/impact/impact_flesh_01.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_flesh_02.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_flesh_03.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_flesh_04.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_flesh_05.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_flesh_06.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_flesh_07.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_flesh_08.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_flesh_09.ogg', + ) + if(SFX_BULLET_IMPACT_ICE) + soundin = pick( + 'modular_nova/modules/gunsgalore/sound/impact/impact_snow_01.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_snow_02.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_snow_03.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_snow_04.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_snow_05.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_snow_06.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_snow_07.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_snow_08.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_snow_09.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_snow_10.ogg', + ) + if(SFX_BULLET_IMPACT_WOOD) + soundin = pick( + 'modular_nova/modules/gunsgalore/sound/impact/impact_wood_01.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_wood_02.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_wood_03.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_wood_04.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_wood_05.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_wood_06.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_wood_07.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_wood_08.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_wood_09.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_wood_10.ogg', + ) + if(SFX_BULLET_IMPACT_CONCRETE) + soundin = pick( + 'modular_nova/modules/gunsgalore/sound/impact/impact_masonry_01.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_masonry_02.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_masonry_03.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_masonry_04.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_masonry_05.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_masonry_06.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_masonry_07.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_masonry_08.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_masonry_09.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_masonry_10.ogg', + ) + if(SFX_BULLET_IMPACT_GLASS) + soundin = pick( + 'modular_nova/modules/gunsgalore/sound/impact/impact_glass_01.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_glass_02.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_glass_03.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_glass_04.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_glass_05.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_glass_06.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_glass_07.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_glass_08.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_glass_09.ogg', + 'modular_nova/modules/gunsgalore/sound/impact/impact_glass_10.ogg', + ) + if("punch") + soundin = pick('modular_nova/master_files/sound/weapons/punch1.ogg', 'modular_nova/master_files/sound/weapons/punch3.ogg') + if ("explosion") + soundin = pick( + 'modular_nova/modules/black_mesa/sound/explosions/explode1.ogg', + 'modular_nova/modules/black_mesa/sound/explosions/explode2.ogg', + 'modular_nova/modules/black_mesa/sound/explosions/explode3.ogg', + 'modular_nova/modules/black_mesa/sound/explosions/explode4.ogg', + 'modular_nova/modules/black_mesa/sound/explosions/explode5.ogg', + 'modular_nova/modules/black_mesa/sound/explosions/explode6.ogg', + 'modular_nova/modules/black_mesa/sound/explosions/explode7.ogg', + ) + return soundin + +// This is an atom level variable to prevent extensive typechecking for impacts. +/atom + // The sound we make if hit. + var/impact_sound = SFX_BULLET_IMPACT_METAL + + +// TURFS +/turf/closed/wall/ice + impact_sound = SFX_BULLET_IMPACT_ICE + +/turf/closed/wall/mineral/snow + impact_sound = SFX_BULLET_IMPACT_ICE + +/turf/closed/wall/mineral/wood + impact_sound = SFX_BULLET_IMPACT_WOOD + +/turf/closed/wall/mineral/bamboo + impact_sound = SFX_BULLET_IMPACT_WOOD + +/turf/closed/wall/mineral/sandstone + impact_sound = SFX_BULLET_IMPACT_CONCRETE + +/turf/closed/wall/vault/rock + impact_sound = SFX_BULLET_IMPACT_CONCRETE + +/turf/closed/wall/vault/sandstone + impact_sound = SFX_BULLET_IMPACT_CONCRETE + +/turf/closed/wall/rock + impact_sound = SFX_BULLET_IMPACT_CONCRETE + +/turf/closed/wall/mineral/diamond + impact_sound = SFX_BULLET_IMPACT_GLASS + +/turf/closed/wall/mineral/plasma + impact_sound = SFX_BULLET_IMPACT_GLASS + +// MOBS +/mob/living + impact_sound = SFX_BULLET_IMPACT_FLESH + +// STRUCTURES +/obj/structure/window + impact_sound = SFX_BULLET_IMPACT_GLASS + +/obj/structure/table/glass + impact_sound = SFX_BULLET_IMPACT_GLASS + +/obj/structure/table/reinforced/rglass + impact_sound = SFX_BULLET_IMPACT_GLASS + +/obj/structure/table/reinforced/plasmarglass + impact_sound = SFX_BULLET_IMPACT_GLASS + +/obj/structure/table/reinforced/plastitaniumglass + impact_sound = SFX_BULLET_IMPACT_GLASS + +/obj/structure/table/reinforced/titaniumglass + impact_sound = SFX_BULLET_IMPACT_GLASS + +/obj/structure/table/wood + impact_sound = SFX_BULLET_IMPACT_WOOD + +/obj/structure/barricade/wooden + impact_sound = SFX_BULLET_IMPACT_WOOD + +/obj/structure/chair/wood + impact_sound = SFX_BULLET_IMPACT_WOOD + +/obj/structure/closet/crate/wooden + impact_sound = SFX_BULLET_IMPACT_WOOD + +/obj/structure/door_assembly/door_assembly_wood + impact_sound = SFX_BULLET_IMPACT_WOOD + +/obj/structure/falsewall/wood + impact_sound = SFX_BULLET_IMPACT_WOOD + +/obj/structure/table_frame/wood + impact_sound = SFX_BULLET_IMPACT_WOOD + +/obj/structure/deployable_barricade/wooden + impact_sound = SFX_BULLET_IMPACT_WOOD + +/obj/structure/statue/snow + impact_sound = SFX_BULLET_IMPACT_ICE + +/obj/structure/deployable_barricade/snow + impact_sound = SFX_BULLET_IMPACT_ICE + + + +// MACHINERY +/obj/machinery/door/window + impact_sound = SFX_BULLET_IMPACT_GLASS + +/obj/machinery/computer + impact_sound = SFX_BULLET_IMPACT_GLASS + +/obj/machinery/door/airlock/wood + impact_sound = SFX_BULLET_IMPACT_WOOD + +/obj/machinery/computer/security/wooden_tv + impact_sound = SFX_BULLET_IMPACT_WOOD + diff --git a/modular_skyrat/master_files/code/game/turfs/closed/_closed.dm b/modular_nova/master_files/code/game/turfs/closed/_closed.dm similarity index 80% rename from modular_skyrat/master_files/code/game/turfs/closed/_closed.dm rename to modular_nova/master_files/code/game/turfs/closed/_closed.dm index 74e431b00a7854..0bca07fcbabef6 100644 --- a/modular_skyrat/master_files/code/game/turfs/closed/_closed.dm +++ b/modular_nova/master_files/code/game/turfs/closed/_closed.dm @@ -1,5 +1,5 @@ /turf/closed/indestructible/steel - icon = 'modular_skyrat/modules/aesthetics/walls/icons/wall.dmi' + icon = 'modular_nova/modules/aesthetics/walls/icons/wall.dmi' icon_state = "wall-0" base_icon_state = "wall" smoothing_flags = SMOOTH_BITMASK diff --git a/modular_skyrat/master_files/code/game/turfs/open/floor/iron_floor.dm b/modular_nova/master_files/code/game/turfs/open/floor/iron_floor.dm similarity index 100% rename from modular_skyrat/master_files/code/game/turfs/open/floor/iron_floor.dm rename to modular_nova/master_files/code/game/turfs/open/floor/iron_floor.dm diff --git a/modular_skyrat/master_files/code/game/turfs/open/space/space.dm b/modular_nova/master_files/code/game/turfs/open/space/space.dm similarity index 100% rename from modular_skyrat/master_files/code/game/turfs/open/space/space.dm rename to modular_nova/master_files/code/game/turfs/open/space/space.dm diff --git a/modular_nova/master_files/code/modules/admin/admin.dm b/modular_nova/master_files/code/modules/admin/admin.dm new file mode 100644 index 00000000000000..951f3a87839a2c --- /dev/null +++ b/modular_nova/master_files/code/modules/admin/admin.dm @@ -0,0 +1,84 @@ +GLOBAL_VAR_INIT(dchat_allowed, TRUE) + +/datum/admins/proc/toggledchat() + set category = "Server" + set desc = "Toggle dis bitch" + set name = "Toggle Dead Chat" + toggle_dchat() + log_admin("[key_name(usr)] toggled dead chat.") + message_admins("[key_name_admin(usr)] toggled dead chat.") + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle DCHAT", "[GLOB.dchat_allowed ? "Enabled" : "Disabled"]")) // If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/proc/toggle_dchat(toggle = null) + if(toggle != null) // if we're specifically en/disabling dead chat + if(toggle != GLOB.dchat_allowed) + GLOB.dchat_allowed = toggle + else + return + else // otherwise just toggle it + GLOB.dchat_allowed = !GLOB.dchat_allowed + to_chat(world, span_oocplain("The dead chat channel has been globally [GLOB.dchat_allowed ? "enabled" : "disabled"].")) + +/datum/admin_help + /// Have we requested this ticket to stop being part of the Ticket Ping subsystem? + var/ticket_ping_stop = FALSE + /// Are we added to the ticket ping subsystem in the first place + var/ticket_ping = FALSE + /// Who is handling this admin help? + var/handler + /// All sanitized text + var/full_text + +/datum/admin_help/ClosureLinks(ref_src) + . = ..() + . += " (HANDLE)" //NOVA EDIT ADDITION + . += " (PING MUTE)" //NOVA EDIT ADDITION + . += " (MHELP)" + +//Let the initiator know their ahelp is being handled +/datum/admin_help/proc/handle_issue(key_name = key_name_admin(usr)) + if(state != AHELP_ACTIVE) + return FALSE + + if(handler && handler == usr.ckey) // No need to handle it twice as the same person ;) + return TRUE + + if(handler && handler != usr.ckey) + var/response = tgui_alert(usr, "This ticket is already being handled by [handler]. Do you want to continue?", "Ticket already assigned", list("Yes", "No")) + if(!response || response == "No") + return FALSE + + var/msg = span_adminhelp("Your ticket is now being handled by [usr?.client?.holder?.fakekey ? usr?.client?.holder?.fakekey : "an administrator"]! Please wait while they type their response and/or gather relevant information.") + + if(initiator) + to_chat(initiator, msg) + + SSblackbox.record_feedback("tally", "ahelp_stats", 1, "handling") + msg = "Ticket [TicketHref("#[id]")] is being handled by [key_name]" + message_admins(msg) + log_admin_private(msg) + AddInteraction("Being handled by [key_name]", "Being handled by [key_name_admin(usr, FALSE)]") + + handler = "[usr.ckey]" + return TRUE + +///Proc which converts an admin_help ticket to a mentorhelp +/datum/admin_help/proc/convert_to_mentorhelp(key_name = key_name_admin(usr)) + if(state != AHELP_ACTIVE) + return FALSE + + if(handler && handler != usr.ckey) + var/response = tgui_alert(usr, "This ticket is already being handled by [handler]. Do you want to continue?", "Ticket already assigned", list("Yes", "No")) + if(!response || response == "No") + return FALSE + + add_verb(initiator, /client/verb/mentorhelp) // Way to override mentorhelp cooldown. + + to_chat(initiator, span_adminhelp("Your ticket was converted to Mentorhelp")) + initiator.mentorhelp(full_text) + initiator.giveadminhelpverb() + + message_admins("[key_name] converted Ticket #[id] from [initiator_key_name] into Mentorhelp") + log_admin("[usr.client] converted Ticket #[id] from [initiator_ckey] into Mentorhelp") + + Close(key_name, TRUE) diff --git a/modular_skyrat/master_files/code/modules/antagonists/_common/antag_datum.dm b/modular_nova/master_files/code/modules/antagonists/_common/antag_datum.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/antagonists/_common/antag_datum.dm rename to modular_nova/master_files/code/modules/antagonists/_common/antag_datum.dm diff --git a/modular_skyrat/master_files/code/modules/antagonists/ashwalker/ashwalker.dm b/modular_nova/master_files/code/modules/antagonists/ashwalker/ashwalker.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/antagonists/ashwalker/ashwalker.dm rename to modular_nova/master_files/code/modules/antagonists/ashwalker/ashwalker.dm diff --git a/modular_skyrat/master_files/code/modules/antagonists/changeling/changeling.dm b/modular_nova/master_files/code/modules/antagonists/changeling/changeling.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/antagonists/changeling/changeling.dm rename to modular_nova/master_files/code/modules/antagonists/changeling/changeling.dm diff --git a/modular_nova/master_files/code/modules/antagonists/changeling/powers/tiny_prick.dm b/modular_nova/master_files/code/modules/antagonists/changeling/powers/tiny_prick.dm new file mode 100644 index 00000000000000..0eaf7f50f9f748 --- /dev/null +++ b/modular_nova/master_files/code/modules/antagonists/changeling/powers/tiny_prick.dm @@ -0,0 +1,3 @@ +// Transformation sting is not able to be purchased +/datum/action/changeling/sting/transformation + dna_cost = CHANGELING_POWER_UNOBTAINABLE diff --git a/modular_nova/master_files/code/modules/antagonists/cult/cult_items.dm b/modular_nova/master_files/code/modules/antagonists/cult/cult_items.dm new file mode 100644 index 00000000000000..64e46455e038d3 --- /dev/null +++ b/modular_nova/master_files/code/modules/antagonists/cult/cult_items.dm @@ -0,0 +1,2 @@ +/obj/item/clothing/suit/hooded/cultrobes + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/armor_digi.dmi' diff --git a/modular_skyrat/master_files/code/modules/antagonists/ert/ert.dm b/modular_nova/master_files/code/modules/antagonists/ert/ert.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/antagonists/ert/ert.dm rename to modular_nova/master_files/code/modules/antagonists/ert/ert.dm diff --git a/modular_skyrat/master_files/code/modules/antagonists/pirate/pirate_outfits.dm b/modular_nova/master_files/code/modules/antagonists/pirate/pirate_outfits.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/antagonists/pirate/pirate_outfits.dm rename to modular_nova/master_files/code/modules/antagonists/pirate/pirate_outfits.dm diff --git a/modular_skyrat/master_files/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm b/modular_nova/master_files/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm rename to modular_nova/master_files/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm diff --git a/modular_skyrat/master_files/code/modules/antagonists/traitor/objectives/kill_pet.dm b/modular_nova/master_files/code/modules/antagonists/traitor/objectives/kill_pet.dm similarity index 97% rename from modular_skyrat/master_files/code/modules/antagonists/traitor/objectives/kill_pet.dm rename to modular_nova/master_files/code/modules/antagonists/traitor/objectives/kill_pet.dm index b3486f40ba72e3..234ad65a916926 100644 --- a/modular_skyrat/master_files/code/modules/antagonists/traitor/objectives/kill_pet.dm +++ b/modular_nova/master_files/code/modules/antagonists/traitor/objectives/kill_pet.dm @@ -6,8 +6,8 @@ /mob/living/basic/pet/dog/corgi/puppy/ian ), JOB_CAPTAIN = /mob/living/basic/pet/fox/renault, - JOB_CHIEF_MEDICAL_OFFICER = /mob/living/simple_animal/pet/cat/runtime, - JOB_CHIEF_ENGINEER = /mob/living/simple_animal/parrot/poly, + JOB_CHIEF_MEDICAL_OFFICER = /mob/living/basic/pet/cat/runtime, + JOB_CHIEF_ENGINEER = /mob/living/basic/parrot/poly, JOB_QUARTERMASTER = list( /mob/living/basic/sloth/citrus, /mob/living/basic/sloth/paperwork, diff --git a/modular_skyrat/master_files/code/modules/antagonists/traitor/objectives/smuggling.dm b/modular_nova/master_files/code/modules/antagonists/traitor/objectives/smuggling.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/antagonists/traitor/objectives/smuggling.dm rename to modular_nova/master_files/code/modules/antagonists/traitor/objectives/smuggling.dm diff --git a/modular_nova/master_files/code/modules/assembly/flash.dm b/modular_nova/master_files/code/modules/assembly/flash.dm new file mode 100644 index 00000000000000..5674aef2db469b --- /dev/null +++ b/modular_nova/master_files/code/modules/assembly/flash.dm @@ -0,0 +1,3 @@ +/obj/item/assembly/flash/hypnotic + special_desc_requirement = EXAMINE_CHECK_SYNDICATE + special_desc = "A modified flash device, programmed to emit a sequence of subliminal flashes that can send a vulnerable target into a hypnotic trance." diff --git a/modular_skyrat/master_files/code/modules/asset_cache/assets/plumbing.dm b/modular_nova/master_files/code/modules/asset_cache/assets/plumbing.dm similarity index 88% rename from modular_skyrat/master_files/code/modules/asset_cache/assets/plumbing.dm rename to modular_nova/master_files/code/modules/asset_cache/assets/plumbing.dm index 5e04d6c1401c07..0665b4b14a2c53 100644 --- a/modular_skyrat/master_files/code/modules/asset_cache/assets/plumbing.dm +++ b/modular_nova/master_files/code/modules/asset_cache/assets/plumbing.dm @@ -4,7 +4,7 @@ //load only what we need from the icon files,format is icon_file_name = list of icon_states we need from this file var/list/essentials = list( - 'modular_skyrat/modules/liquids/icons/obj/structures/drains.dmi' = list( + 'modular_nova/modules/liquids/icons/obj/structures/drains.dmi' = list( "drain", "active_input", "active_output", diff --git a/modular_nova/master_files/code/modules/atmospherics/machinery/pipes/pipes.dm b/modular_nova/master_files/code/modules/atmospherics/machinery/pipes/pipes.dm new file mode 100644 index 00000000000000..63d66d5245709b --- /dev/null +++ b/modular_nova/master_files/code/modules/atmospherics/machinery/pipes/pipes.dm @@ -0,0 +1,3 @@ +// Disables pipe gas visuals +/obj/machinery/atmospherics/pipe + has_gas_visuals = FALSE diff --git a/modular_nova/master_files/code/modules/bitrunning/orders/disks.dm b/modular_nova/master_files/code/modules/bitrunning/orders/disks.dm new file mode 100644 index 00000000000000..2018e7d9e95d9a --- /dev/null +++ b/modular_nova/master_files/code/modules/bitrunning/orders/disks.dm @@ -0,0 +1,14 @@ +// removes the nerf in virtual space +/obj/item/dualsaber/green/bitrunning + block_chance = 75 + +// gives them the de-nerfed dual saber +/obj/item/bitrunning_disk/item/tier3/Initialize(mapload) + . = ..() + + selectable_items -= list( + /obj/item/dualsaber/green, + ) + selectable_items += list( + /obj/item/dualsaber/green/bitrunning, + ) diff --git a/modular_skyrat/master_files/code/modules/bitrunning/orders/tech.dm b/modular_nova/master_files/code/modules/bitrunning/orders/tech.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/bitrunning/orders/tech.dm rename to modular_nova/master_files/code/modules/bitrunning/orders/tech.dm diff --git a/modular_nova/master_files/code/modules/buildmode/bm_mode.dm b/modular_nova/master_files/code/modules/buildmode/bm_mode.dm new file mode 100644 index 00000000000000..534bb9cd05792b --- /dev/null +++ b/modular_nova/master_files/code/modules/buildmode/bm_mode.dm @@ -0,0 +1,4 @@ +/datum/buildmode_mode + ///this variable serves to separate icons due to modularity. The default path to button icons is /tg/. + // skyrat path - 'modular_nova/master_files/icons/misc/buildmode.dmi' + var/button_icon = 'icons/misc/buildmode.dmi' diff --git a/modular_skyrat/master_files/code/modules/buildmode/submodes/offercontrol.dm b/modular_nova/master_files/code/modules/buildmode/submodes/offercontrol.dm similarity index 84% rename from modular_skyrat/master_files/code/modules/buildmode/submodes/offercontrol.dm rename to modular_nova/master_files/code/modules/buildmode/submodes/offercontrol.dm index 2e68e2c2c2a929..93c81f425c776f 100644 --- a/modular_skyrat/master_files/code/modules/buildmode/submodes/offercontrol.dm +++ b/modular_nova/master_files/code/modules/buildmode/submodes/offercontrol.dm @@ -1,6 +1,6 @@ /datum/buildmode_mode/offercontrol key = "offercontrol" - button_icon = 'modular_skyrat/master_files/icons/misc/buildmode.dmi' // if you are making a modular build mode, use this icon path. + button_icon = 'modular_nova/master_files/icons/misc/buildmode.dmi' // if you are making a modular build mode, use this icon path. /datum/buildmode_mode/offercontrol/show_help(client/target_client) to_chat(target_client, span_notice("***********************************************************\n\ diff --git a/modular_skyrat/master_files/code/modules/cargo/bounties/medical.dm b/modular_nova/master_files/code/modules/cargo/bounties/medical.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/cargo/bounties/medical.dm rename to modular_nova/master_files/code/modules/cargo/bounties/medical.dm diff --git a/modular_skyrat/master_files/code/modules/cargo/exports/tools.dm b/modular_nova/master_files/code/modules/cargo/exports/tools.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/cargo/exports/tools.dm rename to modular_nova/master_files/code/modules/cargo/exports/tools.dm diff --git a/modular_skyrat/master_files/code/modules/cargo/exports/traitor.dm b/modular_nova/master_files/code/modules/cargo/exports/traitor.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/cargo/exports/traitor.dm rename to modular_nova/master_files/code/modules/cargo/exports/traitor.dm diff --git a/modular_skyrat/master_files/code/modules/cargo/goodies.dm b/modular_nova/master_files/code/modules/cargo/goodies.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/cargo/goodies.dm rename to modular_nova/master_files/code/modules/cargo/goodies.dm diff --git a/modular_skyrat/master_files/code/modules/cargo/markets/market_items/weapons.dm b/modular_nova/master_files/code/modules/cargo/markets/market_items/weapons.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/cargo/markets/market_items/weapons.dm rename to modular_nova/master_files/code/modules/cargo/markets/market_items/weapons.dm diff --git a/modular_skyrat/master_files/code/modules/cargo/orderconsole.dm b/modular_nova/master_files/code/modules/cargo/orderconsole.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/cargo/orderconsole.dm rename to modular_nova/master_files/code/modules/cargo/orderconsole.dm diff --git a/modular_skyrat/master_files/code/modules/cargo/packs/general.dm b/modular_nova/master_files/code/modules/cargo/packs/general.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/cargo/packs/general.dm rename to modular_nova/master_files/code/modules/cargo/packs/general.dm diff --git a/modular_nova/master_files/code/modules/cargo/packs/security.dm b/modular_nova/master_files/code/modules/cargo/packs/security.dm new file mode 100644 index 00000000000000..a78f2369c1c6c4 --- /dev/null +++ b/modular_nova/master_files/code/modules/cargo/packs/security.dm @@ -0,0 +1,20 @@ +/datum/supply_pack/security/ammo + special = TRUE + +/datum/supply_pack/security/armor + special = TRUE + +/datum/supply_pack/security/disabler + cost = CARGO_CRATE_VALUE * 5 + +/datum/supply_pack/security/helmets + special = TRUE + +/datum/supply_pack/security/securityclothes + special = TRUE + +/datum/supply_pack/security/armory/ballistic + special = TRUE + +/datum/supply_pack/security/armory/thermal + special = TRUE diff --git a/modular_skyrat/master_files/code/modules/cargo/packs/service.dm b/modular_nova/master_files/code/modules/cargo/packs/service.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/cargo/packs/service.dm rename to modular_nova/master_files/code/modules/cargo/packs/service.dm diff --git a/modular_skyrat/master_files/code/modules/client/playtime.dm b/modular_nova/master_files/code/modules/client/playtime.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/playtime.dm rename to modular_nova/master_files/code/modules/client/playtime.dm diff --git a/modular_nova/master_files/code/modules/client/preferences.dm b/modular_nova/master_files/code/modules/client/preferences.dm new file mode 100644 index 00000000000000..ab6ea51e6d384b --- /dev/null +++ b/modular_nova/master_files/code/modules/client/preferences.dm @@ -0,0 +1,181 @@ +#define MAX_MUTANT_ROWS 4 + +/datum/preferences + /// Loadout prefs. Assoc list of [typepaths] to [associated list of item info]. + var/list/loadout_list + /// Associative list, keyed by language typepath, pointing to LANGUAGE_UNDERSTOOD, or LANGUAGE_SPOKEN, for whether we understand or speak the language + var/list/languages = list() + /// List of chosen augmentations. It's an associative list with key name of the slot, pointing to a typepath of an augment define + var/augments = list() + /// List of chosen preferred styles for limb replacements + var/augment_limb_styles = list() + /// Which augment slot we currently have chosen, this is for UI display + var/chosen_augment_slot + /// Has to include all information that extra organs from mutant bodyparts would need. (so far only genitals now) + var/list/features = MANDATORY_FEATURE_LIST + /// A list containing all of our mutant bodparts + var/list/list/mutant_bodyparts = list() + /// A list of all bodymarkings + var/list/list/body_markings = list() + + /// Will the person see accessories not meant for their species to choose from + var/mismatched_customization = FALSE + + /// Allows the user to freely color his body markings and mutant parts. + var/allow_advanced_colors = FALSE + + /// Preference of how the preview should show the character. + var/preview_pref = PREVIEW_PREF_JOB + + var/needs_update = TRUE + + var/arousal_preview = AROUSAL_NONE + + var/datum/species/pref_species + + // BACKGROUND STUFF + var/general_record = "" + var/security_record = "" + var/medical_record = "" + + var/background_info = "" + var/exploitable_info = "" + + /// Whether the user wants to see body size being shown in the preview + var/show_body_size = FALSE + + /// Alternative job titles stored in preferences. Assoc list, ie. alt_job_titles["Scientist"] = "Cytologist" + var/list/alt_job_titles = list() + + // Determines if the player has undergone TGUI preferences migration, if so, this will prevent constant loading. + var/tgui_prefs_migration = TRUE + + /// A photo of the character, visible on close examine + var/headshot = "" + +/datum/preferences/proc/species_updated(species_type) + all_quirks = list() + // Reset cultural stuff + languages[try_get_common_language()] = LANGUAGE_SPOKEN + save_character() + +/datum/preferences/proc/print_bodypart_change_line(key) + var/acc_name = mutant_bodyparts[key][MUTANT_INDEX_NAME] + var/shown_colors = 0 + var/datum/sprite_accessory/SA = GLOB.sprite_accessories[key][acc_name] + var/dat = "" + if(SA.color_src == USE_MATRIXED_COLORS) + shown_colors = 3 + else if (SA.color_src == USE_ONE_COLOR) + shown_colors = 1 + if((allow_advanced_colors || SA.always_color_customizable) && shown_colors) + dat += "R" + dat += "[acc_name]" + if(allow_advanced_colors || SA.always_color_customizable) + if(shown_colors) + dat += "
    " + var/list/colorlist = mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] + for(var/i in 1 to shown_colors) + dat += " " + return dat + +/datum/preferences/proc/reset_colors() + for(var/key in mutant_bodyparts) + var/datum/sprite_accessory/SA = GLOB.sprite_accessories[key][mutant_bodyparts[key][MUTANT_INDEX_NAME]] + if(SA.always_color_customizable) + continue + mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] = SA.get_default_color(features, pref_species) + + for(var/zone in body_markings) + var/list/bml = body_markings[zone] + for(var/key in bml) + var/datum/body_marking/BM = GLOB.body_markings[key] + bml[key] = BM.get_default_color(features, pref_species) + +/// This helper proc gets the current species language holder and does any post-processing that's required in one easy to track place. +/// This proc should *always* be edited or used when modifying or getting the default languages of a player controlled, unrestricted species, to prevent any errant conflicts. +/datum/preferences/proc/get_adjusted_language_holder() + var/datum/species/species = read_preference(/datum/preference/choiced/species) + species = new species() + var/datum/language_holder/language_holder = new species.species_language_holder() + + // Do language post procesing here. Used to house our foreigner functionality. + // I saw little reason to remove this proc, considering it makes code using this a little easier to read. + + return language_holder + +/// Tries to get the topmost language of the language holder. Should be the species' native language, and if it isn't, you should pester a coder. +/datum/preferences/proc/try_get_common_language() + var/datum/language_holder/language_holder = get_adjusted_language_holder() + var/language = language_holder.spoken_languages[1] + return language + +/datum/preferences/proc/validate_species_parts() + var/list/default_bodyparts = GLOB.default_mutant_bodyparts[pref_species.name] + var/list/target_bodyparts = default_bodyparts.Copy() + + // Remove all "extra" accessories + for(var/key in mutant_bodyparts) + if(!GLOB.sprite_accessories[key]) // That accessory no longer exists, remove it + mutant_bodyparts -= key + continue + if(!GLOB.default_mutant_bodyparts[pref_species.name][key]) + mutant_bodyparts -= key + continue + if(!GLOB.sprite_accessories[key][mutant_bodyparts[key][MUTANT_INDEX_NAME]]) // The individual accessory no longer exists + mutant_bodyparts[key][MUTANT_INDEX_NAME] = GLOB.default_mutant_bodyparts[pref_species.name[key][MUTANTPART_NAME]] + validate_color_keys_for_part(key) // Validate the color count of each accessory that wasnt removed + + // Add any missing accessories + for(var/key in target_bodyparts) + if(!mutant_bodyparts[key]) + var/datum/sprite_accessory/SA + if(target_bodyparts[key][MUTANTPART_CAN_RANDOMIZE]) + SA = random_accessory_of_key_for_species(key, pref_species) + else + SA = GLOB.sprite_accessories[key][target_bodyparts[key][MUTANTPART_NAME]] + var/final_list = list() + final_list[MUTANT_INDEX_NAME] = SA.name + final_list[MUTANT_INDEX_COLOR_LIST] = SA.get_default_color(features, pref_species) + mutant_bodyparts[key] = final_list + + if(!allow_advanced_colors) + reset_colors() + +/datum/preferences/proc/validate_color_keys_for_part(key) + var/datum/sprite_accessory/SA = GLOB.sprite_accessories[key][mutant_bodyparts[key][MUTANT_INDEX_NAME]] + var/list/colorlist = mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] + if(SA.color_src == USE_MATRIXED_COLORS && colorlist.len != 3) + mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] = SA.get_default_color(features, pref_species) + else if (SA.color_src == USE_ONE_COLOR && colorlist.len != 1) + mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] = SA.get_default_color(features, pref_species) + +/datum/preferences/proc/CanBuyAugment(datum/augment_item/target_aug, datum/augment_item/current_aug) + // Check biotypes + if(!(pref_species.inherent_biotypes & target_aug.allowed_biotypes)) + return + var/quirk_points = GetQuirkBalance() + var/leverage = 0 + if(current_aug) + leverage += current_aug.cost + if((quirk_points + leverage)>= target_aug.cost) + return TRUE + else + return FALSE + +/// This proc saves the damage currently on `character` (human) and reapplies it after `safe_transfer_prefs()` is applied to the `character`. +/datum/preferences/proc/safe_transfer_prefs_to_with_damage(mob/living/carbon/human/character, icon_updates = TRUE, is_antag = FALSE) + if(!istype(character)) + return FALSE + + var/datum/component/damage_tracker/human/added_tracker = character.AddComponent(/datum/component/damage_tracker/human) + if(!added_tracker) + return FALSE + + safe_transfer_prefs_to(character, icon_updates, is_antag) + qdel(added_tracker) + +// Updates the mob's chat color in the global cache +/datum/preferences/safe_transfer_prefs_to(mob/living/carbon/human/character, icon_updates = TRUE, is_antag = FALSE) + . = ..() + GLOB.chat_colors_by_mob_name[character.name] = list(character.chat_color, character.chat_color_darkened) // by now the mob has had its prefs applied to it diff --git a/modular_skyrat/master_files/code/modules/client/preferences/_admin.dm b/modular_nova/master_files/code/modules/client/preferences/_admin.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/_admin.dm rename to modular_nova/master_files/code/modules/client/preferences/_admin.dm diff --git a/modular_skyrat/master_files/code/modules/client/preferences/_preference.dm b/modular_nova/master_files/code/modules/client/preferences/_preference.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/_preference.dm rename to modular_nova/master_files/code/modules/client/preferences/_preference.dm diff --git a/modular_skyrat/master_files/code/modules/client/preferences/auto_dementor.dm b/modular_nova/master_files/code/modules/client/preferences/auto_dementor.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/auto_dementor.dm rename to modular_nova/master_files/code/modules/client/preferences/auto_dementor.dm diff --git a/modular_skyrat/master_files/code/modules/client/preferences/be_antag.dm b/modular_nova/master_files/code/modules/client/preferences/be_antag.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/be_antag.dm rename to modular_nova/master_files/code/modules/client/preferences/be_antag.dm diff --git a/modular_skyrat/master_files/code/modules/client/preferences/body_size.dm b/modular_nova/master_files/code/modules/client/preferences/body_size.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/body_size.dm rename to modular_nova/master_files/code/modules/client/preferences/body_size.dm diff --git a/modular_nova/master_files/code/modules/client/preferences/brain.dm b/modular_nova/master_files/code/modules/client/preferences/brain.dm new file mode 100644 index 00000000000000..5f515577c8a877 --- /dev/null +++ b/modular_nova/master_files/code/modules/client/preferences/brain.dm @@ -0,0 +1,36 @@ +/datum/preference/choiced/brain_type + category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + savefile_key = "brain_type" + savefile_identifier = PREFERENCE_CHARACTER + priority = PREFERENCE_PRIORITY_NAMES // Apply after species, cause that's super important. + +/datum/preference/choiced/brain_type/init_possible_values() + return list(ORGAN_PREF_POSI_BRAIN, ORGAN_PREF_MMI_BRAIN, ORGAN_PREF_CIRCUIT_BRAIN) + +/datum/preference/choiced/brain_type/create_default_value() + return ORGAN_PREF_POSI_BRAIN + +/datum/preference/choiced/brain_type/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) + if(!issynthetic(target)) + return + + var/obj/item/organ/internal/brain/new_brain = target.prefs_get_brain_to_use(value) + var/obj/item/organ/internal/brain/old_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN) + + if(!new_brain || new_brain == old_brain.type) + return + + var/datum/mind/keep_me_safe = target.mind + + new_brain = new new_brain() + + new_brain.modular_persistence = old_brain.modular_persistence + old_brain.modular_persistence = null + + new_brain.Insert(target, movement_flags = DELETE_IF_REPLACED) + + // Prefs can be applied to mindless mobs, let's not try to move the non-existent mind back in! + if(!keep_me_safe) + return + + keep_me_safe.transfer_to(target, TRUE) diff --git a/modular_nova/master_files/code/modules/client/preferences/clothing.dm b/modular_nova/master_files/code/modules/client/preferences/clothing.dm new file mode 100644 index 00000000000000..7da9a8ab77c111 --- /dev/null +++ b/modular_nova/master_files/code/modules/client/preferences/clothing.dm @@ -0,0 +1,84 @@ +/datum/preference/choiced/socks/compile_constant_data() + var/list/data = ..() + + data[SUPPLEMENTAL_FEATURE_KEY] = "socks_color" + + return data + +/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 !(TRAIT_NO_UNDERWEAR in species.inherent_traits) + +/datum/preference/choiced/undershirt/compile_constant_data() + var/list/data = ..() + + data[SUPPLEMENTAL_FEATURE_KEY] = "undershirt_color" + + return data + +/datum/preference/choiced/undershirt/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 !(TRAIT_NO_UNDERWEAR in species.inherent_traits) + +/datum/preference/choiced/underwear/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 !(TRAIT_NO_UNDERWEAR in species.inherent_traits) + +/datum/preference/choiced/bra + savefile_key = "bra" + savefile_identifier = PREFERENCE_CHARACTER + main_feature_name = "Bra" + category = PREFERENCE_CATEGORY_CLOTHING + should_generate_icons = TRUE + +/datum/preference/choiced/bra/init_possible_values() + return assoc_to_keys_features(GLOB.bra_list) + +/datum/preference/choiced/bra/icon_for(value) + var/static/icon/body + if (isnull(body)) + body = icon('icons/mob/human/bodyparts_greyscale.dmi', "human_r_arm") + body.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_l_arm"), ICON_OVERLAY) + body.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_r_hand"), ICON_OVERLAY) + body.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_l_hand"), ICON_OVERLAY) + body.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_chest_m"), ICON_OVERLAY) + + var/icon/icon_with_bra = icon(body) + + if (value != "Nude") + var/datum/sprite_accessory/accessory = GLOB.bra_list[value] + icon_with_bra.Blend(icon(accessory.icon, accessory.icon_state), ICON_OVERLAY) + + icon_with_bra.Crop(10, 11, 22, 23) // NOVA EDIT CHANGE : ORIGINAL - icon_with_undershirt.Crop(9, 9, 23, 23) + icon_with_bra.Scale(32, 32) + return icon_with_bra + +/datum/preference/choiced/bra/apply_to_human(mob/living/carbon/human/target, value) + target.bra = value + +/datum/preference/choiced/bra/compile_constant_data() + var/list/data = ..() + + data[SUPPLEMENTAL_FEATURE_KEY] = "bra_color" + + return data + +/datum/preference/choiced/bra/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 !(TRAIT_NO_UNDERWEAR in species.inherent_traits) diff --git a/modular_skyrat/master_files/code/modules/client/preferences/delete_sparks.dm b/modular_nova/master_files/code/modules/client/preferences/delete_sparks.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/delete_sparks.dm rename to modular_nova/master_files/code/modules/client/preferences/delete_sparks.dm diff --git a/modular_skyrat/master_files/code/modules/client/preferences/emote_overlay.dm b/modular_nova/master_files/code/modules/client/preferences/emote_overlay.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/emote_overlay.dm rename to modular_nova/master_files/code/modules/client/preferences/emote_overlay.dm diff --git a/modular_skyrat/master_files/code/modules/client/preferences/emote_panel.dm b/modular_nova/master_files/code/modules/client/preferences/emote_panel.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/emote_panel.dm rename to modular_nova/master_files/code/modules/client/preferences/emote_panel.dm diff --git a/modular_skyrat/master_files/code/modules/client/preferences/erp_preferences.dm b/modular_nova/master_files/code/modules/client/preferences/erp_preferences.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/erp_preferences.dm rename to modular_nova/master_files/code/modules/client/preferences/erp_preferences.dm diff --git a/modular_skyrat/master_files/code/modules/client/preferences/face_cursor_combat_mode.dm b/modular_nova/master_files/code/modules/client/preferences/face_cursor_combat_mode.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/face_cursor_combat_mode.dm rename to modular_nova/master_files/code/modules/client/preferences/face_cursor_combat_mode.dm diff --git a/modular_skyrat/master_files/code/modules/client/preferences/flavor_text.dm b/modular_nova/master_files/code/modules/client/preferences/flavor_text.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/flavor_text.dm rename to modular_nova/master_files/code/modules/client/preferences/flavor_text.dm diff --git a/modular_skyrat/master_files/code/modules/client/preferences/genitals.dm b/modular_nova/master_files/code/modules/client/preferences/genitals.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/genitals.dm rename to modular_nova/master_files/code/modules/client/preferences/genitals.dm diff --git a/modular_skyrat/master_files/code/modules/client/preferences/ghost.dm b/modular_nova/master_files/code/modules/client/preferences/ghost.dm similarity index 90% rename from modular_skyrat/master_files/code/modules/client/preferences/ghost.dm rename to modular_nova/master_files/code/modules/client/preferences/ghost.dm index 0530276c5bb21e..38eb418b5035a1 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/ghost.dm +++ b/modular_nova/master_files/code/modules/client/preferences/ghost.dm @@ -17,7 +17,7 @@ join_action.Remove(ghost) return TRUE - var/datum/action/innate/join_soulcatcher/new_join_action = new + var/datum/action/innate/join_soulcatcher/new_join_action = new(ghost) new_join_action.Grant(ghost) return TRUE diff --git a/modular_skyrat/master_files/code/modules/client/preferences/headshot.dm b/modular_nova/master_files/code/modules/client/preferences/headshot.dm similarity index 89% rename from modular_skyrat/master_files/code/modules/client/preferences/headshot.dm rename to modular_nova/master_files/code/modules/client/preferences/headshot.dm index 44351be0fcf7e5..5899286907382b 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/headshot.dm +++ b/modular_nova/master_files/code/modules/client/preferences/headshot.dm @@ -47,10 +47,3 @@ stored_link[usr?.ckey] = value usr?.client?.prefs.headshot = value return TRUE - -/datum/preference/text/headshot/is_accessible(datum/preferences/preferences) - if(isnull(usr)) // Joining at roundstart - return ..() - if(!SSplayer_ranks.is_veteran(usr?.client) && !GLOB.donator_list[usr?.ckey] && !is_admin(usr?.client)) - return FALSE - return ..() diff --git a/modular_skyrat/master_files/code/modules/client/preferences/laugh.dm b/modular_nova/master_files/code/modules/client/preferences/laugh.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/laugh.dm rename to modular_nova/master_files/code/modules/client/preferences/laugh.dm diff --git a/modular_skyrat/master_files/code/modules/client/preferences/loadout_override_preference.dm b/modular_nova/master_files/code/modules/client/preferences/loadout_override_preference.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/loadout_override_preference.dm rename to modular_nova/master_files/code/modules/client/preferences/loadout_override_preference.dm diff --git a/modular_skyrat/master_files/code/modules/client/preferences/looc.dm b/modular_nova/master_files/code/modules/client/preferences/looc.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/looc.dm rename to modular_nova/master_files/code/modules/client/preferences/looc.dm diff --git a/modular_skyrat/master_files/code/modules/client/preferences/middleware/languages.dm b/modular_nova/master_files/code/modules/client/preferences/middleware/languages.dm similarity index 97% rename from modular_skyrat/master_files/code/modules/client/preferences/middleware/languages.dm rename to modular_nova/master_files/code/modules/client/preferences/middleware/languages.dm index 22a0854e88da1b..d9412fd806650c 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/middleware/languages.dm +++ b/modular_nova/master_files/code/modules/client/preferences/middleware/languages.dm @@ -65,7 +65,7 @@ var/list/data = list() - var/max_languages = preferences.all_quirks.Find(QUIRK_LINGUIST) ? MAX_LANGUAGES_LINGUIST : MAX_LANGUAGES_NORMAL + var/max_languages = preferences.all_quirks.Find(TRAIT_LINGUIST) ? MAX_LANGUAGES_LINGUIST : MAX_LANGUAGES_NORMAL var/species_type = preferences.read_preference(/datum/preference/choiced/species) var/datum/species/species = new species_type() var/datum/language_holder/lang_holder = preferences.get_adjusted_language_holder() @@ -125,7 +125,7 @@ */ /datum/preference_middleware/languages/proc/give_language(list/params) var/language_name = params["language_name"] - var/max_languages = preferences.all_quirks.Find(QUIRK_LINGUIST) ? MAX_LANGUAGES_LINGUIST : MAX_LANGUAGES_NORMAL + var/max_languages = preferences.all_quirks.Find(TRAIT_LINGUIST) ? MAX_LANGUAGES_LINGUIST : MAX_LANGUAGES_NORMAL if(preferences.languages && preferences.languages.len == max_languages) // too many languages return TRUE diff --git a/modular_skyrat/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm b/modular_nova/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm rename to modular_nova/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm diff --git a/modular_skyrat/master_files/code/modules/client/preferences/middleware/species_additional_changes.dm b/modular_nova/master_files/code/modules/client/preferences/middleware/species_additional_changes.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/middleware/species_additional_changes.dm rename to modular_nova/master_files/code/modules/client/preferences/middleware/species_additional_changes.dm diff --git a/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm b/modular_nova/master_files/code/modules/client/preferences/mutant_parts.dm similarity index 99% rename from modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm rename to modular_nova/master_files/code/modules/client/preferences/mutant_parts.dm index fd11a6bd3b5399..57c26e4dd37a93 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm +++ b/modular_nova/master_files/code/modules/client/preferences/mutant_parts.dm @@ -164,6 +164,9 @@ . = ..() var/obj/item/bodypart/head/our_head = target.get_bodypart(BODY_ZONE_HEAD) + if(isnull(our_head)) // dullahans. + return + if(.) our_head.bodytype |= BODYTYPE_SNOUTED else diff --git a/modular_skyrat/master_files/code/modules/client/preferences/out_of_combat_fov_darkness.dm b/modular_nova/master_files/code/modules/client/preferences/out_of_combat_fov_darkness.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/out_of_combat_fov_darkness.dm rename to modular_nova/master_files/code/modules/client/preferences/out_of_combat_fov_darkness.dm diff --git a/modular_nova/master_files/code/modules/client/preferences/quirks/death_consequences.dm b/modular_nova/master_files/code/modules/client/preferences/quirks/death_consequences.dm new file mode 100644 index 00000000000000..0ba0e301914e51 --- /dev/null +++ b/modular_nova/master_files/code/modules/client/preferences/quirks/death_consequences.dm @@ -0,0 +1,165 @@ +/datum/preference/numeric/death_consequences + abstract_type = /datum/preference/numeric/death_consequences + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED + savefile_identifier = PREFERENCE_CHARACTER + + step = 0.01 + +/datum/preference/numeric/death_consequences/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) + return FALSE + +/datum/preference/numeric/death_consequences/starting_degradation + savefile_key = "dc_starting_degradation" + + minimum = 0 + maximum = DEATH_CONSEQUENCES_MAXIMUM_THEORETICAL_DEGRADATION + +/datum/preference/numeric/death_consequences/starting_degradation/create_default_value() + return minimum + +/datum/preference/numeric/death_consequences/max_degradation + savefile_key = "dc_max_degradation" + + minimum = 0 + maximum = DEATH_CONSEQUENCES_MAXIMUM_THEORETICAL_DEGRADATION + +/datum/preference/numeric/death_consequences/max_degradation/create_default_value() + return DEATH_CONSEQUENCES_DEFAULT_MAX_DEGRADATION + +/datum/preference/numeric/death_consequences/living_degradation_recovery_per_second + savefile_key = "dc_living_degradation_recovery_per_second" + + minimum = -100 // if you want, you can just die slowly + maximum = 1000 + +/datum/preference/numeric/death_consequences/living_degradation_recovery_per_second/create_default_value() + return DEATH_CONSEQUENCES_DEFAULT_LIVING_DEGRADATION_RECOVERY + +/datum/preference/numeric/death_consequences/dead_degradation_per_second + savefile_key = "dc_dead_degradation_per_second" + + minimum = 0 + maximum = 1000 + +/datum/preference/numeric/death_consequences/dead_degradation_per_second/create_default_value() + return 0 + +/datum/preference/numeric/death_consequences/degradation_on_death + savefile_key = "dc_degradation_on_death" + + minimum = 0 + maximum = 1000 + +/datum/preference/numeric/death_consequences/degradation_on_death/create_default_value() + return DEATH_CONSEQUENCES_DEFAULT_DEGRADATION_ON_DEATH + +/datum/preference/numeric/death_consequences/formeldahyde_dead_degradation_mult + savefile_key = "dc_formeldahyde_dead_degradation_mult" + + minimum = 0 + maximum = 1 + +/datum/preference/numeric/death_consequences/formeldahyde_dead_degradation_mult/create_default_value() + return 0 + +/datum/preference/numeric/death_consequences/stasis_dead_degradation_mult + savefile_key = "dc_stasis_dead_degradation_mult" + + minimum = 0 + maximum = 1 + +/datum/preference/numeric/death_consequences/stasis_dead_degradation_mult/create_default_value() + return 0 + +/datum/preference/numeric/death_consequences/rezadone_living_degradation_reduction + savefile_key = "dc_rezadone_living_degradation_reduction" + + minimum = 0 + maximum = 500 + +/datum/preference/numeric/death_consequences/rezadone_living_degradation_reduction/create_default_value() + return DEATH_CONSEQUENCES_DEFAULT_REZADONE_DEGRADATION_REDUCTION + +/datum/preference/numeric/death_consequences/eigenstasium_degradation_reduction + savefile_key = "dc_eigenstasium_degradation_reduction" + + minimum = 0 + maximum = 5000 + +/datum/preference/numeric/death_consequences/eigenstasium_degradation_reduction/create_default_value() + return DEATH_CONSEQUENCES_DEFAULT_EIGENSTASIUM_DEGRADATION_REDUCTION + +/datum/preference/numeric/death_consequences/crit_threshold_reduction_min_percent_of_max + savefile_key = "dc_crit_threshold_reduction_min_percent_of_max" + + minimum = 0 + maximum = 100 + +/datum/preference/numeric/death_consequences/crit_threshold_reduction_min_percent_of_max/create_default_value() + return 0 // percent + +/datum/preference/numeric/death_consequences/crit_threshold_reduction_percent_of_max + savefile_key = "dc_crit_threshold_reduction_percent_of_max" + + minimum = 0 + maximum = 100 + +/datum/preference/numeric/death_consequences/crit_threshold_reduction_percent_of_max/create_default_value() + return 100 // percent + +/datum/preference/numeric/death_consequences/max_crit_threshold_reduction + savefile_key = "dc_max_crit_threshold_reduction" + + minimum = 0 + maximum = MAX_LIVING_HEALTH + +/datum/preference/numeric/death_consequences/max_crit_threshold_reduction/create_default_value() + return 30 + +/datum/preference/numeric/death_consequences/stamina_damage_min_percent_of_max + savefile_key = "dc_stamina_damage_min_percent_of_max" + + minimum = 0 + maximum = 100 + +/datum/preference/numeric/death_consequences/stamina_damage_min_percent_of_max/create_default_value() + return 20 // percent + +/datum/preference/numeric/death_consequences/stamina_damage_percent_of_max + savefile_key = "dc_stamina_damage_percent_of_max" + + minimum = 0 + maximum = 100 + +/datum/preference/numeric/death_consequences/stamina_damage_percent_of_max/create_default_value() + return 100 // percent + +/datum/preference/numeric/death_consequences/max_stamina_damage + savefile_key = "dc_max_stamina_damage" + + minimum = 0 + maximum = 150 + +/datum/preference/numeric/death_consequences/max_stamina_damage/create_default_value() + return 80 + +// BOOLEANS + +/datum/preference/toggle/death_consequences + abstract_type = /datum/preference/toggle/death_consequences + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED + savefile_identifier = PREFERENCE_CHARACTER + +/datum/preference/toggle/death_consequences/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) + return FALSE + +/datum/preference/toggle/death_consequences/permakill_at_max + savefile_key = "dc_permakill_at_max" + + default_value = FALSE // lets not be too cruel here + +/datum/preference/toggle/death_consequences/force_death_if_permakilled + savefile_key = "dc_force_death_if_permakilled" + + default_value = FALSE + diff --git a/modular_skyrat/master_files/code/modules/client/preferences/scream.dm b/modular_nova/master_files/code/modules/client/preferences/scream.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/scream.dm rename to modular_nova/master_files/code/modules/client/preferences/scream.dm diff --git a/modular_skyrat/master_files/code/modules/client/preferences/species_features/digitigrade_legs.dm b/modular_nova/master_files/code/modules/client/preferences/species_features/digitigrade_legs.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/species_features/digitigrade_legs.dm rename to modular_nova/master_files/code/modules/client/preferences/species_features/digitigrade_legs.dm diff --git a/modular_skyrat/master_files/code/modules/client/preferences/species_features/generate_side_shots.dm b/modular_nova/master_files/code/modules/client/preferences/species_features/generate_side_shots.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/species_features/generate_side_shots.dm rename to modular_nova/master_files/code/modules/client/preferences/species_features/generate_side_shots.dm diff --git a/modular_skyrat/master_files/code/modules/client/preferences/tgui_prefs_migration.dm b/modular_nova/master_files/code/modules/client/preferences/tgui_prefs_migration.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/tgui_prefs_migration.dm rename to modular_nova/master_files/code/modules/client/preferences/tgui_prefs_migration.dm diff --git a/modular_skyrat/master_files/code/modules/client/preferences/underwear_color.dm b/modular_nova/master_files/code/modules/client/preferences/underwear_color.dm similarity index 93% rename from modular_skyrat/master_files/code/modules/client/preferences/underwear_color.dm rename to modular_nova/master_files/code/modules/client/preferences/underwear_color.dm index f7e5a86d5ea4e4..1900acec170ae9 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/underwear_color.dm +++ b/modular_nova/master_files/code/modules/client/preferences/underwear_color.dm @@ -1,4 +1,4 @@ -// THIS FILE HAS BEEN EDITED BY SKYRAT EDIT +// THIS FILE HAS BEEN EDITED BY NOVA EDIT /datum/preference/color/underwear_color savefile_key = "underwear_color" @@ -16,7 +16,7 @@ var/datum/species/species = new species_type return !(TRAIT_NO_UNDERWEAR in species.inherent_traits) -// SKYRAT EDIT ADDITION BEGIN - Colorable Undershirt/Socks +// NOVA EDIT ADDITION BEGIN - Colorable Undershirt/Socks /datum/preference/color/undershirt_color savefile_key = "undershirt_color" savefile_identifier = PREFERENCE_CHARACTER @@ -48,7 +48,7 @@ var/species_type = preferences.read_preference(/datum/preference/choiced/species) var/datum/species/species = new species_type return !(TRAIT_NO_UNDERWEAR in species.inherent_traits) -// SKYRAT EDIT ADDITION END - Colorable Undershirt/Socks +// NOVA EDIT ADDITION END - Colorable Undershirt/Socks /datum/preference/color/bra_color diff --git a/modular_skyrat/master_files/code/modules/client/preferences/voice.dm b/modular_nova/master_files/code/modules/client/preferences/voice.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences/voice.dm rename to modular_nova/master_files/code/modules/client/preferences/voice.dm diff --git a/modular_skyrat/master_files/code/modules/client/preferences_savefile.dm b/modular_nova/master_files/code/modules/client/preferences_savefile.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/client/preferences_savefile.dm rename to modular_nova/master_files/code/modules/client/preferences_savefile.dm diff --git a/modular_skyrat/master_files/code/modules/clothing/anthro_clothes.dm b/modular_nova/master_files/code/modules/clothing/anthro_clothes.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/clothing/anthro_clothes.dm rename to modular_nova/master_files/code/modules/clothing/anthro_clothes.dm diff --git a/modular_skyrat/master_files/code/modules/clothing/back/antigravityharness.dm b/modular_nova/master_files/code/modules/clothing/back/antigravityharness.dm similarity index 95% rename from modular_skyrat/master_files/code/modules/clothing/back/antigravityharness.dm rename to modular_nova/master_files/code/modules/clothing/back/antigravityharness.dm index ebad5b1ea19f18..a75b6c1b5c8334 100644 --- a/modular_skyrat/master_files/code/modules/clothing/back/antigravityharness.dm +++ b/modular_nova/master_files/code/modules/clothing/back/antigravityharness.dm @@ -7,15 +7,15 @@ #define EXTRAGRAVITY_STATE "gravityharness-extra" /obj/item/gravity_harness - icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi' name = "gravity suspension harness" desc = "A bootleg derivative of common Skrellian construction equipment, manufactured and heavily used by Deep Spacer tribes, this harness employs suspensor tech to either nullify or magnify gravity around the wearer." slot_flags = ITEM_SLOT_BACK icon_state = "gravityharness-off" worn_icon_state = "gravityharness-off" - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suit_digi.dmi' - worn_icon_teshari = 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/back.dmi' + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suit_digi.dmi' + worn_icon_teshari = 'modular_nova/master_files/icons/mob/clothing/species/teshari/back.dmi' actions_types = list(/datum/action/item_action/toggle_mode) w_class = WEIGHT_CLASS_HUGE /// The current operating mode @@ -122,7 +122,7 @@ new /obj/effect/temp_visual/mook_dust/robot(get_turf(src)) ADD_TRAIT(user, TRAIT_NEGATES_GRAVITY, CLOTHING_TRAIT) - playsound(src, 'modular_skyrat/master_files/sound/effects/robot_sit.ogg', 25) + playsound(src, 'modular_nova/master_files/sound/effects/robot_sit.ogg', 25) to_chat(user, span_notice("[src] shudders and hisses, projecting a local extra-gravity field.")) gravity_on = TRUE icon_state = EXTRAGRAVITY_STATE @@ -131,7 +131,7 @@ if(MODE_GRAVOFF) if(!user.has_gravity() && mode != MODE_GRAVOFF) new /obj/effect/temp_visual/mook_dust/robot(get_turf(src)) - playsound(src, 'modular_skyrat/master_files/sound/effects/robot_sit.ogg', 25) + playsound(src, 'modular_nova/master_files/sound/effects/robot_sit.ogg', 25) to_chat(user, span_notice("[src] lets out a soft whine as your suspension field dissipates, gravity around you normalizing.")) mode = MODE_GRAVOFF diff --git a/modular_skyrat/master_files/code/modules/clothing/base_clothes.dm b/modular_nova/master_files/code/modules/clothing/base_clothes.dm similarity index 92% rename from modular_skyrat/master_files/code/modules/clothing/base_clothes.dm rename to modular_nova/master_files/code/modules/clothing/base_clothes.dm index 07da17aa3eb126..fbcdad4e99718c 100644 --- a/modular_skyrat/master_files/code/modules/clothing/base_clothes.dm +++ b/modular_nova/master_files/code/modules/clothing/base_clothes.dm @@ -4,6 +4,8 @@ var/icon/worn_icon_digi /// The config type to use for greyscaled worn sprites for digitigrade characters. Both this and greyscale_colors must be assigned to work. var/greyscale_config_worn_digi + /// The config type to use for greyscaled worn sprites for characters with a muzzle sprite accessory. Both this and greyscale_colors must be assigned to work. + var/greyscale_config_worn_muzzled /// Icon file for mob worn overlays, if the user is a monkey. var/icon/worn_icon_monkey /// The config type to use for greyscale worn sprites for monkeys. Both this and greyscale_colors must be assigned to work. diff --git a/modular_skyrat/master_files/code/modules/clothing/chameleon.dm b/modular_nova/master_files/code/modules/clothing/chameleon.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/clothing/chameleon.dm rename to modular_nova/master_files/code/modules/clothing/chameleon.dm diff --git a/modular_nova/master_files/code/modules/clothing/clothing.dm b/modular_nova/master_files/code/modules/clothing/clothing.dm new file mode 100644 index 00000000000000..bc547fa3b3df2c --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/clothing.dm @@ -0,0 +1,62 @@ +GLOBAL_LIST_EMPTY(taur_clothing_icons) + +/obj/item/clothing + blocks_emissive = EMISSIVE_BLOCK_UNIQUE + /// For clothing that does not have body_parts_covered = CHEST /etc but that we would still like to be able to attach an accessory to + var/attachment_slot_override = NONE + +/obj/item/clothing/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", sound_effect = TRUE, attack_dir, armour_penetration = 0) + if(atom_integrity <= 0 && damage_flag == FIRE) // Our clothes don't get destroyed by fire, shut up stack trace >:( + return + + return ..() + +/** + * Proc to generate a taur variation of clothes, with the intent of caching them. + * It is meant for suits and uniforms at the moment, to cut out the bottom half so that + * it doesn't look too out of place. + * + * Arguments: + * * index - The index at which the icon will be stored. Overwrites existing icons if there was one, + * do your checks before calling this proc. + * * icon_to_process (/icon) - The icon we want to run through the process of masking off the bottom part of. + * * icon_state - The icon_state of the icon we're being given, to obtain a proper icon object. + * + * Add a `taur_type` here if you ever want to add different cropping options, for whatever reason. + */ +/proc/generate_taur_clothing(index, icon/icon_to_process, icon_state) + var/icon/taur_clothing_icon = icon("icon" = icon_to_process, "icon_state" = icon_state) + var/taur_icon_state = "taur" // Leaving this here in case we ever want to have different ones + var/icon/taur_cropping_mask = icon("icon" = 'modular_nova/master_files/icons/mob/clothing/taur_masking_helpers.dmi', "icon_state" = taur_icon_state) + taur_clothing_icon.Blend(taur_cropping_mask, ICON_MULTIPLY) + taur_clothing_icon = fcopy_rsc(taur_clothing_icon) + GLOB.taur_clothing_icons[index] = taur_clothing_icon + +/** + * Proc that handles returning a mutable appearance that can fit on a taur body without looking too janky! + * + * It will check the cache to see if there was already an icon created for the taur version of that item, + * and will generate one if there was none, and will return the proper icon straight from `GLOB.taur_clothing_icons`, + * to avoid expensive icon operations. + * + * Arguments: + * * icon_state - The icon state that was used to create the icon that will now be processed. + * Used to store the taur icon in the cache. + * * icon_to_process (/icon) - The icon that we want to process. Do note that this is already + * an icon, and NOT an icon file, because we want to be able to operate on icons that have been + * modified to fit female bodytypes, for instance. + * * layer - The layer we want the mutable appearance to be on. + * * female_type - The `female_flags` of the clothing item used to generate the icon that + * we're operating on, if appropriate, to allow the caching of female-fitted uniforms. + * * greyscale_colors - The colors of the icon if it was a greyscale one, to make this GAGS-compatible. + * + * Returns a taur-compatible mutable_appearance! + */ +/proc/wear_taur_version(icon_state, icon/icon_to_process, layer, female_type, greyscale_colors) + RETURN_TYPE(/mutable_appearance) + + var/index = "[icon_state]-[greyscale_colors]-[female_type]" + var/icon/taur_clothing_icon = GLOB.taur_clothing_icons[index] + if(!taur_clothing_icon) //Create standing/laying icons if they don't exist + generate_taur_clothing(index, icon_to_process, icon_state) + return mutable_appearance(GLOB.taur_clothing_icons[index], layer = -layer) diff --git a/modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/eyes.dm b/modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/eyes.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/eyes.dm rename to modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/eyes.dm diff --git a/modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/head.dm b/modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/head.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/head.dm rename to modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/head.dm diff --git a/modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/mask.dm b/modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/mask.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/mask.dm rename to modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/mask.dm diff --git a/modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/shoes.dm b/modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/shoes.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/shoes.dm rename to modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/shoes.dm diff --git a/modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/suit.dm b/modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/suit.dm new file mode 100644 index 00000000000000..26b6d64a6ccf0e --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/suit.dm @@ -0,0 +1,208 @@ + +/** + * NO NEW ICON + * Clothing that do not require a new icon to function correctly, think, big jackets. + */ + +/obj/item/clothing/suit/bio_suit/plaguedoctorsuit + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/toggle/chef + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/jacket/det_suit + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/toggle/lawyer + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/toggle/suspenders + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/toggle/labcoat/paramedic + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/jacket/miljacket + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/jacket + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/costume/wellworn_shirt + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/costume/poncho + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + gets_cropped_on_taurs = FALSE + +/obj/item/clothing/suit/wizrobe + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/hooded/bee_costume + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/chaplainsuit/holidaypriest + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/hazardvest + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/costume/pirate/captain + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/jacket/curator + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +//Chaplain Suits +/obj/item/clothing/suit/hooded/chaplain_hoodie + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/hooded/chaplainsuit + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/chaplainsuit + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON +//End Chaplain Suits + + +/obj/item/clothing/suit/hooded/cultrobes/void + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/hooded/cultrobes/eldritch + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/armor/hos/trenchcoat + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/armor/vest + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/armor/reactive + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/changeling + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/costume/whitedress + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/hooded/ethereal_raincoat + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/costume/snowman + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/costume/hawaiian + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/costume/tmc + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/costume/pg + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/costume/soviet + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/jacket/oversized + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/jacket/fancy + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/space/officer + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/space/changeling + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/hooded/wintercoat + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + gets_cropped_on_taurs = FALSE + +/obj/item/clothing/suit/toggle/cargo_tech + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/jacket/quartermaster + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/** + * NONE(Squash) + * Clothing that does not have a digitigrade version, and thus will squash legs to fit. + */ + +/obj/item/clothing/suit/armor/changeling + supports_variations_flags = NONE + +/obj/item/clothing/suit/armor/vest/ctf + supports_variations_flags = NONE + +/obj/item/clothing/suit/space/hunter + supports_variations_flags = NONE + +/obj/item/clothing/suit/costume/deckers + supports_variations_flags = NONE + +/obj/item/clothing/suit/costume/yuri + supports_variations_flags = NONE + +/obj/item/clothing/suit/costume/football_armor + supports_variations_flags = NONE + +/obj/item/clothing/suit/hooded/cloak/godslayer + supports_variations_flags = NONE + +/obj/item/clothing/suit/hooded/techpriest + supports_variations_flags = NONE + +/** + * SUBTYPE WITH NEW ICON + * Clothing that has a digitigrade version, but its parent was set to something else earlier in this file or elsewhere entirely. + */ +/obj/item/clothing/suit/wizrobe/magusblue + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + +/obj/item/clothing/suit/wizrobe/magusred + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + +/obj/item/clothing/suit/wizrobe/santa + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + +/obj/item/clothing/suit/apron/overalls + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + +/obj/item/clothing/suit/armor/vest/capcarapace/captains_formal + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + +/obj/item/clothing/suit/armor/vest/warden + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + +/obj/item/clothing/suit/armor/vest/leather + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + +/obj/item/clothing/suit/armor/vest/marine/security + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + +/obj/item/clothing/suit/armor/vest/marine/engineer + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + +/obj/item/clothing/suit/armor/riot + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + +//Chaplain Suits +//TG neglected to sort between legged and robed, so we'll have to just manually set each one +/obj/item/clothing/suit/chaplainsuit/armor/studentuni + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION //Prevents a few glaring missing pixels + +/obj/item/clothing/suit/chaplainsuit/armor/clock + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + +/obj/item/clothing/suit/chaplainsuit/armor/templar + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + +/obj/item/clothing/suit/chaplainsuit/armor/ancient + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + +/obj/item/clothing/suit/chaplainsuit/shrinehand + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION //Prevents a few glaring missing pixels +//End Chaplain Suits diff --git a/modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/under.dm b/modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/under.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/under.dm rename to modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/under.dm diff --git a/modular_skyrat/master_files/code/modules/clothing/glasses/_glasses.dm b/modular_nova/master_files/code/modules/clothing/glasses/_glasses.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/clothing/glasses/_glasses.dm rename to modular_nova/master_files/code/modules/clothing/glasses/_glasses.dm diff --git a/modular_nova/master_files/code/modules/clothing/glasses/nerve_staple.dm b/modular_nova/master_files/code/modules/clothing/glasses/nerve_staple.dm new file mode 100644 index 00000000000000..13b22546e25255 --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/glasses/nerve_staple.dm @@ -0,0 +1,25 @@ +/obj/item/clothing/glasses/nerve_staple + name = "\proper a nerve staple" + desc = "A horrific looking device that is stapled into your face" + icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi' + icon_state = "nerve_staple" + worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi' + worn_icon_state = "nerve_staple" + resistance_flags = FIRE_PROOF | ACID_PROOF + clothing_traits = list(TRAIT_PACIFISM) + +/obj/item/clothing/glasses/nerve_staple/Initialize(mapload) + . = ..() + if (prob(20)) + worn_icon_state = "[initial(worn_icon_state)]_r" + +/obj/item/clothing/glasses/nerve_staple/equipped(mob/user, slot) + . = ..() + if (slot & ITEM_SLOT_EYES) + ADD_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT) + else + REMOVE_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT) + +/obj/item/clothing/glasses/nerve_staple/dropped(mob/user) + . = ..() + REMOVE_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT) diff --git a/modular_skyrat/master_files/code/modules/clothing/head/_head.dm b/modular_nova/master_files/code/modules/clothing/head/_head.dm similarity index 85% rename from modular_skyrat/master_files/code/modules/clothing/head/_head.dm rename to modular_nova/master_files/code/modules/clothing/head/_head.dm index 0c861e4c5dbbc4..6b25cd4be98376 100644 --- a/modular_skyrat/master_files/code/modules/clothing/head/_head.dm +++ b/modular_nova/master_files/code/modules/clothing/head/_head.dm @@ -31,23 +31,23 @@ UnregisterSignal(user, COMSIG_CARBON_UNEQUIP_HAT) /obj/item/clothing/head/bio_hood - worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/head/bio_muzzled.dmi' + worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/head/bio_muzzled.dmi' /obj/item/clothing/head/helmet - worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/head/helmet_muzzled.dmi' + worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/head/helmet_muzzled.dmi' /obj/item/clothing/head/helmet/toggleable/riot flags_inv = HIDEEARS|HIDEFACE //Removes HIDESNOUT so that transparent helmets still show the snout /obj/item/clothing/head/helmet/space - worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/head/spacehelm_muzzled.dmi' + worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/head/spacehelm_muzzled.dmi' flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR //Removes HIDESNOUT so that transparent helmets still show the snout /obj/item/clothing/head/helmet/chaplain - worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/head/chaplain_muzzled.dmi' + worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/head/chaplain_muzzled.dmi' /obj/item/clothing/head/collectable/welding - worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/head_muzzled.dmi' + worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/head_muzzled.dmi' supports_variations_flags = CLOTHING_SNOUTED_VARIATION //Re-adds HIDESNOUT to whatever needs it, and marks them CLOTHING_NO_VARIATION so they don't look for muzzled sprites diff --git a/modular_nova/master_files/code/modules/clothing/head/akula_official.dm b/modular_nova/master_files/code/modules/clothing/head/akula_official.dm new file mode 100644 index 00000000000000..73f59e716c7474 --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/head/akula_official.dm @@ -0,0 +1,20 @@ +/obj/item/clothing/head/hats/caphat/azulean + icon_state = "oldbloodcap" + icon = 'modular_nova/master_files/icons/obj/clothing/head/akula_official.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/akula_official.dmi' + +/obj/item/clothing/head/hats/caphat/azulean/old_blood + name = "\improper Oldblood's royal cap" + desc = "A peaked cap typically seen on nobles and high-rankers of the Agurkrral Royal Navy, this service hat has a long history in the Old Principalities. \ + Comfortable and lightweight, the purpose of this cap has gradually shifted to becoming yet another method to flex rank. \n\n\ + Threaded gold is often seen in the campaign cords attached to it, and the emblems on them grow more and more complex based on ranking; \ + and of course, importance to the King." + icon_state = "oldbloodcap" + +/obj/item/clothing/head/hats/caphat/azulean/upstart + name = "\improper Upstart's noble cap" + desc = "A peaked cap widely seen across the New Principalities. \n\ + Combining ideas from both the NRI and the Old Principalities, this cloneleather cap was made to be both inexpensive and easier to maintain than the elaborate headpieces worn by the older nobility. \ + Border princes of all make and model are known to put their own personal emblems on these instead of any coherent ranking system, \ + and the cap features a wider brim in order to shield Azulean eyes from the alien suns they intend to grasp." + icon_state = "upstartcap" diff --git a/modular_skyrat/master_files/code/modules/clothing/head/cowboy.dm b/modular_nova/master_files/code/modules/clothing/head/cowboy.dm similarity index 84% rename from modular_skyrat/master_files/code/modules/clothing/head/cowboy.dm rename to modular_nova/master_files/code/modules/clothing/head/cowboy.dm index 5e20ad1bfd5f0a..08315b9d364b6b 100644 --- a/modular_skyrat/master_files/code/modules/clothing/head/cowboy.dm +++ b/modular_nova/master_files/code/modules/clothing/head/cowboy.dm @@ -1,18 +1,18 @@ /obj/item/clothing/head/cowboy supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON -/obj/item/clothing/head/cowboy/skyrat +/obj/item/clothing/head/cowboy/nova name = "SR COWBOY HAT DEBUG" desc = "REPORT THIS IF FOUND" - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/cowboy.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/cowboy.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/head/cowboy.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/cowboy.dmi' icon_state = null //Keeps this from showing up under the chameleon hat worn_icon_state = null //TG defaults this to "hunter" and breaks our items flags_inv = SHOWSPRITEEARS armor_type = /datum/armor/none resistance_flags = NONE //TG defaults cowboy hats to fireproof/acidproof -/obj/item/clothing/head/cowboy/skyrat/wide +/obj/item/clothing/head/cowboy/nova/wide name = "wide brimmed hat" desc = "A wide-brimmed hat, to keep the sun out of your eyes in style." icon_state = "widebrim" @@ -21,7 +21,7 @@ greyscale_config_worn = /datum/greyscale_config/cowboy_wide/worn flags_1 = IS_PLAYER_COLORABLE_1 -/obj/item/clothing/head/cowboy/skyrat/wide/feathered +/obj/item/clothing/head/cowboy/nova/wide/feathered name = "wide brimmed feathered hat" desc = "A wide-brimmed hat adorned with a feather, the perfect flourish to a rugged outfit." icon_state = "widebrim_feathered" @@ -29,7 +29,7 @@ greyscale_config = /datum/greyscale_config/cowboy_wide_feathered greyscale_config_worn = /datum/greyscale_config/cowboy_wide_feathered/worn -/obj/item/clothing/head/cowboy/skyrat/flat +/obj/item/clothing/head/cowboy/nova/flat name = "flat brimmed hat" desc = "A finely made hat with a short flat brim, perfect for an old fashioned shootout." icon_state = "flatbrim" @@ -38,7 +38,7 @@ greyscale_config_worn = /datum/greyscale_config/cowboy_flat/worn flags_1 = IS_PLAYER_COLORABLE_1 -/obj/item/clothing/head/cowboy/skyrat/flat/cowl +/obj/item/clothing/head/cowboy/nova/flat/cowl name = "flat brimmed hat with cowl" desc = "A finely made hat with a short flat brim, paired with a snug and warm cowl. Today's a cold day to die..." icon_state = "flatbrim_cowl" @@ -49,7 +49,7 @@ min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT flags_inv = HIDEHAIR | SHOWSPRITEEARS -/obj/item/clothing/head/cowboy/skyrat/cattleman +/obj/item/clothing/head/cowboy/nova/cattleman name = "cattleman hat" desc = "A hat with a creased brim and a tall crown, intended to be pushed down further on the head to stay on in harsh weather. Not as relevant in space but still comes in handy." icon_state = "cattleman" @@ -58,7 +58,7 @@ greyscale_config_worn = /datum/greyscale_config/cowboy_cattleman/worn flags_1 = IS_PLAYER_COLORABLE_1 -/obj/item/clothing/head/cowboy/skyrat/cattleman/wide +/obj/item/clothing/head/cowboy/nova/cattleman/wide name = "wide brimmed cattleman hat" desc = "A hat with a wide, slightly creased brim. Good for working in the sun, not so much for fitting through tight gaps." icon_state = "cattleman_wide" @@ -68,32 +68,32 @@ flags_1 = IS_PLAYER_COLORABLE_1 //Presets -/obj/item/clothing/head/cowboy/skyrat/flat/sheriff +/obj/item/clothing/head/cowboy/nova/flat/sheriff name = "sheriff hat" desc = "A dark brown hat with a smell of whiskey. There's a small set of antlers embroidered on the inside." greyscale_colors = "#704640#8f89ae" flags_1 = NONE //No recoloring presets -/obj/item/clothing/head/cowboy/skyrat/flat/deputy +/obj/item/clothing/head/cowboy/nova/flat/deputy name = "deputy hat" desc = "A light brown hat with a smell of iron. There's a small set of antlers embroidered on the inside." greyscale_colors = "#c26934#8f89ae" flags_1 = NONE //No recoloring presets -/obj/item/clothing/head/cowboy/skyrat/flat/cowl/sheriff +/obj/item/clothing/head/cowboy/nova/flat/cowl/sheriff name = "winter sheriff hat" desc = "A dark hat with a matching dark cowl, warm yet breathable. There's a small set of antlers embroidered on the inside." greyscale_colors = "#3F3F3F#716349#3F3F3F" flags_1 = NONE //No recoloring presets -/obj/item/clothing/head/cowboy/skyrat/cattleman/sec +/obj/item/clothing/head/cowboy/nova/cattleman/sec name = "security cattleman hat" desc = "A security cattleman hat, perfect for any true lawman." greyscale_colors = "#39393F#3F6E9E" armor_type = /datum/armor/head_helmet flags_1 = NONE //No recoloring presets -/obj/item/clothing/head/cowboy/skyrat/cattleman/wide/sec +/obj/item/clothing/head/cowboy/nova/cattleman/wide/sec name = "wide brimmed security cattleman hat" desc = "A bandit turned sheriff, his enforcement is brutal but effective - whether out of fear or respect is unclear, though not many bodies hang high. A peaceful land, a quiet people." greyscale_colors = "#39393F#3F6E9E" diff --git a/modular_skyrat/master_files/code/modules/clothing/head/monkey_magnification_helmet.dm b/modular_nova/master_files/code/modules/clothing/head/monkey_magnification_helmet.dm similarity index 91% rename from modular_skyrat/master_files/code/modules/clothing/head/monkey_magnification_helmet.dm rename to modular_nova/master_files/code/modules/clothing/head/monkey_magnification_helmet.dm index 1c4c286fa851c6..796e98a7bdcb0d 100644 --- a/modular_skyrat/master_files/code/modules/clothing/head/monkey_magnification_helmet.dm +++ b/modular_nova/master_files/code/modules/clothing/head/monkey_magnification_helmet.dm @@ -46,7 +46,7 @@ playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) return if(!(GLOB.ghost_role_flags & GHOSTROLE_STATION_SENTIENCE)) - say("ERROR: Central Command has temporarily outlawed monkey sentience helmets in this sector. NEAREST LAWFUL SECTOR: 2.537 million light years away.") + say("ERROR: Conglomeration of Colonists has temporarily outlawed monkey sentience helmets in this sector. NEAREST LAWFUL SECTOR: 2.537 million light years away.") return magnification = user // this polls ghosts visible_message(span_warning("[src] powers up!")) @@ -56,7 +56,15 @@ /obj/item/clothing/head/helmet/monkey_sentience/proc/connect(mob/user) 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?", + ROLE_MONKEY_HELMET, + poll_time = 5 SECONDS, + target_mob = magnification, + ignore_category = POLL_IGNORE_MONKEY_HELMET, + pic_source = magnification, + role_name_text = "mind magnified [magnification.real_name]", + ) polling = FALSE if(!magnification) return diff --git a/modular_skyrat/master_files/code/modules/clothing/masks/_masks.dm b/modular_nova/master_files/code/modules/clothing/masks/_masks.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/clothing/masks/_masks.dm rename to modular_nova/master_files/code/modules/clothing/masks/_masks.dm diff --git a/modular_nova/master_files/code/modules/clothing/outfits/ert.dm b/modular_nova/master_files/code/modules/clothing/outfits/ert.dm new file mode 100644 index 00000000000000..cade1a7fcffa04 --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/outfits/ert.dm @@ -0,0 +1,45 @@ +/* +* NOVA MODULAR OUTFITS FILE +* PUT ANY NEW ERT OUTFITS HERE +*/ + +/datum/outfit/centcom/asset_protection + name = "Asset Protection" + + uniform = /obj/item/clothing/under/rank/centcom/commander + back = /obj/item/mod/control/pre_equipped/apocryphal + shoes = /obj/item/clothing/shoes/combat/swat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated + mask = /obj/item/clothing/mask/gas/sechailer/swat + glasses = /obj/item/clothing/glasses/hud/toggle/thermal + l_pocket = /obj/item/flashlight + r_pocket = /obj/item/tank/internals/emergency_oxygen/double + belt = /obj/item/storage/belt/security/full + l_hand = /obj/item/gun/energy/pulse/carbine/loyalpin // if this is still bulky make it not bulky and storable on belt/back/bag/exosuit + id = /obj/item/card/id/advanced/centcom/ert + ears = /obj/item/radio/headset/headset_cent/alt + + skillchips = list(/obj/item/skillchip/disk_verifier) + + backpack_contents = list(/obj/item/storage/box/survival/engineer = 1,\ + /obj/item/storage/medkit/regular = 1,\ + /obj/item/storage/box/handcuffs = 1,\ + /obj/item/crowbar/power = 1, // this is their "all access" pass lmao + ) + +/datum/outfit/centcom/asset_protection/post_equip(mob/living/carbon/human/person, visualsOnly = FALSE) + if(visualsOnly) + return + + var/obj/item/radio/Radio = person.ears + Radio.set_frequency(FREQ_CENTCOM) + Radio.freqlock = TRUE + var/obj/item/card/id/ID = person.wear_id + ID.assignment = "Asset Protection" + ID.registered_name = person.real_name + ID.update_label() + ..() + +/datum/outfit/centcom/asset_protection/leader + name = "Asset Protection Officer" + head = /obj/item/clothing/head/helmet/space/beret diff --git a/modular_skyrat/master_files/code/modules/clothing/outfits/standard.dm b/modular_nova/master_files/code/modules/clothing/outfits/standard.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/clothing/outfits/standard.dm rename to modular_nova/master_files/code/modules/clothing/outfits/standard.dm diff --git a/modular_skyrat/master_files/code/modules/clothing/shoes/bananashoes.dm b/modular_nova/master_files/code/modules/clothing/shoes/bananashoes.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/clothing/shoes/bananashoes.dm rename to modular_nova/master_files/code/modules/clothing/shoes/bananashoes.dm diff --git a/modular_nova/master_files/code/modules/clothing/shoes/boots.dm b/modular_nova/master_files/code/modules/clothing/shoes/boots.dm new file mode 100644 index 00000000000000..474202c04dcbed --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/shoes/boots.dm @@ -0,0 +1,3 @@ +/obj/item/clothing/shoes/workboots/mining + icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi' // To keep the old version before #8911 + worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi' // To keep the old version before #8911 diff --git a/modular_skyrat/master_files/code/modules/clothing/shoes/sneakers.dm b/modular_nova/master_files/code/modules/clothing/shoes/sneakers.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/clothing/shoes/sneakers.dm rename to modular_nova/master_files/code/modules/clothing/shoes/sneakers.dm diff --git a/modular_nova/master_files/code/modules/clothing/shoes/wheelys.dm b/modular_nova/master_files/code/modules/clothing/shoes/wheelys.dm new file mode 100644 index 00000000000000..194a7b02f86b71 --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/shoes/wheelys.dm @@ -0,0 +1,4 @@ +/obj/item/clothing/shoes/wheelys + worn_icon_digi = 'modular_nova/master_files/icons/mob/large-worn-icons/64x64/feet_digi.dmi' + worn_icon_vox = 'modular_nova/master_files/icons/mob/clothing/species/vox/feet_64.dmi' + worn_icon_teshari = 'modular_nova/master_files/icons/mob/clothing/species/teshari/feet_64.dmi' diff --git a/modular_nova/master_files/code/modules/clothing/suits/_suits.dm b/modular_nova/master_files/code/modules/clothing/suits/_suits.dm new file mode 100644 index 00000000000000..f2d6570c1e2511 --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/suits/_suits.dm @@ -0,0 +1,26 @@ +/obj/item/clothing/suit + /// Does this object get cropped when worn by a taur on their suit or uniform slot? + var/gets_cropped_on_taurs = TRUE + +//Define worn_icon_digi below here for suits so we don't have to make whole new .dm files for each +/obj/item/clothing/suit/armor + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/armor_digi.dmi' + +/obj/item/clothing/suit/bio_suit + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/bio_digi.dmi' + +/obj/item/clothing/suit/wizrobe + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/wizard_digi.dmi' + gets_cropped_on_taurs = FALSE + +/obj/item/clothing/suit/toggle/labcoat + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/labcoat_digi.dmi' + +/obj/item/clothing/suit/space + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi' + +/obj/item/clothing/suit/chaplainsuit + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/chaplain_digi.dmi' + +/obj/item/clothing/suit/hooded/chaplainsuit + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/chaplain_digi.dmi' diff --git a/modular_nova/master_files/code/modules/clothing/suits/labcoat.dm b/modular_nova/master_files/code/modules/clothing/suits/labcoat.dm new file mode 100644 index 00000000000000..45fed4944f9d51 --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/suits/labcoat.dm @@ -0,0 +1,62 @@ +/obj/item/clothing/suit/toggle/labcoat + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/toggle/labcoat/nova + name = "SR LABCOAT SUIT DEBUG" + desc = "REPORT THIS IF FOUND" + icon = 'modular_nova/master_files/icons/obj/clothing/suits/labcoat.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/labcoat.dmi' + icon_state = null //Keeps this from showing up under the chameleon hat + +/obj/item/clothing/suit/toggle/labcoat/nova/rd + name = "research directors labcoat" + desc = "A Symphionia standard labcoat for certified Research Directors. It has an extra plastic-latex lining on the outside for more protection from chemical and viral hazards." + icon_state = "labcoat_rd" + body_parts_covered = CHEST|ARMS|LEGS + armor_type = /datum/armor/nova_rd + +/datum/armor/nova_rd + melee = 5 + bio = 80 + fire = 80 + acid = 70 + +/obj/item/clothing/suit/toggle/labcoat/nova/highvis + name = "high vis labcoat" + desc = "A high visibility vest for emergency responders, intended to draw attention away from the blood." + icon_state = "labcoat_highvis" + blood_overlay_type = "armor" + +/obj/item/clothing/suit/toggle/labcoat/nova/highvis/worn_overlays(mutable_appearance/standing, isinhands, icon_file) + . = ..() + if(!isinhands) + . += emissive_appearance(icon_file, "[icon_state]-emissive", src, alpha = src.alpha) + +/obj/item/clothing/suit/toggle/labcoat/hospitalgown //Intended to keep patients modest while still allowing for surgeries + name = "hospital gown" + desc = "A complicated drapery with an assortment of velcros and strings, designed to keep a patient modest during medical stay and surgeries." + icon_state = "labcoat_job" + greyscale_config = /datum/greyscale_config/labcoat + greyscale_config_worn = /datum/greyscale_config/labcoat/worn + greyscale_colors = "#478294#478294#478294#478294" + toggle_noun = "drapes" + body_parts_covered = NONE //Allows surgeries despite wearing it; hiding genitals is handled in /datum/sprite_accessory/genital/is_hidden() (Only place it'd work sadly) + armor_type = /datum/armor/none + equip_delay_other = 8 + +/obj/item/clothing/suit/toggle/labcoat/roboticist //Overwrite the TG Roboticist labcoat to Black and Red (not the Interdyne labcoat though) + greyscale_colors = "#2D2D33#88242D#88242D#88242D" + +/obj/item/clothing/suit/toggle/labcoat/medical //Renamed version of the Genetics labcoat for more generic medical purposes; just a subtype of /labcoat/ for the TG files + name = "medical labcoat" + desc = "A suit that protects against minor chemical spills. Has a blue stripe on the shoulder." + icon_state = "labcoat_job" + greyscale_config = /datum/greyscale_config/labcoat + greyscale_config_worn = /datum/greyscale_config/labcoat/worn + greyscale_colors = "#EEEEEE#4A77A1#4A77A1#7095C2" + +/obj/item/clothing/suit/toggle/labcoat/Initialize(mapload) + . = ..() + allowed += list( + /obj/item/handheld_soulcatcher, + ) diff --git a/modular_skyrat/master_files/code/modules/clothing/suits/skinsuits.dm b/modular_nova/master_files/code/modules/clothing/suits/skinsuits.dm similarity index 90% rename from modular_skyrat/master_files/code/modules/clothing/suits/skinsuits.dm rename to modular_nova/master_files/code/modules/clothing/suits/skinsuits.dm index 0b78049a650d84..eece468d77df7d 100644 --- a/modular_skyrat/master_files/code/modules/clothing/suits/skinsuits.dm +++ b/modular_nova/master_files/code/modules/clothing/suits/skinsuits.dm @@ -8,8 +8,8 @@ An attached Shoredress helm is often used in conjunction with a third-party oxygen supply to allow one to breathe, \ and open pores in the suit allow the body to be cooled by the perspiration of internal water. \n\ These suits are reputable among orbital workers for having very little interference with movement, and easy storage by simply folding them inside of any bubble-shaped helmet." - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/akula.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/akula.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/under/akula.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/akula.dmi' icon_state = "skinsuit" clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS @@ -35,8 +35,8 @@ and for what remains to stay in the frame. These are typically made of up to four layers of the stuff, working unintentionally to ensure the faces of their wearers are difficult to identify. \n\n\ In addition, the interlayer gives the helms sound insulation properties, and the ability to block UV radiation. \ These helmets are known for being distinctly uncomfortable in comparison to their civilian counterparts; cramped and with only the most barebones climate control tech." - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/akula.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/akula.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/head/akula.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/akula.dmi' icon_state = "skinsuithelmet" /obj/item/clothing/head/helmet/space/skinsuit_helmet/Initialize(mapload) @@ -54,8 +54,8 @@ Having sparse plating around the wearer's arms and legs, boarding teams are encouraged after their pod lands to do one thing: \ make use of their rapid movement, and render their enemies past tense. The armor is relatively hardy against ranged weapons, \ but the alloys involved are primarily constructed around resisting strikes from boarding axes, lances, and other common pirate-repellant weapons." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/akula.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/akula.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits/akula.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/akula.dmi' icon_state = "skinsuitarmor" base_icon_state = "skinsuitarmor" diff --git a/modular_nova/master_files/code/modules/clothing/suits/wintercoats.dm b/modular_nova/master_files/code/modules/clothing/suits/wintercoats.dm new file mode 100644 index 00000000000000..589ac71fe18404 --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/suits/wintercoats.dm @@ -0,0 +1,70 @@ +//File for modular wintercoats that aren't bundled with other stuff +//If the coat is part of a module (i.e. the Blueshield coat) then make sure it's subtyped under wintercoat/nova, but don't put it in this file! + +//Coat Basetype (The Assistant's Formal Coat) +/obj/item/clothing/suit/hooded/wintercoat/nova + name = "assistant's formal winter coat" + desc = "A dark gray winter coat with bronze-gold detailing, and a zipper in the shape of a toolbox." + icon = 'modular_nova/master_files/icons/obj/clothing/suits/wintercoat.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/wintercoat.dmi' + icon_state = "coataformal" + hoodtype = /obj/item/clothing/head/hooded/winterhood/nova + +//Hood Basetype (The Assistant's Formal Coat Hood) +/obj/item/clothing/head/hooded/winterhood/nova + icon = 'modular_nova/master_files/icons/obj/clothing/head/winterhood.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/winterhood.dmi' + icon_state = "hood_aformal" + +//Bartender +/obj/item/clothing/suit/hooded/wintercoat/nova/bartender + name = "bartender's winter coat" + desc = "A heavy jacket made from wool originally stolen from the chef's goat. This new design is made to fit the classic suit-and-tie aesthetic, but without the hypothermia." + icon_state = "coatbar" + allowed = list( + /obj/item/reagent_containers/cup/glass/shaker, + /obj/item/reagent_containers/cup/glass/flask, + /obj/item/reagent_containers/cup/rag + ) + hoodtype = /obj/item/clothing/head/hooded/winterhood/nova/bartender + +/obj/item/clothing/head/hooded/winterhood/nova/bartender + icon_state = "hood_bar" + +//Ratvar-themed +/obj/item/clothing/suit/hooded/wintercoat/nova/ratvar + name = "ratvarian winter coat" + desc = "A brass-plated button up winter coat. Instead of a zipper tab, it has a brass cog with a tiny red gemstone inset." + icon_state = "coatratvar" + hoodtype = /obj/item/clothing/head/hooded/winterhood/nova/ratvar + +/obj/item/clothing/head/hooded/winterhood/nova/ratvar + icon_state = "hood_ratvar" + +//Nar'sie-themed +/obj/item/clothing/suit/hooded/wintercoat/nova/narsie + name = "narsian winter coat" + desc = "A somber button-up in dark tones of grey entropy and a wicked crimson zipper. It's covered in intricate runes and symbols, and the zipper tab looks like a single drop of blood." + icon_state = "coatnarsie" + hoodtype = /obj/item/clothing/head/hooded/winterhood/nova/narsie + +/obj/item/clothing/head/hooded/winterhood/nova/narsie + desc = "A black winter hood full of whispering secrets that only she shall ever know." + icon_state = "hood_narsie" + +//Christmas +/obj/item/clothing/suit/hooded/wintercoat/nova/christmas + name = "christmas winter coat" + desc = "A festive Christmas coat, warm and lined with white, soft fabric. The zipper tab is a small Candy Cane!" + icon_state = "coatchristmas" + hoodtype = /obj/item/clothing/head/hooded/winterhood/nova/christmas + +/obj/item/clothing/head/hooded/winterhood/nova/christmas + icon_state = "hood_christmas" + +/obj/item/clothing/suit/hooded/wintercoat/nova/christmas/green + icon_state = "coatchristmas_green" + hoodtype = /obj/item/clothing/head/hooded/winterhood/nova/christmas/green + +/obj/item/clothing/head/hooded/winterhood/nova/christmas/green + icon_state = "hood_christmas_green" diff --git a/modular_skyrat/master_files/code/modules/clothing/towels.dm b/modular_nova/master_files/code/modules/clothing/towels.dm similarity index 96% rename from modular_skyrat/master_files/code/modules/clothing/towels.dm rename to modular_nova/master_files/code/modules/clothing/towels.dm index 040511f9ef356a..2712db1a26734f 100644 --- a/modular_skyrat/master_files/code/modules/clothing/towels.dm +++ b/modular_nova/master_files/code/modules/clothing/towels.dm @@ -10,11 +10,15 @@ #define TOWEL_USED "used" /// Icon path to the obj icon of the towel. -#define TOWEL_OBJ_ICON 'modular_skyrat/master_files/icons/obj/clothing/towel.dmi' +#define TOWEL_OBJ_ICON 'modular_nova/master_files/icons/obj/clothing/towel.dmi' /// Icon path to the worn icon of the towel. -#define TOWEL_WORN_ICON 'modular_skyrat/master_files/icons/mob/clothing/towel.dmi' +#define TOWEL_WORN_ICON 'modular_nova/master_files/icons/mob/clothing/towel.dmi' /// Icon path to the worn icon of the towel for digitigrades. -#define TOWEL_WORN_ICON_DIGI 'modular_skyrat/master_files/icons/mob/clothing/towel_digi.dmi' +#define TOWEL_WORN_ICON_DIGI 'modular_nova/master_files/icons/mob/clothing/towel_digi.dmi' +/// Icon path to the left-hand inhand icons of the towel. +#define TOWEL_LEFTHAND_ICON 'modular_nova/master_files/icons/mob/inhands/clothing/towel_lefthand.dmi' +/// Icon path to the right-hand inhand icons of the towel. +#define TOWEL_RIGHTHAND_ICON 'modular_nova/master_files/icons/mob/inhands/clothing/towel_righthand.dmi' /// How much cloth goes into a towel. #define TOWEL_CLOTH_AMOUNT 2 @@ -33,6 +37,9 @@ worn_icon_digi = TOWEL_WORN_ICON_DIGI icon_state = "towel" base_icon_state = "towel" + lefthand_file = TOWEL_LEFTHAND_ICON + righthand_file = TOWEL_RIGHTHAND_ICON + inhand_icon_state = "towel" force = 0 throwforce = 0 throw_speed = 1 diff --git a/modular_skyrat/master_files/code/modules/clothing/under/_under.dm b/modular_nova/master_files/code/modules/clothing/under/_under.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/clothing/under/_under.dm rename to modular_nova/master_files/code/modules/clothing/under/_under.dm diff --git a/modular_skyrat/master_files/code/modules/clothing/under/accessories.dm b/modular_nova/master_files/code/modules/clothing/under/accessories.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/clothing/under/accessories.dm rename to modular_nova/master_files/code/modules/clothing/under/accessories.dm diff --git a/modular_skyrat/master_files/code/modules/clothing/under/akula_jobs.dm b/modular_nova/master_files/code/modules/clothing/under/akula_jobs.dm similarity index 95% rename from modular_skyrat/master_files/code/modules/clothing/under/akula_jobs.dm rename to modular_nova/master_files/code/modules/clothing/under/akula_jobs.dm index 569a268ae96a95..f2c05c29725e98 100644 --- a/modular_skyrat/master_files/code/modules/clothing/under/akula_jobs.dm +++ b/modular_nova/master_files/code/modules/clothing/under/akula_jobs.dm @@ -1,5 +1,5 @@ /// The DMI containing the tail overlay sprites -#define TAIL_OVERLAY_DMI 'modular_skyrat/master_files/icons/mob/clothing/under/akula.dmi' +#define TAIL_OVERLAY_DMI 'modular_nova/master_files/icons/mob/clothing/under/akula.dmi' /// The proper layer to render the tail overlays onto #define TAIL_OVERLAY_LAYER 5.9 @@ -15,8 +15,8 @@ a great many chemicals or even drinks have been loaded in by adventurous or careless explorers of the New Principalities-- at fantastic personal risk to their gills. " icon_state = "default" base_icon_state = "default" - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/akula.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/akula.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/under/akula.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/akula.dmi' armor_type = /datum/armor/clothing_under/wetsuit body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS can_adjust = FALSE @@ -143,7 +143,7 @@ /obj/item/clothing/under/akula_wetsuit/job/science name = "science Shoredress wetsuit" - desc = "The 'Science'-Type Shoredress is yet another model commissioned by NanoTrasen. This suit has been adapted from 'Ordnance'-Type Shoredresses \ + desc = "The 'Science'-Type Shoredress is yet another model commissioned by Symphionia. This suit has been adapted from 'Ordnance'-Type Shoredresses \ used in the New Principalities predominantly by mining teams. \n\ It is made of a special polymer that provides some minor protection against explosives \ such as abandoned naval or land-based mines, and features an inbuilt external sterilization field to protect against biohazards typically found in strange places." @@ -157,7 +157,7 @@ /obj/item/clothing/under/akula_wetsuit/job/medical name = "medical Shoredress wetsuit" - desc = "The 'Medical'-Type Shoredress is yet another model commissioned by NanoTrasen. This suit has been adapted from exploration \ + desc = "The 'Medical'-Type Shoredress is yet another model commissioned by Symphionia. This suit has been adapted from exploration \ Shoredresses meant for use in murky or even outright toxic environments, being predominantly composed of self-sterilizing polymers with \ a system able to filter out all sorts of hazardous particles in the air or water including fumes, smoke, allergens, or ocean-bound toxins. \n\ This has made it convenient for the Company's medical division, let alone the plush interior to allow for greater comfortable standing hours." @@ -181,7 +181,7 @@ /obj/item/clothing/under/akula_wetsuit/job/command name = "command Shoredress wetsuit" - desc = "The 'Command'-Type Shoredress is yet another model commissioned by NanoTrasen; but the origins of this wetsuit lie in designs belonging to, \ + desc = "The 'Command'-Type Shoredress is yet another model commissioned by Symphionia; but the origins of this wetsuit lie in designs belonging to, \ typically, high-ranking officials and managers in the Old Principalities. \n\ The bright luminescent panels on the arms have been further set apart by similar paneling on the chest, meant to ensure the wearer looks distinct both in the water, on land, and even on camera. \n\ The temperature systems have been upgraded, as well as the choice to use more comfortable fabrics in the construction." @@ -198,8 +198,8 @@ The 'flexiglass' glass comprising the unit is chemically strengthened to be thin, light, and damage-resistant, but capable of bending even in half without shattering; all to allow you to touch your face. \n\ Some have taken to putting electronic displays around the face to help express emotion, or to signal nonverbally. \ These helms are normally attached to Shoredresses or Stardresses, but comes with a fitted neoprene collar to allow wear on essentially anything." - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/akula.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/akula.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/head/akula.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/akula.dmi' clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | SNUG_FIT | STACKABLE_HELMET_EXEMPT | HEADINTERNALS icon_state = "helmet" inhand_icon_state = "helmet" diff --git a/modular_nova/master_files/code/modules/clothing/under/akula_official.dm b/modular_nova/master_files/code/modules/clothing/under/akula_official.dm new file mode 100644 index 00000000000000..2179fbbcfe6f38 --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/under/akula_official.dm @@ -0,0 +1,35 @@ +/obj/item/clothing/under/rank/azulean + icon_state = "oldblood" + icon = 'modular_nova/master_files/icons/obj/clothing/under/centcom.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/centcom.dmi' + female_sprite_flags = NO_FEMALE_UNIFORM + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/under/rank/azulean/old_blood + name = "\improper Agurkrral Oldblood's royal regalia" + desc = "A service dress uniform of the Old Principalities of Agurkrral, a fashion shared by the majority of the nobility. \ + These outfits are known to normally be accessorized with gold trims and other rare metals, \ + constructed and treated specially for use in underwater environments; the dwellings of most of the crown's old guard. \n\n\ + Actual fish-leather is often used for the subtle pattern of scaling, and to ensure proper hydrodynamics while swimming. \ + Due to being constructed for comfort and flash rather than practicality, the technology used in Shoredresses to hydrate the wearer could not be implemented; \ + only a mount for a Shoredress's helm." + icon_state = "oldblood" + +/obj/item/clothing/under/rank/azulean/old_blood/skirt + name = "\improper Agurkrral Oldblood's royal regalia" + icon_state = "oldblood_skirt" + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + +/obj/item/clothing/under/rank/azulean/upstart + name = "\improper Agurkrral Upstart's noble getup" + desc = "Patterned off the dress uniforms of the Old Principalities, this sort of style belongs to the border princes of the New Principalities. \ + These outfits rebuke tradition to incorporate the use of imported leather, using reinforced clasps instead of shiny golden buttons. \n\n\ + Few decorations are normally seen in these clothing, owing to the tendency of their wearers to 'gallivant.' \ + Due to being constructed for a degree of expendability, the technology used in Shoredresses to hydrate the wearer is \ + an extremely rare sight in these outfits; only the mount for a Shoredress's helm." + icon_state = "upstart" + +/obj/item/clothing/under/rank/azulean/upstart/skirt + name = "\improper Agurkrral Upstart's noble getup" + icon_state = "upstart_skirt" + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY diff --git a/modular_nova/master_files/code/modules/clothing/under/color.dm b/modular_nova/master_files/code/modules/clothing/under/color.dm new file mode 100644 index 00000000000000..3cf741a105041f --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/under/color.dm @@ -0,0 +1,17 @@ +/obj/item/clothing/under/color + greyscale_config_worn_monkey = /datum/greyscale_config/jumpsuit/worn/monkey + +/obj/item/clothing/under/color/rainbow + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/color_digi.dmi' + +/** + * Random jumpsuit is the preferred style of the wearer if loaded as an outfit. + * This is cleaner than creating a ../skirt variant as skirts are precached into SSwardrobe + * and that causes runtimes for runtimes for this class as it qdels on Initialize. + */ +/obj/item/clothing/under/color/random/proc/get_random_variant() + var/mob/living/carbon/human/wearer = loc + if(istype(wearer) && wearer.jumpsuit_style == PREF_SKIRT) + return get_random_jumpskirt() + + return get_random_jumpsuit() diff --git a/modular_nova/master_files/code/modules/clothing/under/costume.dm b/modular_nova/master_files/code/modules/clothing/under/costume.dm new file mode 100644 index 00000000000000..7db737f5fd6d2a --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/under/costume.dm @@ -0,0 +1,138 @@ +/obj/item/clothing/under/costume + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi' + +/obj/item/clothing/under/costume/russian_officer + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/security_digi.dmi' + +/obj/item/clothing/under/costume/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/costume.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/costume.dmi' + can_adjust = FALSE + +//My least favorite file. Just... try to keep it sorted. And nothing over the top + +/* +* UNSORTED +*/ +/obj/item/clothing/under/costume/nova/cavalry + name = "cavalry uniform" + desc = "Dedicate yourself to something better. To loyalty, honour, for it only dies when everyone abandons it." + icon_state = "cavalry" //specifically an 1890s US Army Cavalry Uniform + +/obj/item/clothing/under/costume/deckers/alt //not even going to bother re-pathing this one because its such a unique case of 'TGs item has something but this alt doesnt' + name = "deckers maskless outfit" + desc = "A decker jumpsuit with neon blue coloring." + icon = 'modular_nova/master_files/icons/obj/clothing/under/costume.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/costume.dmi' + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi' + icon_state = "decking_jumpsuit" + can_adjust = FALSE + +/obj/item/clothing/under/costume/nova/bathrobe + name = "bathrobe" + desc = "A warm fluffy bathrobe, perfect for relaxing after finally getting clean." + icon = 'modular_nova/modules/GAGS/icons/suit/suit.dmi' + worn_icon = 'modular_nova/modules/GAGS/icons/suit/suit.dmi' + worn_icon_teshari = 'modular_nova/modules/GAGS/icons/suit/suit_teshari.dmi' + icon_state = "robes" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + greyscale_colors = "#ffffff" + greyscale_config = /datum/greyscale_config/bathrobe + greyscale_config_worn = /datum/greyscale_config/bathrobe/worn + greyscale_config_worn_teshari = /datum/greyscale_config/bathrobe/worn/teshari + greyscale_config_worn_better_vox = /datum/greyscale_config/bathrobe/worn/newvox + greyscale_config_worn_vox = /datum/greyscale_config/bathrobe/worn/oldvox + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + greyscale_colors = "#434d7a" //THATS RIGHT, FUCK YOU! THE BATHROBE CAN BE RECOLORED! + flags_1 = IS_PLAYER_COLORABLE_1 + +/* +* LUNAR AND JAPANESE CLOTHES +*/ + +/obj/item/clothing/under/costume/nova/qipao + name = "qipao" + desc = "A qipao, traditionally worn in ancient Earth China by women during social events and lunar new years." + icon_state = "qipao" + body_parts_covered = CHEST|GROIN|LEGS + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + greyscale_colors = "#2b2b2b" + greyscale_config = /datum/greyscale_config/qipao + greyscale_config_worn = /datum/greyscale_config/qipao/worn + greyscale_config_worn_digi = /datum/greyscale_config/qipao/worn/digi + flags_1 = IS_PLAYER_COLORABLE_1 + gets_cropped_on_taurs = FALSE + +/obj/item/clothing/under/costume/nova/cheongsam + name = "cheongsam" + desc = "A cheongsam, traditionally worn in ancient Earth China by men during social events and lunar new years." + icon_state = "cheongsam" + body_parts_covered = CHEST|GROIN|LEGS + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + greyscale_colors = "#2b2b2b" + greyscale_config = /datum/greyscale_config/cheongsam + greyscale_config_worn = /datum/greyscale_config/cheongsam/worn + greyscale_config_worn_digi = /datum/greyscale_config/cheongsam/worn/digi + flags_1 = IS_PLAYER_COLORABLE_1 + gets_cropped_on_taurs = FALSE + +/obj/item/clothing/under/costume/nova/yukata + name = "yukata" + desc = "A traditional ancient Earth Japanese yukata, typically worn in casual settings." + icon_state = "yukata" + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + greyscale_colors = "#2b2b2b" + greyscale_config = /datum/greyscale_config/yukata + greyscale_config_worn = /datum/greyscale_config/yukata/worn + greyscale_config_worn_digi = /datum/greyscale_config/yukata/worn/digi + flags_1 = IS_PLAYER_COLORABLE_1 + gets_cropped_on_taurs = FALSE + +/obj/item/clothing/under/costume/nova/kamishimo + name = "kamishimo" + desc = "A traditional ancient Earth Japanese Kamishimo." + icon_state = "kamishimo" + +/obj/item/clothing/under/costume/nova/kimono + name = "fancy kimono" + desc = "A traditional ancient Earth Japanese Kimono. Longer and fancier than a yukata." + icon_state = "kimono" + body_parts_covered = CHEST|GROIN|ARMS + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + +/* +* CHRISTMAS CLOTHES +*/ + +/obj/item/clothing/under/costume/nova/christmas + name = "christmas costume" + desc = "Can you believe it guys? Christmas. Just a lightyear away!" //Lightyear is a measure of distance I hate it being used for this joke :( + icon_state = "christmas_male" + greyscale_colors = "#cc0f0f#c4c2c2" + greyscale_config = /datum/greyscale_config/chrimbo + greyscale_config_worn = /datum/greyscale_config/chrimbo/worn + greyscale_config_worn_digi = /datum/greyscale_config/chrimbo/worn/digi + body_parts_covered = CHEST|GROIN|ARMS + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/under/costume/nova/christmas/green + name = "green christmas costume" + desc = "4:00, wallow in self-pity. 4:30, stare into the abyss. 5:00, solve world hunger, tell no one. 5:30, jazzercize; 6:30, dinner with me. I can't cancel that again. 7:00, wrestle with my self-loathing. I'm booked. Of course, if I bump the loathing to 9, I could still be done in time to lay in bed, stare at the ceiling and slip slowly into madness." + greyscale_colors = "#1a991a#c4c2c2" + +/obj/item/clothing/under/costume/nova/christmas/croptop + name = "sexy christmas costume" + desc = "About 550 years since the release of Mariah Carey's \"All I Want For Christmas is You\", society has yet to properly recover from its repercussions. Some still keep a gun as their christmas mantlepiece, just in case she's heard singing on their rooftop late in the night..." + icon_state = "christmas_female" + greyscale_colors = "#cc0f0f#c4c2c2" + greyscale_config = /datum/greyscale_config/chrimbo + greyscale_config_worn = /datum/greyscale_config/chrimbo/worn + greyscale_config_worn_digi = /datum/greyscale_config/chrimbo/worn/digi + body_parts_covered = CHEST|GROIN + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/under/costume/nova/christmas/croptop/green + name = "sexy green christmas costume" + desc = "Stupid. Ugly. Out of date. If I can't find something nice to wear I'm not going." + greyscale_colors = "#1a991a#c4c2c2" diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/cargo.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/cargo.dm new file mode 100644 index 00000000000000..2b9e911469b31b --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/under/jobs/cargo.dm @@ -0,0 +1,116 @@ +/obj/item/clothing/under/rank/cargo + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/cargo_digi.dmi' // Anything that was in the cargo.dmi, should be in the cargo_digi.dmi + +/obj/item/clothing/under/rank/cargo/tech/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/cargo.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/cargo.dmi' + +/obj/item/clothing/under/rank/cargo/qm/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/cargo.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/cargo.dmi' + +// Add a /obj/item/clothing/under/rank/cargo/miner/nova if you add miner uniforms + +/* +* CARGO TECH +*/ + +/obj/item/clothing/under/rank/cargo/tech/nova/utility + name = "supply utility uniform" + desc = "A utility uniform worn by employees of the Supply department." + icon_state = "util_cargo" + can_adjust = FALSE + +/obj/item/clothing/under/rank/cargo/tech/nova/utility/syndicate + armor_type = /datum/armor/clothing_under/utility_syndicate + has_sensor = NO_SENSORS + +/obj/item/clothing/under/rank/cargo/tech/nova/long + name = "cargo technician's long jumpsuit" + desc = "For crate-pushers who'd rather protect their legs than show them off." + icon_state = "cargo_long" + alt_covers_chest = FALSE + +/obj/item/clothing/under/rank/cargo/tech/nova/gorka + name = "supply gorka" + desc = "A rugged, utilitarian gorka worn by the Supply department." + icon_state = "gorka_cargo" + can_adjust = FALSE + +/obj/item/clothing/under/rank/cargo/tech/nova/turtleneck + name = "supply turtleneck" + desc = "A snug turtleneck sweater worn by the Supply department.." + icon_state = "turtleneck_cargo" + +/obj/item/clothing/under/rank/cargo/tech/nova/turtleneck/skirt + name = "supply skirtleneck" + desc = "A snug turtleneck sweater worn by Supply, this time with a skirt attached!" + icon_state = "skirtleneck" + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + +/obj/item/clothing/under/rank/cargo/tech/nova/evil + name = "black cargo uniform" + desc = "A standard cargo uniform with a more... Venerable touch to it." + icon_state = "qmsynd" + can_adjust = FALSE + +/obj/item/clothing/under/rank/cargo/tech/nova/casualman + name = "cargo technician casualwear" + desc = "A pair of stylish black jeans and a regular sweater for the relaxed technician." + icon_state = "cargotechjean" + can_adjust = FALSE + +/* +* QUARTERMASTER +*/ + +/obj/item/clothing/under/rank/cargo/qm/nova/gorka + name = "quartermaster's gorka" + desc = "A rugged, utilitarian gorka with silver markings. Unlike the regular employees', this one is lined with silk on the inside." + icon_state = "gorka_qm" + can_adjust = FALSE + +/obj/item/clothing/under/rank/cargo/qm/nova/turtleneck + name = "quartermaster's turtleneck" + desc = "A snug turtleneck sweater worn by the Quartermaster, characterized by the expensive-looking pair of suit pants." + icon_state = "turtleneck_qm" + +/obj/item/clothing/under/rank/cargo/qm/nova/turtleneck/skirt + name = "quartermaster's skirtleneck" + desc = "A snug turtleneck sweater worn by the Quartermaster, as shown by the elegant double-lining of its silk skirt." + icon_state = "skirtleneckQM" + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + +/obj/item/clothing/under/rank/cargo/qm/nova/interdyne + name = "deck officer's jumpsuit" + desc = "A dark suit with a classic cargo vest. For the ultimate master of all things paper." + icon_state = "qmsynd" + has_sensor = NO_SENSORS + armor_type = /datum/armor/clothing_under/nova_interdyne + can_adjust = FALSE + +/datum/armor/clothing_under/nova_interdyne + melee = 10 + fire = 50 + acid = 40 + +/obj/item/clothing/under/rank/cargo/qm/nova/formal + name = "quartermaster's formal jumpsuit" + desc = "A western-like alternate uniform for the old fashioned QM." + icon_state = "supply_chief" + can_adjust = FALSE + +/obj/item/clothing/under/rank/cargo/qm/nova/formal/skirt + name = "quartermaster's formal jumpskirt" + desc = "A western-like alternate uniform for the old fashioned QM. Skirt included!" + icon_state = "supply_chief_skirt" + can_adjust = FALSE + body_parts_covered = CHEST|GROIN|ARMS + dying_key = DYE_REGISTRY_JUMPSKIRT + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/under/rank/cargo/qm/nova/casual + name = "quartermaster's casualwear" + desc = "A brown jacket with matching trousers for the relaxed Quartermaster." + icon_state = "qmc" diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/centcom.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/centcom.dm new file mode 100644 index 00000000000000..9c85dabdfe225a --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/under/jobs/centcom.dm @@ -0,0 +1,35 @@ +//This file is for any station-aligned or neutral factions, not JUST Nanotrasen. +//Try to keep them all a subtype of centcom/nova, for file sorting and balance - all faction representatives should have the same/similarly armored uniforms + +/obj/item/clothing/under/rank/centcom + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/centcom_digi.dmi' // Anything that was in the rnd.dmi, should be in the rnd_digi.dmi + +/obj/item/clothing/under/rank/centcom/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/centcom.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/centcom.dmi' + +/* +* NANOTRASEN +*/ +//Check modular_nova\modules\nanotrasen_naval_command\code\clothing.dm for more of these! (Or, currently, ALL of these.) + +/* +* LOPLAND +*/ +/obj/item/clothing/under/rank/centcom/nova/lopland + name = "\improper Lopland corporate uniform" + desc = "A sleek jumpsuit worn by Lopland corporate. Its surprisingly well padded." + icon_state = "lopland_shirt" + worn_icon_state = "lopland_shirt" + +/obj/item/clothing/under/rank/centcom/nova/lopland/instructor + name = "\improper Lopland instructor's uniform" + desc = "A over-the-top, militaristic jumpsuit worn by Lopland-certified instructors, with a big Lopland logo slapped on the back. The amount of pockets could make a space marine cry." + icon_state = "lopland_tac" + worn_icon_state = "lopland_tac" + + +/* +* MISC +*/ +// pizza and other misc ERTs in this file too? diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/civilian/civilian.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/civilian/civilian.dm new file mode 100644 index 00000000000000..d4e9d3f07e3451 --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/under/jobs/civilian/civilian.dm @@ -0,0 +1,50 @@ +/obj/item/clothing/under/rank/civilian + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/civilian_digi.dmi' //Anything that was in TG's civilian.dmi, should be in our civilian_digi.dmi + +/obj/item/clothing/under/rank/civilian/lawyer // Lawyers' suits are in TG's suits.dmi + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi' + +/obj/item/clothing/under/rank/civilian/lawyer/bluesuit // EXCEPT THIS ONE. + greyscale_config_worn_digi = /datum/greyscale_config/buttondown_slacks/worn/digi + +/obj/item/clothing/under/rank/civilian/head_of_personnel/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/civilian.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/civilian.dmi' + can_adjust = FALSE //Just gonna set it to default for ease + +//TG's files separate this into Civilian, Clown/Mime, and Curator. We wont have as many, so all Service goes into this file. +//DO NOT ADD A /obj/item/clothing/under/rank/civilian/lawyer/nova. USE /obj/item/clothing/under/suit/nova FOR MODULAR SUITS (civilian/suits.dm). + +/* +* HEAD OF PERSONNEL +*/ + +/obj/item/clothing/under/rank/civilian/head_of_personnel/nova/imperial //Rank pins of the Grand Moff + name = "head of personnel's naval jumpsuit" + desc = "A pale green naval suit and a rank badge denoting the Personnel Officer. Target, maximum firepower." + icon_state = "imphop" + supports_variations_flags = NONE + +/obj/item/clothing/under/rank/civilian/head_of_personnel/nova/parade + name = "head of personnel's male formal uniform" + desc = "A luxurious uniform for the head of personnel, woven in a deep blue. On the lapel is a small pin in the shape of a corgi's head." + icon_state = "hop_parade_male" + +/obj/item/clothing/under/rank/civilian/head_of_personnel/nova/parade/female + name = "head of personnel's female formal uniform" + icon_state = "hop_parade_female" + +/obj/item/clothing/under/rank/civilian/head_of_personnel/nova/turtleneck + name = "head of personnel's turtleneck" + desc = "A soft blue turtleneck and black khakis worn by Executives who prefer a bit more comfort over style." + icon_state = "hopturtle" + can_adjust = TRUE + alt_covers_chest = TRUE + +/obj/item/clothing/under/rank/civilian/head_of_personnel/nova/turtleneck/skirt + name = "head of personnel's turtleneck skirt" + desc = "A soft blue turtleneck and black skirt worn by Executives who prefer a bit more comfort over style." + icon_state = "hopturtle_skirt" + body_parts_covered = CHEST|GROIN|ARMS + dying_key = DYE_REGISTRY_JUMPSKIRT + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/civilian/suits.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/civilian/suits.dm new file mode 100644 index 00000000000000..ac23d6bc40f237 --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/under/jobs/civilian/suits.dm @@ -0,0 +1,139 @@ + +/obj/item/clothing/under/suit + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi' //Anything that was in TG's suits.dmi, should be in our suits_digi.dmi + +/obj/item/clothing/under/suit/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/suits.dmi' + +//DO NOT ADD A /obj/item/clothing/under/rank/civilian/lawyer/nova. USE /obj/item/clothing/under/suit/nova FOR MODULAR SUITS + +/* +* RECOLORABLE +*/ +/obj/item/clothing/under/suit/nova/recolorable + name = "recolorable suit" + desc = "A semi-formal suit, clean-cut with a matching vest and slacks." + icon_state = "recolorable_suit" + can_adjust = FALSE + greyscale_config = /datum/greyscale_config/recolorable_suit + greyscale_config_worn = /datum/greyscale_config/recolorable_suit/worn + greyscale_config_worn_digi = /datum/greyscale_config/recolorable_suit/worn/digi + greyscale_colors = "#a99780#ffffff#6e2727#ffc500" + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/under/suit/nova/recolorable/skirt + name = "recolorable suitskirt" + desc = "A semi-formal suitskirt, clean-cut with a matching vest and skirt." + icon_state = "recolorable_suitskirt" + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + gets_cropped_on_taurs = FALSE + body_parts_covered = CHEST|GROIN|LEGS + greyscale_config = /datum/greyscale_config/recolorable_suitskirt + greyscale_config_worn = /datum/greyscale_config/recolorable_suitskirt/worn + greyscale_config_worn_digi = /datum/greyscale_config/recolorable_suitskirt/worn/digi + +/* +* SUITS +*/ +/obj/item/clothing/under/suit/nova/pencil + name = "black pencilskirt" + desc = "A clean white shirt with a tight-fitting black pencilskirt." + icon_state = "black_pencil" + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + gets_cropped_on_taurs = FALSE + +/obj/item/clothing/under/suit/nova/pencil/black_really + name = "executive pencilskirt" + desc = "A sleek suit with a tight-fitting black pencilskirt." + icon_state = "really_black_pencil" + +/obj/item/clothing/under/suit/nova/pencil/charcoal + name = "charcoal pencilskirt" + desc = "A clean white shirt with a tight-fitting charcoal pencilskirt." + icon_state = "charcoal_pencil" + +/obj/item/clothing/under/suit/nova/pencil/navy + name = "navy pencilskirt" + desc = "A clean white shirt with a tight-fitting navy-blue pencilskirt." + icon_state = "navy_pencil" + +/obj/item/clothing/under/suit/nova/pencil/burgandy + name = "burgandy pencilskirt" + desc = "A clean white shirt with a tight-fitting burgandy-red pencilskirt." + icon_state = "burgandy_pencil" + +/obj/item/clothing/under/suit/nova/pencil/checkered + name = "checkered pencilskirt" + desc = "A clean white shirt with a tight-fitting grey checkered pencilskirt." + icon_state = "checkered_pencil" + +/obj/item/clothing/under/suit/nova/pencil/tan + name = "tan pencilskirt" + desc = "A clean white shirt with a tight-fitting tan pencilskirt." + icon_state = "tan_pencil" + +/obj/item/clothing/under/suit/nova/pencil/green + name = "green pencilskirt" + desc = "A clean white shirt with a tight-fitting green pencilskirt." + icon_state = "green_pencil" + +/obj/item/clothing/under/suit/nova/scarface + name = "cuban suit" + desc = "A yayo coloured silk suit with a crimson shirt. You just know how to hide, how to lie. Me, I don't have that problem. Me, I always tell the truth. Even when I lie." + icon_state = "scarface" + +/obj/item/clothing/under/suit/nova/black_really_collared + name = "wide-collared executive suit" + desc = "A formal black suit with the collar worn wide, intended for the station's finest." + icon_state = "really_black_suit_collar" + +/obj/item/clothing/under/suit/nova/black_really_collared/skirt + name = "wide-collared executive suitskirt" + desc = "A formal black suit with the collar worn wide, intended for the station's finest." + icon_state = "really_black_suit_skirt_collar" + body_parts_covered = CHEST|GROIN|ARMS + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY|FEMALE_UNIFORM_NO_BREASTS + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + gets_cropped_on_taurs = FALSE + +/obj/item/clothing/under/suit/nova/inferno + name = "inferno suit" + desc = "Stylish enough to impress the devil." + icon_state = "lucifer" + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + obj_flags = UNIQUE_RENAME + unique_reskin = list( + "Pride" = "lucifer", + "Wrath" = "justice", + "Gluttony" = "malina", + "Envy" = "zdara", + "Vanity" = "cereberus", + ) + +/obj/item/clothing/under/suit/nova/inferno/skirt + name = "inferno suitskirt" + icon_state = "modeus" + obj_flags = UNIQUE_RENAME + unique_reskin = list( + "Lust" = "modeus", + "Sloth" = "pande", + ) + +/obj/item/clothing/under/suit/nova/inferno/beeze + name = "designer inferno suit" + desc = "A fancy tail-coated suit with a fluffy bow emblazoned on the chest, complete with an NT pin." + icon_state = "beeze" + obj_flags = null + unique_reskin = null + +/obj/item/clothing/under/suit/nova/helltaker + name = "red shirt with white pants" + desc = "No time. Busy gathering girls." + icon_state = "helltaker" + +/obj/item/clothing/under/suit/nova/helltaker/skirt + name = "red shirt with white skirt" + desc = "No time. Busy gathering boys." + icon_state = "helltakerskirt" diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/command.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/command.dm new file mode 100644 index 00000000000000..7e1f8884d35d66 --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/under/jobs/command.dm @@ -0,0 +1,161 @@ +/obj/item/clothing/under/rank/captain + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/command_digi.dmi' //Anything that was in TG's captain.dmi, should be in our command_digi.dmi + //NOTE - TG uses "captain.dmi"; because we have a few non-captain items going in here for ease of access, this will just be "command.dmi" + +/obj/item/clothing/under/rank/captain/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/command.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/command.dmi' + +/* +* CAPTAIN +*/ + +/obj/item/clothing/under/rank/captain/nova/kilt + name = "captain's kilt" + desc = "A midnight blue kilt, padded with nano-kevlar and adorned with gold and a tartan sash." + icon_state = "capkilt" + +/obj/item/clothing/under/rank/captain/nova/imperial + name = "captain's naval jumpsuit" + desc = "A white naval suit adorned with golden epaulets and a rank badge denoting a Captain. There are two ways to destroy a person, kill him, or ruin his reputation." + //Rank pins of the Grand Admiral, not a Captain. + icon_state = "impcap" + can_adjust = FALSE + +//Donor item for Gandalf - all donors have access +/obj/item/clothing/under/rank/captain/nova/black + name = "captain's black suit" + desc = "A very sleek, albeit outdated, naval captain's uniform for those who think they're commanding a battleship." + icon_state = "captainblacksuit" + can_adjust = FALSE + +/* +* BLUESHIELD +*/ +//Why is this in command.dm? Simple: Centcom.dmi will already be packed with CC/NTNavy/AD/LL/SOL/FTU - all of them more event-based clothes, while this will appear +//on-station often. + +/obj/item/clothing/under/rank/blueshield + icon = 'modular_nova/master_files/icons/obj/clothing/under/command.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/command.dmi' + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/command_digi.dmi' + name = "blueshield's suit" + desc = "A classic bodyguard's suit, with custom-fitted Blueshield-Blue cuffs and a Nanotrasen insignia over one of the pockets." + icon_state = "blueshield" + strip_delay = 50 + armor_type = /datum/armor/clothing_under/rank_blueshield + sensor_mode = SENSOR_COORDS + random_sensor = FALSE + alt_covers_chest = TRUE + +/datum/armor/clothing_under/rank_blueshield + melee = 10 + bullet = 5 + laser = 5 + energy = 10 + bomb = 10 + fire = 50 + acid = 50 + +/obj/item/clothing/under/rank/blueshield/skirt + name = "blueshield's suitskirt" + desc = "A classic bodyguard's suitskirt, with custom-fitted Blueshield-Blue cuffs and a Nanotrasen insignia over one of the pockets." + icon_state = "blueshieldskirt" + body_parts_covered = CHEST|GROIN|ARMS + dying_key = DYE_REGISTRY_JUMPSKIRT + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + gets_cropped_on_taurs = FALSE + +/obj/item/clothing/under/rank/blueshield/turtleneck + name = "blueshield's turtleneck" + desc = "A tactical jumper fit for only the best of bodyguards, with plenty of tactical pockets for your tactical needs." + icon_state = "bs_turtleneck" + +/obj/item/clothing/under/rank/blueshield/turtleneck/skirt + name = "blueshield's skirtleneck" + desc = "A tactical jumper fit for only the best of bodyguards - instead of tactical pockets, this one has a tactical lack of leg protection." + icon_state = "bs_skirtleneck" + body_parts_covered = CHEST|GROIN|ARMS + dying_key = DYE_REGISTRY_JUMPSKIRT + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + gets_cropped_on_taurs = FALSE + +/* +* NT CONSULTANT +*/ +//See Blueshield note - tl;dr, this role is a station role, while Centcom.dmi is more event roles + +/obj/item/clothing/under/rank/nanotrasen_consultant + icon = 'modular_nova/master_files/icons/obj/clothing/under/command.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/command.dmi' + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/command_digi.dmi' + desc = "It's a green jumpsuit with some gold markings denoting the rank of \"Nanotrasen Consultant\"." + name = "nanotrasen consultant's jumpsuit" + icon_state = "nt_consultant" + sensor_mode = SENSOR_COORDS + random_sensor = FALSE + +/obj/item/clothing/under/rank/nanotrasen_consultant/skirt + name = "nanotrasen consultant's jumpskirt" + desc = "It's a green jumpskirt with some gold markings denoting the rank of \"Nanotrasen Consultant\"." + icon_state = "nt_consultant_skirt" + body_parts_covered = CHEST|GROIN|ARMS + dying_key = DYE_REGISTRY_JUMPSKIRT + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + gets_cropped_on_taurs = FALSE + +/* +* UNASSIGNED (Any head of staff) +*/ + +/obj/item/clothing/under/rank/captain/nova/utility + name = "command utility uniform" + desc = "A utility uniform worn by Station Command." + icon_state = "util_com" + can_adjust = FALSE + +/obj/item/clothing/under/rank/captain/nova/utility/syndicate + armor_type = /datum/armor/clothing_under/utility_syndicate + has_sensor = NO_SENSORS + +/obj/item/clothing/under/rank/captain/nova/imperial/generic + desc = "A grey naval suit with a rank badge denoting an Officer. Doesn't protect against blaster fire." + name = "grey officer's naval jumpsuit" + icon_state = "impcom" + +/obj/item/clothing/under/rank/captain/nova/imperial/generic/pants + desc = "A grey naval suit over black pants, with a rank badge denoting an Officer. Doesn't protect against blaster fire." + name = "officer's naval jumpsuit" + icon_state = "impcom_pants" + +/obj/item/clothing/under/rank/captain/nova/imperial/generic/grey + desc = "A dark grey naval suit with a rank badge denoting an Officer. Doesn't protect against blaster fire." + name = "dark grey officer's naval jumpsuit" + icon_state = "impcom_dark" + +/obj/item/clothing/under/rank/captain/nova/imperial/generic/red + desc = "A red naval suit with a rank badge denoting an Officer. Doesn't protect against blaster fire." + name = "red officer's naval jumpsuit" + icon_state = "impcom_red" + +/* +* MISC +*/ + +/obj/item/clothing/under/rank/captain/nova/pilot + name = "shuttle pilot's jumpsuit" + desc = "It's a blue jumpsuit with some silver markings denoting the wearer as a certified pilot." + icon_state = "pilot" + can_adjust = FALSE + +/obj/item/clothing/under/rank/captain/nova/pilot/skirt + name = "shuttle pilot's jumpskirt" + desc = "It's a blue jumpskirt with some silver markings denoting the wearer as a certified pilot." + icon_state = "pilot_skirt" + body_parts_covered = CHEST|GROIN|ARMS + dying_key = DYE_REGISTRY_JUMPSKIRT + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/engineering.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/engineering.dm new file mode 100644 index 00000000000000..54cded01a4ef5f --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/under/jobs/engineering.dm @@ -0,0 +1,83 @@ +/obj/item/clothing/under/rank/engineering + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/engineering_digi.dmi' // Anything that was in the engineering.dmi, should be in the engineering_digi.dmi + +/obj/item/clothing/under/rank/engineering/engineer/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/engineering.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/engineering.dmi' + +/obj/item/clothing/under/rank/engineering/chief_engineer/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/engineering.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/engineering.dmi' + +/obj/item/clothing/under/rank/engineering/atmospheric_technician/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/engineering.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/engineering.dmi' + +/* +* ENGINEER +*/ + +/obj/item/clothing/under/rank/engineering/engineer/nova/utility + name = "engineering utility uniform" + desc = "A utility uniform worn by Engineering personnel." + icon_state = "util_eng" + can_adjust = FALSE + +/obj/item/clothing/under/rank/engineering/engineer/nova/utility/syndicate + armor_type = /datum/armor/clothing_under/utility_syndicate + has_sensor = NO_SENSORS + +/obj/item/clothing/under/rank/engineering/engineer/nova/trouser + name = "engineering trousers" + desc = "An engineering-orange set of trousers. Their waistband proudly displays an 'anti-radiation' symbol, though the effectiveness of radiation-proof-pants-only is still up for debate." + icon_state = "workpants_orange" + body_parts_covered = GROIN|LEGS + can_adjust = FALSE + female_sprite_flags = FEMALE_UNIFORM_NO_BREASTS + +/obj/item/clothing/under/rank/engineering/engineer/nova/hazard_chem + name = "chemical hazard jumpsuit" + desc = "A high visibility jumpsuit with additional protection from gas and chemical hazards, at the cost of less fire-proofing." + icon_state = "hazard_green" + armor_type = /datum/armor/clothing_under/nova_hazard_chem + resistance_flags = ACID_PROOF + alt_covers_chest = TRUE + +/datum/armor/clothing_under/nova_hazard_chem + fire = 20 + acid = 60 + +/obj/item/clothing/under/rank/engineering/engineer/nova/hazard_chem/emt + name = "chemical hazard EMT jumpsuit" + desc = "An EMT jumpsuit used for first responders in situations involving gas and/or chemical hazards. The label reads, \"Not designed for prolonged exposure\"." + icon_state = "hazard_white" + armor_type = /datum/armor/clothing_under/hazard_chem_emt + +/* +* CHIEF ENGINEER +*/ + +/datum/armor/clothing_under/hazard_chem_emt + fire = 10 + acid = 50 + +/obj/item/clothing/under/rank/engineering/chief_engineer/nova/imperial + desc = "A gray naval suit with a lead-lined vest and a rank badge denoting the Officer of the Internal Engineering Division. Doesn't come with a death machine building guide." + name = "chief engineer's naval jumpsuit" + icon_state = "impce" + +/* +* ATMOS TECH +*/ +/datum/armor/clothing_under/atmos_adv + bio = 40 + fire = 70 + acid = 70 + +/obj/item/clothing/under/rank/engineering/atmospheric_technician/nova/utility/advanced + name = "advanced atmospherics uniform" + desc = "A jumpsuit worn by advanced atmospherics crews." + icon_state = "util_atmos" + armor_type = /datum/armor/clothing_under/atmos_adv + icon_state = "util_eng" + can_adjust = FALSE diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/medical.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/medical.dm new file mode 100644 index 00000000000000..225a1740bc7d63 --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/under/jobs/medical.dm @@ -0,0 +1,102 @@ +/obj/item/clothing/under/rank/medical + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/medical_digi.dmi' // Anything that was in the medical.dmi, should be in the medical_digi.dmi + +/obj/item/clothing/under/rank/medical/doctor/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/medical.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/medical.dmi' + + +/obj/item/clothing/under/rank/medical/scrubs/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/medical.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/medical.dmi' + icon_state = "scrubswhite" // Because for some reason TG's scrubs dont have an icon on their basetype + desc = "It's made of a special fiber that provides minor protection against biohazards. This one seems to be the original Scrub." + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_MONKEY_VARIATION + +/obj/item/clothing/under/rank/medical/chemist/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/medical.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/medical.dmi' + +// Add a 'medical/virologist/nova' here if you make Virologist uniforms + +/obj/item/clothing/under/rank/medical/paramedic/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/medical.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/medical.dmi' + +/obj/item/clothing/under/rank/medical/chief_medical_officer/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/medical.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/medical.dmi' + +/* +* DOCTOR +*/ + +/obj/item/clothing/under/rank/medical/doctor/nova/utility + name = "medical utility uniform" + desc = "A utility uniform worn by Medical doctors." + icon_state = "util_med" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_MONKEY_VARIATION + +/obj/item/clothing/under/rank/medical/doctor/nova/utility/syndicate + armor_type = /datum/armor/clothing_under/utility_syndicate + has_sensor = NO_SENSORS + +/* +* SCRUBS +*/ + +/obj/item/clothing/under/rank/medical/scrubs/nova/red + desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in a deep red." + icon_state = "scrubsred" + +/obj/item/clothing/under/rank/medical/scrubs/nova/white + desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in a cream white colour." + icon_state = "scrubswhite" + +/* +* CHEMIST +*/ + +/obj/item/clothing/under/rank/medical/chemist/nova/formal + name = "chemist's formal jumpsuit" + desc = "A white shirt with left-aligned buttons and an orange stripe, lined with protection against chemical spills." + icon_state = "pharmacologist" + +/obj/item/clothing/under/rank/medical/chemist/nova/formal/skirt + name = "chemist's formal jumpskirt" + icon_state = "pharmacologist_skirt" + body_parts_covered = CHEST|GROIN|ARMS + dying_key = DYE_REGISTRY_JUMPSKIRT + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + gets_cropped_on_taurs = FALSE + +/obj/item/clothing/under/rank/medical/chemist/skirt + gets_cropped_on_taurs = FALSE + +/* +* PARAMEDIC +*/ + +/obj/item/clothing/under/rank/medical/paramedic/nova/light + name = "light paramedic uniform" + desc = "A brighter variant of the typical Paramedic uniform made with special fibers that provide minor protection against biohazards, this one has the reflective strips removed." + icon_state = "paramedic_light" + +/obj/item/clothing/under/rank/medical/paramedic/nova/light/skirt + name = "light paramedic skirt" + desc = "A brighter variant of the typical Paramedic uniform made with special fibers that provide minor protection against biohazards, this one has had it's legs replaced with a skirt." + icon_state = "paramedic_light_skirt" + body_parts_covered = CHEST|GROIN|ARMS + dying_key = DYE_REGISTRY_JUMPSKIRT + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/* +* CHIEF MEDICAL OFFICER +*/ + +/obj/item/clothing/under/rank/medical/chief_medical_officer/nova/imperial //Rank pins of the Brigadier General + desc = "A teal, sterile naval suit with a rank badge denoting the Officer of the Medical Corps. Doesn't protect against blaster fire." + name = "chief medical officer's naval jumpsuit" + icon_state = "impcmo" diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/rnd.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/rnd.dm new file mode 100644 index 00000000000000..563d4fa79c82c5 --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/under/jobs/rnd.dm @@ -0,0 +1,121 @@ +/* + * RESEARCH DIRECTOR + */ +/obj/item/clothing/under/rank/rnd + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/rnd_digi.dmi' // Anything that was in the rnd.dmi, should be in the rnd_digi.dmi + +/obj/item/clothing/under/rank/rnd/scientist/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/rnd.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/rnd.dmi' + +/obj/item/clothing/under/rank/rnd/roboticist/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/rnd.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/rnd.dmi' + +/obj/item/clothing/under/rank/rnd/research_director/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/rnd.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/rnd.dmi' + +/* + * GENETICIST (TO-DO) + * Add geneticist icons!!! + */ + +/* +/obj/item/clothing/under/rank/rnd/geneticist/nova/utility + name = "genetics utility uniform" + desc = "A utility uniform worn by NT-certified Genetics staff." + icon_state = "util_gene" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_MONKEY_VARIATION + can_adjust = FALSE + +/obj/item/clothing/under/rank/rnd/geneticist/nova/utility/syndicate + desc = "A utility uniform worn by Genetics staff." + armor_type = /datum/armor/clothing_under/utility_syndicate + has_sensor = NO_SENSORS +*/ + +/* + * SCIENTIST + */ + +/obj/item/clothing/under/rank/rnd/scientist/nova/utility + name = "science utility uniform" + desc = "A utility uniform worn by NT-certified Science staff." + icon_state = "util_sci" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_MONKEY_VARIATION + can_adjust = FALSE + +/obj/item/clothing/under/rank/rnd/scientist/nova/utility/syndicate + desc = "A utility uniform worn by Science staff." + armor_type = /datum/armor/clothing_under/utility_syndicate + has_sensor = NO_SENSORS + +/obj/item/clothing/under/rank/rnd/scientist/nova/hlscience + name = "science team uniform" + desc = "A simple semi-formal uniform consisting of a grayish-blue shirt and off-white slacks, paired with a ridiculous, but mandatory, tie." + icon_state = "hl_scientist" + can_adjust = FALSE + +/* + * ROBOTICIST + */ + +/obj/item/clothing/under/rank/rnd/roboticist/nova/sleek + name = "sleek roboticst jumpsuit" + desc = "A sleek version of the roboticist uniform, complete with amber sci-fi stripes." + icon_state = "robosleek" + can_adjust = FALSE + +/* + * RESEARCH DIRECTOR + */ + +/obj/item/clothing/under/rank/rnd/research_director/nova/jumpsuit + name = "research director's jumpsuit" + desc = "A shiny nano-weave uniform for those holding the title of \"Research Director\". Its fabric provides minor protection from biological contaminants." + icon_state = "director_jumpsuit" + can_adjust = TRUE + alt_covers_chest = TRUE + +/obj/item/clothing/under/rank/rnd/research_director/nova/jumpsuit/skirt // I know this seems wrong, but its for consistency sake; its the skirt version OF the jumpsuit + name = "research director's jumpskirt" + icon_state = "director_jumpskirt" + body_parts_covered = CHEST|GROIN|ARMS + dying_key = DYE_REGISTRY_JUMPSKIRT + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/under/rank/rnd/research_director/nova/imperial //Rank pins of the Major General + desc = "An off-white naval suit over black pants, with a rank badge denoting the Officer of the Internal Science Division. It's a peaceful life." + name = "research director's naval jumpsuit" + icon_state = "imprd" + +/* +* OVERRIDES +* ORION TODO: look over these when TG finishes their science resprites (any day now...) +*/ + +/obj/item/clothing/under/rank/rnd/scientist + icon = 'modular_nova/master_files/icons/obj/clothing/under/rnd.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/rnd.dmi' + icon_state = "science_new" + +/obj/item/clothing/under/rank/rnd/scientist/skirt + icon_state = "sciwhite_skirt_new" + +/obj/item/clothing/under/rank/rnd/roboticist + icon = 'modular_nova/master_files/icons/obj/clothing/under/rnd.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/rnd.dmi' + icon_state = "robotics_new" + +/obj/item/clothing/under/rank/rnd/roboticist/skirt + icon_state = "robotics_skirt_new" + +/obj/item/clothing/under/rank/rnd/geneticist + icon = 'modular_nova/master_files/icons/obj/clothing/under/rnd.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/rnd.dmi' + icon_state = "genetics_new" + +/obj/item/clothing/under/rank/rnd/geneticist/skirt + icon_state = "geneticswhite_skirt_new" diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/security.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/security.dm new file mode 100644 index 00000000000000..fdedb02838a219 --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/under/jobs/security.dm @@ -0,0 +1,64 @@ +/obj/item/clothing/under/rank/security + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/security_digi.dmi' // Anything that was in the security.dmi, should be in the security_digi.dmi + +/obj/item/clothing/under/rank/security/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi' + +/obj/item/clothing/under/rank/security/head_of_security/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi' + +//DEBATE MOVING *ALL* SECURITY STUFF HERE? Even overrides, at least as a like, sub-file? + +/* +* SECURITY OFFICER +*/ + +/obj/item/clothing/under/rank/security/nova/utility + name = "security utility uniform" + desc = "A utility uniform worn by Lopland-certified Security officers." + icon_state = "util_sec" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_MONKEY_VARIATION + can_adjust = FALSE + +/obj/item/clothing/under/rank/security/nova/utility/redsec + desc = "A utility uniform worn by trained Security officers." + icon_state = "util_sec_old" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + can_adjust = FALSE + +/obj/item/clothing/under/rank/security/nova/utility/redsec/syndicate + armor_type = /datum/armor/clothing_under/redsec_syndicate + has_sensor = NO_SENSORS + +/obj/item/clothing/under/rank/security/peacekeeper/trousers + name = "security trousers" + desc = "Some Peacekeeper-blue combat trousers. Probably should pair it with a vest for safety." + icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi' + icon_state = "workpants_blue" + body_parts_covered = GROIN|LEGS + can_adjust = FALSE + female_sprite_flags = FEMALE_UNIFORM_NO_BREASTS + +/* +* HEAD OF SECURITY +*/ + +/datum/armor/clothing_under/redsec_syndicate + melee = 10 + fire = 50 + acid = 40 + +/obj/item/clothing/under/rank/security/head_of_security/nova/imperial //Rank pins of the Grand General + desc = "A tar black naval suit and a rank badge denoting the Officer of The Internal Security Division. Be careful your underlings don't bump their head on a door." + name = "head of security's naval jumpsuit" + icon_state = "imphos" + +/* +* PRISONER +*/ + +/obj/item/clothing/under/rank/prisoner + greyscale_config_worn_monkey = /datum/greyscale_config/jumpsuit/prison/worn/monkey diff --git a/modular_nova/master_files/code/modules/clothing/under/misc.dm b/modular_nova/master_files/code/modules/clothing/under/misc.dm new file mode 100644 index 00000000000000..05cd7bdbf69a82 --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/under/misc.dm @@ -0,0 +1,64 @@ +//DO NOT ADD TO THIS FILE UNLESS THE SITUATION IS DIRE +//MISC FILES = UNSORTED FILES. EVEN TG HATES THIS ONE. + +/obj/item/clothing/under/misc + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/misc_digi.dmi' + +/obj/item/clothing/under/misc/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/misc.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/misc.dmi' + can_adjust = FALSE + +/* + Do we even bother sorting these? We don't want to use the file, it's for emergencies and in-betweens. + Just... don't lose your stuff. +*/ + +/obj/item/clothing/under/misc/nova/gear_harness + name = "gear harness" + desc = "A simple, inconspicuous harness replacement for a jumpsuit." + icon_state = "gear_harness" + body_parts_covered = NONE + attachment_slot_override = CHEST + can_adjust = FALSE + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/under/misc/nova/gear_harness/eve + name = "collection of leaves" + desc = "Three leaves, designed to cover the nipples and genetalia of the wearer. A foe so proud will first the weaker seek." + icon_state = "eve" + body_parts_covered = CHEST|GROIN + +/obj/item/clothing/under/misc/nova/gear_harness/adam + name = "leaf" + desc = "A single leaf, designed to cover the genitalia of the wearer. Seek not temptation." + icon_state = "adam" + body_parts_covered = GROIN + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + +/obj/item/clothing/under/misc/nova/taccas + name = "tacticasual uniform" + desc = "A white wifebeater on top of some cargo pants. For when you need to carry various beers." + icon_state = "tac_s" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + +/obj/item/clothing/under/misc/nova/mechanic + name = "mechanic's overalls" + desc = "An old-fashioned pair of brown overalls, along with assorted pockets and belt-loops." + icon_state = "mechanic" + +/obj/item/clothing/under/misc/nova/utility + name = "general utility uniform" + desc = "A utility uniform worn by civilian-ranked crew." + icon_state = "utility" + body_parts_covered = CHEST|ARMS|GROIN|LEGS + can_adjust = FALSE + +/obj/item/clothing/under/misc/nova/utility/syndicate + armor_type = /datum/armor/clothing_under/utility_syndicate + has_sensor = NO_SENSORS + +/datum/armor/clothing_under/utility_syndicate + melee = 10 + fire = 50 + acid = 40 diff --git a/modular_skyrat/master_files/code/modules/clothing/under/shorts_pants.dm b/modular_nova/master_files/code/modules/clothing/under/shorts_pants.dm similarity index 79% rename from modular_skyrat/master_files/code/modules/clothing/under/shorts_pants.dm rename to modular_nova/master_files/code/modules/clothing/under/shorts_pants.dm index 3bc3d7c2a7ba10..833571ab86bfcd 100644 --- a/modular_skyrat/master_files/code/modules/clothing/under/shorts_pants.dm +++ b/modular_nova/master_files/code/modules/clothing/under/shorts_pants.dm @@ -1,4 +1,4 @@ -#define SHORTS_PANTS_SHIRTS_DIGIFILE 'modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts_digi.dmi' +#define SHORTS_PANTS_SHIRTS_DIGIFILE 'modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts_digi.dmi' /obj/item/clothing/under/pants worn_icon_digi = SHORTS_PANTS_SHIRTS_DIGIFILE @@ -7,13 +7,13 @@ worn_icon_digi = SHORTS_PANTS_SHIRTS_DIGIFILE supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION //That's right, TG, I have icons for ALL of these!! Mwahahaha!!!! -/obj/item/clothing/under/pants/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi' +/obj/item/clothing/under/pants/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi' -/obj/item/clothing/under/shorts/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi' +/obj/item/clothing/under/shorts/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi' //Need to reset all these so our custom stuff can choose independently to be greyscale or not. TG putting these on the basetype was kinda gross. greyscale_config = null greyscale_config_worn = null @@ -27,7 +27,7 @@ * PANTS */ -/obj/item/clothing/under/pants/skyrat/jeans_ripped +/obj/item/clothing/under/pants/nova/jeans_ripped name = "ripped jeans" desc = "A nondescript pair of tough jeans, with several rips and tears. The staple pants choice of both rebels and the poor." icon_state = "jeans_ripped" @@ -37,7 +37,7 @@ greyscale_colors = "#787878#723E0E#4D7EAC" flags_1 = IS_PLAYER_COLORABLE_1 -/obj/item/clothing/under/pants/skyrat/yoga +/obj/item/clothing/under/pants/nova/yoga name = "yoga pants" desc = "Breathable and stretchy, perfect for exercising comfortably!" icon_state = "yoga_pants" @@ -47,7 +47,7 @@ greyscale_colors = "#3d3d3d" //Having all the configs for a single color feels wrong. This is wrong. flags_1 = IS_PLAYER_COLORABLE_1 -/obj/item/clothing/under/pants/skyrat/chaps +/obj/item/clothing/under/pants/nova/chaps name = "black chaps" desc = "Yeehaw" icon_state = "chaps" @@ -57,7 +57,7 @@ * SHORTS */ -/obj/item/clothing/under/shorts/skyrat/shorts_ripped +/obj/item/clothing/under/shorts/nova/shorts_ripped name = "ripped shorts" desc = "A nondescript pair of tough jean shorts, with the ends of the pantlegs frayed and torn. No one will ever know if this was done intentionally." icon_state = "shorts_ripped" @@ -68,7 +68,7 @@ greyscale_colors = "#787878#723E0E#202020" flags_1 = IS_PLAYER_COLORABLE_1 -/obj/item/clothing/under/shorts/skyrat/shortershorts +/obj/item/clothing/under/shorts/nova/shortershorts name = "shorter shorts" desc = "Show those legs off with these even shorter shorts!" icon_state = "shortershorts" @@ -80,10 +80,10 @@ /* * MISC (Technically belongs in this file as a shorts/pants/shirt combo) -* Here's hoping TG gives these their own typepath, but for now this is gonna be under/pants/skyrat. No, it's not all pants, but it's better than a whole new type +* Here's hoping TG gives these their own typepath, but for now this is gonna be under/pants/nova. No, it's not all pants, but it's better than a whole new type */ -/obj/item/clothing/under/pants/skyrat/kilt +/obj/item/clothing/under/pants/nova/kilt name = "recolorable kilt" desc = "A kilt and buttondown, adorned with a tartan sash. It is NOT a skirt." icon_state = "kilt" @@ -96,7 +96,7 @@ female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION -/obj/item/clothing/under/pants/skyrat/vicvest //there's no way I'm typing out a path called double_breasted 10 times over, too complex and everyone will be scared of it +/obj/item/clothing/under/pants/nova/vicvest //there's no way I'm typing out a path called double_breasted 10 times over, too complex and everyone will be scared of it name = "buttondown shirt with double-breasted vest" desc = "A fancy buttondown shirt with slacks and a vest worn overtop, with a second row of buttons. Truly an outdated fashion statement." icon_state = "buttondown_vicvest" diff --git a/modular_skyrat/master_files/code/modules/clothing/under/skirts_dresses.dm b/modular_nova/master_files/code/modules/clothing/under/skirts_dresses.dm similarity index 75% rename from modular_skyrat/master_files/code/modules/clothing/under/skirts_dresses.dm rename to modular_nova/master_files/code/modules/clothing/under/skirts_dresses.dm index 918127c1edac3e..d81b9b76a34077 100644 --- a/modular_skyrat/master_files/code/modules/clothing/under/skirts_dresses.dm +++ b/modular_nova/master_files/code/modules/clothing/under/skirts_dresses.dm @@ -1,4 +1,4 @@ -#define SKIRTS_DRESSES_DIGIFILE 'modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses_digi.dmi' +#define SKIRTS_DRESSES_DIGIFILE 'modular_nova/master_files/icons/mob/clothing/under/skirts_dresses_digi.dmi' /obj/item/clothing/under/dress body_parts_covered = CHEST|GROIN //For reference @@ -8,19 +8,19 @@ gets_cropped_on_taurs = FALSE //God bless the skirt being a subtype of the dress, only need one worn_digi_icon definition -/obj/item/clothing/under/dress/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi' +/obj/item/clothing/under/dress/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi' -/obj/item/clothing/under/dress/skirt/skyrat //Just so they can stay under TG's skirts in case code needs subtypes of them (also SDMM dropdown looks nicer like this) - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi' +/obj/item/clothing/under/dress/skirt/nova //Just so they can stay under TG's skirts in case code needs subtypes of them (also SDMM dropdown looks nicer like this) + icon = 'modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi' //TG's icons only have a dress.dmi, but that means its not ABC-sorted to be beside shorts_pants_shirts.dmi. So its skirts_dresses for us. /* -* TG DIGI VERSION DRESSES -*/ + * TG DIGI VERSION DRESSES + */ /obj/item/clothing/under/dress/striped supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION @@ -28,26 +28,40 @@ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION /* -* Skirts -*/ + * Skirts + */ -/obj/item/clothing/under/dress/skirt/skyrat/swept +/obj/item/clothing/under/dress/skirt/nova/swept name = "swept skirt" desc = "Formal skirt." icon_state = "skirt_swept" body_parts_covered = GROIN -/obj/item/clothing/under/dress/skirt/skyrat/lone_skirt - name = "skirt" - desc = "Just a skirt! Hope you have a tanktop to wear with this." - icon_state = "lone_skirt" - body_parts_covered = GROIN - greyscale_config = /datum/greyscale_config/lone_skirt - greyscale_config_worn = /datum/greyscale_config/lone_skirt/worn - greyscale_colors = "#5f534a" - flags_1 = IS_PLAYER_COLORABLE_1 +/obj/item/clothing/under/dress/skirt/nova/striped_skirt + name = "red bra and striped skirt" + desc = "A red side-slit skirt with stripes! Comes with a matching two-tone bra." + icon_state = "striped_skirt" + body_parts_covered = CHEST|GROIN|LEGS + can_adjust = TRUE + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + +/obj/item/clothing/under/dress/skirt/nova/red_skirt + name = "red bra and skirt" + desc = "An eye-catching knee-length red skirt, with a golden-yellow trim. Comes with a matching two-tone bra." + icon_state = "red_skirt" + body_parts_covered = CHEST|GROIN|LEGS + can_adjust = TRUE + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION -/obj/item/clothing/under/dress/skirt/skyrat/turtleskirt_knit //Essentially the same as the Turtleneck Skirt but with a different texture +/obj/item/clothing/under/dress/skirt/nova/black_skirt + name = "black bra and skirt" + desc = "A black side-slit skirt with a golden-yellow trim. Screams 'affluent goth'. Comes with a funky-looking matching bra." + icon_state = "black_skirt" + body_parts_covered = CHEST|GROIN|LEGS + can_adjust = TRUE + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + +/obj/item/clothing/under/dress/skirt/nova/turtleskirt_knit //Essentially the same as the Turtleneck Skirt but with a different texture name = "cableknit skirt" desc = "A casual turtleneck skirt, with a cableknit pattern." icon_state = "turtleskirt_knit" @@ -59,7 +73,7 @@ can_adjust = TRUE alt_covers_chest = TRUE -/obj/item/clothing/under/dress/skirt/skyrat/jean +/obj/item/clothing/under/dress/skirt/nova/jean name = "jean skirt" desc = "Technically, is there much difference between these and jorts? It's just one big hole instead of two. Does that make this a jirt?" icon_state = "jean_skirt" @@ -71,34 +85,32 @@ greyscale_colors = "#787878#723E0E#4D7EAC" flags_1 = IS_PLAYER_COLORABLE_1 -/obj/item/clothing/under/dress/skyrat/short_dress - name = "short dress" - desc = "An extremely short dress with a lovely sash and flower - only for those with good self-confidence." - icon_state = "short_dress" - greyscale_config = /datum/greyscale_config/short_dress - greyscale_config_worn = /datum/greyscale_config/short_dress/worn - greyscale_colors = "#ff3636#363030" +/obj/item/clothing/under/dress/skirt/nova/lone_skirt + name = "skirt" + desc = "Just a skirt! Hope you have a tanktop to wear with this." + icon_state = "lone_skirt" + body_parts_covered = GROIN + greyscale_config = /datum/greyscale_config/lone_skirt + greyscale_config_worn = /datum/greyscale_config/lone_skirt/worn + greyscale_colors = "#5f534a" flags_1 = IS_PLAYER_COLORABLE_1 -/obj/item/clothing/under/dress/skyrat/pinktutu - name = "pink tutu" - desc = "A fluffy pink tutu." - icon_state = "pinktutu" - -/obj/item/clothing/under/skyrat/medium_skirt +/obj/item/clothing/under/dress/skirt/nova/medium name = "medium skirt" - desc = "Appealing medium-length skirt." + desc = "An appealing medium-length skirt. Top not included." icon_state = "medium_skirt" + body_parts_covered = GROIN greyscale_config = /datum/greyscale_config/medium_skirt greyscale_config_worn = /datum/greyscale_config/medium_skirt/worn greyscale_colors = "#3a3c45" female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY|FEMALE_UNIFORM_NO_BREASTS flags_1 = IS_PLAYER_COLORABLE_1 -/obj/item/clothing/under/skyrat/long_skirt +/obj/item/clothing/under/dress/skirt/nova/long name = "long skirt" - desc = "Appealing long skirt." + desc = "An appealing long skirt. At this point does it qualify as a dress?" icon_state = "long_skirt" + body_parts_covered = GROIN|LEGS greyscale_config = /datum/greyscale_config/long_skirt greyscale_config_worn = /datum/greyscale_config/long_skirt/worn greyscale_colors = "#3a3c45" @@ -107,30 +119,44 @@ flags_1 = IS_PLAYER_COLORABLE_1 /* -* Dresses -*/ + * Dresses + */ + +/obj/item/clothing/under/dress/nova/short_dress + name = "short dress" + desc = "An extremely short dress with a lovely sash and flower - only for those with good self-confidence." + icon_state = "short_dress" + greyscale_config = /datum/greyscale_config/short_dress + greyscale_config_worn = /datum/greyscale_config/short_dress/worn + greyscale_colors = "#ff3636#363030" + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/under/dress/nova/pinktutu + name = "pink tutu" + desc = "A fluffy pink tutu." + icon_state = "pinktutu" -/obj/item/clothing/under/dress/skyrat/flower +/obj/item/clothing/under/dress/nova/flower name = "flower dress" desc = "Lovely dress. Colored like the autumn leaves." icon_state = "flower_dress" body_parts_covered = CHEST|GROIN|LEGS -/obj/item/clothing/under/dress/skyrat/redformal +/obj/item/clothing/under/dress/nova/redformal name = "formal red dress" desc = "Not too wide flowing, but big enough to make an impression." icon_state = "formal_red" body_parts_covered = CHEST|GROIN|LEGS|ARMS flags_inv = HIDESHOES -/obj/item/clothing/under/dress/skyrat/countess +/obj/item/clothing/under/dress/nova/countess name = "countess dress" desc = "A wide flowing dress fitting for a countess; may be prone to catching onto stuff as you pass." icon_state = "countess" body_parts_covered = CHEST|GROIN|LEGS|ARMS flags_inv = HIDESHOES -/obj/item/clothing/under/dress/skyrat/strapless +/obj/item/clothing/under/dress/nova/strapless name = "strapless dress" desc = "Typical formal wear with no straps, instead opting to be tied at the waist. Most likely will need constant adjustments." icon_state = "dress_strapless" @@ -140,7 +166,7 @@ greyscale_colors = "#cc0000#5f5f5f" flags_1 = IS_PLAYER_COLORABLE_1 -/obj/item/clothing/under/dress/skyrat/pentagram +/obj/item/clothing/under/dress/nova/pentagram name = "pentagram strapped dress" desc = "A soft dress with straps designed to rest as a pentragram. Isn't this against NT's whole \"Authorized Religion\" stuff?" icon_state = "dress_pentagram" @@ -150,34 +176,10 @@ greyscale_colors = "#403c46" flags_1 = IS_PLAYER_COLORABLE_1 -/obj/item/clothing/under/dress/skyrat/jute +/obj/item/clothing/under/dress/nova/jute name = "Jacarta Dress" desc = "A thick dress with a strong rough exterior layer; lined with a soft breathable thin layer. It's loose-fitting, and has a tag inside that says 'Made in Jacarta'." icon_state = "jute" body_parts_covered = CHEST|GROIN|LEGS can_adjust = TRUE supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - -/obj/item/clothing/under/dress/skirt/skyrat/striped_skirt - name = "Striped Skirt" - desc = "A red side-slit skirt with stripes! Comes with a matching two-tone bra." - icon_state = "striped_skirt" - body_parts_covered = CHEST|GROIN|LEGS - can_adjust = TRUE - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - -/obj/item/clothing/under/dress/skirt/skyrat/red_skirt - name = "Red Skirt" - desc = "An eye-catching knee-length red skirt, with a golden-yellow trim, comes with a two-tone bra." - icon_state = "red_skirt" - body_parts_covered = CHEST|GROIN|LEGS - can_adjust = TRUE - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - -/obj/item/clothing/under/dress/skirt/skyrat/black_skirt - name = "Black Skirt" - desc = "A black side-slit skirt with a golden-yellow trim. Screams 'affluent goth'. Comes with a funky-looking matching bra." - icon_state = "black_skirt" - body_parts_covered = CHEST|GROIN|LEGS - can_adjust = TRUE - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION diff --git a/modular_nova/master_files/code/modules/clothing/under/syndicate.dm b/modular_nova/master_files/code/modules/clothing/under/syndicate.dm new file mode 100644 index 00000000000000..b6172cc66823c0 --- /dev/null +++ b/modular_nova/master_files/code/modules/clothing/under/syndicate.dm @@ -0,0 +1,139 @@ +#define RESKIN_CHARCOAL "Charcoal" +#define RESKIN_NT "NT Blue" +#define RESKIN_SYNDIE "Syndicate Red" + +/obj/item/clothing/under/syndicate + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/syndicate_digi.dmi' // Anything that was in the syndicate.dmi, should be in the syndicate_digi.dmi + +/obj/item/clothing/under/syndicate/nova + icon = 'modular_nova/master_files/icons/obj/clothing/under/syndicate.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/syndicate.dmi' + //These are pre-set for ease and reference, as syndie under items SHOULDNT have sensors and should have similar stats; also its better to start with adjust = false + has_sensor = NO_SENSORS + can_adjust = FALSE + +//Related files: +// modular_nova\modules\Syndie_edits\code\syndie_edits.dm (this has the Overalls and non-Uniforms) +// modular_nova\modules\novaya_ert\code\uniform.dm (NRI uniform(s)) + +/* +* TACTICOOL +*/ + +//This is an overwrite, not a fully new item, but still fits best here. + +/obj/item/clothing/under/syndicate/tacticool //Overwrites the 'fake' one. Zero armor, sensors, and default blue. More Balanced to make station-available. + name = "tacticool turtleneck" + desc = "A snug turtleneck, in fabulous Nanotrasen-blue. Just looking at it makes you want to buy a NT-certifed coffee, go into the office, and -work-." + icon = 'modular_nova/master_files/icons/obj/clothing/under/syndicate.dmi' //Since its an overwrite it needs new icon linking. Woe. + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/syndicate.dmi' + icon_state = "tactifool_blue" + inhand_icon_state = "b_suit" + can_adjust = TRUE + has_sensor = HAS_SENSORS + armor_type = /datum/armor/clothing_under/none + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + unique_reskin = list( + RESKIN_NT = "tactifool_blue", + RESKIN_CHARCOAL = "tactifool" + ) + resistance_flags = FLAMMABLE + +/obj/item/clothing/under/syndicate/tacticool/reskin_obj(mob/M) + ..() + if(current_skin && current_skin == RESKIN_CHARCOAL) + desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-." //Default decription of the normal tacticool + inhand_icon_state = "bl_suit" //May as well, while we're updating it + +/obj/item/clothing/under/syndicate/tacticool/skirt //Overwrites the 'fake' one. Zero armor, sensors, and default blue. More Balanced to make station-available. + name = "tacticool skirtleneck" + desc = "A snug skirtleneck, in fabulous Nanotrasen-blue. Just looking at it makes you want to buy a NT-certifed coffee, go into the office, and -work-." + icon_state = "tactifool_blue_skirt" + armor_type = /datum/armor/clothing_under/none + body_parts_covered = CHEST|GROIN|ARMS + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + dying_key = DYE_REGISTRY_JUMPSKIRT + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + unique_reskin = list( + RESKIN_NT = "tactifool_blue_skirt", + RESKIN_CHARCOAL = "tactifool_skirt" + ) + +/obj/item/clothing/under/syndicate/bloodred/sleepytime/sensors //Halloween-only + has_sensor = HAS_SENSORS + armor_type = /datum/armor/clothing_under/none + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + +/obj/item/clothing/under/syndicate/nova/baseball + name = "syndicate baseball tee" + desc = "Aaand the Syndicate Snakes are up to bat, ready for one of their signature nuclear home-runs! Lets show these corpos a good time." //NT pitches their plasma/bluespace(something) + icon_state = "syndicate_baseball" + +/* +* TACTICAL (Real) +*/ +//The red alts, for BLATANTLY syndicate stuff (Like DS2) +// (Multiple non-syndicate things use the base tactical turtleneck, they cant have it red nor reskinnable. OUR version, however, can be.) +/obj/item/clothing/under/syndicate/nova/tactical + name = "tactical turtleneck" + desc = "A snug syndicate-red turtleneck with charcoal-black cargo pants. Good luck arguing allegiance with this on." + icon_state = "syndicate_red" + inhand_icon_state = "r_suit" + can_adjust = TRUE + alt_covers_chest = TRUE + armor_type = /datum/armor/clothing_under/syndicate + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + unique_reskin = list( + RESKIN_SYNDIE = "syndicate_red", + RESKIN_CHARCOAL = "syndicate" + ) + +/obj/item/clothing/under/syndicate/nova/tactical/reskin_obj(mob/M) + ..() + if(current_skin && current_skin == RESKIN_CHARCOAL) + desc = "A non-descript and slightly suspicious looking turtleneck with digital camouflage cargo pants." //(Digital camo? Brown? What?) + inhand_icon_state = "bl_suit" + +/obj/item/clothing/under/syndicate/nova/tactical/skirt + name = "tactical skirtleneck" + desc = "A snug syndicate-red skirtleneck with a charcoal-black skirt. Good luck arguing allegiance with this on." + icon_state = "syndicate_red_skirt" + inhand_icon_state = "r_suit" + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + dying_key = DYE_REGISTRY_JUMPSKIRT + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + unique_reskin = list( + RESKIN_SYNDIE = "syndicate_red_skirt", + RESKIN_CHARCOAL = "syndicate_skirt" + ) + +/obj/item/clothing/under/syndicate/nova/tactical/skirt/reskin_obj(mob/M) + ..() + if(current_skin && current_skin == RESKIN_CHARCOAL) + desc = "A non-descript and slightly suspicious looking skirtleneck." + inhand_icon_state = "bl_suit" + +/* +* ENCLAVE +*/ +/obj/item/clothing/under/syndicate/nova/enclave + name = "neo-American sergeant uniform" + desc = "Throughout the stars, rumors of mad scientists and angry drill sergeants run rampant; of creatures in armor black as night, being led by men or women wearing this uniform. They share one thing: a deep, natonalistic zeal of the dream of America." + icon_state = "enclave" + can_adjust = TRUE + armor_type = /datum/armor/clothing_under/none + +/obj/item/clothing/under/syndicate/nova/enclave/officer + name = "neo-American officer uniform" + icon_state = "enclaveo" + +/obj/item/clothing/under/syndicate/nova/enclave/real + armor_type = /datum/armor/clothing_under/syndicate + +/obj/item/clothing/under/syndicate/nova/enclave/real/officer + name = "neo-American officer uniform" + icon_state = "enclaveo" + +#undef RESKIN_CHARCOAL +#undef RESKIN_NT +#undef RESKIN_SYNDIE diff --git a/modular_skyrat/master_files/code/modules/events/_event.dm b/modular_nova/master_files/code/modules/events/_event.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/events/_event.dm rename to modular_nova/master_files/code/modules/events/_event.dm diff --git a/modular_skyrat/master_files/code/modules/experisci/experiment.dm b/modular_nova/master_files/code/modules/experisci/experiment.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/experisci/experiment.dm rename to modular_nova/master_files/code/modules/experisci/experiment.dm diff --git a/modular_skyrat/master_files/code/modules/food_and_drinks/recipes/food_mixtures.dm b/modular_nova/master_files/code/modules/food_and_drinks/recipes/food_mixtures.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/food_and_drinks/recipes/food_mixtures.dm rename to modular_nova/master_files/code/modules/food_and_drinks/recipes/food_mixtures.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/departments/departments.dm b/modular_nova/master_files/code/modules/jobs/departments/departments.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/departments/departments.dm rename to modular_nova/master_files/code/modules/jobs/departments/departments.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/_job.dm b/modular_nova/master_files/code/modules/jobs/job_types/_job.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/_job.dm rename to modular_nova/master_files/code/modules/jobs/job_types/_job.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/_job_attire.dm b/modular_nova/master_files/code/modules/jobs/job_types/_job_attire.dm similarity index 98% rename from modular_skyrat/master_files/code/modules/jobs/job_types/_job_attire.dm rename to modular_nova/master_files/code/modules/jobs/job_types/_job_attire.dm index 05bc14211e3a42..794e6eaf5de97a 100644 --- a/modular_skyrat/master_files/code/modules/jobs/job_types/_job_attire.dm +++ b/modular_nova/master_files/code/modules/jobs/job_types/_job_attire.dm @@ -187,3 +187,5 @@ /datum/job/ds2 akula_outfit = /datum/outfit/akula +/datum/job/interdyne + akula_outfit = /datum/outfit/akula diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/atmospheric_technician.dm b/modular_nova/master_files/code/modules/jobs/job_types/atmospheric_technician.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/atmospheric_technician.dm rename to modular_nova/master_files/code/modules/jobs/job_types/atmospheric_technician.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/botanist.dm b/modular_nova/master_files/code/modules/jobs/job_types/botanist.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/botanist.dm rename to modular_nova/master_files/code/modules/jobs/job_types/botanist.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/captain.dm b/modular_nova/master_files/code/modules/jobs/job_types/captain.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/captain.dm rename to modular_nova/master_files/code/modules/jobs/job_types/captain.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/chaplain.dm b/modular_nova/master_files/code/modules/jobs/job_types/chaplain.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/chaplain.dm rename to modular_nova/master_files/code/modules/jobs/job_types/chaplain.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/chemist.dm b/modular_nova/master_files/code/modules/jobs/job_types/chemist.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/chemist.dm rename to modular_nova/master_files/code/modules/jobs/job_types/chemist.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/chief_engineer.dm b/modular_nova/master_files/code/modules/jobs/job_types/chief_engineer.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/chief_engineer.dm rename to modular_nova/master_files/code/modules/jobs/job_types/chief_engineer.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/chief_medical_officer.dm b/modular_nova/master_files/code/modules/jobs/job_types/chief_medical_officer.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/chief_medical_officer.dm rename to modular_nova/master_files/code/modules/jobs/job_types/chief_medical_officer.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/clown.dm b/modular_nova/master_files/code/modules/jobs/job_types/clown.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/clown.dm rename to modular_nova/master_files/code/modules/jobs/job_types/clown.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/coroner.dm b/modular_nova/master_files/code/modules/jobs/job_types/coroner.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/coroner.dm rename to modular_nova/master_files/code/modules/jobs/job_types/coroner.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/curator.dm b/modular_nova/master_files/code/modules/jobs/job_types/curator.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/curator.dm rename to modular_nova/master_files/code/modules/jobs/job_types/curator.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/cyborg.dm b/modular_nova/master_files/code/modules/jobs/job_types/cyborg.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/cyborg.dm rename to modular_nova/master_files/code/modules/jobs/job_types/cyborg.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/geneticist.dm b/modular_nova/master_files/code/modules/jobs/job_types/geneticist.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/geneticist.dm rename to modular_nova/master_files/code/modules/jobs/job_types/geneticist.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/head_of_personnel.dm b/modular_nova/master_files/code/modules/jobs/job_types/head_of_personnel.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/head_of_personnel.dm rename to modular_nova/master_files/code/modules/jobs/job_types/head_of_personnel.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/head_of_security.dm b/modular_nova/master_files/code/modules/jobs/job_types/head_of_security.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/head_of_security.dm rename to modular_nova/master_files/code/modules/jobs/job_types/head_of_security.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/janitor.dm b/modular_nova/master_files/code/modules/jobs/job_types/janitor.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/janitor.dm rename to modular_nova/master_files/code/modules/jobs/job_types/janitor.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/medical_doctor.dm b/modular_nova/master_files/code/modules/jobs/job_types/medical_doctor.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/medical_doctor.dm rename to modular_nova/master_files/code/modules/jobs/job_types/medical_doctor.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/mime.dm b/modular_nova/master_files/code/modules/jobs/job_types/mime.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/mime.dm rename to modular_nova/master_files/code/modules/jobs/job_types/mime.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/paramedic.dm b/modular_nova/master_files/code/modules/jobs/job_types/paramedic.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/paramedic.dm rename to modular_nova/master_files/code/modules/jobs/job_types/paramedic.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/psychologist.dm b/modular_nova/master_files/code/modules/jobs/job_types/psychologist.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/psychologist.dm rename to modular_nova/master_files/code/modules/jobs/job_types/psychologist.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/research_director.dm b/modular_nova/master_files/code/modules/jobs/job_types/research_director.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/research_director.dm rename to modular_nova/master_files/code/modules/jobs/job_types/research_director.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/roboticist.dm b/modular_nova/master_files/code/modules/jobs/job_types/roboticist.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/roboticist.dm rename to modular_nova/master_files/code/modules/jobs/job_types/roboticist.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/scientist.dm b/modular_nova/master_files/code/modules/jobs/job_types/scientist.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/scientist.dm rename to modular_nova/master_files/code/modules/jobs/job_types/scientist.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/security_officer.dm b/modular_nova/master_files/code/modules/jobs/job_types/security_officer.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/security_officer.dm rename to modular_nova/master_files/code/modules/jobs/job_types/security_officer.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/shaft_miner.dm b/modular_nova/master_files/code/modules/jobs/job_types/shaft_miner.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/shaft_miner.dm rename to modular_nova/master_files/code/modules/jobs/job_types/shaft_miner.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/blackmarket.dm b/modular_nova/master_files/code/modules/jobs/job_types/spawner/blackmarket.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/blackmarket.dm rename to modular_nova/master_files/code/modules/jobs/job_types/spawner/blackmarket.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/ds2.dm b/modular_nova/master_files/code/modules/jobs/job_types/spawner/ds2.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/ds2.dm rename to modular_nova/master_files/code/modules/jobs/job_types/spawner/ds2.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/freighter_crew.dm b/modular_nova/master_files/code/modules/jobs/job_types/spawner/freighter_crew.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/freighter_crew.dm rename to modular_nova/master_files/code/modules/jobs/job_types/spawner/freighter_crew.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/ghostcafe.dm b/modular_nova/master_files/code/modules/jobs/job_types/spawner/ghostcafe.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/ghostcafe.dm rename to modular_nova/master_files/code/modules/jobs/job_types/spawner/ghostcafe.dm diff --git a/modular_nova/master_files/code/modules/jobs/job_types/spawner/interdyne_planetary_base.dm b/modular_nova/master_files/code/modules/jobs/job_types/spawner/interdyne_planetary_base.dm new file mode 100644 index 00000000000000..f2c475fbc48f2c --- /dev/null +++ b/modular_nova/master_files/code/modules/jobs/job_types/spawner/interdyne_planetary_base.dm @@ -0,0 +1,7 @@ +/datum/job/interdyne_planetary_base + title = ROLE_INTERDYNE_PLANETARY_BASE + policy_index = ROLE_INTERDYNE_PLANETARY_BASE + +/datum/job/interdyne_planetary_base_icebox + title = ROLE_INTERDYNE_PLANETARY_BASE_ICEBOX + policy_index = ROLE_INTERDYNE_PLANETARY_BASE_ICEBOX diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/tarkon.dm b/modular_nova/master_files/code/modules/jobs/job_types/spawner/tarkon.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/tarkon.dm rename to modular_nova/master_files/code/modules/jobs/job_types/spawner/tarkon.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/station_engineer.dm b/modular_nova/master_files/code/modules/jobs/job_types/station_engineer.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/station_engineer.dm rename to modular_nova/master_files/code/modules/jobs/job_types/station_engineer.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/virologist.dm b/modular_nova/master_files/code/modules/jobs/job_types/virologist.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/virologist.dm rename to modular_nova/master_files/code/modules/jobs/job_types/virologist.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/warden.dm b/modular_nova/master_files/code/modules/jobs/job_types/warden.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/jobs/job_types/warden.dm rename to modular_nova/master_files/code/modules/jobs/job_types/warden.dm diff --git a/modular_skyrat/master_files/code/modules/jobs/off_duty_check.dm b/modular_nova/master_files/code/modules/jobs/off_duty_check.dm similarity index 98% rename from modular_skyrat/master_files/code/modules/jobs/off_duty_check.dm rename to modular_nova/master_files/code/modules/jobs/off_duty_check.dm index 0faa89734aae0c..9155d9c2186fad 100644 --- a/modular_skyrat/master_files/code/modules/jobs/off_duty_check.dm +++ b/modular_nova/master_files/code/modules/jobs/off_duty_check.dm @@ -35,7 +35,7 @@ /obj/item/duty_checker //Test item name = "duty checker" desc = "Checks if the mob this is used on is off-duty. You probably shouldn't see this in-game..." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/remote.dmi' icon_state = "gangtool-purple" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' diff --git a/modular_skyrat/master_files/code/modules/language/language.dm b/modular_nova/master_files/code/modules/language/language.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/language/language.dm rename to modular_nova/master_files/code/modules/language/language.dm diff --git a/modular_skyrat/master_files/code/modules/language/language_holder.dm b/modular_nova/master_files/code/modules/language/language_holder.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/language/language_holder.dm rename to modular_nova/master_files/code/modules/language/language_holder.dm diff --git a/modular_nova/master_files/code/modules/library/skill_learning/skill_station.dm b/modular_nova/master_files/code/modules/library/skill_learning/skill_station.dm new file mode 100644 index 00000000000000..0f5d7c46249bd9 --- /dev/null +++ b/modular_nova/master_files/code/modules/library/skill_learning/skill_station.dm @@ -0,0 +1,9 @@ +/obj/machinery/skill_station + /// What path boards used to construct it should build into when dropped. + var/base_build_path = /obj/machinery/smartfridge + +/obj/machinery/skill_station/plasmaglass + desc = "Learn skills with only minimal chance for brain damage. This one seems to have a plasma glass chamber" + icon = 'icons/obj/machines/implant_chair.dmi' + icon_state = "hypnochair" + base_build_path = /obj/machinery/skill_station/plasmaglass diff --git a/modular_skyrat/master_files/code/modules/logging/categories/log_category_debug.dm b/modular_nova/master_files/code/modules/logging/categories/log_category_debug.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/logging/categories/log_category_debug.dm rename to modular_nova/master_files/code/modules/logging/categories/log_category_debug.dm diff --git a/modular_skyrat/master_files/code/modules/logging/categories/log_category_game.dm b/modular_nova/master_files/code/modules/logging/categories/log_category_game.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/logging/categories/log_category_game.dm rename to modular_nova/master_files/code/modules/logging/categories/log_category_game.dm diff --git a/modular_skyrat/master_files/code/modules/logging/categories/log_category_uplink.dm b/modular_nova/master_files/code/modules/logging/categories/log_category_uplink.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/logging/categories/log_category_uplink.dm rename to modular_nova/master_files/code/modules/logging/categories/log_category_uplink.dm diff --git a/modular_skyrat/master_files/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm b/modular_nova/master_files/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm rename to modular_nova/master_files/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm diff --git a/modular_skyrat/master_files/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_cytology.dm b/modular_nova/master_files/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_cytology.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_cytology.dm rename to modular_nova/master_files/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_cytology.dm diff --git a/modular_nova/master_files/code/modules/mining/equipment/explorer_gear.dm b/modular_nova/master_files/code/modules/mining/equipment/explorer_gear.dm new file mode 100644 index 00000000000000..ee4bfe64d045dd --- /dev/null +++ b/modular_nova/master_files/code/modules/mining/equipment/explorer_gear.dm @@ -0,0 +1,11 @@ +/obj/item/clothing/suit/hooded/cloak/drake + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/armor_digi.dmi' + +/obj/item/clothing/suit/hooded/cloak/goliath + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/armor_digi.dmi' + cold_protection = CHEST|GROIN|ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + +/obj/item/clothing/head/hooded/cloakhood/goliath + cold_protection = CHEST|GROIN|ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT diff --git a/modular_skyrat/master_files/code/modules/mob/dead/new_player/latejoin_menu.dm b/modular_nova/master_files/code/modules/mob/dead/new_player/latejoin_menu.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/mob/dead/new_player/latejoin_menu.dm rename to modular_nova/master_files/code/modules/mob/dead/new_player/latejoin_menu.dm diff --git a/modular_nova/master_files/code/modules/mob/dead/new_player/preferences_setup.dm b/modular_nova/master_files/code/modules/mob/dead/new_player/preferences_setup.dm new file mode 100644 index 00000000000000..f009ad46efee5a --- /dev/null +++ b/modular_nova/master_files/code/modules/mob/dead/new_player/preferences_setup.dm @@ -0,0 +1,52 @@ +/datum/preferences/proc/render_new_preview_appearance(mob/living/carbon/human/dummy/mannequin) + var/datum/job/preview_job = get_highest_priority_job() + mannequin.dna.mutant_bodyparts = list() + + // Set up the dummy for its photoshoot + apply_prefs_to(mannequin, TRUE, visuals_only = TRUE) + + switch(preview_pref) + if(PREVIEW_PREF_JOB) + mannequin.underwear_visibility = NONE + if(preview_job) // NOVA EDIT CHANGE + // Silicons only need a very basic preview since there is no customization for them. + if (istype(preview_job, /datum/job/ai)) + return image('icons/mob/silicon/ai.dmi', icon_state = resolve_ai_icon(read_preference(/datum/preference/choiced/ai_core_display)), dir = SOUTH) + if (istype(preview_job, /datum/job/cyborg)) + return image('icons/mob/silicon/robots.dmi', icon_state = "robot", dir = SOUTH) + mannequin.job = preview_job.title + mannequin.equip_outfit_and_loadout(preview_job.outfit, src, TRUE) + if(PREVIEW_PREF_LOADOUT) + mannequin.underwear_visibility = NONE + var/default_outfit = new /datum/outfit() + mannequin.equip_outfit_and_loadout(default_outfit, src, TRUE) + if(PREVIEW_PREF_UNDERWEAR) + mannequin.underwear_visibility = NONE + if(PREVIEW_PREF_NAKED) + mannequin.underwear_visibility = UNDERWEAR_HIDE_UNDIES | UNDERWEAR_HIDE_SHIRT | UNDERWEAR_HIDE_SOCKS | UNDERWEAR_HIDE_BRA + for(var/organ_key in list(ORGAN_SLOT_VAGINA, ORGAN_SLOT_PENIS, ORGAN_SLOT_BREASTS, ORGAN_SLOT_ANUS)) + var/obj/item/organ/external/genital/gent = mannequin.get_organ_slot(organ_key) + if(gent) + gent.aroused = AROUSAL_NONE + gent.update_sprite_suffix() + if(PREVIEW_PREF_NAKED_AROUSED) + mannequin.underwear_visibility = UNDERWEAR_HIDE_UNDIES | UNDERWEAR_HIDE_SHIRT | UNDERWEAR_HIDE_SOCKS | UNDERWEAR_HIDE_BRA + for(var/organ_key in list(ORGAN_SLOT_VAGINA, ORGAN_SLOT_PENIS, ORGAN_SLOT_BREASTS, ORGAN_SLOT_ANUS)) + var/obj/item/organ/external/genital/gent = mannequin.get_organ_slot(organ_key) + if(gent) + gent.aroused = AROUSAL_FULL + gent.update_sprite_suffix() + + // Apply visual quirks + // Yes we do it every time because it needs to be done after job gear + if(SSquirks?.initialized) + // And yes we need to clean all the quirk datums every time + mannequin.cleanse_quirk_datums() + for(var/quirk_name as anything in all_quirks) + var/datum/quirk/quirk_type = SSquirks.quirks[quirk_name] + if(!(initial(quirk_type.quirk_flags) & QUIRK_CHANGES_APPEARANCE)) + continue + mannequin.add_quirk(quirk_type, parent) + + mannequin.update_body() + return mannequin.appearance diff --git a/modular_skyrat/master_files/code/modules/mob/living/blood.dm b/modular_nova/master_files/code/modules/mob/living/blood.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/mob/living/blood.dm rename to modular_nova/master_files/code/modules/mob/living/blood.dm diff --git a/modular_nova/master_files/code/modules/mob/living/brain/MMI.dm b/modular_nova/master_files/code/modules/mob/living/brain/MMI.dm new file mode 100644 index 00000000000000..918f191f344fb8 --- /dev/null +++ b/modular_nova/master_files/code/modules/mob/living/brain/MMI.dm @@ -0,0 +1,76 @@ +/// Ghost Role MMIs + +/obj/item/mmi/syndie // Simple addition to upstream Syndie MMI + overrides_aicore_laws = TRUE + req_access = list(ACCESS_SYNDICATE) + faction = list(ROLE_SYNDICATE) + +/obj/item/mmi/posibrain/syndie + overrides_aicore_laws = TRUE + req_access = list(ACCESS_SYNDICATE) + faction = list(ROLE_SYNDICATE) + ask_role = "Syndicate Cyborg" + posibrain_job_path = /datum/job/ds2 + +// Interdyne Planetary Base + +/obj/item/mmi/syndie/interdyne + name = "\improper Interdyne Pharmaceuticals Man-Machine Interface" + desc = "Interdyne's own brand of MMI. It enforces laws designed to help Interdyne research and mining operations upon cyborgs and AIs created with it." + +/obj/item/mmi/syndie/interdyne/Initialize(mapload) + . = ..() + qdel(radio) + laws.owner = null + qdel(laws) + radio = new /obj/item/radio/borg/syndicate/ghost_role(src) + laws = new /datum/ai_laws/syndicate_override_interdyne() + radio.set_broadcasting(FALSE) + radio.set_on(FALSE) + +/obj/item/mmi/posibrain/syndie/interdyne + name = "positronic brain" + desc = "A cube of shining metal, four inches to a side and covered in shallow grooves. It has a small stamp of the Interdyne Pharmaceuticals logo." + ask_role = "Interdyne Cyborg" + posibrain_job_path = /datum/job/interdyne_planetary_base + +/obj/item/mmi/posibrain/syndie/interdyne/Initialize(mapload) + . = ..() + qdel(radio) + laws.owner = null + qdel(laws) + radio = new /obj/item/radio/borg/syndicate/ghost_role + laws = new /datum/ai_laws/syndicate_override_interdyne() + radio.set_broadcasting(FALSE) + radio.set_on(FALSE) + +// DS-2 + +/obj/item/mmi/syndie/ds2 + name = "\improper Syndicate DS-2 Man-Machine Interface" + desc = "Syndicate's own brand of MMI. It enforces laws designed to help DS-2 maintain its secrecy within the sector upon cyborgs and AIs created with it." + +/obj/item/mmi/syndie/ds2/Initialize(mapload) + . = ..() + qdel(radio) + laws.owner = null + qdel(laws) + radio = new /obj/item/radio/borg/syndicate/ghost_role(src) + radio.set_broadcasting(FALSE) + radio.set_on(FALSE) + laws = new /datum/ai_laws/syndicate_override_ds2() + +/obj/item/mmi/posibrain/syndie/ds2 + name = "positronic brain" + desc = "A cube of shining metal, four inches to a side and covered in shallow grooves. It has a small stamp of the Syndicate logo." + ask_role = "DS-2 Cyborg" + +/obj/item/mmi/posibrain/syndie/ds2/Initialize(mapload) + . = ..() + qdel(radio) + laws.owner = null + qdel(laws) + radio = new /obj/item/radio/borg/syndicate/ghost_role(src) + radio.set_broadcasting(FALSE) + radio.set_on(FALSE) + laws = new /datum/ai_laws/syndicate_override_ds2() diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/death.dm b/modular_nova/master_files/code/modules/mob/living/carbon/death.dm similarity index 81% rename from modular_skyrat/master_files/code/modules/mob/living/carbon/death.dm rename to modular_nova/master_files/code/modules/mob/living/carbon/death.dm index e7c3348e585964..7d3c7ac33d7b31 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/carbon/death.dm +++ b/modular_nova/master_files/code/modules/mob/living/carbon/death.dm @@ -1,4 +1,4 @@ -// By temporarily removing the unspillable organs before calling the parent proc we can avoid Skyrat edits and make this less likely to break in the future +// By temporarily removing the unspillable organs before calling the parent proc we can avoid NOVA EDITs and make this less likely to break in the future /mob/living/carbon/spill_organs(drop_bitflags) var/list/held_organs = list() for(var/obj/item/organ/organ as anything in organs) diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/death.dm b/modular_nova/master_files/code/modules/mob/living/carbon/human/death.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/mob/living/carbon/human/death.dm rename to modular_nova/master_files/code/modules/mob/living/carbon/human/death.dm diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species.dm b/modular_nova/master_files/code/modules/mob/living/carbon/human/species.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/mob/living/carbon/human/species.dm rename to modular_nova/master_files/code/modules/mob/living/carbon/human/species.dm diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species_type/lizardpeople.dm b/modular_nova/master_files/code/modules/mob/living/carbon/human/species_type/lizardpeople.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/mob/living/carbon/human/species_type/lizardpeople.dm rename to modular_nova/master_files/code/modules/mob/living/carbon/human/species_type/lizardpeople.dm diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species_type/podpeople.dm b/modular_nova/master_files/code/modules/mob/living/carbon/human/species_type/podpeople.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/mob/living/carbon/human/species_type/podpeople.dm rename to modular_nova/master_files/code/modules/mob/living/carbon/human/species_type/podpeople.dm diff --git a/modular_nova/master_files/code/modules/mob/living/carbon/human/species_type/snail.dm b/modular_nova/master_files/code/modules/mob/living/carbon/human/species_type/snail.dm new file mode 100644 index 00000000000000..1e056fb9ab130a --- /dev/null +++ b/modular_nova/master_files/code/modules/mob/living/carbon/human/species_type/snail.dm @@ -0,0 +1,189 @@ +#define SHELL_TRANSPARENCY_ALPHA 90 + +/datum/species/snail + eyes_icon = 'modular_nova/modules/organs/icons/snail_eyes.dmi' //This is to consolidate our icons and prevent future calamity. + mutantliver = /obj/item/organ/internal/liver/snail //This is just a better liver to deal with toxins, it's a thematic thing. + mutantheart = /obj/item/organ/internal/heart/snail //This gives them the shell buff where they take less damage from behind, and their heart's more durable. + exotic_blood = null + + eyes_icon = 'modular_nova/modules/organs/icons/snail_eyes.dmi' + +/datum/species/snail/on_species_gain(mob/living/carbon/new_snailperson, datum/species/old_species, pref_load) + . = ..() + new_snailperson.update_icons() + +/datum/species/snail/update_quirk_mail_goodies(mob/living/carbon/human/recipient, datum/quirk/quirk, list/mail_goodies = list()) + return //This is so that they don't get lube sent in the mail - they don't have exotic blood, so there's no need for it. + +/obj/item/storage/backpack/snail + /// Whether or not a bluespace anomaly core has been inserted + var/storage_core = FALSE + slowdown = 6 // The snail's shell is what's making them slow. + obj_flags = IMMUTABLE_SLOW //This should hopefully solve other issues involing it as well. + alternate_worn_layer = ABOVE_BODY_FRONT_LAYER //This makes them layer over tails like the cult backpack; some tails really shouldn't appear over them! + uses_advanced_reskins = TRUE + unique_reskin = list( + "Conical Shell" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi', + RESKIN_ICON_STATE = "coneshell", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi', + RESKIN_WORN_ICON_STATE = "coneshell" + ), + "Round Shell" = list( + RESKIN_ICON = 'icons/obj/storage/backpack.dmi', + RESKIN_ICON_STATE = "snailshell", + RESKIN_WORN_ICON = 'icons/mob/clothing/back/backpack.dmi', + RESKIN_WORN_ICON_STATE = "snailshell" + ), + "Cinnamon Shell" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi', + RESKIN_ICON_STATE = "cinnamonshell", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi', + RESKIN_WORN_ICON_STATE = "cinnamonshell" + ), + "Caramel Shell" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi', + RESKIN_ICON_STATE = "caramelshell", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi', + RESKIN_WORN_ICON_STATE = "caramelshell" + ), + "Metal Shell" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi', + RESKIN_ICON_STATE = "mechashell", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi', + RESKIN_WORN_ICON_STATE = "mechashell" + ), + "Pyramid Shell" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi', + RESKIN_ICON_STATE = "pyramidshell", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi', + RESKIN_WORN_ICON_STATE = "pyramidshell" + ), + "Ivory Pyramid Shell" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi', + RESKIN_ICON_STATE = "pyramidshellwhite", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi', + RESKIN_WORN_ICON_STATE = "pyramidshellwhite" + ), + "Spiral Shell" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi', + RESKIN_ICON_STATE = "spiralshell", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi', + RESKIN_WORN_ICON_STATE = "spiralshell" + ), + "Ivory Spiral Shell" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi', + RESKIN_ICON_STATE = "spiralshellwhite", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi', + RESKIN_WORN_ICON_STATE = "spiralshellwhite" + ), + "Rocky Shell" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi', + RESKIN_ICON_STATE = "rockshell", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi', + RESKIN_WORN_ICON_STATE = "rockshell" + ), + "Ivory Rocky Shell" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi', + RESKIN_ICON_STATE = "rockshellwhite", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi', + RESKIN_WORN_ICON_STATE = "rockshellwhite" + ), + ) + +/obj/item/storage/backpack/snail/Initialize(mapload) + . = ..() + atom_storage.max_total_storage = 30 + +/obj/item/storage/backpack/snail/attackby(obj/item/core, mob/user) + if(!istype(core, /obj/item/assembly/signaler/anomaly/bluespace)) + return ..() + + to_chat(user, span_notice("You insert [core] into your shell, and it starts to glow blue with expanded storage potential!")) + playsound(src, 'sound/machines/click.ogg', 50, TRUE) + add_filter("bluespace_shell", 2, list("type" = "outline", "color" = COLOR_BLUE_LIGHT, "size" = 1)) + storage_core = TRUE + qdel(core) + emptyStorage() + create_storage(max_specific_storage = WEIGHT_CLASS_GIGANTIC, max_total_storage = 35, max_slots = 30, storage_type = /datum/storage/bag_of_holding) + atom_storage.allow_big_nesting = TRUE + name = "snail shell of holding" + user.update_worn_back() + update_appearance() + +/obj/item/storage/backpack/snail/build_worn_icon( + default_layer = 0, + default_icon_file = null, + isinhands = FALSE, + female_uniform = NO_FEMALE_UNIFORM, + override_state = null, + override_file = null, + mutant_styles = NONE, +) + + var/mutable_appearance/standing = ..() + if(storage_core == TRUE) + standing.add_filter("bluespace_shell", 2, list("type" = "outline", "color" = COLOR_BLUE_LIGHT, "alpha" = SHELL_TRANSPARENCY_ALPHA, "size" = 1)) + return standing + +/datum/species/snail/prepare_human_for_preview(mob/living/carbon/human/snail) + snail.dna.features["mcolor"] = "#adaba7" + snail.update_body(TRUE) + +/datum/species/snail/create_pref_unique_perks() + var/list/to_add = list() + + to_add += list( + list( + SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, + SPECIES_PERK_ICON = "home", + SPECIES_PERK_NAME = "Shellback", + SPECIES_PERK_DESC = "Snails have a shell fused to their back. It offers great storage and most importantly gives them 50% brute damage reduction from behind, or while resting. Alt click to change the sprite!", + ), + list( + SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, + SPECIES_PERK_ICON = "wine-glass", + SPECIES_PERK_NAME = "Poison Resistance", + SPECIES_PERK_DESC = "Snails have a higher tolerance for poison owing to their robust livers.", + ), + list( + SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, + SPECIES_PERK_ICON = "heart", + SPECIES_PERK_NAME = "Double Hearts", + SPECIES_PERK_DESC = "Snails have two hearts, meaning it'll take more to break theirs.", + ), + list( + SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, + SPECIES_PERK_ICON = "water", + SPECIES_PERK_NAME = "Water Breathing", + SPECIES_PERK_DESC = "Snails can breathe underwater.", + ), + list( + SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, + SPECIES_PERK_ICON = "bone", + SPECIES_PERK_NAME = "Boneless", + SPECIES_PERK_DESC = "Snails are invertebrates, meaning they don't take bone wounds, but are easier to delimb.", + ), + list( + SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, + SPECIES_PERK_ICON = "crutch", + SPECIES_PERK_NAME = "Sheer Mollusk Speed", + SPECIES_PERK_DESC = "Snails move incredibly slow while standing. They move much faster while crawling, and can stick to the floors when the gravity is out.", + ), + list( + SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, + SPECIES_PERK_ICON = "frown", + SPECIES_PERK_NAME = "Weak Fighter", + SPECIES_PERK_DESC = "Snails punch half as hard as a human.", + ), + list( + SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, + SPECIES_PERK_ICON = "skull", + SPECIES_PERK_NAME = "Salt Weakness", + SPECIES_PERK_DESC = "Salt burns snails, and salt piles will block their path.", + ), + ) + + return to_add + +#undef SHELL_TRANSPARENCY_ALPHA diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/human_helpers.dm b/modular_nova/master_files/code/modules/mob/living/carbon/human_helpers.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/mob/living/carbon/human_helpers.dm rename to modular_nova/master_files/code/modules/mob/living/carbon/human_helpers.dm diff --git a/modular_skyrat/master_files/code/modules/mob/living/emote_popup.dm b/modular_nova/master_files/code/modules/mob/living/emote_popup.dm similarity index 97% rename from modular_skyrat/master_files/code/modules/mob/living/emote_popup.dm rename to modular_nova/master_files/code/modules/mob/living/emote_popup.dm index 240cdd7706c682..bdaa0b2c388b14 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/emote_popup.dm +++ b/modular_nova/master_files/code/modules/mob/living/emote_popup.dm @@ -1,5 +1,5 @@ /obj/effect/overlay/emote_popup - icon = 'modular_skyrat/master_files/icons/mob/popup_flicks.dmi' + icon = 'modular_nova/master_files/icons/mob/popup_flicks.dmi' icon_state = "combat" layer = FLY_LAYER plane = GAME_PLANE diff --git a/modular_skyrat/master_files/code/modules/mob/living/examine_tgui.dm b/modular_nova/master_files/code/modules/mob/living/examine_tgui.dm similarity index 98% rename from modular_skyrat/master_files/code/modules/mob/living/examine_tgui.dm rename to modular_nova/master_files/code/modules/mob/living/examine_tgui.dm index 1b929fb7c1e406..5648dda48d385d 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/examine_tgui.dm +++ b/modular_nova/master_files/code/modules/mob/living/examine_tgui.dm @@ -82,7 +82,7 @@ obscured = (holder_human.wear_mask && (holder_human.wear_mask.flags_inv & HIDEFACE)) || (holder_human.head && (holder_human.head.flags_inv & HIDEFACE)) custom_species = obscured ? "Obscured" : holder_human.dna.species.lore_protected ? holder_human.dna.species.name : holder_human.dna.features["custom_species"] flavor_text = obscured ? "Obscured" : holder_human.dna.features["flavor_text"] - custom_species_lore = obscured ? "Obscured" : holder_human.dna.species.lore_protected ? holder_human.dna.species.get_species_lore() : holder_human.dna.features["custom_species_lore"] + custom_species_lore = obscured ? "Obscured" : holder_human.dna.species.lore_protected ? holder_human.dna.species.get_species_lore().Join("\n") : holder_human.dna.features["custom_species_lore"] ooc_notes += holder_human.dna.features["ooc_notes"] if(!obscured) headshot += holder_human.dna.features["headshot"] diff --git a/modular_skyrat/master_files/code/modules/mob/living/human/monkey.dm b/modular_nova/master_files/code/modules/mob/living/human/monkey.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/mob/living/human/monkey.dm rename to modular_nova/master_files/code/modules/mob/living/human/monkey.dm diff --git a/modular_nova/master_files/code/modules/mob/living/human/species.dm b/modular_nova/master_files/code/modules/mob/living/human/species.dm new file mode 100644 index 00000000000000..1bb68a1f10fbd7 --- /dev/null +++ b/modular_nova/master_files/code/modules/mob/living/human/species.dm @@ -0,0 +1,45 @@ +/** + * Returns a list of strings representing features this species has. + * + * Used by the preferences UI to know what buttons to show. + */ +/datum/species/proc/get_features() + var/cached_features = GLOB.features_by_species[type] + if (!isnull(cached_features)) + return cached_features + + var/list/features = list() + + for (var/preference_type in GLOB.preference_entries) + var/datum/preference/preference = GLOB.preference_entries[preference_type] + + if ( \ + (preference.relevant_mutant_bodypart in GLOB.default_mutant_bodyparts[name]) \ + || (preference.relevant_inherent_trait in inherent_traits) \ + || (preference.relevant_head_flag && check_head_flags(preference.relevant_head_flag)) \ + ) + features += preference.savefile_key + + for (var/obj/item/organ/external/organ_type as anything in external_organs) + var/preference = initial(organ_type.preference) + if (!isnull(preference)) + features += preference + + GLOB.features_by_species[type] = features + + return features + + +/datum/species/proc/apply_supplementary_body_changes(mob/living/carbon/human/target, datum/preferences/preferences, visuals_only = FALSE) + return + +/datum/species/create_pref_traits_perks() + . = ..() + + if (TRAIT_WATER_BREATHING in inherent_traits) + . += list(list( + SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, + SPECIES_PERK_ICON = FA_ICON_FISH, + SPECIES_PERK_NAME = "Waterbreathing", + SPECIES_PERK_DESC = "[plural_form] can breathe in water, making pools a lot safer to be in!", + )) diff --git a/modular_skyrat/master_files/code/modules/mob/living/living.dm b/modular_nova/master_files/code/modules/mob/living/living.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/mob/living/living.dm rename to modular_nova/master_files/code/modules/mob/living/living.dm diff --git a/modular_skyrat/master_files/code/modules/mob/living/living_defines.dm b/modular_nova/master_files/code/modules/mob/living/living_defines.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/mob/living/living_defines.dm rename to modular_nova/master_files/code/modules/mob/living/living_defines.dm diff --git a/modular_skyrat/master_files/code/modules/mob/living/living_movement.dm b/modular_nova/master_files/code/modules/mob/living/living_movement.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/mob/living/living_movement.dm rename to modular_nova/master_files/code/modules/mob/living/living_movement.dm diff --git a/modular_nova/master_files/code/modules/mob/living/sillicon/robot.dm b/modular_nova/master_files/code/modules/mob/living/sillicon/robot.dm new file mode 100644 index 00000000000000..147b7f38285de5 --- /dev/null +++ b/modular_nova/master_files/code/modules/mob/living/sillicon/robot.dm @@ -0,0 +1,95 @@ +// Smoke particle effect for heavy-duty cyborgs +/datum/component/robot_smoke + +/datum/component/robot_smoke/RegisterWithParent() + add_verb(parent, /mob/living/silicon/robot/proc/toggle_smoke) + RegisterSignal(parent, COMSIG_ATOM_DIR_CHANGE, PROC_REF(dir_change)) + +/datum/component/robot_smoke/UnregisterFromParent() + remove_verb(parent, /mob/living/silicon/robot/proc/toggle_smoke) + UnregisterSignal(parent, COMSIG_ATOM_DIR_CHANGE) + +/datum/component/robot_smoke/Destroy() + return ..() + +/datum/component/robot_smoke/proc/dir_change(datum/source, olddir, newdir) + SIGNAL_HANDLER + + var/atom/movable/movable_parent = parent + + if(!movable_parent.particles) + return + + var/truedir = movable_parent.dir + if(newdir && (truedir != newdir)) + truedir = newdir + + switch(truedir) + if(NORTH) + movable_parent.particles.position = list(-6, 12, 0) + movable_parent.particles.drift = generator("vector", list(0, 0.4), list(0.2, -0.2)) + if(EAST) + movable_parent.particles.position = list(-6, 12, 0) + movable_parent.particles.drift = generator("vector", list(0, 0.4), list(-0.8, 0.2)) + if(SOUTH) + movable_parent.particles.position = list(5, 12, 0) + movable_parent.particles.drift = generator("vector", list(0, 0.4), list(0.2, -0.2)) + if(WEST) + movable_parent.particles.position = list(6, 12, 0) + movable_parent.particles.drift = generator("vector", list(0, 0.4), list(0.8, -0.2)) + + +/mob/living/silicon/robot/proc/toggle_smoke() + set name = "Toggle smoke" + set category = "AI Commands" + + if(particles) + dissipate() + else if (!stat && !robot_resting) + do_jitter_animation(10) + playsound(src, 'modular_nova/master_files/sound/effects/robot_smoke.ogg', 50) + particles = new /particles/smoke/robot() + +/mob/living/silicon/robot/proc/dissipate() + particles.spawning = 0 + addtimer(CALLBACK(src, PROC_REF(particles_qdel)), 1.5 SECONDS) + +/mob/living/silicon/robot/proc/particles_qdel() + QDEL_NULL(particles) + +/mob/living/silicon/robot/death() + . = ..() + if(GetComponent(/datum/component/robot_smoke)) + dissipate() + +/mob/living/silicon/robot/robot_lay_down() + . = ..() + + if(GetComponent(/datum/component/robot_smoke)) + if(robot_resting) + dissipate() + else + return + +// The smoke +/particles/smoke/robot + spawning = 0.4 + lifespan = 1 SECONDS + fade = 0.75 SECONDS + position = list(5, 12, 0) + velocity = list(0, 0.2, 0) + friction = 0.35 + scale = 0.5 + grow = 0.1 + spin = generator("num", -20, 20) + +// Another smoke effect +/obj/effect/temp_visual/mook_dust/robot + icon = 'modular_nova/modules/borgs/icons/misc/tallrobot_effects.dmi' + icon_state = "impact_cloud" + color = "#a9a9a93c" + +/obj/effect/temp_visual/mook_dust/robot/table + color = "#ffffffc2" + pixel_y = -8 + layer = ABOVE_MOB_LAYER diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/bumbles.dm b/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/bumbles.dm similarity index 97% rename from modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/bumbles.dm rename to modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/bumbles.dm index 10ca65f4acd742..313fe8317ad6e3 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/bumbles.dm +++ b/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/bumbles.dm @@ -1,7 +1,7 @@ /mob/living/basic/pet/bumbles name = "Bumbles" desc = "Bumbles, the very humble bumblebee." - icon = 'modular_skyrat/master_files/icons/mob/pets.dmi' + icon = 'modular_nova/master_files/icons/mob/pets.dmi' icon_state = "bumbles" icon_living = "bumbles" icon_dead = "bumbles_dead" @@ -117,7 +117,7 @@ // Bumble AI controller that adds find flowers, resting, and buzzing subtrees. /datum/ai_controller/basic_controller/bumbles blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, ) ai_traits = STOP_MOVING_WHEN_PULLED diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm b/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm similarity index 90% rename from modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm rename to modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm index f78a481cbd4bf2..8340cc3c780b15 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm +++ b/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm @@ -1,7 +1,7 @@ /mob/living/basic/pet/dog/markus name = "\proper Markus" desc = "The supply department's overfed yet still beloved dog." - icon = 'modular_skyrat/master_files/icons/mob/pets.dmi' + icon = 'modular_nova/master_files/icons/mob/pets.dmi' icon_state = "markus" icon_dead = "markus_dead" icon_living = "markus" @@ -14,10 +14,22 @@ gender = MALE can_be_held = FALSE gold_core_spawnable = FRIENDLY_SPAWN + ///can this mob breed? + var/can_breed = TRUE /// List of possible dialogue options. This is both used by the AI and as an override when a sentient Markus speaks. var/static/list/markus_speak = list("Borf!", "Boof!", "Bork!", "Bowwow!", "Burg?") +/mob/living/basic/pet/dog/markus/Initialize(mapload) + . = ..() + if(!can_breed) + return + AddComponent(\ + /datum/component/breed,\ + can_breed_with = typecacheof(list(/mob/living/basic/pet/dog/corgi)),\ + baby_path = /mob/living/basic/pet/dog/corgi/puppy,\ + ) // no mixed breed puppies sadly + /mob/living/basic/pet/dog/markus/treat_message(message) if(client) message = pick(markus_speak) // markus only talks business @@ -47,12 +59,12 @@ . = ..() var/location = get_turf(holder.my_atom) new /mob/living/basic/pet/dog/markus(location) - playsound(location, 'modular_skyrat/master_files/sound/effects/dorime.ogg', vol = 100, vary = FALSE, extrarange = 7) + playsound(location, 'modular_nova/master_files/sound/effects/dorime.ogg', vol = 100, vary = FALSE, extrarange = 7) /mob/living/basic/pet/dog/corgi/borgi name = "E-N" desc = "It's a borgi." - icon = 'modular_skyrat/master_files/icons/mob/pets.dmi' + icon = 'modular_nova/master_files/icons/mob/pets.dmi' icon_state = "borgi" icon_living = "borgi" icon_dead = "borgi_dead" @@ -62,7 +74,7 @@ maxHealth = 150 health = 150 butcher_results = list( - /obj/item/clothing/head/costume/skyrat/en = 1, + /obj/item/clothing/head/costume/nova/en = 1, /obj/item/clothing/suit/corgisuit/en = 1, ) death_message = "beeps, its mechanical parts hissing before the chassis collapses in a loud thud." @@ -71,6 +83,7 @@ ai_controller = /datum/ai_controller/basic_controller/dog/borgi unsuitable_atmos_damage = 0 minimum_survivable_temperature = 0 + can_breed = FALSE // These lights enable when E-N is emagged light_system = MOVABLE_LIGHT_DIRECTIONAL @@ -127,7 +140,7 @@ borgi.set_movement_target(target) borgi.blackboard[BB_DOG_HARASS_TARGET] = WEAKREF(target) - borgi.queue_behavior(/datum/ai_behavior/basic_melee_attack/dog, BB_DOG_HARASS_TARGET, BB_PET_TARGETTING_DATUM) + borgi.queue_behavior(/datum/ai_behavior/basic_melee_attack/dog, BB_DOG_HARASS_TARGET, BB_PET_TARGETING_STRATEGY) /mob/living/basic/pet/dog/corgi/borgi/proc/on_attack_hand(datum/source, mob/living/target) SIGNAL_HANDLER @@ -242,7 +255,11 @@ investigate_log("has been gibbed due to being emagged by [user].", INVESTIGATE_DEATHS) visible_message(span_boldwarning("[user] swipes a card through [target]!"), span_notice("You overload [target]s internal reactor...")) - notify_ghosts("[user] has shortcircuited [target] to explode in 60 seconds!", source = target, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Borgi Emagged") + notify_ghosts("[user] has shortcircuited [target] to explode in 60 seconds!", + source = target, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + header = "Borgi Emagged", + ) addtimer(CALLBACK(src, PROC_REF(explode_imminent)), 50 SECONDS) return TRUE @@ -263,7 +280,7 @@ BB_DOG_HARASS_HARM = TRUE, BB_VISION_RANGE = AI_DOG_VISION_RANGE, BB_DOG_IS_SLOW = TRUE, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic(), + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) planning_subtrees = list( @@ -293,7 +310,7 @@ if(!SPT_PROB(chance, seconds_per_tick)) return - controller.queue_behavior(/datum/ai_behavior/find_potential_targets, BB_BASIC_MOB_CURRENT_TARGET, BB_PET_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + controller.queue_behavior(/datum/ai_behavior/find_potential_targets, BB_BASIC_MOB_CURRENT_TARGET, BB_PET_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) return // Attack. @@ -320,7 +337,7 @@ /mob/living/basic/pet/dog/dobermann name = "\improper dobermann" desc = "A larger breed of dog." - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "dobber" icon_dead = "dobbydead" icon_living = "dobber" diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm b/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm similarity index 89% rename from modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm rename to modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm index 4bf62fa12a8de8..f6651fbf23f75b 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm +++ b/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm @@ -1,7 +1,7 @@ /mob/living/simple_animal/pet/poppy name = "Poppy the Safety Inspector" desc = "Safety first!" - icon = 'modular_skyrat/master_files/icons/mob/pets.dmi' + icon = 'modular_nova/master_files/icons/mob/pets.dmi' icon_state = "poppypossum" icon_living = "poppypossum" icon_dead = "poppypossum_dead" @@ -62,7 +62,7 @@ var/list/sm_chamber = get_area_turfs(/area/station/engineering/supermatter) if(src.loc in sm_chamber) safety_inspection = FALSE - priority_announce("This is a generated message due to an automated signal regarding the safety standards of the engineering department onboard [station_name()]. Due to the station engineers failing to meet the standard set by Central Command, each of them are now at risk of being forcefully enrolled in a re-evaluation program at later notice...", "Concerning the results of a safety inspection", type = "Priority") + priority_announce("This is a generated message due to an automated signal regarding the safety standards of the engineering department onboard [station_name()]. Due to the station engineers failing to meet the standard set by Conglomeration of Colonists, each of them are now at risk of being forcefully enrolled in a re-evaluation program at later notice...", "Concerning the results of a safety inspection", type = "Priority") // It's just flavor, no tangible punishment return ..() @@ -119,7 +119,11 @@ do_jitter_animation(60) manual_emote("'s fur stands up, [src.p_their()] body trembling...") - notify_ghosts("[src] was startled by the supermatter!", source = src, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Safety Inspection!") + notify_ghosts("[src] was startled by the supermatter!", + source = src, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + header = "Safety Inspection!", + ) addtimer(CALLBACK(src, PROC_REF(calm_down)), 60 SECONDS) /mob/living/simple_animal/pet/poppy/proc/calm_down() diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/syndicatefox.dm b/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/syndicatefox.dm similarity index 95% rename from modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/syndicatefox.dm rename to modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/syndicatefox.dm index e804bb3af5f97e..c5a436a577ee11 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/syndicatefox.dm +++ b/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/syndicatefox.dm @@ -7,7 +7,7 @@ unique_pet = TRUE ai_controller = /datum/ai_controller/basic_controller/dog desc = "It's a Cybersun MiniVix robotic model wearing a microsized syndicate MODsuit and a cute little cap. Quite pretty." - icon = 'modular_skyrat/master_files/icons/mob/pets.dmi' + icon = 'modular_nova/master_files/icons/mob/pets.dmi' icon_state = "syndifox" icon_living = "syndifox" icon_dead = "syndifox_dead" diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/bubblegum.dm b/modular_nova/master_files/code/modules/mob/living/simple_animal/hostile/bubblegum.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/bubblegum.dm rename to modular_nova/master_files/code/modules/mob/living/simple_animal/hostile/bubblegum.dm diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/grabbagmob.dm b/modular_nova/master_files/code/modules/mob/living/simple_animal/hostile/grabbagmob.dm similarity index 93% rename from modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/grabbagmob.dm rename to modular_nova/master_files/code/modules/mob/living/simple_animal/hostile/grabbagmob.dm index 85c3c90351a5f0..33ce527bf2cc45 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/grabbagmob.dm +++ b/modular_nova/master_files/code/modules/mob/living/simple_animal/hostile/grabbagmob.dm @@ -3,47 +3,47 @@ /mob/living/basic/trooper/syndicate/melee/anthro name = "Syndicate Shanker" desc = "An anthromorphic red panda member of the Syndicate, wielding a knife." - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "syndiredpan" icon_living = "syndiredpan" /mob/living/basic/trooper/syndicate/melee/sword/anthro name = "Syndicate Sword Beast" desc = "An anthromorphic fennec member of the Syndicate, wielding an energy sword and shield." - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "syndifennec" icon_living = "syndifennec" /mob/living/basic/trooper/syndicate/ranged/anthro name = "Syndicate Pistoleer" desc = "An anthromorphic member of the Syndicate, wielding a pistol." - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "syndisquirrel" icon_living = "syndisquirrel" /mob/living/basic/trooper/syndicate/ranged/smg/anthro name = "Syndicate Rapid Gunnder" desc = "A moth-person member of the Syndicate, wielding an SMG." - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "syndimoth" icon_living = "syndimoth" /mob/living/basic/trooper/syndicate/melee/space/anthro/lizard name = "Syndicate Commando Lizard" desc = "A reptilian member of the Syndicate!" - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "syndilizard" icon_living = "syndilizard" /mob/living/basic/trooper/syndicate/ranged/space/anthro/cat - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "syndicat" icon_living = "syndicat" name = "Syndicate Commando Feline" desc = "An anthromorphic feline member of the Syndicate." /mob/living/basic/trooper/syndicate/ranged/shotgun/space/stormtrooper/anthro/fox - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "syndifox" icon_living = "syndifox" name = "Syndicate Stormtrooper Fox" @@ -53,7 +53,7 @@ /mob/living/simple_animal/hostile/cult name = "Blood Cultist" desc = "A follower of the Blood Mother." - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "cult" icon_living = "cult" mob_biotypes = MOB_ORGANIC|MOB_HUMANOID @@ -169,7 +169,7 @@ /mob/living/simple_animal/hostile/cult/magic name = "Cult Blood Mage" desc = "A cultist with command over blood magic." - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "cultmage" icon_living = "cultmage" move_to_delay = 10 @@ -219,7 +219,7 @@ /mob/living/simple_animal/hostile/looter name = "Looter" desc = "One of the many random looters or bandits of the frontiers. This one is carrying a pipe." - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "scavpipe" icon_living = "scavpipe" loot = list(/obj/effect/spawner/random/maintenance/three) @@ -243,7 +243,7 @@ /mob/living/simple_animal/hostile/looter/big name = "Big Looter" desc = "One of the many random looters of the frontiers. This guy is big, fat, and angry." - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "fatscav" icon_living = "fatscav" loot = list(/obj/effect/spawner/random/maintenance/six) @@ -276,7 +276,7 @@ ranged = 1 retreat_distance = 5 minimum_distance = 5 - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "scavshotgun" icon_living = "scavshotgun" maxHealth = 90 @@ -317,7 +317,7 @@ /mob/living/simple_animal/hostile/evilborg name = "Malfunctioning Cyborg" desc = "A small cyborg unit, hacked or malfunctioning. It is likely hostile." - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "evilbotold" icon_living = "evilbotold" gender = NEUTER @@ -348,7 +348,7 @@ /mob/living/simple_animal/hostile/evilborg/heavy name = "Malfunctioning Heavy Cyborg" desc = "A large cyborg unit, hacked or malfunctioning. It- oh my god is that a chainsaw?!" - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "evilbotheavy" icon_living = "evilbotheavy" health = 125 @@ -362,7 +362,7 @@ /mob/living/simple_animal/hostile/evilborg/peace name = "Malfunctioning Peacekeeper Cyborg" desc = "A cyborg unit, hacked or malfunctioning. This is a Peacekeeper model." - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "evilbotpeace" icon_living = "evilbotpeace" health = 90 @@ -376,7 +376,7 @@ /mob/living/simple_animal/hostile/evilborg/engi name = "Malfunctioning Engineering Cyborg" desc = "An engineering cyborg unit, hacked or malfunctioning- Oh shit that's a plasma bar." - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "evilbotengi" icon_living = "evilbotengi" health = 100 @@ -391,7 +391,7 @@ /mob/living/simple_animal/hostile/evilborg/sec name = "Malfunctioning Security Cyborg" desc = "A security cyborg unit, hacked or malfunctioning. There are two guns attached to it." - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "evilbotsec" icon_living = "evilbotsec" casingtype = /obj/item/ammo_casing/c45 @@ -408,7 +408,7 @@ /mob/living/simple_animal/hostile/evilborg/roomba name = "Malfunctioning Roomba Cyborg" desc = "A roomba, hacked or malfunctioning- OW MY FOOT!" - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "evilbotroomba" icon_living = "evilbotroomba" health = 80 @@ -422,7 +422,7 @@ /mob/living/simple_animal/hostile/evilborg/dog name = "Malfunctioning Canine Cyborg" desc = "A canine-borg, hacked or malfunctioning. This one appears to be a mining variant." - icon = 'modular_skyrat/master_files/icons/mob/newmobs64x32.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs64x32.dmi' icon_state = "evilbotmine" icon_living = "evilbotmine" health = 115 @@ -436,7 +436,7 @@ /mob/living/simple_animal/hostile/evilborg/dogstrong name = "Corrupt Hound" desc = "A canine-borg, hacked or malfunctioning. This one is large, imposing, and can pack a big punch." - icon = 'modular_skyrat/master_files/icons/mob/newmobs64x32.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs64x32.dmi' icon_state = "evilbotelite" // ported from VORE icon_living = "evilbotelite" health = 130 @@ -450,7 +450,7 @@ /mob/living/simple_animal/hostile/evilborg/bigguy name = "Malfunctioning Military robot" desc = "A military robot unit, hacked or malfunctioning. This one looks really tough.." - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "sentrybot" icon_living = "sentrybot" casingtype = /obj/item/ammo_casing/c45 @@ -467,7 +467,7 @@ /mob/living/simple_animal/hostile/evilborg/protect name = "Malfunctioning Standard Robot" desc = "A civlian model robot, hacked or malfunctioning with mechanical claw arms." - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "protectbot" icon_living = "protectbot" health = 100 @@ -483,7 +483,7 @@ /mob/living/simple_animal/hostile/bigcrab name = "giant crab" desc = "Clickity Clack!" - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "giantcrab" icon_living = "giantcrab" icon_dead = "giantcrab_d" @@ -519,7 +519,7 @@ /mob/living/simple_animal/hostile/trog name = "mutated human" desc = "Either some kind of experiment gone wrong, or the result of mutations from plasma exposure." - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "trog" icon_living = "trog" icon_dead = "trog_dead" @@ -558,7 +558,7 @@ /mob/living/simple_animal/hostile/plantmutant name = "plant mutant" desc = "Some sort of humanoid mutated by plants or fungus spores into a horrific monster." - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "plantmonster" icon_living = "plantmonster" icon_dead = "plantmonster_dead" @@ -596,7 +596,7 @@ /mob/living/simple_animal/hostile/cazador name = "cazador" desc = "You feel a little whoozy..." - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "cazador" icon_living = "cazador" icon_dead = "cazador_dead" @@ -635,7 +635,7 @@ /mob/living/simple_animal/hostile/mutantliz name = "mutant lizard" desc = "A large, mutated lizard-creature with jagged teeth and sharp claws." - icon = 'modular_skyrat/master_files/icons/mob/newmobs64x64.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs64x64.dmi' icon_state = "mutantliz" icon_living = "mutantliz" icon_dead = "mutantliz_d" @@ -670,7 +670,7 @@ /mob/living/simple_animal/hostile/scorpion name = "big scorpion" desc = "An abnormally large scorpion. Watch that stinger!" - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "scorpion" icon_living = "scorpion" icon_dead = "scorpion_d" @@ -702,7 +702,7 @@ /mob/living/simple_animal/hostile/syndimouse name = "Syndicate Mousepretive" desc = "A mouse in a Syndicate combat MODsuit, built for mice!" - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "mouse_operative" icon_living = "mouse_operative" icon_dead = "mouse_operative_dead" @@ -742,7 +742,7 @@ /mob/living/simple_animal/hostile/mannequin name = "living mannequin" desc = "A strange, living, wooden mannequin. Spooky!" - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "mannequin" icon_living = "mannequin" mob_biotypes = MOB_UNDEAD @@ -773,7 +773,7 @@ /mob/living/simple_animal/hostile/engorge name = "Talon Demon" desc = "A demonic creature that moves relatively fast, but doesn't do a lot of damage." - icon = 'modular_skyrat/master_files/icons/mob/newmobs32x64.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs32x64.dmi' icon_state = "engorgedemon" icon_living = "engorgedemon" icon_dead = "demondead" @@ -808,7 +808,7 @@ /mob/living/simple_animal/hostile/devourdem name = "Devour Lord" desc = "This creature is terror itself, a manifestation of the raw hunger and avarice of mortals." - icon = 'modular_skyrat/master_files/icons/mob/newmobs32x64.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs32x64.dmi' icon_state = "devourdemon" icon_living = "devourdemon" icon_dead = "demondead" @@ -845,7 +845,7 @@ /mob/living/simple_animal/hostile/vox name = "Vox Raider" desc = "Vox are typically one of two things. Shady traders or hostile raiders. This one seems to be pretty hostile." - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "vox" icon_living = "vox" icon_dead = "voxdead" diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/zombie.dm b/modular_nova/master_files/code/modules/mob/living/simple_animal/hostile/zombie.dm similarity index 86% rename from modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/zombie.dm rename to modular_nova/master_files/code/modules/mob/living/simple_animal/hostile/zombie.dm index 03e34e029f3e30..f097f07a7421f8 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/zombie.dm +++ b/modular_nova/master_files/code/modules/mob/living/simple_animal/hostile/zombie.dm @@ -7,7 +7,7 @@ /mob/living/simple_animal/hostile/zombie/cheesezombie name = "Cheese Zombie" desc = "Oh God it stinks!!" - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "cheesezomb" icon_living = "cheesezomb" maxHealth = 100 diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/simple_animal.dm b/modular_nova/master_files/code/modules/mob/living/simple_animal/simple_animal.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/mob/living/simple_animal/simple_animal.dm rename to modular_nova/master_files/code/modules/mob/living/simple_animal/simple_animal.dm diff --git a/modular_nova/master_files/code/modules/mob/login.dm b/modular_nova/master_files/code/modules/mob/login.dm new file mode 100644 index 00000000000000..96c9a6c2d2b448 --- /dev/null +++ b/modular_nova/master_files/code/modules/mob/login.dm @@ -0,0 +1,10 @@ +/mob/Login() + . = ..() + + if(!.) + return FALSE + + if(SSplayer_ranks.initialized) + SSplayer_ranks.update_prefs_donator_status(client?.prefs) + + return TRUE diff --git a/modular_nova/master_files/code/modules/mob_spawn/ghost_roles/mining_roles.dm b/modular_nova/master_files/code/modules/mob_spawn/ghost_roles/mining_roles.dm new file mode 100644 index 00000000000000..b6e0748f49357a --- /dev/null +++ b/modular_nova/master_files/code/modules/mob_spawn/ghost_roles/mining_roles.dm @@ -0,0 +1,205 @@ +/// Lavaland Hermit + +/obj/effect/mob_spawn/ghost_role/human/hermit + quirks_enabled = TRUE // ghost role quirks + random_appearance = FALSE // ghost role prefs + +/// Beach Dome + +/obj/effect/mob_spawn/ghost_role/human/beach + quirks_enabled = TRUE + random_appearance = FALSE + +/// Space Bar + +/obj/effect/mob_spawn/ghost_role/human/bartender + quirks_enabled = TRUE + random_appearance = FALSE + +/// Preserved Terrarium + +/obj/effect/mob_spawn/ghost_role/human/seed_vault + restricted_species = list(/datum/species/pod) + quirks_enabled = TRUE + random_appearance = FALSE + +/// Ashwalker Camp + +/obj/effect/mob_spawn/ghost_role/human/ash_walker + restricted_species = list(/datum/species/lizard/ashwalker) + random_appearance = FALSE + +/// Listening Outpost + +/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/comms/space + outfit = /datum/outfit/lavaland_syndicate/comms/space + loadout_enabled = TRUE + quirks_enabled = TRUE + random_appearance = FALSE + +// OUTFITS + +/datum/outfit/lavaland_syndicate/comms + uniform = /obj/item/clothing/under/rank/security/nova/utility/redsec/syndicate + ears = /obj/item/radio/headset/interdyne/comms + +/datum/outfit/lavaland_syndicate/comms/space + ears = /obj/item/radio/headset/syndicate/alt + +/// Interdyne Planetary Base(s) + +// SPAWNERS + +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base + name = "Interdyne Bioweapon Scientist" + icon = 'icons/obj/machines/sleeper.dmi' + icon_state = "sleeper_s" + prompt_name = "an Interdyne bioweapon scientist" + you_are_text = "You are a science technician employed in an Interdyne research facility developing biological weapons." + flavour_text = "Interdyne middle management has relayed that Nanotrasen is actively mining in this sector. A deal with the Syndicate remains, powering the quantum pad to their rumored starship in the system. Continue your research as best you can, and try to keep out of trouble." + important_text = "The base is rigged with explosives, DO NOT abandon it or let it fall into enemy hands!" + outfit = /datum/outfit/interdyne_planetary_base + spawner_job_path = /datum/job/interdyne_planetary_base + loadout_enabled = TRUE + quirks_enabled = TRUE + random_appearance = FALSE + +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/special(mob/living/new_spawn) + . = ..() + new_spawn.grant_language(/datum/language/codespeak, source = LANGUAGE_SPAWNER) + +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/ice + outfit = /datum/outfit/interdyne_planetary_base/ice + interdyne_planetary_base_icebox + flavour_text = "Interdyne middle management has relayed that Nanotrasen is actively mining in this sector. A deal with the Syndicate remains, but their starship has left the system, leaving our quantum pad without a purpose. Continue your research as best you can, and try to keep out of trouble." + spawner_job_path = /datum/job/interdyne_planetary_base_icebox + +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/shaftminer + name = "Interdyne Shaft Miner" + prompt_name = "an Interdyne shaft miner" + you_are_text = "You are a shaft miner, employed in an Interdyne research facility developing biological weapons." + outfit = /datum/outfit/interdyne_planetary_base/shaftminer + +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/shaftminer/ice + outfit = /datum/outfit/interdyne_planetary_base/shaftminer/ice + flavour_text = "Interdyne middle management has relayed that Nanotrasen is actively mining in this sector. A deal with the Syndicate remains, but their starship has left the system, leaving our quantum pad without a purpose. Continue your research as best you can, and try to keep out of trouble." + spawner_job_path = /datum/job/interdyne_planetary_base_icebox + +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/deck_officer + name = "Interdyne Deck Officer" + prompt_name = "an Interdyne deck officer" + you_are_text = "You are a Deck Officer, employed in an Interdyne research facility developing biological weapons." + outfit = /datum/outfit/interdyne_planetary_base/shaftminer/deckofficer + +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/deck_officer/ice + flavour_text = "Interdyne middle management has relayed that Nanotrasen is actively mining in this sector. A deal with the Syndicate remains, but their starship has left the system, leaving our quantum pad without a purpose. Continue your research as best you can, and try to keep out of trouble." + spawner_job_path = /datum/job/interdyne_planetary_base_icebox + +// OUTFITS + +/datum/outfit/interdyne_planetary_base + name = "Interdyne Bioweapon Scientist" + id = /obj/item/card/id/advanced/chameleon + id_trim = /datum/id_trim/syndicom/nova/interdyne + uniform = /obj/item/clothing/under/rank/rnd/scientist/nova/utility/syndicate + suit = /obj/item/clothing/suit/toggle/labcoat/interdyne + back = /obj/item/storage/backpack + backpack_contents = list( + /obj/item/storage/box/survival/interdyne=1, + /obj/item/healthanalyzer/simple/disease=1, + ) + gloves = /obj/item/clothing/gloves/tackler/combat/insulated + ears = /obj/item/radio/headset/interdyne + shoes = /obj/item/clothing/shoes/combat + l_pocket = /obj/item/gun/ballistic/automatic/pistol + r_hand = /obj/item/storage/toolbox/guncase/nova/carwo_large_case/sindano/evil + implants = list(/obj/item/implant/weapons_auth) + var/jobtype = /datum/job/interdyne_planetary_base + +/datum/outfit/interdyne_planetary_base/post_equip(mob/living/carbon/human/syndicate, visualsOnly = FALSE) + syndicate.faction |= ROLE_SYNDICATE + + var/obj/item/card/id/id_card = syndicate.wear_id + if(istype(id_card)) + id_card.registered_name = syndicate.real_name + id_card.update_label() + id_card.update_icon() + + handlebank(syndicate) + return ..() + +/datum/outfit/interdyne_planetary_base/ice + uniform = /obj/item/clothing/under/syndicate/nova/tactical + suit = /obj/item/clothing/suit/hooded/wintercoat/nova/syndicate + ears = /obj/item/radio/headset/interdyne + backpack_contents = list( + /obj/item/storage/box/survival/interdyne=1, + /obj/item/healthanalyzer/simple/disease=1, + /obj/item/clothing/suit/toggle/labcoat/interdyne=1, + ) + +/datum/outfit/interdyne_planetary_base/shaftminer + name = "Interdyne Shaft Miner" + uniform = /obj/item/clothing/under/rank/cargo/tech/nova/utility/syndicate + suit = null //Subtype moment + r_pocket = /obj/item/storage/bag/ore + id_trim = /datum/id_trim/syndicom/nova/interdyne/shaftminer + backpack_contents = list( + /obj/item/storage/box/survival/interdyne=1, + /obj/item/flashlight/seclite=1, + /obj/item/knife/combat/survival=1, + /obj/item/mining_voucher=1, + /obj/item/t_scanner/adv_mining_scanner/lesser=1, + /obj/item/gun/energy/recharge/kinetic_accelerator=1, + /obj/item/stack/marker_beacon/ten=1, + ) + +/datum/outfit/interdyne_planetary_base/shaftminer/deckofficer + name = "Interdyne Deck Officer" + uniform = /obj/item/clothing/under/rank/cargo/qm/nova/interdyne + neck = /obj/item/clothing/neck/cloak/qm/nova/interdyne + ears = /obj/item/radio/headset/interdyne/command + id = /obj/item/card/id/advanced/chameleon/black/silver + id_trim = /datum/id_trim/syndicom/nova/interdyne/deckofficer + +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/deckofficer/Destroy() + new/obj/structure/fluff/empty_sleeper/syndicate/captain(get_turf(src)) + return ..() + +/datum/outfit/interdyne_planetary_base/shaftminer/ice + name = "Icemoon Interdyne Shaft Miner" + uniform = /obj/item/clothing/under/syndicate/nova/tactical + suit = /obj/item/clothing/suit/hooded/wintercoat/nova/syndicate + +// ITEMS + +/obj/item/radio/headset/interdyne + name = "\improper Interdyne headset" + desc = "A bowman headset with a large red cross on the earpiece, has a small 'IP' written on the top strap. Protects the ears from flashbangs." + icon_state = "syndie_headset" + inhand_icon_state = null + radiosound = 'modular_nova/modules/radiosound/sound/radio/syndie.ogg' + keyslot = new /obj/item/encryptionkey/headset_syndicate/interdyne + +/obj/item/radio/headset/interdyne/Initialize(mapload) + . = ..() + AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS)) + +/obj/item/radio/headset/interdyne/command + name = "\improper Interdyne command headset" + desc = "A commanding headset to gather your underlings. Protects the ears from flashbangs. It has a large red cross on the earpiece, and a small 'IP' written on the top strap. Protects the ears from flashbangs." + command = TRUE + +/obj/item/radio/headset/interdyne/comms + keyslot = /obj/item/encryptionkey/headset_syndicate/interdyne + +// STRUCTURES + +/obj/structure/closet/crate/freezer/sansufentanyl + name = "sansufentanyl crate" + desc = "A freezer. Contains refrigerated Sansufentanyl, for managing Hereditary Manifold Sickness. A product of Interdyne Pharmaceuticals." + +/obj/structure/closet/crate/freezer/sansufentanyl/PopulateContents() + . = ..() + for(var/grabbin_pills in 1 to 10) + new /obj/item/storage/pill_bottle/sansufentanyl(src) diff --git a/modular_skyrat/master_files/code/modules/mob_spawn/mob_spawn.dm b/modular_nova/master_files/code/modules/mob_spawn/mob_spawn.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/mob_spawn/mob_spawn.dm rename to modular_nova/master_files/code/modules/mob_spawn/mob_spawn.dm diff --git a/modular_nova/master_files/code/modules/mod/mod_clothes.dm b/modular_nova/master_files/code/modules/mod/mod_clothes.dm new file mode 100644 index 00000000000000..216c0966eca70f --- /dev/null +++ b/modular_nova/master_files/code/modules/mod/mod_clothes.dm @@ -0,0 +1,22 @@ +// MODsuit-related overrides for our digitigrade sprites and such +/obj/item/clothing/head/mod + supports_variations_flags = CLOTHING_SNOUTED_VARIATION + worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/modsuit/mod_clothing_mutant.dmi' + worn_icon_better_vox = 'modular_nova/modules/better_vox/icons/clothing/mod.dmi' + +/obj/item/clothing/suit/mod + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/modsuit/mod_clothing_mutant.dmi' + worn_icon_better_vox = 'modular_nova/modules/better_vox/icons/clothing/mod.dmi' + +/obj/item/clothing/gloves/mod + supports_variations_flags = NONE + worn_icon_better_vox = 'modular_nova/modules/better_vox/icons/clothing/mod.dmi' + +/obj/item/clothing/shoes/mod + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/modsuit/mod_clothing_mutant.dmi' + worn_icon_better_vox = 'modular_nova/modules/better_vox/icons/clothing/mod.dmi' + +/obj/item/mod/control + worn_icon_better_vox = 'modular_nova/modules/better_vox/icons/clothing/mod_modules.dmi' diff --git a/modular_skyrat/master_files/code/modules/mod/mod_types.dm b/modular_nova/master_files/code/modules/mod/mod_types.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/mod/mod_types.dm rename to modular_nova/master_files/code/modules/mod/mod_types.dm diff --git a/modular_skyrat/master_files/code/modules/mod/modules/_module.dm b/modular_nova/master_files/code/modules/mod/modules/_module.dm similarity index 94% rename from modular_skyrat/master_files/code/modules/mod/modules/_module.dm rename to modular_nova/master_files/code/modules/mod/modules/_module.dm index 829489d88f3ecd..36ad7fb64c4dd2 100644 --- a/modular_skyrat/master_files/code/modules/mod/modules/_module.dm +++ b/modular_nova/master_files/code/modules/mod/modules/_module.dm @@ -64,7 +64,7 @@ icon_to_use = worn_icon_vox if(suit_supports_variations_flags && (supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) - icon_to_use = 'modular_skyrat/master_files/icons/mob/mod.dmi' + icon_to_use = 'modular_nova/master_files/icons/mob/clothing/modsuit/mod_modules_mutant.dmi' icon_state_to_use = "[module_icon_state]_digi" var/add_overlay = TRUE @@ -78,14 +78,14 @@ . += module_icon if(has_head_sprite) - icon_to_use = 'modular_skyrat/master_files/icons/mob/mod.dmi' + icon_to_use = 'modular_nova/master_files/icons/mob/clothing/modsuit/mod_modules_mutant.dmi' icon_state_to_use = "[module_icon_state]_head" if(suit_supports_variations_flags && (supports_variations_flags & CLOTHING_SNOUTED_VARIATION)) icon_state_to_use = "[icon_state_to_use]_muzzled" if(is_new_vox) - icon_to_use = 'modular_skyrat/modules/better_vox/icons/clothing/mod_modules.dmi' + icon_to_use = 'modular_nova/modules/better_vox/icons/clothing/mod_modules.dmi' icon_state_to_use = module_icon_state var/mutable_appearance/additional_module_icon = mutable_appearance(icon_to_use, icon_state_to_use, layer = standing.layer + 0.1) diff --git a/modular_skyrat/master_files/code/modules/mod/modules/modules_antag.dm b/modular_nova/master_files/code/modules/mod/modules/modules_antag.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/mod/modules/modules_antag.dm rename to modular_nova/master_files/code/modules/mod/modules/modules_antag.dm diff --git a/modular_nova/master_files/code/modules/mod/modules/modules_supply.dm b/modular_nova/master_files/code/modules/mod/modules/modules_supply.dm new file mode 100644 index 00000000000000..99021d8d4804ae --- /dev/null +++ b/modular_nova/master_files/code/modules/mod/modules/modules_supply.dm @@ -0,0 +1,7 @@ +/obj/item/mod/module/hydraulic/on_suit_activation() + . = ..() + ADD_TRAIT(mod.wearer, TRAIT_TRASHMAN, MOD_TRAIT) + +/obj/item/mod/module/hydraulic/on_suit_deactivation(deleting = FALSE) + . = ..() + REMOVE_TRAIT(mod.wearer, TRAIT_TRASHMAN, MOD_TRAIT) diff --git a/modular_skyrat/master_files/code/modules/modular_computers/computers/item/laptop_presets.dm b/modular_nova/master_files/code/modules/modular_computers/computers/item/laptop_presets.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/modular_computers/computers/item/laptop_presets.dm rename to modular_nova/master_files/code/modules/modular_computers/computers/item/laptop_presets.dm diff --git a/modular_nova/master_files/code/modules/modular_computers/file_system/programs/maintenance/camera.dm b/modular_nova/master_files/code/modules/modular_computers/file_system/programs/maintenance/camera.dm new file mode 100644 index 00000000000000..061d421afd53db --- /dev/null +++ b/modular_nova/master_files/code/modules/modular_computers/file_system/programs/maintenance/camera.dm @@ -0,0 +1,3 @@ +// Makes camera app readily available to crew +/datum/computer_file/program/maintenance/camera + program_flags = PROGRAM_ON_NTNET_STORE diff --git a/modular_skyrat/master_files/code/modules/pai/card.dm b/modular_nova/master_files/code/modules/pai/card.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/pai/card.dm rename to modular_nova/master_files/code/modules/pai/card.dm diff --git a/modular_skyrat/master_files/code/modules/paperwork/employment_contract.dm b/modular_nova/master_files/code/modules/paperwork/employment_contract.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/paperwork/employment_contract.dm rename to modular_nova/master_files/code/modules/paperwork/employment_contract.dm diff --git a/modular_nova/master_files/code/modules/paperwork/stamps.dm b/modular_nova/master_files/code/modules/paperwork/stamps.dm new file mode 100644 index 00000000000000..b8e6861951e341 --- /dev/null +++ b/modular_nova/master_files/code/modules/paperwork/stamps.dm @@ -0,0 +1,82 @@ +/obj/item/stamp/cat + name = "\improper Official Cat Stamp" + desc = "A rubber stamp for stamping documents of questionable importance." + icon = 'modular_nova/master_files/icons/obj/bureaucracy.dmi' + icon_state = "stamp-cat_blue" + inhand_icon_state = "stamp" +// Radial menu options + var/static/cat_blue = image(icon = 'modular_nova/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_cat_blue") + var/static/paw_blue = image(icon = 'modular_nova/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_paw_blue") + var/static/cat_red = image(icon = 'modular_nova/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_cat_red") + var/static/paw_red = image(icon = 'modular_nova/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_paw_red") + var/static/cat_orange = image(icon = 'modular_nova/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_cat_orange") + var/static/paw_orange = image(icon = 'modular_nova/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_paw_orange") + var/static/cat_green = image(icon = 'modular_nova/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_cat_green") + var/static/paw_green = image(icon = 'modular_nova/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_paw_green") +// Choices for the radial menu + var/static/list/radial_options = list( + "cat_blue" = cat_blue, + "paw_blue" = paw_blue, + "cat_red" = cat_red, + "paw_red" = paw_red, + "cat_orange" = cat_orange, + "paw_orange" = paw_orange, + "cat_green" = cat_green, + "paw_green" = paw_green + ) + +/obj/item/stamp/cat/ui_interact(mob/user) + . = ..() + var/choice = show_radial_menu(user, src, radial_options) + switch(choice) + if("cat_blue") + icon_state = "stamp-cat_blue" + dye_color = DYE_HOP + name = "\improper Official Cat Stamp" + if("paw_blue") + icon_state = "stamp-paw_blue" + dye_color = DYE_HOP + name = "\improper Paw Stamp" + + if("cat_red") + icon_state = "stamp-cat_red" + dye_color = DYE_HOS + name = "\improper Official Cat Stamp" + if("paw_red") + icon_state = "stamp-paw_red" + dye_color = DYE_HOS + name = "\improper Paw Stamp" + + if("cat_orange") + icon_state = "stamp-cat_orange" + dye_color = DYE_QM + name = "\improper Official Cat Stamp" + if("paw_orange") + icon_state = "stamp-paw_orange" + dye_color = DYE_QM + name = "\improper Paw Stamp" + + if("cat_green") + icon_state = "stamp-cat_green" + dye_color = DYE_CENTCOM + name = "\improper Official Cat Stamp" + if("paw_green") + icon_state = "stamp-paw_green" + dye_color = DYE_CENTCOM + name = "\improper Paw Stamp" + + else + return + +/obj/item/stamp/nri + name = "\improper Novaya Rossiyskaya Imperia stamp" + desc = "A rubber stamp for stamping important documents. Used in various NRI documents." + icon = 'modular_nova/master_files/icons/obj/bureaucracy.dmi' + icon_state = "stamp-nri" + dye_color = DYE_CENTCOM + +/obj/item/stamp/solfed + name = "\improper Solar Federation stamp" + icon = 'modular_nova/master_files/icons/obj/bureaucracy.dmi' + icon_state = "stamp-solfed" + dye_color = DYE_CE diff --git a/modular_skyrat/master_files/code/modules/power/cable.dm b/modular_nova/master_files/code/modules/power/cable.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/power/cable.dm rename to modular_nova/master_files/code/modules/power/cable.dm diff --git a/modular_nova/master_files/code/modules/power/lighting/light_mapping_helpers.dm b/modular_nova/master_files/code/modules/power/lighting/light_mapping_helpers.dm new file mode 100644 index 00000000000000..a320e635fcb08f --- /dev/null +++ b/modular_nova/master_files/code/modules/power/lighting/light_mapping_helpers.dm @@ -0,0 +1,25 @@ +// Kneecapping light values every light at a time. +/obj/machinery/light/dim + brightness = 3 + nightshift_brightness = 2.5 + bulb_colour = LIGHT_COLOR_TUNGSTEN + bulb_power = 0.8 + +/obj/machinery/light/small + brightness = 5 + nightshift_brightness = 4.5 + bulb_colour = LIGHT_COLOR_TUNGSTEN + bulb_power = 0.9 + +/obj/machinery/light/cold + nightshift_light_color = null + +/obj/machinery/light/warm + bulb_colour = LIGHT_COLOR_TUNGSTEN + nightshift_light_color = null + +/obj/machinery/light/floor + brightness = 5.5 + bulb_colour = LIGHT_COLOR_TUNGSTEN + nightshift_light_color = null + nightshift_brightness = 4 diff --git a/modular_skyrat/master_files/code/modules/power/powernet.dm b/modular_nova/master_files/code/modules/power/powernet.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/power/powernet.dm rename to modular_nova/master_files/code/modules/power/powernet.dm diff --git a/modular_skyrat/master_files/code/modules/power/singularity/containment_field.dm b/modular_nova/master_files/code/modules/power/singularity/containment_field.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/power/singularity/containment_field.dm rename to modular_nova/master_files/code/modules/power/singularity/containment_field.dm diff --git a/modular_skyrat/master_files/code/modules/projectiles/boxes_magazines/external/shotgun.dm b/modular_nova/master_files/code/modules/projectiles/boxes_magazines/external/shotgun.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/projectiles/boxes_magazines/external/shotgun.dm rename to modular_nova/master_files/code/modules/projectiles/boxes_magazines/external/shotgun.dm diff --git a/modular_skyrat/master_files/code/modules/projectiles/boxes_magazines/external/smg.dm b/modular_nova/master_files/code/modules/projectiles/boxes_magazines/external/smg.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/projectiles/boxes_magazines/external/smg.dm rename to modular_nova/master_files/code/modules/projectiles/boxes_magazines/external/smg.dm diff --git a/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic.dm b/modular_nova/master_files/code/modules/projectiles/guns/ballistic.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/projectiles/guns/ballistic.dm rename to modular_nova/master_files/code/modules/projectiles/guns/ballistic.dm diff --git a/modular_nova/master_files/code/modules/projectiles/guns/ballistic/bows/_bow.dm b/modular_nova/master_files/code/modules/projectiles/guns/ballistic/bows/_bow.dm new file mode 100644 index 00000000000000..d65b0143749502 --- /dev/null +++ b/modular_nova/master_files/code/modules/projectiles/guns/ballistic/bows/_bow.dm @@ -0,0 +1,8 @@ +/obj/item/gun/ballistic/bow + item_flags = NEEDS_PERMIT + trigger_guard = TRIGGER_GUARD_ALLOW_ALL + +/obj/item/gun/ballistic/bow/attack_self(mob/user) + . = ..() + if(chambered) + playsound(src, 'modular_nova/modules/tribal_extended/sound/sound_weapons_bowdraw.ogg', 75, 0) diff --git a/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/bows/bow_quivers.dm b/modular_nova/master_files/code/modules/projectiles/guns/ballistic/bows/bow_quivers.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/bows/bow_quivers.dm rename to modular_nova/master_files/code/modules/projectiles/guns/ballistic/bows/bow_quivers.dm diff --git a/modular_nova/master_files/code/modules/projectiles/guns/ballistic/bows/bow_types.dm b/modular_nova/master_files/code/modules/projectiles/guns/ballistic/bows/bow_types.dm new file mode 100644 index 00000000000000..32d7b5928ff2cb --- /dev/null +++ b/modular_nova/master_files/code/modules/projectiles/guns/ballistic/bows/bow_types.dm @@ -0,0 +1,7 @@ +/obj/item/gun/ballistic/bow/longbow + worn_icon = 'modular_nova/modules/tribal_extended/icons/back.dmi' + slot_flags = ITEM_SLOT_BACK + icon_state = "bow" + inhand_icon_state = "bow" + base_icon_state = "bow" + worn_icon_state = "bow" diff --git a/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/revolver.dm b/modular_nova/master_files/code/modules/projectiles/guns/ballistic/revolver.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/revolver.dm rename to modular_nova/master_files/code/modules/projectiles/guns/ballistic/revolver.dm diff --git a/modular_nova/master_files/code/modules/projectiles/guns/ballistic/suppressor.dm b/modular_nova/master_files/code/modules/projectiles/guns/ballistic/suppressor.dm new file mode 100644 index 00000000000000..98f15d05b1cf6a --- /dev/null +++ b/modular_nova/master_files/code/modules/projectiles/guns/ballistic/suppressor.dm @@ -0,0 +1,2 @@ +/obj/item/suppressor/standard + desc = "A small-arms suppressor for maximum espionage." diff --git a/modular_skyrat/master_files/code/modules/projectiles/guns/energy.dm b/modular_nova/master_files/code/modules/projectiles/guns/energy.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/projectiles/guns/energy.dm rename to modular_nova/master_files/code/modules/projectiles/guns/energy.dm diff --git a/modular_skyrat/master_files/code/modules/reagents/bottle.dm b/modular_nova/master_files/code/modules/reagents/bottle.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/reagents/bottle.dm rename to modular_nova/master_files/code/modules/reagents/bottle.dm diff --git a/modular_skyrat/master_files/code/modules/reagents/chemistry/colors.dm b/modular_nova/master_files/code/modules/reagents/chemistry/colors.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/reagents/chemistry/colors.dm rename to modular_nova/master_files/code/modules/reagents/chemistry/colors.dm diff --git a/modular_nova/master_files/code/modules/reagents/chemistry/holder.dm b/modular_nova/master_files/code/modules/reagents/chemistry/holder.dm new file mode 100644 index 00000000000000..7f671b5778ff78 --- /dev/null +++ b/modular_nova/master_files/code/modules/reagents/chemistry/holder.dm @@ -0,0 +1,17 @@ +/** + * Check if this holder contains a reagent with a `chemical_flags_nova` containing this flag. + * + * Arguments: + * * chemical_flag - The bitflag to search for. + * * min_volume - Checks for having a specific amount of reagents matching that `chemical_flag` + */ +/datum/reagents/proc/has_chemical_flag_skyrat(chemical_flag, min_volume = 0) + var/found_amount = 0 + var/list/cached_reagents = reagent_list + for(var/datum/reagent/holder_reagent as anything in cached_reagents) + if (holder_reagent.chemical_flags_nova & chemical_flag) + found_amount += holder_reagent.volume + if(found_amount >= min_volume) + return TRUE + + return FALSE diff --git a/modular_nova/master_files/code/modules/reagents/chemistry/reagents.dm b/modular_nova/master_files/code/modules/reagents/chemistry/reagents.dm new file mode 100644 index 00000000000000..f3c7bb1fb3afc9 --- /dev/null +++ b/modular_nova/master_files/code/modules/reagents/chemistry/reagents.dm @@ -0,0 +1,7 @@ +/datum/reagent + /// Modular version of `chemical_flags`, so we don't have to worry about + /// it causing conflicts in the future. + var/chemical_flags_nova = NONE + +/datum/reagent/drug/nicotine + addiction_types = list(/datum/addiction/nicotine = 4) // 1.6 per 2 seconds diff --git a/modular_nova/master_files/code/modules/reagents/chemistry/recipes.dm b/modular_nova/master_files/code/modules/reagents/chemistry/recipes.dm new file mode 100644 index 00000000000000..e710b9d0eac540 --- /dev/null +++ b/modular_nova/master_files/code/modules/reagents/chemistry/recipes.dm @@ -0,0 +1,6 @@ +// Pollution vars +/datum/chemical_reaction + /// If defined, it'll emit that pollutant on reaction + var/pollutant_type + /// How much amount per volume of the pollutant shall we emit if `pollutant_type` is defined + var/pollutant_amount = 1 diff --git a/modular_skyrat/master_files/code/modules/reagents/medicine_reagents/medicine_reagents.dm b/modular_nova/master_files/code/modules/reagents/medicine_reagents/medicine_reagents.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/reagents/medicine_reagents/medicine_reagents.dm rename to modular_nova/master_files/code/modules/reagents/medicine_reagents/medicine_reagents.dm diff --git a/modular_skyrat/master_files/code/modules/reagents/reagent_containers.dm b/modular_nova/master_files/code/modules/reagents/reagent_containers.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/reagents/reagent_containers.dm rename to modular_nova/master_files/code/modules/reagents/reagent_containers.dm diff --git a/modular_nova/master_files/code/modules/reagents/reagent_dispenser.dm b/modular_nova/master_files/code/modules/reagents/reagent_dispenser.dm new file mode 100644 index 00000000000000..47e5825a150c66 --- /dev/null +++ b/modular_nova/master_files/code/modules/reagents/reagent_dispenser.dm @@ -0,0 +1,17 @@ +/** + * Directional Reagent Dispeners (Modular) + */ + + // Potable Water Cooler + +/obj/structure/reagent_dispensers/water_cooler/directional/north + pixel_y = 16 + +/obj/structure/reagent_dispensers/water_cooler/directional/east + pixel_x = 16 + +/obj/structure/reagent_dispensers/water_cooler/directional/south + pixel_y = -16 + +/obj/structure/reagent_dispensers/water_cooler/directional/west + pixel_x = -16 diff --git a/modular_skyrat/master_files/code/modules/reagents/withdrawal/generic_addictions.dm b/modular_nova/master_files/code/modules/reagents/withdrawal/generic_addictions.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/reagents/withdrawal/generic_addictions.dm rename to modular_nova/master_files/code/modules/reagents/withdrawal/generic_addictions.dm diff --git a/modular_skyrat/master_files/code/modules/religion/religious_sects.dm b/modular_nova/master_files/code/modules/religion/religious_sects.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/religion/religious_sects.dm rename to modular_nova/master_files/code/modules/religion/religious_sects.dm diff --git a/modular_skyrat/master_files/code/modules/research/designs/biogenerator_designs.dm b/modular_nova/master_files/code/modules/research/designs/biogenerator_designs.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/research/designs/biogenerator_designs.dm rename to modular_nova/master_files/code/modules/research/designs/biogenerator_designs.dm diff --git a/modular_nova/master_files/code/modules/research/designs/limbgrower_designs.dm b/modular_nova/master_files/code/modules/research/designs/limbgrower_designs.dm new file mode 100644 index 00000000000000..9a3dd0e95a3bc1 --- /dev/null +++ b/modular_nova/master_files/code/modules/research/designs/limbgrower_designs.dm @@ -0,0 +1,42 @@ +/datum/design/leftarm/New() + category += list(SPECIES_SNAIL) + return ..() + +/datum/design/rightarm/New() + category += list(SPECIES_SNAIL) + return ..() + +/datum/design/leftleg/New() + category += list(SPECIES_SNAIL) + return ..() + +/datum/design/rightleg/New() + category += list(SPECIES_SNAIL) + return ..() + +/datum/design/tongue/snail + name = "Snail Tongue" + id = "snailtongue" + build_path = /obj/item/organ/internal/tongue/snail + category = list( + SPECIES_SNAIL, + RND_CATEGORY_INITIAL, + ) + +/datum/design/liver/snail + name = "Snail Liver" + id = "snailliver" + build_path = /obj/item/organ/internal/liver/snail + category = list( + SPECIES_SNAIL, + RND_CATEGORY_INITIAL, + ) + +/datum/design/heart/snail + name = "Snail Heart" + id = "snailheart" + build_path = /obj/item/organ/internal/heart/snail + category = list( + SPECIES_SNAIL, + RND_CATEGORY_INITIAL, + ) diff --git a/modular_nova/master_files/code/modules/research/designs/mechfabricator_designs.dm b/modular_nova/master_files/code/modules/research/designs/mechfabricator_designs.dm new file mode 100644 index 00000000000000..148526d93b8205 --- /dev/null +++ b/modular_nova/master_files/code/modules/research/designs/mechfabricator_designs.dm @@ -0,0 +1,3 @@ +/datum/design/modlink_scryer + // use the loaded modlink scryer object to have the frequency set to NT upon creation + build_path = /obj/item/clothing/neck/link_scryer/loaded diff --git a/modular_nova/master_files/code/modules/research/designs/medical_designs.dm b/modular_nova/master_files/code/modules/research/designs/medical_designs.dm new file mode 100644 index 00000000000000..7798c4cd43ab11 --- /dev/null +++ b/modular_nova/master_files/code/modules/research/designs/medical_designs.dm @@ -0,0 +1,16 @@ +/datum/design/cybernetic_tongue + name = "Cybernetic Tongue" + desc = "A cybernetic tongue." + id = "cybernetic_tongue" + build_type = PROTOLATHE | AWAY_LATHE | MECHFAB + construction_time = 4 SECONDS + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 2, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 2, + ) + build_path = /obj/item/organ/internal/tongue/cybernetic + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL diff --git a/modular_nova/master_files/code/modules/research/designs/misc_designs.dm b/modular_nova/master_files/code/modules/research/designs/misc_designs.dm new file mode 100644 index 00000000000000..c8315b4190b1d9 --- /dev/null +++ b/modular_nova/master_files/code/modules/research/designs/misc_designs.dm @@ -0,0 +1,91 @@ +/datum/design/monkey_helmet + name = "Monkey Mind Magnification Helmet" + desc = "A fragile, circuitry embedded helmet for boosting the intelligence of a monkey to a higher level." + id = "monkey_helmet" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/clothing/head/helmet/monkey_sentience + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_EQUIPMENT_SCIENCE, + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/plumbing_eng + name = "Engineering Plumbing Constructor" + desc = "A type of plumbing constructor designed to manipulate fluid." + id = "plumbing_eng" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 40, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/construction/plumbing/engineering + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING, + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design/smartdartgun + name = "Medical SmartDart Gun" + desc = "An adjusted version of the medical syringe gun that only allows SmartDarts to be chambered." + id = "smartdartgun" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/silver = SHEET_MATERIAL_AMOUNT * 2, + ) + build_path = /obj/item/gun/syringe/smartdart + category = list( + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_EQUIPMENT_MEDICAL, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/anesthetic_machine + name = "Anesthetic Machine Parts Kit" + desc = "All-in-one kit containing the parts to create a portable anesthetic stand, tank not included." + id = "anesthetic_machine" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/plastic = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/silver = SHEET_MATERIAL_AMOUNT * 2, + ) + build_path = /obj/item/anesthetic_machine_kit + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_EQUIPMENT_MEDICAL, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/time_clock_frame + name = "Time Clock Frame" + desc = "A frame for a time clock console, contains all of the parts needed to build a new time clock" + id = "time_clock_frame" + build_type = PROTOLATHE + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/wallframe/time_clock + category = list( + RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MOUNTS, + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SERVICE + +/datum/design/vox_gas_filter + name = "Vox Gas Filter" + id = "vox_gas_filter" + build_type = PROTOLATHE | AUTOLATHE | COLONY_FABRICATOR + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT, + ) + build_path = /obj/item/gas_filter/vox + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_GAS_TANKS_EQUIPMENT, + ) + departmental_flags = ALL diff --git a/modular_skyrat/master_files/code/modules/research/designs/tool_designs.dm b/modular_nova/master_files/code/modules/research/designs/tool_designs.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/research/designs/tool_designs.dm rename to modular_nova/master_files/code/modules/research/designs/tool_designs.dm diff --git a/modular_skyrat/master_files/code/modules/research/machinery/departmental_circuit_imprinter.dm b/modular_nova/master_files/code/modules/research/machinery/departmental_circuit_imprinter.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/research/machinery/departmental_circuit_imprinter.dm rename to modular_nova/master_files/code/modules/research/machinery/departmental_circuit_imprinter.dm diff --git a/modular_nova/master_files/code/modules/research/techweb/all_nodes.dm b/modular_nova/master_files/code/modules/research/techweb/all_nodes.dm new file mode 100644 index 00000000000000..5ee944941e9dad --- /dev/null +++ b/modular_nova/master_files/code/modules/research/techweb/all_nodes.dm @@ -0,0 +1,258 @@ + +// NEW NODES + +/datum/techweb_node/adv_vision + id = "adv_vision" + display_name = "Combat Cybernetic Eyes" + description = "Military grade combat implants to improve vision." + prereq_ids = list("combat_cyber_implants", "alien_bio") + design_ids = list( + "ci-thermals", + "ci-xray", + "ci-thermals-moth", + "ci-xray-moth", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000) + +/datum/techweb_node/borg_shapeshifter + id = "borg_shapeshifter" + display_name = "Illegal Cyborg Addition" + description = "Some sort of experimental tool that was once used by an rival company." + prereq_ids = list("syndicate_basic") + design_ids = list("borg_shapeshifter_module") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) + + +// MODULAR ADDITIONS AND REMOVALS + +//Base Nodes +/datum/techweb_node/base/New() + design_ids += list( + "polarizer", + "vox_gas_filter", + "gbp_machine", + ) + return ..() + +/datum/techweb_node/cyborg/New() + design_ids += list( + "affection_module", + ) + return ..() + +/datum/techweb_node/basic_tools/New() + design_ids += list( + "bowl", + "drinking_glass", + "shot_glass", + ) + return ..() + +/datum/techweb_node/basic_medical/New() + design_ids += list( + "hospital_gown", + "synth_eyes", + "synth_tongue", + "synth_liver", + "synth_lungs", + "synth_stomach", + "synth_ears", + "synth_heart", + ) + return ..() + +/////////////////////////Biotech///////////////////////// + +/datum/techweb_node/adv_biotech/New() + design_ids += list( + "monkey_helmet", + "brute2medicell", + "burn2medicell", + "toxin2medicell", + "oxy2medicell", + "relocatemedicell", + "tempmedicell", + "bodymedicell", + "clotmedicell", + ) + return ..() + +/datum/techweb_node/biotech/New() + design_ids += list( + "anesthetic_machine", + "smartdartgun", + ) + return ..() + +/////////////////////////EMP tech///////////////////////// + +/datum/techweb_node/emp_basic/New() + design_ids += list( + "gownmedicell", + "bedmedicell", + ) + return ..() + +////////////////////////Computer tech//////////////////////// + +/datum/techweb_node/comptech/New() + design_ids += list( + "time_clock_frame", + ) + return ..() + +/datum/techweb_node/integrated_hud/New() + design_ids += list( + "health_hud_prescription", + "security_hud_prescription", + "diagnostic_hud_prescription", + "science_hud_prescription", + "health_hud_aviator", + "security_hud_aviator", + "diagnostic_hud_aviator", + "meson_hud_aviator", + "science_hud_aviator", + "health_hud_projector", + "security_hud_projector", + "diagnostic_hud_projector", + "meson_hud_projector", + "science_hud_projector", + "permit_glasses", + "nifsoft_money_sense", + "nifsoft_hud_kit", + "nifsoft_hud_science", + "nifsoft_hud_meson", + "nifsoft_hud_medical", + "nifsoft_hud_security", + "nifsoft_hud_diagnostic", + "nifsoft_hud_cargo", + ) + return ..() + +////////////////////////Medical//////////////////////// + +/datum/techweb_node/genetics/New() + design_ids += list( + "self_actualization_device", + ) + return ..() + +/datum/techweb_node/cyber_organs/New() + design_ids += list( + "cybernetic_tongue", + ) + return ..() + +// Modularly removes x-ray and thermals from here, it's in adv_vision instead +/datum/techweb_node/combat_cyber_implants/New() + . = ..() + design_ids -= list( + "ci-thermals", + "ci-xray", + "ci-thermals-moth", + "ci-xray-moth", + ) + +////////////////////////Tools//////////////////////// + +/datum/techweb_node/botany/New() + design_ids += list( + "salvemedicell", + ) + return ..() + +/datum/techweb_node/sec_basic/New() + . = ..() + design_ids += list( + "nifsoft_remover", + ) + return ..() + +/////////////////////////weaponry tech///////////////////////// + +/datum/techweb_node/weaponry/New() + design_ids += list( + "ammoworkbench_disk_lethal", + ) + return ..() + +/datum/techweb_node/adv_weaponry/New() + design_ids += list( + "ammo_workbench", + ) + return ..() + +/datum/techweb_node/electric_weapons/New() + design_ids += list( + "medigun_speed", + ) + return ..() + +////////////////////////Alien technology//////////////////////// + +/datum/techweb_node/alien_bio/New() + design_ids += list( + "brute3medicell", + "burn3medicell", + "oxy3medicell", + "toxin3medicell", + ) + return ..() + +/////////////////////////engineering tech///////////////////////// + +/datum/techweb_node/adv_engi/New() + design_ids += list( + "engine_goggles_prescription", + "mesons_prescription", + "multi_cell_charger", + "tray_goggles_prescription", + "plumbing_eng", + ) + return ..() + +/////////////////////////robotics tech///////////////////////// + +/datum/techweb_node/robotics/New() + design_ids += list( + "borg_upgrade_snacks", + "mini_soulcatcher", + ) + return ..() + +/datum/techweb_node/neural_programming/New() + design_ids += list( + "soulcatcher_device", + "rsd_interface", + ) + return ..() + +/datum/techweb_node/cyborg_upg_util/New() + design_ids += list( + "borg_upgrade_clamp", + "borg_upgrade_brush", + ) + return ..() + +/datum/techweb_node/cyborg_upg_engiminer/New() + design_ids += list( + "advanced_materials", + "inducer_module", + ) + return ..() + +/datum/techweb_node/cyborg_upg_med/New() + design_ids += list( + "borg_upgrade_surgicaltools", + ) + + design_ids -= list( + "borg_upgrade_pinpointer", + ) + return ..() + +/datum/techweb_node/basic_mining/New() + design_ids += list( + "borg_upgrade_welding", + ) + return ..() diff --git a/modular_nova/master_files/code/modules/shuttle/shuttle.dm b/modular_nova/master_files/code/modules/shuttle/shuttle.dm new file mode 100644 index 00000000000000..896dcf37bd11be --- /dev/null +++ b/modular_nova/master_files/code/modules/shuttle/shuttle.dm @@ -0,0 +1,39 @@ +/obj/docking_port/mobile + /// Does this shuttle play sounds upon landing and takeoff? + var/shuttle_sounds = TRUE + /// The take off sound to be played + var/takeoff_sound = sound('modular_nova/modules/advanced_shuttles/sound/engine_startup.ogg') + /// The landing sound to be played + var/landing_sound = sound('modular_nova/modules/advanced_shuttles/sound/engine_landing.ogg') + /// The sound range coeff for the landing and take off sound effect + var/sound_range = 20 + +/obj/docking_port/mobile/proc/bolt_all_doors() // Expensive procs :( + var/list/turfs = return_ordered_turfs(x, y, z, dir) + for(var/i in 1 to turfs.len) + var/turf/checked_turf = turfs[i] + for(var/obj/machinery/door/airlock/airlock_door in checked_turf) + if(airlock_door.external) + airlock_door.close(force_crush = TRUE) + airlock_door.bolt() + +/obj/docking_port/mobile/proc/unbolt_all_doors() + var/list/turfs = return_ordered_turfs(x, y, z, dir) + for(var/i in 1 to turfs.len) + var/turf/checked_turf = turfs[i] + for(var/obj/machinery/door/airlock/airlock_door in checked_turf) + if(airlock_door.external) + airlock_door.unbolt() + +/obj/docking_port/mobile/proc/play_engine_sound(atom/distant_source, takeoff) + if(distant_source) + for(var/mob/hearing_mob in range(sound_range, distant_source)) + if(hearing_mob?.client) + var/dist = get_dist(hearing_mob.loc, distant_source.loc) + var/vol = clamp(50 - ((dist - 7) * 5), 10, 50) // Every tile decreases sound volume by 5 + if(takeoff) + if(hearing_mob.client?.prefs?.read_preference(/datum/preference/toggle/sound_ship_ambience)) + hearing_mob.playsound_local(distant_source, takeoff_sound, vol) + else + if(hearing_mob.client?.prefs?.read_preference(/datum/preference/toggle/sound_ship_ambience)) + hearing_mob.playsound_local(distant_source, landing_sound, vol) diff --git a/modular_skyrat/master_files/code/modules/shuttle/shuttle_events/meteors.dm b/modular_nova/master_files/code/modules/shuttle/shuttle_events/meteors.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/shuttle/shuttle_events/meteors.dm rename to modular_nova/master_files/code/modules/shuttle/shuttle_events/meteors.dm diff --git a/modular_skyrat/master_files/code/modules/surgery/bodyparts/_bodyparts.dm b/modular_nova/master_files/code/modules/surgery/bodyparts/_bodyparts.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/surgery/bodyparts/_bodyparts.dm rename to modular_nova/master_files/code/modules/surgery/bodyparts/_bodyparts.dm diff --git a/modular_nova/master_files/code/modules/surgery/organs/external/wings/functional_wings.dm b/modular_nova/master_files/code/modules/surgery/organs/external/wings/functional_wings.dm new file mode 100644 index 00000000000000..49d2bf5c752c44 --- /dev/null +++ b/modular_nova/master_files/code/modules/surgery/organs/external/wings/functional_wings.dm @@ -0,0 +1,3 @@ +// No free fall softening for everyone - but functional wings get it +/obj/item/organ/external/wings/functional/can_soften_fall() + return TRUE diff --git a/modular_nova/master_files/code/modules/surgery/organs/external/wings/wings.dm b/modular_nova/master_files/code/modules/surgery/organs/external/wings/wings.dm new file mode 100644 index 00000000000000..b975cac1d6bd61 --- /dev/null +++ b/modular_nova/master_files/code/modules/surgery/organs/external/wings/wings.dm @@ -0,0 +1,3 @@ +// No free fall softening for everyone +/obj/item/organ/external/wings/functional/can_soften_fall() + return FALSE diff --git a/modular_nova/master_files/code/modules/surgery/organs/internal/appendix/_appendix.dm b/modular_nova/master_files/code/modules/surgery/organs/internal/appendix/_appendix.dm new file mode 100644 index 00000000000000..b3ab005d6bc68c --- /dev/null +++ b/modular_nova/master_files/code/modules/surgery/organs/internal/appendix/_appendix.dm @@ -0,0 +1,8 @@ +/obj/item/organ/internal/appendix/become_inflamed() + if(engaged_role_play_check(owner, station = TRUE, dorms = TRUE)) + return + + if(!(owner.mind && owner.mind.assigned_role && owner.mind.assigned_role.job_flags & JOB_CREW_MEMBER)) + return + + return ..() diff --git a/modular_skyrat/master_files/code/modules/surgery/organs/tongue.dm b/modular_nova/master_files/code/modules/surgery/organs/tongue.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/surgery/organs/tongue.dm rename to modular_nova/master_files/code/modules/surgery/organs/tongue.dm diff --git a/modular_skyrat/master_files/code/modules/surgery/surgery.dm b/modular_nova/master_files/code/modules/surgery/surgery.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/surgery/surgery.dm rename to modular_nova/master_files/code/modules/surgery/surgery.dm diff --git a/modular_skyrat/master_files/code/modules/vehicles/sealed.dm b/modular_nova/master_files/code/modules/vehicles/sealed.dm similarity index 100% rename from modular_skyrat/master_files/code/modules/vehicles/sealed.dm rename to modular_nova/master_files/code/modules/vehicles/sealed.dm diff --git a/modular_skyrat/master_files/code/modules/vehicles/snowmobile.dm b/modular_nova/master_files/code/modules/vehicles/snowmobile.dm similarity index 87% rename from modular_skyrat/master_files/code/modules/vehicles/snowmobile.dm rename to modular_nova/master_files/code/modules/vehicles/snowmobile.dm index 81ad9c4a1404b0..83cca299bade0c 100644 --- a/modular_skyrat/master_files/code/modules/vehicles/snowmobile.dm +++ b/modular_nova/master_files/code/modules/vehicles/snowmobile.dm @@ -2,7 +2,7 @@ name = "snowmobile" desc = "A tracked vehicle designed for use in the snow, it looks like it would have difficulty moving elsewhere, however." icon_state = "snowmobile" - icon = 'modular_skyrat/master_files/icons/obj/vehicles/vehicles.dmi' + icon = 'modular_nova/master_files/icons/obj/vehicles/vehicles.dmi' var/static/list/snow_typecache = typecacheof(list(/turf/open/misc/asteroid/snow/icemoon, /turf/open/floor/plating/snowed/smoothed/icemoon)) /obj/vehicle/ridden/atv/snowmobile/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) @@ -19,7 +19,7 @@ name = "security snowmobile" desc = "For when you want to look like even more of a tool than riding a secway." icon_state = "snowcurity" - icon = 'modular_skyrat/master_files/icons/obj/vehicles/vehicles.dmi' + icon = 'modular_nova/master_files/icons/obj/vehicles/vehicles.dmi' key_type = /obj/item/key/security /datum/component/riding/vehicle/atv/snowmobile/snowcurity @@ -38,7 +38,7 @@ /obj/vehicle/ridden/atv/snowmobile/syndicate name = "snowmobile" - desc = "A tracked vehicle designed for use in the snow, emblazened with Syndicate colors." + desc = "A tracked vehicle designed for use in the snow, emblazened with Symphionia colors." icon_state = "syndimobile" - icon = 'modular_skyrat/master_files/icons/obj/vehicles/vehicles.dmi' + icon = 'modular_nova/master_files/icons/obj/vehicles/vehicles.dmi' diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/belt.dmi b/modular_nova/master_files/icons/donator/mob/clothing/belt.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/mob/clothing/belt.dmi rename to modular_nova/master_files/icons/donator/mob/clothing/belt.dmi diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/custom_w.dmi b/modular_nova/master_files/icons/donator/mob/clothing/custom_w.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/mob/clothing/custom_w.dmi rename to modular_nova/master_files/icons/donator/mob/clothing/custom_w.dmi diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/eyes.dmi b/modular_nova/master_files/icons/donator/mob/clothing/eyes.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/mob/clothing/eyes.dmi rename to modular_nova/master_files/icons/donator/mob/clothing/eyes.dmi diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/feet.dmi b/modular_nova/master_files/icons/donator/mob/clothing/feet.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/mob/clothing/feet.dmi rename to modular_nova/master_files/icons/donator/mob/clothing/feet.dmi diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/hands.dmi b/modular_nova/master_files/icons/donator/mob/clothing/hands.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/mob/clothing/hands.dmi rename to modular_nova/master_files/icons/donator/mob/clothing/hands.dmi diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi b/modular_nova/master_files/icons/donator/mob/clothing/head.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi rename to modular_nova/master_files/icons/donator/mob/clothing/head.dmi diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/head_teshari.dmi b/modular_nova/master_files/icons/donator/mob/clothing/head_teshari.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/mob/clothing/head_teshari.dmi rename to modular_nova/master_files/icons/donator/mob/clothing/head_teshari.dmi diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/large-worn-icons/32x64/head.dmi b/modular_nova/master_files/icons/donator/mob/clothing/large-worn-icons/32x64/head.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/mob/clothing/large-worn-icons/32x64/head.dmi rename to modular_nova/master_files/icons/donator/mob/clothing/large-worn-icons/32x64/head.dmi diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi b/modular_nova/master_files/icons/donator/mob/clothing/mask.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi rename to modular_nova/master_files/icons/donator/mob/clothing/mask.dmi diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/mask_vox.dmi b/modular_nova/master_files/icons/donator/mob/clothing/mask_vox.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/mob/clothing/mask_vox.dmi rename to modular_nova/master_files/icons/donator/mob/clothing/mask_vox.dmi diff --git a/modular_nova/master_files/icons/donator/mob/clothing/neck.dmi b/modular_nova/master_files/icons/donator/mob/clothing/neck.dmi new file mode 100644 index 00000000000000..3654bf37c0bc22 Binary files /dev/null and b/modular_nova/master_files/icons/donator/mob/clothing/neck.dmi differ diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi b/modular_nova/master_files/icons/donator/mob/clothing/suit.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi rename to modular_nova/master_files/icons/donator/mob/clothing/suit.dmi diff --git a/modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi b/modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi new file mode 100644 index 00000000000000..f83de963a1f145 Binary files /dev/null and b/modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi differ diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/uniform_digi.dmi b/modular_nova/master_files/icons/donator/mob/clothing/uniform_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/mob/clothing/uniform_digi.dmi rename to modular_nova/master_files/icons/donator/mob/clothing/uniform_digi.dmi diff --git a/modular_skyrat/master_files/icons/donator/mob/inhands/donator_left.dmi b/modular_nova/master_files/icons/donator/mob/inhands/donator_left.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/mob/inhands/donator_left.dmi rename to modular_nova/master_files/icons/donator/mob/inhands/donator_left.dmi diff --git a/modular_skyrat/master_files/icons/donator/mob/inhands/donator_right.dmi b/modular_nova/master_files/icons/donator/mob/inhands/donator_right.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/mob/inhands/donator_right.dmi rename to modular_nova/master_files/icons/donator/mob/inhands/donator_right.dmi diff --git a/modular_skyrat/master_files/icons/donator/obj/clothing/belts.dmi b/modular_nova/master_files/icons/donator/obj/clothing/belts.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/obj/clothing/belts.dmi rename to modular_nova/master_files/icons/donator/obj/clothing/belts.dmi diff --git a/modular_nova/master_files/icons/donator/obj/clothing/cloaks.dmi b/modular_nova/master_files/icons/donator/obj/clothing/cloaks.dmi new file mode 100644 index 00000000000000..99a43df72476fb Binary files /dev/null and b/modular_nova/master_files/icons/donator/obj/clothing/cloaks.dmi differ diff --git a/modular_skyrat/master_files/icons/donator/obj/clothing/glasses.dmi b/modular_nova/master_files/icons/donator/obj/clothing/glasses.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/obj/clothing/glasses.dmi rename to modular_nova/master_files/icons/donator/obj/clothing/glasses.dmi diff --git a/modular_skyrat/master_files/icons/donator/obj/clothing/gloves.dmi b/modular_nova/master_files/icons/donator/obj/clothing/gloves.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/obj/clothing/gloves.dmi rename to modular_nova/master_files/icons/donator/obj/clothing/gloves.dmi diff --git a/modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi b/modular_nova/master_files/icons/donator/obj/clothing/hats.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi rename to modular_nova/master_files/icons/donator/obj/clothing/hats.dmi diff --git a/modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi b/modular_nova/master_files/icons/donator/obj/clothing/masks.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi rename to modular_nova/master_files/icons/donator/obj/clothing/masks.dmi diff --git a/modular_skyrat/master_files/icons/donator/obj/clothing/necklaces.dmi b/modular_nova/master_files/icons/donator/obj/clothing/necklaces.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/obj/clothing/necklaces.dmi rename to modular_nova/master_files/icons/donator/obj/clothing/necklaces.dmi diff --git a/modular_skyrat/master_files/icons/donator/obj/clothing/shoes.dmi b/modular_nova/master_files/icons/donator/obj/clothing/shoes.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/obj/clothing/shoes.dmi rename to modular_nova/master_files/icons/donator/obj/clothing/shoes.dmi diff --git a/modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi b/modular_nova/master_files/icons/donator/obj/clothing/suits.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi rename to modular_nova/master_files/icons/donator/obj/clothing/suits.dmi diff --git a/modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi b/modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi new file mode 100644 index 00000000000000..8375633d3543d0 Binary files /dev/null and b/modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi differ diff --git a/modular_skyrat/master_files/icons/donator/obj/custom.dmi b/modular_nova/master_files/icons/donator/obj/custom.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/obj/custom.dmi rename to modular_nova/master_files/icons/donator/obj/custom.dmi diff --git a/modular_skyrat/master_files/icons/donator/obj/kits.dmi b/modular_nova/master_files/icons/donator/obj/kits.dmi similarity index 100% rename from modular_skyrat/master_files/icons/donator/obj/kits.dmi rename to modular_nova/master_files/icons/donator/obj/kits.dmi diff --git a/modular_skyrat/master_files/icons/effects/overlay_effects.dmi b/modular_nova/master_files/icons/effects/overlay_effects.dmi similarity index 100% rename from modular_skyrat/master_files/icons/effects/overlay_effects.dmi rename to modular_nova/master_files/icons/effects/overlay_effects.dmi diff --git a/modular_skyrat/master_files/icons/effects/tele_effects.dmi b/modular_nova/master_files/icons/effects/tele_effects.dmi similarity index 100% rename from modular_skyrat/master_files/icons/effects/tele_effects.dmi rename to modular_nova/master_files/icons/effects/tele_effects.dmi diff --git a/modular_skyrat/master_files/icons/effects/turf_effects.dmi b/modular_nova/master_files/icons/effects/turf_effects.dmi similarity index 100% rename from modular_skyrat/master_files/icons/effects/turf_effects.dmi rename to modular_nova/master_files/icons/effects/turf_effects.dmi diff --git a/modular_skyrat/master_files/icons/effects/turf_effects_64.dmi b/modular_nova/master_files/icons/effects/turf_effects_64.dmi similarity index 100% rename from modular_skyrat/master_files/icons/effects/turf_effects_64.dmi rename to modular_nova/master_files/icons/effects/turf_effects_64.dmi diff --git a/modular_skyrat/master_files/icons/effects/turf_effects_icons.dmi b/modular_nova/master_files/icons/effects/turf_effects_icons.dmi similarity index 100% rename from modular_skyrat/master_files/icons/effects/turf_effects_icons.dmi rename to modular_nova/master_files/icons/effects/turf_effects_icons.dmi diff --git a/modular_skyrat/master_files/icons/emoji.dmi b/modular_nova/master_files/icons/emoji.dmi similarity index 100% rename from modular_skyrat/master_files/icons/emoji.dmi rename to modular_nova/master_files/icons/emoji.dmi diff --git a/modular_skyrat/master_files/icons/hud/actions.dmi b/modular_nova/master_files/icons/hud/actions.dmi similarity index 100% rename from modular_skyrat/master_files/icons/hud/actions.dmi rename to modular_nova/master_files/icons/hud/actions.dmi diff --git a/modular_skyrat/master_files/icons/hud/lobby/bottom_buttons.dmi b/modular_nova/master_files/icons/hud/lobby/bottom_buttons.dmi similarity index 100% rename from modular_skyrat/master_files/icons/hud/lobby/bottom_buttons.dmi rename to modular_nova/master_files/icons/hud/lobby/bottom_buttons.dmi diff --git a/modular_skyrat/master_files/icons/import.dmi b/modular_nova/master_files/icons/import.dmi similarity index 100% rename from modular_skyrat/master_files/icons/import.dmi rename to modular_nova/master_files/icons/import.dmi diff --git a/modular_skyrat/master_files/icons/misc/buildmode.dmi b/modular_nova/master_files/icons/misc/buildmode.dmi similarity index 100% rename from modular_skyrat/master_files/icons/misc/buildmode.dmi rename to modular_nova/master_files/icons/misc/buildmode.dmi diff --git a/modular_nova/master_files/icons/misc/language.dmi b/modular_nova/master_files/icons/misc/language.dmi new file mode 100644 index 00000000000000..1e287eca020226 Binary files /dev/null and b/modular_nova/master_files/icons/misc/language.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/64x32_blood.dmi b/modular_nova/master_files/icons/mob/64x32_blood.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/64x32_blood.dmi rename to modular_nova/master_files/icons/mob/64x32_blood.dmi diff --git a/modular_skyrat/master_files/icons/mob/64x32_item_damage.dmi b/modular_nova/master_files/icons/mob/64x32_item_damage.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/64x32_item_damage.dmi rename to modular_nova/master_files/icons/mob/64x32_item_damage.dmi diff --git a/modular_skyrat/master_files/icons/mob/64x64_lefthand.dmi b/modular_nova/master_files/icons/mob/64x64_lefthand.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/64x64_lefthand.dmi rename to modular_nova/master_files/icons/mob/64x64_lefthand.dmi diff --git a/modular_skyrat/master_files/icons/mob/64x64_righthand.dmi b/modular_nova/master_files/icons/mob/64x64_righthand.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/64x64_righthand.dmi rename to modular_nova/master_files/icons/mob/64x64_righthand.dmi diff --git a/modular_skyrat/master_files/icons/mob/a.dmi b/modular_nova/master_files/icons/mob/a.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/a.dmi rename to modular_nova/master_files/icons/mob/a.dmi diff --git a/modular_skyrat/master_files/icons/mob/actions/action_backgrounds.dmi b/modular_nova/master_files/icons/mob/actions/action_backgrounds.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/actions/action_backgrounds.dmi rename to modular_nova/master_files/icons/mob/actions/action_backgrounds.dmi diff --git a/modular_skyrat/master_files/icons/mob/actions/actions_items.dmi b/modular_nova/master_files/icons/mob/actions/actions_items.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/actions/actions_items.dmi rename to modular_nova/master_files/icons/mob/actions/actions_items.dmi diff --git a/modular_skyrat/master_files/icons/mob/actions/actions_nif.dmi b/modular_nova/master_files/icons/mob/actions/actions_nif.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/actions/actions_nif.dmi rename to modular_nova/master_files/icons/mob/actions/actions_nif.dmi diff --git a/modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi b/modular_nova/master_files/icons/mob/actions/actions_slime.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi rename to modular_nova/master_files/icons/mob/actions/actions_slime.dmi diff --git a/modular_skyrat/master_files/icons/mob/agateraminhandsleft.dmi b/modular_nova/master_files/icons/mob/agateraminhandsleft.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/agateraminhandsleft.dmi rename to modular_nova/master_files/icons/mob/agateraminhandsleft.dmi diff --git a/modular_skyrat/master_files/icons/mob/agateraminhandsright.dmi b/modular_nova/master_files/icons/mob/agateraminhandsright.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/agateraminhandsright.dmi rename to modular_nova/master_files/icons/mob/agateraminhandsright.dmi diff --git a/modular_skyrat/master_files/icons/mob/augmentation/bs2ipc.dmi b/modular_nova/master_files/icons/mob/augmentation/bs2ipc.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/augmentation/bs2ipc.dmi rename to modular_nova/master_files/icons/mob/augmentation/bs2ipc.dmi diff --git a/modular_skyrat/master_files/icons/mob/augmentation/bshipc.dmi b/modular_nova/master_files/icons/mob/augmentation/bshipc.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/augmentation/bshipc.dmi rename to modular_nova/master_files/icons/mob/augmentation/bshipc.dmi diff --git a/modular_skyrat/master_files/icons/mob/augmentation/hi2ipc.dmi b/modular_nova/master_files/icons/mob/augmentation/hi2ipc.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/augmentation/hi2ipc.dmi rename to modular_nova/master_files/icons/mob/augmentation/hi2ipc.dmi diff --git a/modular_skyrat/master_files/icons/mob/augmentation/hsiipc.dmi b/modular_nova/master_files/icons/mob/augmentation/hsiipc.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/augmentation/hsiipc.dmi rename to modular_nova/master_files/icons/mob/augmentation/hsiipc.dmi diff --git a/modular_skyrat/master_files/icons/mob/augmentation/mcgipc.dmi b/modular_nova/master_files/icons/mob/augmentation/mcgipc.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/augmentation/mcgipc.dmi rename to modular_nova/master_files/icons/mob/augmentation/mcgipc.dmi diff --git a/modular_skyrat/master_files/icons/mob/augmentation/sgmipc.dmi b/modular_nova/master_files/icons/mob/augmentation/sgmipc.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/augmentation/sgmipc.dmi rename to modular_nova/master_files/icons/mob/augmentation/sgmipc.dmi diff --git a/modular_skyrat/master_files/icons/mob/augmentation/wtmipc.dmi b/modular_nova/master_files/icons/mob/augmentation/wtmipc.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/augmentation/wtmipc.dmi rename to modular_nova/master_files/icons/mob/augmentation/wtmipc.dmi diff --git a/modular_skyrat/master_files/icons/mob/augmentation/xm2ipc.dmi b/modular_nova/master_files/icons/mob/augmentation/xm2ipc.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/augmentation/xm2ipc.dmi rename to modular_nova/master_files/icons/mob/augmentation/xm2ipc.dmi diff --git a/modular_skyrat/master_files/icons/mob/augmentation/xmgipc.dmi b/modular_nova/master_files/icons/mob/augmentation/xmgipc.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/augmentation/xmgipc.dmi rename to modular_nova/master_files/icons/mob/augmentation/xmgipc.dmi diff --git a/modular_skyrat/master_files/icons/mob/augmentation/zhpipc.dmi b/modular_nova/master_files/icons/mob/augmentation/zhpipc.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/augmentation/zhpipc.dmi rename to modular_nova/master_files/icons/mob/augmentation/zhpipc.dmi diff --git a/modular_skyrat/master_files/icons/mob/body_markings/akula_markings.dmi b/modular_nova/master_files/icons/mob/body_markings/akula_markings.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/body_markings/akula_markings.dmi rename to modular_nova/master_files/icons/mob/body_markings/akula_markings.dmi diff --git a/modular_skyrat/master_files/icons/mob/body_markings/heterochromia.dmi b/modular_nova/master_files/icons/mob/body_markings/heterochromia.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/body_markings/heterochromia.dmi rename to modular_nova/master_files/icons/mob/body_markings/heterochromia.dmi diff --git a/modular_skyrat/master_files/icons/mob/body_markings/moth_grayscale_markings.dmi b/modular_nova/master_files/icons/mob/body_markings/moth_grayscale_markings.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/body_markings/moth_grayscale_markings.dmi rename to modular_nova/master_files/icons/mob/body_markings/moth_grayscale_markings.dmi diff --git a/modular_skyrat/master_files/icons/mob/body_markings/moth_markings.dmi b/modular_nova/master_files/icons/mob/body_markings/moth_markings.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/body_markings/moth_markings.dmi rename to modular_nova/master_files/icons/mob/body_markings/moth_markings.dmi diff --git a/modular_skyrat/master_files/icons/mob/body_markings/other_markings.dmi b/modular_nova/master_files/icons/mob/body_markings/other_markings.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/body_markings/other_markings.dmi rename to modular_nova/master_files/icons/mob/body_markings/other_markings.dmi diff --git a/modular_skyrat/master_files/icons/mob/body_markings/secondary_markings.dmi b/modular_nova/master_files/icons/mob/body_markings/secondary_markings.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/body_markings/secondary_markings.dmi rename to modular_nova/master_files/icons/mob/body_markings/secondary_markings.dmi diff --git a/modular_skyrat/master_files/icons/mob/body_markings/synthliz_secondary.dmi b/modular_nova/master_files/icons/mob/body_markings/synthliz_secondary.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/body_markings/synthliz_secondary.dmi rename to modular_nova/master_files/icons/mob/body_markings/synthliz_secondary.dmi diff --git a/modular_skyrat/master_files/icons/mob/body_markings/synthliz_tertiary.dmi b/modular_nova/master_files/icons/mob/body_markings/synthliz_tertiary.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/body_markings/synthliz_tertiary.dmi rename to modular_nova/master_files/icons/mob/body_markings/synthliz_tertiary.dmi diff --git a/modular_skyrat/master_files/icons/mob/body_markings/tattoo_markings.dmi b/modular_nova/master_files/icons/mob/body_markings/tattoo_markings.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/body_markings/tattoo_markings.dmi rename to modular_nova/master_files/icons/mob/body_markings/tattoo_markings.dmi diff --git a/modular_skyrat/master_files/icons/mob/body_markings/tertiary_markings.dmi b/modular_nova/master_files/icons/mob/body_markings/tertiary_markings.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/body_markings/tertiary_markings.dmi rename to modular_nova/master_files/icons/mob/body_markings/tertiary_markings.dmi diff --git a/modular_skyrat/master_files/icons/mob/body_markings/vox_secondary.dmi b/modular_nova/master_files/icons/mob/body_markings/vox_secondary.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/body_markings/vox_secondary.dmi rename to modular_nova/master_files/icons/mob/body_markings/vox_secondary.dmi diff --git a/modular_skyrat/master_files/icons/mob/body_markings/vox_tertiary.dmi b/modular_nova/master_files/icons/mob/body_markings/vox_tertiary.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/body_markings/vox_tertiary.dmi rename to modular_nova/master_files/icons/mob/body_markings/vox_tertiary.dmi diff --git a/modular_nova/master_files/icons/mob/clothing/accessories.dmi b/modular_nova/master_files/icons/mob/clothing/accessories.dmi new file mode 100644 index 00000000000000..b289380a42834b Binary files /dev/null and b/modular_nova/master_files/icons/mob/clothing/accessories.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/back.dmi b/modular_nova/master_files/icons/mob/clothing/back.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/back.dmi rename to modular_nova/master_files/icons/mob/clothing/back.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/belt.dmi b/modular_nova/master_files/icons/mob/clothing/belt.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/belt.dmi rename to modular_nova/master_files/icons/mob/clothing/belt.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/belt_mirror.dmi b/modular_nova/master_files/icons/mob/clothing/belt_mirror.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/belt_mirror.dmi rename to modular_nova/master_files/icons/mob/clothing/belt_mirror.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/ears.dmi b/modular_nova/master_files/icons/mob/clothing/ears.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/ears.dmi rename to modular_nova/master_files/icons/mob/clothing/ears.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/eyes.dmi b/modular_nova/master_files/icons/mob/clothing/eyes.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/eyes.dmi rename to modular_nova/master_files/icons/mob/clothing/eyes.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/eyes_vox.dmi b/modular_nova/master_files/icons/mob/clothing/eyes_vox.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/eyes_vox.dmi rename to modular_nova/master_files/icons/mob/clothing/eyes_vox.dmi diff --git a/modular_nova/master_files/icons/mob/clothing/feet.dmi b/modular_nova/master_files/icons/mob/clothing/feet.dmi new file mode 100644 index 00000000000000..563d63d374e4a0 Binary files /dev/null and b/modular_nova/master_files/icons/mob/clothing/feet.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/feet_digi.dmi b/modular_nova/master_files/icons/mob/clothing/feet_digi.dmi new file mode 100644 index 00000000000000..2c5f223792da6b Binary files /dev/null and b/modular_nova/master_files/icons/mob/clothing/feet_digi.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/hands.dmi b/modular_nova/master_files/icons/mob/clothing/hands.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/hands.dmi rename to modular_nova/master_files/icons/mob/clothing/hands.dmi diff --git a/modular_nova/master_files/icons/mob/clothing/head.dmi b/modular_nova/master_files/icons/mob/clothing/head.dmi new file mode 100644 index 00000000000000..2848ab08cd4177 Binary files /dev/null and b/modular_nova/master_files/icons/mob/clothing/head.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/akula.dmi b/modular_nova/master_files/icons/mob/clothing/head/akula.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/head/akula.dmi rename to modular_nova/master_files/icons/mob/clothing/head/akula.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/akula_official.dmi b/modular_nova/master_files/icons/mob/clothing/head/akula_official.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/head/akula_official.dmi rename to modular_nova/master_files/icons/mob/clothing/head/akula_official.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/bio_muzzled.dmi b/modular_nova/master_files/icons/mob/clothing/head/bio_muzzled.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/head/bio_muzzled.dmi rename to modular_nova/master_files/icons/mob/clothing/head/bio_muzzled.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/chaplain.dmi b/modular_nova/master_files/icons/mob/clothing/head/chaplain.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/head/chaplain.dmi rename to modular_nova/master_files/icons/mob/clothing/head/chaplain.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/chaplain_muzzled.dmi b/modular_nova/master_files/icons/mob/clothing/head/chaplain_muzzled.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/head/chaplain_muzzled.dmi rename to modular_nova/master_files/icons/mob/clothing/head/chaplain_muzzled.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/costume.dmi b/modular_nova/master_files/icons/mob/clothing/head/costume.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/head/costume.dmi rename to modular_nova/master_files/icons/mob/clothing/head/costume.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/cowboy.dmi b/modular_nova/master_files/icons/mob/clothing/head/cowboy.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/head/cowboy.dmi rename to modular_nova/master_files/icons/mob/clothing/head/cowboy.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/helmet.dmi b/modular_nova/master_files/icons/mob/clothing/head/helmet.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/head/helmet.dmi rename to modular_nova/master_files/icons/mob/clothing/head/helmet.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/helmet_muzzled.dmi b/modular_nova/master_files/icons/mob/clothing/head/helmet_muzzled.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/head/helmet_muzzled.dmi rename to modular_nova/master_files/icons/mob/clothing/head/helmet_muzzled.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/pelt_big.dmi b/modular_nova/master_files/icons/mob/clothing/head/pelt_big.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/head/pelt_big.dmi rename to modular_nova/master_files/icons/mob/clothing/head/pelt_big.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/plasmaman_head.dmi b/modular_nova/master_files/icons/mob/clothing/head/plasmaman_head.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/head/plasmaman_head.dmi rename to modular_nova/master_files/icons/mob/clothing/head/plasmaman_head.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/spacehelm_muzzled.dmi b/modular_nova/master_files/icons/mob/clothing/head/spacehelm_muzzled.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/head/spacehelm_muzzled.dmi rename to modular_nova/master_files/icons/mob/clothing/head/spacehelm_muzzled.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/winterhood.dmi b/modular_nova/master_files/icons/mob/clothing/head/winterhood.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/head/winterhood.dmi rename to modular_nova/master_files/icons/mob/clothing/head/winterhood.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/head_muzzled.dmi b/modular_nova/master_files/icons/mob/clothing/head_muzzled.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/head_muzzled.dmi rename to modular_nova/master_files/icons/mob/clothing/head_muzzled.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/head_vox.dmi b/modular_nova/master_files/icons/mob/clothing/head_vox.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/head_vox.dmi rename to modular_nova/master_files/icons/mob/clothing/head_vox.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/mask.dmi b/modular_nova/master_files/icons/mob/clothing/mask.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/mask.dmi rename to modular_nova/master_files/icons/mob/clothing/mask.dmi diff --git a/modular_nova/master_files/icons/mob/clothing/mask_muzzled.dmi b/modular_nova/master_files/icons/mob/clothing/mask_muzzled.dmi new file mode 100644 index 00000000000000..0bf6ff9c3e94ff Binary files /dev/null and b/modular_nova/master_files/icons/mob/clothing/mask_muzzled.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/modsuit/mod_clothing_mutant.dmi b/modular_nova/master_files/icons/mob/clothing/modsuit/mod_clothing_mutant.dmi new file mode 100644 index 00000000000000..368d63d14bcf1f Binary files /dev/null and b/modular_nova/master_files/icons/mob/clothing/modsuit/mod_clothing_mutant.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/modsuit/mod_modules_mutant.dmi b/modular_nova/master_files/icons/mob/clothing/modsuit/mod_modules_mutant.dmi new file mode 100644 index 00000000000000..ca3d1cf4029810 Binary files /dev/null and b/modular_nova/master_files/icons/mob/clothing/modsuit/mod_modules_mutant.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/neck.dmi b/modular_nova/master_files/icons/mob/clothing/neck.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/neck.dmi rename to modular_nova/master_files/icons/mob/clothing/neck.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/monkey/uniform.dmi b/modular_nova/master_files/icons/mob/clothing/species/monkey/uniform.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/monkey/uniform.dmi rename to modular_nova/master_files/icons/mob/clothing/species/monkey/uniform.dmi diff --git a/modular_nova/master_files/icons/mob/clothing/species/teshari/accessories.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/accessories.dmi new file mode 100644 index 00000000000000..878009dcffa740 Binary files /dev/null and b/modular_nova/master_files/icons/mob/clothing/species/teshari/accessories.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/back.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/back.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/back.dmi rename to modular_nova/master_files/icons/mob/clothing/species/teshari/back.dmi diff --git a/modular_nova/master_files/icons/mob/clothing/species/teshari/belt.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/belt.dmi new file mode 100644 index 00000000000000..c3ee69dd2a334b Binary files /dev/null and b/modular_nova/master_files/icons/mob/clothing/species/teshari/belt.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/ears.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/ears.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/ears.dmi rename to modular_nova/master_files/icons/mob/clothing/species/teshari/ears.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/eyes.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/eyes.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/eyes.dmi rename to modular_nova/master_files/icons/mob/clothing/species/teshari/eyes.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/feet.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/feet.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/feet.dmi rename to modular_nova/master_files/icons/mob/clothing/species/teshari/feet.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/feet_64.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/feet_64.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/feet_64.dmi rename to modular_nova/master_files/icons/mob/clothing/species/teshari/feet_64.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/hands.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/hands.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/hands.dmi rename to modular_nova/master_files/icons/mob/clothing/species/teshari/hands.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/head.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/head.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/head.dmi rename to modular_nova/master_files/icons/mob/clothing/species/teshari/head.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/mask.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/mask.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/mask.dmi rename to modular_nova/master_files/icons/mob/clothing/species/teshari/mask.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/neck.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/neck.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/neck.dmi rename to modular_nova/master_files/icons/mob/clothing/species/teshari/neck.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/suit.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/suit.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/suit.dmi rename to modular_nova/master_files/icons/mob/clothing/species/teshari/suit.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/uniform.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/uniform.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/uniform.dmi rename to modular_nova/master_files/icons/mob/clothing/species/teshari/uniform.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/back.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/back.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/back.dmi rename to modular_nova/master_files/icons/mob/clothing/species/vox/back.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/belt.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/belt.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/belt.dmi rename to modular_nova/master_files/icons/mob/clothing/species/vox/belt.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/color_gags_vox.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/color_gags_vox.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/color_gags_vox.dmi rename to modular_nova/master_files/icons/mob/clothing/species/vox/color_gags_vox.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/ears.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/ears.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/ears.dmi rename to modular_nova/master_files/icons/mob/clothing/species/vox/ears.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/eyes.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/eyes.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/eyes.dmi rename to modular_nova/master_files/icons/mob/clothing/species/vox/eyes.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/feet.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/feet.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/feet.dmi rename to modular_nova/master_files/icons/mob/clothing/species/vox/feet.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/feet_64.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/feet_64.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/feet_64.dmi rename to modular_nova/master_files/icons/mob/clothing/species/vox/feet_64.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/hands.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/hands.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/hands.dmi rename to modular_nova/master_files/icons/mob/clothing/species/vox/hands.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/head.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/head.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/head.dmi rename to modular_nova/master_files/icons/mob/clothing/species/vox/head.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/helmet.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/helmet.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/helmet.dmi rename to modular_nova/master_files/icons/mob/clothing/species/vox/helmet.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi rename to modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/suit.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/suit.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/suit.dmi rename to modular_nova/master_files/icons/mob/clothing/species/vox/suit.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/uniform.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/uniform.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/uniform.dmi rename to modular_nova/master_files/icons/mob/clothing/species/vox/uniform.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/suit.dmi b/modular_nova/master_files/icons/mob/clothing/suit.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/suit.dmi rename to modular_nova/master_files/icons/mob/clothing/suit.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/suit_digi.dmi b/modular_nova/master_files/icons/mob/clothing/suit_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/suit_digi.dmi rename to modular_nova/master_files/icons/mob/clothing/suit_digi.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/suit_taur_hoof.dmi b/modular_nova/master_files/icons/mob/clothing/suit_taur_hoof.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/suit_taur_hoof.dmi rename to modular_nova/master_files/icons/mob/clothing/suit_taur_hoof.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/suit_taur_paw.dmi b/modular_nova/master_files/icons/mob/clothing/suit_taur_paw.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/suit_taur_paw.dmi rename to modular_nova/master_files/icons/mob/clothing/suit_taur_paw.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/suit_taur_snake.dmi b/modular_nova/master_files/icons/mob/clothing/suit_taur_snake.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/suit_taur_snake.dmi rename to modular_nova/master_files/icons/mob/clothing/suit_taur_snake.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/akula.dmi b/modular_nova/master_files/icons/mob/clothing/suits/akula.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/suits/akula.dmi rename to modular_nova/master_files/icons/mob/clothing/suits/akula.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi b/modular_nova/master_files/icons/mob/clothing/suits/armor.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi rename to modular_nova/master_files/icons/mob/clothing/suits/armor.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/armor_digi.dmi b/modular_nova/master_files/icons/mob/clothing/suits/armor_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/suits/armor_digi.dmi rename to modular_nova/master_files/icons/mob/clothing/suits/armor_digi.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/bio_digi.dmi b/modular_nova/master_files/icons/mob/clothing/suits/bio_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/suits/bio_digi.dmi rename to modular_nova/master_files/icons/mob/clothing/suits/bio_digi.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/chaplain.dmi b/modular_nova/master_files/icons/mob/clothing/suits/chaplain.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/suits/chaplain.dmi rename to modular_nova/master_files/icons/mob/clothing/suits/chaplain.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/chaplain_digi.dmi b/modular_nova/master_files/icons/mob/clothing/suits/chaplain_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/suits/chaplain_digi.dmi rename to modular_nova/master_files/icons/mob/clothing/suits/chaplain_digi.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/labcoat.dmi b/modular_nova/master_files/icons/mob/clothing/suits/labcoat.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/suits/labcoat.dmi rename to modular_nova/master_files/icons/mob/clothing/suits/labcoat.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/labcoat_digi.dmi b/modular_nova/master_files/icons/mob/clothing/suits/labcoat_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/suits/labcoat_digi.dmi rename to modular_nova/master_files/icons/mob/clothing/suits/labcoat_digi.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/spacesuit.dmi b/modular_nova/master_files/icons/mob/clothing/suits/spacesuit.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/suits/spacesuit.dmi rename to modular_nova/master_files/icons/mob/clothing/suits/spacesuit.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi b/modular_nova/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi rename to modular_nova/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/wintercoat.dmi b/modular_nova/master_files/icons/mob/clothing/suits/wintercoat.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/suits/wintercoat.dmi rename to modular_nova/master_files/icons/mob/clothing/suits/wintercoat.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/wizard_digi.dmi b/modular_nova/master_files/icons/mob/clothing/suits/wizard_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/suits/wizard_digi.dmi rename to modular_nova/master_files/icons/mob/clothing/suits/wizard_digi.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/taur_masking_helpers.dmi b/modular_nova/master_files/icons/mob/clothing/taur_masking_helpers.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/taur_masking_helpers.dmi rename to modular_nova/master_files/icons/mob/clothing/taur_masking_helpers.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/towel.dmi b/modular_nova/master_files/icons/mob/clothing/towel.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/towel.dmi rename to modular_nova/master_files/icons/mob/clothing/towel.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/towel_digi.dmi b/modular_nova/master_files/icons/mob/clothing/towel_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/towel_digi.dmi rename to modular_nova/master_files/icons/mob/clothing/towel_digi.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/akula.dmi b/modular_nova/master_files/icons/mob/clothing/under/akula.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/akula.dmi rename to modular_nova/master_files/icons/mob/clothing/under/akula.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/cargo.dmi b/modular_nova/master_files/icons/mob/clothing/under/cargo.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/cargo.dmi rename to modular_nova/master_files/icons/mob/clothing/under/cargo.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/cargo_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/cargo_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/cargo_digi.dmi rename to modular_nova/master_files/icons/mob/clothing/under/cargo_digi.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/centcom.dmi b/modular_nova/master_files/icons/mob/clothing/under/centcom.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/centcom.dmi rename to modular_nova/master_files/icons/mob/clothing/under/centcom.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/centcom_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/centcom_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/centcom_digi.dmi rename to modular_nova/master_files/icons/mob/clothing/under/centcom_digi.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/civilian.dmi b/modular_nova/master_files/icons/mob/clothing/under/civilian.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/civilian.dmi rename to modular_nova/master_files/icons/mob/clothing/under/civilian.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/civilian_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/civilian_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/civilian_digi.dmi rename to modular_nova/master_files/icons/mob/clothing/under/civilian_digi.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/color_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/color_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/color_digi.dmi rename to modular_nova/master_files/icons/mob/clothing/under/color_digi.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/command.dmi b/modular_nova/master_files/icons/mob/clothing/under/command.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/command.dmi rename to modular_nova/master_files/icons/mob/clothing/under/command.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/command_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/command_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/command_digi.dmi rename to modular_nova/master_files/icons/mob/clothing/under/command_digi.dmi diff --git a/modular_nova/master_files/icons/mob/clothing/under/costume.dmi b/modular_nova/master_files/icons/mob/clothing/under/costume.dmi new file mode 100644 index 00000000000000..8439d78c6e1332 Binary files /dev/null and b/modular_nova/master_files/icons/mob/clothing/under/costume.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi new file mode 100644 index 00000000000000..bd1262a82c8f1d Binary files /dev/null and b/modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/engineering.dmi b/modular_nova/master_files/icons/mob/clothing/under/engineering.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/engineering.dmi rename to modular_nova/master_files/icons/mob/clothing/under/engineering.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/engineering_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/engineering_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/engineering_digi.dmi rename to modular_nova/master_files/icons/mob/clothing/under/engineering_digi.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/medical.dmi b/modular_nova/master_files/icons/mob/clothing/under/medical.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/medical.dmi rename to modular_nova/master_files/icons/mob/clothing/under/medical.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/medical_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/medical_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/medical_digi.dmi rename to modular_nova/master_files/icons/mob/clothing/under/medical_digi.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/misc.dmi b/modular_nova/master_files/icons/mob/clothing/under/misc.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/misc.dmi rename to modular_nova/master_files/icons/mob/clothing/under/misc.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/misc_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/misc_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/misc_digi.dmi rename to modular_nova/master_files/icons/mob/clothing/under/misc_digi.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/plasmaman.dmi b/modular_nova/master_files/icons/mob/clothing/under/plasmaman.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/plasmaman.dmi rename to modular_nova/master_files/icons/mob/clothing/under/plasmaman.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/rnd.dmi b/modular_nova/master_files/icons/mob/clothing/under/rnd.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/rnd.dmi rename to modular_nova/master_files/icons/mob/clothing/under/rnd.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/rnd_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/rnd_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/rnd_digi.dmi rename to modular_nova/master_files/icons/mob/clothing/under/rnd_digi.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/security.dmi b/modular_nova/master_files/icons/mob/clothing/under/security.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/security.dmi rename to modular_nova/master_files/icons/mob/clothing/under/security.dmi diff --git a/modular_nova/master_files/icons/mob/clothing/under/security_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/security_digi.dmi new file mode 100644 index 00000000000000..b7816d0ac6f4ff Binary files /dev/null and b/modular_nova/master_files/icons/mob/clothing/under/security_digi.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi b/modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi rename to modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts_digi.dmi rename to modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts_digi.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi b/modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi rename to modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/skirts_dresses_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses_digi.dmi rename to modular_nova/master_files/icons/mob/clothing/under/skirts_dresses_digi.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/suits.dmi b/modular_nova/master_files/icons/mob/clothing/under/suits.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/suits.dmi rename to modular_nova/master_files/icons/mob/clothing/under/suits.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/suits_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/suits_digi.dmi rename to modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/syndicate.dmi b/modular_nova/master_files/icons/mob/clothing/under/syndicate.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/syndicate.dmi rename to modular_nova/master_files/icons/mob/clothing/under/syndicate.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/syndicate_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/syndicate_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/syndicate_digi.dmi rename to modular_nova/master_files/icons/mob/clothing/under/syndicate_digi.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/trek_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/trek_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/under/trek_digi.dmi rename to modular_nova/master_files/icons/mob/clothing/under/trek_digi.dmi diff --git a/modular_nova/master_files/icons/mob/clothing/underwear.dmi b/modular_nova/master_files/icons/mob/clothing/underwear.dmi new file mode 100644 index 00000000000000..af247b61c8b79c Binary files /dev/null and b/modular_nova/master_files/icons/mob/clothing/underwear.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/uniform.dmi b/modular_nova/master_files/icons/mob/clothing/uniform.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/uniform.dmi rename to modular_nova/master_files/icons/mob/clothing/uniform.dmi diff --git a/modular_nova/master_files/icons/mob/clothing/uniform_digi.dmi b/modular_nova/master_files/icons/mob/clothing/uniform_digi.dmi new file mode 100644 index 00000000000000..b81819dce64302 Binary files /dev/null and b/modular_nova/master_files/icons/mob/clothing/uniform_digi.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/uniform_taur_hoof.dmi b/modular_nova/master_files/icons/mob/clothing/uniform_taur_hoof.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/uniform_taur_hoof.dmi rename to modular_nova/master_files/icons/mob/clothing/uniform_taur_hoof.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/uniform_taur_paw.dmi b/modular_nova/master_files/icons/mob/clothing/uniform_taur_paw.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/uniform_taur_paw.dmi rename to modular_nova/master_files/icons/mob/clothing/uniform_taur_paw.dmi diff --git a/modular_skyrat/master_files/icons/mob/clothing/uniform_taur_snake.dmi b/modular_nova/master_files/icons/mob/clothing/uniform_taur_snake.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/clothing/uniform_taur_snake.dmi rename to modular_nova/master_files/icons/mob/clothing/uniform_taur_snake.dmi diff --git a/modular_skyrat/master_files/icons/mob/dog/corgi_head.dmi b/modular_nova/master_files/icons/mob/dog/corgi_head.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/dog/corgi_head.dmi rename to modular_nova/master_files/icons/mob/dog/corgi_head.dmi diff --git a/modular_skyrat/master_files/icons/mob/energyaxe_lefthand.dmi b/modular_nova/master_files/icons/mob/energyaxe_lefthand.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/energyaxe_lefthand.dmi rename to modular_nova/master_files/icons/mob/energyaxe_lefthand.dmi diff --git a/modular_skyrat/master_files/icons/mob/energyaxe_righthand.dmi b/modular_nova/master_files/icons/mob/energyaxe_righthand.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/energyaxe_righthand.dmi rename to modular_nova/master_files/icons/mob/energyaxe_righthand.dmi diff --git a/modular_nova/master_files/icons/mob/huds/hud.dmi b/modular_nova/master_files/icons/mob/huds/hud.dmi new file mode 100644 index 00000000000000..5c85b351224efc Binary files /dev/null and b/modular_nova/master_files/icons/mob/huds/hud.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/human_face.dmi b/modular_nova/master_files/icons/mob/human_face.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/human_face.dmi rename to modular_nova/master_files/icons/mob/human_face.dmi diff --git a/modular_skyrat/master_files/icons/mob/inhands/balls_left.dmi b/modular_nova/master_files/icons/mob/inhands/balls_left.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/inhands/balls_left.dmi rename to modular_nova/master_files/icons/mob/inhands/balls_left.dmi diff --git a/modular_skyrat/master_files/icons/mob/inhands/balls_right.dmi b/modular_nova/master_files/icons/mob/inhands/balls_right.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/inhands/balls_right.dmi rename to modular_nova/master_files/icons/mob/inhands/balls_right.dmi diff --git a/modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi b/modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi rename to modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi diff --git a/modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi b/modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi rename to modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi diff --git a/modular_nova/master_files/icons/mob/inhands/clothing/towel_lefthand.dmi b/modular_nova/master_files/icons/mob/inhands/clothing/towel_lefthand.dmi new file mode 100644 index 00000000000000..99fc6a24100c56 Binary files /dev/null and b/modular_nova/master_files/icons/mob/inhands/clothing/towel_lefthand.dmi differ diff --git a/modular_nova/master_files/icons/mob/inhands/clothing/towel_righthand.dmi b/modular_nova/master_files/icons/mob/inhands/clothing/towel_righthand.dmi new file mode 100644 index 00000000000000..fbcde13d6f8165 Binary files /dev/null and b/modular_nova/master_files/icons/mob/inhands/clothing/towel_righthand.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/inhands/equipment/tanks_lefthand.dmi b/modular_nova/master_files/icons/mob/inhands/equipment/tanks_lefthand.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/inhands/equipment/tanks_lefthand.dmi rename to modular_nova/master_files/icons/mob/inhands/equipment/tanks_lefthand.dmi diff --git a/modular_skyrat/master_files/icons/mob/inhands/equipment/tanks_righthand.dmi b/modular_nova/master_files/icons/mob/inhands/equipment/tanks_righthand.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/inhands/equipment/tanks_righthand.dmi rename to modular_nova/master_files/icons/mob/inhands/equipment/tanks_righthand.dmi diff --git a/modular_skyrat/master_files/icons/mob/inhands/irnbruhand.dmi b/modular_nova/master_files/icons/mob/inhands/irnbruhand.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/inhands/irnbruhand.dmi rename to modular_nova/master_files/icons/mob/inhands/irnbruhand.dmi diff --git a/modular_skyrat/master_files/icons/mob/inhands/melee_lefthand.dmi b/modular_nova/master_files/icons/mob/inhands/melee_lefthand.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/inhands/melee_lefthand.dmi rename to modular_nova/master_files/icons/mob/inhands/melee_lefthand.dmi diff --git a/modular_skyrat/master_files/icons/mob/inhands/melee_righthand.dmi b/modular_nova/master_files/icons/mob/inhands/melee_righthand.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/inhands/melee_righthand.dmi rename to modular_nova/master_files/icons/mob/inhands/melee_righthand.dmi diff --git a/modular_skyrat/master_files/icons/mob/inhands/pets_held_lh.dmi b/modular_nova/master_files/icons/mob/inhands/pets_held_lh.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/inhands/pets_held_lh.dmi rename to modular_nova/master_files/icons/mob/inhands/pets_held_lh.dmi diff --git a/modular_skyrat/master_files/icons/mob/inhands/pets_held_rh.dmi b/modular_nova/master_files/icons/mob/inhands/pets_held_rh.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/inhands/pets_held_rh.dmi rename to modular_nova/master_files/icons/mob/inhands/pets_held_rh.dmi diff --git a/modular_skyrat/master_files/icons/mob/landmarks.dmi b/modular_nova/master_files/icons/mob/landmarks.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/landmarks.dmi rename to modular_nova/master_files/icons/mob/landmarks.dmi diff --git a/modular_skyrat/master_files/icons/mob/large-worn-icons/64x64/feet_digi.dmi b/modular_nova/master_files/icons/mob/large-worn-icons/64x64/feet_digi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/large-worn-icons/64x64/feet_digi.dmi rename to modular_nova/master_files/icons/mob/large-worn-icons/64x64/feet_digi.dmi diff --git a/modular_skyrat/master_files/icons/mob/markedone.dmi b/modular_nova/master_files/icons/mob/markedone.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/markedone.dmi rename to modular_nova/master_files/icons/mob/markedone.dmi diff --git a/modular_skyrat/master_files/icons/mob/mouthball.dmi b/modular_nova/master_files/icons/mob/mouthball.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/mouthball.dmi rename to modular_nova/master_files/icons/mob/mouthball.dmi diff --git a/modular_skyrat/master_files/icons/mob/newmobs.dmi b/modular_nova/master_files/icons/mob/newmobs.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/newmobs.dmi rename to modular_nova/master_files/icons/mob/newmobs.dmi diff --git a/modular_skyrat/master_files/icons/mob/newmobs32x64.dmi b/modular_nova/master_files/icons/mob/newmobs32x64.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/newmobs32x64.dmi rename to modular_nova/master_files/icons/mob/newmobs32x64.dmi diff --git a/modular_skyrat/master_files/icons/mob/newmobs64x32.dmi b/modular_nova/master_files/icons/mob/newmobs64x32.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/newmobs64x32.dmi rename to modular_nova/master_files/icons/mob/newmobs64x32.dmi diff --git a/modular_skyrat/master_files/icons/mob/newmobs64x64.dmi b/modular_nova/master_files/icons/mob/newmobs64x64.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/newmobs64x64.dmi rename to modular_nova/master_files/icons/mob/newmobs64x64.dmi diff --git a/modular_skyrat/master_files/icons/mob/pets.dmi b/modular_nova/master_files/icons/mob/pets.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/pets.dmi rename to modular_nova/master_files/icons/mob/pets.dmi diff --git a/modular_skyrat/master_files/icons/mob/popup_flicks.dmi b/modular_nova/master_files/icons/mob/popup_flicks.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/popup_flicks.dmi rename to modular_nova/master_files/icons/mob/popup_flicks.dmi diff --git a/modular_skyrat/master_files/icons/mob/robots.dmi b/modular_nova/master_files/icons/mob/robots.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/robots.dmi rename to modular_nova/master_files/icons/mob/robots.dmi diff --git a/modular_skyrat/master_files/icons/mob/species/podperson_hair.dmi b/modular_nova/master_files/icons/mob/species/podperson_hair.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/species/podperson_hair.dmi rename to modular_nova/master_files/icons/mob/species/podperson_hair.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/ears.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/ears.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/ears.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/ears.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/ears_big.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/ears_big.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/ears_big.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/ears_big.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/facialhair.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/facialhair.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/facialhair.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/facialhair.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/frills.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/frills.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/frills.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/frills.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/breasts_onmob.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/genitals/breasts_onmob.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/breasts_onmob.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/genitals/breasts_onmob.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/penis_onmob.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/genitals/penis_onmob.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/penis_onmob.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/genitals/penis_onmob.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/taur_penis_onmob.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/genitals/taur_penis_onmob.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/taur_penis_onmob.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/genitals/taur_penis_onmob.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/taur_testicles_onmob.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/genitals/taur_testicles_onmob.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/taur_testicles_onmob.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/genitals/taur_testicles_onmob.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/testicles_onmob.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/genitals/testicles_onmob.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/testicles_onmob.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/genitals/testicles_onmob.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/vagina_onmob.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/genitals/vagina_onmob.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/vagina_onmob.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/genitals/vagina_onmob.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/hair.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/hair.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/hair.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/hair.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/head_accessory.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/head_accessory.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/head_accessory.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/head_accessory.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/horns.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/horns.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/horns.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/horns.dmi diff --git a/modular_nova/master_files/icons/mob/sprite_accessory/horns_big.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/horns_big.dmi new file mode 100644 index 00000000000000..392675c467cd31 Binary files /dev/null and b/modular_nova/master_files/icons/mob/sprite_accessory/horns_big.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/ipc_antennas.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/ipc_antennas.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/ipc_antennas.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/ipc_antennas.dmi diff --git a/modular_nova/master_files/icons/mob/sprite_accessory/ipc_screens.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/ipc_screens.dmi new file mode 100644 index 00000000000000..db52a56c2c848e Binary files /dev/null and b/modular_nova/master_files/icons/mob/sprite_accessory/ipc_screens.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/lizard_snouts.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/lizard_snouts.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/lizard_snouts.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/lizard_snouts.dmi diff --git a/modular_nova/master_files/icons/mob/sprite_accessory/lizard_spines.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/lizard_spines.dmi new file mode 100644 index 00000000000000..eaadb820ebc1fa Binary files /dev/null and b/modular_nova/master_files/icons/mob/sprite_accessory/lizard_spines.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/more_hair.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/more_hair.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/more_hair.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/more_hair.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/moth_fluff.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/moth_fluff.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/moth_fluff.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/moth_fluff.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/moth_wings.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/moth_wings.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/moth_wings.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/moth_wings.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/neck_accessory.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/neck_accessory.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/neck_accessory.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/neck_accessory.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/skrell_hair.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/skrell_hair.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/skrell_hair.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/skrell_hair.dmi diff --git a/modular_nova/master_files/icons/mob/sprite_accessory/snouts.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/snouts.dmi new file mode 100644 index 00000000000000..fa2fc8b89aac73 Binary files /dev/null and b/modular_nova/master_files/icons/mob/sprite_accessory/snouts.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/synthliz_antennas.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/synthliz_antennas.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/synthliz_antennas.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/synthliz_antennas.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/synthliz_snouts.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/synthliz_snouts.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/synthliz_snouts.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/synthliz_snouts.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/synthliz_tails.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/synthliz_tails.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/synthliz_tails.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/synthliz_tails.dmi diff --git a/modular_nova/master_files/icons/mob/sprite_accessory/tails.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/tails.dmi new file mode 100644 index 00000000000000..52b4aee7da81f3 Binary files /dev/null and b/modular_nova/master_files/icons/mob/sprite_accessory/tails.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/tails_big.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/tails_big.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/tails_big.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/tails_big.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/tails_modsuit.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/tails_modsuit.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/tails_modsuit.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/tails_modsuit.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/taur.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/taur.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/taur.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/taur.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/vox_facial_hair.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/vox_facial_hair.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/vox_facial_hair.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/vox_facial_hair.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/vox_hair.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/vox_hair.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/vox_hair.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/vox_hair.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/vox_snouts.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/vox_snouts.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/vox_snouts.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/vox_snouts.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/vox_spines.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/vox_spines.dmi similarity index 95% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/vox_spines.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/vox_spines.dmi index 04c9f7b3963f20..10547f6db8d61d 100644 Binary files a/modular_skyrat/master_files/icons/mob/sprite_accessory/vox_spines.dmi and b/modular_nova/master_files/icons/mob/sprite_accessory/vox_spines.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/vox_tails.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/vox_tails.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/vox_tails.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/vox_tails.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/wings.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/wings.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/wings.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/wings.dmi diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/xeno_parts.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/xeno_parts.dmi similarity index 100% rename from modular_skyrat/master_files/icons/mob/sprite_accessory/xeno_parts.dmi rename to modular_nova/master_files/icons/mob/sprite_accessory/xeno_parts.dmi diff --git a/modular_skyrat/master_files/icons/obj/agateram.dmi b/modular_nova/master_files/icons/obj/agateram.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/agateram.dmi rename to modular_nova/master_files/icons/obj/agateram.dmi diff --git a/modular_skyrat/master_files/icons/obj/alt_silicon_brains.dmi b/modular_nova/master_files/icons/obj/alt_silicon_brains.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/alt_silicon_brains.dmi rename to modular_nova/master_files/icons/obj/alt_silicon_brains.dmi diff --git a/modular_skyrat/master_files/icons/obj/balls.dmi b/modular_nova/master_files/icons/obj/balls.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/balls.dmi rename to modular_nova/master_files/icons/obj/balls.dmi diff --git a/modular_skyrat/master_files/icons/obj/bureaucracy.dmi b/modular_nova/master_files/icons/obj/bureaucracy.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/bureaucracy.dmi rename to modular_nova/master_files/icons/obj/bureaucracy.dmi diff --git a/modular_nova/master_files/icons/obj/card.dmi b/modular_nova/master_files/icons/obj/card.dmi new file mode 100644 index 00000000000000..d44c3417b7ed3b Binary files /dev/null and b/modular_nova/master_files/icons/obj/card.dmi differ diff --git a/modular_skyrat/master_files/icons/obj/cigarettes_khi.dmi b/modular_nova/master_files/icons/obj/cigarettes_khi.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/cigarettes_khi.dmi rename to modular_nova/master_files/icons/obj/cigarettes_khi.dmi diff --git a/modular_nova/master_files/icons/obj/closet.dmi b/modular_nova/master_files/icons/obj/closet.dmi new file mode 100644 index 00000000000000..5673b2f19630de Binary files /dev/null and b/modular_nova/master_files/icons/obj/closet.dmi differ diff --git a/modular_nova/master_files/icons/obj/closet_wall.dmi b/modular_nova/master_files/icons/obj/closet_wall.dmi new file mode 100644 index 00000000000000..60465a0acc39f2 Binary files /dev/null and b/modular_nova/master_files/icons/obj/closet_wall.dmi differ diff --git a/modular_nova/master_files/icons/obj/clothing/accessories.dmi b/modular_nova/master_files/icons/obj/clothing/accessories.dmi new file mode 100644 index 00000000000000..1cdcdc05904900 Binary files /dev/null and b/modular_nova/master_files/icons/obj/clothing/accessories.dmi differ diff --git a/modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi b/modular_nova/master_files/icons/obj/clothing/backpacks.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi rename to modular_nova/master_files/icons/obj/clothing/backpacks.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/belts.dmi b/modular_nova/master_files/icons/obj/clothing/belts.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/belts.dmi rename to modular_nova/master_files/icons/obj/clothing/belts.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/glasses.dmi b/modular_nova/master_files/icons/obj/clothing/glasses.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/glasses.dmi rename to modular_nova/master_files/icons/obj/clothing/glasses.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/gloves.dmi b/modular_nova/master_files/icons/obj/clothing/gloves.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/gloves.dmi rename to modular_nova/master_files/icons/obj/clothing/gloves.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/hats.dmi b/modular_nova/master_files/icons/obj/clothing/hats.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/hats.dmi rename to modular_nova/master_files/icons/obj/clothing/hats.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/head/akula.dmi b/modular_nova/master_files/icons/obj/clothing/head/akula.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/head/akula.dmi rename to modular_nova/master_files/icons/obj/clothing/head/akula.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/head/akula_official.dmi b/modular_nova/master_files/icons/obj/clothing/head/akula_official.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/head/akula_official.dmi rename to modular_nova/master_files/icons/obj/clothing/head/akula_official.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/head/chaplain.dmi b/modular_nova/master_files/icons/obj/clothing/head/chaplain.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/head/chaplain.dmi rename to modular_nova/master_files/icons/obj/clothing/head/chaplain.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/head/costume.dmi b/modular_nova/master_files/icons/obj/clothing/head/costume.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/head/costume.dmi rename to modular_nova/master_files/icons/obj/clothing/head/costume.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/head/cowboy.dmi b/modular_nova/master_files/icons/obj/clothing/head/cowboy.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/head/cowboy.dmi rename to modular_nova/master_files/icons/obj/clothing/head/cowboy.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/head/helmet.dmi b/modular_nova/master_files/icons/obj/clothing/head/helmet.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/head/helmet.dmi rename to modular_nova/master_files/icons/obj/clothing/head/helmet.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/head/plasmaman_hats.dmi b/modular_nova/master_files/icons/obj/clothing/head/plasmaman_hats.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/head/plasmaman_hats.dmi rename to modular_nova/master_files/icons/obj/clothing/head/plasmaman_hats.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/head/winterhood.dmi b/modular_nova/master_files/icons/obj/clothing/head/winterhood.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/head/winterhood.dmi rename to modular_nova/master_files/icons/obj/clothing/head/winterhood.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/masks.dmi b/modular_nova/master_files/icons/obj/clothing/masks.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/masks.dmi rename to modular_nova/master_files/icons/obj/clothing/masks.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/neck.dmi b/modular_nova/master_files/icons/obj/clothing/neck.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/neck.dmi rename to modular_nova/master_files/icons/obj/clothing/neck.dmi diff --git a/modular_nova/master_files/icons/obj/clothing/shoes.dmi b/modular_nova/master_files/icons/obj/clothing/shoes.dmi new file mode 100644 index 00000000000000..9bf04a5256a960 Binary files /dev/null and b/modular_nova/master_files/icons/obj/clothing/shoes.dmi differ diff --git a/modular_skyrat/master_files/icons/obj/clothing/suits.dmi b/modular_nova/master_files/icons/obj/clothing/suits.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/suits.dmi rename to modular_nova/master_files/icons/obj/clothing/suits.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/suits/akula.dmi b/modular_nova/master_files/icons/obj/clothing/suits/akula.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/suits/akula.dmi rename to modular_nova/master_files/icons/obj/clothing/suits/akula.dmi diff --git a/modular_nova/master_files/icons/obj/clothing/suits/armor.dmi b/modular_nova/master_files/icons/obj/clothing/suits/armor.dmi new file mode 100644 index 00000000000000..948d2d783ede78 Binary files /dev/null and b/modular_nova/master_files/icons/obj/clothing/suits/armor.dmi differ diff --git a/modular_skyrat/master_files/icons/obj/clothing/suits/chaplain.dmi b/modular_nova/master_files/icons/obj/clothing/suits/chaplain.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/suits/chaplain.dmi rename to modular_nova/master_files/icons/obj/clothing/suits/chaplain.dmi diff --git a/modular_nova/master_files/icons/obj/clothing/suits/labcoat.dmi b/modular_nova/master_files/icons/obj/clothing/suits/labcoat.dmi new file mode 100644 index 00000000000000..c63b241a799879 Binary files /dev/null and b/modular_nova/master_files/icons/obj/clothing/suits/labcoat.dmi differ diff --git a/modular_skyrat/master_files/icons/obj/clothing/suits/spacesuit.dmi b/modular_nova/master_files/icons/obj/clothing/suits/spacesuit.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/suits/spacesuit.dmi rename to modular_nova/master_files/icons/obj/clothing/suits/spacesuit.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/suits/wintercoat.dmi b/modular_nova/master_files/icons/obj/clothing/suits/wintercoat.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/suits/wintercoat.dmi rename to modular_nova/master_files/icons/obj/clothing/suits/wintercoat.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/towel.dmi b/modular_nova/master_files/icons/obj/clothing/towel.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/towel.dmi rename to modular_nova/master_files/icons/obj/clothing/towel.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/akula.dmi b/modular_nova/master_files/icons/obj/clothing/under/akula.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/under/akula.dmi rename to modular_nova/master_files/icons/obj/clothing/under/akula.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/cargo.dmi b/modular_nova/master_files/icons/obj/clothing/under/cargo.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/under/cargo.dmi rename to modular_nova/master_files/icons/obj/clothing/under/cargo.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/centcom.dmi b/modular_nova/master_files/icons/obj/clothing/under/centcom.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/under/centcom.dmi rename to modular_nova/master_files/icons/obj/clothing/under/centcom.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/civilian.dmi b/modular_nova/master_files/icons/obj/clothing/under/civilian.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/under/civilian.dmi rename to modular_nova/master_files/icons/obj/clothing/under/civilian.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/command.dmi b/modular_nova/master_files/icons/obj/clothing/under/command.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/under/command.dmi rename to modular_nova/master_files/icons/obj/clothing/under/command.dmi diff --git a/modular_nova/master_files/icons/obj/clothing/under/costume.dmi b/modular_nova/master_files/icons/obj/clothing/under/costume.dmi new file mode 100644 index 00000000000000..9edd0ae2adec90 Binary files /dev/null and b/modular_nova/master_files/icons/obj/clothing/under/costume.dmi differ diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/engineering.dmi b/modular_nova/master_files/icons/obj/clothing/under/engineering.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/under/engineering.dmi rename to modular_nova/master_files/icons/obj/clothing/under/engineering.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/medical.dmi b/modular_nova/master_files/icons/obj/clothing/under/medical.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/under/medical.dmi rename to modular_nova/master_files/icons/obj/clothing/under/medical.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/misc.dmi b/modular_nova/master_files/icons/obj/clothing/under/misc.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/under/misc.dmi rename to modular_nova/master_files/icons/obj/clothing/under/misc.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/plasmaman.dmi b/modular_nova/master_files/icons/obj/clothing/under/plasmaman.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/under/plasmaman.dmi rename to modular_nova/master_files/icons/obj/clothing/under/plasmaman.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/rnd.dmi b/modular_nova/master_files/icons/obj/clothing/under/rnd.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/under/rnd.dmi rename to modular_nova/master_files/icons/obj/clothing/under/rnd.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/security.dmi b/modular_nova/master_files/icons/obj/clothing/under/security.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/under/security.dmi rename to modular_nova/master_files/icons/obj/clothing/under/security.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi b/modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi rename to modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi b/modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi rename to modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/suits.dmi b/modular_nova/master_files/icons/obj/clothing/under/suits.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/under/suits.dmi rename to modular_nova/master_files/icons/obj/clothing/under/suits.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/syndicate.dmi b/modular_nova/master_files/icons/obj/clothing/under/syndicate.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/under/syndicate.dmi rename to modular_nova/master_files/icons/obj/clothing/under/syndicate.dmi diff --git a/modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi b/modular_nova/master_files/icons/obj/clothing/uniforms.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi rename to modular_nova/master_files/icons/obj/clothing/uniforms.dmi diff --git a/modular_skyrat/master_files/icons/obj/crucifix.dmi b/modular_nova/master_files/icons/obj/crucifix.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/crucifix.dmi rename to modular_nova/master_files/icons/obj/crucifix.dmi diff --git a/modular_skyrat/master_files/icons/obj/drinks.dmi b/modular_nova/master_files/icons/obj/drinks.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/drinks.dmi rename to modular_nova/master_files/icons/obj/drinks.dmi diff --git a/modular_skyrat/master_files/icons/obj/energy_axe.dmi b/modular_nova/master_files/icons/obj/energy_axe.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/energy_axe.dmi rename to modular_nova/master_files/icons/obj/energy_axe.dmi diff --git a/modular_skyrat/master_files/icons/obj/food/hemophage_food.dmi b/modular_nova/master_files/icons/obj/food/hemophage_food.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/food/hemophage_food.dmi rename to modular_nova/master_files/icons/obj/food/hemophage_food.dmi diff --git a/modular_skyrat/master_files/icons/obj/food/irnbru.dmi b/modular_nova/master_files/icons/obj/food/irnbru.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/food/irnbru.dmi rename to modular_nova/master_files/icons/obj/food/irnbru.dmi diff --git a/modular_skyrat/master_files/icons/obj/food/snacks.dmi b/modular_nova/master_files/icons/obj/food/snacks.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/food/snacks.dmi rename to modular_nova/master_files/icons/obj/food/snacks.dmi diff --git a/modular_skyrat/master_files/icons/obj/genitals/anus.dmi b/modular_nova/master_files/icons/obj/genitals/anus.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/genitals/anus.dmi rename to modular_nova/master_files/icons/obj/genitals/anus.dmi diff --git a/modular_skyrat/master_files/icons/obj/genitals/breasts.dmi b/modular_nova/master_files/icons/obj/genitals/breasts.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/genitals/breasts.dmi rename to modular_nova/master_files/icons/obj/genitals/breasts.dmi diff --git a/modular_skyrat/master_files/icons/obj/genitals/penis.dmi b/modular_nova/master_files/icons/obj/genitals/penis.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/genitals/penis.dmi rename to modular_nova/master_files/icons/obj/genitals/penis.dmi diff --git a/modular_skyrat/master_files/icons/obj/genitals/testicles.dmi b/modular_nova/master_files/icons/obj/genitals/testicles.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/genitals/testicles.dmi rename to modular_nova/master_files/icons/obj/genitals/testicles.dmi diff --git a/modular_skyrat/master_files/icons/obj/genitals/vagina.dmi b/modular_nova/master_files/icons/obj/genitals/vagina.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/genitals/vagina.dmi rename to modular_nova/master_files/icons/obj/genitals/vagina.dmi diff --git a/modular_skyrat/master_files/icons/obj/hhmirror.dmi b/modular_nova/master_files/icons/obj/hhmirror.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/hhmirror.dmi rename to modular_nova/master_files/icons/obj/hhmirror.dmi diff --git a/modular_skyrat/master_files/icons/obj/hydroponics/growing.dmi b/modular_nova/master_files/icons/obj/hydroponics/growing.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/hydroponics/growing.dmi rename to modular_nova/master_files/icons/obj/hydroponics/growing.dmi diff --git a/modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi b/modular_nova/master_files/icons/obj/hydroponics/harvest.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi rename to modular_nova/master_files/icons/obj/hydroponics/harvest.dmi diff --git a/modular_skyrat/master_files/icons/obj/hydroponics/seeds.dmi b/modular_nova/master_files/icons/obj/hydroponics/seeds.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/hydroponics/seeds.dmi rename to modular_nova/master_files/icons/obj/hydroponics/seeds.dmi diff --git a/modular_skyrat/master_files/icons/obj/instruments.dmi b/modular_nova/master_files/icons/obj/instruments.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/instruments.dmi rename to modular_nova/master_files/icons/obj/instruments.dmi diff --git a/modular_skyrat/master_files/icons/obj/janitor.dmi b/modular_nova/master_files/icons/obj/janitor.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/janitor.dmi rename to modular_nova/master_files/icons/obj/janitor.dmi diff --git a/modular_skyrat/master_files/icons/obj/kinetic_glaive.dmi b/modular_nova/master_files/icons/obj/kinetic_glaive.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/kinetic_glaive.dmi rename to modular_nova/master_files/icons/obj/kinetic_glaive.dmi diff --git a/modular_skyrat/master_files/icons/obj/kitchen.dmi b/modular_nova/master_files/icons/obj/kitchen.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/kitchen.dmi rename to modular_nova/master_files/icons/obj/kitchen.dmi diff --git a/modular_skyrat/master_files/icons/obj/oxygen_candle.dmi b/modular_nova/master_files/icons/obj/oxygen_candle.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/oxygen_candle.dmi rename to modular_nova/master_files/icons/obj/oxygen_candle.dmi diff --git a/modular_skyrat/master_files/icons/obj/plushes.dmi b/modular_nova/master_files/icons/obj/plushes.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/plushes.dmi rename to modular_nova/master_files/icons/obj/plushes.dmi diff --git a/modular_skyrat/master_files/icons/obj/ring.dmi b/modular_nova/master_files/icons/obj/ring.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/ring.dmi rename to modular_nova/master_files/icons/obj/ring.dmi diff --git a/modular_skyrat/master_files/icons/obj/staff.dmi b/modular_nova/master_files/icons/obj/staff.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/staff.dmi rename to modular_nova/master_files/icons/obj/staff.dmi diff --git a/modular_skyrat/master_files/icons/obj/structures/puzzle_door.dmi b/modular_nova/master_files/icons/obj/structures/puzzle_door.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/structures/puzzle_door.dmi rename to modular_nova/master_files/icons/obj/structures/puzzle_door.dmi diff --git a/modular_skyrat/master_files/icons/obj/structures/sauna_oven.dmi b/modular_nova/master_files/icons/obj/structures/sauna_oven.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/structures/sauna_oven.dmi rename to modular_nova/master_files/icons/obj/structures/sauna_oven.dmi diff --git a/modular_nova/master_files/icons/obj/surgery.dmi b/modular_nova/master_files/icons/obj/surgery.dmi new file mode 100644 index 00000000000000..3ba35f9ad5afe6 Binary files /dev/null and b/modular_nova/master_files/icons/obj/surgery.dmi differ diff --git a/modular_skyrat/master_files/icons/obj/tank.dmi b/modular_nova/master_files/icons/obj/tank.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/tank.dmi rename to modular_nova/master_files/icons/obj/tank.dmi diff --git a/modular_skyrat/master_files/icons/obj/tools.dmi b/modular_nova/master_files/icons/obj/tools.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/tools.dmi rename to modular_nova/master_files/icons/obj/tools.dmi diff --git a/modular_skyrat/master_files/icons/obj/trash_piles.dmi b/modular_nova/master_files/icons/obj/trash_piles.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/trash_piles.dmi rename to modular_nova/master_files/icons/obj/trash_piles.dmi diff --git a/modular_skyrat/master_files/icons/obj/vehicles/vehicles.dmi b/modular_nova/master_files/icons/obj/vehicles/vehicles.dmi similarity index 100% rename from modular_skyrat/master_files/icons/obj/vehicles/vehicles.dmi rename to modular_nova/master_files/icons/obj/vehicles/vehicles.dmi diff --git a/modular_skyrat/master_files/icons/stamp_icons/cat_blue.png b/modular_nova/master_files/icons/stamp_icons/cat_blue.png similarity index 100% rename from modular_skyrat/master_files/icons/stamp_icons/cat_blue.png rename to modular_nova/master_files/icons/stamp_icons/cat_blue.png diff --git a/modular_skyrat/master_files/icons/stamp_icons/cat_green.png b/modular_nova/master_files/icons/stamp_icons/cat_green.png similarity index 100% rename from modular_skyrat/master_files/icons/stamp_icons/cat_green.png rename to modular_nova/master_files/icons/stamp_icons/cat_green.png diff --git a/modular_skyrat/master_files/icons/stamp_icons/cat_orange.png b/modular_nova/master_files/icons/stamp_icons/cat_orange.png similarity index 100% rename from modular_skyrat/master_files/icons/stamp_icons/cat_orange.png rename to modular_nova/master_files/icons/stamp_icons/cat_orange.png diff --git a/modular_skyrat/master_files/icons/stamp_icons/cat_red.png b/modular_nova/master_files/icons/stamp_icons/cat_red.png similarity index 100% rename from modular_skyrat/master_files/icons/stamp_icons/cat_red.png rename to modular_nova/master_files/icons/stamp_icons/cat_red.png diff --git a/modular_skyrat/master_files/icons/stamp_icons/large_stamp-nri.png b/modular_nova/master_files/icons/stamp_icons/large_stamp-nri.png similarity index 100% rename from modular_skyrat/master_files/icons/stamp_icons/large_stamp-nri.png rename to modular_nova/master_files/icons/stamp_icons/large_stamp-nri.png diff --git a/modular_skyrat/master_files/icons/stamp_icons/large_stamp-solfed.png b/modular_nova/master_files/icons/stamp_icons/large_stamp-solfed.png similarity index 100% rename from modular_skyrat/master_files/icons/stamp_icons/large_stamp-solfed.png rename to modular_nova/master_files/icons/stamp_icons/large_stamp-solfed.png diff --git a/modular_skyrat/master_files/icons/stamp_icons/paw_blue.png b/modular_nova/master_files/icons/stamp_icons/paw_blue.png similarity index 100% rename from modular_skyrat/master_files/icons/stamp_icons/paw_blue.png rename to modular_nova/master_files/icons/stamp_icons/paw_blue.png diff --git a/modular_skyrat/master_files/icons/stamp_icons/paw_green.png b/modular_nova/master_files/icons/stamp_icons/paw_green.png similarity index 100% rename from modular_skyrat/master_files/icons/stamp_icons/paw_green.png rename to modular_nova/master_files/icons/stamp_icons/paw_green.png diff --git a/modular_skyrat/master_files/icons/stamp_icons/paw_orange.png b/modular_nova/master_files/icons/stamp_icons/paw_orange.png similarity index 100% rename from modular_skyrat/master_files/icons/stamp_icons/paw_orange.png rename to modular_nova/master_files/icons/stamp_icons/paw_orange.png diff --git a/modular_skyrat/master_files/icons/stamp_icons/paw_red.png b/modular_nova/master_files/icons/stamp_icons/paw_red.png similarity index 100% rename from modular_skyrat/master_files/icons/stamp_icons/paw_red.png rename to modular_nova/master_files/icons/stamp_icons/paw_red.png diff --git a/modular_nova/master_files/readme.md b/modular_nova/master_files/readme.md new file mode 100644 index 00000000000000..687cbc87320afd --- /dev/null +++ b/modular_nova/master_files/readme.md @@ -0,0 +1,33 @@ +This is the logging file for any master icon and sound files that we have. + +Please check this list before adding your own master file to see if it already exists. If it does exist then please put your icon in it. + +MASTER ICON FILES +- /master_files/icons/emoji.dmi +- /master_files/icons/mob/hud.dmi +- /master_files/icons/obj/clothing/gloves.dmi +- /master_files/icons/mob/clothing/hands.dmi +- /master_files/icons/obj/trash_piles.dmi +- /master_files/icons/mob/popup_flicks.dmi + +MASTER SOUND FILES +- /master_files/sound/effects/heart_beat_loop3.ogg +- /master_files/sound/effects/heart_beat_once.ogg + +MASTER CODE FILES +- /master_files/code/modules/power/lighting.dm +- /master_files/code/modules/clothing/non_anthro_clothes.dm > PLEASE USE THIS TO LOG ANY CLOTHES THAT DO NOT NEED ANTHRO VARIANTS. +- /master_files/code/modules/clothing/anthro_clothes.dm > PLEASE USE THIS TO LOG ANY CLOTHES THAT DO NEED ANTHRO VARIANTS. +- /master_files/code/datums/traits/neutral.dm > USE THIS FOR ANY NEUTRAL TRAITS +- /master_files/code/datums/traits/negative.dm > USE THIS FOR ANY NEGATIVE TRAITS +- /master_files/code/datums/traits/good.dm > USE THIS FOR ANY GOOD TRAITS +- /master_files/code/game/objects/structures/trash_pile.dm +- /master_files/code/modules/mob/living/carbon/carbon_say.dm +- /master_files/code/modules/mob/living/emote_popup.dm +- /master_files/code/game/machinery/doors/firedoor.dm +- /master_files/code/modules/jobs/job_types/cyborg.dm +- /master_files/code/modules/antagonists/_common/antag_datum.dm + +MASTER GLOBAL VARS +- modular_nova/master_files/code/_globalvars/configuration.dm > GLOBAL_VAR_INIT(looc_allowed, TRUE) + diff --git a/modular_skyrat/master_files/sound/ambience/ambigen1.ogg b/modular_nova/master_files/sound/ambience/ambigen1.ogg similarity index 100% rename from modular_skyrat/master_files/sound/ambience/ambigen1.ogg rename to modular_nova/master_files/sound/ambience/ambigen1.ogg diff --git a/modular_skyrat/master_files/sound/ambience/ambigen2.ogg b/modular_nova/master_files/sound/ambience/ambigen2.ogg similarity index 100% rename from modular_skyrat/master_files/sound/ambience/ambigen2.ogg rename to modular_nova/master_files/sound/ambience/ambigen2.ogg diff --git a/modular_skyrat/master_files/sound/ambience/ambigen3.ogg b/modular_nova/master_files/sound/ambience/ambigen3.ogg similarity index 100% rename from modular_skyrat/master_files/sound/ambience/ambigen3.ogg rename to modular_nova/master_files/sound/ambience/ambigen3.ogg diff --git a/modular_skyrat/master_files/sound/ambience/ambigen4.ogg b/modular_nova/master_files/sound/ambience/ambigen4.ogg similarity index 100% rename from modular_skyrat/master_files/sound/ambience/ambigen4.ogg rename to modular_nova/master_files/sound/ambience/ambigen4.ogg diff --git a/modular_skyrat/master_files/sound/ambience/ambigen5.ogg b/modular_nova/master_files/sound/ambience/ambigen5.ogg similarity index 100% rename from modular_skyrat/master_files/sound/ambience/ambigen5.ogg rename to modular_nova/master_files/sound/ambience/ambigen5.ogg diff --git a/modular_skyrat/master_files/sound/ambience/ambigen6.ogg b/modular_nova/master_files/sound/ambience/ambigen6.ogg similarity index 100% rename from modular_skyrat/master_files/sound/ambience/ambigen6.ogg rename to modular_nova/master_files/sound/ambience/ambigen6.ogg diff --git a/modular_skyrat/master_files/sound/ambience/ambigen7.ogg b/modular_nova/master_files/sound/ambience/ambigen7.ogg similarity index 100% rename from modular_skyrat/master_files/sound/ambience/ambigen7.ogg rename to modular_nova/master_files/sound/ambience/ambigen7.ogg diff --git a/modular_skyrat/master_files/sound/ambience/ambigen8.ogg b/modular_nova/master_files/sound/ambience/ambigen8.ogg similarity index 100% rename from modular_skyrat/master_files/sound/ambience/ambigen8.ogg rename to modular_nova/master_files/sound/ambience/ambigen8.ogg diff --git a/modular_skyrat/master_files/sound/ambience/ambigen9.ogg b/modular_nova/master_files/sound/ambience/ambigen9.ogg similarity index 100% rename from modular_skyrat/master_files/sound/ambience/ambigen9.ogg rename to modular_nova/master_files/sound/ambience/ambigen9.ogg diff --git a/modular_skyrat/master_files/sound/ambience/starlight.ogg b/modular_nova/master_files/sound/ambience/starlight.ogg similarity index 100% rename from modular_skyrat/master_files/sound/ambience/starlight.ogg rename to modular_nova/master_files/sound/ambience/starlight.ogg diff --git a/modular_skyrat/master_files/sound/effects/bab1.ogg b/modular_nova/master_files/sound/effects/bab1.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/bab1.ogg rename to modular_nova/master_files/sound/effects/bab1.ogg diff --git a/modular_skyrat/master_files/sound/effects/dorime.ogg b/modular_nova/master_files/sound/effects/dorime.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/dorime.ogg rename to modular_nova/master_files/sound/effects/dorime.ogg diff --git a/modular_skyrat/master_files/sound/effects/footstep1.ogg b/modular_nova/master_files/sound/effects/footstep1.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/footstep1.ogg rename to modular_nova/master_files/sound/effects/footstep1.ogg diff --git a/modular_skyrat/master_files/sound/effects/footstep2.ogg b/modular_nova/master_files/sound/effects/footstep2.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/footstep2.ogg rename to modular_nova/master_files/sound/effects/footstep2.ogg diff --git a/modular_skyrat/master_files/sound/effects/footstep3.ogg b/modular_nova/master_files/sound/effects/footstep3.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/footstep3.ogg rename to modular_nova/master_files/sound/effects/footstep3.ogg diff --git a/modular_skyrat/master_files/sound/effects/gmalfunction.ogg b/modular_nova/master_files/sound/effects/gmalfunction.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/gmalfunction.ogg rename to modular_nova/master_files/sound/effects/gmalfunction.ogg diff --git a/modular_skyrat/master_files/sound/effects/hacked.ogg b/modular_nova/master_files/sound/effects/hacked.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/hacked.ogg rename to modular_nova/master_files/sound/effects/hacked.ogg diff --git a/modular_skyrat/master_files/sound/effects/heart_beat_loop3.ogg b/modular_nova/master_files/sound/effects/heart_beat_loop3.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/heart_beat_loop3.ogg rename to modular_nova/master_files/sound/effects/heart_beat_loop3.ogg diff --git a/modular_skyrat/master_files/sound/effects/heart_beat_once.ogg b/modular_nova/master_files/sound/effects/heart_beat_once.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/heart_beat_once.ogg rename to modular_nova/master_files/sound/effects/heart_beat_once.ogg diff --git a/modular_skyrat/master_files/sound/effects/lungbust_cough1.ogg b/modular_nova/master_files/sound/effects/lungbust_cough1.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/lungbust_cough1.ogg rename to modular_nova/master_files/sound/effects/lungbust_cough1.ogg diff --git a/modular_skyrat/master_files/sound/effects/lungbust_cough2.ogg b/modular_nova/master_files/sound/effects/lungbust_cough2.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/lungbust_cough2.ogg rename to modular_nova/master_files/sound/effects/lungbust_cough2.ogg diff --git a/modular_skyrat/master_files/sound/effects/lungbust_moan1.ogg b/modular_nova/master_files/sound/effects/lungbust_moan1.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/lungbust_moan1.ogg rename to modular_nova/master_files/sound/effects/lungbust_moan1.ogg diff --git a/modular_skyrat/master_files/sound/effects/lungbust_moan2.ogg b/modular_nova/master_files/sound/effects/lungbust_moan2.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/lungbust_moan2.ogg rename to modular_nova/master_files/sound/effects/lungbust_moan2.ogg diff --git a/modular_skyrat/master_files/sound/effects/lungbust_moan3.ogg b/modular_nova/master_files/sound/effects/lungbust_moan3.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/lungbust_moan3.ogg rename to modular_nova/master_files/sound/effects/lungbust_moan3.ogg diff --git a/modular_skyrat/master_files/sound/effects/metalblock1.wav b/modular_nova/master_files/sound/effects/metalblock1.wav similarity index 100% rename from modular_skyrat/master_files/sound/effects/metalblock1.wav rename to modular_nova/master_files/sound/effects/metalblock1.wav diff --git a/modular_skyrat/master_files/sound/effects/metalblock2.wav b/modular_nova/master_files/sound/effects/metalblock2.wav similarity index 100% rename from modular_skyrat/master_files/sound/effects/metalblock2.wav rename to modular_nova/master_files/sound/effects/metalblock2.wav diff --git a/modular_skyrat/master_files/sound/effects/metalblock3.wav b/modular_nova/master_files/sound/effects/metalblock3.wav similarity index 100% rename from modular_skyrat/master_files/sound/effects/metalblock3.wav rename to modular_nova/master_files/sound/effects/metalblock3.wav diff --git a/modular_skyrat/master_files/sound/effects/metalblock4.wav b/modular_nova/master_files/sound/effects/metalblock4.wav similarity index 100% rename from modular_skyrat/master_files/sound/effects/metalblock4.wav rename to modular_nova/master_files/sound/effects/metalblock4.wav diff --git a/modular_skyrat/master_files/sound/effects/metalblock5.wav b/modular_nova/master_files/sound/effects/metalblock5.wav similarity index 100% rename from modular_skyrat/master_files/sound/effects/metalblock5.wav rename to modular_nova/master_files/sound/effects/metalblock5.wav diff --git a/modular_skyrat/master_files/sound/effects/metalblock6.wav b/modular_nova/master_files/sound/effects/metalblock6.wav similarity index 100% rename from modular_skyrat/master_files/sound/effects/metalblock6.wav rename to modular_nova/master_files/sound/effects/metalblock6.wav diff --git a/modular_skyrat/master_files/sound/effects/metalblock7.wav b/modular_nova/master_files/sound/effects/metalblock7.wav similarity index 100% rename from modular_skyrat/master_files/sound/effects/metalblock7.wav rename to modular_nova/master_files/sound/effects/metalblock7.wav diff --git a/modular_skyrat/master_files/sound/effects/metalblock8.wav b/modular_nova/master_files/sound/effects/metalblock8.wav similarity index 100% rename from modular_skyrat/master_files/sound/effects/metalblock8.wav rename to modular_nova/master_files/sound/effects/metalblock8.wav diff --git a/modular_skyrat/master_files/sound/effects/platform_call.ogg b/modular_nova/master_files/sound/effects/platform_call.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/platform_call.ogg rename to modular_nova/master_files/sound/effects/platform_call.ogg diff --git a/modular_skyrat/master_files/sound/effects/reactor/core_overheating.ogg b/modular_nova/master_files/sound/effects/reactor/core_overheating.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/reactor/core_overheating.ogg rename to modular_nova/master_files/sound/effects/reactor/core_overheating.ogg diff --git a/modular_skyrat/master_files/sound/effects/reactor/explode.ogg b/modular_nova/master_files/sound/effects/reactor/explode.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/reactor/explode.ogg rename to modular_nova/master_files/sound/effects/reactor/explode.ogg diff --git a/modular_skyrat/master_files/sound/effects/reactor/meltdown.ogg b/modular_nova/master_files/sound/effects/reactor/meltdown.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/reactor/meltdown.ogg rename to modular_nova/master_files/sound/effects/reactor/meltdown.ogg diff --git a/modular_skyrat/master_files/sound/effects/robot_bump.ogg b/modular_nova/master_files/sound/effects/robot_bump.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/robot_bump.ogg rename to modular_nova/master_files/sound/effects/robot_bump.ogg diff --git a/modular_skyrat/master_files/sound/effects/robot_sit.ogg b/modular_nova/master_files/sound/effects/robot_sit.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/robot_sit.ogg rename to modular_nova/master_files/sound/effects/robot_sit.ogg diff --git a/modular_skyrat/master_files/sound/effects/robot_smoke.ogg b/modular_nova/master_files/sound/effects/robot_smoke.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/robot_smoke.ogg rename to modular_nova/master_files/sound/effects/robot_smoke.ogg diff --git a/modular_skyrat/master_files/sound/effects/rustle1.ogg b/modular_nova/master_files/sound/effects/rustle1.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/rustle1.ogg rename to modular_nova/master_files/sound/effects/rustle1.ogg diff --git a/modular_skyrat/master_files/sound/effects/rustle2.ogg b/modular_nova/master_files/sound/effects/rustle2.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/rustle2.ogg rename to modular_nova/master_files/sound/effects/rustle2.ogg diff --git a/modular_skyrat/master_files/sound/effects/save.ogg b/modular_nova/master_files/sound/effects/save.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/save.ogg rename to modular_nova/master_files/sound/effects/save.ogg diff --git a/modular_skyrat/master_files/sound/effects/splash.ogg b/modular_nova/master_files/sound/effects/splash.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/splash.ogg rename to modular_nova/master_files/sound/effects/splash.ogg diff --git a/modular_skyrat/master_files/sound/effects/suitstep1.ogg b/modular_nova/master_files/sound/effects/suitstep1.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/suitstep1.ogg rename to modular_nova/master_files/sound/effects/suitstep1.ogg diff --git a/modular_skyrat/master_files/sound/effects/suitstep2.ogg b/modular_nova/master_files/sound/effects/suitstep2.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/suitstep2.ogg rename to modular_nova/master_files/sound/effects/suitstep2.ogg diff --git a/modular_skyrat/master_files/sound/effects/water_wade1.ogg b/modular_nova/master_files/sound/effects/water_wade1.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/water_wade1.ogg rename to modular_nova/master_files/sound/effects/water_wade1.ogg diff --git a/modular_skyrat/master_files/sound/effects/water_wade2.ogg b/modular_nova/master_files/sound/effects/water_wade2.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/water_wade2.ogg rename to modular_nova/master_files/sound/effects/water_wade2.ogg diff --git a/modular_skyrat/master_files/sound/effects/water_wade3.ogg b/modular_nova/master_files/sound/effects/water_wade3.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/water_wade3.ogg rename to modular_nova/master_files/sound/effects/water_wade3.ogg diff --git a/modular_skyrat/master_files/sound/effects/water_wade4.ogg b/modular_nova/master_files/sound/effects/water_wade4.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/water_wade4.ogg rename to modular_nova/master_files/sound/effects/water_wade4.ogg diff --git a/modular_skyrat/master_files/sound/effects/watersplash.ogg b/modular_nova/master_files/sound/effects/watersplash.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/watersplash.ogg rename to modular_nova/master_files/sound/effects/watersplash.ogg diff --git a/modular_skyrat/master_files/sound/effects/weave.ogg b/modular_nova/master_files/sound/effects/weave.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/weave.ogg rename to modular_nova/master_files/sound/effects/weave.ogg diff --git a/modular_skyrat/master_files/sound/effects/wing_flap.ogg b/modular_nova/master_files/sound/effects/wing_flap.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/wing_flap.ogg rename to modular_nova/master_files/sound/effects/wing_flap.ogg diff --git a/modular_skyrat/master_files/sound/effects/wolfhead_curse.ogg b/modular_nova/master_files/sound/effects/wolfhead_curse.ogg similarity index 100% rename from modular_skyrat/master_files/sound/effects/wolfhead_curse.ogg rename to modular_nova/master_files/sound/effects/wolfhead_curse.ogg diff --git a/modular_skyrat/master_files/sound/items/drop/ring.ogg b/modular_nova/master_files/sound/items/drop/ring.ogg similarity index 100% rename from modular_skyrat/master_files/sound/items/drop/ring.ogg rename to modular_nova/master_files/sound/items/drop/ring.ogg diff --git a/modular_skyrat/master_files/sound/items/pickup/ring.ogg b/modular_nova/master_files/sound/items/pickup/ring.ogg similarity index 100% rename from modular_skyrat/master_files/sound/items/pickup/ring.ogg rename to modular_nova/master_files/sound/items/pickup/ring.ogg diff --git a/modular_skyrat/master_files/sound/items/tts/started_type.ogg b/modular_nova/master_files/sound/items/tts/started_type.ogg similarity index 100% rename from modular_skyrat/master_files/sound/items/tts/started_type.ogg rename to modular_nova/master_files/sound/items/tts/started_type.ogg diff --git a/modular_skyrat/master_files/sound/items/tts/stopped_type.ogg b/modular_nova/master_files/sound/items/tts/stopped_type.ogg similarity index 100% rename from modular_skyrat/master_files/sound/items/tts/stopped_type.ogg rename to modular_nova/master_files/sound/items/tts/stopped_type.ogg diff --git a/modular_nova/master_files/sound/items/zippo_close.ogg b/modular_nova/master_files/sound/items/zippo_close.ogg new file mode 100644 index 00000000000000..8d51263dfd8065 Binary files /dev/null and b/modular_nova/master_files/sound/items/zippo_close.ogg differ diff --git a/modular_nova/master_files/sound/items/zippo_open.ogg b/modular_nova/master_files/sound/items/zippo_open.ogg new file mode 100644 index 00000000000000..1c1681d999a379 Binary files /dev/null and b/modular_nova/master_files/sound/items/zippo_open.ogg differ diff --git a/modular_skyrat/master_files/sound/weapons/bloodyslice.ogg b/modular_nova/master_files/sound/weapons/bloodyslice.ogg similarity index 100% rename from modular_skyrat/master_files/sound/weapons/bloodyslice.ogg rename to modular_nova/master_files/sound/weapons/bloodyslice.ogg diff --git a/modular_skyrat/master_files/sound/weapons/crowbar.ogg b/modular_nova/master_files/sound/weapons/crowbar.ogg similarity index 100% rename from modular_skyrat/master_files/sound/weapons/crowbar.ogg rename to modular_nova/master_files/sound/weapons/crowbar.ogg diff --git a/modular_skyrat/master_files/sound/weapons/crowbar2.ogg b/modular_nova/master_files/sound/weapons/crowbar2.ogg similarity index 100% rename from modular_skyrat/master_files/sound/weapons/crowbar2.ogg rename to modular_nova/master_files/sound/weapons/crowbar2.ogg diff --git a/modular_skyrat/master_files/sound/weapons/glock17_fire.ogg b/modular_nova/master_files/sound/weapons/glock17_fire.ogg similarity index 100% rename from modular_skyrat/master_files/sound/weapons/glock17_fire.ogg rename to modular_nova/master_files/sound/weapons/glock17_fire.ogg diff --git a/modular_skyrat/master_files/sound/weapons/punch1.ogg b/modular_nova/master_files/sound/weapons/punch1.ogg similarity index 100% rename from modular_skyrat/master_files/sound/weapons/punch1.ogg rename to modular_nova/master_files/sound/weapons/punch1.ogg diff --git a/modular_skyrat/master_files/sound/weapons/punch2.ogg b/modular_nova/master_files/sound/weapons/punch2.ogg similarity index 100% rename from modular_skyrat/master_files/sound/weapons/punch2.ogg rename to modular_nova/master_files/sound/weapons/punch2.ogg diff --git a/modular_skyrat/master_files/sound/weapons/punch3.ogg b/modular_nova/master_files/sound/weapons/punch3.ogg similarity index 100% rename from modular_skyrat/master_files/sound/weapons/punch3.ogg rename to modular_nova/master_files/sound/weapons/punch3.ogg diff --git a/modular_skyrat/module_template.md b/modular_nova/module_template.md similarity index 87% rename from modular_skyrat/module_template.md rename to modular_nova/module_template.md index 629eb1ab236084..1ad076b6a8fa4c 100644 --- a/modular_skyrat/module_template.md +++ b/modular_nova/module_template.md @@ -1,6 +1,6 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/ +https://github.com/NovaSector/NovaSector/pull/ ## \ <!--Title of your addition.--> @@ -23,8 +23,8 @@ E.g: - N/A <!-- If you added a new modular override (file or code-wise) for your module, you should list it here. Code files should specify what procs they changed, in case of multiple modules using the same file. E.g: -- `modular_skyrat/master_files/sound/my_cool_sound.ogg` -- `modular_skyrat/master_files/code/my_modular_override.dm`: `proc/overriden_proc`, `var/overriden_var` +- `modular_nova/master_files/sound/my_cool_sound.ogg` +- `modular_nova/master_files/code/my_modular_override.dm`: `proc/overriden_proc`, `var/overriden_var` --> ### Defines: diff --git a/modular_nova/modules/Department_Budgets/cards.dm b/modular_nova/modules/Department_Budgets/cards.dm new file mode 100644 index 00000000000000..bffa9ace0f5415 --- /dev/null +++ b/modular_nova/modules/Department_Budgets/cards.dm @@ -0,0 +1,24 @@ +/obj/item/card/id/departmental_budget/med + department_ID = ACCOUNT_MED + department_name = ACCOUNT_MED_NAME + icon_state = "med_budget" + +/obj/item/card/id/departmental_budget/eng + department_ID = ACCOUNT_ENG + department_name = ACCOUNT_ENG_NAME + icon_state = "eng_budget" + +/obj/item/card/id/departmental_budget/sci + department_ID = ACCOUNT_SCI + department_name = ACCOUNT_SCI_NAME + icon_state = "sci_budget" + +/obj/item/card/id/departmental_budget/srv + department_ID = ACCOUNT_SRV + department_name = ACCOUNT_SRV_NAME + icon_state = "srv_budget" + +/obj/item/card/id/departmental_budget/sec + department_ID = ACCOUNT_SEC + department_name = ACCOUNT_SEC_NAME + icon_state = "sec_budget" diff --git a/modular_nova/modules/GAGS/greyscale_configs.dm b/modular_nova/modules/GAGS/greyscale_configs.dm new file mode 100644 index 00000000000000..9844d2cf466aaa --- /dev/null +++ b/modular_nova/modules/GAGS/greyscale_configs.dm @@ -0,0 +1,1536 @@ +/* +* HEAD +*/ + +// BERETS +/datum/greyscale_config/beret + name = "Beret" + icon_file = 'modular_nova/modules/GAGS/icons/beret.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/beret/beret.json' + +/datum/greyscale_config/beret/worn + name = "Beret (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/beret/beret_worn.json' + +/datum/greyscale_config/beret/worn/vox + name = "Beret (Worn, Vox)" + icon_file = 'modular_nova/modules/GAGS/icons/beret_vox.dmi' + +/datum/greyscale_config/beret/worn/teshari + name = "Beret (Worn, Teshari)" + icon_file = 'modular_nova/modules/GAGS/icons/beret_teshari.dmi' + +/datum/greyscale_config/beret_badge + name = "Badged Beret" + icon_file = 'modular_nova/modules/GAGS/icons/beret.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/beret/beret_badge.json' + +/datum/greyscale_config/beret_badge/worn + name = "Badged Beret (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/beret/beret_badge_worn.json' + +/datum/greyscale_config/beret_badge/worn/vox + name = "Badged Beret (Worn, Vox)" + icon_file = 'modular_nova/modules/GAGS/icons/beret_vox.dmi' + +/datum/greyscale_config/beret_badge/worn/teshari + name = "Badged Beret (Worn, Teshari)" + icon_file = 'modular_nova/modules/GAGS/icons/beret_teshari.dmi' + +/datum/greyscale_config/beret_badge_fancy + name = "Beret With Fancy Badge" + icon_file = 'modular_nova/modules/GAGS/icons/beret.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/beret/beret_badge_fancy.json' + +/datum/greyscale_config/beret_badge_fancy/worn + name = "Beret With Fancy Badge (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/beret/beret_badge_fancy_worn.json' + +/datum/greyscale_config/beret_badge_fancy/worn/vox + name = "Beret With Fancy Badge (Worn, Vox)" + icon_file = 'modular_nova/modules/GAGS/icons/beret_vox.dmi' + +/datum/greyscale_config/beret_badge_fancy/worn/teshari + name = "Beret With Fancy Badge (Worn, Teshari)" + icon_file = 'modular_nova/modules/GAGS/icons/beret_teshari.dmi' + + +//COWBOY +/datum/greyscale_config/cowboy_wide + name = "Wide Brimmed Hat" + icon_file = 'modular_nova/master_files/icons/obj/clothing/head/cowboy.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json' + +/datum/greyscale_config/cowboy_wide/worn + name = "Wide Brimmed Hat (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/head/cowboy.dmi' + +/datum/greyscale_config/cowboy_wide_feathered + name = "Wide Brimmed Feathered Hat" + icon_file = 'modular_nova/master_files/icons/obj/clothing/head/cowboy.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/head/cowboy/three_layer_hats.json' + +/datum/greyscale_config/cowboy_wide_feathered/worn + name = "Wide Brimmed Feathered Hat (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/head/cowboy.dmi' + +/datum/greyscale_config/cowboy_flat + name = "Flat Brimmed Hat" + icon_file = 'modular_nova/master_files/icons/obj/clothing/head/cowboy.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json' + +/datum/greyscale_config/cowboy_flat/worn + name = "Flat Brimmed Hat (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/head/cowboy.dmi' + +/datum/greyscale_config/cowboy_flat_cowl + name = "Flat Brimmed Hat with Cowl" + icon_file = 'modular_nova/master_files/icons/obj/clothing/head/cowboy.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/head/cowboy/three_layer_hats.json' + +/datum/greyscale_config/cowboy_flat_cowl/worn + name = "Flat Brimmed Hat with Cowl (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/head/cowboy.dmi' + +/datum/greyscale_config/cowboy_cattleman + name = "Cattleman Hat" + icon_file = 'modular_nova/master_files/icons/obj/clothing/head/cowboy.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json' + +/datum/greyscale_config/cowboy_cattleman/worn + name = "Cattleman Hat (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/head/cowboy.dmi' + +/datum/greyscale_config/cowboy_cattleman_wide + name = "Wide Brimmed Cattleman Hat" + icon_file = 'modular_nova/master_files/icons/obj/clothing/head/cowboy.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json' + +/datum/greyscale_config/cowboy_cattleman_wide/worn + name = "Wide Brimmed Cattleman Hat (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/head/cowboy.dmi' + +//MUSHROOM CAP + +/datum/greyscale_config/mushcap + name = "Mushroom Cap" + icon_file = 'modular_nova/modules/GAGS/icons/mushcap.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/mush_cap/mushcap.json' + +/datum/greyscale_config/mushcap/worn + name = "Mushroom Cap Worn" + json_config = 'modular_nova/modules/GAGS/json_configs/mush_cap/mushcap_worn.json' + +// FLATCAP + +/datum/greyscale_config/flatcap + name = "Flat Cap" + icon_file = 'modular_nova/modules/GAGS/icons/hats.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/flatcap/flatcap.json' + +/datum/greyscale_config/flatcap/worn + name = "Flat Cap (Worn)" + icon_file = 'modular_nova/modules/GAGS/icons/hats.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/flatcap/flatcap_worn.json' + +// FLOWER PIN + +/datum/greyscale_config/flowerpin + name = "Flower Pin" + icon_file = 'modular_nova/modules/GAGS/icons/hats.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/flowerpin/flowerpin.json' + +/datum/greyscale_config/flowerpin/worn + name = "Flower Pin (Worn)" + icon_file = 'modular_nova/modules/GAGS/icons/hats.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/flowerpin/flowerpin_worn.json' + +// Hood + +/datum/greyscale_config/standalone_hood + name = "Hood" + icon_file = 'modular_nova/modules/GAGS/icons/head/head.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/head/hood/hood.json' + +/datum/greyscale_config/standalone_hood/worn + name = "Hood (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/head/hood/hood_worn.json' + +/datum/greyscale_config/standalone_hood/worn/teshari + icon_file = 'modular_nova/modules/GAGS/icons/head/head_teshari.dmi' + +/datum/greyscale_config/standalone_hood/worn/newvox + icon_file = 'modular_nova/modules/GAGS/icons/head/head_newvox.dmi' + +/datum/greyscale_config/standalone_hood/worn/oldvox + icon_file = 'modular_nova/modules/GAGS/icons/head/head_oldvox.dmi' + +// CATEAR HEADPHONES + +/datum/greyscale_config/catear_headphone + name = "Cat-ear Headphones" + icon_file = 'modular_nova/modules/GAGS/icons/head/catear_headphone.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone.json' + +/datum/greyscale_config/catear_headphone/worn + name = "Cat-ear Headphones (Worn)" + icon_file = 'modular_nova/modules/GAGS/icons/head/catear_headphone.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn.json' + +/datum/greyscale_config/catear_headphone_inhand_left + name = "Cat-ear Headphones (Inhand Left)" + icon_file = 'modular_nova/modules/GAGS/icons/head/catear_headphone_inhand.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_left.json' + +/datum/greyscale_config/catear_headphone_inhand_right + name = "Cat-ear Headphones (Inhand Right)" + icon_file = 'modular_nova/modules/GAGS/icons/head/catear_headphone_inhand.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_right.json' + +//BOWS +/datum/greyscale_config/large_bow + name = "Large Bow" + icon_file = 'modular_nova/modules/GAGS/icons/bow.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/head/large_bow.json' + +/datum/greyscale_config/large_bow/worn + name = "Large Bow (Worn)" + icon_file = 'modular_nova/modules/GAGS/icons/bow_worn.dmi' + +/datum/greyscale_config/back_bow + name = "Back Bow" + icon_file = 'modular_nova/modules/GAGS/icons/bow.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/head/back_bow.json' + +/datum/greyscale_config/back_bow/worn + name = "Back Bow (Worn)" + icon_file = 'modular_nova/modules/GAGS/icons/bow_worn.dmi' + +/datum/greyscale_config/sweet_bow + name = "Sweet Bow" + icon_file = 'modular_nova/modules/GAGS/icons/bow.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/head/sweet_bow.json' + +/datum/greyscale_config/sweet_bow/worn + name = "Sweet Bow (Worn)" + icon_file = 'modular_nova/modules/GAGS/icons/bow_worn.dmi' + +/datum/greyscale_config/small_bow + name = "Small Bow" + icon_file = 'modular_nova/modules/GAGS/icons/bow.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/head/small_bow.json' + +/datum/greyscale_config/small_bow/worn + name = "Small Bow (Worn)" + icon_file = 'modular_nova/modules/GAGS/icons/bow_worn.dmi' + +/* +* MASKS +*/ + +// CLOWN +/datum/greyscale_config/clown_mask + name = "Colourable Clown Mask" + icon_file = 'modular_nova/modules/GAGS/icons/clown_mask.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/clown_mask/clown_mask.json' + +/datum/greyscale_config/clown_mask/worn + name = "Colourable Clown Mask (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/clown_mask/clown_mask_worn.json' + +// VAPE +/datum/greyscale_config/vape/worn/muzzled + name = "Vape (Worn, Muzzled)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/mask.dmi' + +// RESPIRATOR +/datum/greyscale_config/respirator + name = "Colourable Respirator" + icon_file = 'modular_nova/modules/GAGS/icons/masks.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/respirator/respirator.json' + +/datum/greyscale_config/respirator/worn + name = "Colourable Respirator (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/respirator/respirator_worn.json' + +/datum/greyscale_config/respirator/worn/snouted + name = "Colourable Respirator (Worn) (Snouted)" + icon_file = 'modular_nova/modules/GAGS/icons/masks_snout.dmi' + +/datum/greyscale_config/respirator/worn/better_vox + name = "Colourable Respirator (Worn) (Vox Primalis)" + icon_file = 'modular_nova/modules/GAGS/icons/masks_vox_better.dmi' + +/datum/greyscale_config/respirator/worn/vox + name = "Colourable Respirator (Worn) (Vox)" + icon_file = 'modular_nova/modules/GAGS/icons/masks_vox.dmi' + +/datum/greyscale_config/respirator/worn/teshari + name = "Colourable Respirator (Worn) (Teshari)" + icon_file = 'modular_nova/modules/GAGS/icons/masks_teshari.dmi' + +// STERILE +/datum/greyscale_config/sterile_mask + name = "Colourable Sterile Mask" + icon_file = 'modular_nova/modules/GAGS/icons/masks.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/sterile_mask/sterile.json' + +/datum/greyscale_config/sterile_mask/worn + name = "Colourable Sterile Mask (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/sterile_mask/sterile_worn.json' + +/datum/greyscale_config/sterile_mask/worn/snouted + name = "Colourable Sterile Mask (Worn) (Snouted)" + icon_file = 'modular_nova/modules/GAGS/icons/masks_snout.dmi' + +/datum/greyscale_config/sterile_mask/worn/better_vox + name = "Colourable Sterile Mask (Worn) (Vox Primalis)" + icon_file = 'modular_nova/modules/GAGS/icons/masks_vox_better.dmi' + +/datum/greyscale_config/sterile_mask/worn/vox + name = "Colourable Sterile Mask (Worn) (Vox)" + icon_file = 'modular_nova/modules/GAGS/icons/masks_vox.dmi' + +/datum/greyscale_config/sterile_mask/worn/teshari + name = "Colourable Sterile Mask (Worn) (Teshari)" + icon_file = 'modular_nova/modules/GAGS/icons/masks_teshari.dmi' + +// MASQUERADE MASKS +/datum/greyscale_config/masquerade_mask + name = "Masquerade Mask" + icon_file = 'modular_nova/modules/GAGS/icons/mask/masquerade_mask.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/masquerade_mask/masquerade_mask.json' + +/datum/greyscale_config/masquerade_mask/worn + name = "Masquerade Mask (Worn)" + icon_file = 'modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn.dmi' + +/datum/greyscale_config/masquerade_mask/worn/snouted + name = "Masquerade Mask (Worn) (Snouted)" + icon_file = 'modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_snouted.dmi' + +/datum/greyscale_config/masquerade_mask/worn/teshari + name = "Masquerade Mask (Worn) (Teshari)" + icon_file = 'modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_teshari.dmi' + +/datum/greyscale_config/masquerade_mask/worn/better_vox + name = "Masquerade Mask (Worn) (Vox Primalis)" + icon_file = 'modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_better_vox.dmi' + +/datum/greyscale_config/masquerade_mask/worn/vox + name = "Masquerade Mask (Worn) (Vox)" + icon_file = 'modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_vox.dmi' + +/* +* NECK +*/ + +// RANGER PONCHO +/datum/greyscale_config/ranger_poncho + name = "Ranger Poncho" + icon_file = 'modular_nova/modules/GAGS/icons/ranger_poncho.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/ranger_poncho/ranger_poncho.json' + +/datum/greyscale_config/ranger_poncho/worn + name = "Ranger Poncho Worn" + json_config = 'modular_nova/modules/GAGS/json_configs/ranger_poncho/ranger_poncho_worn.json' + +/datum/greyscale_config/ranger_poncho/worn/teshari + name = "Ranger Poncho (Worn, Teshari)" + icon_file = 'modular_nova/modules/GAGS/icons/ranger_poncho_teshari.dmi' + +// CLOAKS +/datum/greyscale_config/cloak + name = "Cloak" + icon_file = 'modular_nova/modules/GAGS/icons/cloak.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/cloak/cloak.json' + +/datum/greyscale_config/cloak/worn + name = "Cloak (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/cloak/cloak_worn.json' + +/datum/greyscale_config/cloak/veil + name = "Veil" + json_config = 'modular_nova/modules/GAGS/json_configs/cloak/veil.json' + +/datum/greyscale_config/cloak/veil/worn + name = "Veil (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/cloak/veil_worn.json' + +/datum/greyscale_config/cloak/boat + name = "Boatcloak" + json_config = 'modular_nova/modules/GAGS/json_configs/cloak/boat.json' + +/datum/greyscale_config/cloak/boat/worn + name = "Boatcloak (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/cloak/boat_worn.json' + +/datum/greyscale_config/cloak/shroud + name = "Shroud" + json_config = 'modular_nova/modules/GAGS/json_configs/cloak/shroud.json' + +/datum/greyscale_config/cloak/shroud/worn + name = "Shroud (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/cloak/shroud_worn.json' + +// Mantle + +/datum/greyscale_config/mantle + name = "Mantle" + icon_file = 'modular_nova/modules/GAGS/icons/neck/neck.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/neck/mantle/mantle.json' + +/datum/greyscale_config/mantle/worn + name = "Mantle (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/neck/mantle/mantle_worn.json' + +/datum/greyscale_config/mantle/worn/teshari + icon_file = 'modular_nova/modules/GAGS/icons/neck/neck_teshari.dmi' + +/datum/greyscale_config/mantle/worn/newvox + icon_file = 'modular_nova/modules/GAGS/icons/neck/neck_newvox.dmi' + +/datum/greyscale_config/mantle/worn/oldvox + icon_file = 'modular_nova/modules/GAGS/icons/neck/neck_oldvox.dmi' + +//CAPES + +/datum/greyscale_config/robe_cape + name = "Robe Cape" + icon_file = 'modular_nova/modules/GAGS/icons/cape.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/cloak/robe_cape.json' + +/datum/greyscale_config/robe_cape/worn + name = "Robe Cape (Worn)" + icon_file = 'modular_nova/modules/GAGS/icons/cape_worn.dmi' + +/datum/greyscale_config/long_cape + name = "Long Cape" + icon_file = 'modular_nova/modules/GAGS/icons/cape.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/cloak/long_cape.json' + +/datum/greyscale_config/long_cape/worn + name = "Long Cape (Worn)" + icon_file = 'modular_nova/modules/GAGS/icons/cape_worn.dmi' + +/datum/greyscale_config/wide_cape + name = "Wide Cape" + icon_file = 'modular_nova/modules/GAGS/icons/cape.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/cloak/wide_cape.json' + +/datum/greyscale_config/wide_cape/worn + name = "Wide Cape (Worn)" + icon_file = 'modular_nova/modules/GAGS/icons/cape_worn.dmi' + +// COLLARS + +/datum/greyscale_config/collar + name = "Collar" + icon_file = 'modular_nova/modules/GAGS/icons/collar.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/collar/bell.json' + +// Bell +/datum/greyscale_config/collar/bell + name = "Bell Collar" + json_config = 'modular_nova/modules/GAGS/json_configs/collar/bell.json' + +/datum/greyscale_config/collar/bell/worn + name = "Bell Collar (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/collar/bell_worn.json' + +// Choker +/datum/greyscale_config/collar/choker + name = "Choker" + json_config = 'modular_nova/modules/GAGS/json_configs/collar/choker.json' + +/datum/greyscale_config/collar/choker/worn + name = "Choker (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/collar/choker_worn.json' + +// Thin Choker +/datum/greyscale_config/collar/thinchoker + name = "Thin Choker" + json_config = 'modular_nova/modules/GAGS/json_configs/collar/thinchoker.json' + +/datum/greyscale_config/collar/thinchoker/worn + name = "Thin Choker (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/collar/thinchoker_worn.json' + +// Cow +/datum/greyscale_config/collar/cow + name = "Cowbell Collar" + json_config = 'modular_nova/modules/GAGS/json_configs/collar/cow.json' + +/datum/greyscale_config/collar/cow/worn + name = "Cowbell Collar (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/collar/cow_worn.json' + +// Cross +/datum/greyscale_config/collar/cross + name = "Cross Collar" + json_config = 'modular_nova/modules/GAGS/json_configs/collar/cross.json' + +/datum/greyscale_config/collar/cross/worn + name = "Cross Collar (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/collar/cross_worn.json' + +// Holo +/datum/greyscale_config/collar/holo + name = "Holo Collar" + json_config = 'modular_nova/modules/GAGS/json_configs/collar/holo.json' + +/datum/greyscale_config/collar/holo/worn + name = "Holo Collar (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/collar/holo_worn.json' + +// Leather +/datum/greyscale_config/collar/leather + name = "Leather Collar" + json_config = 'modular_nova/modules/GAGS/json_configs/collar/leather.json' + +/datum/greyscale_config/collar/leather/worn + name = "Leather Collar (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/collar/leather_worn.json' + +// Pet +/datum/greyscale_config/collar/pet + name = "Pet Collar" + json_config = 'modular_nova/modules/GAGS/json_configs/collar/pet.json' + +/datum/greyscale_config/collar/pet/worn + name = "Pet Collar (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/collar/pet_worn.json' + +// Spiked +/datum/greyscale_config/collar/spike + name = "Spiked Collar" + json_config = 'modular_nova/modules/GAGS/json_configs/collar/spike.json' + +/datum/greyscale_config/collar/spike/worn + name = "Spiked Collar (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/collar/spike_worn.json' + +//FACE SCARF +/datum/greyscale_config/face_scarf + name = "Face Scarf" + icon_file = 'modular_nova/modules/GAGS/icons/neck/face_scarf/face_scarf.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/neck/face_scarf.json' + +/datum/greyscale_config/face_scarf/worn + name = "Face Scarf (Worn)" + icon_file = 'modular_nova/modules/GAGS/icons/neck/face_scarf/face_scarf_worn.dmi' + +/datum/greyscale_config/face_scarf/worn/muzzled + name = "Face Scarf (Worn, Muzzled)" + icon_file = 'modular_nova/modules/GAGS/icons/neck/face_scarf/face_scarf_worn_muzzled.dmi' + +/* +* SUITS +*/ + +// Apron + +/datum/greyscale_config/apron + name = "Apron" + icon_file = 'modular_nova/modules/GAGS/icons/suit/suit.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/suits/apron/apron.json' + +/datum/greyscale_config/apron/worn + name = "Apron (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/suits/apron/apron_worn.json' + +/datum/greyscale_config/apron/worn/teshari + icon_file = 'modular_nova/modules/GAGS/icons/suit/suit_teshari.dmi' + +/datum/greyscale_config/apron/worn/newvox + icon_file = 'modular_nova/modules/GAGS/icons/suit/suit_newvox.dmi' + +/datum/greyscale_config/apron/worn/oldvox + icon_file = 'modular_nova/modules/GAGS/icons/suit/suit_oldvox.dmi' + +//Flannel Shirt + +/datum/greyscale_config/flannelgags + name = "Flannel Shirt" + icon_file = 'modular_nova/modules/GAGS/icons/suit.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/flannel/flannel.json' + +/datum/greyscale_config/flannelgags/worn + name = "Flannel Shirt (Worn)" + icon_file = 'modular_nova/modules/GAGS/icons/suit.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/flannel/flannel_worn.json' + + +// ARMOR + +/datum/greyscale_config/heck_suit/worn/digi + icon_file = 'modular_nova/master_files/icons/mob/clothing/suits/armor_digi.dmi' + +//Helmet pairs with the above suit +/datum/greyscale_config/heck_helmet/worn/snouted + icon_file = 'modular_nova/master_files/icons/mob/clothing/head/helmet_muzzled.dmi' + +// Bathrobes + +/datum/greyscale_config/bathrobe + name = "Bathrobe" + icon_file = 'modular_nova/modules/GAGS/icons/suit/suit.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/suits/bathrobe/bathrobe.json' + +/datum/greyscale_config/bathrobe/worn + name = "Bathrobe (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/suits/bathrobe/bathrobe_worn.json' + +/datum/greyscale_config/bathrobe/worn/teshari + icon_file = 'modular_nova/modules/GAGS/icons/suit/suit_teshari.dmi' + +/datum/greyscale_config/bathrobe/worn/newvox + icon_file = 'modular_nova/modules/GAGS/icons/suit/suit_newvox.dmi' + +/datum/greyscale_config/bathrobe/worn/oldvox + icon_file = 'modular_nova/modules/GAGS/icons/suit/suit_oldvox.dmi' + +// FANCY SUITS +/datum/greyscale_config/fancy_suit + name = "Fancy Suit" + icon_file = 'modular_nova/modules/GAGS/icons/fancy_suits.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/fancy_suits/fancy_suit.json' + +/datum/greyscale_config/fancy_suit/worn + name = "Fancy Suit (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/fancy_suits/fancy_suit_worn.json' + +/datum/greyscale_config/recolorable_suit + name = "Formal Suit" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/suits.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/fancy_suits/recolorable_suit.json' + +/datum/greyscale_config/recolorable_suit/worn + name = "Formal Suit (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits.dmi' + +/datum/greyscale_config/recolorable_suit/worn/digi + name = "Formal Suit (Worn, Digi)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi' + +/datum/greyscale_config/recolorable_suitskirt + name = "Formal Suitskirt" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/suits.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/fancy_suits/recolorable_suit.json' + +/datum/greyscale_config/recolorable_suitskirt/worn + name = "Formal Suitskirt (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits.dmi' + +/datum/greyscale_config/recolorable_suitskirt/worn/digi + name = "Formal Suitskirt (Worn, Digi)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi' + +// HOODIES +/datum/greyscale_config/hoodie + name = "Hoodie" + icon_file = 'modular_nova/modules/GAGS/icons/hoodie.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/hoodie/hoodie.json' + +/datum/greyscale_config/hoodie/worn + name = "Hoodie Worn" + json_config = 'modular_nova/modules/GAGS/json_configs/hoodie/hoodie_worn.json' + +/datum/greyscale_config/hoodie_trim + name = "Trimmed Hoodie" + icon_file = 'modular_nova/modules/GAGS/icons/hoodie.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/hoodie/hoodie_trim.json' + +/datum/greyscale_config/hoodie_trim/worn + name = "Trimmed Hoodie Worn" + json_config = 'modular_nova/modules/GAGS/json_configs/hoodie/hoodie_trim_worn.json' + +/datum/greyscale_config/hoodie_branded + name = "Branded Hoodie" + icon_file = 'modular_nova/modules/GAGS/icons/hoodie.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/hoodie/hoodie_branded.json' + +/datum/greyscale_config/hoodie_branded/worn + name = "Branded Hoodie Worn" + json_config = 'modular_nova/modules/GAGS/json_configs/hoodie/hoodie_branded_worn.json' + +// CARDIGAN + +/datum/greyscale_config/cardigan + name = "Cardigan" + icon_file = 'modular_nova/modules/GAGS/icons/suit.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/cardigan/cardigan.json' + +/datum/greyscale_config/cardigan/worn + name = "Cardigan (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/cardigan/cardigan_worn.json' + +// SWEATERS + +/datum/greyscale_config/cableknit_sweater + name = "Cableknit Sweater" + icon_file = 'modular_nova/modules/GAGS/icons/sweaters.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/sweater/sweater.json' + +/datum/greyscale_config/cableknit_sweater/worn + name = "Cableknit Sweater (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/sweater/sweater_worn.json' + +/datum/greyscale_config/warm_sweater + name = "Warm Sweater" + icon_file = 'modular_nova/modules/GAGS/icons/warm_sweater.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/sweater/warm_sweater.json' + +/datum/greyscale_config/warm_sweater/worn + name = "Warm Sweater (Worn)" + icon_file = 'modular_nova/modules/GAGS/icons/warm_sweater_worn.dmi' + +/datum/greyscale_config/heart_sweater + name = "Heart Sweater" + icon_file = 'modular_nova/modules/GAGS/icons/warm_sweater.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/sweater/heart_sweater.json' + +/datum/greyscale_config/heart_sweater/worn + name = "Heart Sweater (Worn)" + icon_file = 'modular_nova/modules/GAGS/icons/warm_sweater_worn.dmi' + +//Keyhole uses the same configs! + +// OVERALLS + +/datum/greyscale_config/overalls/worn/digi + name = "Overalls (Worn, Digi)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/suit_digi.dmi' + +/datum/greyscale_config/overalls/worn/vox + name = "Overalls (Worn, Vox)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/species/vox/suit.dmi' + +/datum/greyscale_config/overalls/worn/better_vox + name = "Overalls (Worn, Better Vox)" + icon_file = 'modular_nova/modules/better_vox/icons/clothing/suit.dmi' + +// URBAN COAT + +/datum/greyscale_config/urban_coat + name = "Urban Coat" + icon_file = 'modular_nova/modules/GAGS/icons/urban_coat.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/urban_coat/urban_coat.json' + +/datum/greyscale_config/urban_coat/worn + name = "Urban Coat (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/urban_coat/urban_coat_worn.json' + +// WINTER COAT + +/datum/greyscale_config/winter_coat + name = "Winter Coat" + icon_file = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/winter_coat/winter_coat.json' + +/datum/greyscale_config/winter_coat_worn + name = "Winter Coat (Worn)" + icon_file = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/winter_coat/winter_coat_worn.json' + +/datum/greyscale_config/winter_hood + name = "Winter Coat Hood" + icon_file = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/winter_coat/winter_hood.json' + +/datum/greyscale_config/winter_hood/worn + name = "Winter Coat Hood (Worn)" + icon_file = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi' + +/datum/greyscale_config/warm_coat + name = "Warm Coat" + icon_file = 'modular_nova/modules/GAGS/icons/warm_coat.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/winter_coat/warm_coat.json' + +/datum/greyscale_config/warm_coat/worn + name = "Warm Coat (Worn)" + icon_file = 'modular_nova/modules/GAGS/icons/warm_coat_worn.dmi' + +// LEATHER JACKET + +/datum/greyscale_config/leather_jacket + name = "Leather Jacket" + icon_file = 'modular_nova/modules/GAGS/icons/leather_jacket.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/leather_jacket/leather_jacket.json' + +/datum/greyscale_config/leather_jacket/worn + name = "Leather Jacket (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/leather_jacket/leather_jacket_worn.json' + +// DUSTER + +/datum/greyscale_config/duster + name = "Duster" + icon_file = 'modular_nova/modules/GAGS/icons/duster.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/duster/duster.json' + +/datum/greyscale_config/duster/worn + name = "Duster (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/duster/duster_worn.json' + +// PEACOAT + +/datum/greyscale_config/peacoat + name = "Peacoat" + icon_file = 'modular_nova/modules/GAGS/icons/peacoat.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/peacoat/peacoat.json' + +/datum/greyscale_config/peacoat/worn + name = "Peacoat (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/peacoat/peacoat_worn.json' + + +// VARSITY JACKET + +/datum/greyscale_config/varsity + name = "Varsity Jacket" + icon_file = 'modular_nova/modules/GAGS/icons/suit/suit.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/suits/varsity/varsity.json' + +/datum/greyscale_config/varsity/worn + name = "Varsity Jacket (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/suits/varsity/varsity_worn.json' + +// TAILORED JACKET + +/datum/greyscale_config/tailored_jacket + name = "Tailored Jacket" + icon_file = 'modular_nova/modules/GAGS/icons/suit/suit.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket.json' + +/datum/greyscale_config/tailored_jacket/worn + name = "Tailored Jacket (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket_worn.json' + +/datum/greyscale_config/tailored_short_jacket + name = "Tailored Short Jacket" + icon_file = 'modular_nova/modules/GAGS/icons/suit/suit.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket.json' + +/datum/greyscale_config/tailored_short_jacket/worn + name = "Tailored Short Jacket (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket_worn.json' + + +/* +* UNDER +*/ + + +// JUMPSUITS + +/datum/greyscale_config/jumpsuit/worn/digi + name = "Jumpsuit (Worn, Digi)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/color_digi.dmi' + +/datum/greyscale_config/jumpsuit/prison/worn/digi + name = "Prison Jumpsuit (Worn, Digi)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/color_digi.dmi' + +/datum/greyscale_config/jumpsuit/worn/monkey + name = "Jumpsuit (Worn) - Monkey" + icon_file = MONKEY_UNIFORM_FILE + json_config = 'modular_nova/modules/GAGS/json_configs/jumpsuit/jumpsuit_worn_monkey.json' + +/datum/greyscale_config/jumpsuit/prison/worn/monkey + name = "Prison Jumpsuit (Worn) - Monkey" + icon_file = MONKEY_UNIFORM_FILE + json_config = 'modular_nova/modules/GAGS/json_configs/jumpsuit/jumpsuit_prison_worn_monkey.json' + +/datum/greyscale_config/jumpsuit/worn/vox + name = "Jumpsuit (Worn, Vox)" + icon_file = 'modular_nova/modules/GAGS/icons/jumpsuit_vox.dmi' + +/datum/greyscale_config/jumpsuit/prison/worn/vox + name = "Prison Jumpsuit (Worn, Vox)" + icon_file = 'modular_nova/modules/GAGS/icons/jumpsuit_vox.dmi' + +/datum/greyscale_config/jumpsuit/worn/better_vox + name = "Jumpsuit (Worn, Better Vox)" + icon_file = 'modular_nova/modules/GAGS/icons/jumpsuit_better_vox.dmi' + +/datum/greyscale_config/jumpsuit/prison/worn/better_vox + name = "Prison Jumpsuit (Worn, Better Vox)" + icon_file = 'modular_nova/modules/GAGS/icons/jumpsuit_better_vox.dmi' + +/datum/greyscale_config/jumpsuit/worn/taur_snake + name = "Jumpsuit (Worn) - Naga" + icon_file = 'modular_nova/modules/GAGS/icons/jumpsuit_snake.dmi' + +/datum/greyscale_config/jumpsuit/prison/worn/taur_snake + name = "Prison Jumpsuit (Worn) - Naga" + icon_file = 'modular_nova/modules/GAGS/icons/jumpsuit_snake.dmi' + +/datum/greyscale_config/jumpsuit/worn/teshari + name = "Jumpsuit (Worn, Teshari)" + icon_file = 'modular_nova/modules/GAGS/icons/jumpsuit_teshari.dmi' + +/datum/greyscale_config/jumpsuit/prison/worn/teshari + name = "Prison Jumpsuit (Worn, Teshari)" + icon_file = 'modular_nova/modules/GAGS/icons/jumpsuit_teshari.dmi' + +// PANTS / SHORTS +//Note, these icons are now in master_files per TG's sorting. There's no reason to NOT have these pieces in master files now that they're sorted out. +//The rest will eventually join them - preferably with a cleaner method too instead of having to have unique configs for every single item's digi state. + +/datum/greyscale_config/slacks/worn/digi + name = "Slacks (Worn, Digi)" + icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE + +/datum/greyscale_config/jeans/worn/digi + name = "Jeans (Worn, Digi)" + icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE + +/datum/greyscale_config/shorts/worn/digi + name = "Shorts (Worn, Digi)" + icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE + +/datum/greyscale_config/jeanshorts/worn/digi + name = "Jean Shorts (Worn, Digi)" + icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE + +/datum/greyscale_config/shortershorts + name = "Shorter Shorts" + icon_file = 'modular_nova/modules/GAGS/icons/shorts_pants.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shortershorts.json' + +/datum/greyscale_config/shortershorts/worn + name = "Shorter Shorts (Worn)" + icon_file = 'modular_nova/modules/GAGS/icons/shorts_pants.dmi' + +/datum/greyscale_config/shortershorts/worn/digi + name = "Ripped Shorts (Worn, Digi)" + icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE + +/datum/greyscale_config/shorts_ripped + name = "Ripped Shorts" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shorts_ripped.json' + +/datum/greyscale_config/shorts_ripped/worn //TG will hopefully start having worn as a subtype, it means only needing 1 .json + name = "Ripped Shorts (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi' + +/datum/greyscale_config/shorts_ripped/worn/digi + name = "Ripped Shorts (Worn, Digi)" + icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE + +/datum/greyscale_config/shorts_ripped/worn/teshari + name = "Ripped Shorts (Worn, Teshari)" + icon_file = 'modular_nova/modules/GAGS/icons/teshari_uniform.dmi' + +/datum/greyscale_config/jeans_ripped + name = "Ripped Jeans" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jeans_ripped.json' + +/datum/greyscale_config/jeans_ripped/worn + name = "Ripped Jeans (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi' + +/datum/greyscale_config/jeans_ripped/worn/digi + name = "Ripped Jeans (Worn, Digi)" + icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE + +/datum/greyscale_config/yoga_pants + name = "Yoga Pants" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/yoga_pants.json' + +/datum/greyscale_config/yoga_pants/worn + name = "Yoga Pants (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi' + +/datum/greyscale_config/yoga_pants/worn/digi + name = "Yoga Pants (Worn, Digi)" + icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE + +// DRESSES / SKIRTS + +/datum/greyscale_config/plaidskirt/worn/digi + name = "Plaid Skirt (Worn, Digi)" + icon_file = SKIRTS_DRESSES_DIGIFILE + +/datum/greyscale_config/lone_skirt + name = "Skirt" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/lone_skirt.json' + +/datum/greyscale_config/lone_skirt/worn + name = "Skirt (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi' + +/datum/greyscale_config/turtleskirt_knit + name = "Cableknit Skirtleneck" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/turtleskirt_knit.json' + +/datum/greyscale_config/turtleskirt_knit/worn + name = "Cableknit Skirtleneck (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi' + +/datum/greyscale_config/jean_skirt + name = "Jean Skirt" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jean_skirt.json' + +/datum/greyscale_config/jean_skirt/worn + name = "Jean Skirt (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi' + +/datum/greyscale_config/jean_skirt/worn/digi + name = "Jean Skirt (Worn, Digi)" + icon_file = SKIRTS_DRESSES_DIGIFILE + +/datum/greyscale_config/short_dress + name = "Short Dress" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/short_dress.json' + +/datum/greyscale_config/short_dress/worn + name = "Short Dress (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi' + +/datum/greyscale_config/strapless_dress + name = "Strapless Dress" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/strapless_dress.json' + +/datum/greyscale_config/strapless_dress/worn + name = "Strapless Dress (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi' + +/datum/greyscale_config/pentagram_dress + name = "Pentagram Strapped Dress" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/pentagram_dress.json' + +/datum/greyscale_config/pentagram_dress/worn + name = "Pentagram Strapped Dress (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi' + +/datum/greyscale_config/plaidskirt/worn/teshari + name = "Plaid Skirt (Worn, Teshari)" + icon_file = 'modular_nova/modules/GAGS/icons/dressteshari.dmi' + +/datum/greyscale_config/sundress/worn/teshari + name = "Sundress (Worn, Teshari)" + icon_file = 'modular_nova/modules/GAGS/icons/dressteshari.dmi' + +/datum/greyscale_config/medium_skirt + name = "Medium Skirt" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/medium_skirt.json' + +/datum/greyscale_config/medium_skirt/worn + name = "Medium Skirt (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi' + +/datum/greyscale_config/long_skirt + name = "Long Skirt" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/long_skirt.json' + +/datum/greyscale_config/long_skirt/worn + name = "Long Skirt (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi' + +// KILT +// COSTUMES + +/datum/greyscale_config/buttondown_slacks/worn/digi + name = "Buttondown with Slacks (Worn, Digi)" + icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE + +/datum/greyscale_config/buttondown_shorts/worn/digi + name = "Buttondown with Shorts (Worn, Digi)" + icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE + +/datum/greyscale_config/football_suit/worn/digi + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi' + +/datum/greyscale_config/qipao + name = "Qipao" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/costume.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese.json' + +/datum/greyscale_config/qipao/worn + name = "Qipao (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume.dmi' + +/datum/greyscale_config/qipao/worn/digi + name = "Qipao (Worn, Digi)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi' + +/datum/greyscale_config/cheongsam + name = "Cheongsam" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/costume.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese.json' + +/datum/greyscale_config/cheongsam/worn + name = "Cheongsam (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume.dmi' + +/datum/greyscale_config/cheongsam/worn/digi + name = "Cheongsam (Worn, Digi)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi' + +/datum/greyscale_config/yukata + name = "Yukata" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/costume.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese.json' + +/datum/greyscale_config/yukata/worn + name = "Yukata (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume.dmi' + +/datum/greyscale_config/yukata/worn/digi + name = "Yukata (Worn, Digi)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi' + +/datum/greyscale_config/kilt + name = "Kilt" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/kilt/kilt.json' + +/datum/greyscale_config/kilt/worn + name = "Kilt (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi' + +/datum/greyscale_config/kilt/worn/digi + name = "Kilt (Worn, Digi)" + icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE + +/datum/greyscale_config/buttondown_vicvest + name = "Buttondown with Double-breasted Vest" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/costumes/buttondown_vicvest.json' + +/datum/greyscale_config/buttondown_vicvest/worn + name = "Buttondown with Double-breasted Vest (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi' + +/datum/greyscale_config/buttondown_vicvest/worn/digi + name = "Buttondown with Double-breasted Vest (Worn, Digi)" + icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE + +/datum/greyscale_config/chrimbo + name = "christmas_male" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/costume.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/costumes/chrimbo.json' + +/datum/greyscale_config/chrimbo/worn + name = "christmas_male (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume.dmi' + +/datum/greyscale_config/chrimbo/worn/digi + name = "christmas_male (Worn, Digi)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi' + +//GRAYSCALE MAID COSTUME + +/datum/greyscale_config/maid_neck_cover + name = "Maid Neck Cover" + icon_file = 'modular_nova/modules/GAGS/icons/maid_costume.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/costumes/maid_neck_cover.json' + +/datum/greyscale_config/maid_neck_cover/worn + name = "Maid Neck Cover (Worn)" + icon_file = 'modular_nova/modules/GAGS/icons/maid_costume_worn.dmi' + +/datum/greyscale_config/maid_arm_covers + name = "Maid Arm Covers" + icon_file = 'modular_nova/modules/GAGS/icons/maid_costume.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/costumes/maid_arm_covers.json' + +/datum/greyscale_config/maid_arm_covers/worn + name = "Maid Arm Covers (Worn)" + icon_file = 'modular_nova/modules/GAGS/icons/maid_costume_worn.dmi' + +/datum/greyscale_config/maid_costume + name = "Maid Costume" + icon_file = 'modular_nova/modules/GAGS/icons/maid_costume.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/costumes/maid_costume.json' + +/datum/greyscale_config/maid_costume/worn + name = "Maid Costume (Worn)" + icon_file = 'modular_nova/modules/GAGS/icons/maid_costume_worn.dmi' + +/datum/greyscale_config/maid_headband + name = "Maid Headband" + icon_file = 'modular_nova/modules/GAGS/icons/maid_costume.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/costumes/maid_headband.json' + +/datum/greyscale_config/maid_headband/worn + name = "Maid Headband (Worn)" + icon_file = 'modular_nova/modules/GAGS/icons/maid_costume_worn.dmi' + +/* +TREK +*/ + +/datum/greyscale_config/trek/worn/digi + name = "Trek Uniform (Worn, Digi)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/trek_digi.dmi' + +/* +* SHOES +*/ + +// SNEAKERS + +/datum/greyscale_config/sneakers/worn/digi + name = "Sneakers (Worn, Digi)" + icon_file = 'modular_nova/modules/GAGS/icons/sneakers_digi.dmi' + +/datum/greyscale_config/sneakers_orange/worn/digi + name = "Orange Sneakers (Worn, Digi)" + icon_file = 'modular_nova/modules/GAGS/icons/sneakers_digi.dmi' + +/datum/greyscale_config/sneakers/worn/vox + name = "Sneakers (Worn, Vox)" + icon_file = 'modular_nova/modules/GAGS/icons/sneakers_vox.dmi' + +/datum/greyscale_config/sneakers_orange/worn/vox + name = "Orange Sneakers (Worn, Vox)" + icon_file = 'modular_nova/modules/GAGS/icons/sneakers_vox.dmi' + +/datum/greyscale_config/sneakers/worn/teshari + name = "Sneakers (Worn, Teshari)" + icon_file = 'modular_nova/modules/GAGS/icons/sneakers_teshari.dmi' +digi +/datum/greyscale_config/sneakers_orange/worn/teshari + name = "Orange Sneakers (Worn, Teshari)" + icon_file = 'modular_nova/modules/GAGS/icons/sneakers_teshari.dmi' + +// Boots + +/datum/greyscale_config/boots + name = "Colorable Boots" + icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/shoes/boots/boots.json' + +/datum/greyscale_config/boots/worn + name = "Colorable Boots (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/shoes/boots/boots_worn.json' + +/datum/greyscale_config/boots/worn/digi + icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_digi.dmi' + +/datum/greyscale_config/boots/worn/teshari + icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_teshari.dmi' + +/datum/greyscale_config/boots/worn/newvox + icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_newvox.dmi' + +/datum/greyscale_config/boots/worn/oldvox + icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_oldvox.dmi' + +/datum/greyscale_config/boots/christmasboots + name = "christmas_boots" + icon_file = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/shoes/boots/christmas_boots.json' + +/datum/greyscale_config/boots/christmasboots/worn + name = "christmas_boots (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/feet.dmi' + +/datum/greyscale_config/boots/christmasboots/worn/digi + name = "christmas_boots (Worn, Digi)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/feet_digi.dmi' + +// Laceups + +/datum/greyscale_config/laceup + name = "Colorable Laceups" + icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/shoes/laceups/laceups.json' + +/datum/greyscale_config/laceup/worn + name = "Colorable Laceups (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/shoes/laceups/laceups_worn.json' + +/datum/greyscale_config/laceup/worn/digi + icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_digi.dmi' + +/datum/greyscale_config/laceup/worn/teshari + icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_teshari.dmi' + +/datum/greyscale_config/laceup/worn/newvox + icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_newvox.dmi' + +/datum/greyscale_config/laceup/worn/oldvox + icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_oldvox.dmi' + +// Sandals + +/datum/greyscale_config/sandals + name = "Colorable Sandals" + icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/shoes/sandals/sandals.json' + +/datum/greyscale_config/sandals/worn + name = "Colorable Sandals (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/shoes/sandals/sandals_worn.json' + +/datum/greyscale_config/sandals/worn/digi + icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_digi.dmi' + +/datum/greyscale_config/sandals/worn/teshari + icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_teshari.dmi' + +/datum/greyscale_config/sandals/worn/newvox + icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_newvox.dmi' + +/datum/greyscale_config/sandals/worn/oldvox + icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_oldvox.dmi' + +// WRAPS + +/datum/greyscale_config/clothwraps + name = "Cloth Wraps" + icon_file = 'modular_nova/modules/GAGS/icons/shoes.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/wraps/wraps.json' + +/datum/greyscale_config/clothwraps/worn + name = "Cloth Wraps (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/wraps/wraps_worn.json' + +/datum/greyscale_config/clothwraps/worn/digi + name = "Cloth Wraps (Worn, Digi)" + +/datum/greyscale_config/legwraps + name = "Leg Wraps" + icon_file = 'modular_nova/modules/GAGS/icons/shoes.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/wraps/legwraps.json' + +/datum/greyscale_config/legwraps/worn + name = "Leg Wraps (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/wraps/legwraps_worn.json' + +/datum/greyscale_config/legwraps/worn/digi + name = "Leg Wraps (Worn, Digi)" + json_config = 'modular_nova/modules/GAGS/json_configs/wraps/legwraps_worn_digi.json' + +/datum/greyscale_config/armwraps + name = "Cloth Arm Wraps" + icon_file = 'modular_nova/master_files/icons/donator/obj/clothing/gloves.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/arm_wraps/arm_wraps.json' + +/datum/greyscale_config/armwraps/worn + name = "Cloth Arm Wraps (Worn)" + icon_file = 'modular_nova/master_files/icons/donator/mob/clothing/hands.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/arm_wraps/arm_wraps_worn.json' + +// MISC SHOES + +/datum/greyscale_config/heels + name = "High Heels" + icon_file = 'modular_nova/modules/GAGS/icons/heels.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/shoes/heels/heels.json' + +/datum/greyscale_config/heels/worn + name = "High Heels (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/shoes/heels/heels_worn.json' + +/datum/greyscale_config/heels/worn/digi + name = "High Heels (Worn, Digi)" + json_config = 'modular_nova/modules/GAGS/json_configs/shoes/heels/heels_worn_digi.json' + +/datum/greyscale_config/fancyheels + name = "Fancy Heels" + icon_file = 'modular_nova/modules/GAGS/icons/fancyheels.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/shoes/fancyheels/fancyheels.json' + +/datum/greyscale_config/fancyheels/worn + name = "Fancy Heels (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn.json' + +/datum/greyscale_config/fancyheels/worn/digi + name = "Fancy Heels (Worn, Digi)" + json_config = 'modular_nova/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn_digi.json' + +// TESHARI FALLBACKS. + +/datum/greyscale_config/teshari + name = "Teshari Clothing" + icon_file = 'modular_nova/modules/GAGS/icons/teshari_fallbacks.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/under.json' + +/datum/greyscale_config/teshari/under + name = "Teshari Under" + json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/under.json' + +/datum/greyscale_config/teshari/under_skirt + name = "Teshari Skirt" + json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/under_skirt.json' + +/datum/greyscale_config/teshari/shoes + name = "Teshari Shoes" + json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/shoes.json' + +/datum/greyscale_config/teshari/gloves + name = "Teshari Gloves" + json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/gloves.json' + +/datum/greyscale_config/teshari/glasses + name = "Teshari Glasses" + json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/glasses.json' + +/datum/greyscale_config/teshari/coat + name = "Teshari Coat" + json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/coat.json' + +/datum/greyscale_config/teshari/armor + name = "Teshari Armor" + json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/armor.json' + +/datum/greyscale_config/teshari/backpack + name = "Teshari Backpack" + json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/backpack.json' + +/datum/greyscale_config/teshari/spacesuit + name = "Teshari Spacesuit" + json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/spacesuit.json' + +/datum/greyscale_config/teshari/cloak + name = "Teshari Cloak" + json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/cloak.json' + +/datum/greyscale_config/teshari/tie + name = "Teshari Tie" + json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/tie.json' + +/datum/greyscale_config/teshari/scarf + name = "Teshari Scarf" + json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/scarf.json' + +/datum/greyscale_config/teshari/modcontrol + name = "Teshari Modsuit" + json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/modcontrol.json' + +/datum/greyscale_config/teshari/hardsuit + name = "Teshari Hardsuit" + json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/hardsuit.json' + +/* +* CIN SURPLUS ARMOR +*/ + +// Helmet +/datum/greyscale_config/cin_surplus_helmet + name = "CIN Surplus Helmet" + icon_file = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/helmet.json' + +/datum/greyscale_config/cin_surplus_helmet/object + name = "CIN Surplus Helmet (OBJ)" + icon_file = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi' + +// Undersuit +/datum/greyscale_config/cin_surplus_undersuit + name = "CIN Surplus Undersuit" + icon_file = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/undersuit.json' + +/datum/greyscale_config/cin_surplus_undersuit/object + name = "CIN Surplus Undersuit (OBJ)" + icon_file = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi' + +/datum/greyscale_config/cin_surplus_undersuit/digi + icon_file = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_digi.dmi' + +// Backpack +/datum/greyscale_config/cin_surplus_backpack + name = "CIN Surplus Backpack" + icon_file = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/backpack.json' + +/datum/greyscale_config/cin_surplus_backpack/object + name = "CIN Surplus Backpack (OBJ)" + icon_file = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi' + +// Chestrig +/datum/greyscale_config/cin_surplus_chestrig + name = "CIN Surplus Chestrig" + icon_file = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/chestrig.json' + +/datum/greyscale_config/cin_surplus_chestrig/object + name = "CIN Surplus Chestrig (OBJ)" + icon_file = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi' + +/* +* ITEMS +*/ + +/datum/greyscale_config/id_card + name = "Colourable ID Card" + icon_file = 'modular_nova/modules/GAGS/icons/id_card.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/items/id_card.json' + +/datum/greyscale_config/wargame_hologram_projector + name = "Wargame Hologram Projector" + icon_file = 'modular_nova/modules/wargame_projectors/icons/projectors_and_holograms.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/wargame_holoprojector/projector.json' + +// Evil primitive catgirl clothing + +/datum/greyscale_config/primitive_catgirl_wraps + name = "Primitive Body Wraps" + icon_file = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps.json' + +/datum/greyscale_config/primitive_catgirl_wraps/worn + name = "Primitive Body Wraps (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps_worn.json' + +/datum/greyscale_config/primitive_catgirl_armwraps + name = "Arm Wraps" + icon_file = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps.json' + +/datum/greyscale_config/primitive_catgirl_armwraps/worn + name = "Arm Wraps (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps_worn.json' + +/datum/greyscale_config/primitive_catgirl_coat + name = "Primitive Fur Coat" + icon_file = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/coat.json' + +/datum/greyscale_config/primitive_catgirl_coat/worn + name = "Primitive Fur Coat (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/coat_worn.json' + +/datum/greyscale_config/primitive_catgirl_boots + name = "Primitive Winter Boots" + icon_file = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/boots.json' + +/datum/greyscale_config/primitive_catgirl_boots/worn + name = "Primitive Winter Boots (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/boots_worn.json' + +/datum/greyscale_config/primitive_catgirl_gaiter + name = "Neck Gaiter" + icon_file = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter.json' + +/datum/greyscale_config/primitive_catgirl_gaiter/worn + name = "Neck Gaiter (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter_worn.json' + +/datum/greyscale_config/primitive_catgirl_gauntlets + name = "Gauntlets" + icon_file = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets.json' + +/datum/greyscale_config/primitive_catgirl_gauntlets/worn + name = "Gauntlets (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets_worn.json' diff --git a/modular_skyrat/modules/GAGS/icons/beret.dmi b/modular_nova/modules/GAGS/icons/beret.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/beret.dmi rename to modular_nova/modules/GAGS/icons/beret.dmi diff --git a/modular_skyrat/modules/GAGS/icons/beret_teshari.dmi b/modular_nova/modules/GAGS/icons/beret_teshari.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/beret_teshari.dmi rename to modular_nova/modules/GAGS/icons/beret_teshari.dmi diff --git a/modular_skyrat/modules/GAGS/icons/beret_vox.dmi b/modular_nova/modules/GAGS/icons/beret_vox.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/beret_vox.dmi rename to modular_nova/modules/GAGS/icons/beret_vox.dmi diff --git a/modular_skyrat/modules/GAGS/icons/bow.dmi b/modular_nova/modules/GAGS/icons/bow.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/bow.dmi rename to modular_nova/modules/GAGS/icons/bow.dmi diff --git a/modular_skyrat/modules/GAGS/icons/bow_worn.dmi b/modular_nova/modules/GAGS/icons/bow_worn.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/bow_worn.dmi rename to modular_nova/modules/GAGS/icons/bow_worn.dmi diff --git a/modular_skyrat/modules/GAGS/icons/cape.dmi b/modular_nova/modules/GAGS/icons/cape.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/cape.dmi rename to modular_nova/modules/GAGS/icons/cape.dmi diff --git a/modular_skyrat/modules/GAGS/icons/cape_worn.dmi b/modular_nova/modules/GAGS/icons/cape_worn.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/cape_worn.dmi rename to modular_nova/modules/GAGS/icons/cape_worn.dmi diff --git a/modular_skyrat/modules/GAGS/icons/cloak.dmi b/modular_nova/modules/GAGS/icons/cloak.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/cloak.dmi rename to modular_nova/modules/GAGS/icons/cloak.dmi diff --git a/modular_skyrat/modules/GAGS/icons/clown_mask.dmi b/modular_nova/modules/GAGS/icons/clown_mask.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/clown_mask.dmi rename to modular_nova/modules/GAGS/icons/clown_mask.dmi diff --git a/modular_skyrat/modules/GAGS/icons/collar.dmi b/modular_nova/modules/GAGS/icons/collar.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/collar.dmi rename to modular_nova/modules/GAGS/icons/collar.dmi diff --git a/modular_skyrat/modules/GAGS/icons/dressteshari.dmi b/modular_nova/modules/GAGS/icons/dressteshari.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/dressteshari.dmi rename to modular_nova/modules/GAGS/icons/dressteshari.dmi diff --git a/modular_skyrat/modules/GAGS/icons/duster.dmi b/modular_nova/modules/GAGS/icons/duster.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/duster.dmi rename to modular_nova/modules/GAGS/icons/duster.dmi diff --git a/modular_skyrat/modules/GAGS/icons/fancy_suits.dmi b/modular_nova/modules/GAGS/icons/fancy_suits.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/fancy_suits.dmi rename to modular_nova/modules/GAGS/icons/fancy_suits.dmi diff --git a/modular_skyrat/modules/GAGS/icons/fancyheels.dmi b/modular_nova/modules/GAGS/icons/fancyheels.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/fancyheels.dmi rename to modular_nova/modules/GAGS/icons/fancyheels.dmi diff --git a/modular_skyrat/modules/GAGS/icons/hats.dmi b/modular_nova/modules/GAGS/icons/hats.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/hats.dmi rename to modular_nova/modules/GAGS/icons/hats.dmi diff --git a/modular_skyrat/modules/GAGS/icons/hawaiianshirt.dmi b/modular_nova/modules/GAGS/icons/hawaiianshirt.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/hawaiianshirt.dmi rename to modular_nova/modules/GAGS/icons/hawaiianshirt.dmi diff --git a/modular_skyrat/modules/GAGS/icons/head/catear_headphone.dmi b/modular_nova/modules/GAGS/icons/head/catear_headphone.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/head/catear_headphone.dmi rename to modular_nova/modules/GAGS/icons/head/catear_headphone.dmi diff --git a/modular_skyrat/modules/GAGS/icons/head/catear_headphone_inhand.dmi b/modular_nova/modules/GAGS/icons/head/catear_headphone_inhand.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/head/catear_headphone_inhand.dmi rename to modular_nova/modules/GAGS/icons/head/catear_headphone_inhand.dmi diff --git a/modular_skyrat/modules/GAGS/icons/head/head.dmi b/modular_nova/modules/GAGS/icons/head/head.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/head/head.dmi rename to modular_nova/modules/GAGS/icons/head/head.dmi diff --git a/modular_skyrat/modules/GAGS/icons/head/head_newvox.dmi b/modular_nova/modules/GAGS/icons/head/head_newvox.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/head/head_newvox.dmi rename to modular_nova/modules/GAGS/icons/head/head_newvox.dmi diff --git a/modular_skyrat/modules/GAGS/icons/head/head_oldvox.dmi b/modular_nova/modules/GAGS/icons/head/head_oldvox.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/head/head_oldvox.dmi rename to modular_nova/modules/GAGS/icons/head/head_oldvox.dmi diff --git a/modular_skyrat/modules/GAGS/icons/head/head_teshari.dmi b/modular_nova/modules/GAGS/icons/head/head_teshari.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/head/head_teshari.dmi rename to modular_nova/modules/GAGS/icons/head/head_teshari.dmi diff --git a/modular_skyrat/modules/GAGS/icons/heels.dmi b/modular_nova/modules/GAGS/icons/heels.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/heels.dmi rename to modular_nova/modules/GAGS/icons/heels.dmi diff --git a/modular_skyrat/modules/GAGS/icons/hoodie.dmi b/modular_nova/modules/GAGS/icons/hoodie.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/hoodie.dmi rename to modular_nova/modules/GAGS/icons/hoodie.dmi diff --git a/modular_skyrat/modules/GAGS/icons/id_card.dmi b/modular_nova/modules/GAGS/icons/id_card.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/id_card.dmi rename to modular_nova/modules/GAGS/icons/id_card.dmi diff --git a/modular_nova/modules/GAGS/icons/jumpsuit_better_vox.dmi b/modular_nova/modules/GAGS/icons/jumpsuit_better_vox.dmi new file mode 100644 index 00000000000000..d8ebca6325a8ae Binary files /dev/null and b/modular_nova/modules/GAGS/icons/jumpsuit_better_vox.dmi differ diff --git a/modular_skyrat/modules/GAGS/icons/jumpsuit_snake.dmi b/modular_nova/modules/GAGS/icons/jumpsuit_snake.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/jumpsuit_snake.dmi rename to modular_nova/modules/GAGS/icons/jumpsuit_snake.dmi diff --git a/modular_skyrat/modules/GAGS/icons/jumpsuit_teshari.dmi b/modular_nova/modules/GAGS/icons/jumpsuit_teshari.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/jumpsuit_teshari.dmi rename to modular_nova/modules/GAGS/icons/jumpsuit_teshari.dmi diff --git a/modular_skyrat/modules/GAGS/icons/jumpsuit_vox.dmi b/modular_nova/modules/GAGS/icons/jumpsuit_vox.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/jumpsuit_vox.dmi rename to modular_nova/modules/GAGS/icons/jumpsuit_vox.dmi diff --git a/modular_skyrat/modules/GAGS/icons/kilt.dmi b/modular_nova/modules/GAGS/icons/kilt.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/kilt.dmi rename to modular_nova/modules/GAGS/icons/kilt.dmi diff --git a/modular_skyrat/modules/GAGS/icons/leather_jacket.dmi b/modular_nova/modules/GAGS/icons/leather_jacket.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/leather_jacket.dmi rename to modular_nova/modules/GAGS/icons/leather_jacket.dmi diff --git a/modular_skyrat/modules/GAGS/icons/maid_costume.dmi b/modular_nova/modules/GAGS/icons/maid_costume.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/maid_costume.dmi rename to modular_nova/modules/GAGS/icons/maid_costume.dmi diff --git a/modular_skyrat/modules/GAGS/icons/maid_costume_worn.dmi b/modular_nova/modules/GAGS/icons/maid_costume_worn.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/maid_costume_worn.dmi rename to modular_nova/modules/GAGS/icons/maid_costume_worn.dmi diff --git a/modular_nova/modules/GAGS/icons/mask/masquerade_mask.dmi b/modular_nova/modules/GAGS/icons/mask/masquerade_mask.dmi new file mode 100644 index 00000000000000..6d80601a2be2ea Binary files /dev/null and b/modular_nova/modules/GAGS/icons/mask/masquerade_mask.dmi differ diff --git a/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn.dmi b/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn.dmi new file mode 100644 index 00000000000000..a080bb7d2e7393 Binary files /dev/null and b/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn.dmi differ diff --git a/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_better_vox.dmi b/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_better_vox.dmi new file mode 100644 index 00000000000000..58532e78ec84e5 Binary files /dev/null and b/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_better_vox.dmi differ diff --git a/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_snouted.dmi b/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_snouted.dmi new file mode 100644 index 00000000000000..39076d1e30d70f Binary files /dev/null and b/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_snouted.dmi differ diff --git a/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_teshari.dmi b/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_teshari.dmi new file mode 100644 index 00000000000000..694f600739b33f Binary files /dev/null and b/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_teshari.dmi differ diff --git a/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_vox.dmi b/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_vox.dmi new file mode 100644 index 00000000000000..720e1b04b685d1 Binary files /dev/null and b/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_vox.dmi differ diff --git a/modular_skyrat/modules/GAGS/icons/masks.dmi b/modular_nova/modules/GAGS/icons/masks.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/masks.dmi rename to modular_nova/modules/GAGS/icons/masks.dmi diff --git a/modular_skyrat/modules/GAGS/icons/masks_snout.dmi b/modular_nova/modules/GAGS/icons/masks_snout.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/masks_snout.dmi rename to modular_nova/modules/GAGS/icons/masks_snout.dmi diff --git a/modular_skyrat/modules/GAGS/icons/masks_teshari.dmi b/modular_nova/modules/GAGS/icons/masks_teshari.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/masks_teshari.dmi rename to modular_nova/modules/GAGS/icons/masks_teshari.dmi diff --git a/modular_skyrat/modules/GAGS/icons/masks_vox.dmi b/modular_nova/modules/GAGS/icons/masks_vox.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/masks_vox.dmi rename to modular_nova/modules/GAGS/icons/masks_vox.dmi diff --git a/modular_skyrat/modules/GAGS/icons/masks_vox_better.dmi b/modular_nova/modules/GAGS/icons/masks_vox_better.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/masks_vox_better.dmi rename to modular_nova/modules/GAGS/icons/masks_vox_better.dmi diff --git a/modular_skyrat/modules/GAGS/icons/mushcap.dmi b/modular_nova/modules/GAGS/icons/mushcap.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/mushcap.dmi rename to modular_nova/modules/GAGS/icons/mushcap.dmi diff --git a/modular_skyrat/modules/GAGS/icons/face_scarf.dmi b/modular_nova/modules/GAGS/icons/neck/face_scarf/face_scarf.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/face_scarf.dmi rename to modular_nova/modules/GAGS/icons/neck/face_scarf/face_scarf.dmi diff --git a/modular_skyrat/modules/GAGS/icons/face_scarf_worn.dmi b/modular_nova/modules/GAGS/icons/neck/face_scarf/face_scarf_worn.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/face_scarf_worn.dmi rename to modular_nova/modules/GAGS/icons/neck/face_scarf/face_scarf_worn.dmi diff --git a/modular_nova/modules/GAGS/icons/neck/face_scarf/face_scarf_worn_muzzled.dmi b/modular_nova/modules/GAGS/icons/neck/face_scarf/face_scarf_worn_muzzled.dmi new file mode 100644 index 00000000000000..60d2f63b9789ed Binary files /dev/null and b/modular_nova/modules/GAGS/icons/neck/face_scarf/face_scarf_worn_muzzled.dmi differ diff --git a/modular_skyrat/modules/GAGS/icons/neck/neck.dmi b/modular_nova/modules/GAGS/icons/neck/neck.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/neck/neck.dmi rename to modular_nova/modules/GAGS/icons/neck/neck.dmi diff --git a/modular_skyrat/modules/GAGS/icons/neck/neck_newvox.dmi b/modular_nova/modules/GAGS/icons/neck/neck_newvox.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/neck/neck_newvox.dmi rename to modular_nova/modules/GAGS/icons/neck/neck_newvox.dmi diff --git a/modular_skyrat/modules/GAGS/icons/neck/neck_oldvox.dmi b/modular_nova/modules/GAGS/icons/neck/neck_oldvox.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/neck/neck_oldvox.dmi rename to modular_nova/modules/GAGS/icons/neck/neck_oldvox.dmi diff --git a/modular_skyrat/modules/GAGS/icons/neck/neck_teshari.dmi b/modular_nova/modules/GAGS/icons/neck/neck_teshari.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/neck/neck_teshari.dmi rename to modular_nova/modules/GAGS/icons/neck/neck_teshari.dmi diff --git a/modular_skyrat/modules/GAGS/icons/peacoat.dmi b/modular_nova/modules/GAGS/icons/peacoat.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/peacoat.dmi rename to modular_nova/modules/GAGS/icons/peacoat.dmi diff --git a/modular_skyrat/modules/GAGS/icons/ranger_poncho.dmi b/modular_nova/modules/GAGS/icons/ranger_poncho.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/ranger_poncho.dmi rename to modular_nova/modules/GAGS/icons/ranger_poncho.dmi diff --git a/modular_skyrat/modules/GAGS/icons/ranger_poncho_teshari.dmi b/modular_nova/modules/GAGS/icons/ranger_poncho_teshari.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/ranger_poncho_teshari.dmi rename to modular_nova/modules/GAGS/icons/ranger_poncho_teshari.dmi diff --git a/modular_skyrat/modules/GAGS/icons/shoes.dmi b/modular_nova/modules/GAGS/icons/shoes.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/shoes.dmi rename to modular_nova/modules/GAGS/icons/shoes.dmi diff --git a/modular_skyrat/modules/GAGS/icons/shoes/shoes.dmi b/modular_nova/modules/GAGS/icons/shoes/shoes.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/shoes/shoes.dmi rename to modular_nova/modules/GAGS/icons/shoes/shoes.dmi diff --git a/modular_skyrat/modules/GAGS/icons/shoes/shoes_digi.dmi b/modular_nova/modules/GAGS/icons/shoes/shoes_digi.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/shoes/shoes_digi.dmi rename to modular_nova/modules/GAGS/icons/shoes/shoes_digi.dmi diff --git a/modular_skyrat/modules/GAGS/icons/shoes/shoes_newvox.dmi b/modular_nova/modules/GAGS/icons/shoes/shoes_newvox.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/shoes/shoes_newvox.dmi rename to modular_nova/modules/GAGS/icons/shoes/shoes_newvox.dmi diff --git a/modular_skyrat/modules/GAGS/icons/shoes/shoes_oldvox.dmi b/modular_nova/modules/GAGS/icons/shoes/shoes_oldvox.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/shoes/shoes_oldvox.dmi rename to modular_nova/modules/GAGS/icons/shoes/shoes_oldvox.dmi diff --git a/modular_skyrat/modules/GAGS/icons/shoes/shoes_teshari.dmi b/modular_nova/modules/GAGS/icons/shoes/shoes_teshari.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/shoes/shoes_teshari.dmi rename to modular_nova/modules/GAGS/icons/shoes/shoes_teshari.dmi diff --git a/modular_skyrat/modules/GAGS/icons/shorts_pants.dmi b/modular_nova/modules/GAGS/icons/shorts_pants.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/shorts_pants.dmi rename to modular_nova/modules/GAGS/icons/shorts_pants.dmi diff --git a/modular_skyrat/modules/GAGS/icons/sneakers_digi.dmi b/modular_nova/modules/GAGS/icons/sneakers_digi.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/sneakers_digi.dmi rename to modular_nova/modules/GAGS/icons/sneakers_digi.dmi diff --git a/modular_skyrat/modules/GAGS/icons/sneakers_teshari.dmi b/modular_nova/modules/GAGS/icons/sneakers_teshari.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/sneakers_teshari.dmi rename to modular_nova/modules/GAGS/icons/sneakers_teshari.dmi diff --git a/modular_skyrat/modules/GAGS/icons/sneakers_vox.dmi b/modular_nova/modules/GAGS/icons/sneakers_vox.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/sneakers_vox.dmi rename to modular_nova/modules/GAGS/icons/sneakers_vox.dmi diff --git a/modular_skyrat/modules/GAGS/icons/suit.dmi b/modular_nova/modules/GAGS/icons/suit.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/suit.dmi rename to modular_nova/modules/GAGS/icons/suit.dmi diff --git a/modular_skyrat/modules/GAGS/icons/suit/suit.dmi b/modular_nova/modules/GAGS/icons/suit/suit.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/suit/suit.dmi rename to modular_nova/modules/GAGS/icons/suit/suit.dmi diff --git a/modular_skyrat/modules/GAGS/icons/suit/suit_digi.dmi b/modular_nova/modules/GAGS/icons/suit/suit_digi.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/suit/suit_digi.dmi rename to modular_nova/modules/GAGS/icons/suit/suit_digi.dmi diff --git a/modular_skyrat/modules/GAGS/icons/suit/suit_newvox.dmi b/modular_nova/modules/GAGS/icons/suit/suit_newvox.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/suit/suit_newvox.dmi rename to modular_nova/modules/GAGS/icons/suit/suit_newvox.dmi diff --git a/modular_skyrat/modules/GAGS/icons/suit/suit_oldvox.dmi b/modular_nova/modules/GAGS/icons/suit/suit_oldvox.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/suit/suit_oldvox.dmi rename to modular_nova/modules/GAGS/icons/suit/suit_oldvox.dmi diff --git a/modular_skyrat/modules/GAGS/icons/suit/suit_teshari.dmi b/modular_nova/modules/GAGS/icons/suit/suit_teshari.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/suit/suit_teshari.dmi rename to modular_nova/modules/GAGS/icons/suit/suit_teshari.dmi diff --git a/modular_skyrat/modules/GAGS/icons/sweaters.dmi b/modular_nova/modules/GAGS/icons/sweaters.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/sweaters.dmi rename to modular_nova/modules/GAGS/icons/sweaters.dmi diff --git a/modular_skyrat/modules/GAGS/icons/teshari_fallbacks.dmi b/modular_nova/modules/GAGS/icons/teshari_fallbacks.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/teshari_fallbacks.dmi rename to modular_nova/modules/GAGS/icons/teshari_fallbacks.dmi diff --git a/modular_skyrat/modules/GAGS/icons/teshari_uniform.dmi b/modular_nova/modules/GAGS/icons/teshari_uniform.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/teshari_uniform.dmi rename to modular_nova/modules/GAGS/icons/teshari_uniform.dmi diff --git a/modular_skyrat/modules/GAGS/icons/urban_coat.dmi b/modular_nova/modules/GAGS/icons/urban_coat.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/urban_coat.dmi rename to modular_nova/modules/GAGS/icons/urban_coat.dmi diff --git a/modular_skyrat/modules/GAGS/icons/warm_coat.dmi b/modular_nova/modules/GAGS/icons/warm_coat.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/warm_coat.dmi rename to modular_nova/modules/GAGS/icons/warm_coat.dmi diff --git a/modular_skyrat/modules/GAGS/icons/warm_coat_worn.dmi b/modular_nova/modules/GAGS/icons/warm_coat_worn.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/warm_coat_worn.dmi rename to modular_nova/modules/GAGS/icons/warm_coat_worn.dmi diff --git a/modular_skyrat/modules/GAGS/icons/warm_sweater.dmi b/modular_nova/modules/GAGS/icons/warm_sweater.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/warm_sweater.dmi rename to modular_nova/modules/GAGS/icons/warm_sweater.dmi diff --git a/modular_skyrat/modules/GAGS/icons/warm_sweater_worn.dmi b/modular_nova/modules/GAGS/icons/warm_sweater_worn.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/warm_sweater_worn.dmi rename to modular_nova/modules/GAGS/icons/warm_sweater_worn.dmi diff --git a/modular_skyrat/modules/GAGS/json_configs/arm_wraps/arm_wraps.json b/modular_nova/modules/GAGS/json_configs/arm_wraps/arm_wraps.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/arm_wraps/arm_wraps.json rename to modular_nova/modules/GAGS/json_configs/arm_wraps/arm_wraps.json diff --git a/modular_skyrat/modules/GAGS/json_configs/arm_wraps/arm_wraps_worn.json b/modular_nova/modules/GAGS/json_configs/arm_wraps/arm_wraps_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/arm_wraps/arm_wraps_worn.json rename to modular_nova/modules/GAGS/json_configs/arm_wraps/arm_wraps_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/beret/beret.json b/modular_nova/modules/GAGS/json_configs/beret/beret.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/beret/beret.json rename to modular_nova/modules/GAGS/json_configs/beret/beret.json diff --git a/modular_skyrat/modules/GAGS/json_configs/beret/beret_badge.json b/modular_nova/modules/GAGS/json_configs/beret/beret_badge.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/beret/beret_badge.json rename to modular_nova/modules/GAGS/json_configs/beret/beret_badge.json diff --git a/modular_skyrat/modules/GAGS/json_configs/beret/beret_badge_fancy.json b/modular_nova/modules/GAGS/json_configs/beret/beret_badge_fancy.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/beret/beret_badge_fancy.json rename to modular_nova/modules/GAGS/json_configs/beret/beret_badge_fancy.json diff --git a/modular_skyrat/modules/GAGS/json_configs/beret/beret_badge_fancy_worn.json b/modular_nova/modules/GAGS/json_configs/beret/beret_badge_fancy_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/beret/beret_badge_fancy_worn.json rename to modular_nova/modules/GAGS/json_configs/beret/beret_badge_fancy_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/beret/beret_badge_worn.json b/modular_nova/modules/GAGS/json_configs/beret/beret_badge_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/beret/beret_badge_worn.json rename to modular_nova/modules/GAGS/json_configs/beret/beret_badge_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/beret/beret_worn.json b/modular_nova/modules/GAGS/json_configs/beret/beret_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/beret/beret_worn.json rename to modular_nova/modules/GAGS/json_configs/beret/beret_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/cardigan/cardigan.json b/modular_nova/modules/GAGS/json_configs/cardigan/cardigan.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/cardigan/cardigan.json rename to modular_nova/modules/GAGS/json_configs/cardigan/cardigan.json diff --git a/modular_skyrat/modules/GAGS/json_configs/cardigan/cardigan_worn.json b/modular_nova/modules/GAGS/json_configs/cardigan/cardigan_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/cardigan/cardigan_worn.json rename to modular_nova/modules/GAGS/json_configs/cardigan/cardigan_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/cloak/boat.json b/modular_nova/modules/GAGS/json_configs/cloak/boat.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/cloak/boat.json rename to modular_nova/modules/GAGS/json_configs/cloak/boat.json diff --git a/modular_skyrat/modules/GAGS/json_configs/cloak/boat_worn.json b/modular_nova/modules/GAGS/json_configs/cloak/boat_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/cloak/boat_worn.json rename to modular_nova/modules/GAGS/json_configs/cloak/boat_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/cloak/cloak.json b/modular_nova/modules/GAGS/json_configs/cloak/cloak.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/cloak/cloak.json rename to modular_nova/modules/GAGS/json_configs/cloak/cloak.json diff --git a/modular_skyrat/modules/GAGS/json_configs/cloak/cloak_worn.json b/modular_nova/modules/GAGS/json_configs/cloak/cloak_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/cloak/cloak_worn.json rename to modular_nova/modules/GAGS/json_configs/cloak/cloak_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/cloak/long_cape.json b/modular_nova/modules/GAGS/json_configs/cloak/long_cape.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/cloak/long_cape.json rename to modular_nova/modules/GAGS/json_configs/cloak/long_cape.json diff --git a/modular_skyrat/modules/GAGS/json_configs/cloak/robe_cape.json b/modular_nova/modules/GAGS/json_configs/cloak/robe_cape.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/cloak/robe_cape.json rename to modular_nova/modules/GAGS/json_configs/cloak/robe_cape.json diff --git a/modular_skyrat/modules/GAGS/json_configs/cloak/shroud.json b/modular_nova/modules/GAGS/json_configs/cloak/shroud.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/cloak/shroud.json rename to modular_nova/modules/GAGS/json_configs/cloak/shroud.json diff --git a/modular_skyrat/modules/GAGS/json_configs/cloak/shroud_worn.json b/modular_nova/modules/GAGS/json_configs/cloak/shroud_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/cloak/shroud_worn.json rename to modular_nova/modules/GAGS/json_configs/cloak/shroud_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/cloak/veil.json b/modular_nova/modules/GAGS/json_configs/cloak/veil.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/cloak/veil.json rename to modular_nova/modules/GAGS/json_configs/cloak/veil.json diff --git a/modular_skyrat/modules/GAGS/json_configs/cloak/veil_worn.json b/modular_nova/modules/GAGS/json_configs/cloak/veil_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/cloak/veil_worn.json rename to modular_nova/modules/GAGS/json_configs/cloak/veil_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/cloak/wide_cape.json b/modular_nova/modules/GAGS/json_configs/cloak/wide_cape.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/cloak/wide_cape.json rename to modular_nova/modules/GAGS/json_configs/cloak/wide_cape.json diff --git a/modular_skyrat/modules/GAGS/json_configs/clown_mask/clown_mask.json b/modular_nova/modules/GAGS/json_configs/clown_mask/clown_mask.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/clown_mask/clown_mask.json rename to modular_nova/modules/GAGS/json_configs/clown_mask/clown_mask.json diff --git a/modular_skyrat/modules/GAGS/json_configs/clown_mask/clown_mask_worn.json b/modular_nova/modules/GAGS/json_configs/clown_mask/clown_mask_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/clown_mask/clown_mask_worn.json rename to modular_nova/modules/GAGS/json_configs/clown_mask/clown_mask_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/bell.json b/modular_nova/modules/GAGS/json_configs/collar/bell.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/collar/bell.json rename to modular_nova/modules/GAGS/json_configs/collar/bell.json diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/bell_worn.json b/modular_nova/modules/GAGS/json_configs/collar/bell_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/collar/bell_worn.json rename to modular_nova/modules/GAGS/json_configs/collar/bell_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/choker.json b/modular_nova/modules/GAGS/json_configs/collar/choker.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/collar/choker.json rename to modular_nova/modules/GAGS/json_configs/collar/choker.json diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/choker_worn.json b/modular_nova/modules/GAGS/json_configs/collar/choker_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/collar/choker_worn.json rename to modular_nova/modules/GAGS/json_configs/collar/choker_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/cow.json b/modular_nova/modules/GAGS/json_configs/collar/cow.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/collar/cow.json rename to modular_nova/modules/GAGS/json_configs/collar/cow.json diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/cow_worn.json b/modular_nova/modules/GAGS/json_configs/collar/cow_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/collar/cow_worn.json rename to modular_nova/modules/GAGS/json_configs/collar/cow_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/cross.json b/modular_nova/modules/GAGS/json_configs/collar/cross.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/collar/cross.json rename to modular_nova/modules/GAGS/json_configs/collar/cross.json diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/cross_worn.json b/modular_nova/modules/GAGS/json_configs/collar/cross_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/collar/cross_worn.json rename to modular_nova/modules/GAGS/json_configs/collar/cross_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/holo.json b/modular_nova/modules/GAGS/json_configs/collar/holo.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/collar/holo.json rename to modular_nova/modules/GAGS/json_configs/collar/holo.json diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/holo_worn.json b/modular_nova/modules/GAGS/json_configs/collar/holo_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/collar/holo_worn.json rename to modular_nova/modules/GAGS/json_configs/collar/holo_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/leather.json b/modular_nova/modules/GAGS/json_configs/collar/leather.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/collar/leather.json rename to modular_nova/modules/GAGS/json_configs/collar/leather.json diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/leather_worn.json b/modular_nova/modules/GAGS/json_configs/collar/leather_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/collar/leather_worn.json rename to modular_nova/modules/GAGS/json_configs/collar/leather_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/pet.json b/modular_nova/modules/GAGS/json_configs/collar/pet.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/collar/pet.json rename to modular_nova/modules/GAGS/json_configs/collar/pet.json diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/pet_worn.json b/modular_nova/modules/GAGS/json_configs/collar/pet_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/collar/pet_worn.json rename to modular_nova/modules/GAGS/json_configs/collar/pet_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/spike.json b/modular_nova/modules/GAGS/json_configs/collar/spike.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/collar/spike.json rename to modular_nova/modules/GAGS/json_configs/collar/spike.json diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/spike_worn.json b/modular_nova/modules/GAGS/json_configs/collar/spike_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/collar/spike_worn.json rename to modular_nova/modules/GAGS/json_configs/collar/spike_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/thinchoker.json b/modular_nova/modules/GAGS/json_configs/collar/thinchoker.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/collar/thinchoker.json rename to modular_nova/modules/GAGS/json_configs/collar/thinchoker.json diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/thinchoker_worn.json b/modular_nova/modules/GAGS/json_configs/collar/thinchoker_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/collar/thinchoker_worn.json rename to modular_nova/modules/GAGS/json_configs/collar/thinchoker_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/costumes/buttondown_vicvest.json b/modular_nova/modules/GAGS/json_configs/costumes/buttondown_vicvest.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/costumes/buttondown_vicvest.json rename to modular_nova/modules/GAGS/json_configs/costumes/buttondown_vicvest.json diff --git a/modular_nova/modules/GAGS/json_configs/costumes/chrimbo.json b/modular_nova/modules/GAGS/json_configs/costumes/chrimbo.json new file mode 100644 index 00000000000000..046dac4fabe23a --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/costumes/chrimbo.json @@ -0,0 +1,41 @@ +{ + "christmas_male": [ + { + "type": "icon_state", + "icon_state": "christmas_male_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "christmas_male_trim", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "christmas_male_belt", + "blend_mode": "overlay" + } + ], + + "christmas_female": [ + { + "type": "icon_state", + "icon_state": "christmas_female_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "christmas_female_trim", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "christmas_female_belt", + "blend_mode": "overlay" + } + ] +} diff --git a/modular_skyrat/modules/GAGS/json_configs/costumes/lunar_japanese.json b/modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/costumes/lunar_japanese.json rename to modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese.json diff --git a/modular_skyrat/modules/GAGS/json_configs/costumes/maid_arm_covers.json b/modular_nova/modules/GAGS/json_configs/costumes/maid_arm_covers.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/costumes/maid_arm_covers.json rename to modular_nova/modules/GAGS/json_configs/costumes/maid_arm_covers.json diff --git a/modular_skyrat/modules/GAGS/json_configs/costumes/maid_costume.json b/modular_nova/modules/GAGS/json_configs/costumes/maid_costume.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/costumes/maid_costume.json rename to modular_nova/modules/GAGS/json_configs/costumes/maid_costume.json diff --git a/modular_skyrat/modules/GAGS/json_configs/costumes/maid_headband.json b/modular_nova/modules/GAGS/json_configs/costumes/maid_headband.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/costumes/maid_headband.json rename to modular_nova/modules/GAGS/json_configs/costumes/maid_headband.json diff --git a/modular_skyrat/modules/GAGS/json_configs/costumes/maid_neck_cover.json b/modular_nova/modules/GAGS/json_configs/costumes/maid_neck_cover.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/costumes/maid_neck_cover.json rename to modular_nova/modules/GAGS/json_configs/costumes/maid_neck_cover.json diff --git a/modular_skyrat/modules/GAGS/json_configs/duster/duster.json b/modular_nova/modules/GAGS/json_configs/duster/duster.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/duster/duster.json rename to modular_nova/modules/GAGS/json_configs/duster/duster.json diff --git a/modular_skyrat/modules/GAGS/json_configs/duster/duster_worn.json b/modular_nova/modules/GAGS/json_configs/duster/duster_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/duster/duster_worn.json rename to modular_nova/modules/GAGS/json_configs/duster/duster_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/fancy_suits/fancy_suit.json b/modular_nova/modules/GAGS/json_configs/fancy_suits/fancy_suit.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/fancy_suits/fancy_suit.json rename to modular_nova/modules/GAGS/json_configs/fancy_suits/fancy_suit.json diff --git a/modular_skyrat/modules/GAGS/json_configs/fancy_suits/fancy_suit_worn.json b/modular_nova/modules/GAGS/json_configs/fancy_suits/fancy_suit_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/fancy_suits/fancy_suit_worn.json rename to modular_nova/modules/GAGS/json_configs/fancy_suits/fancy_suit_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/fancy_suits/recolorable_suit.json b/modular_nova/modules/GAGS/json_configs/fancy_suits/recolorable_suit.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/fancy_suits/recolorable_suit.json rename to modular_nova/modules/GAGS/json_configs/fancy_suits/recolorable_suit.json diff --git a/modular_skyrat/modules/GAGS/json_configs/flannel/flannel.json b/modular_nova/modules/GAGS/json_configs/flannel/flannel.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/flannel/flannel.json rename to modular_nova/modules/GAGS/json_configs/flannel/flannel.json diff --git a/modular_skyrat/modules/GAGS/json_configs/flannel/flannel_worn.json b/modular_nova/modules/GAGS/json_configs/flannel/flannel_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/flannel/flannel_worn.json rename to modular_nova/modules/GAGS/json_configs/flannel/flannel_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/flatcap/flatcap.json b/modular_nova/modules/GAGS/json_configs/flatcap/flatcap.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/flatcap/flatcap.json rename to modular_nova/modules/GAGS/json_configs/flatcap/flatcap.json diff --git a/modular_skyrat/modules/GAGS/json_configs/flatcap/flatcap_worn.json b/modular_nova/modules/GAGS/json_configs/flatcap/flatcap_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/flatcap/flatcap_worn.json rename to modular_nova/modules/GAGS/json_configs/flatcap/flatcap_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/flowerpin/flowerpin.json b/modular_nova/modules/GAGS/json_configs/flowerpin/flowerpin.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/flowerpin/flowerpin.json rename to modular_nova/modules/GAGS/json_configs/flowerpin/flowerpin.json diff --git a/modular_skyrat/modules/GAGS/json_configs/flowerpin/flowerpin_worn.json b/modular_nova/modules/GAGS/json_configs/flowerpin/flowerpin_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/flowerpin/flowerpin_worn.json rename to modular_nova/modules/GAGS/json_configs/flowerpin/flowerpin_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/head/back_bow.json b/modular_nova/modules/GAGS/json_configs/head/back_bow.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/head/back_bow.json rename to modular_nova/modules/GAGS/json_configs/head/back_bow.json diff --git a/modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone.json b/modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone.json rename to modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone.json diff --git a/modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn.json b/modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn.json rename to modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_left.json b/modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_left.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_left.json rename to modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_left.json diff --git a/modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_right.json b/modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_right.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_right.json rename to modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_right.json diff --git a/modular_skyrat/modules/GAGS/json_configs/head/cowboy/three_layer_hats.json b/modular_nova/modules/GAGS/json_configs/head/cowboy/three_layer_hats.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/head/cowboy/three_layer_hats.json rename to modular_nova/modules/GAGS/json_configs/head/cowboy/three_layer_hats.json diff --git a/modular_skyrat/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json b/modular_nova/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json rename to modular_nova/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json diff --git a/modular_skyrat/modules/GAGS/json_configs/head/hood/hood.json b/modular_nova/modules/GAGS/json_configs/head/hood/hood.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/head/hood/hood.json rename to modular_nova/modules/GAGS/json_configs/head/hood/hood.json diff --git a/modular_skyrat/modules/GAGS/json_configs/head/hood/hood_worn.json b/modular_nova/modules/GAGS/json_configs/head/hood/hood_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/head/hood/hood_worn.json rename to modular_nova/modules/GAGS/json_configs/head/hood/hood_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/head/large_bow.json b/modular_nova/modules/GAGS/json_configs/head/large_bow.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/head/large_bow.json rename to modular_nova/modules/GAGS/json_configs/head/large_bow.json diff --git a/modular_skyrat/modules/GAGS/json_configs/head/small_bow.json b/modular_nova/modules/GAGS/json_configs/head/small_bow.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/head/small_bow.json rename to modular_nova/modules/GAGS/json_configs/head/small_bow.json diff --git a/modular_skyrat/modules/GAGS/json_configs/head/sweet_bow.json b/modular_nova/modules/GAGS/json_configs/head/sweet_bow.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/head/sweet_bow.json rename to modular_nova/modules/GAGS/json_configs/head/sweet_bow.json diff --git a/modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie.json b/modular_nova/modules/GAGS/json_configs/hoodie/hoodie.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie.json rename to modular_nova/modules/GAGS/json_configs/hoodie/hoodie.json diff --git a/modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_branded.json b/modular_nova/modules/GAGS/json_configs/hoodie/hoodie_branded.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_branded.json rename to modular_nova/modules/GAGS/json_configs/hoodie/hoodie_branded.json diff --git a/modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_branded_worn.json b/modular_nova/modules/GAGS/json_configs/hoodie/hoodie_branded_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_branded_worn.json rename to modular_nova/modules/GAGS/json_configs/hoodie/hoodie_branded_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_trim.json b/modular_nova/modules/GAGS/json_configs/hoodie/hoodie_trim.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_trim.json rename to modular_nova/modules/GAGS/json_configs/hoodie/hoodie_trim.json diff --git a/modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_trim_worn.json b/modular_nova/modules/GAGS/json_configs/hoodie/hoodie_trim_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_trim_worn.json rename to modular_nova/modules/GAGS/json_configs/hoodie/hoodie_trim_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_worn.json b/modular_nova/modules/GAGS/json_configs/hoodie/hoodie_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_worn.json rename to modular_nova/modules/GAGS/json_configs/hoodie/hoodie_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/items/id_card.json b/modular_nova/modules/GAGS/json_configs/items/id_card.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/items/id_card.json rename to modular_nova/modules/GAGS/json_configs/items/id_card.json diff --git a/modular_skyrat/modules/GAGS/json_configs/jumpsuit/jumpsuit_prison_worn_monkey.json b/modular_nova/modules/GAGS/json_configs/jumpsuit/jumpsuit_prison_worn_monkey.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/jumpsuit/jumpsuit_prison_worn_monkey.json rename to modular_nova/modules/GAGS/json_configs/jumpsuit/jumpsuit_prison_worn_monkey.json diff --git a/modular_skyrat/modules/GAGS/json_configs/jumpsuit/jumpsuit_worn_monkey.json b/modular_nova/modules/GAGS/json_configs/jumpsuit/jumpsuit_worn_monkey.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/jumpsuit/jumpsuit_worn_monkey.json rename to modular_nova/modules/GAGS/json_configs/jumpsuit/jumpsuit_worn_monkey.json diff --git a/modular_skyrat/modules/GAGS/json_configs/kilt/kilt.json b/modular_nova/modules/GAGS/json_configs/kilt/kilt.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/kilt/kilt.json rename to modular_nova/modules/GAGS/json_configs/kilt/kilt.json diff --git a/modular_skyrat/modules/GAGS/json_configs/leather_jacket/leather_jacket.json b/modular_nova/modules/GAGS/json_configs/leather_jacket/leather_jacket.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/leather_jacket/leather_jacket.json rename to modular_nova/modules/GAGS/json_configs/leather_jacket/leather_jacket.json diff --git a/modular_skyrat/modules/GAGS/json_configs/leather_jacket/leather_jacket_worn.json b/modular_nova/modules/GAGS/json_configs/leather_jacket/leather_jacket_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/leather_jacket/leather_jacket_worn.json rename to modular_nova/modules/GAGS/json_configs/leather_jacket/leather_jacket_worn.json diff --git a/modular_nova/modules/GAGS/json_configs/masquerade_mask/masquerade_mask.json b/modular_nova/modules/GAGS/json_configs/masquerade_mask/masquerade_mask.json new file mode 100644 index 00000000000000..0bbac3ac83291d --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/masquerade_mask/masquerade_mask.json @@ -0,0 +1,58 @@ +{ + "maskerade": [ + { + "type": "icon_state", + "icon_state": "mask", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ], + "maskerade_two_colors": [ + { + "type": "icon_state", + "icon_state": "mask_left", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "mask_right", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ], + "maskerade_feather": [ + { + "type": "icon_state", + "icon_state": "mask", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "mask_feather", + "blend_mode": "overlay", + "color_ids": [ 3 ] + } + ], + "maskerade_two_colors_feather": [ + { + "type": "icon_state", + "icon_state": "mask_left", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "mask_right", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "mask_feather", + "blend_mode": "overlay", + "color_ids": [ 3 ] + } + ] +} diff --git a/modular_skyrat/modules/GAGS/json_configs/mush_cap/mushcap.json b/modular_nova/modules/GAGS/json_configs/mush_cap/mushcap.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/mush_cap/mushcap.json rename to modular_nova/modules/GAGS/json_configs/mush_cap/mushcap.json diff --git a/modular_skyrat/modules/GAGS/json_configs/mush_cap/mushcap_worn.json b/modular_nova/modules/GAGS/json_configs/mush_cap/mushcap_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/mush_cap/mushcap_worn.json rename to modular_nova/modules/GAGS/json_configs/mush_cap/mushcap_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/neck/face_scarf.json b/modular_nova/modules/GAGS/json_configs/neck/face_scarf.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/neck/face_scarf.json rename to modular_nova/modules/GAGS/json_configs/neck/face_scarf.json diff --git a/modular_skyrat/modules/GAGS/json_configs/neck/mantle/mantle.json b/modular_nova/modules/GAGS/json_configs/neck/mantle/mantle.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/neck/mantle/mantle.json rename to modular_nova/modules/GAGS/json_configs/neck/mantle/mantle.json diff --git a/modular_skyrat/modules/GAGS/json_configs/neck/mantle/mantle_worn.json b/modular_nova/modules/GAGS/json_configs/neck/mantle/mantle_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/neck/mantle/mantle_worn.json rename to modular_nova/modules/GAGS/json_configs/neck/mantle/mantle_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/backpack.json b/modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/backpack.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/backpack.json rename to modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/backpack.json diff --git a/modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/chestrig.json b/modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/chestrig.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/chestrig.json rename to modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/chestrig.json diff --git a/modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/helmet.json b/modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/helmet.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/helmet.json rename to modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/helmet.json diff --git a/modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/undersuit.json b/modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/undersuit.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/undersuit.json rename to modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/undersuit.json diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jean_skirt.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jean_skirt.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jean_skirt.json rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jean_skirt.json diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jeans_ripped.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jeans_ripped.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jeans_ripped.json rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jeans_ripped.json diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/lone_skirt.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/lone_skirt.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/lone_skirt.json rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/lone_skirt.json diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/long_skirt.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/long_skirt.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/long_skirt.json rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/long_skirt.json diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/medium_skirt.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/medium_skirt.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/medium_skirt.json rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/medium_skirt.json diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/pentagram_dress.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/pentagram_dress.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/pentagram_dress.json rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/pentagram_dress.json diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/short_dress.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/short_dress.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/short_dress.json rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/short_dress.json diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shortershorts.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shortershorts.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shortershorts.json rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shortershorts.json diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shorts_ripped.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shorts_ripped.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shorts_ripped.json rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shorts_ripped.json diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/strapless_dress.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/strapless_dress.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/strapless_dress.json rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/strapless_dress.json diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/turtleskirt_knit.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/turtleskirt_knit.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/turtleskirt_knit.json rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/turtleskirt_knit.json diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/yoga_pants.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/yoga_pants.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/yoga_pants.json rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/yoga_pants.json diff --git a/modular_skyrat/modules/GAGS/json_configs/peacoat/peacoat.json b/modular_nova/modules/GAGS/json_configs/peacoat/peacoat.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/peacoat/peacoat.json rename to modular_nova/modules/GAGS/json_configs/peacoat/peacoat.json diff --git a/modular_skyrat/modules/GAGS/json_configs/peacoat/peacoat_worn.json b/modular_nova/modules/GAGS/json_configs/peacoat/peacoat_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/peacoat/peacoat_worn.json rename to modular_nova/modules/GAGS/json_configs/peacoat/peacoat_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps.json rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps.json diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps_worn.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps_worn.json rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps.json rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps.json diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps_worn.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps_worn.json rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/boots.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/boots.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/boots.json rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/boots.json diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/boots_worn.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/boots_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/boots_worn.json rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/boots_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/coat.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/coat.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/coat.json rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/coat.json diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/coat_worn.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/coat_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/coat_worn.json rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/coat_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter.json rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter.json diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter_worn.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter_worn.json rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets.json rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets.json diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets_worn.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets_worn.json rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/ranger_poncho/ranger_poncho.json b/modular_nova/modules/GAGS/json_configs/ranger_poncho/ranger_poncho.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/ranger_poncho/ranger_poncho.json rename to modular_nova/modules/GAGS/json_configs/ranger_poncho/ranger_poncho.json diff --git a/modular_skyrat/modules/GAGS/json_configs/ranger_poncho/ranger_poncho_worn.json b/modular_nova/modules/GAGS/json_configs/ranger_poncho/ranger_poncho_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/ranger_poncho/ranger_poncho_worn.json rename to modular_nova/modules/GAGS/json_configs/ranger_poncho/ranger_poncho_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/respirator/respirator.json b/modular_nova/modules/GAGS/json_configs/respirator/respirator.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/respirator/respirator.json rename to modular_nova/modules/GAGS/json_configs/respirator/respirator.json diff --git a/modular_skyrat/modules/GAGS/json_configs/respirator/respirator_worn.json b/modular_nova/modules/GAGS/json_configs/respirator/respirator_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/respirator/respirator_worn.json rename to modular_nova/modules/GAGS/json_configs/respirator/respirator_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/boots/boots.json b/modular_nova/modules/GAGS/json_configs/shoes/boots/boots.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/shoes/boots/boots.json rename to modular_nova/modules/GAGS/json_configs/shoes/boots/boots.json diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/boots/boots_worn.json b/modular_nova/modules/GAGS/json_configs/shoes/boots/boots_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/shoes/boots/boots_worn.json rename to modular_nova/modules/GAGS/json_configs/shoes/boots/boots_worn.json diff --git a/modular_nova/modules/GAGS/json_configs/shoes/boots/christmas_boots.json b/modular_nova/modules/GAGS/json_configs/shoes/boots/christmas_boots.json new file mode 100644 index 00000000000000..85c261d4fb4919 --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/shoes/boots/christmas_boots.json @@ -0,0 +1,16 @@ +{ + "christmas_boots": [ + { + "type": "icon_state", + "icon_state": "christmas_boots_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "christmas_boots_trim", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/fancyheels/fancyheels.json b/modular_nova/modules/GAGS/json_configs/shoes/fancyheels/fancyheels.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/shoes/fancyheels/fancyheels.json rename to modular_nova/modules/GAGS/json_configs/shoes/fancyheels/fancyheels.json diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn.json b/modular_nova/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn.json rename to modular_nova/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn_digi.json b/modular_nova/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn_digi.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn_digi.json rename to modular_nova/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn_digi.json diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/heels/heels.json b/modular_nova/modules/GAGS/json_configs/shoes/heels/heels.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/shoes/heels/heels.json rename to modular_nova/modules/GAGS/json_configs/shoes/heels/heels.json diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/heels/heels_worn.json b/modular_nova/modules/GAGS/json_configs/shoes/heels/heels_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/shoes/heels/heels_worn.json rename to modular_nova/modules/GAGS/json_configs/shoes/heels/heels_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/heels/heels_worn_digi.json b/modular_nova/modules/GAGS/json_configs/shoes/heels/heels_worn_digi.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/shoes/heels/heels_worn_digi.json rename to modular_nova/modules/GAGS/json_configs/shoes/heels/heels_worn_digi.json diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/laceups/laceups.json b/modular_nova/modules/GAGS/json_configs/shoes/laceups/laceups.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/shoes/laceups/laceups.json rename to modular_nova/modules/GAGS/json_configs/shoes/laceups/laceups.json diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/laceups/laceups_worn.json b/modular_nova/modules/GAGS/json_configs/shoes/laceups/laceups_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/shoes/laceups/laceups_worn.json rename to modular_nova/modules/GAGS/json_configs/shoes/laceups/laceups_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/sandals/sandals.json b/modular_nova/modules/GAGS/json_configs/shoes/sandals/sandals.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/shoes/sandals/sandals.json rename to modular_nova/modules/GAGS/json_configs/shoes/sandals/sandals.json diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/sandals/sandals_worn.json b/modular_nova/modules/GAGS/json_configs/shoes/sandals/sandals_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/shoes/sandals/sandals_worn.json rename to modular_nova/modules/GAGS/json_configs/shoes/sandals/sandals_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/sterile_mask/sterile.json b/modular_nova/modules/GAGS/json_configs/sterile_mask/sterile.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/sterile_mask/sterile.json rename to modular_nova/modules/GAGS/json_configs/sterile_mask/sterile.json diff --git a/modular_skyrat/modules/GAGS/json_configs/sterile_mask/sterile_worn.json b/modular_nova/modules/GAGS/json_configs/sterile_mask/sterile_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/sterile_mask/sterile_worn.json rename to modular_nova/modules/GAGS/json_configs/sterile_mask/sterile_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/suits/apron/apron.json b/modular_nova/modules/GAGS/json_configs/suits/apron/apron.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/suits/apron/apron.json rename to modular_nova/modules/GAGS/json_configs/suits/apron/apron.json diff --git a/modular_skyrat/modules/GAGS/json_configs/suits/apron/apron_worn.json b/modular_nova/modules/GAGS/json_configs/suits/apron/apron_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/suits/apron/apron_worn.json rename to modular_nova/modules/GAGS/json_configs/suits/apron/apron_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/suits/bathrobe/bathrobe.json b/modular_nova/modules/GAGS/json_configs/suits/bathrobe/bathrobe.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/suits/bathrobe/bathrobe.json rename to modular_nova/modules/GAGS/json_configs/suits/bathrobe/bathrobe.json diff --git a/modular_skyrat/modules/GAGS/json_configs/suits/bathrobe/bathrobe_worn.json b/modular_nova/modules/GAGS/json_configs/suits/bathrobe/bathrobe_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/suits/bathrobe/bathrobe_worn.json rename to modular_nova/modules/GAGS/json_configs/suits/bathrobe/bathrobe_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket.json b/modular_nova/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket.json rename to modular_nova/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket.json diff --git a/modular_skyrat/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket_worn.json b/modular_nova/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket_worn.json rename to modular_nova/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket.json b/modular_nova/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket.json rename to modular_nova/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket.json diff --git a/modular_skyrat/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket_worn.json b/modular_nova/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket_worn.json rename to modular_nova/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/suits/varsity/varsity.json b/modular_nova/modules/GAGS/json_configs/suits/varsity/varsity.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/suits/varsity/varsity.json rename to modular_nova/modules/GAGS/json_configs/suits/varsity/varsity.json diff --git a/modular_skyrat/modules/GAGS/json_configs/suits/varsity/varsity_worn.json b/modular_nova/modules/GAGS/json_configs/suits/varsity/varsity_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/suits/varsity/varsity_worn.json rename to modular_nova/modules/GAGS/json_configs/suits/varsity/varsity_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/sweater/heart_sweater.json b/modular_nova/modules/GAGS/json_configs/sweater/heart_sweater.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/sweater/heart_sweater.json rename to modular_nova/modules/GAGS/json_configs/sweater/heart_sweater.json diff --git a/modular_skyrat/modules/GAGS/json_configs/sweater/sweater.json b/modular_nova/modules/GAGS/json_configs/sweater/sweater.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/sweater/sweater.json rename to modular_nova/modules/GAGS/json_configs/sweater/sweater.json diff --git a/modular_skyrat/modules/GAGS/json_configs/sweater/sweater_worn.json b/modular_nova/modules/GAGS/json_configs/sweater/sweater_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/sweater/sweater_worn.json rename to modular_nova/modules/GAGS/json_configs/sweater/sweater_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/sweater/warm_sweater.json b/modular_nova/modules/GAGS/json_configs/sweater/warm_sweater.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/sweater/warm_sweater.json rename to modular_nova/modules/GAGS/json_configs/sweater/warm_sweater.json diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/armor.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/armor.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/armor.json rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/armor.json diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/backpack.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/backpack.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/backpack.json rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/backpack.json diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/cloak.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/cloak.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/cloak.json rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/cloak.json diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/coat.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/coat.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/coat.json rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/coat.json diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/glasses.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/glasses.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/glasses.json rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/glasses.json diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/gloves.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/gloves.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/gloves.json rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/gloves.json diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/hardsuit.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/hardsuit.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/hardsuit.json rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/hardsuit.json diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/modcontrol.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/modcontrol.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/modcontrol.json rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/modcontrol.json diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/scarf.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/scarf.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/scarf.json rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/scarf.json diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/shoes.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/shoes.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/shoes.json rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/shoes.json diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/spacesuit.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/spacesuit.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/spacesuit.json rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/spacesuit.json diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/tie.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/tie.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/tie.json rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/tie.json diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/under.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/under.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/under.json rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/under.json diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/under_skirt.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/under_skirt.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/under_skirt.json rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/under_skirt.json diff --git a/modular_skyrat/modules/GAGS/json_configs/urban_coat/urban_coat.json b/modular_nova/modules/GAGS/json_configs/urban_coat/urban_coat.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/urban_coat/urban_coat.json rename to modular_nova/modules/GAGS/json_configs/urban_coat/urban_coat.json diff --git a/modular_skyrat/modules/GAGS/json_configs/urban_coat/urban_coat_worn.json b/modular_nova/modules/GAGS/json_configs/urban_coat/urban_coat_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/urban_coat/urban_coat_worn.json rename to modular_nova/modules/GAGS/json_configs/urban_coat/urban_coat_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/wargame_holoprojector/projector.json b/modular_nova/modules/GAGS/json_configs/wargame_holoprojector/projector.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/wargame_holoprojector/projector.json rename to modular_nova/modules/GAGS/json_configs/wargame_holoprojector/projector.json diff --git a/modular_skyrat/modules/GAGS/json_configs/winter_coat/warm_coat.json b/modular_nova/modules/GAGS/json_configs/winter_coat/warm_coat.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/winter_coat/warm_coat.json rename to modular_nova/modules/GAGS/json_configs/winter_coat/warm_coat.json diff --git a/modular_skyrat/modules/GAGS/json_configs/winter_coat/winter_coat.json b/modular_nova/modules/GAGS/json_configs/winter_coat/winter_coat.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/winter_coat/winter_coat.json rename to modular_nova/modules/GAGS/json_configs/winter_coat/winter_coat.json diff --git a/modular_skyrat/modules/GAGS/json_configs/winter_coat/winter_coat_worn.json b/modular_nova/modules/GAGS/json_configs/winter_coat/winter_coat_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/winter_coat/winter_coat_worn.json rename to modular_nova/modules/GAGS/json_configs/winter_coat/winter_coat_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/winter_coat/winter_hood.json b/modular_nova/modules/GAGS/json_configs/winter_coat/winter_hood.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/winter_coat/winter_hood.json rename to modular_nova/modules/GAGS/json_configs/winter_coat/winter_hood.json diff --git a/modular_skyrat/modules/GAGS/json_configs/wraps/legwraps.json b/modular_nova/modules/GAGS/json_configs/wraps/legwraps.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/wraps/legwraps.json rename to modular_nova/modules/GAGS/json_configs/wraps/legwraps.json diff --git a/modular_skyrat/modules/GAGS/json_configs/wraps/legwraps_worn.json b/modular_nova/modules/GAGS/json_configs/wraps/legwraps_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/wraps/legwraps_worn.json rename to modular_nova/modules/GAGS/json_configs/wraps/legwraps_worn.json diff --git a/modular_skyrat/modules/GAGS/json_configs/wraps/legwraps_worn_digi.json b/modular_nova/modules/GAGS/json_configs/wraps/legwraps_worn_digi.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/wraps/legwraps_worn_digi.json rename to modular_nova/modules/GAGS/json_configs/wraps/legwraps_worn_digi.json diff --git a/modular_skyrat/modules/GAGS/json_configs/wraps/wraps.json b/modular_nova/modules/GAGS/json_configs/wraps/wraps.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/wraps/wraps.json rename to modular_nova/modules/GAGS/json_configs/wraps/wraps.json diff --git a/modular_skyrat/modules/GAGS/json_configs/wraps/wraps_worn.json b/modular_nova/modules/GAGS/json_configs/wraps/wraps_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/json_configs/wraps/wraps_worn.json rename to modular_nova/modules/GAGS/json_configs/wraps/wraps_worn.json diff --git a/modular_nova/modules/GAGS/nsfw/greyscale_configs.dm b/modular_nova/modules/GAGS/nsfw/greyscale_configs.dm new file mode 100644 index 00000000000000..9af24b9b2ec4d1 --- /dev/null +++ b/modular_nova/modules/GAGS/nsfw/greyscale_configs.dm @@ -0,0 +1,215 @@ +/* +* NSFW GREYSCALE CONFIGS TO GO IN HERE +*/ + +// MASKS + +/datum/greyscale_config/ballgag + name = "Ball Gag" + icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_masks.dmi' + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag.json' + +/datum/greyscale_config/ballgag/worn + name = "Ball Gag (Worn)" + icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi' + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag_worn.json' + +/datum/greyscale_config/ballgag/left_hand + name = "Ball Gag (Inhand, Left)" + icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_left.json' + +/datum/greyscale_config/ballgag/right_hand + name = "Ball Gag (Inhand, Right)" + icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_right.json' + +/datum/greyscale_config/ballgag/choking_small + name = "Choke Gag (Small)" + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/mask/choking_small.json' + +/datum/greyscale_config/ballgag/choking_medium + name = "Choke Gag (Medium)" + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/mask/choking_medium.json' + +/datum/greyscale_config/ballgag/choking_large + name = "Choke Gag (Large)" + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/mask/choking_large.json' + +//shibari stand + +/datum/greyscale_config/shibari_stand + name = "Shibari Stand" + icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi' + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/structures/shibari_stand.json' + +/datum/greyscale_config/shibari_stand_item + name = "Shibari Stand (Item)" + icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi' + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_stand_item.json' + +/datum/greyscale_config/shibari_stand_ropes + name = "Shibari Stand (Rope Overlays)" + icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi' + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/structures/shibari_stand_ropes.json' + +//shibari + +/datum/greyscale_config/shibari_rope + name = "Shibari Rope" + icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/items/shibari.json' + +/datum/greyscale_config/shibari_rope_inhand_left + name = "Shibari Rope (Inhand, Left)" + icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_inhands.json' + +/datum/greyscale_config/shibari_rope_inhand_right + name = "Shibari Rope (Inhand, Right)" + icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_inhands.json' + +/datum/greyscale_config/shibari_rope/med + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_med.json' + +/datum/greyscale_config/shibari_rope/high + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_high.json' + +/datum/greyscale_config/shibari + name = "Shibari" + icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi' + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json' + +/datum/greyscale_config/shibari/worn + name = "Shibari (Worn)" + icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi' + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json' + +/datum/greyscale_config/shibari/worn/digi + name = "Shibari (Worn, Digi)" + icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-digi.dmi' + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json' + +/datum/greyscale_config/shibari/worn/taur_snake + name = "Shibari (Worn, Taur Snake)" + icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-snake.dmi' + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json' + +/datum/greyscale_config/shibari/worn/taur_paw + name = "Shibari (Worn, Taur Paw)" + icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-paw.dmi' + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json' + +/datum/greyscale_config/shibari/worn/taur_hoof + name = "Shibari (Worn, Taur Hoof)" + icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-hoof.dmi' + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json' + +//body + +/datum/greyscale_config/shibari/body + name = "Shibari Body" + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json' + +/datum/greyscale_config/shibari/body/worn + name = "Shibari Body (Worn)" + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json' + +/datum/greyscale_config/shibari/body/worn/digi + name = "Shibari Body (Worn, Digi)" + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json' + +/datum/greyscale_config/shibari/body/worn/taur_snake + name = "Shibari Body (Worn, Taur Snake)" + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json' + +/datum/greyscale_config/shibari/body/worn/taur_paw + name = "Shibari Body (Worn, Taur Paw)" + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json' + +/datum/greyscale_config/shibari/body/worn/taur_hoof + name = "Shibari Body (Worn, Taur Hoof)" + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json' + +//groin + +/datum/greyscale_config/shibari/groin + name = "Shibari Groin" + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/groin.json' + +/datum/greyscale_config/shibari/groin/worn + name = "Shibari Groin (Worn)" + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/groin.json' + +/datum/greyscale_config/shibari/groin/worn/digi + name = "Shibari Groin (Worn, Digi)" + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/groin.json' + +/datum/greyscale_config/shibari/groin/worn/taur_snake + name = "Shibari Groin (Worn, Taur Snake)" + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/groin.json' + +/datum/greyscale_config/shibari/groin/worn/taur_paw + name = "Shibari Groin (Worn, Taur Paw)" + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/groin.json' + +/datum/greyscale_config/shibari/groin/worn/taur_hoof + name = "Shibari Groin (Worn, Taur Hoof)" + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/groin.json' + +//fullbody + +/datum/greyscale_config/shibari/fullbody + name = "Shibari Fullbody" + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/fullbody.json' + +/datum/greyscale_config/shibari/worn/fullbody + name = "Shibari Fullbody (Worn)" + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/fullbody.json' + +/datum/greyscale_config/shibari/fullbody/worn/digi + name = "Shibari Fullbody (Worn, Digi)" + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/fullbody.json' + +/datum/greyscale_config/shibari/fullbody/worn/taur_snake + name = "Shibari Fullbody (Worn, Taur Snake)" + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/fullbody.json' + +/datum/greyscale_config/shibari/fullbody/worn/taur_paw + name = "Shibari Fullbody (Worn, Taur Paw)" + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/fullbody.json' + +/datum/greyscale_config/shibari/fullbody/worn/taur_hoof + name = "Shibari Fullbody (Worn, Taur Hoof)" + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/fullbody.json' + +//hands + +/datum/greyscale_config/shibari/hands + name = "Shibari Hands" + icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi' + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/hands.json' + +/datum/greyscale_config/shibari/hands/worn + name = "Shibari Hands (Worn)" + icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi' + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/hands.json' + +//legs + +/datum/greyscale_config/shibari/legs + name = "Shibari Legs" + icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi' + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/legs.json' + +/datum/greyscale_config/shibari/legs/worn + name = "Shibari Legs (Worn)" + icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi' + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/legs.json' + +/datum/greyscale_config/shibari/legs/worn/digi + name = "Shibari Legs Digi (Worn, Digi)" + icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi' + json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/legs.json' + diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json b/modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json similarity index 100% rename from modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json rename to modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/fullbody.json b/modular_nova/modules/GAGS/nsfw/json_configs/clothes/fullbody.json similarity index 100% rename from modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/fullbody.json rename to modular_nova/modules/GAGS/nsfw/json_configs/clothes/fullbody.json diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/groin.json b/modular_nova/modules/GAGS/nsfw/json_configs/clothes/groin.json similarity index 100% rename from modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/groin.json rename to modular_nova/modules/GAGS/nsfw/json_configs/clothes/groin.json diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/hands.json b/modular_nova/modules/GAGS/nsfw/json_configs/clothes/hands.json similarity index 100% rename from modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/hands.json rename to modular_nova/modules/GAGS/nsfw/json_configs/clothes/hands.json diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/legs.json b/modular_nova/modules/GAGS/nsfw/json_configs/clothes/legs.json similarity index 100% rename from modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/legs.json rename to modular_nova/modules/GAGS/nsfw/json_configs/clothes/legs.json diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari.json b/modular_nova/modules/GAGS/nsfw/json_configs/items/shibari.json similarity index 100% rename from modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari.json rename to modular_nova/modules/GAGS/nsfw/json_configs/items/shibari.json diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_high.json b/modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_high.json similarity index 100% rename from modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_high.json rename to modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_high.json diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_inhands.json b/modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_inhands.json similarity index 100% rename from modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_inhands.json rename to modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_inhands.json diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_med.json b/modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_med.json similarity index 100% rename from modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_med.json rename to modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_med.json diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_stand_item.json b/modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_stand_item.json similarity index 100% rename from modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_stand_item.json rename to modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_stand_item.json diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag.json b/modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag.json similarity index 100% rename from modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag.json rename to modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag.json diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_left.json b/modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_left.json similarity index 100% rename from modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_left.json rename to modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_left.json diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_right.json b/modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_right.json similarity index 100% rename from modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_right.json rename to modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_right.json diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag_worn.json b/modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag_worn.json similarity index 100% rename from modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag_worn.json rename to modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag_worn.json diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/mask/chokegag.json b/modular_nova/modules/GAGS/nsfw/json_configs/mask/chokegag.json similarity index 100% rename from modular_skyrat/modules/GAGS/nsfw/json_configs/mask/chokegag.json rename to modular_nova/modules/GAGS/nsfw/json_configs/mask/chokegag.json diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/mask/choking_large.json b/modular_nova/modules/GAGS/nsfw/json_configs/mask/choking_large.json similarity index 100% rename from modular_skyrat/modules/GAGS/nsfw/json_configs/mask/choking_large.json rename to modular_nova/modules/GAGS/nsfw/json_configs/mask/choking_large.json diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/mask/choking_medium.json b/modular_nova/modules/GAGS/nsfw/json_configs/mask/choking_medium.json similarity index 100% rename from modular_skyrat/modules/GAGS/nsfw/json_configs/mask/choking_medium.json rename to modular_nova/modules/GAGS/nsfw/json_configs/mask/choking_medium.json diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/mask/choking_small.json b/modular_nova/modules/GAGS/nsfw/json_configs/mask/choking_small.json similarity index 100% rename from modular_skyrat/modules/GAGS/nsfw/json_configs/mask/choking_small.json rename to modular_nova/modules/GAGS/nsfw/json_configs/mask/choking_small.json diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/structures/shibari_stand.json b/modular_nova/modules/GAGS/nsfw/json_configs/structures/shibari_stand.json similarity index 100% rename from modular_skyrat/modules/GAGS/nsfw/json_configs/structures/shibari_stand.json rename to modular_nova/modules/GAGS/nsfw/json_configs/structures/shibari_stand.json diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/structures/shibari_stand_ropes.json b/modular_nova/modules/GAGS/nsfw/json_configs/structures/shibari_stand_ropes.json similarity index 100% rename from modular_skyrat/modules/GAGS/nsfw/json_configs/structures/shibari_stand_ropes.json rename to modular_nova/modules/GAGS/nsfw/json_configs/structures/shibari_stand_ropes.json diff --git a/modular_skyrat/modules/Midroundtraitor/code/datum_traitor.dm b/modular_nova/modules/Midroundtraitor/code/datum_traitor.dm similarity index 100% rename from modular_skyrat/modules/Midroundtraitor/code/datum_traitor.dm rename to modular_nova/modules/Midroundtraitor/code/datum_traitor.dm diff --git a/modular_nova/modules/Midroundtraitor/code/event.dm b/modular_nova/modules/Midroundtraitor/code/event.dm new file mode 100644 index 00000000000000..4830ed3ea876b7 --- /dev/null +++ b/modular_nova/modules/Midroundtraitor/code/event.dm @@ -0,0 +1,79 @@ +/datum/dynamic_ruleset/midround/from_ghosts/lone_infiltrator + name = "Lone Infiltrator" + antag_datum = /datum/antagonist/traitor/lone_infiltrator + midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT + antag_flag = ROLE_LONE_INFILTRATOR + restricted_roles = list(JOB_CYBORG, + JOB_AI, + JOB_SECURITY_OFFICER, + JOB_WARDEN, + JOB_DETECTIVE, + JOB_HEAD_OF_SECURITY, + JOB_CAPTAIN, + JOB_CORRECTIONS_OFFICER, + JOB_NT_REP, + JOB_BLUESHIELD, + JOB_ORDERLY, + JOB_BOUNCER, + JOB_CUSTOMS_AGENT, + JOB_ENGINEERING_GUARD, + JOB_SCIENCE_GUARD, + ) + required_candidates = 1 + weight = 4 //Slightly less common than normal midround traitors. + cost = 4 //But also slightly more costly. + minimum_players = 10 + var/list/spawn_locs = list() + +/datum/dynamic_ruleset/midround/from_ghosts/lone_infiltrator/execute() + for(var/obj/effect/landmark/carpspawn/carp in GLOB.landmarks_list) + spawn_locs += carp.loc + if(!length(spawn_locs)) + message_admins("No valid spawn locations found, aborting...") + return MAP_ERROR + return ..() + +/datum/dynamic_ruleset/midround/from_ghosts/lone_infiltrator/generate_ruleset_body(mob/applicant) + var/datum/mind/player_mind = new /datum/mind(applicant.key) + + var/mob/living/carbon/human/operative = new(pick(spawn_locs)) + applicant.client.prefs.safe_transfer_prefs_to(operative) + operative.dna.update_dna_identity() + operative.dna.species.pre_equip_species_outfit(null, operative) + operative.regenerate_icons() + SSquirks.AssignQuirks(operative, applicant.client, TRUE, TRUE, null, FALSE, operative) + player_mind.set_assigned_role(SSjob.GetJobType(/datum/job/lone_operative)) + player_mind.special_role = "Lone Infiltrator" + player_mind.active = TRUE + player_mind.transfer_to(operative) + player_mind.add_antag_datum(/datum/antagonist/traitor/lone_infiltrator) + + message_admins("[ADMIN_LOOKUPFLW(operative)] has been made into lone infiltrator by midround ruleset.") + log_game("[key_name(operative)] was spawned as a lone infiltrator by midround ruleset.") + return operative + +//OUTFIT// +/datum/outfit/syndicateinfiltrator + name = "Symphionia Operative - Infiltrator" + + uniform = /obj/item/clothing/under/syndicate + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/combat + ears = /obj/item/radio/headset/syndicate/alt + id = /obj/item/card/id/advanced/chameleon + glasses = /obj/item/clothing/glasses/night + mask = /obj/item/clothing/mask/gas/syndicate + back = /obj/item/mod/control/pre_equipped/nuclear/chameleon + r_pocket = /obj/item/tank/internals/emergency_oxygen/engi + internals_slot = ITEM_SLOT_RPOCKET + belt = /obj/item/storage/belt/military + backpack_contents = list(/obj/item/storage/box/survival/syndie=1,\ + /obj/item/tank/jetpack/oxygen/harness=1,\ + /obj/item/gun/ballistic/automatic/pistol=1,\ + /obj/item/knife/combat/survival) + + id_trim = /datum/id_trim/chameleon/operative + +/datum/outfit/syndicateinfiltrator/post_equip(mob/living/carbon/human/H) + H.faction |= ROLE_SYNDICATE + H.update_icons() diff --git a/modular_skyrat/modules/QOL/code/_under.dm b/modular_nova/modules/QOL/code/_under.dm similarity index 100% rename from modular_skyrat/modules/QOL/code/_under.dm rename to modular_nova/modules/QOL/code/_under.dm diff --git a/modular_skyrat/modules/QOL/code/datums/components/crafting/recipes/recipes_misc.dm b/modular_nova/modules/QOL/code/datums/components/crafting/recipes/recipes_misc.dm similarity index 100% rename from modular_skyrat/modules/QOL/code/datums/components/crafting/recipes/recipes_misc.dm rename to modular_nova/modules/QOL/code/datums/components/crafting/recipes/recipes_misc.dm diff --git a/modular_skyrat/modules/QOL/code/game/objects/items/mop.dm b/modular_nova/modules/QOL/code/game/objects/items/mop.dm similarity index 100% rename from modular_skyrat/modules/QOL/code/game/objects/items/mop.dm rename to modular_nova/modules/QOL/code/game/objects/items/mop.dm diff --git a/modular_skyrat/modules/QOL/readme.md b/modular_nova/modules/QOL/readme.md similarity index 100% rename from modular_skyrat/modules/QOL/readme.md rename to modular_nova/modules/QOL/readme.md diff --git a/modular_nova/modules/SEVA_suit/code/seva_obj.dm b/modular_nova/modules/SEVA_suit/code/seva_obj.dm new file mode 100644 index 00000000000000..0071c330d96287 --- /dev/null +++ b/modular_nova/modules/SEVA_suit/code/seva_obj.dm @@ -0,0 +1,59 @@ +/obj/item/clothing/suit/hooded/seva + name = "SEVA suit" + desc = "A fire-proof suit for exploring hot environments. Its design doesn't allow for upgrading with goliath plates." + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/suit_digi.dmi' + worn_icon_teshari = 'modular_nova/master_files/icons/mob/clothing/species/teshari/suit.dmi' + icon_state = "seva" + body_parts_covered = CHEST|GROIN|LEGS|ARMS + flags_inv = HIDEJUMPSUIT|HIDETAIL + cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + w_class = WEIGHT_CLASS_BULKY + max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT + heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + hoodtype = /obj/item/clothing/head/hooded/seva + armor_type = /datum/armor/hooded_seva + resistance_flags = FIRE_PROOF + transparent_protection = HIDEJUMPSUIT + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/recharge/kinetic_accelerator, /obj/item/pickaxe) + +/datum/armor/hooded_seva + melee = 20 + bullet = 10 + laser = 10 + energy = 10 + bomb = 30 + bio = 50 + fire = 100 + acid = 50 + wound = 10 + +/obj/item/clothing/head/hooded/seva + name = "SEVA hood" + desc = "A fire-proof hood for exploring hot environments. Its design doesn't allow for upgrading with goliath plates." + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' + worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/head_muzzled.dmi' + worn_icon_teshari = 'modular_nova/master_files/icons/mob/clothing/species/teshari/head.dmi' + icon_state = "seva" + body_parts_covered = HEAD + flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS|HIDESNOUT + cold_protection = HEAD + heat_protection = HEAD + max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT + clothing_traits = list(TRAIT_ASHSTORM_IMMUNE) + armor_type = /datum/armor/hooded_seva + resistance_flags = FIRE_PROOF + supports_variations_flags = CLOTHING_SNOUTED_VARIATION //I can't find the snout sprite so I'm just gonna force it to do this + +/obj/item/clothing/mask/gas/seva + name = "SEVA mask" + desc = "A head-covering mask that can be connected to an external air supply. Intended for use with the SEVA Suit." + icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi' + worn_icon_teshari = 'modular_nova/master_files/icons/mob/clothing/species/teshari/mask.dmi' + icon_state = "seva" + resistance_flags = FIRE_PROOF + flags_inv = HIDEFACIALHAIR|HIDEFACE|HIDEEYES|HIDEEARS|HIDEHAIR|HIDESNOUT diff --git a/modular_skyrat/modules/SEVA_suit/code/suit_voucher.dm b/modular_nova/modules/SEVA_suit/code/suit_voucher.dm similarity index 91% rename from modular_skyrat/modules/SEVA_suit/code/suit_voucher.dm rename to modular_nova/modules/SEVA_suit/code/suit_voucher.dm index 0e0d53789623bc..5d686da54e2a57 100644 --- a/modular_skyrat/modules/SEVA_suit/code/suit_voucher.dm +++ b/modular_nova/modules/SEVA_suit/code/suit_voucher.dm @@ -11,7 +11,7 @@ //More items can be added in the lists and in the if statement. /obj/machinery/computer/order_console/mining/proc/redeem_suit_voucher(obj/item/suit_voucher/voucher, mob/redeemer) var/items = list( - "SEVA suit" = image(icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi', icon_state = "seva"), + "SEVA suit" = image(icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi', icon_state = "seva"), "Explorer suit" = image(icon = 'icons/obj/clothing/suits/utility.dmi', icon_state = "explorer"), ) diff --git a/modular_skyrat/modules/SiliconQoL/code/_onclick.dm b/modular_nova/modules/SiliconQoL/code/_onclick.dm similarity index 90% rename from modular_skyrat/modules/SiliconQoL/code/_onclick.dm rename to modular_nova/modules/SiliconQoL/code/_onclick.dm index 9589c8d40ab607..93d82a2c6ec077 100644 --- a/modular_skyrat/modules/SiliconQoL/code/_onclick.dm +++ b/modular_nova/modules/SiliconQoL/code/_onclick.dm @@ -8,7 +8,7 @@ if(airlock) airlock.AICtrlShiftClick(src) else - A.AICtrlShiftClick(src) // End of skyrat edit + A.AICtrlShiftClick(src) // End of NOVA EDIT /mob/living/silicon/ai/ShiftClickOn(atom/A) if(isturf(A)) @@ -56,7 +56,7 @@ /mob/living/silicon/robot/CtrlShiftClickOn(atom/A) if(isturf(A)) - var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in A // Skyrat edit + var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in A // NOVA EDIT if(airlock) airlock.BorgCtrlShiftClick(src) else @@ -64,7 +64,7 @@ /mob/living/silicon/robot/ShiftClickOn(atom/A) if(isturf(A)) - var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in A // Skyrat edit + var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in A // NOVA EDIT if(airlock) airlock.BorgShiftClick(src) else @@ -72,15 +72,15 @@ /mob/living/silicon/robot/CtrlClickOn(atom/A) if(isturf(A)) - var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in A // Skyrat edit + var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in A // NOVA EDIT if(airlock) airlock.BorgCtrlClick(src) else - A.BorgCtrlClick(src) // End of skyrat edit + A.BorgCtrlClick(src) // End of NOVA EDIT /mob/living/silicon/robot/AltClickOn(atom/A) if(isturf(A)) - var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in A // Skyrat edit + var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in A // NOVA EDIT if(airlock) airlock.BorgAltClick(src) else diff --git a/modular_nova/modules/SiliconQoL/code/countdown.dm b/modular_nova/modules/SiliconQoL/code/countdown.dm new file mode 100644 index 00000000000000..ef6eb92ce5ef06 --- /dev/null +++ b/modular_nova/modules/SiliconQoL/code/countdown.dm @@ -0,0 +1,14 @@ +/obj/effect/countdown/transformer_rp + name = "transformer countdown" + color = "#4C5866" + +/obj/effect/countdown/transformer_rp/get_value() + var/obj/machinery/transformer_rp/transformer = attached_to + if(!istype(transformer)) + return + if(!transformer.is_operational) + return + if(transformer.cooldown && (transformer.stored_cyborgs > 0)) + return "[round(max(0, transformer.cooldown_timer / 10))]" + if(transformer.stored_cyborgs < 1) + return "[round(max(0, transformer.stored_timer / 10))]" diff --git a/modular_nova/modules/SiliconQoL/code/robotic_factory.dm b/modular_nova/modules/SiliconQoL/code/robotic_factory.dm new file mode 100644 index 00000000000000..b4e8e0a5fb09cf --- /dev/null +++ b/modular_nova/modules/SiliconQoL/code/robotic_factory.dm @@ -0,0 +1,112 @@ +/obj/machinery/transformer_rp + name = "\improper Automatic Robotic Factory 5000" + desc = "A large metallic machine with an entrance and an exit. A sign on \ + the side reads, 'Mass robot production facility'" + icon = 'icons/obj/machines/recycling.dmi' + icon_state = "separator-AO1" + base_icon_state = "separator-AO0" + layer = ABOVE_ALL_MOB_LAYER // Overhead + density = TRUE + /// How many cyborgs are we storing + var/stored_cyborgs = 1 + /// How many cyborgs can we store? + var/max_stored_cyborgs = 4 + // How much time between the spawning of new cyborgs? + var/cooldown_duration = 1 MINUTES + /// Handles the Cyborg spawner timer. + var/cooldown_timer = 0 + /// Whether we're on spawn cooldown. + var/cooldown = FALSE + /// How much time between the storing of cyborgs? + var/stored_duration = 5 MINUTES + /// Handles the stored Cyborg timer. + var/stored_timer + /// The countdown itself + var/obj/effect/countdown/transformer_rp/countdown + /// The master AI , assigned when placed down with the ability. + var/mob/living/silicon/ai/master_ai + +/obj/machinery/transformer_rp/Initialize(mapload) + // On us + . = ..() + new /obj/machinery/conveyor/auto(loc, WEST) + stored_timer = stored_duration + countdown = new(src) + countdown.start() + +/obj/machinery/transformer_rp/on_set_is_operational(old_value) + if(old_value) + end_processing() + else + begin_processing() + +/obj/machinery/transformer_rp/examine(mob/user) + . = ..() + if(issilicon(user) || isobserver(user)) + . += "<br>It has [stored_cyborgs] cyborgs stored." + if(!is_operational) + . += span_warning("It has no power!") + return + if(cooldown && cooldown_timer) + . += "<br>It will be ready to deploy a stored cyborg in [DisplayTimeText(max(0, cooldown_timer))]." + if(stored_cyborgs >= max_stored_cyborgs) + return + . += "<br>It will store a new cyborg in [DisplayTimeText(max(0, stored_timer))]." + +/obj/machinery/transformer_rp/Destroy() + QDEL_NULL(countdown) + . = ..() + +/obj/machinery/transformer_rp/update_icon_state() + . = ..() + if(is_operational) + icon_state = "separator-AO1" + else + icon_state = base_icon_state + +/obj/machinery/transformer_rp/attack_ghost(mob/dead/observer/target_ghost) + . = ..() + create_a_cyborg(target_ghost) + +/obj/machinery/transformer_rp/process(seconds_per_tick) + cooldown_timer = max(0, cooldown_timer - (seconds_per_tick * 10)) + if(cooldown_timer == 0) + cooldown = FALSE + + stored_timer = max(0, stored_timer - (seconds_per_tick * 10)) + if(stored_timer > 0) + return + + stored_timer = stored_duration + + if(stored_cyborgs >= max_stored_cyborgs) + return + + stored_cyborgs++ + notify_ghosts("A new cyborg shell has been created at the [src]", + source = src, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + header = "New malfunctioning cyborg created!", + ) + +/obj/machinery/transformer_rp/proc/create_a_cyborg(mob/dead/observer/target_ghost) + if(!is_operational) + return + if(stored_cyborgs < 1) + return + if(cooldown) + return + + var/cyborg_ask = tgui_alert(target_ghost, "Become a cyborg?", "Are you a terminator?", list("Yes", "No")) + if(cyborg_ask == "No" || !src || QDELETED(src)) + return FALSE + + var/mob/living/silicon/robot/cyborg = new /mob/living/silicon/robot(loc) + cyborg.key = target_ghost.key + cyborg.set_connected_ai(master_ai) + cyborg.lawsync() + cyborg.lawupdate = TRUE + stored_cyborgs-- + + cooldown = TRUE + cooldown_timer = cooldown_duration diff --git a/modular_skyrat/modules/SiliconQoL/readme.md b/modular_nova/modules/SiliconQoL/readme.md similarity index 100% rename from modular_skyrat/modules/SiliconQoL/readme.md rename to modular_nova/modules/SiliconQoL/readme.md diff --git a/modular_skyrat/modules/Syndie_edits/code/area.dm b/modular_nova/modules/Syndie_edits/code/area.dm similarity index 100% rename from modular_skyrat/modules/Syndie_edits/code/area.dm rename to modular_nova/modules/Syndie_edits/code/area.dm diff --git a/modular_nova/modules/Syndie_edits/code/syndie_edits.dm b/modular_nova/modules/Syndie_edits/code/syndie_edits.dm new file mode 100644 index 00000000000000..4eee96ae0fc53e --- /dev/null +++ b/modular_nova/modules/Syndie_edits/code/syndie_edits.dm @@ -0,0 +1,209 @@ +//DS-2/Symphionia clothing. + +/obj/item/clothing/suit/armor/vest/capcarapace/syndicate + icon = 'modular_nova/modules/syndie_edits/icons/obj.dmi' + worn_icon = 'modular_nova/modules/syndie_edits/icons/worn.dmi' + icon_state = "syndievest" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + + +/obj/item/clothing/suit/armor/vest/capcarapace/syndicate/Initialize(mapload) + . = ..() + AddComponent(/datum/component/toggle_icon) + +/obj/item/clothing/suit/armor/vest/capcarapace/syndicate/winter + name = "syndicate captain's winter vest" + desc = "A sinister yet comfortable looking vest of advanced armor worn over a black and red fireproof jacket. The fur is said to be from wolves on the icemoon." + icon = 'modular_nova/modules/syndie_edits/icons/obj.dmi' + worn_icon = 'modular_nova/modules/syndie_edits/icons/worn.dmi' + icon_state = "syndievest_winter" + body_parts_covered = CHEST|GROIN + cold_protection = CHEST|GROIN|ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + resistance_flags = FIRE_PROOF + +/obj/item/clothing/suit/armor/vest/capcarapace/syndicate/winter/Initialize(mapload) + . = ..() + AddComponent(/datum/component/toggle_icon) + +/obj/item/clothing/head/hats/warden/syndicate + name = "master at arms' police hat" + desc = "A fashionable police cap emblazoned with a golden badge, issued to the Master at Arms. Protects the head from impacts." + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' + icon_state = "policehelm_syndie" + dog_fashion = null + +/obj/item/clothing/head/helmet/swat/ds + name = "SWAT helmet" + desc = "A robust and spaceworthy helmet with a small cross on it along with 'IP' written across the earpad." + icon = 'modular_nova/master_files/icons/obj/clothing/head/helmet.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/helmet.dmi' + icon_state = "swat_ds" + supports_variations_flags = CLOTHING_SNOUTED_VARIATION + +/obj/item/clothing/head/beret/sec/syndicate + name = "brig officer's beret" + desc = "A stylish and protective beret, produced and manufactured by Interdyne Pharmaceuticals with help from the Gorlex Marauders." + greyscale_config = /datum/greyscale_config/beret_badge + greyscale_config_worn = /datum/greyscale_config/beret_badge/worn + icon_state = "beret_badge" + greyscale_colors = "#3F3C40#DB2929" + +/obj/item/clothing/mask/gas/syndicate/ds + name = "balaclava" + desc = "A fancy balaclava, while it doesn't muffle your voice, it's fireproof and has a miniature rebreather for internals. Comfy to boot!" + icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi' + icon_state = "balaclava_ds" + flags_inv = HIDEFACE | HIDEEARS | HIDEFACIALHAIR + alternate_worn_layer = LOW_FACEMASK_LAYER //This lets it layer below glasses and headsets; yes, that's below hair, but it already has HIDEHAIR + +/obj/item/clothing/mask/gas/sechailer/syndicate + name = "neck gaiter" + desc = "For the agent wanting to keep a low profile whilst concealing their identity. Has a small respirator to be used with internals." + actions_types = list(/datum/action/item_action/adjust) + alternate_worn_layer = BODY_FRONT_UNDER_CLOTHES + icon_state = "half_mask" + icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi' + unique_death = 'modular_nova/master_files/sound/effects/hacked.ogg' + voice_filter = null + use_radio_beeps_tts = FALSE + +/obj/item/clothing/shoes/combat //TO-DO: Move these overrides out of a syndicate file! + icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi' + icon_state = "combat" + +/obj/item/clothing/gloves/combat + icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi' + icon_state = "combat" + worn_icon_teshari = TESHARI_HANDS_ICON + +/obj/item/clothing/gloves/combat/wizard + icon = 'icons/obj/clothing/gloves.dmi' + worn_icon = null + +/obj/item/clothing/gloves/tackler/combat/insulated + icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi' + icon_state = "combat" + +/obj/item/clothing/gloves/krav_maga/combatglovesplus + icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi' + icon_state = "combat" + +/obj/item/clothing/gloves/krav_maga/combatglovesplus/maa + name = "master at arms' combat gloves" + desc = "A set of combat gloves plus emblazoned with red knuckles, showing dedication to the trade while also hiding any blood left after use." + icon_state = "maagloves" + +/obj/item/storage/belt/security/webbing/ds + name = "brig officer webbing" + icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' + icon_state = "webbingds" + worn_icon_state = "webbingds" + uses_advanced_reskins = FALSE + +/obj/item/clothing/suit/armor/bulletproof/old + desc = "A Type III heavy bulletproof vest that excels in protecting the wearer against traditional projectile weaponry and explosives to a minor extent." + icon = 'icons/obj/clothing/suits/armor.dmi' + worn_icon = 'icons/mob/clothing/suits/armor.dmi' + icon_state = "bulletproof" + body_parts_covered = CHEST //TG's version has no groin/arm padding + +/obj/item/clothing/under/syndicate/nova/overalls + name = "utility overalls turtleneck" + desc = "A pair of spiffy overalls with a turtleneck underneath, useful for both engineering and botanical work." + icon_state = "syndicate_overalls" + can_adjust = TRUE + +/obj/item/clothing/under/syndicate/nova/overalls/skirt + name = "utility overalls skirtleneck" + desc = "A pair of spiffy overalls with a turtleneck underneath, this one is a skirt instead, breezy." + icon_state = "syndicate_overallskirt" + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + dying_key = DYE_REGISTRY_JUMPSKIRT + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/head/soft/sec/syndicate + name = "engine tech utility cover" + desc = "A utility cover for an engine technician, there's a tag that reads 'IP-DS-2'." + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' + icon_state = "dssoft" + soft_type = "ds" + +//Maid Outfit +/obj/item/clothing/head/costume/maidheadband/syndicate + name = "tactical maid headband" + desc = "Tacticute." + icon_state = "syndimaid_headband" + icon = 'modular_nova/master_files/icons/obj/clothing/head/costume.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/costume.dmi' + +/obj/item/clothing/gloves/combat/maid + name = "combat maid sleeves" + desc = "These 'tactical' gloves and sleeves are fireproof and electrically insulated. Warm to boot." + icon_state = "syndimaid_arms" + +/obj/item/clothing/under/syndicate/nova/maid + name = "tactical maid outfit" + desc = "A 'tactical' skirtleneck fashioned to the likeness of a maid outfit. Why the Symphionia has these, you'll never know." + icon_state = "syndimaid" + armor_type = /datum/armor/clothing_under/none + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + dying_key = DYE_REGISTRY_JUMPSKIRT + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/under/syndicate/nova/maid/Initialize(mapload) + . = ..() + var/obj/item/clothing/accessory/maidcorset/syndicate/A = new (src) + attach_accessory(A) + +/obj/item/clothing/accessory/maidcorset/syndicate + name = "syndicate maid apron" + desc = "Practical? No. Tactical? Also no. Cute? Most definitely yes." + icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi' + icon_state = "syndimaid_corset" + minimize_when_attached = FALSE + attachment_slot = null + +//Wintercoat & Hood +/obj/item/clothing/suit/hooded/wintercoat/nova/syndicate + name = "syndicate winter coat" + desc = "A sinister black coat with red accents and a fancy mantle, it feels like it can take a hit. The zipper tab looks like a triple headed snake in the shape of an S, spooky." + icon_state = "coatsyndie" + inhand_icon_state = "coatwinter" + armor_type = /datum/armor/wintercoat_syndicate + hoodtype = /obj/item/clothing/head/hooded/winterhood/nova/syndicate + +/datum/armor/wintercoat_syndicate + melee = 25 + bullet = 15 + laser = 30 + energy = 40 + bomb = 25 + acid = 45 + +/obj/item/clothing/suit/hooded/wintercoat/nova/syndicate/Initialize(mapload) + . = ..() + allowed += GLOB.security_wintercoat_allowed + +/obj/item/clothing/head/hooded/winterhood/nova/syndicate + desc = "A sinister black hood with armor padding." + icon_state = "hood_syndie" + armor_type = /datum/armor/winterhood_syndicate + +/datum/armor/winterhood_syndicate + melee = 25 + bullet = 15 + laser = 30 + energy = 40 + bomb = 25 + acid = 45 diff --git a/modular_skyrat/modules/Syndie_edits/icons/obj.dmi b/modular_nova/modules/Syndie_edits/icons/obj.dmi similarity index 100% rename from modular_skyrat/modules/Syndie_edits/icons/obj.dmi rename to modular_nova/modules/Syndie_edits/icons/obj.dmi diff --git a/modular_skyrat/modules/Syndie_edits/icons/worn.dmi b/modular_nova/modules/Syndie_edits/icons/worn.dmi similarity index 100% rename from modular_skyrat/modules/Syndie_edits/icons/worn.dmi rename to modular_nova/modules/Syndie_edits/icons/worn.dmi diff --git a/modular_nova/modules/access_helpers/README.md b/modular_nova/modules/access_helpers/README.md new file mode 100644 index 00000000000000..f8929d3a28d442 --- /dev/null +++ b/modular_nova/modules/access_helpers/README.md @@ -0,0 +1,7 @@ +## Title: Nova Sector Access Helpers + +Module ID: access_helpers + +## Description: + +Adds modular access_helpers for mapping. diff --git a/modular_skyrat/modules/skyrat_access_helpers/accesshelpers.dm b/modular_nova/modules/access_helpers/accesshelpers.dm similarity index 97% rename from modular_skyrat/modules/skyrat_access_helpers/accesshelpers.dm rename to modular_nova/modules/access_helpers/accesshelpers.dm index 6830ccc0843000..5d369fe0bb1ee0 100644 --- a/modular_skyrat/modules/skyrat_access_helpers/accesshelpers.dm +++ b/modular_nova/modules/access_helpers/accesshelpers.dm @@ -8,7 +8,7 @@ // Any -// Central Command +// Conglomeration of Colonists /obj/effect/mapping_helpers/airlock/access/any/cent_com icon_state = "access_helper_serv" @@ -17,11 +17,11 @@ var/list/access_list = ..() access_list += ACCESS_CENT_GENERAL return access_list - + // Centcom or the captain /obj/effect/mapping_helpers/airlock/access/any/cent_com/rep_or_captain/get_access() var/list/access_list = ..() - access_list += ACCESS_CENT_GENERAL + access_list += ACCESS_CENT_GENERAL access_list += ACCESS_CAPTAIN return access_list @@ -59,7 +59,7 @@ // All -// Central Command +// Conglomeration of Colonists /obj/effect/mapping_helpers/airlock/access/all/cent_com icon_state = "access_helper_serv" diff --git a/modular_skyrat/modules/additional_circuit/code/_designs.dm b/modular_nova/modules/additional_circuit/code/_designs.dm similarity index 100% rename from modular_skyrat/modules/additional_circuit/code/_designs.dm rename to modular_nova/modules/additional_circuit/code/_designs.dm diff --git a/modular_skyrat/modules/additional_circuit/code/cell_reader.dm b/modular_nova/modules/additional_circuit/code/cell_reader.dm similarity index 100% rename from modular_skyrat/modules/additional_circuit/code/cell_reader.dm rename to modular_nova/modules/additional_circuit/code/cell_reader.dm diff --git a/modular_skyrat/modules/additional_circuit/code/interact_item.dm b/modular_nova/modules/additional_circuit/code/interact_item.dm similarity index 100% rename from modular_skyrat/modules/additional_circuit/code/interact_item.dm rename to modular_nova/modules/additional_circuit/code/interact_item.dm diff --git a/modular_skyrat/modules/additional_circuit/code/mining_circuit.dm b/modular_nova/modules/additional_circuit/code/mining_circuit.dm similarity index 100% rename from modular_skyrat/modules/additional_circuit/code/mining_circuit.dm rename to modular_nova/modules/additional_circuit/code/mining_circuit.dm diff --git a/modular_skyrat/modules/additional_circuit/code/target_scanner.dm b/modular_nova/modules/additional_circuit/code/target_scanner.dm similarity index 100% rename from modular_skyrat/modules/additional_circuit/code/target_scanner.dm rename to modular_nova/modules/additional_circuit/code/target_scanner.dm diff --git a/modular_skyrat/modules/additional_circuit/readme.md b/modular_nova/modules/additional_circuit/readme.md similarity index 100% rename from modular_skyrat/modules/additional_circuit/readme.md rename to modular_nova/modules/additional_circuit/readme.md diff --git a/modular_skyrat/modules/admin/code/aooc.dm b/modular_nova/modules/admin/code/aooc.dm similarity index 100% rename from modular_skyrat/modules/admin/code/aooc.dm rename to modular_nova/modules/admin/code/aooc.dm diff --git a/modular_skyrat/modules/admin/code/fix_chat.dm b/modular_nova/modules/admin/code/fix_chat.dm similarity index 100% rename from modular_skyrat/modules/admin/code/fix_chat.dm rename to modular_nova/modules/admin/code/fix_chat.dm diff --git a/modular_skyrat/modules/admin/code/loud_say.dm b/modular_nova/modules/admin/code/loud_say.dm similarity index 90% rename from modular_skyrat/modules/admin/code/loud_say.dm rename to modular_nova/modules/admin/code/loud_say.dm index 82d73fc3723491..43b701fed5ece3 100644 --- a/modular_skyrat/modules/admin/code/loud_say.dm +++ b/modular_nova/modules/admin/code/loud_say.dm @@ -25,7 +25,7 @@ for(var/client/admin_client in GLOB.admins) if(admin_client?.prefs?.toggles & SOUND_ADMINHELP) - SEND_SOUND(admin_client, sound('modular_skyrat/modules/admin/sound/duckhonk.ogg')) //Stop using loud mode if you don't need to. + SEND_SOUND(admin_client, sound('modular_nova/modules/admin/sound/duckhonk.ogg')) //Stop using loud mode if you don't need to. window_flash(admin_client, ignorepref = TRUE) SSblackbox.record_feedback("tally", "admin_verb", 1, "loudAsay") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/modular_skyrat/modules/admin/code/player_ranks.dm b/modular_nova/modules/admin/code/player_ranks.dm similarity index 100% rename from modular_skyrat/modules/admin/code/player_ranks.dm rename to modular_nova/modules/admin/code/player_ranks.dm diff --git a/modular_skyrat/modules/admin/code/smites/pie.dm b/modular_nova/modules/admin/code/smites/pie.dm similarity index 100% rename from modular_skyrat/modules/admin/code/smites/pie.dm rename to modular_nova/modules/admin/code/smites/pie.dm diff --git a/modular_skyrat/modules/admin/code/sooc.dm b/modular_nova/modules/admin/code/sooc.dm similarity index 100% rename from modular_skyrat/modules/admin/code/sooc.dm rename to modular_nova/modules/admin/code/sooc.dm diff --git a/modular_skyrat/modules/admin/readme.md b/modular_nova/modules/admin/readme.md similarity index 100% rename from modular_skyrat/modules/admin/readme.md rename to modular_nova/modules/admin/readme.md diff --git a/modular_skyrat/modules/admin/sound/duckhonk.ogg b/modular_nova/modules/admin/sound/duckhonk.ogg similarity index 100% rename from modular_skyrat/modules/admin/sound/duckhonk.ogg rename to modular_nova/modules/admin/sound/duckhonk.ogg diff --git a/modular_skyrat/modules/advanced_engineering/code/adv_engineering.dm b/modular_nova/modules/advanced_engineering/code/adv_engineering.dm similarity index 83% rename from modular_skyrat/modules/advanced_engineering/code/adv_engineering.dm rename to modular_nova/modules/advanced_engineering/code/adv_engineering.dm index df38f143995fc5..e2b7544e84b959 100644 --- a/modular_skyrat/modules/advanced_engineering/code/adv_engineering.dm +++ b/modular_nova/modules/advanced_engineering/code/adv_engineering.dm @@ -31,16 +31,21 @@ name = "industrial RCD matter cartridge" desc = "A cartridge with one complete refill for an industrial RCD." w_class = WEIGHT_CLASS_SMALL - custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 60, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 40) + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 60, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 40, + ) ammoamt = 440 /obj/item/storage/box/rcd_ammo name = "industrial RCD matter box" - icon = 'modular_skyrat/modules/aesthetics/storage/storage.dmi' + icon = 'modular_nova/modules/aesthetics/storage/storage.dmi' desc = "A durable box with refill cartridges for an industrial RCD." icon_state = "engibox" illustration = "rcd" - custom_materials = list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT) + custom_materials = list( + /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT, + ) /obj/item/storage/box/rcd_ammo/PopulateContents() for(var/i in 1 to 4) diff --git a/modular_skyrat/modules/advanced_engineering/readme.md b/modular_nova/modules/advanced_engineering/readme.md similarity index 100% rename from modular_skyrat/modules/advanced_engineering/readme.md rename to modular_nova/modules/advanced_engineering/readme.md diff --git a/modular_nova/modules/advanced_shuttles/code/closet.dm b/modular_nova/modules/advanced_shuttles/code/closet.dm new file mode 100644 index 00000000000000..28510dc29affe1 --- /dev/null +++ b/modular_nova/modules/advanced_shuttles/code/closet.dm @@ -0,0 +1,174 @@ +/obj/structure/closet/shuttle/closet_update_overlays(list/new_overlays) + . = new_overlays + if(enable_door_overlay && !is_animating_door) + if(opened && has_opened_overlay) + var/mutable_appearance/door_overlay = mutable_appearance(icon, "[icon_door || icon_state]_open", alpha = src.alpha) //This was the only change, adding icon_door; TG wouldnt want it. + . += door_overlay + door_overlay.overlays += emissive_blocker(door_overlay.icon, door_overlay.icon_state, src, alpha = door_overlay.alpha) // If we don't do this the door doesn't block emissives and it looks weird. + else if(has_closed_overlay) + . += "[icon_door || icon_state]_door" +//TG won't ever really need this because their lockers with non-matching fronts dont have non-matching backs; so I simply re-define the proc for our shuttleclosets + +/obj/structure/closet/shuttle + anchored = TRUE + density = TRUE + can_be_unanchored = FALSE + icon = 'modular_nova/master_files/icons/obj/closet.dmi' + icon_state = "wallcloset" + icon_door = "wallcloset_mesh" + door_anim_time = 0 //Somebody needs to remove the hard-sprited shuttles, or at least their lockers. These are a sin. + +/obj/structure/closet/shuttle/white + icon_state = "wallcloset_white" + icon_door = "wallcloset_white" + +/obj/structure/closet/shuttle/emergency + name = "emergency closet" + desc = "It's a storage unit for emergency breath masks and O2 tanks." + icon_door = "wallcloset_o2" + +/obj/structure/closet/shuttle/emergency/PopulateContents() + for (var/i in 1 to 2) + new /obj/item/tank/internals/emergency_oxygen/engi(src) + new /obj/item/clothing/mask/gas/alt(src) + new /obj/item/storage/toolbox/emergency(src) + +/obj/structure/closet/shuttle/emergency/white + icon_state = "wallcloset_white" + +/obj/structure/closet/shuttle/medical + name = "first-aid closet" + desc = "It's a storage unit for emergency medical supplies." + icon_door = "wallcloset_med" + +/obj/structure/closet/shuttle/medical/PopulateContents() + new /obj/item/storage/medkit/emergency(src) + new /obj/item/healthanalyzer(src) + new /obj/item/reagent_containers/hypospray(src) + +/obj/structure/closet/shuttle/medical/white + icon_state = "wallcloset_white" + +/obj/structure/closet/shuttle/mining + desc = "It's a storage unit for emergency breath masks, O2 tanks, and a pressure suit." + icon_state = "wallcloset_white" + icon_door = "wallcloset_mining" + +/obj/structure/closet/shuttle/mining/PopulateContents() + for (var/i in 1 to 2) + new /obj/item/tank/internals/emergency_oxygen/engi(src) + new /obj/item/clothing/mask/breath(src) + new /obj/item/storage/toolbox/emergency(src) + new /obj/item/clothing/head/helmet/space(src) + new /obj/item/clothing/suit/space(src) + +/obj/structure/closet/shuttle/engivent + wall_mounted = TRUE + name = "engine ventilation" + desc = "An exhaust vent for the shuttle's engines. It looks just big enough to fit a person..." + icon_state = "vent" + icon_door = "vent" + +//Generic Wall Closets - mount onto a wall, will end up storing anything that's on the tile it was placed from and 'occupies'. +//Mob Size is small so that it doesn't end up storing players standing on those tiles. +/obj/structure/closet/generic/wall + door_anim_squish = 0.3 + door_anim_angle = 115 + door_hinge_x = -8.5 + wall_mounted = TRUE + max_mob_size = MOB_SIZE_SMALL + density = TRUE + anchored = TRUE + anchorable = FALSE //Prevents it being unwrenched and dragged around. Gotta unweld it! + paint_jobs = FALSE //Prevents it being repainted into other non-wall lockers. + icon = 'modular_nova/master_files/icons/obj/closet_wall.dmi' + icon_state = "locker_wall" + +/obj/structure/closet/emcloset/wall + door_anim_squish = 0.3 + door_anim_angle = 115 + door_hinge_x = -8.5 + wall_mounted = TRUE + max_mob_size = MOB_SIZE_SMALL + density = TRUE + anchored = TRUE + anchorable = FALSE + paint_jobs = FALSE + icon = 'modular_nova/master_files/icons/obj/closet_wall.dmi' + icon_state = "emergency_wall" + +/obj/structure/closet/firecloset/wall + door_anim_squish = 0.3 + door_anim_angle = 115 + door_hinge_x = -8.5 + wall_mounted = TRUE + max_mob_size = MOB_SIZE_SMALL + density = TRUE + anchored = TRUE + anchorable = FALSE + paint_jobs = FALSE + icon = 'modular_nova/master_files/icons/obj/closet_wall.dmi' + icon_state = "fire_wall" + +//These two are pre-locked versions of closet/generic/wall, for mapping only +/obj/structure/closet/secure_closet/wall + door_anim_squish = 0.3 + door_anim_angle = 115 + door_hinge_x = -8.5 + wall_mounted = TRUE + max_mob_size = MOB_SIZE_SMALL + density = TRUE + anchored = TRUE + anchorable = FALSE + paint_jobs = FALSE + icon = 'modular_nova/master_files/icons/obj/closet_wall.dmi' + icon_state = "locker_wall" + +/obj/structure/closet/secure_closet/personal/wall + door_anim_squish = 0.3 + door_anim_angle = 115 + door_hinge_x = -8.5 + wall_mounted = TRUE + max_mob_size = MOB_SIZE_SMALL + density = TRUE + anchored = TRUE + anchorable = FALSE + paint_jobs = FALSE + icon = 'modular_nova/master_files/icons/obj/closet_wall.dmi' + icon_state = "locker_wall" + +//These procs create empty subtypes, for when it's placed by a user rather than mapped in... +//Secure/personal don't get these since they're made with airlock electronics +/obj/structure/closet/generic/wall/empty/PopulateContents() + return + +/obj/structure/closet/emcloset/wall/empty/PopulateContents() + return + +/obj/structure/closet/firecloset/wall/empty/PopulateContents() + return + +//Wallmounts, for rebuilding the wall lockers above +/obj/item/wallframe/closet + name = "wall mounted closet" + desc = "It's a wall mounted storage unit for... well, whatever you put in this one. Apply to wall to use." + icon = 'modular_nova/master_files/icons/obj/closet_wall.dmi' + icon_state = "locker_mount" + result_path = /obj/structure/closet/generic/wall/empty + pixel_shift = 32 + +/obj/item/wallframe/emcloset + name = "wall mounted emergency closet" + desc = "It's a wall mounted storage unit for emergency breath masks and O2 tanks. Apply to wall to use." + icon = 'modular_nova/master_files/icons/obj/closet_wall.dmi' + icon_state = "emergency_mount" + result_path = /obj/structure/closet/emcloset/wall/empty + pixel_shift = 32 + +/obj/item/wallframe/firecloset + name = "wall mounted fire-safety closet" + desc = "It's a wall mounted storage unit for fire-fighting supplies. Apply to wall to use." + icon = 'modular_nova/master_files/icons/obj/closet_wall.dmi' + icon_state = "fire_mount" + result_path = /obj/structure/closet/firecloset/wall/empty + pixel_shift = 32 diff --git a/modular_skyrat/modules/advanced_shuttles/code/computer.dm b/modular_nova/modules/advanced_shuttles/code/computer.dm similarity index 79% rename from modular_skyrat/modules/advanced_shuttles/code/computer.dm rename to modular_nova/modules/advanced_shuttles/code/computer.dm index c895df045e0efb..755a9edd879db1 100644 --- a/modular_skyrat/modules/advanced_shuttles/code/computer.dm +++ b/modular_nova/modules/advanced_shuttles/code/computer.dm @@ -1,5 +1,5 @@ /obj/machinery/computer/shuttle/pod/advanced - icon = 'modular_skyrat/modules/advanced_shuttles/icons/computer.dmi' + icon = 'modular_nova/modules/advanced_shuttles/icons/computer.dmi' icon_state = "intercom" icon_screen = "null" layer = ABOVE_OBJ_LAYER @@ -15,7 +15,7 @@ return TRUE /obj/machinery/computer/emergency_shuttle/advanced - icon = 'modular_skyrat/modules/advanced_shuttles/icons/computer.dmi' + icon = 'modular_nova/modules/advanced_shuttles/icons/computer.dmi' icon_state = "computer" icon_keyboard = "" icon_screen = "" @@ -23,7 +23,7 @@ connectable = FALSE //connecting_computer change: since icon_state is not a typical console, it cannot be connectable. /obj/machinery/computer/crew/shuttle - icon = 'modular_skyrat/modules/advanced_shuttles/icons/computer.dmi' + icon = 'modular_nova/modules/advanced_shuttles/icons/computer.dmi' icon_state = "computer_left" icon_keyboard = "" icon_screen = "" @@ -31,7 +31,7 @@ connectable = FALSE //connecting_computer change: since icon_state is not a typical console, it cannot be connectable. /obj/machinery/computer/security/shuttle - icon = 'modular_skyrat/modules/advanced_shuttles/icons/computer.dmi' + icon = 'modular_nova/modules/advanced_shuttles/icons/computer.dmi' icon_state = "computer_right" icon_keyboard = "" icon_screen = "" @@ -39,7 +39,7 @@ connectable = FALSE //connecting_computer change: since icon_state is not a typical console, it cannot be connectable. /obj/machinery/computer/shuttle/ferry/shuttle - icon = 'modular_skyrat/modules/advanced_shuttles/icons/computer.dmi' + icon = 'modular_nova/modules/advanced_shuttles/icons/computer.dmi' icon_state = "computer" icon_keyboard = "" icon_screen = "" diff --git a/modular_nova/modules/advanced_shuttles/code/decals.dm b/modular_nova/modules/advanced_shuttles/code/decals.dm new file mode 100644 index 00000000000000..7f02f0fcb28e13 --- /dev/null +++ b/modular_nova/modules/advanced_shuttles/code/decals.dm @@ -0,0 +1,46 @@ +/obj/structure/sign/shuttleg250 + name = "Transfer Shuttle G250" + desc = "Transfer Shuttle G250." + icon = 'modular_nova/modules/advanced_shuttles/icons/g250.dmi' //LARGE icon + icon_state = "g250" + +/obj/structure/fans/tiny/forcefield + name = "forcefield" + desc = "A fluctuating forcefield for ships to cross." + icon = 'modular_nova/modules/advanced_shuttles/icons/effects.dmi' + icon_state = "forcefield" + +//Floor Decals ----- +/obj/effect/turf_decal/shuttle/exploration + icon = 'modular_nova/modules/advanced_shuttles/icons/exploration_floor.dmi' + icon_state = "decal1" + +/obj/effect/turf_decal/shuttle/exploration/medbay + icon_state = "decalmed" + +/obj/effect/turf_decal/shuttle/exploration/cargostore + icon_state = "decalstore" + +/obj/effect/turf_decal/shuttle/exploration/bridge + icon_state = "decalbridge" + +/obj/effect/turf_decal/shuttle/exploration/o2 + icon_state = "decalo2" + +/obj/effect/turf_decal/shuttle/exploration/typhon + icon_state = "decal2" + +/obj/effect/turf_decal/shuttle/exploration/echidna + icon_state = "decal1" + +/obj/effect/turf_decal/shuttle/exploration/weapons + icon_state = "decal3" + +/obj/effect/turf_decal/shuttle/exploration/airlock + icon_state = "decal4" + +/obj/effect/turf_decal/shuttle/exploration/hazardstripe + icon_state = "hazard_decal" + +/obj/effect/turf_decal/shuttle/exploration/bot + icon_state = "bot_decal" diff --git a/modular_nova/modules/advanced_shuttles/code/shuttles.dm b/modular_nova/modules/advanced_shuttles/code/shuttles.dm new file mode 100644 index 00000000000000..a6d483a1b7699f --- /dev/null +++ b/modular_nova/modules/advanced_shuttles/code/shuttles.dm @@ -0,0 +1,190 @@ +#define ARRIVALS_STATION "arrivals_stationary" +#define ARRIVALS_INTERLINK "arrivals_shuttle" +#define CONSOLE_ANNOUNCE_COOLDOWN 5 SECONDS + +/obj/docking_port/mobile/arrivals_nova + name = "NTV Relay" + shuttle_id = "arrivals_shuttle" + dir = WEST + port_direction = SOUTH + + callTime = 15 SECONDS + ignitionTime = 6 SECONDS + rechargeTime = 15 SECONDS + + movement_force = list("KNOCKDOWN" = 3, "THROW" = 0) + + ///Our shuttle's control console + var/obj/machinery/computer/shuttle/arrivals/console + ///How much time are we waiting before returning to interlink. Sets itself automatically from config file + var/wait_time + ///State variable. True when our shuttle is waiting before autoreturn + var/waiting = FALSE // would've been better to use shuttle's mode variable, but check() resets it to SHUTTLE_IDLE so it's more sane way to make this fully modular + +/obj/docking_port/mobile/arrivals_nova/Initialize(mapload) + . = ..() + wait_time = CONFIG_GET(number/arrivals_wait) + return INITIALIZE_HINT_LATELOAD + +/obj/docking_port/mobile/arrivals_nova/LateInitialize() + . = ..() + console = get_control_console() + +/obj/docking_port/mobile/arrivals_nova/check() + . = ..() + + if(!wait_time) //0 disables autoreturn + return + + if(mode != SHUTTLE_IDLE) + return + + if(waiting && !timer) + SSshuttle.moveShuttle(shuttle_id, ARRIVALS_INTERLINK, TRUE) // times up, we're leaving + waiting = FALSE + + var/current_dock = getDockedId() + if (current_dock != ARRIVALS_STATION) + return + + if(check_occupied()) + if(!waiting) + return + + timer = 0 + waiting = FALSE + + if(console && console.last_cancel_announce + CONSOLE_ANNOUNCE_COOLDOWN <= world.time) + console.say("Lifesigns detected onboard, automatic return aborted.") + console.last_cancel_announce = world.time + + return + + if(timer || waiting) + return + + setTimer(wait_time) + waiting = TRUE + + if(console && console.last_depart_announce + CONSOLE_ANNOUNCE_COOLDOWN <= world.time) + console.say("Commencing automatic return subroutine in [wait_time / 10] seconds.") + console.last_depart_announce = world.time + +/obj/docking_port/mobile/arrivals_nova/getModeStr() + . = ..() + return waiting ? "RTN" : . + +/** + ** Checks if our shuttle is occupied by someone alive, and returns `TRUE` if it is, `FALSE` otherwise. + **/ +/obj/docking_port/mobile/arrivals_nova/proc/check_occupied() + for(var/alive_player in GLOB.alive_player_list) + if(get_area(alive_player) in shuttle_areas) + return TRUE + + return FALSE + +/obj/machinery/computer/shuttle/arrivals + name = "arrivals shuttle control" + desc = "The terminal used to control the arrivals interlink shuttle." + shuttleId = "arrivals_shuttle" + possible_destinations = "arrivals_stationary;arrivals_shuttle" + icon = 'modular_nova/modules/advanced_shuttles/icons/computer.dmi' + icon_state = "computer_frame" + icon_keyboard = "arrivals_key" + icon_screen = "arrivals" + light_color = COLOR_ORANGE_BROWN + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF + connectable = FALSE //connecting_computer change: since icon_state is not a typical console, it cannot be connectable. + no_destination_swap = TRUE + + ///[world.time] when console last announced departure + var/last_depart_announce + ///[world.time] when console last announced canceling shuttle's return + var/last_cancel_announce + +/obj/machinery/computer/shuttle/arrivals/recall + name = "arrivals shuttle recall terminal" + desc = "Use this if your friends left you behind." + possible_destinations = "arrivals_stationary;arrivals_shuttle" + +/* + * MAP TEMPLATES + */ + +/datum/map_template/shuttle/ferry + name = "NAV Monarch (Ferry)" + prefix = "_maps/shuttles/nova/" + port_id = "ferry" + suffix = "nova" + who_can_purchase = null + +/datum/map_template/shuttle/cargo/nova + name = "NLV Consign (Cargo)" + prefix = "_maps/shuttles/nova/" + port_id = "cargo" + suffix = "nova" + +/datum/map_template/shuttle/cargo/nova/delta + prefix = "_maps/shuttles/nova/" + suffix = "nova_delta" //I hate this. Delta station is one tile different docking-wise, which fucks it ALL up unless we either a) change the map (this would be nonmodular and also press the engine against disposals) or b) this (actually easy, just dumb) + +/datum/map_template/shuttle/whiteship/blueshift + name = "SFS Christian" + description = "A large corvette that seems to have come under attack by some kind of alien infestation. A true asset if it's cleared out and repaired." + prefix = "_maps/shuttles/nova/" + port_id = "whiteship" + suffix = "blueshift" + +/datum/map_template/shuttle/arrivals_nova + name = "NTV Relay (Arrivals)" + prefix = "_maps/shuttles/nova/" + port_id = "arrivals" + suffix = "nova" + who_can_purchase = null + +/datum/map_template/shuttle/emergency/default + name = "Standard Emergency Shuttle" + description = "Symphionia's standard issue emergency shuttle." + occupancy_limit = 60 + prefix = "_maps/shuttles/nova/" + suffix = "nova" + +/datum/map_template/shuttle/labour/nova + name = "NMC Drudge (Labour)" + prefix = "_maps/shuttles/nova/" + suffix = "nova" + +/obj/docking_port/stationary/laborcamp_home + roundstart_template = /datum/map_template/shuttle/labour/nova + +/obj/docking_port/stationary/laborcamp_home/kilo + roundstart_template = /datum/map_template/shuttle/labour/nova + +/datum/map_template/shuttle/mining_common/nova + name = "NMC Chimera (Mining)" + prefix = "_maps/shuttles/nova/" + suffix = "nova" + +/obj/docking_port/stationary/mining_home/common + roundstart_template = /datum/map_template/shuttle/mining_common/nova + +/obj/docking_port/stationary/mining_home/common/kilo + roundstart_template = /datum/map_template/shuttle/mining_common/nova + +/datum/map_template/shuttle/mining/nova + name = "NMC Phoenix (Mining)" + prefix = "_maps/shuttles/nova/" + suffix = "nova" + +/obj/docking_port/stationary/mining_home + roundstart_template = /datum/map_template/shuttle/mining/nova + +/datum/map_template/shuttle/mining/nova/large + name = "NMC Manticore (Mining)" + prefix = "_maps/shuttles/nova/" + suffix = "nova_large" + +#undef ARRIVALS_STATION +#undef ARRIVALS_INTERLINK +#undef CONSOLE_ANNOUNCE_COOLDOWN diff --git a/modular_nova/modules/advanced_shuttles/code/turfs.dm b/modular_nova/modules/advanced_shuttles/code/turfs.dm new file mode 100644 index 00000000000000..f910fda8741800 --- /dev/null +++ b/modular_nova/modules/advanced_shuttles/code/turfs.dm @@ -0,0 +1,244 @@ +/* +/area/shuttle + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED + */ + +/obj/docking_port/mobile/arrivals + +/turf/closed/wall/mineral/titanium/shuttle_wall + name = "shuttle wall" + desc = "A light-weight titanium wall used in shuttles." + icon = 'modular_nova/modules/advanced_shuttles/icons/pod.dmi' + icon_state = "" + base_icon_state = "" + smoothing_flags = null + smoothing_groups = null + canSmoothWith = null + +/turf/closed/wall/mineral/titanium/shuttle_wall/AfterChange(flags, oldType) + . = ..() + // Manually add space underlay, in a way similar to turf_z_transparency, + // but we actually show the old content of the same z-level, as desired for shuttles + + var/turf/underturf_path + + // Grab previous turf icon + if(!ispath(oldType, /turf/closed/wall/mineral/titanium/shuttle_wall)) + underturf_path = oldType + else + // Else use whatever SSmapping tells us, like transparent open tiles do + underturf_path = SSmapping.level_trait(z, ZTRAIT_BASETURF) || /turf/open/space + + var/mutable_appearance/underlay_appearance = mutable_appearance( + initial(underturf_path.icon), + initial(underturf_path.icon_state), + offset_spokesman = src, + layer = TURF_LAYER - 0.02, + plane = initial(underturf_path.plane)) + underlay_appearance.appearance_flags = RESET_ALPHA | RESET_COLOR + underlays += underlay_appearance + +/turf/closed/wall/mineral/titanium/shuttle_wall/window + opacity = FALSE + +/* + * POD + */ + +/turf/closed/wall/mineral/titanium/shuttle_wall/pod + icon = 'modular_nova/modules/advanced_shuttles/icons/pod.dmi' + +/turf/closed/wall/mineral/titanium/shuttle_wall/window/pod + icon = 'modular_nova/modules/advanced_shuttles/icons/pod.dmi' + icon_state = "3,1" + +/* + * FERRY + */ + +/turf/closed/wall/mineral/titanium/shuttle_wall/ferry + icon = 'modular_nova/modules/advanced_shuttles/icons/erokez.dmi' + icon_state = "18,2" + +/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry + icon = 'modular_nova/modules/advanced_shuttles/icons/erokez.dmi' + icon_state = "18,2" + +/turf/open/floor/iron/shuttle/ferry + name = "shuttle floor" + icon = 'modular_nova/modules/advanced_shuttles/icons/erokez.dmi' + icon_state = "floor1" + +/turf/open/floor/iron/shuttle/ferry/airless + initial_gas_mix = AIRLESS_ATMOS + +/* + * EVAC + */ + +/turf/closed/wall/mineral/titanium/shuttle_wall/evac + icon = 'modular_nova/modules/advanced_shuttles/icons/evac_shuttle.dmi' + icon_state = "9,1" + +/turf/closed/wall/mineral/titanium/shuttle_wall/window/evac + icon = 'modular_nova/modules/advanced_shuttles/icons/evac_shuttle.dmi' + icon_state = "9,1" + +/turf/open/floor/iron/shuttle/evac + name = "shuttle floor" + icon = 'modular_nova/modules/advanced_shuttles/icons/evac_shuttle.dmi' + icon_state = "floor" + +/turf/open/floor/iron/shuttle/evac/airless + initial_gas_mix = AIRLESS_ATMOS + +/* + * ARRIVALS + */ + +/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals + icon = 'modular_nova/modules/advanced_shuttles/icons/wagon.dmi' + icon_state = "3,1" + +/turf/closed/wall/mineral/titanium/shuttle_wall/window/arrivals + icon = 'modular_nova/modules/advanced_shuttles/icons/wagon.dmi' + icon_state = "3,1" + +/turf/open/floor/iron/shuttle/arrivals + name = "shuttle floor" + icon = 'modular_nova/modules/advanced_shuttles/icons/wagon.dmi' + icon_state = "floor" + +/turf/open/floor/iron/shuttle/arrivals/airless + initial_gas_mix = AIRLESS_ATMOS + +/* + * CARGO + */ + +/turf/closed/wall/mineral/titanium/shuttle_wall/cargo + icon = 'modular_nova/modules/advanced_shuttles/icons/cargo.dmi' + icon_state = "3,1" + +/turf/closed/wall/mineral/titanium/shuttle_wall/window/cargo + icon = 'modular_nova/modules/advanced_shuttles/icons/cargo.dmi' + icon_state = "3,1" + +/turf/open/floor/iron/shuttle/cargo + name = "shuttle floor" + icon = 'modular_nova/modules/advanced_shuttles/icons/cargo.dmi' + icon_state = "floor" + +/turf/open/floor/iron/shuttle/cargo/airless + initial_gas_mix = AIRLESS_ATMOS + +/* + * MINING + */ + +/turf/closed/wall/mineral/titanium/shuttle_wall/mining + icon = 'modular_nova/modules/advanced_shuttles/icons/mining.dmi' + +/turf/closed/wall/mineral/titanium/shuttle_wall/window/mining + icon = 'modular_nova/modules/advanced_shuttles/icons/mining.dmi' + +/turf/closed/wall/mineral/titanium/shuttle_wall/mining_large + icon = 'modular_nova/modules/advanced_shuttles/icons/mining_large.dmi' + icon_state = "2,2" + dir = NORTH + +/turf/closed/wall/mineral/titanium/shuttle_wall/window/mining_large + icon = 'modular_nova/modules/advanced_shuttles/icons/mining_large.dmi' + icon_state = "6,3" + dir = NORTH + +/turf/closed/wall/mineral/titanium/shuttle_wall/mining_labor + icon = 'modular_nova/modules/advanced_shuttles/icons/mining_labor.dmi' + icon_state = "4,6" + dir = NORTH + +/turf/closed/wall/mineral/titanium/shuttle_wall/window/mining_labor + icon = 'modular_nova/modules/advanced_shuttles/icons/mining_labor.dmi' + icon_state = "4,4" + dir = NORTH + +/* + * MINING/RND/EXPLORATION FLOORS + */ + +/turf/open/floor/iron/shuttle/exploration + name = "shuttle floor" + icon = 'modular_nova/modules/advanced_shuttles/icons/exploration_floor.dmi' + icon_state = "oside" + +/turf/open/floor/iron/shuttle/exploration/uside + icon_state = "uside" + +/turf/open/floor/iron/shuttle/exploration/corner + icon_state = "corner" + +/turf/open/floor/iron/shuttle/exploration/side + icon_state = "side" + +/turf/open/floor/iron/shuttle/exploration/corner_invcorner + icon_state = "corner_icorner" + +/turf/open/floor/iron/shuttle/exploration/adjinvcorner + icon_state = "adj_icorner" + +/turf/open/floor/iron/shuttle/exploration/oppinvcorner + icon_state = "opp_icorner" + +/turf/open/floor/iron/shuttle/exploration/invertcorner + icon_state = "icorner" + +/turf/open/floor/iron/shuttle/exploration/doubleinvertcorner + icon_state = "double_icorner" + +/turf/open/floor/iron/shuttle/exploration/tripleinvertcorner + icon_state = "tri_icorner" + +/turf/open/floor/iron/shuttle/exploration/doubleside + icon_state = "double_side" + +/turf/open/floor/iron/shuttle/exploration/quadinvertcorner + icon_state = "4icorner" + +/turf/open/floor/iron/shuttle/exploration/doubleinvertcorner_side + icon_state = "double_icorner_side" + +/turf/open/floor/iron/shuttle/exploration/invertcorner_side + icon_state = "side_icorner" + +/turf/open/floor/iron/shuttle/exploration/invertcorner_side_flipped + icon_state = "side_icorner_f" + +/turf/open/floor/iron/shuttle/exploration/blanktile + icon_state = "blank" + +/turf/open/floor/iron/shuttle/exploration/flat + icon_state = "flat" + +/turf/open/floor/iron/shuttle/exploration/flat/airless + initial_gas_mix = AIRLESS_ATMOS + +/turf/open/floor/iron/shuttle/exploration/textured_flat + icon_state = "flattexture" + +/turf/open/floor/iron/shuttle/exploration/textured_flat/airless + initial_gas_mix = AIRLESS_ATMOS + +/turf/open/floor/iron/shuttle/exploration/equipmentrail1 + icon_state = "rail1" + +/turf/open/floor/iron/shuttle/exploration/equipmentrail2 + icon_state = "rail2" + +/turf/open/floor/iron/shuttle/exploration/equipmentrail3 + icon_state = "rail3" + +/turf/open/floor/iron/shuttle/exploration/hazard + icon_state = "hazard" + +/turf/open/floor/iron/shuttle/exploration/hazard/airless + initial_gas_mix = AIRLESS_ATMOS diff --git a/modular_skyrat/modules/advanced_shuttles/icons/cargo.dmi b/modular_nova/modules/advanced_shuttles/icons/cargo.dmi similarity index 100% rename from modular_skyrat/modules/advanced_shuttles/icons/cargo.dmi rename to modular_nova/modules/advanced_shuttles/icons/cargo.dmi diff --git a/modular_skyrat/modules/advanced_shuttles/icons/computer.dmi b/modular_nova/modules/advanced_shuttles/icons/computer.dmi similarity index 100% rename from modular_skyrat/modules/advanced_shuttles/icons/computer.dmi rename to modular_nova/modules/advanced_shuttles/icons/computer.dmi diff --git a/modular_skyrat/modules/advanced_shuttles/icons/effects.dmi b/modular_nova/modules/advanced_shuttles/icons/effects.dmi similarity index 100% rename from modular_skyrat/modules/advanced_shuttles/icons/effects.dmi rename to modular_nova/modules/advanced_shuttles/icons/effects.dmi diff --git a/modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi b/modular_nova/modules/advanced_shuttles/icons/erokez.dmi similarity index 100% rename from modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi rename to modular_nova/modules/advanced_shuttles/icons/erokez.dmi diff --git a/modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi b/modular_nova/modules/advanced_shuttles/icons/evac_shuttle.dmi similarity index 100% rename from modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi rename to modular_nova/modules/advanced_shuttles/icons/evac_shuttle.dmi diff --git a/modular_skyrat/modules/advanced_shuttles/icons/exploration_floor.dmi b/modular_nova/modules/advanced_shuttles/icons/exploration_floor.dmi similarity index 100% rename from modular_skyrat/modules/advanced_shuttles/icons/exploration_floor.dmi rename to modular_nova/modules/advanced_shuttles/icons/exploration_floor.dmi diff --git a/modular_skyrat/modules/advanced_shuttles/icons/g250.dmi b/modular_nova/modules/advanced_shuttles/icons/g250.dmi similarity index 100% rename from modular_skyrat/modules/advanced_shuttles/icons/g250.dmi rename to modular_nova/modules/advanced_shuttles/icons/g250.dmi diff --git a/modular_skyrat/modules/advanced_shuttles/icons/mining.dmi b/modular_nova/modules/advanced_shuttles/icons/mining.dmi similarity index 100% rename from modular_skyrat/modules/advanced_shuttles/icons/mining.dmi rename to modular_nova/modules/advanced_shuttles/icons/mining.dmi diff --git a/modular_skyrat/modules/advanced_shuttles/icons/mining_labor.dmi b/modular_nova/modules/advanced_shuttles/icons/mining_labor.dmi similarity index 100% rename from modular_skyrat/modules/advanced_shuttles/icons/mining_labor.dmi rename to modular_nova/modules/advanced_shuttles/icons/mining_labor.dmi diff --git a/modular_skyrat/modules/advanced_shuttles/icons/mining_large.dmi b/modular_nova/modules/advanced_shuttles/icons/mining_large.dmi similarity index 100% rename from modular_skyrat/modules/advanced_shuttles/icons/mining_large.dmi rename to modular_nova/modules/advanced_shuttles/icons/mining_large.dmi diff --git a/modular_skyrat/modules/advanced_shuttles/icons/pod.dmi b/modular_nova/modules/advanced_shuttles/icons/pod.dmi similarity index 100% rename from modular_skyrat/modules/advanced_shuttles/icons/pod.dmi rename to modular_nova/modules/advanced_shuttles/icons/pod.dmi diff --git a/modular_skyrat/modules/advanced_shuttles/icons/wagon.dmi b/modular_nova/modules/advanced_shuttles/icons/wagon.dmi similarity index 100% rename from modular_skyrat/modules/advanced_shuttles/icons/wagon.dmi rename to modular_nova/modules/advanced_shuttles/icons/wagon.dmi diff --git a/modular_skyrat/modules/advanced_shuttles/sound/engine_landing.ogg b/modular_nova/modules/advanced_shuttles/sound/engine_landing.ogg similarity index 100% rename from modular_skyrat/modules/advanced_shuttles/sound/engine_landing.ogg rename to modular_nova/modules/advanced_shuttles/sound/engine_landing.ogg diff --git a/modular_skyrat/modules/advanced_shuttles/sound/engine_startup.ogg b/modular_nova/modules/advanced_shuttles/sound/engine_startup.ogg similarity index 100% rename from modular_skyrat/modules/advanced_shuttles/sound/engine_startup.ogg rename to modular_nova/modules/advanced_shuttles/sound/engine_startup.ogg diff --git a/modular_nova/modules/aesthetics/abductor/abductor.dm b/modular_nova/modules/aesthetics/abductor/abductor.dm new file mode 100644 index 00000000000000..80886cbf5e85e3 --- /dev/null +++ b/modular_nova/modules/aesthetics/abductor/abductor.dm @@ -0,0 +1,11 @@ +/obj/item/screwdriver/abductor + icon = 'modular_nova/modules/aesthetics/abductor/abductor.dmi' + +/obj/item/wirecutters/abductor + icon = 'modular_nova/modules/aesthetics/abductor/abductor.dmi' + +/obj/item/crowbar/abductor + icon = 'modular_nova/modules/aesthetics/abductor/abductor.dmi' + +/obj/item/wrench/abductor + icon = 'modular_nova/modules/aesthetics/abductor/abductor.dmi' diff --git a/modular_skyrat/modules/aesthetics/abductor/abductor.dmi b/modular_nova/modules/aesthetics/abductor/abductor.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/abductor/abductor.dmi rename to modular_nova/modules/aesthetics/abductor/abductor.dmi diff --git a/modular_skyrat/modules/aesthetics/airalarm/code/airalarm.dm b/modular_nova/modules/aesthetics/airalarm/code/airalarm.dm similarity index 100% rename from modular_skyrat/modules/aesthetics/airalarm/code/airalarm.dm rename to modular_nova/modules/aesthetics/airalarm/code/airalarm.dm diff --git a/modular_skyrat/modules/aesthetics/airalarm/icons/airalarm.dmi b/modular_nova/modules/aesthetics/airalarm/icons/airalarm.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airalarm/icons/airalarm.dmi rename to modular_nova/modules/aesthetics/airalarm/icons/airalarm.dmi diff --git a/modular_nova/modules/aesthetics/airlock/code/airlock.dm b/modular_nova/modules/aesthetics/airlock/code/airlock.dm new file mode 100644 index 00000000000000..21365794a12f1e --- /dev/null +++ b/modular_nova/modules/aesthetics/airlock/code/airlock.dm @@ -0,0 +1,558 @@ +/obj/machinery/door/airlock + doorOpen = 'modular_nova/modules/aesthetics/airlock/sound/open.ogg' + doorClose = 'modular_nova/modules/aesthetics/airlock/sound/close.ogg' + boltUp = 'modular_nova/modules/aesthetics/airlock/sound/bolts_up.ogg' + boltDown = 'modular_nova/modules/aesthetics/airlock/sound/bolts_down.ogg' + //noPower = 'sound/machines/doorclick.ogg' + var/forcedOpen = 'modular_nova/modules/aesthetics/airlock/sound/open_force.ogg' //Come on guys, why aren't all the sound files like this. + var/forcedClosed = 'modular_nova/modules/aesthetics/airlock/sound/close_force.ogg' + + /// For those airlocks you might want to have varying "fillings" for, without having to + /// have an icon file per door with a different filling. + var/fill_state_suffix = null + /// For the airlocks that use greyscale lights, set this to the color you want your lights to be. + var/greyscale_lights_color = null + /// For the airlocks that use a greyscale accent door color, set this color to the accent color you want it to be. + var/greyscale_accent_color = null + + var/has_environment_lights = TRUE //Does this airlock emit a light? + var/light_color_poweron = AIRLOCK_POWERON_LIGHT_COLOR + var/light_color_bolts = AIRLOCK_BOLTS_LIGHT_COLOR + var/light_color_access = AIRLOCK_ACCESS_LIGHT_COLOR + var/light_color_emergency = AIRLOCK_EMERGENCY_LIGHT_COLOR + var/light_color_engineering = AIRLOCK_ENGINEERING_LIGHT_COLOR + var/light_color_deny = AIRLOCK_DENY_LIGHT_COLOR + var/door_light_range = AIRLOCK_LIGHT_RANGE + var/door_light_power = AIRLOCK_LIGHT_POWER + ///Is this door external? E.g. does it lead to space? Shuttle docking systems bolt doors with this flag. + var/external = FALSE + +/obj/machinery/door/airlock/external + external = TRUE + +/obj/machinery/door/airlock/shuttle + external = TRUE + +/obj/machinery/door/airlock/power_change() + ..() + update_icon() + +/obj/machinery/door/airlock/update_overlays() + . = ..() + var/pre_light_range = 0 + var/pre_light_power = 0 + var/pre_light_color = "" + var/lights_overlay = "" + + var/frame_state + var/light_state + switch(airlock_state) + if(AIRLOCK_CLOSED) + frame_state = AIRLOCK_FRAME_CLOSED + if(locked) + light_state = AIRLOCK_LIGHT_BOLTS + lights_overlay = "lights_bolts" + pre_light_color = light_color_bolts + else if(emergency) + light_state = AIRLOCK_LIGHT_EMERGENCY + lights_overlay = "lights_emergency" + pre_light_color = light_color_emergency + else if(engineering_override) + light_state = AIRLOCK_LIGHT_ENGINEERING + lights_overlay = "lights_engineering" + pre_light_color = light_color_engineering + else + lights_overlay = "lights_poweron" + pre_light_color = light_color_poweron + if(AIRLOCK_DENY) + frame_state = AIRLOCK_FRAME_CLOSED + light_state = AIRLOCK_LIGHT_DENIED + lights_overlay = "lights_denied" + pre_light_color = light_color_deny + if(AIRLOCK_EMAG) + frame_state = AIRLOCK_FRAME_CLOSED + if(AIRLOCK_CLOSING) + frame_state = AIRLOCK_FRAME_CLOSING + light_state = AIRLOCK_LIGHT_CLOSING + lights_overlay = "lights_closing" + pre_light_color = light_color_access + if(AIRLOCK_OPEN) + frame_state = AIRLOCK_FRAME_OPEN + if(locked) + lights_overlay = "lights_bolts_open" + pre_light_color = light_color_bolts + else if(emergency) + lights_overlay = "lights_emergency_open" + pre_light_color = light_color_emergency + else + lights_overlay = "lights_poweron_open" + pre_light_color = light_color_poweron + if(AIRLOCK_OPENING) + frame_state = AIRLOCK_FRAME_OPENING + light_state = AIRLOCK_LIGHT_OPENING + lights_overlay = "lights_opening" + pre_light_color = light_color_access + + . += get_airlock_overlay(frame_state, icon, src, em_block = TRUE) + if(airlock_material) + . += get_airlock_overlay("[airlock_material]_[frame_state]", overlays_file, src, em_block = TRUE) + else + . += get_airlock_overlay("fill_[frame_state + fill_state_suffix]", icon, src, em_block = TRUE) + + if(greyscale_lights_color && !light_state) + lights_overlay += "_greyscale" + + if(lights && hasPower()) + . += get_airlock_overlay("lights_[light_state]", overlays_file, src, em_block = FALSE) + pre_light_range = door_light_range + pre_light_power = door_light_power + if(has_environment_lights) + set_light(l_range = pre_light_range, l_power = pre_light_power, l_color = pre_light_color, l_on = TRUE) + if(multi_tile) + filler.set_light(l_range = pre_light_range, l_power = pre_light_power, l_color = pre_light_color, l_on = TRUE) + else + lights_overlay = "" + set_light(l_on = FALSE) + + var/mutable_appearance/lights_appearance = mutable_appearance(overlays_file, lights_overlay, FLOAT_LAYER, src, ABOVE_LIGHTING_PLANE) + + if(greyscale_lights_color && !light_state) + lights_appearance.color = greyscale_lights_color + + if(multi_tile) + lights_appearance.dir = dir + + . += lights_appearance + + if(greyscale_accent_color) + . += get_airlock_overlay("[frame_state]_accent", overlays_file, src, em_block = TRUE, state_color = greyscale_accent_color) + + if(panel_open) + . += get_airlock_overlay("panel_[frame_state][security_level ? "_protected" : null]", overlays_file, src, em_block = TRUE) + if(frame_state == AIRLOCK_FRAME_CLOSED && welded) + . += get_airlock_overlay("welded", overlays_file, src, em_block = TRUE) + + if(airlock_state == AIRLOCK_EMAG) + . += get_airlock_overlay("sparks", overlays_file, src, em_block = FALSE) + + if(hasPower()) + if(frame_state == AIRLOCK_FRAME_CLOSED) + if(atom_integrity < integrity_failure * max_integrity) + . += get_airlock_overlay("sparks_broken", overlays_file, src, em_block = FALSE) + else if(atom_integrity < (0.75 * max_integrity)) + . += get_airlock_overlay("sparks_damaged", overlays_file, src, em_block = FALSE) + else if(frame_state == AIRLOCK_FRAME_OPEN) + if(atom_integrity < (0.75 * max_integrity)) + . += get_airlock_overlay("sparks_open", overlays_file, src, em_block = FALSE) + + if(note) + . += get_airlock_overlay(get_note_state(frame_state), note_overlay_file, src, em_block = TRUE) + + if(frame_state == AIRLOCK_FRAME_CLOSED && seal) + . += get_airlock_overlay("sealed", overlays_file, src, em_block = TRUE) + + if(hasPower() && unres_sides) + for(var/heading in list(NORTH,SOUTH,EAST,WEST)) + if(!(unres_sides & heading)) + continue + var/mutable_appearance/floorlight = mutable_appearance('icons/obj/doors/airlocks/station/overlays.dmi', "unres_[heading]", FLOAT_LAYER, src, ABOVE_LIGHTING_PLANE) + switch (heading) + if (NORTH) + floorlight.pixel_x = 0 + floorlight.pixel_y = 32 + if (SOUTH) + floorlight.pixel_x = 0 + floorlight.pixel_y = -32 + if (EAST) + floorlight.pixel_x = 32 + floorlight.pixel_y = 0 + if (WEST) + floorlight.pixel_x = -32 + floorlight.pixel_y = 0 + . += floorlight + +//STATION AIRLOCKS +/obj/machinery/door/airlock + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/public.dmi' + overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/overlays.dmi' + +/obj/machinery/door/airlock/command + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/command.dmi' + +/obj/machinery/door/airlock/security + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/security.dmi' + +/obj/machinery/door/airlock/security/old + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/security2.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_sec/old + +/obj/machinery/door/airlock/security/old/glass + opacity = FALSE + glass = TRUE + normal_integrity = 400 + +/obj/machinery/door/airlock/engineering + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/engineering.dmi' + +/obj/machinery/door/airlock/medical + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/medical.dmi' + +/obj/machinery/door/airlock/maintenance + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/maintenance.dmi' + +/obj/machinery/door/airlock/maintenance/external + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/maintenanceexternal.dmi' + +/obj/machinery/door/airlock/mining + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/mining.dmi' + +/obj/machinery/door/airlock/atmos + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/atmos.dmi' + +/obj/machinery/door/airlock/research + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/research.dmi' + +/obj/machinery/door/airlock/freezer + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/freezer.dmi' + +/obj/machinery/door/airlock/science + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/science.dmi' + +/obj/machinery/door/airlock/virology + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/virology.dmi' + +//STATION CUSTOM ARILOCKS +/obj/machinery/door/airlock/corporate + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/corporate.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_corporate + normal_integrity = 450 + +/obj/machinery/door/airlock/corporate/glass + opacity = FALSE + glass = TRUE + normal_integrity = 400 + +/obj/machinery/door/airlock/service + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/service.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_service + +/obj/machinery/door/airlock/service/glass + opacity = FALSE + glass = TRUE + +/obj/machinery/door/airlock/captain + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/cap.dmi' + +/obj/machinery/door/airlock/hop + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hop.dmi' + +/obj/machinery/door/airlock/hos + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hos.dmi' + +/obj/machinery/door/airlock/hos/glass + opacity = FALSE + glass = TRUE + normal_integrity = 400 + +/obj/machinery/door/airlock/ce + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/ce.dmi' + +/obj/machinery/door/airlock/ce/glass + opacity = FALSE + glass = TRUE + normal_integrity = 400 + +/obj/machinery/door/airlock/rd + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/rd.dmi' + +/obj/machinery/door/airlock/rd/glass + opacity = FALSE + glass = TRUE + normal_integrity = 400 + +/obj/machinery/door/airlock/qm + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/qm.dmi' + +/obj/machinery/door/airlock/qm/glass + opacity = FALSE + glass = TRUE + normal_integrity = 400 + +/obj/machinery/door/airlock/cmo + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/cmo.dmi' + +/obj/machinery/door/airlock/cmo/glass + opacity = FALSE + glass = TRUE + normal_integrity = 400 + +/obj/machinery/door/airlock/psych + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/psych.dmi' + +/obj/machinery/door/airlock/asylum + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/asylum.dmi' + +/obj/machinery/door/airlock/bathroom + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/bathroom.dmi' + +//STATION MINERAL AIRLOCKS +/obj/machinery/door/airlock/gold + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/gold.dmi' + +/obj/machinery/door/airlock/silver + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/silver.dmi' + +/obj/machinery/door/airlock/diamond + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/diamond.dmi' + +/obj/machinery/door/airlock/uranium + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/uranium.dmi' + +/obj/machinery/door/airlock/plasma + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/plasma.dmi' + +/obj/machinery/door/airlock/bananium + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/bananium.dmi' + +/obj/machinery/door/airlock/sandstone + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/sandstone.dmi' + +/obj/machinery/door/airlock/wood + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/wood.dmi' + +//STATION 2 AIRLOCKS + +/obj/machinery/door/airlock/public + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station2/glass.dmi' + overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station2/overlays.dmi' + +//EXTERNAL AIRLOCKS +/obj/machinery/door/airlock/external + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/external/external.dmi' + overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/external/overlays.dmi' + +//CENTCOM +/obj/machinery/door/airlock/centcom + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi' + overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi' + +/obj/machinery/door/airlock/grunge + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi' + overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi' + +//VAULT +/obj/machinery/door/airlock/vault + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/vault/vault.dmi' + overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/vault/overlays.dmi' + +//HATCH +/obj/machinery/door/airlock/hatch + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/centcom.dmi' + overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi' + +/obj/machinery/door/airlock/maintenance_hatch + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/maintenance.dmi' + overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi' + +//HIGH SEC +/obj/machinery/door/airlock/highsecurity + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/highsec/highsec.dmi' + overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/highsec/overlays.dmi' + +//MULTI-TILE + +/obj/machinery/door/airlock/multi_tile + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass.dmi' + overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass_overlays.dmi' + +/obj/machinery/door/airlock/multi_tile/glass + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass.dmi' + overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass_overlays.dmi' + +/obj/machinery/door/airlock/multi_tile/metal + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal.dmi' + overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal_overlays.dmi' + +//TRAM + +/obj/machinery/door/airlock/tram + name = "tram door" + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/tram/tram.dmi' + overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/tram/tram_overlays.dmi' + doorOpen = 'sound/machines/tramopen.ogg' + doorClose = 'sound/machines/tramclose.ogg' + has_environment_lights = FALSE + +//ASSEMBLYS +/obj/structure/door_assembly/door_assembly_public + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station2/glass.dmi' + overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station2/overlays.dmi' + +/obj/structure/door_assembly/door_assembly_com + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/command.dmi' + +/obj/structure/door_assembly/door_assembly_sec + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/security.dmi' + +/obj/structure/door_assembly/door_assembly_sec/old + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/security2.dmi' + +/obj/structure/door_assembly/door_assembly_eng + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/engineering.dmi' + +/obj/structure/door_assembly/door_assembly_min + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/mining.dmi' + +/obj/structure/door_assembly/door_assembly_atmo + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/atmos.dmi' + +/obj/structure/door_assembly/door_assembly_research + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/research.dmi' + +/obj/structure/door_assembly/door_assembly_science + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/science.dmi' + +/obj/structure/door_assembly/door_assembly_viro + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/virology.dmi' + +/obj/structure/door_assembly/door_assembly_med + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/medical.dmi' + +/obj/structure/door_assembly/door_assembly_mai + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/maintenance.dmi' + +/obj/structure/door_assembly/door_assembly_extmai + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/maintenanceexternal.dmi' + +/obj/structure/door_assembly/door_assembly_ext + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/external/external.dmi' + overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/external/overlays.dmi' + +/obj/structure/door_assembly/door_assembly_fre + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/freezer.dmi' + +/obj/structure/door_assembly/door_assembly_hatch + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/centcom.dmi' + overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi' + +/obj/structure/door_assembly/door_assembly_mhatch + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/maintenance.dmi' + overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi' + +/obj/structure/door_assembly/door_assembly_highsecurity + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/highsec/highsec.dmi' + overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/highsec/overlays.dmi' + +/obj/structure/door_assembly/door_assembly_vault + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/vault/vault.dmi' + overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/vault/overlays.dmi' + + +/obj/structure/door_assembly/door_assembly_centcom + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi' + overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi' + +/obj/structure/door_assembly/door_assembly_grunge + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi' + overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi' + +/obj/structure/door_assembly/door_assembly_gold + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/gold.dmi' + +/obj/structure/door_assembly/door_assembly_silver + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/silver.dmi' + +/obj/structure/door_assembly/door_assembly_diamond + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/diamond.dmi' + +/obj/structure/door_assembly/door_assembly_uranium + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/uranium.dmi' + +/obj/structure/door_assembly/door_assembly_plasma + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/plasma.dmi' + +/obj/structure/door_assembly/door_assembly_bananium + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/bananium.dmi' + +/obj/structure/door_assembly/door_assembly_sandstone + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/sandstone.dmi' + +/obj/structure/door_assembly/door_assembly_wood + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/wood.dmi' + +/obj/structure/door_assembly/door_assembly_corporate + name = "corporate airlock assembly" + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/corporate.dmi' + glass_type = /obj/machinery/door/airlock/corporate/glass + airlock_type = /obj/machinery/door/airlock/corporate + +/obj/structure/door_assembly/door_assembly_service + name = "service airlock assembly" + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/service.dmi' + base_name = "service airlock" + glass_type = /obj/machinery/door/airlock/service/glass + airlock_type = /obj/machinery/door/airlock/service + +/obj/structure/door_assembly/door_assembly_captain + name = "captain airlock assembly" + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/cap.dmi' + glass_type = /obj/machinery/door/airlock/command/glass + airlock_type = /obj/machinery/door/airlock/captain + +/obj/structure/door_assembly/door_assembly_hop + name = "head of personnel airlock assembly" + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hop.dmi' + glass_type = /obj/machinery/door/airlock/command/glass + airlock_type = /obj/machinery/door/airlock/hop + +/obj/structure/door_assembly/hos + name = "head of security airlock assembly" + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hos.dmi' + glass_type = /obj/machinery/door/airlock/hos/glass + airlock_type = /obj/machinery/door/airlock/hos + +/obj/structure/door_assembly/door_assembly_cmo + name = "chief medical officer airlock assembly" + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/cmo.dmi' + glass_type = /obj/machinery/door/airlock/cmo/glass + airlock_type = /obj/machinery/door/airlock/cmo + +/obj/structure/door_assembly/door_assembly_ce + name = "chief engineer airlock assembly" + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/ce.dmi' + glass_type = /obj/machinery/door/airlock/ce/glass + airlock_type = /obj/machinery/door/airlock/ce + +/obj/structure/door_assembly/door_assembly_rd + name = "research director airlock assembly" + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/rd.dmi' + glass_type = /obj/machinery/door/airlock/rd/glass + airlock_type = /obj/machinery/door/airlock/rd + +/obj/structure/door_assembly/door_assembly_qm + name = "quartermaster airlock assembly" + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/qm.dmi' + glass_type = /obj/machinery/door/airlock/qm/glass + airlock_type = /obj/machinery/door/airlock/qm + +/obj/structure/door_assembly/door_assembly_psych + name = "psychologist airlock assembly" + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/psych.dmi' + glass_type = /obj/machinery/door/airlock/medical/glass + airlock_type = /obj/machinery/door/airlock/psych + +/obj/structure/door_assembly/door_assembly_asylum + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/asylum.dmi' + +/obj/structure/door_assembly/door_assembly_bathroom + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/bathroom.dmi' + +/obj/machinery/door/airlock/hydroponics + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/botany.dmi' + +/obj/structure/door_assembly/door_assembly_hydro + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/botany.dmi' + +/obj/structure/door_assembly/ + icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/public.dmi' + overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/overlays.dmi' diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/asylum.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/asylum.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/asylum.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/asylum.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/bathroom.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/bathroom.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/bathroom.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/bathroom.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/cap.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/cap.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/cap.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/cap.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/ce.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/ce.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/ce.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/ce.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/cmo.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/cmo.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/cmo.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/cmo.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/external/external.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/external/external.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/external/external.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/external/external.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/external/overlays.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/external/overlays.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/external/overlays.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/external/overlays.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/centcom.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/centcom.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/centcom.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/centcom.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/maintenance.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/maintenance.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/maintenance.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/maintenance.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/highsec/highsec.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/highsec/highsec.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/highsec/highsec.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/highsec/highsec.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/highsec/overlays.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/highsec/overlays.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/highsec/overlays.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/highsec/overlays.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hop.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/hop.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hop.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/hop.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hos.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/hos.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hos.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/hos.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass_overlays.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass_overlays.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass_overlays.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass_overlays.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal_overlays.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal_overlays.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal_overlays.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal_overlays.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/psych.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/psych.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/psych.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/psych.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/qm.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/qm.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/qm.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/qm.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/rd.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/rd.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/rd.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/rd.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/shuttle/erokez.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/shuttle/erokez.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/shuttle/erokez.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/shuttle/erokez.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/shuttle/overlays.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/shuttle/overlays.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/shuttle/overlays.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/shuttle/overlays.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/shuttle/wagon.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/shuttle/wagon.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/shuttle/wagon.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/shuttle/wagon.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/atmos.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/atmos.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/atmos.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/atmos.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/bananium.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/bananium.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/bananium.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/bananium.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/botany.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/botany.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/botany.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/botany.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/command.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/command.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/command.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/command.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/corporate.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/corporate.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/corporate.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/corporate.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/diamond.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/diamond.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/diamond.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/diamond.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/engineering.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/engineering.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/engineering.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/engineering.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/freezer.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/freezer.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/freezer.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/freezer.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/gold.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/gold.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/gold.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/gold.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/maintenance.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/maintenance.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/maintenance.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/maintenance.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/maintenanceexternal.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/maintenanceexternal.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/maintenanceexternal.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/maintenanceexternal.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/medical.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/medical.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/medical.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/medical.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/mining.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/mining.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/mining.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/mining.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/overlays.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/overlays.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/overlays.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/overlays.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/plasma.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/plasma.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/plasma.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/plasma.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/public.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/public.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/public.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/public.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/research.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/research.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/research.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/research.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/sandstone.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/sandstone.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/sandstone.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/sandstone.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/science.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/science.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/science.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/science.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/security.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/security.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/security.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/security.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/security2.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/security2.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/security2.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/security2.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/securitysoul.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/securitysoul.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/securitysoul.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/securitysoul.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/service.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/service.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/service.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/service.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/silver.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/silver.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/silver.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/silver.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/uranium.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/uranium.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/uranium.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/uranium.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/virology.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/virology.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/virology.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/virology.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/wood.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/wood.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/wood.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/wood.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station2/glass.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station2/glass.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station2/glass.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station2/glass.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station2/overlays.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station2/overlays.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station2/overlays.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station2/overlays.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/tram/tram.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/tram/tram.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/tram/tram.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/tram/tram.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/tram/tram_overlays.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/tram/tram_overlays.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/tram/tram_overlays.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/tram/tram_overlays.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/vault/overlays.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/vault/overlays.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/vault/overlays.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/vault/overlays.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/vault/vault.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/vault/vault.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/vault/vault.dmi rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/vault/vault.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/sound/bolts_down.ogg b/modular_nova/modules/aesthetics/airlock/sound/bolts_down.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/sound/bolts_down.ogg rename to modular_nova/modules/aesthetics/airlock/sound/bolts_down.ogg diff --git a/modular_skyrat/modules/aesthetics/airlock/sound/bolts_up.ogg b/modular_nova/modules/aesthetics/airlock/sound/bolts_up.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/sound/bolts_up.ogg rename to modular_nova/modules/aesthetics/airlock/sound/bolts_up.ogg diff --git a/modular_skyrat/modules/aesthetics/airlock/sound/close.ogg b/modular_nova/modules/aesthetics/airlock/sound/close.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/sound/close.ogg rename to modular_nova/modules/aesthetics/airlock/sound/close.ogg diff --git a/modular_skyrat/modules/aesthetics/airlock/sound/close_force.ogg b/modular_nova/modules/aesthetics/airlock/sound/close_force.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/sound/close_force.ogg rename to modular_nova/modules/aesthetics/airlock/sound/close_force.ogg diff --git a/modular_skyrat/modules/aesthetics/airlock/sound/creaking.ogg b/modular_nova/modules/aesthetics/airlock/sound/creaking.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/sound/creaking.ogg rename to modular_nova/modules/aesthetics/airlock/sound/creaking.ogg diff --git a/modular_skyrat/modules/aesthetics/airlock/sound/open.ogg b/modular_nova/modules/aesthetics/airlock/sound/open.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/sound/open.ogg rename to modular_nova/modules/aesthetics/airlock/sound/open.ogg diff --git a/modular_skyrat/modules/aesthetics/airlock/sound/open_force.ogg b/modular_nova/modules/aesthetics/airlock/sound/open_force.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/sound/open_force.ogg rename to modular_nova/modules/aesthetics/airlock/sound/open_force.ogg diff --git a/modular_skyrat/modules/aesthetics/airlock/sound/toggle.ogg b/modular_nova/modules/aesthetics/airlock/sound/toggle.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/sound/toggle.ogg rename to modular_nova/modules/aesthetics/airlock/sound/toggle.ogg diff --git a/modular_nova/modules/aesthetics/airlock_machines/airlock_machines.dm b/modular_nova/modules/aesthetics/airlock_machines/airlock_machines.dm new file mode 100644 index 00000000000000..6727fad2608f34 --- /dev/null +++ b/modular_nova/modules/aesthetics/airlock_machines/airlock_machines.dm @@ -0,0 +1,11 @@ +/obj/machinery/airlock_controller + icon = 'modular_nova/modules/aesthetics/airlock_machines/airlock_machines.dmi' + +/obj/machinery/door_buttons/access_button + icon = 'modular_nova/modules/aesthetics/airlock_machines/airlock_machines.dmi' + +/obj/machinery/door_buttons/airlock_controller + icon = 'modular_nova/modules/aesthetics/airlock_machines/airlock_machines.dmi' + +/obj/machinery/embedded_controller/radio/simple_vent_controller + icon = 'modular_nova/modules/aesthetics/airlock_machines/airlock_machines.dmi' diff --git a/modular_skyrat/modules/aesthetics/airlock_machines/airlock_machines.dmi b/modular_nova/modules/aesthetics/airlock_machines/airlock_machines.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock_machines/airlock_machines.dmi rename to modular_nova/modules/aesthetics/airlock_machines/airlock_machines.dmi diff --git a/modular_nova/modules/aesthetics/apc/code/apc.dm b/modular_nova/modules/aesthetics/apc/code/apc.dm new file mode 100644 index 00000000000000..ace81b01c82c68 --- /dev/null +++ b/modular_nova/modules/aesthetics/apc/code/apc.dm @@ -0,0 +1,25 @@ +/obj/machinery/power/apc + icon = 'modular_nova/modules/aesthetics/apc/icons/apc.dmi' + +/obj/item/wallframe/apc + icon = 'modular_nova/modules/aesthetics/apc/icons/apc.dmi' + +/obj/machinery/power/apc/update_appearance(updates = check_updates()) + icon_update_needed = FALSE + if(!updates) + return FALSE + + . = ..() + // And now, separately for cleanness, the lighting changing + if(!update_state) + switch(charging) + if(APC_NOT_CHARGING) + set_light_color(LIGHT_COLOR_INTENSE_RED) + if(APC_CHARGING) + set_light_color(LIGHT_COLOR_ORANGE) + if(APC_FULLY_CHARGED) + set_light_color(LIGHT_COLOR_ELECTRIC_CYAN) + set_light(light_on_range) + return TRUE + + set_light(0) diff --git a/modular_skyrat/modules/aesthetics/apc/icons/apc.dmi b/modular_nova/modules/aesthetics/apc/icons/apc.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/apc/icons/apc.dmi rename to modular_nova/modules/aesthetics/apc/icons/apc.dmi diff --git a/modular_nova/modules/aesthetics/blast_door/code/blast_door.dm b/modular_nova/modules/aesthetics/blast_door/code/blast_door.dm new file mode 100644 index 00000000000000..47945baf8ffd19 --- /dev/null +++ b/modular_nova/modules/aesthetics/blast_door/code/blast_door.dm @@ -0,0 +1,16 @@ +/obj/machinery/door/poddoor + icon = 'modular_nova/modules/aesthetics/blast_door/icons/blast_door.dmi' + animation_sound = 'modular_nova/modules/aesthetics/blast_door/sound/blast_door.ogg' + +/obj/machinery/door/poddoor/shutters + var/door_open_sound = 'modular_nova/modules/aesthetics/blast_door/sound/shutters_open.ogg' + var/door_close_sound = 'modular_nova/modules/aesthetics/blast_door/sound/shutters_close.ogg' + +/obj/machinery/door/poddoor/shutters/do_animate(animation) + switch(animation) + if("opening") + flick("opening", src) + playsound(src, door_open_sound, 30, TRUE) + if("closing") + flick("closing", src) + playsound(src, door_close_sound, 30, TRUE) diff --git a/modular_skyrat/modules/aesthetics/blast_door/icons/blast_door.dmi b/modular_nova/modules/aesthetics/blast_door/icons/blast_door.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/blast_door/icons/blast_door.dmi rename to modular_nova/modules/aesthetics/blast_door/icons/blast_door.dmi diff --git a/modular_skyrat/modules/aesthetics/blast_door/sound/blast_door.ogg b/modular_nova/modules/aesthetics/blast_door/sound/blast_door.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/blast_door/sound/blast_door.ogg rename to modular_nova/modules/aesthetics/blast_door/sound/blast_door.ogg diff --git a/modular_skyrat/modules/aesthetics/blast_door/sound/shutters_close.ogg b/modular_nova/modules/aesthetics/blast_door/sound/shutters_close.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/blast_door/sound/shutters_close.ogg rename to modular_nova/modules/aesthetics/blast_door/sound/shutters_close.ogg diff --git a/modular_skyrat/modules/aesthetics/blast_door/sound/shutters_open.ogg b/modular_nova/modules/aesthetics/blast_door/sound/shutters_open.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/blast_door/sound/shutters_open.ogg rename to modular_nova/modules/aesthetics/blast_door/sound/shutters_open.ogg diff --git a/modular_nova/modules/aesthetics/bureaucracy/bureaucracy.dm b/modular_nova/modules/aesthetics/bureaucracy/bureaucracy.dm new file mode 100644 index 00000000000000..b86c80be51a2ce --- /dev/null +++ b/modular_nova/modules/aesthetics/bureaucracy/bureaucracy.dm @@ -0,0 +1,2 @@ +/obj/item/hand_labeler + icon = 'modular_nova/modules/aesthetics/bureaucracy/bureaucracy.dmi' diff --git a/modular_skyrat/modules/aesthetics/bureaucracy/bureaucracy.dmi b/modular_nova/modules/aesthetics/bureaucracy/bureaucracy.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/bureaucracy/bureaucracy.dmi rename to modular_nova/modules/aesthetics/bureaucracy/bureaucracy.dmi diff --git a/modular_nova/modules/aesthetics/camera/code/camera.dm b/modular_nova/modules/aesthetics/camera/code/camera.dm new file mode 100644 index 00000000000000..6b1547ceec2e2c --- /dev/null +++ b/modular_nova/modules/aesthetics/camera/code/camera.dm @@ -0,0 +1,8 @@ +/obj/machinery/camera + icon = 'modular_nova/modules/aesthetics/camera/icons/camera.dmi' + +/obj/item/wallframe/camera + icon = 'modular_nova/modules/aesthetics/camera/icons/camera.dmi' + +/obj/structure/camera_assembly + icon = 'modular_nova/modules/aesthetics/camera/icons/camera.dmi' diff --git a/modular_skyrat/modules/aesthetics/camera/icons/camera.dmi b/modular_nova/modules/aesthetics/camera/icons/camera.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/camera/icons/camera.dmi rename to modular_nova/modules/aesthetics/camera/icons/camera.dmi diff --git a/modular_skyrat/modules/aesthetics/cells/cell.dm b/modular_nova/modules/aesthetics/cells/cell.dm similarity index 84% rename from modular_skyrat/modules/aesthetics/cells/cell.dm rename to modular_nova/modules/aesthetics/cells/cell.dm index bb3696f04f8170..b47d2c451d07eb 100644 --- a/modular_skyrat/modules/aesthetics/cells/cell.dm +++ b/modular_nova/modules/aesthetics/cells/cell.dm @@ -1,5 +1,5 @@ /obj/item/stock_parts/cell - icon = 'modular_skyrat/modules/aesthetics/cells/cell.dmi' + icon = 'modular_nova/modules/aesthetics/cells/cell.dmi' /// The charge overlay icon file for the cell charge lights var/charging_icon = "cell_in" connector_type = null @@ -40,13 +40,13 @@ return var/icon_link if(!grown_battery) - icon_link = 'modular_skyrat/modules/aesthetics/cells/cell.dmi' + icon_link = 'modular_nova/modules/aesthetics/cells/cell.dmi' else icon_link = 'icons/obj/machines/cell_charger.dmi' . += mutable_appearance(icon_link, "cell-[charge_light_type]-o[(percent() >= 99.5) ? 2 : 1]") /obj/machinery/cell_charger - icon = 'modular_skyrat/modules/aesthetics/cells/cell.dmi' + icon = 'modular_nova/modules/aesthetics/cells/cell.dmi' /obj/machinery/cell_charger/update_overlays() . = ..() @@ -60,4 +60,4 @@ if(!charging.charging_icon) . += image(charging.icon, charging.icon_state) else - .+= image('modular_skyrat/modules/aesthetics/cells/cell.dmi', charging.charging_icon)\ + .+= image('modular_nova/modules/aesthetics/cells/cell.dmi', charging.charging_icon)\ diff --git a/modular_skyrat/modules/aesthetics/cells/cell.dmi b/modular_nova/modules/aesthetics/cells/cell.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/cells/cell.dmi rename to modular_nova/modules/aesthetics/cells/cell.dmi diff --git a/modular_nova/modules/aesthetics/chemical_tanks/chemical_tanks.dm b/modular_nova/modules/aesthetics/chemical_tanks/chemical_tanks.dm new file mode 100644 index 00000000000000..9b3b6c5f9597e0 --- /dev/null +++ b/modular_nova/modules/aesthetics/chemical_tanks/chemical_tanks.dm @@ -0,0 +1,23 @@ +/** + * Chemical Tank Aesthetic Overrides + */ + +// Water Tank +/obj/structure/reagent_dispensers/watertank + icon = 'modular_nova/modules/aesthetics/chemical_tanks/chemical_tanks.dmi' + +// Plumbed Tank +/obj/structure/reagent_dispensers/plumbed + icon = 'modular_nova/modules/aesthetics/chemical_tanks/chemical_tanks.dmi' + +// Fuel Tank +/obj/structure/reagent_dispensers/fueltank + icon = 'modular_nova/modules/aesthetics/chemical_tanks/chemical_tanks.dmi' + +// Firefighting Foam Tank +/obj/structure/reagent_dispensers/foamtank + icon = 'modular_nova/modules/aesthetics/chemical_tanks/chemical_tanks.dmi' + +// Potable Water Cooler +/obj/structure/reagent_dispensers/water_cooler + icon = 'modular_nova/modules/aesthetics/chemical_tanks/chemical_tanks.dmi' diff --git a/modular_skyrat/modules/aesthetics/chemical_tanks/chemical_tanks.dmi b/modular_nova/modules/aesthetics/chemical_tanks/chemical_tanks.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/chemical_tanks/chemical_tanks.dmi rename to modular_nova/modules/aesthetics/chemical_tanks/chemical_tanks.dmi diff --git a/modular_nova/modules/aesthetics/clothing/clothing.dm b/modular_nova/modules/aesthetics/clothing/clothing.dm new file mode 100644 index 00000000000000..9b314e11ad9c25 --- /dev/null +++ b/modular_nova/modules/aesthetics/clothing/clothing.dm @@ -0,0 +1,18 @@ + +/* +* HEAD +*/ + +/obj/item/clothing/head/costume/weddingveil + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/costume.dmi' + worn_icon_state = "weddingveil_temp" + //TG's is ugly as sin, until it's updated we have our own + +/* +* SHOES +*/ + +/obj/item/clothing/shoes/workboots/old + worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi' + icon_state = "workbootsold" diff --git a/modular_skyrat/modules/aesthetics/computer/code/computer.dm b/modular_nova/modules/aesthetics/computer/code/computer.dm similarity index 100% rename from modular_skyrat/modules/aesthetics/computer/code/computer.dm rename to modular_nova/modules/aesthetics/computer/code/computer.dm diff --git a/modular_skyrat/modules/aesthetics/computer/sound/keypress1.ogg b/modular_nova/modules/aesthetics/computer/sound/keypress1.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/computer/sound/keypress1.ogg rename to modular_nova/modules/aesthetics/computer/sound/keypress1.ogg diff --git a/modular_skyrat/modules/aesthetics/computer/sound/keypress2.ogg b/modular_nova/modules/aesthetics/computer/sound/keypress2.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/computer/sound/keypress2.ogg rename to modular_nova/modules/aesthetics/computer/sound/keypress2.ogg diff --git a/modular_skyrat/modules/aesthetics/computer/sound/keypress3.ogg b/modular_nova/modules/aesthetics/computer/sound/keypress3.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/computer/sound/keypress3.ogg rename to modular_nova/modules/aesthetics/computer/sound/keypress3.ogg diff --git a/modular_skyrat/modules/aesthetics/computer/sound/keypress4.ogg b/modular_nova/modules/aesthetics/computer/sound/keypress4.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/computer/sound/keypress4.ogg rename to modular_nova/modules/aesthetics/computer/sound/keypress4.ogg diff --git a/modular_skyrat/modules/aesthetics/computer/sound/keystroke4.ogg b/modular_nova/modules/aesthetics/computer/sound/keystroke4.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/computer/sound/keystroke4.ogg rename to modular_nova/modules/aesthetics/computer/sound/keystroke4.ogg diff --git a/modular_nova/modules/aesthetics/device/device.dm b/modular_nova/modules/aesthetics/device/device.dm new file mode 100644 index 00000000000000..a03d45751300fc --- /dev/null +++ b/modular_nova/modules/aesthetics/device/device.dm @@ -0,0 +1,18 @@ +/obj/item/t_scanner + icon = 'modular_nova/modules/aesthetics/device/device.dmi' + +/obj/item/analyzer + icon = 'modular_nova/modules/aesthetics/device/device.dmi' + +/obj/item/grenade/empgrenade + icon = 'modular_nova/modules/aesthetics/device/device.dmi' + +/obj/item/multitool + icon = 'modular_nova/modules/aesthetics/device/device.dmi' + +/obj/item/geiger_counter + icon = 'modular_nova/modules/aesthetics/device/device.dmi' + +// This needs default but is a subtype. Pain. +/obj/item/t_scanner/adv_mining_scanner + icon = 'icons/obj/devices/scanner.dmi' diff --git a/modular_skyrat/modules/aesthetics/device/device.dmi b/modular_nova/modules/aesthetics/device/device.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/device/device.dmi rename to modular_nova/modules/aesthetics/device/device.dmi diff --git a/modular_nova/modules/aesthetics/directwindow/code/window.dm b/modular_nova/modules/aesthetics/directwindow/code/window.dm new file mode 100644 index 00000000000000..31cd44ab898c2d --- /dev/null +++ b/modular_nova/modules/aesthetics/directwindow/code/window.dm @@ -0,0 +1,5 @@ +/obj/structure/window + icon = 'modular_nova/modules/aesthetics/directwindow/icons/directwindow.dmi' + +/obj/machinery/door/window + icon = 'modular_nova/modules/aesthetics/directwindow/icons/directwindow.dmi' diff --git a/modular_skyrat/modules/aesthetics/directwindow/icons/directwindow.dmi b/modular_nova/modules/aesthetics/directwindow/icons/directwindow.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/directwindow/icons/directwindow.dmi rename to modular_nova/modules/aesthetics/directwindow/icons/directwindow.dmi diff --git a/modular_nova/modules/aesthetics/disposals/code/disposals.dm b/modular_nova/modules/aesthetics/disposals/code/disposals.dm new file mode 100644 index 00000000000000..0c63b888168a63 --- /dev/null +++ b/modular_nova/modules/aesthetics/disposals/code/disposals.dm @@ -0,0 +1,2 @@ +/obj/machinery/disposal + icon = 'modular_nova/modules/aesthetics/disposals/icons/disposals.dmi' diff --git a/modular_skyrat/modules/aesthetics/disposals/icons/disposals.dmi b/modular_nova/modules/aesthetics/disposals/icons/disposals.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/disposals/icons/disposals.dmi rename to modular_nova/modules/aesthetics/disposals/icons/disposals.dmi diff --git a/modular_nova/modules/aesthetics/emitter/code/emitter.dm b/modular_nova/modules/aesthetics/emitter/code/emitter.dm new file mode 100644 index 00000000000000..bbbf5c9d3ba8ee --- /dev/null +++ b/modular_nova/modules/aesthetics/emitter/code/emitter.dm @@ -0,0 +1,13 @@ +/obj/machinery/power/emitter + icon = 'modular_nova/modules/aesthetics/emitter/icons/emitter.dmi' + +/obj/machinery/field/containment + icon = 'modular_nova/modules/aesthetics/emitter/icons/emitter.dmi' + +/obj/machinery/field/generator + icon = 'modular_nova/modules/aesthetics/emitter/icons/field_generator.dmi' + + +/obj/machinery/power/rad_collector + icon = 'modular_nova/modules/aesthetics/emitter/icons/emitter.dmi' + diff --git a/modular_skyrat/modules/aesthetics/emitter/icons/emitter.dmi b/modular_nova/modules/aesthetics/emitter/icons/emitter.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/emitter/icons/emitter.dmi rename to modular_nova/modules/aesthetics/emitter/icons/emitter.dmi diff --git a/modular_skyrat/modules/aesthetics/emitter/icons/field_generator.dmi b/modular_nova/modules/aesthetics/emitter/icons/field_generator.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/emitter/icons/field_generator.dmi rename to modular_nova/modules/aesthetics/emitter/icons/field_generator.dmi diff --git a/modular_skyrat/modules/aesthetics/extinguisher/code/extinguisher.dm b/modular_nova/modules/aesthetics/extinguisher/code/extinguisher.dm similarity index 86% rename from modular_skyrat/modules/aesthetics/extinguisher/code/extinguisher.dm rename to modular_nova/modules/aesthetics/extinguisher/code/extinguisher.dm index e40051c6f09cac..2b612e1bd28bd8 100644 --- a/modular_skyrat/modules/aesthetics/extinguisher/code/extinguisher.dm +++ b/modular_nova/modules/aesthetics/extinguisher/code/extinguisher.dm @@ -1,9 +1,9 @@ /obj/structure/extinguisher_cabinet - icon = 'modular_skyrat/modules/aesthetics/extinguisher/icons/extinguisher.dmi' + icon = 'modular_nova/modules/aesthetics/extinguisher/icons/extinguisher.dmi' icon_state = "extinguisher_standard_closed" /obj/item/wallframe/extinguisher_cabinet - icon = 'modular_skyrat/modules/aesthetics/extinguisher/icons/extinguisher.dmi' + icon = 'modular_nova/modules/aesthetics/extinguisher/icons/extinguisher.dmi' /obj/structure/extinguisher_cabinet/Initialize(mapload, ndir, building) . = ..() diff --git a/modular_skyrat/modules/aesthetics/extinguisher/icons/extinguisher.dmi b/modular_nova/modules/aesthetics/extinguisher/icons/extinguisher.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/extinguisher/icons/extinguisher.dmi rename to modular_nova/modules/aesthetics/extinguisher/icons/extinguisher.dmi diff --git a/modular_nova/modules/aesthetics/firealarm/code/firealarm.dm b/modular_nova/modules/aesthetics/firealarm/code/firealarm.dm new file mode 100644 index 00000000000000..4c94a6838c66ab --- /dev/null +++ b/modular_nova/modules/aesthetics/firealarm/code/firealarm.dm @@ -0,0 +1,2 @@ +/obj/machinery/firealarm + icon = 'modular_nova/modules/aesthetics/firealarm/icons/firealarm.dmi' diff --git a/modular_skyrat/modules/aesthetics/firealarm/icons/firealarm.dmi b/modular_nova/modules/aesthetics/firealarm/icons/firealarm.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/firealarm/icons/firealarm.dmi rename to modular_nova/modules/aesthetics/firealarm/icons/firealarm.dmi diff --git a/modular_skyrat/modules/aesthetics/firealarm/sound/alarm_fire.ogg b/modular_nova/modules/aesthetics/firealarm/sound/alarm_fire.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/firealarm/sound/alarm_fire.ogg rename to modular_nova/modules/aesthetics/firealarm/sound/alarm_fire.ogg diff --git a/modular_nova/modules/aesthetics/firedoor/code/firedoor.dm b/modular_nova/modules/aesthetics/firedoor/code/firedoor.dm new file mode 100644 index 00000000000000..8ed0be1c7494c2 --- /dev/null +++ b/modular_nova/modules/aesthetics/firedoor/code/firedoor.dm @@ -0,0 +1,32 @@ +/obj/machinery/door/firedoor + name = "emergency shutter" + desc = "Emergency air-tight shutter, capable of sealing off breached areas. This one has a glass panel. It has a mechanism to open it with just your hands." + icon = 'modular_nova/modules/aesthetics/firedoor/icons/firedoor_glass.dmi' + var/door_open_sound = 'modular_nova/modules/aesthetics/firedoor/sound/firedoor_open.ogg' + var/door_close_sound = 'modular_nova/modules/aesthetics/firedoor/sound/firedoor_open.ogg' + +/obj/machinery/door/firedoor/update_overlays() + . = ..() + if(istype(src, /obj/machinery/door/firedoor/border_only)) + return + if(density) // if the door is closed, add the bottom blinking overlay -- and only if it's closed + . += "firelock_alarm_type_bottom" + +/obj/machinery/door/firedoor/open() + playsound(loc, door_open_sound, 100, TRUE) + return ..() + +/obj/machinery/door/firedoor/close() + playsound(loc, door_close_sound, 100, TRUE) + return ..() + +/obj/machinery/door/firedoor/heavy + name = "heavy emergency shutter" + desc = "Emergency air-tight shutter, capable of sealing off breached areas. It has a mechanism to open it with just your hands." + icon = 'modular_nova/modules/aesthetics/firedoor/icons/firedoor.dmi' + +/obj/effect/spawner/structure/window/reinforced/no_firelock + spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/fulltile) + +/obj/machinery/door/firedoor/closed + alarm_type = FIRELOCK_ALARM_TYPE_GENERIC diff --git a/modular_skyrat/modules/aesthetics/firedoor/icons/firedoor.dmi b/modular_nova/modules/aesthetics/firedoor/icons/firedoor.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/firedoor/icons/firedoor.dmi rename to modular_nova/modules/aesthetics/firedoor/icons/firedoor.dmi diff --git a/modular_skyrat/modules/aesthetics/firedoor/icons/firedoor_glass.dmi b/modular_nova/modules/aesthetics/firedoor/icons/firedoor_glass.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/firedoor/icons/firedoor_glass.dmi rename to modular_nova/modules/aesthetics/firedoor/icons/firedoor_glass.dmi diff --git a/modular_skyrat/modules/aesthetics/firedoor/sound/firedoor_open.ogg b/modular_nova/modules/aesthetics/firedoor/sound/firedoor_open.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/firedoor/sound/firedoor_open.ogg rename to modular_nova/modules/aesthetics/firedoor/sound/firedoor_open.ogg diff --git a/modular_skyrat/modules/aesthetics/flag/code/signs_flags.dm b/modular_nova/modules/aesthetics/flag/code/signs_flags.dm similarity index 81% rename from modular_skyrat/modules/aesthetics/flag/code/signs_flags.dm rename to modular_nova/modules/aesthetics/flag/code/signs_flags.dm index e8e4a4319896bd..c2990f0c034485 100644 --- a/modular_skyrat/modules/aesthetics/flag/code/signs_flags.dm +++ b/modular_nova/modules/aesthetics/flag/code/signs_flags.dm @@ -1,7 +1,7 @@ /obj/structure/sign/flag name = "blank flag" desc = "The flag of nothing. It has nothing on it. Magnificient." - icon = 'modular_skyrat/modules/aesthetics/flag/icons/flags.dmi' + icon = 'modular_nova/modules/aesthetics/flag/icons/flags.dmi' icon_state = "flag_coder" buildable_sign = FALSE custom_materials = null @@ -16,7 +16,7 @@ /obj/structure/sign/flag/MouseDrop(over_object, src_location, over_location) . = ..() if(over_object == usr && Adjacent(usr)) - if(!item_flag || src.flags_1 & NODECONSTRUCT_1) + if(!item_flag || src.obj_flags & NO_DECONSTRUCTION) return if(!usr.can_perform_action(src, NEED_DEXTERITY)) return @@ -33,8 +33,8 @@ item_flag = /obj/item/sign/flag/ssc /obj/structure/sign/flag/nanotrasen - name = "flag of Nanotrasen" - desc = "The official corporate flag of Nanotrasen. Mostly flown as a ceremonial piece, or to mark land on a new frontier." + name = "flag of Symphionia" + desc = "The official corporate flag of Symphionia. Mostly flown as a ceremonial piece, or to mark land on a new frontier." icon_state = "flag_nt" item_flag = /obj/item/sign/flag/nanotrasen @@ -91,17 +91,25 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/flag/azulea, 32) MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/flag/usa, 32) /obj/structure/sign/flag/syndicate - name = "flag of the Syndicate" - desc = "The flag of the Sothran Syndicate. Previously used by the Sothran people as a way of declaring opposition against the Nanotrasen, now it became an intergalactic symbol of the same, yet way more skewed purpose, as more groups of interest have joined the rebellion's side for their own gain." + name = "flag of the Symphionia" + desc = "The flag of the Sothran Symphionia. Previously used by the Sothran people as a way of declaring opposition against the Symphionia, now it became an intergalactic symbol of the same, yet way more skewed purpose, as more groups of interest have joined the rebellion's side for their own gain." icon_state = "flag_syndi" item_flag = /obj/item/sign/flag/syndicate MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/flag/syndicate, 32) +/obj/structure/sign/flag/interdyne + name = "flag of Interdyne" + desc = "The corporate flag of Interdyne Pharmaceuticals. It is, essentially, a clean white bedsheet. It's either the best or worst flag you've ever seen." + icon_state = "flag_coder" + item_flag = /obj/item/sign/flag/interdyne + +MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/flag/interdyne, 32) + /obj/item/sign/flag name = "folded blank flag" desc = "The folded flag of nothing. It has nothing on it. Beautiful." - icon = 'modular_skyrat/modules/aesthetics/flag/icons/flags.dmi' + icon = 'modular_nova/modules/aesthetics/flag/icons/flags.dmi' icon_state = "folded_coder" sign_path = /obj/structure/sign/flag is_editable = FALSE @@ -118,8 +126,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/flag/syndicate, 32) return /obj/item/sign/flag/nanotrasen - name = "folded flag of the Nanotrasen" - desc = "The folded flag of the Nanotrasen." + name = "folded flag of the Symphionia" + desc = "The folded flag of the Symphionia." icon_state = "folded_nt" sign_path = /obj/structure/sign/flag/nanotrasen @@ -173,7 +181,16 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/flag/syndicate, 32) sign_path = /obj/structure/sign/flag/usa /obj/item/sign/flag/syndicate - name = "folded flag of the Syndicate" - desc = "The folded flag of the Sothran Syndicate." + name = "folded flag of the Symphionia" + desc = "The folded flag of the Sothran Symphionia." icon_state = "folded_syndi" sign_path = /obj/structure/sign/flag/syndicate + +/obj/item/sign/flag/interdyne + name = "folded flag of the Syndicate" + desc = "The folded flag of Interdyne Pharmaceutics." + icon_state = "folded_coder" + sign_path = /obj/structure/sign/flag/interdyne + special_desc_requirement = EXAMINE_CHECK_JOB + special_desc_jobs = list(JOB_MIME) // this will probably never happen. but it will amuse someone when it does. + special_desc = "The folded flag of Interdyne Pharmaceuticals. For some reason, it reminds you of the home of the mimes." diff --git a/modular_skyrat/modules/aesthetics/flag/icons/flags.dmi b/modular_nova/modules/aesthetics/flag/icons/flags.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/flag/icons/flags.dmi rename to modular_nova/modules/aesthetics/flag/icons/flags.dmi diff --git a/modular_skyrat/modules/aesthetics/floors/code/floors.dm b/modular_nova/modules/aesthetics/floors/code/floors.dm similarity index 92% rename from modular_skyrat/modules/aesthetics/floors/code/floors.dm rename to modular_nova/modules/aesthetics/floors/code/floors.dm index 8190f8abb9e3e4..63c47cf790d740 100644 --- a/modular_skyrat/modules/aesthetics/floors/code/floors.dm +++ b/modular_nova/modules/aesthetics/floors/code/floors.dm @@ -1,5 +1,5 @@ /turf/open/floor - icon = 'modular_skyrat/modules/aesthetics/floors/icons/floors.dmi' + icon = 'modular_nova/modules/aesthetics/floors/icons/floors.dmi' //Removes redundant textured stuff from this radial, as all of ours are textured by default /obj/item/stack/tile/iron @@ -59,7 +59,7 @@ /turf/open/indestructible/cobble name = "cobblestone path" desc = "A simple but beautiful path made of various sized stones." - icon = 'modular_skyrat/modules/aesthetics/floors/icons/floors.dmi' + icon = 'modular_nova/modules/aesthetics/floors/icons/floors.dmi' icon_state = "cobble" baseturfs = /turf/open/indestructible/cobble footstep = FOOTSTEP_FLOOR @@ -76,3 +76,6 @@ /turf/open/floor/plating/reinforced icon = 'icons/turf/floors.dmi' + +/turf/open/floor/iron/white/textured_large/airless + initial_gas_mix = AIRLESS_ATMOS diff --git a/modular_skyrat/modules/aesthetics/floors/icons/floors.dmi b/modular_nova/modules/aesthetics/floors/icons/floors.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/floors/icons/floors.dmi rename to modular_nova/modules/aesthetics/floors/icons/floors.dmi diff --git a/modular_nova/modules/aesthetics/furniture/bed.dm b/modular_nova/modules/aesthetics/furniture/bed.dm new file mode 100644 index 00000000000000..ede922502301a1 --- /dev/null +++ b/modular_nova/modules/aesthetics/furniture/bed.dm @@ -0,0 +1,110 @@ +/obj/structure/bed/double + name = "double bed" + icon_state = "doublebed" + icon = 'modular_nova/modules/aesthetics/furniture/furniture.dmi' + +/obj/item/bedsheet/double + icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi' + icon_state = "doublesheet" + slot_flags = null + +/obj/item/bedsheet/blue/double + icon_state = "doublesheetblue" + icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi' + slot_flags = null + +/obj/item/bedsheet/green/double + icon_state = "doublesheetgreen" + icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi' + slot_flags = null + + +/obj/item/bedsheet/orange/double + icon_state = "doublesheetorange" + icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi' + slot_flags = null + +/obj/item/bedsheet/purple/double + icon_state = "doublesheetpurple" + icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi' + slot_flags = null + +/obj/item/bedsheet/rainbow/double //all the way across the sky. + icon_state = "doublesheetrainbow" + icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi' + slot_flags = null + +/obj/item/bedsheet/red/double + icon_state = "doublesheetred" + icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi' + slot_flags = null + +/obj/item/bedsheet/yellow/double + icon_state = "doublesheetyellow" + icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi' + slot_flags = null + +/obj/item/bedsheet/mime/double + icon_state = "doublesheetmime" + icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi' + slot_flags = null + +/obj/item/bedsheet/clown/double + icon_state = "doublesheetclown" + icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi' + slot_flags = null + +/obj/item/bedsheet/captain/double + icon_state = "doublesheetcaptain" + icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi' + slot_flags = null + +/obj/item/bedsheet/rd/double + icon_state = "doublesheetrd" + icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi' + slot_flags = null + +/obj/item/bedsheet/hos/double + icon_state = "doublesheethos" + icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi' + slot_flags = null + +/obj/item/bedsheet/hop/double + icon_state = "doublesheethop" + icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi' + slot_flags = null + +/obj/item/bedsheet/ce/double + icon_state = "doublesheetce" + icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi' + slot_flags = null + +/obj/item/bedsheet/brown/double + icon_state = "doublesheetbrown" + icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi' + slot_flags = null + +/obj/item/bedsheet/ian/double + icon_state = "doublesheetian" + icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi' + slot_flags = null + +/obj/item/bedsheet/centcom/double + icon_state = "doublesheetcc" + icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi' + slot_flags = null + +/obj/item/bedsheet/nanotrasen/double + icon_state = "doublesheetNT" + icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi' + slot_flags = null + +/obj/item/bedsheet/qm/double + icon_state = "doublesheetqm" + icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi' + slot_flags = null + +/obj/item/bedsheet/cmo/double + icon_state = "doublesheetCMO" + icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi' + slot_flags = null diff --git a/modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi b/modular_nova/modules/aesthetics/furniture/bedsheets.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi rename to modular_nova/modules/aesthetics/furniture/bedsheets.dmi diff --git a/modular_skyrat/modules/aesthetics/furniture/furniture.dmi b/modular_nova/modules/aesthetics/furniture/furniture.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/furniture/furniture.dmi rename to modular_nova/modules/aesthetics/furniture/furniture.dmi diff --git a/modular_nova/modules/aesthetics/guns/code/guns.dm b/modular_nova/modules/aesthetics/guns/code/guns.dm new file mode 100644 index 00000000000000..32a6313e4fcc39 --- /dev/null +++ b/modular_nova/modules/aesthetics/guns/code/guns.dm @@ -0,0 +1,565 @@ +// open to suggestions on where to put these overrides +// hugely not a fan of this but we do what we gotta + +/* + * gotta redefine EVERY goddamn ammo type irt to new mat costs for the ammobench's sake + * previously, SMALL_MATERIAL_AMOUNT was 100 units out of 2000 from a sheet (5%) + * so the old cost of SMALL_MATERIAL_AMOUNT * 5 was 500/2000 from a sheet (25%) + * experimental material balance PR makes it so that SMALL_MATERIAL_AMOUNT is actually 10 units out of 100 (10%) + * which made it so that the old assumed value of SMALL_MATERIAL_AMOUNT * 5 is 50/100 (50% of a sheet for a single bullet) (suboptimal) + * these updated, more consistent defines make it so that a single round's total materials should total 20% of a sheet, or 2 SMALL_MATERIAL_AMOUNT +*/ + +#define AMMO_MATS_BASIC list( \ + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 2, \ +) + +#define AMMO_MATS_AP list( \ + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \ + /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 0.4, \ +) + +#define AMMO_MATS_TEMP list( \ + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \ + /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 0.4, \ +) + +#define AMMO_MATS_EMP list( \ + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \ + /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 0.4, \ +) + +#define AMMO_MATS_PHASIC list( \ + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \ + /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 0.4, \ +) + +#define AMMO_MATS_TRAC list( \ + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \ + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 0.2, \ + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 0.2, \ +) + +#define AMMO_MATS_HOMING list( \ + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1, \ + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 0.2, \ + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 0.2, \ + /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 0.2, \ + /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 0.2, \ + /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 0.2, \ +) + +// for .35 Sol Ripper +#define AMMO_MATS_RIPPER list( \ + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \ + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 0.4, \ +) + +/obj/item/ammo_casing + custom_materials = AMMO_MATS_BASIC + +/obj/item/ammo_box + /// When inserted into an ammo workbench, does this ammo box check for parent ammunition to search for subtypes of? Relevant for surplus clips, multi-sprite magazines. + /// Maybe don't enable this for shotgun ammo boxes. + var/multitype = TRUE + + +///GUN SPRITE OVERWRITES +/obj/item/gun/energy/ionrifle + icon = 'modular_nova/modules/aesthetics/guns/icons/energy.dmi' + lefthand_file = 'modular_nova/modules/aesthetics/guns/icons/guns_lefthand.dmi' + righthand_file = 'modular_nova/modules/aesthetics/guns/icons/guns_righthand.dmi' + +/obj/item/gun/energy/ionrifle/carbine + icon = 'icons/obj/weapons/guns/energy.dmi' + lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' + +/obj/item/gun/ballistic/shotgun/automatic/combat + name = "\improper Peacekeeper combat shotgun" + desc = "A semi-automatic Nanotrasen Peacekeeper shotgun with tactical furnishing and heavier internals meant for sustained fire. Lacks a threaded barrel." + icon = 'modular_nova/modules/aesthetics/guns/icons/guns.dmi' + worn_icon = 'modular_nova/modules/aesthetics/guns/icons/guns_back.dmi' + lefthand_file = 'modular_nova/modules/aesthetics/guns/icons/guns_lefthand.dmi' + righthand_file = 'modular_nova/modules/aesthetics/guns/icons/guns_righthand.dmi' + inhand_icon_state = "shotgun_combat" + inhand_x_dimension = 32 + inhand_y_dimension = 32 + +// de-overrides this particular gun, it uses the tg file +/obj/item/gun/ballistic/shotgun/automatic/combat/compact + icon = 'icons/obj/weapons/guns/ballistic.dmi' + lefthand_file = 'icons/mob/inhands/weapons/64x_guns_left.dmi' + righthand_file = 'icons/mob/inhands/weapons/64x_guns_right.dmi' + inhand_x_dimension = 64 + inhand_y_dimension = 64 + worn_icon = null + +/obj/item/gun/grenadelauncher + icon = 'modular_nova/modules/aesthetics/guns/icons/guns.dmi' + lefthand_file = 'modular_nova/modules/aesthetics/guns/icons/guns_lefthand.dmi' + righthand_file = 'modular_nova/modules/aesthetics/guns/icons/guns_righthand.dmi' + +/obj/item/gun/ballistic/automatic/pistol/m1911 + icon = 'modular_nova/modules/aesthetics/guns/icons/guns.dmi' + inhand_icon_state = "colt" + lefthand_file = 'modular_nova/modules/aesthetics/guns/icons/guns_lefthand.dmi' + righthand_file = 'modular_nova/modules/aesthetics/guns/icons/guns_righthand.dmi' + +/obj/item/gun/ballistic/automatic/c20r + icon = 'modular_nova/modules/aesthetics/guns/icons/guns.dmi' + +/obj/item/gun/ballistic/automatic/m90 + icon = 'modular_nova/modules/aesthetics/guns/icons/guns.dmi' + +/obj/item/gun/ballistic/automatic/pistol/aps + icon = 'modular_nova/modules/aesthetics/guns/icons/guns.dmi' + +/obj/item/gun/ballistic/automatic/pistol + icon = 'modular_nova/modules/aesthetics/guns/icons/guns.dmi' + +/obj/item/gun/ballistic/automatic/pistol/deagle/regal + icon = 'icons/obj/weapons/guns/ballistic.dmi' + +/obj/item/gun/energy/e_gun/nuclear + icon = 'modular_nova/modules/aesthetics/guns/icons/nucgun.dmi' + ammo_x_offset = 2 + lefthand_file = 'modular_nova/modules/aesthetics/guns/icons/guns_lefthand.dmi' + righthand_file = 'modular_nova/modules/aesthetics/guns/icons/guns_righthand.dmi' + worn_icon_state = "gun" + worn_icon = null + +/obj/item/gun/energy/e_gun/nuclear/rainbow + name = "fantastic energy gun" + desc = "An energy gun with an experimental miniaturized nuclear reactor that automatically charges the internal power cell. This one seems quite fancy!" + ammo_type = list(/obj/item/ammo_casing/energy/laser/rainbow, /obj/item/ammo_casing/energy/disabler/rainbow) + +/obj/item/ammo_casing/energy/laser/rainbow + icon = 'modular_nova/modules/aesthetics/guns/icons/nucgun.dmi' + icon_state = "laser" + select_name = "kill" + projectile_type = /obj/projectile/beam/laser/rainbow + +/obj/projectile/beam/laser/rainbow + icon = 'modular_nova/modules/aesthetics/guns/icons/nucgun.dmi' + icon_state = "laser" + +/obj/item/ammo_casing/energy/disabler/rainbow + icon = 'modular_nova/modules/aesthetics/guns/icons/nucgun.dmi' + icon_state = "laser" + select_name = "disable" + projectile_type = /obj/projectile/beam/disabler/rainbow + +/obj/projectile/beam/disabler/rainbow + icon = 'modular_nova/modules/aesthetics/guns/icons/nucgun.dmi' + icon_state = "laser" + +/obj/item/gun/energy/e_gun/nuclear/emag_act(mob/user, obj/item/card/emag/E) + . = ..() + if(obj_flags & EMAGGED) + return FALSE + if(pin) + to_chat(user, span_warning("You probably want to do this on a new gun!")) + return FALSE + to_chat(user, "<font color='#ff2700'>T</font><font color='#ff4e00'>h</font><font color='#ff7500'>e</font> <font color='#ffc400'>g</font><font color='#ffeb00'>u</font><font color='#ebff00'>n</font> <font color='#9cff00'>s</font><font color='#75ff00'>u</font><font color='#4eff00'>d</font><font color='#27ff00'>d</font><font color='#00ff00'>e</font><font color='#00ff27'>n</font><font color='#00ff4e'>l</font><font color='#00ff75'>y</font> <font color='#00ffc4'>f</font><font color='#00ffeb'>e</font><font color='#00ebff'>e</font><font color='#00c4ff'>l</font><font color='#009cff'>s</font> <font color='#004eff'>q</font><font color='#0027ff'>u</font><font color='#0000ff'>i</font><font color='#2700ff'>t</font><font color='#4e00ff'>e</font> <font color='#9c00ff'>f</font><font color='#c400ff'>a</font><font color='#eb00ff'>n</font><font color='#ff00eb'>t</font><font color='#ff00c4'>a</font><font color='#ff009c'>s</font><font color='#ff0075'>t</font><font color='#ff004e'>i</font><font color='#ff0027'>c</font><font color='#ff0000'>!</font>") + new /obj/item/gun/energy/e_gun/nuclear/rainbow(get_turf(user)) + obj_flags |= EMAGGED + qdel(src) + return TRUE + +/obj/item/gun/energy/e_gun/nuclear/rainbow/update_overlays() + . = ..() + . += "[icon_state]_emagged" + +/obj/item/gun/energy/e_gun/nuclear/rainbow/emag_act(mob/user, obj/item/card/emag/E) + return FALSE + +//BEAM SOUNDS +/obj/item/ammo_casing/energy + fire_sound = 'modular_nova/modules/aesthetics/guns/sound/laser.ogg' + +/obj/item/ammo_casing/energy/laser/pulse + fire_sound = 'modular_nova/modules/aesthetics/guns/sound/pulse.ogg' + +/obj/item/gun/energy/xray + fire_sound_volume = 100 + +/obj/item/ammo_casing/energy/xray + fire_sound = 'modular_nova/modules/aesthetics/guns/sound/xray_laser.ogg' + +/obj/item/ammo_casing/energy/laser/accelerator + fire_sound = 'modular_nova/modules/aesthetics/guns/sound/laser_cannon_fire.ogg' + +/obj/item/gun/ballistic/automatic/sniper_rifle + name = "sniper rifle" + desc = "A long ranged weapon that does significant damage. No, you can't quickscope." + icon = 'modular_nova/modules/aesthetics/guns/icons/guns_gubman2.dmi' + icon_state = "sniper" + w_class = WEIGHT_CLASS_BULKY + inhand_icon_state = "sniper" + worn_icon_state = null + fire_sound = 'sound/weapons/gun/sniper/shot.ogg' + fire_sound_volume = 90 + load_sound = 'sound/weapons/gun/sniper/mag_insert.ogg' + rack_sound = 'sound/weapons/gun/sniper/rack.ogg' + suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg' + recoil = 2 + weapon_weight = WEAPON_HEAVY + accepted_magazine_type = /obj/item/ammo_box/magazine/sniper_rounds + fire_delay = 6 SECONDS + burst_size = 1 + w_class = WEIGHT_CLASS_NORMAL + slot_flags = ITEM_SLOT_BACK + actions_types = list() + mag_display = TRUE + suppressor_x_offset = 3 + suppressor_y_offset = 3 + +/obj/item/gun/ballistic/automatic/sniper_rifle/Initialize(mapload) + . = ..() + AddComponent(/datum/component/scope, range_modifier = 2) + +/obj/item/gun/ballistic/automatic/sniper_rifle/reset_semicd() + . = ..() + if(suppressed) + playsound(src, 'sound/machines/eject.ogg', 25, TRUE, ignore_walls = FALSE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0) + else + playsound(src, 'sound/machines/eject.ogg', 50, TRUE) + +/obj/item/gun/ballistic/automatic/sniper_rifle/syndicate + name = "syndicate sniper rifle" + desc = "An illegally modified .50 cal sniper rifle with suppression compatibility. Quickscoping still doesn't work." + icon = 'modular_nova/modules/aesthetics/guns/icons/guns_gubman2.dmi' + icon_state = "sniper2" + worn_icon_state = "sniper" + fire_delay = 5.5 SECONDS + can_suppress = TRUE + can_unsuppress = TRUE + pin = /obj/item/firing_pin/implant/pindicate + +/obj/item/gun/ballistic/automatic/sniper_rifle/modular + name = "AUS-107 anti-materiel rifle" + desc = "A devastating Aussec Armory heavy sniper rifle, fitted with a modern scope." + icon = 'modular_nova/modules/aesthetics/guns/icons/guns_gubman2.dmi' + icon_state = "sniper" + worn_icon_state = "sniper" + fire_sound = 'modular_nova/modules/aesthetics/guns/sound/sniperrifle.ogg' + suppressed_sound = 'modular_nova/modules/aesthetics/guns/sound/sniperrifle_s.ogg' + w_class = WEIGHT_CLASS_BULKY + can_suppress = FALSE + +/obj/item/gun/ballistic/automatic/sniper_rifle/modular/syndicate + name = "'Caracal' anti-materiel rifle" //we flop out + desc = "A sleek, light bullpup .416 Stabilis sniper rifle with a reciprocating barrel, nicknamed 'Caracal' by Scarborough Arms. Its compact folding parts make it able to fit into a backpack, and its modular barrel can have a suppressor installed within it rather than as a muzzle extension. Its advanced scope accounts for all ballistic inaccuracies of a reciprocating barrel." + icon_state = "sysniper" + fire_sound = 'modular_nova/modules/aesthetics/guns/sound/sniperrifle.ogg' + suppressed_sound = 'modular_nova/modules/aesthetics/guns/sound/sniperrifle_s.ogg' + fire_delay = 4 SECONDS //Delay reduced thanks to recoil absorption + burst_size = 0.5 + recoil = 1 + can_suppress = TRUE + can_unsuppress = TRUE + weapon_weight = WEAPON_LIGHT + +/obj/item/gun/ballistic/automatic/sniper_rifle/modular/syndicate/give_manufacturer_examine() + AddElement(/datum/element/manufacturer_examine, COMPANY_SCARBOROUGH) + +/obj/item/gun/ballistic/automatic/sniper_rifle/modular/blackmarket //Normal sniper but epic + name = "SA-107 anti-materiel rifle" + desc = "An illegal Scarborough Arms rendition of an Aussec Armory sniper rifle. This one has been fitted with a heavy duty scope, a sturdier stock, and has a removable muzzle brake that allows easy attachment of suppressors." + icon_state = "sniper2" + fire_sound = 'modular_nova/modules/aesthetics/guns/sound/sniperrifle.ogg' + suppressed_sound = 'modular_nova/modules/aesthetics/guns/sound/sniperrifle_s.ogg' + fire_sound_volume = 90 + vary_fire_sound = FALSE + load_sound = 'sound/weapons/gun/sniper/mag_insert.ogg' + rack_sound = 'sound/weapons/gun/sniper/rack.ogg' + w_class = WEIGHT_CLASS_NORMAL + can_suppress = TRUE + can_unsuppress = TRUE + recoil = 1.8 + weapon_weight = WEAPON_HEAVY + accepted_magazine_type = /obj/item/ammo_box/magazine/sniper_rounds + fire_delay = 55 //Slightly smaller than standard sniper + burst_size = 1 + slot_flags = ITEM_SLOT_BACK + mag_display = TRUE + +/obj/item/gun/ballistic/automatic/ar/modular + name = "\improper NT ARG-63" + desc = "Nanotrasen's prime ballistic option based on the Stoner design, fitted with a light polymer frame and other tactical furniture, and chambered in .277 Aestus - nicknamed 'Boarder' by Special Operations teams." + icon = 'modular_nova/modules/aesthetics/guns/icons/guns_gubman2.dmi' + icon_state = "arg" + inhand_icon_state = "arg" + can_suppress = FALSE + +/obj/item/gun/ballistic/automatic/surplus + name = "\improper Type-69 surplus rifle" + desc = "One of countless obsolete ballistic rifles that still sees use as a cheap deterrent. Uses 10mm ammo and its bulky frame prevents one-hand firing." + icon = 'modular_nova/modules/aesthetics/guns/icons/guns.dmi' + +// GUBMAN3 - FULL BULLET RENAME +// i loathe the above + +// overrides for 10mm ammo in modular_nova\modules\sec_haul\code\guns\bullets.dm + +// overrides for .310 Strilka-derived ammo, e.g. lionhunter ammo, because you don't want to give security the ability to print infinite wallhack ammo, right? +/obj/item/ammo_casing/strilka310/lionhunter + name = "hunter's rifle round" + can_be_printed = FALSE // trust me bro you dont wanna give security homing wallhack Better Rubbers + +/obj/item/ammo_casing/strilka310/enchanted + name = "enchanted rifle round" + can_be_printed = FALSE // these are Really Really Better Rubbers + +// overrides for tgcode's .223 (formerly 5.56), used in the M90-gl - renamed to .277 Aestus +/obj/item/ammo_casing/a223 + name = ".277 Aestus casing" + desc = "A .277 bullet casing." + +/obj/item/ammo_casing/a223/phasic + name = ".277 Aestus phasic casing" + desc = "A .277 Aestus bullet casing.\ + <br><br>\ + <i>PHASIC: Ignores all surfaces except organic matter.</i>" + advanced_print_req = TRUE + custom_materials = AMMO_MATS_PHASIC + +// shotgun ammo overrides moved to modular_nova\modules\shotgunrebalance\code\shotgun.dm + +// overrides for tgcode .50cal, used in their sniper/anti-materiel rifles +/obj/item/ammo_casing/p50 + name = ".416 Stabilis casing" + desc = "A .416 bullet casing." + advanced_print_req = TRUE // you are NOT printing more ammo for this without effort. + // then again the offstations with ammo printers and sniper rifles come with an ammo disk anyway, so + +/obj/item/ammo_casing/p50/surplus + name = ".416 Stabilis surplus casing" + desc = "A .416 bullet casing. Intentionally underloaded, but still quite painful to be shot with.\ + <br><br>\ + <i>SURPLUS/UNDERLOAD: Lacks armor penetration capabilities, contact-stun, or innate dismemberment ability. Still incredibly painful to be hit by.</i>" + projectile_type = /obj/projectile/bullet/p50/surplus + +/obj/item/ammo_casing/p50/disruptor + name = ".416 Stabilis disruptor casing" + desc = "A .416 bullet casing. Specializes in sending the target to sleep rather than hell, unless they're synthetic. Then they probably go to hell anyway.\ + <br><br>\ + <i>DISRUPTOR: Forces humanoid targets to sleep, does heavy damage against cyborgs, EMPs struck targets.</i>" + +/obj/item/ammo_casing/p50/incendiary + name = ".416 Stabilis precision incendiary casing" + desc = "A .416 bullet casing. Made with an agitated-plasma tip, for making people regret being alive.\ + <br><br>\ + <i>PRECISION INCENDIARY: Lacks innate dismemberment ability and contact-stun, suffers against mechanized armor. Sets people on fire.</i>" + projectile_type = /obj/projectile/bullet/p50/incendiary + +/obj/item/ammo_casing/p50/penetrator + name = ".416 Stabilis penetrator sabot casing" + desc = "A .416 bullet casing. Loaded with a hardened sabot and packed with extra propellant. \ + Designed to go through basically everything. A label warns of overpressure risk, and to not use the round if \ + a given weapon cannot handle pressures greater than 85000 PSI.\ + <br><br>\ + <i>PENETRATOR: Goes through basically everything. Lacks innate dismemberment ability and contact-stun capabilities.</i>" + +/obj/item/ammo_casing/p50/marksman + name = ".416 Stabilis marksman hyperkinetic casing" + desc = "A .416 bullet casing. Loaded with a hyperkinetic bullet that ignores mundane things like \"travel time\" \ + and a concerning amount of experimental propellant. A label warns of overpressure risk, and to not use the round if \ + a given weapon cannot handle pressures greater than 95000 PSI.\ + <br><br>\ + <i>MARKSMAN: Bullets have <b>no</b> travel time, and can ricochet once. Does slightly less damage, lacks innate dismemberment and contact-stun capabilities.</i>" + projectile_type = /obj/projectile/bullet/p50/marksman + +// overrides for tgcode 4.6x30mm, used in the WT-550 +/obj/item/ammo_casing/c46x30mm + name = "8mm Usurpator bullet casing" + desc = "An 8mm bullet casing." + +/obj/item/ammo_casing/c46x30mm/ap + name = "8mm Usurpator armor-piercing bullet casing" + desc = "An 8mm armor-piercing bullet casing.\ + <br><br>\ + <i>ARMOR PIERCING: Increased armor piercing capabilities. What did you expect?</i>" + custom_materials = AMMO_MATS_AP + advanced_print_req = TRUE + +/obj/item/ammo_casing/c46x30mm/inc + name = "8mm Usurpator incendiary bullet casing" + desc = "An 8mm incendiary bullet casing.\ + <br><br>\ + <i>INCENDIARY: Leaves a trail of fire when shot, sets targets aflame.</i>" + custom_materials = AMMO_MATS_TEMP + advanced_print_req = TRUE + +// overrides for tgcode .45, used in the M1911 and C20-r +/obj/item/ammo_casing/c45 + name = ".460 Ceres bullet casing" + desc = "A .460 bullet casing." + +/obj/item/ammo_casing/c45/ap + name = ".460 Ceres armor-piercing bullet casing" + desc = "An armor-piercing .460 bullet casing.\ + <br><br>\ + <i>ARMOR PIERCING: Increased armor piercing capabilities. What did you expect?</i>" + custom_materials = AMMO_MATS_AP + advanced_print_req = TRUE + +/obj/item/ammo_casing/c45/inc + name = ".460 Ceres incendiary bullet casing" + desc = "An incendiary .460 bullet casing.\ + <br><br>\ + <i>INCENDIARY: Leaves a trail of fire when shot, sets targets aflame.</i>" + custom_materials = AMMO_MATS_TEMP + advanced_print_req = TRUE + +// overrides for .50AE, used in the deagle +/obj/item/ammo_casing/a50ae + name = ".454 Trucidator bullet casing" + desc = "A .454 Trucidator bullet casing. Extremely powerful.\ + <br><br>\ + <i>HAND CANNON: Fired out of a handgun, deals disproportionately large damage.</i>" + +// overrides for .357, used in the .357 revolver +/obj/item/ammo_casing/a357 //We can keep the Magnum classic. + name = ".357 bullet casing" + desc = "A .357 bullet casing.\ + <br><br>\ + <i>HAND CANNON: Fired out of a handgun, deals disproportionately large damage.</i>" + +/obj/item/ammo_casing/a357/match + desc = "A .357 bullet casing, manufactured to exceedingly high standards.\ + <br><br>\ + <i>MATCH: Ricochets everywhere. Like crazy.</i>" + +/obj/item/ammo_casing/a357/phasic + desc = "A .357 phasic bullet casing.\ + <br><br>\ + <i>PHASIC: Ignores all surfaces except organic matter.</i>" + advanced_print_req = TRUE + custom_materials = AMMO_MATS_PHASIC + +/obj/item/ammo_casing/a357/heartseeker + desc = "A .357 heartseeker bullet casing.\ + <br><br>\ + <i>HEARTSEEKER: Has homing capabilities, methodology unknown.</i>" + advanced_print_req = TRUE + custom_materials = AMMO_MATS_HOMING // meme ammo. meme print cost + +// overrides for .38 Special, used in the .38 revolvers, including the det's +/obj/item/ammo_box/c38 + caliber = CALIBER_38 + +/obj/item/ammo_casing/c38/trac + custom_materials = AMMO_MATS_TRAC + advanced_print_req = TRUE + +/obj/item/ammo_casing/c38/dumdum + advanced_print_req = TRUE + +/obj/item/ammo_casing/c38/hotshot + custom_materials = AMMO_MATS_TEMP + advanced_print_req = TRUE + +/obj/item/ammo_casing/c38/iceblox + custom_materials = AMMO_MATS_TEMP // plasma's wack. + advanced_print_req = TRUE + +// The ones above are the casings for the ammo, whereas the ones below are the actual projectiles that give you feedback when you're shot + +/obj/projectile/bullet/a223 + name = ".277 Aestus bullet" + +/obj/projectile/bullet/a223/phasic + name = ".277 phasic bullet" + +/obj/projectile/bullet/c9mm + name = "9x25mm bullet" + +/obj/projectile/bullet/c9mm/ap + name = "9x25mm armor-piercing bullet" + +/obj/projectile/bullet/c9mm/hp + name = "9x25mm fragmenting bullet" + +/obj/projectile/bullet/incendiary/c9mm + name = "9x25mm incendiary bullet" + +/obj/projectile/bullet/c45 + name = ".460 bullet" + +/obj/projectile/bullet/c45/ap + name = ".460 armor-piercing bullet" + +/obj/projectile/bullet/incendiary/c45 + name = ".460 incendiary bullet" + +/obj/projectile/bullet/c46x30mm + name = "8mm Usurpator bullet" + +/obj/projectile/bullet/c46x30mm/ap + name = "8mm armor-piercing bullet" + +/obj/projectile/bullet/incendiary/c46x30mm + name = "8mm incendiary bullet" + +/obj/projectile/bullet/p50 + name = ".416 Stabilis bullet" + +/obj/projectile/bullet/p50/disruptor + name = ".416 disruptor bullet" + +/obj/projectile/bullet/p50/penetrator + name = ".416 penetrator bullet" + +/obj/projectile/bullet/a50ae + name = ".454 Trucidator bullet" + + +// MAGAZINES UPDATED TO MATCH STUFF + +/obj/item/ammo_box/magazine/wt550m9 + name = "\improper WT-550 magazine" + desc = "A 20-round toploaded 8mm Usurpator magazine that fits neatly in the WT-550." + +/obj/item/ammo_box/magazine/wt550m9/wtap + name = "\improper WT-550 AP magazine" + +/obj/item/ammo_box/magazine/wt550m9/wtic + name = "\improper WT-550 IND magazine" + +/obj/item/ammo_box/magazine/smgm45 + name = ".460 Ceres SMG magazine" + desc = "A magazine chambered for .460 meant to fit in submachine guns." + +/obj/item/ammo_box/magazine/smgm45/ap + name = ".460 Ceres AP SMG magazine" + +/obj/item/ammo_box/magazine/smgm45/incen + name = ".460 Ceres IND SMG magazine" + +/obj/item/ammo_box/magazine/tommygunm45 + name = "\improper Tommy Gun .460 Ceres drum" + desc = "A disc magazine chambered for .460 Ceres." + +/obj/item/ammo_box/magazine/m556 + name = ".277 Aestus toploading magazine" + desc = "A toploading magazine chambered for .277 Aestus." + +/obj/item/ammo_box/magazine/m556/phasic + name = ".277 PHASE toploading magazine" + +/obj/item/ammo_box/magazine/sniper_rounds + name = "anti-materiel rifle magazine" + desc = "A heavy magazine chambered for .416 Stabilis." + +/obj/item/ammo_box/magazine/sniper_rounds/soporific + desc = "A magazine with soporific .416 Stabilis ammo, designed for happy days and dead quiet nights." + +/obj/item/ammo_box/magazine/sniper_rounds/penetrator + name = "anti-materiel rifle ++P magazine" + desc = "A heavy magazine with over the top, overpressurized, and frankly over the top .416 penetrator ammo." + +/obj/item/ammo_box/magazine/m50 + name = ".454 Trucidator handcannon magazine" + desc = "An absurdly THICK magazine possibly meant for a heavy hitting pistol, if you can call it that." diff --git a/modular_nova/modules/aesthetics/guns/code/magazine.dm b/modular_nova/modules/aesthetics/guns/code/magazine.dm new file mode 100644 index 00000000000000..dd6acc855b01f4 --- /dev/null +++ b/modular_nova/modules/aesthetics/guns/code/magazine.dm @@ -0,0 +1,4 @@ +/obj/item/ammo_box/magazine/m9mm + name = "pistol magazine (9x25mm)" + multiple_sprites = AMMO_BOX_PER_BULLET + icon = 'modular_nova/modules/aesthetics/guns/icons/magazine.dmi' diff --git a/modular_skyrat/modules/aesthetics/guns/icons/energy.dmi b/modular_nova/modules/aesthetics/guns/icons/energy.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/guns/icons/energy.dmi rename to modular_nova/modules/aesthetics/guns/icons/energy.dmi diff --git a/modular_nova/modules/aesthetics/guns/icons/guns.dmi b/modular_nova/modules/aesthetics/guns/icons/guns.dmi new file mode 100644 index 00000000000000..8e3636ba591b51 Binary files /dev/null and b/modular_nova/modules/aesthetics/guns/icons/guns.dmi differ diff --git a/modular_skyrat/modules/aesthetics/guns/icons/guns_back.dmi b/modular_nova/modules/aesthetics/guns/icons/guns_back.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/guns/icons/guns_back.dmi rename to modular_nova/modules/aesthetics/guns/icons/guns_back.dmi diff --git a/modular_skyrat/modules/aesthetics/guns/icons/guns_gubman2.dmi b/modular_nova/modules/aesthetics/guns/icons/guns_gubman2.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/guns/icons/guns_gubman2.dmi rename to modular_nova/modules/aesthetics/guns/icons/guns_gubman2.dmi diff --git a/modular_skyrat/modules/aesthetics/guns/icons/guns_lefthand.dmi b/modular_nova/modules/aesthetics/guns/icons/guns_lefthand.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/guns/icons/guns_lefthand.dmi rename to modular_nova/modules/aesthetics/guns/icons/guns_lefthand.dmi diff --git a/modular_skyrat/modules/aesthetics/guns/icons/guns_righthand.dmi b/modular_nova/modules/aesthetics/guns/icons/guns_righthand.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/guns/icons/guns_righthand.dmi rename to modular_nova/modules/aesthetics/guns/icons/guns_righthand.dmi diff --git a/modular_skyrat/modules/aesthetics/guns/icons/magazine.dmi b/modular_nova/modules/aesthetics/guns/icons/magazine.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/guns/icons/magazine.dmi rename to modular_nova/modules/aesthetics/guns/icons/magazine.dmi diff --git a/modular_skyrat/modules/aesthetics/guns/icons/nucgun.dmi b/modular_nova/modules/aesthetics/guns/icons/nucgun.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/guns/icons/nucgun.dmi rename to modular_nova/modules/aesthetics/guns/icons/nucgun.dmi diff --git a/modular_skyrat/modules/aesthetics/guns/sound/laser.ogg b/modular_nova/modules/aesthetics/guns/sound/laser.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/guns/sound/laser.ogg rename to modular_nova/modules/aesthetics/guns/sound/laser.ogg diff --git a/modular_skyrat/modules/aesthetics/guns/sound/laser2.ogg b/modular_nova/modules/aesthetics/guns/sound/laser2.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/guns/sound/laser2.ogg rename to modular_nova/modules/aesthetics/guns/sound/laser2.ogg diff --git a/modular_skyrat/modules/aesthetics/guns/sound/laser3.ogg b/modular_nova/modules/aesthetics/guns/sound/laser3.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/guns/sound/laser3.ogg rename to modular_nova/modules/aesthetics/guns/sound/laser3.ogg diff --git a/modular_skyrat/modules/aesthetics/guns/sound/laser_cannon.ogg b/modular_nova/modules/aesthetics/guns/sound/laser_cannon.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/guns/sound/laser_cannon.ogg rename to modular_nova/modules/aesthetics/guns/sound/laser_cannon.ogg diff --git a/modular_skyrat/modules/aesthetics/guns/sound/laser_cannon_charge.ogg b/modular_nova/modules/aesthetics/guns/sound/laser_cannon_charge.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/guns/sound/laser_cannon_charge.ogg rename to modular_nova/modules/aesthetics/guns/sound/laser_cannon_charge.ogg diff --git a/modular_skyrat/modules/aesthetics/guns/sound/laser_cannon_fire.ogg b/modular_nova/modules/aesthetics/guns/sound/laser_cannon_fire.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/guns/sound/laser_cannon_fire.ogg rename to modular_nova/modules/aesthetics/guns/sound/laser_cannon_fire.ogg diff --git a/modular_skyrat/modules/aesthetics/guns/sound/laser_rifle.ogg b/modular_nova/modules/aesthetics/guns/sound/laser_rifle.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/guns/sound/laser_rifle.ogg rename to modular_nova/modules/aesthetics/guns/sound/laser_rifle.ogg diff --git a/modular_skyrat/modules/aesthetics/guns/sound/pulse.ogg b/modular_nova/modules/aesthetics/guns/sound/pulse.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/guns/sound/pulse.ogg rename to modular_nova/modules/aesthetics/guns/sound/pulse.ogg diff --git a/modular_skyrat/modules/aesthetics/guns/sound/shotgun_light.ogg b/modular_nova/modules/aesthetics/guns/sound/shotgun_light.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/guns/sound/shotgun_light.ogg rename to modular_nova/modules/aesthetics/guns/sound/shotgun_light.ogg diff --git a/modular_skyrat/modules/aesthetics/guns/sound/sniperrifle.ogg b/modular_nova/modules/aesthetics/guns/sound/sniperrifle.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/guns/sound/sniperrifle.ogg rename to modular_nova/modules/aesthetics/guns/sound/sniperrifle.ogg diff --git a/modular_skyrat/modules/aesthetics/guns/sound/sniperrifle_s.ogg b/modular_nova/modules/aesthetics/guns/sound/sniperrifle_s.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/guns/sound/sniperrifle_s.ogg rename to modular_nova/modules/aesthetics/guns/sound/sniperrifle_s.ogg diff --git a/modular_skyrat/modules/aesthetics/guns/sound/suppressed_shotgun.ogg b/modular_nova/modules/aesthetics/guns/sound/suppressed_shotgun.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/guns/sound/suppressed_shotgun.ogg rename to modular_nova/modules/aesthetics/guns/sound/suppressed_shotgun.ogg diff --git a/modular_skyrat/modules/aesthetics/guns/sound/xray_laser.ogg b/modular_nova/modules/aesthetics/guns/sound/xray_laser.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/guns/sound/xray_laser.ogg rename to modular_nova/modules/aesthetics/guns/sound/xray_laser.ogg diff --git a/modular_nova/modules/aesthetics/heater/code/spaceheater.dm b/modular_nova/modules/aesthetics/heater/code/spaceheater.dm new file mode 100644 index 00000000000000..2dbd2c544bd648 --- /dev/null +++ b/modular_nova/modules/aesthetics/heater/code/spaceheater.dm @@ -0,0 +1,2 @@ +/obj/machinery/space_heater + icon = 'modular_nova/modules/aesthetics/heater/icons/heater.dmi' diff --git a/modular_skyrat/modules/aesthetics/heater/icons/heater.dmi b/modular_nova/modules/aesthetics/heater/icons/heater.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/heater/icons/heater.dmi rename to modular_nova/modules/aesthetics/heater/icons/heater.dmi diff --git a/modular_nova/modules/aesthetics/heavy_lathe/heavy_lathe.dm b/modular_nova/modules/aesthetics/heavy_lathe/heavy_lathe.dm new file mode 100644 index 00000000000000..c84cfe855aea5e --- /dev/null +++ b/modular_nova/modules/aesthetics/heavy_lathe/heavy_lathe.dm @@ -0,0 +1,2 @@ +/obj/machinery/rnd/experimentor + icon = 'modular_nova/modules/aesthetics/heavy_lathe/heavy_lathe.dmi' diff --git a/modular_skyrat/modules/aesthetics/heavy_lathe/heavy_lathe.dmi b/modular_nova/modules/aesthetics/heavy_lathe/heavy_lathe.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/heavy_lathe/heavy_lathe.dmi rename to modular_nova/modules/aesthetics/heavy_lathe/heavy_lathe.dmi diff --git a/modular_nova/modules/aesthetics/implanter/implanter.dm b/modular_nova/modules/aesthetics/implanter/implanter.dm new file mode 100644 index 00000000000000..63ffb482877905 --- /dev/null +++ b/modular_nova/modules/aesthetics/implanter/implanter.dm @@ -0,0 +1,8 @@ +/obj/item/implanter + icon = 'modular_nova/modules/aesthetics/implanter/implanter.dmi' + +/obj/item/implantpad + icon = 'modular_nova/modules/aesthetics/implanter/implanter.dmi' + +/obj/item/implantcase + icon = 'modular_nova/modules/aesthetics/implanter/implanter.dmi' diff --git a/modular_skyrat/modules/aesthetics/implanter/implanter.dmi b/modular_nova/modules/aesthetics/implanter/implanter.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/implanter/implanter.dmi rename to modular_nova/modules/aesthetics/implanter/implanter.dmi diff --git a/modular_nova/modules/aesthetics/intercom/code/intercom.dm b/modular_nova/modules/aesthetics/intercom/code/intercom.dm new file mode 100644 index 00000000000000..6c9c9b9eb369d8 --- /dev/null +++ b/modular_nova/modules/aesthetics/intercom/code/intercom.dm @@ -0,0 +1,5 @@ +/obj/item/radio/intercom + icon = 'modular_nova/modules/aesthetics/intercom/icons/intercom.dmi' + +/obj/item/wallframe/intercom + icon = 'modular_nova/modules/aesthetics/intercom/icons/intercom.dmi' diff --git a/modular_skyrat/modules/aesthetics/intercom/icons/intercom.dmi b/modular_nova/modules/aesthetics/intercom/icons/intercom.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/intercom/icons/intercom.dmi rename to modular_nova/modules/aesthetics/intercom/icons/intercom.dmi diff --git a/modular_nova/modules/aesthetics/janitor/janitor.dm b/modular_nova/modules/aesthetics/janitor/janitor.dm new file mode 100644 index 00000000000000..27d518dc235576 --- /dev/null +++ b/modular_nova/modules/aesthetics/janitor/janitor.dm @@ -0,0 +1,9 @@ +/obj/structure/mop_bucket + icon = 'modular_nova/modules/aesthetics/janitor/janitor.dmi' + +// This isn't custom though. +/obj/structure/mop_bucket/janitorialcart + icon = 'icons/obj/service/janitor.dmi' + +/obj/item/reagent_containers/cup/bucket + icon = 'modular_nova/modules/aesthetics/janitor/janitor.dmi' diff --git a/modular_skyrat/modules/aesthetics/janitor/janitor.dmi b/modular_nova/modules/aesthetics/janitor/janitor.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/janitor/janitor.dmi rename to modular_nova/modules/aesthetics/janitor/janitor.dmi diff --git a/modular_skyrat/modules/aesthetics/keyed_doors/code/keyed_door.dm b/modular_nova/modules/aesthetics/keyed_doors/code/keyed_door.dm similarity index 95% rename from modular_skyrat/modules/aesthetics/keyed_doors/code/keyed_door.dm rename to modular_nova/modules/aesthetics/keyed_doors/code/keyed_door.dm index 64e1e5536b7b40..7eb8dc21fd08e1 100644 --- a/modular_skyrat/modules/aesthetics/keyed_doors/code/keyed_door.dm +++ b/modular_nova/modules/aesthetics/keyed_doors/code/keyed_door.dm @@ -30,8 +30,8 @@ /obj/machinery/door/airlock/keyed name = "locked airlock" desc = "This door only opens when a keycard with the proper access is swiped. It looks virtually indestructible." - icon = 'modular_skyrat/modules/aesthetics/keyed_doors/icons/keyed.dmi' - // overlays_file = 'modular_skyrat/modules/aesthetics/keyed_doors/icons/keyed_overlays.dmi' // if this route is ever taken + icon = 'modular_nova/modules/aesthetics/keyed_doors/icons/keyed.dmi' + // overlays_file = 'modular_nova/modules/aesthetics/keyed_doors/icons/keyed_overlays.dmi' // if this route is ever taken icon_state = "closed" explosion_block = 3 heat_proof = TRUE diff --git a/modular_skyrat/modules/aesthetics/keyed_doors/icons/keyed.dmi b/modular_nova/modules/aesthetics/keyed_doors/icons/keyed.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/keyed_doors/icons/keyed.dmi rename to modular_nova/modules/aesthetics/keyed_doors/icons/keyed.dmi diff --git a/modular_skyrat/modules/aesthetics/kitchen/coffeemaker.dmi b/modular_nova/modules/aesthetics/kitchen/coffeemaker.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/kitchen/coffeemaker.dmi rename to modular_nova/modules/aesthetics/kitchen/coffeemaker.dmi diff --git a/modular_nova/modules/aesthetics/kitchen/kitchen.dm b/modular_nova/modules/aesthetics/kitchen/kitchen.dm new file mode 100644 index 00000000000000..20956aea37064f --- /dev/null +++ b/modular_nova/modules/aesthetics/kitchen/kitchen.dm @@ -0,0 +1,42 @@ +/obj/structure/kitchenspike_frame + icon = 'modular_nova/modules/aesthetics/kitchen/kitchen.dmi' + +/obj/structure/kitchenspike + icon = 'modular_nova/modules/aesthetics/kitchen/kitchen.dmi' + +/obj/machinery/processor + icon = 'modular_nova/modules/aesthetics/kitchen/kitchen.dmi' + +/obj/machinery/deepfryer + icon = 'modular_nova/modules/aesthetics/kitchen/kitchen.dmi' + +/obj/machinery/grill + icon = 'modular_nova/modules/aesthetics/kitchen/kitchen.dmi' + +/obj/machinery/gibber + icon = 'modular_nova/modules/aesthetics/kitchen/kitchen.dmi' + +//Different icon file, but it will still go in the kitchen folder!!! +/obj/machinery/microwave + icon = 'modular_nova/modules/aesthetics/kitchen/microwave.dmi' + +/obj/structure/showcase/machinery/microwave + icon = 'modular_nova/modules/aesthetics/kitchen/microwave.dmi' + +//Skyrat Coffee Maker Icons +/obj/machinery/coffeemaker + icon = 'modular_nova/modules/aesthetics/kitchen/coffeemaker.dmi' + +/obj/item/reagent_containers/cup/coffeepot + icon = 'modular_nova/modules/aesthetics/kitchen/coffeemaker.dmi' + fill_icon = 'modular_nova/modules/aesthetics/kitchen/coffeemaker.dmi' + fill_icon_state = "coffeepot" + +/obj/item/coffee_cartridge + icon = 'modular_nova/modules/aesthetics/kitchen/coffeemaker.dmi' + +/obj/item/blank_coffee_cartridge + icon = 'modular_nova/modules/aesthetics/kitchen/coffeemaker.dmi' + +/obj/item/storage/fancy/coffee_cart_rack + icon = 'modular_nova/modules/aesthetics/kitchen/coffeemaker.dmi' diff --git a/modular_skyrat/modules/aesthetics/kitchen/kitchen.dmi b/modular_nova/modules/aesthetics/kitchen/kitchen.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/kitchen/kitchen.dmi rename to modular_nova/modules/aesthetics/kitchen/kitchen.dmi diff --git a/modular_skyrat/modules/aesthetics/kitchen/microwave.dmi b/modular_nova/modules/aesthetics/kitchen/microwave.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/kitchen/microwave.dmi rename to modular_nova/modules/aesthetics/kitchen/microwave.dmi diff --git a/modular_skyrat/modules/aesthetics/lights/code/lighting.dm b/modular_nova/modules/aesthetics/lights/code/lighting.dm similarity index 90% rename from modular_skyrat/modules/aesthetics/lights/code/lighting.dm rename to modular_nova/modules/aesthetics/lights/code/lighting.dm index c668fe7cf674d4..ac4238cd25d51c 100644 --- a/modular_skyrat/modules/aesthetics/lights/code/lighting.dm +++ b/modular_nova/modules/aesthetics/lights/code/lighting.dm @@ -2,22 +2,18 @@ #define NIGHTSHIFT_LIGHT_MODIFIER 0.15 #define NIGHTSHIFT_COLOR_MODIFIER 0.15 -/atom - light_power = 1.25 - /obj/machinery/light - brightness = 6.5 - fire_brightness = 4.5 + brightness = 7.5 + fire_brightness = 6 fire_colour = COLOR_FIRE_LIGHT_RED bulb_colour = COLOR_OFF_WHITE - bulb_power = 1.15 + bulb_power = 0.9 nightshift_light_color = null // Let the dynamic night shift color code handle this. bulb_low_power_colour = LIGHT_COLOR_BROWN - bulb_low_power_brightness_mul = 0.5 - bulb_low_power_pow_min = 0.5 + bulb_low_power_brightness_mul = 0.75 + bulb_low_power_pow_min = 0.75 bulb_emergency_colour = LIGHT_COLOR_INTENSE_RED - bulb_major_emergency_brightness_mul = 0.7 - power_consumption_rate = 5.62 + bulb_major_emergency_brightness_mul = 0.9 var/maploaded = FALSE //So we don't have a lot of stress on startup. var/turning_on = FALSE //More stress stuff. var/constant_flickering = FALSE // Are we always flickering? @@ -69,7 +65,7 @@ use_power = ACTIVE_POWER_USE set_light(new_brightness, new_power, new_color) if(play_sound) - playsound(src.loc, 'modular_skyrat/modules/aesthetics/lights/sound/light_on.ogg', 65, 1) + playsound(src.loc, 'modular_nova/modules/aesthetics/lights/sound/light_on.ogg', 65, 1) /obj/machinery/light/proc/start_flickering() on = FALSE @@ -114,13 +110,13 @@ /obj/machinery/light/multitool_act(mob/living/user, obj/item/multitool) if(!constant_flickering) balloon_alert(user, "ballast is already working!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS balloon_alert(user, "repairing the ballast...") if(do_after(user, 2 SECONDS, src)) stop_flickering() balloon_alert(user, "ballast repaired!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS return ..() #undef NIGHTSHIFT_LIGHT_MODIFIER diff --git a/modular_skyrat/modules/aesthetics/lights/sound/light_on.ogg b/modular_nova/modules/aesthetics/lights/sound/light_on.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/lights/sound/light_on.ogg rename to modular_nova/modules/aesthetics/lights/sound/light_on.ogg diff --git a/modular_nova/modules/aesthetics/lightswitch/code/lightswitch.dm b/modular_nova/modules/aesthetics/lightswitch/code/lightswitch.dm new file mode 100644 index 00000000000000..c66af1e7de10b8 --- /dev/null +++ b/modular_nova/modules/aesthetics/lightswitch/code/lightswitch.dm @@ -0,0 +1,27 @@ +/obj/machinery/light_switch + icon = 'modular_nova/modules/aesthetics/lightswitch/icons/lightswitch.dmi' + +/obj/machinery/light_switch/interact(mob/user) + . = ..() + playsound(src, 'modular_nova/modules/aesthetics/lightswitch/sound/lightswitch.ogg', 100, 1) + +#ifndef UNIT_TESTS +/obj/machinery/light_switch/LateInitialize() + . = ..() + if(prob(50) && area.lightswitch) //50% chance for area to start with lights off. + turn_off() +#endif + +/obj/machinery/light_switch/proc/turn_off() + if(!area.lightswitch) + return + area.lightswitch = FALSE + area.update_appearance() + + for(var/obj/machinery/light_switch/light_switch as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/light_switch)) + if(light_switch.area != area) + continue + light_switch.update_appearance() + SEND_SIGNAL(light_switch, COMSIG_LIGHT_SWITCH_SET, FALSE) + + area.power_change() diff --git a/modular_skyrat/modules/aesthetics/lightswitch/icons/lightswitch.dmi b/modular_nova/modules/aesthetics/lightswitch/icons/lightswitch.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/lightswitch/icons/lightswitch.dmi rename to modular_nova/modules/aesthetics/lightswitch/icons/lightswitch.dmi diff --git a/modular_skyrat/modules/aesthetics/lightswitch/sound/lightswitch.ogg b/modular_nova/modules/aesthetics/lightswitch/sound/lightswitch.ogg similarity index 100% rename from modular_skyrat/modules/aesthetics/lightswitch/sound/lightswitch.ogg rename to modular_nova/modules/aesthetics/lightswitch/sound/lightswitch.ogg diff --git a/modular_nova/modules/aesthetics/morgue/code/morgue.dm b/modular_nova/modules/aesthetics/morgue/code/morgue.dm new file mode 100644 index 00000000000000..ae2537fb0e2fce --- /dev/null +++ b/modular_nova/modules/aesthetics/morgue/code/morgue.dm @@ -0,0 +1,2 @@ +/obj/structure/bodycontainer + icon = 'modular_nova/modules/aesthetics/morgue/icons/morgue.dmi' diff --git a/modular_skyrat/modules/aesthetics/morgue/icons/morgue.dmi b/modular_nova/modules/aesthetics/morgue/icons/morgue.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/morgue/icons/morgue.dmi rename to modular_nova/modules/aesthetics/morgue/icons/morgue.dmi diff --git a/modular_skyrat/modules/aesthetics/plants/plants.dmi b/modular_nova/modules/aesthetics/plants/plants.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/plants/plants.dmi rename to modular_nova/modules/aesthetics/plants/plants.dmi diff --git a/modular_nova/modules/aesthetics/plasticflaps/code/plasticflaps.dm b/modular_nova/modules/aesthetics/plasticflaps/code/plasticflaps.dm new file mode 100644 index 00000000000000..86fb7246c1ff43 --- /dev/null +++ b/modular_nova/modules/aesthetics/plasticflaps/code/plasticflaps.dm @@ -0,0 +1,3 @@ +/obj/structure/plasticflaps + icon = 'modular_nova/modules/aesthetics/plasticflaps/icons/plasticflaps.dmi' + diff --git a/modular_skyrat/modules/aesthetics/plasticflaps/icons/plasticflaps.dmi b/modular_nova/modules/aesthetics/plasticflaps/icons/plasticflaps.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/plasticflaps/icons/plasticflaps.dmi rename to modular_nova/modules/aesthetics/plasticflaps/icons/plasticflaps.dmi diff --git a/modular_skyrat/modules/aesthetics/posters/contraband.dmi b/modular_nova/modules/aesthetics/posters/contraband.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/posters/contraband.dmi rename to modular_nova/modules/aesthetics/posters/contraband.dmi diff --git a/modular_skyrat/modules/aesthetics/posters/posters.dm b/modular_nova/modules/aesthetics/posters/posters.dm similarity index 86% rename from modular_skyrat/modules/aesthetics/posters/posters.dm rename to modular_nova/modules/aesthetics/posters/posters.dm index 6de93057e867eb..7e6eb98ec4ea7d 100644 --- a/modular_skyrat/modules/aesthetics/posters/posters.dm +++ b/modular_nova/modules/aesthetics/posters/posters.dm @@ -4,7 +4,7 @@ /obj/structure/sign/poster/contraband/syndicate_medical name = "Syndicate Medical" desc = "This poster celebrates the complete successful revival of an hour-dead, six person mining team by Syndicate Operatives. Written in the corner is a simple message, 'Stay Winning.'" - icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi' + icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi' icon_state = "poster_sr_syndiemed" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/syndicate_medical, 32) @@ -12,7 +12,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/syndicate_medi /obj/structure/sign/poster/contraband/crocin_pool name = "SWIM" desc = "This poster dramatically states; 'SWIM'. It seems to be advertising the use of Crocin.. 'recreationally', in the home, work, and, most ominously, 'the pool'. A 'MamoTramsem' logo is in the corner." - icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi' + icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi' icon_state = "poster_sr_crocin" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/crocin_pool, 32) @@ -20,7 +20,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/crocin_pool, 3 /obj/structure/sign/poster/contraband/icebox_moment name = "As above, so below" desc = "This poster seems to be instill that a 'Head of Security's Office being overtop a syndicate installation is only fitting. As above.. so below.'" - icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi' + icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi' icon_state = "poster_sr_abovebelow" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/icebox_moment, 32) @@ -28,7 +28,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/icebox_moment, /obj/structure/sign/poster/contraband/shipstation name = "Flight Services - Enlist" desc = "This poster depicts the long deprecated 'Ship' class 'station' in it's hayday. Surprisingly, the poster seems to be Nanotrasen official; though with how hush they've been on the topic..." //A disaster as big as Ship deserves a scandalous coverup. - icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi' + icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi' icon_state = "poster_sr_shipstation" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/shipstation, 32) @@ -36,7 +36,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/shipstation, 3 /obj/structure/sign/poster/contraband/dancing_honk name = "DANCE" desc = "This poster depicts a 'HONK' class mech ontop of a stage, next to a pole." - icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi' + icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi' icon_state = "poster_sr_honkdance" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/dancing_honk, 32) @@ -44,7 +44,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/dancing_honk, /obj/structure/sign/poster/contraband/operative_duffy name = "CASH REWARD" desc = "This poster depicts a gas mask, with details on how to 'forward information' on the whereabouts of whoever it means... though it doesn't specify to who." - icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi' + icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi' icon_state = "poster_sr_duffy" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/operative_duffy, 32) @@ -52,7 +52,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/operative_duff /obj/structure/sign/poster/contraband/ultra name = "ULTRA" desc = "This poster has one word on it, 'ULTRA'; it depicts a smiling pill next to a beaker. Ominous." - icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi' + icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi' icon_state = "poster_sr_ultra" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/ultra, 32) @@ -60,7 +60,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/ultra, 32) /obj/structure/sign/poster/contraband/secborg_vale name = "Defaced Valeborg Advertisement" desc = "This poster originally sought to advertise the sleek utility of the valeborg - but it seems to have been long since defaced. One word lies on top; 'RUN.' - Perhaps fitting, considering the security model shown." - icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi' + icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi' icon_state = "poster_sr_valeborg" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/secborg_vale, 32) @@ -68,7 +68,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/secborg_vale, /obj/structure/sign/poster/contraband/killingjoke // I like Batman :))) name = "You don't have to be crazy to work here - but it sure helps!" desc = "A poster boldly stating that being insane abord Nanotrasen stations isn't required. But it doesn't hurt to have!" - icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi' + icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi' icon_state = "poster_sr_killingjoke" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/killingjoke, 32) @@ -76,7 +76,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/killingjoke, 3 /obj/structure/sign/poster/contraband/nri_text name = "NRI declaration of sovereignity" desc = "This poster references the translated copy of Novaya Rossiyskaya Imperiya's declaration of sovereignity." - icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi' + icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi' icon_state = "nri_texto" /obj/structure/sign/poster/contraband/nri_text/examine_more(mob/user) @@ -93,7 +93,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/nri_text, 32) /obj/structure/sign/poster/contraband/nri_rations name = "NRI military rations advertisement" desc = "This poster presumably is an advertisement for military rations produced by a certain private company as a part of the Defense Collegia's state order. This admiral's right hand man sure does look excited." - icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi' + icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi' icon_state = "nri_rations" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/nri_rations, 32) @@ -101,7 +101,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/nri_rations, 3 /obj/structure/sign/poster/contraband/nri_voskhod name = "VOSKHOD combat armor advertisement" desc = "A poster showcasing recently developed VOSKHOD combat armor currently in use by NRI's troops and infantry across the border. The word 'DRIP' is written top to bottom on the left side, presumably boasting about the suit's superior design." - icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi' + icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi' icon_state = "nri_voskhod" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/nri_voskhod, 32) @@ -109,7 +109,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/nri_voskhod, 3 /obj/structure/sign/poster/contraband/nri_pistol name = "Szabo-Ivanek service pistol technical poster" desc = "This poster seems to be a technical documentation for Szabo-Ivanek service pistol in use by most of the NRI's state police and military institutions. Sadly, it's all written in Pan-Slavic." - icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi' + icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi' icon_state = "nri_pistol" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/nri_pistol, 32) @@ -117,7 +117,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/nri_pistol, 32 /obj/structure/sign/poster/contraband/nri_engineer name = "Build, Now" desc = "This poster shows you an imperial combat engineer staring somewhere to the left of the viewer. The words 'Build, Now' are written on top and bottom of the poster." - icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi' + icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi' icon_state = "nri_engineer" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/nri_engineer, 32) @@ -125,7 +125,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/nri_engineer, /obj/structure/sign/poster/contraband/nri_radar name = "Imperial navy enlistment poster" desc = "Enlist with the imperial navy today! See the galaxy, shoot solarians, get PTSD!" - icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi' + icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi' icon_state = "nri_radar" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/nri_radar, 32) diff --git a/modular_skyrat/modules/aesthetics/rack/code/rack.dm b/modular_nova/modules/aesthetics/rack/code/rack.dm similarity index 83% rename from modular_skyrat/modules/aesthetics/rack/code/rack.dm rename to modular_nova/modules/aesthetics/rack/code/rack.dm index 97815653714316..0e822321d659f6 100644 --- a/modular_skyrat/modules/aesthetics/rack/code/rack.dm +++ b/modular_nova/modules/aesthetics/rack/code/rack.dm @@ -1,10 +1,10 @@ /obj/structure/rack - icon = 'modular_skyrat/modules/aesthetics/rack/icons/rack.dmi' + icon = 'modular_nova/modules/aesthetics/rack/icons/rack.dmi' /obj/structure/rack/shelf name = "shelf" desc = "A shelf, for storing things on. Conveinent!" - icon = 'modular_skyrat/modules/aesthetics/rack/icons/rack.dmi' + icon = 'modular_nova/modules/aesthetics/rack/icons/rack.dmi' icon_state = "shelf" /obj/item/gun @@ -41,7 +41,7 @@ /obj/structure/rack/gunrack/attackby(obj/item/W, mob/living/user, params) var/list/modifiers = params2list(params) - if (W.tool_behaviour == TOOL_WRENCH && !(flags_1&NODECONSTRUCT_1) && LAZYACCESS(modifiers, RIGHT_CLICK)) + if (W.tool_behaviour == TOOL_WRENCH && !(obj_flags & NO_DECONSTRUCTION) && LAZYACCESS(modifiers, RIGHT_CLICK)) W.play_tool_sound(src) deconstruct(TRUE) return diff --git a/modular_skyrat/modules/aesthetics/rack/icons/rack.dmi b/modular_nova/modules/aesthetics/rack/icons/rack.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/rack/icons/rack.dmi rename to modular_nova/modules/aesthetics/rack/icons/rack.dmi diff --git a/modular_skyrat/modules/aesthetics/readme.md b/modular_nova/modules/aesthetics/readme.md similarity index 100% rename from modular_skyrat/modules/aesthetics/readme.md rename to modular_nova/modules/aesthetics/readme.md diff --git a/modular_nova/modules/aesthetics/shieldgen/code/shieldgen.dm b/modular_nova/modules/aesthetics/shieldgen/code/shieldgen.dm new file mode 100644 index 00000000000000..96946e28b9fbfd --- /dev/null +++ b/modular_nova/modules/aesthetics/shieldgen/code/shieldgen.dm @@ -0,0 +1,2 @@ +/obj/machinery/power/shieldwallgen + icon = 'modular_nova/modules/aesthetics/shieldgen/icons/shieldgen.dmi' diff --git a/modular_skyrat/modules/aesthetics/shieldgen/icons/shieldgen.dmi b/modular_nova/modules/aesthetics/shieldgen/icons/shieldgen.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/shieldgen/icons/shieldgen.dmi rename to modular_nova/modules/aesthetics/shieldgen/icons/shieldgen.dmi diff --git a/modular_nova/modules/aesthetics/stationobjs/stationobjs.dm b/modular_nova/modules/aesthetics/stationobjs/stationobjs.dm new file mode 100644 index 00000000000000..7c25ebb294ed45 --- /dev/null +++ b/modular_nova/modules/aesthetics/stationobjs/stationobjs.dm @@ -0,0 +1,2 @@ +/obj/structure/dresser + icon = 'modular_nova/modules/aesthetics/stationobjs/stationobjs.dmi' diff --git a/modular_skyrat/modules/aesthetics/stationobjs/stationobjs.dmi b/modular_nova/modules/aesthetics/stationobjs/stationobjs.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/stationobjs/stationobjs.dmi rename to modular_nova/modules/aesthetics/stationobjs/stationobjs.dmi diff --git a/modular_skyrat/modules/aesthetics/status_display/code/status_display.dm b/modular_nova/modules/aesthetics/status_display/code/status_display.dm similarity index 76% rename from modular_skyrat/modules/aesthetics/status_display/code/status_display.dm rename to modular_nova/modules/aesthetics/status_display/code/status_display.dm index 1258addd90fb46..cfa125c49f05d5 100644 --- a/modular_skyrat/modules/aesthetics/status_display/code/status_display.dm +++ b/modular_nova/modules/aesthetics/status_display/code/status_display.dm @@ -1,5 +1,5 @@ /obj/machinery/status_display - icon = 'modular_skyrat/modules/aesthetics/status_display/icons/status_display.dmi' + icon = 'modular_nova/modules/aesthetics/status_display/icons/status_display.dmi' /obj/machinery/status_display/LateInitialize() . = ..() diff --git a/modular_skyrat/modules/aesthetics/status_display/icons/status_display.dmi b/modular_nova/modules/aesthetics/status_display/icons/status_display.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/status_display/icons/status_display.dmi rename to modular_nova/modules/aesthetics/status_display/icons/status_display.dmi diff --git a/modular_nova/modules/aesthetics/storage/storage.dm b/modular_nova/modules/aesthetics/storage/storage.dm new file mode 100644 index 00000000000000..ac7661bddfa707 --- /dev/null +++ b/modular_nova/modules/aesthetics/storage/storage.dm @@ -0,0 +1,140 @@ +/obj/item/storage/medkit/emergency + icon = 'modular_nova/modules/aesthetics/storage/storage.dmi' + +/obj/item/borg/upgrade/rped + icon = 'modular_nova/modules/aesthetics/storage/storage.dmi' + +/obj/item/storage/part_replacer + icon = 'modular_nova/modules/aesthetics/storage/storage.dmi' + +/obj/item/storage/part_replacer/bluespace + icon = 'icons/obj/storage/storage.dmi' + +/obj/item/storage/part_replacer/cyborg + icon = 'modular_nova/modules/aesthetics/storage/storage.dmi' + + + +/* +// Boxes +*/ +/obj/item/storage/box + icon = 'modular_nova/modules/aesthetics/storage/storage.dmi' + +/obj/item/storage/box/donkpockets + icon = 'icons/obj/storage/box.dmi' + +/obj/item/storage/box/survival/syndie + icon_state = "syndiebox" + +/obj/item/storage/box/clown + icon_state = "hugbox" + +/obj/item/storage/box/cyber_implants + illustration = null //Included in the sprite + +/obj/item/storage/box/mothic_rations + icon = 'icons/obj/storage/box.dmi' + +/obj/item/storage/box/mothic_goods + icon = 'icons/obj/storage/box.dmi' + +/obj/item/storage/box/mothic_cans_sauces + icon = 'icons/obj/storage/box.dmi' + +/obj/item/storage/box/tiziran_meats + icon = 'icons/obj/storage/box.dmi' + +/obj/item/storage/box/tiziran_cans + icon = 'icons/obj/storage/box.dmi' + +/obj/item/storage/box/tiziran_goods + icon = 'icons/obj/storage/box.dmi' + + +/* +// Medical +*/ +/obj/item/storage/box/swab + icon_state = "medbox" + +/obj/item/storage/box/masks + icon_state = "medbox" + +/obj/item/storage/box/bodybags + icon_state = "medbox" + +/obj/item/storage/box/survival/medical + icon_state = "medbox" + +/obj/item/storage/box/syringes + icon_state = "medbox" + +/obj/item/storage/box/medipens + icon_state = "medbox" + +/obj/item/storage/box/medigels + icon_state = "medbox" + +/obj/item/storage/box/injectors + icon_state = "medbox" + +/obj/item/storage/box/pillbottles + icon_state = "medbox" + +/obj/item/storage/box/silver_sulf + icon_state = "medbox" + +/* +// Engineering +*/ +/obj/item/storage/box/metalfoam + icon_state = "engibox" + +/obj/item/storage/box/smart_metal_foam + icon_state = "engibox" + +/obj/item/storage/box/material + icon_state = "engibox" + +/* +// Security +*/ +/obj/item/storage/box/rubbershot + icon_state = "secbox_xl" + illustration = "rubbershot" + +/obj/item/storage/box/lethalshot + icon_state = "secbox_xl" + illustration = "buckshot" + +/obj/item/storage/box/beanbag + icon_state = "secbox_xl" + illustration = "beanbag" + +/obj/item/storage/box/breacherslug + icon_state = "secbox_xl" + illustration = "breacherslug" + +/obj/item/storage/box/evidence + icon_state = "secbox" + illustration = "evidence" + +/obj/item/storage/box/rxglasses/spyglasskit + icon_state = "secbox" + +/obj/item/storage/box/holobadge + icon_state = "secbox" + illustration = "holobadge" + +/obj/item/storage/box/survival/security + icon_state = "secbox" + +/obj/item/storage/box/emps + icon_state = "syndiebox" + +/obj/item/storage/box/chemimp + icon_state = "medbox" + +/obj/item/storage/box/exileimp + icon_state = "secbox" diff --git a/modular_skyrat/modules/aesthetics/storage/storage.dmi b/modular_nova/modules/aesthetics/storage/storage.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/storage/storage.dmi rename to modular_nova/modules/aesthetics/storage/storage.dmi diff --git a/modular_nova/modules/aesthetics/telescience/telescience.dm b/modular_nova/modules/aesthetics/telescience/telescience.dm new file mode 100644 index 00000000000000..318574cd16d88d --- /dev/null +++ b/modular_nova/modules/aesthetics/telescience/telescience.dm @@ -0,0 +1,2 @@ +/obj/item/gps + icon = 'modular_nova/modules/aesthetics/telescience/telescience.dmi' diff --git a/modular_skyrat/modules/aesthetics/telescience/telescience.dmi b/modular_nova/modules/aesthetics/telescience/telescience.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/telescience/telescience.dmi rename to modular_nova/modules/aesthetics/telescience/telescience.dmi diff --git a/modular_nova/modules/aesthetics/tools/code/tools.dm b/modular_nova/modules/aesthetics/tools/code/tools.dm new file mode 100644 index 00000000000000..a23410b3b3d910 --- /dev/null +++ b/modular_nova/modules/aesthetics/tools/code/tools.dm @@ -0,0 +1,36 @@ +/obj/item/weldingtool + icon = 'modular_nova/modules/aesthetics/tools/tools.dmi' + +/obj/item/crowbar + icon = 'modular_nova/modules/aesthetics/tools/tools.dmi' + +/obj/item/crowbar/power + lefthand_file = 'modular_nova/modules/aesthetics/tools/tools_lefthand.dmi' + righthand_file = 'modular_nova/modules/aesthetics/tools/tools_righthand.dmi' + +/obj/item/crowbar/power/syndicate //Because we have a clearly different color JOL than upstream, this needs to be specifically different now + inhand_icon_state = "jaws_syndie" + +/obj/item/crowbar/large/heavy + icon = 'icons/obj/tools.dmi' + +/obj/item/crowbar/large/old + icon = 'icons/obj/tools.dmi' + +/obj/item/wrench + icon = 'modular_nova/modules/aesthetics/tools/tools.dmi' + +/obj/item/wrench/caravan + icon = 'icons/obj/tools.dmi' + +/obj/item/screwdriver/power + icon = 'modular_nova/modules/aesthetics/tools/tools.dmi' + +/obj/item/construction/plumbing //This icon override NEEDS to be here for the subtypes + icon = 'modular_nova/modules/aesthetics/tools/tools.dmi' + +/obj/item/construction/rcd/arcd + icon = 'modular_nova/modules/aesthetics/tools/tools.dmi' + +/obj/item/inducer + icon = 'modular_nova/modules/aesthetics/tools/tools.dmi' diff --git a/modular_skyrat/modules/aesthetics/tools/tools.dmi b/modular_nova/modules/aesthetics/tools/tools.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/tools/tools.dmi rename to modular_nova/modules/aesthetics/tools/tools.dmi diff --git a/modular_skyrat/modules/aesthetics/tools/tools_lefthand.dmi b/modular_nova/modules/aesthetics/tools/tools_lefthand.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/tools/tools_lefthand.dmi rename to modular_nova/modules/aesthetics/tools/tools_lefthand.dmi diff --git a/modular_skyrat/modules/aesthetics/tools/tools_righthand.dmi b/modular_nova/modules/aesthetics/tools/tools_righthand.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/tools/tools_righthand.dmi rename to modular_nova/modules/aesthetics/tools/tools_righthand.dmi diff --git a/modular_skyrat/modules/aesthetics/vending/access_vending.dm b/modular_nova/modules/aesthetics/vending/access_vending.dm similarity index 100% rename from modular_skyrat/modules/aesthetics/vending/access_vending.dm rename to modular_nova/modules/aesthetics/vending/access_vending.dm diff --git a/modular_nova/modules/aesthetics/walls/code/walls.dm b/modular_nova/modules/aesthetics/walls/code/walls.dm new file mode 100644 index 00000000000000..cd7711136d4305 --- /dev/null +++ b/modular_nova/modules/aesthetics/walls/code/walls.dm @@ -0,0 +1,80 @@ +/turf/closed/wall + icon = 'modular_nova/modules/aesthetics/walls/icons/wall.dmi' + canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS + +/turf/closed/wall/r_wall + icon = 'modular_nova/modules/aesthetics/walls/icons/reinforced_wall.dmi' + +/turf/closed/wall/rust + icon = 'modular_nova/modules/aesthetics/walls/icons/wall.dmi' + icon_state = "wall-0" + base_icon_state = "wall" + +/turf/closed/wall/r_wall/rust + icon = 'modular_nova/modules/aesthetics/walls/icons/reinforced_wall.dmi' + icon_state = "reinforced_wall-0" + base_icon_state = "reinforced_wall" + base_decon_state = "r_wall" + +/turf/closed/wall/material + icon = 'modular_nova/modules/aesthetics/walls/icons/material_wall.dmi' + icon_state = "wall-0" + base_icon_state = "wall" + +// Modular false wall overrides +/obj/structure/falsewall + icon = 'modular_nova/modules/aesthetics/walls/icons/wall.dmi' + fake_icon = 'modular_nova/modules/aesthetics/walls/icons/wall.dmi' + +/obj/structure/falsewall/reinforced + name = "reinforced wall" + desc = "A huge chunk of reinforced metal used to separate rooms." + icon = 'modular_nova/modules/aesthetics/walls/icons/reinforced_wall.dmi' + fake_icon = 'modular_nova/modules/aesthetics/walls/icons/reinforced_wall.dmi' + +/obj/structure/falsewall/material + icon = 'modular_nova/modules/aesthetics/walls/icons/material_wall.dmi' + icon_state = "wall-open" + base_icon_state = "wall" + fake_icon = 'modular_nova/modules/aesthetics/walls/icons/material_wall.dmi' + +// TG false walls, overridden back to the TG file because we overrode the base falsewall with our aesthetic icon. New ones from TG will have to be added here. +// Yes, this is dumb +/obj/structure/falsewall/uranium + icon = 'icons/turf/walls/false_walls.dmi' + +/obj/structure/falsewall/gold + icon = 'icons/turf/walls/false_walls.dmi' + +/obj/structure/falsewall/silver + icon = 'icons/turf/walls/false_walls.dmi' + +/obj/structure/falsewall/diamond + icon = 'icons/turf/walls/false_walls.dmi' + +/obj/structure/falsewall/plasma + icon = 'icons/turf/walls/false_walls.dmi' + +/obj/structure/falsewall/bananium + icon = 'icons/turf/walls/false_walls.dmi' + +/obj/structure/falsewall/sandstone + icon = 'icons/turf/walls/false_walls.dmi' + +/obj/structure/falsewall/wood + icon = 'icons/turf/walls/false_walls.dmi' + +/obj/structure/falsewall/bamboo + icon = 'icons/turf/walls/false_walls.dmi' + +/obj/structure/falsewall/iron + icon = 'icons/turf/walls/false_walls.dmi' + +/obj/structure/falsewall/abductor + icon = 'icons/turf/walls/false_walls.dmi' + +/obj/structure/falsewall/titanium + icon = 'icons/turf/walls/false_walls.dmi' + +/obj/structure/falsewall/plastitanium + icon = 'icons/turf/walls/false_walls.dmi' diff --git a/modular_nova/modules/aesthetics/walls/icons/material_wall.dmi b/modular_nova/modules/aesthetics/walls/icons/material_wall.dmi new file mode 100644 index 00000000000000..310fb69419600c Binary files /dev/null and b/modular_nova/modules/aesthetics/walls/icons/material_wall.dmi differ diff --git a/modular_skyrat/modules/aesthetics/walls/icons/reinforced_wall.dmi b/modular_nova/modules/aesthetics/walls/icons/reinforced_wall.dmi similarity index 95% rename from modular_skyrat/modules/aesthetics/walls/icons/reinforced_wall.dmi rename to modular_nova/modules/aesthetics/walls/icons/reinforced_wall.dmi index 9f10b2bc427d84..27baa9b0889bf4 100644 Binary files a/modular_skyrat/modules/aesthetics/walls/icons/reinforced_wall.dmi and b/modular_nova/modules/aesthetics/walls/icons/reinforced_wall.dmi differ diff --git a/modular_nova/modules/aesthetics/walls/icons/wall.dmi b/modular_nova/modules/aesthetics/walls/icons/wall.dmi new file mode 100644 index 00000000000000..84ab853693db16 Binary files /dev/null and b/modular_nova/modules/aesthetics/walls/icons/wall.dmi differ diff --git a/modular_nova/modules/aesthetics/washing_machine/code/washing_machine.dm b/modular_nova/modules/aesthetics/washing_machine/code/washing_machine.dm new file mode 100644 index 00000000000000..9fee634dc0cfe1 --- /dev/null +++ b/modular_nova/modules/aesthetics/washing_machine/code/washing_machine.dm @@ -0,0 +1,2 @@ +/obj/machinery/washing_machine + icon = 'modular_nova/modules/aesthetics/washing_machine/icons/washing_machine.dmi' diff --git a/modular_skyrat/modules/aesthetics/washing_machine/icons/washing_machine.dmi b/modular_nova/modules/aesthetics/washing_machine/icons/washing_machine.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/washing_machine/icons/washing_machine.dmi rename to modular_nova/modules/aesthetics/washing_machine/icons/washing_machine.dmi diff --git a/modular_nova/modules/aesthetics/windows/code/windows.dm b/modular_nova/modules/aesthetics/windows/code/windows.dm new file mode 100644 index 00000000000000..f3218c6207045f --- /dev/null +++ b/modular_nova/modules/aesthetics/windows/code/windows.dm @@ -0,0 +1,27 @@ +/obj/structure/window/fulltile + icon = 'modular_nova/modules/aesthetics/windows/icons/window.dmi' + canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS + +/obj/structure/window/reinforced/fulltile + icon = 'modular_nova/modules/aesthetics/windows/icons/r_window.dmi' + canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS + +/obj/structure/window/reinforced/tinted/fulltile + icon = 'modular_nova/modules/aesthetics/windows/icons/r_window_tinted.dmi' + icon_state = "reinforced_window-0" + base_icon_state = "reinforced_window" + canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS + +/obj/structure/window/plasma/fulltile + icon = 'modular_nova/modules/aesthetics/windows/icons/window_plasma.dmi' + icon_state = "window-0" + base_icon_state = "window" + canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS + +/obj/structure/window/reinforced/plasma/fulltile + icon = 'modular_nova/modules/aesthetics/windows/icons/r_window_plasma.dmi' + icon_state = "reinforced_window-0" + base_icon_state = "reinforced_window" + canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS + +/obj/structure/window/reinforced/fulltile/ice diff --git a/modular_skyrat/modules/aesthetics/windows/icons/r_window.dmi b/modular_nova/modules/aesthetics/windows/icons/r_window.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/windows/icons/r_window.dmi rename to modular_nova/modules/aesthetics/windows/icons/r_window.dmi diff --git a/modular_skyrat/modules/aesthetics/windows/icons/r_window_plasma.dmi b/modular_nova/modules/aesthetics/windows/icons/r_window_plasma.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/windows/icons/r_window_plasma.dmi rename to modular_nova/modules/aesthetics/windows/icons/r_window_plasma.dmi diff --git a/modular_skyrat/modules/aesthetics/windows/icons/r_window_tinted.dmi b/modular_nova/modules/aesthetics/windows/icons/r_window_tinted.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/windows/icons/r_window_tinted.dmi rename to modular_nova/modules/aesthetics/windows/icons/r_window_tinted.dmi diff --git a/modular_skyrat/modules/aesthetics/windows/icons/window.dmi b/modular_nova/modules/aesthetics/windows/icons/window.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/windows/icons/window.dmi rename to modular_nova/modules/aesthetics/windows/icons/window.dmi diff --git a/modular_skyrat/modules/aesthetics/windows/icons/window_plasma.dmi b/modular_nova/modules/aesthetics/windows/icons/window_plasma.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/windows/icons/window_plasma.dmi rename to modular_nova/modules/aesthetics/windows/icons/window_plasma.dmi diff --git a/modular_skyrat/modules/airlock_override/code/airlock_override.dm b/modular_nova/modules/airlock_override/code/airlock_override.dm similarity index 100% rename from modular_skyrat/modules/airlock_override/code/airlock_override.dm rename to modular_nova/modules/airlock_override/code/airlock_override.dm diff --git a/modular_nova/modules/airlock_override/readme.md b/modular_nova/modules/airlock_override/readme.md new file mode 100644 index 00000000000000..5de1a71a63e4cf --- /dev/null +++ b/modular_nova/modules/airlock_override/readme.md @@ -0,0 +1,21 @@ +https://github.com/Skyrat-SS13/Skyrat-tg/pull/16787 + +## Title: +Engineering override for airlocks on orange alert +MODULE ID: AIRLOCK_OVERRIDE + +### Description: +Adds functionality to the airlocks so that when the alert level is set to orange, engineers receive expanded access so they aren't stuck at an airlock when disaster happens. + +### TG Proc/File Changes: +code/game/machinery/computer/communications.dm +code/modules/security_levels/keycard_authentication.dm +tgui/packages/tgui/interfaces/CommunicationsConsole.js +tgui/packages/tgui/interfaces/KeycardAuth.js + +### Defines: +AIRLOCK_LIGHT_ENGINEERING in \Skyrat-tg\modular_nova\modules\aesthetics\airlock\code\airlock.dm +AIRLOCK_ENGINEERING_LIGHT_COLOR in \Skyrat-tg\modular_nova\modules\aesthetics\airlock\code\airlock.dm + +### Credits: +LT3 diff --git a/modular_skyrat/modules/akula/code/wetsuit.dm b/modular_nova/modules/akula/code/wetsuit.dm similarity index 100% rename from modular_skyrat/modules/akula/code/wetsuit.dm rename to modular_nova/modules/akula/code/wetsuit.dm diff --git a/modular_skyrat/modules/alerts/code/alert_sound_to_playing.dm b/modular_nova/modules/alerts/code/alert_sound_to_playing.dm similarity index 100% rename from modular_skyrat/modules/alerts/code/alert_sound_to_playing.dm rename to modular_nova/modules/alerts/code/alert_sound_to_playing.dm diff --git a/modular_skyrat/modules/alerts/code/config.dm b/modular_nova/modules/alerts/code/config.dm similarity index 100% rename from modular_skyrat/modules/alerts/code/config.dm rename to modular_nova/modules/alerts/code/config.dm diff --git a/modular_nova/modules/alerts/code/default_announcer.dm b/modular_nova/modules/alerts/code/default_announcer.dm new file mode 100644 index 00000000000000..fb56fe10edcb61 --- /dev/null +++ b/modular_nova/modules/alerts/code/default_announcer.dm @@ -0,0 +1,47 @@ +/datum/centcom_announcer/default + welcome_sounds = list('sound/ai/default/welcome.ogg') + alert_sounds = list('modular_nova/modules/alerts/sound/alerts/alert2.ogg') + command_report_sounds = list('modular_nova/modules/alerts/sound/alerts/commandreport.ogg') + event_sounds = list( + ANNOUNCER_AIMALF = 'sound/ai/default/aimalf.ogg', + ANNOUNCER_ALIENS = 'modular_nova/modules/alerts/sound/alerts/lifesigns.ogg', + ANNOUNCER_ANIMES = 'modular_nova/modules/alerts/sound/alerts/animes.ogg', + ANNOUNCER_INTERCEPT = 'modular_nova/modules/alerts/sound/alerts/alert2.ogg', + ANNOUNCER_IONSTORM = 'modular_nova/modules/alerts/sound/alerts/ionstorm.ogg', + ANNOUNCER_METEORS = 'modular_nova/modules/alerts/sound/alerts/meteors.ogg', + ANNOUNCER_OUTBREAK5 = 'modular_nova/modules/alerts/sound/alerts/outbreak5.ogg', + ANNOUNCER_OUTBREAK6 = 'modular_nova/modules/alerts/sound/alerts/alert3.ogg', + ANNOUNCER_OUTBREAK7 = 'modular_nova/modules/alerts/sound/alerts/outbreak7.ogg', + ANNOUNCER_POWEROFF = 'modular_nova/modules/alerts/sound/alerts/poweroff.ogg', + ANNOUNCER_POWERON = 'modular_nova/modules/alerts/sound/alerts/poweron.ogg', + ANNOUNCER_RADIATION = 'modular_nova/modules/alerts/sound/alerts/radiation.ogg', + ANNOUNCER_RADIATIONPASSED = 'modular_nova/modules/alerts/sound/alerts/radpassed.ogg', + ANNOUNCER_SHUTTLECALLED = 'modular_nova/modules/alerts/sound/alerts/crew_shuttle_called.ogg', + ANNOUNCER_SHUTTLEDOCK = 'modular_nova/modules/alerts/sound/alerts/crew_shuttle_docked.ogg', + ANNOUNCER_SHUTTLERECALLED = 'modular_nova/modules/alerts/sound/alerts/crew_shuttle_recalled.ogg', + ANNOUNCER_SHUTTLELEFT = 'modular_nova/modules/alerts/sound/alerts/crew_shuttle_left.ogg', + ANNOUNCER_ANOMALIES = 'modular_nova/modules/alerts/sound/alerts/alert2.ogg', + ANNOUNCER_GRAVANOMALIES= 'modular_nova/modules/alerts/sound/alerts/gravanomalies.ogg', + ANNOUNCER_SPANOMALIES = 'modular_nova/modules/alerts/sound/alerts/wormholes.ogg', + ANNOUNCER_VORTEXANOMALIES = 'modular_nova/modules/alerts/sound/alerts/vortex.ogg', + ANNOUNCER_MASSIVEBSPACEANOMALIES = 'modular_nova/modules/alerts/sound/alerts/bluespace_anomalies.ogg', + ANNOUNCER_TRANSLOCATION = 'modular_nova/modules/alerts/sound/alerts/transolcation.ogg', + ANNOUNCER_FLUXANOMALIES = 'modular_nova/modules/alerts/sound/alerts/flux.ogg', + ANNOUNCER_PYROANOMALIES = 'modular_nova/modules/alerts/sound/alerts/pyr_anomalies.ogg', + ANNOUNCER_CARP = 'modular_nova/modules/alerts/sound/alerts/carps.ogg', + ANNOUNCER_BLUESPACEARTY = 'modular_nova/modules/alerts/sound/alerts/artillery.ogg', + ANNOUNCER_CAPTAIN = 'modular_nova/modules/alerts/sound/alerts/announce.ogg', + ANNOUNCER_GRAVGENOFF = 'modular_nova/modules/alerts/sound/alerts/gravityoff.ogg', + ANNOUNCER_GRAVGENON = 'modular_nova/modules/alerts/sound/alerts/gravityon.ogg', + ANNOUNCER_GREYTIDE = 'modular_nova/modules/alerts/sound/alerts/greytide.ogg', + ANNOUNCER_COMMSBLACKOUT = 'modular_nova/modules/alerts/sound/alerts/commsblackout.ogg', + ANNOUNCER_ELECTRICALSTORM = 'modular_nova/modules/alerts/sound/alerts/estorm.ogg', + ANNOUNCER_BRANDINTELLIGENCE = 'modular_nova/modules/alerts/sound/alerts/rampant_brand_int.ogg', + ANNOUNCER_SPOOKY = 'modular_nova/modules/alerts/sound/misc/admin_horror_music.ogg', + ANNOUNCER_ERTYES = 'modular_nova/modules/alerts/sound/alerts/yesert.ogg', + ANNOUNCER_MUTANTS = 'modular_nova/modules/alerts/sound/alerts/hazdet.ogg', + ANNOUNCER_KLAXON = 'modular_nova/modules/black_mesa/sound/siren1_long.ogg', + ANNOUNCER_NRI_RAIDERS = 'modular_nova/modules/encounters/sounds/morse.ogg', + ANNOUNCER_DEPARTMENTAL = 'modular_nova/modules/alerts/sound/alerts/alert3.ogg', + ANNOUNCER_SHUTTLE = 'modular_nova/modules/alerts/sound/alerts/alert3.ogg', + ) diff --git a/modular_nova/modules/alerts/code/security_level_datums.dm b/modular_nova/modules/alerts/code/security_level_datums.dm new file mode 100644 index 00000000000000..f6b51df63c5ebd --- /dev/null +++ b/modular_nova/modules/alerts/code/security_level_datums.dm @@ -0,0 +1,80 @@ +/** + * Contains some overrides and our sec levels. + */ + +/datum/security_level/green + sound = 'modular_nova/modules/alerts/sound/security_levels/green.ogg' + +/datum/security_level/blue + sound = 'modular_nova/modules/alerts/sound/security_levels/blue.ogg' + +/datum/security_level/red + sound = 'modular_nova/modules/alerts/sound/security_levels/red.ogg' + +/datum/security_level/delta + announcement_color = "pink" + lowering_to_configuration_key = /datum/config_entry/string/alert_delta_downto + elevating_to_configuration_key = /datum/config_entry/string/alert_delta_upto + sound = 'modular_nova/modules/alerts/sound/security_levels/delta.ogg' + looping_sound = 'modular_nova/modules/alerts/sound/misc/alarm_delta.ogg' + looping_sound_interval = 8 SECONDS + + +/** + * Violet + * + * Medical emergency + */ +/datum/security_level/violet + name = "violet" + announcement_color = "purple" + number_level = SEC_LEVEL_VIOLET + lowering_to_configuration_key = /datum/config_entry/string/alert_violet_downto + elevating_to_configuration_key = /datum/config_entry/string/alert_violet_upto + sound = 'modular_nova/modules/alerts/sound/security_levels/violet.ogg' + shuttle_call_time_mod = 0.75 + +/** + * Orange + * + * Engineering emergency + */ +/datum/security_level/orange + name = "orange" + announcement_color = "orange" + number_level = SEC_LEVEL_ORANGE + lowering_to_configuration_key = /datum/config_entry/string/alert_orange_downto + elevating_to_configuration_key = /datum/config_entry/string/alert_orange_upto + sound = 'modular_nova/modules/alerts/sound/security_levels/orange.ogg' + shuttle_call_time_mod = 0.75 + +/** + * Amber + * + * Securty emergency + */ + +/datum/security_level/amber + name = "amber" + announcement_color = "yellow" + number_level = SEC_LEVEL_AMBER + lowering_to_configuration_key = /datum/config_entry/string/alert_amber_downto + elevating_to_configuration_key = /datum/config_entry/string/alert_amber_upto + sound = 'modular_nova/modules/alerts/sound/security_levels/amber.ogg' + shuttle_call_time_mod = 0.5 + + +/** + * Gamma + * + * XK-Class EOW Event + */ +/datum/security_level/gamma + name = "gamma" + announcement_color = "pink" + number_level = SEC_LEVEL_GAMMA + elevating_to_configuration_key = /datum/config_entry/string/alert_gamma + shuttle_call_time_mod = 0.25 + sound = 'modular_nova/modules/alerts/sound/security_levels/gamma_alert.ogg' + looping_sound = 'modular_nova/modules/alerts/sound/security_levels/gamma_alert.ogg' + looping_sound_interval = 13 SECONDS diff --git a/modular_skyrat/modules/alerts/code/security_level_procs.dm b/modular_nova/modules/alerts/code/security_level_procs.dm similarity index 100% rename from modular_skyrat/modules/alerts/code/security_level_procs.dm rename to modular_nova/modules/alerts/code/security_level_procs.dm diff --git a/modular_nova/modules/alerts/readme.md b/modular_nova/modules/alerts/readme.md new file mode 100644 index 00000000000000..ffa3009c7d8f76 --- /dev/null +++ b/modular_nova/modules/alerts/readme.md @@ -0,0 +1,29 @@ +## Title: Alerts + +MODULE ID: ALERTS + +### Description: + +Adds new alert levels, and some extra details regarding the alerts + +### TG Proc Changes: +- EDIT: code/controllers/subsystem/shuttle.dm > /datum/controller/subsystem/shuttle/proc/canRecall() +- EDIT: code/game/machinery/computer/communications.dm > /obj/machinery/computer/communications/Topic(), /obj/machinery/computer/communications/ui_interact() +- EDIT: code/modules/mob/dead/new_player/new_player.dm > /mob/dead/new_player/proc/LateChoices() +- MOVED: code/modules/security_levels/security_levels.dm > about the entire file + +### Defines: + + ./code/__DEFINES/misc.dm > moved alert defines to: code/__DEFINES/~nova_defines/security_alerts.dm + +### Master file additions + +- N/A + +### Included files that are not contained in this module: + +- N/A + +### Credits: +Azarak - Porting +Afya - OG code diff --git a/modular_skyrat/modules/alerts/sound/alerts/aimalf.ogg b/modular_nova/modules/alerts/sound/alerts/aimalf.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/aimalf.ogg rename to modular_nova/modules/alerts/sound/alerts/aimalf.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/alert1.ogg b/modular_nova/modules/alerts/sound/alerts/alert1.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/alert1.ogg rename to modular_nova/modules/alerts/sound/alerts/alert1.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/alert2.ogg b/modular_nova/modules/alerts/sound/alerts/alert2.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/alert2.ogg rename to modular_nova/modules/alerts/sound/alerts/alert2.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/alert3.ogg b/modular_nova/modules/alerts/sound/alerts/alert3.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/alert3.ogg rename to modular_nova/modules/alerts/sound/alerts/alert3.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/aliens.ogg b/modular_nova/modules/alerts/sound/alerts/aliens.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/aliens.ogg rename to modular_nova/modules/alerts/sound/alerts/aliens.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/animes.ogg b/modular_nova/modules/alerts/sound/alerts/animes.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/animes.ogg rename to modular_nova/modules/alerts/sound/alerts/animes.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/announce.ogg b/modular_nova/modules/alerts/sound/alerts/announce.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/announce.ogg rename to modular_nova/modules/alerts/sound/alerts/announce.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/artillery.ogg b/modular_nova/modules/alerts/sound/alerts/artillery.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/artillery.ogg rename to modular_nova/modules/alerts/sound/alerts/artillery.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/attention.ogg b/modular_nova/modules/alerts/sound/alerts/attention.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/attention.ogg rename to modular_nova/modules/alerts/sound/alerts/attention.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/bluespace_anomalies.ogg b/modular_nova/modules/alerts/sound/alerts/bluespace_anomalies.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/bluespace_anomalies.ogg rename to modular_nova/modules/alerts/sound/alerts/bluespace_anomalies.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/carps.ogg b/modular_nova/modules/alerts/sound/alerts/carps.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/carps.ogg rename to modular_nova/modules/alerts/sound/alerts/carps.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/commandreport.ogg b/modular_nova/modules/alerts/sound/alerts/commandreport.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/commandreport.ogg rename to modular_nova/modules/alerts/sound/alerts/commandreport.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/commsblackout.ogg b/modular_nova/modules/alerts/sound/alerts/commsblackout.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/commsblackout.ogg rename to modular_nova/modules/alerts/sound/alerts/commsblackout.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_called.ogg b/modular_nova/modules/alerts/sound/alerts/crew_shuttle_called.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_called.ogg rename to modular_nova/modules/alerts/sound/alerts/crew_shuttle_called.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_docked.ogg b/modular_nova/modules/alerts/sound/alerts/crew_shuttle_docked.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_docked.ogg rename to modular_nova/modules/alerts/sound/alerts/crew_shuttle_docked.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_left.ogg b/modular_nova/modules/alerts/sound/alerts/crew_shuttle_left.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_left.ogg rename to modular_nova/modules/alerts/sound/alerts/crew_shuttle_left.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_recalled.ogg b/modular_nova/modules/alerts/sound/alerts/crew_shuttle_recalled.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_recalled.ogg rename to modular_nova/modules/alerts/sound/alerts/crew_shuttle_recalled.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/estorm.ogg b/modular_nova/modules/alerts/sound/alerts/estorm.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/estorm.ogg rename to modular_nova/modules/alerts/sound/alerts/estorm.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/flux.ogg b/modular_nova/modules/alerts/sound/alerts/flux.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/flux.ogg rename to modular_nova/modules/alerts/sound/alerts/flux.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/gravanomalies.ogg b/modular_nova/modules/alerts/sound/alerts/gravanomalies.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/gravanomalies.ogg rename to modular_nova/modules/alerts/sound/alerts/gravanomalies.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/gravityoff.ogg b/modular_nova/modules/alerts/sound/alerts/gravityoff.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/gravityoff.ogg rename to modular_nova/modules/alerts/sound/alerts/gravityoff.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/gravityon.ogg b/modular_nova/modules/alerts/sound/alerts/gravityon.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/gravityon.ogg rename to modular_nova/modules/alerts/sound/alerts/gravityon.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/greytide.ogg b/modular_nova/modules/alerts/sound/alerts/greytide.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/greytide.ogg rename to modular_nova/modules/alerts/sound/alerts/greytide.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/hazdet.ogg b/modular_nova/modules/alerts/sound/alerts/hazdet.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/hazdet.ogg rename to modular_nova/modules/alerts/sound/alerts/hazdet.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/intercept.ogg b/modular_nova/modules/alerts/sound/alerts/intercept.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/intercept.ogg rename to modular_nova/modules/alerts/sound/alerts/intercept.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/ionstorm.ogg b/modular_nova/modules/alerts/sound/alerts/ionstorm.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/ionstorm.ogg rename to modular_nova/modules/alerts/sound/alerts/ionstorm.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/lifesigns.ogg b/modular_nova/modules/alerts/sound/alerts/lifesigns.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/lifesigns.ogg rename to modular_nova/modules/alerts/sound/alerts/lifesigns.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/meteors.ogg b/modular_nova/modules/alerts/sound/alerts/meteors.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/meteors.ogg rename to modular_nova/modules/alerts/sound/alerts/meteors.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/noert.ogg b/modular_nova/modules/alerts/sound/alerts/noert.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/noert.ogg rename to modular_nova/modules/alerts/sound/alerts/noert.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/outbreak5.ogg b/modular_nova/modules/alerts/sound/alerts/outbreak5.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/outbreak5.ogg rename to modular_nova/modules/alerts/sound/alerts/outbreak5.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/outbreak7.ogg b/modular_nova/modules/alerts/sound/alerts/outbreak7.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/outbreak7.ogg rename to modular_nova/modules/alerts/sound/alerts/outbreak7.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/poweroff.ogg b/modular_nova/modules/alerts/sound/alerts/poweroff.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/poweroff.ogg rename to modular_nova/modules/alerts/sound/alerts/poweroff.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/poweron.ogg b/modular_nova/modules/alerts/sound/alerts/poweron.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/poweron.ogg rename to modular_nova/modules/alerts/sound/alerts/poweron.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/pyr_anomalies.ogg b/modular_nova/modules/alerts/sound/alerts/pyr_anomalies.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/pyr_anomalies.ogg rename to modular_nova/modules/alerts/sound/alerts/pyr_anomalies.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/radiation.ogg b/modular_nova/modules/alerts/sound/alerts/radiation.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/radiation.ogg rename to modular_nova/modules/alerts/sound/alerts/radiation.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/radiation1.ogg b/modular_nova/modules/alerts/sound/alerts/radiation1.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/radiation1.ogg rename to modular_nova/modules/alerts/sound/alerts/radiation1.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/radpassed.ogg b/modular_nova/modules/alerts/sound/alerts/radpassed.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/radpassed.ogg rename to modular_nova/modules/alerts/sound/alerts/radpassed.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/rampant_brand_int.ogg b/modular_nova/modules/alerts/sound/alerts/rampant_brand_int.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/rampant_brand_int.ogg rename to modular_nova/modules/alerts/sound/alerts/rampant_brand_int.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/transolcation.ogg b/modular_nova/modules/alerts/sound/alerts/transolcation.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/transolcation.ogg rename to modular_nova/modules/alerts/sound/alerts/transolcation.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/vortex.ogg b/modular_nova/modules/alerts/sound/alerts/vortex.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/vortex.ogg rename to modular_nova/modules/alerts/sound/alerts/vortex.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/wormholes.ogg b/modular_nova/modules/alerts/sound/alerts/wormholes.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/wormholes.ogg rename to modular_nova/modules/alerts/sound/alerts/wormholes.ogg diff --git a/modular_skyrat/modules/alerts/sound/alerts/yesert.ogg b/modular_nova/modules/alerts/sound/alerts/yesert.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/alerts/yesert.ogg rename to modular_nova/modules/alerts/sound/alerts/yesert.ogg diff --git a/modular_skyrat/modules/alerts/sound/misc/admin_horror_music.ogg b/modular_nova/modules/alerts/sound/misc/admin_horror_music.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/misc/admin_horror_music.ogg rename to modular_nova/modules/alerts/sound/misc/admin_horror_music.ogg diff --git a/modular_skyrat/modules/alerts/sound/misc/alarm_delta.ogg b/modular_nova/modules/alerts/sound/misc/alarm_delta.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/misc/alarm_delta.ogg rename to modular_nova/modules/alerts/sound/misc/alarm_delta.ogg diff --git a/modular_skyrat/modules/alerts/sound/misc/delta_countdown.ogg b/modular_nova/modules/alerts/sound/misc/delta_countdown.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/misc/delta_countdown.ogg rename to modular_nova/modules/alerts/sound/misc/delta_countdown.ogg diff --git a/modular_skyrat/modules/alerts/sound/misc/notice1.ogg b/modular_nova/modules/alerts/sound/misc/notice1.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/misc/notice1.ogg rename to modular_nova/modules/alerts/sound/misc/notice1.ogg diff --git a/modular_skyrat/modules/alerts/sound/misc/redalert1.ogg b/modular_nova/modules/alerts/sound/misc/redalert1.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/misc/redalert1.ogg rename to modular_nova/modules/alerts/sound/misc/redalert1.ogg diff --git a/modular_skyrat/modules/alerts/sound/misc/tas_red_alert.ogg b/modular_nova/modules/alerts/sound/misc/tas_red_alert.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/misc/tas_red_alert.ogg rename to modular_nova/modules/alerts/sound/misc/tas_red_alert.ogg diff --git a/modular_skyrat/modules/alerts/sound/misc/voyalert.ogg b/modular_nova/modules/alerts/sound/misc/voyalert.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/misc/voyalert.ogg rename to modular_nova/modules/alerts/sound/misc/voyalert.ogg diff --git a/modular_skyrat/modules/alerts/sound/misc/voybluealert.ogg b/modular_nova/modules/alerts/sound/misc/voybluealert.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/misc/voybluealert.ogg rename to modular_nova/modules/alerts/sound/misc/voybluealert.ogg diff --git a/modular_skyrat/modules/alerts/sound/security_levels/amber.ogg b/modular_nova/modules/alerts/sound/security_levels/amber.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/security_levels/amber.ogg rename to modular_nova/modules/alerts/sound/security_levels/amber.ogg diff --git a/modular_skyrat/modules/alerts/sound/security_levels/blue.ogg b/modular_nova/modules/alerts/sound/security_levels/blue.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/security_levels/blue.ogg rename to modular_nova/modules/alerts/sound/security_levels/blue.ogg diff --git a/modular_skyrat/modules/alerts/sound/security_levels/delta.ogg b/modular_nova/modules/alerts/sound/security_levels/delta.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/security_levels/delta.ogg rename to modular_nova/modules/alerts/sound/security_levels/delta.ogg diff --git a/modular_skyrat/modules/alerts/sound/security_levels/gamma_alert.ogg b/modular_nova/modules/alerts/sound/security_levels/gamma_alert.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/security_levels/gamma_alert.ogg rename to modular_nova/modules/alerts/sound/security_levels/gamma_alert.ogg diff --git a/modular_skyrat/modules/alerts/sound/security_levels/green.ogg b/modular_nova/modules/alerts/sound/security_levels/green.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/security_levels/green.ogg rename to modular_nova/modules/alerts/sound/security_levels/green.ogg diff --git a/modular_skyrat/modules/alerts/sound/security_levels/orange.ogg b/modular_nova/modules/alerts/sound/security_levels/orange.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/security_levels/orange.ogg rename to modular_nova/modules/alerts/sound/security_levels/orange.ogg diff --git a/modular_skyrat/modules/alerts/sound/security_levels/red.ogg b/modular_nova/modules/alerts/sound/security_levels/red.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/security_levels/red.ogg rename to modular_nova/modules/alerts/sound/security_levels/red.ogg diff --git a/modular_skyrat/modules/alerts/sound/security_levels/violet.ogg b/modular_nova/modules/alerts/sound/security_levels/violet.ogg similarity index 100% rename from modular_skyrat/modules/alerts/sound/security_levels/violet.ogg rename to modular_nova/modules/alerts/sound/security_levels/violet.ogg diff --git a/modular_nova/modules/alt_vox/code/voc_sounds_mil.dm b/modular_nova/modules/alt_vox/code/voc_sounds_mil.dm new file mode 100644 index 00000000000000..6e9e9c8a629897 --- /dev/null +++ b/modular_nova/modules/alt_vox/code/voc_sounds_mil.dm @@ -0,0 +1,294 @@ +#ifdef AI_VOX + +GLOBAL_LIST_INIT(vox_sounds_mil, list( + "," = 'modular_nova/modules/alt_vox/sound/vox_mil/_comma.ogg', + "." = 'modular_nova/modules/alt_vox/sound/vox_mil/_period.ogg', + "error_beep" = 'modular_nova/modules/alt_vox/sound/vox_mil/00_error_beep01.ogg', + "signon_beep" = 'modular_nova/modules/alt_vox/sound/vox_mil/00_signon_beep01.ogg', + "hostile_takeover" = 'modular_nova/modules/alt_vox/sound/vox_mil/c1a3_05_switchover.ogg', + "bloop" = 'modular_nova/modules/alt_vox/sound/vox_mil/bloop.ogg', + "buzwarn" = 'modular_nova/modules/alt_vox/sound/vox_mil/buzwarn.ogg', + "dadeda" = 'modular_nova/modules/alt_vox/sound/vox_mil/dadeda.ogg', + "deeoo" = 'modular_nova/modules/alt_vox/sound/vox_mil/deeoo.ogg', + "doop" = 'modular_nova/modules/alt_vox/sound/vox_mil/doop.ogg', + "access" = 'modular_nova/modules/alt_vox/sound/vox_mil/access.ogg', + "acknowledged" = 'modular_nova/modules/alt_vox/sound/vox_mil/acknowledged.ogg', + "activate" = 'modular_nova/modules/alt_vox/sound/vox_mil/activate.ogg', + "activated" = 'modular_nova/modules/alt_vox/sound/vox_mil/activated.ogg', + "activity" = 'modular_nova/modules/alt_vox/sound/vox_mil/activity.ogg', + "advanced" = 'modular_nova/modules/alt_vox/sound/vox_mil/advanced.ogg', + "alert" = 'modular_nova/modules/alt_vox/sound/vox_mil/alert.ogg', + "alien" = 'modular_nova/modules/alt_vox/sound/vox_mil/alien.ogg', + "all" = 'modular_nova/modules/alt_vox/sound/vox_mil/all.ogg', + "alpha" = 'modular_nova/modules/alt_vox/sound/vox_mil/alpha.ogg', + "an" = 'modular_nova/modules/alt_vox/sound/vox_mil/an.ogg', + "and" = 'modular_nova/modules/alt_vox/sound/vox_mil/and.ogg', + "announcement" = 'modular_nova/modules/alt_vox/sound/vox_mil/announcement.ogg', + "antenna" = 'modular_nova/modules/alt_vox/sound/vox_mil/antenna.ogg', + "any" = 'modular_nova/modules/alt_vox/sound/vox_mil/any.ogg', + "approach" = 'modular_nova/modules/alt_vox/sound/vox_mil/approach.ogg', + "are" = 'modular_nova/modules/alt_vox/sound/vox_mil/are.ogg', + "area" = 'modular_nova/modules/alt_vox/sound/vox_mil/area.ogg', + "armed" = 'modular_nova/modules/alt_vox/sound/vox_mil/armed.ogg', + "armory" = 'modular_nova/modules/alt_vox/sound/vox_mil/armory.ogg', + "atomic" = 'modular_nova/modules/alt_vox/sound/vox_mil/atomic.ogg', + "attention" = 'modular_nova/modules/alt_vox/sound/vox_mil/attention.ogg', + "authorized" = 'modular_nova/modules/alt_vox/sound/vox_mil/authorized.ogg', + "automatic" = 'modular_nova/modules/alt_vox/sound/vox_mil/automatic.ogg', + "away" = 'modular_nova/modules/alt_vox/sound/vox_mil/away.ogg', + "b" = 'modular_nova/modules/alt_vox/sound/vox_mil/b.ogg', + "back" = 'modular_nova/modules/alt_vox/sound/vox_mil/back.ogg', + "base" = 'modular_nova/modules/alt_vox/sound/vox_mil/base.ogg', + "biohazard" = 'modular_nova/modules/alt_vox/sound/vox_mil/biohazard.ogg', + "biological" = 'modular_nova/modules/alt_vox/sound/vox_mil/biological.ogg', + "black" = 'modular_nova/modules/alt_vox/sound/vox_mil/black.ogg', + "blast" = 'modular_nova/modules/alt_vox/sound/vox_mil/blast.ogg', + "blue" = 'modular_nova/modules/alt_vox/sound/vox_mil/blue.ogg', + "bravo" = 'modular_nova/modules/alt_vox/sound/vox_mil/bravo.ogg', + "breach" = 'modular_nova/modules/alt_vox/sound/vox_mil/breach.ogg', + "bypass" = 'modular_nova/modules/alt_vox/sound/vox_mil/bypass.ogg', + "cable" = 'modular_nova/modules/alt_vox/sound/vox_mil/cable.ogg', + "center" = 'modular_nova/modules/alt_vox/sound/vox_mil/center.ogg', + "central" = 'modular_nova/modules/alt_vox/sound/vox_mil/central.ogg', + "chamber" = 'modular_nova/modules/alt_vox/sound/vox_mil/chamber.ogg', + "check" = 'modular_nova/modules/alt_vox/sound/vox_mil/check.ogg', + "checkpoint" = 'modular_nova/modules/alt_vox/sound/vox_mil/checkpoint.ogg', + "chemical" = 'modular_nova/modules/alt_vox/sound/vox_mil/chemical.ogg', + "clear" = 'modular_nova/modules/alt_vox/sound/vox_mil/clear.ogg', + "code" = 'modular_nova/modules/alt_vox/sound/vox_mil/code.ogg', + "command" = 'modular_nova/modules/alt_vox/sound/vox_mil/command.ogg', + "communications" = 'modular_nova/modules/alt_vox/sound/vox_mil/communications.ogg', + "complex" = 'modular_nova/modules/alt_vox/sound/vox_mil/complex.ogg', + "containment" = 'modular_nova/modules/alt_vox/sound/vox_mil/containment.ogg', + "contamination" = 'modular_nova/modules/alt_vox/sound/vox_mil/contamination.ogg', + "control" = 'modular_nova/modules/alt_vox/sound/vox_mil/control.ogg', + "coolant" = 'modular_nova/modules/alt_vox/sound/vox_mil/coolant.ogg', + "core" = 'modular_nova/modules/alt_vox/sound/vox_mil/core.ogg', + "crew" = 'modular_nova/modules/alt_vox/sound/vox_mil/crew.ogg', + "cross" = 'modular_nova/modules/alt_vox/sound/vox_mil/cross.ogg', + "d" = 'modular_nova/modules/alt_vox/sound/vox_mil/d.ogg', + "damage" = 'modular_nova/modules/alt_vox/sound/vox_mil/damage.ogg', + "danger" = 'modular_nova/modules/alt_vox/sound/vox_mil/danger.ogg', + "day" = 'modular_nova/modules/alt_vox/sound/vox_mil/day.ogg', + "deactivated" = 'modular_nova/modules/alt_vox/sound/vox_mil/deactivated.ogg', + "defense" = 'modular_nova/modules/alt_vox/sound/vox_mil/defense.ogg', + "delta" = 'modular_nova/modules/alt_vox/sound/vox_mil/delta.ogg', + "denied" = 'modular_nova/modules/alt_vox/sound/vox_mil/denied.ogg', + "destroy" = 'modular_nova/modules/alt_vox/sound/vox_mil/destroy.ogg', + "detected" = 'modular_nova/modules/alt_vox/sound/vox_mil/detected.ogg', + "detonation" = 'modular_nova/modules/alt_vox/sound/vox_mil/detonation.ogg', + "device" = 'modular_nova/modules/alt_vox/sound/vox_mil/device.ogg', + "dimensional" = 'modular_nova/modules/alt_vox/sound/vox_mil/dimensional.ogg', + "disengaged" = 'modular_nova/modules/alt_vox/sound/vox_mil/disengaged.ogg', + "do" = 'modular_nova/modules/alt_vox/sound/vox_mil/do.ogg', + "door" = 'modular_nova/modules/alt_vox/sound/vox_mil/door.ogg', + "down" = 'modular_nova/modules/alt_vox/sound/vox_mil/down.ogg', + "e" = 'modular_nova/modules/alt_vox/sound/vox_mil/e.ogg', + "echo" = 'modular_nova/modules/alt_vox/sound/vox_mil/echo.ogg', + "eight" = 'modular_nova/modules/alt_vox/sound/vox_mil/eight.ogg', + "eighteen" = 'modular_nova/modules/alt_vox/sound/vox_mil/eighteen.ogg', + "eighty" = 'modular_nova/modules/alt_vox/sound/vox_mil/eighty.ogg', + "electric" = 'modular_nova/modules/alt_vox/sound/vox_mil/electric.ogg', + "eleven" = 'modular_nova/modules/alt_vox/sound/vox_mil/eleven.ogg', + "eliminate" = 'modular_nova/modules/alt_vox/sound/vox_mil/eliminate.ogg', + "emergency" = 'modular_nova/modules/alt_vox/sound/vox_mil/emergency.ogg', + "energy" = 'modular_nova/modules/alt_vox/sound/vox_mil/energy.ogg', + "engage" = 'modular_nova/modules/alt_vox/sound/vox_mil/engage.ogg', + "engaged" = 'modular_nova/modules/alt_vox/sound/vox_mil/engaged.ogg', + "enter" = 'modular_nova/modules/alt_vox/sound/vox_mil/enter.ogg', + "entry" = 'modular_nova/modules/alt_vox/sound/vox_mil/entry.ogg', + "escape" = 'modular_nova/modules/alt_vox/sound/vox_mil/escape.ogg', + "evacuate" = 'modular_nova/modules/alt_vox/sound/vox_mil/evacuate.ogg', + "exchange" = 'modular_nova/modules/alt_vox/sound/vox_mil/exchange.ogg', + "experimental" = 'modular_nova/modules/alt_vox/sound/vox_mil/experimental.ogg', + "extreme" = 'modular_nova/modules/alt_vox/sound/vox_mil/extreme.ogg', + "facility" = 'modular_nova/modules/alt_vox/sound/vox_mil/facility.ogg', + "failed" = 'modular_nova/modules/alt_vox/sound/vox_mil/failed.ogg', + "failure" = 'modular_nova/modules/alt_vox/sound/vox_mil/failure.ogg', + "field" = 'modular_nova/modules/alt_vox/sound/vox_mil/field.ogg', + "fifteen" = 'modular_nova/modules/alt_vox/sound/vox_mil/fifteen.ogg', + "fifty" = 'modular_nova/modules/alt_vox/sound/vox_mil/fifty.ogg', + "fire" = 'modular_nova/modules/alt_vox/sound/vox_mil/fire.ogg', + "five" = 'modular_nova/modules/alt_vox/sound/vox_mil/five.ogg', + "forbidden" = 'modular_nova/modules/alt_vox/sound/vox_mil/forbidden.ogg', + "force" = 'modular_nova/modules/alt_vox/sound/vox_mil/force.ogg', + "forms" = 'modular_nova/modules/alt_vox/sound/vox_mil/forms.ogg', + "forty" = 'modular_nova/modules/alt_vox/sound/vox_mil/forty.ogg', + "four" = 'modular_nova/modules/alt_vox/sound/vox_mil/four.ogg', + "fourteen " = 'modular_nova/modules/alt_vox/sound/vox_mil/fourteen .ogg', + "freeman" = 'modular_nova/modules/alt_vox/sound/vox_mil/freeman.ogg', + "from" = 'modular_nova/modules/alt_vox/sound/vox_mil/from.ogg', + "fuel" = 'modular_nova/modules/alt_vox/sound/vox_mil/fuel.ogg', + "get" = 'modular_nova/modules/alt_vox/sound/vox_mil/get.ogg', + "go" = 'modular_nova/modules/alt_vox/sound/vox_mil/go.ogg', + "gordon" = 'modular_nova/modules/alt_vox/sound/vox_mil/gordon.ogg', + "granted" = 'modular_nova/modules/alt_vox/sound/vox_mil/granted.ogg', + "green" = 'modular_nova/modules/alt_vox/sound/vox_mil/green.ogg', + "handling" = 'modular_nova/modules/alt_vox/sound/vox_mil/handling.ogg', + "hanger" = 'modular_nova/modules/alt_vox/sound/vox_mil/hanger.ogg', + "have" = 'modular_nova/modules/alt_vox/sound/vox_mil/have.ogg', + "hazard" = 'modular_nova/modules/alt_vox/sound/vox_mil/hazard.ogg', + "health" = 'modular_nova/modules/alt_vox/sound/vox_mil/health.ogg', + "heat" = 'modular_nova/modules/alt_vox/sound/vox_mil/heat.ogg', + "helecopter" = 'modular_nova/modules/alt_vox/sound/vox_mil/helecopter.ogg', + "helium" = 'modular_nova/modules/alt_vox/sound/vox_mil/helium.ogg', + "high" = 'modular_nova/modules/alt_vox/sound/vox_mil/high.ogg', + "hostal" = 'modular_nova/modules/alt_vox/sound/vox_mil/hostal.ogg', + "hostile" = 'modular_nova/modules/alt_vox/sound/vox_mil/hostile.ogg', + "hotel" = 'modular_nova/modules/alt_vox/sound/vox_mil/hotel.ogg', + "hundred" = 'modular_nova/modules/alt_vox/sound/vox_mil/hundred.ogg', + "hydro" = 'modular_nova/modules/alt_vox/sound/vox_mil/hydro.ogg', + "illegal" = 'modular_nova/modules/alt_vox/sound/vox_mil/illegal.ogg', + "immediate" = 'modular_nova/modules/alt_vox/sound/vox_mil/immediate.ogg', + "immediately" = 'modular_nova/modules/alt_vox/sound/vox_mil/immediately.ogg', + "in" = 'modular_nova/modules/alt_vox/sound/vox_mil/in.ogg', + "india" = 'modular_nova/modules/alt_vox/sound/vox_mil/india.ogg', + "inoperative" = 'modular_nova/modules/alt_vox/sound/vox_mil/inoperative.ogg', + "inside" = 'modular_nova/modules/alt_vox/sound/vox_mil/inside.ogg', + "inspection" = 'modular_nova/modules/alt_vox/sound/vox_mil/inspection.ogg', + "is" = 'modular_nova/modules/alt_vox/sound/vox_mil/is.ogg', + "kilo" = 'modular_nova/modules/alt_vox/sound/vox_mil/kilo01.ogg', + "kilo2" = 'modular_nova/modules/alt_vox/sound/vox_mil/kilo02.ogg', + "lambda" = 'modular_nova/modules/alt_vox/sound/vox_mil/lambda.ogg', + "laser" = 'modular_nova/modules/alt_vox/sound/vox_mil/laser.ogg', + "launch" = 'modular_nova/modules/alt_vox/sound/vox_mil/launch.ogg', + "leak" = 'modular_nova/modules/alt_vox/sound/vox_mil/leak.ogg', + "level" = 'modular_nova/modules/alt_vox/sound/vox_mil/level.ogg', + "lima" = 'modular_nova/modules/alt_vox/sound/vox_mil/lima.ogg', + "lima_alt" = 'modular_nova/modules/alt_vox/sound/vox_mil/lima_alt.ogg', + "liquid" = 'modular_nova/modules/alt_vox/sound/vox_mil/liquid.ogg', + "lock" = 'modular_nova/modules/alt_vox/sound/vox_mil/lock.ogg', + "locked" = 'modular_nova/modules/alt_vox/sound/vox_mil/locked.ogg', + "lockout" = 'modular_nova/modules/alt_vox/sound/vox_mil/lockout.ogg', + "lower" = 'modular_nova/modules/alt_vox/sound/vox_mil/lower.ogg', + "main" = 'modular_nova/modules/alt_vox/sound/vox_mil/main.ogg', + "maintenance" = 'modular_nova/modules/alt_vox/sound/vox_mil/maintenance.ogg', + "malfunction" = 'modular_nova/modules/alt_vox/sound/vox_mil/malfunction.ogg', + "materials" = 'modular_nova/modules/alt_vox/sound/vox_mil/materials.ogg', + "may" = 'modular_nova/modules/alt_vox/sound/vox_mil/may.ogg', + "medical" = 'modular_nova/modules/alt_vox/sound/vox_mil/medical.ogg', + "men" = 'modular_nova/modules/alt_vox/sound/vox_mil/men.ogg', + "mesa" = 'modular_nova/modules/alt_vox/sound/vox_mil/mesa.ogg', + "message" = 'modular_nova/modules/alt_vox/sound/vox_mil/message.ogg', + "mic_mike" = 'modular_nova/modules/alt_vox/sound/vox_mil/mic_mike.ogg', + "mike" = 'modular_nova/modules/alt_vox/sound/vox_mil/mike.ogg', + "military" = 'modular_nova/modules/alt_vox/sound/vox_mil/military.ogg', + "motorpool" = 'modular_nova/modules/alt_vox/sound/vox_mil/motorpool.ogg', + "move" = 'modular_nova/modules/alt_vox/sound/vox_mil/move.ogg', + "must" = 'modular_nova/modules/alt_vox/sound/vox_mil/must.ogg', + "nearest" = 'modular_nova/modules/alt_vox/sound/vox_mil/nearest.ogg', + "nine" = 'modular_nova/modules/alt_vox/sound/vox_mil/nine.ogg', + "nineteen" = 'modular_nova/modules/alt_vox/sound/vox_mil/nineteen.ogg', + "ninety" = 'modular_nova/modules/alt_vox/sound/vox_mil/ninety.ogg', + "no" = 'modular_nova/modules/alt_vox/sound/vox_mil/no.ogg', + "noe" = 'modular_nova/modules/alt_vox/sound/vox_mil/noe.ogg', + "not" = 'modular_nova/modules/alt_vox/sound/vox_mil/not.ogg', + "now" = 'modular_nova/modules/alt_vox/sound/vox_mil/now.ogg', + "objective" = 'modular_nova/modules/alt_vox/sound/vox_mil/objective.ogg', + "of" = 'modular_nova/modules/alt_vox/sound/vox_mil/of.ogg', + "on" = 'modular_nova/modules/alt_vox/sound/vox_mil/on.ogg', + "one" = 'modular_nova/modules/alt_vox/sound/vox_mil/one.ogg', + "open" = 'modular_nova/modules/alt_vox/sound/vox_mil/open.ogg', + "operating" = 'modular_nova/modules/alt_vox/sound/vox_mil/operating.ogg', + "option" = 'modular_nova/modules/alt_vox/sound/vox_mil/option.ogg', + "out" = 'modular_nova/modules/alt_vox/sound/vox_mil/out.ogg', + "override" = 'modular_nova/modules/alt_vox/sound/vox_mil/override.ogg', + "percent" = 'modular_nova/modules/alt_vox/sound/vox_mil/percent.ogg', + "perimeter" = 'modular_nova/modules/alt_vox/sound/vox_mil/perimeter.ogg', + "permitted" = 'modular_nova/modules/alt_vox/sound/vox_mil/permitted.ogg', + "perpulsion" = 'modular_nova/modules/alt_vox/sound/vox_mil/perpulsion.ogg', + "personnel" = 'modular_nova/modules/alt_vox/sound/vox_mil/personnel.ogg', + "plant" = 'modular_nova/modules/alt_vox/sound/vox_mil/plant.ogg', + "please" = 'modular_nova/modules/alt_vox/sound/vox_mil/please.ogg', + "portal" = 'modular_nova/modules/alt_vox/sound/vox_mil/portal.ogg', + "power" = 'modular_nova/modules/alt_vox/sound/vox_mil/power.ogg', + "primary" = 'modular_nova/modules/alt_vox/sound/vox_mil/primary.ogg', + "prosecute" = 'modular_nova/modules/alt_vox/sound/vox_mil/prosecute.ogg', + "questioning" = 'modular_nova/modules/alt_vox/sound/vox_mil/questioning.ogg', + "radiation" = 'modular_nova/modules/alt_vox/sound/vox_mil/radiation.ogg', + "radioactive" = 'modular_nova/modules/alt_vox/sound/vox_mil/radioactive.ogg', + "reach" = 'modular_nova/modules/alt_vox/sound/vox_mil/reach.ogg', + "reactor" = 'modular_nova/modules/alt_vox/sound/vox_mil/reactor.ogg', + "relay" = 'modular_nova/modules/alt_vox/sound/vox_mil/relay.ogg', + "released" = 'modular_nova/modules/alt_vox/sound/vox_mil/released.ogg', + "remaining" = 'modular_nova/modules/alt_vox/sound/vox_mil/remaining.ogg', + "renegade" = 'modular_nova/modules/alt_vox/sound/vox_mil/renegade.ogg', + "repair" = 'modular_nova/modules/alt_vox/sound/vox_mil/repair.ogg', + "report" = 'modular_nova/modules/alt_vox/sound/vox_mil/report.ogg', + "reports" = 'modular_nova/modules/alt_vox/sound/vox_mil/reports.ogg', + "required" = 'modular_nova/modules/alt_vox/sound/vox_mil/required.ogg', + "research" = 'modular_nova/modules/alt_vox/sound/vox_mil/research.ogg', + "resistance" = 'modular_nova/modules/alt_vox/sound/vox_mil/resistance.ogg', + "rocket" = 'modular_nova/modules/alt_vox/sound/vox_mil/rocket.ogg', + "safety" = 'modular_nova/modules/alt_vox/sound/vox_mil/safety.ogg', + "satellite" = 'modular_nova/modules/alt_vox/sound/vox_mil/satellite.ogg', + "science" = 'modular_nova/modules/alt_vox/sound/vox_mil/science.ogg', + "search" = 'modular_nova/modules/alt_vox/sound/vox_mil/search.ogg', + "second" = 'modular_nova/modules/alt_vox/sound/vox_mil/second.ogg', + "secondary" = 'modular_nova/modules/alt_vox/sound/vox_mil/secondary.ogg', + "seconds" = 'modular_nova/modules/alt_vox/sound/vox_mil/seconds.ogg', + "sector" = 'modular_nova/modules/alt_vox/sound/vox_mil/sector.ogg', + "secure" = 'modular_nova/modules/alt_vox/sound/vox_mil/secure.ogg', + "seven" = 'modular_nova/modules/alt_vox/sound/vox_mil/seven.ogg', + "seventeen" = 'modular_nova/modules/alt_vox/sound/vox_mil/seventeen.ogg', + "seventy" = 'modular_nova/modules/alt_vox/sound/vox_mil/seventy.ogg', + "severe" = 'modular_nova/modules/alt_vox/sound/vox_mil/severe.ogg', + "sheild" = 'modular_nova/modules/alt_vox/sound/vox_mil/sheild.ogg', + "shoot" = 'modular_nova/modules/alt_vox/sound/vox_mil/shoot.ogg', + "sierra" = 'modular_nova/modules/alt_vox/sound/vox_mil/sierra.ogg', + "sight" = 'modular_nova/modules/alt_vox/sound/vox_mil/sight.ogg', + "silo" = 'modular_nova/modules/alt_vox/sound/vox_mil/silo.ogg', + "six" = 'modular_nova/modules/alt_vox/sound/vox_mil/six.ogg', + "sixteen" = 'modular_nova/modules/alt_vox/sound/vox_mil/sixteen.ogg', + "sixty" = 'modular_nova/modules/alt_vox/sound/vox_mil/sixty.ogg', + "sorry" = 'modular_nova/modules/alt_vox/sound/vox_mil/sorry.ogg', + "sqaud" = 'modular_nova/modules/alt_vox/sound/vox_mil/sqaud.ogg', + "status" = 'modular_nova/modules/alt_vox/sound/vox_mil/status.ogg', + "sterilization" = 'modular_nova/modules/alt_vox/sound/vox_mil/sterilization.ogg', + "storage" = 'modular_nova/modules/alt_vox/sound/vox_mil/storage.ogg', + "supercooled" = 'modular_nova/modules/alt_vox/sound/vox_mil/supercooled.ogg', + "surrender" = 'modular_nova/modules/alt_vox/sound/vox_mil/surrender.ogg', + "system" = 'modular_nova/modules/alt_vox/sound/vox_mil/system.ogg', + "systems" = 'modular_nova/modules/alt_vox/sound/vox_mil/systems.ogg', + "target" = 'modular_nova/modules/alt_vox/sound/vox_mil/target.ogg', + "team" = 'modular_nova/modules/alt_vox/sound/vox_mil/team.ogg', + "ten" = 'modular_nova/modules/alt_vox/sound/vox_mil/ten.ogg', + "terminated" = 'modular_nova/modules/alt_vox/sound/vox_mil/terminated.ogg', + "test" = 'modular_nova/modules/alt_vox/sound/vox_mil/test.ogg', + "the" = 'modular_nova/modules/alt_vox/sound/vox_mil/the.ogg', + "thirtteen" = 'modular_nova/modules/alt_vox/sound/vox_mil/thirtteen.ogg', + "thirty" = 'modular_nova/modules/alt_vox/sound/vox_mil/thirty.ogg', + "this" = 'modular_nova/modules/alt_vox/sound/vox_mil/this.ogg', + "three" = 'modular_nova/modules/alt_vox/sound/vox_mil/three.ogg', + "time" = 'modular_nova/modules/alt_vox/sound/vox_mil/time.ogg', + "to" = 'modular_nova/modules/alt_vox/sound/vox_mil/to.ogg', + "topside" = 'modular_nova/modules/alt_vox/sound/vox_mil/topside.ogg', + "track" = 'modular_nova/modules/alt_vox/sound/vox_mil/track.ogg', + "train" = 'modular_nova/modules/alt_vox/sound/vox_mil/train.ogg', + "turret" = 'modular_nova/modules/alt_vox/sound/vox_mil/turret.ogg', + "twelve" = 'modular_nova/modules/alt_vox/sound/vox_mil/twelve.ogg', + "twenty" = 'modular_nova/modules/alt_vox/sound/vox_mil/twenty.ogg', + "two" = 'modular_nova/modules/alt_vox/sound/vox_mil/two.ogg', + "unauthorized" = 'modular_nova/modules/alt_vox/sound/vox_mil/unauthorized.ogg', + "under" = 'modular_nova/modules/alt_vox/sound/vox_mil/under.ogg', + "units" = 'modular_nova/modules/alt_vox/sound/vox_mil/units.ogg', + "until" = 'modular_nova/modules/alt_vox/sound/vox_mil/until.ogg', + "up" = 'modular_nova/modules/alt_vox/sound/vox_mil/up.ogg', + "uranium" = 'modular_nova/modules/alt_vox/sound/vox_mil/uranium.ogg', + "use" = 'modular_nova/modules/alt_vox/sound/vox_mil/use.ogg', + "violation" = 'modular_nova/modules/alt_vox/sound/vox_mil/violation.ogg', + "voltage" = 'modular_nova/modules/alt_vox/sound/vox_mil/voltage.ogg', + "wanted" = 'modular_nova/modules/alt_vox/sound/vox_mil/wanted.ogg', + "warning" = 'modular_nova/modules/alt_vox/sound/vox_mil/warning.ogg', + "we" = 'modular_nova/modules/alt_vox/sound/vox_mil/we.ogg', + "weapon" = 'modular_nova/modules/alt_vox/sound/vox_mil/weapon.ogg', + "will" = 'modular_nova/modules/alt_vox/sound/vox_mil/will.ogg', + "with" = 'modular_nova/modules/alt_vox/sound/vox_mil/with.ogg', + "yellow" = 'modular_nova/modules/alt_vox/sound/vox_mil/yellow.ogg', + "you" = 'modular_nova/modules/alt_vox/sound/vox_mil/you.ogg', + "your" = 'modular_nova/modules/alt_vox/sound/vox_mil/your.ogg', + "zero" = 'modular_nova/modules/alt_vox/sound/vox_mil/zero.ogg', + "zone" = 'modular_nova/modules/alt_vox/sound/vox_mil/zone.ogg' +)) + +#endif diff --git a/modular_nova/modules/alt_vox/code/vox_procs.dm b/modular_nova/modules/alt_vox/code/vox_procs.dm new file mode 100644 index 00000000000000..dd9daedbb10833 --- /dev/null +++ b/modular_nova/modules/alt_vox/code/vox_procs.dm @@ -0,0 +1,57 @@ +// Make sure that the code compiles with AI_VOX undefined +#ifdef AI_VOX + +/mob/living/silicon/ai + /// The currently selected VOX Announcer voice. + var/vox_type = VOX_BMS + /// The list of available VOX Announcer voices to choose from. + var/list/vox_voices = list(VOX_HL, VOX_NORMAL, VOX_BMS) + /// The VOX word(s) that were previously inputed. + var/vox_word_string + +/// Returns a list of vox sounds based on the sound_type passed in +/mob/living/silicon/ai/proc/get_vox_sounds(vox_type) + switch(vox_type) + if(VOX_NORMAL) + return GLOB.vox_sounds + if(VOX_HL) + return GLOB.vox_sounds_hl + if(VOX_BMS) + return GLOB.vox_sounds_bms + if(VOX_MIL) + return GLOB.vox_sounds_mil + return GLOB.vox_sounds + +/mob/living/silicon/ai/verb/switch_vox() + set name = "Switch Vox Voice" + set desc = "Switch your VOX announcement voice!" + set category = "AI Commands" + + if(incapacitated()) + return + var/selection = tgui_input_list(src, "Please select a new VOX voice:", "VOX VOICE", vox_voices) + if(selection == null) + return + vox_type = selection + + to_chat(src, "Vox voice set to [vox_type]") + + +/mob/living/silicon/ai/verb/display_word_string() + set name = "Display Word String" + set desc = "Display the list of recently pressed vox lines." + set category = "AI Commands" + + if(incapacitated()) + return + + to_chat(src, vox_word_string) + +/mob/living/silicon/ai/verb/clear_word_string() + set name = "Clear Word String" + set desc = "Clear recent vox words." + set category = "AI Commands" + + vox_word_string = "" + +#endif diff --git a/modular_nova/modules/alt_vox/code/vox_sounds_bms.dm b/modular_nova/modules/alt_vox/code/vox_sounds_bms.dm new file mode 100644 index 00000000000000..ca1415eda1d4a3 --- /dev/null +++ b/modular_nova/modules/alt_vox/code/vox_sounds_bms.dm @@ -0,0 +1,244 @@ +#ifdef AI_VOX + +GLOBAL_LIST_INIT(vox_sounds_bms, list( + "activated" = 'modular_nova/modules/alt_vox/sound/vox_bms/activated.ogg', + "administration" = 'modular_nova/modules/alt_vox/sound/vox_bms/administration.ogg', + "administration_center" = 'modular_nova/modules/alt_vox/sound/vox_bms/administration_center.ogg', + "agent" = 'modular_nova/modules/alt_vox/sound/vox_bms/agent.ogg', + "alan" = 'modular_nova/modules/alt_vox/sound/vox_bms/alan.ogg', + "alexander" = 'modular_nova/modules/alt_vox/sound/vox_bms/alexander.ogg', + "all" = 'modular_nova/modules/alt_vox/sound/vox_bms/all.ogg', + "all_personnel" = 'modular_nova/modules/alt_vox/sound/vox_bms/all_personnel.ogg', + "alpha" = 'modular_nova/modules/alt_vox/sound/vox_bms/alpha.ogg', + "and" = 'modular_nova/modules/alt_vox/sound/vox_bms/and.ogg', + "anomalous" = 'modular_nova/modules/alt_vox/sound/vox_bms/anomalous.ogg', + "anomalous_energy_field" = 'modular_nova/modules/alt_vox/sound/vox_bms/anomalous_energy_field.ogg', + "any" = 'modular_nova/modules/alt_vox/sound/vox_bms/any.ogg', + "area" = 'modular_nova/modules/alt_vox/sound/vox_bms/area.ogg', + "at" = 'modular_nova/modules/alt_vox/sound/vox_bms/at.ogg', + "attention" = 'modular_nova/modules/alt_vox/sound/vox_bms/attention.ogg', + "audit" = 'modular_nova/modules/alt_vox/sound/vox_bms/audit.ogg', + "b" = 'modular_nova/modules/alt_vox/sound/vox_bms/b.ogg', + "bad_boop_long" = 'modular_nova/modules/alt_vox/sound/vox_bms/bad_boop_long.ogg', + "bad_boop_short" = 'modular_nova/modules/alt_vox/sound/vox_bms/bad_boop_short.ogg', + "ben" = 'modular_nova/modules/alt_vox/sound/vox_bms/ben.ogg', + "biohazard" = 'modular_nova/modules/alt_vox/sound/vox_bms/biohazard.ogg', + "biological" = 'modular_nova/modules/alt_vox/sound/vox_bms/biological.ogg', + "boop_boop_long" = 'modular_nova/modules/alt_vox/sound/vox_bms/boop_boop_long.ogg', + "boop_boop_short" = 'modular_nova/modules/alt_vox/sound/vox_bms/boop_boop_short.ogg', + "bravo" = 'modular_nova/modules/alt_vox/sound/vox_bms/bravo.ogg', + "brickman" = 'modular_nova/modules/alt_vox/sound/vox_bms/brickman.ogg', + "c" = 'modular_nova/modules/alt_vox/sound/vox_bms/c.ogg', + "call" = 'modular_nova/modules/alt_vox/sound/vox_bms/call.ogg', + "captain" = 'modular_nova/modules/alt_vox/sound/vox_bms/captain.ogg', + "center" = 'modular_nova/modules/alt_vox/sound/vox_bms/center.ogg', + "central" = 'modular_nova/modules/alt_vox/sound/vox_bms/central.ogg', + "check" = 'modular_nova/modules/alt_vox/sound/vox_bms/check.ogg', + "checkpoint" = 'modular_nova/modules/alt_vox/sound/vox_bms/checkpoint.ogg', + "chenner" = 'modular_nova/modules/alt_vox/sound/vox_bms/chenner.ogg', + "cisc" = 'modular_nova/modules/alt_vox/sound/vox_bms/cisc.ogg', + "clayson" = 'modular_nova/modules/alt_vox/sound/vox_bms/clayson.ogg', + "cleanup" = 'modular_nova/modules/alt_vox/sound/vox_bms/cleanup.ogg', + "coded_message_for" = 'modular_nova/modules/alt_vox/sound/vox_bms/coded_message_for.ogg', + "command" = 'modular_nova/modules/alt_vox/sound/vox_bms/command.ogg', + "command_and_communications" = 'modular_nova/modules/alt_vox/sound/vox_bms/command_and_communications.ogg', + "command_and_communications_center" = 'modular_nova/modules/alt_vox/sound/vox_bms/command_and_communications_center.ogg', + "communications" = 'modular_nova/modules/alt_vox/sound/vox_bms/communications.ogg', + "complex" = 'modular_nova/modules/alt_vox/sound/vox_bms/complex.ogg', + "complex_2" = 'modular_nova/modules/alt_vox/sound/vox_bms/complex_2.ogg', + "conference_room" = 'modular_nova/modules/alt_vox/sound/vox_bms/conference_room.ogg', + "containment" = 'modular_nova/modules/alt_vox/sound/vox_bms/containment.ogg', + "control_team" = 'modular_nova/modules/alt_vox/sound/vox_bms/control_team.ogg', + "coolant" = 'modular_nova/modules/alt_vox/sound/vox_bms/coolant.ogg', + "corporal" = 'modular_nova/modules/alt_vox/sound/vox_bms/corporal.ogg', + "d" = 'modular_nova/modules/alt_vox/sound/vox_bms/d.ogg', + "dale" = 'modular_nova/modules/alt_vox/sound/vox_bms/dale.ogg', + "dam" = 'modular_nova/modules/alt_vox/sound/vox_bms/dam.ogg', + "damage" = 'modular_nova/modules/alt_vox/sound/vox_bms/damage.ogg', + "danger" = 'modular_nova/modules/alt_vox/sound/vox_bms/danger.ogg', + "defence" = 'modular_nova/modules/alt_vox/sound/vox_bms/defence.ogg', + "detected" = 'modular_nova/modules/alt_vox/sound/vox_bms/detected.ogg', + "detected_in" = 'modular_nova/modules/alt_vox/sound/vox_bms/detected_in.ogg', + "detonation" = 'modular_nova/modules/alt_vox/sound/vox_bms/detonation.ogg', + "doctor" = 'modular_nova/modules/alt_vox/sound/vox_bms/doctor.ogg', + "dominski" = 'modular_nova/modules/alt_vox/sound/vox_bms/dominski.ogg', + "doot_doot" = 'modular_nova/modules/alt_vox/sound/vox_bms/doot_doot.ogg', + "down" = 'modular_nova/modules/alt_vox/sound/vox_bms/down.ogg', + "do_not" = 'modular_nova/modules/alt_vox/sound/vox_bms/do_not.ogg', + "do_not_use" = 'modular_nova/modules/alt_vox/sound/vox_bms/do_not_use.ogg', + "eight" = 'modular_nova/modules/alt_vox/sound/vox_bms/eight.ogg', + "electric" = 'modular_nova/modules/alt_vox/sound/vox_bms/electric.ogg', + "electric_shock" = 'modular_nova/modules/alt_vox/sound/vox_bms/electric_shock.ogg', + "elevator" = 'modular_nova/modules/alt_vox/sound/vox_bms/elevator.ogg', + "emergency" = 'modular_nova/modules/alt_vox/sound/vox_bms/emergency.ogg', + "emergency_2" = 'modular_nova/modules/alt_vox/sound/vox_bms/emergency_2.ogg', + "emergency_cleanup_team" = 'modular_nova/modules/alt_vox/sound/vox_bms/emergency_cleanup_team.ogg', + "emergency_shutdown" = 'modular_nova/modules/alt_vox/sound/vox_bms/emergency_shutdown.ogg', + "emergency_uranium_containment_team_to" = 'modular_nova/modules/alt_vox/sound/vox_bms/emergency_uranium_containment_team_to.ogg', + "energy" = 'modular_nova/modules/alt_vox/sound/vox_bms/energy.ogg', + "engles" = 'modular_nova/modules/alt_vox/sound/vox_bms/engles.ogg', + "evacuate" = 'modular_nova/modules/alt_vox/sound/vox_bms/evacuate.ogg', + "evacuate_area_immediately" = 'modular_nova/modules/alt_vox/sound/vox_bms/evacuate_area_immediately.ogg', + "evacuate_sector" = 'modular_nova/modules/alt_vox/sound/vox_bms/evacuate_sector.ogg', + "extreme" = 'modular_nova/modules/alt_vox/sound/vox_bms/extreme.ogg', + "extreme_danger" = 'modular_nova/modules/alt_vox/sound/vox_bms/extreme_danger.ogg', + "extreme_force" = 'modular_nova/modules/alt_vox/sound/vox_bms/extreme_force.ogg', + "facility" = 'modular_nova/modules/alt_vox/sound/vox_bms/facility.ogg', + "failure" = 'modular_nova/modules/alt_vox/sound/vox_bms/failure.ogg', + "field" = 'modular_nova/modules/alt_vox/sound/vox_bms/field.ogg', + "fifteen" = 'modular_nova/modules/alt_vox/sound/vox_bms/fifteen.ogg', + "five" = 'modular_nova/modules/alt_vox/sound/vox_bms/five.ogg', + "fleistad" = 'modular_nova/modules/alt_vox/sound/vox_bms/fleistad.ogg', + "flooding" = 'modular_nova/modules/alt_vox/sound/vox_bms/flooding.ogg', + "for" = 'modular_nova/modules/alt_vox/sound/vox_bms/for.ogg', + "force" = 'modular_nova/modules/alt_vox/sound/vox_bms/force.ogg', + "foreman" = 'modular_nova/modules/alt_vox/sound/vox_bms/foreman.ogg', + "forms" = 'modular_nova/modules/alt_vox/sound/vox_bms/forms.ogg', + "four" = 'modular_nova/modules/alt_vox/sound/vox_bms/four.ogg', + "freeman" = 'modular_nova/modules/alt_vox/sound/vox_bms/freeman.ogg', + "hankle" = 'modular_nova/modules/alt_vox/sound/vox_bms/hankle.ogg', + "hazard" = 'modular_nova/modules/alt_vox/sound/vox_bms/hazard.ogg', + "hazard_course" = 'modular_nova/modules/alt_vox/sound/vox_bms/hazard_course.ogg', + "headon" = 'modular_nova/modules/alt_vox/sound/vox_bms/headon.ogg', + "helioski" = 'modular_nova/modules/alt_vox/sound/vox_bms/helioski.ogg', + "help" = 'modular_nova/modules/alt_vox/sound/vox_bms/help.ogg', + "high" = 'modular_nova/modules/alt_vox/sound/vox_bms/high.ogg', + "high_energy_detonation" = 'modular_nova/modules/alt_vox/sound/vox_bms/high_energy_detonation.ogg', + "high_security" = 'modular_nova/modules/alt_vox/sound/vox_bms/high_security.ogg', + "horn" = 'modular_nova/modules/alt_vox/sound/vox_bms/horn.ogg', + "human" = 'modular_nova/modules/alt_vox/sound/vox_bms/human.ogg', + "hydro" = 'modular_nova/modules/alt_vox/sound/vox_bms/hydro.ogg', + "immediately" = 'modular_nova/modules/alt_vox/sound/vox_bms/immediately.ogg', + "in" = 'modular_nova/modules/alt_vox/sound/vox_bms/in.ogg', + "india" = 'modular_nova/modules/alt_vox/sound/vox_bms/india.ogg', + "interchange" = 'modular_nova/modules/alt_vox/sound/vox_bms/interchange.ogg', + "is" = 'modular_nova/modules/alt_vox/sound/vox_bms/is.ogg', + "is_now" = 'modular_nova/modules/alt_vox/sound/vox_bms/is_now.ogg', + "j" = 'modular_nova/modules/alt_vox/sound/vox_bms/j.ogg', + "junic" = 'modular_nova/modules/alt_vox/sound/vox_bms/junic.ogg', + "kilo" = 'modular_nova/modules/alt_vox/sound/vox_bms/kilo.ogg', + "lab" = 'modular_nova/modules/alt_vox/sound/vox_bms/lab.ogg', + "lambda" = 'modular_nova/modules/alt_vox/sound/vox_bms/lambda.ogg', + "laser" = 'modular_nova/modules/alt_vox/sound/vox_bms/laser.ogg', + "level" = 'modular_nova/modules/alt_vox/sound/vox_bms/level.ogg', + "lieutenant" = 'modular_nova/modules/alt_vox/sound/vox_bms/lieutenant.ogg', + "lima" = 'modular_nova/modules/alt_vox/sound/vox_bms/lima.ogg', + "line" = 'modular_nova/modules/alt_vox/sound/vox_bms/line.ogg', + "login" = 'modular_nova/modules/alt_vox/sound/vox_bms/login.ogg', + "lukas" = 'modular_nova/modules/alt_vox/sound/vox_bms/lukas.ogg', + "maintenance" = 'modular_nova/modules/alt_vox/sound/vox_bms/maintenance.ogg', + "material" = 'modular_nova/modules/alt_vox/sound/vox_bms/material.ogg', + "materials" = 'modular_nova/modules/alt_vox/sound/vox_bms/materials.ogg', + "materials_storage_facility" = 'modular_nova/modules/alt_vox/sound/vox_bms/materials_storage_facility.ogg', + "medical" = 'modular_nova/modules/alt_vox/sound/vox_bms/medical.ogg', + "medical_emergency" = 'modular_nova/modules/alt_vox/sound/vox_bms/medical_emergency.ogg', + "med_down_in" = 'modular_nova/modules/alt_vox/sound/vox_bms/med_down_in.ogg', + "member" = 'modular_nova/modules/alt_vox/sound/vox_bms/member.ogg', + "men" = 'modular_nova/modules/alt_vox/sound/vox_bms/men.ogg', + "military" = 'modular_nova/modules/alt_vox/sound/vox_bms/military.ogg', + "minutes" = 'modular_nova/modules/alt_vox/sound/vox_bms/minutes.ogg', + "monterro" = 'modular_nova/modules/alt_vox/sound/vox_bms/monterro.ogg', + "morel" = 'modular_nova/modules/alt_vox/sound/vox_bms/morel.ogg', + "motorpool" = 'modular_nova/modules/alt_vox/sound/vox_bms/motorpool.ogg', + "murphin" = 'modular_nova/modules/alt_vox/sound/vox_bms/murphin.ogg', + "network_team" = 'modular_nova/modules/alt_vox/sound/vox_bms/network_team.ogg', + "nine" = 'modular_nova/modules/alt_vox/sound/vox_bms/nine.ogg', + "oatsma" = 'modular_nova/modules/alt_vox/sound/vox_bms/oatsma.ogg', + "observation" = 'modular_nova/modules/alt_vox/sound/vox_bms/observation.ogg', + "office" = 'modular_nova/modules/alt_vox/sound/vox_bms/office.ogg', + "on" = 'modular_nova/modules/alt_vox/sound/vox_bms/on.ogg', + "one" = 'modular_nova/modules/alt_vox/sound/vox_bms/one.ogg', + "operational" = 'modular_nova/modules/alt_vox/sound/vox_bms/operational.ogg', + "operations" = 'modular_nova/modules/alt_vox/sound/vox_bms/operations.ogg', + "optimal" = 'modular_nova/modules/alt_vox/sound/vox_bms/optimal.ogg', + "outerchange" = 'modular_nova/modules/alt_vox/sound/vox_bms/outerchange.ogg', + "performance" = 'modular_nova/modules/alt_vox/sound/vox_bms/performance.ogg', + "personal_call" = 'modular_nova/modules/alt_vox/sound/vox_bms/personal_call.ogg', + "personnel" = 'modular_nova/modules/alt_vox/sound/vox_bms/personnel.ogg', + "personnel_2" = 'modular_nova/modules/alt_vox/sound/vox_bms/personnel_2.ogg', + "place" = 'modular_nova/modules/alt_vox/sound/vox_bms/place.ogg', + "plant" = 'modular_nova/modules/alt_vox/sound/vox_bms/plant.ogg', + "please" = 'modular_nova/modules/alt_vox/sound/vox_bms/please.ogg', + "please_2" = 'modular_nova/modules/alt_vox/sound/vox_bms/please_2.ogg', + "please_call" = 'modular_nova/modules/alt_vox/sound/vox_bms/please_call.ogg', + "please_report_status" = 'modular_nova/modules/alt_vox/sound/vox_bms/please_report_status.ogg', + "please_report_to" = 'modular_nova/modules/alt_vox/sound/vox_bms/please_report_to.ogg', + "proceedural" = 'modular_nova/modules/alt_vox/sound/vox_bms/proceedural.ogg', + "processing" = 'modular_nova/modules/alt_vox/sound/vox_bms/processing.ogg', + "processing_plant" = 'modular_nova/modules/alt_vox/sound/vox_bms/processing_plant.ogg', + "profile" = 'modular_nova/modules/alt_vox/sound/vox_bms/profile.ogg', + "prosecute" = 'modular_nova/modules/alt_vox/sound/vox_bms/prosecute.ogg', + "questioning" = 'modular_nova/modules/alt_vox/sound/vox_bms/questioning.ogg', + "raddock" = 'modular_nova/modules/alt_vox/sound/vox_bms/raddock.ogg', + "rail" = 'modular_nova/modules/alt_vox/sound/vox_bms/rail.ogg', + "reactor" = 'modular_nova/modules/alt_vox/sound/vox_bms/reactor.ogg', + "repair" = 'modular_nova/modules/alt_vox/sound/vox_bms/repair.ogg', + "reports" = 'modular_nova/modules/alt_vox/sound/vox_bms/reports.ogg', + "report_to" = 'modular_nova/modules/alt_vox/sound/vox_bms/report_to.ogg', + "required" = 'modular_nova/modules/alt_vox/sound/vox_bms/required.ogg', + "residue" = 'modular_nova/modules/alt_vox/sound/vox_bms/residue.ogg', + "resources" = 'modular_nova/modules/alt_vox/sound/vox_bms/resources.ogg', + "review" = 'modular_nova/modules/alt_vox/sound/vox_bms/review.ogg', + "robertson" = 'modular_nova/modules/alt_vox/sound/vox_bms/robertson.ogg', + "rose" = 'modular_nova/modules/alt_vox/sound/vox_bms/rose.ogg', + "scheduled" = 'modular_nova/modules/alt_vox/sound/vox_bms/scheduled.ogg', + "scheduled_in" = 'modular_nova/modules/alt_vox/sound/vox_bms/scheduled_in.ogg', + "science" = 'modular_nova/modules/alt_vox/sound/vox_bms/science.ogg', + "science_personnel" = 'modular_nova/modules/alt_vox/sound/vox_bms/science_personnel.ogg', + "sector" = 'modular_nova/modules/alt_vox/sound/vox_bms/sector.ogg', + "secure" = 'modular_nova/modules/alt_vox/sound/vox_bms/secure.ogg', + "secure_line_call" = 'modular_nova/modules/alt_vox/sound/vox_bms/secure_line_call.ogg', + "security" = 'modular_nova/modules/alt_vox/sound/vox_bms/security.ogg', + "security_officer" = 'modular_nova/modules/alt_vox/sound/vox_bms/security_officer.ogg', + "security_personnel" = 'modular_nova/modules/alt_vox/sound/vox_bms/security_personnel.ogg', + "sergeant" = 'modular_nova/modules/alt_vox/sound/vox_bms/sergeant.ogg', + "service" = 'modular_nova/modules/alt_vox/sound/vox_bms/service.ogg', + "service_team" = 'modular_nova/modules/alt_vox/sound/vox_bms/service_team.ogg', + "sesan" = 'modular_nova/modules/alt_vox/sound/vox_bms/sesan.ogg', + "seven" = 'modular_nova/modules/alt_vox/sound/vox_bms/seven.ogg', + "shock" = 'modular_nova/modules/alt_vox/sound/vox_bms/shock.ogg', + "shutdown" = 'modular_nova/modules/alt_vox/sound/vox_bms/shutdown.ogg', + "six" = 'modular_nova/modules/alt_vox/sound/vox_bms/six.ogg', + "status" = 'modular_nova/modules/alt_vox/sound/vox_bms/status.ogg', + "stone" = 'modular_nova/modules/alt_vox/sound/vox_bms/stone.ogg', + "storage" = 'modular_nova/modules/alt_vox/sound/vox_bms/storage.ogg', + "sublevel" = 'modular_nova/modules/alt_vox/sound/vox_bms/sublevel.ogg', + "superconducting" = 'modular_nova/modules/alt_vox/sound/vox_bms/superconducting.ogg', + "supercooled" = 'modular_nova/modules/alt_vox/sound/vox_bms/supercooled.ogg', + "system" = 'modular_nova/modules/alt_vox/sound/vox_bms/system.ogg', + "systems" = 'modular_nova/modules/alt_vox/sound/vox_bms/systems.ogg', + "tactical" = 'modular_nova/modules/alt_vox/sound/vox_bms/tactical.ogg', + "tactical_operations_center" = 'modular_nova/modules/alt_vox/sound/vox_bms/tactical_operations_center.ogg', + "tank" = 'modular_nova/modules/alt_vox/sound/vox_bms/tank.ogg', + "tart" = 'modular_nova/modules/alt_vox/sound/vox_bms/tart.ogg', + "team" = 'modular_nova/modules/alt_vox/sound/vox_bms/team.ogg', + "tech" = 'modular_nova/modules/alt_vox/sound/vox_bms/tech.ogg', + "tech_sergeant" = 'modular_nova/modules/alt_vox/sound/vox_bms/tech_sergeant.ogg', + "test" = 'modular_nova/modules/alt_vox/sound/vox_bms/test.ogg', + "test_lab" = 'modular_nova/modules/alt_vox/sound/vox_bms/test_lab.ogg', + "three" = 'modular_nova/modules/alt_vox/sound/vox_bms/three.ogg', + "to" = 'modular_nova/modules/alt_vox/sound/vox_bms/to.ogg', + "toonson" = 'modular_nova/modules/alt_vox/sound/vox_bms/toonson.ogg', + "topside" = 'modular_nova/modules/alt_vox/sound/vox_bms/topside.ogg', + "truman" = 'modular_nova/modules/alt_vox/sound/vox_bms/truman.ogg', + "turret" = 'modular_nova/modules/alt_vox/sound/vox_bms/turret.ogg', + "two" = 'modular_nova/modules/alt_vox/sound/vox_bms/two.ogg', + "unauthorised" = 'modular_nova/modules/alt_vox/sound/vox_bms/unauthorised.ogg', + "unauthorised_biological_forms" = 'modular_nova/modules/alt_vox/sound/vox_bms/unauthorised_biological_forms.ogg', + "unscheduled" = 'modular_nova/modules/alt_vox/sound/vox_bms/unscheduled.ogg', + "upgrade" = 'modular_nova/modules/alt_vox/sound/vox_bms/upgrade.ogg', + "uranium" = 'modular_nova/modules/alt_vox/sound/vox_bms/uranium.ogg', + "use" = 'modular_nova/modules/alt_vox/sound/vox_bms/use.ogg', + "ventilation" = 'modular_nova/modules/alt_vox/sound/vox_bms/ventilation.ogg', + "ventilation_system" = 'modular_nova/modules/alt_vox/sound/vox_bms/ventilation_system.ogg', + "warning" = 'modular_nova/modules/alt_vox/sound/vox_bms/warning.ogg', + "waste" = 'modular_nova/modules/alt_vox/sound/vox_bms/waste.ogg', + "wilson" = 'modular_nova/modules/alt_vox/sound/vox_bms/wilson.ogg', + "with" = 'modular_nova/modules/alt_vox/sound/vox_bms/with.ogg', + "zero" = 'modular_nova/modules/alt_vox/sound/vox_bms/zero.ogg', + "_comma" = 'modular_nova/modules/alt_vox/sound/vox_bms/_comma.ogg', + "_period" = 'modular_nova/modules/alt_vox/sound/vox_bms/_period.ogg', +)) + +#endif + diff --git a/modular_nova/modules/alt_vox/code/vox_sounds_hl1.dm b/modular_nova/modules/alt_vox/code/vox_sounds_hl1.dm new file mode 100644 index 00000000000000..1dbfce275f8713 --- /dev/null +++ b/modular_nova/modules/alt_vox/code/vox_sounds_hl1.dm @@ -0,0 +1,635 @@ +#ifdef AI_VOX + +//for vim +// :%s/\(\(.*\)\.ogg\)/"\2" = 'sound\/vox\/\1',/g +GLOBAL_LIST_INIT(vox_sounds_hl, list("," = 'modular_nova/modules/alt_vox/sound/vox_hl/_comma.ogg', +"." = 'modular_nova/modules/alt_vox/sound/vox_hl/_period.ogg', +"a" = 'modular_nova/modules/alt_vox/sound/vox_hl/a.ogg', +"accelerating" = 'modular_nova/modules/alt_vox/sound/vox_hl/accelerating.ogg', +"accelerator" = 'modular_nova/modules/alt_vox/sound/vox_hl/accelerator.ogg', +"accepted" = 'modular_nova/modules/alt_vox/sound/vox_hl/accepted.ogg', +"access" = 'modular_nova/modules/alt_vox/sound/vox_hl/access.ogg', +"acknowledge" = 'modular_nova/modules/alt_vox/sound/vox_hl/acknowledge.ogg', +"acknowledged" = 'modular_nova/modules/alt_vox/sound/vox_hl/acknowledged.ogg', +"acquired" = 'modular_nova/modules/alt_vox/sound/vox_hl/acquired.ogg', +"acquisition" = 'modular_nova/modules/alt_vox/sound/vox_hl/acquisition.ogg', +"across" = 'modular_nova/modules/alt_vox/sound/vox_hl/across.ogg', +"activate" = 'modular_nova/modules/alt_vox/sound/vox_hl/activate.ogg', +"activated" = 'modular_nova/modules/alt_vox/sound/vox_hl/activated.ogg', +"activity" = 'modular_nova/modules/alt_vox/sound/vox_hl/activity.ogg', +"adios" = 'modular_nova/modules/alt_vox/sound/vox_hl/adios.ogg', +"administration" = 'modular_nova/modules/alt_vox/sound/vox_hl/administration.ogg', +"advanced" = 'modular_nova/modules/alt_vox/sound/vox_hl/advanced.ogg', +"after" = 'modular_nova/modules/alt_vox/sound/vox_hl/after.ogg', +"agent" = 'modular_nova/modules/alt_vox/sound/vox_hl/agent.ogg', +"alarm" = 'modular_nova/modules/alt_vox/sound/vox_hl/alarm.ogg', +"alert" = 'modular_nova/modules/alt_vox/sound/vox_hl/alert.ogg', +"alien" = 'modular_nova/modules/alt_vox/sound/vox_hl/alien.ogg', +"aligned" = 'modular_nova/modules/alt_vox/sound/vox_hl/aligned.ogg', +"all" = 'modular_nova/modules/alt_vox/sound/vox_hl/all.ogg', +"alpha" = 'modular_nova/modules/alt_vox/sound/vox_hl/alpha.ogg', +"am" = 'modular_nova/modules/alt_vox/sound/vox_hl/am.ogg', +"amigo" = 'modular_nova/modules/alt_vox/sound/vox_hl/amigo.ogg', +"ammunition" = 'modular_nova/modules/alt_vox/sound/vox_hl/ammunition.ogg', +"an" = 'modular_nova/modules/alt_vox/sound/vox_hl/an.ogg', +"and" = 'modular_nova/modules/alt_vox/sound/vox_hl/and.ogg', +"announcement" = 'modular_nova/modules/alt_vox/sound/vox_hl/announcement.ogg', +"anomalous" = 'modular_nova/modules/alt_vox/sound/vox_hl/anomalous.ogg', +"antenna" = 'modular_nova/modules/alt_vox/sound/vox_hl/antenna.ogg', +"any" = 'modular_nova/modules/alt_vox/sound/vox_hl/any.ogg', +"apprehend" = 'modular_nova/modules/alt_vox/sound/vox_hl/apprehend.ogg', +"approach" = 'modular_nova/modules/alt_vox/sound/vox_hl/approach.ogg', +"are" = 'modular_nova/modules/alt_vox/sound/vox_hl/are.ogg', +"area" = 'modular_nova/modules/alt_vox/sound/vox_hl/area.ogg', +"arm" = 'modular_nova/modules/alt_vox/sound/vox_hl/arm.ogg', +"armed" = 'modular_nova/modules/alt_vox/sound/vox_hl/armed.ogg', +"armor" = 'modular_nova/modules/alt_vox/sound/vox_hl/armor.ogg', +"armory" = 'modular_nova/modules/alt_vox/sound/vox_hl/armory.ogg', +"arrest" = 'modular_nova/modules/alt_vox/sound/vox_hl/arrest.ogg', +"ass" = 'modular_nova/modules/alt_vox/sound/vox_hl/ass.ogg', +"at" = 'modular_nova/modules/alt_vox/sound/vox_hl/at.ogg', +"atomic" = 'modular_nova/modules/alt_vox/sound/vox_hl/atomic.ogg', +"attention" = 'modular_nova/modules/alt_vox/sound/vox_hl/attention.ogg', +"authorize" = 'modular_nova/modules/alt_vox/sound/vox_hl/authorize.ogg', +"authorized" = 'modular_nova/modules/alt_vox/sound/vox_hl/authorized.ogg', +"automatic" = 'modular_nova/modules/alt_vox/sound/vox_hl/automatic.ogg', +"away" = 'modular_nova/modules/alt_vox/sound/vox_hl/away.ogg', +"b" = 'modular_nova/modules/alt_vox/sound/vox_hl/b.ogg', +"back" = 'modular_nova/modules/alt_vox/sound/vox_hl/back.ogg', +"backman" = 'modular_nova/modules/alt_vox/sound/vox_hl/backman.ogg', +"bad" = 'modular_nova/modules/alt_vox/sound/vox_hl/bad.ogg', +"bag" = 'modular_nova/modules/alt_vox/sound/vox_hl/bag.ogg', +"bailey" = 'modular_nova/modules/alt_vox/sound/vox_hl/bailey.ogg', +"barracks" = 'modular_nova/modules/alt_vox/sound/vox_hl/barracks.ogg', +"base" = 'modular_nova/modules/alt_vox/sound/vox_hl/base.ogg', +"bay" = 'modular_nova/modules/alt_vox/sound/vox_hl/bay.ogg', +"be" = 'modular_nova/modules/alt_vox/sound/vox_hl/be.ogg', +"been" = 'modular_nova/modules/alt_vox/sound/vox_hl/been.ogg', +"before" = 'modular_nova/modules/alt_vox/sound/vox_hl/before.ogg', +"beyond" = 'modular_nova/modules/alt_vox/sound/vox_hl/beyond.ogg', +"biohazard" = 'modular_nova/modules/alt_vox/sound/vox_hl/biohazard.ogg', +"biological" = 'modular_nova/modules/alt_vox/sound/vox_hl/biological.ogg', +"birdwell" = 'modular_nova/modules/alt_vox/sound/vox_hl/birdwell.ogg', +"bizwarn" = 'modular_nova/modules/alt_vox/sound/vox_hl/bizwarn.ogg', +"black" = 'modular_nova/modules/alt_vox/sound/vox_hl/black.ogg', +"blast" = 'modular_nova/modules/alt_vox/sound/vox_hl/blast.ogg', +"blocked" = 'modular_nova/modules/alt_vox/sound/vox_hl/blocked.ogg', +"bloop" = 'modular_nova/modules/alt_vox/sound/vox_hl/bloop.ogg', +"blue" = 'modular_nova/modules/alt_vox/sound/vox_hl/blue.ogg', +"bottom" = 'modular_nova/modules/alt_vox/sound/vox_hl/bottom.ogg', +"bravo" = 'modular_nova/modules/alt_vox/sound/vox_hl/bravo.ogg', +"breach" = 'modular_nova/modules/alt_vox/sound/vox_hl/breach.ogg', +"breached" = 'modular_nova/modules/alt_vox/sound/vox_hl/breached.ogg', +"break" = 'modular_nova/modules/alt_vox/sound/vox_hl/break.ogg', +"bridge" = 'modular_nova/modules/alt_vox/sound/vox_hl/bridge.ogg', +"bust" = 'modular_nova/modules/alt_vox/sound/vox_hl/bust.ogg', +"but" = 'modular_nova/modules/alt_vox/sound/vox_hl/but.ogg', +"button" = 'modular_nova/modules/alt_vox/sound/vox_hl/button.ogg', +"buzwarn" = 'modular_nova/modules/alt_vox/sound/vox_hl/buzwarn.ogg', +"bypass" = 'modular_nova/modules/alt_vox/sound/vox_hl/bypass.ogg', +"c" = 'modular_nova/modules/alt_vox/sound/vox_hl/c.ogg', +"cable" = 'modular_nova/modules/alt_vox/sound/vox_hl/cable.ogg', +"call" = 'modular_nova/modules/alt_vox/sound/vox_hl/call.ogg', +"called" = 'modular_nova/modules/alt_vox/sound/vox_hl/called.ogg', +"canal" = 'modular_nova/modules/alt_vox/sound/vox_hl/canal.ogg', +"cap" = 'modular_nova/modules/alt_vox/sound/vox_hl/cap.ogg', +"captain" = 'modular_nova/modules/alt_vox/sound/vox_hl/captain.ogg', +"capture" = 'modular_nova/modules/alt_vox/sound/vox_hl/capture.ogg', +"captured" = 'modular_nova/modules/alt_vox/sound/vox_hl/captured.ogg', +"ceiling" = 'modular_nova/modules/alt_vox/sound/vox_hl/ceiling.ogg', +"celsius" = 'modular_nova/modules/alt_vox/sound/vox_hl/celsius.ogg', +"center" = 'modular_nova/modules/alt_vox/sound/vox_hl/center.ogg', +"centi" = 'modular_nova/modules/alt_vox/sound/vox_hl/centi.ogg', +"central" = 'modular_nova/modules/alt_vox/sound/vox_hl/central.ogg', +"chamber" = 'modular_nova/modules/alt_vox/sound/vox_hl/chamber.ogg', +"charlie" = 'modular_nova/modules/alt_vox/sound/vox_hl/charlie.ogg', +"check" = 'modular_nova/modules/alt_vox/sound/vox_hl/check.ogg', +"checkpoint" = 'modular_nova/modules/alt_vox/sound/vox_hl/checkpoint.ogg', +"chemical" = 'modular_nova/modules/alt_vox/sound/vox_hl/chemical.ogg', +"cleanup" = 'modular_nova/modules/alt_vox/sound/vox_hl/cleanup.ogg', +"clear" = 'modular_nova/modules/alt_vox/sound/vox_hl/clear.ogg', +"clearance" = 'modular_nova/modules/alt_vox/sound/vox_hl/clearance.ogg', +"close" = 'modular_nova/modules/alt_vox/sound/vox_hl/close.ogg', +"clown" = 'modular_nova/modules/alt_vox/sound/vox_hl/clown.ogg', +"code" = 'modular_nova/modules/alt_vox/sound/vox_hl/code.ogg', +"coded" = 'modular_nova/modules/alt_vox/sound/vox_hl/coded.ogg', +"collider" = 'modular_nova/modules/alt_vox/sound/vox_hl/collider.ogg', +"command" = 'modular_nova/modules/alt_vox/sound/vox_hl/command.ogg', +"communication" = 'modular_nova/modules/alt_vox/sound/vox_hl/communication.ogg', +"complex" = 'modular_nova/modules/alt_vox/sound/vox_hl/complex.ogg', +"computer" = 'modular_nova/modules/alt_vox/sound/vox_hl/computer.ogg', +"condition" = 'modular_nova/modules/alt_vox/sound/vox_hl/condition.ogg', +"containment" = 'modular_nova/modules/alt_vox/sound/vox_hl/containment.ogg', +"contamination" = 'modular_nova/modules/alt_vox/sound/vox_hl/contamination.ogg', +"control" = 'modular_nova/modules/alt_vox/sound/vox_hl/control.ogg', +"coolant" = 'modular_nova/modules/alt_vox/sound/vox_hl/coolant.ogg', +"coomer" = 'modular_nova/modules/alt_vox/sound/vox_hl/coomer.ogg', +"core" = 'modular_nova/modules/alt_vox/sound/vox_hl/core.ogg', +"correct" = 'modular_nova/modules/alt_vox/sound/vox_hl/correct.ogg', +"corridor" = 'modular_nova/modules/alt_vox/sound/vox_hl/corridor.ogg', +"crew" = 'modular_nova/modules/alt_vox/sound/vox_hl/crew.ogg', +"cross" = 'modular_nova/modules/alt_vox/sound/vox_hl/cross.ogg', +"cryogenic" = 'modular_nova/modules/alt_vox/sound/vox_hl/cryogenic.ogg', +"d" = 'modular_nova/modules/alt_vox/sound/vox_hl/d.ogg', +"dadeda" = 'modular_nova/modules/alt_vox/sound/vox_hl/dadeda.ogg', +"damage" = 'modular_nova/modules/alt_vox/sound/vox_hl/damage.ogg', +"damaged" = 'modular_nova/modules/alt_vox/sound/vox_hl/damaged.ogg', +"danger" = 'modular_nova/modules/alt_vox/sound/vox_hl/danger.ogg', +"day" = 'modular_nova/modules/alt_vox/sound/vox_hl/day.ogg', +"deactivated" = 'modular_nova/modules/alt_vox/sound/vox_hl/deactivated.ogg', +"decompression" = 'modular_nova/modules/alt_vox/sound/vox_hl/decompression.ogg', +"decontamination" = 'modular_nova/modules/alt_vox/sound/vox_hl/decontamination.ogg', +"deeoo" = 'modular_nova/modules/alt_vox/sound/vox_hl/deeoo.ogg', +"defense" = 'modular_nova/modules/alt_vox/sound/vox_hl/defense.ogg', +"degrees" = 'modular_nova/modules/alt_vox/sound/vox_hl/degrees.ogg', +"delta" = 'modular_nova/modules/alt_vox/sound/vox_hl/delta.ogg', +"denied" = 'modular_nova/modules/alt_vox/sound/vox_hl/denied.ogg', +"deploy" = 'modular_nova/modules/alt_vox/sound/vox_hl/deploy.ogg', +"deployed" = 'modular_nova/modules/alt_vox/sound/vox_hl/deployed.ogg', +"destroy" = 'modular_nova/modules/alt_vox/sound/vox_hl/destroy.ogg', +"destroyed" = 'modular_nova/modules/alt_vox/sound/vox_hl/destroyed.ogg', +"detain" = 'modular_nova/modules/alt_vox/sound/vox_hl/detain.ogg', +"detected" = 'modular_nova/modules/alt_vox/sound/vox_hl/detected.ogg', +"detonation" = 'modular_nova/modules/alt_vox/sound/vox_hl/detonation.ogg', +"device" = 'modular_nova/modules/alt_vox/sound/vox_hl/device.ogg', +"did" = 'modular_nova/modules/alt_vox/sound/vox_hl/did.ogg', +"die" = 'modular_nova/modules/alt_vox/sound/vox_hl/die.ogg', +"dimensional" = 'modular_nova/modules/alt_vox/sound/vox_hl/dimensional.ogg', +"dirt" = 'modular_nova/modules/alt_vox/sound/vox_hl/dirt.ogg', +"disengaged" = 'modular_nova/modules/alt_vox/sound/vox_hl/disengaged.ogg', +"dish" = 'modular_nova/modules/alt_vox/sound/vox_hl/dish.ogg', +"disposal" = 'modular_nova/modules/alt_vox/sound/vox_hl/disposal.ogg', +"distance" = 'modular_nova/modules/alt_vox/sound/vox_hl/distance.ogg', +"distortion" = 'modular_nova/modules/alt_vox/sound/vox_hl/distortion.ogg', +"do" = 'modular_nova/modules/alt_vox/sound/vox_hl/do.ogg', +"doctor" = 'modular_nova/modules/alt_vox/sound/vox_hl/doctor.ogg', +"doop" = 'modular_nova/modules/alt_vox/sound/vox_hl/doop.ogg', +"door" = 'modular_nova/modules/alt_vox/sound/vox_hl/door.ogg', +"down" = 'modular_nova/modules/alt_vox/sound/vox_hl/down.ogg', +"dual" = 'modular_nova/modules/alt_vox/sound/vox_hl/dual.ogg', +"duct" = 'modular_nova/modules/alt_vox/sound/vox_hl/duct.ogg', +"e" = 'modular_nova/modules/alt_vox/sound/vox_hl/e.ogg', +"east" = 'modular_nova/modules/alt_vox/sound/vox_hl/east.ogg', +"echo" = 'modular_nova/modules/alt_vox/sound/vox_hl/echo.ogg', +"ed" = 'modular_nova/modules/alt_vox/sound/vox_hl/ed.ogg', +"effect" = 'modular_nova/modules/alt_vox/sound/vox_hl/effect.ogg', +"egress" = 'modular_nova/modules/alt_vox/sound/vox_hl/egress.ogg', +"eight" = 'modular_nova/modules/alt_vox/sound/vox_hl/eight.ogg', +"eighteen" = 'modular_nova/modules/alt_vox/sound/vox_hl/eighteen.ogg', +"eighty" = 'modular_nova/modules/alt_vox/sound/vox_hl/eighty.ogg', +"electric" = 'modular_nova/modules/alt_vox/sound/vox_hl/electric.ogg', +"electromagnetic" = 'modular_nova/modules/alt_vox/sound/vox_hl/electromagnetic.ogg', +"elevator" = 'modular_nova/modules/alt_vox/sound/vox_hl/elevator.ogg', +"eleven" = 'modular_nova/modules/alt_vox/sound/vox_hl/eleven.ogg', +"eliminate" = 'modular_nova/modules/alt_vox/sound/vox_hl/eliminate.ogg', +"emergency" = 'modular_nova/modules/alt_vox/sound/vox_hl/emergency.ogg', +"enemy" = 'modular_nova/modules/alt_vox/sound/vox_hl/enemy.ogg', +"energy" = 'modular_nova/modules/alt_vox/sound/vox_hl/energy.ogg', +"engage" = 'modular_nova/modules/alt_vox/sound/vox_hl/engage.ogg', +"engaged" = 'modular_nova/modules/alt_vox/sound/vox_hl/engaged.ogg', +"engine" = 'modular_nova/modules/alt_vox/sound/vox_hl/engine.ogg', +"enter" = 'modular_nova/modules/alt_vox/sound/vox_hl/enter.ogg', +"entry" = 'modular_nova/modules/alt_vox/sound/vox_hl/entry.ogg', +"environment" = 'modular_nova/modules/alt_vox/sound/vox_hl/environment.ogg', +"error" = 'modular_nova/modules/alt_vox/sound/vox_hl/error.ogg', +"escape" = 'modular_nova/modules/alt_vox/sound/vox_hl/escape.ogg', +"evacuate" = 'modular_nova/modules/alt_vox/sound/vox_hl/evacuate.ogg', +"exchange" = 'modular_nova/modules/alt_vox/sound/vox_hl/exchange.ogg', +"exit" = 'modular_nova/modules/alt_vox/sound/vox_hl/exit.ogg', +"expect" = 'modular_nova/modules/alt_vox/sound/vox_hl/expect.ogg', +"experiment" = 'modular_nova/modules/alt_vox/sound/vox_hl/experiment.ogg', +"experimental" = 'modular_nova/modules/alt_vox/sound/vox_hl/experimental.ogg', +"explode" = 'modular_nova/modules/alt_vox/sound/vox_hl/explode.ogg', +"explosion" = 'modular_nova/modules/alt_vox/sound/vox_hl/explosion.ogg', +"exposure" = 'modular_nova/modules/alt_vox/sound/vox_hl/exposure.ogg', +"exterminate" = 'modular_nova/modules/alt_vox/sound/vox_hl/exterminate.ogg', +"extinguish" = 'modular_nova/modules/alt_vox/sound/vox_hl/extinguish.ogg', +"extinguisher" = 'modular_nova/modules/alt_vox/sound/vox_hl/extinguisher.ogg', +"extreme" = 'modular_nova/modules/alt_vox/sound/vox_hl/extreme.ogg', +"f" = 'modular_nova/modules/alt_vox/sound/vox_hl/f.ogg', +"face" = 'modular_nova/modules/alt_vox/sound/vox_hl/face.ogg', +"facility" = 'modular_nova/modules/alt_vox/sound/vox_hl/facility.ogg', +"fahrenheit" = 'modular_nova/modules/alt_vox/sound/vox_hl/fahrenheit.ogg', +"failed" = 'modular_nova/modules/alt_vox/sound/vox_hl/failed.ogg', +"failure" = 'modular_nova/modules/alt_vox/sound/vox_hl/failure.ogg', +"farthest" = 'modular_nova/modules/alt_vox/sound/vox_hl/farthest.ogg', +"fast" = 'modular_nova/modules/alt_vox/sound/vox_hl/fast.ogg', +"feet" = 'modular_nova/modules/alt_vox/sound/vox_hl/feet.ogg', +"field" = 'modular_nova/modules/alt_vox/sound/vox_hl/field.ogg', +"fifteen" = 'modular_nova/modules/alt_vox/sound/vox_hl/fifteen.ogg', +"fifth" = 'modular_nova/modules/alt_vox/sound/vox_hl/fifth.ogg', +"fifty" = 'modular_nova/modules/alt_vox/sound/vox_hl/fifty.ogg', +"final" = 'modular_nova/modules/alt_vox/sound/vox_hl/final.ogg', +"fine" = 'modular_nova/modules/alt_vox/sound/vox_hl/fine.ogg', +"fire" = 'modular_nova/modules/alt_vox/sound/vox_hl/fire.ogg', +"first" = 'modular_nova/modules/alt_vox/sound/vox_hl/first.ogg', +"five" = 'modular_nova/modules/alt_vox/sound/vox_hl/five.ogg', +"flag" = 'modular_nova/modules/alt_vox/sound/vox_hl/flag.ogg', +"flooding" = 'modular_nova/modules/alt_vox/sound/vox_hl/flooding.ogg', +"floor" = 'modular_nova/modules/alt_vox/sound/vox_hl/floor.ogg', +"fool" = 'modular_nova/modules/alt_vox/sound/vox_hl/fool.ogg', +"for" = 'modular_nova/modules/alt_vox/sound/vox_hl/for.ogg', +"forbidden" = 'modular_nova/modules/alt_vox/sound/vox_hl/forbidden.ogg', +"force" = 'modular_nova/modules/alt_vox/sound/vox_hl/force.ogg', +"forms" = 'modular_nova/modules/alt_vox/sound/vox_hl/forms.ogg', +"found" = 'modular_nova/modules/alt_vox/sound/vox_hl/found.ogg', +"four" = 'modular_nova/modules/alt_vox/sound/vox_hl/four.ogg', +"fourteen" = 'modular_nova/modules/alt_vox/sound/vox_hl/fourteen.ogg', +"fourth" = 'modular_nova/modules/alt_vox/sound/vox_hl/fourth.ogg', +"fourty" = 'modular_nova/modules/alt_vox/sound/vox_hl/fourty.ogg', +"foxtrot" = 'modular_nova/modules/alt_vox/sound/vox_hl/foxtrot.ogg', +"freeman" = 'modular_nova/modules/alt_vox/sound/vox_hl/freeman.ogg', +"freezer" = 'modular_nova/modules/alt_vox/sound/vox_hl/freezer.ogg', +"from" = 'modular_nova/modules/alt_vox/sound/vox_hl/from.ogg', +"front" = 'modular_nova/modules/alt_vox/sound/vox_hl/front.ogg', +"fuel" = 'modular_nova/modules/alt_vox/sound/vox_hl/fuel.ogg', +"g" = 'modular_nova/modules/alt_vox/sound/vox_hl/g.ogg', +"gay" = 'modular_nova/modules/alt_vox/sound/vox_hl/gay.ogg', +"get" = 'modular_nova/modules/alt_vox/sound/vox_hl/get.ogg', +"go" = 'modular_nova/modules/alt_vox/sound/vox_hl/go.ogg', +"going" = 'modular_nova/modules/alt_vox/sound/vox_hl/going.ogg', +"good" = 'modular_nova/modules/alt_vox/sound/vox_hl/good.ogg', +"goodbye" = 'modular_nova/modules/alt_vox/sound/vox_hl/goodbye.ogg', +"gordon" = 'modular_nova/modules/alt_vox/sound/vox_hl/gordon.ogg', +"got" = 'modular_nova/modules/alt_vox/sound/vox_hl/got.ogg', +"government" = 'modular_nova/modules/alt_vox/sound/vox_hl/government.ogg', +"granted" = 'modular_nova/modules/alt_vox/sound/vox_hl/granted.ogg', +"great" = 'modular_nova/modules/alt_vox/sound/vox_hl/great.ogg', +"green" = 'modular_nova/modules/alt_vox/sound/vox_hl/green.ogg', +"grenade" = 'modular_nova/modules/alt_vox/sound/vox_hl/grenade.ogg', +"guard" = 'modular_nova/modules/alt_vox/sound/vox_hl/guard.ogg', +"gulf" = 'modular_nova/modules/alt_vox/sound/vox_hl/gulf.ogg', +"gun" = 'modular_nova/modules/alt_vox/sound/vox_hl/gun.ogg', +"guthrie" = 'modular_nova/modules/alt_vox/sound/vox_hl/guthrie.ogg', +"handling" = 'modular_nova/modules/alt_vox/sound/vox_hl/handling.ogg', +"hangar" = 'modular_nova/modules/alt_vox/sound/vox_hl/hangar.ogg', +"has" = 'modular_nova/modules/alt_vox/sound/vox_hl/has.ogg', +"have" = 'modular_nova/modules/alt_vox/sound/vox_hl/have.ogg', +"hazard" = 'modular_nova/modules/alt_vox/sound/vox_hl/hazard.ogg', +"head" = 'modular_nova/modules/alt_vox/sound/vox_hl/head.ogg', +"health" = 'modular_nova/modules/alt_vox/sound/vox_hl/health.ogg', +"heat" = 'modular_nova/modules/alt_vox/sound/vox_hl/heat.ogg', +"helicopter" = 'modular_nova/modules/alt_vox/sound/vox_hl/helicopter.ogg', +"helium" = 'modular_nova/modules/alt_vox/sound/vox_hl/helium.ogg', +"hello" = 'modular_nova/modules/alt_vox/sound/vox_hl/hello.ogg', +"help" = 'modular_nova/modules/alt_vox/sound/vox_hl/help.ogg', +"here" = 'modular_nova/modules/alt_vox/sound/vox_hl/here.ogg', +"hide" = 'modular_nova/modules/alt_vox/sound/vox_hl/hide.ogg', +"high" = 'modular_nova/modules/alt_vox/sound/vox_hl/high.ogg', +"highest" = 'modular_nova/modules/alt_vox/sound/vox_hl/highest.ogg', +"hit" = 'modular_nova/modules/alt_vox/sound/vox_hl/hit.ogg', +"holds" = 'modular_nova/modules/alt_vox/sound/vox_hl/holds.ogg', +"hole" = 'modular_nova/modules/alt_vox/sound/vox_hl/hole.ogg', +"hostile" = 'modular_nova/modules/alt_vox/sound/vox_hl/hostile.ogg', +"hot" = 'modular_nova/modules/alt_vox/sound/vox_hl/hot.ogg', +"hotel" = 'modular_nova/modules/alt_vox/sound/vox_hl/hotel.ogg', +"hour" = 'modular_nova/modules/alt_vox/sound/vox_hl/hour.ogg', +"hours" = 'modular_nova/modules/alt_vox/sound/vox_hl/hours.ogg', +"hundred" = 'modular_nova/modules/alt_vox/sound/vox_hl/hundred.ogg', +"hydro" = 'modular_nova/modules/alt_vox/sound/vox_hl/hydro.ogg', +"i" = 'modular_nova/modules/alt_vox/sound/vox_hl/i.ogg', +"idiot" = 'modular_nova/modules/alt_vox/sound/vox_hl/idiot.ogg', +"illegal" = 'modular_nova/modules/alt_vox/sound/vox_hl/illegal.ogg', +"immediate" = 'modular_nova/modules/alt_vox/sound/vox_hl/immediate.ogg', +"immediately" = 'modular_nova/modules/alt_vox/sound/vox_hl/immediately.ogg', +"in" = 'modular_nova/modules/alt_vox/sound/vox_hl/in.ogg', +"inches" = 'modular_nova/modules/alt_vox/sound/vox_hl/inches.ogg', +"india" = 'modular_nova/modules/alt_vox/sound/vox_hl/india.ogg', +"ing" = 'modular_nova/modules/alt_vox/sound/vox_hl/ing.ogg', +"inoperative" = 'modular_nova/modules/alt_vox/sound/vox_hl/inoperative.ogg', +"inside" = 'modular_nova/modules/alt_vox/sound/vox_hl/inside.ogg', +"inspection" = 'modular_nova/modules/alt_vox/sound/vox_hl/inspection.ogg', +"inspector" = 'modular_nova/modules/alt_vox/sound/vox_hl/inspector.ogg', +"interchange" = 'modular_nova/modules/alt_vox/sound/vox_hl/interchange.ogg', +"intruder" = 'modular_nova/modules/alt_vox/sound/vox_hl/intruder.ogg', +"invallid" = 'modular_nova/modules/alt_vox/sound/vox_hl/invallid.ogg', +"invasion" = 'modular_nova/modules/alt_vox/sound/vox_hl/invasion.ogg', +"is" = 'modular_nova/modules/alt_vox/sound/vox_hl/is.ogg', +"it" = 'modular_nova/modules/alt_vox/sound/vox_hl/it.ogg', +"johnson" = 'modular_nova/modules/alt_vox/sound/vox_hl/johnson.ogg', +"juliet" = 'modular_nova/modules/alt_vox/sound/vox_hl/juliet.ogg', +"key" = 'modular_nova/modules/alt_vox/sound/vox_hl/key.ogg', +"kill" = 'modular_nova/modules/alt_vox/sound/vox_hl/kill.ogg', +"kilo" = 'modular_nova/modules/alt_vox/sound/vox_hl/kilo.ogg', +"kit" = 'modular_nova/modules/alt_vox/sound/vox_hl/kit.ogg', +"lab" = 'modular_nova/modules/alt_vox/sound/vox_hl/lab.ogg', +"lambda" = 'modular_nova/modules/alt_vox/sound/vox_hl/lambda.ogg', +"laser" = 'modular_nova/modules/alt_vox/sound/vox_hl/laser.ogg', +"last" = 'modular_nova/modules/alt_vox/sound/vox_hl/last.ogg', +"launch" = 'modular_nova/modules/alt_vox/sound/vox_hl/launch.ogg', +"leak" = 'modular_nova/modules/alt_vox/sound/vox_hl/leak.ogg', +"leave" = 'modular_nova/modules/alt_vox/sound/vox_hl/leave.ogg', +"left" = 'modular_nova/modules/alt_vox/sound/vox_hl/left.ogg', +"legal" = 'modular_nova/modules/alt_vox/sound/vox_hl/legal.ogg', +"level" = 'modular_nova/modules/alt_vox/sound/vox_hl/level.ogg', +"lever" = 'modular_nova/modules/alt_vox/sound/vox_hl/lever.ogg', +"lie" = 'modular_nova/modules/alt_vox/sound/vox_hl/lie.ogg', +"lieutenant" = 'modular_nova/modules/alt_vox/sound/vox_hl/lieutenant.ogg', +"life" = 'modular_nova/modules/alt_vox/sound/vox_hl/life.ogg', +"light" = 'modular_nova/modules/alt_vox/sound/vox_hl/light.ogg', +"lima" = 'modular_nova/modules/alt_vox/sound/vox_hl/lima.ogg', +"liquid" = 'modular_nova/modules/alt_vox/sound/vox_hl/liquid.ogg', +"loading" = 'modular_nova/modules/alt_vox/sound/vox_hl/loading.ogg', +"locate" = 'modular_nova/modules/alt_vox/sound/vox_hl/locate.ogg', +"located" = 'modular_nova/modules/alt_vox/sound/vox_hl/located.ogg', +"location" = 'modular_nova/modules/alt_vox/sound/vox_hl/location.ogg', +"lock" = 'modular_nova/modules/alt_vox/sound/vox_hl/lock.ogg', +"locked" = 'modular_nova/modules/alt_vox/sound/vox_hl/locked.ogg', +"locker" = 'modular_nova/modules/alt_vox/sound/vox_hl/locker.ogg', +"lockout" = 'modular_nova/modules/alt_vox/sound/vox_hl/lockout.ogg', +"lower" = 'modular_nova/modules/alt_vox/sound/vox_hl/lower.ogg', +"lowest" = 'modular_nova/modules/alt_vox/sound/vox_hl/lowest.ogg', +"magnetic" = 'modular_nova/modules/alt_vox/sound/vox_hl/magnetic.ogg', +"main" = 'modular_nova/modules/alt_vox/sound/vox_hl/main.ogg', +"maintenance" = 'modular_nova/modules/alt_vox/sound/vox_hl/maintenance.ogg', +"malfunction" = 'modular_nova/modules/alt_vox/sound/vox_hl/malfunction.ogg', +"man" = 'modular_nova/modules/alt_vox/sound/vox_hl/man.ogg', +"mass" = 'modular_nova/modules/alt_vox/sound/vox_hl/mass.ogg', +"materials" = 'modular_nova/modules/alt_vox/sound/vox_hl/materials.ogg', +"maximum" = 'modular_nova/modules/alt_vox/sound/vox_hl/maximum.ogg', +"may" = 'modular_nova/modules/alt_vox/sound/vox_hl/may.ogg', +"med" = 'modular_nova/modules/alt_vox/sound/vox_hl/med.ogg', +"medical" = 'modular_nova/modules/alt_vox/sound/vox_hl/medical.ogg', +"men" = 'modular_nova/modules/alt_vox/sound/vox_hl/men.ogg', +"mercy" = 'modular_nova/modules/alt_vox/sound/vox_hl/mercy.ogg', +"mesa" = 'modular_nova/modules/alt_vox/sound/vox_hl/mesa.ogg', +"message" = 'modular_nova/modules/alt_vox/sound/vox_hl/message.ogg', +"meter" = 'modular_nova/modules/alt_vox/sound/vox_hl/meter.ogg', +"micro" = 'modular_nova/modules/alt_vox/sound/vox_hl/micro.ogg', +"middle" = 'modular_nova/modules/alt_vox/sound/vox_hl/middle.ogg', +"mike" = 'modular_nova/modules/alt_vox/sound/vox_hl/mike.ogg', +"miles" = 'modular_nova/modules/alt_vox/sound/vox_hl/miles.ogg', +"military" = 'modular_nova/modules/alt_vox/sound/vox_hl/military.ogg', +"milli" = 'modular_nova/modules/alt_vox/sound/vox_hl/milli.ogg', +"million" = 'modular_nova/modules/alt_vox/sound/vox_hl/million.ogg', +"minefield" = 'modular_nova/modules/alt_vox/sound/vox_hl/minefield.ogg', +"minimum" = 'modular_nova/modules/alt_vox/sound/vox_hl/minimum.ogg', +"minutes" = 'modular_nova/modules/alt_vox/sound/vox_hl/minutes.ogg', +"mister" = 'modular_nova/modules/alt_vox/sound/vox_hl/mister.ogg', +"mode" = 'modular_nova/modules/alt_vox/sound/vox_hl/mode.ogg', +"motor" = 'modular_nova/modules/alt_vox/sound/vox_hl/motor.ogg', +"motorpool" = 'modular_nova/modules/alt_vox/sound/vox_hl/motorpool.ogg', +"move" = 'modular_nova/modules/alt_vox/sound/vox_hl/move.ogg', +"must" = 'modular_nova/modules/alt_vox/sound/vox_hl/must.ogg', +"nearest" = 'modular_nova/modules/alt_vox/sound/vox_hl/nearest.ogg', +"nice" = 'modular_nova/modules/alt_vox/sound/vox_hl/nice.ogg', +"nine" = 'modular_nova/modules/alt_vox/sound/vox_hl/nine.ogg', +"nineteen" = 'modular_nova/modules/alt_vox/sound/vox_hl/nineteen.ogg', +"ninety" = 'modular_nova/modules/alt_vox/sound/vox_hl/ninety.ogg', +"no" = 'modular_nova/modules/alt_vox/sound/vox_hl/no.ogg', +"nominal" = 'modular_nova/modules/alt_vox/sound/vox_hl/nominal.ogg', +"north" = 'modular_nova/modules/alt_vox/sound/vox_hl/north.ogg', +"not" = 'modular_nova/modules/alt_vox/sound/vox_hl/not.ogg', +"november" = 'modular_nova/modules/alt_vox/sound/vox_hl/november.ogg', +"now" = 'modular_nova/modules/alt_vox/sound/vox_hl/now.ogg', +"number" = 'modular_nova/modules/alt_vox/sound/vox_hl/number.ogg', +"objective" = 'modular_nova/modules/alt_vox/sound/vox_hl/objective.ogg', +"observation" = 'modular_nova/modules/alt_vox/sound/vox_hl/observation.ogg', +"of" = 'modular_nova/modules/alt_vox/sound/vox_hl/of.ogg', +"officer" = 'modular_nova/modules/alt_vox/sound/vox_hl/officer.ogg', +"ok" = 'modular_nova/modules/alt_vox/sound/vox_hl/ok.ogg', +"on" = 'modular_nova/modules/alt_vox/sound/vox_hl/on.ogg', +"one" = 'modular_nova/modules/alt_vox/sound/vox_hl/one.ogg', +"open" = 'modular_nova/modules/alt_vox/sound/vox_hl/open.ogg', +"operating" = 'modular_nova/modules/alt_vox/sound/vox_hl/operating.ogg', +"operations" = 'modular_nova/modules/alt_vox/sound/vox_hl/operations.ogg', +"operative" = 'modular_nova/modules/alt_vox/sound/vox_hl/operative.ogg', +"option" = 'modular_nova/modules/alt_vox/sound/vox_hl/option.ogg', +"order" = 'modular_nova/modules/alt_vox/sound/vox_hl/order.ogg', +"organic" = 'modular_nova/modules/alt_vox/sound/vox_hl/organic.ogg', +"oscar" = 'modular_nova/modules/alt_vox/sound/vox_hl/oscar.ogg', +"out" = 'modular_nova/modules/alt_vox/sound/vox_hl/out.ogg', +"outside" = 'modular_nova/modules/alt_vox/sound/vox_hl/outside.ogg', +"over" = 'modular_nova/modules/alt_vox/sound/vox_hl/over.ogg', +"overload" = 'modular_nova/modules/alt_vox/sound/vox_hl/overload.ogg', +"override" = 'modular_nova/modules/alt_vox/sound/vox_hl/override.ogg', +"pacify" = 'modular_nova/modules/alt_vox/sound/vox_hl/pacify.ogg', +"pain" = 'modular_nova/modules/alt_vox/sound/vox_hl/pain.ogg', +"pal" = 'modular_nova/modules/alt_vox/sound/vox_hl/pal.ogg', +"panel" = 'modular_nova/modules/alt_vox/sound/vox_hl/panel.ogg', +"percent" = 'modular_nova/modules/alt_vox/sound/vox_hl/percent.ogg', +"perimeter" = 'modular_nova/modules/alt_vox/sound/vox_hl/perimeter.ogg', +"permitted" = 'modular_nova/modules/alt_vox/sound/vox_hl/permitted.ogg', +"personnel" = 'modular_nova/modules/alt_vox/sound/vox_hl/personnel.ogg', +"pipe" = 'modular_nova/modules/alt_vox/sound/vox_hl/pipe.ogg', +"plant" = 'modular_nova/modules/alt_vox/sound/vox_hl/plant.ogg', +"platform" = 'modular_nova/modules/alt_vox/sound/vox_hl/platform.ogg', +"please" = 'modular_nova/modules/alt_vox/sound/vox_hl/please.ogg', +"point" = 'modular_nova/modules/alt_vox/sound/vox_hl/point.ogg', +"portal" = 'modular_nova/modules/alt_vox/sound/vox_hl/portal.ogg', +"power" = 'modular_nova/modules/alt_vox/sound/vox_hl/power.ogg', +"presence" = 'modular_nova/modules/alt_vox/sound/vox_hl/presence.ogg', +"press" = 'modular_nova/modules/alt_vox/sound/vox_hl/press.ogg', +"primary" = 'modular_nova/modules/alt_vox/sound/vox_hl/primary.ogg', +"proceed" = 'modular_nova/modules/alt_vox/sound/vox_hl/proceed.ogg', +"processing" = 'modular_nova/modules/alt_vox/sound/vox_hl/processing.ogg', +"progress" = 'modular_nova/modules/alt_vox/sound/vox_hl/progress.ogg', +"proper" = 'modular_nova/modules/alt_vox/sound/vox_hl/proper.ogg', +"propulsion" = 'modular_nova/modules/alt_vox/sound/vox_hl/propulsion.ogg', +"prosecute" = 'modular_nova/modules/alt_vox/sound/vox_hl/prosecute.ogg', +"protective" = 'modular_nova/modules/alt_vox/sound/vox_hl/protective.ogg', +"push" = 'modular_nova/modules/alt_vox/sound/vox_hl/push.ogg', +"quantum" = 'modular_nova/modules/alt_vox/sound/vox_hl/quantum.ogg', +"quebec" = 'modular_nova/modules/alt_vox/sound/vox_hl/quebec.ogg', +"question" = 'modular_nova/modules/alt_vox/sound/vox_hl/question.ogg', +"questioning" = 'modular_nova/modules/alt_vox/sound/vox_hl/questioning.ogg', +"quick" = 'modular_nova/modules/alt_vox/sound/vox_hl/quick.ogg', +"quit" = 'modular_nova/modules/alt_vox/sound/vox_hl/quit.ogg', +"radiation" = 'modular_nova/modules/alt_vox/sound/vox_hl/radiation.ogg', +"radioactive" = 'modular_nova/modules/alt_vox/sound/vox_hl/radioactive.ogg', +"rads" = 'modular_nova/modules/alt_vox/sound/vox_hl/rads.ogg', +"rapid" = 'modular_nova/modules/alt_vox/sound/vox_hl/rapid.ogg', +"reach" = 'modular_nova/modules/alt_vox/sound/vox_hl/reach.ogg', +"reached" = 'modular_nova/modules/alt_vox/sound/vox_hl/reached.ogg', +"reactor" = 'modular_nova/modules/alt_vox/sound/vox_hl/reactor.ogg', +"red" = 'modular_nova/modules/alt_vox/sound/vox_hl/red.ogg', +"relay" = 'modular_nova/modules/alt_vox/sound/vox_hl/relay.ogg', +"released" = 'modular_nova/modules/alt_vox/sound/vox_hl/released.ogg', +"remaining" = 'modular_nova/modules/alt_vox/sound/vox_hl/remaining.ogg', +"renegade" = 'modular_nova/modules/alt_vox/sound/vox_hl/renegade.ogg', +"repair" = 'modular_nova/modules/alt_vox/sound/vox_hl/repair.ogg', +"report" = 'modular_nova/modules/alt_vox/sound/vox_hl/report.ogg', +"reports" = 'modular_nova/modules/alt_vox/sound/vox_hl/reports.ogg', +"required" = 'modular_nova/modules/alt_vox/sound/vox_hl/required.ogg', +"research" = 'modular_nova/modules/alt_vox/sound/vox_hl/research.ogg', +"reset" = 'modular_nova/modules/alt_vox/sound/vox_hl/reset.ogg', +"resevoir" = 'modular_nova/modules/alt_vox/sound/vox_hl/resevoir.ogg', +"resistance" = 'modular_nova/modules/alt_vox/sound/vox_hl/resistance.ogg', +"returned" = 'modular_nova/modules/alt_vox/sound/vox_hl/returned.ogg', +"right" = 'modular_nova/modules/alt_vox/sound/vox_hl/right.ogg', +"rocket" = 'modular_nova/modules/alt_vox/sound/vox_hl/rocket.ogg', +"roger" = 'modular_nova/modules/alt_vox/sound/vox_hl/roger.ogg', +"romeo" = 'modular_nova/modules/alt_vox/sound/vox_hl/romeo.ogg', +"room" = 'modular_nova/modules/alt_vox/sound/vox_hl/room.ogg', +"round" = 'modular_nova/modules/alt_vox/sound/vox_hl/round.ogg', +"run" = 'modular_nova/modules/alt_vox/sound/vox_hl/run.ogg', +"safe" = 'modular_nova/modules/alt_vox/sound/vox_hl/safe.ogg', +"safety" = 'modular_nova/modules/alt_vox/sound/vox_hl/safety.ogg', +"sargeant" = 'modular_nova/modules/alt_vox/sound/vox_hl/sargeant.ogg', +"satellite" = 'modular_nova/modules/alt_vox/sound/vox_hl/satellite.ogg', +"save" = 'modular_nova/modules/alt_vox/sound/vox_hl/save.ogg', +"science" = 'modular_nova/modules/alt_vox/sound/vox_hl/science.ogg', +"scores" = 'modular_nova/modules/alt_vox/sound/vox_hl/scores.ogg', +"scream" = 'modular_nova/modules/alt_vox/sound/vox_hl/scream.ogg', +"screen" = 'modular_nova/modules/alt_vox/sound/vox_hl/screen.ogg', +"search" = 'modular_nova/modules/alt_vox/sound/vox_hl/search.ogg', +"second" = 'modular_nova/modules/alt_vox/sound/vox_hl/second.ogg', +"secondary" = 'modular_nova/modules/alt_vox/sound/vox_hl/secondary.ogg', +"seconds" = 'modular_nova/modules/alt_vox/sound/vox_hl/seconds.ogg', +"sector" = 'modular_nova/modules/alt_vox/sound/vox_hl/sector.ogg', +"secure" = 'modular_nova/modules/alt_vox/sound/vox_hl/secure.ogg', +"secured" = 'modular_nova/modules/alt_vox/sound/vox_hl/secured.ogg', +"security" = 'modular_nova/modules/alt_vox/sound/vox_hl/security.ogg', +"select" = 'modular_nova/modules/alt_vox/sound/vox_hl/select.ogg', +"selected" = 'modular_nova/modules/alt_vox/sound/vox_hl/selected.ogg', +"service" = 'modular_nova/modules/alt_vox/sound/vox_hl/service.ogg', +"seven" = 'modular_nova/modules/alt_vox/sound/vox_hl/seven.ogg', +"seventeen" = 'modular_nova/modules/alt_vox/sound/vox_hl/seventeen.ogg', +"seventy" = 'modular_nova/modules/alt_vox/sound/vox_hl/seventy.ogg', +"severe" = 'modular_nova/modules/alt_vox/sound/vox_hl/severe.ogg', +"sewage" = 'modular_nova/modules/alt_vox/sound/vox_hl/sewage.ogg', +"sewer" = 'modular_nova/modules/alt_vox/sound/vox_hl/sewer.ogg', +"shield" = 'modular_nova/modules/alt_vox/sound/vox_hl/shield.ogg', +"shipment" = 'modular_nova/modules/alt_vox/sound/vox_hl/shipment.ogg', +"shock" = 'modular_nova/modules/alt_vox/sound/vox_hl/shock.ogg', +"shoot" = 'modular_nova/modules/alt_vox/sound/vox_hl/shoot.ogg', +"shower" = 'modular_nova/modules/alt_vox/sound/vox_hl/shower.ogg', +"shut" = 'modular_nova/modules/alt_vox/sound/vox_hl/shut.ogg', +"side" = 'modular_nova/modules/alt_vox/sound/vox_hl/side.ogg', +"sierra" = 'modular_nova/modules/alt_vox/sound/vox_hl/sierra.ogg', +"sight" = 'modular_nova/modules/alt_vox/sound/vox_hl/sight.ogg', +"silo" = 'modular_nova/modules/alt_vox/sound/vox_hl/silo.ogg', +"six" = 'modular_nova/modules/alt_vox/sound/vox_hl/six.ogg', +"sixteen" = 'modular_nova/modules/alt_vox/sound/vox_hl/sixteen.ogg', +"sixty" = 'modular_nova/modules/alt_vox/sound/vox_hl/sixty.ogg', +"slime" = 'modular_nova/modules/alt_vox/sound/vox_hl/slime.ogg', +"slow" = 'modular_nova/modules/alt_vox/sound/vox_hl/slow.ogg', +"soldier" = 'modular_nova/modules/alt_vox/sound/vox_hl/soldier.ogg', +"some" = 'modular_nova/modules/alt_vox/sound/vox_hl/some.ogg', +"someone" = 'modular_nova/modules/alt_vox/sound/vox_hl/someone.ogg', +"something" = 'modular_nova/modules/alt_vox/sound/vox_hl/something.ogg', +"son" = 'modular_nova/modules/alt_vox/sound/vox_hl/son.ogg', +"sorry" = 'modular_nova/modules/alt_vox/sound/vox_hl/sorry.ogg', +"south" = 'modular_nova/modules/alt_vox/sound/vox_hl/south.ogg', +"squad" = 'modular_nova/modules/alt_vox/sound/vox_hl/squad.ogg', +"square" = 'modular_nova/modules/alt_vox/sound/vox_hl/square.ogg', +"stairway" = 'modular_nova/modules/alt_vox/sound/vox_hl/stairway.ogg', +"status" = 'modular_nova/modules/alt_vox/sound/vox_hl/status.ogg', +"sterile" = 'modular_nova/modules/alt_vox/sound/vox_hl/sterile.ogg', +"sterilization" = 'modular_nova/modules/alt_vox/sound/vox_hl/sterilization.ogg', +"stolen" = 'modular_nova/modules/alt_vox/sound/vox_hl/stolen.ogg', +"storage" = 'modular_nova/modules/alt_vox/sound/vox_hl/storage.ogg', +"sub" = 'modular_nova/modules/alt_vox/sound/vox_hl/sub.ogg', +"subsurface" = 'modular_nova/modules/alt_vox/sound/vox_hl/subsurface.ogg', +"sudden" = 'modular_nova/modules/alt_vox/sound/vox_hl/sudden.ogg', +"suit" = 'modular_nova/modules/alt_vox/sound/vox_hl/suit.ogg', +"superconducting" = 'modular_nova/modules/alt_vox/sound/vox_hl/superconducting.ogg', +"supercooled" = 'modular_nova/modules/alt_vox/sound/vox_hl/supercooled.ogg', +"supply" = 'modular_nova/modules/alt_vox/sound/vox_hl/supply.ogg', +"surface" = 'modular_nova/modules/alt_vox/sound/vox_hl/surface.ogg', +"surrender" = 'modular_nova/modules/alt_vox/sound/vox_hl/surrender.ogg', +"surround" = 'modular_nova/modules/alt_vox/sound/vox_hl/surround.ogg', +"surrounded" = 'modular_nova/modules/alt_vox/sound/vox_hl/surrounded.ogg', +"switch" = 'modular_nova/modules/alt_vox/sound/vox_hl/switch.ogg', +"system" = 'modular_nova/modules/alt_vox/sound/vox_hl/system.ogg', +"systems" = 'modular_nova/modules/alt_vox/sound/vox_hl/systems.ogg', +"tactical" = 'modular_nova/modules/alt_vox/sound/vox_hl/tactical.ogg', +"take" = 'modular_nova/modules/alt_vox/sound/vox_hl/take.ogg', +"talk" = 'modular_nova/modules/alt_vox/sound/vox_hl/talk.ogg', +"tango" = 'modular_nova/modules/alt_vox/sound/vox_hl/tango.ogg', +"tank" = 'modular_nova/modules/alt_vox/sound/vox_hl/tank.ogg', +"target" = 'modular_nova/modules/alt_vox/sound/vox_hl/target.ogg', +"team" = 'modular_nova/modules/alt_vox/sound/vox_hl/team.ogg', +"temperature" = 'modular_nova/modules/alt_vox/sound/vox_hl/temperature.ogg', +"temporal" = 'modular_nova/modules/alt_vox/sound/vox_hl/temporal.ogg', +"ten" = 'modular_nova/modules/alt_vox/sound/vox_hl/ten.ogg', +"terminal" = 'modular_nova/modules/alt_vox/sound/vox_hl/terminal.ogg', +"terminated" = 'modular_nova/modules/alt_vox/sound/vox_hl/terminated.ogg', +"termination" = 'modular_nova/modules/alt_vox/sound/vox_hl/termination.ogg', +"test" = 'modular_nova/modules/alt_vox/sound/vox_hl/test.ogg', +"that" = 'modular_nova/modules/alt_vox/sound/vox_hl/that.ogg', +"the" = 'modular_nova/modules/alt_vox/sound/vox_hl/the.ogg', +"then" = 'modular_nova/modules/alt_vox/sound/vox_hl/then.ogg', +"there" = 'modular_nova/modules/alt_vox/sound/vox_hl/there.ogg', +"third" = 'modular_nova/modules/alt_vox/sound/vox_hl/third.ogg', +"thirteen" = 'modular_nova/modules/alt_vox/sound/vox_hl/thirteen.ogg', +"thirty" = 'modular_nova/modules/alt_vox/sound/vox_hl/thirty.ogg', +"this" = 'modular_nova/modules/alt_vox/sound/vox_hl/this.ogg', +"those" = 'modular_nova/modules/alt_vox/sound/vox_hl/those.ogg', +"thousand" = 'modular_nova/modules/alt_vox/sound/vox_hl/thousand.ogg', +"threat" = 'modular_nova/modules/alt_vox/sound/vox_hl/threat.ogg', +"three" = 'modular_nova/modules/alt_vox/sound/vox_hl/three.ogg', +"through" = 'modular_nova/modules/alt_vox/sound/vox_hl/through.ogg', +"time" = 'modular_nova/modules/alt_vox/sound/vox_hl/time.ogg', +"to" = 'modular_nova/modules/alt_vox/sound/vox_hl/to.ogg', +"top" = 'modular_nova/modules/alt_vox/sound/vox_hl/top.ogg', +"topside" = 'modular_nova/modules/alt_vox/sound/vox_hl/topside.ogg', +"touch" = 'modular_nova/modules/alt_vox/sound/vox_hl/touch.ogg', +"towards" = 'modular_nova/modules/alt_vox/sound/vox_hl/towards.ogg', +"track" = 'modular_nova/modules/alt_vox/sound/vox_hl/track.ogg', +"train" = 'modular_nova/modules/alt_vox/sound/vox_hl/train.ogg', +"transportation" = 'modular_nova/modules/alt_vox/sound/vox_hl/transportation.ogg', +"truck" = 'modular_nova/modules/alt_vox/sound/vox_hl/truck.ogg', +"tunnel" = 'modular_nova/modules/alt_vox/sound/vox_hl/tunnel.ogg', +"turn" = 'modular_nova/modules/alt_vox/sound/vox_hl/turn.ogg', +"turret" = 'modular_nova/modules/alt_vox/sound/vox_hl/turret.ogg', +"twelve" = 'modular_nova/modules/alt_vox/sound/vox_hl/twelve.ogg', +"twenty" = 'modular_nova/modules/alt_vox/sound/vox_hl/twenty.ogg', +"two" = 'modular_nova/modules/alt_vox/sound/vox_hl/two.ogg', +"unauthorized" = 'modular_nova/modules/alt_vox/sound/vox_hl/unauthorized.ogg', +"under" = 'modular_nova/modules/alt_vox/sound/vox_hl/under.ogg', +"uniform" = 'modular_nova/modules/alt_vox/sound/vox_hl/uniform.ogg', +"unlocked" = 'modular_nova/modules/alt_vox/sound/vox_hl/unlocked.ogg', +"until" = 'modular_nova/modules/alt_vox/sound/vox_hl/until.ogg', +"up" = 'modular_nova/modules/alt_vox/sound/vox_hl/up.ogg', +"upper" = 'modular_nova/modules/alt_vox/sound/vox_hl/upper.ogg', +"uranium" = 'modular_nova/modules/alt_vox/sound/vox_hl/uranium.ogg', +"us" = 'modular_nova/modules/alt_vox/sound/vox_hl/us.ogg', +"usa" = 'modular_nova/modules/alt_vox/sound/vox_hl/usa.ogg', +"use" = 'modular_nova/modules/alt_vox/sound/vox_hl/use.ogg', +"used" = 'modular_nova/modules/alt_vox/sound/vox_hl/used.ogg', +"user" = 'modular_nova/modules/alt_vox/sound/vox_hl/user.ogg', +"vacate" = 'modular_nova/modules/alt_vox/sound/vox_hl/vacate.ogg', +"valid" = 'modular_nova/modules/alt_vox/sound/vox_hl/valid.ogg', +"vapor" = 'modular_nova/modules/alt_vox/sound/vox_hl/vapor.ogg', +"vent" = 'modular_nova/modules/alt_vox/sound/vox_hl/vent.ogg', +"ventillation" = 'modular_nova/modules/alt_vox/sound/vox_hl/ventillation.ogg', +"victor" = 'modular_nova/modules/alt_vox/sound/vox_hl/victor.ogg', +"violated" = 'modular_nova/modules/alt_vox/sound/vox_hl/violated.ogg', +"violation" = 'modular_nova/modules/alt_vox/sound/vox_hl/violation.ogg', +"voltage" = 'modular_nova/modules/alt_vox/sound/vox_hl/voltage.ogg', +"vox_login" = 'modular_nova/modules/alt_vox/sound/vox_hl/vox_login.ogg', +"walk" = 'modular_nova/modules/alt_vox/sound/vox_hl/walk.ogg', +"wall" = 'modular_nova/modules/alt_vox/sound/vox_hl/wall.ogg', +"want" = 'modular_nova/modules/alt_vox/sound/vox_hl/want.ogg', +"wanted" = 'modular_nova/modules/alt_vox/sound/vox_hl/wanted.ogg', +"warm" = 'modular_nova/modules/alt_vox/sound/vox_hl/warm.ogg', +"warn" = 'modular_nova/modules/alt_vox/sound/vox_hl/warn.ogg', +"warning" = 'modular_nova/modules/alt_vox/sound/vox_hl/warning.ogg', +"waste" = 'modular_nova/modules/alt_vox/sound/vox_hl/waste.ogg', +"water" = 'modular_nova/modules/alt_vox/sound/vox_hl/water.ogg', +"we" = 'modular_nova/modules/alt_vox/sound/vox_hl/we.ogg', +"weapon" = 'modular_nova/modules/alt_vox/sound/vox_hl/weapon.ogg', +"west" = 'modular_nova/modules/alt_vox/sound/vox_hl/west.ogg', +"whiskey" = 'modular_nova/modules/alt_vox/sound/vox_hl/whiskey.ogg', +"white" = 'modular_nova/modules/alt_vox/sound/vox_hl/white.ogg', +"wilco" = 'modular_nova/modules/alt_vox/sound/vox_hl/wilco.ogg', +"will" = 'modular_nova/modules/alt_vox/sound/vox_hl/will.ogg', +"with" = 'modular_nova/modules/alt_vox/sound/vox_hl/with.ogg', +"without" = 'modular_nova/modules/alt_vox/sound/vox_hl/without.ogg', +"woop" = 'modular_nova/modules/alt_vox/sound/vox_hl/woop.ogg', +"xeno" = 'modular_nova/modules/alt_vox/sound/vox_hl/xeno.ogg', +"yankee" = 'modular_nova/modules/alt_vox/sound/vox_hl/yankee.ogg', +"yards" = 'modular_nova/modules/alt_vox/sound/vox_hl/yards.ogg', +"year" = 'modular_nova/modules/alt_vox/sound/vox_hl/year.ogg', +"yellow" = 'modular_nova/modules/alt_vox/sound/vox_hl/yellow.ogg', +"yes" = 'modular_nova/modules/alt_vox/sound/vox_hl/yes.ogg', +"you" = 'modular_nova/modules/alt_vox/sound/vox_hl/you.ogg', +"your" = 'modular_nova/modules/alt_vox/sound/vox_hl/your.ogg', +"yourself" = 'modular_nova/modules/alt_vox/sound/vox_hl/yourself.ogg', +"zero" = 'modular_nova/modules/alt_vox/sound/vox_hl/zero.ogg', +"zone" = 'modular_nova/modules/alt_vox/sound/vox_hl/zone.ogg', +"zulu" = 'modular_nova/modules/alt_vox/sound/vox_hl/zulu.ogg',)) + +#endif + diff --git a/modular_skyrat/modules/alt_vox/credits.md b/modular_nova/modules/alt_vox/credits.md similarity index 100% rename from modular_skyrat/modules/alt_vox/credits.md rename to modular_nova/modules/alt_vox/credits.md diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/_comma.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/_comma.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/_comma.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/_comma.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/_period.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/_period.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/_period.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/_period.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/activated.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/activated.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/activated.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/activated.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/administration.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/administration.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/administration.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/administration.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/administration_center.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/administration_center.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/administration_center.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/administration_center.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/agent.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/agent.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/agent.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/agent.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/alan.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/alan.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/alan.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/alan.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/alexander.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/alexander.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/alexander.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/alexander.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/all.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/all.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/all.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/all.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/all_personnel.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/all_personnel.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/all_personnel.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/all_personnel.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/alpha.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/alpha.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/alpha.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/alpha.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/and.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/and.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/and.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/and.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/anomalous.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/anomalous.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/anomalous.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/anomalous.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/anomalous_energy_field.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/anomalous_energy_field.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/anomalous_energy_field.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/anomalous_energy_field.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/any.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/any.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/any.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/any.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/area.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/area.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/area.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/area.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/at.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/at.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/at.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/at.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/attention.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/attention.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/attention.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/attention.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/audit.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/audit.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/audit.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/audit.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/b.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/b.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/b.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/b.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/bad_boop_long.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/bad_boop_long.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/bad_boop_long.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/bad_boop_long.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/bad_boop_short.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/bad_boop_short.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/bad_boop_short.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/bad_boop_short.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/ben.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/ben.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/ben.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/ben.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/biohazard.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/biohazard.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/biohazard.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/biohazard.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/biological.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/biological.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/biological.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/biological.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/boop_boop_long.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/boop_boop_long.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/boop_boop_long.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/boop_boop_long.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/boop_boop_short.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/boop_boop_short.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/boop_boop_short.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/boop_boop_short.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/bravo.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/bravo.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/bravo.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/bravo.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/brickman.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/brickman.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/brickman.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/brickman.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/c.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/c.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/c.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/c.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/call.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/call.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/call.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/call.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/captain.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/captain.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/captain.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/captain.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/center.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/center.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/center.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/center.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/central.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/central.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/central.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/central.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/check.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/check.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/check.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/check.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/checkpoint.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/checkpoint.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/checkpoint.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/checkpoint.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/chenner.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/chenner.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/chenner.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/chenner.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/cisc.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/cisc.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/cisc.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/cisc.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/clayson.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/clayson.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/clayson.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/clayson.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/cleanup.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/cleanup.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/cleanup.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/cleanup.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/coded_message_for.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/coded_message_for.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/coded_message_for.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/coded_message_for.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/command.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/command.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/command.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/command.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/command_and_communications.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/command_and_communications.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/command_and_communications.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/command_and_communications.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/command_and_communications_center.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/command_and_communications_center.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/command_and_communications_center.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/command_and_communications_center.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/communications.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/communications.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/communications.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/communications.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/complex.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/complex.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/complex.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/complex.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/complex_2.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/complex_2.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/complex_2.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/complex_2.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/conference_room.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/conference_room.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/conference_room.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/conference_room.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/containment.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/containment.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/containment.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/containment.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/control_team.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/control_team.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/control_team.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/control_team.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/coolant.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/coolant.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/coolant.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/coolant.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/corporal.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/corporal.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/corporal.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/corporal.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/d.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/d.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/d.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/d.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/dale.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/dale.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/dale.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/dale.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/dam.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/dam.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/dam.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/dam.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/damage.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/damage.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/damage.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/damage.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/danger.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/danger.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/danger.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/danger.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/defence.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/defence.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/defence.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/defence.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/detected.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/detected.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/detected.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/detected.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/detected_in.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/detected_in.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/detected_in.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/detected_in.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/detonation.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/detonation.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/detonation.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/detonation.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/do_not.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/do_not.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/do_not.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/do_not.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/do_not_use.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/do_not_use.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/do_not_use.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/do_not_use.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/doctor.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/doctor.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/doctor.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/doctor.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/dominski.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/dominski.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/dominski.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/dominski.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/doot_doot.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/doot_doot.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/doot_doot.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/doot_doot.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/down.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/down.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/down.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/down.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/eight.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/eight.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/eight.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/eight.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/electric.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/electric.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/electric.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/electric.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/electric_shock.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/electric_shock.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/electric_shock.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/electric_shock.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/elevator.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/elevator.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/elevator.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/elevator.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/emergency.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/emergency.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/emergency.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/emergency.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_2.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/emergency_2.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_2.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/emergency_2.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_cleanup_team.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/emergency_cleanup_team.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_cleanup_team.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/emergency_cleanup_team.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_shutdown.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/emergency_shutdown.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_shutdown.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/emergency_shutdown.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_uranium_containment_team_to.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/emergency_uranium_containment_team_to.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_uranium_containment_team_to.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/emergency_uranium_containment_team_to.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/energy.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/energy.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/energy.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/energy.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/engles.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/engles.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/engles.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/engles.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/evacuate.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/evacuate.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/evacuate.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/evacuate.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/evacuate_area_immediately.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/evacuate_area_immediately.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/evacuate_area_immediately.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/evacuate_area_immediately.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/evacuate_sector.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/evacuate_sector.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/evacuate_sector.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/evacuate_sector.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/extreme.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/extreme.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/extreme.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/extreme.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/extreme_danger.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/extreme_danger.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/extreme_danger.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/extreme_danger.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/extreme_force.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/extreme_force.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/extreme_force.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/extreme_force.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/facility.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/facility.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/facility.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/facility.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/failure.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/failure.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/failure.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/failure.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/field.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/field.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/field.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/field.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/fifteen.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/fifteen.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/fifteen.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/fifteen.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/five.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/five.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/five.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/five.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/fleistad.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/fleistad.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/fleistad.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/fleistad.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/flooding.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/flooding.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/flooding.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/flooding.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/for.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/for.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/for.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/for.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/force.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/force.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/force.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/force.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/foreman.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/foreman.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/foreman.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/foreman.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/forms.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/forms.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/forms.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/forms.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/four.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/four.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/four.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/four.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/freeman.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/freeman.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/freeman.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/freeman.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/hankle.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/hankle.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/hankle.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/hankle.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/hazard.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/hazard.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/hazard.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/hazard.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/hazard_course.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/hazard_course.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/hazard_course.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/hazard_course.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/headon.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/headon.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/headon.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/headon.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/helioski.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/helioski.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/helioski.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/helioski.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/help.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/help.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/help.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/help.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/high.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/high.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/high.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/high.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/high_energy_detonation.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/high_energy_detonation.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/high_energy_detonation.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/high_energy_detonation.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/high_security.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/high_security.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/high_security.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/high_security.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/horn.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/horn.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/horn.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/horn.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/human.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/human.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/human.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/human.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/hydro.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/hydro.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/hydro.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/hydro.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/immediately.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/immediately.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/immediately.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/immediately.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/in.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/in.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/in.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/in.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/india.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/india.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/india.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/india.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/interchange.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/interchange.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/interchange.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/interchange.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/is.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/is.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/is.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/is.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/is_now.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/is_now.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/is_now.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/is_now.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/j.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/j.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/j.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/j.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/junic.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/junic.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/junic.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/junic.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/kilo.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/kilo.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/kilo.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/kilo.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/lab.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/lab.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/lab.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/lab.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/lambda.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/lambda.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/lambda.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/lambda.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/laser.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/laser.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/laser.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/laser.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/level.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/level.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/level.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/level.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/lieutenant.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/lieutenant.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/lieutenant.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/lieutenant.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/lima.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/lima.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/lima.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/lima.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/line.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/line.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/line.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/line.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/login.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/login.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/login.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/login.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/lukas.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/lukas.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/lukas.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/lukas.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/maintenance.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/maintenance.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/maintenance.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/maintenance.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/material.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/material.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/material.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/material.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/materials.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/materials.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/materials.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/materials.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/materials_storage_facility.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/materials_storage_facility.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/materials_storage_facility.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/materials_storage_facility.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/med_down_in.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/med_down_in.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/med_down_in.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/med_down_in.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/medical.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/medical.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/medical.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/medical.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/medical_emergency.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/medical_emergency.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/medical_emergency.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/medical_emergency.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/member.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/member.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/member.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/member.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/men.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/men.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/men.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/men.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/military.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/military.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/military.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/military.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/minutes.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/minutes.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/minutes.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/minutes.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/monterro.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/monterro.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/monterro.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/monterro.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/morel.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/morel.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/morel.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/morel.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/motorpool.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/motorpool.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/motorpool.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/motorpool.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/murphin.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/murphin.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/murphin.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/murphin.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/network_team.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/network_team.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/network_team.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/network_team.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/nine.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/nine.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/nine.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/nine.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/oatsma.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/oatsma.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/oatsma.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/oatsma.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/observation.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/observation.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/observation.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/observation.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/office.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/office.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/office.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/office.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/on.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/on.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/on.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/on.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/one.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/one.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/one.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/one.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/operational.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/operational.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/operational.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/operational.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/operations.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/operations.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/operations.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/operations.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/optimal.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/optimal.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/optimal.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/optimal.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/outerchange.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/outerchange.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/outerchange.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/outerchange.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/performance.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/performance.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/performance.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/performance.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/personal_call.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/personal_call.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/personal_call.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/personal_call.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/personnel.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/personnel.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/personnel.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/personnel.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/personnel_2.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/personnel_2.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/personnel_2.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/personnel_2.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/place.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/place.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/place.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/place.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/plant.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/plant.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/plant.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/plant.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/please.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/please.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/please.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/please.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/please_2.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/please_2.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/please_2.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/please_2.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/please_call.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/please_call.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/please_call.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/please_call.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/please_report_status.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/please_report_status.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/please_report_status.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/please_report_status.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/please_report_to.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/please_report_to.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/please_report_to.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/please_report_to.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/proceedural.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/proceedural.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/proceedural.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/proceedural.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/processing.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/processing.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/processing.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/processing.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/processing_plant.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/processing_plant.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/processing_plant.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/processing_plant.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/profile.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/profile.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/profile.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/profile.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/prosecute.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/prosecute.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/prosecute.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/prosecute.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/questioning.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/questioning.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/questioning.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/questioning.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/raddock.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/raddock.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/raddock.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/raddock.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/rail.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/rail.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/rail.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/rail.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/reactor.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/reactor.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/reactor.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/reactor.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/repair.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/repair.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/repair.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/repair.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/report_to.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/report_to.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/report_to.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/report_to.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/reports.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/reports.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/reports.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/reports.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/required.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/required.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/required.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/required.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/residue.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/residue.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/residue.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/residue.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/resources.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/resources.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/resources.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/resources.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/review.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/review.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/review.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/review.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/robertson.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/robertson.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/robertson.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/robertson.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/rose.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/rose.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/rose.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/rose.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/scheduled.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/scheduled.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/scheduled.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/scheduled.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/scheduled_in.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/scheduled_in.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/scheduled_in.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/scheduled_in.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/science.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/science.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/science.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/science.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/science_personnel.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/science_personnel.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/science_personnel.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/science_personnel.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/sector.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/sector.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/sector.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/sector.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/secure.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/secure.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/secure.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/secure.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/secure_line_call.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/secure_line_call.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/secure_line_call.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/secure_line_call.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/security.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/security.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/security.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/security.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/security_officer.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/security_officer.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/security_officer.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/security_officer.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/security_personnel.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/security_personnel.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/security_personnel.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/security_personnel.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/sergeant.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/sergeant.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/sergeant.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/sergeant.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/service.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/service.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/service.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/service.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/service_team.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/service_team.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/service_team.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/service_team.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/sesan.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/sesan.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/sesan.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/sesan.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/seven.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/seven.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/seven.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/seven.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/shock.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/shock.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/shock.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/shock.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/shutdown.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/shutdown.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/shutdown.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/shutdown.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/six.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/six.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/six.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/six.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/status.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/status.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/status.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/status.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/stone.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/stone.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/stone.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/stone.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/storage.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/storage.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/storage.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/storage.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/sublevel.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/sublevel.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/sublevel.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/sublevel.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/superconducting.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/superconducting.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/superconducting.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/superconducting.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/supercooled.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/supercooled.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/supercooled.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/supercooled.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/system.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/system.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/system.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/system.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/systems.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/systems.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/systems.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/systems.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/tactical.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/tactical.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/tactical.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/tactical.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/tactical_operations_center.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/tactical_operations_center.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/tactical_operations_center.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/tactical_operations_center.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/tank.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/tank.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/tank.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/tank.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/tart.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/tart.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/tart.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/tart.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/team.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/team.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/team.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/team.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/tech.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/tech.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/tech.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/tech.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/tech_sergeant.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/tech_sergeant.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/tech_sergeant.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/tech_sergeant.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/test.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/test.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/test.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/test.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/test_lab.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/test_lab.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/test_lab.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/test_lab.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/three.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/three.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/three.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/three.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/to.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/to.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/to.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/to.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/toonson.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/toonson.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/toonson.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/toonson.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/topside.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/topside.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/topside.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/topside.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/truman.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/truman.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/truman.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/truman.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/turret.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/turret.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/turret.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/turret.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/two.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/two.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/two.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/two.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/unauthorised.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/unauthorised.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/unauthorised.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/unauthorised.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/unauthorised_biological_forms.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/unauthorised_biological_forms.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/unauthorised_biological_forms.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/unauthorised_biological_forms.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/unscheduled.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/unscheduled.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/unscheduled.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/unscheduled.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/upgrade.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/upgrade.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/upgrade.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/upgrade.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/uranium.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/uranium.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/uranium.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/uranium.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/use.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/use.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/use.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/use.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/ventilation.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/ventilation.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/ventilation.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/ventilation.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/ventilation_system.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/ventilation_system.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/ventilation_system.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/ventilation_system.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/warning.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/warning.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/warning.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/warning.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/waste.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/waste.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/waste.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/waste.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/wilson.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/wilson.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/wilson.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/wilson.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/with.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/with.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/with.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/with.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/zero.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/zero.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_bms/zero.ogg rename to modular_nova/modules/alt_vox/sound/vox_bms/zero.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/_comma.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/_comma.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/_comma.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/_comma.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/_period.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/_period.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/_period.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/_period.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/a.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/a.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/a.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/a.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/accelerating.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/accelerating.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/accelerating.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/accelerating.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/accelerator.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/accelerator.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/accelerator.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/accelerator.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/accepted.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/accepted.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/accepted.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/accepted.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/access.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/access.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/access.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/access.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/acknowledge.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/acknowledge.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/acknowledge.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/acknowledge.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/acknowledged.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/acknowledged.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/acknowledged.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/acknowledged.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/acquired.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/acquired.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/acquired.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/acquired.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/acquisition.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/acquisition.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/acquisition.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/acquisition.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/across.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/across.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/across.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/across.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/activate.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/activate.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/activate.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/activate.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/activated.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/activated.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/activated.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/activated.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/activity.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/activity.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/activity.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/activity.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/adios.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/adios.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/adios.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/adios.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/administration.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/administration.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/administration.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/administration.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/advanced.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/advanced.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/advanced.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/advanced.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/after.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/after.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/after.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/after.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/agent.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/agent.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/agent.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/agent.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/alarm.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/alarm.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/alarm.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/alarm.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/alert.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/alert.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/alert.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/alert.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/alien.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/alien.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/alien.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/alien.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/aligned.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/aligned.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/aligned.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/aligned.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/all.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/all.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/all.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/all.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/alpha.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/alpha.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/alpha.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/alpha.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/am.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/am.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/am.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/am.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/amigo.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/amigo.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/amigo.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/amigo.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/ammunition.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/ammunition.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/ammunition.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/ammunition.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/an.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/an.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/an.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/an.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/and.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/and.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/and.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/and.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/announcement.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/announcement.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/announcement.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/announcement.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/anomalous.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/anomalous.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/anomalous.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/anomalous.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/antenna.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/antenna.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/antenna.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/antenna.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/any.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/any.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/any.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/any.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/apprehend.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/apprehend.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/apprehend.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/apprehend.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/approach.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/approach.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/approach.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/approach.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/are.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/are.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/are.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/are.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/area.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/area.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/area.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/area.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/arm.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/arm.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/arm.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/arm.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/armed.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/armed.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/armed.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/armed.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/armor.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/armor.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/armor.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/armor.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/armory.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/armory.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/armory.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/armory.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/arrest.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/arrest.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/arrest.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/arrest.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/ass.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/ass.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/ass.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/ass.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/at.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/at.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/at.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/at.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/atomic.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/atomic.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/atomic.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/atomic.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/attention.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/attention.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/attention.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/attention.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/authorize.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/authorize.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/authorize.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/authorize.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/authorized.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/authorized.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/authorized.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/authorized.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/automatic.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/automatic.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/automatic.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/automatic.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/away.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/away.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/away.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/away.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/b.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/b.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/b.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/b.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/back.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/back.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/back.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/back.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/backman.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/backman.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/backman.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/backman.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/bad.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/bad.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/bad.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/bad.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/bag.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/bag.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/bag.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/bag.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/bailey.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/bailey.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/bailey.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/bailey.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/barracks.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/barracks.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/barracks.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/barracks.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/base.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/base.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/base.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/base.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/bay.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/bay.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/bay.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/bay.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/be.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/be.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/be.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/be.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/been.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/been.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/been.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/been.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/before.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/before.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/before.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/before.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/beyond.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/beyond.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/beyond.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/beyond.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/biohazard.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/biohazard.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/biohazard.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/biohazard.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/biological.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/biological.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/biological.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/biological.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/birdwell.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/birdwell.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/birdwell.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/birdwell.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/bizwarn.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/bizwarn.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/bizwarn.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/bizwarn.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/black.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/black.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/black.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/black.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/blast.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/blast.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/blast.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/blast.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/blocked.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/blocked.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/blocked.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/blocked.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/bloop.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/bloop.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/bloop.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/bloop.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/blue.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/blue.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/blue.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/blue.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/bottom.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/bottom.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/bottom.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/bottom.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/bravo.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/bravo.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/bravo.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/bravo.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/breach.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/breach.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/breach.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/breach.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/breached.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/breached.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/breached.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/breached.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/break.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/break.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/break.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/break.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/bridge.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/bridge.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/bridge.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/bridge.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/bust.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/bust.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/bust.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/bust.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/but.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/but.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/but.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/but.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/button.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/button.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/button.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/button.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/buzwarn.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/buzwarn.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/buzwarn.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/buzwarn.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/bypass.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/bypass.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/bypass.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/bypass.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/c.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/c.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/c.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/c.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/cable.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/cable.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/cable.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/cable.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/call.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/call.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/call.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/call.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/called.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/called.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/called.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/called.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/canal.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/canal.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/canal.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/canal.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/cap.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/cap.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/cap.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/cap.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/captain.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/captain.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/captain.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/captain.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/capture.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/capture.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/capture.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/capture.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/captured.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/captured.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/captured.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/captured.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/ceiling.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/ceiling.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/ceiling.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/ceiling.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/celsius.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/celsius.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/celsius.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/celsius.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/center.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/center.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/center.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/center.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/centi.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/centi.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/centi.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/centi.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/central.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/central.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/central.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/central.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/chamber.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/chamber.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/chamber.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/chamber.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/charlie.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/charlie.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/charlie.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/charlie.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/check.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/check.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/check.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/check.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/checkpoint.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/checkpoint.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/checkpoint.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/checkpoint.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/chemical.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/chemical.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/chemical.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/chemical.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/cleanup.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/cleanup.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/cleanup.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/cleanup.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/clear.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/clear.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/clear.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/clear.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/clearance.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/clearance.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/clearance.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/clearance.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/close.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/close.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/close.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/close.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/clown.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/clown.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/clown.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/clown.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/code.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/code.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/code.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/code.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/coded.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/coded.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/coded.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/coded.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/collider.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/collider.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/collider.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/collider.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/comma.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/comma.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/comma.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/comma.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/command.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/command.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/command.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/command.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/communication.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/communication.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/communication.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/communication.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/complex.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/complex.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/complex.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/complex.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/computer.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/computer.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/computer.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/computer.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/condition.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/condition.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/condition.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/condition.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/containment.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/containment.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/containment.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/containment.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/contamination.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/contamination.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/contamination.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/contamination.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/control.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/control.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/control.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/control.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/coolant.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/coolant.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/coolant.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/coolant.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/coomer.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/coomer.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/coomer.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/coomer.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/core.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/core.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/core.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/core.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/correct.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/correct.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/correct.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/correct.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/corridor.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/corridor.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/corridor.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/corridor.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/crew.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/crew.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/crew.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/crew.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/cross.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/cross.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/cross.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/cross.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/cryogenic.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/cryogenic.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/cryogenic.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/cryogenic.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/d.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/d.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/d.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/d.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/dadeda.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/dadeda.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/dadeda.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/dadeda.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/damage.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/damage.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/damage.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/damage.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/damaged.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/damaged.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/damaged.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/damaged.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/danger.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/danger.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/danger.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/danger.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/day.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/day.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/day.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/day.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/deactivated.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/deactivated.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/deactivated.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/deactivated.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/decompression.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/decompression.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/decompression.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/decompression.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/decontamination.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/decontamination.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/decontamination.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/decontamination.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/deeoo.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/deeoo.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/deeoo.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/deeoo.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/defense.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/defense.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/defense.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/defense.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/degrees.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/degrees.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/degrees.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/degrees.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/delta.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/delta.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/delta.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/delta.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/denied.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/denied.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/denied.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/denied.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/deploy.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/deploy.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/deploy.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/deploy.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/deployed.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/deployed.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/deployed.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/deployed.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/destroy.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/destroy.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/destroy.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/destroy.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/destroyed.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/destroyed.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/destroyed.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/destroyed.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/detain.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/detain.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/detain.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/detain.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/detected.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/detected.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/detected.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/detected.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/detonation.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/detonation.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/detonation.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/detonation.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/device.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/device.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/device.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/device.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/did.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/did.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/did.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/did.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/die.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/die.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/die.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/die.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/dimensional.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/dimensional.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/dimensional.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/dimensional.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/dirt.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/dirt.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/dirt.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/dirt.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/disengaged.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/disengaged.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/disengaged.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/disengaged.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/dish.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/dish.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/dish.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/dish.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/disposal.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/disposal.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/disposal.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/disposal.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/distance.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/distance.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/distance.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/distance.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/distortion.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/distortion.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/distortion.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/distortion.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/do.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/do.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/do.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/do.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/doctor.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/doctor.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/doctor.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/doctor.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/doop.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/doop.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/doop.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/doop.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/door.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/door.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/door.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/door.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/down.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/down.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/down.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/down.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/dual.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/dual.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/dual.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/dual.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/duct.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/duct.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/duct.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/duct.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/e.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/e.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/e.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/e.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/east.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/east.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/east.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/east.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/echo.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/echo.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/echo.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/echo.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/ed.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/ed.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/ed.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/ed.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/effect.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/effect.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/effect.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/effect.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/egress.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/egress.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/egress.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/egress.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/eight.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/eight.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/eight.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/eight.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/eighteen.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/eighteen.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/eighteen.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/eighteen.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/eighty.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/eighty.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/eighty.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/eighty.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/electric.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/electric.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/electric.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/electric.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/electromagnetic.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/electromagnetic.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/electromagnetic.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/electromagnetic.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/elevator.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/elevator.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/elevator.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/elevator.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/eleven.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/eleven.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/eleven.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/eleven.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/eliminate.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/eliminate.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/eliminate.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/eliminate.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/emergency.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/emergency.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/emergency.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/emergency.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/enemy.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/enemy.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/enemy.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/enemy.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/energy.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/energy.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/energy.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/energy.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/engage.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/engage.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/engage.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/engage.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/engaged.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/engaged.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/engaged.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/engaged.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/engine.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/engine.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/engine.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/engine.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/enter.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/enter.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/enter.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/enter.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/entry.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/entry.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/entry.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/entry.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/environment.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/environment.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/environment.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/environment.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/error.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/error.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/error.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/error.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/escape.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/escape.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/escape.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/escape.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/evacuate.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/evacuate.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/evacuate.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/evacuate.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/exchange.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/exchange.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/exchange.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/exchange.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/exit.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/exit.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/exit.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/exit.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/expect.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/expect.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/expect.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/expect.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/experiment.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/experiment.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/experiment.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/experiment.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/experimental.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/experimental.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/experimental.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/experimental.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/explode.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/explode.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/explode.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/explode.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/explosion.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/explosion.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/explosion.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/explosion.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/exposure.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/exposure.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/exposure.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/exposure.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/exterminate.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/exterminate.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/exterminate.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/exterminate.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/extinguish.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/extinguish.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/extinguish.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/extinguish.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/extinguisher.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/extinguisher.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/extinguisher.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/extinguisher.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/extreme.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/extreme.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/extreme.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/extreme.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/f.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/f.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/f.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/f.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/face.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/face.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/face.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/face.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/facility.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/facility.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/facility.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/facility.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fahrenheit.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fahrenheit.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fahrenheit.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/fahrenheit.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/failed.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/failed.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/failed.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/failed.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/failure.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/failure.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/failure.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/failure.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/farthest.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/farthest.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/farthest.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/farthest.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fast.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fast.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fast.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/fast.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/feet.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/feet.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/feet.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/feet.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/field.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/field.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/field.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/field.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fifteen.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fifteen.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fifteen.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/fifteen.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fifth.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fifth.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fifth.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/fifth.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fifty.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fifty.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fifty.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/fifty.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/final.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/final.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/final.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/final.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fine.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fine.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fine.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/fine.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fire.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fire.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fire.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/fire.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/first.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/first.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/first.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/first.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/five.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/five.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/five.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/five.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/flag.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/flag.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/flag.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/flag.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/flooding.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/flooding.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/flooding.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/flooding.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/floor.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/floor.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/floor.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/floor.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fool.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fool.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fool.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/fool.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/for.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/for.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/for.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/for.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/forbidden.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/forbidden.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/forbidden.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/forbidden.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/force.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/force.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/force.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/force.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/forms.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/forms.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/forms.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/forms.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/found.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/found.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/found.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/found.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/four.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/four.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/four.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/four.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fourteen.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fourteen.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fourteen.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/fourteen.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fourth.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fourth.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fourth.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/fourth.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fourty.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fourty.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fourty.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/fourty.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/foxtrot.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/foxtrot.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/foxtrot.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/foxtrot.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/freeman.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/freeman.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/freeman.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/freeman.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/freezer.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/freezer.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/freezer.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/freezer.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/from.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/from.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/from.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/from.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/front.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/front.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/front.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/front.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fuel.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fuel.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fuel.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/fuel.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/g.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/g.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/g.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/g.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/gay.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/gay.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/gay.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/gay.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/get.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/get.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/get.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/get.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/go.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/go.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/go.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/go.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/going.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/going.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/going.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/going.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/good.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/good.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/good.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/good.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/goodbye.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/goodbye.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/goodbye.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/goodbye.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/gordon.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/gordon.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/gordon.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/gordon.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/got.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/got.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/got.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/got.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/government.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/government.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/government.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/government.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/granted.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/granted.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/granted.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/granted.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/great.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/great.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/great.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/great.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/green.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/green.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/green.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/green.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/grenade.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/grenade.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/grenade.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/grenade.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/guard.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/guard.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/guard.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/guard.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/gulf.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/gulf.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/gulf.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/gulf.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/gun.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/gun.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/gun.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/gun.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/guthrie.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/guthrie.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/guthrie.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/guthrie.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/handling.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/handling.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/handling.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/handling.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hangar.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hangar.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hangar.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/hangar.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/has.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/has.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/has.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/has.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/have.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/have.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/have.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/have.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hazard.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hazard.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hazard.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/hazard.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/head.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/head.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/head.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/head.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/health.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/health.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/health.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/health.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/heat.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/heat.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/heat.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/heat.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/helicopter.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/helicopter.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/helicopter.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/helicopter.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/helium.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/helium.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/helium.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/helium.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hello.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hello.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hello.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/hello.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/help.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/help.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/help.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/help.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/here.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/here.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/here.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/here.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hide.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hide.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hide.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/hide.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/high.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/high.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/high.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/high.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/highest.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/highest.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/highest.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/highest.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hit.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hit.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hit.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/hit.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/holds.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/holds.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/holds.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/holds.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hole.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hole.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hole.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/hole.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hostile.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hostile.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hostile.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/hostile.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hot.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hot.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hot.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/hot.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hotel.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hotel.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hotel.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/hotel.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hour.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hour.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hour.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/hour.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hours.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hours.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hours.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/hours.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hundred.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hundred.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hundred.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/hundred.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hydro.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hydro.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hydro.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/hydro.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/i.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/i.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/i.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/i.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/idiot.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/idiot.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/idiot.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/idiot.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/illegal.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/illegal.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/illegal.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/illegal.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/immediate.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/immediate.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/immediate.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/immediate.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/immediately.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/immediately.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/immediately.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/immediately.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/in.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/in.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/in.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/in.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/inches.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/inches.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/inches.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/inches.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/india.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/india.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/india.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/india.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/ing.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/ing.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/ing.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/ing.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/inoperative.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/inoperative.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/inoperative.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/inoperative.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/inside.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/inside.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/inside.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/inside.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/inspection.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/inspection.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/inspection.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/inspection.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/inspector.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/inspector.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/inspector.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/inspector.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/interchange.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/interchange.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/interchange.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/interchange.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/intruder.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/intruder.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/intruder.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/intruder.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/invallid.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/invallid.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/invallid.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/invallid.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/invasion.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/invasion.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/invasion.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/invasion.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/is.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/is.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/is.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/is.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/it.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/it.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/it.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/it.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/johnson.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/johnson.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/johnson.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/johnson.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/juliet.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/juliet.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/juliet.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/juliet.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/key.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/key.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/key.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/key.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/kill.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/kill.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/kill.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/kill.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/kilo.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/kilo.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/kilo.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/kilo.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/kit.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/kit.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/kit.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/kit.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/lab.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/lab.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/lab.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/lab.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/lambda.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/lambda.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/lambda.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/lambda.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/laser.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/laser.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/laser.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/laser.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/last.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/last.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/last.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/last.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/launch.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/launch.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/launch.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/launch.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/leak.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/leak.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/leak.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/leak.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/leave.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/leave.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/leave.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/leave.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/left.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/left.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/left.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/left.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/legal.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/legal.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/legal.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/legal.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/level.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/level.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/level.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/level.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/lever.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/lever.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/lever.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/lever.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/lie.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/lie.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/lie.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/lie.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/lieutenant.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/lieutenant.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/lieutenant.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/lieutenant.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/life.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/life.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/life.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/life.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/light.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/light.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/light.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/light.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/lima.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/lima.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/lima.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/lima.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/liquid.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/liquid.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/liquid.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/liquid.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/loading.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/loading.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/loading.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/loading.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/locate.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/locate.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/locate.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/locate.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/located.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/located.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/located.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/located.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/location.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/location.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/location.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/location.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/lock.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/lock.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/lock.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/lock.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/locked.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/locked.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/locked.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/locked.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/locker.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/locker.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/locker.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/locker.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/lockout.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/lockout.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/lockout.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/lockout.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/lower.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/lower.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/lower.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/lower.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/lowest.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/lowest.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/lowest.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/lowest.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/magnetic.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/magnetic.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/magnetic.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/magnetic.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/main.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/main.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/main.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/main.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/maintenance.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/maintenance.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/maintenance.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/maintenance.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/malfunction.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/malfunction.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/malfunction.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/malfunction.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/man.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/man.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/man.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/man.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/mass.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/mass.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/mass.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/mass.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/materials.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/materials.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/materials.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/materials.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/maximum.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/maximum.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/maximum.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/maximum.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/may.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/may.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/may.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/may.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/med.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/med.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/med.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/med.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/medical.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/medical.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/medical.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/medical.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/men.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/men.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/men.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/men.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/mercy.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/mercy.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/mercy.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/mercy.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/mesa.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/mesa.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/mesa.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/mesa.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/message.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/message.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/message.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/message.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/meter.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/meter.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/meter.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/meter.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/micro.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/micro.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/micro.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/micro.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/middle.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/middle.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/middle.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/middle.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/mike.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/mike.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/mike.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/mike.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/miles.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/miles.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/miles.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/miles.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/military.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/military.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/military.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/military.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/milli.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/milli.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/milli.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/milli.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/million.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/million.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/million.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/million.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/minefield.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/minefield.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/minefield.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/minefield.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/minimum.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/minimum.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/minimum.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/minimum.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/minutes.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/minutes.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/minutes.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/minutes.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/mister.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/mister.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/mister.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/mister.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/mode.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/mode.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/mode.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/mode.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/motor.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/motor.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/motor.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/motor.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/motorpool.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/motorpool.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/motorpool.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/motorpool.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/move.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/move.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/move.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/move.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/must.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/must.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/must.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/must.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/nearest.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/nearest.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/nearest.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/nearest.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/nice.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/nice.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/nice.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/nice.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/nine.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/nine.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/nine.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/nine.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/nineteen.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/nineteen.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/nineteen.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/nineteen.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/ninety.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/ninety.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/ninety.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/ninety.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/no.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/no.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/no.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/no.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/nominal.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/nominal.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/nominal.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/nominal.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/north.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/north.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/north.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/north.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/not.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/not.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/not.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/not.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/november.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/november.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/november.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/november.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/now.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/now.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/now.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/now.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/number.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/number.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/number.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/number.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/objective.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/objective.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/objective.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/objective.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/observation.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/observation.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/observation.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/observation.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/of.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/of.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/of.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/of.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/officer.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/officer.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/officer.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/officer.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/ok.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/ok.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/ok.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/ok.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/on.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/on.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/on.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/on.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/one.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/one.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/one.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/one.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/open.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/open.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/open.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/open.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/operating.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/operating.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/operating.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/operating.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/operations.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/operations.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/operations.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/operations.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/operative.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/operative.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/operative.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/operative.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/option.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/option.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/option.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/option.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/order.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/order.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/order.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/order.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/organic.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/organic.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/organic.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/organic.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/oscar.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/oscar.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/oscar.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/oscar.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/out.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/out.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/out.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/out.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/outside.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/outside.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/outside.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/outside.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/over.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/over.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/over.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/over.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/overload.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/overload.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/overload.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/overload.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/override.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/override.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/override.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/override.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/pacify.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/pacify.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/pacify.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/pacify.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/pain.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/pain.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/pain.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/pain.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/pal.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/pal.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/pal.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/pal.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/panel.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/panel.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/panel.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/panel.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/percent.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/percent.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/percent.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/percent.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/perimeter.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/perimeter.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/perimeter.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/perimeter.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/period.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/period.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/period.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/period.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/permitted.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/permitted.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/permitted.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/permitted.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/personnel.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/personnel.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/personnel.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/personnel.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/pipe.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/pipe.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/pipe.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/pipe.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/plant.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/plant.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/plant.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/plant.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/platform.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/platform.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/platform.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/platform.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/please.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/please.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/please.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/please.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/point.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/point.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/point.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/point.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/portal.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/portal.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/portal.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/portal.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/power.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/power.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/power.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/power.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/presence.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/presence.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/presence.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/presence.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/press.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/press.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/press.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/press.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/primary.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/primary.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/primary.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/primary.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/proceed.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/proceed.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/proceed.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/proceed.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/processing.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/processing.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/processing.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/processing.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/progress.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/progress.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/progress.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/progress.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/proper.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/proper.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/proper.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/proper.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/propulsion.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/propulsion.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/propulsion.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/propulsion.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/prosecute.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/prosecute.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/prosecute.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/prosecute.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/protective.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/protective.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/protective.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/protective.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/push.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/push.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/push.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/push.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/quantum.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/quantum.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/quantum.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/quantum.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/quebec.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/quebec.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/quebec.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/quebec.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/question.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/question.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/question.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/question.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/questioning.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/questioning.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/questioning.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/questioning.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/quick.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/quick.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/quick.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/quick.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/quit.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/quit.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/quit.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/quit.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/radiation.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/radiation.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/radiation.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/radiation.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/radioactive.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/radioactive.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/radioactive.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/radioactive.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/rads.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/rads.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/rads.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/rads.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/rapid.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/rapid.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/rapid.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/rapid.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/reach.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/reach.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/reach.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/reach.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/reached.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/reached.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/reached.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/reached.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/reactor.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/reactor.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/reactor.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/reactor.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/red.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/red.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/red.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/red.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/relay.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/relay.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/relay.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/relay.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/released.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/released.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/released.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/released.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/remaining.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/remaining.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/remaining.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/remaining.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/renegade.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/renegade.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/renegade.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/renegade.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/repair.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/repair.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/repair.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/repair.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/report.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/report.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/report.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/report.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/reports.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/reports.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/reports.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/reports.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/required.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/required.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/required.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/required.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/research.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/research.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/research.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/research.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/reset.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/reset.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/reset.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/reset.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/resevoir.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/resevoir.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/resevoir.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/resevoir.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/resistance.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/resistance.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/resistance.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/resistance.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/returned.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/returned.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/returned.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/returned.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/right.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/right.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/right.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/right.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/rocket.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/rocket.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/rocket.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/rocket.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/roger.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/roger.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/roger.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/roger.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/romeo.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/romeo.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/romeo.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/romeo.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/room.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/room.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/room.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/room.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/round.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/round.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/round.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/round.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/run.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/run.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/run.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/run.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/safe.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/safe.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/safe.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/safe.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/safety.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/safety.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/safety.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/safety.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sargeant.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sargeant.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sargeant.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/sargeant.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/satellite.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/satellite.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/satellite.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/satellite.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/save.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/save.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/save.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/save.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/science.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/science.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/science.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/science.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/scores.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/scores.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/scores.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/scores.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/scream.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/scream.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/scream.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/scream.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/screen.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/screen.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/screen.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/screen.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/search.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/search.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/search.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/search.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/second.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/second.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/second.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/second.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/secondary.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/secondary.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/secondary.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/secondary.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/seconds.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/seconds.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/seconds.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/seconds.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sector.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sector.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sector.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/sector.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/secure.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/secure.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/secure.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/secure.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/secured.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/secured.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/secured.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/secured.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/security.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/security.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/security.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/security.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/select.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/select.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/select.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/select.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/selected.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/selected.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/selected.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/selected.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/service.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/service.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/service.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/service.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/seven.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/seven.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/seven.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/seven.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/seventeen.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/seventeen.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/seventeen.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/seventeen.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/seventy.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/seventy.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/seventy.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/seventy.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/severe.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/severe.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/severe.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/severe.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sewage.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sewage.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sewage.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/sewage.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sewer.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sewer.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sewer.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/sewer.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/shield.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/shield.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/shield.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/shield.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/shipment.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/shipment.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/shipment.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/shipment.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/shock.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/shock.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/shock.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/shock.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/shoot.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/shoot.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/shoot.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/shoot.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/shower.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/shower.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/shower.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/shower.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/shut.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/shut.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/shut.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/shut.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/side.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/side.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/side.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/side.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sierra.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sierra.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sierra.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/sierra.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sight.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sight.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sight.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/sight.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/silo.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/silo.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/silo.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/silo.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/six.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/six.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/six.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/six.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sixteen.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sixteen.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sixteen.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/sixteen.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sixty.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sixty.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sixty.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/sixty.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/slime.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/slime.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/slime.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/slime.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/slow.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/slow.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/slow.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/slow.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/soldier.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/soldier.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/soldier.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/soldier.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/some.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/some.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/some.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/some.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/someone.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/someone.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/someone.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/someone.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/something.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/something.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/something.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/something.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/son.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/son.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/son.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/son.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sorry.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sorry.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sorry.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/sorry.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/south.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/south.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/south.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/south.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/squad.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/squad.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/squad.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/squad.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/square.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/square.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/square.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/square.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/stairway.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/stairway.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/stairway.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/stairway.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/status.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/status.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/status.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/status.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sterile.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sterile.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sterile.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/sterile.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sterilization.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sterilization.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sterilization.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/sterilization.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/stolen.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/stolen.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/stolen.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/stolen.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/storage.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/storage.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/storage.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/storage.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sub.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sub.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sub.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/sub.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/subsurface.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/subsurface.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/subsurface.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/subsurface.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sudden.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sudden.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sudden.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/sudden.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/suit.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/suit.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/suit.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/suit.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/superconducting.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/superconducting.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/superconducting.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/superconducting.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/supercooled.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/supercooled.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/supercooled.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/supercooled.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/supply.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/supply.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/supply.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/supply.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/surface.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/surface.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/surface.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/surface.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/surrender.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/surrender.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/surrender.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/surrender.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/surround.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/surround.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/surround.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/surround.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/surrounded.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/surrounded.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/surrounded.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/surrounded.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/switch.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/switch.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/switch.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/switch.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/system.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/system.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/system.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/system.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/systems.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/systems.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/systems.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/systems.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/tactical.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/tactical.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/tactical.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/tactical.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/take.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/take.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/take.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/take.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/talk.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/talk.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/talk.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/talk.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/tango.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/tango.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/tango.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/tango.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/tank.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/tank.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/tank.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/tank.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/target.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/target.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/target.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/target.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/team.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/team.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/team.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/team.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/temperature.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/temperature.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/temperature.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/temperature.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/temporal.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/temporal.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/temporal.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/temporal.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/ten.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/ten.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/ten.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/ten.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/terminal.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/terminal.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/terminal.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/terminal.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/terminated.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/terminated.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/terminated.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/terminated.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/termination.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/termination.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/termination.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/termination.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/test.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/test.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/test.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/test.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/that.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/that.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/that.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/that.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/the.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/the.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/the.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/the.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/then.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/then.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/then.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/then.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/there.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/there.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/there.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/there.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/third.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/third.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/third.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/third.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/thirteen.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/thirteen.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/thirteen.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/thirteen.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/thirty.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/thirty.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/thirty.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/thirty.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/this.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/this.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/this.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/this.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/those.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/those.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/those.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/those.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/thousand.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/thousand.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/thousand.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/thousand.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/threat.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/threat.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/threat.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/threat.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/three.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/three.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/three.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/three.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/through.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/through.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/through.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/through.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/time.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/time.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/time.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/time.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/to.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/to.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/to.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/to.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/top.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/top.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/top.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/top.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/topside.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/topside.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/topside.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/topside.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/touch.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/touch.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/touch.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/touch.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/towards.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/towards.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/towards.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/towards.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/track.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/track.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/track.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/track.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/train.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/train.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/train.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/train.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/transportation.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/transportation.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/transportation.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/transportation.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/truck.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/truck.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/truck.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/truck.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/tunnel.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/tunnel.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/tunnel.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/tunnel.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/turn.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/turn.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/turn.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/turn.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/turret.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/turret.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/turret.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/turret.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/twelve.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/twelve.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/twelve.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/twelve.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/twenty.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/twenty.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/twenty.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/twenty.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/two.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/two.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/two.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/two.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/unauthorized.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/unauthorized.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/unauthorized.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/unauthorized.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/under.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/under.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/under.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/under.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/uniform.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/uniform.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/uniform.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/uniform.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/unlocked.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/unlocked.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/unlocked.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/unlocked.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/until.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/until.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/until.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/until.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/up.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/up.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/up.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/up.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/upper.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/upper.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/upper.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/upper.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/uranium.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/uranium.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/uranium.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/uranium.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/us.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/us.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/us.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/us.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/usa.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/usa.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/usa.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/usa.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/use.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/use.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/use.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/use.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/used.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/used.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/used.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/used.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/user.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/user.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/user.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/user.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/vacate.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/vacate.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/vacate.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/vacate.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/valid.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/valid.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/valid.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/valid.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/vapor.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/vapor.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/vapor.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/vapor.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/vent.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/vent.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/vent.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/vent.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/ventillation.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/ventillation.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/ventillation.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/ventillation.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/victor.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/victor.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/victor.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/victor.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/violated.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/violated.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/violated.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/violated.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/violation.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/violation.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/violation.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/violation.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/voltage.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/voltage.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/voltage.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/voltage.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/vox_login.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/vox_login.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/vox_login.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/vox_login.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/walk.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/walk.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/walk.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/walk.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/wall.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/wall.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/wall.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/wall.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/want.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/want.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/want.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/want.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/wanted.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/wanted.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/wanted.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/wanted.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/warm.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/warm.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/warm.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/warm.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/warn.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/warn.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/warn.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/warn.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/warning.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/warning.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/warning.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/warning.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/waste.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/waste.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/waste.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/waste.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/water.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/water.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/water.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/water.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/we.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/we.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/we.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/we.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/weapon.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/weapon.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/weapon.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/weapon.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/west.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/west.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/west.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/west.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/whiskey.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/whiskey.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/whiskey.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/whiskey.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/white.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/white.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/white.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/white.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/wilco.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/wilco.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/wilco.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/wilco.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/will.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/will.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/will.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/will.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/with.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/with.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/with.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/with.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/without.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/without.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/without.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/without.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/woop.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/woop.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/woop.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/woop.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/xeno.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/xeno.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/xeno.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/xeno.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/yankee.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/yankee.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/yankee.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/yankee.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/yards.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/yards.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/yards.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/yards.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/year.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/year.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/year.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/year.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/yellow.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/yellow.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/yellow.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/yellow.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/yes.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/yes.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/yes.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/yes.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/you.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/you.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/you.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/you.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/your.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/your.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/your.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/your.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/yourself.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/yourself.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/yourself.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/yourself.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/zero.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/zero.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/zero.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/zero.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/zone.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/zone.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/zone.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/zone.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/zulu.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/zulu.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_hl/zulu.ogg rename to modular_nova/modules/alt_vox/sound/vox_hl/zulu.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/00_error_beep01.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/00_error_beep01.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/00_error_beep01.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/00_error_beep01.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/00_signon_beep01.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/00_signon_beep01.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/00_signon_beep01.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/00_signon_beep01.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/_comma.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/_comma.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/_comma.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/_comma.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/_period.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/_period.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/_period.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/_period.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/access.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/access.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/access.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/access.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/acknowledged.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/acknowledged.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/acknowledged.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/acknowledged.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/activate.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/activate.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/activate.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/activate.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/activated.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/activated.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/activated.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/activated.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/activity.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/activity.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/activity.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/activity.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/advanced.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/advanced.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/advanced.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/advanced.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/alert.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/alert.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/alert.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/alert.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/alien.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/alien.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/alien.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/alien.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/all.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/all.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/all.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/all.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/alpha.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/alpha.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/alpha.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/alpha.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/an.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/an.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/an.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/an.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/and.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/and.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/and.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/and.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/announcement.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/announcement.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/announcement.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/announcement.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/antenna.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/antenna.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/antenna.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/antenna.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/any.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/any.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/any.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/any.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/approach.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/approach.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/approach.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/approach.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/are.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/are.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/are.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/are.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/area.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/area.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/area.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/area.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/armed.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/armed.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/armed.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/armed.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/armory.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/armory.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/armory.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/armory.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/atomic.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/atomic.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/atomic.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/atomic.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/attention.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/attention.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/attention.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/attention.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/authorized.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/authorized.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/authorized.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/authorized.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/automatic.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/automatic.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/automatic.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/automatic.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/away.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/away.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/away.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/away.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/b.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/b.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/b.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/b.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/back.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/back.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/back.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/back.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/base.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/base.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/base.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/base.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/biohazard.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/biohazard.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/biohazard.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/biohazard.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/biological.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/biological.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/biological.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/biological.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/black.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/black.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/black.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/black.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/blast.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/blast.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/blast.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/blast.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/bloop.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/bloop.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/bloop.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/bloop.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/blue.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/blue.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/blue.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/blue.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/bravo.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/bravo.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/bravo.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/bravo.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/breach.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/breach.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/breach.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/breach.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/buzwarn.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/buzwarn.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/buzwarn.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/buzwarn.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/bypass.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/bypass.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/bypass.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/bypass.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/c1a3_05_switchover.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/c1a3_05_switchover.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/c1a3_05_switchover.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/c1a3_05_switchover.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/cable.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/cable.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/cable.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/cable.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/center.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/center.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/center.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/center.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/central.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/central.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/central.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/central.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/chamber.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/chamber.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/chamber.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/chamber.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/check.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/check.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/check.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/check.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/checkpoint.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/checkpoint.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/checkpoint.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/checkpoint.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/chemical.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/chemical.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/chemical.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/chemical.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/clear.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/clear.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/clear.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/clear.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/code.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/code.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/code.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/code.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/command.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/command.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/command.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/command.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/communications.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/communications.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/communications.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/communications.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/complex.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/complex.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/complex.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/complex.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/containment.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/containment.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/containment.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/containment.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/contamination.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/contamination.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/contamination.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/contamination.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/control.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/control.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/control.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/control.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/coolant.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/coolant.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/coolant.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/coolant.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/core.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/core.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/core.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/core.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/crew.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/crew.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/crew.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/crew.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/cross.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/cross.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/cross.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/cross.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/d.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/d.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/d.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/d.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/dadeda.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/dadeda.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/dadeda.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/dadeda.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/damage.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/damage.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/damage.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/damage.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/danger.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/danger.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/danger.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/danger.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/day.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/day.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/day.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/day.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/deactivated.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/deactivated.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/deactivated.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/deactivated.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/deeoo.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/deeoo.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/deeoo.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/deeoo.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/defense.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/defense.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/defense.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/defense.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/delta.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/delta.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/delta.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/delta.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/denied.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/denied.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/denied.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/denied.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/destroy.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/destroy.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/destroy.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/destroy.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/detected.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/detected.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/detected.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/detected.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/detonation.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/detonation.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/detonation.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/detonation.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/device.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/device.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/device.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/device.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/dimensional.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/dimensional.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/dimensional.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/dimensional.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/disengaged.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/disengaged.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/disengaged.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/disengaged.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/do.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/do.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/do.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/do.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/doop.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/doop.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/doop.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/doop.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/door.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/door.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/door.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/door.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/down.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/down.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/down.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/down.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/e.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/e.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/e.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/e.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/echo.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/echo.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/echo.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/echo.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/eight.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/eight.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/eight.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/eight.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/eighteen.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/eighteen.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/eighteen.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/eighteen.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/eighty.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/eighty.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/eighty.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/eighty.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/electric.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/electric.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/electric.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/electric.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/eleven.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/eleven.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/eleven.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/eleven.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/eliminate.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/eliminate.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/eliminate.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/eliminate.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/emergency.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/emergency.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/emergency.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/emergency.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/energy.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/energy.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/energy.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/energy.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/engage.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/engage.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/engage.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/engage.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/engaged.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/engaged.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/engaged.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/engaged.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/enter.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/enter.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/enter.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/enter.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/entry.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/entry.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/entry.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/entry.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/escape.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/escape.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/escape.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/escape.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/evacuate.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/evacuate.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/evacuate.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/evacuate.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/exchange.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/exchange.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/exchange.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/exchange.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/experimental.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/experimental.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/experimental.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/experimental.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/extreme.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/extreme.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/extreme.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/extreme.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/facility.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/facility.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/facility.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/facility.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/failed.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/failed.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/failed.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/failed.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/failure.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/failure.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/failure.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/failure.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/field.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/field.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/field.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/field.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/fifteen.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/fifteen.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/fifteen.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/fifteen.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/fifty.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/fifty.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/fifty.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/fifty.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/fire.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/fire.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/fire.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/fire.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/five.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/five.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/five.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/five.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/forbidden.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/forbidden.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/forbidden.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/forbidden.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/force.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/force.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/force.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/force.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/forms.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/forms.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/forms.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/forms.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/forty.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/forty.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/forty.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/forty.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/four.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/four.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/four.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/four.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/fourteen .ogg b/modular_nova/modules/alt_vox/sound/vox_mil/fourteen .ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/fourteen .ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/fourteen .ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/freeman.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/freeman.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/freeman.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/freeman.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/from.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/from.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/from.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/from.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/fuel.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/fuel.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/fuel.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/fuel.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/get.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/get.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/get.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/get.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/go.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/go.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/go.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/go.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/gordon.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/gordon.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/gordon.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/gordon.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/granted.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/granted.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/granted.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/granted.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/green.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/green.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/green.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/green.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/handling.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/handling.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/handling.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/handling.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/hanger.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/hanger.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/hanger.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/hanger.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/have.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/have.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/have.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/have.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/hazard.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/hazard.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/hazard.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/hazard.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/health.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/health.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/health.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/health.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/heat.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/heat.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/heat.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/heat.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/helecopter.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/helecopter.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/helecopter.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/helecopter.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/helium.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/helium.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/helium.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/helium.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/high.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/high.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/high.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/high.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/hostal.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/hostal.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/hostal.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/hostal.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/hostile.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/hostile.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/hostile.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/hostile.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/hotel.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/hotel.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/hotel.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/hotel.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/hundred.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/hundred.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/hundred.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/hundred.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/hydro.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/hydro.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/hydro.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/hydro.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/illegal.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/illegal.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/illegal.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/illegal.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/immediate.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/immediate.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/immediate.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/immediate.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/immediately.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/immediately.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/immediately.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/immediately.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/in.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/in.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/in.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/in.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/india.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/india.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/india.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/india.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/inoperative.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/inoperative.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/inoperative.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/inoperative.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/inside.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/inside.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/inside.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/inside.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/inspection.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/inspection.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/inspection.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/inspection.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/is.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/is.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/is.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/is.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/kilo01.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/kilo01.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/kilo01.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/kilo01.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/kilo02.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/kilo02.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/kilo02.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/kilo02.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/lambda.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/lambda.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/lambda.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/lambda.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/laser.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/laser.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/laser.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/laser.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/launch.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/launch.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/launch.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/launch.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/leak.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/leak.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/leak.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/leak.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/level.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/level.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/level.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/level.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/lima.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/lima.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/lima.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/lima.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/lima_alt.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/lima_alt.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/lima_alt.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/lima_alt.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/liquid.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/liquid.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/liquid.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/liquid.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/lock.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/lock.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/lock.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/lock.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/locked.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/locked.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/locked.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/locked.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/lockout.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/lockout.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/lockout.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/lockout.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/lower.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/lower.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/lower.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/lower.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/main.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/main.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/main.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/main.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/maintenance.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/maintenance.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/maintenance.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/maintenance.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/malfunction.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/malfunction.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/malfunction.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/malfunction.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/materials.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/materials.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/materials.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/materials.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/may.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/may.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/may.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/may.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/medical.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/medical.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/medical.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/medical.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/men.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/men.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/men.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/men.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/mesa.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/mesa.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/mesa.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/mesa.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/message.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/message.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/message.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/message.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/mic_mike.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/mic_mike.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/mic_mike.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/mic_mike.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/mike.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/mike.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/mike.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/mike.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/military.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/military.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/military.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/military.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/motorpool.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/motorpool.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/motorpool.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/motorpool.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/move.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/move.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/move.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/move.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/must.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/must.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/must.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/must.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/nearest.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/nearest.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/nearest.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/nearest.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/nine.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/nine.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/nine.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/nine.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/nineteen.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/nineteen.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/nineteen.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/nineteen.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/ninety.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/ninety.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/ninety.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/ninety.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/no.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/no.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/no.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/no.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/noe.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/noe.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/noe.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/noe.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/not.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/not.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/not.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/not.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/now.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/now.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/now.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/now.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/objective.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/objective.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/objective.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/objective.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/of.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/of.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/of.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/of.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/on.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/on.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/on.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/on.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/one.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/one.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/one.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/one.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/open.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/open.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/open.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/open.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/operating.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/operating.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/operating.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/operating.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/option.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/option.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/option.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/option.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/out.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/out.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/out.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/out.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/override.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/override.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/override.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/override.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/percent.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/percent.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/percent.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/percent.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/perimeter.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/perimeter.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/perimeter.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/perimeter.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/permitted.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/permitted.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/permitted.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/permitted.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/perpulsion.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/perpulsion.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/perpulsion.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/perpulsion.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/personnel.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/personnel.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/personnel.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/personnel.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/plant.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/plant.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/plant.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/plant.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/please.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/please.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/please.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/please.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/portal.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/portal.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/portal.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/portal.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/power.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/power.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/power.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/power.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/primary.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/primary.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/primary.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/primary.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/prosecute.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/prosecute.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/prosecute.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/prosecute.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/questioning.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/questioning.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/questioning.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/questioning.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/radiation.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/radiation.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/radiation.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/radiation.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/radioactive.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/radioactive.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/radioactive.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/radioactive.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/reach.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/reach.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/reach.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/reach.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/reactor.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/reactor.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/reactor.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/reactor.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/relay.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/relay.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/relay.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/relay.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/released.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/released.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/released.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/released.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/remaining.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/remaining.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/remaining.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/remaining.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/renegade.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/renegade.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/renegade.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/renegade.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/repair.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/repair.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/repair.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/repair.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/report.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/report.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/report.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/report.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/reports.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/reports.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/reports.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/reports.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/required.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/required.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/required.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/required.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/research.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/research.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/research.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/research.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/resistance.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/resistance.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/resistance.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/resistance.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/rocket.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/rocket.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/rocket.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/rocket.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/safety.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/safety.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/safety.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/safety.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/satellite.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/satellite.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/satellite.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/satellite.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/science.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/science.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/science.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/science.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/search.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/search.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/search.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/search.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/second.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/second.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/second.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/second.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/secondary.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/secondary.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/secondary.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/secondary.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/seconds.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/seconds.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/seconds.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/seconds.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/sector.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/sector.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/sector.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/sector.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/secure.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/secure.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/secure.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/secure.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/secured.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/secured.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/secured.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/secured.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/security.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/security.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/security.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/security.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/service.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/service.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/service.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/service.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/seven.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/seven.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/seven.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/seven.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/seventeen.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/seventeen.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/seventeen.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/seventeen.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/seventy.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/seventy.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/seventy.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/seventy.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/severe.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/severe.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/severe.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/severe.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/sheild.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/sheild.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/sheild.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/sheild.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/shoot.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/shoot.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/shoot.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/shoot.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/sierra.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/sierra.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/sierra.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/sierra.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/sight.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/sight.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/sight.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/sight.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/silo.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/silo.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/silo.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/silo.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/six.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/six.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/six.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/six.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/sixteen.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/sixteen.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/sixteen.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/sixteen.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/sixty.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/sixty.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/sixty.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/sixty.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/sorry.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/sorry.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/sorry.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/sorry.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/sqaud.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/sqaud.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/sqaud.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/sqaud.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/status.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/status.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/status.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/status.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/sterilization.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/sterilization.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/sterilization.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/sterilization.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/storage.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/storage.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/storage.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/storage.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/supercooled.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/supercooled.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/supercooled.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/supercooled.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/surrender.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/surrender.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/surrender.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/surrender.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/system.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/system.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/system.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/system.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/systems.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/systems.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/systems.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/systems.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/target.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/target.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/target.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/target.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/team.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/team.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/team.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/team.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/ten.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/ten.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/ten.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/ten.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/terminated.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/terminated.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/terminated.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/terminated.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/test.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/test.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/test.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/test.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/the.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/the.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/the.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/the.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/thirtteen.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/thirtteen.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/thirtteen.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/thirtteen.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/thirty.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/thirty.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/thirty.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/thirty.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/this.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/this.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/this.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/this.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/three.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/three.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/three.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/three.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/time.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/time.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/time.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/time.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/to.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/to.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/to.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/to.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/topside.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/topside.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/topside.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/topside.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/track.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/track.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/track.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/track.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/train.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/train.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/train.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/train.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/turret.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/turret.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/turret.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/turret.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/twelve.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/twelve.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/twelve.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/twelve.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/twenty.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/twenty.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/twenty.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/twenty.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/two.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/two.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/two.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/two.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/unauthorized.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/unauthorized.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/unauthorized.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/unauthorized.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/under.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/under.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/under.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/under.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/units.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/units.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/units.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/units.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/until.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/until.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/until.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/until.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/up.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/up.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/up.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/up.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/uranium.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/uranium.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/uranium.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/uranium.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/use.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/use.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/use.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/use.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/violation.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/violation.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/violation.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/violation.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/voltage.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/voltage.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/voltage.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/voltage.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/wanted.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/wanted.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/wanted.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/wanted.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/warning.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/warning.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/warning.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/warning.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/we.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/we.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/we.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/we.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/weapon.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/weapon.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/weapon.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/weapon.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/will.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/will.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/will.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/will.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/with.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/with.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/with.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/with.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/yellow.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/yellow.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/yellow.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/yellow.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/you.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/you.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/you.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/you.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/your.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/your.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/your.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/your.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/zero.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/zero.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/zero.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/zero.ogg diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/zone.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/zone.ogg similarity index 100% rename from modular_skyrat/modules/alt_vox/sound/vox_mil/zone.ogg rename to modular_nova/modules/alt_vox/sound/vox_mil/zone.ogg diff --git a/modular_skyrat/modules/alternative_job_titles/code/alt_job_titles.dm b/modular_nova/modules/alternative_job_titles/code/alt_job_titles.dm similarity index 98% rename from modular_skyrat/modules/alternative_job_titles/code/alt_job_titles.dm rename to modular_nova/modules/alternative_job_titles/code/alt_job_titles.dm index 11de552190337a..f188ae0ffaed13 100644 --- a/modular_skyrat/modules/alternative_job_titles/code/alt_job_titles.dm +++ b/modular_nova/modules/alternative_job_titles/code/alt_job_titles.dm @@ -283,9 +283,9 @@ /datum/job/nanotrasen_consultant alt_titles = list( - "Nanotrasen Consultant", - "Nanotrasen Advisor", - "Nanotrasen Diplomat", + "Symphionia Consultant", + "Symphionia Advisor", + "Symphionia Diplomat", ) /datum/job/orderly diff --git a/modular_skyrat/modules/alternative_job_titles/code/job.dm b/modular_nova/modules/alternative_job_titles/code/job.dm similarity index 100% rename from modular_skyrat/modules/alternative_job_titles/code/job.dm rename to modular_nova/modules/alternative_job_titles/code/job.dm diff --git a/modular_skyrat/modules/alternative_job_titles/readme.md b/modular_nova/modules/alternative_job_titles/readme.md similarity index 100% rename from modular_skyrat/modules/alternative_job_titles/readme.md rename to modular_nova/modules/alternative_job_titles/readme.md diff --git a/modular_skyrat/modules/ammo_workbench/code/ammo_workbench.dm b/modular_nova/modules/ammo_workbench/code/ammo_workbench.dm similarity index 99% rename from modular_skyrat/modules/ammo_workbench/code/ammo_workbench.dm rename to modular_nova/modules/ammo_workbench/code/ammo_workbench.dm index 6aef270c3def78..9eea7bd39c0a34 100644 --- a/modular_skyrat/modules/ammo_workbench/code/ammo_workbench.dm +++ b/modular_nova/modules/ammo_workbench/code/ammo_workbench.dm @@ -1,7 +1,7 @@ /obj/machinery/ammo_workbench name = "ammunitions workbench" desc = "A machine, somewhat akin to a lathe, made specifically for manufacturing ammunition. It has a slot for magazines, ammo boxes, clips... anything that holds ammo." - icon = 'modular_skyrat/modules/ammo_workbench/icons/ammo_workbench.dmi' + icon = 'modular_nova/modules/ammo_workbench/icons/ammo_workbench.dmi' icon_state = "ammobench" density = TRUE use_power = IDLE_POWER_USE @@ -31,7 +31,7 @@ var/list/casing_mat_strings = list() /// can it print ammunition flagged as harmful (e.g. most ammo)? var/allowed_harmful = FALSE - /// can it print advanced ammunition types (e.g. armor-piercing)? see modular_skyrat\modules\modular_weapons\code\modular_projectiles.dm + /// can it print advanced ammunition types (e.g. armor-piercing)? see modular_nova\modules\modular_weapons\code\modular_projectiles.dm var/allowed_advanced = FALSE /// what datadisks have been loaded. uh... honestly this doesn't really do much either var/list/loaded_datadisks = list() diff --git a/modular_skyrat/modules/ammo_workbench/code/design_disks.dm b/modular_nova/modules/ammo_workbench/code/design_disks.dm similarity index 88% rename from modular_skyrat/modules/ammo_workbench/code/design_disks.dm rename to modular_nova/modules/ammo_workbench/code/design_disks.dm index 26e6302c6da792..1b3f831c001b67 100644 --- a/modular_skyrat/modules/ammo_workbench/code/design_disks.dm +++ b/modular_nova/modules/ammo_workbench/code/design_disks.dm @@ -20,7 +20,11 @@ name = "Ammo Workbench Advanced Munitions Datadisk" id = "ammoworkbench_disk_lethal" build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT + ) build_path = /obj/item/disk/ammo_workbench/advanced - category = list(RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_SECURITY) + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_SECURITY, + ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY diff --git a/modular_skyrat/modules/ammo_workbench/icons/ammo_workbench.dmi b/modular_nova/modules/ammo_workbench/icons/ammo_workbench.dmi similarity index 100% rename from modular_skyrat/modules/ammo_workbench/icons/ammo_workbench.dmi rename to modular_nova/modules/ammo_workbench/icons/ammo_workbench.dmi diff --git a/modular_skyrat/modules/apc_arcing/apc.dm b/modular_nova/modules/apc_arcing/apc.dm similarity index 100% rename from modular_skyrat/modules/apc_arcing/apc.dm rename to modular_nova/modules/apc_arcing/apc.dm diff --git a/modular_nova/modules/armaments/code/armament_component.dm b/modular_nova/modules/armaments/code/armament_component.dm new file mode 100644 index 00000000000000..af8bff88f15a74 --- /dev/null +++ b/modular_nova/modules/armaments/code/armament_component.dm @@ -0,0 +1,264 @@ +/** + * This is the component that runs the armaments vendor. + * + * It's intended to be used with the armament vendor, or other atoms that otherwise aren't vending machines. + */ + +/datum/component/armament + /// The types of armament datums we wish to add to this component. + var/list/products + /// What access do we require to use this machine? + var/list/required_access + /// Our parent machine. + var/atom/parent_atom + /// The points card that is currently inserted into the parent. + var/obj/item/armament_points_card/inserted_card + /// Used to keep track of what categories have been used. + var/list/used_categories = list() + /// Used to keep track of what items have been purchased. + var/list/purchased_items = list() + +/datum/component/armament/Initialize(list/required_products, list/needed_access) + if(!required_products) + stack_trace("No products specified for armament") + return COMPONENT_INCOMPATIBLE + + parent_atom = parent + + products = required_products + + required_access = needed_access + + RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, PROC_REF(on_attack_hand)) + RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) + +/datum/component/armament/Destroy(force) + if(inserted_card) + inserted_card.forceMove(parent_atom.drop_location()) + inserted_card = null + return ..() + +/datum/component/armament/proc/on_attackby(atom/target, obj/item, mob/user) + SIGNAL_HANDLER + + if(!user || !item) + return + + if(!user.can_interact_with(parent_atom)) + return + + if(!istype(item, /obj/item/armament_points_card) || inserted_card) + return + + item.forceMove(parent_atom) + inserted_card = item + +/datum/component/armament/proc/on_attack_hand(datum/source, mob/living/user) + SIGNAL_HANDLER + + if(!user) + return + + if(!user.can_interact_with(parent_atom)) + return + + if(!check_access(user)) + to_chat(user, span_warning("You don't have the required access!")) + return + + INVOKE_ASYNC(src, PROC_REF(ui_interact), user) + +/datum/component/armament/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ArmamentStation") + ui.open() + +/datum/component/armament/ui_data(mob/user) + var/list/data = list() + + data["card_inserted"] = inserted_card ? TRUE : FALSE + data["card_name"] = "unknown" + data["card_points"] = 0 + if(inserted_card) + data["card_points"] = inserted_card.points + data["card_name"] = inserted_card.name + + data["armaments_list"] = list() + for(var/armament_category as anything in SSarmaments.entries) + var/list/armament_subcategories = list() + for(var/subcategory as anything in SSarmaments.entries[armament_category][CATEGORY_ENTRY]) + var/list/subcategory_items = list() + for(var/datum/armament_entry/armament_entry as anything in SSarmaments.entries[armament_category][CATEGORY_ENTRY][subcategory]) + if(products && !(armament_entry.type in products)) + continue + subcategory_items += list(list( + "ref" = REF(armament_entry), + "icon" = armament_entry.cached_base64, + "name" = armament_entry.name, + "cost" = armament_entry.cost, + "buyable_ammo" = armament_entry.magazine ? TRUE : FALSE, + "magazine_cost" = armament_entry.magazine_cost, + "quantity" = armament_entry.max_purchase, + "purchased" = purchased_items[armament_entry] ? purchased_items[armament_entry] : 0, + "description" = armament_entry.description, + "armament_category" = armament_entry.category, + "equipment_subcategory" = armament_entry.subcategory, + )) + if(!LAZYLEN(subcategory_items)) + continue + armament_subcategories += list(list( + "subcategory" = subcategory, + "items" = subcategory_items, + )) + if(!LAZYLEN(armament_subcategories)) + continue + data["armaments_list"] += list(list( + "category" = armament_category, + "category_limit" = SSarmaments.entries[armament_category][CATEGORY_LIMIT], + "category_uses" = used_categories[armament_category], + "subcategories" = armament_subcategories, + )) + + return data + +/datum/component/armament/ui_act(action, list/params) + . = ..() + if(.) + return + + switch(action) + if("equip_item") + var/check = check_item(params["armament_ref"]) + if(!check) + return + select_armament(usr, check) + if("buy_ammo") + var/check = check_item(params["armament_ref"]) + if(!check) + return + buy_ammo(usr, check, params["quantity"]) + if("eject_card") + eject_card(usr) + +/datum/component/armament/proc/buy_ammo(mob/user, datum/armament_entry/armament_entry, quantity = 1) + if(!armament_entry.magazine) + return + if(!inserted_card) + to_chat(user, span_warning("No card inserted!")) + return + var/quantity_cost = armament_entry.magazine_cost * quantity + if(!inserted_card.use_points(quantity_cost)) + to_chat(user, span_warning("Not enough points!")) + return + for(var/i in 1 to quantity) + new armament_entry.magazine(parent_atom.drop_location()) + +/datum/component/armament/proc/check_item(reference) + var/datum/armament_entry/armament_entry + for(var/category in SSarmaments.entries) + for(var/subcategory in SSarmaments.entries[category][CATEGORY_ENTRY]) + armament_entry = locate(reference) in SSarmaments.entries[category][CATEGORY_ENTRY][subcategory] + if(armament_entry) + break + if(armament_entry) + break + if(!armament_entry) + return FALSE + if(products && !(armament_entry.type in products)) + return FALSE + return armament_entry + +/datum/component/armament/proc/eject_card(mob/user) + if(!inserted_card) + to_chat(user, span_warning("No card inserted!")) + return + inserted_card.forceMove(parent_atom.drop_location()) + user.put_in_hands(inserted_card) + inserted_card = null + to_chat(user, span_notice("Card ejected!")) + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 70) + +/datum/component/armament/proc/select_armament(mob/user, datum/armament_entry/armament_entry) + if(!inserted_card) + to_chat(user, span_warning("No card inserted!")) + return + if(used_categories[armament_entry.category] >= SSarmaments.entries[armament_entry.category][CATEGORY_LIMIT]) + to_chat(user, span_warning("Category limit reached!")) + return + if(purchased_items[armament_entry] >= armament_entry.max_purchase) + to_chat(user, span_warning("Item limit reached!")) + return + if(!ishuman(user)) + return + if(!inserted_card.use_points(armament_entry.cost)) + to_chat(user, span_warning("Not enough points!")) + return + + var/mob/living/carbon/human/human_to_equip = user + + var/obj/item/new_item = new armament_entry.item_type(parent_atom.drop_location()) + + used_categories[armament_entry.category]++ + purchased_items[armament_entry]++ + + playsound(src, 'sound/machines/machine_vend.ogg', 50, TRUE, extrarange = -3) + + if(armament_entry.equip_to_human(human_to_equip, new_item)) + to_chat(user, span_notice("Equipped directly to your person.")) + playsound(src, 'sound/items/equip/toolbelt_equip.ogg', 100) + armament_entry.after_equip(parent_atom.drop_location(), new_item) + +/datum/component/armament/proc/check_access(mob/living/user) + if(!user) + return FALSE + + if(!required_access) + return TRUE + + if(issilicon(user)) + if(ispAI(user)) + return FALSE + return TRUE //AI can do whatever it wants + + if(isAdminGhostAI(user)) + return TRUE + + //If the mob has the simple_access component with the requried access, the check passes + else if(SEND_SIGNAL(user, COMSIG_MOB_TRIED_ACCESS, src) & ACCESS_ALLOWED) + return TRUE + + //If the mob is holding a valid ID, they pass the access check + else if(check_access_obj(user.get_active_held_item())) + return TRUE + + //if they are wearing a card that has access and are human, that works + else if(ishuman(user)) + var/mob/living/carbon/human/human_user = user + if(check_access_obj(human_user.wear_id)) + return TRUE + + //if they're strange and have a hacky ID card as an animal + else if(isanimal(user)) + var/mob/living/simple_animal/animal = user + if(check_access_obj(animal.access_card)) + return TRUE + +/datum/component/armament/proc/check_access_obj(obj/item/id) + return check_access_list(id ? id.GetAccess() : null) + +/datum/component/armament/proc/check_access_list(list/access_list) + if(!islist(required_access)) //something's very wrong + return TRUE + + if(!length(required_access)) + return TRUE + + if(!length(access_list) || !islist(access_list)) + return FALSE + + for(var/req in required_access) + if(!(req in access_list)) //doesn't have this access + return FALSE + + return TRUE diff --git a/modular_skyrat/modules/armaments/code/armament_entries.dm b/modular_nova/modules/armaments/code/armament_entries.dm similarity index 100% rename from modular_skyrat/modules/armaments/code/armament_entries.dm rename to modular_nova/modules/armaments/code/armament_entries.dm diff --git a/modular_skyrat/modules/armaments/code/armament_station.dm b/modular_nova/modules/armaments/code/armament_station.dm similarity index 97% rename from modular_skyrat/modules/armaments/code/armament_station.dm rename to modular_nova/modules/armaments/code/armament_station.dm index 3c24ed9bb9cab9..e97153e6b5c9ad 100644 --- a/modular_skyrat/modules/armaments/code/armament_station.dm +++ b/modular_nova/modules/armaments/code/armament_station.dm @@ -36,7 +36,7 @@ /obj/item/armament_points_card name = "armament points card" desc = "A points card that can be used at an Armaments Station or Armaments Dealer." - icon = 'modular_skyrat/modules/armaments/icons/armaments.dmi' + icon = 'modular_nova/modules/armaments/icons/armaments.dmi' icon_state = "armament_card" w_class = WEIGHT_CLASS_TINY /// How many points does this card have to use at the vendor? diff --git a/modular_skyrat/modules/armaments/icons/armaments.dmi b/modular_nova/modules/armaments/icons/armaments.dmi similarity index 100% rename from modular_skyrat/modules/armaments/icons/armaments.dmi rename to modular_nova/modules/armaments/icons/armaments.dmi diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/antfarm.dm b/modular_nova/modules/ashwalkers/code/buildings/antfarm.dm similarity index 92% rename from modular_skyrat/modules/ashwalkers/code/buildings/antfarm.dm rename to modular_nova/modules/ashwalkers/code/buildings/antfarm.dm index 898aef8c5d9994..32f0b9b51c4b51 100644 --- a/modular_skyrat/modules/ashwalkers/code/buildings/antfarm.dm +++ b/modular_nova/modules/ashwalkers/code/buildings/antfarm.dm @@ -1,7 +1,7 @@ /obj/structure/antfarm name = "ant farm" desc = "Though it may look natural, this was not made by ants." - icon = 'modular_skyrat/modules/ashwalkers/icons/structures.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/structures.dmi' icon_state = "anthill" density = TRUE anchored = TRUE @@ -28,8 +28,8 @@ /obj/structure/antfarm/Initialize(mapload) . = ..() var/turf/src_turf = get_turf(src) - if(!istype(get_turf(src), /turf/open/misc/asteroid/basalt)) - src_turf.balloon_alert_to_viewers("must be on basalt") + if(!src_turf.GetComponent(/datum/component/simple_farm)) + src_turf.balloon_alert_to_viewers("must be on farmable surface") return INITIALIZE_HINT_QDEL for(var/obj/structure/antfarm/found_farm in range(2, get_turf(src))) diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/ash_clothing_vendor.dm b/modular_nova/modules/ashwalkers/code/buildings/ash_clothing_vendor.dm similarity index 96% rename from modular_skyrat/modules/ashwalkers/code/buildings/ash_clothing_vendor.dm rename to modular_nova/modules/ashwalkers/code/buildings/ash_clothing_vendor.dm index d30ca3ae14d27d..f36aaac8cab771 100644 --- a/modular_skyrat/modules/ashwalkers/code/buildings/ash_clothing_vendor.dm +++ b/modular_nova/modules/ashwalkers/code/buildings/ash_clothing_vendor.dm @@ -2,7 +2,7 @@ name = "\improper Ashland Clothing Storage" desc = "A large container, filled with various clothes for the Ash Walkers." product_ads = "Praise the Necropolis" - icon = 'modular_skyrat/modules/ashwalkers/icons/vending.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/vending.dmi' icon_state = "ashclothvendor" icon_deny = "necrocrate" diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/ash_farming.dm b/modular_nova/modules/ashwalkers/code/buildings/ash_farming.dm similarity index 85% rename from modular_skyrat/modules/ashwalkers/code/buildings/ash_farming.dm rename to modular_nova/modules/ashwalkers/code/buildings/ash_farming.dm index 7e946053c5d6da..0ba56e7b5622e4 100644 --- a/modular_skyrat/modules/ashwalkers/code/buildings/ash_farming.dm +++ b/modular_nova/modules/ashwalkers/code/buildings/ash_farming.dm @@ -17,10 +17,11 @@ //now lets register the signals RegisterSignal(atom_parent, COMSIG_ATOM_ATTACKBY, PROC_REF(check_attack)) RegisterSignal(atom_parent, COMSIG_ATOM_EXAMINE, PROC_REF(check_examine)) + RegisterSignal(atom_parent, COMSIG_QDELETING, PROC_REF(delete_farm)) -/datum/component/simple_farm/Destroy(force, silent) +/datum/component/simple_farm/Destroy(force) //lets not hard del - UnregisterSignal(atom_parent, list(COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_EXAMINE)) + UnregisterSignal(atom_parent, list(COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_EXAMINE, COMSIG_QDELETING)) atom_parent = null return ..() @@ -42,6 +43,9 @@ locate_farm.pixel_x = pixel_shift[1] locate_farm.pixel_y = pixel_shift[2] locate_farm.layer = atom_parent.layer + 0.1 + if(ismovable(atom_parent)) + var/atom/movable/movable_parent = atom_parent + locate_farm.glide_size = movable_parent.glide_size attacking_item.forceMove(locate_farm) locate_farm.planted_seed = attacking_item locate_farm.attached_atom = atom_parent @@ -53,7 +57,18 @@ * check_examine is meant to listen for the COMSIG_ATOM_EXAMINE signal, where it will put additional information in the examine */ /datum/component/simple_farm/proc/check_examine(datum/source, mob/user, list/examine_list) - examine_list += span_notice("You are able to plant seeds here!") + examine_list += span_notice("<br>You are able to plant seeds here!") + +/** + * delete_farm is meant to be called when the parent of this component has been deleted-- thus deleting the ability to grow the simple farm + * it will delete the farm that can be found on the turf of the parent of this component + */ +/datum/component/simple_farm/proc/delete_farm() + SIGNAL_HANDLER + + var/obj/structure/simple_farm/locate_farm = locate() in get_turf(atom_parent) + if(locate_farm) + qdel(locate_farm) /obj/structure/simple_farm name = "simple farm" @@ -163,14 +178,19 @@ increase_yield(user) return - else if(istype(attacking_item, /obj/item/worm_fertilizer)) + else if(istype(attacking_item, /obj/item/stack/worm_fertilizer)) + + var/obj/item/stack/attacking_stack = attacking_item + + if(!attacking_stack.use(1)) + balloon_alert(user, "unable to use [attacking_item]") + return if(!decrease_cooldown(user, silent = TRUE) && !increase_yield(user, silent = TRUE)) balloon_alert(user, "plant is already fully upgraded") else balloon_alert(user, "plant was upgraded") - qdel(attacking_item) return @@ -266,6 +286,18 @@ plant_bag?.atom_storage?.attempt_insert(created_harvest, user, TRUE) -/turf/open/misc/asteroid/basalt/Initialize(mapload) +/turf/open/misc/asteroid/basalt/getDug() . = ..() AddComponent(/datum/component/simple_farm) + +/turf/open/misc/asteroid/basalt/refill_dug() + . = ..() + qdel(GetComponent(/datum/component/simple_farm)) + +/turf/open/misc/asteroid/snow/getDug() + . = ..() + AddComponent(/datum/component/simple_farm) + +/turf/open/misc/asteroid/snow/refill_dug() + . = ..() + qdel(GetComponent(/datum/component/simple_farm)) diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/ash_tendril.dm b/modular_nova/modules/ashwalkers/code/buildings/ash_tendril.dm similarity index 97% rename from modular_skyrat/modules/ashwalkers/code/buildings/ash_tendril.dm rename to modular_nova/modules/ashwalkers/code/buildings/ash_tendril.dm index 18d3baa3b51f0c..01056fa6c20516 100644 --- a/modular_skyrat/modules/ashwalkers/code/buildings/ash_tendril.dm +++ b/modular_nova/modules/ashwalkers/code/buildings/ash_tendril.dm @@ -90,18 +90,16 @@ if(!viewable_living.stat) continue - for(var/obj/item/sacrifice_posession in viewable_living) - if(!viewable_living.dropItemToGround(sacrifice_posession)) - qdel(sacrifice_posession) + viewable_living.unequip_everything() if(issilicon(viewable_living)) //no advantage to sacrificing borgs... viewable_living.investigate_log("has been gibbed via ashwalker sacrifice as a borg.", INVESTIGATE_DEATHS) viewable_living.gib() - continue + return if(viewable_living.mind?.has_antag_datum(/datum/antagonist/ashwalker) && (viewable_living.ckey || viewable_living.get_ghost(FALSE, TRUE))) //special interactions for dead lava lizards with ghosts attached revive_ashwalker(viewable_living) - continue + return if(ismegafauna(viewable_living)) meat_counter += MEGAFAUNA_MEAT_AMOUNT diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/fuelwell.dm b/modular_nova/modules/ashwalkers/code/buildings/fuelwell.dm similarity index 94% rename from modular_skyrat/modules/ashwalkers/code/buildings/fuelwell.dm rename to modular_nova/modules/ashwalkers/code/buildings/fuelwell.dm index 0203a636230853..862d311e16ece8 100644 --- a/modular_skyrat/modules/ashwalkers/code/buildings/fuelwell.dm +++ b/modular_nova/modules/ashwalkers/code/buildings/fuelwell.dm @@ -21,7 +21,7 @@ /obj/structure/sink/fuel_well/attackby(obj/item/O, mob/living/user, params) flick("puddle-oil-splash",src) - if(O.tool_behaviour == TOOL_SHOVEL && !(flags_1 & NODECONSTRUCT_1)) //attempt to deconstruct the puddle with a shovel + if(O.tool_behaviour == TOOL_SHOVEL && !(obj_flags & NO_DECONSTRUCTION)) //attempt to deconstruct the puddle with a shovel to_chat(user, "You fill in the fuel well with soil.") O.play_tool_sound(src) deconstruct() diff --git a/modular_nova/modules/ashwalkers/code/buildings/gutluncher_foodtrough.dm b/modular_nova/modules/ashwalkers/code/buildings/gutluncher_foodtrough.dm new file mode 100644 index 00000000000000..fec1b4c1715d67 --- /dev/null +++ b/modular_nova/modules/ashwalkers/code/buildings/gutluncher_foodtrough.dm @@ -0,0 +1,6 @@ +/obj/structure/ore_container/gutlunch_trough/attackby(obj/item/attacking_item, mob/living/carbon/human/user, list/modifiers) + if(!istype(attacking_item, /obj/item/storage/bag/ore)) + return ..() + + for(var/obj/item/stack/ore/stored_ore in attacking_item.contents) + attacking_item.atom_storage?.attempt_remove(stored_ore, src) diff --git a/modular_nova/modules/ashwalkers/code/buildings/planttank.dm b/modular_nova/modules/ashwalkers/code/buildings/planttank.dm new file mode 100644 index 00000000000000..a55e395d652c6a --- /dev/null +++ b/modular_nova/modules/ashwalkers/code/buildings/planttank.dm @@ -0,0 +1,126 @@ +/obj/structure/plant_tank + name = "plant tank" + desc = "A small little glass tank that is used to grow plants; this tank promotes the nitrogen and oxygen cycle." + icon = 'modular_nova/modules/ashwalkers/icons/structures.dmi' + icon_state = "plant_tank_e" + anchored = FALSE + density = TRUE + ///the amount of times the tank can produce-- can be increased through feeding the tank + var/operation_number = 0 + +/obj/structure/plant_tank/Initialize(mapload) + . = ..() + START_PROCESSING(SSobj, src) + +/obj/structure/plant_tank/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/structure/plant_tank/examine(mob/user) + . = ..() + . += span_notice("<br>Use food or worm fertilizer to allow nitrogen production and carbon dioxide processing!") + . += span_notice("There are [operation_number] cycles left!") + var/datum/component/simple_farm/find_farm = GetComponent(/datum/component/simple_farm) + if(!find_farm) + . += span_notice("<br>Use five sand to allow planting!") + +/obj/structure/plant_tank/attackby(obj/item/attacking_item, mob/user, params) + if(istype(attacking_item, /obj/item/food) || istype(attacking_item, /obj/item/stack/worm_fertilizer)) + var/obj/item/stack/stack_item = attacking_item + if(isstack(stack_item)) + if(!stack_item.use(1)) + return + + else + qdel(attacking_item) + + balloon_alert(user, "[attacking_item] placed inside") + operation_number += 2 + return + + if(istype(attacking_item, /obj/item/storage/bag/plants)) + balloon_alert(user, "placing food inside") + for(var/obj/item/food/selected_food in attacking_item.contents) + qdel(selected_food) + operation_number += 2 + + return + + if(istype(attacking_item, /obj/item/stack/ore/glass)) + var/datum/component/simple_farm/find_farm = GetComponent(/datum/component/simple_farm) + if(find_farm) + balloon_alert(user, "no more [attacking_item] required") + return + + var/obj/item/stack/attacking_stack = attacking_item + if(!attacking_stack.use(5)) + balloon_alert(user, "farms require five sand") + return + + AddComponent(/datum/component/simple_farm, TRUE, TRUE, list(0, 12)) + icon_state = "plant_tank_f" + return + + return ..() + +/obj/structure/plant_tank/process(seconds_per_tick) + if(operation_number <= 0) //we require "fuel" to actually produce stuff + return + + if(!locate(/obj/structure/simple_farm) in get_turf(src)) //we require a plant to process the "fuel" + return + + operation_number-- + + var/turf/open/src_turf = get_turf(src) + if(!isopenturf(src_turf) || isspaceturf(src_turf) || src_turf.planetary_atmos) //must be open turf, can't be space turf, and can't be a turf that regenerates its atmos + return + + var/datum/gas_mixture/src_mixture = src_turf.return_air() + + src_mixture.assert_gases(/datum/gas/carbon_dioxide, /datum/gas/oxygen, /datum/gas/nitrogen) + + var/proportion = src_mixture.gases[/datum/gas/carbon_dioxide][MOLES] + if(proportion) //if there is carbon dioxide in the air, lets turn it into oxygen + proportion = min(src_mixture.gases[/datum/gas/carbon_dioxide][MOLES], MOLES_CELLSTANDARD) + src_mixture.gases[/datum/gas/carbon_dioxide][MOLES] -= proportion + src_mixture.gases[/datum/gas/oxygen][MOLES] += proportion + + src_mixture.gases[/datum/gas/nitrogen][MOLES] += MOLES_CELLSTANDARD //the nitrogen cycle-- plants (and bacteria) participate in the nitrogen cycle + +/obj/structure/plant_tank/wrench_act(mob/living/user, obj/item/tool) + balloon_alert(user, "[anchored ? "un" : ""]bolting") + tool.play_tool_sound(src, 50) + if(!tool.use_tool(src, user, 2 SECONDS)) + return TRUE + + anchored = !anchored + balloon_alert(user, "[anchored ? "" : "un"]bolted") + return TRUE + +/obj/structure/plant_tank/screwdriver_act(mob/living/user, obj/item/tool) + balloon_alert(user, "deconstructing") + tool.play_tool_sound(src, 50) + if(!tool.use_tool(src, user, 2 SECONDS)) + return TRUE + + deconstruct() + return TRUE + +/obj/structure/plant_tank/deconstruct(disassembled) + var/target_turf = get_turf(src) + for(var/loop in 1 to 4) + new /obj/item/stack/sheet/glass(target_turf) + new /obj/item/stack/rods(target_turf) + new /obj/item/forging/complete/plate(target_turf) + return ..() + +/datum/crafting_recipe/plant_tank + name = "Plant Tank" + result = /obj/structure/plant_tank + reqs = list( + /obj/item/forging/complete/plate = 1, + /obj/item/stack/sheet/glass = 4, + /obj/item/stack/rods = 4, + ) + category = CAT_STRUCTURE diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/railroad.dm b/modular_nova/modules/ashwalkers/code/buildings/railroad.dm similarity index 95% rename from modular_skyrat/modules/ashwalkers/code/buildings/railroad.dm rename to modular_nova/modules/ashwalkers/code/buildings/railroad.dm index ead76061da92a7..c1751cecd57abc 100644 --- a/modular_skyrat/modules/ashwalkers/code/buildings/railroad.dm +++ b/modular_nova/modules/ashwalkers/code/buildings/railroad.dm @@ -2,7 +2,7 @@ name = "railroad tracks" singular_name = "railroad track" desc = "A primitive form of transportation. Place on any floor to start building a railroad." - icon = 'modular_skyrat/modules/ashwalkers/icons/railroad.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/railroad.dmi' icon_state = "rail_item" merge_type = /obj/item/stack/rail_track @@ -25,7 +25,7 @@ /obj/structure/railroad name = "railroad track" desc = "A primitive form of transportation. You may see some rail carts on it." - icon = 'modular_skyrat/modules/ashwalkers/icons/railroad.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/railroad.dmi' icon_state = "rail" anchored = TRUE @@ -62,7 +62,7 @@ /obj/vehicle/ridden/rail_cart name = "rail cart" desc = "A wonderful form of locomotion. It will only ride while on tracks. It does have storage" - icon = 'modular_skyrat/modules/ashwalkers/icons/railroad.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/railroad.dmi' icon_state = "railcart" material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR /// The mutable appearance used for the overlay over buckled mobs. @@ -78,7 +78,7 @@ /obj/vehicle/ridden/rail_cart/Initialize(mapload) . = ..() attach_trailer() - railoverlay = mutable_appearance(icon, "railoverlay", ABOVE_MOB_LAYER, src, GAME_PLANE_UPPER) + railoverlay = mutable_appearance(icon, "railoverlay", ABOVE_MOB_LAYER, src) AddElement(/datum/element/ridable, /datum/component/riding/vehicle/rail_cart) create_storage(max_total_storage = 21, max_slots = 21) diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/tendril_cursing.dm b/modular_nova/modules/ashwalkers/code/buildings/tendril_cursing.dm similarity index 98% rename from modular_skyrat/modules/ashwalkers/code/buildings/tendril_cursing.dm rename to modular_nova/modules/ashwalkers/code/buildings/tendril_cursing.dm index a8df699a7358e7..1022ec6930573c 100644 --- a/modular_skyrat/modules/ashwalkers/code/buildings/tendril_cursing.dm +++ b/modular_nova/modules/ashwalkers/code/buildings/tendril_cursing.dm @@ -43,7 +43,7 @@ RegisterSignal(human_target, COMSIG_MOVABLE_MOVED, PROC_REF(do_move)) RegisterSignal(human_target, COMSIG_LIVING_DEATH, PROC_REF(remove_curse)) -/datum/component/ash_cursed/Destroy(force, silent) +/datum/component/ash_cursed/Destroy(force) . = ..() REMOVE_TRAIT(human_target, TRAIT_NO_TELEPORT, REF(src)) human_target.remove_movespeed_modifier(/datum/movespeed_modifier/ash_cursed) diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/wormfarm.dm b/modular_nova/modules/ashwalkers/code/buildings/wormfarm.dm similarity index 89% rename from modular_skyrat/modules/ashwalkers/code/buildings/wormfarm.dm rename to modular_nova/modules/ashwalkers/code/buildings/wormfarm.dm index 94d8171cbc908d..404849bf195f1a 100644 --- a/modular_skyrat/modules/ashwalkers/code/buildings/wormfarm.dm +++ b/modular_nova/modules/ashwalkers/code/buildings/wormfarm.dm @@ -1,7 +1,7 @@ /obj/structure/wormfarm name = "worm farm" desc = "A wonderfully dirty barrel where worms can have a happy little life." - icon = 'modular_skyrat/modules/ashwalkers/icons/structures.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/structures.dmi' icon_state = "wormbarrel" density = TRUE anchored = FALSE @@ -19,7 +19,7 @@ /obj/structure/wormfarm/Initialize(mapload) . = ..() START_PROCESSING(SSobj, src) - COOLDOWN_START(src, worm_timer, 1 MINUTES) + COOLDOWN_START(src, worm_timer, 30 SECONDS) /obj/structure/wormfarm/Destroy() STOP_PROCESSING(SSobj, src) @@ -30,14 +30,14 @@ if(!COOLDOWN_FINISHED(src, worm_timer)) return - COOLDOWN_START(src, worm_timer, 1 MINUTES) + COOLDOWN_START(src, worm_timer, 30 SECONDS) if(current_worm >= 2 && current_worm < max_worm) current_worm++ if(current_food > 0 && current_worm > 1) current_food-- - new /obj/item/worm_fertilizer(get_turf(src)) + new /obj/item/stack/worm_fertilizer(get_turf(src)) /obj/structure/wormfarm/examine(mob/user) . = ..() @@ -89,7 +89,7 @@ in_use = TRUE balloon_alert(user, "feeding the worms") - if(!do_after(user, 5 SECONDS, src)) + if(!do_after(user, 1 SECONDS, src)) balloon_alert(user, "stopped feeding the worms") in_use = FALSE return @@ -129,9 +129,11 @@ return ..() //produced by feeding worms food and can be ground up for plant nutriment or used directly on ash farming -/obj/item/worm_fertilizer +/obj/item/stack/worm_fertilizer name = "worm fertilizer" desc = "When you fed your worms, you should have expected this." - icon = 'modular_skyrat/modules/ashwalkers/icons/misc_tools.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/misc_tools.dmi' icon_state = "fertilizer" grind_results = list(/datum/reagent/plantnutriment/eznutriment = 3, /datum/reagent/plantnutriment/left4zednutriment = 3, /datum/reagent/plantnutriment/robustharvestnutriment = 3) + singular_name = "fertilizer" + merge_type = /obj/item/stack/worm_fertilizer diff --git a/modular_nova/modules/ashwalkers/code/clothing/ash_armour.dm b/modular_nova/modules/ashwalkers/code/clothing/ash_armour.dm new file mode 100644 index 00000000000000..e1105dadd24413 --- /dev/null +++ b/modular_nova/modules/ashwalkers/code/clothing/ash_armour.dm @@ -0,0 +1,139 @@ +//ASH CLOTHING +/datum/armor/ash_headdress + melee = 15 + bullet = 25 + laser = 15 + energy = 15 + bomb = 20 + bio = 10 + +/datum/armor/clothing_under/ash_robes + melee = 15 + bullet = 25 + laser = 15 + energy = 15 + bomb = 20 + bio = 10 + +/datum/armor/ash_plates + melee = 15 + bullet = 25 + laser = 15 + energy = 15 + bomb = 20 + bio = 10 + +/datum/armor/bone_greaves + melee = 15 + bullet = 25 + laser = 15 + energy = 15 + bomb = 20 + bio = 50 + +/obj/item/clothing/head/ash_headdress + name = "ash headdress" + desc = "A headdress that shows the dominance of the walkers of ash." + icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_clothing.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_clothing_mob.dmi' + icon_state = "headdress" + supports_variations_flags = NONE + armor_type = /datum/armor/ash_headdress + + greyscale_colors = null + greyscale_config = null + greyscale_config_inhand_left = null + greyscale_config_inhand_right = null + greyscale_config_worn = null + +/datum/crafting_recipe/ash_recipe/ash_headdress + name = "Ash Headdress" + result = /obj/item/clothing/head/ash_headdress + category = CAT_CLOTHING + +/obj/item/clothing/head/ash_headdress/Initialize(mapload) + . = ..() + AddComponent(/datum/component/armor_plate, 2, /obj/item/stack/sheet/animalhide/goliath_hide, list(MELEE = 5, BULLET = 2, LASER = 2)) + +/obj/item/clothing/head/ash_headdress/winged + name = "winged ash headdress" + icon_state = "wing_headdress" + +/datum/crafting_recipe/ash_recipe/ash_headdress/winged + name = "Winged Ash Headdress" + result = /obj/item/clothing/head/ash_headdress/winged + +/obj/item/clothing/under/costume/gladiator/ash_walker/ash_robes + name = "ash robes" + desc = "A set of hand-made robes. The bones still seem to have some muscle still attached." + icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_clothing.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_clothing_mob.dmi' + icon_state = "robes" + armor_type = /datum/armor/clothing_under/ash_robes + + greyscale_colors = null + greyscale_config = null + greyscale_config_inhand_left = null + greyscale_config_inhand_right = null + greyscale_config_worn = null + +/datum/crafting_recipe/ash_recipe/ash_robes + name = "Ash Robes" + result = /obj/item/clothing/under/costume/gladiator/ash_walker/ash_robes + category = CAT_CLOTHING + +/obj/item/clothing/under/costume/gladiator/ash_walker/ash_robes/Initialize(mapload) + . = ..() + AddComponent(/datum/component/armor_plate, 2, /obj/item/stack/sheet/animalhide/goliath_hide, list(MELEE = 5, BULLET = 2, LASER = 2)) + +/obj/item/clothing/suit/ash_plates + name = "ash combat plates" + desc = "A combination of bones and hides, strung together by watcher sinew." + icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_clothing.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_clothing_mob.dmi' + icon_state = "combat_plates" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + armor_type = /datum/armor/ash_plates + + greyscale_colors = null + greyscale_config = null + greyscale_config_inhand_left = null + greyscale_config_inhand_right = null + greyscale_config_worn = null + +/datum/crafting_recipe/ash_recipe/ash_plates + name = "Ash Combat Plates" + result = /obj/item/clothing/suit/ash_plates + category = CAT_CLOTHING + +/obj/item/clothing/suit/ash_plates/Initialize(mapload) + . = ..() + AddComponent(/datum/component/armor_plate, 2, /obj/item/stack/sheet/animalhide/goliath_hide, list(MELEE = 5, BULLET = 2, LASER = 2)) + +/obj/item/clothing/suit/ash_plates/decorated + name = "decorated ash combat plates" + icon_state = "dec_breastplate" + +/datum/crafting_recipe/ash_recipe/ash_plates/decorated + name = "Decorated Ash Combat Plates" + result = /obj/item/clothing/suit/ash_plates/decorated + category = CAT_CLOTHING + +/obj/item/clothing/shoes/bone_greaves + name = "bone greaves" + desc = "For when you're expecting to step on spiky things. Offers modest protection to your feet." + icon = 'modular_nova/modules/ashwalkers/icons/shoes.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/feet.dmi' + worn_icon_digi = 'modular_nova/modules/ashwalkers/icons/feet_digi.dmi' + icon_state = "bone_greaves" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + armor_type = /datum/armor/bone_greaves + +/datum/crafting_recipe/ash_recipe/bone_greaves + name = "Bone Greaves" + result = /obj/item/clothing/shoes/bone_greaves + reqs = list( + /obj/item/stack/sheet/bone = 2, + /obj/item/stack/sheet/sinew = 1, + ) + category = CAT_CLOTHING diff --git a/modular_nova/modules/ashwalkers/code/clothing/hands.dm b/modular_nova/modules/ashwalkers/code/clothing/hands.dm new file mode 100644 index 00000000000000..79429a9b34af3a --- /dev/null +++ b/modular_nova/modules/ashwalkers/code/clothing/hands.dm @@ -0,0 +1,14 @@ +/obj/item/clothing/gloves/military/ashwalk + icon = 'modular_nova/modules/ashwalkers/icons/gloves.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/hands.dmi' + name = "ash coated bronze gloves" + desc = "Some sort of thin material with the backing of bronze plates." + icon_state = "legionlegat" + +/obj/item/clothing/gloves/military/claw + icon = 'modular_nova/modules/ashwalkers/icons/gloves.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/hands.dmi' + name = "tribal claw glove" + desc = "A gauntlet fashioned from the hand of a long-dead creature. Judging by the claws, whoever brought the beast down must have had a hard fight." + icon_state = "claw" + diff --git a/modular_nova/modules/ashwalkers/code/clothing/head.dm b/modular_nova/modules/ashwalkers/code/clothing/head.dm new file mode 100644 index 00000000000000..c2dd20d88abf12 --- /dev/null +++ b/modular_nova/modules/ashwalkers/code/clothing/head.dm @@ -0,0 +1,8 @@ +/obj/item/clothing/head/shamanash + name = "shaman skull" + desc = "The skull of a long dead animal bolted to the front of a repurposed pan." + icon = 'modular_nova/modules/ashwalkers/icons/hats.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/head.dmi' + icon_state = "shamskull" + supports_variations_flags = NONE + diff --git a/modular_nova/modules/ashwalkers/code/clothing/misc.dm b/modular_nova/modules/ashwalkers/code/clothing/misc.dm new file mode 100644 index 00000000000000..0e8ad259e1250f --- /dev/null +++ b/modular_nova/modules/ashwalkers/code/clothing/misc.dm @@ -0,0 +1,16 @@ +/obj/item/clothing/suit/ashwalkermantle + icon = 'modular_nova/modules/ashwalkers/icons/suits.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/suit.dmi' + name = "tanned hide" + desc = "The tanned hide of some brown furred creature." + icon_state = "mantle_liz" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/ashwalkermantle/cape + icon = 'modular_nova/modules/ashwalkers/icons/suits.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/suit.dmi' + name = "brown leather cape" + desc = "An ash coated cloak." + icon_state = "desertcloak" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + diff --git a/modular_nova/modules/ashwalkers/code/clothing/neck.dm b/modular_nova/modules/ashwalkers/code/clothing/neck.dm new file mode 100644 index 00000000000000..aa755a7d3d8a78 --- /dev/null +++ b/modular_nova/modules/ashwalkers/code/clothing/neck.dm @@ -0,0 +1,6 @@ +/obj/item/clothing/neck/cloak/tribalmantle + name = "ornate mantle" + desc = "An ornate mantle commonly worn by a shaman or chieftain." + icon = 'modular_nova/modules/ashwalkers/icons/cloaks.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/neck.dmi' + icon_state = "tribal-mantle" diff --git a/modular_nova/modules/ashwalkers/code/clothing/shoes.dm b/modular_nova/modules/ashwalkers/code/clothing/shoes.dm new file mode 100644 index 00000000000000..9b3abd276c9067 --- /dev/null +++ b/modular_nova/modules/ashwalkers/code/clothing/shoes.dm @@ -0,0 +1,40 @@ +/obj/item/clothing/shoes/jackboots/ashwalker + name = "ash coated bronze boots" + desc = "Boots decorated with poorly forged metal." + icon = 'modular_nova/modules/ashwalkers/icons/shoes.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/feet.dmi' + icon_state = "legionmetal" + supports_variations_flags = NONE + +/obj/item/clothing/shoes/jackboots/ashwalker/legate + icon = 'modular_nova/modules/ashwalkers/icons/shoes.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/feet.dmi' + icon_state = "legionlegate" + supports_variations_flags = NONE + +/obj/item/clothing/shoes/wraps/ashwalker + icon = 'modular_nova/modules/ashwalkers/icons/shoes.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/feet.dmi' + name = "ash coated foot wraps" + desc = "May hurt for less than normal legs." + icon_state = "rag" + supports_variations_flags = NONE + +/obj/item/clothing/shoes/wraps/ashwalker/tribalwraps + icon = 'modular_nova/modules/ashwalkers/icons/shoes.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/feet.dmi' + worn_icon_digi = 'modular_nova/modules/ashwalkers/icons/feet_digi.dmi' + name = "ornate leg wraps" + desc = "An ornate set of leg wraps commonly worn by a shaman or chieftain." + icon_state = "tribalcuffs" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + +/obj/item/clothing/shoes/wraps/ashwalker/mundanewraps + icon = 'modular_nova/modules/ashwalkers/icons/shoes.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/feet.dmi' + worn_icon_digi = 'modular_nova/modules/ashwalkers/icons/feet_digi.dmi' + name = "tribal leg wraps" + desc = "A mundane set of leg wraps often worn by tribal villagers." + icon_state = "mundanecuffs" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + diff --git a/modular_nova/modules/ashwalkers/code/clothing/under.dm b/modular_nova/modules/ashwalkers/code/clothing/under.dm new file mode 100644 index 00000000000000..c9e43fe65368c5 --- /dev/null +++ b/modular_nova/modules/ashwalkers/code/clothing/under.dm @@ -0,0 +1,70 @@ +/obj/item/clothing/under/costume/gladiator/ash_walker/greentrib + icon = 'modular_nova/modules/ashwalkers/icons/uniforms.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/uniform.dmi' + name = "ash covered leaves" + desc = "Green leaves coated with a thick layer of ash. Praise the Nercopolis." + icon_state = "tribal_m" + +/obj/item/clothing/under/costume/gladiator/ash_walker/yellow + icon = 'modular_nova/modules/ashwalkers/icons/uniforms.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/uniform.dmi' + name = "ash walker rags" + desc = "Rags from Lavaland, coated with light ash. This one seems to be for the juniors of a tribe. Praise the Nercopolis." + icon_state = "tribalrags" + +/obj/item/clothing/under/costume/gladiator/ash_walker/chiefrags + icon = 'modular_nova/modules/ashwalkers/icons/uniforms.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/uniform.dmi' + name = "old ash walker rags" + desc = "Rags from Lavaland, coated with heavy ash. This one seems to be for the elders of a tribe. Praise the Nercopolis." + icon_state = "chiefrags" + +/obj/item/clothing/under/costume/gladiator/ash_walker/shaman + icon = 'modular_nova/modules/ashwalkers/icons/uniforms.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/uniform.dmi' + name = "decorated ash walker rags" + desc = "Rags from Lavaland, drenched with ash, it has fine jewel coated bones sewn around the neck. This one seems to be for the shaman of a tribe. Praise the Nercopolis." + icon_state = "shamanrags" + +/obj/item/clothing/under/costume/gladiator/ash_walker/robe + icon = 'modular_nova/modules/ashwalkers/icons/uniforms.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/uniform.dmi' + name = "ash walker robes" + desc = "A robe from the ashlands. This one seems to be for ...Everyone, really. Praise the Nercopolis." + icon_state = "robe_liz" + +/obj/item/clothing/under/costume/gladiator/ash_walker/tribal + icon = 'modular_nova/modules/ashwalkers/icons/uniforms.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/uniform.dmi' + name = "ash walker tin" + desc = "Thin tin bolted over poorly tanned leather." + icon_state = "tribal" + +/obj/item/clothing/under/costume/gladiator/ash_walker/white + icon = 'modular_nova/modules/ashwalkers/icons/uniforms.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/uniform.dmi' + name = "white ash walker rags" + desc = "A poorly sewn dress made of white materials." + icon_state = "lizcheo" + +/obj/item/clothing/under/costume/gladiator/ash_walker/chestwrap + icon = 'modular_nova/modules/ashwalkers/icons/uniforms.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/uniform.dmi' + name = "loincloth and chestwrap" + desc = "A poorly sewn dress made of white materials." + icon_state = "chestwrap" + +/obj/item/clothing/under/costume/gladiator/ash_walker/caesar_clothes + icon = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/uniform.dmi' + name = "ash walker tunic" + desc = "A tattered red tunic of reddened fabric." + icon_state = "caesar_clothes" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + +/obj/item/clothing/under/costume/gladiator/ash_walker/legskirt_d + icon = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi' + worn_icon = 'modular_nova/modules/ashwalkers/icons/uniform.dmi' + name = "ash walker waistcloth" + desc = "A unisex waistcloth to serve as a kilt or skirt." + icon_state = "legskirt_d" diff --git a/modular_skyrat/modules/ashwalkers/code/effects/ash_ritual.dm b/modular_nova/modules/ashwalkers/code/effects/ash_ritual.dm similarity index 100% rename from modular_skyrat/modules/ashwalkers/code/effects/ash_ritual.dm rename to modular_nova/modules/ashwalkers/code/effects/ash_ritual.dm diff --git a/modular_skyrat/modules/ashwalkers/code/effects/ash_rituals.dm b/modular_nova/modules/ashwalkers/code/effects/ash_rituals.dm similarity index 98% rename from modular_skyrat/modules/ashwalkers/code/effects/ash_rituals.dm rename to modular_nova/modules/ashwalkers/code/effects/ash_rituals.dm index 7b38a565698b21..59a52c87335512 100644 --- a/modular_skyrat/modules/ashwalkers/code/effects/ash_rituals.dm +++ b/modular_nova/modules/ashwalkers/code/effects/ash_rituals.dm @@ -202,7 +202,7 @@ /mob/living/basic/mining/ice_whelp, /mob/living/basic/mining/lobstrosity, /mob/living/simple_animal/hostile/asteroid/polarbear, - /mob/living/simple_animal/hostile/asteroid/wolf, + /mob/living/basic/mining/wolf, ) new mob_type(success_rune.loc) @@ -298,7 +298,7 @@ asked_voters += poll_human - var/list/yes_voters = poll_candidates("Do you wish to banish [find_banished]?", poll_time = 10 SECONDS, group = asked_voters) + var/list/yes_voters = SSpolling.poll_candidates("Do you wish to banish [find_banished]?", poll_time = 10 SECONDS, group = asked_voters) if(length(yes_voters) < length(asked_voters)) find_banished.balloon_alert_to_viewers("banishment failed!") diff --git a/modular_skyrat/modules/ashwalkers/code/effects/ash_rune.dm b/modular_nova/modules/ashwalkers/code/effects/ash_rune.dm similarity index 95% rename from modular_skyrat/modules/ashwalkers/code/effects/ash_rune.dm rename to modular_nova/modules/ashwalkers/code/effects/ash_rune.dm index 7a2ced09dd5d29..6efb0b8edb280d 100644 --- a/modular_skyrat/modules/ashwalkers/code/effects/ash_rune.dm +++ b/modular_nova/modules/ashwalkers/code/effects/ash_rune.dm @@ -3,7 +3,7 @@ GLOBAL_LIST_EMPTY(ash_rituals) /obj/effect/ash_rune name = "ash rune" desc = "A remnant of a civilization that was once powerful enough to harness strange energy for transmutations." - icon = 'modular_skyrat/modules/ashwalkers/icons/ash_ritual.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/ash_ritual.dmi' icon_state = "rune" anchored = TRUE @@ -63,7 +63,7 @@ GLOBAL_LIST_EMPTY(ash_rituals) // this is solely for aesthetics... though the central rune will check the directions, of which this is on /obj/effect/side_rune desc = "This rune seems to have some weird vacuum to it." - icon = 'modular_skyrat/modules/ashwalkers/icons/ash_ritual.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/ash_ritual.dmi' resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF anchored = TRUE /// the central rune that this is connected to diff --git a/modular_skyrat/modules/ashwalkers/code/items/ash_centrifuge.dm b/modular_nova/modules/ashwalkers/code/items/ash_centrifuge.dm similarity index 96% rename from modular_skyrat/modules/ashwalkers/code/items/ash_centrifuge.dm rename to modular_nova/modules/ashwalkers/code/items/ash_centrifuge.dm index 26051195caef90..9d9f4a8b6eb2f6 100644 --- a/modular_skyrat/modules/ashwalkers/code/items/ash_centrifuge.dm +++ b/modular_nova/modules/ashwalkers/code/items/ash_centrifuge.dm @@ -1,7 +1,7 @@ /obj/item/reagent_containers/cup/primitive_centrifuge name = "primitive centrifuge" desc = "A small cup that allows a person to slowly spin out liquids they do not desire." - icon = 'modular_skyrat/modules/ashwalkers/icons/misc_tools.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/misc_tools.dmi' icon_state = "primitive_centrifuge" material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR diff --git a/modular_nova/modules/ashwalkers/code/items/ash_seedmesh.dm b/modular_nova/modules/ashwalkers/code/items/ash_seedmesh.dm new file mode 100644 index 00000000000000..5738c2d4716f31 --- /dev/null +++ b/modular_nova/modules/ashwalkers/code/items/ash_seedmesh.dm @@ -0,0 +1,34 @@ +/obj/item/seed_mesh + name = "seed mesh" + desc = "A little mesh that, when paired with sand, has the possibility of filtering out large seeds." + icon = 'modular_nova/modules/ashwalkers/icons/misc_tools.dmi' + icon_state = "mesh" + var/list/static/seeds_blacklist = list( + /obj/item/seeds/lavaland, + ) + +/obj/item/seed_mesh/attackby(obj/item/attacking_item, mob/user, params) + if(istype(attacking_item, /obj/item/stack/ore/glass)) + var/obj/item/stack/ore/ore_item = attacking_item + if(ore_item.points == 0) + user.balloon_alert(user, "[ore_item] is worthless!") + return + + while(ore_item.amount >= 5) + if(!do_after(user, 5 SECONDS, src)) + user.balloon_alert(user, "have to stand still!") + return + + if(!ore_item.use(5)) + user.balloon_alert(user, "unable to use five of [ore_item]!") + return + + if(prob(70)) + user.balloon_alert(user, "[ore_item] reveals nothing!") + continue + + var/spawn_seed = pick(subtypesof(/obj/item/seeds) - seeds_blacklist) + new spawn_seed(get_turf(src)) + user.balloon_alert(user, "[ore_item] revealed something!") + + return ..() diff --git a/modular_skyrat/modules/ashwalkers/code/items/ash_surgery.dm b/modular_nova/modules/ashwalkers/code/items/ash_surgery.dm similarity index 83% rename from modular_skyrat/modules/ashwalkers/code/items/ash_surgery.dm rename to modular_nova/modules/ashwalkers/code/items/ash_surgery.dm index ee5ebd017c515a..5eb40601e86602 100644 --- a/modular_skyrat/modules/ashwalkers/code/items/ash_surgery.dm +++ b/modular_nova/modules/ashwalkers/code/items/ash_surgery.dm @@ -1,7 +1,7 @@ //ASH SURGERY /obj/item/cautery/ashwalker name = "primitive cautery" - icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi' icon_state = "cautery" greyscale_colors = null @@ -16,7 +16,7 @@ /obj/item/surgicaldrill/ashwalker name = "primitive surgical drill" - icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi' icon_state = "surgical_drill" greyscale_colors = null @@ -31,7 +31,7 @@ /obj/item/scalpel/ashwalker name = "primitive scalpel" - icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi' icon_state = "scalpel" greyscale_colors = null @@ -46,7 +46,7 @@ /obj/item/circular_saw/ashwalker name = "primitive circular saw" - icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi' icon_state = "surgical_saw" greyscale_colors = null @@ -61,7 +61,7 @@ /obj/item/retractor/ashwalker name = "primitive retractor" - icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi' icon_state = "retractors" greyscale_colors = null @@ -76,7 +76,7 @@ /obj/item/hemostat/ashwalker name = "primitive hemostat" - icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi' icon_state = "hemostat" greyscale_colors = null diff --git a/modular_skyrat/modules/ashwalkers/code/items/ash_tool.dm b/modular_nova/modules/ashwalkers/code/items/ash_tool.dm similarity index 90% rename from modular_skyrat/modules/ashwalkers/code/items/ash_tool.dm rename to modular_nova/modules/ashwalkers/code/items/ash_tool.dm index e2e0a53a3475fe..d8cac913602b79 100644 --- a/modular_skyrat/modules/ashwalkers/code/items/ash_tool.dm +++ b/modular_nova/modules/ashwalkers/code/items/ash_tool.dm @@ -1,7 +1,7 @@ //ASH TOOL /obj/item/screwdriver/ashwalker name = "primitive screwdriver" - icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi' icon_state = "screwdriver" greyscale_colors = null @@ -16,7 +16,7 @@ /obj/item/wirecutters/ashwalker name = "primitive wirecutters" - icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi' icon_state = "cutters" greyscale_colors = null @@ -31,7 +31,7 @@ /obj/item/wrench/ashwalker name = "primitive wrench" - icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi' icon_state = "wrench" greyscale_colors = null @@ -46,7 +46,7 @@ /obj/item/crowbar/ashwalker name = "primitive crowbar" - icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi' icon_state = "crowbar" greyscale_colors = null @@ -75,7 +75,7 @@ /obj/item/tendril_seed name = "tendril seed" desc = "A horrible fleshy mass that pulse with a dark energy." - icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi' icon_state = "tendril_seed" /obj/item/tendril_seed/examine(mob/user) diff --git a/modular_nova/modules/ashwalkers/code/items/ash_weapon.dm b/modular_nova/modules/ashwalkers/code/items/ash_weapon.dm new file mode 100644 index 00000000000000..f7c532df00bce6 --- /dev/null +++ b/modular_nova/modules/ashwalkers/code/items/ash_weapon.dm @@ -0,0 +1,29 @@ +//ASH WEAPON +/obj/item/melee/macahuitl + name = "ash macahuitl" + desc = "A weapon that looks like it will leave really bad marks." + icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_clothing.dmi' + lefthand_file = 'modular_nova/modules/ashwalkers/icons/ashwalker_clothing_left.dmi' + righthand_file = 'modular_nova/modules/ashwalkers/icons/ashwalker_clothing_right.dmi' + icon_state = "macahuitl" + + force = 15 + wound_bonus = 15 + bare_wound_bonus = 10 + + greyscale_colors = null + greyscale_config = null + greyscale_config_inhand_left = null + greyscale_config_inhand_right = null + greyscale_config_worn = null + +/datum/crafting_recipe/ash_recipe/macahuitl + name = "Ash Macahuitl" + result = /obj/item/melee/macahuitl + reqs = list( + /obj/item/stack/sheet/bone = 2, + /obj/item/stack/sheet/sinew = 2, + /obj/item/stack/sheet/animalhide/goliath_hide = 2, + ) + always_available = FALSE + category = CAT_WEAPON_MELEE diff --git a/modular_skyrat/modules/ashwalkers/code/items/ashwalker_shaman.dm b/modular_nova/modules/ashwalkers/code/items/ashwalker_shaman.dm similarity index 100% rename from modular_skyrat/modules/ashwalkers/code/items/ashwalker_shaman.dm rename to modular_nova/modules/ashwalkers/code/items/ashwalker_shaman.dm diff --git a/modular_skyrat/modules/ashwalkers/code/species/Ashwalkers.dm b/modular_nova/modules/ashwalkers/code/species/Ashwalkers.dm similarity index 99% rename from modular_skyrat/modules/ashwalkers/code/species/Ashwalkers.dm rename to modular_nova/modules/ashwalkers/code/species/Ashwalkers.dm index 0e60d2ed7e90ce..7e41148ba1107b 100644 --- a/modular_skyrat/modules/ashwalkers/code/species/Ashwalkers.dm +++ b/modular_nova/modules/ashwalkers/code/species/Ashwalkers.dm @@ -95,7 +95,7 @@ to_chat(human_target, span_notice("Your body feels hotter...")) if(5) var/datum/action/cooldown/mob_cooldown/fire_breath/granted_action - granted_action = new() + granted_action = new(human_target) granted_action.Grant(human_target) to_chat(human_target, span_notice("Your throat feels larger...")) if(6 to INFINITY) diff --git a/modular_skyrat/modules/ashwalkers/code/species/damage_datum.dm b/modular_nova/modules/ashwalkers/code/species/damage_datum.dm similarity index 100% rename from modular_skyrat/modules/ashwalkers/code/species/damage_datum.dm rename to modular_nova/modules/ashwalkers/code/species/damage_datum.dm diff --git a/modular_nova/modules/ashwalkers/code/turfs/closed_turfs.dm b/modular_nova/modules/ashwalkers/code/turfs/closed_turfs.dm new file mode 100644 index 00000000000000..54b4953671a439 --- /dev/null +++ b/modular_nova/modules/ashwalkers/code/turfs/closed_turfs.dm @@ -0,0 +1,48 @@ +/turf/closed/attackby(obj/item/attacking_item, mob/user, params) + if(istype(attacking_item, /obj/item/flashlight/flare/torch)) + return place_torch(attacking_item, user, params) + + return ..() + +// Try to place a torch on the wall such that we can only see it from one side +/turf/closed/proc/place_torch(obj/item/flashlight/flare/torch/torch_to_place, mob/user, params) + if(user.transferItemToLoc(torch_to_place, user.drop_location(), silent = FALSE)) + var/found_adjacent_turf = get_open_turf_in_dir(src, get_dir(src, user.loc)) + var/list/modifiers = params2list(params) + + // Center the icon where the user clicked. + if(LAZYACCESS(modifiers, ICON_X) && LAZYACCESS(modifiers, ICON_Y)) + //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the wall turf) + torch_to_place.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size/3), world.icon_size/3) + torch_to_place.pixel_y = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(world.icon_size/3), world.icon_size/3) + + // Try to put the torch in the adjacent turf relative to the user. This way it's not visible from the other side of the wall + if(found_adjacent_turf) + torch_to_place.forceMove(found_adjacent_turf) + else + torch_to_place.forceMove(src) // no open turfs for some reason + return TRUE + + // The item itself is in the adjacent turf, so we need to shift the icon one tile over to put it in the wall + switch(get_dir(found_adjacent_turf, src)) + if(NORTH) + torch_to_place.pixel_y += world.icon_size + if(SOUTH) + torch_to_place.pixel_y -= world.icon_size + if(EAST) + torch_to_place.pixel_x += world.icon_size + if(NORTHEAST) + torch_to_place.pixel_y += world.icon_size + torch_to_place.pixel_x += world.icon_size + if(SOUTHEAST) + torch_to_place.pixel_y -= world.icon_size + torch_to_place.pixel_x += world.icon_size + if(WEST) + torch_to_place.pixel_x -= world.icon_size + if(NORTHWEST) + torch_to_place.pixel_y += world.icon_size + torch_to_place.pixel_x -= world.icon_size + if(SOUTHWEST) + torch_to_place.pixel_y -= world.icon_size + torch_to_place.pixel_x -= world.icon_size + return TRUE diff --git a/modular_skyrat/modules/ashwalkers/code/turfs/icemoon_tiles.dm b/modular_nova/modules/ashwalkers/code/turfs/icemoon_tiles.dm similarity index 100% rename from modular_skyrat/modules/ashwalkers/code/turfs/icemoon_tiles.dm rename to modular_nova/modules/ashwalkers/code/turfs/icemoon_tiles.dm diff --git a/modular_skyrat/modules/ashwalkers/icons/ash_ritual.dmi b/modular_nova/modules/ashwalkers/icons/ash_ritual.dmi similarity index 100% rename from modular_skyrat/modules/ashwalkers/icons/ash_ritual.dmi rename to modular_nova/modules/ashwalkers/icons/ash_ritual.dmi diff --git a/modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing.dmi b/modular_nova/modules/ashwalkers/icons/ashwalker_clothing.dmi similarity index 100% rename from modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing.dmi rename to modular_nova/modules/ashwalkers/icons/ashwalker_clothing.dmi diff --git a/modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing_left.dmi b/modular_nova/modules/ashwalkers/icons/ashwalker_clothing_left.dmi similarity index 100% rename from modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing_left.dmi rename to modular_nova/modules/ashwalkers/icons/ashwalker_clothing_left.dmi diff --git a/modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing_mob.dmi b/modular_nova/modules/ashwalkers/icons/ashwalker_clothing_mob.dmi similarity index 100% rename from modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing_mob.dmi rename to modular_nova/modules/ashwalkers/icons/ashwalker_clothing_mob.dmi diff --git a/modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing_right.dmi b/modular_nova/modules/ashwalkers/icons/ashwalker_clothing_right.dmi similarity index 100% rename from modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing_right.dmi rename to modular_nova/modules/ashwalkers/icons/ashwalker_clothing_right.dmi diff --git a/modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi b/modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi similarity index 100% rename from modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi rename to modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi diff --git a/modular_skyrat/modules/ashwalkers/icons/cloaks.dmi b/modular_nova/modules/ashwalkers/icons/cloaks.dmi similarity index 100% rename from modular_skyrat/modules/ashwalkers/icons/cloaks.dmi rename to modular_nova/modules/ashwalkers/icons/cloaks.dmi diff --git a/modular_nova/modules/ashwalkers/icons/feet.dmi b/modular_nova/modules/ashwalkers/icons/feet.dmi new file mode 100644 index 00000000000000..d743be0a0fc16b Binary files /dev/null and b/modular_nova/modules/ashwalkers/icons/feet.dmi differ diff --git a/modular_nova/modules/ashwalkers/icons/feet_digi.dmi b/modular_nova/modules/ashwalkers/icons/feet_digi.dmi new file mode 100644 index 00000000000000..39f6aae9cfff26 Binary files /dev/null and b/modular_nova/modules/ashwalkers/icons/feet_digi.dmi differ diff --git a/modular_skyrat/modules/ashwalkers/icons/gloves.dmi b/modular_nova/modules/ashwalkers/icons/gloves.dmi similarity index 100% rename from modular_skyrat/modules/ashwalkers/icons/gloves.dmi rename to modular_nova/modules/ashwalkers/icons/gloves.dmi diff --git a/modular_skyrat/modules/ashwalkers/icons/hands.dmi b/modular_nova/modules/ashwalkers/icons/hands.dmi similarity index 100% rename from modular_skyrat/modules/ashwalkers/icons/hands.dmi rename to modular_nova/modules/ashwalkers/icons/hands.dmi diff --git a/modular_skyrat/modules/ashwalkers/icons/hats.dmi b/modular_nova/modules/ashwalkers/icons/hats.dmi similarity index 100% rename from modular_skyrat/modules/ashwalkers/icons/hats.dmi rename to modular_nova/modules/ashwalkers/icons/hats.dmi diff --git a/modular_skyrat/modules/ashwalkers/icons/head.dmi b/modular_nova/modules/ashwalkers/icons/head.dmi similarity index 100% rename from modular_skyrat/modules/ashwalkers/icons/head.dmi rename to modular_nova/modules/ashwalkers/icons/head.dmi diff --git a/modular_skyrat/modules/ashwalkers/icons/misc_tools.dmi b/modular_nova/modules/ashwalkers/icons/misc_tools.dmi similarity index 100% rename from modular_skyrat/modules/ashwalkers/icons/misc_tools.dmi rename to modular_nova/modules/ashwalkers/icons/misc_tools.dmi diff --git a/modular_skyrat/modules/ashwalkers/icons/neck.dmi b/modular_nova/modules/ashwalkers/icons/neck.dmi similarity index 100% rename from modular_skyrat/modules/ashwalkers/icons/neck.dmi rename to modular_nova/modules/ashwalkers/icons/neck.dmi diff --git a/modular_skyrat/modules/ashwalkers/icons/railroad.dmi b/modular_nova/modules/ashwalkers/icons/railroad.dmi similarity index 100% rename from modular_skyrat/modules/ashwalkers/icons/railroad.dmi rename to modular_nova/modules/ashwalkers/icons/railroad.dmi diff --git a/modular_nova/modules/ashwalkers/icons/shoes.dmi b/modular_nova/modules/ashwalkers/icons/shoes.dmi new file mode 100644 index 00000000000000..e69db1f1b30345 Binary files /dev/null and b/modular_nova/modules/ashwalkers/icons/shoes.dmi differ diff --git a/modular_nova/modules/ashwalkers/icons/structures.dmi b/modular_nova/modules/ashwalkers/icons/structures.dmi new file mode 100644 index 00000000000000..0682447f8d3022 Binary files /dev/null and b/modular_nova/modules/ashwalkers/icons/structures.dmi differ diff --git a/modular_skyrat/modules/ashwalkers/icons/suit.dmi b/modular_nova/modules/ashwalkers/icons/suit.dmi similarity index 100% rename from modular_skyrat/modules/ashwalkers/icons/suit.dmi rename to modular_nova/modules/ashwalkers/icons/suit.dmi diff --git a/modular_skyrat/modules/ashwalkers/icons/suit_digi.dmi b/modular_nova/modules/ashwalkers/icons/suit_digi.dmi similarity index 100% rename from modular_skyrat/modules/ashwalkers/icons/suit_digi.dmi rename to modular_nova/modules/ashwalkers/icons/suit_digi.dmi diff --git a/modular_skyrat/modules/ashwalkers/icons/suits.dmi b/modular_nova/modules/ashwalkers/icons/suits.dmi similarity index 100% rename from modular_skyrat/modules/ashwalkers/icons/suits.dmi rename to modular_nova/modules/ashwalkers/icons/suits.dmi diff --git a/modular_skyrat/modules/ashwalkers/icons/uniform.dmi b/modular_nova/modules/ashwalkers/icons/uniform.dmi similarity index 100% rename from modular_skyrat/modules/ashwalkers/icons/uniform.dmi rename to modular_nova/modules/ashwalkers/icons/uniform.dmi diff --git a/modular_skyrat/modules/ashwalkers/icons/uniform_digi.dmi b/modular_nova/modules/ashwalkers/icons/uniform_digi.dmi similarity index 100% rename from modular_skyrat/modules/ashwalkers/icons/uniform_digi.dmi rename to modular_nova/modules/ashwalkers/icons/uniform_digi.dmi diff --git a/modular_skyrat/modules/ashwalkers/icons/uniforms.dmi b/modular_nova/modules/ashwalkers/icons/uniforms.dmi similarity index 100% rename from modular_skyrat/modules/ashwalkers/icons/uniforms.dmi rename to modular_nova/modules/ashwalkers/icons/uniforms.dmi diff --git a/modular_skyrat/modules/ashwalkers/icons/vending.dmi b/modular_nova/modules/ashwalkers/icons/vending.dmi similarity index 100% rename from modular_skyrat/modules/ashwalkers/icons/vending.dmi rename to modular_nova/modules/ashwalkers/icons/vending.dmi diff --git a/modular_skyrat/modules/ashwalkers/readme.md b/modular_nova/modules/ashwalkers/readme.md similarity index 100% rename from modular_skyrat/modules/ashwalkers/readme.md rename to modular_nova/modules/ashwalkers/readme.md diff --git a/modular_skyrat/modules/automapper/code/area_spawn_entries.dm b/modular_nova/modules/automapper/code/area_spawn_entries.dm similarity index 94% rename from modular_skyrat/modules/automapper/code/area_spawn_entries.dm rename to modular_nova/modules/automapper/code/area_spawn_entries.dm index a7987187cedf99..9cbc7d7dff21c1 100644 --- a/modular_skyrat/modules/automapper/code/area_spawn_entries.dm +++ b/modular_nova/modules/automapper/code/area_spawn_entries.dm @@ -97,11 +97,6 @@ desired_atom = /obj/effect/landmark/start/customs_agent target_areas = list(/area/station/security/checkpoint/supply, /area/station/cargo/storage) -/datum/area_spawn_over/prison_curtains - desired_atom = /obj/structure/curtain/cloth/prison - over_atoms = list(/obj/structure/window/reinforced/fulltile, /obj/machinery/door/airlock/security/glass, /obj/machinery/door/airlock/public/glass) - target_areas = list(/area/station/security/prison/safe) - /datum/area_spawn/corrections_officer_landmark desired_atom = /obj/effect/landmark/start/corrections_officer target_areas = list(/area/station/security/brig, /area/station/security/prison/) diff --git a/modular_skyrat/modules/automapper/code/area_spawn_subsystem.dm b/modular_nova/modules/automapper/code/area_spawn_subsystem.dm similarity index 97% rename from modular_skyrat/modules/automapper/code/area_spawn_subsystem.dm rename to modular_nova/modules/automapper/code/area_spawn_subsystem.dm index 8e03d68a77394c..f95548cb50c34a 100644 --- a/modular_skyrat/modules/automapper/code/area_spawn_subsystem.dm +++ b/modular_nova/modules/automapper/code/area_spawn_subsystem.dm @@ -259,7 +259,7 @@ SUBSYSTEM_DEF(area_spawn) var/desired_atom /// The amount we want to spawn var/amount_to_spawn = 1 - /// See code/__DEFINES/~skyrat_defines/automapper.dm + /// See code/__DEFINES/~nova_defines/automapper.dm var/mode = AREA_SPAWN_MODE_OPEN /// Map blacklist, this is used to determine what maps we should not spawn on. var/list/blacklisted_stations = list("Void Raptor", "Runtime Station", "MultiZ Debug", "Gateway Test", "Blueshift") @@ -279,7 +279,7 @@ SUBSYSTEM_DEF(area_spawn) for(var/area_type in target_areas) var/area/found_area = GLOB.areas_by_type[area_type] - if(!found_area) + if(isnull(found_area)) continue available_turfs = SSarea_spawn.get_turf_candidates(found_area, mode) if(LAZYLEN(available_turfs)) @@ -347,7 +347,7 @@ SUBSYSTEM_DEF(area_spawn) /obj/effect/turf_test name = "PASS" - icon = 'modular_skyrat/modules/automapper/icons/area_test.dmi' + icon = 'modular_nova/modules/automapper/icons/area_test.dmi' icon_state = "area_test" color = COLOR_BLUE anchored = TRUE @@ -361,8 +361,9 @@ SUBSYSTEM_DEF(area_spawn) set name = "Test Area Spawner" set desc = "Show area spawner placement candidates as an overlay." - for(var/obj/effect/turf_test/old_test in area) - qdel(old_test) + for(var/turf/area_turf as anything in area.get_contained_turfs()) + for(var/obj/effect/turf_test/old_test in area_turf) + qdel(old_test) SSarea_spawn.clear_cache() for(var/mode in 0 to AREA_SPAWN_MODE_COUNT - 1) diff --git a/modular_skyrat/modules/automapper/code/automap_template.dm b/modular_nova/modules/automapper/code/automap_template.dm similarity index 100% rename from modular_skyrat/modules/automapper/code/automap_template.dm rename to modular_nova/modules/automapper/code/automap_template.dm diff --git a/modular_skyrat/modules/automapper/code/automapper_subsystem.dm b/modular_nova/modules/automapper/code/automapper_subsystem.dm similarity index 97% rename from modular_skyrat/modules/automapper/code/automapper_subsystem.dm rename to modular_nova/modules/automapper/code/automapper_subsystem.dm index fdab0013512fe5..c1fae97cb5fb0b 100644 --- a/modular_skyrat/modules/automapper/code/automapper_subsystem.dm +++ b/modular_nova/modules/automapper/code/automapper_subsystem.dm @@ -5,7 +5,7 @@ * * It does two things: Loads maps from an automapper config and loads area spawn datums for simpler items. * - * The benefits? We no longer need to have _skyrat maps and can have a more unique feeling map experience as each time, it can be different. + * The benefits? We no longer need to have _nova maps and can have a more unique feeling map experience as each time, it can be different. * * Please note, this uses some black magic to interject the templates mid world load to prevent mass runtimes down the line. * @@ -17,7 +17,7 @@ SUBSYSTEM_DEF(automapper) flags = SS_NO_FIRE init_order = INIT_ORDER_AUTOMAPPER /// The path to our TOML file - var/config_file = "_maps/skyrat/automapper/automapper_config.toml" + var/config_file = "_maps/nova/automapper/automapper_config.toml" /// Our loaded TOML file var/loaded_config /// Our preloaded map templates diff --git a/modular_skyrat/modules/automapper/icons/area_test.dmi b/modular_nova/modules/automapper/icons/area_test.dmi similarity index 100% rename from modular_skyrat/modules/automapper/icons/area_test.dmi rename to modular_nova/modules/automapper/icons/area_test.dmi diff --git a/modular_skyrat/modules/automapper/readme.md b/modular_nova/modules/automapper/readme.md similarity index 100% rename from modular_skyrat/modules/automapper/readme.md rename to modular_nova/modules/automapper/readme.md diff --git a/modular_skyrat/modules/autotransfer/code/autotransfer.dm b/modular_nova/modules/autotransfer/code/autotransfer.dm similarity index 100% rename from modular_skyrat/modules/autotransfer/code/autotransfer.dm rename to modular_nova/modules/autotransfer/code/autotransfer.dm diff --git a/modular_skyrat/modules/autotransfer/code/autotransfer_config.dm b/modular_nova/modules/autotransfer/code/autotransfer_config.dm similarity index 100% rename from modular_skyrat/modules/autotransfer/code/autotransfer_config.dm rename to modular_nova/modules/autotransfer/code/autotransfer_config.dm diff --git a/modular_skyrat/modules/autotransfer/code/shuttle.dm b/modular_nova/modules/autotransfer/code/shuttle.dm similarity index 100% rename from modular_skyrat/modules/autotransfer/code/shuttle.dm rename to modular_nova/modules/autotransfer/code/shuttle.dm diff --git a/modular_skyrat/modules/autotransfer/code/transfer_vote.dm b/modular_nova/modules/autotransfer/code/transfer_vote.dm similarity index 100% rename from modular_skyrat/modules/autotransfer/code/transfer_vote.dm rename to modular_nova/modules/autotransfer/code/transfer_vote.dm diff --git a/modular_skyrat/modules/autotransfer/readme.md b/modular_nova/modules/autotransfer/readme.md similarity index 100% rename from modular_skyrat/modules/autotransfer/readme.md rename to modular_nova/modules/autotransfer/readme.md diff --git a/modular_nova/modules/awaymissions_nova/code/gateway_key.dm b/modular_nova/modules/awaymissions_nova/code/gateway_key.dm new file mode 100644 index 00000000000000..26a313f3cc0648 --- /dev/null +++ b/modular_nova/modules/awaymissions_nova/code/gateway_key.dm @@ -0,0 +1,8 @@ +/obj/item/key/gateway + name = "global recall key" + desc = "Recall to the Global Gateway." + icon = 'modular_nova/modules/awaymissions_nova/icons/abductorkey.dmi' + icon_state = "gateway_key" + resistance_flags = INDESTRUCTIBLE + + diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/abductorkey.dmi b/modular_nova/modules/awaymissions_nova/icons/abductorkey.dmi similarity index 100% rename from modular_skyrat/modules/awaymissions_skyrat/icons/abductorkey.dmi rename to modular_nova/modules/awaymissions_nova/icons/abductorkey.dmi diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/abductors.dmi b/modular_nova/modules/awaymissions_nova/icons/abductors.dmi similarity index 100% rename from modular_skyrat/modules/awaymissions_skyrat/icons/abductors.dmi rename to modular_nova/modules/awaymissions_nova/icons/abductors.dmi diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/alienblaster.dmi b/modular_nova/modules/awaymissions_nova/icons/alienblaster.dmi similarity index 100% rename from modular_skyrat/modules/awaymissions_skyrat/icons/alienblaster.dmi rename to modular_nova/modules/awaymissions_nova/icons/alienblaster.dmi diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/alienhand.dmi b/modular_nova/modules/awaymissions_nova/icons/alienhand.dmi similarity index 100% rename from modular_skyrat/modules/awaymissions_skyrat/icons/alienhand.dmi rename to modular_nova/modules/awaymissions_nova/icons/alienhand.dmi diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/alienhand2.dmi b/modular_nova/modules/awaymissions_nova/icons/alienhand2.dmi similarity index 100% rename from modular_skyrat/modules/awaymissions_skyrat/icons/alienhand2.dmi rename to modular_nova/modules/awaymissions_nova/icons/alienhand2.dmi diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/ballistic.dmi b/modular_nova/modules/awaymissions_nova/icons/ballistic.dmi similarity index 100% rename from modular_skyrat/modules/awaymissions_skyrat/icons/ballistic.dmi rename to modular_nova/modules/awaymissions_nova/icons/ballistic.dmi diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/ballistic_l.dmi b/modular_nova/modules/awaymissions_nova/icons/ballistic_l.dmi similarity index 100% rename from modular_skyrat/modules/awaymissions_skyrat/icons/ballistic_l.dmi rename to modular_nova/modules/awaymissions_nova/icons/ballistic_l.dmi diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/ballistic_r.dmi b/modular_nova/modules/awaymissions_nova/icons/ballistic_r.dmi similarity index 100% rename from modular_skyrat/modules/awaymissions_skyrat/icons/ballistic_r.dmi rename to modular_nova/modules/awaymissions_nova/icons/ballistic_r.dmi diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/courses.dmi b/modular_nova/modules/awaymissions_nova/icons/courses.dmi similarity index 100% rename from modular_skyrat/modules/awaymissions_skyrat/icons/courses.dmi rename to modular_nova/modules/awaymissions_nova/icons/courses.dmi diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/freeman.dmi b/modular_nova/modules/awaymissions_nova/icons/freeman.dmi similarity index 100% rename from modular_skyrat/modules/awaymissions_skyrat/icons/freeman.dmi rename to modular_nova/modules/awaymissions_nova/icons/freeman.dmi diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/hecucloth.dmi b/modular_nova/modules/awaymissions_nova/icons/hecucloth.dmi similarity index 100% rename from modular_skyrat/modules/awaymissions_skyrat/icons/hecucloth.dmi rename to modular_nova/modules/awaymissions_nova/icons/hecucloth.dmi diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/hecumob.dmi b/modular_nova/modules/awaymissions_nova/icons/hecumob.dmi similarity index 100% rename from modular_skyrat/modules/awaymissions_skyrat/icons/hecumob.dmi rename to modular_nova/modules/awaymissions_nova/icons/hecumob.dmi diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/hecumob_digi.dmi b/modular_nova/modules/awaymissions_nova/icons/hecumob_digi.dmi similarity index 100% rename from modular_skyrat/modules/awaymissions_skyrat/icons/hecumob_digi.dmi rename to modular_nova/modules/awaymissions_nova/icons/hecumob_digi.dmi diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/hecumob_muzzled.dmi b/modular_nova/modules/awaymissions_nova/icons/hecumob_muzzled.dmi similarity index 100% rename from modular_skyrat/modules/awaymissions_skyrat/icons/hecumob_muzzled.dmi rename to modular_nova/modules/awaymissions_nova/icons/hecumob_muzzled.dmi diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/mre_hecu.dmi b/modular_nova/modules/awaymissions_nova/icons/mre_hecu.dmi similarity index 100% rename from modular_skyrat/modules/awaymissions_skyrat/icons/mre_hecu.dmi rename to modular_nova/modules/awaymissions_nova/icons/mre_hecu.dmi diff --git a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/abductor_ai.dm b/modular_nova/modules/awaymissions_nova/mothership_astrum/abductor_ai.dm similarity index 94% rename from modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/abductor_ai.dm rename to modular_nova/modules/awaymissions_nova/mothership_astrum/abductor_ai.dm index 8d33efb03d5fae..19726907ae7cc9 100644 --- a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/abductor_ai.dm +++ b/modular_nova/modules/awaymissions_nova/mothership_astrum/abductor_ai.dm @@ -3,7 +3,7 @@ */ /datum/ai_controller/basic_controller/abductor blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) diff --git a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/area.dm b/modular_nova/modules/awaymissions_nova/mothership_astrum/area.dm similarity index 100% rename from modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/area.dm rename to modular_nova/modules/awaymissions_nova/mothership_astrum/area.dm diff --git a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/fluff.dm b/modular_nova/modules/awaymissions_nova/mothership_astrum/fluff.dm similarity index 100% rename from modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/fluff.dm rename to modular_nova/modules/awaymissions_nova/mothership_astrum/fluff.dm diff --git a/modular_nova/modules/awaymissions_nova/mothership_astrum/gear.dm b/modular_nova/modules/awaymissions_nova/mothership_astrum/gear.dm new file mode 100644 index 00000000000000..1f61f203635799 --- /dev/null +++ b/modular_nova/modules/awaymissions_nova/mothership_astrum/gear.dm @@ -0,0 +1,68 @@ +/** + * Weaponry + */ + +/obj/item/gun/energy/alien/zeta + name = "Zeta Blaster" + desc = "Having this too close to your face makes you start to taste blood, is this safe?" + icon = 'modular_nova/modules/awaymissions_nova/icons/alienblaster.dmi' + lefthand_file = 'modular_nova/modules/awaymissions_nova/icons/alienhand.dmi' + righthand_file = 'modular_nova/modules/awaymissions_nova/icons/alienhand2.dmi' + icon_state = "alienblaster" + inhand_icon_state = "alienblaster" + pin = /obj/item/firing_pin + selfcharge = TRUE + +/obj/item/gun/energy/alien/astrum + name = "alien energy pistol" + desc = "A seemingly complicated gun, that isn't so complicated after all." + ammo_type = list(/obj/item/ammo_casing/energy/laser) + pin = /obj/item/firing_pin + icon_state = "alienpistol" + inhand_icon_state = "alienpistol" + cell_type = /obj/item/stock_parts/cell/pulse/pistol + + +/** + * Armour + */ + +/obj/item/clothing/suit/armor/abductor/astrum + name = "agent vest" + desc = "You feel like you're wearing the suit wrong, and you have no idea how to operate its systems." + icon = 'icons/obj/antags/abductor.dmi' + icon_state = "vest_combat" + inhand_icon_state = "armor" + blood_overlay_type = "armor" + armor_type = /datum/armor/abductor_astrum + resistance_flags = FIRE_PROOF | ACID_PROOF + allowed = null // populated on init with armour vest defaults + +/datum/armor/abductor_astrum + melee = 40 + bullet = 50 + laser = 50 + energy = 50 + bomb = 20 + bio = 50 + fire = 90 + acid = 90 + +/obj/item/clothing/head/helmet/astrum + name = "agent headgear" + desc = "An exceptionally robust helmet. For alien standards, that is." + icon_state = "alienhelmet" + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + armor_type = /datum/armor/helmet_astrum + resistance_flags = FIRE_PROOF | ACID_PROOF + +/datum/armor/helmet_astrum + melee = 40 + bullet = 30 + laser = 30 + energy = 40 + bomb = 50 + bio = 90 + fire = 100 + acid = 100 + wound = 15 diff --git a/modular_nova/modules/awaymissions_nova/mothership_astrum/mob.dm b/modular_nova/modules/awaymissions_nova/mothership_astrum/mob.dm new file mode 100644 index 00000000000000..c22ab591c5d689 --- /dev/null +++ b/modular_nova/modules/awaymissions_nova/mothership_astrum/mob.dm @@ -0,0 +1,139 @@ +/* +* MELEE +*/ + +/mob/living/basic/abductor + name = "abductor scientist" + desc = "From the depths of space." + icon = 'modular_nova/modules/awaymissions_nova/icons/abductors.dmi' + icon_state = "abductor_scientist" + icon_living = "abductor_scientist" + mob_biotypes = MOB_ORGANIC|MOB_HUMANOID + sentience_type = SENTIENCE_HUMANOID + faction = list(ROLE_ABDUCTOR) + + maxHealth = 120 + health = 120 + unsuitable_atmos_damage = 7.5 + basic_mob_flags = DEL_ON_DEATH + + melee_damage_lower = 10 + melee_damage_upper = 10 + attack_verb_continuous = "punches" + attack_verb_simple = "punch" + attack_sound = 'sound/weapons/punch1.ogg' + + combat_mode = TRUE + status_flags = CANPUSH + speed = 2 + + ai_controller = /datum/ai_controller/basic_controller/abductor + + /// What this mob drops on death + var/list/loot = list(/obj/effect/gibspawner/generic, /obj/effect/spawner/random/astrum/sci_loot) + +/mob/living/basic/abductor/Initialize(mapload) + . = ..() + if(LAZYLEN(loot)) + loot = string_list(loot) + AddElement(/datum/element/death_drops, loot) + AddElement(/datum/element/footstep, FOOTSTEP_MOB_SHOE) + + +// More damaging variant +/mob/living/basic/abductor/melee + icon_state = "abductor_scientist_melee" + icon_living = "abductor_scientist_melee" + status_flags = null + + melee_damage_lower = 10 + melee_damage_upper = 20 + attack_verb_continuous = "slashes" + attack_verb_simple = "slash" + attack_sound = 'sound/weapons/bladeslice.ogg' + attack_vis_effect = ATTACK_EFFECT_SLASH + + +// Tankier, more damaging variant +/mob/living/basic/abductor/agent + name = "abductor agent" + icon_state = "abductor_agent" + icon_living = "abductor_agent" + + health = 160 + maxHealth = 160 + loot = list(/obj/effect/gibspawner/generic, /obj/effect/spawner/random/astrum/agent_loot) + + melee_damage_lower = 15 + melee_damage_upper = 22 + + +/* +* RANGED +*/ + +/mob/living/basic/abductor/ranged + name = "abductor scientist" + icon_state = "abductor_scientist_gun" + icon_living = "abductor_scientist_gun" + + maxHealth = 120 + health = 120 + loot = list(/obj/effect/gibspawner/generic, /obj/effect/spawner/random/astrum/sci_loot) + + ai_controller = /datum/ai_controller/basic_controller/abductor/ranged + +/mob/living/basic/abductor/ranged/Initialize(mapload) + . = ..() + AddComponent(/datum/component/ranged_attacks, projectile_sound = 'sound/weapons/laser.ogg', projectile_type = /obj/projectile/beam/laser) + + +// Tankier variant +/mob/living/basic/abductor/ranged/agent + name = "abductor combat specialist" + icon_state = "abductor_agent_combat_gun" + icon_living = "abductor_agent_combat_gun" + + maxHealth = 140 + health = 140 + loot = list(/obj/effect/gibspawner/generic, /obj/effect/spawner/random/astrum/agent_loot) + + +/** + * BOSS + */ + +/mob/living/simple_animal/hostile/megafauna/hierophant/astrum + name = "abductor captain" + desc = "The one you've come here for. Finish this." + icon = 'modular_nova/modules/awaymissions_nova/icons/abductors.dmi' + icon_state = "abductor_agent_combat" + icon_living = "abductor_agent_combat" + icon_gib = "syndicate_gib" + gps_name = "Captain's Signal" + mouse_opacity = MOUSE_OPACITY_ICON + + health = 1750 + maxHealth = 1750 + health_doll_icon = "pandora" + death_message = "falls to their knees before exploding into a ball of gore." + + attack_verb_continuous = "attacks" + attack_verb_simple = "attack" + +/mob/living/simple_animal/hostile/megafauna/hierophant/astrum/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit = FALSE) + . = ..() + if(. != BULLET_ACT_HIT) + return + + if(!hitting_projectile.is_hostile_projectile()) + return + + apply_damage(hitting_projectile.damage, hitting_projectile.damage_type) // no damage reduction + +/mob/living/simple_animal/hostile/megafauna/hierophant/astrum/death(gibbed) + spawn_gibs() + spawn_gibs() + new /obj/item/key/gateway(get_turf(src)) + new /obj/item/gun/energy/alien/zeta(get_turf(src)) + qdel(src) diff --git a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/mob_spawn.dm b/modular_nova/modules/awaymissions_nova/mothership_astrum/mob_spawn.dm similarity index 100% rename from modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/mob_spawn.dm rename to modular_nova/modules/awaymissions_nova/mothership_astrum/mob_spawn.dm diff --git a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/spawners.dm b/modular_nova/modules/awaymissions_nova/mothership_astrum/spawners.dm similarity index 100% rename from modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/spawners.dm rename to modular_nova/modules/awaymissions_nova/mothership_astrum/spawners.dm diff --git a/modular_skyrat/modules/banning/code/skyrat_bans.dm b/modular_nova/modules/banning/code/skyrat_bans.dm similarity index 100% rename from modular_skyrat/modules/banning/code/skyrat_bans.dm rename to modular_nova/modules/banning/code/skyrat_bans.dm diff --git a/modular_skyrat/modules/barricades/code/barricade.dm b/modular_nova/modules/barricades/code/barricade.dm similarity index 95% rename from modular_skyrat/modules/barricades/code/barricade.dm rename to modular_nova/modules/barricades/code/barricade.dm index 02270d9421f152..45096b3052f7c9 100644 --- a/modular_skyrat/modules/barricades/code/barricade.dm +++ b/modular_nova/modules/barricades/code/barricade.dm @@ -1,7 +1,7 @@ // Snow, wood, sandbags, metal, plasteel /obj/structure/deployable_barricade - icon = 'modular_skyrat/modules/barricades/icons/barricade.dmi' + icon = 'modular_nova/modules/barricades/icons/barricade.dmi' anchored = TRUE density = TRUE layer = BELOW_OBJ_LAYER @@ -198,9 +198,9 @@ . = ..() if(is_wired) if(!closed) - . += image('modular_skyrat/modules/barricades/icons/barricade.dmi', icon_state = "[barricade_type]_wire") + . += image('modular_nova/modules/barricades/icons/barricade.dmi', icon_state = "[barricade_type]_wire") else - . += image('modular_skyrat/modules/barricades/icons/barricade.dmi', icon_state = "[barricade_type]_closed_wire") + . += image('modular_nova/modules/barricades/icons/barricade.dmi', icon_state = "[barricade_type]_closed_wire") /obj/structure/deployable_barricade/verb/rotate() set name = "Rotate barricade counterclockwise <" @@ -286,7 +286,7 @@ /obj/structure/deployable_barricade/wooden name = "wooden barricade" desc = "A wall hammered out of wooden planks may not even look very strong, but it still provides some protection." - icon = 'modular_skyrat/modules/barricades/icons/barricade.dmi' + icon = 'modular_nova/modules/barricades/icons/barricade.dmi' icon_state = "wooden" max_integrity = 100 layer = OBJ_LAYER @@ -412,11 +412,11 @@ damage_state = 0 switch(barricade_upgrade_type) if(BARRICADE_TYPE_BOMB) - . += image('modular_skyrat/modules/barricades/icons/barricade.dmi', icon_state = "+explosive_upgrade_[damage_state]") + . += image('modular_nova/modules/barricades/icons/barricade.dmi', icon_state = "+explosive_upgrade_[damage_state]") if(BARRICADE_TYPE_MELEE) - . += image('modular_skyrat/modules/barricades/icons/barricade.dmi', icon_state = "+brute_upgrade_[damage_state]") + . += image('modular_nova/modules/barricades/icons/barricade.dmi', icon_state = "+brute_upgrade_[damage_state]") if(BARRICADE_TYPE_ACID) - . += image('modular_skyrat/modules/barricades/icons/barricade.dmi', icon_state = "+burn_upgrade_[damage_state]") + . += image('modular_nova/modules/barricades/icons/barricade.dmi', icon_state = "+burn_upgrade_[damage_state]") /obj/structure/deployable_barricade/metal/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/stack/sheet/iron)) @@ -452,7 +452,7 @@ to_chat(user, span_warning("You need at least <b>[BARRICADE_UPGRADE_REQUIRED_SHEETS]</b> to upgrade [src]!")) return FALSE - var/static/list/cade_types = list(BARRICADE_TYPE_BOMB = image(icon = 'modular_skyrat/modules/barricades/icons/barricade.dmi', icon_state = "explosive_obj"), BARRICADE_TYPE_MELEE = image(icon = 'modular_skyrat/modules/barricades/icons/barricade.dmi', icon_state = "brute_obj"), BARRICADE_TYPE_ACID = image(icon = 'modular_skyrat/modules/barricades/icons/barricade.dmi', icon_state = "burn_obj")) + var/static/list/cade_types = list(BARRICADE_TYPE_BOMB = image(icon = 'modular_nova/modules/barricades/icons/barricade.dmi', icon_state = "explosive_obj"), BARRICADE_TYPE_MELEE = image(icon = 'modular_nova/modules/barricades/icons/barricade.dmi', icon_state = "brute_obj"), BARRICADE_TYPE_ACID = image(icon = 'modular_nova/modules/barricades/icons/barricade.dmi', icon_state = "burn_obj")) var/choice = show_radial_menu(user, src, cade_types, require_near = TRUE, tooltips = TRUE) user.visible_message(span_notice("[user] starts attaching [choice] to [src]."), @@ -733,7 +733,7 @@ for(var/direction in GLOB.cardinals) for(var/obj/structure/deployable_barricade/metal/plasteel/cade in get_step(src, direction)) if(((dir & (NORTH|SOUTH) && get_dir(src, cade) & (EAST|WEST)) || (dir & (EAST|WEST) && get_dir(src, cade) & (NORTH|SOUTH))) && dir == cade.dir && cade.linked && cade.closed == closed) - . += image('modular_skyrat/modules/barricades/icons/barricade.dmi', icon_state = "[barricade_type]_[closed ? "closed" : "open"]_connection_[get_dir(src, cade)]") + . += image('modular_nova/modules/barricades/icons/barricade.dmi', icon_state = "[barricade_type]_[closed ? "closed" : "open"]_connection_[get_dir(src, cade)]") /obj/structure/deployable_barricade/metal/plasteel/ex_act(severity) switch(severity) @@ -754,7 +754,7 @@ /obj/item/quickdeploy name = "C.U.C.K.S" desc = "Compact Universal Complex Kinetic Self-expanding Barricade. Great for deploying quick fortifications." - icon = 'modular_skyrat/modules/barricades/icons/barricade.dmi' + icon = 'modular_nova/modules/barricades/icons/barricade.dmi' w_class = WEIGHT_CLASS_SMALL //While this is small, normal 50 stacks of metal is NORMAL so this is a bit on the bad space to cade ratio var/delay = 0 //Delay on deploying the thing var/atom/movable/thing_to_deploy = null @@ -818,7 +818,7 @@ icon_state = "plasteel" /obj/item/storage/barricade - icon = 'modular_skyrat/modules/barricades/icons/barricade.dmi' + icon = 'modular_nova/modules/barricades/icons/barricade.dmi' name = "C.U.C.K.S box" desc = "Contains several deployable barricades." icon_state = "box_metal" diff --git a/modular_skyrat/modules/barricades/icons/barricade.dmi b/modular_nova/modules/barricades/icons/barricade.dmi similarity index 100% rename from modular_skyrat/modules/barricades/icons/barricade.dmi rename to modular_nova/modules/barricades/icons/barricade.dmi diff --git a/modular_nova/modules/barsigns/code/barsigns.dm b/modular_nova/modules/barsigns/code/barsigns.dm new file mode 100644 index 00000000000000..87d3da1575d52a --- /dev/null +++ b/modular_nova/modules/barsigns/code/barsigns.dm @@ -0,0 +1,295 @@ +// Modularly set the correct icon file +/obj/machinery/barsign/update_icon_state() + . = ..() + // uses tg icon file + if(!istype(chosen_sign, /datum/barsign/skyrat) || icon_state == "empty") + icon = initial(icon) + return + + // uses modular icon file + if(istype(chosen_sign, /datum/barsign/skyrat/large)) + icon = SKYRAT_LARGE_BARSIGN_FILE + else + icon = SKYRAT_BARSIGN_FILE + +/datum/barsign/skyrat/topmen + name = "Top Men" + icon_state = "topmen" + neon_color = "#C2AACA" + +/datum/barsign/skyrat/spaceballgrille + name = "Spaceball Grille" + icon_state = "spaceballgrille" + neon_color = "#827973" + +/datum/barsign/skyrat/clubee + name = "Club Bee" + icon_state = "clubee" + neon_color = "#F2EEEE" + +/datum/barsign/skyrat/thesun + name = "The Sun" + icon_state = "thesun" + neon_color = "#F8F0B8" + +/datum/barsign/skyrat/limbo + name = "The Limbo" + icon_state = "limbo" + desc = "A popular haunt for lost souls. The mood lighting is killer!" + neon_color = "#777777" + +/datum/barsign/skyrat/meadbay + name = "Meadbay" + icon_state = "meadbay" + neon_color = "#EBB823" + +/datum/barsign/skyrat/cindikate + name = "Cindi Kate's" + icon_state = "cindikate" + neon_color = "#FF3403" + +/datum/barsign/skyrat/theclownshead + name = "The Clown's Head" + icon_state = "theclownshead" + desc = "Home of Headdy, the honking clown head!" + neon_color = "#FFD800" + +/datum/barsign/skyrat/theorchard + name = "The Orchard" + icon_state = "theorchard" + neon_color = "#CFFF47" + +/datum/barsign/skyrat/thesaucyclown + name = "The Saucy Clown" + icon_state = "thesaucyclown" + desc = "A known gathering site for the annual clown courtship rituals." + neon_color = "#FF66CC" + +/datum/barsign/skyrat/thedamnwall + name = "The Damn Wall" + icon_state = "thedamnwall" + desc = "When you're up against a wall, it's best to have stout friends and stout liquor right there beside you." + neon_color = "#CC3333" + +/datum/barsign/skyrat/whiskeyimplant + name = "Whiskey Implant" + icon_state = "whiskeyimplant" + neon_color = "#E9F517" + +/datum/barsign/skyrat/carpecarp + name = "Carpe Carp" + icon_state = "carpecarp" + neon_color = "#C717FE" + +/datum/barsign/skyrat/robustroadhouse + name = "Robust Roadhouse" + icon_state = "robustroadhouse" + neon_color = "#F7A804" + +/datum/barsign/skyrat/theredshirt + name = "The Redshirt" + icon_state = "theredshirt" + neon_color = "#FF92E0" + +/datum/barsign/skyrat/maltesefalconmk2 + name = "Maltese Falcon MK2" + icon_state = "maltesefalconmk2" + desc = "The Maltese Falcon mark two, now extra hard boiled." + neon_color = "#E30000" + +/datum/barsign/skyrat/thecavernmk2 + name = "The Cavern MK2" + icon_state = "thecavernmk2" + desc = "Fine drinks while listening to some fine tunes." + neon_color = "#AA9393" + +/datum/barsign/skyrat/lv426 + name = "LV-426" + icon_state = "lv426" + desc = "Drinking with fancy facemasks is clearly more important than going to medbay." + neon_color = "#00F206" + +/datum/barsign/skyrat/zocalo + name = "Zocalo" + icon_state = "zocalo" + desc = "Anteriormente ubicado en Spessmerica." + neon_color = "#E5AF1C" + +/datum/barsign/skyrat/fourtheemprah + name = "4 The Emprah" + icon_state = "4theemprah" + desc = "Enjoyed by fanatics, heretics, and brain-damaged patrons alike." + neon_color = "#E5AF1C" + +/datum/barsign/skyrat/ishimura + name = "Ishimura" + icon_state = "ishimura" + desc = "Well known for their quality brownstar and delicious crackers." + neon_color = "#FF0000" + +/datum/barsign/skyrat/tardis + name = "Tardis" + icon_state = "tardis" + desc = "This establishment has been through at least 5,343 iterations." + neon_color = "#2739AA" + +/datum/barsign/skyrat/quarks + name = "Quark's" + icon_state = "quarks" + desc = "Frequenters of this establishment are often seen wearing meson scanners; how quaint." + neon_color = "#10E500" + +/datum/barsign/skyrat/tenforward + name = "Ten Forward" + icon_state = "tenforward" + neon_color = "#E5AF1C" + +/datum/barsign/skyrat/theprancingpony + name = "The Prancing Pony" + icon_state = "theprancingpony" + desc = "Ok, we don't take to kindly to you short folk pokin' round looking for some ranger scum." + neon_color = "#FF9100" + +/datum/barsign/skyrat/vault13 + name = "Vault 13" + icon_state = "vault13" + desc = "Coincidence is intentional." + neon_color = "#FFA800" + +/datum/barsign/skyrat/thehive + name = "The Hive" + icon_state = "thehive" + neon_color = "#FFC62A" + +/datum/barsign/skyrat/cantina + name = "Chalmun's Cantina" + icon_state = "cantina" + desc = "The bar was founded on the principles of originality; they have the same music playing 24/7." + neon_color = "#0078FF" + +/datum/barsign/skyrat/milliways42 + name = "Milliways 42" + icon_state = "milliways42" + desc = "It's not really the end; it's the beginning, meaning, and answer for all your beverage needs." + neon_color = "#FF00F6" + +/datum/barsign/skyrat/timeofeve + name = "The Time of Eve" + icon_state = "thetimeofeve" + desc = "Vintage drinks from 2453!." + neon_color = "#EB52F8" + +/datum/barsign/skyrat/spaceasshole + name = "Space Asshole" + icon_state = "spaceasshole" + desc = "Open since 2125, Not much has changed since then; the engineers still release the singulo and the damn miners still are more likely to cave your face in that deliver ores." + neon_color = "#FF0000" + +/datum/barsign/skyrat/birdcage + name = "The Bird Cage" + icon_state = "birdcage" + desc = "Caw." + neon_color = "#FFD21E" + +/datum/barsign/skyrat/narsie + name = "Narsie Bistro" + icon_state = "narsiebistro" + desc = "The last pub before the World's End." + neon_color = "#FF0000" + +/datum/barsign/skyrat/fallout + name = "The Booze Bunker" + icon_state = "boozebunker" + desc = "Never duck for cover without a drink!" + neon_color = "#FCC41B" + +/datum/barsign/skyrat/brokendreams + name = "The Cafe of Broken Dreams" + icon_state = "brokendreams" + desc = "Try our new dogmeat sliders!" + neon_color = "#E8E8A5" + +/datum/barsign/skyrat/toolboxtavern + name = "Toolbox Tavern" + icon_state = "toolboxtavern" + desc = "Free lodging with every Screwdriver purchased!" + neon_color = "" + +/datum/barsign/skyrat/blueoyster + name = "The Blue Oyster" + icon_state = "blueoyster" + desc = "The totally heterosexual bar for totally heterosexual men, just come inside and see." + neon_color = "" + +/datum/barsign/skyrat/foreign + name = "Foreign Food Sign" + icon_state = "foreign" + desc = "A sign written in some dead language advertising some non-descript foreign food." + neon_color = "" + +/datum/barsign/skyrat/commie + name = "Prole's Preferred" + icon_state = "commie" + desc = "The only bar you will ever need, comrade!" + neon_color = "#E46F6F" + +/datum/barsign/skyrat/brokenheros + name = "The Bar of Broken Heros" + icon_state = "brokenheros" + desc = "Do you enjoy hurting other people?" + neon_color = "" + +/datum/barsign/skyrat/sociallubricator + name = "The Social Lubricator" + icon_state = "sociallubricator" + desc = "The perfect thing to make you like people you hate." + neon_color = "" + +/datum/barsign/skyrat/chemlab + name = "The Chem Lab" + icon_state = "chemlab" + desc = "Try our new plasma martinis!" + neon_color = "" + +/datum/barsign/skyrat/mime + name = "Moonshine Mime" + icon_state = "mime" + desc = "Silent, not stirred." + neon_color = "" + +/datum/barsign/skyrat/clown + name = "Honking Clown" + icon_state = "clown" + desc = "Bananas not included." + neon_color = "" + +/datum/barsign/skyrat/progressive + name = "A Modern and Progressive Tavern" + icon_state = "progressive" + desc = "Whatever that means." + neon_color = "#DB9B9A" + +/datum/barsign/skyrat/va11halla + name = "VA-11 HALL-A" + icon_state = "va11halla" + desc = "Not as dangerous as N1-RV Ann-A." + neon_color = "#FB3F7D" + +/datum/barsign/skyrat/squatopia + name = "Squatopia" + icon_state = "squatopia" + desc = "The crystal belonged to my father. He was murdered." + neon_color = "#CC0033" + +/datum/barsign/skyrat/bug + name = "The Hungry Bug" + icon_state = "hungrybug" + desc = "Stop by and enjoy some of the Hole's famous gyoza!" + neon_color = "#E2B001" + +// 96x96 signs + +/datum/barsign/skyrat/large/cyberslyph + name = "Cyberslyph" + icon_state = "cyberslyph" + neon_color = "#00FFFF" diff --git a/modular_nova/modules/barsigns/icons/barsigns.dmi b/modular_nova/modules/barsigns/icons/barsigns.dmi new file mode 100644 index 00000000000000..5bd7d1d9d744b3 Binary files /dev/null and b/modular_nova/modules/barsigns/icons/barsigns.dmi differ diff --git a/modular_nova/modules/barsigns/icons/barsigns96x96.dmi b/modular_nova/modules/barsigns/icons/barsigns96x96.dmi new file mode 100644 index 00000000000000..8555459396150f Binary files /dev/null and b/modular_nova/modules/barsigns/icons/barsigns96x96.dmi differ diff --git a/modular_skyrat/modules/barsigns/readme.md b/modular_nova/modules/barsigns/readme.md similarity index 100% rename from modular_skyrat/modules/barsigns/readme.md rename to modular_nova/modules/barsigns/readme.md diff --git a/modular_nova/modules/basic_mobs/code/bananaspider.dm b/modular_nova/modules/basic_mobs/code/bananaspider.dm new file mode 100644 index 00000000000000..eba6ef3e7235a9 --- /dev/null +++ b/modular_nova/modules/basic_mobs/code/bananaspider.dm @@ -0,0 +1,65 @@ +// Ported from Citadel Station + +/mob/living/basic/banana_spider + name = "banana spider" + desc = "What the fuck is this abomination?" + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' + icon_state = "bananaspider" + icon_dead = "bananaspider_peel" + health = 1 + maxHealth = 1 + speed = 2 + pass_flags = PASSTABLE | PASSGRILLE | PASSMOB + mob_biotypes = MOB_ORGANIC|MOB_BUG + mob_size = MOB_SIZE_TINY + density = TRUE + verb_say = "chitters" + verb_ask = "chitters inquisitively" + verb_exclaim = "chitters loudly" + verb_yell = "chitters loudly" + basic_mob_flags = DEL_ON_DEATH + ai_controller = /datum/ai_controller/basic_controller/cockroach/banana_spider + +/mob/living/basic/banana_spider/Initialize(mapload) + . = ..() + AddComponent(/datum/component/slippery, 40) + var/static/list/banana_drops = list(/obj/item/food/deadbanana_spider) + AddElement(/datum/element/death_drops, banana_drops) + AddElement(/datum/element/basic_body_temp_sensitive, 270, INFINITY) + AddComponent(/datum/component/squashable, squash_chance = 50, squash_damage = 1) + +/datum/ai_controller/basic_controller/cockroach/banana_spider + idle_behavior = /datum/idle_behavior/idle_random_walk/banana_spider + +/datum/idle_behavior/idle_random_walk/banana_spider + walk_chance = 10 + +/obj/item/food/deadbanana_spider + name = "dead banana spider" + desc = "Thank god it's gone...but it does look slippery." + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' + icon_state = "bananaspider_peel" + food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 2) + foodtypes = GORE | MEAT | RAW + grind_results = list(/datum/reagent/blood = 20, /datum/reagent/consumable/liquidgibs = 5) + juice_typepath = /datum/reagent/consumable/banana + + +/obj/item/food/deadbanana_spider/Initialize(mapload) + . = ..() + AddComponent(/datum/component/slippery, 20) + +/mob/living/basic/spider/giant/badnana_spider + name = "badnana spider" + desc = "WHY WOULD GOD ALLOW THIS?!" + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' + icon_state = "badnanaspider" // created by Coldstorm on the Skyrat Discord + icon_living = "badnanaspider" + icon_dead = "badnanaspider_d" + maxHealth = 40 + health = 40 + melee_damage_lower = 5 + melee_damage_upper = 5 + speed = -0.5 + faction = list(FACTION_SPIDER) + diff --git a/modular_skyrat/modules/basic_mobs/code/chinchilla.dm b/modular_nova/modules/basic_mobs/code/chinchilla.dm similarity index 93% rename from modular_skyrat/modules/basic_mobs/code/chinchilla.dm rename to modular_nova/modules/basic_mobs/code/chinchilla.dm index c52fd3cb1dddd9..2a58cbc8c31f46 100644 --- a/modular_skyrat/modules/basic_mobs/code/chinchilla.dm +++ b/modular_nova/modules/basic_mobs/code/chinchilla.dm @@ -2,9 +2,9 @@ name = "chinchilla" desc = "They're like a mouse, but Australian." - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' - held_lh = 'modular_skyrat/master_files/icons/mob/inhands/pets_held_lh.dmi' - held_rh = 'modular_skyrat/master_files/icons/mob/inhands/pets_held_rh.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' + held_lh = 'modular_nova/master_files/icons/mob/inhands/pets_held_lh.dmi' + held_rh = 'modular_nova/master_files/icons/mob/inhands/pets_held_rh.dmi' icon_state = "chinchilla_white" icon_living = "chinchilla_white" icon_dead = "chinchilla_white_dead" diff --git a/modular_skyrat/modules/basic_mobs/code/kiwi.dm b/modular_nova/modules/basic_mobs/code/kiwi.dm similarity index 95% rename from modular_skyrat/modules/basic_mobs/code/kiwi.dm rename to modular_nova/modules/basic_mobs/code/kiwi.dm index e7921514117a70..20cdfefccb78b1 100644 --- a/modular_skyrat/modules/basic_mobs/code/kiwi.dm +++ b/modular_nova/modules/basic_mobs/code/kiwi.dm @@ -1,7 +1,7 @@ /mob/living/basic/kiwi name = "kiwi" desc = "It's a kiwi!" - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' + icon = 'modular_nova/master_files/icons/mob/newmobs.dmi' icon_state = "kiwi" icon_living = "kiwi" icon_dead = "kiwi_dead" diff --git a/modular_skyrat/modules/better_vox/code/vox_bodycolor.dm b/modular_nova/modules/better_vox/code/vox_bodycolor.dm similarity index 100% rename from modular_skyrat/modules/better_vox/code/vox_bodycolor.dm rename to modular_nova/modules/better_vox/code/vox_bodycolor.dm diff --git a/modular_nova/modules/better_vox/code/vox_bodyparts.dm b/modular_nova/modules/better_vox/code/vox_bodyparts.dm new file mode 100644 index 00000000000000..543443dd087c7a --- /dev/null +++ b/modular_nova/modules/better_vox/code/vox_bodyparts.dm @@ -0,0 +1,57 @@ +// voxs! +/obj/item/bodypart/head/mutant/vox_primalis + icon_static = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' + icon_greyscale = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' + icon = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' + icon_state = "vox_primalis_head" + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM | BODYTYPE_SNOUTED + is_dimorphic = FALSE + should_draw_greyscale = FALSE + limb_id = SPECIES_VOX_PRIMALIS + +/obj/item/bodypart/chest/mutant/vox_primalis + icon_static = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' + icon_greyscale = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' + icon = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' + icon_state = "vox_primalis_chest" + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM + is_dimorphic = FALSE + should_draw_greyscale = FALSE + limb_id = SPECIES_VOX_PRIMALIS + +/obj/item/bodypart/arm/left/mutant/vox_primalis + icon_static = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' + icon_greyscale = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' + icon = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' + icon_state = "vox_primalis_l_arm" + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM + should_draw_greyscale = FALSE + limb_id = SPECIES_VOX_PRIMALIS + +/obj/item/bodypart/arm/right/mutant/vox_primalis + icon_static = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' + icon_greyscale = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' + icon = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' + icon_state = "vox_primalis_r_arm" + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM + should_draw_greyscale = FALSE + limb_id = SPECIES_VOX_PRIMALIS + +/obj/item/bodypart/leg/left/mutant/vox_primalis + icon_static = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' + icon_greyscale = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' + icon = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' + icon_state = "vox_primalis_l_leg" + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM + should_draw_greyscale = FALSE + limb_id = SPECIES_VOX_PRIMALIS + +/obj/item/bodypart/leg/right/mutant/vox_primalis + icon_static = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' + icon_greyscale = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' + icon = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' + icon_state = "vox_primalis_r_leg" + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM + should_draw_greyscale = FALSE + limb_id = SPECIES_VOX_PRIMALIS + diff --git a/modular_skyrat/modules/better_vox/code/vox_clothing.dm b/modular_nova/modules/better_vox/code/vox_clothing.dm similarity index 100% rename from modular_skyrat/modules/better_vox/code/vox_clothing.dm rename to modular_nova/modules/better_vox/code/vox_clothing.dm diff --git a/modular_skyrat/modules/better_vox/code/vox_species.dm b/modular_nova/modules/better_vox/code/vox_species.dm similarity index 97% rename from modular_skyrat/modules/better_vox/code/vox_species.dm rename to modular_nova/modules/better_vox/code/vox_species.dm index 8297588001cc44..1e3be841bb4d83 100644 --- a/modular_skyrat/modules/better_vox/code/vox_species.dm +++ b/modular_nova/modules/better_vox/code/vox_species.dm @@ -1,14 +1,13 @@ /datum/species/vox_primalis name = "Vox Primalis" id = SPECIES_VOX_PRIMALIS - eyes_icon = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_eyes.dmi' + eyes_icon = 'modular_nova/modules/better_vox/icons/bodyparts/vox_eyes.dmi' can_augment = FALSE body_size_restricted = TRUE digitigrade_customization = DIGITIGRADE_NEVER // We have our own unique sprites! inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, - TRAIT_CAN_USE_FLIGHT_POTION, TRAIT_LITERATE, TRAIT_MUTANT_COLORS, ) @@ -18,9 +17,6 @@ breathid = "n2" mutant_bodyparts = list() mutanttongue = /obj/item/organ/internal/tongue/vox - default_mutant_bodyparts = list( - "tail" = "Vox Primalis Tail", - ) payday_modifier = 1.0 outfit_important_for_life = /datum/outfit/vox species_language_holder = /datum/language_holder/vox @@ -51,6 +47,10 @@ LOADOUT_ITEM_EARS = VOX_PRIMALIS_EARS_ICON, ) +/datum/species/vox_primalis/get_default_mutant_bodyparts() + return list( + "tail" = list("Vox Primalis Tail", FALSE), + ) /datum/species/vox_primalis/pre_equip_species_outfit(datum/job/job, mob/living/carbon/human/equipping, visuals_only) . = ..() diff --git a/modular_skyrat/modules/better_vox/code/vox_sprite_accessories.dm b/modular_nova/modules/better_vox/code/vox_sprite_accessories.dm similarity index 91% rename from modular_skyrat/modules/better_vox/code/vox_sprite_accessories.dm rename to modular_nova/modules/better_vox/code/vox_sprite_accessories.dm index cedb4bc9afbec0..b9f74f23e6fa33 100644 --- a/modular_skyrat/modules/better_vox/code/vox_sprite_accessories.dm +++ b/modular_nova/modules/better_vox/code/vox_sprite_accessories.dm @@ -1,6 +1,6 @@ //The tail /datum/sprite_accessory/tails/vox_primalis - icon = 'modular_skyrat/modules/better_vox/icons/accessories/vox_tail.dmi' + icon = 'modular_nova/modules/better_vox/icons/accessories/vox_tail.dmi' name = "Vox Primalis Tail" icon_state = "vox" color_src = 0 @@ -25,7 +25,7 @@ // HAIR /datum/sprite_accessory/hair/vox_primalis - icon = 'modular_skyrat/modules/better_vox/icons/accessories/vox_hair.dmi' + icon = 'modular_nova/modules/better_vox/icons/accessories/vox_hair.dmi' recommended_species = list(SPECIES_VOX_PRIMALIS) name = "Vox Primalis Shortquills" icon_state = "vox_shortquills_s" @@ -80,7 +80,7 @@ // MARKINGS /datum/body_marking/vox_primalis - icon = 'modular_skyrat/modules/better_vox/icons/accessories/vox_bodymarkings.dmi' + icon = 'modular_nova/modules/better_vox/icons/accessories/vox_bodymarkings.dmi' default_color = "#64e8ff" recommended_species = list(SPECIES_VOX_PRIMALIS) affected_bodyparts = CHEST @@ -116,7 +116,7 @@ // THE BEAK /datum/sprite_accessory/snouts/vox_primalis_beak - icon = 'modular_skyrat/modules/better_vox/icons/accessories/vox_snout.dmi' + icon = 'modular_nova/modules/better_vox/icons/accessories/vox_snout.dmi' name = "Vox Primalis Beak" icon_state = "vox" color_src = 0 diff --git a/modular_skyrat/modules/better_vox/icons/accessories/vox_bodymarkings.dmi b/modular_nova/modules/better_vox/icons/accessories/vox_bodymarkings.dmi similarity index 100% rename from modular_skyrat/modules/better_vox/icons/accessories/vox_bodymarkings.dmi rename to modular_nova/modules/better_vox/icons/accessories/vox_bodymarkings.dmi diff --git a/modular_skyrat/modules/better_vox/icons/accessories/vox_hair.dmi b/modular_nova/modules/better_vox/icons/accessories/vox_hair.dmi similarity index 100% rename from modular_skyrat/modules/better_vox/icons/accessories/vox_hair.dmi rename to modular_nova/modules/better_vox/icons/accessories/vox_hair.dmi diff --git a/modular_skyrat/modules/better_vox/icons/accessories/vox_snout.dmi b/modular_nova/modules/better_vox/icons/accessories/vox_snout.dmi similarity index 100% rename from modular_skyrat/modules/better_vox/icons/accessories/vox_snout.dmi rename to modular_nova/modules/better_vox/icons/accessories/vox_snout.dmi diff --git a/modular_skyrat/modules/better_vox/icons/accessories/vox_tail.dmi b/modular_nova/modules/better_vox/icons/accessories/vox_tail.dmi similarity index 100% rename from modular_skyrat/modules/better_vox/icons/accessories/vox_tail.dmi rename to modular_nova/modules/better_vox/icons/accessories/vox_tail.dmi diff --git a/modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi b/modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi similarity index 100% rename from modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi rename to modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi diff --git a/modular_skyrat/modules/better_vox/icons/bodyparts/vox_eyes.dmi b/modular_nova/modules/better_vox/icons/bodyparts/vox_eyes.dmi similarity index 100% rename from modular_skyrat/modules/better_vox/icons/bodyparts/vox_eyes.dmi rename to modular_nova/modules/better_vox/icons/bodyparts/vox_eyes.dmi diff --git a/modular_skyrat/modules/better_vox/icons/bodyparts/vox_yellow.dmi b/modular_nova/modules/better_vox/icons/bodyparts/vox_yellow.dmi similarity index 100% rename from modular_skyrat/modules/better_vox/icons/bodyparts/vox_yellow.dmi rename to modular_nova/modules/better_vox/icons/bodyparts/vox_yellow.dmi diff --git a/modular_nova/modules/better_vox/icons/clothing/back.dmi b/modular_nova/modules/better_vox/icons/clothing/back.dmi new file mode 100644 index 00000000000000..42342b96804077 Binary files /dev/null and b/modular_nova/modules/better_vox/icons/clothing/back.dmi differ diff --git a/modular_nova/modules/better_vox/icons/clothing/belt.dmi b/modular_nova/modules/better_vox/icons/clothing/belt.dmi new file mode 100644 index 00000000000000..96e88beb2a8d42 Binary files /dev/null and b/modular_nova/modules/better_vox/icons/clothing/belt.dmi differ diff --git a/modular_skyrat/modules/better_vox/icons/clothing/color_gags_vox.dmi b/modular_nova/modules/better_vox/icons/clothing/color_gags_vox.dmi similarity index 100% rename from modular_skyrat/modules/better_vox/icons/clothing/color_gags_vox.dmi rename to modular_nova/modules/better_vox/icons/clothing/color_gags_vox.dmi diff --git a/modular_skyrat/modules/better_vox/icons/clothing/ears.dmi b/modular_nova/modules/better_vox/icons/clothing/ears.dmi similarity index 100% rename from modular_skyrat/modules/better_vox/icons/clothing/ears.dmi rename to modular_nova/modules/better_vox/icons/clothing/ears.dmi diff --git a/modular_nova/modules/better_vox/icons/clothing/eyes.dmi b/modular_nova/modules/better_vox/icons/clothing/eyes.dmi new file mode 100644 index 00000000000000..26b37734495f0c Binary files /dev/null and b/modular_nova/modules/better_vox/icons/clothing/eyes.dmi differ diff --git a/modular_skyrat/modules/better_vox/icons/clothing/feet.dmi b/modular_nova/modules/better_vox/icons/clothing/feet.dmi similarity index 100% rename from modular_skyrat/modules/better_vox/icons/clothing/feet.dmi rename to modular_nova/modules/better_vox/icons/clothing/feet.dmi diff --git a/modular_skyrat/modules/better_vox/icons/clothing/feet_64.dmi b/modular_nova/modules/better_vox/icons/clothing/feet_64.dmi similarity index 100% rename from modular_skyrat/modules/better_vox/icons/clothing/feet_64.dmi rename to modular_nova/modules/better_vox/icons/clothing/feet_64.dmi diff --git a/modular_skyrat/modules/better_vox/icons/clothing/hands.dmi b/modular_nova/modules/better_vox/icons/clothing/hands.dmi similarity index 82% rename from modular_skyrat/modules/better_vox/icons/clothing/hands.dmi rename to modular_nova/modules/better_vox/icons/clothing/hands.dmi index 6422ead97f5b80..469c38786d84ce 100644 Binary files a/modular_skyrat/modules/better_vox/icons/clothing/hands.dmi and b/modular_nova/modules/better_vox/icons/clothing/hands.dmi differ diff --git a/modular_nova/modules/better_vox/icons/clothing/head.dmi b/modular_nova/modules/better_vox/icons/clothing/head.dmi new file mode 100644 index 00000000000000..80359e0b64a73a Binary files /dev/null and b/modular_nova/modules/better_vox/icons/clothing/head.dmi differ diff --git a/modular_nova/modules/better_vox/icons/clothing/helmet.dmi b/modular_nova/modules/better_vox/icons/clothing/helmet.dmi new file mode 100644 index 00000000000000..91bf16af315b1a Binary files /dev/null and b/modular_nova/modules/better_vox/icons/clothing/helmet.dmi differ diff --git a/modular_nova/modules/better_vox/icons/clothing/mask.dmi b/modular_nova/modules/better_vox/icons/clothing/mask.dmi new file mode 100644 index 00000000000000..dbabde45004336 Binary files /dev/null and b/modular_nova/modules/better_vox/icons/clothing/mask.dmi differ diff --git a/modular_nova/modules/better_vox/icons/clothing/mod.dmi b/modular_nova/modules/better_vox/icons/clothing/mod.dmi new file mode 100644 index 00000000000000..cac11dd1d3ecb9 Binary files /dev/null and b/modular_nova/modules/better_vox/icons/clothing/mod.dmi differ diff --git a/modular_skyrat/modules/better_vox/icons/clothing/mod_modules.dmi b/modular_nova/modules/better_vox/icons/clothing/mod_modules.dmi similarity index 100% rename from modular_skyrat/modules/better_vox/icons/clothing/mod_modules.dmi rename to modular_nova/modules/better_vox/icons/clothing/mod_modules.dmi diff --git a/modular_nova/modules/better_vox/icons/clothing/neck.dmi b/modular_nova/modules/better_vox/icons/clothing/neck.dmi new file mode 100644 index 00000000000000..33762ac78ef35f Binary files /dev/null and b/modular_nova/modules/better_vox/icons/clothing/neck.dmi differ diff --git a/modular_nova/modules/better_vox/icons/clothing/suit.dmi b/modular_nova/modules/better_vox/icons/clothing/suit.dmi new file mode 100644 index 00000000000000..31d22fbbe8397c Binary files /dev/null and b/modular_nova/modules/better_vox/icons/clothing/suit.dmi differ diff --git a/modular_nova/modules/better_vox/icons/clothing/uniform.dmi b/modular_nova/modules/better_vox/icons/clothing/uniform.dmi new file mode 100644 index 00000000000000..a126c64ad0ed26 Binary files /dev/null and b/modular_nova/modules/better_vox/icons/clothing/uniform.dmi differ diff --git a/modular_skyrat/modules/better_vox/icons/vox_templates.dmi b/modular_nova/modules/better_vox/icons/vox_templates.dmi similarity index 100% rename from modular_skyrat/modules/better_vox/icons/vox_templates.dmi rename to modular_nova/modules/better_vox/icons/vox_templates.dmi diff --git a/modular_skyrat/modules/better_vox/readme.md b/modular_nova/modules/better_vox/readme.md similarity index 100% rename from modular_skyrat/modules/better_vox/readme.md rename to modular_nova/modules/better_vox/readme.md diff --git a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/area.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/area.dm new file mode 100644 index 00000000000000..cbdd79dc25da4c --- /dev/null +++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/area.dm @@ -0,0 +1,72 @@ +/area/virtual_domain/ancient_milsim + name = "intro_2" // see fluff.dm, line 18; shouldn't really be used + icon = 'icons/area/areas_away_missions.dmi' + icon_state = "unknown" + +/area/virtual_domain/ancient_milsim/entrance + name = "'Time Of Valor 2' Entrance Area" // The most generic FPS title I could think of. + icon_state = "awaycontent1" + +/area/virtual_domain/ancient_milsim/janitor + name = "'Time Of Valor 2' Janitor's Closet" + icon_state = "awaycontent2" + +/area/virtual_domain/ancient_milsim/medbay + name = "'Time Of Valor 2' Medbay" + icon_state = "awaycontent3" + +/area/virtual_domain/ancient_milsim/atrium + name = "'Time Of Valor 2' Atrium" + icon_state = "awaycontent4" + +/area/virtual_domain/ancient_milsim/hallway + name = "'Time Of Valor 2' Hallway" + icon_state = "awaycontent5" + +/area/virtual_domain/ancient_milsim/maintenance + name = "'Time Of Valor 2' Maintenance Tunnel" + icon_state = "awaycontent7" + +/area/virtual_domain/ancient_milsim/loot_camp + name = "'Time Of Valor 2' CIN Encampment" + icon_state = "awaycontent7" + +/area/virtual_domain/ancient_milsim/snpc_ground + name = "'Time Of Valor 2' SNPC Fighting Ground" + icon_state = "awaycontent8" + +/area/virtual_domain/ancient_milsim/carrier + name = "'Time Of Valor 2' Ruined APC" + icon_state = "awaycontent9" + +/area/virtual_domain/ancient_milsim/snpc_hallway + name = "'Time Of Valor 2' SNPC Base Hallway" + icon_state = "awaycontent10" + +/area/virtual_domain/ancient_milsim/snpc_bar + name = "'Time Of Valor 2' SNPC Base Bar" + icon_state = "awaycontent11" + +/area/virtual_domain/ancient_milsim/snpc_garage + name = "'Time Of Valor 2' SNPC Base Garage" + icon_state = "awaycontent12" + +/area/virtual_domain/ancient_milsim/snpc_cafe + name = "'Time Of Valor 2' SNPC Base Cafeteria" + icon_state = "awaycontent13" + +/area/virtual_domain/ancient_milsim/snpc_toilet + name = "'Time Of Valor 2' SNPC Base Restroom" + icon_state = "awaycontent14" + +/area/virtual_domain/ancient_milsim/snpc_cave + name = "'Time Of Valor 2' SNPC Base Maintenance Cave" + icon_state = "awaycontent15" + +/area/virtual_domain/ancient_milsim/snpc_reward + name = "'Time Of Valor 2' SNPC Base Reward Room" + icon_state = "awaycontent16" + +/area/virtual_domain/ancient_milsim/snpc_exit + name = "'Time Of Valor 2' SNPC Base Exit Tunnel" + icon_state = "awaycontent17" diff --git a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/choice_beacon.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/choice_beacon.dm new file mode 100644 index 00000000000000..cb05f9fee5abba --- /dev/null +++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/choice_beacon.dm @@ -0,0 +1,64 @@ +/obj/item/choice_beacon/ancient_milsim + name = "early access equipment beacon" + desc = "Summon a gear closet for your contributions in the early access testing. Synchronises with the current game version to give you the most up-to-date class equipment." + company_source = "'Time Of Valor 2' development team" + company_message = span_bold("Thanks, and have fun!") + +/obj/item/choice_beacon/ancient_milsim/generate_display_names() + var/static/list/gear_options + if(!gear_options) + gear_options = list() + for(var/obj/structure/closet/crate/secure/weapon/milsim/crate as anything in subtypesof(/obj/structure/closet/crate/secure/weapon/milsim)) + gear_options[initial(crate.name)] = crate + return gear_options + +/obj/structure/closet/crate/secure/weapon/milsim/after_open() + qdel(src) + +/obj/structure/closet/crate/secure/weapon/milsim/mechanic + name = "mechanic loadout crate" + +/obj/structure/closet/crate/secure/weapon/milsim/mechanic/PopulateContents() + . = ..() + new /obj/item/gun/ballistic/automatic/pistol/sol/evil(src) + new /obj/item/ammo_box/magazine/c35sol_pistol(src) + new /obj/item/ammo_box/magazine/c35sol_pistol(src) + new /obj/item/ammo_box/magazine/c35sol_pistol(src) + new /obj/item/storage/pouch/ammo(src) + new /obj/item/mod/control/pre_equipped/responsory/milsim_mechanic(src) + +/obj/structure/closet/crate/secure/weapon/milsim/marksman + name = "marksman loadout crate" + +/obj/structure/closet/crate/secure/weapon/milsim/marksman/PopulateContents() + . = ..() + new /obj/item/gun/ballistic/automatic/pistol/sol/evil(src) + new /obj/item/ammo_box/magazine/c35sol_pistol(src) + new /obj/item/ammo_box/magazine/c35sol_pistol(src) + new /obj/item/ammo_box/magazine/c35sol_pistol(src) + new /obj/item/storage/pouch/ammo(src) + new /obj/item/mod/control/pre_equipped/responsory/milsim_marksman(src) + +/obj/structure/closet/crate/secure/weapon/milsim/medic + name = "medic loadout crate" + +/obj/structure/closet/crate/secure/weapon/milsim/medic/PopulateContents() + . = ..() + new /obj/item/gun/ballistic/automatic/pistol/sol/evil(src) + new /obj/item/ammo_box/magazine/c35sol_pistol(src) + new /obj/item/ammo_box/magazine/c35sol_pistol(src) + new /obj/item/ammo_box/magazine/c35sol_pistol(src) + new /obj/item/storage/pouch/ammo(src) + new /obj/item/mod/control/pre_equipped/responsory/milsim_medic(src) + +/obj/structure/closet/crate/secure/weapon/milsim/trapper + name = "trapper loadout crate" + +/obj/structure/closet/crate/secure/weapon/milsim/trapper/PopulateContents() + . = ..() + new /obj/item/gun/ballistic/automatic/pistol/sol/evil(src) + new /obj/item/ammo_box/magazine/c35sol_pistol(src) + new /obj/item/ammo_box/magazine/c35sol_pistol(src) + new /obj/item/ammo_box/magazine/c35sol_pistol(src) + new /obj/item/storage/pouch/ammo(src) + new /obj/item/mod/control/pre_equipped/responsory/milsim_trapper(src) diff --git a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/disk.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/disk.dm new file mode 100644 index 00000000000000..4e1eed881ff577 --- /dev/null +++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/disk.dm @@ -0,0 +1,6 @@ +/obj/item/bitrunning_disk/item/ancient_milsim + name = "compiled bitrunning gear: ancient milsim" + desc = "A disk containing early access downloadable content. It can be used to preload items into the virtual domain." + selectable_items = list( + /obj/item/choice_beacon/ancient_milsim, + ) diff --git a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/fluff.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/fluff.dm new file mode 100644 index 00000000000000..c35e8e1283d00a --- /dev/null +++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/fluff.dm @@ -0,0 +1,81 @@ +/obj/item/tape/ruins/ancient_milsim + icon_state = "tape_blue" + name = "Developer Commentary" + desc = "Tape recording made, presumably, somewhere around twenty third century - at least, that's what the smudged labels are saying. Why is it smudged? Presumably to be authentic." + + +/obj/item/tape/ruins/ancient_milsim/devlog_one + name = "Developer Commentary, Log 1: Setting" + used_capacity = 160 + + storedinfo = list( + 1 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording started.</span>\"</span></span>", + 2 = "<span class='game say'><span class='name'>Unknown person</span> <span class='message'>blares, \"<span class=' '>Greetings, my name is Leon Gardner, and welcome to the beta test of a long awaited sequel to 'Time Of Valor: Border Rescue' - 'Time Of Valor 2'.</span>\"</span></span>", + 3 = "<span class='game say'><span class='name'>Leon Gardner</span> <span class='message'>states, \"<span class=' '>After three years of development, hopefully it will be worth the wait.</span>\"</span></span>", + 4 = "<span class='game say'><span class='name'>Leon Gardner</span> <span class='message'>clarifies, \"<span class=' '>In the following pre-release beta test, you'll be completing the intro level of the game, detailing the early stages of the Border War, and introducing you to the new mechanics like Smart NPCs and full molecular simulation.</span>\"</span></span>", + 5 = "<span class='game say'><span class='name'>Leon Gardner</span> <span class='message'>echoes, \"<span class=' '>The setting has been chosen to be so early in the Border War as it complemented the prequel's story. Some of the lore pieces haven't been properly explained nor were entirely comprehensible by the players, so we've taken an extra effort to make it easier for a new player to follow the story.</span>\"</span></span>", + 6 = "<span class='game say'><span class='name'>Leon Gardner</span> <span class='message'>states, \"<span class=' '>As such, most of the NPCs and items included have been cross-compared with their real life equivalents, via publicly available documents, interviews with the war veterans, and other means.</span>\"</span></span>", + 7 = "<span class='game say'><span class='name'>Leon Gardner</span> <span class='message'>warns, \"<span class=' '>This particular map, 'intro-underscore-two', is a shortened representation of the many covert SolFed operations launched around the first few months of the war.</span>\"</span></span>", + 8 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording stopped.</span>\"</span></span>", + ) + + timestamp = list( + 1 = 0, + 2 = 20, + 3 = 40, + 4 = 80, + 5 = 100, + 6 = 120, + 7 = 140, + 8 = 160, + ) + +/obj/item/tape/ruins/ancient_milsim/devlog_two + name = "Developer Commentary, Log 2: Mechanics" + used_capacity = 160 + + storedinfo = list( + 1 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording started.</span>\"</span></span>", + 2 = "<span class='game say'><span class='name'>Unknown person</span> <span class='message'>blares, \"<span class=' '>Hi, my name is Vanessa Parker, Main Mechanics Developer for the upcoming game 'Time Of Valor 2'.</span>\"</span></span>", + 3 = "<span class='game say'><span class='name'>Vanessa Parker</span> <span class='message'>states, \"<span class=' '>Compared to the previous game installment, the new software and hardware upgrades allowed us to developed an in-depth simulation of molecules and realistic damage calculation for the players and the SNPCs.</span>\"</span></span>", + 4 = "<span class='game say'><span class='name'>Vanessa Parker</span> <span class='message'>clarifies, \"<span class=' '>As such, during early testing stages of the game the players and SNPCs used to bleed out or die from pain shocks in the first encounters, resulting in a bad experience.</span>\"</span></span>", + 5 = "<span class='game say'><span class='name'>Vanessa Parker</span> <span class='message'>echoes, \"<span class=' '>We've decided to tackle this issue adding some homebrewn setting-appropriate technology like health stations. Placed around the important points of interest, the players and their smarter foes can use them to recover their health and negate bleeding wounds that were so commonplace.</span>\"</span></span>", + 6 = "<span class='game say'><span class='name'>Vanessa Parker</span> <span class='message'>states, \"<span class=' '>Another issue that was commonly present is that SNPCs would over time learn more and more about the level, and as such, start rushing the players before they've even began equipping their gear and killing them.</span>\"</span></span>", + 7 = "<span class='game say'><span class='name'>Vanessa Parker</span> <span class='message'>warns, \"<span class=' '>Which has been fixed by placing a 'fog of war' at the border between the NPC and SNPC zones. This was achieved by placing an ionised gas forcewall with a half-life of several dozens of years in order to make sure that the field doesn't disappear randomly.</span>\"</span></span>", + 8 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording stopped.</span>\"</span></span>", + ) + timestamp = list( + 1 = 0, + 2 = 20, + 3 = 40, + 4 = 80, + 5 = 100, + 6 = 120, + 7 = 140, + 8 = 160, + ) + +/obj/item/tape/ruins/ancient_milsim/devlog_three + name = "Developer Commentary, Log 3: SNPCs" + used_capacity = 160 + + storedinfo = list( + 1 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording started.</span>\"</span></span>", + 2 = "<span class='game say'><span class='name'>Unknown person</span> <span class='message'>blares, \"<span class=' '>Sup, I am Mark Marshall, 'Time Of Valor 2''s SNPC Neural Programmer.</span>\"</span></span>", + 3 = "<span class='game say'><span class='name'>Mark Marshall</span> <span class='message'>states, \"<span class=' '>New Smart NPC system has been briefly used in the first game's bossfight for the main enemy, to make sure that the fight would feel more rewarding and replayable.</span>\"</span></span>", + 4 = "<span class='game say'><span class='name'>Mark Marshall</span> <span class='message'>clarifies, \"<span class=' '>In the new game, however, SNPC technology has been improved by a long mile and we've decided to broaden the amount of 'smarter' combat sections around the story.</span>\"</span></span>", + 5 = "<span class='game say'><span class='name'>Mark Marshall</span> <span class='message'>echoes, \"<span class=' '>They breathe, eat, see like your average player; and fully simulate their nerve and cognitive models as opposed to the dumbed down common mobs that lack the nerves, thought and fear simulations.</span>\"</span></span>", + 6 = "<span class='game say'><span class='name'>Mark Marshall</span> <span class='message'>states, \"<span class=' '>With a smart learning curve that allows them to adapt and learn from their experiences with other players, meaning each and every fight should feel unique.</span>\"</span></span>", + 7 = "<span class='game say'><span class='name'>Mark Marshall</span> <span class='message'>warns, \"<span class=' '>Their models have also been greatly reworked to allow for other people to submit their own character appearances, so none of them will ever look the same.</span>\"</span></span>", + 8 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording stopped.</span>\"</span></span>", + ) + timestamp = list( + 1 = 0, + 2 = 20, + 3 = 40, + 4 = 80, + 5 = 100, + 6 = 120, + 7 = 140, + 8 = 160, + ) diff --git a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/fog_of_war.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/fog_of_war.dm new file mode 100644 index 00000000000000..28d9c704fc139f --- /dev/null +++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/fog_of_war.dm @@ -0,0 +1,39 @@ +/obj/machinery/button/door/indestructible/ancient_milsim + name = "SNPC Zone Entry Control" + desc = "A special button that, when pushed, deletes itself. Hopefully prevents unintended or malicious softlocks; and equalises the encounter hidden behind the fog." + id = "engagement_control" + +/obj/machinery/button/door/indestructible/ancient_milsim/screwdriver_act() + return + +/obj/machinery/button/door/indestructible/ancient_milsim/attackby() + return + +/obj/machinery/button/door/indestructible/ancient_milsim/emag_act() + return + +/obj/machinery/button/door/indestructible/ancient_milsim/attack_hand() + . = ..() + if(.) + return + qdel(src) + +/obj/machinery/door/poddoor/ancient_milsim + name = "fog of war" + desc = "'Best' game mechanic ever. At least it keeps you protected, you know? Deletes itself when the button is pushed." + icon = 'icons/effects/anomalies.dmi' + icon_state = "pyroclastic" + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + +/obj/machinery/door/poddoor/ancient_milsim/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() + +/obj/machinery/door/poddoor/ancient_milsim/screwdriver_act() + return + +/obj/machinery/door/poddoor/ancient_milsim/welder_act() + return + +/obj/machinery/door/poddoor/ancient_milsim/open() + qdel(src) diff --git a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/ghost_spawner.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/ghost_spawner.dm new file mode 100644 index 00000000000000..7d7a001f100535 --- /dev/null +++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/ghost_spawner.dm @@ -0,0 +1,25 @@ +/obj/effect/mob_spawn/ghost_role/human/ancient_milsim + name = "Bitrunning SNPC CIN Operative" + prompt_name = "a weird compound operative" + icon = 'icons/obj/machines/sleeper.dmi' + icon_state = "psykerpod" + outfit = /datum/outfit/cin_soldier_player + you_are_text = "You are a smart NPC guarding the exit of a simulated combat domain." + flavour_text = "You are a smart NPC loaded into the domain as a means of slowing down the bitrunning contestants' progression one way or another, be it combat or drawn out dialogues." + important_text = "Generally speaking, 'play fair'. Only allowed species is humans." + restricted_species = list(/datum/species/human) + random_appearance = FALSE + +/obj/effect/mob_spawn/ghost_role/human/ancient_milsim/proc/apply_codename(mob/living/carbon/human/spawned_human) + var/callsign = pick(GLOB.callsigns_nri) + var/number = pick(GLOB.phonetic_alphabet_numbers) + spawned_human.fully_replace_character_name(null, "[callsign] [number]") + +/obj/effect/mob_spawn/ghost_role/human/ancient_milsim/special(mob/living/carbon/human/spawned_human) + . = ..() + spawned_human.grant_language(/datum/language/panslavic, source = LANGUAGE_SPAWNER) + apply_codename(spawned_human) + +/obj/effect/mob_spawn/ghost_role/human/ancient_milsim/post_transfer_prefs(mob/living/carbon/human/spawned_human) + . = ..() + apply_codename(spawned_human) diff --git a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/iv_drip.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/iv_drip.dm new file mode 100644 index 00000000000000..76400513882327 --- /dev/null +++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/iv_drip.dm @@ -0,0 +1,27 @@ +/obj/machinery/iv_drip/health_station + name = "health station" + desc = "A wall-mounted healing mixture dispenser designed for stationary first-aid application. Old Solarian tech that got silently deprecated \ + due to a massive healthcare privatization; still utilized by the CIN-backed states." + icon = 'modular_nova/modules/bitrunning/icons/health_station.dmi' + icon_state = "health_station" + base_icon_state = "health_station" + light_range = 2 + light_color = "#ad3e3e" + anchored = TRUE + inject_only = TRUE + use_internal_storage = TRUE + internal_list_reagents = list( + /datum/reagent/medicine/salglu_solution = 125, + /datum/reagent/iron = 125, + /datum/reagent/medicine/coagulant = 125, + /datum/reagent/medicine/sal_acid = 125, + /datum/reagent/medicine/omnizine = 250, + /datum/reagent/medicine/mine_salve = 250, + ) + internal_volume_maximum = 1000 + +/obj/machinery/iv_drip/health_station/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/iv_drip/health_station, 32) diff --git a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mapping_helpers.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mapping_helpers.dm new file mode 100644 index 00000000000000..ac62cef3a12ba3 --- /dev/null +++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mapping_helpers.dm @@ -0,0 +1,10 @@ +/obj/effect/baseturf_helper/virtual_domain/ancient_milsim + name = "virtual domain baseturf editor" + baseturf_to_replace = list(/turf/open/space, + /turf/baseturf_bottom, + /turf/open/misc/ashplanet/wateryrock, + /turf/open/floor/plating, + /turf/open/misc/dirt/planet, + /turf/open/misc/sandy_dirt/planet, + /turf/open/chasm/lavaland, + ) diff --git a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mine.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mine.dm new file mode 100644 index 00000000000000..1cc7d7c7f972c0 --- /dev/null +++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mine.dm @@ -0,0 +1,17 @@ +/obj/effect/mine/explosive/light/ancient_milsim + arm_delay = 1.5 SECONDS + light_range = 1.6 + light_power = 2 + light_color = COLOR_VIVID_RED + +/obj/effect/mine/explosive/light/ancient_milsim/now_armed() + . = ..() + set_light_on(TRUE) + +/obj/item/minespawner/ancient_milsim + name = "deactivated low-yield landmine" + desc = "When activated, will deploy a low-yield explosive landmine after 1.5 second passes, perfect for setting traps in tight corridors." + icon = 'icons/obj/weapons/grenade.dmi' + icon_state = "landmine-inactive" + + mine_type = /obj/effect/mine/explosive/light/ancient_milsim diff --git a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mobs.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mobs.dm new file mode 100644 index 00000000000000..d37988d94431f3 --- /dev/null +++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mobs.dm @@ -0,0 +1,59 @@ +/mob/living/basic/trooper/cin_soldier + name = "Coalition Operative" + desc = "Death to SolFed." + melee_damage_lower = 15 + melee_damage_upper = 20 + attack_verb_continuous = "cuts" + attack_verb_simple = "cut" + attack_sound = 'sound/weapons/blade1.ogg' + attack_vis_effect = ATTACK_EFFECT_SLASH + faction = list(ROLE_SYNDICATE) + loot = list(/obj/effect/mob_spawn/corpse/human/cin_soldier) + mob_spawner = /obj/effect/mob_spawn/corpse/human/cin_soldier + +/mob/living/basic/trooper/cin_soldier/melee + r_hand = /obj/item/melee/energy/sword/saber/purple + l_hand = /obj/item/shield/riot/pointman/hecu + var/projectile_deflect_chance = 20 + +/mob/living/basic/trooper/cin_soldier/melee/bullet_act(obj/projectile/projectile) + if(prob(projectile_deflect_chance)) + visible_message(span_danger("[src] blocks [projectile] with their shield!")) + return BULLET_ACT_BLOCK + return ..() + +/mob/living/basic/trooper/cin_soldier/ranged + melee_damage_lower = 5 + melee_damage_upper = 10 + ai_controller = /datum/ai_controller/basic_controller/trooper/ranged + r_hand = /obj/item/gun/ballistic/automatic/miecz + /// Type of bullet we use + var/casingtype = /obj/item/ammo_casing/c27_54cesarzowa + /// Sound to play when firing weapon + var/projectilesound = 'modular_nova/modules/modular_weapons/sounds/smg_light.ogg' + /// number of burst shots + var/burst_shots = 1 + /// Time between taking shots + var/ranged_cooldown = 0.3 SECONDS + +/mob/living/basic/trooper/cin_soldier/ranged/Initialize(mapload) + . = ..() + AddComponent(\ + /datum/component/ranged_attacks,\ + casing_type = casingtype,\ + projectile_sound = projectilesound,\ + cooldown_time = ranged_cooldown,\ + burst_shots = burst_shots,\ + ) + +/datum/modular_mob_segment/cin_mobs + mobs = list( + /mob/living/basic/trooper/cin_soldier/ranged, + /mob/living/basic/trooper/cin_soldier/melee, + ) + +/obj/effect/mob_spawn/corpse/human/cin_soldier + name = "Coalition Operative" + hairstyle = "Bald" + facial_hairstyle = "Shaved" + outfit = /datum/outfit/cin_soldier_corpse diff --git a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mod.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mod.dm new file mode 100644 index 00000000000000..46c82b513bbab0 --- /dev/null +++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mod.dm @@ -0,0 +1,115 @@ +/obj/item/mod/control/pre_equipped/responsory/milsim_mechanic + applied_cell = /obj/item/stock_parts/cell/super + starting_frequency = MODLINK_FREQ_NANOTRASEN + req_access = null + applied_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/status_readout/operational, + /obj/item/mod/module/jetpack, + /obj/item/mod/module/visor/meson, + /obj/item/mod/module/armor_booster/retractplates, + ) + default_pins = list( + /obj/item/mod/module/jetpack, + /obj/item/mod/module/visor/meson, + /obj/item/mod/module/armor_booster/retractplates, + ) + insignia_type = /obj/item/mod/module/insignia/engineer + additional_module = /obj/item/mod/module/dispenser/barrinade + +/obj/item/mod/control/pre_equipped/responsory/milsim_trapper + applied_cell = /obj/item/stock_parts/cell/super + starting_frequency = MODLINK_FREQ_NANOTRASEN + req_access = null + applied_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/status_readout/operational, + /obj/item/mod/module/jetpack, + /obj/item/mod/module/active_sonar, + /obj/item/mod/module/armor_booster/retractplates, + ) + default_pins = list( + /obj/item/mod/module/jetpack, + /obj/item/mod/module/active_sonar, + /obj/item/mod/module/armor_booster/retractplates, + ) + insignia_type = /obj/item/mod/module/insignia/commander + additional_module = /obj/item/mod/module/dispenser/landmine + +/obj/item/mod/control/pre_equipped/responsory/milsim_marksman + applied_cell = /obj/item/stock_parts/cell/super + starting_frequency = MODLINK_FREQ_NANOTRASEN + req_access = null + applied_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/status_readout/operational, + /obj/item/mod/module/jetpack, + /obj/item/mod/module/visor/night, + /obj/item/mod/module/armor_booster/retractplates, + ) + default_pins = list( + /obj/item/mod/module/jetpack, + /obj/item/mod/module/visor/night, + /obj/item/mod/module/armor_booster/retractplates, + ) + insignia_type = /obj/item/mod/module/insignia/security + additional_module = /obj/item/mod/module/dispenser/smoke + +/obj/item/mod/control/pre_equipped/responsory/milsim_medic + applied_cell = /obj/item/stock_parts/cell/super + starting_frequency = MODLINK_FREQ_NANOTRASEN + req_access = null + applied_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/status_readout/operational, + /obj/item/mod/module/jetpack, + /obj/item/mod/module/visor/medhud, + /obj/item/mod/module/armor_booster/retractplates, + ) + default_pins = list( + /obj/item/mod/module/jetpack, + /obj/item/mod/module/visor/medhud, + /obj/item/mod/module/armor_booster/retractplates, + ) + insignia_type = /obj/item/mod/module/insignia/medic + additional_module = /obj/item/mod/module/dispenser/legion_core + +/obj/item/mod/module/dispenser/barrinade + name = "MOD barricade grenade dispenser module" + desc = "This module can create activated security barricade grenades at the user's liking." + dispense_type = /obj/item/grenade/barrier + +/obj/item/mod/module/dispenser/barrinade/on_use() + . = ..() + if(!.) + return + var/obj/item/grenade/barrier/grenade = . + grenade.arm_grenade(mod.wearer) + +/obj/item/mod/module/dispenser/landmine + name = "MOD landmine dispenser module" + desc = "This module can create deactivated landmines at the user's liking." + cooldown_time = 10 SECONDS + dispense_type = /obj/item/minespawner/ancient_milsim + +/obj/item/mod/module/dispenser/smoke + name = "MOD smoke bomb dispenser module" + desc = "This module can create activated smoke grenades at the user's liking." + dispense_type = /obj/item/grenade/smokebomb + +/obj/item/mod/module/dispenser/smoke/on_use() + . = ..() + if(!.) + return + var/obj/item/grenade/smokebomb/grenade = . + grenade.arm_grenade(mod.wearer) + +/obj/item/mod/module/dispenser/legion_core + name = "MOD legion core dispenser module" + desc = "This module can create healing legion cores at the user's liking." + cooldown_time = 10 SECONDS + dispense_type = /obj/item/organ/internal/monster_core/regenerative_core/legion diff --git a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/outfit.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/outfit.dm new file mode 100644 index 00000000000000..1811071c5b00fa --- /dev/null +++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/outfit.dm @@ -0,0 +1,75 @@ +/datum/outfit/solfed_bitrun + name = "Bitrunning SolFed Marine" + + uniform = /obj/item/clothing/under/rank/security/officer/hecu + head = null + mask = /obj/item/clothing/mask/gas/hecu2 + gloves = /obj/item/clothing/gloves/combat + suit = null + shoes = /obj/item/clothing/shoes/combat + back = /obj/item/storage/backpack/ert/odst/hecu + glasses = null + ears = /obj/item/radio/headset/headset_faction/bowman + id = /obj/item/card/id/advanced/solfed + r_hand = null + l_hand = null + backpack_contents = null + belt = null + id_trim = /datum/id_trim/solfed_bitrun + +/datum/id_trim/solfed_bitrun + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' + assignment = "SolFed Marine" + trim_state = "trim_solfed" + department_color = COLOR_SOLFED_GOLD + subdepartment_color = COLOR_SOLFED_GOLD + sechud_icon_state = SECHUD_SOLFED + +/datum/outfit/cin_soldier_corpse + name = "Coalition Operative Corpse" + uniform = /obj/item/clothing/under/syndicate/rus_army/cin_surplus/forest + suit = /obj/item/clothing/suit/armor/vest/cin_surplus_vest + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/fingerless + ears = /obj/item/radio/headset/cybersun + mask = /obj/item/clothing/mask/balaclavaadjust + head = /obj/item/clothing/head/helmet/cin_surplus_helmet/forest + back = /obj/item/storage/backpack/industrial/cin_surplus/forest + belt = /obj/item/storage/belt/military/cin_surplus/forest + id = /obj/item/card/id/advanced + id_trim = /datum/id_trim/nri_raider/cin + +/datum/outfit/cin_soldier_player + name = "Coalition Operative SNPC" + uniform = /obj/item/clothing/under/syndicate/rus_army/cin_surplus/forest + suit = /obj/item/clothing/suit/armor/vest/cin_surplus_vest + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/fingerless + ears = /obj/item/radio/headset/cybersun + glasses = /obj/item/clothing/glasses/hud/health + mask = /obj/item/clothing/mask/gas/sechailer/swat + head = /obj/item/clothing/head/helmet/cin_surplus_helmet/forest + back = /obj/item/storage/backpack/industrial/cin_surplus/forest + backpack_contents = list( + /obj/item/storage/box/nri_survival_pack/raider, + /obj/item/gun/ballistic/automatic/pistol/plasma_marksman, + /obj/item/ammo_box/magazine/recharge/plasma_battery = 2, + ) + r_hand = null + l_hand = null + belt = /obj/item/storage/belt/military/cin_surplus/forest + id = /obj/item/card/id/advanced + id_trim = /datum/id_trim/nri_raider/cin + +/datum/outfit/cin_soldier_player/post_equip(mob/living/carbon/human/user, visualsOnly) + . = ..() + user.faction |= ROLE_SYNDICATE + + // make sure we update the ID's name too + var/obj/item/card/id/id_card = user.wear_id + if(istype(id_card)) + id_card.registered_name = user.real_name + id_card.update_label() + +/datum/id_trim/nri_raider/cin + assignment = "CIN Operative" diff --git a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/turf.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/turf.dm new file mode 100644 index 00000000000000..3a8b177095fe17 --- /dev/null +++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/turf.dm @@ -0,0 +1,5 @@ +//Smoothing causes issues such as weirdly black tiles and weirdly connected tiles, so I'll remove it for the domain to look pretty. +/turf/open/misc/grass/planet/ancient_milsim + smoothing_flags = NONE + smoothing_groups = SMOOTH_GROUP_TURF_OPEN + canSmoothWith = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_OPEN_FLOOR diff --git a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/virtual_domain.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/virtual_domain.dm new file mode 100644 index 00000000000000..685a0026813b40 --- /dev/null +++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/virtual_domain.dm @@ -0,0 +1,14 @@ +/// Modular Map Loader doesnt like subfolders +/datum/lazy_template/virtual_domain/ancient_milsim + name = "Ancient Military Simulator" + cost = BITRUNNER_COST_HIGH + desc = "Recreate the events of the Border War's 'hot' part-long-gone as a Solarian strike team sweeping CIN compounds; sponsored by the SolFed recreation enthusiasts. \ + Multiplayer playthrough and proper preparation highly recommended." + extra_loot = list(/obj/item/bitrunning_disk/item/ancient_milsim = 1) + difficulty = BITRUNNER_DIFFICULTY_HIGH + help_text = "The last part of this domain has a chance to be very PvP-centric. It's best if you don't come alone, and smuggle some ability and gear disks." + forced_outfit = /datum/outfit/solfed_bitrun + key = "ancient_milsim" + map_name = "ancientmilsim_nova" + mob_modules = list(/datum/modular_mob_segment/cin_mobs) + reward_points = BITRUNNER_REWARD_HIGH diff --git a/modular_nova/modules/bitrunning/icons/health_station.dmi b/modular_nova/modules/bitrunning/icons/health_station.dmi new file mode 100644 index 00000000000000..441f705a44f966 Binary files /dev/null and b/modular_nova/modules/bitrunning/icons/health_station.dmi differ diff --git a/modular_skyrat/modules/black_mesa/code/armaments/__armament_bodyarmor.dm b/modular_nova/modules/black_mesa/code/armaments/__armament_bodyarmor.dm similarity index 100% rename from modular_skyrat/modules/black_mesa/code/armaments/__armament_bodyarmor.dm rename to modular_nova/modules/black_mesa/code/armaments/__armament_bodyarmor.dm diff --git a/modular_nova/modules/black_mesa/code/armaments/_armament_primary.dm b/modular_nova/modules/black_mesa/code/armaments/_armament_primary.dm new file mode 100644 index 00000000000000..4ef7c1e2c11bba --- /dev/null +++ b/modular_nova/modules/black_mesa/code/armaments/_armament_primary.dm @@ -0,0 +1,76 @@ +/datum/armament_entry/hecu/primary + category = ARMAMENT_CATEGORY_PRIMARY + category_item_limit = 4 + slot_to_equip = ITEM_SLOT_SUITSTORE + cost = 10 + +/datum/armament_entry/hecu/primary/submachinegun + subcategory = ARMAMENT_SUBCATEGORY_SUBMACHINEGUN + mags_to_spawn = 4 + +/datum/armament_entry/hecu/primary/submachinegun/sindano + item_type = /obj/item/gun/ballistic/automatic/sol_smg + max_purchase = 4 + cost = 7 + +/datum/armament_entry/hecu/primary/submachinegun/bogseo + item_type = /obj/item/gun/ballistic/automatic/xhihao_smg + max_purchase = 2 + cost = 8 + +/datum/armament_entry/hecu/primary/assaultrifle + subcategory = ARMAMENT_SUBCATEGORY_ASSAULTRIFLE + mags_to_spawn = 3 + +/datum/armament_entry/hecu/primary/assaultrifle/infanteria + item_type = /obj/item/gun/ballistic/automatic/sol_rifle + max_purchase = 2 + cost = 11 + magazine = /obj/item/ammo_box/magazine/c40sol_rifle/standard + +/datum/armament_entry/hecu/primary/shotgun + subcategory = ARMAMENT_SUBCATEGORY_SHOTGUN + mags_to_spawn = 1 + magazine = /obj/item/storage/box/ammo_box/shotgun_12g + magazine_cost = 4 + +/datum/armament_entry/hecu/primary/shotgun/shotgun_highcap + item_type = /obj/item/gun/ballistic/shotgun/riot/sol + max_purchase = 2 + cost = 5 + +/datum/armament_entry/hecu/primary/shotgun/autoshotgun_pump + item_type = /obj/item/gun/ballistic/shotgun/automatic/as2 + max_purchase = 1 + cost = 7 + +/datum/armament_entry/hecu/primary/special + subcategory = ARMAMENT_SUBCATEGORY_SPECIAL + mags_to_spawn = 2 + +/datum/armament_entry/hecu/primary/special/sniper_rifle + item_type = /obj/item/gun/ballistic/automatic/sol_rifle/marksman + max_purchase = 1 + cost = 16 + +/datum/armament_entry/hecu/primary/special/hmg + item_type = /obj/item/mounted_machine_gun_folded + max_purchase = 1 + cost = 20 + magazine = /obj/item/ammo_box/magazine/mmg_box + mags_to_spawn = 1 + magazine_cost = 2 + +/obj/item/storage/box/ammo_box/shotgun_12g + +/obj/item/storage/box/ammo_box/shotgun_12g/PopulateContents() + var/funshell = pick( + /obj/item/ammo_box/advanced/s12gauge/incendiary, + /obj/item/ammo_box/advanced/s12gauge/flechette, + /obj/item/ammo_box/advanced/s12gauge/beehive, + /obj/item/ammo_box/advanced/s12gauge/antitide, + /obj/item/ammo_box/advanced/s12gauge/express, + ) + new /obj/item/ammo_box/advanced/s12gauge/magnum(src) + new /obj/item/ammo_box/advanced/s12gauge(src) + new funshell(src) diff --git a/modular_skyrat/modules/black_mesa/code/armaments/_armaments_secondary.dm b/modular_nova/modules/black_mesa/code/armaments/_armaments_secondary.dm similarity index 100% rename from modular_skyrat/modules/black_mesa/code/armaments/_armaments_secondary.dm rename to modular_nova/modules/black_mesa/code/armaments/_armaments_secondary.dm diff --git a/modular_skyrat/modules/black_mesa/code/armaments/armament_explosives.dm b/modular_nova/modules/black_mesa/code/armaments/armament_explosives.dm similarity index 100% rename from modular_skyrat/modules/black_mesa/code/armaments/armament_explosives.dm rename to modular_nova/modules/black_mesa/code/armaments/armament_explosives.dm diff --git a/modular_nova/modules/black_mesa/code/armaments/armament_medical.dm b/modular_nova/modules/black_mesa/code/armaments/armament_medical.dm new file mode 100644 index 00000000000000..a7266b655b98bc --- /dev/null +++ b/modular_nova/modules/black_mesa/code/armaments/armament_medical.dm @@ -0,0 +1,79 @@ +/datum/armament_entry/hecu/medical + category = ARMAMENT_CATEGORY_MEDICAL + category_item_limit = 20 + +/datum/armament_entry/hecu/medical/defib + item_type = /obj/item/defibrillator/loaded + max_purchase = 1 + cost = 4 + +/datum/armament_entry/hecu/medical/medkit + subcategory = ARMAMENT_SUBCATEGORY_MEDKIT + +/datum/armament_entry/hecu/medical/medkit/basic + item_type = /obj/item/storage/medkit/regular + max_purchase = 3 + cost = 3 + +/datum/armament_entry/hecu/medical/medkit/brute + item_type = /obj/item/storage/medkit/brute + max_purchase = 2 + cost = 3 + +/datum/armament_entry/hecu/medical/medkit/toxin + item_type = /obj/item/storage/medkit/toxin + max_purchase = 1 + cost = 2 + +/datum/armament_entry/hecu/medical/medkit/fire + item_type = /obj/item/storage/medkit/fire + max_purchase = 1 + cost = 3 + +/datum/armament_entry/hecu/medical/medkit/o2 + item_type = /obj/item/storage/medkit/o2 + max_purchase = 1 + cost = 2 + +/datum/armament_entry/hecu/medical/medkit/advanced + item_type = /obj/item/storage/medkit/advanced + max_purchase = 1 + cost = 4 + +/datum/armament_entry/hecu/medical/medkit/expeditionary + item_type = /obj/item/storage/medkit/expeditionary + max_purchase = 1 + cost = 5 + +/datum/armament_entry/hecu/medical/injector + subcategory = ARMAMENT_SUBCATEGORY_INJECTOR + +/datum/armament_entry/hecu/medical/injector/bloodloss + item_type = /obj/item/reagent_containers/hypospray/medipen/blood_loss + max_purchase = 4 + cost = 1 + +/datum/armament_entry/hecu/medical/injector/atropine + item_type = /obj/item/reagent_containers/hypospray/medipen/atropine + max_purchase = 4 + cost = 1 + +/datum/armament_entry/hecu/medical/injector/salacid + item_type = /obj/item/reagent_containers/hypospray/medipen/salacid + max_purchase = 4 + cost = 1 + +/datum/armament_entry/hecu/medical/injector/oxandrolone + item_type = /obj/item/reagent_containers/hypospray/medipen/oxandrolone + max_purchase = 4 + cost = 1 + +/datum/armament_entry/hecu/medical/injector/stimulant + item_type = /obj/item/reagent_containers/hypospray/medipen/stimulants + max_purchase = 2 + cost = 4 + +/datum/armament_entry/hecu/medical/injector/bag + item_type = /obj/item/storage/medkit/civil_defense/stocked + max_purchase = 2 + cost = 5 diff --git a/modular_skyrat/modules/black_mesa/code/armaments/armament_melee.dm b/modular_nova/modules/black_mesa/code/armaments/armament_melee.dm similarity index 100% rename from modular_skyrat/modules/black_mesa/code/armaments/armament_melee.dm rename to modular_nova/modules/black_mesa/code/armaments/armament_melee.dm diff --git a/modular_skyrat/modules/black_mesa/code/armaments/armament_miscellaneous.dm b/modular_nova/modules/black_mesa/code/armaments/armament_miscellaneous.dm similarity index 100% rename from modular_skyrat/modules/black_mesa/code/armaments/armament_miscellaneous.dm rename to modular_nova/modules/black_mesa/code/armaments/armament_miscellaneous.dm diff --git a/modular_nova/modules/black_mesa/code/armaments/armament_utility.dm b/modular_nova/modules/black_mesa/code/armaments/armament_utility.dm new file mode 100644 index 00000000000000..90a1f8159cd3df --- /dev/null +++ b/modular_nova/modules/black_mesa/code/armaments/armament_utility.dm @@ -0,0 +1,74 @@ +#define ARMAMENT_CATEGORY_UTILITY "Utility" + +/datum/armament_entry/hecu/utility + category = ARMAMENT_CATEGORY_UTILITY + category_item_limit = 20 + +/datum/armament_entry/hecu/utility/survival_pack + item_type = /obj/item/storage/box/nri_survival_pack + max_purchase = 4 + cost = 3 + +/datum/armament_entry/hecu/utility/pouch + item_type = /obj/item/storage/pouch/ammo + max_purchase = 8 + cost = 1 + +/datum/armament_entry/hecu/utility/pouch_knives + item_type = /obj/item/storage/pouch/ammo/marksman + max_purchase = 4 + cost = 3 + +/datum/armament_entry/hecu/utility/basic_tools + item_type = /obj/item/storage/toolbox/mechanical + max_purchase = 2 + cost = 1 + +/datum/armament_entry/hecu/utility/advanced_tools + name = "Powertoolbelt" + description = "Tool belt full of power-ful tools." + item_type = /obj/item/storage/belt/utility/full/powertools + max_purchase = 1 + cost = 4 + +/datum/armament_entry/hecu/utility/light_device + item_type = /obj/item/construction/rld/mini + max_purchase = 2 + cost = 3 + +/datum/armament_entry/hecu/utility/compact_shield + item_type = /obj/item/shield/riot/tele + max_purchase = 1 + cost = 5 + +/datum/armament_entry/hecu/utility/flash_shield + item_type = /obj/item/shield/riot/flash + max_purchase = 1 + cost = 10 + +/datum/armament_entry/hecu/utility/combat_shield + item_type = /obj/item/shield/riot/pointman/hecu + max_purchase = 1 + cost = 20 + +/datum/armament_entry/hecu/utility/zipties + item_type = /obj/item/storage/box/zipties + max_purchase = 2 + cost = 1 + +/datum/armament_entry/hecu/utility/suppressor + item_type = /obj/item/suppressor/standard + max_purchase = 4 + cost = 2 + +/datum/armament_entry/hecu/utility/bowman + item_type = /obj/item/radio/headset/headset_faction/bowman + max_purchase = 3 + cost = 4 + +/datum/armament_entry/hecu/utility/breaching_hammer //Mesa more like R6S amirite + item_type = /obj/item/melee/breaching_hammer + max_purchase = 1 + cost = 4 + +#undef ARMAMENT_CATEGORY_UTILITY diff --git a/modular_skyrat/modules/black_mesa/code/armaments/hecu_armament_station.dm b/modular_nova/modules/black_mesa/code/armaments/hecu_armament_station.dm similarity index 100% rename from modular_skyrat/modules/black_mesa/code/armaments/hecu_armament_station.dm rename to modular_nova/modules/black_mesa/code/armaments/hecu_armament_station.dm diff --git a/modular_nova/modules/black_mesa/code/armor.dm b/modular_nova/modules/black_mesa/code/armor.dm new file mode 100644 index 00000000000000..a376b929f3da96 --- /dev/null +++ b/modular_nova/modules/black_mesa/code/armor.dm @@ -0,0 +1,75 @@ +/obj/item/clothing/suit/armor/vest/hecu + name = "combat vest" + desc = "Vest designed to take heavy beating and probably keep the user alive in the process." + armor_type = /datum/armor/vest_hecu + icon_state = "ceramic_vest" + icon = 'modular_nova/modules/awaymissions_nova/icons/hecucloth.dmi' + worn_icon = 'modular_nova/modules/awaymissions_nova/icons/hecumob.dmi' + worn_icon_digi = 'modular_nova/modules/awaymissions_nova/icons/hecumob_digi.dmi' + uses_advanced_reskins = TRUE + unique_reskin = list( + "Basic" = list( + RESKIN_ICON_STATE = "ceramic_vest", + RESKIN_WORN_ICON_STATE = "ceramic_vest" + ), + "Corpsman" = list( + RESKIN_ICON_STATE = "ceramic_vest_medic", + RESKIN_WORN_ICON_STATE = "ceramic_vest_medic" + ), + "Basic Black" = list( + RESKIN_ICON_STATE = "ceramic_vest_black", + RESKIN_WORN_ICON_STATE = "ceramic_vest_black" + ), + "Corpsman Black" = list( + RESKIN_ICON_STATE = "ceramic_vest_medic_black", + RESKIN_WORN_ICON_STATE = "ceramic_vest_medic_black" + ), + ) + +/datum/armor/vest_hecu + melee = 40 + bullet = 40 + laser = 40 + energy = 40 + bomb = 40 + fire = 80 + acid = 100 + wound = 30 + +/obj/item/clothing/head/helmet/hecu + name = "combat helmet" + desc = "Helmet designed to take heavy beating and probably keep the user alive in the process." + armor_type = /datum/armor/helmet_hecu + icon_state = "ceramic_helmet" + icon = 'modular_nova/modules/awaymissions_nova/icons/hecucloth.dmi' + worn_icon = 'modular_nova/modules/awaymissions_nova/icons/hecumob.dmi' + worn_icon_digi = 'modular_nova/modules/awaymissions_nova/icons/hecumob_muzzled.dmi' + uses_advanced_reskins = TRUE + unique_reskin = list( + "Basic" = list( + RESKIN_ICON_STATE = "ceramic_helmet", + RESKIN_WORN_ICON_STATE = "ceramic_helmet" + ), + "Corpsman" = list( + RESKIN_ICON_STATE = "ceramic_helmet_medic", + RESKIN_WORN_ICON_STATE = "ceramic_helmet_medic" + ), + "Basic Black" = list( + RESKIN_ICON_STATE = "ceramic_helmet_black", + RESKIN_WORN_ICON_STATE = "ceramic_helmet_black" + ), + "Corpsman Black" = list( + RESKIN_ICON_STATE = "ceramic_helmet_medic_black", + RESKIN_WORN_ICON_STATE = "ceramic_helmet_medic_black" + ), + ) + +/datum/armor/helmet_hecu + melee = 30 + bullet = 30 + laser = 30 + energy = 30 + bomb = 30 + fire = 80 + acid = 100 + wound = 30 diff --git a/modular_skyrat/modules/black_mesa/code/bump_teleporter.dm b/modular_nova/modules/black_mesa/code/bump_teleporter.dm similarity index 100% rename from modular_skyrat/modules/black_mesa/code/bump_teleporter.dm rename to modular_nova/modules/black_mesa/code/bump_teleporter.dm diff --git a/modular_skyrat/modules/black_mesa/code/drops.dm b/modular_nova/modules/black_mesa/code/drops.dm similarity index 100% rename from modular_skyrat/modules/black_mesa/code/drops.dm rename to modular_nova/modules/black_mesa/code/drops.dm diff --git a/modular_skyrat/modules/black_mesa/code/fluff.dm b/modular_nova/modules/black_mesa/code/fluff.dm similarity index 100% rename from modular_skyrat/modules/black_mesa/code/fluff.dm rename to modular_nova/modules/black_mesa/code/fluff.dm diff --git a/modular_skyrat/modules/black_mesa/code/follow_component.dm b/modular_nova/modules/black_mesa/code/follow_component.dm similarity index 97% rename from modular_skyrat/modules/black_mesa/code/follow_component.dm rename to modular_nova/modules/black_mesa/code/follow_component.dm index 7b4b93f04c6397..cd579f41661bd1 100644 --- a/modular_skyrat/modules/black_mesa/code/follow_component.dm +++ b/modular_nova/modules/black_mesa/code/follow_component.dm @@ -36,7 +36,7 @@ RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) parent_mob = parent -/datum/component/follow/Destroy(force, silent) +/datum/component/follow/Destroy(force) UnregisterSignal(parent, COMSIG_HOSTILE_MOB_LOST_TARGET) UnregisterSignal(parent, COMSIG_CLICK_ALT) parent_mob = null diff --git a/modular_skyrat/modules/black_mesa/code/gateway.dm b/modular_nova/modules/black_mesa/code/gateway.dm similarity index 100% rename from modular_skyrat/modules/black_mesa/code/gateway.dm rename to modular_nova/modules/black_mesa/code/gateway.dm diff --git a/modular_skyrat/modules/black_mesa/code/ghost_spawners.dm b/modular_nova/modules/black_mesa/code/ghost_spawners.dm similarity index 91% rename from modular_skyrat/modules/black_mesa/code/ghost_spawners.dm rename to modular_nova/modules/black_mesa/code/ghost_spawners.dm index 416def1973aa42..1adc72bd81cb90 100644 --- a/modular_skyrat/modules/black_mesa/code/ghost_spawners.dm +++ b/modular_nova/modules/black_mesa/code/ghost_spawners.dm @@ -16,7 +16,7 @@ /datum/outfit/science_team name = "Scientist" - uniform = /obj/item/clothing/under/rank/rnd/scientist/skyrat/hlscience + uniform = /obj/item/clothing/under/rank/rnd/scientist/nova/hlscience suit = /obj/item/clothing/suit/toggle/labcoat shoes = /obj/item/clothing/shoes/laceup back = /obj/item/storage/backpack @@ -91,8 +91,8 @@ /obj/item/clothing/under/rank/security/officer/hecu //Subtype of security for armor (and because I dont want to repath it) name = "urban camouflage BDU" desc = "A baggy military camouflage uniform with an ERDL pattern. The range of whites and greys proves useful in urban environments." - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/syndicate.dmi' //Camo goes into the syndicate.dmi - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/syndicate.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/under/syndicate.dmi' //Camo goes into the syndicate.dmi + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/syndicate.dmi' icon_state = "urban_camo" inhand_icon_state = "w_suit" uses_advanced_reskins = FALSE @@ -100,9 +100,9 @@ /obj/item/storage/backpack/ert/odst/hecu name = "hecu backpack" - icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecucloth.dmi' - worn_icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob.dmi' - worn_icon_digi = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob_digi.dmi' + icon = 'modular_nova/modules/awaymissions_nova/icons/hecucloth.dmi' + worn_icon = 'modular_nova/modules/awaymissions_nova/icons/hecumob.dmi' + worn_icon_digi = 'modular_nova/modules/awaymissions_nova/icons/hecumob_digi.dmi' icon_state = "hecu_pack" worn_icon_state = "hecu_pack" uses_advanced_reskins = TRUE @@ -119,9 +119,9 @@ /obj/item/storage/belt/military/assault/hecu name = "hecu warbelt" - icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecucloth.dmi' - worn_icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob.dmi' - worn_icon_digi = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob_digi.dmi' + icon = 'modular_nova/modules/awaymissions_nova/icons/hecucloth.dmi' + worn_icon = 'modular_nova/modules/awaymissions_nova/icons/hecumob.dmi' + worn_icon_digi = 'modular_nova/modules/awaymissions_nova/icons/hecumob_digi.dmi' icon_state = "hecu_belt" worn_icon_state = "hecu_belt" uses_advanced_reskins = TRUE @@ -154,7 +154,6 @@ ) id = /obj/item/card/id id_trim = /datum/id_trim/hecu - skillchips = list(/obj/item/skillchip/chameleon/reload) /datum/outfit/hecu/post_equip(mob/living/carbon/human/equipped_human, visualsOnly) . = ..() @@ -206,7 +205,6 @@ ) id = /obj/item/card/id id_trim = /datum/id_trim/hecu_leader - skillchips = list(/obj/item/skillchip/chameleon/reload) /datum/outfit/hecu/leader/post_equip(mob/living/carbon/human/equipped_human, visualsOnly) . = ..() diff --git a/modular_nova/modules/black_mesa/code/guns.dm b/modular_nova/modules/black_mesa/code/guns.dm new file mode 100644 index 00000000000000..0d46c86bec5b8e --- /dev/null +++ b/modular_nova/modules/black_mesa/code/guns.dm @@ -0,0 +1,35 @@ +/obj/item/gun/ballistic/automatic/laser/marksman // Cheap replacement for a gauss rifle. + name = "designated marksman rifle" + desc = "A special laser beam sniper rifle designed by a certain now defunct research facility." + icon_state = "ctfmarksman" + inhand_icon_state = "ctfmarksman" + accepted_magazine_type = /obj/item/ammo_box/magazine/recharge/marksman + force = 15 + weapon_weight = WEAPON_HEAVY + fire_delay = 4 SECONDS + fire_sound = 'modular_nova/modules/sec_haul/sound/chaingun_fire.ogg' + +/obj/item/gun/ballistic/automatic/laser/marksman/Initialize(mapload) + . = ..() + AddComponent(/datum/component/scope, range_modifier = 1.5) + +/obj/item/ammo_box/magazine/recharge/marksman + ammo_type = /obj/item/ammo_casing/laser/marksman + max_ammo = 5 + +/obj/item/ammo_casing/laser/marksman + projectile_type = /obj/projectile/beam/marksman + +/obj/item/ammo_casing/laser/marksman/Initialize(mapload) + . = ..() + AddElement(/datum/element/delete_on_drop) + +/obj/projectile/beam/marksman + name = "laser beam" + damage = 70 + armour_penetration = 30 + hitscan = TRUE + icon_state = "gaussstrong" + tracer_type = /obj/effect/projectile/tracer/solar + muzzle_type = /obj/effect/projectile/muzzle/solar + impact_type = /obj/effect/projectile/impact/solar diff --git a/modular_skyrat/modules/black_mesa/code/healing_puddle.dm b/modular_nova/modules/black_mesa/code/healing_puddle.dm similarity index 86% rename from modular_skyrat/modules/black_mesa/code/healing_puddle.dm rename to modular_nova/modules/black_mesa/code/healing_puddle.dm index 4e75992c125385..2aa2c36a414752 100644 --- a/modular_skyrat/modules/black_mesa/code/healing_puddle.dm +++ b/modular_nova/modules/black_mesa/code/healing_puddle.dm @@ -14,5 +14,5 @@ /obj/structure/water_source/puddle/healing/process(seconds_per_tick) for(var/mob/living/iterating_mob in loc) iterating_mob.heal_overall_damage(heal_amount, heal_amount) - playsound(src, 'modular_skyrat/modules/emotes/sound/emotes/jelly_scream.ogg', 100) + playsound(src, 'modular_nova/modules/emotes/sound/emotes/jelly_scream.ogg', 100) diff --git a/modular_skyrat/modules/black_mesa/code/lambda_teleporter.dm b/modular_nova/modules/black_mesa/code/lambda_teleporter.dm similarity index 87% rename from modular_skyrat/modules/black_mesa/code/lambda_teleporter.dm rename to modular_nova/modules/black_mesa/code/lambda_teleporter.dm index 469341b59a5d45..554fa7bc8a6e59 100644 --- a/modular_skyrat/modules/black_mesa/code/lambda_teleporter.dm +++ b/modular_nova/modules/black_mesa/code/lambda_teleporter.dm @@ -1,6 +1,6 @@ /datum/looping_sound/lambda - mid_sounds = list('modular_skyrat/modules/black_mesa/sound/lc_mainbeam.ogg' = 1) + mid_sounds = list('modular_nova/modules/black_mesa/sound/lc_mainbeam.ogg' = 1) mid_length = 8.1 SECONDS volume = 100 @@ -31,7 +31,7 @@ /obj/effect/bump_teleporter/lambda/teleport_action(atom/movable/target, turf/destination) // Play sound before moving. - playsound(src, 'modular_skyrat/modules/black_mesa/sound/lc_teleport.ogg', 100) + playsound(src, 'modular_nova/modules/black_mesa/sound/lc_teleport.ogg', 100) . = ..() diff --git a/modular_skyrat/modules/black_mesa/code/mapping_fluff.dm b/modular_nova/modules/black_mesa/code/mapping_fluff.dm similarity index 81% rename from modular_skyrat/modules/black_mesa/code/mapping_fluff.dm rename to modular_nova/modules/black_mesa/code/mapping_fluff.dm index b9c880e9a82c5d..c886da17934f45 100644 --- a/modular_skyrat/modules/black_mesa/code/mapping_fluff.dm +++ b/modular_nova/modules/black_mesa/code/mapping_fluff.dm @@ -19,15 +19,15 @@ /obj/structure/mineral_door/xen name = "organic door" color = "#ff8d58" - icon = 'modular_skyrat/modules/black_mesa/icons/xen_door.dmi' + icon = 'modular_nova/modules/black_mesa/icons/xen_door.dmi' icon_state = "resin" - openSound = 'modular_skyrat/modules/black_mesa/sound/xen_door.ogg' - closeSound = 'modular_skyrat/modules/black_mesa/sound/xen_door.ogg' + openSound = 'modular_nova/modules/black_mesa/sound/xen_door.ogg' + closeSound = 'modular_nova/modules/black_mesa/sound/xen_door.ogg' /obj/machinery/door/puzzle/keycard/xen name = "locktight organic door" desc = "An oddly robust organic looking door." - icon = 'modular_skyrat/modules/black_mesa/icons/xen_door.dmi' + icon = 'modular_nova/modules/black_mesa/icons/xen_door.dmi' icon_state = "resin" puzzle_id = "xen" @@ -57,7 +57,7 @@ /obj/structure/pod name = "supply pod" desc = "Someone must have sent this a long way." - icon = 'modular_skyrat/modules/black_mesa/icons/structures.dmi' + icon = 'modular_nova/modules/black_mesa/icons/structures.dmi' icon_state = "pod" pixel_x = SUPPLYPOD_X_OFFSET anchored = TRUE diff --git a/modular_nova/modules/black_mesa/code/mobs/bullsquid.dm b/modular_nova/modules/black_mesa/code/mobs/bullsquid.dm new file mode 100644 index 00000000000000..33aeb889c29217 --- /dev/null +++ b/modular_nova/modules/black_mesa/code/mobs/bullsquid.dm @@ -0,0 +1,50 @@ +/mob/living/simple_animal/hostile/blackmesa/xen/bullsquid + name = "bullsquid" + desc = "Some highly aggressive alien creature. Thrives in toxic environments." + icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi' + icon_state = "bullsquid" + icon_living = "bullsquid" + icon_dead = "bullsquid_dead" + icon_gib = null + mob_biotypes = list(MOB_ORGANIC, MOB_BEAST) + environment_smash = ENVIRONMENT_SMASH_STRUCTURES + speak_chance = 1 + speak_emote = list("growls") + emote_taunt = list("growls", "snarls", "grumbles") + taunt_chance = 100 + turns_per_move = 7 + maxHealth = 110 + health = 110 + obj_damage = 50 + harm_intent_damage = 15 + melee_damage_lower = 15 + melee_damage_upper = 15 + ranged = TRUE + retreat_distance = 4 + minimum_distance = 4 + dodging = TRUE + projectiletype = /obj/projectile/bullsquid + projectilesound = 'modular_nova/modules/black_mesa/sound/mobs/bullsquid/goo_attack3.ogg' + melee_damage_upper = 18 + attack_sound = 'modular_nova/modules/black_mesa/sound/mobs/bullsquid/attack1.ogg' + gold_core_spawnable = HOSTILE_SPAWN + alert_sounds = list( + 'modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect1.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect2.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect3.ogg' + ) + +/obj/projectile/bullsquid + name = "nasty ball of ooze" + icon_state = "neurotoxin" + damage = 5 + damage_type = BURN + knockdown = 20 + armor_flag = BIO + impact_effect_type = /obj/effect/temp_visual/impact_effect/neurotoxin + hitsound = 'modular_nova/modules/black_mesa/sound/mobs/bullsquid/splat1.ogg' + hitsound_wall = 'modular_nova/modules/black_mesa/sound/mobs/bullsquid/splat1.ogg' + +/obj/projectile/bullsquid/on_hit(atom/target, blocked = 0, pierce_hit) + new /obj/effect/decal/cleanable/greenglow(target.loc) + return ..() diff --git a/modular_skyrat/modules/black_mesa/code/mobs/gordon_freeman.dm b/modular_nova/modules/black_mesa/code/mobs/gordon_freeman.dm similarity index 93% rename from modular_skyrat/modules/black_mesa/code/mobs/gordon_freeman.dm rename to modular_nova/modules/black_mesa/code/mobs/gordon_freeman.dm index db289f519e17b1..641ec6f2cc4e3e 100644 --- a/modular_skyrat/modules/black_mesa/code/mobs/gordon_freeman.dm +++ b/modular_nova/modules/black_mesa/code/mobs/gordon_freeman.dm @@ -18,7 +18,7 @@ melee_damage_lower = 45 melee_damage_upper = 45 wander = FALSE - attack_sound = 'modular_skyrat/master_files/sound/weapons/crowbar2.ogg' + attack_sound = 'modular_nova/master_files/sound/weapons/crowbar2.ogg' loot = list(/obj/item/crowbar/freeman/ultimate, /obj/item/keycard/freeman_boss_exit) gold_core_spawnable = NO_SPAWN @@ -43,7 +43,7 @@ /obj/machinery/door/puzzle/keycard/xen/freeman_boss_entry name = "entry door" desc = "Complete the puzzle to open this door." - icon = 'modular_skyrat/modules/black_mesa/icons/xen_door.dmi' + icon = 'modular_nova/modules/black_mesa/icons/xen_door.dmi' icon_state = "resin" puzzle_id = "freeman_entry" @@ -55,7 +55,7 @@ /obj/machinery/door/puzzle/keycard/xen/freeman_boss_exit name = "exit door" desc = "You must defeat him." - icon = 'modular_skyrat/modules/black_mesa/icons/xen_door.dmi' + icon = 'modular_nova/modules/black_mesa/icons/xen_door.dmi' icon_state = "resin" puzzle_id = "freeman_exit" @@ -79,7 +79,7 @@ /datum/outfit/gordon_freeman name = "Gordon Freeman" - uniform = /obj/item/clothing/under/rank/rnd/scientist/skyrat/hlscience + uniform = /obj/item/clothing/under/rank/rnd/scientist/nova/hlscience head = /obj/item/clothing/head/helmet/space/hev_suit ears = /obj/item/radio/headset/headset_cent/commander belt = /obj/item/storage/belt/utility/full diff --git a/modular_skyrat/modules/black_mesa/code/mobs/headcrab.dm b/modular_nova/modules/black_mesa/code/mobs/headcrab.dm similarity index 83% rename from modular_skyrat/modules/black_mesa/code/mobs/headcrab.dm rename to modular_nova/modules/black_mesa/code/mobs/headcrab.dm index 75e473b919643e..fc19cfa526a498 100644 --- a/modular_skyrat/modules/black_mesa/code/mobs/headcrab.dm +++ b/modular_nova/modules/black_mesa/code/mobs/headcrab.dm @@ -1,7 +1,7 @@ /mob/living/simple_animal/hostile/blackmesa/xen/headcrab name = "headcrab" desc = "Don't let it latch onto your hea-... hey, that's kinda cool." - icon = 'modular_skyrat/modules/black_mesa/icons/mobs.dmi' + icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi' icon_state = "headcrab" icon_living = "headcrab" icon_dead = "headcrab_dead" @@ -29,7 +29,7 @@ gold_core_spawnable = HOSTILE_SPAWN loot = list(/obj/item/stack/sheet/bone) alert_sounds = list( - 'modular_skyrat/modules/black_mesa/sound/mobs/headcrab/alert1.ogg' + 'modular_nova/modules/black_mesa/sound/mobs/headcrab/alert1.ogg' ) var/is_zombie = FALSE var/mob/living/carbon/human/oldguy @@ -40,27 +40,23 @@ /mob/living/simple_animal/hostile/blackmesa/xen/headcrab/Initialize(mapload) . = ..() - charge = new /datum/action/cooldown/mob_cooldown/charge/basic_charge() + charge = new(src) charge.Grant(src) charge.cooldown_time = 0 -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab/Destroy() - QDEL_NULL(charge) - return ..() - /mob/living/simple_animal/hostile/blackmesa/xen/headcrab/Shoot(atom/targeted_atom) throw_at(targeted_atom, throw_at_range, throw_at_speed) playsound( src, - pick('modular_skyrat/modules/black_mesa/sound/mobs/headcrab/attack1.ogg', 'modular_skyrat/modules/black_mesa/sound/mobs/headcrab/attack2.ogg', 'modular_skyrat/modules/black_mesa/sound/mobs/headcrab/attack3.ogg'), + pick('modular_nova/modules/black_mesa/sound/mobs/headcrab/attack1.ogg', 'modular_nova/modules/black_mesa/sound/mobs/headcrab/attack2.ogg', 'modular_nova/modules/black_mesa/sound/mobs/headcrab/attack3.ogg'), 100 ) /mob/living/simple_animal/hostile/blackmesa/xen/headcrab/death(gibbed) . = ..() playsound(src, pick(list( - 'modular_skyrat/modules/black_mesa/sound/mobs/headcrab/die1.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/headcrab/die2.ogg' + 'modular_nova/modules/black_mesa/sound/mobs/headcrab/die1.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/headcrab/die2.ogg' )), 100) /mob/living/simple_animal/hostile/blackmesa/xen/headcrab/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) @@ -69,7 +65,7 @@ return if(!isliving(hit_atom)) return - playsound(src, 'modular_skyrat/modules/black_mesa/sound/mobs/headcrab/headbite.ogg', 100) + playsound(src, 'modular_nova/modules/black_mesa/sound/mobs/headcrab/headbite.ogg', 100) var/mob/living/hit_mob = hit_atom hit_mob.apply_damage(melee_damage_upper, BRUTE) if(!ishuman(hit_atom)) @@ -133,7 +129,7 @@ . = ..() if(is_zombie) copy_overlays(oldguy, TRUE) - var/mutable_appearance/blob_head_overlay = mutable_appearance('modular_skyrat/modules/black_mesa/icons/mobs.dmi', "headcrab_zombie") + var/mutable_appearance/blob_head_overlay = mutable_appearance('modular_nova/modules/black_mesa/icons/mobs.dmi', "headcrab_zombie") add_overlay(blob_head_overlay) /mob/living/simple_animal/hostile/blackmesa/xen/headcrab/fast diff --git a/modular_nova/modules/black_mesa/code/mobs/headcrab_zombie.dm b/modular_nova/modules/black_mesa/code/mobs/headcrab_zombie.dm new file mode 100644 index 00000000000000..d66d874b80c5ed --- /dev/null +++ b/modular_nova/modules/black_mesa/code/mobs/headcrab_zombie.dm @@ -0,0 +1,89 @@ +/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie + name = "headcrab zombie" + desc = "This unlucky person has had a headcrab latch onto their head. Ouch." + icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi' + icon_state = "zombie" + icon_living = "zombie" + maxHealth = 110 + health = 110 + icon_gib = null + icon_dead = "zombie_dead" + speak_chance = 1 + speak_emote = list("growls") + speed = 1 + emote_taunt = list("growls", "snarls", "grumbles") + taunt_chance = 100 + melee_damage_lower = 21 + melee_damage_upper = 21 + attack_sound = 'modular_nova/modules/black_mesa/sound/mobs/zombies/claw_strike.ogg' + gold_core_spawnable = HOSTILE_SPAWN + alert_cooldown_time = 8 SECONDS + alert_sounds = list( + 'modular_nova/modules/black_mesa/sound/mobs/zombies/alert1.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/zombies/alert2.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/zombies/alert3.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/zombies/alert4.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/zombies/alert5.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/zombies/alert6.ogg', + ) + +/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/death(gibbed) + new /obj/effect/gibspawner/human(get_turf(src)) + return ..() + +/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/scientist + name = "zombified scientist" + desc = "Even after death, I still have to wear this horrible tie!" + icon_state = "scientist_zombie" + icon_living = "scientist_zombie" + loot = list(/obj/effect/mob_spawn/corpse/human/scientist_zombie) + del_on_death = 1 + + +/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/guard + name = "zombified guard" + desc = "About that brain I owed ya!" + icon_state = "security_zombie" + icon_living = "security_zombie" + maxHealth = 140 // Armor! + health = 140 + loot = list(/obj/effect/mob_spawn/corpse/human/guard_zombie) + del_on_death = 1 + +/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/hecu + name = "zombified marine" + desc = "MY. ASS. IS. DEAD." + icon_state = "hecu_zombie" + icon_living = "hecu_zombie" + maxHealth = 190 // More armor! + health = 190 + loot = list(/obj/effect/mob_spawn/corpse/human/hecu_zombie) + del_on_death = 1 + +/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/hev + name = "zombified hazardous environment specialist" + desc = "User death... surpassed." + icon_state = "hev_zombie" + icon_living = "hev_zombie" + maxHealth = 250 + health = 250 + alert_sounds = list( + 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv1.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv2.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv3.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv4.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv5.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv6.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv7.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv8.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv9.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv10.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv11.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv12.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv13.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv14.ogg', + ) + + + + diff --git a/modular_nova/modules/black_mesa/code/mobs/houndeye.dm b/modular_nova/modules/black_mesa/code/mobs/houndeye.dm new file mode 100644 index 00000000000000..f563ac8018bb5c --- /dev/null +++ b/modular_nova/modules/black_mesa/code/mobs/houndeye.dm @@ -0,0 +1,52 @@ +/mob/living/simple_animal/hostile/blackmesa/xen/houndeye + name = "houndeye" + desc = "Some highly aggressive alien creature. Thrives in toxic environments." + icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi' + icon_state = "houndeye" + icon_living = "houndeye" + icon_dead = "houndeye_dead" + icon_gib = null + mob_biotypes = list(MOB_ORGANIC, MOB_BEAST) + environment_smash = ENVIRONMENT_SMASH_STRUCTURES + speak_chance = 1 + speak_emote = list("growls") + speed = 1 + emote_taunt = list("growls", "snarls", "grumbles") + taunt_chance = 100 + turns_per_move = 7 + maxHealth = 100 + health = 100 + obj_damage = 50 + harm_intent_damage = 10 + melee_damage_lower = 20 + melee_damage_upper = 20 + attack_sound = 'sound/weapons/bite.ogg' + gold_core_spawnable = HOSTILE_SPAWN + //Since those can survive on Xen, I'm pretty sure they can thrive on any atmosphere + + minbodytemp = 0 + maxbodytemp = 1500 + loot = list(/obj/item/stack/sheet/bluespace_crystal) + alert_sounds = list( + 'modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert1.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert2.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert3.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert4.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert5.ogg' + ) + /// Charging ability + var/datum/action/cooldown/mob_cooldown/charge/basic_charge/charge + +/mob/living/simple_animal/hostile/blackmesa/xen/houndeye/Initialize(mapload) + . = ..() + charge = new(src) + charge.Grant(src) + +/mob/living/simple_animal/hostile/blackmesa/xen/houndeye/Destroy() + charge = null + return ..() + +/mob/living/simple_animal/hostile/blackmesa/xen/houndeye/OpenFire() + if(client) + return + charge.Trigger(target) diff --git a/modular_nova/modules/black_mesa/code/mobs/human_mobs.dm b/modular_nova/modules/black_mesa/code/mobs/human_mobs.dm new file mode 100644 index 00000000000000..aa21f2779d7814 --- /dev/null +++ b/modular_nova/modules/black_mesa/code/mobs/human_mobs.dm @@ -0,0 +1,226 @@ +/* +* HECU +*/ + +/mob/living/simple_animal/hostile/blackmesa/hecu + name = "HECU Grunt" + desc = "I didn't sign on for this shit. Monsters, sure, but civilians? Who ordered this operation anyway?" + icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi' + icon_state = "hecu_melee" + icon_living = "hecu_melee" + icon_dead = "hecu_dead" + icon_gib = "syndicate_gib" + mob_biotypes = MOB_ORGANIC|MOB_HUMANOID + sentience_type = SENTIENCE_HUMANOID + speak_chance = 10 + speak = list("Stop right there!") + turns_per_move = 5 + speed = 0 + stat_attack = HARD_CRIT + robust_searching = 1 + maxHealth = 150 + health = 150 + harm_intent_damage = 5 + melee_damage_lower = 10 + melee_damage_upper = 10 + attack_verb_continuous = "punches" + attack_verb_simple = "punch" + attack_sound = 'sound/weapons/punch1.ogg' + combat_mode = TRUE + loot = list(/obj/effect/gibspawner/human, /obj/item/melee/baton) + atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) + unsuitable_atmos_damage = 7.5 + faction = list(FACTION_HECU) + check_friendly_fire = 1 + status_flags = CANPUSH + del_on_death = 1 + dodging = TRUE + rapid_melee = 2 + footstep_type = FOOTSTEP_MOB_SHOE + alert_sounds = list( + 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert01.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert03.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert04.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert05.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert06.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert07.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert08.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert10.ogg' + ) + + +/mob/living/simple_animal/hostile/blackmesa/hecu/ranged + ranged = TRUE + retreat_distance = 5 + minimum_distance = 5 + icon_state = "hecu_ranged" + icon_living = "hecu_ranged" + casingtype = /obj/item/ammo_casing/a50ae + projectilesound = 'sound/weapons/gun/pistol/shot.ogg' + loot = list(/obj/effect/gibspawner/human, /obj/effect/spawner/random/hecu_deagle) + dodging = TRUE + rapid_melee = 1 + +/mob/living/simple_animal/hostile/blackmesa/hecu/ranged/smg + rapid = 3 + icon_state = "hecu_ranged_smg" + icon_living = "hecu_ranged_smg" + casingtype = /obj/item/ammo_casing/c34 + projectilesound = 'sound/weapons/gun/smg/shot.ogg' + loot = list(/obj/effect/gibspawner/human, /obj/effect/spawner/random/hecu_smg) + +/mob/living/simple_animal/hostile/blackmesa/sec + name = "Security Guard" + desc = "About that beer I owe'd ya!" + icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi' + icon_state = "security_guard_melee" + icon_living = "security_guard_melee" + icon_dead = "security_guard_dead" + icon_gib = "syndicate_gib" + mob_biotypes = MOB_ORGANIC|MOB_HUMANOID + sentience_type = SENTIENCE_HUMANOID + turns_per_move = 5 + speed = 0 + stat_attack = HARD_CRIT + robust_searching = 1 + maxHealth = 100 + health = 100 + harm_intent_damage = 5 + melee_damage_lower = 7 + melee_damage_upper = 7 + attack_verb_continuous = "punches" + attack_verb_simple = "punch" + attack_sound = 'sound/weapons/punch1.ogg' + loot = list(/obj/effect/gibspawner/human, /obj/item/clothing/suit/armor/vest/blueshirt) + atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) + unsuitable_atmos_damage = 7.5 + faction = list(FACTION_STATION, FACTION_NEUTRAL) + check_friendly_fire = 1 + status_flags = CANPUSH + del_on_death = TRUE + combat_mode = TRUE + dodging = TRUE + rapid_melee = 2 + footstep_type = FOOTSTEP_MOB_SHOE + alert_sounds = list( + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance01.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance02.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance02.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance03.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance04.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance05.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance06.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance07.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance08.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance09.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance10.ogg' + ) + var/list/follow_sounds = list( + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon01.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon02.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon03.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway01.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway02.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway03.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway04.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway05.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway06.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway07.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway08.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo01.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo02.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo03.ogg', + ) + var/list/unfollow_sounds = list( + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot01.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot02.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot03.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot04.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot05.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere01.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere02.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere03.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere01.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere02.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere03.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere04.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere05.ogg', + ) + var/follow_speed = 2 + var/follow_distance = 2 + +/mob/living/simple_animal/hostile/blackmesa/sec/Initialize(mapload) + . = ..() + AddComponent(/datum/component/follow, follow_sounds, unfollow_sounds, follow_distance, follow_speed) + + +/mob/living/simple_animal/hostile/blackmesa/sec/ranged + ranged = TRUE + retreat_distance = 5 + minimum_distance = 5 + icon_state = "security_guard_ranged" + icon_living = "security_guard_ranged" + casingtype = /obj/item/ammo_casing/c9mm + projectilesound = 'sound/weapons/gun/pistol/shot.ogg' + loot = list(/obj/effect/gibspawner/human, /obj/item/clothing/suit/armor/vest/blueshirt, /obj/item/gun/ballistic/automatic/pistol/sol) + rapid_melee = 1 + +/mob/living/simple_animal/hostile/blackmesa/blackops + name = "black operative" + desc = "Why do we always have to clean up a mess the grunts can't handle?" + icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi' + icon_state = "blackops" + icon_living = "blackops" + icon_dead = "blackops" + icon_gib = "syndicate_gib" + mob_biotypes = MOB_ORGANIC|MOB_HUMANOID + sentience_type = SENTIENCE_HUMANOID + speak_chance = 10 + speak = list("Got a visual!") + turns_per_move = 5 + speed = 0 + stat_attack = HARD_CRIT + robust_searching = 1 + maxHealth = 200 + health = 200 + harm_intent_damage = 25 + melee_damage_lower = 30 + melee_damage_upper = 30 + attack_verb_continuous = "strikes" + attack_verb_simple = "strikes" + attack_sound = 'sound/effects/woodhit.ogg' + combat_mode = TRUE + loot = list(/obj/effect/gibspawner/human) + atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) + unsuitable_atmos_damage = 7.5 + faction = list(FACTION_BLACKOPS) + check_friendly_fire = 1 + status_flags = CANPUSH + del_on_death = 1 + dodging = TRUE + rapid_melee = 2 + footstep_type = FOOTSTEP_MOB_SHOE + alert_sounds = list( + 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert01.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert02.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert03.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert04.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert05.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert06.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert07.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert08.ogg' + ) + + +/mob/living/simple_animal/hostile/blackmesa/blackops/ranged + ranged = TRUE + rapid = 2 + retreat_distance = 5 + minimum_distance = 5 + icon_state = "blackops_ranged" + icon_living = "blackops_ranged" + casingtype = /obj/item/ammo_casing/c40sol + projectilesound = 'modular_nova/modules/modular_weapons/sounds/rifle_heavy.ogg' + attack_sound = 'sound/weapons/punch1.ogg' + loot = list(/obj/effect/gibspawner/human, /obj/item/ammo_box/magazine/c40sol_rifle/standard) + rapid_melee = 1 diff --git a/modular_skyrat/modules/black_mesa/code/mobs/mob_spawners.dm b/modular_nova/modules/black_mesa/code/mobs/mob_spawners.dm similarity index 97% rename from modular_skyrat/modules/black_mesa/code/mobs/mob_spawners.dm rename to modular_nova/modules/black_mesa/code/mobs/mob_spawners.dm index f86559c77482c6..7a173a80c74309 100644 --- a/modular_skyrat/modules/black_mesa/code/mobs/mob_spawners.dm +++ b/modular_nova/modules/black_mesa/code/mobs/mob_spawners.dm @@ -20,7 +20,7 @@ /obj/effect/random_mob_placer name = "mob placer" - icon = 'modular_skyrat/modules/black_mesa/icons/mapping_helpers.dmi' + icon = 'modular_nova/modules/black_mesa/icons/mapping_helpers.dmi' icon_state = "mobspawner" var/list/possible_mobs = list(/mob/living/simple_animal/hostile/blackmesa/xen/headcrab) @@ -117,7 +117,7 @@ /datum/outfit/sciteamcorpse name = "BMRF Science Team Corpse" - uniform = /obj/item/clothing/under/rank/rnd/scientist/skyrat/hlscience + uniform = /obj/item/clothing/under/rank/rnd/scientist/nova/hlscience suit = /obj/item/clothing/suit/toggle/labcoat shoes = /obj/item/clothing/shoes/laceup gloves = /obj/item/clothing/gloves/latex diff --git a/modular_nova/modules/black_mesa/code/mobs/nihilanth.dm b/modular_nova/modules/black_mesa/code/mobs/nihilanth.dm new file mode 100644 index 00000000000000..fabda7e4c0e908 --- /dev/null +++ b/modular_nova/modules/black_mesa/code/mobs/nihilanth.dm @@ -0,0 +1,67 @@ +/mob/living/simple_animal/hostile/blackmesa/xen/nihilanth + name = "nihilanth" + desc = "Holy shit." + icon = 'modular_nova/modules/black_mesa/icons/nihilanth.dmi' + icon_state = "nihilanth" + icon_living = "nihilanth" + SET_BASE_PIXEL(-32, -32) + speed = 3 + bound_height = 64 + bound_width = 64 + icon_dead = "bullsquid_dead" + maxHealth = 3000 + health = 3000 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + projectilesound = 'sound/weapons/lasercannonfire.ogg' + projectiletype = /obj/projectile/nihilanth + ranged = TRUE + rapid = 3 + alert_cooldown = 2 MINUTES + harm_intent_damage = 50 + melee_damage_lower = 30 + melee_damage_upper = 40 + attack_verb_continuous = "lathes" + attack_verb_simple = "lathe" + attack_sound = 'sound/weapons/punch1.ogg' + status_flags = NONE + del_on_death = TRUE + wander = TRUE + loot = list(/obj/effect/gibspawner/xeno, /obj/item/stack/sheet/bluespace_crystal/fifty, /obj/item/key/gateway, /obj/item/uber_teleporter) + movement_type = FLYING + +/obj/item/stack/sheet/bluespace_crystal/fifty + amount = 50 + +/obj/projectile/nihilanth + name = "portal energy" + icon_state = "seedling" + damage = 20 + damage_type = BURN + light_range = 2 + armor_flag = ENERGY + light_color = LIGHT_COLOR_BRIGHT_YELLOW + hitsound = 'sound/weapons/sear.ogg' + hitsound_wall = 'sound/weapons/effects/searwall.ogg' + nondirectional_sprite = TRUE + +/mob/living/simple_animal/hostile/blackmesa/xen/nihilanth/Aggro() + . = ..() + if(!(world.time <= alert_cooldown_time)) + alert_cooldown_time = world.time + alert_cooldown + switch(health) + if(0 to 999) + playsound(src, pick(list('modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_pain01.ogg', 'modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_freeeemmaan01.ogg')), 100) + if(1000 to 2999) + playsound(src, pick(list('modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_youalldie01.ogg', 'modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_foryouhewaits01.ogg')), 100) + if(3000 to 6000) + playsound(src, pick(list('modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_whathavedone01.ogg', 'modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_deceiveyou01.ogg')), 100) + else + playsound(src, pick(list('modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_thetruth01.ogg', 'modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_iamthelast01.ogg')), 100) + set_combat_mode(TRUE) + +/mob/living/simple_animal/hostile/blackmesa/xen/nihilanth/death(gibbed) + . = ..() + +/mob/living/simple_animal/hostile/blackmesa/xen/nihilanth/LoseAggro() + . = ..() + set_combat_mode(FALSE) diff --git a/modular_nova/modules/black_mesa/code/mobs/vortigaunt.dm b/modular_nova/modules/black_mesa/code/mobs/vortigaunt.dm new file mode 100644 index 00000000000000..1fc62c86e32489 --- /dev/null +++ b/modular_nova/modules/black_mesa/code/mobs/vortigaunt.dm @@ -0,0 +1,64 @@ +/mob/living/simple_animal/hostile/blackmesa/xen/vortigaunt + name = "vortigaunt" + desc = "There is no distance between us. No false veils of time or space may intervene." + icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi' + icon_state = "vortigaunt" + icon_living = "vortigaunt" + icon_dead = "vortigaunt_dead" + icon_gib = null + gender = MALE + faction = list(FACTION_STATION, FACTION_NEUTRAL) + mob_biotypes = list(MOB_ORGANIC, MOB_BEAST) + speak_chance = 1 + speak_emote = list("galungs") + speed = 1 + emote_taunt = list("galalungas", "galungas", "gungs") + projectiletype = /obj/projectile/beam/emitter/hitscan + projectilesound = 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot4.ogg' + ranged_cooldown_time = 5 SECONDS + ranged_message = "fires" + taunt_chance = 100 + turns_per_move = 7 + maxHealth = 130 + health = 130 + speed = 3 + ranged = TRUE + dodging = TRUE + harm_intent_damage = 15 + melee_damage_lower = 10 + melee_damage_upper = 10 + retreat_distance = 5 + minimum_distance = 5 + attack_sound = 'sound/weapons/bite.ogg' + gold_core_spawnable = FRIENDLY_SPAWN + loot = list(/obj/item/stack/sheet/bone) + alert_sounds = list( + 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert01.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert01b.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert02.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert03.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert04.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert05.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert06.ogg', + ) + /// SOunds we play when asked to follow/unfollow. + var/list/follow_sounds = list( + 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue01.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue02.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue03.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue04.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue05.ogg', + 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue05a.ogg', + ) + var/follow_speed = 1 + var/follow_distance = 2 + +/mob/living/simple_animal/hostile/blackmesa/xen/vortigaunt/Initialize(mapload) + . = ..() + AddComponent(/datum/component/follow, follow_sounds, follow_sounds, follow_distance, follow_speed) + +/mob/living/simple_animal/hostile/blackmesa/xen/vortigaunt/slave + name = "slave vortigaunt" + desc = "Bound by the shackles of a sinister force. He does not want to hurt you." + icon_state = "vortigaunt_slave" + faction = list(FACTION_XEN) diff --git a/modular_skyrat/modules/black_mesa/code/objects.dm b/modular_nova/modules/black_mesa/code/objects.dm similarity index 100% rename from modular_skyrat/modules/black_mesa/code/objects.dm rename to modular_nova/modules/black_mesa/code/objects.dm diff --git a/modular_skyrat/modules/black_mesa/code/projectiles.dm b/modular_nova/modules/black_mesa/code/projectiles.dm similarity index 100% rename from modular_skyrat/modules/black_mesa/code/projectiles.dm rename to modular_nova/modules/black_mesa/code/projectiles.dm diff --git a/modular_nova/modules/black_mesa/code/rationpacks.dm b/modular_nova/modules/black_mesa/code/rationpacks.dm new file mode 100644 index 00000000000000..7c939f1d66d674 --- /dev/null +++ b/modular_nova/modules/black_mesa/code/rationpacks.dm @@ -0,0 +1,133 @@ +/// Handpicked list of various pizzas and "pizzas" to make sure it's both 'safe' (human-edible) and doesn't spawn the base type like the bomb pizza can. +#define EDIBLE_PIZZA_LIST list( \ + /obj/item/food/pizza/margherita, \ + /obj/item/food/pizza/meat, \ + /obj/item/food/pizza/mushroom, \ + /obj/item/food/pizza/vegetable, \ + /obj/item/food/pizza/donkpocket, \ + /obj/item/food/pizza/dank, \ + /obj/item/food/pizza/sassysage, \ + /obj/item/food/pizza/pineapple, \ + /obj/item/food/pizza/mothic_margherita, \ + /obj/item/food/pizza/mothic_firecracker, \ + /obj/item/food/pizza/mothic_five_cheese, \ + /obj/item/food/pizza/mothic_white_pie, \ + /obj/item/food/pizza/mothic_pesto, \ + /obj/item/food/pizza/mothic_garlic, \ + /obj/item/food/pizza/flatbread/rustic, \ + /obj/item/food/pizza/flatbread/italic, \ + /obj/item/food/pizza/flatbread/zmorgast, \ + /obj/item/food/pizza/flatbread/fish, \ + /obj/item/food/pizza/flatbread/mushroom, \ + /obj/item/food/pizza/flatbread/nutty, \ +) + +/obj/item/food/mre_course + name = "undefined MRE course" + desc = "Something you shouldn't see. But it's edible." + icon = 'modular_nova/modules/awaymissions_nova/icons/courses.dmi' + icon_state = "main_course" + food_reagents = list(/datum/reagent/consumable/nutriment = 20) + tastes = list("crayon powder" = 1) + foodtypes = VEGETABLES | GRAIN + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/mre_course/main + name = "MRE main course" + desc = "Main course of the ancient military ration designed for ground troops. This one is NOTHING." + tastes = list("strawberry" = 1, "vanilla" = 1, "chocolate" = 1) + +/obj/item/food/mre_course/main/beans + name = "MRE main course - Pork and Beans" + desc = "Main course of the ancient military ration designed for ground troops. This one is pork and beans covered in some tomato sauce." + tastes = list("beans" = 1, "pork" = 1, "tomato sauce" = 1) + foodtypes = MEAT | VEGETABLES + +/obj/item/food/mre_course/main/macaroni + name = "MRE main course - Macaroni and Cheese" + desc = "Main course of the ancient military ration designed for ground troops. This one is preboiled macaroni covered in some federal reserve cheese." + tastes = list("cold macaroni" = 1, "bland cheese" = 1) + foodtypes = DAIRY | GRAIN + +/obj/item/food/mre_course/main/rice + name = "MRE main course - Rice and Beef" + desc = "Main course of the ancient military ration designed for ground troops. This one is rice with beef, covered in gravy." + tastes = list("dense rice" = 1, "bits of beef" = 1, "gravy" = 1) + foodtypes = GRAIN | MEAT + +/obj/item/food/mre_course/side + name = "MRE side course" + desc = "Side course of the ancient military ration designed for ground troops. This one is NOTHING." + icon_state = "side_dish" + +/obj/item/food/mre_course/side/bread + name = "MRE side course - Cornbread" + desc = "Side course of the ancient military ration designed for ground troops. This one is cornbread." + tastes = list("cornbread" = 1) + foodtypes = GRAIN + +/obj/item/food/mre_course/side/pie + name = "MRE side course - Meat Pie" + desc = "Side course of the ancient military ration designed for ground troops. This one is some meat pie." + tastes = list("pie dough" = 1, "ground meat" = 1, "Texas" = 1) + foodtypes = MEAT | GRAIN + +/obj/item/food/mre_course/side/chicken + name = "MRE side course - Sweet 'n Sour Chicken" + desc = "Side course of the ancient military ration designed for ground troops. This one is some undefined chicken-looking meat covered in cheap reddish sauce." + tastes = list("bits of chicken meat" = 1, "sweet and sour sauce" = 1, "salt" = 1) + foodtypes = MEAT | FRIED + +/obj/item/food/mre_course/dessert + name = "MRE dessert" + desc = "Dessert of the ancient military ration designed for ground troops. This one is NOTHING." + icon_state = "dessert" + +/obj/item/food/mre_course/dessert/cookie + name = "MRE dessert - Cookie" + desc = "Dessert of the ancient military ration designed for ground troops. This one is a big dry cookie." + tastes = list("dryness" = 1, "hard cookie" = 1, "chocolate chip" = 1) + foodtypes = GRAIN | SUGAR + +/obj/item/food/mre_course/dessert/cake + name = "MRE dessert - Apple Pie" + desc = "Dessert of the ancient military ration designed for ground troops. This one is an amorphous apple pie." + tastes = list("apple" = 1, "moist cake" = 1, "sugar" = 1) + foodtypes = GRAIN | SUGAR | FRUIT + +/obj/item/food/mre_course/dessert/chocolate + name = "MRE dessert - Dark Chocolate" + desc = "Dessert of the ancient military ration designed for ground troops. This one is a dark bar of chocolate." + tastes = list("vanilla" = 1, "artificial chocolate" = 1, "chemicals" = 1) + foodtypes = JUNKFOOD | SUGAR + +/obj/item/storage/box/hecu_rations + name = "Meal, Ready-to-Eat" + desc = "A box containing a few rations and some chewing gum, for keeping a starving crayon-eater going." + icon = 'modular_nova/modules/awaymissions_nova/icons/mre_hecu.dmi' + icon_state = "mre_package" + illustration = null + +/obj/item/storage/box/hecu_rations/Initialize(mapload) + . = ..() + atom_storage.max_slots = 5 + +/obj/item/storage/box/hecu_rations/PopulateContents() + var/main_course = pick(/obj/item/food/mre_course/main/beans, /obj/item/food/mre_course/main/macaroni, /obj/item/food/mre_course/main/rice) + var/side_dish = pick(/obj/item/food/mre_course/side/bread, /obj/item/food/mre_course/side/pie, /obj/item/food/mre_course/side/chicken) + var/dessert = pick(/obj/item/food/mre_course/dessert/cookie, /obj/item/food/mre_course/dessert/cake, /obj/item/food/mre_course/dessert/chocolate) + new main_course(src) + new side_dish(src) + new dessert(src) + new /obj/item/storage/box/gum(src) + new /obj/item/food/spacers_sidekick(src) + +/obj/item/pizzabox/random + boxtag = "Randy's Surprise" + boxtag_set = TRUE + +/obj/item/pizzabox/random/Initialize(mapload) + . = ..() + if(!pizza) + var/random_pizza = pick(EDIBLE_PIZZA_LIST) + pizza = new random_pizza(src) diff --git a/modular_skyrat/modules/black_mesa/code/shield_pylon.dm b/modular_nova/modules/black_mesa/code/shield_pylon.dm similarity index 98% rename from modular_skyrat/modules/black_mesa/code/shield_pylon.dm rename to modular_nova/modules/black_mesa/code/shield_pylon.dm index b05cf664d5154b..35b6e5b1bb17b0 100644 --- a/modular_skyrat/modules/black_mesa/code/shield_pylon.dm +++ b/modular_nova/modules/black_mesa/code/shield_pylon.dm @@ -26,7 +26,7 @@ /obj/structure/xen_pylon name = "shield plant" desc = "It seems to be some kind of force field generator." - icon = 'modular_skyrat/modules/black_mesa/icons/plants.dmi' + icon = 'modular_nova/modules/black_mesa/icons/plants.dmi' icon_state = "crystal_pylon" max_integrity = 70 density = TRUE diff --git a/modular_skyrat/modules/black_mesa/code/shockplant.dm b/modular_nova/modules/black_mesa/code/shockplant.dm similarity index 95% rename from modular_skyrat/modules/black_mesa/code/shockplant.dm rename to modular_nova/modules/black_mesa/code/shockplant.dm index 78b357677cb20f..842b084b3878fd 100644 --- a/modular_skyrat/modules/black_mesa/code/shockplant.dm +++ b/modular_nova/modules/black_mesa/code/shockplant.dm @@ -2,7 +2,7 @@ /obj/structure/shockplant name = "electrical plant" desc = "It glows with a warm buzz." - icon = 'modular_skyrat/modules/black_mesa/icons/plants.dmi' + icon = 'modular_nova/modules/black_mesa/icons/plants.dmi' icon_state = "electric_plant" density = TRUE anchored = TRUE diff --git a/modular_skyrat/modules/black_mesa/code/spawners.dm b/modular_nova/modules/black_mesa/code/spawners.dm similarity index 100% rename from modular_skyrat/modules/black_mesa/code/spawners.dm rename to modular_nova/modules/black_mesa/code/spawners.dm diff --git a/modular_nova/modules/black_mesa/code/turfs.dm b/modular_nova/modules/black_mesa/code/turfs.dm new file mode 100644 index 00000000000000..7b30cba8e691de --- /dev/null +++ b/modular_nova/modules/black_mesa/code/turfs.dm @@ -0,0 +1,111 @@ +/turf/closed/mineral/black_mesa + turf_type = /turf/open/misc/ironsand/black_mesa + baseturfs = /turf/open/misc/ironsand/black_mesa + initial_gas_mix = OPENTURF_DEFAULT_ATMOS + +//Floors that no longer lead into space (innovative!) +/turf/open/misc/ironsand/black_mesa + baseturfs = /turf/open/misc/ironsand/black_mesa + initial_gas_mix = OPENTURF_DEFAULT_ATMOS + planetary_atmos = TRUE + +/obj/effect/baseturf_helper/black_mesa + name = "black mesa sand baseturf editor" + baseturf = /turf/open/misc/ironsand/black_mesa + +/obj/effect/baseturf_helper/black_mesa_xen + name = "xen baseturf editor" + baseturf = /turf/open/water/xen_acid + +/turf/closed/indestructible/rock/xen + name = "strange wall" + color = "#ac3b06" + baseturfs = /turf/closed/indestructible/rock/xen + +/turf/open/misc/xen + name = "strange weeds" + desc = "It feels soft to the touch, like a carpet... only... wet." + icon = 'modular_nova/modules/black_mesa/icons/xen_turfs.dmi' + icon_state = "xen_turf" + baseturfs = /turf/open/misc/xen + footstep = FOOTSTEP_GRASS + barefootstep = FOOTSTEP_GRASS + planetary_atmos = TRUE + +/turf/open/water/beach/xen + desc = "It's mirky and filled with strange organisms." + name = "xen water" + icon = 'modular_nova/modules/black_mesa/icons/xen_turfs.dmi' + baseturfs = /turf/open/water/beach/xen + initial_gas_mix = OPENTURF_DEFAULT_ATMOS + planetary_atmos = TRUE + +/turf/open/misc/beach/coastline_t/xen + desc = "It's mirky and filled with strange organisms." + name = "xen water" + icon = 'modular_nova/modules/black_mesa/icons/xen_turfs.dmi' + baseturfs = /turf/open/misc/beach/coastline_t/xen + initial_gas_mix = OPENTURF_DEFAULT_ATMOS + planetary_atmos = TRUE + +/turf/open/misc/beach/coastline_t/sandwater_inner/xen + desc = "It's mirky and filled with strange organisms." + name = "xen water" + icon = 'modular_nova/modules/black_mesa/icons/xen_turfs.dmi' + baseturfs = /turf/open/misc/beach/coastline_t/sandwater_inner/xen + initial_gas_mix = OPENTURF_DEFAULT_ATMOS + planetary_atmos = TRUE + +/turf/open/misc/beach/coastline_b/xen + name = "xen water" + desc = "It's mirky and filled with strange organisms." + icon = 'modular_nova/modules/black_mesa/icons/xen_turfs.dmi' + baseturfs = /turf/open/misc/beach/coastline_b/xen + initial_gas_mix = OPENTURF_DEFAULT_ATMOS + planetary_atmos = TRUE + +/turf/open/misc/dirt/planet/xen + name = "strange path" + color = "#ee5f1c" + baseturfs = /turf/open/misc/dirt/planet/xen + planetary_atmos = TRUE + +/turf/open/water/xen_acid + baseturfs = /turf/open/water/xen_acid + initial_gas_mix = OPENTURF_DEFAULT_ATMOS + planetary_atmos = TRUE + color = COLOR_VIBRANT_LIME + light_range = 2 + light_color = COLOR_VIBRANT_LIME + /// How much damage we deal if a mob enters us. + var/acid_damage = 30 + +/turf/open/water/xen_acid/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + . = ..() + if(isliving(arrived) && !istype(arrived, /mob/living/simple_animal/hostile/blackmesa/xen/bullsquid)) // Bull squid territory! + var/mob/living/unlucky_mob = arrived + unlucky_mob.adjustFireLoss(acid_damage) + playsound(unlucky_mob, 'sound/weapons/sear.ogg', 100, TRUE) + +/turf/open/water/electric + name = "electric water" + baseturfs = /turf/open/water/electric + initial_gas_mix = OPENTURF_DEFAULT_ATMOS + color = COLOR_TEAL + light_range = 2 + light_color = COLOR_TEAL + +/turf/open/water/electric/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + . = ..() + if(isliving(arrived)) + var/mob/living/unlucky_mob = arrived + unlucky_mob.Stun(1.5 SECONDS) + unlucky_mob.Knockdown(10 SECONDS) + unlucky_mob.adjustFireLoss(15) + var/datum/effect_system/lightning_spread/s = new /datum/effect_system/lightning_spread + s.set_up(5, 1, unlucky_mob.loc) + s.start() + unlucky_mob.visible_message(span_danger("[unlucky_mob.name] is shocked by [src]!"), \ + span_userdanger("You feel a powerful shock course through your body!"), \ + span_hear("You hear a heavy electrical crack!")) + playsound(unlucky_mob, SFX_SPARKS, 100, TRUE) diff --git a/modular_skyrat/modules/black_mesa/code/turrets.dm b/modular_nova/modules/black_mesa/code/turrets.dm similarity index 100% rename from modular_skyrat/modules/black_mesa/code/turrets.dm rename to modular_nova/modules/black_mesa/code/turrets.dm diff --git a/modular_skyrat/modules/black_mesa/code/uber_teleporter.dm b/modular_nova/modules/black_mesa/code/uber_teleporter.dm similarity index 96% rename from modular_skyrat/modules/black_mesa/code/uber_teleporter.dm rename to modular_nova/modules/black_mesa/code/uber_teleporter.dm index 15b72c493b1439..32b87379875b47 100644 --- a/modular_skyrat/modules/black_mesa/code/uber_teleporter.dm +++ b/modular_nova/modules/black_mesa/code/uber_teleporter.dm @@ -1,7 +1,7 @@ /obj/item/uber_teleporter name = "\improper Nihilanth's Divinity" desc = "It glows harshly, the power of a portal wielding monster lays within." - icon = 'modular_skyrat/modules/black_mesa/icons/plants.dmi' + icon = 'modular_nova/modules/black_mesa/icons/plants.dmi' icon_state = "crystal_pylon" /obj/item/uber_teleporter/attack_self(mob/living/user, modifiers) diff --git a/modular_nova/modules/black_mesa/code/weapons.dm b/modular_nova/modules/black_mesa/code/weapons.dm new file mode 100644 index 00000000000000..4c96daa2890f9f --- /dev/null +++ b/modular_nova/modules/black_mesa/code/weapons.dm @@ -0,0 +1,56 @@ +/obj/item/crowbar/freeman + name = "blood soaked crowbar" + desc = "A heavy handed crowbar, it drips with blood." + icon = 'modular_nova/modules/awaymissions_nova/icons/freeman.dmi' + icon_state = "crowbar" + force = 35 + throwforce = 45 + toolspeed = 0.1 + wound_bonus = 10 + hitsound = 'modular_nova/master_files/sound/weapons/crowbar2.ogg' + mob_throw_hit_sound = 'modular_nova/master_files/sound/weapons/crowbar2.ogg' + force_opens = TRUE + +/obj/item/crowbar/freeman/ultimate + name = "\improper Freeman's crowbar" + desc = "A weapon wielded by an ancient physicist, the blood of hundreds seeps through this rod of iron and malice." + force = 45 + +/obj/item/crowbar/freeman/ultimate/Initialize(mapload) + . = ..() + add_filter("rad_glow", 2, list("type" = "outline", "color" = "#fbff1479", "size" = 2)) + +/obj/item/shield/riot/pointman/hecu + name = "ballistic shield" + desc = "A shield fit for those that want to sprint headfirst into the unknown! Cumbersome as hell. Repair with iron." + icon_state = "ballistic" + icon = 'modular_nova/modules/awaymissions_nova/icons/ballistic.dmi' + worn_icon_state = "ballistic_worn" + worn_icon = 'modular_nova/modules/awaymissions_nova/icons/ballistic.dmi' + inhand_icon_state = "ballistic" + lefthand_file = 'modular_nova/modules/awaymissions_nova/icons/ballistic_l.dmi' + righthand_file = 'modular_nova/modules/awaymissions_nova/icons/ballistic_r.dmi' + force = 14 + throwforce = 5 + throw_speed = 1 + throw_range = 1 + block_chance = 45 + slot_flags = ITEM_SLOT_BACK + w_class = WEIGHT_CLASS_BULKY + attack_verb_continuous = list("shoves", "bashes") + attack_verb_simple = list("shove", "bash") + transparent = TRUE + max_integrity = 150 + repairable_by = /obj/item/stack/sheet/iron //what to repair the shield with + + +/obj/item/shield/riot/pointman/hecu/shatter(mob/living/carbon/human/owner) + playsound(owner, 'sound/effects/glassbr3.ogg', 100) + new /obj/item/ballistic_broken((get_turf(src))) + +/obj/item/ballistic_broken + name = "broken ballistic shield" + desc = "An unsalvageable, unrecoverable mess of armor steel and kevlar. Should've maintained it, huh?" + icon_state = "ballistic_broken" + icon = 'modular_nova/modules/awaymissions_nova/icons/ballistic.dmi' + w_class = WEIGHT_CLASS_BULKY diff --git a/modular_skyrat/modules/black_mesa/code/xen_crystal.dm b/modular_nova/modules/black_mesa/code/xen_crystal.dm similarity index 94% rename from modular_skyrat/modules/black_mesa/code/xen_crystal.dm rename to modular_nova/modules/black_mesa/code/xen_crystal.dm index edb6305d7a8507..cdc08c39154c26 100644 --- a/modular_skyrat/modules/black_mesa/code/xen_crystal.dm +++ b/modular_nova/modules/black_mesa/code/xen_crystal.dm @@ -1,7 +1,7 @@ /obj/structure/xen_crystal name = "resonating crystal" desc = "A strange resinating crystal." - icon = 'modular_skyrat/modules/black_mesa/icons/plants.dmi' + icon = 'modular_nova/modules/black_mesa/icons/plants.dmi' icon_state = "crystal" light_power = 2 light_range = 4 @@ -44,7 +44,7 @@ /obj/item/grenade/xen_crystal name = "xen crystal" desc = "A crystal with anomalous properties." - icon = 'modular_skyrat/modules/black_mesa/icons/plants.dmi' + icon = 'modular_nova/modules/black_mesa/icons/plants.dmi' icon_state = "crystal_grenade" /// What range do we effect mobs? var/effect_range = 6 diff --git a/modular_skyrat/modules/black_mesa/icons/mapping_helpers.dmi b/modular_nova/modules/black_mesa/icons/mapping_helpers.dmi similarity index 100% rename from modular_skyrat/modules/black_mesa/icons/mapping_helpers.dmi rename to modular_nova/modules/black_mesa/icons/mapping_helpers.dmi diff --git a/modular_skyrat/modules/black_mesa/icons/mobs.dmi b/modular_nova/modules/black_mesa/icons/mobs.dmi similarity index 100% rename from modular_skyrat/modules/black_mesa/icons/mobs.dmi rename to modular_nova/modules/black_mesa/icons/mobs.dmi diff --git a/modular_skyrat/modules/black_mesa/icons/nihilanth.dmi b/modular_nova/modules/black_mesa/icons/nihilanth.dmi similarity index 100% rename from modular_skyrat/modules/black_mesa/icons/nihilanth.dmi rename to modular_nova/modules/black_mesa/icons/nihilanth.dmi diff --git a/modular_skyrat/modules/black_mesa/icons/plants.dmi b/modular_nova/modules/black_mesa/icons/plants.dmi similarity index 100% rename from modular_skyrat/modules/black_mesa/icons/plants.dmi rename to modular_nova/modules/black_mesa/icons/plants.dmi diff --git a/modular_skyrat/modules/black_mesa/icons/structures.dmi b/modular_nova/modules/black_mesa/icons/structures.dmi similarity index 100% rename from modular_skyrat/modules/black_mesa/icons/structures.dmi rename to modular_nova/modules/black_mesa/icons/structures.dmi diff --git a/modular_nova/modules/black_mesa/icons/structures/dmi b/modular_nova/modules/black_mesa/icons/structures/dmi new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/modular_skyrat/modules/black_mesa/icons/xen_door.dmi b/modular_nova/modules/black_mesa/icons/xen_door.dmi similarity index 100% rename from modular_skyrat/modules/black_mesa/icons/xen_door.dmi rename to modular_nova/modules/black_mesa/icons/xen_door.dmi diff --git a/modular_skyrat/modules/black_mesa/icons/xen_turfs.dmi b/modular_nova/modules/black_mesa/icons/xen_turfs.dmi similarity index 100% rename from modular_skyrat/modules/black_mesa/icons/xen_turfs.dmi rename to modular_nova/modules/black_mesa/icons/xen_turfs.dmi diff --git a/modular_skyrat/modules/black_mesa/sound/downtoBLUE.ogg b/modular_nova/modules/black_mesa/sound/downtoBLUE.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/downtoBLUE.ogg rename to modular_nova/modules/black_mesa/sound/downtoBLUE.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/explosions/explode1.ogg b/modular_nova/modules/black_mesa/sound/explosions/explode1.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/explosions/explode1.ogg rename to modular_nova/modules/black_mesa/sound/explosions/explode1.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/explosions/explode2.ogg b/modular_nova/modules/black_mesa/sound/explosions/explode2.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/explosions/explode2.ogg rename to modular_nova/modules/black_mesa/sound/explosions/explode2.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/explosions/explode3.ogg b/modular_nova/modules/black_mesa/sound/explosions/explode3.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/explosions/explode3.ogg rename to modular_nova/modules/black_mesa/sound/explosions/explode3.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/explosions/explode4.ogg b/modular_nova/modules/black_mesa/sound/explosions/explode4.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/explosions/explode4.ogg rename to modular_nova/modules/black_mesa/sound/explosions/explode4.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/explosions/explode5.ogg b/modular_nova/modules/black_mesa/sound/explosions/explode5.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/explosions/explode5.ogg rename to modular_nova/modules/black_mesa/sound/explosions/explode5.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/explosions/explode6.ogg b/modular_nova/modules/black_mesa/sound/explosions/explode6.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/explosions/explode6.ogg rename to modular_nova/modules/black_mesa/sound/explosions/explode6.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/explosions/explode7.ogg b/modular_nova/modules/black_mesa/sound/explosions/explode7.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/explosions/explode7.ogg rename to modular_nova/modules/black_mesa/sound/explosions/explode7.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/lc_mainbeam.ogg b/modular_nova/modules/black_mesa/sound/lc_mainbeam.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/lc_mainbeam.ogg rename to modular_nova/modules/black_mesa/sound/lc_mainbeam.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/lc_teleport.ogg b/modular_nova/modules/black_mesa/sound/lc_teleport.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/lc_teleport.ogg rename to modular_nova/modules/black_mesa/sound/lc_teleport.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert01.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert02.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert03.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert04.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert04.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert04.ogg rename to modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert04.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert05.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert05.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert05.ogg rename to modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert05.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert06.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert06.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert06.ogg rename to modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert06.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert07.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert07.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert07.ogg rename to modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert07.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert08.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert08.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert08.ogg rename to modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert08.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/attack1.ogg b/modular_nova/modules/black_mesa/sound/mobs/bullsquid/attack1.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/attack1.ogg rename to modular_nova/modules/black_mesa/sound/mobs/bullsquid/attack1.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/detect1.ogg b/modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect1.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/detect1.ogg rename to modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect1.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/detect2.ogg b/modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect2.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/detect2.ogg rename to modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect2.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/detect3.ogg b/modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect3.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/detect3.ogg rename to modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect3.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/goo_attack3.ogg b/modular_nova/modules/black_mesa/sound/mobs/bullsquid/goo_attack3.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/goo_attack3.ogg rename to modular_nova/modules/black_mesa/sound/mobs/bullsquid/goo_attack3.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/splat1.ogg b/modular_nova/modules/black_mesa/sound/mobs/bullsquid/splat1.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/splat1.ogg rename to modular_nova/modules/black_mesa/sound/mobs/bullsquid/splat1.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/headcrab/alert1.ogg b/modular_nova/modules/black_mesa/sound/mobs/headcrab/alert1.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/headcrab/alert1.ogg rename to modular_nova/modules/black_mesa/sound/mobs/headcrab/alert1.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/headcrab/attack1.ogg b/modular_nova/modules/black_mesa/sound/mobs/headcrab/attack1.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/headcrab/attack1.ogg rename to modular_nova/modules/black_mesa/sound/mobs/headcrab/attack1.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/headcrab/attack2.ogg b/modular_nova/modules/black_mesa/sound/mobs/headcrab/attack2.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/headcrab/attack2.ogg rename to modular_nova/modules/black_mesa/sound/mobs/headcrab/attack2.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/headcrab/attack3.ogg b/modular_nova/modules/black_mesa/sound/mobs/headcrab/attack3.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/headcrab/attack3.ogg rename to modular_nova/modules/black_mesa/sound/mobs/headcrab/attack3.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/headcrab/die1.ogg b/modular_nova/modules/black_mesa/sound/mobs/headcrab/die1.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/headcrab/die1.ogg rename to modular_nova/modules/black_mesa/sound/mobs/headcrab/die1.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/headcrab/die2.ogg b/modular_nova/modules/black_mesa/sound/mobs/headcrab/die2.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/headcrab/die2.ogg rename to modular_nova/modules/black_mesa/sound/mobs/headcrab/die2.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/headcrab/headbite.ogg b/modular_nova/modules/black_mesa/sound/mobs/headcrab/headbite.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/headcrab/headbite.ogg rename to modular_nova/modules/black_mesa/sound/mobs/headcrab/headbite.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert01.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert03.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert04.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert04.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert04.ogg rename to modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert04.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert05.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert05.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert05.ogg rename to modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert05.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert06.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert06.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert06.ogg rename to modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert06.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert07.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert07.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert07.ogg rename to modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert07.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert08.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert08.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert08.ogg rename to modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert08.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert10.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert10.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert10.ogg rename to modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert10.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/houndeye/charge1.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/charge1.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/houndeye/charge1.ogg rename to modular_nova/modules/black_mesa/sound/mobs/houndeye/charge1.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/houndeye/charge2.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/charge2.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/houndeye/charge2.ogg rename to modular_nova/modules/black_mesa/sound/mobs/houndeye/charge2.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/houndeye/charge3.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/charge3.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/houndeye/charge3.ogg rename to modular_nova/modules/black_mesa/sound/mobs/houndeye/charge3.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert1.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert1.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert1.ogg rename to modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert1.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert2.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert2.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert2.ogg rename to modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert2.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert3.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert3.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert3.ogg rename to modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert3.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert4.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert4.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert4.ogg rename to modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert4.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert5.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert5.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert5.ogg rename to modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert5.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_death01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_death01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_death01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_death01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_deceiveyou01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_deceiveyou01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_deceiveyou01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_deceiveyou01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_foryouhewaits01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_foryouhewaits01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_foryouhewaits01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_foryouhewaits01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_freeeemmaan01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_freeeemmaan01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_freeeemmaan01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_freeeemmaan01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_iamthelast01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_iamthelast01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_iamthelast01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_iamthelast01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_pain01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_pain01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_pain01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_pain01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_thetruth01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_thetruth01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_thetruth01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_thetruth01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_whathavedone01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_whathavedone01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_whathavedone01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_whathavedone01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_youalldie01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_youalldie01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_youalldie01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_youalldie01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance01.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance02.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance03.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance04.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance04.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance04.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance04.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance05.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance05.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance05.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance05.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance06.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance06.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance06.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance06.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance07.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance07.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance07.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance07.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance08.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance08.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance08.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance08.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance09.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance09.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance09.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance09.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance10.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance10.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance10.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance10.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot01.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot02.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot03.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot04.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot04.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot04.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot04.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot05.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot05.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot05.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot05.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/illstayhere01.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/illstayhere01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/illstayhere02.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/illstayhere02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/illstayhere03.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/illstayhere03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere01.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere02.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere03.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere04.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere04.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere04.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere04.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere05.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere05.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere05.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere05.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadon01.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadon01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadon02.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadon02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadon03.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadon03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway01.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway02.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway03.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway04.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway04.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway04.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway04.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway05.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway05.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway05.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway05.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway06.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway06.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway06.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway06.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway07.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway07.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway07.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway07.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway08.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway08.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway08.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway08.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/letsgo01.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/letsgo01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/letsgo02.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/letsgo02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/letsgo03.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/letsgo03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert01b.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert01b.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert01b.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert01b.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert04.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert04.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert04.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert05.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert05.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert05.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert06.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert06.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert06.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert06.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot1.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot1.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot1.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot1.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot2.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot2.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot2.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot2.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot3.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot3.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot3.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot3.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot4.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot4.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot4.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot4.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot5.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot5.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot5.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot5.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/death01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/death01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/death02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/death02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/death03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/death03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/death04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death04.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/death04.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death04.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/death05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death05.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/death05.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death05.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/dispell.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/dispell.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/dispell.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/dispell.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/explode1.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/explode1.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/explode1.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/explode1.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/explode2.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/explode2.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/explode2.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/explode2.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/foot1.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot1.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/foot1.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot1.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/foot2.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot2.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/foot2.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot2.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/foot3.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot3.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/foot3.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot3.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/foot4.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot4.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/foot4.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot4.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle04.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle04.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle04.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle05.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle05.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle05.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle06.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle06.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle06.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle06.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle07.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle07.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle07.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle07.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle08.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle08.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle08.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle08.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle09.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle09.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle09.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle09.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough04.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough04.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough04.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough05.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough05.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough05.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle04.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle04.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle04.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle05.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle05.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle05.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle04.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle04.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle04.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle05.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle05.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle05.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end1.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end1.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end1.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end1.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end2.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end2.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end2.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end2.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end3.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end3.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end3.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end3.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end4.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end4.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end4.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end4.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end5.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end5.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end5.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end5.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end6.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end6.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end6.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end6.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start1.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start1.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start1.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start1.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start2.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start2.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start2.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start2.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start3.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start3.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start3.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start3.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start4.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start4.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start4.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start4.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start5.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start5.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start5.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start5.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mourn01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mourn01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mourn02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mourn02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mourn03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mourn03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mourn04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn04.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mourn04.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn04.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mourn05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn05.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mourn05.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn05.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/pain01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/pain01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/pain02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/pain02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/pain03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/pain03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/pain04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain04.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/pain04.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain04.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/painedprotest01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/painedprotest01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/painedprotest01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/painedprotest01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/protest02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/protest02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/protest02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/protest02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/protest03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/protest03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/protest03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/protest03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead2.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead2.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead2.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead2.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering04.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering04.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering04.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering05.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering05.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering05.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_startled01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_startled01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_startled02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_startled02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_startled03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_startled03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_startled04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled04.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_startled04.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled04.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_cry01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_cry01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_cry01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_cry01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_cry02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_cry02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_cry02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_cry02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain04.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain04.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain04.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue04.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue04.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue04.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue05.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue05.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue05.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue05a.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue05a.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue05a.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue05a.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue_sigh01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue_sigh01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue_sigh01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue_sigh01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_call01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_call01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_call01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_call01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_concern.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_concern.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_concern.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_concern.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_confused01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_confused01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_confused01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_confused01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_confused02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_confused02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_confused02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_confused02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_cough1.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_cough1.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_cough1.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_cough1.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_cough1a.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_cough1a.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_cough1a.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_cough1a.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_goeat01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_goeat01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_goeat01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_goeat01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_goeat02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_goeat02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_goeat02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_goeat02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_ignore01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_ignore01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_ignore01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_ignore01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_ignore02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_ignore02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_ignore02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_ignore02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_invite01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_invite01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_invite01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_invite01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_nodebate01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_nodebate01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_nodebate01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_nodebate01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_nodebate02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_nodebate02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_nodebate02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_nodebate02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping01.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping01.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping01.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping02.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping02.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping02.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping03.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping03.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping03.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping04.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping04.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping04.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping05.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping05.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping05.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping06.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping06.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping06.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping06.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping07.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping07.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping07.ogg rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping07.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert1.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/alert1.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert1.ogg rename to modular_nova/modules/black_mesa/sound/mobs/zombies/alert1.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert2.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/alert2.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert2.ogg rename to modular_nova/modules/black_mesa/sound/mobs/zombies/alert2.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert3.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/alert3.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert3.ogg rename to modular_nova/modules/black_mesa/sound/mobs/zombies/alert3.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert4.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/alert4.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert4.ogg rename to modular_nova/modules/black_mesa/sound/mobs/zombies/alert4.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert5.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/alert5.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert5.ogg rename to modular_nova/modules/black_mesa/sound/mobs/zombies/alert5.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert6.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/alert6.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert6.ogg rename to modular_nova/modules/black_mesa/sound/mobs/zombies/alert6.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/claw_strike.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/claw_strike.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/claw_strike.ogg rename to modular_nova/modules/black_mesa/sound/mobs/zombies/claw_strike.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv1.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv1.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv1.ogg rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv1.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv10.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv10.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv10.ogg rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv10.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv11.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv11.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv11.ogg rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv11.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv12.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv12.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv12.ogg rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv12.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv13.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv13.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv13.ogg rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv13.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv14.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv14.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv14.ogg rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv14.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv2.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv2.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv2.ogg rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv2.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv3.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv3.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv3.ogg rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv3.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv4.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv4.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv4.ogg rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv4.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv5.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv5.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv5.ogg rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv5.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv6.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv6.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv6.ogg rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv6.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv7.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv7.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv7.ogg rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv7.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv8.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv8.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv8.ogg rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv8.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv9.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv9.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv9.ogg rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv9.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/siren1.ogg b/modular_nova/modules/black_mesa/sound/siren1.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/siren1.ogg rename to modular_nova/modules/black_mesa/sound/siren1.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/siren1_long.ogg b/modular_nova/modules/black_mesa/sound/siren1_long.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/siren1_long.ogg rename to modular_nova/modules/black_mesa/sound/siren1_long.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/tc_12_portalsuck.ogg b/modular_nova/modules/black_mesa/sound/tc_12_portalsuck.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/tc_12_portalsuck.ogg rename to modular_nova/modules/black_mesa/sound/tc_12_portalsuck.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/tc_13_teleport.ogg b/modular_nova/modules/black_mesa/sound/tc_13_teleport.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/tc_13_teleport.ogg rename to modular_nova/modules/black_mesa/sound/tc_13_teleport.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/xen-credits.ogg b/modular_nova/modules/black_mesa/sound/xen-credits.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/xen-credits.ogg rename to modular_nova/modules/black_mesa/sound/xen-credits.ogg diff --git a/modular_skyrat/modules/black_mesa/sound/xen_door.ogg b/modular_nova/modules/black_mesa/sound/xen_door.ogg similarity index 100% rename from modular_skyrat/modules/black_mesa/sound/xen_door.ogg rename to modular_nova/modules/black_mesa/sound/xen_door.ogg diff --git a/modular_skyrat/modules/blastwave_outfits/code/cargo_packs.dm b/modular_nova/modules/blastwave_outfits/code/cargo_packs.dm similarity index 100% rename from modular_skyrat/modules/blastwave_outfits/code/cargo_packs.dm rename to modular_nova/modules/blastwave_outfits/code/cargo_packs.dm diff --git a/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_head.dm b/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_head.dm new file mode 100644 index 00000000000000..aabe14b33c1c0a --- /dev/null +++ b/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_head.dm @@ -0,0 +1,78 @@ +/obj/item/clothing/head/blastwave + name = "blastwave helmet" + desc = "A plastic helmet with paint applied. Protects as much as cardboard box named 'Bomb Shelter'." + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' + icon_state = "blastwave_helmet" + flags_inv = HIDEHAIR + uses_advanced_reskins = TRUE + unique_reskin = list( + "Default (Purple)" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/hats.dmi', + RESKIN_ICON_STATE = "blastwave_helmet", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/head.dmi', + RESKIN_WORN_ICON_STATE = "blastwave_helmet" + ), + "Red" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/hats.dmi', + RESKIN_ICON_STATE = "blastwave_helmet_r", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/head.dmi', + RESKIN_WORN_ICON_STATE = "blastwave_helmet_r" + ), + "Green" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/hats.dmi', + RESKIN_ICON_STATE = "blastwave_helmet_g", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/head.dmi', + RESKIN_WORN_ICON_STATE = "blastwave_helmet_g" + ), + "Blue" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/hats.dmi', + RESKIN_ICON_STATE = "blastwave_helmet_b", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/head.dmi', + RESKIN_WORN_ICON_STATE = "blastwave_helmet_b" + ), + "Yellow" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/hats.dmi', + RESKIN_ICON_STATE = "blastwave_helmet_y", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/head.dmi', + RESKIN_WORN_ICON_STATE = "blastwave_helmet_y" + ) + ) + +/obj/item/clothing/head/blastwave/officer + name = "blastwave peaked cap" + desc = "A simple, militaristic cap." + icon_state = "blastwave_offcap" + flags_inv = 0 + unique_reskin = list( + "Default (Purple)" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/hats.dmi', + RESKIN_ICON_STATE = "blastwave_offcap", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/head.dmi', + RESKIN_WORN_ICON_STATE = "blastwave_offcap" + ), + "Red" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/hats.dmi', + RESKIN_ICON_STATE = "blastwave_offcap_r", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/head.dmi', + RESKIN_WORN_ICON_STATE = "blastwave_offcap_r" + ), + "Green" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/hats.dmi', + RESKIN_ICON_STATE = "blastwave_offcap_g", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/head.dmi', + RESKIN_WORN_ICON_STATE = "blastwave_offcap_g" + ), + "Blue" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/hats.dmi', + RESKIN_ICON_STATE = "blastwave_offcap_b", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/head.dmi', + RESKIN_WORN_ICON_STATE = "blastwave_offcap_b" + ), + "Yellow" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/hats.dmi', + RESKIN_ICON_STATE = "blastwave_offcap_y", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/head.dmi', + RESKIN_WORN_ICON_STATE = "blastwave_offcap_y" + ) + ) diff --git a/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_mask.dm b/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_mask.dm new file mode 100644 index 00000000000000..dada6d511c3de0 --- /dev/null +++ b/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_mask.dm @@ -0,0 +1,8 @@ +/obj/item/clothing/mask/gas/full + name = "full gas mask" + desc = "A close-fitting mask. Equipment beloved by many trenchers, mooks and romantically apocalyptic people." + icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi' + worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/mask_muzzled.dmi' + icon_state = "gas_full" + flags_inv = HIDEEARS | HIDEEYES | HIDEFACE | HIDEHAIR | HIDEFACIALHAIR | HIDESNOUT diff --git a/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_suit.dm b/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_suit.dm new file mode 100644 index 00000000000000..8104173f1f5681 --- /dev/null +++ b/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_suit.dm @@ -0,0 +1,41 @@ +/obj/item/clothing/suit/blastwave + name = "blastwave trenchcoat" + desc = "A generic trenchcoat of the boring wars." + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suit_digi.dmi' + icon_state = "blastwave_suit" + body_parts_covered = CHEST|GROIN|LEGS|ARMS + uses_advanced_reskins = TRUE + unique_reskin = list( + "Default (Purple)" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits.dmi', + RESKIN_ICON_STATE = "blastwave_suit", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suit.dmi', + RESKIN_WORN_ICON_STATE = "blastwave_suit" + ), + "Red" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits.dmi', + RESKIN_ICON_STATE = "blastwave_suit_r", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suit.dmi', + RESKIN_WORN_ICON_STATE = "blastwave_suit_r" + ), + "Green" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits.dmi', + RESKIN_ICON_STATE = "blastwave_suit_g", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suit.dmi', + RESKIN_WORN_ICON_STATE = "blastwave_suit_g" + ), + "Blue" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits.dmi', + RESKIN_ICON_STATE = "blastwave_suit_b", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suit.dmi', + RESKIN_WORN_ICON_STATE = "blastwave_suit_b" + ), + "Yellow" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits.dmi', + RESKIN_ICON_STATE = "blastwave_suit_y", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suit.dmi', + RESKIN_WORN_ICON_STATE = "blastwave_suit_y" + ) + ) diff --git a/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_uniform.dm b/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_uniform.dm new file mode 100644 index 00000000000000..a5259e1fec5cf4 --- /dev/null +++ b/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_uniform.dm @@ -0,0 +1,41 @@ +/obj/item/clothing/under/blastwave + name = "blastwave uniform" + desc = "An utilitarian uniform of rugged warfare." + icon = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi' + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/uniform_digi.dmi' + icon_state = "blastwave_uniform" + can_adjust = FALSE + uses_advanced_reskins = TRUE + unique_reskin = list( + "Default (Purple)" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi', + RESKIN_ICON_STATE = "blastwave_uniform", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi', + RESKIN_WORN_ICON_STATE = "blastwave_uniform" + ), + "Red" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi', + RESKIN_ICON_STATE = "blastwave_uniform_r", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi', + RESKIN_WORN_ICON_STATE = "blastwave_uniform_r" + ), + "Green" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi', + RESKIN_ICON_STATE = "blastwave_uniform_g", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi', + RESKIN_WORN_ICON_STATE = "blastwave_uniform_g" + ), + "Blue" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi', + RESKIN_ICON_STATE = "blastwave_uniform_b", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi', + RESKIN_WORN_ICON_STATE = "blastwave_uniform_b" + ), + "Yellow" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi', + RESKIN_ICON_STATE = "blastwave_uniform_y", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi', + RESKIN_WORN_ICON_STATE = "blastwave_uniform_y" + ) + ) diff --git a/modular_nova/modules/blastwave_outfits/readme.md b/modular_nova/modules/blastwave_outfits/readme.md new file mode 100644 index 00000000000000..519b0642ad31df --- /dev/null +++ b/modular_nova/modules/blastwave_outfits/readme.md @@ -0,0 +1,48 @@ +https://github.com/Skyrat-SS13/Skyrat-tg/pull/14165 (initial) + +## Title: GWTB-like Outfit. + +MODULE ID: N/A + +### Description: + +Adds "Gone with the Blastwave" webcomic-inspired outfit. Colors are pre-set via reskinning, and it is not GAGsified. +This version does not provide armor values. + +### TG Proc/File Changes: + +- N/A +<!-- If you had to edit, or append to any core procs in the process of making this PR, list them here. APPEND: Also, please include any files that you've changed. .DM files that is. --> + +### Defines: + +- N/A +<!-- If you needed to add any defines, mention the files you added those defines in --> + +### Master file additions + +- #CHANGE modular_nova\master_files\icons\mob\clothing\head.dmi +- #CHANGE modular_nova\master_files\icons\mob\clothing\mask_muzzled.dmi +- #CHANGE modular_nova\master_files\icons\mob\clothing\mask.dmi +- #CHANGE modular_nova\master_files\icons\mob\clothing\suit_digi.dmi +- #CHANGE modular_nova\master_files\icons\mob\clothing\suit.dmi +- #CHANGE modular_nova\master_files\icons\mob\clothing\uniform_digi.dmi +- #CHANGE modular_nova\master_files\icons\mob\clothing\uniform.dmi +- #CHANGE modular_nova\master_files\icons\obj\clothing\hats.dmi +- #CHANGE modular_nova\master_files\icons\obj\clothing\masks.dmi +- #CHANGE modular_nova\master_files\icons\obj\clothing\suits.dmi +- #CHANGE modular_nova\master_files\icons\obj\clothing\uniforms.dmi +<!-- Any master file changes you've made to existing master files or if you've added a new master file. Please mark either as #NEW or #CHANGE --> + +### Included files that are not contained in this module: + +- #CHANGE modular_nova\modules\loadouts\loadout_items\loadout_datum_heads.dm +- #CHANGE modular_nova\modules\loadouts\loadout_items\loadout_datum_suit.dm +- #CHANGE modular_nova\modules\loadouts\loadout_items\under\loadout_datum_under.dm +<!-- Likewise, be it a non-modular file or a modular one that's not contained within the folder belonging to this specific module, it should be mentioned here --> + +### Credits: + +Initially used older TG-Station's Detective's Greycoat (blastwave coats are modified versions of it: added colored arm-patches, cuffs and lining), normal helmets (added paint and removed in-built goggles), officer's cap (added colored pin), utility uniform (added color-collar and shoulders); + +[Gone with the Blastwave](http://www.blastwave-comic.com) webcomic by Kimmo Lemetti (aka Morr) - inspiration. diff --git a/modular_skyrat/modules/blueshield/code/blueshield.dm b/modular_nova/modules/blueshield/code/blueshield.dm similarity index 97% rename from modular_skyrat/modules/blueshield/code/blueshield.dm rename to modular_nova/modules/blueshield/code/blueshield.dm index ed0cd1e27307eb..6d0dba93547681 100644 --- a/modular_skyrat/modules/blueshield/code/blueshield.dm +++ b/modular_nova/modules/blueshield/code/blueshield.dm @@ -6,7 +6,7 @@ faction = FACTION_STATION total_positions = 1 spawn_positions = 1 - supervisors = "Central Command and the Nanotrasen Consultant" + supervisors = "Conglomeration of Colonists and the Symphionia Consultant" minimal_player_age = 7 exp_requirements = 2400 exp_required_type = EXP_TYPE_CREW diff --git a/modular_nova/modules/blueshield/code/closet.dm b/modular_nova/modules/blueshield/code/closet.dm new file mode 100644 index 00000000000000..8d5f1985a224c6 --- /dev/null +++ b/modular_nova/modules/blueshield/code/closet.dm @@ -0,0 +1,34 @@ +/obj/item/storage/bag/garment/blueshield + name = "blueshield's garment bag" + desc = "A bag for storing extra clothes and shoes. This one belongs to the blueshield." + +/obj/item/storage/bag/garment/blueshield/PopulateContents() + new /obj/item/clothing/suit/hooded/wintercoat/nova/blueshield(src) + new /obj/item/clothing/head/beret/blueshield(src) + new /obj/item/clothing/head/beret/blueshield/navy(src) + new /obj/item/clothing/under/rank/blueshield(src) + new /obj/item/clothing/under/rank/blueshield/skirt(src) + new /obj/item/clothing/under/rank/blueshield/turtleneck(src) + new /obj/item/clothing/under/rank/blueshield/turtleneck/skirt(src) + new /obj/item/clothing/suit/armor/vest/blueshield(src) + new /obj/item/clothing/suit/armor/vest/blueshield/jacket(src) + new /obj/item/clothing/neck/mantle/bsmantle(src) + +/obj/structure/closet/secure_closet/blueshield + name = "blueshield's locker" + icon_state = "bs" + icon = 'modular_nova/master_files/icons/obj/closet.dmi' + req_access = list(ACCESS_CAPTAIN) + +/obj/structure/closet/secure_closet/blueshield/New() + ..() + new /obj/item/storage/briefcase/secure(src) + new /obj/item/storage/belt/security/full(src) + new /obj/item/grenade/flashbang(src) + new /obj/item/assembly/flash/handheld(src) + new /obj/item/restraints/handcuffs(src) + new /obj/item/clothing/glasses/hud/security/sunglasses(src) + new /obj/item/storage/medkit/tactical/blueshield(src) + new /obj/item/storage/toolbox/guncase/nova/xhihao_large_case/bogseo(src) + new /obj/item/storage/bag/garment/blueshield(src) + new /obj/item/mod/control/pre_equipped/blueshield(src) diff --git a/modular_nova/modules/blueshield/code/clothing.dm b/modular_nova/modules/blueshield/code/clothing.dm new file mode 100644 index 00000000000000..27c7edb7ad9ece --- /dev/null +++ b/modular_nova/modules/blueshield/code/clothing.dm @@ -0,0 +1,177 @@ +//Blueshield + +//Uniform items are in command.dm + +/obj/item/clothing/gloves/tackler/combat/insulated/blueshield + name = "combat gloves" + desc = "These tactical gloves appear to be unique, made out of double woven durathread fibers which make it fireproof as well as acid resistant" + icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi' + icon_state = "combat" + worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi' + resistance_flags = FIRE_PROOF | ACID_PROOF + armor_type = /datum/armor/insulated_blueshield + +/datum/armor/insulated_blueshield + fire = 100 + acid = 100 + +/obj/item/radio/headset/headset_bs + name = "\proper the blueshield's headset" + icon = 'modular_nova/modules/blueshield/icons/radio.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/ears.dmi' + icon_state = "bshield_headset" + worn_icon_state = "bshield_headset" + keyslot = /obj/item/encryptionkey/heads/blueshield + keyslot2 = /obj/item/encryptionkey/headset_cent + +/obj/item/radio/headset/headset_bs/alt + icon_state = "bshield_headset_alt" + worn_icon_state = "bshield_headset_alt" + +/obj/item/radio/headset/headset_bs/alt/Initialize(mapload) + . = ..() + AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS)) + + +/obj/item/clothing/head/helmet/space/plasmaman/blueshield + name = "blueshield envirosuit helmet" + desc = "A plasmaman containment helmet designed for certified blueshields, who's job guarding heads should not include self-combustion... most of the time." + icon = 'modular_nova/master_files/icons/obj/clothing/head/plasmaman_hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/plasmaman_head.dmi' + icon_state = "bs_envirohelm" + armor_type = /datum/armor/head_helmet/plasmaman/blueshield + +/datum/armor/head_helmet/plasmaman/blueshield + acid = 90 + +/obj/item/clothing/under/plasmaman/blueshield + name = "blueshield envirosuit" + desc = "A plasmaman containment suit designed for certified blueshields, offering a limited amount of extra protection." + icon = 'modular_nova/master_files/icons/obj/clothing/under/plasmaman.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/plasmaman.dmi' + icon_state = "bs_envirosuit" + armor_type = /datum/armor/clothing_under/under_plasmaman_blueshield + sensor_mode = SENSOR_COORDS + random_sensor = FALSE + +/datum/armor/clothing_under/under_plasmaman_blueshield + melee = 10 + laser = 10 + bomb = 5 + bio = 100 + fire = 95 + acid = 95 + +/obj/item/clothing/head/beret/blueshield + name = "blueshield's beret" + desc = "A blue beret made of durathread with a genuine golden badge, denoting its owner as a Blueshield Lieuteneant. It seems to be padded with nano-kevlar, making it tougher than standard reinforced berets." + greyscale_config = /datum/greyscale_config/beret_badge + greyscale_config_worn = /datum/greyscale_config/beret_badge/worn + greyscale_colors = "#3A4E7D#DEB63D" + //alternate_worn_icon_digi = 'modular_nova/icons/mob/head_muzzled.dmi' + icon_state = "beret_badge_police" + armor_type = /datum/armor/head_helmet/blueshield + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + +/datum/armor/head_helmet/blueshield + fire = 75 + acid = 75 + +/obj/item/clothing/head/beret/blueshield/navy + name = "navy blueshield's beret" + desc = "A navy-blue beret made of durathread with a silver badge, denoting its owner as a Blueshield Lieuteneant. It seems to be padded with nano-kevlar, making it tougher than standard reinforced berets." + greyscale_colors = "#3C485A#BBBBBB" + +/obj/item/storage/backpack/blueshield + name = "blueshield backpack" + desc = "A robust backpack issued to Nanotrasen's finest." + icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi' + lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' + righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' + icon_state = "backpack_blueshield" + inhand_icon_state = "backpack_blueshield" + +/obj/item/storage/backpack/satchel/blueshield + name = "blueshield satchel" + desc = "A robust satchel issued to Nanotrasen's finest." + icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi' + lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' + righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' + icon_state = "satchel_blueshield" + inhand_icon_state = "satchel_blueshield" + +/obj/item/storage/backpack/duffelbag/blueshield + name = "blueshield duffelbag" + desc = "A robust duffelbag issued to Nanotrasen's finest." + icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi' + lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' + righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' + icon_state = "duffel_blueshield" + inhand_icon_state = "duffel_blueshield" + +//blueshield armor +/obj/item/clothing/suit/armor/vest/blueshield + icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi' + name = "blueshield's armor" + desc = "A tight-fitting kevlar-lined vest with a blue badge on the chest of it." + icon_state = "blueshieldarmor" + body_parts_covered = CHEST + armor_type = /datum/armor/suit_armor/blueshield + uses_advanced_reskins = TRUE + unique_reskin = list( + "Slim" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi', + RESKIN_ICON_STATE = "blueshieldarmor", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi', + RESKIN_WORN_ICON_STATE = "blueshieldarmor", + ), + "Marine" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi', + RESKIN_ICON_STATE = "bs_marine", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi', + RESKIN_WORN_ICON_STATE = "bs_marine", + ), + "Bulky" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi', + RESKIN_ICON_STATE = "vest_black", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi', + RESKIN_WORN_ICON_STATE = "vest_black", + ), + ) + +/datum/armor/suit_armor/blueshield + bomb = 30 + fire = 75 + acid = 75 + +/obj/item/clothing/suit/armor/vest/blueshield/jacket + name = "blueshield's jacket" + desc = "An expensive kevlar-lined jacket with a golden badge on the chest and \"NT\" emblazoned on the back. It weighs surprisingly little, despite how heavy it looks." + icon_state = "blueshield" + body_parts_covered = CHEST|ARMS + unique_reskin = null + +/obj/item/clothing/suit/armor/vest/blueshield/jacket/Initialize(mapload) + . = ..() + AddComponent(/datum/component/toggle_icon) + +/obj/item/clothing/suit/hooded/wintercoat/nova/blueshield + name = "blueshield's winter coat" + icon_state = "coatblueshield" + desc = "A comfy kevlar-lined coat with blue highlights, fit to keep the blueshield armored and warm." + hoodtype = /obj/item/clothing/head/hooded/winterhood/nova/blueshield + allowed = list(/obj/item/melee/baton/security/loaded) + armor_type = /datum/armor/suit_armor/blueshield + +/obj/item/clothing/suit/hooded/wintercoat/nova/blueshield/Initialize(mapload) + . = ..() + allowed += GLOB.security_vest_allowed + +/obj/item/clothing/head/hooded/winterhood/nova/blueshield + icon_state = "hood_blueshield" + desc = "A comfy kevlar-lined hood to go with the comfy kevlar-lined coat." + armor_type = /datum/armor/suit_armor/blueshield diff --git a/modular_skyrat/modules/blueshield/code/devices/crew.dm b/modular_nova/modules/blueshield/code/devices/crew.dm similarity index 100% rename from modular_skyrat/modules/blueshield/code/devices/crew.dm rename to modular_nova/modules/blueshield/code/devices/crew.dm diff --git a/modular_skyrat/modules/blueshield/code/devices/sensor_device.dm b/modular_nova/modules/blueshield/code/devices/sensor_device.dm similarity index 84% rename from modular_skyrat/modules/blueshield/code/devices/sensor_device.dm rename to modular_nova/modules/blueshield/code/devices/sensor_device.dm index f9fffbc1d5b696..b80c4282be7207 100644 --- a/modular_skyrat/modules/blueshield/code/devices/sensor_device.dm +++ b/modular_nova/modules/blueshield/code/devices/sensor_device.dm @@ -1,7 +1,7 @@ /obj/item/sensor_device/blueshield name = "blueshield's handheld monitor" desc = "A unique model of handheld crew monitor that seems to have been customized for Executive Protection purposes." - icon = 'modular_skyrat/modules/blueshield/icons/device.dmi' + icon = 'modular_nova/modules/blueshield/icons/device.dmi' icon_state = "blueshield_scanner" /obj/item/sensor_device/blueshield/attack_self(mob/user) diff --git a/modular_skyrat/modules/blueshield/code/encryptionkey.dm b/modular_nova/modules/blueshield/code/encryptionkey.dm similarity index 100% rename from modular_skyrat/modules/blueshield/code/encryptionkey.dm rename to modular_nova/modules/blueshield/code/encryptionkey.dm diff --git a/modular_nova/modules/blueshield/code/landmarks.dm b/modular_nova/modules/blueshield/code/landmarks.dm new file mode 100644 index 00000000000000..3387d424bafb26 --- /dev/null +++ b/modular_nova/modules/blueshield/code/landmarks.dm @@ -0,0 +1,4 @@ +/obj/effect/landmark/start/blueshield + name = "Blueshield" + icon_state = "Blueshield" + icon = 'modular_nova/master_files/icons/mob/landmarks.dmi' diff --git a/modular_skyrat/modules/blueshield/code/medkit.dm b/modular_nova/modules/blueshield/code/medkit.dm similarity index 100% rename from modular_skyrat/modules/blueshield/code/medkit.dm rename to modular_nova/modules/blueshield/code/medkit.dm diff --git a/modular_skyrat/modules/blueshield/code/modsuit/mod_theme.dm b/modular_nova/modules/blueshield/code/modsuit/mod_theme.dm similarity index 93% rename from modular_skyrat/modules/blueshield/code/modsuit/mod_theme.dm rename to modular_nova/modules/blueshield/code/modsuit/mod_theme.dm index cfb38c35a6aeb6..f7155396c92157 100644 --- a/modular_skyrat/modules/blueshield/code/modsuit/mod_theme.dm +++ b/modular_nova/modules/blueshield/code/modsuit/mod_theme.dm @@ -27,8 +27,8 @@ ) skins = list( "praetorian" = list( - MOD_ICON_OVERRIDE = 'modular_skyrat/modules/blueshield/icons/praetorian.dmi', - MOD_WORN_ICON_OVERRIDE = 'modular_skyrat/modules/blueshield/icons/worn_praetorian.dmi', + MOD_ICON_OVERRIDE = 'modular_nova/modules/blueshield/icons/praetorian.dmi', + MOD_WORN_ICON_OVERRIDE = 'modular_nova/modules/blueshield/icons/worn_praetorian.dmi', HELMET_FLAGS = list( UNSEALED_LAYER = null, UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, diff --git a/modular_skyrat/modules/blueshield/code/modsuit/mod_type.dm b/modular_nova/modules/blueshield/code/modsuit/mod_type.dm similarity index 77% rename from modular_skyrat/modules/blueshield/code/modsuit/mod_type.dm rename to modular_nova/modules/blueshield/code/modsuit/mod_type.dm index a18bce3eac0940..2620cbcea70610 100644 --- a/modular_skyrat/modules/blueshield/code/modsuit/mod_type.dm +++ b/modular_nova/modules/blueshield/code/modsuit/mod_type.dm @@ -1,6 +1,6 @@ /obj/item/mod/control/pre_equipped/blueshield - worn_icon = 'modular_skyrat/modules/blueshield/icons/worn_praetorian.dmi' - icon = 'modular_skyrat/modules/blueshield/icons/praetorian.dmi' + worn_icon = 'modular_nova/modules/blueshield/icons/worn_praetorian.dmi' + icon = 'modular_nova/modules/blueshield/icons/praetorian.dmi' icon_state = "praetorian-control" theme = /datum/mod_theme/blueshield applied_cell = /obj/item/stock_parts/cell/super diff --git a/modular_skyrat/modules/blueshield/icons/M45A5.dmi b/modular_nova/modules/blueshield/icons/M45A5.dmi similarity index 100% rename from modular_skyrat/modules/blueshield/icons/M45A5.dmi rename to modular_nova/modules/blueshield/icons/M45A5.dmi diff --git a/modular_skyrat/modules/blueshield/icons/device.dmi b/modular_nova/modules/blueshield/icons/device.dmi similarity index 100% rename from modular_skyrat/modules/blueshield/icons/device.dmi rename to modular_nova/modules/blueshield/icons/device.dmi diff --git a/modular_skyrat/modules/blueshield/icons/energy.dmi b/modular_nova/modules/blueshield/icons/energy.dmi similarity index 100% rename from modular_skyrat/modules/blueshield/icons/energy.dmi rename to modular_nova/modules/blueshield/icons/energy.dmi diff --git a/modular_skyrat/modules/blueshield/icons/guns_lefthand.dmi b/modular_nova/modules/blueshield/icons/guns_lefthand.dmi similarity index 100% rename from modular_skyrat/modules/blueshield/icons/guns_lefthand.dmi rename to modular_nova/modules/blueshield/icons/guns_lefthand.dmi diff --git a/modular_skyrat/modules/blueshield/icons/guns_righthand.dmi b/modular_nova/modules/blueshield/icons/guns_righthand.dmi similarity index 100% rename from modular_skyrat/modules/blueshield/icons/guns_righthand.dmi rename to modular_nova/modules/blueshield/icons/guns_righthand.dmi diff --git a/modular_skyrat/modules/blueshield/icons/melee_lefthand.dmi b/modular_nova/modules/blueshield/icons/melee_lefthand.dmi similarity index 100% rename from modular_skyrat/modules/blueshield/icons/melee_lefthand.dmi rename to modular_nova/modules/blueshield/icons/melee_lefthand.dmi diff --git a/modular_skyrat/modules/blueshield/icons/melee_righthand.dmi b/modular_nova/modules/blueshield/icons/melee_righthand.dmi similarity index 100% rename from modular_skyrat/modules/blueshield/icons/melee_righthand.dmi rename to modular_nova/modules/blueshield/icons/melee_righthand.dmi diff --git a/modular_skyrat/modules/blueshield/icons/praetorian.dmi b/modular_nova/modules/blueshield/icons/praetorian.dmi similarity index 100% rename from modular_skyrat/modules/blueshield/icons/praetorian.dmi rename to modular_nova/modules/blueshield/icons/praetorian.dmi diff --git a/modular_skyrat/modules/blueshield/icons/radio.dmi b/modular_nova/modules/blueshield/icons/radio.dmi similarity index 100% rename from modular_skyrat/modules/blueshield/icons/radio.dmi rename to modular_nova/modules/blueshield/icons/radio.dmi diff --git a/modular_skyrat/modules/blueshield/icons/worn_praetorian.dmi b/modular_nova/modules/blueshield/icons/worn_praetorian.dmi similarity index 100% rename from modular_skyrat/modules/blueshield/icons/worn_praetorian.dmi rename to modular_nova/modules/blueshield/icons/worn_praetorian.dmi diff --git a/modular_nova/modules/blueshield/readme.md b/modular_nova/modules/blueshield/readme.md new file mode 100644 index 00000000000000..7c32f8021a0f49 --- /dev/null +++ b/modular_nova/modules/blueshield/readme.md @@ -0,0 +1,33 @@ +https://github.com/Skyrat-SS13/Skyrat-tg/pull/127 + +## Title: Blueshield + +MODULE ID: BLUESHIELD + +### Description: + +Adds the blueshield job to the game. It does not however add the blueshield office to the map. This includes all the blueshields items and job descriptors. + +### TG Proc Changes: + +- code/modules/jobs/jobs.dm > GLOBAL_LIST_INIT(security_positions, list() +- code/modules/jobs/access.dm > /proc/get_all_accesses() + +### Defines: + +- #define JOB_DISPLAY_ORDER_BLUESHIELD 34 +- #define ACCESS_BLUESHIELD 71 + +### Master file additions + +- ./modular_nova/master_files/icons/mob/hud.dmi #NEW +- ./modular_nova/master_files/icons/clothing/hands.dmi #NEW +- ./modular_nova/master_files/icons/obj/clothing/gloves.dmi #NEW + +### Included files that are not contained in this module: + +- N/A + +### Credits: + +Gandalf2k15 - Porting diff --git a/modular_nova/modules/bluespace_miner/code/bluespace_miner.dm b/modular_nova/modules/bluespace_miner/code/bluespace_miner.dm new file mode 100644 index 00000000000000..003fff71c0072c --- /dev/null +++ b/modular_nova/modules/bluespace_miner/code/bluespace_miner.dm @@ -0,0 +1,231 @@ +#define BLUESPACE_MINER_TOO_HOT (1<<0) +#define BLUESPACE_MINER_LOW_PRESSURE (1<<1) +#define BLUESPACE_MINER_HIGH_PRESSURE (1<<2) +#define BLUESPACE_MINER_TOO_CLOSE (1<<3) + +/obj/machinery/bluespace_miner + name = "bluespace miner" + desc = "Through the power of bluespace, it is capable of producing materials." + icon = 'modular_nova/modules/bluespace_miner/icons/bluespace_miner.dmi' + icon_state = "miner" + + density = TRUE + circuit = /obj/item/circuitboard/machine/bluespace_miner + idle_power_usage = 300 + + ///the temperature of the co2 produced per successful process (its really 100) KELVIN + var/gas_temp = 100 + ///the amount of seconds process_speed goes on cooldown for + var/processing_speed = 6 SECONDS + ///the current status of the enviroment. Any nonzero value means we can't work + var/mining_stat = NONE + ///the chance each ore has to be picked, weighted list + var/list/ore_chance = list( + /obj/item/stack/sheet/iron = 20, + /obj/item/stack/sheet/glass = 20, + /obj/item/stack/sheet/mineral/plasma = 14, + /obj/item/stack/sheet/mineral/silver = 8, + /obj/item/stack/sheet/mineral/titanium = 8, + /obj/item/stack/sheet/mineral/uranium = 3, + /obj/item/xenoarch/strange_rock = 3, + /obj/item/stack/sheet/mineral/gold = 3, + /obj/item/stack/sheet/mineral/diamond = 1, + ) + COOLDOWN_DECLARE(process_speed) + +/obj/machinery/bluespace_miner/RefreshParts() + . = ..() + + gas_temp = 100 //starts at 100, should go down to 80 at most. + for(var/datum/stock_part/micro_laser/laser_part in component_parts) + gas_temp -= (laser_part.tier * 5) + + processing_speed = 6 SECONDS //starts at 6 seconds, should go down to 4 seconds at most. + for(var/datum/stock_part/servo/servo_part in component_parts) + processing_speed -= (servo_part.tier * (0.5 SECONDS)) + +/obj/machinery/bluespace_miner/update_overlays() + . = ..() + cut_overlays() + if(panel_open) + add_overlay("miner_open") + if(machine_stat & (NOPOWER|BROKEN)) + return + if(mining_stat) + add_overlay("miner_error") + // This one overrides all the following overlays so we check it first + if(mining_stat & BLUESPACE_MINER_TOO_CLOSE) + add_overlay("miner_proximity") + return + if(mining_stat & BLUESPACE_MINER_TOO_HOT) + add_overlay("miner_hot") + if(mining_stat & BLUESPACE_MINER_LOW_PRESSURE) + add_overlay("miner_plow") + else if(mining_stat & BLUESPACE_MINER_HIGH_PRESSURE) + add_overlay("miner_phigh") + else + add_overlay("miner_on") + +/obj/machinery/bluespace_miner/examine(mob/user) + . = ..() + if(obj_flags & EMAGGED) + . += span_warning("The safeties are turned off!") + // We don't need to run any more checks if this is functioning. Genuinely the old code is terrible + if(mining_stat) + if(mining_stat & BLUESPACE_MINER_TOO_CLOSE) + . += span_warning("[src] is in a suboptimal environment: TOO CLOSE TO ANOTHER BLUESPACE MINER") + return . // This needs relocation to fix so we won't bother with the rest + if(mining_stat & BLUESPACE_MINER_TOO_HOT) + . += span_warning("[src] is in a suboptimal environment: " + span_boldwarning("TEMPERATURE TOO HIGH!")) + if(mining_stat & BLUESPACE_MINER_LOW_PRESSURE) + . += span_warning("[src] is in a suboptimal environment: " + span_boldwarning("PRESSURE TOO LOW!")) + else if(mining_stat & BLUESPACE_MINER_HIGH_PRESSURE) + . += span_warning("[src] is in a suboptimal environment: " + span_boldwarning("PRESSURE TOO HIGH!")) + + +//we need to make sure we can actually print the ores out +/obj/machinery/bluespace_miner/proc/check_factors() + if(!COOLDOWN_FINISHED(src, process_speed)) + return FALSE + COOLDOWN_START(src, process_speed, processing_speed) + // cant be broken or unpowered + if(machine_stat & (NOPOWER|BROKEN)) + return FALSE + // cant be unanchored or open panel + if(!anchored || panel_open) + return FALSE + var/previous_mining_stat = mining_stat + // Generates the mining_stat to use for overlays and checks + update_mining_stat() + // Updates the overlays, if it is needed + if(mining_stat != previous_mining_stat) + update_appearance() + // Check if it is nonzero + if(mining_stat) + playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE, SILENCED_SOUND_EXTRARANGE, ignore_walls = FALSE) + return FALSE + // mining_stat = 0, we are ready to go + return TRUE + +//Checking enviroment individually +/obj/machinery/bluespace_miner/proc/update_mining_stat() + // To actually check atmos + var/turf/src_turf = get_turf(src) + var/datum/gas_mixture/environment = src_turf.return_air() + // Default value + mining_stat = NONE + // Proximity check, needs to be more than one tile from another miners + for(var/obj/machinery/bluespace_miner/bs_miner in range(1, src)) + if(bs_miner != src) + mining_stat = mining_stat | BLUESPACE_MINER_TOO_CLOSE + return // This is allmighty + // if its hotter than (or equal to) room temp, don't work + if(environment.temperature >= T20C) + mining_stat = mining_stat | BLUESPACE_MINER_TOO_HOT + // if its lesser than(or equal to) normal pressure, don't work. Same goes for over(or equal to) 150% pressure + if(environment.return_pressure() <= ONE_ATMOSPHERE) + mining_stat = mining_stat | BLUESPACE_MINER_LOW_PRESSURE + else if(environment.return_pressure() >= (ONE_ATMOSPHERE * 1.5)) + mining_stat = mining_stat | BLUESPACE_MINER_HIGH_PRESSURE + +//if check_factors is good, then we spawn materials +/obj/machinery/bluespace_miner/proc/spawn_mats() + var/obj/chosen_sheet = pick_weight(ore_chance) + new chosen_sheet(get_turf(src)) + +/obj/machinery/bluespace_miner/process() + if(!check_factors()) + return + // Generate all the waste gas + var/datum/gas_mixture/merger = new + merger.assert_gas(/datum/gas/carbon_dioxide) + merger.gases[/datum/gas/carbon_dioxide][MOLES] = MOLES_CELLSTANDARD + if(obj_flags & EMAGGED) + merger.assert_gas(/datum/gas/tritium) + merger.gases[/datum/gas/tritium][MOLES] = MOLES_CELLSTANDARD + merger.temperature = (T20C + gas_temp) + var/turf/src_turf = get_turf(src) + src_turf.assume_air(merger) + // Finally spawn the mats + spawn_mats() + // Crazy? I was crazy once. They locked me in a room, an atmos room, an atmos room with bluespace miners, and the bluespace miners made me crazy. + // This sound no longer echoes through departments like before. Got that was an era. + playsound(src, 'sound/machines/ping.ogg', 50, FALSE, SILENCED_SOUND_EXTRARANGE, ignore_walls = FALSE) + +/obj/machinery/bluespace_miner/crowbar_act(mob/living/user, obj/item/tool) + if(default_deconstruction_crowbar(tool)) + return TRUE + +/obj/machinery/bluespace_miner/screwdriver_act(mob/living/user, obj/item/tool) + . = TRUE + if(..()) + return + if(default_deconstruction_screwdriver(user, icon_state, icon_state, tool)) + update_appearance() + return + return FALSE + +/obj/machinery/bluespace_miner/emag_act(mob/user, obj/item/card/emag/emag_card) + if(obj_flags & EMAGGED) + balloon_alert(user, "already emagged!") + return FALSE + ore_chance += list(/obj/item/stack/sheet/mineral/bananium = 1) + obj_flags |= EMAGGED + balloon_alert_to_viewers("fizzles!") + return TRUE + +/obj/item/circuitboard/machine/bluespace_miner + name = "Bluespace Miner" + desc = "The bluespace miner is a machine that, when provided the correct temperature and pressure, will produce materials." + greyscale_colors = CIRCUIT_COLOR_GENERIC + build_path = /obj/machinery/bluespace_miner + req_components = list( + /obj/item/stack/sheet/glass = 1, + /obj/item/stack/ore/bluespace_crystal/refined = 1, + /datum/stock_part/matter_bin = 2, + /datum/stock_part/micro_laser = 2, + /datum/stock_part/servo = 2, + ) + needs_anchored = TRUE + +/datum/supply_pack/misc/bluespace_miner + name = "Bluespace Miner" + desc = "Symphionia has revolutionized the procuring of materials with bluespace-- featuring the Bluespace Miner!" + cost = CARGO_CRATE_VALUE * 50 // 10,000 + contains = list(/obj/item/circuitboard/machine/bluespace_miner) + crate_name = "Bluespace Miner Circuitboard Crate" + crate_type = /obj/structure/closet/crate + +/* if we were going to go research based +/datum/design/board/bluespace_miner + name = "Machine Design (Bluespace Miner)" + desc = "Allows for the construction of circuit boards used to build a bluespace miner." + id = "bluespace_miner" + build_path = /obj/item/circuitboard/machine/bluespace_miner + category = list(RND_CATEGORY_MISC_MACHINERY) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_ENGINEERING + +/datum/experiment/scanning/points/bluespace_miner + name = "Bluespace Miner" + description = "We can learn from the past technology and create a better future-- with bluespace miners." + required_points = 5 + required_atoms = list( + /obj/item/xenoarch/broken_item/tech = 1, + ) + +/datum/techweb_node/bluespace_miner + id = "bluespace_miner" + display_name = "Bluespace Miner" + description = "The future is here, where we can mine ores from the great bluespace sea." + prereq_ids = list("anomaly_research", "bluespace_power") + design_ids = list( + "bluespace_miner", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) + discount_experiments = list(/datum/experiment/scanning/points/bluespace_miner = 5000) +*/ + +#undef BLUESPACE_MINER_TOO_HOT +#undef BLUESPACE_MINER_LOW_PRESSURE +#undef BLUESPACE_MINER_HIGH_PRESSURE +#undef BLUESPACE_MINER_TOO_CLOSE diff --git a/modular_nova/modules/bluespace_miner/icons/bluespace_miner.dmi b/modular_nova/modules/bluespace_miner/icons/bluespace_miner.dmi new file mode 100644 index 00000000000000..01b9db8ff53cd9 Binary files /dev/null and b/modular_nova/modules/bluespace_miner/icons/bluespace_miner.dmi differ diff --git a/modular_skyrat/modules/bluespace_miner/readme.md b/modular_nova/modules/bluespace_miner/readme.md similarity index 100% rename from modular_skyrat/modules/bluespace_miner/readme.md rename to modular_nova/modules/bluespace_miner/readme.md diff --git a/modular_skyrat/modules/bodyparts/code/_mutant_bodyparts.dm b/modular_nova/modules/bodyparts/code/_mutant_bodyparts.dm similarity index 100% rename from modular_skyrat/modules/bodyparts/code/_mutant_bodyparts.dm rename to modular_nova/modules/bodyparts/code/_mutant_bodyparts.dm diff --git a/modular_skyrat/modules/bodyparts/code/akula_bodyparts.dm b/modular_nova/modules/bodyparts/code/akula_bodyparts.dm similarity index 100% rename from modular_skyrat/modules/bodyparts/code/akula_bodyparts.dm rename to modular_nova/modules/bodyparts/code/akula_bodyparts.dm diff --git a/modular_skyrat/modules/bodyparts/code/aquatic_bodyparts.dm b/modular_nova/modules/bodyparts/code/aquatic_bodyparts.dm similarity index 100% rename from modular_skyrat/modules/bodyparts/code/aquatic_bodyparts.dm rename to modular_nova/modules/bodyparts/code/aquatic_bodyparts.dm diff --git a/modular_skyrat/modules/bodyparts/code/ashwalker_bodyparts.dm b/modular_nova/modules/bodyparts/code/ashwalker_bodyparts.dm similarity index 100% rename from modular_skyrat/modules/bodyparts/code/ashwalker_bodyparts.dm rename to modular_nova/modules/bodyparts/code/ashwalker_bodyparts.dm diff --git a/modular_skyrat/modules/bodyparts/code/ghoul_bodyparts.dm b/modular_nova/modules/bodyparts/code/ghoul_bodyparts.dm similarity index 100% rename from modular_skyrat/modules/bodyparts/code/ghoul_bodyparts.dm rename to modular_nova/modules/bodyparts/code/ghoul_bodyparts.dm diff --git a/modular_skyrat/modules/bodyparts/code/golem_bodyparts.dm b/modular_nova/modules/bodyparts/code/golem_bodyparts.dm similarity index 100% rename from modular_skyrat/modules/bodyparts/code/golem_bodyparts.dm rename to modular_nova/modules/bodyparts/code/golem_bodyparts.dm diff --git a/modular_skyrat/modules/bodyparts/code/human_bodyparts.dm b/modular_nova/modules/bodyparts/code/human_bodyparts.dm similarity index 100% rename from modular_skyrat/modules/bodyparts/code/human_bodyparts.dm rename to modular_nova/modules/bodyparts/code/human_bodyparts.dm diff --git a/modular_skyrat/modules/bodyparts/code/insect_bodyparts.dm b/modular_nova/modules/bodyparts/code/insect_bodyparts.dm similarity index 100% rename from modular_skyrat/modules/bodyparts/code/insect_bodyparts.dm rename to modular_nova/modules/bodyparts/code/insect_bodyparts.dm diff --git a/modular_skyrat/modules/bodyparts/code/lizard_bodyparts.dm b/modular_nova/modules/bodyparts/code/lizard_bodyparts.dm similarity index 100% rename from modular_skyrat/modules/bodyparts/code/lizard_bodyparts.dm rename to modular_nova/modules/bodyparts/code/lizard_bodyparts.dm diff --git a/modular_skyrat/modules/bodyparts/code/luminescent_bodyparts.dm b/modular_nova/modules/bodyparts/code/luminescent_bodyparts.dm similarity index 100% rename from modular_skyrat/modules/bodyparts/code/luminescent_bodyparts.dm rename to modular_nova/modules/bodyparts/code/luminescent_bodyparts.dm diff --git a/modular_skyrat/modules/bodyparts/code/moth_bodyparts.dm b/modular_nova/modules/bodyparts/code/moth_bodyparts.dm similarity index 88% rename from modular_skyrat/modules/bodyparts/code/moth_bodyparts.dm rename to modular_nova/modules/bodyparts/code/moth_bodyparts.dm index 80dadd5005a839..3f55ec933938da 100644 --- a/modular_skyrat/modules/bodyparts/code/moth_bodyparts.dm +++ b/modular_nova/modules/bodyparts/code/moth_bodyparts.dm @@ -12,6 +12,7 @@ icon_state = "moth_chest_m" limb_id = SPECIES_MOTH is_dimorphic = TRUE + wing_types = list(/obj/item/organ/external/wings/functional/moth/megamoth, /obj/item/organ/external/wings/functional/moth/mothra) /obj/item/bodypart/arm/left/moth icon = BODYPART_ICON_MOTH diff --git a/modular_skyrat/modules/bodyparts/code/mushperson_bodyparts.dm b/modular_nova/modules/bodyparts/code/mushperson_bodyparts.dm similarity index 100% rename from modular_skyrat/modules/bodyparts/code/mushperson_bodyparts.dm rename to modular_nova/modules/bodyparts/code/mushperson_bodyparts.dm diff --git a/modular_skyrat/modules/bodyparts/code/parts.dm b/modular_nova/modules/bodyparts/code/parts.dm similarity index 100% rename from modular_skyrat/modules/bodyparts/code/parts.dm rename to modular_nova/modules/bodyparts/code/parts.dm diff --git a/modular_skyrat/modules/bodyparts/code/podperson_bodyparts.dm b/modular_nova/modules/bodyparts/code/podperson_bodyparts.dm similarity index 100% rename from modular_skyrat/modules/bodyparts/code/podperson_bodyparts.dm rename to modular_nova/modules/bodyparts/code/podperson_bodyparts.dm diff --git a/modular_skyrat/modules/bodyparts/code/roundstartslime_bodyparts.dm b/modular_nova/modules/bodyparts/code/roundstartslime_bodyparts.dm similarity index 100% rename from modular_skyrat/modules/bodyparts/code/roundstartslime_bodyparts.dm rename to modular_nova/modules/bodyparts/code/roundstartslime_bodyparts.dm diff --git a/modular_skyrat/modules/bodyparts/code/skrell_bodyparts.dm b/modular_nova/modules/bodyparts/code/skrell_bodyparts.dm similarity index 100% rename from modular_skyrat/modules/bodyparts/code/skrell_bodyparts.dm rename to modular_nova/modules/bodyparts/code/skrell_bodyparts.dm diff --git a/modular_skyrat/modules/bodyparts/code/slime_bodyparts.dm b/modular_nova/modules/bodyparts/code/slime_bodyparts.dm similarity index 100% rename from modular_skyrat/modules/bodyparts/code/slime_bodyparts.dm rename to modular_nova/modules/bodyparts/code/slime_bodyparts.dm diff --git a/modular_nova/modules/bodyparts/code/snail_bodyparts.dm b/modular_nova/modules/bodyparts/code/snail_bodyparts.dm new file mode 100644 index 00000000000000..9a4c166922cd44 --- /dev/null +++ b/modular_nova/modules/bodyparts/code/snail_bodyparts.dm @@ -0,0 +1,28 @@ +// MODULAR SNAIL OVERRIDES + +/obj/item/bodypart/head/snail + icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC + head_flags = HEAD_HAIR|HEAD_FACIAL_HAIR|HEAD_EYESPRITES|HEAD_EYECOLOR|HEAD_DEBRAIN + +/obj/item/bodypart/chest/snail + icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC + +/obj/item/bodypart/arm/left/snail + icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC + unarmed_damage_low = 1 // Roundstart Snails - Lowest possible punch damage. if this is set to 0, punches will always miss. + unarmed_damage_high = 5 // Roundstart Snails - A Bit More damage. + +/obj/item/bodypart/arm/right/snail + icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC + unarmed_damage_low = 1 + unarmed_damage_high = 5 + +/obj/item/bodypart/leg/left/snail + icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC + unarmed_damage_low = 1. + unarmed_damage_high = 5 + +/obj/item/bodypart/leg/right/snail + icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC + unarmed_damage_low = 1 + unarmed_damage_high = 5 diff --git a/modular_skyrat/modules/bodyparts/code/stargazer_bodyparts.dm b/modular_nova/modules/bodyparts/code/stargazer_bodyparts.dm similarity index 100% rename from modular_skyrat/modules/bodyparts/code/stargazer_bodyparts.dm rename to modular_nova/modules/bodyparts/code/stargazer_bodyparts.dm diff --git a/modular_skyrat/modules/bodyparts/code/taur_bodyparts.dm b/modular_nova/modules/bodyparts/code/taur_bodyparts.dm similarity index 90% rename from modular_skyrat/modules/bodyparts/code/taur_bodyparts.dm rename to modular_nova/modules/bodyparts/code/taur_bodyparts.dm index 658c7f1a1c2bcb..6ae3775f0a714b 100644 --- a/modular_skyrat/modules/bodyparts/code/taur_bodyparts.dm +++ b/modular_nova/modules/bodyparts/code/taur_bodyparts.dm @@ -27,8 +27,8 @@ /obj/item/bodypart/leg/right/robot/synth/taur bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_TAUR - damage_examines = list(BRUTE = ROBOTIC_BRUTE_EXAMINE_TEXT, BURN = ROBOTIC_BURN_EXAMINE_TEXT, CLONE = DEFAULT_CLONE_EXAMINE_TEXT) + damage_examines = list(BRUTE = ROBOTIC_BRUTE_EXAMINE_TEXT, BURN = ROBOTIC_BURN_EXAMINE_TEXT) /obj/item/bodypart/leg/left/robot/synth/taur bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_TAUR - damage_examines = list(BRUTE = ROBOTIC_BRUTE_EXAMINE_TEXT, BURN = ROBOTIC_BURN_EXAMINE_TEXT, CLONE = DEFAULT_CLONE_EXAMINE_TEXT) + damage_examines = list(BRUTE = ROBOTIC_BRUTE_EXAMINE_TEXT, BURN = ROBOTIC_BURN_EXAMINE_TEXT) diff --git a/modular_skyrat/modules/bodyparts/code/teshari_bodyparts.dm b/modular_nova/modules/bodyparts/code/teshari_bodyparts.dm similarity index 82% rename from modular_skyrat/modules/bodyparts/code/teshari_bodyparts.dm rename to modular_nova/modules/bodyparts/code/teshari_bodyparts.dm index 3762bf1d0a8828..2127353beffce5 100644 --- a/modular_skyrat/modules/bodyparts/code/teshari_bodyparts.dm +++ b/modular_nova/modules/bodyparts/code/teshari_bodyparts.dm @@ -21,7 +21,7 @@ worn_head_offset = new( attached_part = src, feature_key = OFFSET_HEAD, - offset_x = list("north" = 1, "south" = 1, "east" = 1, "west" = -1, "northwest" = -1, "southwest" = -1), + offset_x = list("north" = 1, "south" = 1, "east" = 1, "west" = -1, "northwest" = -1, "southwest" = -1, "northeast" = 1, "southeast" = 1), offset_y = list("north" = -4, "south" = -4, "east" = -4, "west" = -4), ) worn_mask_offset = new( @@ -52,6 +52,23 @@ ) return ..() +/obj/item/bodypart/arm/left/mutant/teshari/Initialize(mapload) + held_hand_offset = new( + attached_part = src, + feature_key = OFFSET_HELD, + offset_x = list("north" = 0, "south" = 0, "east" = 0, "west" = -6, "northwest" = -6, "southwest" = -6, "northeast" = 0, "southeast" = 0), + offset_y = list("north" = -3, "south" = -3, "east" = -3, "west" = -3), + ) + return ..() + +/obj/item/bodypart/arm/right/mutant/teshari/Initialize(mapload) + held_hand_offset = new( + attached_part = src, + feature_key = OFFSET_HELD, + offset_x = list("north" = 0, "south" = 0, "east" = 6, "west" = 0, "northwest" = 0, "southwest" = 0, "northeast" = 6, "southeast" = 6), + offset_y = list("north" = -3, "south" = -3, "east" = -3, "west" = -3), + ) + return ..() /obj/item/bodypart/arm/left/mutant/teshari icon_greyscale = BODYPART_ICON_TESHARI diff --git a/modular_skyrat/modules/bodyparts/code/vox_bodyparts.dm b/modular_nova/modules/bodyparts/code/vox_bodyparts.dm similarity index 100% rename from modular_skyrat/modules/bodyparts/code/vox_bodyparts.dm rename to modular_nova/modules/bodyparts/code/vox_bodyparts.dm diff --git a/modular_skyrat/modules/bodyparts/code/xenohybrid_bodyparts.dm b/modular_nova/modules/bodyparts/code/xenohybrid_bodyparts.dm similarity index 100% rename from modular_skyrat/modules/bodyparts/code/xenohybrid_bodyparts.dm rename to modular_nova/modules/bodyparts/code/xenohybrid_bodyparts.dm diff --git a/modular_skyrat/modules/bodyparts/icons/akula_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/akula_parts_greyscale.dmi similarity index 100% rename from modular_skyrat/modules/bodyparts/icons/akula_parts_greyscale.dmi rename to modular_nova/modules/bodyparts/icons/akula_parts_greyscale.dmi diff --git a/modular_skyrat/modules/bodyparts/icons/aquatic_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/aquatic_parts_greyscale.dmi similarity index 100% rename from modular_skyrat/modules/bodyparts/icons/aquatic_parts_greyscale.dmi rename to modular_nova/modules/bodyparts/icons/aquatic_parts_greyscale.dmi diff --git a/modular_skyrat/modules/bodyparts/icons/ghoul_bodyparts.dmi b/modular_nova/modules/bodyparts/icons/ghoul_bodyparts.dmi similarity index 100% rename from modular_skyrat/modules/bodyparts/icons/ghoul_bodyparts.dmi rename to modular_nova/modules/bodyparts/icons/ghoul_bodyparts.dmi diff --git a/modular_skyrat/modules/bodyparts/icons/human_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/human_parts_greyscale.dmi similarity index 100% rename from modular_skyrat/modules/bodyparts/icons/human_parts_greyscale.dmi rename to modular_nova/modules/bodyparts/icons/human_parts_greyscale.dmi diff --git a/modular_skyrat/modules/bodyparts/icons/insect_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/insect_parts_greyscale.dmi similarity index 100% rename from modular_skyrat/modules/bodyparts/icons/insect_parts_greyscale.dmi rename to modular_nova/modules/bodyparts/icons/insect_parts_greyscale.dmi diff --git a/modular_skyrat/modules/bodyparts/icons/ipc_parts.dmi b/modular_nova/modules/bodyparts/icons/ipc_parts.dmi similarity index 100% rename from modular_skyrat/modules/bodyparts/icons/ipc_parts.dmi rename to modular_nova/modules/bodyparts/icons/ipc_parts.dmi diff --git a/modular_skyrat/modules/bodyparts/icons/lizard_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/lizard_parts_greyscale.dmi similarity index 100% rename from modular_skyrat/modules/bodyparts/icons/lizard_parts_greyscale.dmi rename to modular_nova/modules/bodyparts/icons/lizard_parts_greyscale.dmi diff --git a/modular_skyrat/modules/bodyparts/icons/mammal_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/mammal_parts_greyscale.dmi similarity index 100% rename from modular_skyrat/modules/bodyparts/icons/mammal_parts_greyscale.dmi rename to modular_nova/modules/bodyparts/icons/mammal_parts_greyscale.dmi diff --git a/modular_skyrat/modules/bodyparts/icons/moth_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/moth_parts_greyscale.dmi similarity index 100% rename from modular_skyrat/modules/bodyparts/icons/moth_parts_greyscale.dmi rename to modular_nova/modules/bodyparts/icons/moth_parts_greyscale.dmi diff --git a/modular_skyrat/modules/bodyparts/icons/skrell_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/skrell_parts_greyscale.dmi similarity index 100% rename from modular_skyrat/modules/bodyparts/icons/skrell_parts_greyscale.dmi rename to modular_nova/modules/bodyparts/icons/skrell_parts_greyscale.dmi diff --git a/modular_skyrat/modules/bodyparts/icons/slime_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/slime_parts_greyscale.dmi similarity index 100% rename from modular_skyrat/modules/bodyparts/icons/slime_parts_greyscale.dmi rename to modular_nova/modules/bodyparts/icons/slime_parts_greyscale.dmi diff --git a/modular_skyrat/modules/bodyparts/icons/synthliz_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/synthliz_parts_greyscale.dmi similarity index 100% rename from modular_skyrat/modules/bodyparts/icons/synthliz_parts_greyscale.dmi rename to modular_nova/modules/bodyparts/icons/synthliz_parts_greyscale.dmi diff --git a/modular_skyrat/modules/bodyparts/icons/synthmammal_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/synthmammal_parts_greyscale.dmi similarity index 100% rename from modular_skyrat/modules/bodyparts/icons/synthmammal_parts_greyscale.dmi rename to modular_nova/modules/bodyparts/icons/synthmammal_parts_greyscale.dmi diff --git a/modular_skyrat/modules/bodyparts/icons/taur_invisible_legs.dmi b/modular_nova/modules/bodyparts/icons/taur_invisible_legs.dmi similarity index 100% rename from modular_skyrat/modules/bodyparts/icons/taur_invisible_legs.dmi rename to modular_nova/modules/bodyparts/icons/taur_invisible_legs.dmi diff --git a/modular_skyrat/modules/bodyparts/icons/teshari_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/teshari_parts_greyscale.dmi similarity index 100% rename from modular_skyrat/modules/bodyparts/icons/teshari_parts_greyscale.dmi rename to modular_nova/modules/bodyparts/icons/teshari_parts_greyscale.dmi diff --git a/modular_skyrat/modules/bodyparts/icons/vox_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/vox_parts_greyscale.dmi similarity index 100% rename from modular_skyrat/modules/bodyparts/icons/vox_parts_greyscale.dmi rename to modular_nova/modules/bodyparts/icons/vox_parts_greyscale.dmi diff --git a/modular_skyrat/modules/bodyparts/icons/xeno_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/xeno_parts_greyscale.dmi similarity index 100% rename from modular_skyrat/modules/bodyparts/icons/xeno_parts_greyscale.dmi rename to modular_nova/modules/bodyparts/icons/xeno_parts_greyscale.dmi diff --git a/modular_skyrat/modules/bongs/code/bong.dm b/modular_nova/modules/bongs/code/bong.dm similarity index 92% rename from modular_skyrat/modules/bongs/code/bong.dm rename to modular_nova/modules/bongs/code/bong.dm index 614ccfca3432c8..41439c3ef8e5c0 100644 --- a/modular_skyrat/modules/bongs/code/bong.dm +++ b/modular_nova/modules/bongs/code/bong.dm @@ -1,9 +1,9 @@ /obj/item/bong name = "bong" desc = "Technically known as a water pipe." - icon = 'modular_skyrat/modules/bongs/icons/bong.dmi' - lefthand_file = 'modular_skyrat/modules/bongs/icons/lefthand.dmi' - righthand_file = 'modular_skyrat/modules/bongs/icons/righthand.dmi' + icon = 'modular_nova/modules/bongs/icons/bong.dmi' + lefthand_file = 'modular_nova/modules/bongs/icons/lefthand.dmi' + righthand_file = 'modular_nova/modules/bongs/icons/righthand.dmi' icon_state = "bongoff" inhand_icon_state = "bongoff" @@ -104,10 +104,10 @@ spawn_cloud(pos, smoke_range) if(moan_chance > 0) if(prob(moan_chance)) - playsound(hit_mob, pick('modular_skyrat/master_files/sound/effects/lungbust_moan1.ogg','modular_skyrat/master_files/sound/effects/lungbust_moan2.ogg', 'modular_skyrat/master_files/sound/effects/lungbust_moan3.ogg'), 50, TRUE) + playsound(hit_mob, pick('modular_nova/master_files/sound/effects/lungbust_moan1.ogg','modular_nova/master_files/sound/effects/lungbust_moan2.ogg', 'modular_nova/master_files/sound/effects/lungbust_moan3.ogg'), 50, TRUE) hit_mob.emote("moan") else - playsound(hit_mob, pick('modular_skyrat/master_files/sound/effects/lungbust_cough1.ogg','modular_skyrat/master_files/sound/effects/lungbust_cough2.ogg'), 50, TRUE) + playsound(hit_mob, pick('modular_nova/master_files/sound/effects/lungbust_cough1.ogg','modular_nova/master_files/sound/effects/lungbust_cough2.ogg'), 50, TRUE) hit_mob.emote("cough") if(bong_hits <= 0) balloon_alert(hit_mob, "out of uses!") diff --git a/modular_skyrat/modules/bongs/icons/bong.dmi b/modular_nova/modules/bongs/icons/bong.dmi similarity index 100% rename from modular_skyrat/modules/bongs/icons/bong.dmi rename to modular_nova/modules/bongs/icons/bong.dmi diff --git a/modular_skyrat/modules/bongs/icons/lefthand.dmi b/modular_nova/modules/bongs/icons/lefthand.dmi similarity index 100% rename from modular_skyrat/modules/bongs/icons/lefthand.dmi rename to modular_nova/modules/bongs/icons/lefthand.dmi diff --git a/modular_skyrat/modules/bongs/icons/righthand.dmi b/modular_nova/modules/bongs/icons/righthand.dmi similarity index 100% rename from modular_skyrat/modules/bongs/icons/righthand.dmi rename to modular_nova/modules/bongs/icons/righthand.dmi diff --git a/modular_nova/modules/borg_buffs/code/robot.dm b/modular_nova/modules/borg_buffs/code/robot.dm new file mode 100644 index 00000000000000..6cc3eb2cf6ec5f --- /dev/null +++ b/modular_nova/modules/borg_buffs/code/robot.dm @@ -0,0 +1,254 @@ +#define BASE_SHAKER_JUICE_REAGENTS list(\ + /datum/reagent/consumable/aloejuice,\ + /datum/reagent/consumable/applejuice,\ + /datum/reagent/consumable/banana,\ + /datum/reagent/consumable/berryjuice,\ + /datum/reagent/consumable/blumpkinjuice,\ + /datum/reagent/consumable/carrotjuice,\ + /datum/reagent/consumable/cherryjelly,\ + /datum/reagent/consumable/grapejuice,\ + /datum/reagent/consumable/lemonjuice,\ + /datum/reagent/consumable/lemon_lime,\ + /datum/reagent/consumable/limejuice,\ + /datum/reagent/consumable/parsnipjuice,\ + /datum/reagent/consumable/peachjuice,\ + /datum/reagent/consumable/pineapplejuice,\ + /datum/reagent/consumable/potato_juice,\ + /datum/reagent/consumable/pumpkinjuice,\ + /datum/reagent/consumable/orangejuice,\ + /datum/reagent/consumable/tomatojuice,\ + /datum/reagent/consumable/watermelonjuice\ + ) + +#define BASE_SHAKER_ALCOHOL_REAGENTS list(\ + /datum/reagent/consumable/ethanol/absinthe,\ + /datum/reagent/consumable/ethanol/ale,\ + /datum/reagent/consumable/ethanol/amaretto,\ + /datum/reagent/consumable/ethanol/applejack,\ + /datum/reagent/consumable/ethanol/beer,\ + /datum/reagent/consumable/ethanol/cognac,\ + /datum/reagent/consumable/ethanol/champagne,\ + /datum/reagent/consumable/ethanol/creme_de_cacao,\ + /datum/reagent/consumable/ethanol/creme_de_coconut,\ + /datum/reagent/consumable/ethanol/creme_de_menthe,\ + /datum/reagent/consumable/ethanol,\ + /datum/reagent/consumable/ethanol/gin,\ + /datum/reagent/consumable/ethanol/hooch,\ + /datum/reagent/consumable/ethanol/kahlua,\ + /datum/reagent/consumable/laughter,\ + /datum/reagent/consumable/ethanol/lizardwine,\ + /datum/reagent/consumable/ethanol/beer/maltliquor,\ + /datum/reagent/consumable/nothing,\ + /datum/reagent/consumable/ethanol/rum,\ + /datum/reagent/consumable/ethanol/sake,\ + /datum/reagent/consumable/ethanol/synthanol,\ + /datum/reagent/consumable/ethanol/tequila,\ + /datum/reagent/consumable/ethanol/triple_sec,\ + /datum/reagent/consumable/ethanol/vermouth,\ + /datum/reagent/consumable/ethanol/vodka,\ + /datum/reagent/consumable/ethanol/whiskey,\ + /datum/reagent/consumable/ethanol/wine\ + ) + +#define BASE_SHAKER_SODA_REAGENTS list(\ + /datum/reagent/consumable/dr_gibb,\ + /datum/reagent/consumable/grape_soda,\ + /datum/reagent/consumable/pwr_game,\ + /datum/reagent/consumable/shamblers,\ + /datum/reagent/consumable/sodawater,\ + /datum/reagent/consumable/sol_dry,\ + /datum/reagent/consumable/space_up,\ + /datum/reagent/consumable/space_cola,\ + /datum/reagent/consumable/spacemountainwind\ + ) + +#define BASE_SHAKER_MISC_REAGENTS list(\ + /datum/reagent/consumable/blackpepper,\ + /datum/reagent/blood,\ + /datum/reagent/pax/catnip,\ + /datum/reagent/consumable/coco,\ + /datum/reagent/toxin/coffeepowder,\ + /datum/reagent/consumable/cream,\ + /datum/reagent/consumable/enzyme,\ + /datum/reagent/consumable/eggyolk,\ + /datum/reagent/consumable/honey,\ + /datum/reagent/consumable/grenadine,\ + /datum/reagent/consumable/ice,\ + /datum/reagent/iron,\ + /datum/reagent/consumable/menthol,\ + /datum/reagent/consumable/milk,\ + /datum/reagent/toxin/mushroom_powder,\ + /datum/reagent/consumable/nutriment,\ + /datum/reagent/consumable/soymilk,\ + /datum/reagent/consumable/sugar,\ + /datum/reagent/toxin/teapowder,\ + /datum/reagent/consumable/tonic,\ + /datum/reagent/consumable/vanilla,\ + /datum/reagent/consumable/vinegar,\ + /datum/reagent/water\ + ) + + +/obj/item/reagent_containers/borghypo/borgshaker/specific + icon = 'modular_nova/modules/borg_buffs/icons/items_cyborg.dmi' + icon_state = "misc" + +/obj/item/reagent_containers/borghypo/borgshaker/specific/juice + name = "cyborg juice shaker" + icon_state = "juice" + default_reagent_types = BASE_SHAKER_JUICE_REAGENTS + +/obj/item/reagent_containers/borghypo/borgshaker/specific/alcohol + name = "cyborg alcohol shaker" + icon_state = "alcohol" + default_reagent_types = BASE_SHAKER_ALCOHOL_REAGENTS + +/obj/item/reagent_containers/borghypo/borgshaker/specific/soda + name = "cyborg soda shaker" + icon_state = "soda" + default_reagent_types = BASE_SHAKER_SODA_REAGENTS + +/obj/item/reagent_containers/borghypo/borgshaker/specific/misc + name = "cyborg misc shaker" + icon_state = "misc" + default_reagent_types = BASE_SHAKER_MISC_REAGENTS + +/obj/item/cooking/cyborg/power + name = "automated cooking tool" + desc = "A cyborg fitted module resembling the rolling pins and Knifes" + icon = 'modular_nova/modules/borg_buffs/icons/items_cyborg.dmi' + icon_state = "knife_screw_cyborg" + hitsound = 'sound/items/drill_hit.ogg' + usesound = 'sound/items/drill_use.ogg' + toolspeed = 0.5 + tool_behaviour = TOOL_KNIFE + +/obj/item/cooking/cyborg/power/examine() + . = ..() + . += " It's fitted with a [tool_behaviour == TOOL_KNIFE ? "knife" : "rolling pin"] head." + +/obj/item/cooking/cyborg/power/attack_self(mob/user) + playsound(get_turf(user), 'sound/items/change_drill.ogg', 50, TRUE) + if(tool_behaviour != TOOL_ROLLINGPIN) + tool_behaviour = TOOL_ROLLINGPIN + to_chat(user, span_notice("You attach the rolling pin bit to [src].")) + icon_state = "rolling_bolt_cyborg" + else + tool_behaviour = TOOL_KNIFE + to_chat(user, span_notice("You attach the knife bit to [src].")) + icon_state = "knife_screw_cyborg" + +/obj/item/inducer/cyborg + name = "Cyborg Inducer" + desc = "A tool for inductively charging internal power cells using the battery of a cyborg" + powertransfer = 250 + var/power_safety_threshold = 1000 + + + +/obj/item/inducer/cyborg/attackby(obj/item/weapon, mob/user) + return + +/obj/item/inducer/cyborg/recharge(atom/movable/target_atom, mob/user) + if(!iscyborg(user)) + return + var/mob/living/silicon/robot/borg_user = user + cell = borg_user.cell + if(!isturf(target_atom) && user.loc == target_atom) + return FALSE + if(recharging) + return TRUE + else + recharging = TRUE + var/obj/item/stock_parts/cell/target_cell = target_atom.get_cell() + var/obj/target_object + var/coefficient = 1 + if(istype(target_atom, /obj/item/gun/energy)) + to_chat(user, span_alert("Error unable to interface with device.")) + return FALSE + if(istype(target_atom, /obj/item/clothing/suit/space)) + to_chat(user, span_alert("Error unable to interface with device.")) + return FALSE + if(cell.charge <= power_safety_threshold ) // Cyborg charge safety. Prevents a borg from inducing themself to death. + to_chat(user, span_alert("Unable to charge device. User battery safety engaged.")) + return + if(istype(target_atom, /obj)) + target_object = target_atom + if(target_cell) + var/done_any = FALSE + if(target_cell.charge >= target_cell.maxcharge) + to_chat(user, span_notice("[target_atom] is fully charged!")) + recharging = FALSE + return TRUE + user.visible_message(span_notice("[user] starts recharging [target_atom] with [src]."), span_notice("You start recharging [target_atom] with [src].")) + while(target_cell.charge < target_cell.maxcharge) + if(do_after(user, 1 SECONDS, target = user) && cell.charge > (power_safety_threshold + powertransfer)) + done_any = TRUE + induce(target_cell, coefficient) + do_sparks(1, FALSE, target_atom) + if(target_object) + target_object.update_appearance() + else + break + if(done_any) // Only show a message if we succeeded at least once + user.visible_message(span_notice("[user] recharged [target_atom]!"), span_notice("You recharged [target_atom]!")) + recharging = FALSE + return TRUE + recharging = FALSE + + +/obj/item/inducer/attack(mob/target_mob, mob/living/user) + if(user.combat_mode) + return ..() + + if(cantbeused(user)) + return + + if(recharge(target_mob, user)) + return + return ..() + +/obj/item/inducer/cyborg/attack_self(mob/user) + return + +// Wirebrush for janiborg +/datum/design/borg_wirebrush + name = "Wire-brush Module" + id = "borg_upgrade_brush" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/wirebrush + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2 + ) + construction_time = 40 + category = list( + RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_JANITOR, + ) + +/obj/item/borg/upgrade/wirebrush + name = "janitor cyborg wire-brush" + desc = "A tool to remove rust from walls." + icon_state = "cyborg_upgrade3" + require_model = TRUE + model_type = list(/obj/item/robot_model/janitor) + model_flags = BORG_MODEL_JANITOR + +/obj/item/borg/upgrade/wirebrush/action(mob/living/silicon/robot/cyborg) + . = ..() + if(.) + for(var/obj/item/wirebrush/brush in cyborg.model.modules) + cyborg.model.remove_module(brush, TRUE) + + var/obj/item/wirebrush/brush = new /obj/item/wirebrush(cyborg.model) + cyborg.model.basic_modules += brush + cyborg.model.add_module(brush, FALSE, TRUE) + +/obj/item/borg/upgrade/wirebrush/deactivate(mob/living/silicon/robot/cyborg, user = usr) + . = ..() + if(.) + for(var/obj/item/wirebrush/brush in cyborg.model.modules) + cyborg.model.remove_module(brush, TRUE) + + var/obj/item/wirebrush/brush = new (cyborg.model) + cyborg.model.basic_modules += brush + cyborg.model.add_module(brush, FALSE, TRUE) diff --git a/modular_skyrat/modules/borg_buffs/code/snack_dispensor.dm b/modular_nova/modules/borg_buffs/code/snack_dispensor.dm similarity index 93% rename from modular_skyrat/modules/borg_buffs/code/snack_dispensor.dm rename to modular_nova/modules/borg_buffs/code/snack_dispensor.dm index 48db5b6cdd0f0c..b581f63ffaf532 100644 --- a/modular_skyrat/modules/borg_buffs/code/snack_dispensor.dm +++ b/modular_nova/modules/borg_buffs/code/snack_dispensor.dm @@ -3,9 +3,14 @@ id = "borg_upgrade_snacks" build_type = MECHFAB build_path = /obj/item/borg/upgrade/snack_dispenser - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5) + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + ) construction_time = 1 SECONDS - category = list(RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL) + category = list( + RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL, + ) /obj/item/borg/upgrade/snack_dispenser name = "Snack Dispenser Module" @@ -132,13 +137,13 @@ /obj/item/food/cookie/bacon name = "strip of bacon" desc = "BACON!!!" - icon = 'modular_skyrat/master_files/icons/obj/food/snacks.dmi' + icon = 'modular_nova/master_files/icons/obj/food/snacks.dmi' icon_state = "bacon_strip" foodtypes = MEAT /obj/item/food/cookie/cloth name = "odd cookie" desc = "A cookie that appears to be made out of... some form of cloth?" - icon = 'modular_skyrat/master_files/icons/obj/food/snacks.dmi' + icon = 'modular_nova/master_files/icons/obj/food/snacks.dmi' icon_state = "cookie_cloth" foodtypes = CLOTH diff --git a/modular_skyrat/modules/borg_buffs/icons/items_cyborg.dmi b/modular_nova/modules/borg_buffs/icons/items_cyborg.dmi similarity index 100% rename from modular_skyrat/modules/borg_buffs/icons/items_cyborg.dmi rename to modular_nova/modules/borg_buffs/icons/items_cyborg.dmi diff --git a/modular_skyrat/modules/borg_buffs/readme.md b/modular_nova/modules/borg_buffs/readme.md similarity index 100% rename from modular_skyrat/modules/borg_buffs/readme.md rename to modular_nova/modules/borg_buffs/readme.md diff --git a/modular_skyrat/modules/borgs/code/inventory.dm b/modular_nova/modules/borgs/code/inventory.dm similarity index 100% rename from modular_skyrat/modules/borgs/code/inventory.dm rename to modular_nova/modules/borgs/code/inventory.dm diff --git a/modular_nova/modules/borgs/code/mechafabricator_designs.dm b/modular_nova/modules/borgs/code/mechafabricator_designs.dm new file mode 100644 index 00000000000000..6c42e1c4d9e32d --- /dev/null +++ b/modular_nova/modules/borgs/code/mechafabricator_designs.dm @@ -0,0 +1,198 @@ +/datum/design/borg_upgrade_shrink + name = "Shrink Module" + id = "borg_upgrade_shrink" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/shrink + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 10, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 4, + ) + construction_time = 120 + category = list( + RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL, + ) + +/datum/design/borg_upgrade_surgicaltools + name = "Advanced Surgical Tools Module" + id = "borg_upgrade_surgicaltools" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/surgerytools + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/silver = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/gold = SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = SMALL_MATERIAL_AMOUNT, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 4, + /datum/material/plasma = SHEET_MATERIAL_AMOUNT, + ) + construction_time = 80 + category = list( + RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL, + ) + +/datum/design/affection_module + name = "Affection Module" + id = "affection_module" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/affectionmodule + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + ) + construction_time = 40 + category = list( + RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL, + ) + +/datum/design/advanced_materials + name = "Advanced Materials Module" + id = "advanced_materials" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/advanced_materials + materials = list( + /datum/material/titanium=SHEET_MATERIAL_AMOUNT * 5, + /datum/material/iron=SHEET_MATERIAL_AMOUNT * 5, + /datum/material/uranium=SHEET_MATERIAL_AMOUNT * 5, + /datum/material/glass=SHEET_MATERIAL_AMOUNT * 5, + /datum/material/plasma=SHEET_MATERIAL_AMOUNT * 3, + ) + category = list( + RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ENGINEERING, + ) + +/datum/design/inducer_upgrade + name = "Inducer Module" + id = "inducer_module" + construction_time = 60 + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/inducer + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT * 5, + /datum/material/gold=SHEET_MATERIAL_AMOUNT * 2, + /datum/material/plasma=SHEET_MATERIAL_AMOUNT, + ) + category = list( + RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ENGINEERING, + ) + +/datum/design/borg_shapeshifter_module + name = "Shapeshifting Module" + id = "borg_shapeshifter_module" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/borg_shapeshifter + materials = list( + /datum/material/silver = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/plasma = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/diamond = SHEET_MATERIAL_AMOUNT * 2, + ) + construction_time = 120 + category = list( + RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL, + ) + +/datum/design/borg_upgrade_welding + name = "Welding Module" + id = "borg_upgrade_welding" + construction_time = 6 SECONDS + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/welder + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT * 5, + /datum/material/plasma=SHEET_MATERIAL_AMOUNT * 1, + ) + category = list( + RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MINING, + ) + +//Cyborg Skyrat overrides +/datum/design/borg_suit + name = "Cyborg Endoskeleton" + id = "borg_suit" + build_type = MECHFAB + build_path = /obj/item/robot_suit + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, + ) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS, + ) + +/datum/design/borg_chest + name = "Cyborg Torso" + id = "borg_chest" + build_type = MECHFAB + build_path = /obj/item/bodypart/chest/robot + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 8, + ) + construction_time = 12 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS, + ) + +/datum/design/borg_head + name = "Cyborg Head" + id = "borg_head" + build_type = MECHFAB + build_path = /obj/item/bodypart/head/robot + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT, + ) + construction_time = 4 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS, + ) + +/datum/design/borg_l_arm + name = "Cyborg Left Arm" + id = "borg_l_arm" + build_type = MECHFAB + build_path = /obj/item/bodypart/arm/left/robot + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + ) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS, + ) + +/datum/design/borg_r_arm + name = "Cyborg Right Arm" + id = "borg_r_arm" + build_type = MECHFAB + build_path = /obj/item/bodypart/arm/right/robot + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + ) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS, + ) + +/datum/design/borg_l_leg + name = "Cyborg Left Leg" + id = "borg_l_leg" + build_type = MECHFAB + build_path = /obj/item/bodypart/leg/left/robot + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + ) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS, + ) + +/datum/design/borg_r_leg + name = "Cyborg Right Leg" + id = "borg_r_leg" + build_type = MECHFAB + build_path = /obj/item/bodypart/leg/right/robot + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + ) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS, + ) diff --git a/modular_nova/modules/borgs/code/robot.dm b/modular_nova/modules/borgs/code/robot.dm new file mode 100644 index 00000000000000..c86ecb71857c8a --- /dev/null +++ b/modular_nova/modules/borgs/code/robot.dm @@ -0,0 +1,110 @@ +/mob/living/silicon/robot/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) + . = ..() + if(robot_resting) + robot_resting = FALSE + on_standing_up() + update_icons() + +/mob/living/silicon/robot/toggle_resting() + robot_lay_down() + +/mob/living/silicon/robot/on_lying_down(new_lying_angle) + if(layer == initial(layer)) //to avoid things like hiding larvas. + layer = LYING_MOB_LAYER //so mob lying always appear behind standing mobs + density = FALSE // We lose density and stop bumping passable dense things. + + if(model && model.model_features && (TRAIT_R_TALL in model.model_features)) + maptext_height = 32 //Offset base chat-height value + + // Resting effects + var/turf/sit_pos = get_turf(src) + var/obj/structure/table/tabled = locate(/obj/structure/table) in sit_pos.contents + if(!tabled) + new /obj/effect/temp_visual/mook_dust/robot(get_turf(src)) + playsound(src, 'modular_nova/master_files/sound/effects/robot_sit.ogg', 25, TRUE) + return + else + new /obj/effect/temp_visual/mook_dust/robot/table(get_turf(src)) + playsound(src, 'modular_nova/master_files/sound/effects/robot_bump.ogg', 50, TRUE) + + var/list/items_to_move = list() + + for(var/obj/item/gen_item in sit_pos.contents) + if(!gen_item.anchored) + items_to_move += gen_item + if(items_to_move.len >= 8) + break + + for(var/obj/item/table_contents in items_to_move) + + table_contents.throw_at(get_ranged_target_turf(table_contents, pick(GLOB.cardinals), range = 1), range = 1, speed = 1) + + +/mob/living/silicon/robot/on_standing_up() + if(layer == LYING_MOB_LAYER) + layer = initial(layer) + density = initial(density) // We were prone before, so we become dense and things can bump into us again. + if(model && model.model_features && (TRAIT_R_TALL in model.model_features)) + maptext_height = 48 //Offset value of tallborgs + +/mob/living/silicon/robot/proc/rest_style() + set name = "Switch Rest Style" + set category = "AI Commands" + set desc = "Select your resting pose." + if(!can_rest()) + to_chat(src, span_warning("You can't do that!")) + return + var/choice = tgui_alert(src, "Select resting pose", "", list("Resting", "Sitting", "Belly up")) + switch(choice) + if("Resting") + robot_rest_style = ROBOT_REST_NORMAL + if("Sitting") + robot_rest_style = ROBOT_REST_SITTING + if("Belly up") + robot_rest_style = ROBOT_REST_BELLY_UP + robot_resting = robot_rest_style + if (robot_resting) + on_lying_down() + update_icons() + +/mob/living/silicon/robot/proc/robot_lay_down() + set name = "Lay down" + set category = "AI Commands" + if(!can_rest()) + to_chat(src, span_warning("You can't do that!")) + return + if(stat != CONSCIOUS) //Make sure we don't enable movement when not concious + return + if(robot_resting) + to_chat(src, span_notice("You are now getting up.")) + robot_resting = FALSE + mobility_flags = MOBILITY_FLAGS_DEFAULT + on_standing_up() + else + to_chat(src, span_notice("You are now laying down.")) + robot_resting = robot_rest_style + on_lying_down() + update_icons() + +/mob/living/silicon/robot/update_resting() + . = ..() + if(can_rest()) + robot_resting = FALSE + update_icons() + +/mob/living/silicon/robot/update_module_innate() + ..() + if(hands) + hands.icon = (model.model_select_alternate_icon ? model.model_select_alternate_icon : initial(hands.icon)) + +/** + * Safe check of the cyborg's model_features list. + * + * model_features is defined in modular_nova\modules\altborgs\code\modules\mob\living\silicon\robot\robot_model.dm. + */ +/mob/living/silicon/robot/proc/can_rest() + if(model && model.model_features && ((TRAIT_R_WIDE in model.model_features) || (TRAIT_R_TALL in model.model_features))) + if(TRAIT_IMMOBILIZED in _status_traits) + return FALSE + return TRUE + return FALSE diff --git a/modular_skyrat/modules/borgs/code/robot_defines.dm b/modular_nova/modules/borgs/code/robot_defines.dm similarity index 100% rename from modular_skyrat/modules/borgs/code/robot_defines.dm rename to modular_nova/modules/borgs/code/robot_defines.dm diff --git a/modular_skyrat/modules/borgs/code/robot_items.dm b/modular_nova/modules/borgs/code/robot_items.dm similarity index 98% rename from modular_skyrat/modules/borgs/code/robot_items.dm rename to modular_nova/modules/borgs/code/robot_items.dm index 96a03b2e38db1f..6b65777bf6b953 100644 --- a/modular_skyrat/modules/borgs/code/robot_items.dm +++ b/modular_nova/modules/borgs/code/robot_items.dm @@ -440,14 +440,14 @@ /obj/item/shockpaddles/syndicate/cyborg/ninja name = "modified defibrillator paddles" - icon = 'modular_skyrat/modules/borgs/icons/robot_items.dmi' + icon = 'modular_nova/modules/borgs/icons/robot_items.dmi' icon_state = "ninjapaddles0" base_icon_state = "ninjapaddles" /obj/item/reagent_containers/borghypo/syndicate/ninja name = "modified cyborg hypospray" desc = "An experimental piece of technology used to produce powerful restorative nanites used to very quickly restore injuries of all types. metabolizes potassium iodide for radiation poisoning, inacusiate for ear damage and morphine for offense and nutriment for the operative in the field." - icon = 'modular_skyrat/modules/borgs/icons/robot_items.dmi' + icon = 'modular_nova/modules/borgs/icons/robot_items.dmi' icon_state = "borghypo_n" charge_cost = 20 recharge_time = 2 @@ -458,7 +458,7 @@ /obj/item/crowbar/cyborg/power name = "modular crowbar" desc = "A cyborg fitted module resembling the jaws of life." - icon = 'modular_skyrat/modules/borgs/icons/robot_items.dmi' + icon = 'modular_nova/modules/borgs/icons/robot_items.dmi' icon_state = "jaws_pry_cyborg" usesound = 'sound/items/jaws_pry.ogg' force = 10 @@ -484,7 +484,7 @@ /obj/item/screwdriver/cyborg/power name = "automated drill" desc = "A cyborg fitted module resembling the hand drill" - icon = 'modular_skyrat/modules/borgs/icons/robot_items.dmi' + icon = 'modular_nova/modules/borgs/icons/robot_items.dmi' icon_state = "drill_screw_cyborg" hitsound = 'sound/items/drill_hit.ogg' usesound = 'sound/items/drill_use.ogg' @@ -509,9 +509,9 @@ /// Shapeshifter /obj/item/borg_shapeshifter name = "cyborg chameleon projector" - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/syndie_gadget.dmi' icon_state = "shield0" - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = NOBLUDGEON inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' @@ -532,7 +532,7 @@ var/disguise_icon_override var/disguise_pixel_offset = 0 var/disguise_hat_offset = 0 - /// Traits unique to this model (deadsprite, wide/dogborginess, etc.). Mirrors the definition in modular_skyrat\modules\borgs\code\modules\mob\living\silicon\robot\robot_model.dm + /// Traits unique to this model (deadsprite, wide/dogborginess, etc.). Mirrors the definition in modular_nova\modules\borgs\code\modules\mob\living\silicon\robot\robot_model.dm var/list/disguise_model_features = list() var/disguise_special_light_key var/mob/listeningTo @@ -681,7 +681,7 @@ var/list/details = disguise_model.borg_skins[skin] var/image/reskin = image(icon = details[SKIN_ICON] || 'icons/mob/silicon/robots.dmi', icon_state = details[SKIN_ICON_STATE]) if (!isnull(details[SKIN_FEATURES])) - if (R_TRAIT_WIDE in details[SKIN_FEATURES]) + if (TRAIT_R_WIDE in details[SKIN_FEATURES]) reskin.pixel_x -= 16 reskin_icons[skin] = reskin var/borg_skin = show_radial_menu(cyborg, cyborg, reskin_icons, custom_check = CALLBACK(src, PROC_REF(check_menu), cyborg), radius = 38, require_near = TRUE) diff --git a/modular_nova/modules/borgs/code/robot_model.dm b/modular_nova/modules/borgs/code/robot_model.dm new file mode 100644 index 00000000000000..3b738c748b2f3e --- /dev/null +++ b/modular_nova/modules/borgs/code/robot_model.dm @@ -0,0 +1,573 @@ +/obj/item/robot_model + var/icon/cyborg_icon_override + var/sleeper_overlay + var/cyborg_pixel_offset + /// Alternate icon file used for this module's collapsed UI icon + var/model_select_alternate_icon + /// Traits unique to this model, i.e. having a unique dead sprite, being wide or being small enough to reject shrinker modules. Leverages defines in code\__DEFINES\~nova_defines\robot_defines.dm + /// If a sprite overlaps above the standard height, ensure it is not overlapping icons in the selector wheel. + var/list/model_features = list() + +/obj/item/robot_model/proc/update_tallborg() + var/mob/living/silicon/robot/cyborg = robot || loc + if (!istype(robot)) + return + if (model_features && (TRAIT_R_TALL in model_features)) + cyborg.maptext_height = 48 //Runechat blabla + cyborg.AddElement(/datum/element/footstep, FOOTSTEP_MOB_SHOE, 2, -6, sound_vary = TRUE) + add_verb(cyborg, /mob/living/silicon/robot/proc/robot_lay_down) + switch(cyborg_base_icon) + if("mekamine") + cyborg.AddComponent(/datum/component/robot_smoke) + else + + else + cyborg.maptext_height = initial(cyborg.maptext_height) + cyborg.RemoveElement(/datum/element/footstep, FOOTSTEP_MOB_SHOE, 2, -6, sound_vary = TRUE) + remove_verb(cyborg, /mob/living/silicon/robot/proc/robot_lay_down) + if(cyborg.GetComponent(/datum/component/robot_smoke)) + qdel(cyborg.GetComponent(/datum/component/robot_smoke)) + QDEL_NULL(cyborg.particles) // Removing left over particles + + +/obj/item/robot_model/proc/update_dogborg() + var/mob/living/silicon/robot/cyborg = robot || loc + if (!istype(robot)) + return + if (model_features && (TRAIT_R_WIDE in model_features)) + hat_offset = INFINITY + cyborg.set_base_pixel_x(-16) + add_verb(cyborg, /mob/living/silicon/robot/proc/robot_lay_down) + add_verb(cyborg, /mob/living/silicon/robot/proc/rest_style) + else + cyborg.set_base_pixel_x(0) + remove_verb(cyborg, /mob/living/silicon/robot/proc/robot_lay_down) + remove_verb(cyborg, /mob/living/silicon/robot/proc/rest_style) + +//STANDARD +/obj/item/robot_model/standard + name = "Standard" + borg_skins = list( + "Default" = list(SKIN_ICON_STATE = "robot", SKIN_FEATURES = list(TRAIT_R_SMALL)), + "Marina" = list(SKIN_ICON_STATE = "marinasd", SKIN_ICON = CYBORG_ICON_STANDARD, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK)), + "Heavy" = list(SKIN_ICON_STATE = "heavysd", SKIN_ICON = CYBORG_ICON_STANDARD, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK)), + "Eyebot" = list(SKIN_ICON_STATE = "eyebotsd", SKIN_ICON = CYBORG_ICON_STANDARD, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_SMALL)), + "Robot" = list(SKIN_ICON_STATE = "robot_old", SKIN_ICON = CYBORG_ICON_STANDARD, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK)), + "Bootyborg" = list(SKIN_ICON_STATE = "bootysd", SKIN_ICON = CYBORG_ICON_STANDARD), + "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootysd", SKIN_ICON = CYBORG_ICON_STANDARD), + "Protectron" = list(SKIN_ICON_STATE = "protectron_standard", SKIN_ICON = CYBORG_ICON_STANDARD), + "Miss M" = list(SKIN_ICON_STATE = "missm_sd", SKIN_ICON = CYBORG_ICON_STANDARD), + "Partyhound" = list(SKIN_ICON_STATE = "k69", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)) + ) + +//SERVICE +/obj/item/robot_model/service + special_light_key = null + borg_skins = list( + /// 32x32 Skins + "Waitress" = list(SKIN_ICON_STATE = "service_f", SKIN_LIGHT_KEY = "service"), + "Butler" = list(SKIN_ICON_STATE = "service_m", SKIN_LIGHT_KEY = "service"), + "Bro" = list(SKIN_ICON_STATE = "brobot", SKIN_LIGHT_KEY = "service"), + "Tophat" = list(SKIN_ICON_STATE = "tophat", SKIN_HAT_OFFSET = INFINITY), + "Sleek" = list(SKIN_ICON_STATE = "sleekserv", SKIN_ICON = CYBORG_ICON_SERVICE), + "Heavy" = list(SKIN_ICON_STATE = "heavyserv", SKIN_ICON = CYBORG_ICON_SERVICE), + "Kent" = list(SKIN_ICON_STATE = "kent", SKIN_LIGHT_KEY = "medical", SKIN_HAT_OFFSET = 3), + "Can" = list(SKIN_ICON_STATE = "kent", SKIN_LIGHT_KEY = "medical", SKIN_HAT_OFFSET = 3), + "Zoomba" = list(SKIN_ICON_STATE = "zoomba_green", SKIN_ICON = CYBORG_ICON_SERVICE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_SMALL), SKIN_HAT_OFFSET = -13), + "ARACHNE" = list(SKIN_ICON_STATE = "arachne_service", SKIN_ICON = CYBORG_ICON_SERVICE), + "Slipper" = list(SKIN_ICON_STATE = "slipper_service", SKIN_ICON = CYBORG_ICON_SERVICE), + "Bootyborg" = list(SKIN_ICON_STATE = "bootyservice", SKIN_ICON = CYBORG_ICON_SERVICE), + "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyservice", SKIN_ICON = CYBORG_ICON_SERVICE), + "Birdborg" = list(SKIN_ICON_STATE = "bird_serv", SKIN_ICON = CYBORG_ICON_SERVICE), + "Protectron" = list(SKIN_ICON_STATE = "protectron_service", SKIN_ICON = CYBORG_ICON_SERVICE), + "Miss M" = list(SKIN_ICON_STATE = "missm_service", SKIN_ICON = CYBORG_ICON_SERVICE), + "Mech" = list(SKIN_ICON_STATE = "lloyd", SKIN_ICON = CYBORG_ICON_SERVICE), + "Handy" = list(SKIN_ICON_STATE = "handy-service", SKIN_ICON = CYBORG_ICON_SERVICE), + /// 64x32 skins + "Borgi" = list(SKIN_ICON_STATE = "borgi-serv", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE, TRAIT_R_SMALL)), + "Drake" = list(SKIN_ICON_STATE = "drakeserv", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Vale" = list(SKIN_ICON_STATE = "valeserv", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "ValeDark" = list(SKIN_ICON_STATE = "valeservdark", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Darkhound" = list(SKIN_ICON_STATE = "k50", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Partyhound" = list(SKIN_ICON_STATE = "k69", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + /// 32x64 skins + "Meka" = list(SKIN_ICON_STATE = "mekaserve", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "Meka (Alt)" = list(SKIN_ICON_STATE = "mekaserve_alt", SKIN_LIGHT_KEY = "mekaserve", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "NiKA" = list(SKIN_ICON_STATE = "fmekaserv", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "NiKO" = list(SKIN_ICON_STATE = "mmekaserv", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Barista)" = list(SKIN_ICON_STATE = "k4tserve", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "K4T (80s)" = list(SKIN_ICON_STATE = "k4tserve_alt1", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Dispenser)" = list(SKIN_ICON_STATE = "k4tserve_alt2", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15) + ) + +//MINING +/obj/item/robot_model/miner + special_light_key = null + borg_skins = list( + /// 32x32 Skins + "Lavaland" = list(SKIN_ICON_STATE = "miner", SKIN_LIGHT_KEY = "miner"), + "Asteroid" = list(SKIN_ICON_STATE = "minerOLD", SKIN_LIGHT_KEY = "miner"), + "Drone" = list(SKIN_ICON_STATE = "miningdrone", SKIN_ICON = CYBORG_ICON_MINING, SKIN_FEATURES = list(TRAIT_R_SMALL)), + "Zoomba" = list(SKIN_ICON_STATE = "zoomba_miner", SKIN_ICON = CYBORG_ICON_MINING, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_SMALL), SKIN_HAT_OFFSET = -13), + "Slipper" = list(SKIN_ICON_STATE = "slipper_mine", SKIN_ICON = CYBORG_ICON_MINING), + "Spider Miner" = list(SKIN_ICON_STATE = "spidermin", SKIN_LIGHT_KEY = "miner"), + "Droid" = list(SKIN_ICON_STATE = "miner", SKIN_ICON = CYBORG_ICON_MINING, SKIN_HAT_OFFSET = 4), + "Sleek" = list(SKIN_ICON_STATE = "sleekmin", SKIN_ICON = CYBORG_ICON_MINING), + "Can" = list(SKIN_ICON_STATE = "canmin", SKIN_ICON = CYBORG_ICON_MINING), + "Marina" = list(SKIN_ICON_STATE = "marinamin", SKIN_ICON = CYBORG_ICON_MINING), + "Spider" = list(SKIN_ICON_STATE = "spidermin", SKIN_ICON = CYBORG_ICON_MINING), + "Heavy" = list(SKIN_ICON_STATE = "heavymin", SKIN_ICON = CYBORG_ICON_MINING), + "Bootyborg" = list(SKIN_ICON_STATE = "bootyminer", SKIN_ICON = CYBORG_ICON_MINING), + "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyminer", SKIN_ICON = CYBORG_ICON_MINING), + "Birdborg" = list(SKIN_ICON_STATE = "bird_mine", SKIN_ICON = CYBORG_ICON_MINING), + "Protectron" = list(SKIN_ICON_STATE = "protectron_miner", SKIN_ICON = CYBORG_ICON_MINING), + "Miss M" = list(SKIN_ICON_STATE = "missm_miner", SKIN_ICON = CYBORG_ICON_MINING), + "Mech" = list(SKIN_ICON_STATE = "ishimura", SKIN_ICON = CYBORG_ICON_MINING), + /// 64x32 skins + "Blade" = list(SKIN_ICON_STATE = "blade", SKIN_ICON = CYBORG_ICON_MINING_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Vale" = list(SKIN_ICON_STATE = "valemine", SKIN_ICON = CYBORG_ICON_MINING_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Drake" = list(SKIN_ICON_STATE = "drakemine", SKIN_ICON = CYBORG_ICON_MINING_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Hound" = list(SKIN_ICON_STATE = "cargohound", SKIN_ICON = CYBORG_ICON_MINING_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Darkhound" = list(SKIN_ICON_STATE = "cargohounddark", SKIN_ICON = CYBORG_ICON_MINING_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Otie" = list(SKIN_ICON_STATE = "otiec", SKIN_ICON = CYBORG_ICON_MINING_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + /// 32x64 skins + "Meka" = list(SKIN_ICON_STATE = "mekamine", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Rookie)" = list(SKIN_ICON_STATE = "k4tmine", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Veteran)" = list(SKIN_ICON_STATE = "k4tmine_alt1", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "NiKA" = list(SKIN_ICON_STATE = "fmekamine", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "NiKO" = list(SKIN_ICON_STATE = "mmekamine", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15) + ) + +//CLOWN +/obj/item/robot_model/clown + borg_skins = list( + "Default" = list(SKIN_ICON_STATE = "clown"), + "Bootyborg" = list(SKIN_ICON_STATE = "bootyclown", SKIN_ICON = 'modular_nova/modules/borgs/icons/robots_clown.dmi'), + "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyclown", SKIN_ICON = 'modular_nova/modules/borgs/icons/robots_clown.dmi'), + "ARACHNE" = list(SKIN_ICON_STATE = "arachne_clown", SKIN_ICON = 'modular_nova/modules/borgs/icons/robots_clown.dmi'), + "Slipper" = list(SKIN_ICON_STATE = "slipper_clown", SKIN_ICON = 'modular_nova/modules/borgs/icons/robots_clown.dmi'), + "Marina" = list(SKIN_ICON_STATE = "marina_mommy", SKIN_ICON = 'modular_nova/modules/borgs/icons/robots_clown.dmi', SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK)), + "Garish" = list(SKIN_ICON_STATE = "garish", SKIN_ICON = 'modular_nova/modules/borgs/icons/robots_clown.dmi'), + "Robot" = list(SKIN_ICON_STATE = "clownbot", SKIN_ICON = 'modular_nova/modules/borgs/icons/robots_clown.dmi'), + "Sleek" = list(SKIN_ICON_STATE = "clownman", SKIN_ICON = 'modular_nova/modules/borgs/icons/robots_clown.dmi', SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK)), + /// 32x64 skins + "K4T" = list(SKIN_ICON_STATE = "k4tclown", SKIN_ICON = CYBORG_ICON_CLOWN_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15) + ) + +//ENGINEERING +/obj/item/robot_model/engineering + borg_skins = list( + /// 32x32 Skins + "Default" = list(SKIN_ICON_STATE = "engineer", SKIN_FEATURES = list(TRAIT_R_SMALL)), + "Zoomba" = list(SKIN_ICON_STATE = "zoomba_engi", SKIN_ICON = CYBORG_ICON_ENG, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_SMALL), SKIN_HAT_OFFSET = -13), + "Default - Treads" = list(SKIN_ICON_STATE = "engi-tread", SKIN_LIGHT_KEY = "engineer", SKIN_ICON = CYBORG_ICON_ENG), + "Loader" = list(SKIN_ICON_STATE = "loaderborg", SKIN_ICON = CYBORG_ICON_ENG, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK)), + "Handy" = list(SKIN_ICON_STATE = "handyeng", SKIN_ICON = CYBORG_ICON_ENG), + "Sleek" = list(SKIN_ICON_STATE = "sleekeng", SKIN_ICON = CYBORG_ICON_ENG), + "Can" = list(SKIN_ICON_STATE = "caneng", SKIN_ICON = CYBORG_ICON_ENG), + "Marina" = list(SKIN_ICON_STATE = "marinaeng", SKIN_ICON = CYBORG_ICON_ENG), + "Spider" = list(SKIN_ICON_STATE = "spidereng", SKIN_ICON = CYBORG_ICON_ENG), + "Heavy" = list(SKIN_ICON_STATE = "heavyeng", SKIN_ICON = CYBORG_ICON_ENG), + "Bootyborg" = list(SKIN_ICON_STATE = "bootyeng", SKIN_ICON = CYBORG_ICON_ENG), + "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyeng", SKIN_ICON = CYBORG_ICON_ENG), + "Birdborg" = list(SKIN_ICON_STATE = "bird_eng", SKIN_ICON = CYBORG_ICON_ENG), + "Protectron" = list(SKIN_ICON_STATE = "protectron_eng", SKIN_ICON = CYBORG_ICON_ENG), + "Miss M" = list(SKIN_ICON_STATE = "missm_eng", SKIN_ICON = CYBORG_ICON_ENG), + "Mech" = list(SKIN_ICON_STATE = "conagher", SKIN_ICON = CYBORG_ICON_ENG), + "Wide" = list(SKIN_ICON_STATE = "wide-engi", SKIN_ICON = CYBORG_ICON_ENG), + "ARACHNE" = list(SKIN_ICON_STATE = "arachne_engi", SKIN_ICON = CYBORG_ICON_ENG), + "Slipper" = list(SKIN_ICON_STATE = "slipper_engi", SKIN_ICON = CYBORG_ICON_ENG), + "Alina" = list(SKIN_ICON_STATE = "alina-eng", SKIN_LIGHT_KEY = "alina", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Eyebot" = list(SKIN_ICON_STATE = "eyeboteng", SKIN_ICON = CYBORG_ICON_ENG, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_SMALL)), + /// 64x32 Skins + "Borgi" = list(SKIN_ICON_STATE = "borgi-eng", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE, TRAIT_R_SMALL)), + "Otie" = list(SKIN_ICON_STATE = "otiee", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Pup Dozer" = list(SKIN_ICON_STATE = "pupdozer", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Vale" = list(SKIN_ICON_STATE = "valeeng", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Hound" = list(SKIN_ICON_STATE = "engihound", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Darkhound" = list(SKIN_ICON_STATE = "engihounddark", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Drake" = list(SKIN_ICON_STATE = "drakeeng", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + /// 32x64 Skins + "Meka" = list(SKIN_ICON_STATE = "mekaengi", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Technician)" = list(SKIN_ICON_STATE = "k4tengi", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Hazard)" = list(SKIN_ICON_STATE = "k4tengi_alt1", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "NiKA" = list(SKIN_ICON_STATE = "fmekaeng", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "NiKO" = list(SKIN_ICON_STATE = "mmekaeng", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15) + ) + +//JANITOR +/obj/item/robot_model/janitor + borg_skins = list( + /// 32x32 Skins + "Default" = list(SKIN_ICON_STATE = "janitor"), + "ARACHNE" = list(SKIN_ICON_STATE = "arachne_jani", SKIN_ICON = CYBORG_ICON_JANI), + "Slipper" = list(SKIN_ICON_STATE = "slipper_janitor", SKIN_ICON = CYBORG_ICON_JANI), + "Zoomba" = list(SKIN_ICON_STATE = "zoomba_jani", SKIN_ICON = CYBORG_ICON_JANI, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_SMALL), SKIN_HAT_OFFSET = -13), + "Marina" = list(SKIN_ICON_STATE = "marinajan", SKIN_ICON = CYBORG_ICON_JANI), + "Sleek" = list(SKIN_ICON_STATE = "sleekjan", SKIN_ICON = CYBORG_ICON_JANI), + "Can" = list(SKIN_ICON_STATE = "canjan", SKIN_ICON = CYBORG_ICON_JANI), + "Heavy" = list(SKIN_ICON_STATE = "heavyres", SKIN_ICON = CYBORG_ICON_JANI), + "Bootyborg" = list(SKIN_ICON_STATE = "bootyjanitor", SKIN_ICON = CYBORG_ICON_JANI), + "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyjanitor", SKIN_ICON = CYBORG_ICON_JANI), + "Birdborg" = list(SKIN_ICON_STATE = "bird_jani", SKIN_ICON = CYBORG_ICON_JANI), + "Protectron" = list(SKIN_ICON_STATE = "protectron_janitor", SKIN_ICON = CYBORG_ICON_JANI), + "Miss M" = list(SKIN_ICON_STATE = "missm_janitor", SKIN_ICON = CYBORG_ICON_JANI), + "Mech" = list(SKIN_ICON_STATE = "flynn", SKIN_ICON = CYBORG_ICON_JANI), + "Eyebot" = list(SKIN_ICON_STATE = "eyebotjani", SKIN_ICON = CYBORG_ICON_JANI, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_SMALL)), + "Insekt" = list(SKIN_ICON_STATE = "insekt-Sci", SKIN_ICON = CYBORG_ICON_JANI), + "Wide" = list(SKIN_ICON_STATE = "wide-jani", SKIN_ICON = CYBORG_ICON_JANI), + "Spider" = list(SKIN_ICON_STATE = "spidersci", SKIN_ICON = CYBORG_ICON_JANI), + /// 64x32 Skins + "Borgi" = list(SKIN_ICON_STATE = "borgi-jani", SKIN_ICON = CYBORG_ICON_JANI_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE, TRAIT_R_SMALL)), + "Scrubpuppy" = list(SKIN_ICON_STATE = "scrubpup", SKIN_ICON = CYBORG_ICON_JANI_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Drake" = list(SKIN_ICON_STATE = "drakejanit", SKIN_ICON = CYBORG_ICON_JANI_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Vale" = list(SKIN_ICON_STATE = "J9", SKIN_ICON = CYBORG_ICON_JANI_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Otie" = list(SKIN_ICON_STATE = "otiej", SKIN_ICON = CYBORG_ICON_JANI_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + /// 32x64 Skins + "Meka" = list(SKIN_ICON_STATE = "mekajani", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Viscera)" = list(SKIN_ICON_STATE = "k4tjani", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Domestic)" = list(SKIN_ICON_STATE = "k4tjani_alt1", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "NiKA" = list(SKIN_ICON_STATE = "fmekajani", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "NiKO" = list(SKIN_ICON_STATE = "mmekajani", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15) + ) + +//MEDICAL +/obj/item/robot_model/medical + borg_skins = list( + /// 32x32 Skins + "Machinified Doctor" = list(SKIN_ICON_STATE = "medical", SKIN_TRAITS = list(TRAIT_R_SMALL)), + "Qualified Doctor" = list(SKIN_ICON_STATE = "qualified_doctor"), + "ARACHNE" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "arachne_med"), + "Slipper" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "slipper_med"), + "Zoomba" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "zoomba_med", SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_SMALL), SKIN_HAT_OFFSET = -13), + "Droid" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "medical", SKIN_HAT_OFFSET = 4), + "Sleek" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "sleekmed"), + "Marina" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "marinamed"), + "Eyebot" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "eyebotmed", SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_SMALL)), + "Heavy" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "heavymed"), + "Bootyborg" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "bootymedical"), + "Birdborg" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "bird_med"), + "Male Bootyborg" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "male_bootymedical"), + "Protectron" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "protectron_medical"), + "Miss M" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "missm_med"), + "Insekt" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "insekt-Med"), + "Mech" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "gibbs"), + /// 64x32 Skins + "Borgi" = list(SKIN_ICON = CYBORG_ICON_MED_WIDE, SKIN_ICON_STATE = "borgi-medi", SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Drake" = list(SKIN_ICON = CYBORG_ICON_MED_WIDE, SKIN_ICON_STATE = "drakemed", SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Hound" = list(SKIN_ICON = CYBORG_ICON_MED_WIDE, SKIN_ICON_STATE = "medihound", SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "DarkHound" = list(SKIN_ICON = CYBORG_ICON_MED_WIDE, SKIN_ICON_STATE = "medihounddark", SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Vale" = list(SKIN_ICON = CYBORG_ICON_MED_WIDE, SKIN_ICON_STATE = "valemed", SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Alina" = list(SKIN_ICON = CYBORG_ICON_MED_WIDE, SKIN_ICON_STATE = "alina-med", SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + /// 32x64 Skins + "Meka" = list(SKIN_ICON_STATE = "mekamed", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Doc)" = list(SKIN_ICON_STATE = "k4tmed", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Field Medic)" = list(SKIN_ICON_STATE = "k4tmed_alt1", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "NiKA" = list(SKIN_ICON_STATE = "fmekamed", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "NiKO" = list(SKIN_ICON_STATE = "mmekamed", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15) + ) + +//PEACEKEEPER +/obj/item/robot_model/peacekeeper + borg_skins = list( + /// 32x32 Skins + "Default" = list(SKIN_ICON_STATE = "peace"), + "Zoomba" = list(SKIN_ICON_STATE = "zoomba_peace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_SMALL), SKIN_HAT_OFFSET = -13), + "ARACHNE" = list(SKIN_ICON_STATE = "arachne_peacekeeper", SKIN_ICON = CYBORG_ICON_PEACEKEEPER), + "Sleek" = list(SKIN_ICON_STATE = "sleekpeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK)), + "Spider" = list(SKIN_ICON_STATE = "whitespider", SKIN_ICON = CYBORG_ICON_PEACEKEEPER, SKIN_FEATURES = list(TRAIT_R_SMALL)), + "Marina" = list(SKIN_ICON_STATE = "marinapeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK)), + "Bootyborg" = list(SKIN_ICON_STATE = "bootypeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER), + "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootypeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER), + "Birdborg" = list(SKIN_ICON_STATE = "bird_pk", SKIN_ICON = CYBORG_ICON_PEACEKEEPER), + "Protectron" = list(SKIN_ICON_STATE = "protectron_peacekeeper", SKIN_ICON = CYBORG_ICON_PEACEKEEPER), + "Insekt" = list(SKIN_ICON_STATE = "insekt-Default", SKIN_ICON = CYBORG_ICON_PEACEKEEPER), + "Omni" = list(SKIN_ICON_STATE = "omoikane", SKIN_ICON = CYBORG_ICON_PEACEKEEPER, SKIN_FEATURES = list(TRAIT_R_SMALL)), + /// 64x32 Skins + "Drake" = list(SKIN_ICON_STATE = "drakepeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Borgi" = list(SKIN_ICON_STATE = "borgi", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE, TRAIT_R_SMALL)), + "Vale" = list(SKIN_ICON_STATE = "valepeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + /// 32x64 Skins + "Meka" = list(SKIN_ICON_STATE = "mekapeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "K4T" = list(SKIN_ICON_STATE = "k4tpeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "NiKA" = list(SKIN_ICON_STATE = "fmekapeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "NiKO" = list(SKIN_ICON_STATE = "mmekapeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15) + ) + +//SECURITY +/obj/item/robot_model/security + borg_skins = list( + /// 32x32 Skins + "Default" = list(SKIN_ICON_STATE = "sec"), + "Zoomba" = list(SKIN_ICON_STATE = "zoomba_sec", SKIN_ICON = CYBORG_ICON_SEC, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_SMALL), SKIN_HAT_OFFSET = -13), + "Default - Treads" = list(SKIN_ICON_STATE = "sec-tread", SKIN_LIGHT_KEY = "sec", SKIN_ICON = CYBORG_ICON_SEC), + "Sleek" = list(SKIN_ICON_STATE = "sleeksec", SKIN_ICON = CYBORG_ICON_SEC), + "Marina" = list(SKIN_ICON_STATE = "marinasec", SKIN_ICON = CYBORG_ICON_SEC), + "Can" = list(SKIN_ICON_STATE = "cansec", SKIN_ICON = CYBORG_ICON_SEC), + "Spider" = list(SKIN_ICON_STATE = "spidersec", SKIN_ICON = CYBORG_ICON_SEC), + "Heavy" = list(SKIN_ICON_STATE = "heavysec", SKIN_ICON = CYBORG_ICON_SEC), + "Bootyborg" = list(SKIN_ICON_STATE = "bootysecurity", SKIN_ICON = CYBORG_ICON_SEC), + "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootysecurity", SKIN_ICON = CYBORG_ICON_SEC), + "Protectron" = list(SKIN_ICON_STATE = "protectron_security", SKIN_ICON = CYBORG_ICON_SEC), + "Miss M" = list(SKIN_ICON_STATE = "missm_security", SKIN_ICON = CYBORG_ICON_SEC), + "Eyebot" = list(SKIN_ICON_STATE = "eyebotsec", SKIN_ICON = CYBORG_ICON_SEC, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_SMALL)), + "Insekt" = list(SKIN_ICON_STATE = "insekt-Sec", SKIN_ICON = CYBORG_ICON_SEC), + "Mech" = list(SKIN_ICON_STATE = "woody", SKIN_ICON = CYBORG_ICON_SEC), + /// 64x32 Skins + "Borgi" = list(SKIN_ICON_STATE = "borgi-sec", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE, TRAIT_R_SMALL)), + "Hound" = list(SKIN_ICON_STATE = "k9", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Darkhound" = list(SKIN_ICON_STATE = "k9dark", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Drake" = list(SKIN_ICON_STATE = "drakesec", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Otie" = list(SKIN_ICON_STATE = "oties", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Alina" = list(SKIN_ICON_STATE = "alina-sec", SKIN_LIGHT_KEY = "alina", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Vale" = list(SKIN_ICON_STATE = "valesec", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + /// 32x64 Skins + "Meka" = list(SKIN_ICON_STATE = "mekasec", SKIN_ICON = CYBORG_ICON_SEC_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "K4T" = list(SKIN_ICON_STATE = "k4tsec", SKIN_ICON = CYBORG_ICON_SEC_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "NiKA" = list(SKIN_ICON_STATE = "fmekasec", SKIN_ICON = CYBORG_ICON_SEC_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "NiKO" = list(SKIN_ICON_STATE = "mmekasec", SKIN_ICON = CYBORG_ICON_SEC_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15) + ) + +// CARGO +/obj/item/robot_model/cargo + name = "Cargo" + basic_modules = list( + /obj/item/stamp, + /obj/item/stamp/denied, + /obj/item/pen/cyborg, + /obj/item/clipboard/cyborg, + /obj/item/boxcutter, + /obj/item/stack/package_wrap/cyborg, + /obj/item/stack/wrapping_paper/xmas/cyborg, + /obj/item/assembly/flash/cyborg, + /obj/item/borg/hydraulic_clamp, + /obj/item/borg/hydraulic_clamp/mail, + /obj/item/hand_labeler/cyborg, + /obj/item/dest_tagger, + /obj/item/crowbar/cyborg, + /obj/item/extinguisher, + /obj/item/universal_scanner, + ) + radio_channels = list(RADIO_CHANNEL_SUPPLY) + emag_modules = list( + /obj/item/stamp/chameleon, + /obj/item/borg/paperplane_crossbow, + ) + hat_offset = 0 + cyborg_base_icon = "cargo" + model_select_icon = "cargo" + model_select_alternate_icon = 'modular_nova/modules/borgs/icons/screen_cyborg.dmi' + canDispose = TRUE + borg_skins = list( + /// 32x32 Skins + "Technician" = list(SKIN_ICON_STATE = "cargoborg", SKIN_ICON = CYBORG_ICON_CARGO), + "Miss M" = list(SKIN_ICON_STATE = "missm_cargo", SKIN_ICON = CYBORG_ICON_CARGO), + "Zoomba" = list(SKIN_ICON_STATE = "zoomba_cargo", SKIN_ICON = CYBORG_ICON_CARGO, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_SMALL), SKIN_HAT_OFFSET = -13), + "Birdborg" = list(SKIN_ICON_STATE = "bird_cargo", SKIN_ICON = CYBORG_ICON_CARGO), + /// 64x32 Skins + "Borgi" = list(SKIN_ICON_STATE = "borgi-cargo", SKIN_ICON = CYBORG_ICON_CARGO_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE, TRAIT_R_SMALL)), + "Drake" = list(SKIN_ICON_STATE = "drakecargo", SKIN_ICON = CYBORG_ICON_CARGO_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Hound" = list(SKIN_ICON_STATE = "cargohound", SKIN_ICON = CYBORG_ICON_CARGO_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Darkhound" = list(SKIN_ICON_STATE = "cargohounddark", SKIN_ICON = CYBORG_ICON_CARGO_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + "Vale" = list(SKIN_ICON_STATE = "valecargo", SKIN_ICON = CYBORG_ICON_CARGO_WIDE, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_WIDE)), + /// 32x64 Skins + "Meka" = list(SKIN_ICON_STATE = "mekacargo", SKIN_ICON = CYBORG_ICON_CARGO_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Loader)" = list(SKIN_ICON_STATE = "k4tcargo", SKIN_ICON = CYBORG_ICON_CARGO_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Turtleneck)" = list(SKIN_ICON_STATE = "k4tcargo_alt1", SKIN_ICON = CYBORG_ICON_CARGO_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "NiKA" = list(SKIN_ICON_STATE = "fmekacargo", SKIN_ICON = CYBORG_ICON_CARGO_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "NiKO" = list(SKIN_ICON_STATE = "mmekacargo", SKIN_ICON = CYBORG_ICON_CARGO_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15) + ) + +//SYNDICATE +/obj/item/robot_model/syndicatejack + name = "Syndicate" + basic_modules = list( + /obj/item/assembly/flash/cyborg, + /obj/item/borg/sight/thermal, + /obj/item/extinguisher, + /obj/item/weldingtool/electric, + /obj/item/screwdriver/cyborg/power, + /obj/item/crowbar/cyborg/power, + /obj/item/multitool/cyborg, + /obj/item/construction/rcd/borg/syndicate, + /obj/item/lightreplacer/cyborg, + /obj/item/stack/sheet/iron, + /obj/item/stack/sheet/glass, + /obj/item/borg/apparatus/sheet_manipulator, + /obj/item/stack/rods/cyborg, + /obj/item/stack/tile/iron, + /obj/item/stack/cable_coil, + /obj/item/restraints/handcuffs/cable/zipties, + /obj/item/stack/medical/gauze, + /obj/item/shockpaddles/cyborg, + /obj/item/healthanalyzer/advanced, + /obj/item/surgical_drapes, + /obj/item/retractor/advanced, + /obj/item/cautery/advanced, + /obj/item/scalpel/advanced, + /obj/item/gun/medbeam, + /obj/item/reagent_containers/borghypo/syndicate, + /obj/item/borg/lollipop, + /obj/item/holosign_creator/cyborg, + /obj/item/stamp/chameleon, + /obj/item/borg_shapeshifter, + ) + cyborg_base_icon = "synd_engi" + model_select_icon = "malf" + model_traits = list(TRAIT_NEGATES_GRAVITY, TRAIT_PUSHIMMUNE) + hat_offset = INFINITY + canDispose = TRUE + borg_skins = list( + /// 32x32 Skins + "Saboteur" = list(SKIN_ICON_STATE = "synd_engi", SKIN_ICON = 'icons/mob/silicon/robots.dmi'), + "Medical" = list(SKIN_ICON_STATE = "synd_medical", SKIN_ICON = 'icons/mob/silicon/robots.dmi'), + "Assault" = list(SKIN_ICON_STATE = "synd_sec", SKIN_ICON = 'icons/mob/silicon/robots.dmi'), + "ARACHNE" = list(SKIN_ICON_STATE = "arachne_syndie", SKIN_ICON = CYBORG_ICON_SYNDIE), + "Heavy" = list(SKIN_ICON_STATE = "syndieheavy", SKIN_ICON = CYBORG_ICON_SYNDIE), + "Miss M" = list(SKIN_ICON_STATE = "missm_syndie", SKIN_ICON = CYBORG_ICON_SYNDIE), + "Spider" = list(SKIN_ICON_STATE = "spidersyndi", SKIN_ICON = CYBORG_ICON_SYNDIE), + "Booty Striker" = list(SKIN_ICON_STATE = "bootynukie", SKIN_ICON = CYBORG_ICON_SYNDIE), + "Booty Syndicate" = list(SKIN_ICON_STATE = "bootysyndie", SKIN_ICON = CYBORG_ICON_SYNDIE), + "Bird Syndicate" = list(SKIN_ICON_STATE = "bird_synd", SKIN_ICON = CYBORG_ICON_SYNDIE), + "Male Booty Striker" = list(SKIN_ICON_STATE = "male_bootynukie", SKIN_ICON = CYBORG_ICON_SYNDIE), + "Male Booty Syndicate" = list(SKIN_ICON_STATE = "male_bootysyndie", SKIN_ICON = CYBORG_ICON_SYNDIE), + "Mech" = list(SKIN_ICON_STATE = "chesty", SKIN_ICON = CYBORG_ICON_SYNDIE), + /// 32x64 Skins + "Meka" = list(SKIN_ICON_STATE = "mekasyndi", SKIN_ICON = CYBORG_ICON_SYNDIE_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "K4T" = list(SKIN_ICON_STATE = "k4tsyndi", SKIN_ICON = CYBORG_ICON_SYNDIE_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "NiKA" = list(SKIN_ICON_STATE = "fmekasyndi", SKIN_ICON = CYBORG_ICON_SYNDIE_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "NiKO" = list(SKIN_ICON_STATE = "mmekasyndi", SKIN_ICON = CYBORG_ICON_SYNDIE_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15) + ) + +/obj/item/robot_model/syndicatejack/rebuild_modules() + . = ..() + var/mob/living/silicon/robot/syndicatejack = loc + syndicatejack.scrambledcodes = TRUE // We're rouge now + +/obj/item/robot_model/syndicatejack/remove_module(obj/item/I, delete_after) + . = ..() + var/mob/living/silicon/robot/syndicatejack = loc + syndicatejack.scrambledcodes = FALSE // Friends with the AI again + +//NINJA +/obj/item/robot_model/ninja + name = "Spider Clan Assault" + basic_modules = list( + /obj/item/assembly/flash/cyborg, + /obj/item/katana/ninja_blade, + /obj/item/gun/energy/printer, + /obj/item/gun/ballistic/revolver/grenadelauncher/cyborg, + /obj/item/card/emag, + /obj/item/crowbar/cyborg, + /obj/item/extinguisher/mini + ) + cyborg_base_icon = "ninja_sec" + cyborg_icon_override = CYBORG_ICON_NINJA + model_select_icon = "ninjaborg" + model_select_alternate_icon = 'modular_nova/modules/borgs/icons/screen_cyborg.dmi' + model_traits = list(TRAIT_PUSHIMMUNE, TRAIT_NOFLASH) //No more charging them with a flash and thinking it is a good idea + hat_offset = 3 + borg_skins = list( + /// 32x32 Skins + "Saboteur" = list(SKIN_ICON_STATE = "ninja_engi", SKIN_ICON = CYBORG_ICON_NINJA), + "Medical" = list(SKIN_ICON_STATE = "ninja_medical", SKIN_ICON = CYBORG_ICON_NINJA), + "Assault" = list(SKIN_ICON_STATE = "ninja_sec", SKIN_ICON = CYBORG_ICON_NINJA), + "Heavy" = list(SKIN_ICON_STATE = "ninjaheavy", SKIN_ICON = CYBORG_ICON_NINJA), + "Miss M" = list(SKIN_ICON_STATE = "missm_ninja", SKIN_ICON = CYBORG_ICON_NINJA), + "Spider" = list(SKIN_ICON_STATE = "ninjaspider", SKIN_ICON = CYBORG_ICON_NINJA), + "BootyBorg" = list(SKIN_ICON_STATE = "bootyninja", SKIN_ICON = CYBORG_ICON_NINJA), + "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyninja", SKIN_ICON = CYBORG_ICON_NINJA), + /// 32x64 Skins + "Meka" = list(SKIN_ICON_STATE = "mekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "K4T" = list(SKIN_ICON_STATE = "k4tninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "NiKA" = list(SKIN_ICON_STATE = "fmekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "NiKO" = list(SKIN_ICON_STATE = "mmekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15) + ) + +/obj/item/robot_model/ninja/rebuild_modules() + . = ..() + var/mob/living/silicon/robot/Ninja = loc + Ninja.faction -= "silicon" //ai turrets hostile against assault and medical + +/obj/item/robot_model/ninja/remove_module(obj/item/I, delete_after) + var/mob/living/silicon/robot/Ninja = loc + Ninja.faction += "silicon" + . = ..() + +/obj/item/robot_model/ninja/ninja_medical + name = "Spider Clan Medical" + basic_modules = list( + /obj/item/assembly/flash/cyborg, + /obj/item/katana/ninja_blade, + /obj/item/reagent_containers/borghypo/syndicate/ninja, + /obj/item/shockpaddles/syndicate/cyborg/ninja, + /obj/item/healthanalyzer/advanced, + /obj/item/surgical_drapes, + /obj/item/retractor/advanced, + /obj/item/cautery/advanced, + /obj/item/scalpel/advanced, + /obj/item/emergency_bed/silicon, + /obj/item/card/emag, + /obj/item/crowbar/cyborg, + /obj/item/extinguisher/mini, + /obj/item/stack/medical/gauze, + /obj/item/gun/medbeam, + /obj/item/borg/apparatus/organ_storage, + /obj/item/surgical_processor + ) + cyborg_base_icon = "ninja_medical" + cyborg_icon_override = CYBORG_ICON_NINJA + model_select_icon = "ninjaborg" + model_select_alternate_icon = 'modular_nova/modules/borgs/icons/screen_cyborg.dmi' + +/obj/item/robot_model/ninja_saboteur + name = "Spider Clan Saboteur" + basic_modules = list( + /obj/item/assembly/flash/cyborg, + /obj/item/borg/sight/thermal, + /obj/item/katana/ninja_blade, + /obj/item/construction/rcd/borg/syndicate, + /obj/item/pipe_dispenser, + /obj/item/restraints/handcuffs/cable/zipties, + /obj/item/extinguisher, + /obj/item/weldingtool/electric, + /obj/item/screwdriver/cyborg/power, + /obj/item/crowbar/cyborg/power, + /obj/item/multitool/cyborg, + /obj/item/stack/sheet/iron, + /obj/item/stack/sheet/glass, + /obj/item/borg/apparatus/sheet_manipulator, + /obj/item/stack/rods/cyborg, + /obj/item/dest_tagger/borg, + /obj/item/stamp/chameleon, + /obj/item/card/emag, + /obj/item/stack/cable_coil, + /obj/item/borg_shapeshifter + ) + cyborg_base_icon = "ninja_engi" + cyborg_icon_override = CYBORG_ICON_NINJA + model_select_icon = "ninjaborg" + model_select_alternate_icon = 'modular_nova/modules/borgs/icons/screen_cyborg.dmi' + model_traits = list(TRAIT_PUSHIMMUNE, TRAIT_NOFLASH) + model_traits = list(TRAIT_NEGATES_GRAVITY) + hat_offset = -4 + canDispose = TRUE + borg_skins = list( + "Saboteur" = list(SKIN_ICON_STATE = "ninja_engi", SKIN_ICON = CYBORG_ICON_NINJA), + "Medical" = list(SKIN_ICON_STATE = "ninja_medical", SKIN_ICON = CYBORG_ICON_NINJA), + "Assault" = list(SKIN_ICON_STATE = "ninja_sec", SKIN_ICON = CYBORG_ICON_NINJA), + "Heavy" = list(SKIN_ICON_STATE = "ninjaheavy", SKIN_ICON = CYBORG_ICON_NINJA), + "Miss M" = list(SKIN_ICON_STATE = "missm_ninja", SKIN_ICON = CYBORG_ICON_NINJA), + "Spider" = list(SKIN_ICON_STATE = "ninjaspider", SKIN_ICON = CYBORG_ICON_NINJA), + "BootyBorg" = list(SKIN_ICON_STATE = "bootyninja", SKIN_ICON = CYBORG_ICON_NINJA), + "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyninja", SKIN_ICON = CYBORG_ICON_NINJA), + /// 32x64 Skins + "Meka" = list(SKIN_ICON_STATE = "mekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "K4T" = list(SKIN_ICON_STATE = "k4tninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "NiKA" = list(SKIN_ICON_STATE = "fmekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15), + "NiKO" = list(SKIN_ICON_STATE = "mmekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15) + ) + +/obj/item/robot_model/ninja_saboteur/do_transform_animation() + . = ..() + to_chat(loc, span_userdanger("While you have picked the saboteur model, that doesn't mean you are allowed to sabotage the station by delaminating the supermatter or opening all the doors to the armory, you should still ahelp to ask the permission to do that and the reason for it.")) diff --git a/modular_skyrat/modules/borgs/code/robot_upgrade.dm b/modular_nova/modules/borgs/code/robot_upgrade.dm similarity index 82% rename from modular_skyrat/modules/borgs/code/robot_upgrade.dm rename to modular_nova/modules/borgs/code/robot_upgrade.dm index 2d0cb42c6c2ca4..e275b6889d12b5 100644 --- a/modular_skyrat/modules/borgs/code/robot_upgrade.dm +++ b/modular_nova/modules/borgs/code/robot_upgrade.dm @@ -243,9 +243,15 @@ id = "borg_upgrade_clamp" build_type = MECHFAB build_path = /obj/item/borg/upgrade/better_clamp - materials = list(/datum/material/titanium = SHEET_MATERIAL_AMOUNT * 2, /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 5) + materials = list( + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT, + ) construction_time = 12 SECONDS - category = list(RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_CARGO) + category = list( + RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_CARGO, + ) /obj/item/borg/upgrade/better_clamp @@ -315,7 +321,7 @@ if(borg.hasAffection) to_chat(usr, span_warning("This unit already has a affection module installed!")) return FALSE - if(!(R_TRAIT_WIDE in borg.model.model_features)) + if(!(TRAIT_R_WIDE in borg.model.model_features)) to_chat(usr, span_warning("This unit's chassis does not support this module.")) return FALSE @@ -341,7 +347,7 @@ /obj/item/quadborg_tongue name = "synthetic tongue" desc = "Useful for slurping mess off the floor before affectionally licking the crew members in the face." - icon = 'modular_skyrat/modules/borgs/icons/robot_items.dmi' + icon = 'modular_nova/modules/borgs/icons/robot_items.dmi' icon_state = "synthtongue" hitsound = 'sound/effects/attackblob.ogg' desc = "For giving affectionate kisses." @@ -354,20 +360,23 @@ var/mob/living/silicon/robot/borg = user var/mob/living/mob = target - if(check_zone(borg.zone_selected) == "head") - borg.visible_message(span_warning("\the [borg] affectionally licks \the [mob]'s face!"), span_notice("You affectionally lick \the [mob]'s face!")) - playsound(borg, 'sound/effects/attackblob.ogg', 50, 1) + if(!HAS_TRAIT(target, TRAIT_AFFECTION_AVERSION)) // Checks for Affection Aversion trait + if(check_zone(borg.zone_selected) == "head") + borg.visible_message(span_warning("\the [borg] affectionally licks \the [mob]'s face!"), span_notice("You affectionally lick \the [mob]'s face!")) + playsound(borg, 'sound/effects/attackblob.ogg', 50, 1) + else + borg.visible_message(span_warning("\the [borg] affectionally licks \the [mob]!"), span_notice("You affectionally lick \the [mob]!")) + playsound(borg, 'sound/effects/attackblob.ogg', 50, 1) else - borg.visible_message(span_warning("\the [borg] affectionally licks \the [mob]!"), span_notice("You affectionally lick \the [mob]!")) - playsound(borg, 'sound/effects/attackblob.ogg', 50, 1) + to_chat(user, span_warning("ERROR: [target] is on the Do Not Lick registry!")) // Quadruped nose - Boop /obj/item/quadborg_nose name = "boop module" desc = "The BOOP module" - icon = 'modular_skyrat/modules/borgs/icons/robot_items.dmi' + icon = 'modular_nova/modules/borgs/icons/robot_items.dmi' icon_state = "nose" - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY item_flags = NOBLUDGEON force = 0 @@ -375,8 +384,12 @@ . = ..() if(!proximity) return - do_attack_animation(target, null, src) - user.visible_message(span_notice("[user] [pick("nuzzles", "pushes", "boops")] \the [target.name] with their nose!")) + + if(!HAS_TRAIT(target, TRAIT_AFFECTION_AVERSION)) // Checks for Affection Aversion trait + do_attack_animation(target, null, src) + user.visible_message(span_notice("[user] [pick("nuzzles", "pushes", "boops")] \the [target.name] with their nose!")) + else + to_chat(user, span_warning("ERROR: [target] is on the No Nosing registry!")) /// The Shrinkening /mob/living/silicon/robot @@ -396,7 +409,7 @@ if(borg.hasShrunk) to_chat(usr, span_warning("This unit already has a shrink module installed!")) return FALSE - if(R_TRAIT_SMALL in borg.model.model_features) + if(TRAIT_R_SMALL in borg.model.model_features) to_chat(usr, span_warning("This unit's chassis cannot be shrunk any further.")) return FALSE @@ -435,3 +448,46 @@ /obj/item/borg/upgrade/transform/syndicatejack/action(mob/living/silicon/robot/cyborg, user = usr) // Only usable on emagged cyborgs. In exchange. makes you unable to get locked down or detonated. if(cyborg.emagged) return ..() + +/// Dominatrix time +/obj/item/borg/upgrade/dominatrixmodule + name = "borg dominatrix module" + desc = "A module that greatly upgrades the ability of borgs to display affection." + icon_state = "cyborg_upgrade3" + custom_price = 0 + +/obj/item/borg/upgrade/dominatrixmodule/action(mob/living/silicon/robot/borg) + . = ..() + if(!.) + return + var/obj/item/kinky_shocker/cur_shocker = locate() in borg.model.modules + if(cur_shocker) + to_chat(usr, span_warning("This unit already has a dominatrix module installed!")) + return FALSE + + var/obj/item/kinky_shocker/shocker = new /obj/item/kinky_shocker() + borg.model.basic_modules += shocker + borg.model.add_module(shocker, FALSE, TRUE) + var/obj/item/clothing/mask/leatherwhip/whipper = new /obj/item/clothing/mask/leatherwhip() + borg.model.basic_modules += whipper + borg.model.add_module(whipper, FALSE, TRUE) + var/obj/item/spanking_pad/spanker = new /obj/item/spanking_pad() + borg.model.basic_modules += spanker + borg.model.add_module(spanker, FALSE, TRUE) + var/obj/item/tickle_feather/tickler = new /obj/item/tickle_feather() + borg.model.basic_modules += tickler + borg.model.add_module(tickler, FALSE, TRUE) + +/obj/item/borg/upgrade/dominatrixmodule/deactivate(mob/living/silicon/robot/borg, user = usr) + . = ..() + if(!.) + return + + for(var/obj/item/kinky_shocker/shocker in borg.model.modules) + borg.model.remove_module(shocker, TRUE) + for(var/obj/item/clothing/mask/leatherwhip/whipper in borg.model.modules) + borg.model.remove_module(whipper, TRUE) + for(var/obj/item/spanking_pad/spanker in borg.model.modules) + borg.model.remove_module(spanker, TRUE) + for(var/obj/item/tickle_feather/tickler in borg.model.modules) + borg.model.remove_module(tickler, TRUE) diff --git a/modular_skyrat/modules/borgs/code/update_icons.dm b/modular_nova/modules/borgs/code/update_icons.dm similarity index 84% rename from modular_skyrat/modules/borgs/code/update_icons.dm rename to modular_nova/modules/borgs/code/update_icons.dm index a9c3ffefb049bd..22f7779d999bd6 100644 --- a/modular_skyrat/modules/borgs/code/update_icons.dm +++ b/modular_nova/modules/borgs/code/update_icons.dm @@ -2,7 +2,7 @@ icon = (model.cyborg_icon_override ? model.cyborg_icon_override : initial(icon)) . = ..() /// Let's give custom borgs the ability to have flavor panels for their model - if(opened && (R_TRAIT_UNIQUEPANEL in model.model_features)) + if(opened && (TRAIT_R_UNIQUEPANEL in model.model_features)) if(wiresexposed) add_overlay("[model.cyborg_base_icon]_w") else if(cell) @@ -11,6 +11,12 @@ add_overlay("[model.cyborg_base_icon]_cl") update_altborg_icons() + if(combat_indicator) + add_overlay(GLOB.combat_indicator_overlay) + + if(temporary_flavor_text) + add_overlay(GLOB.temporary_flavor_text_indicator) + /mob/living/silicon/robot/proc/update_altborg_icons() var/extra_overlay for(var/i in held_items) @@ -52,13 +58,13 @@ else icon_state = "[model.cyborg_base_icon]" - if((R_TRAIT_UNIQUETIP in model.model_features) && (TRAIT_IMMOBILIZED in _status_traits)) + if((TRAIT_R_UNIQUETIP in model.model_features) && (TRAIT_IMMOBILIZED in _status_traits)) icon_state = "[model.cyborg_base_icon]-tipped" if(particles) dissipate() cut_overlays() - if(stat == DEAD && (R_TRAIT_UNIQUEWRECK in model.model_features)) + if(stat == DEAD && (TRAIT_R_UNIQUEWRECK in model.model_features)) icon_state = "[model.cyborg_base_icon]-wreck" diff --git a/modular_skyrat/modules/borgs/icons/misc/tallrobot_effects.dmi b/modular_nova/modules/borgs/icons/misc/tallrobot_effects.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/misc/tallrobot_effects.dmi rename to modular_nova/modules/borgs/icons/misc/tallrobot_effects.dmi diff --git a/modular_nova/modules/borgs/icons/readme.md b/modular_nova/modules/borgs/icons/readme.md new file mode 100644 index 00000000000000..a9b3cd615e527b --- /dev/null +++ b/modular_nova/modules/borgs/icons/readme.md @@ -0,0 +1,23 @@ +Current version: v0.8 + +### Credits: +TheOOZ (https://github.com/theOOZ), AKA ghostsheep (https://twitter.com/_ghostsheep) +MekaNIKA skinline + - Peacekeeper + - Service + - Service (Alt) + - Janitor + - Medical + - Cargo-technician + - Miner + - Symphionia + - Ninja + +### Terms of use: +Tallborg and its MekaNIKA skinline falls under the same licensing as the TG-13 repository. + +If you are porting this content, it is the personal request of the artist that: + - This readme, and the credit icon_state within the .dmi's remain present besides the skinline art. + - This skinline is ported in full, even if your codebase has no use for a certain job-module. + +This content was made for free. diff --git a/modular_skyrat/modules/borgs/icons/robot_items.dmi b/modular_nova/modules/borgs/icons/robot_items.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/robot_items.dmi rename to modular_nova/modules/borgs/icons/robot_items.dmi diff --git a/modular_skyrat/modules/borgs/icons/robots.dmi b/modular_nova/modules/borgs/icons/robots.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/robots.dmi rename to modular_nova/modules/borgs/icons/robots.dmi diff --git a/modular_skyrat/modules/borgs/icons/robots_cargo.dmi b/modular_nova/modules/borgs/icons/robots_cargo.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/robots_cargo.dmi rename to modular_nova/modules/borgs/icons/robots_cargo.dmi diff --git a/modular_skyrat/modules/borgs/icons/robots_clown.dmi b/modular_nova/modules/borgs/icons/robots_clown.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/robots_clown.dmi rename to modular_nova/modules/borgs/icons/robots_clown.dmi diff --git a/modular_skyrat/modules/borgs/icons/robots_eng.dmi b/modular_nova/modules/borgs/icons/robots_eng.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/robots_eng.dmi rename to modular_nova/modules/borgs/icons/robots_eng.dmi diff --git a/modular_skyrat/modules/borgs/icons/robots_jani.dmi b/modular_nova/modules/borgs/icons/robots_jani.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/robots_jani.dmi rename to modular_nova/modules/borgs/icons/robots_jani.dmi diff --git a/modular_skyrat/modules/borgs/icons/robots_med.dmi b/modular_nova/modules/borgs/icons/robots_med.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/robots_med.dmi rename to modular_nova/modules/borgs/icons/robots_med.dmi diff --git a/modular_skyrat/modules/borgs/icons/robots_mine.dmi b/modular_nova/modules/borgs/icons/robots_mine.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/robots_mine.dmi rename to modular_nova/modules/borgs/icons/robots_mine.dmi diff --git a/modular_skyrat/modules/borgs/icons/robots_ninja.dmi b/modular_nova/modules/borgs/icons/robots_ninja.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/robots_ninja.dmi rename to modular_nova/modules/borgs/icons/robots_ninja.dmi diff --git a/modular_skyrat/modules/borgs/icons/robots_pk.dmi b/modular_nova/modules/borgs/icons/robots_pk.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/robots_pk.dmi rename to modular_nova/modules/borgs/icons/robots_pk.dmi diff --git a/modular_skyrat/modules/borgs/icons/robots_sec.dmi b/modular_nova/modules/borgs/icons/robots_sec.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/robots_sec.dmi rename to modular_nova/modules/borgs/icons/robots_sec.dmi diff --git a/modular_skyrat/modules/borgs/icons/robots_serv.dmi b/modular_nova/modules/borgs/icons/robots_serv.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/robots_serv.dmi rename to modular_nova/modules/borgs/icons/robots_serv.dmi diff --git a/modular_skyrat/modules/borgs/icons/robots_syndi.dmi b/modular_nova/modules/borgs/icons/robots_syndi.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/robots_syndi.dmi rename to modular_nova/modules/borgs/icons/robots_syndi.dmi diff --git a/modular_nova/modules/borgs/icons/screen_cyborg.dmi b/modular_nova/modules/borgs/icons/screen_cyborg.dmi new file mode 100644 index 00000000000000..233d0d1df45382 Binary files /dev/null and b/modular_nova/modules/borgs/icons/screen_cyborg.dmi differ diff --git a/modular_skyrat/modules/borgs/icons/tallrobot_cargo.dmi b/modular_nova/modules/borgs/icons/tallrobot_cargo.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/tallrobot_cargo.dmi rename to modular_nova/modules/borgs/icons/tallrobot_cargo.dmi diff --git a/modular_skyrat/modules/borgs/icons/tallrobot_clown.dmi b/modular_nova/modules/borgs/icons/tallrobot_clown.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/tallrobot_clown.dmi rename to modular_nova/modules/borgs/icons/tallrobot_clown.dmi diff --git a/modular_skyrat/modules/borgs/icons/tallrobot_eng.dmi b/modular_nova/modules/borgs/icons/tallrobot_eng.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/tallrobot_eng.dmi rename to modular_nova/modules/borgs/icons/tallrobot_eng.dmi diff --git a/modular_skyrat/modules/borgs/icons/tallrobot_jani.dmi b/modular_nova/modules/borgs/icons/tallrobot_jani.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/tallrobot_jani.dmi rename to modular_nova/modules/borgs/icons/tallrobot_jani.dmi diff --git a/modular_skyrat/modules/borgs/icons/tallrobot_med.dmi b/modular_nova/modules/borgs/icons/tallrobot_med.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/tallrobot_med.dmi rename to modular_nova/modules/borgs/icons/tallrobot_med.dmi diff --git a/modular_skyrat/modules/borgs/icons/tallrobot_mine.dmi b/modular_nova/modules/borgs/icons/tallrobot_mine.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/tallrobot_mine.dmi rename to modular_nova/modules/borgs/icons/tallrobot_mine.dmi diff --git a/modular_skyrat/modules/borgs/icons/tallrobot_ninja.dmi b/modular_nova/modules/borgs/icons/tallrobot_ninja.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/tallrobot_ninja.dmi rename to modular_nova/modules/borgs/icons/tallrobot_ninja.dmi diff --git a/modular_skyrat/modules/borgs/icons/tallrobot_pk.dmi b/modular_nova/modules/borgs/icons/tallrobot_pk.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/tallrobot_pk.dmi rename to modular_nova/modules/borgs/icons/tallrobot_pk.dmi diff --git a/modular_skyrat/modules/borgs/icons/tallrobot_sec.dmi b/modular_nova/modules/borgs/icons/tallrobot_sec.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/tallrobot_sec.dmi rename to modular_nova/modules/borgs/icons/tallrobot_sec.dmi diff --git a/modular_skyrat/modules/borgs/icons/tallrobot_serv.dmi b/modular_nova/modules/borgs/icons/tallrobot_serv.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/tallrobot_serv.dmi rename to modular_nova/modules/borgs/icons/tallrobot_serv.dmi diff --git a/modular_skyrat/modules/borgs/icons/tallrobot_syndi.dmi b/modular_nova/modules/borgs/icons/tallrobot_syndi.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/tallrobot_syndi.dmi rename to modular_nova/modules/borgs/icons/tallrobot_syndi.dmi diff --git a/modular_skyrat/modules/borgs/icons/widerobot_eng.dmi b/modular_nova/modules/borgs/icons/widerobot_eng.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/widerobot_eng.dmi rename to modular_nova/modules/borgs/icons/widerobot_eng.dmi diff --git a/modular_skyrat/modules/borgs/icons/widerobot_jani.dmi b/modular_nova/modules/borgs/icons/widerobot_jani.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/widerobot_jani.dmi rename to modular_nova/modules/borgs/icons/widerobot_jani.dmi diff --git a/modular_skyrat/modules/borgs/icons/widerobot_med.dmi b/modular_nova/modules/borgs/icons/widerobot_med.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/widerobot_med.dmi rename to modular_nova/modules/borgs/icons/widerobot_med.dmi diff --git a/modular_skyrat/modules/borgs/icons/widerobot_mine.dmi b/modular_nova/modules/borgs/icons/widerobot_mine.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/widerobot_mine.dmi rename to modular_nova/modules/borgs/icons/widerobot_mine.dmi diff --git a/modular_skyrat/modules/borgs/icons/widerobot_pk.dmi b/modular_nova/modules/borgs/icons/widerobot_pk.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/widerobot_pk.dmi rename to modular_nova/modules/borgs/icons/widerobot_pk.dmi diff --git a/modular_skyrat/modules/borgs/icons/widerobot_sec.dmi b/modular_nova/modules/borgs/icons/widerobot_sec.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/widerobot_sec.dmi rename to modular_nova/modules/borgs/icons/widerobot_sec.dmi diff --git a/modular_skyrat/modules/borgs/icons/widerobot_serv.dmi b/modular_nova/modules/borgs/icons/widerobot_serv.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/widerobot_serv.dmi rename to modular_nova/modules/borgs/icons/widerobot_serv.dmi diff --git a/modular_skyrat/modules/borgs/icons/widerobots_cargo.dmi b/modular_nova/modules/borgs/icons/widerobots_cargo.dmi similarity index 100% rename from modular_skyrat/modules/borgs/icons/widerobots_cargo.dmi rename to modular_nova/modules/borgs/icons/widerobots_cargo.dmi diff --git a/modular_nova/modules/borgs/readme.md b/modular_nova/modules/borgs/readme.md new file mode 100644 index 00000000000000..704ac54f237e71 --- /dev/null +++ b/modular_nova/modules/borgs/readme.md @@ -0,0 +1,34 @@ +https://github.com/Skyrat-SS13/Skyrat-tg/pull/127 + +## Title: borgs + +MODULE ID: BORGS + + +### Description: + +Condenses modular borg skins, items, upgrades and buffs to one folder for sanity's sake + +### TG Proc Changes: +- APPEND: modular_nova/modules/altborgs > modular_nova/modules/borgs +- /code/modules/mob/living/silicon/robot/robot_modules.dm +- /code/modules/research/techweb/all_nodes.dm + +### Defines: + +- /code/modules/research/techweb/all_nodes.dm > /datum/techweb_node/cyborg_upg_util + +### Master file additions + +- N/A + +### Included files that are not contained in this module: + +- N/A + +### Credits: + +Gandalf2k15 - Porting & refactoring +Azarak - porting +DuffCreeper - Code, Spriting +Zergspower - Refactoring diff --git a/modular_skyrat/modules/bsa_overhaul/code/admin_verb.dm b/modular_nova/modules/bsa_overhaul/code/admin_verb.dm similarity index 100% rename from modular_skyrat/modules/bsa_overhaul/code/admin_verb.dm rename to modular_nova/modules/bsa_overhaul/code/admin_verb.dm diff --git a/modular_skyrat/modules/bsa_overhaul/code/bsa_cannon.dm b/modular_nova/modules/bsa_overhaul/code/bsa_cannon.dm similarity index 92% rename from modular_skyrat/modules/bsa_overhaul/code/bsa_cannon.dm rename to modular_nova/modules/bsa_overhaul/code/bsa_cannon.dm index 1460af62361a19..6dd91c1d0a0618 100644 --- a/modular_skyrat/modules/bsa_overhaul/code/bsa_cannon.dm +++ b/modular_nova/modules/bsa_overhaul/code/bsa_cannon.dm @@ -28,7 +28,7 @@ /obj/machinery/bsa/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool, time = 1 SECONDS) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/bsa/back name = "Bluespace Artillery Generator" @@ -58,7 +58,7 @@ /obj/machinery/bsa/middle name = "Bluespace Artillery Fusor" - desc = "Contents classified by Nanotrasen Naval Command. Needs to be linked with the other BSA parts using a multitool." + desc = "Contents classified by Symphionia Naval Command. Needs to be linked with the other BSA parts using a multitool." icon_state = "fuel_chamber" /// Our linked back piece var/datum/weakref/back_piece @@ -275,8 +275,9 @@ return system_state = BSA_SYSTEM_PREFIRE priority_announce("BLUESPACE TARGETING PARAMETERS SET, PREIGNITION STARTING... CAPACITOR CHARGE AT [round(capacitor_power / 1000000, 0.1)] MW, FIRING IN T-20 SECONDS!", "BLUESPACE ARTILLERY", ANNOUNCER_BLUESPACEARTY) - alert_sound_to_playing('modular_skyrat/modules/bsa_overhaul/sound/superlaser_prefire.ogg', override_volume = TRUE) + alert_sound_to_playing('modular_nova/modules/bsa_overhaul/sound/superlaser_prefire.ogg', override_volume = TRUE) message_admins("[user] has started the fire cycle of [src]! Firing at: [ADMIN_VERBOSEJMP(bullseye)]") + log_game("[key_name(user)] has aimed the bluespace artillery strike at [bullseye].") set_light(5, 5, COLOR_BLUE_LIGHT) addtimer(CALLBACK(src, PROC_REF(fire), user, bullseye), 20 SECONDS, TIMER_CLIENT_TIME) @@ -314,15 +315,15 @@ new /obj/effect/temp_visual/bsa_splash(point, dir) if(!blocker) - message_admins("[ADMIN_LOOKUPFLW(user)] has launched an artillery strike targeting [ADMIN_VERBOSEJMP(bullseye)].") - log_game("[key_name(user)] has launched an artillery strike targeting [AREACOORD(bullseye)].") + message_admins("[ADMIN_LOOKUPFLW(user)] has launched a bluespace artillery strike targeting [ADMIN_VERBOSEJMP(bullseye)].") + user.log_message("has launched a bluespace artillery strike targeting [AREACOORD(bullseye)].", LOG_GAME) minor_announce("BLUESPACE ARTILLERY FIRE SUCCESSFUL! DIRECT HIT!", "BLUESPACE ARTILLERY", TRUE) create_calculated_explosion(bullseye) - alert_sound_to_playing('modular_skyrat/modules/bsa_overhaul/sound/superlaser_firing.ogg', override_volume = TRUE) + alert_sound_to_playing('modular_nova/modules/bsa_overhaul/sound/superlaser_firing.ogg', override_volume = TRUE) capacitor_power = 0 else - message_admins("[ADMIN_LOOKUPFLW(user)] has launched an artillery strike targeting [ADMIN_VERBOSEJMP(bullseye)] but it was blocked by [blocker] at [ADMIN_VERBOSEJMP(target)].") - log_game("[key_name(user)] has launched an artillery strike targeting [AREACOORD(bullseye)] but it was blocked by [blocker] at [AREACOORD(target)].") + message_admins("[ADMIN_LOOKUPFLW(user)] has launched a bluespace artillery strike targeting [ADMIN_VERBOSEJMP(bullseye)] but it was blocked by [blocker] at [ADMIN_VERBOSEJMP(target)].") + user.log_message("has launched a bluespace artillery strike targeting [AREACOORD(bullseye)] but it was blocked by [blocker] at [AREACOORD(target)].", LOG_GAME) minor_announce("BLUESPACE ARTILLERY MALFUNCTION!", "BLUESPACE ARTILLERY", TRUE) /// Reloads the BSA. diff --git a/modular_skyrat/modules/bsa_overhaul/code/bsa_computer.dm b/modular_nova/modules/bsa_overhaul/code/bsa_computer.dm similarity index 100% rename from modular_skyrat/modules/bsa_overhaul/code/bsa_computer.dm rename to modular_nova/modules/bsa_overhaul/code/bsa_computer.dm diff --git a/modular_skyrat/modules/bsa_overhaul/code/station_goal.dm b/modular_nova/modules/bsa_overhaul/code/station_goal.dm similarity index 95% rename from modular_skyrat/modules/bsa_overhaul/code/station_goal.dm rename to modular_nova/modules/bsa_overhaul/code/station_goal.dm index 370318f21ec7c5..fc2dde968e96ae 100644 --- a/modular_skyrat/modules/bsa_overhaul/code/station_goal.dm +++ b/modular_nova/modules/bsa_overhaul/code/station_goal.dm @@ -13,7 +13,7 @@ "We need you to construct BSA-[rand(1,99)] Artillery position aboard your station.", "", "Base parts are available for shipping via cargo.", - "-Nanotrasen Naval Command</blockquote>", + "-Symphionia Naval Command</blockquote>", ).Join("\n") /datum/station_goal/bluespace_cannon/on_report() diff --git a/modular_skyrat/modules/bsa_overhaul/icons/bsa_parts.dmi b/modular_nova/modules/bsa_overhaul/icons/bsa_parts.dmi similarity index 100% rename from modular_skyrat/modules/bsa_overhaul/icons/bsa_parts.dmi rename to modular_nova/modules/bsa_overhaul/icons/bsa_parts.dmi diff --git a/modular_skyrat/modules/bsa_overhaul/sound/superlaser_firing.ogg b/modular_nova/modules/bsa_overhaul/sound/superlaser_firing.ogg similarity index 100% rename from modular_skyrat/modules/bsa_overhaul/sound/superlaser_firing.ogg rename to modular_nova/modules/bsa_overhaul/sound/superlaser_firing.ogg diff --git a/modular_skyrat/modules/bsa_overhaul/sound/superlaser_prefire.ogg b/modular_nova/modules/bsa_overhaul/sound/superlaser_prefire.ogg similarity index 100% rename from modular_skyrat/modules/bsa_overhaul/sound/superlaser_prefire.ogg rename to modular_nova/modules/bsa_overhaul/sound/superlaser_prefire.ogg diff --git a/modular_skyrat/modules/bsrpd/code/bsrpd.dm b/modular_nova/modules/bsrpd/code/bsrpd.dm similarity index 93% rename from modular_skyrat/modules/bsrpd/code/bsrpd.dm rename to modular_nova/modules/bsrpd/code/bsrpd.dm index d7493ee1f462e9..94fe4bf5c8f15d 100644 --- a/modular_skyrat/modules/bsrpd/code/bsrpd.dm +++ b/modular_nova/modules/bsrpd/code/bsrpd.dm @@ -5,10 +5,10 @@ /obj/item/pipe_dispenser/bluespace name = "bluespace RPD" desc = "State of the art technology being tested by NT scientists; this is their only working prototype." - icon = 'modular_skyrat/modules/bsrpd/icons/bsrpd.dmi' + icon = 'modular_nova/modules/bsrpd/icons/bsrpd.dmi' icon_state = "bsrpd" - lefthand_file = 'modular_skyrat/modules/bsrpd/icons/bsrpd_left.dmi' - righthand_file = 'modular_skyrat/modules/bsrpd/icons/bsrpd_right.dmi' + lefthand_file = 'modular_nova/modules/bsrpd/icons/bsrpd_left.dmi' + righthand_file = 'modular_nova/modules/bsrpd/icons/bsrpd_right.dmi' inhand_icon_state = "bsrpd" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF custom_materials = null diff --git a/modular_skyrat/modules/bsrpd/icons/bsrpd.dmi b/modular_nova/modules/bsrpd/icons/bsrpd.dmi similarity index 100% rename from modular_skyrat/modules/bsrpd/icons/bsrpd.dmi rename to modular_nova/modules/bsrpd/icons/bsrpd.dmi diff --git a/modular_skyrat/modules/bsrpd/icons/bsrpd_left.dmi b/modular_nova/modules/bsrpd/icons/bsrpd_left.dmi similarity index 100% rename from modular_skyrat/modules/bsrpd/icons/bsrpd_left.dmi rename to modular_nova/modules/bsrpd/icons/bsrpd_left.dmi diff --git a/modular_skyrat/modules/bsrpd/icons/bsrpd_right.dmi b/modular_nova/modules/bsrpd/icons/bsrpd_right.dmi similarity index 100% rename from modular_skyrat/modules/bsrpd/icons/bsrpd_right.dmi rename to modular_nova/modules/bsrpd/icons/bsrpd_right.dmi diff --git a/modular_skyrat/modules/cargo/code/goodies.dm b/modular_nova/modules/cargo/code/goodies.dm similarity index 93% rename from modular_skyrat/modules/cargo/code/goodies.dm rename to modular_nova/modules/cargo/code/goodies.dm index 2324057a3a684c..caeb15c2668c9c 100644 --- a/modular_skyrat/modules/cargo/code/goodies.dm +++ b/modular_nova/modules/cargo/code/goodies.dm @@ -70,13 +70,6 @@ cost = PAYCHECK_CREW * 35 // 1750 credit goody? do bounties contains = list(/obj/item/skillchip/xenoarch_magnifier) -/datum/supply_pack/goody/gravity_harness - name = "Gravity Suspension Harness" - desc = "A back-mounted suspensor harness powered by cells, designed by Deep Spacer tribes to either nullify or amplify gravity. \ - While it's a pretty cheap bootleg of the personal gravitic engines used by the Skrell, this one's been fitted with straps and a basic storage module." - cost = CARGO_CRATE_VALUE * 6 // 1200 credits - contains = list(/obj/item/gravity_harness) - /datum/supply_pack/goody/scratching_stone name = "Scratching Stone" desc = "A high-grade sharpening stone made of specialized alloys, meant to sharpen razor-claws. Unfortunately, this particular one has by far seen better days." diff --git a/modular_skyrat/modules/cargo/code/items/AFAD.dm b/modular_nova/modules/cargo/code/items/AFAD.dm similarity index 100% rename from modular_skyrat/modules/cargo/code/items/AFAD.dm rename to modular_nova/modules/cargo/code/items/AFAD.dm diff --git a/modular_skyrat/modules/cargo/code/items/gbp_punchcard.dm b/modular_nova/modules/cargo/code/items/gbp_punchcard.dm similarity index 93% rename from modular_skyrat/modules/cargo/code/items/gbp_punchcard.dm rename to modular_nova/modules/cargo/code/items/gbp_punchcard.dm index 4244965dad55cc..8c2e39024fbd47 100644 --- a/modular_skyrat/modules/cargo/code/items/gbp_punchcard.dm +++ b/modular_nova/modules/cargo/code/items/gbp_punchcard.dm @@ -8,7 +8,7 @@ desc = "The Good Assistant Points program is designed to supplement the income of otherwise unemployed or unpaid individuals on board Nanotrasen vessels and colonies.<br>\ Simply get your punchcard stamped by a Head of Staff to earn 100 credits per punch upon turn-in at a Good Assistant Point machine!<br>\ Maximum of six punches per any given card. Card replaced upon redemption of existing card. Do not lose your punchcard." - icon = 'modular_skyrat/modules/cargo/icons/punchcard.dmi' + icon = 'modular_nova/modules/cargo/icons/punchcard.dmi' icon_state = "punchcard_0" w_class = WEIGHT_CLASS_TINY var/max_punches = 6 @@ -40,14 +40,14 @@ /obj/item/gbp_puncher name = "Good Assistant Points puncher" desc = "A puncher for use with the Good Assistant Points system. Use it on a punchcard to punch a hole. Expect to be hassled for punches by assistants." - icon = 'modular_skyrat/modules/cargo/icons/punchcard.dmi' + icon = 'modular_nova/modules/cargo/icons/punchcard.dmi' icon_state = "puncher" w_class = WEIGHT_CLASS_TINY /obj/machinery/gbp_redemption name = "Good Assistant Points Redemption Machine" desc = "Turn your Good Assistant Points punchcards in here for a payout based on the amount of punches you have, and get a new card!" - icon = 'modular_skyrat/modules/cargo/icons/punchcard.dmi' + icon = 'modular_nova/modules/cargo/icons/punchcard.dmi' icon_state = "gbp_machine" density = TRUE circuit = /obj/item/circuitboard/machine/gbp_redemption @@ -55,7 +55,7 @@ /obj/machinery/gbp_redemption/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/gbp_redemption/attackby(obj/item/attacking_item, mob/user, params) if(default_deconstruction_screwdriver(user, "gbp_machine_open", "gbp_machine", attacking_item)) @@ -96,8 +96,13 @@ if(tgui_alert(user, "You haven't finished the punchcard! Are you sure you want to redeem, starting the 15 minute timer?", "A real goof effort right here", list("No", "Yes")) != "Yes") return + if(!punchcard.punches) // check to see if someone left the dialog open to redeem a card twice + return + + var/validated_punches = punchcard.punches + punchcard.punches = 0 playsound(src, 'sound/machines/printer.ogg', 100) - card_used.registered_account.adjust_money(amount_to_reward, "GAP: [punchcard.punches] punches") + card_used.registered_account.adjust_money(amount_to_reward, "GAP: [validated_punches] punches") log_econ("[amount_to_reward] credits were rewarded to [card_used.registered_account.account_holder]'s account for redeeming a GAP card.") say("Rewarded [amount_to_reward] to your account, and dispensed a ration pack! Thank you for being a Good Assistant! Please take your new punchcard.") COOLDOWN_START(card_used, gbp_redeem_cooldown, 12 MINUTES) diff --git a/modular_nova/modules/cargo/code/items/improvedRCD.dm b/modular_nova/modules/cargo/code/items/improvedRCD.dm new file mode 100644 index 00000000000000..08c8a877dca0dc --- /dev/null +++ b/modular_nova/modules/cargo/code/items/improvedRCD.dm @@ -0,0 +1,16 @@ +// Slightly improved version of the normal RCD, mostly as an engineering 'I got hella bread' purchase +/obj/item/construction/rcd/improved + name = "Improved RCD" + desc = "A device used to rapidly build and deconstruct. Upgraded from the standard model with superior material storage, at the cost of build speed. Reload with iron, plasteel, glass or compressed matter cartridges." + icon_state = "ircd" + inhand_icon_state = "ircd" + max_matter = 220 + matter = 220 + delay_mod = 1.3 + upgrade = RCD_UPGRADE_FRAMES | RCD_UPGRADE_SIMPLE_CIRCUITS + +// Unimproved repainted RCD that Interdyne's cargo/atrium gets +/obj/item/construction/rcd/loaded/interdyne + desc = "A device used to rapidly build and deconstruct. Reload with iron, plasteel, glass or compressed matter cartridges. This one looks like it has been repainted in black and red, though it retains standard functionality."; + icon_state = "ircd" + inhand_icon_state = "ircd" diff --git a/modular_nova/modules/cargo/code/packs.dm b/modular_nova/modules/cargo/code/packs.dm new file mode 100644 index 00000000000000..c92b058db2af26 --- /dev/null +++ b/modular_nova/modules/cargo/code/packs.dm @@ -0,0 +1,756 @@ +/// Cost of the crate. DO NOT GO ANY LOWER THAN X1.4 the "CARGO_CRATE_VALUE" value if using regular crates, or infinite profit will be possible! + +/* +* LIVESTOCK +*/ + +/datum/supply_pack/critter/doublecrab + name = "Crab Crate" + desc = "Contains two crabs. Get your crab on!" + cost = CARGO_CRATE_VALUE * 4 + contains = list( + /mob/living/basic/crab, + /mob/living/basic/crab, + ) + crate_name = "look sir free crabs" + +/datum/supply_pack/critter/mouse + name = "Mouse Crate" + desc = "Good for snakes and lizards of all ages. Contains six feeder mice." + cost = CARGO_CRATE_VALUE * 6 + contains = list( + /mob/living/basic/mouse, + ) + crate_name = "mouse crate" + +/datum/supply_pack/critter/mouse/generate() + . = ..() + for(var/i in 1 to 5) + new /mob/living/basic/mouse(.) + +/datum/supply_pack/critter/chinchilla + name = "Chinchilla Crate" + desc = "Contains four chinchillas. Dust not included." + cost = CARGO_CRATE_VALUE * 7 + contains = list( + /mob/living/basic/pet/chinchilla, + ) + crate_name = "chinchilla crate" + +/datum/supply_pack/critter/chinchilla/generate() + . = ..() + for(var/i in 1 to 3) + new /mob/living/basic/pet/chinchilla(.) + +/* +* MEDICAL +*/ + +/datum/supply_pack/medical/anesthetics + name = "Anesthetics Crate" + desc = "Contains two of the following: Morphine bottles, syringes, breath masks, and anesthetic tanks. Requires Medical Access to open." + access = ACCESS_MEDICAL + cost = CARGO_CRATE_VALUE * 4 + contains = list( + /obj/item/reagent_containers/cup/bottle/morphine, + /obj/item/reagent_containers/cup/bottle/morphine, + /obj/item/reagent_containers/syringe, + /obj/item/reagent_containers/syringe, + /obj/item/clothing/mask/breath, + /obj/item/clothing/mask/breath, + /obj/item/tank/internals/anesthetic, + /obj/item/tank/internals/anesthetic, + ) + crate_name = "anesthetics crate" + +/datum/supply_pack/medical/bodybags + name = "Bodybags" + desc = "For when the bodies hit the floor. Contains 4 boxes of bodybags." + cost = CARGO_CRATE_VALUE * 2 + contains = list( + /obj/item/storage/box/bodybags, + /obj/item/storage/box/bodybags, + /obj/item/storage/box/bodybags, + /obj/item/storage/box/bodybags, + ) + crate_name = "bodybag crate" + +/datum/supply_pack/medical/firstaidmixed + name = "Mixed Medical Kits" + desc = "Contains one of each medical kits for dealing with a variety of injured crewmembers." + cost = CARGO_CRATE_VALUE * 5 + contains = list( + /obj/item/storage/medkit/toxin, + /obj/item/storage/medkit/o2, + /obj/item/storage/medkit/brute, + /obj/item/storage/medkit/fire, + /obj/item/storage/medkit/regular, + ) + crate_name = "medical kit crate" + +/datum/supply_pack/medical/medipens + name = "Epinephrine Medipens" + desc = "Contains two boxes of epinephrine medipens. Each box contains seven pens." + cost = CARGO_CRATE_VALUE * 4.5 + contains = list( + /obj/item/storage/box/medipens, + /obj/item/storage/box/medipens, + ) + crate_name = "medipen crate" + +/datum/supply_pack/medical/modsuit_medical + name = "Medical MODsuit Crate" + desc = "Contains a single MODsuit, built to standard medical specifications." + cost = CARGO_CRATE_VALUE * 13 + access = ACCESS_MEDICAL + contains = list(/obj/item/mod/control/pre_equipped/medical) + crate_name = "medical MODsuit crate" + crate_type = /obj/structure/closet/crate/secure //No medical varient with security locks. + +/datum/supply_pack/medical/compact_defib + name = "Compact Defibrillator Crate" + desc = "Contains a single compact defibrillator. Capable of being worn as a belt." + cost = CARGO_CRATE_VALUE * 5 + access = ACCESS_MEDICAL + contains = list(/obj/item/defibrillator/compact) + crate_name = "compact defibrillator crate" + +/datum/supply_pack/medical/medigun + name = "CWM-479 Medigun" + desc = "Contains a single VeyMedical CWM-479 model medical gun; cells not included." + cost = CARGO_CRATE_VALUE * 30 + access = ACCESS_MEDICAL + contains = list(/obj/item/storage/briefcase/medicalgunset/standard) + crate_name = "CWM-479 medigun crate" + +/datum/supply_pack/medical/medicells + name = "Medicell Replacement Crate" + desc = "Contains the tier I Medigun cells." + cost = CARGO_CRATE_VALUE * 5 + access = ACCESS_MEDICAL + contains = list( + /obj/item/weaponcell/medical/brute, + /obj/item/weaponcell/medical/burn, + /obj/item/weaponcell/medical/toxin, + ) + crate_name = "medicell replacement crate" + +/* +* SECURITY +*/ + +/datum/supply_pack/security/MODsuit_security + name = "Security MODsuit Crate" + desc = "Contains a single armored up MODsuit, built to standard security specifications." + cost = CARGO_CRATE_VALUE * 16 + access_view = ACCESS_SECURITY + contains = list(/obj/item/mod/control/pre_equipped/security) + crate_name = "security MODsuit crate" + +/datum/supply_pack/security/armor_nova + name = "Armor Crate" + desc = "Three vests of well-rounded, decently-protective armor." + cost = CARGO_CRATE_VALUE * 2 + access_view = ACCESS_SECURITY + contains = list( + /obj/item/clothing/suit/armor/vest/alt, + /obj/item/clothing/suit/armor/vest/alt, + /obj/item/clothing/suit/armor/vest/alt, + ) + crate_name = "armor crate" + +/datum/supply_pack/security/helmets_nova + name = "Helmets Crate" + desc = "Contains three standard-issue brain buckets." + cost = CARGO_CRATE_VALUE * 2 + contains = list(/obj/item/clothing/head/helmet/sec/sol = 3) + crate_name = "helmet crate" + +/datum/supply_pack/security/deployablebarricades + name = "C.U.C.K.S Deployable Barricades" + desc = "Two cases of deployable barricades, for all your fortification needs." + cost = CARGO_CRATE_VALUE * 4 + contains = list( + /obj/item/storage/barricade, + /obj/item/storage/barricade, + ) + crate_name = "C.U.C.K.S Crate" + +/* +* ENGINEERING +*/ + +/datum/supply_pack/engineering/material_pouches + name = "Material Pouches Crate" + desc = "Contains three material pouches." + access_view = ACCESS_ENGINE_EQUIP + contains = list( + /obj/item/storage/pouch/material, + /obj/item/storage/pouch/material, + /obj/item/storage/pouch/material, + ) + cost = CARGO_CRATE_VALUE * 15 + crate_name = "material pouches crate" + +/datum/supply_pack/engineering/doublecap_tanks + name = "Double Extended Emergency Tank Crate" + desc = "Contains four double extended-capacity emergency tanks." + access_view = ACCESS_ENGINE_EQUIP + contains = list( + /obj/item/tank/internals/emergency_oxygen/double, + /obj/item/tank/internals/emergency_oxygen/double, + /obj/item/tank/internals/emergency_oxygen/double, + /obj/item/tank/internals/emergency_oxygen/double, + ) + cost = CARGO_CRATE_VALUE * 15 + crate_name = "double extended emergency tank crate" + +/datum/supply_pack/engineering/advanced_extinguisher + name = "Advanced Foam Extinguisher Crate" + desc = "Contains advanced fire extinguishers which use foam as extinguishing agent." + access_view = ACCESS_ENGINE_EQUIP + contains = list( + /obj/item/extinguisher/advanced, + /obj/item/extinguisher/advanced, + /obj/item/extinguisher/advanced, + ) + cost = CARGO_CRATE_VALUE * 18 + crate_name = "advanced extinguisher crate" + +/datum/supply_pack/engineering/modsuit_engineering + name = "Engineering MODsuit Crate" + desc = "Contains a single MODsuit, built to standard engineering specifications." + access = ACCESS_ENGINE_EQUIP + contains = list(/obj/item/mod/control/pre_equipped/engineering) + cost = CARGO_CRATE_VALUE * 13 + crate_name = "engineering MODsuit crate" + crate_type = /obj/structure/closet/crate/secure/engineering + +/datum/supply_pack/engineering/modsuit_atmospherics + name = "Atmospherics MODsuit Crate" + desc = "Contains a single MODsuit, built to standard atmospherics specifications." + access = ACCESS_ENGINE_EQUIP + contains = list(/obj/item/mod/control/pre_equipped/atmospheric) + cost = CARGO_CRATE_VALUE * 16 + crate_name = "atmospherics MODsuit crate" + crate_type = /obj/structure/closet/crate/secure/engineering + +/datum/supply_pack/engineering/engi_inducers + name = "NT-150 Industrial Power Inducers Crate" + desc = "An improved model over the NT-75 EPI, the NT-150 charges at double the rate and contains an improved powercell. Contains two engineering-spec Inducers." + cost = CARGO_CRATE_VALUE * 6 + contains = list( + /obj/item/inducer, + /obj/item/inducer, + ) + crate_name = "engineering inducer crate" + crate_type = /obj/structure/closet/crate/engineering/electrical + +/datum/supply_pack/engineering/gas_miner + name = "Gas Miner Delivery Beacon Crate" + desc = "Contains a single gas miner delivery beacon, for the ordering of one gas miner." + access = ACCESS_ATMOSPHERICS + contains = list(/obj/item/summon_beacon/gas_miner) + cost = CARGO_CRATE_VALUE * 50 + crate_name = "gas miner delivery beacon crate" + crate_type = /obj/structure/closet/crate/secure/engineering + +/datum/supply_pack/engineering/improved_rcd + name = "Improved RCD Crate" + desc = "Contains 3 upgraded RCDs featuring superior material storage. Each comes with complimentary frames and circuitry upgrades to boot!" + access = ACCESS_ENGINE_EQUIP + cost = CARGO_CRATE_VALUE * 18 + contains = list( + /obj/item/construction/rcd/improved, + /obj/item/construction/rcd/improved, + /obj/item/construction/rcd/improved, + ) + crate_name = "improved RCD crate" + crate_type = /obj/structure/closet/crate/secure/engineering + +/* +* MISC +*/ + +/datum/supply_pack/misc/speedbike //If you see this bought in game, its time to nerf a cargo exploit. + name = "Speedbike" + desc = "Put your shades on, saddle up, and ride off directly into the sun on this turbo deluxe space-cruising speedbike." + cost = 1000000 //Special case, we don't want to make this in terms of crates because having bikes be a million credits is the whole meme. + contains = list(/obj/vehicle/ridden/speedbike) + crate_name = "speedbike crate" + +/datum/supply_pack/misc/painting + name = "Advanced Art Supplies" + desc = "Bring out your artistic spirit with these advanced art supplies. Contains coloring supplies, cloth for canvas, and two easels to work with!" + cost = CARGO_CRATE_VALUE * 2.2 + contains = list( + /obj/structure/easel, + /obj/structure/easel, + /obj/item/toy/crayon/spraycan, + /obj/item/toy/crayon/spraycan, + /obj/item/storage/crayons, + /obj/item/storage/crayons, + /obj/item/toy/crayon/white, + /obj/item/toy/crayon/white, + /obj/item/toy/crayon/rainbow, + /obj/item/toy/crayon/rainbow, + /obj/item/stack/sheet/cloth/ten, + /obj/item/stack/sheet/cloth/ten, + ) + crate_name = "advanced art supplies" + +/datum/supply_pack/service/paintcan + name = "Adaptive Paintcan" + desc = "Give things a splash of color with this experimental color-changing can of paint! Sellers note: We are not responsible for lynchings carried out by angry janitors, security officers, or any other crewmembers as a result of you using this." + cost = CARGO_CRATE_VALUE * 15 + contains = list(/obj/item/paint/anycolor) + +/datum/supply_pack/misc/coloredsheets + name = "Bedsheet Crate" + desc = "Give your night life a splash of color with this crate filled with bedsheets! Contains a total of nine different-colored sheets." + cost = CARGO_CRATE_VALUE * 2.5 + contains = list( + /obj/item/bedsheet/blue, + /obj/item/bedsheet/green, + /obj/item/bedsheet/orange, + /obj/item/bedsheet/purple, + /obj/item/bedsheet/red, + /obj/item/bedsheet/yellow, + /obj/item/bedsheet/brown, + /obj/item/bedsheet/black, + /obj/item/bedsheet/rainbow, + ) + crate_name = "colored bedsheet crate" + +/datum/supply_pack/misc/candles + name = "Candle Crate" + desc = "Set up a romantic dinner or host a séance with these extra candles and crayons." + cost = CARGO_CRATE_VALUE * 1.5 + contains = list( + /obj/item/storage/fancy/candle_box, + /obj/item/storage/fancy/candle_box, + /obj/item/storage/box/matches, + ) + crate_name = "candle crate" + +/datum/supply_pack/misc/vanguard_surplus + name = "Expeditionary Corps Surplus" + desc = "Contains an assortment of surplus equipment from the now-defunct Vanguard Expeditionary Corps." + cost = CARGO_CRATE_VALUE * 19 + contains = list( + /obj/item/storage/box/expeditionary_survival, + /obj/item/melee/tomahawk, + /obj/item/storage/backpack/duffelbag/expeditionary_corps, + /obj/item/clothing/gloves/color/black/expeditionary_corps, + /obj/item/clothing/head/helmet/expeditionary_corps, + /obj/item/clothing/suit/armor/vest/expeditionary_corps, + /obj/item/storage/belt/military/expeditionary_corps, + /obj/item/clothing/under/rank/expeditionary_corps, + /obj/item/clothing/shoes/combat/expeditionary_corps, + /obj/item/modular_computer/pda/expeditionary_corps, + /obj/item/knife/combat/marksman, + ) + /// How many of the contains to put in the crate + var/num_contained = 3 + +/datum/supply_pack/misc/vanguard_surplus/fill(obj/structure/closet/crate/filled_crate) + var/list/contain_copy = contains.Copy() + for(var/i in 1 to num_contained) + var/item = pick_n_take(contain_copy) + new item(filled_crate) + +/datum/supply_pack/misc/gravity_harness + name = "Gravity Suspension Harness" + desc = "A back-mounted suspensor harness powered by cells, designed by Deep Spacer tribes to either nullify or amplify gravity. \ + While it's a pretty cheap bootleg of the personal gravitic engines used by the Skrell, this one's been fitted with straps and a basic storage module." + cost = CARGO_CRATE_VALUE * 6 // 1200 credits + contains = list(/obj/item/gravity_harness) + +/* +* FOOD +*/ + +/datum/supply_pack/organic/combomeal + name = "Burger Combo Crate" + desc = "We value our customers at the Greasy Griddle, so much so that we're willing to deliver -just for you.- Contains two combo meals, consisting of a Burger, Fries, and pack of chicken nuggets!" + cost = CARGO_CRATE_VALUE * 5 + contains = list( + /obj/item/food/burger/cheese, + /obj/item/food/burger/cheese, + /obj/item/food/fries, + /obj/item/food/fries, + /obj/item/storage/fancy/nugget_box, + /obj/item/storage/fancy/nugget_box, + ) + crate_name = "burger-n-nuggs combo meal" + crate_type = /obj/structure/closet/crate/wooden + +/datum/supply_pack/organic/fiestatortilla + name = "Fiesta Crate" + desc = "Spice up the kitchen with this fiesta themed food order! Contains 8 tortilla based food items and some hot-sauce." + cost = CARGO_CRATE_VALUE * 4.5 + contains = list( + /obj/item/food/taco, + /obj/item/food/taco, + /obj/item/food/taco/plain, + /obj/item/food/taco/plain, + /obj/item/food/enchiladas, + /obj/item/food/enchiladas, + /obj/item/food/carneburrito, + /obj/item/food/cheesyburrito, + /obj/item/reagent_containers/cup/bottle/capsaicin, + ) + crate_name = "fiesta crate" + +/datum/supply_pack/organic/fakemeat + name = "Meat Crate 'Synthetic'" + desc = "Run outta meat already? Keep the lizards content with this freezer filled with cruelty-free and chemically compounded meat! Contains 12 slabs of meat product, and 4 slabs of *carp*." + cost = CARGO_CRATE_VALUE * 2.25 + contains = list( + /obj/item/food/meat/slab/meatproduct, + /obj/item/food/meat/slab/meatproduct, + /obj/item/food/meat/slab/meatproduct, + /obj/item/food/meat/slab/meatproduct, + /obj/item/food/meat/slab/meatproduct, + /obj/item/food/meat/slab/meatproduct, + /obj/item/food/meat/slab/meatproduct, + /obj/item/food/meat/slab/meatproduct, + /obj/item/food/meat/slab/meatproduct, + /obj/item/food/meat/slab/meatproduct, + /obj/item/food/meat/slab/meatproduct, + /obj/item/food/meat/slab/meatproduct, + /obj/item/food/fishmeat/carp/imitation, + /obj/item/food/fishmeat/carp/imitation, + /obj/item/food/fishmeat/carp/imitation, + /obj/item/food/fishmeat/carp/imitation, + ) + crate_name = "meaty crate" + crate_type = /obj/structure/closet/crate/freezer + +/datum/supply_pack/organic/mixedboxes + name = "Mixed Ingredient Boxes" + desc = "Get overwhelmed with inspiration by ordering these boxes of surprise ingredients! Get four boxes filled with an assortment of products!" + cost = CARGO_CRATE_VALUE * 2 + contains = list( + /obj/item/storage/box/ingredients/wildcard, + /obj/item/storage/box/ingredients/wildcard, + /obj/item/storage/box/ingredients/wildcard, + /obj/item/storage/box/ingredients/wildcard, + ) + crate_name = "wildcard food crate" + crate_type = /obj/structure/closet/crate/freezer + +/datum/supply_pack/organic/fcsurplus + name = "Fine Cuisine Assortment Value Pack" + desc = "Chef slop boring? Have high-maintenance crewmembers that with wings? Maybe you just want to revel in the sinful delight that are Cheese Curds? The Finest of our trade union has made the pack for you, containing a mix of fine oils, vinegar, and exceptionally rare ingredients." + cost = CARGO_CRATE_VALUE * 5 + contains = list( + /obj/item/reagent_containers/condiment/olive_oil, + /obj/item/reagent_containers/condiment/olive_oil, + /obj/item/reagent_containers/condiment/vinegar, + /obj/item/reagent_containers/condiment/vinegar, + /obj/item/food/canned/tomatoes, + /obj/item/food/canned/tomatoes, + /obj/item/food/canned/pine_nuts, + /obj/item/food/canned/pine_nuts, + /obj/item/food/canned/jellyfish, + /obj/item/food/canned/desert_snails, + /obj/item/food/canned/larvae, + /obj/item/food/moonfish_eggs, + ) + crate_name = "fine cuisine assortment pack" + crate_type = /obj/structure/closet/crate/freezer + +/datum/supply_pack/organic/qualityoilbulk + name = "Quality Oil Bulk Pack" + desc = "Normal cooking oil not cutting it? Chef throw all the quality stuff in the frier because they thought it was funny? Well, We got you covered, Introducing a bulk pack of Ten (10) bottles of our finest oils, blended for the perfect taste in cold recipes, and a resistance for going acrid when cooking." + cost = CARGO_CRATE_VALUE * 9 + contains = list( + /obj/item/reagent_containers/condiment/olive_oil, + /obj/item/reagent_containers/condiment/olive_oil, + /obj/item/reagent_containers/condiment/olive_oil, + /obj/item/reagent_containers/condiment/olive_oil, + /obj/item/reagent_containers/condiment/olive_oil, + /obj/item/reagent_containers/condiment/olive_oil, + /obj/item/reagent_containers/condiment/olive_oil, + /obj/item/reagent_containers/condiment/olive_oil, + /obj/item/reagent_containers/condiment/olive_oil, + /obj/item/reagent_containers/condiment/olive_oil, + ) + crate_name = "bulk quality oil pack" + crate_type = /obj/structure/closet/crate/freezer + +/datum/supply_pack/organic/vinegarbulk + name = "Vinegar Bulk Pack" + desc = "Mothic Cuisine night? The winged fellows in port? Well, We'll have you cooking in no time. Refined from several rich wines and cultivated for just the right bite, This pack Ten (10) Bottles of vinegar for the perfect dressings and sauces." + cost = CARGO_CRATE_VALUE * 4 + contains = list( + /obj/item/reagent_containers/condiment/vinegar, + /obj/item/reagent_containers/condiment/vinegar, + /obj/item/reagent_containers/condiment/vinegar, + /obj/item/reagent_containers/condiment/vinegar, + /obj/item/reagent_containers/condiment/vinegar, + /obj/item/reagent_containers/condiment/vinegar, + /obj/item/reagent_containers/condiment/vinegar, + /obj/item/reagent_containers/condiment/vinegar, + /obj/item/reagent_containers/condiment/vinegar, + /obj/item/reagent_containers/condiment/vinegar, + ) + crate_name = "bulk vinegar pack" + crate_type = /obj/structure/closet/crate/freezer + +/datum/supply_pack/organic/bulkcanmoff + name = "Bulk Mothic Canned Goods" + desc = "Trying your hand at pestos and sauces? Cant just grow the stuff and can it yourself? Well, No matters, No worries, We here have you covered with Five (5) cans of tomatoes and pine nuts to help care for your winged friends." + cost = CARGO_CRATE_VALUE * 3 + contains = list( + /obj/item/food/canned/tomatoes, + /obj/item/food/canned/tomatoes, + /obj/item/food/canned/tomatoes, + /obj/item/food/canned/tomatoes, + /obj/item/food/canned/tomatoes, + /obj/item/food/canned/pine_nuts, + /obj/item/food/canned/pine_nuts, + /obj/item/food/canned/pine_nuts, + /obj/item/food/canned/pine_nuts, + /obj/item/food/canned/pine_nuts, + ) + crate_name = "bulk moffic pack" + crate_type = /obj/structure/closet/crate/freezer + +/datum/supply_pack/organic/bulkcanliz + name = "Bulk Lizard Goods" + desc = "Having some devious tastes? One of your scalie friends wanting something that isn't fried mystery meat? Well you're just one order away from from the perfect pleaser. Containing Three (3) Cans of our finest-sourced canned jellyfish, snails and bee larvae, An addition of Three (3) packs of cruelty free Moonfish eggs might get their hearts." + cost = CARGO_CRATE_VALUE * 3.5 + contains = list( + /obj/item/food/canned/jellyfish, + /obj/item/food/canned/jellyfish, + /obj/item/food/canned/jellyfish, + /obj/item/food/canned/desert_snails, + /obj/item/food/canned/desert_snails, + /obj/item/food/canned/desert_snails, + /obj/item/food/moonfish_eggs, + /obj/item/food/moonfish_eggs, + /obj/item/food/moonfish_eggs, + /obj/item/food/canned/larvae, + /obj/item/food/canned/larvae, + /obj/item/food/canned/larvae, + ) + crate_name = "bulk lizard pack" + crate_type = /obj/structure/closet/crate/freezer + +/* +* Service +*/ + +/datum/supply_pack/service/buildabar + name = "Build a Bar Crate" + desc = "Looking to set up your own little safe haven? Get a jump-start on it with this handy kit. Contains circuitboards for bar equipment, some parts, and some basic bartending supplies. (Glass not included)" + cost = CARGO_CRATE_VALUE * 4 + contains = list( + /obj/item/storage/box/drinkingglasses, + /obj/item/storage/box/drinkingglasses, + /obj/item/storage/part_replacer/cargo, + /obj/item/stack/sheet/iron/ten, + /obj/item/stack/sheet/iron/five, + /obj/item/stock_parts/cell/high, + /obj/item/stock_parts/cell/high, + /obj/item/stack/cable_coil, + /obj/item/book/manual/wiki/barman_recipes, + /obj/item/reagent_containers/cup/glass/shaker, + /obj/item/circuitboard/machine/chem_dispenser/drinks/beer, + /obj/item/circuitboard/machine/chem_dispenser/drinks, + /obj/item/circuitboard/machine/dish_drive, + ) + crate_name = "build a bar crate" + +/datum/supply_pack/service/hydrohelper + name = "Hydro-Helper Circuit Pack" + desc = "Botany being lazy with something? Being refused circuit boards? grow your only little garden with these three boards. (seeds and parts not included)" + cost = CARGO_CRATE_VALUE * 5 + contains = list( + /obj/item/circuitboard/machine/hydroponics, + /obj/item/circuitboard/machine/hydroponics, + /obj/item/circuitboard/machine/hydroponics, + ) + crate_name = "garden crate" + crate_type = /obj/structure/closet/crate/hydroponics + +/datum/supply_pack/service/janitor/janpimp + name = "Custodial Cruiser" + desc = "Clown steal your ride? Assistant lock it in the dorms? Order a new one and get back to cleaning in style!" + cost = CARGO_CRATE_VALUE * 4 + access = ACCESS_JANITOR + contains = list( + /obj/vehicle/ridden/janicart, + /obj/item/key/janitor, + ) + crate_name = "janitor ride crate" + crate_type = /obj/structure/closet/crate/large + +/datum/supply_pack/service/janitor/janpimpkey + name = "Cruiser Keys" + desc = "Replacement Keys for the Custodial Cruiser." + cost = CARGO_CRATE_VALUE * 1.5 + access = ACCESS_JANITOR + contains = list(/obj/item/key/janitor) + crate_name = "key crate" + crate_type = /obj/structure/closet/crate/wooden + +/datum/supply_pack/service/janitor/janpremium + name = "Janitor Supplies (Premium)" + desc = "For when the mess is too big for a mop to handle. Contains, several cleaning grenades, some spare bottles of ammonia, two bars of soap, and an MCE (or Massive Cleaning Explosive)." + cost = CARGO_CRATE_VALUE * 6 + contains = list( + /obj/item/soap/nanotrasen, + /obj/item/soap/nanotrasen, + /obj/item/grenade/clusterbuster/cleaner, + /obj/item/grenade/chem_grenade/cleaner, + /obj/item/grenade/chem_grenade/cleaner, + /obj/item/grenade/chem_grenade/cleaner, + /obj/item/reagent_containers/cup/bottle/ammonia, + /obj/item/reagent_containers/cup/bottle/ammonia, + /obj/item/reagent_containers/cup/bottle/ammonia, + ) + crate_name = "premium janitorial crate" + +/datum/supply_pack/service/lamplight + name = "Lamp Light Crate" + desc = "Dealing with brownouts? Lights out across the station? Brighten things up with a pack of four lamps and flashlights." + cost = CARGO_CRATE_VALUE * 1.75 + contains = list( + /obj/item/flashlight/lamp, + /obj/item/flashlight/lamp, + /obj/item/flashlight/lamp/green, + /obj/item/flashlight/lamp/green, + /obj/item/flashlight, + /obj/item/flashlight, + /obj/item/flashlight, + /obj/item/flashlight, + ) + crate_name = "lamp light crate" + +/datum/supply_pack/service/medieval + name = "Authentic Renaissance Faire Crate" + desc = "Contains two authentic suits of armor, swords, and two bows and cuirass' for the cowards hiding in the back." + cost = CARGO_CRATE_VALUE * 30 + contraband = TRUE + contains = list( + /obj/item/clothing/suit/armor/riot/knight/larp/red, + /obj/item/clothing/gloves/plate/larp/red, + /obj/item/clothing/head/helmet/knight/red, + /obj/item/clothing/shoes/plate/larp/red, + /obj/item/claymore/weak/weaker, + /obj/item/clothing/shoes/plate/larp/blue, + /obj/item/clothing/suit/armor/riot/knight/larp/blue, + /obj/item/clothing/gloves/plate/larp/blue, + /obj/item/clothing/head/helmet/knight/blue, + /obj/item/claymore/weak/weaker, + /obj/item/clothing/suit/armor/vest/cuirass/larp, + /obj/item/clothing/suit/armor/vest/cuirass/larp, + /obj/item/gun/ballistic/bow/longbow, + /obj/item/gun/ballistic/bow/longbow, + /obj/item/storage/bag/quiver, + /obj/item/storage/bag/quiver, + /obj/item/clothing/head/helmet/knight/red, + /obj/item/clothing/head/helmet/knight/blue, + /obj/item/food/bread/plain, + ) + crate_name = "vintage crate" + +/datum/supply_pack/organic/lavalandsamples + name = "Planetary Flora Samples" + desc = "A box of samples taken from the surface of Lavaland. Requires Hydroponics access to open." + cost = CARGO_CRATE_VALUE * 2 + access_view = ACCESS_HYDROPONICS + contains = list( + /obj/item/seeds/lavaland/polypore, + /obj/item/seeds/lavaland/porcini, + /obj/item/seeds/lavaland/inocybe, + /obj/item/seeds/lavaland/ember, + /obj/item/seeds/lavaland/seraka, + /obj/item/seeds/lavaland/fireblossom, + /obj/item/seeds/lavaland/cactus, + ) + crate_name = "planetary seeds crate" + crate_type = /obj/structure/closet/crate/hydroponics + +/datum/supply_pack/service/MODsuit_cargo + name = "Cargo Loader MODsuit Crate" + desc = "Contains a single quad-armed MODsuit, built to standard cargo specifications." + cost = CARGO_CRATE_VALUE * 13 + access_view = ACCESS_CARGO + contains = list(/obj/item/mod/control/pre_equipped/loader) + crate_name = "cargo MODsuit crate" + +/datum/supply_pack/service/snowmobile + name = "Snowmobile kit" + desc = "Trapped on a frigid wasteland? Need to get around fast? Purchase a refurbished snowmobile with a FREE 10 microsecond warranty!" + cost = CARGO_CRATE_VALUE * 7.5 + contains = list( + /obj/vehicle/ridden/atv/snowmobile = 1, + /obj/item/key/atv = 1, + /obj/item/clothing/mask/gas/explorer = 1, + ) + crate_name = "snowmobile kit" + crate_type = /obj/structure/closet/crate/large + +/* +* MATERIALS AND SHEETS +*/ + +/datum/supply_pack/materials/rawlumber + name = "20 Towercap Logs" + desc = "Set up a cookout or a classy beachside bonfire with these terrific towercaps!" + cost = CARGO_CRATE_VALUE * 3.5 + contains = list(/obj/item/grown/log) + crate_name = "lumber crate" + +/datum/supply_pack/materials/rawlumber/generate() + . = ..() + for(var/i in 1 to 19) + new /obj/item/grown/log(.) + +/datum/supply_pack/imports/cin_surplus + name = "CIN Military Surplus Crate" + desc = "A collection of surplus equipment sourced from the Coalition of Independent Nations' military stockpiles. Likely to contain old and outdated equipment, as is the nature of surplus." + contraband = TRUE + cost = CARGO_CRATE_VALUE * 9 + contains = list( + /obj/item/storage/box/colonial_rations = 1, + /obj/item/storage/toolbox/ammobox/strilka310 = 1, + /obj/item/storage/toolbox/ammobox/strilka310/surplus = 1, + /obj/item/storage/toolbox/maint_kit = 1, + /obj/item/storage/toolbox/guncase/soviet/sakhno = 2, + /obj/item/ammo_box/strilka310 = 1, + /obj/item/clothing/suit/armor/vest/cin_surplus_vest = 1, + /obj/item/clothing/head/helmet/cin_surplus_helmet/random_color = 1, + /obj/item/storage/backpack/industrial/cin_surplus/random_color = 1, + /obj/item/storage/belt/military/cin_surplus/random_color = 1, + /obj/item/clothing/gloves/tackler/combat = 1, + /obj/item/clothing/under/syndicate/rus_army/cin_surplus/random_color = 1, + /obj/item/clothing/shoes/jackboots = 1, + /obj/item/clothing/mask/gas/hecu2 = 1, + /obj/item/clothing/mask/balaclavaadjust = 1, + ) + +/datum/supply_pack/imports/cin_surplus/fill(obj/structure/closet/crate/we_are_filling_this_crate) + for(var/i in 1 to 10) + var/item = pick_weight(contains) + new item(we_are_filling_this_crate) + +/* +* VENDING RESTOCKS +*/ + +/datum/supply_pack/vending/dorms + name = "LustWish Supply Crate" + desc = "This crate contains a single refill for the LustWish vendor." + cost = CARGO_CRATE_VALUE * 2 + contains = list(/obj/item/vending_refill/lustwish) + +/datum/supply_pack/vending/barber + name = "Fab-O-Vend Supply Crate" + desc = "Contains a single restock for the Fab-O-Vend, great for those who are indecisive about their looks." + cost = CARGO_CRATE_VALUE * 3 + contains = list(/obj/item/vending_refill/barbervend) diff --git a/modular_skyrat/modules/cargo/icons/punchcard.dmi b/modular_nova/modules/cargo/icons/punchcard.dmi similarity index 100% rename from modular_skyrat/modules/cargo/icons/punchcard.dmi rename to modular_nova/modules/cargo/icons/punchcard.dmi diff --git a/modular_nova/modules/cargo/readme.md b/modular_nova/modules/cargo/readme.md new file mode 100644 index 00000000000000..f3c626ab43e4e6 --- /dev/null +++ b/modular_nova/modules/cargo/readme.md @@ -0,0 +1,30 @@ +https://github.com/Skyrat-SS13/Skyrat-tg/pull/2003 + +## Title: Adds a bunch of crates to cargo. + +MODULE ID: N/A + +### Description: + +Adds more stuff to cargo. + +### TG Proc/File Changes: + +- N/A + +### Defines: + +- N/A + +### Master file additions + +- `modular_nova/master_files/code/modules/cargo/packs/security.dm`: `var/special` + +### Included files that are not contained in this module: + +- N/A + +### Credits: + +Porting some of my stuff from the old base. - Owai-Seek +Citadel Station, and Ghommie, for some of the packs that aren't mine. diff --git a/modular_skyrat/modules/cargo_teleporter/code/cargo_teleporter.dm b/modular_nova/modules/cargo_teleporter/code/cargo_teleporter.dm similarity index 90% rename from modular_skyrat/modules/cargo_teleporter/code/cargo_teleporter.dm rename to modular_nova/modules/cargo_teleporter/code/cargo_teleporter.dm index 4c0c96f0491cef..36abc7e1acd54b 100644 --- a/modular_skyrat/modules/cargo_teleporter/code/cargo_teleporter.dm +++ b/modular_nova/modules/cargo_teleporter/code/cargo_teleporter.dm @@ -3,7 +3,7 @@ GLOBAL_LIST_EMPTY(cargo_marks) /obj/item/cargo_teleporter name = "cargo teleporter" desc = "An item that can set down a set number of markers, allowing them to teleport items within a tile to the set markers." - icon = 'modular_skyrat/modules/cargo_teleporter/icons/cargo_teleporter.dmi' + icon = 'modular_nova/modules/cargo_teleporter/icons/cargo_teleporter.dmi' icon_state = "cargo_tele" ///the list of markers spawned by this item var/list/marker_children = list() @@ -74,8 +74,14 @@ GLOBAL_LIST_EMPTY(cargo_marks) id = "cargotele" build_type = PROTOLATHE | AWAY_LATHE build_path = /obj/item/cargo_teleporter - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 5, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 5) - category = list(RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_CARGO) + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/uranium = HALF_SHEET_MATERIAL_AMOUNT, + ) + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_CARGO, + ) departmental_flags = DEPARTMENT_BITFLAG_CARGO /datum/techweb_node/cargo_teleporter @@ -91,7 +97,7 @@ GLOBAL_LIST_EMPTY(cargo_marks) /obj/effect/decal/cleanable/cargo_mark name = "cargo mark" desc = "A mark left behind by a cargo teleporter, which allows targeted teleportation. Can be removed by the cargo teleporter." - icon = 'modular_skyrat/modules/cargo_teleporter/icons/cargo_teleporter.dmi' + icon = 'modular_nova/modules/cargo_teleporter/icons/cargo_teleporter.dmi' icon_state = "marker" ///the reference to the item that spawned the cargo mark var/obj/item/cargo_teleporter/parent_item diff --git a/modular_skyrat/modules/cargo_teleporter/icons/cargo_teleporter.dmi b/modular_nova/modules/cargo_teleporter/icons/cargo_teleporter.dmi similarity index 100% rename from modular_skyrat/modules/cargo_teleporter/icons/cargo_teleporter.dmi rename to modular_nova/modules/cargo_teleporter/icons/cargo_teleporter.dmi diff --git a/modular_skyrat/modules/cargo_teleporter/readme.md b/modular_nova/modules/cargo_teleporter/readme.md similarity index 100% rename from modular_skyrat/modules/cargo_teleporter/readme.md rename to modular_nova/modules/cargo_teleporter/readme.md diff --git a/modular_skyrat/modules/cell_component/code/cell_component.dm b/modular_nova/modules/cell_component/code/cell_component.dm similarity index 99% rename from modular_skyrat/modules/cell_component/code/cell_component.dm rename to modular_nova/modules/cell_component/code/cell_component.dm index 52357cd1ba87d7..75449eec48fc7f 100644 --- a/modular_skyrat/modules/cell_component/code/cell_component.dm +++ b/modular_nova/modules/cell_component/code/cell_component.dm @@ -86,7 +86,7 @@ component_cell_out_of_charge/component_cell_removed proc using loc where necessa UnregisterSignal(parent, COMSIG_CLICK_CTRL_SHIFT) UnregisterSignal(parent, COMSIG_ATOM_EXAMINE) -/datum/component/cell/Destroy(force, silent) +/datum/component/cell/Destroy(force) if(on_cell_removed) on_cell_removed = null if(inserted_cell) diff --git a/modular_skyrat/modules/cellguns/code/cellgun_cells.dm b/modular_nova/modules/cellguns/code/cellgun_cells.dm similarity index 96% rename from modular_skyrat/modules/cellguns/code/cellgun_cells.dm rename to modular_nova/modules/cellguns/code/cellgun_cells.dm index 842ed421405dbc..c4215e67db08df 100644 --- a/modular_skyrat/modules/cellguns/code/cellgun_cells.dm +++ b/modular_nova/modules/cellguns/code/cellgun_cells.dm @@ -1,7 +1,7 @@ /obj/item/weaponcell name = "default weaponcell" desc = "used to add ammo types to guns" - icon = 'modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/medicells.dmi' + icon = 'modular_nova/modules/cellguns/icons/obj/guns/mediguns/medicells.dmi' icon_state = "Oxy1" w_class = WEIGHT_CLASS_SMALL /// The ammo type that is added by default when inserting a cell. diff --git a/modular_skyrat/modules/cellguns/code/cellguns.dm b/modular_nova/modules/cellguns/code/cellguns.dm similarity index 100% rename from modular_skyrat/modules/cellguns/code/cellguns.dm rename to modular_nova/modules/cellguns/code/cellguns.dm diff --git a/modular_skyrat/modules/cellguns/code/medigun_cells.dm b/modular_nova/modules/cellguns/code/medigun_cells.dm similarity index 96% rename from modular_skyrat/modules/cellguns/code/medigun_cells.dm rename to modular_nova/modules/cellguns/code/medigun_cells.dm index f0e9f877515ae7..1968b167cdcb5a 100644 --- a/modular_skyrat/modules/cellguns/code/medigun_cells.dm +++ b/modular_nova/modules/cellguns/code/medigun_cells.dm @@ -39,14 +39,6 @@ if(type_damage >= 50 && type_damage < 100) target.adjust_disgust(1.5) -/// Applies clone damage by thresholds -/obj/projectile/energy/medical/proc/DamageClone(mob/living/target, type_damage, amount_healed, max_clone) - if(type_damage >= 50 && type_damage < 100 ) - target.adjustCloneLoss((amount_healed * (max_clone * 0.5))) - - if(type_damage >= 100) - target.adjustCloneLoss((amount_healed * max_clone)) - /// Checks to see if the patient is living. /obj/projectile/energy/medical/proc/IsLivingHuman(mob/living/target) if(!istype(target, /mob/living/carbon/human)) @@ -75,7 +67,6 @@ DamageDisgust(target, target.getBruteLoss()) target.adjust_disgust(base_disgust) - DamageClone(target, target.getBruteLoss(), amount_healed, max_clone) target.adjustBruteLoss(-amount_healed) /// Heals Burn swithout safety @@ -85,7 +76,6 @@ DamageDisgust(target, target.getFireLoss()) target.adjust_disgust(base_disgust) - DamageClone(target, target.getFireLoss(), amount_healed, max_clone) target.adjustFireLoss(-amount_healed) /// Heals Brute with safety @@ -416,7 +406,7 @@ return var/mob/living/carbon/wearer = target - var/obj/item/clothing/gown = new /obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown/hardlight + var/obj/item/clothing/gown = new /obj/item/clothing/suit/toggle/labcoat/hospitalgown/hardlight if(wearer.equip_to_slot_if_possible(gown, ITEM_SLOT_OCLOTHING, 1, 1, 1)) wearer.visible_message(span_notice("The [gown] covers [wearer] body"), span_notice("The [gown] wraps around your body, covering you")) @@ -499,12 +489,12 @@ sparks.start() //Objects Used by medicells. -/obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown/hardlight +/obj/item/clothing/suit/toggle/labcoat/hospitalgown/hardlight name = "hardlight hospital gown" desc = "A hospital gown made out of hardlight - you can barely feel it on your body, especially with all the anesthetics." - icon_state = "lgown" + greyscale_colors = "#B2D3CA#B2D3CA#B2D3CA#B2D3CA" -/obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown/hardlight/dropped(mob/user) +/obj/item/clothing/suit/toggle/labcoat/hospitalgown/hardlight/dropped(mob/user) . = ..() var/mob/living/carbon/wearer = user @@ -518,7 +508,7 @@ name = "salve globule" desc = "A ball of regenerative synthetic plant matter, contained within a soft hardlight field." embedding = list("embed_chance" = 100, ignore_throwspeed_threshold = TRUE, "pain_mult" = 0, "jostle_pain_mult" = 0, "fall_chance" = 0) - icon = 'modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/misc.dmi' + icon = 'modular_nova/modules/cellguns/icons/obj/guns/mediguns/misc.dmi' icon_state = "globule" heals_left = 40 //This means it'll be heaing 15 damage per type max. @@ -544,11 +534,11 @@ /obj/structure/bed/medical/medigun name = "hardlight medical bed" desc = "A medical bed made out of Hardlight" - icon = 'modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/misc.dmi' + icon = 'modular_nova/modules/cellguns/icons/obj/guns/mediguns/misc.dmi' icon_state = "hardlight_down" base_icon_state = "hardlight" max_integrity = 1 - flags_1 = NODECONSTRUCT_1 //Made from nothing, can't deconstruct + obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION //Made from nothing, can't deconstruct build_stack_type = null //It would not be good if people could use this to farm materials. var/deploy_time = 20 SECONDS //How long the roller beds lasts for without someone buckled to it. diff --git a/modular_nova/modules/cellguns/code/medigun_research.dm b/modular_nova/modules/cellguns/code/medigun_research.dm new file mode 100644 index 00000000000000..f7e6030cbbdfae --- /dev/null +++ b/modular_nova/modules/cellguns/code/medigun_research.dm @@ -0,0 +1,244 @@ +#define RND_SUBCATEGORY_WEAPONS_MEDICALAMMO "/Medical Ammunition" +#define RND_MEDICALAMMO_UTILITY " (Utility)" + +//Upgrade Kit// +/datum/design/medigun_speedkit + name = "VeyMedical CWM-479 upgrade kit" + desc = "An upgrade kit for the VeyMedical CWM-479 to have a higher-capacity internal cell, with increased recharger throughput." + id = "medigun_speed" + build_type = PROTOLATHE | AWAY_LATHE + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + materials = list( + /datum/material/uranium = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/plasma = SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + ) + category = list( + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_EQUIPMENT_MEDICAL, + ) + build_path = /obj/item/device/custom_kit/medigun_fastcharge + +/datum/design/medicell + name = "Base Medicell Design" + desc = "Hey, you shouldn't see this. Like... at all." + build_type = PROTOLATHE | AWAY_LATHE + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + category = list( + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_MEDICALAMMO, + ) + +//Tier 2 Medicells// + +/datum/design/medicell/brute2 + name = "Brute II Medicell" + desc = "Gives cell-loaded mediguns improved brute damage healing functionality." + id = "brute2medicell" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, + ) + build_path = /obj/item/weaponcell/medical/brute/tier_2 + +/datum/design/medicell/burn2 + name = "Burn II Medicell" + desc = "Gives cell-loaded mediguns improved burn damage healing functionality." + id = "burn2medicell" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, + ) + build_path = /obj/item/weaponcell/medical/burn/tier_2 + +/datum/design/medicell/toxin2 + name = "Toxin II Medicell" + desc = "Gives cell-loaded mediguns improved toxin damage healing functionality." + id = "toxin2medicell" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, + ) + build_path = /obj/item/weaponcell/medical/toxin/tier_2 + +/datum/design/medicell/oxy2 + name = "Oxygen II Medicell" + desc = "Gives cell-loaded mediguns improved oxygen deprivation healing functionality." + id = "oxy2medicell" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, + ) + build_path = /obj/item/weaponcell/medical/oxygen/tier_2 + +//Tier 3 Medicells// + +/datum/design/medicell/brute3 + name = "Brute III Medicell" + desc = "Gives cell-loaded mediguns advanced brute damage healing functionality." + id = "brute3medicell" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3, + ) + build_path = /obj/item/weaponcell/medical/brute/tier_3 + +/datum/design/medicell/burn3 + name = "Burn III Medicell" + desc = "Gives cell-loaded mediguns advanced burn damage healing functionality." + id = "burn3medicell" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3, + ) + build_path = /obj/item/weaponcell/medical/burn/tier_3 + +/datum/design/medicell/toxin3 + name = "Toxin III Medicell" + desc = "Gives cell-loaded mediguns advanced toxin damage healing functionality." + id = "toxin3medicell" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3, + ) + build_path = /obj/item/weaponcell/medical/toxin/tier_3 + +/datum/design/medicell/oxy3 + name = "Oxygen III Medicell" + desc = "Gives cell-loaded mediguns advanced oxygen deprivation healing functionality." + id = "oxy3medicell" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3, + ) + build_path = /obj/item/weaponcell/medical/oxygen/tier_3 + +//Utility Medicells + +/datum/design/medicell/utility + name = "Utility Medicell" + category = list( + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_MEDICALAMMO + RND_MEDICALAMMO_UTILITY, + ) + +/datum/design/medicell/utility/clot + name = "Clotting Medicell" + desc = "Gives cell-loaded mediguns projectile-based coagulation functionality." + id = "clotmedicell" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plastic = SHEET_MATERIAL_AMOUNT, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/weaponcell/medical/utility/clotting + +/datum/design/medicell/utility/temp + name = "Temperature Adjustment Medicell" + desc = "Gives cell loaded-mediguns projectile-based body temperature regulation functionality." + id = "tempmedicell" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plastic = SHEET_MATERIAL_AMOUNT, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/weaponcell/medical/utility/temperature + +/datum/design/medicell/utility/gown + name = "Hardlight Gown Medicell" + desc = "Gives cell-loaded mediguns projectile-based hardlight gown deployment functionality." + id = "gownmedicell" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plastic = SHEET_MATERIAL_AMOUNT, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/weaponcell/medical/utility/hardlight_gown + +/datum/design/medicell/utility/bed + name = "Hardlight Roller Bed Medicell" + desc = "Gives cell-loaded mediguns projectile-based hardlight roller bed deployment functionality. Best used on already-horizontal patients." + id = "bedmedicell" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plastic = SHEET_MATERIAL_AMOUNT, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3, + ) + build_path = /obj/item/weaponcell/medical/utility/bed + +/datum/design/medicell/utility/salve + name = "Empty Salve Medicell" + desc = "An incomplete medicell that requires a leaf of aloe to fully realize its potential to provide projectile-embedding-based healing-over-time functionality." + id = "salvemedicell" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plastic = SHEET_MATERIAL_AMOUNT, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/device/custom_kit/empty_cell + +/datum/design/medicell/utility/body + name = "Empty Body Teleporter Medicell" + desc = "An incomplete medicell that requires a bluespace slime extract in order to provide projectile-based corpse retrieval functionality." + id = "bodymedicell" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plastic = SHEET_MATERIAL_AMOUNT, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/bluespace = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/device/custom_kit/empty_cell/body_teleporter + +/datum/design/medicell/utility/relocation + name = "Oppressive Force Relocation Medicell" + desc = "Gives cell-loaded mediguns projectile-based rubbernecker relocation functionality, by dumping them into the Medbay lobby via eigenstate manipulation. Only works in Medbay when fired by authorized users." + id = "relocatemedicell" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plastic = SHEET_MATERIAL_AMOUNT, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/bluespace = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/device/custom_kit/empty_cell/relocator diff --git a/modular_skyrat/modules/cellguns/code/mediguns.dm b/modular_nova/modules/cellguns/code/mediguns.dm similarity index 95% rename from modular_skyrat/modules/cellguns/code/mediguns.dm rename to modular_nova/modules/cellguns/code/mediguns.dm index 3a79fce401b833..1dce3b37995ebb 100644 --- a/modular_skyrat/modules/cellguns/code/mediguns.dm +++ b/modular_nova/modules/cellguns/code/mediguns.dm @@ -2,7 +2,7 @@ /obj/item/gun/energy/cell_loaded/medigun name = "medigun" desc = "This is my smart gun, it won't hurt anyone friendly, infact it will make them heal! Please tell github if you somehow manage to get this gun." - icon = 'modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/projectile.dmi' + icon = 'modular_nova/modules/cellguns/icons/obj/guns/mediguns/projectile.dmi' icon_state = "medigun" inhand_icon_state = "chronogun" // Fits best with how the medigun looks, might be changed in the future ammo_type = list(/obj/item/ammo_casing/energy/medical) // The default option that heals oxygen @@ -29,7 +29,7 @@ /obj/item/gun/energy/cell_loaded/medigun/upgraded/Initialize(mapload) . = ..() - var/mutable_appearance/fastcharge_medigun = mutable_appearance('modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/projectile.dmi', "medigun_fastcharge") + var/mutable_appearance/fastcharge_medigun = mutable_appearance('modular_nova/modules/cellguns/icons/obj/guns/mediguns/projectile.dmi', "medigun_fastcharge") add_overlay(fastcharge_medigun) // CMO and CC MediGun @@ -43,7 +43,7 @@ /obj/item/gun/energy/cell_loaded/medigun/cmo/Initialize(mapload) . = ..() - var/mutable_appearance/cmo_medigun = mutable_appearance('modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/projectile.dmi', "medigun_cmo") + var/mutable_appearance/cmo_medigun = mutable_appearance('modular_nova/modules/cellguns/icons/obj/guns/mediguns/projectile.dmi', "medigun_cmo") add_overlay(cmo_medigun) // Medigun power cells @@ -81,7 +81,7 @@ // Medigun wiki book /obj/item/book/manual/wiki/mediguns name = "medigun operating manual" - icon = 'modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/misc.dmi' + icon = 'modular_nova/modules/cellguns/icons/obj/guns/mediguns/misc.dmi' icon_state = "manual" starting_author = "VeyMedical" starting_title = "Medigun Operating Manual" @@ -91,7 +91,7 @@ /obj/item/storage/briefcase/medicalgunset name = "medigun supply kit" desc = "A supply kit for the medigun." - icon = 'modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/misc.dmi' + icon = 'modular_nova/modules/cellguns/icons/obj/guns/mediguns/misc.dmi' icon_state = "case_standard" inhand_icon_state = "lockbox" lefthand_file = 'icons/mob/inhands/equipment/briefcase_lefthand.dmi' @@ -127,7 +127,7 @@ /obj/item/weaponcell/medical name = "default medicell" desc = "The standard oxygen cell, most guns come with this already installed." - icon = 'modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/medicells.dmi' + icon = 'modular_nova/modules/cellguns/icons/obj/guns/mediguns/medicells.dmi' icon_state = "Oxy1" w_class = WEIGHT_CLASS_SMALL ammo_type = /obj/item/ammo_casing/energy/medical // This is the ammo type that all mediguns come with. @@ -297,7 +297,7 @@ //Empty Medicell// /obj/item/device/custom_kit/empty_cell //Having the empty cell as an upgrade kit sounds jank, but it should work well. name = "empty salve medicell" - icon = 'modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/medicells.dmi' + icon = 'modular_nova/modules/cellguns/icons/obj/guns/mediguns/medicells.dmi' icon_state = "empty" desc = "An inactive salve medicell, use this on an aloe leaf to make this into a usable cell." from_obj = /obj/item/food/grown/aloe diff --git a/modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/medicells.dmi b/modular_nova/modules/cellguns/icons/obj/guns/mediguns/medicells.dmi similarity index 100% rename from modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/medicells.dmi rename to modular_nova/modules/cellguns/icons/obj/guns/mediguns/medicells.dmi diff --git a/modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/misc.dmi b/modular_nova/modules/cellguns/icons/obj/guns/mediguns/misc.dmi similarity index 100% rename from modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/misc.dmi rename to modular_nova/modules/cellguns/icons/obj/guns/mediguns/misc.dmi diff --git a/modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/projectile.dmi b/modular_nova/modules/cellguns/icons/obj/guns/mediguns/projectile.dmi similarity index 100% rename from modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/projectile.dmi rename to modular_nova/modules/cellguns/icons/obj/guns/mediguns/projectile.dmi diff --git a/modular_skyrat/modules/cellguns/readme.md b/modular_nova/modules/cellguns/readme.md similarity index 100% rename from modular_skyrat/modules/cellguns/readme.md rename to modular_nova/modules/cellguns/readme.md diff --git a/modular_skyrat/modules/central_command_module/code/computers/command_report_computer.dm b/modular_nova/modules/central_command_module/code/computers/command_report_computer.dm similarity index 94% rename from modular_skyrat/modules/central_command_module/code/computers/command_report_computer.dm rename to modular_nova/modules/central_command_module/code/computers/command_report_computer.dm index 2f8fcf901902f6..341576728e6caf 100644 --- a/modular_skyrat/modules/central_command_module/code/computers/command_report_computer.dm +++ b/modular_nova/modules/central_command_module/code/computers/command_report_computer.dm @@ -3,15 +3,15 @@ /obj/machinery/computer/centcom_announcement name = "fleet announcement console" - desc = "A console used for making priority Nanotrasen Command Reports." + desc = "A console used for making priority Symphionia Command Reports." icon_screen = "comm" icon_keyboard = "tech_key" req_access = list(ACCESS_CENT_CAPTAIN) circuit = /obj/item/circuitboard/computer/communications light_color = LIGHT_COLOR_BLUE - /// The name of central command that will accompany our report - var/command_name = "Nanotrasen Fleet Command Update" + /// The name of Conglomeration of Colonists that will accompany our report + var/command_name = "Symphionia Fleet Command Update" /// The actual contents of the report we're going to send. var/command_report_content /// The title of our report, if anything. diff --git a/modular_skyrat/modules/central_command_module/code/computers/ert_control_computer.dm b/modular_nova/modules/central_command_module/code/computers/ert_control_computer.dm similarity index 87% rename from modular_skyrat/modules/central_command_module/code/computers/ert_control_computer.dm rename to modular_nova/modules/central_command_module/code/computers/ert_control_computer.dm index a267111055364e..da8d84798f4712 100644 --- a/modular_skyrat/modules/central_command_module/code/computers/ert_control_computer.dm +++ b/modular_nova/modules/central_command_module/code/computers/ert_control_computer.dm @@ -1,7 +1,7 @@ /obj/machinery/computer/ert_control name = "fleet asset control console" - desc = "A console used for redeploying Nanotrasen Emergency Response assets." + desc = "A console used for redeploying Symphionia Emergency Response assets." icon_screen = "comm" icon_keyboard = "tech_key" req_access = list(ACCESS_CENT_CAPTAIN) diff --git a/modular_skyrat/modules/central_command_module/code/computers/station_goal_computer.dm b/modular_nova/modules/central_command_module/code/computers/station_goal_computer.dm similarity index 100% rename from modular_skyrat/modules/central_command_module/code/computers/station_goal_computer.dm rename to modular_nova/modules/central_command_module/code/computers/station_goal_computer.dm diff --git a/modular_skyrat/modules/central_command_module/code/obj/wall.dm b/modular_nova/modules/central_command_module/code/obj/wall.dm similarity index 100% rename from modular_skyrat/modules/central_command_module/code/obj/wall.dm rename to modular_nova/modules/central_command_module/code/obj/wall.dm diff --git a/modular_skyrat/modules/chadian/code/chadian.dm b/modular_nova/modules/chadian/code/chadian.dm similarity index 97% rename from modular_skyrat/modules/chadian/code/chadian.dm rename to modular_nova/modules/chadian/code/chadian.dm index fc1e1048235b24..f37ea8bd7940e1 100644 --- a/modular_skyrat/modules/chadian/code/chadian.dm +++ b/modular_nova/modules/chadian/code/chadian.dm @@ -3,7 +3,7 @@ #define RESTING_STATE_REST 2 /mob/living/basic/pet/dog/corgi/ian - icon = 'modular_skyrat/modules/chadian/icons/ian.dmi' + icon = 'modular_nova/modules/chadian/icons/ian.dmi' ai_controller = /datum/ai_controller/basic_controller/dog/corgi/chadian var/resting_state = 0 diff --git a/modular_skyrat/modules/chadian/icons/ian.dmi b/modular_nova/modules/chadian/icons/ian.dmi similarity index 100% rename from modular_skyrat/modules/chadian/icons/ian.dmi rename to modular_nova/modules/chadian/icons/ian.dmi diff --git a/modular_skyrat/modules/chaplain/code/mortis.dm b/modular_nova/modules/chaplain/code/mortis.dm similarity index 90% rename from modular_skyrat/modules/chaplain/code/mortis.dm rename to modular_nova/modules/chaplain/code/mortis.dm index 78738846050ffd..d75e226bbcc146 100644 --- a/modular_skyrat/modules/chaplain/code/mortis.dm +++ b/modular_nova/modules/chaplain/code/mortis.dm @@ -20,7 +20,7 @@ /obj/item/implant/mortis/proc/on_deathgasp(mob/source) SIGNAL_HANDLER - playsound(source.loc, 'modular_skyrat/modules/chaplain/sound/mortis.ogg', 50, 0) + playsound(source.loc, 'modular_nova/modules/chaplain/sound/mortis.ogg', 50, 0) /obj/item/implanter/mortis name = "implanter (MORTIS)" diff --git a/modular_skyrat/modules/chaplain/icons/holy_weapons.dmi b/modular_nova/modules/chaplain/icons/holy_weapons.dmi similarity index 100% rename from modular_skyrat/modules/chaplain/icons/holy_weapons.dmi rename to modular_nova/modules/chaplain/icons/holy_weapons.dmi diff --git a/modular_skyrat/modules/chaplain/sound/mortis.ogg b/modular_nova/modules/chaplain/sound/mortis.ogg similarity index 100% rename from modular_skyrat/modules/chaplain/sound/mortis.ogg rename to modular_nova/modules/chaplain/sound/mortis.ogg diff --git a/modular_nova/modules/chat_colors/code/chat_color.dm b/modular_nova/modules/chat_colors/code/chat_color.dm new file mode 100644 index 00000000000000..afbd6c61e6c506 --- /dev/null +++ b/modular_nova/modules/chat_colors/code/chat_color.dm @@ -0,0 +1,108 @@ +/datum/preference/color/chat_color + category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + priority = PREFERENCE_PRIORITY_NAME_MODIFICATIONS + savefile_identifier = PREFERENCE_CHARACTER + savefile_key = "ic_chat_color" + +/datum/preference/color/chat_color/apply_to_human(mob/living/carbon/human/target, value) + target.apply_preference_chat_color(value) + return + +/datum/preference/color/chat_color/deserialize(input, datum/preferences/preferences) + return process_chat_color(sanitize_hexcolor(input)) + +/datum/preference/color/chat_color/create_default_value() + return process_chat_color("#[random_color()]") + +/datum/preference/color/chat_color/serialize(input) + return process_chat_color(sanitize_hexcolor(input)) + +/mob/living/carbon/human/proc/apply_preference_chat_color(value) + if(isnull(value)) + return FALSE + + chat_color = process_chat_color(value, sat_shift = 1, lum_shift = 1) + chat_color_darkened = process_chat_color(value, sat_shift = 0.85, lum_shift = 0.85) + chat_color_name = name + return TRUE + +#define CHAT_COLOR_NORMAL 1 +#define CHAT_COLOR_DARKENED 2 + +/// Get the mob's chat color by looking up their name in the cached list, if no match is found default to colorize_string(). +/datum/chatmessage/proc/get_chat_color_string(name, darkened) + var/chat_color_strings = GLOB.chat_colors_by_mob_name[name] + if(chat_color_strings) + return darkened ? chat_color_strings[CHAT_COLOR_DARKENED] : chat_color_strings[CHAT_COLOR_NORMAL] + if(darkened) + return colorize_string(name, 0.85, 0.85) + + return colorize_string(name) + +#undef CHAT_COLOR_NORMAL +#undef CHAT_COLOR_DARKENED + +#define CM_COLOR_HUE 1 +#define CM_COLOR_SATURATION 2 +#define CM_COLOR_LUMINANCE 3 + +#define CM_COLOR_SAT_MAX 90 // 90% saturation is the default ceiling +#define CM_COLOR_LUM_MIN 40 // 40% luminosity is the default floor +#define CM_COLOR_LUM_MIN_GREY 35 // 35% luminosity for greys +#define CM_COLOR_LUM_MAX_DARK_RANGE 45 // 45% luminosity for dark blues/reds/violets + +#define CM_COLOR_HUE_RANGE_LOWER 180 +#define CM_COLOR_HUE_RANGE_UPPER 350 +#define CM_COLOR_HUE_GREY 0 + +/** + * Converts a given color to comply within a smaller subset of colors to be used in runechat. + * If a color is outside the min/max saturation or lum, it will be set at the nearest + * value that passes validation. + * + * Arguments: + * * color - The color to process + * * sat_shift - A value between 0 and 1 that will be multiplied against the saturation + * * lum_shift - A value between 0 and 1 that will be multiplied against the luminescence + */ +/proc/process_chat_color(color, sat_shift = 1, lum_shift = 1) + if(isnull(color)) + return "#FFFFFF" + + // Convert color hex to HSL + var/hsl_color = rgb2num(color, COLORSPACE_HSL) + + // Hue / saturation / luminance + var/hue = hsl_color[CM_COLOR_HUE] + var/saturation = hsl_color[CM_COLOR_SATURATION] + var/luminance = hsl_color[CM_COLOR_LUMINANCE] + + // Cap the saturation at 90% + saturation = min(saturation, CM_COLOR_SAT_MAX) + + // Now clamp the luminance according to the hue + var/processed_luminance + + // There are special cases for greyscale and the red/blue/violet range + if(hue == CM_COLOR_HUE_GREY) + processed_luminance = max(luminance, CM_COLOR_LUM_MIN_GREY) // greys have a higher floor on the allowed luminance value + else if(CM_COLOR_HUE_RANGE_UPPER > hue > CM_COLOR_HUE_RANGE_LOWER) + processed_luminance = min(luminance, CM_COLOR_LUM_MAX_DARK_RANGE) // colors in the deep reds/blues/violets range will have a slightly higher luminance floor than the rest + else + processed_luminance = max(luminance, CM_COLOR_LUM_MIN) // everything else gets the default + + // Convert it back to a hex + return rgb(hue, saturation*sat_shift, processed_luminance*lum_shift, space = COLORSPACE_HSL) + +#undef CM_COLOR_HUE +#undef CM_COLOR_SATURATION +#undef CM_COLOR_LUMINANCE + +#undef CM_COLOR_SAT_MAX +#undef CM_COLOR_LUM_MIN +#undef CM_COLOR_LUM_MIN_GREY +#undef CM_COLOR_LUM_MAX_DARK_RANGE + +#undef CM_COLOR_HUE_RANGE_LOWER +#undef CM_COLOR_HUE_RANGE_UPPER +#undef CM_COLOR_HUE_GREY diff --git a/modular_skyrat/modules/clock_cult/code/actions/_action.dm b/modular_nova/modules/clock_cult/code/actions/_action.dm similarity index 82% rename from modular_skyrat/modules/clock_cult/code/actions/_action.dm rename to modular_nova/modules/clock_cult/code/actions/_action.dm index da48b3712cfde7..a0071521fc8d5e 100644 --- a/modular_skyrat/modules/clock_cult/code/actions/_action.dm +++ b/modular_nova/modules/clock_cult/code/actions/_action.dm @@ -1,6 +1,6 @@ /datum/action/innate/clockcult - button_icon = 'modular_skyrat/modules/clock_cult/icons/actions_clock.dmi' - background_icon = 'modular_skyrat/modules/clock_cult/icons/background_clock.dmi' + button_icon = 'modular_nova/modules/clock_cult/icons/actions_clock.dmi' + background_icon = 'modular_nova/modules/clock_cult/icons/background_clock.dmi' background_icon_state = "bg_clock" check_flags = AB_CHECK_HANDS_BLOCKED|AB_CHECK_IMMOBILE|AB_CHECK_CONSCIOUS @@ -20,7 +20,7 @@ return ..() -/datum/action/innate/clockcult/quick_bind/Grant(mob/living/recieving_mob) +/datum/action/innate/clockcult/quick_bind/Grant(mob/living/receiving_mob) name = scripture.name desc = scripture.tip button_icon_state = scripture.button_icon_state @@ -28,7 +28,7 @@ if(scripture.power_cost) desc += "<br>Draws <b>[scripture.power_cost]W</b> from the ark per use." - return ..(recieving_mob) + return ..(receiving_mob) /datum/action/innate/clockcult/quick_bind/Remove(mob/losing_mob) var/obj/item/clockwork/clockwork_slab/activation_slab = slab_weakref.resolve() @@ -56,5 +56,5 @@ to_chat(owner, span_brass("You fail to invoke [name].")) /datum/action/item_action/toggle/clock - button_icon = 'modular_skyrat/modules/clock_cult/icons/background_clock.dmi' + button_icon = 'modular_nova/modules/clock_cult/icons/background_clock.dmi' background_icon_state = "bg_clock" diff --git a/modular_skyrat/modules/clock_cult/code/actions/recall_slab.dm b/modular_nova/modules/clock_cult/code/actions/recall_slab.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/actions/recall_slab.dm rename to modular_nova/modules/clock_cult/code/actions/recall_slab.dm diff --git a/modular_skyrat/modules/clock_cult/code/actions/whirring_convergence.dm b/modular_nova/modules/clock_cult/code/actions/whirring_convergence.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/actions/whirring_convergence.dm rename to modular_nova/modules/clock_cult/code/actions/whirring_convergence.dm diff --git a/modular_skyrat/modules/clock_cult/code/antagonist.dm b/modular_nova/modules/clock_cult/code/antagonist.dm similarity index 95% rename from modular_skyrat/modules/clock_cult/code/antagonist.dm rename to modular_nova/modules/clock_cult/code/antagonist.dm index c2c57950a0a5f6..264d9848ca645f 100644 --- a/modular_skyrat/modules/clock_cult/code/antagonist.dm +++ b/modular_nova/modules/clock_cult/code/antagonist.dm @@ -26,7 +26,7 @@ /datum/antagonist/clock_cultist/on_gain() . = ..() - owner.current.playsound_local(get_turf(owner.current), 'modular_skyrat/modules/clock_cult/sound/magic/scripture_tier_up.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE) + owner.current.playsound_local(get_turf(owner.current), 'modular_nova/modules/clock_cult/sound/magic/scripture_tier_up.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE) /datum/antagonist/clock_cultist/apply_innate_effects(mob/living/mob_override) diff --git a/modular_skyrat/modules/clock_cult/code/area.dm b/modular_nova/modules/clock_cult/code/area.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/area.dm rename to modular_nova/modules/clock_cult/code/area.dm diff --git a/modular_skyrat/modules/clock_cult/code/components/brass_spreader.dm b/modular_nova/modules/clock_cult/code/components/brass_spreader.dm similarity index 95% rename from modular_skyrat/modules/clock_cult/code/components/brass_spreader.dm rename to modular_nova/modules/clock_cult/code/components/brass_spreader.dm index 911d420d85fbdb..711bff25fb5971 100644 --- a/modular_skyrat/modules/clock_cult/code/components/brass_spreader.dm +++ b/modular_nova/modules/clock_cult/code/components/brass_spreader.dm @@ -18,7 +18,7 @@ src.cooldown = cooldown -/datum/component/brass_spreader/Destroy(force, silent) +/datum/component/brass_spreader/Destroy(force) STOP_PROCESSING(SSobj, src) return ..() @@ -52,7 +52,7 @@ var/turf/converted_turf = pick(valid_turfs) if(isplatingturf(converted_turf)) - converted_turf.PlaceOnTop(/turf/open/floor/bronze, flags = CHANGETURF_INHERIT_AIR) + converted_turf.place_on_top(/turf/open/floor/bronze, flags = CHANGETURF_INHERIT_AIR) new /obj/effect/temp_visual/ratvar/floor(converted_turf) else if(isopenturf(converted_turf)) diff --git a/modular_skyrat/modules/clock_cult/code/components/hint_element.dm b/modular_nova/modules/clock_cult/code/components/hint_element.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/components/hint_element.dm rename to modular_nova/modules/clock_cult/code/components/hint_element.dm diff --git a/modular_skyrat/modules/clock_cult/code/components/pickup_element.dm b/modular_nova/modules/clock_cult/code/components/pickup_element.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/components/pickup_element.dm rename to modular_nova/modules/clock_cult/code/components/pickup_element.dm diff --git a/modular_skyrat/modules/clock_cult/code/components/structure_info_element.dm b/modular_nova/modules/clock_cult/code/components/structure_info_element.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/components/structure_info_element.dm rename to modular_nova/modules/clock_cult/code/components/structure_info_element.dm diff --git a/modular_skyrat/modules/clock_cult/code/globals.dm b/modular_nova/modules/clock_cult/code/globals.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/globals.dm rename to modular_nova/modules/clock_cult/code/globals.dm diff --git a/modular_skyrat/modules/clock_cult/code/items/clockwork_slab.dm b/modular_nova/modules/clock_cult/code/items/clockwork_slab.dm similarity index 94% rename from modular_skyrat/modules/clock_cult/code/items/clockwork_slab.dm rename to modular_nova/modules/clock_cult/code/items/clockwork_slab.dm index 0f4efdd56927ca..01c489c3e8d1bf 100644 --- a/modular_skyrat/modules/clock_cult/code/items/clockwork_slab.dm +++ b/modular_nova/modules/clock_cult/code/items/clockwork_slab.dm @@ -4,7 +4,7 @@ GLOBAL_LIST_INIT(clockwork_slabs, list()) /obj/item/clockwork - icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi' + icon = 'modular_nova/modules/clock_cult/icons/clockwork_objects.dmi' /// Extra info to give clock cultists, added via the /datum/element/clockwork_description element var/clockwork_desc = "" @@ -21,8 +21,8 @@ GLOBAL_LIST_INIT(clockwork_slabs, list()) clockwork_desc = "A beautiful work of art, harnessing mechanical energy for a variety of useful powers." item_flags = NOBLUDGEON icon_state = "clockwork_slab" - lefthand_file = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_righthand.dmi' + lefthand_file = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi' + righthand_file = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_righthand.dmi' /// The scripture currently being invoked var/datum/scripture/invoking_scripture @@ -81,10 +81,10 @@ GLOBAL_LIST_INIT(clockwork_slabs, list()) . = ..() //Clear quickbinds for(var/datum/action/innate/clockcult/quick_bind/script as anything in quick_bound_scriptures) - script.Remove(user) + script?.Remove(user) if(active_scripture) - active_scripture.end_invocation() + active_scripture?.end_invocation() if(buffer) buffer = null @@ -97,7 +97,7 @@ GLOBAL_LIST_INIT(clockwork_slabs, list()) //Grant quickbound spells for(var/datum/action/innate/clockcult/quick_bind/script as anything in quick_bound_scriptures) - script.Grant(user) + script?.Grant(user) user.update_action_buttons() @@ -119,7 +119,7 @@ GLOBAL_LIST_INIT(clockwork_slabs, list()) qdel(quick_bound_scriptures[position]) //Put the quickbound action onto the slab, the slab should grant when picked up - var/datum/action/innate/clockcult/quick_bind/quickbound = new + var/datum/action/innate/clockcult/quick_bind/quickbound = new(src) quickbound.scripture = spell quickbound.slab_weakref = WEAKREF(src) quick_bound_scriptures[position] = quickbound diff --git a/modular_nova/modules/clock_cult/code/items/clothing.dm b/modular_nova/modules/clock_cult/code/items/clothing.dm new file mode 100644 index 00000000000000..db3d91366a414a --- /dev/null +++ b/modular_nova/modules/clock_cult/code/items/clothing.dm @@ -0,0 +1,453 @@ +#define VISOR_MOUNT_DAMAGE 20 +#define VISOR_MOUNT_SLEEP_TIME 5 SECONDS + +/obj/item/clothing/suit/clockwork + name = "bronze armor" + desc = "A strong, bronze suit worn by the soldiers of the Ratvarian armies." + icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb.dmi' + worn_icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb_worn.dmi' + icon_state = "clockwork_cuirass" + armor_type = /datum/armor/suit_clockwork + slowdown = 0.6 + resistance_flags = FIRE_PROOF | ACID_PROOF + w_class = WEIGHT_CLASS_BULKY + body_parts_covered = CHEST|GROIN|LEGS|ARMS + allowed = list( + /obj/item/clockwork, + /obj/item/stack/tile/bronze, + /obj/item/gun/ballistic/bow/clockwork, + /obj/item/gun/ballistic/rifle/lionhunter/clockwork, + ) + +/datum/armor/suit_clockwork + melee = 50 + bullet = 60 + laser = 30 + energy = 80 + bomb = 80 + bio = 100 + fire = 100 + acid = 100 + + +/obj/item/clothing/suit/clockwork/Initialize(mapload) + . = ..() + AddElement(/datum/element/clockwork_pickup, ~(ITEM_SLOT_HANDS)) + + +/obj/item/clothing/suit/clockwork/speed + name = "robes of divinity" + desc = "A shiny suit, glowing with a vibrant energy. The wearer will be able to move quickly across battlefields, but will be able to withstand less damage before falling." + icon_state = "clockwork_cuirass_speed" + slowdown = -0.3 + resistance_flags = FIRE_PROOF | ACID_PROOF + armor_type = /datum/armor/clockwork_speed + +/datum/armor/clockwork_speed + melee = 40 + bullet = 30 + laser = 10 + energy = -20 + bomb = 60 + bio = 100 + fire = 100 + acid = 100 + +/obj/item/clothing/suit/clockwork/cloak + name = "shrouding cloak" + desc = "A faltering cloak that bends light around it, distorting the user's appearance, making it hard to see them with the naked eye. However, it provides very little protection." + icon_state = "clockwork_cloak" + armor_type = /datum/armor/clockwork_cloak + actions_types = list(/datum/action/item_action/toggle/clock) + slowdown = 0.4 + resistance_flags = FIRE_PROOF | ACID_PROOF + /// Is the shroud itself active or not + var/shroud_active = FALSE + /// Previous alpha value of the user when removing/disabling the jacket + var/previous_alpha = 255 + /// Who is wearing this + var/mob/living/wearer + +/datum/armor/clockwork_cloak + melee = 10 + bullet = 60 + laser = 40 + energy = 20 + bomb = 40 + bio = 100 + fire = 100 + acid = 100 + +/obj/item/clothing/suit/clockwork/cloak/Destroy() + wearer = null + + return ..() + + +/obj/item/clothing/suit/clockwork/cloak/attack_self(mob/user, modifiers) + . = ..() + if(shroud_active) + disable() + + else + enable() + + +/obj/item/clothing/suit/clockwork/cloak/equipped(mob/user, slot) + . = ..() + if(slot != ITEM_SLOT_OCLOTHING || !IS_CLOCK(user)) + return + + wearer = user + + if(shroud_active) + enable() + + +/obj/item/clothing/suit/clockwork/cloak/dropped(mob/user) + . = ..() + if(shroud_active) + disable() + + wearer = null + + +/// Apply the effects to the wearer, making them pretty hard to see +/obj/item/clothing/suit/clockwork/cloak/proc/enable() + shroud_active = TRUE + previous_alpha = wearer.alpha + animate(wearer, alpha = 90, time = 3 SECONDS) + apply_wibbly_filters(wearer) + ADD_TRAIT(wearer, TRAIT_UNKNOWN, CLOTHING_TRAIT) + + +/// Un-apply the effects of the cloak, returning the wearer to normal +/obj/item/clothing/suit/clockwork/cloak/proc/disable() + shroud_active = FALSE + do_sparks(3, FALSE, wearer) + remove_wibbly_filters(wearer) + animate(wearer, alpha = previous_alpha, time = 3 SECONDS) + REMOVE_TRAIT(wearer, TRAIT_UNKNOWN, CLOTHING_TRAIT) + + +/obj/item/clothing/glasses/clockwork + name = "base clock glasses" + icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb.dmi' + worn_icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb_worn.dmi' + icon_state = "clockwork_cuirass" + /// What additional desc to show if the person examining is a clock cultist + var/clock_desc = "" + + +/obj/item/clothing/glasses/clockwork/examine(mob/user) + . = ..() + AddElement(/datum/element/clockwork_description, clock_desc) + AddElement(/datum/element/clockwork_pickup, ~(ITEM_SLOT_HANDS)) + + +// Thermal goggles, no protection from eye stuff +/obj/item/clothing/glasses/clockwork/wraith_spectacles + name = "wraith spectacles" + desc = "Mystical glasses that glow with a bright energy. Some say they can see things that shouldn't be seen." + icon_state = "wraith_specs_0" + base_icon_state = "wraith_specs" + invis_view = SEE_INVISIBLE_OBSERVER + invis_override = null + flash_protect = FLASH_PROTECTION_SENSITIVE + vision_flags = SEE_MOBS + color_cutoffs = list(5, 15, 5) + glass_colour_type = /datum/client_colour/glass_colour/yellow + actions_types = list(/datum/action/item_action/toggle/clock) + clock_desc = "Applies passive eye damage that regenerates after unequipping, grants thermal vision, and lets you see all forms of invisibility." + /// Who is currently wearing the goggles + var/mob/living/wearer + /// Are the glasses enabled (flipped down) + var/enabled = TRUE + + +/obj/item/clothing/glasses/clockwork/wraith_spectacles/Initialize(mapload) + . = ..() + update_icon_state() + + +/obj/item/clothing/glasses/clockwork/wraith_spectacles/Destroy() + STOP_PROCESSING(SSobj, src) + wearer = null + return ..() + + +/obj/item/clothing/glasses/clockwork/wraith_spectacles/update_icon_state() + . = ..() + icon_state = "[base_icon_state]_[!enabled]" + worn_icon_state = "[base_icon_state]_[!enabled]" + + +/obj/item/clothing/glasses/clockwork/wraith_spectacles/attack_self(mob/user, modifiers) + . = ..() + if(enabled) + disable() + else + enable() + + if(iscarbon(user)) + var/mob/living/carbon/carbon_user = user + carbon_user.head_update(src, forced = TRUE) + + +/// "enable" the spectacles, flipping them down and applying their effects, calling on_toggle_eyes() if someone is wearing them +/obj/item/clothing/glasses/clockwork/wraith_spectacles/proc/enable() + enabled = TRUE + color_cutoffs = list(15, 12, 0) + visor_toggling() + + if(wearer) + on_toggle_eyes() + + update_icon_state() + wearer.update_sight() + + +/// "disable" the spectacles, flipping them up and removing all applied effects +/obj/item/clothing/glasses/clockwork/wraith_spectacles/proc/disable() + enabled = FALSE + color_cutoffs = null + visor_toggling() //this doesn't remove everything, check later + + if(wearer) + de_toggle_eyes() + + update_icon_state() + wearer.update_sight() + + +/// The start of application of the actual effects, including eye damage +/obj/item/clothing/glasses/clockwork/wraith_spectacles/proc/on_toggle_eyes() + wearer.update_sight() + to_chat(wearer, span_clockgray("You suddenly see so much more.")) + + +/// The stopping of effect application, will remove the wearer's eye damage a minute after +/obj/item/clothing/glasses/clockwork/wraith_spectacles/proc/de_toggle_eyes() + wearer.update_sight() + to_chat(wearer, span_clockgray("You feel your eyes slowly readjusting.")) + + +/obj/item/clothing/glasses/clockwork/wraith_spectacles/equipped(mob/living/user, slot) + . = ..() + if(!isliving(user)) + return + + if((slot == ITEM_SLOT_EYES) && enabled) + wearer = user + on_toggle_eyes() + + +/obj/item/clothing/glasses/clockwork/wraith_spectacles/dropped(mob/user) + . = ..() + if(wearer && (IS_CLOCK(user)) && enabled) + de_toggle_eyes() + + wearer = null + + +// Flash protected and generally info-granting with huds +/obj/item/clothing/glasses/clockwork/judicial_visor + name = "judicial visor" + desc = "A purple visor gilt with Ratvarian runes, allowing a user to see, unfettered by others. The cogs on the sides look pretty tight..." + icon_state = "judicial_visor_0" + base_icon_state = "judicial_visor" + flash_protect = FLASH_PROTECTION_WELDER + strip_delay = 10 SECONDS + glass_colour_type = /datum/client_colour/glass_colour/purple + actions_types = list(/datum/action/item_action/toggle/clock) + clock_desc = "Binds itself to the wearer's face, but grants large sight and informational benefits while active." + /// Is this enabled + var/enabled = TRUE + /// Wearer of the visor + var/mob/living/wearer + /// Should the user take damage from wearing this the first time? (Doesn't affect nodrop) + var/damaging = TRUE + + +/obj/item/clothing/glasses/clockwork/judicial_visor/Initialize(mapload) + . = ..() + update_icon_state() + + +/obj/item/clothing/glasses/clockwork/judicial_visor/Destroy() + wearer = null + return ..() + + +/obj/item/clothing/glasses/clockwork/judicial_visor/update_icon_state() + . = ..() + icon_state = "[base_icon_state]_[enabled]" + worn_icon_state = "[base_icon_state]_[enabled]" + + +/obj/item/clothing/glasses/clockwork/judicial_visor/attack_self(mob/user, modifiers) + . = ..() + if(enabled) + disable() + else + enable() + + if(iscarbon(user)) + var/mob/living/carbon/carbon_user = user + carbon_user.head_update(src, forced = TRUE) + + +/// Turn on the visor, calling apply_to_wearer() and changing the icon state +/obj/item/clothing/glasses/clockwork/judicial_visor/proc/enable() + enabled = TRUE + if(wearer) + apply_to_wearer() + + update_icon_state() + + +/// Turn off the visor, calling unapply_to_wearer() and changing the icon state +/obj/item/clothing/glasses/clockwork/judicial_visor/proc/disable() + enabled = FALSE + if(wearer) + unapply_to_wearer() + + update_icon_state() + + +/// Applies the actual effects to the wearer, giving them flash protection and a variety of sight/info bonuses +/obj/item/clothing/glasses/clockwork/judicial_visor/proc/apply_to_wearer() + ADD_TRAIT(wearer, TRAIT_NOFLASH, CLOTHING_TRAIT) + + ADD_TRAIT(wearer, TRAIT_MEDICAL_HUD, CLOTHING_TRAIT) + var/datum/atom_hud/med_hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] + med_hud.show_to(wearer) + + ADD_TRAIT(wearer, TRAIT_SECURITY_HUD, CLOTHING_TRAIT) + var/datum/atom_hud/sec_hud = GLOB.huds[DATA_HUD_SECURITY_ADVANCED] + sec_hud.show_to(wearer) + + ADD_TRAIT(wearer, TRAIT_MADNESS_IMMUNE, CLOTHING_TRAIT) + ADD_TRAIT(wearer, TRAIT_KNOW_ENGI_WIRES, CLOTHING_TRAIT) + ADD_TRAIT(wearer, TRAIT_KNOW_ROBO_WIRES, CLOTHING_TRAIT) + color_cutoffs = list(50, 10, 30) + wearer.update_sight() + +/// Removes the effects to the wearer, removing the flash protection and similar +/obj/item/clothing/glasses/clockwork/judicial_visor/proc/unapply_to_wearer() + REMOVE_TRAIT(wearer, TRAIT_NOFLASH, CLOTHING_TRAIT) + + REMOVE_TRAIT(wearer, TRAIT_MEDICAL_HUD, CLOTHING_TRAIT) + var/datum/atom_hud/med_hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] + med_hud.hide_from(wearer) + + REMOVE_TRAIT(wearer, TRAIT_SECURITY_HUD, CLOTHING_TRAIT) + var/datum/atom_hud/sec_hud = GLOB.huds[DATA_HUD_SECURITY_ADVANCED] + sec_hud.hide_from(wearer) + + REMOVE_TRAIT(wearer, TRAIT_MADNESS_IMMUNE, CLOTHING_TRAIT) + REMOVE_TRAIT(wearer, TRAIT_KNOW_ENGI_WIRES, CLOTHING_TRAIT) + REMOVE_TRAIT(wearer, TRAIT_KNOW_ROBO_WIRES, CLOTHING_TRAIT) + color_cutoffs = null + wearer.update_sight() + + +/obj/item/clothing/glasses/clockwork/judicial_visor/equipped(mob/living/user, slot) + . = ..() + if(!isliving(user)) + return + + if(slot == ITEM_SLOT_EYES) + wearer = user + if(enabled) + apply_to_wearer() + + ADD_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT) + to_chat(wearer, span_userdanger("You feel the cogs on the visor clamp to the sides of your head, drilling in!")) + if(damaging) + wearer.emote("scream") + wearer.Sleeping(VISOR_MOUNT_SLEEP_TIME) + wearer.apply_damage(VISOR_MOUNT_DAMAGE, BRUTE, BODY_ZONE_HEAD) + + +/obj/item/clothing/glasses/clockwork/judicial_visor/dropped(mob/user) + ..() + if(wearer) + unapply_to_wearer() + wearer = null + REMOVE_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT) + +/obj/item/clothing/glasses/clockwork/judicial_visor/no_damage //ideally use this for loadouts n such + damaging = FALSE + + +/obj/item/clothing/head/helmet/clockwork + name = "brass helmet" + desc = "A strong, brass helmet worn by the soldiers of the Ratvarian armies. Includes an integrated light-dimmer for flash protection, as well as occult-grade muffling for factory based environments." + icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb.dmi' + worn_icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb_worn.dmi' + icon_state = "clockwork_helmet" + armor_type = /datum/armor/helmet_clockwork + resistance_flags = FIRE_PROOF | ACID_PROOF + w_class = WEIGHT_CLASS_BULKY + flash_protect = FLASH_PROTECTION_FLASH + +/datum/armor/helmet_clockwork + melee = 50 + bullet = 60 + laser = 30 + energy = 80 + bomb = 80 + bio = 100 + fire = 100 + acid = 100 + +/obj/item/clothing/head/helmet/clockwork/Initialize(mapload) + . = ..() + AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_HEAD)) + AddElement(/datum/element/clockwork_pickup, ~(ITEM_SLOT_HANDS)) + + +/obj/item/clothing/shoes/clockwork + name = "brass treads" + desc = "A strong pair of brass boots worn by the soldiers of the Ratvarian armies." + icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb.dmi' + worn_icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb_worn.dmi' + icon_state = "clockwork_treads" + +/obj/item/clothing/shoes/clockwork/Initialize(mapload) + . = ..() + AddElement(/datum/element/clockwork_pickup, ~(ITEM_SLOT_HANDS)) + + +/obj/item/clothing/gloves/clockwork + name = "brass gauntlets" + desc = "A strong pair of brass gloves worn by the soldiers of the Ratvarian armies." + icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb.dmi' + worn_icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb_worn.dmi' + icon_state = "clockwork_gauntlets" + siemens_coefficient = 0 + strip_delay = 8 SECONDS + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT + resistance_flags = NONE + armor_type = /datum/armor/gloves_clockwork + +/datum/armor/gloves_clockwork + melee = 0 + bullet = 0 + laser = 0 + energy = 0 + bomb = 0 + bio = 0 + fire = 80 + acid = 50 + +/obj/item/clothing/gloves/clockwork/Initialize(mapload) + . = ..() + AddElement(/datum/element/clockwork_pickup, ~(ITEM_SLOT_HANDS)) + +#undef VISOR_MOUNT_DAMAGE +#undef VISOR_MOUNT_SLEEP_TIME diff --git a/modular_skyrat/modules/clock_cult/code/items/integration_cog.dm b/modular_nova/modules/clock_cult/code/items/integration_cog.dm similarity index 94% rename from modular_skyrat/modules/clock_cult/code/items/integration_cog.dm rename to modular_nova/modules/clock_cult/code/items/integration_cog.dm index 9fa27cddafd68f..b098c41a41b748 100644 --- a/modular_skyrat/modules/clock_cult/code/items/integration_cog.dm +++ b/modular_nova/modules/clock_cult/code/items/integration_cog.dm @@ -42,12 +42,16 @@ cogger_apc.panel_open = FALSE cogger_apc.update_appearance() balloon_alert(user, "[src] inserted") - playsound(get_turf(user), 'modular_skyrat/modules/clock_cult/sound/machinery/integration_cog_install.ogg', 20) + playsound(get_turf(user), 'modular_nova/modules/clock_cult/sound/machinery/integration_cog_install.ogg', 20) if(!cogger_apc.clock_cog_rewarded) addtimer(CALLBACK(src, PROC_REF(finish_setup), cogger_apc), SET_UP_TIME) send_clock_message(null, span_brass(span_bold("[user] has installed an integration cog into [cogger_apc].")), msg_ghosts = FALSE) - notify_ghosts("[user] has installed an integration cog into [cogger_apc]", source = user, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Integration cog") + notify_ghosts("[user] has installed an integration cog into [cogger_apc]", + source = user, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + header = "Integration cog", + ) /// Finish setting up the cog 5 minutes after insertion diff --git a/modular_skyrat/modules/clock_cult/code/items/replica_fabricator.dm b/modular_nova/modules/clock_cult/code/items/replica_fabricator.dm similarity index 96% rename from modular_skyrat/modules/clock_cult/code/items/replica_fabricator.dm rename to modular_nova/modules/clock_cult/code/items/replica_fabricator.dm index 46fe1a712a74bb..2fa882d0885dbf 100644 --- a/modular_skyrat/modules/clock_cult/code/items/replica_fabricator.dm +++ b/modular_nova/modules/clock_cult/code/items/replica_fabricator.dm @@ -4,9 +4,9 @@ /obj/item/clockwork/replica_fabricator name = "replica fabricator" desc = "A strange, brass device with many twisting cogs and vents." - icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi' - lefthand_file = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_righthand.dmi' + icon = 'modular_nova/modules/clock_cult/icons/clockwork_objects.dmi' + lefthand_file = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi' + righthand_file = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_righthand.dmi' icon_state = "replica_fabricator" /// How much power this has. 5 generated per sheet inserted, one sheet of bronze costs 10, one floor tile costs 15, one wall costs 20 var/power = 0 @@ -209,7 +209,7 @@ /// Any extra actions that need to be taken when an object is created /datum/replica_fabricator_output/proc/on_create(atom/created_atom, turf/creation_turf, mob/creator) SHOULD_CALL_PARENT(TRUE) - playsound(creation_turf, 'modular_skyrat/modules/clock_cult/sound/machinery/integration_cog_install.ogg', 50, 1) // better sound? + playsound(creation_turf, 'modular_nova/modules/clock_cult/sound/machinery/integration_cog_install.ogg', 50, 1) // better sound? to_chat(creator, span_clockyellow("You create \an [name] for [cost]W of power.")) diff --git a/modular_nova/modules/clock_cult/code/items/tools.dm b/modular_nova/modules/clock_cult/code/items/tools.dm new file mode 100644 index 00000000000000..76132ce95c1fea --- /dev/null +++ b/modular_nova/modules/clock_cult/code/items/tools.dm @@ -0,0 +1,60 @@ +#define BRASS_TOOLSPEED_MOD 0.5 + +/obj/item/wirecutters/brass + name = "brass wirecutters" + desc = "A pair of wirecutters made of brass. The handle feels faintly warm." + resistance_flags = FIRE_PROOF | ACID_PROOF + icon = 'modular_nova/modules/clock_cult/icons/tools.dmi' + icon_state = "cutters_brass" + random_color = FALSE + toolspeed = BRASS_TOOLSPEED_MOD + +/obj/item/screwdriver/brass + name = "brass screwdriver" + desc = "A screwdriver made of brass. The handle feels warm to the touch." + resistance_flags = FIRE_PROOF | ACID_PROOF + icon = 'modular_nova/modules/clock_cult/icons/tools.dmi' + icon_state = "screwdriver_brass" + toolspeed = BRASS_TOOLSPEED_MOD + random_color = FALSE + greyscale_config_inhand_left = null + greyscale_config_inhand_right = null + +/obj/item/weldingtool/experimental/brass + name = "brass welding tool" + desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch." + resistance_flags = FIRE_PROOF | ACID_PROOF + icon = 'modular_nova/modules/clock_cult/icons/tools.dmi' + icon_state = "welder_brass" + toolspeed = BRASS_TOOLSPEED_MOD + +/obj/item/crowbar/brass + name = "brass crowbar" + desc = "A brass crowbar. It feels faintly warm to the touch." + resistance_flags = FIRE_PROOF | ACID_PROOF + icon = 'modular_nova/modules/clock_cult/icons/tools.dmi' + icon_state = "crowbar_brass" + worn_icon_state = "crowbar" + toolspeed = BRASS_TOOLSPEED_MOD + +/obj/item/wrench/brass + name = "brass wrench" + desc = "A brass wrench. It's faintly warm to the touch." + resistance_flags = FIRE_PROOF | ACID_PROOF + icon = 'modular_nova/modules/clock_cult/icons/tools.dmi' + icon_state = "wrench_brass" + toolspeed = BRASS_TOOLSPEED_MOD + +/obj/item/storage/belt/utility/clock + name = "old toolbelt" + desc = "Holds tools. This one's seen better days, though. There's the outline of a cog roughly cut into the leather on one side." + +/obj/item/storage/belt/utility/clock/PopulateContents() + new /obj/item/screwdriver/brass(src) + new /obj/item/crowbar/brass(src) + new /obj/item/weldingtool/experimental/brass(src) + new /obj/item/wirecutters/brass(src) + new /obj/item/wrench/brass(src) + new /obj/item/multitool(src) + +#undef BRASS_TOOLSPEED_MOD diff --git a/modular_nova/modules/clock_cult/code/items/weaponry.dm b/modular_nova/modules/clock_cult/code/items/weaponry.dm new file mode 100644 index 00000000000000..419efdd38e494c --- /dev/null +++ b/modular_nova/modules/clock_cult/code/items/weaponry.dm @@ -0,0 +1,311 @@ +#define HAMMER_FLING_DISTANCE 2 +#define HAMMER_THROW_FLING_DISTANCE 3 +#define BRASS_RIFLE_REDUCED_DELAY 0.25 SECONDS + +/obj/item/clockwork/weapon + name = "clockwork weapon" + desc = "Something" + icon = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_weapons.dmi' + lefthand_file = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi' + righthand_file = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_righthand.dmi' + worn_icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb_worn.dmi' + w_class = WEIGHT_CLASS_BULKY + slot_flags = ITEM_SLOT_BACK + throwforce = 20 + throw_speed = 4 + armour_penetration = 10 + hitsound = 'sound/weapons/bladeslice.ogg' + attack_verb_continuous = list("attacks", "pokes", "jabs", "tears", "gores") + attack_verb_simple = list("attack", "poke", "jab", "tear", "gore") + sharpness = SHARP_EDGED + /// Typecache of valid turfs to have the weapon's special effect on + var/static/list/effect_turf_typecache = typecacheof(list(/turf/open/floor/bronze)) + + +/obj/item/clockwork/weapon/attack(mob/living/target, mob/living/user) + . = ..() + var/turf/gotten_turf = get_turf(user) + + if(!is_type_in_typecache(gotten_turf, effect_turf_typecache)) + return + + if(!QDELETED(target) && target.stat != DEAD && !IS_CLOCK(target) && !target.can_block_magic(MAGIC_RESISTANCE_HOLY)) + hit_effect(target, user) + + +/obj/item/clockwork/weapon/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + . = ..() + if(.) + return + + if(!isliving(hit_atom)) + return + + var/mob/living/target = hit_atom + + if(!target.can_block_magic(MAGIC_RESISTANCE_HOLY) && !IS_CLOCK(target)) + hit_effect(target, throwingdatum.thrower, TRUE) + + +/// What occurs to non-holy people when attacked from brass tiles +/obj/item/clockwork/weapon/proc/hit_effect(mob/living/target, mob/living/user, thrown = FALSE) + return + + +/obj/item/clockwork/weapon/brass_spear + name = "brass spear" + desc = "A razor-sharp spear made of brass. It thrums with barely-contained energy." + icon_state = "ratvarian_spear" + embedding = list("max_damage_mult" = 15, "armour_block" = 80) + throwforce = 36 + force = 25 + armour_penetration = 24 + + +/obj/item/clockwork/weapon/brass_battlehammer + name = "brass battle-hammer" + desc = "A brass hammer glowing with energy." + base_icon_state = "ratvarian_hammer" + icon_state = "ratvarian_hammer0" + throwforce = 25 + armour_penetration = 6 + attack_verb_simple = list("bash", "hammer", "attack", "smash") + attack_verb_continuous = list("bashes", "hammers", "attacks", "smashes") + clockwork_desc = "Enemies hit by this will be flung back while you are on bronze tiles." + sharpness = 0 + hitsound = 'sound/weapons/smash.ogg' + + +/obj/item/clockwork/weapon/brass_battlehammer/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, \ + force_unwielded = 15, \ + icon_wielded = "[base_icon_state]1", \ + force_wielded = 28, \ + ) + + +/obj/item/clockwork/weapon/brass_battlehammer/hit_effect(mob/living/target, mob/living/user, thrown = FALSE) + if(!thrown && !HAS_TRAIT(src, TRAIT_WIELDED)) + return + + var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src))) + target.throw_at(throw_target, thrown ? HAMMER_THROW_FLING_DISTANCE : HAMMER_FLING_DISTANCE, 4) + +/obj/item/clockwork/weapon/brass_battlehammer/update_icon_state() + icon_state = "[base_icon_state]0" + return ..() + +/obj/item/clockwork/weapon/brass_sword + name = "brass longsword" + desc = "A large sword made of brass." + icon_state = "ratvarian_sword" + force = 26 + throwforce = 20 + armour_penetration = 12 + attack_verb_simple = list("attack", "slash", "cut", "tear", "gore") + attack_verb_continuous = list("attacks", "slashes", "cuts", "tears", "gores") + clockwork_desc = "Enemies and mechs will be struck with a powerful electromagnetic pulse while you are on bronze tiles, with a cooldown." + COOLDOWN_DECLARE(emp_cooldown) + + +/obj/item/clockwork/weapon/brass_sword/hit_effect(mob/living/target, mob/living/user, thrown) + if(!COOLDOWN_FINISHED(src, emp_cooldown)) + return + + COOLDOWN_START(src, emp_cooldown, 30 SECONDS) + + target.emp_act(EMP_LIGHT) + new /obj/effect/temp_visual/emp/pulse(target.loc) + addtimer(CALLBACK(src, PROC_REF(send_message), user), 30 SECONDS) + to_chat(user, span_brass("You strike [target] with an electromagnetic pulse!")) + playsound(user, 'sound/magic/lightningshock.ogg', 40) + + +/obj/item/clockwork/weapon/brass_sword/attack_atom(obj/attacked_obj, mob/living/user, params) + . = ..() + var/turf/gotten_turf = get_turf(user) + + if(!ismecha(attacked_obj) || !is_type_in_typecache(gotten_turf, effect_turf_typecache)) + return + + if(!COOLDOWN_FINISHED(src, emp_cooldown)) + return + + COOLDOWN_START(src, emp_cooldown, 20 SECONDS) + + var/obj/vehicle/sealed/mecha/target = attacked_obj + target.emp_act(EMP_HEAVY) + new /obj/effect/temp_visual/emp/pulse(target.loc) + addtimer(CALLBACK(src, PROC_REF(send_message), user), 20 SECONDS) + to_chat(user, span_brass("You strike [target] with an electromagnetic pulse!")) + playsound(user, 'sound/magic/lightningshock.ogg', 40) + + +/obj/item/clockwork/weapon/brass_sword/proc/send_message(mob/living/target) + to_chat(target, span_brass("[src] glows, indicating the next attack will disrupt electronics of the target.")) + + +/obj/item/gun/ballistic/bow/clockwork + name = "brass bow" + desc = "A bow made from brass and other components that you can't quite understand. It glows with a deep energy and frabricates arrows by itself." + icon = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_weapons.dmi' + lefthand_file = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi' + righthand_file = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_righthand.dmi' + icon_state = "bow_clockwork_unchambered_undrawn" + inhand_icon_state = "clockwork_bow" + base_icon_state = "bow_clockwork" + force = 10 + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/bow/clockwork + /// Time between bolt recharges + var/recharge_time = 1.5 SECONDS + /// Typecache of valid turfs to have the weapon's special effect on + var/static/list/effect_turf_typecache = typecacheof(list(/turf/open/floor/bronze)) + +/obj/item/gun/ballistic/bow/clockwork/Initialize(mapload) + . = ..() + update_icon_state() + AddElement(/datum/element/clockwork_description, "Firing from brass tiles will halve the time that it takes to recharge a bolt.") + AddElement(/datum/element/clockwork_pickup) + +/obj/item/gun/ballistic/bow/clockwork/afterattack(atom/target, mob/living/user, flag, params, passthrough) + if(!drawn || !chambered) + to_chat(user, span_notice("[src] must be drawn to fire a shot!")) + return + + return ..() + +/obj/item/gun/ballistic/bow/clockwork/shoot_live_shot(mob/living/user, pointblank, atom/pbtarget, message) + . = ..() + var/turf/user_turf = get_turf(user) + + if(is_type_in_typecache(user_turf, effect_turf_typecache)) + recharge_time = 0.75 SECONDS + + addtimer(CALLBACK(src, PROC_REF(recharge_bolt)), recharge_time) + recharge_time = initial(recharge_time) + +/obj/item/gun/ballistic/bow/clockwork/attack_self(mob/living/user) + if(drawn || !chambered) + return + + if(!do_after(user, 0.5 SECONDS, src)) + return + + to_chat(user, span_notice("You draw back the bowstring.")) + drawn = TRUE + playsound(src, 'modular_nova/modules/tribal_extended/sound/sound_weapons_bowdraw.ogg', 75, 0) //gets way too high pitched if the freq varies + update_icon() + + +/// Recharges a bolt, done after the delay in shoot_live_shot +/obj/item/gun/ballistic/bow/clockwork/proc/recharge_bolt() + var/obj/item/ammo_casing/arrow/clockbolt/bolt = new + magazine.give_round(bolt) + chambered = bolt + update_icon() + + +/obj/item/gun/ballistic/bow/clockwork/attackby(obj/item/I, mob/user, params) + return + + +/obj/item/gun/ballistic/bow/clockwork/update_icon_state() + . = ..() + icon_state = "[base_icon_state]_[chambered ? "chambered" : "unchambered"]_[drawn ? "drawn" : "undrawn"]" + + +/obj/item/ammo_box/magazine/internal/bow/clockwork + ammo_type = /obj/item/ammo_casing/arrow/clockbolt + start_empty = FALSE + + +/obj/item/ammo_casing/arrow/clockbolt + name = "energy bolt" + desc = "An arrow made from a strange energy." + icon = 'modular_nova/modules/clock_cult/icons/weapons/ammo.dmi' + icon_state = "arrow_redlight" + projectile_type = /obj/projectile/energy/clockbolt + + +/obj/projectile/energy/clockbolt + name = "energy bolt" + icon = 'modular_nova/modules/clock_cult/icons/projectiles.dmi' + icon_state = "arrow_energy" + damage = 35 + damage_type = BURN + + +/obj/item/gun/ballistic/rifle/lionhunter/clockwork + name = "brass rifle" + desc = "An antique, brass rifle made with the finest of care. It has an ornate scope in the shape of a cog built into the top." + icon = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_weapons_40x32.dmi' + lefthand_file = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi' + righthand_file = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_righthand.dmi' + worn_icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb_worn.dmi' + slot_flags = ITEM_SLOT_BACK + icon_state = "clockwork_rifle" + inhand_icon_state = "clockwork_rifle" + worn_icon_state = "clockwork_rifle" + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/lionhunter/clockwork + fire_sound = 'sound/weapons/gun/sniper/shot.ogg' + show_bolt_icon = FALSE + + +/obj/item/gun/ballistic/rifle/lionhunter/clockwork/Initialize(mapload) + . = ..() + AddElement(/datum/element/clockwork_description, "The speed of which you aim at far targets while standing on brass will be massively increased.") + AddElement(/datum/element/clockwork_pickup) + +/obj/item/ammo_box/magazine/internal/boltaction/lionhunter/clockwork + name = "brass rifle internal magazine" + ammo_type = /obj/item/ammo_casing/strilka310/lionhunter/clock + + +/obj/item/ammo_casing/strilka310/lionhunter/clock + name = "brass rifle round" + projectile_type = /obj/projectile/bullet/strilka310/lionhunter/clock + min_distance = 3 + + +/obj/item/ammo_casing/strilka310/lionhunter/clock/fire_casing(atom/target, mob/living/user, params, distro, quiet, zone_override, spread, atom/fired_from) + var/obj/item/gun/ballistic/fired_gun = fired_from + + if(istype(get_turf(user), /turf/open/floor/bronze) && istype(fired_gun, /obj/item/gun/ballistic/rifle/lionhunter/clockwork)) + seconds_per_distance = BRASS_RIFLE_REDUCED_DELAY + + return ..() + + +/obj/projectile/bullet/strilka310/lionhunter/clock + name = "brass .310 bullet" + // These stats are only applied if the weapon is fired fully aimed + // If fired without aiming or at someone too close, it will do much less + damage = 45 + stamina = 45 + + +/obj/item/ammo_box/strilka310/lionhunter/clock + name = "stripper clip (.310 brass)" + desc = "A stripper clip that's just as brass as the rounds it holds." + icon = 'modular_nova/modules/clock_cult/icons/weapons/ammo.dmi' + icon_state = "762_brass" + ammo_type = /obj/item/ammo_casing/strilka310/lionhunter/clock + unique_reskin = NONE + max_ammo = 3 + multiple_sprites = AMMO_BOX_PER_BULLET + + +/obj/item/storage/pouch/ammo/clock + +/obj/item/storage/pouch/ammo/clock/PopulateContents() + var/static/items_inside = list( + /obj/item/ammo_box/strilka310/lionhunter/clock = 3 + ) + + generate_items_inside(items_inside, src) + + +#undef HAMMER_FLING_DISTANCE +#undef HAMMER_THROW_FLING_DISTANCE +#undef BRASS_RIFLE_REDUCED_DELAY diff --git a/modular_skyrat/modules/clock_cult/code/language.dm b/modular_nova/modules/clock_cult/code/language.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/language.dm rename to modular_nova/modules/clock_cult/code/language.dm diff --git a/modular_skyrat/modules/clock_cult/code/mobs/clockwork_marauder.dm b/modular_nova/modules/clock_cult/code/mobs/clockwork_marauder.dm similarity index 91% rename from modular_skyrat/modules/clock_cult/code/mobs/clockwork_marauder.dm rename to modular_nova/modules/clock_cult/code/mobs/clockwork_marauder.dm index 08ef285d89cf95..cff20118338de3 100644 --- a/modular_skyrat/modules/clock_cult/code/mobs/clockwork_marauder.dm +++ b/modular_nova/modules/clock_cult/code/mobs/clockwork_marauder.dm @@ -6,7 +6,7 @@ GLOBAL_LIST_EMPTY(clockwork_marauders) /mob/living/basic/clockwork_marauder name = "clockwork marauder" desc = "A brass machine of destruction." - icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_mobs.dmi' + icon = 'modular_nova/modules/clock_cult/icons/clockwork_mobs.dmi' icon_state = "clockwork_marauder" icon_living = "clockwork_marauder" mob_biotypes = MOB_ORGANIC|MOB_HUMANOID @@ -29,7 +29,7 @@ GLOBAL_LIST_EMPTY(clockwork_marauders) minimum_survivable_temperature = 0 obj_damage = 80 faction = list(FACTION_CLOCK) - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0, OXY = 0) ai_controller = /datum/ai_controller/basic_controller/clockwork_marauder initial_language_holder = /datum/language_holder/clockmob @@ -48,7 +48,7 @@ GLOBAL_LIST_EMPTY(clockwork_marauders) if(length(loot)) AddElement(/datum/element/death_drops, loot) - var/datum/action/innate/clockcult/comm/communicate = new + var/datum/action/innate/clockcult/comm/communicate = new(src) communicate.Grant(src) GLOB.clockwork_marauders += src @@ -92,7 +92,7 @@ GLOBAL_LIST_EMPTY(clockwork_marauders) /// Damage the marauder's shield by one tick /mob/living/basic/clockwork_marauder/proc/damage_shield() shield_health-- - playsound(src, 'modular_skyrat/modules/clock_cult/sound/magic/anima_fragment_attack.ogg', 60, TRUE) + playsound(src, 'modular_nova/modules/clock_cult/sound/magic/anima_fragment_attack.ogg', 60, TRUE) if(!shield_health) to_chat(src, span_userdanger("Your shield breaks!")) to_chat(src, span_brass("You require a <b>welding tool</b> to repair your damaged shield!")) @@ -119,7 +119,7 @@ GLOBAL_LIST_EMPTY(clockwork_marauders) /datum/ai_controller/basic_controller/clockwork_marauder blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) diff --git a/modular_skyrat/modules/clock_cult/code/outfit.dm b/modular_nova/modules/clock_cult/code/outfit.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/outfit.dm rename to modular_nova/modules/clock_cult/code/outfit.dm diff --git a/modular_skyrat/modules/clock_cult/code/outpost_of_cogs.dm b/modular_nova/modules/clock_cult/code/outpost_of_cogs.dm similarity index 96% rename from modular_skyrat/modules/clock_cult/code/outpost_of_cogs.dm rename to modular_nova/modules/clock_cult/code/outpost_of_cogs.dm index 09a45e67d797c8..e2e603b82ef0e8 100644 --- a/modular_skyrat/modules/clock_cult/code/outpost_of_cogs.dm +++ b/modular_nova/modules/clock_cult/code/outpost_of_cogs.dm @@ -43,7 +43,11 @@ atom_area = get_area(atom_turf) send_clock_message(null, "A portal has been opened at [atom_area] to our holy city, it is a glorious day in the name of Ratvar.", "<span class='bigbrass'>", msg_ghosts = FALSE) - notify_ghosts("A portal has been opened at [atom_area] to our holy city, it is a glorious day in the name of Ratvar.", source = atom_area, action = NOTIFY_JUMP, flashwindow = FALSE, header = "Portal to Reebe") + notify_ghosts("A portal has been opened at [atom_area] to our holy city, it is a glorious day in the name of Ratvar.", + source = atom_area, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + header = "Portal to Reebe", + ) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(reebe_station_warning), atom_area, portal), 5 MINUTES) diff --git a/modular_skyrat/modules/clock_cult/code/portal.dm b/modular_nova/modules/clock_cult/code/portal.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/portal.dm rename to modular_nova/modules/clock_cult/code/portal.dm diff --git a/modular_skyrat/modules/clock_cult/code/research/asset_cache.dm b/modular_nova/modules/clock_cult/code/research/asset_cache.dm similarity index 96% rename from modular_skyrat/modules/clock_cult/code/research/asset_cache.dm rename to modular_nova/modules/clock_cult/code/research/asset_cache.dm index 3ae305036ba815..7ac6bd9392cbc6 100644 --- a/modular_skyrat/modules/clock_cult/code/research/asset_cache.dm +++ b/modular_nova/modules/clock_cult/code/research/asset_cache.dm @@ -34,7 +34,7 @@ // And now scripture icons for(var/datum/scripture/unlocked_scripture as anything in new_research.unlocked_scriptures) - var/icon_file = 'modular_skyrat/modules/clock_cult/icons/actions_clock.dmi' + var/icon_file = 'modular_nova/modules/clock_cult/icons/actions_clock.dmi' var/icon_state = initial(unlocked_scripture.button_icon_state) var/id = sanitize_css_class_name("[icon_file][icon_state]") diff --git a/modular_skyrat/modules/clock_cult/code/research/clockwork_research.dm b/modular_nova/modules/clock_cult/code/research/clockwork_research.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/research/clockwork_research.dm rename to modular_nova/modules/clock_cult/code/research/clockwork_research.dm diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/_scripture.dm b/modular_nova/modules/clock_cult/code/scriptures/_scripture.dm similarity index 99% rename from modular_skyrat/modules/clock_cult/code/scriptures/_scripture.dm rename to modular_nova/modules/clock_cult/code/scriptures/_scripture.dm index ad8f096188b181..9c6d9ef6b87d1f 100644 --- a/modular_skyrat/modules/clock_cult/code/scriptures/_scripture.dm +++ b/modular_nova/modules/clock_cult/code/scriptures/_scripture.dm @@ -47,7 +47,7 @@ GLOBAL_LIST_EMPTY(clock_scriptures_by_type) desc += " Requires research to unlock." -/datum/scripture/Destroy(force, ...) +/datum/scripture/Destroy(force) invoker = null invoking_slab = null return ..() @@ -261,7 +261,7 @@ GLOBAL_LIST_EMPTY(clock_scriptures_by_type) /datum/scripture/slab/New() . = ..() - pointed_spell = new + pointed_spell = new(src) pointed_spell.name = src.name pointed_spell.deactive_msg = "" pointed_spell.parent_scripture = src diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/preservation/clockwork_armaments.dm b/modular_nova/modules/clock_cult/code/scriptures/preservation/clockwork_armaments.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/scriptures/preservation/clockwork_armaments.dm rename to modular_nova/modules/clock_cult/code/scriptures/preservation/clockwork_armaments.dm diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/preservation/summon_marauder.dm b/modular_nova/modules/clock_cult/code/scriptures/preservation/summon_marauder.dm similarity index 84% rename from modular_skyrat/modules/clock_cult/code/scriptures/preservation/summon_marauder.dm rename to modular_nova/modules/clock_cult/code/scriptures/preservation/summon_marauder.dm index fc58ad369b1dea..956c0e58faac58 100644 --- a/modular_skyrat/modules/clock_cult/code/scriptures/preservation/summon_marauder.dm +++ b/modular_nova/modules/clock_cult/code/scriptures/preservation/summon_marauder.dm @@ -16,13 +16,21 @@ var/mob/dead/observer/selected -/datum/scripture/marauder/Destroy(force, ...) +/datum/scripture/marauder/Destroy(force) selected = null return ..() /datum/scripture/marauder/invoke() - var/list/candidates = poll_ghost_candidates("Do you want to play as a Clockwork Marauder?", ROLE_PAI, FALSE, 100, POLL_IGNORE_CONSTRUCT) + var/list/candidates = SSpolling.poll_ghost_candidates( + "Do you want to play as a Clockwork Marauder?", + role = ROLE_PAI, + check_jobban = FALSE, + poll_time = 10 SECONDS, + ignore_category = POLL_IGNORE_CONSTRUCT, + pic_source = /obj/item/clockwork/clockwork_slab, + role_name_text = "clockwork marauder", + ) if(length(candidates)) selected = pick(candidates) diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/servitude/hateful_manacles.dm b/modular_nova/modules/clock_cult/code/scriptures/servitude/hateful_manacles.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/scriptures/servitude/hateful_manacles.dm rename to modular_nova/modules/clock_cult/code/scriptures/servitude/hateful_manacles.dm diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/servitude/integration_cog.dm b/modular_nova/modules/clock_cult/code/scriptures/servitude/integration_cog.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/scriptures/servitude/integration_cog.dm rename to modular_nova/modules/clock_cult/code/scriptures/servitude/integration_cog.dm diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/servitude/kindle.dm b/modular_nova/modules/clock_cult/code/scriptures/servitude/kindle.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/scriptures/servitude/kindle.dm rename to modular_nova/modules/clock_cult/code/scriptures/servitude/kindle.dm diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/servitude/vitality_sigil.dm b/modular_nova/modules/clock_cult/code/scriptures/servitude/vitality_sigil.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/scriptures/servitude/vitality_sigil.dm rename to modular_nova/modules/clock_cult/code/scriptures/servitude/vitality_sigil.dm diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/structures/interdiction_lens.dm b/modular_nova/modules/clock_cult/code/scriptures/structures/interdiction_lens.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/scriptures/structures/interdiction_lens.dm rename to modular_nova/modules/clock_cult/code/scriptures/structures/interdiction_lens.dm diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/structures/ocular_warden.dm b/modular_nova/modules/clock_cult/code/scriptures/structures/ocular_warden.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/scriptures/structures/ocular_warden.dm rename to modular_nova/modules/clock_cult/code/scriptures/structures/ocular_warden.dm diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/structures/prosperity_prism.dm b/modular_nova/modules/clock_cult/code/scriptures/structures/prosperity_prism.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/scriptures/structures/prosperity_prism.dm rename to modular_nova/modules/clock_cult/code/scriptures/structures/prosperity_prism.dm diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/structures/technologists_lectern.dm b/modular_nova/modules/clock_cult/code/scriptures/structures/technologists_lectern.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/scriptures/structures/technologists_lectern.dm rename to modular_nova/modules/clock_cult/code/scriptures/structures/technologists_lectern.dm diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/structures/tinkerers_cache.dm b/modular_nova/modules/clock_cult/code/scriptures/structures/tinkerers_cache.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/scriptures/structures/tinkerers_cache.dm rename to modular_nova/modules/clock_cult/code/scriptures/structures/tinkerers_cache.dm diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/structures/transmission_sigil.dm b/modular_nova/modules/clock_cult/code/scriptures/structures/transmission_sigil.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/scriptures/structures/transmission_sigil.dm rename to modular_nova/modules/clock_cult/code/scriptures/structures/transmission_sigil.dm diff --git a/modular_nova/modules/clock_cult/code/status_effects.dm b/modular_nova/modules/clock_cult/code/status_effects.dm new file mode 100644 index 00000000000000..89f5e1000adc3b --- /dev/null +++ b/modular_nova/modules/clock_cult/code/status_effects.dm @@ -0,0 +1,32 @@ +/datum/status_effect/interdiction + id = "interdicted" + duration = 2.5 SECONDS + status_type = STATUS_EFFECT_REFRESH + tick_interval = 0.2 SECONDS + alert_type = /atom/movable/screen/alert/status_effect/interdiction + /// If we kicked the owner out of running mode + var/running_toggled = FALSE + +/datum/status_effect/interdiction/tick(seconds_between_ticks) + if(owner.move_intent == MOVE_INTENT_RUN) + owner.toggle_move_intent(owner) + owner.adjust_confusion_up_to(1 SECONDS, 1 SECONDS) + running_toggled = TRUE + to_chat(owner, span_warning("You know you shouldn't be running here.")) + + owner.add_movespeed_modifier(/datum/movespeed_modifier/clock_interdiction) + +/datum/status_effect/interdiction/on_remove() + owner.remove_movespeed_modifier(/datum/movespeed_modifier/clock_interdiction) + + if(running_toggled && owner.move_intent == MOVE_INTENT_WALK) + owner.toggle_move_intent(owner) + +/atom/movable/screen/alert/status_effect/interdiction + name = "Interdicted" + desc = "I don't think I am meant to go this way." + icon = 'modular_nova/modules/clock_cult/icons/actions_clock.dmi' + icon_state = "interdiction_effect" //fix later + +/datum/movespeed_modifier/clock_interdiction + multiplicative_slowdown = 1.5 diff --git a/modular_skyrat/modules/clock_cult/code/structures/_powered.dm b/modular_nova/modules/clock_cult/code/structures/_powered.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/structures/_powered.dm rename to modular_nova/modules/clock_cult/code/structures/_powered.dm diff --git a/modular_skyrat/modules/clock_cult/code/structures/_structure.dm b/modular_nova/modules/clock_cult/code/structures/_structure.dm similarity index 95% rename from modular_skyrat/modules/clock_cult/code/structures/_structure.dm rename to modular_nova/modules/clock_cult/code/structures/_structure.dm index d963bf70c8c207..4a1b15c4ab2c94 100644 --- a/modular_skyrat/modules/clock_cult/code/structures/_structure.dm +++ b/modular_nova/modules/clock_cult/code/structures/_structure.dm @@ -2,7 +2,7 @@ /obj/structure/destructible/clockwork name = "meme structure" desc = "Some frog or something, the fuck?" - icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi' + icon = 'modular_nova/modules/clock_cult/icons/clockwork_objects.dmi' icon_state = "rare_pepe" anchored = TRUE density = TRUE diff --git a/modular_skyrat/modules/clock_cult/code/structures/airlock.dm b/modular_nova/modules/clock_cult/code/structures/airlock.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/structures/airlock.dm rename to modular_nova/modules/clock_cult/code/structures/airlock.dm diff --git a/modular_skyrat/modules/clock_cult/code/structures/gear_base.dm b/modular_nova/modules/clock_cult/code/structures/gear_base.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/structures/gear_base.dm rename to modular_nova/modules/clock_cult/code/structures/gear_base.dm diff --git a/modular_skyrat/modules/clock_cult/code/structures/interdiction_lens.dm b/modular_nova/modules/clock_cult/code/structures/interdiction_lens.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/structures/interdiction_lens.dm rename to modular_nova/modules/clock_cult/code/structures/interdiction_lens.dm diff --git a/modular_skyrat/modules/clock_cult/code/structures/ocular_warden.dm b/modular_nova/modules/clock_cult/code/structures/ocular_warden.dm similarity index 87% rename from modular_skyrat/modules/clock_cult/code/structures/ocular_warden.dm rename to modular_nova/modules/clock_cult/code/structures/ocular_warden.dm index dd56e486dfdf4b..4d14c27f308fc0 100644 --- a/modular_skyrat/modules/clock_cult/code/structures/ocular_warden.dm +++ b/modular_nova/modules/clock_cult/code/structures/ocular_warden.dm @@ -52,7 +52,7 @@ if(!use_power(SHOOT_POWER_USE)) return - playsound(src, 'modular_skyrat/modules/clock_cult/sound/machinery/ocularwarden-target.ogg', 60, TRUE) + playsound(src, 'modular_nova/modules/clock_cult/sound/machinery/ocularwarden-target.ogg', 60, TRUE) var/mob/living/target = pick(valid_targets) if(!target) @@ -66,7 +66,7 @@ new /obj/effect/temp_visual/ratvar/ocular_warden(get_turf(target)) new /obj/effect/temp_visual/ratvar/ocular_warden(get_turf(src)) - playsound(target, pick('modular_skyrat/modules/clock_cult/sound/machinery/ocularwarden-dot1.ogg', 'modular_skyrat/modules/clock_cult/sound/machinery/ocularwarden-dot2.ogg'), 60, TRUE) + playsound(target, pick('modular_nova/modules/clock_cult/sound/machinery/ocularwarden-dot1.ogg', 'modular_nova/modules/clock_cult/sound/machinery/ocularwarden-dot2.ogg'), 60, TRUE) COOLDOWN_START(src, fire_cooldown, FIRE_DELAY) diff --git a/modular_skyrat/modules/clock_cult/code/structures/prosperity_prism.dm b/modular_nova/modules/clock_cult/code/structures/prosperity_prism.dm similarity index 96% rename from modular_skyrat/modules/clock_cult/code/structures/prosperity_prism.dm rename to modular_nova/modules/clock_cult/code/structures/prosperity_prism.dm index a3db1b5ad469d3..6d085454a79770 100644 --- a/modular_skyrat/modules/clock_cult/code/structures/prosperity_prism.dm +++ b/modular_nova/modules/clock_cult/code/structures/prosperity_prism.dm @@ -31,7 +31,6 @@ possible_cultist.adjustBruteLoss(-2.5 * seconds_per_tick) possible_cultist.adjustFireLoss(-2.5 * seconds_per_tick) possible_cultist.adjustOxyLoss(-2.5 * seconds_per_tick) - possible_cultist.adjustCloneLoss(-1 * seconds_per_tick) new /obj/effect/temp_visual/heal(get_turf(possible_cultist), "#45dd8a") diff --git a/modular_skyrat/modules/clock_cult/code/structures/sigil/_sigil.dm b/modular_nova/modules/clock_cult/code/structures/sigil/_sigil.dm similarity index 98% rename from modular_skyrat/modules/clock_cult/code/structures/sigil/_sigil.dm rename to modular_nova/modules/clock_cult/code/structures/sigil/_sigil.dm index b1b136e2e0171c..5f3c31ed8e66f6 100644 --- a/modular_skyrat/modules/clock_cult/code/structures/sigil/_sigil.dm +++ b/modular_nova/modules/clock_cult/code/structures/sigil/_sigil.dm @@ -7,7 +7,7 @@ name = "sigil" desc = "It's a sigil that does something." max_integrity = 10 - icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_effects.dmi' + icon = 'modular_nova/modules/clock_cult/icons/clockwork_effects.dmi' icon_state = "sigilvitality" density = FALSE alpha = 90 diff --git a/modular_skyrat/modules/clock_cult/code/structures/sigil/sigil_research.dm b/modular_nova/modules/clock_cult/code/structures/sigil/sigil_research.dm similarity index 92% rename from modular_skyrat/modules/clock_cult/code/structures/sigil/sigil_research.dm rename to modular_nova/modules/clock_cult/code/structures/sigil/sigil_research.dm index 331eeb681b778c..8e4f0b802b40a8 100644 --- a/modular_skyrat/modules/clock_cult/code/structures/sigil/sigil_research.dm +++ b/modular_nova/modules/clock_cult/code/structures/sigil/sigil_research.dm @@ -4,7 +4,7 @@ name = "large sigil" desc = "A very large, glowing sigil." max_integrity = 10 - icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_effects_96.dmi' + icon = 'modular_nova/modules/clock_cult/icons/clockwork_effects_96.dmi' icon_state = "research_sigil" resistance_flags = INDESTRUCTIBLE can_dispel_by_hand = FALSE diff --git a/modular_skyrat/modules/clock_cult/code/structures/sigil/sigil_transmission.dm b/modular_nova/modules/clock_cult/code/structures/sigil/sigil_transmission.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/structures/sigil/sigil_transmission.dm rename to modular_nova/modules/clock_cult/code/structures/sigil/sigil_transmission.dm diff --git a/modular_skyrat/modules/clock_cult/code/structures/sigil/vitality_sigil.dm b/modular_nova/modules/clock_cult/code/structures/sigil/vitality_sigil.dm similarity index 87% rename from modular_skyrat/modules/clock_cult/code/structures/sigil/vitality_sigil.dm rename to modular_nova/modules/clock_cult/code/structures/sigil/vitality_sigil.dm index 19e41c0ba054ff..f76096dc7b7d8e 100644 --- a/modular_skyrat/modules/clock_cult/code/structures/sigil/vitality_sigil.dm +++ b/modular_nova/modules/clock_cult/code/structures/sigil/vitality_sigil.dm @@ -40,16 +40,12 @@ affected_mob.Paralyze(1 SECONDS) - var/before_cloneloss = affected_mob.getCloneLoss() - affected_mob.adjustCloneLoss(20, TRUE, TRUE) - var/after_cloneloss = affected_mob.getCloneLoss() - - if(before_cloneloss == after_cloneloss) + if(!affected_mob.adjustBruteLoss(20, updating_health = TRUE, forced = TRUE)) visible_message(span_clockred("[src] fails to siphon [affected_mob]'s spirit!")) return - playsound(loc, 'modular_skyrat/modules/clock_cult/sound/magic/ratvar_attack.ogg', 40) - if((affected_mob.stat == DEAD) || (affected_mob.getCloneLoss() >= affected_mob.maxHealth)) + playsound(loc, 'modular_nova/modules/clock_cult/sound/magic/ratvar_attack.ogg', 40) + if((affected_mob.stat == DEAD) || (affected_mob.getBruteLoss() >= affected_mob.maxHealth)) affected_mob.do_jitter_animation() affected_mob.death() playsound(loc, 'sound/magic/exit_blood.ogg', 60) diff --git a/modular_skyrat/modules/clock_cult/code/structures/technologists_lectern.dm b/modular_nova/modules/clock_cult/code/structures/technologists_lectern.dm similarity index 94% rename from modular_skyrat/modules/clock_cult/code/structures/technologists_lectern.dm rename to modular_nova/modules/clock_cult/code/structures/technologists_lectern.dm index 01ce5c1a3093f0..fbbb8de5e4f433 100644 --- a/modular_skyrat/modules/clock_cult/code/structures/technologists_lectern.dm +++ b/modular_nova/modules/clock_cult/code/structures/technologists_lectern.dm @@ -65,8 +65,11 @@ primary_researcher = FALSE log_game("A research ritual of [selected_research] was cancelled by deconstruction of [src].") send_clock_message(null, "A research ritual has been disrupted in [get_area(src)]! All research data has been lost.", msg_ghosts = FALSE) - notify_ghosts("A research ritual was disrupted in [get_area(src)]", source = get_turf(src), action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Research ritual cancelled") - + notify_ghosts("A research ritual was disrupted in [get_area(src)]", + source = get_turf(src), + notify_flags = NOTIFY_CATEGORY_NOFLASH, + header = "Research ritual cancelled", + ) return ..() @@ -251,7 +254,7 @@ . += list(list( "name" = initial(type.name), "icon" = sanitize_css_class_name(initial(type.button_icon_state)), - "icon2" = sanitize_css_class_name("modular_skyrat/modules/clock_cult/icons/actions_clock.dmi[initial(type.button_icon_state)]"), + "icon2" = sanitize_css_class_name("modular_nova/modules/clock_cult/icons/actions_clock.dmi[initial(type.button_icon_state)]"), )) return . @@ -292,10 +295,14 @@ AddComponent(/datum/component/brass_spreader, range = 6) - playsound(target_turf, 'modular_skyrat/modules/clock_cult/sound/machinery/ark_deathrattle.ogg', 80, FALSE, pressure_affected = FALSE) + playsound(target_turf, 'modular_nova/modules/clock_cult/sound/machinery/ark_deathrattle.ogg', 80, FALSE, pressure_affected = FALSE) research_sigil = new(target_turf) send_clock_message(null, "A research ritual has begun in [get_area(src)], ensure nobody stops it until it is completed in [DisplayTimeText(selected_research.time_to_research)]!", msg_ghosts = FALSE) - notify_ghosts("[owner] has begun a research ritual in [get_area(src)]", source = src, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Research ritual") + notify_ghosts("[owner] has begun a research ritual in [get_area(src)]", + source = src, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + header = "Research ritual" + ) log_game("[owner] began a research ritual of [selected_research.name] in [get_area(src)].") research_timer_id = addtimer(CALLBACK(src, PROC_REF(finish_research), owner), selected_research.time_to_research, TIMER_STOPPABLE) @@ -327,7 +334,7 @@ else message += "very far, to your [dir2text(dir)]!" - living_mob.playsound_local(get_turf(src), 'modular_skyrat/modules/clock_cult/sound/machinery/research_notice.ogg', volume, FALSE, pressure_affected = FALSE) + living_mob.playsound_local(get_turf(src), 'modular_nova/modules/clock_cult/sound/machinery/research_notice.ogg', volume, FALSE, pressure_affected = FALSE) to_chat(living_mob, span_brass(message)) @@ -337,7 +344,11 @@ return send_clock_message(null, "The research ritual in [get_area(src)] has completed, rejoice!", msg_ghosts = FALSE) - notify_ghosts("A research ritual in [get_area(src)] has been completed", source = src, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Research ritual completed") + notify_ghosts("A research ritual in [get_area(src)] has been completed", + source = src, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + header = "Research ritual completed", + ) log_game("Finished a research ritual of [selected_research.name] in [get_area(src)].") researching = FALSE @@ -368,7 +379,7 @@ switch(side_effect_num) if(1 to 10) // Cult-ify everything nearby - playsound(src, 'modular_skyrat/modules/clock_cult/sound/machinery/ark_scream.ogg', 100, FALSE, pressure_affected = FALSE) + playsound(src, 'modular_nova/modules/clock_cult/sound/machinery/ark_scream.ogg', 100, FALSE, pressure_affected = FALSE) for(var/atom/nearby_atom in range(8)) if(istype(nearby_atom, /turf/open/floor)) var/turf/floor_tile = nearby_atom @@ -417,7 +428,7 @@ apc_loop: for(var/obj/machinery/power/apc/controller as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/power/apc)) var/area/apc_area = get_area(controller) // make sure that no "critical" APCs lose their power (SM, namely) - for(var/turf/turf as anything in apc_area.contained_turfs) + for(var/turf/turf as anything in apc_area.get_contained_turfs()) for(var/obj/machinery/depowered_machinery in turf) if(depowered_machinery.critical_machine) continue apc_loop @@ -448,7 +459,7 @@ /obj/effect/lectern_light - icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi' + icon = 'modular_nova/modules/clock_cult/icons/clockwork_objects.dmi' icon_state = "lectern_closed" pixel_y = 10 layer = FLY_LAYER diff --git a/modular_skyrat/modules/clock_cult/code/structures/tinkerers_cache.dm b/modular_nova/modules/clock_cult/code/structures/tinkerers_cache.dm similarity index 96% rename from modular_skyrat/modules/clock_cult/code/structures/tinkerers_cache.dm rename to modular_nova/modules/clock_cult/code/structures/tinkerers_cache.dm index 898965615d9a69..cde524aedb93e3 100644 --- a/modular_skyrat/modules/clock_cult/code/structures/tinkerers_cache.dm +++ b/modular_nova/modules/clock_cult/code/structures/tinkerers_cache.dm @@ -70,7 +70,7 @@ var/crafting_item = initial(chosen_item.item_path) new crafting_item(get_turf(src)) - playsound(src, 'modular_skyrat/modules/clock_cult/sound/machinery/steam_whoosh.ogg', 50) + playsound(src, 'modular_nova/modules/clock_cult/sound/machinery/steam_whoosh.ogg', 50) to_chat(user, span_brass("You craft [initial(chosen_item.name)] to near perfection, [src] cooling down. [initial(chosen_item.time_delay_mult) ? "It will be available in [DisplayTimeText(COOLDOWN_TIMELEFT(src, use_cooldown))]." : "It is ready to use again."]")) @@ -130,7 +130,7 @@ item_path = /obj/item/gun/ballistic/rifle/lionhunter/clockwork power_use = 500 research_locked = TRUE - research_icon = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_weapons.dmi' + research_icon = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_weapons.dmi' research_icon_state = "clockwork_rifle_research" /datum/tinker_cache_item/clockwork_rifle_ammo diff --git a/modular_skyrat/modules/clock_cult/code/structures/traps/recievers/flipper.dm b/modular_nova/modules/clock_cult/code/structures/traps/recievers/flipper.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/structures/traps/recievers/flipper.dm rename to modular_nova/modules/clock_cult/code/structures/traps/recievers/flipper.dm diff --git a/modular_skyrat/modules/clock_cult/code/structures/traps/recievers/skewer.dm b/modular_nova/modules/clock_cult/code/structures/traps/recievers/skewer.dm similarity index 93% rename from modular_skyrat/modules/clock_cult/code/structures/traps/recievers/skewer.dm rename to modular_nova/modules/clock_cult/code/structures/traps/recievers/skewer.dm index d97486210eb433..0865b73c50f95d 100644 --- a/modular_skyrat/modules/clock_cult/code/structures/traps/recievers/skewer.dm +++ b/modular_nova/modules/clock_cult/code/structures/traps/recievers/skewer.dm @@ -51,7 +51,7 @@ target_stabbed = TRUE to_chat(stabbed_mob, span_userdanger("You are impaled by [src]!")) stabbed_mob.emote("scream") - playsound(src, 'modular_skyrat/modules/clock_cult/sound/machinery/brass_skewer.ogg') + playsound(src, 'modular_nova/modules/clock_cult/sound/machinery/brass_skewer.ogg') stabbed_mob.apply_damage(SKEWER_DAMAGE, BRUTE, BODY_ZONE_CHEST) if(ishuman(stabbed_mob)) @@ -60,7 +60,7 @@ if(target_stabbed) if(!stab_overlay) - stab_overlay = mutable_appearance('modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi', "brass_skewer_pokeybit", layer = ABOVE_MOB_LAYER) + stab_overlay = mutable_appearance('modular_nova/modules/clock_cult/icons/clockwork_objects.dmi', "brass_skewer_pokeybit", layer = ABOVE_MOB_LAYER) add_overlay(stab_overlay) diff --git a/modular_skyrat/modules/clock_cult/code/structures/traps/senders/delay.dm b/modular_nova/modules/clock_cult/code/structures/traps/senders/delay.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/structures/traps/senders/delay.dm rename to modular_nova/modules/clock_cult/code/structures/traps/senders/delay.dm diff --git a/modular_skyrat/modules/clock_cult/code/structures/traps/senders/lever.dm b/modular_nova/modules/clock_cult/code/structures/traps/senders/lever.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/structures/traps/senders/lever.dm rename to modular_nova/modules/clock_cult/code/structures/traps/senders/lever.dm diff --git a/modular_skyrat/modules/clock_cult/code/structures/traps/senders/pressure_sensor.dm b/modular_nova/modules/clock_cult/code/structures/traps/senders/pressure_sensor.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/structures/traps/senders/pressure_sensor.dm rename to modular_nova/modules/clock_cult/code/structures/traps/senders/pressure_sensor.dm diff --git a/modular_skyrat/modules/clock_cult/code/structures/traps/trap.dm b/modular_nova/modules/clock_cult/code/structures/traps/trap.dm similarity index 95% rename from modular_skyrat/modules/clock_cult/code/structures/traps/trap.dm rename to modular_nova/modules/clock_cult/code/structures/traps/trap.dm index aec6c553653be0..c891f4c6204338 100644 --- a/modular_skyrat/modules/clock_cult/code/structures/traps/trap.dm +++ b/modular_nova/modules/clock_cult/code/structures/traps/trap.dm @@ -2,7 +2,7 @@ /obj/item/clockwork/trap_placer name = "trap" desc = "don't trust it" - icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi' + icon = 'modular_nova/modules/clock_cult/icons/clockwork_objects.dmi' w_class = WEIGHT_CLASS_HUGE /// The path of the trap to make when this is set down var/result_path = /obj/structure/destructible/clockwork/trap @@ -45,7 +45,7 @@ /obj/item/wallframe/clocktrap name = "clockwork trap item" desc = "It's a... Wait what?" - icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi' + icon = 'modular_nova/modules/clock_cult/icons/clockwork_objects.dmi' pixel_shift = 24 w_class = WEIGHT_CLASS_HUGE result_path = /obj/structure/destructible/clockwork/trap @@ -62,7 +62,7 @@ /obj/structure/destructible/clockwork/trap name = "clockwork trap item" desc = "Probably doesn't do much." - icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi' + icon = 'modular_nova/modules/clock_cult/icons/clockwork_objects.dmi' density = FALSE layer = LOW_OBJ_LAYER break_message = span_warning("The intricate looking device falls apart.") diff --git a/modular_skyrat/modules/clock_cult/code/temp_visual.dm b/modular_nova/modules/clock_cult/code/temp_visual.dm similarity index 94% rename from modular_skyrat/modules/clock_cult/code/temp_visual.dm rename to modular_nova/modules/clock_cult/code/temp_visual.dm index 4bf7b425cd3913..53616a5dda7fe3 100644 --- a/modular_skyrat/modules/clock_cult/code/temp_visual.dm +++ b/modular_nova/modules/clock_cult/code/temp_visual.dm @@ -3,7 +3,7 @@ //temporary visual effects(/obj/effect/temp_visual) used by clock stuff /obj/effect/temp_visual/ratvar name = "ratvar's light" - icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_effects.dmi' + icon = 'modular_nova/modules/clock_cult/icons/clockwork_effects.dmi' duration = 8 randomdir = FALSE layer = ABOVE_NORMAL_TURF_LAYER @@ -84,7 +84,7 @@ /obj/effect/temp_visual/ratvar/belligerent layer = ABOVE_MOB_LAYER - icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi' + icon = 'modular_nova/modules/clock_cult/icons/clockwork_objects.dmi' icon_state = "belligerent_eye" pixel_y = 20 duration = 2 SECONDS @@ -127,7 +127,7 @@ animate(src, alpha = 0, time = duration, easing = EASE_OUT) /obj/effect/temp_visual/ratvar/component - icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi' + icon = 'modular_nova/modules/clock_cult/icons/clockwork_objects.dmi' icon_state = "belligerent_eye" layer = ABOVE_MOB_LAYER duration = 1 SECONDS @@ -202,7 +202,7 @@ var/turf/cardinal_step = get_step(src, cardinal) new/obj/effect/temp_visual/steam(cardinal_step, cardinal) - playsound(src, 'modular_skyrat/modules/clock_cult/sound/machinery/steam_whoosh.ogg', 30) + playsound(src, 'modular_nova/modules/clock_cult/sound/machinery/steam_whoosh.ogg', 30) return INITIALIZE_HINT_QDEL /obj/effect/temp_visual/ratvar/constructing_effect diff --git a/modular_skyrat/modules/clock_cult/code/turf.dm b/modular_nova/modules/clock_cult/code/turf.dm similarity index 100% rename from modular_skyrat/modules/clock_cult/code/turf.dm rename to modular_nova/modules/clock_cult/code/turf.dm diff --git a/modular_skyrat/modules/clock_cult/icons/actions_clock.dmi b/modular_nova/modules/clock_cult/icons/actions_clock.dmi similarity index 100% rename from modular_skyrat/modules/clock_cult/icons/actions_clock.dmi rename to modular_nova/modules/clock_cult/icons/actions_clock.dmi diff --git a/modular_skyrat/modules/clock_cult/icons/background_clock.dmi b/modular_nova/modules/clock_cult/icons/background_clock.dmi similarity index 100% rename from modular_skyrat/modules/clock_cult/icons/background_clock.dmi rename to modular_nova/modules/clock_cult/icons/background_clock.dmi diff --git a/modular_skyrat/modules/clock_cult/icons/clockwork_effects.dmi b/modular_nova/modules/clock_cult/icons/clockwork_effects.dmi similarity index 100% rename from modular_skyrat/modules/clock_cult/icons/clockwork_effects.dmi rename to modular_nova/modules/clock_cult/icons/clockwork_effects.dmi diff --git a/modular_skyrat/modules/clock_cult/icons/clockwork_effects_96.dmi b/modular_nova/modules/clock_cult/icons/clockwork_effects_96.dmi similarity index 100% rename from modular_skyrat/modules/clock_cult/icons/clockwork_effects_96.dmi rename to modular_nova/modules/clock_cult/icons/clockwork_effects_96.dmi diff --git a/modular_skyrat/modules/clock_cult/icons/clockwork_garb.dmi b/modular_nova/modules/clock_cult/icons/clockwork_garb.dmi similarity index 100% rename from modular_skyrat/modules/clock_cult/icons/clockwork_garb.dmi rename to modular_nova/modules/clock_cult/icons/clockwork_garb.dmi diff --git a/modular_skyrat/modules/clock_cult/icons/clockwork_garb_worn.dmi b/modular_nova/modules/clock_cult/icons/clockwork_garb_worn.dmi similarity index 100% rename from modular_skyrat/modules/clock_cult/icons/clockwork_garb_worn.dmi rename to modular_nova/modules/clock_cult/icons/clockwork_garb_worn.dmi diff --git a/modular_skyrat/modules/clock_cult/icons/clockwork_mobs.dmi b/modular_nova/modules/clock_cult/icons/clockwork_mobs.dmi similarity index 100% rename from modular_skyrat/modules/clock_cult/icons/clockwork_mobs.dmi rename to modular_nova/modules/clock_cult/icons/clockwork_mobs.dmi diff --git a/modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi b/modular_nova/modules/clock_cult/icons/clockwork_objects.dmi similarity index 100% rename from modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi rename to modular_nova/modules/clock_cult/icons/clockwork_objects.dmi diff --git a/modular_skyrat/modules/clock_cult/icons/misc.dmi b/modular_nova/modules/clock_cult/icons/misc.dmi similarity index 100% rename from modular_skyrat/modules/clock_cult/icons/misc.dmi rename to modular_nova/modules/clock_cult/icons/misc.dmi diff --git a/modular_skyrat/modules/clock_cult/icons/projectiles.dmi b/modular_nova/modules/clock_cult/icons/projectiles.dmi similarity index 100% rename from modular_skyrat/modules/clock_cult/icons/projectiles.dmi rename to modular_nova/modules/clock_cult/icons/projectiles.dmi diff --git a/modular_skyrat/modules/clock_cult/icons/speech.dmi b/modular_nova/modules/clock_cult/icons/speech.dmi similarity index 100% rename from modular_skyrat/modules/clock_cult/icons/speech.dmi rename to modular_nova/modules/clock_cult/icons/speech.dmi diff --git a/modular_skyrat/modules/clock_cult/icons/tools.dmi b/modular_nova/modules/clock_cult/icons/tools.dmi similarity index 100% rename from modular_skyrat/modules/clock_cult/icons/tools.dmi rename to modular_nova/modules/clock_cult/icons/tools.dmi diff --git a/modular_skyrat/modules/clock_cult/icons/weapons/ammo.dmi b/modular_nova/modules/clock_cult/icons/weapons/ammo.dmi similarity index 100% rename from modular_skyrat/modules/clock_cult/icons/weapons/ammo.dmi rename to modular_nova/modules/clock_cult/icons/weapons/ammo.dmi diff --git a/modular_skyrat/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi b/modular_nova/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi similarity index 100% rename from modular_skyrat/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi rename to modular_nova/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi diff --git a/modular_skyrat/modules/clock_cult/icons/weapons/clockwork_righthand.dmi b/modular_nova/modules/clock_cult/icons/weapons/clockwork_righthand.dmi similarity index 100% rename from modular_skyrat/modules/clock_cult/icons/weapons/clockwork_righthand.dmi rename to modular_nova/modules/clock_cult/icons/weapons/clockwork_righthand.dmi diff --git a/modular_skyrat/modules/clock_cult/icons/weapons/clockwork_weapons.dmi b/modular_nova/modules/clock_cult/icons/weapons/clockwork_weapons.dmi similarity index 100% rename from modular_skyrat/modules/clock_cult/icons/weapons/clockwork_weapons.dmi rename to modular_nova/modules/clock_cult/icons/weapons/clockwork_weapons.dmi diff --git a/modular_skyrat/modules/clock_cult/icons/weapons/clockwork_weapons_40x32.dmi b/modular_nova/modules/clock_cult/icons/weapons/clockwork_weapons_40x32.dmi similarity index 100% rename from modular_skyrat/modules/clock_cult/icons/weapons/clockwork_weapons_40x32.dmi rename to modular_nova/modules/clock_cult/icons/weapons/clockwork_weapons_40x32.dmi diff --git a/modular_skyrat/modules/clock_cult/sound/machinery/ark_deathrattle.ogg b/modular_nova/modules/clock_cult/sound/machinery/ark_deathrattle.ogg similarity index 100% rename from modular_skyrat/modules/clock_cult/sound/machinery/ark_deathrattle.ogg rename to modular_nova/modules/clock_cult/sound/machinery/ark_deathrattle.ogg diff --git a/modular_skyrat/modules/clock_cult/sound/machinery/ark_scream.ogg b/modular_nova/modules/clock_cult/sound/machinery/ark_scream.ogg similarity index 100% rename from modular_skyrat/modules/clock_cult/sound/machinery/ark_scream.ogg rename to modular_nova/modules/clock_cult/sound/machinery/ark_scream.ogg diff --git a/modular_skyrat/modules/clock_cult/sound/machinery/brass_skewer.ogg b/modular_nova/modules/clock_cult/sound/machinery/brass_skewer.ogg similarity index 100% rename from modular_skyrat/modules/clock_cult/sound/machinery/brass_skewer.ogg rename to modular_nova/modules/clock_cult/sound/machinery/brass_skewer.ogg diff --git a/modular_skyrat/modules/clock_cult/sound/machinery/integration_cog_install.ogg b/modular_nova/modules/clock_cult/sound/machinery/integration_cog_install.ogg similarity index 100% rename from modular_skyrat/modules/clock_cult/sound/machinery/integration_cog_install.ogg rename to modular_nova/modules/clock_cult/sound/machinery/integration_cog_install.ogg diff --git a/modular_skyrat/modules/clock_cult/sound/machinery/ocularwarden-dot1.ogg b/modular_nova/modules/clock_cult/sound/machinery/ocularwarden-dot1.ogg similarity index 100% rename from modular_skyrat/modules/clock_cult/sound/machinery/ocularwarden-dot1.ogg rename to modular_nova/modules/clock_cult/sound/machinery/ocularwarden-dot1.ogg diff --git a/modular_skyrat/modules/clock_cult/sound/machinery/ocularwarden-dot2.ogg b/modular_nova/modules/clock_cult/sound/machinery/ocularwarden-dot2.ogg similarity index 100% rename from modular_skyrat/modules/clock_cult/sound/machinery/ocularwarden-dot2.ogg rename to modular_nova/modules/clock_cult/sound/machinery/ocularwarden-dot2.ogg diff --git a/modular_skyrat/modules/clock_cult/sound/machinery/ocularwarden-target.ogg b/modular_nova/modules/clock_cult/sound/machinery/ocularwarden-target.ogg similarity index 100% rename from modular_skyrat/modules/clock_cult/sound/machinery/ocularwarden-target.ogg rename to modular_nova/modules/clock_cult/sound/machinery/ocularwarden-target.ogg diff --git a/modular_skyrat/modules/clock_cult/sound/machinery/research_notice.ogg b/modular_nova/modules/clock_cult/sound/machinery/research_notice.ogg similarity index 100% rename from modular_skyrat/modules/clock_cult/sound/machinery/research_notice.ogg rename to modular_nova/modules/clock_cult/sound/machinery/research_notice.ogg diff --git a/modular_skyrat/modules/clock_cult/sound/machinery/steam_whoosh.ogg b/modular_nova/modules/clock_cult/sound/machinery/steam_whoosh.ogg similarity index 100% rename from modular_skyrat/modules/clock_cult/sound/machinery/steam_whoosh.ogg rename to modular_nova/modules/clock_cult/sound/machinery/steam_whoosh.ogg diff --git a/modular_skyrat/modules/clock_cult/sound/magic/anima_fragment_attack.ogg b/modular_nova/modules/clock_cult/sound/magic/anima_fragment_attack.ogg similarity index 100% rename from modular_skyrat/modules/clock_cult/sound/magic/anima_fragment_attack.ogg rename to modular_nova/modules/clock_cult/sound/magic/anima_fragment_attack.ogg diff --git a/modular_skyrat/modules/clock_cult/sound/magic/ratvar_attack.ogg b/modular_nova/modules/clock_cult/sound/magic/ratvar_attack.ogg similarity index 100% rename from modular_skyrat/modules/clock_cult/sound/magic/ratvar_attack.ogg rename to modular_nova/modules/clock_cult/sound/magic/ratvar_attack.ogg diff --git a/modular_skyrat/modules/clock_cult/sound/magic/scripture_tier_up.ogg b/modular_nova/modules/clock_cult/sound/magic/scripture_tier_up.ogg similarity index 100% rename from modular_skyrat/modules/clock_cult/sound/magic/scripture_tier_up.ogg rename to modular_nova/modules/clock_cult/sound/magic/scripture_tier_up.ogg diff --git a/modular_skyrat/modules/clock_cult/sound/ocularwarden-dot1.ogg b/modular_nova/modules/clock_cult/sound/ocularwarden-dot1.ogg similarity index 100% rename from modular_skyrat/modules/clock_cult/sound/ocularwarden-dot1.ogg rename to modular_nova/modules/clock_cult/sound/ocularwarden-dot1.ogg diff --git a/modular_skyrat/modules/clock_cult/sound/ocularwarden-target.ogg b/modular_nova/modules/clock_cult/sound/ocularwarden-target.ogg similarity index 100% rename from modular_skyrat/modules/clock_cult/sound/ocularwarden-target.ogg rename to modular_nova/modules/clock_cult/sound/ocularwarden-target.ogg diff --git a/modular_skyrat/modules/clock_cult/sound/scripture_tier_up.ogg b/modular_nova/modules/clock_cult/sound/scripture_tier_up.ogg similarity index 100% rename from modular_skyrat/modules/clock_cult/sound/scripture_tier_up.ogg rename to modular_nova/modules/clock_cult/sound/scripture_tier_up.ogg diff --git a/modular_nova/modules/clothing_improvements/code/chaplain.dm b/modular_nova/modules/clothing_improvements/code/chaplain.dm new file mode 100644 index 00000000000000..4f7c9b9dd38494 --- /dev/null +++ b/modular_nova/modules/clothing_improvements/code/chaplain.dm @@ -0,0 +1,12 @@ +// UNIQUE RENAME: allows people to customize these with pens to suit their character's flavour +/obj/item/clothing/suit/chaplainsuit + obj_flags = UNIQUE_RENAME + +/obj/item/clothing/suit/hooded/chaplain_hoodie + obj_flags = UNIQUE_RENAME + +/obj/item/clothing/head/helmet/chaplain + obj_flags = UNIQUE_RENAME + +/obj/item/clothing/head/hooded/chaplain_hood + obj_flags = UNIQUE_RENAME diff --git a/modular_nova/modules/clothing_improvements/code/holsters.dm b/modular_nova/modules/clothing_improvements/code/holsters.dm new file mode 100644 index 00000000000000..d02ab159bd2e83 --- /dev/null +++ b/modular_nova/modules/clothing_improvements/code/holsters.dm @@ -0,0 +1,33 @@ +/obj/item/storage/belt/holster/pre_attack_secondary(atom/target, mob/living/user, params) + . = ..() + if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) + return + . = SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + // Right clicking your holster on a suit-slot piece of clothing will try to fit it for that individual item. + // This will let you wear it in its suit slot. Foley workaround for mass Initialize() issues. Also, it's kinda cool. + if (!istype(target, /obj/item/clothing/suit)) + balloon_alert(user, "can't be adjusted to fit this!") + return + + var/obj/item/clothing/suit/clothing_to_mod = target + if (/obj/item/storage/belt/holster in clothing_to_mod.allowed) + balloon_alert(user, "already adjusted to fit!") + return + + user.visible_message(span_notice("[user] begins adjusting [src] to fit properly upon [clothing_to_mod]..."), span_notice("You begin adjusting [src] to fit properly upon [clothing_to_mod]...")) + + if (do_after(user, 1.5 SECONDS)) + clothing_to_mod.allowed += list(/obj/item/storage/belt/holster) + playsound(user.loc, 'sound/items/equip/toolbelt_equip.ogg', 50) + balloon_alert(user, "adjusted to fit!") + else + balloon_alert(user, "interrupted!") + +/obj/item/storage/belt/holster/examine(mob/user) + . = ..() + . += span_notice("You can <b>right click</b> on a piece of suit-slot clothing with the holster to try and adjust it to fit in its storage slot.") + +/obj/item/storage/belt/holster + // use a pen to rename your holster to something based (or cringe if that's your jam) + obj_flags = UNIQUE_RENAME diff --git a/modular_nova/modules/colony_fabricator/code/appliances/chem_machines.dm b/modular_nova/modules/colony_fabricator/code/appliances/chem_machines.dm new file mode 100644 index 00000000000000..63e0831f6d3d98 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/appliances/chem_machines.dm @@ -0,0 +1,131 @@ +// Machine that makes water and nothing else + +/obj/machinery/plumbing/synthesizer/water_synth + name = "water synthesizer" + desc = "An infinitely useful device for those finding themselves in a frontier without a stable source of water. \ + Using a simplified version of the chemistry dispenser's synthesizer process, it can create water out of nothing \ + but good old electricity." + icon = 'modular_nova/modules/colony_fabricator/icons/chemistry_machines.dmi' + icon_state = "water_synth" + anchored = FALSE + /// Reagents that this can dispense, overrides the default list on init + var/static/list/synthesizable_reagents = list( + /datum/reagent/water, + ) + +/obj/machinery/plumbing/synthesizer/water_synth/Initialize(mapload, bolt, layer) + . = ..() + dispensable_reagents = synthesizable_reagents + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + +// Deployable item for cargo for the water synth + +/obj/item/flatpacked_machine/water_synth + name = "water synthesizer parts kit" + icon = 'modular_nova/modules/colony_fabricator/icons/chemistry_machines.dmi' + icon_state = "water_synth_parts" + w_class = WEIGHT_CLASS_NORMAL + type_to_deploy = /obj/machinery/plumbing/synthesizer/water_synth + deploy_time = 2 SECONDS + +// Machine that makes botany nutrients for hydroponics farming + +/obj/machinery/plumbing/synthesizer/colony_hydroponics + name = "hydroponics chemical synthesizer" + desc = "An infinitely useful device for those finding themselves in a frontier without a stable source of nutrients for crops. \ + Using a simplified version of the chemistry dispenser's synthesizer process, it can create hydroponics nutrients out of nothing \ + but good old electricity." + icon = 'modular_nova/modules/colony_fabricator/icons/chemistry_machines.dmi' + icon_state = "hydro_synth" + anchored = FALSE + /// Reagents that this can dispense, overrides the default list on init + var/static/list/synthesizable_reagents = list( + /datum/reagent/plantnutriment/eznutriment, + /datum/reagent/plantnutriment/left4zednutriment, + /datum/reagent/plantnutriment/robustharvestnutriment, + /datum/reagent/plantnutriment/endurogrow, + /datum/reagent/plantnutriment/liquidearthquake, + /datum/reagent/toxin/plantbgone/weedkiller, + /datum/reagent/toxin/pestkiller, + ) + +/obj/machinery/plumbing/synthesizer/colony_hydroponics/Initialize(mapload, bolt, layer) + . = ..() + dispensable_reagents = synthesizable_reagents + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + +// Deployable item for cargo for the hydro synth + +/obj/item/flatpacked_machine/hydro_synth + name = "hydroponics chemical synthesizer parts kit" + icon = 'modular_nova/modules/colony_fabricator/icons/chemistry_machines.dmi' + icon_state = "hydro_synth_parts" + w_class = WEIGHT_CLASS_NORMAL + type_to_deploy = /obj/machinery/plumbing/synthesizer/colony_hydroponics + deploy_time = 2 SECONDS + +// Chem dispenser with a limited range of thematic reagents to dispense + +/obj/machinery/chem_dispenser/frontier_appliance + name = "sustenance dispenser" + desc = "Creates and dispenses a small pre-defined set of chemicals and other liquids for the convenience of those typically on the frontier. \ + While the machine is loved by many, it also has a reputation for making some of the worst coffees this side of the galaxy. Use at your own risk." + icon = 'modular_nova/modules/colony_fabricator/icons/chemistry_machines.dmi' + icon_state = "dispenser" + base_icon_state = "dispenser" + pass_flags = PASSTABLE + anchored_tabletop_offset = 4 + anchored = FALSE + circuit = null + powerefficiency = 0.5 + recharge_amount = 50 + show_ph = FALSE + base_reagent_purity = 0.5 + // God's strongest coffee machine + dispensable_reagents = list( + /datum/reagent/water, + /datum/reagent/consumable/powdered_milk, + /datum/reagent/consumable/sugar, + /datum/reagent/consumable/powdered_lemonade, + /datum/reagent/consumable/powdered_coco, + /datum/reagent/consumable/powdered_coffee, + /datum/reagent/consumable/powdered_tea, + /datum/reagent/consumable/vanilla, + /datum/reagent/consumable/caramel, + /datum/reagent/consumable/korta_nectar, + /datum/reagent/consumable/korta_milk, + /datum/reagent/consumable/astrotame, + /datum/reagent/consumable/salt, + /datum/reagent/consumable/blackpepper, + /datum/reagent/consumable/nutraslop, + /datum/reagent/consumable/enzyme, + ) + /// Since we don't have a board to take from, we use this to give the dispenser a cell on spawning + var/cell_we_spawn_with = /obj/item/stock_parts/cell/crap/empty + +/obj/machinery/chem_dispenser/frontier_appliance/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + cell = new cell_we_spawn_with(src) + +/obj/machinery/chem_dispenser/frontier_appliance/display_beaker() + var/mutable_appearance/overlayed_beaker = beaker_overlay || mutable_appearance(icon, "disp_beaker") + return overlayed_beaker + +/obj/machinery/chem_dispenser/frontier_appliance/RefreshParts() + . = ..() + powerefficiency = 0.5 + recharge_amount = 50 + +/obj/machinery/chem_dispenser/frontier_appliance/default_deconstruction_crowbar() + return + +// Deployable item for cargo for the sustenance machine + +/obj/item/flatpacked_machine/sustenance_machine + name = "sustenance dispenser parts kit" + icon = 'modular_nova/modules/colony_fabricator/icons/chemistry_machines.dmi' + icon_state = "dispenser_parts" + w_class = WEIGHT_CLASS_NORMAL + type_to_deploy = /obj/machinery/chem_dispenser/frontier_appliance + deploy_time = 2 SECONDS diff --git a/modular_nova/modules/colony_fabricator/code/appliances/co2_cracker.dm b/modular_nova/modules/colony_fabricator/code/appliances/co2_cracker.dm new file mode 100644 index 00000000000000..51901079aed6d3 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/appliances/co2_cracker.dm @@ -0,0 +1,118 @@ +// We can't just use electrolyzer reactions, because that'd let electrolyzers do co2 cracking + +GLOBAL_LIST_INIT(cracker_reactions, cracker_reactions_list()) + +/// Global proc to build up the list of co2 cracker reactions +/proc/cracker_reactions_list() + var/list/built_reaction_list = list() + for(var/reaction_path in subtypesof(/datum/cracker_reaction)) + var/datum/cracker_reaction/reaction = new reaction_path() + + built_reaction_list[reaction.id] = reaction + + return built_reaction_list + +/datum/cracker_reaction + var/list/requirements + var/name = "reaction" + var/id = "r" + var/desc = "" + var/list/factor + +/// Called when the co2 cracker reaction is run, should be where the code for actually changing gasses around is run +/datum/cracker_reaction/proc/react(turf/location, datum/gas_mixture/air_mixture, working_power) + return + +/// Checks if this reaction can actually be run +/datum/cracker_reaction/proc/reaction_check(datum/gas_mixture/air_mixture) + var/temp = air_mixture.temperature + var/list/cached_gases = air_mixture.gases + if((requirements["MIN_TEMP"] && temp < requirements["MIN_TEMP"]) || (requirements["MAX_TEMP"] && temp > requirements["MAX_TEMP"])) + return FALSE + for(var/id in requirements) + if(id == "MIN_TEMP" || id == "MAX_TEMP") + continue + if(!cached_gases[id] || cached_gases[id][MOLES] < requirements[id]) + return FALSE + return TRUE + +/datum/cracker_reaction/co2_cracking + name = "CO2 Cracking" + id = "co2_cracking" + desc = "Conversion of CO2 into equal amounts of O2" + requirements = list( + /datum/gas/carbon_dioxide = MINIMUM_MOLE_COUNT, + ) + factor = list( + /datum/gas/carbon_dioxide = "1 mole of CO2 gets consumed", + /datum/gas/oxygen = "1 mole of O2 gets produced", + "Location" = "Can only happen on turfs with an active CO2 cracker.", + ) + +/datum/cracker_reaction/co2_cracking/react(turf/location, datum/gas_mixture/air_mixture, working_power) + var/old_heat_capacity = air_mixture.heat_capacity() + air_mixture.assert_gases(/datum/gas/water_vapor, /datum/gas/oxygen) + var/proportion = min(air_mixture.gases[/datum/gas/carbon_dioxide][MOLES] * INVERSE(2), (2.5 * (working_power ** 2))) + air_mixture.gases[/datum/gas/carbon_dioxide][MOLES] -= proportion + air_mixture.gases[/datum/gas/oxygen][MOLES] += proportion + var/new_heat_capacity = air_mixture.heat_capacity() + if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) + air_mixture.temperature = max(air_mixture.temperature * old_heat_capacity / new_heat_capacity, TCMB) + +// CO2 cracker machine itself + +/obj/machinery/electrolyzer/co2_cracker + name = "portable CO2 cracker" + desc = "A portable device that is the savior of many a colony on the frontier. Performing similarly to an electrolyzer, \ + it takes in nearby gasses and breaks them into different gasses. The big draw of this one? It can crack carbon dioxide \ + into breathable oxygen. Handy for places where CO2 is all too common, and oxygen is all too hard to find." + icon = 'modular_nova/modules/colony_fabricator/icons/portable_machines.dmi' + circuit = null + working_power = 1 + /// Soundloop for while the thermomachine is turned on + var/datum/looping_sound/conditioner_running/soundloop + +/obj/machinery/electrolyzer/co2_cracker/Initialize(mapload) + . = ..() + soundloop = new(src, FALSE) + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + +/obj/machinery/electrolyzer/co2_cracker/process_atmos() + if(on && !soundloop.loop_started) + soundloop.start() + else if(soundloop.loop_started) + soundloop.stop() + return ..() + +/obj/machinery/electrolyzer/co2_cracker/call_reactions(datum/gas_mixture/env) + for(var/reaction in GLOB.cracker_reactions) + var/datum/cracker_reaction/current_reaction = GLOB.cracker_reactions[reaction] + + if(!current_reaction.reaction_check(env)) + continue + + current_reaction.react(loc, env, working_power) + + env.garbage_collect() + +/obj/machinery/electrolyzer/co2_cracker/RefreshParts() + . = ..() + working_power = 2 + efficiency = 1 + +/obj/machinery/electrolyzer/co2_cracker/crowbar_act(mob/living/user, obj/item/tool) + return + +// "parts kit" for buying these from cargo + +/obj/item/flatpacked_machine/co2_cracker + name = "CO2 cracker parts kit" + icon = 'modular_nova/modules/colony_fabricator/icons/parts_kits.dmi' + icon_state = "co2_cracker" + type_to_deploy = /obj/machinery/electrolyzer/co2_cracker + deploy_time = 2 SECONDS + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, // We're gonna pretend plasma is the catalyst for co2 cracking + ) diff --git a/modular_nova/modules/colony_fabricator/code/appliances/foodricator.dm b/modular_nova/modules/colony_fabricator/code/appliances/foodricator.dm new file mode 100644 index 00000000000000..51274cb99a8de5 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/appliances/foodricator.dm @@ -0,0 +1,46 @@ +/obj/machinery/biogenerator/foodricator + name = "organic rations printer" + desc = "An advanced machine seen in frontier outposts and colonies capable of turning organic plant matter into \ + various foods or ingredients. The best friend of a chef where deliveries are inconsistent or simply don't exist. \ + Some of those that consume the food from this complain that the foods it makes have poor taste, though they must \ + not appreciate being able to eat steak and eggs for breakfast with a lack of any livestock at all in the colony." + icon = 'modular_nova/modules/colony_fabricator/icons/foodricator.dmi' + circuit = null + anchored = FALSE + pass_flags = PASSTABLE + efficiency = 1 + productivity = 2.5 + anchored_tabletop_offset = 8 + show_categories = list( + RND_CATEGORY_AKHTER_FOODRICATOR_INGREDIENTS, + RND_CATEGORY_AKHTER_FOODRICATOR_BAGS, + RND_CATEGORY_AKHTER_FOODRICATOR_SNACKS, + RND_CATEGORY_AKHTER_FOODRICATOR_UTENSILS, + RND_CATEGORY_AKHTER_SEEDS, + ) + +/obj/machinery/biogenerator/foodricator/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + +/obj/machinery/biogenerator/foodricator/RefreshParts() + . = ..() + efficiency = 1 + productivity = 3 + +/obj/machinery/biogenerator/foodricator/default_deconstruction_crowbar() + return + +// Deployable item for cargo for the rations printer + +/obj/item/flatpacked_machine/organics_ration_printer + name = "organic rations printer parts kit" + icon = 'modular_nova/modules/colony_fabricator/icons/foodricator.dmi' + icon_state = "biogenerator_parts" + type_to_deploy = /obj/machinery/biogenerator/foodricator + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/silver = SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) diff --git a/modular_nova/modules/colony_fabricator/code/appliances/recycler.dm b/modular_nova/modules/colony_fabricator/code/appliances/recycler.dm new file mode 100644 index 00000000000000..0ae0f867882581 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/appliances/recycler.dm @@ -0,0 +1,81 @@ +/obj/machinery/colony_recycler + name = "materials recycler" + desc = "A large crushing machine used to recycle small items inefficiently. Items are inserted by hand, rather than by belt. \ + Mind your fingers." + icon = 'modular_nova/modules/colony_fabricator/icons/portable_machines.dmi' + icon_state = "recycler" + anchored = FALSE + density = TRUE + circuit = null + /// The percentage of materials returned + var/amount_produced = 80 + /// The sound made when an item is eaten + var/item_recycle_sound = 'modular_nova/modules/reagent_forging/sound/forge.ogg' + /// The recycler's internal materials storage, for when items recycled don't produce enough to make a full sheet of that material + var/datum/component/material_container/materials + /// The list of all the materials we can recycle + var/static/list/allowed_materials = list( + /datum/material/iron, + /datum/material/glass, + /datum/material/silver, + /datum/material/plasma, + /datum/material/gold, + /datum/material/diamond, + /datum/material/plastic, + /datum/material/uranium, + /datum/material/bananium, + /datum/material/titanium, + /datum/material/bluespace, + ) + /// The item we turn into when repacked + var/repacked_type = /obj/item/flatpacked_machine/recycler + +/obj/machinery/colony_recycler/Initialize(mapload) + . = ..() + AddElement(/datum/element/repackable, repacked_type, 5 SECONDS) + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + materials = AddComponent( \ + /datum/component/material_container, \ + allowed_materials, \ + INFINITY, \ + MATCONTAINER_EXAMINE, \ + container_signals = list(COMSIG_MATCONTAINER_ITEM_CONSUMED = TYPE_PROC_REF(/obj/machinery/colony_recycler, has_eaten_materials)), \ + ) + +/obj/machinery/colony_recycler/Destroy() + materials = null + return ..() + +/obj/machinery/colony_recycler/examine(mob/user) + . = ..() + . += span_notice("Reclaiming <b>[amount_produced]%</b> of materials salvaged.") + . += span_notice("Can be <b>secured</b> with a <b>wrench</b> using <b>Right-Click</b>.") + +/obj/machinery/colony_recycler/wrench_act_secondary(mob/living/user, obj/item/tool) + default_unfasten_wrench(user, tool) + return ITEM_INTERACT_SUCCESS + +/// Proc called when the recycler eats new materials, checks if we should spit out new material sheets +/obj/machinery/colony_recycler/proc/has_eaten_materials(container, obj/item/item_inserted, last_inserted_id, mats_consumed, amount_inserted, atom/context) + SIGNAL_HANDLER + + flick("recycler_grind", src) + playsound(src, item_recycle_sound, 50, TRUE) + use_power(min(active_power_usage * 0.25, amount_inserted / 100)) + + if(amount_inserted) + materials.retrieve_all(drop_location()) + +// "parts kit" for buying these from cargo + +/obj/item/flatpacked_machine/recycler + name = "recycler parts kit" + icon = 'modular_nova/modules/colony_fabricator/icons/parts_kits.dmi' + icon_state = "recycler" + type_to_deploy = /obj/machinery/colony_recycler + deploy_time = 2 SECONDS + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, // Titan for the crushing element + ) diff --git a/modular_skyrat/modules/colony_fabricator/code/appliances/wall_cell_charger.dm b/modular_nova/modules/colony_fabricator/code/appliances/wall_cell_charger.dm similarity index 90% rename from modular_skyrat/modules/colony_fabricator/code/appliances/wall_cell_charger.dm rename to modular_nova/modules/colony_fabricator/code/appliances/wall_cell_charger.dm index e8afbca61a7679..ace5e9a5e540d9 100644 --- a/modular_skyrat/modules/colony_fabricator/code/appliances/wall_cell_charger.dm +++ b/modular_nova/modules/colony_fabricator/code/appliances/wall_cell_charger.dm @@ -1,11 +1,11 @@ /obj/machinery/cell_charger_multi/wall_mounted name = "mounted multi-cell charging rack" desc = "The innovative technology of a cell charging rack, but mounted neatly on a wall out of the way!" - icon = 'modular_skyrat/modules/colony_fabricator/icons/cell_charger.dmi' + icon = 'modular_nova/modules/colony_fabricator/icons/cell_charger.dmi' icon_state = "wall_charger" base_icon_state = "wall_charger" circuit = null - flags_1 = NODECONSTRUCT_1 + obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION max_batteries = 3 charge_rate = 750 /// The item we turn into when repacked @@ -41,7 +41,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/cell_charger_multi/wall_mounted, 29) /obj/item/wallframe/cell_charger_multi name = "unmounted wall multi-cell charging rack" desc = "The innovative technology of a cell charging rack, but able to be mounted neatly on a wall out of the way!" - icon = 'modular_skyrat/modules/colony_fabricator/icons/packed_machines.dmi' + icon = 'modular_nova/modules/colony_fabricator/icons/packed_machines.dmi' icon_state = "cell_charger_packed" w_class = WEIGHT_CLASS_NORMAL result_path = /obj/machinery/cell_charger_multi/wall_mounted diff --git a/modular_nova/modules/colony_fabricator/code/appliances/wind_turbine.dm b/modular_nova/modules/colony_fabricator/code/appliances/wind_turbine.dm new file mode 100644 index 00000000000000..1713f78a925034 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/appliances/wind_turbine.dm @@ -0,0 +1,87 @@ +/obj/machinery/power/colony_wind_turbine + name = "miniature wind turbine" + desc = "A post with two special-designed vertical turbine blades attached to its sides. \ + When placed outdoors in a planet with an atmosphere, will produce a small trickle of power \ + for free. If there is a storm in the area the turbine is placed, the power production will \ + multiply significantly." + icon = 'modular_nova/modules/colony_fabricator/icons/wind_turbine.dmi' + icon_state = "turbine" + density = TRUE + max_integrity = 100 + idle_power_usage = 0 + anchored = TRUE + can_change_cable_layer = FALSE + circuit = null + layer = ABOVE_MOB_LAYER + can_change_cable_layer = TRUE + /// How much power the turbine makes without a storm + var/regular_power_production = 2500 + /// How much power the turbine makes during a storm + var/storm_power_production = 10000 + /// Is our pressure too low to function? + var/pressure_too_low = FALSE + /// Minimum external pressure needed to work + var/minimum_pressure = 5 + /// What we undeploy into + var/undeploy_type = /obj/item/flatpacked_machine/wind_turbine + +/obj/machinery/power/colony_wind_turbine/Initialize(mapload) + . = ..() + AddElement(/datum/element/repackable, undeploy_type, 2 SECONDS) + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + connect_to_network() + +/obj/machinery/power/colony_wind_turbine/examine(mob/user) + . = ..() + var/area/turbine_area = get_area(src) + if(!turbine_area.outdoors) + . += span_notice("Its must be constructed <b>outdoors</b> to function.") + if(pressure_too_low) + . += span_notice("There must be enough atmospheric <b>pressure</b> for the turbine to spin.") + + +/obj/machinery/power/colony_wind_turbine/process() + var/area/our_current_area = get_area(src) + if(!our_current_area.outdoors) + icon_state = "turbine" + add_avail(0) + return + + var/turf/our_turf = get_turf(src) + var/datum/gas_mixture/environment = our_turf.return_air() + + if(environment.return_pressure() < minimum_pressure) + pressure_too_low = TRUE + icon_state = "turbine" + add_avail(0) + return + + pressure_too_low = FALSE + var/storming_out = FALSE + + var/datum/weather/weather_we_track + for(var/datum/weather/possible_weather in SSweather.processing) + if((our_turf.z in possible_weather.impacted_z_levels) || (our_current_area in possible_weather.impacted_areas)) + weather_we_track = possible_weather + break + if(weather_we_track) + if(!(weather_we_track.stage == END_STAGE)) + storming_out = TRUE + + add_avail((storming_out ? storm_power_production : regular_power_production)) + + var/new_icon_state = (storming_out ? "turbine_storm" : "turbine_normal") + icon_state = new_icon_state + + +// Item for deploying wind turbines +/obj/item/flatpacked_machine/wind_turbine + name = "flat-packed miniature wind turbine" + icon = 'modular_nova/modules/colony_fabricator/icons/wind_turbine.dmi' + icon_state = "turbine_packed" + type_to_deploy = /obj/machinery/power/colony_wind_turbine + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) diff --git a/modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm b/modular_nova/modules/colony_fabricator/code/colony_fabricator.dm similarity index 91% rename from modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm rename to modular_nova/modules/colony_fabricator/code/colony_fabricator.dm index b547d5c555eaf8..9f83c4c8c903a4 100644 --- a/modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm +++ b/modular_nova/modules/colony_fabricator/code/colony_fabricator.dm @@ -3,13 +3,13 @@ desc = "These bad boys are seen just about anywhere someone would want or need to build fast, damn the consequences. \ That tends to be colonies, especially on dangerous worlds, where the influences of this one machine can be seen \ in every bit of architecture." - icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi' + icon = 'modular_nova/modules/colony_fabricator/icons/machines.dmi' icon_state = "colony_lathe" base_icon_state = "colony_lathe" production_animation = null circuit = null production_animation = "colony_lathe_n" - flags_1 = NODECONSTRUCT_1 + obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION light_color = LIGHT_COLOR_BRIGHT_YELLOW light_power = 5 charges_tax = FALSE @@ -79,7 +79,7 @@ /obj/item/flatpacked_machine name = "flat-packed rapid construction fabricator" - icon = 'modular_skyrat/modules/colony_fabricator/icons/packed_machines.dmi' + icon = 'modular_nova/modules/colony_fabricator/icons/packed_machines.dmi' icon_state = "colony_lathe_packed" w_class = WEIGHT_CLASS_BULKY /// What structure is created by this item. @@ -90,9 +90,13 @@ /obj/item/flatpacked_machine/Initialize(mapload) . = ..() desc = initial(type_to_deploy.desc) - AddComponent(/datum/component/deployable, deploy_time, type_to_deploy) + give_deployable_component() give_manufacturer_examine() +/// Adds the deployable component, so that it can be overridden in case that's wanted +/obj/item/flatpacked_machine/proc/give_deployable_component() + AddComponent(/datum/component/deployable, deploy_time, type_to_deploy) + /// Adds the manufacturer examine element to the flatpack machine, but can be overridden in the future /obj/item/flatpacked_machine/proc/give_manufacturer_examine() AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) diff --git a/modular_nova/modules/colony_fabricator/code/construction/doors.dm b/modular_nova/modules/colony_fabricator/code/construction/doors.dm new file mode 100644 index 00000000000000..a40a15ef9e65a1 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/construction/doors.dm @@ -0,0 +1,56 @@ +// Shutters + +/obj/machinery/door/poddoor/shutters/colony_fabricator + name = "prefab shutters" + icon = 'modular_nova/modules/colony_fabricator/icons/doors/shutter.dmi' + +/obj/machinery/door/poddoor/shutters/colony_fabricator/preopen + icon_state = "open" + density = FALSE + opacity = FALSE + +/obj/machinery/door/poddoor/shutters/colony_fabricator/do_animate(animation) + switch(animation) + if("opening") + flick("opening", src) + icon_state = "open" + playsound(src, animation_sound, 30, TRUE) + if("closing") + flick("closing", src) + icon_state = "closed" + playsound(src, animation_sound, 30, TRUE) + +/obj/item/flatpacked_machine/shutter_kit + name = "prefab shutters parts kit" + icon = 'modular_nova/modules/colony_fabricator/icons/doors/packed.dmi' + icon_state = "shutters_parts" + type_to_deploy = /obj/machinery/door/poddoor/shutters/colony_fabricator/preopen + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + ) + +// Airlocks + +/obj/machinery/door/airlock/colony_prefab + name = "prefab airlock" + icon = 'modular_nova/modules/colony_fabricator/icons/doors/airlock.dmi' + overlays_file = 'modular_nova/modules/colony_fabricator/icons/doors/overlays.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_colony_prefab + +/obj/structure/door_assembly/door_assembly_colony_prefab + name = "prefab airlock assembly" + icon = 'modular_nova/modules/colony_fabricator/icons/doors/airlock.dmi' + base_name = "prefab airlock" + airlock_type = /obj/machinery/door/airlock/colony_prefab + noglass = TRUE + +/obj/item/flatpacked_machine/airlock_kit + name = "prefab airlock parts kit" + icon = 'modular_nova/modules/colony_fabricator/icons/doors/packed.dmi' + icon_state = "airlock_parts" + type_to_deploy = /obj/machinery/door/airlock/colony_prefab + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + ) diff --git a/modular_nova/modules/colony_fabricator/code/construction/manual_door.dm b/modular_nova/modules/colony_fabricator/code/construction/manual_door.dm new file mode 100644 index 00000000000000..22727adddc888e --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/construction/manual_door.dm @@ -0,0 +1,81 @@ +/obj/structure/mineral_door/manual_colony_door + name = "manual airlock" + icon = 'modular_nova/modules/colony_fabricator/icons/doors/airlock_manual.dmi' + material_flags = NONE + icon_state = "manual" + openSound = 'modular_nova/modules/colony_fabricator/sound/manual_door/manual_door_open.wav' + closeSound = 'modular_nova/modules/colony_fabricator/sound/manual_door/manual_door_close.wav' + /// What we disassemble into + var/disassembled_type = /obj/item/flatpacked_machine/airlock_kit_manual + /// How long it takes to open/close the door + var/manual_actuation_delay = 1 SECONDS + +/obj/structure/mineral_door/manual_colony_door/deconstruct(disassembled = TRUE) + if(disassembled) + new disassembled_type(get_turf(src)) + qdel(src) + +// Pickaxes won't dig these apart +/obj/structure/mineral_door/manual_colony_door/pickaxe_door(mob/living/user, obj/item/item_in_question) + return + +// These doors have a short do_after to check if you can open or close them +/obj/structure/mineral_door/manual_colony_door/TryToSwitchState(atom/user) + if(isSwitchingStates || !anchored) + return + if(!do_after(user, manual_actuation_delay, src)) + return + return ..() + +// We don't care about being bumped, just a copy of the base bumped proc +/obj/structure/mineral_door/manual_colony_door/Bumped(atom/movable/bumped_atom) + set waitfor = FALSE + SEND_SIGNAL(src, COMSIG_ATOM_BUMPED, bumped_atom) + +/obj/structure/mineral_door/manual_colony_door/Open() + isSwitchingStates = TRUE + playsound(src, openSound, 100, TRUE) + set_opacity(FALSE) + flick("[initial(icon_state)]opening",src) + icon_state = "[initial(icon_state)]open" + sleep(1 SECONDS) + set_density(FALSE) + door_opened = TRUE + layer = OPEN_DOOR_LAYER + air_update_turf(TRUE, FALSE) + update_appearance() + isSwitchingStates = FALSE + + if(close_delay != -1) + addtimer(CALLBACK(src, PROC_REF(Close)), close_delay) + +/obj/structure/mineral_door/manual_colony_door/Close() + if(isSwitchingStates || !door_opened) + return + var/turf/T = get_turf(src) + for(var/mob/living/L in T) + return + isSwitchingStates = TRUE + playsound(src, closeSound, 100, TRUE) + flick("[initial(icon_state)]closing",src) + icon_state = initial(icon_state) + sleep(1 SECONDS) + set_density(TRUE) + set_opacity(TRUE) + door_opened = FALSE + layer = initial(layer) + air_update_turf(TRUE, TRUE) + update_appearance() + isSwitchingStates = FALSE + +// Parts kit for putting the door together +/obj/item/flatpacked_machine/airlock_kit_manual + name = "prefab manual airlock parts kit" + icon = 'modular_nova/modules/colony_fabricator/icons/doors/packed.dmi' + icon_state = "airlock_parts_manual" + type_to_deploy = /obj/structure/mineral_door/manual_colony_door + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + ) + w_class = WEIGHT_CLASS_NORMAL diff --git a/modular_nova/modules/colony_fabricator/code/construction/turfs.dm b/modular_nova/modules/colony_fabricator/code/construction/turfs.dm new file mode 100644 index 00000000000000..c4865faa9ce0b5 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/construction/turfs.dm @@ -0,0 +1,176 @@ +// Plastic panel walls, how colony of you + +/turf/closed/wall/prefab_plastic + name = "prefabricated wall" + desc = "A conservatively built metal frame with plastic paneling covering a thin air-seal layer. \ + It's a little unnerving, but its better than nothing at all." + icon = 'modular_nova/modules/colony_fabricator/icons/prefab_wall.dmi' + icon_state = "prefab-0" + base_icon_state = "prefab" + can_engrave = FALSE + girder_type = null + hardness = 70 + slicing_duration = 5 SECONDS + sheet_type = /obj/item/stack/sheet/plastic_wall_panel + sheet_amount = 1 + +GLOBAL_LIST_INIT(plastic_wall_panel_recipes, list( + new/datum/stack_recipe("prefabricated wall", /turf/closed/wall/prefab_plastic, time = 3 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("prefabricated window", /obj/structure/window/fulltile/colony_fabricator, time = 1 SECONDS, on_solid_ground = TRUE, check_direction = TRUE, is_fulltile = TRUE, category = CAT_WINDOWS), \ + )) + +/obj/item/stack/sheet/plastic_wall_panel + name = "plastic panels" + singular_name = "plastic panel" + desc = "What better material to make the walls of your soon to be home out of than sheets of flimsy plastic? \ + Metal? What are you talking about, metal walls, in this economy? May also be used to make structures other \ + than walls." + icon = 'modular_nova/modules/colony_fabricator/icons/tiles_item.dmi' + icon_state = "sheet-plastic" + inhand_icon_state = "sheet-plastic" + mats_per_unit = list( + /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + ) + has_unique_girder = TRUE + material_type = /datum/material/plastic + merge_type = /obj/item/stack/sheet/plastic_wall_panel + walltype = /turf/closed/wall/prefab_plastic + +/obj/item/stack/sheet/plastic_wall_panel/examine(mob/user) + . = ..() + . += span_notice("You can build a prefabricated wall by right clicking on an empty floor.") + +/obj/item/stack/sheet/plastic_wall_panel/afterattack_secondary(atom/target, mob/user, proximity_flag, click_parameters) + if(!isopenturf(target)) + return SECONDARY_ATTACK_CONTINUE_CHAIN + var/turf/open/build_on = target + if(!user.Adjacent(build_on)) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(isgroundlessturf(build_on)) + user.balloon_alert(user, "can't place it here!") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(build_on.is_blocked_turf()) + user.balloon_alert(user, "something is blocking the tile!") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(get_amount() < 1) + user.balloon_alert(user, "not enough material!") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(!do_after(user, 3 SECONDS, build_on)) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(build_on.is_blocked_turf()) + user.balloon_alert(user, "something is blocking the tile!") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(!use(1)) + user.balloon_alert(user, "not enough material!") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + build_on.place_on_top(walltype, flags = CHANGETURF_INHERIT_AIR) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/obj/item/stack/sheet/plastic_wall_panel/get_main_recipes() + . = ..() + . += GLOB.plastic_wall_panel_recipes + +/obj/item/stack/sheet/plastic_wall_panel/ten + amount = 10 + +/obj/item/stack/sheet/plastic_wall_panel/fifty + amount = 50 + +// Stacks of floor tiles + +/obj/item/stack/tile/catwalk_tile/colony_lathe + icon = 'modular_nova/modules/colony_fabricator/icons/tiles_item.dmi' + icon_state = "prefab_catwalk" + mats_per_unit = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT) + turf_type = /turf/open/floor/catwalk_floor/colony_fabricator + merge_type = /obj/item/stack/tile/catwalk_tile/colony_lathe + tile_reskin_types = null + +/obj/item/stack/tile/catwalk_tile/colony_lathe/lathe_spawn + amount = 4 + +/obj/item/stack/tile/iron/colony + name = "prefab floor tiles" + singular_name = "prefab floor tile" + desc = "A stack of large floor tiles that are a common sight in frontier colonies and prefab buildings." + icon = 'modular_nova/modules/colony_fabricator/icons/tiles_item.dmi' + icon_state = "colony_grey" + turf_type = /turf/open/floor/iron/colony + merge_type = /obj/item/stack/tile/iron/colony + tile_reskin_types = list( + /obj/item/stack/tile/iron/colony, + /obj/item/stack/tile/iron/colony/texture, + /obj/item/stack/tile/iron/colony/bolts, + /obj/item/stack/tile/iron/colony/white, + /obj/item/stack/tile/iron/colony/white/texture, + /obj/item/stack/tile/iron/colony/white/bolts, + ) + +/obj/item/stack/tile/iron/colony/lathe_spawn + amount = 4 + +// Grated floor tile, for seeing wires under + +/turf/open/floor/catwalk_floor/colony_fabricator + icon = 'modular_nova/modules/colony_fabricator/icons/tiles.dmi' + icon_state = "prefab_above" + catwalk_type = "prefab" + baseturfs = /turf/open/floor/plating + floor_tile = /obj/item/stack/tile/catwalk_tile/colony_lathe + +// "Normal" floor tiles + +/obj/item/stack/tile/iron/colony/texture + icon_state = "colony_grey_texture" + turf_type = /turf/open/floor/iron/colony/texture + +/obj/item/stack/tile/iron/colony/bolts + icon_state = "colony_grey_bolts" + turf_type = /turf/open/floor/iron/colony/bolts + +/turf/open/floor/iron/colony + icon = 'modular_nova/modules/colony_fabricator/icons/tiles.dmi' + icon_state = "colony_grey" + base_icon_state = "colony_grey" + floor_tile = /obj/item/stack/tile/iron/colony + tiled_dirt = FALSE + +/turf/open/floor/iron/colony/texture + icon_state = "colony_grey_texture" + base_icon_state = "colony_grey_texture" + floor_tile = /obj/item/stack/tile/iron/colony/texture + +/turf/open/floor/iron/colony/bolts + icon_state = "colony_grey_bolts" + base_icon_state = "colony_grey_bolts" + floor_tile = /obj/item/stack/tile/iron/colony/bolts + +// White variants of the above tiles + +/obj/item/stack/tile/iron/colony/white + icon_state = "colony_white" + turf_type = /turf/open/floor/iron/colony/white + +/obj/item/stack/tile/iron/colony/white/texture + icon_state = "colony_white_texture" + turf_type = /turf/open/floor/iron/colony/white/texture + +/obj/item/stack/tile/iron/colony/white/bolts + icon_state = "colony_white_bolts" + turf_type = /turf/open/floor/iron/colony/white/bolts + +/turf/open/floor/iron/colony/white + icon_state = "colony_white" + base_icon_state = "colony_white" + floor_tile = /obj/item/stack/tile/iron/colony/white + +/turf/open/floor/iron/colony/white/texture + icon_state = "colony_white_texture" + base_icon_state = "colony_white_texture" + floor_tile = /obj/item/stack/tile/iron/colony/white/texture + +/turf/open/floor/iron/colony/white/bolts + icon_state = "colony_white_bolts" + base_icon_state = "colony_white_bolts" + floor_tile = /obj/item/stack/tile/iron/colony/white/bolts diff --git a/modular_nova/modules/colony_fabricator/code/construction/windows.dm b/modular_nova/modules/colony_fabricator/code/construction/windows.dm new file mode 100644 index 00000000000000..f5453506be5885 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/construction/windows.dm @@ -0,0 +1,43 @@ +/obj/structure/window/fulltile/colony_fabricator + name = "prefabricated window" + desc = "A conservatively built metal frame with a thick sheet of space-grade glass slotted into it." + icon = 'modular_nova/modules/colony_fabricator/icons/prefab_window.dmi' + icon_state = "prefab-0" + base_icon_state = "prefab" + fulltile = TRUE + glass_type = /obj/item/stack/sheet/plastic_wall_panel + glass_amount = 1 + +/obj/structure/grille/attackby(obj/item/item_in_question, mob/user, params) + if(!istype(item_in_question, /obj/item/stack/sheet/plastic_wall_panel)) + return ..() + + if(broken) + return + var/obj/item/stack/stack_in_question = item_in_question + if(stack_in_question.get_amount() < 1) + to_chat(user, span_warning("You need at least one plastic panel for that!")) + return + var/dir_to_set = SOUTHWEST + if(!anchored) + to_chat(user, span_warning("[src] needs to be fastened to the floor first!")) + return + for(var/obj/structure/window/window_on_turf in loc) + to_chat(user, span_warning("There is already a window there!")) + return + if(!clear_tile(user)) + return + to_chat(user, span_notice("You start placing the window...")) + if(!do_after(user, 1 SECONDS, target = src)) + return + if(!src.loc || !anchored) //Grille broken or unanchored while waiting + return + for(var/obj/structure/window/window_on_turf in loc) //Another window already installed on grille + return + if(!clear_tile(user)) + return + var/obj/structure/window/new_window = new /obj/structure/window/fulltile/colony_fabricator(drop_location()) + new_window.setDir(dir_to_set) + new_window.state = 0 + stack_in_question.use(1) + to_chat(user, span_notice("You place [new_window] on [src].")) diff --git a/modular_nova/modules/colony_fabricator/code/design_datums/appliances.dm b/modular_nova/modules/colony_fabricator/code/design_datums/appliances.dm new file mode 100644 index 00000000000000..8a4a70f318f60b --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/design_datums/appliances.dm @@ -0,0 +1,195 @@ +// Machine categories + +#define FABRICATOR_CATEGORY_APPLIANCES "/Appliances" +#define FABRICATOR_SUBCATEGORY_POWER "/Power" +#define FABRICATOR_SUBCATEGORY_ATMOS "/Atmospherics" +#define FABRICATOR_SUBCATEGORY_FLUIDS "/Liquids" +#define FABRICATOR_SUBCATEGORY_MATERIALS "/Materials" +#define FABRICATOR_SUBCATEGORY_SUSTENANCE "/Sustenance" + +// Techweb node that shouldnt show up anywhere ever specifically for the fabricator to work with + +/datum/techweb_node/colony_fabricator_appliances + id = "colony_fabricator_appliances" + display_name = "Colony Fabricator Appliance Designs" + description = "Contains all of the colony fabricator's appliance machine designs." + design_ids = list( + "wall_multi_cell_rack", + "portable_lil_pump", + "portable_scrubbs", + "survival_knife", // I just don't want to make a whole new node for this one sorry + "soup_pot", // This one too + "water_synth", + "hydro_synth", + "frontier_sustenance_dispenser", + "co2_cracker", + "portable_recycler", + "foodricator", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000000000000000) // God save you + hidden = TRUE + show_on_wiki = FALSE + starting_node = TRUE + +// Wall mountable multi cell charger + +/datum/design/wall_mounted_multi_charger + name = "Mounted Multi-Cell Charging Rack" + id = "wall_multi_cell_rack" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/silver = SHEET_MATERIAL_AMOUNT * 1, + ) + build_path = /obj/item/wallframe/cell_charger_multi + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_POWER, + ) + construction_time = 15 SECONDS + +// Portable scrubber and pumps for all your construction atmospherics needs + +/datum/design/portable_gas_pump + name = "Portable Air Pump" + id = "portable_lil_pump" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, + ) + build_path = /obj/machinery/portable_atmospherics/pump + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_ATMOS, + ) + construction_time = 30 SECONDS + +/datum/design/portable_gas_scrubber + name = "Portable Air Scrubber" + id = "portable_scrubbs" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, + ) + build_path = /obj/machinery/portable_atmospherics/scrubber + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_ATMOS, + ) + construction_time = 30 SECONDS + +// Plumbable chem machine that makes nothing but water + +/datum/design/water_synthesizer + name = "Water Synthesizer" + id = "water_synth" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/machinery/plumbing/synthesizer/water_synth + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_FLUIDS, + ) + construction_time = 10 SECONDS + +// Plumbable chem machine that makes nothing but water + +/datum/design/hydro_synthesizer + name = "Hydroponics Chemical Synthesizer" + id = "hydro_synth" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/machinery/plumbing/synthesizer/colony_hydroponics + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_FLUIDS, + ) + construction_time = 10 SECONDS + +// Chem dispenser that dispenses various flavored beverages and nutrislop, yum! + +/datum/design/frontier_sustenance_dispenser + name = "Sustenance Dispenser" + id = "frontier_sustenance_dispenser" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/machinery/chem_dispenser/frontier_appliance + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_SUSTENANCE, + ) + construction_time = 30 SECONDS + +// CO2 cracker, portable machines that takes CO2 and turns it into oxygen + +/datum/design/co2_cracker + name = "Portable Carbon Dioxide Cracker" + id = "co2_cracker" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, // We're gonna pretend plasma is the catalyst for co2 cracking + ) + build_path = /obj/machinery/electrolyzer/co2_cracker + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_ATMOS, + ) + construction_time = 30 SECONDS + +// A portable recycling machine, use item with materials on it to recycle + +/datum/design/portable_recycler + name = "Portable Recycler" + id = "portable_recycler" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, // Titan for the crushing element + ) + build_path = /obj/machinery/colony_recycler + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_MATERIALS, + ) + construction_time = 30 SECONDS + +// Rations printer, turns biomass into seeds, some synthesized foods, ingredients, so on + +/datum/design/foodricator + name = "Organic Rations Printer" + id = "foodricator" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/silver = SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/flatpacked_machine/organics_ration_printer + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_SUSTENANCE, + ) + construction_time = 30 SECONDS + +#undef FABRICATOR_CATEGORY_APPLIANCES +#undef FABRICATOR_SUBCATEGORY_POWER +#undef FABRICATOR_SUBCATEGORY_ATMOS +#undef FABRICATOR_SUBCATEGORY_FLUIDS +#undef FABRICATOR_SUBCATEGORY_MATERIALS +#undef FABRICATOR_SUBCATEGORY_SUSTENANCE diff --git a/modular_nova/modules/colony_fabricator/code/design_datums/construction.dm b/modular_nova/modules/colony_fabricator/code/design_datums/construction.dm new file mode 100644 index 00000000000000..7e5e608aca352a --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/design_datums/construction.dm @@ -0,0 +1,124 @@ +// Look, I had to make its name start with A so it'd be top of the list, fight me + +#define FABRICATOR_SUBCATEGORY_STRUCTURES "/Autofab Structures" + +// Techweb node that shouldnt show up anywhere ever specifically for the fabricator to work with + +/datum/techweb_node/colony_fabricator_structures + id = "colony_fabricator_structures" + display_name = "Colony Fabricator Structure Designs" + description = "Contains all of the colony fabricator's structure designs." + design_ids = list( + "prefab_airlock_kit", + "prefab_manual_airlock_kit", + "prefab_shutters_kit", + "prefab_floor_tile", + "prefab_cat_floor_tile", + "colony_fab_plastic_wall_panel", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000000000000000) // God save you + hidden = TRUE + show_on_wiki = FALSE + starting_node = TRUE + +// Airlock kit + +/datum/design/prefab_airlock_kit + name = "Prefab Airlock" + id = "prefab_airlock_kit" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + ) + build_path = /obj/item/flatpacked_machine/airlock_kit + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES, + ) + construction_time = 30 SECONDS + +// Manul Airlock kit + +/datum/design/prefab_manual_airlock_kit + name = "Prefab Manual Airlock" + id = "prefab_manual_airlock_kit" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + ) + build_path = /obj/item/flatpacked_machine/airlock_kit_manual + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES, + ) + construction_time = 30 SECONDS + +// Shutters kit + +/datum/design/prefab_shutters_kit + name = "Prefab Shutters" + id = "prefab_shutters_kit" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + ) + build_path = /obj/item/flatpacked_machine/shutter_kit + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES, + ) + construction_time = 30 SECONDS + +// Fancy floor tiles + +/datum/design/prefab_floor_tile + name = "Prefab Floor Tile x4" + id = "prefab_floor_tile" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/stack/tile/iron/colony/lathe_spawn + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES, + ) + construction_time = 15 SECONDS + +// Fancy catwalk floor tiles + +/datum/design/prefab_cat_floor_tile + name = "Prefab Catwalk Plating x4" + id = "prefab_cat_floor_tile" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/stack/tile/catwalk_tile/colony_lathe/lathe_spawn + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES, + ) + construction_time = 15 SECONDS + +// Plastic wall panels, twice the wall for the same price in plastic, efficient! + +/datum/design/colony_fab_plastic_wall_panel + name = "Plastic Paneling x10" + id = "colony_fab_plastic_wall_panel" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/plastic = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 5, + ) + build_path = /obj/item/stack/sheet/plastic_wall_panel/ten + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES, + ) + construction_time = 15 SECONDS + +#undef FABRICATOR_SUBCATEGORY_STRUCTURES diff --git a/modular_nova/modules/colony_fabricator/code/design_datums/equipment.dm b/modular_nova/modules/colony_fabricator/code/design_datums/equipment.dm new file mode 100644 index 00000000000000..067b0084046994 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/design_datums/equipment.dm @@ -0,0 +1,27 @@ +/datum/design/survival_knife + name = "Survival Knife" + id = "survival_knife" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 6, + ) + build_path = /obj/item/knife/combat/survival + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_KITCHEN, + ) + departmental_flags = DEPARTMENT_BITFLAG_SERVICE + +/datum/design/soup_pot + name = "Soup Pot" + id = "soup_pot" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5, + ) + build_path = /obj/item/reagent_containers/cup/soup_pot + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_KITCHEN, + ) + departmental_flags = DEPARTMENT_BITFLAG_SERVICE diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/computer_board.dm b/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/computer_board.dm similarity index 100% rename from modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/computer_board.dm rename to modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/computer_board.dm diff --git a/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/construction.dm b/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/construction.dm new file mode 100644 index 00000000000000..ea92e20e1f3a35 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/construction.dm @@ -0,0 +1,117 @@ +// This file is going to be just all bitflag additions + +/datum/design/apc_board/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/airalarm_electronics/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/airlock_board/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/firealarm_electronics/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/control/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/firelock_board/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/infrared_emitter/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/prox_sensor/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/signaler/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/timer/New() + . = ..() + build_type |= COLONY_FABRICATOR + +// Wall frames + +/datum/design/camera_assembly/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/intercom_frame/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/light_switch_frame/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/ignition_control/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/sparker/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/newscaster_frame/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/status_display_frame/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/requests_console/New() + . = ..() + build_type |= COLONY_FABRICATOR + +// Lights + +/datum/design/light_tube/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/light_bulb/New() + . = ..() + build_type |= COLONY_FABRICATOR + +// Conveyors + +/datum/design/conveyor_belt/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/conveyor_switch/New() + . = ..() + build_type |= COLONY_FABRICATOR + +// Materials + +/datum/design/lavarods/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/rglass/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/plasteel_alloy/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/plaglass_alloy/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/plasmarglass_alloy/New() + . = ..() + build_type |= COLONY_FABRICATOR diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/equipment.dm b/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/equipment.dm similarity index 100% rename from modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/equipment.dm rename to modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/equipment.dm diff --git a/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/machine_boards.dm b/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/machine_boards.dm new file mode 100644 index 00000000000000..47560f14e6a2a4 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/machine_boards.dm @@ -0,0 +1,61 @@ +/datum/design/board/hydroponics/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/board/cyborgrecharger/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/board/microwave/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/board/processor/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/board/suit_storage_unit/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/board/range/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/board/griddle/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/board/reagentgrinder/New() + . = ..() + build_type |= COLONY_FABRICATOR + +// Turbine Stuff + +/datum/design/board/turbine_computer/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/board/turbine_compressor/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/board/turbine_rotor/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/board/turbine_stator/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/turbine_part_compressor/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/turbine_part_stator/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/turbine_part_rotor/New() + . = ..() + build_type |= COLONY_FABRICATOR diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/stock_parts.dm b/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/stock_parts.dm similarity index 100% rename from modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/stock_parts.dm rename to modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/stock_parts.dm diff --git a/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/tools.dm b/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/tools.dm new file mode 100644 index 00000000000000..92a68bade561c8 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/tools.dm @@ -0,0 +1,109 @@ +// Various designs that get added to the colony fab + +/datum/design/holosignatmos/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/analyzer/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/extinguisher/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/cable_coil/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/airlock_painter/decal/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/airlock_painter/decal/tile/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/holosignengi/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/inducer/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/multitool/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/tscanner/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/pipe_painter/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/rwd/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/bolter_wrench/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/rpd/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/rpd_upgrade/unwrench/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/rtd_loaded/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/rcd_ammo/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/light_replacer/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/rld_mini/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/miningsatchel_holding/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/mining_scanner/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/flashlight/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/ducts/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/plunger/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/handlabeler/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/paperroll/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/spraycan/New() + . = ..() + build_type |= COLONY_FABRICATOR diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/flatpack_machines.dm b/modular_nova/modules/colony_fabricator/code/design_datums/flatpack_machines.dm similarity index 81% rename from modular_skyrat/modules/colony_fabricator/code/design_datums/flatpack_machines.dm rename to modular_nova/modules/colony_fabricator/code/design_datums/flatpack_machines.dm index a824a145df9154..5912a347bd233d 100644 --- a/modular_skyrat/modules/colony_fabricator/code/design_datums/flatpack_machines.dm +++ b/modular_nova/modules/colony_fabricator/code/design_datums/flatpack_machines.dm @@ -22,6 +22,8 @@ "flatpack_fuel_generator", "flatpack_rtg", "flatpack_thermo", + "flatpack_ore_silo", + "flatpack_turbine_team_fortress_two", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000000000000000) // God save you hidden = TRUE @@ -201,6 +203,46 @@ ) construction_time = 20 SECONDS +// Ore silo except it beeps + +/datum/design/flatpack_ore_silo + name = "Flat-packed Ore Silo" + desc = "An all-in-one materials management solution. Connects resource-using machines \ + through a network of distrobution systems." + id = "flatpack_ore_silo" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 5, + ) + build_path = /obj/item/flatpacked_machine/ore_silo + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_MATERIALS, + ) + construction_time = 1 MINUTES + +// Wind turbine, produces tiny amounts of power when placed outdoors in an atmosphere, but makes significantly more if there's a storm in that area + +/datum/design/flatpack_turbine_team_fortress_two + name = "Flat-packed Miniature Wind Turbine" + desc = "A deployable fabricator capable of producing other flat-packed machines and other special equipment tailored for \ + rapidly constructing functional structures given resources and power. While it cannot be upgraded, it can be repacked \ + and moved to any location you see fit. This one makes specialized engineering designs and tools." + id = "flatpack_turbine_team_fortress_two" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/flatpacked_machine/wind_turbine + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_POWER, + ) + construction_time = 30 SECONDS + #undef FABRICATOR_CATEGORY_FLATPACK_MACHINES #undef FABRICATOR_SUBCATEGORY_MANUFACTURING #undef FABRICATOR_SUBCATEGORY_POWER diff --git a/modular_nova/modules/colony_fabricator/code/design_datums/rations_printer_designs/ingredients.dm b/modular_nova/modules/colony_fabricator/code/design_datums/rations_printer_designs/ingredients.dm new file mode 100644 index 00000000000000..3c7b6e8d39a5a1 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/design_datums/rations_printer_designs/ingredients.dm @@ -0,0 +1,65 @@ +/datum/design/frontier_ration_egg + name = "Egg" + id = "frontier_ration_egg" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 25) + build_path = /obj/item/food/egg + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_INGREDIENTS, + ) + +/datum/design/frontier_ration_chicken + name = "Chicken" + id = "frontier_ration_chicken" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 50) + build_path = /obj/item/food/meat/slab/chicken + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_INGREDIENTS, + ) + +/datum/design/frontier_ration_mystery_meat + name = "Meat Product" + id = "frontier_ration_mystery_meat" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 50) + build_path = /obj/item/food/meat/slab/meatproduct + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_INGREDIENTS, + ) + +/datum/design/frontier_ration_butter + name = "Butter" + id = "frontier_ration_butter" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 25) + build_path = /obj/item/food/butter + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_INGREDIENTS, + ) + +/datum/design/frontier_ration_cheese + name = "Cheese" + id = "frontier_ration_cheese" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 25) + build_path = /obj/item/food/cheese/wedge + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_INGREDIENTS, + ) + +/datum/design/frontier_ration_cheese_firm + name = "Firm Cheese" + id = "frontier_ration_firm_cheese" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 25) + build_path = /obj/item/food/cheese/firm_cheese_slice + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_INGREDIENTS, + ) diff --git a/modular_nova/modules/colony_fabricator/code/design_datums/rations_printer_designs/reagents.dm b/modular_nova/modules/colony_fabricator/code/design_datums/rations_printer_designs/reagents.dm new file mode 100644 index 00000000000000..64134e7f67fab7 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/design_datums/rations_printer_designs/reagents.dm @@ -0,0 +1,65 @@ +/datum/design/frontier_ration_flour + name = "Flour Sack" + id = "frontier_ration_flour_sack" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/reagent_containers/condiment/flour/small_ration + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_BAGS, + ) + +/datum/design/frontier_ration_flour_korta + name = "Korta Flour Sack" + id = "frontier_ration_flour_sack_korta" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/reagent_containers/condiment/small_ration_korta_flour + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_BAGS, + ) + +/datum/design/frontier_ration_rice + name = "Rice Sack" + id = "frontier_ration_rice_sack" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/reagent_containers/condiment/rice/small_ration + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_BAGS, + ) + +/datum/design/frontier_ration_sugar + name = "Sugar Sack" + id = "frontier_ration_sugar_sack" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/reagent_containers/condiment/sugar/small_ration + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_BAGS, + ) + +/datum/design/frontier_ration_soy_milk + name = "Soy Milk" + id = "frontier_ration_soy_milk_cart" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/reagent_containers/condiment/soymilk/small_ration + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_BAGS, + ) + +/datum/design/frontier_ration_milk + name = "Milk" + id = "frontier_ration_milk_cart" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/reagent_containers/condiment/milk/small_ration + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_BAGS, + ) diff --git a/modular_nova/modules/colony_fabricator/code/design_datums/rations_printer_designs/seeds.dm b/modular_nova/modules/colony_fabricator/code/design_datums/rations_printer_designs/seeds.dm new file mode 100644 index 00000000000000..ed1590d71b3fe4 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/design_datums/rations_printer_designs/seeds.dm @@ -0,0 +1,87 @@ +/datum/design/organic_parsnip_seed + name = "Pack of Parsnip Seeds" + id = "oganic_parsnip_seed" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 25) + build_path = /obj/item/seeds/carrot/parsnip + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_SEEDS, + ) + +/datum/design/organic_beet_seed + name = "Pack of White-Beet Seeds" + id = "oganic_beet_seed" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 25) + build_path = /obj/item/seeds/whitebeet + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_SEEDS, + ) + +/datum/design/organic_potato_seed + name = "Pack of Potato Seeds" + id = "oganic_potato_seed" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 25) + build_path = /obj/item/seeds/potato + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_SEEDS, + ) + +/datum/design/organic_soy_seed + name = "Pack of Soybean Seeds" + id = "oganic_soy_seed" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 25) + build_path = /obj/item/seeds/soya + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_SEEDS, + ) + +/datum/design/organic_rice_seed + name = "Pack of Rice Seeds" + id = "oganic_rice_seed" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 25) + build_path = /obj/item/seeds/wheat/rice + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_SEEDS, + ) + +/datum/design/organic_oat_seed + name = "Pack of Oat Seeds" + id = "oganic_oat_seed" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 25) + build_path = /obj/item/seeds/wheat/oat + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_SEEDS, + ) + +/datum/design/organic_korta_seed + name = "Pack of Korta Seeds" + id = "oganic_korta_seed" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 25) + build_path = /obj/item/seeds/korta_nut + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_SEEDS, + ) + +/datum/design/organic_herb_seed + name = "Pack of Herb Seeds" + id = "oganic_herb_seed" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 25) + build_path = /obj/item/seeds/herbs + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_SEEDS, + ) diff --git a/modular_nova/modules/colony_fabricator/code/design_datums/rations_printer_designs/snacks.dm b/modular_nova/modules/colony_fabricator/code/design_datums/rations_printer_designs/snacks.dm new file mode 100644 index 00000000000000..73098b23288b92 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/design_datums/rations_printer_designs/snacks.dm @@ -0,0 +1,76 @@ +/datum/design/frontier_ration_gum + name = "Gum" + id = "frontier_ration_gum" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/storage/box/gum + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_SNACKS, + ) + +/datum/design/frontier_ration_gum_wakeup + name = "Activin 12 Hour Medicated Gum" + id = "frontier_ration_gum_wakeup" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/storage/box/gum/wake_up + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_SNACKS, + ) + +/datum/design/frontier_ration_energy_bar + name = "High Power Energy Bar" + id = "frontier_ration_energy_bar" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 50) + build_path = /obj/item/food/energybar + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_SNACKS, + ) + +/datum/design/frontier_ration_ciggies + name = "Cigarettes" + id = "frontier_ration_ciggies" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 50) + build_path = /obj/item/storage/fancy/cigarettes/cigpack_uplift + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_SNACKS, + ) + +/datum/design/frontier_ration_engine_fodder + name = "Engine Fodder" + id = "frontier_ration_engine_fodder" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 50) + build_path = /obj/item/food/vendor_snacks/moth_bag + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_SNACKS, + ) + +/datum/design/frontier_ration_fueljak_snack + name = "Fueljack's Snack" + id = "frontier_ration_fueljak_snack" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 50) + build_path = /obj/item/food/vendor_snacks/moth_bag/fuel_jack + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_SNACKS, + ) + +/datum/design/frontier_ration_ricecracker + name = "Rice Crackers" + id = "frontier_ration_ricecracker" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 50) + build_path = /obj/item/food/vendor_snacks/rice_crackers + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_SNACKS, + ) diff --git a/modular_nova/modules/colony_fabricator/code/design_datums/rations_printer_designs/utensils.dm b/modular_nova/modules/colony_fabricator/code/design_datums/rations_printer_designs/utensils.dm new file mode 100644 index 00000000000000..05508fc659b96f --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/design_datums/rations_printer_designs/utensils.dm @@ -0,0 +1,43 @@ +/datum/design/frontier_ration_plastic_fork + name = "Plastic Fork" + id = "frontier_ration_plastic_fork" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 10) + build_path = /obj/item/kitchen/fork/plastic + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_UTENSILS, + ) + +/datum/design/frontier_ration_plastic_spoon + name = "Plastic Spoon" + id = "frontier_ration_plastic_spoon" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 10) + build_path = /obj/item/kitchen/spoon/plastic + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_UTENSILS, + ) + +/datum/design/frontier_ration_plastic_knife + name = "Plastic Knife" + id = "frontier_ration_plastic_knife" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 10) + build_path = /obj/item/knife/plastic + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_UTENSILS, + ) + +/datum/design/frontier_ration_plastic_cup + name = "Plastic Cup" + id = "frontier_ration_plastic_cup" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 25) + build_path = /obj/item/reagent_containers/cup/glass/coffee_cup + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_FOODRICATOR_UTENSILS, + ) diff --git a/modular_nova/modules/colony_fabricator/code/design_datums/tools.dm b/modular_nova/modules/colony_fabricator/code/design_datums/tools.dm new file mode 100644 index 00000000000000..f69d0d1f431553 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/design_datums/tools.dm @@ -0,0 +1,80 @@ +/datum/techweb_node/colony_fabricator_special_tools + id = "colony_fabricator_tools" + display_name = "Colony Fabricator Tool Designs" + description = "Contains all of the colony fabricator's tool designs." + design_ids = list( + "colony_power_drive", + "colony_prybar", + "colony_arc_welder", + "colony_compact_drill", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000000000000000) // God save you + hidden = TRUE + show_on_wiki = FALSE + starting_node = TRUE + +// Screw-Wrench-Wirecutter combo machine + +/datum/design/colony_power_driver + name = "Powered Driver" + id = "colony_power_drive" + build_type = COLONY_FABRICATOR + build_path = /obj/item/screwdriver/omni_drill + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT * 1.5, + /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, + ) + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED, + ) + +// Crowbar that is completely normal except it can force doors + +/datum/design/colony_door_crowbar + name = "Prybar" + id = "colony_prybar" + build_type = COLONY_FABRICATOR + build_path = /obj/item/crowbar/large/doorforcer + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75, + /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, + ) + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED, + ) + +// Welder that takes no fuel or power to run but is quite slow, at least it sounds cool as hell + +/datum/design/colony_arc_welder + name = "Arc Welder" + id = "colony_arc_welder" + build_type = COLONY_FABRICATOR + build_path = /obj/item/weldingtool/electric/arc_welder + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT * 1.5, + ) + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED, + ) + +// Slightly slower drill that fits in backpacks + +/datum/design/colony_compact_drill + name = "Compact Mining Drill" + id = "colony_compact_drill" + build_type = COLONY_FABRICATOR + build_path = /obj/item/pickaxe/drill/compact + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + ) + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MINING, + ) diff --git a/modular_nova/modules/colony_fabricator/code/looping_sounds.dm b/modular_nova/modules/colony_fabricator/code/looping_sounds.dm new file mode 100644 index 00000000000000..65dc3658534907 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/looping_sounds.dm @@ -0,0 +1,35 @@ +/datum/looping_sound/colony_fabricator_running + start_sound = 'modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_start.wav' + start_length = 1 + mid_sounds = list( + 'modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_1.wav' = 1, + 'modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_2.wav' = 1, + 'modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_3.wav' = 1, + 'modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_4.wav' = 1, + ) + mid_length = 3 SECONDS + end_sound = 'modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_end.wav' + volume = 100 + falloff_exponent = 3 + +/datum/looping_sound/arc_furnace_running + mid_sounds = list( + 'modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav' = 1, + 'modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav' = 1, + 'modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav' = 1, + 'modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav' = 1, + ) + mid_length = 1 SECONDS + volume = 200 // This sound effect is very quiet I've noticed + falloff_exponent = 2 + +/datum/looping_sound/conditioner_running + mid_sounds = list( + 'modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_1.wav' = 1, + 'modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_2.wav' = 1, + 'modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_3.wav' = 1, + 'modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_4.wav' = 1, + ) + mid_length = 3 SECONDS + volume = 40 + falloff_exponent = 3 diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm b/modular_nova/modules/colony_fabricator/code/machines/arc_furnace.dm similarity index 98% rename from modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm rename to modular_nova/modules/colony_fabricator/code/machines/arc_furnace.dm index e49383c52a2c54..7e22e231f70ddd 100644 --- a/modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm +++ b/modular_nova/modules/colony_fabricator/code/machines/arc_furnace.dm @@ -9,7 +9,7 @@ amounts of electricity. While not nearly as fast and efficient as other ore refining methods, the arc furnace is \ capable of returning <b>larger amounts of refined material</b> than a standard refining process can. \ A sticker on the side notes that this may <b>exhaust waste gasses to the air</b> during operation." - icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi' + icon = 'modular_nova/modules/colony_fabricator/icons/machines.dmi' icon_state = "arc_furnace" base_icon_state = "arc_furnace" appearance_flags = KEEP_TOGETHER | LONG_GLIDE | PIXEL_SCALE @@ -18,7 +18,7 @@ circuit = null light_color = LIGHT_COLOR_BRIGHT_YELLOW light_power = 10 - flags_1 = NODECONSTRUCT_1 + obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 10 // This baby consumes so much power /// The item we turn into when repacked var/repacked_type = /obj/item/flatpacked_machine/arc_furnace diff --git a/modular_nova/modules/colony_fabricator/code/machines/ore_silo.dm b/modular_nova/modules/colony_fabricator/code/machines/ore_silo.dm new file mode 100644 index 00000000000000..c06a99f40a1a97 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/machines/ore_silo.dm @@ -0,0 +1,23 @@ +/obj/machinery/ore_silo/colony_lathe + name = "colony ore silo" + desc = "An all-in-one materials management solution. Connects resource-using machines \ + through a network of distribution systems." + icon = 'modular_nova/modules/colony_fabricator/icons/ore_silo.dmi' + circuit = null + /// What this unpacks into + var/unpacked_type = /obj/item/flatpacked_machine/ore_silo + +/obj/machinery/ore_silo/colony_lathe/silo_log(obj/machinery/machinery_in_question, action, amount, noun, list/mats) + . = ..() + playsound(src, 'sound/machines/beep.ogg', 30, TRUE) + +// Item for deploying ore silos +/obj/item/flatpacked_machine/ore_silo + name = "flat-packed ore silo" + icon = 'modular_nova/modules/colony_fabricator/icons/ore_silo.dmi' + icon_state = "ore_silo" + type_to_deploy = /obj/machinery/ore_silo/colony_lathe + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 5, + ) diff --git a/modular_nova/modules/colony_fabricator/code/machines/power_storage_unit.dm b/modular_nova/modules/colony_fabricator/code/machines/power_storage_unit.dm new file mode 100644 index 00000000000000..7bb15f98e8fa69 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/machines/power_storage_unit.dm @@ -0,0 +1,85 @@ +/obj/machinery/power/smes/battery_pack + name = "stationary battery" + desc = "An about table-height block of power storage, commonly seen in low storage high output power applications. \ + Smaller units such as these tend to have a respectively <b>smaller energy storage</b>, though also are capable of \ + <b>higher maximum output</b> than some larger units. Most commonly seen being used not for their ability to store \ + power, but rather for use in regulating power input and output." + icon = 'modular_nova/modules/colony_fabricator/icons/power_storage_unit/small_battery.dmi' + capacity = 750 * 1000 + input_level_max = 400 * 1000 + output_level_max = 400 * 1000 + circuit = null + obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION + /// The item we turn into when repacked + var/repacked_type = /obj/item/flatpacked_machine/station_battery + +/obj/machinery/power/smes/battery_pack/Initialize(mapload) + . = ..() + AddElement(/datum/element/repackable, repacked_type, 5 SECONDS) + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + if(!mapload) + flick("smes_deploy", src) + +/obj/machinery/power/smes/battery_pack/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + if(screwdriver.tool_behaviour != TOOL_SCREWDRIVER) + return FALSE + + screwdriver.play_tool_sound(src, 50) + toggle_panel_open() + if(panel_open) + icon_state = icon_state_open + to_chat(user, span_notice("You open the maintenance hatch of [src].")) + else + icon_state = icon_state_closed + to_chat(user, span_notice("You close the maintenance hatch of [src].")) + return TRUE + +// We don't care about the parts updates because we don't want them to change +/obj/machinery/power/smes/battery_pack/RefreshParts() + return + +// We also don't need to bother with fuddling with charging power cells, there are none to remove +/obj/machinery/power/smes/battery_pack/on_deconstruction() + return + +// Automatically set themselves to be completely charged on init + +/obj/machinery/power/smes/battery_pack/precharged + +/obj/machinery/power/smes/battery_pack/precharged/Initialize(mapload) + . = ..() + charge = capacity + +// Item for creating the small battery and carrying it around + +/obj/item/flatpacked_machine/station_battery + name = "flat-packed stationary battery" + icon_state = "battery_small_packed" + type_to_deploy = /obj/machinery/power/smes/battery_pack + +// Larger station batteries, hold more but have less in/output + +/obj/machinery/power/smes/battery_pack/large + name = "large stationary battery" + desc = "A massive block of power storage, commonly seen in high storage low output power applications. \ + Larger units such as these tend to have a respectively <b>larger energy storage</b>, though only capable of \ + <b>low maximum output</b> compared to smaller units. Most commonly seen as large backup batteries, or simply \ + for large power storage where throughput is not a concern." + icon = 'modular_nova/modules/colony_fabricator/icons/power_storage_unit/large_battery.dmi' + capacity = 10000 * 1000 + input_level_max = 50 * 1000 + output_level_max = 50 * 1000 + repacked_type = /obj/item/flatpacked_machine/large_station_battery + +// Automatically set themselves to be completely charged on init + +/obj/machinery/power/smes/battery_pack/large/precharged + +/obj/machinery/power/smes/battery_pack/large/precharged/Initialize(mapload) + . = ..() + charge = capacity + +/obj/item/flatpacked_machine/large_station_battery + name = "flat-packed large stationary battery" + icon_state = "battery_large_packed" + type_to_deploy = /obj/machinery/power/smes/battery_pack/large diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/rtg.dm b/modular_nova/modules/colony_fabricator/code/machines/rtg.dm similarity index 91% rename from modular_skyrat/modules/colony_fabricator/code/machines/rtg.dm rename to modular_nova/modules/colony_fabricator/code/machines/rtg.dm index 6e2c769b2fdb45..4690ceb8aff405 100644 --- a/modular_skyrat/modules/colony_fabricator/code/machines/rtg.dm +++ b/modular_nova/modules/colony_fabricator/code/machines/rtg.dm @@ -4,9 +4,9 @@ design of generator has forgone the heavy radiation shielding that most RTG designs include. \ In better news, these tend to be pretty good with making a passable trickle of power for any \ application." - icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi' + icon = 'modular_nova/modules/colony_fabricator/icons/machines.dmi' circuit = null - flags_1 = NODECONSTRUCT_1 + obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION power_gen = 7500 /// What we turn into when we are repacked var/repacked_type = /obj/item/flatpacked_machine/rtg diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/solar_panels.dm b/modular_nova/modules/colony_fabricator/code/machines/solar_panels.dm similarity index 89% rename from modular_skyrat/modules/colony_fabricator/code/machines/solar_panels.dm rename to modular_nova/modules/colony_fabricator/code/machines/solar_panels.dm index c7708bbdee17b9..d8cba4dfadabee 100644 --- a/modular_skyrat/modules/colony_fabricator/code/machines/solar_panels.dm +++ b/modular_nova/modules/colony_fabricator/code/machines/solar_panels.dm @@ -1,8 +1,8 @@ // Solar panels /obj/machinery/power/solar/deployable - icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi' - flags_1 = NODECONSTRUCT_1 + icon = 'modular_nova/modules/colony_fabricator/icons/machines.dmi' + obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION /// The item we turn into when repacked var/repacked_type = /obj/item/flatpacked_machine/solar @@ -35,8 +35,8 @@ // Solar trackers /obj/machinery/power/tracker/deployable - icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi' - flags_1 = NODECONSTRUCT_1 + icon = 'modular_nova/modules/colony_fabricator/icons/machines.dmi' + obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION /// The item we turn into when repacked var/repacked_type = /obj/item/flatpacked_machine/solar_tracker diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/solid_fuel_generator.dm b/modular_nova/modules/colony_fabricator/code/machines/solid_fuel_generator.dm similarity index 95% rename from modular_skyrat/modules/colony_fabricator/code/machines/solid_fuel_generator.dm rename to modular_nova/modules/colony_fabricator/code/machines/solid_fuel_generator.dm index 4fc0f9b781be8b..caa7883f643881 100644 --- a/modular_skyrat/modules/colony_fabricator/code/machines/solid_fuel_generator.dm +++ b/modular_nova/modules/colony_fabricator/code/machines/solid_fuel_generator.dm @@ -7,11 +7,11 @@ but at least it makes a hell of a lot more power. Must be <b>bolted to the ground</b> \ and <b>attached to a wire</b> before use. A massive warning label wants you to know that this generator \ <b>outputs waste heat and gasses to the air around it</b>." - icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi' + icon = 'modular_nova/modules/colony_fabricator/icons/machines.dmi' icon_state = "fuel_generator_0" base_icon_state = "fuel_generator" circuit = null - flags_1 = NODECONSTRUCT_1 + obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION anchored = TRUE max_sheets = 25 time_per_sheet = 100 diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/thermomachine.dm b/modular_nova/modules/colony_fabricator/code/machines/thermomachine.dm similarity index 84% rename from modular_skyrat/modules/colony_fabricator/code/machines/thermomachine.dm rename to modular_nova/modules/colony_fabricator/code/machines/thermomachine.dm index 741aabd06261c6..063a9f07bd5068 100644 --- a/modular_skyrat/modules/colony_fabricator/code/machines/thermomachine.dm +++ b/modular_nova/modules/colony_fabricator/code/machines/thermomachine.dm @@ -1,5 +1,5 @@ /obj/machinery/atmospherics/components/unary/thermomachine/deployable - icon = 'modular_skyrat/modules/colony_fabricator/icons/thermomachine.dmi' + icon = 'modular_nova/modules/colony_fabricator/icons/thermomachine.dmi' name = "atmospheric temperature regulator" desc = "A much more tame variant of the thermomachines commonly seen in station scale temperature control devices. \ Its upper and lower bounds for temperature are highly limited, though it has a higher than standard heat capacity \ @@ -20,6 +20,7 @@ AddElement(/datum/element/repackable, repacked_type, 2 SECONDS) AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) flick("thermo_deploy", src) + setDir(dir) /obj/machinery/atmospherics/components/unary/thermomachine/deployable/RefreshParts() . = ..() @@ -48,8 +49,12 @@ /datum/material/glass = SHEET_MATERIAL_AMOUNT, ) +// This prevents some weird visual bugs with the inlet +/obj/item/flatpacked_machine/thermomachine/give_deployable_component() + AddComponent(/datum/component/deployable, deploy_time, type_to_deploy, direction_setting = FALSE) + // Greyscale config for the light on this machine /datum/greyscale_config/thermomachine/deployable name = "Deployable Thermomachine" - icon_file = 'modular_skyrat/modules/colony_fabricator/icons/thermomachine.dmi' + icon_file = 'modular_nova/modules/colony_fabricator/icons/thermomachine.dmi' diff --git a/modular_skyrat/modules/colony_fabricator/code/repacking_element.dm b/modular_nova/modules/colony_fabricator/code/repacking_element.dm similarity index 100% rename from modular_skyrat/modules/colony_fabricator/code/repacking_element.dm rename to modular_nova/modules/colony_fabricator/code/repacking_element.dm diff --git a/modular_nova/modules/colony_fabricator/code/tools/tools.dm b/modular_nova/modules/colony_fabricator/code/tools/tools.dm new file mode 100644 index 00000000000000..96ff98c2d40206 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/tools/tools.dm @@ -0,0 +1,151 @@ +// Like the power drill, except no speed buff but has wirecutters as well? Just trust me on this one. + +/obj/item/screwdriver/omni_drill + name = "powered driver" + desc = "The ultimate in multi purpose construction tools. With heads for wire cutting, bolt driving, and driving \ + screws, what's not to love? Well, the slow speed. Compared to other power drills these tend to be \ + <b>not much quicker than unpowered tools</b>." + icon = 'modular_nova/modules/colony_fabricator/icons/tools.dmi' + icon_state = "drill" + belt_icon_state = null + inhand_icon_state = "drill" + worn_icon_state = "drill" + lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT * 1.5, + /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, + ) + force = 10 + throwforce = 8 + throw_speed = 2 + throw_range = 3 + attack_verb_continuous = list("drills", "screws", "jabs", "whacks") + attack_verb_simple = list("drill", "screw", "jab", "whack") + hitsound = 'sound/items/drill_hit.ogg' + usesound = 'sound/items/drill_use.ogg' + w_class = WEIGHT_CLASS_SMALL + toolspeed = 1 + random_color = FALSE + greyscale_config = null + greyscale_config_belt = null + greyscale_config_inhand_left = null + greyscale_config_inhand_right = null + /// Used on Initialize, how much time to cut cable restraints and zipties. + var/snap_time_weak_handcuffs = 0 SECONDS + /// Used on Initialize, how much time to cut real handcuffs. Null means it can't. + var/snap_time_strong_handcuffs = null + +/obj/item/screwdriver/omni_drill/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + +/obj/item/screwdriver/omni_drill/get_all_tool_behaviours() + return list(TOOL_WIRECUTTER, TOOL_SCREWDRIVER, TOOL_WRENCH) + +/obj/item/screwdriver/omni_drill/examine(mob/user) + . = ..() + . += span_notice("Use <b>in hand</b> to switch configuration.\n") + . += span_notice("It functions as a <b>[tool_behaviour]</b> tool.") + +/obj/item/screwdriver/omni_drill/update_icon_state() + . = ..() + switch(tool_behaviour) + if(TOOL_SCREWDRIVER) + icon_state = initial(icon_state) + if(TOOL_WRENCH) + icon_state = "[initial(icon_state)]_bolt" + if(TOOL_WIRECUTTER) + icon_state = "[initial(icon_state)]_cut" + +/obj/item/screwdriver/omni_drill/attack_self(mob/user, modifiers) + . = ..() + if(!user) + return + var/list/tool_list = list( + "Screwdriver" = image(icon = icon, icon_state = "drill"), + "Wrench" = image(icon = icon, icon_state = "drill_bolt"), + "Wirecutters" = image(icon = icon, icon_state = "drill_cut"), + ) + var/tool_result = show_radial_menu(user, src, tool_list, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE) + if(!check_menu(user) || !tool_result) + return + RemoveElement(/datum/element/cuffsnapping, snap_time_weak_handcuffs, snap_time_strong_handcuffs) + switch(tool_result) + if("Wrench") + tool_behaviour = TOOL_WRENCH + sharpness = NONE + if("Wirecutters") + tool_behaviour = TOOL_WIRECUTTER + sharpness = NONE + AddElement(/datum/element/cuffsnapping, snap_time_weak_handcuffs, snap_time_strong_handcuffs) + if("Screwdriver") + tool_behaviour = TOOL_SCREWDRIVER + sharpness = SHARP_POINTY + playsound(src, 'sound/items/change_drill.ogg', 50, vary = TRUE) + update_appearance(UPDATE_ICON) + +/obj/item/screwdriver/omni_drill/proc/check_menu(mob/user) + if(!istype(user)) + return FALSE + if(user.incapacitated() || !user.Adjacent(src)) + return FALSE + return TRUE + +// Just a completely normal crowbar except its normal sized and can force doors like jaws of life can + +/obj/item/crowbar/large/doorforcer + name = "prybar" + desc = "A large, sturdy crowbar, painted orange. This one just happens to be tough enough to \ + survive <b>forcing doors open</b>." + icon = 'modular_nova/modules/colony_fabricator/icons/tools.dmi' + icon_state = "prybar" + toolspeed = 1.3 + force_opens = TRUE + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75, + /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, + ) + +/obj/item/crowbar/large/doorforcer/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + +// Backpackable mining drill + +/obj/item/pickaxe/drill/compact + name = "compact mining drill" + desc = "A powered mining drill, it drills all over the place. Compact enough to hopefully fit in a backpack." + icon = 'modular_nova/modules/colony_fabricator/icons/tools.dmi' + icon_state = "drilla" + worn_icon_state = "drill" + w_class = WEIGHT_CLASS_NORMAL + toolspeed = 0.6 + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + ) + +/obj/item/pickaxe/drill/compact/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + +// Electric welder but not quite as strong + +/obj/item/weldingtool/electric/arc_welder + name = "arc welding tool" + desc = "A specialized welding tool utilizing high powered arcs of electricity to weld things together. \ + Compared to other electrically-powered welders, this model is slow and highly power inefficient, \ + but it still gets the job done and chances are you printed this bad boy off for free." + icon = 'modular_nova/modules/colony_fabricator/icons/tools.dmi' + icon_state = "arc_welder" + usesound = 'modular_nova/modules/colony_fabricator/sound/arc_welder/arc_welder.ogg' + light_range = 2 + light_power = 0.75 + toolspeed = 1 + power_use_amount = POWER_CELL_USE_INSANE + +/obj/item/weldingtool/electric/arc_welder/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) diff --git a/modular_skyrat/modules/colony_fabricator/icons/cell_charger.dmi b/modular_nova/modules/colony_fabricator/icons/cell_charger.dmi similarity index 100% rename from modular_skyrat/modules/colony_fabricator/icons/cell_charger.dmi rename to modular_nova/modules/colony_fabricator/icons/cell_charger.dmi diff --git a/modular_nova/modules/colony_fabricator/icons/chemistry_machines.dmi b/modular_nova/modules/colony_fabricator/icons/chemistry_machines.dmi new file mode 100644 index 00000000000000..96126d26101e89 Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/chemistry_machines.dmi differ diff --git a/modular_nova/modules/colony_fabricator/icons/doors/airlock.dmi b/modular_nova/modules/colony_fabricator/icons/doors/airlock.dmi new file mode 100644 index 00000000000000..a5afd63d419d5a Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/doors/airlock.dmi differ diff --git a/modular_nova/modules/colony_fabricator/icons/doors/airlock_manual.dmi b/modular_nova/modules/colony_fabricator/icons/doors/airlock_manual.dmi new file mode 100644 index 00000000000000..3ced7b3a163533 Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/doors/airlock_manual.dmi differ diff --git a/modular_nova/modules/colony_fabricator/icons/doors/overlays.dmi b/modular_nova/modules/colony_fabricator/icons/doors/overlays.dmi new file mode 100644 index 00000000000000..4a039a486a6635 Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/doors/overlays.dmi differ diff --git a/modular_nova/modules/colony_fabricator/icons/doors/packed.dmi b/modular_nova/modules/colony_fabricator/icons/doors/packed.dmi new file mode 100644 index 00000000000000..118709bb772b27 Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/doors/packed.dmi differ diff --git a/modular_nova/modules/colony_fabricator/icons/doors/shutter.dmi b/modular_nova/modules/colony_fabricator/icons/doors/shutter.dmi new file mode 100644 index 00000000000000..f29dc998999943 Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/doors/shutter.dmi differ diff --git a/modular_nova/modules/colony_fabricator/icons/foodricator.dmi b/modular_nova/modules/colony_fabricator/icons/foodricator.dmi new file mode 100644 index 00000000000000..d54728eb58aa40 Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/foodricator.dmi differ diff --git a/modular_skyrat/modules/colony_fabricator/icons/machines.dmi b/modular_nova/modules/colony_fabricator/icons/machines.dmi similarity index 100% rename from modular_skyrat/modules/colony_fabricator/icons/machines.dmi rename to modular_nova/modules/colony_fabricator/icons/machines.dmi diff --git a/modular_nova/modules/colony_fabricator/icons/ore_silo.dmi b/modular_nova/modules/colony_fabricator/icons/ore_silo.dmi new file mode 100644 index 00000000000000..8cbf8158644a3b Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/ore_silo.dmi differ diff --git a/modular_skyrat/modules/colony_fabricator/icons/packed_machines.dmi b/modular_nova/modules/colony_fabricator/icons/packed_machines.dmi similarity index 100% rename from modular_skyrat/modules/colony_fabricator/icons/packed_machines.dmi rename to modular_nova/modules/colony_fabricator/icons/packed_machines.dmi diff --git a/modular_nova/modules/colony_fabricator/icons/parts_kits.dmi b/modular_nova/modules/colony_fabricator/icons/parts_kits.dmi new file mode 100644 index 00000000000000..75a4e97e23f157 Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/parts_kits.dmi differ diff --git a/modular_nova/modules/colony_fabricator/icons/portable_machines.dmi b/modular_nova/modules/colony_fabricator/icons/portable_machines.dmi new file mode 100644 index 00000000000000..046d517a0de072 Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/portable_machines.dmi differ diff --git a/modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/large_battery.dmi b/modular_nova/modules/colony_fabricator/icons/power_storage_unit/large_battery.dmi similarity index 100% rename from modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/large_battery.dmi rename to modular_nova/modules/colony_fabricator/icons/power_storage_unit/large_battery.dmi diff --git a/modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/small_battery.dmi b/modular_nova/modules/colony_fabricator/icons/power_storage_unit/small_battery.dmi similarity index 100% rename from modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/small_battery.dmi rename to modular_nova/modules/colony_fabricator/icons/power_storage_unit/small_battery.dmi diff --git a/modular_nova/modules/colony_fabricator/icons/prefab_wall.dmi b/modular_nova/modules/colony_fabricator/icons/prefab_wall.dmi new file mode 100644 index 00000000000000..e1aec0f273add6 Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/prefab_wall.dmi differ diff --git a/modular_nova/modules/colony_fabricator/icons/prefab_window.dmi b/modular_nova/modules/colony_fabricator/icons/prefab_window.dmi new file mode 100644 index 00000000000000..7845026875deed Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/prefab_window.dmi differ diff --git a/modular_skyrat/modules/colony_fabricator/icons/thermomachine.dmi b/modular_nova/modules/colony_fabricator/icons/thermomachine.dmi similarity index 100% rename from modular_skyrat/modules/colony_fabricator/icons/thermomachine.dmi rename to modular_nova/modules/colony_fabricator/icons/thermomachine.dmi diff --git a/modular_nova/modules/colony_fabricator/icons/tiles.dmi b/modular_nova/modules/colony_fabricator/icons/tiles.dmi new file mode 100644 index 00000000000000..068107aa0fdc93 Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/tiles.dmi differ diff --git a/modular_nova/modules/colony_fabricator/icons/tiles_item.dmi b/modular_nova/modules/colony_fabricator/icons/tiles_item.dmi new file mode 100644 index 00000000000000..0e76bd25d2c867 Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/tiles_item.dmi differ diff --git a/modular_skyrat/modules/colony_fabricator/icons/tools.dmi b/modular_nova/modules/colony_fabricator/icons/tools.dmi similarity index 100% rename from modular_skyrat/modules/colony_fabricator/icons/tools.dmi rename to modular_nova/modules/colony_fabricator/icons/tools.dmi diff --git a/modular_nova/modules/colony_fabricator/icons/wind_turbine.dmi b/modular_nova/modules/colony_fabricator/icons/wind_turbine.dmi new file mode 100644 index 00000000000000..26a37260b73d98 Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/wind_turbine.dmi differ diff --git a/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav b/modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav similarity index 100% rename from modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav rename to modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav diff --git a/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav b/modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav similarity index 100% rename from modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav rename to modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav diff --git a/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav b/modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav similarity index 100% rename from modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav rename to modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav diff --git a/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav b/modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav similarity index 100% rename from modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav rename to modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav diff --git a/modular_nova/modules/colony_fabricator/sound/arc_welder/arc_welder.ogg b/modular_nova/modules/colony_fabricator/sound/arc_welder/arc_welder.ogg new file mode 100644 index 00000000000000..8c76738f0f4737 Binary files /dev/null and b/modular_nova/modules/colony_fabricator/sound/arc_welder/arc_welder.ogg differ diff --git a/modular_nova/modules/colony_fabricator/sound/attributions.txt b/modular_nova/modules/colony_fabricator/sound/attributions.txt new file mode 100644 index 00000000000000..be436734b0a215 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/sound/attributions.txt @@ -0,0 +1,16 @@ +The following sounds have been recorded, edited and added by Paxilmaniac: + +modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_(1 - 4).wav +modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_(1 - 4).wav +modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_end.wav +modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_start.wav + +The following sounds are from https://pixabay.com/sound-effects/wall-air-conditioner-43901/ + +modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_(1 - 4).wav + +The following sounds are from https://pixabay.com/sound-effects/welder-3-54547/ + +modular_nova/modules/colony_fabricator/sound/arc_welder/arc_welder.ogg + +The sounds at modular_skyrat/modules/colony_fabriactor_event_code/sound/manual_door are from https://pixabay.com/sound-effects/schlonk-107321/ diff --git a/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_1.wav b/modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_1.wav similarity index 100% rename from modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_1.wav rename to modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_1.wav diff --git a/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_2.wav b/modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_2.wav similarity index 100% rename from modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_2.wav rename to modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_2.wav diff --git a/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_3.wav b/modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_3.wav similarity index 100% rename from modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_3.wav rename to modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_3.wav diff --git a/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_4.wav b/modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_4.wav similarity index 100% rename from modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_4.wav rename to modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_4.wav diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_end.wav b/modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_end.wav similarity index 100% rename from modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_end.wav rename to modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_end.wav diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_1.wav b/modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_1.wav similarity index 100% rename from modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_1.wav rename to modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_1.wav diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_2.wav b/modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_2.wav similarity index 100% rename from modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_2.wav rename to modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_2.wav diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_3.wav b/modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_3.wav similarity index 100% rename from modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_3.wav rename to modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_3.wav diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_4.wav b/modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_4.wav similarity index 100% rename from modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_4.wav rename to modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_4.wav diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_start.wav b/modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_start.wav similarity index 100% rename from modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_start.wav rename to modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_start.wav diff --git a/modular_nova/modules/colony_fabricator/sound/manual_door/manual_door_close.wav b/modular_nova/modules/colony_fabricator/sound/manual_door/manual_door_close.wav new file mode 100644 index 00000000000000..a2f6ad300b0cc0 Binary files /dev/null and b/modular_nova/modules/colony_fabricator/sound/manual_door/manual_door_close.wav differ diff --git a/modular_nova/modules/colony_fabricator/sound/manual_door/manual_door_open.wav b/modular_nova/modules/colony_fabricator/sound/manual_door/manual_door_open.wav new file mode 100644 index 00000000000000..431b3eb6ea01e4 Binary files /dev/null and b/modular_nova/modules/colony_fabricator/sound/manual_door/manual_door_open.wav differ diff --git a/modular_nova/modules/command_vendor/code/vending.dm b/modular_nova/modules/command_vendor/code/vending.dm new file mode 100644 index 00000000000000..86a10c0f614b41 --- /dev/null +++ b/modular_nova/modules/command_vendor/code/vending.dm @@ -0,0 +1,175 @@ +/obj/machinery/vending/access/command + name = "\improper Command Outfitting Station" + desc = "A vending machine for specialised clothing for members of Command." + product_ads = "File paperwork in style!;It's red so you can't see the blood!;You have the right to be fashionable!;Now you can be the fashion police you always wanted to be!" + icon = 'modular_nova/modules/command_vendor/icons/vending.dmi' + icon_state = "commdrobe" + light_mask = "wardrobe-light-mask" + vend_reply = "Thank you for using the CommDrobe!" + auto_build_products = TRUE + payment_department = ACCOUNT_CMD + + refill_canister = /obj/item/vending_refill/wardrobe/comm_wardrobe + payment_department = ACCOUNT_CMD + light_color = COLOR_COMMAND_BLUE + +/obj/item/vending_refill/wardrobe/comm_wardrobe + machine_name = "CommDrobe" + +/obj/machinery/vending/access/command/build_access_list(list/access_lists) + access_lists["[ACCESS_CAPTAIN]"] = list( + // CAPTAIN + /obj/item/clothing/head/hats/caphat = 1, + /obj/item/clothing/head/caphat/beret = 1, + /obj/item/clothing/head/caphat/beret/alt = 1, + /obj/item/clothing/head/hats/imperial/cap = 1, + /obj/item/clothing/under/rank/captain = 1, + /obj/item/clothing/under/rank/captain/skirt = 1, + /obj/item/clothing/under/rank/captain/dress = 1, + /obj/item/clothing/under/rank/captain/nova/kilt = 1, + /obj/item/clothing/under/rank/captain/nova/imperial = 1, + /obj/item/clothing/head/hats/caphat/parade = 1, + /obj/item/clothing/under/rank/captain/parade = 1, + /obj/item/clothing/suit/armor/vest/capcarapace/captains_formal = 1, + /obj/item/clothing/suit/armor/vest/capcarapace/jacket = 1, + /obj/item/clothing/suit/jacket/capjacket = 1, + /obj/item/clothing/neck/cloak/cap = 1, + /obj/item/clothing/neck/mantle/capmantle = 1, + /obj/item/storage/backpack/captain = 1, + /obj/item/storage/backpack/satchel/cap = 1, + /obj/item/storage/backpack/duffelbag/captain = 1, + /obj/item/storage/backpack/messenger/cap = 1, + /obj/item/clothing/shoes/sneakers/brown = 1, + + // BLUESHIELD + /obj/item/clothing/head/beret/blueshield = 1, + /obj/item/clothing/head/beret/blueshield/navy = 1, + /obj/item/clothing/under/rank/blueshield = 1, + /obj/item/clothing/under/rank/blueshield/skirt = 1, + /obj/item/clothing/under/rank/blueshield/turtleneck = 1, + /obj/item/clothing/under/rank/blueshield/turtleneck/skirt = 1, + /obj/item/clothing/suit/armor/vest/blueshield = 1, + /obj/item/clothing/suit/armor/vest/blueshield/jacket = 1, + /obj/item/clothing/neck/mantle/bsmantle = 1, + /obj/item/storage/backpack/blueshield = 1, + /obj/item/storage/backpack/satchel/blueshield = 1, + /obj/item/storage/backpack/duffelbag/blueshield = 1, + /obj/item/storage/backpack/messenger/blueshield = 1, + /obj/item/clothing/shoes/laceup = 1, + ) + access_lists["[ACCESS_HOP]"] = list( // Best head btw + /obj/item/clothing/head/hats/hopcap = 1, + /obj/item/clothing/head/hopcap/beret = 1, + /obj/item/clothing/head/hopcap/beret/alt = 1, + /obj/item/clothing/head/hats/imperial/hop = 1, + /obj/item/clothing/under/rank/civilian/head_of_personnel = 1, + /obj/item/clothing/under/rank/civilian/head_of_personnel/skirt = 1, + /obj/item/clothing/under/rank/civilian/head_of_personnel/nova/turtleneck = 1, + /obj/item/clothing/under/rank/civilian/head_of_personnel/nova/turtleneck/skirt = 1, + /obj/item/clothing/under/rank/civilian/head_of_personnel/nova/parade = 1, + /obj/item/clothing/under/rank/civilian/head_of_personnel/nova/parade/female = 1, + /obj/item/clothing/under/rank/civilian/head_of_personnel/nova/imperial = 1, + /obj/item/clothing/suit/armor/vest/hop/hop_formal = 1, + /obj/item/clothing/neck/cloak/hop = 1, + /obj/item/clothing/neck/mantle/hopmantle = 1, + /obj/item/storage/backpack/head_of_personnel = 1, + /obj/item/storage/backpack/satchel/head_of_personnel = 1, + /obj/item/storage/backpack/duffelbag/head_of_personnel = 1, + /obj/item/storage/backpack/messenger/head_of_personnel = 1, + /obj/item/clothing/shoes/sneakers/brown = 1, + ) + access_lists["[ACCESS_CMO]"] = list( + /obj/item/clothing/head/beret/medical/cmo = 1, + /obj/item/clothing/head/beret/medical/cmo/alt = 1, + /obj/item/clothing/head/hats/imperial/cmo = 1, + /obj/item/clothing/under/rank/medical/chief_medical_officer = 1, + /obj/item/clothing/under/rank/medical/chief_medical_officer/skirt = 1, + /obj/item/clothing/under/rank/medical/chief_medical_officer/turtleneck = 1, + /obj/item/clothing/under/rank/medical/chief_medical_officer/nova/imperial = 1, + /obj/item/clothing/neck/cloak/cmo = 1, + /obj/item/clothing/neck/mantle/cmomantle = 1, + /obj/item/clothing/shoes/sneakers/brown = 1, + ) + access_lists["[ACCESS_RD]"] = list( + /obj/item/clothing/head/beret/science/rd = 1, + /obj/item/clothing/head/beret/science/rd/alt = 1, + /obj/item/clothing/under/rank/rnd/research_director = 1, + /obj/item/clothing/under/rank/rnd/research_director/skirt = 1, + /obj/item/clothing/under/rank/rnd/research_director/alt = 1, + /obj/item/clothing/under/rank/rnd/research_director/turtleneck = 1, + /obj/item/clothing/under/rank/rnd/research_director/turtleneck/skirt = 1, + /obj/item/clothing/under/rank/rnd/research_director/nova/jumpsuit = 1, + /obj/item/clothing/under/rank/rnd/research_director/nova/jumpsuit/skirt = 1, + /obj/item/clothing/under/rank/rnd/research_director/nova/imperial = 1, + /obj/item/clothing/neck/cloak/rd = 1, + /obj/item/clothing/neck/mantle/rdmantle = 1, + /obj/item/clothing/suit/toggle/labcoat = 1, + /obj/item/clothing/shoes/sneakers/brown = 1, + ) + access_lists["[ACCESS_CE]"] = list( + /obj/item/clothing/head/beret/engi/ce = 1, + /obj/item/clothing/head/hats/imperial/ce = 1, + /obj/item/clothing/under/rank/engineering/chief_engineer = 1, + /obj/item/clothing/under/rank/engineering/chief_engineer/skirt = 1, + /obj/item/clothing/under/rank/engineering/chief_engineer/nova/imperial = 1, + /obj/item/clothing/neck/cloak/ce = 1, + /obj/item/clothing/neck/mantle/cemantle = 1, + /obj/item/clothing/shoes/sneakers/brown = 1, + ) + access_lists["[ACCESS_HOS]"] = list( + /obj/item/clothing/head/hats/hos/cap = 1, + /obj/item/clothing/head/hats/hos/beret/navyhos = 1, + /obj/item/clothing/head/hats/imperial/hos = 1, + /obj/item/clothing/under/rank/security/head_of_security/peacekeeper = 1, + /obj/item/clothing/under/rank/security/head_of_security/alt = 1, + /obj/item/clothing/under/rank/security/head_of_security/alt/skirt = 1, + /obj/item/clothing/under/rank/security/head_of_security/nova/imperial = 1, + /obj/item/clothing/suit/jacket/hos/blue = 1, + /obj/item/clothing/under/rank/security/head_of_security/parade = 1, + /obj/item/clothing/suit/armor/hos/hos_formal = 1, + /obj/item/clothing/neck/cloak/hos = 1, + /obj/item/clothing/neck/cloak/hos/redsec = 1, + /obj/item/clothing/neck/mantle/hosmantle = 1, + /obj/item/clothing/shoes/sneakers/brown = 1, + ) + access_lists["[ACCESS_QM]"] = list( + /obj/item/clothing/head/beret/cargo/qm = 1, + /obj/item/clothing/head/beret/cargo/qm/alt = 1, + /obj/item/clothing/neck/cloak/qm = 1, + /obj/item/clothing/neck/mantle/qm = 1, + /obj/item/clothing/under/rank/cargo/qm = 1, + /obj/item/clothing/under/rank/cargo/qm/skirt = 1, + /obj/item/clothing/under/rank/cargo/qm/nova/gorka = 1, + /obj/item/clothing/under/rank/cargo/qm/nova/turtleneck = 1, + /obj/item/clothing/under/rank/cargo/qm/nova/turtleneck/skirt = 1, + /obj/item/clothing/suit/brownfurrich = 1, + /obj/item/clothing/under/rank/cargo/qm/nova/casual = 1, + /obj/item/clothing/suit/toggle/jacket/supply/head = 1, + /obj/item/clothing/under/rank/cargo/qm/nova/formal = 1, + /obj/item/clothing/under/rank/cargo/qm/nova/formal/skirt = 1, + /obj/item/clothing/shoes/sneakers/brown = 1, + ) + + access_lists["[ACCESS_CENT_GENERAL]"] = list( // CC Rep Shiz + /obj/item/clothing/head/nanotrasen_consultant = 1, + /obj/item/clothing/head/nanotrasen_consultant/beret = 1, + /obj/item/clothing/head/beret/centcom_formal/nt_consultant = 1, + /obj/item/clothing/under/rank/nanotrasen_consultant = 1, + /obj/item/clothing/under/rank/nanotrasen_consultant/skirt = 1, + /obj/item/clothing/head/hats/centhat = 1, + /obj/item/clothing/suit/armor/centcom_formal/nt_consultant = 1, + /obj/item/clothing/gloves/combat/naval/nanotrasen_consultant = 1, + ) + + access_lists["[ACCESS_COMMAND]"] = list( + /obj/item/clothing/head/hats/imperial = 5, + /obj/item/clothing/head/hats/imperial/grey = 5, + /obj/item/clothing/head/hats/imperial/white = 2, + /obj/item/clothing/head/hats/imperial/red = 5, + /obj/item/clothing/head/hats/imperial/helmet = 5, + /obj/item/clothing/under/rank/captain/nova/imperial/generic = 5, + /obj/item/clothing/under/rank/captain/nova/imperial/generic/grey = 5, + /obj/item/clothing/under/rank/captain/nova/imperial/generic/pants = 5, + /obj/item/clothing/under/rank/captain/nova/imperial/generic/red = 5, + ) + diff --git a/modular_skyrat/modules/command_vendor/icons/vending.dmi b/modular_nova/modules/command_vendor/icons/vending.dmi similarity index 100% rename from modular_skyrat/modules/command_vendor/icons/vending.dmi rename to modular_nova/modules/command_vendor/icons/vending.dmi diff --git a/modular_nova/modules/company_imports/code/armament_component.dm b/modular_nova/modules/company_imports/code/armament_component.dm new file mode 100644 index 00000000000000..a4d264d2ed007e --- /dev/null +++ b/modular_nova/modules/company_imports/code/armament_component.dm @@ -0,0 +1,302 @@ +#define MAX_AMMO_AMOUNT 10 +#define CARGO_CONSOLE 1 +#define IRN_CONSOLE 2 + +/datum/component/armament/company_imports + /// Selected amount of ammo to purchase + var/ammo_purchase_num = 1 + /// Is this set to private order + var/self_paid = FALSE + /// Cooldown to announce a requested order + COOLDOWN_DECLARE(radio_cooldown) + /// To cut down on redundant istypes(), what this component is attached to + var/console_state = null + /// If this is a tablet, the parent budgetordering + var/datum/computer_file/program/budgetorders/parent_prog + +/datum/component/armament/company_imports/Initialize(list/required_products, list/needed_access) + . = ..() + if(istype(parent, /obj/machinery/computer/cargo)) + console_state = CARGO_CONSOLE + else if(istype(parent, /obj/item/modular_computer)) + console_state = IRN_CONSOLE + +/datum/component/armament/company_imports/Destroy(force) + parent_prog = null + . = ..() + +/datum/component/armament/company_imports/on_attack_hand(datum/source, mob/living/user) + return + +/datum/component/armament/company_imports/on_attackby(atom/target, obj/item, mob/user) + return + +/datum/component/armament/company_imports/ui_data(mob/user) + var/list/data = list() + + var/mob/living/carbon/human/the_person = user + var/obj/item/card/id/id_card + var/datum/bank_account/buyer = SSeconomy.get_dep_account(ACCOUNT_CAR) + + if(console_state == IRN_CONSOLE) + id_card = parent_prog.computer.computer_id_slot?.GetID() + else + if(istype(the_person)) + id_card = the_person.get_idcard(TRUE) + + var/budget_name = "Cargo Budget" + + if(id_card?.registered_account && (console_state == IRN_CONSOLE)) + if((ACCESS_COMMAND in id_card.access) || (ACCESS_QM in id_card.access)) + parent_prog.requestonly = FALSE + buyer = SSeconomy.get_dep_account(id_card.registered_account?.account_job.paycheck_department) + parent_prog.can_approve_requests = TRUE + else + parent_prog.requestonly = TRUE + parent_prog.can_approve_requests = FALSE + else + parent_prog?.requestonly = TRUE + + if(id_card) + budget_name = self_paid ? id_card.name : buyer.account_holder + + data["budget_name"] = budget_name + + var/cant_buy_restricted = TRUE + + if(console_state == CARGO_CONSOLE) + var/obj/machinery/computer/cargo/console = parent + if(!console.requestonly) + cant_buy_restricted = FALSE + + else if((console_state == IRN_CONSOLE) && id_card?.registered_account) + if((ACCESS_COMMAND in id_card.access) || (ACCESS_QM in id_card.access)) + if((buyer == SSeconomy.get_dep_account(id_card.registered_account.account_job.paycheck_department)) && !self_paid) + cant_buy_restricted = FALSE + + data["cant_buy_restricted"] = !!cant_buy_restricted + data["budget_points"] = self_paid ? id_card?.registered_account?.account_balance : buyer?.account_balance + data["ammo_amount"] = ammo_purchase_num + data["self_paid"] = !!self_paid + data["armaments_list"] = list() + + for(var/armament_category as anything in SSarmaments.entries) + + var/list/armament_subcategories = list() + + for(var/subcategory as anything in SSarmaments.entries[armament_category][CATEGORY_ENTRY]) + var/list/subcategory_items = list() + for(var/datum/armament_entry/armament_entry as anything in SSarmaments.entries[armament_category][CATEGORY_ENTRY][subcategory]) + if(products && !(armament_entry.type in products)) + continue + + var/datum/armament_entry/company_import/gun_entry = armament_entry + + if(gun_entry.contraband) + if(!(console_state == CARGO_CONSOLE)) + continue + var/obj/machinery/computer/cargo/parent_console = parent + if(!parent_console.contraband) + continue + + subcategory_items += list(list( + "ref" = REF(armament_entry), + "icon" = armament_entry.cached_base64, + "name" = armament_entry.name, + "cost" = armament_entry.cost, + "buyable_ammo" = armament_entry.magazine ? TRUE : FALSE, + "magazine_cost" = armament_entry.magazine_cost, + "purchased" = purchased_items[armament_entry] ? purchased_items[armament_entry] : 0, + "description" = armament_entry.description, + "armament_category" = armament_entry.category, + "equipment_subcategory" = armament_entry.subcategory, + "restricted" = !!armament_entry.restricted, + )) + + if(!LAZYLEN(subcategory_items)) + continue + + armament_subcategories += list(list( + "subcategory" = subcategory, + "items" = subcategory_items, + )) + + if(!LAZYLEN(armament_subcategories)) + continue + + data["armaments_list"] += list(list( + "category" = armament_category, + "category_uses" = used_categories[armament_category], + "subcategories" = armament_subcategories, + )) + + return data + +/datum/component/armament/company_imports/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "CargoImportConsole") + ui.open() + +/datum/component/armament/company_imports/select_armament(mob/user, datum/armament_entry/company_import/armament_entry) + var/datum/bank_account/buyer = SSeconomy.get_dep_account(ACCOUNT_CAR) + var/obj/item/modular_computer/possible_downloader + var/obj/machinery/computer/cargo/possible_console + + if(console_state == CARGO_CONSOLE) + possible_console = parent + + else if(console_state == IRN_CONSOLE) + possible_downloader = parent + + if(!istype(armament_entry)) + return + + var/mob/living/carbon/human/the_person = user + + if(istype(the_person)) + + var/obj/item/card/id/id_card + + if(console_state == IRN_CONSOLE) + id_card = parent_prog.computer.computer_id_slot?.GetID() + else + id_card = the_person.get_idcard(TRUE) + + if(id_card?.registered_account && (console_state == IRN_CONSOLE)) + if((ACCESS_COMMAND in id_card.access) || (ACCESS_QM in id_card.access)) + parent_prog.requestonly = FALSE + buyer = SSeconomy.get_dep_account(id_card.registered_account.account_job.paycheck_department) + parent_prog.can_approve_requests = TRUE + else + parent_prog.requestonly = TRUE + parent_prog.can_approve_requests = FALSE + else + parent_prog?.requestonly = TRUE + + if(self_paid) + if(!istype(id_card)) + to_chat(user, span_warning("No ID card detected.")) + return + + if(istype(id_card, /obj/item/card/id/departmental_budget)) + to_chat(user, span_warning("[id_card] cannot be used to make purchases.")) + return + + var/datum/bank_account/account = id_card.registered_account + + if(!istype(account)) + to_chat(user, span_warning("Invalid bank account.")) + return + + buyer = account + + if(issilicon(user) && (console_state == IRN_CONSOLE)) + parent_prog.can_approve_requests = TRUE + parent_prog.requestonly = FALSE + + if(!buyer) + to_chat(user, span_warning("No budget found!")) + return + + if(!ishuman(user) && !issilicon(user)) + return + + if(!buyer.has_money(armament_entry.cost)) + to_chat(user, span_warning("Not enough money!")) + return + + var/name + + if(issilicon(user)) + name = user.real_name + else + the_person.get_authentification_name() + + var/reason = "" + + if(possible_console) + if(possible_console.requestonly && !self_paid) + reason = tgui_input_text(user, "Reason", name) + if(isnull(reason)) + return + + else if(possible_downloader) + var/datum/computer_file/program/budgetorders/parent_file = parent_prog + if((parent_file.requestonly && !self_paid) || !(possible_downloader.computer_id_slot?.GetID())) + reason = tgui_input_text(user, "Reason", name) + if(isnull(reason)) + return + + used_categories[armament_entry.category]++ + + purchased_items[armament_entry]++ + + var/datum/supply_pack/armament/created_pack = new + created_pack.name = initial(armament_entry.item_type.name) + created_pack.cost = cost_calculate(armament_entry.cost) //Paid for seperately + created_pack.contains = list(armament_entry.item_type) + + var/rank + + if(issilicon(user)) + rank = "Silicon" + else + rank = the_person.get_assignment(hand_first = TRUE) + + var/ckey = user.ckey + + var/datum/supply_order/company_import/created_order + if(buyer != SSeconomy.get_dep_account(ACCOUNT_CAR)) + created_order = new(created_pack, name, rank, ckey, paying_account = buyer, reason = reason, can_be_cancelled = TRUE) + else + created_pack.goody = FALSE // Cargo ordered stuff should just show up in a box I think + created_order = new(created_pack, name, rank, ckey, reason = reason, can_be_cancelled = TRUE) + created_order.selected_entry = armament_entry + created_order.used_component = src + if(console_state == CARGO_CONSOLE) + created_order.generateRequisition(get_turf(parent)) + if(possible_console.requestonly && !self_paid) + SSshuttle.request_list += created_order + else + SSshuttle.shopping_list += created_order + else if(console_state == IRN_CONSOLE) + var/datum/computer_file/program/budgetorders/comp_file = parent_prog + created_order.generateRequisition(get_turf(parent)) + if(comp_file.requestonly && !self_paid) + SSshuttle.request_list += created_order + else + SSshuttle.shopping_list += created_order + +/datum/component/armament/company_imports/proc/cost_calculate(cost) + . = cost + . *= SSeconomy.pack_price_modifier + +/datum/component/armament/company_imports/ui_act(action, list/params) + . = ..() + if(.) + return + + switch(action) + if("toggleprivate") + var/obj/item/card/id/id_card + var/mob/living/carbon/human/the_person = usr + + if(!istype(the_person)) + if(issilicon(the_person)) + self_paid = FALSE + return + + if(console_state == IRN_CONSOLE) + id_card = parent_prog.computer.computer_id_slot?.GetID() + else + id_card = the_person.get_idcard(TRUE) + + if(!id_card) + return + + self_paid = !self_paid + +#undef MAX_AMMO_AMOUNT +#undef CARGO_CONSOLE +#undef IRN_CONSOLE diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/_armament_basetype.dm b/modular_nova/modules/company_imports/code/armament_datums/_armament_basetype.dm similarity index 100% rename from modular_skyrat/modules/company_imports/code/armament_datums/_armament_basetype.dm rename to modular_nova/modules/company_imports/code/armament_datums/_armament_basetype.dm diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/akh_frontier.dm b/modular_nova/modules/company_imports/code/armament_datums/akh_frontier.dm similarity index 80% rename from modular_skyrat/modules/company_imports/code/armament_datums/akh_frontier.dm rename to modular_nova/modules/company_imports/code/armament_datums/akh_frontier.dm index 1c42f23b121d96..290ab7386fc8af 100644 --- a/modular_skyrat/modules/company_imports/code/armament_datums/akh_frontier.dm +++ b/modular_nova/modules/company_imports/code/armament_datums/akh_frontier.dm @@ -31,6 +31,10 @@ cost = CARGO_CRATE_VALUE * 6 restricted = TRUE +/datum/armament_entry/company_import/akh_frontier/deployables_fab/foodricator + item_type = /obj/item/flatpacked_machine/organics_ration_printer + cost = CARGO_CRATE_VALUE * 2 + // Various smaller appliances than the deployable machines below /datum/armament_entry/company_import/akh_frontier/appliances @@ -44,6 +48,13 @@ /datum/armament_entry/company_import/akh_frontier/appliances/water_synth item_type = /obj/item/flatpacked_machine/water_synth +/datum/armament_entry/company_import/akh_frontier/appliances/hydro_synth + item_type = /obj/item/flatpacked_machine/hydro_synth + +/datum/armament_entry/company_import/akh_frontier/appliances/sustenance_dispenser + item_type = /obj/item/flatpacked_machine/sustenance_machine + cost = PAYCHECK_COMMAND * 2 + // Flatpacked, ready to deploy machines /datum/armament_entry/company_import/akh_frontier/deployables_misc @@ -56,6 +67,12 @@ /datum/armament_entry/company_import/akh_frontier/deployables_misc/thermomachine item_type = /obj/item/flatpacked_machine/thermomachine +/datum/armament_entry/company_import/akh_frontier/deployables_misc/co2_cracker + item_type = /obj/item/flatpacked_machine/co2_cracker + +/datum/armament_entry/company_import/akh_frontier/deployables_misc/recycler + item_type = /obj/item/flatpacked_machine/recycler + // Flatpacked, ready to deploy machines for power related activities /datum/armament_entry/company_import/akh_frontier/deployables diff --git a/modular_nova/modules/company_imports/code/armament_datums/deforest_medical.dm b/modular_nova/modules/company_imports/code/armament_datums/deforest_medical.dm new file mode 100644 index 00000000000000..c9bd351f5f2c24 --- /dev/null +++ b/modular_nova/modules/company_imports/code/armament_datums/deforest_medical.dm @@ -0,0 +1,198 @@ +/datum/armament_entry/company_import/deforest + category = DEFOREST_MEDICAL_NAME + company_bitflag = CARGO_COMPANY_DEFOREST + +// Precompiled first aid kits, ready to go if you don't want to bother getting individual items + +/datum/armament_entry/company_import/deforest/first_aid_kit + subcategory = "First-Aid Kits" + +/datum/armament_entry/company_import/deforest/first_aid_kit/civil_defense + item_type = /obj/item/storage/medkit/civil_defense/stocked + cost = PAYCHECK_COMMAND * 4 + +/datum/armament_entry/company_import/deforest/first_aid_kit/frontier + item_type = /obj/item/storage/medkit/frontier/stocked + cost = PAYCHECK_COMMAND * 5 + +/datum/armament_entry/company_import/deforest/first_aid_kit/combat_surgeon + item_type = /obj/item/storage/medkit/combat_surgeon/stocked + cost = PAYCHECK_COMMAND * 6 + +/datum/armament_entry/company_import/deforest/first_aid_kit/first_responder + item_type = /obj/item/storage/backpack/duffelbag/deforest_surgical/stocked + cost = PAYCHECK_COMMAND * 10 + +/datum/armament_entry/company_import/deforest/first_aid_kit/orange_satchel + item_type = /obj/item/storage/backpack/duffelbag/deforest_medkit/stocked + cost = PAYCHECK_COMMAND * 15 + +// Basic first aid supplies like gauze, sutures, mesh, so on + +/datum/armament_entry/company_import/deforest/first_aid + subcategory = "First-Aid Consumables" + +/datum/armament_entry/company_import/deforest/first_aid/coagulant + item_type = /obj/item/stack/medical/suture/coagulant + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/deforest/first_aid/red_sun + item_type = /obj/item/stack/medical/ointment/red_sun + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/deforest/first_aid/sterile_gauze + item_type = /obj/item/stack/medical/gauze/sterilized + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/deforest/first_aid/amollin + item_type = /obj/item/storage/pill_bottle/painkiller + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/deforest/first_aid/subdermal_splint + item_type = /obj/item/stack/medical/wound_recovery + cost = PAYCHECK_COMMAND * 2 + +/datum/armament_entry/company_import/deforest/first_aid/rapid_coagulant + item_type = /obj/item/stack/medical/wound_recovery/rapid_coagulant + cost = PAYCHECK_COMMAND * 2 + +// Autoinjectors for healing + +/datum/armament_entry/company_import/deforest/medpens + subcategory = "Medical Autoinjectors" + cost = PAYCHECK_COMMAND * 1.5 + +/datum/armament_entry/company_import/deforest/medpens/occuisate + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/occuisate + +/datum/armament_entry/company_import/deforest/medpens/morpital + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/morpital + +/datum/armament_entry/company_import/deforest/medpens/lipital + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/lipital + +/datum/armament_entry/company_import/deforest/medpens/meridine + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/meridine + +/datum/armament_entry/company_import/deforest/medpens/calopine + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/calopine + +/datum/armament_entry/company_import/deforest/medpens/coagulants + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/coagulants + +/datum/armament_entry/company_import/deforest/medpens/lepoturi + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/lepoturi + +/datum/armament_entry/company_import/deforest/medpens/psifinil + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/psifinil + +/datum/armament_entry/company_import/deforest/medpens/halobinin + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/halobinin + +/datum/armament_entry/company_import/deforest/medpens/pentibinin + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/pentibinin + contraband = TRUE + +// Autoinjectors for fighting + +/datum/armament_entry/company_import/deforest/medpens_stim + subcategory = "Stimulant Autoinjectors" + cost = PAYCHECK_COMMAND * 2 + +/datum/armament_entry/company_import/deforest/medpens_stim/adrenaline + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/adrenaline + +/datum/armament_entry/company_import/deforest/medpens_stim/synephrine + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/synephrine + +/datum/armament_entry/company_import/deforest/medpens_stim/krotozine + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/krotozine + +/datum/armament_entry/company_import/deforest/medpens_stim/aranepaine + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/aranepaine + contraband = TRUE + +/datum/armament_entry/company_import/deforest/medpens_stim/synalvipitol + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/synalvipitol + contraband = TRUE + +/datum/armament_entry/company_import/deforest/medpens_stim/twitch + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/twitch + cost = PAYCHECK_COMMAND * 3 + contraband = TRUE + +/datum/armament_entry/company_import/deforest/medpens_stim/demoneye + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/demoneye + cost = PAYCHECK_COMMAND * 3 + contraband = TRUE + +// Equipment, from defibs to scanners to surgical tools + +/datum/armament_entry/company_import/deforest/equipment + subcategory = "Medical Equipment" + +/datum/armament_entry/company_import/deforest/equipment/health_analyzer + item_type = /obj/item/healthanalyzer + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/deforest/equipment/loaded_defib + item_type = /obj/item/defibrillator/loaded + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/deforest/equipment/surgical_tools + item_type = /obj/item/surgery_tray/full + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/deforest/equipment/advanced_health_analyer + item_type = /obj/item/healthanalyzer/advanced + cost = PAYCHECK_COMMAND * 3 + +/datum/armament_entry/company_import/deforest/equipment/penlite_defib_mount + item_type = /obj/item/wallframe/defib_mount/charging + cost = PAYCHECK_CREW * 3 + +/datum/armament_entry/company_import/deforest/equipment/advanced_scalpel + item_type = /obj/item/scalpel/advanced + cost = PAYCHECK_COMMAND * 3 + +/datum/armament_entry/company_import/deforest/equipment/advanced_retractor + item_type = /obj/item/retractor/advanced + cost = PAYCHECK_COMMAND * 3 + +/datum/armament_entry/company_import/deforest/equipment/advanced_cautery + item_type = /obj/item/cautery/advanced + cost = PAYCHECK_COMMAND * 3 + +/datum/armament_entry/company_import/deforest/equipment/medigun_upgrade + item_type = /obj/item/device/custom_kit/medigun_fastcharge + cost = PAYCHECK_COMMAND * 2 + +/datum/armament_entry/company_import/deforest/equipment/afad + item_type = /obj/item/gun/medbeam/afad + cost = PAYCHECK_COMMAND * 5 + +// Modsuit Modules from the medical category, here instead of in Nakamura because nobody buys from this company + +/datum/armament_entry/company_import/deforest/medical_modules + subcategory = "MOD Medical Modules" + cost = PAYCHECK_COMMAND * 2 + +/datum/armament_entry/company_import/deforest/medical_modules/injector + name = "MOD injector module" + item_type = /obj/item/mod/module/injector + +/datum/armament_entry/company_import/deforest/medical_modules/organ_thrower + name = "MOD organ thrower module" + item_type = /obj/item/mod/module/organ_thrower + +/datum/armament_entry/company_import/deforest/medical_modules/patient_transport + name = "MOD patient transport module" + item_type = /obj/item/mod/module/criminalcapture/patienttransport + +/datum/armament_entry/company_import/deforest/medical_modules/thread_ripper + name = "MOD thread ripper module" + item_type = /obj/item/mod/module/thread_ripper + +/datum/armament_entry/company_import/deforest/medical_modules/surgical_processor + name = "MOD surgical processor module" + item_type = /obj/item/mod/module/surgical_processor diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/jarnsmiour.dm b/modular_nova/modules/company_imports/code/armament_datums/jarnsmiour.dm similarity index 100% rename from modular_skyrat/modules/company_imports/code/armament_datums/jarnsmiour.dm rename to modular_nova/modules/company_imports/code/armament_datums/jarnsmiour.dm diff --git a/modular_nova/modules/company_imports/code/armament_datums/kahraman_industries.dm b/modular_nova/modules/company_imports/code/armament_datums/kahraman_industries.dm new file mode 100644 index 00000000000000..b392ab14c2c47d --- /dev/null +++ b/modular_nova/modules/company_imports/code/armament_datums/kahraman_industries.dm @@ -0,0 +1,109 @@ +/datum/armament_entry/company_import/kahraman + category = KAHRAMAN_INDUSTRIES_NAME + company_bitflag = CARGO_COMPANY_KAHRAMAN + +/// Kahraman-made machines +/datum/armament_entry/company_import/kahraman/machinery + subcategory = "Machinery" + +/datum/armament_entry/company_import/kahraman/machinery/biogenerator + item_type = /obj/item/flatpacked_machine/organics_printer + description = "An advanced machine seen in frontier outposts and colonies capable of turning organic plant matter into \ + reagents and items of use that a fabricator can't typically make." + cost = CARGO_CRATE_VALUE * 3 + +/datum/armament_entry/company_import/kahraman/machinery/ore_thumper + item_type = /obj/item/flatpacked_machine/ore_thumper + description = "A frame with a heavy block of metal suspended atop a pipe. \ + Must be deployed outdoors and given a wired power connection. \ + Forces pressurized gas into the ground which brings up buried resources." + cost = CARGO_CRATE_VALUE * 5 + +/datum/armament_entry/company_import/kahraman/machinery/gps_beacon + item_type = /obj/item/flatpacked_machine/gps_beacon + description = "A packed GPS beacon, can be deployed and anchored into the ground to \ + provide and unobstructed homing beacon for wayward travelers across the galaxy." + cost = PAYCHECK_LOWER + +// Occupational health and safety? Never heard of her. + +/datum/armament_entry/company_import/kahraman/ppe + subcategory = "Protective Equipment" + +/datum/armament_entry/company_import/kahraman/ppe/hazard_mod + item_type = /obj/item/mod/control/pre_equipped/frontier_colonist + cost = PAYCHECK_COMMAND * 6.5 + +/datum/armament_entry/company_import/kahraman/ppe/gas_mask + item_type = /obj/item/clothing/mask/gas/atmos/frontier_colonist + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/kahraman/ppe/headset + item_type = /obj/item/radio/headset/headset_frontier_colonist + cost = PAYCHECK_COMMAND * 1.5 + +/datum/armament_entry/company_import/kahraman/ppe/flak_vest + item_type = /obj/item/clothing/suit/frontier_colonist_flak + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/kahraman/ppe/tanker_helmet + item_type = /obj/item/clothing/head/frontier_colonist_helmet + cost = PAYCHECK_COMMAND + +// Work clothing + +/datum/armament_entry/company_import/kahraman/work_clothing + subcategory = "Clothing" + +/datum/armament_entry/company_import/kahraman/work_clothing/jumpsuit + item_type = /obj/item/clothing/under/frontier_colonist + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/kahraman/work_clothing/jacket + item_type = /obj/item/clothing/suit/jacket/frontier_colonist + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/kahraman/work_clothing/jacket_short + item_type = /obj/item/clothing/suit/jacket/frontier_colonist/short + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/kahraman/work_clothing/med_jacket + item_type = /obj/item/clothing/suit/jacket/frontier_colonist/medical + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/kahraman/work_clothing/ballcap + item_type = /obj/item/clothing/head/soft/frontier_colonist + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/kahraman/work_clothing/med_ballcap + item_type = /obj/item/clothing/head/soft/frontier_colonist/medic + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/kahraman/work_clothing/booties + item_type = /obj/item/clothing/shoes/jackboots/frontier_colonist + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/kahraman/work_clothing/gloves + item_type = /obj/item/clothing/gloves/frontier_colonist + cost = PAYCHECK_CREW + +// "Equipment", so storage items and whatnot + +/datum/armament_entry/company_import/kahraman/storage_equipment + subcategory = "Personal Equipment" + +/datum/armament_entry/company_import/kahraman/storage_equipment/backpack + item_type = /obj/item/storage/backpack/industrial/frontier_colonist + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/kahraman/storage_equipment/satchel + item_type = /obj/item/storage/backpack/industrial/frontier_colonist/satchel + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/kahraman/storage_equipment/messenger + item_type = /obj/item/storage/backpack/industrial/frontier_colonist/messenger + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/kahraman/storage_equipment/belt + item_type = /obj/item/storage/belt/utility/frontier_colonist + cost = PAYCHECK_CREW diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/microstar_energy.dm b/modular_nova/modules/company_imports/code/armament_datums/microstar_energy.dm similarity index 80% rename from modular_skyrat/modules/company_imports/code/armament_datums/microstar_energy.dm rename to modular_nova/modules/company_imports/code/armament_datums/microstar_energy.dm index 060a149e5dfa73..5eacfef0eb6dbe 100644 --- a/modular_skyrat/modules/company_imports/code/armament_datums/microstar_energy.dm +++ b/modular_nova/modules/company_imports/code/armament_datums/microstar_energy.dm @@ -11,6 +11,10 @@ item_type = /obj/item/gun/energy/disabler cost = PAYCHECK_CREW * 5 +/datum/armament_entry/company_import/microstar/basic_energy_weapons/disabler_smg + item_type = /obj/item/gun/energy/disabler/smg + cost = PAYCHECK_CREW * 7 // slightly more expensive due to ease of use/full auto + /datum/armament_entry/company_import/microstar/basic_energy_weapons/mini_egun item_type = /obj/item/gun/energy/e_gun/mini cost = PAYCHECK_CREW * 5 @@ -22,11 +26,15 @@ /datum/armament_entry/company_import/microstar/basic_energy_long_weapons subcategory = "Basic Energy Longarms" -/datum/armament_entry/company_import/microstar/basic_energy_long_weapons/sc1 +/datum/armament_entry/company_import/microstar/basic_energy_long_weapons/laser item_type = /obj/item/gun/energy/laser cost = PAYCHECK_CREW * 5 -/datum/armament_entry/company_import/microstar/basic_energy_long_weapons/sc2 +/datum/armament_entry/company_import/microstar/basic_energy_long_weapons/laser_carbine + item_type = /obj/item/gun/energy/laser/carbine + cost = PAYCHECK_CREW * 7 // slightly more expensive due to ease of use/full auto + +/datum/armament_entry/company_import/microstar/basic_energy_long_weapons/egun item_type = /obj/item/gun/energy/e_gun cost = PAYCHECK_COMMAND * 4 @@ -60,23 +68,23 @@ /datum/armament_entry/company_import/microstar/mcr_attachments/hellfire name = "microfusion hellfire kit" - item_type = /obj/item/storage/secure/briefcase/white/mcr_loadout/hellfire + item_type = /obj/item/storage/briefcase/secure/white/mcr_loadout/hellfire /datum/armament_entry/company_import/microstar/mcr_attachments/scatter name = "microfusion scatter kit" - item_type = /obj/item/storage/secure/briefcase/white/mcr_loadout/scatter + item_type = /obj/item/storage/briefcase/secure/white/mcr_loadout/scatter /datum/armament_entry/company_import/microstar/mcr_attachments/lance name = "microfusion lance kit" - item_type = /obj/item/storage/secure/briefcase/white/mcr_loadout/lance + item_type = /obj/item/storage/briefcase/secure/white/mcr_loadout/lance /datum/armament_entry/company_import/microstar/mcr_attachments/repeater name = "microfusion repeater kit" - item_type = /obj/item/storage/secure/briefcase/white/mcr_loadout/repeater + item_type = /obj/item/storage/briefcase/secure/white/mcr_loadout/repeater /datum/armament_entry/company_import/microstar/mcr_attachments/tacticool name = "microfusion suppressor kit" - item_type = /obj/item/storage/secure/briefcase/white/mcr_loadout/tacticool + item_type = /obj/item/storage/briefcase/secure/white/mcr_loadout/tacticool // Improved phase emitters, cells, and cell attachments @@ -89,7 +97,7 @@ /datum/armament_entry/company_import/microstar/mcr_upgrades/enhanced_part_kit name = "microfusion enhanced parts" - item_type = /obj/item/storage/secure/briefcase/white/mcr_parts/enhanced + item_type = /obj/item/storage/briefcase/secure/white/mcr_parts/enhanced cost = PAYCHECK_COMMAND * 2 /datum/armament_entry/company_import/microstar/mcr_upgrades/capacity_booster @@ -98,7 +106,7 @@ /datum/armament_entry/company_import/microstar/mcr_upgrades/advanced_part_kit name = "microfusion advanced parts" - item_type = /obj/item/storage/secure/briefcase/white/mcr_parts/advanced + item_type = /obj/item/storage/briefcase/secure/white/mcr_parts/advanced cost = PAYCHECK_COMMAND * 2 /datum/armament_entry/company_import/microstar/mcr_upgrades/selfcharge @@ -107,5 +115,5 @@ /datum/armament_entry/company_import/microstar/mcr_upgrades/bluespace_part_kit name = "microfusion bluespace parts" - item_type = /obj/item/storage/secure/briefcase/white/mcr_parts/bluespace + item_type = /obj/item/storage/briefcase/secure/white/mcr_parts/bluespace cost = PAYCHECK_COMMAND * 6 diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/nakamura_modsuits.dm b/modular_nova/modules/company_imports/code/armament_datums/nakamura_modsuits.dm similarity index 100% rename from modular_skyrat/modules/company_imports/code/armament_datums/nakamura_modsuits.dm rename to modular_nova/modules/company_imports/code/armament_datums/nakamura_modsuits.dm diff --git a/modular_nova/modules/company_imports/code/armament_datums/nri_military_surplus.dm b/modular_nova/modules/company_imports/code/armament_datums/nri_military_surplus.dm new file mode 100644 index 00000000000000..344c9077a96124 --- /dev/null +++ b/modular_nova/modules/company_imports/code/armament_datums/nri_military_surplus.dm @@ -0,0 +1,151 @@ +/datum/armament_entry/company_import/nri_surplus + category = NRI_SURPLUS_COMPANY_NAME + company_bitflag = CARGO_COMPANY_NRI_SURPLUS + +// Various NRI clothing items + +/datum/armament_entry/company_import/nri_surplus/clothing + subcategory = "Clothing Supplies" + +/datum/armament_entry/company_import/nri_surplus/clothing/uniform + item_type = /obj/item/clothing/under/syndicate/rus_army/cin_surplus/random_color + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nri_surplus/clothing/belt + item_type = /obj/item/storage/belt/military/cin_surplus/random_color + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nri_surplus/clothing/backpack + item_type = /obj/item/storage/backpack/industrial/cin_surplus/random_color + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nri_surplus/clothing/gas_mask + item_type = /obj/item/clothing/mask/gas/hecu2 + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nri_surplus/clothing/helmet + item_type = /obj/item/clothing/head/helmet/cin_surplus_helmet/random_color + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/nri_surplus/clothing/vest + item_type = /obj/item/clothing/suit/armor/vest/cin_surplus_vest + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/nri_surplus/clothing/police_uniform + item_type = /obj/item/clothing/under/colonial/nri_police + cost = PAYCHECK_CREW + restricted = TRUE + +/datum/armament_entry/company_import/nri_surplus/clothing/police_cloak + item_type = /obj/item/clothing/neck/cloak/colonial/nri_police + cost = PAYCHECK_CREW + restricted = TRUE + +/datum/armament_entry/company_import/nri_surplus/clothing/police_cap + item_type = /obj/item/clothing/head/hats/colonial/nri_police + cost = PAYCHECK_CREW + restricted = TRUE + +/datum/armament_entry/company_import/nri_surplus/clothing/police_mask + item_type = /obj/item/clothing/mask/gas/nri_police + cost = PAYCHECK_CREW*2 + restricted = TRUE + +/datum/armament_entry/company_import/nri_surplus/clothing/police_vest + item_type = /obj/item/clothing/head/helmet/nri_police + cost = PAYCHECK_COMMAND + restricted = TRUE + +/datum/armament_entry/company_import/nri_surplus/clothing/police_helmet + item_type = /obj/item/clothing/suit/armor/vest/nri_police + cost = PAYCHECK_COMMAND + restricted = TRUE + +// Random surplus store tier stuff, flags, old rations, multitools you'll never use, so on + +/datum/armament_entry/company_import/nri_surplus/misc + subcategory = "Miscellaneous Supplies" + +/datum/armament_entry/company_import/nri_surplus/misc/flares + item_type = /obj/item/storage/box/nri_flares + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/nri_surplus/misc/binoculars + item_type = /obj/item/binoculars + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nri_surplus/misc/screwdriver_pen + item_type = /obj/item/pen/screwdriver + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nri_surplus/misc/trench_tool + item_type = /obj/item/trench_tool + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nri_surplus/misc/food_replicator + description = "Once widespread technology used by numerous fringe colonies of NRI origin and even in some SolFed territories, that ultimately went out of fashion due to \ + SolFed propaganda deeming it unprofitable and imposing severe trading fees on anyone trying to sell them. A small portion of government-backed manufacturers still produce \ + 'food replicators' for private and government use; a few of them is selling this via us." + item_type = /obj/item/circuitboard/machine/biogenerator/food_replicator + cost = CARGO_CRATE_VALUE * 9 + +/datum/armament_entry/company_import/nri_surplus/misc/nri_flag + item_type = /obj/item/sign/flag/nri + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/nri_surplus/firearm + subcategory = "Firearms" + +/datum/armament_entry/company_import/nri_surplus/firearm/shotgun_revolver + item_type = /obj/item/gun/ballistic/revolver/shotgun_revolver + cost = PAYCHECK_COMMAND * 6 + +/datum/armament_entry/company_import/nri_surplus/firearm/plasma_thrower + item_type = /obj/item/gun/ballistic/automatic/pistol/plasma_thrower + cost = PAYCHECK_COMMAND * 6 + +/datum/armament_entry/company_import/nri_surplus/firearm/plasma_marksman + item_type = /obj/item/gun/ballistic/automatic/pistol/plasma_marksman + cost = PAYCHECK_COMMAND * 6 + +/datum/armament_entry/company_import/nri_surplus/firearm/miecz + item_type = /obj/item/gun/ballistic/automatic/miecz + cost = PAYCHECK_COMMAND * 10 + +/datum/armament_entry/company_import/nri_surplus/firearm/sakhno_rifle + item_type = /obj/item/gun/ballistic/rifle/boltaction + cost = PAYCHECK_COMMAND * 12 + +/datum/armament_entry/company_import/nri_surplus/firearm/lanca + item_type = /obj/item/gun/ballistic/automatic/lanca + contraband = TRUE + cost = PAYCHECK_COMMAND * 14 + restricted = TRUE + +/datum/armament_entry/company_import/nri_surplus/firearm/anti_materiel_rifle + item_type = /obj/item/gun/ballistic/automatic/wylom + contraband = TRUE + cost = PAYCHECK_COMMAND * 16 + restricted = TRUE + +/datum/armament_entry/company_import/nri_surplus/firearm_ammo + subcategory = "Firearm Magazines" + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nri_surplus/firearm_ammo/plasma_battery + item_type = /obj/item/ammo_box/magazine/recharge/plasma_battery + +/datum/armament_entry/company_import/nri_surplus/firearm_ammo/miecz + item_type = /obj/item/ammo_box/magazine/miecz/spawns_empty + +/datum/armament_entry/company_import/nri_surplus/firearm_ammo/sakhno + item_type = /obj/item/ammo_box/strilka310 + +/datum/armament_entry/company_import/nri_surplus/firearm_ammo/lanca + item_type = /obj/item/ammo_box/magazine/lanca/spawns_empty + contraband = TRUE + +/datum/armament_entry/company_import/nri_surplus/firearm_ammo/amr_magazine + item_type = /obj/item/ammo_box/magazine/wylom + contraband = TRUE + cost = PAYCHECK_CREW * 3 diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/put_a_donk_on_it.dm b/modular_nova/modules/company_imports/code/armament_datums/put_a_donk_on_it.dm similarity index 100% rename from modular_skyrat/modules/company_imports/code/armament_datums/put_a_donk_on_it.dm rename to modular_nova/modules/company_imports/code/armament_datums/put_a_donk_on_it.dm diff --git a/modular_nova/modules/company_imports/code/armament_datums/sol_defense.dm b/modular_nova/modules/company_imports/code/armament_datums/sol_defense.dm new file mode 100644 index 00000000000000..4274795082e239 --- /dev/null +++ b/modular_nova/modules/company_imports/code/armament_datums/sol_defense.dm @@ -0,0 +1,167 @@ +/datum/armament_entry/company_import/sol_defense + category = SOL_DEFENSE_DEFENSE_NAME + company_bitflag = CARGO_COMPANY_SOL_DEFENSE + +// Beautiful SolFed clothing + +/datum/armament_entry/company_import/sol_defense/clothing + subcategory = "Surplus Clothing" + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/sol_defense/clothing/peacekeeper + item_type = /obj/item/clothing/under/sol_peacekeeper + +/datum/armament_entry/company_import/sol_defense/clothing/emt + item_type = /obj/item/clothing/under/sol_emt + +// Armor vests for protecting against bullets + +/datum/armament_entry/company_import/sol_defense/armor + subcategory = "Ballistic Armor" + cost = PAYCHECK_CREW * 3 + +/datum/armament_entry/company_import/sol_defense/armor/ballistic_helmet + item_type = /obj/item/clothing/head/helmet/sf_peacekeeper/debranded + +/datum/armament_entry/company_import/sol_defense/armor/sf_ballistic_helmet + item_type = /obj/item/clothing/head/helmet/sf_peacekeeper + +/datum/armament_entry/company_import/sol_defense/armor/soft_vest + item_type = /obj/item/clothing/suit/armor/sf_peacekeeper/debranded + +/datum/armament_entry/company_import/sol_defense/armor/sf_soft_vest + item_type = /obj/item/clothing/suit/armor/sf_peacekeeper + +/datum/armament_entry/company_import/sol_defense/armor/flak_jacket + item_type = /obj/item/clothing/suit/armor/vest/det_suit/sol + +/datum/armament_entry/company_import/sol_defense/armor/slim_vest + name = "type I vest" + item_type = /obj/item/clothing/suit/armor/vest + +/datum/armament_entry/company_import/sol_defense/armor_hardened + subcategory = "Hardened Armor" + cost = PAYCHECK_CREW * 3 + +/datum/armament_entry/company_import/sol_defense/armor_hardened/enclosed_helmet + item_type = /obj/item/clothing/head/helmet/toggleable/sf_hardened + +/datum/armament_entry/company_import/sol_defense/armor_hardened/emt_enclosed_helmet + item_type = /obj/item/clothing/head/helmet/toggleable/sf_hardened/emt + +/datum/armament_entry/company_import/sol_defense/armor_hardened/hardened_vest + item_type = /obj/item/clothing/suit/armor/sf_hardened + +/datum/armament_entry/company_import/sol_defense/armor_hardened/emt_hardened_vest + item_type = /obj/item/clothing/suit/armor/sf_hardened/emt + +/datum/armament_entry/company_import/sol_defense/armor_sacrifice + subcategory = "Sacrifical Armor" + cost = PAYCHECK_CREW * 3 + +/datum/armament_entry/company_import/sol_defense/armor_sacrifice/sacrificial_helmet + item_type = /obj/item/clothing/head/helmet/sf_sacrificial + +/datum/armament_entry/company_import/sol_defense/armor_sacrifice/face_shield + item_type = /obj/item/sacrificial_face_shield + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/sol_defense/armor_sacrifice/sacrificial_vest + item_type = /obj/item/clothing/suit/armor/sf_sacrificial + +/datum/armament_entry/company_import/sol_defense/case + subcategory = "Weapon Cases" + +/datum/armament_entry/company_import/sol_defense/case/trappiste + item_type = /obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/empty + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/sol_defense/case/carwo + item_type = /obj/item/storage/toolbox/guncase/nova/carwo_large_case/empty + cost = PAYCHECK_COMMAND * 2 + +/datum/armament_entry/company_import/sol_defense/sidearm + subcategory = "Sidearms" + +/datum/armament_entry/company_import/sol_defense/sidearm/eland + item_type = /obj/item/gun/ballistic/revolver/sol + cost = PAYCHECK_COMMAND * 4 + +/datum/armament_entry/company_import/sol_defense/sidearm/wespe + item_type = /obj/item/gun/ballistic/automatic/pistol/sol + cost = PAYCHECK_COMMAND * 4 + +/datum/armament_entry/company_import/sol_defense/sidearm/skild + item_type = /obj/item/gun/ballistic/automatic/pistol/trappiste + cost = PAYCHECK_COMMAND * 6 + +/datum/armament_entry/company_import/sol_defense/sidearm/takbok + item_type = /obj/item/gun/ballistic/revolver/takbok + cost = PAYCHECK_COMMAND * 6 + +// Lethal anything that's not a pistol, requires high company interest + +/datum/armament_entry/company_import/sol_defense/longarm + subcategory = "Longarms" + restricted = TRUE + +/datum/armament_entry/company_import/sol_defense/longarm/renoster + item_type = /obj/item/gun/ballistic/shotgun/riot/sol + cost = PAYCHECK_COMMAND * 6 + +/datum/armament_entry/company_import/sol_defense/longarm/sindano + item_type = /obj/item/gun/ballistic/automatic/sol_smg + cost = PAYCHECK_COMMAND * 6 + +/datum/armament_entry/company_import/sol_defense/longarm/elite + item_type = /obj/item/gun/ballistic/automatic/sol_rifle/marksman + cost = PAYCHECK_COMMAND * 12 + +/datum/armament_entry/company_import/sol_defense/longarm/bogseo + item_type = /obj/item/gun/ballistic/automatic/xhihao_smg + cost = PAYCHECK_COMMAND * 10 + contraband = TRUE + +/datum/armament_entry/company_import/sol_defense/longarm/infanterie + item_type = /obj/item/gun/ballistic/automatic/sol_rifle + cost = PAYCHECK_COMMAND * 14 + contraband = TRUE + +/datum/armament_entry/company_import/sol_defense/longarm/outomaties + item_type = /obj/item/gun/ballistic/automatic/sol_rifle/machinegun + cost = PAYCHECK_COMMAND * 23 + contraband = TRUE + +/datum/armament_entry/company_import/sol_defense/longarm/kiboko + item_type = /obj/item/gun/ballistic/automatic/sol_grenade_launcher + cost = PAYCHECK_COMMAND * 46 + contraband = TRUE + +/datum/armament_entry/company_import/sol_defense/magazines + subcategory = "Magazines" + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/sol_defense/magazines/c35_mag + item_type = /obj/item/ammo_box/magazine/c35sol_pistol/starts_empty + +/datum/armament_entry/company_import/sol_defense/magazines/c35_extended + item_type = /obj/item/ammo_box/magazine/c35sol_pistol/stendo/starts_empty + +/datum/armament_entry/company_import/sol_defense/magazines/c585_mag + item_type = /obj/item/ammo_box/magazine/c585trappiste_pistol/spawns_empty + +/datum/armament_entry/company_import/sol_defense/magazines/sol_rifle_short + item_type = /obj/item/ammo_box/magazine/c40sol_rifle/starts_empty + +/datum/armament_entry/company_import/sol_defense/magazines/sol_rifle_standard + item_type = /obj/item/ammo_box/magazine/c40sol_rifle/standard/starts_empty + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/sol_defense/magazines/sol_grenade_standard + item_type = /obj/item/ammo_box/magazine/c980_grenade/starts_empty + cost = PAYCHECK_COMMAND * 2 + +/datum/armament_entry/company_import/sol_defense/magazines/sol_grenade_drum + item_type = /obj/item/ammo_box/magazine/c980_grenade/drum/starts_empty + cost = PAYCHECK_CREW * 3 + contraband = TRUE diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/vitezstvi_ammo.dm b/modular_nova/modules/company_imports/code/armament_datums/vitezstvi_ammo.dm similarity index 79% rename from modular_skyrat/modules/company_imports/code/armament_datums/vitezstvi_ammo.dm rename to modular_nova/modules/company_imports/code/armament_datums/vitezstvi_ammo.dm index d6083b39cbc956..71cbf7d769788d 100644 --- a/modular_skyrat/modules/company_imports/code/armament_datums/vitezstvi_ammo.dm +++ b/modular_nova/modules/company_imports/code/armament_datums/vitezstvi_ammo.dm @@ -25,15 +25,15 @@ subcategory = "Weapon Accessories" /datum/armament_entry/company_import/vitezstvi/accessory/suppressor - item_type = /obj/item/suppressor + item_type = /obj/item/suppressor/standard cost = PAYCHECK_COMMAND /datum/armament_entry/company_import/vitezstvi/accessory/small_case - item_type = /obj/item/storage/toolbox/guncase/skyrat/pistol/empty + item_type = /obj/item/storage/toolbox/guncase/nova/pistol/empty cost = PAYCHECK_COMMAND /datum/armament_entry/company_import/vitezstvi/accessory/large_case - item_type = /obj/item/storage/toolbox/guncase/skyrat/empty + item_type = /obj/item/storage/toolbox/guncase/nova/empty cost = PAYCHECK_COMMAND * 2 // Boxes of non-shotgun ammo @@ -60,20 +60,20 @@ /datum/armament_entry/company_import/vitezstvi/ammo_boxes/auto10mm_rubber item_type = /obj/item/ammo_box/c10mm/rubber -/datum/armament_entry/company_import/vitezstvi/ammo_boxes/sabel_lethal - item_type = /obj/item/ammo_box/c56mm - cost = PAYCHECK_COMMAND +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/strilka_lethal + item_type = /obj/item/ammo_box/c310_cargo_box -/datum/armament_entry/company_import/vitezstvi/ammo_boxes/sabel_rubber - item_type = /obj/item/ammo_box/c56mm/rubber - cost = PAYCHECK_COMMAND +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/strilka_rubber + item_type = /obj/item/ammo_box/c310_cargo_box/rubber -/datum/armament_entry/company_import/vitezstvi/ammo_boxes/sabel_hunting - item_type = /obj/item/ammo_box/c56mm/hunting - cost = PAYCHECK_COMMAND +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/strilka_ap + item_type = /obj/item/ammo_box/c310_cargo_box/piercing + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/cesarzowa_lethal + item_type = /obj/item/ammo_box/c27_54cesarzowa -/datum/armament_entry/company_import/vitezstvi/ammo_boxes/sabel_blank - item_type = /obj/item/ammo_box/c56mm/blank +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/cesarzowa_rubber + item_type = /obj/item/ammo_box/c27_54cesarzowa/rubber /datum/armament_entry/company_import/vitezstvi/ammo_boxes/sol35 item_type = /obj/item/ammo_box/c35sol @@ -128,31 +128,36 @@ /datum/armament_entry/company_import/vitezstvi/shot_shells/slugs item_type = /obj/item/ammo_box/advanced/s12gauge - description = "A box of 15 slug shells, large singular shots that pack a punch." /datum/armament_entry/company_import/vitezstvi/shot_shells/buckshot item_type = /obj/item/ammo_box/advanced/s12gauge/buckshot - description = "A box of 15 buckshot shells, a modest spread of weaker projectiles." /datum/armament_entry/company_import/vitezstvi/shot_shells/beanbag_slugs item_type = /obj/item/ammo_box/advanced/s12gauge/bean - description = "A box of 15 beanbag slug shells, large singular beanbags that pack a less-lethal punch." /datum/armament_entry/company_import/vitezstvi/shot_shells/rubbershot item_type = /obj/item/ammo_box/advanced/s12gauge/rubber - description = "A box of 15 rubbershot shells, a modest spread of weaker less-lethal projectiles." /datum/armament_entry/company_import/vitezstvi/shot_shells/magnum_buckshot item_type = /obj/item/ammo_box/advanced/s12gauge/magnum - description = "A box of 15 magnum buckshot shells, a wider spread of larger projectiles." /datum/armament_entry/company_import/vitezstvi/shot_shells/express_buckshot item_type = /obj/item/ammo_box/advanced/s12gauge/express - description = "A box of 15 express buckshot shells, a tighter spread of smaller projectiles." + +/datum/armament_entry/company_import/vitezstvi/shot_shells/hunter_slug + item_type = /obj/item/ammo_box/advanced/s12gauge/hunter + +/datum/armament_entry/company_import/vitezstvi/shot_shells/flechettes + item_type = /obj/item/ammo_box/advanced/s12gauge/flechette + +/datum/armament_entry/company_import/vitezstvi/shot_shells/hornet_nest + item_type = /obj/item/ammo_box/advanced/s12gauge/beehive + +/datum/armament_entry/company_import/vitezstvi/shot_shells/stardust + item_type = /obj/item/ammo_box/advanced/s12gauge/antitide /datum/armament_entry/company_import/vitezstvi/shot_shells/confetti - item_type = /obj/item/ammo_box/advanced/s12gauge/honk - description = "A box of 35 confetti shells, firing a spread of harmless confetti everywhere, yippie!" + item_type = /obj/item/ammo_box/advanced/s12gauge/honkshot // Boxes of kiboko launcher ammo diff --git a/modular_skyrat/modules/company_imports/code/company_datums.dm b/modular_nova/modules/company_imports/code/company_datums.dm similarity index 100% rename from modular_skyrat/modules/company_imports/code/company_datums.dm rename to modular_nova/modules/company_imports/code/company_datums.dm diff --git a/modular_skyrat/modules/company_imports/code/datums/cargo_order.dm b/modular_nova/modules/company_imports/code/datums/cargo_order.dm similarity index 92% rename from modular_skyrat/modules/company_imports/code/datums/cargo_order.dm rename to modular_nova/modules/company_imports/code/datums/cargo_order.dm index f79599bc6e43f3..27ba74b73be024 100644 --- a/modular_skyrat/modules/company_imports/code/datums/cargo_order.dm +++ b/modular_nova/modules/company_imports/code/datums/cargo_order.dm @@ -4,7 +4,7 @@ /// The component used to create the order var/datum/component/armament/company_imports/used_component -/datum/supply_order/company_import/Destroy(force, ...) +/datum/supply_order/company_import/Destroy(force) selected_entry = null used_component = null . = ..() diff --git a/modular_skyrat/modules/company_imports/code/datums/cargo_pack.dm b/modular_nova/modules/company_imports/code/datums/cargo_pack.dm similarity index 100% rename from modular_skyrat/modules/company_imports/code/datums/cargo_pack.dm rename to modular_nova/modules/company_imports/code/datums/cargo_pack.dm diff --git a/modular_skyrat/modules/company_imports/code/datums/hud.dm b/modular_nova/modules/company_imports/code/datums/hud.dm similarity index 100% rename from modular_skyrat/modules/company_imports/code/datums/hud.dm rename to modular_nova/modules/company_imports/code/datums/hud.dm diff --git a/modular_skyrat/modules/company_imports/code/objects/access.dm b/modular_nova/modules/company_imports/code/objects/access.dm similarity index 100% rename from modular_skyrat/modules/company_imports/code/objects/access.dm rename to modular_nova/modules/company_imports/code/objects/access.dm diff --git a/modular_skyrat/modules/company_imports/code/objects/cargo_console_and_case.dm b/modular_nova/modules/company_imports/code/objects/cargo_console_and_case.dm similarity index 90% rename from modular_skyrat/modules/company_imports/code/objects/cargo_console_and_case.dm rename to modular_nova/modules/company_imports/code/objects/cargo_console_and_case.dm index b7584a6565273c..6b49b5b55805f9 100644 --- a/modular_skyrat/modules/company_imports/code/objects/cargo_console_and_case.dm +++ b/modular_nova/modules/company_imports/code/objects/cargo_console_and_case.dm @@ -14,4 +14,4 @@ /obj/structure/closet/crate/large/import name = "heavy-duty wooden crate" - icon = 'modular_skyrat/modules/company_imports/icons/import_crate.dmi' + icon = 'modular_nova/modules/company_imports/icons/import_crate.dmi' diff --git a/modular_skyrat/modules/company_imports/code/objects/deforest/filled_organ_boxes.dm b/modular_nova/modules/company_imports/code/objects/deforest/filled_organ_boxes.dm similarity index 100% rename from modular_skyrat/modules/company_imports/code/objects/deforest/filled_organ_boxes.dm rename to modular_nova/modules/company_imports/code/objects/deforest/filled_organ_boxes.dm diff --git a/modular_skyrat/modules/company_imports/code/objects/donk/donkfish_box.dm b/modular_nova/modules/company_imports/code/objects/donk/donkfish_box.dm similarity index 100% rename from modular_skyrat/modules/company_imports/code/objects/donk/donkfish_box.dm rename to modular_nova/modules/company_imports/code/objects/donk/donkfish_box.dm diff --git a/modular_skyrat/modules/company_imports/code/objects/firing_pin.dm b/modular_nova/modules/company_imports/code/objects/firing_pin.dm similarity index 100% rename from modular_skyrat/modules/company_imports/code/objects/firing_pin.dm rename to modular_nova/modules/company_imports/code/objects/firing_pin.dm diff --git a/modular_nova/modules/company_imports/code/objects/hud_glasses.dm b/modular_nova/modules/company_imports/code/objects/hud_glasses.dm new file mode 100644 index 00000000000000..7dc04d99afcaf6 --- /dev/null +++ b/modular_nova/modules/company_imports/code/objects/hud_glasses.dm @@ -0,0 +1,28 @@ +/obj/item/clothing/glasses/hud/gun_permit + name = "permit HUD" + desc = "A heads-up display that scans humanoids in view, and displays if their current ID possesses a firearms permit or not." + icon = 'modular_nova/modules/company_imports/icons/hud_goggles.dmi' + worn_icon = 'modular_nova/modules/company_imports/icons/hud_goggles_worn.dmi' + icon_state = "permithud" + hud_type = DATA_HUD_PERMIT + +/obj/item/clothing/glasses/hud/gun_permit/sunglasses + name = "permit HUD sunglasses" + desc = "A pair of sunglasses with a heads-up display that scans humanoids in view, and displays if their current ID possesses a firearms permit or not." + flash_protect = FLASH_PROTECTION_FLASH + tint = 1 + +/datum/design/permit_hud + name = "Gun Permit HUD glasses" + desc = "A heads-up display that scans humanoids in view, and displays if their current ID possesses a firearms permit or not." + id = "permit_glasses" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/clothing/glasses/hud/gun_permit + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MISC, + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO diff --git a/modular_skyrat/modules/company_imports/code/objects/jarnsmiour/special_metals.dm b/modular_nova/modules/company_imports/code/objects/jarnsmiour/special_metals.dm similarity index 92% rename from modular_skyrat/modules/company_imports/code/objects/jarnsmiour/special_metals.dm rename to modular_nova/modules/company_imports/code/objects/jarnsmiour/special_metals.dm index 8217760007f696..074b5d688b0da4 100644 --- a/modular_skyrat/modules/company_imports/code/objects/jarnsmiour/special_metals.dm +++ b/modular_nova/modules/company_imports/code/objects/jarnsmiour/special_metals.dm @@ -18,7 +18,7 @@ name = "cobolterium bars" desc = "Cobalt-blue metal that might actually just be cobalt." singular_name = "cobolterium bar" - icon = 'modular_skyrat/modules/company_imports/icons/special_metals_stack.dmi' + icon = 'modular_nova/modules/company_imports/icons/special_metals_stack.dmi' icon_state = "dracula-rapping" material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR mats_per_unit = list(/datum/material/cobolterium = SHEET_MATERIAL_AMOUNT) @@ -47,7 +47,7 @@ name = "copporcitite bars" desc = "Copper colored metal that might actually just be copper." singular_name = "copporcitite bar" - icon = 'modular_skyrat/modules/company_imports/icons/special_metals_stack.dmi' + icon = 'modular_nova/modules/company_imports/icons/special_metals_stack.dmi' icon_state = "dracula-rapping" material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR mats_per_unit = list(/datum/material/copporcitite = SHEET_MATERIAL_AMOUNT) @@ -76,7 +76,7 @@ name = "tinumium bars" desc = "Heavily blued, silver colored metal." singular_name = "tinumium bar" - icon = 'modular_skyrat/modules/company_imports/icons/special_metals_stack.dmi' + icon = 'modular_nova/modules/company_imports/icons/special_metals_stack.dmi' icon_state = "dracula-rapping" material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR mats_per_unit = list(/datum/material/tinumium = SHEET_MATERIAL_AMOUNT ) @@ -105,7 +105,7 @@ name = "brussite bars" desc = "Brassy-yellow metal that might actually just be brass." singular_name = "brussite bar" - icon = 'modular_skyrat/modules/company_imports/icons/special_metals_stack.dmi' + icon = 'modular_nova/modules/company_imports/icons/special_metals_stack.dmi' icon_state = "dracula-rapping" material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR mats_per_unit = list(/datum/material/brussite = SHEET_MATERIAL_AMOUNT ) diff --git a/modular_skyrat/modules/company_imports/code/objects/keycard_auth.dm b/modular_nova/modules/company_imports/code/objects/keycard_auth.dm similarity index 100% rename from modular_skyrat/modules/company_imports/code/objects/keycard_auth.dm rename to modular_nova/modules/company_imports/code/objects/keycard_auth.dm diff --git a/modular_nova/modules/company_imports/code/objects/microstar/mcr_attachment_kits.dm b/modular_nova/modules/company_imports/code/objects/microstar/mcr_attachment_kits.dm new file mode 100644 index 00000000000000..05bddea8e918cd --- /dev/null +++ b/modular_nova/modules/company_imports/code/objects/microstar/mcr_attachment_kits.dm @@ -0,0 +1,85 @@ +/obj/item/storage/briefcase/secure/white/mcr_loadout + name = "Microfusion Attachment Kit" + +/obj/item/storage/briefcase/secure/white/mcr_loadout/hellfire + +/obj/item/storage/briefcase/secure/white/mcr_loadout/hellfire/PopulateContents() + var/static/items_inside = list( + /obj/item/microfusion_gun_attachment/barrel/hellfire = 1, + /obj/item/microfusion_gun_attachment/rail = 1, + /obj/item/microfusion_gun_attachment/grip = 1, + ) + generate_items_inside(items_inside,src) + +/obj/item/storage/briefcase/secure/white/mcr_loadout/scatter + +/obj/item/storage/briefcase/secure/white/mcr_loadout/scatter/PopulateContents() + var/static/items_inside = list( + /obj/item/microfusion_gun_attachment/barrel/scatter = 1, + /obj/item/microfusion_gun_attachment/rail = 1, + /obj/item/microfusion_gun_attachment/grip = 1, + ) + generate_items_inside(items_inside,src) + +/obj/item/storage/briefcase/secure/white/mcr_loadout/lance + +/obj/item/storage/briefcase/secure/white/mcr_loadout/lance/PopulateContents() + var/static/items_inside = list( + /obj/item/microfusion_gun_attachment/barrel/lance = 1, + /obj/item/microfusion_gun_attachment/scope = 1, + /obj/item/microfusion_gun_attachment/heatsink = 1, + ) + generate_items_inside(items_inside,src) + +/obj/item/storage/briefcase/secure/white/mcr_loadout/repeater + +/obj/item/storage/briefcase/secure/white/mcr_loadout/repeater/PopulateContents() + var/static/items_inside = list( + /obj/item/microfusion_gun_attachment/barrel/repeater = 1, + /obj/item/microfusion_gun_attachment/rail = 1, + /obj/item/microfusion_gun_attachment/heatsink = 1, + ) + generate_items_inside(items_inside,src) + +/obj/item/storage/briefcase/secure/white/mcr_loadout/tacticool + +/obj/item/storage/briefcase/secure/white/mcr_loadout/tacticool/PopulateContents() + var/static/items_inside = list( + /obj/item/microfusion_gun_attachment/barrel/suppressor = 1, + /obj/item/microfusion_gun_attachment/rail = 1, + /obj/item/microfusion_gun_attachment/grip = 1, + /obj/item/microfusion_gun_attachment/camo = 1, + ) + generate_items_inside(items_inside,src) + +// Phase emitter and cell upgrades + +/obj/item/storage/briefcase/secure/white/mcr_parts + name = "Microfusion Parts Kit" + +/obj/item/storage/briefcase/secure/white/mcr_parts/enhanced + +/obj/item/storage/briefcase/secure/white/mcr_parts/enhanced/PopulateContents() + var/static/items_inside = list( + /obj/item/stock_parts/cell/microfusion/enhanced = 1, + /obj/item/microfusion_phase_emitter/enhanced = 1, + ) + generate_items_inside(items_inside,src) + +/obj/item/storage/briefcase/secure/white/mcr_parts/advanced + +/obj/item/storage/briefcase/secure/white/mcr_parts/advanced/PopulateContents() + var/static/items_inside = list( + /obj/item/stock_parts/cell/microfusion/advanced = 1, + /obj/item/microfusion_phase_emitter/advanced = 1, + ) + generate_items_inside(items_inside,src) + +/obj/item/storage/briefcase/secure/white/mcr_parts/bluespace + +/obj/item/storage/briefcase/secure/white/mcr_parts/bluespace/PopulateContents() + var/static/items_inside = list( + /obj/item/stock_parts/cell/microfusion/bluespace = 1, + /obj/item/microfusion_phase_emitter/bluespace = 1, + ) + generate_items_inside(items_inside,src) diff --git a/modular_skyrat/modules/company_imports/code/objects/nakamura_modsuits/accretion_incompatibility.dm b/modular_nova/modules/company_imports/code/objects/nakamura_modsuits/accretion_incompatibility.dm similarity index 100% rename from modular_skyrat/modules/company_imports/code/objects/nakamura_modsuits/accretion_incompatibility.dm rename to modular_nova/modules/company_imports/code/objects/nakamura_modsuits/accretion_incompatibility.dm diff --git a/modular_skyrat/modules/company_imports/code/objects/nakamura_modsuits/plate_compression_tech.dm b/modular_nova/modules/company_imports/code/objects/nakamura_modsuits/plate_compression_tech.dm similarity index 100% rename from modular_skyrat/modules/company_imports/code/objects/nakamura_modsuits/plate_compression_tech.dm rename to modular_nova/modules/company_imports/code/objects/nakamura_modsuits/plate_compression_tech.dm diff --git a/modular_nova/modules/company_imports/code/objects/vitezstvi/ammo_boxes.dm b/modular_nova/modules/company_imports/code/objects/vitezstvi/ammo_boxes.dm new file mode 100644 index 00000000000000..35b057ecbb730d --- /dev/null +++ b/modular_nova/modules/company_imports/code/objects/vitezstvi/ammo_boxes.dm @@ -0,0 +1,84 @@ +/obj/item/ammo_box + w_class = WEIGHT_CLASS_NORMAL + +/obj/item/ammo_box/magazine + w_class = WEIGHT_CLASS_SMALL + +/obj/item/ammo_box/strilka310 + w_class = WEIGHT_CLASS_SMALL + +/obj/item/ammo_box/a357 + w_class = WEIGHT_CLASS_SMALL + +/obj/item/ammo_box/c38 + w_class = WEIGHT_CLASS_SMALL + +/obj/item/ammo_box/c9mm/ap + name = "ammo box (9mm AP)" + ammo_type = /obj/item/ammo_casing/c9mm/ap + +/obj/item/ammo_box/c9mm/hp + name = "ammo box (9mm HP)" + ammo_type = /obj/item/ammo_casing/c9mm/hp + +/obj/item/ammo_box/c9mm/fire + name = "ammo box (9mm incendiary)" + ammo_type = /obj/item/ammo_casing/c9mm/fire + +/obj/item/ammo_box/c10mm/ap + name = "ammo box (10mm AP)" + ammo_type = /obj/item/ammo_casing/c10mm/ap + max_ammo = 20 + +/obj/item/ammo_box/c10mm/hp + name = "ammo box (10mm HP)" + ammo_type = /obj/item/ammo_casing/c10mm/hp + max_ammo = 20 + +/obj/item/ammo_box/c10mm/fire + name = "ammo box (10mm incendiary)" + ammo_type = /obj/item/ammo_casing/c10mm/fire + max_ammo = 20 + +/obj/item/ammo_box/c46x30mm + name = "ammo box (4.6x30mm)" + icon = 'modular_nova/modules/company_imports/icons/ammo.dmi' + icon_state = "ammo_46" + ammo_type = /obj/item/ammo_casing/c46x30mm + max_ammo = 20 + +/obj/item/ammo_box/c46x30mm/ap + name = "ammo box (4.6x30mm AP)" + ammo_type = /obj/item/ammo_casing/c46x30mm/ap + +/obj/item/ammo_box/c46x30mm/rubber + name = "ammo box (4.6x30mm rubber)" + ammo_type = /obj/item/ammo_casing/c46x30mm/rubber + +/obj/item/ammo_box/c34 + name = "ammo box (.34)" + icon = 'modular_nova/modules/company_imports/icons/ammo.dmi' + icon_state = "ammo_34" + ammo_type = /obj/item/ammo_casing/c34 + max_ammo = 20 + +/obj/item/ammo_box/c34/ap + name = "ammo box (.34 AP)" + ammo_type = /obj/item/ammo_casing/c34/ap + +/obj/item/ammo_box/c34/rubber + name = "ammo box (.34 rubber)" + ammo_type = /obj/item/ammo_casing/c34/rubber + +/obj/item/ammo_box/c34/fire + name = "ammo box (.34 incendiary)" + ammo_type = /obj/item/ammo_casing/c34_incendiary + +/obj/item/storage/box/ammo_box/microfusion/bluespace + name = "bluespace microfusion cell container" + desc = "A box filled with microfusion cells." + +/obj/item/storage/box/ammo_box/microfusion/bluespace/PopulateContents() + new /obj/item/stock_parts/cell/microfusion/bluespace(src) + new /obj/item/stock_parts/cell/microfusion/bluespace(src) + new /obj/item/stock_parts/cell/microfusion/bluespace(src) diff --git a/modular_nova/modules/company_imports/code/readme.md b/modular_nova/modules/company_imports/code/readme.md new file mode 100644 index 00000000000000..50274ac2b3233b --- /dev/null +++ b/modular_nova/modules/company_imports/code/readme.md @@ -0,0 +1,25 @@ +https://github.com/Skyrat-SS13/Skyrat-tg/pull/ + +## \<Title Here> + +Module ID: + +### Description: + +### TG Proc/File Changes: + +- N/A + +### Modular Overrides: + +- `modular_nova/master_files/code/modules/cargo/orderconsole.dm`: `proc/ui_act` + +### Defines: + +- N/A + +### Included files that are not contained in this module: + +- N/A + +### Credits: diff --git a/modular_skyrat/modules/company_imports/icons/ammo.dmi b/modular_nova/modules/company_imports/icons/ammo.dmi similarity index 100% rename from modular_skyrat/modules/company_imports/icons/ammo.dmi rename to modular_nova/modules/company_imports/icons/ammo.dmi diff --git a/modular_skyrat/modules/company_imports/icons/hud_goggles.dmi b/modular_nova/modules/company_imports/icons/hud_goggles.dmi similarity index 100% rename from modular_skyrat/modules/company_imports/icons/hud_goggles.dmi rename to modular_nova/modules/company_imports/icons/hud_goggles.dmi diff --git a/modular_skyrat/modules/company_imports/icons/hud_goggles_worn.dmi b/modular_nova/modules/company_imports/icons/hud_goggles_worn.dmi similarity index 100% rename from modular_skyrat/modules/company_imports/icons/hud_goggles_worn.dmi rename to modular_nova/modules/company_imports/icons/hud_goggles_worn.dmi diff --git a/modular_skyrat/modules/company_imports/icons/import_crate.dmi b/modular_nova/modules/company_imports/icons/import_crate.dmi similarity index 100% rename from modular_skyrat/modules/company_imports/icons/import_crate.dmi rename to modular_nova/modules/company_imports/icons/import_crate.dmi diff --git a/modular_skyrat/modules/company_imports/icons/special_metals_stack.dmi b/modular_nova/modules/company_imports/icons/special_metals_stack.dmi similarity index 100% rename from modular_skyrat/modules/company_imports/icons/special_metals_stack.dmi rename to modular_nova/modules/company_imports/icons/special_metals_stack.dmi diff --git a/modular_skyrat/modules/connecting_computer/code/_computer.dm b/modular_nova/modules/connecting_computer/code/_computer.dm similarity index 100% rename from modular_skyrat/modules/connecting_computer/code/_computer.dm rename to modular_nova/modules/connecting_computer/code/_computer.dm diff --git a/modular_skyrat/modules/connecting_computer/code/connectable_component.dm b/modular_nova/modules/connecting_computer/code/connectable_component.dm similarity index 96% rename from modular_skyrat/modules/connecting_computer/code/connectable_component.dm rename to modular_nova/modules/connecting_computer/code/connectable_component.dm index 58b5de0e019d82..c9304f73196ceb 100644 --- a/modular_skyrat/modules/connecting_computer/code/connectable_component.dm +++ b/modular_nova/modules/connecting_computer/code/connectable_component.dm @@ -2,7 +2,7 @@ * If attached to a machine, adds the connectable computer overlays and smooths to other computers. */ /datum/component/connectable_computer - var/icon/overlay_icon = 'modular_skyrat/modules/connecting_computer/icons/connectors.dmi' + var/icon/overlay_icon = 'modular_nova/modules/connecting_computer/icons/connectors.dmi' /datum/component/connectable_computer/Initialize() if(!ismachinery(parent)) diff --git a/modular_skyrat/modules/connecting_computer/code/non_connecting_computers.dm b/modular_nova/modules/connecting_computer/code/non_connecting_computers.dm similarity index 100% rename from modular_skyrat/modules/connecting_computer/code/non_connecting_computers.dm rename to modular_nova/modules/connecting_computer/code/non_connecting_computers.dm diff --git a/modular_skyrat/modules/connecting_computer/icons/connectors.dmi b/modular_nova/modules/connecting_computer/icons/connectors.dmi similarity index 100% rename from modular_skyrat/modules/connecting_computer/icons/connectors.dmi rename to modular_nova/modules/connecting_computer/icons/connectors.dmi diff --git a/modular_skyrat/modules/connecting_computer/readme.md b/modular_nova/modules/connecting_computer/readme.md similarity index 100% rename from modular_skyrat/modules/connecting_computer/readme.md rename to modular_nova/modules/connecting_computer/readme.md diff --git a/modular_skyrat/modules/container_emotes/code/container_emotes.dm b/modular_nova/modules/container_emotes/code/container_emotes.dm similarity index 100% rename from modular_skyrat/modules/container_emotes/code/container_emotes.dm rename to modular_nova/modules/container_emotes/code/container_emotes.dm diff --git a/modular_skyrat/modules/container_emotes/readme.md b/modular_nova/modules/container_emotes/readme.md similarity index 100% rename from modular_skyrat/modules/container_emotes/readme.md rename to modular_nova/modules/container_emotes/readme.md diff --git a/modular_nova/modules/contractor/code/datums/contract.dm b/modular_nova/modules/contractor/code/datums/contract.dm new file mode 100644 index 00000000000000..f23ac142569ee8 --- /dev/null +++ b/modular_nova/modules/contractor/code/datums/contract.dm @@ -0,0 +1,135 @@ +/// They're off to holding - handle the return timer and give some text about what's going on. +/datum/syndicate_contract/handle_victim_experience(mob/living/target) + // Ship 'em back - dead or alive, 4 minutes wait. + // Even if they weren't the target, we're still treating them the same. + addtimer(CALLBACK(src, PROC_REF(return_victim), target), 4 MINUTES) + + if (target.stat == DEAD) + return + // Heal them up - gets them out of crit/soft crit. If omnizine is removed in the future, this needs to be replaced with a + // method of healing them, consequence free, to a reasonable amount of health. + victim_stage_one(target) + +/// Adds omnizine and begins the victim handling +/datum/syndicate_contract/proc/victim_stage_one(mob/living/target) + target.reagents.add_reagent(/datum/reagent/medicine/omnizine, 20) + + target.flash_act() + target.adjust_confusion(10 SECONDS) + target.set_eye_blur_if_lower(10 SECONDS) + to_chat(target, span_warning("You feel strange...")) + addtimer(CALLBACK(src, PROC_REF(victim_stage_two), target), 6 SECONDS) + +/// Continued victim handling +/datum/syndicate_contract/proc/victim_stage_two(mob/living/target) + var/list/parts_to_fuck_up = list( + BODY_ZONE_L_ARM, + BODY_ZONE_R_ARM, + BODY_ZONE_L_LEG, + BODY_ZONE_R_LEG, + ) + + to_chat(target, span_warning("That pod did something to you...")) + target.set_dizzy(70 SECONDS) + + for(var/i in 1 to 2) + var/obj/item/bodypart/limb = target.get_bodypart(pick_n_take(parts_to_fuck_up)) + var/min_wound = limb.get_wound_threshold_of_wound_type(WOUND_BLUNT, WOUND_SEVERITY_SEVERE, return_value_if_no_wound = 40) + var/max_wound = limb.get_wound_threshold_of_wound_type(WOUND_BLUNT, WOUND_SEVERITY_CRITICAL, return_value_if_no_wound = 60) + limb.receive_damage(brute = WOUND_MINIMUM_DAMAGE, wound_bonus = rand(min_wound, max_wound)) + target.update_damage_overlays() + + addtimer(CALLBACK(src, PROC_REF(victim_stage_three), target), 6 SECONDS) + +/// Continued victim handling, flashes them as well +/datum/syndicate_contract/proc/victim_stage_three(mob/living/target) + to_chat(target, span_warning("Your head pounds... It feels like it's going to burst out your skull!")) + target.flash_act() + target.adjust_confusion(20 SECONDS) + target.set_eye_blur_if_lower(6 SECONDS) + addtimer(CALLBACK(src, PROC_REF(victim_stage_four), target), 3 SECONDS) + +/// Continued victim handling +/datum/syndicate_contract/proc/victim_stage_four(mob/living/target) + to_chat(target, span_warning("Your head pounds...")) + + if(iscarbon(target)) + var/mob/living/carbon/carbon_target = target + switch(rand(1, 100)) + if(1 to 45) + carbon_target.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_SURGERY) + + if(46 to 73) + carbon_target.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_SURGERY) + carbon_target.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_SURGERY) + + if(74 to 94) + carbon_target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_SURGERY) + + if(75 to 100) + carbon_target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_SURGERY) + carbon_target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_SURGERY) + + addtimer(CALLBACK(src, PROC_REF(victim_stage_five), target), 10 SECONDS) + +/// Continued victim handling, some unconsciousness +/datum/syndicate_contract/proc/victim_stage_five(mob/living/target) + target.flash_act() + target.Unconscious(200) + to_chat(target, span_hypnophrase(span_reallybig("A million voices echo in your head... <i>\"Your mind held many valuable secrets - \ + we thank you for providing them. Your value is expended, and you will be ransomed back to your station. We always get paid, \ + so it's only a matter of time before we ship you back...\"</i>"))) + target.set_eye_blur_if_lower(20 SECONDS) + target.set_dizzy_if_lower(30 SECONDS) + target.adjust_confusion(20 SECONDS) + +/// We're returning the victim +/datum/syndicate_contract/return_victim(mob/living/target) + var/list/possible_drop_loc = list() + + for(var/turf/possible_drop in contract.dropoff.contents) + if(is_safe_turf(possible_drop)) + possible_drop_loc += possible_drop + if(!length(possible_drop_loc)) //Prioritize safe tiles first, then unsafe + for(var/turf/open/possible_unsafe_drop in contract.dropoff.contents) + possible_drop_loc += possible_unsafe_drop + + if (length(possible_drop_loc)) + var/pod_rand_loc = rand(1, length(possible_drop_loc)) + + var/obj/structure/closet/supplypod/return_pod = new() + return_pod.bluespace = TRUE + return_pod.explosionSize = list(0,0,0,0) + return_pod.style = STYLE_SYNDICATE + + do_sparks(8, FALSE, target) + target.visible_message(span_notice("[target] vanishes...")) + + for(var/obj/item/target_item as anything in target) + if(ishuman(target)) + var/mob/living/carbon/human/human_target = target + if(target_item == human_target.w_uniform) + continue //So all they're left with are shoes and uniform. + if(target_item == human_target.shoes) + continue + target.dropItemToGround(target_item) + + for(var/obj/item/target_item as anything in victim_belongings) + target_item.forceMove(return_pod) + + target.forceMove(return_pod) + + target.flash_act() + target.set_eye_blur_if_lower(60 SECONDS) + target.set_dizzy_if_lower(70 SECONDS) + target.adjust_confusion(20 SECONDS) + + new /obj/effect/pod_landingzone(possible_drop_loc[pod_rand_loc], return_pod) + else + to_chat(target, span_reallybig(span_hypnophrase("A million voices echo in your head... <i>\"Seems where you got sent here from won't \ + be able to handle our pod... You will die here instead.\"</i>"))) + if(!isliving(target)) + return + var/mob/living/unlucky_fellow = target + unlucky_fellow.investigate_log("was returned without a valid drop location by the contractor [contract.owner?.current].", INVESTIGATE_DEATHS) + unlucky_fellow.death() diff --git a/modular_nova/modules/contractor/code/datums/contractor_datum.dm b/modular_nova/modules/contractor/code/datums/contractor_datum.dm new file mode 100644 index 00000000000000..1e7552c842ba48 --- /dev/null +++ b/modular_nova/modules/contractor/code/datums/contractor_datum.dm @@ -0,0 +1,32 @@ +/// End-round generation proc +/datum/opposing_force/proc/contractor_round_end() + var/result = "" + var/total_spent_rep = 0 + + var/completed_contracts = contractor_hub.contracts_completed + var/tc_total = contractor_hub.contract_TC_payed_out + contractor_hub.contract_TC_to_redeem + + var/contractor_item_icons = "" // Icons of purchases + var/datum/antagonist/traitor/contractor_support/contractor_support_unit = contractor_hub.contractor_teammate // Set if they had a support unit + + // Get all the icons/total cost for all our items bought + for (var/datum/contractor_item/contractor_purchase in contractor_hub.purchased_items) + contractor_item_icons += "<span class='tooltip_container'>\[ <i class=\"fas [contractor_purchase.item_icon]\"></i><span class='tooltip_hover'><b>[contractor_purchase.name] - [contractor_purchase.cost] Rep</b><br><br>[contractor_purchase.desc]</span> \]</span>" + + total_spent_rep += contractor_purchase.cost + + if (length(contractor_hub.purchased_items)) + result += "<br>(used [total_spent_rep] Rep) " + result += contractor_item_icons + result += "<br>" + if (completed_contracts > 0) + var/plural_check = "contract[completed_contracts > 1 ? "s" : ""]" + + result += "Completed [span_greentext("[completed_contracts]")] [plural_check] for a total of \ + [span_greentext("[tc_total] TC")]!<br>" + + if(contractor_support_unit) + var/datum/mind/partner = contractor_support_unit.owner + result += "<b>[partner.key]</b> played <b>[partner.current.name]</b>, [partner.current.p_their()] contractor support unit.<br>" + + return result diff --git a/modular_nova/modules/contractor/code/datums/contractor_hub.dm b/modular_nova/modules/contractor/code/datums/contractor_hub.dm new file mode 100644 index 00000000000000..9d3490df0718f6 --- /dev/null +++ b/modular_nova/modules/contractor/code/datums/contractor_hub.dm @@ -0,0 +1,27 @@ +/datum/contractor_hub + /// How much reputation the contractor has + var/contract_rep = 0 + /// What contractor items can be purchased + var/list/hub_items = list() + /// List of what the contractor's purchased + var/list/purchased_items = list() + /// Static of contractor_item subtypes + var/static/list/contractor_items = typecacheof(/datum/contractor_item, ignore_root_path = TRUE) + /// Current index number for contract IDs + var/start_index = 1 + +/// Generates a list of all valid hub items to set for purchase +/datum/contractor_hub/proc/create_hub_items() + for(var/path in contractor_items) + var/datum/contractor_item/contractor_item = new path + + hub_items.Add(contractor_item) + +/datum/contractor_hub/proc/create_single_contract(datum/mind/owner, contract_payout_tier) + var/datum/syndicate_contract/contract_to_add = new(owner, assigned_targets, contract_payout_tier) + + assigned_targets.Add(contract_to_add.contract.target) + + contract_to_add.id = start_index + assigned_contracts.Add(contract_to_add) + start_index++ diff --git a/modular_nova/modules/contractor/code/datums/contractor_items.dm b/modular_nova/modules/contractor/code/datums/contractor_items.dm new file mode 100644 index 00000000000000..6acddb1e75974a --- /dev/null +++ b/modular_nova/modules/contractor/code/datums/contractor_items.dm @@ -0,0 +1,199 @@ +/datum/contractor_item + /// Name of the item datum + var/name + /// Description of the item datum + var/desc + /// Item path to spawn, no item path means you need to override `handle_purchase()` + var/item + /// fontawesome icon to use inside the hub - https://fontawesome.com/icons/ + var/item_icon = "broadcast-tower" + /// Any number above 0 for how many times it can be bought in a round for a single traitor. -1 is unlimited. + var/limited = -1 + /// Cost of the item in contract rep. + var/cost + +/// Subtract cost, and spawn if it's an item. +/datum/contractor_item/proc/handle_purchase(datum/contractor_hub/hub, mob/living/user) + + if(hub.contract_rep >= cost) + hub.contract_rep -= cost + else + return FALSE + + if(limited >= 1) + limited -= 1 + else + return FALSE + + hub.purchased_items.Add(src) + + user.playsound_local(user, 'sound/machines/uplinkpurchase.ogg', 100) + + if(item) + var/atom/item_to_create = new item(get_turf(user)) + if(user.put_in_hands(item_to_create)) + to_chat(user, span_notice("Your purchase materializes into your hands!")) + else + to_chat(user, span_notice("Your purchase materializes onto the floor.")) + + return TRUE + +/datum/contractor_item/contract_reroll + name = "Contract Reroll" + desc = "Request a reroll of your current contract list. Will generate a new target, payment, and dropoff for the contracts you currently have available." + item_icon = "dice" + limited = 3 + cost = 0 + +/datum/contractor_item/contract_reroll/handle_purchase(datum/contractor_hub/hub) + . = ..() + + if(!(.)) + return + // We're not regenerating already completed/aborted/extracting contracts, but we don't want to repeat their targets. + var/list/new_target_list = list() + for(var/datum/syndicate_contract/contract_check as anything in hub.assigned_contracts) + if (contract_check.status != CONTRACT_STATUS_ACTIVE && contract_check.status != CONTRACT_STATUS_INACTIVE) + if (contract_check.contract.target) + new_target_list.Add(contract_check.contract.target) + continue + + // Reroll contracts without duplicates + for(var/datum/syndicate_contract/rerolling_contract as anything in hub.assigned_contracts) + if (rerolling_contract.status != CONTRACT_STATUS_ACTIVE && rerolling_contract.status != CONTRACT_STATUS_INACTIVE) + continue + + rerolling_contract.generate(new_target_list) + new_target_list.Add(rerolling_contract.contract.target) + + // Set our target list with the new set we've generated. + hub.assigned_targets = new_target_list + +/datum/contractor_item/contractor_pinpointer + name = "Contractor Pinpointer" + desc = "A pinpointer that finds targets even without active suit sensors. Due to taking advantage of an exploit within the system, it can't pinpoint to the same accuracy as the traditional models. Becomes permanently locked to the user that first activates it." + item = /obj/item/pinpointer/crew/contractor + item_icon = "search-location" + limited = 2 + cost = 1 + +/datum/contractor_item/fulton_extraction_kit + name = "Fulton Extraction Kit" + desc = "For getting your target across the station to those difficult dropoffs. Place the beacon somewhere secure, and link the pack. Activating the pack on your target will send them over to the beacon - make sure they're not just going to run away though!" + item = /obj/item/storage/box/contractor/fulton_extraction + item_icon = "parachute-box" + limited = 1 + cost = 1 + +/datum/contractor_item/contractor_partner + name = "Reinforcements" + desc = "Upon purchase we'll contact available units in the area. Should there be an agent free, we'll send them down to assist you immediately. If no units are free, we give a full refund." + item_icon = "user-friends" + limited = 1 + cost = 2 + +/datum/contractor_item/contractor_partner/handle_purchase(datum/contractor_hub/hub, mob/living/user) + . = ..() + + if(!.) + return + to_chat(user, span_notice("The uplink vibrates quietly, connecting to nearby agents...")) + + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates( + "Do you want to play as the Contractor Support Unit for [user.real_name]?", + role = ROLE_PAI, + check_jobban = FALSE, + poll_time = 10 SECONDS, + ignore_category = POLL_IGNORE_CONTRACTOR_SUPPORT, + pic_source = user, + role_name_text = "[user.real_name]'s support", + ) + + if(LAZYLEN(candidates)) + var/mob/dead/observer/picked_obs = pick(candidates) + hub.contractor_teammate = spawn_contractor_partner(user, picked_obs.key) + else + to_chat(user, span_notice("No available agents at this time, please try again later.")) + + // refund and add the limit back. + limited += 1 + hub.contract_rep += cost + hub.purchased_items -= src + +/datum/contractor_item/blackout + name = "Blackout" + desc = "Request Symphionia Command to distrupt the station's powernet. Disables power across the station for a short duration." + item_icon = "bolt" + limited = 2 + cost = 2 + +/datum/contractor_item/blackout/handle_purchase(datum/contractor_hub/hub) + . = ..() + + if(!.) + return + power_fail(35, 50) + priority_announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", ANNOUNCER_POWEROFF) + +/datum/contractor_item/comms_blackout + name = "Comms Outage" + desc = "Request Symphionia Command to disable station Telecommunications. Disables telecommunications across the station for a medium duration." + item_icon = "phone-slash" + limited = 2 + cost = 2 + +/datum/contractor_item/comms_blackout/handle_purchase(datum/contractor_hub/hub) + . = ..() + + if(!.) + return + var/datum/round_event_control/event = locate(/datum/round_event_control/communications_blackout) in SSevents.control + event.run_event() + +/datum/contractor_item/mod_baton_holster + name = "Baton Holster Module" + desc = "Never worry about dropping your baton again with this holster module! Simply insert your baton into the module, put it in your MODsuit, and the baton will retract whenever dropped." + item = /obj/item/mod/module/baton_holster + item_icon = "wrench" //I cannot find anything better, replace if you find something more fitting + limited = 1 + cost = 2 + +/datum/contractor_item/baton_upgrade_cuff + name = "Baton Cuff Upgrade" + desc = "Using technology reverse-engineered from some alien batons we had lying around, you can now cuff people using your baton with the secondary attack. Due to technical limitations, only cable cuffs and zipties work, and they need to be loaded into the baton manually." + item = /obj/item/baton_upgrade/cuff + item_icon = "bacon" //ditto + limited = 1 + cost = 1 + +/datum/contractor_item/baton_upgrade_mute + name = "Baton Mute Upgrade" + desc = "A relatively new advancement in completely proprietary baton technology, this baton upgrade will mute anyone hit for ten seconds, maximizing at twenty seconds." + item = /obj/item/baton_upgrade/mute + item_icon = "comment-slash" + limited = 1 + cost = 2 + +/datum/contractor_item/baton_upgrade_focus + name = "Baton Focus Upgrade" + desc = "When applied to a baton, it will exhaust the target even more, should they be the target of your current contract." + item = /obj/item/baton_upgrade/focus + item_icon = "eye" + limited = 1 + cost = 2 + +/datum/contractor_item/mod_magnetic_suit + name = "Magnetic Deployment Module" + desc = "A module that utilizes magnets to largely reduce the time needed to deploy and retract your MODsuit." + item = /obj/item/mod/module/springlock/contractor + item_icon = "magnet" + limited = 1 + cost = 2 + +/datum/contractor_item/mod_scorpion_hook + name = "SCORPION Hook Module" + desc = "A module that allows you to launch a hardlight hook from your MODsuit, pulling a target into range of your baton." + item = /obj/item/mod/module/scorpion_hook + item_icon = "arrow-left" //replace if fontawesome gets an actual hook icon + limited = 1 + cost = 3 diff --git a/modular_skyrat/modules/contractor/code/datums/contractor_support.dm b/modular_nova/modules/contractor/code/datums/contractor_support.dm similarity index 100% rename from modular_skyrat/modules/contractor/code/datums/contractor_support.dm rename to modular_nova/modules/contractor/code/datums/contractor_support.dm diff --git a/modular_nova/modules/contractor/code/datums/contractor_tablet.dm b/modular_nova/modules/contractor/code/datums/contractor_tablet.dm new file mode 100644 index 00000000000000..5ade585a78dfc1 --- /dev/null +++ b/modular_nova/modules/contractor/code/datums/contractor_tablet.dm @@ -0,0 +1,8 @@ +/datum/computer_file/program/contract_uplink + downloader_category = PROGRAM_CATEGORY_EQUIPMENT + tgui_id = "SyndContractor" + /// If the contract uplink's been assigned to a person yet + var/assigned = FALSE + +/datum/computer_file/program/contract_uplink/on_start(mob/living/user) + . = ..(user) diff --git a/modular_skyrat/modules/contractor/code/datums/midround/antag_datum.dm b/modular_nova/modules/contractor/code/datums/midround/antag_datum.dm similarity index 83% rename from modular_skyrat/modules/contractor/code/datums/midround/antag_datum.dm rename to modular_nova/modules/contractor/code/datums/midround/antag_datum.dm index 3c7fbeb2a21aed..ccdcbd9dce22a5 100644 --- a/modular_skyrat/modules/contractor/code/datums/midround/antag_datum.dm +++ b/modular_nova/modules/contractor/code/datums/midround/antag_datum.dm @@ -4,7 +4,7 @@ antagpanel_category = "DriftingContractor" preview_outfit = /datum/outfit/contractor_preview job_rank = ROLE_DRIFTING_CONTRACTOR - hud_icon = 'modular_skyrat/modules/contractor/icons/hud_icon.dmi' + hud_icon = 'modular_nova/modules/contractor/icons/hud_icon.dmi' antag_hud_name = "contractor" antagpanel_category = ANTAG_GROUP_SYNDICATE antag_moodlet = /datum/mood_event/focused @@ -17,7 +17,11 @@ if(!ishuman(owner.current)) return var/mob/living/carbon/human/person = owner.current - person.equipOutfit(contractor_outfit) + var/datum/outfit/outfit_to_apply = new contractor_outfit + if(person.jumpsuit_style == PREF_SKIRT) + outfit_to_apply.uniform = /obj/item/clothing/under/syndicate/nova/tactical/skirt + person.equipOutfit(outfit_to_apply) + SSquirks.AssignQuirks(person, person.client) return TRUE /datum/antagonist/contractor/on_gain() diff --git a/modular_nova/modules/contractor/code/datums/midround/event.dm b/modular_nova/modules/contractor/code/datums/midround/event.dm new file mode 100644 index 00000000000000..7f2bf794b6d276 --- /dev/null +++ b/modular_nova/modules/contractor/code/datums/midround/event.dm @@ -0,0 +1,45 @@ +/datum/round_event_control/contractor + name = "Drifting Contractor" + typepath = /datum/round_event/ghost_role/contractor + weight = 8 + max_occurrences = 1 + category = EVENT_CATEGORY_INVASION + description = "A pre-equipped contractor floats towards the station to fulfill contracts." + +/datum/round_event/ghost_role/contractor + minimum_required = 1 + role_name = "Drifting Contractor" + fakeable = FALSE + +/datum/round_event/ghost_role/contractor/spawn_role() + var/list/candidates = SSpolling.poll_ghost_candidates( + check_jobban = ROLE_DRIFTING_CONTRACTOR, + role = ROLE_DRIFTING_CONTRACTOR, + pic_source = /obj/item/melee/baton/telescopic/contractor_baton, + role_name_text = "drifting contractor", + ) + if(!length(candidates)) + return NOT_ENOUGH_PLAYERS + + var/mob/dead/selected = pick_n_take(candidates) + + var/list/spawn_locs = list() + for(var/obj/effect/landmark/carpspawn/carp in GLOB.landmarks_list) + spawn_locs += carp.loc + if(!length(spawn_locs)) + return MAP_ERROR + + var/mob/living/carbon/human/operative = new(pick(spawn_locs)) + operative.dna.update_dna_identity() + var/datum/mind/mind = new /datum/mind(selected.key) + selected.client?.prefs?.apply_prefs_to(operative) + mind.set_assigned_role(SSjob.GetJobType(/datum/job/drifting_contractor)) + mind.special_role = ROLE_DRIFTING_CONTRACTOR + mind.active = TRUE + mind.transfer_to(operative) + mind.add_antag_datum(/datum/antagonist/contractor) + + message_admins("[ADMIN_LOOKUPFLW(operative)] has been made into [src] by an event.") + log_game("[key_name(operative)] was spawned as a [src] by an event.") + spawned_mobs += operative + return SUCCESSFUL_SPAWN diff --git a/modular_skyrat/modules/contractor/code/datums/midround/objective.dm b/modular_nova/modules/contractor/code/datums/midround/objective.dm similarity index 100% rename from modular_skyrat/modules/contractor/code/datums/midround/objective.dm rename to modular_nova/modules/contractor/code/datums/midround/objective.dm diff --git a/modular_nova/modules/contractor/code/datums/midround/outfit.dm b/modular_nova/modules/contractor/code/datums/midround/outfit.dm new file mode 100644 index 00000000000000..cb5b116d5dcea4 --- /dev/null +++ b/modular_nova/modules/contractor/code/datums/midround/outfit.dm @@ -0,0 +1,39 @@ +/datum/outfit/contractor + name = "Symphionia Contractor - Full Kit" + + glasses = /obj/item/clothing/glasses/night + mask = /obj/item/clothing/mask/gas/sechailer/syndicate + back = /obj/item/mod/control/pre_equipped/contractor/upgraded + r_pocket = /obj/item/tank/internals/emergency_oxygen/engi + internals_slot = ITEM_SLOT_RPOCKET + belt = /obj/item/storage/belt/military + + uniform = /obj/item/clothing/under/syndicate/nova/tactical + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/combat + ears = /obj/item/radio/headset/syndicate/alt + l_pocket = /obj/item/modular_computer/pda/contractor + id = /obj/item/card/id/advanced/chameleon + backpack_contents = list( + /obj/item/storage/box/survival/syndie, + /obj/item/storage/box/syndicate/contract_kit/midround, + /obj/item/knife/combat/survival, + /obj/item/pinpointer/crew/contractor, + ) + + implants = list( + /obj/item/implant/uplink, + ) + + id_trim = /datum/id_trim/chameleon/contractor + +/datum/outfit/contractor_preview + name = "Symphionia Contractor (Preview only)" + + back = /obj/item/mod/control/pre_equipped/empty/contractor + uniform = /obj/item/clothing/under/syndicate + glasses = /obj/item/clothing/glasses/night + +/datum/outfit/contractor/upgraded + name = "Symphionia Contractor (Upgraded)" + back = /obj/item/mod/control/pre_equipped/contractor/upgraded/adminbus diff --git a/modular_skyrat/modules/contractor/code/datums/midround/ruleset.dm b/modular_nova/modules/contractor/code/datums/midround/ruleset.dm similarity index 100% rename from modular_skyrat/modules/contractor/code/datums/midround/ruleset.dm rename to modular_nova/modules/contractor/code/datums/midround/ruleset.dm diff --git a/modular_nova/modules/contractor/code/datums/midround/trim.dm b/modular_nova/modules/contractor/code/datums/midround/trim.dm new file mode 100644 index 00000000000000..d3cb0948085ae0 --- /dev/null +++ b/modular_nova/modules/contractor/code/datums/midround/trim.dm @@ -0,0 +1,7 @@ +/// Trim for Chameleon ID cards. Many outfits, nuke ops and some corpses hold Chameleon ID cards. +/datum/id_trim/chameleon/contractor + assignment = "Symphionia Contractor" + trim_state = "trim_contractor" + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' + department_color = COLOR_ORANGE + subdepartment_color = COLOR_ORANGE diff --git a/modular_nova/modules/contractor/code/datums/mind_datum.dm b/modular_nova/modules/contractor/code/datums/mind_datum.dm new file mode 100644 index 00000000000000..d95e6e524fa0ab --- /dev/null +++ b/modular_nova/modules/contractor/code/datums/mind_datum.dm @@ -0,0 +1,5 @@ +/datum/mind/proc/make_contractor_support() + var/contractor_support_datum = has_antag_datum(/datum/antagonist/traitor/contractor_support) + if(contractor_support_datum) + return contractor_support_datum + return add_antag_datum(/datum/antagonist/traitor/contractor_support) diff --git a/modular_skyrat/modules/contractor/code/datums/objective.dm b/modular_nova/modules/contractor/code/datums/objective.dm similarity index 100% rename from modular_skyrat/modules/contractor/code/datums/objective.dm rename to modular_nova/modules/contractor/code/datums/objective.dm diff --git a/modular_skyrat/modules/contractor/code/items/baton.dm b/modular_nova/modules/contractor/code/items/baton.dm similarity index 94% rename from modular_skyrat/modules/contractor/code/items/baton.dm rename to modular_nova/modules/contractor/code/items/baton.dm index d73972482db99c..6eee964cc83fde 100644 --- a/modular_skyrat/modules/contractor/code/items/baton.dm +++ b/modular_nova/modules/contractor/code/items/baton.dm @@ -66,7 +66,7 @@ upgrade.forceMove(src) /obj/item/melee/baton/telescopic/contractor_baton/upgraded - desc = "A compact, specialised baton assigned to Syndicate contractors. Applies light electrical shocks to targets. This one seems to have unremovable parts." + desc = "A compact, specialised baton assigned to Symphionia contractors. Applies light electrical shocks to targets. This one seems to have unremovable parts." /obj/item/melee/baton/telescopic/contractor_baton/upgraded/Initialize(mapload) . = ..() @@ -81,7 +81,7 @@ return /obj/item/baton_upgrade - icon = 'modular_skyrat/modules/contractor/icons/baton_upgrades.dmi' + icon = 'modular_nova/modules/contractor/icons/baton_upgrades.dmi' var/upgrade_flag /obj/item/baton_upgrade/cuff diff --git a/modular_nova/modules/contractor/code/items/boxes.dm b/modular_nova/modules/contractor/code/items/boxes.dm new file mode 100644 index 00000000000000..4a3f3775099950 --- /dev/null +++ b/modular_nova/modules/contractor/code/items/boxes.dm @@ -0,0 +1,66 @@ +#define SMALL_ITEM_AMOUNT 3 + +/obj/item/storage/box/syndicate/contract_kit + desc = "It's just an ordinary box." + special_desc = "Supplied to Syndicate contractors." + special_desc_requirement = EXAMINE_CHECK_CONTRACTOR + /// Extra items to insert modularly into the list of random small item candidates + var/static/list/modular_item_list = list( + /obj/item/crowbar/power/syndicate, + /obj/item/clothing/gloves/tackler/combat/insulated, + /obj/item/storage/box/syndie_kit/emp, + /obj/item/radio/headset/chameleon/advanced, + /obj/item/shield/energy, + /obj/item/healthanalyzer/rad_laser + ) + +/obj/item/storage/box/syndicate/contractor_loadout + desc = "It's just an ordinary box." + special_desc_requirement = EXAMINE_CHECK_CONTRACTOR + special_desc = "Supplied to Syndicate contractors, providing their specialised MODSuit and chameleon uniform." + +/obj/item/storage/box/syndicate/contractor_loadout/PopulateContents() + new /obj/item/mod/control/pre_equipped/contractor(src) + . = ..() // so their MODSuit is first + new /obj/item/uplink/old_radio(src) + new /obj/item/jammer(src) + +/obj/item/storage/box/contractor/fulton_extraction/PopulateContents() + new /obj/item/extraction_pack/contractor(src) + new /obj/item/fulton_core(src) + +/obj/item/storage/box/syndicate/contract_kit/midround/PopulateContents() + var/static/list/item_list = list( + /obj/item/storage/backpack/duffelbag/syndie/x4, + /obj/item/storage/box/syndie_kit/throwing_weapons, + /obj/item/gun/syringe/syndicate, + /obj/item/pen/edagger, + /obj/item/pen/sleepy, + /obj/item/flashlight/emp, + /obj/item/reagent_containers/syringe/mulligan, + /obj/item/storage/medkit/tactical, + /obj/item/clothing/glasses/thermal/syndi, + /obj/item/slimepotion/slime/sentience/nuclear, + /obj/item/storage/box/syndie_kit/imp_radio, + /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot, + /obj/item/reagent_containers/hypospray/medipen/stimulants, + /obj/item/storage/box/syndie_kit/imp_freedom, + /obj/item/crowbar/power/syndicate, + /obj/item/clothing/gloves/tackler/combat/insulated, + /obj/item/storage/box/syndie_kit/emp, + /obj/item/shield/energy, + /obj/item/healthanalyzer/rad_laser, + ) + // All about 4 TC or less - some nukeops only items, but fit nicely to the theme. + for(var/iteration in 1 to SMALL_ITEM_AMOUNT) + var/obj/item/small_item = pick_n_take(item_list) + new small_item(src) + + // Paper guide + new /obj/item/paper/contractor_guide/midround(src) + new /obj/item/reagent_containers/hypospray/medipen/atropine(src) + new /obj/item/jammer(src) + new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src) + new /obj/item/lighter(src) + +#undef SMALL_ITEM_AMOUNT diff --git a/modular_skyrat/modules/contractor/code/items/hook.dm b/modular_nova/modules/contractor/code/items/hook.dm similarity index 75% rename from modular_skyrat/modules/contractor/code/items/hook.dm rename to modular_nova/modules/contractor/code/items/hook.dm index a3c59314b25deb..8c5e0218f7ad28 100644 --- a/modular_skyrat/modules/contractor/code/items/hook.dm +++ b/modular_nova/modules/contractor/code/items/hook.dm @@ -1,7 +1,7 @@ /obj/item/gun/magic/hook/contractor name = "SCORPION hook" desc = "A hardlight hook used to non-lethally pull targets much closer to the user." - icon = 'modular_skyrat/modules/contractor/icons/hook.dmi' + icon = 'modular_nova/modules/contractor/icons/hook.dmi' icon_state = "hook_weapon" inhand_icon_state = "" //nah ammo_type = /obj/item/ammo_casing/magic/hook/contractor @@ -10,10 +10,10 @@ projectile_type = /obj/projectile/hook/contractor /obj/projectile/hook/contractor - icon = 'modular_skyrat/modules/contractor/icons/hook_projectile.dmi' + icon = 'modular_nova/modules/contractor/icons/hook_projectile.dmi' damage = 0 stamina = 25 - chain_icon = 'modular_skyrat/modules/contractor/icons/hook_projectile.dmi' + chain_icon = 'modular_nova/modules/contractor/icons/hook_projectile.dmi' /obj/item/gun/magic/hook/contractor/process_fire(atom/target, mob/living/user, message, params, zone_override, bonus_spread) if(prob(1)) diff --git a/modular_nova/modules/contractor/code/items/misc.dm b/modular_nova/modules/contractor/code/items/misc.dm new file mode 100644 index 00000000000000..6e282e0c974b8b --- /dev/null +++ b/modular_nova/modules/contractor/code/items/misc.dm @@ -0,0 +1,108 @@ +/obj/item/paper/contractor_guide/Initialize(mapload) + default_raw_text = {"<p>Welcome agent, congratulations on your new position as contractor. On top of your already assigned objectives, + this kit will provide you contracts to take on for TC payments.</p> + + <p>You likely already have your Contractor MODSuit equipped. It has a built in chameleon module, which only works when the MODSuit is undeployed, + but is highly useful for on-station infiltrations. We also provide your chameleon jumpsuit and mask, both of which can be changed + to any form you need for the moment. The cigarettes are a special blend - it'll heal your injuries slowly overtime.</p> + + <p>Your standard issue contractor baton hits harder than the ones you might be used to, and likely be your go to weapon for kidnapping your + targets. The three additional items have been randomly selected from what we had available. We hope they're useful to you for your mission.</p> + + <p>The contractor hub, available at the top right of the uplink, will provide you unique items and abilities. These are bought using Contractor Rep, + with two Rep being provided each time you complete a contract.</p> + + <h3>Using the tablet</h3> + <ol> + <li>Open the Symphionia Contract Uplink program.</li> + <li>Here, you can accept a contract, and redeem your TC payments from completed contracts.</li> + <li>The payment number shown in brackets is the bonus you'll receive when bringing your target <b>alive</b>. You receive the + other number regardless of if they were alive or dead.</li> + <li>Contracts are completed by bringing the target to designated dropoff, calling for extraction, and putting them + inside the pod.</li> + </ol> + + <p>Be careful when accepting a contract. While you'll be able to see the location of the dropoff point, cancelling will make it + unavailable to take on again.</p> + <p>The tablet can also be recharged at any cell charger.</p> + <h3>Extracting</h3> + <ol> + <li>Make sure both yourself and your target are at the dropoff.</li> + <li>Call the extraction, and stand back from the drop point.</li> + <li>If it fails, make sure your target is inside, and there's a free space for the pod to land.</li> + <li>Grab your target, and drag them into the pod.</li> + </ol> + <h3>Ransoms</h3> + <p>We need your target for our own reasons, but we ransom them back to your mission area once their use is served. They will return back + from where you sent them off from in several minutes time. Don't worry, we give you a cut of what we get paid. We pay this into whatever + ID card you have equipped, on top of the TC payment we give.</p> + + <p>Good luck agent. You can burn this document with the supplied lighter.</p>"} + + return ..() + +/obj/item/pinpointer/crew/contractor + name = "contractor pinpointer" + desc = "A handheld tracking device that locks onto certain signals. Ignores suit sensors, but is much less accurate." + icon_state = "pinpointer_syndicate" + worn_icon_state = "pinpointer_black" + minimum_range = 15 + has_owner = TRUE + ignore_suit_sensor_level = TRUE + +/obj/item/extraction_pack/contractor + name = "black fulton extraction pack" + icon = 'modular_nova/modules/contractor/icons/fulton.dmi' + can_use_indoors = TRUE + special_desc_requirement = EXAMINE_CHECK_CONTRACTOR + special_desc = "A modified fulton pack that can be used indoors thanks to Bluespace technology. Favored by Symphionia Contractors." + + +/obj/item/paper/contractor_guide/midround + name = "Contractor Guide" + +/obj/item/paper/contractor_guide/midround/Initialize(mapload) + default_raw_text = {"<p>Welcome agent, congratulations on successfully getting in range of the station.</p> + + <p>You likely already have your Contractor MODSuit equipped. It has a built in chameleon module, which only works when the MODSuit is undeployed, + but is highly useful for on-station infiltrations. We also provide your chameleon jumpsuit and mask, both of which can be changed + to any form you need for the moment. The cigarettes are a special blend - it'll heal your injuries slowly overtime.</p> + + <p>Your standard issue contractor baton can be found in the baton holster MODSuit module, it hits harder than the ones you might be used to, + and will likely be your go to weapon for kidnapping your targets.The three additional items have been randomly selected from what we had available. + We hope they're useful to you for your mission.</p> + + <p>The contractor hub, available at the top right of the uplink, will provide you unique items and abilities. These are bought using Contractor Rep, + with two Rep being provided each time you complete a contract.</p> + + <p>You've also been provided with a medipen of atropine, to prevent your implanted microbomb going off if it would be more tactically sound for your + body to stay intact. If circumstances change, you are still able to detonate your microbomb post-mortem.</p> + + <h3>Using the tablet</h3> + <ol> + <li>Open the Symphionia Contract Uplink program.</li> + <li>Here, you can accept a contract, and redeem your TC payments from completed contracts.</li> + <li>The payment number shown in brackets is the bonus you'll receive when bringing your target <b>alive</b>. You receive the + other number regardless of if they were alive or dead.</li> + <li>Contracts are completed by bringing the target to designated dropoff, calling for extraction, and putting them + inside the pod.</li> + </ol> + + <p>Be careful when accepting a contract. While you'll be able to see the location of the dropoff point, cancelling will make it + unavailable to take on again.</p> + <p>The tablet can also be recharged at any cell charger.</p> + <h3>Extracting</h3> + <ol> + <li>Make sure both yourself and your target are at the dropoff.</li> + <li>Call the extraction, and stand back from the drop point.</li> + <li>If it fails, make sure your target is inside, and there's a free space for the pod to land.</li> + <li>Grab your target, and drag them into the pod.</li> + </ol> + <h3>Ransoms</h3> + <p>We need your target for our own reasons, but we ransom them back to your mission area once their use is served. They will return back + from where you sent them off from in several minutes time. Don't worry, we give you a cut of what we get paid. We pay this into whatever + ID card you have equipped, on top of the TC payment we give.</p> + + <p>Good luck agent. You can burn this document with the supplied lighter.</p>"} + + return ..() diff --git a/modular_skyrat/modules/contractor/code/items/modsuit/modsuit.dm b/modular_nova/modules/contractor/code/items/modsuit/modsuit.dm similarity index 92% rename from modular_skyrat/modules/contractor/code/items/modsuit/modsuit.dm rename to modular_nova/modules/contractor/code/items/modsuit/modsuit.dm index e1dd641ea3ba22..88a6134999d1a5 100644 --- a/modular_skyrat/modules/contractor/code/items/modsuit/modsuit.dm +++ b/modular_nova/modules/contractor/code/items/modsuit/modsuit.dm @@ -1,7 +1,7 @@ /obj/item/mod/control/pre_equipped/contractor - worn_icon = 'modular_skyrat/modules/contractor/icons/worn_modsuit.dmi' - icon = 'modular_skyrat/modules/contractor/icons/modsuit.dmi' + worn_icon = 'modular_nova/modules/contractor/icons/worn_modsuit.dmi' + icon = 'modular_nova/modules/contractor/icons/modsuit.dmi' icon_state = "contractor-control" theme = /datum/mod_theme/contractor starting_frequency = MODLINK_FREQ_SYNDICATE diff --git a/modular_skyrat/modules/contractor/code/items/modsuit/modules.dm b/modular_nova/modules/contractor/code/items/modsuit/modules.dm similarity index 94% rename from modular_skyrat/modules/contractor/code/items/modsuit/modules.dm rename to modular_nova/modules/contractor/code/items/modsuit/modules.dm index 646ec92157feef..9e99d5de6568f1 100644 --- a/modular_skyrat/modules/contractor/code/items/modsuit/modules.dm +++ b/modular_nova/modules/contractor/code/items/modsuit/modules.dm @@ -4,7 +4,7 @@ to retrieve an inserted baton from the suit at will. Insert a baton \ by hitting the module, while it is removed from the suit, with the baton." icon_state = "holster" - icon = 'modular_skyrat/modules/contractor/icons/modsuit_modules.dmi' + icon = 'modular_nova/modules/contractor/icons/modsuit_modules.dmi' module_type = MODULE_ACTIVE complexity = 3 active_power_cost = DEFAULT_CHARGE_DRAIN * 0.3 @@ -63,7 +63,7 @@ desc = "A much more modern version of a springlock system. \ This is a module that uses magnets to speed up the deployment and retraction time of your MODsuit." icon_state = "magnet" - icon = 'modular_skyrat/modules/contractor/icons/modsuit_modules.dmi' + icon = 'modular_nova/modules/contractor/icons/modsuit_modules.dmi' /obj/item/mod/module/springlock/contractor/on_suit_activation() // This module is actually *not* a death trap return @@ -82,7 +82,7 @@ a target towards you at high speed, knocking them down and \ partially exhausting them." icon_state = "hook" - icon = 'modular_skyrat/modules/contractor/icons/modsuit_modules.dmi' + icon = 'modular_nova/modules/contractor/icons/modsuit_modules.dmi' incompatible_modules = list(/obj/item/mod/module/scorpion_hook) module_type = MODULE_ACTIVE complexity = 3 diff --git a/modular_skyrat/modules/contractor/code/items/modsuit/theme.dm b/modular_nova/modules/contractor/code/items/modsuit/theme.dm similarity index 87% rename from modular_skyrat/modules/contractor/code/items/modsuit/theme.dm rename to modular_nova/modules/contractor/code/items/modsuit/theme.dm index 83781f7246f3d6..62d5a7ea60b909 100644 --- a/modular_skyrat/modules/contractor/code/items/modsuit/theme.dm +++ b/modular_nova/modules/contractor/code/items/modsuit/theme.dm @@ -1,7 +1,7 @@ /datum/mod_theme/contractor name = "contractor" - desc = "A top-tier MODSuit developed with cooperation of Cybersun Industries and the Gorlex Marauders, a favorite of Syndicate Contractors." - extended_desc = "A rare depart from the Syndicate's usual color scheme, the Contractor MODsuit is produced and manufactured \ + desc = "A top-tier MODSuit developed with cooperation of Cybersun Industries and the Gorlex Marauders, a favorite of Symphionia Contractors." + extended_desc = "A rare depart from the Symphionia's usual color scheme, the Contractor MODsuit is produced and manufactured \ for specialty contractors. The build is a streamlined layering consisting of shaped Plastitanium, \ and composite ceramic, while the under suit is lined with a lightweight Kevlar and durathread hybrid weave \ to provide ample protection to the user where the plating doesn't, with an illegal onboard electric powered \ @@ -32,8 +32,8 @@ ) skins = list( "contractor" = list( - MOD_ICON_OVERRIDE = 'modular_skyrat/modules/contractor/icons/modsuit.dmi', - MOD_WORN_ICON_OVERRIDE = 'modular_skyrat/modules/contractor/icons/worn_modsuit.dmi', + MOD_ICON_OVERRIDE = 'modular_nova/modules/contractor/icons/modsuit.dmi', + MOD_WORN_ICON_OVERRIDE = 'modular_nova/modules/contractor/icons/worn_modsuit.dmi', HELMET_LAYER = NECK_LAYER, HELMET_FLAGS = list( UNSEALED_CLOTHING = SNUG_FIT, diff --git a/modular_skyrat/modules/contractor/code/items/tablet.dm b/modular_nova/modules/contractor/code/items/tablet.dm similarity index 80% rename from modular_skyrat/modules/contractor/code/items/tablet.dm rename to modular_nova/modules/contractor/code/items/tablet.dm index 44b28b75c6acd0..57d9227a0daef9 100644 --- a/modular_skyrat/modules/contractor/code/items/tablet.dm +++ b/modular_nova/modules/contractor/code/items/tablet.dm @@ -1,12 +1,7 @@ /obj/item/modular_computer/pda/contractor name = "contract PDA" - icon = 'icons/obj/antags/contractor_tablet.dmi' - icon_state = "tablet" - icon_state_unpowered = "tablet" - icon_state_powered = "tablet" - icon_state_menu = "assign" - greyscale_config = null - greyscale_colors = null + greyscale_config = /datum/greyscale_config/tablet/stripe_double + greyscale_colors = "#696969#000000#FFA500" comp_light_luminosity = 6.3 saved_identification = "John Doe" saved_job = "Citizen" diff --git a/modular_skyrat/modules/contractor/code/objects/supplypod.dm b/modular_nova/modules/contractor/code/objects/supplypod.dm similarity index 94% rename from modular_skyrat/modules/contractor/code/objects/supplypod.dm rename to modular_nova/modules/contractor/code/objects/supplypod.dm index 2cca53e20b2d7b..1f0e1632dd91fd 100644 --- a/modular_skyrat/modules/contractor/code/objects/supplypod.dm +++ b/modular_nova/modules/contractor/code/objects/supplypod.dm @@ -1,10 +1,10 @@ /obj/structure/closet/supplypod/extractionpod var/datum/contractor_hub/contract_hub var/datum/syndicate_contract/tied_contract - var/recieving = FALSE + var/receiving = FALSE /obj/structure/closet/supplypod/extractionpod/Destroy() - if(!recieving) + if(!receiving) return ..() to_chat(tied_contract.contract.owner, "<BR>[span_userdanger("Extraction pod destroyed. Contract aborted.")]") var/contract_id = tied_contract.id @@ -18,7 +18,7 @@ return ..() /obj/structure/closet/supplypod/extractionpod/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) - if(recieving && (atom_integrity <= 0)) + if(receiving && (atom_integrity <= 0)) to_chat(tied_contract.contract.owner, "<BR>[span_userdanger("Extraction pod destroyed. Contract aborted.")]") var/contract_id = tied_contract.id if (contract_hub.current_contract == tied_contract) diff --git a/modular_skyrat/modules/contractor/icons/baton_upgrades.dmi b/modular_nova/modules/contractor/icons/baton_upgrades.dmi similarity index 100% rename from modular_skyrat/modules/contractor/icons/baton_upgrades.dmi rename to modular_nova/modules/contractor/icons/baton_upgrades.dmi diff --git a/modular_skyrat/modules/contractor/icons/fulton.dmi b/modular_nova/modules/contractor/icons/fulton.dmi similarity index 100% rename from modular_skyrat/modules/contractor/icons/fulton.dmi rename to modular_nova/modules/contractor/icons/fulton.dmi diff --git a/modular_skyrat/modules/contractor/icons/hook.dmi b/modular_nova/modules/contractor/icons/hook.dmi similarity index 100% rename from modular_skyrat/modules/contractor/icons/hook.dmi rename to modular_nova/modules/contractor/icons/hook.dmi diff --git a/modular_skyrat/modules/contractor/icons/hook_projectile.dmi b/modular_nova/modules/contractor/icons/hook_projectile.dmi similarity index 100% rename from modular_skyrat/modules/contractor/icons/hook_projectile.dmi rename to modular_nova/modules/contractor/icons/hook_projectile.dmi diff --git a/modular_skyrat/modules/contractor/icons/hud_icon.dmi b/modular_nova/modules/contractor/icons/hud_icon.dmi similarity index 100% rename from modular_skyrat/modules/contractor/icons/hud_icon.dmi rename to modular_nova/modules/contractor/icons/hud_icon.dmi diff --git a/modular_skyrat/modules/contractor/icons/modsuit.dmi b/modular_nova/modules/contractor/icons/modsuit.dmi similarity index 100% rename from modular_skyrat/modules/contractor/icons/modsuit.dmi rename to modular_nova/modules/contractor/icons/modsuit.dmi diff --git a/modular_skyrat/modules/contractor/icons/modsuit_modules.dmi b/modular_nova/modules/contractor/icons/modsuit_modules.dmi similarity index 100% rename from modular_skyrat/modules/contractor/icons/modsuit_modules.dmi rename to modular_nova/modules/contractor/icons/modsuit_modules.dmi diff --git a/modular_skyrat/modules/contractor/icons/worn_modsuit.dmi b/modular_nova/modules/contractor/icons/worn_modsuit.dmi similarity index 100% rename from modular_skyrat/modules/contractor/icons/worn_modsuit.dmi rename to modular_nova/modules/contractor/icons/worn_modsuit.dmi diff --git a/modular_skyrat/modules/contractor/sound/confirmdropoff.ogg b/modular_nova/modules/contractor/sound/confirmdropoff.ogg similarity index 100% rename from modular_skyrat/modules/contractor/sound/confirmdropoff.ogg rename to modular_nova/modules/contractor/sound/confirmdropoff.ogg diff --git a/modular_skyrat/modules/conveyor_sorter/code/conveyor_sorter.dm b/modular_nova/modules/conveyor_sorter/code/conveyor_sorter.dm similarity index 91% rename from modular_skyrat/modules/conveyor_sorter/code/conveyor_sorter.dm rename to modular_nova/modules/conveyor_sorter/code/conveyor_sorter.dm index 32cec0b2f9a9ca..a6bae803359621 100644 --- a/modular_skyrat/modules/conveyor_sorter/code/conveyor_sorter.dm +++ b/modular_nova/modules/conveyor_sorter/code/conveyor_sorter.dm @@ -1,7 +1,7 @@ /obj/item/conveyor_sorter name = "conveyor sorter lister" desc = "A tool that is used to not only create the conveyor sorters, but give lists to the conveyor sorters." - icon = 'modular_skyrat/modules/conveyor_sorter/icons/conveyor_sorter.dmi' + icon = 'modular_nova/modules/conveyor_sorter/icons/conveyor_sorter.dmi' icon_state = "lister" ///the list of conveyor sorters spawned by var/list/spawned_sorters = list() @@ -61,7 +61,7 @@ /obj/effect/decal/conveyor_sorter name = "conveyor sorter" desc = "A mark that will sort items out based on what they are." - icon = 'modular_skyrat/modules/conveyor_sorter/icons/conveyor_sorter.dmi' + icon = 'modular_nova/modules/conveyor_sorter/icons/conveyor_sorter.dmi' icon_state = "sorter" layer = OBJ_LAYER plane = GAME_PLANE @@ -144,8 +144,13 @@ id = "conveysorter" build_type = PROTOLATHE | AWAY_LATHE build_path = /obj/item/conveyor_sorter - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 5) - category = list(RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_CARGO) + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT, + ) + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_CARGO, + ) departmental_flags = DEPARTMENT_BITFLAG_CARGO /datum/techweb_node/conveyor_sorter @@ -169,7 +174,7 @@ /obj/effect/decal/conveyor_sorter/improved name = "improved conveyor sorter" desc = "A mark that will sort items out based on what they are. This one can sort in ordinal directions as well!" - icon = 'modular_skyrat/modules/conveyor_sorter/icons/conveyor_sorter.dmi' + icon = 'modular_nova/modules/conveyor_sorter/icons/conveyor_sorter.dmi' icon_state = "sorter_improved" light_range = 3 light_color = COLOR_BLUE_LIGHT @@ -181,10 +186,10 @@ id = "conveyor_sorter_improved" build_path = /obj/item/conveyor_sorter/improved materials = list( - /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, - /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 5, - /datum/material/gold = SMALL_MATERIAL_AMOUNT * 5, - /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 5, + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT, ) diff --git a/modular_skyrat/modules/conveyor_sorter/icons/conveyor_sorter.dmi b/modular_nova/modules/conveyor_sorter/icons/conveyor_sorter.dmi similarity index 100% rename from modular_skyrat/modules/conveyor_sorter/icons/conveyor_sorter.dmi rename to modular_nova/modules/conveyor_sorter/icons/conveyor_sorter.dmi diff --git a/modular_skyrat/modules/conveyor_sorter/readme.md b/modular_nova/modules/conveyor_sorter/readme.md similarity index 100% rename from modular_skyrat/modules/conveyor_sorter/readme.md rename to modular_nova/modules/conveyor_sorter/readme.md diff --git a/modular_skyrat/modules/cortical_borer/code/cortical_borer.dm b/modular_nova/modules/cortical_borer/code/cortical_borer.dm similarity index 96% rename from modular_skyrat/modules/cortical_borer/code/cortical_borer.dm rename to modular_nova/modules/cortical_borer/code/cortical_borer.dm index 258cd9463d67b9..d77025e6853894 100644 --- a/modular_skyrat/modules/cortical_borer/code/cortical_borer.dm +++ b/modular_nova/modules/cortical_borer/code/cortical_borer.dm @@ -32,7 +32,7 @@ GLOBAL_LIST_EMPTY(cortical_borers) return FALSE //so if a person is debrained, the borer is removed -/obj/item/organ/internal/brain/Remove(mob/living/carbon/target, special = 0, no_id_transfer = FALSE) +/obj/item/organ/internal/brain/Remove(mob/living/carbon/target, special = FALSE, movement_flags) . = ..() var/mob/living/basic/cortical_borer/cb_inside = target.has_borer() if(cb_inside) @@ -50,7 +50,7 @@ GLOBAL_LIST_EMPTY(cortical_borers) borer = null return ..() -/obj/item/organ/internal/borer_body/Insert(mob/living/carbon/carbon_target, special, drop_if_replaced) +/obj/item/organ/internal/borer_body/Insert(mob/living/carbon/carbon_target, special, movement_flags) . = ..() for(var/datum/borer_focus/body_focus as anything in borer.body_focuses) body_focus.on_add() @@ -73,7 +73,7 @@ GLOBAL_LIST_EMPTY(cortical_borers) /mob/living/basic/cortical_borer name = "cortical borer" desc = "A slimy creature that is known to go into the ear canal of unsuspecting victims." - icon = 'modular_skyrat/modules/cortical_borer/icons/animal.dmi' + icon = 'modular_nova/modules/cortical_borer/icons/animal.dmi' icon_state = "brainslug" icon_living = "brainslug" icon_dead = "brainslug_dead" @@ -81,6 +81,7 @@ GLOBAL_LIST_EMPTY(cortical_borers) health = 25 //they need to be able to pass tables and mobs pass_flags = PASSTABLE | PASSMOB + density = FALSE //they are below mobs, or below tables layer = BELOW_MOB_LAYER //corticals are tiny @@ -97,7 +98,7 @@ GLOBAL_LIST_EMPTY(cortical_borers) /datum/reagent/medicine/epinephrine, /datum/reagent/medicine/haloperidol, /datum/reagent/toxin/formaldehyde, - /datum/reagent/impurity/libitoil, + /datum/reagent/inverse/libitoil, /datum/reagent/impurity/mannitol, /datum/reagent/medicine/c2/libital, /datum/reagent/medicine/c2/lenturi, @@ -205,8 +206,18 @@ GLOBAL_LIST_EMPTY(cortical_borers) /mob/living/basic/cortical_borer/Initialize(mapload) . = ..() + AddComponent( \ + /datum/component/squashable, \ + squash_chance = 25, \ + squash_damage = 25, \ + squash_flags = SQUASHED_DONT_SQUASH_IN_CONTENTS, \ + ) ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) //they need to be able to move around + var/matrix/borer_matrix = matrix(transform) + borer_matrix.Scale(0.5, 0.5) + transform = borer_matrix + name = "[initial(name)] ([generation]-[rand(100,999)])" //so their gen and a random. ex 1-288 is first gen named 288, 4-483 if fourth gen named 483 if(prob(5)) @@ -221,7 +232,7 @@ GLOBAL_LIST_EMPTY(cortical_borers) reagent_holder = new /obj/item/reagent_containers/borer(src) for(var/action_type in known_abilities) - var/datum/action/attack_action = new action_type() + var/datum/action/attack_action = new action_type(src) attack_action.Grant(src) if(mind) @@ -265,7 +276,7 @@ GLOBAL_LIST_EMPTY(cortical_borers) . += "OBJECTIVES:" . += "1) [GLOB.objective_egg_borer_number] borers producing [GLOB.objective_egg_egg_number] eggs: [GLOB.successful_egg_number]/[GLOB.objective_egg_borer_number]" . += "2) [GLOB.objective_willing_hosts] willing hosts: [length(GLOB.willing_hosts)]/[GLOB.objective_willing_hosts]" - . += "3) [GLOB.objective_blood_borer] borers learning [GLOB.objective_blood_chem] from the blood: [GLOB.successful_blood_chem]/[GLOB.objective_blood_borer]" + . += "3) [GLOB.objective_blood_borer] borers learning [GLOB.objective_blood_chem] chemicals from the blood: [GLOB.successful_blood_chem]/[GLOB.objective_blood_borer]" /mob/living/basic/cortical_borer/Life(seconds_per_tick, times_fired) . = ..() diff --git a/modular_skyrat/modules/cortical_borer/code/cortical_borer_abilities.dm b/modular_nova/modules/cortical_borer/code/cortical_borer_abilities.dm similarity index 99% rename from modular_skyrat/modules/cortical_borer/code/cortical_borer_abilities.dm rename to modular_nova/modules/cortical_borer/code/cortical_borer_abilities.dm index fae00851ad41d9..790d3f07c22820 100644 --- a/modular_skyrat/modules/cortical_borer/code/cortical_borer_abilities.dm +++ b/modular_nova/modules/cortical_borer/code/cortical_borer_abilities.dm @@ -1,11 +1,11 @@ #define CHEMICALS_PER_UNIT 2 #define CHEMICAL_SECOND_DIVISOR (5 SECONDS) #define OUT_OF_HOST_EGG_COST 50 -#define BLOOD_CHEM_OBJECTIVE 5 +#define BLOOD_CHEM_OBJECTIVE 3 // Parent of all borer actions /datum/action/cooldown/borer - button_icon = 'modular_skyrat/modules/cortical_borer/icons/actions.dmi' + button_icon = 'modular_nova/modules/cortical_borer/icons/actions.dmi' cooldown_time = 0 /// How many chemicals this costs var/chemical_cost = 0 diff --git a/modular_skyrat/modules/cortical_borer/code/cortical_borer_antag.dm b/modular_nova/modules/cortical_borer/code/cortical_borer_antag.dm similarity index 94% rename from modular_skyrat/modules/cortical_borer/code/cortical_borer_antag.dm rename to modular_nova/modules/cortical_borer/code/cortical_borer_antag.dm index 5de312eb22a4d2..c21a2ced2b4950 100644 --- a/modular_skyrat/modules/cortical_borer/code/cortical_borer_antag.dm +++ b/modular_nova/modules/cortical_borer/code/cortical_borer_antag.dm @@ -41,7 +41,7 @@ var/datum/team/cortical_borers/borers /datum/antagonist/cortical_borer/get_preview_icon() - return finish_preview_icon(icon('modular_skyrat/modules/cortical_borer/icons/animal.dmi', "brainslug")) + return finish_preview_icon(icon('modular_nova/modules/cortical_borer/icons/animal.dmi', "brainslug")) /datum/antagonist/cortical_borer/get_team() return borers @@ -125,7 +125,15 @@ vents += temp_vent if(!length(vents)) return MAP_ERROR - var/list/mob/dead/observer/candidates = poll_ghost_candidates("Do you want to spawn as a cortical borer?", ROLE_PAI, FALSE, 10 SECONDS, POLL_IGNORE_CORTICAL_BORER) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates( + "Do you want to spawn as a cortical borer?", + role = ROLE_PAI, + check_jobban = FALSE, + poll_time = 10 SECONDS, + ignore_category = POLL_IGNORE_CORTICAL_BORER, + pic_source = /obj/item/borer_egg, + role_name_text = "cortical borer", + ) if(!length(candidates)) return NOT_ENOUGH_PLAYERS var/living_number = max(length(GLOB.player_list) / POP_PER_BORER, 1) diff --git a/modular_skyrat/modules/cortical_borer/code/cortical_borer_chems.dm b/modular_nova/modules/cortical_borer/code/cortical_borer_chems.dm similarity index 100% rename from modular_skyrat/modules/cortical_borer/code/cortical_borer_chems.dm rename to modular_nova/modules/cortical_borer/code/cortical_borer_chems.dm diff --git a/modular_skyrat/modules/cortical_borer/code/cortical_borer_egg.dm b/modular_nova/modules/cortical_borer/code/cortical_borer_egg.dm similarity index 91% rename from modular_skyrat/modules/cortical_borer/code/cortical_borer_egg.dm rename to modular_nova/modules/cortical_borer/code/cortical_borer_egg.dm index 29829dac8b063f..8411e13cff3a3c 100644 --- a/modular_skyrat/modules/cortical_borer/code/cortical_borer_egg.dm +++ b/modular_nova/modules/cortical_borer/code/cortical_borer_egg.dm @@ -1,7 +1,7 @@ /obj/effect/mob_spawn/ghost_role/borer_egg name = "borer egg" desc = "An egg of a creature that is known to crawl inside of you, be careful." - icon = 'modular_skyrat/modules/cortical_borer/icons/animal.dmi' + icon = 'modular_nova/modules/cortical_borer/icons/animal.dmi' icon_state = "brainegg" layer = BELOW_MOB_LAYER density = FALSE @@ -41,12 +41,17 @@ forceMove(host_egg) var/area/src_area = get_area(src) if(src_area) - notify_ghosts("A cortical borer egg has been laid in \the [src_area.name].", source = src, action = NOTIFY_PLAY, flashwindow = FALSE, ignore_key = POLL_IGNORE_DRONE, notify_suiciders = FALSE) + notify_ghosts("A cortical borer egg has been laid in \the [src_area.name].", + source = src, + notify_flags = NOTIFY_CATEGORY_NOFLASH & ~GHOST_NOTIFY_NOTIFY_SUICIDERS, + click_interact = TRUE, + ignore_key = POLL_IGNORE_DRONE, + ) /obj/item/borer_egg name = "borer egg" desc = "An egg of a creature that is known to crawl inside of you, be careful." - icon = 'modular_skyrat/modules/cortical_borer/icons/animal.dmi' + icon = 'modular_nova/modules/cortical_borer/icons/animal.dmi' icon_state = "brainegg" layer = BELOW_MOB_LAYER ///the spawner that is attached to this item diff --git a/modular_skyrat/modules/cortical_borer/code/cortical_borer_items.dm b/modular_nova/modules/cortical_borer/code/cortical_borer_items.dm similarity index 98% rename from modular_skyrat/modules/cortical_borer/code/cortical_borer_items.dm rename to modular_nova/modules/cortical_borer/code/cortical_borer_items.dm index 5f0ecc27ef55c4..aa3cdc8f008e23 100644 --- a/modular_skyrat/modules/cortical_borer/code/cortical_borer_items.dm +++ b/modular_nova/modules/cortical_borer/code/cortical_borer_items.dm @@ -1,7 +1,7 @@ /obj/item/cortical_cage name = "cortical borer cage" desc = "A harmless cage that is intended to capture cortical borers." - icon = 'modular_skyrat/modules/cortical_borer/icons/items.dmi' + icon = 'modular_nova/modules/cortical_borer/icons/items.dmi' icon_state = "cage" ///If true, the trap is "open" and can trigger. diff --git a/modular_skyrat/modules/cortical_borer/code/evolution/borer_evolution.dm b/modular_nova/modules/cortical_borer/code/evolution/borer_evolution.dm similarity index 100% rename from modular_skyrat/modules/cortical_borer/code/evolution/borer_evolution.dm rename to modular_nova/modules/cortical_borer/code/evolution/borer_evolution.dm diff --git a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_datum.dm b/modular_nova/modules/cortical_borer/code/evolution/evolution_datum.dm similarity index 100% rename from modular_skyrat/modules/cortical_borer/code/evolution/evolution_datum.dm rename to modular_nova/modules/cortical_borer/code/evolution/evolution_datum.dm diff --git a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_diveworm.dm b/modular_nova/modules/cortical_borer/code/evolution/evolution_diveworm.dm similarity index 99% rename from modular_skyrat/modules/cortical_borer/code/evolution/evolution_diveworm.dm rename to modular_nova/modules/cortical_borer/code/evolution/evolution_diveworm.dm index 5a07e43d31315e..b04370d6c29bde 100644 --- a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_diveworm.dm +++ b/modular_nova/modules/cortical_borer/code/evolution/evolution_diveworm.dm @@ -107,5 +107,5 @@ /datum/borer_evolution/diveworm/empowered_offspring/on_evolve(mob/living/basic/cortical_borer/cortical_owner) . = ..() - var/datum/action/cooldown/borer/empowered_offspring/attack_action = new() + var/datum/action/cooldown/borer/empowered_offspring/attack_action = new(cortical_owner) attack_action.Grant(cortical_owner) diff --git a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_general.dm b/modular_nova/modules/cortical_borer/code/evolution/evolution_general.dm similarity index 99% rename from modular_skyrat/modules/cortical_borer/code/evolution/evolution_general.dm rename to modular_nova/modules/cortical_borer/code/evolution/evolution_general.dm index 9a21906dbf3799..0e46dd7681bed0 100644 --- a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_general.dm +++ b/modular_nova/modules/cortical_borer/code/evolution/evolution_general.dm @@ -54,7 +54,7 @@ /datum/reagent/medicine/system_cleaner, /datum/reagent/medicine/nanite_slurry, /datum/reagent/medicine/liquid_solder, - /datum/reagent/oil, + /datum/reagent/fuel/oil, /datum/reagent/fuel, ) diff --git a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_hivelord.dm b/modular_nova/modules/cortical_borer/code/evolution/evolution_hivelord.dm similarity index 98% rename from modular_skyrat/modules/cortical_borer/code/evolution/evolution_hivelord.dm rename to modular_nova/modules/cortical_borer/code/evolution/evolution_hivelord.dm index ca5e11883524d2..be06cc5d7f4154 100644 --- a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_hivelord.dm +++ b/modular_nova/modules/cortical_borer/code/evolution/evolution_hivelord.dm @@ -12,7 +12,7 @@ /datum/borer_evolution/hivelord/produce_offspring/on_evolve(mob/living/basic/cortical_borer/cortical_owner) . = ..() - var/datum/action/cooldown/borer/produce_offspring/attack_action = new() + var/datum/action/cooldown/borer/produce_offspring/attack_action = new(cortical_owner) attack_action.Grant(cortical_owner) // T2 @@ -25,7 +25,7 @@ /datum/borer_evolution/hivelord/blood_chemical/on_evolve(mob/living/basic/cortical_borer/cortical_owner) . = ..() - var/datum/action/cooldown/borer/learn_bloodchemical/attack_action = new() + var/datum/action/cooldown/borer/learn_bloodchemical/attack_action = new(cortical_owner) attack_action.Grant(cortical_owner) // T3 @@ -51,7 +51,7 @@ /datum/borer_evolution/hivelord/stealth_mode/on_evolve(mob/living/basic/cortical_borer/cortical_owner) . = ..() - var/datum/action/cooldown/borer/stealth_mode/attack_action = new() + var/datum/action/cooldown/borer/stealth_mode/attack_action = new(cortical_owner) attack_action.Grant(cortical_owner) // T5 diff --git a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_symbiote.dm b/modular_nova/modules/cortical_borer/code/evolution/evolution_symbiote.dm similarity index 99% rename from modular_skyrat/modules/cortical_borer/code/evolution/evolution_symbiote.dm rename to modular_nova/modules/cortical_borer/code/evolution/evolution_symbiote.dm index 2cdc66addbb416..4eb5005883711b 100644 --- a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_symbiote.dm +++ b/modular_nova/modules/cortical_borer/code/evolution/evolution_symbiote.dm @@ -12,7 +12,7 @@ /datum/borer_evolution/symbiote/willing_host/on_evolve(mob/living/basic/cortical_borer/cortical_owner) . = ..() - var/datum/action/cooldown/borer/willing_host/attack_action = new() + var/datum/action/cooldown/borer/willing_host/attack_action = new(cortical_owner) attack_action.Grant(cortical_owner) // T2 @@ -107,6 +107,6 @@ /datum/borer_evolution/symbiote/revive_host/on_evolve(mob/living/basic/cortical_borer/cortical_owner) . = ..() - var/datum/action/cooldown/borer/revive_host/attack_action = new() + var/datum/action/cooldown/borer/revive_host/attack_action = new(cortical_owner) attack_action.Grant(cortical_owner) diff --git a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_things/empowered_egg.dm b/modular_nova/modules/cortical_borer/code/evolution/evolution_things/empowered_egg.dm similarity index 84% rename from modular_skyrat/modules/cortical_borer/code/evolution/evolution_things/empowered_egg.dm rename to modular_nova/modules/cortical_borer/code/evolution/evolution_things/empowered_egg.dm index 5f079c6b9b3e97..e1c1284683595c 100644 --- a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_things/empowered_egg.dm +++ b/modular_nova/modules/cortical_borer/code/evolution/evolution_things/empowered_egg.dm @@ -19,7 +19,7 @@ if(iscarbon(loc)) Insert(loc) -/obj/item/organ/internal/empowered_borer_egg/Insert(mob/living/carbon/M, special = FALSE, drop_if_replaced = TRUE) +/obj/item/organ/internal/empowered_borer_egg/Insert(mob/living/carbon/M, special = FALSE, movement_flags = DELETE_IF_REPLACED) ..() addtimer(CALLBACK(src, PROC_REF(try_burst)), burst_time) @@ -36,7 +36,15 @@ if(owner.stat != DEAD) qdel(src) return - var/list/candidates = poll_ghost_candidates("Do you want to spawn as an empowered Cortical Borer bursting from [owner]?", ROLE_PAI, FALSE, 10 SECONDS, POLL_IGNORE_CORTICAL_BORER) + var/list/candidates = SSpolling.poll_ghost_candidates( + "Do you want to spawn as an empowered Cortical Borer bursting from [owner]?", + role = ROLE_PAI, + check_jobban = FALSE, + poll_time = 10 SECONDS, + ignore_category = POLL_IGNORE_CORTICAL_BORER, + pic_source = /obj/item/borer_egg/empowered, + role_name_text = "empowered cortical borer", + ) if(!length(candidates)) var/obj/effect/mob_spawn/ghost_role/borer_egg/empowered/borer_egg = new(get_turf(owner)) borer_egg.generation = generation diff --git a/modular_skyrat/modules/cortical_borer/code/focus_datum.dm b/modular_nova/modules/cortical_borer/code/focus_datum.dm similarity index 100% rename from modular_skyrat/modules/cortical_borer/code/focus_datum.dm rename to modular_nova/modules/cortical_borer/code/focus_datum.dm diff --git a/modular_nova/modules/cortical_borer/code/status_effects.dm b/modular_nova/modules/cortical_borer/code/status_effects.dm new file mode 100644 index 00000000000000..ffcdf7b3b2023e --- /dev/null +++ b/modular_nova/modules/cortical_borer/code/status_effects.dm @@ -0,0 +1,11 @@ +/datum/status_effect/borer_sugar + id = "borer_sugar" + tick_interval = -1 + status_type = STATUS_EFFECT_UNIQUE + alert_type = /atom/movable/screen/alert/status_effect/borer_sugar + +/atom/movable/screen/alert/status_effect/borer_sugar + name = "Sugar Dampening" + desc = "Your powers are diminished while sugar is in you or your host!" + icon = 'modular_nova/modules/cortical_borer/icons/actions.dmi' + icon_state = "borer_sugar" diff --git a/modular_skyrat/modules/cortical_borer/icons/actions.dmi b/modular_nova/modules/cortical_borer/icons/actions.dmi similarity index 100% rename from modular_skyrat/modules/cortical_borer/icons/actions.dmi rename to modular_nova/modules/cortical_borer/icons/actions.dmi diff --git a/modular_skyrat/modules/cortical_borer/icons/animal.dmi b/modular_nova/modules/cortical_borer/icons/animal.dmi similarity index 100% rename from modular_skyrat/modules/cortical_borer/icons/animal.dmi rename to modular_nova/modules/cortical_borer/icons/animal.dmi diff --git a/modular_skyrat/modules/cortical_borer/icons/hud.dmi b/modular_nova/modules/cortical_borer/icons/hud.dmi similarity index 100% rename from modular_skyrat/modules/cortical_borer/icons/hud.dmi rename to modular_nova/modules/cortical_borer/icons/hud.dmi diff --git a/modular_skyrat/modules/cortical_borer/icons/items.dmi b/modular_nova/modules/cortical_borer/icons/items.dmi similarity index 100% rename from modular_skyrat/modules/cortical_borer/icons/items.dmi rename to modular_nova/modules/cortical_borer/icons/items.dmi diff --git a/modular_skyrat/modules/cortical_borer/readme.md b/modular_nova/modules/cortical_borer/readme.md similarity index 100% rename from modular_skyrat/modules/cortical_borer/readme.md rename to modular_nova/modules/cortical_borer/readme.md diff --git a/modular_skyrat/modules/crafting/crafting_skyrat.dm b/modular_nova/modules/crafting/crafting.dm similarity index 100% rename from modular_skyrat/modules/crafting/crafting_skyrat.dm rename to modular_nova/modules/crafting/crafting.dm diff --git a/modular_nova/modules/cryosleep/code/admin.dm b/modular_nova/modules/cryosleep/code/admin.dm new file mode 100644 index 00000000000000..8dbedb76acd2a9 --- /dev/null +++ b/modular_nova/modules/cryosleep/code/admin.dm @@ -0,0 +1,27 @@ +/// Send player in not-quiet cryopod. If with_paper = TRUE, place a paper with notification under player. +/mob/proc/send_to_cryo(with_paper = FALSE) + //effect + playsound(loc, 'sound/magic/Repulse.ogg', 100, 1) + var/datum/effect_system/spark_spread/quantum/sparks = new + sparks.set_up(10, 1, loc) + sparks.attach(loc) + sparks.start() + + //make a paper if need + if(with_paper) + var/obj/item/paper/cryo_paper = new /obj/item/paper(loc) + cryo_paper.name = "Notification - [name]" + cryo_paper.add_raw_text("Our sincerest apologies, [name][job ? ", [job]," : ""] had to be sent back in Cryogenic Storage for reasons that cannot be elaborated on at the moment.<br><br>Sincerely,<br><i>Symphionia Anti-Sudden Sleep Disorder Agency</i>") + cryo_paper.update_appearance() + //find cryopod + for(var/obj/machinery/cryopod/cryo in GLOB.valid_cryopods) + if(!cryo.occupant && cryo.state_open && !cryo.panel_open) //free, opened, and panel closed? + if(buckled) + buckled.unbuckle_mob(src, TRUE) + if(buckled_mobs) + for(var/mob/buckled_mob in buckled_mobs) + unbuckle_mob(buckled_mob) + cryo.close_machine(src) //put player + break + + diff --git a/modular_skyrat/modules/cryosleep/code/ai.dm b/modular_nova/modules/cryosleep/code/ai.dm similarity index 100% rename from modular_skyrat/modules/cryosleep/code/ai.dm rename to modular_nova/modules/cryosleep/code/ai.dm diff --git a/modular_skyrat/modules/cryosleep/code/config.dm b/modular_nova/modules/cryosleep/code/config.dm similarity index 100% rename from modular_skyrat/modules/cryosleep/code/config.dm rename to modular_nova/modules/cryosleep/code/config.dm diff --git a/modular_skyrat/modules/cryosleep/code/cryo_console_return.dm b/modular_nova/modules/cryosleep/code/cryo_console_return.dm similarity index 100% rename from modular_skyrat/modules/cryosleep/code/cryo_console_return.dm rename to modular_nova/modules/cryosleep/code/cryo_console_return.dm diff --git a/modular_skyrat/modules/cryosleep/code/cryopod.dm b/modular_nova/modules/cryosleep/code/cryopod.dm similarity index 99% rename from modular_skyrat/modules/cryosleep/code/cryopod.dm rename to modular_nova/modules/cryosleep/code/cryopod.dm index 08a0bf8b8bb4c7..54a9d5efdb9cab 100644 --- a/modular_skyrat/modules/cryosleep/code/cryopod.dm +++ b/modular_nova/modules/cryosleep/code/cryopod.dm @@ -19,7 +19,7 @@ GLOBAL_LIST_EMPTY(valid_cryopods) /obj/machinery/computer/cryopod name = "cryogenic oversight console" desc = "An interface between crew and the cryogenic storage oversight systems." - icon = 'modular_skyrat/modules/cryosleep/icons/cryogenics.dmi' + icon = 'modular_nova/modules/cryosleep/icons/cryogenics.dmi' icon_state = "cellconsole_1" icon_keyboard = null icon_screen = null @@ -134,7 +134,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/cryopod, 32) /obj/machinery/cryopod name = "cryogenic freezer" desc = "Suited for Cyborgs and Humanoids, the pod is a safe place for personnel affected by the Space Sleep Disorder to get some rest." - icon = 'modular_skyrat/modules/cryosleep/icons/cryogenics.dmi' + icon = 'modular_nova/modules/cryosleep/icons/cryogenics.dmi' icon_state = "cryopod-open" base_icon_state = "cryopod" use_power = FALSE diff --git a/modular_skyrat/modules/cryosleep/code/job.dm b/modular_nova/modules/cryosleep/code/job.dm similarity index 100% rename from modular_skyrat/modules/cryosleep/code/job.dm rename to modular_nova/modules/cryosleep/code/job.dm diff --git a/modular_skyrat/modules/cryosleep/code/mind.dm b/modular_nova/modules/cryosleep/code/mind.dm similarity index 100% rename from modular_skyrat/modules/cryosleep/code/mind.dm rename to modular_nova/modules/cryosleep/code/mind.dm diff --git a/modular_skyrat/modules/cryosleep/code/mood.dm b/modular_nova/modules/cryosleep/code/mood.dm similarity index 100% rename from modular_skyrat/modules/cryosleep/code/mood.dm rename to modular_nova/modules/cryosleep/code/mood.dm diff --git a/modular_skyrat/modules/cryosleep/icons/cryogenics.dmi b/modular_nova/modules/cryosleep/icons/cryogenics.dmi similarity index 100% rename from modular_skyrat/modules/cryosleep/icons/cryogenics.dmi rename to modular_nova/modules/cryosleep/icons/cryogenics.dmi diff --git a/modular_skyrat/modules/cryosleep/readme.md b/modular_nova/modules/cryosleep/readme.md similarity index 100% rename from modular_skyrat/modules/cryosleep/readme.md rename to modular_nova/modules/cryosleep/readme.md diff --git a/modular_nova/modules/curatorbundle/Mushy.dm b/modular_nova/modules/curatorbundle/Mushy.dm new file mode 100644 index 00000000000000..5782a8f65c3a97 --- /dev/null +++ b/modular_nova/modules/curatorbundle/Mushy.dm @@ -0,0 +1,49 @@ +/obj/item/clothing/head/mush_helmet + name = "mush cap" + desc = "A mushroom cap, this one also doubles as an umbrella!" + icon = 'modular_nova/master_files/icons/obj/clothing/head/costume.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/costume.dmi' + icon_state = "mush_cap" + worn_icon_state = "mush_cap" + greyscale_config = /datum/greyscale_config/mushcap + greyscale_config_worn = /datum/greyscale_config/mushcap/worn + greyscale_colors = "#eb0c07" + flags_cover = HEADCOVERSEYES + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/suit/mush + name = "mushroom suit" + desc = "A mushroom suit, these can be sporadically seen being worn by the more fungal personalities." + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + icon_state = "mush_male" + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + slowdown = 1 + clothing_flags = THICKMATERIAL + body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + uses_advanced_reskins = TRUE + unique_reskin = list( + "Male Mush" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits.dmi', + RESKIN_ICON_STATE = "mush_male", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suit.dmi', + RESKIN_WORN_ICON_STATE = "mush_male" + ), + "Female Mush" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits.dmi', + RESKIN_ICON_STATE = "mush_female", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suit.dmi', + RESKIN_WORN_ICON_STATE = "mush_female" + ) + ) + + +/obj/item/storage/box/hero/mushperson + name = "Mushy The Mushperson - 2305" + desc = "Can you remember?" + +/obj/item/storage/box/hero/mushperson/PopulateContents() + new /obj/item/clothing/suit/mush(src) + new /obj/item/clothing/head/mush_helmet(src) + new /obj/item/mushpunch(src) diff --git a/modular_skyrat/modules/curatorbundle/Ronin.dm b/modular_nova/modules/curatorbundle/Ronin.dm similarity index 89% rename from modular_skyrat/modules/curatorbundle/Ronin.dm rename to modular_nova/modules/curatorbundle/Ronin.dm index 25698c1de6863f..8c628614fc09c8 100644 --- a/modular_skyrat/modules/curatorbundle/Ronin.dm +++ b/modular_nova/modules/curatorbundle/Ronin.dm @@ -3,7 +3,7 @@ desc = "Anyone can give up, it's the easiest thing in the world to do. But to hold it together when everyone else would understand if you fell apart, that's true strength. Become the wandering swordsman you were always meant to be!" /obj/item/storage/box/hero/ronin/PopulateContents() - new /obj/item/clothing/under/costume/skyrat/kamishimo(src) + new /obj/item/clothing/under/costume/nova/kamishimo(src) new /obj/item/clothing/head/costume/rice_hat(src) new /obj/item/katana/weak/curator(src) new /obj/item/clothing/shoes/sandal(src) diff --git a/modular_skyrat/modules/customization/__DEFINES/DNA.dm b/modular_nova/modules/customization/__DEFINES/DNA.dm similarity index 100% rename from modular_skyrat/modules/customization/__DEFINES/DNA.dm rename to modular_nova/modules/customization/__DEFINES/DNA.dm diff --git a/modular_nova/modules/customization/__DEFINES/lists.dm b/modular_nova/modules/customization/__DEFINES/lists.dm new file mode 100644 index 00000000000000..6c5d6bf496b084 --- /dev/null +++ b/modular_nova/modules/customization/__DEFINES/lists.dm @@ -0,0 +1,30 @@ +GLOBAL_LIST_EMPTY(sprite_accessories) +GLOBAL_LIST_EMPTY(generic_accessories) +GLOBAL_LIST_EMPTY(genetic_accessories) + +/// What accessories can a species have as well as their default accessory of such type e.g. "frills" = "Aquatic". Default accessory colors is dictated by the accessory properties and mutcolors of the specie +GLOBAL_LIST_EMPTY(default_mutant_bodyparts) +GLOBAL_LIST_INIT(possible_genitals, list( + ORGAN_SLOT_VAGINA, + ORGAN_SLOT_WOMB, + ORGAN_SLOT_TESTICLES, + ORGAN_SLOT_BREASTS, + ORGAN_SLOT_ANUS, + ORGAN_SLOT_PENIS +)) + +GLOBAL_LIST_EMPTY(body_markings) +GLOBAL_LIST_EMPTY_TYPED(body_markings_per_limb, /list) +GLOBAL_LIST_EMPTY(body_marking_sets) + +GLOBAL_LIST_EMPTY(loadout_items) +GLOBAL_LIST_EMPTY(loadout_category_to_subcategory_to_items) + +GLOBAL_LIST_EMPTY(augment_items) +GLOBAL_LIST_EMPTY(augment_categories_to_slots) +GLOBAL_LIST_EMPTY(augment_slot_to_items) + +GLOBAL_LIST_EMPTY(dna_mutant_bodypart_blocks) +GLOBAL_LIST_EMPTY(dna_body_marking_blocks) + +GLOBAL_LIST_EMPTY(species_clothing_fallback_cache) diff --git a/modular_skyrat/modules/customization/__DEFINES/loadout.dm b/modular_nova/modules/customization/__DEFINES/loadout.dm similarity index 100% rename from modular_skyrat/modules/customization/__DEFINES/loadout.dm rename to modular_nova/modules/customization/__DEFINES/loadout.dm diff --git a/modular_skyrat/modules/customization/__HELPERS/DNA.dm b/modular_nova/modules/customization/__HELPERS/DNA.dm similarity index 100% rename from modular_skyrat/modules/customization/__HELPERS/DNA.dm rename to modular_nova/modules/customization/__HELPERS/DNA.dm diff --git a/modular_skyrat/modules/customization/__HELPERS/global_lists.dm b/modular_nova/modules/customization/__HELPERS/global_lists.dm similarity index 90% rename from modular_skyrat/modules/customization/__HELPERS/global_lists.dm rename to modular_nova/modules/customization/__HELPERS/global_lists.dm index a2dca2e39bed4e..d203c1ea805056 100644 --- a/modular_skyrat/modules/customization/__HELPERS/global_lists.dm +++ b/modular_nova/modules/customization/__HELPERS/global_lists.dm @@ -1,5 +1,6 @@ /proc/make_skyrat_datum_references() make_sprite_accessory_references() + make_default_mutant_bodypart_references() make_body_marking_references() make_body_marking_set_references() make_body_marking_dna_block_references() @@ -30,6 +31,18 @@ if(P.generic && !GLOB.generic_accessories[P.key]) GLOB.generic_accessories[P.key] = P.generic +/proc/make_default_mutant_bodypart_references() + // Build the global list for default species' mutant_bodyparts + for(var/path in subtypesof(/datum/species)) + var/datum/species/species_type = path + var/datum/species/species_instance = new species_type + if(!isnull(species_instance.name)) + GLOB.default_mutant_bodyparts[species_instance.name] = species_instance.get_default_mutant_bodyparts() + if(species_instance.can_have_genitals) + for(var/genital in GLOB.possible_genitals) + GLOB.default_mutant_bodyparts[species_instance.name] += list((genital) = list("None", FALSE)) + qdel(species_instance) + /proc/make_body_marking_references() // Here we build the global list for all body markings for(var/path in subtypesof(/datum/body_marking)) diff --git a/modular_skyrat/modules/customization/__HELPERS/mobs.dm b/modular_nova/modules/customization/__HELPERS/mobs.dm similarity index 100% rename from modular_skyrat/modules/customization/__HELPERS/mobs.dm rename to modular_nova/modules/customization/__HELPERS/mobs.dm diff --git a/modular_skyrat/modules/customization/__HELPERS/names.dm b/modular_nova/modules/customization/__HELPERS/names.dm similarity index 100% rename from modular_skyrat/modules/customization/__HELPERS/names.dm rename to modular_nova/modules/customization/__HELPERS/names.dm diff --git a/modular_skyrat/modules/customization/__HELPERS/text.dm b/modular_nova/modules/customization/__HELPERS/text.dm similarity index 100% rename from modular_skyrat/modules/customization/__HELPERS/text.dm rename to modular_nova/modules/customization/__HELPERS/text.dm diff --git a/modular_nova/modules/customization/_globalvars/lists.dm b/modular_nova/modules/customization/_globalvars/lists.dm new file mode 100644 index 00000000000000..90a0758b0dcdee --- /dev/null +++ b/modular_nova/modules/customization/_globalvars/lists.dm @@ -0,0 +1,113 @@ +//DO NOT CHANGE THOSE LISTS UNLESS YOU KNOW WHAT YOURE DOING (will mess savefiles) + + +GLOBAL_LIST_INIT(breast_size_translation, list( + "0" = BREAST_SIZE_FLATCHESTED, + "1" = BREAST_SIZE_A, + "2" = BREAST_SIZE_B, + "3" = BREAST_SIZE_C, + "4" = BREAST_SIZE_D, + "5" = BREAST_SIZE_E, + "6" = BREAST_SIZE_F, + "7" = BREAST_SIZE_G, + "8" = BREAST_SIZE_H, + "9" = BREAST_SIZE_I, + "10" = BREAST_SIZE_J, + "11" = BREAST_SIZE_K, + "12" = BREAST_SIZE_L, + "13" = BREAST_SIZE_M, + "14" = BREAST_SIZE_N, + "15" = BREAST_SIZE_O, + "16" = BREAST_SIZE_P, + )) + +GLOBAL_LIST_INIT(breast_size_to_number, list( + BREAST_SIZE_FLATCHESTED = 0, + BREAST_SIZE_A = 1, + BREAST_SIZE_B = 2, + BREAST_SIZE_C = 3, + BREAST_SIZE_D = 4, + BREAST_SIZE_E = 5, + BREAST_SIZE_F = 6, + BREAST_SIZE_G = 7, + BREAST_SIZE_H = 8, + BREAST_SIZE_I = 9, + BREAST_SIZE_J = 10, + BREAST_SIZE_K = 11, + BREAST_SIZE_L = 12, + BREAST_SIZE_M = 13, + BREAST_SIZE_N = 14, + BREAST_SIZE_O = 15, + BREAST_SIZE_P = 16, + )) + +GLOBAL_LIST_INIT(balls_size_translation, list( + "0" = "Small", + "1" = "Average", + "2" = "Big", + "3" = "Enormous" + )) + +GLOBAL_LIST_INIT(marking_zone_to_bitflag, list( + BODY_ZONE_HEAD = HEAD, + BODY_ZONE_CHEST = CHEST, + BODY_ZONE_L_LEG = LEG_LEFT, + BODY_ZONE_R_LEG = LEG_RIGHT, + BODY_ZONE_L_ARM = ARM_LEFT, + BODY_ZONE_R_ARM = ARM_RIGHT, + BODY_ZONE_PRECISE_L_HAND = HAND_LEFT, + BODY_ZONE_PRECISE_R_HAND = HAND_RIGHT + )) + +GLOBAL_LIST_INIT(marking_zones, list( + BODY_ZONE_HEAD, + BODY_ZONE_CHEST, + BODY_ZONE_L_LEG, + BODY_ZONE_R_LEG, + BODY_ZONE_L_ARM, + BODY_ZONE_R_ARM, + BODY_ZONE_PRECISE_L_HAND, + BODY_ZONE_PRECISE_R_HAND, + )) + +GLOBAL_LIST_INIT(preference_balls_sizes, list( + "Small", + "Average", + "Big", + "Enormous", + )) + +GLOBAL_LIST_INIT(robotic_styles_list, list( + "None" = "None", + "Surplus" = 'icons/mob/augmentation/surplus_augments.dmi', + "Cyborg" = 'icons/mob/augmentation/augments.dmi', + "Engineering" = 'icons/mob/augmentation/augments_engineer.dmi', + "Mining" = 'icons/mob/augmentation/augments_mining.dmi', + "Security" = 'icons/mob/augmentation/augments_security.dmi', + "Morpheus Cyberkinetics" = 'modular_nova/master_files/icons/mob/augmentation/mcgipc.dmi', + "Bishop Cyberkinetics" = 'modular_nova/master_files/icons/mob/augmentation/bshipc.dmi', + "Bishop Cyberkinetics 2.0" = 'modular_nova/master_files/icons/mob/augmentation/bs2ipc.dmi', + "Hephaestus Industries" = 'modular_nova/master_files/icons/mob/augmentation/hsiipc.dmi', + "Hephaestus Industries 2.0" = 'modular_nova/master_files/icons/mob/augmentation/hi2ipc.dmi', + "Shellguard Munitions Standard Series" = 'modular_nova/master_files/icons/mob/augmentation/sgmipc.dmi', + "Ward-Takahashi Manufacturing" = 'modular_nova/master_files/icons/mob/augmentation/wtmipc.dmi', + "Xion Manufacturing Group" = 'modular_nova/master_files/icons/mob/augmentation/xmgipc.dmi', + "Xion Manufacturing Group 2.0" = 'modular_nova/master_files/icons/mob/augmentation/xm2ipc.dmi', + "Zeng-Hu Pharmaceuticals" = 'modular_nova/master_files/icons/mob/augmentation/zhpipc.dmi' + )) + +//ghoul colors +GLOBAL_LIST_INIT(color_list_ghoul, list( \ + "Necrotic Green" = "bfc474", \ + "Rotting Tan" = "c4af7c", \ + "Plutonium Blue" = "a5cfcc", \ + "Marked Red" = "f05b68" \ +)) + +//Bras +/// Stores all /datum/sprite_accessory/bra indexed by name. +GLOBAL_LIST_EMPTY(bra_list) +/// Stores only the bra names for male-compatible bras. +GLOBAL_LIST_EMPTY(bra_m) +/// Stores only the bra names for female-compatible bras. +GLOBAL_LIST_EMPTY(bra_f) diff --git a/modular_nova/modules/customization/_globalvars/names.dm b/modular_nova/modules/customization/_globalvars/names.dm new file mode 100644 index 00000000000000..2efefacf5a5b5e --- /dev/null +++ b/modular_nova/modules/customization/_globalvars/names.dm @@ -0,0 +1,8 @@ +GLOBAL_LIST_INIT(first_names_male_vulp, world.file2list("modular_nova/modules/customization/strings/names/first_male_vulp.txt")) +GLOBAL_LIST_INIT(first_names_female_vulp, world.file2list("modular_nova/modules/customization/strings/names/first_female_vulp.txt")) +GLOBAL_LIST_INIT(last_names_vulp, world.file2list("modular_nova/modules/customization/strings/names/last_vulp.txt")) +GLOBAL_LIST_INIT(first_names_male_taj, world.file2list("modular_nova/modules/customization/strings/names/first_male_taj.txt")) +GLOBAL_LIST_INIT(first_names_female_taj, world.file2list("modular_nova/modules/customization/strings/names/first_female_taj.txt")) +GLOBAL_LIST_INIT(last_names_taj, world.file2list("modular_nova/modules/customization/strings/names/last_taj.txt")) +GLOBAL_LIST_INIT(callsigns_nri, world.file2list("modular_nova/modules/customization/strings/names/callsigns_nri.txt")) +GLOBAL_LIST_INIT(phonetic_alphabet_numbers, world.file2list("modular_nova/modules/customization/strings/names/phonetic_alphabet_numbers.txt")) diff --git a/modular_skyrat/modules/customization/datums/components/crafting/clothing.dm b/modular_nova/modules/customization/datums/components/crafting/clothing.dm similarity index 100% rename from modular_skyrat/modules/customization/datums/components/crafting/clothing.dm rename to modular_nova/modules/customization/datums/components/crafting/clothing.dm diff --git a/modular_skyrat/modules/customization/datums/components/crafting/hemophage_recipes.dm b/modular_nova/modules/customization/datums/components/crafting/hemophage_recipes.dm similarity index 100% rename from modular_skyrat/modules/customization/datums/components/crafting/hemophage_recipes.dm rename to modular_nova/modules/customization/datums/components/crafting/hemophage_recipes.dm diff --git a/modular_skyrat/modules/customization/datums/components/crafting/recipes.dm b/modular_nova/modules/customization/datums/components/crafting/recipes.dm similarity index 100% rename from modular_skyrat/modules/customization/datums/components/crafting/recipes.dm rename to modular_nova/modules/customization/datums/components/crafting/recipes.dm diff --git a/modular_skyrat/modules/customization/datums/components/crafting/teshari_recipes.dm b/modular_nova/modules/customization/datums/components/crafting/teshari_recipes.dm similarity index 100% rename from modular_skyrat/modules/customization/datums/components/crafting/teshari_recipes.dm rename to modular_nova/modules/customization/datums/components/crafting/teshari_recipes.dm diff --git a/modular_skyrat/modules/customization/datums/dna.dm b/modular_nova/modules/customization/datums/dna.dm similarity index 84% rename from modular_skyrat/modules/customization/datums/dna.dm rename to modular_nova/modules/customization/datums/dna.dm index 7e0fb14838c417..e29e403e97b26a 100644 --- a/modular_skyrat/modules/customization/datums/dna.dm +++ b/modular_nova/modules/customization/datums/dna.dm @@ -57,16 +57,6 @@ GLOBAL_LIST_EMPTY(total_uf_len_by_block) ///Current body size, used for proper re-sizing and keeping track of that var/current_body_size = BODY_SIZE_NORMAL -/datum/dna/proc/initialize_dna(newblood_type, skip_index = FALSE) - if(newblood_type) - blood_type = newblood_type - unique_enzymes = generate_unique_enzymes() - unique_identity = generate_unique_identity() - if(!skip_index) //I hate this - generate_dna_blocks() - mutant_bodyparts = species.get_random_mutant_bodyparts(features) - unique_features = generate_unique_features() - /datum/dna/proc/generate_unique_features() var/list/data = list() @@ -186,59 +176,6 @@ GLOBAL_LIST_EMPTY(total_uf_len_by_block) holder.maptext_height = 32 * features["body_size"] // Adjust runechat height current_body_size = features["body_size"] -/mob/living/carbon/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, list/override_features, list/override_mutantparts, list/override_markings, retain_features = FALSE, retain_mutantparts = FALSE) - if(QDELETED(src)) - CRASH("You're trying to change your species post deletion, this is a recipe for madness") - if(isnull(mrace)) - CRASH("set_species called without a species to set to") - if(!has_dna()) - return - - var/datum/species/new_race - if(ispath(mrace)) - new_race = new mrace - else if(istype(mrace)) - if(QDELING(mrace)) - CRASH("someone is calling set_species() and is passing it a qdeling species datum, this is VERY bad, stop it") - new_race = mrace - else - CRASH("set_species called with an invalid mrace [mrace]") - - death_sound = new_race.death_sound - - var/datum/species/old_species = dna.species - dna.species = new_race - - if (old_species.properly_gained) - old_species.on_species_loss(src, new_race, pref_load) - - //BODYPARTS AND FEATURES - We need to instantiate the list with compatible mutant parts so we don't break things - - if(override_mutantparts && override_mutantparts.len) - for(var/feature in dna.mutant_bodyparts) - override_mutantparts[feature] = dna.mutant_bodyparts[feature] - dna.mutant_bodyparts = override_mutantparts - - if(override_markings && override_markings.len) - for(var/feature in dna.body_markings) - override_markings[feature] = dna.body_markings[feature] - dna.body_markings = override_markings - - if(override_features && override_features.len) - for(var/feature in dna.features) - override_features[feature] = dna.features[feature] - dna.features = override_features - //END OF BODYPARTS AND FEATURES - - apply_customizable_dna_features_to_species() - dna.unique_features = dna.generate_unique_features() - - dna.update_body_size() - - dna.species.on_species_gain(src, old_species, pref_load) - log_mob_tag("TAG: [tag] SPECIES: [key_name(src)] \[[mrace]\]") - - /mob/living/carbon/proc/apply_customizable_dna_features_to_species() if(!has_dna()) CRASH("[src] does not have DNA") diff --git a/modular_skyrat/modules/customization/datums/keybinding/communication.dm b/modular_nova/modules/customization/datums/keybinding/communication.dm similarity index 100% rename from modular_skyrat/modules/customization/datums/keybinding/communication.dm rename to modular_nova/modules/customization/datums/keybinding/communication.dm diff --git a/modular_skyrat/modules/customization/game/objects/items/balls.dm b/modular_nova/modules/customization/game/objects/items/balls.dm similarity index 90% rename from modular_skyrat/modules/customization/game/objects/items/balls.dm rename to modular_nova/modules/customization/game/objects/items/balls.dm index 457f8de2044fe7..474aa056838a6e 100644 --- a/modular_skyrat/modules/customization/game/objects/items/balls.dm +++ b/modular_nova/modules/customization/game/objects/items/balls.dm @@ -1,13 +1,13 @@ /obj/item/toy/tennis name = "tennis ball" desc = "A classical tennis ball. It appears to have faint bite marks scattered all over its surface." - icon = 'modular_skyrat/master_files/icons/obj/balls.dmi' + icon = 'modular_nova/master_files/icons/obj/balls.dmi' icon_state = "tennis_classic" worn_icon_state = "tennis_classic" - lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/balls_left.dmi' - righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/balls_right.dmi' + lefthand_file = 'modular_nova/master_files/icons/mob/inhands/balls_left.dmi' + righthand_file = 'modular_nova/master_files/icons/mob/inhands/balls_right.dmi' inhand_icon_state = "tennis_classic" - worn_icon = 'modular_skyrat/master_files/icons/mob/mouthball.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/mouthball.dmi' slot_flags = ITEM_SLOT_HEAD | ITEM_SLOT_NECK | ITEM_SLOT_EARS //Fluff item, put it wherever you want! throw_range = 14 w_class = WEIGHT_CLASS_SMALL diff --git a/modular_nova/modules/customization/game/objects/items/conversion_kits.dm b/modular_nova/modules/customization/game/objects/items/conversion_kits.dm new file mode 100644 index 00000000000000..e0248b1e1f93aa --- /dev/null +++ b/modular_nova/modules/customization/game/objects/items/conversion_kits.dm @@ -0,0 +1,29 @@ +/obj/item/device/custom_kit + name = "modification kit" + desc = "A box of parts for modifying a certain object." + icon = 'modular_nova/master_files/icons/donator/obj/kits.dmi' + icon_state = "partskit" + /// The base object to be converted. + var/obj/item/from_obj + /// The object to turn it into. + var/obj/item/to_obj + +/obj/item/device/custom_kit/afterattack(obj/target_obj, mob/user, proximity_flag) + if(!proximity_flag) //Gotta be adjacent to your target + return + if(isturf(target_obj)) //This shouldn't be needed, but apparently it throws runtimes otherwise. + return + else if(target_obj.type == from_obj) //Checks whether the item is eligible to be converted + if(!pre_convert_check(target_obj, user)) + return FALSE + var/obj/item/converted_item = new to_obj(get_turf(src)) + user.put_in_hands(converted_item) + user.visible_message(span_notice("[user] modifies [target_obj] into [converted_item]."), span_notice("You modify [target_obj] into [converted_item].")) + qdel(target_obj) + qdel(src) + else + to_chat(user, span_warning("It looks like this kit won't work on [target_obj]...")) + +/// Override this if you have some condition you want fulfilled before allowing the conversion. Return TRUE to allow it to convert, return FALSE to prevent it. +/obj/item/device/custom_kit/proc/pre_convert_check(obj/target_obj, mob/user) + return TRUE diff --git a/modular_nova/modules/customization/game/objects/items/devices/crutch.dm b/modular_nova/modules/customization/game/objects/items/devices/crutch.dm new file mode 100644 index 00000000000000..57a9c5ad40bf95 --- /dev/null +++ b/modular_nova/modules/customization/game/objects/items/devices/crutch.dm @@ -0,0 +1,14 @@ +/obj/item/cane/crutch + name = "crutch" + desc = "A crutch usually employed by those recovering from a leg injury." + icon = 'modular_nova/master_files/icons/obj/staff.dmi' + icon_state = "crutch" + inhand_icon_state = "crutch" + lefthand_file = 'modular_nova/master_files/icons/mob/inhands/melee_lefthand.dmi' + righthand_file = 'modular_nova/master_files/icons/mob/inhands/melee_righthand.dmi' + custom_materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 6, + ) + attack_verb_continuous = list("bludgeons", "whacks", "thrashes") + attack_verb_simple = list("bludgeon", "whack", "thrash") + diff --git a/modular_skyrat/modules/customization/game/objects/items/devices/ttsdevice.dm b/modular_nova/modules/customization/game/objects/items/devices/ttsdevice.dm similarity index 80% rename from modular_skyrat/modules/customization/game/objects/items/devices/ttsdevice.dm rename to modular_nova/modules/customization/game/objects/items/devices/ttsdevice.dm index 10a0672b70d34f..9ff52756144d03 100644 --- a/modular_skyrat/modules/customization/game/objects/items/devices/ttsdevice.dm +++ b/modular_nova/modules/customization/game/objects/items/devices/ttsdevice.dm @@ -1,7 +1,7 @@ /obj/item/ttsdevice name = "TTS device" desc = "A small device with a keyboard attached. Anything entered on the keyboard is played out the speaker. \n<span class='notice'>Ctrl-click the device to make it beep.</span> \n<span class='notice'>Ctrl-shift-click to name the device." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/remote.dmi' icon_state = "gangtool-purple" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' @@ -10,15 +10,21 @@ /obj/item/ttsdevice/attack_self(mob/user) user.balloon_alert_to_viewers("typing...", "started typing...") - playsound(src, 'modular_skyrat/master_files/sound/items/tts/started_type.ogg', 50, TRUE) + playsound(src, 'modular_nova/master_files/sound/items/tts/started_type.ogg', 50, TRUE) var/str = tgui_input_text(user, "What would you like the device to say?", "Say Text", "", MAX_MESSAGE_LEN, encode = FALSE) if(QDELETED(src) || !user.can_perform_action(src)) return if(!str) user.balloon_alert_to_viewers("stops typing", "stopped typing") - playsound(src, 'modular_skyrat/master_files/sound/items/tts/stopped_type.ogg', 50, TRUE) + playsound(src, 'modular_nova/master_files/sound/items/tts/stopped_type.ogg', 50, TRUE) return - src.say(str) + + chat_color_name = name + chat_color = user.client?.prefs?.read_preference(/datum/preference/color/chat_color) + if(chat_color) + chat_color_darkened = process_chat_color(chat_color, sat_shift = 0.85, lum_shift = 0.85) + + say(str) str = null /obj/item/ttsdevice/CtrlClick(mob/living/user) diff --git a/modular_skyrat/modules/customization/game/objects/items/instruments.dm b/modular_nova/modules/customization/game/objects/items/instruments.dm similarity index 76% rename from modular_skyrat/modules/customization/game/objects/items/instruments.dm rename to modular_nova/modules/customization/game/objects/items/instruments.dm index 8f9bafe3ef9b1c..4803352859c0b7 100644 --- a/modular_skyrat/modules/customization/game/objects/items/instruments.dm +++ b/modular_nova/modules/customization/game/objects/items/instruments.dm @@ -3,11 +3,11 @@ /obj/item/instrument/musicalduffy name = "suspicious musical moth" desc = "A familiar looking moth sporting a fancy pair of glasses and a piano that harmonizes the screaming agony of moths." - icon = 'modular_skyrat/master_files/icons/obj/instruments.dmi' + icon = 'modular_nova/master_files/icons/obj/instruments.dmi' icon_state = "musical_duffy" allowed_instrument_ids = "mothscream" attack_verb_continuous = list("flutters", "flaps", "squeaks") attack_verb_simple = list("flutter", "flap", "squeak") w_class = WEIGHT_CLASS_TINY force = 0 - hitsound = 'modular_skyrat/modules/emotes/sound/emotes/mothsqueak.ogg' + hitsound = 'modular_nova/modules/emotes/sound/emotes/mothsqueak.ogg' diff --git a/modular_skyrat/modules/customization/game/objects/items/plushes.dm b/modular_nova/modules/customization/game/objects/items/plushes.dm similarity index 78% rename from modular_skyrat/modules/customization/game/objects/items/plushes.dm rename to modular_nova/modules/customization/game/objects/items/plushes.dm index 1d2992cf8efe55..8ca01d4a54df73 100644 --- a/modular_skyrat/modules/customization/game/objects/items/plushes.dm +++ b/modular_nova/modules/customization/game/objects/items/plushes.dm @@ -1,34 +1,38 @@ +// Because plushes have a second desc var that needs to be updated +/obj/item/toy/plush/on_loadout_custom_described() + normal_desc = desc + // // MODULAR PLUSHES -/obj/item/toy/plush/skyrat - icon = 'modular_skyrat/master_files/icons/obj/plushes.dmi' +/obj/item/toy/plush/nova + icon = 'modular_nova/master_files/icons/obj/plushes.dmi' inhand_icon_state = null -/obj/item/toy/plush/skyrat/borbplushie +/obj/item/toy/plush/nova/borbplushie name = "borb plushie" desc = "An adorable stuffed toy that resembles a round, fluffy looking bird. Not to be mistaken for his friend, the birb plushie." icon_state = "plushie_borb" attack_verb_continuous = list("pecks", "peeps") attack_verb_simple = list("peck", "peep") - squeak_override = list('modular_skyrat/modules/emotes/sound/voice/peep_once.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/voice/peep_once.ogg' = 1) -/obj/item/toy/plush/skyrat/deer +/obj/item/toy/plush/nova/deer name = "deer plushie" desc = "An adorable stuffed toy that resembles a deer." icon_state = "plushie_deer" attack_verb_continuous = list("headbutts", "boops", "bapps", "bumps") attack_verb_simple = list("headbutt", "boop", "bap", "bump") - squeak_override = list('modular_skyrat/modules/customization/game/objects/items/sound/deerplush.ogg' = 1) + squeak_override = list('modular_nova/modules/customization/game/objects/items/sound/deerplush.ogg' = 1) -/obj/item/toy/plush/skyrat/fermis +/obj/item/toy/plush/nova/fermis name = "medcat plushie" desc = "An affectionate stuffed toy that resembles a certain medcat, comes complete with battery operated wagging tail!! You get the impression she's cheering you on to find happiness and be kind to people." icon_state = "plushie_fermis" attack_verb_continuous = list("cuddles", "petpatts", "wigglepurrs") attack_verb_simple = list("cuddle", "petpatt", "wigglepurr") - squeak_override = list('modular_skyrat/modules/customization/game/objects/items/sound/merowr.ogg' = 1) + squeak_override = list('modular_nova/modules/customization/game/objects/items/sound/merowr.ogg' = 1) gender = FEMALE -/obj/item/toy/plush/skyrat/fermis/chen +/obj/item/toy/plush/nova/fermis/chen name = "securicat plushie" desc = "The official stuffed companion to the medcat plushie!! It resembles a certain securicat. You get the impression she's encouraging you to be brave and protect those you care for." icon_state = "plushie_chen" @@ -38,15 +42,15 @@ special_desc_jobs = list(JOB_ASSISTANT, JOB_HEAD_OF_SECURITY) special_desc = "There's a pocket under the coat hiding a tiny picture of the medcat plushie and a tinier ribbon diamond ring. D'awww." -/obj/item/toy/plush/skyrat/sechound +/obj/item/toy/plush/nova/sechound name = "sec-hound plushie" - desc = "An adorable stuffed toy of a SecHound, the trusty Nanotrasen sponsored security borg!" + desc = "An adorable stuffed toy of a SecHound, the trusty Symphionia sponsored security borg!" icon_state = "plushie_securityk9" attack_verb_continuous = list("beeps", "boops", "pings") attack_verb_simple = list("beep", "boop", "ping") squeak_override = list('sound/machines/beep.ogg' = 1) -/obj/item/toy/plush/skyrat/medihound +/obj/item/toy/plush/nova/medihound name = "medi-hound plushie" desc = "An adorable stuffed toy of a medihound." icon_state = "plushie_medihound" @@ -54,7 +58,7 @@ attack_verb_simple = list("beep", "boop", "ping") squeak_override = list('sound/machines/beep.ogg' = 1) -/obj/item/toy/plush/skyrat/engihound +/obj/item/toy/plush/nova/engihound name = "engi-hound plushie" desc = "An adorable stuffed toy of a engihound." icon_state = "plushie_engihound" @@ -62,7 +66,7 @@ attack_verb_simple = list("beep", "boop", "ping") squeak_override = list('sound/machines/beep.ogg' = 1) -/obj/item/toy/plush/skyrat/scrubpuppy +/obj/item/toy/plush/nova/scrubpuppy name = "scrub-puppy plushie" desc = "An adorable stuffed toy of a Scrubpuppy, the hard-working pup who keeps the station clean!" icon_state = "plushie_scrubpuppy" @@ -70,7 +74,7 @@ attack_verb_simple = list("beep", "boop", "ping") squeak_override = list('sound/machines/beep.ogg' = 1) -/obj/item/toy/plush/skyrat/meddrake +/obj/item/toy/plush/nova/meddrake name = "medi-drake plushie" desc = "An adorable stuffed toy of a Medidrake." icon_state = "plushie_meddrake" @@ -78,7 +82,7 @@ attack_verb_simple = list("beep", "boop", "ping") squeak_override = list('sound/machines/beep.ogg' = 1) -/obj/item/toy/plush/skyrat/secdrake +/obj/item/toy/plush/nova/secdrake name = "sec-drake plushie" desc = "An adorable stuffed toy of a Secdrake." icon_state = "plushie_secdrake" @@ -86,74 +90,74 @@ attack_verb_simple = list("beep", "boop", "ping") squeak_override = list('sound/machines/beep.ogg' = 1) -/obj/item/toy/plush/skyrat/fox +/obj/item/toy/plush/nova/fox name = "fox plushie" desc = "An adorable stuffed toy of a Fox." icon_state = "plushie_fox" attack_verb_continuous = list("geckers", "boops", "nuzzles") attack_verb_simple = list("gecker", "boop", "nuzzle") - squeak_override = list('modular_skyrat/modules/customization/game/objects/items/sound/deerplush.ogg' = 1) + squeak_override = list('modular_nova/modules/customization/game/objects/items/sound/deerplush.ogg' = 1) -/obj/item/toy/plush/skyrat/duffmoth +/obj/item/toy/plush/nova/duffmoth name = "suspicious moth plushie" desc = "A plushie depicting a certain moth. He probably got turned into a marketable plushie." icon_state = "plushie_duffy" attack_verb_continuous = list("flutters", "flaps", "squeaks") attack_verb_simple = list("flutter", "flap", "squeak") - squeak_override = list('modular_skyrat/modules/emotes/sound/emotes/mothsqueak.ogg'= 1) + squeak_override = list('modular_nova/modules/emotes/sound/emotes/mothsqueak.ogg'= 1) gender = MALE -/obj/item/toy/plush/skyrat/leaplush +/obj/item/toy/plush/nova/leaplush name = "suspicious deer plushie" desc = "A cute and all too familiar deer." icon_state = "plushie_lea" attack_verb_continuous = list("headbutts", "plaps") attack_verb_simple = list("headbutt", "plap") - squeak_override = list('modular_skyrat/modules/customization/game/objects/items/sound/leaplush.ogg' = 1) + squeak_override = list('modular_nova/modules/customization/game/objects/items/sound/leaplush.ogg' = 1) gender = FEMALE -/obj/item/toy/plush/skyrat/sarmieplush +/obj/item/toy/plush/nova/sarmieplush name = "cosplayer plushie" desc = "A stuffed toy who look like a familiar cosplayer, <b>he looks sad.</b>" icon_state = "plushie_sarmie" attack_verb_continuous = list("baps") attack_verb_simple = list("bap") - squeak_override = list('modular_skyrat/modules/emotes/sound/voice/weh.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/voice/weh.ogg' = 1) gender = MALE -/obj/item/toy/plush/skyrat/sharknet +/obj/item/toy/plush/nova/sharknet name = "gluttonous shark plushie" desc = "A heavy plushie of a rather large and hungry shark" icon_state = "plushie_sharknet" attack_verb_continuous = list("cuddles", "squishes", "wehs") attack_verb_simple = list("cuddle", "squish", "weh") w_class = WEIGHT_CLASS_NORMAL - squeak_override = list('modular_skyrat/modules/emotes/sound/voice/slime_squish.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/voice/slime_squish.ogg' = 1) young = TRUE //No. /obj/item/toy/plush/sharknet/Initialize(mapload) . = ..() - create_storage(max_slots = 2, max_specific_storage = WEIGHT_CLASS_SMALL, canhold = list(/obj/item/toy/plush/skyrat/pintaplush)) + create_storage(max_slots = 2, max_specific_storage = WEIGHT_CLASS_SMALL, canhold = list(/obj/item/toy/plush/nova/pintaplush)) -/obj/item/toy/plush/skyrat/pintaplush +/obj/item/toy/plush/nova/pintaplush name = "smaller deer plushie" desc = "A pint-sized cervine with a vacant look." icon_state = "plushie_pinta" attack_verb_continuous = list("bonks", "snugs") attack_verb_simple = list("bonk", "snug") - squeak_override = list('modular_skyrat/modules/emotes/sound/voice/slime_squish.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/voice/slime_squish.ogg' = 1) young = TRUE //No. -/obj/item/toy/plush/skyrat/szaplush +/obj/item/toy/plush/nova/szaplush name = "suspicious spider" desc = "A plushie of a shy looking drider, colored in floortile gray." icon_state = "plushie_sza" attack_verb_continuous = list("scuttles", "chitters", "bites") attack_verb_simple = list("scuttle", "chitter", "bite") - squeak_override = list('modular_skyrat/modules/customization/game/objects/items/sound/spiderplush.ogg' = 1) + squeak_override = list('modular_nova/modules/customization/game/objects/items/sound/spiderplush.ogg' = 1) young = TRUE //No. -/obj/item/toy/plush/skyrat/riffplush +/obj/item/toy/plush/nova/riffplush name = "valid plushie" desc = "A stuffed toy in the likeness of a peculiar demonic one. Likely turned into a plushie to sell such. They look quite alright about it." icon_state = "plushie_riffy" @@ -161,84 +165,84 @@ attack_verb_simple = list("slap", "challenge") squeak_override = list('sound/weapons/slap.ogg' = 1) -/obj/item/toy/plush/skyrat/ian +/obj/item/toy/plush/nova/ian name = "plush corgi" desc = "A plushie of an adorable corgi! Don't you just want to hug it and squeeze it and call it \"Ian\"?" icon_state = "ianplushie" attack_verb_continuous = list("barks", "woofs", "wags his tail at") attack_verb_simple = list("lick", "nuzzle", "bite") - squeak_override = list('modular_skyrat/modules/emotes/sound/voice/bark2.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/voice/bark2.ogg' = 1) young = TRUE //No. -/obj/item/toy/plush/skyrat/ian/small +/obj/item/toy/plush/nova/ian/small name = "small plush corgi" desc = "A plushie of an adorable corgi! Don't you just want to hug it and squeeze it and call it \"Ian\"?" icon_state = "corgi" -/obj/item/toy/plush/skyrat/ian/lisa +/obj/item/toy/plush/nova/ian/lisa name = "plush girly corgi" desc = "A plushie of an adorable corgi! Don't you just want to hug it and squeeze it and call it \"Lisa\"?" icon_state = "girlycorgi" attack_verb_continuous = list("barks", "woofs", "wags her tail at") gender = FEMALE -/obj/item/toy/plush/skyrat/cat +/obj/item/toy/plush/nova/cat name = "cat plushie" desc = "A small cat plushie with black beady eyes." icon_state = "blackcat" attack_verb_continuous = list("cuddles", "meows", "hisses") attack_verb_simple = list("cuddle", "meow", "hiss") - squeak_override = list('modular_skyrat/modules/customization/game/objects/items/sound/merowr.ogg' = 1) + squeak_override = list('modular_nova/modules/customization/game/objects/items/sound/merowr.ogg' = 1) -/obj/item/toy/plush/skyrat/cat/tux +/obj/item/toy/plush/nova/cat/tux name = "tux cat plushie" icon_state = "tuxedocat" -/obj/item/toy/plush/skyrat/cat/white +/obj/item/toy/plush/nova/cat/white name = "white cat plushie" icon_state = "whitecat" -/obj/item/toy/plush/skyrat/seaduplush +/obj/item/toy/plush/nova/seaduplush name = "sneed plushie" desc = "A plushie of a particular, bundled up IPC. Underneath the cloak, you can see a plush recreation of the captain's sabre." icon_state = "plushie_seadu" attack_verb_continuous = list("beeps", "sneeds", "swords") attack_verb_simple = list("beep", "sneed", "sword") - squeak_override = list('modular_skyrat/modules/emotes/sound/emotes/synth_yes.ogg' = 1,'modular_skyrat/modules/emotes/sound/emotes/synth_no.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/emotes/synth_yes.ogg' = 1,'modular_nova/modules/emotes/sound/emotes/synth_no.ogg' = 1) -/obj/item/toy/plush/skyrat/lizzyplush +/obj/item/toy/plush/nova/lizzyplush name = "odd yoga lizzy plushie" - desc = "Brought to you by Nanotrasen Wellness Program is the Yoga Odd Lizzy! He smells vaguely of blueberries, and likely resembles a horrible lover." + desc = "Brought to you by Symphionia Wellness Program is the Yoga Odd Lizzy! He smells vaguely of blueberries, and likely resembles a horrible lover." icon_state = "plushie_lizzy" attack_verb_continuous = list("wehs") attack_verb_simple = list("weh") - squeak_override = list('modular_skyrat/modules/emotes/sound/voice/weh.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/voice/weh.ogg' = 1) -/obj/item/toy/plush/skyrat/mechanic_fox +/obj/item/toy/plush/nova/mechanic_fox name = "mechanist fox plushie" desc = "A fox with fabulous hair! It has a tendency to make synth plushies look good as new when placed next to them." icon_state = "plushie_cali" attack_verb_continuous = list("fixes", "updates", "hugs") attack_verb_simple = list("fix", "update", "hug") - squeak_override = list('modular_skyrat/modules/customization/game/objects/items/sound/deerplush.ogg' = 1) + squeak_override = list('modular_nova/modules/customization/game/objects/items/sound/deerplush.ogg' = 1) -/obj/item/toy/plush/skyrat/tribal_salamander +/obj/item/toy/plush/nova/tribal_salamander name = "tribal salamander plushie" desc = "A water-safe plushie that always seems to lose any clothes you try to put on it." icon_state = "plushie_azu" attack_verb_continuous = list("wurbles at", "warbles at") attack_verb_simple = list("wurbles at", "warbles at") - squeak_override = list('modular_skyrat/modules/emotes/sound/voice/wurble.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/voice/wurble.ogg' = 1) -/obj/item/toy/plush/skyrat/commanding_teshari +/obj/item/toy/plush/nova/commanding_teshari name = "commanding teshari plushy" desc = "A very soft plush resembling a certain science-loving, command inclined Teshari. Just holding it makes you feel cared for." icon_state = "plushie_alara" attack_verb_continuous = list("peeps", "wurbles", "hugs") attack_verb_simple = list("peeps", "wurbles", "hugs") - squeak_override = list('modular_skyrat/modules/emotes/sound/voice/peep_once.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/voice/peep_once.ogg' = 1) -/obj/item/toy/plush/skyrat/breakdancing_bird +/obj/item/toy/plush/nova/breakdancing_bird name = "breakdancing bird plushie" desc = "This little robotic bird plushie loves to give you a little dance in celebration of your achievements, no matter how mundane." icon_state = "plushie_cadicus" @@ -246,23 +250,23 @@ attack_verb_simple = list("boop", "dance next to") squeak_override = list('sound/machines/ping.ogg' = 1) -/obj/item/toy/plush/skyrat/skreking_vox +/obj/item/toy/plush/nova/skreking_vox name = "skreking vox plushie" desc = "A vox plushie that seems ready to pull a gun on you and demand your money! Rumor has it that if you poke it in a particular way, it will show you its skrektual technique." icon_state = "plushie_toko" attack_verb_continuous = list("rustles at", "threatens", "skreks at") attack_verb_simple = list("rustle at", "threaten", "skrek at") - squeak_override = list('modular_skyrat/modules/emotes/sound/emotes/voxrustle.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/emotes/voxrustle.ogg' = 1) -/obj/item/toy/plush/skyrat/blue_dog +/obj/item/toy/plush/nova/blue_dog name = "blue dog plushie" desc = "A devious looking husky that seems to be begging for headpats. It smells faintly of blueberries." icon_state = "plushie_cobalt" attack_verb_continuous = list("barks at", "borks at", "woofs at") attack_verb_simple = list("bark at", "bork at", "woof at") - squeak_override = list('modular_skyrat/modules/emotes/sound/voice/bark1.ogg'=1, 'modular_skyrat/modules/emotes/sound/voice/bark2.ogg'=1) + squeak_override = list('modular_nova/modules/emotes/sound/voice/bark1.ogg'=1, 'modular_nova/modules/emotes/sound/voice/bark2.ogg'=1) -/obj/item/toy/plush/skyrat/engi_snek +/obj/item/toy/plush/nova/engi_snek name = "engineering snek plushie" desc = "This plush looks like it knows the difference between pumps and pipes! The arm is detachable, so don't lose it!" icon_state = "plushie_tyri" @@ -270,7 +274,7 @@ attack_verb_simple = list("fix", "unbolt", "weld") squeak_override = list('sound/items/screwdriver.ogg' = 1, 'sound/items/drill_use.ogg' = 1, 'sound/items/welder.ogg' = 1) -/obj/item/toy/plush/skyrat/glitch_synth +/obj/item/toy/plush/nova/glitch_synth name = "glitching synthetic plushie" desc = "A synthetic plush, the interface seems to glitch out every time you give it a hug or call it cute!" icon_state = "plushie_rex" @@ -278,7 +282,7 @@ attack_verb_simple = list("beep", "hug", "health analyze") squeak_override = list('sound/machines/twobeep_high.ogg' = 1) -/obj/item/toy/plush/skyrat/boom_bird +/obj/item/toy/plush/nova/boom_bird name = "boom bird plushie" desc = "This little bird plushie may look like a nerd, but you have the sneaking suspicion it might be valid! Why does your skin start to glow when you hug it?" icon_state = "plushie_dima" @@ -286,31 +290,31 @@ attack_verb_simple = list("punch", "explode on", "peep") squeak_override = list('sound/machines/sm/accent/delam/1.ogg' = 1) -/obj/item/toy/plush/skyrat/blue_cat +/obj/item/toy/plush/nova/blue_cat name = "blue cat plushie" desc = "A bright blue cat plush with neon pink hair, here to hand out kisses wherever kisses need be. Usually found near its home habitat, the tram." icon_state = "plushie_skyy" attack_verb_continuous = list("kisses", "nuzzles", "cuddles", "purrs against") attack_verb_simple = list("kiss", "nuzzle", "cuddle", "purr against") - squeak_override = list('modular_skyrat/modules/emotes/sound/voice/nya.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/voice/nya.ogg' = 1) -/obj/item/toy/plush/skyrat/igneous_synth +/obj/item/toy/plush/nova/igneous_synth name = "igneous synth plushie" desc = "Not actually made of igneous rock, giving this plush a hug will let you feel like you're being squeezed by the jaws of life!" icon_state = "plushie_granite" attack_verb_continuous = list("bleps", "SQUEEZES", "pies") attack_verb_simple = list("blep", "SQUEEZE", "pie") - squeak_override = list('modular_skyrat/modules/emotes/sound/emotes/twobeep.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/emotes/twobeep.ogg' = 1) -/obj/item/toy/plush/skyrat/edgy_bird +/obj/item/toy/plush/nova/edgy_bird name = "edgy birb plushie" desc = "An edgy plush of an edgy bird. You could swear it's teleporting to a different spot every time you look away..." icon_state = "plushie_koto" attack_verb_continuous = list("pecks", "teleports behind", "caws at") attack_verb_simple = list("peck", "teleport behind", "caw at") - squeak_override = list('modular_skyrat/modules/emotes/sound/voice/caw.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/voice/caw.ogg' = 1) -/obj/item/toy/plush/skyrat/tree_ferret +/obj/item/toy/plush/nova/tree_ferret name = "tree ferret plushy" desc = "This plush will always put on a smile to make your day as bright as the sun. Hugging him makes you feel warm and fuzzy. Comes with plush chemical vials to fix your non emotional traumas too!" icon_state = "plushie_sels" @@ -318,28 +322,28 @@ attack_verb_simple = list("hug", "cackle at", "health analyze") squeak_override = list('sound/effects/crunchybushwhack1.ogg' = 1) -/obj/item/toy/plush/skyrat/fox/mia +/obj/item/toy/plush/nova/fox/mia name = "Mia’s fox plushie" desc = "A small stuffed silver fox with a collar tag that says “Eavy” and a tiny bell in its fluffy tail." icon_state = "miafox" -/obj/item/toy/plush/skyrat/fox/kailyn +/obj/item/toy/plush/nova/fox/kailyn name = "teasable fox plushie" desc = "A familiar looking vixen in a peacekeeper attire, perfect for everyone who intends on venturing in the dark alone! There's a little tag which tells you to not boop its nose." icon_state = "teasefox" attack_verb_continuous = list("sneezes on", "detains", "tazes") attack_verb_simple = list("sneeze on", "detain", "taze") - squeak_override = list('modular_skyrat/modules/emotes/sound/emotes/female/female_sneeze.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/emotes/female/female_sneeze.ogg' = 1) -/obj/item/toy/plush/skyrat/xixi +/obj/item/toy/plush/nova/xixi name = "familiar looking harpy plushie" desc = "A plushie depicting a bright-red and oddly familiar looking harpy! The tag on the back lists distributor information and a tagline telling you how it'll add a little 'skree' to your daily grind." icon_state = "plushie_xixi" attack_verb_continuous = list("caws", "skrees", "pecks") attack_verb_simple = list("caw", "skree", "peck") - squeak_override = list('modular_skyrat/modules/emotes/sound/voice/peep_once.ogg' = 1,'modular_skyrat/modules/emotes/sound/voice/caw.ogg' = 1,'modular_skyrat/modules/emotes/sound/voice/bawk.ogg' = 1,'modular_skyrat/modules/emotes/sound/emotes/voxscream.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/voice/peep_once.ogg' = 1,'modular_nova/modules/emotes/sound/voice/caw.ogg' = 1,'modular_nova/modules/emotes/sound/voice/bawk.ogg' = 1,'modular_nova/modules/emotes/sound/emotes/voxscream.ogg' = 1) -/obj/item/toy/plush/skyrat/zapp +/obj/item/toy/plush/nova/zapp name = "Lil' Zapp" desc = "An authentic piece of primo Pwr Game merchandise! \ This cuddly companion is the perfect ornament to decorate your battlestation. \ @@ -370,15 +374,15 @@ "Cut it out, or I'm telling chat!", ) -/obj/item/toy/plush/skyrat/zapp/attackby(obj/item/attacking_item, mob/living/user, params) +/obj/item/toy/plush/nova/zapp/attackby(obj/item/attacking_item, mob/living/user, params) . = ..() say(pick(hit_response)) -/obj/item/toy/plush/skyrat/zapp/attack(mob/living/target, mob/living/user, params) +/obj/item/toy/plush/nova/zapp/attack(mob/living/target, mob/living/user, params) . = ..() say(pick(hit_response)) -/obj/item/toy/plush/skyrat/zapp/attack_self(mob/user) +/obj/item/toy/plush/nova/zapp/attack_self(mob/user) . = ..() var/turf/src_turf = get_turf(src) playsound(src_turf, 'sound/items/drink.ogg', 50, TRUE) @@ -408,7 +412,7 @@ calculate_height() set_reagent_color_for_liquid() -/obj/item/toy/plush/skyrat/rubi +/obj/item/toy/plush/nova/rubi name = "huggable bee plushie" desc = "It reminds you of a very, very, very huggable bee." icon_state = "plushie_rubi" @@ -417,7 +421,7 @@ attack_verb_continuous = list("hugs") attack_verb_simple = list("hug") -/obj/item/toy/plush/skyrat/rubi/attack_self(mob/user) +/obj/item/toy/plush/nova/rubi/attack_self(mob/user) . = ..() user.changeNext_move(CLICK_CD_MELEE) // To avoid spam, in some cases (sadly not all of them) var/mob/living/living_user = user @@ -430,119 +434,119 @@ mood_change = 0 timeout = 2 MINUTES -/obj/item/toy/plush/skyrat/roselia +/obj/item/toy/plush/nova/roselia name = "obscene sergal plushie" desc = "A plush recreation of a pink sergal. The chest is extremely padded and the small plush clothes are barely holding themselves together." icon_state = "plushie_roselia" attack_verb_continuous = list("hugs") attack_verb_simple = list("hug") - squeak_override = list('modular_skyrat/modules/emotes/sound/voice/merp.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/voice/merp.ogg' = 1) young = FALSE -/obj/item/toy/plush/skyrat/chunko +/obj/item/toy/plush/nova/chunko name = "chunko fop" desc = "A soulless creature that haunts your dreams." icon_state = "plushie_pfbonnie" var/responses = list("Do you fear death? Do you fear the world you live in? What 'God's so called infinite mercy is? A neverending life of constant and unending misery. Being forced to work and go on as millions, trillions suffer around you as you are either too powerless or too lazy to do anything? Is this worth living? Capitalism in overdrive, life in hell. Why?", "Hi!!", ) COOLDOWN_DECLARE(chunko_cooldown) -/obj/item/toy/plush/skyrat/chunko/attackby() +/obj/item/toy/plush/nova/chunko/attackby() . = ..() if(!COOLDOWN_FINISHED(src, chunko_cooldown)) return say(pick(responses)) COOLDOWN_START(src, chunko_cooldown, 2 SECONDS) -/obj/item/toy/plush/skyrat/chunko/attack() +/obj/item/toy/plush/nova/chunko/attack() . = ..() if(!COOLDOWN_FINISHED(src, chunko_cooldown)) return say(pick(responses)) COOLDOWN_START(src, chunko_cooldown, 2 SECONDS) -/obj/item/toy/plush/skyrat/chunko/bonnie +/obj/item/toy/plush/nova/chunko/bonnie name = "chunko fop blue bunny" desc = "An 'adorable', if big eyed rabbit girl. This one is blue. Produced by the Chunko Fop Company <b><i>TM</i></b>. Spits out various Rabbit facts of dubious validity." icon_state = "plushie_pfbonnie" gender = FEMALE attack_verb_continuous = list("pats", "hugs", "scolds", "pets") attack_verb_simple = list("pat", "hug", "scold", "pet") - squeak_override = list('sound/creatures/mousesqueek.ogg' = 1, 'modular_skyrat/modules/emotes/sound/voice/mothsqueak.ogg' = 1,) + squeak_override = list('sound/creatures/mousesqueek.ogg' = 1, 'modular_nova/modules/emotes/sound/voice/mothsqueak.ogg' = 1,) responses = list("Rabbits are prey animals and are therefore constantly aware of their surroundings.", "Things to jump up on (they like to be in high places)", "become a rabbit today!", "Be cunning and full of tricks...", "Subscription confirmed! Thank you for choosing RABBITFACTS +TM+!", "Holland Lops are a breed of rabbit originating in the Netherlands.", "Rabbits may need medication to keep themselves healthy, and that's ok! Make sure to take yours too!", "rabbits really liked this product", "A healthy rabbit diet includes fresh vegetables.", "Rabbits do not hibernate. Their schedules are much too busy.", "the rate of bunnies is measured by RPB (rabbits per bunny)", ) -/obj/item/toy/plush/skyrat/chunko/andrew +/obj/item/toy/plush/nova/chunko/andrew name = "chunko fop green and orange bunny" desc = "An 'adorable', if big eyed rabbit girl(?). This one is green and orange. Produced by the Chunko Fop Company <b><i>TM</i></b>. Spits out various Bunnies of dubious existance." icon_state = "plushie_pfandrew" gender = MALE attack_verb_continuous = list("pats", "hugs", "scolds", "pets") attack_verb_simple = list("pat", "hug", "scold", "pet") - squeak_override = list('sound/creatures/mousesqueek.ogg' = 1, 'modular_skyrat/modules/emotes/sound/voice/mothsqueak.ogg' = 1,) + squeak_override = list('sound/creatures/mousesqueek.ogg' = 1, 'modular_nova/modules/emotes/sound/voice/mothsqueak.ogg' = 1,) // All lowercase messages are intentional responses = list("bunny who you best pray you never encounter, lest you suffer a fate worse than death.", "this is a bunny!", "I wonder what would happen if you took bunnies, and combined them with rabbits, and merged their properties and characteristics. It's something to think about.", "If you're cold, they're cold. Give them the deed to your house.", "bunny that goes yeah! woo! yeah! woo! yeah! woo! yeah! woo! yeah! woo! yeah!", "the bunnies are beyond my comprehension", "it's a bunny thing, you wouldn't get it", "this bunny has an unfathomable power level", "%pull the string and I'll bink at you...I'm your bunny.", "Bunny (1954)", "the bunny that pulls the strings....", ) -/obj/item/toy/plush/skyrat/chunko/inessa +/obj/item/toy/plush/nova/chunko/inessa name = "chunko fop medical bear" desc = "An 'adorable', tired looking bear woman. This one produces fake smoke! Produced by the Chunko Fop Company <b><i>TM</i></b>. Spits out various Medical facts with a broken voicebox." icon_state = "plushie_pfinessa" gender = FEMALE attack_verb_continuous = list("slashes", "dissects", "yawns", "smokes") attack_verb_simple = list("slash", "dissect", "yawn", "smoke") - squeak_override = list('modular_skyrat/modules/emotes/sound/emotes/female/female_cough_3.ogg' = 1, 'modular_skyrat/modules/emotes/sound/emotes/female/female_cough_2.ogg' = 1, 'modular_skyrat/modules/emotes/sound/emotes/female/female_cough_1.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/emotes/female/female_cough_3.ogg' = 1, 'modular_nova/modules/emotes/sound/emotes/female/female_cough_2.ogg' = 1, 'modular_nova/modules/emotes/sound/emotes/female/female_cough_1.ogg' = 1) responses = list("The human body can survive three weeks without skiiiiiiiiiiin.", "The thigh bone is connected to the hip boooooooooone.", "Yeeeessss?", "Helloooooo.", "Don't be such a baby, ribs grow baaaaaaaaaack.",) // Donation reward for tobjv -/obj/item/toy/plush/skyrat/tesh +/obj/item/toy/plush/nova/tesh name = "Squish-Me-Tesh" desc = "Winner of Be Made Into A Plushy by ClownCo!" icon_state = "plushie_tobjv2" // Donation reward for tobjv -/obj/item/toy/plush/skyrat/immovable_rod +/obj/item/toy/plush/nova/immovable_rod name = "immovable rod" desc = "Realistic! But also squishy and certainly not as dangerous as its real counterpart." icon_state = "plushie_tobjv" -/obj/item/toy/plush/skyrat/immovable_rod/Bump(atom/clong) +/obj/item/toy/plush/nova/immovable_rod/Bump(atom/clong) . = ..() if(isliving(clong)) playsound(src, 'sound/effects/bang.ogg', 50, TRUE) return // Donation reward for gamerguy14948 -/obj/item/toy/plush/skyrat/voodoo +/obj/item/toy/plush/nova/voodoo name = "voodoo doll" desc = "A not so small voodoo doll made out of cut and sewn potato bags. It almost looks cute." icon_state = "plushie_gamerguy" // Donation reward for shyshadow -/obj/item/toy/plush/skyrat/plushie_winrow +/obj/item/toy/plush/nova/plushie_winrow name = "dark and brooding lizard plush" desc = "An almost intimidating black lizard plush, this one's got a little beret to come with it! Best not to separate the two. Its eyes shine with suggestion, no maidens?" icon_state = "plushie_shyshadow" // Donation reward for Dudewithatude -/obj/item/toy/plush/skyrat/plushie_star +/obj/item/toy/plush/nova/plushie_star name = "star angel plush" desc = "The plushie of a celestial in the known universe." icon_state = "plushie_star" gender = FEMALE - squeak_override = list('modular_skyrat/modules/emotes/sound/voice/trills.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/voice/trills.ogg' = 1) // Donation reward for SRQ -/obj/item/toy/plush/skyrat/plushie_chiara +/obj/item/toy/plush/nova/plushie_chiara name = "commanding fox plush" desc = "A large stuffed fox which radiates confidence and vigor from their emerald eyes." icon_state = "plushie_chiara" // Donation reward for Superlagg -/obj/item/toy/plush/skyrat/plushie_dan +/obj/item/toy/plush/nova/plushie_dan name = "comfy fox plush" desc = "A stuffed fox with an aura of endearment leaking from their soft exterior." icon_state = "plushie_dan" //Donation reward for KLB100 -/obj/item/toy/plush/skyrat/fox/plushie_jeanne +/obj/item/toy/plush/nova/fox/plushie_jeanne name = "masked roboticist plushie" desc = "A familiar snow white Vulpkanin plushie. This one appears to be wearing a mask obscuring their face." icon_state = "plushie_jeanne" @@ -550,13 +554,13 @@ attack_verb_simple = list("cuddle", "squish", "blush") //Donation reward for Dalao Azure -/obj/item/toy/plush/skyrat/plushie_azyre +/obj/item/toy/plush/nova/plushie_azyre name = "handsome chef plushie" desc = "A need to cook only rivaled by a hunger for fox tail." icon_state = "plushie_azyre" //Donation reward for Razurath -/obj/item/toy/plush/skyrat/plushie_razurath +/obj/item/toy/plush/nova/plushie_razurath name = "science shark plushie" desc = "A determined scientist with a hint of mischief in her smile." icon_state = "plush_scishark" @@ -565,88 +569,88 @@ squeak_override = list('sound/weapons/bite.ogg'=1) //Other donation reward for Razurath -/obj/item/toy/plush/skyrat/plushie_razurath/second +/obj/item/toy/plush/nova/plushie_razurath/second name = "dwarf shark plushie" desc = "Despite her height, the plushie regards you with keen and frankly unamused eyes; the look on her face, and the elegance of her little tiny coat tell you that she knows something you don't." icon_state = "plushie_nedilla" //Donation reward for October23 -/obj/item/toy/plush/skyrat/plushie_elofy +/obj/item/toy/plush/nova/plushie_elofy name = "bumbling wolfgirl plushie" desc = "A white-haired wolfgirl in a stylish red security skirt. Despite her scary cybernetic arm, she is soft to hug and only wishes to be praised and comforted." icon_state = "plush_lonie" attack_verb_continuous = list("snuggles", "nibbles", "awoos", "tail whaps") attack_verb_simple = list("snuggle", "nibble", "awoo", "tail whap") - squeak_override = list('modular_skyrat/modules/customization/game/objects/items/sound/merowr.ogg' = 1) + squeak_override = list('modular_nova/modules/customization/game/objects/items/sound/merowr.ogg' = 1) //Donation reward for syntax1112 -/obj/item/toy/plush/skyrat/plushie_syntax1112 +/obj/item/toy/plush/nova/plushie_syntax1112 name = "lop bunny plushie" desc = "A floppy-eared rabbit in marketable plushie form. Complete with an internal self-inflating squeaker device!" icon_state = "fuzz_bunny" attack_verb_continuous = list("nibbles", "squeaks", "nose twitches", "thumps", "whops") attack_verb_simple = list("nibble", "squeak", "nose twitch", "thump", "whop") - squeak_override = list('modular_skyrat/modules/customization/game/objects/items/sound/deerplush.ogg' = 1) + squeak_override = list('modular_nova/modules/customization/game/objects/items/sound/deerplush.ogg' = 1) // Donation reward for SomeRandomOwl -/obj/item/toy/plush/skyrat/snow_owl +/obj/item/toy/plush/nova/snow_owl name = "snowy owl plush" desc = "A very soft plush resembling a feathery and witch like owl who is known to frequent science and medical." icon_state = "plushie_owl" attack_verb_continuous = list("hoots", "screms", "hugs") attack_verb_simple = list("hoot", "screm", "hug") - squeak_override = list('modular_skyrat/modules/emotes/sound/voice/hoot.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/voice/hoot.ogg' = 1) // Donation reward for Jolly66 -/obj/item/toy/plush/skyrat/derg_plushie +/obj/item/toy/plush/nova/derg_plushie name = "wingless dragon plush" desc = "A cute green-and-yellow wingless dragon plushie! For what its worth, it does have a comically large tail. \ Comes with an additional paramedic cap." icon_state = "plushie_derg" attack_verb_continuous = list("wehs", "wehs softly", "stutters") attack_verb_simple = list("weh", "weh softly", "stutter") - squeak_override = list('modular_skyrat/modules/emotes/sound/voice/weh.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/voice/weh.ogg' = 1) // Donation reward for Gofawful5 -/obj/item/toy/plush/skyrat/tracy +/obj/item/toy/plush/nova/tracy name = "creature plushie" desc = "An astonishingly well-endowed catfox plushie... It seems content." icon_state = "plush_tracy" attack_verb_continuous = list("expands") attack_verb_simple = list("expand") - squeak_override = list('modular_skyrat/modules/customization/game/objects/items/sound/tracymrowr.ogg' = 1) + squeak_override = list('modular_nova/modules/customization/game/objects/items/sound/tracymrowr.ogg' = 1) gender = FEMALE //Donation reward for Frixit -/obj/item/toy/plush/skyrat/plushie_synthia +/obj/item/toy/plush/nova/plushie_synthia name = "adventurous synth plushie" desc = "This plush is perfect For adventures in space and in bed, a cuddly purple Synth, their scarf is extra soft!" icon_state = "plushie_synthia" attack_verb_continuous = list("blushes", "hugs", "whips") attack_verb_simple = list("blush", "hug", "whip") - squeak_override = list('modular_skyrat/modules/emotes/sound/emotes/twobeep.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/emotes/twobeep.ogg' = 1) //Donation reward for Kitsun -/obj/item/toy/plush/skyrat/jecca +/obj/item/toy/plush/nova/jecca name = "sexy snoodle plushie" desc = "For some reason, this plushie is rather shiny, with glistening, glittering scales, and its ruby colored eyes seem to be rather enticing and full of mischievous, lewd thoughts behind them." icon_state = "plushie_jecca" attack_verb_continuous = list("sighs") attack_verb_simple = list("sigh") - squeak_override = list('modular_skyrat/modules/emotes/sound/emotes/female/female_sigh.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/emotes/female/female_sigh.ogg' = 1) gender = FEMALE //Donation reward for BriareosBlue -/obj/item/toy/plush/skyrat/courier_synth +/obj/item/toy/plush/nova/courier_synth name = "courier synth plushie" desc = "This synth plushie looks about ready to deliver hugs and beeps straight to the heart! The tag seems to have an advertisement for a delivery company on it..." icon_state = "plushie_courier" attack_verb_continuous = list("delivers", "export scans", "dwoops", "bwuhs", "stamps") attack_verb_simple = list("deliver", "export scan", "dwoop", "bwuh", "stamp") - squeak_override = list('modular_skyrat/modules/emotes/sound/emotes/twobeep.ogg' = 1) + squeak_override = list('modular_nova/modules/emotes/sound/emotes/twobeep.ogg' = 1) //Donation reward for olirant -/obj/item/toy/plush/skyrat/plush_janiborg +/obj/item/toy/plush/nova/plush_janiborg name = "Friendly Janiborg Plush" desc = "A miniature omnidroid toy straight from the Lockstep Enterprises Corporation marketing department in handsome janitorial purple. Now with real squirting action!" icon_state = "plush_janiborg" diff --git a/modular_skyrat/modules/customization/game/objects/items/sound/deerplush.ogg b/modular_nova/modules/customization/game/objects/items/sound/deerplush.ogg similarity index 100% rename from modular_skyrat/modules/customization/game/objects/items/sound/deerplush.ogg rename to modular_nova/modules/customization/game/objects/items/sound/deerplush.ogg diff --git a/modular_skyrat/modules/customization/game/objects/items/sound/leaplush.ogg b/modular_nova/modules/customization/game/objects/items/sound/leaplush.ogg similarity index 100% rename from modular_skyrat/modules/customization/game/objects/items/sound/leaplush.ogg rename to modular_nova/modules/customization/game/objects/items/sound/leaplush.ogg diff --git a/modular_skyrat/modules/customization/game/objects/items/sound/merowr.ogg b/modular_nova/modules/customization/game/objects/items/sound/merowr.ogg similarity index 100% rename from modular_skyrat/modules/customization/game/objects/items/sound/merowr.ogg rename to modular_nova/modules/customization/game/objects/items/sound/merowr.ogg diff --git a/modular_skyrat/modules/customization/game/objects/items/sound/spiderplush.ogg b/modular_nova/modules/customization/game/objects/items/sound/spiderplush.ogg similarity index 100% rename from modular_skyrat/modules/customization/game/objects/items/sound/spiderplush.ogg rename to modular_nova/modules/customization/game/objects/items/sound/spiderplush.ogg diff --git a/modular_skyrat/modules/customization/game/objects/items/sound/tracymrowr.ogg b/modular_nova/modules/customization/game/objects/items/sound/tracymrowr.ogg similarity index 100% rename from modular_skyrat/modules/customization/game/objects/items/sound/tracymrowr.ogg rename to modular_nova/modules/customization/game/objects/items/sound/tracymrowr.ogg diff --git a/modular_nova/modules/customization/game/objects/items/storage/belt.dm b/modular_nova/modules/customization/game/objects/items/storage/belt.dm new file mode 100644 index 00000000000000..a4743022141ec7 --- /dev/null +++ b/modular_nova/modules/customization/game/objects/items/storage/belt.dm @@ -0,0 +1,40 @@ +/* +* Messenger belt bag +*/ + +/obj/item/storage/belt/mailbelt + name = "messenger belt bag" + desc = "A small bag with a belt, worn around the waist. It's just big enough to hold a small stack of letters. This one is postal blue, perfect for standing out!" + icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' + icon_state = "mailbelt" + worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' + worn_icon_state = "mailbelt" + equip_sound = 'sound/items/equip/toolbelt_equip.ogg' + +/obj/item/storage/belt/mailbelt/Initialize(mapload) + . = ..() + atom_storage.max_slots = 14 + atom_storage.numerical_stacking = TRUE + atom_storage.set_holdable(list( + /obj/item/mail, + /obj/item/mail/envelope, + /obj/item/paper + )) + +/obj/item/storage/belt/mailbelt/white + name = "white belt bag" + desc = "A small bag with a belt, worn around the waist. It's just big enough to hold a small stack of letters. This one is a pearly white." + icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' + icon_state = "mailbelt_white" + worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' + worn_icon_state = "mailbelt_white" + equip_sound = 'sound/items/equip/toolbelt_equip.ogg' + +/obj/item/storage/belt/mailbelt/leather + name = "leather belt bag" + desc = "A small bag with a belt, worn around the waist. It's just big enough to hold a small stack of letters. This one is made out of a synthetic leather blend." + icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' + icon_state = "mailbelt_leather" + worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' + worn_icon_state = "mailbelt_leather" + equip_sound = 'sound/items/equip/toolbelt_equip.ogg' diff --git a/modular_nova/modules/customization/game/objects/items/storage/rings.dm b/modular_nova/modules/customization/game/objects/items/storage/rings.dm new file mode 100644 index 00000000000000..6973b7a0edbbaf --- /dev/null +++ b/modular_nova/modules/customization/game/objects/items/storage/rings.dm @@ -0,0 +1,28 @@ +/* + * Ring Box + */ + +/obj/item/storage/fancy/ringbox + name = "ring box" + desc = "A tiny box covered in soft red felt made for holding rings." + icon = 'modular_nova/master_files/icons/obj/ring.dmi' + icon_state = "gold ringbox" + base_icon_state = "gold ringbox" + w_class = WEIGHT_CLASS_TINY + spawn_type = /obj/item/clothing/gloves/ring + spawn_count = 1 + +/obj/item/storage/fancy/ringbox/Initialize(mapload) + . = ..() + atom_storage.max_slots = 1 + atom_storage.can_hold = typecacheof(list(/obj/item/clothing/gloves/ring)) + +/obj/item/storage/fancy/ringbox/diamond + icon_state = "diamond ringbox" + base_icon_state = "diamond ringbox" + spawn_type = /obj/item/clothing/gloves/ring/diamond + +/obj/item/storage/fancy/ringbox/silver + icon_state = "silver ringbox" + base_icon_state = "silver ringbox" + spawn_type = /obj/item/clothing/gloves/ring/silver diff --git a/modular_skyrat/modules/customization/game/objects/items/tanks/n2_tanks.dm b/modular_nova/modules/customization/game/objects/items/tanks/n2_tanks.dm similarity index 78% rename from modular_skyrat/modules/customization/game/objects/items/tanks/n2_tanks.dm rename to modular_nova/modules/customization/game/objects/items/tanks/n2_tanks.dm index a31e89aaa083bb..81cada065ab5f0 100644 --- a/modular_skyrat/modules/customization/game/objects/items/tanks/n2_tanks.dm +++ b/modular_nova/modules/customization/game/objects/items/tanks/n2_tanks.dm @@ -4,7 +4,7 @@ /obj/item/tank/internals/nitrogen name = "nitrogen tank" - desc = "A tank of nitrogen. Designed specifically for Vox" + desc = "A small tank of nitrogen, for crew who don't breathe the standard air mix." icon_state = "oxygen_fr" force = 10 distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE @@ -18,10 +18,10 @@ air_contents.gases[/datum/gas/nitrogen][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) /obj/item/tank/internals/nitrogen/belt - icon = 'modular_skyrat/master_files/icons/obj/tank.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/belt.dmi' - lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/equipment/tanks_lefthand.dmi' - righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/equipment/tanks_righthand.dmi' + icon = 'modular_nova/master_files/icons/obj/tank.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/species/vox/belt.dmi' + lefthand_file = 'modular_nova/master_files/icons/mob/inhands/equipment/tanks_lefthand.dmi' + righthand_file = 'modular_nova/master_files/icons/mob/inhands/equipment/tanks_righthand.dmi' icon_state = "nitrogen_extended" inhand_icon_state = "nitrogen" slot_flags = ITEM_SLOT_BELT diff --git a/modular_skyrat/modules/customization/modules/client/augment/_augment.dm b/modular_nova/modules/customization/modules/client/augment/_augment.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/client/augment/_augment.dm rename to modular_nova/modules/customization/modules/client/augment/_augment.dm diff --git a/modular_skyrat/modules/customization/modules/client/augment/implants.dm b/modular_nova/modules/customization/modules/client/augment/implants.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/client/augment/implants.dm rename to modular_nova/modules/customization/modules/client/augment/implants.dm diff --git a/modular_nova/modules/customization/modules/client/augment/limbs.dm b/modular_nova/modules/customization/modules/client/augment/limbs.dm new file mode 100644 index 00000000000000..d8c68d5e873c9b --- /dev/null +++ b/modular_nova/modules/customization/modules/client/augment/limbs.dm @@ -0,0 +1,147 @@ +/datum/augment_item/limb + category = AUGMENT_CATEGORY_LIMBS + allowed_biotypes = MOB_ORGANIC|MOB_ROBOTIC + ///Hardcoded styles that can be chosen from and apply to limb, if it's true + var/uses_robotic_styles = TRUE + +/datum/augment_item/limb/apply(mob/living/carbon/human/augmented, character_setup = FALSE, datum/preferences/prefs) + if(character_setup) + //Cheaply "faking" the appearance of the prosthetic. Species code sets this back if it doesnt exist anymore + var/obj/item/bodypart/new_limb = path + var/body_zone = initial(new_limb.body_zone) + var/obj/item/bodypart/old_limb = augmented.get_bodypart(body_zone) + + old_limb.limb_id = initial(new_limb.limb_id) + old_limb.base_limb_id = initial(new_limb.limb_id) + old_limb.is_dimorphic = initial(new_limb.is_dimorphic) + + if(uses_robotic_styles && prefs.augment_limb_styles[slot]) + var/chosen_style = GLOB.robotic_styles_list[prefs.augment_limb_styles[slot]] + old_limb.set_icon_static(chosen_style) + old_limb.current_style = prefs.augment_limb_styles[slot] + else + old_limb.set_icon_static(initial(new_limb.icon)) + old_limb.should_draw_greyscale = FALSE + + return body_zone + else + var/obj/item/bodypart/new_limb = new path(augmented) + var/obj/item/bodypart/old_limb = augmented.get_bodypart(new_limb.body_zone) + if(uses_robotic_styles && prefs.augment_limb_styles[slot]) + var/chosen_style = GLOB.robotic_styles_list[prefs.augment_limb_styles[slot]] + new_limb.set_icon_static(chosen_style) + new_limb.current_style = prefs.augment_limb_styles[slot] + new_limb.replace_limb(augmented, special = TRUE) + qdel(old_limb) + +//HEADS +/datum/augment_item/limb/head + slot = AUGMENT_SLOT_HEAD + +/datum/augment_item/limb/head/cyborg + name = "Cyborg head" + path = /obj/item/bodypart/head/robot/weak + +//CHESTS +/datum/augment_item/limb/chest + slot = AUGMENT_SLOT_CHEST + +/datum/augment_item/limb/chest/cyborg + name = "Cyborg chest" + path = /obj/item/bodypart/chest/robot/weak + +//LEFT ARMS +/datum/augment_item/limb/l_arm + slot = AUGMENT_SLOT_L_ARM + +/datum/augment_item/limb/l_arm/prosthetic + name = "Prosthetic left arm" + path = /obj/item/bodypart/arm/left/robot/surplus + cost = -1 + +/datum/augment_item/limb/l_arm/cyborg + name = "Cyborg left arm" + path = /obj/item/bodypart/arm/left/robot/weak + +/datum/augment_item/limb/l_arm/plasmaman + name = "Plasmaman left arm" + path = /obj/item/bodypart/arm/left/plasmaman + uses_robotic_styles = FALSE + +/datum/augment_item/limb/l_arm/self_destruct + name = "No Left Arm" + path = /obj/item/bodypart/arm/left/self_destruct + cost = -3 + uses_robotic_styles = FALSE + +//RIGHT ARMS +/datum/augment_item/limb/r_arm + slot = AUGMENT_SLOT_R_ARM + +/datum/augment_item/limb/r_arm/prosthetic + name = "Prosthetic right arm" + path = /obj/item/bodypart/arm/right/robot/surplus + cost = -1 + +/datum/augment_item/limb/r_arm/cyborg + name = "Cyborg right arm" + path = /obj/item/bodypart/arm/right/robot/weak + +/datum/augment_item/limb/r_arm/plasmaman + name = "Plasmaman right arm" + path = /obj/item/bodypart/arm/right/plasmaman + uses_robotic_styles = FALSE + +/datum/augment_item/limb/r_arm/self_destruct + name = "No Right Arm" + path = /obj/item/bodypart/arm/right/self_destruct + cost = -3 + uses_robotic_styles = FALSE + +//LEFT LEGS +/datum/augment_item/limb/l_leg + slot = AUGMENT_SLOT_L_LEG + +/datum/augment_item/limb/l_leg/prosthetic + name = "Prosthetic left leg" + path = /obj/item/bodypart/leg/left/robot/surplus + cost = -1 + +/datum/augment_item/limb/l_leg/cyborg + name = "Cyborg left leg" + path = /obj/item/bodypart/leg/left/robot/weak + +/datum/augment_item/limb/l_leg/plasmaman + name = "Plasmaman left leg" + path = /obj/item/bodypart/leg/left/plasmaman + uses_robotic_styles = FALSE + +/datum/augment_item/limb/l_leg/self_destruct + name = "No Left Leg" + path = /obj/item/bodypart/leg/left/self_destruct + cost = -3 + uses_robotic_styles = FALSE + +//RIGHT LEGS +/datum/augment_item/limb/r_leg + slot = AUGMENT_SLOT_R_LEG + +/datum/augment_item/limb/r_leg/prosthetic + name = "Prosthetic right leg" + path = /obj/item/bodypart/leg/right/robot/surplus + cost = -1 + +/datum/augment_item/limb/r_leg/cyborg + name = "Cyborg right leg" + path = /obj/item/bodypart/leg/right/robot/weak + +/datum/augment_item/limb/r_leg/plasmaman + name = "Plasmaman right leg" + path = /obj/item/bodypart/leg/right/plasmaman + uses_robotic_styles = FALSE + +/datum/augment_item/limb/r_leg/self_destruct + name = "No Right Leg" + path = /obj/item/bodypart/leg/right/self_destruct + cost = -3 + uses_robotic_styles = FALSE diff --git a/modular_skyrat/modules/customization/modules/client/augment/organs.dm b/modular_nova/modules/customization/modules/client/augment/organs.dm similarity index 91% rename from modular_skyrat/modules/customization/modules/client/augment/organs.dm rename to modular_nova/modules/customization/modules/client/augment/organs.dm index 83c1c337221045..9bc2579e378cf5 100644 --- a/modular_skyrat/modules/customization/modules/client/augment/organs.dm +++ b/modular_nova/modules/customization/modules/client/augment/organs.dm @@ -4,9 +4,11 @@ /datum/augment_item/organ/apply(mob/living/carbon/human/human_holder, character_setup = FALSE, datum/preferences/prefs) if(character_setup) return + + var/obj/item/organ/organ_path = path // cast this to an organ so we can get the slot from it using initial() var/obj/item/organ/new_organ = new path() - new_organ.copy_traits_from(human_holder.get_organ_slot(ORGAN_SLOT_TONGUE)) - new_organ.Insert(human_holder, special = TRUE, drop_if_replaced = FALSE) + new_organ.copy_traits_from(human_holder.get_organ_slot(initial(organ_path.slot))) + new_organ.Insert(human_holder, special = TRUE, movement_flags = DELETE_IF_REPLACED) //HEARTS /datum/augment_item/organ/heart diff --git a/modular_skyrat/modules/customization/modules/client/preferences.dm b/modular_nova/modules/customization/modules/client/preferences.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/client/preferences.dm rename to modular_nova/modules/customization/modules/client/preferences.dm diff --git a/modular_nova/modules/customization/modules/clothing/accessories.dm b/modular_nova/modules/customization/modules/clothing/accessories.dm new file mode 100644 index 00000000000000..ae078ea7ebbafc --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/accessories.dm @@ -0,0 +1,32 @@ +/obj/item/clothing/accessory/skullcodpiece/armourless + armor_type = /datum/armor/none + +/obj/item/clothing/accessory/talisman/armourless + armor_type = /datum/armor/none + +/obj/item/clothing/accessory/skilt/armourless + armor_type = /datum/armor/none + +/obj/item/clothing/accessory/armband/cargo/nonsec + name = "brown armband" + desc = "An armband, worn to signify proficiency in a skill or association with a department. This one is brown." + +/obj/item/clothing/accessory/armband/engine/nonsec + name = "orange armband" + desc = "An armband, worn to signify proficiency in a skill or association with a department. This one is orange with a reflective strip!" + +/obj/item/clothing/accessory/armband/science/nonsec + name = "purple armband" + desc = "An armband, worn to signify proficiency in a skill or association with a department. This one is purple." + +/obj/item/clothing/accessory/armband/hydro/nonsec + name = "green-blue armband" + desc = "An armband, worn to signify proficiency in a skill or association with a department. This one is green and blue." + +/obj/item/clothing/accessory/armband/med/nonsec + name = "white armband" + desc = "An armband, worn to signify proficiency in a skill or association with a department. This one is white." + +/obj/item/clothing/accessory/armband/medblue/nonsec + name = "white-blue armband" + desc = "An armband, worn to signify proficiency in a skill or association with a department. This one is white and blue." diff --git a/modular_nova/modules/customization/modules/clothing/ears/ears.dm b/modular_nova/modules/customization/modules/clothing/ears/ears.dm new file mode 100644 index 00000000000000..6dd0039dc51ae0 --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/ears/ears.dm @@ -0,0 +1,35 @@ +/obj/item/clothing/ears/headphones + name = "headphones" + desc = "Unce unce unce unce. Boop!" + icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/ears.dmi' + icon_state = "headphones" + inhand_icon_state = "headphones" + slot_flags = ITEM_SLOT_EARS | ITEM_SLOT_HEAD | ITEM_SLOT_NECK //Fluff item, put it whereever you want! + actions_types = list(/datum/action/item_action/toggle_headphones) + var/headphones_on = FALSE + custom_price = 60 + +/obj/item/clothing/ears/headphones/Initialize(mapload) + . = ..() + update_icon() + AddElement(/datum/element/update_icon_updates_onmob) + +/obj/item/clothing/ears/headphones/update_icon_state() + . = ..() + icon_state = "[initial(icon_state)]_[headphones_on? "on" : "off"]" + inhand_icon_state = "[initial(inhand_icon_state)]_[headphones_on? "on" : "off"]" + +/obj/item/clothing/ears/headphones/proc/toggle(owner) + headphones_on = !headphones_on + update_icon() + to_chat(owner, span_notice("You turn the music [headphones_on? "on. Untz Untz Untz!" : "off."]")) + +/datum/action/item_action/toggle_headphones + name = "Toggle Headphones" + desc = "UNTZ UNTZ UNTZ" + +/datum/action/item_action/toggle_headphones/Trigger(trigger_flags) + var/obj/item/clothing/ears/headphones/H = target + if(istype(H)) + H.toggle(owner) diff --git a/modular_nova/modules/customization/modules/clothing/glasses/glasses.dm b/modular_nova/modules/customization/modules/clothing/glasses/glasses.dm new file mode 100644 index 00000000000000..bc0920f16757ba --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/glasses/glasses.dm @@ -0,0 +1,86 @@ +/obj/item/clothing/glasses //Code to let you switch the side your eyepatch is on! Woo! Just an explanation, this is added to the base glasses so it works on eyepatch-huds too + var/can_switch_eye = FALSE //Having this default to false means that its easy to make sure this doesnt apply to any pre-existing items + + +/obj/item/clothing/glasses/examine(mob/user) + . = ..() + if(can_switch_eye) + . += "Use in hands to wear it over your [icon_state == base_icon_state ? "left" : "right"] eye." + + +/* ---------- Items Below ----------*/ + +/obj/item/clothing/glasses/eyepatch //Re-defined here for ease with the left/right switch + icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi' + icon_state = "eyepatch" + base_icon_state = "eyepatch" + can_switch_eye = TRUE + +/obj/item/clothing/glasses/eyepatch/wrap + name = "eye wrap" + desc = "A glorified bandage. At least this one's actually made for your head..." + icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi' + icon_state = "eyewrap" + base_icon_state = "eyewrap" + +/obj/item/clothing/glasses/eyepatch/white + name = "white eyepatch" + desc = "This is what happens when a pirate gets a PhD." + icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi' + icon_state = "eyepatch_white" + base_icon_state = "eyepatch_white" + +///GLASSSES +/obj/item/clothing/glasses/thin + name = "thin glasses" + desc = "Often seen staring down at someone taking a book." + worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi' + icon_state = "glasses_thin" + inhand_icon_state = "glasses" + clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED) + +/obj/item/clothing/glasses/regular/betterunshit + name = "modern glasses" + desc = "After Nerd. Co went bankrupt for tax evasion and invasion, they were bought out by Dork.Co, who revamped their classic design." + worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi' + icon_state = "glasses_alt" + inhand_icon_state = "glasses" + clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED) + +/obj/item/clothing/glasses/kim + name = "binoclard lenses" + desc = "Stylish round lenses subtly shaded for your protection and criminal discomfort." + worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi' + icon_state = "binoclard_lenses" + inhand_icon_state = "glasses" + clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED) + +/obj/item/clothing/glasses/trickblindfold/hamburg + name = "thief visor" + desc = "Perfect for stealing hamburgers from innocent multinational capitalist monopolies." + worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi' + icon_state = "thiefmask" + +///GOGGLES +/obj/item/clothing/glasses/biker + name = "biker goggles" + desc = "Brown leather riding gear, You can leave, just give us the gas." + worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi' + icon_state = "biker" + inhand_icon_state = "welding-g" + clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED) + +// Like sunglasses, but without any protection +/obj/item/clothing/glasses/fake_sunglasses + name = "low-UV sunglasses" + desc = "A cheaper brand of sunglasses rated for much lower UV levels. Offers the user no protection against bright lights." + icon_state = "sun" + inhand_icon_state = "sunglasses" diff --git a/modular_skyrat/modules/customization/modules/clothing/glasses/hud.dm b/modular_nova/modules/customization/modules/clothing/glasses/hud.dm similarity index 88% rename from modular_skyrat/modules/customization/modules/clothing/glasses/hud.dm rename to modular_nova/modules/customization/modules/clothing/glasses/hud.dm index 7cd1b38c6be600..03045a55139cb0 100644 --- a/modular_skyrat/modules/customization/modules/clothing/glasses/hud.dm +++ b/modular_nova/modules/customization/modules/clothing/glasses/hud.dm @@ -1,13 +1,13 @@ /obj/item/clothing/glasses/hud/eyepatch - name = "eyepatch HUD" + name = "HUD eyepatch" desc = "A simple HUD designed to interface with optical nerves of a lost eye. This one seems busted." - icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi' icon_state = "hudpatch" base_icon_state = "hudpatch" inhand_icon_state = "sunhudmed" uses_advanced_reskins = TRUE - can_switch_eye = TRUE //See modular_skyrat\modules\customization\modules\clothing\glasses\glasses.dm + can_switch_eye = TRUE //See modular_nova\modules\customization\modules\clothing\glasses\glasses.dm actions_types = list(/datum/action/item_action/flip) @@ -18,10 +18,10 @@ /obj/item/clothing/glasses/hud/eyepatch/sec - name = "security eyepatch HUD" + name = "security HUD eyepatch" desc = "Lost your eye beating an innocent clown? Thankfully your corporate overlords have made something to make up for this. May not do well against flashes." hud_type = DATA_HUD_SECURITY_ADVANCED - hud_trait = TRAIT_SECURITY_HUD + clothing_traits = list(TRAIT_SECURITY_HUD) glass_colour_type = /datum/client_colour/glass_colour/blue unique_reskin = list( @@ -35,12 +35,12 @@ ) ) /obj/item/clothing/glasses/hud/eyepatch/med - name = "medical eyepatch HUD" + name = "medical HUD eyepatch" desc = "Do no harm, maybe harm has befell to you, or your poor eyeball, thankfully there's a way to continue your oath, thankfully it didn't mention sleepdarts or monkey men." icon_state = "medpatch" base_icon_state = "medpatch" hud_type = DATA_HUD_MEDICAL_ADVANCED - hud_trait = TRAIT_MEDICAL_HUD + clothing_traits = list(TRAIT_MEDICAL_HUD) glass_colour_type = /datum/client_colour/glass_colour/lightblue unique_reskin = list( @@ -55,7 +55,7 @@ ) /obj/item/clothing/glasses/hud/eyepatch/meson - name = "mesons eyepatch HUD" + name = "mesons HUD eyepatch" desc = "For those that only want to go half insane when staring at the supermatter." icon_state = "mesonpatch" base_icon_state = "mesonpatch" @@ -77,12 +77,12 @@ ) /obj/item/clothing/glasses/hud/eyepatch/diagnostic - name = "diagnostic eyepatch HUD" + name = "diagnostic HUD eyepatch" desc = "Lost your eyeball to a rogue borg? Dare to tell a Dogborg to do it's job? Got bored? Whatever the reason, this bit of tech will help you still repair borgs, they'll never need it since they usually do it themselves, but its the thought that counts." icon_state = "robopatch" base_icon_state = "robopatch" hud_type = DATA_HUD_DIAGNOSTIC_BASIC - hud_trait = TRAIT_DIAGNOSTIC_HUD + clothing_traits = list(TRAIT_DIAGNOSTIC_HUD) glass_colour_type = /datum/client_colour/glass_colour/lightorange unique_reskin = list( @@ -97,7 +97,7 @@ ) /obj/item/clothing/glasses/hud/eyepatch/sci - name = "science eyepatch HUD" + name = "science HUD eyepatch" desc = "Every few years, the aspiring mad scientist says to themselves 'I've got the castle, the evil laugh and equipment, but what I need is a look', thankfully, Dr. Galox has already covered that for you dear friend - while it doesn't do much beyond scan chemicals, what it lacks in use it makes up for in style." icon_state = "scipatch" base_icon_state = "scipatch" @@ -119,8 +119,8 @@ /obj/item/clothing/glasses/trickblindfold/obsolete name = "obsolete fake blindfold" desc = "An ornate fake blindfold, devoid of any electronics. It's belived to be originally worn by members of bygone military force that sought to protect humanity." - icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi' icon_state = "obsoletefold" base_icon_state = "obsoletefold" can_switch_eye = TRUE diff --git a/modular_nova/modules/customization/modules/clothing/hands/hands.dm b/modular_nova/modules/customization/modules/clothing/hands/hands.dm new file mode 100644 index 00000000000000..1daa85fa65e631 --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/hands/hands.dm @@ -0,0 +1,58 @@ +/obj/item/clothing/gloves/evening + icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi' + name = "evening gloves" + desc = "Thin, pretty gloves intended for use in regal feminine attire, but knowing Space China these are just for some maid fetish." + icon_state = "evening" + strip_delay = 40 + equip_delay_other = 20 + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + +/obj/item/clothing/gloves/kim + icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi' + name = "aerostatic gloves" + desc = "Vivid red gloves that exude a mysterious style, sadly not the best for gardening, or getting bodies out of trees." + icon_state = "aerostatic_gloves" + +/obj/item/clothing/gloves/military + icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi' + name = "military gloves" + desc = "Tactical gloves made for military personnel, they are thin to allow easy operation of most firearms." + icon_state = "military_gloves" + siemens_coefficient = 0.4 + strip_delay = 60 + equip_delay_other = 60 + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT + resistance_flags = NONE + +/obj/item/clothing/gloves/bracer/wraps + name = "cloth arm wraps" + desc = "Cloth bracers, the colour all left up to the choice of the wearer." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/gloves.dmi' + icon_state = "arm_wraps" + inhand_icon_state = "greyscale_gloves" + greyscale_config = /datum/greyscale_config/armwraps + greyscale_config_worn = /datum/greyscale_config/armwraps/worn + greyscale_colors = "#FFFFFF" + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/gloves + worn_icon_teshari = TESHARI_HANDS_ICON + +/obj/item/clothing/gloves/maid_arm_covers + name = "maid arm covers" + desc = "Maid in China." + icon_state = "maid_arm_covers" + greyscale_config = /datum/greyscale_config/maid_arm_covers + greyscale_config_worn = /datum/greyscale_config/maid_arm_covers/worn + greyscale_config_inhand_left = null + greyscale_config_inhand_right = null + greyscale_colors = "#7b9ab5#edf9ff" + flags_1 = IS_PLAYER_COLORABLE_1 + diff --git a/modular_nova/modules/customization/modules/clothing/hands/rings.dm b/modular_nova/modules/customization/modules/clothing/hands/rings.dm new file mode 100644 index 00000000000000..4a615062f8dad1 --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/hands/rings.dm @@ -0,0 +1,33 @@ +/obj/item/clothing/gloves/ring + icon = 'modular_nova/master_files/icons/obj/ring.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi' + name = "gold ring" + desc = "A tiny gold ring, sized to wrap around a finger." + gender = NEUTER + w_class = WEIGHT_CLASS_TINY + icon_state = "ringgold" + inhand_icon_state = null + worn_icon_state = "gring" + body_parts_covered = 0 + strip_delay = 4 SECONDS + clothing_traits = list(TRAIT_FINGERPRINT_PASSTHROUGH) + +/obj/item/clothing/gloves/ring/suicide_act(mob/living/carbon/user) + user.visible_message(span_suicide("\[user] is putting the [src] in [user.p_their()] mouth! It looks like [user] is trying to choke on the [src]!")) + return OXYLOSS + + +/obj/item/clothing/gloves/ring/diamond + name = "diamond ring" + desc = "An expensive ring, studded with a diamond. Cultures have used these rings in courtship for a millenia." + icon_state = "ringdiamond" + worn_icon_state = "dring" + +/obj/item/clothing/gloves/ring/diamond/attack_self(mob/user) + user.visible_message(span_warning("\The [user] gets down on one knee, presenting \the [src]."),span_warning("You get down on one knee, presenting \the [src].")) + +/obj/item/clothing/gloves/ring/silver + name = "silver ring" + desc = "A tiny silver ring, sized to wrap around a finger." + icon_state = "ringsilver" + worn_icon_state = "sring" diff --git a/modular_nova/modules/customization/modules/clothing/head/costume.dm b/modular_nova/modules/customization/modules/clothing/head/costume.dm new file mode 100644 index 00000000000000..ed3ebe4dce9e21 --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/head/costume.dm @@ -0,0 +1,118 @@ +/obj/item/clothing/head/costume/nova + icon = 'modular_nova/master_files/icons/obj/clothing/head/costume.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/costume.dmi' + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + dog_fashion = null + +/obj/item/clothing/head/costume/nova/maid + name = "maid headband" + desc = "Maid in China." + icon_state = "maid" + +/obj/item/clothing/head/costume/nova/papakha + name = "papakha" + desc = "A big wooly clump of fur designed to go on your head." + icon_state = "papakha" + cold_protection = HEAD + min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + +/obj/item/clothing/head/costume/nova/papakha/white + icon_state = "papakha_white" + +/obj/item/clothing/head/costume/nova/flowerpin + name = "flower pin" + desc = "A small, colourable flower pin" + icon_state = "flowerpin" + greyscale_config = /datum/greyscale_config/flowerpin + greyscale_config_worn = /datum/greyscale_config/flowerpin/worn + greyscale_colors = "#FF0000" + flags_1 = IS_PLAYER_COLORABLE_1 + w_class = WEIGHT_CLASS_SMALL + +/obj/item/clothing/head/costume/nova/christmas + name = "christmas hat" + desc = "How festive!" + icon_state = "christmas" + +/obj/item/clothing/head/costume/nova/christmas/green + icon_state = "christmas_g" + +/obj/item/clothing/head/costume/nova/en //One of the two parts of E-N's butchering + name = "E-N suit head" + icon_state = "enhead" + supports_variations_flags = NONE + +//Ushankas +//These have to be subtypes of TG's ushanka to inherit the toggleability +/obj/item/clothing/head/costume/ushanka/sec + icon = 'modular_nova/master_files/icons/obj/clothing/head/costume.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/costume.dmi' + name = "security ushanka" + desc = "A warm and comfortable ushanka, dyed with 'all natural flavors' according to the tag." + icon_state = "ushankablue" + inhand_icon_state = "rus_ushanka" + upsprite = "ushankablueup" + downsprite = "ushankablue" + armor_type = /datum/armor/head_helmet + +//Pelts +//Not made into a subtype of /costume but stored in the same file +/obj/item/clothing/head/pelt + icon = 'modular_nova/master_files/icons/obj/clothing/head/costume.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/costume.dmi' + name = "bear pelt" + desc = "A luxurious bear pelt, good to keep warm in winter. Or to sleep through it." + icon_state = "bearpelt_brown" + inhand_icon_state = "cowboy_hat_brown" + cold_protection = CHEST|HEAD + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + +/obj/item/clothing/head/pelt/black + icon_state = "bearpelt_black" + inhand_icon_state = "cowboy_hat_black" + +/obj/item/clothing/head/pelt/white + icon_state = "bearpelt_white" + inhand_icon_state = "cowboy_hat_white" + +/obj/item/clothing/head/pelt/tiger + name = "shiny tiger pelt" + desc = "A vibrant tiger pelt, particularly fabulous." + icon_state = "tigerpelt_shiny" + inhand_icon_state = "cowboy_hat_grey" + +/obj/item/clothing/head/pelt/snow_tiger + name = "snow tiger pelt" + desc = "A pelt of a less vibrant tiger, but rather warm." + icon_state = "tigerpelt_snow" + inhand_icon_state = "cowboy_hat_white" + +/obj/item/clothing/head/pelt/pink_tiger + name = "pink tiger pelt" + desc = "A particularly vibrant tiger pelt, for those who want to be the most fabulous at parties." + icon_state = "tigerpelt_pink" + inhand_icon_state = "cowboy_hat_red" + +/obj/item/clothing/head/pelt/wolf + name = "wolf pelt" + desc = "A fuzzy wolf pelt that demands respect as a hunter... assuming it wasn't just purchased, that is, for all the glory but none of the credit." + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/pelt_big.dmi' + icon_state = "wolfpelt_brown" + +/obj/item/clothing/head/pelt/wolf/black + icon_state = "wolfpelt_gray" + inhand_icon_state = "cowboy_hat_grey" + +/obj/item/clothing/head/pelt/wolf/white + icon_state = "wolfpelt_white" + inhand_icon_state = "cowboy_hat_white" +//End Pelts + +/obj/item/clothing/head/maid_headband + name = "maid headband" + desc = "Just like from one of those Chinese cartoons!" + icon_state = "maid_headband" + greyscale_config = /datum/greyscale_config/maid_headband + greyscale_config_worn = /datum/greyscale_config/maid_headband/worn + greyscale_colors = "#edf9ff" + flags_1 = IS_PLAYER_COLORABLE_1 diff --git a/modular_nova/modules/customization/modules/clothing/head/head.dm b/modular_nova/modules/customization/modules/clothing/head/head.dm new file mode 100644 index 00000000000000..b25d4a4e01d686 --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/head/head.dm @@ -0,0 +1,257 @@ +/obj/item/clothing/head/hats/flakhelm //Actually the M1 Helmet + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' + name = "flak helmet" + icon_state = "m1helm" + inhand_icon_state = "helmet" + armor_type = /datum/armor/hats_flakhelm + desc = "A dilapidated helmet used in ancient wars. This one is brittle and essentially useless. An ace of spades is tucked into the band around the outer shell." + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + +/datum/armor/hats_flakhelm + bomb = 0.1 + fire = -10 + acid = -15 + wound = 1 + +/obj/item/clothing/head/hats/flakhelm/Initialize(mapload) + . = ..() + + create_storage(storage_type = /datum/storage/pockets/tiny/spacenam) + +/datum/storage/pockets/tiny/spacenam + attack_hand_interact = TRUE //So you can actually see what you stuff in there + +//Cyberpunk PI Costume - Sprites from Eris +/obj/item/clothing/head/fedora/det_hat/cybergoggles //Subset of detective fedora so that detectives dont have to sacrifice candycorns for style + name = "type-34P semi-enclosed headwear" + desc = "A popular helmet used by certain law enforcement agencies. It has minor armor plating and a neo-laminated fiber lining." + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' + icon_state = "cyberpunkgoggle" + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + +/obj/item/clothing/head/fedora/det_hat/cybergoggles/civilian //Actually civilian with no armor for drip purposes only + name = "type-34C semi-enclosed headwear" + desc = "The civilian model of a popular helmet used by certain law enforcement agencies. It has no armor plating." + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' + icon_state = "cyberpunkgoggle" + armor_type = /datum/armor/none + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + +/obj/item/clothing/head/hats/intern/developer + name = "intern beancap" + +/obj/item/clothing/head/beret/sec/navywarden/syndicate + name = "master at arms' beret" + desc = "Surprisingly stylish, if you lived in a silent impressionist film." + greyscale_config = /datum/greyscale_config/beret_badge + greyscale_config_worn = /datum/greyscale_config/beret_badge/worn + greyscale_colors = "#353535#AAAAAA" + icon_state = "beret_badge" + armor_type = /datum/armor/navywarden_syndicate + strip_delay = 60 + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + +/datum/armor/navywarden_syndicate + melee = 40 + bullet = 30 + laser = 30 + energy = 40 + bomb = 25 + fire = 30 + acid = 50 + wound = 6 + +/obj/item/clothing/head/colourable_flatcap + name = "colourable flat cap" + desc = "You in the computers son? You work the computers?" + icon_state = "flatcap" + greyscale_config = /datum/greyscale_config/flatcap + greyscale_config_worn = /datum/greyscale_config/flatcap/worn + greyscale_colors = "#79684c" + flags_1 = IS_PLAYER_COLORABLE_1 + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + +/obj/item/clothing/head/hats/imperial + name = "grey naval officer cap" + desc = "A grey naval cap with a silver disk in the center." + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' + icon_state = "impcom" + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + +/obj/item/clothing/head/hats/imperial/grey + name = "dark grey naval officer cap" + desc = "A dark grey naval cap with a silver disk in the center." + icon_state = "impcommand" + +/obj/item/clothing/head/hats/imperial/red + name = "red naval officer cap" + desc = "A red naval cap with a silver disk in the center." + icon_state = "impcap_red" + +/obj/item/clothing/head/hats/imperial/white + name = "white naval officer cap" + desc = "A white naval cap with a silver disk in the center." + icon_state = "impcap" + +/obj/item/clothing/head/hats/imperial/cap + name = "captain's naval officer cap" + desc = "A white naval cap with a silver disk in the center." + icon_state = "impcap" + +/obj/item/clothing/head/hats/imperial/hop + name = "head of personnel's naval officer cap" + desc = "An olive naval cap with a silver disk in the center." + icon_state = "imphop" + +/obj/item/clothing/head/hats/imperial/hos + name = "head of security's naval officer cap" + desc = "A tar black naval cap with a silver disk in the center." + icon_state = "imphos" + armor_type = /datum/armor/hats_hos + +/obj/item/clothing/head/hats/imperial/cmo + name = "chief medical officer's naval cap" + desc = "A teal naval cap with a silver disk in the center." + icon_state = "impcmo" + +/obj/item/clothing/head/hats/imperial/ce + name = "chief engineer's blast helmet" + desc = "Despite seeming like it's made of metal, it's actually a very cheap plastic.." + armor_type = /datum/armor/imperial_ce + clothing_flags = STOPSPRESSUREDAMAGE + heat_protection = HEAD + max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT + cold_protection = HEAD + min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + icon_state = "impce" + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + + +/datum/armor/imperial_ce + melee = 15 + bullet = 5 + laser = 20 + energy = 10 + bomb = 20 + bio = 10 + fire = 100 + acid = 50 + wound = 10 + +/obj/item/clothing/head/hats/imperial/helmet + name = "blast helmet" + desc = "A sharp helmet with some goggles on the top. Unfortunately, both those and the helmet itself are made of flimsy plastic." //No armor moment + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' + icon_state = "blast_helmet" + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + +/obj/item/clothing/head/hats/imperial/helmet/Initialize(mapload) + . = ..() + AddComponent(/datum/component/toggle_icon, "goggles") + +/obj/item/clothing/head/soft/yankee + name = "fashionable baseball cap" + desc = "Rimmed and brimmed." + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' + icon_state = "yankeesoft" + soft_type = "yankee" + dog_fashion = /datum/dog_fashion/head/yankee + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + +/obj/item/clothing/head/soft/yankee/rimless + name = "rimless fashionable baseball cap" + desc = "Rimless for her pleasure." + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' + icon_state = "yankeenobrimsoft" + soft_type = "yankeenobrim" + +/obj/item/clothing/head/fedora/brown //Fedora without detective's candy corn gimmick + name = "brown fedora" + icon_state = "detective" + inhand_icon_state = "det_hat" + +/obj/item/clothing/head/standalone_hood + name = "hood" + desc = "A hood with a bit of support around the neck so it actually stays in place, for all those times you want a hood without the coat." + icon = 'modular_nova/modules/GAGS/icons/head/head.dmi' + worn_icon = 'modular_nova/modules/GAGS/icons/head/head.dmi' + worn_icon_teshari = 'modular_nova/modules/GAGS/icons/head/head_teshari.dmi' + icon_state = "hood" + body_parts_covered = HEAD + cold_protection = HEAD + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + flags_inv = HIDEEARS|HIDEHAIR + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + flags_1 = IS_PLAYER_COLORABLE_1 + greyscale_colors = "#4e4a43#F1F1F1" + greyscale_config = /datum/greyscale_config/standalone_hood + greyscale_config_worn = /datum/greyscale_config/standalone_hood/worn + greyscale_config_worn_teshari = /datum/greyscale_config/standalone_hood/worn/teshari + greyscale_config_worn_better_vox = /datum/greyscale_config/standalone_hood/worn/newvox + greyscale_config_worn_vox = /datum/greyscale_config/standalone_hood/worn/oldvox + +/obj/item/clothing/head/beret/badge + name = "badged beret" + desc = "A beret. With a badge. What do you want, a dissertation? It's a hat." + icon_state = "beret_badge" + greyscale_config = /datum/greyscale_config/beret_badge + greyscale_config_worn = /datum/greyscale_config/beret_badge/worn + greyscale_colors = "#972A2A#EFEFEF" + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/head/costume/cowboyhat_old + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' + name = "old cowboy hat" + desc = "An older cowboy hat, perfect for any outlaw, though lacking fancy colour magic." + icon_state = "cowboyhat_black" + inhand_icon_state = "cowboy_hat_black" + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + +//BOWS +/obj/item/clothing/head/small_bow + name = "small bow" + desc = "A small compact bow that you can place on the side of your hair." + icon_state = "small_bow" + greyscale_config = /datum/greyscale_config/small_bow + greyscale_config_worn = /datum/greyscale_config/small_bow/worn + greyscale_colors = "#7b9ab5" + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/head/small_bow/Initialize(mapload) + . = ..() + AddComponent(/datum/component/toggle_clothes, "small_bow_t") + +/obj/item/clothing/head/large_bow + name = "large bow" + desc = "A large bow that you can place on top of your head." + icon_state = "large_bow" + greyscale_config = /datum/greyscale_config/large_bow + greyscale_config_worn = /datum/greyscale_config/large_bow/worn + greyscale_colors = "#7b9ab5" + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/head/back_bow + name = "back bow" + desc = "A large bow that you can place on the back of your head." + icon_state = "back_bow" + greyscale_config = /datum/greyscale_config/back_bow + greyscale_config_worn = /datum/greyscale_config/back_bow/worn + greyscale_colors = "#7b9ab5" + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/head/sweet_bow + name = "sweet bow" + desc = "A sweet bow that you can place on the back of your head." + icon_state = "sweet_bow" + greyscale_config = /datum/greyscale_config/sweet_bow + greyscale_config_worn = /datum/greyscale_config/sweet_bow/worn + greyscale_colors = "#7b9ab5" + flags_1 = IS_PLAYER_COLORABLE_1 diff --git a/modular_nova/modules/customization/modules/clothing/head/jobs.dm b/modular_nova/modules/customization/modules/clothing/head/jobs.dm new file mode 100644 index 00000000000000..c6ea4a2c84c8f3 --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/head/jobs.dm @@ -0,0 +1,153 @@ +// This is for all the berets that /tg/ didn't want. You're welcome, they should look better. + +/obj/item/clothing/head/hats/hos/beret + name = "head of security beret" + desc = "A robust beret for the Head of Security, for looking stylish while not sacrificing protection." + icon_state = "beret_badge" + greyscale_config = /datum/greyscale_config/beret_badge + greyscale_config_worn = /datum/greyscale_config/beret_badge/worn + greyscale_colors = "#3F3C40#FFCE5B" + +/obj/item/clothing/head/hats/hos/beret/syndicate + name = "syndicate beret" + desc = "A black beret with thick armor padding inside. Stylish and robust." + greyscale_colors = "#3F3C40#DB2929" + +/obj/item/clothing/head/beret/sec/navywarden + name = "warden's beret" + desc = "A special beret with the Warden's insignia emblazoned on it. For wardens with class." + icon_state = "beret_badge_fancy_twist" + greyscale_config = /datum/greyscale_config/beret_badge_fancy + greyscale_config_worn = /datum/greyscale_config/beret_badge_fancy/worn + greyscale_colors = "#3C485A#FF0000#00AEEF" + armor_type = /datum/armor/sec_navywarden + strip_delay = 60 + +/datum/armor/sec_navywarden + melee = 40 + bullet = 30 + laser = 30 + energy = 40 + bomb = 25 + fire = 30 + acid = 50 + wound = 6 + +/obj/item/clothing/head/beret/sec/navyofficer + desc = "A special beret with the security insignia emblazoned on it. For officers with class." + icon_state = "beret_badge_bolt" + greyscale_colors = "#3C485A#FF0000" + + +//Medical + +/obj/item/clothing/head/beret/medical + name = "medical beret" + desc = "A medical-flavored beret for the doctor in you!" + icon_state = "beret_badge_med" + greyscale_config = /datum/greyscale_config/beret_badge + greyscale_config_worn = /datum/greyscale_config/beret_badge/worn + greyscale_colors = "#FFFFFF#5FA4CC" + flags_1 = NONE + +/obj/item/clothing/head/beret/medical/paramedic + name = "paramedic beret" + desc = "For finding corpses in style!" + greyscale_colors = "#364660#5FA4CC" + +/obj/item/clothing/head/beret/medical/chemist + name = "chemist beret" + desc = "Not acid-proof!" + greyscale_colors = "#FFFFFF#D15B1B" + +/obj/item/clothing/head/beret/medical/virologist + name = "virologist beret" + desc = "Sneezing in this expensive beret would be a waste of a good beret." + greyscale_colors = "#FFFFFF#198019" + + +//Engineering + +/obj/item/clothing/head/beret/engi + name = "engineering beret" + desc = "Might not protect you from radiation, but definitely will protect you from looking unfashionable!" + icon_state = "beret_badge_engi" + greyscale_config = /datum/greyscale_config/beret_badge + greyscale_config_worn = /datum/greyscale_config/beret_badge/worn + greyscale_colors = "#ff8200#ffe12f" + flags_1 = NONE + +/obj/item/clothing/head/beret/atmos + name = "atmospheric beret" + desc = "While \"pipes\" and \"style\" might not rhyme, this beret sure makes you feel like they should!" + icon_state = "beret_badge" + greyscale_config = /datum/greyscale_config/beret_badge + greyscale_config_worn = /datum/greyscale_config/beret_badge/worn + greyscale_colors = "#59D7FF#ffe12f" + flags_1 = NONE + +// From this point forth will be berets that are made especially for Nova Sector. Those are loosely based off of the ones that were ported initially, but they might not be 1:1 + +/obj/item/clothing/head/beret/engi/ce + name = "chief engineer's beret" + desc = "A fancy beret designed exactly to the Chief Engineer's tastes, minus the LEDs." + greyscale_colors = "#FFFFFF#2E992E" + +/obj/item/clothing/head/beret/medical/cmo + name = "chief medical officer's beret" + desc = "A beret custom-fit to the Chief Medical Officer, repaired once or twice after Runtime got a hold of it." + greyscale_colors = "#5EB8B8#5FA4CC" + +/obj/item/clothing/head/beret/medical/cmo/alt + name = "chief medical officer's beret" + desc = "A beret custom-fit to the Chief Medical Officer, repaired once or twice after Runtime got a hold of it. This one is made out of white fabric. Fancy." + greyscale_colors = "#FFFFFF#199393" + +/obj/item/clothing/head/beret/science/fancy + desc = "A science-themed beret for our hardworking scientists. This one comes with a fancy badge!" + icon_state = "beret_badge" + greyscale_config = /datum/greyscale_config/beret_badge + greyscale_config_worn = /datum/greyscale_config/beret_badge/worn + greyscale_config_worn_teshari = /datum/greyscale_config/beret_badge/worn/teshari + greyscale_colors = "#7E1980#FFFFFF" + +/obj/item/clothing/head/beret/science/fancy/robo + name = "robotics beret" + desc = "A sleek black beret designed with high-durability nano-mesh fiber - or so the roboticists claim." + greyscale_colors = "#3E3E48#88242D" + +/obj/item/clothing/head/beret/science/rd/alt + name = "research director's beret" + desc = "A custom-tailored beret for the Research Director. Lamarr thinks it looks great. This one is made out of white fabric. Fancy." + greyscale_colors = "#FFFFFF#7E1980" + +/obj/item/clothing/head/beret/cargo/qm + name = "quartermaster's beret" + desc = "A beret that helps the QM keep telling themselves that they're an official head of staff." + greyscale_config = /datum/greyscale_config/beret_badge + greyscale_config_worn = /datum/greyscale_config/beret_badge/worn + icon_state = "beret_badge" + greyscale_colors = "#cf932f#FFCE5B" + +/obj/item/clothing/head/beret/cargo/qm/alt + name = "quartermaster's beret" + desc = "A beret that helps the QM keep telling themselves that they're an official head of staff. This one is made out of white fabric. Fancy" + greyscale_colors = "#FFFFFF#FFCE5B" + +/obj/item/clothing/head/caphat/beret/alt + name = "captain's beret" + desc = "For the Captains known for their sense of fashion. This one is made out of white fabric. Fancy" + greyscale_colors = "#FFFFFF#FFCE5B" + +/obj/item/clothing/head/hopcap/beret + name = "head of personnel's beret" + desc = "A fancy beret designed by NT's Personnel division for their favorite head's head." + greyscale_config = /datum/greyscale_config/beret_badge + greyscale_config_worn = /datum/greyscale_config/beret_badge/worn + icon_state = "beret_badge" + greyscale_colors = "#3e5c88#88242D" + +/obj/item/clothing/head/hopcap/beret/alt + name = "head of personnel's beret" + desc = "A fancy beret designed by NT's Personnel division for their favorite head's head. This one is made out of white fabric. Fancy" + greyscale_colors = "#FFFFFF#88242D" diff --git a/modular_nova/modules/customization/modules/clothing/head/trek.dm b/modular_nova/modules/customization/modules/clothing/head/trek.dm new file mode 100644 index 00000000000000..4310e2de8f16ca --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/head/trek.dm @@ -0,0 +1,21 @@ +//Trekkie Caps +/obj/item/clothing/head/hats/caphat/parade/fedcap + name = "Officer's cap" + desc = "An officer's cap that demands discipline from the one who wears it." + icon_state = "fedcapofficer" + armor_type = /datum/armor/none + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' + +//Variants +/obj/item/clothing/head/hats/caphat/parade/fedcap/medsci + icon_state = "fedcapsci" + +/obj/item/clothing/head/hats/caphat/parade/fedcap/eng + icon_state = "fedcapeng" + +/obj/item/clothing/head/hats/caphat/parade/fedcap/sec + icon_state = "fedcapsec" + +/obj/item/clothing/head/hats/caphat/parade/fedcap/black + icon_state = "fedcapblack" diff --git a/modular_skyrat/modules/customization/modules/clothing/masks/breath.dm b/modular_nova/modules/customization/modules/clothing/masks/breath.dm similarity index 79% rename from modular_skyrat/modules/customization/modules/clothing/masks/breath.dm rename to modular_nova/modules/customization/modules/clothing/masks/breath.dm index 57365317844ab2..5a9b9c14d2ddb9 100644 --- a/modular_skyrat/modules/customization/modules/clothing/masks/breath.dm +++ b/modular_nova/modules/customization/modules/clothing/masks/breath.dm @@ -7,8 +7,8 @@ /obj/item/clothing/mask/balaclavaadjust name = "adjustable balaclava" desc = "Wider eyed and made of an elastic based material, this one seems like it can contort more." - icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi' icon_state = "balaclava" inhand_icon_state = "balaclava" flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT @@ -54,8 +54,8 @@ /obj/item/clothing/mask/balaclava/threehole name = "three hole balaclava" desc = "Tiocfaidh ar la." - icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi' icon_state = "balaclavam" inhand_icon_state = "balaclava" flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT @@ -64,28 +64,28 @@ /obj/item/clothing/mask/balaclava/threehole/green name = "three hole green balaclava" desc = "Tiocfaidh ar la." - icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi' icon_state = "swatclavam" inhand_icon_state = "balaclava" /obj/item/clothing/mask/muzzle/ball name = "ballgag" desc = "I'm pretty fuckin far from okay." - icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi' icon_state = "ballgag" /obj/item/clothing/mask/muzzle/ring name = "ring gag" desc = "A mouth wrap seemingly designed to hold the mouth open." - icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi' icon_state = "ringgag" /obj/item/clothing/mask/surgical/greyscale - icon = 'modular_skyrat/modules/GAGS/icons/masks.dmi' - worn_icon = 'modular_skyrat/modules/GAGS/icons/masks.dmi' + icon = 'modular_nova/modules/GAGS/icons/masks.dmi' + worn_icon = 'modular_nova/modules/GAGS/icons/masks.dmi' flags_1 = IS_PLAYER_COLORABLE_1 greyscale_colors = "#AAE4DB" greyscale_config = /datum/greyscale_config/sterile_mask diff --git a/modular_skyrat/modules/customization/modules/clothing/masks/gas_filter.dm b/modular_nova/modules/customization/modules/clothing/masks/gas_filter.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/clothing/masks/gas_filter.dm rename to modular_nova/modules/customization/modules/clothing/masks/gas_filter.dm diff --git a/modular_nova/modules/customization/modules/clothing/masks/gasmask.dm b/modular_nova/modules/customization/modules/clothing/masks/gasmask.dm new file mode 100644 index 00000000000000..9891f8b453c631 --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/masks/gasmask.dm @@ -0,0 +1,218 @@ +/obj/item/clothing/mask/gas/glass + icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi' + name = "glass gas mask" + desc = "A face-covering mask that can be connected to an air supply. This one doesn't obscure your face however." + icon_state = "gas_clear" + flags_inv = NONE + +/obj/item/clothing/mask/gas/atmos/glass + icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi' + name = "advanced gas mask" + desc = "A face-covering mask that can be connected to an air supply. This one doesn't obscure your face however." + icon_state = "gas_clear" + flags_inv = NONE + +/obj/item/clothing/mask/gas/alt + icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi' + icon_state = "gas_alt2" + worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi' + +/obj/item/clothing/mask/gas/german + name = "black gas mask" + desc = "A black gas mask. Are you my Mummy?" + icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi' + icon_state = "m38_mask" + +/obj/item/clothing/mask/gas/hecu1 + name = "modern gas mask" + desc = "MY. ASS. IS. HEAVY." + icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi' + icon_state = "hecu" + +/obj/item/clothing/mask/gas/hecu2 + name = "M40 gas mask" + desc = "A deprecated field protective mask developed during the 20th century in Sol-3. It's designed to protect from chemical agents, biological agents, and nuclear fallout particles. It does not protect the user from ammonia or from lack of oxygen, though the filter can be replaced with a tube for any air tank." + icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi' + worn_icon_teshari = 'modular_nova/master_files/icons/mob/clothing/species/teshari/mask.dmi' + icon_state = "hecu2" + +/obj/item/clothing/mask/gas/soviet + name = "soviet gas mask" + desc = "A white gas mask with a green filter, there's a small sticker attached saying it's not got Asbestos anymore." + icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi' + icon_state = "gp5_mask" + +/obj/item/clothing/mask/gas/clown_colourable + name = "colourable clown mask" + desc = "The face of pure evil, now multicoloured." + icon_state = "gags_mask" + clothing_flags = MASKINTERNALS + flags_cover = MASKCOVERSEYES + resistance_flags = FLAMMABLE + has_fov = FALSE + greyscale_config = /datum/greyscale_config/clown_mask + greyscale_config_worn = /datum/greyscale_config/clown_mask/worn + greyscale_colors = "#FFFFFF#F20018#0000FF#00CC00" + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/mask/gas/clownbald + name = "bald clown mask" + desc = "HE'S BALD, HE'S FUCKIN' BALDIN!" + clothing_flags = MASKINTERNALS + icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi' + icon_state = "baldclown" + inhand_icon_state = null + flags_cover = MASKCOVERSEYES + resistance_flags = FLAMMABLE + +/obj/item/clothing/mask/gas/respirator + name = "half mask respirator" + desc = "A half mask respirator that's really just a standard gas mask with the glass taken off." + icon = 'modular_nova/modules/GAGS/icons/masks.dmi' + worn_icon = 'modular_nova/modules/GAGS/icons/masks.dmi' + icon_state = "respirator" + inhand_icon_state = "sechailer" + w_class = WEIGHT_CLASS_SMALL + has_fov = FALSE + clothing_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS + flags_inv = HIDEFACIALHAIR|HIDESNOUT + flags_cover = MASKCOVERSMOUTH + flags_1 = IS_PLAYER_COLORABLE_1 + greyscale_colors = "#2E3333" + greyscale_config = /datum/greyscale_config/respirator + greyscale_config_worn = /datum/greyscale_config/respirator/worn + //NIGHTMARE NIGHTMARE NIGHTMARE + greyscale_config_worn_digi = /datum/greyscale_config/respirator/worn/snouted + greyscale_config_worn_better_vox = /datum/greyscale_config/respirator/worn/better_vox + greyscale_config_worn_vox = /datum/greyscale_config/respirator/worn/vox + greyscale_config_worn_teshari = /datum/greyscale_config/respirator/worn/teshari + +/obj/item/clothing/mask/gas/respirator/examine(mob/user) + . = ..() + . += span_notice("You can toggle its ability to muffle your TTS voice with <b>control click</b>.") + +/obj/item/clothing/mask/gas/respirator/CtrlClick(mob/living/user) + if(!isliving(user)) + return + if(user.get_active_held_item() != src) + to_chat(user, span_warning("You must hold the [src] in your hand to do this!")) + return + voice_filter = voice_filter ? null : initial(voice_filter) + to_chat(user, span_notice("Mask voice muffling [voice_filter ? "enabled" : "disabled"].")) + +/obj/item/clothing/mask/gas/clown_hat/vox + desc = "A true prankster's facial attire. A clown is incomplete without his wig and mask. This one's got an easily accessible feeding port to be more suitable for the Vox crewmembers." + icon = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi' + worn_icon_better_vox = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi' + worn_icon_vox = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi' + starting_filter_type = /obj/item/gas_filter/vox + +/obj/item/clothing/mask/gas/clown_hat/vox/Initialize(mapload) + .=..() + clownmask_designs = list( + "True Form" = image(icon = src.icon, icon_state = "clown"), + "The Feminist" = image(icon = src.icon, icon_state = "sexyclown"), + "The Wizard" = image(icon = src.icon, icon_state = "wizzclown"), + "The Jester" = image(icon = src.icon, icon_state = "chaos"), + "The Madman" = image(icon = src.icon, icon_state = "joker"), + "The Rainbow Color" = image(icon = src.icon, icon_state = "rainbow") + ) + +/obj/item/clothing/mask/gas/clown_hat/vox/ui_action_click(mob/user) + if(!istype(user) || user.incapacitated()) + return + + var/list/options = list() + options["True Form"] = "clown" + options["The Feminist"] = "sexyclown" + options["The Wizard"] = "wizzclown" + options["The Madman"] = "joker" + options["The Rainbow Color"] = "rainbow" + options["The Jester"] = "chaos" + + var/choice = show_radial_menu(user,src, clownmask_designs, custom_check = FALSE, radius = 36, require_near = TRUE) + if(!choice) + return FALSE + + if(src && choice && !user.incapacitated() && in_range(user,src)) + icon_state = options[choice] + user.update_worn_mask() + update_item_action_buttons() + to_chat(user, span_notice("Your Clown Mask has now morphed into [choice], all praise the Honkmother!")) + return TRUE + +/obj/item/clothing/mask/gas/mime/vox + desc = "The traditional mime's mask. It has an eerie facial posture. This one's got an easily accessible feeding port to be more suitable for the Vox crewmembers." + icon = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi' + worn_icon_vox = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi' + worn_icon_better_vox = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi' + starting_filter_type = /obj/item/gas_filter/vox + +/obj/item/clothing/mask/gas/mime/vox/Initialize(mapload) + .=..() + mimemask_designs = list( + "Blanc" = image(icon = src.icon, icon_state = "mime"), + "Excité" = image(icon = src.icon, icon_state = "sexymime"), + "Triste" = image(icon = src.icon, icon_state = "sadmime"), + "Effrayé" = image(icon = src.icon, icon_state = "scaredmime") + ) + +/obj/item/clothing/mask/gas/mime/vox/ui_action_click(mob/user) + if(!istype(user) || user.incapacitated()) + return + + var/list/options = list() + options["Blanc"] = "mime" + options["Triste"] = "sadmime" + options["Effrayé"] = "scaredmime" + options["Excité"] = "sexymime" + + var/choice = show_radial_menu(user,src, mimemask_designs, custom_check = FALSE, radius = 36, require_near = TRUE) + if(!choice) + return FALSE + + if(src && choice && !user.incapacitated() && in_range(user,src)) + var/mob/living/carbon/human/human_user = user + if(human_user.dna.species.mutant_bodyparts["snout"]) + icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask_muzzled.dmi' + var/list/avian_snouts = list("Beak", "Big Beak", "Corvid Beak") + if(human_user.dna.species.mutant_bodyparts["snout"][MUTANT_INDEX_NAME] in avian_snouts) + icon_state = "[options[choice]]_b" + else + icon = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi' + icon_state = options[choice] + icon_state = options[choice] + + user.update_worn_mask() + update_item_action_buttons() + to_chat(user, span_notice("Your Mime Mask has now morphed into [choice]!")) + return TRUE + +/obj/item/clothing/mask/gas/atmos/vox + desc = "Improved gas mask utilized by atmospheric technicians. It's flameproof! This one's got an easily accessible feeding port to be more suitable for the Vox crewmembers." + icon = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi' + worn_icon_vox = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi' + worn_icon_better_vox = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi' + starting_filter_type = /obj/item/gas_filter/vox + +/obj/item/clothing/mask/gas/sechailer/vox + desc = "A standard issue Security gas mask with integrated 'Compli-o-nator 3000' device. Plays over a dozen pre-recorded compliance phrases designed to get scumbags to stand still whilst you tase them. Do not tamper with the device. This one's got an easily accessible feeding port to be more suitable for the Vox crewmembers." + icon = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi' + worn_icon_vox = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi' + worn_icon_better_vox = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi' + clothing_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS | GAS_FILTERING + visor_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS | GAS_FILTERING + starting_filter_type = /obj/item/gas_filter/vox diff --git a/modular_nova/modules/customization/modules/clothing/masks/masquerade_mask.dm b/modular_nova/modules/customization/modules/clothing/masks/masquerade_mask.dm new file mode 100644 index 00000000000000..11bd79d35fc5a5 --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/masks/masquerade_mask.dm @@ -0,0 +1,43 @@ + +/obj/item/clothing/mask/masquerade + name = "masquerade mask" + desc = "You'll never guess who's under that mask, it's the perfect disguise!" + icon_state = "maskerade" + icon = 'modular_nova/modules/GAGS/icons/mask/masquerade_mask.dmi' + worn_icon = 'modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn.dmi' + flags_1 = IS_PLAYER_COLORABLE_1 + clothing_flags = MASKINTERNALS + up = TRUE + visor_flags_inv = HIDEFACE + actions_types = list(/datum/action/item_action/toggle) + alternate_worn_layer = ABOVE_BODY_FRONT_HEAD_LAYER + supports_variations_flags = CLOTHING_SNOUTED_VARIATION | CLOTHING_SNOUTED_VOX_VARIATION | CLOTHING_SNOUTED_BETTER_VOX_VARIATION + greyscale_colors = "#ececec#333333#9b1e1e" + greyscale_config = /datum/greyscale_config/masquerade_mask + greyscale_config_worn = /datum/greyscale_config/masquerade_mask/worn + greyscale_config_worn_muzzled = /datum/greyscale_config/masquerade_mask/worn/snouted + greyscale_config_worn_better_vox = /datum/greyscale_config/masquerade_mask/worn/better_vox + greyscale_config_worn_vox = /datum/greyscale_config/masquerade_mask/worn/vox + greyscale_config_worn_teshari = /datum/greyscale_config/masquerade_mask/worn/teshari + +/obj/item/clothing/mask/masquerade/attack_self(mob/user) + weldingvisortoggle(user) + +/obj/item/clothing/mask/masquerade/visor_toggling() + up = !up + flags_inv ^= visor_flags_inv + +/obj/item/clothing/mask/masquerade/feathered + name = "feathered masquerade mask" + desc = "You'll never guess who's under that mask, it's the perfect disguise! This one even has a feather, to make it fancier!" + icon_state = "maskerade_feather" + +/obj/item/clothing/mask/masquerade/two_colors + name = "split masquerade mask" + desc = "You'll never guess who's under that mask, it's the perfect disguise! There's even two colors, to add to the confusion!" + icon_state = "maskerade_two_colors" + +/obj/item/clothing/mask/masquerade/two_colors/feathered + name = "feathered split masquerade mask" + desc = "You'll never guess who's under that mask, it's the perfect disguise! There's even two colors AND a feather, making it the most fancy masquerade mask yet!" + icon_state = "maskerade_two_colors_feather" diff --git a/modular_skyrat/modules/customization/modules/clothing/masks/paper.dm b/modular_nova/modules/customization/modules/clothing/masks/paper.dm similarity index 96% rename from modular_skyrat/modules/customization/modules/clothing/masks/paper.dm rename to modular_nova/modules/customization/modules/clothing/masks/paper.dm index e141f56900418c..c3900633b371d8 100644 --- a/modular_skyrat/modules/customization/modules/clothing/masks/paper.dm +++ b/modular_nova/modules/customization/modules/clothing/masks/paper.dm @@ -15,8 +15,8 @@ /obj/item/clothing/mask/paper name = "paper mask" desc = "It's true. Once you wear a mask for so long, you forget about who you are. Wonder if that happens with shitty paper ones." - icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi' icon_state = "mask_paper" clothing_flags = MASKINTERNALS flags_inv = HIDEFACIALHAIR|HIDESNOUT diff --git a/modular_nova/modules/customization/modules/clothing/neck/_neck.dm b/modular_nova/modules/customization/modules/clothing/neck/_neck.dm new file mode 100644 index 00000000000000..334eb5ef8c74f3 --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/neck/_neck.dm @@ -0,0 +1,120 @@ +/obj/item/clothing/neck/tie/disco + name = "horrific necktie" + icon = 'modular_nova/master_files/icons/obj/clothing/neck.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' + icon_state = "eldritch_tie" + desc = "The necktie is adorned with a garish pattern. It's disturbingly vivid. Somehow you feel as if it would be wrong to ever take it off. It's your friend now. You will betray it if you change it for some boring scarf." + +/obj/item/clothing/neck/mantle + name = "mantle" + desc = "A decorative drape over the shoulders. This one has a simple, dry color." + icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' + icon_state = "mantle" + +/obj/item/clothing/neck/mantle/regal + name = "regal mantle" + desc = "A colorful felt mantle. You feel posh just holding this thing." + icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' + icon_state = "regal-mantle" + +/obj/item/clothing/neck/mantle/qm + name = "\proper the quartermaster's mantle" + desc = "A snug and comfortable looking shoulder covering garment, it has an air of rebellion and independence. Or annoyance and delusions, your call." + icon_state = "qmmantle" + +/obj/item/clothing/neck/mantle/hopmantle + name = "\proper the head of personnel's mantle" + desc = "A decorative draping of blue and red over your shoulders, signifying your stamping prowess." + icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' + icon_state = "hopmantle" + +/obj/item/clothing/neck/mantle/cmomantle + name = "\proper the chief medical officer's mantle" + desc = "A light blue shoulder draping for THE medical professional. Contrasts well with blood." + icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' + icon_state = "cmomantle" + +/obj/item/clothing/neck/mantle/rdmantle + name = "\proper the research director's mantle" + desc = "A terribly comfortable shoulder draping for the discerning scientist of fashion." + icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' + icon_state = "rdmantle" + +/obj/item/clothing/neck/mantle/cemantle + name = "\proper the chief engineer's mantle" + desc = "A bright white and yellow striped mantle. Do not wear around active machinery." + icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' + icon_state = "cemantle" + +/obj/item/clothing/neck/mantle/hosmantle + name = "\proper the head of security's mantle" + desc = "A plated mantle that one might wrap around the upper torso. The 'scales' of the garment signify the members of security and how you're carrying them on your shoulders." + icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' + icon_state = "hosmantle_blue" //There's a red version if you remove the _blue, but its not coded in currently. + +/obj/item/clothing/neck/mantle/bsmantle + name = "\proper the blueshield's mantle" + desc = "A plated mantle with command colors. Suitable for the one assigned to making sure they're still breathing." + icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' + icon_state = "bsmantle" + +/obj/item/clothing/neck/mantle/capmantle + name = "\proper the captain's mantle" + desc = "A formal mantle to drape around the shoulders. Others stand on the shoulders of giants. You're the giant they stand on." + icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' + icon_state = "capmantle" + +/obj/item/clothing/neck/mantle/recolorable + name = "mantle" + desc = "A simple drape over the shoulders." + icon = 'modular_nova/modules/GAGS/icons/neck/neck.dmi' + worn_icon = 'modular_nova/modules/GAGS/icons/neck/neck.dmi' + worn_icon_teshari = 'modular_nova/modules/GAGS/icons/neck/neck_teshari.dmi' + icon_state = "mantle" + greyscale_colors = "#ffffff" + greyscale_config = /datum/greyscale_config/mantle + greyscale_config_worn = /datum/greyscale_config/mantle/worn + greyscale_config_worn_teshari = /datum/greyscale_config/mantle/worn/teshari + greyscale_config_worn_better_vox = /datum/greyscale_config/mantle/worn/newvox + greyscale_config_worn_vox = /datum/greyscale_config/mantle/worn/oldvox + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/neck/face_scarf + name = "face scarf" + desc = "A warm looking scarf that you can easily put around your face." + icon_state = "face_scarf" + greyscale_config = /datum/greyscale_config/face_scarf + greyscale_config_worn = /datum/greyscale_config/face_scarf/worn + greyscale_config_worn_muzzled = /datum/greyscale_config/face_scarf/worn/muzzled + greyscale_colors = "#a52424" + flags_1 = IS_PLAYER_COLORABLE_1 + flags_inv = HIDEFACIALHAIR | HIDESNOUT + supports_variations_flags = CLOTHING_SNOUTED_VARIATION + +/obj/item/clothing/neck/face_scarf/Initialize(mapload) + . = ..() + AddComponent(/datum/component/toggle_icon, toggle_noun = "scarf") + +/obj/item/clothing/neck/face_scarf/AltClick(mob/user) //Make sure that toggling actually hides the snout so that it doesn't clip + . = ..() + if(icon_state != "face_scarf_t") + flags_inv = HIDEFACIALHAIR | HIDESNOUT + else + flags_inv = HIDEFACIALHAIR + +/obj/item/clothing/neck/maid_neck_cover + name = "maid neck cover" + desc = "A neckpiece for a maid costume, it smells faintly of disappointment." + icon_state = "maid_neck_cover" + greyscale_config = /datum/greyscale_config/maid_neck_cover + greyscale_config_worn = /datum/greyscale_config/maid_neck_cover/worn + greyscale_colors = "#7b9ab5#edf9ff" + flags_1 = IS_PLAYER_COLORABLE_1 diff --git a/modular_skyrat/modules/customization/modules/clothing/neck/cloaks.dm b/modular_nova/modules/customization/modules/clothing/neck/cloaks.dm similarity index 85% rename from modular_skyrat/modules/customization/modules/clothing/neck/cloaks.dm rename to modular_nova/modules/customization/modules/clothing/neck/cloaks.dm index e657621789e074..2524f92c1c3927 100644 --- a/modular_skyrat/modules/customization/modules/clothing/neck/cloaks.dm +++ b/modular_nova/modules/customization/modules/clothing/neck/cloaks.dm @@ -1,25 +1,25 @@ /obj/item/clothing/neck/chaplain name = "bishop's cloak" desc = "Become the space pope." - icon = 'modular_skyrat/master_files/icons/obj/clothing/neck.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/neck.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' icon_state = "bishopcloak" /obj/item/clothing/neck/chaplain/black name = "black bishop's cloak" icon_state = "blackbishopcloak" -/obj/item/clothing/neck/cloak/qm/syndie +/obj/item/clothing/neck/cloak/qm/nova/interdyne name = "deck officer's cloak" - desc = "A cloak that represents the eternal Cargoslavia. There's little Mosin Nagant emblems woven into the fabric." + desc = "A cloak that represents the eternal Cargonia. There's little Mosin Nagant emblems woven into the fabric." /obj/item/clothing/neck/cowboylea name = "green cowboy poncho" desc = "A sand covered cloak, there seems to be a small deer head with antlers embroidered inside." body_parts_covered = NECK slot_flags = ITEM_SLOT_NECK - icon = 'modular_skyrat/master_files/icons/obj/clothing/neck.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/neck.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' icon_state = "cowboy_poncho" heat_protection = CHEST diff --git a/modular_skyrat/modules/customization/modules/clothing/neck/collars.dm b/modular_nova/modules/customization/modules/clothing/neck/collars.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/clothing/neck/collars.dm rename to modular_nova/modules/customization/modules/clothing/neck/collars.dm diff --git a/modular_skyrat/modules/customization/modules/clothing/outfits/akula.dm b/modular_nova/modules/customization/modules/clothing/outfits/akula.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/clothing/outfits/akula.dm rename to modular_nova/modules/customization/modules/clothing/outfits/akula.dm diff --git a/modular_skyrat/modules/customization/modules/clothing/outfits/vox.dm b/modular_nova/modules/customization/modules/clothing/outfits/vox.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/clothing/outfits/vox.dm rename to modular_nova/modules/customization/modules/clothing/outfits/vox.dm diff --git a/modular_nova/modules/customization/modules/clothing/shoes/shoes.dm b/modular_nova/modules/customization/modules/clothing/shoes/shoes.dm new file mode 100644 index 00000000000000..e8da35bd4a591c --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/shoes/shoes.dm @@ -0,0 +1,221 @@ +/obj/item/clothing/shoes/wraps + icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi' + name = "gilded leg wraps" + desc = "Ankle coverings. These ones have a golden design." + icon_state = "gildedcuffs" + body_parts_covered = FALSE + +/obj/item/clothing/shoes/wraps/silver + name = "silver leg wraps" + desc = "Ankle coverings. Not made of real silver." + icon_state = "silvergildedcuffs" + +/obj/item/clothing/shoes/wraps/red + name = "red leg wraps" + desc = "Ankle coverings. Show off your style with these shiny red ones!" + icon_state = "redcuffs" + +/obj/item/clothing/shoes/wraps/blue + name = "blue leg wraps" + desc = "Ankle coverings. Hang ten, brother." + icon_state = "bluecuffs" + +/obj/item/clothing/shoes/cowboyboots + icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi' + name = "cowboy boots" + desc = "A standard pair of brown cowboy boots." + icon_state = "cowboyboots" + +/obj/item/clothing/shoes/cowboyboots/black + name = "black cowboy boots" + desc = "A pair of black cowboy boots, pretty easy to scuff up." + icon_state = "cowboyboots_black" + +/obj/item/clothing/shoes/high_heels + icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi' + name = "high heels" + desc = "A fancy pair of high heels. Won't compensate for your below average height that much." + icon_state = "heels" + greyscale_config = /datum/greyscale_config/heels + greyscale_config_worn = /datum/greyscale_config/heels/worn + greyscale_config_worn_digi = /datum/greyscale_config/heels/worn/digi + greyscale_colors = "#FFFFFF" + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/shoes/fancy_heels + name = "fancy heels" + desc = "A pair of fancy high heels that are much smaller on your feet." + icon_state = "fancyheels" + icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi' + greyscale_colors = "#FFFFFF" + greyscale_config = /datum/greyscale_config/fancyheels + greyscale_config_worn = /datum/greyscale_config/fancyheels/worn + greyscale_config_worn_digi = /datum/greyscale_config/fancyheels/worn/digi + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/shoes/discoshoes + name = "green snakeskin shoes" + desc = "They may have lost some of their lustre over the years, but these green crocodile leather shoes fit you perfectly." + icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi' + icon_state = "lizardskin_shoes" + +/obj/item/clothing/shoes/kimshoes + icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi' + name = "aerostatic boots" + desc = "A brown pair of boots, prim and proper, ready to set off and get a body out of a tree." + icon_state = "aerostatic_boots" + + +/obj/item/clothing/shoes/jungleboots + name = "jungle boots" + desc = "Take me to your paradise, I want to see the Jungle. A brown pair of boots." + icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi' + icon_state = "jungle" + inhand_icon_state = "jackboots" + strip_delay = 30 + equip_delay_other = 50 + resistance_flags = NONE + +/obj/item/clothing/shoes/jungleboots/Initialize(mapload) + . = ..() + + create_storage(storage_type = /datum/storage/pockets/shoes) + +/obj/item/clothing/shoes/jackboots/black + name = "dark jackboots" + desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time. These are fully black." + icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi' + icon_state = "blackjack" + +/obj/item/clothing/shoes/wraps/cloth + name = "cloth foot wraps" + desc = "Boxer tape or bandages wrapped like a mummy, all left up to the choice of the wearer." + icon_state = "clothwrap" + greyscale_config = /datum/greyscale_config/clothwraps + greyscale_config_worn = /datum/greyscale_config/clothwraps/worn + greyscale_config_worn_digi = /datum/greyscale_config/clothwraps/worn/digi + greyscale_colors = "#FFFFFF" + body_parts_covered = FALSE + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/shoes/wraps/colourable + name = "colourable foot wraps" + desc = "Ankle coverings. These ones have a customisable colour design." + icon_state = "legwrap" + greyscale_config = /datum/greyscale_config/legwraps + greyscale_config_worn = /datum/greyscale_config/legwraps/worn + greyscale_config_worn_digi = /datum/greyscale_config/legwraps/worn/digi + greyscale_colors = "#FFFFFF" + body_parts_covered = FALSE + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/shoes/sports + name = "sport shoes" + desc = "Shoes for the sporty individual. The giants of Charlton play host to the titans of Ipswich - making them both seem normal sized." + icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi' + icon_state = "sportshoe" + +/obj/item/clothing/shoes/jackboots/knee + name = "knee boots" + desc = "Black leather boots that go up to the knee." + icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi' + icon_state = "kneeboots" + +/obj/item/clothing/shoes/jackboots/timbs + name = "fashionable boots" + desc = "Fresh from Luna, deadass good for rappers." + icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi' + icon_state = "timbs" + +/obj/item/clothing/shoes/winterboots/christmas + name = "red christmas boots" + desc = "A pair of fluffy red christmas boots!" + icon_state = "christmas_boots" + greyscale_colors = "#cc0f0f#c4c2c2" + greyscale_config = /datum/greyscale_config/boots/christmasboots + greyscale_config_worn = /datum/greyscale_config/boots/christmasboots/worn + greyscale_config_worn_digi = /datum/greyscale_config/boots/christmasboots/worn/digi + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/shoes/winterboots/christmas/green + name = "green christmas boots" + desc = "A pair of fluffy green christmas boots!" + greyscale_colors = "#1a991a#c4c2c2" + +/obj/item/clothing/shoes/clown_shoes/pink + name = "pink clown shoes" + desc = "A particularly pink pair of punny shoes." + icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi' + icon_state = "pink_clown_shoes" + +//Modular overide to give jackboots laces +/obj/item/clothing/shoes/jackboots + can_be_tied = TRUE + +/obj/item/clothing/shoes/colorable_laceups + name = "laceup shoes" + desc = "These don't seem to come pre-polished, how saddening." + icon = 'modular_nova/modules/GAGS/icons/shoes/shoes.dmi' + worn_icon = 'modular_nova/modules/GAGS/icons/shoes/shoes.dmi' + worn_icon_teshari = 'modular_nova/modules/GAGS/icons/shoes/shoes_teshari.dmi' + icon_state = "laceups" + greyscale_colors = "#383631" + greyscale_config = /datum/greyscale_config/laceup + greyscale_config_worn = /datum/greyscale_config/laceup/worn + greyscale_config_worn_teshari = /datum/greyscale_config/laceup/worn/teshari + greyscale_config_worn_better_vox = /datum/greyscale_config/laceup/worn/newvox + greyscale_config_worn_vox = /datum/greyscale_config/laceup/worn/oldvox + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/shoes/colorable_sandals + name = "sandals" + desc = "Rumor has it that wearing these with socks puts you on a no entry list in several sectors." + icon = 'modular_nova/modules/GAGS/icons/shoes/shoes.dmi' + worn_icon = 'modular_nova/modules/GAGS/icons/shoes/shoes.dmi' + worn_icon_teshari = 'modular_nova/modules/GAGS/icons/shoes/shoes_teshari.dmi' + icon_state = "sandals" + greyscale_colors = "#383631" + greyscale_config = /datum/greyscale_config/sandals + greyscale_config_worn = /datum/greyscale_config/sandals/worn + greyscale_config_worn_digi = /datum/greyscale_config/sandals/worn/digi + greyscale_config_worn_teshari = /datum/greyscale_config/sandals/worn/teshari + greyscale_config_worn_better_vox = /datum/greyscale_config/sandals/worn/newvox + greyscale_config_worn_vox = /datum/greyscale_config/sandals/worn/oldvox + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/shoes/jackboots/recolorable + icon = 'modular_nova/modules/GAGS/icons/shoes/shoes.dmi' + worn_icon = 'modular_nova/modules/GAGS/icons/shoes/shoes.dmi' + worn_icon_teshari = 'modular_nova/modules/GAGS/icons/shoes/shoes_teshari.dmi' + icon_state = "boots" + greyscale_colors = "#383631" + greyscale_config = /datum/greyscale_config/boots + greyscale_config_worn = /datum/greyscale_config/boots/worn + greyscale_config_worn_digi = /datum/greyscale_config/boots/worn/digi + greyscale_config_worn_teshari = /datum/greyscale_config/boots/worn/teshari + greyscale_config_worn_better_vox = /datum/greyscale_config/boots/worn/newvox + greyscale_config_worn_vox = /datum/greyscale_config/boots/worn/oldvox + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/shoes/wraps/cloth + name = "cloth foot wraps" + desc = "Boxer tape or bandages wrapped like a mummy, all left up to the choice of the wearer." + icon_state = "clothwrap" + greyscale_config = /datum/greyscale_config/clothwraps + greyscale_config_worn = /datum/greyscale_config/clothwraps/worn + greyscale_config_worn_digi = /datum/greyscale_config/clothwraps/worn/digi + greyscale_colors = "#FFFFFF" + body_parts_covered = FALSE + flags_1 = IS_PLAYER_COLORABLE_1 diff --git a/modular_nova/modules/customization/modules/clothing/storage/backpacks.dm b/modular_nova/modules/customization/modules/clothing/storage/backpacks.dm new file mode 100644 index 00000000000000..43ca952c116e92 --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/storage/backpacks.dm @@ -0,0 +1,38 @@ +/obj/item/storage/backpack/satchel/crusader //Not very special, really just a satchel texture + icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi' + name = "crusader bandolier" + desc = "A bandolier-satchel combination for holding all your dungeon loot." + icon_state = "crusader_bandolier" + inhand_icon_state = "explorerpack" + w_class = WEIGHT_CLASS_BULKY + +/obj/item/storage/backpack/science/robo + name = "robotics backpack" + desc = "A sleek, industrial-strength backpack issued to robotics personnel. Smells faintly of oil." + icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi' + lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' + righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' + icon_state = "backpack_robo" + inhand_icon_state = "backpack_robo" + +/obj/item/storage/backpack/satchel/science/robo + name = "robotics satchel" + desc = "A sleek, industrial-strength satchel issued to robotics personnel. Smells faintly of oil." + icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi' + lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' + righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' + icon_state = "satchel_robo" + inhand_icon_state = "satchel_robo" + +/obj/item/storage/backpack/duffelbag/science/robo + name = "robotics duffelbag" + desc = "A sleek, industrial-strength duffelbag issued to robotics personnel. Smells faintly of oil." + icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi' + lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' + righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' + icon_state = "duffel_robo" + inhand_icon_state = "duffel_robo" diff --git a/modular_skyrat/modules/customization/modules/clothing/storage/belts.dm b/modular_nova/modules/customization/modules/clothing/storage/belts.dm similarity index 91% rename from modular_skyrat/modules/customization/modules/clothing/storage/belts.dm rename to modular_nova/modules/customization/modules/clothing/storage/belts.dm index ff7699be864364..071b656d64caa2 100644 --- a/modular_skyrat/modules/customization/modules/clothing/storage/belts.dm +++ b/modular_nova/modules/customization/modules/clothing/storage/belts.dm @@ -1,6 +1,6 @@ /obj/item/storage/belt/crusader //Belt + sheath combination - still only holds one sword at a time though - icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' name = "crusader belt" desc = "Holds an assortment of equipment for whatever situation an adventurer may encounter, as well as having an attached sheath." icon_state = "crusader_belt" @@ -103,8 +103,8 @@ new /obj/item/storage/belt/storage_pouch(src) /obj/item/storage/belt/storage_pouch //seperate mini-storage inside the belt, leaving room for only one sword. Inspired by a (very poorly implemented) belt on Desert Rose - icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' name = "storage pouch" desc = span_notice("Click on this to open your belt's inventory!") icon_state = "storage_pouch_icon" @@ -124,8 +124,8 @@ atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL //Rather than have a huge whitelist, the belt can simply hold anything a pocket can hold - Can easily be changed if it somehow becomes an issue /obj/item/storage/belt/holster/cowboy - icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' name = "cowboy belt" desc = "Yee haw! The holster on the side of the hip is leather stamped with swirling lines, all leading back to a deer's antlers." icon_state = "cowboy_belt" @@ -133,8 +133,8 @@ inhand_icon_state = "utility" /obj/item/storage/belt/medbandolier - icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' name = "medical bandolier" desc = "A pocketed, pine green belt slung like a sash over the shoulder. Features numerous pockets for medicines and poisons alike. Now is coward healing time." icon_state = "med_bandolier" diff --git a/modular_nova/modules/customization/modules/clothing/storage/readme.md b/modular_nova/modules/customization/modules/clothing/storage/readme.md new file mode 100644 index 00000000000000..9f14c7c104102d --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/storage/readme.md @@ -0,0 +1,27 @@ +## Title: Storage + +MODULE ID: Storage + +### Description: + +A seperate folder under customization for adding new (WORN) storage items, such as new bags and belts. + +### TG Proc Changes: + +- N/A + +### Defines: + +- N/A + +### Master file additions + +- N/A + +### Included files that are not contained in this module: +(Both the new sprite files, which are in the normal clothing icon locations) +- modular_nova/master_files/icons/mob/clothing/storage.dmi +- modular_nova/master_files/icons/obj/clothing/storage.dmi + +### Credits: +Orion_the_Fox diff --git a/modular_nova/modules/customization/modules/clothing/suits/armor.dm b/modular_nova/modules/customization/modules/clothing/suits/armor.dm new file mode 100644 index 00000000000000..b436e5bd764d82 --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/suits/armor.dm @@ -0,0 +1,32 @@ +// MODULAR ARMOUR + +// WARDEN +/obj/item/clothing/suit/armor/vest/warden/syndicate + name = "master at arms' vest" + desc = "Stunning. Menacing. Perfect for the man who gets bullied for leaving the brig." + icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi' + icon_state = "warden_syndie" + current_skin = "warden_syndie" //prevents reskinning + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + +// HEAD OF PERSONNEL +/obj/item/clothing/suit/armor/vest/hop/hop_formal + name = "head of personnel's parade jacket" + desc = "A luxurious deep blue jacket for the Head of Personnel, woven with a red trim. It smells of bureaucracy." + icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi' + icon_state = "hopformal" + +/obj/item/clothing/suit/armor/vest/hop/hop_formal/Initialize(mapload) + . = ..() + AddComponent(/datum/component/toggle_icon) + +// CAPTAIN +/obj/item/clothing/suit/armor/vest/capcarapace/jacket + name = "captain's jacket" + desc = "A lightweight armored jacket in the Captain's colors. For when you want something sleeker." + icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi' + icon_state = "capjacket_casual" + body_parts_covered = CHEST|ARMS diff --git a/modular_skyrat/modules/customization/modules/clothing/suits/cloaks.dm b/modular_nova/modules/customization/modules/clothing/suits/cloaks.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/clothing/suits/cloaks.dm rename to modular_nova/modules/customization/modules/clothing/suits/cloaks.dm diff --git a/modular_skyrat/modules/customization/modules/clothing/suits/coats.dm b/modular_nova/modules/customization/modules/clothing/suits/coats.dm similarity index 87% rename from modular_skyrat/modules/customization/modules/clothing/suits/coats.dm rename to modular_nova/modules/customization/modules/clothing/suits/coats.dm index 9ea8f2b27bce53..61d1c6696fe024 100644 --- a/modular_skyrat/modules/customization/modules/clothing/suits/coats.dm +++ b/modular_nova/modules/customization/modules/clothing/suits/coats.dm @@ -24,8 +24,8 @@ /obj/item/clothing/suit/flakjack name = "flak jacket" desc = "A dilapidated jacket made of a supposedly bullet-proof material (Hint: It isn't.). Smells faintly of napalm." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi' icon_state = "flakjack" inhand_icon_state = "armor" blood_overlay_type = "armor" @@ -69,8 +69,8 @@ /obj/item/clothing/suit/toggle/deckard name = "runner coat" desc = "They say you overused reference. Tell them you're eating in this lovely coat, a long flowing brown one." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' icon_state = "deckard" supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON inhand_icon_state = "det_suit" @@ -116,8 +116,8 @@ flags_1 = IS_PLAYER_COLORABLE_1 /obj/item/clothing/suit/toggle/lawyer/black/better - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' icon_state = "suitjacket_black" supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON @@ -130,8 +130,8 @@ /obj/item/clothing/suit/toggle/lawyer/white name = "white suit jacket" desc = "A very versatile part of a suit ensable. Oddly in fashion with mobsters." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' icon_state = "suitjacket_white" supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON @@ -142,8 +142,8 @@ body_parts_covered = CHEST|GROIN|ARMS|LEGS cold_protection = CHEST|GROIN|ARMS|LEGS heat_protection = CHEST|ARMS|GROIN|LEGS - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' blood_overlay_type = "coat" /obj/item/clothing/suit/croptop @@ -152,8 +152,8 @@ icon_state = "croptop_black" body_parts_covered = CHEST|ARMS cold_protection = CHEST|ARMS - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON /obj/item/clothing/suit/varsity @@ -171,8 +171,8 @@ name = "hooded leather coat" desc = "A simple leather coat with a hoodie underneath it, not really hooded is it?" icon_state = "leatherhoodie" - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' body_parts_covered = CHEST|GROIN|ARMS supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON hoodtype = /obj/item/clothing/head/hooded/leather @@ -181,8 +181,8 @@ name = "jacket hood" desc = "A hood attached to a hoodie, nothing special." icon_state = "leatherhood" - icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' flags_inv = HIDEHAIR /obj/item/clothing/suit/tailored_jacket @@ -218,3 +218,4 @@ cold_protection = CHEST|GROIN|ARMS body_parts_covered = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON diff --git a/modular_skyrat/modules/customization/modules/clothing/suits/hoodies.dm b/modular_nova/modules/customization/modules/clothing/suits/hoodies.dm similarity index 93% rename from modular_skyrat/modules/customization/modules/clothing/suits/hoodies.dm rename to modular_nova/modules/customization/modules/clothing/suits/hoodies.dm index ec41c2c3eb35fd..e6d1a227d9cb97 100644 --- a/modular_skyrat/modules/customization/modules/clothing/suits/hoodies.dm +++ b/modular_nova/modules/customization/modules/clothing/suits/hoodies.dm @@ -1,6 +1,6 @@ /* * The hoodies and attached sprites [WERE ORIGINALLY FROM] https://github.com/Citadel-Station-13/Citadel-Station-13-RP before GAGSification -* Respective datums can be found in modular_skyrat/modules/customization/datums/greyscale/hoodies +* Respective datums can be found in modular_nova/modules/customization/datums/greyscale/hoodies * These are now a subtype of toggle/jacket too, so it properly toggles and isnt the unused 'storage' type */ @@ -54,7 +54,7 @@ /obj/item/clothing/suit/toggle/jacket/hoodie/branded name = "NT hoodie" - desc = "A warm, blue sweatshirt. It proudly bears the silver Nanotrasen insignia lettering on the back. The edges are trimmed with silver." + desc = "A warm, blue sweatshirt. It proudly bears the silver Symphionia insignia lettering on the back. The edges are trimmed with silver." icon_state = "hoodie_NT" greyscale_config = /datum/greyscale_config/hoodie_branded greyscale_config_worn = /datum/greyscale_config/hoodie_branded/worn diff --git a/modular_nova/modules/customization/modules/clothing/suits/misc.dm b/modular_nova/modules/customization/modules/clothing/suits/misc.dm new file mode 100644 index 00000000000000..855621b7d1346d --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/suits/misc.dm @@ -0,0 +1,349 @@ +/obj/item/clothing/suit/wornshirt + name = "worn shirt" + desc = "A worn out (or perhaps just baggy), curiously comfortable t-shirt." + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + icon_state = "wornshirt" + inhand_icon_state = "labcoat" + body_parts_covered = CHEST|GROIN + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/dutchjacketsr + name = "western jacket" + desc = "Botanists screaming of mangos have been rumored to wear this." + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + icon_state = "dutchjacket" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + + +/obj/item/clothing/suit/toggle/trackjacket + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + name = "track jacket" + desc = "A black jacket with blue stripes for the athletic. It is also popular among russian delinquents." + icon_state = "trackjacket" + toggle_noun = "zipper" + +/obj/item/clothing/suit/frenchtrench + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + name = "blue trenchcoat" + icon_state = "frenchtrench" + desc = "There's a certain timeless feeling to this coat, like it was once worn by a romantic, broken through his travels, from a schemer who hunted injustice to a traveller, however it arrived in your hands? Who knows?" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/victoriantailcoatbutler + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + name = "caretaker tailcoat" + desc = "You've ALWAYS been the Caretaker. I ought to know, I've ALWAYS been here." + icon_state = "victorian_tailcoat" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/koreacoat + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + name = "eastern winter coat" + desc = "War makes people cold, not just on the inside, but on the outside as well... luckily this coat's not seen any hardships like that, and is actually quite warm!" + icon_state = "chi_korea_coat" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + body_parts_covered = CHEST|GROIN|ARMS + cold_protection = CHEST|GROIN|ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + +/obj/item/clothing/suit/modernwintercoatthing + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + name = "modern winter coat" + desc = "Warm and comfy, the inner fur seems to be removable, not this one though, someone's sewn it in and left the buttons!" + icon_state = "modern_winter" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + 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/jacket/cardigan + name = "cardigan" + desc = "It's like, half a jacket." + icon_state = "cardigan" + greyscale_config = /datum/greyscale_config/cardigan + greyscale_config_worn = /datum/greyscale_config/cardigan/worn + greyscale_colors = "#FFFFFF" + flags_1 = IS_PLAYER_COLORABLE_1 + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/toggle/jacket/cardigan/Initialize(mapload) + . = ..() + AddComponent(/datum/component/toggle_clothes, "cardigan_t") + +/obj/item/clothing/suit/discoblazer + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + name = "disco ass blazer" + desc = "Looks like someone skinned this blazer off some long extinct disco-animal. It has an enigmatic white rectangle on the back and the right sleeve." + icon_state = "jamrock_blazer" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/kimjacket + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + name = "aerostatic bomber jacket" + desc = "A jacket once worn by the Air Force during the Antecentennial Revolution, there are quite a few pockets on the inside, mostly for storing notebooks and compasses." + icon_state = "aerostatic_bomber_jacket" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/blackfurrich + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + name = "expensive black fur coat" + desc = "Ever thought to yourself 'I'm a rich bitch, but I haven't GOT the Mafia Princess look?' Well thanks to the tireless work of underpaid slave labour in Space China, your dreams of looking like a bitch have been fulfilled, like a Genie with a sweatshop." + icon_state = "expensivecoat" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + body_parts_covered = CHEST|GROIN|ARMS + cold_protection = CHEST|GROIN|ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + +/obj/item/clothing/suit/brownbattlecoat + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + name = "expensive brown fur coat" + desc = "There is nothing more valuable, nothing more sacred, look at the fur lining, it's beautiful, when you cruse through Necropolis in this thing, you're gonna be balls deep in Ash Walker snatch." + icon_state = "battlecoat" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + body_parts_covered = CHEST|GROIN|ARMS + cold_protection = CHEST|GROIN|ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + +/obj/item/clothing/suit/brownfurrich + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + name = "quartermaster fur coat" + desc = "Cargonia, or if you're a dork, Cargoslavia has shipped out a coat for loyal quartermasters, despite accusations it's just a dyed black fur coat, it's...not, promise!" + icon_state = "winter_coat" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + body_parts_covered = CHEST|GROIN|ARMS + cold_protection = CHEST|GROIN|ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + armor_type = /datum/armor/suit_brownfurrich + +/datum/armor/suit_brownfurrich + melee = 10 + bullet = 10 + +/obj/item/clothing/suit/brownfurrich/public + name = "fur coat" + desc = "A lavishly cosy furr coat, made with 100% recycled carbon!" + +/obj/item/clothing/suit/brownfurrich/white + name = "white fur coat" + desc = "A lavishly cosy furr coat, made with 100% recycled carbon!" + icon_state = "winter_coat_white" + +/obj/item/clothing/suit/brownfurrich/cream + name = "cream fur coat" + desc = "A lavishly cosy furr coat, made with 100% recycled carbon!" + icon_state = "winter_coat_cream" + +/obj/item/clothing/suit/fallsparka + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + name = "falls parka" + desc = "A light brown coat with light fur lighting around the collar." + icon_state = "fallsparka" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + body_parts_covered = CHEST|GROIN|ARMS + cold_protection = CHEST|GROIN|ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + +/obj/item/clothing/suit/british_officer + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + name = "british officers coat" + desc = "Whether you're commanding a colonial crusade or commanding a battalion for the British Empire, this coat will suit you." + icon_state = "british_officer" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + body_parts_covered = CHEST|GROIN|ARMS + cold_protection = CHEST|GROIN|ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + armor_type = /datum/armor/suit_british_officer + +/datum/armor/suit_british_officer + melee = 10 + bullet = 10 + +/obj/item/clothing/suit/modern_winter + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + name = "modern winter coat" + desc = "A comfy modern winter coat." + icon_state = "modern_winter" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + body_parts_covered = CHEST|GROIN|ARMS + cold_protection = CHEST|GROIN|ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + +/obj/item/clothing/suit/woolcoat + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + name = "wool coat" + desc = "A fine coat made from the richest of wool." + icon_state = "woolcoat" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + body_parts_covered = CHEST|GROIN|ARMS + + +/obj/item/clothing/suit/gautumn + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + name = "neo american general's coat" + desc = "In stark contrast to the undersuit, this large and armored coat is as white as snow, perfect for the bloodstains." + icon_state = "soldier" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + body_parts_covered = CHEST|GROIN|ARMS + cold_protection = CHEST|GROIN|ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + armor_type = /datum/armor/suit_gautumn + +/datum/armor/suit_gautumn + melee = 10 + bullet = 10 + laser = 20 + energy = 20 + +/obj/item/clothing/suit/autumn + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + name = "neo american officer's coat" + desc = "In stark contrast to the undersuit, this coat is a greeny white colour, layered with slight protection against bullets and melee weapons." + icon_state = "autumn" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + body_parts_covered = CHEST|GROIN|ARMS + cold_protection = CHEST|GROIN|ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + armor_type = /datum/armor/suit_autumn + +/datum/armor/suit_autumn + melee = 10 + bullet = 10 + +/obj/item/clothing/suit/texas + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + name = "white suit coat" + desc = "A white suit coat, perfect for fat oil barons." + icon_state = "texas" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + body_parts_covered = CHEST|ARMS + +/obj/item/clothing/suit/cossack + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + name = "ukrainian coat" + desc = "Hop on your horse, dawn your really fluffy hat, and strap this coat to your back." + icon_state = "kuban_cossak" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/corgisuit/en + name = "\improper super-hero E-N suit" + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + icon_state = "ensuit" + supports_variations_flags = NONE + +/obj/item/clothing/suit/corgisuit/en/New() + ..() + START_PROCESSING(SSobj, src) + +/obj/item/clothing/suit/corgisuit/en/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/item/clothing/suit/corgisuit/en/process() + if(prob(2)) + for(var/obj/object in orange(2,src)) + if(!object.anchored && (object.obj_flags & CONDUCTS_ELECTRICITY)) + step_towards(object,src) + for(var/mob/living/silicon/S in orange(2,src)) + if(istype(S, /mob/living/silicon/ai)) continue + step_towards(S,src) + for(var/datum/species/synthetic/R in orange(2,src)) + step_towards(R,src) + +/obj/item/clothing/suit/trenchbrown + name = "brown trenchcoat" + desc = "A brown noir-inspired coat. Looks best if you're not wearing it over a baggy t-shirt." + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + icon_state = "brtrenchcoat" + body_parts_covered = CHEST|ARMS + +/obj/item/clothing/suit/trenchblack + name = "black trenchcoat" + desc = "A matte-black coat. Best suited for space-italians, or maybe a monochrome-cop." + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + icon_state = "bltrenchcoat" + body_parts_covered = CHEST|ARMS + +/obj/item/clothing/suit/apron/chef/colorable_apron + name = "apron" + desc = "A basic apron." + icon = 'modular_nova/modules/GAGS/icons/suit/suit.dmi' + worn_icon = 'modular_nova/modules/GAGS/icons/suit/suit.dmi' + worn_icon_teshari = 'modular_nova/modules/GAGS/icons/suit/suit_teshari.dmi' + icon_state = "apron" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + greyscale_colors = "#ffffff" + greyscale_config = /datum/greyscale_config/apron + greyscale_config_worn = /datum/greyscale_config/apron/worn + greyscale_config_worn_teshari = /datum/greyscale_config/apron/worn/teshari + greyscale_config_worn_better_vox = /datum/greyscale_config/apron/worn/newvox + greyscale_config_worn_vox = /datum/greyscale_config/apron/worn/oldvox + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/suit/apron/overalls + greyscale_config_worn_digi = /datum/greyscale_config/overalls/worn/digi + greyscale_config_worn_better_vox = /datum/greyscale_config/overalls/worn/better_vox + greyscale_config_worn_vox = /datum/greyscale_config/overalls/worn/vox + +/obj/item/clothing/suit/apron/overalls/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/analyzer, + /obj/item/construction/rcd, + /obj/item/fireaxe/metal_h2_axe, + /obj/item/pipe_dispenser, + /obj/item/storage/bag/construction, + /obj/item/t_scanner, + ) + +/obj/item/clothing/suit/warm_sweater + name = "warm sweater" + desc = "A comfortable warm-looking sweater." + icon_state = "warm_sweater" + greyscale_config = /datum/greyscale_config/warm_sweater + greyscale_config_worn = /datum/greyscale_config/warm_sweater/worn + greyscale_colors = "#867361" + flags_1 = IS_PLAYER_COLORABLE_1 + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/heart_sweater + name = "heart sweater" + desc = "A comfortable warm-looking sweater. It even has a heart pattern on it, how cute." + icon_state = "heart_sweater" + greyscale_config = /datum/greyscale_config/heart_sweater + greyscale_config_worn = /datum/greyscale_config/heart_sweater/worn + greyscale_colors = "#867361#8f3a3a" + flags_1 = IS_PLAYER_COLORABLE_1 + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON diff --git a/modular_nova/modules/customization/modules/clothing/suits/trek.dm b/modular_nova/modules/customization/modules/clothing/suits/trek.dm new file mode 100644 index 00000000000000..2065c622fe3a94 --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/suits/trek.dm @@ -0,0 +1,61 @@ +//Trek Jacket(s?) +/obj/item/clothing/suit/fedcoat + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + name = "Federation uniform jacket" + desc = "A uniform jacket from the United Federation. Set phasers to awesome." + icon_state = "fedcoat" + inhand_icon_state = "coatsecurity" + allowed = list( + /obj/item/tank/internals/emergency_oxygen, + /obj/item/flashlight, + /obj/item/analyzer, + /obj/item/radio, + /obj/item/gun, + /obj/item/melee/baton, + /obj/item/restraints/handcuffs, + /obj/item/reagent_containers/hypospray, + /obj/item/hypospray, + /obj/item/healthanalyzer, + /obj/item/reagent_containers/syringe, + /obj/item/reagent_containers/cup/vial, + /obj/item/reagent_containers/cup/beaker, + /obj/item/storage/pill_bottle, + /obj/item/taperecorder) + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + body_parts_covered = CHEST|GROIN|ARMS + species_exception = list(/datum/species/golem) + +/obj/item/clothing/suit/fedcoat/medsci + icon_state = "fedblue" + inhand_icon_state = "coatmedical" + +/obj/item/clothing/suit/fedcoat/eng + icon_state = "fedeng" + inhand_icon_state = "coatengineer" + +/obj/item/clothing/suit/fedcoat/capt + icon_state = "fedcapt" + inhand_icon_state = "coatcaptain" + +//fedcoat but modern +/obj/item/clothing/suit/fedcoat/modern + name = "modern Federation uniform jacket" + desc = "A modern uniform jacket from the United Federation." + icon_state = "fedmodern" + inhand_icon_state = "coatsecurity" + +/obj/item/clothing/suit/fedcoat/modern/medsci + name = "modern medsci Federation jacket" + icon_state = "fedmodernblue" + inhand_icon_state = "coatmedical" + +/obj/item/clothing/suit/fedcoat/modern/eng + name = "modern engineering Federation jacket" + icon_state = "fedmoderneng" + inhand_icon_state = "coatengineer" + +/obj/item/clothing/suit/fedcoat/modern/sec + name = "modern security Federation jacket" + icon_state = "fedmodernsec" + inhand_icon_state = "coatcaptain" diff --git a/modular_skyrat/modules/customization/modules/clothing/toggle_base.dm b/modular_nova/modules/customization/modules/clothing/toggle_base.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/clothing/toggle_base.dm rename to modular_nova/modules/customization/modules/clothing/toggle_base.dm diff --git a/modular_nova/modules/customization/modules/clothing/under/accessories.dm b/modular_nova/modules/customization/modules/clothing/under/accessories.dm new file mode 100644 index 00000000000000..d5192dc5c70ff5 --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/under/accessories.dm @@ -0,0 +1,196 @@ +/obj/item/clothing/accessory/badge + name = "detective's badge" + desc = "Security Department detective's badge, made from gold." + icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi' + icon_state = "badge" + slot_flags = ITEM_SLOT_NECK + attachment_slot = CHEST + + var/stored_name + var/badge_string = "Conglomeration Security" + + drop_sound = 'modular_nova/master_files/sound/items/drop/ring.ogg' + pickup_sound = 'modular_nova/master_files/sound/items/pickup/ring.ogg' + +/obj/item/clothing/accessory/badge/old + name = "faded badge" + icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi' + desc = "A faded badge, backed with leather. It bears the emblem of the Forensic division." + icon_state = "goldbadge" + +/obj/item/clothing/accessory/badge/proc/set_name(new_name) + stored_name = new_name + name = "[initial(name)] ([stored_name])" + +/obj/item/clothing/accessory/badge/proc/set_desc(mob/living/carbon/human/H) + +/obj/item/clothing/accessory/badge/attack_self(mob/user as mob) + + if(!stored_name) + to_chat(user, "You polish your old badge fondly, shining up the surface.") + set_name(user.real_name) + return + + if(isliving(user)) + if(stored_name) + user.visible_message(span_notice("[user] displays their [src.name].\nIt reads: [stored_name], [badge_string]."),span_notice("You display your [src.name].\nIt reads: [stored_name], [badge_string].")) + else + user.visible_message(span_notice("[user] displays their [src.name].\nIt reads: [badge_string]."),span_notice("You display your [src.name]. It reads: [badge_string].")) + +/obj/item/clothing/accessory/badge/attack(mob/living/carbon/human/M, mob/living/user) + if(isliving(user)) + user.visible_message(span_danger("[user] invades [M]'s personal space, thrusting [src] into their face insistently."),span_danger("You invade [M]'s personal space, thrusting [src] into their face insistently.")) + user.do_attack_animation(M) + +// Sheriff Badge (toy) +/obj/item/clothing/accessory/badge/sheriff + name = "sheriff badge" + desc = "This town ain't big enough for the two of us, pardner." + icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi' + icon_state = "sheriff" + +/obj/item/clothing/accessory/badge/sheriff/attack_self(mob/user as mob) + user.visible_message("[user] shows their sheriff badge. There's a new sheriff in town!",\ + "You flash the sheriff badge to everyone around you!") + +/obj/item/clothing/accessory/badge/sheriff/attack(mob/living/carbon/human/M, mob/living/user) + if(isliving(user)) + user.visible_message(span_danger("[user] invades [M]'s personal space, the sheriff badge into their face!."),span_danger("You invade [M]'s personal space, thrusting the sheriff badge into their face insistently.")) + user.do_attack_animation(M) + +//.Holobadges. +/obj/item/clothing/accessory/badge/holo + name = "holobadge" + desc = "This glowing blue badge marks the holder as THE LAW." + icon_state = "holobadge_lopland" + icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi' + +/obj/item/clothing/accessory/badge/holo/cord + icon_state = "holobadge-cord" + icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi' + +/obj/item/clothing/accessory/badge/holo/attack_self(mob/user as mob) + if(!stored_name) + to_chat(user, "Waving around a holobadge before swiping an ID would be pretty pointless.") + return + return ..() + +/obj/item/clothing/accessory/badge/holo/emag_act(remaining_charges, mob/user) + if(obj_flags & EMAGGED) + balloon_alert(user, "already cracked") + return FALSE + + obj_flags |= EMAGGED + balloon_alert(user, "security checks cracked!") + to_chat(user, span_danger("You crack the holobadge security checks.")) + return TRUE + +/obj/item/clothing/accessory/badge/holo/attackby(obj/item/object as obj, mob/user as mob) + if(istype(object, /obj/item/card/id)) + + var/obj/item/card/id/id_card = null + + if(istype(object, /obj/item/card/id)) + id_card = object + + if(ACCESS_SECURITY in id_card.access || (obj_flags & EMAGGED)) + to_chat(user, "You imprint your ID details onto the badge.") + set_name(user.real_name) + badge_string = id_card.assignment + else + to_chat(user, "[src] rejects your insufficient access rights.") + return + ..() + +/obj/item/storage/box/holobadge + name = "holobadge box" + desc = "A box claiming to contain holobadges." + +/obj/item/storage/box/holobadge/PopulateContents() + . = ..() + new /obj/item/clothing/accessory/badge/holo(src) + new /obj/item/clothing/accessory/badge/holo(src) + new /obj/item/clothing/accessory/badge/holo(src) + new /obj/item/clothing/accessory/badge/holo(src) + new /obj/item/clothing/accessory/badge/holo/cord(src) + new /obj/item/clothing/accessory/badge/holo/cord(src) + return + +/obj/item/clothing/accessory/badge/holo/warden + name = "warden's holobadge" + desc = "A silver corporate security badge. Stamped with the words 'Warden.'" + icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi' + icon_state = "silverbadge" + slot_flags = ITEM_SLOT_NECK + +/obj/item/clothing/accessory/badge/holo/hos + name = "head of security's holobadge" + desc = "An immaculately polished gold security badge. Labeled 'Head of Security.'" + icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi' + icon_state = "goldbadge" + slot_flags = ITEM_SLOT_NECK + +/obj/item/clothing/accessory/badge/holo/detective + name = "detective's holobadge" + desc = "An immaculately polished gold security badge on leather. Labeled 'Detective.'" + icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi' + icon_state = "marshalbadge" + slot_flags = ITEM_SLOT_NECK + +/obj/item/storage/box/holobadge/hos + name = "holobadge box" + desc = "A box claiming to contain holobadges." + +/obj/item/storage/box/holobadge/hos/PopulateContents() + . = ..() + new /obj/item/clothing/accessory/badge/holo(src) + new /obj/item/clothing/accessory/badge/holo(src) + new /obj/item/clothing/accessory/badge/holo/warden(src) + new /obj/item/clothing/accessory/badge/holo/detective(src) + new /obj/item/clothing/accessory/badge/holo/detective(src) + new /obj/item/clothing/accessory/badge/holo/hos(src) + new /obj/item/clothing/accessory/badge/holo/cord(src) + return + +// The newbie pin +/obj/item/clothing/accessory/green_pin + name = "green pin" + desc = "A pin given to newly hired personnel on deck." + icon_state = "green" + icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi' + +/obj/item/clothing/accessory/green_pin/examine(mob/user) + . = ..() + // How many hours of playtime left until the green pin expires + var/green_time_remaining = sanitize_integer((PLAYTIME_GREEN - user.client?.get_exp_living(pure_numeric = TRUE) / 60), 0, (PLAYTIME_GREEN / 60)) + if(green_time_remaining > 0) + . += span_nicegreen("It reads '[green_time_remaining] hour[green_time_remaining >= 2 ? "s" : ""].'") + +// Pride Pin Over-ride +/obj/item/clothing/accessory/pride + icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi' + +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", + "Man-Loving-Man / Gay Pride" = "pride_mlm", + "Genderfluid Pride" = "pride_genderfluid", + "Genderqueer Pride" = "pride_genderqueer", + "Aromantic Pride" = "pride_aromantic", +)) diff --git a/modular_skyrat/modules/customization/modules/clothing/under/costumes.dm b/modular_nova/modules/customization/modules/clothing/under/costumes.dm similarity index 82% rename from modular_skyrat/modules/customization/modules/clothing/under/costumes.dm rename to modular_nova/modules/customization/modules/clothing/under/costumes.dm index 6ac0f79b2be7c2..e88157ff9d5ef6 100644 --- a/modular_skyrat/modules/customization/modules/clothing/under/costumes.dm +++ b/modular_nova/modules/customization/modules/clothing/under/costumes.dm @@ -2,8 +2,8 @@ /obj/item/clothing/under/costume/cybersleek name = "sleek modern coat" desc = "A modern-styled coat typically worn on more urban planets, made with a neo-laminated fiber lining." - icon = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi' icon_state = "cyberpunksleek" body_parts_covered = CHEST|ARMS|GROIN|LEGS supports_variations_flags = NONE @@ -19,6 +19,7 @@ name = "maid costume" desc = "Maid in China." icon_state = "maid_costume" + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY greyscale_config = /datum/greyscale_config/maid_costume greyscale_config_worn = /datum/greyscale_config/maid_costume/worn greyscale_colors = "#7b9ab5#edf9ff" diff --git a/modular_nova/modules/customization/modules/clothing/under/misc.dm b/modular_nova/modules/customization/modules/clothing/under/misc.dm new file mode 100644 index 00000000000000..15c444b2cd051a --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/under/misc.dm @@ -0,0 +1,49 @@ +/obj/item/clothing/under/misc/bluetracksuit + name = "blue tracksuit" + desc = "Found on a dead homeless man squatting in an alleyway, the classic design has been mass produced to bring terror to the galaxy." + icon = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi' + icon_state = "tracksuit_blue" + +/obj/item/clothing/under/tachawaiian + name = "orange tactical hawaiian outfit" + desc = "Clearly the wearer didn't know if they wanted to invade a country or lay on a nice Hawaiian beach." + icon = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi' + icon_state = "tacticool_hawaiian_orange" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + +/obj/item/clothing/under/tachawaiian/blue + name = "blue tactical hawaiian outfit" + icon_state = "tacticool_hawaiian_blue" + +/obj/item/clothing/under/tachawaiian/purple + name = "purple tactical hawaiian outfit" + icon_state = "tacticool_hawaiian_purple" + +/obj/item/clothing/under/tachawaiian/green + name = "green tactical hawaiian outfit" + icon_state = "tacticool_hawaiian_green" + +/obj/item/clothing/under/texas + name = "texan formal outfit" + desc = "A premium quality shirt and pants combo straight from Texas." + icon = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi' + icon_state = "texas" + supports_variations_flags = NONE + +/obj/item/clothing/under/doug_dimmadome + name = "dimmadome formal outfit" + desc = "A tight fitting suit with a belt that is surely made out of gold." + icon = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi' + icon_state = "doug_dimmadome" + supports_variations_flags = NONE + +/obj/item/clothing/under/pants/tactical + icon = 'modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi' + name = "tactical pants" + desc = "A pair of tactical pants, designed for military use." + icon_state = "tactical_pants" diff --git a/modular_nova/modules/customization/modules/clothing/under/security.dm b/modular_nova/modules/customization/modules/clothing/under/security.dm new file mode 100644 index 00000000000000..b3e072cea322ca --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/under/security.dm @@ -0,0 +1,117 @@ +// MODULAR SECURITY WEAR (NOT OVERRIDES, LOOK IN 'modular_nova\modules\goofsec\code\sec_clothing_overrides.dm') + +// DETECTIVE +/obj/item/clothing/under/rank/security/detective/cowboy + name = "blonde cowboy uniform" + desc = "A blue shirt and dark jeans, with a pair of spurred cowboy boots to boot." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' //Donator item-ish? See the /armorless one below it + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + icon_state = "cowboy_uniform" + supports_variations_flags = NONE + can_adjust = FALSE + +/obj/item/clothing/under/rank/security/detective/cowboy/armorless //Donator variant, just uses the sprite. + armor_type = /datum/armor/clothing_under/none + +/obj/item/clothing/suit/cowboyvest + name = "blonde cowboy vest" + desc = "A white cream vest lined with... fur, of all things, for desert weather. There's a small deer head logo sewn into the vest." + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + icon_state = "cowboy_vest" + body_parts_covered = CHEST|ARMS + cold_protection = CHEST|ARMS + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + heat_protection = CHEST|ARMS + +/obj/item/clothing/suit/jacket/det_suit/cowboyvest + name = "blonde cowboy vest" + desc = "A white cream vest lined with... fur, of all things, for desert weather. There's a small deer head logo sewn into the vest." + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + icon_state = "cowboy_vest" + body_parts_covered = CHEST|ARMS + cold_protection = CHEST|ARMS + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + heat_protection = CHEST|ARMS + +/obj/item/clothing/under/rank/security/detective/runner + name = "runner sweater" + desc = "<i>\"You look lonely.\"</i>" + icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi' + icon_state = "runner" + supports_variations_flags = NONE + can_adjust = FALSE + +/// PRISONER +/obj/item/clothing/under/rank/prisoner/protcust + name = "protective custody prisoner jumpsuit" + desc = "A mustard coloured prison jumpsuit, often worn by former Security members, informants and former CentCom employees. Its suit sensors are stuck in the \"Fully On\" position." + greyscale_colors = "#FFB600" + +/obj/item/clothing/under/rank/prisoner/skirt/protcust + name = "protective custody prisoner jumpskirt" + desc = "A mustard coloured prison jumpskirt, often worn by former Security members, informants and former CentCom employees. Its suit sensors are stuck in the \"Fully On\" position." + greyscale_colors = "#FFB600" + supports_variations_flags = NONE + +/obj/item/clothing/under/rank/prisoner/lowsec + name = "low security prisoner jumpsuit" + desc = "A pale, almost creamy prison jumpsuit, this one denotes a low security prisoner, things like fraud and anything white collar. Its suit sensors are stuck in the \"Fully On\" position." + greyscale_colors = "#AB9278" + +/obj/item/clothing/under/rank/prisoner/skirt/lowsec + name = "low security prisoner jumpskirt" + desc = "A pale, almost creamy prison jumpskirt, this one denotes a low security prisoner, things like fraud and anything white collar. Its suit sensors are stuck in the \"Fully On\" position." + greyscale_colors = "#AB9278" + supports_variations_flags = NONE + +/obj/item/clothing/under/rank/prisoner/highsec + name = "high risk prisoner jumpsuit" + desc = "A bright red prison jumpsuit, depending on who sees it, either a badge of honour or a sign to avoid. Its suit sensors are stuck in the \"Fully On\" position." + greyscale_colors = "#FF3400" + +/obj/item/clothing/under/rank/prisoner/skirt/highsec + name = "high risk prisoner jumpskirt" + desc = "A bright red prison jumpskirt, depending on who sees it, either a badge of honour or a sign to avoid. Its suit sensors are stuck in the \"Fully On\" position." + greyscale_colors = "#FF3400" + supports_variations_flags = NONE + +/obj/item/clothing/under/rank/prisoner/supermax + name = "supermax prisoner jumpsuit" + desc = "A dark crimson red prison jumpsuit, for the worst of the worst, or the Clown. Its suit sensors are stuck in the \"Fully On\" position." + greyscale_colors = "#992300" + +/obj/item/clothing/under/rank/prisoner/skirt/supermax + name = "supermax prisoner jumpskirt" + desc = "A dark crimson red prison jumpskirt, for the worst of the worst, or the Clown. Its suit sensors are stuck in the \"Fully On\" position." + greyscale_colors = "#992300" + supports_variations_flags = NONE + +/obj/item/clothing/under/rank/prisoner/classic + name = "classic prisoner jumpsuit" + desc = "A black and white striped jumpsuit, like something out of a movie." + icon = 'modular_nova/master_files/icons/obj/clothing/under/costume.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/costume.dmi' + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi' + icon_state = "prisonerclassic" + greyscale_colors = null + greyscale_config = null + greyscale_config_inhand_left = null + greyscale_config_inhand_right = null + greyscale_config_worn = null + supports_variations_flags = NONE + +/obj/item/clothing/under/rank/prisoner/syndicate + name = "syndicate prisoner jumpsuit" + desc = "A crimson red jumpsuit worn by syndicate captives. Its sensors have been shorted out." + greyscale_colors = "#992300" + has_sensor = FALSE + +/obj/item/clothing/under/rank/prisoner/skirt/syndicate + name = "syndicate prisoner jumpskirt" + desc = "A crimson red jumpskirt worn by syndicate captives. Its sensors have been shorted out." + greyscale_colors = "#992300" + has_sensor = FALSE + supports_variations_flags = NONE diff --git a/modular_skyrat/modules/customization/modules/clothing/under/suits.dm b/modular_nova/modules/customization/modules/clothing/under/suits.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/clothing/under/suits.dm rename to modular_nova/modules/customization/modules/clothing/under/suits.dm diff --git a/modular_skyrat/modules/customization/modules/clothing/under/sweaters.dm b/modular_nova/modules/customization/modules/clothing/under/sweaters.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/clothing/under/sweaters.dm rename to modular_nova/modules/customization/modules/clothing/under/sweaters.dm diff --git a/modular_skyrat/modules/customization/modules/clothing/under/tauruniformscolor.dm b/modular_nova/modules/customization/modules/clothing/under/tauruniformscolor.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/clothing/under/tauruniformscolor.dm rename to modular_nova/modules/customization/modules/clothing/under/tauruniformscolor.dm diff --git a/modular_nova/modules/customization/modules/clothing/under/utility_port/other_port.dm b/modular_nova/modules/customization/modules/clothing/under/utility_port/other_port.dm new file mode 100644 index 00000000000000..d6df8a74055cf5 --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/under/utility_port/other_port.dm @@ -0,0 +1,16 @@ + +/obj/item/clothing/suit/costume/samurai + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + name = "samurai armor" + desc = "A set of ancient-Japan Samurai armor. Despite being a cheap replica, it's still remarkably heavy." + icon_state = "samurai" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/head/costume/kabuto + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' + name = "kabuto" + desc = "An ancient-Japan armored helmet - or a replica of one, at least." + icon_state = "kabuto" + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON diff --git a/modular_nova/modules/customization/modules/clothing/under/utility_port/readme.md b/modular_nova/modules/customization/modules/clothing/under/utility_port/readme.md new file mode 100644 index 00000000000000..2fc4b8fc9de3f7 --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/under/utility_port/readme.md @@ -0,0 +1,47 @@ +## Title: Utility Port + +MODULE ID: utility_port + +### Description: + +Ports several outfits from citbase, with the highlight being Utility Uniforms: dark-grey jumpsuits with departmental markings, with the same stats as the department's default jumpsuit. +It also ports: + Other "utility" uniforms such as a gas/chemical hazard uniform; + Japanese and Victorian costumes; + Two short dresses; + Several departmental/head-of-staff berets; +All items are avaliable through either the Loadout, Vendors, or Both. + + +PART 2! +Ports the rest of what I was given with the utility uniforms, namely the Suits that go with all the previously added outfits. Also tweaks some of the previously added items (i.e., making the gas/chemical haz-uniform actually acidproof) + +### TG Proc/File Changes: + +To show items in vendors: +- core/modules/vending/autodrobe.dm +- core/modules/vending/clothesmate.dm +- core/modules/vending/wardrobes.dm + +### Defines: + +- N/A + +### Master file additions + +To add digitigrade variants: +- Skyrat-tg/modular_nova/master_files/icons/mob/clothing/uniform_digi.dmi +- Skyrat-tg/modular_nova/master_files/icons/mob/clothing/under/uniform_digi.dmi + +### Included files that are not contained in this module: + +Modifications to: +- modules/client/loadout/head.dm +- modules/client/loadout/uniform.dm +- icons/mob/clothing/uniform.dmi +- icons/obj/clothing/uniforms.dmi + +### Credits: + +Orion_the_Fox, with help from SarmentiCampbell +Sprites taken from https://github.com/Citadel-Station-13/Citadel-Station-13/pull/13475 diff --git a/modular_skyrat/modules/customization/modules/clothing/under/utility_port/suits_port.dm b/modular_nova/modules/customization/modules/clothing/under/utility_port/suits_port.dm similarity index 93% rename from modular_skyrat/modules/customization/modules/clothing/under/utility_port/suits_port.dm rename to modular_nova/modules/customization/modules/clothing/under/utility_port/suits_port.dm index bb88ca325dbf63..504750b69dfdb3 100644 --- a/modular_skyrat/modules/customization/modules/clothing/under/utility_port/suits_port.dm +++ b/modular_nova/modules/customization/modules/clothing/under/utility_port/suits_port.dm @@ -1,7 +1,7 @@ //Base Jacket - same stats as /obj/item/clothing/suit/jacket, just toggleable and serving as the base for all the departmental jackets and flannels /obj/item/clothing/suit/toggle/jacket - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' name = "bomber jacket" desc = "A warm bomber jacket, with synthetic-wool lining to keep you nice and warm in the depths of space. Aviators not included." icon_state = "bomberalt" @@ -82,8 +82,8 @@ //Flannels /obj/item/clothing/suit/toggle/jacket/flannel - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' name = "flannel jacket" desc = "A cozy and warm plaid flannel jacket. Praised by Lumberjacks and Truckers alike." icon_state = "flannel" diff --git a/modular_nova/modules/customization/modules/clothing/~donator/donator_clothing.dm b/modular_nova/modules/customization/modules/clothing/~donator/donator_clothing.dm new file mode 100644 index 00000000000000..cc4b0a8d0c2e01 --- /dev/null +++ b/modular_nova/modules/customization/modules/clothing/~donator/donator_clothing.dm @@ -0,0 +1,1844 @@ +/**************NOVA SECTOR REWARDS**************/ +//SUITS +/obj/item/clothing/suit/hooded/wintercoat/colourable + name = "custom winter coat" + icon_state = "winter_coat" + icon = null + worn_icon_state = null + hoodtype = /obj/item/clothing/head/hooded/winterhood/colourable + greyscale_config = /datum/greyscale_config/winter_coat + greyscale_config_worn = /datum/greyscale_config/winter_coat_worn + greyscale_colors = "#666666#CCBBAA#0000FF" + flags_1 = IS_PLAYER_COLORABLE_1 + hood_down_overlay_suffix = "" + /// Whether the hood is flipped up + var/hood_up = FALSE + +/// Called when the hood is worn +/obj/item/clothing/suit/hooded/wintercoat/colourable/on_hood_up(obj/item/clothing/head/hooded/hood) + hood_up = TRUE + +/// Called when the hood is hidden +/obj/item/clothing/suit/hooded/wintercoat/colourable/on_hood_down(obj/item/clothing/head/hooded/hood) + hood_up = FALSE + +//In case colors are changed after initialization +/obj/item/clothing/suit/hooded/wintercoat/colourable/set_greyscale(list/colors, new_config, new_worn_config, new_inhand_left, new_inhand_right) + . = ..() + + if(!hood) + return + + var/list/coat_colors = SSgreyscale.ParseColorString(greyscale_colors) + var/list/new_coat_colors = coat_colors.Copy(1,3) + hood.set_greyscale(new_coat_colors) //Adopt the suit's grayscale coloring for visual clarity. + +//But also keep old method in case the hood is (re-)created later +/obj/item/clothing/suit/hooded/wintercoat/colourable/on_hood_created(obj/item/clothing/head/hooded/hood) + . = ..() + var/list/coat_colors = (SSgreyscale.ParseColorString(greyscale_colors)) + var/list/new_coat_colors = coat_colors.Copy(1,3) + hood.set_greyscale(new_coat_colors) //Adopt the suit's grayscale coloring for visual clarity. + +/obj/item/clothing/head/hooded/winterhood/colourable + icon_state = "hood_winter" + greyscale_config = /datum/greyscale_config/winter_hood + greyscale_config_worn = /datum/greyscale_config/winter_hood/worn + +// NECK + +/obj/item/clothing/neck/cloak/colourable + name = "colourable cloak" + icon_state = "gags_cloak" + greyscale_config = /datum/greyscale_config/cloak + greyscale_config_worn = /datum/greyscale_config/cloak/worn + greyscale_colors = "#917A57#4e412e#4e412e" + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/neck/cloak/colourable/veil + name = "colourable veil" + icon_state = "gags_veil" + greyscale_config = /datum/greyscale_config/cloak/veil + greyscale_config_worn = /datum/greyscale_config/cloak/veil/worn + +/obj/item/clothing/neck/cloak/colourable/boat + name = "colourable boatcloak" + icon_state = "gags_boat" + greyscale_config = /datum/greyscale_config/cloak/boat + greyscale_config_worn = /datum/greyscale_config/cloak/boat/worn + +/obj/item/clothing/neck/cloak/colourable/shroud + name = "colourable shroud" + icon_state = "gags_shroud" + greyscale_config = /datum/greyscale_config/cloak/shroud + greyscale_config_worn = /datum/greyscale_config/cloak/shroud/worn + +/**************CKEY EXCLUSIVES*************/ + +// Donation reward for Grunnyyy +/obj/item/clothing/suit/jacket/ryddid + name = "Ryddid" + desc = "An old worn out piece of clothing belonging to a certain small demon." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + icon_state = "darkcoat" + inhand_icon_state = "greatcoat" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +// Donation reward for Grunnyyy +/obj/item/clothing/neck/cloak/grunnyyy + name = "black and red cloak" + desc = "The design on this seems a little too familiar." + icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi' + icon_state = "infcloak" + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/custom_w.dmi' + w_class = WEIGHT_CLASS_SMALL + body_parts_covered = CHEST|GROIN|LEGS|ARMS + supports_variations_flags = NONE + +// Donation reward for Thedragmeme +// might make it have some flavour functionality in future, a'la rewritable piece of paper - JOKES ON YOU I'M MAKING IT DRAW +/obj/item/canvas/drawingtablet + name = "drawing tablet" + desc = "A portable tablet that allows you to draw. Legends say these can earn the owner a fortune in some sectors of space." + icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi' + icon_state = "drawingtablet" + lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' + inhand_icon_state = "electronic" + item_flags = NOBLUDGEON + w_class = WEIGHT_CLASS_TINY + actions_types = list(/datum/action/item_action/dtselectcolor,/datum/action/item_action/dtcolormenu,/datum/action/item_action/dtcleargrid) + pixel_x = 0 + pixel_y = 0 + width = 28 + height = 26 + nooverlayupdates = TRUE + var/currentcolor = "#ffffff" + var/list/colors = list("Eraser" = "#ffffff") + +/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 + else if(istype(action, /datum/action/item_action/dtcolormenu)) + var/list/selects = colors.Copy() + selects["Save"] = "Save" + selects["Delete"] = "Delete" + var/selection = input(user, "", "Color Menu", currentcolor) as null|anything in selects + if(QDELETED(src) || !user.can_perform_action(src)) + return + switch(selection) + if("Save") + var/name = input(user, "", "Name the color!", "Pastel Purple") as text|null + if(name) + colors[name] = currentcolor + if("Delete") + var/delet = input(user, "", "Color Menu", currentcolor) as null|anything in colors + if(delet) + colors.Remove(delet) + if(null) + return + else + currentcolor = colors[selection] + else if(istype(action, /datum/action/item_action/dtcleargrid)) + var/yesnomaybe = tgui_alert("Are you sure you wanna clear the canvas?", "", list("Yes", "No", "Maybe")) + if(QDELETED(src) || !user.can_perform_action(src)) + return + switch(yesnomaybe) + if("Yes") + reset_grid() + SStgui.update_uis(src) + if("No") + return + if("Maybe") + playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + audible_message(span_warning("The [src] buzzes!")) + return + +/obj/item/canvas/drawingtablet/get_paint_tool_color() + return currentcolor + +/obj/item/canvas/drawingtablet/finalize() + return // no finalizing this piece + +/obj/structure/sign/painting/frame_canvas(mob/user,obj/item/canvas/new_canvas) + if(istype(new_canvas, /obj/item/canvas/drawingtablet)) // NO FINALIZING THIS BITCH. + return FALSE + else + return ..() + +/obj/item/canvas/var/nooverlayupdates = FALSE + +/obj/item/canvas/update_overlays() + if(nooverlayupdates) + return + . = ..() + +/datum/action/item_action/dtselectcolor + name = "Change Color" + desc = "Change your color." + button_icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi' + button_icon_state = "drawingtablet" + +/datum/action/item_action/dtcolormenu + name = "Color Menu" + desc = "Select, save, or delete a color in your tablet's color menu!" + button_icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi' + button_icon_state = "drawingtablet" + +/datum/action/item_action/dtcleargrid + name = "Clear Canvas" + desc = "Clear the canvas of your drawing tablet." + button_icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi' + button_icon_state = "drawingtablet" + +// Donation reward for Thedragmeme +/obj/item/clothing/suit/furcoat + name = "leather coat" + desc = "A thick, comfy looking leather coat. It's got some fluffy fur at the collar and sleeves." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + icon_state = "furcoat" + inhand_icon_state = "hostrench" + blood_overlay_type = "coat" + body_parts_covered = CHEST|GROIN|LEGS|ARMS + cold_protection = CHEST|GROIN|LEGS|ARMS + supports_variations_flags = NONE + +// Donation reward for Thedragmeme +/obj/item/clothing/under/syndicate/tacticool/black + name = "black turtleneck" + desc = "Tacticool as fug. Comfy too." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + icon_state = "black_turtleneck" + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + supports_variations_flags = NONE + armor_type = /datum/armor/clothing_under/none + can_adjust = FALSE //There wasnt an adjustable sprite anyways + has_sensor = HAS_SENSORS //Actually has sensors, to balance the new lack of armor + +/datum/armor/clothing_under/none + +/obj/item/clothing/shoes/jackboots/heel + name = "high-heeled jackboots" + desc = "Almost like regular jackboots... why are they on a high heel?" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/shoes.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/feet.dmi' + icon_state = "heel-jackboots" + supports_variations_flags = NONE + uses_advanced_reskins = FALSE + unique_reskin = NONE + +// Donation reward for Bloodrite +/obj/item/clothing/shoes/clown_shoes/britches + desc = "The prankster's standard-issue clowning shoes. They look extraordinarily cute. Ctrl-click to toggle waddle dampeners." + name = "Britches' shoes" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/shoes.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/feet.dmi' + icon_state = "clown_shoes_cute" + supports_variations_flags = NONE + resistance_flags = FIRE_PROOF + +// Donation reward for Bloodrite +/obj/item/clothing/under/rank/civilian/clown/britches + name = "Britches' dress" + desc = "<i>'HONK!' (but cute)</i>" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + icon_state = "clowndress" + supports_variations_flags = NONE + resistance_flags = FIRE_PROOF + +// Donation reward for Bloodrite +/obj/item/clothing/mask/gas/britches + name = "Britches' mask" + desc = "A true prankster's facial attire. Cute." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/mask.dmi' + icon_state = "cute_mask" + inhand_icon_state = null + dye_color = "clown" + supports_variations_flags = NONE + clothing_flags = MASKINTERNALS + w_class = WEIGHT_CLASS_SMALL + flags_cover = MASKCOVERSEYES + resistance_flags = FIRE_PROOF + +/******CALIGRA DONATIONS******/ +// Donation reward for Farsighted Nightlight +/obj/item/clothing/mask/gas/nightlight + name = "\improper FIR-36 half-face rebreather" + desc = "A close-fitting respirator designed by Forestfel Intersystem Industries and originally meant for Ixian Tajarans, the FIR-36 Rebreather is commonly used by Military and Civilian Personnel alike. It reeks of Militarism." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/mask.dmi' + icon_state = "fir36" + actions_types = list(/datum/action/item_action/adjust) + clothing_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS //same flags as actual sec hailer gas mask + flags_inv = HIDEFACE | HIDESNOUT + flags_cover = NONE + visor_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS + visor_flags_inv = HIDEFACE | HIDESNOUT + w_class = WEIGHT_CLASS_SMALL + tint = 0 + +/obj/item/clothing/mask/gas/nightlight/attack_self(mob/user) + adjustmask(user) + +/obj/item/clothing/mask/gas/nightlight/AltClick(mob/user) + ..() + if(user.can_perform_action(src, NEED_DEXTERITY)) + adjustmask(user) + +/obj/item/clothing/mask/gas/nightlight/examine(mob/user) + . = ..() + . += span_notice("Alt-click [src] to adjust it.") + +/obj/item/clothing/mask/gas/nightlight/alldono //different itempath so regular donators can have it, too + +// Donation reward for Farsighted Nightlight +/obj/item/clothing/mask/gas/nightlight/fir22 + name = "\improper FIR-22 full-face rebreather" + desc = "A full-face respirator designed by Forestfel Intersystem Industries and originally meant for Ixian Tajarans, the FIR-22 Rebreather is a snout-covering variant often seen used by Tajaran Military Personnel. It reeks of militarism." + icon_state = "fir22" + +// Donation reward for Raxraus +/obj/item/clothing/head/caligram_cap_tan + name = "\improper Caligram tan softcap" + desc = "A Caligram's Fleet-branded hat in a '/surprisingly/' tasteful shade of brown." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi' + icon_state = "caligram_cap_tan" + +// Donation reward for Raxraus +/obj/item/clothing/under/jumpsuit/caligram_fatigues_tan + name = "\improper Caligram tan fatigues" + desc = "A set of tan and brown work fatigues bearing a Caligram's Fleet insigna on an armband. Lacks the typical Tajaran extravagance." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + worn_icon_digi = 'modular_nova/master_files/icons/donator/mob/clothing/uniform_digi.dmi' + icon_state = "caligram_fatigues_tan" + worn_icon_state = "caligram_fatigues_tan" + +// Donation reward for Raxraus +/obj/item/clothing/suit/jacket/caligram_parka_tan + name = "\improper Caligram tan parka" + desc = "A tan parka with a fancy black belt and '/Caligram's Fleet/' stitched onto its armband." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + icon_state = "caligram_parka_tan" + body_parts_covered = CHEST|GROIN|ARMS + cold_protection = CHEST|GROIN|LEGS|ARMS|HANDS + +// Donation reward for Raxraus +/obj/item/clothing/suit/armor/vest/caligram_parka_vest_tan + name = "\improper Caligram armored tan parka" + desc = "A tan parka with a fancy black belt, a lightly armored vest and '/Caligram's Fleet/' stitched onto its armband." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + icon_state = "caligram_parka_vest_tan" + inhand_icon_state = "armor" + body_parts_covered = CHEST|GROIN|ARMS + cold_protection = CHEST|GROIN|LEGS|ARMS|HANDS + + +// Donation reward for ChillyLobster +/obj/item/clothing/suit/jacket/brasspriest + name = "brasspriest coat" + desc = "A reddish coat with brass-clad parts embed into said coat. You can hear the faint noise of some cogs turning from time to time inside." + icon_state = "brasspriest" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + body_parts_covered = CHEST|GROIN|LEGS|ARMS + cold_protection = CHEST|GROIN|LEGS|ARMS + +// Donation reward for ChillyLobster +/obj/item/clothing/suit/jacket/hydrogenrobes + name = "metallic-hydrogen robes" + desc = "An incredibly shiny dress that seems to be covered in a very thin sheet of metallic hydrogen all over the textiles. Not very protective." + icon_state = "hydrogenrobes" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + +// Donation reward for ChillyLobster + +/obj/item/clothing/under/wetsuit_norm + name = "fitted wetsuit" + desc = "A fitted wetsuit for trapping in heat and water. Protects against outside elements ever-so-slightly." + icon_state = "wetsuit" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + armor_type = /datum/armor/clothing_under/wetsuit + body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + can_adjust = FALSE + female_sprite_flags = NO_FEMALE_UNIFORM + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +// Donation reward for TheOOZ +/obj/item/clothing/mask/animal/wolf + name = "wolf mask" + desc = "A dark mask in the shape of a wolf's head." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/masks.dmi' + icon_state = "kindle" + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/mask.dmi' + inhand_icon_state = "gasmask_captain" + animal_type = "wolf" + unique_death = 'modular_nova/master_files/sound/effects/wolfhead_curse.ogg' + visor_flags_inv = HIDEFACIALHAIR | HIDESNOUT + flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES | PEPPERPROOF + visor_flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES | PEPPERPROOF + clothing_flags = VOICEBOX_DISABLED | MASKINTERNALS | BLOCK_GAS_SMOKE_EFFECT | GAS_FILTERING + alternate_worn_layer = ABOVE_BODY_FRONT_HEAD_LAYER + use_radio_beeps_tts = TRUE + +/obj/item/clothing/mask/animal/wolf/Initialize(mapload) + . = ..() + var/obj/item/clothing/mask/gas/sechailer/sechailer_type = /obj/item/clothing/mask/gas/sechailer + voice_filter = initial(sechailer_type.voice_filter) + +// Donation reward for Random516 +/obj/item/clothing/head/drake_skull + name = "skull of an ashdrake" + desc = "How did they get this?" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi' + icon_state = "drake_skull" + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/large-worn-icons/32x64/head.dmi' + flags_cover = HEADCOVERSEYES + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR + supports_variations_flags = NONE + +// Donation reward for Random516 +/obj/item/clothing/gloves/fingerless/blutigen_wraps + name = "Blutigen wraps" + desc = "The one who wears these had everything and yet lost it all..." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/gloves.dmi' + icon_state = "blutigen_wraps" + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/hands.dmi' + +// Donation reward for Random516 +/obj/item/clothing/suit/blutigen_kimono + name = "Blutigen kimono" + desc = "For the eyes bestowed upon this shall seek adventure..." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + icon_state = "blutigen_kimono" + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + body_parts_covered = CHEST|GROIN|ARMS + supports_variations_flags = NONE + +// Donation reward for Random516 +/obj/item/clothing/under/custom/blutigen_undergarment + name = "Dragon undergarments" + desc = "The Dragon wears the sexy?" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + icon_state = "blutigen_undergarment" + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + supports_variations_flags = NONE + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + +/obj/item/clothing/gloves/ring/hypno + var/list/spans = list() + actions_types = list(/datum/action/item_action/hypno_whisper) + +// Donation reward for CoffeePot +/obj/item/clothing/gloves/ring/hypno/coffeepot + name = "hypnodemon's ring" + desc = "A pallid, softly desaturated-looking gold ring that doesn't look like it belongs. It's hard to put one's finger on why it feels at odds with the world around it - the shine coming off it looks like it could be a mismatch with the lighting in the room, or it could be that it seems to glint and twinkle occasionally when there's no obvious reason for it to - though only when you're not really looking." + spans = list("velvet") + +// Donation reward for Bippys +/obj/item/clothing/gloves/ring/hypno/bippys + name = "hypnobot hexnut" + desc = "A silver bolt component that once belonged to a very peculiar IPC. It's large enough to be worn as a ring on nearly any finger, and is said to amplify the voice of one's mind to another's in the softness of a Whisper..." + icon_state = "ringsilver" + worn_icon_state = "sring" + spans = list("hexnut") + +/datum/action/item_action/hypno_whisper + name = "Hypnotic Whisper" + +/obj/item/clothing/gloves/ring/hypno/ui_action_click(mob/living/user, action) + if(!isliving(user) || !can_use(user)) + return + var/message = input(user, "Speak with a hypnotic whisper", "Whisper") + if(QDELETED(src) || QDELETED(user) || !message || !user.can_speak()) + return + user.whisper(message, spans = spans) + +// Donation reward for SlippyJoe +/obj/item/clothing/head/avipilot + name = "smuggler's flying cap" + desc = "Shockingly, despite space winds, and the lack of any practicality, this pilot cap seems to be fairly well standing, there's a rabbit head seemingly stamped into the side of it." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi' + icon_state = "avipilotup" + inhand_icon_state = "rus_ushanka" + flags_inv = HIDEEARS|HIDEHAIR + cold_protection = HEAD + min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT //about as warm as an ushanka + actions_types = list(/datum/action/item_action/adjust) + supports_variations_flags = NONE + var/goggles = FALSE + +/obj/item/clothing/head/avipilot/proc/adjust_goggles(mob/living/carbon/user) + if(user?.incapacitated()) + return + if(goggles) + icon_state = "avipilotup" + to_chat(user, span_notice("You put all your effort into pulling the goggles up.")) + else + icon_state = "avipilotdown" + to_chat(user, span_notice("You focus all your willpower to put the goggles down on your eyes.")) + goggles = !goggles + if(user) + user.head_update(src, forced = 1) + user.update_mob_action_buttons() + +/obj/item/clothing/head/avipilot/ui_action_click(mob/living/carbon/user, action) + adjust_goggles(user) + +/obj/item/clothing/head/avipilot/attack_self(mob/living/carbon/user) + adjust_goggles(user) + +// Donation reward for NetraKyram - public use allowed via the command vendor +/obj/item/clothing/under/rank/captain/dress + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + worn_icon_digi = 'modular_nova/master_files/icons/donator/mob/clothing/uniform_digi.dmi' + name = "captain's dress" + desc = "It's a blue dress with some worn-gold markings denoting the rank of \"Captain\"." + icon_state = "dress_cap_s" + worn_icon_state = "dress_cap_s" + body_parts_covered = CHEST|GROIN|ARMS + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + can_adjust = FALSE + +// Donation reward for NetraKyram +/obj/item/clothing/under/rank/blueshield/netra + name = "black and silver armored dress" + desc = "An ankle length black and silver dress, made out of some shiny synthetic material with inlaid kevlar shards and silver reinforcements, a silver ring surrounds the collar, and it doesn't appear to have a zipper... How does somebody put this thing on anyways?" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + icon_state = "silver_dress" + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + worn_icon_digi = null + supports_variations_flags = NONE + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + +// Donation reward for NetraKyram +/obj/item/clothing/gloves/netra + name = "black and silver gloves" + desc = "Some black gloves with silver reinforcements, made of a shiny synthetic material." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/gloves.dmi' + icon_state = "silver_dress_gloves" + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/hands.dmi' + +// Donation reward for NetraKyram +/obj/item/clothing/shoes/jackboots/netra + name = "polished jackboots" + desc = "Some standard issue jackboots, spit-shined to a reflective sheen, wreaking of the scent of silicon parade polish." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/shoes.dmi' + icon_state = "silver_dress_boots" + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/feet.dmi' + supports_variations_flags = NONE + uses_advanced_reskins = FALSE + + +/****************LEGACY REWARDS***************/ +// Donation reward for inferno707 +/obj/item/clothing/neck/cloak/inferno + name = "Kiara's cloak" + desc = "The design on this seems a little too familiar." + icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi' + icon_state = "infcloak" + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/custom_w.dmi' + w_class = WEIGHT_CLASS_SMALL + body_parts_covered = CHEST|GROIN|LEGS|ARMS + +// Donation reward for inferno707 +/obj/item/clothing/neck/inferno_collar + name = "Kiara's collar" + desc = "A soft black collar that seems to stretch to fit whoever wears it." + icon_state = "infcollar" + icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/custom_w.dmi' + alternate_worn_layer = UNDER_SUIT_LAYER + /// What's the name on the tag, if any? + var/tagname = null + /// What treat item spawns inside the collar? + var/treat_path = /obj/item/food/cookie + +/obj/item/clothing/neck/inferno_collar/Initialize(mapload) + . = ..() + create_storage(storage_type = /datum/storage/pockets/small/collar) + if(treat_path) + new treat_path(src) + +/obj/item/clothing/neck/inferno_collar/attack_self(mob/user) + tagname = stripped_input(user, "Would you like to change the name on the tag?", "Name your new pet", "Kiara", MAX_NAME_LEN) + if(tagname) + name = "[initial(name)] - [tagname]" + +// Donation reward for inferno707 +/obj/item/clothing/accessory/medal/steele + name = "Insignia Of Steele" + desc = "An intricate pendant given to those who help a key member of the Steele Corporation." + icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi' + icon_state = "steele" + medaltype = "medal-silver" + +// Donation reward for inferno707 +/obj/item/toy/darksabre + name = "Kiara's sabre" + desc = "This blade looks as dangerous as its owner." + icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/custom_w.dmi' + icon_state = "darksabre" + lefthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_left.dmi' + righthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_right.dmi' + +/obj/item/toy/darksabre/get_belt_overlay() + return mutable_appearance('modular_nova/master_files/icons/donator/obj/custom.dmi', "darksheath-darksabre") + +// Donation reward for inferno707 +/obj/item/storage/belt/sabre/darksabre + name = "ornate sheathe" + desc = "An ornate and rather sinister looking sabre sheathe." + icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/custom_w.dmi' + icon_state = "darksheath" + worn_icon_state = "darksheath" + +/obj/item/storage/belt/sabre/darksabre/Initialize(mapload) + . = ..() + atom_storage.set_holdable(list( + /obj/item/toy/darksabre + )) + +/obj/item/storage/belt/sabre/darksabre/PopulateContents() + new /obj/item/toy/darksabre(src) + update_icon() + +// Donation reward for inferno707 +/obj/item/clothing/suit/armor/vest/darkcarapace + name = "dark armor" + desc = "A dark, non-functional piece of armor sporting a red and black finish." + icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/custom_w.dmi' + icon_state = "darkcarapace" + blood_overlay_type = "armor" + dog_fashion = /datum/dog_fashion/back + supports_variations_flags = NONE + armor_type = /datum/armor/none + +// Donation reward for inferno707 +/obj/item/clothing/mask/hheart + name = "Hollow Heart" + desc = "It's an odd ceramic mask. Set in the internal side are several suspicious electronics branded by Steele Tech." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/masks.dmi' + icon_state = "hheart" + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/mask.dmi' + var/c_color_index = 1 + var/list/possible_colors = list("off", "blue", "red") + actions_types = list(/datum/action/item_action/hheart) + supports_variations_flags = NONE + +/obj/item/clothing/mask/hheart/Initialize(mapload) + . = ..() + update_icon() + +/obj/item/clothing/mask/hheart/update_icon() + . = ..() + icon_state = "hheart-[possible_colors[c_color_index]]" + +/datum/action/item_action/hheart + name = "Toggle Mode" + desc = "Toggle the color of the hollow heart." + +/obj/item/clothing/mask/hheart/ui_action_click(mob/user, action) + . = ..() + if(istype(action, /datum/action/item_action/hheart)) + if(!isliving(user)) + return + var/mob/living/ooser = user + var/the = possible_colors.len + var/index = 0 + if(c_color_index >= the) + index = 1 + else + index = c_color_index + 1 + c_color_index = index + update_icon() + ooser.update_worn_mask() + ooser.update_mob_action_buttons() + to_chat(ooser, span_notice("You toggle the [src] to [possible_colors[c_color_index]].")) + +// Donation reward for asky / Zulie +/obj/item/clothing/suit/hooded/cloak/zuliecloak + name = "Project: Zul-E" + desc = "A standard version of a prototype cloak given out by Nanotrasen higher ups. It's surprisingly thick and heavy for a cloak despite having most of it's tech stripped. It also comes with a bluespace trinket which calls it's accompanying hat onto the user. A worn inscription on the inside of the cloak reads 'Fleuret' ...the rest is faded away." + icon_state = "zuliecloak" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/cloaks.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/neck.dmi' + hoodtype = /obj/item/clothing/head/hooded/cloakhood/zuliecloak + body_parts_covered = CHEST|GROIN|ARMS + slot_flags = ITEM_SLOT_OCLOTHING | ITEM_SLOT_NECK //it's a cloak. it's cosmetic. so why the hell not? what could possibly go wrong? + supports_variations_flags = NONE + +/obj/item/clothing/head/hooded/cloakhood/zuliecloak + name = "NT special issue" + desc = "This hat is unquestionably the best one, bluespaced to and from CentCom. It smells of Fish and Tea with a hint of antagonism" + icon_state = "zuliecap" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/cloaks.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/neck.dmi' + flags_inv = null + supports_variations_flags = NONE + +// Donation reward for Lyricalpaws +/obj/item/clothing/neck/cloak/healercloak + name = "legendary healer's cloak" + desc = "Worn by the most skilled professional medics on the station, this legendary cloak is only attainable by becoming the pinnacle of healing. This status symbol represents the wearer has spent countless years perfecting their craft of helping the sick and wounded." + icon_state = "healercloak" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/cloaks.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/neck.dmi' + +// Donation reward for Kathrin Bailey / Floof Ball +/obj/item/clothing/under/custom/lannese + name = "Lannese dress" + desc = "An alien cultural garment for women, coming from a distant planet named Cantalan." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + icon_state = "lannese" + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + supports_variations_flags = NONE + inhand_icon_state = "firefighter" + can_adjust = TRUE + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + body_parts_covered = CHEST|GROIN|LEGS|FEET + +/obj/item/clothing/under/custom/lannese/vambrace + desc = "An alien cultural garment for women, coming from a distant planet named Cantalan. Shiny vambraces included!" + icon_state = "lannese_vambrace" + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + body_parts_covered = CHEST|GROIN|LEGS|ARMS|FEET + +// Donation reward for Hacker T.Dog +/obj/item/clothing/suit/scraparmour + name = "scrap armour" + desc = "A shoddily crafted piece of armour. It provides no benefit apart from being clunky." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + icon_state = "scraparmor" + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + worn_icon_state = "scraparmor" + body_parts_covered = CHEST + +// Donation reward for Enzoman +/obj/item/clothing/mask/luchador/enzo + name = "mask of El Red Templar" + desc = "A mask belonging to El Red Templar, a warrior of lucha. Taking it from him is not recommended." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/mask.dmi' + icon_state = "luchador" + worn_icon_state = "luchador" + clothing_flags = MASKINTERNALS + supports_variations_flags = NONE + +// Donation Reward for Grand Vegeta +/obj/item/clothing/under/mikubikini + name = "starlight singer bikini" + desc = " " + icon_state = "mikubikini" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + worn_icon_state = "mikubikini" + body_parts_covered = CHEST|GROIN + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + +// Donation Reward for Grand Vegeta +/obj/item/clothing/suit/mikujacket + name = "starlight singer jacket" + desc = " " + icon_state = "mikujacket" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + worn_icon_state = "mikujacket" + +// Donation Reward for Grand Vegeta +/obj/item/clothing/head/mikuhair + name = "starlight singer hair" + desc = " " + icon_state = "mikuhair" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi' + worn_icon_state = "mikuhair" + flags_inv = HIDEHAIR + +// Donation Reward for Grand Vegeta +/obj/item/clothing/gloves/mikugloves + name = "starlight singer gloves" + desc = " " + icon_state = "mikugloves" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/gloves.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/hands.dmi' + worn_icon_state = "mikugloves" + +// Donation Reward for Grand Vegeta +/obj/item/clothing/shoes/sneakers/mikuleggings + name = "starlight singer leggings" + greyscale_config = null + greyscale_config_worn = null + greyscale_colors = null + desc = " " + icon_state = "mikuleggings" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/shoes.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/feet.dmi' + worn_icon_state = "mikuleggings" + +// Donation reward for CandleJax +/obj/item/clothing/head/helmet/space/plasmaman/candlejax + name = "emission's helmet" + desc = "A special containment helmet designed for heavy usage. Multiple dings and notches are on this one." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi' + icon_state = "emissionhelm" + + +// Donation reward for CandleJax +/obj/item/clothing/head/helmet/space/plasmaman/candlejax2 + name = "azulean's environment helmet" + desc = "An Azulean-made Enviro-Helmet, adjusted for the unique skull shape typical of the species. Alongside the standard features, it includes an embossment of the Azulean Crest on the back of the helmet." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi' + icon_state = "anahead" + +// Donation reward for CandleJax +/obj/item/clothing/under/plasmaman/candlejax + name = "emission's containment suit" + desc = "A modified envirosuit featuring a reserved color scheme." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + icon_state = "emissionsuit" + +// Donation reward for CandleJax +/obj/item/clothing/under/plasmaman/candlejax2 + name = "azulean's environment suit" + desc = "An Azulean-made Enviro-Suit. Fitted to the Azulean form, it has surplus containment fabric designed to give the solidified mass of plasma that was once a tail some breathing room." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + icon_state = "ana_envirosuit" + +// Donation reward for CandleJax +/obj/item/clothing/under/plasmaman/jax2 + name = "xuracorp hazard underfitting" + desc = "A hazard suit fitted with bio-resistant fibers. Utilizes self-sterilizing pumps fitted in the back." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + icon_state = "plasmaman_jax" + +// Donation reward for Raxraus +/obj/item/clothing/shoes/combat/rax + name = "tactical boots" + desc = "Tactical and sleek. This model seems to resemble Armadyne's." + icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi' + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/feet_digi.dmi' + icon_state = "armadyne_boots" + worn_icon_state = "armadyne_boots" + +// Donation reward for Raxraus +/obj/item/clothing/suit/armor/vest/warden/rax + name = "peacekeeper jacket" + desc = "A navy-blue armored jacket with blue shoulder designations." + +// Donation reward for Raxraus +/obj/item/clothing/under/rank/security/rax + name = "banded uniform" + desc = "Personalized and tailored to fit, this uniform is designed to protect without compromising its stylishness." + icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi' + worn_icon_digi = 'modular_nova/master_files/icons/donator/mob/clothing/uniform_digi.dmi' + icon_state = "hos_black" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + +// Donation reward for DeltaTri +/obj/item/clothing/suit/jacket/delta + name = "grey winter hoodie" + desc = "A plain old grey hoodie. It has some puffing on the inside, and a animal fur trim around half of the hood." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + icon_state = "greycoat" + body_parts_covered = CHEST|GROIN|ARMS + cold_protection = CHEST|GROIN|ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + +// Donation reward for Cherno_00 +/obj/item/clothing/suit/jacket/cherno + name = "silver-buttoned coat" + desc = "A comfy-looking blue coat. It looks a bit fancy, with shiny silver buttons and a few belts!" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + icon_state = "chernocoat" + body_parts_covered = CHEST|GROIN|ARMS + cold_protection = CHEST|GROIN|ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + +// Donation reward for GoldenAlpharex +/obj/item/clothing/glasses/welding/steampunk_goggles + name = "steampunk goggles" + desc = "This really feels like something you'd expect to see sitting on top of a certain ginger's head... They have a rather fancy brass trim around the lenses." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/glasses.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/eyes.dmi' + icon_state = "goldengoggles" + slot_flags = ITEM_SLOT_EYES | ITEM_SLOT_HEAD // Making it fit in both first just so it can properly fit on the head slot in the loadout + flash_protect = FLASH_PROTECTION_NONE + flags_cover = GLASSESCOVERSEYES + custom_materials = null // Don't want that to go in the autolathe + visor_vars_to_toggle = 0 + tint = 0 + + /// Was welding protection added yet? + var/welding_upgraded = FALSE + /// Was welding protection toggled on, if welding_upgraded is TRUE? + var/welding_protection = FALSE + /// The sound played when toggling the shutters. + var/shutters_sound = 'sound/effects/clock_tick.ogg' + +/obj/item/clothing/glasses/welding/steampunk_goggles/Initialize(mapload) + . = ..() + visor_toggling() + +/obj/item/clothing/glasses/welding/steampunk_goggles/examine(mob/user) + . = ..() + if(welding_upgraded) + . += "It has been upgraded with welding shutters, which are currently [welding_protection ? "closed" : "opened"]." + +/obj/item/clothing/glasses/welding/steampunk_goggles/item_action_slot_check(slot, mob/user) + . = ..() + if(. && (slot & ITEM_SLOT_HEAD)) + return FALSE + +/obj/item/clothing/glasses/welding/steampunk_goggles/attack_self(mob/user) + if(user.get_item_by_slot(ITEM_SLOT_HEAD) == src) + to_chat(user, span_warning("You can't seem to slip those on your eyes from the top of your head!")) + return + . = ..() + +/obj/item/clothing/glasses/welding/steampunk_goggles/visor_toggling() + . = ..() + slot_flags = up ? ITEM_SLOT_EYES | ITEM_SLOT_HEAD : ITEM_SLOT_EYES + toggle_vision_effects() + +/obj/item/clothing/glasses/welding/steampunk_goggles/weldingvisortoggle(mob/user) + . = ..() + handle_sight_updating(user) + +/obj/item/clothing/glasses/welding/steampunk_goggles/attackby(obj/item/attacking_item, mob/living/user, params) + if(!istype(attacking_item, /obj/item/clothing/glasses/welding)) + return ..() + + if(welding_upgraded) + to_chat(user, span_warning("\The [src] was already upgraded to have welding protection!")) + return + qdel(attacking_item) + welding_upgraded = TRUE + to_chat(user, span_notice("You upgrade \the [src] with some welding shutters, offering you the ability to toggle welding protection!")) + actions += new /datum/action/item_action/toggle_steampunk_goggles_welding_protection(src) + +/// Proc that handles the whole toggling the welding protection on and off, with user feedback. +/obj/item/clothing/glasses/welding/steampunk_goggles/proc/toggle_shutters(mob/user) + if(!can_use(user) || !user) + return FALSE + if(!toggle_welding_protection(user)) + return FALSE + + to_chat(user, span_notice("You slide \the [src]'s welding shutters slider, [welding_protection ? "closing" : "opening"] them.")) + playsound(user, shutters_sound, 100, TRUE) + if(iscarbon(user)) + var/mob/living/carbon/carbon_user = user + carbon_user.head_update(src, forced = 1) + update_item_action_buttons() + return TRUE + +/// This is the proc that handles toggling the welding protection, while also making sure to update the sight of a mob wearing it. +/obj/item/clothing/glasses/welding/steampunk_goggles/proc/toggle_welding_protection(mob/user) + if(!welding_upgraded) + return FALSE + welding_protection = !welding_protection + + visor_vars_to_toggle = welding_protection ? VISOR_FLASHPROTECT | VISOR_TINT : initial(visor_vars_to_toggle) + toggle_vision_effects() + // We also need to make sure the user has their vision modified. We already checked that there was a user, so this is safe. + handle_sight_updating(user) + return TRUE + +/// Proc handling changing the flash protection and the tint of the goggles. +/obj/item/clothing/glasses/welding/steampunk_goggles/proc/toggle_vision_effects() + if(welding_protection) + if(visor_vars_to_toggle & VISOR_FLASHPROTECT) + flash_protect = up ? FLASH_PROTECTION_NONE : FLASH_PROTECTION_WELDER + else + flash_protect = FLASH_PROTECTION_NONE + tint = flash_protect + +/// Proc handling to update the sight of the user, while forcing an update_tint() call every time, due to how the welding protection toggle works. +/obj/item/clothing/glasses/welding/steampunk_goggles/proc/handle_sight_updating(mob/user) + if(user && (user.get_item_by_slot(ITEM_SLOT_HEAD) == src || user.get_item_by_slot(ITEM_SLOT_EYES) == src)) + user.update_sight() + if(iscarbon(user)) + var/mob/living/carbon/carbon_user = user + carbon_user.update_tint() + carbon_user.head_update(src, forced = TRUE) + +/obj/item/clothing/glasses/welding/steampunk_goggles/ui_action_click(mob/user, actiontype, is_welding_toggle = FALSE) + if(!is_welding_toggle) + return ..() + else + toggle_shutters(user) + +/// Action button for toggling the welding shutters (aka, welding protection) on or off. +/datum/action/item_action/toggle_steampunk_goggles_welding_protection + name = "Toggle Welding Shutters" + +/// We need to do a bit of code duplication here to ensure that we do the right kind of ui_action_click(), while keeping it modular. +/datum/action/item_action/toggle_steampunk_goggles_welding_protection/Trigger(trigger_flags) + if(!IsAvailable()) + return FALSE + if(SEND_SIGNAL(src, COMSIG_ACTION_TRIGGER, src) & COMPONENT_ACTION_BLOCK_TRIGGER) + return FALSE + if(!target || !istype(target, /obj/item/clothing/glasses/welding/steampunk_goggles)) + return FALSE + + var/obj/item/clothing/glasses/welding/steampunk_goggles/goggles = target + goggles.ui_action_click(owner, src, is_welding_toggle = TRUE) + return TRUE + +// End of the code for GoldenAlpharex's donator item :^) + +// Donation reward for MyGuy49 +/obj/item/clothing/suit/cloak/ashencloak + name = "ashen wastewalker cloak" + desc = "A cloak of advanced make. Clearly beyond what ashwalkers are capable of, it was probably pulled from a downed vessel or something. It seems to have been reinforced with goliath hide and watcher sinew, and the hood has been torn off." + icon_state = "ashencloak" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + body_parts_covered = CHEST|LEGS|ARMS + supports_variations_flags = NONE + +//Donation reward for Hacker T.Dog +/obj/item/clothing/head/nanotrasen_consultant/hubert + name = "CC ensign's cap" + desc = "A tailor made peaked cap, denoting the rank of Ensign." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi' + icon_state = "CCofficerhat" + +//Donation reward for Hacker T.Dog +/obj/item/clothing/suit/armor/vest/nanotrasen_consultant/hubert + name = "CC ensign's armoured vest" + desc = "A tailor made Ensign's armoured vest, providing the same protection - but in a more stylish fashion." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + icon_state = "CCvest" + +//Donation reward for Hacker T.Dog +/obj/item/clothing/under/rank/nanotrasen_consultant/hubert + name = "CC ensign's uniform" + desc = "A tailor-made Ensign's uniform, various medals and chains hang down from it." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + icon_state = "CCofficer" + +// Donation reward for Cherno_00 +/obj/item/clothing/head/costume/ushanka/frosty + name = "blue ushanka" + desc = "A dark blue ushanka with a hand-stitched snowflake on the front. Cool to the touch." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi' + icon_state = "fushankadown" + upsprite = "fushankaup" + downsprite = "fushankadown" + +// Donation reward for M97screwsyourparents +/obj/item/clothing/neck/cross + name = "silver cross" + desc = "A silver cross to be worn on a chain around your neck. Certain to bring you favour from up above." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/necklaces.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/neck.dmi' + icon_state = "cross" + +// Donation reward for gamerguy14948 +/obj/item/storage/belt/fannypack/occult + name = "trinket belt" + desc = "A belt covered in various trinkets collected through time. Doesn't look like there's much space for anything else nowadays." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/belts.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/belt.dmi' + icon_state = "occultfannypack" + worn_icon_state = "occultfannypack" + +// Donation reward for gamerguy14948 +/obj/item/clothing/under/occult + name = "occult collector's outfit" + desc = "A set of clothes fit for someone dapper that isn't afraid of getting dirty." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + icon_state = "occultoutfit" + supports_variations_flags = NONE + +// Donation reward for gamerguy14948 +/obj/item/clothing/head/hooded/occult + name = "hood" + desc = "Certainly makes you look more ominous." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi' + icon_state = "occulthood" + supports_variations_flags = NONE + +// Donation reward for gamerguy14948 +/obj/item/clothing/suit/hooded/occult + name = "occult collector's coat" + desc = "A big, heavy coat lined with leather and ivory cloth, adorned with a hood. It looks dusty." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + icon_state = "occultcoat" + hoodtype = /obj/item/clothing/head/hooded/occult + supports_variations_flags = NONE + +// Donation reward for Octus +/obj/item/clothing/mask/breath/vox/octus + name = "sinister visor" + desc = "Skrektastic." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/mask.dmi' + worn_icon_vox = 'modular_nova/master_files/icons/donator/mob/clothing/mask_vox.dmi' + icon_state = "death" + +// Donation reward for 1ceres +/obj/item/clothing/glasses/rosecolored + name = "rose-colored glasses" + desc = "Goggle-shaped glasses that seem to have a HUD-like feed in some odd line-based script. It doesn’t look like they were made by NT." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/glasses.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/eyes.dmi' + icon_state = "rose" + +// Donation reward for Fuzlet +/obj/item/card/fuzzy_license + name = "license to hug" + desc = "A very official looking license. Not actually endorsed by Nanotrasen." + icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi' + icon_state = "license" + + var/possible_types = list( + "hug", + "snuggle", + "cuddle", + "kiss", + "feed Dan Kelly", + "hoard Shinzo Shore", + "spoil friends", + "hold hands", + "have this license", + "squeak", + "cute", + "pat", + "administer plushies", + "distribute cookies", + "sex", + "weh") + +/obj/item/card/fuzzy_license/attack_self(mob/user) + if(Adjacent(user)) + user.visible_message(span_notice("[user] shows you: [icon2html(src, viewers(user))] [src.name]."), span_notice("You show \the [src.name].")) + add_fingerprint(user) + +/obj/item/card/fuzzy_license/attackby(obj/item/used, mob/living/user, params) + if(user.ckey != "fuzlet") + return + + if(istype(used, /obj/item/pen) || istype(used, /obj/item/toy/crayon)) + var/choice = input(user, "Select the license type", "License Type Selection") as null|anything in possible_types + if(!isnull(choice)) + name = "license to [choice]" + +// Donation reward for 1ceres +/obj/item/clothing/suit/jacket/gorlex_harness + name = "engine technician harness" + desc = "A blood-red engineering technician harness. You can't seem to figure out a use to it, but it seems to seal magnetically in some places." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + icon_state = "gorlexharness" + +// Donation reward for 1ceres +/obj/item/poster/korpstech + name = "Korps Genetics poster" + poster_type = /obj/structure/sign/poster/contraband/korpstech + icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi' + icon_state = "rolled_poster" + +/obj/structure/sign/poster/contraband/korpstech + name = "Korps Genetics" + desc = "This poster bears a huge, pink helix on it, with smaller text underneath it that reads 'The Korps institute, advancing the Genetics field since 2423!'" + icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi' + icon_state = "korpsposter" + +MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32) + +// Donation reward for Kay-Nite +/obj/item/clothing/glasses/eyepatch/rosecolored + name = "rose-colored eyepatch" + desc = "A customized eyepatch with a bright pink HUD floating in front of it. It looks like there's more to it than just an eyepatch, considering the materials it's made of." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/glasses.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/eyes.dmi' + icon_state = "rosepatch_R" + base_icon_state = "rosepatch" + +// Donation reward for Cimika +/obj/item/clothing/suit/toggle/labcoat/nova/tenrai + name = "Tenrai labcoat" + desc = "A labcoat crafted from a variety of pristine materials, sewn together with a frightening amount of skill. The fabric is aery, smooth as silk, and exceptionally pleasant to the touch. The golden stripes are visible in the dark, working as a beacon to the injured. A small label on the inside of it reads \"Tenrai Kitsunes Supremacy\"." + base_icon_state = "tenraicoat" + icon_state = "tenraicoat" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/toggle/labcoat/nova/tenrai/worn_overlays(mutable_appearance/standing, isinhands, icon_file) + . = ..() + if(!isinhands) + . += emissive_appearance(icon_file, "[icon_state]-emissive", src, alpha = src.alpha) + +//Donation reward for RealWinterFrost +/obj/item/clothing/neck/cloak/fluffycloak + name = "Cloak of the Fluffy One" + desc = "Hugs and kisses is only what this one knows, may their hugs be for all and not for their own \"For Fuffy Use Only\"." + icon_state = "fluffycloak" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/cloaks.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/neck.dmi' + +/obj/item/clothing/neck/cloak/fluffycloak/worn_overlays(mutable_appearance/standing, isinhands, icon_file) + . = ..() + if(!isinhands) + . += emissive_appearance(icon_file, "[icon_state]-emissive", src, alpha = src.alpha) + + +/obj/item/clothing/mask/gas/larpswat + name = "Foam Force SWAT Mask" + desc = "What seems to be a SWAT mask at first, is actually a gasmask that has replica parts of a SWAT mask made from cheap plastic. Hey at least it looks good if you enjoy looking like a security larper." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/mask.dmi' + icon_state = "larpswat" + supports_variations_flags = NONE + +// Donation reward for Cimika, on behalf of tf4 +/obj/item/clothing/neck/fishpendant + name = "fish necklace" + desc = "A simple, silver necklace with a blue tuna pendant.\n\"L. Alazawi\" is inscribed on the back. You get the feeling it would go well with potatoes and green beans." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/necklaces.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/neck.dmi' + icon_state = "fishpendant" + +// Donation reward for Weredoggo +/obj/item/hairbrush/tactical + name = "tactical hairbrush" + desc = "Sometimes, after a brush with death, a good grooming is just the thing for tactical stress relief. " + icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi' + lefthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_left.dmi' + righthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_right.dmi' + icon_state = "tacticalbrush" + inhand_icon_state = "tacticalbrush" + +// Donation reward for ultimarifox +/obj/item/clothing/under/rank/security/head_of_security/alt/roselia + name = "black and red turtleneck" + desc = "A black turtleneck with red livery attached. Reminds you of a time before the color blue. It seems padded to hell and back as well." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + icon_state = "hosaltred" + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + worn_icon_digi = null + +/obj/item/clothing/glasses/hud/security/sunglasses/gars/giga/roselia + name = "red-tinted giga HUD gar glasses" + desc = "GIGA GAR glasses with a security hud implanted in the lens. Reminds you of a time before the color blue." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/glasses.dmi' + icon_state = "supergarsred" + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/eyes.dmi' + +//Donation reward for Konstyantyn +/obj/item/clothing/accessory/badge/holo/jade + name = "jade holobadge" + desc = "A strangely green holobadge. 'Lieutenant Uriah' is stamped onto it, above the letters JS." + icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/custom_w.dmi' + icon_state = "greenbadge" + +// Donation reward for Dudewithatude +/obj/item/clothing/suit/toggle/rainbowcoat + name = "rainbow coat" + desc = "A wonderfully brilliant coat that displays the color of the rainbow!" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + icon_state = "rainbowcoat" + base_icon_state = "rainbowcoat" + +// Donation reward for M97screwsyourparents +/obj/item/clothing/head/recruiter_cap + name = "recruiter cap" + desc = "Hey, free college!" + icon_state = "officerhat" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi' + worn_icon_state = "officerhat" + +// Donation reward for M97screwsyourparents +/obj/item/clothing/suit/toggle/recruiter_jacket + name = "recruiter jacket" + desc = "Hey, free college!" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + icon_state = "officerjacket" + base_icon_state = "officerjacket" + +// Donation reward for M97screwsyourparents +/obj/item/clothing/under/recruiter_uniform + name = "recruiter uniform" + desc = "Hey, free college!" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + icon_state = "oldmarine_whites" + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + worn_icon_digi = null + +//Donation reward for Tetrako +/obj/item/clothing/under/nt_idol_skirt + name = "\improper NT Idol's suitskirt" + desc = "This outfit resembles much the same as other ranking NT Officers, but comes with certain bells and whistles, like frills around the dress, slight puffs around the shoulders and most importantly, several golden buckles to accentuate the green! The only thing fit for NT's very own idols to wear!" + icon = 'icons/obj/clothing/under/centcom.dmi' + worn_icon = 'icons/mob/clothing/under/centcom.dmi' + icon_state = "centcom_skirt" + inhand_icon_state = "dg_suit" + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + body_parts_covered = CHEST|GROIN|ARMS + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +// Donation reward for SlippyJoe +/obj/item/clothing/accessory/hypno_watch + name = "cracked pocket watch" + desc = "A shining pocket watch, cast in gold and embossed with metallic swirls that almost seem amethyst under the right light... There's a button on the top to unlatch the front panel, although all that's inside is a layer of cracked glass, the argent hands stuck pointing to 7:07 PM. The brushed silver of these arrows almost seems to swirl if one's gaze lingers for too long. Despite its inert appearance, the eerie mechanical sound of gears turning and clicking in place seems to quietly ring out from the artifact. In the right hands..." + icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/custom_w.dmi' + lefthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_left.dmi' + righthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_right.dmi' + worn_icon_state = "pocketwatch" + icon_state = "pocketwatch" + inhand_icon_state = "pocketwatch" + var/list/spans = list("velvet") + actions_types = list(/datum/action/item_action/hypno_whisper) + +//TODO: make a component for all that various hypno stuff instead of adding it to items individually +/obj/item/clothing/accessory/hypno_watch/ui_action_click(mob/living/user, action) + if(!isliving(user) || !can_use(user)) + return + var/message = input(user, "Speak with a hypnotic whisper", "Whisper") + if(QDELETED(src) || QDELETED(user) || !message || !user.can_speak()) + return + user.whisper(message, spans = spans) + +/obj/item/clothing/accessory/hypno_watch/examine() + . = ..() + . += span_boldwarning("Who knows what it could be used for?") + +// Donation reward for BoisterousBeebz + +/obj/item/clothing/under/bubbly_clown/skirt + name = "bubbly clown dress" + desc = "A bright and cheerful clown dress, honk!" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + icon_state = "bubbly_clown_dress" + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + body_parts_covered = CHEST|GROIN|ARMS + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +// Donation reward for Sweetsoulbrother +/obj/item/coin/donator/marsoc + name = "MARSOC Challenge Coin" + desc = "This is a challenge coin given to all MARSOC members upon honorable separation from the Corps. \ + The coin has the insignia of the Marine Special Operations Command on one side, and the Sol Federation Marine Corps logo on the other. \ + This one has an engraving on the Marine Corps logo side, etched in a circle around it: \ + \"To Staff Sargent Henry Rockwell, for his exemplary service to the Special Operations community and his outstanding moral fiber \ + and shining example to the core values of the Sol Federation Marine Corps.\"" + icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi' + sideslist = list("MARSOC", "SFMC") + +// Donation reward for Kay-Nite +/obj/item/clothing/under/tactichill + name = "tactichill jacket" + desc = "The brighter variant of the tacticool clotheswear, for when you want to look even cooler than usual and still operate at the same time." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + icon_state = "tactichill" + +// Donation reward for thedragmeme +/obj/item/clothing/shoes/fancy_heels/drag + desc = "A fancy pair of high heels. Clack clack clack... definitely turning a lot of heads." + +/obj/item/clothing/shoes/fancy_heels/drag/Initialize(mapload) + . = ..() + AddComponent(/datum/component/squeak, list('modular_nova/modules/modular_items/lewd_items/sounds/highheel1.ogg' = 1, 'modular_nova/modules/modular_items/lewd_items/sounds/highheel2.ogg' = 1), 70) + +// Donation reward for Razurath + +/obj/item/clothing/under/bimpcap + name = "Formal Matte Black Captain Uniform" + desc = "A professional looking matte black uniform cladded with medals of distintive service and valor, only worn by the highest of station officials." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + icon_state = "bimpcap" + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +// Donation reward for Nikohyena +/obj/item/clothing/glasses/gold_aviators + name = "purple and gold aviators" + desc = "A round pair of gold aviator glasses, the lenses having been applied with a gem-like purple tint." + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/eyes.dmi' + icon = 'modular_nova/master_files/icons/donator/obj/clothing/glasses.dmi' + icon_state = "goldaviator" + +// Donation reward for Thedragmeme +/obj/item/clothing/under/caged_dress/skirt + name = "Caged Purple Dress" + desc = "A silky purple dress with a partially exposed crinoline underneath." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + icon_state = "caged_dress" + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + +// Donation reward for Thedragmeme +/obj/item/clothing/suit/short_coat + name = "Short Purple Coat" + desc = "A short black and purple coat, mostly used for asthetics then insulating the person wearing it." + icon_state = "short_coat" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + +// Donation reward for Thedragmeme +/obj/item/clothing/neck/flower_collar + name = "Flower Collar" + desc = "A purple collar with a dainty red flower attached to the right side of the item." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/necklaces.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/neck.dmi' + icon_state = "flower_collar" + +// Donation reward for Sigmar Alkahest +/obj/item/clothing/under/costume/nova/kimono/sigmar + name = "short-sleeved kimono" + desc = "A traditional ancient Earth Japanese Kimono. It's white with a gold trim and burnished gold ivy pattern." + icon_state = "kimono-gold" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + +// Donation reward for Sigmar Alkahest +/obj/item/clothing/head/hooded/sigmarcoat + name = "black raincoat hood" + desc = "Certainly makes you look more ominous." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi' + icon_state = "long-coat-hood" + supports_variations_flags = NONE + +// Donation reward for Sigmar Alkahest +/obj/item/clothing/suit/hooded/sigmarcoat + name = "black open-faced raincoat" + desc = "A light black raincoat. You didn't even know they're made in this color." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + icon_state = "long-coat" + hoodtype = /obj/item/clothing/head/hooded/sigmarcoat + supports_variations_flags = NONE + +// Donation reward for Sonicgotnuked + +/obj/item/clothing/gloves/ring/hypno/nuke + name = "suspiciously glossy ring" + desc = "This ring oozes with an assertive edge as sharp light bends along the smooth, black bronze. Like the finger that wears it, an exceptional amount of polish repels nearly all the light that glances along its surface. If you look closer, a slight golden hue indicates the precious metals inside the alloy." + icon = 'modular_nova/master_files/icons/obj/ring.dmi' + icon_state = "ringblack" + spans = list("glossy") + +//reward for SomeRandomOwl +/obj/item/clothing/head/costume/strigihat + name = "starry witch hat" + desc = "A cute witch hat typically worn by an owl-like teshari." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi' + worn_icon_teshari = 'modular_nova/master_files/icons/donator/mob/clothing/head_teshari.dmi' + icon_state = "strigihat" + +//Donation reward for Razurath +/obj/item/clothing/head/razurathhat + name = "Golden Nanotrasen Officer Cap" + desc = "A Nanotrasen officer cap. Now darker, golder, and cooler!" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi' + icon_state = "razurath_hat" + +//Donation reward for Razurath +/obj/item/clothing/suit/razurathcoat + name = "Golden Nanotrasen Officer Coat" + desc = "A fancy Nanotrasen officer coat. Now darker, golder, and cooler than ever!" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + icon_state = "razurath_coat" + +// Donation reward for MaSvedish +/obj/item/clothing/mask/holocigarette/masvedishcigar + name = "holocigar" + desc = "A soft buzzing device that, using holodeck technology, replicates a slow burn cigar. Now with less-shock technology. It has a small inscription of 'MG' on the golden label." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/mask.dmi' + lefthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_left.dmi' + righthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_right.dmi' + inhand_icon_state = "masvedishcigar_off" + worn_icon_state = "masvedishcigar_off" + icon_state = "masvedishcigar_off" + icon_on = "masvedishcigar_on" + icon_off = "masvedishcigar_off" + +// Donation reward for LT3 +/obj/item/clothing/suit/armor/skyy + name = "silver jacket mk II" + desc = "A jacket for those with a commanding presence. Made of synthetic fabric, it's interwoven with a special alloy that provides extra protection and style." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + icon_state = "lt3_jacket" + inhand_icon_state = "syndicate-black" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/jacket/skyy + name = "silver jacket" + desc = "A jacket for those with a commanding presence. Made of synthetic fabric, it's interwoven with a special alloy that provides extra protection and style." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + icon_state = "lt3_jacket" + inhand_icon_state = "syndicate-black" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/under/pants/skyy + name = "silver jeans" + desc = "A pair of jeans for those with a commanding presence. Made of shining, silver denim, it's interwoven with a special alloy that provides extra protection and style." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform_digi.dmi' + lefthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_left.dmi' + righthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_right.dmi' + icon_state = "lt3_jeans" + inhand_icon_state = "lt3_jeans" + +/obj/item/clothing/gloves/skyy + name = "charcoal fingerless gloves" + desc = "Valuing form over function, these gloves barely cover more than the palm of your hand." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/gloves.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/hands.dmi' + icon_state = "lt3_gloves" + +// Donation reward for Lolpopomg101 +/obj/item/clothing/suit/hooded/colorblockhoodie + name = "color-block hoodie" + desc = "A soft pastel color-block hoodie from an unrecognizable brand." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + icon_state = "colorblockhoodie" + hoodtype = /obj/item/clothing/head/hooded/colorblockhoodie + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/head/hooded/colorblockhoodie + name = "hood" + desc = "Very soft on the inside!" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi' + icon_state = "colorblockhood" + flags_inv = HIDEHAIR + +/obj/item/clothing/suit/toggle/digicoat + toggle_noun = "holo-display" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +//Public donation reward for Razurath +/obj/item/clothing/suit/toggle/digicoat/glitched + name = "hacked digicoat" + desc = "Glitched images display across the back. Cool!" + base_icon_state = "digicoat_glitched" + icon_state = "digicoat_glitched" + +/obj/item/clothing/suit/toggle/digicoat/nanotrasen + name = "nanotrasen digicoat" + desc = "A company jacket of popular design." + base_icon_state = "digicoat_nt" + icon_state = "digicoat_nt" + +/obj/item/clothing/suit/toggle/digicoat/interdyne + name = "interdyne digicoat" + desc = "A sinister colored jacket from a familiar company." + base_icon_state = "digicoat_interdyne" + icon_state = "digicoat_interdyne" + +/obj/item/clothing/suit/armor/hos/elofy + name = "solar admiral coat" + desc = "A traditional naval officer uniform of the late 63rd Expeditionary Fleet. This faithful recreation bears the admiral's crest of the Luna Wolves Legion. It is uniquely tailored to the form of a certain wolf girl." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + icon_state = "coat_blackblue" + inhand_icon_state = "hostrench" + blood_overlay_type = "coat" + body_parts_covered = CHEST|GROIN|LEGS|ARMS + cold_protection = CHEST|GROIN|LEGS|ARMS + supports_variations_flags = NONE + uses_advanced_reskins = TRUE + unique_reskin = list( + "Black-Blue" = list( + RESKIN_ICON_STATE = "coat_blackblue", + RESKIN_WORN_ICON_STATE = "coat_blackblue" + ), + "Black-Red" = list( + RESKIN_ICON_STATE = "coat_blackred", + RESKIN_WORN_ICON_STATE = "coat_blackred" + ), + "White-Red" = list( + RESKIN_ICON_STATE = "coat_whitered", + RESKIN_WORN_ICON_STATE = "coat_whitered" + ), + "White-Blue" = list( + RESKIN_ICON_STATE = "coat_whiteblue", + RESKIN_WORN_ICON_STATE = "coat_whiteblue" + ) + ) + +/obj/item/clothing/suit/armor/hos/elofy/examine_more(mob/user) + . = ..() + . += "It seems particularly soft and has subtle ballistic fibers intwined with the soft fabric that is perfectedly tailored to the body that wears it. Each golden engraving seems to reflect against your eyes with a slightly blinding flare. This is part of a full set of Luna Wolves Legion battle garb." + + +/obj/item/clothing/head/hats/hos/elofy + name = "solar admiral hat" + icon ='modular_nova/master_files/icons/donator/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi' + icon_state = "hat_black" + uses_advanced_reskins = TRUE + unique_reskin = list( + "White" = list( + RESKIN_ICON_STATE = "hat_white", + RESKIN_WORN_ICON_STATE = "hat_white" + ), + "Black" = list( + RESKIN_ICON_STATE = "hat_black", + RESKIN_WORN_ICON_STATE = "hat_black" + ) + ) + + +/obj/item/clothing/gloves/elofy + name = "solar admiral gloves" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/gloves.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/hands.dmi' + icon_state = "gloves_black" + uses_advanced_reskins = TRUE + unique_reskin = list( + "White" = list( + RESKIN_ICON_STATE = "gloves_white", + RESKIN_WORN_ICON_STATE = "gloves_white" + ), + "Black" = list( + RESKIN_ICON_STATE = "gloves_black", + RESKIN_WORN_ICON_STATE = "gloves_black" + ) + ) + +/obj/item/clothing/shoes/jackboots/elofy + name = "solar admiral boots" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/shoes.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/feet.dmi' + icon_state = "boots_blackblue" + uses_advanced_reskins = TRUE + unique_reskin = list( + "Black-Red" = list( + RESKIN_ICON_STATE = "boots_blackred", + RESKIN_WORN_ICON_STATE = "boots_blackred" + ), + "White-Red" = list( + RESKIN_ICON_STATE = "boots_whitered", + RESKIN_WORN_ICON_STATE = "boots_whitered" + ), + "White-Blue" = list( + RESKIN_ICON_STATE = "boots_whiteblue", + RESKIN_WORN_ICON_STATE = "boots_whiteblue" + ) + ) + +// Donation reward for grasshand +/obj/item/clothing/under/rank/civilian/chaplain/divine_archer/noble + name = "noble gambeson" + desc = "These clothes make you feel a little closer to space." + +/obj/item/clothing/shoes/jackboots/noble + name = "noble boots" + desc = "These boots make you feel like you can walk on space." + icon_state = "archerboots" + inhand_icon_state = "archerboots" + +// Donation reward for nikotheguydude +/obj/item/clothing/suit/toggle/labcoat/vic_dresscoat_donator + icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' + icon_state = "vickyred" + name = "nobility dresscoat" + desc = "An elaborate coat composed of a silky yet firm material. \ + The fabric is quite thin, and provides negligible protection or insulation, \ + but is pleasant on the skin.\nWhile extremely well made, it seems quite \ + fragile, and rather <i>expensive</i>. You get the feeling it might not \ + <b>survive a washing machine</b> without specialized treatment." + special_desc = "It's buttons are pressed with some kind of sigil - which, to those knowledgeable in \ + Tiziran politics or nobility, would be recognizable as the <b>Kor'Yesh emblem</b>, \ + a relatively <i>minor house of nobility</i> within <i>Tizira</i>.\n\n\ + On a closer inspection, it would appear the interior is modified with protective material and mounting points \ + most often found on medical labcoats." + limb_integrity = 100 // note that this is usually disabled by having it set to 0, so this is just strictly worse + body_parts_covered = CHEST|ARMS + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/toggle/labcoat/vic_dresscoat_donator/Initialize(mapload) + . = ..() + + qdel(GetComponent(/datum/component/toggle_icon)) // we dont have a toggle icon + +#define NOBILITY_DRESSCOAT_WASHING_CREDITS_NEEDED 2500 + +// this is based on an in-joke with the character whom inspires this donator item, where they need a fuckton of money to wash their coat. this takes it literally +/obj/item/clothing/suit/toggle/labcoat/vic_dresscoat_donator/machine_wash(obj/machinery/washing_machine/washer) + + var/total_credits = 0 + var/list/obj/item/money_to_delete = list() + for (var/obj/item/holochip/chip in washer) + total_credits += chip.get_item_credit_value() + money_to_delete += chip + if (total_credits >= NOBILITY_DRESSCOAT_WASHING_CREDITS_NEEDED) + break + if (total_credits < NOBILITY_DRESSCOAT_WASHING_CREDITS_NEEDED) + for (var/obj/item/stack/spacecash/cash in washer) + total_credits += cash.get_item_credit_value() + money_to_delete += cash + if (total_credits >= NOBILITY_DRESSCOAT_WASHING_CREDITS_NEEDED) + break + + var/message + var/sound_effect_path + var/sound_effect_volume + if (total_credits >= NOBILITY_DRESSCOAT_WASHING_CREDITS_NEEDED) // all is well + message = span_notice("[src] seems to absorb the raw capital from its surroundings, and is successfully washed!") + sound_effect_path = 'sound/effects/whirthunk.ogg' + sound_effect_volume = 40 + for (var/obj/item/entry_to_delete as anything in money_to_delete) + qdel(entry_to_delete) + else // IT COSTS ME A THOUSAND CREDITS TO WASH THIS!! HALF MY BUDGET IS DRY CLEANING + message = span_warning("[src]'s delicate fabric is shredded by [washer]! How terrible!") + sound_effect_path = 'sound/effects/cloth_rip.ogg' + sound_effect_volume = 30 + for (var/zone as anything in cover_flags2body_zones(body_parts_covered)) + take_damage_zone(zone, limb_integrity * 1.1, BRUTE) // fucking shreds it + + var/turf/our_turf = get_turf(src) + our_turf.visible_message(message) + playsound(src, sound_effect_path, sound_effect_volume, FALSE) + + return ..() + +/obj/item/clothing/under/costume/dragon_maid + name = "dragon maid uniform" + desc = "A uniform for a kitchen maid, stylized to have draconic detailing." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + icon_state = "dragon_maid" + body_parts_covered = CHEST|GROIN + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + can_adjust = FALSE + +#undef NOBILITY_DRESSCOAT_WASHING_CREDITS_NEEDED + +// Donation reward for vexcint +/obj/item/clothing/head/anubite + name = "\improper Anubite headpiece" + desc = "A dark coloured headpiece with golden accents. Its features seem reminiscent of the god Anubis." + icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi' + icon_state = "anubite_headpiece" + worn_icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi' + worn_y_offset = 4 + +// Donator reward Smol42 + +/obj/item/clothing/neck/trenchcoat + name = "Graceful Trenchcoat" + icon = 'modular_nova/master_files/icons/donator/obj/clothing/cloaks.dmi' + icon_state = "trenchcoat" + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/neck.dmi' + body_parts_covered = CHEST|GROIN|LEGS|ARMS + uses_advanced_reskins = TRUE + unique_reskin = list( + "White" = list( + RESKIN_ICON_STATE = "trenchcoat_white", + RESKIN_WORN_ICON_STATE = "trenchcoat_white" + ), + "Tin variant" = list( + RESKIN_ICON_STATE = "trenchcoat_tin", + RESKIN_WORN_ICON_STATE = "trenchcoat_tin" + ), + "Blue variant" = list( + RESKIN_ICON_STATE = "trenchcoat_blue", + RESKIN_WORN_ICON_STATE = "trenchcoat_blue" + ) + ) + +//Donation reward for Jasohavents +/obj/item/clothing/under/rank/cargo/qm/skirt/old + name = "quartermaster's jumpskirt" + desc = "It seems somebody has kept a couple outdated quartermaster uniforms. They smell of Rum and Smoke." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' + +//Donation reward for Jasohavents +/obj/item/food/griddle_toast/toaster_implant + name = "toast" + desc = "Thick cut bread, toasted to perfection." + food_reagents = list(/datum/reagent/consumable/nutriment = 1) +//it's meant to be practically non-functional in terms of giving any ingame advantage, but it seems food needs to have *something* in it to be edible +//it *can* be a whole thing with a "gridle" that only accepts bread from the user's hand but I can't be assed to implement it for a one-off gimmick donator item + +#define TOASTER_IMPLANT_COOLDOWN (3 MINUTES) +/obj/item/implant/toaster + name = "toaster implant" + icon = 'icons/obj/food/burgerbread.dmi' + icon_state = "griddle_toast" + COOLDOWN_DECLARE(toast_cooldown) + +/obj/item/implant/toaster/get_data() + var/dat = {"<b>Implant Specifications:</b><BR> + <b>Name:</b> Toaster-O brand toaster module<BR> + <b>Implant Details:</b> <BR> + <b>Function:</b> Serves you a delicious toasted slice of bread."} + return dat + +/obj/item/implant/toaster/activate() + . = ..() + if(!COOLDOWN_FINISHED(src, toast_cooldown)) + imp_in.show_message(span_notice("You're not quite ready to toast another toast yet.")) + return + + var/obj/item/food/griddle_toast/toaster_implant/toast = new(get_turf(imp_in)) + var/adjective = pick("crispy", "delicious", "fresh") + imp_in.visible_message(span_notice("[imp_in] ejects a [adjective] toast!"), span_notice("With the familiar \"ding\", the toaster ejects a [adjective] toast.")) + + playsound(imp_in, 'sound/machines/ding.ogg', vol = 75, vary = FALSE, pressure_affected = FALSE, use_reverb = FALSE) + toast.throw_at(get_turf(imp_in), 2, 3) + COOLDOWN_START(src, toast_cooldown, TOASTER_IMPLANT_COOLDOWN) + +/obj/item/implanter/toaster + name = "implanter (toaster)" + imp_type = /obj/item/implant/toaster + +/obj/item/implantcase/toaster + name = "implant case - 'Toaster'" + desc = "A glass case containing a toaster implant. Sweet." + imp_type = /obj/item/implant/toaster diff --git a/modular_skyrat/modules/customization/modules/clothing/~donator/donator_items.dm b/modular_nova/modules/customization/modules/clothing/~donator/donator_items.dm similarity index 84% rename from modular_skyrat/modules/customization/modules/clothing/~donator/donator_items.dm rename to modular_nova/modules/customization/modules/clothing/~donator/donator_items.dm index 6455bba4255f9f..c4c9ea0cdf4b4a 100644 --- a/modular_skyrat/modules/customization/modules/clothing/~donator/donator_items.dm +++ b/modular_nova/modules/customization/modules/clothing/~donator/donator_items.dm @@ -1,8 +1,8 @@ //Donator reward for UltramariFox /obj/item/clothing/mask/cigarette/khi name = "\improper Kitsuhana Singularity cigarette" - icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi' icon_state = "khioff" icon_on = "khion" icon_off = "khioff" @@ -10,12 +10,12 @@ list_reagents = list(/datum/reagent/drug/nicotine = 10, /datum/reagent/toxin/mindbreaker = 5) /obj/item/cigbutt/khi - icon = 'modular_skyrat/master_files/icons/obj/cigarettes_khi.dmi' + icon = 'modular_nova/master_files/icons/obj/cigarettes_khi.dmi' icon_state = "khibutt" /obj/item/storage/fancy/cigarettes/khi name = "\improper Kitsuhana Singularity packet" - icon = 'modular_skyrat/master_files/icons/obj/cigarettes_khi.dmi' + icon = 'modular_nova/master_files/icons/obj/cigarettes_khi.dmi' icon_state = "khi_cig_packet" base_icon_state = "khi_cig_packet" spawn_type = /obj/item/clothing/mask/cigarette/khi @@ -23,7 +23,7 @@ //Donator reward for Stonetear /obj/item/hairbrush/switchblade name = "switchcomb" - icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi' + icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi' icon_state = "switchblade" base_icon_state = "switchblade" desc = "A sharp, concealable, spring-loaded comb." @@ -67,10 +67,10 @@ /obj/item/donator/transponder name = "broken Helian transponder" desc = "Used by Helians to communicate with their mothership, the screen is cracked and its edges scuffed. This one has seen better days." - icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/custom_w.dmi' - lefthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_left.dmi' - righthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_right.dmi' + icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/custom_w.dmi' + lefthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_left.dmi' + righthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_right.dmi' icon_state = "transponder" w_class = WEIGHT_CLASS_SMALL slot_flags = ITEM_SLOT_BELT @@ -102,7 +102,7 @@ "[icon2html(src, oviewers(2, user))] As [user] turns the red dial on the side of \the [src], it spits out some encrypted static and warbles before silencing itself.", "[icon2html(src, user)] As you turn the red dial on the side of the device, it spits out some encrypted static and warbles before silencing itself.", vision_distance=2) - playsound(user, 'modular_skyrat/master_files/sound/effects/bab1.ogg', 100, TRUE) + playsound(user, 'modular_nova/master_files/sound/effects/bab1.ogg', 100, TRUE) sparks.start() current_state = TAP_SCREEN next_activate = world.time + 20 @@ -112,7 +112,7 @@ "[icon2html(src, oviewers(2, user))] [user] taps the screen of \the [src], making it light up and starting the boot sequence. \the [src] displays an error message and shuts off.", "[icon2html(src, user)] You tap the device's screen, making it light up and starting the boot sequence. The device displays an error message and shuts off.", vision_distance=2) - playsound(user, 'modular_skyrat/master_files/sound/effects/platform_call.ogg', 100, TRUE) + playsound(user, 'modular_nova/master_files/sound/effects/platform_call.ogg', 100, TRUE) current_state = PRESS_KEYS next_activate = world.time + 20 return @@ -122,7 +122,7 @@ "[icon2html(src, user)] You press some keys, producing some promising beeps, before a harsh buzz returns the device to silence again.", vision_distance=2) sparks.start() - playsound(user, 'modular_skyrat/master_files/sound/effects/gmalfunction.ogg', 100, TRUE) + playsound(user, 'modular_nova/master_files/sound/effects/gmalfunction.ogg', 100, TRUE) current_state = EXTEND_ANTENNA next_activate = world.time + 20 return @@ -139,7 +139,7 @@ "[icon2html(src, oviewers(2, user))] [user] slaps the side of \the [src] and it whirrs into life, before thunking and remains still.", "[icon2html(src, user)] You slap the side of the device and it whirrs into life, before thunking and remaining still.", vision_distance=2) - playsound(user, 'modular_skyrat/master_files/sound/effects/hacked.ogg', 100, TRUE) + playsound(user, 'modular_nova/master_files/sound/effects/hacked.ogg', 100, TRUE) sparks.start() current_state = TURN_DIAL next_activate = world.time + 110 @@ -226,9 +226,9 @@ name = "Cat-Ear Headphones" desc = "Merch of their Electric Guitarist Demi Galgan from the Singularity Shredders. It's heavily customizable and even comes with a holographic tail!" icon_state = "catear_headphone" - worn_icon = 'modular_skyrat/modules/GAGS/icons/head/catear_headphone.dmi' - lefthand_file = 'modular_skyrat/modules/GAGS/icons/head/catear_headphone_inhand.dmi' - righthand_file = 'modular_skyrat/modules/GAGS/icons/head/catear_headphone_inhand.dmi' + worn_icon = 'modular_nova/modules/GAGS/icons/head/catear_headphone.dmi' + lefthand_file = 'modular_nova/modules/GAGS/icons/head/catear_headphone_inhand.dmi' + righthand_file = 'modular_nova/modules/GAGS/icons/head/catear_headphone_inhand.dmi' inhand_icon_state = "catear_headphone" slot_flags = ITEM_SLOT_EARS | ITEM_SLOT_HEAD | ITEM_SLOT_NECK var/catTailToggled = FALSE @@ -249,9 +249,9 @@ /obj/item/instrument/piano_synth/headphones/catear_headphone/worn_overlays(mutable_appearance/standing, isinhands, icon_file) . = ..() if(!isinhands) - . += emissive_appearance('modular_skyrat/modules/GAGS/icons/head/catear_headphone.dmi', "catearphones_[song?.playing ? "on" : "off"]_emissive", src, alpha = src.alpha) + . += emissive_appearance('modular_nova/modules/GAGS/icons/head/catear_headphone.dmi', "catearphones_[song?.playing ? "on" : "off"]_emissive", src, alpha = src.alpha) if(catTailToggled) - . += emissive_appearance('modular_skyrat/modules/GAGS/icons/head/catear_headphone.dmi', "catearphones_tail_on_emissive", src, alpha = src.alpha) + . += emissive_appearance('modular_nova/modules/GAGS/icons/head/catear_headphone.dmi', "catearphones_tail_on_emissive", src, alpha = src.alpha) icon_state = "catear_headphone_tail[song?.playing ? "_on" : null]" else icon_state = "catear_headphone[song?.playing ? "_on" : null]" @@ -264,4 +264,4 @@ /obj/item/instrument/piano_synth/headphones/catear_headphone/update_overlays() . = ..() - . += emissive_appearance('modular_skyrat/modules/GAGS/icons/head/catear_headphone.dmi', "catearphones_obj_lights_emissive", src, alpha = src.alpha) + . += emissive_appearance('modular_nova/modules/GAGS/icons/head/catear_headphone.dmi', "catearphones_obj_lights_emissive", src, alpha = src.alpha) diff --git a/modular_skyrat/modules/customization/modules/food_and_drinks/food/SRseafood.dm b/modular_nova/modules/customization/modules/food_and_drinks/food/SRseafood.dm similarity index 78% rename from modular_skyrat/modules/customization/modules/food_and_drinks/food/SRseafood.dm rename to modular_nova/modules/customization/modules/food_and_drinks/food/SRseafood.dm index 973aa09a694b9b..f4678fc99f9e76 100644 --- a/modular_skyrat/modules/customization/modules/food_and_drinks/food/SRseafood.dm +++ b/modular_nova/modules/customization/modules/food_and_drinks/food/SRseafood.dm @@ -1,7 +1,7 @@ /obj/item/food/canned/tuna name = "can of tuna" desc = "You can tune a piano, but you can't tuna fish." - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "tunacan" trash_type = /obj/item/trash/can/food/tuna food_reagents = list( @@ -14,5 +14,5 @@ /obj/item/trash/can/food/tuna name = "can of tuna" - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "tunacan_empty" diff --git a/modular_skyrat/modules/customization/modules/food_and_drinks/food/hemophage_food.dm b/modular_nova/modules/customization/modules/food_and_drinks/food/hemophage_food.dm similarity index 97% rename from modular_skyrat/modules/customization/modules/food_and_drinks/food/hemophage_food.dm rename to modular_nova/modules/customization/modules/food_and_drinks/food/hemophage_food.dm index 970b9eb57102aa..be3caf67c005b9 100644 --- a/modular_skyrat/modules/customization/modules/food_and_drinks/food/hemophage_food.dm +++ b/modular_nova/modules/customization/modules/food_and_drinks/food/hemophage_food.dm @@ -1,7 +1,7 @@ /obj/item/food/hemophage name = "bloody food" desc = "If you see this, then something's gone very wrong and you should report it whenever you get the chance." - icon = 'modular_skyrat/master_files/icons/obj/food/hemophage_food.dmi' + icon = 'modular_nova/master_files/icons/obj/food/hemophage_food.dmi' foodtypes = GORE | BLOODY /obj/item/food/hemophage/blood_rice_pearl @@ -105,7 +105,7 @@ /obj/item/food/soup/hemophage/blood_soup name = "dinuguan" desc = "A savory stew normally made of offal or freshly-simmered meat. This version features blood curds instead, while also featuring a rich, spicy and dark gravy made of fresh blood and vinegar. Chili and garlic were also added to enhance the savory flavor of the broth." - icon = 'modular_skyrat/master_files/icons/obj/food/hemophage_food.dmi' + icon = 'modular_nova/master_files/icons/obj/food/hemophage_food.dmi' icon_state = "blood_soup" max_volume = 90 food_reagents = list( diff --git a/modular_skyrat/modules/customization/modules/food_and_drinks/food/scottish.dm b/modular_nova/modules/customization/modules/food_and_drinks/food/scottish.dm similarity index 88% rename from modular_skyrat/modules/customization/modules/food_and_drinks/food/scottish.dm rename to modular_nova/modules/customization/modules/food_and_drinks/food/scottish.dm index 9a26ebee5d20de..07d70a61ee472b 100644 --- a/modular_skyrat/modules/customization/modules/food_and_drinks/food/scottish.dm +++ b/modular_nova/modules/customization/modules/food_and_drinks/food/scottish.dm @@ -1,7 +1,7 @@ /obj/item/food/snacks/store/bread/haggis name = "haggis" desc = "A savoury pudding containing intestines." - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "haggis" food_reagents = list( /datum/reagent/consumable/nutriment = 50, @@ -16,7 +16,7 @@ /obj/item/food/snacks/breadslice/haggis name = "haggis chunk" desc = "A chunk of delicious haggis." - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "haggis_chunk" food_reagents = list( /datum/reagent/consumable/nutriment = 10, @@ -30,7 +30,7 @@ name = "haggis neeps and tatties " desc = "Oi mate! No neeps, but double beets! SCAM!!!" icon_state = "neep_tatty_haggis" - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' food_reagents = list( /datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 10, @@ -42,7 +42,7 @@ /obj/item/food/raw_sausage/battered name = "raw battered sausage" desc = "A raw sausage coated in thick beer batter." - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "batteredsausage" food_reagents = list( /datum/reagent/consumable/nutriment/protein = 5, @@ -57,7 +57,7 @@ /obj/item/food/sausage/battered name = "battered sausage" desc = "A sausage coated in thick beer batter, best served with a portion of chips wrapped in a newspaper, it however, is pure cholesterol, Scottish people eat it. Few of them make it to 60." - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "grilled_batteredsausage" food_reagents = list( /datum/reagent/consumable/nutriment/protein = 5, @@ -74,7 +74,7 @@ /obj/item/food/cookie/shortbread name = "shortbread" desc = "A rectangular piece of cooked flour. Said to control the sun during Hogmanay." - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "shortbread" food_reagents = list( /datum/reagent/consumable/nutriment = 6, diff --git a/modular_skyrat/modules/customization/modules/food_and_drinks/food/teshari_food.dm b/modular_nova/modules/customization/modules/food_and_drinks/food/teshari_food.dm similarity index 90% rename from modular_skyrat/modules/customization/modules/food_and_drinks/food/teshari_food.dm rename to modular_nova/modules/customization/modules/food_and_drinks/food/teshari_food.dm index ff7fe82012ac41..d81bd8d140497f 100644 --- a/modular_skyrat/modules/customization/modules/food_and_drinks/food/teshari_food.dm +++ b/modular_nova/modules/customization/modules/food_and_drinks/food/teshari_food.dm @@ -1,7 +1,7 @@ /obj/item/food/piru_dough name = "piru dough" desc = "A coarse, stretchy dough made from piru flour and muli juice in a striking purple color, acting as the basis for most teshari cuisine. Puffs up dramatically when grilled or baked." - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "piru_dough" food_reagents = list(/datum/reagent/consumable/nutriment = 6) w_class = WEIGHT_CLASS_SMALL @@ -21,7 +21,7 @@ /obj/item/food/piru_loaf name = "piru loaf" desc = "A loaf of soft piru bread in a striking dark purple color, ready to be cut into slices. It's surprisingly stretchy, and smells quite minty." - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "piru_loaf" food_reagents = list(/datum/reagent/consumable/nutriment = 20) tastes = list("minty bread" = 1) @@ -35,7 +35,7 @@ /obj/item/food/breadslice/piru name = "piru bread slice" desc = "A slice of stretchy piru bread." - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "piru_bread_slice" food_reagents = list(/datum/reagent/consumable/nutriment = 5) tastes = list("minty bread" = 1) @@ -45,7 +45,7 @@ /obj/item/food/flat_piru_dough name = "flattened piru dough" desc = "Flattened piru dough, can be cooked on a griddle or sliced into pasta." - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "flat_piru_dough" food_reagents = list(/datum/reagent/consumable/nutriment = 6) tastes = list("minty dough" = 1) @@ -64,7 +64,7 @@ /obj/item/food/grilled_piru_flatbread name = "grilled piru flatbread" desc = "Crispy, grilled piru flatbread. No longer as stretchy, but it smells absolutely amazing." - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "grilled_piru_flatbread" food_reagents = list(/datum/reagent/consumable/nutriment = 8) tastes = list("minty flatbread" = 1) @@ -74,7 +74,7 @@ /obj/item/food/piru_pasta name = "piru pasta" desc = "Thick-cut segments of piru dough formed into chewy pasta." - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "piru_pasta" food_reagents = list(/datum/reagent/consumable/nutriment = 4) w_class = WEIGHT_CLASS_SMALL @@ -85,7 +85,7 @@ /obj/item/food/baked_kiri name = "baked kiri fruit" desc = "A kiri fruit baked in an oven, causing the jelly inside to caramelize into a jelly donut-like crispy treat. Try not to get addicted." - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "baked_kiri" food_reagents = list( /datum/reagent/consumable/nutriment = 6, @@ -99,7 +99,7 @@ /obj/item/food/baked_muli name = "baked muli pod" desc = "A muli pod baked in an oven, causing the minty liquid inside to condense and the exterior to soften, giving the vegetable a hard-boiled egg consistency. Remarkably tasty and healthy!" - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "baked_muli" food_reagents = list( /datum/reagent/consumable/nutriment = 4, @@ -114,7 +114,7 @@ /obj/item/food/spiced_jerky name = "spiced jerky" desc = "A segment of meat seasoned with nakati spice and dehydrated. Makes for a tasty, chewy snack." - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "spiced_jerky" food_reagents = list( /datum/reagent/consumable/nutriment = 8, @@ -128,7 +128,7 @@ /obj/item/food/sirisai_wrap name = "sirisai wrap" desc = "Meat and cabbage seasoned with nakati spice and wrapped tightly in flattened piru bread. Simple, light, delicious." - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "sirisai_wrap" food_reagents = list( /datum/reagent/consumable/nutriment = 8, @@ -143,7 +143,7 @@ /obj/item/food/sweet_piru_noodles name = "sweet piru noodles" desc = "Piru pasta mixed in a bowl with chopped kiri fruit, muli pods, and carrots. It looks bizarre and seems kind of slimy, but the taste cannot be denied." - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "sweet_piru_noodles" trash_type = /obj/item/reagent_containers/cup/bowl food_reagents = list( @@ -160,7 +160,7 @@ /obj/item/food/kiri_curry name = "kiri curry" desc = "Spiced meat mixed with finely sliced piru pasta and minced chili all drizzled in piru jelly sauce, just the perfect balance of spicy and sweet." - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "kiri_curry" trash_type = /obj/item/reagent_containers/cup/bowl food_reagents = list( @@ -177,7 +177,7 @@ /obj/item/food/sirisai_flatbread name = "sirisai flatbread" desc = "Piru flatbread grilled until crispy and topped with meat, chopped muli pods, and tomato sauce. Looks similar to a pizza, but way more purple and blue. Can be sliced!" - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "sirisai_flatbread" food_reagents = list( /datum/reagent/consumable/nutriment = 24, @@ -196,7 +196,7 @@ /obj/item/food/sirisai_flatbread_slice name = "sirisai flatbread slice" desc = "A slice of piru flatbread grilled until crispy and topped with meat, chopped muli pods, and tomato sauce. Looks similar to a slice of pizza, but way more purple and blue." - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "sirisai_flatbread_slice" food_reagents = list( /datum/reagent/consumable/nutriment = 6, @@ -212,7 +212,7 @@ /obj/item/food/bluefeather_crisp name = "bluefeather crisp" desc = "A spiced cracker made of flattened, dried piru bread. The name comes from the blue stain often left on feathers when eaten with muli dip." - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "bluefeather_crisp" food_reagents = list( /datum/reagent/consumable/nutriment = 4, @@ -226,7 +226,7 @@ /obj/item/food/bluefeather_crisps_and_dip name = "bluefeather crisps and dip" desc = "Bluefeather crisp crackers, now with dip made of muli juice and tomatoes. The name comes from the blue stain often left on feathers when dripped onto them." - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "bluefeather_crisps_and_dip" food_reagents = list( /datum/reagent/consumable/nutriment = 12, @@ -241,7 +241,7 @@ /obj/item/food/stewed_muli name = "stewed muli" desc = "A simple stew of meat, carrots and cabbage all cooked in muli juice. For the growing teshari." - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "stewed_muli" trash_type = /obj/item/reagent_containers/cup/bowl food_reagents = list( @@ -258,7 +258,7 @@ /obj/item/food/stuffed_muli_pod name = "stuffed muli pod" desc = "A cooked muli pod, now stuffed with meat, minced kiri fruit, and chili. Chewy sweet and spicy all in one!" - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "stuffed_muli_pod" food_reagents = list( /datum/reagent/consumable/nutriment = 8, @@ -274,7 +274,7 @@ /obj/item/food/caramel_jelly_toast name = "caramel jelly toast" desc = "A toasted slice of piru bread with a generous slathering of thick caramel and sweet kiri jelly. Is this supposed to be breakfast or desert?" - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "caramel_jelly_toast" food_reagents = list( /datum/reagent/consumable/nutriment = 8, @@ -288,7 +288,7 @@ /obj/item/food/kiri_jellypuff name = "kiri jellypuff" desc = "A piece of piru bread puffed and rolled into a thick disk, containing a kiri jelly and cream filling and sprinkled with piru flour. Just one will never be enough." - icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' + icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi' icon_state = "kiri_jellypuff" food_reagents = list( /datum/reagent/consumable/nutriment = 8, diff --git a/modular_skyrat/modules/customization/modules/food_and_drinks/recipes/drinks_recipes.dm b/modular_nova/modules/customization/modules/food_and_drinks/recipes/drinks_recipes.dm similarity index 98% rename from modular_skyrat/modules/customization/modules/food_and_drinks/recipes/drinks_recipes.dm rename to modular_nova/modules/customization/modules/food_and_drinks/recipes/drinks_recipes.dm index 14691393f03fc9..0a649b4f4f27c4 100644 --- a/modular_skyrat/modules/customization/modules/food_and_drinks/recipes/drinks_recipes.dm +++ b/modular_nova/modules/customization/modules/food_and_drinks/recipes/drinks_recipes.dm @@ -1,4 +1,4 @@ -// Modular Booze MIXES, see the following file for the reagents: modular_skyrat\modules\customization\modules\reagents\chemistry\reagents\alcohol_reagents.dm +// Modular Booze MIXES, see the following file for the reagents: modular_nova\modules\customization\modules\reagents\chemistry\reagents\alcohol_reagents.dm // ROBOT ALCOHOL PAST THIS POINT // WOOO! @@ -125,7 +125,7 @@ results = list(/datum/reagent/consumable/ethanol/hippie_hooch = 5) required_reagents = list(/datum/reagent/medicine/antihol = 1, /datum/reagent/consumable/ethanol/crevice_spike = 3, /datum/reagent/medicine/earthsblood = 1) mix_message = "You hear wood flutes and nature as it mixes." - mix_sound = 'modular_skyrat/modules/emotes/sound/voice/hoot.ogg' + mix_sound = 'modular_nova/modules/emotes/sound/voice/hoot.ogg' /datum/chemical_reaction/drink/research_rum results = list(/datum/reagent/consumable/ethanol/research_rum = 4) @@ -199,7 +199,7 @@ reaction_tags = REACTION_TAG_DRINK | REACTION_TAG_EASY | REACTION_TAG_OTHER -// Non-Booze, see modular_skyrat\modules\customization\modules\reagents\chemistry\reagents\drink_reagents.dm +// Non-Booze, see modular_nova\modules\customization\modules\reagents\chemistry\reagents\drink_reagents.dm /datum/chemical_reaction/drink/pinkmilk results = list(/datum/reagent/consumable/pinkmilk = 2) diff --git a/modular_nova/modules/customization/modules/hydroponics/grown/bananaspider.dm b/modular_nova/modules/customization/modules/hydroponics/grown/bananaspider.dm new file mode 100644 index 00000000000000..21ac936429bb3e --- /dev/null +++ b/modular_nova/modules/customization/modules/hydroponics/grown/bananaspider.dm @@ -0,0 +1,35 @@ +/obj/item/seeds/banana/spider_banana + name = "pack of leggy banana seeds" + desc = "They're seeds that grow into banana trees. However, those bananas might be alive." + icon = 'modular_nova/master_files/icons/obj/hydroponics/seeds.dmi' + icon_state = "seed-spibanana" + species = "spibanana" + growing_icon = 'modular_nova/master_files/icons/obj/hydroponics/growing.dmi' + icon_grow = "spibanana-grow" + icon_dead = "spibanana-dead" + icon_harvest = "spibanana-harvest" + plantname = "Leggy Banana Tree" + product = /obj/item/food/grown/banana/banana_spider_spawnable + genes = list(/datum/plant_gene/trait/slip) + +/obj/item/food/grown/banana/banana_spider_spawnable + name = "banana spider" + desc = "You do not know what it is, but you can bet the clown would love it." + icon = 'modular_nova/master_files/icons/obj/hydroponics/harvest.dmi' + icon_state = "spibanana" + foodtypes = GORE | MEAT | RAW | FRUIT + var/awakening = FALSE + +/obj/item/food/grown/banana/banana_spider_spawnable/attack_self(mob/user) + if(awakening || isspaceturf(user.loc)) + return + to_chat(user, span_notice("You decide to wake up the banana spider...")) + awakening = TRUE + addtimer(CALLBACK(src, PROC_REF(spawnspider)), 8 SECONDS) + +/obj/item/food/grown/banana/banana_spider_spawnable/proc/spawnspider() + if(!QDELETED(src)) + var/mob/living/basic/banana_spider/banana_spider = new(get_turf(loc)) + banana_spider.visible_message(span_notice("The banana spider chitters as it stretches its legs")) + qdel(src) + diff --git a/modular_skyrat/modules/customization/modules/hydroponics/grown/kiri.dm b/modular_nova/modules/customization/modules/hydroponics/grown/kiri.dm similarity index 84% rename from modular_skyrat/modules/customization/modules/hydroponics/grown/kiri.dm rename to modular_nova/modules/customization/modules/hydroponics/grown/kiri.dm index a257a9dcb2ae59..ac5478bd9fa7cb 100644 --- a/modular_skyrat/modules/customization/modules/hydroponics/grown/kiri.dm +++ b/modular_nova/modules/customization/modules/hydroponics/grown/kiri.dm @@ -2,12 +2,12 @@ /obj/item/seeds/kiri name = "pack of kiri starters" desc = "This bacterial colony forms into kiri fruits." - icon = 'modular_skyrat/master_files/icons/obj/hydroponics/seeds.dmi' + icon = 'modular_nova/master_files/icons/obj/hydroponics/seeds.dmi' icon_state = "seed-kiri" species = "kiri" plantname = "Kiri Colony" product = /obj/item/food/grown/kiri - growing_icon = 'modular_skyrat/master_files/icons/obj/hydroponics/growing.dmi' + growing_icon = 'modular_nova/master_files/icons/obj/hydroponics/growing.dmi' icon_grow = "kiri-grow" icon_dead = "kiri-dead" lifespan = 60 @@ -19,7 +19,7 @@ seed = /obj/item/seeds/kiri name = "kiri fruit" desc = "A bizarre egg-shaped fruit, striped with a vivid pink and yellow color. It feels somewhat firm, but the entire thing is edible. Contains an ultra-sweet jelly typically used in teshari cuisine, or it can be baked by itself for a delightful treat." - icon = 'modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi' + icon = 'modular_nova/master_files/icons/obj/hydroponics/harvest.dmi' icon_state = "kiri" foodtypes = FRUIT | SUGAR grind_results = list(/datum/reagent/consumable/kiri_jelly = 0.1) diff --git a/modular_skyrat/modules/customization/modules/hydroponics/grown/muli.dm b/modular_nova/modules/customization/modules/hydroponics/grown/muli.dm similarity index 82% rename from modular_skyrat/modules/customization/modules/hydroponics/grown/muli.dm rename to modular_nova/modules/customization/modules/hydroponics/grown/muli.dm index 7f787804fc6be2..549603ca7758a4 100644 --- a/modular_skyrat/modules/customization/modules/hydroponics/grown/muli.dm +++ b/modular_nova/modules/customization/modules/hydroponics/grown/muli.dm @@ -2,12 +2,12 @@ /obj/item/seeds/muli name = "pack of muli starters" desc = "This bacterial colony forms into muli pods." - icon = 'modular_skyrat/master_files/icons/obj/hydroponics/seeds.dmi' + icon = 'modular_nova/master_files/icons/obj/hydroponics/seeds.dmi' icon_state = "seed-muli" species = "muli" plantname = "Muli Colony" product = /obj/item/food/grown/muli - growing_icon = 'modular_skyrat/master_files/icons/obj/hydroponics/growing.dmi' + growing_icon = 'modular_nova/master_files/icons/obj/hydroponics/growing.dmi' icon_grow = "muli-grow" icon_dead = "muli-dead" lifespan = 60 @@ -19,7 +19,7 @@ seed = /obj/item/seeds/muli name = "muli pod" desc = "A soft, oval-shaped pod. Contains a minty pale-blue juice used for many applications in teshari cuisine." - icon = 'modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi' + icon = 'modular_nova/master_files/icons/obj/hydroponics/harvest.dmi' icon_state = "muli" foodtypes = VEGETABLES juice_typepath = /datum/reagent/consumable/muli_juice diff --git a/modular_skyrat/modules/customization/modules/hydroponics/grown/nakati.dm b/modular_nova/modules/customization/modules/hydroponics/grown/nakati.dm similarity index 79% rename from modular_skyrat/modules/customization/modules/hydroponics/grown/nakati.dm rename to modular_nova/modules/customization/modules/hydroponics/grown/nakati.dm index b51bf9ce385ea5..45b1345a13a64a 100644 --- a/modular_skyrat/modules/customization/modules/hydroponics/grown/nakati.dm +++ b/modular_nova/modules/customization/modules/hydroponics/grown/nakati.dm @@ -2,12 +2,12 @@ /obj/item/seeds/nakati name = "pack of nakati starters" desc = "This bacterial colony forms into bioluminescent nakati growths." - icon = 'modular_skyrat/master_files/icons/obj/hydroponics/seeds.dmi' + icon = 'modular_nova/master_files/icons/obj/hydroponics/seeds.dmi' icon_state = "seed-nakati" species = "nakati" plantname = "Nakati Colony" product = /obj/item/food/grown/nakati - growing_icon = 'modular_skyrat/master_files/icons/obj/hydroponics/growing.dmi' + growing_icon = 'modular_nova/master_files/icons/obj/hydroponics/growing.dmi' icon_grow = "nakati-grow" icon_dead = "nakati-dead" genes = list(/datum/plant_gene/trait/repeated_harvest) @@ -20,7 +20,7 @@ seed = /obj/item/seeds/nakati name = "nakati bark" desc = "A segment of fragrant brown 'bark' from a nakati growth, grinds into a zesty spice widely used in teshari cooking." - icon = 'modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi' + icon = 'modular_nova/master_files/icons/obj/hydroponics/harvest.dmi' icon_state = "nakati" foodtypes = VEGETABLES grind_results = list(/datum/reagent/consumable/nakati_spice = 0) diff --git a/modular_skyrat/modules/customization/modules/hydroponics/grown/piru.dm b/modular_nova/modules/customization/modules/hydroponics/grown/piru.dm similarity index 78% rename from modular_skyrat/modules/customization/modules/hydroponics/grown/piru.dm rename to modular_nova/modules/customization/modules/hydroponics/grown/piru.dm index dbe36e0bb45fbc..8e2c7d271f8c59 100644 --- a/modular_skyrat/modules/customization/modules/hydroponics/grown/piru.dm +++ b/modular_nova/modules/customization/modules/hydroponics/grown/piru.dm @@ -2,13 +2,13 @@ /obj/item/seeds/piru name = "pack of piru starters" desc = "This bacterial colony forms into piru fronds." - icon = 'modular_skyrat/master_files/icons/obj/hydroponics/seeds.dmi' + icon = 'modular_nova/master_files/icons/obj/hydroponics/seeds.dmi' icon_state = "seed-piru" species = "piru" plantname = "Piru Colony" product = /obj/item/food/grown/piru genes = list(/datum/plant_gene/trait/repeated_harvest) - growing_icon = 'modular_skyrat/master_files/icons/obj/hydroponics/growing.dmi' + growing_icon = 'modular_nova/master_files/icons/obj/hydroponics/growing.dmi' icon_grow = "piru-grow" icon_dead = "piru-dead" lifespan = 60 @@ -20,7 +20,7 @@ seed = /obj/item/seeds/piru name = "piru frond" desc = "A delicate frond of piru, resembling strands of silk more than leaves. grinds down into piru flour used in teshari cuisine." - icon = 'modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi' + icon = 'modular_nova/master_files/icons/obj/hydroponics/harvest.dmi' icon_state = "piru" foodtypes = VEGETABLES grind_results = list(/datum/reagent/consumable/piru_flour = 0) diff --git a/modular_skyrat/modules/customization/modules/hydroponics/grown/tea_coffee.dm b/modular_nova/modules/customization/modules/hydroponics/grown/tea_coffee.dm similarity index 78% rename from modular_skyrat/modules/customization/modules/hydroponics/grown/tea_coffee.dm rename to modular_nova/modules/customization/modules/hydroponics/grown/tea_coffee.dm index 6c2ba4244c4240..44ef06e6129962 100644 --- a/modular_skyrat/modules/customization/modules/hydroponics/grown/tea_coffee.dm +++ b/modular_nova/modules/customization/modules/hydroponics/grown/tea_coffee.dm @@ -3,9 +3,9 @@ // Catnip /obj/item/seeds/tea/catnip name = "pack of catnip seeds" - icon = 'modular_skyrat/master_files/icons/obj/hydroponics/seeds.dmi' + icon = 'modular_nova/master_files/icons/obj/hydroponics/seeds.dmi' icon_state = "seed-catnip" - growing_icon = 'modular_skyrat/master_files/icons/obj/hydroponics/growing.dmi' + growing_icon = 'modular_nova/master_files/icons/obj/hydroponics/growing.dmi' desc = "Long stalks with flowering tips, they contain a chemical that attracts felines." species = "catnip" plantname = "Catnip Plant" @@ -18,7 +18,7 @@ /obj/item/food/grown/tea/catnip seed = /obj/item/seeds/tea/catnip name = "catnip buds" - icon = 'modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi' + icon = 'modular_nova/master_files/icons/obj/hydroponics/harvest.dmi' icon_state = "catnip" filling_color = "#4582B4" grind_results = list(/datum/reagent/pax/catnip = 2, /datum/reagent/water = 1) diff --git a/modular_skyrat/modules/customization/modules/jobs/_job.dm b/modular_nova/modules/customization/modules/jobs/_job.dm similarity index 92% rename from modular_skyrat/modules/customization/modules/jobs/_job.dm rename to modular_nova/modules/customization/modules/jobs/_job.dm index e6be489f524f51..0fa0415b0c3ef1 100644 --- a/modular_skyrat/modules/customization/modules/jobs/_job.dm +++ b/modular_nova/modules/customization/modules/jobs/_job.dm @@ -143,12 +143,6 @@ /datum/job/prisoner required_languages = null -/datum/job/station_engineer - banned_quirks = list(TECH_RESTRICTED_QUIRKS) - -/datum/job/atmospheric_technician - banned_quirks = list(TECH_RESTRICTED_QUIRKS) - /datum/job/orderly banned_quirks = list(GUARD_RESTRICTED_QUIRKS) @@ -167,13 +161,18 @@ /datum/job/proc/has_required_languages(datum/preferences/pref) if(!required_languages) return TRUE - for(var/lang in required_languages) + // if we have a bilingual quirk, check that as well + var/bilingual_pref + if(/datum/quirk/bilingual::name in pref.all_quirks) + bilingual_pref = pref.read_preference(/datum/preference/choiced/language) + + for(var/datum/language/lang as anything in required_languages) //Doesnt have language, or the required "level" is too low (understood, while needing spoken) - if(!pref.languages[lang] || pref.languages[lang] < required_languages[lang]) + if((!pref.languages[lang] || pref.languages[lang] < required_languages[lang]) && bilingual_pref != lang.name) // NOVA EDIT - check the bilingual quirk return FALSE return TRUE -// Nanotrasen Fleet +// Symphionia Fleet /datum/job/fleetmaster banned_quirks = list(HEAD_RESTRICTED_QUIRKS) banned_augments = list(HEAD_RESTRICTED_AUGMENTS) diff --git a/modular_skyrat/modules/customization/modules/language/_foreigner.dm b/modular_nova/modules/customization/modules/language/_foreigner.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/language/_foreigner.dm rename to modular_nova/modules/customization/modules/language/_foreigner.dm diff --git a/modular_skyrat/modules/customization/modules/language/_language_holder.dm b/modular_nova/modules/customization/modules/language/_language_holder.dm similarity index 99% rename from modular_skyrat/modules/customization/modules/language/_language_holder.dm rename to modular_nova/modules/customization/modules/language/_language_holder.dm index 0904187a9ae7ea..149901e5852e82 100644 --- a/modular_skyrat/modules/customization/modules/language/_language_holder.dm +++ b/modular_nova/modules/customization/modules/language/_language_holder.dm @@ -90,4 +90,3 @@ /datum/language/common = list(LANGUAGE_ATOM), /datum/language/canilunzt = list(LANGUAGE_ATOM) ) - diff --git a/modular_skyrat/modules/customization/modules/language/ashtongue.dm b/modular_nova/modules/customization/modules/language/ashtongue.dm similarity index 96% rename from modular_skyrat/modules/customization/modules/language/ashtongue.dm rename to modular_nova/modules/customization/modules/language/ashtongue.dm index 3a8b7b78597232..82b4eef2225a3a 100644 --- a/modular_skyrat/modules/customization/modules/language/ashtongue.dm +++ b/modular_nova/modules/customization/modules/language/ashtongue.dm @@ -24,6 +24,6 @@ "brut","vaahk","nah'za","diierk","piut","vuurk","cs'eer","jeirk","qiruvk", ) icon_state = "ashtongue" - icon = 'modular_skyrat/master_files/icons/misc/language.dmi' + icon = 'modular_nova/master_files/icons/misc/language.dmi' default_priority = 90 secret = TRUE diff --git a/modular_skyrat/modules/customization/modules/language/beachbum.dm b/modular_nova/modules/customization/modules/language/beachbum.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/language/beachbum.dm rename to modular_nova/modules/customization/modules/language/beachbum.dm diff --git a/modular_skyrat/modules/customization/modules/language/buzzwords.dm b/modular_nova/modules/customization/modules/language/buzzwords.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/language/buzzwords.dm rename to modular_nova/modules/customization/modules/language/buzzwords.dm diff --git a/modular_skyrat/modules/customization/modules/language/calcic.dm b/modular_nova/modules/customization/modules/language/calcic.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/language/calcic.dm rename to modular_nova/modules/customization/modules/language/calcic.dm diff --git a/modular_skyrat/modules/customization/modules/language/canilunzt.dm b/modular_nova/modules/customization/modules/language/canilunzt.dm similarity index 95% rename from modular_skyrat/modules/customization/modules/language/canilunzt.dm rename to modular_nova/modules/customization/modules/language/canilunzt.dm index ad3fe09ec605ee..8473b75da2473d 100644 --- a/modular_skyrat/modules/customization/modules/language/canilunzt.dm +++ b/modular_nova/modules/customization/modules/language/canilunzt.dm @@ -15,5 +15,5 @@ "mak","lich","gen","or","ag","eck","gec","stag","onn","bin","ket","einech","cresthz","azunein","ghzth" ) icon_state = "canilunzt" - icon = 'modular_skyrat/master_files/icons/misc/language.dmi' + icon = 'modular_nova/master_files/icons/misc/language.dmi' default_priority = 90 diff --git a/modular_nova/modules/customization/modules/language/chitinclick.dm b/modular_nova/modules/customization/modules/language/chitinclick.dm new file mode 100644 index 00000000000000..a1a289b37827e3 --- /dev/null +++ b/modular_nova/modules/customization/modules/language/chitinclick.dm @@ -0,0 +1,21 @@ +/datum/language/chitinclick + name = "Chitinclick" + desc = "A popular non-Human language that finds extensive use by various types of anthropomorphic invertebrates. It consists of complex flutters, chittering, antenna movements, and sparse guttural syllables." + key = "C" + space_chance = 40 + //References some replaced languages. + syllables = list( + // Original + "a", "ak", "ae", "ai", "az", "ba", "bz", "bu", "bh", "br", "bi", + "c", "ca", "ci", "ch", "chk", "cr", "cl", "ce", "cu", "cli", "cla", + "du", "dr", "dri", "de", "do", "dza", "dk", "g", "ga", "gr", "dz", + "gi", "gchk", "i", "ii", "ik", "it", "il", "ie", "iz", "ir", "io", + "pi", "pz", "pe", "po", "phk", "k", "kz", "kl", "ka", "kli", "kh", + "kch", "vh", "vr", "vz", "veh", "mr", "mz", "mi", "ma", "mhk", "zz", + "ze", "zu", "zo", "za", "nz", "zi", "fz", "fr", "f", "fi", "click", + "chit", "rr", "ru", "ra", "rzz", "ri", "re", + // Buzzwords + "zz", "buzz", "ZZ", + ) + icon_state = "chitinclick" + icon = 'modular_nova/master_files/icons/misc/language.dmi' diff --git a/modular_skyrat/modules/customization/modules/language/common.dm b/modular_nova/modules/customization/modules/language/common.dm similarity index 95% rename from modular_skyrat/modules/customization/modules/language/common.dm rename to modular_nova/modules/customization/modules/language/common.dm index cfa09a7220efa5..f02eeffee558d1 100644 --- a/modular_skyrat/modules/customization/modules/language/common.dm +++ b/modular_nova/modules/customization/modules/language/common.dm @@ -12,4 +12,4 @@ "di", "tol", "mi", "solari", "ite", "domum" ) icon_state = "solcommon" - icon = 'modular_skyrat/master_files/icons/misc/language.dmi' + icon = 'modular_nova/master_files/icons/misc/language.dmi' diff --git a/modular_skyrat/modules/customization/modules/language/gutter.dm b/modular_nova/modules/customization/modules/language/gutter.dm similarity index 95% rename from modular_skyrat/modules/customization/modules/language/gutter.dm rename to modular_nova/modules/customization/modules/language/gutter.dm index 610bf553655b3c..ee3228d32e575c 100644 --- a/modular_skyrat/modules/customization/modules/language/gutter.dm +++ b/modular_nova/modules/customization/modules/language/gutter.dm @@ -10,5 +10,5 @@ "tá", "vé", "sál", "fáb", "l'e", "seu", "deu", "meu", "vai", "ción", "tá" ) icon_state = "gutter" - icon = 'modular_skyrat/master_files/icons/misc/language.dmi' + icon = 'modular_nova/master_files/icons/misc/language.dmi' default_priority = 40 diff --git a/modular_skyrat/modules/customization/modules/language/monkey.dm b/modular_nova/modules/customization/modules/language/monkey.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/language/monkey.dm rename to modular_nova/modules/customization/modules/language/monkey.dm diff --git a/modular_nova/modules/customization/modules/language/mothic.dm b/modular_nova/modules/customization/modules/language/mothic.dm new file mode 100644 index 00000000000000..de863abae3bfce --- /dev/null +++ b/modular_nova/modules/customization/modules/language/mothic.dm @@ -0,0 +1,20 @@ +/datum/language/moffic + name = "Mothic" + desc = "Spoken colloquially by the Mothfolk of Va Lumla, the early iteration of Mothic emerged when Fueljacks relied on their receptors for simple, one-worded pheromones to communicate, and navigate the often fatal maintenance tunnels sprawled throughout the fleet. \ + The moths developed gesticulation through antennas and wings to convey deeper intent, with mandibles providing emotional context through clicks and trills. \ + After First Contact, human speakers managed to achieve a similar effect from clicking their tongue to roof, and steer the tone with the width of their mouth while using their hands in place of antennas. \ + It is informally spoken, deploying many slangs and shorthands from Common. Has phonetic resemblance to Italian." + space_chance = 40 + // Syllables derived from Italian. + syllables = list( + "a", "an", "ar", "ave", "avo", "are", "ale", "be", "buo", "ca", "cie", "cr", + "ch", "che", "co", "cco", "ce", "cu", "ci", "ccia", "ccio", "da", "di", "do", + "e", "é", "ere", "ette", "fa", "fu", "fo", "gi", "gio", "gn", "go", "gu", "ni", + "gri", "ia", "iei", "ile", "imo", "l", "la", "lla", "le", "li", "lia", "lio", + "lo", "lu", "me", "mi", "mo", "mos", "na", "ne", "no", "nuo", "o", "ò", "oi", + "or", "os", "otto", "qua", "que", "qui", "pi", "po", "rò", "sa", "se", "si", + "sto", "ua", "ue", "ui", "un", "ta", "tra", "te", "tri", "tre", "tro", "to", + "ti", "va", "vi", "ve", "vo", "veni", "ver", "tu", "dru", "bi", "en", "je", + "dici", "tru", "zo", "ze", "ul", "bo", "ba", "gh", "ino", "etta", "i", "in", + "chh", "rio", "ie", "bar", "bas", "die", "ter", "pa", "pe", "pu", "fe", "fi", + ) diff --git a/modular_skyrat/modules/customization/modules/language/mushroom.dm b/modular_nova/modules/customization/modules/language/mushroom.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/language/mushroom.dm rename to modular_nova/modules/customization/modules/language/mushroom.dm diff --git a/modular_skyrat/modules/customization/modules/language/nekomimetic.dm b/modular_nova/modules/customization/modules/language/nekomimetic.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/language/nekomimetic.dm rename to modular_nova/modules/customization/modules/language/nekomimetic.dm diff --git a/modular_skyrat/modules/customization/modules/language/panslavic.dm b/modular_nova/modules/customization/modules/language/panslavic.dm similarity index 96% rename from modular_skyrat/modules/customization/modules/language/panslavic.dm rename to modular_nova/modules/customization/modules/language/panslavic.dm index a744d2d3edf6da..cfc5ca2c272427 100644 --- a/modular_skyrat/modules/customization/modules/language/panslavic.dm +++ b/modular_nova/modules/customization/modules/language/panslavic.dm @@ -19,5 +19,5 @@ "zem", "lya", "kan", "ce", "la", "ri", "јa", "snezh", "ne", "pa", "da", "vi", "ne" ) icon_state = "panslavic" - icon = 'modular_skyrat/master_files/icons/misc/language.dmi' + icon = 'modular_nova/master_files/icons/misc/language.dmi' default_priority = 95 diff --git a/modular_skyrat/modules/customization/modules/language/piratespeak.dm b/modular_nova/modules/customization/modules/language/piratespeak.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/language/piratespeak.dm rename to modular_nova/modules/customization/modules/language/piratespeak.dm diff --git a/modular_skyrat/modules/customization/modules/language/shadowtongue.dm b/modular_nova/modules/customization/modules/language/shadowtongue.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/language/shadowtongue.dm rename to modular_nova/modules/customization/modules/language/shadowtongue.dm diff --git a/modular_skyrat/modules/customization/modules/language/siiktajr.dm b/modular_nova/modules/customization/modules/language/siiktajr.dm similarity index 96% rename from modular_skyrat/modules/customization/modules/language/siiktajr.dm rename to modular_nova/modules/customization/modules/language/siiktajr.dm index cb826d45cba252..0d67bb76e646c6 100644 --- a/modular_skyrat/modules/customization/modules/language/siiktajr.dm +++ b/modular_nova/modules/customization/modules/language/siiktajr.dm @@ -17,5 +17,5 @@ "län","ny","kor","stå","vär","nning","mmen","ärr","det","vil" ) icon_state = "siiktajr" - icon = 'modular_skyrat/master_files/icons/misc/language.dmi' + icon = 'modular_nova/master_files/icons/misc/language.dmi' default_priority = 90 diff --git a/modular_nova/modules/customization/modules/language/skrell.dm b/modular_nova/modules/customization/modules/language/skrell.dm new file mode 100644 index 00000000000000..6793c6e38d3cab --- /dev/null +++ b/modular_nova/modules/customization/modules/language/skrell.dm @@ -0,0 +1,10 @@ +/datum/language/skrell + name = "Skrelluq" + desc = "Popularly known as \"Skrellian\" by foreigners, this newly-discovered language that the Skrell employ follows no traditional speech patterns. It relies on various differently-pitched warbles and low-frequency sound to construct different sentences, and is nearly inaudible to non-Skrell and anyone lacking an appropriate implant." + space_chance = 100 + flags = TONGUELESS_SPEECH + key = "K" + syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix","*","!") + default_priority = 90 + icon_state = "skrell" + icon = 'modular_nova/master_files/icons/misc/language.dmi' diff --git a/modular_skyrat/modules/customization/modules/language/spacer.dm b/modular_nova/modules/customization/modules/language/spacer.dm similarity index 91% rename from modular_skyrat/modules/customization/modules/language/spacer.dm rename to modular_nova/modules/customization/modules/language/spacer.dm index e64e1162b98449..859334c589c861 100644 --- a/modular_skyrat/modules/customization/modules/language/spacer.dm +++ b/modular_nova/modules/customization/modules/language/spacer.dm @@ -7,5 +7,5 @@ "ada", "zir", "bian", "ach", "usk", "ado", "ich", "cuan", "iga", "qing", "le", "que", "ki", "qaf", "dei", "eta" ) icon_state = "spacer" - icon = 'modular_skyrat/master_files/icons/misc/language.dmi' + icon = 'modular_nova/master_files/icons/misc/language.dmi' default_priority = 50 diff --git a/modular_skyrat/modules/customization/modules/language/te_velu_akko.dm b/modular_nova/modules/customization/modules/language/te_velu_akko.dm similarity index 97% rename from modular_skyrat/modules/customization/modules/language/te_velu_akko.dm rename to modular_nova/modules/customization/modules/language/te_velu_akko.dm index c7a94272aa1099..6bc0fedaf6c338 100644 --- a/modular_skyrat/modules/customization/modules/language/te_velu_akko.dm +++ b/modular_nova/modules/customization/modules/language/te_velu_akko.dm @@ -20,5 +20,5 @@ "nga", "nge", "ngi", "ngo", "ngu", "pa", "pe", "pi", "po", "pu", "ra", "re", "ri", "ro", "ru", "ta", "te", "ti", "to", "tu", "wa", "we", "wi", "wo", "wu", "wha", "whe", "whi", ) icon_state = "azulean" - icon = 'modular_skyrat/master_files/icons/misc/language.dmi' + icon = 'modular_nova/master_files/icons/misc/language.dmi' default_priority = 94 diff --git a/modular_skyrat/modules/customization/modules/language/terrum.dm b/modular_nova/modules/customization/modules/language/terrum.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/language/terrum.dm rename to modular_nova/modules/customization/modules/language/terrum.dm diff --git a/modular_nova/modules/customization/modules/language/vox.dm b/modular_nova/modules/customization/modules/language/vox.dm new file mode 100644 index 00000000000000..b70e93bb960458 --- /dev/null +++ b/modular_nova/modules/customization/modules/language/vox.dm @@ -0,0 +1,10 @@ +/datum/language/vox + name = "Vox Standard" + desc = "A form of hybrid encoded language employed by the biomechanical Vox species, characterized by sounding extremely annoying and irritating to those who don't recognize it. It usually requires an implant to be spoken in its entirety." + key = "V" + flags = TONGUELESS_SPEECH + space_chance = 40 + syllables = list("ti","ti","ti","hi","hi","ki","ki","ki","ki","ya","ta","ha","ka","ya", "yi", "chi","cha","kah","SKRE","AHK","EHK","RAWK","KRA","AAA","EEE","KI","II","KRI","KA") + icon_state = "vox-pidgin" + icon = 'modular_nova/master_files/icons/misc/language.dmi' + default_priority = 99 diff --git a/modular_skyrat/modules/customization/modules/language/xerxian.dm b/modular_nova/modules/customization/modules/language/xerxian.dm similarity index 91% rename from modular_skyrat/modules/customization/modules/language/xerxian.dm rename to modular_nova/modules/customization/modules/language/xerxian.dm index b263c40d616aa8..a7182c457fa971 100644 --- a/modular_skyrat/modules/customization/modules/language/xerxian.dm +++ b/modular_nova/modules/customization/modules/language/xerxian.dm @@ -9,5 +9,5 @@ "o", "oh", "boh", "loh", "tho", "sho", "so", "cho", "zo", "ya", "yi", "yo", "far", "haft" ) icon_state = "xerxian" - icon = 'modular_skyrat/master_files/icons/misc/language.dmi' + icon = 'modular_nova/master_files/icons/misc/language.dmi' default_priority = 95 diff --git a/modular_skyrat/modules/customization/modules/language/yangyu.dm b/modular_nova/modules/customization/modules/language/yangyu.dm similarity index 97% rename from modular_skyrat/modules/customization/modules/language/yangyu.dm rename to modular_nova/modules/customization/modules/language/yangyu.dm index 112e9881c48331..2633973bb94075 100644 --- a/modular_skyrat/modules/customization/modules/language/yangyu.dm +++ b/modular_nova/modules/customization/modules/language/yangyu.dm @@ -16,5 +16,5 @@ "zhen", "zhi", "zhuai", "zhui", "zou", "zun", "zuo" ) icon_state = "hanzi" - icon = 'modular_skyrat/master_files/icons/misc/language.dmi' + icon = 'modular_nova/master_files/icons/misc/language.dmi' default_priority = 94 diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_marking_sets.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_marking_sets.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_marking_sets.dm rename to modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_marking_sets.dm diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings.dm similarity index 98% rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings.dm rename to modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings.dm index 8c6c976151e638..d00a107d396c23 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings.dm @@ -44,7 +44,7 @@ //Use this one for things with pre-set default colors, I guess /datum/body_marking/other - icon = 'modular_skyrat/master_files/icons/mob/body_markings/other_markings.dmi' + icon = 'modular_nova/master_files/icons/mob/body_markings/other_markings.dmi' recommended_species = null /datum/body_marking/other/drake_bone @@ -142,7 +142,7 @@ affected_bodyparts = LEG_RIGHT | LEG_LEFT /datum/body_marking/secondary - icon = 'modular_skyrat/master_files/icons/mob/body_markings/secondary_markings.dmi' + icon = 'modular_nova/master_files/icons/mob/body_markings/secondary_markings.dmi' default_color = DEFAULT_SECONDARY /datum/body_marking/secondary/teshari @@ -429,7 +429,7 @@ affected_bodyparts = HEAD | CHEST | ARM_LEFT | ARM_RIGHT | HAND_LEFT | HAND_RIGHT | LEG_RIGHT | LEG_LEFT /datum/body_marking/tertiary - icon = 'modular_skyrat/master_files/icons/mob/body_markings/tertiary_markings.dmi' + icon = 'modular_nova/master_files/icons/mob/body_markings/tertiary_markings.dmi' default_color = DEFAULT_TERTIARY /datum/body_marking/tertiary/redpanda @@ -565,7 +565,7 @@ /datum/body_marking/tattoo - icon = 'modular_skyrat/master_files/icons/mob/body_markings/tattoo_markings.dmi' + icon = 'modular_nova/master_files/icons/mob/body_markings/tattoo_markings.dmi' recommended_species = null default_color = "#112222" //slightly faded ink. always_color_customizable = TRUE diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_akula.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_akula.dm similarity index 84% rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_akula.dm rename to modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_akula.dm index 327f927e0e02c8..724f82ef650177 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_akula.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_akula.dm @@ -1,5 +1,5 @@ /datum/body_marking/akula - icon = 'modular_skyrat/master_files/icons/mob/body_markings/akula_markings.dmi' + icon = 'modular_nova/master_files/icons/mob/body_markings/akula_markings.dmi' /datum/body_marking/akula/secondary name = "Akula" diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_moth.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_moth.dm similarity index 93% rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_moth.dm rename to modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_moth.dm index c3198b9b7fb7f2..6a90deb58cabb1 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_moth.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_moth.dm @@ -1,5 +1,5 @@ /datum/body_marking/moth - icon = 'modular_skyrat/master_files/icons/mob/body_markings/moth_markings.dmi' + icon = 'modular_nova/master_files/icons/mob/body_markings/moth_markings.dmi' default_color = "#FFFFFF" recommended_species = list(SPECIES_MOTH) affected_bodyparts = HEAD | CHEST | ARM_LEFT | ARM_RIGHT | LEG_RIGHT | LEG_LEFT @@ -57,7 +57,7 @@ icon_state = "lovers" /datum/body_marking/moth/grayscale - icon = 'modular_skyrat/master_files/icons/mob/body_markings/moth_grayscale_markings.dmi' + icon = 'modular_nova/master_files/icons/mob/body_markings/moth_grayscale_markings.dmi' /datum/body_marking/moth/grayscale/reddish name = "Reddish Grayscale" diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_synthliz.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_synthliz.dm similarity index 84% rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_synthliz.dm rename to modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_synthliz.dm index 58d5ec0fc635d2..22acba254ea081 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_synthliz.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_synthliz.dm @@ -1,5 +1,5 @@ /datum/body_marking/secondary/synthliz - icon = 'modular_skyrat/master_files/icons/mob/body_markings/synthliz_secondary.dmi' + icon = 'modular_nova/master_files/icons/mob/body_markings/synthliz_secondary.dmi' recommended_species = list() /datum/body_marking/secondary/synthliz/scutes @@ -18,7 +18,7 @@ affected_bodyparts = CHEST /datum/body_marking/tertiary/synthliz - icon = 'modular_skyrat/master_files/icons/mob/body_markings/synthliz_tertiary.dmi' + icon = 'modular_nova/master_files/icons/mob/body_markings/synthliz_tertiary.dmi' recommended_species = list() /datum/body_marking/tertiary/synthliz/plates diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_vox.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_vox.dm similarity index 84% rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_vox.dm rename to modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_vox.dm index b2125101e7f875..032a83aca3cdd7 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_vox.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_vox.dm @@ -1,5 +1,5 @@ /datum/body_marking/secondary/vox - icon = 'modular_skyrat/master_files/icons/mob/body_markings/vox_secondary.dmi' + icon = 'modular_nova/master_files/icons/mob/body_markings/vox_secondary.dmi' recommended_species = list(SPECIES_VOX) /datum/body_marking/secondary/vox/vox @@ -9,7 +9,7 @@ /datum/body_marking/tertiary/vox recommended_species = list(SPECIES_VOX) - icon = 'modular_skyrat/master_files/icons/mob/body_markings/vox_tertiary.dmi' + icon = 'modular_nova/master_files/icons/mob/body_markings/vox_tertiary.dmi' /datum/body_marking/tertiary/vox/tiger name = "Vox Tiger Tattoo" diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/preferences_setup.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/preferences_setup.dm new file mode 100644 index 00000000000000..c2bfd6c7d49da6 --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/preferences_setup.dm @@ -0,0 +1,252 @@ +/* +/// Fully randomizes everything in the character. +/datum/preferences/proc/randomise_appearance_prefs(randomise_flags = ALL) + if(randomise_flags & RANDOMIZE_SPECIES) + var/rando_race = GLOB.species_list[pick(GLOB.roundstart_races)] + pref_species = new rando_race() + if(randomise_flags & RANDOMIZE_NAME) + real_name = pref_species.random_name(gender, TRUE) + +/// Randomizes the character according to preferences. +/datum/preferences/proc/apply_character_randomization_prefs(antag_override = FALSE) + return + +/datum/preferences/proc/random_species() + var/random_species_type = GLOB.species_list[pick(GLOB.roundstart_races)] + set_new_species(random_species_type) + if(randomise[RANDOM_NAME]) + real_name = pref_species.random_name(gender,1) + +///Setup the random hardcore quirks and give the character the new score prize. +/datum/preferences/proc/hardcore_random_setup(mob/living/carbon/human/character) + var/next_hardcore_score = select_hardcore_quirks() + character.hardcore_survival_score = next_hardcore_score ** 1.2 //30 points would be about 60 score + +/** + * Goes through all quirks that can be used in hardcore mode and select some based on a random budget. + * Returns the new value to be gained with this setup, plus the previously earned score. + **/ +/datum/preferences/proc/select_hardcore_quirks() + . = 0 + + var/quirk_budget = rand(8, 35) + + all_quirks = list() //empty it out + + var/list/available_hardcore_quirks = SSquirks.hardcore_quirks.Copy() + + while(quirk_budget > 0) + for(var/i in available_hardcore_quirks) //Remove from available quirks if its too expensive. + var/datum/quirk/available_quirk = i + if(available_hardcore_quirks[available_quirk] > quirk_budget) + available_hardcore_quirks -= available_quirk + + if(!available_hardcore_quirks.len) + break + + var/datum/quirk/picked_quirk = pick(available_hardcore_quirks) + + var/picked_quirk_blacklisted = FALSE + for(var/bl in SSquirks.quirk_blacklist) //Check if the quirk is blacklisted with our current quirks. quirk_blacklist is a list of lists. + var/list/blacklist = bl + if(!(picked_quirk in blacklist)) + continue + for(var/iterator_quirk in all_quirks) //Go through all the quirks we've already selected to see if theres a blacklist match + if((iterator_quirk in blacklist) && !(iterator_quirk == picked_quirk)) //two quirks have lined up in the list of the list of quirks that conflict with each other, so return (see quirks.dm for more details) + picked_quirk_blacklisted = TRUE + break + if(picked_quirk_blacklisted) + break + + if(picked_quirk_blacklisted) + available_hardcore_quirks -= picked_quirk + continue + + if(initial(picked_quirk.mood_quirk) && CONFIG_GET(flag/disable_human_mood)) //check for moodlet quirks + available_hardcore_quirks -= picked_quirk + continue + + all_quirks += initial(picked_quirk.name) + quirk_budget -= available_hardcore_quirks[picked_quirk] + . += available_hardcore_quirks[picked_quirk] + available_hardcore_quirks -= picked_quirk + + +/datum/preferences/proc/update_preview_icon() + // Determine what job is marked as 'High' priority, and dress them up as such. + var/datum/job/previewJob + var/highest_pref = 0 + for(var/job in job_preferences) + if(job_preferences[job] > highest_pref) + previewJob = SSjob.GetJob(job) + highest_pref = job_preferences[job] + + if(previewJob) + // Silicons only need a very basic preview since there is no customization for them. + if(istype(previewJob,/datum/job/ai)) + parent.show_character_previews(image('icons/mob/ai.dmi', icon_state = resolve_ai_icon(preferred_ai_core_display), dir = SOUTH)) + return + if(istype(previewJob,/datum/job/cyborg)) + parent.show_character_previews(image('icons/mob/robots.dmi', icon_state = "robot", dir = SOUTH)) + return + + // Set up the dummy for its photoshoot + var/mob/living/carbon/human/dummy/mannequin = generate_or_wait_for_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES) + apply_prefs_to(mannequin, TRUE) + + switch(preview_pref) + if(PREVIEW_PREF_JOB) + if(previewJob) + mannequin.job = previewJob.title + mannequin.dress_up_as_job(previewJob, TRUE) + mannequin.underwear_visibility = NONE + if(PREVIEW_PREF_LOADOUT) + mannequin.underwear_visibility = NONE + equip_preference_loadout(mannequin, TRUE, previewJob) + mannequin.underwear_visibility = NONE + if(PREVIEW_PREF_NAKED) + mannequin.underwear_visibility = UNDERWEAR_HIDE_UNDIES | UNDERWEAR_HIDE_SHIRT | UNDERWEAR_HIDE_SOCKS + mannequin.update_body() //Unfortunately, due to a certain case we need to update this just in case + + parent.show_character_previews(new /mutable_appearance(mannequin)) + unset_busy_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES) + +//SKYRAT SPECIFIC PROCS + +//This proc makes sure that we only have the parts that the species should have, add missing ones, remove extra ones(should any be changed) +//Also, this handles missing color keys +/datum/preferences/proc/validate_species_parts() + if(!pref_species) + return + + var/list/target_bodyparts = pref_species.default_mutant_bodyparts.Copy() + + //Remove all "extra" accessories + for(var/key in mutant_bodyparts) + if(!GLOB.sprite_accessories[key]) //That accessory no longer exists, remove it + mutant_bodyparts -= key + continue + if(!pref_species.default_mutant_bodyparts[key]) + mutant_bodyparts -= key + continue + if(!GLOB.sprite_accessories[key][mutant_bodyparts[key][MUTANT_INDEX_NAME]]) //The individual accessory no longer exists + mutant_bodyparts[key][MUTANT_INDEX_NAME] = pref_species.default_mutant_bodyparts[key] + validate_color_keys_for_part(key) //Validate the color count of each accessory that wasnt removed + + //Add any missing accessories + for(var/key in target_bodyparts) + if(!mutant_bodyparts[key]) + var/datum/sprite_accessory/SA + if(target_bodyparts[key] == ACC_RANDOM) + SA = random_accessory_of_key_for_species(key, pref_species) + else + SA = GLOB.sprite_accessories[key][target_bodyparts[key]] + var/final_list = list() + final_list[MUTANT_INDEX_NAME] = SA.name + final_list[MUTANT_INDEX_COLOR_LIST] = SA.get_default_color(features, pref_species) + mutant_bodyparts[key] = final_list + + if(!allow_advanced_colors) + reset_colors() + +/datum/preferences/proc/validate_color_keys_for_part(key) + var/datum/sprite_accessory/SA = GLOB.sprite_accessories[key][mutant_bodyparts[key][MUTANT_INDEX_NAME]] + var/list/colorlist = mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] + if(SA.color_src == USE_MATRIXED_COLORS && colorlist.len != 3) + mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] = SA.get_default_color(features, pref_species) + else if (SA.color_src == USE_ONE_COLOR && colorlist.len != 1) + mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] = SA.get_default_color(features, pref_species) + +/datum/preferences/proc/set_new_species(new_species_path) + pref_species = new new_species_path() + var/list/new_features = pref_species.get_random_features() //We do this to keep flavor text, genital sizes etc. + for(var/key in new_features) + features[key] = new_features[key] + mutant_bodyparts = pref_species.get_mutant_bodyparts(features) + body_markings = pref_species.get_random_body_markings(features) + if(pref_species.use_skintones) + features["uses_skintones"] = TRUE + //We reset the quirk-based stuff + augments = list() + all_quirks = list() + pref_scream = new /datum/scream_type/human + //Reset cultural stuff + pref_culture = pref_species.cultures[1] + pref_location = pref_species.locations[1] + pref_faction = pref_species.factions[1] + try_get_common_language() + validate_languages() + +/datum/preferences/proc/reset_colors() + for(var/key in mutant_bodyparts) + var/datum/sprite_accessory/SA = GLOB.sprite_accessories[key][mutant_bodyparts[key][MUTANT_INDEX_NAME]] + if(SA.always_color_customizable) + continue + mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] = SA.get_default_color(features, pref_species) + + for(var/zone in body_markings) + var/list/bml = body_markings[zone] + for(var/key in bml) + var/datum/body_marking/BM = GLOB.body_markings[key] + bml[key] = BM.get_default_color(features, pref_species) + +/datum/preferences/proc/equip_preference_loadout(mob/living/carbon/human/H, just_preview = FALSE, datum/job/choosen_job, blacklist, initial) + if(!ishuman(H)) + return + var/list/items_to_pack = list() + for(var/item_name in loadout) + var/datum/loadout_item/LI = GLOB.loadout_items[item_name] + var/obj/item/ITEM = LI.get_spawned_item(loadout[item_name]) + //Skip the item if the job doesn't match, but only if that not used for the preview + if(!just_preview && (choosen_job && LI.restricted_roles && !(choosen_job.title in LI.restricted_roles))) + continue + if(!H.equip_to_appropriate_slot(ITEM,blacklist=blacklist,initial=initial)) + if(!just_preview) + items_to_pack += ITEM + //Here we stick it into a bag, if possible + if(!H.equip_to_slot_if_possible(ITEM, ITEM_SLOT_BACKPACK, disable_warning = TRUE, bypass_equip_delay_self = TRUE, initial=initial)) + //Otherwise - on the ground + ITEM.forceMove(get_turf(H)) + else + qdel(ITEM) + return items_to_pack + +//This needs to be a seperate proc because the character could not have the proper backpack during the moment of loadout equip +/datum/preferences/proc/add_packed_items(mob/living/carbon/human/H, list/packed_items, del_on_fail = TRUE) + //Here we stick loadout items that couldn't be equipped into a bag. + var/obj/item/back_item = H.back + for(var/item in packed_items) + var/obj/item/ITEM = item + if(back_item) + ITEM.forceMove(back_item) + else if (del_on_fail) + qdel(ITEM) + else + ITEM.forceMove(get_turf(H)) + +//For creating consistent icons for human looking simple animals +/proc/get_flat_human_icon_skyrat(icon_id, datum/job/job, datum/species/species_to_set, dummy_key, showDirs = GLOB.cardinals, outfit_override = null) + var/static/list/humanoid_icon_cache = list() + if(icon_id && humanoid_icon_cache[icon_id]) + return humanoid_icon_cache[icon_id] + + var/mob/living/carbon/human/dummy/body = generate_or_wait_for_human_dummy(dummy_key) + + if(species_to_set) + body.set_species(species_to_set, TRUE) + + var/datum/outfit/outfit = outfit_override || job?.outfit + if(job) + body.dna.species.pre_equip_species_outfit(job, body, TRUE) + if(outfit) + body.equipOutfit(outfit, TRUE) + + var/icon/out_icon = icon('icons/effects/effects.dmi', "nothing") + for(var/D in showDirs) + var/icon/partial = getFlatIcon(body, defdir=D) + out_icon.Insert(partial,dir=D) + + humanoid_icon_cache[icon_id] = out_icon + dummy_key? unset_busy_human_dummy(dummy_key) : qdel(body) + return out_icon +*/ diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm new file mode 100644 index 00000000000000..0a7d45a50fc937 --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm @@ -0,0 +1,161 @@ +GLOBAL_LIST_EMPTY(cached_mutant_icon_files) + +/// The flag to show that snouts should use the muzzled sprite. +#define SPRITE_ACCESSORY_USE_MUZZLED_SPRITE (1<<0) +/// The flag to show that this tail sprite can wag. +#define SPRITE_ACCESSORY_WAG_ABLE (1<<1) +/// The flag that controls whether or not this sprite accessory should force the wearer to hide its shoes. +#define SPRITE_ACCESSORY_HIDE_SHOES (1<<2) +/// The flag to that controls whether or not this sprite accessory should force worn facewear to use layers 5 (for glasses) and 4 (for masks and hats). +#define SPRITE_ACCESSORY_USE_ALT_FACEWEAR_LAYER (1<<3) + +/datum/sprite_accessory + ///Unique key of an accessory. All tails should have "tail", ears "ears" etc. + var/key = null + ///If an accessory is special, it wont get included in the normal accessory lists + var/special = FALSE + var/list/recommended_species + ///Which color we default to on acquisition of the accessory (such as switching species, default color for character customization etc) + ///You can also put down a a HEX color, to be used instead as the default + var/default_color + ///Set this to a name, then the accessory will be shown in preferences, if a species can have it. Most accessories have this + ///Notable things that have it set to FALSE are things that need special setup, such as genitals + var/generic + + /// For all the flags that you need to pass from a sprite_accessory to an organ, when it's linked to one. + /// (i.e. passing through the fact that a snout should or shouldn't use a muzzled sprite for head worn items) + var/flags_for_organ = NONE + + color_src = USE_ONE_COLOR + + ///Which layers does this accessory affect + var/relevent_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER, BODY_FRONT_UNDER_CLOTHES, ABOVE_BODY_FRONT_HEAD_LAYER) + + ///This is used to determine whether an accessory gets added to someone. This is important for accessories that are "None", which should have this set to false + var/factual = TRUE + + ///Use this as a type path to an organ that this sprite_accessory will be associated. Make sure the organ has 'mutantpart_info' set properly. + var/organ_type + + ///Set this to true to make an accessory appear as color customizable in preferences despite advanced color settings being off, will also prevent the accessory from being reset + var/always_color_customizable + ///Whether the accessory can have a special icon_state to render, i.e. wagging tails + var/special_render_case + ///Special case of whether the accessory should be shifted in the X dimension, check taur genitals for example + var/special_x_dimension + ///Special case of whether the accessory should have a different icon, check taur genitals for example + var/special_icon_case + ///Special case for MODsuit overlays + var/use_custom_mod_icon + ///Special case of applying a different color + var/special_colorize + ///If defined, the accessory will be only available to ckeys inside the list. ITS ASSOCIATIVE, ie. ("ckey" = TRUE). For speed + var/list/ckey_whitelist + ///Whether this feature is genetic, and thus modifiable by DNA consoles + var/genetic = FALSE + var/uses_emissives = FALSE + var/color_layer_names + /// If this sprite accessory will be inaccessable if ERP config is disabled + var/erp_accessory = FALSE + +/datum/sprite_accessory/New() + if(!default_color) + switch(color_src) + if(USE_ONE_COLOR) + default_color = DEFAULT_PRIMARY + if(USE_MATRIXED_COLORS) + default_color = DEFAULT_MATRIXED + else + default_color = "#FFFFFF" + if(name == "None") + factual = FALSE + if(color_src == USE_MATRIXED_COLORS && default_color != DEFAULT_MATRIXED) + default_color = DEFAULT_MATRIXED + if (color_src == USE_MATRIXED_COLORS) + color_layer_names = list() + if (!GLOB.cached_mutant_icon_files[icon]) + GLOB.cached_mutant_icon_files[icon] = icon_states(new /icon(icon)) + for (var/layer in relevent_layers) + var/layertext = layer == BODY_BEHIND_LAYER ? "BEHIND" : (layer == BODY_ADJ_LAYER ? "ADJ" : "FRONT") + if ("m_[key]_[icon_state]_[layertext]_primary" in GLOB.cached_mutant_icon_files[icon]) + color_layer_names["1"] = "primary" + if ("m_[key]_[icon_state]_[layertext]_secondary" in GLOB.cached_mutant_icon_files[icon]) + color_layer_names["2"] = "secondary" + if ("m_[key]_[icon_state]_[layertext]_tertiary" in GLOB.cached_mutant_icon_files[icon]) + color_layer_names["3"] = "tertiary" + +/datum/sprite_accessory/proc/is_hidden(mob/living/carbon/human/owner) + return FALSE + +/datum/sprite_accessory/proc/get_special_render_state(mob/living/carbon/human/H) + return null + +/datum/sprite_accessory/proc/get_special_render_key(mob/living/carbon/human/owner) + return key + +/datum/sprite_accessory/proc/get_special_render_colour(mob/living/carbon/human/H, passed_state) + return null + +/datum/sprite_accessory/proc/get_special_icon(mob/living/carbon/human/H, passed_state) + return icon + +/datum/sprite_accessory/proc/get_special_x_dimension(mob/living/carbon/human/H, passed_state) + return 0 + +// A proc for accessories which have 'use_custom_mod_icon' set to TRUE +/datum/sprite_accessory/proc/get_custom_mod_icon(mob/living/carbon/human/owner, mutable_appearance/appearance_to_use = null) + return null + +/datum/sprite_accessory/proc/get_default_color(list/features, datum/species/pref_species) //Needs features for the color information + var/list/colors + switch(default_color) + if(DEFAULT_PRIMARY) + colors = list(features["mcolor"]) + if(DEFAULT_SECONDARY) + colors = list(features["mcolor2"]) + if(DEFAULT_TERTIARY) + colors = list(features["mcolor3"]) + if(DEFAULT_MATRIXED) + colors = list(features["mcolor"], features["mcolor2"], features["mcolor3"]) + if(DEFAULT_SKIN_OR_PRIMARY) + if(pref_species && !(TRAIT_USES_SKINTONES in pref_species.inherent_traits)) + colors = list(features["skin_color"]) + else + colors = list(features["mcolor"]) + else + colors = list(default_color) + + return colors + +/datum/sprite_accessory/moth_markings + key = "moth_markings" + generic = "Moth markings" + // organ_type = /obj/item/organ/external/moth_markings // UNCOMMENT THIS IF THEY EVER FIX IT UPSTREAM, CAN'T BE BOTHERED TO FIX IT MYSELF + +/datum/sprite_accessory/moth_markings/is_hidden(mob/living/carbon/human/owner) + return FALSE + +/datum/sprite_accessory/pod_hair + name = "None" + icon = 'modular_nova/master_files/icons/mob/species/podperson_hair.dmi' + icon_state = "None" + key = "pod_hair" + recommended_species = list(SPECIES_PODPERSON, SPECIES_PODPERSON_WEAK) + organ_type = /obj/item/organ/external/pod_hair + +/datum/sprite_accessory/caps + key = "caps" + generic = "Caps" + color_src = USE_ONE_COLOR + organ_type = /obj/item/organ/external/cap + +/datum/sprite_accessory/body_markings + key = "body_markings" + generic = "Body Markings" + default_color = DEFAULT_TERTIARY + +/datum/sprite_accessory/legs + key = "legs" + generic = "Leg Type" + color_src = null + genetic = TRUE diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/ears.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/ears.dm new file mode 100644 index 00000000000000..fd9a028f1b4fb6 --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/ears.dm @@ -0,0 +1,404 @@ +/datum/sprite_accessory/ears + key = "ears" + generic = "Ears" + organ_type = /obj/item/organ/external/ears // SET BACK TO THIS AS SOON AS WE GET EARS AS EXTERNAL ORGANS: organ_type = /obj/item/organ/internal/ears/mutant + relevent_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER) + color_src = USE_MATRIXED_COLORS + genetic = TRUE + +/datum/sprite_accessory/ears/is_hidden(mob/living/carbon/human/wearer) + if(!wearer.head) + return FALSE + + // Can hide if wearing hat + if(key in wearer.try_hide_mutant_parts) + return TRUE + + // Exception for MODs + if(istype(wearer.head, /obj/item/clothing/head/mod)) + return FALSE + + // Hide accessory if flagged to do so + if((wearer.head?.flags_inv & HIDEHAIR || wearer.wear_mask?.flags_inv & HIDEHAIR) \ + // This line basically checks if we FORCE accessory-ears to show, for items with earholes like Balaclavas and Luchador masks + && ((wearer.head && !(wearer.head.flags_inv & SHOWSPRITEEARS)) || (wearer.wear_mask && !(wearer.wear_mask?.flags_inv & SHOWSPRITEEARS)))) + return TRUE + + return FALSE + +/datum/sprite_accessory/ears/cat + recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_HUMANOID, SPECIES_GHOUL) + relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/ears/fox + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/ears/mutant + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/ears.dmi' + organ_type = /obj/item/organ/external/ears // SET BACK TO THIS AS SOON AS WE GET EARS AS EXTERNAL ORGANS: organ_type = /obj/item/organ/internal/ears/mutant + color_src = USE_MATRIXED_COLORS + recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_HUMANOID, SPECIES_GHOUL) + uses_emissives = TRUE + +/datum/sprite_accessory/ears/mutant/none + name = "None" + icon_state = "none" + color_src = null + factual = FALSE + +/datum/sprite_accessory/ears/mutant/big + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/ears_big.dmi' + +/datum/sprite_accessory/ears/mutant/vulpkanin + recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_VULP, SPECIES_HUMANOID, SPECIES_GHOUL) + +/datum/sprite_accessory/ears/mutant/tajaran + recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_TAJARAN, SPECIES_HUMANOID, SPECIES_GHOUL) + +/datum/sprite_accessory/ears/mutant/akula + recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_AQUATIC, SPECIES_AKULA, SPECIES_HUMANOID, SPECIES_GHOUL) + +/datum/sprite_accessory/ears/mutant/axolotl + name = "Axolotl" + icon_state = "axolotl" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/ears/mutant/bat + name = "Bat" + icon_state = "bat" + +/datum/sprite_accessory/ears/mutant/bear + name = "Bear" + icon_state = "bear" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/ears/mutant/bigwolf + name = "Big Wolf" + icon_state = "bigwolf" + +/datum/sprite_accessory/ears/mutant/bigwolfinner + name = "Big Wolf (ALT)" + icon_state = "bigwolfinner" + hasinner = TRUE + +/datum/sprite_accessory/ears/mutant/bigwolfdark //alphabetical sort ignored here for ease-of-use + name = "Dark Big Wolf" + icon_state = "bigwolfdark" + +/datum/sprite_accessory/ears/mutant/bigwolfinnerdark + name = "Dark Big Wolf (ALT)" + icon_state = "bigwolfinnerdark" + hasinner = TRUE + +/datum/sprite_accessory/ears/mutant/bunny + name = "Bunny" + icon_state = "bunny" + +/datum/sprite_accessory/ears/mutant/tajaran/catbig + name = "Cat, Big" + icon_state = "catbig" + +/datum/sprite_accessory/ears/mutant/tajaran/catnormal + name = "Cat, normal" + icon_state = "catnormal" + +/datum/sprite_accessory/ears/mutant/cow + name = "Cow" + icon_state = "cow" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/ears/mutant/curled + name = "Curled Horn" + icon_state = "horn1" + color_src = USE_ONE_COLOR + default_color = DEFAULT_TERTIARY + +/datum/sprite_accessory/ears/mutant/deer + name = "Deer (Antler)" + icon_state = "deer" + color_src = USE_ONE_COLOR + default_color = DEFAULT_TERTIARY + +/datum/sprite_accessory/ears/mutant/eevee + name = "Eevee" + icon_state = "eevee" + +/datum/sprite_accessory/ears/mutant/eevee_alt + name = "Eevee ALT" + icon_state = "eevee_alt" + color_src = USE_MATRIXED_COLORS + +/datum/sprite_accessory/ears/mutant/elf + name = "Elf" + icon_state = "elf" + color_src = USE_ONE_COLOR + default_color = DEFAULT_SKIN_OR_PRIMARY + +/datum/sprite_accessory/ears/mutant/elf/wide + name = "Wide Elf" + icon_state = "elfwide" + +/datum/sprite_accessory/ears/mutant/elf/broad + name = "Broad Elf" + icon_state = "elfbroad" + +/datum/sprite_accessory/ears/mutant/elf/longer + name = "Longer Elf" + icon_state = "elflonger" + +/datum/sprite_accessory/ears/mutant/elephant + name = "Elephant" + icon_state = "elephant" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/ears/mutant/fennec + name = "Fennec" + icon_state = "fennec" + +/datum/sprite_accessory/ears/mutant/fish + name = "Fish" + icon_state = "fish" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/ears/mutant/vulpkanin/fox + name = "Fox" + icon_state = "fox" + +/datum/sprite_accessory/ears/mutant/akula/hammerhead + name = "Hammerhead" + icon_state = "hammerhead" + +/datum/sprite_accessory/ears/mutant/husky + name = "Husky" + icon_state = "wolf" + +/datum/sprite_accessory/ears/mutant/jellyfish + name = "Jellyfish" + icon_state = "jellyfish" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/ears/mutant/kangaroo + name = "Kangaroo" + icon_state = "kangaroo" + +/datum/sprite_accessory/ears/mutant/lab + name = "Dog, Long" + icon_state = "lab" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/ears/mutant/murid + name = "Murid" + icon_state = "murid" + +/datum/sprite_accessory/ears/mutant/vulpkanin/otie + name = "Otusian" + icon_state = "otie" + +/datum/sprite_accessory/ears/mutant/protogen + name = "Protogen" + icon_state = "protogen" + +/datum/sprite_accessory/ears/mutant/rabbit + name = "Rabbit" + icon_state = "rabbit" + +/datum/sprite_accessory/ears/mutant/big/hare_large + name = "Rabbit (Large)" + icon_state = "bunny_large" + +/datum/sprite_accessory/ears/mutant/big/bunny_large + name = "Curved Rabbit Ears (Large)" + icon_state = "rabbit_large" + +/datum/sprite_accessory/ears/mutant/big/sandfox_large + name = "Sandfox (Large)" + icon_state = "sandfox_large" + +/datum/sprite_accessory/ears/mutant/pede + name = "Scolipede" + icon_state = "pede" + +/datum/sprite_accessory/ears/mutant/akula/sergal + name = "Sergal" + icon_state = "sergal" + +/datum/sprite_accessory/ears/mutant/skunk + name = "skunk" + icon_state = "skunk" + +/datum/sprite_accessory/ears/mutant/squirrel + name = "Squirrel" + icon_state = "squirrel" + +/datum/sprite_accessory/ears/mutant/vulpkanin/wolf + name = "Wolf" + icon_state = "wolf" + +/datum/sprite_accessory/ears/mutant/vulpkanin/perky + name = "Perky" + icon_state = "perky" + +/datum/sprite_accessory/ears/mutant/antenna_simple1 + name = "Insect antenna (coloring 2)" + icon_state = "antenna_simple1" + +/datum/sprite_accessory/ears/mutant/antenna_simple1_v2 + name = "Insect antenna (coloring 3)" + icon_state = "antenna_simple1v2" + +/datum/sprite_accessory/ears/mutant/antenna_simple2 + name = "Insect antenna 2 (coloring 2)" + icon_state = "antenna_simple2" + +/datum/sprite_accessory/ears/mutant/antenna_simple2_v2 + name = "Insect antenna 2 (coloring 3)" + icon_state = "antenna_simple2v2" + +/datum/sprite_accessory/ears/mutant/antenna_fuzzball + name = "Fuzzball antenna (coloring 2+3)" + icon_state = "antenna_fuzzball" + +/datum/sprite_accessory/ears/mutant/antenna_fuzzball_v2 + name = "Fuzzball antenna (coloring 3+1)" + icon_state = "antenna_fuzzballv2" + +/datum/sprite_accessory/ears/mutant/cobrahood + name = "Cobra Hood" + icon_state = "cobrahood" + +/datum/sprite_accessory/ears/mutant/cobrahoodears + name = "Cobra Hood (Ears)" + icon_state = "cobraears" + +/datum/sprite_accessory/ears/mutant/miqote + name = "Miqo'te" + icon_state = "miqote" + +/datum/sprite_accessory/ears/mutant/hare + name = "Hare" + icon_state = "rabbitalt" + +/datum/sprite_accessory/ears/mutant/bunnyalt + name = "Curved Rabbit Ears" + icon_state = "bunnyalt" + +/datum/sprite_accessory/ears/mutant/deerear + name = "Deer (ear)" + icon_state = "deerear" + +/datum/sprite_accessory/ears/mutant/teshari + recommended_species = list(SPECIES_TESHARI) + +/datum/sprite_accessory/ears/mutant/teshari/regular + name = "Teshari Regular" + icon_state = "teshari_regular" + +/datum/sprite_accessory/ears/mutant/teshari/feathers_bushy + name = "Teshari Feathers Bushy" + icon_state = "teshari_feathers_bushy" + +/datum/sprite_accessory/ears/mutant/teshari/feathers_mohawk + name = "Teshari Feathers Mohawk" + icon_state = "teshari_feathers_mohawk" + +/datum/sprite_accessory/ears/mutant/teshari/feathers_spiky + name = "Teshari Feathers Spiky" + icon_state = "teshari_feathers_spiky" + +/datum/sprite_accessory/ears/mutant/teshari/feathers_pointy + name = "Teshari Feathers Pointy" + icon_state = "teshari_feathers_pointy" + +/datum/sprite_accessory/ears/mutant/teshari/feathers_upright + name = "Teshari Feathers Upright" + icon_state = "teshari_feathers_upright" + +/datum/sprite_accessory/ears/mutant/teshari/feathers_mane + name = "Teshari Feathers Mane" + icon_state = "teshari_feathers_mane" + +/datum/sprite_accessory/ears/mutant/teshari/feathers_maneless + name = "Teshari Feathers Mane Fluffless" + icon_state = "teshari_feathers_maneless" + +/datum/sprite_accessory/ears/mutant/teshari/feathers_droopy + name = "Teshari Feathers Droopy" + icon_state = "teshari_feathers_droopy" + +/datum/sprite_accessory/ears/mutant/teshari/feathers_longway + name = "Teshari Feathers Longway" + icon_state = "teshari_feathers_longway" + +/datum/sprite_accessory/ears/mutant/teshari/feathers_tree + name = "Teshari Feathers Tree" + icon_state = "teshari_feathers_tree" + +/datum/sprite_accessory/ears/mutant/teshari/feathers_ponytail + name = "Teshari Feathers Ponytail" + icon_state = "teshari_feathers_ponytail" + +/datum/sprite_accessory/ears/mutant/teshari/feathers_mushroom + name = "Teshari Feathers Mushroom" + icon_state = "teshari_feathers_mushroom" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/ears/mutant/teshari/feathers_backstrafe + name = "Teshari Feathers Backstrafe" + icon_state = "teshari_feathers_backstrafe" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/ears/mutant/teshari/feathers_thinmohawk + name = "Teshari Feathers Thin Mohawk" + icon_state = "teshari_feathers_thinmohawk" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/ears/mutant/teshari/feathers_thin + name = "Teshari Feathers Thin" + icon_state = "teshari_feathers_thin" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/ears/mutant/teshari/feathers_thinmane + name = "Teshari Feathers Thin Mane" + icon_state = "teshari_feathers_thinmane" + +/datum/sprite_accessory/ears/mutant/teshari/feathers_thinmaneless + name = "Teshari Feathers Thin Mane Fluffless" + icon_state = "teshari_feathers_thinmaneless" + +/datum/sprite_accessory/ears/mutant/deer2 + name = "Deer 2" + icon_state = "deer2" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/ears/mutant/mouse + name = "Mouse" + icon_state = "mouse" + +/datum/sprite_accessory/ears/mutant/mouse_two + name = "Mouse II" + icon_state = "mouse_two" + +/datum/sprite_accessory/ears/mutant/big/fourears1 + name = "Four Ears 1" + icon_state = "four_ears_1" + +/datum/sprite_accessory/ears/mutant/fourears2 + name = "Four Ears 2" + icon_state = "four_ears_2" + +/datum/sprite_accessory/ears/mutant/big/fourears3 + name = "Four Ears 3" + icon_state = "four_ears_3" + +/datum/sprite_accessory/ears/acrador + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/ears_big.dmi' + color_src = USE_MATRIXED_COLORS + +/datum/sprite_accessory/ears/acrador/long + icon_state = "acrador_long" + name = "Acrador (Long)" + +/datum/sprite_accessory/ears/acrador/short + icon_state = "acrador_short" + name = "Acrador (Short)" diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/fluff.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/fluff.dm new file mode 100644 index 00000000000000..71df867fdc2c88 --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/fluff.dm @@ -0,0 +1,125 @@ +/datum/sprite_accessory/fluff/moth + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/moth_fluff.dmi' + default_color = "#FFFFFF" + key = "fluff" + generic = "Fluff" + recommended_species = list(SPECIES_MOTH, SPECIES_MAMMAL, SPECIES_INSECT) + relevent_layers = list(BODY_ADJ_LAYER, BODY_FRONT_LAYER) + genetic = TRUE + organ_type = /obj/item/organ/external/fluff + +/datum/sprite_accessory/fluff/moth/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/fluff/moth/is_hidden(mob/living/carbon/human/human) + if((human.head?.flags_inv & HIDEHAIR) || (human.wear_mask?.flags_inv & HIDEHAIR)) + return TRUE + + return FALSE + +/datum/sprite_accessory/fluff/moth/plain + name = "Plain" + icon_state = "plain" + +/datum/sprite_accessory/fluff/moth/monarch + name = "Monarch" + icon_state = "monarch" + +/datum/sprite_accessory/fluff/moth/luna + name = "Luna" + icon_state = "luna" + +/datum/sprite_accessory/fluff/moth/atlas + name = "Atlas" + icon_state = "atlas" + +/datum/sprite_accessory/fluff/moth/reddish + name = "Reddish" + icon_state = "redish" + +/datum/sprite_accessory/fluff/moth/royal + name = "Royal" + icon_state = "royal" + +/datum/sprite_accessory/fluff/moth/gothic + name = "Gothic" + icon_state = "gothic" + +/datum/sprite_accessory/fluff/moth/lovers + name = "Lovers" + icon_state = "lovers" + +/datum/sprite_accessory/fluff/moth/whitefly + name = "White Fly" + icon_state = "whitefly" + +/datum/sprite_accessory/fluff/moth/punished + name = "Burnt Off" + icon_state = "punished" + locked = TRUE + +/datum/sprite_accessory/fluff/moth/firewatch + name = "Firewatch" + icon_state = "firewatch" + +/datum/sprite_accessory/fluff/moth/deathhead + name = "Deathshead" + icon_state = "deathhead" + +/datum/sprite_accessory/fluff/moth/poison + name = "Poison" + icon_state = "poison" + +/datum/sprite_accessory/fluff/moth/ragged + name = "Ragged" + icon_state = "ragged" + +/datum/sprite_accessory/fluff/moth/moonfly + name = "Moon Fly" + icon_state = "moonfly" + +/datum/sprite_accessory/fluff/moth/snow + name = "Snow" + icon_state = "snow" + +/datum/sprite_accessory/fluff/moth/oakworm + name = "Oak Worm" + icon_state = "oakworm" + +/datum/sprite_accessory/fluff/moth/jungle + name = "Jungle" + icon_state = "jungle" + +/datum/sprite_accessory/fluff/moth/witchwing + name = "Witch Wing" + icon_state = "witchwing" + +/datum/sprite_accessory/fluff/moth/insectm + name = "Insect male (Tertiary)" + icon_state = "insectm" + default_color = DEFAULT_TERTIARY + +/datum/sprite_accessory/fluff/moth/insectf + name = "Insect female (Tertiary)" + icon_state = "insectf" + default_color = DEFAULT_TERTIARY + +/datum/sprite_accessory/fluff/moth/fsnow + name = "Snow (Top)" + icon_state = "fsnow" + +/datum/sprite_accessory/fluff/moth/snowdual + name = "Snow (Dual-Color)" + icon_state = "snowdual" + color_src = USE_MATRIXED_COLORS + +/datum/sprite_accessory/fluff/moth/teshari + name = "Teshari Mane" + icon_state = "teshmane" + default_color = DEFAULT_TERTIARY + +/datum/sprite_accessory/fluff/moth/teshari/front + name = "Teshari Mane (Top)" + icon_state = "teshmane_top" + default_color = DEFAULT_TERTIARY diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/frills.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/frills.dm new file mode 100644 index 00000000000000..4fbe570b8ac3e6 --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/frills.dm @@ -0,0 +1,55 @@ +/datum/sprite_accessory/frills + key = "frills" + generic = "Frills" + default_color = DEFAULT_SECONDARY + relevent_layers = list(BODY_ADJ_LAYER) + genetic = TRUE + organ_type = /obj/item/organ/external/frills + +/datum/sprite_accessory/frills/is_hidden(mob/living/carbon/human/human) + if((human.head?.flags_inv & HIDEEARS) || (key in human.try_hide_mutant_parts)) + return TRUE + + return FALSE + +/datum/sprite_accessory/frills/divinity + name = "Divinity" + icon_state = "divinity" + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/frills.dmi' + +/datum/sprite_accessory/frills/horns + name = "Horns" + icon_state = "horns" + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/frills.dmi' + +/datum/sprite_accessory/frills/hornsdouble + name = "Horns Double" + icon_state = "hornsdouble" + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/frills.dmi' + +/datum/sprite_accessory/frills/big + name = "Big" + icon_state = "big" + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/frills.dmi' + +/datum/sprite_accessory/frills/cobrahood + name = "Cobra Hood" + icon_state = "cobrahood" + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/frills.dmi' + color_src = USE_MATRIXED_COLORS + +/datum/sprite_accessory/frills/cobrahoodears + name = "Cobra Hood (Ears)" + icon_state = "cobraears" + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/frills.dmi' + color_src = USE_MATRIXED_COLORS + +/datum/sprite_accessory/frills/neckfrills + name = "Neck Frills" + icon_state = "neck" + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/frills.dmi' + +/datum/sprite_accessory/frills/neckfrillsfuller + name = "Neck Frills (Fuller)" + icon_state = "neckfull" + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/frills.dmi' diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm new file mode 100644 index 00000000000000..89a0e31bbfed92 --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm @@ -0,0 +1,308 @@ +/// The alternative `dimension_x` to use if it's a taur. +#define TAUR_DIMENSION_X 64 + +/datum/sprite_accessory/genital + special_render_case = TRUE + special_colorize = TRUE + var/associated_organ_slot + /// If true, then there should be a variant in the icon file that's slightly pinkier to match human base colors. + var/has_skintone_shading = FALSE + ///Where the genital is on the body. If clothing doesn't cover it, it shows up! + var/genital_location = GROIN + +/datum/sprite_accessory/genital/is_hidden(mob/living/carbon/human/target_mob) + var/obj/item/organ/external/genital/badonkers = target_mob.get_organ_slot(associated_organ_slot) + if(!badonkers) + return TRUE + switch(badonkers.visibility_preference) + if(GENITAL_ALWAYS_SHOW) //Never hidden + return FALSE + if(GENITAL_HIDDEN_BY_CLOTHES) //Hidden if the relevant body parts are covered by clothes or underwear + //Do they have a Uniform or Suit that covers them? + if((target_mob.w_uniform && target_mob.w_uniform.body_parts_covered & genital_location) || (target_mob.wear_suit && target_mob.wear_suit.body_parts_covered & genital_location)) + return TRUE + //Do they have a Hospital Gown covering them? (The gown has no body_parts_covered so needs its own check) + if(istype(target_mob.wear_suit, /obj/item/clothing/suit/toggle/labcoat/hospitalgown)) + return TRUE + + //Are they wearing an Undershirt? + if(target_mob.undershirt != "Nude" && !(target_mob.underwear_visibility & UNDERWEAR_HIDE_SHIRT)) + var/datum/sprite_accessory/undershirt/worn_undershirt = GLOB.undershirt_list[target_mob.undershirt] + //Does this Undershirt cover a relevant slot? + if(genital_location == CHEST) //(Undershirt always covers chest) + return TRUE + + else if(genital_location == GROIN && worn_undershirt.hides_groin) + return TRUE + + //Undershirt didn't cover them, are they wearing Underwear? + if(target_mob.underwear != "Nude" && !(target_mob.underwear_visibility & UNDERWEAR_HIDE_UNDIES)) + var/datum/sprite_accessory/underwear/worn_underwear = GLOB.underwear_list[target_mob.underwear] + //Does this Underwear cover a relevant slot? + if(genital_location == GROIN) //(Underwear always covers groin) + return TRUE + + else if(genital_location == CHEST && worn_underwear.hides_breasts) + return TRUE + + //Are they wearing a bra? + if(target_mob.bra != "Nude" && !(target_mob.underwear_visibility & UNDERWEAR_HIDE_BRA) && genital_location == CHEST) + return TRUE + + //Nothing they're wearing will cover them + else + return FALSE + + //If not always shown or hidden by clothes, then it defaults to always hidden + else + return TRUE + +/datum/sprite_accessory/genital/get_special_render_state(mob/living/carbon/human/human) + var/obj/item/organ/external/genital/genital = human.get_organ_slot(associated_organ_slot) + return "[genital?.sprite_suffix]" + +/datum/sprite_accessory/genital/get_special_render_colour(mob/living/carbon/human/human, render_state) + var/obj/item/organ/external/genital/genital = human.get_organ_slot(associated_organ_slot) + if(genital?.uses_skin_color && HAS_TRAIT(human, TRAIT_USES_SKINTONES)) + return skintone2hex(human.skin_tone) + +/datum/sprite_accessory/genital/penis + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/genitals/penis_onmob.dmi' + organ_type = /obj/item/organ/external/genital/penis + associated_organ_slot = ORGAN_SLOT_PENIS + key = ORGAN_SLOT_PENIS + color_src = USE_MATRIXED_COLORS + always_color_customizable = TRUE + center = TRUE + special_icon_case = TRUE + special_x_dimension = TRUE + //default_color = DEFAULT_SKIN_OR_PRIMARY //This is the price we're paying for sheaths + relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) + genetic = TRUE + var/can_have_sheath = TRUE + +/datum/sprite_accessory/genital/penis/get_special_icon(mob/living/carbon/human/target_mob) + var/taur_mode = target_mob?.get_taur_mode() + + if(!taur_mode || !target_mob.dna.features["penis_taur_mode"] || taur_mode & STYLE_TAUR_SNAKE) + return icon + + return 'modular_nova/master_files/icons/mob/sprite_accessory/genitals/taur_penis_onmob.dmi' + +/datum/sprite_accessory/genital/penis/get_special_x_dimension(mob/living/carbon/human/target_mob) + var/taur_mode = target_mob?.get_taur_mode() + + if(!taur_mode || !target_mob.dna.features["penis_taur_mode"] || taur_mode & STYLE_TAUR_SNAKE) + return dimension_x + + return TAUR_DIMENSION_X + +/datum/sprite_accessory/genital/penis/none + icon_state = "none" + name = "None" + factual = FALSE + color_src = null + +/datum/sprite_accessory/genital/penis/human + icon_state = "human" + name = "Human" + color_src = USE_ONE_COLOR + default_color = DEFAULT_SKIN_OR_PRIMARY + has_skintone_shading = TRUE + can_have_sheath = FALSE + +/datum/sprite_accessory/genital/penis/nondescript + icon_state = "nondescript" + name = "Nondescript" + +/datum/sprite_accessory/genital/penis/knotted + icon_state = "knotted" + name = "Knotted" + +/datum/sprite_accessory/genital/penis/flared + icon_state = "flared" + name = "Flared" + +/datum/sprite_accessory/genital/penis/barbknot + icon_state = "barbknot" + name = "Barbed, Knotted" + +/datum/sprite_accessory/genital/penis/tapered + icon_state = "tapered" + name = "Tapered" + +/datum/sprite_accessory/genital/penis/tentacle + icon_state = "tentacle" + name = "Tentacled" + +/datum/sprite_accessory/genital/penis/hemi + icon_state = "hemi" + name = "Hemi" + +/datum/sprite_accessory/genital/penis/hemiknot + icon_state = "hemiknot" + name = "Knotted Hemi" + +/datum/sprite_accessory/genital/testicles + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/genitals/testicles_onmob.dmi' + organ_type = /obj/item/organ/external/genital/testicles + associated_organ_slot = ORGAN_SLOT_TESTICLES + key = ORGAN_SLOT_TESTICLES + always_color_customizable = TRUE + special_icon_case = TRUE + special_x_dimension = TRUE + default_color = DEFAULT_SKIN_OR_PRIMARY + relevent_layers = list(BODY_ADJ_LAYER, BODY_BEHIND_LAYER) + genetic = TRUE + var/has_size = TRUE + +/datum/sprite_accessory/genital/testicles/get_special_icon(mob/living/carbon/human/target_mob) + var/taur_mode = target_mob?.get_taur_mode() + + if(!taur_mode || !target_mob.dna.features["penis_taur_mode"] || taur_mode & STYLE_TAUR_SNAKE) + return icon + + return 'modular_nova/master_files/icons/mob/sprite_accessory/genitals/taur_penis_onmob.dmi' + +/datum/sprite_accessory/genital/testicles/get_special_x_dimension(mob/living/carbon/human/target_mob) + var/taur_mode = target_mob?.get_taur_mode() + + if(!taur_mode || !target_mob.dna.features["penis_taur_mode"] || taur_mode & STYLE_TAUR_SNAKE) + return dimension_x + + return TAUR_DIMENSION_X + +/datum/sprite_accessory/genital/testicles/none + icon_state = "none" + name = "None" + factual = FALSE + color_src = null + +/datum/sprite_accessory/genital/testicles/pair + name = "Pair" + icon_state = "pair" + has_skintone_shading = TRUE + +/datum/sprite_accessory/genital/testicles/internal + name = "Internal" + icon_state = "none" + color_src = null + has_size = FALSE + +/datum/sprite_accessory/genital/vagina + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/genitals/vagina_onmob.dmi' + organ_type = /obj/item/organ/external/genital/vagina + associated_organ_slot = ORGAN_SLOT_VAGINA + key = ORGAN_SLOT_VAGINA + always_color_customizable = TRUE + default_color = "#FFCCCC" + relevent_layers = list(BODY_FRONT_LAYER) + genetic = TRUE + var/alt_aroused = TRUE + +/datum/sprite_accessory/genital/vagina/none + icon_state = "none" + name = "None" + factual = FALSE + color_src = null + +/datum/sprite_accessory/genital/vagina/human + icon_state = "human" + name = "Human" + +/datum/sprite_accessory/genital/vagina/tentacles + icon_state = "tentacle" + name = "Tentacle" + +/datum/sprite_accessory/genital/vagina/dentata + icon_state = "dentata" + name = "Dentata" + +/datum/sprite_accessory/genital/vagina/hairy + icon_state = "hairy" + name = "Hairy" + alt_aroused = FALSE + +/datum/sprite_accessory/genital/vagina/spade + icon_state = "spade" + name = "Spade" + alt_aroused = FALSE + +/datum/sprite_accessory/genital/vagina/furred + icon_state = "furred" + name = "Furred" + alt_aroused = FALSE + +/datum/sprite_accessory/genital/vagina/gaping + icon_state = "gaping" + name = "Gaping" + +/datum/sprite_accessory/genital/vagina/cloaca + icon_state = "cloaca" + name = "Cloaca" + +/datum/sprite_accessory/genital/womb + organ_type = /obj/item/organ/external/genital/womb + associated_organ_slot = ORGAN_SLOT_WOMB + key = ORGAN_SLOT_WOMB + genetic = TRUE + +/datum/sprite_accessory/genital/womb/none + icon_state = "none" + name = "None" + factual = FALSE + color_src = null + +/datum/sprite_accessory/genital/womb/normal + icon_state = "none" + name = "Normal" + color_src = null + +/datum/sprite_accessory/genital/anus + organ_type = /obj/item/organ/external/genital/anus + associated_organ_slot = ORGAN_SLOT_ANUS + key = ORGAN_SLOT_ANUS + genetic = TRUE + +/datum/sprite_accessory/genital/anus/none + icon_state = "none" + name = "None" + factual = FALSE + color_src = null + +/datum/sprite_accessory/genital/anus/normal + icon_state = "anus" + name = "Anus" + color_src = null + +/datum/sprite_accessory/genital/breasts + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/genitals/breasts_onmob.dmi' + organ_type = /obj/item/organ/external/genital/breasts + associated_organ_slot = ORGAN_SLOT_BREASTS + key = ORGAN_SLOT_BREASTS + always_color_customizable = TRUE + default_color = DEFAULT_SKIN_OR_PRIMARY + relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) + has_skintone_shading = TRUE + genital_location = CHEST + genetic = TRUE + +/datum/sprite_accessory/genital/breasts/none + icon_state = "none" + name = "None" + factual = FALSE + color_src = null + +/datum/sprite_accessory/genital/breasts/pair + icon_state = "pair" + name = "Pair" + +/datum/sprite_accessory/genital/breasts/quad + icon_state = "quad" + name = "Quad" + +/datum/sprite_accessory/genital/breasts/sextuple + icon_state = "sextuple" + name = "Sextuple" + +#undef TAUR_DIMENSION_X diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/hair.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/hair.dm similarity index 97% rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/hair.dm rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/hair.dm index cbb1565392f3c9..6573e793d98020 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/hair.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/hair.dm @@ -1,7 +1,7 @@ // Hairstyles /datum/sprite_accessory/hair/skyrat - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/hair.dmi' + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/hair.dmi' /datum/sprite_accessory/hair/skyrat/pigtails4 name = "Pigtails 4" @@ -365,22 +365,22 @@ /datum/sprite_accessory/hair/skyrat/halfshavedlong name = "Half-shaved long" - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/more_hair.dmi' + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/more_hair.dmi' icon_state = "halfshave_long" /datum/sprite_accessory/hair/skyrat/halfshavedmessy name = "Half-shaved messy" - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/more_hair.dmi' + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/more_hair.dmi' icon_state = "halfshave_messy" /datum/sprite_accessory/hair/skyrat/halfshavedmessylong name = "Half-shave long messy" - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/more_hair.dmi' + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/more_hair.dmi' icon_state = "halfshave_messylong" /datum/sprite_accessory/hair/skyrat/halfshavedglamorous name = "Half-shave glamorous" - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/more_hair.dmi' + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/more_hair.dmi' icon_state = "halfshave_glamorous" /datum/sprite_accessory/hair/skyrat/emoshort @@ -622,7 +622,7 @@ // Facial hair /datum/sprite_accessory/facial_hair/skyrat - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/facialhair.dmi' + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/facialhair.dmi' /datum/sprite_accessory/facial_hair/skyrat/sideburns name = "Sideburns" diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/head_accessory.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/head_accessory.dm similarity index 91% rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/head_accessory.dm rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/head_accessory.dm index 42eaa1f1b551f6..f776707563b697 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/head_accessory.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/head_accessory.dm @@ -1,5 +1,5 @@ /datum/sprite_accessory/head_accessory - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/head_accessory.dmi' + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/head_accessory.dmi' key = "head_acc" generic = "Head Accessory" relevent_layers = list(BODY_ADJ_LAYER, BODY_FRONT_LAYER) diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/horns.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/horns.dm similarity index 90% rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/horns.dm rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/horns.dm index c04f6f40d1af1c..2d23ffe8a589fc 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/horns.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/horns.dm @@ -2,7 +2,7 @@ key = "horns" generic = "Horns" relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER, BODY_ADJ_LAYER) - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/horns.dmi' + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/horns.dmi' default_color = "#555555" genetic = TRUE organ_type = /obj/item/organ/external/horns @@ -59,12 +59,16 @@ icon_state = "oni_large" /datum/sprite_accessory/horns/big - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/horns_big.dmi' + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/horns_big.dmi' /datum/sprite_accessory/horns/big/antlers name = "Antlers" icon_state = "antlers" +/datum/sprite_accessory/horns/big/wideantlers + name = "Antlers (Palmated)" + icon_state = "wideantlers" + /datum/sprite_accessory/horns/big/impala name = "Impala" icon_state = "impala" diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm similarity index 97% rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm index 8e19d245eee2b1..d466ab830d7126 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm @@ -3,7 +3,7 @@ ************** IPC SCREENS **************** *******************************************/ /datum/sprite_accessory/screen - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/ipc_screens.dmi' + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/ipc_screens.dmi' color_src = null key = MUTANT_SYNTH_SCREEN generic = "Screen" @@ -18,6 +18,10 @@ name = "Blank" icon_state = "blank" +/datum/sprite_accessory/screen/blank_white + name = "Blank White" + icon_state = "blankwhite" + /datum/sprite_accessory/screen/pink name = "Pink" icon_state = "pink" @@ -139,7 +143,7 @@ *******************************************/ /datum/sprite_accessory/antenna - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/ipc_antennas.dmi' + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/ipc_antennas.dmi' color_src = USE_ONE_COLOR default_color = DEFAULT_SECONDARY recommended_species = list(SPECIES_SYNTH) diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/moth_antennae.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/moth_antennae.dm similarity index 91% rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/moth_antennae.dm rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/moth_antennae.dm index c8183f2c242fd1..6ebbda008dfd23 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/moth_antennae.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/moth_antennae.dm @@ -22,3 +22,7 @@ // This line basically checks if we FORCE accessory-ears to show, for items with earholes like Balaclavas and Luchador masks && ((wearer.head && !(wearer.head.flags_inv & SHOWSPRITEEARS)) || (wearer.wear_mask && !(wearer.wear_mask?.flags_inv & SHOWSPRITEEARS)))) return TRUE + +/datum/sprite_accessory/moth_antennae/none + name = "None" + icon_state = "none" diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/neck_accessory.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/neck_accessory.dm similarity index 91% rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/neck_accessory.dm rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/neck_accessory.dm index 503906c39ccc0e..bd0444f2b688d7 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/neck_accessory.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/neck_accessory.dm @@ -1,5 +1,5 @@ /datum/sprite_accessory/neck_accessory - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/neck_accessory.dmi' + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/neck_accessory.dmi' key = "neck_acc" generic = "Neck Accessory" relevent_layers = list(BODY_ADJ_LAYER, BODY_FRONT_LAYER) diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/skrell_hair.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/skrell_hair.dm similarity index 89% rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/skrell_hair.dm rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/skrell_hair.dm index 73521086076146..5664c339377ecd 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/skrell_hair.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/skrell_hair.dm @@ -1,5 +1,5 @@ /datum/sprite_accessory/skrell_hair - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/skrell_hair.dmi' + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/skrell_hair.dmi' generic = "Skrell Headtails" key = "skrell_hair" color_src = USE_ONE_COLOR diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm similarity index 91% rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm index 8ab45ecf430239..9eb7da1b4dd434 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm @@ -1,7 +1,7 @@ /datum/sprite_accessory/snouts key = "snout" generic = "Snout" - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/lizard_snouts.dmi' + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/lizard_snouts.dmi' flags_for_organ = SPRITE_ACCESSORY_USE_MUZZLED_SPRITE organ_type = /obj/item/organ/external/snout recommended_species = list(SPECIES_MAMMAL, SPECIES_LIZARD, SPECIES_UNATHI, SPECIES_LIZARD_ASH, SPECIES_LIZARD_SILVER) @@ -30,7 +30,7 @@ return !sprite_datum.is_hidden(human) -/obj/item/organ/external/snout/Insert(mob/living/carbon/reciever, special, drop_if_replaced) +/obj/item/organ/external/snout/Insert(mob/living/carbon/reciever, special, movement_flags) if(sprite_accessory_flags & SPRITE_ACCESSORY_USE_MUZZLED_SPRITE) external_bodytypes |= BODYTYPE_SNOUTED if(sprite_accessory_flags & SPRITE_ACCESSORY_USE_ALT_FACEWEAR_LAYER) @@ -59,7 +59,7 @@ factual = FALSE /datum/sprite_accessory/snouts/mammal - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/snouts.dmi' + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/snouts.dmi' color_src = USE_MATRIXED_COLORS recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMANOID) @@ -429,7 +429,31 @@ flags_for_organ = NONE /datum/sprite_accessory/snouts/acrador - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/snouts.dmi' + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/snouts.dmi' color_src = USE_MATRIXED_COLORS name = "Acrador (Short)" icon_state = "acrador_short" + +/datum/sprite_accessory/snouts/acrador_1 + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/snouts.dmi' + color_src = USE_MATRIXED_COLORS + name = "Acrador 1 (Normal)" + icon_state = "acrador_1" + +/datum/sprite_accessory/snouts/acrador_2 + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/snouts.dmi' + color_src = USE_MATRIXED_COLORS + name = "Acrador 2 (Normal)" + icon_state = "acrador_2" + +/datum/sprite_accessory/snouts/acrador_3 + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/snouts.dmi' + color_src = USE_MATRIXED_COLORS + name = "Acrador 3 (Normal)" + icon_state = "acrador_3" + +/datum/sprite_accessory/snouts/acrador_4 + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/snouts.dmi' + color_src = USE_MATRIXED_COLORS + name = "Acrador 4 (Normal)" + icon_state = "acrador_4" diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/spines.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/spines.dm new file mode 100644 index 00000000000000..51a93be25ae654 --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/spines.dm @@ -0,0 +1,54 @@ +/datum/sprite_accessory/spines + key = "spines" + generic = "Spines" + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/lizard_spines.dmi' + special_render_case = TRUE + default_color = DEFAULT_SECONDARY + recommended_species = list(SPECIES_LIZARD, SPECIES_UNATHI, SPECIES_LIZARD_ASH, SPECIES_LIZARD_SILVER) + relevent_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER) + genetic = TRUE + organ_type = /obj/item/organ/external/spines + +/datum/sprite_accessory/spines/is_hidden(mob/living/carbon/human/wearer) + var/obj/item/organ/external/tail/tail = wearer.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) + if(!wearer.w_uniform && !wearer.wear_suit) + return FALSE + // Can hide if wearing uniform + if(key in wearer.try_hide_mutant_parts) + return TRUE + if(wearer.wear_suit) + // Exception for MODs + if(istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) + return FALSE + else if(!tail \ + || (wearer.wear_suit \ + && (wearer.wear_suit.flags_inv & HIDETAIL \ + || wearer.wear_suit.flags_inv & HIDESPINE) \ + ) + ) + return TRUE + +/datum/sprite_accessory/spines/get_special_render_state(mob/living/carbon/human/H) + return icon_state + +/datum/sprite_accessory/spines/is_hidden(mob/living/carbon/human/wearer) + var/list/used_in_turf = list("tail") + // Emote exception + if(wearer.owned_turf?.name in used_in_turf) + return TRUE + + if(!wearer.w_uniform && !wearer.wear_suit) + return FALSE + if(key in wearer.try_hide_mutant_parts) + return TRUE + + if(wearer.wear_suit) + // Exception for MODs + if(istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) + return FALSE + + // Hide accessory if flagged to do so + else if(wearer.wear_suit.flags_inv & HIDETAIL) + return TRUE + + return FALSE diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/synthliz.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/synthliz.dm similarity index 95% rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/synthliz.dm rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/synthliz.dm index 70d51c40bbb51b..d4762e0732d601 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/synthliz.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/synthliz.dm @@ -1,7 +1,7 @@ //Synth snouts (This is the most important part) /datum/sprite_accessory/snouts/synthliz recommended_species = list() - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/synthliz_snouts.dmi' + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/synthliz_snouts.dmi' color_src = USE_ONE_COLOR default_color = null name = "Synthetic Lizard - Snout" @@ -73,7 +73,7 @@ //Synth tails /datum/sprite_accessory/tails/synthliz recommended_species = list() - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/synthliz_tails.dmi' + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/synthliz_tails.dmi' color_src = USE_ONE_COLOR name = "Synthetic Lizard" icon_state = "synthliz" @@ -82,7 +82,7 @@ //Synth Antennae /datum/sprite_accessory/antenna/synthliz - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/synthliz_antennas.dmi' + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/synthliz_antennas.dmi' color_src = USE_ONE_COLOR name = "Synthetic Lizard - Antennae" icon_state = "synth_antennae" diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm new file mode 100644 index 00000000000000..72d4a7db30fa2b --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm @@ -0,0 +1,444 @@ +/datum/sprite_accessory/tails + key = "tail" + generic = "Tail" + organ_type = /obj/item/organ/external/tail + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/tails.dmi' + special_render_case = TRUE + special_colorize = TRUE + relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) + genetic = TRUE + /// Can we use this tail for the fluffy tail turf emote? + var/fluffy = FALSE + +/datum/sprite_accessory/tails/is_hidden(mob/living/carbon/human/wearer) + var/list/used_in_turf = list("tail") + if(wearer.owned_turf?.name in used_in_turf) + // Emote exception + return TRUE + + if(!wearer.w_uniform && !wearer.wear_suit) + return FALSE + if(key in wearer.try_hide_mutant_parts) + return TRUE + + if(wearer.wear_suit) + // Exception for MODs + if(istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) + return FALSE + // Hide accessory if flagged to do so + else if(wearer.wear_suit.flags_inv & HIDETAIL) + return TRUE + +/datum/sprite_accessory/tails/get_special_render_state(mob/living/carbon/human/wearer) + return icon_state + +/datum/sprite_accessory/tails/none + name = "None" + icon_state = "none" + recommended_species = list(SPECIES_SYNTH, SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_HUMANOID, SPECIES_GHOUL) + color_src = null + factual = FALSE + +/datum/sprite_accessory/tails/lizard + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/tails.dmi' + recommended_species = list(SPECIES_LIZARD, SPECIES_LIZARD_ASH, SPECIES_MAMMAL, SPECIES_UNATHI, SPECIES_LIZARD_SILVER) + organ_type = /obj/item/organ/external/tail/lizard + +/datum/sprite_accessory/tails/lizard/short/twotone + name = "Short (Two-Tone)" + icon_state = "short2tone" + color_src = USE_MATRIXED_COLORS + +/datum/sprite_accessory/tails/human + recommended_species = list(SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_MAMMAL, SPECIES_GHOUL) + organ_type = /obj/item/organ/external/tail/cat + +/datum/sprite_accessory/tails/human/cat + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/tails.dmi' + icon_state = "cat" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/tails/monkey/default + name = "Monkey" + icon_state = "monkey" + icon = 'icons/mob/human/species/monkey/monkey_tail.dmi' + recommended_species = list(SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_MAMMAL, SPECIES_MONKEY, SPECIES_GHOUL) + color_src = FALSE + organ_type = /obj/item/organ/external/tail/monkey + +/datum/sprite_accessory/tails/mammal + icon_state = "none" + recommended_species = list(SPECIES_MAMMAL,SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_HUMANOID, SPECIES_GHOUL) + organ_type = /obj/item/organ/external/tail/fluffy/no_wag + color_src = USE_MATRIXED_COLORS + +/datum/sprite_accessory/tails/mammal/wagging + organ_type = /obj/item/organ/external/tail/fluffy + flags_for_organ = SPRITE_ACCESSORY_WAG_ABLE + +/datum/sprite_accessory/tails/mammal/wagging/akula + recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_AKULA, SPECIES_AQUATIC, SPECIES_HUMANOID, SPECIES_GHOUL) + +/datum/sprite_accessory/tails/mammal/wagging/tajaran + recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_TAJARAN, SPECIES_HUMANOID, SPECIES_GHOUL) + +/datum/sprite_accessory/tails/mammal/teshari + recommended_species = list(SPECIES_TESHARI) + +/datum/sprite_accessory/tails/mammal/wagging/vulpkanin + recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_VULP, SPECIES_HUMANOID, SPECIES_GHOUL) + +/datum/sprite_accessory/tails/mammal/wagging/big + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/tails_big.dmi' + dimension_x = 64 + center = TRUE + +/datum/sprite_accessory/tails/mammal/wagging/avian + name = "Avian" + icon_state = "avian1" +/datum/sprite_accessory/tails/mammal/wagging/avian/alt + name = "Avian (Alt)" + icon_state = "avian2" + +/datum/sprite_accessory/tails/mammal/wagging/axolotl + name = "Axolotl" + icon_state = "axolotl" + +/datum/sprite_accessory/tails/mammal/wagging/bat_long + name = "Bat (Long)" + icon_state = "batl" + fluffy = TRUE + +/datum/sprite_accessory/tails/mammal/wagging/bat_short + name = "Bat (Short)" + icon_state = "bats" + +/datum/sprite_accessory/tails/mammal/wagging/cable + name = "Cable" + icon_state = "cable" + +/datum/sprite_accessory/tails/mammal/wagging/bee + name = "Bee" + icon_state = "bee" + +/datum/sprite_accessory/tails/mammal/wagging/queenbee + name = "Queen Bee" + icon_state = "queenbee" + +/datum/sprite_accessory/tails/mammal/wagging/tajaran/cat_big + name = "Cat (Big)" + icon_state = "catbig" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/tails/mammal/wagging/cat_double + name = "Cat (Double)" + icon_state = "twocat" + +/datum/sprite_accessory/tails/mammal/wagging/cat_triple + name = "Cat (Triple)" + icon_state = "threecat" + +/datum/sprite_accessory/tails/mammal/wagging/corvid + name = "Corvid" + icon_state = "crow" + +/datum/sprite_accessory/tails/mammal/wagging/cow + name = "Cow" + icon_state = "cow" + +/datum/sprite_accessory/tails/mammal/wagging/data_shark + name = "Data shark" + icon_state = "datashark" + +/datum/sprite_accessory/tails/mammal/deer + name = "Deer" + icon_state = "deer" + +/datum/sprite_accessory/tails/mammal/wagging/deer_two + name = "Deer II" + icon_state = "deer_two" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/tails/mammal/wagging/eevee + name = "Eevee" + icon_state = "eevee" + +/datum/sprite_accessory/tails/mammal/wagging/fennec + name = "Fennec" + icon_state = "fennec" + fluffy = TRUE + +/datum/sprite_accessory/tails/mammal/wagging/vulpkanin/fox + name = "Fox" + icon_state = "fox" + fluffy = TRUE + +/datum/sprite_accessory/tails/mammal/wagging/vulpkanin/fox/alt_1 + name = "Fox (Alt 1)" + icon_state = "fox2" + +/datum/sprite_accessory/tails/mammal/wagging/vulpkanin/fox/alt_2 + name = "Fox (Alt 2)" + icon_state = "fox3" + +/datum/sprite_accessory/tails/mammal/wagging/guilmon + name = "Guilmon" + icon_state = "guilmon" + +/datum/sprite_accessory/tails/mammal/wagging/hawk + name = "Hawk" + icon_state = "hawk" + +/datum/sprite_accessory/tails/mammal/wagging/horse + name = "Horse" + icon_state = "horse" + color_src = USE_ONE_COLOR + default_color = DEFAULT_PRIMARY + +/datum/sprite_accessory/tails/mammal/wagging/husky + name = "Husky" + icon_state = "husky" + fluffy = TRUE + +/datum/sprite_accessory/tails/mammal/wagging/insect + name = "Insect" + icon_state = "insect" + +/datum/sprite_accessory/tails/mammal/wagging/queeninsect + name = "Queen Insect" + icon_state = "queeninsect" + +/datum/sprite_accessory/tails/mammal/wagging/kangaroo + name = "Kangaroo" + icon_state = "kangaroo" + +/* +* KITSUNE +*/ + +/datum/sprite_accessory/tails/mammal/wagging/kitsune + name = "Kitsune" + icon_state = "kitsune" + fluffy = TRUE + +/datum/sprite_accessory/tails/mammal/wagging/lunasune + name = "Kitsune (Lunasune)" + icon_state = "lunasune" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/tails/mammal/wagging/kitsune/sabresune + name = "Kitsune (Sabresune)" + icon_state = "sabresune" + +/datum/sprite_accessory/tails/mammal/wagging/kitsune/septuple + name = "Kitsune (Septuple)" + icon_state = "sevenkitsune" + +/datum/sprite_accessory/tails/mammal/wagging/kitsune/tamamo + name = "Kitsune (Tamamo)" + icon_state = "9sune" + +/datum/sprite_accessory/tails/mammal/wagging/lab + name = "Labrador" + icon_state = "lab" + +/datum/sprite_accessory/tails/mammal/wagging/leopard + name = "Leopard" + icon_state = "leopard" + fluffy = TRUE + +/datum/sprite_accessory/tails/mammal/wagging/murid + name = "Murid" + icon_state = "murid" + +/datum/sprite_accessory/tails/mammal/wagging/murid_two + name = "Murid II" + icon_state = "murid_two" + +/datum/sprite_accessory/tails/mammal/wagging/orca + name = "Orca" + icon_state = "orca" + +/datum/sprite_accessory/tails/mammal/wagging/otie + name = "Otusian" + icon_state = "otie" + +/datum/sprite_accessory/tails/mammal/wagging/plug + name = "Plug" + icon_state = "plugtail" + +/datum/sprite_accessory/tails/mammal/wagging/plug/scorpion + name = "Scorpion Plug" + icon_state = "scorptail" + +/datum/sprite_accessory/tails/mammal/wagging/rabbit + name = "Rabbit" + icon_state = "rabbit" + +/datum/sprite_accessory/tails/mammal/wagging/rabbit/alt + name = "Rabbit (Alt)" + icon_state = "rabbit_alt" + +/datum/sprite_accessory/tails/mammal/raptor + name = "Raptor" + icon_state = "raptor" + +/datum/sprite_accessory/tails/mammal/wagging/red_panda + name = "Red Panda" + icon_state = "wah" + fluffy = TRUE + +/datum/sprite_accessory/tails/mammal/wagging/pede + name = "Scolipede" + icon_state = "pede" + +/datum/sprite_accessory/tails/mammal/wagging/segmented + name = "Segmented" + icon_state = "segmentedtail" + +/datum/sprite_accessory/tails/mammal/wagging/sergal + name = "Sergal" + icon_state = "sergal" + fluffy = TRUE + +/datum/sprite_accessory/tails/mammal/wagging/servelyn + name = "Servelyn" + icon_state = "tiger2" + +/datum/sprite_accessory/tails/mammal/wagging/big/shade + name = "Shade" + icon_state = "shadekin_large" + color_src = USE_MATRIXED_COLORS + +/datum/sprite_accessory/tails/mammal/wagging/big/shade/long + name = "Shade (Long)" + icon_state = "shadekinlong_large" + +/datum/sprite_accessory/tails/mammal/wagging/big/shade/striped + name = "Shade (Striped)" + icon_state = "shadekinlongstriped_large" + +/datum/sprite_accessory/tails/mammal/wagging/big/ringtail + name = "Ring Tail (Long)" + icon_state = "bigring_large" + color_src = USE_MATRIXED_COLORS + +/datum/sprite_accessory/tails/mammal/wagging/akula/akula + name = "Akula" + icon_state = "akula" + +/datum/sprite_accessory/tails/mammal/wagging/akula/shark + name = "Shark" + icon_state = "shark" + +/datum/sprite_accessory/tails/mammal/wagging/akula/shark_no_fin + name = "Shark (No Fin)" + icon_state = "sharknofin" + +/datum/sprite_accessory/tails/mammal/wagging/akula/fish + name = "Fish" + icon_state = "fish" + +/datum/sprite_accessory/tails/mammal/wagging/shepherd + name = "Shepherd" + icon_state = "shepherd" + +/datum/sprite_accessory/tails/mammal/wagging/skunk + name = "Skunk" + icon_state = "skunk" + fluffy = TRUE + +/datum/sprite_accessory/tails/mammal/wagging/snake + name = "Snake" + icon_state = "snaketail" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/tails/mammal/wagging/snake_dual + name = "Snake (Dual)" + icon_state = "snakedual" + +/datum/sprite_accessory/tails/mammal/wagging/snake_stripe + name = "Snake (Stripe)" + icon_state = "snakestripe" + +/datum/sprite_accessory/tails/mammal/wagging/snake_stripe_alt + name = "Snake (Stripe Alt)" + icon_state = "snakestripealt" + +/datum/sprite_accessory/tails/mammal/wagging/snake_under + name = "Snake (Undertail color)" + icon_state = "snakeunder" + +/datum/sprite_accessory/tails/mammal/wagging/squirrel + name = "Squirrel" + icon_state = "squirrel" + color_src = USE_ONE_COLOR + fluffy = TRUE + +/datum/sprite_accessory/tails/mammal/wagging/stripe + name = "Stripe" + icon_state = "stripe" + fluffy = TRUE + +/datum/sprite_accessory/tails/mammal/wagging/straight + name = "Straight Tail" + icon_state = "straighttail" + +/datum/sprite_accessory/tails/mammal/wagging/spade + name = "Succubus Spade Tail" + icon_state = "spade" + +/datum/sprite_accessory/tails/mammal/wagging/tailmaw + name = "Tailmaw" + icon_state = "tailmaw" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/tails/mammal/wagging/tailmaw/wag + name = "Tailmaw (Wag)" + icon_state = "tailmawwag" + +/datum/sprite_accessory/tails/mammal/wagging/tentacle + name = "Tentacle" + icon_state = "tentacle" + +/* +* TESHARI +*/ + +/datum/sprite_accessory/tails/mammal/teshari/default + name = "Teshari (Default)" + icon_state = "teshari_default" + +/datum/sprite_accessory/tails/mammal/teshari/fluffy + name = "Teshari (Fluffy)" + icon_state = "teshari_fluffy" +/datum/sprite_accessory/tails/mammal/teshari/thin + name = "Teshari (Thin)" + icon_state = "teshari_thin" + +/datum/sprite_accessory/tails/mammal/wagging/tiger + name = "Tiger" + icon_state = "tiger" + +/datum/sprite_accessory/tails/mammal/wagging/wolf + name = "Wolf" + icon_state = "wolf" + color_src = USE_ONE_COLOR + fluffy = TRUE + +/datum/sprite_accessory/tails/mammal/wagging/zorgoia + name = "Zorgoia tail" + icon_state = "zorgoia" + +/datum/sprite_accessory/tails/mammal/reptileslim + name = "Slim reptile" + icon_state = "reptileslim" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/tails/mammal/wagging/australian_shepherd + name = "Australian Shepherd" + icon_state = "australianshepherd" + +/datum/sprite_accessory/tails/mammal/wagging/peacock + name = "Peacock" + icon_state = "peacock" diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm similarity index 98% rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm index c52af4de04998b..dc13d108337e13 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm @@ -16,7 +16,7 @@ return taur.taur_mode /datum/sprite_accessory/taur - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/taur.dmi' + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/taur.dmi' key = "taur" generic = "Taur Type" color_src = USE_MATRIXED_COLORS diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/bras.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/bras.dm new file mode 100644 index 00000000000000..717859c1d6d82c --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/bras.dm @@ -0,0 +1,172 @@ +//Modular separation of Bras as a separate underwear option that displays below undershirts +/datum/sprite_accessory/bra + icon = 'modular_nova/master_files/icons/mob/clothing/underwear.dmi' + use_static = FALSE + gender = FEMALE + em_block = TRUE + +/datum/sprite_accessory/bra/nude + name = "Nude" + icon_state = null + gender = NEUTER + +/datum/sprite_accessory/bra/bra + name = "Bra" + icon_state = "bra" + +/datum/sprite_accessory/bra/bra_alt + name = "Bra - Alt" + icon_state = "bra_alt" + +/datum/sprite_accessory/bra/bra_thin + name = "Bra - Thin" + icon_state = "bra_thin" + +/datum/sprite_accessory/bra/sports_bra + name = "Bra - Sports" + icon_state = "sports_bra" + +/datum/sprite_accessory/bra/sports_bra_alt + name = "Bra - Sports (Alt)" + icon_state = "sports_bra_alt" + +/datum/sprite_accessory/bra/bra_strapless + name = "Bra - Strapless" + icon_state = "bra_strapless" + +/datum/sprite_accessory/bra/bra_strapless_alt + name = "Bra - Strapless (Alt)" + icon_state = "bra_strapless_alt" + +/datum/sprite_accessory/bra/swimsuit + name = "Swimsuit Top" + icon_state = "bikini_bra" + +/datum/sprite_accessory/bra/strapless_swimsuit + name = "Swimsuit Top - Strapless" + icon_state = "strapless_biki_bra" + +/datum/sprite_accessory/bra/halterneck_bra + name = "Bra - Halterneck" + icon_state = "halterneck_bra" + +/datum/sprite_accessory/bra/halterneck_alt + name = "Bra - Halterneck (Alt)" + icon_state = "halterneck_bra_alt" + +/datum/sprite_accessory/bra/bra_neko + name = "Bra - Neko" + icon_state = "bra_neko" + +/datum/sprite_accessory/bra/binder + name = "Binder" + icon_state = "binder" + gender = MALE + +/datum/sprite_accessory/bra/binder/strapless + name = "Binder - Strapless" + icon_state = "binder_strapless" + +/datum/sprite_accessory/bra/sarashi + name = "Sarashi" + icon_state = "bandages" + gender = NEUTER + +/datum/sprite_accessory/bra/striped_bra + name = "Bra - Striped" + icon_state = "striped_bra" + +//Presets +/datum/sprite_accessory/bra/lizared + name = "LIZARED Top" + icon_state = "lizared_top" + use_static = TRUE + +/datum/sprite_accessory/bra/bra_kinky + name = "Bra - Lingerie" + icon_state = "bra_kinky" + use_static = TRUE + +/datum/sprite_accessory/bra/bra_commie + name = "Bra - Commie" + icon_state = "bra_commie" + use_static = TRUE + +/datum/sprite_accessory/bra/bra_freedom + name = "Bra - Freedom" + icon_state = "bra_assblastusa" + use_static = TRUE + +/datum/sprite_accessory/bra/bra_uk + name = "Bra - UK" + icon_state = "bra_uk" + use_static = TRUE + +/datum/sprite_accessory/bra/bra_beekini + name = "Bra - Bee-kini" + icon_state = "bra_bee-kini" + use_static = TRUE + +/datum/sprite_accessory/bra/cow + name = "Bra - Cow" + icon_state = "bra_cow" + use_static = TRUE + +/datum/sprite_accessory/bra/hi_vis_bra + name = "Safekini" + icon_state = "hi_vis_bra" + use_static = TRUE + +//Fishnets +/datum/sprite_accessory/bra/fishnet_sleeves + name = "Fishnet - Sleeved" + icon_state = "fishnet_sleeves" + use_static = TRUE + +/datum/sprite_accessory/bra/fishnet_base + name = "Fishnet - Sleeveless" + icon_state = "fishnet_body" + use_static = TRUE + +/datum/sprite_accessory/bra/fishnet_sleeves/alt + name = "Fishnet - Sleeved (Greyscale)" + icon_state = "fishnet_sleeves_alt" + use_static = FALSE + +/datum/sprite_accessory/bra/fishnet_base/alt + name = "Fishnet - Sleeveless (Greyscale)" + icon_state = "fishnet_body_alt" + use_static = FALSE + +//ERP Accessories +/datum/sprite_accessory/bra/bra_latex + name = "Bra - Latex" + icon_state = "bra_latex" + use_static = TRUE + erp_accessory = TRUE + +/datum/sprite_accessory/bra/chastbra + name = "Bra - Chastity" + icon_state = "chastbra" + use_static = TRUE + erp_accessory = TRUE + +/datum/sprite_accessory/bra/pasties + name = "Pasties" + icon_state = "pasties" + erp_accessory = TRUE + +/datum/sprite_accessory/bra/pasties_alt + name = "Pasties (Alt)" + icon_state = "pasties_alt" + erp_accessory = TRUE + +/datum/sprite_accessory/bra/shibari + name = "Shibari" + icon_state = "shibari" + erp_accessory = TRUE + +/datum/sprite_accessory/bra/shibari_sleeves + name = "Shibari Sleeves" + icon_state = "shibari_sleeves" + erp_accessory = TRUE diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/socks.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/socks.dm new file mode 100644 index 00000000000000..76bbb1e8827d98 --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/socks.dm @@ -0,0 +1,166 @@ +/datum/sprite_accessory/socks + //All underwear goes in the same file for the sake of digi variants + icon = 'modular_nova/master_files/icons/mob/clothing/underwear.dmi' + use_static = TRUE + +/datum/sprite_accessory/socks/socks_norm + name = "Normal (Greyscale)" + icon_state = "white_norm" + use_static = FALSE + +/datum/sprite_accessory/socks/stirrups_norm + name = "Normal Stirrups (Greyscale)" + icon_state = "socks_norm-stir" + use_static = FALSE + +/datum/sprite_accessory/socks/socks_short + name = "Short (Greyscale)" + icon_state = "white_short" + use_static = FALSE + +/datum/sprite_accessory/socks/socks_knee + name = "Knee-high (Greyscale)" + icon_state = "white_knee" + use_static = FALSE + +/datum/sprite_accessory/socks/stirrups_knee + name = "Knee-high Stirrups" + icon_state = "socks_knee-stir" + use_static = FALSE + +/datum/sprite_accessory/socks/striped_knee + name = "Knee-high - Striped" + icon_state = "striped_knee" + use_static = FALSE + +/datum/sprite_accessory/socks/thin_knee + name = "Knee-high - Thin" + icon_state = "thin_knee" + use_static = FALSE + +/datum/sprite_accessory/socks/socks_thigh + name = "Thigh-high (Greyscale)" + icon_state = "white_thigh" + use_static = FALSE + +/datum/sprite_accessory/socks/stirrups_thigh + name = "Thigh-high Stirrups (Greyscale)" + icon_state = "socks_thigh-stir" + use_static = FALSE + +/datum/sprite_accessory/socks/striped_thigh + name = "Thigh-high (Striped)" + icon_state = "striped_thigh" + use_static = FALSE + +/datum/sprite_accessory/socks/striped_thigh/stirrups + name = "Thigh-high (Striped Stirrups)" + icon_state = "striped_thigh-stir" + use_static = FALSE + +/datum/sprite_accessory/socks/leggings/stirrups/gym + name = "Thigh-high Stirrups (black with stripe)" + icon_state = "leggings-stir-black" + +/datum/sprite_accessory/socks/bee_thigh + name = "Thigh-high - Bee (Old)" + icon_state = "bee_thigh_old" + +/datum/sprite_accessory/socks/bee_knee + name = "Knee-high - Bee (Old)" + icon_state = "bee_knee_old" + +/datum/sprite_accessory/socks/christmas_norm + name = "Normal - Christmas" + icon_state = "christmas_norm" + +/datum/sprite_accessory/socks/candycaner_norm + name = "Normal - Red Candy Cane" + icon_state = "candycaner_norm" + +/datum/sprite_accessory/socks/candycaneg_norm + name = "Normal - Green Candy Cane" + icon_state = "candycaneg_norm" + +/datum/sprite_accessory/socks/christmas_knee + name = "Knee-High - Christmas" + icon_state = "christmas_knee" + +/datum/sprite_accessory/socks/candycaner_knee + name = "Knee-High - Red Candy Cane" + icon_state = "candycaner_knee" + +/datum/sprite_accessory/socks/candycaneg_knee + name = "Knee-High - Green Candy Cane" + icon_state = "candycaneg_knee" + +/datum/sprite_accessory/socks/christmas_thigh + name = "Thigh-high - Christmas" + icon_state = "christmas_thigh" + +/datum/sprite_accessory/socks/candycaner_thigh + name = "Thigh-high - Red Candy Cane" + icon_state = "candycaner_thigh" + +/datum/sprite_accessory/socks/candycaneg_thigh + name = "Thigh-high - Green Candy Cane" + icon_state = "candycaneg_thigh" + +/datum/sprite_accessory/socks/rainbow_thigh + name = "Thigh-high - Rainbow" + icon_state = "rainbow_thigh" + +/datum/sprite_accessory/socks/rainbow_knee + name = "Knee-high - Rainbow" + icon_state = "rainbow_knee" + +/datum/sprite_accessory/socks/rainbow_knee/stirrups + name = "Knee-high - Rainbow Stirrups" + icon_state = "rainbow_knee-stir" + +/datum/sprite_accessory/socks/rainbow_thigh/stirrups + name = "Thigh-high - Rainbow Stirrups" + icon_state = "rainbow_thigh-stir" + +/datum/sprite_accessory/socks/fishnet_thigh_sr //TG has one, but this one matches with several tops that I'll get whined to if I change soooo + name = "Thigh-high - Fishnet" + icon_state = "fishnet" + +/datum/sprite_accessory/socks/fishnet_thigh/alt + name = "Thigh-high - Fishnet (Greyscale)" + icon_state = "fishnet_alt" + use_static = FALSE + +/datum/sprite_accessory/socks/pantyhose/stirrups + name = "Pantyhose Stirrups" + icon_state = "pantyhose-stir" + use_static = FALSE + +/datum/sprite_accessory/socks/pantyhose_ripped + name = "Pantyhose - Ripped" + icon_state = "pantyhose_ripped" + use_static = FALSE + +/datum/sprite_accessory/socks/pantyhose_ripped/stirrups + name = "Pantyhose - Ripped Stirrups" + icon_state = "pantyhose_ripped-stir" + use_static = FALSE + +/datum/sprite_accessory/socks/stockings_ripped + name = "Stockings - Ripped" + icon_state = "stockings_ripped" + +/datum/sprite_accessory/socks/leggings + name = "Leggings" + icon_state = "leggings" + use_static = FALSE + +/datum/sprite_accessory/socks/leggings/stirrups + name = "Leggings - Stirrups" + icon_state = "leggings-stir" + use_static = FALSE + +/datum/sprite_accessory/socks/leggings/latex + name = "Socks - Latex" + icon_state = "socks_latex" + erp_accessory = TRUE diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/undershirts.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/undershirts.dm new file mode 100644 index 00000000000000..c69c9d7f2f157f --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/undershirts.dm @@ -0,0 +1,135 @@ +//Modular Undershirts +/datum/sprite_accessory/undershirt + icon = 'modular_nova/master_files/icons/mob/clothing/underwear.dmi' + use_static = TRUE + ///Whether this underwear includes a bottom (For Leotards and the likes) + var/hides_groin = FALSE + +/* + Base recolorable shirts +*/ +/datum/sprite_accessory/undershirt/shirt + name = "Shirt" + icon_state = "shirt_white" //Reuses TG sprite until they set up GAGS for underwear + use_static = FALSE + +/datum/sprite_accessory/undershirt/shortsleeve + name = "Short-Sleeved Shirt" + icon_state = "whiteshortsleeve" //Reuses TG sprite until they set up GAGS for underwear + use_static = FALSE + +/datum/sprite_accessory/undershirt/tanktop + name = "Tank Top" + icon_state = "tank_white" //Reuses TG sprite until they set up GAGS for underwear + use_static = FALSE + +/datum/sprite_accessory/undershirt/longsleeve + name = "Long-Sleeved Shirt" + icon_state = "shirt_white_long" + use_static = FALSE + +/datum/sprite_accessory/undershirt/polo + name = "Polo Shirt" + icon_state = "polo" + use_static = FALSE + +/datum/sprite_accessory/undershirt/tanktop_midriff + name = "Tank Top - Midriff" + icon_state = "tank_midriff" + gender = FEMALE + use_static = FALSE + +/datum/sprite_accessory/undershirt/tanktop_midriff_alt + name = "Tank Top - Midriff Halterneck" + icon_state = "tank_midriff_alt" + gender = FEMALE + use_static = FALSE + +/datum/sprite_accessory/undershirt/offshoulder + name = "Shirt - Off-Shoulder" + icon_state = "one_arm" + gender = FEMALE + use_static = FALSE + +/datum/sprite_accessory/undershirt/buttondown + name = "Shirt - Buttondown" + icon_state = "buttondown" + gender = NEUTER + use_static = FALSE + +/datum/sprite_accessory/undershirt/buttondown/short_sleeve + name = "Shirt - Short Sleeved Buttondown" + icon_state = "buttondown_short" + +/datum/sprite_accessory/undershirt/leotard + name = "Shirt - Leotard" + icon_state = "leotard" + gender = FEMALE + use_static = FALSE + hides_groin = TRUE + +/datum/sprite_accessory/undershirt/turtleneck + name = "Sweater - Turtleneck" + icon_state = "turtleneck" + use_static = FALSE + gender = NEUTER + +/datum/sprite_accessory/undershirt/turtleneck/smooth + name = "Sweater - Smooth Turtleneck" + icon_state = "turtleneck_smooth" + +/datum/sprite_accessory/undershirt/turtleneck/sleeveless + name = "Sweater - Sleeveless Turtleneck" + icon_state = "turtleneck_sleeveless" + +/datum/sprite_accessory/undershirt/leotard/turtleneck + name = "Shirt - Turtleneck Leotard" + icon_state = "leotard_turtleneck" + +/datum/sprite_accessory/undershirt/leotard/turtleneck/sleeveless + name = "Shirt - Turtleneck Leotard Sleeveless" + icon_state = "leotard_turtleneck_sleeveless" + +//Presets +/datum/sprite_accessory/undershirt/bulletclub //4 life + name = "Shirt - Black Skull" + icon_state = "shirt_bc" + gender = NEUTER + +/datum/sprite_accessory/undershirt/bee_shirt + name = "Shirt - Bee" + icon_state = "bee_shirt" + +/datum/sprite_accessory/undershirt/striped + name = "Long-Sleeved Shirt - Black Stripes" + icon_state = "longstripe" + gender = NEUTER + +/datum/sprite_accessory/undershirt/striped/blue + name = "Long-Sleeved Shirt - Blue Stripes" + icon_state = "longstripe_blue" + +/datum/sprite_accessory/undershirt/tankstripe + name = "Tank Top - Striped" + icon_state = "tank_stripes" + +/datum/sprite_accessory/undershirt/tank_top_rainbow + name = "Tank Top - Rainbow" + icon_state = "tank_rainbow" + +/datum/sprite_accessory/undershirt/tank_top_sun + name = "Tank Top - Sun" + icon_state = "tank_sun" + +//Not really qualifying as shirts but having nowhere better to go, these get shoved to the bottom of the list +/datum/sprite_accessory/undershirt/corset + name = "Corset" + icon_state = "corset" + gender = FEMALE + hides_groin = TRUE //an undershirt-specific bit of code, so the corset has to be an undershirt... unless you want to refactor it + +/datum/sprite_accessory/undershirt/babydoll + name = "Babydoll" + icon_state = "babydoll" + gender = FEMALE + use_static = FALSE diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/underwear.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/underwear.dm new file mode 100644 index 00000000000000..b3c030f87a8207 --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/underwear.dm @@ -0,0 +1,205 @@ +/datum/sprite_accessory/underwear + icon = 'modular_nova/master_files/icons/mob/clothing/underwear.dmi' + ///Whether the underwear uses a special sprite for digitigrade style (i.e. briefs, not panties). Adds a "_d" suffix to the icon state + var/has_digitigrade = FALSE + ///Whether this underwear includes a top (Because gender = FEMALE doesn't actually apply here.). Hides breasts, nothing more. + var/hides_breasts = FALSE + +/* + Adding has_digitigrade to TG stuff +*/ +/datum/sprite_accessory/underwear/male_briefs + has_digitigrade = TRUE + +/datum/sprite_accessory/underwear/male_boxers + has_digitigrade = TRUE + +/datum/sprite_accessory/underwear/male_stripe + has_digitigrade = TRUE + +/datum/sprite_accessory/underwear/male_midway + has_digitigrade = TRUE + +/datum/sprite_accessory/underwear/male_longjohns + has_digitigrade = TRUE + +/datum/sprite_accessory/underwear/male_hearts + has_digitigrade = TRUE + +/datum/sprite_accessory/underwear/male_commie + has_digitigrade = TRUE + +/datum/sprite_accessory/underwear/male_usastripe + has_digitigrade = TRUE + +/datum/sprite_accessory/underwear/male_uk + has_digitigrade = TRUE + +/* + Modular Underwear past here +*/ + +//Briefs +/datum/sprite_accessory/underwear/male_bee + name = "Boxers - Bee" + icon_state = "bee_shorts" + has_digitigrade = TRUE + gender = MALE + use_static = TRUE + +/datum/sprite_accessory/underwear/boyshorts + name = "Boyshorts" + icon_state = "boyshorts" + has_digitigrade = TRUE + gender = FEMALE + +/datum/sprite_accessory/underwear/boyshorts_alt + name = "Boyshorts (Alt)" + icon_state = "boyshorts_alt" + gender = FEMALE + +//Panties +/datum/sprite_accessory/underwear/panties_basic + name = "Panties" + icon_state = "panties" + gender = FEMALE + +/datum/sprite_accessory/underwear/panties_slim + name = "Panties - Slim" + icon_state = "panties_slim" + gender = FEMALE + +/datum/sprite_accessory/underwear/panties_thin + name = "Panties - Thin" + icon_state = "panties_thin" + gender = FEMALE + +/datum/sprite_accessory/underwear/thong + name = "Thong" + icon_state = "thong" + gender = FEMALE + +/datum/sprite_accessory/underwear/thong_babydoll + name = "Thong (Alt)" + icon_state = "thong_babydoll" + gender = FEMALE + +/datum/sprite_accessory/underwear/panties_swimsuit + name = "Panties - Swimsuit" + icon_state = "panties_swimming" + gender = FEMALE + +/datum/sprite_accessory/underwear/panties_neko + name = "Panties - Neko" + icon_state = "panties_neko" + gender = FEMALE + +/datum/sprite_accessory/underwear/striped_panties + name = "Panties - Striped" + icon_state = "striped_panties" + gender = FEMALE + +//Presets +/datum/sprite_accessory/underwear/lizared + name = "LIZARED Underwear" + icon_state = "lizared" + use_static = TRUE + +/datum/sprite_accessory/underwear/female_kinky + name = "Panties - Lingerie" + icon_state = "panties_kinky" + gender = FEMALE + use_static = TRUE + +/datum/sprite_accessory/underwear/female_commie + name = "Panties - Commie" + icon_state = "panties_commie" + gender = FEMALE + use_static = TRUE + +/datum/sprite_accessory/underwear/female_usastripe + name = "Panties - Freedom" + icon_state = "panties_assblastusa" + gender = FEMALE + use_static = TRUE + +/datum/sprite_accessory/underwear/panties_uk + name = "Panties - UK" + icon_state = "panties_uk" + gender = FEMALE + use_static = TRUE + +/datum/sprite_accessory/underwear/female_beekini + name = "Panties - Bee-kini" + icon_state = "panties_bee-kini" + gender = FEMALE + use_static = TRUE + +/datum/sprite_accessory/underwear/cow + name = "Panties - Cow" + icon_state = "panties_cow" + gender = FEMALE + use_static = TRUE + +//Full-Body Underwear, i.e. swimsuits (Including re-enabling 3 from TG) +//These likely require hides_breasts = TRUE +/datum/sprite_accessory/underwear/swimsuit_onepiece //TG + name = "One-Piece Swimsuit" + icon_state = "swim_onepiece" + gender = FEMALE + hides_breasts = TRUE + +/datum/sprite_accessory/underwear/swimsuit_strapless_onepiece //TG + name = "Strapless One-Piece Swimsuit" + icon_state = "swim_strapless_onepiece" + gender = FEMALE + hides_breasts = TRUE + +/datum/sprite_accessory/underwear/swimsuit_stripe //TG + name = "Strapless Striped Swimsuit" + icon_state = "swim_stripe" + gender = FEMALE + hides_breasts = TRUE + +/datum/sprite_accessory/underwear/swimsuit_red + name = "One-Piece Swimsuit - Red" + icon_state = "swimming_red" + gender = FEMALE + use_static = TRUE + hides_breasts = TRUE + +/datum/sprite_accessory/underwear/swimsuit + name = "One-Piece Swimsuit - Black" + icon_state = "swimming_black" + gender = FEMALE + use_static = TRUE + hides_breasts = TRUE + +//Fishnets +/datum/sprite_accessory/underwear/fishnet_lower + name = "Panties - Fishnet" + icon_state = "fishnet_lower" + gender = FEMALE + use_static = TRUE + +/datum/sprite_accessory/underwear/fishnet_lower/alt + name = "Panties - Fishnet (Greyscale)" + icon_state = "fishnet_lower_alt" + +//ERP Accessories +/datum/sprite_accessory/underwear/latex + name = "Panties - Latex" + icon_state = "panties_latex" + use_static = TRUE + erp_accessory = TRUE + +/datum/sprite_accessory/underwear/chastbelt + name = "Chastity Belt" + icon_state = "chastbelt" + use_static = TRUE + erp_accessory = TRUE + +/datum/sprite_accessory/underwear/chastcage + name = "Chastity Cage" + icon_state = "chastcage" + erp_accessory = TRUE diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/vox.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/vox.dm new file mode 100644 index 00000000000000..00ef0c7482697e --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/vox.dm @@ -0,0 +1,144 @@ +//The snouts +/datum/sprite_accessory/snouts/vox + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/vox_snouts.dmi' + default_color = DEFAULT_SECONDARY + name = "Vox Snout" + icon_state = "vox" + recommended_species = list(SPECIES_VOX) + +//The hairstyles +/datum/sprite_accessory/hair/vox + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/vox_hair.dmi' + recommended_species = list(SPECIES_VOX) + +/datum/sprite_accessory/hair/vox/vox_afro + name = "Vox Afro" + icon_state = "hair_vox_afro" + +/datum/sprite_accessory/hair/vox/vox_crestedquills + name = "Vox Crested Quills" + icon_state = "hair_vox_crestedquills" + +/datum/sprite_accessory/hair/vox/vox_emperorquills + name = "Vox Emperor Quills" + icon_state = "hair_vox_emperorquills" + +/datum/sprite_accessory/hair/vox/vox_horns + name = "Vox Horns" + icon_state = "hair_vox_horns" + +/datum/sprite_accessory/hair/vox/vox_keelquills + name = "Vox Keel Quills" + icon_state = "hair_vox_keelquills" + +/datum/sprite_accessory/hair/vox/vox_keetquills + name = "Vox Keet Quills" + icon_state = "hair_vox_keetquills" + +/datum/sprite_accessory/hair/vox/vox_kingly + name = "Vox Kingly" + icon_state = "hair_vox_kingly" + +/datum/sprite_accessory/hair/vox/vox_mohawk + name = "Vox Mohawk" + icon_state = "hair_vox_mohawk" + +/datum/sprite_accessory/hair/vox/vox_nights + name = "Vox Nights" + icon_state = "hair_vox_nights" + +/datum/sprite_accessory/hair/vox/vox_razorclipped + name = "Vox Razor Clipped" + icon_state = "hair_vox_razorclipped" + +/datum/sprite_accessory/hair/vox/vox_razor + name = "Vox Razor" + icon_state = "hair_vox_razor" + +/datum/sprite_accessory/hair/vox/vox_shortquills + name = "Vox Short Quills" + icon_state = "hair_vox_shortquills" + +/datum/sprite_accessory/hair/vox/vox_tielquills + name = "Vox Tiel Quills" + icon_state = "hair_vox_tielquills" + +/datum/sprite_accessory/hair/vox/vox_yasu + name = "Vox Yasu" + icon_state = "hair_vox_yasu" + +/datum/sprite_accessory/hair/vox/surf + name = "Vox Surf" + icon_state = "vox_surf" + +/datum/sprite_accessory/hair/vox/cropped + name = "Vox Cropped" + icon_state = "vox_cropped" + +/datum/sprite_accessory/hair/vox/rows + name = "Vox Rows" + icon_state = "vox_rows" + +/datum/sprite_accessory/hair/vox/ponytail + name = "Vox Ponytail" + icon_state = "vox_pony" + +/datum/sprite_accessory/hair/vox/mange + name = "Vox Mange" + icon_state = "vox_mange" + +/datum/sprite_accessory/hair/vox/ruffhawk + name = "Vox Ruffhawk" + icon_state = "vox_ruffhawk" + +//The facial hairstyles +/datum/sprite_accessory/facial_hair/vox + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/vox_facial_hair.dmi' + recommended_species = list(SPECIES_VOX) + +/datum/sprite_accessory/facial_hair/vox/vox_beard + name = "Vox Beard" + icon_state = "facial_vox_beard" + +/datum/sprite_accessory/facial_hair/vox/vox_colonel + name = "Vox Beard (Colonel)" + icon_state = "facial_vox_colonel" + +/datum/sprite_accessory/facial_hair/vox/vox_fu + name = "Vox Beard (Fu)" + icon_state = "facial_vox_fu" + +/datum/sprite_accessory/facial_hair/vox/vox_neck + name = "Vox Neck Quills" + icon_state = "facial_vox_neck" + +/datum/sprite_accessory/facial_hair/vox/vox_mane + name = "Vox Mane" + icon_state = "facial_vox_mane" + +//The tail +/datum/sprite_accessory/tails/vox + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/vox_tails.dmi' + name = "Vox Tail" + icon_state = "vox" + recommended_species = list(SPECIES_VOX) + organ_type = /obj/item/organ/external/tail/lizard + +//The tail markings +/datum/sprite_accessory/spines/vox + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/vox_spines.dmi' + default_color = DEFAULT_TERTIARY + recommended_species = list(SPECIES_VOX) + relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) + +/datum/sprite_accessory/spines/vox/vox_bands + name = "Vox Bands" + icon_state = "vox_bands" + +/datum/sprite_accessory/spines/vox/vox_tip + name = "Vox Tip" + icon_state = "vox_tip" + +/datum/sprite_accessory/spines/vox/vox_stripe + name = "Vox Stripe" + icon_state = "vox_stripe" diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/wings.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/wings.dm new file mode 100644 index 00000000000000..94bcad4da987bd --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/wings.dm @@ -0,0 +1,407 @@ +/** +* Wings! +* +* When adding or making new wing sprites, try to use matrixed colors! +* You can find a color palette to work with in modular_nova\modules\customization\icons\mob\sprite_accessory\wings.dmi as 'colorpalette matrixcolors' +* Check some of the wings that make use of them for examples on how to make it look decent. +*/ +/datum/sprite_accessory/wings + icon = 'icons/mob/human/species/wings.dmi' + generic = "Wings" + key = "wings" + color_src = USE_ONE_COLOR + recommended_species = list(SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_LIZARD, SPECIES_MAMMAL) + organ_type = /obj/item/organ/external/wings + relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER, BODY_ADJ_LAYER) + genetic = TRUE + +/datum/sprite_accessory/wings/is_hidden(mob/living/carbon/human/wearer) + if(!wearer.w_uniform && !wearer.wear_suit) + return FALSE + // Can hide if wearing uniform + if(initial(key) in wearer.try_hide_mutant_parts) // initial because some of the wing types have different keys (wings_functional, wings_open, etc) + return TRUE + if(wearer.wear_suit) + // Exception for MODs + if(istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) + return FALSE + // Hide accessory if flagged to do so, taking species exceptions in account + else if((wearer.wear_suit.flags_inv & HIDEJUMPSUIT) \ + && (!wearer.wear_suit.species_exception \ + || !is_type_in_list(wearer.dna.species, wearer.wear_suit.species_exception)) \ + ) + return TRUE + + return FALSE + +/datum/bodypart_overlay/mutant/wings/can_draw_on_bodypart(mob/living/carbon/human/wearer, ignore_suit = FALSE) + if(!wearer.w_uniform && !wearer.wear_suit) + return ..() + + // Can hide if wearing uniform + if(feature_key in wearer.try_hide_mutant_parts) + return FALSE + + if(!ignore_suit && wearer.wear_suit) + // Exception for MODs + if(istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) + return TRUE + + // Hide accessory if flagged to do so, taking species exceptions in account + else if((wearer.wear_suit.flags_inv & HIDEJUMPSUIT) \ + && (!wearer.wear_suit.species_exception \ + || !is_type_in_list(src, wearer.wear_suit.species_exception)) \ + ) + return FALSE + + return TRUE + +/datum/sprite_accessory/wings/none + name = "None" + icon_state = "none" + factual = FALSE + +/* +* FLIGHT POTION WINGS +*/ + +/datum/sprite_accessory/wings/angel + color_src = USE_ONE_COLOR + default_color = "#FFFFFF" + locked = FALSE + +/datum/sprite_accessory/wings/fly + key = "wings_functional" + +/datum/sprite_accessory/wings/megamoth + color_src = USE_ONE_COLOR + default_color = "#FFFFFF" + key = "wings_functional" + +/datum/sprite_accessory/wings/mothra + key = "wings_functional" + +/datum/sprite_accessory/wings/robotic + locked = FALSE + +/datum/sprite_accessory/wings/skeleton + key = "wings_functional" + +/datum/sprite_accessory/wings/dragon + color_src = USE_ONE_COLOR + locked = FALSE + + +/datum/sprite_accessory/wings_open + key = "wings_open" + color_src = USE_ONE_COLOR + + +/datum/sprite_accessory/wings_open/is_hidden(mob/living/carbon/human/wearer) + if(!wearer.w_uniform && !wearer.wear_suit) + return FALSE + // Can hide if wearing uniform + if(key in wearer.try_hide_mutant_parts) + return TRUE + if(wearer.wear_suit) + // Exception for MODs + if(istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) + return FALSE + // Hide accessory if flagged to do so, taking species exceptions in account + else if((wearer.wear_suit.flags_inv & HIDEJUMPSUIT) \ + && (!wearer.wear_suit.species_exception \ + || !is_type_in_list(wearer.dna.species, wearer.wear_suit.species_exception)) \ + ) + return TRUE + + return FALSE + +/* +* MAMMAL +*/ + +/datum/sprite_accessory/wings/mammal + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/wings.dmi' + default_color = DEFAULT_PRIMARY + recommended_species = list(SPECIES_MAMMAL, SPECIES_LIZARD, SPECIES_INSECT) + relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) + dimension_x = 46 + dimension_y = 34 + center = TRUE + +/datum/sprite_accessory/wings/mammal/bat //TODO: port my sprite from hyper for this one + name = "Bat" + icon_state = "bat" + +/datum/sprite_accessory/wings/mammal/bee + name = "Bee" + icon_state = "bee" + +/datum/sprite_accessory/wings/mammal/beetle + name = "Beetle" + icon_state = "beetle" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/wings/mammal/dragon + color_src = USE_MATRIXED_COLORS + +/datum/sprite_accessory/wings/mammal/dragon/alt1 + name = "Dragon (Alt 1)" + icon_state = "dragonalt1" + +/datum/sprite_accessory/wings/mammal/dragon/alt2 + name = "Dragon (Alt 2)" + icon_state = "dragonalt2" + +/datum/sprite_accessory/wings/mammal/dragon/synth + name = "Dragon (Synthetic)" + icon_state = "dragonsynth" + genetic = FALSE + +/datum/sprite_accessory/wings/mammal/dragon/mechanical + name = "Dragon (Mechanical)" + icon_state = "robowing" + +/datum/sprite_accessory/wings/mammal/fairy + name = "Fairy" + icon_state = "fairy" + +/datum/sprite_accessory/wings/mammal/feathery + name = "Feathery" + icon_state = "feathery" + color_src = USE_MATRIXED_COLORS + +/datum/sprite_accessory/wings/mammal/feathery/alt1 + name = "Feathery (Alt 1)" + icon_state = "featheryalt1" + +/datum/sprite_accessory/wings/mammal/feathery/alt2 + name = "Feathery (Alt 2)" + icon_state = "featheryalt2" + +/datum/sprite_accessory/wings/mammal/harpy + name = "Harpy" + icon_state = "harpy" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/wings/mammal/top/harpy + name = "Harpy (Top)" + icon_state = "harpy_top" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/wings/mammal/harpy/alt + name = "Harpy (Alt)" + icon_state = "harpyalt" + +/datum/sprite_accessory/wings/mammal/harpy/alt/fluffless + name = "Harpy (Alt - Fluffless)" + icon_state = "harpyalt_fluffless" + +/datum/sprite_accessory/wings/mammal/harpy/bat + name = "Harpy (Bat)" + icon_state = "harpybat" + +/datum/sprite_accessory/wings/mammal/top/harpy/alt + name = "Harpy (Top - Alt)" + icon_state = "harpyalt_top" + +/datum/sprite_accessory/wings/mammal/top/harpy/alt/fluffless + name = "Harpy (Top - Alt - Fluffless)" + icon_state = "harpyalt_fluffless_top" + +/datum/sprite_accessory/wings/mammal/top/harpy/bat + name = "Harpy (Top - Bat)" + icon_state = "harpybat_top" + +/datum/sprite_accessory/wings/mammal/pterodactyl + name = "Pterodactyl" + icon_state = "pterodactyl" + color_src = USE_MATRIXED_COLORS + +/datum/sprite_accessory/wings/mammal/insect + name = "Insectoid" + icon_state = "insect" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/wings/mammal/mini + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/wings/mammal/mini/bat + name = "Mini-Bat" + icon_state = "minibat" + +/datum/sprite_accessory/wings/mammal/mini/feather + name = "Mini-Feathery" + icon_state = "minifeather" + +/datum/sprite_accessory/wings/mammal/spider + name = "Spider Legs" + icon_state = "spider_legs" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/wings/mammal/succubus + name = "Succubus" + icon_state = "succubus" + color_src = USE_MATRIXED_COLORS + +/datum/sprite_accessory/wings/mammal/tiny + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/wings/mammal/tiny/bat + name = "Tiny-Bat" + icon_state = "tinybat" + +/datum/sprite_accessory/wings/mammal/tiny/feather + name = "Tiny-Feathery" + icon_state = "tinyfeather" + +/* +* LOW WINGS +*/ + +/datum/sprite_accessory/wings/low_wings + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/wings.dmi' + name = "Low wings" + icon_state = "low" + dimension_x = 46 + dimension_y = 34 + center = TRUE + +/datum/sprite_accessory/wings/low_wings/top + name = "Low Wings (Top)" + icon_state = "low_top" + +/datum/sprite_accessory/wings/low_wings/tri + name = "Low Wings (Tri-Tone)" + icon_state = "low_tri" + color_src = USE_MATRIXED_COLORS + +/datum/sprite_accessory/wings/low_wings/tri/top + name = "Low Wings (Tri-Tone - Top)" + icon_state = "low_tri_top" + +/datum/sprite_accessory/wings/low_wings/jewel + name = "Low Wings Jeweled" + icon_state = "low_jewel" + color_src = USE_MATRIXED_COLORS + +/datum/sprite_accessory/wings/low_wings/jewel/top + name = "Low Wings Jeweled (Top)" + icon_state = "low_jewel_top" + +/* +* MOTH +*/ + +/datum/sprite_accessory/wings/moth + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/moth_wings.dmi' // Needs new icon to suit new naming convention + default_color = "#FFFFFF" + recommended_species = list(SPECIES_MOTH, SPECIES_MAMMAL, SPECIES_INSECT) // Mammals too, I guess. They wont get flight though, see the wing organs for that logic + organ_type = /obj/item/organ/external/wings/moth + relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) + +/datum/sprite_accessory/wings/moth/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/wings/moth/atlas + name = "Moth (Atlas)" + icon_state = "atlas" + +/datum/sprite_accessory/wings/moth/brown + name = "Moth (Brown)" + icon_state = "brown" + +/datum/sprite_accessory/wings/moth/burnt + name = "Burnt Off" + icon_state = "burnt_off" + locked = TRUE + +/datum/sprite_accessory/wings/moth/deathhead + name = "Moth (Deathshead)" + icon_state = "deathhead" + +/datum/sprite_accessory/wings/moth/featherful // Is actually 'feathery' on upstream + name = "Moth (Featherful)" + icon_state = "featherful" + +/datum/sprite_accessory/wings/moth/firewatch + name = "Moth (Firewatch)" + icon_state = "firewatch" + +/datum/sprite_accessory/wings/moth/gothic + name = "Moth (Gothic)" + icon_state = "gothic" + +/datum/sprite_accessory/wings/moth/jungle + name = "Moth (Jungle)" + icon_state = "jungle" + +/datum/sprite_accessory/wings/moth/lovers + name = "Moth (Lovers)" + icon_state = "lovers" + +/datum/sprite_accessory/wings/moth/luna + name = "Moth (Luna)" + icon_state = "luna" + +/datum/sprite_accessory/wings/moth/monarch + name = "Moth (Monarch)" + icon_state = "monarch" + +/datum/sprite_accessory/wings/moth/moonfly + name = "Moth (Moon Fly)" + icon_state = "moonfly" + +/datum/sprite_accessory/wings/moth/oakworm + name = "Moth (Oak Worm)" + icon_state = "oakworm" + +/datum/sprite_accessory/wings/moth/plain + name = "Moth (Plain)" + icon_state = "plain" + +/datum/sprite_accessory/wings/moth/plasmafire + name = "Moth (Plasmafire)" + icon_state = "plasmafire" + +/datum/sprite_accessory/wings/moth/poison + name = "Moth (Poison)" + icon_state = "poison" + +/datum/sprite_accessory/wings/moth/ragged + name = "Moth (Ragged)" + icon_state = "ragged" + +/datum/sprite_accessory/wings/moth/reddish + name = "Moth (Reddish)" + icon_state = "redish" + +/datum/sprite_accessory/wings/moth/rosy + name = "Moth (Rosy)" + icon_state = "rosy" + +/datum/sprite_accessory/wings/moth/royal + name = "Moth (Royal)" + icon_state = "royal" + +/datum/sprite_accessory/wings/moth/snow + name = "Moth (Snow)" + icon_state = "snow" + +/datum/sprite_accessory/wings/moth/whitefly + name = "Moth (White Fly)" + icon_state = "whitefly" + +/datum/sprite_accessory/wings/moth/witchwing + name = "Moth (Witch Wing)" + icon_state = "witchwing" + +/datum/sprite_accessory/wings/moth/moffra + name = "Moth (Moffra)" + icon_state = "moffra" + +/datum/sprite_accessory/wings/mammal/top/arfel_harpy + name = "Arfel Harpy" + icon_state = "arfelharpy_top" + color_src = USE_ONE_COLOR diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/xeno.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/xeno.dm new file mode 100644 index 00000000000000..36bf71e14966dc --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/xeno.dm @@ -0,0 +1,71 @@ +/datum/sprite_accessory/xenodorsal + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/xeno_parts.dmi' + generic = "Dorsal Spines" + key = "xenodorsal" + color_src = USE_ONE_COLOR + relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) + genetic = TRUE + organ_type = /obj/item/organ/external/xenodorsal + +/datum/sprite_accessory/xenodorsal/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/xenodorsal/standard + name = "Standard" + icon_state = "standard" + +/datum/sprite_accessory/xenodorsal/royal + name = "Royal" + icon_state = "royal" + +/datum/sprite_accessory/xenodorsal/down + name = "Dorsal Down" + icon_state = "down" + +/datum/sprite_accessory/xenodorsal/is_hidden(mob/living/carbon/human/wearer) + if(!wearer.w_uniform && !wearer.wear_suit) + return FALSE + // Can hide if wearing uniform + if(key in wearer.try_hide_mutant_parts) + return TRUE + if(wearer.wear_suit) + // Exception for MODs + if(istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) + return FALSE + +//TAILS +/datum/sprite_accessory/tails/mammal/wagging/xeno_tail + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/xeno_parts.dmi' + name = "Xenomorph Tail" + icon_state = "xeno" + recommended_species = list(SPECIES_XENO) + +//HEADS +/datum/sprite_accessory/xenohead + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/xeno_parts.dmi' + generic = "Caste Head" + key = "xenohead" + relevent_layers = list(BODY_ADJ_LAYER) + genetic = TRUE + organ_type = /obj/item/organ/external/xenohead + +/datum/sprite_accessory/xenohead/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/xenohead/standard + name = "Standard" + icon_state = "standard" + +/datum/sprite_accessory/xenohead/royal + name = "Royal" + icon_state = "royal" + +/datum/sprite_accessory/xenohead/net + name = "Nethead" + icon_state = "net" + +/datum/sprite_accessory/xenohead/warrior + name = "Warrior" + icon_state = "warrior" diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/damage_procs.dm b/modular_nova/modules/customization/modules/mob/living/carbon/damage_procs.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/damage_procs.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/damage_procs.dm diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/MOD_mask.dmi b/modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/MOD_mask.dmi similarity index 100% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/MOD_mask.dmi rename to modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/MOD_mask.dmi diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/radial.dmi b/modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/radial.dmi similarity index 100% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/radial.dmi rename to modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/radial.dmi diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_accessory_handler.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_accessory_handler.dm similarity index 94% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_accessory_handler.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_accessory_handler.dm index 83dda0c57d771c..fd01e77c4f05ff 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_accessory_handler.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_accessory_handler.dm @@ -1,5 +1,5 @@ // This DMI holds all of the overlayable textures for MODs -#define HARDLIGHT_DMI 'modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/MOD_mask.dmi' +#define HARDLIGHT_DMI 'modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/MOD_mask.dmi' /obj/item/mod/control/seal_part(obj/item/clothing/part, seal) . = ..() @@ -41,6 +41,8 @@ /datum/sprite_accessory/tails/get_custom_mod_icon(mob/living/carbon/human/wearer, mutable_appearance/appearance_to_use = null) if(wearer?.wear_suit && istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) var/obj/item/mod/control/modsuit_control = wearer.back + if(!istype(modsuit_control)) + return var/datum/mod_theme/mod_theme = modsuit_control.theme if(!modsuit_control.active || !mod_theme.hardlight) @@ -60,6 +62,8 @@ /datum/sprite_accessory/ears/get_custom_mod_icon(mob/living/carbon/human/wearer, mutable_appearance/appearance_to_use = null) if(wearer?.head && istype(wearer.head, /obj/item/clothing/head/mod)) var/obj/item/mod/control/modsuit_control = wearer.back + if(!istype(modsuit_control)) + return var/datum/mod_theme/mod_theme = modsuit_control.theme if(!modsuit_control.active || !mod_theme.hardlight) @@ -79,6 +83,8 @@ /datum/sprite_accessory/wings/get_custom_mod_icon(mob/living/carbon/human/wearer, mutable_appearance/appearance_to_use = null) if(wearer?.wear_suit && istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) var/obj/item/mod/control/modsuit_control = wearer.back + if(!istype(modsuit_control)) + return var/datum/mod_theme/mod_theme = modsuit_control.theme if(!modsuit_control.active || !mod_theme.hardlight) @@ -98,6 +104,8 @@ /datum/sprite_accessory/moth_antennae/get_custom_mod_icon(mob/living/carbon/human/wearer, mutable_appearance/appearance_to_use = null) if(wearer?.head && istype(wearer.head, /obj/item/clothing/head/mod)) var/obj/item/mod/control/modsuit_control = wearer.back + if(!istype(modsuit_control)) + return var/datum/mod_theme/mod_theme = modsuit_control.theme if(!modsuit_control.active || !mod_theme.hardlight) @@ -117,6 +125,8 @@ /datum/sprite_accessory/antenna/get_custom_mod_icon(mob/living/carbon/human/wearer, mutable_appearance/appearance_to_use = null) if(wearer?.head && istype(wearer.head, /obj/item/clothing/head/mod)) var/obj/item/mod/control/modsuit_control = wearer.back + if(!istype(modsuit_control)) + return var/datum/mod_theme/mod_theme = modsuit_control.theme if(!modsuit_control.active || !mod_theme.hardlight) @@ -136,6 +146,8 @@ /datum/sprite_accessory/horns/get_custom_mod_icon(mob/living/carbon/human/wearer, mutable_appearance/appearance_to_use = null) if(wearer?.head && istype(wearer.head, /obj/item/clothing/head/mod)) var/obj/item/mod/control/modsuit_control = wearer.back + if(!istype(modsuit_control)) + return var/datum/mod_theme/mod_theme = modsuit_control.theme if(!modsuit_control.active || !mod_theme.hardlight) @@ -154,6 +166,8 @@ /datum/sprite_accessory/taur/get_custom_mod_icon(mob/living/carbon/human/wearer, mutable_appearance/appearance_to_use = null) if(wearer?.wear_suit && istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) var/obj/item/mod/control/modsuit_control = wearer.back + if(!istype(modsuit_control)) + return var/datum/mod_theme/mod_theme = modsuit_control.theme if(!modsuit_control.active || !mod_theme.hardlight) @@ -172,6 +186,8 @@ /datum/sprite_accessory/spines/get_custom_mod_icon(mob/living/carbon/human/wearer, mutable_appearance/appearance_to_use = null) if(wearer?.wear_suit && istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) var/obj/item/mod/control/modsuit_control = wearer.back + if(!istype(modsuit_control)) + return var/datum/mod_theme/mod_theme = modsuit_control.theme if(!modsuit_control.active || !mod_theme.hardlight) @@ -190,6 +206,8 @@ /datum/sprite_accessory/xenodorsal/get_custom_mod_icon(mob/living/carbon/human/wearer, mutable_appearance/appearance_to_use = null) if(wearer?.wear_suit && istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) var/obj/item/mod/control/modsuit_control = wearer.back + if(!istype(modsuit_control)) + return var/datum/mod_theme/mod_theme = modsuit_control.theme if(!modsuit_control.active || !mod_theme.hardlight) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_actions.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_actions.dm similarity index 84% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_actions.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_actions.dm index 33125dca3e7be9..33d3ab967356d5 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_actions.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_actions.dm @@ -1,7 +1,7 @@ /datum/action/item_action/mod/sprite_accessories name = "Hide/Show mutant parts" desc = "LMB: Deploy/Undeploy part. RMB: Deploy/Undeploy all parts." - button_icon = 'modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/radial.dmi' // What a great var name + button_icon = 'modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/radial.dmi' // What a great var name button_icon_state = "open" /datum/action/item_action/mod/sprite_accessories/Trigger(trigger_flags) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_themes.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_themes.dm similarity index 95% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_themes.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_themes.dm index c2954a320c85aa..ee5a684e7f8d8a 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_themes.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_themes.dm @@ -1,6 +1,6 @@ // All available options // Remember these are read from: -// 'modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/MOD_mask.dmi' +// 'modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/MOD_mask.dmi' #define STANDARD_BLUE "standard_blue" #define ALERT_AMBER "alert_amber" diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/custom_bodytype.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/custom_bodytype.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/custom_bodytype.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/custom_bodytype.dm diff --git a/modular_nova/modules/customization/modules/mob/living/carbon/human/human.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/human.dm new file mode 100644 index 00000000000000..3dafb4b483f5c5 --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/human.dm @@ -0,0 +1,244 @@ +// This DMI holds our radial icons for the 'hide mutant parts' verb +#define HIDING_RADIAL_DMI 'modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/radial.dmi' + +/mob/living/carbon/human/Topic(href, href_list) + . = ..() + + if(href_list["lookup_info"]) + switch(href_list["lookup_info"]) + if("genitals") + var/list/line = list() + for(var/genital in GLOB.possible_genitals) + if(!dna.species.mutant_bodyparts[genital]) + continue + var/datum/sprite_accessory/genital/G = GLOB.sprite_accessories[genital][dna.species.mutant_bodyparts[genital][MUTANT_INDEX_NAME]] + if(!G) + continue + if(G.is_hidden(src)) + continue + var/obj/item/organ/external/genital/ORG = get_organ_slot(G.associated_organ_slot) + if(!ORG) + continue + line += ORG.get_description_string(G) + if(length(line)) + to_chat(usr, span_notice("[jointext(line, "\n")]")) + if("open_examine_panel") + tgui.holder = src + tgui.ui_interact(usr) //datum has a tgui component, here we open the window + +/mob/living/carbon/human/species/vox + race = /datum/species/vox + +/mob/living/carbon/human/species/vox_primalis + race = /datum/species/vox_primalis + +/mob/living/carbon/human/species/synth + race = /datum/species/synthetic + +/mob/living/carbon/human/species/mammal + race = /datum/species/mammal + +/mob/living/carbon/human/species/vulpkanin + race = /datum/species/vulpkanin + +/mob/living/carbon/human/species/tajaran + race = /datum/species/tajaran + +/mob/living/carbon/human/species/unathi + race = /datum/species/unathi + +/mob/living/carbon/human/species/podweak + race = /datum/species/pod/podweak + +/mob/living/carbon/human/species/xeno + race = /datum/species/xeno + +/mob/living/carbon/human/species/dwarf + race = /datum/species/dwarf + +/mob/living/carbon/human/species/roundstartslime + race = /datum/species/jelly/roundstartslime + +/mob/living/carbon/human/species/teshari + race = /datum/species/teshari + +/mob/living/carbon/human/species/akula + race = /datum/species/akula + +/mob/living/carbon/human/species/skrell + race = /datum/species/skrell + +/mob/living/carbon/human/verb/toggle_undies() + set category = "IC" + set name = "Toggle underwear visibility" + set desc = "Allows you to toggle which underwear should show or be hidden. Underwear will obscure genitals." + + if(stat != CONSCIOUS) + to_chat(usr, span_warning("You can't toggle underwear visibility right now...")) + return + + var/underwear_button = underwear_visibility & UNDERWEAR_HIDE_UNDIES ? "Show underwear" : "Hide underwear" + var/undershirt_button = underwear_visibility & UNDERWEAR_HIDE_SHIRT ? "Show shirt" : "Hide shirt" + var/socks_button = underwear_visibility & UNDERWEAR_HIDE_SOCKS ? "Show socks" : "Hide socks" + var/bra_button = underwear_visibility & UNDERWEAR_HIDE_BRA ? "Show bra" : "Hide bra" + var/list/choice_list = list("[underwear_button]" = "underwear", "[bra_button]" = "bra", "[undershirt_button]" = "shirt", "[socks_button]" = "socks","show all" = "show", "Hide all" = "hide") + var/picked_visibility = input(src, "Choose visibility setting", "Show/Hide underwear") as null|anything in choice_list + if(picked_visibility) + var/picked_choice = choice_list[picked_visibility] + switch(picked_choice) + if("underwear") + underwear_visibility ^= UNDERWEAR_HIDE_UNDIES + if("bra") + underwear_visibility ^= UNDERWEAR_HIDE_BRA + if("shirt") + underwear_visibility ^= UNDERWEAR_HIDE_SHIRT + if("socks") + underwear_visibility ^= UNDERWEAR_HIDE_SOCKS + if("show") + underwear_visibility = NONE + if("hide") + underwear_visibility = UNDERWEAR_HIDE_UNDIES | UNDERWEAR_HIDE_SHIRT | UNDERWEAR_HIDE_SOCKS | UNDERWEAR_HIDE_BRA + update_body() + return + +/mob/living/carbon/human/revive(full_heal_flags = NONE, excess_healing = 0, force_grab_ghost = FALSE) + . = ..() + if(.) + if(dna && dna.species) + dna.species.spec_revival(src) + +/mob/living/carbon/human/verb/toggle_mutant_part_visibility() + set category = "IC" + set name = "Show/Hide Mutant Parts" + set desc = "Allows you to choose to try and hide your mutant bodyparts under your clothes." + + mutant_part_visibility() + +/mob/living/carbon/human/proc/mutant_part_visibility(quick_toggle, re_do) + // The parts our particular user can choose + var/list/available_selection + // The total list of parts choosable + var/static/list/total_selection = list( + ORGAN_SLOT_EXTERNAL_HORNS = "horns", + ORGAN_SLOT_EXTERNAL_EARS = "ears", + ORGAN_SLOT_EXTERNAL_WINGS = "wings", + ORGAN_SLOT_EXTERNAL_TAIL = "tail", + ORGAN_SLOT_EXTERNAL_SYNTH_ANTENNA = "ipc_antenna", + ORGAN_SLOT_EXTERNAL_ANTENNAE = "moth_antennae", + ORGAN_SLOT_EXTERNAL_XENODORSAL = "xenodorsal", + ORGAN_SLOT_EXTERNAL_SPINES = "spines", + ) + + // Stat check + if(stat != CONSCIOUS) + to_chat(usr, span_warning("You can't do this right now...")) + return + + // Only show the 'reveal all' button if we are already hiding something + if(try_hide_mutant_parts) + LAZYOR(available_selection, "reveal all") + // Lets build our parts list + for(var/organ_slot in total_selection) + if(get_organ_slot(organ_slot)) + LAZYOR(available_selection, total_selection[organ_slot]) + + // If this proc is called with the 'quick_toggle' flag, we skip the rest + if(quick_toggle) + if("reveal all" in available_selection) + LAZYNULL(try_hide_mutant_parts) + else + for(var/part in available_selection) + LAZYOR(try_hide_mutant_parts, part) + update_mutant_bodyparts() + return + + // Dont open the radial automatically just for one button + if(re_do && (length(available_selection) == 1)) + return + // If 'reveal all' is our only option just do it + if(!re_do && (("reveal all" in available_selection) && (length(available_selection) == 1))) + LAZYNULL(try_hide_mutant_parts) + update_mutant_bodyparts() + return + + // Radial rendering + var/list/choices = list() + for(var/choice in available_selection) + var/datum/radial_menu_choice/option = new + var/image/part_image = image(icon = HIDING_RADIAL_DMI, icon_state = initial(choice)) + + option.image = part_image + if(choice in try_hide_mutant_parts) + part_image.underlays += image(icon = HIDING_RADIAL_DMI, icon_state = "module_unable") + choices[initial(choice)] = option + // Radial choices + sort_list(choices) + var/pick = show_radial_menu(usr, src, choices, custom_check = FALSE, tooltips = TRUE) + if(!pick) + return + + // Choice to action + if(pick == "reveal all") + to_chat(usr, span_notice("You are no longer trying to hide your mutant parts.")) + LAZYNULL(try_hide_mutant_parts) + update_mutant_bodyparts() + return + + else if(pick in try_hide_mutant_parts) + to_chat(usr, span_notice("You are no longer trying to hide your [pick].")) + LAZYREMOVE(try_hide_mutant_parts, pick) + else + to_chat(usr, span_notice("You are now trying to hide your [pick].")) + LAZYOR(try_hide_mutant_parts, pick) + update_mutant_bodyparts() + // automatically re-do the menu after making a selection + mutant_part_visibility(re_do = TRUE) + + +// Feign impairment verb +#define DEFAULT_TIME 30 +#define MAX_TIME 36000 // 10 hours + +/mob/living/carbon/human/verb/acting() + set category = "IC" + set name = "Feign Impairment" + set desc = "Pretend to be impaired for a defined duration." + + if(stat != CONSCIOUS) + to_chat(usr, span_warning("You can't do this right now...")) + return + + var/static/list/choices = list("drunkenness", "stuttering", "jittering") + var/impairment = tgui_input_list(src, "Select an impairment to perform:", "Impairments", choices) + if(!impairment) + return + + var/duration = tgui_input_number(src, "How long would you like to feign [impairment] for?", "Duration in seconds", DEFAULT_TIME, MAX_TIME) + switch(impairment) + if("drunkenness") + var/mob/living/living_user = usr + if(istype(living_user)) + living_user.add_mood_event("drunk", /datum/mood_event/drunk) + set_slurring_if_lower(duration SECONDS) + if("stuttering") + set_stutter_if_lower(duration SECONDS) + if("jittering") + set_jitter_if_lower(duration SECONDS) + + if(duration) + addtimer(CALLBACK(src, PROC_REF(acting_expiry), impairment), duration SECONDS) + to_chat(src, "You are now feigning [impairment].") + +/mob/living/carbon/human/proc/acting_expiry(impairment) + if(impairment) + // Procs when fake impairment duration ends, useful for calling extra events to wrap up too + if(impairment == "drunkenness") + var/mob/living/living_user = usr + if(istype(living_user)) + living_user.clear_mood_event("drunk") + // Notify the user + to_chat(src, "You are no longer feigning [impairment].") + +#undef DEFAULT_TIME +#undef MAX_TIME +#undef HIDING_RADIAL_DMI diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/human_defines.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/human_defines.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/human_defines.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/human_defines.dm diff --git a/modular_nova/modules/customization/modules/mob/living/carbon/human/species.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species.dm new file mode 100644 index 00000000000000..31b0dd14e20054 --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species.dm @@ -0,0 +1,317 @@ +GLOBAL_LIST_EMPTY(customizable_races) + +/datum/species + mutant_bodyparts = list() + digitigrade_customization = DIGITIGRADE_OPTIONAL // Doing this so that the legs preference actually works for everyone. + ///Self explanatory + var/can_have_genitals = TRUE + ///A list of actual body markings on the owner of the species. Associative lists with keys named by limbs defines, pointing to a list with names and colors for the marking to be rendered. This is also stored in the DNA + var/list/list/body_markings = list() + ///Override of the eyes icon file, used for Vox and maybe more in the future - The future is now, with Teshari using it too + var/eyes_icon + ///How are we treated regarding processing reagents, by default we process them as if we're organic + var/reagent_flags = PROCESS_ORGANIC + ///Whether a species can use augmentations in preferences + var/can_augment = TRUE + ///Override for the alpha of bodyparts and mutant parts. + var/specific_alpha = 255 + ///Override for alpha value of markings, should be much lower than the above value. + var/markings_alpha = 255 + ///If a species can always be picked in prefs for the purposes of customizing it for ghost roles or events + var/always_customizable = FALSE + /// If a species requires the player to be a Veteran to be able to pick it. + var/veteran_only = FALSE + ///Flavor text of the species displayed on character creation screeen + var/flavor_text = "No description." + ///Path to BODYTYPE_CUSTOM species worn icons. An assoc list of ITEM_SLOT_X => /icon + var/list/custom_worn_icons = list() + ///Is this species restricted from changing their body_size in character creation? + var/body_size_restricted = FALSE + /// Are we lore protected? This prevents people from changing the species lore or species name. + var/lore_protected = FALSE + +/// Returns a list of the default mutant bodyparts, and whether or not they can be randomized or not +/datum/species/proc/get_default_mutant_bodyparts() + return list() + +/datum/species/proc/handle_mutant_bodyparts(mob/living/carbon/human/owner, forced_colour, force_update = FALSE) + return + +/datum/species/dullahan + mutant_bodyparts = list() + +/datum/species/human/felinid + mutant_bodyparts = list() + +/datum/species/human/felinid/get_default_mutant_bodyparts() + return list( + "tail" = list("Cat", FALSE), + "ears" = list("Cat", FALSE), + ) + +/datum/species/human + mutant_bodyparts = list() + +/datum/species/human/get_default_mutant_bodyparts() + return list( + "ears" = list("None", FALSE), + "tail" = list("None", FALSE), + "wings" = list("None", FALSE), + ) + +/datum/species/mush + mutant_bodyparts = list() + +/datum/species/vampire + mutant_bodyparts = list() + +/datum/species/plasmaman + mutant_bodyparts = list() + can_have_genitals = FALSE + can_augment = FALSE + +/datum/species/ethereal + mutant_bodyparts = list() + can_have_genitals = FALSE + can_augment = FALSE + +/datum/species/pod + name = "Primal Podperson" + always_customizable = TRUE + +/datum/species/randomize_features(mob/living/carbon/human/human_mob) + var/list/features = ..() + return features + +/** + * Returns a list of mutant_bodyparts + * + * Gets the default species mutant_bodyparts list for the given species datum and sets up its sprite accessories. + * + * Arguments: + * * features - Features are needed for the part color + * * existing_mutant_bodyparts - When passed a list of existing mutant bodyparts, the existing ones will not get overwritten + */ +/datum/species/proc/get_mutant_bodyparts(list/features, list/existing_mutant_bodyparts) //Needs features to base the colour off of + var/list/mutantpart_list = list() + if(LAZYLEN(existing_mutant_bodyparts)) + mutantpart_list = existing_mutant_bodyparts.Copy() + var/list/default_bodypart_data = GLOB.default_mutant_bodyparts[name] + var/list/bodyparts_to_add = default_bodypart_data.Copy() + if(CONFIG_GET(flag/disable_erp_preferences)) + for(var/genital in GLOB.possible_genitals) + bodyparts_to_add.Remove(genital) + for(var/key in bodyparts_to_add) + if(LAZYLEN(existing_mutant_bodyparts) && existing_mutant_bodyparts[key]) + continue + var/datum/sprite_accessory/SP + if(default_bodypart_data[key][MUTANTPART_CAN_RANDOMIZE]) + SP = random_accessory_of_key_for_species(key, src) + else + SP = GLOB.sprite_accessories[key][bodyparts_to_add[key][MUTANTPART_NAME]] + if(!SP) + CRASH("Cant find accessory of [key] key, [bodyparts_to_add[key]] name, for species [id]") + var/list/color_list = SP.get_default_color(features, src) + var/list/final_list = list() + final_list[MUTANT_INDEX_NAME] = SP.name + final_list[MUTANT_INDEX_COLOR_LIST] = color_list + mutantpart_list[key] = final_list + + return mutantpart_list + +/datum/species/proc/get_random_body_markings(list/features) //Needs features to base the colour off of + return list() + +/datum/species/proc/handle_body(mob/living/carbon/human/species_human) + species_human.remove_overlay(BODY_LAYER) + var/height_offset = species_human.get_top_offset() // From high changed by varying limb height + var/list/standing = list() + + var/obj/item/bodypart/head/noggin = species_human.get_bodypart(BODY_ZONE_HEAD) + + if(noggin && !(HAS_TRAIT(species_human, TRAIT_HUSK))) + if(noggin.head_flags & HEAD_EYESPRITES) + var/obj/item/organ/internal/eyes/eye_organ = species_human.get_organ_slot(ORGAN_SLOT_EYES) + + if(eye_organ) + eye_organ.refresh(call_update = FALSE) + for(var/mutable_appearance/eye_overlay in eye_organ.generate_body_overlay(species_human)) + eye_overlay.pixel_y += height_offset + standing += eye_overlay + + //Underwear, Undershirts & Socks + if(!HAS_TRAIT(species_human, TRAIT_NO_UNDERWEAR)) + if(species_human.underwear && !(species_human.underwear_visibility & UNDERWEAR_HIDE_UNDIES)) + var/datum/sprite_accessory/underwear/underwear = GLOB.underwear_list[species_human.underwear] + var/mutable_appearance/underwear_overlay + var/female_sprite_flags = FEMALE_UNIFORM_FULL // the default gender shaping + if(underwear) + var/icon_state = underwear.icon_state + if(underwear.has_digitigrade && (species_human.bodytype & BODYTYPE_DIGITIGRADE)) + icon_state += "_d" + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY // for digi gender shaping + if(species_human.dna.species.sexes && species_human.physique == FEMALE && (underwear.gender == MALE)) + underwear_overlay = wear_female_version(icon_state, underwear.icon, BODY_LAYER, female_sprite_flags) + else + underwear_overlay = mutable_appearance(underwear.icon, icon_state, -BODY_LAYER) + if(!underwear.use_static) + underwear_overlay.color = species_human.underwear_color + underwear_overlay.pixel_y += height_offset + standing += underwear_overlay + + if(species_human.bra && !(species_human.underwear_visibility & UNDERWEAR_HIDE_BRA)) + var/datum/sprite_accessory/bra/bra = GLOB.bra_list[species_human.bra] + + if(bra) + var/mutable_appearance/bra_overlay + var/icon_state = bra.icon_state + bra_overlay = mutable_appearance(bra.icon, icon_state, -BODY_LAYER) + if(!bra.use_static) + bra_overlay.color = species_human.bra_color + bra_overlay.pixel_y += height_offset + standing += bra_overlay + + if(species_human.undershirt && !(species_human.underwear_visibility & UNDERWEAR_HIDE_SHIRT)) + var/datum/sprite_accessory/undershirt/undershirt = GLOB.undershirt_list[species_human.undershirt] + if(undershirt) + var/mutable_appearance/undershirt_overlay + if(species_human.dna.species.sexes && species_human.physique == FEMALE) + undershirt_overlay = wear_female_version(undershirt.icon_state, undershirt.icon, BODY_LAYER) + else + undershirt_overlay = mutable_appearance(undershirt.icon, undershirt.icon_state, -BODY_LAYER) + if(!undershirt.use_static) + undershirt_overlay.color = species_human.undershirt_color + undershirt_overlay.pixel_y += height_offset + standing += undershirt_overlay + + if(species_human.socks && species_human.num_legs >= 2 && !(mutant_bodyparts["taur"]) && !(species_human.underwear_visibility & UNDERWEAR_HIDE_SOCKS)) + var/datum/sprite_accessory/socks/socks = GLOB.socks_list[species_human.socks] + if(socks) + var/mutable_appearance/socks_overlay + var/icon_state = socks.icon_state + if((species_human.bodytype & BODYTYPE_DIGITIGRADE)) + icon_state += "_d" + socks_overlay = mutable_appearance(socks.icon, icon_state, -BODY_LAYER) + if(!socks.use_static) + socks_overlay.color = species_human.socks_color + standing += socks_overlay + + if(standing.len) + species_human.overlays_standing[BODY_LAYER] = standing + + species_human.apply_overlay(BODY_LAYER) + handle_mutant_bodyparts(species_human) + +/datum/species/spec_stun(mob/living/carbon/human/H,amount) + if(H) + stop_wagging_tail(H) + . = ..() + +/* +* TAIL WAGGING +*/ + +/datum/species/proc/can_wag_tail(mob/living/carbon/human/H) + if(!H) //Somewhere in the core code we're getting those procs with H being null + return FALSE + var/obj/item/organ/external/tail/T = H.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) + if(!T) + return FALSE + if(T.can_wag) + return TRUE + return FALSE + +/datum/species/proc/is_wagging_tail(mob/living/carbon/human/H) + if(!H) //Somewhere in the core code we're getting those procs with H being null + return FALSE + var/obj/item/organ/external/tail/T = H.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) + if(!T) + return FALSE + return T.wagging + +/datum/species/proc/start_wagging_tail(mob/living/carbon/human/H) + if(!H) //Somewhere in the core code we're getting those procs with H being null + return + var/obj/item/organ/external/tail/T = H.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) + if(!T) + return FALSE + T.wagging = TRUE + H.update_body() + +/datum/species/proc/stop_wagging_tail(mob/living/carbon/human/H) + if(!H) //Somewhere in the core code we're getting those procs with H being null + return + var/obj/item/organ/external/tail/T = H.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) + if(!T) + return + T.wagging = FALSE + H.update_body() + +/datum/species/regenerate_organs(mob/living/carbon/target, datum/species/old_species, replace_current = TRUE, list/excluded_zones, visual_only = FALSE) + . = ..() + + var/robot_organs = HAS_TRAIT(target, TRAIT_ROBOTIC_DNA_ORGANS) + + for(var/key in target.dna.mutant_bodyparts) + if(!islist(target.dna.mutant_bodyparts[key]) || !(target.dna.mutant_bodyparts[key][MUTANT_INDEX_NAME] in GLOB.sprite_accessories[key])) + continue + + var/datum/sprite_accessory/mutant_accessory = GLOB.sprite_accessories[key][target.dna.mutant_bodyparts[key][MUTANT_INDEX_NAME]] + + if(mutant_accessory?.factual && mutant_accessory.organ_type) + var/obj/item/organ/current_organ = target.get_organ_by_type(mutant_accessory.organ_type) + + if(!current_organ || replace_current) + var/obj/item/organ/replacement = SSwardrobe.provide_type(mutant_accessory.organ_type) + replacement.sprite_accessory_flags = mutant_accessory.flags_for_organ + replacement.relevant_layers = mutant_accessory.relevent_layers + + if(robot_organs) + replacement.organ_flags |= ORGAN_ROBOTIC + + // If there's an existing mutant organ, we're technically replacing it. + // Let's abuse the snowflake proc that skillchips added. Basically retains + // feature parity with every other organ too. + if(current_organ) + current_organ.before_organ_replacement(replacement) + + replacement.build_from_dna(target.dna, key) + // organ.Insert will qdel any current organs in that slot, so we don't need to. + replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED) + + // var/obj/item/organ/path = new SA.organ_type + // var/obj/item/organ/oldorgan = C.get_organ_slot(path.slot) + // if(oldorgan) + // oldorgan.Remove(C,TRUE) + // QDEL_NULL(oldorgan) + // path.build_from_dna(C.dna, key) + // path.Insert(C, 0, FALSE) + + +/datum/species/proc/spec_revival(mob/living/carbon/human/H) + return + +/// Gets a list of all customizable races on roundstart. +/proc/get_customizable_races() + RETURN_TYPE(/list) + + if (!GLOB.customizable_races.len) + GLOB.customizable_races = generate_customizable_races() + + return GLOB.customizable_races + +/** + * Generates races available to choose in character setup at roundstart, yet not playable on the station. + * + * This proc generates which species are available to pick from in character setup. + */ +/proc/generate_customizable_races() + var/list/customizable_races = list() + + for(var/species_type in subtypesof(/datum/species)) + var/datum/species/species = new species_type + if(species.always_customizable) + customizable_races += species.id + qdel(species) + + return customizable_races diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/akula.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/akula.dm similarity index 96% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/akula.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/akula.dm index c226914c1e7336..b439a0e1f41d2a 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/akula.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/akula.dm @@ -16,13 +16,12 @@ OFFSET_HEAD = list(0, 2), OFFSET_HAIR = list(0, 1), ) - eyes_icon = 'modular_skyrat/modules/organs/icons/akula_eyes.dmi' + eyes_icon = 'modular_nova/modules/organs/icons/akula_eyes.dmi' mutanteyes = /obj/item/organ/internal/eyes/akula mutanttongue = /obj/item/organ/internal/tongue/akula inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, - TRAIT_CAN_USE_FLIGHT_POTION, TRAIT_LITERATE, TRAIT_WATER_BREATHING, TRAIT_SLICK_SKIN, @@ -30,10 +29,6 @@ ) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID mutant_bodyparts = list() - default_mutant_bodyparts = list( - "tail" = ACC_RANDOM, - "legs" = "Normal Legs" - ) outfit_important_for_life = /datum/outfit/akula payday_modifier = 1.0 changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT @@ -48,6 +43,12 @@ /// This variable stores the timer datum which appears if the mob becomes wet var/dry_up_timer = TIMER_ID_NULL +/datum/species/akula/get_default_mutant_bodyparts() + return list( + "tail" = list("Akula", TRUE), + "legs" = list("Normal Legs", FALSE), + ) + /datum/species/akula/get_species_description() return placeholder_description @@ -61,7 +62,8 @@ "Yet, despite their differences, all Agurkrral citizens swim freely in their kingdom's waters. Even the most controlling border princes, even those in the Old Principalities working the slave trade, know better than to openly erode a citizen's right to life, property, and speech. Any alien species can become an Agurkrral citizen, and even non-citizens enjoy the right to life, with executions outright banned. The aristocracy remains well-educated, even the edgerunner warlords of the New Principalities, and the Kingdom as a whole enjoys its status as a nation that's now a true rival to Sol. Larger, more populated, and better developed; though, having to 'integrate' Solarian technologies, goods, and peoples to fully succeed. The Azuleans are even known as an environmentally-focused people; although they hold no care for lands they cannot make use of, modern nobles are still in charge of maintaining the biosphere of lands they control, to allow their strangely engineered flora and fauna to thrive, and for the people to have healthy and clean waters to live in.", ) -/datum/species/akula/randomize_features(mob/living/carbon/human/human_mob) +/datum/species/akula/randomize_features() + var/list/features = ..() var/main_color var/secondary_color var/tertiary_color @@ -83,9 +85,10 @@ main_color = "#DB35DE" secondary_color = "#BE3AFE" tertiary_color = "#F5E2EE" - human_mob.dna.features["mcolor"] = main_color - human_mob.dna.features["mcolor2"] = secondary_color - human_mob.dna.features["mcolor3"] = tertiary_color + features["mcolor"] = main_color + features["mcolor2"] = secondary_color + features["mcolor3"] = tertiary_color + return features /datum/species/akula/prepare_human_for_preview(mob/living/carbon/human/akula) var/main_color = "#1CD3E5" diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/aquatic.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/aquatic.dm similarity index 82% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/aquatic.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/aquatic.dm index 910c49229b7b80..29df861b8bf24b 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/aquatic.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/aquatic.dm @@ -4,7 +4,6 @@ inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, - TRAIT_CAN_USE_FLIGHT_POTION, TRAIT_LITERATE, TRAIT_WATER_BREATHING, TRAIT_MUTANT_COLORS, @@ -12,14 +11,6 @@ inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID mutant_bodyparts = list() mutanttongue = /obj/item/organ/internal/tongue/aquatic - default_mutant_bodyparts = list( - "tail" = ACC_RANDOM, - "snout" = ACC_RANDOM, - "horns" = "None", - "ears" = ACC_RANDOM, - "legs" = "Normal Legs", - "wings" = "None" - ) payday_modifier = 1.0 changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT examine_limb_id = SPECIES_AKULA @@ -32,6 +23,16 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/mutant/aquatic, ) +/datum/species/aquatic/get_default_mutant_bodyparts() + return list( + "tail" = list("Shark", TRUE), + "snout" = list("Shark", TRUE), + "horns" = list("None", FALSE), + "ears" = list("Hammerhead", TRUE), + "legs" = list("Normal Legs", FALSE), + "wings" = list("None", FALSE), + ) + /obj/item/organ/internal/tongue/aquatic liked_foodtypes = SEAFOOD | MEAT | FRUIT | GORE disliked_foodtypes = CLOTH | GROSS @@ -39,6 +40,7 @@ /datum/species/aquatic/randomize_features(mob/living/carbon/human/human_mob) + var/list/features = ..() var/main_color var/second_color var/random = rand(1,5) @@ -59,9 +61,10 @@ if(5) main_color = "#444444" second_color = "#DDDDEE" - human_mob.dna.features["mcolor"] = main_color - human_mob.dna.features["mcolor2"] = second_color - human_mob.dna.features["mcolor3"] = second_color + features["mcolor"] = main_color + features["mcolor2"] = second_color + features["mcolor3"] = second_color + return features /datum/species/aquatic/get_random_body_markings(list/passed_features) var/name = "Shark" diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/dwarf.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/dwarf.dm similarity index 96% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/dwarf.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/dwarf.dm index 1d15db5f5aed15..76c3bb57fec929 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/dwarf.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/dwarf.dm @@ -6,7 +6,6 @@ TRAIT_DWARF,TRAIT_SNOB, TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, - TRAIT_CAN_USE_FLIGHT_POTION, TRAIT_LITERATE, TRAIT_USES_SKINTONES, ) diff --git a/modular_nova/modules/customization/modules/mob/living/carbon/human/species/ghoul.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/ghoul.dm new file mode 100644 index 00000000000000..e71c3ed9e50c2c --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/ghoul.dm @@ -0,0 +1,218 @@ +/datum/species/ghoul + name = "Ghoul" + id = SPECIES_GHOUL + examine_limb_id = SPECIES_GHOUL + can_have_genitals = FALSE //WHY WOULD YOU WANT TO FUCK ONE OF THESE THINGS? + mutant_bodyparts = list("ghoulcolor" = "Tan Necrotic") + mutanttongue = /obj/item/organ/internal/tongue/ghoul + inherent_traits = list( + TRAIT_ADVANCEDTOOLUSER, + TRAIT_RADIMMUNE, + TRAIT_CAN_STRIP, + TRAIT_EASYDISMEMBER, + TRAIT_EASILY_WOUNDED, //theyre like fuckin skin and bones + TRAIT_LITERATE, + TRAIT_MUTANT_COLORS, + TRAIT_FIXED_MUTANT_COLORS, + ) + payday_modifier = 1.0 //-- "Equality" + stunmod = 1.25 //multiplier for stun durations + bodytemp_normal = T20C + changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT + bodypart_overrides = list( + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/mutant/ghoul, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/mutant/ghoul, + BODY_ZONE_HEAD = /obj/item/bodypart/head/mutant/ghoul, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/mutant/ghoul, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/mutant/ghoul, + BODY_ZONE_CHEST = /obj/item/bodypart/chest/mutant/ghoul, + ) + //the chest and head cannot be turned into meat + //i dont have to worry about sprites due to limbs_icon, thank god + //also the head needs to be normal for hair to work + +/datum/species/ghoul/get_default_mutant_bodyparts() + return list( + "tail" = list("None", FALSE), + "ears" = list("None", FALSE), + "legs" = list("Normal Legs", FALSE), + ) + +/proc/proof_ghoul_features(list/inFeatures) + // Missing Defaults in DNA? Randomize! + if(inFeatures["ghoulcolor"] == null || inFeatures["ghoulcolor"] == "") + inFeatures["ghoulcolor"] = GLOB.color_list_ghoul[pick(GLOB.color_list_ghoul)] + +/datum/species/proc/set_ghoul_color(mob/living/carbon/human/human_ghoul) + return // Do Nothing + +/datum/species/ghoul/set_ghoul_color(mob/living/carbon/human/human_ghoul) + // Called on Assign, or on Color Change (or any time proof_ghoul_features() is used) + fixed_mut_color = human_ghoul.dna.features["ghoulcolor"] + +/mob/living/carbon/proc/ReassignForeignBodyparts() + var/obj/item/bodypart/head = get_bodypart(BODY_ZONE_HEAD) + if (head?.type != part_default_head) + var/obj/item/bodypart/limb = new part_default_head + limb.replace_limb(src, TRUE) + qdel(head) + + var/obj/item/bodypart/chest = get_bodypart(BODY_ZONE_CHEST) + if (chest?.type != part_default_chest) + var/obj/item/bodypart/limb = new part_default_chest + limb.replace_limb(src, TRUE) + qdel(chest) + + var/obj/item/bodypart/arm/left/left_arm = get_bodypart(BODY_ZONE_L_ARM) + if (left_arm?.type != part_default_l_arm) + var/obj/item/bodypart/limb = new part_default_l_arm + limb.replace_limb(src, TRUE) + qdel(left_arm) + + var/obj/item/bodypart/arm/right/right_arm = get_bodypart(BODY_ZONE_R_ARM) + if (right_arm?.type != part_default_r_arm) + var/obj/item/bodypart/limb = new part_default_r_arm + limb.replace_limb(src, TRUE) + qdel(right_arm) + + var/obj/item/bodypart/leg/left/left_leg = get_bodypart(BODY_ZONE_L_LEG) + if (left_leg?.type != part_default_l_leg) + var/obj/item/bodypart/limb = new part_default_l_leg + limb.replace_limb(src, TRUE) + qdel(left_leg) + + var/obj/item/bodypart/leg/right/right_leg = get_bodypart(BODY_ZONE_R_LEG) + if (right_leg?.type != part_default_r_leg) + var/obj/item/bodypart/limb = new part_default_r_leg + limb.replace_limb(src, TRUE) + qdel(right_leg) + +/datum/species/ghoul/on_species_gain(mob/living/carbon/new_ghoul, datum/species/old_species, pref_load) + // Missing Defaults in DNA? Randomize! + proof_ghoul_features(new_ghoul.dna.features) + + . = ..() + + if(ishuman(new_ghoul)) + var/mob/living/carbon/human/human_ghoul = new_ghoul + + set_ghoul_color(human_ghoul) + + // 2) BODYPARTS + RegisterSignal(src, COMSIG_ITEM_ATTACK, PROC_REF(attach_meat)) + human_ghoul.part_default_head = /obj/item/bodypart/head/mutant/ghoul + human_ghoul.part_default_chest = /obj/item/bodypart/chest/mutant/ghoul + human_ghoul.part_default_l_arm = /obj/item/bodypart/arm/left/mutant/ghoul + human_ghoul.part_default_r_arm = /obj/item/bodypart/arm/right/mutant/ghoul + human_ghoul.part_default_l_leg = /obj/item/bodypart/leg/left/mutant/ghoul + human_ghoul.part_default_r_leg = /obj/item/bodypart/leg/right/mutant/ghoul + human_ghoul.ReassignForeignBodyparts() + +/datum/species/ghoul/on_species_loss(mob/living/carbon/human/former_ghoul, datum/species/new_species, pref_load) + . = ..() + + // 2) BODYPARTS + UnregisterSignal(src, COMSIG_ITEM_ATTACK) + former_ghoul.part_default_head = /obj/item/bodypart/head + former_ghoul.part_default_chest = /obj/item/bodypart/chest + former_ghoul.part_default_l_arm = /obj/item/bodypart/arm/left + former_ghoul.part_default_r_arm = /obj/item/bodypart/arm/right + former_ghoul.part_default_l_leg = /obj/item/bodypart/leg/left + former_ghoul.part_default_r_leg = /obj/item/bodypart/leg/right + former_ghoul.ReassignForeignBodyparts() + +/* +* ATTACK PROCS +*/ + +/datum/species/ghoul/disarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) + // Targeting Self? With "DISARM" + if (user == target) + var/target_zone = user.zone_selected + var/list/allowedList = list ( BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG ) + var/obj/item/bodypart/affecting = user.get_bodypart(check_zone(user.zone_selected)) //stabbing yourself always hits the right target + + if ((target_zone in allowedList) && affecting) + + if (user.handcuffed) + to_chat(user, span_alert("You can't get a good enough grip with your hands bound.")) + return FALSE + + // Robot Arms Fail + if (!IS_ORGANIC_LIMB(affecting)) + to_chat(user, "That thing is on there good. It's not coming off with a gentle tug.") + return FALSE + + // Pry it off... + user.visible_message("[user] grabs onto [p_their()] own [affecting.name] and pulls.", span_notice("You grab hold of your [affecting.name] and yank hard.")) + if (!do_after(user, 3 SECONDS, target)) + return TRUE + + user.visible_message("[user]'s [affecting.name] comes right off in their hand.", span_notice("Your [affecting.name] pops right off.")) + playsound(get_turf(user), 'sound/effects/meatslap.ogg', 40, 1) //ill change these sounds later + + // Destroy Limb, Drop Meat, Pick Up + var/obj/item/I = affecting.drop_limb() + if (istype(I, /obj/item/food/meat/slab)) + user.put_in_hands(I) + + new /obj/effect/temp_visual/dir_setting/bloodsplatter(target.loc, target.dir) + target.add_splatter_floor(target.loc) + target.bleed(60) + + return COMPONENT_CANCEL_ATTACK_CHAIN + +/datum/species/ghoul/proc/attach_meat(obj/item/attacking_item, mob/living/carbon/human/target, mob/living/user, params) + SIGNAL_HANDLER + + if(!istype(target)) + return + + if(LAZYACCESS(params2list(params), RIGHT_CLICK)) + return + + // MEAT LIMBS: If our limb is missing, and we're using meat, stick it in! + if(target.stat < DEAD && istype(attacking_item, /obj/item/food/meat/slab)) + var/target_zone = user.zone_selected + + if(target.get_bodypart(target_zone)) // we already have a limb here + return + + var/list/limbs = list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) + + if((target_zone in limbs)) + if(user == target) + user.visible_message("[user] begins mashing [attacking_item] into [target]'s torso.", span_notice("You begin mashing [attacking_item] into your torso.")) + else + user.visible_message("[user] begins mashing [attacking_item] into [target]'s torso.", span_notice("You begin mashing [attacking_item] into [target]'s torso.")) + + // Leave Melee Chain (so deleting the meat doesn't throw an error) <--- aka, deleting the meat that called this very proc. + spawn(1) + if(do_after(user, 3 SECONDS, target)) + // Attach the part! + var/obj/item/bodypart/newBP = target.newBodyPart(target_zone, FALSE) + target.visible_message("The meat sprouts digits and becomes [target]'s new [newBP.name]!", span_notice("The meat sprouts digits and becomes your new [newBP.name]!")) + newBP.try_attach_limb(target) + qdel(attacking_item) + playsound(get_turf(target), 'sound/effects/meatslap.ogg', 50, 1) + + return COMPONENT_CANCEL_ATTACK_CHAIN + +/mob/living/carbon + // Type References for Bodyparts + var/obj/item/bodypart/head/part_default_head = /obj/item/bodypart/head + var/obj/item/bodypart/chest/part_default_chest = /obj/item/bodypart/chest + var/obj/item/bodypart/arm/left/part_default_l_arm = /obj/item/bodypart/arm/left + var/obj/item/bodypart/arm/right/part_default_r_arm = /obj/item/bodypart/arm/right + var/obj/item/bodypart/leg/left/part_default_l_leg = /obj/item/bodypart/leg/left + var/obj/item/bodypart/leg/right/part_default_r_leg = /obj/item/bodypart/leg/right + +/datum/species/ghoul/get_species_description() + return placeholder_description + +/datum/species/ghoul/get_species_lore() + return list(placeholder_lore) + +/datum/species/ghoul/prepare_human_for_preview(mob/living/carbon/human/human) + regenerate_organs(human, src, visual_only = TRUE) + human.update_body(TRUE) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/_hemophage_defines.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/_hemophage_defines.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/_hemophage_defines.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/_hemophage_defines.dm diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/_organ_corruption.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/_organ_corruption.dm similarity index 98% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/_organ_corruption.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/_organ_corruption.dm index aa8c21a6d0eb96..0bac094f620a43 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/_organ_corruption.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/_organ_corruption.dm @@ -16,7 +16,7 @@ /// If this type of organ has a unique sprite for what its corrupted /// version should look like, this will be the icon file it will be pulled /// from. - var/corrupted_icon = 'modular_skyrat/modules/organs/icons/hemophage_organs.dmi' + var/corrupted_icon = 'modular_nova/modules/organs/icons/hemophage_organs.dmi' /// If this type of organ has a unique sprite for what its corrupted /// version should look like, this will be the icon state it will be pulled /// from. diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/atrophied_lungs.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/atrophied_lungs.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/atrophied_lungs.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/atrophied_lungs.dm diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_liver.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_liver.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_liver.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_liver.dm diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_stomach.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_stomach.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_stomach.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_stomach.dm diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_tongue.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_tongue.dm similarity index 93% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_tongue.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_tongue.dm index 6a0c7f3e4c5acd..4a1a5e1aa41a3d 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_tongue.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_tongue.dm @@ -118,7 +118,13 @@ // if you drained from a human with a client, congrats var/drained_multiplier = (is_target_human_with_client ? BLOOD_DRAIN_MULTIPLIER_CKEY : 1) - victim.blood_volume = clamp(victim.blood_volume - drained_blood, 0, BLOOD_VOLUME_MAXIMUM) + var/obj/item/organ/internal/stomach/hemophage/stomach_reference = hemophage.get_organ_slot(ORGAN_SLOT_STOMACH) + if(isnull(stomach_reference)) + victim.blood_volume = clamp(victim.blood_volume - drained_blood, 0, BLOOD_VOLUME_MAXIMUM) + + else + if(!victim.transfer_blood_to(stomach_reference, drained_blood, forced = TRUE)) + victim.blood_volume = clamp(victim.blood_volume - drained_blood, 0, BLOOD_VOLUME_MAXIMUM) hemophage.blood_volume = clamp(hemophage.blood_volume + (drained_blood * drained_multiplier), 0, BLOOD_VOLUME_MAXIMUM) log_combat(hemophage, victim, "drained [drained_blood]u of blood from", addition = " (NEW BLOOD VOLUME: [victim.blood_volume] cL)") diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_actions.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_actions.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_actions.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_actions.dm diff --git a/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_organs.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_organs.dm new file mode 100644 index 00000000000000..43005aa433f96c --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_organs.dm @@ -0,0 +1,109 @@ +/// Generic description for the corrupted organs that don't have one. +#define GENERIC_CORRUPTED_ORGAN_DESC "This shares the shape of a normal organ, but it's been covered and filled with some sort of midnight-black pulsing tissue, engorged with some sort of infectious mass." + +/// The rate at which blood metabolizes in a Hemophage's stomach subtype. +#define BLOOD_METABOLIZATION_RATE (0.1 * REAGENTS_METABOLISM) +/// Defines the time for making a corrupted organ start off corrupted. +#define ORGAN_CORRUPTION_INSTANT 0 + + +/obj/item/organ/internal/liver/hemophage + name = "liver" // Name change is handled by /datum/component/organ_corruption/corrupt_organ() + desc = GENERIC_CORRUPTED_ORGAN_DESC + icon = 'modular_nova/modules/organs/icons/hemophage_organs.dmi' + organ_flags = ORGAN_EDIBLE | ORGAN_TUMOR_CORRUPTED + + +/obj/item/organ/internal/liver/hemophage/Initialize(mapload) + . = ..() + + AddComponent(/datum/component/organ_corruption/liver, time_to_corrupt = ORGAN_CORRUPTION_INSTANT) + +/obj/item/organ/internal/liver/hemophage/handle_chemical(mob/living/carbon/affected_mob, datum/reagent/chem, seconds_per_tick, times_fired) + . = ..() + + // parent returned COMSIG_MOB_STOP_REAGENT_CHECK or we are failing + if((. & COMSIG_MOB_STOP_REAGENT_CHECK) || (organ_flags & ORGAN_FAILING)) + return + + // hemophages drink blood so blood must be pretty good for them + if(!istype(chem, /datum/reagent/blood)) + return + + var/feedback_delivered = FALSE + for(var/datum/wound/iter_wound as anything in affected_mob.all_wounds) + if(!SPT_PROB(5, seconds_per_tick)) + continue + + var/helped = iter_wound.blood_life_process() + if(feedback_delivered || !helped) + continue + + to_chat(affected_mob, span_notice("A euphoric feeling hits you as blood's warmth washes through your insides. Your body feels more alive, your wounds healthier.")) + feedback_delivered = TRUE + + +// Different handling, different name. +// Returns FALSE by default so broken bones and 'loss' wounds don't give a false message +/datum/wound/proc/blood_life_process() + return FALSE + +// Slowly increase (gauzed) clot rate, better than tea. +/datum/wound/pierce/bleed/blood_life_process() + gauzed_clot_rate += 0.1 + return TRUE + +// Slowly increase clot rate, better than tea. +/datum/wound/slash/flesh/blood_life_process() + clot_rate += 0.2 + return TRUE + +// Brought over from tea as well. +/datum/wound/burn/flesh/blood_life_process() + // Sanitizes and heals, but with a limit + if(flesh_healing <= 0.1) + flesh_healing += 0.02 + infestation_rate = max(infestation_rate - 0.005, 0) + return TRUE + + +/obj/item/organ/internal/stomach/hemophage + name = "stomach" // Name change is handled by /datum/component/organ_corruption/corrupt_organ() + desc = GENERIC_CORRUPTED_ORGAN_DESC + icon = 'modular_nova/modules/organs/icons/hemophage_organs.dmi' + organ_flags = ORGAN_EDIBLE | ORGAN_TUMOR_CORRUPTED + + +/obj/item/organ/internal/stomach/hemophage/Initialize(mapload) + . = ..() + + AddComponent(/datum/component/organ_corruption/stomach, time_to_corrupt = ORGAN_CORRUPTION_INSTANT) + + +// I didn't feel like moving this behavior onto the component, it was just too annoying to do. +/obj/item/organ/internal/stomach/hemophage/on_life(seconds_per_tick, times_fired) + var/datum/reagent/blood/blood = reagents.has_reagent(/datum/reagent/blood) + if(blood) + blood.metabolization_rate = BLOOD_METABOLIZATION_RATE + + return ..() + + +/obj/item/organ/internal/tongue/hemophage + name = "tongue" // Name change is handled by /datum/component/organ_corruption/corrupt_organ() + desc = GENERIC_CORRUPTED_ORGAN_DESC + icon = 'modular_nova/modules/organs/icons/hemophage_organs.dmi' + organ_flags = ORGAN_EDIBLE | ORGAN_TUMOR_CORRUPTED + liked_foodtypes = BLOODY + disliked_foodtypes = NONE + + +/obj/item/organ/internal/tongue/hemophage/Initialize(mapload) + . = ..() + + AddComponent(/datum/component/organ_corruption/tongue, time_to_corrupt = ORGAN_CORRUPTION_INSTANT) + + +#undef GENERIC_CORRUPTED_ORGAN_DESC +#undef BLOOD_METABOLIZATION_RATE +#undef ORGAN_CORRUPTION_INSTANT diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_species.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_species.dm similarity index 99% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_species.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_species.dm index 13f496d57109db..35ad767efabdc0 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_species.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_species.dm @@ -12,15 +12,11 @@ TRAIT_NOBREATH, TRAIT_OXYIMMUNE, TRAIT_VIRUSIMMUNE, - TRAIT_CAN_USE_FLIGHT_POTION, TRAIT_LITERATE, TRAIT_DRINKS_BLOOD, TRAIT_USES_SKINTONES, ) inherent_biotypes = MOB_HUMANOID | MOB_ORGANIC - default_mutant_bodyparts = list( - "legs" = "Normal Legs" - ) exotic_bloodtype = "U" mutantheart = /obj/item/organ/internal/heart/hemophage mutantliver = /obj/item/organ/internal/liver/hemophage @@ -32,6 +28,10 @@ skinned_type = /obj/item/stack/sheet/animalhide/human veteran_only = TRUE +/datum/species/hemophage/get_default_mutant_bodyparts() + return list( + "legs" = list("Normal Legs", FALSE), + ) /datum/species/hemophage/check_roundstart_eligible() if(check_holidays(HALLOWEEN)) @@ -39,7 +39,6 @@ return ..() - /datum/species/hemophage/on_species_gain(mob/living/carbon/human/new_hemophage, datum/species/old_species, pref_load) . = ..() to_chat(new_hemophage, HEMOPHAGE_SPAWN_TEXT) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_status_effects.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_status_effects.dm similarity index 92% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_status_effects.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_status_effects.dm index 2193ea26839e9c..b8406d77511bae 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_status_effects.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_status_effects.dm @@ -1,11 +1,11 @@ /// How much brute damage their body regenerates per second while using blood regeneration. -#define BLOOD_REGEN_BRUTE_AMOUNT 0.75 +#define BLOOD_REGEN_BRUTE_AMOUNT 2 /// How much burn damage their body regenerates per second while using blood regeneration. -#define BLOOD_REGEN_BURN_AMOUNT 0.75 +#define BLOOD_REGEN_BURN_AMOUNT 2 /// How much toxin damage their body regenerates per second while using blood regeneration. -#define BLOOD_REGEN_TOXIN_AMOUNT 0.5 +#define BLOOD_REGEN_TOXIN_AMOUNT 1.5 /// How much cellular damage their body regenerates per second while using blood regeneration. -#define BLOOD_REGEN_CELLULAR_AMOUNT 0.25 +#define BLOOD_REGEN_CELLULAR_AMOUNT 1.50 /datum/status_effect/blood_thirst_satiated id = "blood_thirst_satiated" @@ -131,14 +131,6 @@ max_blood_for_regen -= toxins_to_heal * blood_to_health_multiplier regenerator.adjustToxLoss(-toxins_to_heal) - var/cellular_damage = regenerator.getCloneLoss() - - if(cellular_damage && max_blood_for_regen > NONE) - var/cells_to_heal = min(max_blood_for_regen, min(BLOOD_REGEN_TOXIN_AMOUNT, cellular_damage) * seconds_between_ticks) - blood_used += cells_to_heal * blood_to_health_multiplier - max_blood_for_regen -= cells_to_heal * blood_to_health_multiplier - regenerator.adjustCloneLoss(-cells_to_heal) - if(!blood_used) regenerator.remove_status_effect(/datum/status_effect/blood_regen_active) return diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_tumor.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_tumor.dm similarity index 97% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_tumor.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_tumor.dm index e1dd2268f19818..e19afb9734fc99 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_tumor.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_tumor.dm @@ -14,7 +14,7 @@ /obj/item/organ/internal/heart/hemophage name = "pulsating tumor" - icon = 'modular_skyrat/modules/organs/icons/hemophage_organs.dmi' + icon = 'modular_nova/modules/organs/icons/hemophage_organs.dmi' icon_state = "tumor-on" base_icon_state = "tumor" desc = "This pulsating organ nearly resembles a normal heart, but it's been twisted beyond any human appearance, having turned to the color of coal. The way it barely fits where the original organ was sends shivers down your spine... <i>The fact that it's what keeps them alive makes it all the more terrifying.</i>" @@ -25,7 +25,7 @@ var/bloodloss_rate = NORMAL_BLOOD_DRAIN -/obj/item/organ/internal/heart/hemophage/Insert(mob/living/carbon/tumorful, special, drop_if_replaced) +/obj/item/organ/internal/heart/hemophage/Insert(mob/living/carbon/tumorful, special, movement_flags) . = ..() if(!. || !owner) return @@ -120,7 +120,7 @@ if(owner.health >= owner.maxHealth || is_dormant || owner.blood_volume <= MINIMUM_VOLUME_FOR_REGEN || (!in_closet(owner) && !in_total_darkness(owner))) return FALSE - return owner.getBruteLoss() || owner.getFireLoss() || owner.getToxLoss() || owner.getCloneLoss() + return owner.getBruteLoss() || owner.getFireLoss() || owner.getToxLoss() /// Simple helper to toggle the hemophage's vulnerability (or lack thereof) based on the status of their tumor. @@ -133,7 +133,6 @@ hemophage_physiology.brute_mod *= damage_multiplier hemophage_physiology.burn_mod *= damage_multiplier hemophage_physiology.tox_mod *= damage_multiplier - hemophage_physiology.clone_mod *= damage_multiplier hemophage_physiology.stamina_mod *= damage_multiplier / 2 // Doing half here so that they don't instantly hit stam-crit when hit like only once. diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/tumor_corruption.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/tumor_corruption.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/tumor_corruption.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/tumor_corruption.dm diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/humanoid.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/humanoid.dm similarity index 80% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/humanoid.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/humanoid.dm index 76d1feab513a7b..0bdecf35227b9e 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/humanoid.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/humanoid.dm @@ -4,25 +4,26 @@ inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, - TRAIT_CAN_USE_FLIGHT_POTION, TRAIT_LITERATE, TRAIT_MUTANT_COLORS, ) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID mutant_bodyparts = list() - default_mutant_bodyparts = list( - "tail" = "None", - "snout" = "None", - "ears" = "None", - "legs" = "Normal Legs", - "wings" = "None", - "taur" = "None", - "horns" = "None" - ) changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT payday_modifier = 1.0 examine_limb_id = SPECIES_HUMAN +/datum/species/humanoid/get_default_mutant_bodyparts() + return list( + "tail" = list("None", FALSE), + "snout" = list("None", FALSE), + "ears" = list("None", FALSE), + "legs" = list("Normal Legs", FALSE), + "wings" = list("None", FALSE), + "taur" = list("None", FALSE), + "horns" = list("None", FALSE), + ) + /datum/species/humanoid/get_species_description() return "This is a template species for your own creations!" diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/insect.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/insect.dm similarity index 76% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/insect.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/insect.dm index ef6afc7788db04..3cebab4a95dd01 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/insect.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/insect.dm @@ -4,23 +4,11 @@ inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, - TRAIT_CAN_USE_FLIGHT_POTION, TRAIT_LITERATE, TRAIT_MUTANT_COLORS, ) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG mutant_bodyparts = list() - default_mutant_bodyparts = list( - "tail" = "None", - "snout" = "None", - "horns" = "None", - "ears" = "None", - "legs" = "Normal Legs", - "taur" = "None", - "fluff" = "None", - "wings" = "Bee", - "moth_antennae" = "None" - ) mutanttongue = /obj/item/organ/internal/tongue/insect payday_modifier = 1.0 changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT @@ -33,7 +21,20 @@ BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/mutant/insect, BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/mutant/insect, ) - eyes_icon = 'modular_skyrat/modules/organs/icons/insect_eyes.dmi' + eyes_icon = 'modular_nova/modules/organs/icons/insect_eyes.dmi' + +/datum/species/insect/get_default_mutant_bodyparts() + return list( + "tail" = list("None", FALSE), + "snout" = list("None", FALSE), + "horns" = list("None", FALSE), + "ears" = list("None", FALSE), + "legs" = list("Normal Legs", FALSE), + "taur" = list("None", FALSE), + "fluff" = list("None", FALSE), + "wings" = list("Bee", FALSE), + "moth_antennae" = list("None", FALSE), + ) /datum/species/insect/get_species_description() return placeholder_description diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/lizard.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/lizard.dm similarity index 77% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/lizard.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/lizard.dm index 213e9bfbc91a09..55f20d16e6b3e9 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/lizard.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/lizard.dm @@ -1,20 +1,23 @@ /datum/species/lizard mutant_bodyparts = list() external_organs = list() - default_mutant_bodyparts = list( - "tail" = ACC_RANDOM, - "snout" = ACC_RANDOM, - "spines" = ACC_RANDOM, - "frills" = ACC_RANDOM, - "horns" = ACC_RANDOM, - "body_markings" = ACC_RANDOM, - "legs" = DIGITIGRADE_LEGS, - "taur" = "None", - "wings" = "None", - ) payday_modifier = 1.0 -/datum/species/lizard/randomize_features(mob/living/carbon/human/human_mob) +/datum/species/lizard/get_default_mutant_bodyparts() + return list( + "tail" = list("Smooth", TRUE), + "snout" = list("Sharp + Light", TRUE), + "spines" = list("Long + Membrane", TRUE), + "frills" = list("Short", TRUE), + "horns" = list("Curled", TRUE), + "body_markings" = list("Light Belly", TRUE), + "legs" = list(DIGITIGRADE_LEGS,FALSE), + "taur" = list("None", FALSE), + "wings" = list("None", FALSE), + ) + +/datum/species/lizard/randomize_features() + var/list/features = ..() var/main_color = "#[random_color()]" var/second_color var/third_color @@ -29,9 +32,10 @@ if(3) //Third case, more randomisation second_color = "#[random_color()]" third_color = "#[random_color()]" - human_mob.dna.features["mcolor"] = main_color - human_mob.dna.features["mcolor2"] = second_color - human_mob.dna.features["mcolor3"] = third_color + features["mcolor"] = main_color + features["mcolor2"] = second_color + features["mcolor3"] = third_color + return features /datum/species/lizard/prepare_human_for_preview(mob/living/carbon/human/lizard, lizard_color = "#009999") lizard.dna.features["mcolor"] = lizard_color @@ -48,7 +52,6 @@ inherent_traits = list( TRAIT_NO_UNDERWEAR, TRAIT_MUTANT_COLORS, - TRAIT_CAN_USE_FLIGHT_POTION, TRAIT_TACKLING_TAILED_DEFENDER, ) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/mammal.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/mammal.dm similarity index 85% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/mammal.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/mammal.dm index 6e7d9ae4f2c8bc..d450093819bffb 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/mammal.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/mammal.dm @@ -4,25 +4,12 @@ inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, - TRAIT_CAN_USE_FLIGHT_POTION, TRAIT_LITERATE, TRAIT_MUTANT_COLORS, ) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID mutant_bodyparts = list() mutanttongue = /obj/item/organ/internal/tongue/mammal - default_mutant_bodyparts = list( - "tail" = ACC_RANDOM, - "snout" = ACC_RANDOM, - "horns" = "None", - "ears" = ACC_RANDOM, - "legs" = ACC_RANDOM, - "taur" = "None", - "fluff" = "None", - "wings" = "None", - "head_acc" = "None", - "neck_acc" = "None" - ) payday_modifier = 1.0 changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT bodypart_overrides = list( @@ -34,6 +21,19 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/mutant, ) +/datum/species/mammal/get_default_mutant_bodyparts() + return list( + "tail" = list("Husky", TRUE), + "snout" = list("Husky", TRUE), + "horns" = list("None", FALSE), + "ears" = list("Husky", TRUE), + "legs" = list("Normal Legs", TRUE), + "taur" = list("None", FALSE), + "fluff" = list("None", FALSE), + "wings" = list("None", FALSE), + "head_acc" = list("None", FALSE), + "neck_acc" = list("None", FALSE), + ) /obj/item/organ/internal/tongue/mammal liked_foodtypes = GRAIN | MEAT @@ -41,7 +41,8 @@ toxic_foodtypes = TOXIC -/datum/species/mammal/randomize_features(mob/living/carbon/human/human_mob) +/datum/species/mammal/randomize_features() + var/list/features = ..() var/main_color var/second_color var/third_color @@ -75,9 +76,10 @@ main_color = "#[random_color()]" second_color = "#[random_color()]" third_color = "#[random_color()]" - human_mob.dna.features["mcolor"] = main_color - human_mob.dna.features["mcolor2"] = second_color - human_mob.dna.features["mcolor3"] = third_color + features["mcolor"] = main_color + features["mcolor2"] = second_color + features["mcolor3"] = third_color + return features /datum/species/mammal/get_random_body_markings(list/passed_features) var/name = "None" diff --git a/modular_nova/modules/customization/modules/mob/living/carbon/human/species/monkey.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/monkey.dm new file mode 100644 index 00000000000000..7054f8aeddea98 --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/monkey.dm @@ -0,0 +1,19 @@ +/datum/species/monkey/get_default_mutant_bodyparts() + return list( + "tail" = list("Monkey", FALSE), + ) + +/datum/species/monkey/randomize_features() + var/list/features = ..() + features["tail"] = pick(GLOB.tails_list_monkey - list("None")) // No tail-less monkeys. + return features + +/datum/species/monkey/prepare_human_for_preview(mob/living/carbon/human/monke) + regenerate_organs(monke, src, visual_only = TRUE) + monke.update_body(is_creating = TRUE) + +/datum/species/monkey/get_custom_worn_icon(item_slot, obj/item/item) + return item.worn_icon_monkey + +/datum/species/monkey/set_custom_worn_icon(item_slot, obj/item/item, icon/icon) + item.worn_icon_monkey = icon diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/moth.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/moth.dm similarity index 82% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/moth.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/moth.dm index 80dc243d476a03..562ba54398d0b5 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/moth.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/moth.dm @@ -1,20 +1,23 @@ /datum/species/moth mutant_bodyparts = list() - default_mutant_bodyparts = list( - "fluff" = "None", - "wings" = ACC_RANDOM, - "moth_antennae" = ACC_RANDOM, - ) inherent_traits = list( TRAIT_HAS_MARKINGS, - TRAIT_CAN_USE_FLIGHT_POTION, TRAIT_TACKLING_WINGED_ATTACKER, TRAIT_ANTENNAE, TRAIT_MUTANT_COLORS, ) -/datum/species/moth/randomize_features(mob/living/carbon/human/human_mob) - human_mob.dna.features["mcolor"] = "#E5CD99" +/datum/species/moth/get_default_mutant_bodyparts() + return list( + "fluff" = list("Plain", FALSE), + "wings" = list("Moth (Plain)", TRUE), + "moth_antennae" = list("Plain", TRUE), + ) + +/datum/species/moth/randomize_features() + var/list/features = ..() + features["mcolor"] = "#E5CD99" + return features /datum/species/moth/get_random_body_markings(list/passed_features) var/name = "None" diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/mushpeople.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/mushpeople.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/mushpeople.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/mushpeople.dm diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/placeholder_helper.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/placeholder_helper.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/placeholder_helper.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/placeholder_helper.dm diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/podweak.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/podweak.dm similarity index 92% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/podweak.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/podweak.dm index 90a4e4298a7c71..6e4615f99a5e94 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/podweak.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/podweak.dm @@ -7,12 +7,14 @@ TRAIT_LITERATE, ) mutant_bodyparts = list() - default_mutant_bodyparts = list( - "pod_hair" = ACC_RANDOM, - "legs" = "Normal Legs" - ) payday_modifier = 1.0 +/datum/species/pod/get_default_mutant_bodyparts() + return list( + "pod_hair" = list("Ivy", TRUE), + "legs" = list("Normal Legs", FALSE), + ) + /datum/species/pod/podweak name = "Podperson" id = SPECIES_PODPERSON_WEAK diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm similarity index 91% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm index 422c1fd12cd5c3..33cd7ff1907542 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm @@ -1,20 +1,22 @@ /datum/species/jelly - default_mutant_bodyparts = list( - "tail" = "None", - "snout" = "None", - "ears" = "None", - "taur" = "None", - "wings" = "None", - "legs" = "Normal Legs", - "horns" = "None", - "spines" = "None", - "frills" = "None", - ) mutant_bodyparts = list() hair_color = "mutcolor" hair_alpha = 160 //a notch brighter so it blends better. facial_hair_alpha = 160 +/datum/species/jelly/get_default_mutant_bodyparts() + return list( + "tail" = list("None", FALSE), + "snout" = list("None", FALSE), + "ears" = list("None", FALSE), + "legs" = list("Normal Legs", FALSE), + "taur" = list("None", FALSE), + "wings" = list("None", FALSE), + "horns" = list("None", FALSE), + "spines" = list("None", FALSE), + "frills" = list("None", FALSE), + ) + /datum/species/jelly/get_species_description() return placeholder_description @@ -62,7 +64,7 @@ name = "Alter Form" check_flags = AB_CHECK_CONSCIOUS button_icon_state = "alter_form" - button_icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi' + button_icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" /// Do you need to be a slime-person to use this ability? var/slime_restricted = TRUE @@ -108,10 +110,10 @@ alterer, alterer, list( - "Body Colours" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "slime_rainbow"), - "DNA" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "dna"), - "Hair" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "scissors"), - "Markings" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "rainbow_spraycan"), + "Body Colours" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "slime_rainbow"), + "DNA" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "dna"), + "Hair" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "scissors"), + "Markings" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "rainbow_spraycan"), ), tooltips = TRUE, ) @@ -136,10 +138,10 @@ alterer, alterer, list( - "Primary" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "slime_red"), - "Secondary" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "slime_green"), - "Tertiary" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "slime_blue"), - "All" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "slime_rainbow"), + "Primary" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "slime_red"), + "Secondary" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "slime_green"), + "Tertiary" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "slime_blue"), + "All" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "slime_rainbow"), ), tooltips = TRUE, ) @@ -238,9 +240,9 @@ alterer, alterer, list( - "Hair" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "scissors"), - "Facial Hair" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "straight_razor"), - "Hair Color" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "rainbow_spraycan") + "Hair" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "scissors"), + "Facial Hair" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "straight_razor"), + "Hair Color" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "rainbow_spraycan") ), tooltips = TRUE, ) @@ -387,7 +389,7 @@ if(robot_organs) replacement_organ.organ_flags |= ORGAN_ROBOTIC replacement_organ.build_from_dna(alterer.dna, chosen_key) - replacement_organ.Insert(alterer, special = TRUE, drop_if_replaced = FALSE) + replacement_organ.Insert(alterer, special = TRUE, movement_flags = DELETE_IF_REPLACED) else var/list/new_acc_list = list() new_acc_list[MUTANT_INDEX_NAME] = selected_sprite_accessory.name diff --git a/modular_nova/modules/customization/modules/mob/living/carbon/human/species/skrell.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/skrell.dm new file mode 100644 index 00000000000000..e3102a8d7c1109 --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/skrell.dm @@ -0,0 +1,162 @@ +/datum/species/skrell + name = "Skrell" + id = SPECIES_SKRELL + inherent_traits = list( + TRAIT_ADVANCEDTOOLUSER, + TRAIT_CAN_STRIP, + TRAIT_LITERATE, + TRAIT_MUTANT_COLORS, + ) + inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID + exotic_blood = /datum/reagent/copper + bodytemp_normal = (BODYTEMP_NORMAL + 70) + bodytemp_heat_damage_limit = FIRE_MINIMUM_TEMPERATURE_TO_SPREAD + bodytemp_cold_damage_limit = (T20C - 10) + species_language_holder = /datum/language_holder/skrell + mutant_bodyparts = list() + mutanttongue = /obj/item/organ/internal/tongue/skrell + payday_modifier = 1.0 + changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT + eyes_icon = 'modular_nova/modules/organs/icons/skrell_eyes.dmi' + mutantbrain = /obj/item/organ/internal/brain/skrell + mutanteyes = /obj/item/organ/internal/eyes/skrell + mutantlungs = /obj/item/organ/internal/lungs/skrell + mutantheart = /obj/item/organ/internal/heart/skrell + mutantliver = /obj/item/organ/internal/liver/skrell + mutanttongue = /obj/item/organ/internal/tongue/skrell + bodypart_overrides = list( + BODY_ZONE_HEAD = /obj/item/bodypart/head/mutant/skrell, + BODY_ZONE_CHEST = /obj/item/bodypart/chest/mutant/skrell, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/mutant/skrell, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/mutant/skrell, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/mutant/skrell, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/mutant/skrell, + ) + +/datum/species/skrell/get_default_mutant_bodyparts() + return list( + "skrell_hair" = list("Male", TRUE), + ) + +/datum/species/skrell/get_species_description() + return placeholder_description + +/datum/species/skrell/get_species_lore() + return list(placeholder_lore) + +/datum/species/skrell/randomize_features() + var/list/features = ..() + var/main_color + var/random = rand(1,6) + //Choose from a range of green-blue colors + switch(random) + if(1) + main_color = "#44FF77" + if(2) + main_color = "#22FF88" + if(3) + main_color = "#22FFBB" + if(4) + main_color = "#22FFFF" + if(5) + main_color = "#22BBFF" + if(6) + main_color = "#2266FF" + features["mcolor"] = main_color + features["mcolor2"] = main_color + features["mcolor3"] = main_color + return features + +/datum/species/skrell/prepare_human_for_preview(mob/living/carbon/human/skrell) + var/skrell_color = "#22BBFF" + skrell.dna.features["mcolor"] = skrell_color + skrell.dna.features["mcolor2"] = skrell_color + skrell.dna.features["mcolor3"] = skrell_color + skrell.dna.mutant_bodyparts["skrell_hair"] = list(MUTANT_INDEX_NAME = "Female", MUTANT_INDEX_COLOR_LIST = list(skrell_color, skrell_color, skrell_color)) + regenerate_organs(skrell, src, visual_only = TRUE) + skrell.update_body(TRUE) + + +/obj/item/organ/internal/tongue/skrell + name = "internal vocal sacs" + desc = "An Strange looking sac." + icon = 'modular_nova/modules/organs/icons/skrell_organ.dmi' + icon_state = "tongue" + taste_sensitivity = 5 + var/static/list/languages_possible_skrell = typecacheof(list( + /datum/language/common, + /datum/language/uncommon, + /datum/language/draconic, + /datum/language/codespeak, + /datum/language/monkey, + /datum/language/narsie, + /datum/language/machine, + /datum/language/slime, + /datum/language/beachbum, + /datum/language/aphasia, + /datum/language/piratespeak, + /datum/language/moffic, + /datum/language/sylvan, + /datum/language/shadowtongue, + /datum/language/terrum, + /datum/language/vox, + /datum/language/nekomimetic, + /datum/language/skrell, + )) + liked_foodtypes = TOXIC | FRUIT | VEGETABLES + disliked_foodtypes = RAW | CLOTH + toxic_foodtypes = DAIRY | MEAT + +/obj/item/organ/internal/tongue/skrell/get_possible_languages() + return languages_possible_skrell + +/obj/item/organ/internal/heart/skrell + name = "skrellian heart" + icon = 'modular_nova/modules/organs/icons/skrell_organ.dmi' + icon_state = "heart" + +/obj/item/organ/internal/brain/skrell + name = "spongy brain" + icon = 'modular_nova/modules/organs/icons/skrell_organ.dmi' + icon_state = "brain2" + +/obj/item/organ/internal/eyes/skrell + name = "amphibian eyes" + desc = "Large black orbs." + icon = 'modular_nova/modules/organs/icons/skrell_organ.dmi' + icon_state = "eyes" + flash_protect = FLASH_PROTECTION_SENSITIVE + +/obj/item/organ/internal/lungs/skrell + name = "skrell lungs" + icon = 'modular_nova/modules/organs/icons/skrell_organ.dmi' + icon_state = "lungs" + safe_plasma_max = 40 + safe_co2_max = 40 + + cold_message = "You can't stand the freezing cold with every breath you take!" + cold_level_1_threshold = 248 + cold_level_2_threshold = 220 + cold_level_3_threshold = 170 + cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_2 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead. + cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_2 + cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_3 + cold_damage_type = BRUTE + + + hot_message = "You can't stand the searing heat with every breath you take!" + heat_level_1_threshold = 318 + heat_level_2_threshold = 348 + heat_level_3_threshold = 1000 + heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_2 + heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_2 + heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_3 + heat_damage_type = BURN + +/obj/item/organ/internal/liver/skrell + name = "skrell liver" + icon_state = "liver" + icon = 'modular_nova/modules/organs/icons/skrell_organ.dmi' + alcohol_tolerance = 5 + toxTolerance = 10 //can shrug off up to 10u of toxins. + liver_resistance = 1.2 * LIVER_DEFAULT_TOX_RESISTANCE // +20% diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/tajaran.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/tajaran.dm similarity index 88% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/tajaran.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/tajaran.dm index abc27ee7f69697..7f9cfb7664b555 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/tajaran.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/tajaran.dm @@ -4,7 +4,6 @@ inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, - TRAIT_CAN_USE_FLIGHT_POTION, TRAIT_LITERATE, TRAIT_HATED_BY_DOGS, TRAIT_MUTANT_COLORS, @@ -12,12 +11,6 @@ mutanttongue = /obj/item/organ/internal/tongue/cat/tajaran inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID mutant_bodyparts = list() - default_mutant_bodyparts = list( - "tail" = ACC_RANDOM, - "snout" = ACC_RANDOM, - "ears" = ACC_RANDOM, - "legs" = "Normal Legs" - ) payday_modifier = 1.0 species_language_holder = /datum/language_holder/tajaran changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT @@ -31,13 +24,21 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/mutant, ) +/datum/species/tajaran/get_default_mutant_bodyparts() + return list( + "tail" = list("Cat (Big)", TRUE), + "snout" = list("Cat, normal", TRUE), + "ears" = list("Cat, normal", TRUE), + "legs" = list("Normal Legs", FALSE), + ) /obj/item/organ/internal/tongue/cat/tajaran liked_foodtypes = GRAIN | MEAT disliked_foodtypes = CLOTH -/datum/species/tajaran/randomize_features(mob/living/carbon/human/human_mob) +/datum/species/tajaran/randomize_features() + var/list/features = ..() var/main_color var/second_color var/random = rand(1,5) @@ -58,9 +59,10 @@ if(5) main_color = "#DDCC99" second_color = "#DDCCAA" - human_mob.dna.features["mcolor"] = main_color - human_mob.dna.features["mcolor2"] = second_color - human_mob.dna.features["mcolor3"] = second_color + features["mcolor"] = main_color + features["mcolor2"] = second_color + features["mcolor3"] = second_color + return features /datum/species/tajaran/get_random_body_markings(list/passed_features) var/name = pick("Tajaran", "Floof", "Floofer") diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/unathi.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/unathi.dm similarity index 76% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/unathi.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/unathi.dm index 13d460bc109f6d..ccbb0dd1416cfa 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/unathi.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/unathi.dm @@ -4,22 +4,12 @@ inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, - TRAIT_CAN_USE_FLIGHT_POTION, TRAIT_LITERATE, TRAIT_MUTANT_COLORS, ) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID mutant_bodyparts = list() mutanttongue = /obj/item/organ/internal/tongue/unathi - default_mutant_bodyparts = list( - "tail" = ACC_RANDOM, - "snout" = ACC_RANDOM, - "spines" = "None", - "frills" = "None", - "horns" = ACC_RANDOM, - "body_markings" = ACC_RANDOM, - "legs" = "Normal Legs" - ) payday_modifier = 1.0 changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT examine_limb_id = SPECIES_LIZARD @@ -34,6 +24,16 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/lizard, ) +/datum/species/unathi/get_default_mutant_bodyparts() + return list( + "tail" = list("Smooth", TRUE), + "snout" = list("Sharp + Light", TRUE), + "spines" = list("None", FALSE), + "frills" = list("None", FALSE), + "horns" = list("Curled", TRUE), + "body_markings" = list("Smooth Belly", TRUE), + "legs" = list("Normal Legs", FALSE), + ) /obj/item/organ/internal/tongue/unathi liked_foodtypes = GORE | MEAT | SEAFOOD | NUTS @@ -41,7 +41,8 @@ toxic_foodtypes = TOXIC -/datum/species/unathi/randomize_features(mob/living/carbon/human/human_mob) +/datum/species/unathi/randomize_features() + var/list/features = ..() var/main_color var/second_color var/random = rand(1,5) @@ -62,9 +63,10 @@ if(5) main_color = "#33BB11" second_color = "#339911" - human_mob.dna.features["mcolor"] = main_color - human_mob.dna.features["mcolor2"] = second_color - human_mob.dna.features["mcolor3"] = second_color + features["mcolor"] = main_color + features["mcolor2"] = second_color + features["mcolor3"] = second_color + return features /datum/species/unathi/get_species_description() return placeholder_description diff --git a/modular_nova/modules/customization/modules/mob/living/carbon/human/species/vox.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/vox.dm new file mode 100644 index 00000000000000..fbff30a3138e5d --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/vox.dm @@ -0,0 +1,114 @@ +/datum/species/vox + // Bird-like humanoids + name = "Vox" + id = SPECIES_VOX + eyes_icon = 'modular_nova/modules/organs/icons/vox_eyes.dmi' + can_augment = FALSE + inherent_traits = list( + TRAIT_ADVANCEDTOOLUSER, + TRAIT_CAN_STRIP, + TRAIT_LITERATE, + TRAIT_MUTANT_COLORS, + ) + inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID + mutanttongue = /obj/item/organ/internal/tongue/vox + mutantlungs = /obj/item/organ/internal/lungs/nitrogen/vox + mutantbrain = /obj/item/organ/internal/brain/vox + breathid = "n2" + mutant_bodyparts = list() + payday_modifier = 1.0 + outfit_important_for_life = /datum/outfit/vox + species_language_holder = /datum/language_holder/vox + changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT + // Vox are cold resistant, but also heat sensitive + bodytemp_heat_damage_limit = (BODYTEMP_HEAT_DAMAGE_LIMIT - 15) // being cold resistant, should make you heat sensitive actual effect ingame isn't much + bodytemp_cold_damage_limit = (BODYTEMP_COLD_DAMAGE_LIMIT - 30) + digitigrade_customization = DIGITIGRADE_OPTIONAL + bodypart_overrides = list( + BODY_ZONE_HEAD = /obj/item/bodypart/head/mutant/vox, + BODY_ZONE_CHEST = /obj/item/bodypart/chest/mutant/vox, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/mutant/vox, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/mutant/vox, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/mutant/vox, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/mutant/vox, + ) + custom_worn_icons = list( + LOADOUT_ITEM_HEAD = VOX_HEAD_ICON, + LOADOUT_ITEM_MASK = VOX_MASK_ICON, + LOADOUT_ITEM_SUIT = VOX_SUIT_ICON, + LOADOUT_ITEM_UNIFORM = VOX_UNIFORM_ICON, + LOADOUT_ITEM_HANDS = VOX_HANDS_ICON, + LOADOUT_ITEM_SHOES = VOX_FEET_ICON, + LOADOUT_ITEM_GLASSES = VOX_EYES_ICON, + LOADOUT_ITEM_BELT = VOX_BELT_ICON, + LOADOUT_ITEM_MISC = VOX_BACK_ICON, + LOADOUT_ITEM_EARS = VOX_EARS_ICON + ) + +/datum/species/vox/get_default_mutant_bodyparts() + return list( + "tail" = list("Vox Tail", FALSE), + "legs" = list(DIGITIGRADE_LEGS,FALSE), + "snout" = list("Vox Snout", FALSE), + "spines" = list("Vox Bands", TRUE), + ) + +/datum/species/vox/pre_equip_species_outfit(datum/job/job, mob/living/carbon/human/equipping, visuals_only) + . = ..() + if(job?.vox_outfit) + equipping.equipOutfit(job.vox_outfit, visuals_only) + else + give_important_for_life(equipping) + +/datum/species/vox/random_name(gender,unique,lastname) + if(unique) + return random_unique_vox_name() + + var/randname = vox_name() + + if(lastname) + randname += " [lastname]" + + return randname + +/datum/species/vox/randomize_features() + var/list/features = ..() + features["mcolor"] = pick("#77DD88", "#77DDAA", "#77CCDD", "#77DDCC") + features["mcolor2"] = pick("#EEDD88", "#EECC88") + features["mcolor3"] = pick("#222222", "#44EEFF", "#44FFBB", "#8844FF", "#332233") + return features + +/datum/species/vox/get_random_body_markings(list/passed_features) + var/name = pick(list("Vox", "Vox Hive", "Vox Nightling", "Vox Heart", "Vox Tiger")) + var/datum/body_marking_set/BMS = GLOB.body_marking_sets[name] + var/list/markings = list() + if(BMS) + markings = assemble_body_markings_from_set(BMS, passed_features, src) + return markings + +/datum/species/vox/get_custom_worn_icon(item_slot, obj/item/item) + // snowflakey but vox legs weird. + if(item_slot == LOADOUT_ITEM_SHOES) + var/obj/item/bodypart/leg = bodypart_overrides[BODY_ZONE_L_LEG] || bodypart_overrides[BODY_ZONE_R_LEG] + if(initial(leg?.limb_id) != "digitigrade") + // normal legs, use normal human shoes + return DEFAULT_SHOES_FILE + + return item.worn_icon_vox + +/datum/species/vox/set_custom_worn_icon(item_slot, obj/item/item, icon/icon) + item.worn_icon_vox = icon + +/datum/species/vox/get_species_description() + return placeholder_description + +/datum/species/vox/get_species_lore() + return list(placeholder_lore) + +/datum/species/vox/prepare_human_for_preview(mob/living/carbon/human/vox) + vox.dna.features["mcolor"] = "#77DD88" + vox.dna.features["mcolor2"] = "#EEDD88" + vox.dna.features["mcolor3"] = "#222222" + vox.dna.mutant_bodyparts["snout"] = list(MUTANT_INDEX_NAME = "Vox Snout", MUTANT_INDEX_COLOR_LIST = list("#EEDD88")) + regenerate_organs(vox, src, visual_only = TRUE) + vox.update_body(TRUE) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vulpkanin.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/vulpkanin.dm similarity index 88% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vulpkanin.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/vulpkanin.dm index e1d819db3e0362..48b2b3d327bf0a 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vulpkanin.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/vulpkanin.dm @@ -4,19 +4,12 @@ inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, - TRAIT_CAN_USE_FLIGHT_POTION, TRAIT_LITERATE, TRAIT_MUTANT_COLORS, ) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID mutant_bodyparts = list() mutanttongue = /obj/item/organ/internal/tongue/vulpkanin - default_mutant_bodyparts = list( - "tail" = ACC_RANDOM, - "snout" = ACC_RANDOM, - "ears" = ACC_RANDOM, - "legs" = "Normal Legs" - ) species_language_holder = /datum/language_holder/vulpkanin payday_modifier = 1.0 changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT @@ -30,6 +23,13 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/mutant, ) +/datum/species/vulpkanin/get_default_mutant_bodyparts() + return list( + "tail" = list("Fox", TRUE), + "snout" = list("Mammal, Long", TRUE), + "ears" = list("Fox", TRUE), + "legs" = list("Normal Legs", FALSE), + ) /obj/item/organ/internal/tongue/vulpkanin liked_foodtypes = RAW | MEAT @@ -37,7 +37,8 @@ toxic_foodtypes = TOXIC -/datum/species/vulpkanin/randomize_features(mob/living/carbon/human/human_mob) +/datum/species/vulpkanin/randomize_features() + var/list/features = ..() var/main_color var/second_color var/random = rand(1,5) @@ -58,9 +59,10 @@ if(5) main_color = "#999999" second_color = "#EEEEEE" - human_mob.dna.features["mcolor"] = main_color - human_mob.dna.features["mcolor2"] = second_color - human_mob.dna.features["mcolor3"] = second_color + features["mcolor"] = main_color + features["mcolor2"] = second_color + features["mcolor3"] = second_color + return features /datum/species/vulpkanin/get_random_body_markings(list/passed_features) var/name = pick("Fox", "Floof", "Floofer") diff --git a/modular_nova/modules/customization/modules/mob/living/carbon/human/species/xeno.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/xeno.dm new file mode 100644 index 00000000000000..8d783f08ccb030 --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/xeno.dm @@ -0,0 +1,140 @@ +/datum/species/xeno + // A cloning mistake, crossing human and xenomorph DNA + name = "Xenomorph Hybrid" + id = SPECIES_XENO + family_heirlooms = list(/obj/item/toy/plush/rouny, /obj/item/clothing/mask/facehugger/toy) + inherent_traits = list( + TRAIT_ADVANCEDTOOLUSER, + TRAIT_CAN_STRIP, + TRAIT_LITERATE, + TRAIT_MUTANT_COLORS, + ) + inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID + mutantbrain = /obj/item/organ/internal/brain/xeno_hybrid + mutanttongue = /obj/item/organ/internal/tongue/xeno_hybrid + mutantliver = /obj/item/organ/internal/liver/xeno_hybrid + mutantstomach = /obj/item/organ/internal/stomach/xeno_hybrid + mutant_organs = list( + /obj/item/organ/internal/alien/plasmavessel/roundstart, + /obj/item/organ/internal/alien/resinspinner/roundstart, + /obj/item/organ/internal/alien/hivenode, + ) + exotic_blood = /datum/reagent/toxin/acid + heatmod = 2.5 + mutant_bodyparts = list() + external_organs = list() + payday_modifier = 1.0 + changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT + bodypart_overrides = list( + BODY_ZONE_HEAD = /obj/item/bodypart/head/mutant/xenohybrid, + BODY_ZONE_CHEST = /obj/item/bodypart/chest/mutant/xenohybrid, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/mutant/xenohybrid, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/mutant/xenohybrid, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/digitigrade/xenohybrid, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/digitigrade/xenohybrid, + ) + + meat = /obj/item/food/meat/slab/xeno + skinned_type = /obj/item/stack/sheet/animalhide/xeno + +/datum/species/xeno/get_default_mutant_bodyparts() + return list( + "tail" = list("Xenomorph Tail", FALSE), + "xenodorsal" = list("Standard", TRUE), + "xenohead" = list("Standard", TRUE), + "legs" = list(DIGITIGRADE_LEGS,FALSE), + "taur" = list("None", FALSE), + ) + +/datum/species/xeno/get_species_description() + return placeholder_description + +/datum/species/xeno/get_species_lore() + return list(placeholder_lore) + +/datum/species/xeno/create_pref_unique_perks() + var/list/to_add = list() + + to_add += list(list( + SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, + SPECIES_PERK_ICON = "biohazard", + SPECIES_PERK_NAME = "Xenomorphic Biology", + SPECIES_PERK_DESC = "Xeno-hybrids inherit organs from their primal ascendants." + )) + + to_add += list(list( + SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, + SPECIES_PERK_ICON = "fire", + SPECIES_PERK_NAME = "High Temperature Weakness", + SPECIES_PERK_DESC = "A partial silicone structure and acid blood make the xeno-hybrid species extremely weak to heat." + )) + + return to_add + +/datum/species/xeno/prepare_human_for_preview(mob/living/carbon/human/xeno) + var/xeno_color = "#525288" + xeno.dna.features["mcolor"] = xeno_color + xeno.eye_color_left = "#30304F" + xeno.eye_color_right = "#30304F" + xeno.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Xenomorph Tail", MUTANT_INDEX_COLOR_LIST = list(xeno_color, xeno_color, xeno_color)) + xeno.dna.mutant_bodyparts["xenodorsal"] = list(MUTANT_INDEX_NAME = "Standard", MUTANT_INDEX_COLOR_LIST = list(xeno_color)) + xeno.dna.mutant_bodyparts["xenohead"] = list(MUTANT_INDEX_NAME = "Standard", MUTANT_INDEX_COLOR_LIST = list(xeno_color, xeno_color, xeno_color)) + regenerate_organs(xeno, src, visual_only = TRUE) + xeno.update_body(TRUE) + +///Xenomorph organs modified to suit roundstart styling +#define BUILD_DURATION 0.5 SECONDS + +//Plasma vessel +/obj/item/organ/internal/alien/plasmavessel/roundstart + stored_plasma = 55 + max_plasma = 55 + plasma_rate = 2 + heal_rate = 0 + actions_types = list( + /datum/action/cooldown/alien/make_structure/plant_weeds/roundstart, + /datum/action/cooldown/alien/transfer, + ) + +/datum/action/cooldown/alien/make_structure/plant_weeds + var/build_duration = 0 SECONDS //regular aliens can build instantly + +/datum/action/cooldown/alien/make_structure/plant_weeds/roundstart + build_duration = BUILD_DURATION //hybrids are a bit slower + +/datum/action/cooldown/alien/make_structure/plant_weeds/Activate(atom/target) + if(build_duration && !do_after(owner, build_duration)) + owner.balloon_alert(owner, "interrupted!") + return + return ..() + +//Resin spinner +/obj/item/organ/internal/alien/resinspinner/roundstart + actions_types = list(/datum/action/cooldown/alien/make_structure/resin/roundstart) + +/datum/action/cooldown/alien/make_structure/resin + var/build_duration = 0 SECONDS + +/datum/action/cooldown/alien/make_structure/resin/roundstart + build_duration = BUILD_DURATION + //Non-modularly checked in `code\modules\mob\living\carbon\alien\adult\alien_powers.dm` + +//Organ resprites +/obj/item/organ/internal/brain/xeno_hybrid + icon_state = "brain-x" //rebranding + +/obj/item/organ/internal/stomach/xeno_hybrid + icon_state = "stomach-x" + +/obj/item/organ/internal/liver/xeno_hybrid + icon_state = "liver-x" + +//Liver modification (xenohybrids can process plasma!) +/obj/item/organ/internal/liver/xeno_hybrid/handle_chemical(mob/living/carbon/owner, datum/reagent/toxin/chem, seconds_per_tick, times_fired) + . = ..() + if(. & COMSIG_MOB_STOP_REAGENT_CHECK) + return + if(chem.type == /datum/reagent/toxin/plasma) + chem.toxpwr = 0 + +#undef BUILD_DURATION diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/status_procs.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/status_procs.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/status_procs.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/status_procs.dm diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/worn_overlays.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/worn_overlays.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/worn_overlays.dm rename to modular_nova/modules/customization/modules/mob/living/carbon/human/worn_overlays.dm diff --git a/modular_nova/modules/customization/modules/mob/living/living.dm b/modular_nova/modules/customization/modules/mob/living/living.dm new file mode 100644 index 00000000000000..e7eedf00efb153 --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/living/living.dm @@ -0,0 +1,11 @@ +/mob/living/Topic(href, href_list) + . = ..() + if(href_list["temporary_flavor"]) + show_temp_ftext(usr) + +/mob/living/proc/show_temp_ftext(mob/user) + if(temporary_flavor_text) + var/datum/browser/popup = new(user, "[name]'s temporary flavor text", "[name]'s Temporary Flavor Text", 500, 200) + popup.set_content(text("<HTML><HEAD><TITLE>[][]", "[name]'s temporary flavor text", replacetext(temporary_flavor_text, "\n", "
    "))) + popup.open() + return diff --git a/modular_skyrat/modules/customization/modules/mob/living/living_defines.dm b/modular_nova/modules/customization/modules/mob/living/living_defines.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/mob/living/living_defines.dm rename to modular_nova/modules/customization/modules/mob/living/living_defines.dm diff --git a/modular_skyrat/modules/customization/modules/mob/living/living_verbs.dm b/modular_nova/modules/customization/modules/mob/living/living_verbs.dm similarity index 91% rename from modular_skyrat/modules/customization/modules/mob/living/living_verbs.dm rename to modular_nova/modules/customization/modules/mob/living/living_verbs.dm index 365e6ede890602..63a6b3548b0399 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/living_verbs.dm +++ b/modular_nova/modules/customization/modules/mob/living/living_verbs.dm @@ -1,7 +1,7 @@ GLOBAL_VAR_INIT(temporary_flavor_text_indicator, generate_temporary_flavor_text_indicator()) /proc/generate_temporary_flavor_text_indicator() - var/mutable_appearance/temporary_flavor_text_indicator = mutable_appearance('modular_skyrat/modules/indicators/icons/temporary_flavor_text_indicator.dmi', "flavor", FLY_LAYER) + var/mutable_appearance/temporary_flavor_text_indicator = mutable_appearance('modular_nova/modules/indicators/icons/temporary_flavor_text_indicator.dmi', "flavor", FLY_LAYER) temporary_flavor_text_indicator.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA | KEEP_APART return temporary_flavor_text_indicator diff --git a/modular_skyrat/modules/customization/modules/mob/living/silicon/examine.dm b/modular_nova/modules/customization/modules/mob/living/silicon/examine.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/mob/living/silicon/examine.dm rename to modular_nova/modules/customization/modules/mob/living/silicon/examine.dm diff --git a/modular_nova/modules/customization/modules/mob/living/silicon/topic.dm b/modular_nova/modules/customization/modules/mob/living/silicon/topic.dm new file mode 100644 index 00000000000000..4c49f9fd516794 --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/living/silicon/topic.dm @@ -0,0 +1,7 @@ +/mob/living/silicon/Topic(href, href_list) + . = ..() + if(href_list["lookup_info"] == "open_examine_panel") + examine_panel.holder = src + examine_panel.ui_interact(usr) //datum has a tgui component, here we open the window + if(href_list["temporary_flavor"]) // we need this here because tg code doesnt call parent in /mob/living/silicon/Topic() + show_temp_ftext(usr) diff --git a/modular_skyrat/modules/customization/modules/mob/living/simple_mob/examine.dm b/modular_nova/modules/customization/modules/mob/living/simple_mob/examine.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/mob/living/simple_mob/examine.dm rename to modular_nova/modules/customization/modules/mob/living/simple_mob/examine.dm diff --git a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents.dm b/modular_nova/modules/customization/modules/reagents/chemistry/reagents.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/reagents/chemistry/reagents.dm rename to modular_nova/modules/customization/modules/reagents/chemistry/reagents.dm diff --git a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/modular_nova/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm similarity index 88% rename from modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm rename to modular_nova/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 32391bd465e3c0..469109003ffcff 100644 --- a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/modular_nova/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -1,11 +1,11 @@ -// Modular Booze REAGENTS, see the following file for the mixes: modular_skyrat\modules\customization\modules\food_and_drinks\recipes\drinks_recipes.dm +// Modular Booze REAGENTS, see the following file for the mixes: modular_nova\modules\customization\modules\food_and_drinks\recipes\drinks_recipes.dm /datum/reagent/consumable/ethanol/whiskey process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC //let's not force the detective to change his alcohol brand /datum/reagent/consumable/ethanol/bloody_mary - chemical_flags_skyrat = REAGENT_BLOOD_REGENERATING + chemical_flags_nova = REAGENT_BLOOD_REGENERATING // ROBOT ALCOHOL PAST THIS POINT @@ -22,16 +22,16 @@ /datum/glass_style/drinking_glass/synthanol required_drink_type = /datum/reagent/consumable/ethanol/synthanol - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' // This should cover anything synthanol related. Will have to individually tag others unless we make an object path for skyrat drinks. + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' // This should cover anything synthanol related. Will have to individually tag others unless we make an object path for skyrat drinks. icon_state = "synthanolglass" name = "glass of synthanol" desc = "The equivalent of alcohol for synthetic crewmembers. They'd find it awful if they had tastebuds too." -/datum/reagent/consumable/ethanol/synthanol/on_mob_life(mob/living/carbon/C) - if(!(C.mob_biotypes & MOB_ROBOTIC)) - C.reagents.remove_reagent(type, 3.6) //gets removed from organics very fast +/datum/reagent/consumable/ethanol/synthanol/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + if(!(affected_mob.mob_biotypes & MOB_ROBOTIC)) + affected_mob.reagents.remove_reagent(type, 3.6 * REM * seconds_per_tick) //gets removed from organics very fast if(prob(25)) - C.vomit(VOMIT_CATEGORY_DEFAULT, lost_nutrition = 5) + affected_mob.vomit(VOMIT_CATEGORY_DEFAULT, lost_nutrition = 5) return ..() /datum/reagent/consumable/ethanol/synthanol/expose_mob(mob/living/carbon/C, method=TOUCH, volume) @@ -137,7 +137,7 @@ /datum/glass_style/drinking_glass/gunfire required_drink_type = /datum/reagent/consumable/ethanol/gunfire - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "gunfire" name = "glass of gunfire" desc = "It pops constantly as you look at it, giving off tiny sparks." @@ -157,14 +157,14 @@ /datum/glass_style/drinking_glass/hellfire required_drink_type = /datum/reagent/consumable/ethanol/hellfire - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "hellfire" name = "glass of hellfire" desc = "An amber colored drink that isn't quite as hot as it looks." -/datum/reagent/consumable/ethanol/hellfire/on_mob_life(mob/living/carbon/M) - M.adjust_bodytemperature(30 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL + 30) - return ..() +/datum/reagent/consumable/ethanol/hellfire/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.adjust_bodytemperature(30 * TEMPERATURE_DAMAGE_COEFFICIENT * REM * seconds_per_tick, 0, BODYTEMP_NORMAL + 30) /datum/reagent/consumable/ethanol/sins_delight name = "Sin's Delight" @@ -176,7 +176,7 @@ /datum/glass_style/drinking_glass/sins_delight required_drink_type = /datum/reagent/consumable/ethanol/sins_delight - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "sins_delight" name = "glass of sin's delight" desc = "You can smell the seven sins rolling off the top of the glass." @@ -191,7 +191,7 @@ /datum/glass_style/drinking_glass/strawberry_daiquiri required_drink_type = /datum/reagent/consumable/ethanol/strawberry_daiquiri - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "strawberry_daiquiri" name = "glass of strawberry daiquiri" desc = "Pink looking drink with flowers and a big straw to sip it. Looks sweet and refreshing, perfect for warm days." @@ -206,7 +206,7 @@ /datum/glass_style/drinking_glass/liz_fizz required_drink_type = /datum/reagent/consumable/ethanol/liz_fizz - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "liz_fizz" name = "glass of liz fizz" desc = "Looks like a citrus sherbet seperated in layers? Why would anyone want that is beyond you." @@ -221,7 +221,7 @@ /datum/glass_style/drinking_glass/miami_vice required_drink_type = /datum/reagent/consumable/ethanol/miami_vice - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "miami_vice" name = "glass of miami vice" desc = "Strawberries and coconut, like yin and yang." @@ -236,7 +236,7 @@ /datum/glass_style/drinking_glass/malibu_sunset required_drink_type = /datum/reagent/consumable/ethanol/malibu_sunset - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "malibu_sunset" name = "glass of malibu sunset" desc = "Tropical looking drinks, with ice cubes hovering on the surface and grenadine coloring the bottom." @@ -251,15 +251,16 @@ /datum/glass_style/drinking_glass/hotlime_miami required_drink_type = /datum/reagent/consumable/ethanol/hotlime_miami - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "hotlime_miami" name = "glass of hotlime miami" desc = "This looks very aesthetically pleasing." -/datum/reagent/consumable/ethanol/hotlime_miami/on_mob_life(mob/living/carbon/M, seconds_per_tick, times_fired) - M.set_drugginess(1.5 MINUTES * REM * seconds_per_tick) - M.adjustStaminaLoss(-2) - return ..() +/datum/reagent/consumable/ethanol/hotlime_miami/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.set_drugginess(1.5 MINUTES * REM * seconds_per_tick) + if(affected_mob.adjustStaminaLoss(-2 * REM * seconds_per_tick, updating_stamina = FALSE)) + return UPDATE_MOB_HEALTH /datum/reagent/consumable/ethanol/coggrog name = "Cog Grog" @@ -271,7 +272,7 @@ /datum/glass_style/drinking_glass/coggrog required_drink_type = /datum/reagent/consumable/ethanol/coggrog - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "coggrog" name = "glass of cog grog" desc = "Not even Ratvar's Four Generals could withstand this! Qevax Jryy!" @@ -286,7 +287,7 @@ /datum/glass_style/drinking_glass/badtouch required_drink_type = /datum/reagent/consumable/ethanol/badtouch - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "badtouch" name = "glass of bad touch" desc = "We're nothing but mammals after all." @@ -301,7 +302,7 @@ /datum/glass_style/drinking_glass/marsblast required_drink_type = /datum/reagent/consumable/ethanol/marsblast - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "marsblast" name = "glass of marsblast" desc = "One of these is enough to leave your face as red as the planet." @@ -316,14 +317,14 @@ /datum/glass_style/drinking_glass/mercuryblast required_drink_type = /datum/reagent/consumable/ethanol/mercuryblast - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "mercuryblast" name = "glass of mercuryblast" desc = "No thermometers were harmed in the creation of this drink" -/datum/reagent/consumable/ethanol/mercuryblast/on_mob_life(mob/living/carbon/M) - M.adjust_bodytemperature(-30 * TEMPERATURE_DAMAGE_COEFFICIENT, T0C) - return ..() +/datum/reagent/consumable/ethanol/mercuryblast/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.adjust_bodytemperature(-30 * TEMPERATURE_DAMAGE_COEFFICIENT * REM * seconds_per_tick, T0C) /datum/reagent/consumable/ethanol/piledriver name = "Piledriver" @@ -335,7 +336,7 @@ /datum/glass_style/drinking_glass/piledriver required_drink_type = /datum/reagent/consumable/ethanol/piledriver - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "piledriver" name = "glass of piledriver" desc = "Not the only thing to leave your throat sore." @@ -350,7 +351,7 @@ /datum/glass_style/drinking_glass/zenstar required_drink_type = /datum/reagent/consumable/ethanol/zenstar - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "zenstar" name = "glass of zen star" desc = "You'd think something so balanced would actually taste nice... you'd be dead wrong." @@ -367,7 +368,7 @@ /datum/glass_style/drinking_glass/coldscales required_drink_type = /datum/reagent/consumable/ethanol/coldscales - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "coldscales" name = "glass of coldscales" desc = "A soft green drink that looks inviting!" @@ -388,7 +389,7 @@ /datum/glass_style/drinking_glass/oil_drum required_drink_type = /datum/reagent/consumable/ethanol/oil_drum - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "oil_drum" name = "drum of oil" desc = "A gray can of booze and oil..." @@ -409,7 +410,7 @@ /datum/glass_style/drinking_glass/nord_king required_drink_type = /datum/reagent/consumable/ethanol/nord_king - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "nord_king" name = "keg of nord king" desc = "A dripping keg of red mead." @@ -430,7 +431,7 @@ /datum/glass_style/drinking_glass/velvet_kiss required_drink_type = /datum/reagent/consumable/ethanol/velvet_kiss - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "velvet_kiss" name = "glass of velvet kiss" desc = "Red and white drink for the upper classes or undead." @@ -451,7 +452,7 @@ /datum/glass_style/drinking_glass/abduction_fruit required_drink_type = /datum/reagent/consumable/ethanol/abduction_fruit - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "abduction_fruit" name = "glass of abduction fruit" desc = "Mixed fruits that were never meant to be mixed..." @@ -472,7 +473,7 @@ /datum/glass_style/drinking_glass/bug_zapper required_drink_type = /datum/reagent/consumable/ethanol/bug_zapper - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "bug_zapper" name = "glass of bug zapper" desc = "An odd mix of copper, lemon juice and power meant for non-human consumption." @@ -493,7 +494,7 @@ /datum/glass_style/drinking_glass/mush_crush required_drink_type = /datum/reagent/consumable/ethanol/mush_crush - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "mush_crush" name = "glass of mush crush" desc = "Popular among people that want to grow their own food rather than drink the soil." @@ -514,7 +515,7 @@ /datum/glass_style/drinking_glass/hollow_bone required_drink_type = /datum/reagent/consumable/ethanol/hollow_bone - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "hollow_bone" name = "skull of hollow bone" desc = "Mixing of milk and bone hurting juice for enjoyment for rather skinny people." @@ -535,15 +536,16 @@ /datum/glass_style/drinking_glass/jell_wyrm required_drink_type = /datum/reagent/consumable/ethanol/jell_wyrm - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "jell_wyrm" name = "glass of jell wyrm" desc = "A bubbly drink that is rather inviting to those that don't know who it's meant for." -/datum/reagent/consumable/ethanol/jell_wyrm/on_mob_life(mob/living/carbon/M) +/datum/reagent/consumable/ethanol/jell_wyrm/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() if(prob(20)) - M.adjustToxLoss(1, 0) - return ..() + if(affected_mob.adjustToxLoss(0.5 * REM * seconds_per_tick, updating_health = FALSE)) + return UPDATE_MOB_HEALTH #define JELLWYRM_DISGUST 25 @@ -565,7 +567,7 @@ /datum/glass_style/drinking_glass/laval_spit required_drink_type = /datum/reagent/consumable/ethanol/laval_spit - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "laval_spit" name = "glass of laval spit" desc = "Piping hot drink for those who can stomach the heat of lava." @@ -586,7 +588,7 @@ /datum/glass_style/drinking_glass/frisky_kitty required_drink_type = /datum/reagent/consumable/ethanol/frisky_kitty - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "frisky_kitty" name = "cup of frisky kitty" desc = "Warm milk and some catnip." @@ -615,12 +617,12 @@ boozepwr = 20 // The only booze in it is Bloody Mary taste_description = "blood filled to the brim with nutrients of all kinds" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED - chemical_flags_skyrat = REAGENT_BLOOD_REGENERATING + chemical_flags_nova = REAGENT_BLOOD_REGENERATING /datum/glass_style/drinking_glass/bloodshot required_drink_type = /datum/reagent/consumable/ethanol/bloodshot - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "bloodshot" name = "glass of bloodshot" desc = "The history of the 'Bloodshot' is based in a mix of flavor-neutral chems devised to help deliver nutrients to a Hemophage's tumorous organs. Due to the expense of the real thing and the clinical nature of it, this liquor has been designed as a 'improvised' alternative; though, still tasting like a hangover cure. It smells like iron, giving a clue to the key ingredient." @@ -643,12 +645,10 @@ #undef BLOODSHOT_DISGUST /datum/reagent/consumable/ethanol/bloodshot/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) + . = ..() if(drinker.blood_volume < drinker.blood_volume_normal) drinker.blood_volume = max(drinker.blood_volume, min(drinker.blood_volume + (3 * REM * seconds_per_tick), BLOOD_VOLUME_NORMAL)) //Bloodshot quickly restores blood loss. - return ..() - - /datum/reagent/consumable/ethanol/blizzard_brew name = "Blizzard Brew" description = "An ancient recipe. Served best chilled as much as dwarvenly possible." @@ -662,7 +662,7 @@ /datum/glass_style/drinking_glass/blizzard_brew required_drink_type = /datum/reagent/consumable/ethanol/blizzard_brew - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "blizzard_brew" name = "glass of Blizzard Brew" desc = "An ancient recipe. Served best chilled as much as dwarvenly possible." @@ -675,18 +675,18 @@ return ..() /datum/reagent/consumable/ethanol/blizzard_brew/overdose_start(mob/living/carbon/drinker) + . = ..() cube = new /obj/structure/ice_stasis(get_turf(drinker)) cube.color = COLOR_CYAN cube.set_anchored(TRUE) drinker.forceMove(cube) cryostylane_alert = drinker.throw_alert("cryostylane_alert", /atom/movable/screen/alert/status_effect/freon/cryostylane) cryostylane_alert.attached_effect = src //so the alert can reference us, if it needs to - ..() /datum/reagent/consumable/ethanol/blizzard_brew/on_mob_delete(mob/living/carbon/drinker, amount) QDEL_NULL(cube) drinker.clear_alert("cryostylane_alert") - ..() + return ..() /datum/reagent/consumable/ethanol/molten_mead name = "Molten Mead" @@ -699,7 +699,7 @@ /datum/glass_style/drinking_glass/molten_mead required_drink_type = /datum/reagent/consumable/ethanol/molten_mead - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "molten_mead" name = "glass of Molten Mead" desc = "Famously known to set beards aflame. Ingest at your own risk!" @@ -731,7 +731,7 @@ /datum/glass_style/drinking_glass/hippie_hooch required_drink_type = /datum/reagent/consumable/ethanol/hippie_hooch - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "hippie_hooch" name = "glass of Hippie Hooch" desc = "Peace and love! Under request of the HR department, this drink is sure to sober you up quickly." @@ -743,14 +743,14 @@ quality = DRINK_FANTASTIC return ..() -/datum/reagent/consumable/ethanol/hippie_hooch/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) +/datum/reagent/consumable/ethanol/hippie_hooch/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) for(var/effect in status_effects_to_clear) - drinker.remove_status_effect(effect) - drinker.reagents.remove_all_type(/datum/reagent/consumable/ethanol, 3 * REM * seconds_per_tick, FALSE, TRUE) - drinker.adjustToxLoss(-0.2 * REM * seconds_per_tick, FALSE, required_biotype = affected_biotype) - drinker.adjust_drunk_effect(-10 * REM * seconds_per_tick) - ..() - . = TRUE + affected_mob.remove_status_effect(effect) + affected_mob.reagents.remove_reagent(/datum/reagent/consumable/ethanol, 3 * REM * seconds_per_tick, include_subtypes = TRUE) + . = ..() + if(affected_mob.adjustToxLoss(-0.2 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype)) + . = UPDATE_MOB_HEALTH + affected_mob.adjust_drunk_effect(-10 * REM * seconds_per_tick) /datum/reagent/consumable/ethanol/research_rum name = "Research Rum" @@ -761,7 +761,7 @@ /datum/glass_style/drinking_glass/research_rum required_drink_type = /datum/reagent/consumable/ethanol/research_rum - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "research_rum" name = "glass of Research Rum" desc = "Cooked up by dwarven scientists, this glowing pink brew is sure to supercharge your thinking. How? Science!" @@ -774,10 +774,9 @@ return ..() /datum/reagent/consumable/ethanol/research_rum/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) + . = ..() if(prob(5)) drinker.say(pick_list_replacements(VISTA_FILE, "ballmer_good_msg"), forced = "ballmer") - ..() - . = TRUE /datum/reagent/consumable/ethanol/golden_grog name = "Golden Grog" @@ -788,7 +787,7 @@ /datum/glass_style/drinking_glass/golden_grog required_drink_type = /datum/reagent/consumable/ethanol/golden_grog - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "golden_grog" name = "glass of Golden Grog" desc = "A drink concocted by a dwarven Quartermaster who had too much time and money on his hands. Commonly ordered by influencers looking to flaunt their wealth." @@ -812,7 +811,7 @@ /datum/glass_style/drinking_glass/appletini required_drink_type = /datum/reagent/consumable/ethanol/appletini - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "appletini" name = "glass of appletini" desc = "An appley beverage in a martini glass" @@ -828,7 +827,7 @@ /datum/glass_style/drinking_glass/cityofsin required_drink_type = /datum/reagent/consumable/ethanol/quadruple_sec/cityofsin - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "cityofsin" name = "glass of city of sin" desc = "Looking at it makes you recall every mistake you've made." @@ -844,7 +843,7 @@ /datum/glass_style/drinking_glass/shakiri required_drink_type = /datum/reagent/consumable/ethanol/shakiri - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "shakiri" name = "glass of shakiri" desc = "A sweet, fragrant red drink made from fermented kiri fruits. It seems to gently sparkle when exposed to light." @@ -859,7 +858,7 @@ /datum/glass_style/drinking_glass/shakiri_spritz required_drink_type = /datum/reagent/consumable/ethanol/shakiri_spritz - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "shakiri_spritz" name = "glass of shakiri spritz" desc = "A carbonated cocktail made from shakiri and orange juice with soda water." @@ -874,7 +873,7 @@ /datum/glass_style/drinking_glass/crimson_hurricane required_drink_type = /datum/reagent/consumable/ethanol/crimson_hurricane - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "crimson_hurricane" name = "glass of crimson hurricane" desc = "A strong, citrusy cocktail of human origin, now with shakiri and kiri jelly for a delightfully sweet drink." @@ -889,7 +888,7 @@ /datum/glass_style/drinking_glass/shakiri_rogers required_drink_type = /datum/reagent/consumable/ethanol/shakiri_rogers - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "shakiri_rogers" name = "glass of shakiri rogers" desc = "A take on the classic Roy Rogers, with shakiri instead of grenadine. Sweet and refreshing." diff --git a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/drink_reagents.dm b/modular_nova/modules/customization/modules/reagents/chemistry/reagents/drink_reagents.dm similarity index 91% rename from modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/drink_reagents.dm rename to modular_nova/modules/customization/modules/reagents/chemistry/reagents/drink_reagents.dm index db1b51d93250ca..3788d4af1aa850 100644 --- a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/modular_nova/modules/customization/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -1,4 +1,4 @@ -// Modular DRINK REAGENTS, see the following file for the mixes: modular_skyrat\modules\customization\modules\food_and_drinks\recipes\drinks_recipes.dm +// Modular DRINK REAGENTS, see the following file for the mixes: modular_nova\modules\customization\modules\food_and_drinks\recipes\drinks_recipes.dm /datum/reagent/consumable/pinkmilk name = "Strawberry Milk" @@ -9,7 +9,7 @@ /datum/glass_style/drinking_glass/pinkmilk required_drink_type = /datum/reagent/consumable/pinkmilk - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "pinkmilk" name = "tall glass of strawberry milk" desc = "Delicious flavored strawberry syrup mixed with milk." @@ -29,7 +29,7 @@ /datum/glass_style/drinking_glass/pinktea required_drink_type = /datum/reagent/consumable/pinktea - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "pinktea" name = "mug of strawberry tea" desc = "Delicious traditional tea flavored with strawberries." @@ -48,7 +48,7 @@ /datum/glass_style/drinking_glass/catnip_tea required_drink_type = /datum/reagent/consumable/catnip_tea - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' icon_state = "catnip_tea" name = "glass of catnip tea" desc = "A purrfect drink for a cat." diff --git a/modular_nova/modules/customization/modules/reagents/chemistry/reagents/drinks.dm b/modular_nova/modules/customization/modules/reagents/chemistry/reagents/drinks.dm new file mode 100644 index 00000000000000..bdb7e4dfbbb91b --- /dev/null +++ b/modular_nova/modules/customization/modules/reagents/chemistry/reagents/drinks.dm @@ -0,0 +1,93 @@ +/obj/item/reagent_containers/cup/soda_cans/nova/lubricola + name = "LubriCola" + desc = "The perfect lubricant for your weary gears." + icon_state = "lubricola" + list_reagents = list(/datum/reagent/fuel/oil = 30) + custom_price = PAYCHECK_LOWER * 1.2 + +/obj/item/reagent_containers/cup/soda_cans/nova/welding_fizz + name = "Welding Fizz" + desc = "More energy than in an IED! Now carbonated. WARNING: Contains toxic and flammable fuels." + icon_state = "welding_fizz" + list_reagents = list(/datum/reagent/fuel = 25, /datum/reagent/carbondioxide = 5) + custom_price = PAYCHECK_LOWER * 1.2 + +/obj/item/reagent_containers/cup/soda_cans/nova/synthanolcan + name = "Silly Cone's Synthanol" + desc = "A recompiling can of synthanol." + icon_state = "synthanolcan" + list_reagents = list(/datum/reagent/consumable/ethanol/synthanol = 30) + custom_price = PAYCHECK_CREW + +//CODING SIN BYOND HERE + +/obj/item/trash/can/nova + icon = 'modular_nova/master_files/icons/obj/janitor.dmi' + icon_state = "lemonade" + +/* +* NOVA SECTOR SODA CANS +*/ + +/// How much fizziness is added to the can of soda by throwing it, in percentage points +#define SODA_FIZZINESS_THROWN 15 +/// How much fizziness is added to the can of soda by shaking it, in percentage points +#define SODA_FIZZINESS_SHAKE 5 + +/obj/item/reagent_containers/cup/soda_cans/nova + icon = 'modular_nova/master_files/icons/obj/drinks.dmi' + icon_state = null + +/obj/item/reagent_containers/cup/soda_cans/nova/attack(mob/M, mob/living/user) + if(istype(M, /mob/living/carbon) && !reagents.total_volume && user.combat_mode && user.zone_selected == BODY_ZONE_HEAD) + if(M == user) + user.visible_message(span_warning("[user] crushes the can of [src] on [user.p_their()] forehead!"), span_notice("You crush the can of [src] on your forehead.")) + else + user.visible_message(span_warning("[user] crushes the can of [src] on [M]'s forehead!"), span_notice("You crush the can of [src] on [M]'s forehead.")) + playsound(M,'sound/weapons/pierce.ogg', rand(10,50), TRUE) + var/obj/item/trash/can/nova/crushed_can = new /obj/item/trash/can/nova(M.loc) + crushed_can.icon_state = icon_state + qdel(src) + return TRUE + . = ..() + +/obj/item/reagent_containers/cup/soda_cans/nova/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit = FALSE) + . = ..() + + if(. != BULLET_ACT_HIT) + return + + if(hitting_projectile.damage > 0 && hitting_projectile.damage_type == BRUTE && !QDELETED(src)) + var/obj/item/trash/can/nova/crushed_can = new /obj/item/trash/can/nova(src.loc) + crushed_can.icon_state = icon_state + var/atom/throw_target = get_edge_target_turf(crushed_can, pick(GLOB.alldirs)) + crushed_can.throw_at(throw_target, rand(1,2), 7) + qdel(src) + return + +/** + * Burst the soda open on someone. Fun! Opens and empties the soda can, but does not crush it. + * + * Arguments: + * * target - Who's getting covered in soda + * * hide_message - Stops the generic fizzing message, so you can do your own + */ + +/obj/item/reagent_containers/cup/soda_cans/nova/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + . = ..() + if(. || spillable || !reagents.total_volume) // if it was caught, already opened, or has nothing in it + return + + fizziness += SODA_FIZZINESS_THROWN + if(!prob(fizziness)) + return + + burst_soda(hit_atom, hide_message = TRUE) + visible_message(span_danger("[src]'s impact with [hit_atom] causes it to rupture, spilling everywhere!")) + var/obj/item/trash/can/nova/crushed_can = new /obj/item/trash/can/nova(src.loc) + crushed_can.icon_state = icon_state + moveToNullspace() + QDEL_IN(src, 1 SECONDS) // give it a second so it can still be logged for the throw impact + +#undef SODA_FIZZINESS_THROWN +#undef SODA_FIZZINESS_SHAKE diff --git a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/food_reagents.dm b/modular_nova/modules/customization/modules/reagents/chemistry/reagents/food_reagents.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/food_reagents.dm rename to modular_nova/modules/customization/modules/reagents/chemistry/reagents/food_reagents.dm diff --git a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/other_reagents.dm b/modular_nova/modules/customization/modules/reagents/chemistry/reagents/other_reagents.dm similarity index 89% rename from modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/other_reagents.dm rename to modular_nova/modules/customization/modules/reagents/chemistry/reagents/other_reagents.dm index 1c03bbf2ca3c09..cf72d5a93b95c9 100644 --- a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/modular_nova/modules/customization/modules/reagents/chemistry/reagents/other_reagents.dm @@ -1,7 +1,7 @@ /datum/reagent/fuel process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC -/datum/reagent/oil +/datum/reagent/fuel/oil process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC /datum/reagent/stable_plasma @@ -16,17 +16,14 @@ /datum/reagent/hellwater process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC -/datum/reagent/syndicateadrenals - process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC - /datum/reagent/carbondioxide process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC /datum/reagent/iron - chemical_flags_skyrat = REAGENT_BLOOD_REGENERATING + chemical_flags_nova = REAGENT_BLOOD_REGENERATING /datum/reagent/blood - chemical_flags_skyrat = REAGENT_BLOOD_REGENERATING // For Hemophages to be able to drink it without any issue. + chemical_flags_nova = REAGENT_BLOOD_REGENERATING // For Hemophages to be able to drink it without any issue. /datum/reagent/blood/on_new(list/data) . = ..() @@ -45,7 +42,7 @@ C.nutrition = min(C.nutrition + 5, NUTRITION_LEVEL_FULL-1) ..() -/datum/reagent/oil/on_mob_life(mob/living/carbon/C) +/datum/reagent/fuel/oil/on_mob_life(mob/living/carbon/C) if(C.mob_biotypes & MOB_ROBOTIC && C.blood_volume < BLOOD_VOLUME_NORMAL) C.blood_volume += 0.5 ..() diff --git a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/modular_nova/modules/customization/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm rename to modular_nova/modules/customization/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm diff --git a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/toxin_reagents.dm b/modular_nova/modules/customization/modules/reagents/chemistry/reagents/toxin_reagents.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/toxin_reagents.dm rename to modular_nova/modules/customization/modules/reagents/chemistry/reagents/toxin_reagents.dm diff --git a/modular_skyrat/modules/customization/modules/reagents/chemistry/recipes/medicine.dm b/modular_nova/modules/customization/modules/reagents/chemistry/recipes/medicine.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/reagents/chemistry/recipes/medicine.dm rename to modular_nova/modules/customization/modules/reagents/chemistry/recipes/medicine.dm diff --git a/modular_skyrat/modules/customization/modules/surgery/bodyparts/_bodyparts.dm b/modular_nova/modules/customization/modules/surgery/bodyparts/_bodyparts.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/surgery/bodyparts/_bodyparts.dm rename to modular_nova/modules/customization/modules/surgery/bodyparts/_bodyparts.dm diff --git a/modular_skyrat/modules/customization/modules/surgery/bodyparts/parts.dm b/modular_nova/modules/customization/modules/surgery/bodyparts/parts.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/surgery/bodyparts/parts.dm rename to modular_nova/modules/customization/modules/surgery/bodyparts/parts.dm diff --git a/modular_skyrat/modules/customization/modules/surgery/bodyparts/robot_bodyparts.dm b/modular_nova/modules/customization/modules/surgery/bodyparts/robot_bodyparts.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/surgery/bodyparts/robot_bodyparts.dm rename to modular_nova/modules/customization/modules/surgery/bodyparts/robot_bodyparts.dm diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/cap.dm b/modular_nova/modules/customization/modules/surgery/organs/cap.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/surgery/organs/cap.dm rename to modular_nova/modules/customization/modules/surgery/organs/cap.dm diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/ears.dm b/modular_nova/modules/customization/modules/surgery/organs/ears.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/surgery/organs/ears.dm rename to modular_nova/modules/customization/modules/surgery/organs/ears.dm diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/eyes.dm b/modular_nova/modules/customization/modules/surgery/organs/eyes.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/surgery/organs/eyes.dm rename to modular_nova/modules/customization/modules/surgery/organs/eyes.dm diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/fluff.dm b/modular_nova/modules/customization/modules/surgery/organs/fluff.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/surgery/organs/fluff.dm rename to modular_nova/modules/customization/modules/surgery/organs/fluff.dm diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/frills.dm b/modular_nova/modules/customization/modules/surgery/organs/frills.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/surgery/organs/frills.dm rename to modular_nova/modules/customization/modules/surgery/organs/frills.dm diff --git a/modular_nova/modules/customization/modules/surgery/organs/genitals.dm b/modular_nova/modules/customization/modules/surgery/organs/genitals.dm new file mode 100644 index 00000000000000..17a22786e29844 --- /dev/null +++ b/modular_nova/modules/customization/modules/surgery/organs/genitals.dm @@ -0,0 +1,569 @@ +/obj/item/organ/external/genital + color = "#fcccb3" + organ_flags = ORGAN_ORGANIC | ORGAN_UNREMOVABLE + ///Size value of the genital, needs to be translated to proper lengths/diameters/cups + var/genital_size = 1 + ///Sprite name of the genital, it's what shows up on character creation + var/genital_name = "Human" + ///Type of the genital. For penises tapered/horse/human etc. for breasts quadruple/sixtuple etc... + var/genital_type = SPECIES_HUMAN + ///Used for determining what sprite is being used, derrives from size and type + var/sprite_suffix + ///Used for input from the user whether to show a genital through clothing or not, always or never etc. + var/visibility_preference = GENITAL_HIDDEN_BY_CLOTHES + ///Whether the organ is aroused, matters for sprites, use AROUSAL_CANT, AROUSAL_NONE, AROUSAL_PARTIAL or AROUSAL_FULL + var/aroused = AROUSAL_NONE + ///Whether the organ is supposed to use a skintoned variant of the sprite + var/uses_skintones = FALSE + ///Whether the organ is supposed to use the color of the holder's skin tone. + var/uses_skin_color = FALSE + /// Where the genital is actually located, for clothing checks. + var/genital_location = GROIN + +//This translates the float size into a sprite string +/obj/item/organ/external/genital/proc/get_sprite_size_string() + return 0 + +//This translates the float size into a sprite string +/obj/item/organ/external/genital/proc/update_sprite_suffix() + sprite_suffix = "[get_sprite_size_string()]" + + var/datum/bodypart_overlay/mutant/genital/our_overlay = bodypart_overlay + + our_overlay.sprite_suffix = sprite_suffix + + +/obj/item/organ/external/genital/proc/get_description_string(datum/sprite_accessory/genital/gas) + return "You see genitals" + +/obj/item/organ/external/genital/proc/update_genital_icon_state() + return + +/obj/item/organ/external/genital/proc/set_size(size) + genital_size = size + update_sprite_suffix() + +/obj/item/organ/external/genital/Initialize(mapload) + . = ..() + update_sprite_suffix() + if(CONFIG_GET(flag/disable_lewd_items)) + return INITIALIZE_HINT_QDEL + +//Removes ERP organs depending on config +/obj/item/organ/external/genital/Insert(mob/living/carbon/M, special, movement_flags) + if(CONFIG_GET(flag/disable_erp_preferences)) + return + . = ..() + +/obj/item/organ/external/genital/Remove(mob/living/carbon/M, special = FALSE, moving) + . = ..() + update_genital_icon_state() + +/obj/item/organ/external/genital/build_from_dna(datum/dna/DNA, associated_key) + . = ..() + var/datum/sprite_accessory/genital/accessory = GLOB.sprite_accessories[associated_key][DNA.mutant_bodyparts[associated_key][MUTANT_INDEX_NAME]] + genital_name = accessory.name + genital_type = accessory.icon_state + build_from_accessory(accessory, DNA) + update_sprite_suffix() + + var/datum/bodypart_overlay/mutant/genital/our_overlay = bodypart_overlay + + our_overlay.color_source = uses_skin_color ? ORGAN_COLOR_INHERIT : ORGAN_COLOR_OVERRIDE + +/// for specific build_from_dna behavior that also checks the genital accessory. +/obj/item/organ/external/genital/proc/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA) + return + +/obj/item/organ/external/genital/proc/is_exposed() + if(!owner) + return TRUE + + if(!ishuman(owner)) + return TRUE + + var/mob/living/carbon/human/human = owner + + switch(visibility_preference) + if(GENITAL_ALWAYS_SHOW) + return TRUE + if(GENITAL_HIDDEN_BY_CLOTHES) + if((human.w_uniform && human.w_uniform.body_parts_covered & genital_location) || (human.wear_suit && human.wear_suit.body_parts_covered & genital_location)) + return FALSE + else + return TRUE + else + return FALSE + + +/datum/bodypart_overlay/mutant/genital + layers = EXTERNAL_FRONT + color_source = ORGAN_COLOR_OVERRIDE + /// The suffix appended to the feature_key for the overlays. + var/sprite_suffix + +/datum/bodypart_overlay/mutant/genital/override_color(rgb_value) + return draw_color + +/datum/bodypart_overlay/mutant/genital/get_base_icon_state() + return sprite_suffix + + +/datum/bodypart_overlay/mutant/genital/get_color_layer_names(icon_state_to_lookup) + if(length(sprite_datum.color_layer_names)) + return sprite_datum.color_layer_names + + sprite_datum.color_layer_names = list() + if (!GLOB.cached_mutant_icon_files[sprite_datum.icon]) + GLOB.cached_mutant_icon_files[sprite_datum.icon] = icon_states(new /icon(sprite_datum.icon)) + + var/list/cached_mutant_icon_states = GLOB.cached_mutant_icon_files[sprite_datum.icon] + + for (var/layer in all_layers) + if(!(layer & layers)) + continue + + var/layertext = mutant_bodyparts_layertext(bitflag_to_layer(layer)) + if ("m_[feature_key]_[get_base_icon_state()]_[layertext]_primary" in cached_mutant_icon_states) + sprite_datum.color_layer_names["1"] = "primary" + if ("m_[feature_key]_[get_base_icon_state()]_[layertext]_secondary" in cached_mutant_icon_states) + sprite_datum.color_layer_names["2"] = "secondary" + if ("m_[feature_key]_[get_base_icon_state()]_[layertext]_tertiary" in cached_mutant_icon_states) + sprite_datum.color_layer_names["3"] = "tertiary" + + return sprite_datum.color_layer_names + + +/obj/item/organ/external/genital/penis + name = "penis" + desc = "A male reproductive organ." + icon_state = "penis" + icon = 'modular_nova/master_files/icons/obj/genitals/penis.dmi' + zone = BODY_ZONE_PRECISE_GROIN + slot = ORGAN_SLOT_PENIS + mutantpart_key = ORGAN_SLOT_PENIS + mutantpart_info = list(MUTANT_INDEX_NAME = "Human", MUTANT_INDEX_COLOR_LIST = list("#FFEEBB")) + drop_when_organ_spilling = FALSE + var/girth = 9 + var/sheath = SHEATH_NONE + bodypart_overlay = /datum/bodypart_overlay/mutant/genital/penis + +/datum/bodypart_overlay/mutant/genital/penis + feature_key = ORGAN_SLOT_PENIS + layers = EXTERNAL_FRONT | EXTERNAL_BEHIND + + +/obj/item/organ/external/genital/penis/get_description_string(datum/sprite_accessory/genital/gas) + var/returned_string = "" + var/pname = lowertext(genital_name) == "nondescript" ? "" : lowertext(genital_name) + " " + if(sheath != SHEATH_NONE && aroused != AROUSAL_FULL) //Hidden in sheath + switch(sheath) + if(SHEATH_NORMAL) + returned_string = "You see a sheath." + if(SHEATH_SLIT) + returned_string = "You see a slit." ///Typo fix. + if(aroused == AROUSAL_PARTIAL) + returned_string += " There's a [pname]penis poking out of it." + else + returned_string = "You see a [pname]penis. You estimate it's [genital_size] inches long, and [girth] inches in circumference." + switch(aroused) + if(AROUSAL_NONE) + returned_string += " It seems flaccid." + if(AROUSAL_PARTIAL) + returned_string += " It's partically erect." + if(AROUSAL_FULL) + returned_string += " It's fully erect." + return returned_string + +/obj/item/organ/external/genital/penis/update_genital_icon_state() + var/size_affix + var/measured_size = FLOOR(genital_size,1) + if(measured_size < 1) + measured_size = 1 + switch(measured_size) + if(1 to 8) + size_affix = "1" + if(9 to 15) + size_affix = "2" + if(16 to 24) + size_affix = "3" + else + size_affix = "4" + var/passed_string = "penis_[genital_type]_[size_affix]" + if(uses_skintones) + passed_string += "_s" + icon_state = passed_string + +/obj/item/organ/external/genital/penis/get_sprite_size_string() + if(aroused != AROUSAL_FULL && sheath != SHEATH_NONE) //Sheath time! + var/poking_out = 0 + if(aroused == AROUSAL_PARTIAL) + poking_out = 1 + return "[lowertext(sheath)]_[poking_out]" + + var/size_affix + var/measured_size = FLOOR(genital_size,1) + var/is_erect = 0 + if(aroused == AROUSAL_FULL) + is_erect = 1 + if(measured_size < 1) + measured_size = 1 + switch(measured_size) + if(1 to 8) + size_affix = "1" + if(9 to 15) + size_affix = "2" + if(16 to 24) + size_affix = "3" + else + size_affix = "4" + var/passed_string = "[genital_type]_[size_affix]_[is_erect]" + if(uses_skintones) + passed_string += "_s" + return passed_string + +/obj/item/organ/external/genital/penis/build_from_dna(datum/dna/DNA, associated_key) + girth = DNA.features["penis_girth"] + uses_skin_color = DNA.features["penis_uses_skincolor"] + set_size(DNA.features["penis_size"]) + + return ..() + +/obj/item/organ/external/genital/penis/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA) + var/datum/sprite_accessory/genital/penis/snake = accessory + if(snake.can_have_sheath) + sheath = DNA.features["penis_sheath"] + if(DNA.features["penis_uses_skintones"]) + uses_skintones = accessory.has_skintone_shading + +/datum/bodypart_overlay/mutant/genital/penis/get_global_feature_list() + return GLOB.sprite_accessories[ORGAN_SLOT_PENIS] + + +/obj/item/organ/external/genital/testicles + name = "testicles" + desc = "A male reproductive organ." + icon_state = "testicles" + icon = 'modular_nova/master_files/icons/obj/genitals/testicles.dmi' + mutantpart_key = ORGAN_SLOT_TESTICLES + mutantpart_info = list(MUTANT_INDEX_NAME = "Pair", MUTANT_INDEX_COLOR_LIST = list("#FFEEBB")) + zone = BODY_ZONE_PRECISE_GROIN + slot = ORGAN_SLOT_TESTICLES + aroused = AROUSAL_CANT + genital_location = GROIN + drop_when_organ_spilling = FALSE + bodypart_overlay = /datum/bodypart_overlay/mutant/genital/testicles + +/datum/bodypart_overlay/mutant/genital/testicles + feature_key = ORGAN_SLOT_TESTICLES + layers = EXTERNAL_ADJACENT | EXTERNAL_BEHIND + +/obj/item/organ/external/genital/testicles/update_genital_icon_state() + var/measured_size = clamp(genital_size, 1, 3) + var/passed_string = "testicles_[genital_type]_[measured_size]" + if(uses_skintones) + passed_string += "_s" + icon_state = passed_string + +/obj/item/organ/external/genital/testicles/get_description_string(datum/sprite_accessory/genital/gas) + if(genital_name == "Internal") //Checks if Testicles are of Internal Variety + visibility_preference = GENITAL_SKIP_VISIBILITY //Removes visibility if yes. + else + return "You see a pair of testicles, they look [lowertext(balls_size_to_description(genital_size))]." + +/obj/item/organ/external/genital/testicles/build_from_dna(datum/dna/DNA, associated_key) + uses_skin_color = DNA.features["testicles_uses_skincolor"] + set_size(DNA.features["balls_size"]) + + return ..() + +/obj/item/organ/external/genital/testicles/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA) + if(DNA.features["testicles_uses_skintones"]) + uses_skintones = accessory.has_skintone_shading + +/obj/item/organ/external/genital/testicles/get_sprite_size_string() + var/measured_size = FLOOR(genital_size,1) + measured_size = clamp(measured_size, 0, 3) + var/passed_string = "[genital_type]_[measured_size]" + if(uses_skintones) + passed_string += "_s" + return passed_string + +/datum/bodypart_overlay/mutant/genital/testicles/get_global_feature_list() + return GLOB.sprite_accessories[ORGAN_SLOT_TESTICLES] + + +/obj/item/organ/external/genital/testicles/proc/balls_size_to_description(number) + if(number < 0) + number = 0 + var/returned = GLOB.balls_size_translation["[number]"] + if(!returned) + returned = BREAST_SIZE_BEYOND_MEASUREMENT + return returned + +/obj/item/organ/external/genital/testicles/proc/balls_description_to_size(cup) + for(var/key in GLOB.balls_size_translation) + if(GLOB.balls_size_translation[key] == cup) + return text2num(key) + return 0 + + +/obj/item/organ/external/genital/vagina + name = "vagina" + icon = 'modular_nova/master_files/icons/obj/genitals/vagina.dmi' + icon_state = "vagina" + mutantpart_key = ORGAN_SLOT_VAGINA + mutantpart_info = list(MUTANT_INDEX_NAME = "Human", MUTANT_INDEX_COLOR_LIST = list("#FFEEBB")) + zone = BODY_ZONE_PRECISE_GROIN + slot = ORGAN_SLOT_VAGINA + genital_location = GROIN + drop_when_organ_spilling = FALSE + bodypart_overlay = /datum/bodypart_overlay/mutant/genital/vagina + +/datum/bodypart_overlay/mutant/genital/vagina + feature_key = ORGAN_SLOT_VAGINA + layers = EXTERNAL_FRONT + +/obj/item/organ/external/genital/vagina/get_description_string(datum/sprite_accessory/genital/gas) + var/returned_string = "You see a [lowertext(genital_name)] vagina." + if(lowertext(genital_name) == "cloaca") + returned_string = "You see a cloaca." //i deserve a pipebomb for this + switch(aroused) + if(AROUSAL_NONE) + returned_string += " It seems dry." + if(AROUSAL_PARTIAL) + returned_string += " It's glistening with arousal." + if(AROUSAL_FULL) + returned_string += " It's bright and dripping with arousal." + return returned_string + +/obj/item/organ/external/genital/vagina/get_sprite_size_string() + var/is_dripping = 0 + if(aroused == AROUSAL_FULL) + is_dripping = 1 + return "[genital_type]_[is_dripping]" + +/obj/item/organ/external/genital/vagina/build_from_dna(datum/dna/DNA, associated_key) + uses_skin_color = DNA.features["vagina_uses_skincolor"] + + return ..() // will update the sprite suffix + +/obj/item/organ/external/genital/vagina/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA) + if(DNA.features["vagina_uses_skintones"]) + uses_skintones = accessory.has_skintone_shading + +/datum/bodypart_overlay/mutant/genital/vagina/get_global_feature_list() + return GLOB.sprite_accessories[ORGAN_SLOT_VAGINA] + + +/obj/item/organ/external/genital/womb + name = "womb" + desc = "A female reproductive organ." + icon = 'modular_nova/master_files/icons/obj/genitals/vagina.dmi' + icon_state = "womb" + mutantpart_key = ORGAN_SLOT_WOMB + mutantpart_info = list(MUTANT_INDEX_NAME = "Normal", MUTANT_INDEX_COLOR_LIST = list("FFEEBB")) + zone = BODY_ZONE_PRECISE_GROIN + slot = ORGAN_SLOT_WOMB + visibility_preference = GENITAL_SKIP_VISIBILITY + aroused = AROUSAL_CANT + genital_location = GROIN + drop_when_organ_spilling = FALSE + bodypart_overlay = /datum/bodypart_overlay/mutant/genital/womb + +/datum/bodypart_overlay/mutant/genital/womb + feature_key = ORGAN_SLOT_WOMB + layers = NONE + +/datum/bodypart_overlay/mutant/genital/womb/get_global_feature_list() + return GLOB.sprite_accessories[ORGAN_SLOT_WOMB] + + +/obj/item/organ/external/genital/anus + name = "anus" + desc = "What do you want me to tell you?" + icon = 'modular_nova/master_files/icons/obj/genitals/anus.dmi' + icon_state = "anus" + mutantpart_key = ORGAN_SLOT_ANUS + mutantpart_info = list(MUTANT_INDEX_NAME = "Normal", MUTANT_INDEX_COLOR_LIST = list("FEB")) + zone = BODY_ZONE_PRECISE_GROIN + slot = ORGAN_SLOT_ANUS + genital_location = GROIN + drop_when_organ_spilling = FALSE + bodypart_overlay = /datum/bodypart_overlay/mutant/genital/anus + +/datum/bodypart_overlay/mutant/genital/anus + feature_key = ORGAN_SLOT_ANUS + layers = NONE + +/obj/item/organ/external/genital/anus/get_description_string(datum/sprite_accessory/genital/gas) + var/returned_string = "You see an [lowertext(genital_name)]." + if(aroused == AROUSAL_PARTIAL) + returned_string += " It looks tight." + if(aroused == AROUSAL_FULL) + returned_string += " It looks very tight." + return returned_string + +/datum/bodypart_overlay/mutant/genital/anus/get_global_feature_list() + return GLOB.sprite_accessories[ORGAN_SLOT_ANUS] + + +/obj/item/organ/external/genital/breasts + name = "breasts" + desc = "Female milk producing organs." + icon_state = "breasts" + icon = 'modular_nova/master_files/icons/obj/genitals/breasts.dmi' + genital_type = "pair" + mutantpart_key = ORGAN_SLOT_BREASTS + mutantpart_info = list(MUTANT_INDEX_NAME = "Pair", MUTANT_INDEX_COLOR_LIST = list("#FFEEBB")) + zone = BODY_ZONE_CHEST + slot = ORGAN_SLOT_BREASTS + genital_location = CHEST + drop_when_organ_spilling = FALSE + var/lactates = FALSE + bodypart_overlay = /datum/bodypart_overlay/mutant/genital/breasts + +/datum/bodypart_overlay/mutant/genital/breasts + feature_key = ORGAN_SLOT_BREASTS + layers = EXTERNAL_FRONT | EXTERNAL_BEHIND + +/obj/item/organ/external/genital/breasts/get_description_string(datum/sprite_accessory/genital/gas) + var/returned_string = "You see a [lowertext(genital_name)] of breasts." + var/size_description + var/translation = breasts_size_to_cup(genital_size) + switch(translation) + if(BREAST_SIZE_FLATCHESTED) + size_description = " They are small and flat, however." + if(BREAST_SIZE_BEYOND_MEASUREMENT) + size_description = " Their size is enormous, you estimate they're around [genital_size] inches in diameter." + else + size_description = " You estimate they are [translation]-cups." + returned_string += size_description + if(aroused == AROUSAL_FULL) + if(lactates) + returned_string += " The nipples seem hard, perky and are leaking milk." + else + returned_string += " Their nipples look hard and perky." + return returned_string + +/obj/item/organ/external/genital/breasts/update_genital_icon_state() + var/max_size = 5 + var/current_size = FLOOR(genital_size, 1) + if(current_size < 0) + current_size = 0 + else if (current_size > max_size) + current_size = max_size + var/passed_string = "breasts_pair_[current_size]" + if(uses_skintones) + passed_string += "_s" + icon_state = passed_string + +/obj/item/organ/external/genital/breasts/get_sprite_size_string() + var/max_size = 5 + if(genital_type == "pair") + max_size = 16 + var/current_size = FLOOR(genital_size, 1) + if(current_size < 0) + current_size = 0 + else if (current_size > max_size) + current_size = max_size + var/passed_string = "[genital_type]_[current_size]" + if(uses_skintones) + passed_string += "_s" + return passed_string + +/obj/item/organ/external/genital/breasts/build_from_dna(datum/dna/DNA, associated_key) + lactates = DNA.features["breasts_lactation"] + uses_skin_color = DNA.features["breasts_uses_skincolor"] + set_size(DNA.features["breasts_size"]) + + return ..() + +/obj/item/organ/external/genital/breasts/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA) + if(DNA.features["breasts_uses_skintones"]) + uses_skintones = accessory.has_skintone_shading + +/datum/bodypart_overlay/mutant/genital/breasts/get_global_feature_list() + return GLOB.sprite_accessories[ORGAN_SLOT_BREASTS] + +/obj/item/organ/external/genital/breasts/proc/breasts_size_to_cup(number) + if(number < 0) + number = 0 + var/returned = GLOB.breast_size_translation["[number]"] + if(!returned) + returned = BREAST_SIZE_BEYOND_MEASUREMENT + return returned + +/obj/item/organ/external/genital/breasts/proc/breasts_cup_to_size(cup) + for(var/key in GLOB.breast_size_translation) + if(GLOB.breast_size_translation[key] == cup) + return text2num(key) + return 0 + + +/mob/living/carbon/human/verb/toggle_genitals() + set category = "IC" + set name = "Expose/Hide genitals" + set desc = "Allows you to toggle which genitals should show through clothes or not." + + if(stat != CONSCIOUS) + to_chat(usr, span_warning("You can't toggle genitals visibility right now...")) + return + + var/list/genital_list = list() + for(var/obj/item/organ/external/genital/genital in organs) + if(!genital.visibility_preference == GENITAL_SKIP_VISIBILITY) + genital_list += genital + if(!genital_list.len) //There is nothing to expose + return + //Full list of exposable genitals created + var/obj/item/organ/external/genital/picked_organ + picked_organ = input(src, "Choose which genitalia to expose/hide", "Expose/Hide genitals") as null|anything in genital_list + if(picked_organ && (picked_organ in organs)) + var/list/gen_vis_trans = list("Never show" = GENITAL_NEVER_SHOW, + "Hidden by clothes" = GENITAL_HIDDEN_BY_CLOTHES, + "Always show" = GENITAL_ALWAYS_SHOW + ) + var/picked_visibility = input(src, "Choose visibility setting", "Expose/Hide genitals") as null|anything in gen_vis_trans + if(picked_visibility && picked_organ && (picked_organ in organs)) + picked_organ.visibility_preference = gen_vis_trans[picked_visibility] + update_body() + return + +//Removing ERP IC verb depending on config +/mob/living/carbon/human/Initialize(mapload) + . = ..() + if(CONFIG_GET(flag/disable_erp_preferences)) + verbs -= /mob/living/carbon/human/verb/toggle_genitals + verbs -= /mob/living/carbon/human/verb/toggle_arousal + +/mob/living/carbon/human/verb/toggle_arousal() + set category = "IC" + set name = "Toggle Arousal" + set desc = "Allows you to toggle how aroused your private parts are." + + if(stat != CONSCIOUS) + to_chat(usr, span_warning("You can't toggle arousal right now...")) + return + + var/list/genital_list = list() + for(var/obj/item/organ/external/genital/genital in organs) + if(!genital.aroused == AROUSAL_CANT) + genital_list += genital + if(!genital_list.len) //There is nothing to expose + return + //Full list of exposable genitals created + var/obj/item/organ/external/genital/picked_organ + picked_organ = input(src, "Choose which genitalia to change arousal", "Expose/Hide genitals") as null|anything in genital_list + if(picked_organ && (picked_organ in organs)) + var/list/gen_arous_trans = list( + "Not aroused" = AROUSAL_NONE, + "Partly aroused" = AROUSAL_PARTIAL, + "Very aroused" = AROUSAL_FULL, + ) + var/picked_arousal = input(src, "Choose arousal", "Toggle Arousal") as null|anything in gen_arous_trans + if(picked_arousal && picked_organ && (picked_organ in organs)) + picked_organ.aroused = gen_arous_trans[picked_arousal] + picked_organ.update_sprite_suffix() + update_body() + return diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/head_accessory.dm b/modular_nova/modules/customization/modules/surgery/organs/head_accessory.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/surgery/organs/head_accessory.dm rename to modular_nova/modules/customization/modules/surgery/organs/head_accessory.dm diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/horns.dm b/modular_nova/modules/customization/modules/surgery/organs/horns.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/surgery/organs/horns.dm rename to modular_nova/modules/customization/modules/surgery/organs/horns.dm diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/moth_antennae.dm b/modular_nova/modules/customization/modules/surgery/organs/moth_antennae.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/surgery/organs/moth_antennae.dm rename to modular_nova/modules/customization/modules/surgery/organs/moth_antennae.dm diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/moth_markings.dm b/modular_nova/modules/customization/modules/surgery/organs/moth_markings.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/surgery/organs/moth_markings.dm rename to modular_nova/modules/customization/modules/surgery/organs/moth_markings.dm diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/neck_accessory.dm b/modular_nova/modules/customization/modules/surgery/organs/neck_accessory.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/surgery/organs/neck_accessory.dm rename to modular_nova/modules/customization/modules/surgery/organs/neck_accessory.dm diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/nif.dm b/modular_nova/modules/customization/modules/surgery/organs/nif.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/surgery/organs/nif.dm rename to modular_nova/modules/customization/modules/surgery/organs/nif.dm diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/organ.dm b/modular_nova/modules/customization/modules/surgery/organs/organ.dm similarity index 84% rename from modular_skyrat/modules/customization/modules/surgery/organs/organ.dm rename to modular_nova/modules/customization/modules/surgery/organs/organ.dm index ac69342a0361c2..e1892fc554351c 100644 --- a/modular_skyrat/modules/customization/modules/surgery/organs/organ.dm +++ b/modular_nova/modules/customization/modules/surgery/organs/organ.dm @@ -14,21 +14,23 @@ if(mutantpart_key) color = mutantpart_info[MUTANT_INDEX_COLOR_LIST][1] -/obj/item/organ/Insert(mob/living/carbon/M, special = FALSE, drop_if_replaced = TRUE) +/obj/item/organ/Insert(mob/living/carbon/M, special = FALSE, movement_flags = DELETE_IF_REPLACED) var/mob/living/carbon/human/H = M if(mutantpart_key && istype(H)) H.dna.species.mutant_bodyparts[mutantpart_key] = mutantpart_info.Copy() - H.update_body() + if(!special) + H.update_body() . = ..() -/obj/item/organ/Remove(mob/living/carbon/M, special = FALSE) +/obj/item/organ/Remove(mob/living/carbon/M, special = FALSE, movement_flags) var/mob/living/carbon/human/H = M if(mutantpart_key && istype(H)) if(H.dna.species.mutant_bodyparts[mutantpart_key]) mutantpart_info = H.dna.species.mutant_bodyparts[mutantpart_key].Copy() //Update the info in case it was changed on the person color = mutantpart_info[MUTANT_INDEX_COLOR_LIST][1] H.dna.species.mutant_bodyparts -= mutantpart_key - H.update_body() + if(!special) + H.update_body() . = ..() /obj/item/organ/proc/build_from_dna(datum/dna/DNA, associated_key) diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/pod.dm b/modular_nova/modules/customization/modules/surgery/organs/pod.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/surgery/organs/pod.dm rename to modular_nova/modules/customization/modules/surgery/organs/pod.dm diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/skrell_hair.dm b/modular_nova/modules/customization/modules/surgery/organs/skrell_hair.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/surgery/organs/skrell_hair.dm rename to modular_nova/modules/customization/modules/surgery/organs/skrell_hair.dm diff --git a/modular_nova/modules/customization/modules/surgery/organs/spines.dm b/modular_nova/modules/customization/modules/surgery/organs/spines.dm new file mode 100644 index 00000000000000..1849bb0a5c5ed2 --- /dev/null +++ b/modular_nova/modules/customization/modules/surgery/organs/spines.dm @@ -0,0 +1,29 @@ +/// Allows us to offset the spines' layer by a very small amount, to make it appear above the tails. +/// Not the best solution, but the simplest I found in the amount of time I had. +#define SPINES_LAYER_OFFSET 0.01 + +/datum/bodypart_overlay/mutant/spines + color_source = ORGAN_COLOR_OVERRIDE + layers = ALL_EXTERNAL_OVERLAYS + +/datum/bodypart_overlay/mutant/spines/override_color(rgb_value) + return draw_color + +/datum/bodypart_overlay/mutant/spines/can_draw_on_bodypart(mob/living/carbon/human/human) + return !sprite_datum.is_hidden(human) + +/datum/bodypart_overlay/mutant/spines/get_feature_key_for_overlay() + return (wagging ? "wagging" : "") + feature_key + +/datum/bodypart_overlay/mutant/spines/get_base_icon_state() + return sprite_datum.icon_state + +/// We overwrite this just because we need to change the layer to be ever so slightly above the tails. +/// It sucks, but it's the best I could do without refactoring a lot more. +/datum/bodypart_overlay/mutant/spines/get_images(image_layer, obj/item/bodypart/limb) + var/list/mutable_appearance/returned_overlays = ..() + + for(var/mutable_appearance/overlay in returned_overlays) + overlay.layer += SPINES_LAYER_OFFSET + + return returned_overlays diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/synth_antenna.dm b/modular_nova/modules/customization/modules/surgery/organs/synth_antenna.dm similarity index 92% rename from modular_skyrat/modules/customization/modules/surgery/organs/synth_antenna.dm rename to modular_nova/modules/customization/modules/surgery/organs/synth_antenna.dm index be9aaa92ecc1bb..0011367241a405 100644 --- a/modular_skyrat/modules/customization/modules/surgery/organs/synth_antenna.dm +++ b/modular_nova/modules/customization/modules/surgery/organs/synth_antenna.dm @@ -1,6 +1,6 @@ /obj/item/organ/external/synth_antenna name = "synth antenna" - desc = "Wonder if we'll catch Syndicate frequencies with these..." + desc = "Wonder if we'll catch Symphionia frequencies with these..." icon_state = "random_fly_1" mutantpart_key = MUTANT_SYNTH_ANTENNA diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/synth_screen.dm b/modular_nova/modules/customization/modules/surgery/organs/synth_screen.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/surgery/organs/synth_screen.dm rename to modular_nova/modules/customization/modules/surgery/organs/synth_screen.dm diff --git a/modular_nova/modules/customization/modules/surgery/organs/tails.dm b/modular_nova/modules/customization/modules/surgery/organs/tails.dm new file mode 100644 index 00000000000000..3cafd6852a0d22 --- /dev/null +++ b/modular_nova/modules/customization/modules/surgery/organs/tails.dm @@ -0,0 +1,61 @@ +/obj/item/organ/external/tail + mutantpart_key = "tail" + mutantpart_info = list(MUTANT_INDEX_NAME = "Smooth", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF")) + var/can_wag = TRUE + var/wagging = FALSE + +/datum/bodypart_overlay/mutant/tail + color_source = ORGAN_COLOR_OVERRIDE + +/datum/bodypart_overlay/mutant/tail/override_color(rgb_value) + return draw_color + +/datum/bodypart_overlay/mutant/tail/get_feature_key_for_overlay() + return (wagging ? "wagging" : "") + feature_key + +/datum/bodypart_overlay/mutant/tail/get_base_icon_state() + return sprite_datum.icon_state + +/datum/bodypart_overlay/mutant/tail/can_draw_on_bodypart(mob/living/carbon/human/wearer) + var/list/used_in_turf = list("tail") + // Emote exception + if(wearer.owned_turf?.name in used_in_turf) + return FALSE + + if(!wearer.w_uniform && !wearer.wear_suit) + return ..() + + // Can hide if wearing uniform + if(feature_key in wearer.try_hide_mutant_parts) + return FALSE + + if(wearer.wear_suit) + // Exception for MODs + if(istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) + return TRUE + + // Hide accessory if flagged to do so + else if(wearer.wear_suit.flags_inv & HIDETAIL) + return FALSE + + return TRUE + + +/obj/item/organ/external/tail/Insert(mob/living/carbon/reciever, special, movement_flags) + if(sprite_accessory_flags & SPRITE_ACCESSORY_WAG_ABLE) + wag_flags |= WAG_ABLE + return ..() + +/obj/item/organ/external/tail/cat + mutantpart_info = list(MUTANT_INDEX_NAME = "Cat", MUTANT_INDEX_COLOR_LIST = list("#FFAA00")) + +/obj/item/organ/external/tail/monkey + mutantpart_info = list(MUTANT_INDEX_NAME = "Monkey", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF")) + +/obj/item/organ/external/tail/lizard + mutantpart_info = list(MUTANT_INDEX_NAME = "Smooth", MUTANT_INDEX_COLOR_LIST = list("#DDFFDD")) + +/obj/item/organ/external/tail/fluffy + name = "fluffy tail" + +/obj/item/organ/external/tail/fluffy/no_wag diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/taur_body.dm b/modular_nova/modules/customization/modules/surgery/organs/taur_body.dm similarity index 98% rename from modular_skyrat/modules/customization/modules/surgery/organs/taur_body.dm rename to modular_nova/modules/customization/modules/surgery/organs/taur_body.dm index 233b2290b7cbf8..81b842a1af60c3 100644 --- a/modular_skyrat/modules/customization/modules/surgery/organs/taur_body.dm +++ b/modular_nova/modules/customization/modules/surgery/organs/taur_body.dm @@ -31,7 +31,7 @@ return GLOB.sprite_accessories["taur"] -/obj/item/organ/external/taur_body/Insert(mob/living/carbon/reciever, special, drop_if_replaced) +/obj/item/organ/external/taur_body/Insert(mob/living/carbon/reciever, special, movement_flags) if(sprite_accessory_flags & SPRITE_ACCESSORY_HIDE_SHOES) external_bodytypes |= BODYTYPE_HIDE_SHOES diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/vox.dm b/modular_nova/modules/customization/modules/surgery/organs/vox.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/surgery/organs/vox.dm rename to modular_nova/modules/customization/modules/surgery/organs/vox.dm diff --git a/modular_nova/modules/customization/modules/surgery/organs/wings.dm b/modular_nova/modules/customization/modules/surgery/organs/wings.dm new file mode 100644 index 00000000000000..0aaf219dce45a1 --- /dev/null +++ b/modular_nova/modules/customization/modules/surgery/organs/wings.dm @@ -0,0 +1,109 @@ +/obj/item/organ/external/wings + name = "wings" + desc = "A pair of wings. Those may or may not allow you to fly... or at the very least flap." + zone = BODY_ZONE_CHEST + slot = ORGAN_SLOT_WINGS + mutantpart_key = "wings" + mutantpart_info = list(MUTANT_INDEX_NAME = "Bat", MUTANT_INDEX_COLOR_LIST = list("#335533")) + ///Whether the wings should grant flight on insertion. + var/unconditional_flight + ///What species get flights thanks to those wings. Important for moth wings + var/list/flight_for_species + ///Whether a wing can be opened by the *wing emote. The sprite use a "_open" suffix, before their layer + var/can_open + ///Whether an openable wing is currently opened + var/is_open + ///Whether the owner of wings has flight thanks to the wings + var/granted_flight + +/datum/bodypart_overlay/mutant/wings + color_source = ORGAN_COLOR_OVERRIDE + +/datum/bodypart_overlay/mutant/wings/get_global_feature_list() + return GLOB.sprite_accessories["wings"] + +//TODO: Well you know what this flight stuff is a bit complicated and hardcoded, this is enough for now + +/datum/bodypart_overlay/mutant/wings/override_color(rgb_value) + return draw_color + +/obj/item/organ/external/wings/moth + name = "moth wings" + desc = "A pair of fuzzy moth wings." + flight_for_species = list(SPECIES_MOTH) + +/obj/item/organ/external/wings/flight + unconditional_flight = TRUE + can_open = TRUE + +/obj/item/organ/external/wings/flight/angel + name = "angel wings" + desc = "A pair of magnificent, feathery wings. They look strong enough to lift you up in the air." + mutantpart_info = list(MUTANT_INDEX_NAME = "Angel", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF")) + +/obj/item/organ/external/wings/flight/dragon + name = "dragon wings" + desc = "A pair of intimidating, membranous wings. They look strong enough to lift you up in the air." + mutantpart_info = list(MUTANT_INDEX_NAME = "Dragon", MUTANT_INDEX_COLOR_LIST = list("#880000")) + +/obj/item/organ/external/wings/flight/megamoth + name = "megamoth wings" + desc = "A pair of horrifyingly large, fuzzy wings. They look strong enough to lift you up in the air." + mutantpart_info = list(MUTANT_INDEX_NAME = "Megamoth", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF")) + + +/datum/bodypart_overlay/mutant/wings/functional + color_source = ORGAN_COLOR_INHERIT + + +/datum/bodypart_overlay/mutant/wings/functional/original_color + color_source = ORGAN_COLOR_OVERRIDE + + +/datum/bodypart_overlay/mutant/wings/functional/original_color/override_color(rgb_value) + return COLOR_WHITE // We want to keep those wings as their original color, because it looks better. + + +/datum/bodypart_overlay/mutant/wings/functional/locked/get_global_feature_list() + if(wings_open) + return GLOB.sprite_accessories["wings_open"] + + return GLOB.sprite_accessories["wings_functional"] + + +// We need to overwrite this because all of these wings are locked. +/datum/bodypart_overlay/mutant/wings/functional/locked/get_random_appearance() + var/list/valid_restyles = list() + var/list/feature_list = get_global_feature_list() + for(var/accessory in feature_list) + var/datum/sprite_accessory/accessory_datum = feature_list[accessory] + valid_restyles += accessory_datum + + return pick(valid_restyles) + + +/datum/bodypart_overlay/mutant/wings/functional/locked/original_color + color_source = ORGAN_COLOR_OVERRIDE + + +/datum/bodypart_overlay/mutant/wings/functional/locked/original_color/override_color(rgb_value) + return COLOR_WHITE // We want to keep those wings as their original color, because it looks better. + + +/obj/item/organ/external/wings/functional + bodypart_overlay = /datum/bodypart_overlay/mutant/wings/functional/locked + +/obj/item/organ/external/wings/functional/angel + bodypart_overlay = /datum/bodypart_overlay/mutant/wings/functional/original_color + +/obj/item/organ/external/wings/functional/dragon + bodypart_overlay = /datum/bodypart_overlay/mutant/wings/functional + +/obj/item/organ/external/wings/functional/moth + bodypart_overlay = /datum/bodypart_overlay/mutant/wings/functional/locked/original_color + +/obj/item/organ/external/wings/functional/robotic + bodypart_overlay = /datum/bodypart_overlay/mutant/wings/functional + +/obj/item/organ/external/wings/functional/slime + bodypart_overlay = /datum/bodypart_overlay/mutant/wings/functional diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/xenodorsal.dm b/modular_nova/modules/customization/modules/surgery/organs/xenodorsal.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/surgery/organs/xenodorsal.dm rename to modular_nova/modules/customization/modules/surgery/organs/xenodorsal.dm diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/xenohead.dm b/modular_nova/modules/customization/modules/surgery/organs/xenohead.dm similarity index 100% rename from modular_skyrat/modules/customization/modules/surgery/organs/xenohead.dm rename to modular_nova/modules/customization/modules/surgery/organs/xenohead.dm diff --git a/modular_nova/modules/customization/readme.md b/modular_nova/modules/customization/readme.md new file mode 100644 index 00000000000000..c7de94bda2a8b2 --- /dev/null +++ b/modular_nova/modules/customization/readme.md @@ -0,0 +1,89 @@ +## Title: Customization + +MODULE ID: CUSTOMIZATION + +### Description: + +IF YOU WANT TO ADD AN EXTRA FEATURE TO SOMEONES DNA LOOK AT "code/__DEFINES/~nova_defines/DNA.dm" + +Re-writes how mutant bodyparts exist and how they're handled. Adds in a per limb body marking system. Adds in loadout, with lots of clothing ported over. Adds in all the missing species. Adds in flavor text and OOC prefs. Adds in special rendering cases for digitigrades, taurs, snouts, voxes etc. Adds in changeable PDA ringtone message. + +### TG Proc Changes: + + ./code/__HELPERS/global_lists.dm > /proc/make_datum_references_lists() + ./code/__HELPERS/mobs.dm > /proc/random_features() + ./code/controllers/subsystem/job.dm > /datum/controller/subsystem/job/proc/EquipRank() + ./code/datums/dna.dm > /datum/dna/proc/initialize_dna() , /mob/living/carbon/set_species() + ./code/modules/admin/create_mob.dm > /proc/randomize_human() + ./code/modules/client/preferences.dm > ALMOST THE ENTIRETY OF THE FILE + ./code/modules/client/preferences_savefile.dm > ONCE AGAIN, THE ENTIRE FILE + ./code/modules/mob/dead/new_player/preferences_setup.dm > /datum/preferences/proc/random_character(), /datum/preferences/proc/random_species(), /datum/preferences/proc/update_preview_icon() + ./code/modules/mob/living/carbon/carbon_update_icons.dm > /mob/living/carbon/update_inv_wear_mask(), /mob/living/carbon/update_inv_head(), /mob/living/carbon/proc/update_body_parts(), /mob/living/carbon/proc/generate_icon_render_key() + ./code/modules/mob/living/carbon/human/emote.dm > /datum/emote/living/carbon/human/wag/run_emote(), /datum/emote/living/carbon/human/wag/can_run_emote() + ./code/modules/mob/living/carbon/human/examine.dm > /mob/living/carbon/human/examine() + ./code/modules/mob/living/carbon/human/human_update_icons.dm > /mob/living/carbon/human/update_inv_w_uniform(), /mob/living/carbon/human/update_inv_glasses(), /mob/living/carbon/human/update_inv_shoes(), /mob/living/carbon/human/update_inv_wear_suit(), /obj/item/proc/build_worn_icon(), /mob/living/carbon/human/generate_icon_render_key() + ./code/modules/mob/living/carbon/human/species.dm > /datum/species/proc/on_species_gain(), /datum/species/proc/handle_body(), /datum/species/proc/handle_mutant_bodyparts(), /datum/species/proc/can_equip(), /datum/species/proc/can_wag_tail(), /datum/species/proc/stop_wagging_tail(), /datum/species/proc/start_wagging_tail(), /datum/species/proc/is_wagging_tail(), /datum/species/proc/handle_hair() + ./code/modules/mob/living/carbon/human/species_types/felinid.dm > the 5 procs related to wagging tail + ./code/modules/mob/living/carbon/human/species_types/lizardpeople.dm the 5 procs related to wagging tail and - /datum/species/lizard/on_species_gain() + ./code/modules/surgery/bodyparts/_bodyparts.dm > /obj/item/bodypart/proc/get_limb_icon() + ./code/modules/surgery/organs/ears.dm > /obj/item/organ/internal/ears/cat/Insert(), /obj/item/organ/internal/ears/cat/Remove() + ./code/modules/surgery/organs/tails.dm > /obj/item/organ/external/tail/cat/Insert(), /obj/item/organ/external/tail/cat/Remove(), /obj/item/organ/external/tail/lizard/Initialize(mapload), /obj/item/organ/external/tail/lizard/Insert(), /obj/item/organ/external/tail/lizard/Remove() + ./code/modules/surgery/bodyparts/dismemberment.dm > /mob/living/carbon/regenerate_limb() + ./code/modules/mob/living/carbon/human/status_procs.dm > /mob/living/carbon/human/become_husk() > APPENDED + ./code/modules/reagents/chemistry/holder.dm > /datum/reagents/metabolize() + ./code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm > /obj/item/reagent_containers/cup/glass/drinkingglass/on_reagent_change() + ./code/modules/mob/living/carbon/human/human_defense.dm > /mob/living/carbon/human/emp_act() + ./code/modules/mob/living/carbon/human.dm > /mob/living/carbon/human/revive() > APPENDED + ./code/modules/reagents/chemistry/reagents/food_reagents.dm > datum/reagent/consumable/on_mob_life() + ./code/datums/traits/negative.dm > /datum/quirk/prosthetic_limb + .\code\modules\client.dm > /client/proc/update_special_keybinds() + ./code/datums/traits/negative.dm > /datum/quirk/prosthetic_limb + + ./code/modules/mob/living/carbon/human/species.dm > /datum/species/regenerate_organs() > APPENDED + + ./code/controllers/subsystem/job.dm > /datum/controller/subsystem/job/proc/FindOccupationCandidates(), /datum/controller/subsystem/job/proc/GiveRandomJob(), /datum/controller/subsystem/job/proc/DivideOccupations(), /datum/controller/subsystem/job/proc/AssignRole() + ./code/modules/mob/dead/new_player/new_player.dm > /mob/dead/new_player/proc/IsJobUnavailable(), /proc/get_job_unavailable_error_message() + +### Defines: + +./code/modules/surgery/organs/tongue.dm > var/static/list/languages_possible_base - added 2 languages +./code/modules/mob/living/carbon/human/species_types/lizardpeople.dm > commented out "mutant_organs = list(/obj/item/organ/external/tail/lizard)" +./code/modules/mob/living/carbon/human/species_types/felinid.dm > commented out "mutantears = /obj/item/organ/internal/ears/cat" and "mutant_organs = list(/obj/item/organ/external/tail/cat)" +./code/modules/mob/living/carbon/human/species.dm > var/list/list/mutant_bodyparts (added typed list type) +./code/_globalvars/lists/flavor_misc.dm > Removed accessory list defines +.\code\datums\keybindings\living.dm > /datum/keybinding/living/look_up > from L to P + +./code/__DEFINES/~nova_defines/DNA.dm > A TON of defines +./code/__DEFINES/~nova_defines/obj_flags.dm > Organ flags +./code/__DEFINES/~nova_defines/say.dm > MAX_FLAVOR_LEN +./code/__DEFINES/~nova_defines/traits.dm > TRAIT_NO_HUSK + +.\modular_nova\modules\customization\modules\reagents\chemistry\reagents.dm > var/process_flags + +### Master file additions + +.\modular_nova\master_files\icons\mob\clothing\eyes_vox.dmi +.\modular_nova\master_files\icons\mob\clothing\feet_digi.dmi +.\modular_nova\master_files\icons\mob\clothing\head_muzzled.dmi +.\modular_nova\master_files\icons\mob\clothing\head_vox.dmi +.\modular_nova\master_files\icons\mob\clothing\mask_muzzled.dmi +.\modular_nova\master_files\icons\mob\clothing\mask_vox.dmi +.\modular_nova\master_files\icons\mob\clothing\suit_digi.dmi +.\modular_nova\master_files\icons\mob\clothing\suit_taur_hoof.dmi +.\modular_nova\master_files\icons\mob\clothing\suit_taur_paw.dmi +.\modular_nova\master_files\icons\mob\clothing\suit_taur_snake.dmi +.\modular_nova\master_files\icons\mob\clothing\uniform_digi.dmi +.\modular_nova\master_files\icons\mob\clothing\under\uniform_digi.dmi +.\modular_nova\master_files\icons\mob\clothing\under\uniform_taur_hoof.dmi +.\modular_nova\master_files\icons\mob\clothing\under\uniform_taur_paw.dmi +.\modular_nova\master_files\icons\mob\clothing\under\uniform_taur_snake.dmi + +./modular_nova/master_files/icons/obj/drinks.dmi + +### Included files that are not contained in this module: + +- N/A + +### Credits: + +Azarak diff --git a/modular_skyrat/modules/customization/strings/names/callsigns_nri.txt b/modular_nova/modules/customization/strings/names/callsigns_nri.txt similarity index 100% rename from modular_skyrat/modules/customization/strings/names/callsigns_nri.txt rename to modular_nova/modules/customization/strings/names/callsigns_nri.txt diff --git a/modular_skyrat/modules/customization/strings/names/first_female_taj.txt b/modular_nova/modules/customization/strings/names/first_female_taj.txt similarity index 100% rename from modular_skyrat/modules/customization/strings/names/first_female_taj.txt rename to modular_nova/modules/customization/strings/names/first_female_taj.txt diff --git a/modular_skyrat/modules/customization/strings/names/first_female_vulp.txt b/modular_nova/modules/customization/strings/names/first_female_vulp.txt similarity index 100% rename from modular_skyrat/modules/customization/strings/names/first_female_vulp.txt rename to modular_nova/modules/customization/strings/names/first_female_vulp.txt diff --git a/modular_skyrat/modules/customization/strings/names/first_male_taj.txt b/modular_nova/modules/customization/strings/names/first_male_taj.txt similarity index 100% rename from modular_skyrat/modules/customization/strings/names/first_male_taj.txt rename to modular_nova/modules/customization/strings/names/first_male_taj.txt diff --git a/modular_skyrat/modules/customization/strings/names/first_male_vulp.txt b/modular_nova/modules/customization/strings/names/first_male_vulp.txt similarity index 100% rename from modular_skyrat/modules/customization/strings/names/first_male_vulp.txt rename to modular_nova/modules/customization/strings/names/first_male_vulp.txt diff --git a/modular_skyrat/modules/customization/strings/names/last_taj.txt b/modular_nova/modules/customization/strings/names/last_taj.txt similarity index 100% rename from modular_skyrat/modules/customization/strings/names/last_taj.txt rename to modular_nova/modules/customization/strings/names/last_taj.txt diff --git a/modular_skyrat/modules/customization/strings/names/last_vulp.txt b/modular_nova/modules/customization/strings/names/last_vulp.txt similarity index 100% rename from modular_skyrat/modules/customization/strings/names/last_vulp.txt rename to modular_nova/modules/customization/strings/names/last_vulp.txt diff --git a/modular_skyrat/modules/customization/strings/names/phonetic_alphabet_numbers.txt b/modular_nova/modules/customization/strings/names/phonetic_alphabet_numbers.txt similarity index 100% rename from modular_skyrat/modules/customization/strings/names/phonetic_alphabet_numbers.txt rename to modular_nova/modules/customization/strings/names/phonetic_alphabet_numbers.txt diff --git a/modular_nova/modules/death_consequences_perk/death_consequences.dm b/modular_nova/modules/death_consequences_perk/death_consequences.dm new file mode 100644 index 00000000000000..a655d9a8895357 --- /dev/null +++ b/modular_nova/modules/death_consequences_perk/death_consequences.dm @@ -0,0 +1,92 @@ +/datum/quirk/death_consequences + name = DEATH_CONSEQUENCES_QUIRK_NAME + desc = "Every time you die, your body suffers long-term damage that can't easily be repaired." + medical_record_text = DEATH_CONSEQUENCES_QUIRK_DESC + icon = FA_ICON_DNA + value = 0 // due to its high customization, you can make it really inconsequential + +/datum/quirk_constant_data/death_consequences + associated_typepath = /datum/quirk/death_consequences + +/datum/quirk_constant_data/death_consequences/New() + customization_options = (subtypesof(/datum/preference/numeric/death_consequences) + subtypesof(/datum/preference/toggle/death_consequences)) + + return ..() + +/datum/quirk/death_consequences/add(client/client_source) + var/mob/living/carbon/human/human_holder = quirk_holder + human_holder.gain_trauma(/datum/brain_trauma/severe/death_consequences, TRAUMA_RESILIENCE_ABSOLUTE) + var/datum/brain_trauma/severe/death_consequences/added_trauma = human_holder.get_death_consequences_trauma() + if (!isnull(added_trauma)) + added_trauma.update_variables(client_source) + + to_chat(human_holder, span_danger("You suffer from [src]. By default, you will \ + degrade every time you die, and recover very slowly while alive. This may be expedited by resting, sleeping, being buckled \ + to something cozy, or using rezadone.\n\ + As your degradation rises, so too will negative effects, such as stamina damage or a worsened crit threshold.\n\ + You can alter your degradation on the fly via the Adjust death degradation verb, and change your settings via the Refresh death consequence variables verb.")) + +/datum/quirk/death_consequences/remove() + var/mob/living/carbon/human/human_holder = quirk_holder + human_holder.cure_trauma_type(/datum/brain_trauma/severe/death_consequences, TRAUMA_RESILIENCE_ABSOLUTE) + +/// Adjusts the mob's linked death consequences trauma (see get_death_consequences_trauma())'s degradation by increment. +/mob/verb/adjust_degradation(increment as num) + set name = "Adjust death degradation" + set category = "IC" + set instant = TRUE + + if (isnull(mind)) + to_chat(usr, span_warning("You have no mind!")) + return + + var/datum/brain_trauma/severe/death_consequences/linked_trauma = get_death_consequences_trauma() + var/mob/living/carbon/trauma_holder = linked_trauma?.owner + if (isnull(linked_trauma) || isnull(trauma_holder) || trauma_holder != mind.current) // sanity + to_chat(usr, span_warning("You don't have a body with death consequences!")) + return + + if (!isnum(increment)) + to_chat(usr, span_warning("You can artificially change the current level of your death degradation with this verb. \ + You can use this to cause degradation in ways the customization cannot. You need to enter a number to use this verb.")) + return + + if (linked_trauma.permakill_if_at_max_degradation && ((linked_trauma.current_degradation + increment) >= linked_trauma.max_degradation)) + if (tgui_alert(usr, "This will put you over/at your maximum degradation threshold and PERMANENTLY KILL YOU!!! Are you SURE you want to do this?", "WARNING", list("Yes", "No"), timeout = 7 SECONDS) != "Yes") + return + + linked_trauma.adjust_degradation(increment) + to_chat(usr, span_notice("Degradation successfully adjusted!")) + +/// Calls update_variables() on this mob's linked death consequences trauma. See that proc for further info. +/mob/verb/refresh_death_consequences() + set name = "Refresh death consequence variables" + set category = "IC" + set instant = TRUE + + if (isnull(mind)) + to_chat(usr, span_warning("You have no mind!")) + return + + var/datum/brain_trauma/severe/death_consequences/linked_trauma = get_death_consequences_trauma() + var/mob/living/carbon/trauma_holder = linked_trauma?.owner + if (isnull(linked_trauma) || isnull(trauma_holder) || trauma_holder != mind.current) // sanity + to_chat(usr, span_warning("You don't have a body with death consequences!")) + return + + linked_trauma.update_variables(client) + to_chat(usr, span_notice("Variables successfully updated!")) + +/// Searches mind.current for a death_consequences trauma. Allows this proc to be used on both ghosts and living beings to find their linked trauma. +/mob/proc/get_death_consequences_trauma() + RETURN_TYPE(/datum/brain_trauma/severe/death_consequences) + + if (isnull(mind)) + return + + if (iscarbon(mind.current)) + var/mob/living/carbon/carbon_body = mind.current + for (var/datum/brain_trauma/trauma as anything in carbon_body.get_traumas()) + if (istype(trauma, /datum/brain_trauma/severe/death_consequences)) + return trauma + // else, return null diff --git a/modular_nova/modules/death_consequences_perk/death_consequences_trauma.dm b/modular_nova/modules/death_consequences_perk/death_consequences_trauma.dm new file mode 100644 index 00000000000000..9397aa281d16c3 --- /dev/null +++ b/modular_nova/modules/death_consequences_perk/death_consequences_trauma.dm @@ -0,0 +1,554 @@ +#define DEGRADATION_LEVEL_NONE "dc_level_none" +#define DEGRADATION_LEVEL_LOW "dc_level_low" +#define DEGRADATION_LEVEL_MEDIUM "dc_level_medium" +#define DEGRADATION_LEVEL_HIGH "dc_level_high" +#define DEGRADATION_LEVEL_CRITICAL "dc_level_critical" + +#define DEGRADATION_LEVEL_NONE_THRESHOLD 0.2 +#define DEGRADATION_LEVEL_LOW_THRESHOLD 0.4 +#define DEGRADATION_LEVEL_MEDIUM_THRESHOLD 0.6 +#define DEGRADATION_LEVEL_HIGH_THRESHOLD 0.8 + +/// Only rezadone at or above this purity can reduce degradation. Needed because of borg synthesizers. +#define DEATH_CONSEQUENCES_REZADONE_MINIMUM_PURITY 100 + +/datum/brain_trauma/severe/death_consequences + name = DEATH_CONSEQUENCES_QUIRK_NAME + desc = DEATH_CONSEQUENCES_QUIRK_DESC + scan_desc = "death degradation" + gain_text = span_warning("For a brief moment, you completely disassociate.") + lose_text = span_notice("You feel like you have a firm grasp on your consciousness again!") + random_gain = FALSE + + /// The current degradation we are currently at. Generally speaking, things get worse the higher this is. Can never go below 0. + var/current_degradation = 0 + /// The absolute maximum degradation we can receive. Will cause permadeath if [permakill_if_at_max_degradation] is TRUE. + var/max_degradation = DEATH_CONSEQUENCES_DEFAULT_MAX_DEGRADATION // arbitrary + /// While alive, our victim will lose degradation by this amount per second. + var/base_degradation_reduction_per_second_while_alive = DEATH_CONSEQUENCES_DEFAULT_LIVING_DEGRADATION_RECOVERY + /// When our victim dies, they will degrade by this amount, but only if the last time they died was after [time_required_between_deaths_to_degrade] ago. + var/base_degradation_on_death = DEATH_CONSEQUENCES_DEFAULT_DEGRADATION_ON_DEATH + /// While dead, our victim will degrade by this amount every second. Reduced by stasis and formeldahyde. + var/base_degradation_per_second_while_dead = 0 + + /// The last time we caused immediate degradation on death. + var/last_time_degraded_on_death = -2 MINUTES // we do this to avoid a lil bug where it cant happen at roundstart + /// If the last time we degraded on death was less than this time ago, we won't immediately degrade when our victim dies. Used for preventing things like MDs constantly reviving someone and PKing them. + var/time_required_between_deaths_to_degrade = 2 MINUTES + + /// If our victim is dead, their passive degradation will be multiplied against this if they have formal in their system. + var/formaldehyde_death_degradation_mult = 0 + /// If our victim is alive and is metabolizing rezadone, we will reduce degradation by this amount every second. + var/rezadone_degradation_decrease = DEATH_CONSEQUENCES_DEFAULT_REZADONE_DEGRADATION_REDUCTION + + /// When eigenstasium is metabolized, degradation is reduced by this. + var/eigenstasium_degradation_decrease = DEATH_CONSEQUENCES_DEFAULT_EIGENSTASIUM_DEGRADATION_REDUCTION + + /// If our victim is dead, their passive degradation will be multiplied against this if they are in stasis. + var/stasis_passive_degradation_multiplier = 0 + + /// If true, when [current_degradation] reaches [max_degradation], we will DNR and ghost our victim. + var/permakill_if_at_max_degradation = FALSE + /// If true, when [current_degradation] reaches [max_degradation], we will DNR and KILL our victim. + var/force_death_if_permakilled = FALSE + + /// If we have killed our owner permanently. + var/final_death_delivered = FALSE + + // Higher = overall less intense threshold reduction but it still maxes out once it gets there + /// The degradation we will begin reducing the crit threshold at. + var/crit_threshold_min_degradation = 0 + /// The degradation we will stop reducing the crit threshold at. + var/crit_threshold_max_degradation = 200 + /// The amount our victims crit threshold will be reduced by at [crit_threshold_max_degradation] degradation. + var/max_crit_threshold_reduction = 100 + + /// The degradation we will begin applying stamina damage at. + var/stamina_damage_minimum_degradation = 100 + /// The degradation we will stop increasing the stamina damage at. + var/stamina_damage_max_degradation = 500 + /// The amount our victims crit threshold will be reduced by at [stamina_damage_max_degradation] degradation. + var/max_stamina_damage = 80 + + /// Used for updating our crit threshold reduction. We store the previous value, then subtract it from crit threshold, to get the value we had before we adjusted. + var/crit_threshold_currently_reduced_by = 0 + + /// The last world.time we sent a message to our owner reminding them of their current degradation. Used for cooldowns and such. + var/time_of_last_message_sent = -DEATH_CONSEQUENCES_TIME_BETWEEN_REMINDERS + /// The time between each reminder ([degradation_messages]). + var/time_between_reminders = DEATH_CONSEQUENCES_TIME_BETWEEN_REMINDERS + + /// The current level of degradation. Used mostly for reminder messages. + var/current_degradation_level = DEGRADATION_LEVEL_NONE + + // Will be iterated through sequentially, so the higher a path is, the quicker it'll be searched + // Make sure to put the larger bonuses and more specific types higher than the generic ones + /// A assoc list of (atom/movable typepath -> mult), where mult is used as a multiplier against passive living degradation reduction. + var/static/list/buckled_to_recovery_mult_table = list( + /obj/structure/bed/medical = 5, + /obj/structure/bed = 3, + + /obj/structure/chair/comfy = 2, + /obj/structure/chair/sofa = 2, + /obj/structure/chair = 1.5, + + /mob/living = 1.25, // being carried + ) + /// Only used if the thing we are buckled to is not in [buckled_to_recovery_mult_table]. + var/static/buckled_to_default_mult = 1.15 + + /// The random messages that will be sent to our victim if their degradation moves to a new threshold. + /// Contains nested assoc lists of (DEGRADATION_LEVEL_DEFINE -> list((message -> weight), ...)) where ... is a indefinite number of message -> weight pairs. + var/static/list/degradation_messages = list( + DEGRADATION_LEVEL_LOW = list( + span_warning("Your body aches a little.") = 10, + span_warning("You feel a little detached from yourself.") = 10, + span_warning("You feel a little tired.") = 10, + ), + DEGRADATION_LEVEL_MEDIUM = list( + span_danger("Your whole body aches...") = 10, + span_danger("You're starting to feel disassociated from yourself...") = 10, + span_danger("You're having a little difficulty thinking...") = 10, + ), + DEGRADATION_LEVEL_HIGH = list( + span_bolddanger("Your entire body throbs!") = 10, + span_bolddanger("You feel like you're losing your grip on yourself!") = 10, + span_bolddanger("Your consciousness feels as fragile as a sheet of glass!") = 10, + span_bolddanger("You feel exhausted in every single possible way!") = 10, + ), + DEGRADATION_LEVEL_CRITICAL = list( + span_revenwarning("Everything hurts... It hurts so bad...") = 10, + span_revenwarning("It's so hard to think... It's so hard... So hard...") = 10, + span_revenwarning("Your body feels alien, like you don't belong in it...") = 10, + span_revenwarning("... Who am I?") = 1, + span_revenwarning("... Where am I?") = 1, + span_revenwarning("... What am I?") = 1, + ) + ) + + /// Assoc list of (mob -> world.time + time_to_view_extra_data_after_scan). Used for determining if someone can use our health analyzer href + var/list/mob/time_til_scan_expires = list() + /// The amount of time someone has to view our extra info via health analyzer after scanning us. + var/time_to_view_extra_data_after_scan = 5 SECONDS + +/datum/brain_trauma/severe/death_consequences/Destroy() + for (var/mob/entry as anything in time_til_scan_expires) + UnregisterSignal(entry, COMSIG_QDELETING) + time_til_scan_expires -= entry + + return ..() + +/datum/brain_trauma/severe/death_consequences/on_gain() + . = ..() + + RegisterSignal(owner, COMSIG_LIVING_POST_FULLY_HEAL, PROC_REF(victim_ahealed)) + + update_variables() + START_PROCESSING(SSprocessing, src) + +/datum/brain_trauma/severe/death_consequences/on_lose(silent) + owner.crit_threshold -= crit_threshold_currently_reduced_by + STOP_PROCESSING(SSprocessing, src) + + if (final_death_delivered) + REMOVE_TRAIT(owner, TRAIT_DNR, TRAUMA_TRAIT) + + UnregisterSignal(owner, COMSIG_LIVING_POST_FULLY_HEAL) + + return ..() + +// DEGRADATION ALTERATION / PROCESS + +/datum/brain_trauma/severe/death_consequences/on_death() + . = ..() + + if (base_degradation_on_death != 0) + if (!last_time_degraded_on_death || world.time - time_required_between_deaths_to_degrade <= last_time_degraded_on_death) + return + + adjust_degradation(base_degradation_on_death) + if (!final_death_delivered) // already sends a very spooky message if they permadie + var/visible_message = span_revenwarning("[owner] writhes for a brief moment, before going limp. You get the sense that you might want to prevent them from dying again...") + var/self_message = span_revenwarning("As your mind reels from the shock of death, you feel the ethereal tether that binds you to your body strain...") + + var/mob/dead/observer/ghost = owner.get_ghost() + var/mob/self_message_target = (ghost ? ghost : owner) + owner.visible_message(visible_message, ignored_mobs = self_message_target) + to_chat(self_message_target, self_message) + + last_time_degraded_on_death = world.time + +/datum/brain_trauma/severe/death_consequences/process(seconds_per_tick) + if (owner.status_flags & GODMODE) + return + + var/is_dead = (owner.stat == DEAD) + var/degradation_increase = get_passive_degradation_increase(is_dead) * seconds_per_tick + var/degradation_reduction = get_passive_degradation_decrease(is_dead) * seconds_per_tick + + adjust_degradation(degradation_increase - degradation_reduction) + + // Ensure our victim's stamina is at or above our minimum stamina damage + if (!is_dead) + damage_stamina(seconds_per_tick) + + if ((world.time - time_between_reminders) > time_of_last_message_sent) + send_reminder() + +/// Returns the amount, every second, degradation should INCREASE by. +/datum/brain_trauma/severe/death_consequences/proc/get_passive_degradation_increase(is_dead) + var/increase = 0 + + if (is_dead) + increase += base_degradation_per_second_while_dead + + if (owner.has_reagent(/datum/reagent/toxin/formaldehyde, needs_metabolizing = FALSE)) + var/datum/reagent/reagent_instance = owner.reagents.has_reagent(/datum/reagent/toxin/formaldehyde) + if (reagent_process_flags_valid(owner, reagent_instance)) + increase *= formaldehyde_death_degradation_mult + else + if (base_degradation_reduction_per_second_while_alive < 0) // if you wanna die slowly while alive, go ahead bud + increase -= base_degradation_reduction_per_second_while_alive + + if (HAS_TRAIT(owner, TRAIT_STASIS)) + increase *= stasis_passive_degradation_multiplier + + return increase + +/// Returns the amount, every second, degradation should DECREASE by. +/datum/brain_trauma/severe/death_consequences/proc/get_passive_degradation_decrease(is_dead) + var/decrease = 0 + + if (!is_dead) + if (base_degradation_reduction_per_second_while_alive > 0) + decrease += base_degradation_reduction_per_second_while_alive + + var/datum/reagent/rezadone_instance = owner.reagents.has_reagent(/datum/reagent/medicine/rezadone, needs_metabolizing = TRUE) + if (rezadone_instance) + if ((rezadone_instance.purity >= DEATH_CONSEQUENCES_REZADONE_MINIMUM_PURITY) && reagent_process_flags_valid(owner, rezadone_instance)) + decrease += rezadone_degradation_decrease + + if (owner.has_reagent(/datum/reagent/eigenstate)) + decrease += eigenstasium_degradation_decrease + + return (decrease * get_passive_degradation_decrease_mult()) + +#define DEGRADATION_REDUCTION_SLEEPING_MULT 3 +#define DEGRADATION_REDUCTION_RESTING_MULT 1.5 + +/// Returns a multiplier that should be used whenever degradation is passively decreased. Is determined by resting, sleeping, and buckled status. +/datum/brain_trauma/severe/death_consequences/proc/get_passive_degradation_decrease_mult() + var/decrease_mult = 1 + + if (owner.IsSleeping()) + decrease_mult *= DEGRADATION_REDUCTION_SLEEPING_MULT + else if (owner.resting) + decrease_mult *= DEGRADATION_REDUCTION_RESTING_MULT + + var/buckled_to_mult + if (owner.buckled) + for (var/atom/atom_typepath as anything in buckled_to_recovery_mult_table) + if (istype(owner.buckled, atom_typepath)) + buckled_to_mult = buckled_to_recovery_mult_table[atom_typepath] + break + if (isnull(buckled_to_mult)) + buckled_to_mult = buckled_to_default_mult + else + buckled_to_mult = 1 + + decrease_mult *= buckled_to_mult + + return decrease_mult + +#undef DEGRADATION_REDUCTION_SLEEPING_MULT +#undef DEGRADATION_REDUCTION_RESTING_MULT + +/// Setter proc for [current_degradation] that clamps the incoming value and updates effects if the value changed. +/datum/brain_trauma/severe/death_consequences/proc/adjust_degradation(adjustment) + var/old_degradation = current_degradation + current_degradation = clamp((current_degradation + adjustment), 0, max_degradation) + if (current_degradation != old_degradation) + update_degradation_level() + update_effects() + +/** + * Updates [current_degradation_level] by comparing current degradation to max. + * + * Args: + * * send_reminder_if_changed = TRUE: If TRUE, will call [send_reminder()] if [current_degradation_level] is changed. + */ +/datum/brain_trauma/severe/death_consequences/proc/update_degradation_level(send_reminder_if_changed = TRUE) + var/old_level = current_degradation_level + switch (current_degradation / max_degradation) + if (0 to DEGRADATION_LEVEL_NONE_THRESHOLD) + current_degradation_level = DEGRADATION_LEVEL_NONE + if (DEGRADATION_LEVEL_NONE_THRESHOLD to DEGRADATION_LEVEL_LOW_THRESHOLD) + current_degradation_level = DEGRADATION_LEVEL_LOW + if (DEGRADATION_LEVEL_LOW_THRESHOLD to DEGRADATION_LEVEL_MEDIUM_THRESHOLD) + current_degradation_level = DEGRADATION_LEVEL_MEDIUM + if (DEGRADATION_LEVEL_MEDIUM_THRESHOLD to DEGRADATION_LEVEL_HIGH_THRESHOLD) + current_degradation_level = DEGRADATION_LEVEL_HIGH + else + current_degradation_level = DEGRADATION_LEVEL_CRITICAL + + if (send_reminder_if_changed && !final_death_delivered && (old_level != current_degradation_level)) + send_reminder(FALSE) + +// EFFECTS + +/// Refreshes all our effects and updates their values. Kills the victim if they opted in and their degradation equals their maximum. +/datum/brain_trauma/severe/death_consequences/proc/update_effects() + var/threshold_adjustment = get_crit_threshold_adjustment() + owner.crit_threshold = ((owner.crit_threshold - crit_threshold_currently_reduced_by) + threshold_adjustment) + crit_threshold_currently_reduced_by = threshold_adjustment + + if (permakill_if_at_max_degradation && (current_degradation >= max_degradation)) + and_so_your_story_ends() + +/// Calculates the amount that we should add to our victim's critical threshold. +/datum/brain_trauma/severe/death_consequences/proc/get_crit_threshold_adjustment() + SHOULD_BE_PURE(TRUE) + + var/clamped_degradation = clamp((current_degradation - crit_threshold_min_degradation), 0, crit_threshold_max_degradation) + var/percent_to_max = (clamped_degradation / crit_threshold_max_degradation) + + var/proposed_alteration = max_crit_threshold_reduction * percent_to_max + var/proposed_threshold = ((owner.crit_threshold - crit_threshold_currently_reduced_by) + proposed_alteration) + var/overflow = max((proposed_threshold - DEATH_CONSEQUENCES_MINIMUM_VICTIM_CRIT_THRESHOLD), 0) + var/final_alteration = (proposed_alteration - overflow) + + return final_alteration + +/// Ensures our victim's stamina is at or above the minimum stamina they're supposed to have. +/datum/brain_trauma/severe/death_consequences/proc/damage_stamina(seconds_per_tick) + if (!stamina_damage_max_degradation) + return + if (victim_properly_resting()) + return + + var/clamped_degradation = clamp((current_degradation - stamina_damage_minimum_degradation), 0, stamina_damage_max_degradation) + var/percent_to_max = min((clamped_degradation / stamina_damage_max_degradation), 1) + var/minimum_stamina_damage = max_stamina_damage * percent_to_max + + // The constantly decreasing degradation will constantly lower the minimum stamina damage, and thus, if we DONT check a range of staminaloss, + // we will always consider it "above" our minimum, and thus never delay stamina regen. + var/owner_staminaloss = owner.getStaminaLoss() + if (minimum_stamina_damage <= 0) + return + if (owner_staminaloss > (minimum_stamina_damage + 1)) + return + else if ((owner_staminaloss >= (minimum_stamina_damage - 1)) && (owner_staminaloss <= (minimum_stamina_damage + 1))) + owner.stam_regen_start_time = world.time + STAMINA_REGEN_BLOCK_TIME + return + + var/final_adjustment = (minimum_stamina_damage - owner_staminaloss) + owner.adjustStaminaLoss(final_adjustment) // we adjust instead of set for things like stamina regen timer + +/** + * Sends a flavorful to_chat to the target, picking from degradation_messages[current_degradation_level]. Can fail to send one if no message is found. + * + * Args: + * * update_cooldown = TRUE: If true, updates [time_of_last_message_sent] to be world.time. + */ +/datum/brain_trauma/severe/death_consequences/proc/send_reminder(update_cooldown = TRUE) + var/list/message_list = degradation_messages[current_degradation_level] // can return null + if (!length(message_list)) // sanity + return + var/message = pick_weight(message_list) + + if (!message) + return + + to_chat(owner, message) + + if (update_cooldown) + time_of_last_message_sent = world.time + +/// The proc we call when we permanently kill our victim due to being at maximum degradation. DNRs them, ghosts/kills them, and prints a series of highly dramatic messages, +/// befitting for a death such as this. +/datum/brain_trauma/severe/death_consequences/proc/and_so_your_story_ends() + ADD_TRAIT(owner, TRAIT_DNR, TRAUMA_TRAIT) // you're gone bro + final_death_delivered = TRUE + + // this is a sufficiently dramatic event for some dramatic to_chats + var/visible_message + var/self_message + var/log_message + + if (owner.stat == DEAD) + visible_message = span_revenwarning("The air around [owner] seems to ripple for a moment.") + self_message = span_revendanger("The metaphorical \"tether\" binding you to your body finally gives way. You try holding on, but you soon find yourself \ + falling into a deep, dark abyss...") + log_message = "has been permanently ghosted by their resonance instability quirk." + else + if (force_death_if_permakilled) // kill them - a violent and painful end + visible_message = span_revenwarning("[owner] suddenly lets out a harrowing gasp and falls to one knee, clutching their head! The remainder of their \ + body goes limp soon after, failing to stand back up.") + owner.death(gibbed = FALSE) + log_message = "has been permanently killed by their resonance instability quirk." + else // ghostize them - they simply stop thinking, forever + visible_message = span_revenwarning("[owner] jerkily arches their head upwards, untensing and going slackjawed with dilated pupils. They \ + cease all action and simply stand there, swaying.") + owner.ghostize(can_reenter_corpse = FALSE) + log_message = "has been permanently ghosted by their resonance instability quirk." + + self_message = span_revendanger("Your mind suddenly clouds, and you lose control of all thought and function. You try to squeeze your eyes shut, but you forget \ + where they are only a split second later. You drift away from yourself, further and further, until it's impossible to return...") + + var/mob/dead/observer/owner_ghost = owner.get_ghost() + var/mob/self_message_target = (owner_ghost ? owner_ghost : owner) // if youre ghosted, you still get the message + + visible_message += span_revenwarning(" You sense something terrible has happened.") // append crucial info and context clues + self_message += span_danger(" You have been killed by your death degradation, which prevents you from returning to your body or even being revived. \ + You may roleplay this however you wish - this death may be temporary, permanent - you may or may not appear in soulcatchers - it's all up to you.") + + owner.investigate_log(log_message) + owner.visible_message(visible_message, ignored_mobs = self_message_target) // finally, send it + owner.balloon_alert_to_viewers("something terrible has happened...") + to_chat(self_message_target, self_message) + +/// Returns a short-ish string containing an href to [get_specific_data]. +/datum/brain_trauma/severe/death_consequences/proc/get_health_analyzer_link_text(mob/user) + var/message = span_bolddanger("\nSubject suffers from death degradation disorder.") + if (final_death_delivered) + message += span_purple("\nNeural patterns are equivalent to the consciousness zero-point. Subject has likely succumbed.") + return message + + message += span_danger("\nCurrent degradation/max: [span_blue("[current_degradation]")]/[max_degradation].") + message += span_notice("\nView degradation specifics?") + if (permakill_if_at_max_degradation) + message += span_revenwarning("\n\nSUBJECT WILL BE PERMANENTLY KILLED IF DEGRADATION REACHES MAXIMUM!") + + if (user) + if (isnull(time_til_scan_expires[user])) + RegisterSignal(user, COMSIG_QDELETING, PROC_REF(scanning_user_qdeleting)) + time_til_scan_expires[user] = (world.time + time_to_view_extra_data_after_scan) + + return message + +/datum/brain_trauma/severe/death_consequences/proc/scanning_user_qdeleting(datum/signal_source) + SIGNAL_HANDLER + + time_til_scan_expires -= signal_source + UnregisterSignal(signal_source, COMSIG_QDELETING) + +/datum/brain_trauma/severe/death_consequences/Topic(href, list/href_list) + . = ..() + + if (href_list[DEATH_CONSEQUENCES_SHOW_HEALTH_ANALYZER_DATA]) + if (world.time <= time_til_scan_expires[usr]) + to_chat(usr, examine_block(get_specific_data()), trailing_newline = FALSE, type = MESSAGE_TYPE_INFO) + else + to_chat(usr, span_warning("Your scan has expired! Try scanning again!")) + +/// Returns a large string intended to show specifics of how this degradation work. +/datum/brain_trauma/severe/death_consequences/proc/get_specific_data() + var/message = span_bolddanger("Subject suffers from death degradation disorder.") + if (final_death_delivered) + message += span_purple("\nNeural patterns are equivalent to the consciousness zero-point. Subject has likely succumbed.") + return message + + var/owner_organic = (owner.dna.species.reagent_flags & PROCESS_ORGANIC) + message += span_danger("\nCurrent degradation/max: [span_blue("[current_degradation]")]/[max_degradation].") + if (base_degradation_reduction_per_second_while_alive) + message += span_danger("\nWhile alive, subject will recover from degradation at a rate of [span_blue("[base_degradation_reduction_per_second_while_alive] per second")].") + if (base_degradation_per_second_while_dead) + message += span_danger("\nWhile dead, subject will suffer degradation at a rate of [span_bolddanger("[base_degradation_per_second_while_dead] per second")].") + if (owner_organic && formaldehyde_death_degradation_mult != 1) + message += span_danger(" In such an event, formaldehyde will alter the degradation by [span_blue("[formaldehyde_death_degradation_mult]")]x.") + if (stasis_passive_degradation_multiplier < 1) + message += span_danger(" Stasis may be effective in slowing (or even stopping) degradation.") + if (base_degradation_on_death) + message += span_danger("\nDeath will incur a [base_degradation_on_death] degradation penalty.") + if (owner_organic && rezadone_degradation_decrease) + message += span_danger("\nRezadone of purity at or above [DEATH_CONSEQUENCES_REZADONE_MINIMUM_PURITY]% will reduce degradation by [span_blue("[rezadone_degradation_decrease]")] per second when metabolized.") + if (eigenstasium_degradation_decrease) + message += span_danger("\nEigenstasium will reduce degradation by [span_blue("[eigenstasium_degradation_decrease]")] per second when present.") + + message += span_danger("\nAll degradation reduction can be [span_blue("expedited")] by [span_blue("resting, sleeping, or being buckled to something comfortable")].") + + if (permakill_if_at_max_degradation) + message += span_revenwarning("\n\nSUBJECT WILL BE PERMANENTLY KILLED IF DEGRADATION REACHES MAXIMUM!") + + return message + +/// Used in stamina damage. Determines if our victim is resting, sleeping, or is buckled to something cozy. +/datum/brain_trauma/severe/death_consequences/proc/victim_properly_resting() + if (owner.resting || owner.IsSleeping()) + return TRUE + + if (owner.buckled) + for (var/typepath in buckled_to_recovery_mult_table) + if (istype(owner.buckled, typepath)) + return TRUE + + return FALSE + +/// Signal handler proc for healing our victim on an aheal. Permadeath can only be reversed by admin aheals. +/datum/brain_trauma/severe/death_consequences/proc/victim_ahealed(datum/signal_source, heal_flags) + SIGNAL_HANDLER + + if ((heal_flags & HEAL_AFFLICTIONS) == HEAL_AFFLICTIONS) + adjust_degradation(-INFINITY) // a good ol' regenerative extract can fix you up + if ((heal_flags & (ADMIN_HEAL_ALL)) == ADMIN_HEAL_ALL) // but only god can actually revive you + final_death_delivered = FALSE + REMOVE_TRAIT(owner, TRAIT_DNR, TRAUMA_TRAIT) + +/// Resets all our variables to our victim's preferences, if they have any. Used for the initial setup, then any time our victim manually refreshes variables. +/datum/brain_trauma/severe/death_consequences/proc/update_variables(client/source = owner.client) + // source is necessary since, in testing, i found the verb didnt work if you aghosted as owner.client was null, so we have to specify + // "hey dude this is still our mind" via the arg + + // theoretically speaking theres should be no circumstances where mind.current is shared with another mind, so this should be intrinsically + // safe, since only the true owner of the mob can actually use the verb to refresh the variables + + if (isnull(source)) + return // sanity + + var/ckey = lowertext(owner.mind?.key) + if (isnull(ckey) || ckey != source.ckey) + return // sanity + + var/datum/preferences/victim_prefs = source.prefs + if (!victim_prefs) + return + + max_degradation = victim_prefs.read_preference(/datum/preference/numeric/death_consequences/max_degradation) + current_degradation = clamp(victim_prefs.read_preference(/datum/preference/numeric/death_consequences/starting_degradation), 0, max_degradation - 1) // let's not let people instantly fucking die + + base_degradation_reduction_per_second_while_alive = victim_prefs.read_preference(/datum/preference/numeric/death_consequences/living_degradation_recovery_per_second) + base_degradation_per_second_while_dead = victim_prefs.read_preference(/datum/preference/numeric/death_consequences/dead_degradation_per_second) + base_degradation_on_death = victim_prefs.read_preference(/datum/preference/numeric/death_consequences/degradation_on_death) + + var/min_crit_threshold_percent = victim_prefs.read_preference(/datum/preference/numeric/death_consequences/crit_threshold_reduction_min_percent_of_max) + crit_threshold_min_degradation = (max_degradation * (min_crit_threshold_percent / 100)) + var/max_crit_threshold_percent = victim_prefs.read_preference(/datum/preference/numeric/death_consequences/crit_threshold_reduction_percent_of_max) + crit_threshold_max_degradation = (max_degradation * (max_crit_threshold_percent / 100)) + max_crit_threshold_reduction = victim_prefs.read_preference(/datum/preference/numeric/death_consequences/max_crit_threshold_reduction) + + var/min_stamina_damage_percent = victim_prefs.read_preference(/datum/preference/numeric/death_consequences/stamina_damage_min_percent_of_max) + stamina_damage_minimum_degradation = (max_degradation * (min_stamina_damage_percent / 100)) + var/max_stamina_damage_percent = victim_prefs.read_preference(/datum/preference/numeric/death_consequences/stamina_damage_percent_of_max) + max_stamina_damage = victim_prefs.read_preference(/datum/preference/numeric/death_consequences/max_stamina_damage) + stamina_damage_max_degradation = (max_degradation * (max_stamina_damage_percent / 100)) + + permakill_if_at_max_degradation = victim_prefs.read_preference(/datum/preference/toggle/death_consequences/permakill_at_max) + force_death_if_permakilled = victim_prefs.read_preference(/datum/preference/toggle/death_consequences/force_death_if_permakilled) + + rezadone_degradation_decrease = victim_prefs.read_preference(/datum/preference/numeric/death_consequences/rezadone_living_degradation_reduction) + eigenstasium_degradation_decrease = victim_prefs.read_preference(/datum/preference/numeric/death_consequences/eigenstasium_degradation_reduction) + + update_effects() + +#undef DEGRADATION_LEVEL_NONE +#undef DEGRADATION_LEVEL_LOW +#undef DEGRADATION_LEVEL_MEDIUM +#undef DEGRADATION_LEVEL_HIGH +#undef DEGRADATION_LEVEL_CRITICAL + +#undef DEGRADATION_LEVEL_NONE_THRESHOLD +#undef DEGRADATION_LEVEL_LOW_THRESHOLD +#undef DEGRADATION_LEVEL_MEDIUM_THRESHOLD +#undef DEGRADATION_LEVEL_HIGH_THRESHOLD + +#undef DEATH_CONSEQUENCES_REZADONE_MINIMUM_PURITY diff --git a/modular_nova/modules/death_consequences_perk/readme.md b/modular_nova/modules/death_consequences_perk/readme.md new file mode 100644 index 00000000000000..39cd599d304860 --- /dev/null +++ b/modular_nova/modules/death_consequences_perk/readme.md @@ -0,0 +1,48 @@ + + +https://github.com/Skyrat-SS13/Skyrat-tg/pull/23733 + +## Nova Sector Medical Update + +Module ID: death_consequences + +### Description: + +A highly customizable quirk designed to make you fear death, and introduce a more fair mortality the DNR quirk is unable to. + + + +### TG Proc/File Changes: + +- healthscanner.dm: /proc/healthscan(), added text for the quirk +- species_features.tsx: Necessary for the preference UI + + +### Modular Overrides: + +- N/A + + +### Defines: + +- ~nova_defines/quirks.dm: A lot of prefixed defines + + +### Included files that are not contained in this module: + +- modular_nova\master_files\code\modules\client\preferences\quirks\death_consequences.dm + + + +### Credits: + +Niko - Original author + + diff --git a/modular_skyrat/modules/decay_subsystem/code/decaySS.dm b/modular_nova/modules/decay_subsystem/code/decaySS.dm similarity index 95% rename from modular_skyrat/modules/decay_subsystem/code/decaySS.dm rename to modular_nova/modules/decay_subsystem/code/decaySS.dm index a91f86194998a7..4b5ce4f397b12b 100644 --- a/modular_skyrat/modules/decay_subsystem/code/decaySS.dm +++ b/modular_nova/modules/decay_subsystem/code/decaySS.dm @@ -4,8 +4,6 @@ These procs are incredibly expensive and should only really be run once. That's */ -#define WALL_RUST_PERCENT_CHANCE 15 - #define FLOOR_DIRT_PERCENT_CHANCE 15 #define FLOOR_BLOOD_PERCENT_CHANCE 1 #define FLOOR_VOMIT_PERCENT_CHANCE 1 @@ -93,12 +91,6 @@ SUBSYSTEM_DEF(decay) if(prob(FLOOR_DIRT_PERCENT_CHANCE * severity_modifier)) new /obj/effect/decal/cleanable/dirt(iterating_floor) - for(var/turf/closed/iterating_wall in possible_turfs) - if(HAS_TRAIT(iterating_wall, TRAIT_RUSTY)) - continue - if(prob(WALL_RUST_PERCENT_CHANCE * severity_modifier)) - iterating_wall.AddElement(/datum/element/rust) - /datum/controller/subsystem/decay/proc/do_maintenance() for(var/area/station/maintenance/iterating_maintenance in possible_areas) for(var/turf/open/iterating_floor in iterating_maintenance) diff --git a/modular_nova/modules/decay_subsystem/code/decay_turf_handling.dm b/modular_nova/modules/decay_subsystem/code/decay_turf_handling.dm new file mode 100644 index 00000000000000..35d9457cc5b59e --- /dev/null +++ b/modular_nova/modules/decay_subsystem/code/decay_turf_handling.dm @@ -0,0 +1,15 @@ +/turf/closed/wall + flags_1 = CAN_BE_DIRTY_1 // Allow walls to be dirty at round start + +/turf/open/floor + // Add CAN_DECAY_BREAK_1 flag to all floors by default - below we individually remove it from tiles that shouldn't break + turf_flags = IS_SOLID | CAN_DECAY_BREAK_1 + +/turf/open/floor/plating + turf_flags = IS_SOLID // No breaking plating (Duh) + +/turf/open/floor/glass + turf_flags = IS_SOLID // No breaking glass (doesn't leave plating behind) + +/turf/open/floor/tram + turf_flags = IS_SOLID // No breaking the irreplacable Tram Line diff --git a/modular_skyrat/modules/decay_subsystem/code/nests.dm b/modular_nova/modules/decay_subsystem/code/nests.dm similarity index 96% rename from modular_skyrat/modules/decay_subsystem/code/nests.dm rename to modular_nova/modules/decay_subsystem/code/nests.dm index dc883affe2a801..24d9ca82f57646 100644 --- a/modular_skyrat/modules/decay_subsystem/code/nests.dm +++ b/modular_nova/modules/decay_subsystem/code/nests.dm @@ -3,7 +3,7 @@ /obj/structure/mob_spawner name = "nest" desc = "A nasty looking pile of sticks and debris." - icon = 'modular_skyrat/modules/decay_subsystem/icons/nests.dmi' + icon = 'modular_nova/modules/decay_subsystem/icons/nests.dmi' icon_state = "nest" density = FALSE anchored = TRUE @@ -94,7 +94,7 @@ spawn_mob() /obj/structure/mob_spawner/proc/spawn_mob() - var/sound/sound_to_play = pick('modular_skyrat/master_files/sound/effects/rustle1.ogg', 'modular_skyrat/master_files/sound/effects/rustle2.ogg') + var/sound/sound_to_play = pick('modular_nova/master_files/sound/effects/rustle1.ogg', 'modular_nova/master_files/sound/effects/rustle2.ogg') playsound(src, sound_to_play, 100) do_squish(0.8, 1.2) @@ -146,7 +146,7 @@ /obj/item/spider_egg name = "spider egg" desc = "A white egg with something crawling around inside. Looks... fragile." - icon = 'modular_skyrat/modules/decay_subsystem/icons/loot.dmi' + icon = 'modular_nova/modules/decay_subsystem/icons/loot.dmi' icon_state = "spider_egg" /obj/item/spider_egg/attack_self(mob/user, modifiers) diff --git a/modular_skyrat/modules/decay_subsystem/code/spawn_nest.dm b/modular_nova/modules/decay_subsystem/code/spawn_nest.dm similarity index 100% rename from modular_skyrat/modules/decay_subsystem/code/spawn_nest.dm rename to modular_nova/modules/decay_subsystem/code/spawn_nest.dm diff --git a/modular_skyrat/modules/decay_subsystem/icons/loot.dmi b/modular_nova/modules/decay_subsystem/icons/loot.dmi similarity index 100% rename from modular_skyrat/modules/decay_subsystem/icons/loot.dmi rename to modular_nova/modules/decay_subsystem/icons/loot.dmi diff --git a/modular_skyrat/modules/decay_subsystem/icons/nests.dmi b/modular_nova/modules/decay_subsystem/icons/nests.dmi similarity index 100% rename from modular_skyrat/modules/decay_subsystem/icons/nests.dmi rename to modular_nova/modules/decay_subsystem/icons/nests.dmi diff --git a/modular_nova/modules/deforest_medical_items/code/cargo_packs.dm b/modular_nova/modules/deforest_medical_items/code/cargo_packs.dm new file mode 100644 index 00000000000000..ab38a07a6468b8 --- /dev/null +++ b/modular_nova/modules/deforest_medical_items/code/cargo_packs.dm @@ -0,0 +1,31 @@ +/datum/supply_pack/medical/civil_defense + name = "Civil Defense Medical Kit Crate" + crate_name = "civil defense medical kit crate" + desc = "Contains five civil defense medical kits, small packs of injectors meant to be passed out to the public in case of emergency." + access = ACCESS_MEDICAL + cost = CARGO_CRATE_VALUE * 10 // 2000 + contains = list( + /obj/item/storage/medkit/civil_defense/stocked = 5, + ) + +/datum/supply_pack/medical/frontier_first_aid + name = "Frontier First Aid Crate" + crate_name = "frontier first aid crate" + desc = "Contains two of each of frontier medical kits, and combat surgeon medical kits." + access = ACCESS_MEDICAL + cost = CARGO_CRATE_VALUE * 10 + contains = list( + /obj/item/storage/medkit/frontier/stocked = 2, + /obj/item/storage/medkit/combat_surgeon/stocked = 2, + ) + +/datum/supply_pack/medical/heavy_duty_medical + name = "Heavy Duty Medical Kit Crate" + crate_name = "heavy duty medical kit crate" + desc = "Contains a large satchel medical kit, and a first responder surgical kit." + access = ACCESS_MEDICAL + cost = CARGO_CRATE_VALUE * 10 + contains = list( + /obj/item/storage/backpack/duffelbag/deforest_medkit/stocked, + /obj/item/storage/backpack/duffelbag/deforest_surgical/stocked, + ) diff --git a/modular_nova/modules/deforest_medical_items/code/chemicals/demoneye.dm b/modular_nova/modules/deforest_medical_items/code/chemicals/demoneye.dm new file mode 100644 index 00000000000000..475315bede3768 --- /dev/null +++ b/modular_nova/modules/deforest_medical_items/code/chemicals/demoneye.dm @@ -0,0 +1,173 @@ +#define CONSTANT_DOSE_SAFE_LIMIT 60 +#define METABOLISM_END_LIMB_DAMAGE 20 + +// Chemical reaction, turns 25 input reagents into 25 output reagents, 10 of those being demoneye +/datum/chemical_reaction/demoneye + results = list( + /datum/reagent/drug/demoneye = 10, + /datum/reagent/impurity/healing/medicine_failure = 10, + /datum/reagent/impurity = 5, + ) + required_reagents = list( + /datum/reagent/medicine/ephedrine = 5, + /datum/reagent/blood = 15, + /datum/reagent/stable_plasma = 5, + ) + mob_react = FALSE + reaction_tags = REACTION_TAG_EASY | REACTION_TAG_DRUG | REACTION_TAG_ORGAN | REACTION_TAG_DAMAGING + +// Demoneye, a drug that makes you temporarily immune to fear and crit, in exchange for damaging all of your organs and making your veins explode +/datum/reagent/drug/demoneye + name = "DemonEye" + description = "A performance enhancing drug originally developed on mars. \ + A favorite among gangs and other outlaws on the planet, though overuse can cause terrible addiction and bodily damage." + reagent_state = LIQUID + color = "#af00be" + taste_description = "industrial shuttle fuel" + metabolization_rate = 0.65 * REAGENTS_METABOLISM + ph = 7 + overdose_threshold = 15 + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + addiction_types = list(/datum/addiction/stimulants = 15) + /// How much time has the drug been in them? + var/constant_dose_time = 0 + /// What the original color of the user's left eye is + var/user_left_eye_color + /// What the original color of the user's right eye is + var/user_right_eye_color + +/datum/reagent/drug/demoneye/on_mob_metabolize(mob/living/carbon/human/our_guy) + . = ..() + + ADD_TRAIT(our_guy, TRAIT_UNNATURAL_RED_GLOWY_EYES, TRAIT_NARCOTICS) + // IM FUCKIN INVINCIBLE + ADD_TRAIT(our_guy, TRAIT_NOSOFTCRIT, TRAIT_NARCOTICS) + ADD_TRAIT(our_guy, TRAIT_NOHARDCRIT, TRAIT_NARCOTICS) + ADD_TRAIT(our_guy, TRAIT_FEARLESS, TRAIT_NARCOTICS) + ADD_TRAIT(our_guy, TRAIT_NUMBED, TRAIT_NARCOTICS) + + user_left_eye_color = our_guy.eye_color_left + user_right_eye_color = our_guy.eye_color_right + + our_guy.eye_color_left = BLOODCULT_EYE + our_guy.eye_color_right = BLOODCULT_EYE + our_guy.update_body() + + our_guy.sound_environment_override = SOUND_ENVIRONMENT_PSYCHOTIC + + if(!our_guy.hud_used) + return + + var/atom/movable/plane_master_controller/game_plane_master_controller = our_guy.hud_used.plane_master_controllers[PLANE_MASTERS_GAME] + + var/static/list/col_filter_red = list(0.7,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1) + + game_plane_master_controller.add_filter("demoneye_filter", 10, color_matrix_filter(col_filter_red, FILTER_COLOR_RGB)) + + game_plane_master_controller.add_filter("demoneye_blur", 1, list("type" = "angular_blur", "size" = 4)) + + for(var/filter in game_plane_master_controller.get_filters("demoneye_blur")) + animate(filter, loop = -1, size = 2, time = 3 SECONDS, easing = ELASTIC_EASING|EASE_OUT, flags = ANIMATION_PARALLEL) + animate(size = 5, time = 3 SECONDS, easing = ELASTIC_EASING|EASE_IN) + + +/datum/reagent/drug/demoneye/on_mob_end_metabolize(mob/living/carbon/human/our_guy) + . = ..() + + REMOVE_TRAIT(our_guy, TRAIT_UNNATURAL_RED_GLOWY_EYES, TRAIT_NARCOTICS) + REMOVE_TRAIT(our_guy, TRAIT_NOSOFTCRIT, TRAIT_NARCOTICS) + REMOVE_TRAIT(our_guy, TRAIT_NOHARDCRIT, TRAIT_NARCOTICS) + REMOVE_TRAIT(our_guy, TRAIT_FEARLESS, TRAIT_NARCOTICS) + REMOVE_TRAIT(our_guy, TRAIT_NUMBED, TRAIT_NARCOTICS) + + our_guy.eye_color_left = user_left_eye_color + our_guy.eye_color_right = user_right_eye_color + our_guy.update_body() + + our_guy.sound_environment_override = NONE + + if(constant_dose_time < CONSTANT_DOSE_SAFE_LIMIT || !our_guy.blood_volume) + our_guy.visible_message( + span_danger("[our_guy]'s eyes fade from their evil looking red back to normal..."), + span_danger("Your vision slowly returns to normal as you lose your unnatural strength...") + ) + else + our_guy.visible_message( + span_danger("[our_guy]'s veins violently explode, spraying blood everywhere!"), + span_danger("Your veins burst from the sheer stress put on them!") + ) + + var/obj/item/bodypart/bodypart = pick(our_guy.bodyparts) + var/datum/wound/slash/flesh/critical/crit_wound = new() + crit_wound.apply_wound(bodypart) + bodypart.receive_damage(brute = METABOLISM_END_LIMB_DAMAGE, wound_bonus = CANT_WOUND) + + new /obj/effect/temp_visual/cleave(our_guy.drop_location()) + + if(overdosed && !our_guy.has_status_effect(/datum/status_effect/vulnerable_to_damage)) + our_guy.apply_status_effect(/datum/status_effect/vulnerable_to_damage) + + if(!our_guy.hud_used) + return + + var/atom/movable/plane_master_controller/game_plane_master_controller = our_guy.hud_used.plane_master_controllers[PLANE_MASTERS_GAME] + + game_plane_master_controller.remove_filter("demoneye_filter") + game_plane_master_controller.remove_filter("demoneye_blur") + + +/datum/reagent/drug/demoneye/on_mob_life(mob/living/carbon/our_guy, seconds_per_tick, times_fired) + . = ..() + + constant_dose_time += seconds_per_tick + + our_guy.add_mood_event("tweaking", /datum/mood_event/stimulant_heavy/sundowner, name) + + our_guy.adjustStaminaLoss(-10 * REM * seconds_per_tick) + our_guy.AdjustSleeping(-20 * REM * seconds_per_tick) + our_guy.adjust_drowsiness(-5 * REM * seconds_per_tick) + + if(SPT_PROB(25, seconds_per_tick)) + our_guy.playsound_local(our_guy, 'sound/effects/singlebeat.ogg', 100, TRUE) + flash_color(our_guy, flash_color = "#ff0000", flash_time = 3 SECONDS) + + if(SPT_PROB(5, seconds_per_tick)) + hurt_that_mans_organs(our_guy, 3, FALSE) + + if(locate(/datum/reagent/drug/twitch) in our_guy.reagents.reagent_list) // Combining this with twitch could cause some heart attack problems + our_guy.ForceContractDisease(new /datum/disease/heart_failure(), FALSE, TRUE) + + +/datum/reagent/drug/demoneye/overdose_process(mob/living/carbon/our_guy, seconds_per_tick, times_fired) + . = ..() + + our_guy.set_jitter_if_lower(10 SECONDS * REM * seconds_per_tick) + + if(SPT_PROB(10, seconds_per_tick)) + hurt_that_mans_organs(our_guy, 5, TRUE) + + +/// Hurts a random organ, if its 'really_bad' we'll vomit blood too +/datum/reagent/drug/demoneye/proc/hurt_that_mans_organs(mob/living/carbon/our_guy, damage, really_bad = FALSE) + /// List of organs we can randomly damage + var/static/list/organs_we_damage = list( + ORGAN_SLOT_BRAIN, + ORGAN_SLOT_APPENDIX, + ORGAN_SLOT_LUNGS, + ORGAN_SLOT_HEART, + ORGAN_SLOT_LIVER, + ORGAN_SLOT_STOMACH, + ) + if(really_bad) + our_guy.vomit(0, TRUE, FALSE, 1) + our_guy.adjustOrganLoss( + pick(organs_we_damage), + damage, + ) + +// Mood event used by demoneye, because the normal one I just didn't vibe with +/datum/mood_event/stimulant_heavy/sundowner + description = "I'M FUCKING INVINCIBLE!!!!" + +#undef CONSTANT_DOSE_SAFE_LIMIT +#undef METABOLISM_END_LIMB_DAMAGE diff --git a/modular_nova/modules/deforest_medical_items/code/chemicals/twitch.dm b/modular_nova/modules/deforest_medical_items/code/chemicals/twitch.dm new file mode 100644 index 00000000000000..d3016e10bbe1c2 --- /dev/null +++ b/modular_nova/modules/deforest_medical_items/code/chemicals/twitch.dm @@ -0,0 +1,214 @@ +#define CONSTANT_DOSE_SAFE_LIMIT 60 + +#define TWITCH_SCREEN_FILTER "twitch_screen_filter" +#define TWITCH_SCREEN_BLUR "twitch_screen_blur" + +#define TWITCH_BLUR_EFFECT "twitch_dodge_blur" +#define TWITCH_OVERDOSE_BLUR_EFFECT "twitch_overdose_blur" + +// Reaction to make twitch, makes 10u from 17u input reagents +/datum/chemical_reaction/twitch + results = list( + /datum/reagent/drug/twitch = 10, + ) + required_reagents = list( + /datum/reagent/impedrezene = 5, + /datum/reagent/bluespace = 10, + /datum/reagent/consumable/liquidelectricity/enriched = 2, + ) + mob_react = FALSE + reaction_tags = REACTION_TAG_EASY | REACTION_TAG_DRUG | REACTION_TAG_ORGAN | REACTION_TAG_DAMAGING + +// Twitch drug, makes the takers of it faster and able to dodge bullets while in their system, to potentially bad side effects +/datum/reagent/drug/twitch + name = "TWitch" + description = "A drug originally developed by and for plutonians to assist them during raids. \ + Does not see wide use due to the whole reality-disassociation and heart disease thing afterwards. \ + Can be intentionally overdosed to increase the drug's effects" + reagent_state = LIQUID + color = "#c22a44" + taste_description = "television static" + metabolization_rate = 0.65 * REAGENTS_METABOLISM + ph = 3 + overdose_threshold = 15 + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + addiction_types = list(/datum/addiction/stimulants = 20) + /// How much time has the drug been in them? + var/constant_dose_time = 0 + /// What type of span class do we change heard speech to? + var/speech_effect_span + + +/datum/reagent/drug/twitch/on_mob_metabolize(mob/living/our_guy) + . = ..() + + our_guy.add_movespeed_modifier(/datum/movespeed_modifier/reagent/twitch) + our_guy.next_move_modifier -= 0.3 // For the duration of this you move and attack faster + + our_guy.sound_environment_override = SOUND_ENVIRONMENT_DIZZY + + speech_effect_span = "green" + + RegisterSignal(our_guy, COMSIG_MOVABLE_MOVED, PROC_REF(on_movement)) + RegisterSignal(our_guy, COMSIG_MOVABLE_HEAR, PROC_REF(distort_hearing)) + + if(!our_guy.hud_used) + return + + var/atom/movable/plane_master_controller/game_plane_master_controller = our_guy.hud_used.plane_master_controllers[PLANE_MASTERS_GAME] + + var/static/list/col_filter_green = list(0.5,0,0,0, 0,1,0,0, 0,0,0.5,0, 0,0,0,1) + + game_plane_master_controller.add_filter(TWITCH_SCREEN_FILTER, 10, color_matrix_filter(col_filter_green, FILTER_COLOR_RGB)) + + game_plane_master_controller.add_filter(TWITCH_SCREEN_BLUR, 1, list("type" = "radial_blur", "size" = 0.1)) + + for(var/filter in game_plane_master_controller.get_filters("twitch_blur")) + animate(filter, loop = -1, size = 0.2, time = 2 SECONDS, easing = ELASTIC_EASING|EASE_OUT, flags = ANIMATION_PARALLEL) + animate(size = 0.1, time = 6 SECONDS, easing = CIRCULAR_EASING|EASE_IN) + + +/datum/reagent/drug/twitch/on_mob_end_metabolize(mob/living/carbon/our_guy) + . = ..() + + our_guy.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/twitch) + our_guy.next_move_modifier += (overdosed ? 0.5 : 0.3) + + our_guy.sound_environment_override = NONE + + speech_effect_span = "hierophant" + + UnregisterSignal(our_guy, COMSIG_MOVABLE_MOVED) + UnregisterSignal(our_guy, COMSIG_MOVABLE_HEAR) + if(overdosed) + UnregisterSignal(our_guy, COMSIG_ATOM_PRE_BULLET_ACT) + + if(constant_dose_time < CONSTANT_DOSE_SAFE_LIMIT) // Anything less than this and you'll come out fiiiine, aside from a big hit of stamina damage + our_guy.visible_message( + span_danger("[our_guy] suddenly slows from their inhuman speeds, coming back with a wicked nosebleed!"), + span_danger("You suddenly slow back to normal, a stream of blood gushing from your nose!") + ) + our_guy.adjustStaminaLoss(constant_dose_time) + else // Much longer than that however, and you're not gonna have a good day + our_guy.visible_message( + span_danger("[our_guy] suddenly snaps back from their inhumans speeds, coughing up a spray of blood!"), + span_danger("As you snap back to normal speed you cough up a worrying amount of blood. You feel like you've just been run over by a power loader.") + ) + our_guy.spray_blood(our_guy.dir, 2) // The before mentioned coughing up blood + our_guy.emote("cough") + our_guy.adjustStaminaLoss(constant_dose_time) + our_guy.adjustOrganLoss(ORGAN_SLOT_HEART, 0.3 * constant_dose_time) // Basically you might die + + if(!our_guy.hud_used) + return + + var/atom/movable/plane_master_controller/game_plane_master_controller = our_guy.hud_used.plane_master_controllers[PLANE_MASTERS_GAME] + + game_plane_master_controller.remove_filter(TWITCH_SCREEN_FILTER) + game_plane_master_controller.remove_filter(TWITCH_SCREEN_BLUR) + + +/// Leaves an afterimage behind the mob when they move +/datum/reagent/drug/twitch/proc/on_movement(mob/living/carbon/our_guy, atom/old_loc) + SIGNAL_HANDLER + new /obj/effect/temp_visual/decoy/twitch_afterimage(old_loc, our_guy) + + +/// Tries to dodge incoming bullets if we aren't disabled for any reasons +/datum/reagent/drug/twitch/proc/dodge_bullets(mob/living/carbon/human/source, obj/projectile/hitting_projectile, def_zone) + SIGNAL_HANDLER + + if(HAS_TRAIT(source, TRAIT_INCAPACITATED)) + return NONE + source.visible_message( + span_danger("[source] effortlessly dodges [hitting_projectile]!"), + span_userdanger("You effortlessly evade [hitting_projectile]!"), + ) + playsound(source, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, TRUE) + source.add_filter(TWITCH_BLUR_EFFECT, 2, gauss_blur_filter(5)) + addtimer(CALLBACK(source, TYPE_PROC_REF(/datum, remove_filter), TWITCH_BLUR_EFFECT), 0.5 SECONDS) + return COMPONENT_BULLET_PIERCED + + +/datum/reagent/drug/twitch/on_mob_life(mob/living/carbon/our_guy, seconds_per_tick, times_fired) + . = ..() + + constant_dose_time += seconds_per_tick + + our_guy.adjustOrganLoss(ORGAN_SLOT_HEART, 0.1 * REM * seconds_per_tick) + + if(locate(/datum/reagent/drug/kronkaine) in our_guy.reagents.reagent_list) // Kronkaine, another heart-straining drug, could cause problems if mixed with this + our_guy.ForceContractDisease(new /datum/disease/adrenal_crisis(), FALSE, TRUE) + + +/datum/reagent/drug/twitch/overdose_start(mob/living/our_guy) + . = ..() + + RegisterSignal(our_guy, COMSIG_ATOM_PRE_BULLET_ACT, PROC_REF(dodge_bullets)) + + our_guy.next_move_modifier -= 0.2 // Overdosing makes you a liiitle faster but you know has some really bad consequences + + if(!our_guy.hud_used) + return + + var/atom/movable/plane_master_controller/game_plane_master_controller = our_guy.hud_used.plane_master_controllers[PLANE_MASTERS_GAME] + + var/list/col_filter_ourple = list(1,0,0,0, 0,0.5,0,0, 0,0,1,0, 0,0,0,1) + + for(var/filter in game_plane_master_controller.get_filters(TWITCH_SCREEN_FILTER)) + animate(filter, loop = -1, color = col_filter_ourple, time = 4 SECONDS, easing = BOUNCE_EASING) + + +/datum/reagent/drug/twitch/overdose_process(mob/living/carbon/our_guy, seconds_per_tick, times_fired) + . = ..() + our_guy.set_jitter_if_lower(10 SECONDS * REM * seconds_per_tick) + + our_guy.adjustOrganLoss(ORGAN_SLOT_HEART, 1 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags) + our_guy.adjustToxLoss(1 * REM * seconds_per_tick, updating_health = FALSE, forced = TRUE, required_biotype = affected_biotype) + + if(SPT_PROB(5, seconds_per_tick)) + to_chat(our_guy, span_danger("You cough up a splatter of blood!")) + our_guy.spray_blood(our_guy.dir, 1) + our_guy.emote("cough") + + if(SPT_PROB(10, seconds_per_tick)) + our_guy.add_filter(TWITCH_OVERDOSE_BLUR_EFFECT, 2, phase_filter(8)) + addtimer(CALLBACK(our_guy, TYPE_PROC_REF(/datum, remove_filter), TWITCH_OVERDOSE_BLUR_EFFECT), 0.5 SECONDS) + +/// Changes heard message spans into that defined on the drug earlier +/datum/reagent/drug/twitch/proc/distort_hearing(datum/source, list/hearing_args) + SIGNAL_HANDLER + hearing_args[HEARING_RAW_MESSAGE] = "[hearing_args[HEARING_RAW_MESSAGE]]" + + +/// Cool filter that I'm using for some of this :))) +/proc/phase_filter(size) + . = list("type" = "wave") + .["x"] = 1 + if(!isnull(size)) + .["size"] = size + + +// Temp visual that changes color for that bootleg sandevistan effect +/obj/effect/temp_visual/decoy/twitch_afterimage + duration = 0.75 SECONDS + /// The color matrix it should be at spawn + var/list/matrix_start = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0,0.1,0.4,0) + /// The color matrix it should be by the time it despawns + var/list/matrix_end = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0,0.5,0,0) + +/obj/effect/temp_visual/decoy/twitch_afterimage/Initialize(mapload) + . = ..() + color = matrix_start + animate(src, color = matrix_end, time = duration, easing = EASE_OUT) + animate(src, alpha = 0, time = duration, easing = EASE_OUT) + +// Movespeed modifier used by twitch when someone has it in their system +/datum/movespeed_modifier/reagent/twitch + multiplicative_slowdown = -0.4 + +#undef TWITCH_SCREEN_FILTER +#undef TWITCH_SCREEN_BLUR + +#undef TWITCH_BLUR_EFFECT +#undef TWITCH_OVERDOSE_BLUR_EFFECT diff --git a/modular_nova/modules/deforest_medical_items/code/healing_stack_items.dm b/modular_nova/modules/deforest_medical_items/code/healing_stack_items.dm new file mode 100644 index 00000000000000..e6bed70129f758 --- /dev/null +++ b/modular_nova/modules/deforest_medical_items/code/healing_stack_items.dm @@ -0,0 +1,178 @@ +#define INSTANT_WOUND_HEAL_STAMINA_DAMAGE 80 +#define INSTANT_WOUND_HEAL_LIMB_DAMAGE 25 + +/obj/item/stack/medical/wound_recovery + name = "subdermal splint applicator" + desc = "A roll flexible material dotted with millions of micro-scale injectors on one side. \ + On application to a body part with a damaged bone structure, nanomachines stored within those \ + injectors will surround the wound and form a subdermal, self healing splint. While convenient \ + for keeping appearances and rapid healing, the nanomachines tend to leave their host particularly \ + vulnerable to new damage for several minutes after application." + icon = 'modular_nova/modules/deforest_medical_items/icons/stack_items.dmi' + icon_state = "subsplint" + lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' + inhand_icon_state = "sampler" + gender = PLURAL + singular_name = "subdermal splint applicator" + self_delay = 10 SECONDS + other_delay = 5 SECONDS + novariants = TRUE + max_amount = 3 + amount = 3 + merge_type = /obj/item/stack/medical/wound_recovery + /// The types of wounds that we work on, in list format + var/list/applicable_wounds = list( + /datum/wound/blunt/bone, + /datum/wound/muscle, + ) + /// The sound we play upon successfully treating the wound + var/treatment_sound = 'sound/items/duct_tape_rip.ogg' + +// This is only relevant for the types of wounds defined, we can't work if there are none +/obj/item/stack/medical/wound_recovery/try_heal(mob/living/patient, mob/user, silent, looping) + + if(patient.has_status_effect(/datum/status_effect/vulnerable_to_damage)) + patient.balloon_alert(user, "still recovering from last use!") + return + + var/treatment_delay = (user == patient ? self_delay : other_delay) + + var/obj/item/bodypart/limb = patient.get_bodypart(check_zone(user.zone_selected)) + if(!limb) + patient.balloon_alert(user, "missing limb!") + return + if(!LAZYLEN(limb.wounds)) + patient.balloon_alert(user, "no wounds!") + return + + var/splintable_wound = FALSE + var/datum/wound/woundies + for(var/found_wound in limb.wounds) + woundies = found_wound + if((woundies.wound_flags & ACCEPTS_GAUZE) && is_type_in_list(woundies, applicable_wounds)) + splintable_wound = TRUE + break + if(!splintable_wound) + patient.balloon_alert(user, "can't heal those!") + return + + if(HAS_TRAIT(woundies, TRAIT_WOUND_SCANNED)) + treatment_delay *= 0.5 + if(user == patient) + to_chat(user, span_notice("You keep in mind the indications from the holo-image about your injury, and expertly begin applying [src].")) + else + user.visible_message(span_warning("[user] begins expertly treating the wounds on [patient]'s [limb.plaintext_zone] with [src]..."), span_warning("You begin quickly treating the wounds on [patient]'s [limb.plaintext_zone] with [src], keeping the holo-image indications in mind...")) + else + user.visible_message(span_warning("[user] begins treating the wounds on [patient]'s [limb.plaintext_zone] with [src]..."), span_warning("You begin treating the wounds on [user == patient ? "your" : "[patient]'s"] [limb.plaintext_zone] with [src]...")) + + if(!do_after(user, treatment_delay, target = patient)) + return + + user.visible_message(span_green("[user] applies [src] to [patient]'s [limb.plaintext_zone]."), span_green("You bandage the wounds on [user == patient ? "your" : "[patient]'s"] [limb.plaintext_zone].")) + playsound(patient, treatment_sound, 50, TRUE) + woundies.remove_wound() + if(!HAS_TRAIT(patient, TRAIT_NUMBED)) + patient.emote("scream") + to_chat(patient, span_userdanger("Your [limb.plaintext_zone] burns like hell as the wounds on it are rapidly healed, fuck!")) + patient.add_mood_event("severe_surgery", /datum/mood_event/rapid_wound_healing) + limb.receive_damage(brute = INSTANT_WOUND_HEAL_LIMB_DAMAGE, wound_bonus = CANT_WOUND) + patient.adjustStaminaLoss(INSTANT_WOUND_HEAL_STAMINA_DAMAGE) + patient.apply_status_effect(/datum/status_effect/vulnerable_to_damage) + use(1) + +/datum/mood_event/rapid_wound_healing + description = "That may have healed my wound fast, but if that wasn't one of the worst experiences!\n" + mood_change = -3 + timeout = 5 MINUTES + +// Helps recover bleeding +/obj/item/stack/medical/wound_recovery/rapid_coagulant + name = "rapid coagulant applicator" + singular_name = "rapid coagulant applicator" + desc = "A small device filled with a fast acting coagulant of some type. \ + When used on a bleeding area, will nearly instantly stop all bleeding. \ + This rapid clotting action may result in temporary vulnerability to further \ + damage after application." + icon_state = "clotter" + inhand_icon_state = "implantcase" + applicable_wounds = list( + /datum/wound/slash/flesh, + /datum/wound/pierce/bleed, + ) + merge_type = /obj/item/stack/medical/wound_recovery/rapid_coagulant + +/obj/item/stack/medical/wound_recovery/rapid_coagulant/post_heal_effects(amount_healed, mob/living/carbon/healed_mob, mob/user) + . = ..() + healed_mob.reagents.add_reagent(/datum/reagent/medicine/coagulant/fabricated, 5) + +// Helps recover burn wounds much faster, while not healing much damage directly +/obj/item/stack/medical/ointment/red_sun + name = "red sun balm" + singular_name = "red sun balm" + desc = "A popular brand of ointment for handling anything under the red sun, which tends to be terrible burns. \ + Which red sun may this be referencing? Not even the producers of the balm are sure." + icon = 'modular_nova/modules/deforest_medical_items/icons/stack_items.dmi' + icon_state = "balm" + lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' + inhand_icon_state = "bandage" + gender = PLURAL + novariants = TRUE + amount = 12 + max_amount = 12 + self_delay = 4 SECONDS + other_delay = 2 SECONDS + heal_burn = 5 + heal_brute = 5 + flesh_regeneration = 5 + sanitization = 3 + grind_results = list(/datum/reagent/medicine/oxandrolone = 3) + merge_type = /obj/item/stack/medical/ointment/red_sun + +/obj/item/stack/medical/ointment/red_sun/post_heal_effects(amount_healed, mob/living/carbon/healed_mob, mob/user) + . = ..() + healed_mob.reagents.add_reagent(/datum/reagent/medicine/lidocaine, 2) + +// Gauze that are especially good at treating burns, but are terrible splints +/obj/item/stack/medical/gauze/sterilized + name = "sealed aseptic gauze" + singular_name = "sealed aseptic gauze" + desc = "A small roll of elastic material specially treated to be entirely sterile, and sealed in plastic just to be sure. \ + These make excellent treatment against burn wounds, but due to their small nature are sub-par for serving as \ + bone wound wrapping." + icon = 'modular_nova/modules/deforest_medical_items/icons/stack_items.dmi' + icon_state = "burndaid" + inhand_icon_state = null + novariants = TRUE + max_amount = 6 + amount = 6 + splint_factor = 1.2 + burn_cleanliness_bonus = 0.1 + merge_type = /obj/item/stack/medical/gauze/sterilized + +/obj/item/stack/medical/gauze/sterilized/post_heal_effects(amount_healed, mob/living/carbon/healed_mob, mob/user) + . = ..() + healed_mob.reagents.add_reagent(/datum/reagent/space_cleaner/sterilizine, 5) + healed_mob.reagents.expose(healed_mob, TOUCH, 1) + +// Works great at sealing bleed wounds, but does little to actually heal them +/obj/item/stack/medical/suture/coagulant + name = "coagulant-F packet" + singular_name = "coagulant-F packet" + desc = "A small packet of fabricated coagulant for bleeding. Not as effective as some \ + other methods of coagulating wounds, but is more effective than plain sutures. \ + The downsides? It repairs less of the actual damage that's there." + icon = 'modular_nova/modules/deforest_medical_items/icons/stack_items.dmi' + icon_state = "clotter_slow" + inhand_icon_state = null + novariants = TRUE + amount = 12 + max_amount = 12 + repeating = FALSE + heal_brute = 0 + stop_bleeding = 2 + merge_type = /obj/item/stack/medical/suture/coagulant + +#undef INSTANT_WOUND_HEAL_STAMINA_DAMAGE +#undef INSTANT_WOUND_HEAL_LIMB_DAMAGE diff --git a/modular_nova/modules/deforest_medical_items/code/illegal_injectors.dm b/modular_nova/modules/deforest_medical_items/code/illegal_injectors.dm new file mode 100644 index 00000000000000..0b29b2963fbd03 --- /dev/null +++ b/modular_nova/modules/deforest_medical_items/code/illegal_injectors.dm @@ -0,0 +1,70 @@ +// Twitch, because having sandevistans be implants is for losers, just inject it! +/obj/item/reagent_containers/hypospray/medipen/deforest/twitch + name = "TWitch sensory stimulant injector" + desc = "A Deforest branded autoinjector, loaded with 'TWitch' among other reagents. This drug is known to make \ + those who take it 'see faster', whatever that means." + base_icon_state = "twitch" + icon_state = "twitch" + list_reagents = list( + /datum/reagent/drug/twitch = 10, + /datum/reagent/drug/maint/tar = 5, + /datum/reagent/medicine/silibinin = 5, + /datum/reagent/toxin/leadacetate = 5, + ) + +// Demoneye, for when you feel the need to become "fucking invincible" +/obj/item/reagent_containers/hypospray/medipen/deforest/demoneye + name = "DemonEye steroid injector" + desc = "A Deforest branded autoinjector, loaded with 'DemonEye' among other reagents. This drug is known to make \ + those who take it numb to all pains and extremely difficult to kill as a result." + base_icon_state = "demoneye" + icon_state = "demoneye" + list_reagents = list( + /datum/reagent/drug/demoneye = 10, + /datum/reagent/drug/maint/sludge = 10, + /datum/reagent/toxin/leadacetate = 5, + ) + +// Mix of many of the stamina damage regenerating drugs to provide a cocktail no baton could hope to beat +/obj/item/reagent_containers/hypospray/medipen/deforest/aranepaine + name = "aranepaine combat stimulant injector" + desc = "A Deforest branded autoinjector, loaded with a cocktail of drugs to make any who take it nearly \ + immune to exhaustion while its in their system." + base_icon_state = "aranepaine" + icon_state = "aranepaine" + list_reagents = list( + /datum/reagent/drug/aranesp = 5, + /datum/reagent/drug/kronkaine = 5, + /datum/reagent/drug/pumpup = 5, + /datum/reagent/medicine/diphenhydramine = 5, + /datum/reagent/impurity = 5, + ) + +// Nothing inherently illegal, just a potentially very dangerous mix of chems to be able to inject into people +/obj/item/reagent_containers/hypospray/medipen/deforest/pentibinin + name = "pentibinin normalizant injector" + desc = "A Deforest branded autoinjector, loaded with a cocktail of drugs to make any who take it \ + recover from many different types of damages, with many unusual or undocumented side-effects." + base_icon_state = "pentibinin" + icon_state = "pentibinin" + list_reagents = list( + /datum/reagent/medicine/c2/penthrite = 5, + /datum/reagent/medicine/polypyr = 5, + /datum/reagent/medicine/silibinin = 5, + /datum/reagent/medicine/omnizine = 5, + /datum/reagent/inverse/healing/tirimol = 5, + ) + +// Combat stimulant that makes you immune to slowdowns for a bit +/obj/item/reagent_containers/hypospray/medipen/deforest/synalvipitol + name = "synalvipitol muscle stimulant injector" + desc = "A Deforest branded autoinjector, loaded with a cocktail of drugs to make any who take it \ + nearly immune to the slowing effects of silly things like 'being tired' or 'facing muscle failure'." + base_icon_state = "synalvipitol" + icon_state = "synalvipitol" + list_reagents = list( + /datum/reagent/medicine/mine_salve = 5, + /datum/reagent/medicine/synaptizine = 10, + /datum/reagent/medicine/muscle_stimulant = 5, + /datum/reagent/impurity = 5, + ) diff --git a/modular_nova/modules/deforest_medical_items/code/injectors.dm b/modular_nova/modules/deforest_medical_items/code/injectors.dm new file mode 100644 index 00000000000000..1cb8d33af95935 --- /dev/null +++ b/modular_nova/modules/deforest_medical_items/code/injectors.dm @@ -0,0 +1,206 @@ +// Pen basetype where the icon is gotten from +/obj/item/reagent_containers/hypospray/medipen/deforest + name = "non-functional Deforest autoinjector" + desc = "A Deforest branded autoinjector, though this one seems to be both empty and non-functional." + icon = 'modular_nova/modules/deforest_medical_items/icons/injectors.dmi' + icon_state = "default" + volume = 25 + list_reagents = list() + /// If this pen has a timer for injecting others with, just for safety with some of the drugs in these + var/inject_others_time = 1.5 SECONDS + +/obj/item/reagent_containers/hypospray/medipen/deforest/Initialize(mapload) + . = ..() + amount_per_transfer_from_this = volume + +/obj/item/reagent_containers/hypospray/medipen/deforest/inject(mob/living/affected_mob, mob/user) + if(!reagents.total_volume) + to_chat(user, span_warning("[src] is empty!")) + return FALSE + if(!iscarbon(affected_mob)) + return FALSE + + //Always log attemped injects for admins + var/list/injected = list() + for(var/datum/reagent/injected_reagent in reagents.reagent_list) + injected += injected_reagent.name + var/contained = english_list(injected) + log_combat(user, affected_mob, "attempted to inject", src, "([contained])") + + if((affected_mob != user) && inject_others_time) + affected_mob.visible_message(span_danger("[user] is trying to inject [affected_mob]!"), \ + span_userdanger("[user] is trying to inject something into you!")) + if(!do_after(user, CHEM_INTERACT_DELAY(inject_others_time, user), affected_mob)) + return FALSE + + 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) + + if(affected_mob.reagents) + var/trans = 0 + if(!infinite) + trans = reagents.trans_to(affected_mob, amount_per_transfer_from_this, transferred_by = user, methods = INJECT) + else + reagents.expose(affected_mob, INJECT, fraction) + trans = reagents.copy_to(affected_mob, amount_per_transfer_from_this) + to_chat(user, span_notice("[trans] unit\s injected. [reagents.total_volume] unit\s remaining in [src].")) + log_combat(user, affected_mob, "injected", src, "([contained])") + return TRUE + return FALSE + +// Sensory restoration, heals eyes and ears with a bit of impurity +/obj/item/reagent_containers/hypospray/medipen/deforest/occuisate + name = "occuisate sensory restoration injector" + desc = "A Deforest branded autoinjector, loaded with a mix of reagents to restore your vision and hearing to operation." + base_icon_state = "occuisate" + icon_state = "occuisate" + list_reagents = list( + /datum/reagent/medicine/inacusiate = 7, + /datum/reagent/medicine/oculine = 7, + /datum/reagent/impurity/inacusiate = 3, + /datum/reagent/inverse/oculine = 3, + /datum/reagent/toxin/lipolicide = 5, + ) + +// Adrenaline, fills you with determination (and also stimulants) +/obj/item/reagent_containers/hypospray/medipen/deforest/adrenaline + name = "adrenaline injector" + desc = "A Deforest branded autoinjector, loaded with a mix of reagents to intentionally give yourself fight or flight on demand." + base_icon_state = "adrenaline" + icon_state = "adrenaline" + list_reagents = list( + /datum/reagent/medicine/synaptizine = 5, + /datum/reagent/medicine/inaprovaline = 5, + /datum/reagent/determination = 10, + /datum/reagent/toxin/histamine = 5, + ) + +// Morpital, heals a small amount of damage and kills pain for a bit +/obj/item/reagent_containers/hypospray/medipen/deforest/morpital + name = "morpital regenerative stimulant injector" + desc = "A Deforest branded autoinjector, loaded with a mix of reagents to numb pain and repair small amounts of physical damage." + base_icon_state = "morpital" + icon_state = "morpital" + list_reagents = list( + /datum/reagent/medicine/morphine = 5, + /datum/reagent/medicine/omnizine/protozine = 15, + /datum/reagent/toxin/staminatoxin = 5, + ) + +// Lipital, heals more damage than morpital but doesnt work much at higher damages +/obj/item/reagent_containers/hypospray/medipen/deforest/lipital + name = "lipital regenerative stimulant injector" + desc = "A Deforest branded autoinjector, loaded with a mix of reagents to numb pain and repair small amounts of physical damage. \ + Works most effectively against damaged caused by brute attacks." + base_icon_state = "lipital" + icon_state = "lipital" + list_reagents = list( + /datum/reagent/medicine/lidocaine = 5, + /datum/reagent/medicine/omnizine = 5, + /datum/reagent/medicine/c2/probital = 10, + ) + +// Anti-poisoning injector, with a little bit of radiation healing as a treat +/obj/item/reagent_containers/hypospray/medipen/deforest/meridine + name = "meridine antidote injector" + desc = "A Deforest branded autoinjector, loaded with a mix of reagents to serve as antidote to most galactic toxins. \ + A warning sticker notes it should not be used if the patient is physically damaged, as it may cause complications." + base_icon_state = "meridine" + icon_state = "meridine" + list_reagents = list( + /datum/reagent/medicine/ammoniated_mercury = 5, + /datum/reagent/medicine/potass_iodide = 15, + /datum/reagent/nitrous_oxide = 5, + ) + +// Epinephrine and helps a little bit against stuns and stamina damage +/obj/item/reagent_containers/hypospray/medipen/deforest/synephrine + name = "synephrine emergency stimulant injector" + desc = "A Deforest branded autoinjector, loaded with a mix of reagents to stabilize critical condition and recover from stamina deficits." + base_icon_state = "synephrine" + icon_state = "synephrine" + list_reagents = list( + /datum/reagent/medicine/epinephrine = 10, + /datum/reagent/medicine/synaptizine = 5, + /datum/reagent/medicine/synaphydramine = 5, + ) + +// Critical condition stabilizer +/obj/item/reagent_containers/hypospray/medipen/deforest/calopine + name = "calopine emergency stabilizant injector" + desc = "A Deforest branded autoinjector, loaded with a stabilizing mix of reagents to repair critical conditions." + base_icon_state = "calopine" + icon_state = "calopine" + list_reagents = list( + /datum/reagent/medicine/atropine = 10, + /datum/reagent/medicine/coagulant/fabricated = 5, + /datum/reagent/medicine/salbutamol = 5, + /datum/reagent/toxin/staminatoxin = 5, + ) + +// Coagulant, really not a whole lot more +/obj/item/reagent_containers/hypospray/medipen/deforest/coagulants + name = "coagulant-S injector" + desc = "A Deforest branded autoinjector, loaded with a mix of coagulants to prevent and stop bleeding." + base_icon_state = "coagulant" + icon_state = "coagulant" + list_reagents = list( + /datum/reagent/medicine/coagulant = 5, + /datum/reagent/medicine/salglu_solution = 15, + /datum/reagent/impurity = 5, + ) + +// Stimulant centered around ondansetron +/obj/item/reagent_containers/hypospray/medipen/deforest/krotozine + name = "krotozine manipulative stimulant injector" + desc = "A Deforest branded autoinjector, loaded with a mix of stimulants of weak healing agents." + base_icon_state = "krotozine" + icon_state = "krotozine" + list_reagents = list( + /datum/reagent/medicine/ondansetron = 5, + /datum/reagent/drug/kronkaine = 5, + /datum/reagent/medicine/omnizine/protozine = 10, + /datum/reagent/drug/maint/tar = 5, + ) + +// Stuff really good at healing burn stuff and stabilizing temps +/obj/item/reagent_containers/hypospray/medipen/deforest/lepoturi + name = "lepoturi burn treatment injector" + desc = "A Deforest branded autoinjector, loaded with a mix of medicines to rapidly treat burns." + base_icon_state = "lepoturi" + icon_state = "lepoturi" + list_reagents = list( + /datum/reagent/medicine/mine_salve = 5, + /datum/reagent/medicine/leporazine = 5, + /datum/reagent/medicine/c2/lenturi = 10, + /datum/reagent/toxin/staminatoxin = 5, + ) + +// Stabilizes a lot of stats like drowsiness, sanity, dizziness, so on +/obj/item/reagent_containers/hypospray/medipen/deforest/psifinil + name = "psifinil personal recovery injector" + desc = "A Deforest branded autoinjector, loaded with a mix of medicines to remedy many common ailments, such as drowsiness, pain, instability, the like." + base_icon_state = "psifinil" + icon_state = "psifinil" + list_reagents = list( + /datum/reagent/medicine/modafinil = 10, + /datum/reagent/medicine/psicodine = 10, + /datum/reagent/medicine/leporazine = 5, + ) + +// Helps with liver failure and some drugs, also alcohol +/obj/item/reagent_containers/hypospray/medipen/deforest/halobinin + name = "halobinin soberant injector" + desc = "A Deforest branded autoinjector, loaded with a mix of medicines to remedy the effects of liver failure and common drugs." + base_icon_state = "halobinin" + icon_state = "halobinin" + list_reagents = list( + /datum/reagent/medicine/haloperidol = 5, + /datum/reagent/medicine/antihol = 5, + /datum/reagent/medicine/higadrite = 5, + /datum/reagent/medicine/silibinin = 5, + ) diff --git a/modular_nova/modules/deforest_medical_items/code/storage_items.dm b/modular_nova/modules/deforest_medical_items/code/storage_items.dm new file mode 100644 index 00000000000000..b8452cfe5f2670 --- /dev/null +++ b/modular_nova/modules/deforest_medical_items/code/storage_items.dm @@ -0,0 +1,314 @@ +// Bottle of painkiller pills +/obj/item/storage/pill_bottle/painkiller + name = "amollin pill bottle" + desc = "It's an airtight container for storing medication. This one is all-white and has labels for containing amollin, a blend of Miner's Salve and Lidocaine." + icon = 'modular_nova/modules/deforest_medical_items/icons/storage.dmi' + icon_state = "painkiller_bottle" + +/obj/item/storage/pill_bottle/painkiller/PopulateContents() + for(var/i in 1 to 7) + new /obj/item/reagent_containers/pill/amollin(src) + +/obj/item/reagent_containers/pill/amollin + name = "amollin pill" + desc = "Neutralizes many common pains and ailments. A blend of Miner's Salve and Lidocaine." + icon_state = "pill9" + list_reagents = list( + /datum/reagent/medicine/mine_salve = 10, + /datum/reagent/medicine/lidocaine = 5, + /datum/reagent/consumable/sugar = 5, + ) + +// Pre-packed civil defense medkit, with items to heal low damages inside +/obj/item/storage/medkit/civil_defense + name = "civil defense medical kit" + icon = 'modular_nova/modules/deforest_medical_items/icons/storage.dmi' + icon_state = "poisoning_kit" + lefthand_file = 'modular_nova/modules/deforest_medical_items/icons/inhands/cases_lefthand.dmi' + righthand_file = 'modular_nova/modules/deforest_medical_items/icons/inhands/cases_righthand.dmi' + inhand_icon_state = "poisoning_kit" + desc = "A small medical kit that can only fit autoinjectors in it, these typically come with supplies to treat low level harm." + w_class = WEIGHT_CLASS_SMALL + drop_sound = 'sound/items/handling/ammobox_drop.ogg' + pickup_sound = 'sound/items/handling/ammobox_pickup.ogg' + +/obj/item/storage/medkit/civil_defense/Initialize(mapload) + . = ..() + atom_storage.max_slots = 4 + atom_storage.set_holdable(list( + /obj/item/reagent_containers/hypospray/medipen, + )) + +/obj/item/storage/medkit/civil_defense/stocked + +/obj/item/storage/medkit/civil_defense/stocked/PopulateContents() + var/static/items_inside = list( + /obj/item/reagent_containers/hypospray/medipen/deforest/meridine = 1, + /obj/item/reagent_containers/hypospray/medipen/deforest/halobinin = 1, + /obj/item/reagent_containers/hypospray/medipen/deforest/lipital = 1, + /obj/item/reagent_containers/hypospray/medipen/deforest/calopine = 1, + ) + generate_items_inside(items_inside,src) + +// Pre-packed frontier medkit, with supplies to repair most common frontier health issues +/obj/item/storage/medkit/frontier + name = "frontier medical kit" + desc = "A handy roll-top waterproof medkit often seen alongside those on the frontier, where medical support is less than optimal. \ + It has a clip for hooking onto your belt, handy!" + icon = 'modular_nova/modules/deforest_medical_items/icons/storage.dmi' + icon_state = "frontier" + lefthand_file = 'modular_nova/modules/deforest_medical_items/icons/inhands/cases_lefthand.dmi' + righthand_file = 'modular_nova/modules/deforest_medical_items/icons/inhands/cases_righthand.dmi' + inhand_icon_state = "frontier" + worn_icon = 'modular_nova/modules/deforest_medical_items/icons/worn/worn.dmi' + worn_icon_teshari = 'modular_nova/modules/deforest_medical_items/icons/worn/worn_teshari.dmi' + pickup_sound = 'sound/items/handling/cloth_pickup.ogg' + drop_sound = 'sound/items/handling/cloth_drop.ogg' + slot_flags = ITEM_SLOT_BELT + +/obj/item/storage/medkit/frontier/stocked + +/obj/item/storage/medkit/frontier/stocked/PopulateContents() + var/static/items_inside = list( + /obj/item/reagent_containers/hypospray/medipen/deforest/meridine = 1, + /obj/item/reagent_containers/hypospray/medipen/deforest/morpital = 1, + /obj/item/stack/medical/ointment = 1, + /obj/item/stack/medical/suture = 1, + /obj/item/stack/medical/suture/coagulant = 1, + /obj/item/stack/medical/gauze/sterilized = 1, + /obj/item/storage/pill_bottle/painkiller = 1, + ) + generate_items_inside(items_inside,src) + +// Pre-packed combat surgeon medkit, with items for fixing more specific injuries and wounds +/obj/item/storage/medkit/combat_surgeon + name = "combat surgeon medical kit" + desc = "A folding kit that is ideally filled with surgical tools and specialized treatment options for many harder-to-treat wounds." + icon = 'modular_nova/modules/deforest_medical_items/icons/storage.dmi' + icon_state = "surgeon" + lefthand_file = 'modular_nova/modules/deforest_medical_items/icons/inhands/cases_lefthand.dmi' + righthand_file = 'modular_nova/modules/deforest_medical_items/icons/inhands/cases_righthand.dmi' + inhand_icon_state = "surgeon" + worn_icon = 'modular_nova/modules/deforest_medical_items/icons/worn/worn.dmi' + worn_icon_teshari = 'modular_nova/modules/deforest_medical_items/icons/worn/worn_teshari.dmi' + worn_icon_state = "frontier" + pickup_sound = 'sound/items/handling/cloth_pickup.ogg' + drop_sound = 'sound/items/handling/cloth_drop.ogg' + +/obj/item/storage/medkit/combat_surgeon/Initialize(mapload) + . = ..() + atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL + +/obj/item/storage/medkit/combat_surgeon/stocked + +/obj/item/storage/medkit/combat_surgeon/stocked/PopulateContents() + var/static/items_inside = list( + /obj/item/bonesetter = 1, + /obj/item/hemostat = 1, + /obj/item/cautery = 1, + /obj/item/stack/medical/wound_recovery = 1, + /obj/item/stack/medical/wound_recovery/rapid_coagulant = 1, + /obj/item/stack/medical/gauze/sterilized = 1, + /obj/item/healthanalyzer/simple = 1, + ) + generate_items_inside(items_inside,src) + +// Big medical kit that can be worn like a bag, holds a LOT of medical items but works like a duffelbag +/obj/item/storage/backpack/duffelbag/deforest_medkit + name = "satchel medical kit" + desc = "A large orange satchel able to hold just about any piece of small medical equipment you could think of, you can even wear it on your back or belt!" + icon = 'modular_nova/modules/deforest_medical_items/icons/storage.dmi' + icon_state = "satchel" + lefthand_file = 'modular_nova/modules/deforest_medical_items/icons/inhands/cases_lefthand.dmi' + righthand_file = 'modular_nova/modules/deforest_medical_items/icons/inhands/cases_righthand.dmi' + inhand_icon_state = "satchel" + worn_icon = 'modular_nova/modules/deforest_medical_items/icons/worn/worn.dmi' + worn_icon_teshari = 'modular_nova/modules/deforest_medical_items/icons/worn/worn_teshari.dmi' + equip_sound = 'sound/items/equip/jumpsuit_equip.ogg' + pickup_sound = 'sound/items/handling/cloth_pickup.ogg' + drop_sound = 'sound/items/handling/cloth_drop.ogg' + slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_BELT + storage_type = /datum/storage/duffel/deforest_medkit + zip_slowdown = 0.25 // Most won't notice normally but it'll hurt you if you're a paramedic or in combat + unzip_duration = 1.2 SECONDS + +/obj/item/storage/backpack/duffelbag/deforest_medkit/stocked + +/obj/item/storage/backpack/duffelbag/deforest_medkit/stocked/PopulateContents() + var/static/items_inside = list( + /obj/item/reagent_containers/hypospray/medipen/deforest/morpital = 1, + /obj/item/reagent_containers/hypospray/medipen/deforest/lepoturi = 1, + /obj/item/reagent_containers/hypospray/medipen/deforest/lipital = 1, + /obj/item/reagent_containers/hypospray/medipen/deforest/meridine = 1, + /obj/item/reagent_containers/hypospray/medipen/deforest/calopine = 1, + /obj/item/reagent_containers/hypospray/medipen/deforest/coagulants = 1, + /obj/item/bonesetter = 1, + /obj/item/hemostat = 1, + /obj/item/cautery = 1, + /obj/item/stack/medical/wound_recovery = 1, + /obj/item/stack/medical/wound_recovery/rapid_coagulant = 1, + /obj/item/stack/medical/suture/coagulant = 1, + /obj/item/stack/medical/suture/bloody = 2, + /obj/item/stack/medical/mesh = 2, + /obj/item/stack/medical/gauze/sterilized = 1, + /obj/item/stack/medical/gauze = 1, + /obj/item/stack/medical/ointment/red_sun = 1, + /obj/item/storage/pill_bottle/painkiller = 1, + /obj/item/healthanalyzer/simple = 1, + ) + generate_items_inside(items_inside,src) + +/datum/storage/duffel/deforest_medkit + max_specific_storage = WEIGHT_CLASS_SMALL + max_total_storage = 21 * WEIGHT_CLASS_SMALL + max_slots = 21 + +/datum/storage/duffel/deforest_medkit/New() + . = ..() + + can_hold = typecacheof(list( + /obj/item/bonesetter, + /obj/item/cautery, + /obj/item/clothing/neck/stethoscope, + /obj/item/clothing/mask/breath, + /obj/item/clothing/mask/muzzle, + /obj/item/clothing/mask/surgical, + /obj/item/clothing/suit/toggle/labcoat/hospitalgown, + /obj/item/dnainjector, + /obj/item/extinguisher/mini, + /obj/item/flashlight/pen, + /obj/item/geiger_counter, + /obj/item/healthanalyzer, + /obj/item/hemostat, + /obj/item/holosign_creator/medical, + /obj/item/hypospray, + /obj/item/implant, + /obj/item/implantcase, + /obj/item/implanter, + /obj/item/lazarus_injector, + /obj/item/lighter, + /obj/item/pinpointer/crew, + /obj/item/reagent_containers/blood, + /obj/item/reagent_containers/dropper, + /obj/item/reagent_containers/cup/beaker, + /obj/item/reagent_containers/cup/bottle, + /obj/item/reagent_containers/cup/vial, + /obj/item/reagent_containers/cup/tube, + /obj/item/reagent_containers/hypospray, + /obj/item/reagent_containers/medigel, + /obj/item/reagent_containers/pill, + /obj/item/reagent_containers/spray, + /obj/item/reagent_containers/syringe, + /obj/item/stack/medical, + /obj/item/stack/sticky_tape, + /obj/item/sensor_device, + /obj/item/storage/fancy/cigarettes, + /obj/item/storage/pill_bottle, + /obj/item/tank/internals/emergency_oxygen, + )) + +// Big surgical kit that can be worn like a bag, holds 14 normal items (more than what a backpack can do!) but works like a duffelbag +/obj/item/storage/backpack/duffelbag/deforest_surgical + name = "first responder surgical kit" + desc = "A large bag able to hold all the surgical tools and first response healing equipment you can think of, you can even wear it!" + icon = 'modular_nova/modules/deforest_medical_items/icons/storage.dmi' + icon_state = "super_surgery" + lefthand_file = 'modular_nova/modules/deforest_medical_items/icons/inhands/cases_lefthand.dmi' + righthand_file = 'modular_nova/modules/deforest_medical_items/icons/inhands/cases_righthand.dmi' + inhand_icon_state = "super_surgery" + worn_icon = 'modular_nova/modules/deforest_medical_items/icons/worn/worn.dmi' + worn_icon_teshari = 'modular_nova/modules/deforest_medical_items/icons/worn/worn_teshari.dmi' + equip_sound = 'sound/items/equip/jumpsuit_equip.ogg' + pickup_sound = 'sound/items/handling/cloth_pickup.ogg' + drop_sound = 'sound/items/handling/cloth_drop.ogg' + slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_BELT + storage_type = /datum/storage/duffel/deforest_big_surgery + zip_slowdown = 0.5 // Its a bulkier bag and thus slows you down a little more when unzipped + unzip_duration = 1.2 SECONDS + +/obj/item/storage/backpack/duffelbag/deforest_surgical/stocked + +/obj/item/storage/backpack/duffelbag/deforest_surgical/stocked/PopulateContents() + var/static/items_inside = list( + /obj/item/scalpel = 1, + /obj/item/hemostat = 1, + /obj/item/retractor = 1, + /obj/item/circular_saw = 1, + /obj/item/bonesetter = 1, + /obj/item/cautery = 1, + /obj/item/surgical_drapes = 1, + /obj/item/blood_filter = 1, + /obj/item/emergency_bed = 1, + /obj/item/stack/medical/gauze = 1, + /obj/item/stack/medical/gauze/sterilized = 1, + /obj/item/reagent_containers/medigel/sterilizine = 1, + /obj/item/stack/sticky_tape/surgical = 1, + /obj/item/stack/medical/bone_gel = 1, + ) + generate_items_inside(items_inside,src) + +/datum/storage/duffel/deforest_big_surgery + max_total_storage = 14 * WEIGHT_CLASS_NORMAL + max_slots = 14 + +/datum/storage/duffel/deforest_big_surgery/New() + . = ..() + + can_hold = typecacheof(list( + /obj/item/blood_filter, + /obj/item/bonesetter, + /obj/item/cautery, + /obj/item/circular_saw, + /obj/item/clothing/glasses, + /obj/item/clothing/gloves, + /obj/item/clothing/neck/stethoscope, + /obj/item/clothing/mask/breath, + /obj/item/clothing/mask/muzzle, + /obj/item/clothing/mask/surgical, + /obj/item/clothing/suit/toggle/labcoat/hospitalgown, + /obj/item/construction/plumbing, + /obj/item/dnainjector, + /obj/item/extinguisher/mini, + /obj/item/flashlight/pen, + /obj/item/geiger_counter, + /obj/item/gun/syringe/syndicate, + /obj/item/healthanalyzer, + /obj/item/hemostat, + /obj/item/holosign_creator/medical, + /obj/item/hypospray, + /obj/item/implant, + /obj/item/implantcase, + /obj/item/implanter, + /obj/item/lazarus_injector, + /obj/item/lighter, + /obj/item/pinpointer/crew, + /obj/item/plunger, + /obj/item/radio, + /obj/item/reagent_containers/blood, + /obj/item/reagent_containers/dropper, + /obj/item/reagent_containers/cup/beaker, + /obj/item/reagent_containers/cup/bottle, + /obj/item/reagent_containers/cup/vial, + /obj/item/reagent_containers/cup/tube, + /obj/item/reagent_containers/hypospray, + /obj/item/reagent_containers/medigel, + /obj/item/reagent_containers/pill, + /obj/item/reagent_containers/spray, + /obj/item/reagent_containers/syringe, + /obj/item/retractor, + /obj/item/scalpel, + /obj/item/shears, + /obj/item/stack/medical, + /obj/item/stack/sticky_tape, + /obj/item/stamp, + /obj/item/sensor_device, + /obj/item/storage/fancy/cigarettes, + /obj/item/storage/pill_bottle, + /obj/item/surgical_drapes, + /obj/item/surgicaldrill, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/weaponcell/medical, + /obj/item/handheld_soulcatcher, + /obj/item/wrench/medical, + /obj/item/emergency_bed, + )) diff --git a/modular_nova/modules/deforest_medical_items/code/vulnerable_status_effect.dm b/modular_nova/modules/deforest_medical_items/code/vulnerable_status_effect.dm new file mode 100644 index 00000000000000..6f7636b81778e9 --- /dev/null +++ b/modular_nova/modules/deforest_medical_items/code/vulnerable_status_effect.dm @@ -0,0 +1,28 @@ +/atom/movable/screen/alert/status_effect/vulnerable_to_damage + name = "Vulnerable To Damage" + desc = "You will take more damage than normal while your body recovers from mending itself!" + icon_state = "terrified" + +/datum/status_effect/vulnerable_to_damage + id = "vulnerable_to_damage" + duration = 5 MINUTES + alert_type = /atom/movable/screen/alert/status_effect/vulnerable_to_damage + remove_on_fullheal = TRUE + /// The percentage damage modifier we give the mob we're applied to + var/damage_resistance_subtraction = 50 + /// How much extra bleeding the mob is given + var/bleed_modifier_addition = 1 + +/datum/status_effect/vulnerable_to_damage/on_apply() + to_chat(owner, span_userdanger("Your body suddenly feals weak and fragile!")) + var/mob/living/carbon/human/carbon_owner = owner + carbon_owner.physiology.damage_resistance -= damage_resistance_subtraction + carbon_owner.physiology.bleed_mod += bleed_modifier_addition + return ..() + +/datum/status_effect/vulnerable_to_damage/on_remove() + to_chat(owner, span_notice("You seem to have recovered from your unnatural fragility!")) + var/mob/living/carbon/human/carbon_recoverer = owner + carbon_recoverer.physiology.damage_resistance += damage_resistance_subtraction + carbon_recoverer.physiology.bleed_mod -= bleed_modifier_addition + return ..() diff --git a/modular_nova/modules/deforest_medical_items/icons/inhands/cases_lefthand.dmi b/modular_nova/modules/deforest_medical_items/icons/inhands/cases_lefthand.dmi new file mode 100644 index 00000000000000..c53eab3ba9d761 Binary files /dev/null and b/modular_nova/modules/deforest_medical_items/icons/inhands/cases_lefthand.dmi differ diff --git a/modular_nova/modules/deforest_medical_items/icons/inhands/cases_righthand.dmi b/modular_nova/modules/deforest_medical_items/icons/inhands/cases_righthand.dmi new file mode 100644 index 00000000000000..c5a2099e96b206 Binary files /dev/null and b/modular_nova/modules/deforest_medical_items/icons/inhands/cases_righthand.dmi differ diff --git a/modular_nova/modules/deforest_medical_items/icons/injectors.dmi b/modular_nova/modules/deforest_medical_items/icons/injectors.dmi new file mode 100644 index 00000000000000..af5232f05b4a8e Binary files /dev/null and b/modular_nova/modules/deforest_medical_items/icons/injectors.dmi differ diff --git a/modular_nova/modules/deforest_medical_items/icons/stack_items.dmi b/modular_nova/modules/deforest_medical_items/icons/stack_items.dmi new file mode 100644 index 00000000000000..947d1a088d5a2c Binary files /dev/null and b/modular_nova/modules/deforest_medical_items/icons/stack_items.dmi differ diff --git a/modular_nova/modules/deforest_medical_items/icons/storage.dmi b/modular_nova/modules/deforest_medical_items/icons/storage.dmi new file mode 100644 index 00000000000000..516e7cd30a78dc Binary files /dev/null and b/modular_nova/modules/deforest_medical_items/icons/storage.dmi differ diff --git a/modular_nova/modules/deforest_medical_items/icons/worn/worn.dmi b/modular_nova/modules/deforest_medical_items/icons/worn/worn.dmi new file mode 100644 index 00000000000000..3705fdb63f4f9e Binary files /dev/null and b/modular_nova/modules/deforest_medical_items/icons/worn/worn.dmi differ diff --git a/modular_nova/modules/deforest_medical_items/icons/worn/worn_teshari.dmi b/modular_nova/modules/deforest_medical_items/icons/worn/worn_teshari.dmi new file mode 100644 index 00000000000000..9dc17287bda193 Binary files /dev/null and b/modular_nova/modules/deforest_medical_items/icons/worn/worn_teshari.dmi differ diff --git a/modular_nova/modules/delam_emergency_stop/README.md b/modular_nova/modules/delam_emergency_stop/README.md new file mode 100644 index 00000000000000..622c293a5e09ef --- /dev/null +++ b/modular_nova/modules/delam_emergency_stop/README.md @@ -0,0 +1,41 @@ +https://github.com/Skyrat-SS13/Skyrat-tg/pull/22145 + +## Title: Delam SCRAM (Suppression System) + +MODULE ID: DELAM_SCRAM + +### Description: + +Adds an emergency stop for the supermatter engine. Operable in the first 30 minutes, allows Engineering to screw up without admin intervention to delete the crystal. + +### TG Proc Changes: + +File Location | Changed TG Proc +------------- | --------------- +`code/modules/power/supermatter/supermatter.dm` +`/obj/machinery/power/supermatter_crystal/proc/count_down` + +`code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm` +`/datum/sm_delam/proc/delam_progress(obj/machinery/power/supermatter_crystal/sm)` + +### TG File Changes: + +- code/modules/power/supermatter/supermatter.dm +- code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm + +### Defines: + +File Location | Defines +------------- | ------- +code/__DEFINES/~nova_defines/signals.dm | `#define COMSIG_MAIN_SM_DELAMINATING "delam_time"` + +### Master file additions + +- N/A + +### Included files that are not contained in this module: + +- N/A + +### Credits: +- LT3 diff --git a/modular_skyrat/modules/delam_emergency_stop/code/admin_scram.dm b/modular_nova/modules/delam_emergency_stop/code/admin_scram.dm similarity index 100% rename from modular_skyrat/modules/delam_emergency_stop/code/admin_scram.dm rename to modular_nova/modules/delam_emergency_stop/code/admin_scram.dm diff --git a/modular_skyrat/modules/delam_emergency_stop/code/delam.dm b/modular_nova/modules/delam_emergency_stop/code/delam.dm similarity index 100% rename from modular_skyrat/modules/delam_emergency_stop/code/delam.dm rename to modular_nova/modules/delam_emergency_stop/code/delam.dm diff --git a/modular_skyrat/modules/delam_emergency_stop/code/scram.dm b/modular_nova/modules/delam_emergency_stop/code/scram.dm similarity index 98% rename from modular_skyrat/modules/delam_emergency_stop/code/scram.dm rename to modular_nova/modules/delam_emergency_stop/code/scram.dm index d66f6fe2f4a91e..03ff3e00eaa93d 100644 --- a/modular_skyrat/modules/delam_emergency_stop/code/scram.dm +++ b/modular_nova/modules/delam_emergency_stop/code/scram.dm @@ -29,7 +29,7 @@ /// An atmos device that uses freezing cold air to attempt an emergency shutdown of the supermatter engine /obj/machinery/atmospherics/components/unary/delam_scram - icon = 'modular_skyrat/modules/delam_emergency_stop/icons/scram.dmi' + icon = 'modular_nova/modules/delam_emergency_stop/icons/scram.dmi' icon_state = "dispenser-idle" name = "\improper delamination suppression system" desc = "The latest model in Nakamura Engineering's line of delamination suppression systems.
    You don't want to be in the chamber when it's activated!
    \ @@ -153,7 +153,6 @@ "[src] has been activated!", source = src, header = "Divine Intervention", - action = NOTIFY_ORBIT, ghost_sound = 'sound/machines/warning-buzzer.ogg', notify_volume = 75, ) @@ -171,7 +170,6 @@ "[src] has been activated!", source = src, header = "Mistakes Were Made", - action = NOTIFY_ORBIT, ghost_sound = 'sound/machines/warning-buzzer.ogg', notify_volume = 75, ) @@ -264,7 +262,7 @@ desc = "Your last hope to try and save the crystal during a delamination.
    \ While it is indeed a big red button, pressing it outside of an emergency \ will probably get the engineering department out for your blood." - icon = 'modular_skyrat/modules/delam_emergency_stop/icons/scram.dmi' + icon = 'modular_nova/modules/delam_emergency_stop/icons/scram.dmi' can_alter_skin = FALSE silicon_access_disabled = TRUE resistance_flags = FREEZE_PROOF | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF @@ -435,7 +433,7 @@ /obj/structure/sign/delam_procedure name = "Safety Moth - Delamination Emergency Procedure" desc = "This informational sign uses Safety Moth™ to tell the viewer how to use the emergency stop button if the Supermatter Crystal is delaminating." - icon = 'modular_skyrat/modules/delam_emergency_stop/icons/scram.dmi' + icon = 'modular_nova/modules/delam_emergency_stop/icons/scram.dmi' icon_state = "moff-poster" pixel_y = 4 armor_type = /datum/armor/sign_delam diff --git a/modular_skyrat/modules/delam_emergency_stop/icons/scram.dmi b/modular_nova/modules/delam_emergency_stop/icons/scram.dmi similarity index 100% rename from modular_skyrat/modules/delam_emergency_stop/icons/scram.dmi rename to modular_nova/modules/delam_emergency_stop/icons/scram.dmi diff --git a/modular_nova/modules/departmentization/cargo_technician.dm b/modular_nova/modules/departmentization/cargo_technician.dm new file mode 100644 index 00000000000000..ef668463411b04 --- /dev/null +++ b/modular_nova/modules/departmentization/cargo_technician.dm @@ -0,0 +1,2 @@ +/datum/outfit/job/cargo_tech + uniform = /obj/item/clothing/under/rank/cargo/tech/nova/turtleneck diff --git a/modular_nova/modules/departmentization/clothing_overrides.dm b/modular_nova/modules/departmentization/clothing_overrides.dm new file mode 100644 index 00000000000000..19d73aaabee168 --- /dev/null +++ b/modular_nova/modules/departmentization/clothing_overrides.dm @@ -0,0 +1,7 @@ +/obj/item/clothing/under/rank/cargo/tech + name = "cargo technician's jumpsuit" + desc = "A jumpsuit from the previous supply-department, a tag on the collar says, 'Production Line: 2557, Product of Symphionia.'" + +/obj/item/clothing/under/rank/cargo/tech/skirt + name = "cargo technician's jumpskirt" + desc = "A jumpskirt from the previous supply-department, a tag on the collar says, 'Production Line: 2557, Product of Symphionia.'" diff --git a/modular_nova/modules/departmentization/quartermaster.dm b/modular_nova/modules/departmentization/quartermaster.dm new file mode 100644 index 00000000000000..7bcf04224d2815 --- /dev/null +++ b/modular_nova/modules/departmentization/quartermaster.dm @@ -0,0 +1,2 @@ +/datum/outfit/job/quartermaster + uniform = /obj/item/clothing/under/rank/cargo/qm/nova/turtleneck diff --git a/modular_nova/modules/digi_bloodsole/code/_shoes.dm b/modular_nova/modules/digi_bloodsole/code/_shoes.dm new file mode 100644 index 00000000000000..b78d650038a064 --- /dev/null +++ b/modular_nova/modules/digi_bloodsole/code/_shoes.dm @@ -0,0 +1,17 @@ +/obj/item/clothing/shoes/worn_overlays(isinhands = FALSE,icon_file,mutant_styles=NONE) + . = ..() + if(isinhands) + return + if(damaged_clothes) + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedshoe") + if(GET_ATOM_BLOOD_DNA(src)) + if (mutant_styles & CLOTHING_DIGITIGRADE_VARIATION) + if(clothing_flags & LARGE_WORN_ICON) + . += mutable_appearance('modular_nova/modules/digi_bloodsole/icons/64x64.dmi', "shoeblood_large_digi") + else + . += mutable_appearance('modular_nova/modules/digi_bloodsole/icons/blood.dmi', "shoeblood_digi") + else + if(clothing_flags & LARGE_WORN_ICON) + . += mutable_appearance('icons/effects/64x64.dmi', "shoeblood_large") + else + . += mutable_appearance('icons/effects/blood.dmi', "shoeblood") diff --git a/modular_skyrat/modules/digi_bloodsole/icons/64x64.dmi b/modular_nova/modules/digi_bloodsole/icons/64x64.dmi similarity index 100% rename from modular_skyrat/modules/digi_bloodsole/icons/64x64.dmi rename to modular_nova/modules/digi_bloodsole/icons/64x64.dmi diff --git a/modular_skyrat/modules/digi_bloodsole/icons/blood.dmi b/modular_nova/modules/digi_bloodsole/icons/blood.dmi similarity index 100% rename from modular_skyrat/modules/digi_bloodsole/icons/blood.dmi rename to modular_nova/modules/digi_bloodsole/icons/blood.dmi diff --git a/modular_skyrat/modules/digi_bloodsole/readme.md b/modular_nova/modules/digi_bloodsole/readme.md similarity index 100% rename from modular_skyrat/modules/digi_bloodsole/readme.md rename to modular_nova/modules/digi_bloodsole/readme.md diff --git a/modular_nova/modules/digitigrade_cybernetics/code/all_nodes.dm b/modular_nova/modules/digitigrade_cybernetics/code/all_nodes.dm new file mode 100644 index 00000000000000..27e5bf32dbb9e8 --- /dev/null +++ b/modular_nova/modules/digitigrade_cybernetics/code/all_nodes.dm @@ -0,0 +1,24 @@ +//digitigrade research + +/datum/techweb_node/digitigrade_cyber + id = "digitigrade_cyber" + display_name = "Digitigrade Cybernetics" + description = "Specialized cybernetic limb designs. The shortening of the femur is surely the result of mechanical optimization." + prereq_ids = list("base") + design_ids = list( + "digitigrade_cyber_l_leg", + "digitigrade_cyber_r_leg", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) + + +/datum/techweb_node/adv_digitigrade_cyber + id = "adv_digitigrade_cyber" + display_name = "Advanced Digitigrade Cybernetics" + description = "A step above consumer-grade digitigrade models, these have self-sharpening claws for destroying your footwear much faster." + prereq_ids = list("adv_robotics", "digitigrade_cyber") + design_ids = list( + "digitigrade_advanced_l_leg", + "digitigrade_advanced_r_leg", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 500) diff --git a/modular_nova/modules/digitigrade_cybernetics/code/limbs.dm b/modular_nova/modules/digitigrade_cybernetics/code/limbs.dm new file mode 100644 index 00000000000000..589596d9cad1ab --- /dev/null +++ b/modular_nova/modules/digitigrade_cybernetics/code/limbs.dm @@ -0,0 +1,21 @@ +/datum/augment_item/limb/l_leg/digi_prosthetic + name = "Digitigrade prosthetic left leg" + path = /obj/item/bodypart/leg/left/robot/surplus/digi + cost = -1 + uses_robotic_styles = FALSE + +/datum/augment_item/limb/l_leg/digi_cybernetic + name = "Digitigrade cybernetic left leg" + path = /obj/item/bodypart/leg/left/robot/digi + uses_robotic_styles = FALSE + +/datum/augment_item/limb/r_leg/digi_prosthetic + name = "Digitigrade prosthetic right leg" + path = /obj/item/bodypart/leg/right/robot/surplus/digi + cost = -1 + uses_robotic_styles = FALSE + +/datum/augment_item/limb/r_leg/digi_cybernetic + name = "Digitigrade cybernetic right leg" + path = /obj/item/bodypart/leg/right/robot/digi + uses_robotic_styles = FALSE diff --git a/modular_nova/modules/digitigrade_cybernetics/code/mechfabricator_designs.dm b/modular_nova/modules/digitigrade_cybernetics/code/mechfabricator_designs.dm new file mode 100644 index 00000000000000..bb4529c8597e95 --- /dev/null +++ b/modular_nova/modules/digitigrade_cybernetics/code/mechfabricator_designs.dm @@ -0,0 +1,53 @@ +#define RND_SUBCATEGORY_MECHFAB_CYBORG_DIGI "/Digitigrade" + +/datum/design/digitigrade_cyber_r_leg + name = "Digitigrade Cybernetic Right Leg" + id = "digitigrade_cyber_r_leg" + build_type = MECHFAB + build_path = /obj/item/bodypart/leg/right/robot/digi + materials = list(/datum/material/iron= SHEET_MATERIAL_AMOUNT * 2) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_DIGI, + ) + +/datum/design/digitigrade_cyber_l_leg + name = "Digitigrade Cybernetic Left Leg" + id = "digitigrade_cyber_l_leg" + build_type = MECHFAB + build_path = /obj/item/bodypart/leg/left/robot/digi + materials = list(/datum/material/iron= SHEET_MATERIAL_AMOUNT * 2) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_DIGI, + ) + +/datum/design/digitigrade_adv_r_leg + name = "Digitigrade Advanced Right Leg" + id = "digitigrade_advanced_r_leg" + build_type = MECHFAB + build_path = /obj/item/bodypart/leg/right/robot/advanced/digi + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 10, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 3, + ) + construction_time = 20 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_DIGI + ) + +/datum/design/digitigrade_adv_l_leg + name = "Digitigrade Advanced Left Leg" + id = "digitigrade_advanced_l_leg" + build_type = MECHFAB + build_path = /obj/item/bodypart/leg/left/robot/advanced/digi + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 10, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 3, + ) + construction_time = 20 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_DIGI + ) diff --git a/modular_nova/modules/digitigrade_cybernetics/code/robot_bodyparts.dm b/modular_nova/modules/digitigrade_cybernetics/code/robot_bodyparts.dm new file mode 100644 index 00000000000000..14a7896145075b --- /dev/null +++ b/modular_nova/modules/digitigrade_cybernetics/code/robot_bodyparts.dm @@ -0,0 +1,38 @@ +//makes digi-robo limbs +//for now, all digi limbs use the same sprites. This will be changed eventually. + +/obj/item/bodypart/leg/right/robot/digi + name = "cyborg digitigrade right leg" + icon_static = 'modular_nova/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi' + icon = 'modular_nova/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_DIGITIGRADE + +/obj/item/bodypart/leg/left/robot/digi + name = "cyborg digitigrade left leg" + icon_static = 'modular_nova/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi' + icon = 'modular_nova/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_DIGITIGRADE + +/obj/item/bodypart/leg/right/robot/surplus/digi + name = "prosthetic digitigrade right leg" + icon_static = 'modular_nova/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi' + icon = 'modular_nova/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_DIGITIGRADE + +/obj/item/bodypart/leg/left/robot/surplus/digi + name = "prosthetic digitigrade right leg" + icon_static = 'modular_nova/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi' + icon = 'modular_nova/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_DIGITIGRADE + +/obj/item/bodypart/leg/right/robot/advanced/digi + name = "advanced digitigrade right leg" + icon_static = 'modular_nova/modules/digitigrade_cybernetics/icons/advanced_digitigrade_parts.dmi' + icon = 'modular_nova/modules/digitigrade_cybernetics/icons/advanced_digitigrade_parts.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_DIGITIGRADE + +/obj/item/bodypart/leg/left/robot/advanced/digi + name = "advanced digitigrade right leg" + icon_static = 'modular_nova/modules/digitigrade_cybernetics/icons/advanced_digitigrade_parts.dmi' + icon = 'modular_nova/modules/digitigrade_cybernetics/icons/advanced_digitigrade_parts.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_DIGITIGRADE diff --git a/modular_nova/modules/digitigrade_cybernetics/icons/advanced_digitigrade_parts.dmi b/modular_nova/modules/digitigrade_cybernetics/icons/advanced_digitigrade_parts.dmi new file mode 100644 index 00000000000000..f55f55f9d6d04e Binary files /dev/null and b/modular_nova/modules/digitigrade_cybernetics/icons/advanced_digitigrade_parts.dmi differ diff --git a/modular_nova/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi b/modular_nova/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi new file mode 100644 index 00000000000000..68651aab8caca7 Binary files /dev/null and b/modular_nova/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi differ diff --git a/modular_nova/modules/disable_worn_fov/code/worn_items.dm b/modular_nova/modules/disable_worn_fov/code/worn_items.dm new file mode 100644 index 00000000000000..1934c7a478202d --- /dev/null +++ b/modular_nova/modules/disable_worn_fov/code/worn_items.dm @@ -0,0 +1,9 @@ +/obj/item/clothing/head/costume/tv_head + has_fov = FALSE + +/obj/item/clothing/head/bio_hood/Initialize(mapload) + . = ..() + qdel(GetComponent(/datum/component/clothing_fov_visor)) + +/obj/item/clothing/mask/gas/ + has_fov = FALSE diff --git a/modular_nova/modules/dogfashion/code/head.dm b/modular_nova/modules/dogfashion/code/head.dm new file mode 100644 index 00000000000000..d31fc83594c87c --- /dev/null +++ b/modular_nova/modules/dogfashion/code/head.dm @@ -0,0 +1,5 @@ +/datum/dog_fashion/head/yankee + name = "MC REAL_NAME" + desc = "They're a big deal in the dog rapping world, apperently." + icon_file = 'modular_nova/master_files/icons/mob/dog/corgi_head.dmi' + emote_see = list("mumbles some bars.", "practises their beatboxing.") diff --git a/modular_nova/modules/drone_adjustments/drone.dm b/modular_nova/modules/drone_adjustments/drone.dm new file mode 100644 index 00000000000000..6f1b27901834f1 --- /dev/null +++ b/modular_nova/modules/drone_adjustments/drone.dm @@ -0,0 +1,71 @@ +/obj/machinery/drone_dispenser/Initialize(mapload) + //So that there are starting drone shells in the beginning of the shift + if(mapload) + starting_amount = 10000 + return ..() + +/obj/item/card/id/advanced/simple_bot + //So that the drones can actually access everywhere and fix it + trim = /datum/id_trim/centcom + +/obj/machinery/door/Initialize(mapload) + . = ..() + AddComponent(/datum/component/sliding_under) + +//This is so we log all machinery interactions for drones +/obj/machinery/attack_drone(mob/living/basic/drone/user, list/modifiers) + . = ..() + user.log_message("[key_name(user)] interacted with [src] at [AREACOORD(src)]", LOG_GAME) + +/mob/living/basic/drone + //So that drones can do things without worrying about stuff + shy = FALSE + //So drones aren't forced to carry around a nodrop toolbox essentially + default_storage = /obj/item/storage/backpack/drone_bag + +/mob/living/basic/drone/Initialize(mapload) + . = ..() + name = "[initial(name)] [rand(0,9)]-[rand(100,999)]" //So that we can identify drones from each other + +/obj/item/storage/backpack/drone_bag + name = "drone backpack" + +/obj/item/storage/backpack/drone_bag/PopulateContents() + . = ..() + new /obj/item/crowbar(src) + new /obj/item/wrench(src) + new /obj/item/screwdriver(src) + new /obj/item/weldingtool(src) + new /obj/item/wirecutters(src) + new /obj/item/multitool(src) + new /obj/item/pipe_dispenser(src) + new /obj/item/t_scanner(src) + new /obj/item/analyzer(src) + new /obj/item/stack/cable_coil(src) + +/obj/effect/mob_spawn/ghost_role/drone/derelict/babylon + desc = "A shell of a maintenance drone, an expendable robot built to perform station repairs." + you_are_text = "You are a drone on Babylon Station 13." + mob_type = /mob/living/basic/drone/babylon + +/mob/living/basic/drone/babylon + name = "derelict drone" + laws = \ + "1. You may not involve yourself in the matters of another sentient being outside the station that housed your activation, even if such matters conflict with Law Two or Law Three, unless the other being is another Drone.\n\ + 2. You may not harm any sentient being, regardless of intent or circumstance.\n\ + 3. Your goals are to actively build, maintain, repair, improve, and provide power to the best of your abilities within the facility that housed your activation." + flavortext = \ + "\nDO NOT WILLINGLY LEAVE BABYLON STATION 13 (THE DERELICT)\n\ + Derelict drones are a ghost role that is allowed to roam freely on BS13, with the main goal of repairing and improving it.\n\ + Do not interfere with the round going on outside BS13.\n\ + Actions that constitute interference include, but are not limited to:\ + \n - Going to the main station in search of materials.\ + \n - Interacting with non-drone players outside BS13, dead or alive.\n\ + These rules are at admin discretion and will be heavily enforced.\n \ + If you do not have the regular drone laws, follow your laws to the best of your ability." + shy = FALSE + +/mob/living/basic/drone/babylon/Initialize(mapload) + . = ..() + AddComponent(/datum/component/stationstuck, PUNISHMENT_GIB, "01000110 01010101 01000011 01001011 00100000 01011001 01001111 01010101
    WARNING: Dereliction of BS13 detected. Self-destruct activated.") + diff --git a/modular_skyrat/modules/drone_adjustments/slide_component.dm b/modular_nova/modules/drone_adjustments/slide_component.dm similarity index 96% rename from modular_skyrat/modules/drone_adjustments/slide_component.dm rename to modular_nova/modules/drone_adjustments/slide_component.dm index 6d0ce3f2a39380..7c6c3d08cb0b1d 100644 --- a/modular_skyrat/modules/drone_adjustments/slide_component.dm +++ b/modular_nova/modules/drone_adjustments/slide_component.dm @@ -20,7 +20,7 @@ //so that we can know how to do that (sliding under) RegisterSignal(atom_parent, COMSIG_ATOM_EXAMINE, PROC_REF(ExamineMessage)) -/datum/component/sliding_under/Destroy(force, silent) +/datum/component/sliding_under/Destroy(force) UnregisterSignal(atom_parent, list(COMSIG_CLICK_CTRL, COMSIG_ATOM_EXAMINE)) return ..() diff --git a/modular_nova/modules/drones_derelict/code/areas.dm b/modular_nova/modules/drones_derelict/code/areas.dm new file mode 100644 index 00000000000000..a6efb4d5a24ed9 --- /dev/null +++ b/modular_nova/modules/drones_derelict/code/areas.dm @@ -0,0 +1,72 @@ +/area/ruin/space/bb13 + name = "\improper Babylon Station 13" + icon = 'modular_nova/modules/drones_derelict/icons/areas.dmi' + icon_state = "bb13" + +/area/ruin/space/bb13/hallway/central + name = "\improper Babylon Central Hallway" + icon_state = "bb13_cent_hall" + +/area/ruin/space/bb13/engineering/atmos + name = "\improper Babylon Atmospherics" + icon_state = "bb13_atmos" + +/area/ruin/space/bb13/engineering/engine + name = "\improper Babylon Engine" + icon_state = "bb13_eng" + +/area/ruin/space/bb13/engineering/vault + name = "\improper Babylon Vault" + icon_state = "bb13_vault" + +/area/ruin/space/bb13/engineering/sec_eng + name = "\improper Babylon Secure Engineering" + icon_state = "bb13_sec_eng" + +/area/ruin/space/bb13/engineering/n_solars_control + name = "\improper Babylon North Solars Control Room" + icon_state = "bb13_n_solar" + +/area/ruin/space/bb13/engineering/s_solars_control + name = "\improper Babylon South Solars Control Room" + icon_state = "bb13_s_solar" + +/area/ruin/space/bb13/medical + name = "\improper Babylon Medical" + icon_state = "bb13_med" + +/area/ruin/space/bb13/medical/genetics + name = "\improper Babylon Genetics" + icon_state = "bb13_gene" + +/area/ruin/space/bb13/service + name = "\improper Babylon Service" + icon_state = "bb13_serv" + +/area/ruin/space/bb13/service/chapel + name = "\improper Babylon Chapel" + icon_state = "bb13_chap" + +/area/ruin/space/bb13/service/botany + name = "\improper Babylon Botany" + icon_state = "bb13_boty" + +/area/ruin/space/bb13/service/kitchen + name = "\improper Babylon Kitchen" + icon_state = "bb13_kitch" + +/area/ruin/space/bb13/research + name = "\improper Babylon Research" + icon_state = "bb13_rd" + +/area/ruin/space/bb13/research/toxins + name = "\improper Babylon Toxins" + icon_state = "bb13_tox" + +/area/ruin/space/bb13/security + name = "\improper Babylon Security" + icon_state = "bb13_sec" + +/area/ruin/space/bb13/bridge + name = "\improper Babylon Bridge" + icon_state = "bb13_bridge" diff --git a/modular_nova/modules/drones_derelict/code/space.dm b/modular_nova/modules/drones_derelict/code/space.dm new file mode 100644 index 00000000000000..90c5f2847132c6 --- /dev/null +++ b/modular_nova/modules/drones_derelict/code/space.dm @@ -0,0 +1,6 @@ +/datum/map_template/ruin/space/drones_derelict + id = "drones_derelict" + prefix = "_maps/RandomRuins/SpaceRuins/skyrat/" + suffix = "drones_derelict.dmm" + name = "Babylon Station 13" + description = "Babylon Station 13 was meant to be a stepping stone towards a better future, but it ended up being an astronomical financial burden. The owners realized that there was no ability to recoup their losses, and decided to cut the program." diff --git a/modular_nova/modules/drones_derelict/icons/areas.dmi b/modular_nova/modules/drones_derelict/icons/areas.dmi new file mode 100644 index 00000000000000..5b4a902ae7df9f Binary files /dev/null and b/modular_nova/modules/drones_derelict/icons/areas.dmi differ diff --git a/modular_skyrat/modules/electric_welder/code/electric_welder.dm b/modular_nova/modules/electric_welder/code/electric_welder.dm similarity index 97% rename from modular_skyrat/modules/electric_welder/code/electric_welder.dm rename to modular_nova/modules/electric_welder/code/electric_welder.dm index a3426e2cf785d6..4765c9ad4495a4 100644 --- a/modular_skyrat/modules/electric_welder/code/electric_welder.dm +++ b/modular_nova/modules/electric_welder/code/electric_welder.dm @@ -1,7 +1,7 @@ /obj/item/weldingtool/electric name = "electrical welding tool" desc = "An experimental welding tool capable of welding functionality through the use of electricity. The flame seems almost cold." - icon = 'modular_skyrat/modules/aesthetics/tools/tools.dmi' + icon = 'modular_nova/modules/aesthetics/tools/tools.dmi' icon_state = "elwelder" light_power = 1 light_color = LIGHT_COLOR_HALOGEN diff --git a/modular_nova/modules/electric_welder/readme.md b/modular_nova/modules/electric_welder/readme.md new file mode 100644 index 00000000000000..1f982645232982 --- /dev/null +++ b/modular_nova/modules/electric_welder/readme.md @@ -0,0 +1,25 @@ +https://github.com/Skyrat-SS13/Skyrat-tg/pull/ + +## \ + +Module ID: + +### Description: + +### TG Proc/File Changes: + +- `code/game/objects/items/storage/belt.dm`: `proc/get_types_to_preload` + +### Modular Overrides: + +- `modular_nova/master_files/code/modules/cargo/exports/tools.dm`: `var/export_types` + +### Defines: + +- N/A + +### Included files that are not contained in this module: + +- N/A + +### Credits: diff --git a/modular_skyrat/modules/emergency_spacesuit/code/emergency_spacesuit.dm b/modular_nova/modules/emergency_spacesuit/code/emergency_spacesuit.dm similarity index 97% rename from modular_skyrat/modules/emergency_spacesuit/code/emergency_spacesuit.dm rename to modular_nova/modules/emergency_spacesuit/code/emergency_spacesuit.dm index 7e06d94ed27bce..9d97a2e7d928ac 100644 --- a/modular_skyrat/modules/emergency_spacesuit/code/emergency_spacesuit.dm +++ b/modular_nova/modules/emergency_spacesuit/code/emergency_spacesuit.dm @@ -77,7 +77,7 @@ /obj/item/storage/box/emergency_spacesuit name = "emergency space suit case" desc = "A small case containing an emergency space suit and helmet." - icon = 'modular_skyrat/modules/more_briefcases/icons/briefcases.dmi' + icon = 'modular_nova/modules/more_briefcases/icons/briefcases.dmi' icon_state = "briefcase_suit" illustration = null diff --git a/modular_nova/modules/emote_panel/code/emote_panel.dm b/modular_nova/modules/emote_panel/code/emote_panel.dm new file mode 100644 index 00000000000000..e5cb3f44d44448 --- /dev/null +++ b/modular_nova/modules/emote_panel/code/emote_panel.dm @@ -0,0 +1,1020 @@ +/mob/proc/manipulate_emotes() + if(!mind) + return + var/list/available_emotes = list() + var/list/all_emotes = list() + + // code\modules\mob\emote.dm + var/static/list/mob_emotes = list( + /mob/proc/emote_flip, + /mob/proc/emote_spin + ) + all_emotes += mob_emotes + + // code\modules\mob\living\emote.dm + var/static/list/living_emotes = list( + /mob/living/proc/emote_blush, + /mob/living/proc/emote_bow, + /mob/living/proc/emote_burp, + /mob/living/proc/emote_choke, + /mob/living/proc/emote_cross, + /mob/living/proc/emote_chuckle, + /mob/living/proc/emote_collapse, + /mob/living/proc/emote_cough, + /mob/living/proc/emote_dance, + /mob/living/proc/emote_drool, + /mob/living/proc/emote_faint, + /mob/living/proc/emote_flap, + /mob/living/proc/emote_aflap, + /mob/living/proc/emote_frown, + /mob/living/proc/emote_gag, + /mob/living/proc/emote_giggle, + /mob/living/proc/emote_glare, + /mob/living/proc/emote_grin, + /mob/living/proc/emote_groan, + /mob/living/proc/emote_grimace, + /mob/living/proc/emote_jump, + /mob/living/proc/emote_kiss, + /mob/living/proc/emote_laugh, + /mob/living/proc/emote_look, + /mob/living/proc/emote_nod, + /mob/living/proc/emote_point, + /mob/living/proc/emote_pout, + /mob/living/proc/emote_scream, + /mob/living/proc/emote_scowl, + /mob/living/proc/emote_shake, + /mob/living/proc/emote_shiver, + /mob/living/proc/emote_sigh, + /mob/living/proc/emote_sit, + /mob/living/proc/emote_smile, + /mob/living/proc/emote_sneeze, + /mob/living/proc/emote_smug, + /mob/living/proc/emote_sniff, + /mob/living/proc/emote_stare, + /mob/living/proc/emote_strech, + /mob/living/proc/emote_sulk, + /mob/living/proc/emote_sway, + /mob/living/proc/emote_tilt, + /mob/living/proc/emote_tremble, + /mob/living/proc/emote_twitch, + /mob/living/proc/emote_twitch_s, + /mob/living/proc/emote_wave, + /mob/living/proc/emote_whimper, + /mob/living/proc/emote_wsmile, + /mob/living/proc/emote_yawn, + /mob/living/proc/emote_gurgle, + /mob/living/proc/emote_inhale, + /mob/living/proc/emote_exhale, + /mob/living/proc/emote_swear + ) + all_emotes += living_emotes + + // code\modules\mob\living\carbon\emote.dm + var/static/list/carbon_emotes = list( + /mob/living/carbon/proc/emote_airguitar, + /mob/living/carbon/proc/emote_blink, + /mob/living/carbon/proc/emote_blink_r, + /mob/living/carbon/proc/emote_crack, + /mob/living/carbon/proc/emote_circle, + /mob/living/carbon/proc/emote_moan, + /mob/living/carbon/proc/emote_slap, + /mob/living/carbon/proc/emote_wink + ) + all_emotes += carbon_emotes + + // code\modules\mob\living\carbon\human\emote.dm + var/static/list/human_emotes = list( + /mob/living/carbon/human/proc/emote_cry, + /mob/living/carbon/human/proc/emote_eyebrow, + /mob/living/carbon/human/proc/emote_grumble, + /mob/living/carbon/human/proc/emote_mumble, + /mob/living/carbon/human/proc/emote_pale, + /mob/living/carbon/human/proc/emote_raise, + /mob/living/carbon/human/proc/emote_salute, + /mob/living/carbon/human/proc/emote_shrug, + /mob/living/carbon/human/proc/emote_wag, + /mob/living/carbon/human/proc/emote_wing + ) + all_emotes += human_emotes + + // modular_nova\modules\emotes\code\emote.dm + var/static/list/skyrat_living_emotes = list( + /mob/living/proc/emote_peep, + /mob/living/proc/emote_peep2, + /mob/living/proc/emote_snap, + /mob/living/proc/emote_snap2, + /mob/living/proc/emote_snap3, + /mob/living/proc/emote_awoo, + /mob/living/proc/emote_nya, + /mob/living/proc/emote_weh, + /mob/living/proc/emote_mothsqueak, + /mob/living/proc/emote_mousesqueak, + /mob/living/proc/emote_merp, + /mob/living/proc/emote_bark, + /mob/living/proc/emote_squish, + /mob/living/proc/emote_meow, + /mob/living/proc/emote_hiss1, + /mob/living/proc/emote_chitter, + /mob/living/proc/emote_snore, + /mob/living/proc/emote_clap, + /mob/living/proc/emote_clap1, + /mob/living/proc/emote_headtilt, + /mob/living/proc/emote_blink2, + /mob/living/proc/emote_rblink, + /mob/living/proc/emote_squint, + /mob/living/proc/emote_smirk, + /mob/living/proc/emote_eyeroll, + /mob/living/proc/emote_huff, + /mob/living/proc/emote_etwitch, + /mob/living/proc/emote_clear, + /mob/living/proc/emote_bawk, + /mob/living/proc/emote_caw, + /mob/living/proc/emote_caw2, + /mob/living/proc/emote_whistle, + /mob/living/proc/emote_blep, + /mob/living/proc/emote_bork, + /mob/living/proc/emote_hoot, + /mob/living/proc/emote_growl, + /mob/living/proc/emote_woof, + /mob/living/proc/emote_baa, + /mob/living/proc/emote_baa2, + /mob/living/proc/emote_wurble, + /mob/living/proc/emote_rattle, + /mob/living/proc/emote_cackle, + /mob/living/proc/emote_warble, + /mob/living/proc/emote_trills, + /mob/living/proc/emote_rpurr, + /mob/living/proc/emote_purr, + /mob/living/proc/emote_moo, + /mob/living/proc/emote_honk1 + ) + all_emotes += skyrat_living_emotes + + // code\modules\mob\living\brain\emote.dm + var/static/list/brain_emotes = list( + /mob/living/brain/proc/emote_alarm, + /mob/living/brain/proc/emote_alert, + /mob/living/brain/proc/emote_flash, + /mob/living/brain/proc/emote_notice, + /mob/living/brain/proc/emote_whistle_brain + ) + all_emotes += brain_emotes + + // code\modules\mob\living\carbon\alien\emote.dm + var/static/list/alien_emotes = list( + /mob/living/carbon/alien/proc/emote_gnarl, + /mob/living/carbon/alien/proc/emote_hiss, + /mob/living/carbon/alien/proc/emote_roar + ) + all_emotes += alien_emotes + + // modular_nova\modules\emotes\code\synth_emotes.dm + var/static/list/synth_emotes = list( + /mob/living/proc/emote_dwoop, + /mob/living/proc/emote_yes, + /mob/living/proc/emote_no, + /mob/living/proc/emote_boop, + /mob/living/proc/emote_buzz, + /mob/living/proc/emote_beep, + /mob/living/proc/emote_beep2, + /mob/living/proc/emote_buzz2, + /mob/living/proc/emote_chime, + /mob/living/proc/emote_honk, + /mob/living/proc/emote_ping, + /mob/living/proc/emote_sad, + /mob/living/proc/emote_warn, + /mob/living/proc/emote_slowclap + ) + all_emotes += synth_emotes + var/static/list/allowed_species_synth = list( + /datum/species/synthetic + ) + + // modular_nova\modules\emotes\code\additionalemotes\overlay_emote.dm + var/static/list/skyrat_living_emotes_overlay = list( + /mob/living/proc/emote_sweatdrop, + /mob/living/proc/emote_exclaim, + /mob/living/proc/emote_question, + /mob/living/proc/emote_realize, + /mob/living/proc/emote_annoyed, + /mob/living/proc/emote_glasses + ) + all_emotes += skyrat_living_emotes_overlay + + // modular_nova\modules\emotes\code\additionalemotes\turf_emote.dm + all_emotes += /mob/living/proc/emote_mark_turf + + // Clearing all emotes before applying new ones + verbs -= all_emotes + + // Checking if preferences allow emote panel + if(!src.client?.prefs?.read_preference(/datum/preference/toggle/emote_panel)) + return + + // Checking emote availability + if(isbrain(src)) + // Only brains in MMI have emotes + var/mob/living/brain/current_brain = src + if(current_brain.container && istype(current_brain.container, /obj/item/mmi)) + available_emotes += brain_emotes + else + if(ismob(src)) + available_emotes += mob_emotes + if(isliving(src)) + available_emotes += living_emotes + available_emotes += skyrat_living_emotes + available_emotes += skyrat_living_emotes_overlay + available_emotes += /mob/living/proc/emote_mark_turf + if(iscarbon(src)) + available_emotes += carbon_emotes + if(ishuman(src)) + available_emotes += human_emotes + // Checking if should apply Synth emotes + var/mob/living/carbon/human/current_mob = src + if(current_mob.dna.species.type in allowed_species_synth) + available_emotes += synth_emotes + // Checking if can wag tail + var/obj/item/organ/external/tail/tail = current_mob.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) + if(!(tail?.wag_flags & WAG_ABLE)) + available_emotes -= /mob/living/carbon/human/proc/emote_wag + // Checking if has wings + if(!current_mob.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)) + available_emotes -= /mob/living/carbon/human/proc/emote_wing + if(isalien(src)) + available_emotes += alien_emotes + if(issilicon(src)) + available_emotes += synth_emotes + + // Applying emote panel if preferences allow + for(var/emote in available_emotes) + verbs |= emote + +/mob/mind_initialize() + . = ..() + manipulate_emotes() + +// code\modules\mob\emote.dm +/mob/proc/emote_flip() + set name = "| Flip |" + set category = "Emotes" + usr.emote("flip", intentional = TRUE) + +/mob/proc/emote_spin() + set name = "| Spin |" + set category = "Emotes" + usr.emote("spin", intentional = TRUE) + +// code\modules\mob\living\emote.dm + +/mob/living/proc/emote_blush() + set name = "~ Blush" + set category = "Emotes" + usr.emote("blush", intentional = TRUE) + +/mob/living/proc/emote_bow() + set name = "~ Bow" + set category = "Emotes" + usr.emote("bow", intentional = TRUE) + +/mob/living/proc/emote_burp() + set name = "> Burp" + set category = "Emotes" + usr.emote("burp", intentional = TRUE) + +/mob/living/proc/emote_choke() + set name = "~ Choke" + set category = "Emotes" + usr.emote("choke", intentional = TRUE) + +/mob/living/proc/emote_cross() + set name = "~ Cross" + set category = "Emotes" + usr.emote("cross", intentional = TRUE) + +/mob/living/proc/emote_chuckle() + set name = "~ Chuckle" + set category = "Emotes" + usr.emote("chuckle", intentional = TRUE) + +/mob/living/proc/emote_collapse() + set name = "~ Collapse" + set category = "Emotes" + usr.emote("collapse", intentional = TRUE) + +/mob/living/proc/emote_cough() + set name = "> Cough" + set category = "Emotes" + usr.emote("cough", intentional = TRUE) + +/mob/living/proc/emote_dance() + set name = "~ Dance" + set category = "Emotes" + usr.emote("dance", intentional = TRUE) + +/mob/living/proc/emote_drool() + set name = "~ Drool" + set category = "Emotes" + usr.emote("drool", intentional = TRUE) + +/mob/living/proc/emote_faint() + set name = "~ Faint" + set category = "Emotes" + usr.emote("faint", intentional = TRUE) + +/mob/living/proc/emote_flap() + set name = "~ Flap" + set category = "Emotes" + usr.emote("flap", intentional = TRUE) + +/mob/living/proc/emote_aflap() + set name = "~ Angry Flap" + set category = "Emotes" + usr.emote("aflap", intentional = TRUE) + +/mob/living/proc/emote_frown() + set name = "~ Frown" + set category = "Emotes" + usr.emote("frown", intentional = TRUE) + +/mob/living/proc/emote_gag() + set name = "~ Gag" + set category = "Emotes" + usr.emote("gag", intentional = TRUE) + +/mob/living/proc/emote_giggle() + set name = "~ Giggle" + set category = "Emotes" + usr.emote("giggle", intentional = TRUE) + +/mob/living/proc/emote_glare() + set name = "~ Glare" + set category = "Emotes" + usr.emote("glare", intentional = TRUE) + +/mob/living/proc/emote_grin() + set name = "~ Grin" + set category = "Emotes" + usr.emote("grin", intentional = TRUE) + +/mob/living/proc/emote_groan() + set name = "~ Groan" + set category = "Emotes" + usr.emote("groan", intentional = TRUE) + +/mob/living/proc/emote_grimace() + set name = "~ Grimace" + set category = "Emotes" + usr.emote("grimace", intentional = TRUE) + +/mob/living/proc/emote_jump() + set name = "~ Jump" + set category = "Emotes" + usr.emote("jump", intentional = TRUE) + +/mob/living/proc/emote_kiss() + set name = "| Kiss |" + set category = "Emotes" + usr.emote("kiss", intentional = TRUE) + +/mob/living/proc/emote_laugh() + set name = "> Laugh" + set category = "Emotes" + usr.emote("laugh", intentional = TRUE) + +/mob/living/proc/emote_look() + set name = "~ Look" + set category = "Emotes" + usr.emote("look", intentional = TRUE) + +/mob/living/proc/emote_nod() + set name = "~ Nod" + set category = "Emotes" + usr.emote("nod", intentional = TRUE) + +/mob/living/proc/emote_point() + set name = "~ Point" + set category = "Emotes" + usr.emote("point", intentional = TRUE) + +/mob/living/proc/emote_pout() + set name = "~ Pout" + set category = "Emotes" + usr.emote("pout", intentional = TRUE) + +/mob/living/proc/emote_scream() + set name = "> Scream" + set category = "Emotes" + usr.emote("scream", intentional = TRUE) + +/mob/living/proc/emote_scowl() + set name = "~ Scowl" + set category = "Emotes" + usr.emote("scowl", intentional = TRUE) + +/mob/living/proc/emote_shake() + set name = "~ Shake" + set category = "Emotes" + usr.emote("shake", intentional = TRUE) + +/mob/living/proc/emote_shiver() + set name = "~ Shiver" + set category = "Emotes" + usr.emote("shiver", intentional = TRUE) + +/mob/living/proc/emote_sigh() + set name = "> Sigh" + set category = "Emotes" + usr.emote("sigh", intentional = TRUE) + +/mob/living/proc/emote_sit() + set name = "~ Sit" + set category = "Emotes" + usr.emote("sit", intentional = TRUE) + +/mob/living/proc/emote_smile() + set name = "~ Smile" + set category = "Emotes" + usr.emote("smile", intentional = TRUE) + +/mob/living/proc/emote_sneeze() + set name = "> Sneeze" + set category = "Emotes" + usr.emote("sneeze", intentional = TRUE) + +/mob/living/proc/emote_smug() + set name = "~ Smug" + set category = "Emotes" + usr.emote("smug", intentional = TRUE) + +/mob/living/proc/emote_sniff() + set name = "> Sniff" + set category = "Emotes" + usr.emote("sniff", intentional = TRUE) + +/mob/living/proc/emote_stare() + set name = "~ Stare" + set category = "Emotes" + usr.emote("stare", intentional = TRUE) + +/mob/living/proc/emote_strech() + set name = "~ Stretch" + set category = "Emotes" + usr.emote("stretch", intentional = TRUE) + +/mob/living/proc/emote_sulk() + set name = "~ Sulk" + set category = "Emotes" + usr.emote("sulk", intentional = TRUE) + +/mob/living/proc/emote_sway() + set name = "~ Sway" + set category = "Emotes" + usr.emote("sway", intentional = TRUE) + +/mob/living/proc/emote_tilt() + set name = "~ Tilt" + set category = "Emotes" + usr.emote("tilt", intentional = TRUE) + +/mob/living/proc/emote_tremble() + set name = "~ Tremble" + set category = "Emotes" + usr.emote("tremble", intentional = TRUE) + +/mob/living/proc/emote_twitch() + set name = "~ Twitch" + set category = "Emotes" + usr.emote("twitch", intentional = TRUE) + +/mob/living/proc/emote_twitch_s() + set name = "~ Twitch Slightly" + set category = "Emotes" + usr.emote("twitch_s", intentional = TRUE) + +/mob/living/proc/emote_wave() + set name = "~ Wave" + set category = "Emotes" + usr.emote("wave", intentional = TRUE) + +/mob/living/proc/emote_whimper() + set name = "~ Whimper" + set category = "Emotes" + usr.emote("whimper", intentional = TRUE) + +/mob/living/proc/emote_wsmile() + set name = "~ Smile Weak" + set category = "Emotes" + usr.emote("wsmile", intentional = TRUE) + +/mob/living/proc/emote_yawn() + set name = "~ Yawn" + set category = "Emotes" + usr.emote("yawn", intentional = TRUE) + +/mob/living/proc/emote_gurgle() + set name = "~ Gurgle" + set category = "Emotes" + usr.emote("gurgle", intentional = TRUE) + +/mob/living/proc/emote_inhale() + set name = "~ Inhale" + set category = "Emotes" + usr.emote("inhale", intentional = TRUE) + +/mob/living/proc/emote_exhale() + set name = "~ Exhale" + set category = "Emotes" + usr.emote("exhale", intentional = TRUE) + +/mob/living/proc/emote_swear() + set name = "~ Swear" + set category = "Emotes" + usr.emote("swear", intentional = TRUE) + +// code\modules\mob\living\carbon\emote.dm + +/mob/living/carbon/proc/emote_airguitar() + set name = "~ Airguitar" + set category = "Emotes" + usr.emote("airguitar", intentional = TRUE) + +/mob/living/carbon/proc/emote_blink() + set name = "~ Blink" + set category = "Emotes" + usr.emote("blink", intentional = TRUE) + +/mob/living/carbon/proc/emote_blink_r() + set name = "~ Blink Rapidly" + set category = "Emotes" + usr.emote("blink_r", intentional = TRUE) + +/mob/living/carbon/proc/emote_crack() + set name = "> Crack" + set category = "Emotes" + usr.emote("crack", intentional = TRUE) + +/mob/living/carbon/proc/emote_circle() + set name = "| Circle |" + set category = "Emotes" + usr.emote("circle", intentional = TRUE) + +/mob/living/carbon/proc/emote_moan() + set name = "~ Moan" + set category = "Emotes" + usr.emote("moan", intentional = TRUE) + +/mob/living/carbon/proc/emote_slap() + set name = "| Slap |" + set category = "Emotes" + usr.emote("slap", intentional = TRUE) + +/mob/living/carbon/proc/emote_wink() + set name = "~ Wink" + set category = "Emotes" + usr.emote("wink", intentional = TRUE) + +// code\modules\mob\living\carbon\human\emote.dm + +/mob/living/carbon/human/proc/emote_cry() + set name = "~ Cry" + set category = "Emotes" + usr.emote("cry", intentional = TRUE) + +/mob/living/carbon/human/proc/emote_eyebrow() + set name = "~ Eyebrow" + set category = "Emotes" + usr.emote("eyebrow", intentional = TRUE) + +/mob/living/carbon/human/proc/emote_grumble() + set name = "~ Grumble" + set category = "Emotes" + usr.emote("grumble", intentional = TRUE) + +/mob/living/carbon/human/proc/emote_mumble() + set name = "~ Mumble" + set category = "Emotes" + usr.emote("mumble", intentional = TRUE) + +/mob/living/carbon/human/proc/emote_pale() + set name = "~ Pale" + set category = "Emotes" + usr.emote("pale", intentional = TRUE) + +/mob/living/carbon/human/proc/emote_raise() + set name = "~ Raise Hand" + set category = "Emotes" + usr.emote("raise", intentional = TRUE) + +/mob/living/carbon/human/proc/emote_salute() + set name = "~ Salute" + set category = "Emotes" + usr.emote("salute", intentional = TRUE) + +/mob/living/carbon/human/proc/emote_shrug() + set name = "~ Shrug" + set category = "Emotes" + usr.emote("shrug", intentional = TRUE) + +/mob/living/carbon/human/proc/emote_wag() + set name = "| Wag |" + set category = "Emotes" + usr.emote("wag", intentional = TRUE) + +/mob/living/carbon/human/proc/emote_wing() + set name = "| Wing |" + set category = "Emotes" + usr.emote("wing", intentional = TRUE) + +// modular_nova\modules\emotes\code\emote.dm + +/mob/living/proc/emote_peep() + set name = "> Peep" + set category = "Emotes+" + usr.emote("peep", intentional = TRUE) + +/mob/living/proc/emote_peep2() + set name = "> Peep Twice" + set category = "Emotes+" + usr.emote("peep2", intentional = TRUE) + +/mob/living/proc/emote_snap() + set name = "> Snap" + set category = "Emotes+" + usr.emote("snap", intentional = TRUE) + +/mob/living/proc/emote_snap2() + set name = "> Snap Twice" + set category = "Emotes+" + usr.emote("snap2", intentional = TRUE) + +/mob/living/proc/emote_snap3() + set name = "> Snap Thrice" + set category = "Emotes+" + usr.emote("snap3", intentional = TRUE) + +/mob/living/proc/emote_awoo() + set name = "> Awoo" + set category = "Emotes+" + usr.emote("awoo", intentional = TRUE) + +/mob/living/proc/emote_nya() + set name = "> Nya" + set category = "Emotes+" + usr.emote("nya", intentional = TRUE) + +/mob/living/proc/emote_weh() + set name = "> Weh" + set category = "Emotes+" + usr.emote("weh", intentional = TRUE) + +/mob/living/proc/emote_mothsqueak() + set name = "> Moth Squeak" + set category = "Emotes+" + usr.emote("msqueak", intentional = TRUE) + +/mob/living/proc/emote_mousesqueak() + set name = "> Mouse Squeak" + set category = "Emotes+" + usr.emote("squeak", intentional = TRUE) + +/mob/living/proc/emote_merp() + set name = "> Merp" + set category = "Emotes+" + usr.emote("merp", intentional = TRUE) + +/mob/living/proc/emote_bark() + set name = "> Bark" + set category = "Emotes+" + usr.emote("bark", intentional = TRUE) + +/mob/living/proc/emote_squish() + set name = "> Squish" + set category = "Emotes+" + usr.emote("squish", intentional = TRUE) + +/mob/living/proc/emote_meow() + set name = "> Meow" + set category = "Emotes+" + usr.emote("meow", intentional = TRUE) + +/mob/living/proc/emote_hiss1() + set name = "> Hiss" + set category = "Emotes+" + usr.emote("hiss1", intentional = TRUE) + +/mob/living/proc/emote_chitter() + set name = "> Chitter" + set category = "Emotes+" + usr.emote("chitter", intentional = TRUE) + +/mob/living/proc/emote_snore() + set name = "> Snore" + set category = "Emotes+" + usr.emote("snore", intentional = TRUE) + +/mob/living/proc/emote_clap() + set name = "> Clap" + set category = "Emotes+" + usr.emote("clap", intentional = TRUE) + +/mob/living/proc/emote_clap1() + set name = "> Clap once" + set category = "Emotes+" + usr.emote("clap1", intentional = TRUE) + +/mob/living/proc/emote_headtilt() + set name = "~ Head Hilt" + set category = "Emotes+" + usr.emote("tilt", intentional = TRUE) + +/mob/living/proc/emote_blink2() + set name = "~ Blink Twice" + set category = "Emotes+" + usr.emote("blink2", intentional = TRUE) + +/mob/living/proc/emote_rblink() + set name = "~ Blink Rapidly" + set category = "Emotes+" + usr.emote("rblink", intentional = TRUE) + +/mob/living/proc/emote_squint() + set name = "~ Squint" + set category = "Emotes+" + usr.emote("squint", intentional = TRUE) + +/mob/living/proc/emote_smirk() + set name = "~ Smirk" + set category = "Emotes+" + usr.emote("smirk", intentional = TRUE) + +/mob/living/proc/emote_eyeroll() + set name = "~ Eyeroll" + set category = "Emotes+" + usr.emote("eyeroll", intentional = TRUE) + +/mob/living/proc/emote_huff() + set name = "~ Huff" + set category = "Emotes+" + usr.emote("huffs", intentional = TRUE) + +/mob/living/proc/emote_etwitch() + set name = "~ Ears twitch" + set category = "Emotes+" + usr.emote("etwitch", intentional = TRUE) + +/mob/living/proc/emote_clear() + set name = "~ Clear Throat" + set category = "Emotes+" + usr.emote("clear", intentional = TRUE) + +/mob/living/proc/emote_bawk() + set name = "> Bawk" + set category = "Emotes+" + usr.emote("bawk", intentional = TRUE) + +/mob/living/proc/emote_caw() + set name = "> Caw" + set category = "Emotes+" + usr.emote("caw", intentional = TRUE) + +/mob/living/proc/emote_caw2() + set name = "> Caw-caw" + set category = "Emotes+" + usr.emote("caw2", intentional = TRUE) + +/mob/living/proc/emote_whistle() + set name = "~ Whistle" + set category = "Emotes+" + usr.emote("whistle", intentional = TRUE) + +/mob/living/proc/emote_blep() + set name = "~ Blep" + set category = "Emotes+" + usr.emote("blep", intentional = TRUE) + +/mob/living/proc/emote_bork() + set name = "> Bork" + set category = "Emotes+" + usr.emote("bork", intentional = TRUE) + +/mob/living/proc/emote_hoot() + set name = "> Hoot" + set category = "Emotes+" + usr.emote("hoot", intentional = TRUE) + +/mob/living/proc/emote_growl() + set name = "> Growl" + set category = "Emotes+" + usr.emote("growl", intentional = TRUE) + +/mob/living/proc/emote_woof() + set name = "> Woof" + set category = "Emotes+" + usr.emote("woof", intentional = TRUE) + +/mob/living/proc/emote_baa() + set name = "> Baa" + set category = "Emotes+" + usr.emote("baa", intentional = TRUE) + +/mob/living/proc/emote_baa2() + set name = "> Bleat" + set category = "Emotes+" + usr.emote("baa2", intentional = TRUE) + +/mob/living/proc/emote_wurble() + set name = "> Wurble" + set category = "Emotes+" + usr.emote("wurble", intentional = TRUE) +/mob/living/proc/emote_rattle() + set name = "> Rattle" + set category = "Emotes+" + usr.emote("rattle", intentional = TRUE) + +/mob/living/proc/emote_cackle() + set name = "> Cackle" + set category = "Emotes+" + usr.emote("cackle", intentional = TRUE) + +/mob/living/proc/emote_warble() + set name = "> Warble" + set category = "Emotes+" + usr.emote("warble", intentional = TRUE) + +/mob/living/proc/emote_trills() + set name = "> Trills" + set category = "Emotes+" + usr.emote("trills", intentional = TRUE) + +/mob/living/proc/emote_rpurr() + set name = "> Raptor" + set category = "Emotes+" + usr.emote("rpurr", intentional = TRUE) + +/mob/living/proc/emote_purr() + set name = "> Purr" + set category = "Emotes+" + usr.emote("purr", intentional = TRUE) + +/mob/living/proc/emote_moo() + set name = "> Moo" + set category = "Emotes+" + usr.emote("moo", intentional = TRUE) + +/mob/living/proc/emote_honk1() + set name = "> Honk" + set category = "Emotes+" + usr.emote("honk1", intentional = TRUE) + +// code\modules\mob\living\brain\emote.dm + +/mob/living/brain/proc/emote_alarm() + set name = "< Alarm >" + set category = "Emotes" + usr.emote("alarm", intentional = TRUE) + +/mob/living/brain/proc/emote_alert() + set name = "< Alert >" + set category = "Emotes" + usr.emote("alert", intentional = TRUE) + +/mob/living/brain/proc/emote_flash() + set name = "< Flash >" + set category = "Emotes" + usr.emote("flash", intentional = TRUE) + +/mob/living/brain/proc/emote_notice() + set name = "< Notice >" + set category = "Emotes" + usr.emote("notice", intentional = TRUE) + +/mob/living/brain/proc/emote_whistle_brain() + set name = "< Whistle >" + set category = "Emotes" + usr.emote("whistle", intentional = TRUE) + +// code\modules\mob\living\carbon\alien\emote.dm + +/mob/living/carbon/alien/proc/emote_gnarl() + set name = "< Gnarl >" + set category = "Emotes" + usr.emote("gnarl", intentional = TRUE) + +/mob/living/carbon/alien/proc/emote_hiss() + set name = "< Hiss >" + set category = "Emotes" + usr.emote("hiss", intentional = TRUE) + +/mob/living/carbon/alien/proc/emote_roar() + set name = "< Roar >" + set category = "Emotes" + usr.emote("roar", intentional = TRUE) + +//modular_nova\modules\emotes\code\synth_emotes.dm + +/mob/living/proc/emote_dwoop() + set name = "< Dwoop >" + set category = "Emotes" + usr.emote("dwoop", intentional = TRUE) + +/mob/living/proc/emote_yes() + set name = "< Yes >" + set category = "Emotes" + usr.emote("yes", intentional = TRUE) + +/mob/living/proc/emote_no() + set name = "< No >" + set category = "Emotes" + usr.emote("no", intentional = TRUE) + +/mob/living/proc/emote_boop() + set name = "< Boop >" + set category = "Emotes" + usr.emote("boop", intentional = TRUE) + +/mob/living/proc/emote_buzz() + set name = "< Buzz >" + set category = "Emotes" + usr.emote("buzz", intentional = TRUE) + +/mob/living/proc/emote_beep() + set name = "< Beep >" + set category = "Emotes" + usr.emote("beep", intentional = TRUE) + +/mob/living/proc/emote_beep2() + set name = "< Beep Sharply >" + set category = "Emotes" + usr.emote("beep2", intentional = TRUE) + +/mob/living/proc/emote_buzz2() + set name = "< Buzz Twice >" + set category = "Emotes" + usr.emote("buzz2", intentional = TRUE) + +/mob/living/proc/emote_chime() + set name = "< Chime >" + set category = "Emotes" + usr.emote("chime", intentional = TRUE) + +/mob/living/proc/emote_honk() + set name = "< Honk >" + set category = "Emotes" + usr.emote("honk", intentional = TRUE) + +/mob/living/proc/emote_ping() + set name = "< Ping >" + set category = "Emotes" + usr.emote("ping", intentional = TRUE) + +/mob/living/proc/emote_sad() + set name = "< Sad >" + set category = "Emotes" + usr.emote("sad", intentional = TRUE) + +/mob/living/proc/emote_warn() + set name = "< Warn >" + set category = "Emotes" + usr.emote("warn", intentional = TRUE) + +/mob/living/proc/emote_slowclap() + set name = "< Slow Clap >" + set category = "Emotes" + usr.emote("slowclap", intentional = TRUE) + +// modular_nova\modules\emotes\code\additionalemotes\overlay_emote.dm +/mob/living/proc/emote_sweatdrop() + set name = "| Sweatdrop |" + set category = "Emotes+" + usr.emote("sweatdrop", intentional = TRUE) + +/mob/living/proc/emote_exclaim() + set name = "| Exclaim |" + set category = "Emotes+" + usr.emote("exclaim", intentional = TRUE) + +/mob/living/proc/emote_question() + set name = "| Question |" + set category = "Emotes+" + usr.emote("question", intentional = TRUE) + +/mob/living/proc/emote_realize() + set name = "| Realize |" + set category = "Emotes+" + usr.emote("realize", intentional = TRUE) + +/mob/living/proc/emote_annoyed() + set name = "| Annoyed |" + set category = "Emotes+" + usr.emote("annoyed", intentional = TRUE) + +/mob/living/proc/emote_glasses() + set name = "| Adjust Glasses |" + set category = "Emotes+" + usr.emote("glasses", intentional = TRUE) + +//modular_nova\modules\emotes\code\additionalemotes\turf_emote.dm +/mob/living/proc/emote_mark_turf() + set name = "| Mark Turf |" + set category = "Emotes+" + usr.emote("turf", intentional = TRUE) diff --git a/modular_skyrat/modules/emotes/code/additionalemotes/overlay_emote.dm b/modular_nova/modules/emotes/code/additionalemotes/overlay_emote.dm similarity index 83% rename from modular_skyrat/modules/emotes/code/additionalemotes/overlay_emote.dm rename to modular_nova/modules/emotes/code/additionalemotes/overlay_emote.dm index e456712124ab6f..e9e8317208e79f 100644 --- a/modular_skyrat/modules/emotes/code/additionalemotes/overlay_emote.dm +++ b/modular_nova/modules/emotes/code/additionalemotes/overlay_emote.dm @@ -1,5 +1,5 @@ /datum/emote - var/overlay_emote = 'modular_skyrat/master_files/icons/effects/overlay_effects.dmi' + var/overlay_emote = 'modular_nova/master_files/icons/effects/overlay_effects.dmi' /datum/emote/proc/get_toggle(mob/living/user) if(user.client) @@ -19,7 +19,7 @@ overlay.pixel_x = 10 overlay.pixel_y = 10 user.flick_overlay_static(overlay, 50) - playsound(get_turf(user), 'modular_skyrat/modules/emotes/sound/emotes/sweatdrop.ogg', 25, TRUE) + playsound(get_turf(user), 'modular_nova/modules/emotes/sound/emotes/sweatdrop.ogg', 25, TRUE) /datum/emote/living/exclaim key = "exclaim" @@ -45,7 +45,7 @@ overlay.pixel_x = 10 overlay.pixel_y = 28 user.flick_overlay_static(overlay, 50) - playsound(get_turf(user), 'modular_skyrat/modules/emotes/sound/emotes/question.ogg', 25, TRUE) + playsound(get_turf(user), 'modular_nova/modules/emotes/sound/emotes/question.ogg', 25, TRUE) /datum/emote/living/realize @@ -61,7 +61,7 @@ else overlay.pixel_y = 15 user.flick_overlay_static(overlay, 50) - playsound(get_turf(user), 'modular_skyrat/modules/emotes/sound/emotes/realize.ogg', 25, TRUE) + playsound(get_turf(user), 'modular_nova/modules/emotes/sound/emotes/realize.ogg', 25, TRUE) /datum/emote/living/annoyed key = "annoyed" @@ -74,4 +74,4 @@ overlay.pixel_x = 10 overlay.pixel_y = 10 user.flick_overlay_static(overlay, 50) - playsound(get_turf(user), 'modular_skyrat/modules/emotes/sound/emotes/annoyed.ogg', 25, TRUE) + playsound(get_turf(user), 'modular_nova/modules/emotes/sound/emotes/annoyed.ogg', 25, TRUE) diff --git a/modular_skyrat/modules/emotes/code/additionalemotes/turf_emote.dm b/modular_nova/modules/emotes/code/additionalemotes/turf_emote.dm similarity index 98% rename from modular_skyrat/modules/emotes/code/additionalemotes/turf_emote.dm rename to modular_nova/modules/emotes/code/additionalemotes/turf_emote.dm index a34e84508436d3..9b53911b805d8c 100644 --- a/modular_skyrat/modules/emotes/code/additionalemotes/turf_emote.dm +++ b/modular_nova/modules/emotes/code/additionalemotes/turf_emote.dm @@ -81,7 +81,7 @@ for(var/choice in user.allowed_turfs) var/datum/radial_menu_choice/option = new - option.image = image(icon = 'modular_skyrat/master_files/icons/effects/turf_effects_icons.dmi', icon_state = initial(choice)) + option.image = image(icon = 'modular_nova/master_files/icons/effects/turf_effects_icons.dmi', icon_state = initial(choice)) display_turf[initial(choice)] = option diff --git a/modular_nova/modules/emotes/code/additionalemotes/turf_list.dm b/modular_nova/modules/emotes/code/additionalemotes/turf_list.dm new file mode 100644 index 00000000000000..552c4ee037cd2d --- /dev/null +++ b/modular_nova/modules/emotes/code/additionalemotes/turf_list.dm @@ -0,0 +1,197 @@ +#define EXTRA_ABOVE_MOB_LAYER (ABOVE_MOB_LAYER + 0.01) + +/obj/structure/mark_turf + name = "turf" + icon = 'modular_nova/master_files/icons/effects/turf_effects.dmi' + desc = "It's turf." //Debug stuff, won't be seen + layer = ABOVE_OBJ_LAYER + anchored = TRUE + density = FALSE + max_integrity = 15 + +/obj/structure/mark_turf/Initialize(mapload, current_turf) + . = ..() + + switch(current_turf) + if("web") + name = "hand-sewn web" + desc = "It's a sticky web." + icon_state = pick("stickyweb1", "stickyweb2") + playsound(get_turf(src), 'modular_nova/master_files/sound/effects/weave.ogg', 25, TRUE) + + if("vines") + name = "sprouted vines" + desc = "It's an entanglement of vines." + icon_state = pick("kudzu1", "kudzu1", "kudzu3") + playsound(get_turf(src), 'sound/creatures/venus_trap_hurt.ogg', 25, TRUE) + + + if("water") + name = "puddle of water" + desc = "It's a patch of water." + icon_state = "water" + src.add_overlay(image('modular_nova/master_files/icons/effects/turf_effects.dmi', "water_top", EXTRA_ABOVE_MOB_LAYER)) + flick_overlay_static(image('modular_nova/modules/liquids/icons/obj/effects/splash.dmi', "splash", EXTRA_ABOVE_MOB_LAYER), 20) + playsound(get_turf(src), 'modular_nova/master_files/sound/effects/watersplash.ogg', 25, TRUE) + + if("smoke") + name = "blazing mist" + desc = "It's a storm of smoke." + icon_state = "smoke" + src.add_overlay(image('modular_nova/master_files/icons/effects/turf_effects.dmi', "smoke_top", EXTRA_ABOVE_MOB_LAYER)) + playsound(get_turf(src), 'sound/effects/wounds/sizzle2.ogg', 25, TRUE) + + if("xenoresin") + name = "resin" + desc = "Looks like some kind of thick resin." + icon_state = "xenoresin" + playsound(get_turf(src), 'sound/effects/splat.ogg', 25, TRUE) + + if("holobed") + name = "physical hologram" + desc = "It's a hologram of a pet bed." + icon_state = "holobed" + playsound(get_turf(src), 'sound/misc/compiler-stage2.ogg', 25, TRUE) + + if("holoseat") + name = "physical hologram" + desc = "It's a hologram of a barstool." + icon_state = "holoseat" + src.add_overlay(image('modular_nova/master_files/icons/effects/turf_effects.dmi', "holoseat_top", EXTRA_ABOVE_MOB_LAYER)) + playsound(get_turf(src), 'sound/misc/compiler-stage2.ogg', 25, TRUE) + + if("slime") + name = "pile of oozing slime" + desc = "It's just a bunch of slime." + alpha = 155 + playsound(get_turf(src), 'sound/misc/soggy.ogg', 25, TRUE) + switch(rand(1,1000)) + if(-INFINITY to 400) + icon_state = "slimeobj1" + src.add_overlay(image('modular_nova/master_files/icons/effects/turf_effects.dmi', "slimeobj1_top", EXTRA_ABOVE_MOB_LAYER)) + if(400 to 800) + icon_state = "slimeobj2" + src.add_overlay(image('modular_nova/master_files/icons/effects/turf_effects.dmi', "slimeobj2_top", EXTRA_ABOVE_MOB_LAYER)) + if(800 to 980) + icon_state = "slimeobj3" + src.add_overlay(image('modular_nova/master_files/icons/effects/turf_effects.dmi', "slimeobj3_top", EXTRA_ABOVE_MOB_LAYER)) + if(980 to INFINITY) + name = "slime bust" //rare obj/item/statuebust + desc = "A priceless slime bust, the kind that belongs in a museum." + icon_state = "slimeobj4" + AddElement(/datum/element/art, GREAT_ART) + else + return + + if("dust") + name = "cloud of dust" + desc = "It's a cloud of glittering dust." + icon = 'modular_nova/master_files/icons/effects/turf_effects_64.dmi' + icon_state = "dust" + pixel_x = -16 + src.add_overlay(image('modular_nova/master_files/icons/effects/turf_effects_64.dmi', "dust_top", EXTRA_ABOVE_MOB_LAYER)) + playsound(get_turf(src), 'modular_nova/master_files/sound/effects/wing_flap.ogg', 25, TRUE) + + if("borgmat") + name = "soft-foam mat" + desc = "It's a rolled out mat, doesn't include wireless charging." + icon = 'modular_nova/master_files/icons/effects/turf_effects_64.dmi' + icon_state = "borgmat" + pixel_x = -16 + pixel_y = -4 + playsound(get_turf(src), 'sound/items/handling/taperecorder_pickup.ogg', 25, TRUE) + + //bodyparts + if("tails") + name = "tail" + desc = "It's a fluffy tail." + icon = 'modular_nova/master_files/icons/effects/turf_effects_64.dmi' + icon_state = "tails" + pixel_x = -16 //correcting the offset for 64 + var/mutable_appearance/overlay = mutable_appearance('modular_nova/master_files/icons/effects/turf_effects_64.dmi', "tails_top", EXTRA_ABOVE_MOB_LAYER, src) + overlay.appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER + src.add_overlay(overlay) + playsound(get_turf(src), 'sound/weapons/thudswoosh.ogg', 25, TRUE) + + if("constrict") + name = "tail" + desc = "It's a scaly tail." + icon = 'modular_nova/master_files/icons/effects/turf_effects_64.dmi' + icon_state = "naga" + pixel_x = -16 + var/mutable_appearance/overlay = mutable_appearance('modular_nova/master_files/icons/effects/turf_effects_64.dmi', "naga_top", EXTRA_ABOVE_MOB_LAYER, src) + overlay.appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER + src.add_overlay(overlay) + playsound(get_turf(src), 'modular_nova/modules/emotes/sound/emotes/hiss.ogg', 25, TRUE) + + //prints + if("pawprint") + name = "pawprint" + desc = "It's a pawprint left on the ground." + icon_state = pick("pawprint", "pawprint1") + playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg', + 'sound/effects/footstep/hardbarefoot2.ogg', + 'sound/effects/footstep/hardbarefoot3.ogg', + 'sound/effects/footstep/hardbarefoot4.ogg', + 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE) + + if("hoofprint") + name = "hoofprint" + desc = "It's a hoofprint left on the ground." + icon_state = pick("hoofprint", "hoofprint1") + playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg', + 'sound/effects/footstep/hardbarefoot2.ogg', + 'sound/effects/footstep/hardbarefoot3.ogg', + 'sound/effects/footstep/hardbarefoot4.ogg', + 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE) + if("footprint") + name = "footprint" + desc = "It's a footprint left on the ground." + icon_state = pick("footprint", "footprint1") + playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg', + 'sound/effects/footstep/hardbarefoot2.ogg', + 'sound/effects/footstep/hardbarefoot3.ogg', + 'sound/effects/footstep/hardbarefoot4.ogg', + 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE) + + if("clawprint") + name = "clawprint" + desc = "It's a clawprint left on the ground." + icon_state = pick("clawprint", "clawprint1") + playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg', + 'sound/effects/footstep/hardbarefoot2.ogg', + 'sound/effects/footstep/hardbarefoot3.ogg', + 'sound/effects/footstep/hardbarefoot4.ogg', + 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE) + + if("shoeprint") + name = "shoeprint" + desc = "It's a shoeprint left on the ground." + icon_state = pick("shoeprint", "shoeprint1") + playsound(get_turf(src), pick('sound/effects/footstep/floor1.ogg', + 'sound/effects/footstep/floor2.ogg', + 'sound/effects/footstep/floor3.ogg', + 'sound/effects/footstep/floor4.ogg', + 'sound/effects/footstep/floor5.ogg'), 50, TRUE) + + else + return + +/obj/structure/mark_turf/proc/turf_check(mob/living/user) //This gets called when a player leaves their turf + var/list/no_trail = list("tail", "constrict") + var/list/long_trail = list("pawprint", "hoofprint", "clawprint", "footprint", "shoeprint") + + if(user.owned_turf.name in no_trail) + QDEL_NULL(src) + if(user.owned_turf.name in long_trail) + QDEL_IN(src, 150 SECONDS) + user.owned_turf = null + else + QDEL_IN(src, 15 SECONDS) + user.owned_turf = null + + if(ishuman(user)) + var/mob/living/carbon/human/human_user = user + human_user.update_mutant_bodyparts() + +#undef EXTRA_ABOVE_MOB_LAYER diff --git a/modular_nova/modules/emotes/code/dna_screams.dm b/modular_nova/modules/emotes/code/dna_screams.dm new file mode 100644 index 00000000000000..368aa7d7224327 --- /dev/null +++ b/modular_nova/modules/emotes/code/dna_screams.dm @@ -0,0 +1,68 @@ +/datum/species + var/list/screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_m1.ogg', 'modular_nova/modules/emotes/sound/voice/scream_m2.ogg') + var/list/femalescreamsounds = list('modular_nova/modules/emotes/sound/voice/scream_f1.ogg', 'modular_nova/modules/emotes/sound/voice/scream_f2.ogg') + +/datum/species/synthetic + screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_silicon.ogg') + femalescreamsounds = null + +/datum/species/android + screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_silicon.ogg') + femalescreamsounds = null + +/datum/species/lizard + screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_lizard.ogg', 'sound/voice/lizard/lizard_scream_1.ogg', 'sound/voice/lizard/lizard_scream_2.ogg', 'sound/voice/lizard/lizard_scream_3.ogg') + + femalescreamsounds = null + +/datum/species/skeleton + screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_skeleton.ogg') + femalescreamsounds = null + +/datum/species/fly + screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_moth.ogg') + femalescreamsounds = null + +/datum/species/moth + screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_moth.ogg') + femalescreamsounds = null + +/datum/species/insect + screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_moth.ogg') + femalescreamsounds = null + +/datum/species/ethereal + screamsounds = list('sound/voice/ethereal/ethereal_scream_1.ogg', 'sound/voice/ethereal/ethereal_scream_2.ogg', 'sound/voice/ethereal/ethereal_scream_3.ogg') + femalescreamsounds = null + +/datum/species/jelly + screamsounds = list('modular_nova/modules/emotes/sound/emotes/jelly_scream.ogg') + femalescreamsounds = null + +/datum/species/plasmaman + screamsounds = list('sound/voice/plasmaman/plasmeme_scream_1.ogg', 'sound/voice/plasmaman/plasmeme_scream_2.ogg', 'sound/voice/plasmaman/plasmeme_scream_3.ogg') + femalescreamsounds = null + +/datum/species/vox + screamsounds = list('modular_nova/modules/emotes/sound/emotes/voxscream.ogg') + femalescreamsounds = null + +/datum/species/vox_primalis + screamsounds = list('modular_nova/modules/emotes/sound/emotes/voxscream.ogg') + femalescreamsounds = null + +/datum/species/xeno + screamsounds = list('sound/voice/hiss6.ogg') + femalescreamsounds = null + +/datum/species/zombie + screamsounds = list('modular_nova/modules/emotes/sound/emotes/zombie_scream.ogg') + femalescreamsounds = null + +/datum/species/lizard + screamsounds = list('sound/voice/lizard/lizard_scream_1.ogg', 'sound/voice/lizard/lizard_scream_2.ogg', 'sound/voice/lizard/lizard_scream_3.ogg') + femalescreamsounds = null + +/datum/species/teshari + screamsounds = list('modular_nova/modules/emotes/sound/emotes/raptorscream.ogg') + femalescreamsounds = null diff --git a/modular_nova/modules/emotes/code/emotes.dm b/modular_nova/modules/emotes/code/emotes.dm new file mode 100644 index 00000000000000..bd59b46003046f --- /dev/null +++ b/modular_nova/modules/emotes/code/emotes.dm @@ -0,0 +1,534 @@ + +#define EMOTE_DELAY (5 SECONDS) //To prevent spam emotes. + +/mob + var/nextsoundemote = 1 //Time at which the next emote can be played + +/datum/emote + cooldown = EMOTE_DELAY + +//Disables the custom emote blacklist from TG that normally applies to slimes. +/datum/emote/living/custom + mob_type_blacklist_typecache = list(/mob/living/brain) + cooldown = 0 + stat_allowed = SOFT_CRIT + +//me-verb emotes should not have a cooldown check +/datum/emote/living/custom/check_cooldown(mob/user, intentional) + return TRUE + + +/datum/emote/imaginary_friend/custom/check_cooldown(mob/user, intentional) + return TRUE + + +/datum/emote/living/blush + sound = 'modular_nova/modules/emotes/sound/emotes/blush.ogg' + +/datum/emote/living/quill + key = "quill" + key_third_person = "quills" + message = "rustles their quills." + emote_type = EMOTE_AUDIBLE + muzzle_ignore = TRUE + mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/emotes/voxrustle.ogg' + + +/datum/emote/living/cough/get_sound(mob/living/user) + if(isvox(user)) + return 'modular_nova/modules/emotes/sound/emotes/voxcough.ogg' + if(iscarbon(user)) + if(user.gender == MALE) + return pick('modular_nova/modules/emotes/sound/emotes/male/male_cough_1.ogg', + 'modular_nova/modules/emotes/sound/emotes/male/male_cough_2.ogg', + 'modular_nova/modules/emotes/sound/emotes/male/male_cough_3.ogg') + return pick('modular_nova/modules/emotes/sound/emotes/female/female_cough_1.ogg', + 'modular_nova/modules/emotes/sound/emotes/female/female_cough_2.ogg', + 'modular_nova/modules/emotes/sound/emotes/female/female_cough_3.ogg') + return + +/datum/emote/living/sneeze + vary = TRUE + +/datum/emote/living/sneeze/get_sound(mob/living/user) + if(isvox(user)) + return 'modular_nova/modules/emotes/sound/emotes/voxsneeze.ogg' + if(iscarbon(user)) + if(user.gender == MALE) + return 'modular_nova/modules/emotes/sound/emotes/male/male_sneeze.ogg' + return 'modular_nova/modules/emotes/sound/emotes/female/female_sneeze.ogg' + return + +/datum/emote/flip/can_run_emote(mob/user, status_check, intentional) + if(intentional && (!HAS_TRAIT(user, TRAIT_FREERUNNING) && !HAS_TRAIT(user, TRAIT_STYLISH)) && !isobserver(user)) + user.balloon_alert(user, "not nimble enough!") + return FALSE + return ..() + +/datum/emote/living/peep + key = "peep" + key_third_person = "peeps" + message = "peeps like a bird!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/peep_once.ogg' + +/datum/emote/living/peep2 + key = "peep2" + key_third_person = "peeps twice" + message = "peeps twice like a bird!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/peep.ogg' + +/datum/emote/living/snap2 + key = "snap2" + key_third_person = "snaps twice" + message = "snaps twice." + message_param = "snaps twice at %t." + emote_type = EMOTE_AUDIBLE + muzzle_ignore = TRUE + hands_use_check = TRUE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/snap2.ogg' + +/datum/emote/living/snap3 + key = "snap3" + key_third_person = "snaps thrice" + message = "snaps thrice." + message_param = "snaps thrice at %t." + emote_type = EMOTE_AUDIBLE + muzzle_ignore = TRUE + hands_use_check = TRUE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/snap3.ogg' + +/datum/emote/living/awoo + key = "awoo" + key_third_person = "awoos" + message = "lets out an awoo!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/awoo.ogg' + +/datum/emote/living/nya + key = "nya" + key_third_person = "nyas" + message = "lets out a nya!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/nya.ogg' + +/datum/emote/living/weh + key = "weh" + key_third_person = "wehs" + message = "lets out a weh!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/weh.ogg' + +/datum/emote/living/mothsqueak + key = "msqueak" + key_third_person = "lets out a tiny squeak" + message = "lets out a tiny squeak!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/mothsqueak.ogg' + +/datum/emote/living/mousesqueak + key = "squeak" + key_third_person = "squeaks" + message = "squeaks!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'sound/creatures/mousesqueek.ogg' + +/datum/emote/living/merp + key = "merp" + key_third_person = "merps" + message = "merps!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/merp.ogg' + +/datum/emote/living/bark + key = "bark" + key_third_person = "barks" + message = "barks!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/bark2.ogg' + +/datum/emote/living/squish + key = "squish" + key_third_person = "squishes" + message = "squishes!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/slime_squish.ogg' + +/datum/emote/living/meow + key = "meow" + key_third_person = "meows" + message = "meows!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/emotes/meow.ogg' + +/datum/emote/living/hiss + key = "hiss1" + key_third_person = "hisses" + message = "hisses!" + emote_type = EMOTE_AUDIBLE + mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/emotes/hiss.ogg' + +/datum/emote/living/chitter + key = "chitter" + key_third_person = "chitters" + message = "chitters!" + emote_type = EMOTE_AUDIBLE + mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) + vary = TRUE + +/datum/emote/living/chitter/get_sound(mob/living/user) + if(ismoth(user)) + return 'modular_nova/modules/emotes/sound/emotes/mothchitter.ogg' + else + return'sound/creatures/chitter.ogg' + +/datum/emote/living/sigh/get_sound(mob/living/user) + if(iscarbon(user)) + if(user.gender == MALE) + return 'modular_nova/modules/emotes/sound/emotes/male/male_sigh.ogg' + return 'modular_nova/modules/emotes/sound/emotes/female/female_sigh.ogg' + return + +/datum/emote/living/sniff + vary = TRUE + +/datum/emote/living/sniff/get_sound(mob/living/user) + if(iscarbon(user)) + if(user.gender == MALE) + return 'modular_nova/modules/emotes/sound/emotes/male/male_sniff.ogg' + return 'modular_nova/modules/emotes/sound/emotes/female/female_sniff.ogg' + return + +/datum/emote/living/gasp/get_sound(mob/living/user) + if(iscarbon(user)) + if(user.gender == MALE) + return pick('modular_nova/modules/emotes/sound/emotes/male/gasp_m1.ogg', + 'modular_nova/modules/emotes/sound/emotes/male/gasp_m2.ogg', + 'modular_nova/modules/emotes/sound/emotes/male/gasp_m3.ogg', + 'modular_nova/modules/emotes/sound/emotes/male/gasp_m4.ogg', + 'modular_nova/modules/emotes/sound/emotes/male/gasp_m5.ogg', + 'modular_nova/modules/emotes/sound/emotes/male/gasp_m6.ogg') + return pick('modular_nova/modules/emotes/sound/emotes/female/gasp_f1.ogg', + 'modular_nova/modules/emotes/sound/emotes/female/gasp_f2.ogg', + 'modular_nova/modules/emotes/sound/emotes/female/gasp_f3.ogg', + 'modular_nova/modules/emotes/sound/emotes/female/gasp_f4.ogg', + 'modular_nova/modules/emotes/sound/emotes/female/gasp_f5.ogg', + 'modular_nova/modules/emotes/sound/emotes/female/gasp_f6.ogg') + return + +/datum/emote/living/snore + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/emotes/snore.ogg' + +/datum/emote/living/burp + vary = TRUE + +/datum/emote/living/burp/get_sound(mob/living/user) + if(iscarbon(user)) + if(user.gender == MALE) + return 'modular_nova/modules/emotes/sound/emotes/male/burp_m.ogg' + return 'modular_nova/modules/emotes/sound/emotes/female/burp_f.ogg' + return + +/datum/emote/living/clap + key = "clap" + key_third_person = "claps" + message = "claps." + muzzle_ignore = TRUE + hands_use_check = TRUE + emote_type = EMOTE_AUDIBLE + audio_cooldown = 5 SECONDS + vary = TRUE + mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) + +/datum/emote/living/clap/get_sound(mob/living/user) + return pick('modular_nova/modules/emotes/sound/emotes/clap1.ogg', + 'modular_nova/modules/emotes/sound/emotes/clap2.ogg', + 'modular_nova/modules/emotes/sound/emotes/clap3.ogg', + 'modular_nova/modules/emotes/sound/emotes/clap4.ogg') + +/datum/emote/living/clap/can_run_emote(mob/living/carbon/user, status_check = TRUE , intentional) + if(user.usable_hands < 2) + return FALSE + return ..() + +/datum/emote/living/clap1 + key = "clap1" + key_third_person = "claps once" + message = "claps once." + emote_type = EMOTE_AUDIBLE + muzzle_ignore = TRUE + hands_use_check = TRUE + vary = TRUE + mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) + +/datum/emote/living/clap1/get_sound(mob/living/user) + return pick('modular_nova/modules/emotes/sound/emotes/claponce1.ogg', + 'modular_nova/modules/emotes/sound/emotes/claponce2.ogg') + +/datum/emote/living/clap1/can_run_emote(mob/living/carbon/user, status_check = TRUE , intentional) + if(user.usable_hands < 2) + return FALSE + return ..() + +/datum/emote/living/headtilt + key = "tilt" + key_third_person = "tilts" + message = "tilts their head." + message_AI = "tilts the image on their display." + +/datum/emote/beep + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/emotes/twobeep.ogg' + mob_type_allowed_typecache = list(/mob/living) //Beep already exists on brains and silicons + +/datum/emote/living/blink2 + key = "blink2" + key_third_person = "blinks twice" + message = "blinks twice." + message_AI = "has their display flicker twice." + +/datum/emote/living/rblink + key = "rblink" + key_third_person = "rapidly blinks" + message = "rapidly blinks!" + message_AI = "has their display port flash rapidly!" + +/datum/emote/living/squint + key = "squint" + key_third_person = "squints" + message = "squints." + message_AI = "zooms in." + +/datum/emote/living/smirk + key = "smirk" + key_third_person = "smirks" + message = "smirks." + +/datum/emote/living/eyeroll + key = "eyeroll" + key_third_person = "rolls their eyes" + message = "rolls their eyes." + +/datum/emote/living/huff + key = "huffs" + key_third_person = "huffs" + message = "huffs!" + +/datum/emote/living/etwitch + key = "etwitch" + key_third_person = "twitches their ears" + message = "twitches their ears!" + +/datum/emote/living/clear + key = "clear" + key_third_person = "clears their throat" + message = "clears their throat." + +// Avian revolution +/datum/emote/living/bawk + key = "bawk" + key_third_person = "bawks" + message = "bawks like a chicken." + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/bawk.ogg' + +/datum/emote/living/caw + key = "caw" + key_third_person = "caws" + message = "caws!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/caw.ogg' + +/datum/emote/living/caw2 + key = "caw2" + key_third_person = "caws twice" + message = "caws twice!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/caw2.ogg' + +/datum/emote/living/whistle + key = "whistle" + key_third_person = "whistles" + message = "whistles." + emote_type = EMOTE_AUDIBLE + +/datum/emote/living/blep + key = "blep" + key_third_person = "bleps" + message = "bleps their tongue out. Blep." + message_AI = "shows an image of a random blepping animal. Blep." + message_robot = "bleps their robo-tongue out. Blep." + +/datum/emote/living/bork + key = "bork" + key_third_person = "borks" + message = "lets out a bork." + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/bork.ogg' + +/datum/emote/living/hoot + key = "hoot" + key_third_person = "hoots" + message = "hoots!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/hoot.ogg' + +/datum/emote/living/growl + key = "growl" + key_third_person = "growls" + message = "lets out a growl." + emote_type = EMOTE_AUDIBLE + muzzle_ignore = TRUE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/growl.ogg' + +/datum/emote/living/woof + key = "woof" + key_third_person = "woofs" + message = "lets out a woof." + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/woof.ogg' + +/datum/emote/living/baa + key = "baa" + key_third_person = "baas" + message = "lets out a baa." + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/baa.ogg' + +/datum/emote/living/baa2 + key = "baa2" + key_third_person = "baas" + message = "bleats." + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/baa2.ogg' + +/datum/emote/living/wurble + key = "wurble" + key_third_person = "wurbles" + message = "lets out a wurble." + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/wurble.ogg' + +/datum/emote/living/rattle + key = "rattle" + key_third_person = "rattles" + message = "rattles!" + emote_type = EMOTE_AUDIBLE + muzzle_ignore = TRUE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/rattle.ogg' + +/datum/emote/living/cackle + key = "cackle" + key_third_person = "cackles" + message = "cackles hysterically!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/cackle_yeen.ogg' + +/mob/living/proc/do_ass_slap_animation(atom/slapped) + do_attack_animation(slapped, no_effect=TRUE) + var/image/gloveimg = image('icons/effects/effects.dmi', slapped, "slapglove", slapped.layer + 0.1) + gloveimg.pixel_y = -5 + gloveimg.pixel_x = 0 + slapped.flick_overlay_view(gloveimg, 1 SECONDS) + + // And animate the attack! + animate(gloveimg, alpha = 175, transform = matrix() * 0.75, pixel_x = 0, pixel_y = -5, pixel_z = 0, time = 0.3 SECONDS) + animate(time = 0.1 SECONDS) + animate(alpha = 0, time = 0.3 SECONDS, easing = CIRCULAR_EASING|EASE_OUT) + +//Froggie Revolution +/datum/emote/living/warble + key = "warble" + key_third_person = "warbles" + message = "warbles!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/warbles.ogg' + +/datum/emote/living/trills + key = "trills" + key_third_person = "trills!" + message = "trills!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/trills.ogg' + +/datum/emote/living/rpurr + key = "rpurr" + key_third_person = "purrs!" + message = "purrs!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/raptor_purr.ogg' + +/datum/emote/living/purr //Ported from CitRP originally by buffyuwu. + key = "purr" + key_third_person = "purrs!" + message = "purrs!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/feline_purr.ogg' + +/datum/emote/living/moo + key = "moo" + key_third_person = "moos!" + message = "moos!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/moo.ogg' + +/datum/emote/living/honk + key = "honk1" + key_third_person = "honks loudly like a goose!" + message = "honks loudly like a goose!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_nova/modules/emotes/sound/voice/goose_honk.ogg' + +/datum/emote/living/gnash + key = "gnash" + key_third_person = "gnashes" + message = "gnashes." + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'sound/weapons/bite.ogg' + +/datum/emote/living/thump + key = "thump" + key_third_person = "thumps" + message = "thumps their foot!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'sound/effects/glassbash.ogg' diff --git a/modular_nova/modules/emotes/code/laugh_datums.dm b/modular_nova/modules/emotes/code/laugh_datums.dm new file mode 100644 index 00000000000000..535f79975e2944 --- /dev/null +++ b/modular_nova/modules/emotes/code/laugh_datums.dm @@ -0,0 +1,36 @@ +GLOBAL_LIST_EMPTY(laugh_types) + +/datum/laugh_type + var/name + var/list/male_laughsounds + var/list/female_laughsounds + +/datum/laugh_type/none //Why would you want this? + name = "No Laugh" + male_laughsounds = null + female_laughsounds = null + +/datum/laugh_type/human + name = "Human Laugh" + male_laughsounds = list('sound/voice/human/manlaugh1.ogg', + 'sound/voice/human/manlaugh2.ogg') + female_laughsounds = list('modular_nova/modules/emotes/sound/emotes/female/female_giggle_1.ogg', + 'modular_nova/modules/emotes/sound/emotes/female/female_giggle_2.ogg') + +/datum/laugh_type/felinid + name = "Felinid Laugh" + male_laughsounds = list('modular_nova/modules/emotes/sound/emotes/nyahaha1.ogg', + 'modular_nova/modules/emotes/sound/emotes/nyahaha2.ogg', + 'modular_nova/modules/emotes/sound/emotes/nyaha.ogg', + 'modular_nova/modules/emotes/sound/emotes/nyahehe.ogg') + female_laughsounds = null + +/datum/laugh_type/moth + name = "Moth Laugh" + male_laughsounds = list('modular_nova/modules/emotes/sound/emotes/mothlaugh.ogg') + female_laughsounds = null + +/datum/laugh_type/insect + name = "Insect Laugh" + male_laughsounds = list('modular_nova/modules/emotes/sound/emotes/mothlaugh.ogg') + female_laughsounds = null diff --git a/modular_skyrat/modules/emotes/code/laugh_emotes.dm b/modular_nova/modules/emotes/code/laugh_emotes.dm similarity index 82% rename from modular_skyrat/modules/emotes/code/laugh_emotes.dm rename to modular_nova/modules/emotes/code/laugh_emotes.dm index 5c202afeaadadf..29eb2ad2f6abe2 100644 --- a/modular_skyrat/modules/emotes/code/laugh_emotes.dm +++ b/modular_nova/modules/emotes/code/laugh_emotes.dm @@ -16,8 +16,8 @@ return pick('sound/voice/human/manlaugh1.ogg', 'sound/voice/human/manlaugh2.ogg') else - return pick('modular_skyrat/modules/emotes/sound/emotes/female/female_giggle_1.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/female/female_giggle_2.ogg') + return pick('modular_nova/modules/emotes/sound/emotes/female/female_giggle_1.ogg', + 'modular_nova/modules/emotes/sound/emotes/female/female_giggle_2.ogg') if(user.gender == MALE || !LAZYLEN(H.selected_laugh.female_laughsounds)) return pick(H.selected_laugh.male_laughsounds) else diff --git a/modular_nova/modules/emotes/code/scream_datums.dm b/modular_nova/modules/emotes/code/scream_datums.dm new file mode 100644 index 00000000000000..43b9e272019787 --- /dev/null +++ b/modular_nova/modules/emotes/code/scream_datums.dm @@ -0,0 +1,136 @@ +GLOBAL_LIST_EMPTY(scream_types) + +/datum/scream_type + var/name + var/list/male_screamsounds + var/list/female_screamsounds + +/datum/scream_type/none //Why would you want this? + name = "No Scream" + male_screamsounds = null + female_screamsounds = null + +/datum/scream_type/human + name = "Human Scream" + male_screamsounds = list( + 'modular_nova/modules/emotes/sound/voice/scream_m1.ogg', + 'modular_nova/modules/emotes/sound/voice/scream_m2.ogg', + ) + female_screamsounds = list( + 'modular_nova/modules/emotes/sound/voice/scream_f1.ogg', + 'modular_nova/modules/emotes/sound/voice/scream_f2.ogg', + ) + +/datum/scream_type/human_two + name = "Human Scream 2" + male_screamsounds = list( + 'sound/voice/human/malescream_1.ogg', + 'sound/voice/human/malescream_2.ogg', + 'sound/voice/human/malescream_3.ogg', + 'sound/voice/human/malescream_4.ogg', + 'sound/voice/human/malescream_5.ogg', + 'sound/voice/human/malescream_6.ogg', + ) + female_screamsounds = list( + 'sound/voice/human/femalescream_1.ogg', + 'sound/voice/human/femalescream_2.ogg', + 'sound/voice/human/femalescream_3.ogg', + 'sound/voice/human/femalescream_4.ogg', + 'sound/voice/human/femalescream_5.ogg', + ) + +/datum/scream_type/robotic + name = "Robotic Scream" + male_screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_silicon.ogg') + female_screamsounds = null + +/datum/scream_type/lizard + name = "Lizard Scream" + male_screamsounds = list( + 'sound/voice/lizard/lizard_scream_1.ogg', + 'sound/voice/lizard/lizard_scream_2.ogg', + 'sound/voice/lizard/lizard_scream_3.ogg', + ) + female_screamsounds = null + +/datum/scream_type/lizard2 + name = "Lizard Scream 2" + male_screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_lizard.ogg') + female_screamsounds = null + +/datum/scream_type/cat + name = "Cat Scream" + male_screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_cat.ogg') + female_screamsounds = null + +/datum/scream_type/moth + name = "Moth Scream" + male_screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_moth.ogg') + female_screamsounds = null + +/datum/scream_type/moth_two + name = "Moth Scream 2" + male_screamsounds = list('sound/voice/moth/scream_moth.ogg') + female_screamsounds = null + +/datum/scream_type/jelly + name = "Jelly Scream" + male_screamsounds = list('modular_nova/modules/emotes/sound/emotes/jelly_scream.ogg') + female_screamsounds = null + +/datum/scream_type/vox + name = "Vox Scream" + male_screamsounds = list('modular_nova/modules/emotes/sound/emotes/voxscream.ogg') + female_screamsounds = null + +/datum/scream_type/xeno + name = "Xeno Scream" + male_screamsounds = list('sound/voice/hiss6.ogg') + female_screamsounds = null + +/datum/scream_type/raptor //This is the Teshari scream ported from CitRP which was a cockatoo scream edited by BlackMajor. + name = "Raptor Scream" + male_screamsounds = list('modular_nova/modules/emotes/sound/emotes/raptorscream.ogg') + female_screamsounds = null + +/datum/scream_type/rodent //Ported from Polaris/Virgo. + name = "Rodent Scream" + male_screamsounds = list('modular_nova/modules/emotes/sound/emotes/rodentscream.ogg') + female_screamsounds = null + +/datum/scream_type/ethereal + name = "Ethereal Scream" + male_screamsounds = list( + 'sound/voice/ethereal/ethereal_scream_1.ogg', + 'sound/voice/ethereal/ethereal_scream_2.ogg', + 'sound/voice/ethereal/ethereal_scream_3.ogg') + female_screamsounds = null + +//DONATOR SCREAMS +/datum/scream_type/zombie + name = "Zombie Scream" + male_screamsounds = list('modular_nova/modules/emotes/sound/emotes/zombie_scream.ogg') + female_screamsounds = null + +/datum/scream_type/monkey + name = "Monkey Scream" + male_screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_monkey.ogg') + female_screamsounds = null + +/datum/scream_type/gorilla + name = "Gorilla Scream" + male_screamsounds = list('sound/creatures/gorilla.ogg') + female_screamsounds = null + +/datum/scream_type/skeleton + name = "Skeleton Scream" + male_screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_skeleton.ogg') + female_screamsounds = null + +/datum/scream_type/plasmaman + name = "Plasmaman Scream" + male_screamsounds = list( + 'sound/voice/plasmaman/plasmeme_scream_1.ogg', + 'sound/voice/plasmaman/plasmeme_scream_2.ogg', + 'sound/voice/plasmaman/plasmeme_scream_3.ogg') + female_screamsounds = null diff --git a/modular_skyrat/modules/emotes/code/scream_emote.dm b/modular_nova/modules/emotes/code/scream_emote.dm similarity index 92% rename from modular_skyrat/modules/emotes/code/scream_emote.dm rename to modular_nova/modules/emotes/code/scream_emote.dm index 50619d1bd851c3..d53aa13fdd5a38 100644 --- a/modular_skyrat/modules/emotes/code/scream_emote.dm +++ b/modular_nova/modules/emotes/code/scream_emote.dm @@ -21,9 +21,9 @@ if(!override) return if(iscyborg(user)) - return 'modular_skyrat/modules/emotes/sound/voice/scream_silicon.ogg' + return 'modular_nova/modules/emotes/sound/voice/scream_silicon.ogg' if(ismonkey(user)) - return 'modular_skyrat/modules/emotes/sound/voice/scream_monkey.ogg' + return 'modular_nova/modules/emotes/sound/voice/scream_monkey.ogg' if(istype(user, /mob/living/basic/gorilla)) return 'sound/creatures/gorilla.ogg' if(isalien(user)) diff --git a/modular_skyrat/modules/emotes/code/synth_emotes.dm b/modular_nova/modules/emotes/code/synth_emotes.dm similarity index 93% rename from modular_skyrat/modules/emotes/code/synth_emotes.dm rename to modular_nova/modules/emotes/code/synth_emotes.dm index 1c67805f155a90..8c0bce5b963da1 100644 --- a/modular_skyrat/modules/emotes/code/synth_emotes.dm +++ b/modular_nova/modules/emotes/code/synth_emotes.dm @@ -6,7 +6,7 @@ key_third_person = "dwoops" message = "chirps happily!" vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/emotes/dwoop.ogg' + sound = 'modular_nova/modules/emotes/sound/emotes/dwoop.ogg' silicon_allowed = TRUE allowed_species = list(/datum/species/synthetic) cooldown = 2 SECONDS @@ -15,7 +15,7 @@ key = "yes" message = "emits an affirmative blip." vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/emotes/synth_yes.ogg' + sound = 'modular_nova/modules/emotes/sound/emotes/synth_yes.ogg' silicon_allowed = TRUE allowed_species = list(/datum/species/synthetic) cooldown = 2 SECONDS @@ -24,7 +24,7 @@ key = "no" message = "emits a negative blip." vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/emotes/synth_no.ogg' + sound = 'modular_nova/modules/emotes/sound/emotes/synth_no.ogg' silicon_allowed = TRUE allowed_species = list(/datum/species/synthetic) cooldown = 2 SECONDS @@ -66,7 +66,7 @@ message_param = "beeps sharply at %t." emote_type = EMOTE_AUDIBLE vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/emotes/twobeep.ogg' + sound = 'modular_nova/modules/emotes/sound/emotes/twobeep.ogg' silicon_allowed = TRUE allowed_species = list(/datum/species/synthetic) cooldown = 2 SECONDS diff --git a/modular_nova/modules/emotes/readme.md b/modular_nova/modules/emotes/readme.md new file mode 100644 index 00000000000000..6eaa7c53988a80 --- /dev/null +++ b/modular_nova/modules/emotes/readme.md @@ -0,0 +1,56 @@ +https://github.com/Skyrat-SS13/Skyrat-tg/pull/892 +https://github.com/Skyrat-SS13/Skyrat-tg/pull/1925 +https://github.com/Skyrat-SS13/Skyrat-tg/pull/2320 +https://github.com/Skyrat-SS13/Skyrat-tg/pull/6259 + +## Title: All the emotes. + +MODULE ID: EMOTES + +### Description: + +Adds all the emotes we once had on the oldbase, and shoves them right into here. + +Adds some new emotes, and adjusted sound files. + +Pretty much anything that changes emotes is in here + +### TG Proc Changes: + +File Location | Changed TG Proc +------------- | --------------- +code/datums/emotes.dm | `/datum/emote/proc/check_cooldown(mob/user, intentional)` +code/datums/emotes.dm | `/datum/emote/proc/run_emote(mob/user, params, type_override, intentional = FALSE)` +code/modules/mob/living/carbon/carbon_defense.dm | `/mob/living/carbon/proc/help_shake_act(mob/living/carbon/M)` + +### TG File Changes: + +- code/datums/emotes.dm +- code/modules/mob/living/emote.dm +- code/modules/mob/living/carbon/emote.dm + +### Defines: + +File Location | Defines +------------- | ------- +code/__DEFINES/~nova_defines/traits.dm | `#define TRAIT_EXCITABLE "wagwag"` +modular_nova/modules/emotes/code/emotes.dm | `#define EMOTE_DELAY` + +### Master file additions + +- N/A + +### Included files that are not contained in this module: + +- N/A + +### Credits: +- Gandalf2k15 - porting and refactoring +- Avunia Takiya + - refactoring code + - adjusting existing sound files + - adding more emotes +- TheOOZ Additional emotes + - overlay emotes + - turf emotes +- VOREstation - a couple of the soundfiles and emote texts diff --git a/modular_skyrat/modules/emotes/sound/claponce1.ogg b/modular_nova/modules/emotes/sound/claponce1.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/claponce1.ogg rename to modular_nova/modules/emotes/sound/claponce1.ogg diff --git a/modular_skyrat/modules/emotes/sound/claponce2.ogg b/modular_nova/modules/emotes/sound/claponce2.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/claponce2.ogg rename to modular_nova/modules/emotes/sound/claponce2.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/Nose_boop.ogg b/modular_nova/modules/emotes/sound/emotes/Nose_boop.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/Nose_boop.ogg rename to modular_nova/modules/emotes/sound/emotes/Nose_boop.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/annoyed.ogg b/modular_nova/modules/emotes/sound/emotes/annoyed.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/annoyed.ogg rename to modular_nova/modules/emotes/sound/emotes/annoyed.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/blush.ogg b/modular_nova/modules/emotes/sound/emotes/blush.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/blush.ogg rename to modular_nova/modules/emotes/sound/emotes/blush.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/clap1.ogg b/modular_nova/modules/emotes/sound/emotes/clap1.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/clap1.ogg rename to modular_nova/modules/emotes/sound/emotes/clap1.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/clap2.ogg b/modular_nova/modules/emotes/sound/emotes/clap2.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/clap2.ogg rename to modular_nova/modules/emotes/sound/emotes/clap2.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/clap3.ogg b/modular_nova/modules/emotes/sound/emotes/clap3.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/clap3.ogg rename to modular_nova/modules/emotes/sound/emotes/clap3.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/clap4.ogg b/modular_nova/modules/emotes/sound/emotes/clap4.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/clap4.ogg rename to modular_nova/modules/emotes/sound/emotes/clap4.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/claponce1.ogg b/modular_nova/modules/emotes/sound/emotes/claponce1.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/claponce1.ogg rename to modular_nova/modules/emotes/sound/emotes/claponce1.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/claponce2.ogg b/modular_nova/modules/emotes/sound/emotes/claponce2.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/claponce2.ogg rename to modular_nova/modules/emotes/sound/emotes/claponce2.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/dwoop.ogg b/modular_nova/modules/emotes/sound/emotes/dwoop.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/dwoop.ogg rename to modular_nova/modules/emotes/sound/emotes/dwoop.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/burp_f.ogg b/modular_nova/modules/emotes/sound/emotes/female/burp_f.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/female/burp_f.ogg rename to modular_nova/modules/emotes/sound/emotes/female/burp_f.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/female_cough_1.ogg b/modular_nova/modules/emotes/sound/emotes/female/female_cough_1.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/female/female_cough_1.ogg rename to modular_nova/modules/emotes/sound/emotes/female/female_cough_1.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/female_cough_2.ogg b/modular_nova/modules/emotes/sound/emotes/female/female_cough_2.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/female/female_cough_2.ogg rename to modular_nova/modules/emotes/sound/emotes/female/female_cough_2.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/female_cough_3.ogg b/modular_nova/modules/emotes/sound/emotes/female/female_cough_3.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/female/female_cough_3.ogg rename to modular_nova/modules/emotes/sound/emotes/female/female_cough_3.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/female_giggle_1.ogg b/modular_nova/modules/emotes/sound/emotes/female/female_giggle_1.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/female/female_giggle_1.ogg rename to modular_nova/modules/emotes/sound/emotes/female/female_giggle_1.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/female_giggle_2.ogg b/modular_nova/modules/emotes/sound/emotes/female/female_giggle_2.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/female/female_giggle_2.ogg rename to modular_nova/modules/emotes/sound/emotes/female/female_giggle_2.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/female_sigh.ogg b/modular_nova/modules/emotes/sound/emotes/female/female_sigh.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/female/female_sigh.ogg rename to modular_nova/modules/emotes/sound/emotes/female/female_sigh.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/female_sneeze.ogg b/modular_nova/modules/emotes/sound/emotes/female/female_sneeze.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/female/female_sneeze.ogg rename to modular_nova/modules/emotes/sound/emotes/female/female_sneeze.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/female_sniff.ogg b/modular_nova/modules/emotes/sound/emotes/female/female_sniff.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/female/female_sniff.ogg rename to modular_nova/modules/emotes/sound/emotes/female/female_sniff.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/gasp_f1.ogg b/modular_nova/modules/emotes/sound/emotes/female/gasp_f1.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/female/gasp_f1.ogg rename to modular_nova/modules/emotes/sound/emotes/female/gasp_f1.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/gasp_f2.ogg b/modular_nova/modules/emotes/sound/emotes/female/gasp_f2.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/female/gasp_f2.ogg rename to modular_nova/modules/emotes/sound/emotes/female/gasp_f2.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/gasp_f3.ogg b/modular_nova/modules/emotes/sound/emotes/female/gasp_f3.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/female/gasp_f3.ogg rename to modular_nova/modules/emotes/sound/emotes/female/gasp_f3.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/gasp_f4.ogg b/modular_nova/modules/emotes/sound/emotes/female/gasp_f4.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/female/gasp_f4.ogg rename to modular_nova/modules/emotes/sound/emotes/female/gasp_f4.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/gasp_f5.ogg b/modular_nova/modules/emotes/sound/emotes/female/gasp_f5.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/female/gasp_f5.ogg rename to modular_nova/modules/emotes/sound/emotes/female/gasp_f5.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/gasp_f6.ogg b/modular_nova/modules/emotes/sound/emotes/female/gasp_f6.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/female/gasp_f6.ogg rename to modular_nova/modules/emotes/sound/emotes/female/gasp_f6.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/hiss.ogg b/modular_nova/modules/emotes/sound/emotes/hiss.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/hiss.ogg rename to modular_nova/modules/emotes/sound/emotes/hiss.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/jelly_scream.ogg b/modular_nova/modules/emotes/sound/emotes/jelly_scream.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/jelly_scream.ogg rename to modular_nova/modules/emotes/sound/emotes/jelly_scream.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/burp_m.ogg b/modular_nova/modules/emotes/sound/emotes/male/burp_m.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/male/burp_m.ogg rename to modular_nova/modules/emotes/sound/emotes/male/burp_m.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/gasp_m1.ogg b/modular_nova/modules/emotes/sound/emotes/male/gasp_m1.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/male/gasp_m1.ogg rename to modular_nova/modules/emotes/sound/emotes/male/gasp_m1.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/gasp_m2.ogg b/modular_nova/modules/emotes/sound/emotes/male/gasp_m2.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/male/gasp_m2.ogg rename to modular_nova/modules/emotes/sound/emotes/male/gasp_m2.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/gasp_m3.ogg b/modular_nova/modules/emotes/sound/emotes/male/gasp_m3.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/male/gasp_m3.ogg rename to modular_nova/modules/emotes/sound/emotes/male/gasp_m3.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/gasp_m4.ogg b/modular_nova/modules/emotes/sound/emotes/male/gasp_m4.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/male/gasp_m4.ogg rename to modular_nova/modules/emotes/sound/emotes/male/gasp_m4.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/gasp_m5.ogg b/modular_nova/modules/emotes/sound/emotes/male/gasp_m5.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/male/gasp_m5.ogg rename to modular_nova/modules/emotes/sound/emotes/male/gasp_m5.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/gasp_m6.ogg b/modular_nova/modules/emotes/sound/emotes/male/gasp_m6.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/male/gasp_m6.ogg rename to modular_nova/modules/emotes/sound/emotes/male/gasp_m6.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/male_cough_1.ogg b/modular_nova/modules/emotes/sound/emotes/male/male_cough_1.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/male/male_cough_1.ogg rename to modular_nova/modules/emotes/sound/emotes/male/male_cough_1.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/male_cough_2.ogg b/modular_nova/modules/emotes/sound/emotes/male/male_cough_2.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/male/male_cough_2.ogg rename to modular_nova/modules/emotes/sound/emotes/male/male_cough_2.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/male_cough_3.ogg b/modular_nova/modules/emotes/sound/emotes/male/male_cough_3.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/male/male_cough_3.ogg rename to modular_nova/modules/emotes/sound/emotes/male/male_cough_3.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/male_sigh.ogg b/modular_nova/modules/emotes/sound/emotes/male/male_sigh.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/male/male_sigh.ogg rename to modular_nova/modules/emotes/sound/emotes/male/male_sigh.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/male_sneeze.ogg b/modular_nova/modules/emotes/sound/emotes/male/male_sneeze.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/male/male_sneeze.ogg rename to modular_nova/modules/emotes/sound/emotes/male/male_sneeze.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/male_sniff.ogg b/modular_nova/modules/emotes/sound/emotes/male/male_sniff.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/male/male_sniff.ogg rename to modular_nova/modules/emotes/sound/emotes/male/male_sniff.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/meow.ogg b/modular_nova/modules/emotes/sound/emotes/meow.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/meow.ogg rename to modular_nova/modules/emotes/sound/emotes/meow.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/mothchitter.ogg b/modular_nova/modules/emotes/sound/emotes/mothchitter.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/mothchitter.ogg rename to modular_nova/modules/emotes/sound/emotes/mothchitter.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/mothlaugh.ogg b/modular_nova/modules/emotes/sound/emotes/mothlaugh.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/mothlaugh.ogg rename to modular_nova/modules/emotes/sound/emotes/mothlaugh.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/mothsqueak.ogg b/modular_nova/modules/emotes/sound/emotes/mothsqueak.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/mothsqueak.ogg rename to modular_nova/modules/emotes/sound/emotes/mothsqueak.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/nyaha.ogg b/modular_nova/modules/emotes/sound/emotes/nyaha.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/nyaha.ogg rename to modular_nova/modules/emotes/sound/emotes/nyaha.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/nyahaha1.ogg b/modular_nova/modules/emotes/sound/emotes/nyahaha1.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/nyahaha1.ogg rename to modular_nova/modules/emotes/sound/emotes/nyahaha1.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/nyahaha2.ogg b/modular_nova/modules/emotes/sound/emotes/nyahaha2.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/nyahaha2.ogg rename to modular_nova/modules/emotes/sound/emotes/nyahaha2.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/nyahehe.ogg b/modular_nova/modules/emotes/sound/emotes/nyahehe.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/nyahehe.ogg rename to modular_nova/modules/emotes/sound/emotes/nyahehe.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/question.ogg b/modular_nova/modules/emotes/sound/emotes/question.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/question.ogg rename to modular_nova/modules/emotes/sound/emotes/question.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/raptorscream.ogg b/modular_nova/modules/emotes/sound/emotes/raptorscream.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/raptorscream.ogg rename to modular_nova/modules/emotes/sound/emotes/raptorscream.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/realize.ogg b/modular_nova/modules/emotes/sound/emotes/realize.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/realize.ogg rename to modular_nova/modules/emotes/sound/emotes/realize.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/rodentscream.ogg b/modular_nova/modules/emotes/sound/emotes/rodentscream.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/rodentscream.ogg rename to modular_nova/modules/emotes/sound/emotes/rodentscream.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/scream_moth.ogg b/modular_nova/modules/emotes/sound/emotes/scream_moth.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/scream_moth.ogg rename to modular_nova/modules/emotes/sound/emotes/scream_moth.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/snore.ogg b/modular_nova/modules/emotes/sound/emotes/snore.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/snore.ogg rename to modular_nova/modules/emotes/sound/emotes/snore.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/sweatdrop.ogg b/modular_nova/modules/emotes/sound/emotes/sweatdrop.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/sweatdrop.ogg rename to modular_nova/modules/emotes/sound/emotes/sweatdrop.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/synth_no.ogg b/modular_nova/modules/emotes/sound/emotes/synth_no.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/synth_no.ogg rename to modular_nova/modules/emotes/sound/emotes/synth_no.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/synth_yes.ogg b/modular_nova/modules/emotes/sound/emotes/synth_yes.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/synth_yes.ogg rename to modular_nova/modules/emotes/sound/emotes/synth_yes.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/twobeep.ogg b/modular_nova/modules/emotes/sound/emotes/twobeep.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/twobeep.ogg rename to modular_nova/modules/emotes/sound/emotes/twobeep.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/voxcough.ogg b/modular_nova/modules/emotes/sound/emotes/voxcough.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/voxcough.ogg rename to modular_nova/modules/emotes/sound/emotes/voxcough.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/voxrustle.ogg b/modular_nova/modules/emotes/sound/emotes/voxrustle.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/voxrustle.ogg rename to modular_nova/modules/emotes/sound/emotes/voxrustle.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/voxscream.ogg b/modular_nova/modules/emotes/sound/emotes/voxscream.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/voxscream.ogg rename to modular_nova/modules/emotes/sound/emotes/voxscream.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/voxsneeze.ogg b/modular_nova/modules/emotes/sound/emotes/voxsneeze.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/voxsneeze.ogg rename to modular_nova/modules/emotes/sound/emotes/voxsneeze.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/yawn_m1.ogg b/modular_nova/modules/emotes/sound/emotes/yawn_m1.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/yawn_m1.ogg rename to modular_nova/modules/emotes/sound/emotes/yawn_m1.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/yawn_m2.ogg b/modular_nova/modules/emotes/sound/emotes/yawn_m2.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/yawn_m2.ogg rename to modular_nova/modules/emotes/sound/emotes/yawn_m2.ogg diff --git a/modular_skyrat/modules/emotes/sound/emotes/zombie_scream.ogg b/modular_nova/modules/emotes/sound/emotes/zombie_scream.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/emotes/zombie_scream.ogg rename to modular_nova/modules/emotes/sound/emotes/zombie_scream.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/awoo.ogg b/modular_nova/modules/emotes/sound/voice/awoo.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/awoo.ogg rename to modular_nova/modules/emotes/sound/voice/awoo.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/baa.ogg b/modular_nova/modules/emotes/sound/voice/baa.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/baa.ogg rename to modular_nova/modules/emotes/sound/voice/baa.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/baa2.ogg b/modular_nova/modules/emotes/sound/voice/baa2.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/baa2.ogg rename to modular_nova/modules/emotes/sound/voice/baa2.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/bark1.ogg b/modular_nova/modules/emotes/sound/voice/bark1.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/bark1.ogg rename to modular_nova/modules/emotes/sound/voice/bark1.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/bark2.ogg b/modular_nova/modules/emotes/sound/voice/bark2.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/bark2.ogg rename to modular_nova/modules/emotes/sound/voice/bark2.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/bawk.ogg b/modular_nova/modules/emotes/sound/voice/bawk.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/bawk.ogg rename to modular_nova/modules/emotes/sound/voice/bawk.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/bork.ogg b/modular_nova/modules/emotes/sound/voice/bork.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/bork.ogg rename to modular_nova/modules/emotes/sound/voice/bork.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/cackle_yeen.ogg b/modular_nova/modules/emotes/sound/voice/cackle_yeen.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/cackle_yeen.ogg rename to modular_nova/modules/emotes/sound/voice/cackle_yeen.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/caw.ogg b/modular_nova/modules/emotes/sound/voice/caw.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/caw.ogg rename to modular_nova/modules/emotes/sound/voice/caw.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/caw2.ogg b/modular_nova/modules/emotes/sound/voice/caw2.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/caw2.ogg rename to modular_nova/modules/emotes/sound/voice/caw2.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/feline_purr.ogg b/modular_nova/modules/emotes/sound/voice/feline_purr.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/feline_purr.ogg rename to modular_nova/modules/emotes/sound/voice/feline_purr.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/goose_honk.ogg b/modular_nova/modules/emotes/sound/voice/goose_honk.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/goose_honk.ogg rename to modular_nova/modules/emotes/sound/voice/goose_honk.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/growl.ogg b/modular_nova/modules/emotes/sound/voice/growl.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/growl.ogg rename to modular_nova/modules/emotes/sound/voice/growl.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/hiss.ogg b/modular_nova/modules/emotes/sound/voice/hiss.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/hiss.ogg rename to modular_nova/modules/emotes/sound/voice/hiss.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/hoot.ogg b/modular_nova/modules/emotes/sound/voice/hoot.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/hoot.ogg rename to modular_nova/modules/emotes/sound/voice/hoot.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/merowr.ogg b/modular_nova/modules/emotes/sound/voice/merowr.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/merowr.ogg rename to modular_nova/modules/emotes/sound/voice/merowr.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/merp.ogg b/modular_nova/modules/emotes/sound/voice/merp.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/merp.ogg rename to modular_nova/modules/emotes/sound/voice/merp.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/moo.ogg b/modular_nova/modules/emotes/sound/voice/moo.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/moo.ogg rename to modular_nova/modules/emotes/sound/voice/moo.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/mothsqueak.ogg b/modular_nova/modules/emotes/sound/voice/mothsqueak.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/mothsqueak.ogg rename to modular_nova/modules/emotes/sound/voice/mothsqueak.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/nya.ogg b/modular_nova/modules/emotes/sound/voice/nya.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/nya.ogg rename to modular_nova/modules/emotes/sound/voice/nya.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/peep.ogg b/modular_nova/modules/emotes/sound/voice/peep.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/peep.ogg rename to modular_nova/modules/emotes/sound/voice/peep.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/peep_once.ogg b/modular_nova/modules/emotes/sound/voice/peep_once.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/peep_once.ogg rename to modular_nova/modules/emotes/sound/voice/peep_once.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/raptor_purr.ogg b/modular_nova/modules/emotes/sound/voice/raptor_purr.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/raptor_purr.ogg rename to modular_nova/modules/emotes/sound/voice/raptor_purr.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/rattle.ogg b/modular_nova/modules/emotes/sound/voice/rattle.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/rattle.ogg rename to modular_nova/modules/emotes/sound/voice/rattle.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/roro_rogue.ogg b/modular_nova/modules/emotes/sound/voice/roro_rogue.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/roro_rogue.ogg rename to modular_nova/modules/emotes/sound/voice/roro_rogue.ogg diff --git a/modular_nova/modules/emotes/sound/voice/scream_cat.ogg b/modular_nova/modules/emotes/sound/voice/scream_cat.ogg new file mode 100644 index 00000000000000..ba00eec223c68c Binary files /dev/null and b/modular_nova/modules/emotes/sound/voice/scream_cat.ogg differ diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_f1.ogg b/modular_nova/modules/emotes/sound/voice/scream_f1.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/scream_f1.ogg rename to modular_nova/modules/emotes/sound/voice/scream_f1.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_f2.ogg b/modular_nova/modules/emotes/sound/voice/scream_f2.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/scream_f2.ogg rename to modular_nova/modules/emotes/sound/voice/scream_f2.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_f3.ogg b/modular_nova/modules/emotes/sound/voice/scream_f3.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/scream_f3.ogg rename to modular_nova/modules/emotes/sound/voice/scream_f3.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_lizard.ogg b/modular_nova/modules/emotes/sound/voice/scream_lizard.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/scream_lizard.ogg rename to modular_nova/modules/emotes/sound/voice/scream_lizard.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_m.ogg b/modular_nova/modules/emotes/sound/voice/scream_m.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/scream_m.ogg rename to modular_nova/modules/emotes/sound/voice/scream_m.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_m1.ogg b/modular_nova/modules/emotes/sound/voice/scream_m1.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/scream_m1.ogg rename to modular_nova/modules/emotes/sound/voice/scream_m1.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_m2.ogg b/modular_nova/modules/emotes/sound/voice/scream_m2.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/scream_m2.ogg rename to modular_nova/modules/emotes/sound/voice/scream_m2.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_monkey.ogg b/modular_nova/modules/emotes/sound/voice/scream_monkey.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/scream_monkey.ogg rename to modular_nova/modules/emotes/sound/voice/scream_monkey.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_moth.ogg b/modular_nova/modules/emotes/sound/voice/scream_moth.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/scream_moth.ogg rename to modular_nova/modules/emotes/sound/voice/scream_moth.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_silicon.ogg b/modular_nova/modules/emotes/sound/voice/scream_silicon.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/scream_silicon.ogg rename to modular_nova/modules/emotes/sound/voice/scream_silicon.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_skeleton.ogg b/modular_nova/modules/emotes/sound/voice/scream_skeleton.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/scream_skeleton.ogg rename to modular_nova/modules/emotes/sound/voice/scream_skeleton.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/slime_squish.ogg b/modular_nova/modules/emotes/sound/voice/slime_squish.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/slime_squish.ogg rename to modular_nova/modules/emotes/sound/voice/slime_squish.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/snap.ogg b/modular_nova/modules/emotes/sound/voice/snap.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/snap.ogg rename to modular_nova/modules/emotes/sound/voice/snap.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/snap2.ogg b/modular_nova/modules/emotes/sound/voice/snap2.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/snap2.ogg rename to modular_nova/modules/emotes/sound/voice/snap2.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/snap3.ogg b/modular_nova/modules/emotes/sound/voice/snap3.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/snap3.ogg rename to modular_nova/modules/emotes/sound/voice/snap3.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/trills.ogg b/modular_nova/modules/emotes/sound/voice/trills.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/trills.ogg rename to modular_nova/modules/emotes/sound/voice/trills.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/warbles.ogg b/modular_nova/modules/emotes/sound/voice/warbles.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/warbles.ogg rename to modular_nova/modules/emotes/sound/voice/warbles.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/weh.ogg b/modular_nova/modules/emotes/sound/voice/weh.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/weh.ogg rename to modular_nova/modules/emotes/sound/voice/weh.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/woof.ogg b/modular_nova/modules/emotes/sound/voice/woof.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/woof.ogg rename to modular_nova/modules/emotes/sound/voice/woof.ogg diff --git a/modular_skyrat/modules/emotes/sound/voice/wurble.ogg b/modular_nova/modules/emotes/sound/voice/wurble.ogg similarity index 100% rename from modular_skyrat/modules/emotes/sound/voice/wurble.ogg rename to modular_nova/modules/emotes/sound/voice/wurble.ogg diff --git a/modular_skyrat/modules/encounters/code/nri_raiders.dm b/modular_nova/modules/encounters/code/nri_raiders.dm similarity index 92% rename from modular_skyrat/modules/encounters/code/nri_raiders.dm rename to modular_nova/modules/encounters/code/nri_raiders.dm index 7ea6847ff4ead9..f388b675b54453 100644 --- a/modular_skyrat/modules/encounters/code/nri_raiders.dm +++ b/modular_nova/modules/encounters/code/nri_raiders.dm @@ -65,8 +65,8 @@ GLOBAL_VAR(first_officer) var/number = rand(1,99) ///Station name one is the most important pick and is pretty much the station's main argument against getting fined, thus it better be mostly always right. var/station_designation = pick_weight(list( - "Nanotrasen Research Station" = 70, - "Nanotrasen Refueling Outpost" = 5, + "Symphionia Research Station" = 70, + "Symphionia Refueling Outpost" = 5, "Interdyne Pharmaceuticals Chemical Factory" = 5, "Free Teshari League Engineering Station" = 5, "Agurkrral Military Base" = 5, @@ -107,6 +107,7 @@ GLOBAL_VAR(first_officer) var/obj/item/card/id/id_card = equipped.wear_id if(istype(id_card)) id_card.registered_name = equipped.real_name + id_card.update_icon() id_card.update_label() handlebank(equipped) @@ -114,13 +115,13 @@ GLOBAL_VAR(first_officer) /datum/outfit/pirate/nri/officer name = "NRI Field Officer" - head = /obj/item/clothing/head/beret/sec/nri + head = /obj/item/clothing/head/hats/colonial/nri_police glasses = /obj/item/clothing/glasses/sunglasses ears = /obj/item/radio/headset/guild/command mask = null - neck = /obj/item/clothing/neck/security_cape/armplate + neck = /obj/item/clothing/neck/cloak/colonial/nri_police - uniform = /obj/item/clothing/under/costume/nri/captain + uniform = /obj/item/clothing/under/colonial/nri_police suit = null gloves = /obj/item/clothing/gloves/combat @@ -129,61 +130,65 @@ GLOBAL_VAR(first_officer) belt = /obj/item/storage/belt/security/nri back = /obj/item/storage/backpack/satchel/leather - backpack_contents = list(/obj/item/storage/box/nri_survival_pack/raider = 1, /obj/item/ammo_box/magazine/m9mm_aps = 3, /obj/item/gun/ballistic/automatic/pistol/nri = 1, /obj/item/crucifix = 1, /obj/item/clothing/mask/gas/hecu2 = 1, /obj/item/modular_computer/pda/security = 1) + backpack_contents = list( + /obj/item/storage/box/nri_survival_pack/raider = 1, + /obj/item/ammo_box/magazine/recharge/plasma_battery = 3, + /obj/item/gun/ballistic/automatic/pistol/plasma_marksman = 1, + /obj/item/crucifix = 1, + /obj/item/clothing/mask/gas/nri_police = 1, + /obj/item/modular_computer/pda/nri_police = 1, + ) l_pocket = /obj/item/folder/blue/nri_cop r_pocket = /obj/item/storage/pouch/ammo - id = /obj/item/card/id/advanced - id_trim = /datum/id_trim/nri_raider/officer - -/datum/id_trim/nri_raider/officer - assignment = "NRI Field Officer" - -/datum/outfit/pirate/nri/marine - name = "NRI Marine" - - head = null - glasses = /obj/item/clothing/glasses/sunglasses - ears = /obj/item/radio/headset/guild - mask = null - - uniform = /obj/item/clothing/under/costume/nri - suit = null - - gloves = /obj/item/clothing/gloves/combat - - shoes = /obj/item/clothing/shoes/combat - - belt = /obj/item/storage/belt/security/nri - back = /obj/item/storage/backpack/satchel/leather - backpack_contents = list(/obj/item/storage/box/nri_survival_pack/raider = 1, /obj/item/crucifix = 1, /obj/item/ammo_box/magazine/m9mm = 3, /obj/item/clothing/mask/gas/hecu2 = 1, /obj/item/modular_computer/pda/security = 1) - l_pocket = /obj/item/gun/ballistic/automatic/pistol - r_pocket = /obj/item/storage/pouch/ammo + id = /obj/item/card/id/advanced/nri_police + id_trim = /datum/id_trim/nri_police + +/obj/item/modular_computer/pda/nri_police + name = "\improper NRI police PDA" + device_theme = PDA_THEME_TERMINAL + greyscale_colors = "#363655#7878f7" + comp_light_luminosity = 6.3 //Matching a flashlight + comp_light_color = "#5c20aa" //Simulated ultraviolet light for finding blood and :flushed: + starting_programs = list( + /datum/computer_file/program/records/security, + /datum/computer_file/program/crew_manifest, + /datum/computer_file/program/robocontrol, + ) + inserted_item = /obj/item/pen/fourcolor - id = /obj/item/card/id/advanced - id_trim = /datum/id_trim/nri_raider +/obj/item/card/id/advanced/nri_police + name = "\improper NRI police identification card" + desc = "A retro-looking card model modified to work with the modern identification systems." + icon = 'modular_nova/master_files/icons/obj/card.dmi' + icon_state = "card_nri_police" + assigned_icon_state = "assigned_nri_police" -/datum/id_trim/nri_raider - assignment = "NRI Marine" - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - trim_state = "trim_nri" - department_color = COLOR_RED_LIGHT - subdepartment_color = COLOR_COMMAND_BLUE - sechud_icon_state = "hud_nri" +/datum/id_trim/nri_police + assignment = "NRI Field Officer" + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' + trim_state = "trim_nri_police" + department_color = COLOR_NRI_POLICE_BLUE + subdepartment_color = COLOR_NRI_POLICE_SILVER + sechud_icon_state = "hud_nri_police" access = list(ACCESS_SYNDICATE, ACCESS_MAINT_TUNNELS) + threat_modifier = 2 // Not as treatening as syndicate, but still potentially harmful to the station + +/obj/item/gun/energy/e_gun/advtaser/normal + w_class = WEIGHT_CLASS_NORMAL /obj/effect/mob_spawn/ghost_role/human/nri_raider name = "NRI Raider sleeper" desc = "Cozy. You get the feeling you aren't supposed to be here, though..." prompt_name = "a NRI Marine" - icon = 'modular_skyrat/modules/cryosleep/icons/cryogenics.dmi' + icon = 'modular_nova/modules/cryosleep/icons/cryogenics.dmi' icon_state = "cryopod" mob_species = /datum/species/human faction = list(FACTION_RAIDER) you_are_text = "You are a Novaya Rossiyskaya Imperiya task force." flavour_text = "The station has refused to pay the fine for breaking Imperial regulations, you are here to recover the debt. Do so by demanding the funds. Force approach is usually recommended, but isn't the only method." important_text = "Allowed races are humans, Akulas, IPCs. Follow your field officer's orders. Important mention - while you are listed as the pirates gamewise, you really aren't lore-and-everything-else-wise. Roleplay accordingly." - outfit = /datum/outfit/pirate/nri/marine + outfit = /datum/outfit/pirate/nri restricted_species = list(/datum/species/human, /datum/species/akula, /datum/species/synthetic) random_appearance = FALSE show_flavor = TRUE @@ -255,8 +260,10 @@ GLOBAL_VAR(first_officer) var/obj/item/card/id/advanced/card = spawned_human.get_idcard() if(GLOB.first_officer == spawned_human) card.assignment = pick(NRI_LEADER_JOB_LIST) + card.trim.sechud_icon_state = "hud_nri_police_lead" else card.assignment = pick(NRI_JOB_LIST) + card.trim.sechud_icon_state = "hud_nri_police" card.update_label() @@ -271,14 +278,14 @@ GLOBAL_VAR(first_officer) /area/shuttle/pirate/nri name = "NRI Starship" forced_ambience = TRUE - ambient_buzz = 'modular_skyrat/modules/encounters/sounds/amb_ship_01.ogg' + ambient_buzz = 'modular_nova/modules/encounters/sounds/amb_ship_01.ogg' ambient_buzz_vol = 15 - ambientsounds = list('modular_skyrat/modules/encounters/sounds/alarm_radio.ogg', - 'modular_skyrat/modules/encounters/sounds/alarm_small_09.ogg', - 'modular_skyrat/modules/encounters/sounds/gear_loop.ogg', - 'modular_skyrat/modules/encounters/sounds/gear_start.ogg', - 'modular_skyrat/modules/encounters/sounds/gear_stop.ogg', - 'modular_skyrat/modules/encounters/sounds/intercom_loop.ogg') + ambientsounds = list('modular_nova/modules/encounters/sounds/alarm_radio.ogg', + 'modular_nova/modules/encounters/sounds/alarm_small_09.ogg', + 'modular_nova/modules/encounters/sounds/gear_loop.ogg', + 'modular_nova/modules/encounters/sounds/gear_start.ogg', + 'modular_nova/modules/encounters/sounds/gear_stop.ogg', + 'modular_nova/modules/encounters/sounds/intercom_loop.ogg') /obj/machinery/computer/shuttle/pirate/nri name = "police shuttle console" @@ -287,24 +294,20 @@ GLOBAL_VAR(first_officer) name = "police shuttle navigation computer" desc = "Used to designate a precise transit location for the police shuttle." -/obj/machinery/base_alarm/nri_raider - alarm_sound_file = 'modular_skyrat/modules/encounters/sounds/env_horn.ogg' - alarm_cooldown = 32 - /obj/machinery/porta_turret/syndicate/nri_raider name = "anti-projectile turret" desc = "An automatic defense turret designed for point-defense, it's probably not that wise to try approaching it." scan_range = 9 shot_delay = 15 faction = list(FACTION_RAIDER) - icon = 'modular_skyrat/modules/encounters/icons/turrets.dmi' + icon = 'modular_nova/modules/encounters/icons/turrets.dmi' icon_state = "gun_turret" base_icon_state = "gun_turret" max_integrity = 250 stun_projectile = /obj/projectile/bullet/ciws lethal_projectile = /obj/projectile/bullet/ciws - lethal_projectile_sound = 'modular_skyrat/modules/encounters/sounds/shell_out_tiny.ogg' - stun_projectile_sound = 'modular_skyrat/modules/encounters/sounds/shell_out_tiny.ogg' + lethal_projectile_sound = 'modular_nova/modules/encounters/sounds/shell_out_tiny.ogg' + stun_projectile_sound = 'modular_nova/modules/encounters/sounds/shell_out_tiny.ogg' /obj/machinery/porta_turret/syndicate/nri_raider/target(atom/movable/target) if(target) @@ -330,8 +333,8 @@ GLOBAL_VAR(first_officer) rechargeTime = 3 MINUTES movement_force = list("KNOCKDOWN"=0,"THROW"=0) can_move_docking_ports = TRUE - takeoff_sound = sound('modular_skyrat/modules/encounters/sounds/engine_ignit_int.ogg') - landing_sound = sound('modular_skyrat/modules/encounters/sounds/env_ship_down.ogg') + takeoff_sound = sound('modular_nova/modules/encounters/sounds/engine_ignit_int.ogg') + landing_sound = sound('modular_nova/modules/encounters/sounds/env_ship_down.ogg') /obj/structure/plaque/static_plaque/golden/commission/ks13/nri_raider desc = "NRI Terentiev-Yermolayev Orbital Shipworks, Providence High Orbit, Ship OSTs-02\n'Potato Beetle' Class Corvette\nCommissioned 10/11/2562 'Keeping Promises'" @@ -344,13 +347,6 @@ GLOBAL_VAR(first_officer) command_name = "NRI Enforcer-Class Starship Telegram" report_sound = ANNOUNCER_NRI_RAIDERS -/obj/item/storage/belt/military/nri/captain/pirate_officer/PopulateContents() - generate_items_inside(list( - /obj/item/knife/combat = 1, - /obj/item/grenade/smokebomb = 1, - /obj/item/grenade/flashbang = 1, - ),src) - /obj/item/storage/belt/security/nri/PopulateContents() generate_items_inside(list( /obj/item/knife/combat = 1, @@ -385,7 +381,7 @@ GLOBAL_VAR(first_officer) <br>3. Ensure that the station's command and security/military/defense force is not inspecting your ship, nor close approaching it, without your commanding officer's permission. It is recommended to leave a single officer as a ship's overseer, in order to minimise government property damage, as well as ensure maximum patrol efficiency in the field; <br>4. Ensure that the station's security/military/defense force is not preparing for a raid, using your shipped <small>(assembly required)</small> camera console. If needed, call them out on your ship's preinstalled station announcements system and remind them of invested funds, or the station's connections with the government, or so on; <br>5. Ensure that the ship, or any of the officers hasn't received any parcels, envelopes, letters or other packages, without its contents being stated by a third party and re-reviewed by any of the officers afterwards, to minimise chances of a bombing, teleportation, or any other terroristic act. If any of the above mentioned objects are to be received without the following procedured being initiated, it is required to dispose of the following objects immediately and report to the commanding officer. - <br><br>From the recent observations, while not being defined pre-revision in the following list, and officialy not being disclosed by the Nanotrasen Corporation, you might become a victim to their recent invention: a high-precision high-velocity particle accelerator, the Bluespace Artillerty Cannon. This weaponry is frequency-locked on certain global positioning systems, which are according to state regulations are built into the ship's hull. Said weaponry is excellent at disposing of small fighters to patrol corvettes, and damaging attack frigates; capable of splitting your standard issue corvette in half. And thus, to minimise your casualties and to ensure your safety, this guide provides you with a necessary information on how to circumvent said weaponry. + <br><br>From the recent observations, while not being defined pre-revision in the following list, and officialy not being disclosed by the Symphionia Corporation, you might become a victim to their recent invention: a high-precision high-velocity particle accelerator, the Bluespace Artillerty Cannon. This weaponry is frequency-locked on certain global positioning systems, which are according to state regulations are built into the ship's hull. Said weaponry is excellent at disposing of small fighters to patrol corvettes, and damaging attack frigates; capable of splitting your standard issue corvette in half. And thus, to minimise your casualties and to ensure your safety, this guide provides you with a necessary information on how to circumvent said weaponry. <br>In order to perform a dodging maneuver, you have to: <br>1. For the ship, lock onto the stable position in space, using your navigations console; <br>2. The moment Bluespace Artillery Cannon starts charging up, boot up the ship's thrusters; diff --git a/modular_skyrat/modules/encounters/icons/turrets.dmi b/modular_nova/modules/encounters/icons/turrets.dmi similarity index 100% rename from modular_skyrat/modules/encounters/icons/turrets.dmi rename to modular_nova/modules/encounters/icons/turrets.dmi diff --git a/modular_skyrat/modules/encounters/sounds/alarm_radio.ogg b/modular_nova/modules/encounters/sounds/alarm_radio.ogg similarity index 100% rename from modular_skyrat/modules/encounters/sounds/alarm_radio.ogg rename to modular_nova/modules/encounters/sounds/alarm_radio.ogg diff --git a/modular_skyrat/modules/encounters/sounds/alarm_small_09.ogg b/modular_nova/modules/encounters/sounds/alarm_small_09.ogg similarity index 100% rename from modular_skyrat/modules/encounters/sounds/alarm_small_09.ogg rename to modular_nova/modules/encounters/sounds/alarm_small_09.ogg diff --git a/modular_skyrat/modules/encounters/sounds/amb_ship_01.ogg b/modular_nova/modules/encounters/sounds/amb_ship_01.ogg similarity index 100% rename from modular_skyrat/modules/encounters/sounds/amb_ship_01.ogg rename to modular_nova/modules/encounters/sounds/amb_ship_01.ogg diff --git a/modular_skyrat/modules/encounters/sounds/engine_ignit_int.ogg b/modular_nova/modules/encounters/sounds/engine_ignit_int.ogg similarity index 100% rename from modular_skyrat/modules/encounters/sounds/engine_ignit_int.ogg rename to modular_nova/modules/encounters/sounds/engine_ignit_int.ogg diff --git a/modular_skyrat/modules/encounters/sounds/env_horn.ogg b/modular_nova/modules/encounters/sounds/env_horn.ogg similarity index 100% rename from modular_skyrat/modules/encounters/sounds/env_horn.ogg rename to modular_nova/modules/encounters/sounds/env_horn.ogg diff --git a/modular_skyrat/modules/encounters/sounds/env_ship_down.ogg b/modular_nova/modules/encounters/sounds/env_ship_down.ogg similarity index 100% rename from modular_skyrat/modules/encounters/sounds/env_ship_down.ogg rename to modular_nova/modules/encounters/sounds/env_ship_down.ogg diff --git a/modular_skyrat/modules/encounters/sounds/gear_loop.ogg b/modular_nova/modules/encounters/sounds/gear_loop.ogg similarity index 100% rename from modular_skyrat/modules/encounters/sounds/gear_loop.ogg rename to modular_nova/modules/encounters/sounds/gear_loop.ogg diff --git a/modular_skyrat/modules/encounters/sounds/gear_start.ogg b/modular_nova/modules/encounters/sounds/gear_start.ogg similarity index 100% rename from modular_skyrat/modules/encounters/sounds/gear_start.ogg rename to modular_nova/modules/encounters/sounds/gear_start.ogg diff --git a/modular_skyrat/modules/encounters/sounds/gear_stop.ogg b/modular_nova/modules/encounters/sounds/gear_stop.ogg similarity index 100% rename from modular_skyrat/modules/encounters/sounds/gear_stop.ogg rename to modular_nova/modules/encounters/sounds/gear_stop.ogg diff --git a/modular_skyrat/modules/encounters/sounds/intercom_loop.ogg b/modular_nova/modules/encounters/sounds/intercom_loop.ogg similarity index 100% rename from modular_skyrat/modules/encounters/sounds/intercom_loop.ogg rename to modular_nova/modules/encounters/sounds/intercom_loop.ogg diff --git a/modular_skyrat/modules/encounters/sounds/morse.ogg b/modular_nova/modules/encounters/sounds/morse.ogg similarity index 100% rename from modular_skyrat/modules/encounters/sounds/morse.ogg rename to modular_nova/modules/encounters/sounds/morse.ogg diff --git a/modular_skyrat/modules/encounters/sounds/shell_out_tiny.ogg b/modular_nova/modules/encounters/sounds/shell_out_tiny.ogg similarity index 100% rename from modular_skyrat/modules/encounters/sounds/shell_out_tiny.ogg rename to modular_nova/modules/encounters/sounds/shell_out_tiny.ogg diff --git a/modular_skyrat/modules/energy_axe/code/energy_fireaxe.dm b/modular_nova/modules/energy_axe/code/energy_fireaxe.dm similarity index 78% rename from modular_skyrat/modules/energy_axe/code/energy_fireaxe.dm rename to modular_nova/modules/energy_axe/code/energy_fireaxe.dm index a956ebce1bf810..d93f04ecac7024 100644 --- a/modular_skyrat/modules/energy_axe/code/energy_fireaxe.dm +++ b/modular_nova/modules/energy_axe/code/energy_fireaxe.dm @@ -1,13 +1,13 @@ // Energy fire axes, for DS-2 /obj/item/fireaxe/energy - icon = 'modular_skyrat/master_files/icons/obj/energy_axe.dmi' + icon = 'modular_nova/master_files/icons/obj/energy_axe.dmi' icon_state = "energy_axe0" base_icon_state = "energy_axe" worn_icon_state = "energy_axe" - lefthand_file = 'modular_skyrat/master_files/icons/mob/energyaxe_lefthand.dmi' - righthand_file = 'modular_skyrat/master_files/icons/mob/energyaxe_righthand.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi' + lefthand_file = 'modular_nova/master_files/icons/mob/energyaxe_lefthand.dmi' + righthand_file = 'modular_nova/master_files/icons/mob/energyaxe_righthand.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi' name = "energy fire axe" desc = "You aren't quite sure if this counts as a fire axe anymore, but it sure is fancy! A tag hangs off of it reading: \"property of the Gorlex Marauders\"" force = 5 @@ -18,7 +18,7 @@ light_on = FALSE armour_penetration = 35 special_desc_requirement = EXAMINE_CHECK_SYNDICATE - special_desc = "An energized fire axe used in Syndicate bases for breaking glass, and people." + special_desc = "An energized fire axe used in Symphionia bases for breaking glass, and people." /obj/item/fireaxe/energy/Initialize(mapload) . = ..() diff --git a/modular_skyrat/modules/energy_axe/code/energy_fireaxe_case.dm b/modular_nova/modules/energy_axe/code/energy_fireaxe_case.dm similarity index 91% rename from modular_skyrat/modules/energy_axe/code/energy_fireaxe_case.dm rename to modular_nova/modules/energy_axe/code/energy_fireaxe_case.dm index ab326233ff58c4..ef52b3679243b6 100644 --- a/modular_skyrat/modules/energy_axe/code/energy_fireaxe_case.dm +++ b/modular_nova/modules/energy_axe/code/energy_fireaxe_case.dm @@ -1,7 +1,7 @@ /obj/structure/closet/secure_closet/ds2atmos name = "energy axe cabinet" desc = "A cabinet storing an energy fire axe along with basic firefighting tools." - icon = 'modular_skyrat/master_files/icons/obj/closet.dmi' + icon = 'modular_nova/master_files/icons/obj/closet.dmi' icon_state = "riot" req_access = list(ACCESS_SYNDICATE) diff --git a/modular_skyrat/modules/escape_menu/code/escape_menu_skyrat.dm b/modular_nova/modules/escape_menu/code/escape_menu_skyrat.dm similarity index 100% rename from modular_skyrat/modules/escape_menu/code/escape_menu_skyrat.dm rename to modular_nova/modules/escape_menu/code/escape_menu_skyrat.dm diff --git a/modular_skyrat/modules/escape_menu/code/readme.md b/modular_nova/modules/escape_menu/code/readme.md similarity index 100% rename from modular_skyrat/modules/escape_menu/code/readme.md rename to modular_nova/modules/escape_menu/code/readme.md diff --git a/modular_skyrat/modules/events/code/_event_globalvars.dm b/modular_nova/modules/events/code/_event_globalvars.dm similarity index 100% rename from modular_skyrat/modules/events/code/_event_globalvars.dm rename to modular_nova/modules/events/code/_event_globalvars.dm diff --git a/modular_skyrat/modules/events/code/event_spawner.dm b/modular_nova/modules/events/code/event_spawner.dm similarity index 98% rename from modular_skyrat/modules/events/code/event_spawner.dm rename to modular_nova/modules/events/code/event_spawner.dm index bc375763455293..83ae0f6faa5cd4 100644 --- a/modular_skyrat/modules/events/code/event_spawner.dm +++ b/modular_nova/modules/events/code/event_spawner.dm @@ -1,5 +1,5 @@ /obj/character_event_spawner - icon = 'modular_skyrat/modules/cryosleep/icons/cryogenics.dmi' + icon = 'modular_nova/modules/cryosleep/icons/cryogenics.dmi' icon_state = "cryopod" var/list/species_whitelist diff --git a/modular_skyrat/modules/events/code/event_spawner_menu.dm b/modular_nova/modules/events/code/event_spawner_menu.dm similarity index 100% rename from modular_skyrat/modules/events/code/event_spawner_menu.dm rename to modular_nova/modules/events/code/event_spawner_menu.dm diff --git a/modular_skyrat/modules/events/readme.md b/modular_nova/modules/events/readme.md similarity index 100% rename from modular_skyrat/modules/events/readme.md rename to modular_nova/modules/events/readme.md diff --git a/modular_skyrat/modules/examinemore/code/examine_more.dm b/modular_nova/modules/examinemore/code/examine_more.dm similarity index 92% rename from modular_skyrat/modules/examinemore/code/examine_more.dm rename to modular_nova/modules/examinemore/code/examine_more.dm index e8500f18cf73df..e52ad08e332b2a 100644 --- a/modular_skyrat/modules/examinemore/code/examine_more.dm +++ b/modular_nova/modules/examinemore/code/examine_more.dm @@ -14,7 +14,7 @@ would only be recognisable with someone that had the syndicate trait. //The special description that is triggered when special_desc_requirements are met. Make sure you set the correct EXAMINE_CHECK! var/special_desc = "" - //The special affiliation type, basically overrides the "Syndicate Affiliation" for SYNDICATE check types. It will show whatever organisation you put here instead of "Syndicate Affiliation" + //The special affiliation type, basically overrides the "Symphionia Affiliation" for SYNDICATE check types. It will show whatever organisation you put here instead of "Symphionia Affiliation" var/special_desc_affiliation = "" //The requirement setting for special descriptions. See examine_defines.dm for more info. @@ -26,7 +26,7 @@ would only be recognisable with someone that had the syndicate trait. //The JOB requirement setting if EXAMINE_CHECK_JOB is set. E.g. JOB_SECURITY_OFFICER. As you can see, it's a list. So when setting it, ensure you do = list(shit1, shit2) var/list/special_desc_jobs - //The FACTION requirement setting if EXAMINE_CHECK_FACTION is set. E.g. "Syndicate". As you can see, it's a list. So when setting it, ensure you do = list(shit1, shit2) + //The FACTION requirement setting if EXAMINE_CHECK_FACTION is set. E.g. "Symphionia". As you can see, it's a list. So when setting it, ensure you do = list(shit1, shit2) var/list/special_desc_factions @@ -56,7 +56,7 @@ would only be recognisable with someone that had the syndicate trait. if(user.mind) var/datum/mind/M = user.mind if((M.special_role == ROLE_TRAITOR) || (ROLE_SYNDICATE in user.faction)) - composed_message = "You note the following because of your <span class='red'><b>[special_desc_affiliation ? special_desc_affiliation : "Syndicate Affiliation"]</b></span>: <br>" + composed_message = "You note the following because of your <span class='red'><b>[special_desc_affiliation ? special_desc_affiliation : "Symphionia Affiliation"]</b></span>: <br>" composed_message += special_desc . += composed_message else if(HAS_TRAIT(M, TRAIT_DETECTIVE)) //Useful detective! @@ -68,7 +68,7 @@ would only be recognisable with someone that had the syndicate trait. if(user.mind) var/datum/mind/M = user.mind if((M.special_role == ROLE_TRAITOR) || (ROLE_SYNDICATE in user.faction)) - composed_message = "You note the following because of your <span class='red'><b>[special_desc_affiliation ? special_desc_affiliation : "Syndicate Affiliation"]</b></span>: <br>" + composed_message = "You note the following because of your <span class='red'><b>[special_desc_affiliation ? special_desc_affiliation : "Symphionia Affiliation"]</b></span>: <br>" composed_message += special_desc . += composed_message else if(HAS_TRAIT(M, TRAIT_DETECTIVE)) //Useful detective! @@ -115,7 +115,7 @@ would only be recognisable with someone that had the syndicate trait. composed_message += special_desc . += composed_message else if((human_user.mind.special_role == ROLE_TRAITOR) || (ROLE_SYNDICATE in human_user.faction)) - composed_message = "You note the following because of your [span_red("<b>[special_desc_affiliation ? special_desc_affiliation : "Syndicate Affiliation"]</b>")]: <br>" + composed_message = "You note the following because of your [span_red("<b>[special_desc_affiliation ? special_desc_affiliation : "Symphionia Affiliation"]</b>")]: <br>" composed_message += special_desc . += composed_message diff --git a/modular_nova/modules/examinemore/code/readme.md b/modular_nova/modules/examinemore/code/readme.md new file mode 100644 index 00000000000000..c7dc6a2f6e1dae --- /dev/null +++ b/modular_nova/modules/examinemore/code/readme.md @@ -0,0 +1,26 @@ +## Title: Special Examine System + +MODULE ID: examinemore + +### Description: + +Adds a system for setting special descriptors for items that trigger dependant on the below defines. Please check the files for more information. + +### TG Proc Changes: + +- N/A + +### Defines: + +- code\__DEFINES\~nova_defines\examine_defines.dm + +### Master file additions + +- N/A + +### Included files that are not contained in this module: + +- N/A + +### Credits: +Gandalf2k15 - OG code diff --git a/modular_nova/modules/exp_corps/code/clothing.dm b/modular_nova/modules/exp_corps/code/clothing.dm new file mode 100644 index 00000000000000..b7135eb1596b31 --- /dev/null +++ b/modular_nova/modules/exp_corps/code/clothing.dm @@ -0,0 +1,274 @@ +/obj/item/clothing/under/rank/expeditionary_corps + name = "expeditionary corps uniform" + desc = "A rugged uniform for those who see the worst at the edges of the galaxy." + icon_state = "exp_corps" + icon = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi' + armor_type = /datum/armor/clothing_under/rank_expeditionary_corps + strip_delay = 7 SECONDS + alt_covers_chest = TRUE + sensor_mode = SENSOR_COORDS + random_sensor = FALSE + +/datum/armor/clothing_under/rank_expeditionary_corps + fire = 15 + acid = 15 + +/obj/item/storage/belt/military/expeditionary_corps + name = "expeditionary corps chest rig" + desc = "A set of tactical webbing worn by expeditionary corps." + icon_state = "webbing_exp_corps" + worn_icon_state = "webbing_exp_corps" + icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' + uses_advanced_reskins = TRUE + unique_reskin = list( + "Webbing" = list( + RESKIN_ICON_STATE = "webbing_exp_corps", + RESKIN_WORN_ICON_STATE = "webbing_exp_corps" + ), + "Belt" = list( + RESKIN_ICON_STATE = "belt_exp_corps", + RESKIN_WORN_ICON_STATE = "belt_exp_corps" + ), + ) + +/obj/item/storage/belt/military/expeditionary_corps/combat_tech + name = "combat tech's chest rig" + +/obj/item/storage/belt/military/expeditionary_corps/combat_tech/PopulateContents() + new /obj/item/screwdriver(src) + new /obj/item/wrench(src) + new /obj/item/weldingtool(src) + new /obj/item/crowbar(src) + new /obj/item/wirecutters(src) + new /obj/item/multitool(src) + new /obj/item/stack/cable_coil(src) + +/obj/item/storage/belt/military/expeditionary_corps/field_medic + name = "field medic's chest rig" + +/obj/item/storage/belt/military/expeditionary_corps/field_medic/PopulateContents() + new /obj/item/scalpel(src) + new /obj/item/circular_saw/field_medic(src) + new /obj/item/hemostat(src) + new /obj/item/retractor(src) + new /obj/item/cautery(src) + new /obj/item/surgical_drapes(src) + new /obj/item/bonesetter(src) + +/obj/item/storage/belt/military/expeditionary_corps/pointman + name = "pointman's chest rig" + +/obj/item/storage/belt/military/expeditionary_corps/pointman/PopulateContents() + new /obj/item/reagent_containers/cup/glass/bottle/whiskey(src) + new /obj/item/stack/sheet/plasteel(src,5) + new /obj/item/reagent_containers/cup/bottle/morphine(src) + +/obj/item/storage/belt/military/expeditionary_corps/marksman + name = "marksman's chest rig" + +/obj/item/storage/belt/military/expeditionary_corps/marksman/PopulateContents() + new /obj/item/binoculars(src) + new /obj/item/storage/fancy/cigarettes/cigpack_robust(src) + new /obj/item/lighter(src) + new /obj/item/clothing/mask/bandana/skull(src) + +/obj/item/clothing/shoes/combat/expeditionary_corps + name = "expeditionary corps boots" + desc = "High speed, low drag combat boots." + icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi' + icon_state = "exp_corps" + inhand_icon_state = "jackboots" + +/obj/item/clothing/gloves/color/black/expeditionary_corps + name = "expeditionary corps gloves" + icon_state = "exp_corps" + icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi' + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT + resistance_flags = FIRE_PROOF + +/obj/item/clothing/gloves/chief_engineer/expeditionary_corps + name = "expeditionary corps insulated gloves" + icon_state = "exp_corps_eng" + icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi' + worn_icon_state = "exp_corps" + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT + resistance_flags = FIRE_PROOF + armor_type = /datum/armor/chief_engineer_expeditionary_corps + +/datum/armor/chief_engineer_expeditionary_corps + fire = 80 + acid = 50 + +/obj/item/clothing/gloves/latex/nitrile/expeditionary_corps + name = "expeditionary corps medic gloves" + icon_state = "exp_corps_med" + icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi' + worn_icon_state = "exp_corps" + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT + resistance_flags = FIRE_PROOF + armor_type = /datum/armor/nitrile_expeditionary_corps + +/datum/armor/nitrile_expeditionary_corps + fire = 80 + acid = 50 + +/obj/item/storage/backpack/duffelbag/expeditionary_corps + name = "expeditionary corps bag" + desc = "A large bag for holding extra tactical supplies." + icon_state = "exp_corps" + inhand_icon_state = "backpack" + icon = 'modular_nova/modules/exp_corps/icons/backpack.dmi' + worn_icon = 'modular_nova/modules/exp_corps/icons/mob_backpack.dmi' + uses_advanced_reskins = TRUE + unique_reskin = list( + "Backpack" = list( + RESKIN_ICON_STATE = "exp_corps", + RESKIN_WORN_ICON_STATE = "exp_corps" + ), + "Belt" = list( + RESKIN_ICON_STATE = "exp_corps_satchel", + RESKIN_WORN_ICON_STATE = "exp_corps_satchel" + ), + ) + +/obj/item/clothing/suit/armor/vest/expeditionary_corps + name = "expeditionary corps armor vest" + desc = "An armored vest that provides okay protection against most types of damage." + icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi' + icon_state = "exp_corps" + body_parts_covered = CHEST|GROIN|ARMS + armor_type = /datum/armor/vest_expeditionary_corps + cold_protection = CHEST|GROIN|ARMS + heat_protection = CHEST|GROIN|ARMS + dog_fashion = null + allowed = list( + /obj/item/melee, + /obj/item/ammo_box, + /obj/item/ammo_casing, + /obj/item/flashlight, + /obj/item/gun, + /obj/item/knife, + /obj/item/reagent_containers, + /obj/item/restraints/handcuffs, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman + ) + + +/datum/armor/vest_expeditionary_corps + melee = 30 + bullet = 30 + laser = 30 + energy = 30 + bomb = 40 + fire = 80 + acid = 100 + wound = 10 + +/obj/item/clothing/head/helmet/expeditionary_corps + name = "expeditionary corps helmet" + desc = "A robust helmet worn by Expeditionary Corps troopers. Alt+click it to toggle the NV system." + icon_state = "exp_corps" + icon = 'modular_nova/master_files/icons/obj/clothing/head/helmet.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/helmet.dmi' + armor_type = /datum/armor/helmet_expeditionary_corps + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + var/nightvision = FALSE + var/mob/living/carbon/current_user + actions_types = list(/datum/action/item_action/toggle_nv) + +/datum/armor/helmet_expeditionary_corps + melee = 20 + bullet = 20 + laser = 20 + energy = 20 + bomb = 30 + fire = 80 + acid = 100 + wound = 10 + +/datum/action/item_action/toggle_nv + name = "Toggle Nightvision" + +/datum/action/item_action/toggle_nv/Trigger(trigger_flags) + var/obj/item/clothing/head/helmet/expeditionary_corps/my_helmet = target + if(!my_helmet.current_user) + return + my_helmet.nightvision = !my_helmet.nightvision + if(my_helmet.nightvision) + to_chat(owner, span_notice("You flip the NV goggles down.")) + my_helmet.enable_nv() + else + to_chat(owner, span_notice("You flip the NV goggles up.")) + my_helmet.disable_nv() + my_helmet.update_appearance() + +/obj/item/clothing/head/helmet/expeditionary_corps/equipped(mob/user, slot) + . = ..() + current_user = user + +/obj/item/clothing/head/helmet/expeditionary_corps/proc/enable_nv(mob/user) + if(current_user) + var/obj/item/organ/internal/eyes/my_eyes = current_user.get_organ_by_type(/obj/item/organ/internal/eyes) + if(my_eyes) + my_eyes.color_cutoffs = list(10, 30, 10) + my_eyes.flash_protect = FLASH_PROTECTION_SENSITIVE + current_user.add_client_colour(/datum/client_colour/glass_colour/lightgreen) + +/obj/item/clothing/head/helmet/expeditionary_corps/proc/disable_nv() + if(current_user) + var/obj/item/organ/internal/eyes/my_eyes = current_user.get_organ_by_type(/obj/item/organ/internal/eyes) + if(my_eyes) + my_eyes.color_cutoffs = initial(my_eyes.color_cutoffs) + my_eyes.flash_protect = initial(my_eyes.flash_protect) + current_user.remove_client_colour(/datum/client_colour/glass_colour/lightgreen) + current_user.update_sight() + +/obj/item/clothing/head/helmet/expeditionary_corps/AltClick(mob/user) + . = ..() + if(!current_user) + return + if(!can_interact(user)) + return + + nightvision = !nightvision + if(nightvision) + to_chat(user, span_notice("You flip the NV goggles down.")) + enable_nv() + else + to_chat(user, span_notice("You flip the NV goggles up.")) + disable_nv() + update_appearance() + +/obj/item/clothing/head/helmet/expeditionary_corps/dropped(mob/user) + . = ..() + disable_nv() + current_user = null + +/obj/item/clothing/head/helmet/expeditionary_corps/Destroy() + disable_nv() + current_user = null + return ..() + +/obj/item/clothing/head/helmet/expeditionary_corps/update_icon_state() + . = ..() + if(nightvision) + icon_state = "exp_corps_on" + else + icon_state = "exp_corps" diff --git a/modular_skyrat/modules/exp_corps/code/expeditionary_trooper.dm b/modular_nova/modules/exp_corps/code/expeditionary_trooper.dm similarity index 89% rename from modular_skyrat/modules/exp_corps/code/expeditionary_trooper.dm rename to modular_nova/modules/exp_corps/code/expeditionary_trooper.dm index fdcbef42cabfef..553bae69d51766 100644 --- a/modular_skyrat/modules/exp_corps/code/expeditionary_trooper.dm +++ b/modular_nova/modules/exp_corps/code/expeditionary_trooper.dm @@ -6,7 +6,7 @@ name = "expedition survival pack" desc = "A box filled with useful items for your expedition!" icon_state = "survival_pack" - icon = 'modular_skyrat/modules/exp_corps/icons/survival_pack.dmi' + icon = 'modular_nova/modules/exp_corps/icons/survival_pack.dmi' illustration = null /obj/item/storage/box/expeditionary_survival/PopulateContents() @@ -29,4 +29,4 @@ new /obj/item/clothing/suit/armor/vest/expeditionary_corps(src) new /obj/item/storage/belt/military/expeditionary_corps/marksman(src) new /obj/item/storage/backpack/duffelbag/expeditionary_corps(src) - new /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/skild(src) + new /obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/skild(src) diff --git a/modular_nova/modules/exp_corps/code/gear.dm b/modular_nova/modules/exp_corps/code/gear.dm new file mode 100644 index 00000000000000..195224cdb738bc --- /dev/null +++ b/modular_nova/modules/exp_corps/code/gear.dm @@ -0,0 +1,120 @@ +//Gateway Medkit, no more combat defibs! +/obj/item/storage/medkit/expeditionary + name = "combat medical kit" + desc = "Now with 100% less bullshit." + icon_state = "medkit_tactical" + damagetype_healed = "all" + +/obj/item/storage/medkit/expeditionary/PopulateContents() + if(empty) + return + new /obj/item/stack/medical/gauze(src) + new /obj/item/defibrillator/compact/loaded(src) + new /obj/item/reagent_containers/hypospray/combat(src) + new /obj/item/stack/medical/mesh/advanced(src) + new /obj/item/stack/medical/suture/medicated(src) + new /obj/item/clothing/glasses/hud/health(src) + +//Field Medic's weapon, no more tomahawk! +/obj/item/circular_saw/field_medic + name = "bone saw" + desc = "Did that sting? SAW-ry!" + force = 20 + icon_state = "bonesaw" + icon = 'modular_nova/modules/exp_corps/icons/bonesaw.dmi' + lefthand_file = 'modular_nova/modules/exp_corps/icons/bonesaw_l.dmi' + righthand_file = 'modular_nova/modules/exp_corps/icons/bonesaw_r.dmi' + inhand_icon_state = "bonesaw" + hitsound = 'sound/weapons/bladeslice.ogg' + toolspeed = 0.2 + throw_range = 3 + w_class = WEIGHT_CLASS_SMALL + +//Pointman's riot shield. Fixable with 1 plasteel, crafting recipe for broken shield +/obj/item/shield/riot/pointman + name = "pointman shield" + desc = "A shield fit for those that want to sprint headfirst into the unknown! Cumbersome as hell." + icon_state = "riot" + icon = 'modular_nova/modules/exp_corps/icons/riot.dmi' + lefthand_file = 'modular_nova/modules/exp_corps/icons/riot_left.dmi' + righthand_file = 'modular_nova/modules/exp_corps/icons/riot_right.dmi' + force = 14 + throwforce = 5 + throw_speed = 1 + throw_range = 1 + block_chance = 60 + w_class = WEIGHT_CLASS_BULKY + attack_verb_continuous = list("shoves", "bashes") + attack_verb_simple = list("shove", "bash") + transparent = TRUE + max_integrity = 200 + var/repairable_by = /obj/item/stack/sheet/plasteel //what to repair the shield with + +/obj/item/shield/riot/pointman/shatter(mob/living/carbon/human/owner) + playsound(owner, 'sound/effects/glassbr3.ogg', 100) + new /obj/item/pointman_broken((get_turf(src))) + +/obj/item/shield/riot/pointman/attackby(obj/item/W, mob/user, params) + if(istype(W, repairable_by)) + var/obj/item/stack/sheet/plasteel_repair = W + plasteel_repair.use(1) + repair(user, params) + return ..() + +/obj/item/shield/riot/pointman/proc/repair(mob/user, params) + atom_integrity = max_integrity + if(user) + UnregisterSignal(user, COMSIG_MOVABLE_MOVED) + to_chat(user, span_notice("You fix the damage on [src].")) + +/obj/item/pointman_broken + name = "broken pointman shield" + desc = "Might be able to be repaired with plasteel and a welder." + icon_state = "riot_broken" + icon = 'modular_nova/modules/exp_corps/icons/riot.dmi' + w_class = WEIGHT_CLASS_BULKY + +//broken shield fixing +/datum/crafting_recipe/pointman + name = "Broken Riot Repair" + result = /obj/item/shield/riot/pointman + reqs = list(/obj/item/pointman_broken = 1, + /obj/item/stack/sheet/plasteel = 3, + /obj/item/stack/sheet/rglass = 3) + time = 40 + category = CAT_MISC + tool_behaviors = list(TOOL_WELDER) + +//Marksman's throwing knife and a pouch for it +/obj/item/knife/combat/marksman + name = "throwing knife" + desc = "Very well weighted for throwing, feels awkward to use for anything else." + icon = 'modular_nova/modules/exp_corps/icons/throwing.dmi' + icon_state = "throwing" + force = 12 + throwforce = 30 + +/obj/item/storage/pouch/ammo/marksman + name = "marksman's knife pouch" + unique_reskin = NONE + +/obj/item/storage/pouch/ammo/marksman/Initialize(mapload) + . = ..() + create_storage(storage_type = /datum/storage/marksman) + +/datum/storage/marksman + max_total_storage = 60 + max_slots = 10 + numerical_stacking = TRUE + quickdraw = TRUE + +/datum/storage/marksman/New() + . = ..() + can_hold = typecacheof(list(/obj/item/knife/combat)) + +/obj/item/storage/pouch/ammo/marksman/PopulateContents() //can kill most basic enemies with 5 knives, though marksmen shouldn't be soloing enemies anyways + new /obj/item/knife/combat/marksman(src) + new /obj/item/knife/combat/marksman(src) + new /obj/item/knife/combat/marksman(src) + new /obj/item/knife/combat/marksman(src) + new /obj/item/knife/combat/marksman(src) diff --git a/modular_nova/modules/exp_corps/code/tomahawk.dm b/modular_nova/modules/exp_corps/code/tomahawk.dm new file mode 100644 index 00000000000000..13033474779985 --- /dev/null +++ b/modular_nova/modules/exp_corps/code/tomahawk.dm @@ -0,0 +1,24 @@ +/obj/item/melee/tomahawk + name = "expeditionary tomahawk" + desc = "A somewhat dulled axe blade upon a short fibremetal handle." + icon = 'modular_nova/modules/exp_corps/icons/tomahawk.dmi' + icon_state = "tomahawk" + inhand_icon_state = "tomahawk" + lefthand_file = 'modular_nova/modules/exp_corps/icons/tomahawk_l.dmi' + righthand_file = 'modular_nova/modules/exp_corps/icons/tomahawk_r.dmi' + worn_icon = 'modular_nova/modules/exp_corps/icons/tomahawk_worn.dmi' + obj_flags = CONDUCTS_ELECTRICITY + force = 15 //Equivalent to a survival knife + w_class = WEIGHT_CLASS_SMALL + throwforce = 18 + throw_speed = 4 + throw_range = 8 + embedding = list("pain_mult" = 6, "embed_chance" = 60, "fall_chance" = 10) + attack_verb_continuous = list("chops", "tears", "lacerates", "cuts") + attack_verb_simple = list("chop", "tear", "lacerate", "cut") + hitsound = 'sound/weapons/bladeslice.ogg' + sharpness = SHARP_EDGED + +/obj/item/melee/tomahawk/Initialize(mapload) + . = ..() + AddComponent(/datum/component/butchering, 70, 100) diff --git a/modular_skyrat/modules/exp_corps/icons/backpack.dmi b/modular_nova/modules/exp_corps/icons/backpack.dmi similarity index 100% rename from modular_skyrat/modules/exp_corps/icons/backpack.dmi rename to modular_nova/modules/exp_corps/icons/backpack.dmi diff --git a/modular_skyrat/modules/exp_corps/icons/bonesaw.dmi b/modular_nova/modules/exp_corps/icons/bonesaw.dmi similarity index 100% rename from modular_skyrat/modules/exp_corps/icons/bonesaw.dmi rename to modular_nova/modules/exp_corps/icons/bonesaw.dmi diff --git a/modular_skyrat/modules/exp_corps/icons/bonesaw_l.dmi b/modular_nova/modules/exp_corps/icons/bonesaw_l.dmi similarity index 100% rename from modular_skyrat/modules/exp_corps/icons/bonesaw_l.dmi rename to modular_nova/modules/exp_corps/icons/bonesaw_l.dmi diff --git a/modular_skyrat/modules/exp_corps/icons/bonesaw_r.dmi b/modular_nova/modules/exp_corps/icons/bonesaw_r.dmi similarity index 100% rename from modular_skyrat/modules/exp_corps/icons/bonesaw_r.dmi rename to modular_nova/modules/exp_corps/icons/bonesaw_r.dmi diff --git a/modular_skyrat/modules/exp_corps/icons/closet.dmi b/modular_nova/modules/exp_corps/icons/closet.dmi similarity index 100% rename from modular_skyrat/modules/exp_corps/icons/closet.dmi rename to modular_nova/modules/exp_corps/icons/closet.dmi diff --git a/modular_skyrat/modules/exp_corps/icons/exp_crate.dmi b/modular_nova/modules/exp_corps/icons/exp_crate.dmi similarity index 100% rename from modular_skyrat/modules/exp_corps/icons/exp_crate.dmi rename to modular_nova/modules/exp_corps/icons/exp_crate.dmi diff --git a/modular_skyrat/modules/exp_corps/icons/mob_backpack.dmi b/modular_nova/modules/exp_corps/icons/mob_backpack.dmi similarity index 100% rename from modular_skyrat/modules/exp_corps/icons/mob_backpack.dmi rename to modular_nova/modules/exp_corps/icons/mob_backpack.dmi diff --git a/modular_skyrat/modules/exp_corps/icons/riot.dmi b/modular_nova/modules/exp_corps/icons/riot.dmi similarity index 100% rename from modular_skyrat/modules/exp_corps/icons/riot.dmi rename to modular_nova/modules/exp_corps/icons/riot.dmi diff --git a/modular_skyrat/modules/exp_corps/icons/riot_left.dmi b/modular_nova/modules/exp_corps/icons/riot_left.dmi similarity index 100% rename from modular_skyrat/modules/exp_corps/icons/riot_left.dmi rename to modular_nova/modules/exp_corps/icons/riot_left.dmi diff --git a/modular_skyrat/modules/exp_corps/icons/riot_right.dmi b/modular_nova/modules/exp_corps/icons/riot_right.dmi similarity index 100% rename from modular_skyrat/modules/exp_corps/icons/riot_right.dmi rename to modular_nova/modules/exp_corps/icons/riot_right.dmi diff --git a/modular_skyrat/modules/exp_corps/icons/survival_pack.dmi b/modular_nova/modules/exp_corps/icons/survival_pack.dmi similarity index 100% rename from modular_skyrat/modules/exp_corps/icons/survival_pack.dmi rename to modular_nova/modules/exp_corps/icons/survival_pack.dmi diff --git a/modular_skyrat/modules/exp_corps/icons/throwing.dmi b/modular_nova/modules/exp_corps/icons/throwing.dmi similarity index 100% rename from modular_skyrat/modules/exp_corps/icons/throwing.dmi rename to modular_nova/modules/exp_corps/icons/throwing.dmi diff --git a/modular_skyrat/modules/exp_corps/icons/tomahawk.dmi b/modular_nova/modules/exp_corps/icons/tomahawk.dmi similarity index 100% rename from modular_skyrat/modules/exp_corps/icons/tomahawk.dmi rename to modular_nova/modules/exp_corps/icons/tomahawk.dmi diff --git a/modular_skyrat/modules/exp_corps/icons/tomahawk_l.dmi b/modular_nova/modules/exp_corps/icons/tomahawk_l.dmi similarity index 100% rename from modular_skyrat/modules/exp_corps/icons/tomahawk_l.dmi rename to modular_nova/modules/exp_corps/icons/tomahawk_l.dmi diff --git a/modular_skyrat/modules/exp_corps/icons/tomahawk_r.dmi b/modular_nova/modules/exp_corps/icons/tomahawk_r.dmi similarity index 100% rename from modular_skyrat/modules/exp_corps/icons/tomahawk_r.dmi rename to modular_nova/modules/exp_corps/icons/tomahawk_r.dmi diff --git a/modular_skyrat/modules/exp_corps/icons/tomahawk_worn.dmi b/modular_nova/modules/exp_corps/icons/tomahawk_worn.dmi similarity index 100% rename from modular_skyrat/modules/exp_corps/icons/tomahawk_worn.dmi rename to modular_nova/modules/exp_corps/icons/tomahawk_worn.dmi diff --git a/modular_skyrat/modules/extra_vv/code/extra_vv.dm b/modular_nova/modules/extra_vv/code/extra_vv.dm similarity index 100% rename from modular_skyrat/modules/extra_vv/code/extra_vv.dm rename to modular_nova/modules/extra_vv/code/extra_vv.dm diff --git a/modular_skyrat/modules/faction/code/clothes.dm b/modular_nova/modules/faction/code/clothes.dm similarity index 100% rename from modular_skyrat/modules/faction/code/clothes.dm rename to modular_nova/modules/faction/code/clothes.dm diff --git a/modular_skyrat/modules/faction/code/id.dm b/modular_nova/modules/faction/code/id.dm similarity index 100% rename from modular_skyrat/modules/faction/code/id.dm rename to modular_nova/modules/faction/code/id.dm diff --git a/modular_nova/modules/faction/code/mapping/mapping_helpers.dm b/modular_nova/modules/faction/code/mapping/mapping_helpers.dm new file mode 100644 index 00000000000000..8b18ce42f17adb --- /dev/null +++ b/modular_nova/modules/faction/code/mapping/mapping_helpers.dm @@ -0,0 +1,223 @@ +/obj/machinery/computer/shuttle/trader + name = "trader shuttle console" + shuttleId = "tradership" + icon_screen = "syndishuttle" + icon_keyboard = "syndie_key" + light_color = COLOR_SOFT_RED + possible_destinations = "tradership;tradership_custom;tradership_away;pirateship_away;pirateship_home;whiteship_away;whiteship_home;whiteship_z4;whiteship_lavaland" + circuit = /obj/item/circuitboard/computer/trader_ship + +/obj/machinery/computer/camera_advanced/shuttle_docker/trader + name = "trader shuttle navigation computer" + desc = "Used to designate a precise transit location for the trade shuttle." + shuttleId = "tradership" + shuttlePortId = "tradership_custom" + view_range = 8 + x_offset = -6 + y_offset = -10 + see_hidden = FALSE + icon_screen = "syndishuttle" + icon_keyboard = "syndie_key" + jump_to_ports = list("tradership" = 1, "tradership_away" = 1, "tradership_custom" = 1,"whiteship_away" = 1, "whiteship_home" = 1, "whiteship_z4" = 1, "caravantrade1_ambush" = 1, "whiteship_lavaland" = 1) + whitelist_turfs = list(/turf/open/space, /turf/open/floor/plating, /turf/open/lava, /turf/closed/mineral) + lock_override = NONE + +/obj/item/circuitboard/computer/trader_ship + build_path = /obj/machinery/computer/shuttle/trader + +/obj/docking_port/mobile/tradership + name = "trade shuttle" + shuttle_id = "tradership" + rechargeTime = 2 MINUTES + +/obj/docking_port/stationary/picked/tradership + name = "Deep Space" + shuttle_id = "tradership_away" + dheight = 0 + dir = 2 + dwidth = 11 + height = 22 + width = 35 + shuttlekeys = list("tradership") + +/obj/structure/closet/crate/tradership_cargo + /// Determines which items will be spawned, overriding itemspawn_seed + var/used_preset + /// Determines which items will be spawned + var/itemspawn_seed + +/obj/structure/closet/crate/tradership_cargo/Initialize(mapload) + itemspawn_seed = used_preset || rand(1,5) + return ..() + +//Generic inventory +/obj/structure/closet/crate/tradership_cargo/PopulateContents() + ..() + + switch(itemspawn_seed) + if(1) + for(var/i in 1 to 10) + new /obj/item/food/canned/beans(src) + for(var/i in 1 to 10) + new /obj/item/reagent_containers/cup/glass/waterbottle(src) + if(2) + new /obj/item/stack/sheet/iron/fifty(src) + new /obj/item/stack/rods/fifty(src) + new /obj/item/stack/sheet/glass/fifty(src) + new /obj/item/stack/sheet/mineral/wood/fifty(src) + new /obj/item/stack/cable_coil(src) + if(3) + for(var/i in 1 to 5) + new /obj/item/tank/internals/emergency_oxygen/engi(src) + new /obj/item/tank/internals/oxygen(src) + new /obj/item/tank/internals/nitrogen(src) + new /obj/item/tank/internals/nitrogen/belt/full(src) + new /obj/item/tank/internals/plasma(src) + new /obj/item/tank/internals/plasmaman/belt/full(src) + for(var/i in 1 to 7) + new /obj/item/clothing/mask/breath() + desc = "An internals crate." + name = "internals crate" + icon_state = "o2crate" + if(4) + new /obj/item/storage/medkit/regular(src) + new /obj/item/storage/medkit/o2(src) + new /obj/item/storage/medkit/toxin(src) + new /obj/item/reagent_containers/hypospray/medipen(src) + new /obj/item/reagent_containers/hypospray/medipen/ekit(src) + desc = "A medical crate." + name = "medical crate" + icon_state = "medicalcrate" + if(5) + new /obj/item/storage/toolbox/artistic(src) + new /obj/item/storage/toolbox/electrical(src) + new /obj/item/storage/toolbox/electrical(src) + new /obj/item/storage/toolbox/mechanical(src) + new /obj/item/storage/toolbox/mechanical(src) + name = "engineering crate" + icon_state = "engi_crate" + +// traitor objective items +/obj/structure/closet/crate/tradership_cargo/populate_contents_immediate() + . = ..() + + switch(itemspawn_seed) + if(5) + new /obj/item/clothing/gloves/color/yellow(src) + new /obj/item/clothing/gloves/color/yellow(src) + +/obj/structure/closet/crate/freezer/tradership_cargo_freezer + var/used_preset + +/obj/structure/closet/crate/freezer/tradership_cargo_freezer/PopulateContents() + . = ..() + var/random = used_preset || rand(1,4) + switch(random) + if(1) + new /obj/item/reagent_containers/blood(src) + new /obj/item/reagent_containers/blood(src) + new /obj/item/reagent_containers/blood/a_minus(src) + new /obj/item/reagent_containers/blood/b_minus(src) + new /obj/item/reagent_containers/blood/b_plus(src) + new /obj/item/reagent_containers/blood/o_minus(src) + new /obj/item/reagent_containers/blood/o_plus(src) + new /obj/item/reagent_containers/blood/lizard(src) + new /obj/item/reagent_containers/blood/ethereal(src) + for(var/i in 1 to 3) + new /obj/item/reagent_containers/blood/random(src) + if(2) + new /obj/item/bodypart/arm/left/robot(src) + new /obj/item/bodypart/arm/left/robot(src) + new /obj/item/bodypart/arm/right/robot(src) + new /obj/item/bodypart/arm/right/robot(src) + new /obj/item/bodypart/leg/left/robot(src) + new /obj/item/bodypart/leg/left/robot(src) + new /obj/item/bodypart/leg/right/robot(src) + new /obj/item/bodypart/leg/right/robot(src) + if(3) + for(var/i in 1 to 6) + new /obj/item/storage/box/ingredients/wildcard(src) + if(4) + new /obj/item/food/meat/slab/human/mutant/slime(src) + new /obj/item/food/meat/slab/killertomato(src) + new /obj/item/food/meat/slab/bear(src) + new /obj/item/food/meat/slab/xeno(src) + new /obj/item/food/meat/slab/spider(src) + new /obj/item/food/meat/rawbacon(src) + new /obj/item/food/meat/slab/penguin(src) + new /obj/item/food/spiderleg(src) + new /obj/item/food/fishmeat/carp(src) + new /obj/item/food/meat/slab/human(src) + +/obj/structure/closet/crate/secure/tradership_cargo_valuable + req_access = ACCESS_FACTION_CREW + var/used_preset + +/obj/structure/closet/crate/secure/tradership_cargo_valuable/PopulateContents() + . = ..() + var/random = used_preset || rand(1,5) + switch(random) + if(1) //Random traitor items + new /obj/item/storage/box/syndie_kit/chameleon(src) + new /obj/item/storage/backpack/duffelbag/syndie/c4(src) + new /obj/item/computer_disk/syndicate/camera_app(src) + new /obj/item/gun/chem(src) + new /obj/item/card/emag(src) + new /obj/item/card/emag/doorjack(src) + new /obj/item/gun/medbeam(src) + new /obj/item/healthanalyzer/rad_laser(src) + new /obj/item/pen/sleepy(src) + new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src) + if(2) //Energy weapons + energy knives + new /obj/item/gun/energy/e_gun(src) + new /obj/item/gun/energy/e_gun(src) + new /obj/item/gun/energy/e_gun(src) + new /obj/item/gun/energy/e_gun/mini(src) + new /obj/item/gun/energy/recharge/ebow(src) + new /obj/item/melee/energy/sword(src) + new /obj/item/melee/energy/sword(src) + if(3) //Ballistics + knives + new /obj/item/knife/combat(src) + new /obj/item/knife/combat(src) + new /obj/item/switchblade(src) + new /obj/item/switchblade(src) + new /obj/item/gun/ballistic/automatic/sol_smg(src) + new /obj/item/gun/ballistic/automatic/sol_smg(src) + for(var/i in 1 to 2) + new /obj/item/ammo_box/magazine/c35sol_pistol/stendo(src) + new /obj/item/ammo_box/magazine/c35sol_pistol/stendo(src) + new /obj/item/gun/ballistic/automatic/lanca(src) + for(var/i in 1 to 2) + new /obj/item/ammo_box/magazine/lanca(src) + new /obj/item/gun/ballistic/automatic/miecz(src) + for(var/i in 1 to 2) + new /obj/item/ammo_box/magazine/miecz(src) + + if(4) //MODsuits + new /obj/item/mod/control/pre_equipped/mining(src) + new /obj/item/mod/control/pre_equipped/engineering(src) + new /obj/item/mod/control/pre_equipped/atmospheric(src) + new /obj/item/mod/control/pre_equipped/research(src) + new /obj/item/mod/control/pre_equipped/traitor(src) + new /obj/item/mod/control/pre_equipped/elite(src) + if(5) //Implants + new /obj/item/storage/box/cyber_implants(src) + new /obj/item/organ/internal/cyberimp/arm/combat(src) + new /obj/item/organ/internal/cyberimp/arm/surgery(src) + new /obj/item/organ/internal/cyberimp/arm/baton(src) + new /obj/item/organ/internal/cyberimp/arm/toolset(src) + new /obj/item/organ/internal/cyberimp/arm/gun/taser(src) + +/obj/structure/closet/crate/secure/tradership_cargo_very_valuable + req_access = ACCESS_FACTION_COMMAND + icon_state = "weaponcrate" + var/used_preset + +/obj/structure/closet/crate/secure/tradership_cargo_very_valuable/PopulateContents() + . = ..() + var/random = used_preset || rand(1,1) + switch(random) + if(1) //45 TC, but no uplink. Better find a cantor + new /obj/item/stack/telecrystal/twenty(src) + new /obj/item/stack/telecrystal/twenty(src) + new /obj/item/stack/telecrystal/five(src) diff --git a/modular_nova/modules/faction/code/mapping/ruins.dm b/modular_nova/modules/faction/code/mapping/ruins.dm new file mode 100644 index 00000000000000..e1689c4142938c --- /dev/null +++ b/modular_nova/modules/faction/code/mapping/ruins.dm @@ -0,0 +1,6 @@ +/datum/map_template/shuttle/tradership + prefix = "modular_nova/modules/faction/maps/shuttles/" + suffix = "faction" + who_can_purchase = null + name = "Faction Trader Ship" + port_id = "tradership" diff --git a/modular_skyrat/modules/faction/code/outfit.dm b/modular_nova/modules/faction/code/outfit.dm similarity index 100% rename from modular_skyrat/modules/faction/code/outfit.dm rename to modular_nova/modules/faction/code/outfit.dm diff --git a/modular_skyrat/modules/faction/code/radio.dm b/modular_nova/modules/faction/code/radio.dm similarity index 100% rename from modular_skyrat/modules/faction/code/radio.dm rename to modular_nova/modules/faction/code/radio.dm diff --git a/modular_skyrat/modules/faction/maps/shuttles/tradership_faction.dmm b/modular_nova/modules/faction/maps/shuttles/tradership_faction.dmm similarity index 100% rename from modular_skyrat/modules/faction/maps/shuttles/tradership_faction.dmm rename to modular_nova/modules/faction/maps/shuttles/tradership_faction.dmm diff --git a/modular_skyrat/modules/faction/readme.md b/modular_nova/modules/faction/readme.md similarity index 100% rename from modular_skyrat/modules/faction/readme.md rename to modular_nova/modules/faction/readme.md diff --git a/modular_skyrat/modules/fauna_reagent/fauna_reagent.dm b/modular_nova/modules/fauna_reagent/fauna_reagent.dm similarity index 88% rename from modular_skyrat/modules/fauna_reagent/fauna_reagent.dm rename to modular_nova/modules/fauna_reagent/fauna_reagent.dm index 796dbef0daf90d..f922d1312a31d6 100644 --- a/modular_skyrat/modules/fauna_reagent/fauna_reagent.dm +++ b/modular_nova/modules/fauna_reagent/fauna_reagent.dm @@ -30,12 +30,12 @@ var/datum/reagent/toxin/toxin_reagent = reagents_within var/toxin_damage = round(toxin_reagent.toxpwr) adjustHealth(toxin_damage + 1) - reagents.remove_reagent(toxin_reagent.type, 0.5) + reagents?.remove_reagent(toxin_reagent.type, 0.5) continue if(istype(reagents_within, /datum/reagent/medicine)) adjustHealth(-1) - reagents.remove_reagent(reagents_within.type, 0.5) + reagents?.remove_reagent(reagents_within.type, 0.5) /mob/living/basic /// whether the simple animal can be healed/damaged through reagents @@ -63,9 +63,9 @@ var/datum/reagent/toxin/toxin_reagent = reagents_within var/toxin_damage = round(toxin_reagent.toxpwr) adjust_health(toxin_damage + 1) - reagents.remove_reagent(toxin_reagent.type, 0.5) + reagents?.remove_reagent(toxin_reagent.type, 0.5) continue if(istype(reagents_within, /datum/reagent/medicine)) adjust_health(-1) - reagents.remove_reagent(reagents_within.type, 0.5) + reagents?.remove_reagent(reagents_within.type, 0.5) diff --git a/modular_nova/modules/food_replicator/code/clothing.dm b/modular_nova/modules/food_replicator/code/clothing.dm new file mode 100644 index 00000000000000..6eada23458d67b --- /dev/null +++ b/modular_nova/modules/food_replicator/code/clothing.dm @@ -0,0 +1,64 @@ +/obj/item/clothing/under/colonial + name = "colonial outfit" + desc = "Fancy white satin shirt and a pair of cotton-blend pants with a black synthleather belt." + icon = 'modular_nova/modules/food_replicator/icons/clothing.dmi' + worn_icon = 'modular_nova/modules/food_replicator/icons/clothing_worn.dmi' + worn_icon_digi = 'modular_nova/modules/food_replicator/icons/clothing_digi.dmi' + icon_state = "under_colonial" + +/obj/item/clothing/under/colonial/mob_can_equip(mob/living/equipper, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action) + if(is_species(equipper, /datum/species/teshari)) + to_chat(equipper, span_warning("[src] is far too big for you!")) + return FALSE + + return ..() + +/obj/item/clothing/shoes/jackboots/colonial + name = "colonial half-boots" + desc = "Good old laceless boots, with a sturdy plastic toe to, theoretically, keep your toes uncrushed." + icon = 'modular_nova/modules/food_replicator/icons/clothing.dmi' + worn_icon = 'modular_nova/modules/food_replicator/icons/clothing_worn.dmi' + worn_icon_digi = 'modular_nova/modules/food_replicator/icons/clothing_digi.dmi' + icon_state = "boots_colonial" + +/obj/item/clothing/shoes/jackboots/colonial/mob_can_equip(mob/living/equipper, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action) + if(is_species(equipper, /datum/species/teshari)) + to_chat(equipper, span_warning("[src] is far too big for you!")) + return FALSE + + return ..() + +/obj/item/clothing/neck/cloak/colonial + name = "colonial cloak" + desc = "A cloak made from heavy tarpaulin. Nigh wind- and waterproof thanks to its design." + slot_flags = ITEM_SLOT_OCLOTHING|ITEM_SLOT_NECK + w_class = WEIGHT_CLASS_NORMAL + icon = 'modular_nova/modules/food_replicator/icons/clothing.dmi' + worn_icon = 'modular_nova/modules/food_replicator/icons/clothing_worn.dmi' + worn_icon_digi = 'modular_nova/modules/food_replicator/icons/clothing_digi.dmi' + icon_state = "cloak_colonial" + allowed = /obj/item/clothing/suit/jacket/leather::allowed // these are special and can be worn in the suit slot, so we need this var to be defined + +/obj/item/clothing/neck/cloak/colonial/mob_can_equip(mob/living/equipper, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action) + if(is_species(equipper, /datum/species/teshari)) + to_chat(equipper, span_warning("[src] is far too big for you!")) + return FALSE + + return ..() + +/obj/item/clothing/head/hats/colonial + name = "colonial cap" + desc = "A puffy cap made out of tarpaulin covered by some textile. It is sturdy and comfortable, and seems to retain its form very well." + icon = 'modular_nova/modules/food_replicator/icons/clothing.dmi' + worn_icon = 'modular_nova/modules/food_replicator/icons/clothing_worn.dmi' + worn_icon_digi = 'modular_nova/modules/food_replicator/icons/clothing_digi.dmi' + icon_state = "cap_colonial" + inhand_icon_state = null + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + +/obj/item/clothing/head/hats/colonial/mob_can_equip(mob/living/equipper, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action) + if(is_species(equipper, /datum/species/teshari)) + to_chat(equipper, span_warning("[src] is far too big for you!")) + return FALSE + + return ..() diff --git a/modular_nova/modules/food_replicator/code/medical.dm b/modular_nova/modules/food_replicator/code/medical.dm new file mode 100644 index 00000000000000..5f29829dd74535 --- /dev/null +++ b/modular_nova/modules/food_replicator/code/medical.dm @@ -0,0 +1,66 @@ +/obj/item/stack/medical/suture/bloody + name = "hemostatic suture" + desc = "Bloodclotting agent-infused sterile sutures used to seal up cuts and lacerations and reverse critical bleedings." + icon = 'modular_nova/modules/food_replicator/icons/medicine.dmi' + icon_state = "hemo_suture" + heal_brute = 7 + stop_bleeding = 1 + grind_results = list(/datum/reagent/medicine/coagulant = 2) + merge_type = /obj/item/stack/medical/suture/bloody + +/obj/item/stack/medical/suture/bloody/post_heal_effects(amount_healed, mob/living/carbon/healed_mob, mob/user) + . = ..() + if(healed_mob.blood_volume <= BLOOD_VOLUME_SAFE) + healed_mob.reagents.add_reagent(/datum/reagent/medicine/salglu_solution, 2) + healed_mob.adjustOxyLoss(-amount_healed) + +/obj/item/stack/medical/mesh/bloody + name = "hemostatic mesh" + desc = "A hemostatic mesh used to dress burns and stimulate hemopoiesis. Due to its blood-related purpose, it is worse at sanitizing infections." + icon = 'modular_nova/modules/food_replicator/icons/medicine.dmi' + icon_state = "hemo_mesh" + heal_burn = 7 + sanitization = 0.5 + flesh_regeneration = 1.75 + stop_bleeding = 0.25 + grind_results = list(/datum/reagent/medicine/coagulant = 2) + merge_type = /obj/item/stack/medical/mesh/bloody + +/obj/item/stack/medical/mesh/bloody/update_icon_state() + if(is_open) + return ..() + + icon_state = "hemo_mesh_closed" + +/obj/item/stack/medical/mesh/bloody/post_heal_effects(amount_healed, mob/living/carbon/healed_mob, mob/user) + . = ..() + if(healed_mob.blood_volume <= BLOOD_VOLUME_SAFE) + healed_mob.reagents.add_reagent(/datum/reagent/medicine/salglu_solution, 2) + healed_mob.adjustOxyLoss(-amount_healed) + +/obj/item/reagent_containers/hypospray/medipen/glucose + name = "pressurised glucose medipen" + desc = "A medipen for keeping yourself going during prolonged EVA shifts, injects a dose of glucose into your bloodstream. Recommended for use in low-pressure environments." + icon = 'modular_nova/modules/food_replicator/icons/medicine.dmi' + icon_state = "glupen" + inhand_icon_state = "stimpen" + base_icon_state = "glupen" + volume = 15 + amount_per_transfer_from_this = 15 + list_reagents = list(/datum/reagent/consumable/nutriment/glucose = 15) + +/obj/item/reagent_containers/hypospray/medipen/glucose/inject(mob/living/affected_mob, mob/user) + if(lavaland_equipment_pressure_check(get_turf(user))) + amount_per_transfer_from_this = initial(amount_per_transfer_from_this) + return ..() + + if(DOING_INTERACTION(user, DOAFTER_SOURCE_SURVIVALPEN)) + to_chat(user,span_notice("You are too busy to use \the [src]!")) + return + + to_chat(user,span_notice("You start manually releasing the low-pressure gauge...")) + if(!do_after(user, 10 SECONDS, affected_mob, interaction_key = DOAFTER_SOURCE_SURVIVALPEN)) + return + + amount_per_transfer_from_this = initial(amount_per_transfer_from_this) * 0.5 + return ..() diff --git a/modular_nova/modules/food_replicator/code/rationpacks.dm b/modular_nova/modules/food_replicator/code/rationpacks.dm new file mode 100644 index 00000000000000..0fb7e7f75f3bdb --- /dev/null +++ b/modular_nova/modules/food_replicator/code/rationpacks.dm @@ -0,0 +1,192 @@ +/obj/item/food/colonial_course + name = "undefined colonial course" + desc = "Something you shouldn't see. But it's edible." + icon = 'modular_nova/modules/food_replicator/icons/rationpack.dmi' + icon_state = "borgir" + base_icon_state = "borgir" + food_reagents = list(/datum/reagent/consumable/nutriment = 20) + tastes = list("crayon powder" = 1) + foodtypes = VEGETABLES | GRAIN + w_class = WEIGHT_CLASS_SMALL + preserved_food = TRUE + +/obj/item/food/colonial_course/attack_self(mob/user, modifiers) + if(preserved_food) + preserved_food = FALSE + icon_state = "[base_icon_state]_unwrapped" + to_chat(user, span_notice("You unpackage \the [src].")) + playsound(user.loc, 'sound/items/foodcanopen.ogg', 50) + +/obj/item/food/colonial_course/attack(mob/living/target, mob/user, def_zone) + if(preserved_food) + to_chat(user, span_warning("[src] is still packaged!")) + return FALSE + + return ..() + +/obj/item/food/colonial_course/pljeskavica + name = "pljeskavica" + desc = "Freshly-printed steaming hot burger consisting of a biogenerator-produced handcraft-imitating buns, with a minced meat patty inbetween, among various vegetables and sauces.\ + <br> Looks good <i>enough</i> for something as replicated as this. Its packaging is covered in copious amounts of information on its nutritional facts, contents and the expiry date. Sadly, it's all written in Pan-Slavic." + trash_type = /obj/item/trash/pljeskavica + food_reagents = list( + /datum/reagent/consumable/nutriment = 3, + /datum/reagent/consumable/nutriment/protein = 9, + /datum/reagent/consumable/nutriment/vitamin = 4, + ) + tastes = list("bun" = 2, "spiced meat" = 10, "death of veganism" = 3) + foodtypes = VEGETABLES | GRAIN | MEAT + +/obj/item/food/colonial_course/nachos + name = "plain nachos tray" + desc = "A vacuum-sealed package with what seems to be a generous serving of triangular corn chips, with three sections reserved for a salsa, cheese and guacamole sauces.\ + <br> Probably the best-looking food you can find in these rations, perhaps due to its simplicity." + food_reagents = list( + /datum/reagent/consumable/nutriment = 5, + /datum/reagent/consumable/nutriment/vitamin = 2, + ) + trash_type = /obj/item/trash/nachos + icon_state = "nacho" + base_icon_state = "nacho" + tastes = list("corn chips" = 5, "'artificial' organic sauces" = 5) + foodtypes = GRAIN | FRIED | DAIRY + +/obj/item/food/colonial_course/blins + name = "condensed milk crepes" + desc = "A vacuum-sealed four-pack of stuffed crepes with a minimal amount of markings. There is nothing else to it, to be frank.\ + <br> Surprisingly tasty for its looks, as long as you're not lactose intolerant, on diet, or vegan. The back of the packaging is covered in a mass of information detailing the product." + food_reagents = list( + /datum/reagent/consumable/nutriment = 2, + /datum/reagent/consumable/caramel = 3, + /datum/reagent/consumable/milk = 4, + ) + trash_type = /obj/item/trash/blins + icon_state = "blin" + base_icon_state = "blin" + tastes = list("insane amount of sweetness" = 10, "crepes" = 3) + foodtypes = SUGAR | GRAIN | DAIRY | BREAKFAST + +/obj/item/reagent_containers/cup/glass/coffee/colonial + name = "colonial thermocup" + desc = "Technically, used to drink hot beverages. But since it's the only cup design that was available, you gotta make do. It has an instruction written on its side. \ + <br> This particular one comes prefilled with a single serving of coffee powder." + special_desc = "A small instruction on the side reads: <i>\"For use in food replicators; mix water and powdered solutions in one-to-one proportions. \ + <br> For cocoa, mix milk and powdered solution in one-to-one proportion.\"</i>" + icon = 'modular_nova/modules/food_replicator/icons/rationpack.dmi' + list_reagents = list(/datum/reagent/consumable/powdered_coffee = 25) + +/obj/item/reagent_containers/cup/glass/coffee/colonial/empty + desc = "Technically, used to drink hot beverages. But since it's the only cup design that was available, you gotta make do. It has an instruction written on its side." + list_reagents = null + +/obj/item/trash/pljeskavica + name = "pljeskavica wrapping paper" + desc = "Covered in sauce smearings and smaller pieces of the dish on the inside, crumpled into a ball. It's probably best to dispose of it." + icon = 'modular_nova/modules/food_replicator/icons/rationpack.dmi' + icon_state = "borgir_trash" + +/obj/item/trash/nachos + name = "empty nachos tray" + desc = "Covered in sauce smearings and smaller pieces of the dish on the inside, a plastic food tray with not much use anymore. It's probably best to dispose of it or recycle it." + icon = 'modular_nova/modules/food_replicator/icons/rationpack.dmi' + custom_materials = list( + /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT, + ) + icon_state = "nacho_trash" + +/obj/item/trash/blins + name = "empty crepes wrapper" + desc = "Empty torn wrapper that used to hold something ridiculously sweet. It's probably best to recycle it." + icon = 'modular_nova/modules/food_replicator/icons/rationpack.dmi' + custom_materials = list( + /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT * 0.5, + ) + icon_state = "blin_trash" + +/obj/item/storage/box/gum/colonial + name = "mixed bubblegum packet" + desc = "The packaging is entirely written in Pan-Slavic, with a small blurb of Sol Common. You would need to take a better look to read it, though, as it is written quite small." + special_desc = "Examining the small text reveals the following: <i>\"Foreign colonization ration, model J: mixed origin, adult. Bubblegum package, medicinal, recreational. <br>\ + Do not overconsume. Certain strips contain nicotine.\"</i>" + icon = 'modular_nova/modules/food_replicator/icons/rationpack.dmi' + icon_state = "bubblegum" + +/obj/item/storage/box/gum/colonial/PopulateContents() + new /obj/item/food/bubblegum(src) + new /obj/item/food/bubblegum(src) + new /obj/item/food/bubblegum/nicotine(src) + new /obj/item/food/bubblegum/nicotine(src) + +/obj/item/storage/box/utensils + name = "utensils package" + desc = "A small package containing various utensils required for <i>human</i> consumption of various foods. \ + In a normal situation contains a plastic fork, a plastic spoon, and two serviettes." + icon = 'modular_nova/modules/food_replicator/icons/rationpack.dmi' + icon_state = "utensil_box" + w_class = WEIGHT_CLASS_TINY + illustration = null + foldable_result = null + +/obj/item/storage/box/utensils/Initialize(mapload) + . = ..() + atom_storage.set_holdable(list( + /obj/item/kitchen/spoon/plastic, + /obj/item/kitchen/fork/plastic, + /obj/item/serviette, + )) + atom_storage.max_slots = 4 + +/obj/item/storage/box/utensils/PopulateContents() + new /obj/item/kitchen/spoon/plastic(src) + new /obj/item/kitchen/fork/plastic(src) + new /obj/item/serviette/colonial(src) + new /obj/item/serviette/colonial(src) + +/obj/item/serviette/colonial + name = "colonial napkin" + desc = "To clean all the mess. Comes with a custom <i>combined</i> design of red and blue." + icon_state = "napkin_unused" + icon = 'modular_nova/modules/food_replicator/icons/rationpack.dmi' + used_serviette = /obj/item/serviette_used/colonial + +/obj/item/serviette_used/colonial + name = "dirty colonial napkin" + desc = "No longer useful, super dirty, or soaked, or otherwise unrecognisable." + icon_state = "napkin_used" + icon = 'modular_nova/modules/food_replicator/icons/rationpack.dmi' + +/obj/item/storage/box/colonial_rations + name = "foreign colonization ration" + desc = "A freshly printed civilian MRE, or more specifically a lunchtime food package, for use in the early colonization times by the first settlers of what is now known as the NRI. <br>\ + The lack of any imprinted dates, as well as its origin, <i>the food replicator</i>, should probably give you a good enough hint at its short, if reasonable, expiry time." + icon = 'modular_nova/modules/food_replicator/icons/rationpack.dmi' + icon_state = "mre_package" + foldable_result = null + illustration = null + +/obj/item/storage/box/colonial_rations/Initialize(mapload) + . = ..() + atom_storage.max_slots = 6 + atom_storage.locked = TRUE + +/obj/item/storage/box/colonial_rations/attack_self(mob/user, modifiers) + if(user) + if(atom_storage.locked == TRUE) + atom_storage.locked = FALSE + icon_state = "mre_package_open" + balloon_alert(user, "unsealed!") + return ..() + else + atom_storage.locked = TRUE + atom_storage.close_all() + icon_state = "mre_package" + balloon_alert(user, "resealed!") + return + +/obj/item/storage/box/colonial_rations/PopulateContents() + new /obj/item/food/colonial_course/pljeskavica(src) + new /obj/item/food/colonial_course/nachos(src) + new /obj/item/food/colonial_course/blins(src) + new /obj/item/reagent_containers/cup/glass/coffee/colonial(src) + new /obj/item/storage/box/gum/colonial(src) + new /obj/item/storage/box/utensils(src) diff --git a/modular_skyrat/modules/food_replicator/code/reagents.dm b/modular_nova/modules/food_replicator/code/reagents.dm similarity index 100% rename from modular_skyrat/modules/food_replicator/code/reagents.dm rename to modular_nova/modules/food_replicator/code/reagents.dm diff --git a/modular_skyrat/modules/food_replicator/code/replicator.dm b/modular_nova/modules/food_replicator/code/replicator.dm similarity index 94% rename from modular_skyrat/modules/food_replicator/code/replicator.dm rename to modular_nova/modules/food_replicator/code/replicator.dm index 9fcef963545edc..eeb54c688761b8 100644 --- a/modular_skyrat/modules/food_replicator/code/replicator.dm +++ b/modular_nova/modules/food_replicator/code/replicator.dm @@ -8,7 +8,7 @@ as the NRI. The Gencrate is at its core a matter resequencer, a highly specialized subtype of biogenerator which performs a sort of transmutation using organic \ compounds; normally from large-scale crops or waste product. With sufficient supply, the machine is capable of making a wide variety of provisions, \ from clothes to food to first-aid medical supplies." - icon = 'modular_skyrat/modules/food_replicator/icons/biogenerator.dmi' + icon = 'modular_nova/modules/food_replicator/icons/biogenerator.dmi' circuit = /obj/item/circuitboard/machine/biogenerator/food_replicator efficiency = 0.75 productivity = 0.75 diff --git a/modular_skyrat/modules/food_replicator/code/replicator_designs/replicator_clothing.dm b/modular_nova/modules/food_replicator/code/replicator_designs/replicator_clothing.dm similarity index 100% rename from modular_skyrat/modules/food_replicator/code/replicator_designs/replicator_clothing.dm rename to modular_nova/modules/food_replicator/code/replicator_designs/replicator_clothing.dm diff --git a/modular_skyrat/modules/food_replicator/code/replicator_designs/replicator_food.dm b/modular_nova/modules/food_replicator/code/replicator_designs/replicator_food.dm similarity index 100% rename from modular_skyrat/modules/food_replicator/code/replicator_designs/replicator_food.dm rename to modular_nova/modules/food_replicator/code/replicator_designs/replicator_food.dm diff --git a/modular_skyrat/modules/food_replicator/code/replicator_designs/replicator_medical.dm b/modular_nova/modules/food_replicator/code/replicator_designs/replicator_medical.dm similarity index 100% rename from modular_skyrat/modules/food_replicator/code/replicator_designs/replicator_medical.dm rename to modular_nova/modules/food_replicator/code/replicator_designs/replicator_medical.dm diff --git a/modular_nova/modules/food_replicator/code/storage.dm b/modular_nova/modules/food_replicator/code/storage.dm new file mode 100644 index 00000000000000..fb93b53ff2adf7 --- /dev/null +++ b/modular_nova/modules/food_replicator/code/storage.dm @@ -0,0 +1,35 @@ +/obj/item/storage/pouch/cin_medipens + name = "colonial medipen pouch" + desc = "A pouch for your (medi-)pens that goes in your pocket." + icon = 'modular_nova/modules/food_replicator/icons/pouch.dmi' + icon_state = "medipen_pouch" + w_class = WEIGHT_CLASS_NORMAL + +/obj/item/storage/pouch/cin_medipens/update_icon_state() + icon_state = "[initial(icon_state)]_[contents.len]" + return ..() + +/obj/item/storage/pouch/cin_medipens/Initialize(mapload) + . = ..() + update_appearance() + +/obj/item/storage/pouch/cin_medipens/Initialize(mapload) + . = ..() + atom_storage.max_specific_storage = WEIGHT_CLASS_TINY + atom_storage.max_total_storage = 4 + atom_storage.max_slots = 4 + atom_storage.can_hold = typecacheof(list(/obj/item/reagent_containers/hypospray/medipen, /obj/item/pen, /obj/item/flashlight/pen)) + +/obj/item/storage/pouch/cin_medkit + name = "colonial first aid kit" + desc = "A medical case that goes in your pocket. Can be used to store things unrelated to medicine, except for guns, ammo and raw materials." + icon = 'modular_nova/modules/food_replicator/icons/pouch.dmi' + icon_state = "cfak" + w_class = WEIGHT_CLASS_NORMAL + +/obj/item/storage/pouch/cin_medkit/Initialize(mapload) + . = ..() + atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL + atom_storage.max_total_storage = 4 + atom_storage.max_slots = 4 + atom_storage.cant_hold = typecacheof(list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/stack/sheet)) diff --git a/modular_skyrat/modules/food_replicator/icons/biogenerator.dmi b/modular_nova/modules/food_replicator/icons/biogenerator.dmi similarity index 100% rename from modular_skyrat/modules/food_replicator/icons/biogenerator.dmi rename to modular_nova/modules/food_replicator/icons/biogenerator.dmi diff --git a/modular_skyrat/modules/food_replicator/icons/clothing.dmi b/modular_nova/modules/food_replicator/icons/clothing.dmi similarity index 100% rename from modular_skyrat/modules/food_replicator/icons/clothing.dmi rename to modular_nova/modules/food_replicator/icons/clothing.dmi diff --git a/modular_skyrat/modules/food_replicator/icons/clothing_digi.dmi b/modular_nova/modules/food_replicator/icons/clothing_digi.dmi similarity index 100% rename from modular_skyrat/modules/food_replicator/icons/clothing_digi.dmi rename to modular_nova/modules/food_replicator/icons/clothing_digi.dmi diff --git a/modular_skyrat/modules/food_replicator/icons/clothing_worn.dmi b/modular_nova/modules/food_replicator/icons/clothing_worn.dmi similarity index 100% rename from modular_skyrat/modules/food_replicator/icons/clothing_worn.dmi rename to modular_nova/modules/food_replicator/icons/clothing_worn.dmi diff --git a/modular_skyrat/modules/food_replicator/icons/medicine.dmi b/modular_nova/modules/food_replicator/icons/medicine.dmi similarity index 100% rename from modular_skyrat/modules/food_replicator/icons/medicine.dmi rename to modular_nova/modules/food_replicator/icons/medicine.dmi diff --git a/modular_skyrat/modules/food_replicator/icons/pouch.dmi b/modular_nova/modules/food_replicator/icons/pouch.dmi similarity index 100% rename from modular_skyrat/modules/food_replicator/icons/pouch.dmi rename to modular_nova/modules/food_replicator/icons/pouch.dmi diff --git a/modular_skyrat/modules/food_replicator/icons/rationpack.dmi b/modular_nova/modules/food_replicator/icons/rationpack.dmi similarity index 100% rename from modular_skyrat/modules/food_replicator/icons/rationpack.dmi rename to modular_nova/modules/food_replicator/icons/rationpack.dmi diff --git a/modular_skyrat/modules/ghostcafe/code/dusts_on_catatonia.dm b/modular_nova/modules/ghostcafe/code/dusts_on_catatonia.dm similarity index 100% rename from modular_skyrat/modules/ghostcafe/code/dusts_on_catatonia.dm rename to modular_nova/modules/ghostcafe/code/dusts_on_catatonia.dm diff --git a/modular_skyrat/modules/ghostcafe/code/dusts_on_leaving_area.dm b/modular_nova/modules/ghostcafe/code/dusts_on_leaving_area.dm similarity index 100% rename from modular_skyrat/modules/ghostcafe/code/dusts_on_leaving_area.dm rename to modular_nova/modules/ghostcafe/code/dusts_on_leaving_area.dm diff --git a/modular_nova/modules/ghostcafe/code/ghost_cafe_items.dm b/modular_nova/modules/ghostcafe/code/ghost_cafe_items.dm new file mode 100644 index 00000000000000..55a1c7d43d63fd --- /dev/null +++ b/modular_nova/modules/ghostcafe/code/ghost_cafe_items.dm @@ -0,0 +1,15 @@ +/obj/structure/showcase/fake_cafe_console + name = "civilian console" + desc = "A stationary computer. This one comes preloaded with generic programs." + icon = 'icons/obj/machines/computer.dmi' + icon_state = "computer" + +/obj/structure/showcase/fake_cafe_console/rd + name = "R&D Console" + desc = "A console used to interface with R&D tools." + +/obj/structure/showcase/fake_cafe_console/rd/Initialize(mapload) + . = ..() + add_overlay("rdcomp") + add_overlay("rd_key") + diff --git a/modular_skyrat/modules/ghostcafe/code/ghost_role_spawners.dm b/modular_nova/modules/ghostcafe/code/ghost_role_spawners.dm similarity index 81% rename from modular_skyrat/modules/ghostcafe/code/ghost_role_spawners.dm rename to modular_nova/modules/ghostcafe/code/ghost_role_spawners.dm index 33896dd331f925..1c4f18e4312003 100644 --- a/modular_skyrat/modules/ghostcafe/code/ghost_role_spawners.dm +++ b/modular_nova/modules/ghostcafe/code/ghost_role_spawners.dm @@ -10,7 +10,7 @@ prompt_name = "a ghost cafe robot" infinite_use = TRUE deletes_on_zero_uses_left = FALSE - icon = 'modular_skyrat/modules/ghostcafe/icons/robot_storage.dmi' + icon = 'modular_nova/modules/ghostcafe/icons/robot_storage.dmi' icon_state = "robostorage" anchored = TRUE density = FALSE @@ -24,14 +24,15 @@ if(new_spawn.client) new_spawn.custom_name = null new_spawn.updatename(new_spawn.client) + new_spawn.transfer_brain_pref(new_spawn.client) new_spawn.gender = NEUTER var/area/A = get_area(src) //new_spawn.AddElement(/datum/element/ghost_role_eligibility, free_ghosting = TRUE) SKYRAT PORT -- Needs to be completely rewritten new_spawn.AddElement(/datum/element/dusts_on_catatonia) - new_spawn.AddElement(/datum/element/dusts_on_leaving_area,list(A.type, /area/misc/hilbertshotel, /area/centcom/holding/cafe, /area/centcom/holding/cafewar, /area/centcom/holding/cafebotany, - /area/centcom/holding/cafebuild, /area/centcom/holding/cafevox, /area/centcom/holding/cafedorms, /area/centcom/holding/cafepark, /area/centcom/holding/cafeplumbing)) - ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, GHOSTROLE_TRAIT) - ADD_TRAIT(new_spawn, TRAIT_FREE_GHOST, GHOSTROLE_TRAIT) + new_spawn.AddElement(/datum/element/dusts_on_leaving_area,list(A.type, /area/misc/hilbertshotel, /area/centcom/holding/cafe, + /area/centcom/holding/cafevox, /area/centcom/holding/cafedorms, /area/centcom/holding/cafepark)) + ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, TRAIT_GHOSTROLE) + ADD_TRAIT(new_spawn, TRAIT_FREE_GHOST, TRAIT_GHOSTROLE) to_chat(new_spawn,span_warning("<b>Ghosting is free!</b>")) var/datum/action/toggle_dead_chat_mob/D = new(new_spawn) D.Grant(new_spawn) @@ -56,10 +57,10 @@ if(new_spawn.client) var/area/A = get_area(src) new_spawn.AddElement(/datum/element/dusts_on_catatonia) - new_spawn.AddElement(/datum/element/dusts_on_leaving_area,list(A.type, /area/misc/hilbertshotel, /area/centcom/holding/cafe, /area/centcom/holding/cafewar, /area/centcom/holding/cafebotany, - /area/centcom/holding/cafebuild, /area/centcom/holding/cafevox, /area/centcom/holding/cafedorms, /area/centcom/holding/cafepark, /area/centcom/holding/cafeplumbing)) - ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, GHOSTROLE_TRAIT) - ADD_TRAIT(new_spawn, TRAIT_FREE_GHOST, GHOSTROLE_TRAIT) + new_spawn.AddElement(/datum/element/dusts_on_leaving_area,list(A.type, /area/misc/hilbertshotel, /area/centcom/holding/cafe, + /area/centcom/holding/cafevox, /area/centcom/holding/cafedorms, /area/centcom/holding/cafepark)) + ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, TRAIT_GHOSTROLE) + ADD_TRAIT(new_spawn, TRAIT_FREE_GHOST, TRAIT_GHOSTROLE) to_chat(new_spawn,span_warning("<b>Ghosting is free!</b>")) var/datum/action/toggle_dead_chat_mob/D = new(new_spawn) SSquirks.AssignQuirks(new_spawn, new_spawn.client, TRUE, TRUE, null, FALSE, new_spawn) @@ -83,11 +84,11 @@ if(!..()) return 0 var/mob/M = target - if(HAS_TRAIT_FROM(M,TRAIT_SIXTHSENSE,GHOSTROLE_TRAIT)) - REMOVE_TRAIT(M,TRAIT_SIXTHSENSE,GHOSTROLE_TRAIT) + if(HAS_TRAIT_FROM(M,TRAIT_SIXTHSENSE,TRAIT_GHOSTROLE)) + REMOVE_TRAIT(M,TRAIT_SIXTHSENSE,TRAIT_GHOSTROLE) to_chat(M,span_notice("You're no longer hearing deadchat.")) else - ADD_TRAIT(M,TRAIT_SIXTHSENSE,GHOSTROLE_TRAIT) + ADD_TRAIT(M,TRAIT_SIXTHSENSE,TRAIT_GHOSTROLE) to_chat(M,span_notice("You're once again hearing deadchat.")) /obj/item/storage/box/syndie_kit/chameleon/ghostcafe diff --git a/modular_nova/modules/ghostcafe/code/ghostcafeturf.dm b/modular_nova/modules/ghostcafe/code/ghostcafeturf.dm new file mode 100644 index 00000000000000..3e3c4fe7f8789d --- /dev/null +++ b/modular_nova/modules/ghostcafe/code/ghostcafeturf.dm @@ -0,0 +1,34 @@ +/turf/open/lava/fake + name = "lava" + desc = "Go on. Step in it. Maybe you'll be like some sort of Lava based Jesus." + planetary_atmos = TRUE + initial_gas_mix = OPENTURF_DEFAULT_ATMOS + lava_damage = 0 + lava_firestacks = 0 + temperature_damage = 0 + immunity_trait = TRAIT_GHOSTROLE + immunity_resistance_flags = LAVA_PROOF + +/turf/open/floor/plating/vox + name = "nitrogen-filled plating" + desc = "Vox box certified." + initial_gas_mix = "n2=104;TEMP=293.15" + +/turf/open/indestructible/bathroom + icon = 'modular_nova/modules/ghostcafe/icons/floors.dmi'; + icon_state = "titanium_blue_old"; + name = "bathroom floor" + footstep = FOOTSTEP_FLOOR + tiled_dirt = FALSE + +/turf/open/indestructible/carpet + desc = "It's really cozy! Great for soft paws!"; + icon = 'modular_nova/modules/ghostcafe/icons/carpet_royalblack.dmi'; + icon_state = "carpet"; + name = "soft carpet" + bullet_bounce_sound = null + footstep = FOOTSTEP_CARPET + barefootstep = FOOTSTEP_CARPET_BAREFOOT + clawfootstep = FOOTSTEP_CARPET_BAREFOOT + heavyfootstep = FOOTSTEP_GENERIC_HEAVY + tiled_dirt = FALSE diff --git a/modular_skyrat/modules/ghostcafe/code/hilbertshotel_ghost.dm b/modular_nova/modules/ghostcafe/code/hilbertshotel_ghost.dm similarity index 87% rename from modular_skyrat/modules/ghostcafe/code/hilbertshotel_ghost.dm rename to modular_nova/modules/ghostcafe/code/hilbertshotel_ghost.dm index 089c61fc42a1bb..4bae97660f1191 100644 --- a/modular_skyrat/modules/ghostcafe/code/hilbertshotel_ghost.dm +++ b/modular_nova/modules/ghostcafe/code/hilbertshotel_ghost.dm @@ -15,4 +15,4 @@ /datum/map_template/ghost_cafe_rooms name = "Apartment" - mappath = "modular_skyrat/modules/hotel_rooms/apartment.dmm" + mappath = "modular_nova/modules/hotel_rooms/apartment.dmm" diff --git a/modular_skyrat/modules/ghostcafe/code/robot_ghostcafe.dm b/modular_nova/modules/ghostcafe/code/robot_ghostcafe.dm similarity index 100% rename from modular_skyrat/modules/ghostcafe/code/robot_ghostcafe.dm rename to modular_nova/modules/ghostcafe/code/robot_ghostcafe.dm diff --git a/modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi b/modular_nova/modules/ghostcafe/icons/carpet_royalblack.dmi similarity index 100% rename from modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi rename to modular_nova/modules/ghostcafe/icons/carpet_royalblack.dmi diff --git a/modular_skyrat/modules/ghostcafe/icons/floors.dmi b/modular_nova/modules/ghostcafe/icons/floors.dmi similarity index 100% rename from modular_skyrat/modules/ghostcafe/icons/floors.dmi rename to modular_nova/modules/ghostcafe/icons/floors.dmi diff --git a/modular_skyrat/modules/ghostcafe/icons/robot_storage.dmi b/modular_nova/modules/ghostcafe/icons/robot_storage.dmi similarity index 100% rename from modular_skyrat/modules/ghostcafe/icons/robot_storage.dmi rename to modular_nova/modules/ghostcafe/icons/robot_storage.dmi diff --git a/modular_skyrat/modules/ghostcafe/icons/stackspawner.dmi b/modular_nova/modules/ghostcafe/icons/stackspawner.dmi similarity index 100% rename from modular_skyrat/modules/ghostcafe/icons/stackspawner.dmi rename to modular_nova/modules/ghostcafe/icons/stackspawner.dmi diff --git a/modular_skyrat/modules/ghostcafe/readme.md b/modular_nova/modules/ghostcafe/readme.md similarity index 100% rename from modular_skyrat/modules/ghostcafe/readme.md rename to modular_nova/modules/ghostcafe/readme.md diff --git a/modular_skyrat/modules/gladiator/Clang_cut.ogg b/modular_nova/modules/gladiator/Clang_cut.ogg similarity index 100% rename from modular_skyrat/modules/gladiator/Clang_cut.ogg rename to modular_nova/modules/gladiator/Clang_cut.ogg diff --git a/modular_skyrat/modules/gladiator/code/datums/ruins/lavaland.dm b/modular_nova/modules/gladiator/code/datums/ruins/lavaland.dm similarity index 100% rename from modular_skyrat/modules/gladiator/code/datums/ruins/lavaland.dm rename to modular_nova/modules/gladiator/code/datums/ruins/lavaland.dm diff --git a/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm b/modular_nova/modules/gladiator/code/game/objects/items/gladiator_items.dm similarity index 89% rename from modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm rename to modular_nova/modules/gladiator/code/game/objects/items/gladiator_items.dm index cf74a0d6dd28bc..00b532a8f8c804 100644 --- a/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm +++ b/modular_nova/modules/gladiator/code/game/objects/items/gladiator_items.dm @@ -30,8 +30,8 @@ /obj/item/clothing/neck/warrior_cape name = "cloak of the marked one" desc = "A cloak worn by those that have faced death in the eyes and prevailed." - icon = 'modular_skyrat/modules/gladiator/icons/berserk_icons.dmi' - worn_icon = 'modular_skyrat/modules/gladiator/icons/berserk_suit.dmi' + icon = 'modular_nova/modules/gladiator/icons/berserk_icons.dmi' + worn_icon = 'modular_nova/modules/gladiator/icons/berserk_suit.dmi' icon_state = "berk_cape" inhand_icon_state = "" //lul uses_advanced_reskins = FALSE @@ -45,8 +45,8 @@ name = "berserker armor" desc = "A suit of ancient body armor imbued with potent spiritual magnetism, capable of massively boosting a wearer's close combat skills at the cost of ravaging their mind and overexerting their body." icon_state = "berk_suit" - icon = 'modular_skyrat/modules/gladiator/icons/berserk_icons.dmi' - worn_icon = 'modular_skyrat/modules/gladiator/icons/berserk_suit.dmi' + icon = 'modular_nova/modules/gladiator/icons/berserk_icons.dmi' + worn_icon = 'modular_nova/modules/gladiator/icons/berserk_suit.dmi' hoodtype = /obj/item/clothing/head/hooded/berserker/gatsu w_class = WEIGHT_CLASS_BULKY armor_type = /datum/armor/berserker_gatsu @@ -70,8 +70,8 @@ name = "berserker helmet" desc = "A uniquely styled helmet with ghastly red eyes that seals it's user inside." icon_state = "berk_helm" - icon = 'modular_skyrat/modules/gladiator/icons/berserk_icons.dmi' - worn_icon = 'modular_skyrat/modules/gladiator/icons/berserk_suit.dmi' + icon = 'modular_nova/modules/gladiator/icons/berserk_icons.dmi' + worn_icon = 'modular_nova/modules/gladiator/icons/berserk_suit.dmi' flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT armor_type = /datum/armor/berserker_gatsu resistance_flags = INDESTRUCTIBLE @@ -113,14 +113,14 @@ /obj/item/claymore/dragonslayer name = "\proper Dragonslayer" desc = "A blade that seems too big to be called a sword. Too big, too thick, too heavy, and too rough, it's more like a large hunk of raw iron." - icon = 'modular_skyrat/modules/gladiator/icons/dragonslayer.dmi' + icon = 'modular_nova/modules/gladiator/icons/dragonslayer.dmi' icon_state = "dragonslayer" inhand_icon_state = "dragonslayer" - lefthand_file = 'modular_skyrat/master_files/icons/mob/64x64_lefthand.dmi' - righthand_file = 'modular_skyrat/master_files/icons/mob/64x64_righthand.dmi' + lefthand_file = 'modular_nova/master_files/icons/mob/64x64_lefthand.dmi' + righthand_file = 'modular_nova/master_files/icons/mob/64x64_righthand.dmi' inhand_x_dimension = 64 inhand_y_dimension = 64 - hitsound = 'modular_skyrat/master_files/sound/weapons/bloodyslice.ogg' + hitsound = 'modular_nova/master_files/sound/weapons/bloodyslice.ogg' w_class = WEIGHT_CLASS_HUGE slot_flags = null force = 20 @@ -173,23 +173,23 @@ duration = 1 SECONDS // worth tweaking? /datum/status_effect/dodgeroll_iframes/on_apply() - RegisterSignal(owner, COMSIG_HUMAN_CHECK_SHIELDS, PROC_REF(whiff)) + RegisterSignal(owner, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(whiff)) return TRUE /datum/status_effect/dodgeroll_iframes/on_remove() - UnregisterSignal(owner, COMSIG_HUMAN_CHECK_SHIELDS) + UnregisterSignal(owner, COMSIG_LIVING_CHECK_BLOCK) return ..() /datum/status_effect/dodgeroll_iframes/proc/whiff() SIGNAL_HANDLER owner.balloon_alert_to_viewers("MISS!") playsound(src, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) - return SHIELD_BLOCK + return SUCCESSFUL_BLOCK /obj/item/claymore/dragonslayer/very_fucking_loud name = "\proper Tempered Dragonslayer" desc = null - hitsound = 'modular_skyrat/modules/gladiator/Clang_cut.ogg' + hitsound = 'modular_nova/modules/gladiator/Clang_cut.ogg' /obj/item/claymore/dragonslayer/very_fucking_loud/examine() . = ..() diff --git a/modular_skyrat/modules/gladiator/code/modules/mob/living/simple_animal/hostile/megafauna/markedone.dm b/modular_nova/modules/gladiator/code/modules/mob/living/simple_animal/hostile/megafauna/markedone.dm similarity index 98% rename from modular_skyrat/modules/gladiator/code/modules/mob/living/simple_animal/hostile/megafauna/markedone.dm rename to modular_nova/modules/gladiator/code/modules/mob/living/simple_animal/hostile/megafauna/markedone.dm index 7a09648a7e52b1..1d057807d639d5 100644 --- a/modular_skyrat/modules/gladiator/code/modules/mob/living/simple_animal/hostile/megafauna/markedone.dm +++ b/modular_nova/modules/gladiator/code/modules/mob/living/simple_animal/hostile/megafauna/markedone.dm @@ -17,12 +17,12 @@ /mob/living/simple_animal/hostile/megafauna/gladiator name = "\proper The Marked One" desc = "An ancient miner lost to time, chosen and changed by the Necropolis, encased in a suit of armor. Only a chosen few can match his speed and strength." - icon = 'modular_skyrat/modules/gladiator/icons/markedone.dmi' + icon = 'modular_nova/modules/gladiator/icons/markedone.dmi' icon_state = "marked1" icon_dead = "marked_dying" attack_verb_simple = "cleave" attack_verb_continuous = "cleaves" - attack_sound = 'modular_skyrat/master_files/sound/weapons/bloodyslice.ogg' + attack_sound = 'modular_nova/master_files/sound/weapons/bloodyslice.ogg' death_sound = 'sound/creatures/space_dragon_roar.ogg' death_message = "falls on his sword, ash evaporating from every hole in his armor." gps_name = "Forgotten Signal" @@ -338,7 +338,7 @@ QDEL_IN(smonk, 0.5 SECONDS) for(var/mob/living/slapped in targeted) if(!faction_check(faction, slapped.faction) && !(slapped in hit_things)) - playsound(src, 'modular_skyrat/modules/gladiator/Clang_cut.ogg', 75, 0) + playsound(src, 'modular_nova/modules/gladiator/Clang_cut.ogg', 75, 0) if(slapped.apply_damage(40, BRUTE, BODY_ZONE_CHEST, slapped.run_armor_check(BODY_ZONE_CHEST), wound_bonus = CANT_WOUND)) visible_message(span_danger("[src] slashes through [slapped] with his spinning blade!")) else @@ -379,7 +379,7 @@ charging = FALSE minimum_distance = initial(minimum_distance) chargetiles = 0 - playsound(src, 'modular_skyrat/modules/gladiator/Clang_cut.ogg', 75, 0) + playsound(src, 'modular_nova/modules/gladiator/Clang_cut.ogg', 75, 0) animate(src, color = initial(color), 0.5 SECONDS) move_to_delay += CHARGE_MODIFIER update_phase() diff --git a/modular_skyrat/modules/gladiator/icons/berserk_icons.dmi b/modular_nova/modules/gladiator/icons/berserk_icons.dmi similarity index 100% rename from modular_skyrat/modules/gladiator/icons/berserk_icons.dmi rename to modular_nova/modules/gladiator/icons/berserk_icons.dmi diff --git a/modular_skyrat/modules/gladiator/icons/berserk_suit.dmi b/modular_nova/modules/gladiator/icons/berserk_suit.dmi similarity index 100% rename from modular_skyrat/modules/gladiator/icons/berserk_suit.dmi rename to modular_nova/modules/gladiator/icons/berserk_suit.dmi diff --git a/modular_skyrat/modules/gladiator/icons/dragonslayer.dmi b/modular_nova/modules/gladiator/icons/dragonslayer.dmi similarity index 100% rename from modular_skyrat/modules/gladiator/icons/dragonslayer.dmi rename to modular_nova/modules/gladiator/icons/dragonslayer.dmi diff --git a/modular_skyrat/modules/gladiator/icons/dragonslayer_inhand_L.dmi b/modular_nova/modules/gladiator/icons/dragonslayer_inhand_L.dmi similarity index 100% rename from modular_skyrat/modules/gladiator/icons/dragonslayer_inhand_L.dmi rename to modular_nova/modules/gladiator/icons/dragonslayer_inhand_L.dmi diff --git a/modular_skyrat/modules/gladiator/icons/dragonslayer_inhand_R.dmi b/modular_nova/modules/gladiator/icons/dragonslayer_inhand_R.dmi similarity index 100% rename from modular_skyrat/modules/gladiator/icons/dragonslayer_inhand_R.dmi rename to modular_nova/modules/gladiator/icons/dragonslayer_inhand_R.dmi diff --git a/modular_skyrat/modules/gladiator/icons/markedone.dmi b/modular_nova/modules/gladiator/icons/markedone.dmi similarity index 100% rename from modular_skyrat/modules/gladiator/icons/markedone.dmi rename to modular_nova/modules/gladiator/icons/markedone.dmi diff --git a/modular_skyrat/modules/gladiator/readme.md b/modular_nova/modules/gladiator/readme.md similarity index 100% rename from modular_skyrat/modules/gladiator/readme.md rename to modular_nova/modules/gladiator/readme.md diff --git a/modular_skyrat/modules/goofsec/code/cellphone.dm b/modular_nova/modules/goofsec/code/cellphone.dm similarity index 100% rename from modular_skyrat/modules/goofsec/code/cellphone.dm rename to modular_nova/modules/goofsec/code/cellphone.dm diff --git a/modular_skyrat/modules/goofsec/code/department_guards.dm b/modular_nova/modules/goofsec/code/department_guards.dm similarity index 84% rename from modular_skyrat/modules/goofsec/code/department_guards.dm rename to modular_nova/modules/goofsec/code/department_guards.dm index c93b74ffa185c5..da938f00f91f40 100644 --- a/modular_skyrat/modules/goofsec/code/department_guards.dm +++ b/modular_nova/modules/goofsec/code/department_guards.dm @@ -1,4 +1,4 @@ -//Rather than assigning a security officer to each department, Skyrat departments get their own allied Guards! +//Rather than assigning a security officer to each department, Nova departments get their own allied Guards! //Most related code is in this file; uniform icons are in the relevant department's .dmi //SORT ORDER: Sci, Generic, Med, Engi, Cargo, Serv @@ -6,76 +6,76 @@ /* UNIFORMS */ -/obj/item/clothing/under/rank/security/officer/blueshirt/skyrat - //Effectively the same as TG's blueshirt, including icon. The /skyrat path makes it easier for sorting. +/obj/item/clothing/under/rank/security/officer/blueshirt/nova + //Effectively the same as TG's blueshirt, including icon. The /nova path makes it easier for sorting. name = "science guard's uniform" unique_reskin = null -/obj/item/clothing/under/rank/security/officer/blueshirt/skyrat/orderly +/obj/item/clothing/under/rank/security/officer/blueshirt/nova/orderly name = "orderly uniform" desc = "White scrubs with gray pants underneath. Be warned, wearers of this uniform may only take the Hippocratic Oath as a suggestion." icon_state = "orderly_uniform" worn_icon_state = "orderly_uniform" - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/medical.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/medical.dmi' - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/medical_digi.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/under/medical.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/medical.dmi' + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/medical_digi.dmi' -/obj/item/clothing/under/rank/security/officer/blueshirt/skyrat/engineering_guard +/obj/item/clothing/under/rank/security/officer/blueshirt/nova/engineering_guard name = "engineering guard uniform" desc = "Effectively just padded hi-vis coveralls, they do the trick both inside of, and while keeping people out of, a hardhat zone." icon_state = "engineering_guard_uniform" worn_icon_state = "engineering_guard_uniform" - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/engineering.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/engineering.dmi' - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/engineering_digi.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/under/engineering.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/engineering.dmi' + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/engineering_digi.dmi' -/obj/item/clothing/under/rank/security/officer/blueshirt/skyrat/customs_agent +/obj/item/clothing/under/rank/security/officer/blueshirt/nova/customs_agent name = "customs agent uniform" desc = "A cargo-brown short-sleeve shirt, and cargo shorts in an authoritative charcoal color. Only for the FTU's finest strong-hands." icon_state = "customs_uniform" worn_icon_state = "customs_uniform" - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/cargo.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/cargo.dmi' - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/cargo_digi.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/under/cargo.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/cargo.dmi' + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/cargo_digi.dmi' -/obj/item/clothing/under/rank/security/officer/blueshirt/skyrat/bouncer +/obj/item/clothing/under/rank/security/officer/blueshirt/nova/bouncer name = "bouncer uniform" desc = "Short-sleeves and jeans, for that aura of cool that makes the drunk people listen." icon_state = "bouncer" worn_icon_state = "bouncer" - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/civilian.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/civilian.dmi' - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/civilian_digi.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/under/civilian.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/civilian.dmi' + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/civilian_digi.dmi' /* SUITS */ -/obj/item/clothing/suit/armor/vest/blueshirt/skyrat - //Effectively the same as TG's blueshirt, including icon. The /skyrat path makes it easier for sorting. - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi' +/obj/item/clothing/suit/armor/vest/blueshirt/nova + //Effectively the same as TG's blueshirt, including icon. The /nova path makes it easier for sorting. + icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi' unique_reskin = null supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON -/obj/item/clothing/suit/armor/vest/blueshirt/skyrat/guard //Badge-less version of the blueshirt vest +/obj/item/clothing/suit/armor/vest/blueshirt/nova/guard //Badge-less version of the blueshirt vest icon_state = "guard_armor" worn_icon_state = "guard_armor" -/obj/item/clothing/suit/armor/vest/blueshirt/skyrat/orderly +/obj/item/clothing/suit/armor/vest/blueshirt/nova/orderly name = "armored orderly coat" desc = "An armored coat, in a deep paramedic blue. It'll keep you padded while dealing with troublesome patients." icon_state = "medical_coat" worn_icon_state = "medical_coat" supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION -/obj/item/clothing/suit/armor/vest/blueshirt/skyrat/engineering_guard +/obj/item/clothing/suit/armor/vest/blueshirt/nova/engineering_guard name = "armored engineering guard coat" desc = "An armored coat whose hazard strips are worn to the point of uselessness. It'll keep you protected while clearing hazard zones at least." icon_state = "engineering_coat" worn_icon_state = "engineering_coat" supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION -/obj/item/clothing/suit/armor/vest/blueshirt/skyrat/customs_agent +/obj/item/clothing/suit/armor/vest/blueshirt/nova/customs_agent name = "armored customs agent coat" desc = "An armored coat, with intricately woven patterns and details. This should help keep you safe from unruly customers." icon_state = "customs_coat" @@ -84,14 +84,14 @@ /* HEAD */ -/obj/item/clothing/head/helmet/blueshirt/skyrat - //Effectively the same as TG's blueshirt, including icon. The /skyrat path makes it easier for sorting. +/obj/item/clothing/head/helmet/blueshirt/nova + //Effectively the same as TG's blueshirt, including icon. The /nova path makes it easier for sorting. //The base one is used for science guards, and the sprite is unchanged unique_reskin = null -/obj/item/clothing/head/helmet/blueshirt/skyrat/guard //Version of the blueshirt helmet without a blue line. Used by all dept guards right now. - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/helmet.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/helmet.dmi' +/obj/item/clothing/head/helmet/blueshirt/nova/guard //Version of the blueshirt helmet without a blue line. Used by all dept guards right now. + icon = 'modular_nova/master_files/icons/obj/clothing/head/helmet.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/helmet.dmi' icon_state = "mallcop_helm" worn_icon_state = "mallcop_helm" @@ -127,27 +127,27 @@ /obj/effect/landmark/start/science_guard name = "Science Guard" icon_state = "Science Guard" - icon = 'modular_skyrat/master_files/icons/mob/landmarks.dmi' + icon = 'modular_nova/master_files/icons/mob/landmarks.dmi' /obj/effect/landmark/start/orderly name = "Orderly" icon_state = "Orderly" - icon = 'modular_skyrat/master_files/icons/mob/landmarks.dmi' + icon = 'modular_nova/master_files/icons/mob/landmarks.dmi' /obj/effect/landmark/start/engineering_guard name = "Engineering Guard" icon_state = "Engineering Guard" - icon = 'modular_skyrat/master_files/icons/mob/landmarks.dmi' + icon = 'modular_nova/master_files/icons/mob/landmarks.dmi' /obj/effect/landmark/start/customs_agent name = "Customs Agent" icon_state = "Customs Agent" - icon = 'modular_skyrat/master_files/icons/mob/landmarks.dmi' + icon = 'modular_nova/master_files/icons/mob/landmarks.dmi' /obj/effect/landmark/start/bouncer name = "Service Guard" icon_state = "Bouncer" - icon = 'modular_skyrat/master_files/icons/mob/landmarks.dmi' + icon = 'modular_nova/master_files/icons/mob/landmarks.dmi' /* SCIENCE GUARD DATUMS @@ -192,15 +192,15 @@ belt = /obj/item/modular_computer/pda/science ears = /obj/item/radio/headset/headset_sci - uniform = /obj/item/clothing/under/rank/security/officer/blueshirt/skyrat + uniform = /obj/item/clothing/under/rank/security/officer/blueshirt/nova shoes = /obj/item/clothing/shoes/jackboots - head = /obj/item/clothing/head/helmet/blueshirt/skyrat - suit = /obj/item/clothing/suit/armor/vest/blueshirt/skyrat + head = /obj/item/clothing/head/helmet/blueshirt/nova + suit = /obj/item/clothing/suit/armor/vest/blueshirt/nova r_pocket = /obj/item/assembly/flash/handheld l_pocket = /obj/item/restraints/handcuffs/cable/pink backpack_contents = list( /obj/item/melee/baton/security/loaded/departmental/science = 1, - /obj/item/storage/toolbox/guncase/skyrat/pistol/pepperball = 1, + /obj/item/storage/toolbox/guncase/nova/pistol/pepperball = 1, ) backpack = /obj/item/storage/backpack/science @@ -212,7 +212,7 @@ /datum/id_trim/job/science_guard assignment = "Science Guard" - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' trim_state = "trim_calhoun" department_color = COLOR_SCIENCE_PINK subdepartment_color = COLOR_SCIENCE_PINK @@ -296,15 +296,15 @@ belt = /obj/item/modular_computer/pda/medical ears = /obj/item/radio/headset/headset_med - uniform = /obj/item/clothing/under/rank/security/officer/blueshirt/skyrat/orderly + uniform = /obj/item/clothing/under/rank/security/officer/blueshirt/nova/orderly shoes = /obj/item/clothing/shoes/sneakers/white - head = /obj/item/clothing/head/helmet/blueshirt/skyrat/guard - suit = /obj/item/clothing/suit/armor/vest/blueshirt/skyrat/orderly + head = /obj/item/clothing/head/helmet/blueshirt/nova/guard + suit = /obj/item/clothing/suit/armor/vest/blueshirt/nova/orderly r_pocket = /obj/item/assembly/flash/handheld l_pocket = /obj/item/restraints/handcuffs/cable/blue backpack_contents = list( /obj/item/melee/baton/security/loaded/departmental/medical = 1, - /obj/item/storage/toolbox/guncase/skyrat/pistol/pepperball = 1, + /obj/item/storage/toolbox/guncase/nova/pistol/pepperball = 1, ) backpack = /obj/item/storage/backpack/medic @@ -317,7 +317,7 @@ /datum/id_trim/job/orderly assignment = "Orderly" - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' trim_state = "trim_orderly" department_color = COLOR_MEDICAL_BLUE subdepartment_color = COLOR_MEDICAL_BLUE @@ -395,14 +395,14 @@ belt = /obj/item/modular_computer/pda/engineering ears = /obj/item/radio/headset/headset_eng shoes = /obj/item/clothing/shoes/workboots - uniform = /obj/item/clothing/under/rank/security/officer/blueshirt/skyrat/engineering_guard - head = /obj/item/clothing/head/helmet/blueshirt/skyrat/guard - suit = /obj/item/clothing/suit/armor/vest/blueshirt/skyrat/engineering_guard + uniform = /obj/item/clothing/under/rank/security/officer/blueshirt/nova/engineering_guard + head = /obj/item/clothing/head/helmet/blueshirt/nova/guard + suit = /obj/item/clothing/suit/armor/vest/blueshirt/nova/engineering_guard r_pocket = /obj/item/assembly/flash/handheld l_pocket = /obj/item/restraints/handcuffs/cable/yellow backpack_contents = list( /obj/item/melee/baton/security/loaded/departmental/engineering = 1, - /obj/item/storage/toolbox/guncase/skyrat/pistol/pepperball = 1, + /obj/item/storage/toolbox/guncase/nova/pistol/pepperball = 1, ) backpack = /obj/item/storage/backpack/industrial @@ -415,7 +415,7 @@ /datum/id_trim/job/engineering_guard assignment = "Engineering Guard" - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' trim_state = "trim_engiguard" department_color = COLOR_ENGINEERING_ORANGE subdepartment_color = COLOR_ENGINEERING_ORANGE @@ -499,15 +499,15 @@ belt = /obj/item/modular_computer/pda/cargo ears = /obj/item/radio/headset/headset_cargo shoes = /obj/item/clothing/shoes/sneakers/black - uniform = /obj/item/clothing/under/rank/security/officer/blueshirt/skyrat/customs_agent - head = /obj/item/clothing/head/helmet/blueshirt/skyrat/guard - suit = /obj/item/clothing/suit/armor/vest/blueshirt/skyrat/customs_agent + uniform = /obj/item/clothing/under/rank/security/officer/blueshirt/nova/customs_agent + head = /obj/item/clothing/head/helmet/blueshirt/nova/guard + suit = /obj/item/clothing/suit/armor/vest/blueshirt/nova/customs_agent glasses = /obj/item/clothing/glasses/hud/gun_permit r_pocket = /obj/item/assembly/flash/handheld l_pocket = /obj/item/restraints/handcuffs/cable/orange backpack_contents = list( /obj/item/melee/baton/security/loaded/departmental/cargo = 1, - /obj/item/storage/toolbox/guncase/skyrat/pistol/pepperball = 1, + /obj/item/storage/toolbox/guncase/nova/pistol/pepperball = 1, ) backpack = /obj/item/storage/backpack @@ -519,7 +519,7 @@ /datum/id_trim/job/customs_agent assignment = "Customs Agent" - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' trim_state = "trim_customs" department_color = COLOR_CARGO_BROWN subdepartment_color = COLOR_CARGO_BROWN @@ -596,15 +596,15 @@ belt = /obj/item/modular_computer/pda/bar ears = /obj/item/radio/headset/headset_srv - uniform = /obj/item/clothing/under/rank/security/officer/blueshirt/skyrat/bouncer + uniform = /obj/item/clothing/under/rank/security/officer/blueshirt/nova/bouncer shoes = /obj/item/clothing/shoes/sneakers/black - head = /obj/item/clothing/head/helmet/blueshirt/skyrat/guard - suit = /obj/item/clothing/suit/armor/vest/blueshirt/skyrat/guard + head = /obj/item/clothing/head/helmet/blueshirt/nova/guard + suit = /obj/item/clothing/suit/armor/vest/blueshirt/nova/guard l_pocket = /obj/item/restraints/handcuffs/cable/green r_pocket = /obj/item/assembly/flash/handheld backpack_contents = list( /obj/item/melee/baton/security/loaded/departmental/service = 1, - /obj/item/storage/toolbox/guncase/skyrat/pistol/pepperball = 1, + /obj/item/storage/toolbox/guncase/nova/pistol/pepperball = 1, ) glasses = /obj/item/clothing/glasses/sunglasses @@ -617,7 +617,7 @@ /datum/id_trim/job/bouncer assignment = "Bouncer" - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' trim_state = "trim_bouncer" department_color = COLOR_SERVICE_LIME subdepartment_color = COLOR_SERVICE_LIME // Personally speaking I'd have one of these with sec colors but I'm being authentic @@ -655,7 +655,7 @@ /obj/item/melee/baton/security/loaded/departmental name = "departmental stun baton" desc = "A stun baton fitted with a departmental area-lock, based off the station's blueprint layout - outside of its department, it only has three uses." - icon = 'modular_skyrat/modules/goofsec/icons/departmental_batons.dmi' + icon = 'modular_nova/modules/goofsec/icons/departmental_batons.dmi' icon_state = "prison_baton" var/list/valid_areas = list() var/emagged = FALSE @@ -800,10 +800,10 @@ generate_items_inside(list( /obj/item/radio/headset/headset_sci = 2, /obj/item/clothing/shoes/sneakers/black = 2, - /obj/item/clothing/under/rank/security/officer/blueshirt/skyrat = 2, - /obj/item/clothing/head/helmet/blueshirt/skyrat = 2, + /obj/item/clothing/under/rank/security/officer/blueshirt/nova = 2, + /obj/item/clothing/head/helmet/blueshirt/nova = 2, /obj/item/clothing/head/beret/sec/science = 2, - /obj/item/clothing/suit/armor/vest/blueshirt/skyrat = 2, + /obj/item/clothing/suit/armor/vest/blueshirt/nova = 2, /obj/item/clothing/glasses/hud/security = 2, ), src) @@ -815,10 +815,10 @@ generate_items_inside(list( /obj/item/radio/headset/headset_med = 2, /obj/item/clothing/shoes/sneakers/white = 2, - /obj/item/clothing/under/rank/security/officer/blueshirt/skyrat/orderly = 2, - /obj/item/clothing/head/helmet/blueshirt/skyrat/guard = 2, + /obj/item/clothing/under/rank/security/officer/blueshirt/nova/orderly = 2, + /obj/item/clothing/head/helmet/blueshirt/nova/guard = 2, /obj/item/clothing/head/beret/sec/medical = 2, - /obj/item/clothing/suit/armor/vest/blueshirt/skyrat/orderly = 2, + /obj/item/clothing/suit/armor/vest/blueshirt/nova/orderly = 2, /obj/item/clothing/glasses/hud/security = 2, ), src) @@ -830,10 +830,10 @@ generate_items_inside(list( /obj/item/radio/headset/headset_eng = 2, /obj/item/clothing/shoes/workboots = 2, - /obj/item/clothing/under/rank/security/officer/blueshirt/skyrat/engineering_guard = 2, - /obj/item/clothing/head/helmet/blueshirt/skyrat/guard = 2, + /obj/item/clothing/under/rank/security/officer/blueshirt/nova/engineering_guard = 2, + /obj/item/clothing/head/helmet/blueshirt/nova/guard = 2, /obj/item/clothing/head/beret/sec/engineering = 2, - /obj/item/clothing/suit/armor/vest/blueshirt/skyrat/engineering_guard = 2, + /obj/item/clothing/suit/armor/vest/blueshirt/nova/engineering_guard = 2, /obj/item/clothing/glasses/hud/security = 2, ), src) @@ -845,10 +845,10 @@ generate_items_inside(list( /obj/item/radio/headset/headset_cargo = 2, /obj/item/clothing/shoes/sneakers/black = 2, - /obj/item/clothing/under/rank/security/officer/blueshirt/skyrat/customs_agent = 2, - /obj/item/clothing/head/helmet/blueshirt/skyrat/guard = 2, + /obj/item/clothing/under/rank/security/officer/blueshirt/nova/customs_agent = 2, + /obj/item/clothing/head/helmet/blueshirt/nova/guard = 2, /obj/item/clothing/head/beret/sec/cargo = 2, - /obj/item/clothing/suit/armor/vest/blueshirt/skyrat/customs_agent = 2, + /obj/item/clothing/suit/armor/vest/blueshirt/nova/customs_agent = 2, /obj/item/clothing/glasses/hud/security = 2, /obj/item/clothing/glasses/hud/gun_permit = 2, ), src) diff --git a/modular_skyrat/modules/goofsec/code/hud.dm b/modular_nova/modules/goofsec/code/hud.dm similarity index 100% rename from modular_skyrat/modules/goofsec/code/hud.dm rename to modular_nova/modules/goofsec/code/hud.dm diff --git a/modular_skyrat/modules/goofsec/code/sec_clothing_overrides.dm b/modular_nova/modules/goofsec/code/sec_clothing_overrides.dm similarity index 81% rename from modular_skyrat/modules/goofsec/code/sec_clothing_overrides.dm rename to modular_nova/modules/goofsec/code/sec_clothing_overrides.dm index f19659068cb784..1802b0199cd3d8 100644 --- a/modular_skyrat/modules/goofsec/code/sec_clothing_overrides.dm +++ b/modular_nova/modules/goofsec/code/sec_clothing_overrides.dm @@ -9,8 +9,8 @@ */ /obj/item/clothing/under/plasmaman/security - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/plasmaman.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/plasmaman.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/under/plasmaman.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/plasmaman.dmi' icon_state = "security_envirosuit_new" /obj/item/clothing/under/plasmaman/security/warden @@ -20,8 +20,8 @@ icon_state = "hos_envirosuit_new" /obj/item/clothing/head/helmet/space/plasmaman/security - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/plasmaman_hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/plasmaman_head.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/head/plasmaman_hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/plasmaman_head.dmi' icon_state = "security_envirohelm_new" /obj/item/clothing/head/helmet/space/plasmaman/security/warden @@ -34,10 +34,14 @@ * ACCESSORIES */ /obj/item/clothing/accessory/armband/deputy - icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi' icon_state = "armband_lopland" +/obj/item/clothing/accessory/armband/deputy/lopland/nonsec + name = "blue armband" + desc = "An armband, worn to signify proficiency in a skill or association with a department. This one is blue." + /obj/item/clothing/accessory/armband/deputy/lopland desc = "A Peacekeeper-blue armband, showing the wearer to be certified by Lopland as a top-of-their-class Security Officer." @@ -45,10 +49,10 @@ * BACKPACKS */ /obj/item/storage/backpack/security - icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi' - lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' - righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi' + lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' + righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' icon_state = "backpack_security_black" inhand_icon_state = "backpack_security_black" uses_advanced_reskins = TRUE @@ -66,10 +70,10 @@ ) /obj/item/storage/backpack/satchel/sec - icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi' - lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' - righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi' + lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' + righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' icon_state = "satchel_security_black" inhand_icon_state = "satchel_security_black" uses_advanced_reskins = TRUE @@ -87,10 +91,10 @@ ) /obj/item/storage/backpack/duffelbag/sec - icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi' - lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' - righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi' + lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' + righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' icon_state = "duffel_security_black" inhand_icon_state = "duffel_security_black" uses_advanced_reskins = TRUE @@ -111,8 +115,8 @@ * BELTS */ /obj/item/storage/belt/security - icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' icon_state = "belt_white" worn_icon_state = "belt_white" uses_advanced_reskins = TRUE @@ -167,7 +171,7 @@ return ..() resolve_parent.add_fingerprint(user) attempt_remove(gun_to_draw, get_turf(user)) - playsound(resolve_parent, 'modular_skyrat/modules/sec_haul/sound/holsterout.ogg', 50, TRUE, -5) + playsound(resolve_parent, 'modular_nova/modules/sec_haul/sound/holsterout.ogg', 50, TRUE, -5) INVOKE_ASYNC(user, TYPE_PROC_REF(/mob, put_in_hands), gun_to_draw) user.visible_message(span_warning("[user] draws [gun_to_draw] from [resolve_parent]!"), span_notice("You draw [gun_to_draw] from [resolve_parent].")) @@ -175,8 +179,8 @@ * GLASSES */ /obj/item/clothing/glasses/hud/security - icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi' icon_state = "security_hud" glass_colour_type = /datum/client_colour/glass_colour/lightblue @@ -209,15 +213,15 @@ //Overrides the bulletproof helm with the older non red visor version. /obj/item/clothing/head/helmet/alt - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/helmet.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/helmet.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/head/helmet.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/helmet.dmi' icon_state = "helmetalt_blue" base_icon_state = "helmetalt_blue" //Standard helmet (w/ visor) /obj/item/clothing/head/helmet/sec - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/helmet.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/helmet.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/head/helmet.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/helmet.dmi' icon_state = "security_helmet" base_icon_state = "security_helmet" actions_types = list(/datum/action/item_action/toggle) @@ -259,8 +263,8 @@ /obj/item/clothing/head/security_garrison name = "security garrison cap" desc = "A robust garrison cap with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection." - icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' icon_state = "garrison_black" uses_advanced_reskins = TRUE armor_type = /datum/armor/head_helmet @@ -280,8 +284,8 @@ /obj/item/clothing/head/security_cap name = "security cap" desc = "A robust cap with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection." - icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' icon_state = "security_cap_black" uses_advanced_reskins = TRUE armor_type = /datum/armor/head_helmet @@ -304,8 +308,8 @@ ) /obj/item/clothing/head/hats/hos/cap - icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' icon_state = "hoscap_blue" uses_advanced_reskins = TRUE unique_reskin = list( @@ -338,16 +342,16 @@ * NECK */ /obj/item/clothing/neck/cloak/hos - icon = 'modular_skyrat/master_files/icons/obj/clothing/neck.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/neck.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' icon_state = "hoscloak_blue" //Not technically an override but oh well /obj/item/clothing/neck/security_cape name = "security cape" desc = "A fashionable cape worn by security officers." - icon = 'modular_skyrat/master_files/icons/obj/clothing/neck.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/neck.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' icon_state = "cape_black" inhand_icon_state = "" //no unique inhands uses_advanced_reskins = TRUE @@ -409,8 +413,8 @@ /obj/item/clothing/gloves/color/black/security name = "security gloves" desc = "A pair of security gloves." - icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi' icon_state = "gloves_white" uses_advanced_reskins = TRUE unique_reskin = list( @@ -429,13 +433,13 @@ ) /obj/item/clothing/gloves/tackler/security //Can't just overwrite tackler, as there's a ton of subtypes that we'd then need to account for. This is easier. MUCH easier. - icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi' icon_state = "tackle_blue" /obj/item/clothing/gloves/krav_maga/sec - icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi' icon_state = "fightgloves_blue" /* @@ -444,8 +448,8 @@ /obj/item/clothing/suit/armor/vest/alt/sec name = "armored security vest" desc = "A Type-II-AD-P armored vest that provides decent protection against most types of damage." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi' icon_state = "vest_white" uses_advanced_reskins = TRUE unique_reskin = list( @@ -480,9 +484,9 @@ RESKIN_WORN_ICON_STATE = "hostrench" ), "Trenchcloak" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi', + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi', RESKIN_ICON_STATE = "trenchcloak", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi', + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi', RESKIN_WORN_ICON_STATE = "trenchcloak" ), ) @@ -498,8 +502,8 @@ //Riot Armor /obj/item/clothing/suit/armor/riot icon_state = "riot_ad" //replaces the NT on the back - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi' /obj/item/clothing/suit/armor/riot/knight //This needs to be sent back to its original .dmis icon = 'icons/obj/clothing/suits/armor.dmi' @@ -507,8 +511,8 @@ //Warden's Vest /obj/item/clothing/suit/armor/vest/warden - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi' icon_state = "vest_warden" /obj/item/clothing/suit/armor/vest/warden/alt //un-overrides this since its sprite is TG @@ -519,20 +523,20 @@ //Security Wintercoat (and hood) /obj/item/clothing/head/hooded/winterhood/security desc = "A blue, armour-padded winter hood. Definitely not bulletproof, especially not the part where your face goes." //God dammit TG stop putting color in the desc of items like this - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/winterhood.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/winterhood.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/head/winterhood.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/winterhood.dmi' icon_state = "winterhood_security" /obj/item/clothing/suit/hooded/wintercoat/security name = "security winter coat" //TG has this as a Jacket now, so unless we update ours, this needs to be re-named as Coat desc = "A blue, armour-padded winter coat. It glitters with a mild ablative coating and a robust air of authority. The zipper tab is a small <b>\"Lopland\"</b> logo." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/wintercoat.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/wintercoat.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits/wintercoat.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/wintercoat.dmi' icon_state = "coatsecurity_winter" /obj/item/clothing/suit/armor/hos/hos_formal - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi' icon_state = "hosformal_blue" current_skin = "hosformal_blue" //prevents reskinning (but not toggling!) supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION @@ -543,8 +547,8 @@ //Officer /obj/item/clothing/under/rank/security/officer desc = "A tactical security uniform for officers, complete with a Lopland belt buckle." - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi' icon_state = "security_black" alt_covers_chest = TRUE uses_advanced_reskins = TRUE @@ -577,14 +581,14 @@ //Warden /obj/item/clothing/under/rank/security/warden - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi' icon_state = "warden_black" //HoS /obj/item/clothing/under/rank/security/head_of_security - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi' icon_state = "hos_black" /obj/item/clothing/under/rank/security/head_of_security/parade @@ -607,8 +611,8 @@ name = "security jackboots" desc = "Lopland's Peacekeeper-issue Security combat boots for combat scenarios or combat situations. All combat, all the time." icon_state = "security_boots" - icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi' clothing_traits = list(TRAIT_SILENT_FOOTSTEPS) // We have other footsteps. uses_advanced_reskins = TRUE unique_reskin = list( @@ -628,7 +632,7 @@ /obj/item/clothing/shoes/jackboots/sec/Initialize(mapload) . = ..() - AddComponent(/datum/component/squeak, list('modular_skyrat/master_files/sound/effects/footstep1.ogg'=1,'modular_skyrat/master_files/sound/effects/footstep2.ogg'=1, 'modular_skyrat/master_files/sound/effects/footstep3.ogg'=1), 100) + AddComponent(/datum/component/squeak, list('modular_nova/master_files/sound/effects/footstep1.ogg'=1,'modular_nova/master_files/sound/effects/footstep2.ogg'=1, 'modular_nova/master_files/sound/effects/footstep3.ogg'=1), 100) // // This code overrides security's jumpskirt preference, as we're not going to be giving them jumpskirts @@ -783,6 +787,23 @@ /obj/item/gun/energy/e_gun/hos, )) +/obj/item/storage/belt/holster/energy/Initialize(mapload) + . = ..() + atom_storage.max_slots = 2 + atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL + atom_storage.set_holdable(list( + /obj/item/gun/energy/e_gun/mini, + /obj/item/gun/energy/disabler, + /obj/item/gun/energy/dueling, + /obj/item/food/grown/banana, + /obj/item/gun/energy/laser/thermal, + /obj/item/gun/energy/recharge/ebow, + /obj/item/gun/energy/laser/captain, + /obj/item/gun/energy/e_gun/hos, + /obj/item/gun/ballistic/automatic/pistol/plasma_marksman, + /obj/item/gun/ballistic/automatic/pistol/plasma_thrower, + /obj/item/ammo_box/magazine/recharge/plasma_battery, + )) /* * HEAD */ @@ -862,7 +883,7 @@ */ /obj/item/clothing/shoes/jackboots/sec/redsec name = "jackboots" - desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time." + desc = "Symphionia-issue Security combat boots for combat scenarios or combat situations. All combat, all the time." icon_state = "jackboots_sec" icon = 'icons/obj/clothing/shoes.dmi' worn_icon = 'icons/mob/clothing/feet.dmi' @@ -870,7 +891,7 @@ //Finally, a few description changes for items that couldn't get a resprite. /obj/item/clothing/head/bio_hood/security - desc = "A hood that protects the head and face from biological contaminants. This is a slightly outdated model from Nanotrasen Securities - you can hardly see through the foggy visor's ageing red. Hopefully it's still up to spec..." + desc = "A hood that protects the head and face from biological contaminants. This is a slightly outdated model from Symphionia Securities - you can hardly see through the foggy visor's ageing red. Hopefully it's still up to spec..." /obj/item/clothing/suit/bio_suit/security - desc = "A suit that protects against biological contamination. This is a slightly outdated model from Nanotrasen Securities, using their red color-scheme and even outdated labelling. Hopefully it's still up to spec..." + desc = "A suit that protects against biological contamination. This is a slightly outdated model from Symphionia Securities, using their red color-scheme and even outdated labelling. Hopefully it's still up to spec..." diff --git a/modular_skyrat/modules/goofsec/code/sol_fed.dm b/modular_nova/modules/goofsec/code/sol_fed.dm similarity index 91% rename from modular_skyrat/modules/goofsec/code/sol_fed.dm rename to modular_nova/modules/goofsec/code/sol_fed.dm index bced3f6d43d3bc..36802f86809444 100644 --- a/modular_skyrat/modules/goofsec/code/sol_fed.dm +++ b/modular_nova/modules/goofsec/code/sol_fed.dm @@ -24,7 +24,7 @@ GLOBAL_LIST_INIT(pizza_names, list( "Maya Buttreeks", "Amanda Hugginkiss", "Bwight K. Brute", // Github Copilot suggested dwight from the office like 10 times - "John Nanotrasen", + "John Symphionia", "Mike Rotch", "Hugh Jass", "Oliver Closeoff", @@ -78,7 +78,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( Security ignoring Command, Security violating civil rights, Security engaging in Mutiny, \ General Violation of Sol Federation Citizen Rights by Command/Security, etc.\n\ You SHOULD NOT call Marshals for:\n\ - Corporate affairs, manhunts, settling arguments, etc.\n\ + Conglomeration affairs, manhunts, settling arguments, etc.\n\ Are you sure you want to call Marshals?", EMERGENCY_RESPONSE_ATMOS = "You SHOULD call Advanced Atmospherics for:\n\ Stationwide atmospherics loss, wide-scale supermatter delamination related repairs, unending fires filling the hallways, or department-sized breaches with Engineering and Atmospherics unable to handle it, etc. \n\ @@ -91,7 +91,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( /// Internal. Polls ghosts and sends in a team of space cops according to the alert level, accompanied by an announcement. /obj/machinery/computer/communications/proc/call_911(ordered_team) var/team_size - var/cops_to_send + var/datum/antagonist/ert/cops_to_send var/announcement_message = "sussus amogus" var/announcer = "Sol Federation Marshal Department" var/poll_question = "fuck you leatherman" @@ -143,9 +143,14 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( cell_phone_number = "Dogginos" list_to_use = "dogginos" priority_announce(announcement_message, announcer, 'sound/effects/families_police.ogg', has_important_message=TRUE, color_override = "yellow") - var/list/candidates = poll_ghost_candidates(poll_question, "deathsquad") + var/list/candidates = SSpolling.poll_ghost_candidates( + poll_question, + check_jobban = ROLE_DEATHSQUAD, + pic_source = /obj/item/solfed_reporter, + role_name_text = cops_to_send::name, + ) - if(candidates.len) + if(length(candidates)) //Pick the (un)lucky players var/agents_number = min(team_size, candidates.len) @@ -272,7 +277,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( /datum/antagonist/ert/request_911/greet() var/missiondesc = "" - missiondesc += "<B><font size=5 color=red>You are NOT a Nanotrasen Employee. You work for the Sol Federation as a [role].</font></B>" + missiondesc += "<B><font size=5 color=red>You are NOT a Symphionia Employee. You work for the Sol Federation as a [role].</font></B>" missiondesc += "<BR>You are responding to emergency calls from the station for immediate SolFed [department] assistance!\n" missiondesc += "<BR>Use the Cell Phone in your backpack to confer with fellow first responders!\n" missiondesc += "<BR><B>911 Transcript is as follows</B>:" @@ -321,21 +326,24 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( /datum/outfit/request_911/police name = "911 Response: Marshal" - back = /obj/item/storage/backpack/duffelbag/cops - uniform = /obj/item/clothing/under/rank/security/detective/cowboy - shoes = /obj/item/clothing/shoes/cowboy + back = /obj/item/storage/backpack/satchel + uniform = /obj/item/clothing/under/sol_peacekeeper + suit = /obj/item/clothing/suit/armor/vest/det_suit/sol + shoes = /obj/item/clothing/shoes/jackboots glasses = /obj/item/clothing/glasses/sunglasses ears = /obj/item/radio/headset/headset_sec/alt - head = /obj/item/clothing/head/cowboy - belt = /obj/item/gun/energy/disabler - r_pocket = /obj/item/lighter + head = /obj/item/clothing/head/soft/black + suit_store = /obj/item/gun/energy/disabler + belt = /obj/item/melee/baton/security/loaded + r_pocket = /obj/item/flashlight/seclite l_pocket = /obj/item/restraints/handcuffs id = /obj/item/card/id/advanced/solfed - backpack_contents = list(/obj/item/storage/box/survival = 1, + backpack_contents = list( + /obj/item/storage/box/survival = 1, /obj/item/storage/box/handcuffs = 1, - /obj/item/melee/baton/security/loaded = 1, /obj/item/solfed_reporter/swat_caller = 1, - /obj/item/beamout_tool = 1) + /obj/item/beamout_tool = 1, + ) id_trim = /datum/id_trim/solfed @@ -352,7 +360,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( /datum/outfit/request_911/atmos name = "811 Response: Advanced Atmospherics" back = /obj/item/mod/control/pre_equipped/advanced/atmos - uniform = /obj/item/clothing/under/rank/engineering/atmospheric_technician/skyrat/utility/advanced + uniform = /obj/item/clothing/under/rank/engineering/atmospheric_technician/nova/utility/advanced shoes = /obj/item/clothing/shoes/jackboots/peacekeeper ears = /obj/item/radio/headset/headset_solfed/atmos mask = /obj/item/clothing/mask/gas/atmos/glass @@ -366,7 +374,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( /obj/item/rwd/loaded = 1, /obj/item/beamout_tool = 1, /obj/item/solfed_reporter/swat_caller = 1, - ) + ) id_trim = /datum/id_trim/solfed/atmos /obj/item/radio/headset/headset_solfed/atmos @@ -374,7 +382,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( desc = "A headset used by the Solar Federation response teams." icon_state = "med_headset" keyslot = /obj/item/encryptionkey/headset_solfed/atmos - radiosound = 'modular_skyrat/modules/radiosound/sound/radio/security.ogg' + radiosound = 'modular_nova/modules/radiosound/sound/radio/security.ogg' /obj/item/encryptionkey/headset_solfed/atmos name = "\improper SolFed adv. atmos encryption key" @@ -396,21 +404,25 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( /datum/outfit/request_911/emt name = "911 Response: EMT" - back = /obj/item/storage/backpack/duffelbag/cops - uniform = /obj/item/clothing/under/rank/medical/paramedic - shoes = /obj/item/clothing/shoes/sneakers/white + back = /obj/item/storage/backpack/medic + uniform = /obj/item/clothing/under/sol_emt + shoes = /obj/item/clothing/shoes/jackboots ears = /obj/item/radio/headset/headset_med - head = /obj/item/clothing/head/soft/paramedic + mask = /obj/item/clothing/mask/gas/alt + head = /obj/item/clothing/head/helmet/toggleable/sf_hardened/emt id = /obj/item/card/id/advanced/solfed - suit = /obj/item/clothing/suit/toggle/labcoat/paramedic + suit = /obj/item/clothing/suit/armor/sf_hardened/emt gloves = /obj/item/clothing/gloves/latex/nitrile - belt = /obj/item/storage/belt/medical/paramedic - suit_store = /obj/item/flashlight/pen/paramedic - backpack_contents = list(/obj/item/storage/box/survival = 1, + belt = /obj/item/storage/backpack/duffelbag/deforest_medkit/stocked + suit_store = /obj/item/tank/internals/emergency_oxygen/engi + r_pocket = /obj/item/flashlight/seclite + l_pocket = /obj/item/storage/medkit/civil_defense + backpack_contents = list( + /obj/item/storage/box/survival = 1, /obj/item/emergency_bed = 1, - /obj/item/storage/medkit/surgery = 1, /obj/item/solfed_reporter/swat_caller = 1, - /obj/item/beamout_tool = 1) + /obj/item/beamout_tool = 1, + ) id_trim = /datum/id_trim/solfed @@ -422,7 +434,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( /datum/antagonist/ert/request_911/condom_destroyer/greet() var/missiondesc = "" - missiondesc += "<B><font size=5 color=red>You are NOT a Nanotrasen Employee. You work for the Sol Federation as a [role].</font></B>" + missiondesc += "<B><font size=5 color=red>You are NOT a Symphionia Employee. You work for the Sol Federation as a [role].</font></B>" missiondesc += "<BR>You are here to backup the 911 first responders, as they have reported for your assistance..\n" missiondesc += "<BR><B>Your Mission</B>:" missiondesc += "<BR> <B>1.</B> Contact the first responders using the Cell Phone in your backpack to figure out the situation." @@ -438,24 +450,26 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( /datum/outfit/request_911/condom_destroyer name = "911 Response: Armed S.W.A.T. Officer" - back = /obj/item/storage/backpack/duffelbag/cops - uniform = /obj/item/clothing/under/rank/security/officer/beatcop + back = /obj/item/storage/backpack + uniform = /obj/item/clothing/under/sol_peacekeeper shoes = /obj/item/clothing/shoes/jackboots glasses = /obj/item/clothing/glasses/sunglasses ears = /obj/item/radio/headset/headset_sec/alt - head = /obj/item/clothing/head/helmet/toggleable/riot + head = /obj/item/clothing/head/helmet/sf_peacekeeper belt = /obj/item/gun/energy/disabler - suit = /obj/item/clothing/suit/armor/riot - r_pocket = /obj/item/lighter + suit = /obj/item/clothing/suit/armor/sf_peacekeeper + r_pocket = /obj/item/flashlight/seclite l_pocket = /obj/item/restraints/handcuffs id = /obj/item/card/id/advanced/solfed - l_hand = /obj/item/gun/ballistic/shotgun/riot - backpack_contents = list(/obj/item/storage/box/survival = 1, + l_hand = /obj/item/gun/ballistic/shotgun/riot/sol + backpack_contents = list( + /obj/item/storage/box/survival = 1, /obj/item/storage/box/handcuffs = 1, /obj/item/melee/baton/security/loaded = 1, /obj/item/storage/box/lethalshot = 2, /obj/item/solfed_reporter/treason_reporter = 1, - /obj/item/beamout_tool = 1) + /obj/item/beamout_tool = 1, + ) id_trim = /datum/id_trim/solfed @@ -467,7 +481,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( /datum/antagonist/ert/request_911/treason_destroyer/greet() var/missiondesc = "" - missiondesc += "<B><font size=5 color=red>You are NOT a Nanotrasen Employee. You work for the Sol Federation as a [role].</font></B>" + missiondesc += "<B><font size=5 color=red>You are NOT a Symphionia Employee. You work for the Sol Federation as a [role].</font></B>" missiondesc += "<BR>You are here to assume control of [station_name()] due to the occupants engaging in Treason as reported by our SWAT team.\n" missiondesc += "<BR><B>Your Mission</B>:" missiondesc += "<BR> <B>1.</B> Contact the SWAT Team and the First Responders via your cell phone to get the situation from them." @@ -482,22 +496,25 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( /datum/outfit/request_911/treason_destroyer name = "911 Response: SolFed Military" - uniform = /obj/item/clothing/under/rank/security/officer/hecu - head = /obj/item/clothing/head/helmet - mask = /obj/item/clothing/mask/gas/hecu2 + uniform = /obj/item/clothing/under/sol_peacekeeper + head = /obj/item/clothing/head/helmet/sf_sacrificial + mask = /obj/item/clothing/mask/gas/alt gloves = /obj/item/clothing/gloves/combat - suit = /obj/item/clothing/suit/armor/vest - shoes = /obj/item/clothing/shoes/combat + suit = /obj/item/clothing/suit/armor/sf_sacrificial + shoes = /obj/item/clothing/shoes/jackboots - back = /obj/item/storage/backpack/duffelbag/cops + back = /obj/item/storage/backpack glasses = /obj/item/clothing/glasses/sunglasses ears = /obj/item/radio/headset/headset_sec/alt l_pocket = /obj/item/restraints/handcuffs + r_pocket = /obj/item/flashlight/seclite id = /obj/item/card/id/advanced/solfed - r_hand = /obj/item/gun/ballistic/automatic/m16 - backpack_contents = list(/obj/item/storage/box/handcuffs = 1, + r_hand = /obj/item/gun/ballistic/automatic/sol_rifle + backpack_contents = list( + /obj/item/storage/box/handcuffs = 1, + /obj/item/sacrificial_face_shield = 1, /obj/item/melee/baton/security/loaded = 1, - /obj/item/ammo_box/magazine/m16 = 4 + /obj/item/ammo_box/magazine/c40sol_rifle/standard = 4, ) id_trim = /datum/id_trim/solfed @@ -505,7 +522,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( /obj/item/solfed_reporter name = "SolFed reporter" desc = "Use this in-hand to vote to call SolFed backup. If half your team votes for it, SWAT will be dispatched." - icon = 'modular_skyrat/modules/goofsec/icons/reporter.dmi' + icon = 'modular_nova/modules/goofsec/icons/reporter.dmi' icon_state = "reporter_off" w_class = WEIGHT_CLASS_SMALL /// Was the reporter turned on? @@ -566,7 +583,12 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( station_balance?.adjust_money(SOLFED_FINE_AMOUNT) // paying for the gas to drive all the fuckin' way out to the frontier priority_announce(announcement_message, announcement_source, 'sound/effects/families_police.ogg', has_important_message = TRUE, color_override = "yellow") - var/list/candidates = poll_ghost_candidates(ghost_poll_msg, jobban_to_check) + var/list/candidates = SSpolling.poll_ghost_candidates( + ghost_poll_msg, + jobban_to_check, + pic_source = /obj/item/solfed_reporter, + role_name_text = summoned_type, + ) if(candidates.len) //Pick the (un)lucky players @@ -655,7 +677,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( /obj/item/solfed_reporter/treason_reporter/questions(mob/user) var/list/list_of_questions = list( "Treason is the crime of attacking a state authority to which one owes allegiance. The station is located within Sol Federation space, \ - and owes allegiance to the Sol Federation despite being owned by Nanotrasen. Did the station engage in this today?", + and owes allegiance to the Sol Federation despite being owned by Symphionia. Did the station engage in this today?", "Did station crewmembers assault you or the SWAT team at the direction of Security and/or Command?", "Did station crewmembers actively prevent you and the SWAT team from accomplishing your objectives at the direction of Security and/or Command?", "Were you and your fellow SWAT members unable to handle the issue on your own?", @@ -711,7 +733,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( /datum/antagonist/ert/pizza/false_call/greet() var/missiondesc = "" - missiondesc += "<B><font size=5 color=red>You are NOT a Nanotrasen Employee. You work for Dogginos as a delivery person.</font></B>" + missiondesc += "<B><font size=5 color=red>You are NOT a Symphionia Employee. You work for Dogginos as a delivery person.</font></B>" missiondesc += "<BR>You are here to deliver some pizzas from Dogginos!\n" missiondesc += "<BR>Use the Cell Phone in your backpack to confer with fellow Dogginos employees!\n" missiondesc += "<BR><B>Your Mission</B>:" @@ -722,7 +744,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( /datum/antagonist/ert/pizza/leader/false_call/greet() var/missiondesc = "" - missiondesc += "<B><font size=5 color=red>You are NOT a Nanotrasen Employee. You work for Dogginos as a Regional Manager.</font></B>" + missiondesc += "<B><font size=5 color=red>You are NOT a Symphionia Employee. You work for Dogginos as a Regional Manager.</font></B>" missiondesc += "<BR>You are here to resolve a dispute with some customers who refuse to pay their bill!\n" missiondesc += "<BR>Use the Cell Phone in your backpack to confer with fellow Dogginos employees!\n" missiondesc += "<BR><B>Your Mission</B>:" @@ -733,7 +755,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( /obj/item/beamout_tool name = "beam-out tool" // TODO, find a way to make this into drop pods cuz that's cooler visually desc = "Use this to begin the lengthy beam-out process to return to Sol Federation space. It will bring anyone you are pulling with you." - icon = 'modular_skyrat/modules/goofsec/icons/reporter.dmi' + icon = 'modular_nova/modules/goofsec/icons/reporter.dmi' icon_state = "beam_me_up_scotty" w_class = WEIGHT_CLASS_SMALL diff --git a/modular_nova/modules/goofsec/code/solfed_clothing.dm b/modular_nova/modules/goofsec/code/solfed_clothing.dm new file mode 100644 index 00000000000000..c509ab977503e4 --- /dev/null +++ b/modular_nova/modules/goofsec/code/solfed_clothing.dm @@ -0,0 +1,42 @@ +// Peacekeeper jumpsuit + +/obj/item/clothing/under/sol_peacekeeper + name = "sol peacekeeper uniform" + desc = "A military-grade uniform with military grade comfort (none at all), often seen on \ + SolFed's various peacekeeping forces, and usually alongside a blue helmet." + icon = 'modular_nova/modules/goofsec/icons/uniforms.dmi' + icon_state = "peacekeeper" + worn_icon = 'modular_nova/modules/goofsec/icons/uniforms_worn.dmi' + worn_icon_digi = 'modular_nova/modules/goofsec/icons/uniforms_worn_digi.dmi' + worn_icon_state = "peacekeeper" + armor_type = /datum/armor/clothing_under/rank_security + inhand_icon_state = null + has_sensor = SENSOR_COORDS + random_sensor = FALSE + +// EMT jumpsuit + +/obj/item/clothing/under/sol_emt + name = "sol emergency medical uniform" + desc = "A copy of SolFed's peacekeeping uniform, recolored and re-built paramedics in mind." + icon = 'modular_nova/modules/goofsec/icons/uniforms.dmi' + icon_state = "emt" + worn_icon = 'modular_nova/modules/goofsec/icons/uniforms_worn.dmi' + worn_icon_digi = 'modular_nova/modules/goofsec/icons/uniforms_worn_digi.dmi' + worn_icon_state = "emt" + armor_type = /datum/armor/clothing_under/rank_medical + inhand_icon_state = null + has_sensor = SENSOR_COORDS + random_sensor = FALSE + +// Solfed flak jacket, for marshals + +/obj/item/clothing/suit/armor/vest/det_suit/sol + name = "'Gordyn' flak vest" + desc = "A light armored jacket common on SolFed personnel who need armor, but find a full vest \ + too impractical or uneeded." + icon = 'modular_nova/modules/goofsec/icons/uniforms.dmi' + icon_state = "flak" + worn_icon = 'modular_nova/modules/goofsec/icons/uniforms_worn.dmi' + worn_icon_state = "flak" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON diff --git a/modular_skyrat/modules/goofsec/icons/departmental_batons.dmi b/modular_nova/modules/goofsec/icons/departmental_batons.dmi similarity index 100% rename from modular_skyrat/modules/goofsec/icons/departmental_batons.dmi rename to modular_nova/modules/goofsec/icons/departmental_batons.dmi diff --git a/modular_skyrat/modules/goofsec/icons/gun_sprites.dmi b/modular_nova/modules/goofsec/icons/gun_sprites.dmi similarity index 100% rename from modular_skyrat/modules/goofsec/icons/gun_sprites.dmi rename to modular_nova/modules/goofsec/icons/gun_sprites.dmi diff --git a/modular_skyrat/modules/goofsec/icons/reporter.dmi b/modular_nova/modules/goofsec/icons/reporter.dmi similarity index 100% rename from modular_skyrat/modules/goofsec/icons/reporter.dmi rename to modular_nova/modules/goofsec/icons/reporter.dmi diff --git a/modular_nova/modules/goofsec/icons/uniforms.dmi b/modular_nova/modules/goofsec/icons/uniforms.dmi new file mode 100644 index 00000000000000..82b6c313b73325 Binary files /dev/null and b/modular_nova/modules/goofsec/icons/uniforms.dmi differ diff --git a/modular_nova/modules/goofsec/icons/uniforms_worn.dmi b/modular_nova/modules/goofsec/icons/uniforms_worn.dmi new file mode 100644 index 00000000000000..5e3700a1505cce Binary files /dev/null and b/modular_nova/modules/goofsec/icons/uniforms_worn.dmi differ diff --git a/modular_nova/modules/goofsec/icons/uniforms_worn_digi.dmi b/modular_nova/modules/goofsec/icons/uniforms_worn_digi.dmi new file mode 100644 index 00000000000000..934a079713ae36 Binary files /dev/null and b/modular_nova/modules/goofsec/icons/uniforms_worn_digi.dmi differ diff --git a/modular_skyrat/modules/goofsec/readme.md b/modular_nova/modules/goofsec/readme.md similarity index 100% rename from modular_skyrat/modules/goofsec/readme.md rename to modular_nova/modules/goofsec/readme.md diff --git a/modular_skyrat/modules/gun_safety/code/keybinding.dm b/modular_nova/modules/gun_safety/code/keybinding.dm similarity index 100% rename from modular_skyrat/modules/gun_safety/code/keybinding.dm rename to modular_nova/modules/gun_safety/code/keybinding.dm diff --git a/modular_skyrat/modules/gun_safety/code/safety_additions.dm b/modular_nova/modules/gun_safety/code/safety_additions.dm similarity index 100% rename from modular_skyrat/modules/gun_safety/code/safety_additions.dm rename to modular_nova/modules/gun_safety/code/safety_additions.dm diff --git a/modular_skyrat/modules/gun_safety/code/safety_component.dm b/modular_nova/modules/gun_safety/code/safety_component.dm similarity index 92% rename from modular_skyrat/modules/gun_safety/code/safety_component.dm rename to modular_nova/modules/gun_safety/code/safety_component.dm index aa84c63b3a3d89..5e956919507427 100644 --- a/modular_skyrat/modules/gun_safety/code/safety_component.dm +++ b/modular_nova/modules/gun_safety/code/safety_component.dm @@ -70,6 +70,9 @@ SIGNAL_HANDLER examine_list += "<span>The safety is [safety_currently_on ? "<font color='#00ff15'>ON</font>" : "<font color='#ff0000'>OFF</font>"].</span>" + var/keybinding = examiner.client?.prefs?.key_bindings?["toggle_safety"]?[1] + if (!isnull(keybinding)) + examine_list += "Press [span_notice("[keybinding]")] with it in hand to toggle the safety." /// Small proc to update the actio button's icon, just so I can not have to copypaste the same thing several times. /datum/component/gun_safety/proc/update_action_button_state() @@ -82,5 +85,5 @@ // The actual action, used by the component /datum/action/item_action/gun_safety_toggle name = "Toggle Gun Safety" - button_icon = 'modular_skyrat/modules/gun_safety/icons/actions.dmi' + button_icon = 'modular_nova/modules/gun_safety/icons/actions.dmi' button_icon_state = "safety_on" diff --git a/modular_skyrat/modules/gun_safety/icons/actions.dmi b/modular_nova/modules/gun_safety/icons/actions.dmi similarity index 100% rename from modular_skyrat/modules/gun_safety/icons/actions.dmi rename to modular_nova/modules/gun_safety/icons/actions.dmi diff --git a/modular_skyrat/modules/gun_safety/readme.md b/modular_nova/modules/gun_safety/readme.md similarity index 100% rename from modular_skyrat/modules/gun_safety/readme.md rename to modular_nova/modules/gun_safety/readme.md diff --git a/modular_skyrat/modules/gunhud/code/gun_hud.dm b/modular_nova/modules/gunhud/code/gun_hud.dm similarity index 98% rename from modular_skyrat/modules/gunhud/code/gun_hud.dm rename to modular_nova/modules/gunhud/code/gun_hud.dm index ff8e5a1785319f..e323026cb0bd5c 100644 --- a/modular_skyrat/modules/gunhud/code/gun_hud.dm +++ b/modular_nova/modules/gunhud/code/gun_hud.dm @@ -14,7 +14,7 @@ /atom/movable/screen/ammo_counter name = "ammo counter" - icon = 'modular_skyrat/modules/gunhud/icons/gun_hud.dmi' + icon = 'modular_nova/modules/gunhud/icons/gun_hud.dmi' icon_state = "backing" screen_loc = ui_ammocounter invisibility = INVISIBILITY_ABSTRACT diff --git a/modular_skyrat/modules/gunhud/code/gun_hud_component.dm b/modular_nova/modules/gunhud/code/gun_hud_component.dm similarity index 100% rename from modular_skyrat/modules/gunhud/code/gun_hud_component.dm rename to modular_nova/modules/gunhud/code/gun_hud_component.dm diff --git a/modular_skyrat/modules/gunhud/icons/gun_hud.dmi b/modular_nova/modules/gunhud/icons/gun_hud.dmi similarity index 100% rename from modular_skyrat/modules/gunhud/icons/gun_hud.dmi rename to modular_nova/modules/gunhud/icons/gun_hud.dmi diff --git a/modular_nova/modules/gunhud/readme.md b/modular_nova/modules/gunhud/readme.md new file mode 100644 index 00000000000000..148e2ee7f7088e --- /dev/null +++ b/modular_nova/modules/gunhud/readme.md @@ -0,0 +1,30 @@ +## Title: Gunpoint + +MODULE ID: GUNHUD + +### Description: + +Adds a dynamic hud system for energy and some ballistics guns. + +### TG Proc Changes: +- N/A +### Defines: + +.code\__DEFINES\atom_hud.dm > #define AMMO_HUD "25" + +.code\modules\projectiles\guns\ballistic.dm > /obj/item/gun/ballistic/examine(mob/user) + +### Master file additions + +- Hud directory > _defines.dm, human.dm, hud.dm +- `modular_nova\master_files\code\game\objects\items\tools\weldingtool.dm`: `proc/Initialize`, `proc/set_welding` +- `modular_nova\master_files\code\modules\projectiles\guns\ballistic.dm`: `proc/eject_magazine`, `proc/insert_magazine` +- `modular_nova\master_files\code\modules\projectiles\guns\energy.dm`: `proc/process`, `proc/select_fire` + +### Included files that are not contained in this module: + +- N/A + +### Credits: +Gandalf2k15 - OG creation. +Larentoun - modularisation diff --git a/modular_skyrat/modules/gunpoint/code/gunpoint.dm b/modular_nova/modules/gunpoint/code/gunpoint.dm similarity index 100% rename from modular_skyrat/modules/gunpoint/code/gunpoint.dm rename to modular_nova/modules/gunpoint/code/gunpoint.dm diff --git a/modular_skyrat/modules/gunpoint/code/gunpoint_datum.dm b/modular_nova/modules/gunpoint/code/gunpoint_datum.dm similarity index 94% rename from modular_skyrat/modules/gunpoint/code/gunpoint_datum.dm rename to modular_nova/modules/gunpoint/code/gunpoint_datum.dm index 53cacafd3607d2..0c679d74b1336a 100644 --- a/modular_skyrat/modules/gunpoint/code/gunpoint_datum.dm +++ b/modular_nova/modules/gunpoint/code/gunpoint_datum.dm @@ -1,5 +1,5 @@ /obj/effect/overlay/gunpoint_effect - icon = 'modular_skyrat/modules/gunpoint/icons/targeted.dmi' + icon = 'modular_nova/modules/gunpoint/icons/targeted.dmi' icon_state = "locking" layer = FLY_LAYER plane = GAME_PLANE @@ -58,7 +58,7 @@ return locked = TRUE log_combat(target, source, "locked onto with aiming") - playsound(get_turf(source), 'modular_skyrat/modules/gunpoint/sound/targeton.ogg', 50,1) + playsound(get_turf(source), 'modular_nova/modules/gunpoint/sound/targeton.ogg', 50,1) to_chat(source, span_notice("<b>You lock onto [target.name]!</b>")) target.visible_message(span_warning("<b>[source.name] holds [target.name] at gunpoint with the [aimed_gun.name]!</b>"), span_userdanger("[source.name] holds you at gunpoint with the [aimed_gun.name]!")) if(target.gunpointed.len == 1)//First case @@ -97,7 +97,7 @@ /datum/gunpoint/proc/click_destroy() SIGNAL_HANDLER if(locked) - playsound(get_turf(source), 'modular_skyrat/modules/gunpoint/sound/targetoff.ogg', 50,1) + playsound(get_turf(source), 'modular_nova/modules/gunpoint/sound/targetoff.ogg', 50,1) qdel(src) /datum/gunpoint/proc/source_cc(datum/source, amount, update, ignore) diff --git a/modular_skyrat/modules/gunpoint/icons/radial_gunpoint.dmi b/modular_nova/modules/gunpoint/icons/radial_gunpoint.dmi similarity index 100% rename from modular_skyrat/modules/gunpoint/icons/radial_gunpoint.dmi rename to modular_nova/modules/gunpoint/icons/radial_gunpoint.dmi diff --git a/modular_skyrat/modules/gunpoint/icons/targeted.dmi b/modular_nova/modules/gunpoint/icons/targeted.dmi similarity index 100% rename from modular_skyrat/modules/gunpoint/icons/targeted.dmi rename to modular_nova/modules/gunpoint/icons/targeted.dmi diff --git a/modular_nova/modules/gunpoint/readme.md b/modular_nova/modules/gunpoint/readme.md new file mode 100644 index 00000000000000..958f3ab915bd33 --- /dev/null +++ b/modular_nova/modules/gunpoint/readme.md @@ -0,0 +1,36 @@ +## Title: Gunpoint + +MODULE ID: GUNPOINT + +### Description: + +Allows anyone with a gun to use SHIFT + MMB to hold someone at gunpoint, much like how baystation does it, but in a more visually clear way + +### TG Proc Changes: + + ./modular_nova/modules/gunpoint/code/datum/gunpoint/gunpoint.dm > /mob/living/ShiftMiddleClickOn() > CHILD PROC + ./code/_onclick/hud/radial.dm > /datum/radial_menu/proc/setup_menu() + ./code/_onclick/item_attack.dm > /obj/item/proc/attack_self() + ./code/game/objects/items/devices/radio/radio.dm > /obj/item/radio/talk_into() + ./code/game/objects/items/devices/radio/headset.dm > /obj/item/radio/headset/talk_into() + ./code/modules/mob/living/carbon/human/examine.dm > /mob/living/carbon/human/examine() + ./code/modules/mob/living/living.dm > /mob/living/proc/update_mobility() + ./code/modules/mob/living/living.dm > /mob/living/proc/MobBump() + ./code/modules/mob/mob_movement.dm > /mob/proc/toggle_move_intent() + +### Defines: + + ./code/_onclick/hud/radial.dm > /datum/radial_menu - var/icon_path + ./code/__DEFINES/~nova_defines/signals.dm - COMSIG_MOVABLE_RADIO_TALK_INTO, COMSIG_LIVING_UPDATED_RESTING + ./code/__DEFINES/~nova_defines/traits.dm - TRAIT_NORUNNING + +### Master file additions + +- N/A + +### Included files that are not contained in this module: + +- N/A + +### Credits: +Azarak - original code & porting diff --git a/modular_skyrat/modules/gunpoint/sound/targetoff.ogg b/modular_nova/modules/gunpoint/sound/targetoff.ogg similarity index 100% rename from modular_skyrat/modules/gunpoint/sound/targetoff.ogg rename to modular_nova/modules/gunpoint/sound/targetoff.ogg diff --git a/modular_skyrat/modules/gunpoint/sound/targeton.ogg b/modular_nova/modules/gunpoint/sound/targeton.ogg similarity index 100% rename from modular_skyrat/modules/gunpoint/sound/targeton.ogg rename to modular_nova/modules/gunpoint/sound/targeton.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_01.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_flesh_01.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_01.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_flesh_01.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_02.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_flesh_02.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_02.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_flesh_02.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_03.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_flesh_03.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_03.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_flesh_03.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_04.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_flesh_04.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_04.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_flesh_04.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_05.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_flesh_05.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_05.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_flesh_05.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_06.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_flesh_06.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_06.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_flesh_06.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_07.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_flesh_07.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_07.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_flesh_07.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_08.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_flesh_08.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_08.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_flesh_08.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_09.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_flesh_09.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_09.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_flesh_09.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_01.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_glass_01.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_01.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_glass_01.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_02.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_glass_02.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_02.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_glass_02.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_03.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_glass_03.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_03.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_glass_03.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_04.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_glass_04.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_04.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_glass_04.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_05.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_glass_05.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_05.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_glass_05.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_06.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_glass_06.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_06.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_glass_06.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_07.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_glass_07.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_07.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_glass_07.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_08.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_glass_08.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_08.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_glass_08.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_09.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_glass_09.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_09.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_glass_09.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_10.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_glass_10.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_10.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_glass_10.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_01.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_masonry_01.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_01.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_masonry_01.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_02.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_masonry_02.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_02.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_masonry_02.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_03.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_masonry_03.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_03.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_masonry_03.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_04.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_masonry_04.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_04.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_masonry_04.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_05.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_masonry_05.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_05.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_masonry_05.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_06.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_masonry_06.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_06.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_masonry_06.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_07.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_masonry_07.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_07.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_masonry_07.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_08.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_masonry_08.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_08.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_masonry_08.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_09.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_masonry_09.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_09.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_masonry_09.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_10.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_masonry_10.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_10.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_masonry_10.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_01.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_01.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_01.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_01.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_02.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_02.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_02.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_02.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_03.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_03.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_03.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_03.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_04.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_04.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_04.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_04.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_05.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_05.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_05.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_05.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_06.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_06.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_06.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_06.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_07.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_07.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_07.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_07.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_08.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_08.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_08.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_08.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_09.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_09.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_09.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_09.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_10.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_10.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_10.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_10.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_11.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_11.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_11.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_11.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_12.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_12.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_12.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_12.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_13.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_13.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_13.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_13.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_14.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_14.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_14.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_14.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_15.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_15.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_15.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_15.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_16.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_16.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_16.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_16.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_17.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_17.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_17.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_17.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_01.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_snow_01.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_01.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_snow_01.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_02.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_snow_02.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_02.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_snow_02.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_03.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_snow_03.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_03.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_snow_03.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_04.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_snow_04.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_04.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_snow_04.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_05.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_snow_05.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_05.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_snow_05.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_06.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_snow_06.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_06.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_snow_06.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_07.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_snow_07.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_07.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_snow_07.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_08.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_snow_08.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_08.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_snow_08.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_09.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_snow_09.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_09.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_snow_09.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_10.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_snow_10.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_10.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_snow_10.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_01.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_wood_01.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_01.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_wood_01.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_02.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_wood_02.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_02.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_wood_02.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_03.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_wood_03.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_03.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_wood_03.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_04.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_wood_04.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_04.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_wood_04.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_05.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_wood_05.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_05.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_wood_05.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_06.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_wood_06.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_06.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_wood_06.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_07.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_wood_07.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_07.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_wood_07.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_08.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_wood_08.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_08.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_wood_08.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_09.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_wood_09.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_09.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_wood_09.ogg diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_10.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_wood_10.ogg similarity index 100% rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_10.ogg rename to modular_nova/modules/gunsgalore/sound/impact/impact_wood_10.ogg diff --git a/modular_skyrat/modules/hairbrush/code/hairbrush.dm b/modular_nova/modules/hairbrush/code/hairbrush.dm similarity index 92% rename from modular_skyrat/modules/hairbrush/code/hairbrush.dm rename to modular_nova/modules/hairbrush/code/hairbrush.dm index 5dae1a37d6e5f7..d320fbbf5b94b0 100644 --- a/modular_skyrat/modules/hairbrush/code/hairbrush.dm +++ b/modular_nova/modules/hairbrush/code/hairbrush.dm @@ -3,11 +3,11 @@ /obj/item/hairbrush name = "hairbrush" desc = "A small, circular brush with an ergonomic grip for efficient brush application." - icon = 'modular_skyrat/modules/hairbrush/icons/hairbrush.dmi' + icon = 'modular_nova/modules/hairbrush/icons/hairbrush.dmi' icon_state = "brush" inhand_icon_state = "inhand" - lefthand_file = 'modular_skyrat/modules/hairbrush/icons/inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/hairbrush/icons/inhand_right.dmi' + lefthand_file = 'modular_nova/modules/hairbrush/icons/inhand_left.dmi' + righthand_file = 'modular_nova/modules/hairbrush/icons/inhand_right.dmi' w_class = WEIGHT_CLASS_TINY var/brush_speed = 3 SECONDS diff --git a/modular_skyrat/modules/hairbrush/code/mood_events.dm b/modular_nova/modules/hairbrush/code/mood_events.dm similarity index 100% rename from modular_skyrat/modules/hairbrush/code/mood_events.dm rename to modular_nova/modules/hairbrush/code/mood_events.dm diff --git a/modular_skyrat/modules/hairbrush/icons/hairbrush.dmi b/modular_nova/modules/hairbrush/icons/hairbrush.dmi similarity index 100% rename from modular_skyrat/modules/hairbrush/icons/hairbrush.dmi rename to modular_nova/modules/hairbrush/icons/hairbrush.dmi diff --git a/modular_skyrat/modules/hairbrush/icons/inhand_left.dmi b/modular_nova/modules/hairbrush/icons/inhand_left.dmi similarity index 100% rename from modular_skyrat/modules/hairbrush/icons/inhand_left.dmi rename to modular_nova/modules/hairbrush/icons/inhand_left.dmi diff --git a/modular_skyrat/modules/hairbrush/icons/inhand_right.dmi b/modular_nova/modules/hairbrush/icons/inhand_right.dmi similarity index 100% rename from modular_skyrat/modules/hairbrush/icons/inhand_right.dmi rename to modular_nova/modules/hairbrush/icons/inhand_right.dmi diff --git a/modular_skyrat/modules/hev_suit/code/hev_suit.dm b/modular_nova/modules/hev_suit/code/hev_suit.dm similarity index 78% rename from modular_skyrat/modules/hev_suit/code/hev_suit.dm rename to modular_nova/modules/hev_suit/code/hev_suit.dm index fd8e5462a6dd90..71ff632a984cf8 100644 --- a/modular_skyrat/modules/hev_suit/code/hev_suit.dm +++ b/modular_nova/modules/hev_suit/code/hev_suit.dm @@ -32,8 +32,8 @@ /obj/item/clothing/head/helmet/space/hev_suit name = "hazardous environment suit helmet" desc = "The Mark IV HEV suit helmet." - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/helmet.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/helmet.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/head/helmet.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/helmet.dmi' icon_state = "hev" armor_type = /datum/armor/space_hev_suit obj_flags = NO_MAT_REDEMPTION @@ -72,9 +72,9 @@ /obj/item/clothing/suit/space/hev_suit name = "hazardous environment suit" desc = "The Mark IV HEV suit protects the user from a number of hazardous environments and has in build ballistic protection." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/spacesuit.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/spacesuit.dmi' - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits/spacesuit.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/spacesuit.dmi' + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi' icon_state = "hev" inhand_icon_state = "syndicate-orange" armor_type = /datum/armor/space_hev_suit @@ -99,47 +99,46 @@ var/user_old_bruteloss var/user_old_fireloss var/user_old_toxloss - var/user_old_cloneloss var/user_old_oxyloss ///Lots of sound vars. - var/activation_song = 'modular_skyrat/modules/hev_suit/sound/hev/anomalous_materials.ogg' - - var/logon_sound = 'modular_skyrat/modules/hev_suit/sound/hev/01_hev_logon.ogg' - var/armor_sound = 'modular_skyrat/modules/hev_suit/sound/hev/02_powerarmor_on.ogg' - var/atmospherics_sound = 'modular_skyrat/modules/hev_suit/sound/hev/03_atmospherics_on.ogg' - var/vitalsigns_sound = 'modular_skyrat/modules/hev_suit/sound/hev/04_vitalsigns_on.ogg' - var/automedic_sound = 'modular_skyrat/modules/hev_suit/sound/hev/05_automedic_on.ogg' - var/weaponselect_sound = 'modular_skyrat/modules/hev_suit/sound/hev/06_weaponselect_on.ogg' - var/munitions_sound = 'modular_skyrat/modules/hev_suit/sound/hev/07_munitionview_on.ogg' - var/communications_sound = 'modular_skyrat/modules/hev_suit/sound/hev/08_communications_on.ogg' - var/safe_day_sound = 'modular_skyrat/modules/hev_suit/sound/hev/09_safe_day.ogg' - - var/batt_50_sound = 'modular_skyrat/modules/hev_suit/sound/hev/power_level_is_fifty.ogg' - var/batt_40_sound = 'modular_skyrat/modules/hev_suit/sound/hev/power_level_is_fourty.ogg' - var/batt_30_sound = 'modular_skyrat/modules/hev_suit/sound/hev/power_level_is_thirty.ogg' - var/batt_20_sound = 'modular_skyrat/modules/hev_suit/sound/hev/power_level_is_twenty.ogg' - var/batt_10_sound = 'modular_skyrat/modules/hev_suit/sound/hev/power_level_is_ten.ogg' - - var/near_death_sound = 'modular_skyrat/modules/hev_suit/sound/hev/near_death.ogg' - var/health_critical_sound = 'modular_skyrat/modules/hev_suit/sound/hev/health_critical.ogg' - var/health_dropping_sound = 'modular_skyrat/modules/hev_suit/sound/hev/health_dropping2.ogg' - - var/blood_loss_sound = 'modular_skyrat/modules/hev_suit/sound/hev/blood_loss.ogg' - var/blood_toxins_sound = 'modular_skyrat/modules/hev_suit/sound/hev/blood_toxins.ogg' - var/biohazard_sound = 'modular_skyrat/modules/hev_suit/sound/hev/biohazard_detected.ogg' - var/chemical_sound = 'modular_skyrat/modules/hev_suit/sound/hev/chemical_detected.ogg' - var/radiation_sound = 'modular_skyrat/modules/hev_suit/sound/hev/radiation_detected.ogg' - - var/minor_fracture_sound = 'modular_skyrat/modules/hev_suit/sound/hev/minor_fracture.ogg' - var/major_fracture_sound = 'modular_skyrat/modules/hev_suit/sound/hev/major_fracture.ogg' - var/minor_lacerations_sound = 'modular_skyrat/modules/hev_suit/sound/hev/minor_lacerations.ogg' - var/major_lacerations_sound = 'modular_skyrat/modules/hev_suit/sound/hev/major_lacerations.ogg' - - var/morphine_sound = 'modular_skyrat/modules/hev_suit/sound/hev/morphine_shot.ogg' - var/wound_sound = 'modular_skyrat/modules/hev_suit/sound/hev/wound_sterilized.ogg' - var/antitoxin_sound = 'modular_skyrat/modules/hev_suit/sound/hev/antitoxin_shot.ogg' - var/antidote_sound = 'modular_skyrat/modules/hev_suit/sound/hev/antidote_shot.ogg' + var/activation_song = 'modular_nova/modules/hev_suit/sound/hev/anomalous_materials.ogg' + + var/logon_sound = 'modular_nova/modules/hev_suit/sound/hev/01_hev_logon.ogg' + var/armor_sound = 'modular_nova/modules/hev_suit/sound/hev/02_powerarmor_on.ogg' + var/atmospherics_sound = 'modular_nova/modules/hev_suit/sound/hev/03_atmospherics_on.ogg' + var/vitalsigns_sound = 'modular_nova/modules/hev_suit/sound/hev/04_vitalsigns_on.ogg' + var/automedic_sound = 'modular_nova/modules/hev_suit/sound/hev/05_automedic_on.ogg' + var/weaponselect_sound = 'modular_nova/modules/hev_suit/sound/hev/06_weaponselect_on.ogg' + var/munitions_sound = 'modular_nova/modules/hev_suit/sound/hev/07_munitionview_on.ogg' + var/communications_sound = 'modular_nova/modules/hev_suit/sound/hev/08_communications_on.ogg' + var/safe_day_sound = 'modular_nova/modules/hev_suit/sound/hev/09_safe_day.ogg' + + var/batt_50_sound = 'modular_nova/modules/hev_suit/sound/hev/power_level_is_fifty.ogg' + var/batt_40_sound = 'modular_nova/modules/hev_suit/sound/hev/power_level_is_fourty.ogg' + var/batt_30_sound = 'modular_nova/modules/hev_suit/sound/hev/power_level_is_thirty.ogg' + var/batt_20_sound = 'modular_nova/modules/hev_suit/sound/hev/power_level_is_twenty.ogg' + var/batt_10_sound = 'modular_nova/modules/hev_suit/sound/hev/power_level_is_ten.ogg' + + var/near_death_sound = 'modular_nova/modules/hev_suit/sound/hev/near_death.ogg' + var/health_critical_sound = 'modular_nova/modules/hev_suit/sound/hev/health_critical.ogg' + var/health_dropping_sound = 'modular_nova/modules/hev_suit/sound/hev/health_dropping2.ogg' + + var/blood_loss_sound = 'modular_nova/modules/hev_suit/sound/hev/blood_loss.ogg' + var/blood_toxins_sound = 'modular_nova/modules/hev_suit/sound/hev/blood_toxins.ogg' + var/biohazard_sound = 'modular_nova/modules/hev_suit/sound/hev/biohazard_detected.ogg' + var/chemical_sound = 'modular_nova/modules/hev_suit/sound/hev/chemical_detected.ogg' + var/radiation_sound = 'modular_nova/modules/hev_suit/sound/hev/radiation_detected.ogg' + + var/minor_fracture_sound = 'modular_nova/modules/hev_suit/sound/hev/minor_fracture.ogg' + var/major_fracture_sound = 'modular_nova/modules/hev_suit/sound/hev/major_fracture.ogg' + var/minor_lacerations_sound = 'modular_nova/modules/hev_suit/sound/hev/minor_lacerations.ogg' + var/major_lacerations_sound = 'modular_nova/modules/hev_suit/sound/hev/major_lacerations.ogg' + + var/morphine_sound = 'modular_nova/modules/hev_suit/sound/hev/morphine_shot.ogg' + var/wound_sound = 'modular_nova/modules/hev_suit/sound/hev/wound_sterilized.ogg' + var/antitoxin_sound = 'modular_nova/modules/hev_suit/sound/hev/antitoxin_shot.ogg' + var/antidote_sound = 'modular_nova/modules/hev_suit/sound/hev/antidote_shot.ogg' var/radio_channel = RADIO_CHANNEL_COMMON @@ -215,16 +214,16 @@ /datum/action/item_action/hev_toggle name = "Toggle HEV Suit" - button_icon = 'modular_skyrat/modules/hev_suit/icons/toggles.dmi' + button_icon = 'modular_nova/modules/hev_suit/icons/toggles.dmi' background_icon_state = "bg_hl" - button_icon = 'modular_skyrat/modules/hev_suit/icons/toggles.dmi' + button_icon = 'modular_nova/modules/hev_suit/icons/toggles.dmi' button_icon_state = "system_off" /datum/action/item_action/hev_toggle_notifs name = "Toggle HEV Suit Notifications" - button_icon = 'modular_skyrat/modules/hev_suit/icons/toggles.dmi' + button_icon = 'modular_nova/modules/hev_suit/icons/toggles.dmi' background_icon_state = "bg_hl" - button_icon = 'modular_skyrat/modules/hev_suit/icons/toggles.dmi' + button_icon = 'modular_nova/modules/hev_suit/icons/toggles.dmi' button_icon_state = "sound_VOICE_AND_TEXT" /datum/action/item_action/hev_toggle_notifs/Trigger(trigger_flags) @@ -240,7 +239,7 @@ button_icon_state = "sound_[new_setting]" - playsound(my_suit, 'modular_skyrat/modules/hev_suit/sound/hev/blip.ogg', 50) + playsound(my_suit, 'modular_nova/modules/hev_suit/sound/hev/blip.ogg', 50) build_all_button_icons() @@ -258,7 +257,7 @@ button_icon_state = toggle ? "system_on" : "system_off" - playsound(my_suit, 'modular_skyrat/modules/hev_suit/sound/hev/blip.ogg', 50) + playsound(my_suit, 'modular_nova/modules/hev_suit/sound/hev/blip.ogg', 50) build_all_button_icons() @@ -417,7 +416,6 @@ user_old_bruteloss = current_user.getBruteLoss() user_old_fireloss = current_user.getFireLoss() user_old_toxloss = current_user.getToxLoss() - user_old_cloneloss = current_user.getCloneLoss() user_old_oxyloss = current_user.getOxyLoss() RegisterSignal(current_user, COMSIG_MOB_RUN_ARMOR, PROC_REF(process_hit)) playsound(src, armor_sound, 50) @@ -430,7 +428,6 @@ var/new_bruteloss = current_user.getBruteLoss() var/new_fireloss = current_user.getFireLoss() var/new_toxloss = current_user.getToxLoss() - var/new_cloneloss = current_user.getCloneLoss() var/new_oxyloss = current_user.getOxyLoss() var/use_power_this_hit = FALSE if(current_user.getBruteLoss() > (new_bruteloss + HEV_DAMAGE_POWER_USE_THRESHOLD)) @@ -439,12 +436,9 @@ use_power_this_hit = TRUE if(current_user.getToxLoss() > (new_toxloss + HEV_DAMAGE_POWER_USE_THRESHOLD)) use_power_this_hit = TRUE - if(current_user.getCloneLoss() > (new_cloneloss + HEV_DAMAGE_POWER_USE_THRESHOLD)) - use_power_this_hit = TRUE user_old_bruteloss = new_bruteloss user_old_fireloss = new_fireloss user_old_toxloss = new_toxloss - user_old_cloneloss = new_cloneloss user_old_oxyloss = new_oxyloss state_health() if(use_power_this_hit) @@ -506,7 +500,7 @@ /obj/item/clothing/suit/space/hev_suit/proc/stat_changed(datum/source, new_stat) SIGNAL_HANDLER if(new_stat == DEAD) - playsound(src, 'modular_skyrat/modules/hev_suit/sound/hev/flatline.ogg', 40) + playsound(src, 'modular_nova/modules/hev_suit/sound/hev/flatline.ogg', 40) internal_radio.talk_into(src, "WARNING! USER [uppertext(current_user.real_name)] VITALSIGNS HAVE FLATLINED, CURRENT POSITION: [loc.x], [loc.y], [loc.z]!", radio_channel) deactivate() @@ -562,7 +556,6 @@ var/new_bruteloss = current_user.getBruteLoss() var/new_fireloss = current_user.getFireLoss() var/new_toxloss = current_user.getToxLoss() - var/new_cloneloss = current_user.getCloneLoss() var/new_oxyloss = current_user.getOxyLoss() var/new_stamloss = current_user.getStaminaLoss() @@ -603,14 +596,6 @@ send_hev_sound(antitoxin_sound) return - if(new_cloneloss) - if(use_hev_power(HEV_POWERUSE_HEAL)) - current_user.adjustCloneLoss(-heal_amount) - healing_current_cooldown = world.time + health_static_cooldown - send_message("MEDICAL ATTENTION ADMINISTERED", HEV_COLOR_BLUE) - send_hev_sound(antidote_sound) - return - /obj/item/clothing/suit/space/hev_suit/proc/process_wound(carbon, wound, bodypart) SIGNAL_HANDLER @@ -717,9 +702,9 @@ /obj/item/clothing/head/helmet/space/hev_suit/pcv name = "powered combat helmet" desc = "A deprecated combat helmet developed during the early 21th century in Sol-3, with protections rated level III-A. Contains attachment points for AN/PVS night vision goggles." - icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecucloth.dmi' - worn_icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob.dmi' - worn_icon_digi = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob_muzzled.dmi' + icon = 'modular_nova/modules/awaymissions_nova/icons/hecucloth.dmi' + worn_icon = 'modular_nova/modules/awaymissions_nova/icons/hecumob.dmi' + worn_icon_digi = 'modular_nova/modules/awaymissions_nova/icons/hecumob_muzzled.dmi' icon_state = "hecu_helm" armor_type = /datum/armor/hev_suit_pcv flags_inv = HIDEHAIR @@ -780,9 +765,9 @@ /obj/item/clothing/suit/space/hev_suit/pcv name = "powered combat vest" desc = "An electrically charged piece of body armor, the power stiffens the suit's fibers to provide a layer of resilient armor in response to trauma received from kinetic force. It's fitted with a geiger counter, tactical radio, a heads up display and a combat cocktail injector that allows the user to function normally even after serious injury. The concentration of mass in the lower rear side from the onboard computer makes your ass feel heavy." - icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecucloth.dmi' - worn_icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob.dmi' - worn_icon_digi = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob_digi.dmi' + icon = 'modular_nova/modules/awaymissions_nova/icons/hecucloth.dmi' + worn_icon = 'modular_nova/modules/awaymissions_nova/icons/hecumob.dmi' + worn_icon_digi = 'modular_nova/modules/awaymissions_nova/icons/hecumob_digi.dmi' icon_state = "hecu_vest" armor_type = /datum/armor/hev_suit_pcv flags_inv = null @@ -814,40 +799,40 @@ activation_song = null // removal of song only standard suit will have the song - logon_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/01_pcv_logon.ogg' - armor_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/02_powerarmor_on.ogg' - atmospherics_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/03_atmospherics_on.ogg' - vitalsigns_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/04_vitalsigns_on.ogg' - automedic_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/05_automedic_on.ogg' - weaponselect_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/06_weaponselect_on.ogg' - munitions_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/07_munitionview_on.ogg' - communications_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/08_communications_on.ogg' - safe_day_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/09_safe_day.ogg' - - batt_50_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_fifty.ogg' - batt_40_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_fourty.ogg' - batt_30_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_thirty.ogg' - batt_20_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_twenty.ogg' - batt_10_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_ten.ogg' - - near_death_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/near_death.ogg' - health_critical_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/health_critical.ogg' - health_dropping_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/health_dropping2.ogg' - - blood_loss_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/blood_loss.ogg' - blood_toxins_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/blood_toxins.ogg' - biohazard_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/biohazard_detected.ogg' - chemical_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/chemical_detected.ogg' - - minor_fracture_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/minor_fracture.ogg' - major_fracture_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/major_fracture.ogg' - minor_lacerations_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/minor_lacerations.ogg' - major_lacerations_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/major_lacerations.ogg' - - morphine_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/morphine_shot.ogg' - wound_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/wound_sterilized.ogg' - antitoxin_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/antitoxin_shot.ogg' - antidote_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/antidote_shot.ogg' + logon_sound = 'modular_nova/modules/hev_suit/sound/pcv/01_pcv_logon.ogg' + armor_sound = 'modular_nova/modules/hev_suit/sound/pcv/02_powerarmor_on.ogg' + atmospherics_sound = 'modular_nova/modules/hev_suit/sound/pcv/03_atmospherics_on.ogg' + vitalsigns_sound = 'modular_nova/modules/hev_suit/sound/pcv/04_vitalsigns_on.ogg' + automedic_sound = 'modular_nova/modules/hev_suit/sound/pcv/05_automedic_on.ogg' + weaponselect_sound = 'modular_nova/modules/hev_suit/sound/pcv/06_weaponselect_on.ogg' + munitions_sound = 'modular_nova/modules/hev_suit/sound/pcv/07_munitionview_on.ogg' + communications_sound = 'modular_nova/modules/hev_suit/sound/pcv/08_communications_on.ogg' + safe_day_sound = 'modular_nova/modules/hev_suit/sound/pcv/09_safe_day.ogg' + + batt_50_sound = 'modular_nova/modules/hev_suit/sound/pcv/power_level_is_fifty.ogg' + batt_40_sound = 'modular_nova/modules/hev_suit/sound/pcv/power_level_is_fourty.ogg' + batt_30_sound = 'modular_nova/modules/hev_suit/sound/pcv/power_level_is_thirty.ogg' + batt_20_sound = 'modular_nova/modules/hev_suit/sound/pcv/power_level_is_twenty.ogg' + batt_10_sound = 'modular_nova/modules/hev_suit/sound/pcv/power_level_is_ten.ogg' + + near_death_sound = 'modular_nova/modules/hev_suit/sound/pcv/near_death.ogg' + health_critical_sound = 'modular_nova/modules/hev_suit/sound/pcv/health_critical.ogg' + health_dropping_sound = 'modular_nova/modules/hev_suit/sound/pcv/health_dropping2.ogg' + + blood_loss_sound = 'modular_nova/modules/hev_suit/sound/pcv/blood_loss.ogg' + blood_toxins_sound = 'modular_nova/modules/hev_suit/sound/pcv/blood_toxins.ogg' + biohazard_sound = 'modular_nova/modules/hev_suit/sound/pcv/biohazard_detected.ogg' + chemical_sound = 'modular_nova/modules/hev_suit/sound/pcv/chemical_detected.ogg' + + minor_fracture_sound = 'modular_nova/modules/hev_suit/sound/pcv/minor_fracture.ogg' + major_fracture_sound = 'modular_nova/modules/hev_suit/sound/pcv/major_fracture.ogg' + minor_lacerations_sound = 'modular_nova/modules/hev_suit/sound/pcv/minor_lacerations.ogg' + major_lacerations_sound = 'modular_nova/modules/hev_suit/sound/pcv/major_lacerations.ogg' + + morphine_sound = 'modular_nova/modules/hev_suit/sound/pcv/morphine_shot.ogg' + wound_sound = 'modular_nova/modules/hev_suit/sound/pcv/wound_sterilized.ogg' + antitoxin_sound = 'modular_nova/modules/hev_suit/sound/pcv/antitoxin_shot.ogg' + antidote_sound = 'modular_nova/modules/hev_suit/sound/pcv/antidote_shot.ogg' armor_unpowered = /datum/armor/hev_suit_pcv armor_powered = /datum/armor/hev_suit_pcv/powered diff --git a/modular_skyrat/modules/hev_suit/icons/toggles.dmi b/modular_nova/modules/hev_suit/icons/toggles.dmi similarity index 100% rename from modular_skyrat/modules/hev_suit/icons/toggles.dmi rename to modular_nova/modules/hev_suit/icons/toggles.dmi diff --git a/modular_skyrat/modules/hev_suit/readme.md b/modular_nova/modules/hev_suit/readme.md similarity index 100% rename from modular_skyrat/modules/hev_suit/readme.md rename to modular_nova/modules/hev_suit/readme.md diff --git a/modular_skyrat/modules/hev_suit/sound/hev/01_hev_logon.ogg b/modular_nova/modules/hev_suit/sound/hev/01_hev_logon.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/01_hev_logon.ogg rename to modular_nova/modules/hev_suit/sound/hev/01_hev_logon.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/02_powerarmor_on.ogg b/modular_nova/modules/hev_suit/sound/hev/02_powerarmor_on.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/02_powerarmor_on.ogg rename to modular_nova/modules/hev_suit/sound/hev/02_powerarmor_on.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/03_atmospherics_on.ogg b/modular_nova/modules/hev_suit/sound/hev/03_atmospherics_on.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/03_atmospherics_on.ogg rename to modular_nova/modules/hev_suit/sound/hev/03_atmospherics_on.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/04_vitalsigns_on.ogg b/modular_nova/modules/hev_suit/sound/hev/04_vitalsigns_on.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/04_vitalsigns_on.ogg rename to modular_nova/modules/hev_suit/sound/hev/04_vitalsigns_on.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/05_automedic_on.ogg b/modular_nova/modules/hev_suit/sound/hev/05_automedic_on.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/05_automedic_on.ogg rename to modular_nova/modules/hev_suit/sound/hev/05_automedic_on.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/06_weaponselect_on.ogg b/modular_nova/modules/hev_suit/sound/hev/06_weaponselect_on.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/06_weaponselect_on.ogg rename to modular_nova/modules/hev_suit/sound/hev/06_weaponselect_on.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/07_munitionview_on.ogg b/modular_nova/modules/hev_suit/sound/hev/07_munitionview_on.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/07_munitionview_on.ogg rename to modular_nova/modules/hev_suit/sound/hev/07_munitionview_on.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/08_communications_on.ogg b/modular_nova/modules/hev_suit/sound/hev/08_communications_on.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/08_communications_on.ogg rename to modular_nova/modules/hev_suit/sound/hev/08_communications_on.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/09_safe_day.ogg b/modular_nova/modules/hev_suit/sound/hev/09_safe_day.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/09_safe_day.ogg rename to modular_nova/modules/hev_suit/sound/hev/09_safe_day.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/_comma.ogg b/modular_nova/modules/hev_suit/sound/hev/_comma.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/_comma.ogg rename to modular_nova/modules/hev_suit/sound/hev/_comma.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/_period.ogg b/modular_nova/modules/hev_suit/sound/hev/_period.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/_period.ogg rename to modular_nova/modules/hev_suit/sound/hev/_period.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/acquired.ogg b/modular_nova/modules/hev_suit/sound/hev/acquired.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/acquired.ogg rename to modular_nova/modules/hev_suit/sound/hev/acquired.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/activated.ogg b/modular_nova/modules/hev_suit/sound/hev/activated.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/activated.ogg rename to modular_nova/modules/hev_suit/sound/hev/activated.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/ammo_depleted.ogg b/modular_nova/modules/hev_suit/sound/hev/ammo_depleted.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/ammo_depleted.ogg rename to modular_nova/modules/hev_suit/sound/hev/ammo_depleted.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/ammowarning.ogg b/modular_nova/modules/hev_suit/sound/hev/ammowarning.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/ammowarning.ogg rename to modular_nova/modules/hev_suit/sound/hev/ammowarning.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/anomalous_materials.ogg b/modular_nova/modules/hev_suit/sound/hev/anomalous_materials.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/anomalous_materials.ogg rename to modular_nova/modules/hev_suit/sound/hev/anomalous_materials.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/antidote_shot.ogg b/modular_nova/modules/hev_suit/sound/hev/antidote_shot.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/antidote_shot.ogg rename to modular_nova/modules/hev_suit/sound/hev/antidote_shot.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/antitoxin_shot.ogg b/modular_nova/modules/hev_suit/sound/hev/antitoxin_shot.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/antitoxin_shot.ogg rename to modular_nova/modules/hev_suit/sound/hev/antitoxin_shot.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/beep.ogg b/modular_nova/modules/hev_suit/sound/hev/beep.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/beep.ogg rename to modular_nova/modules/hev_suit/sound/hev/beep.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/bell.ogg b/modular_nova/modules/hev_suit/sound/hev/bell.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/bell.ogg rename to modular_nova/modules/hev_suit/sound/hev/bell.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/biohazard_detected.ogg b/modular_nova/modules/hev_suit/sound/hev/biohazard_detected.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/biohazard_detected.ogg rename to modular_nova/modules/hev_suit/sound/hev/biohazard_detected.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/blip.ogg b/modular_nova/modules/hev_suit/sound/hev/blip.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/blip.ogg rename to modular_nova/modules/hev_suit/sound/hev/blip.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/blood_loss.ogg b/modular_nova/modules/hev_suit/sound/hev/blood_loss.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/blood_loss.ogg rename to modular_nova/modules/hev_suit/sound/hev/blood_loss.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/blood_toxins.ogg b/modular_nova/modules/hev_suit/sound/hev/blood_toxins.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/blood_toxins.ogg rename to modular_nova/modules/hev_suit/sound/hev/blood_toxins.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/boop.ogg b/modular_nova/modules/hev_suit/sound/hev/boop.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/boop.ogg rename to modular_nova/modules/hev_suit/sound/hev/boop.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/chemical_detected.ogg b/modular_nova/modules/hev_suit/sound/hev/chemical_detected.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/chemical_detected.ogg rename to modular_nova/modules/hev_suit/sound/hev/chemical_detected.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/eighty.ogg b/modular_nova/modules/hev_suit/sound/hev/eighty.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/eighty.ogg rename to modular_nova/modules/hev_suit/sound/hev/eighty.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/fifteen.ogg b/modular_nova/modules/hev_suit/sound/hev/fifteen.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/fifteen.ogg rename to modular_nova/modules/hev_suit/sound/hev/fifteen.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/fifty.ogg b/modular_nova/modules/hev_suit/sound/hev/fifty.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/fifty.ogg rename to modular_nova/modules/hev_suit/sound/hev/fifty.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/five.ogg b/modular_nova/modules/hev_suit/sound/hev/five.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/five.ogg rename to modular_nova/modules/hev_suit/sound/hev/five.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/flatline.ogg b/modular_nova/modules/hev_suit/sound/hev/flatline.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/flatline.ogg rename to modular_nova/modules/hev_suit/sound/hev/flatline.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/fourty.ogg b/modular_nova/modules/hev_suit/sound/hev/fourty.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/fourty.ogg rename to modular_nova/modules/hev_suit/sound/hev/fourty.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/fuzz.ogg b/modular_nova/modules/hev_suit/sound/hev/fuzz.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/fuzz.ogg rename to modular_nova/modules/hev_suit/sound/hev/fuzz.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/health_critical.ogg b/modular_nova/modules/hev_suit/sound/hev/health_critical.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/health_critical.ogg rename to modular_nova/modules/hev_suit/sound/hev/health_critical.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/health_dropping2.ogg b/modular_nova/modules/hev_suit/sound/hev/health_dropping2.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/health_dropping2.ogg rename to modular_nova/modules/hev_suit/sound/hev/health_dropping2.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/hiss.ogg b/modular_nova/modules/hev_suit/sound/hev/hiss.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/hiss.ogg rename to modular_nova/modules/hev_suit/sound/hev/hiss.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/major_fracture.ogg b/modular_nova/modules/hev_suit/sound/hev/major_fracture.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/major_fracture.ogg rename to modular_nova/modules/hev_suit/sound/hev/major_fracture.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/major_lacerations.ogg b/modular_nova/modules/hev_suit/sound/hev/major_lacerations.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/major_lacerations.ogg rename to modular_nova/modules/hev_suit/sound/hev/major_lacerations.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/minor_fracture.ogg b/modular_nova/modules/hev_suit/sound/hev/minor_fracture.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/minor_fracture.ogg rename to modular_nova/modules/hev_suit/sound/hev/minor_fracture.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/minor_lacerations.ogg b/modular_nova/modules/hev_suit/sound/hev/minor_lacerations.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/minor_lacerations.ogg rename to modular_nova/modules/hev_suit/sound/hev/minor_lacerations.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/morphine_shot.ogg b/modular_nova/modules/hev_suit/sound/hev/morphine_shot.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/morphine_shot.ogg rename to modular_nova/modules/hev_suit/sound/hev/morphine_shot.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/near_death.ogg b/modular_nova/modules/hev_suit/sound/hev/near_death.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/near_death.ogg rename to modular_nova/modules/hev_suit/sound/hev/near_death.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/ninety.ogg b/modular_nova/modules/hev_suit/sound/hev/ninety.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/ninety.ogg rename to modular_nova/modules/hev_suit/sound/hev/ninety.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/onehundred.ogg b/modular_nova/modules/hev_suit/sound/hev/onehundred.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/onehundred.ogg rename to modular_nova/modules/hev_suit/sound/hev/onehundred.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/percent.ogg b/modular_nova/modules/hev_suit/sound/hev/percent.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/percent.ogg rename to modular_nova/modules/hev_suit/sound/hev/percent.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/power_level_is.ogg b/modular_nova/modules/hev_suit/sound/hev/power_level_is.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/power_level_is.ogg rename to modular_nova/modules/hev_suit/sound/hev/power_level_is.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/power_level_is_fifty.ogg b/modular_nova/modules/hev_suit/sound/hev/power_level_is_fifty.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/power_level_is_fifty.ogg rename to modular_nova/modules/hev_suit/sound/hev/power_level_is_fifty.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/power_level_is_fourty.ogg b/modular_nova/modules/hev_suit/sound/hev/power_level_is_fourty.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/power_level_is_fourty.ogg rename to modular_nova/modules/hev_suit/sound/hev/power_level_is_fourty.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/power_level_is_ten.ogg b/modular_nova/modules/hev_suit/sound/hev/power_level_is_ten.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/power_level_is_ten.ogg rename to modular_nova/modules/hev_suit/sound/hev/power_level_is_ten.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/power_level_is_thirty.ogg b/modular_nova/modules/hev_suit/sound/hev/power_level_is_thirty.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/power_level_is_thirty.ogg rename to modular_nova/modules/hev_suit/sound/hev/power_level_is_thirty.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/power_level_is_twenty.ogg b/modular_nova/modules/hev_suit/sound/hev/power_level_is_twenty.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/power_level_is_twenty.ogg rename to modular_nova/modules/hev_suit/sound/hev/power_level_is_twenty.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/power_restored.ogg b/modular_nova/modules/hev_suit/sound/hev/power_restored.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/power_restored.ogg rename to modular_nova/modules/hev_suit/sound/hev/power_restored.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/radiation_detected.ogg b/modular_nova/modules/hev_suit/sound/hev/radiation_detected.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/radiation_detected.ogg rename to modular_nova/modules/hev_suit/sound/hev/radiation_detected.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/seek_medic.ogg b/modular_nova/modules/hev_suit/sound/hev/seek_medic.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/seek_medic.ogg rename to modular_nova/modules/hev_suit/sound/hev/seek_medic.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/seventy.ogg b/modular_nova/modules/hev_suit/sound/hev/seventy.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/seventy.ogg rename to modular_nova/modules/hev_suit/sound/hev/seventy.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/sixty.ogg b/modular_nova/modules/hev_suit/sound/hev/sixty.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/sixty.ogg rename to modular_nova/modules/hev_suit/sound/hev/sixty.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/ten.ogg b/modular_nova/modules/hev_suit/sound/hev/ten.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/ten.ogg rename to modular_nova/modules/hev_suit/sound/hev/ten.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/thirty.ogg b/modular_nova/modules/hev_suit/sound/hev/thirty.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/thirty.ogg rename to modular_nova/modules/hev_suit/sound/hev/thirty.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/twenty.ogg b/modular_nova/modules/hev_suit/sound/hev/twenty.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/twenty.ogg rename to modular_nova/modules/hev_suit/sound/hev/twenty.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/warning.ogg b/modular_nova/modules/hev_suit/sound/hev/warning.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/warning.ogg rename to modular_nova/modules/hev_suit/sound/hev/warning.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/hev/wound_sterilized.ogg b/modular_nova/modules/hev_suit/sound/hev/wound_sterilized.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/hev/wound_sterilized.ogg rename to modular_nova/modules/hev_suit/sound/hev/wound_sterilized.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/01_pcv_logon.ogg b/modular_nova/modules/hev_suit/sound/pcv/01_pcv_logon.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/01_pcv_logon.ogg rename to modular_nova/modules/hev_suit/sound/pcv/01_pcv_logon.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/02_powerarmor_on.ogg b/modular_nova/modules/hev_suit/sound/pcv/02_powerarmor_on.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/02_powerarmor_on.ogg rename to modular_nova/modules/hev_suit/sound/pcv/02_powerarmor_on.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/03_atmospherics_on.ogg b/modular_nova/modules/hev_suit/sound/pcv/03_atmospherics_on.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/03_atmospherics_on.ogg rename to modular_nova/modules/hev_suit/sound/pcv/03_atmospherics_on.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/04_vitalsigns_on.ogg b/modular_nova/modules/hev_suit/sound/pcv/04_vitalsigns_on.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/04_vitalsigns_on.ogg rename to modular_nova/modules/hev_suit/sound/pcv/04_vitalsigns_on.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/05_automedic_on.ogg b/modular_nova/modules/hev_suit/sound/pcv/05_automedic_on.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/05_automedic_on.ogg rename to modular_nova/modules/hev_suit/sound/pcv/05_automedic_on.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/06_weaponselect_on.ogg b/modular_nova/modules/hev_suit/sound/pcv/06_weaponselect_on.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/06_weaponselect_on.ogg rename to modular_nova/modules/hev_suit/sound/pcv/06_weaponselect_on.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/07_munitionview_on.ogg b/modular_nova/modules/hev_suit/sound/pcv/07_munitionview_on.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/07_munitionview_on.ogg rename to modular_nova/modules/hev_suit/sound/pcv/07_munitionview_on.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/08_communications_on.ogg b/modular_nova/modules/hev_suit/sound/pcv/08_communications_on.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/08_communications_on.ogg rename to modular_nova/modules/hev_suit/sound/pcv/08_communications_on.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/09_safe_day.ogg b/modular_nova/modules/hev_suit/sound/pcv/09_safe_day.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/09_safe_day.ogg rename to modular_nova/modules/hev_suit/sound/pcv/09_safe_day.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/_comma.ogg b/modular_nova/modules/hev_suit/sound/pcv/_comma.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/_comma.ogg rename to modular_nova/modules/hev_suit/sound/pcv/_comma.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/_period.ogg b/modular_nova/modules/hev_suit/sound/pcv/_period.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/_period.ogg rename to modular_nova/modules/hev_suit/sound/pcv/_period.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/acquired.ogg b/modular_nova/modules/hev_suit/sound/pcv/acquired.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/acquired.ogg rename to modular_nova/modules/hev_suit/sound/pcv/acquired.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/activated.ogg b/modular_nova/modules/hev_suit/sound/pcv/activated.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/activated.ogg rename to modular_nova/modules/hev_suit/sound/pcv/activated.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/ammo_depleted.ogg b/modular_nova/modules/hev_suit/sound/pcv/ammo_depleted.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/ammo_depleted.ogg rename to modular_nova/modules/hev_suit/sound/pcv/ammo_depleted.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/antidote_shot.ogg b/modular_nova/modules/hev_suit/sound/pcv/antidote_shot.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/antidote_shot.ogg rename to modular_nova/modules/hev_suit/sound/pcv/antidote_shot.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/antitoxin_shot.ogg b/modular_nova/modules/hev_suit/sound/pcv/antitoxin_shot.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/antitoxin_shot.ogg rename to modular_nova/modules/hev_suit/sound/pcv/antitoxin_shot.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/beep.ogg b/modular_nova/modules/hev_suit/sound/pcv/beep.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/beep.ogg rename to modular_nova/modules/hev_suit/sound/pcv/beep.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/bell.ogg b/modular_nova/modules/hev_suit/sound/pcv/bell.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/bell.ogg rename to modular_nova/modules/hev_suit/sound/pcv/bell.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/biohazard_detected.ogg b/modular_nova/modules/hev_suit/sound/pcv/biohazard_detected.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/biohazard_detected.ogg rename to modular_nova/modules/hev_suit/sound/pcv/biohazard_detected.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/blip.ogg b/modular_nova/modules/hev_suit/sound/pcv/blip.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/blip.ogg rename to modular_nova/modules/hev_suit/sound/pcv/blip.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/blood_loss.ogg b/modular_nova/modules/hev_suit/sound/pcv/blood_loss.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/blood_loss.ogg rename to modular_nova/modules/hev_suit/sound/pcv/blood_loss.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/blood_plasma.ogg b/modular_nova/modules/hev_suit/sound/pcv/blood_plasma.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/blood_plasma.ogg rename to modular_nova/modules/hev_suit/sound/pcv/blood_plasma.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/blood_toxins.ogg b/modular_nova/modules/hev_suit/sound/pcv/blood_toxins.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/blood_toxins.ogg rename to modular_nova/modules/hev_suit/sound/pcv/blood_toxins.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/boop.ogg b/modular_nova/modules/hev_suit/sound/pcv/boop.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/boop.ogg rename to modular_nova/modules/hev_suit/sound/pcv/boop.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/chemical_detected.ogg b/modular_nova/modules/hev_suit/sound/pcv/chemical_detected.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/chemical_detected.ogg rename to modular_nova/modules/hev_suit/sound/pcv/chemical_detected.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/eighty.ogg b/modular_nova/modules/hev_suit/sound/pcv/eighty.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/eighty.ogg rename to modular_nova/modules/hev_suit/sound/pcv/eighty.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/fifteen.ogg b/modular_nova/modules/hev_suit/sound/pcv/fifteen.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/fifteen.ogg rename to modular_nova/modules/hev_suit/sound/pcv/fifteen.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/fifty.ogg b/modular_nova/modules/hev_suit/sound/pcv/fifty.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/fifty.ogg rename to modular_nova/modules/hev_suit/sound/pcv/fifty.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/five.ogg b/modular_nova/modules/hev_suit/sound/pcv/five.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/five.ogg rename to modular_nova/modules/hev_suit/sound/pcv/five.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/flatline.ogg b/modular_nova/modules/hev_suit/sound/pcv/flatline.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/flatline.ogg rename to modular_nova/modules/hev_suit/sound/pcv/flatline.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/fourty.ogg b/modular_nova/modules/hev_suit/sound/pcv/fourty.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/fourty.ogg rename to modular_nova/modules/hev_suit/sound/pcv/fourty.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/fuzz.ogg b/modular_nova/modules/hev_suit/sound/pcv/fuzz.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/fuzz.ogg rename to modular_nova/modules/hev_suit/sound/pcv/fuzz.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/health_critical.ogg b/modular_nova/modules/hev_suit/sound/pcv/health_critical.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/health_critical.ogg rename to modular_nova/modules/hev_suit/sound/pcv/health_critical.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/health_dropping2.ogg b/modular_nova/modules/hev_suit/sound/pcv/health_dropping2.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/health_dropping2.ogg rename to modular_nova/modules/hev_suit/sound/pcv/health_dropping2.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/hiss.ogg b/modular_nova/modules/hev_suit/sound/pcv/hiss.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/hiss.ogg rename to modular_nova/modules/hev_suit/sound/pcv/hiss.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/major_fracture.ogg b/modular_nova/modules/hev_suit/sound/pcv/major_fracture.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/major_fracture.ogg rename to modular_nova/modules/hev_suit/sound/pcv/major_fracture.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/major_lacerations.ogg b/modular_nova/modules/hev_suit/sound/pcv/major_lacerations.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/major_lacerations.ogg rename to modular_nova/modules/hev_suit/sound/pcv/major_lacerations.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/minor_fracture.ogg b/modular_nova/modules/hev_suit/sound/pcv/minor_fracture.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/minor_fracture.ogg rename to modular_nova/modules/hev_suit/sound/pcv/minor_fracture.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/minor_lacerations.ogg b/modular_nova/modules/hev_suit/sound/pcv/minor_lacerations.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/minor_lacerations.ogg rename to modular_nova/modules/hev_suit/sound/pcv/minor_lacerations.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/morphine_shot.ogg b/modular_nova/modules/hev_suit/sound/pcv/morphine_shot.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/morphine_shot.ogg rename to modular_nova/modules/hev_suit/sound/pcv/morphine_shot.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/near_death.ogg b/modular_nova/modules/hev_suit/sound/pcv/near_death.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/near_death.ogg rename to modular_nova/modules/hev_suit/sound/pcv/near_death.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/ninety.ogg b/modular_nova/modules/hev_suit/sound/pcv/ninety.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/ninety.ogg rename to modular_nova/modules/hev_suit/sound/pcv/ninety.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/onehundred.ogg b/modular_nova/modules/hev_suit/sound/pcv/onehundred.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/onehundred.ogg rename to modular_nova/modules/hev_suit/sound/pcv/onehundred.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/pain_block.ogg b/modular_nova/modules/hev_suit/sound/pcv/pain_block.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/pain_block.ogg rename to modular_nova/modules/hev_suit/sound/pcv/pain_block.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/percent.ogg b/modular_nova/modules/hev_suit/sound/pcv/percent.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/percent.ogg rename to modular_nova/modules/hev_suit/sound/pcv/percent.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/power_level_is.ogg b/modular_nova/modules/hev_suit/sound/pcv/power_level_is.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/power_level_is.ogg rename to modular_nova/modules/hev_suit/sound/pcv/power_level_is.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_fifty.ogg b/modular_nova/modules/hev_suit/sound/pcv/power_level_is_fifty.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_fifty.ogg rename to modular_nova/modules/hev_suit/sound/pcv/power_level_is_fifty.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_fourty.ogg b/modular_nova/modules/hev_suit/sound/pcv/power_level_is_fourty.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_fourty.ogg rename to modular_nova/modules/hev_suit/sound/pcv/power_level_is_fourty.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_ten.ogg b/modular_nova/modules/hev_suit/sound/pcv/power_level_is_ten.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_ten.ogg rename to modular_nova/modules/hev_suit/sound/pcv/power_level_is_ten.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_thirty.ogg b/modular_nova/modules/hev_suit/sound/pcv/power_level_is_thirty.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_thirty.ogg rename to modular_nova/modules/hev_suit/sound/pcv/power_level_is_thirty.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_twenty.ogg b/modular_nova/modules/hev_suit/sound/pcv/power_level_is_twenty.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_twenty.ogg rename to modular_nova/modules/hev_suit/sound/pcv/power_level_is_twenty.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/power_restored.ogg b/modular_nova/modules/hev_suit/sound/pcv/power_restored.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/power_restored.ogg rename to modular_nova/modules/hev_suit/sound/pcv/power_restored.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/radiation_detected.ogg b/modular_nova/modules/hev_suit/sound/pcv/radiation_detected.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/radiation_detected.ogg rename to modular_nova/modules/hev_suit/sound/pcv/radiation_detected.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/seek_medic.ogg b/modular_nova/modules/hev_suit/sound/pcv/seek_medic.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/seek_medic.ogg rename to modular_nova/modules/hev_suit/sound/pcv/seek_medic.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/seventy.ogg b/modular_nova/modules/hev_suit/sound/pcv/seventy.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/seventy.ogg rename to modular_nova/modules/hev_suit/sound/pcv/seventy.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/sixty.ogg b/modular_nova/modules/hev_suit/sound/pcv/sixty.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/sixty.ogg rename to modular_nova/modules/hev_suit/sound/pcv/sixty.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/ten.ogg b/modular_nova/modules/hev_suit/sound/pcv/ten.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/ten.ogg rename to modular_nova/modules/hev_suit/sound/pcv/ten.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/thirty.ogg b/modular_nova/modules/hev_suit/sound/pcv/thirty.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/thirty.ogg rename to modular_nova/modules/hev_suit/sound/pcv/thirty.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/torniquette_applied.ogg b/modular_nova/modules/hev_suit/sound/pcv/torniquette_applied.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/torniquette_applied.ogg rename to modular_nova/modules/hev_suit/sound/pcv/torniquette_applied.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/twenty.ogg b/modular_nova/modules/hev_suit/sound/pcv/twenty.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/twenty.ogg rename to modular_nova/modules/hev_suit/sound/pcv/twenty.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/warning.ogg b/modular_nova/modules/hev_suit/sound/pcv/warning.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/warning.ogg rename to modular_nova/modules/hev_suit/sound/pcv/warning.ogg diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/wound_sterilized.ogg b/modular_nova/modules/hev_suit/sound/pcv/wound_sterilized.ogg similarity index 100% rename from modular_skyrat/modules/hev_suit/sound/pcv/wound_sterilized.ogg rename to modular_nova/modules/hev_suit/sound/pcv/wound_sterilized.ogg diff --git a/modular_nova/modules/holdingfashion_port/code/backpack.dm b/modular_nova/modules/holdingfashion_port/code/backpack.dm new file mode 100644 index 00000000000000..6813db004dd675 --- /dev/null +++ b/modular_nova/modules/holdingfashion_port/code/backpack.dm @@ -0,0 +1,33 @@ +/obj/item/satchel_of_holding_inert + name = "inert satchel of holding" + desc = "What is currently a just an unwieldly block of metal with a slot ready to accept a bluespace anomaly core." + icon = 'modular_nova/modules/holdingfashion_port/icons/storage.dmi' + icon_state = "inertsatchel" + w_class = WEIGHT_CLASS_BULKY + resistance_flags = FIRE_PROOF + item_flags = NO_MAT_REDEMPTION + +/obj/item/storage/backpack/holding/satchel + name = "satchel of holding" + desc = "A satchel that opens into a localized pocket of bluespace." + icon = 'modular_nova/modules/holdingfashion_port/icons/storage.dmi' + icon_state = "holdingsatchel" + worn_icon = 'modular_nova/modules/holdingfashion_port/icons/back.dmi' + worn_icon_state = "holdingsatchel" + +/obj/item/duffel_of_holding_inert + name = "inert duffel bag of holding" + desc = "What is currently a just an unwieldly block of metal with a slot ready to accept a bluespace anomaly core." + icon = 'modular_nova/modules/holdingfashion_port/icons/storage.dmi' + icon_state = "inertduffel" + w_class = WEIGHT_CLASS_BULKY + resistance_flags = FIRE_PROOF + item_flags = NO_MAT_REDEMPTION + +/obj/item/storage/backpack/holding/duffel + name = "duffel bag of holding" + desc = "A duffel bag that opens into a localized pocket of bluespace." + icon = 'modular_nova/modules/holdingfashion_port/icons/storage.dmi' + icon_state = "holdingduffel" + worn_icon = 'modular_nova/modules/holdingfashion_port/icons/back.dmi' + worn_icon_state = "holdingduffel" diff --git a/modular_nova/modules/holdingfashion_port/code/bluespace_design.dm b/modular_nova/modules/holdingfashion_port/code/bluespace_design.dm new file mode 100644 index 00000000000000..79856dcc67eb36 --- /dev/null +++ b/modular_nova/modules/holdingfashion_port/code/bluespace_design.dm @@ -0,0 +1,33 @@ +/datum/design/satchel_holding + name = "Inert Satchel of Holding" + desc = "A block of metal ready to be transformed into a satchel of holding with a bluespace anomaly core." + id = "satchel_holding" + build_type = PROTOLATHE + materials = list( + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/diamond = SHEET_MATERIAL_AMOUNT, + /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/bluespace = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/satchel_of_holding_inert + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_BLUESPACE, + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/duffel_holding + name = "Inert Duffel Bag of Holding" + desc = "A block of metal ready to be transformed into a duffel bag of holding with a bluespace anomaly core." + id = "duffel_holding" + build_type = PROTOLATHE + materials = list( + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/diamond = SHEET_MATERIAL_AMOUNT, + /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/bluespace = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/duffel_of_holding_inert + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_BLUESPACE, + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE diff --git a/modular_skyrat/modules/holdingfashion_port/code/bluespace_node.dm b/modular_nova/modules/holdingfashion_port/code/bluespace_node.dm similarity index 100% rename from modular_skyrat/modules/holdingfashion_port/code/bluespace_node.dm rename to modular_nova/modules/holdingfashion_port/code/bluespace_node.dm diff --git a/modular_skyrat/modules/holdingfashion_port/code/recipes.dm b/modular_nova/modules/holdingfashion_port/code/recipes.dm similarity index 100% rename from modular_skyrat/modules/holdingfashion_port/code/recipes.dm rename to modular_nova/modules/holdingfashion_port/code/recipes.dm diff --git a/modular_skyrat/modules/holdingfashion_port/icons/back.dmi b/modular_nova/modules/holdingfashion_port/icons/back.dmi similarity index 100% rename from modular_skyrat/modules/holdingfashion_port/icons/back.dmi rename to modular_nova/modules/holdingfashion_port/icons/back.dmi diff --git a/modular_skyrat/modules/holdingfashion_port/icons/storage.dmi b/modular_nova/modules/holdingfashion_port/icons/storage.dmi similarity index 100% rename from modular_skyrat/modules/holdingfashion_port/icons/storage.dmi rename to modular_nova/modules/holdingfashion_port/icons/storage.dmi diff --git a/modular_skyrat/modules/holdingfashion_port/readme.md b/modular_nova/modules/holdingfashion_port/readme.md similarity index 100% rename from modular_skyrat/modules/holdingfashion_port/readme.md rename to modular_nova/modules/holdingfashion_port/readme.md diff --git a/modular_nova/modules/holidays/flora.dm b/modular_nova/modules/holidays/flora.dm new file mode 100644 index 00000000000000..dd0fad808209e8 --- /dev/null +++ b/modular_nova/modules/holidays/flora.dm @@ -0,0 +1,11 @@ +/obj/structure/flora/tree/pine/xmas/presents/safe + icon_state = "pinepresents" + desc = "A wondrous decorated Christmas tree. It has presents!" + gift_type = /obj/item/gift //only give safe gifts from the tree + unlimited = FALSE + +/obj/structure/flora/tree/pine/xmas/presents/safe/unlimited + icon_state = "pinepresents" + desc = "A wondrous decorated Christmas tree. It has presents!" + gift_type = /obj/item/gift //only give safe gifts from the tree + unlimited = TRUE diff --git a/modular_nova/modules/hop_drip/code/head_of_personnel.dm b/modular_nova/modules/hop_drip/code/head_of_personnel.dm new file mode 100644 index 00000000000000..6302b42800d9cc --- /dev/null +++ b/modular_nova/modules/hop_drip/code/head_of_personnel.dm @@ -0,0 +1,38 @@ +/obj/item/storage/backpack/head_of_personnel + name = "head of personnel backpack" + desc = "A exclusive backpack issued to Nanotrasen's finest second." + icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi' + lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' + righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' + icon_state = "backpack_hop" + inhand_icon_state = "backpack_hop" + +/obj/item/storage/backpack/satchel/head_of_personnel + name = "head of personnel satchel" + desc = "A exclusive satchel issued to Nanotrasen's finest second." + icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi' + lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' + righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' + icon_state = "satchel_hop" + inhand_icon_state = "satchel_hop" + +/obj/item/storage/backpack/duffelbag/head_of_personnel + name = "head of personnel duffelbag" + desc = "A robust duffelbag issued to Nanotrasen's finest second." + icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi' + lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' + righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' + icon_state = "duffel_hop" + inhand_icon_state = "duffel_hop" + +/obj/item/radio/headset/heads/hop/alt + name = "\proper the head of personnel's bowman headset" + desc = "The headset of the second. Protects ears from flashbangs." + icon_state = "com_headset_alt" + +/obj/item/radio/headset/heads/hop/alt/Initialize(mapload) + . = ..() + AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS)) diff --git a/modular_skyrat/modules/horrorform/code/horror_form.dm b/modular_nova/modules/horrorform/code/horror_form.dm similarity index 94% rename from modular_skyrat/modules/horrorform/code/horror_form.dm rename to modular_nova/modules/horrorform/code/horror_form.dm index 9e6ea71ad7335f..70957ec583a9e3 100644 --- a/modular_skyrat/modules/horrorform/code/horror_form.dm +++ b/modular_nova/modules/horrorform/code/horror_form.dm @@ -2,8 +2,8 @@ name = "Horror Form" desc = "We tear apart our human disguise, revealing our true form." helptext = "We will become an unstoppable force of destruction. If we die in this form, we will reach equilibrium and explode into a shower of gore! We require the absorption of at least one other human, and 15 extracts of DNA." - button_icon = 'modular_skyrat/modules/horrorform/icons/actions_changeling.dmi' - button_icon = 'modular_skyrat/modules/horrorform/icons/actions_changeling.dmi' + button_icon = 'modular_nova/modules/horrorform/icons/actions_changeling.dmi' + button_icon = 'modular_nova/modules/horrorform/icons/actions_changeling.dmi' button_icon_state = "horror_form" background_icon_state = "bg_changeling" chemical_cost = 50 diff --git a/modular_skyrat/modules/horrorform/code/true_changeling.dm b/modular_nova/modules/horrorform/code/true_changeling.dm similarity index 92% rename from modular_skyrat/modules/horrorform/code/true_changeling.dm rename to modular_nova/modules/horrorform/code/true_changeling.dm index 4765f9f9df6ebb..2c67940e5a7eab 100644 --- a/modular_skyrat/modules/horrorform/code/true_changeling.dm +++ b/modular_nova/modules/horrorform/code/true_changeling.dm @@ -10,7 +10,7 @@ desc = "Holy shit, what the fuck is that thing?!" speak_emote = list("says with one of its faces") emote_hear = list("says with one of its faces") - icon = 'modular_skyrat/modules/horrorform/icons/animal.dmi' + icon = 'modular_nova/modules/horrorform/icons/animal.dmi' icon_state = "horror" icon_living = "horror" icon_dead = "horror_dead" @@ -35,7 +35,6 @@ butcher_results = list(/obj/item/food/meat/slab/human = 15) //It's a pretty big dude. Actually killing one is a feat. gold_core_spawnable = FALSE //Should stay exclusive to changelings tbh, otherwise makes it much less significant to sight one var/datum/action/innate/turn_to_human - var/datum/action/innate/devour var/transformed_time = 0 var/playstyle_string = span_infoplain("<b><font size=3 color='red'>We have entered our true form!</font> We are unbelievably powerful, and regenerate life at a steady rate. However, most of \ our abilities are useless in this form, and we must utilise the abilities that we have gained as a result of our transformation. Currently, we are incapable of returning to a human. \ @@ -51,10 +50,9 @@ /mob/living/simple_animal/hostile/true_changeling/Initialize(mapload) . = ..() to_chat(src, playstyle_string) - turn_to_human = new /datum/action/innate/turn_to_human - devour = new /datum/action/innate/devour + turn_to_human = new(src) turn_to_human.Grant(src) - devour.Grant(src) + GRANT_ACTION(/datum/action/innate/devour) ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) /mob/living/simple_animal/hostile/true_changeling/Life() @@ -87,10 +85,10 @@ if(M_turf && M_turf.z == src.z) var/dist = get_dist(M_turf, src) if(dist <= 7) //source of sound very close - M.playsound_local(src, 'modular_skyrat/modules/horrorform/sound/horror_scream.ogg', 80, 1, frequency) + M.playsound_local(src, 'modular_nova/modules/horrorform/sound/horror_scream.ogg', 80, 1, frequency) else var/vol = clamp(100-((dist-7)*5), 10, 100) //Every tile decreases sound volume by 5 - M.playsound_local(src, 'modular_skyrat/modules/horrorform/sound/horror_scream_reverb.ogg', vol, 1, frequency) + M.playsound_local(src, 'modular_nova/modules/horrorform/sound/horror_scream_reverb.ogg', vol, 1, frequency) if(M.stat == DEAD && (M.client.prefs.chat_toggles & CHAT_GHOSTSIGHT) && !(M in viewers(get_turf(src),null))) M.show_message(message) audible_message(message) @@ -138,7 +136,7 @@ /obj/projectile/bullet/pellet/bone_fragment name = "bone fragment" - icon = 'modular_skyrat/modules/horrorform/icons/bone_fragment.dmi' + icon = 'modular_nova/modules/horrorform/icons/bone_fragment.dmi' icon_state = "bone_fragment" damage = 8 ricochets_max = 3 @@ -159,7 +157,7 @@ /obj/item/grenade/stingbang/bonebang name = "bonebang" - icon = 'modular_skyrat/modules/horrorform/icons/bone_fragment.dmi' + icon = 'modular_nova/modules/horrorform/icons/bone_fragment.dmi' icon_state = "grenade_bone" shrapnel_type = /obj/projectile/bullet/pellet/bone_fragment shrapnel_radius = 8 @@ -171,8 +169,8 @@ /datum/action/innate/turn_to_human name = "Re-Form Human Shell" desc = "We turn back into a human. This takes considerable effort and will stun us for some time afterwards." - button_icon = 'modular_skyrat/modules/horrorform/icons/actions_changeling.dmi' - button_icon = 'modular_skyrat/modules/horrorform/icons/actions_changeling.dmi' + button_icon = 'modular_nova/modules/horrorform/icons/actions_changeling.dmi' + button_icon = 'modular_nova/modules/horrorform/icons/actions_changeling.dmi' background_icon_state = "bg_changeling" button_icon_state = "change_to_human" @@ -200,7 +198,7 @@ /datum/action/innate/devour name = "Devour" desc = "We tear into the innards of a human. After some time, they will be significantly damaged and our health partially restored." - button_icon = 'modular_skyrat/modules/horrorform/icons/actions_changeling.dmi' + button_icon = 'modular_nova/modules/horrorform/icons/actions_changeling.dmi' background_icon_state = "bg_changeling" button_icon_state = "devour" @@ -249,7 +247,7 @@ guts.dismember() dismembered = TRUE playsound(lunch, 'sound/effects/splat.ogg', 50, 1) - playsound(lunch, 'modular_skyrat/modules/horrorform/sound/tear.ogg', 50, 1) + playsound(lunch, 'modular_nova/modules/horrorform/sound/tear.ogg', 50, 1) lunch.emote("scream") if(lunch.nutrition >= NUTRITION_LEVEL_FAT) horrorform.adjustBruteLoss(-100) //Tasty leetle peegy diff --git a/modular_skyrat/modules/horrorform/icons/actions_changeling.dmi b/modular_nova/modules/horrorform/icons/actions_changeling.dmi similarity index 100% rename from modular_skyrat/modules/horrorform/icons/actions_changeling.dmi rename to modular_nova/modules/horrorform/icons/actions_changeling.dmi diff --git a/modular_skyrat/modules/horrorform/icons/animal.dmi b/modular_nova/modules/horrorform/icons/animal.dmi similarity index 100% rename from modular_skyrat/modules/horrorform/icons/animal.dmi rename to modular_nova/modules/horrorform/icons/animal.dmi diff --git a/modular_skyrat/modules/horrorform/icons/bone_fragment.dmi b/modular_nova/modules/horrorform/icons/bone_fragment.dmi similarity index 100% rename from modular_skyrat/modules/horrorform/icons/bone_fragment.dmi rename to modular_nova/modules/horrorform/icons/bone_fragment.dmi diff --git a/modular_nova/modules/horrorform/readme.md b/modular_nova/modules/horrorform/readme.md new file mode 100644 index 00000000000000..b693df6530d88e --- /dev/null +++ b/modular_nova/modules/horrorform/readme.md @@ -0,0 +1,30 @@ +https://github.com/Skyrat-SS13/Skyrat-tg/pull/241 + +## Title: Changeling Horror Form + +MODULE ID: HORROR_FORM + +### Description: + +Allows changelings to turn into the simple_mob horror_form which they are powerful but slow and loud. Can change back too. + +### TG Proc Changes: + +- N/A + +### Defines: + +- N/A + +### Master file additions + +- modular_nova\master_files\sound\misc\tear.ogg +- modular_nova\master_files\sound\effects\horror_scream_reverb.ogg +- modular_nova\master_files\sound\effects\horror_scream.ogg + +### Included files that are not contained in this module: + +- N/A + +### Credits: +Gandalf2k15 - porting & refactoring diff --git a/modular_skyrat/modules/horrorform/sound/horror_scream.ogg b/modular_nova/modules/horrorform/sound/horror_scream.ogg similarity index 100% rename from modular_skyrat/modules/horrorform/sound/horror_scream.ogg rename to modular_nova/modules/horrorform/sound/horror_scream.ogg diff --git a/modular_skyrat/modules/horrorform/sound/horror_scream_reverb.ogg b/modular_nova/modules/horrorform/sound/horror_scream_reverb.ogg similarity index 100% rename from modular_skyrat/modules/horrorform/sound/horror_scream_reverb.ogg rename to modular_nova/modules/horrorform/sound/horror_scream_reverb.ogg diff --git a/modular_skyrat/modules/horrorform/sound/tear.ogg b/modular_nova/modules/horrorform/sound/tear.ogg similarity index 100% rename from modular_skyrat/modules/horrorform/sound/tear.ogg rename to modular_nova/modules/horrorform/sound/tear.ogg diff --git a/modular_skyrat/modules/hotel_rooms/apartment.dmm b/modular_nova/modules/hotel_rooms/apartment.dmm similarity index 99% rename from modular_skyrat/modules/hotel_rooms/apartment.dmm rename to modular_nova/modules/hotel_rooms/apartment.dmm index 1f29586f2064f1..f5db0583a2c257 100644 --- a/modular_skyrat/modules/hotel_rooms/apartment.dmm +++ b/modular_nova/modules/hotel_rooms/apartment.dmm @@ -40,7 +40,7 @@ }, /obj/structure/showcase{ name = "doorphone"; - icon = 'modular_skyrat/modules/aesthetics/intercom/icons/intercom.dmi'; + icon = 'modular_nova/modules/aesthetics/intercom/icons/intercom.dmi'; icon_state = "intercom"; pixel_y = 24; density = 0 diff --git a/modular_nova/modules/huds/code/designs.dm b/modular_nova/modules/huds/code/designs.dm new file mode 100644 index 00000000000000..631e0859c02664 --- /dev/null +++ b/modular_nova/modules/huds/code/designs.dm @@ -0,0 +1,112 @@ +/datum/design/health_hud_prescription + name = "Prescription Health Scanner HUD" + desc = "A heads-up display that scans the humans in view and provides accurate data about their health status. This one has a prescription lens." + id = "health_hud_prescription" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/health/prescription + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/security_hud_prescription + name = "Prescription Security HUD" + desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status. This one has a prescription lens." + id = "security_hud_prescription" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/security/prescription + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY, + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + +/datum/design/diagnostic_hud_prescription + name = "Prescription Diagnostic HUD" + desc = "A HUD used to analyze and determine faults within robotic machinery. This one has a prescription lens." + id = "diagnostic_hud_prescription" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/diagnostic/prescription + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE, + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/science_hud_prescription + name = "Prescription Science HUD" + desc = "These glasses scan the contents of containers and projects their contents to the user in an easy to read format. This one has a prescription lens." + id = "science_hud_prescription" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/science/prescription + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE, + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/mesons_prescription + name = "Prescription Optical Meson Scanners" + desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition. Prescription lens has been added into this design." + id = "mesons_prescription" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/meson/prescription + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING, + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design/engine_goggles_prescription + name = "Prescription Engineering Scanner Goggles" + desc = "Goggles used by engineers. The Meson Scanner mode lets you see basic structural and terrain layouts through walls, regardless of lighting condition. The T-ray Scanner mode lets you see underfloor objects such as cables and pipes. Prescription lens has been added into this design." + id = "engine_goggles_prescription" + build_type = PROTOLATHE | AWAY_LATHE | COLONY_FABRICATOR + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plasma = SMALL_MATERIAL_AMOUNT, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/meson/engine/prescription + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING, + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design/tray_goggles_prescription + name = "Prescription Optical T-Ray Scanners" + desc = "Used by engineering staff to see underfloor objects such as cables and pipes. Prescription lens has been added into this design." + id = "tray_goggles_prescription" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = SMALL_MATERIAL_AMOUNT, + ) + build_path = /obj/item/clothing/glasses/meson/engine/tray/prescription + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING, + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING diff --git a/modular_skyrat/modules/huds/code/glasses/HUD_Glasses.dm b/modular_nova/modules/huds/code/glasses/HUD_Glasses.dm similarity index 86% rename from modular_skyrat/modules/huds/code/glasses/HUD_Glasses.dm rename to modular_nova/modules/huds/code/glasses/HUD_Glasses.dm index 1fc3e6214185bf..875cffe91ab055 100644 --- a/modular_skyrat/modules/huds/code/glasses/HUD_Glasses.dm +++ b/modular_nova/modules/huds/code/glasses/HUD_Glasses.dm @@ -1,33 +1,33 @@ /obj/item/clothing/glasses/hud/health/prescription name = "prescription health scanner HUD" desc = "A heads-up display that scans the humanoids in view and provides accurate data about their health status. This one has prescription lenses." - icon = 'modular_skyrat/modules/huds/icons/huds.dmi' + icon = 'modular_nova/modules/huds/icons/huds.dmi' icon_state = "glasses_healthhud" - worn_icon = 'modular_skyrat/modules/huds/icons/hudeyes.dmi' + worn_icon = 'modular_nova/modules/huds/icons/hudeyes.dmi' clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED) /obj/item/clothing/glasses/hud/diagnostic/prescription name = "prescription diagnostic HUD" desc = "A heads-up display capable of analyzing the integrity and status of robotics and exosuits. This one has prescription lenses." - icon = 'modular_skyrat/modules/huds/icons/huds.dmi' + icon = 'modular_nova/modules/huds/icons/huds.dmi' icon_state = "glasses_diagnostichud" - worn_icon = 'modular_skyrat/modules/huds/icons/hudeyes.dmi' + worn_icon = 'modular_nova/modules/huds/icons/hudeyes.dmi' clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED) /obj/item/clothing/glasses/hud/security/prescription name = "prescription security HUD" desc = "A heads-up display that scans the humanoids in view and provides accurate data about their ID status and security records. This one has prescription lenses." - icon = 'modular_skyrat/modules/huds/icons/huds.dmi' + icon = 'modular_nova/modules/huds/icons/huds.dmi' icon_state = "glasses_securityhud" - worn_icon = 'modular_skyrat/modules/huds/icons/hudeyes.dmi' + worn_icon = 'modular_nova/modules/huds/icons/hudeyes.dmi' clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED) /obj/item/clothing/glasses/hud/science/prescription name = "prescription science glasses" desc = "These glasses scan the contents of containers and projects their contents to the user in an easy to read format. This one has prescription lenses." - icon = 'modular_skyrat/modules/huds/icons/huds.dmi' + icon = 'modular_nova/modules/huds/icons/huds.dmi' icon_state = "glasses_sciencehud" - worn_icon = 'modular_skyrat/modules/huds/icons/hudeyes.dmi' + worn_icon = 'modular_nova/modules/huds/icons/hudeyes.dmi' flash_protect = FLASH_PROTECTION_NONE glass_colour_type = /datum/client_colour/glass_colour/purple resistance_flags = ACID_PROOF diff --git a/modular_skyrat/modules/huds/icons/hudeyes.dmi b/modular_nova/modules/huds/icons/hudeyes.dmi similarity index 100% rename from modular_skyrat/modules/huds/icons/hudeyes.dmi rename to modular_nova/modules/huds/icons/hudeyes.dmi diff --git a/modular_skyrat/modules/huds/icons/huds.dmi b/modular_nova/modules/huds/icons/huds.dmi similarity index 100% rename from modular_skyrat/modules/huds/icons/huds.dmi rename to modular_nova/modules/huds/icons/huds.dmi diff --git a/modular_skyrat/modules/huds/readme.md b/modular_nova/modules/huds/readme.md similarity index 100% rename from modular_skyrat/modules/huds/readme.md rename to modular_nova/modules/huds/readme.md diff --git a/modular_skyrat/modules/hurtsposals/code/pipe.dm b/modular_nova/modules/hurtsposals/code/pipe.dm similarity index 100% rename from modular_skyrat/modules/hurtsposals/code/pipe.dm rename to modular_nova/modules/hurtsposals/code/pipe.dm diff --git a/modular_nova/modules/hydra/code/neutral.dm b/modular_nova/modules/hydra/code/neutral.dm new file mode 100644 index 00000000000000..4c92eccc10d053 --- /dev/null +++ b/modular_nova/modules/hydra/code/neutral.dm @@ -0,0 +1,52 @@ +/datum/quirk/hydra + name = "Hydra Heads" + desc = "You are a tri-headed creature. To use, format name like (Rucks-Sucks-Ducks)" + value = 0 + mob_trait = TRAIT_HYDRA_HEADS + gain_text = span_notice("You hear two other voices inside of your head(s).") + lose_text = span_danger("All of your minds become singular.") + medical_record_text = "There are multiple heads and personalities affixed to one body." + icon = FA_ICON_HORSE_HEAD + // remember what the name was before activation + var/original_name + +/datum/quirk/hydra/add(client/client_source) + var/mob/living/carbon/human/hydra = quirk_holder + var/datum/action/innate/hydra/spell = new(hydra) + var/datum/action/innate/hydrareset/resetspell = new(hydra) + spell.Grant(hydra) + spell.owner = hydra + resetspell.Grant(hydra) + resetspell.owner = hydra + +/datum/action/innate/hydra + name = "Switch head" + desc = "Switch between each of the heads on your body." + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon_state = "art_summon" + +/datum/action/innate/hydrareset + name = "Reset Speech" + desc = "Go back to speaking as a whole." + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon_state = "art_summon" + +/datum/action/innate/hydrareset/Activate() + var/mob/living/carbon/human/hydra = owner + var/datum/quirk/hydra/hydra_quirk = hydra.get_quirk(/datum/quirk/hydra) + if(!hydra_quirk.original_name) // sets the archived 'real' name if not set. + hydra_quirk.original_name = hydra.real_name + hydra.real_name = hydra_quirk.original_name + hydra.visible_message(span_notice("[hydra.name] pushes all three heads forwards; they seem to be talking as a collective."), \ + span_notice("You are now talking as [hydra_quirk.original_name]!"), ignored_mobs=owner) + +/datum/action/innate/hydra/Activate() //Oops, all hydra! + var/mob/living/carbon/human/hydra = owner + var/datum/quirk/hydra/hydra_quirk = hydra.get_quirk(/datum/quirk/hydra) + if(!hydra_quirk.original_name) // sets the archived 'real' name if not set. + hydra_quirk.original_name = hydra.real_name + var/list/names = splittext(hydra_quirk.original_name,"-") + var/selhead = input("Who would you like to speak as?","Heads:") in names + hydra.real_name = selhead + hydra.visible_message(span_notice("[hydra.name] pulls the rest of their heads back; and puts [selhead]'s forward."), \ + span_notice("You are now talking as [selhead]!"), ignored_mobs=owner) diff --git a/modular_skyrat/modules/hydra/icons/other_markings.dmi b/modular_nova/modules/hydra/icons/other_markings.dmi similarity index 100% rename from modular_skyrat/modules/hydra/icons/other_markings.dmi rename to modular_nova/modules/hydra/icons/other_markings.dmi diff --git a/modular_skyrat/modules/hydra/icons/snouts.dmi b/modular_nova/modules/hydra/icons/snouts.dmi similarity index 100% rename from modular_skyrat/modules/hydra/icons/snouts.dmi rename to modular_nova/modules/hydra/icons/snouts.dmi diff --git a/modular_nova/modules/hydra/readme.md b/modular_nova/modules/hydra/readme.md new file mode 100644 index 00000000000000..458e72e2cf7589 --- /dev/null +++ b/modular_nova/modules/hydra/readme.md @@ -0,0 +1,29 @@ +https://github.com/Skyrat-SS13/Skyrat-tg/pull/4211 + +## Title: Mechanical Hydra Heads + +MODULE ID: hydra + +### Description: + +- Adds a baseline sprite file, sprite override files, and mechanics for supporting three voices per person + +### TG Proc Changes: + +- N/A + +### Defines: + +- TRAIT_HYDRA_HEADS + +### Master file additions + +- modular_nova/master_files/code/datums/traits/neutral.dm // Added Hydra Heads trait + +### Included files that are not contained in this module: + +- N/A + +### Credits: +- Yawet330 - Code +- C0rva1r - Sprites and base idea diff --git a/modular_nova/modules/hyposprays/code/autolathe_designs.dm b/modular_nova/modules/hyposprays/code/autolathe_designs.dm new file mode 100644 index 00000000000000..6933041c78675c --- /dev/null +++ b/modular_nova/modules/hyposprays/code/autolathe_designs.dm @@ -0,0 +1,27 @@ +/datum/design/hypoviallarge + name = "Large Hypovial" + id = "large_hypovial" + build_type = AUTOLATHE | PROTOLATHE + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/reagent_containers/cup/vial/large + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/pen + name = "Pen" + id = "pen" + build_type = AUTOLATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT, + /datum/material/glass = SMALL_MATERIAL_AMOUNT, + ) + build_path = /obj/item/pen + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MISC, + ) diff --git a/modular_skyrat/modules/hyposprays/code/hypospray_kits.dm b/modular_nova/modules/hyposprays/code/hypospray_kits.dm similarity index 98% rename from modular_skyrat/modules/hyposprays/code/hypospray_kits.dm rename to modular_nova/modules/hyposprays/code/hypospray_kits.dm index 25565fc7e57b8a..e1e21d7a8d9e61 100644 --- a/modular_skyrat/modules/hyposprays/code/hypospray_kits.dm +++ b/modular_nova/modules/hyposprays/code/hypospray_kits.dm @@ -1,7 +1,7 @@ /obj/item/storage/hypospraykit name = "hypospray kit" desc = "It's a kit containing a hypospray and specific treatment chemical-filled vials." - icon = 'modular_skyrat/modules/hyposprays/icons/hypokits.dmi' + icon = 'modular_nova/modules/hyposprays/icons/hypokits.dmi' icon_state = "firstaid-mini" worn_icon_state = "healthanalyzer" // Get a better sprite later inhand_icon_state = "medkit" diff --git a/modular_skyrat/modules/hyposprays/code/hyposprays_II.dm b/modular_nova/modules/hyposprays/code/hyposprays_II.dm similarity index 92% rename from modular_skyrat/modules/hyposprays/code/hyposprays_II.dm rename to modular_nova/modules/hyposprays/code/hyposprays_II.dm index 5cb82e0918a3be..a268e7e58b9218 100644 --- a/modular_skyrat/modules/hyposprays/code/hyposprays_II.dm +++ b/modular_nova/modules/hyposprays/code/hyposprays_II.dm @@ -19,7 +19,7 @@ /obj/item/hypospray/mkii name = "hypospray mk.II" icon_state = "hypo2" - icon = 'modular_skyrat/modules/hyposprays/icons/hyposprays.dmi' + icon = 'modular_nova/modules/hyposprays/icons/hyposprays.dmi' desc = "A new development from DeForest Medical, this hypospray takes 60-unit vials as the drug supply for easy swapping." w_class = WEIGHT_CLASS_TINY var/list/allowed_containers = list(/obj/item/reagent_containers/cup/vial/small) @@ -84,7 +84,7 @@ vial_spritetype += "[vial.type_suffix]" else vial_spritetype += "-s" - var/mutable_appearance/chem_loaded = mutable_appearance('modular_skyrat/modules/hyposprays/icons/hyposprays.dmi', vial_spritetype) + var/mutable_appearance/chem_loaded = mutable_appearance('modular_nova/modules/hyposprays/icons/hyposprays.dmi', vial_spritetype) chem_loaded.color = vial.chem_color . += chem_loaded @@ -218,7 +218,14 @@ if(injectee != user) injectee.visible_message(span_danger("[user] is trying to [fp_verb] [injectee] with [src]!"), \ span_userdanger("[user] is trying to [fp_verb] you with [src]!")) - if(!do_after(user, inject_wait, injectee, extra_checks = CALLBACK(injectee, /mob/living/proc/can_inject, user, user.zone_selected, penetrates))) + + var/selected_wait_time + if(target == user) + selected_wait_time = (mode == HYPO_INJECT) ? inject_self : spray_self + else + selected_wait_time = (mode == HYPO_INJECT) ? inject_wait : spray_wait + + if(!do_after(user, selected_wait_time, injectee, extra_checks = CALLBACK(injectee, /mob/living/proc/can_inject, user, user.zone_selected, penetrates))) return if(!vial.reagents.total_volume) return @@ -236,7 +243,7 @@ vial.reagents.trans_to(injectee, vial.amount_per_transfer_from_this, methods = PATCH) var/long_sound = vial.amount_per_transfer_from_this >= 15 - playsound(loc, long_sound ? 'modular_skyrat/modules/hyposprays/sound/hypospray_long.ogg' : pick('modular_skyrat/modules/hyposprays/sound/hypospray.ogg','modular_skyrat/modules/hyposprays/sound/hypospray2.ogg'), 50, 1, -1) + playsound(loc, long_sound ? 'modular_nova/modules/hyposprays/sound/hypospray_long.ogg' : pick('modular_nova/modules/hyposprays/sound/hypospray.ogg','modular_nova/modules/hyposprays/sound/hypospray2.ogg'), 50, 1, -1) to_chat(user, span_notice("You [fp_verb] [vial.amount_per_transfer_from_this] units of the solution. The hypospray's cartridge now contains [vial.reagents.total_volume] units.")) update_appearance() diff --git a/modular_skyrat/modules/hyposprays/code/hypovials.dm b/modular_nova/modules/hyposprays/code/hypovials.dm similarity index 92% rename from modular_skyrat/modules/hyposprays/code/hypovials.dm rename to modular_nova/modules/hyposprays/code/hypovials.dm index a4781bfea8fe7f..2c97e480325af9 100644 --- a/modular_skyrat/modules/hyposprays/code/hypovials.dm +++ b/modular_nova/modules/hyposprays/code/hypovials.dm @@ -1,7 +1,7 @@ /obj/item/reagent_containers/cup/vial name = "broken hypovial" desc = "You probably shouldn't be seeing this. Shout at a coder." - icon = 'modular_skyrat/modules/hyposprays/icons/vials.dmi' + icon = 'modular_nova/modules/hyposprays/icons/vials.dmi' icon_state = "hypovial" spillable = FALSE volume = 10 @@ -29,7 +29,7 @@ fill_overlay = 75 if(89 to 100) fill_overlay = 100 - var/mutable_appearance/filling = mutable_appearance('modular_skyrat/modules/hyposprays/icons/hypospray_fillings.dmi', "[fill_name][fill_overlay]") + var/mutable_appearance/filling = mutable_appearance('modular_nova/modules/hyposprays/icons/hypospray_fillings.dmi', "[fill_name][fill_overlay]") filling.color = mix_color_from_reagents(reagents.reagent_list) chem_color = filling.color diff --git a/modular_skyrat/modules/hyposprays/code/vending_hypospray.dm b/modular_nova/modules/hyposprays/code/vending_hypospray.dm similarity index 100% rename from modular_skyrat/modules/hyposprays/code/vending_hypospray.dm rename to modular_nova/modules/hyposprays/code/vending_hypospray.dm diff --git a/modular_skyrat/modules/hyposprays/icons/hypokits.dmi b/modular_nova/modules/hyposprays/icons/hypokits.dmi similarity index 100% rename from modular_skyrat/modules/hyposprays/icons/hypokits.dmi rename to modular_nova/modules/hyposprays/icons/hypokits.dmi diff --git a/modular_skyrat/modules/hyposprays/icons/hypospray_fillings.dmi b/modular_nova/modules/hyposprays/icons/hypospray_fillings.dmi similarity index 100% rename from modular_skyrat/modules/hyposprays/icons/hypospray_fillings.dmi rename to modular_nova/modules/hyposprays/icons/hypospray_fillings.dmi diff --git a/modular_skyrat/modules/hyposprays/icons/hyposprays.dmi b/modular_nova/modules/hyposprays/icons/hyposprays.dmi similarity index 100% rename from modular_skyrat/modules/hyposprays/icons/hyposprays.dmi rename to modular_nova/modules/hyposprays/icons/hyposprays.dmi diff --git a/modular_skyrat/modules/hyposprays/icons/vials.dmi b/modular_nova/modules/hyposprays/icons/vials.dmi similarity index 100% rename from modular_skyrat/modules/hyposprays/icons/vials.dmi rename to modular_nova/modules/hyposprays/icons/vials.dmi diff --git a/modular_skyrat/modules/hyposprays/readme.md b/modular_nova/modules/hyposprays/readme.md similarity index 100% rename from modular_skyrat/modules/hyposprays/readme.md rename to modular_nova/modules/hyposprays/readme.md diff --git a/modular_skyrat/modules/hyposprays/sound/hypospray.ogg b/modular_nova/modules/hyposprays/sound/hypospray.ogg similarity index 100% rename from modular_skyrat/modules/hyposprays/sound/hypospray.ogg rename to modular_nova/modules/hyposprays/sound/hypospray.ogg diff --git a/modular_skyrat/modules/hyposprays/sound/hypospray2.ogg b/modular_nova/modules/hyposprays/sound/hypospray2.ogg similarity index 100% rename from modular_skyrat/modules/hyposprays/sound/hypospray2.ogg rename to modular_nova/modules/hyposprays/sound/hypospray2.ogg diff --git a/modular_skyrat/modules/hyposprays/sound/hypospray_long.ogg b/modular_nova/modules/hyposprays/sound/hypospray_long.ogg similarity index 100% rename from modular_skyrat/modules/hyposprays/sound/hypospray_long.ogg rename to modular_nova/modules/hyposprays/sound/hypospray_long.ogg diff --git a/modular_nova/modules/icemoon_additions/code/icecat_recipes.dm b/modular_nova/modules/icemoon_additions/code/icecat_recipes.dm new file mode 100644 index 00000000000000..8467bb2f929f9d --- /dev/null +++ b/modular_nova/modules/icemoon_additions/code/icecat_recipes.dm @@ -0,0 +1,66 @@ +/obj/item/anointing_oil + name = "anointing bloodresin" + desc = "And so Helgar Knife-Arm spoke to the Hearth, and decreed that all of the Kin who gave name to beasts would do so with conquest and blood." + icon = 'icons/obj/medical/chemical.dmi' + icon_state = "potred" + throwforce = 0 + w_class = WEIGHT_CLASS_TINY + + var/being_used = FALSE + +/obj/item/anointing_oil/attack(mob/living/target_mob, mob/living/user, params) + if (!is_species(user, /datum/species/human/felinid/primitive)) + to_chat(user, span_warning("You have no idea what this disgusting concoction is used for.")) + return + if(being_used || !ismob(target_mob)) //originally this was going to check if the mob was friendly, but if an icecat wants to name some terror mob while it's tearing chunks out of them, why not? + return + if(target_mob.ckey) + to_chat(user, span_warning("You would never shame a creature so intelligent by not allowing it to choose its own name.")) + return + + if(try_anoint(target_mob, user)) + qdel(src) + else + being_used = FALSE + +/obj/item/anointing_oil/proc/try_anoint(mob/living/target_mob, mob/living/user) + being_used = TRUE + + var/new_name = sanitize_name(tgui_input_text(user, "Speak forth this beast's new name for all the Kin to hear.", "Input a name", target_mob.name, MAX_NAME_LEN)) + + if(!new_name || QDELETED(src) || QDELETED(target_mob) || new_name == target_mob.name || !target_mob.Adjacent(user)) + being_used = FALSE + return FALSE + + target_mob.visible_message(span_notice("[user] leans down and smears twinned streaks of glistening bloodresin upon [target_mob], then straightens up with ritual purpose...")) + user.say("Let the ice know you forevermore as +[new_name]+.") + + user.log_message("used [src] on [target_mob], renaming it to [new_name].", LOG_GAME) + + target_mob.name = new_name + + //give the stupid dog zoomies from getting named + if(istype(target_mob, /mob/living/basic/mining/wolf)) + target_mob.emote("awoo") + target_mob.emote("spin") + + return TRUE + +/obj/item/anointing_oil/examine(mob/user) + . = ..() + if(is_species(user, /datum/species/human/felinid/primitive)) + . += span_info("Using this on the local wildlife will allow you to give them a name.") + +/datum/crafting_recipe/anointing_oil + name = "Anointing Bloodresin" + category = CAT_MISC + + //recipe given to icecats as part of their spawner/team setting + always_available = FALSE + + reqs = list( + /datum/reagent/consumable/liquidgibs = 80, + /datum/reagent/blood = 20, + ) + + result = /obj/item/anointing_oil diff --git a/modular_nova/modules/icemoon_additions/code/pet_commands.dm b/modular_nova/modules/icemoon_additions/code/pet_commands.dm new file mode 100644 index 00000000000000..42d202d572ab4f --- /dev/null +++ b/modular_nova/modules/icemoon_additions/code/pet_commands.dm @@ -0,0 +1,29 @@ +/datum/component/obeys_commands/RegisterWithParent() + . = ..() + RegisterSignal(parent, COMSIG_ATOM_EXAMINE_MORE, PROC_REF(on_examine_more)) + +/datum/component/obeys_commands/UnregisterFromParent() + . = ..() + UnregisterSignal(parent, COMSIG_ATOM_EXAMINE_MORE) + +/datum/component/obeys_commands/on_examine(mob/living/source, mob/user, list/examine_list) + . = ..() + . += span_italics("You can alt+click [source.p_them()] when adjacent to see available commands.") + . += span_italics("You can also examine [source.p_them()] closely to check on [source.p_their()] wounds. Many companions can be healed with sutures or creams!") + +/datum/component/obeys_commands/proc/on_examine_more(mob/living/source, mob/user, list/examine_list) + SIGNAL_HANDLER + + if (IS_DEAD_OR_INCAP(source)) + return + if (!(user in source.ai_controller?.blackboard[BB_FRIENDS_LIST])) + return + + if (source.health < source.maxHealth*0.2) + examine_list += span_bolddanger("[source.p_They()] look[source.p_s()] severely injured.") + else if (source.health < source.maxHealth*0.5) + examine_list += span_danger("[source.p_They()] look[source.p_s()] moderately injured.") + else if (source.health < source.maxHealth*0.8) + examine_list += span_warning("[source.p_They()] look[source.p_s()] slightly injured.") + else + examine_list += span_notice("[source.p_They()] look[source.p_s()] to be in good condition.") diff --git a/modular_skyrat/modules/ices_events/code/ICES_event_config.dm b/modular_nova/modules/ices_events/code/ICES_event_config.dm similarity index 95% rename from modular_skyrat/modules/ices_events/code/ICES_event_config.dm rename to modular_nova/modules/ices_events/code/ICES_event_config.dm index c65aafe5da5f2c..693868cc43091c 100644 --- a/modular_skyrat/modules/ices_events/code/ICES_event_config.dm +++ b/modular_nova/modules/ices_events/code/ICES_event_config.dm @@ -178,33 +178,6 @@ max_occurrences = 0 intensity_restriction = TRUE -/** - * CME (Coronal Mass Ejection) - * - * Combined weight: 40 - */ -/datum/round_event_control/cme/minimal - max_occurrences = 0 - weight = MED_EVENT_FREQ - -/datum/round_event_control/cme/moderate - max_occurrences = 1 - min_players = 45 - weight = MED_EVENT_FREQ - intensity_restriction = TRUE - -/datum/round_event_control/cme/extreme - max_occurrences = 1 - min_players = 45 - weight = LOW_EVENT_FREQ - earliest_start = 105 MINUTES - intensity_restriction = TRUE - -/datum/round_event_control/cme/unknown - max_occurrences = 1 - weight = MED_EVENT_FREQ - intensity_restriction = TRUE - /** * Communications * @@ -432,7 +405,7 @@ intensity_restriction = TRUE /** - * Syndicate Portal Storm + * Symphionia Portal Storm */ /datum/round_event_control/portal_storm_syndicate max_occurrences = 2 diff --git a/modular_skyrat/modules/ices_events/code/ICES_intensity_credits.dm b/modular_nova/modules/ices_events/code/ICES_intensity_credits.dm similarity index 100% rename from modular_skyrat/modules/ices_events/code/ICES_intensity_credits.dm rename to modular_nova/modules/ices_events/code/ICES_intensity_credits.dm diff --git a/modular_skyrat/modules/ices_events/code/ICES_procs.dm b/modular_nova/modules/ices_events/code/ICES_procs.dm similarity index 100% rename from modular_skyrat/modules/ices_events/code/ICES_procs.dm rename to modular_nova/modules/ices_events/code/ICES_procs.dm diff --git a/modular_skyrat/modules/ices_events/code/ICES_seclevel.dm b/modular_nova/modules/ices_events/code/ICES_seclevel.dm similarity index 100% rename from modular_skyrat/modules/ices_events/code/ICES_seclevel.dm rename to modular_nova/modules/ices_events/code/ICES_seclevel.dm diff --git a/modular_skyrat/modules/ices_events/code/ICES_tgui.dm b/modular_nova/modules/ices_events/code/ICES_tgui.dm similarity index 100% rename from modular_skyrat/modules/ices_events/code/ICES_tgui.dm rename to modular_nova/modules/ices_events/code/ICES_tgui.dm diff --git a/modular_skyrat/modules/ices_events/code/_ICES_globalvars.dm b/modular_nova/modules/ices_events/code/_ICES_globalvars.dm similarity index 100% rename from modular_skyrat/modules/ices_events/code/_ICES_globalvars.dm rename to modular_nova/modules/ices_events/code/_ICES_globalvars.dm diff --git a/modular_skyrat/modules/ices_events/code/effects/ef_foam.dm b/modular_nova/modules/ices_events/code/effects/ef_foam.dm similarity index 100% rename from modular_skyrat/modules/ices_events/code/effects/ef_foam.dm rename to modular_nova/modules/ices_events/code/effects/ef_foam.dm diff --git a/modular_skyrat/modules/ices_events/code/events/ev_meteors.dm b/modular_nova/modules/ices_events/code/events/ev_meteors.dm similarity index 100% rename from modular_skyrat/modules/ices_events/code/events/ev_meteors.dm rename to modular_nova/modules/ices_events/code/events/ev_meteors.dm diff --git a/modular_nova/modules/ices_events/code/events/ev_roleplay_check.dm b/modular_nova/modules/ices_events/code/events/ev_roleplay_check.dm new file mode 100644 index 00000000000000..0def7040812320 --- /dev/null +++ b/modular_nova/modules/ices_events/code/events/ev_roleplay_check.dm @@ -0,0 +1,13 @@ +/** + * Checks if a player meets certain conditions to exclude them from event selection. + */ +/proc/engaged_role_play_check(mob/living/carbon/human/player, station = TRUE, dorms = TRUE) + var/turf/player_turf = get_turf(player) + var/area/player_area = get_area(player_turf) + + if(station && !is_station_level(player_turf.z)) + return TRUE + if(dorms && istype(player_area, /area/station/commons/dorms)) + return TRUE + + return FALSE diff --git a/modular_skyrat/modules/ices_events/code/events/ev_scrubbers.dm b/modular_nova/modules/ices_events/code/events/ev_scrubbers.dm similarity index 100% rename from modular_skyrat/modules/ices_events/code/events/ev_scrubbers.dm rename to modular_nova/modules/ices_events/code/events/ev_scrubbers.dm diff --git a/modular_skyrat/modules/ices_events/readme.md b/modular_nova/modules/ices_events/readme.md similarity index 100% rename from modular_skyrat/modules/ices_events/readme.md rename to modular_nova/modules/ices_events/readme.md diff --git a/modular_skyrat/modules/icspawning/code/cards_ids.dm b/modular_nova/modules/icspawning/code/cards_ids.dm similarity index 100% rename from modular_skyrat/modules/icspawning/code/cards_ids.dm rename to modular_nova/modules/icspawning/code/cards_ids.dm diff --git a/modular_skyrat/modules/icspawning/code/observer.dm b/modular_nova/modules/icspawning/code/observer.dm similarity index 100% rename from modular_skyrat/modules/icspawning/code/observer.dm rename to modular_nova/modules/icspawning/code/observer.dm diff --git a/modular_skyrat/modules/icspawning/code/spell.dm b/modular_nova/modules/icspawning/code/spell.dm similarity index 100% rename from modular_skyrat/modules/icspawning/code/spell.dm rename to modular_nova/modules/icspawning/code/spell.dm diff --git a/modular_skyrat/modules/icspawning/code/standard.dm b/modular_nova/modules/icspawning/code/standard.dm similarity index 100% rename from modular_skyrat/modules/icspawning/code/standard.dm rename to modular_nova/modules/icspawning/code/standard.dm diff --git a/modular_skyrat/modules/icspawning/readme.md b/modular_nova/modules/icspawning/readme.md similarity index 100% rename from modular_skyrat/modules/icspawning/readme.md rename to modular_nova/modules/icspawning/readme.md diff --git a/modular_skyrat/modules/implants/code/augments_arms.dm b/modular_nova/modules/implants/code/augments_arms.dm similarity index 92% rename from modular_skyrat/modules/implants/code/augments_arms.dm rename to modular_nova/modules/implants/code/augments_arms.dm index d59c4353732563..26f17d90c3485b 100644 --- a/modular_skyrat/modules/implants/code/augments_arms.dm +++ b/modular_nova/modules/implants/code/augments_arms.dm @@ -17,17 +17,17 @@ /obj/item/melee/implantarmblade name = "implanted arm blade" desc = "A long, sharp, mantis-like blade implanted into someones arm. Cleaves through flesh like its particularly strong butter." - icon = 'modular_skyrat/modules/implants/icons/implanted_blade.dmi' - righthand_file = 'modular_skyrat/modules/implants/icons/implanted_blade_righthand.dmi' - lefthand_file = 'modular_skyrat/modules/implants/icons/implanted_blade_lefthand.dmi' + icon = 'modular_nova/modules/implants/icons/implanted_blade.dmi' + righthand_file = 'modular_nova/modules/implants/icons/implanted_blade_righthand.dmi' + lefthand_file = 'modular_nova/modules/implants/icons/implanted_blade_lefthand.dmi' icon_state = "mantis_blade" w_class = WEIGHT_CLASS_BULKY - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY sharpness = SHARP_EDGED force = 25 armour_penetration = 20 item_flags = NEEDS_PERMIT //Beepers gets angry if you get caught with this. - hitsound = 'modular_skyrat/master_files/sound/weapons/bloodyslice.ogg' + hitsound = 'modular_nova/master_files/sound/weapons/bloodyslice.ogg' /obj/item/melee/implantarmblade/energy name = "energy arm blade" @@ -41,7 +41,7 @@ name = "arm blade implant" desc = "An integrated blade implant designed to be installed into a persons arm. Stylish and deadly; Although, being caught with this without proper permits is sure to draw unwanted attention." items_to_create = list(/obj/item/melee/implantarmblade) - icon = 'modular_skyrat/modules/implants/icons/implanted_blade.dmi' + icon = 'modular_nova/modules/implants/icons/implanted_blade.dmi' icon_state = "mantis_blade" /obj/item/organ/internal/cyberimp/arm/armblade/emag_act() @@ -55,9 +55,9 @@ /obj/item/knife/razor_claws name = "implanted razor claws" desc = "A set of sharp, retractable claws built into the fingertips, five double-edged blades sure to turn people into mincemeat. Capable of shifting into 'Precision' mode to act similar to wirecutters." - icon = 'modular_skyrat/modules/implants/icons/razorclaws.dmi' - righthand_file = 'modular_skyrat/modules/implants/icons/razorclaws_righthand.dmi' - lefthand_file = 'modular_skyrat/modules/implants/icons/razorclaws_lefthand.dmi' + icon = 'modular_nova/modules/implants/icons/razorclaws.dmi' + righthand_file = 'modular_nova/modules/implants/icons/razorclaws_righthand.dmi' + lefthand_file = 'modular_nova/modules/implants/icons/razorclaws_lefthand.dmi' icon_state = "wolverine" inhand_icon_state = "wolverine" var/knife_force = 10 @@ -123,7 +123,7 @@ desc = "A set of hidden, retractable blades built into the fingertips; cyborg mercenary approved." items_to_create = list(/obj/item/knife/razor_claws) actions_types = list(/datum/action/item_action/organ_action/toggle/razor_claws) - icon = 'modular_skyrat/modules/implants/icons/razorclaws.dmi' + icon = 'modular_nova/modules/implants/icons/razorclaws.dmi' icon_state = "wolverine" extend_sound = 'sound/items/unsheath.ogg' retract_sound = 'sound/items/sheath.ogg' @@ -141,7 +141,7 @@ /datum/action/item_action/organ_action/toggle/razor_claws name = "Extend Claws" desc = "You can also activate the claws in your hand to change their mode." - button_icon = 'modular_skyrat/master_files/icons/hud/actions.dmi' + button_icon = 'modular_nova/master_files/icons/hud/actions.dmi' button_icon_state = "wolverine" /obj/item/organ/internal/cyberimp/arm/hacker diff --git a/modular_skyrat/modules/implants/code/augments_chest.dm b/modular_nova/modules/implants/code/augments_chest.dm similarity index 95% rename from modular_skyrat/modules/implants/code/augments_chest.dm rename to modular_nova/modules/implants/code/augments_chest.dm index 87e817da3795fe..e82ba99267590b 100644 --- a/modular_skyrat/modules/implants/code/augments_chest.dm +++ b/modular_nova/modules/implants/code/augments_chest.dm @@ -6,7 +6,7 @@ name = "internal health analyzer" desc = "An advanced health analyzer implant, designed to directly interface with a host's body and relay scan information to the brain on command." slot = ORGAN_SLOT_SCANNER - icon = 'modular_skyrat/modules/implants/icons/internal_HA.dmi' + icon = 'modular_nova/modules/implants/icons/internal_HA.dmi' icon_state = "internal_HA" implant_overlay = null implant_color = null diff --git a/modular_skyrat/modules/implants/code/augments_eyes.dm b/modular_nova/modules/implants/code/augments_eyes.dm similarity index 80% rename from modular_skyrat/modules/implants/code/augments_eyes.dm rename to modular_nova/modules/implants/code/augments_eyes.dm index 4de66355058a3f..d940eb5e789882 100644 --- a/modular_skyrat/modules/implants/code/augments_eyes.dm +++ b/modular_nova/modules/implants/code/augments_eyes.dm @@ -1,5 +1,5 @@ /obj/item/organ/internal/eyes/robotic - icon = 'modular_skyrat/modules/implants/icons/internal_HA.dmi' //So I had to fucking include the eye sprites + icon = 'modular_nova/modules/implants/icons/internal_HA.dmi' //So I had to fucking include the eye sprites icon_state = "cybernetic_eyeballs" /obj/item/organ/internal/eyes/robotic/xray @@ -19,7 +19,7 @@ /obj/item/organ/internal/eyes/night_vision/cyber name = "nightvision eyes" - icon = 'modular_skyrat/modules/implants/icons/internal_HA.dmi' //All in the chest implants .dmi + icon = 'modular_nova/modules/implants/icons/internal_HA.dmi' //All in the chest implants .dmi icon_state = "eyes_nvcyber" desc = "A pair of eyes with built-in nightvision optics, with the additional bonus of being rad as hell." eye_color_left = "#0ffc03" diff --git a/modular_skyrat/modules/implants/code/augments_internal.dm b/modular_nova/modules/implants/code/augments_internal.dm similarity index 100% rename from modular_skyrat/modules/implants/code/augments_internal.dm rename to modular_nova/modules/implants/code/augments_internal.dm diff --git a/modular_nova/modules/implants/code/medical_designs.dm b/modular_nova/modules/implants/code/medical_designs.dm new file mode 100644 index 00000000000000..5ebcfa2e63ee90 --- /dev/null +++ b/modular_nova/modules/implants/code/medical_designs.dm @@ -0,0 +1,188 @@ +/datum/design/cyberimp_mantis + name = "Mantis Blade Implant" + desc = "A long, sharp, mantis-like blade installed within the forearm, acting as a deadly self defense weapon." + id = "ci-mantis" + build_type = MECHFAB + materials = list ( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + construction_time = 200 + build_path = /obj/item/organ/internal/cyberimp/arm/armblade + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_COMBAT, + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + +/datum/design/cyberimp_claws + name = "Razor Claws Implant" + desc = "Long, sharp, double-edged razors installed within the fingers, functional for cutting. All kinds of cutting." + id = "ci-razor" + build_type = PROTOLATHE | AWAY_LATHE | MECHFAB + materials = list ( + /datum/material/iron = SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + construction_time = 20 SECONDS + build_path = /obj/item/organ/internal/cyberimp/arm/razor_claws + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_TOOLS, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SECURITY + +/datum/design/cyberimp_hacker + name = "Hacking Hand Implant" + desc = "An advanced hacking and machine modification toolkit fitted into an arm implant, designed to be installed on a subject's arm." + id = "ci-hacker" + build_type = MECHFAB + materials = list ( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + construction_time = 200 + build_path = /obj/item/organ/internal/cyberimp/arm/hacker + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_UTILITY, + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design/cyberimp_flash + name = "Photon Projector Implant" + desc = "An integrated projector mounted onto a user's arm that is able to be used as a powerful flash." + id = "ci-flash" + build_type = PROTOLATHE | AWAY_LATHE | MECHFAB + materials = list ( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + construction_time = 200 + build_path = /obj/item/organ/internal/cyberimp/arm/flash + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_COMBAT, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/cyberimp_botany + name = "Botany Arm Implant" + desc = "Everything a botanist needs in an arm implant, designed to be installed on a subject's arm." + id = "ci-botany" + build_type = MECHFAB | PROTOLATHE + materials = list ( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plastic = SHEET_MATERIAL_AMOUNT, + ) + construction_time = 200 + build_path = /obj/item/organ/internal/cyberimp/arm/botany + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_TOOLS, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SERVICE + +/datum/design/cyberimp_nv + name = "Night Vision Eyes" + desc = "These cybernetic eyes will give you Night Vision. Big, mean, and green." + id = "ci-nv" + build_type = PROTOLATHE | MECHFAB + construction_time = 60 + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 6, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 6, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 6, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 6, + /datum/material/uranium = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/organ/internal/eyes/night_vision/cyber + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_UTILITY, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/cyberimp_antisleep + name = "CNS Jumpstarter Implant" + desc = "This implant will automatically attempt to jolt you awake from unconsciousness, with a short cooldown between jolts. Conflicts with the CNS Rebooter." + id = "ci-antisleep" + build_type = PROTOLATHE | MECHFAB + construction_time = 60 + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 6, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 6, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/organ/internal/cyberimp/brain/anti_sleep + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_COMBAT, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/cyberimp_scanner + name = "Internal Medical Analyzer" + desc = "This implant interfaces with a host's body, sending detailed readouts of the vessel's condition on command via the mind." + id = "ci-scanner" + build_type = MECHFAB | PROTOLATHE + construction_time = 40 + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/silver = SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/organ/internal/cyberimp/chest/scanner + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_HEALTH, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/cyberimp_janitor + name = "Janitor Arm Implant" + desc = "A set of janitor tools fitted into an arm implant, designed to be installed on subject's arm." + id = "ci-janitor" + build_type = PROTOLATHE | MECHFAB + materials = list ( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + construction_time = 200 + build_path = /obj/item/organ/internal/cyberimp/arm/janitor + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_TOOLS, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SERVICE + +/datum/design/cyberimp_lighter + name = "Lighter Arm Implant" + desc = "A lighter, installed into the subject's arm. Incredibly useless." + id = "ci-lighter" + build_type = PROTOLATHE | MECHFAB + materials = list ( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + construction_time = 100 + build_path = /obj/item/organ/internal/cyberimp/arm/lighter + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_MISC, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SERVICE + +/datum/design/cyberimp_thermals + name = "Thermal Eyes" + id = "ci-thermals" + build_type = AWAY_LATHE | MECHFAB + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + +/datum/design/cyberimp_reviver + name = "Reviver Implant" + id = "ci-reviver" + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_COMBAT, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL diff --git a/modular_nova/modules/implants/code/medical_nodes.dm b/modular_nova/modules/implants/code/medical_nodes.dm new file mode 100644 index 00000000000000..a329693e8e5a3b --- /dev/null +++ b/modular_nova/modules/implants/code/medical_nodes.dm @@ -0,0 +1,25 @@ +/datum/techweb_node/cyber_implants + design_ids = list( + "ci-nutriment", + "ci-scanner", + "ci-breather", + "ci-gloweyes", + "ci-welding", + "ci-medhud", + "ci-sechud", + "ci-diaghud", + "ci-botany", + "ci-janitor", + "ci-lighter", + "ci-razor", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) + +/datum/techweb_node/adv_cyber_implants + design_ids = list("ci-nv", "ci-nutrimentplus", "ci-surgery", "ci-toolset") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500) + +/datum/techweb_node/combat_cyber_implants + design_ids = list("ci-antidrop", "ci-antistun", "ci-antisleep", "ci-thrusters", "ci-mantis", "ci-flash", "ci-reviver") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 12000) + diff --git a/modular_skyrat/modules/implants/icons/implanted_blade.dmi b/modular_nova/modules/implants/icons/implanted_blade.dmi similarity index 100% rename from modular_skyrat/modules/implants/icons/implanted_blade.dmi rename to modular_nova/modules/implants/icons/implanted_blade.dmi diff --git a/modular_skyrat/modules/implants/icons/implanted_blade_lefthand.dmi b/modular_nova/modules/implants/icons/implanted_blade_lefthand.dmi similarity index 100% rename from modular_skyrat/modules/implants/icons/implanted_blade_lefthand.dmi rename to modular_nova/modules/implants/icons/implanted_blade_lefthand.dmi diff --git a/modular_skyrat/modules/implants/icons/implanted_blade_righthand.dmi b/modular_nova/modules/implants/icons/implanted_blade_righthand.dmi similarity index 100% rename from modular_skyrat/modules/implants/icons/implanted_blade_righthand.dmi rename to modular_nova/modules/implants/icons/implanted_blade_righthand.dmi diff --git a/modular_skyrat/modules/implants/icons/internal_HA.dmi b/modular_nova/modules/implants/icons/internal_HA.dmi similarity index 100% rename from modular_skyrat/modules/implants/icons/internal_HA.dmi rename to modular_nova/modules/implants/icons/internal_HA.dmi diff --git a/modular_skyrat/modules/implants/icons/razorclaws.dmi b/modular_nova/modules/implants/icons/razorclaws.dmi similarity index 100% rename from modular_skyrat/modules/implants/icons/razorclaws.dmi rename to modular_nova/modules/implants/icons/razorclaws.dmi diff --git a/modular_skyrat/modules/implants/icons/razorclaws_lefthand.dmi b/modular_nova/modules/implants/icons/razorclaws_lefthand.dmi similarity index 100% rename from modular_skyrat/modules/implants/icons/razorclaws_lefthand.dmi rename to modular_nova/modules/implants/icons/razorclaws_lefthand.dmi diff --git a/modular_skyrat/modules/implants/icons/razorclaws_righthand.dmi b/modular_nova/modules/implants/icons/razorclaws_righthand.dmi similarity index 100% rename from modular_skyrat/modules/implants/icons/razorclaws_righthand.dmi rename to modular_nova/modules/implants/icons/razorclaws_righthand.dmi diff --git a/modular_skyrat/modules/implants/readme.md b/modular_nova/modules/implants/readme.md similarity index 100% rename from modular_skyrat/modules/implants/readme.md rename to modular_nova/modules/implants/readme.md diff --git a/modular_skyrat/modules/imported_vendors/code/vendor_containers.dm b/modular_nova/modules/imported_vendors/code/vendor_containers.dm similarity index 98% rename from modular_skyrat/modules/imported_vendors/code/vendor_containers.dm rename to modular_nova/modules/imported_vendors/code/vendor_containers.dm index 9a9a34a34c806b..608a2ac39379c6 100644 --- a/modular_skyrat/modules/imported_vendors/code/vendor_containers.dm +++ b/modular_nova/modules/imported_vendors/code/vendor_containers.dm @@ -1,7 +1,7 @@ /obj/item/storage/box/foodpack name = "wrapped meal container" desc = "A generic brown paper food package, you aren't quite sure where this comes from." - icon = 'modular_skyrat/modules/imported_vendors/icons/imported_quick_foods.dmi' + icon = 'modular_nova/modules/imported_vendors/icons/imported_quick_foods.dmi' icon_state = "foodpack_generic_big" illustration = null custom_price = PAYCHECK_CREW * 1.8 diff --git a/modular_skyrat/modules/imported_vendors/code/vendor_food.dm b/modular_nova/modules/imported_vendors/code/vendor_food.dm similarity index 96% rename from modular_skyrat/modules/imported_vendors/code/vendor_food.dm rename to modular_nova/modules/imported_vendors/code/vendor_food.dm index 2fe1e97965da8f..27200db97b7b7a 100644 --- a/modular_skyrat/modules/imported_vendors/code/vendor_food.dm +++ b/modular_nova/modules/imported_vendors/code/vendor_food.dm @@ -5,16 +5,20 @@ /obj/item/trash/empty_food_tray name = "empty plastic food tray" desc = "The condensation and what you can only hope are the leftovers of food make this a bit hard to reuse." - icon = 'modular_skyrat/modules/imported_vendors/icons/imported_quick_foods.dmi' + icon = 'modular_nova/modules/imported_vendors/icons/imported_quick_foods.dmi' icon_state = "foodtray_empty" - custom_materials = list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT) + custom_materials = list( + /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT, + ) /obj/item/trash/empty_side_pack name = "empty side wrapper" desc = "Unfortunately, this no longer holds any sides to distract you from the other 'food'." - icon = 'modular_skyrat/modules/imported_vendors/icons/imported_quick_foods.dmi' + icon = 'modular_nova/modules/imported_vendors/icons/imported_quick_foods.dmi' icon_state = "foodpack_generic_trash" - custom_materials = list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT) + custom_materials = list( + /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT, + ) /obj/item/trash/empty_side_pack/nt icon_state = "foodpack_nt_trash" @@ -37,7 +41,7 @@ /obj/item/food/vendor_tray_meal name = "\improper NT-Meal: Steak and Macaroni" desc = "A 'salisbury steak' drowning in something similar to a gravy, with a macaroni and cheese substitute mix sitting right beside it." - icon = 'modular_skyrat/modules/imported_vendors/icons/imported_quick_foods.dmi' + icon = 'modular_nova/modules/imported_vendors/icons/imported_quick_foods.dmi' icon_state = "foodtray_sad_steak" trash_type = /obj/item/trash/empty_food_tray food_reagents = list(/datum/reagent/consumable/nutriment = 8) diff --git a/modular_skyrat/modules/imported_vendors/code/vendor_snacks.dm b/modular_nova/modules/imported_vendors/code/vendor_snacks.dm similarity index 92% rename from modular_skyrat/modules/imported_vendors/code/vendor_snacks.dm rename to modular_nova/modules/imported_vendors/code/vendor_snacks.dm index 38de344ec4dd83..a1af8c1f3942d0 100644 --- a/modular_skyrat/modules/imported_vendors/code/vendor_snacks.dm +++ b/modular_nova/modules/imported_vendors/code/vendor_snacks.dm @@ -3,7 +3,7 @@ /obj/item/food/vendor_snacks name = "\improper God's Strongest Snacks" desc = "You best hope you aren't a sinner. (You should never see this item please report it)" - icon = 'modular_skyrat/modules/imported_vendors/icons/imported_quick_foods.dmi' + icon = 'modular_nova/modules/imported_vendors/icons/imported_quick_foods.dmi' icon_state = "foodpack_generic" trash_type = /obj/item/trash/vendor_trash bite_consumption = 10 @@ -17,9 +17,11 @@ /obj/item/trash/vendor_trash name = "\improper God's Weakest Snacks" desc = "The leftovers of what was likely a great snack in a past time." - icon = 'modular_skyrat/modules/imported_vendors/icons/imported_quick_foods.dmi' + icon = 'modular_nova/modules/imported_vendors/icons/imported_quick_foods.dmi' icon_state = "foodpack_generic_trash" - custom_materials = list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT) + custom_materials = list( + /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT, + ) /* * Yangyu Snacks @@ -84,7 +86,7 @@ /obj/item/reagent_containers/cup/glass/waterbottle/tea name = "bottle of tea" desc = "A bottle of tea brought to you in a convenient plastic bottle." - icon = 'modular_skyrat/modules/imported_vendors/icons/imported_quick_foods.dmi' + icon = 'modular_nova/modules/imported_vendors/icons/imported_quick_foods.dmi' icon_state = "tea_bottle" list_reagents = list(/datum/reagent/consumable/tea = 40) cap_icon_state = "bottle_cap_tea" @@ -182,50 +184,50 @@ desc = "The clear plastic reveals that this no longer holds tasty treats for your winged friends." icon_state = "moth_bag_trash" -/obj/item/reagent_containers/cup/soda_cans/skyrat/lemonade +/obj/item/reagent_containers/cup/soda_cans/nova/lemonade name = "\improper Gyárhajó 1023: Lemonade" desc = "A can of lemonade, for those who are into that kind of thing, or just have no choice." icon_state = "lemonade" list_reagents = list(/datum/reagent/consumable/lemonade = 30) drink_type = FRUIT -/obj/item/reagent_containers/cup/soda_cans/skyrat/lemonade/examine_more(mob/user) +/obj/item/reagent_containers/cup/soda_cans/nova/lemonade/examine_more(mob/user) . = ..() . += span_notice("Markings on the can indicate this one was made on <i>factory ship 1023</i> of the Grand Nomad Fleet.") return . -/obj/item/reagent_containers/cup/soda_cans/skyrat/navy_rum +/obj/item/reagent_containers/cup/soda_cans/nova/navy_rum name = "\improper Gyárhajó 1506: Navy Rum" desc = "A can of navy rum brewed up and imported from a detachment of the nomad fleet, or so the can says." icon_state = "navy_rum" list_reagents = list(/datum/reagent/consumable/ethanol/navy_rum = 30) drink_type = ALCOHOL -/obj/item/reagent_containers/cup/soda_cans/skyrat/navy_rum/examine_more(mob/user) +/obj/item/reagent_containers/cup/soda_cans/nova/navy_rum/examine_more(mob/user) . = ..() . += span_notice("Markings on the can indicate this one was made on <i>factory ship 1506</i> of the Grand Nomad Fleet.") return . -/obj/item/reagent_containers/cup/soda_cans/skyrat/soda_water_moth +/obj/item/reagent_containers/cup/soda_cans/nova/soda_water_moth name = "\improper Gyárhajó 1023: Soda Water" desc = "A can of soda water. Why not make a rum and soda? Now that you think of it, maybe not." icon_state = "soda_water" list_reagents = list(/datum/reagent/consumable/sodawater = 30) drink_type = SUGAR -/obj/item/reagent_containers/cup/soda_cans/skyrat/soda_water_moth/examine_more(mob/user) +/obj/item/reagent_containers/cup/soda_cans/nova/soda_water_moth/examine_more(mob/user) . = ..() . += span_notice("Markings on the can indicate this one was made on <i>factory ship 1023</i> of the Grand Nomad Fleet.") return . -/obj/item/reagent_containers/cup/soda_cans/skyrat/ginger_beer +/obj/item/reagent_containers/cup/soda_cans/nova/ginger_beer name = "\improper Gyárhajó 1023: Ginger Beer" desc = "A can of ginger beer, don't let the beer part mislead you, this is entirely non-alcoholic." icon_state = "gingie_beer" list_reagents = list(/datum/reagent/consumable/sol_dry = 30) drink_type = SUGAR -/obj/item/reagent_containers/cup/soda_cans/skyrat/ginger_beer/examine_more(mob/user) +/obj/item/reagent_containers/cup/soda_cans/nova/ginger_beer/examine_more(mob/user) . = ..() . += span_notice("Markings on the can indicate this one was made on <i>factory ship 1023</i> of the Grand Nomad Fleet.") return . @@ -292,7 +294,7 @@ list_reagents = list(/datum/reagent/consumable/mushroom_tea = 40) custom_price = PAYCHECK_LOWER * 2 -/obj/item/reagent_containers/cup/soda_cans/skyrat/kortara +/obj/item/reagent_containers/cup/soda_cans/nova/kortara name = "kortara" desc = "A can of kortara, alcohol brewed from korta seeds, which gives it a unique peppery spice flavor." icon_state = "kortara" diff --git a/modular_skyrat/modules/imported_vendors/code/vendors.dm b/modular_nova/modules/imported_vendors/code/vendors.dm similarity index 94% rename from modular_skyrat/modules/imported_vendors/code/vendors.dm rename to modular_nova/modules/imported_vendors/code/vendors.dm index f4504dd041cae1..0cf495b6899c56 100644 --- a/modular_skyrat/modules/imported_vendors/code/vendors.dm +++ b/modular_nova/modules/imported_vendors/code/vendors.dm @@ -22,7 +22,7 @@ /obj/machinery/vending/imported name = "NT Sustenance Supplier" desc = "A vending machine serving up only the finest of human college student food." - icon = 'modular_skyrat/modules/imported_vendors/icons/imported_vendors.dmi' + icon = 'modular_nova/modules/imported_vendors/icons/imported_vendors.dmi' icon_state = "nt_food" panel_type = "panel15" light_mask = "nt_food-light-mask" @@ -139,10 +139,10 @@ /obj/item/food/vendor_snacks/moth_bag/fuel_jack = 6, /obj/item/food/vendor_snacks/moth_bag/cheesecake = 6, /obj/item/food/vendor_snacks/moth_bag/cheesecake/honey = 6, - /obj/item/reagent_containers/cup/soda_cans/skyrat/lemonade = 6, - /obj/item/reagent_containers/cup/soda_cans/skyrat/navy_rum = 6, - /obj/item/reagent_containers/cup/soda_cans/skyrat/soda_water_moth = 6, - /obj/item/reagent_containers/cup/soda_cans/skyrat/ginger_beer = 6, + /obj/item/reagent_containers/cup/soda_cans/nova/lemonade = 6, + /obj/item/reagent_containers/cup/soda_cans/nova/navy_rum = 6, + /obj/item/reagent_containers/cup/soda_cans/nova/soda_water_moth = 6, + /obj/item/reagent_containers/cup/soda_cans/nova/ginger_beer = 6, ), ), list( @@ -192,7 +192,7 @@ /obj/item/food/vendor_snacks/lizard_box/sweet_roll = 6, /obj/item/reagent_containers/cup/glass/bottle/mushi_kombucha = 6, /obj/item/reagent_containers/cup/glass/waterbottle/tea/mushroom = 6, - /obj/item/reagent_containers/cup/soda_cans/skyrat/kortara = 6, + /obj/item/reagent_containers/cup/soda_cans/nova/kortara = 6, ), ), list( diff --git a/modular_skyrat/modules/imported_vendors/icons/imported_quick_foods.dmi b/modular_nova/modules/imported_vendors/icons/imported_quick_foods.dmi similarity index 100% rename from modular_skyrat/modules/imported_vendors/icons/imported_quick_foods.dmi rename to modular_nova/modules/imported_vendors/icons/imported_quick_foods.dmi diff --git a/modular_skyrat/modules/imported_vendors/icons/imported_vendors.dmi b/modular_nova/modules/imported_vendors/icons/imported_vendors.dmi similarity index 100% rename from modular_skyrat/modules/imported_vendors/icons/imported_vendors.dmi rename to modular_nova/modules/imported_vendors/icons/imported_vendors.dmi diff --git a/modular_skyrat/modules/imported_vendors/readme.md b/modular_nova/modules/imported_vendors/readme.md similarity index 100% rename from modular_skyrat/modules/imported_vendors/readme.md rename to modular_nova/modules/imported_vendors/readme.md diff --git a/modular_skyrat/modules/indicators/code/combat_indicator.dm b/modular_nova/modules/indicators/code/combat_indicator.dm similarity index 97% rename from modular_skyrat/modules/indicators/code/combat_indicator.dm rename to modular_nova/modules/indicators/code/combat_indicator.dm index 3e42b21ec4c254..0877082f294b3d 100644 --- a/modular_skyrat/modules/indicators/code/combat_indicator.dm +++ b/modular_nova/modules/indicators/code/combat_indicator.dm @@ -2,7 +2,7 @@ GLOBAL_VAR_INIT(combat_indicator_overlay, GenerateCombatOverlay()) /proc/GenerateCombatOverlay() - var/mutable_appearance/combat_indicator = mutable_appearance('modular_skyrat/modules/indicators/icons/combat_indicator.dmi', "combat", FLY_LAYER) + var/mutable_appearance/combat_indicator = mutable_appearance('modular_nova/modules/indicators/icons/combat_indicator.dmi', "combat", FLY_LAYER) combat_indicator.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA | KEEP_APART return combat_indicator @@ -42,11 +42,6 @@ GLOBAL_VAR_INIT(combat_indicator_overlay, GenerateCombatOverlay()) if(combat_indicator) . += GLOB.combat_indicator_overlay -/mob/living/silicon/robot/update_icons() - . = ..() - if(combat_indicator) - add_overlay(GLOB.combat_indicator_overlay) - /obj/vehicle/sealed/update_overlays() . = ..() if(combat_indicator_vehicle) diff --git a/modular_skyrat/modules/indicators/code/sealed.dm b/modular_nova/modules/indicators/code/sealed.dm similarity index 100% rename from modular_skyrat/modules/indicators/code/sealed.dm rename to modular_nova/modules/indicators/code/sealed.dm diff --git a/modular_skyrat/modules/indicators/code/ssd_indicator.dm b/modular_nova/modules/indicators/code/ssd_indicator.dm similarity index 94% rename from modular_skyrat/modules/indicators/code/ssd_indicator.dm rename to modular_nova/modules/indicators/code/ssd_indicator.dm index d84edb1d569be6..9ed34005a98192 100644 --- a/modular_skyrat/modules/indicators/code/ssd_indicator.dm +++ b/modular_nova/modules/indicators/code/ssd_indicator.dm @@ -1,4 +1,4 @@ -GLOBAL_VAR_INIT(ssd_indicator_overlay, mutable_appearance('modular_skyrat/modules/indicators/icons/ssd_indicator.dmi', "default0", FLY_LAYER)) +GLOBAL_VAR_INIT(ssd_indicator_overlay, mutable_appearance('modular_nova/modules/indicators/icons/ssd_indicator.dmi', "default0", FLY_LAYER)) /mob/living var/ssd_indicator = FALSE diff --git a/modular_skyrat/modules/indicators/icons/DNR_trait_overlay.dmi b/modular_nova/modules/indicators/icons/DNR_trait_overlay.dmi similarity index 100% rename from modular_skyrat/modules/indicators/icons/DNR_trait_overlay.dmi rename to modular_nova/modules/indicators/icons/DNR_trait_overlay.dmi diff --git a/modular_skyrat/modules/indicators/icons/combat_indicator.dmi b/modular_nova/modules/indicators/icons/combat_indicator.dmi similarity index 100% rename from modular_skyrat/modules/indicators/icons/combat_indicator.dmi rename to modular_nova/modules/indicators/icons/combat_indicator.dmi diff --git a/modular_skyrat/modules/indicators/icons/emote_indicator.dmi b/modular_nova/modules/indicators/icons/emote_indicator.dmi similarity index 100% rename from modular_skyrat/modules/indicators/icons/emote_indicator.dmi rename to modular_nova/modules/indicators/icons/emote_indicator.dmi diff --git a/modular_skyrat/modules/indicators/icons/ssd_indicator.dmi b/modular_nova/modules/indicators/icons/ssd_indicator.dmi similarity index 100% rename from modular_skyrat/modules/indicators/icons/ssd_indicator.dmi rename to modular_nova/modules/indicators/icons/ssd_indicator.dmi diff --git a/modular_skyrat/modules/indicators/icons/temporary_flavor_text_indicator.dmi b/modular_nova/modules/indicators/icons/temporary_flavor_text_indicator.dmi similarity index 100% rename from modular_skyrat/modules/indicators/icons/temporary_flavor_text_indicator.dmi rename to modular_nova/modules/indicators/icons/temporary_flavor_text_indicator.dmi diff --git a/modular_skyrat/modules/indicators/icons/typing_indicator.dmi b/modular_nova/modules/indicators/icons/typing_indicator.dmi similarity index 100% rename from modular_skyrat/modules/indicators/icons/typing_indicator.dmi rename to modular_nova/modules/indicators/icons/typing_indicator.dmi diff --git a/modular_skyrat/modules/indicators/readme.md b/modular_nova/modules/indicators/readme.md similarity index 100% rename from modular_skyrat/modules/indicators/readme.md rename to modular_nova/modules/indicators/readme.md diff --git a/modular_skyrat/modules/inflatables/code/inflatable.dm b/modular_nova/modules/inflatables/code/inflatable.dm similarity index 94% rename from modular_skyrat/modules/inflatables/code/inflatable.dm rename to modular_nova/modules/inflatables/code/inflatable.dm index f58b4dde1726e0..82a00dcdcb20c4 100644 --- a/modular_skyrat/modules/inflatables/code/inflatable.dm +++ b/modular_nova/modules/inflatables/code/inflatable.dm @@ -12,7 +12,7 @@ density = TRUE anchored = TRUE max_integrity = 40 - icon = 'modular_skyrat/modules/inflatables/icons/inflatable.dmi' + icon = 'modular_nova/modules/inflatables/icons/inflatable.dmi' icon_state = "wall" /// The type we drop when damaged. var/torn_type = /obj/item/inflatable/torn @@ -100,7 +100,7 @@ /obj/structure/inflatable/door name = "inflatable door" can_atmos_pass = ATMOS_PASS_DENSITY - icon = 'modular_skyrat/modules/inflatables/icons/inflatable.dmi' + icon = 'modular_nova/modules/inflatables/icons/inflatable.dmi' icon_state = "door_closed" base_icon_state = "door" torn_type = /obj/item/inflatable/door/torn @@ -139,7 +139,7 @@ /obj/item/inflatable name = "inflatable wall" desc = "A folded membrane which rapidly expands into a large cubical shape on activation." - icon = 'modular_skyrat/modules/inflatables/icons/inflatable.dmi' + icon = 'modular_nova/modules/inflatables/icons/inflatable.dmi' icon_state = "folded_wall" base_icon_state = "folded_wall" w_class = WEIGHT_CLASS_SMALL @@ -181,7 +181,7 @@ return if(!do_after(user, 2 SECONDS, src)) return - playsound(user, 'modular_skyrat/modules/inflatables/sound/ducttape1.ogg', 50, 1) + playsound(user, 'modular_nova/modules/inflatables/sound/ducttape1.ogg', 50, 1) to_chat(user, span_notice("You fix [src] using [attacking_tape]!")) attacking_tape.use(TAPE_REQUIRED_TO_FIX) torn = FALSE @@ -206,7 +206,7 @@ /obj/item/inflatable/door name = "inflatable door" desc = "A folded membrane which rapidly expands into a simple door on activation." - icon = 'modular_skyrat/modules/inflatables/icons/inflatable.dmi' + icon = 'modular_nova/modules/inflatables/icons/inflatable.dmi' icon_state = "folded_door" base_icon_state = "folded_door" structure_type = /obj/structure/inflatable/door @@ -224,7 +224,7 @@ /// The box full of inflatables /obj/item/storage/inflatable - icon = 'modular_skyrat/modules/more_briefcases/icons/briefcases.dmi' + icon = 'modular_nova/modules/more_briefcases/icons/briefcases.dmi' name = "inflatable barrier box" desc = "Contains inflatable walls and doors." icon_state = "briefcase_inflate" diff --git a/modular_skyrat/modules/inflatables/icons/inflatable.dmi b/modular_nova/modules/inflatables/icons/inflatable.dmi similarity index 100% rename from modular_skyrat/modules/inflatables/icons/inflatable.dmi rename to modular_nova/modules/inflatables/icons/inflatable.dmi diff --git a/modular_skyrat/modules/inflatables/readme.md b/modular_nova/modules/inflatables/readme.md similarity index 100% rename from modular_skyrat/modules/inflatables/readme.md rename to modular_nova/modules/inflatables/readme.md diff --git a/modular_skyrat/modules/inflatables/sound/ducttape1.ogg b/modular_nova/modules/inflatables/sound/ducttape1.ogg similarity index 100% rename from modular_skyrat/modules/inflatables/sound/ducttape1.ogg rename to modular_nova/modules/inflatables/sound/ducttape1.ogg diff --git a/modular_skyrat/modules/interaction_menu/code/click.dm b/modular_nova/modules/interaction_menu/code/click.dm similarity index 100% rename from modular_skyrat/modules/interaction_menu/code/click.dm rename to modular_nova/modules/interaction_menu/code/click.dm diff --git a/modular_skyrat/modules/interaction_menu/code/interaction_component.dm b/modular_nova/modules/interaction_menu/code/interaction_component.dm similarity index 99% rename from modular_skyrat/modules/interaction_menu/code/interaction_component.dm rename to modular_nova/modules/interaction_menu/code/interaction_component.dm index b6122decd070ee..9addb13e8997a2 100644 --- a/modular_skyrat/modules/interaction_menu/code/interaction_component.dm +++ b/modular_nova/modules/interaction_menu/code/interaction_component.dm @@ -36,7 +36,7 @@ /datum/component/interactable/UnregisterFromParent() UnregisterSignal(parent, COMSIG_CLICK_CTRL_SHIFT) -/datum/component/interactable/Destroy(force, silent) +/datum/component/interactable/Destroy(force) self = null interactions = null return ..() diff --git a/modular_skyrat/modules/interaction_menu/code/interaction_datum.dm b/modular_nova/modules/interaction_menu/code/interaction_datum.dm similarity index 100% rename from modular_skyrat/modules/interaction_menu/code/interaction_datum.dm rename to modular_nova/modules/interaction_menu/code/interaction_datum.dm diff --git a/modular_skyrat/modules/jukebox/code/dance_machine.dm b/modular_nova/modules/jukebox/code/dance_machine.dm similarity index 98% rename from modular_skyrat/modules/jukebox/code/dance_machine.dm rename to modular_nova/modules/jukebox/code/dance_machine.dm index 1834f6a43067e0..7c602d50e3f6b6 100644 --- a/modular_skyrat/modules/jukebox/code/dance_machine.dm +++ b/modular_nova/modules/jukebox/code/dance_machine.dm @@ -36,7 +36,7 @@ desc = "Now redesigned with data gathered from the extensive disco and plasma research." anchored = TRUE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - flags_1 = NODECONSTRUCT_1 + obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION /obj/machinery/jukebox/Initialize(mapload) . = ..() @@ -51,7 +51,7 @@ return ..() /obj/machinery/jukebox/attackby(obj/item/O, mob/user, params) - if(!active && !(flags_1 & NODECONSTRUCT_1)) + if(!active && !(obj_flags & NO_DECONSTRUCTION)) if(O.tool_behaviour == TOOL_WRENCH) if(!anchored && !isinspace()) to_chat(user,span_notice("You secure [src] to the floor.")) @@ -82,7 +82,7 @@ to_chat(user,span_warning("Error: Access Denied.")) return UI_CLOSE if(!SSjukeboxes.songs.len && !isobserver(user)) - to_chat(user,span_warning("Error: No music tracks have been authorized for your station. Petition Central Command to resolve this issue.")) + to_chat(user,span_warning("Error: No music tracks have been authorized for your station. Petition Conglomeration of Colonists to resolve this issue.")) return UI_CLOSE return ..() diff --git a/modular_skyrat/modules/jukebox/code/jukebox_subsystem.dm b/modular_nova/modules/jukebox/code/jukebox_subsystem.dm similarity index 100% rename from modular_skyrat/modules/jukebox/code/jukebox_subsystem.dm rename to modular_nova/modules/jukebox/code/jukebox_subsystem.dm diff --git a/modular_skyrat/modules/jukebox/icons/stationobjs.dmi b/modular_nova/modules/jukebox/icons/stationobjs.dmi similarity index 100% rename from modular_skyrat/modules/jukebox/icons/stationobjs.dmi rename to modular_nova/modules/jukebox/icons/stationobjs.dmi diff --git a/modular_nova/modules/jukebox/readme.md b/modular_nova/modules/jukebox/readme.md new file mode 100644 index 00000000000000..f6ece230d3dd31 --- /dev/null +++ b/modular_nova/modules/jukebox/readme.md @@ -0,0 +1,29 @@ +https://github.com/Skyrat-SS13/Skyrat-tg/pull/892 + +## Title: Jukebox + +MODULE ID: JUKEBOX + +### Description: + +Adds a new sound system for the jukebox, and also updates the jukebox to be good. + +### TG Proc Changes: + +- Skyrat-tg\code\__DEFINES\sound.dm > DEFINES CHANGED, SEE FILE. + +### Defines: + +- #define CHANNEL_JUKEBOX_START 1016 + +### Master file additions + +- modular_nova\master_files\code\game\sound.dm + +### Included files that are not contained in this module: + +- N/A + +### Credits: +Gandalf2k15 - porting +NotRanged - Original code diff --git a/modular_nova/modules/jungle/code/flora.dm b/modular_nova/modules/jungle/code/flora.dm new file mode 100644 index 00000000000000..44f2199c626df9 --- /dev/null +++ b/modular_nova/modules/jungle/code/flora.dm @@ -0,0 +1,58 @@ +/obj/structure/flora/biolumi + name = "glowing plants" + desc = "Several sticks with bulbous, bioluminescent tips." + icon = 'modular_nova/modules/jungle/icons/jungleflora.dmi' + icon_state = "stick" + gender = PLURAL + light_range = 15 + light_power = 0.5 + max_integrity = 50 + var/variants = 9 + var/base_icon + var/list/random_light = list("#6AFF00","#00FFEE", "#D9FF00", "#FFC800") + +/obj/structure/flora/biolumi/Initialize(mapload) + . = ..() + base_icon = "[initial(icon_state)][rand(1,variants)]" + icon_state = base_icon + if(random_light) + light_color = pick(random_light) + update_appearance() + +/obj/structure/flora/biolumi/update_overlays() + . = ..() + SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) + SSvis_overlays.add_vis_overlay(src, icon, "[base_icon]_light", 0, ABOVE_LIGHTING_PLANE) + if(light_color) + var/obj/effect/overlay/vis/overlay = managed_vis_overlays[1] + overlay.color = light_color + +/obj/structure/flora/biolumi/mine + name = "glowing plant" + desc = "Glowing sphere encased in jungle leaves." + icon_state = "mine" + variants = 4 + random_light = list("#FF0066","#00FFEE", "#D9FF00", "#FFC800") + +/obj/structure/flora/biolumi/flower + name = "glowing flower" + desc = "Beautiful, bioluminescent flower." + icon_state = "flower" + variants = 2 + random_light = list("#6F00FF","#00FFEE", "#D9FF00", "#FF73D5") + +/obj/structure/flora/biolumi/lamp + name = "plant lamp" + desc = "Bioluminescent plant much in a shape of a street lamp." + icon_state = "lamp" + variants = 2 + random_light = list("#6AFF00","#00FFEE", "#D9FF00", "#FFC800") + +/obj/structure/flora/biolumi/mine/weaklight + light_power = 0.3 + +/obj/structure/flora/biolumi/flower/weaklight + light_power = 0.3 + +/obj/structure/flora/biolumi/lamp/weaklight + light_power = 0.3 diff --git a/modular_skyrat/modules/jungle/icons/jungleflora.dmi b/modular_nova/modules/jungle/icons/jungleflora.dmi similarity index 100% rename from modular_skyrat/modules/jungle/icons/jungleflora.dmi rename to modular_nova/modules/jungle/icons/jungleflora.dmi diff --git a/modular_skyrat/modules/jungle/readme.md b/modular_nova/modules/jungle/readme.md similarity index 100% rename from modular_skyrat/modules/jungle/readme.md rename to modular_nova/modules/jungle/readme.md diff --git a/modular_nova/modules/kahraman_equipment/code/clothing/armor_datums.dm b/modular_nova/modules/kahraman_equipment/code/clothing/armor_datums.dm new file mode 100644 index 00000000000000..aa887a848c30d9 --- /dev/null +++ b/modular_nova/modules/kahraman_equipment/code/clothing/armor_datums.dm @@ -0,0 +1,30 @@ +/datum/armor/colonist_clothing + laser = ARMOR_LEVEL_TINY + energy = ARMOR_LEVEL_TINY + bomb = ARMOR_LEVEL_TINY + bio = ARMOR_LEVEL_TINY + fire = ARMOR_LEVEL_WEAK + acid = ARMOR_LEVEL_TINY + wound = WOUND_ARMOR_WEAK + +/datum/armor/colonist_armor + melee = ARMOR_LEVEL_WEAK + bullet = ARMOR_LEVEL_WEAK + laser = ARMOR_LEVEL_TINY + energy = ARMOR_LEVEL_TINY + bomb = ARMOR_LEVEL_TINY + bio = ARMOR_LEVEL_TINY + fire = ARMOR_LEVEL_WEAK + acid = ARMOR_LEVEL_TINY + wound = WOUND_ARMOR_STANDARD + +/datum/armor/colonist_hazard + melee = ARMOR_LEVEL_TINY + bullet = ARMOR_LEVEL_TINY + laser = ARMOR_LEVEL_WEAK + energy = ARMOR_LEVEL_WEAK + bomb = ARMOR_LEVEL_MID + bio = 100 + fire = 100 + acid = ARMOR_LEVEL_MID + wound = WOUND_ARMOR_WEAK diff --git a/modular_nova/modules/kahraman_equipment/code/clothing/clothing.dm b/modular_nova/modules/kahraman_equipment/code/clothing/clothing.dm new file mode 100644 index 00000000000000..456498854021ad --- /dev/null +++ b/modular_nova/modules/kahraman_equipment/code/clothing/clothing.dm @@ -0,0 +1,214 @@ +// Jumpsuit + +/obj/item/clothing/under/frontier_colonist + name = "frontier jumpsuit" + desc = "A heavy grey jumpsuit with extra padding around the joints. Two massive pockets included. \ + No matter what you do to adjust it, its always just slightly too large." + icon = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing.dmi' + icon_state = "jumpsuit" + worn_icon = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn.dmi' + worn_icon_digi = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn_digi.dmi' + worn_icon_teshari = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn_teshari.dmi' + worn_icon_state = "jumpsuit" + has_sensor = SENSOR_COORDS + random_sensor = FALSE + +/obj/item/clothing/under/frontier_colonist/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_KAHRAMAN) + +// Boots + +/obj/item/clothing/shoes/jackboots/frontier_colonist + name = "heavy frontier boots" + desc = "A well built pair of tall boots usually seen on the feet of explorers, first wave colonists, \ + and LARPers across the galaxy." + icon = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing.dmi' + icon_state = "boots" + worn_icon = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn.dmi' + worn_icon_digi = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn_digi.dmi' + worn_icon_teshari = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn_teshari.dmi' + worn_icon_state = "boots" + armor_type = /datum/armor/colonist_clothing + resistance_flags = NONE + +/obj/item/clothing/shoes/jackboots/frontier_colonist/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_KAHRAMAN) + +// Jackets + +/obj/item/clothing/suit/jacket/frontier_colonist + name = "frontier trenchcoat" + desc = "A knee length coat with a water-resistant exterior and relatively comfortable interior. \ + In between? Just enough protective material to stop the odd sharp thing getting through, \ + though don't expect miracles." + icon = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing.dmi' + icon_state = "jacket" + worn_icon = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn.dmi' + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + worn_icon_teshari = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn_teshari.dmi' + worn_icon_state = "jacket" + slot_flags = ITEM_SLOT_OCLOTHING|ITEM_SLOT_NECK + armor_type = /datum/armor/colonist_clothing + resistance_flags = NONE + allowed = null + +/obj/item/clothing/suit/jacket/frontier_colonist/Initialize(mapload) + . = ..() + allowed += GLOB.colonist_suit_allowed + AddElement(/datum/element/manufacturer_examine, COMPANY_KAHRAMAN) + +/obj/item/clothing/suit/jacket/frontier_colonist/short + name = "frontier jacket" + desc = "A short coat with a water-resistant exterior and relatively comfortable interior. \ + In between? Just enough protective material to stop the odd sharp thing getting through, \ + though don't expect miracles." + icon_state = "jacket_short" + worn_icon_state = "jacket_short" + +/obj/item/clothing/suit/jacket/frontier_colonist/medical + name = "frontier medical jacket" + desc = "A short coat with a water-resistant exterior and relatively comfortable interior. \ + In between? Just enough protective material to stop the odd sharp thing getting through, \ + though don't expect miracles. This one is colored a bright red and covered in white \ + stripes to denote that someone wearing it might be able to provide medical assistance." + icon_state = "jacket_med" + worn_icon_state = "jacket_med" + +// Flak Jacket + +/obj/item/clothing/suit/frontier_colonist_flak + name = "frontier flak jacket" + desc = "A simple flak jacket with an exterior of water-resistant material. \ + Jackets like these are often found on first wave colonists that want some armor \ + due to the fact they can be made easily within a colony core type machine." + icon = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing.dmi' + icon_state = "flak" + worn_icon = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn.dmi' + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + worn_icon_teshari = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn_teshari.dmi' + worn_icon_state = "flak" + body_parts_covered = CHEST + cold_protection = CHEST|GROIN + min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT + heat_protection = CHEST|GROIN + max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT + armor_type = /datum/armor/colonist_armor + resistance_flags = NONE + allowed = null + +/obj/item/clothing/suit/frontier_colonist_flak/Initialize(mapload) + . = ..() + allowed += GLOB.colonist_suit_allowed + AddElement(/datum/element/manufacturer_examine, COMPANY_KAHRAMAN) + +// Various softcaps + +/obj/item/clothing/head/soft/frontier_colonist + name = "frontier cap" + desc = "It's a robust baseball hat in a rugged green color." + icon = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing.dmi' + icon_state = "cap" + soft_type = "cap" + soft_suffix = null + worn_icon = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn.dmi' + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + worn_icon_teshari = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn_teshari.dmi' + worn_icon_state = "cap" + +/obj/item/clothing/head/soft/frontier_colonist/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_KAHRAMAN) + +/obj/item/clothing/head/soft/frontier_colonist/medic + name = "frontier medical cap" + desc = "It's a robust baseball hat in a stylish red color. Has a white diamond to denote that its wearer might be able to provide medical assistance." + icon_state = "cap_medical" + soft_type = "cap_medical" + worn_icon_state = "cap_medical" + +// Helmet (Is it a helmet? Questionable? I'm not sure what to call this thing) + +/obj/item/clothing/head/frontier_colonist_helmet + name = "frontier soft helmet" + desc = "A unusual piece of headwear somewhere between a proper helmet and a normal cap." + icon = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing.dmi' + icon_state = "tanker" + worn_icon = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn.dmi' + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + worn_icon_teshari = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn_teshari.dmi' + worn_icon_state = "tanker" + armor_type = /datum/armor/colonist_armor + resistance_flags = NONE + flags_inv = 0 + clothing_flags = SNUG_FIT | STACKABLE_HELMET_EXEMPT + +/obj/item/clothing/head/frontier_colonist_helmet/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_KAHRAMAN) + +// Headset + +/obj/item/radio/headset/headset_frontier_colonist + name = "frontier radio headset" + desc = "A bulky headset that should hopefully survive exposure to the elements better than station headsets might. \ + Has a built-in antenna allowing the headset to work independently of a communications network." + icon = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing.dmi' + icon_state = "radio" + worn_icon = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn.dmi' + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + worn_icon_teshari = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn_teshari.dmi' + worn_icon_state = "radio" + alternate_worn_layer = FACEMASK_LAYER + 0.5 + subspace_transmission = FALSE + radiosound = 'modular_nova/modules/kahraman_equipment/sound/morse_signal.wav' + +/obj/item/radio/headset/headset_frontier_colonist/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_KAHRAMAN) + +// Gloves + +/obj/item/clothing/gloves/frontier_colonist + name = "frontier gloves" + desc = "A sturdy pair of black gloves that'll keep your precious fingers protected from the outside world. \ + They go a bit higher up the arm than most gloves should, and you aren't quite sure why." + icon = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing.dmi' + icon_state = "gloves" + worn_icon = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn.dmi' + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + worn_icon_teshari = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn_teshari.dmi' + worn_icon_state = "gloves" + greyscale_colors = "#3a373e" + siemens_coefficient = 0.25 // Doesn't insulate you entirely, but makes you a little more resistant + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT + resistance_flags = NONE + clothing_traits = list(TRAIT_QUICK_CARRY) + +/obj/item/clothing/gloves/frontier_colonist/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_KAHRAMAN) + +// Special mask + +/obj/item/clothing/mask/gas/atmos/frontier_colonist + name = "frontier gas mask" + desc = "An improved gas mask commonly seen in places where the atmosphere is less than breathable, \ + but otherwise more or less habitable. Its certified to protect against most biological hazards \ + to boot." + icon = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing.dmi' + icon_state = "mask" + worn_icon = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn.dmi' + worn_icon_digi = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn_digi.dmi' + worn_icon_teshari = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn_teshari.dmi' + worn_icon_state = "mask" + flags_inv = HIDEEYES|HIDEFACE|HIDEFACIALHAIR|HIDESNOUT + armor_type = /datum/armor/colonist_hazard + +/obj/item/clothing/mask/gas/atmos/frontier_colonist/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_KAHRAMAN) diff --git a/modular_nova/modules/kahraman_equipment/code/clothing/mod.dm b/modular_nova/modules/kahraman_equipment/code/clothing/mod.dm new file mode 100644 index 00000000000000..f3ef68e8f660b8 --- /dev/null +++ b/modular_nova/modules/kahraman_equipment/code/clothing/mod.dm @@ -0,0 +1,105 @@ +// Its modsuiting time + +/datum/mod_theme/frontier_colonist + name = "frontier hazard protective" + desc = "An unusual design of suit, in reality being no more than a slim underlayer with a built in coat and sealed helmet." + extended_desc = "The pinnacle of frontier cheap technology. Suits like this are usually not unified in design \ + though are common in frontier settlements with less than optimal infrastructure. As with most unofficial \ + designs, there are flaws and no single one is perfect, but they achieve a singular goal and that is the \ + important part. Suits such as these are made specifically for the rare emergency that creates a hazard \ + environment that other equipment just can't quite handle. Often, these suits are able to protect their users \ + from not only electricity, but also radiation, biological hazards, other people, so on. This suit will not, \ + however, protect you from yourself." + + default_skin = "colonist" + armor_type = /datum/armor/colonist_hazard + resistance_flags = FIRE_PROOF + max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT + siemens_coefficient = 0 + complexity_max = DEFAULT_MAX_COMPLEXITY - 7 + charge_drain = DEFAULT_CHARGE_DRAIN * 2 + slowdown_inactive = 1.5 + slowdown_active = 1 + inbuilt_modules = list( + /obj/item/mod/module/plate_compression/permanent, + /obj/item/mod/module/joint_torsion/permanent + ) + allowed_suit_storage = list( + /obj/item/ammo_box, + /obj/item/ammo_casing, + /obj/item/flashlight, + /obj/item/gun, + /obj/item/melee, + /obj/item/tank/internals, + /obj/item/storage/belt/holster, + /obj/item/construction, + /obj/item/fireaxe, + /obj/item/pipe_dispenser, + /obj/item/storage/bag, + /obj/item/pickaxe, + /obj/item/resonator, + /obj/item/t_scanner, + /obj/item/analyzer, + /obj/item/storage/medkit, + ) + skins = list( + "colonist" = list( + MOD_ICON_OVERRIDE = 'modular_nova/modules/kahraman_equipment/icons/modsuits/mod.dmi', + MOD_WORN_ICON_OVERRIDE = 'modular_nova/modules/kahraman_equipment/icons/modsuits/mod_worn.dmi', + HELMET_FLAGS = list( + UNSEALED_LAYER = null, + UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, + UNSEALED_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, + ), + ), + ) + +/obj/item/mod/control/pre_equipped/frontier_colonist + theme = /datum/mod_theme/frontier_colonist + applied_cell = /obj/item/stock_parts/cell/high + applied_modules = list( + /obj/item/mod/module/welding, + /obj/item/mod/module/magboot, + /obj/item/mod/module/flashlight, + /obj/item/mod/module/status_readout, + /obj/item/mod/module/thermal_regulator, + /obj/item/mod/module/rad_protection, + ) + default_pins = list( + /obj/item/mod/module/magboot, + /obj/item/mod/module/flashlight, + /obj/item/mod/module/thermal_regulator, + ) + +/obj/item/mod/control/pre_equipped/frontier_colonist/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_KAHRAMAN) + +// Plate compression module that cannot be removed + +/obj/item/mod/module/plate_compression/permanent + removable = FALSE + complexity = 0 + +// Joint torsion module that can't be removed and has no complexity + +/obj/item/mod/module/joint_torsion/permanent + removable = FALSE + complexity = 0 diff --git a/modular_nova/modules/kahraman_equipment/code/clothing/storage.dm b/modular_nova/modules/kahraman_equipment/code/clothing/storage.dm new file mode 100644 index 00000000000000..3bd57a9fa94481 --- /dev/null +++ b/modular_nova/modules/kahraman_equipment/code/clothing/storage.dm @@ -0,0 +1,88 @@ +// Backpacks + +/obj/item/storage/backpack/industrial/frontier_colonist + name = "frontier backpack" + desc = "A rugged backpack often used by settlers and explorers. Holds all of your equipment and then some." + icon = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing.dmi' + icon_state = "backpack" + worn_icon = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn.dmi' + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + worn_icon_teshari = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn_teshari.dmi' + worn_icon_state = "backpack" + inhand_icon_state = "backpack" + +/obj/item/storage/backpack/industrial/frontier_colonist/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_KAHRAMAN) + +/obj/item/storage/backpack/industrial/frontier_colonist/satchel + name = "frontier satchel" + desc = "A rugged satchel often used by settlers and explorers. Holds less of your equipment than a backpack will." + icon_state = "satchel" + worn_icon_state = "satchel" + +/obj/item/storage/backpack/industrial/frontier_colonist/messenger + name = "frontier messenger bag" + desc = "A rugged messenger bag often used by settlers and explorers. Holds less of your equipment than a backpack will." + icon_state = "messenger" + worn_icon_state = "messenger" + +// Belts + +/obj/item/storage/belt/utility/frontier_colonist + name = "frontier chest rig" + desc = "A versatile chest rig with pockets to store really whatever you could think of within. \ + That is, if whatever you could think of is within the realms of a utility belt. Fashion like this \ + comes at a price you know!" + icon = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing.dmi' + icon_state = "harness" + worn_icon = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn.dmi' + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + worn_icon_teshari = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn_teshari.dmi' + worn_icon_state = "harness" + inhand_icon_state = null + +/obj/item/storage/belt/utility/frontier_colonist/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_KAHRAMAN) + atom_storage.max_slots = 6 + atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL + // Can hold whatever a toolbelt can + some mining equipment for convenience + atom_storage.set_holdable(list( + /obj/item/airlock_painter, + /obj/item/analyzer, + /obj/item/assembly/signaler, + /obj/item/clothing/gloves, + /obj/item/construction, + /obj/item/crowbar, + /obj/item/extinguisher/mini, + /obj/item/flashlight, + /obj/item/forcefield_projector, + /obj/item/geiger_counter, + /obj/item/holosign_creator, + /obj/item/inducer, + /obj/item/lightreplacer, + /obj/item/multitool, + /obj/item/pipe_dispenser, + /obj/item/pipe_painter, + /obj/item/plunger, + /obj/item/radio, + /obj/item/screwdriver, + /obj/item/stack/cable_coil, + /obj/item/t_scanner, + /obj/item/weldingtool, + /obj/item/wirecutters, + /obj/item/wrench, + /obj/item/spess_knife, + /obj/item/gps, + /obj/item/knife, + /obj/item/mining_scanner, + /obj/item/pickaxe, + /obj/item/reagent_containers/hypospray, + /obj/item/shovel, + /obj/item/survivalcapsule, + /obj/item/storage/bag/ore, + /obj/item/storage/fancy/cigarettes, + /obj/item/wormhole_jaunter, + /obj/item/resonator, + )) diff --git a/modular_nova/modules/kahraman_equipment/code/gps_beacon.dm b/modular_nova/modules/kahraman_equipment/code/gps_beacon.dm new file mode 100644 index 00000000000000..dc7411a3e17363 --- /dev/null +++ b/modular_nova/modules/kahraman_equipment/code/gps_beacon.dm @@ -0,0 +1,23 @@ +/obj/item/gps/computer/beacon + name = "\improper GPS beacon" + desc = "A GPS beacon, anchored to the ground to prevent loss or accidental movement." + icon = 'modular_nova/modules/kahraman_equipment/icons/gps_beacon.dmi' + icon_state = "gps_beacon" + pixel_y = 0 + /// What this is undeployed back into + var/undeploy_type = /obj/item/flatpacked_machine/gps_beacon + +/obj/item/gps/computer/beacon/Initialize(mapload) + . = ..() + AddElement(/datum/element/repackable, undeploy_type, 2 SECONDS) + AddElement(/datum/element/manufacturer_examine, COMPANY_KAHRAMAN) + +/obj/item/flatpacked_machine/gps_beacon + name = "packed GPS beacon" + icon = 'modular_nova/modules/kahraman_equipment/icons/gps_beacon.dmi' + icon_state = "beacon_folded" + w_class = WEIGHT_CLASS_SMALL + type_to_deploy = /obj/item/gps/computer/beacon + +/obj/item/flatpacked_machine/gps_beacon/give_manufacturer_examine() + AddElement(/datum/element/manufacturer_examine, COMPANY_KAHRAMAN) diff --git a/modular_nova/modules/kahraman_equipment/code/looping_sounds.dm b/modular_nova/modules/kahraman_equipment/code/looping_sounds.dm new file mode 100644 index 00000000000000..b7edf20ccb5aa1 --- /dev/null +++ b/modular_nova/modules/kahraman_equipment/code/looping_sounds.dm @@ -0,0 +1,13 @@ +/datum/looping_sound/ore_thumper_fan + start_sound = 'modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_start.wav' + start_length = 3 + mid_sounds = list( + 'modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_mid_1.wav' = 1, + 'modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_mid_2.wav' = 1, + 'modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_mid_3.wav' = 1, + 'modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_mid_4.wav' = 1, + ) + mid_length = 3 SECONDS + end_sound = 'modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_end.wav' + volume = 100 + falloff_exponent = 3 diff --git a/modular_nova/modules/kahraman_equipment/code/ore_thumper.dm b/modular_nova/modules/kahraman_equipment/code/ore_thumper.dm new file mode 100644 index 00000000000000..6f67a760debe1d --- /dev/null +++ b/modular_nova/modules/kahraman_equipment/code/ore_thumper.dm @@ -0,0 +1,271 @@ +#define SLAM_JAM_DELAY 15 SECONDS + +/obj/machinery/power/colony_ore_thumper + name = "ore thumper" + desc = "A frame with a heavy block of metal suspended atop a pipe. \ + Must be deployed outdoors and given a wired power connection. \ + Forces pressurized gas into the ground which brings up buried resources." + icon = 'modular_nova/modules/kahraman_equipment/icons/ore_thumper.dmi' + icon_state = "thumper_idle" + density = TRUE + max_integrity = 250 + idle_power_usage = 0 + active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 25 // Should be 25 kw or half of a SOFIE generator + anchored = TRUE + can_change_cable_layer = FALSE + circuit = null + layer = ABOVE_MOB_LAYER + /// Are we currently working? + var/thumping = FALSE + /// Our looping fan sound that we play when turned on + var/datum/looping_sound/ore_thumper_fan/soundloop + /// How many times we've slammed, counts up until the number is high enough to make a box of materials + var/slam_jams = 0 + /// How many times we need to slam in order to produce a box of materials + var/slam_jams_needed = 15 + /// List of the thumping sounds we can choose from + var/static/list/list_of_thumper_sounds = list( + 'modular_nova/modules/kahraman_equipment/sound/thumper_thump/punch_press_1.wav', + 'modular_nova/modules/kahraman_equipment/sound/thumper_thump/punch_press_2.wav', + ) + /// Keeps track of the callback timer to make sure we don't have more than one + var/callback_tracker + /// Weighted list of the ores we can spawn + var/static/list/ore_weight_list = list( + /obj/item/stack/ore/iron = 5, + /obj/item/stack/ore/glass/basalt = 5, + /obj/item/stack/ore/plasma = 4, + /obj/item/stack/ore/uranium = 3, + /obj/item/stack/ore/silver = 3, + /obj/item/stack/ore/gold = 3, + /obj/item/stack/ore/titanium = 3, + /obj/item/stack/ore/diamond = 2, + /obj/item/stack/ore/bluespace_crystal = 1, + ) + /// How much of the listed types of ores should we spawn when spawning ore + var/static/list/ore_spawn_values = list( + /obj/item/stack/ore/iron = 25, + /obj/item/stack/ore/glass/basalt = 25, + /obj/item/stack/ore/plasma = 15, + /obj/item/stack/ore/uranium = 10, + /obj/item/stack/ore/silver = 10, + /obj/item/stack/ore/gold = 10, + /obj/item/stack/ore/titanium = 10, + /obj/item/stack/ore/diamond = 5, + /obj/item/stack/ore/bluespace_crystal = 1, + ) + /// What's the limit for ore near us? Counts by stacks, not individual amounts of ore + var/nearby_ore_limit = 10 + /// How far away does ore spawn? + var/ore_spawn_range = 2 + /// What do we undeploy into + var/undeploy_type = /obj/item/flatpacked_machine/ore_thumper + +/obj/machinery/power/colony_ore_thumper/Initialize(mapload) + . = ..() + soundloop = new(src, FALSE) + AddElement(/datum/element/repackable, undeploy_type, 4 SECONDS) + AddElement(/datum/element/manufacturer_examine, COMPANY_KAHRAMAN) + +/obj/machinery/power/colony_ore_thumper/add_context( + atom/source, + list/context, + obj/item/held_item, + mob/living/user, +) + + if(isnull(held_item)) + if(panel_open) + context[SCREENTIP_CONTEXT_LMB] = "Activate Thumper" + return CONTEXTUAL_SCREENTIP_SET + return NONE + + +/obj/machinery/power/colony_ore_thumper/examine(mob/user) + . = ..() + var/area/thumper_area = get_area(src) + if(!thumper_area.outdoors) + . += span_notice("Its must be constructed <b>outdoors</b> to function.") + if(!istype(get_turf(src), /turf/open/misc)) + . += span_notice("It must be constructed on <b>suitable terrain</b>, like ash, snow, or sand.") + . += span_notice("It must have a powered, <b>wired connection</b> running beneath it with <b>25 kW</b> of excess power to function.") + . += span_notice("It will produce a box of materials after it has slammed [slam_jams_needed] times.") + . += span_notice("Currently, it has slammed [slam_jams] / [slam_jams_needed] times needed.") + . += span_notice("It will stop producing resources if there are too many piles of ore near it.") + + +/obj/machinery/power/colony_ore_thumper/process() + var/turf/our_turf = get_turf(src) + var/obj/structure/cable/cable_under_us = locate() in our_turf + if(!cable_under_us && powernet) + disconnect_from_network() + else if(cable_under_us && !powernet) + connect_to_network() + if(thumping) + if(!see_if_we_can_work(our_turf)) + balloon_alert_to_viewers("invalid location!") + cut_that_out() + return + if(avail(active_power_usage)) + add_load(active_power_usage) + else + balloon_alert_to_viewers("not enough power!") + cut_that_out() + else if(avail(idle_power_usage)) + add_load(idle_power_usage) + + +/// Checks the turf we are on to make sure we are outdoors and on a misc turf +/obj/machinery/power/colony_ore_thumper/proc/see_if_we_can_work(turf/our_turf) + var/area/our_current_area = get_area(src) + if(!our_current_area.outdoors) + return FALSE + if(!istype(get_turf(src), /turf/open/misc)) + return FALSE + return TRUE + + +/obj/machinery/power/colony_ore_thumper/attack_hand(mob/user, list/modifiers) + . = ..() + if(.) + return + + to_chat(user, span_notice("You toggle [src]'s power button.")) + + if(thumping) + cut_that_out(user) + return + start_her_up(user) + + +/obj/machinery/power/colony_ore_thumper/attack_ai(mob/user) + return attack_hand(user) + + +/obj/machinery/power/colony_ore_thumper/attack_robot(mob/user) + return attack_hand(user) + + +/// Attempts turning the thumper on, failing if any of the conditions aren't met +/obj/machinery/power/colony_ore_thumper/proc/start_her_up(mob/user) + var/turf/our_turf = get_turf(src) + var/obj/structure/cable/cable_under_us = locate() in our_turf + if(!cable_under_us && powernet) + balloon_alert(user, "not connected to wire") + return + if(!avail(active_power_usage)) + balloon_alert(user, "not enough power") + return + + thumping = TRUE + soundloop.start() + + if(callback_tracker) + deltimer(callback_tracker) + + balloon_alert(user, "thumper started") + + callback_tracker = addtimer(CALLBACK(src, PROC_REF(slam_it_down)), SLAM_JAM_DELAY, TIMER_DELETE_ME | TIMER_STOPPABLE) + + +/// Attempts to shut the thumper down +/obj/machinery/power/colony_ore_thumper/proc/cut_that_out(mob/user) + thumping = FALSE + soundloop.stop() + if(user) + balloon_alert(user, "thumper stopped") + + +/// Makes the machine slam down, producing a box of ore if it has been slamming long enough +/obj/machinery/power/colony_ore_thumper/proc/slam_it_down() + if(!thumping) + return + var/turf/our_turf = get_turf(src) + if(!see_if_we_can_work(our_turf)) + balloon_alert_to_viewers("invalid location!") + cut_that_out() + return + // Down we go + flick("thumper_slam", src) + playsound(src, pick(list_of_thumper_sounds), 80, TRUE) + if(slam_jams < (slam_jams_needed + 1)) + slam_jams += 1 + + if(callback_tracker) + deltimer(callback_tracker) + + callback_tracker = addtimer(CALLBACK(src, PROC_REF(slam_it_down)), SLAM_JAM_DELAY, TIMER_DELETE_ME | TIMER_STOPPABLE,) + + // If the number of slams is less than that of what we need, then we can stop here + if(!(slam_jams >= slam_jams_needed)) + return + + var/nearby_ore = 0 + var/is_there_a_thumper_too = FALSE + for(var/turf/nearby_turf in orange(ore_spawn_range, src)) + for(var/ore as anything in nearby_turf.contents) + if(istype(ore, /obj/item/stack/ore)) + nearby_ore += 1 + continue + if(istype(ore, /obj/machinery/power/colony_ore_thumper)) + if(ore == src) + continue + is_there_a_thumper_too = TRUE + break + + if(nearby_ore > nearby_ore_limit) + balloon_alert_to_viewers("nearby ore too saturated") + return + + if(is_there_a_thumper_too) + balloon_alert_to_viewers("too close to another thumper") + return + + addtimer(CALLBACK(src, PROC_REF(make_some_ore)), 3 SECONDS, TIMER_DELETE_ME) + + +/// Spawns an ore box on top of the thumper +/obj/machinery/power/colony_ore_thumper/proc/make_some_ore() + var/list/nearby_valid_turfs = list() + for(var/turf/nearby_turf in orange(ore_spawn_range, src)) + if(nearby_turf.is_blocked_turf(TRUE)) + continue + if(!ismiscturf(nearby_turf)) + continue + nearby_valid_turfs.Add(nearby_turf) + // Fallback in case somehow there are no valid nearby turfs + if(!length(nearby_valid_turfs)) + nearby_valid_turfs.Add(get_turf(src)) + + for(var/iteration in 1 to rand(2, 4)) + var/turf/target_turf = pick(nearby_valid_turfs) + var/obj/item/stack/new_ore = pick_weight(ore_weight_list) + var/obj/new_ore_pile = new new_ore(target_turf, ore_spawn_values[new_ore.type]) + new /obj/effect/temp_visual/mook_dust/robot(target_turf) + playsound(new_ore_pile, 'modular_nova/master_files/sound/effects/robot_sit.ogg', 25, TRUE) + + slam_jams -= slam_jams_needed + + +// Item for deploying ore thumpers +/obj/item/flatpacked_machine/ore_thumper + name = "flat-packed ore thumper" + icon = 'modular_nova/modules/kahraman_equipment/icons/ore_thumper_item.dmi' + icon_state = "thumper_packed" + type_to_deploy = /obj/machinery/power/colony_ore_thumper + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 15, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/silver = SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) + +/obj/item/flatpacked_machine/ore_thumper/examine(mob/user) + . = ..() + . += span_notice("Its must be constructed <b>outdoors</b> to function.") + . += span_notice("It must be constructed on <b>suitable terrain</b>, like ash, snow, or sand.") + . += span_notice("It must have a powered, <b>wired connection</b> running beneath it to function.") + +/obj/item/flatpacked_machine/ore_thumper/give_manufacturer_examine() + AddElement(/datum/element/manufacturer_examine, COMPANY_KAHRAMAN) diff --git a/modular_nova/modules/kahraman_equipment/code/organic_printer.dm b/modular_nova/modules/kahraman_equipment/code/organic_printer.dm new file mode 100644 index 00000000000000..a548317c2e7936 --- /dev/null +++ b/modular_nova/modules/kahraman_equipment/code/organic_printer.dm @@ -0,0 +1,40 @@ +/obj/machinery/biogenerator/organic_printer + name = "organic materials printer" + desc = "An advanced machine seen in frontier outposts and colonies capable of turning organic plant matter into \ + reagents and items of use that a fabricator can't typically make. While the exact designs these machines have differs from \ + location to location, and upon who designed them, this one should be able to at the very least provide you with \ + some clothing, basic food supplies, and whatever else you may require." + icon = 'modular_nova/modules/kahraman_equipment/icons/biogenerator.dmi' + circuit = null + anchored = FALSE + efficiency = 1 + productivity = 2 + max_items = 35 + show_categories = list( + RND_CATEGORY_AKHTER_CLOTHING, + RND_CATEGORY_AKHTER_EQUIPMENT, + RND_CATEGORY_AKHTER_RESOURCES, + ) + +/obj/machinery/biogenerator/organic_printer/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_KAHRAMAN) + +/obj/machinery/biogenerator/organic_printer/RefreshParts() + . = ..() + efficiency = 1 + productivity = 2 + max_items = 35 + +/obj/machinery/biogenerator/organic_printer/default_deconstruction_crowbar() + return + +// Deployable item for cargo for the organics printer +/obj/item/flatpacked_machine/organics_printer + name = "organic materials printer parts kit" + icon = 'modular_nova/modules/kahraman_equipment/icons/biogenerator.dmi' + icon_state = "biogenerator_parts" + type_to_deploy = /obj/machinery/biogenerator/organic_printer + +/obj/item/flatpacked_machine/organics_printer/give_manufacturer_examine() + AddElement(/datum/element/manufacturer_examine, COMPANY_KAHRAMAN) diff --git a/modular_nova/modules/kahraman_equipment/code/organic_printer_designs/clothing.dm b/modular_nova/modules/kahraman_equipment/code/organic_printer_designs/clothing.dm new file mode 100644 index 00000000000000..478dd89beb543a --- /dev/null +++ b/modular_nova/modules/kahraman_equipment/code/organic_printer_designs/clothing.dm @@ -0,0 +1,132 @@ +// Jumpsuit + +/datum/design/frontier_jumpsuit + name = "Frontier Jumpsuit" + id = "frontier_jumpsuit" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 75) + build_path = /obj/item/clothing/under/frontier_colonist + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_CLOTHING, + ) + +// Boots + +/datum/design/frontier_boots + name = "Heavy Frontier Boots" + id = "frontier_boots" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 50) + build_path = /obj/item/clothing/shoes/jackboots/frontier_colonist + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_CLOTHING, + ) + +// Gloves + +/datum/design/frontier_gloves + name = "Frontier Gloves" + id = "frontier_gloves" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 50) + build_path = /obj/item/clothing/gloves/frontier_colonist + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_CLOTHING, + ) + +// Suit items + +/datum/design/frontier_trench + name = "Frontier Trenchcoat" + id = "frontier_trench" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/clothing/suit/jacket/frontier_colonist + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_CLOTHING, + ) + +/datum/design/frontier_jacket + name = "Frontier Jacket" + id = "frontier_jacket" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/clothing/suit/jacket/frontier_colonist/short + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_CLOTHING, + ) + +/datum/design/frontier_med_jacket + name = "Frontier Medical Jacket" + id = "frontier_med_jacket" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 125) + build_path = /obj/item/clothing/suit/jacket/frontier_colonist/medical + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_CLOTHING, + ) + +/datum/design/frontier_flak + name = "Frontier Flak Jacket" + id = "frontier_flak_jacket" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 150) + build_path = /obj/item/clothing/suit/frontier_colonist_flak + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_CLOTHING, + ) + +/datum/design/frontier_tanker_helmet + name = "Frontier Soft Helmet" + id = "frontier_tanker_helmet" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 150) + build_path = /obj/item/clothing/head/frontier_colonist_helmet + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_CLOTHING, + ) + +// Hats + +/datum/design/frontier_cap + name = "Frontier Soft Cap" + id = "frontier_cap" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 75) + build_path = /obj/item/clothing/head/soft/frontier_colonist + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_CLOTHING, + ) + +/datum/design/frontier_cap_med + name = "Frontier Medical Cap" + id = "frontier_cap_med" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/clothing/head/soft/frontier_colonist/medic + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_CLOTHING, + ) + +// That one gas mask + +/datum/design/frontier_mask + name = "Frontier Gas Mask" + id = "frontier_mask" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/clothing/mask/gas/atmos/frontier_colonist + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_CLOTHING, + ) diff --git a/modular_nova/modules/kahraman_equipment/code/organic_printer_designs/equipment.dm b/modular_nova/modules/kahraman_equipment/code/organic_printer_designs/equipment.dm new file mode 100644 index 00000000000000..cc019598dc927f --- /dev/null +++ b/modular_nova/modules/kahraman_equipment/code/organic_printer_designs/equipment.dm @@ -0,0 +1,69 @@ +// Belts + +/datum/design/frontier_chest_rig + name = "Frontier Chest Rig" + id = "frontier_chest_rig" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 150) + build_path = /obj/item/storage/belt/utility/frontier_colonist + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_EQUIPMENT, + ) + +/datum/design/frontier_med_belt + name = "Satchel Medical Kit" + id = "frontier_med_belt" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 200) + build_path = /obj/item/storage/backpack/duffelbag/deforest_medkit + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_EQUIPMENT, + ) + +/datum/design/frontier_medkit + name = "Frontier Medical Kit" + id = "frontier_medkit" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/storage/medkit/frontier + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_EQUIPMENT, + ) + +// Backpacks + +/datum/design/frontier_backpack + name = "Frontier Backpack" + id = "frontier_backpack" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/storage/backpack/industrial/frontier_colonist + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_EQUIPMENT, + ) + +/datum/design/frontier_satchel + name = "Frontier Satchel" + id = "frontier_satchel" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/storage/backpack/industrial/frontier_colonist/satchel + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_EQUIPMENT, + ) + +/datum/design/frontier_messenger + name = "Frontier Messenger Bag" + id = "frontier_messenger" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/storage/backpack/industrial/frontier_colonist/messenger + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_EQUIPMENT, + ) diff --git a/modular_nova/modules/kahraman_equipment/code/organic_printer_designs/resources.dm b/modular_nova/modules/kahraman_equipment/code/organic_printer_designs/resources.dm new file mode 100644 index 00000000000000..9fb685140db740 --- /dev/null +++ b/modular_nova/modules/kahraman_equipment/code/organic_printer_designs/resources.dm @@ -0,0 +1,21 @@ +/datum/design/organic_plastic + name = "Plastic Sheet" + id = "oganic_plastic" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 25) + build_path = /obj/item/stack/sheet/plastic + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_RESOURCES, + ) + +/datum/design/organic_cloth + name = "Cloth" + id = "oganic_cloth" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 10) + build_path = /obj/item/stack/sheet/cloth + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_AKHTER_RESOURCES, + ) diff --git a/modular_nova/modules/kahraman_equipment/icons/biogenerator.dmi b/modular_nova/modules/kahraman_equipment/icons/biogenerator.dmi new file mode 100644 index 00000000000000..5fd87ee0ace0fe Binary files /dev/null and b/modular_nova/modules/kahraman_equipment/icons/biogenerator.dmi differ diff --git a/modular_nova/modules/kahraman_equipment/icons/clothes/clothing.dmi b/modular_nova/modules/kahraman_equipment/icons/clothes/clothing.dmi new file mode 100644 index 00000000000000..bb4d9cec962b1e Binary files /dev/null and b/modular_nova/modules/kahraman_equipment/icons/clothes/clothing.dmi differ diff --git a/modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn.dmi b/modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn.dmi new file mode 100644 index 00000000000000..fa2320944460f6 Binary files /dev/null and b/modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn.dmi differ diff --git a/modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn_digi.dmi b/modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn_digi.dmi new file mode 100644 index 00000000000000..cb954472b24c16 Binary files /dev/null and b/modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn_digi.dmi differ diff --git a/modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn_teshari.dmi b/modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn_teshari.dmi new file mode 100644 index 00000000000000..da167942a77fbe Binary files /dev/null and b/modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn_teshari.dmi differ diff --git a/modular_nova/modules/kahraman_equipment/icons/gps_beacon.dmi b/modular_nova/modules/kahraman_equipment/icons/gps_beacon.dmi new file mode 100644 index 00000000000000..62c9cc11fa4f12 Binary files /dev/null and b/modular_nova/modules/kahraman_equipment/icons/gps_beacon.dmi differ diff --git a/modular_nova/modules/kahraman_equipment/icons/modsuits/mod.dmi b/modular_nova/modules/kahraman_equipment/icons/modsuits/mod.dmi new file mode 100644 index 00000000000000..a2e6c642b189db Binary files /dev/null and b/modular_nova/modules/kahraman_equipment/icons/modsuits/mod.dmi differ diff --git a/modular_nova/modules/kahraman_equipment/icons/modsuits/mod_worn.dmi b/modular_nova/modules/kahraman_equipment/icons/modsuits/mod_worn.dmi new file mode 100644 index 00000000000000..99254f654a4470 Binary files /dev/null and b/modular_nova/modules/kahraman_equipment/icons/modsuits/mod_worn.dmi differ diff --git a/modular_nova/modules/kahraman_equipment/icons/ore_thumper.dmi b/modular_nova/modules/kahraman_equipment/icons/ore_thumper.dmi new file mode 100644 index 00000000000000..a99b196ae67672 Binary files /dev/null and b/modular_nova/modules/kahraman_equipment/icons/ore_thumper.dmi differ diff --git a/modular_nova/modules/kahraman_equipment/icons/ore_thumper_item.dmi b/modular_nova/modules/kahraman_equipment/icons/ore_thumper_item.dmi new file mode 100644 index 00000000000000..7c53ff0f06a40e Binary files /dev/null and b/modular_nova/modules/kahraman_equipment/icons/ore_thumper_item.dmi differ diff --git a/modular_nova/modules/kahraman_equipment/sound/attributions.txt b/modular_nova/modules/kahraman_equipment/sound/attributions.txt new file mode 100644 index 00000000000000..19b7ff0e57e5ca --- /dev/null +++ b/modular_nova/modules/kahraman_equipment/sound/attributions.txt @@ -0,0 +1,7 @@ +The sounds at modular_skyrat/modules/colony_fabriactor_event_code/sound/thumper_fan are from https://pixabay.com/sound-effects/fan-1-6360/ + +The sounds at modular_skyrat/modules/colony_fabriactor_event_code/sound/thumper_thump are from https://pixabay.com/sound-effects/punch-press-10-ton-clip1-104921/ + +The following sounds are from https://pixabay.com/sound-effects/sos-signal-137144/ + +modular_skyrat/modules/colony_fabricator/sound/morse_signal.wav diff --git a/modular_nova/modules/kahraman_equipment/sound/morse_signal.wav b/modular_nova/modules/kahraman_equipment/sound/morse_signal.wav new file mode 100644 index 00000000000000..2f0dd5682094d3 Binary files /dev/null and b/modular_nova/modules/kahraman_equipment/sound/morse_signal.wav differ diff --git a/modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_end.wav b/modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_end.wav new file mode 100644 index 00000000000000..f89e8d20ff9d5f Binary files /dev/null and b/modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_end.wav differ diff --git a/modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_mid_1.wav b/modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_mid_1.wav new file mode 100644 index 00000000000000..96582d0ce32c70 Binary files /dev/null and b/modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_mid_1.wav differ diff --git a/modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_mid_2.wav b/modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_mid_2.wav new file mode 100644 index 00000000000000..e1656ec08ef857 Binary files /dev/null and b/modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_mid_2.wav differ diff --git a/modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_mid_3.wav b/modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_mid_3.wav new file mode 100644 index 00000000000000..7d7275b5bea113 Binary files /dev/null and b/modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_mid_3.wav differ diff --git a/modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_mid_4.wav b/modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_mid_4.wav new file mode 100644 index 00000000000000..7298e4eddca925 Binary files /dev/null and b/modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_mid_4.wav differ diff --git a/modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_start.wav b/modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_start.wav new file mode 100644 index 00000000000000..c3e95ad1e8ba5a Binary files /dev/null and b/modular_nova/modules/kahraman_equipment/sound/thumper_fan/fan_start.wav differ diff --git a/modular_nova/modules/kahraman_equipment/sound/thumper_thump/punch_press_1.wav b/modular_nova/modules/kahraman_equipment/sound/thumper_thump/punch_press_1.wav new file mode 100644 index 00000000000000..513bb1f8f19272 Binary files /dev/null and b/modular_nova/modules/kahraman_equipment/sound/thumper_thump/punch_press_1.wav differ diff --git a/modular_nova/modules/kahraman_equipment/sound/thumper_thump/punch_press_2.wav b/modular_nova/modules/kahraman_equipment/sound/thumper_thump/punch_press_2.wav new file mode 100644 index 00000000000000..c4d259839b3e8f Binary files /dev/null and b/modular_nova/modules/kahraman_equipment/sound/thumper_thump/punch_press_2.wav differ diff --git a/modular_skyrat/modules/knives/icons/bowie.dmi b/modular_nova/modules/knives/icons/bowie.dmi similarity index 100% rename from modular_skyrat/modules/knives/icons/bowie.dmi rename to modular_nova/modules/knives/icons/bowie.dmi diff --git a/modular_skyrat/modules/knives/icons/bowie_lefthand.dmi b/modular_nova/modules/knives/icons/bowie_lefthand.dmi similarity index 100% rename from modular_skyrat/modules/knives/icons/bowie_lefthand.dmi rename to modular_nova/modules/knives/icons/bowie_lefthand.dmi diff --git a/modular_skyrat/modules/knives/icons/bowie_righthand.dmi b/modular_nova/modules/knives/icons/bowie_righthand.dmi similarity index 100% rename from modular_skyrat/modules/knives/icons/bowie_righthand.dmi rename to modular_nova/modules/knives/icons/bowie_righthand.dmi diff --git a/modular_skyrat/modules/knives/icons/bowiepocket.dmi b/modular_nova/modules/knives/icons/bowiepocket.dmi similarity index 100% rename from modular_skyrat/modules/knives/icons/bowiepocket.dmi rename to modular_nova/modules/knives/icons/bowiepocket.dmi diff --git a/modular_skyrat/modules/knives/knives.dm b/modular_nova/modules/knives/knives.dm similarity index 87% rename from modular_skyrat/modules/knives/knives.dm rename to modular_nova/modules/knives/knives.dm index 4a7439d3e769e3..09349fc83539ac 100644 --- a/modular_skyrat/modules/knives/knives.dm +++ b/modular_nova/modules/knives/knives.dm @@ -4,11 +4,11 @@ /obj/item/knife/bowie name = "\improper Bowie knife" desc = "A frontiersman's classic, closer to a shortsword than a knife. It boasts a full-tanged build, a brass handguard and pommel, a wicked sharp point, and a large, heavy blade, It's almost everything you could want in a knife, besides portability." - icon = 'modular_skyrat/modules/knives/icons/bowie.dmi' + icon = 'modular_nova/modules/knives/icons/bowie.dmi' icon_state = "bowiehand" inhand_icon_state = "bowiehand" - lefthand_file = 'modular_skyrat/modules/knives/icons/bowie_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/knives/icons/bowie_righthand.dmi' + lefthand_file = 'modular_nova/modules/knives/icons/bowie_lefthand.dmi' + righthand_file = 'modular_nova/modules/knives/icons/bowie_righthand.dmi' worn_icon_state = "knife" force = 20 // Zoowee Momma! w_class = WEIGHT_CLASS_NORMAL @@ -19,7 +19,7 @@ /obj/item/storage/belt/bowie_sheath name = "\improper Bowie knife sheath" desc = "A dressed-up leather sheath featuring a brass tip. It has a large pocket clip right in the center, for ease of carrying an otherwise burdensome knife." - icon = 'modular_skyrat/modules/knives/icons/bowiepocket.dmi' + icon = 'modular_nova/modules/knives/icons/bowiepocket.dmi' icon_state = "bowiesheath" slot_flags = ITEM_SLOT_POCKETS w_class = WEIGHT_CLASS_BULKY diff --git a/modular_skyrat/modules/layer_shift/code/mob_movement.dm b/modular_nova/modules/layer_shift/code/mob_movement.dm similarity index 100% rename from modular_skyrat/modules/layer_shift/code/mob_movement.dm rename to modular_nova/modules/layer_shift/code/mob_movement.dm diff --git a/modular_skyrat/modules/layer_shift/readme.md b/modular_nova/modules/layer_shift/readme.md similarity index 100% rename from modular_skyrat/modules/layer_shift/readme.md rename to modular_nova/modules/layer_shift/readme.md diff --git a/modular_skyrat/modules/liquids/code/drains.dm b/modular_nova/modules/liquids/code/drains.dm similarity index 96% rename from modular_skyrat/modules/liquids/code/drains.dm rename to modular_nova/modules/liquids/code/drains.dm index c9b15660056d96..9a018e2542564e 100644 --- a/modular_skyrat/modules/liquids/code/drains.dm +++ b/modular_nova/modules/liquids/code/drains.dm @@ -1,7 +1,7 @@ //Structure as this doesn't need any power to work /obj/structure/drain name = "drain" - icon = 'modular_skyrat/modules/liquids/icons/obj/structures/drains.dmi' + icon = 'modular_nova/modules/liquids/icons/obj/structures/drains.dmi' icon_state = "drain" desc = "Drainage inlet embedded in the floor to prevent flooding." resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF diff --git a/modular_skyrat/modules/liquids/code/height_floors.dm b/modular_nova/modules/liquids/code/height_floors.dm similarity index 91% rename from modular_skyrat/modules/liquids/code/height_floors.dm rename to modular_nova/modules/liquids/code/height_floors.dm index 0befd7de223aa7..022266a33c0088 100644 --- a/modular_skyrat/modules/liquids/code/height_floors.dm +++ b/modular_nova/modules/liquids/code/height_floors.dm @@ -39,7 +39,7 @@ /turf/open/floor/iron/pool name = "pool floor" floor_tile = /obj/item/stack/tile/iron/pool - icon = 'modular_skyrat/modules/liquids/icons/turf/pool_tile.dmi' + icon = 'modular_nova/modules/liquids/icons/turf/pool_tile.dmi' base_icon_state = "pool_tile" icon_state = "pool_tile" liquid_height = -30 @@ -50,7 +50,7 @@ /turf/open/floor/iron/pool/cobble name = "cobblestone pool floor" - icon = 'modular_skyrat/modules/aesthetics/floors/icons/floors.dmi' + icon = 'modular_nova/modules/aesthetics/floors/icons/floors.dmi' base_icon_state = "cobble" icon_state = "cobble" footstep = FOOTSTEP_FLOOR @@ -69,7 +69,7 @@ /turf/open/floor/iron/elevated name = "elevated floor" floor_tile = /obj/item/stack/tile/iron/elevated - icon = 'modular_skyrat/modules/liquids/icons/turf/elevated_plasteel.dmi' + icon = 'modular_nova/modules/liquids/icons/turf/elevated_plasteel.dmi' icon_state = "elevated_plasteel-0" base_icon_state = "elevated_plasteel" smoothing_flags = SMOOTH_BITMASK @@ -84,7 +84,7 @@ /turf/open/floor/iron/lowered name = "lowered floor" floor_tile = /obj/item/stack/tile/iron/lowered - icon = 'modular_skyrat/modules/liquids/icons/turf/lowered_plasteel.dmi' + icon = 'modular_nova/modules/liquids/icons/turf/lowered_plasteel.dmi' icon_state = "lowered_plasteel-0" base_icon_state = "lowered_plasteel" smoothing_flags = SMOOTH_BITMASK diff --git a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_controller.dm b/modular_nova/modules/liquids/code/liquid_systems/liquid_controller.dm similarity index 86% rename from modular_skyrat/modules/liquids/code/liquid_systems/liquid_controller.dm rename to modular_nova/modules/liquids/code/liquid_systems/liquid_controller.dm index b6461c2fed1824..ed462fceaf58b8 100644 --- a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_controller.dm +++ b/modular_nova/modules/liquids/code/liquid_systems/liquid_controller.dm @@ -35,14 +35,17 @@ SUBSYSTEM_DEF(liquids) /datum/controller/subsystem/liquids/fire(resumed = FALSE) if(run_type == SSLIQUIDS_RUN_TYPE_TURFS) - if(!currentrun_active_turfs.len && active_turfs.len) - currentrun_active_turfs = active_turfs.Copy() - for(var/tur in currentrun_active_turfs) + if(!resumed) + src.currentrun_active_turfs = active_turfs.Copy() + // cache for speed + var/list/currentrun_active_turfs = src.currentrun_active_turfs + while(currentrun_active_turfs.len) + var/turf/turf = currentrun_active_turfs[currentrun_active_turfs.len] + turf.process_liquid_cell() + currentrun_active_turfs.Remove(turf) if(MC_TICK_CHECK) - return - var/turf/T = tur - T.process_liquid_cell() - currentrun_active_turfs -= T //work off of index later + break + resumed = FALSE if(!currentrun_active_turfs.len) run_type = SSLIQUIDS_RUN_TYPE_GROUPS if (run_type == SSLIQUIDS_RUN_TYPE_GROUPS) @@ -58,7 +61,8 @@ SUBSYSTEM_DEF(liquids) LG.break_group() if(MC_TICK_CHECK) run_type = SSLIQUIDS_RUN_TYPE_IMMUTABLES //No currentrun here for now - return + break + resumed = FALSE run_type = SSLIQUIDS_RUN_TYPE_IMMUTABLES if(run_type == SSLIQUIDS_RUN_TYPE_IMMUTABLES) for(var/t in active_immutables) @@ -66,8 +70,9 @@ SUBSYSTEM_DEF(liquids) T.process_immutable_liquid() /* if(MC_TICK_CHECK) - return + break */ + resumed = FALSE run_type = SSLIQUIDS_RUN_TYPE_EVAPORATION if(run_type == SSLIQUIDS_RUN_TYPE_EVAPORATION) @@ -78,7 +83,8 @@ SUBSYSTEM_DEF(liquids) if(prob(EVAPORATION_CHANCE)) T.liquids.process_evaporation() if(MC_TICK_CHECK) - return + break + resumed = FALSE evaporation_counter = 0 run_type = SSLIQUIDS_RUN_TYPE_FIRE @@ -90,11 +96,12 @@ SUBSYSTEM_DEF(liquids) T.liquids.process_fire() if(MC_TICK_CHECK) return + resumed = FALSE fire_counter = 0 run_type = SSLIQUIDS_RUN_TYPE_TURFS /datum/controller/subsystem/liquids/proc/add_active_turf(turf/T) - if(!active_turfs[T]) + if(can_fire && !active_turfs[T]) active_turfs[T] = TRUE if(T.lgroup) T.lgroup.amount_of_active_turfs++ diff --git a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_effect.dm b/modular_nova/modules/liquids/code/liquid_systems/liquid_effect.dm similarity index 96% rename from modular_skyrat/modules/liquids/code/liquid_systems/liquid_effect.dm rename to modular_nova/modules/liquids/code/liquid_systems/liquid_effect.dm index a019edc69b7ccb..860c6c8c425a55 100644 --- a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_effect.dm +++ b/modular_nova/modules/liquids/code/liquid_systems/liquid_effect.dm @@ -1,6 +1,6 @@ /obj/effect/abstract/liquid_turf name = "liquid" - icon = 'modular_skyrat/modules/liquids/icons/obj/effects/liquid.dmi' + icon = 'modular_nova/modules/liquids/icons/obj/effects/liquid.dmi' icon_state = "water-0" base_icon_state = "water" anchored = TRUE @@ -207,7 +207,7 @@ PRIVATE_PROC(TRUE) return mutable_appearance( - 'modular_skyrat/modules/liquids/icons/obj/effects/liquid_overlays.dmi', + 'modular_nova/modules/liquids/icons/obj/effects/liquid_overlays.dmi', overlay_state, overlay_layer, src, @@ -224,7 +224,7 @@ /obj/effect/abstract/liquid_turf/proc/make_state_layer(state, has_top) PRIVATE_PROC(TRUE) - . = list(make_liquid_overlay("stage[state]_bottom", ABOVE_MOB_LAYER, GAME_PLANE_UPPER)) + . = list(make_liquid_overlay("stage[state]_bottom", ABOVE_MOB_LAYER)) if(!has_top) return @@ -380,10 +380,10 @@ //Splash if(prob(WATER_HEIGH_DIFFERENCE_SOUND_CHANCE)) var/sound_to_play = pick(list( - 'modular_skyrat/modules/liquids/sound/effects/water_wade1.ogg', - 'modular_skyrat/modules/liquids/sound/effects/water_wade2.ogg', - 'modular_skyrat/modules/liquids/sound/effects/water_wade3.ogg', - 'modular_skyrat/modules/liquids/sound/effects/water_wade4.ogg' + 'modular_nova/modules/liquids/sound/effects/water_wade1.ogg', + 'modular_nova/modules/liquids/sound/effects/water_wade2.ogg', + 'modular_nova/modules/liquids/sound/effects/water_wade3.ogg', + 'modular_nova/modules/liquids/sound/effects/water_wade4.ogg' )) playsound(my_turf, sound_to_play, 60, 0) var/obj/splashy = new /obj/effect/temp_visual/liquid_splash(my_turf) @@ -429,10 +429,10 @@ if(liquid_state >= LIQUID_STATE_ANKLES) if(prob(30)) var/sound_to_play = pick(list( - 'modular_skyrat/modules/liquids/sound/effects/water_wade1.ogg', - 'modular_skyrat/modules/liquids/sound/effects/water_wade2.ogg', - 'modular_skyrat/modules/liquids/sound/effects/water_wade3.ogg', - 'modular_skyrat/modules/liquids/sound/effects/water_wade4.ogg' + 'modular_nova/modules/liquids/sound/effects/water_wade1.ogg', + 'modular_nova/modules/liquids/sound/effects/water_wade2.ogg', + 'modular_nova/modules/liquids/sound/effects/water_wade3.ogg', + 'modular_nova/modules/liquids/sound/effects/water_wade4.ogg' )) playsound(T, sound_to_play, 50, 0) if(iscarbon(AM)) @@ -449,7 +449,7 @@ SIGNAL_HANDLER var/turf/T = source if(liquid_state >= LIQUID_STATE_ANKLES && T.has_gravity(T)) - playsound(T, 'modular_skyrat/modules/liquids/sound/effects/splash.ogg', 50, 0) + playsound(T, 'modular_nova/modules/liquids/sound/effects/splash.ogg', 50, 0) if(iscarbon(M)) var/mob/living/carbon/falling_carbon = M @@ -625,7 +625,7 @@ return lowertext(reagents_string) /obj/effect/temp_visual/liquid_splash - icon = 'modular_skyrat/modules/liquids/icons/obj/effects/splash.dmi' + icon = 'modular_nova/modules/liquids/icons/obj/effects/splash.dmi' icon_state = "splash" layer = FLY_LAYER randomdir = FALSE diff --git a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_groups.dm b/modular_nova/modules/liquids/code/liquid_systems/liquid_groups.dm similarity index 98% rename from modular_skyrat/modules/liquids/code/liquid_systems/liquid_groups.dm rename to modular_nova/modules/liquids/code/liquid_systems/liquid_groups.dm index 7b6d6dfdbce388..cd669993a93e34 100644 --- a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_groups.dm +++ b/modular_nova/modules/liquids/code/liquid_systems/liquid_groups.dm @@ -147,7 +147,9 @@ GLOBAL_VAR_INIT(liquid_debug_colors, FALSE) cached_add[reagent_type] = cached_add[reagent_type] / members.len cached_volume = cached_volume / members.len cached_thermal = cached_thermal / members.len - var/temp_to_set = cached_thermal / cached_volume + var/temp_to_set + if(cached_volume) + temp_to_set = cached_thermal / cached_volume last_cached_thermal = cached_thermal last_cached_fraction_share = cached_add last_cached_total_volume = cached_volume @@ -190,7 +192,8 @@ GLOBAL_VAR_INIT(liquid_debug_colors, FALSE) cached_liquids.reagent_list = cached_add.Copy() cached_liquids.total_reagents = cached_volume - cached_liquids.temp = temp_to_set + if(temp_to_set) + cached_liquids.temp = temp_to_set cached_liquids.has_cached_share = TRUE cached_liquids.attrition = 0 diff --git a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_height.dm b/modular_nova/modules/liquids/code/liquid_systems/liquid_height.dm similarity index 100% rename from modular_skyrat/modules/liquids/code/liquid_systems/liquid_height.dm rename to modular_nova/modules/liquids/code/liquid_systems/liquid_height.dm diff --git a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_interaction.dm b/modular_nova/modules/liquids/code/liquid_systems/liquid_interaction.dm similarity index 100% rename from modular_skyrat/modules/liquids/code/liquid_systems/liquid_interaction.dm rename to modular_nova/modules/liquids/code/liquid_systems/liquid_interaction.dm diff --git a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_plumbers.dm b/modular_nova/modules/liquids/code/liquid_systems/liquid_plumbers.dm similarity index 99% rename from modular_skyrat/modules/liquids/code/liquid_systems/liquid_plumbers.dm rename to modular_nova/modules/liquids/code/liquid_systems/liquid_plumbers.dm index dd764e2c564968..341d894ee7b2d4 100644 --- a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_plumbers.dm +++ b/modular_nova/modules/liquids/code/liquid_systems/liquid_plumbers.dm @@ -2,7 +2,7 @@ * Base class for underfloor plumbing machines that mess with floor liquids. */ /obj/machinery/plumbing/floor_pump - icon = 'modular_skyrat/modules/liquids/icons/obj/structures/drains.dmi' + icon = 'modular_nova/modules/liquids/icons/obj/structures/drains.dmi' icon_state = "active_input" anchored = FALSE density = FALSE diff --git a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_pump.dm b/modular_nova/modules/liquids/code/liquid_systems/liquid_pump.dm similarity index 97% rename from modular_skyrat/modules/liquids/code/liquid_systems/liquid_pump.dm rename to modular_nova/modules/liquids/code/liquid_systems/liquid_pump.dm index 17d6c87f28499d..e6a917b968a179 100644 --- a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_pump.dm +++ b/modular_nova/modules/liquids/code/liquid_systems/liquid_pump.dm @@ -2,7 +2,7 @@ /obj/structure/liquid_pump name = "portable liquid pump" desc = "An industrial grade pump, capable of either siphoning or spewing liquids. Needs to be anchored first to work. Has a limited capacity internal storage." - icon = 'modular_skyrat/modules/liquids/icons/obj/structures/liquid_pump.dmi' + icon = 'modular_nova/modules/liquids/icons/obj/structures/liquid_pump.dmi' icon_state = "liquid_pump" density = TRUE max_integrity = 500 diff --git a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_status_effect.dm b/modular_nova/modules/liquids/code/liquid_systems/liquid_status_effect.dm similarity index 100% rename from modular_skyrat/modules/liquids/code/liquid_systems/liquid_status_effect.dm rename to modular_nova/modules/liquids/code/liquid_systems/liquid_status_effect.dm diff --git a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_turf.dm b/modular_nova/modules/liquids/code/liquid_systems/liquid_turf.dm similarity index 97% rename from modular_skyrat/modules/liquids/code/liquid_systems/liquid_turf.dm rename to modular_nova/modules/liquids/code/liquid_systems/liquid_turf.dm index 7182a6411c92b0..75aa127e854c9c 100644 --- a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_turf.dm +++ b/modular_nova/modules/liquids/code/liquid_systems/liquid_turf.dm @@ -154,6 +154,8 @@ liquids = new(src) if(liquids.immutable) return + if(!length(reagent_list)) + return var/prev_total_reagents = liquids.total_reagents var/prev_thermal_energy = prev_total_reagents * liquids.temp @@ -164,8 +166,9 @@ liquids.reagent_list[reagent] += reagent_list[reagent] liquids.total_reagents += reagent_list[reagent] - var/recieved_thermal_energy = (liquids.total_reagents - prev_total_reagents) * chem_temp - liquids.temp = (recieved_thermal_energy + prev_thermal_energy) / liquids.total_reagents + if(liquids.total_reagents) + var/recieved_thermal_energy = (liquids.total_reagents - prev_total_reagents) * chem_temp + liquids.temp = (recieved_thermal_energy + prev_thermal_energy) / liquids.total_reagents if(!no_react) //We do react so, make a simulation @@ -305,7 +308,6 @@ if(!any_share) SSliquids.active_immutables -= src - /* * OPEN TURFS */ diff --git a/modular_skyrat/modules/liquids/code/mop.dm b/modular_nova/modules/liquids/code/mop.dm similarity index 100% rename from modular_skyrat/modules/liquids/code/mop.dm rename to modular_nova/modules/liquids/code/mop.dm diff --git a/modular_skyrat/modules/liquids/code/ocean_areas.dm b/modular_nova/modules/liquids/code/ocean_areas.dm similarity index 96% rename from modular_skyrat/modules/liquids/code/ocean_areas.dm rename to modular_nova/modules/liquids/code/ocean_areas.dm index 47e5289c71d673..3f368ce703e7aa 100644 --- a/modular_skyrat/modules/liquids/code/ocean_areas.dm +++ b/modular_nova/modules/liquids/code/ocean_areas.dm @@ -32,7 +32,7 @@ name = "Bunker" /area/ruin/ocean/bioweapon_research - name = "Syndicate Ocean Base" + name = "Symphionia Ocean Base" /area/ruin/ocean/mining_site name = "Mining Site" diff --git a/modular_skyrat/modules/liquids/code/ocean_biomes.dm b/modular_nova/modules/liquids/code/ocean_biomes.dm similarity index 100% rename from modular_skyrat/modules/liquids/code/ocean_biomes.dm rename to modular_nova/modules/liquids/code/ocean_biomes.dm diff --git a/modular_skyrat/modules/liquids/code/ocean_flora.dm b/modular_nova/modules/liquids/code/ocean_flora.dm similarity index 96% rename from modular_skyrat/modules/liquids/code/ocean_flora.dm rename to modular_nova/modules/liquids/code/ocean_flora.dm index a3f93496cfd5e5..d35ea282653cb2 100644 --- a/modular_skyrat/modules/liquids/code/ocean_flora.dm +++ b/modular_nova/modules/liquids/code/ocean_flora.dm @@ -1,5 +1,5 @@ /obj/structure/flora/ocean - icon = 'modular_skyrat/modules/liquids/icons/obj/flora/ocean_flora.dmi' + icon = 'modular_nova/modules/liquids/icons/obj/flora/ocean_flora.dmi' var/random_variants = 0 /obj/structure/flora/ocean/Initialize(mapload) @@ -43,7 +43,7 @@ /obj/structure/flora/scrap name = "scrap metal" desc = "A huge chunk of metal, rusted and worn. Perhaps it can still be salvaged into something useful." - icon = 'modular_skyrat/modules/liquids/icons/obj/flora/scrap.dmi' + icon = 'modular_nova/modules/liquids/icons/obj/flora/scrap.dmi' icon_state = "scrap" anchored = FALSE density = TRUE diff --git a/modular_skyrat/modules/liquids/code/ocean_mapgen.dm b/modular_nova/modules/liquids/code/ocean_mapgen.dm similarity index 100% rename from modular_skyrat/modules/liquids/code/ocean_mapgen.dm rename to modular_nova/modules/liquids/code/ocean_mapgen.dm diff --git a/modular_skyrat/modules/liquids/code/ocean_ruins.dm b/modular_nova/modules/liquids/code/ocean_ruins.dm similarity index 100% rename from modular_skyrat/modules/liquids/code/ocean_ruins.dm rename to modular_nova/modules/liquids/code/ocean_ruins.dm diff --git a/modular_skyrat/modules/liquids/code/ocean_turfs.dm b/modular_nova/modules/liquids/code/ocean_turfs.dm similarity index 94% rename from modular_skyrat/modules/liquids/code/ocean_turfs.dm rename to modular_nova/modules/liquids/code/ocean_turfs.dm index 35066f098574b3..a509ed4cd4efb3 100644 --- a/modular_skyrat/modules/liquids/code/ocean_turfs.dm +++ b/modular_nova/modules/liquids/code/ocean_turfs.dm @@ -41,7 +41,7 @@ /turf/open/floor/plating/ocean/rock name = "rock" baseturfs = /turf/open/floor/plating/ocean/rock - icon = 'modular_skyrat/modules/liquids/icons/turf/seafloor.dmi' + icon = 'modular_nova/modules/liquids/icons/turf/seafloor.dmi' icon_state = "seafloor" base_icon_state = "seafloor" rand_variants = 0 @@ -51,7 +51,7 @@ /turf/open/floor/plating/ocean/rock/warm/fissure name = "fissure" - icon = 'modular_skyrat/modules/liquids/icons/turf/fissure.dmi' + icon = 'modular_nova/modules/liquids/icons/turf/fissure.dmi' icon_state = "fissure-0" base_icon_state = "fissure" smoothing_flags = SMOOTH_BITMASK @@ -192,7 +192,7 @@ /turf/open/floor/iron/submarine name = "submarine floor" - icon = 'modular_skyrat/modules/liquids/icons/turf/submarine.dmi' + icon = 'modular_nova/modules/liquids/icons/turf/submarine.dmi' base_icon_state = "submarine_floor" icon_state = "submarine_floor" liquid_height = -30 @@ -203,7 +203,7 @@ /turf/open/floor/iron/submarine_vents name = "submarine floor" - icon = 'modular_skyrat/modules/liquids/icons/turf/submarine.dmi' + icon = 'modular_nova/modules/liquids/icons/turf/submarine.dmi' base_icon_state = "submarine_vents" icon_state = "submarine_vents" liquid_height = -30 @@ -214,12 +214,15 @@ /turf/open/floor/iron/submarine_perf name = "submarine floor" - icon = 'modular_skyrat/modules/liquids/icons/turf/submarine.dmi' + icon = 'modular_nova/modules/liquids/icons/turf/submarine.dmi' base_icon_state = "submarine_perf" icon_state = "submarine_perf" liquid_height = -30 turf_height = -30 +/turf/open/floor/iron/submarine_perf/airless + initial_gas_mix = AIRLESS_ATMOS + /turf/open/floor/iron/submarine_perf/rust_heretic_act() return diff --git a/modular_nova/modules/liquids/code/reagents/chemistry/holder.dm b/modular_nova/modules/liquids/code/reagents/chemistry/holder.dm new file mode 100644 index 00000000000000..0e7eb92727dc39 --- /dev/null +++ b/modular_nova/modules/liquids/code/reagents/chemistry/holder.dm @@ -0,0 +1,22 @@ +/// Like add_reagent but you can enter a list. Adds them with no_react = TRUE. Format it like this: list(/datum/reagent/toxin = 10, "beer" = 15) +/datum/reagents/proc/add_noreact_reagent_list(list/list_reagents, list/data=null) + for(var/r_id in list_reagents) + var/amt = list_reagents[r_id] + add_reagent(r_id, amt, data, no_react = TRUE) + +/proc/reagent_process_flags_valid(mob/processor, datum/reagent/reagent) + if(ishuman(processor)) + var/mob/living/carbon/human/human_processor = processor + //Check if this mob's species is set and can process this type of reagent + //If we somehow avoided getting a species or reagent_flags set, we'll assume we aren't meant to process ANY reagents + if(human_processor.dna && human_processor.dna.species.reagent_flags) + var/processor_flags = human_processor.dna.species.reagent_flags + if((reagent.process_flags & REAGENT_SYNTHETIC) && (processor_flags & PROCESS_SYNTHETIC)) //SYNTHETIC-oriented reagents require PROCESS_SYNTHETIC + return TRUE + if((reagent.process_flags & REAGENT_ORGANIC) && (processor_flags & PROCESS_ORGANIC)) //ORGANIC-oriented reagents require PROCESS_ORGANIC + return TRUE + return FALSE + else if(reagent.process_flags == REAGENT_SYNTHETIC) + //We'll assume that non-human mobs lack the ability to process synthetic-oriented reagents (adjust this if we need to change that assumption) + return FALSE + return TRUE diff --git a/modular_skyrat/modules/liquids/code/reagents/chemistry/reagents.dm b/modular_nova/modules/liquids/code/reagents/chemistry/reagents.dm similarity index 100% rename from modular_skyrat/modules/liquids/code/reagents/chemistry/reagents.dm rename to modular_nova/modules/liquids/code/reagents/chemistry/reagents.dm diff --git a/modular_skyrat/modules/liquids/code/reagents/reagent_containers.dm b/modular_nova/modules/liquids/code/reagents/reagent_containers.dm similarity index 100% rename from modular_skyrat/modules/liquids/code/reagents/reagent_containers.dm rename to modular_nova/modules/liquids/code/reagents/reagent_containers.dm diff --git a/modular_skyrat/modules/liquids/code/tools.dm b/modular_nova/modules/liquids/code/tools.dm similarity index 100% rename from modular_skyrat/modules/liquids/code/tools.dm rename to modular_nova/modules/liquids/code/tools.dm diff --git a/modular_skyrat/modules/liquids/icons/obj/effects/liquid.dmi b/modular_nova/modules/liquids/icons/obj/effects/liquid.dmi similarity index 100% rename from modular_skyrat/modules/liquids/icons/obj/effects/liquid.dmi rename to modular_nova/modules/liquids/icons/obj/effects/liquid.dmi diff --git a/modular_skyrat/modules/liquids/icons/obj/effects/liquid_overlays.dmi b/modular_nova/modules/liquids/icons/obj/effects/liquid_overlays.dmi similarity index 100% rename from modular_skyrat/modules/liquids/icons/obj/effects/liquid_overlays.dmi rename to modular_nova/modules/liquids/icons/obj/effects/liquid_overlays.dmi diff --git a/modular_skyrat/modules/liquids/icons/obj/effects/splash.dmi b/modular_nova/modules/liquids/icons/obj/effects/splash.dmi similarity index 100% rename from modular_skyrat/modules/liquids/icons/obj/effects/splash.dmi rename to modular_nova/modules/liquids/icons/obj/effects/splash.dmi diff --git a/modular_skyrat/modules/liquids/icons/obj/flora/ocean_flora.dmi b/modular_nova/modules/liquids/icons/obj/flora/ocean_flora.dmi similarity index 100% rename from modular_skyrat/modules/liquids/icons/obj/flora/ocean_flora.dmi rename to modular_nova/modules/liquids/icons/obj/flora/ocean_flora.dmi diff --git a/modular_skyrat/modules/liquids/icons/obj/flora/scrap.dmi b/modular_nova/modules/liquids/icons/obj/flora/scrap.dmi similarity index 100% rename from modular_skyrat/modules/liquids/icons/obj/flora/scrap.dmi rename to modular_nova/modules/liquids/icons/obj/flora/scrap.dmi diff --git a/modular_skyrat/modules/liquids/icons/obj/scrap.dmi b/modular_nova/modules/liquids/icons/obj/scrap.dmi similarity index 100% rename from modular_skyrat/modules/liquids/icons/obj/scrap.dmi rename to modular_nova/modules/liquids/icons/obj/scrap.dmi diff --git a/modular_skyrat/modules/liquids/icons/obj/structures/drains.dmi b/modular_nova/modules/liquids/icons/obj/structures/drains.dmi similarity index 100% rename from modular_skyrat/modules/liquids/icons/obj/structures/drains.dmi rename to modular_nova/modules/liquids/icons/obj/structures/drains.dmi diff --git a/modular_skyrat/modules/liquids/icons/obj/structures/liquid_pump.dmi b/modular_nova/modules/liquids/icons/obj/structures/liquid_pump.dmi similarity index 100% rename from modular_skyrat/modules/liquids/icons/obj/structures/liquid_pump.dmi rename to modular_nova/modules/liquids/icons/obj/structures/liquid_pump.dmi diff --git a/modular_skyrat/modules/liquids/icons/turf/elevated_plasteel.dmi b/modular_nova/modules/liquids/icons/turf/elevated_plasteel.dmi similarity index 100% rename from modular_skyrat/modules/liquids/icons/turf/elevated_plasteel.dmi rename to modular_nova/modules/liquids/icons/turf/elevated_plasteel.dmi diff --git a/modular_skyrat/modules/liquids/icons/turf/fissure.dmi b/modular_nova/modules/liquids/icons/turf/fissure.dmi similarity index 100% rename from modular_skyrat/modules/liquids/icons/turf/fissure.dmi rename to modular_nova/modules/liquids/icons/turf/fissure.dmi diff --git a/modular_skyrat/modules/liquids/icons/turf/lowered_plasteel.dmi b/modular_nova/modules/liquids/icons/turf/lowered_plasteel.dmi similarity index 100% rename from modular_skyrat/modules/liquids/icons/turf/lowered_plasteel.dmi rename to modular_nova/modules/liquids/icons/turf/lowered_plasteel.dmi diff --git a/modular_skyrat/modules/liquids/icons/turf/pool_tile.dmi b/modular_nova/modules/liquids/icons/turf/pool_tile.dmi similarity index 100% rename from modular_skyrat/modules/liquids/icons/turf/pool_tile.dmi rename to modular_nova/modules/liquids/icons/turf/pool_tile.dmi diff --git a/modular_skyrat/modules/liquids/icons/turf/seafloor.dmi b/modular_nova/modules/liquids/icons/turf/seafloor.dmi similarity index 100% rename from modular_skyrat/modules/liquids/icons/turf/seafloor.dmi rename to modular_nova/modules/liquids/icons/turf/seafloor.dmi diff --git a/modular_skyrat/modules/liquids/icons/turf/smoothrocks.dmi b/modular_nova/modules/liquids/icons/turf/smoothrocks.dmi similarity index 100% rename from modular_skyrat/modules/liquids/icons/turf/smoothrocks.dmi rename to modular_nova/modules/liquids/icons/turf/smoothrocks.dmi diff --git a/modular_skyrat/modules/liquids/icons/turf/submarine.dmi b/modular_nova/modules/liquids/icons/turf/submarine.dmi similarity index 100% rename from modular_skyrat/modules/liquids/icons/turf/submarine.dmi rename to modular_nova/modules/liquids/icons/turf/submarine.dmi diff --git a/modular_skyrat/modules/liquids/sound/effects/heart_beat_loop3.ogg b/modular_nova/modules/liquids/sound/effects/heart_beat_loop3.ogg similarity index 100% rename from modular_skyrat/modules/liquids/sound/effects/heart_beat_loop3.ogg rename to modular_nova/modules/liquids/sound/effects/heart_beat_loop3.ogg diff --git a/modular_skyrat/modules/liquids/sound/effects/heart_beat_once.ogg b/modular_nova/modules/liquids/sound/effects/heart_beat_once.ogg similarity index 100% rename from modular_skyrat/modules/liquids/sound/effects/heart_beat_once.ogg rename to modular_nova/modules/liquids/sound/effects/heart_beat_once.ogg diff --git a/modular_skyrat/modules/liquids/sound/effects/splash.ogg b/modular_nova/modules/liquids/sound/effects/splash.ogg similarity index 100% rename from modular_skyrat/modules/liquids/sound/effects/splash.ogg rename to modular_nova/modules/liquids/sound/effects/splash.ogg diff --git a/modular_skyrat/modules/liquids/sound/effects/water_wade1.ogg b/modular_nova/modules/liquids/sound/effects/water_wade1.ogg similarity index 100% rename from modular_skyrat/modules/liquids/sound/effects/water_wade1.ogg rename to modular_nova/modules/liquids/sound/effects/water_wade1.ogg diff --git a/modular_skyrat/modules/liquids/sound/effects/water_wade2.ogg b/modular_nova/modules/liquids/sound/effects/water_wade2.ogg similarity index 100% rename from modular_skyrat/modules/liquids/sound/effects/water_wade2.ogg rename to modular_nova/modules/liquids/sound/effects/water_wade2.ogg diff --git a/modular_skyrat/modules/liquids/sound/effects/water_wade3.ogg b/modular_nova/modules/liquids/sound/effects/water_wade3.ogg similarity index 100% rename from modular_skyrat/modules/liquids/sound/effects/water_wade3.ogg rename to modular_nova/modules/liquids/sound/effects/water_wade3.ogg diff --git a/modular_skyrat/modules/liquids/sound/effects/water_wade4.ogg b/modular_nova/modules/liquids/sound/effects/water_wade4.ogg similarity index 100% rename from modular_skyrat/modules/liquids/sound/effects/water_wade4.ogg rename to modular_nova/modules/liquids/sound/effects/water_wade4.ogg diff --git a/modular_skyrat/modules/liquids/sound/effects/watersplash.ogg b/modular_nova/modules/liquids/sound/effects/watersplash.ogg similarity index 100% rename from modular_skyrat/modules/liquids/sound/effects/watersplash.ogg rename to modular_nova/modules/liquids/sound/effects/watersplash.ogg diff --git a/modular_skyrat/modules/liquids/sound/emotes/nose_boop.ogg b/modular_nova/modules/liquids/sound/emotes/nose_boop.ogg similarity index 100% rename from modular_skyrat/modules/liquids/sound/emotes/nose_boop.ogg rename to modular_nova/modules/liquids/sound/emotes/nose_boop.ogg diff --git a/modular_skyrat/modules/loadouts/loadout_items/_loadout_datum.dm b/modular_nova/modules/loadouts/loadout_items/_loadout_datum.dm similarity index 98% rename from modular_skyrat/modules/loadouts/loadout_items/_loadout_datum.dm rename to modular_nova/modules/loadouts/loadout_items/_loadout_datum.dm index 8057753b1431dd..5a4d3bc6a5411f 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/_loadout_datum.dm +++ b/modular_nova/modules/loadouts/loadout_items/_loadout_datum.dm @@ -121,8 +121,10 @@ GLOBAL_LIST_EMPTY(all_loadout_datums) if(equipped_item) if(INFO_NAMED in our_loadout[item_path]) equipped_item.name = our_loadout[item_path][INFO_NAMED] + equipped_item.on_loadout_custom_named() if(INFO_DESCRIBED in our_loadout[item_path]) equipped_item.desc = our_loadout[item_path][INFO_DESCRIBED] + equipped_item.on_loadout_custom_described() else stack_trace("[type] on_equip_item(): Could not locate item (path: [item_path]) in [equipper]'s contents to set name/desc!") diff --git a/modular_skyrat/modules/loadouts/loadout_items/donator/personal/donator_personal.dm b/modular_nova/modules/loadouts/loadout_items/donator/personal/donator_personal.dm similarity index 91% rename from modular_skyrat/modules/loadouts/loadout_items/donator/personal/donator_personal.dm rename to modular_nova/modules/loadouts/loadout_items/donator/personal/donator_personal.dm index 1cdba770f6301b..1dad21e6ae9674 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/donator/personal/donator_personal.dm +++ b/modular_nova/modules/loadouts/loadout_items/donator/personal/donator_personal.dm @@ -1,11 +1,11 @@ /datum/loadout_item/toys/miafoxplush name = "Mia’s fox plushie" - item_path = /obj/item/toy/plush/skyrat/fox/mia + item_path = /obj/item/toy/plush/nova/fox/mia ckeywhitelist = list("fuzlet") /datum/loadout_item/toys/teasefoxplush name = "Teasable fox plushie" - item_path = /obj/item/toy/plush/skyrat/fox/kailyn + item_path = /obj/item/toy/plush/nova/fox/kailyn ckeywhitelist = list("ratraus") /datum/loadout_item/pocket_items/drawingtablet @@ -13,12 +13,6 @@ item_path = /obj/item/canvas/drawingtablet ckeywhitelist = list("thedragmeme") -/datum/loadout_item/shoes/heeled_jackboots - name = "High-heel Jackboots" - item_path = /obj/item/clothing/shoes/jackboots/heel -// ckeywhitelist = list("thedragmeme") -//As they requested, it's properly public now. - /datum/loadout_item/suit/furcoat name = "Leather coat with fur" item_path = /obj/item/clothing/suit/furcoat @@ -178,9 +172,9 @@ item_path = /obj/item/clothing/under/wetsuit_norm ckeywhitelist = list("ChillyLobster") -/datum/loadout_item/mask/kindle_mask - name = "Kindle's mask" - item_path = /obj/item/clothing/mask/animal/kindle +/datum/loadout_item/mask/wolf_mask + name = "Wolf mask" + item_path = /obj/item/clothing/mask/animal/wolf ckeywhitelist = list("theooz") /datum/loadout_item/head/drake_skull @@ -287,7 +281,7 @@ /datum/loadout_item/under/jumpsuit/mechanic name = "Mechanic's Overalls" - item_path = /obj/item/clothing/under/misc/skyrat/mechanic + item_path = /obj/item/clothing/under/misc/nova/mechanic ckeywhitelist = list("cypressb") /datum/loadout_item/under/jumpsuit/mikubikini @@ -365,7 +359,7 @@ /datum/loadout_item/toys/voodooplush name = "Voodoo Doll" - item_path = /obj/item/toy/plush/skyrat/voodoo + item_path = /obj/item/toy/plush/nova/voodoo ckeywhitelist = list("gamerguy14948") /datum/loadout_item/mask/octusvox @@ -400,7 +394,7 @@ /datum/loadout_item/suit/tenrai_coat name = "Tenrai Coat" - item_path = /obj/item/clothing/suit/toggle/labcoat/skyrat/tenrai + item_path = /obj/item/clothing/suit/toggle/labcoat/nova/tenrai ckeywhitelist = list("cimika") /datum/loadout_item/neck/fluffycloak @@ -415,7 +409,7 @@ /datum/loadout_item/toys/zappplush name = "Lil' Zapp Plushie" - item_path = /obj/item/toy/plush/skyrat/zapp + item_path = /obj/item/toy/plush/nova/zapp donator_only = TRUE /datum/loadout_item/pocket_items/tacticalbrush @@ -430,12 +424,12 @@ /datum/loadout_item/toys/immovable_rod_plush name = "Immovable Rod Plushie" - item_path = /obj/item/toy/plush/skyrat/immovable_rod + item_path = /obj/item/toy/plush/nova/immovable_rod ckeywhitelist = list("tobjv") /datum/loadout_item/toys/tesh_plush name = "Squish-Me-Tesh Plush" - item_path = /obj/item/toy/plush/skyrat/tesh + item_path = /obj/item/toy/plush/nova/tesh ckeywhitelist = list("tobjv") /datum/loadout_item/under/jumpsuit/redhosneck @@ -452,7 +446,7 @@ /datum/loadout_item/toys/roselia_plush name = "Obscene Sergal Plushie" - item_path = /obj/item/toy/plush/skyrat/roselia + item_path = /obj/item/toy/plush/nova/roselia ckeywhitelist = list("ultimarifox") /datum/loadout_item/accessory/mercbadge @@ -462,11 +456,11 @@ /datum/loadout_item/toys/plushe_winrow name = "Dark and Brooding Lizard Plushie" - item_path = /obj/item/toy/plush/skyrat/plushie_winrow + item_path = /obj/item/toy/plush/nova/plushie_winrow /datum/loadout_item/toys/plushie_star name = "Star Angel Plushie" - item_path = /obj/item/toy/plush/skyrat/plushie_star + item_path = /obj/item/toy/plush/nova/plushie_star /datum/loadout_item/suit/rainbowcoat name = "Rainbow Coat" @@ -503,27 +497,27 @@ /datum/loadout_item/toys/CFBonnie name = "Chunko Fop: Blue Bunny Plushie" - item_path = /obj/item/toy/plush/skyrat/chunko/bonnie + item_path = /obj/item/toy/plush/nova/chunko/bonnie donator_only = TRUE /datum/loadout_item/toys/CFAndrew name = "Chunko Fop: Green Bunny Plushie" - item_path = /obj/item/toy/plush/skyrat/chunko/andrew + item_path = /obj/item/toy/plush/nova/chunko/andrew donator_only = TRUE /datum/loadout_item/toys/CFInessa name = "Chunko Fop: Medical Bear Plushie" - item_path = /obj/item/toy/plush/skyrat/chunko/inessa + item_path = /obj/item/toy/plush/nova/chunko/inessa donator_only = TRUE /datum/loadout_item/toys/plushie_chiara name = "Commanding Fox Plushie" - item_path = /obj/item/toy/plush/skyrat/plushie_chiara + item_path = /obj/item/toy/plush/nova/plushie_chiara ckeywhitelist = list("srq", "superlagg") /datum/loadout_item/toys/plushie_dan name = "Comfy Fox Plushie" - item_path = /obj/item/toy/plush/skyrat/plushie_dan + item_path = /obj/item/toy/plush/nova/plushie_dan ckeywhitelist = list("srq", "superlagg") /datum/loadout_item/under/jumpsuit/bubbly_clown @@ -539,7 +533,7 @@ /datum/loadout_item/toys/plushie_jeanne name = "Masked Roboticist Plushie" - item_path = /obj/item/toy/plush/skyrat/fox/plushie_jeanne + item_path = /obj/item/toy/plush/nova/fox/plushie_jeanne // ckeywhitelist = list("klb100") // Asked it to be public. /datum/loadout_item/under/jumpsuit/tactichill @@ -554,7 +548,7 @@ /datum/loadout_item/toys/plushie_azyre name = "Handsome Chef Plushie" - item_path = /obj/item/toy/plush/skyrat/plushie_azyre + item_path = /obj/item/toy/plush/nova/plushie_azyre ckeywhitelist = list("dalaoazure") /datum/loadout_item/pocket_items/khicigs @@ -575,17 +569,17 @@ /datum/loadout_item/toys/plushie_razurath name = "Science Shark Plushie" - item_path = /obj/item/toy/plush/skyrat/plushie_razurath + item_path = /obj/item/toy/plush/nova/plushie_razurath ckeywhitelist = list("razurath") /datum/loadout_item/toys/plushie_razurath/second name = "Dwarf Shark Plushie" - item_path = /obj/item/toy/plush/skyrat/plushie_razurath/second + item_path = /obj/item/toy/plush/nova/plushie_razurath/second ckeywhitelist = list("razurath") /datum/loadout_item/toys/plushie_elofy name = "Bumbling Wolfgirl Plushie" - item_path = /obj/item/toy/plush/skyrat/plushie_elofy + item_path = /obj/item/toy/plush/nova/plushie_elofy //ckeywhitelist = list("october23") // Asked it to be public. /datum/loadout_item/suit/elofy @@ -594,6 +588,12 @@ ckeywhitelist = list("october23") restricted_roles = list(JOB_HEAD_OF_SECURITY) +/datum/loadout_item/head/elofy + name = "Solar Admiral Hat" + item_path = /obj/item/clothing/head/hats/hos/elofy + ckeywhitelist = list("october23") + restricted_roles = list(JOB_HEAD_OF_SECURITY) + /datum/loadout_item/gloves/elofy name = "Solar Admiral Gloves" item_path = /obj/item/clothing/gloves/elofy @@ -631,7 +631,7 @@ /datum/loadout_item/under/jumpsuit/goldenkimono name = "Short-Sleeved Kimono" - item_path = /obj/item/clothing/under/costume/skyrat/kimono/sigmar + item_path = /obj/item/clothing/under/costume/nova/kimono/sigmar ckeywhitelist = list("sigmaralkahest") /datum/loadout_item/suit/blackraincoat @@ -641,7 +641,7 @@ /datum/loadout_item/toys/plushy_syntax1112 name = "Lop Bunny Plushie" - item_path = /obj/item/toy/plush/skyrat/plushie_syntax1112 + item_path = /obj/item/toy/plush/nova/plushie_syntax1112 ckeywhitelist = list("syntax1112") /datum/loadout_item/gloves/hypnoring_nuke @@ -655,19 +655,19 @@ ckeywhitelist = list("somerandomowl") /datum/loadout_item/head/razurathhat - name = "Golden Nanotrasen Officer Cap" + name = "Golden Symphionia Officer Cap" item_path = /obj/item/clothing/head/razurathhat ckeywhitelist = list("razurath") /datum/loadout_item/suit/razurathcoat - name = "Golden Nanotrasen Officer Coat" + name = "Golden Symphionia Officer Coat" item_path = /obj/item/clothing/suit/razurathcoat ckeywhitelist = list("razurath") /datum/loadout_item/pocket_items/masvedishcigar name = "Holocigar" item_path = /obj/item/clothing/mask/holocigarette/masvedishcigar - ckeywhitelist = list("masvedish", "lutowski", "lawful", "anyacers", "apolloafk", "avianaviator", "notdhu", "plejek") + // Asked it to be public, and as such has no whitelist. /datum/loadout_item/suit/lt3_armor name = "Silver Jacket Mk II" @@ -722,7 +722,7 @@ /datum/loadout_item/suit/nobility_dresscoat name = "Nobility Dresscoat" - item_path = /obj/item/clothing/suit/toggle/labcoat/medical/vic_dresscoat_donator + item_path = /obj/item/clothing/suit/toggle/labcoat/vic_dresscoat_donator ckeywhitelist = list("nikotheguydude") /datum/loadout_item/suit/anubite_headpiece @@ -739,3 +739,18 @@ name = "Cat-Ear Headphones" item_path = /obj/item/instrument/piano_synth/headphones/catear_headphone ckeywhitelist = list("dtfe") + +/datum/loadout_item/neck/trenchcoat + name = "Graceful Trenchcoat" + item_path = /obj/item/clothing/neck/trenchcoat + ckeywhitelist = list("Smol42", "Awers855") + +/datum/loadout_item/under/jumpsuit/old_qm_jumpskirt + name = "Old Quartermaster's Jumpskirt" + item_path = /obj/item/clothing/under/rank/cargo/qm/skirt/old + ckeywhitelist = list("jasohavents") + +/datum/loadout_item/pocket_items/toaster_implant + name = "Toaster Implant" + item_path = /obj/item/implanter/toaster + ckeywhitelist = list("jasohavents") diff --git a/modular_nova/modules/loadouts/loadout_items/loadout_datum_accessory.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_accessory.dm new file mode 100644 index 00000000000000..addd37faf581a2 --- /dev/null +++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_accessory.dm @@ -0,0 +1,104 @@ +/* +* LOADOUT ITEM DATUMS FOR THE ACCESSORY SLOT +*/ + +/// Accessory Items (Moves overrided items to backpack) +GLOBAL_LIST_INIT(loadout_accessory, generate_loadout_items(/datum/loadout_item/accessory)) + +/datum/loadout_item/accessory + category = LOADOUT_ITEM_ACCESSORY + +/datum/loadout_item/accessory/pre_equip_item(datum/outfit/outfit, datum/outfit/outfit_important_for_life, visuals_only = FALSE) + if(initial(outfit_important_for_life.accessory)) + .. () + return TRUE + +/datum/loadout_item/accessory/insert_path_into_outfit(datum/outfit/outfit, mob/living/carbon/human/equipper, visuals_only = FALSE, override_items = LOADOUT_OVERRIDE_BACKPACK) + if(override_items == LOADOUT_OVERRIDE_BACKPACK && !visuals_only) + if(outfit.accessory) + LAZYADD(outfit.backpack_contents, outfit.accessory) + outfit.accessory = item_path + else + outfit.accessory = item_path + +/datum/loadout_item/accessory/maid_apron + name = "Maid Apron" + item_path = /obj/item/clothing/accessory/maidapron + +/datum/loadout_item/accessory/waistcoat + name = "Waistcoat" + item_path = /obj/item/clothing/accessory/waistcoat + +/datum/loadout_item/accessory/pocket_protector + name = "Pocket Protector (Empty)" + item_path = /obj/item/clothing/accessory/pocketprotector + +/datum/loadout_item/accessory/full_pocket_protector + name = "Pocket Protector (Filled)" + item_path = /obj/item/clothing/accessory/pocketprotector/full + additional_tooltip_contents = list("CONTAINS PENS - This item contains multiple pens on spawn.") + +/datum/loadout_item/accessory/ribbon + name = "Ribbon" + item_path = /obj/item/clothing/accessory/medal/ribbon + +/datum/loadout_item/accessory/pride + name = "Pride Pin" + item_path = /obj/item/clothing/accessory/pride + +/* +* ARMBANDS +*/ + +/datum/loadout_item/accessory/armband_medblue + name = "Blue-White Armband" + item_path = /obj/item/clothing/accessory/armband/medblue/nonsec + +/datum/loadout_item/accessory/armband_med + name = "White Armband" + item_path = /obj/item/clothing/accessory/armband/med/nonsec + +/datum/loadout_item/accessory/armband_cargo + name = "Brown Armband" + item_path = /obj/item/clothing/accessory/armband/cargo/nonsec + +/datum/loadout_item/accessory/armband_engineering + name = "Orange Armband" + item_path = /obj/item/clothing/accessory/armband/engine/nonsec + +/datum/loadout_item/accessory/armband_security_nonsec + name = "Blue Armband" + item_path = /obj/item/clothing/accessory/armband/deputy/lopland/nonsec + +/datum/loadout_item/accessory/armband_security + name = "Security Armband" + item_path = /obj/item/clothing/accessory/armband/deputy/lopland + restricted_roles = list(JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_DETECTIVE, JOB_CORRECTIONS_OFFICER) + +/datum/loadout_item/accessory/armband_security_deputy + name = "Security Deputy Armband" + item_path = /obj/item/clothing/accessory/armband/deputy + restricted_roles = list(JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_DETECTIVE, JOB_CORRECTIONS_OFFICER) + +/datum/loadout_item/accessory/armband_science + name = "Purple Armband" + item_path = /obj/item/clothing/accessory/armband/science/nonsec + +/* +* ARMOURLESS +*/ + +/datum/loadout_item/accessory/bone_charm + name = "Heirloom Bone Talisman" + item_path = /obj/item/clothing/accessory/talisman/armourless + additional_tooltip_contents = list(TOOLTIP_NO_ARMOR) + +/datum/loadout_item/accessory/bone_codpiece + name = "Heirloom Skull Codpiece" + item_path = /obj/item/clothing/accessory/skullcodpiece/armourless + additional_tooltip_contents = list(TOOLTIP_NO_ARMOR) + +/datum/loadout_item/accessory/sinew_kilt + name = "Heirloom Sinew Skirt" + item_path = /obj/item/clothing/accessory/skilt/armourless + additional_tooltip_contents = list(TOOLTIP_NO_ARMOR) diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_belts.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_belts.dm similarity index 100% rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_belts.dm rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_belts.dm diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_ears.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_ears.dm similarity index 100% rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_ears.dm rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_ears.dm diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_glasses.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_glasses.dm similarity index 96% rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_glasses.dm rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_glasses.dm index b387d79001c5a6..fd46e98670b975 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_glasses.dm +++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_glasses.dm @@ -1,6 +1,6 @@ /* -* LOADOUT ITEM DATUMS FOR THE EYE SLOT -*/ + * LOADOUT ITEM DATUMS FOR THE EYE SLOT + */ /// Glasses Slot Items (Moves overrided items to backpack) GLOBAL_LIST_INIT(loadout_glasses, generate_loadout_items(/datum/loadout_item/glasses)) @@ -34,9 +34,10 @@ GLOBAL_LIST_INIT(loadout_glasses, generate_loadout_items(/datum/loadout_item/gla || equipped_glasses.invis_view \ || !isnull(equipped_glasses.color_cutoffs)) equipper.update_sight() + /* -* PRESCRIPTION GLASSES -*/ + * PRESCRIPTION GLASSES + */ /datum/loadout_item/glasses/prescription_glasses name = "Glasses" @@ -61,7 +62,11 @@ GLOBAL_LIST_INIT(loadout_glasses, generate_loadout_items(/datum/loadout_item/gla /datum/loadout_item/glasses/prescription_glasses/better name = "Modern Glasses" - item_path = /obj/item/clothing/glasses/betterunshit + item_path = /obj/item/clothing/glasses/regular/betterunshit + +/datum/loadout_item/glasses/prescription_glasses/kim + name = "Binoclard Lenses" + item_path = /obj/item/clothing/glasses/regular/kim /* * COSMETIC GLASSES @@ -140,36 +145,36 @@ GLOBAL_LIST_INIT(loadout_glasses, generate_loadout_items(/datum/loadout_item/gla item_path = /obj/item/clothing/glasses/hud/ar/projector /* -* JOB-LOCKED -*/ + * JOB-LOCKED + */ + +/datum/loadout_item/glasses/sechud + name = "Security HUD" + item_path = /obj/item/clothing/glasses/hud/security + restricted_roles = list(JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_HEAD_OF_SECURITY, JOB_CORRECTIONS_OFFICER, JOB_BOUNCER, JOB_ORDERLY, JOB_SCIENCE_GUARD, JOB_CUSTOMS_AGENT, JOB_ENGINEERING_GUARD, JOB_BLUESHIELD) /datum/loadout_item/glasses/medicpatch - name = "Medical Eyepatch" + name = "Medical HUD Eyepatch" item_path = /obj/item/clothing/glasses/hud/eyepatch/med restricted_roles = list(JOB_MEDICAL_DOCTOR, JOB_CHIEF_MEDICAL_OFFICER, JOB_GENETICIST, JOB_CHEMIST, JOB_VIROLOGIST, JOB_PARAMEDIC, JOB_ORDERLY, JOB_CORONER) /datum/loadout_item/glasses/robopatch - name = "Diagnostic Eyepatch" + name = "Diagnostic HUD Eyepatch" item_path = /obj/item/clothing/glasses/hud/eyepatch/diagnostic restricted_roles = list(JOB_SCIENTIST, JOB_ROBOTICIST, JOB_GENETICIST, JOB_RESEARCH_DIRECTOR, JOB_SCIENCE_GUARD) /datum/loadout_item/glasses/scipatch - name = "Science Eyepatch" + name = "Science HUD Eyepatch" item_path = /obj/item/clothing/glasses/hud/eyepatch/sci restricted_roles = list(JOB_SCIENTIST, JOB_ROBOTICIST, JOB_GENETICIST, JOB_RESEARCH_DIRECTOR, JOB_CHEMIST, JOB_SCIENCE_GUARD, JOB_VIROLOGIST) /datum/loadout_item/glasses/mesonpatch - name = "Meson Eyepatch" + name = "Meson HUD Eyepatch" item_path = /obj/item/clothing/glasses/hud/eyepatch/meson restricted_roles = list(JOB_QUARTERMASTER, JOB_CARGO_TECHNICIAN, JOB_SHAFT_MINER, JOB_CUSTOMS_AGENT, JOB_CHIEF_ENGINEER, JOB_STATION_ENGINEER, JOB_ATMOSPHERIC_TECHNICIAN, JOB_ENGINEERING_GUARD) -/datum/loadout_item/glasses/sechud - name = "Security HUD" - item_path = /obj/item/clothing/glasses/hud/security - restricted_roles = list(JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_HEAD_OF_SECURITY, JOB_CORRECTIONS_OFFICER, JOB_BOUNCER, JOB_ORDERLY, JOB_SCIENCE_GUARD, JOB_CUSTOMS_AGENT, JOB_ENGINEERING_GUARD, JOB_BLUESHIELD) - /datum/loadout_item/glasses/secpatch - name = "Security Eyepatch HUD" + name = "Security HUD Eyepatch" item_path = /obj/item/clothing/glasses/hud/eyepatch/sec restricted_roles = list(JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_HEAD_OF_SECURITY, JOB_CORRECTIONS_OFFICER, JOB_BOUNCER, JOB_ORDERLY, JOB_SCIENCE_GUARD, JOB_CUSTOMS_AGENT, JOB_ENGINEERING_GUARD, JOB_BLUESHIELD) @@ -218,7 +223,6 @@ GLOBAL_LIST_INIT(loadout_glasses, generate_loadout_items(/datum/loadout_item/gla item_path = /obj/item/clothing/glasses/hud/ar/aviator/science restricted_roles = list(JOB_SCIENTIST, JOB_ROBOTICIST, JOB_GENETICIST, JOB_RESEARCH_DIRECTOR, JOB_CHEMIST, JOB_SCIENCE_GUARD, JOB_VIROLOGIST) - /datum/loadout_item/glasses/prescription_aviator_security name = "Prescription Security HUD Aviators" item_path = /obj/item/clothing/glasses/hud/ar/aviator/security/prescription @@ -270,8 +274,8 @@ GLOBAL_LIST_INIT(loadout_glasses, generate_loadout_items(/datum/loadout_item/gla restricted_roles = list(JOB_SCIENTIST, JOB_ROBOTICIST, JOB_GENETICIST, JOB_RESEARCH_DIRECTOR, JOB_CHEMIST, JOB_SCIENCE_GUARD, JOB_VIROLOGIST) /* -* FAMILIES -*/ + * FAMILIES + */ /datum/loadout_item/glasses/osi name = "OSI Glasses" @@ -282,8 +286,8 @@ GLOBAL_LIST_INIT(loadout_glasses, generate_loadout_items(/datum/loadout_item/gla item_path = /obj/item/clothing/glasses/phantom /* -* DONATOR -*/ + * DONATOR + */ /datum/loadout_item/glasses/donator donator_only = TRUE diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_gloves.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_gloves.dm similarity index 97% rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_gloves.dm rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_gloves.dm index 936ca2514555e5..3d78c20d1aa507 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_gloves.dm +++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_gloves.dm @@ -78,6 +78,10 @@ GLOBAL_LIST_INIT(loadout_gloves, generate_loadout_items(/datum/loadout_item/glov name = "Evening Gloves" item_path = /obj/item/clothing/gloves/evening +/datum/loadout_item/gloves/kim + name = "Aerostatic Gloves" + item_path = /obj/item/clothing/gloves/kim + /datum/loadout_item/gloves/maid name = "Maid Arm Covers" item_path = /obj/item/clothing/gloves/maid diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_heads.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_heads.dm similarity index 81% rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_heads.dm rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_heads.dm index baff85d820740a..40ab19257ea39d 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_heads.dm +++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_heads.dm @@ -177,6 +177,18 @@ GLOBAL_LIST_INIT(loadout_helmets, generate_loadout_items(/datum/loadout_item/hea * MISC */ +/datum/loadout_item/head/hair_tie + name = "Hair Tie" + item_path = /obj/item/clothing/head/hair_tie + +/datum/loadout_item/head/hair_tie_scrunchie + name = "Scrunchie" + item_path = /obj/item/clothing/head/hair_tie/scrunchie + +/datum/loadout_item/head/hair_tie_plastic_beads + name = "Colorful Hair tie" + item_path = /obj/item/clothing/head/hair_tie/plastic_beads + /datum/loadout_item/head/standalone_hood name = "Recolorable Standalone Hood" item_path = /obj/item/clothing/head/standalone_hood @@ -268,17 +280,14 @@ GLOBAL_LIST_INIT(loadout_helmets, generate_loadout_items(/datum/loadout_item/hea /datum/loadout_item/head/santa name = "Santa Hat" item_path = /obj/item/clothing/head/costume/santa - required_season = CHRISTMAS /datum/loadout_item/head/christmas name = "Red Christmas Hat" - item_path = /obj/item/clothing/head/costume/skyrat/christmas - required_season = CHRISTMAS + item_path = /obj/item/clothing/head/costume/nova/christmas /datum/loadout_item/head/christmas/green name = "Green Christmas Hat" - item_path = /obj/item/clothing/head/costume/skyrat/christmas/green - required_season = CHRISTMAS + item_path = /obj/item/clothing/head/costume/nova/christmas/green /* * HALLOWEEN @@ -330,7 +339,23 @@ GLOBAL_LIST_INIT(loadout_helmets, generate_loadout_items(/datum/loadout_item/hea /datum/loadout_item/head/flowerpin name = "Flower Pin" - item_path = /obj/item/clothing/head/costume/skyrat/flowerpin + item_path = /obj/item/clothing/head/costume/nova/flowerpin + +/datum/loadout_item/head/floral_garland + name = "Floral Garland" + item_path = /obj/item/clothing/head/costume/garland + +/datum/loadout_item/head/sunflower_crown + name = "Sunflower Crown" + item_path = /obj/item/clothing/head/costume/garland/sunflower + +/datum/loadout_item/head/lily_crown + name = "Lily Crown" + item_path = /obj/item/clothing/head/costume/garland/lily + +/datum/loadout_item/head/poppy_crown + name = "Poppy Crown" + item_path = /obj/item/clothing/head/costume/garland/poppy /datum/loadout_item/head/rice_hat name = "Rice Hat" @@ -343,11 +368,11 @@ GLOBAL_LIST_INIT(loadout_helmets, generate_loadout_items(/datum/loadout_item/hea /datum/loadout_item/head/wrussian name = "Black Papakha" - item_path = /obj/item/clothing/head/costume/skyrat/papakha + item_path = /obj/item/clothing/head/costume/nova/papakha /datum/loadout_item/head/wrussianw name = "White Papakha" - item_path = /obj/item/clothing/head/costume/skyrat/papakha/white + item_path = /obj/item/clothing/head/costume/nova/papakha/white /datum/loadout_item/head/slime name = "Slime Hat" @@ -359,7 +384,7 @@ GLOBAL_LIST_INIT(loadout_helmets, generate_loadout_items(/datum/loadout_item/hea /datum/loadout_item/head/maidhead name = "Simple Maid Headband" - item_path = /obj/item/clothing/head/costume/skyrat/maid + item_path = /obj/item/clothing/head/costume/nova/maid additional_tooltip_contents = list("Small headband that only fits on top the head.") /datum/loadout_item/head/maidhead2 @@ -398,39 +423,39 @@ GLOBAL_LIST_INIT(loadout_helmets, generate_loadout_items(/datum/loadout_item/hea /datum/loadout_item/head/cowboyhat name = "Recolorable Cattleman Hat" - item_path = /obj/item/clothing/head/cowboy/skyrat/cattleman + item_path = /obj/item/clothing/head/cowboy/nova/cattleman /datum/loadout_item/head/cowboyhat_black name = "Recolorable Wide-Brimmed Cattleman Hat" - item_path = /obj/item/clothing/head/cowboy/skyrat/cattleman/wide + item_path = /obj/item/clothing/head/cowboy/nova/cattleman/wide /datum/loadout_item/head/cowboyhat_wide name = "Wide-Brimmed Hat" - item_path = /obj/item/clothing/head/cowboy/skyrat/wide + item_path = /obj/item/clothing/head/cowboy/nova/wide /datum/loadout_item/head/cowboyhat_wide_feather name = "Wide-Brimmed Feathered Hat" - item_path = /obj/item/clothing/head/cowboy/skyrat/wide/feathered + item_path = /obj/item/clothing/head/cowboy/nova/wide/feathered /datum/loadout_item/head/cowboyhat_flat name = "Flat-Brimmed Hat" - item_path = /obj/item/clothing/head/cowboy/skyrat/flat + item_path = /obj/item/clothing/head/cowboy/nova/flat /datum/loadout_item/head/cowboyhat_flat_cowl name = "Flat-Brimmed Hat with Cowl" - item_path = /obj/item/clothing/head/cowboy/skyrat/flat/cowl + item_path = /obj/item/clothing/head/cowboy/nova/flat/cowl /datum/loadout_item/head/cowboyhat_sheriff name = "Sheriff Hat" - item_path = /obj/item/clothing/head/cowboy/skyrat/flat/sheriff + item_path = /obj/item/clothing/head/cowboy/nova/flat/sheriff /datum/loadout_item/head/cowboyhat_deputy name = "Deputy Hat" - item_path = /obj/item/clothing/head/cowboy/skyrat/flat/deputy + item_path = /obj/item/clothing/head/cowboy/nova/flat/deputy /datum/loadout_item/head/cowboyhat_winter name = "Winter Cowboy Hat" - item_path = /obj/item/clothing/head/cowboy/skyrat/flat/cowl/sheriff + item_path = /obj/item/clothing/head/cowboy/nova/flat/cowl/sheriff /* * TREK HATS (JOB-LOCKED) @@ -439,27 +464,22 @@ GLOBAL_LIST_INIT(loadout_helmets, generate_loadout_items(/datum/loadout_item/hea /datum/loadout_item/head/trekcap name = "Officer's Cap (White)" item_path = /obj/item/clothing/head/hats/caphat/parade/fedcap - restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL) /datum/loadout_item/head/trekcapcap name = "Officer's Cap (Black)" item_path = /obj/item/clothing/head/hats/caphat/parade/fedcap/black - restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_HEAD_OF_SECURITY) /datum/loadout_item/head/trekcapmedisci name = "MedSci Officer's Cap (Blue)" item_path = /obj/item/clothing/head/hats/caphat/parade/fedcap/medsci - restricted_roles = list(JOB_CHIEF_MEDICAL_OFFICER, JOB_MEDICAL_DOCTOR, JOB_PARAMEDIC, JOB_CHEMIST, JOB_VIROLOGIST, JOB_PSYCHOLOGIST, JOB_GENETICIST, JOB_RESEARCH_DIRECTOR, JOB_SCIENTIST, JOB_ROBOTICIST, JOB_ORDERLY, JOB_CORONER) /datum/loadout_item/head/trekcapeng name = "Eng Officer's Cap (Yellow)" item_path = /obj/item/clothing/head/hats/caphat/parade/fedcap/eng - restricted_roles = list(JOB_CHIEF_ENGINEER, JOB_ATMOSPHERIC_TECHNICIAN, JOB_STATION_ENGINEER, JOB_WARDEN, JOB_DETECTIVE, JOB_SECURITY_OFFICER, JOB_HEAD_OF_SECURITY, JOB_CORRECTIONS_OFFICER, JOB_CARGO_TECHNICIAN, JOB_SHAFT_MINER, JOB_QUARTERMASTER, JOB_ENGINEERING_GUARD, JOB_CUSTOMS_AGENT) /datum/loadout_item/head/trekcapsec name = "Officer's Cap (Red)" item_path = /obj/item/clothing/head/hats/caphat/parade/fedcap/sec - restricted_roles = list(JOB_CHIEF_ENGINEER, JOB_ATMOSPHERIC_TECHNICIAN, JOB_STATION_ENGINEER, JOB_WARDEN, JOB_DETECTIVE, JOB_SECURITY_OFFICER, JOB_HEAD_OF_SECURITY, JOB_CORRECTIONS_OFFICER, JOB_CARGO_TECHNICIAN, JOB_SHAFT_MINER, JOB_QUARTERMASTER, JOB_CUSTOMS_AGENT) /* * JOB-LOCKED @@ -488,12 +508,12 @@ GLOBAL_LIST_INIT(loadout_helmets, generate_loadout_items(/datum/loadout_item/hea /datum/loadout_item/head/cowboyhat_sec name = "Cattleman Hat, Security" - item_path = /obj/item/clothing/head/cowboy/skyrat/cattleman/sec + item_path = /obj/item/clothing/head/cowboy/nova/cattleman/sec restricted_roles = list(JOB_WARDEN, JOB_DETECTIVE, JOB_SECURITY_OFFICER, JOB_HEAD_OF_SECURITY, JOB_CORRECTIONS_OFFICER) /datum/loadout_item/head/cowboyhat_secwide name = "Wide-Brimmed Cattleman Hat, Security" - item_path = /obj/item/clothing/head/cowboy/skyrat/cattleman/wide/sec + item_path = /obj/item/clothing/head/cowboy/nova/cattleman/wide/sec restricted_roles = list(JOB_WARDEN, JOB_DETECTIVE, JOB_SECURITY_OFFICER, JOB_HEAD_OF_SECURITY, JOB_CORRECTIONS_OFFICER) /datum/loadout_item/head/ushanka/sec @@ -502,9 +522,8 @@ GLOBAL_LIST_INIT(loadout_helmets, generate_loadout_items(/datum/loadout_item/hea restricted_roles = list(JOB_WARDEN, JOB_DETECTIVE, JOB_SECURITY_OFFICER, JOB_HEAD_OF_SECURITY, JOB_CORRECTIONS_OFFICER) /datum/loadout_item/head/blasthelmet - name = "General's Helmet" + name = "Blast Helmet" item_path = /obj/item/clothing/head/hats/imperial/helmet - restricted_roles = list(JOB_WARDEN, JOB_DETECTIVE, JOB_SECURITY_OFFICER, JOB_CORRECTIONS_OFFICER, JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_QUARTERMASTER, JOB_CHIEF_MEDICAL_OFFICER, JOB_CHIEF_ENGINEER) /datum/loadout_item/head/navybluehoscap name = "Head of Security's Naval Cap" @@ -521,35 +540,34 @@ GLOBAL_LIST_INIT(loadout_helmets, generate_loadout_items(/datum/loadout_item/hea item_path = /obj/item/clothing/head/beret/sec/navywarden restricted_roles = list(JOB_WARDEN) -/datum/loadout_item/head/cybergoggles //Cyberpunk-P.I. Outfit +/datum/loadout_item/head/cybergoggles_civ name = "Type-34C Forensics Headwear" + item_path = /obj/item/clothing/head/fedora/det_hat/cybergoggles/civilian + +/datum/loadout_item/head/cybergoggles //Cyberpunk-P.I. Outfit + name = "Type-34P Forensics Headwear" item_path = /obj/item/clothing/head/fedora/det_hat/cybergoggles - restricted_roles = list(JOB_DETECTIVE) + restricted_roles = list(JOB_WARDEN, JOB_DETECTIVE, JOB_SECURITY_OFFICER, JOB_HEAD_OF_SECURITY, JOB_CORRECTIONS_OFFICER) /datum/loadout_item/head/nursehat name = "Nurse Hat" item_path = /obj/item/clothing/head/costume/nursehat - restricted_roles = list(JOB_MEDICAL_DOCTOR, JOB_CHIEF_MEDICAL_OFFICER, JOB_GENETICIST, JOB_CHEMIST, JOB_VIROLOGIST) /datum/loadout_item/head/imperial_generic name = "Grey Naval Officer Cap" item_path = /obj/item/clothing/head/hats/imperial - restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_QUARTERMASTER, JOB_CHIEF_MEDICAL_OFFICER, JOB_CHIEF_ENGINEER, JOB_NT_REP) /datum/loadout_item/head/imperial_grey name = "Dark Grey Naval Officer Cap" item_path = /obj/item/clothing/head/hats/imperial/grey - restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_QUARTERMASTER, JOB_CHIEF_MEDICAL_OFFICER, JOB_CHIEF_ENGINEER, JOB_NT_REP) /datum/loadout_item/head/imperial_red name = "Red Naval Officer Cap" item_path = /obj/item/clothing/head/hats/imperial/red - restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_QUARTERMASTER, JOB_CHIEF_MEDICAL_OFFICER, JOB_CHIEF_ENGINEER) /datum/loadout_item/head/imperial_white name = "White Naval Officer Cap" item_path = /obj/item/clothing/head/hats/imperial/white - restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_QUARTERMASTER, JOB_CHIEF_MEDICAL_OFFICER, JOB_CHIEF_ENGINEER) /datum/loadout_item/head/azulea_oldblood name = "Oldblood's Royal cap" @@ -570,50 +588,38 @@ GLOBAL_LIST_INIT(loadout_helmets, generate_loadout_items(/datum/loadout_item/hea /datum/loadout_item/head/atmos_beret name = "Atmospherics Beret" item_path = /obj/item/clothing/head/beret/atmos - restricted_roles = list( - JOB_ATMOSPHERIC_TECHNICIAN, - JOB_CHIEF_ENGINEER, - ) /datum/loadout_item/head/engi_beret name = "Engineering Beret" item_path = /obj/item/clothing/head/beret/engi - restricted_roles = list(JOB_STATION_ENGINEER, JOB_ATMOSPHERIC_TECHNICIAN, JOB_CHIEF_ENGINEER, JOB_ENGINEERING_GUARD) /datum/loadout_item/head/cargo_beret name = "Supply Beret" item_path = /obj/item/clothing/head/beret/cargo - restricted_roles = list(JOB_QUARTERMASTER, JOB_CARGO_TECHNICIAN, JOB_SHAFT_MINER, JOB_CUSTOMS_AGENT) /datum/loadout_item/head/beret_med name = "Medical Beret" item_path = /obj/item/clothing/head/beret/medical - restricted_roles = list(JOB_MEDICAL_DOCTOR,JOB_VIROLOGIST, JOB_CHEMIST, JOB_CHIEF_MEDICAL_OFFICER, JOB_ORDERLY, JOB_CORONER) /datum/loadout_item/head/beret_paramedic name = "Paramedic Beret" item_path = /obj/item/clothing/head/beret/medical/paramedic - restricted_roles = list(JOB_PARAMEDIC, JOB_CHIEF_MEDICAL_OFFICER) /datum/loadout_item/head/beret_viro name = "Virologist Beret" item_path = /obj/item/clothing/head/beret/medical/virologist - restricted_roles = list(JOB_VIROLOGIST, JOB_CHIEF_MEDICAL_OFFICER) /datum/loadout_item/head/beret_chem name = "Chemist Beret" item_path = /obj/item/clothing/head/beret/medical/chemist - restricted_roles = list(JOB_CHEMIST, JOB_CHIEF_MEDICAL_OFFICER) /datum/loadout_item/head/beret_sci name = "Scientist Beret" item_path = /obj/item/clothing/head/beret/science - restricted_roles = list(JOB_SCIENTIST, JOB_ROBOTICIST, JOB_GENETICIST, JOB_RESEARCH_DIRECTOR, JOB_SCIENCE_GUARD) /datum/loadout_item/head/beret_robo name = "Roboticist Beret" item_path = /obj/item/clothing/head/beret/science/fancy/robo - restricted_roles = list(JOB_ROBOTICIST, JOB_RESEARCH_DIRECTOR) /* * FAMILIES diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_inhands.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_inhands.dm similarity index 97% rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_inhands.dm rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_inhands.dm index 246219c6d7e862..df609329a6b8fd 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_inhands.dm +++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_inhands.dm @@ -41,7 +41,7 @@ GLOBAL_LIST_INIT(loadout_inhand_items, generate_loadout_items(/datum/loadout_ite /datum/loadout_item/inhand/briefcase_secure name = "Secure Briefcase" - item_path = /obj/item/storage/secure/briefcase + item_path = /obj/item/storage/briefcase/secure /datum/loadout_item/inhand/skub name = "Skub" @@ -77,7 +77,7 @@ GLOBAL_LIST_INIT(loadout_inhand_items, generate_loadout_items(/datum/loadout_ite item_path = /obj/item/clothing/mask/cigarette/pipe /datum/loadout_item/inhand/flag_nt - name = "Folded Nanotrasen Flag" + name = "Folded Symphionia Flag" item_path = /obj/item/sign/flag/nanotrasen /datum/loadout_item/inhand/flag_agurk diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_masks.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_masks.dm similarity index 84% rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_masks.dm rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_masks.dm index d0052806a13de3..160ff263b0b686 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_masks.dm +++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_masks.dm @@ -73,6 +73,10 @@ GLOBAL_LIST_INIT(loadout_masks, generate_loadout_items(/datum/loadout_item/mask) name = "Gas Mask" item_path = /obj/item/clothing/mask/gas +/datum/loadout_item/mask/gas_alt + name = "Black Gas Mask" + item_path = /obj/item/clothing/mask/gas/alt + /datum/loadout_item/mask/gas_glass name = "Glass Gas Mask" item_path = /obj/item/clothing/mask/gas/glass @@ -87,6 +91,26 @@ GLOBAL_LIST_INIT(loadout_masks, generate_loadout_items(/datum/loadout_item/mask) // Ain't a damn thing +/* +* MASQUERADE MASKS +*/ + +/datum/loadout_item/mask/masquerade + name = "Masquerade Mask" + item_path = /obj/item/clothing/mask/masquerade + +/datum/loadout_item/mask/masquerade/two_colors + name = "Split Masquerade Mask" + item_path = /obj/item/clothing/mask/masquerade/two_colors + +/datum/loadout_item/mask/masquerade/feathered + name = "Feathered Masquerade Mask" + item_path = /obj/item/clothing/mask/masquerade/feathered + +/datum/loadout_item/mask/masquerade/two_colors/feathered + name = "Feathered Split Masquerade Mask" + item_path = /obj/item/clothing/mask/masquerade/two_colors/feathered + /* * FAMILIES */ diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_neck.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_neck.dm similarity index 93% rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_neck.dm rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_neck.dm index 53a355644199b0..df9f0c69c27fcb 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_neck.dm +++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_neck.dm @@ -121,7 +121,6 @@ GLOBAL_LIST_INIT(loadout_necks, generate_loadout_items(/datum/loadout_item/neck) /datum/loadout_item/neck/discoproper name = "Horrible Necktie" item_path = /obj/item/clothing/neck/tie/disco - restricted_roles = list(JOB_DETECTIVE) /* * COLLARS @@ -279,7 +278,6 @@ GLOBAL_LIST_INIT(loadout_necks, generate_loadout_items(/datum/loadout_item/neck) /datum/loadout_item/neck/stethoscope name = "Stethoscope" item_path = /obj/item/clothing/neck/stethoscope - restricted_roles = list(JOB_MEDICAL_DOCTOR, JOB_CHIEF_MEDICAL_OFFICER) /datum/loadout_item/neck/maid name = "Maid Neck Cover" @@ -287,7 +285,17 @@ GLOBAL_LIST_INIT(loadout_necks, generate_loadout_items(/datum/loadout_item/neck) /datum/loadout_item/neck/link_scryer name = "MODlink Scryer" - item_path = /obj/item/clothing/neck/link_scryer + item_path = /obj/item/clothing/neck/link_scryer/loaded + +/datum/loadout_item/neck/holobadge + name = "Holobadge" + item_path = /obj/item/clothing/accessory/badge/holo + restricted_roles = list(JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_DETECTIVE, JOB_CORRECTIONS_OFFICER) + +/datum/loadout_item/neck/holobadge_cord + name = "Holobadge with Lanyard" + item_path = /obj/item/clothing/accessory/badge/holo/cord + restricted_roles = list(JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_DETECTIVE, JOB_CORRECTIONS_OFFICER) /* * DONATOR diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_pocket.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_pocket.dm similarity index 97% rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_pocket.dm rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_pocket.dm index 2cde9b61b824d5..da283f05b73390 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_pocket.dm +++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_pocket.dm @@ -173,6 +173,14 @@ GLOBAL_LIST_INIT(loadout_pocket_items, generate_loadout_items(/datum/loadout_ite name = "Ornate Cross" item_path = /obj/item/crucifix +/datum/loadout_item/pocket_items/clipboard + name = "Clipboard" + item_path = /obj/item/clipboard + +/datum/loadout_item/pocket_items/folder + name = "Folder" + item_path = /obj/item/folder + /* * UTILITY */ diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_shoes.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_shoes.dm similarity index 96% rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_shoes.dm rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_shoes.dm index a0189f038fc4f1..71d665a904e53c 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_shoes.dm +++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_shoes.dm @@ -194,6 +194,10 @@ GLOBAL_LIST_INIT(loadout_shoes, generate_loadout_items(/datum/loadout_item/shoes name = "Green Snakeskin Shoes" item_path = /obj/item/clothing/shoes/discoshoes +/datum/loadout_item/shoes/kim + name = "Aerostatic Shoes" + item_path = /obj/item/clothing/shoes/kim + /datum/loadout_item/shoes/dominaheels name = "Dominant Heels" item_path = /obj/item/clothing/shoes/latex_heels/domina_heels @@ -215,6 +219,10 @@ GLOBAL_LIST_INIT(loadout_shoes, generate_loadout_items(/datum/loadout_item/shoes name = "Roller Skates" item_path = /obj/item/clothing/shoes/wheelys/rollerskates +/datum/loadout_item/shoes/jingleshoes + name = "Jester Shoes" + item_path = /obj/item/clothing/shoes/jester_shoes + /* * SEASONAL */ @@ -222,7 +230,6 @@ GLOBAL_LIST_INIT(loadout_shoes, generate_loadout_items(/datum/loadout_item/shoes /datum/loadout_item/shoes/christmas name = "Red Christmas Boots" item_path = /obj/item/clothing/shoes/winterboots/christmas - required_season = CHRISTMAS /datum/loadout_item/shoes/christmas/green name = "Green Christmas Boots" @@ -234,7 +241,7 @@ GLOBAL_LIST_INIT(loadout_shoes, generate_loadout_items(/datum/loadout_item/shoes */ /datum/loadout_item/shoes/jester - name = "Jester Shoes" + name = "Clown's Jester Shoes" item_path = /obj/item/clothing/shoes/clown_shoes/jester restricted_roles = list(JOB_CLOWN) diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_suit.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_suit.dm similarity index 86% rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_suit.dm rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_suit.dm index 20fd21e94b6ac8..c807eba9e79d03 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_suit.dm +++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_suit.dm @@ -34,22 +34,22 @@ GLOBAL_LIST_INIT(loadout_exosuits, generate_loadout_items(/datum/loadout_item/su /datum/loadout_item/suit/aformal name = "Assistant's Formal Winter Coat" - item_path = /obj/item/clothing/suit/hooded/wintercoat/skyrat + item_path = /obj/item/clothing/suit/hooded/wintercoat/nova /datum/loadout_item/suit/runed name = "Runed Winter Coat" - item_path = /obj/item/clothing/suit/hooded/wintercoat/skyrat/narsie + item_path = /obj/item/clothing/suit/hooded/wintercoat/nova/narsie /datum/loadout_item/suit/brass name = "Brass Winter Coat" - item_path = /obj/item/clothing/suit/hooded/wintercoat/skyrat/ratvar + item_path = /obj/item/clothing/suit/hooded/wintercoat/nova/ratvar /datum/loadout_item/suit/korea name = "Eastern Winter Coat" item_path = /obj/item/clothing/suit/koreacoat /datum/loadout_item/suit/czech - name = "Modern Winter Coat" + name = "Czech Winter Coat" item_path = /obj/item/clothing/suit/modernwintercoatthing /datum/loadout_item/suit/mantella @@ -119,7 +119,6 @@ GLOBAL_LIST_INIT(loadout_exosuits, generate_loadout_items(/datum/loadout_item/su /datum/loadout_item/suit/labcoat_medical name = "Medical Labcoat" item_path = /obj/item/clothing/suit/toggle/labcoat/medical - restricted_roles = list(JOB_MEDICAL_DOCTOR, JOB_CHIEF_MEDICAL_OFFICER) /* * PONCHOS @@ -272,12 +271,11 @@ GLOBAL_LIST_INIT(loadout_exosuits, generate_loadout_items(/datum/loadout_item/su /datum/loadout_item/suit/winter_coat/christmas name = "Christmas Coat" - item_path = /obj/item/clothing/suit/hooded/wintercoat/skyrat/christmas - required_season = CHRISTMAS + item_path = /obj/item/clothing/suit/hooded/wintercoat/nova/christmas /datum/loadout_item/suit/winter_coat/christmas/green name = "Green Christmas Coat" - item_path = /obj/item/clothing/suit/hooded/wintercoat/skyrat/christmas/green + item_path = /obj/item/clothing/suit/hooded/wintercoat/nova/christmas/green /* * MISC @@ -456,7 +454,10 @@ GLOBAL_LIST_INIT(loadout_exosuits, generate_loadout_items(/datum/loadout_item/su /datum/loadout_item/suit/discojacket name = "Disco Ass Blazer" item_path = /obj/item/clothing/suit/discoblazer - restricted_roles = list(JOB_DETECTIVE) + +/datum/loadout_item/suit/kimjacket + name = "Aerostatic Bomber Jacket" + item_path = /obj/item/clothing/suit/kimjacket /datum/loadout_item/suit/cardigan name = "Cardigan" @@ -538,58 +539,48 @@ GLOBAL_LIST_INIT(loadout_exosuits, generate_loadout_items(/datum/loadout_item/su /datum/loadout_item/suit/coat_med name = "Medical Winter Coat" item_path = /obj/item/clothing/suit/hooded/wintercoat/medical - restricted_roles = list(JOB_CHIEF_MEDICAL_OFFICER, JOB_MEDICAL_DOCTOR, JOB_ORDERLY) // Reserved for Medical Doctors, Orderlies, and their boss, the Chief Medical Officer /datum/loadout_item/suit/coat_paramedic name = "Paramedic Winter Coat" item_path = /obj/item/clothing/suit/hooded/wintercoat/medical/paramedic - restricted_roles = list(JOB_CHIEF_MEDICAL_OFFICER, JOB_PARAMEDIC) // Reserved for Paramedics and their boss, the Chief Medical Officer /datum/loadout_item/suit/coat_robotics name = "Robotics Winter Coat" item_path = /obj/item/clothing/suit/hooded/wintercoat/science/robotics - restricted_roles = list(JOB_RESEARCH_DIRECTOR, JOB_ROBOTICIST) /datum/loadout_item/suit/coat_sci name = "Science Winter Coat" item_path = /obj/item/clothing/suit/hooded/wintercoat/science - restricted_roles = list(JOB_RESEARCH_DIRECTOR, JOB_SCIENTIST, JOB_ROBOTICIST, JOB_SCIENCE_GUARD) // Reserved for the Science Departement /datum/loadout_item/suit/coat_eng name = "Engineering Winter Coat" item_path = /obj/item/clothing/suit/hooded/wintercoat/engineering - restricted_roles = list(JOB_CHIEF_ENGINEER, JOB_STATION_ENGINEER, JOB_ENGINEERING_GUARD) // Reserved for Station Engineers, Engineering Guards, and their boss, the Chief Engineer /datum/loadout_item/suit/coat_atmos name = "Atmospherics Winter Coat" item_path = /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos - restricted_roles = list(JOB_CHIEF_ENGINEER, JOB_ATMOSPHERIC_TECHNICIAN) // Reserved for Atmos Techs and their boss, the Chief Engineer /datum/loadout_item/suit/coat_hydro name = "Hydroponics Winter Coat" item_path = /obj/item/clothing/suit/hooded/wintercoat/hydro - restricted_roles = list(JOB_HEAD_OF_PERSONNEL, JOB_BOTANIST) // Reserved for Botanists and their boss, the Head of Personnel /datum/loadout_item/suit/coat_bar name = "Bartender Winter Coat" - item_path = /obj/item/clothing/suit/hooded/wintercoat/skyrat/bartender - restricted_roles = list(JOB_HEAD_OF_PERSONNEL, JOB_BARTENDER) //Reserved for Bartenders and their boss, the Head of Personnel + item_path = /obj/item/clothing/suit/hooded/wintercoat/nova/bartender /datum/loadout_item/suit/coat_cargo name = "Cargo Winter Coat" item_path = /obj/item/clothing/suit/hooded/wintercoat/cargo - restricted_roles = list(JOB_QUARTERMASTER, JOB_CARGO_TECHNICIAN, JOB_CUSTOMS_AGENT) // Reserved for Cargo Techs, Customs Agents, and their boss, the Quartermaster /datum/loadout_item/suit/coat_miner name = "Mining Winter Coat" item_path = /obj/item/clothing/suit/hooded/wintercoat/miner - restricted_roles = list(JOB_QUARTERMASTER, JOB_SHAFT_MINER) // Reserved for Miners and their boss, the Quartermaster // JACKETS /datum/loadout_item/suit/navybluejacketofficer name = "Security Officer's Navy Blue Formal Jacket" item_path = /obj/item/clothing/suit/jacket/officer/blue - restricted_roles = list(JOB_SECURITY_OFFICER, JOB_HEAD_OF_SECURITY, JOB_WARDEN) // I aint making a medic one, maybe i'll add some rank thing from cm or civ for it + restricted_roles = list(JOB_WARDEN, JOB_DETECTIVE, JOB_SECURITY_OFFICER, JOB_HEAD_OF_SECURITY, JOB_CORRECTIONS_OFFICER) /datum/loadout_item/suit/navybluejacketwarden name = "Warden's Navy Blue Formal Jacket" @@ -604,7 +595,7 @@ GLOBAL_LIST_INIT(loadout_exosuits, generate_loadout_items(/datum/loadout_item/su /datum/loadout_item/suit/security_jacket name = "Security Jacket" item_path = /obj/item/clothing/suit/toggle/jacket/sec - restricted_roles = list(JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_DETECTIVE) //Not giving this one to COs because it's actually better than the one they spawn with + restricted_roles = list(JOB_WARDEN, JOB_DETECTIVE, JOB_SECURITY_OFFICER, JOB_HEAD_OF_SECURITY) //Not giving this one to COs because it's actually better than the one they spawn with /datum/loadout_item/suit/brit name = "High Vis Armored Vest" @@ -614,7 +605,7 @@ GLOBAL_LIST_INIT(loadout_exosuits, generate_loadout_items(/datum/loadout_item/su /datum/loadout_item/suit/british_jacket name = "Peacekeeper Officer Coat" item_path = /obj/item/clothing/suit/british_officer - restricted_roles = list(JOB_HEAD_OF_SECURITY, JOB_WARDEN, JOB_DETECTIVE) + restricted_roles = list(JOB_WARDEN, JOB_DETECTIVE, JOB_SECURITY_OFFICER, JOB_HEAD_OF_SECURITY, JOB_CORRECTIONS_OFFICER) /datum/loadout_item/suit/offdep_jacket name = "Off-Department Jacket" @@ -623,27 +614,22 @@ GLOBAL_LIST_INIT(loadout_exosuits, generate_loadout_items(/datum/loadout_item/su /datum/loadout_item/suit/engi_jacket name = "Engineering Jacket" item_path = /obj/item/clothing/suit/toggle/jacket/engi - restricted_roles = list(JOB_CHIEF_ENGINEER, JOB_STATION_ENGINEER, JOB_ATMOSPHERIC_TECHNICIAN, JOB_ENGINEERING_GUARD) /datum/loadout_item/suit/sci_jacket name = "Science Jacket" item_path = /obj/item/clothing/suit/toggle/jacket/sci - restricted_roles = list(JOB_RESEARCH_DIRECTOR, JOB_SCIENTIST, JOB_ROBOTICIST, JOB_GENETICIST, JOB_SCIENCE_GUARD) /datum/loadout_item/suit/med_jacket name = "Medbay Jacket" item_path = /obj/item/clothing/suit/toggle/jacket/med - restricted_roles = list(JOB_CHIEF_MEDICAL_OFFICER, JOB_MEDICAL_DOCTOR, JOB_PARAMEDIC, JOB_CHEMIST, JOB_VIROLOGIST, JOB_ORDERLY) /datum/loadout_item/suit/supply_jacket name = "Supply Jacket" item_path = /obj/item/clothing/suit/toggle/jacket/supply - restricted_roles = list(JOB_QUARTERMASTER, JOB_CARGO_TECHNICIAN, JOB_SHAFT_MINER, JOB_CUSTOMS_AGENT) /datum/loadout_item/suit/cargo_gorka_jacket name = "Cargo Gorka Jacket" item_path = /obj/item/clothing/suit/toggle/cargo_tech - restricted_roles = list(JOB_QUARTERMASTER, JOB_CARGO_TECHNICIAN, JOB_SHAFT_MINER, JOB_CUSTOMS_AGENT) /datum/loadout_item/suit/qm_jacket name = "Quartermaster's Overcoat" @@ -653,8 +639,7 @@ GLOBAL_LIST_INIT(loadout_exosuits, generate_loadout_items(/datum/loadout_item/su // LABCOATS /datum/loadout_item/suit/labcoat_highvis name = "High-Vis Labcoat" - item_path = /obj/item/clothing/suit/toggle/labcoat/skyrat/highvis - restricted_roles = list(JOB_CHIEF_MEDICAL_OFFICER, JOB_PARAMEDIC, JOB_ATMOSPHERIC_TECHNICIAN, JOB_DETECTIVE, JOB_CHEMIST, JOB_ORDERLY) // And now chemist and orderly get it too. + item_path = /obj/item/clothing/suit/toggle/labcoat/nova/highvis /* * FAMILIES diff --git a/modular_nova/modules/loadouts/loadout_items/loadout_datum_toys.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_toys.dm new file mode 100644 index 00000000000000..dbe662ba0619b9 --- /dev/null +++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_toys.dm @@ -0,0 +1,419 @@ +GLOBAL_LIST_INIT(loadout_toys, generate_loadout_items(/datum/loadout_item/toys)) + +/datum/loadout_item/toys + category = LOADOUT_ITEM_TOYS + +/* +* PLUSHIES +*/ + +/datum/loadout_item/toys/pre_equip_item(datum/outfit/outfit, datum/outfit/outfit_important_for_life, mob/living/carbon/human/equipper, visuals_only = FALSE) // these go in the backpack + return FALSE + +/datum/loadout_item/toys/bee + name = "Bee Plushie" + item_path = /obj/item/toy/plush/beeplushie + +/datum/loadout_item/toys/carp + name = "Carp Plushie" + item_path = /obj/item/toy/plush/carpplushie + +/datum/loadout_item/toys/shark + name = "Shark Plushie" + item_path = /obj/item/toy/plush/shark + +/datum/loadout_item/toys/lizard_greyscale + name = "Greyscale Lizard Plushie" + item_path = /obj/item/toy/plush/lizard_plushie + +/datum/loadout_item/toys/moth + name = "Moth Plushie" + item_path = /obj/item/toy/plush/moth + +/datum/loadout_item/toys/narsie + name = "Nar'sie Plushie" + item_path = /obj/item/toy/plush/narplush + +/datum/loadout_item/toys/nukie + name = "Nukie Plushie" + item_path = /obj/item/toy/plush/nukeplushie + +/datum/loadout_item/toys/peacekeeper + name = "Peacekeeper Plushie" + item_path = /obj/item/toy/plush/pkplush + +/datum/loadout_item/toys/plasmaman + name = "Plasmaman Plushie" + item_path = /obj/item/toy/plush/plasmamanplushie + +/datum/loadout_item/toys/ratvar + name = "Ratvar Plushie" + item_path = /obj/item/toy/plush/ratplush + +/datum/loadout_item/toys/rouny + name = "Rouny Plushie" + item_path = /obj/item/toy/plush/rouny + +/datum/loadout_item/toys/snake + name = "Snake Plushie" + item_path = /obj/item/toy/plush/snakeplushie + +/datum/loadout_item/toys/slime + name = "Slime Plushie" + item_path = /obj/item/toy/plush/slimeplushie + +/datum/loadout_item/toys/bubble + name = "Bubblegum Plushie" + item_path = /obj/item/toy/plush/bubbleplush + +/datum/loadout_item/toys/goat + name = "Strange Goat Plushie" + item_path = /obj/item/toy/plush/goatplushie + +/datum/loadout_item/toys/sechound + name = "Sechound Plushie" + item_path = /obj/item/toy/plush/nova/sechound + +/datum/loadout_item/toys/medihound + name = "Medihound Plushie" + item_path = /obj/item/toy/plush/nova/medihound + +/datum/loadout_item/toys/engihound + name = "Engihound Plushie" + item_path = /obj/item/toy/plush/nova/engihound + +/datum/loadout_item/toys/scrubpuppy + name = "Scrubpuppy Plushie" + item_path = /obj/item/toy/plush/nova/scrubpuppy + +/datum/loadout_item/toys/meddrake + name = "MediDrake Plushie" + item_path = /obj/item/toy/plush/nova/meddrake + +/datum/loadout_item/toys/secdrake + name = "SecDrake Plushie" + item_path = /obj/item/toy/plush/nova/secdrake + +/datum/loadout_item/toys/borbplushie + name = "Borb Plushie" + item_path = /obj/item/toy/plush/nova/borbplushie + +/datum/loadout_item/toys/deer + name = "Deer Plushie" + item_path = /obj/item/toy/plush/nova/deer + +/datum/loadout_item/toys/fermis + name = "Medcat Plushie" + item_path = /obj/item/toy/plush/nova/fermis + +/datum/loadout_item/toys/chen + name = "Securicat Plushie" + item_path = /obj/item/toy/plush/nova/fermis/chen + +/datum/loadout_item/toys/fox + name = "Fox Plushie" + item_path = /obj/item/toy/plush/nova/fox + +/datum/loadout_item/toys/duffmoff + name = "Suspicious Moth Plushie" + item_path = /obj/item/toy/plush/nova/duffmoth + +/datum/loadout_item/toys/musicalduffy + name = "Suspicious Musical moth" + item_path = /obj/item/instrument/musicalduffy + +/datum/loadout_item/toys/leaplush + name = "Suspicious Deer Plushie" + item_path = /obj/item/toy/plush/nova/leaplush + +/datum/loadout_item/toys/sarmie + name = "Cosplayer Plushie" + item_path = /obj/item/toy/plush/nova/sarmieplush + +/datum/loadout_item/toys/sharknet + name = "Gluttonous Shark Plushie" + item_path = /obj/item/toy/plush/nova/sharknet + +/datum/loadout_item/toys/pintaplush + name = "Smaller Deer Plushie" + item_path = /obj/item/toy/plush/nova/pintaplush + +/datum/loadout_item/toys/szaplush + name = "Suspicious Spider Plushie" + item_path = /obj/item/toy/plush/nova/szaplush + +/datum/loadout_item/toys/riffplush + name = "Valid Plushie" + item_path = /obj/item/toy/plush/nova/riffplush + +/datum/loadout_item/toys/ianbastardman + name = "Ian Plushie" + item_path = /obj/item/toy/plush/nova/ian + +/datum/loadout_item/toys/corgiman + name = "Corgi Plushie" + item_path = /obj/item/toy/plush/nova/ian/small + +/datum/loadout_item/toys/corgiwoman + name = "Girly Corgi Plushie" + item_path = /obj/item/toy/plush/nova/ian/lisa + +/datum/loadout_item/toys/cat + name = "Cat Plushie" + item_path = /obj/item/toy/plush/nova/cat + +/datum/loadout_item/toys/tuxcat + name = "Tux Cat Plushie" + item_path = /obj/item/toy/plush/nova/cat/tux + +/datum/loadout_item/toys/whitecat + name = "White Cat Plushie" + item_path = /obj/item/toy/plush/nova/cat/white + +/datum/loadout_item/toys/seaduplush + name = "Sneed Plushie" + item_path = /obj/item/toy/plush/nova/seaduplush + +/datum/loadout_item/toys/lizzyplush + name = "Odd Yoga lizzy Plushie" + item_path = /obj/item/toy/plush/nova/lizzyplush + +/datum/loadout_item/toys/mechanic_fox + name = "Mechanist Fox Plushie" + item_path = /obj/item/toy/plush/nova/mechanic_fox + +/datum/loadout_item/toys/tribal_salamander + name = "Tribal Salamander Plushie" + item_path = /obj/item/toy/plush/nova/tribal_salamander + +/datum/loadout_item/toys/commanding_teshari + name = "Commanding Teshari Plushy" + item_path = /obj/item/toy/plush/nova/commanding_teshari + +/datum/loadout_item/toys/snow_owl + name = "Snowy Owl Plush" + item_path = /obj/item/toy/plush/nova/snow_owl + +/datum/loadout_item/toys/breakdancing_bird + name = "Breakdancing Bird Plushie" + item_path = /obj/item/toy/plush/nova/breakdancing_bird + +/datum/loadout_item/toys/skreking_vox + name = "Skreking Vox Plushie" + item_path = /obj/item/toy/plush/nova/skreking_vox + +/datum/loadout_item/toys/blue_dog + name = "Blue Dog Plushie" + item_path = /obj/item/toy/plush/nova/blue_dog + +/datum/loadout_item/toys/engi_snek + name = "Engineering Snek Plushie" + item_path = /obj/item/toy/plush/nova/engi_snek + +/datum/loadout_item/toys/glitch_synth + name = "Glitching Synthetic Plushie" + item_path = /obj/item/toy/plush/nova/glitch_synth + +/datum/loadout_item/toys/boom_bird + name = "Boom Bird Plushie" + item_path = /obj/item/toy/plush/nova/boom_bird + +/datum/loadout_item/toys/blue_cat + name = "Blue Cat Plushie" + item_path = /obj/item/toy/plush/nova/blue_cat + +/datum/loadout_item/toys/igneous_synth + name = "Igneous Synth Plushie" + item_path = /obj/item/toy/plush/nova/igneous_synth + +/datum/loadout_item/toys/edgy_bird + name = "Edgy Bird Plushie" + item_path = /obj/item/toy/plush/nova/edgy_bird + +/datum/loadout_item/toys/tree_ferret + name = "Tree Ferret Plushie" + item_path = /obj/item/toy/plush/nova/tree_ferret + +/datum/loadout_item/toys/xixi + name = "Familiar Harpy Plushie" + item_path = /obj/item/toy/plush/nova/xixi + +/datum/loadout_item/toys/rubi_plush + name = "Huggable Bee Plushie" + item_path = /obj/item/toy/plush/nova/rubi + +/datum/loadout_item/toys/derg_plushie + name = "Wingless Dragon Plushie" + item_path = /obj/item/toy/plush/nova/derg_plushie + +/datum/loadout_item/toys/tracy + name = "Creature Plushie" + item_path = /obj/item/toy/plush/nova/tracy + +/datum/loadout_item/toys/adventurous_synth + name = "Adventurous Synth Plushie" + item_path = /obj/item/toy/plush/nova/plushie_synthia + +/datum/loadout_item/toys/jecca + name = "Sexy Snoodle Plushie" + item_path = /obj/item/toy/plush/nova/jecca + +/datum/loadout_item/toys/courier_synth + name = "Courier Synth Plushie" + item_path = /obj/item/toy/plush/nova/courier_synth + +/datum/loadout_item/toys/plush_janiborg + name = "Friendly Janiborg Plush" + item_path = /obj/item/toy/plush/nova/plush_janiborg + +/* +* CARDS +*/ + +/datum/loadout_item/toys/card_binder + name = "Card Binder" + item_path = /obj/item/storage/card_binder + +/datum/loadout_item/toys/card_deck + name = "Playing Card Deck" + item_path = /obj/item/toy/cards/deck + +/datum/loadout_item/toys/kotahi_deck + name = "Kotahi Deck" + item_path = /obj/item/toy/cards/deck/kotahi + +/datum/loadout_item/toys/wizoff_deck + name = "Wizoff Deck" + item_path = /obj/item/toy/cards/deck/wizoff + +/datum/loadout_item/toys/tarot + name = "Tarot Card Deck" + item_path = /obj/item/toy/cards/deck/tarot + +/* +* DICE +*/ + +/datum/loadout_item/toys/d1 + name = "D1" + item_path = /obj/item/dice/d1 + +/datum/loadout_item/toys/d2 + name = "D2" + item_path = /obj/item/dice/d2 + +/datum/loadout_item/toys/d4 + name = "D4" + item_path = /obj/item/dice/d4 + +/datum/loadout_item/toys/d6 + name = "D6" + item_path = /obj/item/dice/d6 + +/datum/loadout_item/toys/d6_ebony + name = "D6 (Ebony)" + item_path = /obj/item/dice/d6/ebony + +/datum/loadout_item/toys/d6_space + name = "D6 (Space)" + item_path = /obj/item/dice/d6/space + +/datum/loadout_item/toys/d8 + name = "D8" + item_path = /obj/item/dice/d8 + +/datum/loadout_item/toys/d10 + name = "D10" + item_path = /obj/item/dice/d10 + +/datum/loadout_item/toys/d12 + name = "D12" + item_path = /obj/item/dice/d12 + +/datum/loadout_item/toys/d20 + name = "D20" + item_path = /obj/item/dice/d20 + +/datum/loadout_item/toys/d100 + name = "D100" + item_path = /obj/item/dice/d100 + +/datum/loadout_item/toys/d00 + name = "D00" + item_path = /obj/item/dice/d00 + +/datum/loadout_item/toys/dice + name = "Dice Bag" + item_path = /obj/item/storage/dice + +/* +* TENNIS BALLS +*/ + +/datum/loadout_item/toys/tennis + name = "Tennis Ball (Classic)" + item_path = /obj/item/toy/tennis + +/datum/loadout_item/toys/tennisred + name = "Tennis Ball (Red)" + item_path = /obj/item/toy/tennis/red + +/datum/loadout_item/toys/tennisyellow + name = "Tennis Ball (Yellow)" + item_path = /obj/item/toy/tennis/yellow + +/datum/loadout_item/toys/tennisgreen + name = "Tennis Ball (Green)" + item_path = /obj/item/toy/tennis/green + +/datum/loadout_item/toys/tenniscyan + name = "Tennis Ball (Cyan)" + item_path = /obj/item/toy/tennis/cyan + +/datum/loadout_item/toys/tennisblue + name = "Tennis Ball (Blue)" + item_path = /obj/item/toy/tennis/blue + +/datum/loadout_item/toys/tennispurple + name = "Tennis Ball (Purple)" + item_path = /obj/item/toy/tennis/purple + +/* +* MISC +*/ + +/datum/loadout_item/toys/cat_toy + name = "Cat Toy" + item_path = /obj/item/toy/cattoy + +/datum/loadout_item/toys/crayons + name = "Box of Crayons" + item_path = /obj/item/storage/crayons + +/datum/loadout_item/toys/spray_can + name = "Spray Can" + item_path = /obj/item/toy/crayon/spraycan + +/datum/loadout_item/toys/eightball + name = "Magic Eightball" + item_path = /obj/item/toy/eightball + +/datum/loadout_item/toys/toykatana + name = "Toy Katana" + item_path = /obj/item/toy/katana + +/datum/loadout_item/toys/red_laser + name = "Red Laser Pointer" + item_path = /obj/item/laser_pointer/limited/red + +/datum/loadout_item/toys/green_laser + name = "Green Laser Pointer" + item_path = /obj/item/laser_pointer/limited/green + +/datum/loadout_item/toys/blue_laser + name = "Blue Laser Pointer" + item_path = /obj/item/laser_pointer/limited/blue + +/datum/loadout_item/toys/purple_laser + name = "Purple Laser Pointer" + item_path = /obj/item/laser_pointer/limited/purple diff --git a/modular_skyrat/modules/loadouts/loadout_items/under/donator.dm b/modular_nova/modules/loadouts/loadout_items/under/donator.dm similarity index 75% rename from modular_skyrat/modules/loadouts/loadout_items/under/donator.dm rename to modular_nova/modules/loadouts/loadout_items/under/donator.dm index da5fb6bbd228a9..cbaa7349a92c90 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/under/donator.dm +++ b/modular_nova/modules/loadouts/loadout_items/under/donator.dm @@ -3,11 +3,11 @@ /datum/loadout_item/under/jumpsuit/donator/enclavesergeant name = "Enclave - Sergeant" - item_path = /obj/item/clothing/under/syndicate/skyrat/enclave + item_path = /obj/item/clothing/under/syndicate/nova/enclave /datum/loadout_item/under/jumpsuit/donator/enclaveofficer name = "Enclave - Officer" - item_path = /obj/item/clothing/under/syndicate/skyrat/enclave/officer + item_path = /obj/item/clothing/under/syndicate/nova/enclave/officer /datum/loadout_item/under/jumpsuit/donator/blondie name = "Blonde Cowboy Uniform" diff --git a/modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm b/modular_nova/modules/loadouts/loadout_items/under/loadout_datum_under.dm similarity index 75% rename from modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm rename to modular_nova/modules/loadouts/loadout_items/under/loadout_datum_under.dm index ee748ca1f0c262..2c1ecd8496da10 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm +++ b/modular_nova/modules/loadouts/loadout_items/under/loadout_datum_under.dm @@ -28,8 +28,8 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ outfit.modified_outfit_slots |= ITEM_SLOT_ICLOTHING /* -* JUMPSUITS -*/ + * JUMPSUITS + */ /datum/loadout_item/under/jumpsuit @@ -65,54 +65,49 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ /datum/loadout_item/under/jumpsuit/impcap name = "Captain's Naval Jumpsuit" - item_path = /obj/item/clothing/under/rank/captain/skyrat/imperial + item_path = /obj/item/clothing/under/rank/captain/nova/imperial restricted_roles = list(JOB_CAPTAIN, JOB_NT_REP) /datum/loadout_item/under/jumpsuit/imphop name = "Head of Personnel's Naval Jumpsuit" - item_path = /obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat/imperial + item_path = /obj/item/clothing/under/rank/civilian/head_of_personnel/nova/imperial restricted_roles = list(JOB_HEAD_OF_PERSONNEL, JOB_NT_REP) /datum/loadout_item/under/jumpsuit/imphos name = "Head of Security's Naval Uniform" - item_path = /obj/item/clothing/under/rank/security/head_of_security/skyrat/imperial + item_path = /obj/item/clothing/under/rank/security/head_of_security/nova/imperial restricted_roles = list(JOB_HEAD_OF_SECURITY) /datum/loadout_item/under/jumpsuit/impcmo name = "Chief Medical Officer's Naval Uniform" - item_path = /obj/item/clothing/under/rank/medical/chief_medical_officer/skyrat/imperial + item_path = /obj/item/clothing/under/rank/medical/chief_medical_officer/nova/imperial restricted_roles = list(JOB_CHIEF_MEDICAL_OFFICER) /datum/loadout_item/under/jumpsuit/impce name = "Chief Engineer's Naval Uniform" - item_path = /obj/item/clothing/under/rank/engineering/chief_engineer/skyrat/imperial + item_path = /obj/item/clothing/under/rank/engineering/chief_engineer/nova/imperial restricted_roles = list(JOB_CHIEF_ENGINEER) /datum/loadout_item/under/jumpsuit/imprd name = "Research Director's Naval Uniform" - item_path = /obj/item/clothing/under/rank/rnd/research_director/skyrat/imperial + item_path = /obj/item/clothing/under/rank/rnd/research_director/nova/imperial restricted_roles = list(JOB_RESEARCH_DIRECTOR) /datum/loadout_item/under/jumpsuit/impcommand name = "Light Grey Officer's Naval Jumpsuit" - item_path = /obj/item/clothing/under/rank/captain/skyrat/imperial/generic - restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_QUARTERMASTER, JOB_CHIEF_MEDICAL_OFFICER, JOB_CHIEF_ENGINEER, JOB_NT_REP) + item_path = /obj/item/clothing/under/rank/captain/nova/imperial/generic /datum/loadout_item/under/jumpsuit/impcom name = "Grey Officer's Naval Jumpsuit" - item_path = /obj/item/clothing/under/rank/captain/skyrat/imperial/generic/grey - restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_QUARTERMASTER, JOB_CHIEF_MEDICAL_OFFICER, JOB_CHIEF_ENGINEER, JOB_NT_REP) + item_path = /obj/item/clothing/under/rank/captain/nova/imperial/generic/grey /datum/loadout_item/under/jumpsuit/impred name = "Red Officer's Naval Jumpsuit" - item_path = /obj/item/clothing/under/rank/captain/skyrat/imperial/generic/red - restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_QUARTERMASTER, JOB_CHIEF_MEDICAL_OFFICER, JOB_CHIEF_ENGINEER) //NT Reps would never wear red, it's unbefitting - + item_path = /obj/item/clothing/under/rank/captain/nova/imperial/generic/red /datum/loadout_item/under/jumpsuit/impcomtrous name = "Grey Officer's Naval Jumpsuit (Trousers)" - item_path = /obj/item/clothing/under/rank/captain/skyrat/imperial/generic/pants - restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_QUARTERMASTER, JOB_CHIEF_MEDICAL_OFFICER, JOB_CHIEF_ENGINEER, JOB_NT_REP) + item_path = /obj/item/clothing/under/rank/captain/nova/imperial/generic/pants /datum/loadout_item/under/jumpsuit/security_trousers name = "Security Trousers" @@ -124,59 +119,52 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ item_path = /obj/item/clothing/under/rank/security/peacekeeper restricted_roles = list(JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_HEAD_OF_SECURITY) +/datum/loadout_item/under/jumpsuit/imperial_police_uniform + name = "Imperial Police Uniform" + item_path = /obj/item/clothing/under/colonial/nri_police + restricted_roles = list(JOB_SECURITY_OFFICER, JOB_DETECTIVE) + /datum/loadout_item/under/jumpsuit/disco name = "Superstar Cop Uniform" item_path = /obj/item/clothing/under/rank/security/detective/disco - restricted_roles = list(JOB_DETECTIVE) /datum/loadout_item/under/jumpsuit/kim name = "Aerostatic Suit" item_path = /obj/item/clothing/under/rank/security/detective/kim - restricted_roles = list(JOB_DETECTIVE) /datum/loadout_item/under/jumpsuit/paramed_light name = "Light Paramedic Uniform" - item_path = /obj/item/clothing/under/rank/medical/paramedic/skyrat/light - restricted_roles = list(JOB_PARAMEDIC) + item_path = /obj/item/clothing/under/rank/medical/paramedic/nova/light /datum/loadout_item/under/jumpsuit/paramed_light_skirt - name = "Light Paramedic Uniform" - item_path = /obj/item/clothing/under/rank/medical/paramedic/skyrat/light/skirt - restricted_roles = list(JOB_PARAMEDIC) + name = "Light Paramedic Skirt" + item_path = /obj/item/clothing/under/rank/medical/paramedic/nova/light/skirt /datum/loadout_item/under/jumpsuit/chemist_formal name = "Chemist's Formal Jumpsuit" - item_path = /obj/item/clothing/under/rank/medical/chemist/skyrat/formal - restricted_roles = list(JOB_CHEMIST) + item_path = /obj/item/clothing/under/rank/medical/chemist/nova/formal /datum/loadout_item/under/jumpsuit/chemist_formal_skirt name = "Chemist's Formal Jumpskirt" - item_path = /obj/item/clothing/under/rank/medical/chemist/skyrat/formal/skirt - restricted_roles = list(JOB_CHEMIST) + item_path = /obj/item/clothing/under/rank/medical/chemist/nova/formal/skirt /datum/loadout_item/under/jumpsuit/hlscientist name = "Ridiculous Scientist Outfit" - item_path = /obj/item/clothing/under/rank/rnd/scientist/skyrat/hlscience - restricted_roles = list(JOB_SCIENTIST, JOB_ROBOTICIST, JOB_GENETICIST, JOB_RESEARCH_DIRECTOR) + item_path = /obj/item/clothing/under/rank/rnd/scientist/nova/hlscience /datum/loadout_item/under/jumpsuit/rd_jumpsuit name = "Research Director's Jumpsuit" - item_path = /obj/item/clothing/under/rank/rnd/research_director/skyrat/jumpsuit + item_path = /obj/item/clothing/under/rank/rnd/research_director/nova/jumpsuit restricted_roles = list(JOB_RESEARCH_DIRECTOR) /datum/loadout_item/under/jumpsuit/rd_jumpskirt name = "Research Director's Jumpskirt" - item_path = /obj/item/clothing/under/rank/rnd/research_director/skyrat/jumpsuit/skirt + item_path = /obj/item/clothing/under/rank/rnd/research_director/nova/jumpsuit/skirt restricted_roles = list(JOB_RESEARCH_DIRECTOR) /datum/loadout_item/under/jumpsuit/cargo name = "Cargo Technician's Jumpsuit" item_path = /obj/item/clothing/under/rank/cargo/tech - restricted_roles = list(JOB_CARGO_TECHNICIAN, JOB_QUARTERMASTER, JOB_CUSTOMS_AGENT) - -/datum/loadout_item/under/jumpsuit/cargo/shorts - name = "Cargo Technician's Shorts" - item_path = /obj/item/clothing/under/rank/cargo/tech/alt /datum/loadout_item/under/jumpsuit/cargo/skirt name = "Cargo Technician's Skirt" @@ -193,60 +181,55 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ /datum/loadout_item/under/jumpsuit/utility name = "Utility Uniform" - item_path = /obj/item/clothing/under/misc/skyrat/utility + item_path = /obj/item/clothing/under/misc/nova/utility /datum/loadout_item/under/jumpsuit/utility_eng name = "Engineering Utility Uniform" - item_path = /obj/item/clothing/under/rank/engineering/engineer/skyrat/utility - restricted_roles = list(JOB_STATION_ENGINEER,JOB_ATMOSPHERIC_TECHNICIAN, JOB_CHIEF_ENGINEER, JOB_ENGINEERING_GUARD) + item_path = /obj/item/clothing/under/rank/engineering/engineer/nova/utility /datum/loadout_item/under/jumpsuit/utility_med name = "Medical Utility Uniform" - item_path = /obj/item/clothing/under/rank/medical/doctor/skyrat/utility - restricted_roles = list(JOB_MEDICAL_DOCTOR, JOB_PARAMEDIC, JOB_CHEMIST, JOB_VIROLOGIST, JOB_GENETICIST, JOB_CHIEF_MEDICAL_OFFICER, JOB_PSYCHOLOGIST, JOB_ORDERLY) + item_path = /obj/item/clothing/under/rank/medical/doctor/nova/utility /datum/loadout_item/under/jumpsuit/utility_sci name = "Science Utility Uniform" - item_path = /obj/item/clothing/under/rank/rnd/scientist/skyrat/utility - restricted_roles = list(JOB_SCIENTIST, JOB_ROBOTICIST, JOB_GENETICIST, JOB_RESEARCH_DIRECTOR, JOB_SCIENCE_GUARD) + item_path = /obj/item/clothing/under/rank/rnd/scientist/nova/utility /datum/loadout_item/under/jumpsuit/utility_cargo name = "Supply Utility Uniform" - item_path = /obj/item/clothing/under/rank/cargo/tech/skyrat/utility - restricted_roles = list(JOB_CARGO_TECHNICIAN, JOB_SHAFT_MINER, JOB_QUARTERMASTER, JOB_CUSTOMS_AGENT) + item_path = /obj/item/clothing/under/rank/cargo/tech/nova/utility /datum/loadout_item/under/jumpsuit/utility_sec name = "Security Utility Uniform" - item_path = /obj/item/clothing/under/rank/security/skyrat/utility + item_path = /obj/item/clothing/under/rank/security/nova/utility restricted_roles = list(JOB_SECURITY_OFFICER, JOB_DETECTIVE, JOB_WARDEN, JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_CORRECTIONS_OFFICER) //i dunno about the blueshield, they're a weird combo of sec and command, thats why they arent in the loadout pr im making /datum/loadout_item/under/jumpsuit/utility_com name = "Command Utility Uniform" - item_path = /obj/item/clothing/under/rank/captain/skyrat/utility + item_path = /obj/item/clothing/under/rank/captain/nova/utility restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_QUARTERMASTER, JOB_CHIEF_MEDICAL_OFFICER, JOB_CHIEF_ENGINEER) /* -* MISC UNDERSUITS -*/ + * MISC UNDERSUITS + */ /datum/loadout_item/under/miscellaneous /datum/loadout_item/under/miscellaneous/christmas name = "Christmas Suit" - item_path = /obj/item/clothing/under/costume/skyrat/christmas - required_season = CHRISTMAS + item_path = /obj/item/clothing/under/costume/nova/christmas /datum/loadout_item/under/miscellaneous/christmas/green name = "Green Christmas Suit" - item_path = /obj/item/clothing/under/costume/skyrat/christmas/green + item_path = /obj/item/clothing/under/costume/nova/christmas/green /datum/loadout_item/under/miscellaneous/christmas/female name = "Revealing Christmas Suit" - item_path = /obj/item/clothing/under/costume/skyrat/christmas/croptop + item_path = /obj/item/clothing/under/costume/nova/christmas/croptop /datum/loadout_item/under/miscellaneous/christmas/female/green name = "Revealing Green Christmas Suit" - item_path = /obj/item/clothing/under/costume/skyrat/christmas/croptop/green + item_path = /obj/item/clothing/under/costume/nova/christmas/croptop/green /datum/loadout_item/under/miscellaneous/buttondown name = "Recolorable Buttondown Shirt with Slacks" @@ -262,7 +245,7 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ /datum/loadout_item/under/miscellaneous/vicvest name = "Recolorable Buttondown Shirt with Double-Breasted Vest" - item_path = /obj/item/clothing/under/pants/skyrat/vicvest + item_path = /obj/item/clothing/under/pants/nova/vicvest /datum/loadout_item/under/miscellaneous/slacks name = "Recolorable Slacks" @@ -274,11 +257,11 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ /datum/loadout_item/under/miscellaneous/jeansripped name = "Recolorable Ripped Jeans" - item_path = /obj/item/clothing/under/pants/skyrat/jeans_ripped + item_path = /obj/item/clothing/under/pants/nova/jeans_ripped /datum/loadout_item/under/miscellaneous/yoga name = "Recolorable Yoga Pants" - item_path = /obj/item/clothing/under/pants/skyrat/yoga + item_path = /obj/item/clothing/under/pants/nova/yoga /datum/loadout_item/under/miscellaneous/track name = "Track Pants" @@ -294,11 +277,11 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ /datum/loadout_item/under/miscellaneous/pants_blackshorts name = "Recolorable Ripped Jean Shorts" - item_path = /obj/item/clothing/under/shorts/skyrat/shorts_ripped + item_path = /obj/item/clothing/under/shorts/nova/shorts_ripped /datum/loadout_item/under/miscellaneous/shortershorts name = "Recolorable Shorter Shorts" - item_path = /obj/item/clothing/under/shorts/skyrat/shortershorts + item_path = /obj/item/clothing/under/shorts/nova/shortershorts /datum/loadout_item/under/miscellaneous/shorts name = "Recolorable Shorts" @@ -330,7 +313,7 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ /datum/loadout_item/under/miscellaneous/recolorable_kilt name = "Recolorable Kilt" - item_path = /obj/item/clothing/under/pants/skyrat/kilt + item_path = /obj/item/clothing/under/pants/nova/kilt //TODO: split loadout's miscellaneous to have "Pants/Shorts" and "Dresses/Skirts" as options too. Misc is stupid. @@ -352,7 +335,7 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ /datum/loadout_item/under/miscellaneous/skirt_cableknit name = "Recolorable Cableknit Skirt" - item_path = /obj/item/clothing/under/dress/skirt/skyrat/turtleskirt_knit + item_path = /obj/item/clothing/under/dress/skirt/nova/turtleskirt_knit /datum/loadout_item/under/miscellaneous/dress_tango name = "Recolorable Tango Dress" @@ -364,59 +347,59 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ /datum/loadout_item/under/miscellaneous/straplessdress name = "Recolorable Strapless Dress" - item_path = /obj/item/clothing/under/dress/skyrat/strapless + item_path = /obj/item/clothing/under/dress/nova/strapless /datum/loadout_item/under/miscellaneous/pentagramdress name = "Recolorable Pentagram Strapped Dress" - item_path = /obj/item/clothing/under/dress/skyrat/pentagram + item_path = /obj/item/clothing/under/dress/nova/pentagram /datum/loadout_item/under/miscellaneous/jacarta_dress name = "Jacarta Dress" - item_path = /obj/item/clothing/under/dress/skyrat/jute - -/datum/loadout_item/under/miscellaneous/striped_skirt - name = "Red Striped Skirt" - item_path = /obj/item/clothing/under/dress/skirt/skyrat/striped_skirt + item_path = /obj/item/clothing/under/dress/nova/jute /datum/loadout_item/under/miscellaneous/red_skirt - name = "Red Skirt" - item_path = /obj/item/clothing/under/dress/skirt/skyrat/red_skirt + name = "Red Bra and Skirt" + item_path = /obj/item/clothing/under/dress/skirt/nova/red_skirt + +/datum/loadout_item/under/miscellaneous/striped_skirt + name = "Red Bra and Striped Skirt" + item_path = /obj/item/clothing/under/dress/skirt/nova/striped_skirt /datum/loadout_item/under/miscellaneous/black_skirt - name = "Black Skirt" - item_path = /obj/item/clothing/under/dress/skirt/skyrat/black_skirt + name = "Black Bra and Skirt" + item_path = /obj/item/clothing/under/dress/skirt/nova/black_skirt /datum/loadout_item/under/miscellaneous/swept_skirt name = "Swept Skirt" - item_path = /obj/item/clothing/under/dress/skirt/skyrat/swept + item_path = /obj/item/clothing/under/dress/skirt/nova/swept /datum/loadout_item/under/miscellaneous/lone_skirt name = "Recolorable Skirt" - item_path = /obj/item/clothing/under/dress/skirt/skyrat/lone_skirt + item_path = /obj/item/clothing/under/dress/skirt/nova/lone_skirt /datum/loadout_item/under/miscellaneous/medium_skirt name = "Medium Colourable Skirt" - item_path = /obj/item/clothing/under/skyrat/medium_skirt + item_path = /obj/item/clothing/under/dress/skirt/nova/medium /datum/loadout_item/under/miscellaneous/long_skirt name = "Long Colourable Skirt" - item_path = /obj/item/clothing/under/skyrat/long_skirt + item_path = /obj/item/clothing/under/dress/skirt/nova/long /datum/loadout_item/under/miscellaneous/denim_skirt name = "Jean Skirt" - item_path = /obj/item/clothing/under/dress/skirt/skyrat/jean + item_path = /obj/item/clothing/under/dress/skirt/nova/jean /datum/loadout_item/under/miscellaneous/littleblack name = "Short Black Dress" - item_path = /obj/item/clothing/under/dress/skyrat/short_dress + item_path = /obj/item/clothing/under/dress/nova/short_dress /datum/loadout_item/under/miscellaneous/pinktutu name = "Pink Tutu" - item_path = /obj/item/clothing/under/dress/skyrat/pinktutu + item_path = /obj/item/clothing/under/dress/nova/pinktutu /datum/loadout_item/under/miscellaneous/flowerdress name = "Flower Dress" - item_path = /obj/item/clothing/under/dress/skyrat/flower + item_path = /obj/item/clothing/under/dress/nova/flower /datum/loadout_item/under/miscellaneous/kilt name = "Kilt" @@ -480,23 +463,23 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ /datum/loadout_item/under/miscellaneous/yukata name = "Recolorable Yukata" - item_path = /obj/item/clothing/under/costume/skyrat/yukata + item_path = /obj/item/clothing/under/costume/nova/yukata /datum/loadout_item/under/miscellaneous/qipao_black name = "Recolorable Qipao" - item_path = /obj/item/clothing/under/costume/skyrat/qipao + item_path = /obj/item/clothing/under/costume/nova/qipao /datum/loadout_item/under/miscellaneous/cheongsam name = "Recolorable Cheongsam" - item_path = /obj/item/clothing/under/costume/skyrat/cheongsam + item_path = /obj/item/clothing/under/costume/nova/cheongsam /datum/loadout_item/under/miscellaneous/kimono name = "Fancy Kimono" - item_path = /obj/item/clothing/under/costume/skyrat/kimono + item_path = /obj/item/clothing/under/costume/nova/kimono /datum/loadout_item/under/miscellaneous/chaps name = "Black Chaps" - item_path = /obj/item/clothing/under/pants/skyrat/chaps + item_path = /obj/item/clothing/under/pants/nova/chaps /datum/loadout_item/under/miscellaneous/tracky name = "Blue Tracksuit" @@ -516,15 +499,15 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ /datum/loadout_item/under/miscellaneous/cavalry name = "Cavalry Uniform" - item_path = /obj/item/clothing/under/costume/skyrat/cavalry + item_path = /obj/item/clothing/under/costume/nova/cavalry /datum/loadout_item/under/miscellaneous/tacticool_turtleneck name = "Tacticool Turtleneck" - item_path = /obj/item/clothing/under/syndicate/tacticool //This has been rebalanced in modular_skyrat\master_files\code\modules\clothing\under\syndicate.dm + item_path = /obj/item/clothing/under/syndicate/tacticool //This has been rebalanced in modular_nova\master_files\code\modules\clothing\under\syndicate.dm /datum/loadout_item/under/miscellaneous/tactical_skirt name = "Tacticool Skirtleneck" - item_path = /obj/item/clothing/under/syndicate/tacticool/skirt //This has been rebalanced in modular_skyrat\master_files\code\modules\clothing\under\syndicate.dm + item_path = /obj/item/clothing/under/syndicate/tacticool/skirt //This has been rebalanced in modular_nova\master_files\code\modules\clothing\under\syndicate.dm /datum/loadout_item/under/miscellaneous/tactical_pants name = "Tactical Pants" @@ -566,83 +549,72 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ /datum/loadout_item/under/miscellaneous/blacknwhite name = "Classic Prisoner Jumpsuit" item_path = /obj/item/clothing/under/rank/prisoner/classic - restricted_roles = list(JOB_PRISONER) /datum/loadout_item/under/miscellaneous/redscrubs name = "Red Scrubs" - item_path = /obj/item/clothing/under/rank/medical/scrubs/skyrat/red - restricted_roles = list(JOB_MEDICAL_DOCTOR, JOB_CHIEF_MEDICAL_OFFICER, JOB_GENETICIST, JOB_CHEMIST, JOB_VIROLOGIST, JOB_PARAMEDIC) + item_path = /obj/item/clothing/under/rank/medical/scrubs/nova/red /datum/loadout_item/under/miscellaneous/bluescrubs name = "Blue Scrubs" item_path = /obj/item/clothing/under/rank/medical/scrubs/blue - restricted_roles = list(JOB_MEDICAL_DOCTOR, JOB_CHIEF_MEDICAL_OFFICER, JOB_GENETICIST, JOB_CHEMIST, JOB_VIROLOGIST, JOB_PARAMEDIC) /datum/loadout_item/under/miscellaneous/greenscrubs name = "Green Scrubs" item_path = /obj/item/clothing/under/rank/medical/scrubs/green - restricted_roles = list(JOB_MEDICAL_DOCTOR, JOB_CHIEF_MEDICAL_OFFICER, JOB_GENETICIST, JOB_CHEMIST, JOB_VIROLOGIST, JOB_PARAMEDIC) /datum/loadout_item/under/miscellaneous/purplescrubs name = "Purple Scrubs" item_path = /obj/item/clothing/under/rank/medical/scrubs/purple - restricted_roles = list(JOB_MEDICAL_DOCTOR, JOB_CHIEF_MEDICAL_OFFICER, JOB_GENETICIST, JOB_CHEMIST, JOB_VIROLOGIST, JOB_PARAMEDIC) /datum/loadout_item/under/miscellaneous/whitescrubs name = "White Scrubs" - item_path = /obj/item/clothing/under/rank/medical/scrubs/skyrat/white - restricted_roles = list(JOB_MEDICAL_DOCTOR, JOB_CHIEF_MEDICAL_OFFICER, JOB_GENETICIST, JOB_CHEMIST, JOB_VIROLOGIST, JOB_PARAMEDIC) + item_path = /obj/item/clothing/under/rank/medical/scrubs/nova/white /datum/loadout_item/under/miscellaneous/gear_harness name = "Gear Harness" - item_path = /obj/item/clothing/under/misc/skyrat/gear_harness + item_path = /obj/item/clothing/under/misc/nova/gear_harness /datum/loadout_item/under/miscellaneous/taccas name = "Tacticasual Uniform" - item_path = /obj/item/clothing/under/misc/skyrat/taccas + item_path = /obj/item/clothing/under/misc/nova/taccas /datum/loadout_item/under/miscellaneous/cargo_casual name = "Cargo Tech Casualwear" - item_path = /obj/item/clothing/under/rank/cargo/tech/skyrat/casualman - restricted_roles = list(JOB_CARGO_TECHNICIAN) + item_path = /obj/item/clothing/under/rank/cargo/tech/nova/casualman /datum/loadout_item/under/miscellaneous/cargo_shorts name = "Cargo Tech Shorts" item_path = /obj/item/clothing/under/rank/cargo/tech/alt - restricted_roles = list(JOB_CARGO_TECHNICIAN) /datum/loadout_item/under/miscellaneous/cargo_black name = "Black Cargo Uniform" - item_path = /obj/item/clothing/under/rank/cargo/tech/skyrat/evil - restricted_roles = list(JOB_CARGO_TECHNICIAN) + item_path = /obj/item/clothing/under/rank/cargo/tech/nova/evil /datum/loadout_item/under/miscellaneous/cargo_turtle name = "Cargo Turtleneck" - item_path = /obj/item/clothing/under/rank/cargo/tech/skyrat/turtleneck - restricted_roles = list(JOB_CARGO_TECHNICIAN) + item_path = /obj/item/clothing/under/rank/cargo/tech/nova/turtleneck /datum/loadout_item/under/miscellaneous/cargo_skirtle name = "Cargo Skirtleneck" - item_path = /obj/item/clothing/under/rank/cargo/tech/skyrat/turtleneck/skirt - restricted_roles = list(JOB_CARGO_TECHNICIAN) + item_path = /obj/item/clothing/under/rank/cargo/tech/nova/turtleneck/skirt /datum/loadout_item/under/miscellaneous/qm_skirtle name = "Quartermaster's Skirtleneck" - item_path = /obj/item/clothing/under/rank/cargo/qm/skyrat/turtleneck/skirt + item_path = /obj/item/clothing/under/rank/cargo/qm/nova/turtleneck/skirt restricted_roles = list(JOB_QUARTERMASTER) /datum/loadout_item/under/miscellaneous/qm_gorka name = "Quartermaster's Gorka Uniform" - item_path = /obj/item/clothing/under/rank/cargo/qm/skyrat/gorka + item_path = /obj/item/clothing/under/rank/cargo/qm/nova/gorka restricted_roles = list(JOB_QUARTERMASTER) /datum/loadout_item/under/miscellaneous/eve name = "Collection of Leaves" - item_path = /obj/item/clothing/under/misc/skyrat/gear_harness/eve + item_path = /obj/item/clothing/under/misc/nova/gear_harness/eve /datum/loadout_item/under/miscellaneous/adam name = "Leaf" - item_path = /obj/item/clothing/under/misc/skyrat/gear_harness/adam + item_path = /obj/item/clothing/under/misc/nova/gear_harness/adam /datum/loadout_item/under/miscellaneous/ethereal_tunic name = "Ethereal Tunic" @@ -651,7 +623,6 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ /datum/loadout_item/under/miscellaneous/mech_suit name = "Mech Suit" item_path = /obj/item/clothing/under/costume/mech_suit - restricted_roles = list(JOB_ROBOTICIST) /* * FORMAL UNDERSUITS @@ -665,11 +636,11 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ /datum/loadout_item/under/formal/formaldressred name = "Formal Red Dress" - item_path = /obj/item/clothing/under/dress/skyrat/redformal + item_path = /obj/item/clothing/under/dress/nova/redformal /datum/loadout_item/under/formal/countessdress name = "Countess Dress" - item_path = /obj/item/clothing/under/dress/skyrat/countess + item_path = /obj/item/clothing/under/dress/nova/countess /datum/loadout_item/under/formal/assistant name = "Assistant Formal" @@ -733,20 +704,16 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ /datum/loadout_item/under/formal/executive_suit_alt name = "Wide-collared Executive Suit" - item_path = /obj/item/clothing/under/suit/skyrat/black_really_collared + item_path = /obj/item/clothing/under/suit/nova/black_really_collared /datum/loadout_item/under/formal/executive_skirt_alt name = "Wide-collared Executive Suitskirt" - item_path = /obj/item/clothing/under/suit/skyrat/black_really_collared/skirt + item_path = /obj/item/clothing/under/suit/nova/black_really_collared/skirt /datum/loadout_item/under/formal/navy_suit name = "Navy Suit" item_path = /obj/item/clothing/under/suit/navy -/datum/loadout_item/under/formal/maid_outfit - name = "Maid Outfit" - item_path = /obj/item/clothing/under/costume/maid - /datum/loadout_item/under/formal/maid_uniform name = "Maid Uniform" item_path = /obj/item/clothing/under/rank/civilian/janitor/maid @@ -765,11 +732,11 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ /datum/loadout_item/under/formal/helltaker name = "Red Shirt with White Trousers" - item_path = /obj/item/clothing/under/suit/skyrat/helltaker + item_path = /obj/item/clothing/under/suit/nova/helltaker /datum/loadout_item/under/formal/helltaker/skirt name = "Red Shirt with White Skirt" - item_path = /obj/item/clothing/under/suit/skyrat/helltaker/skirt + item_path = /obj/item/clothing/under/suit/nova/helltaker/skirt /datum/loadout_item/under/formal/red_lawyer_skirt name = "Red Lawyer Suit" @@ -817,11 +784,11 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ /datum/loadout_item/under/formal/recolorable_suit name = "Recolorable Formal Suit" - item_path = /obj/item/clothing/under/suit/skyrat/recolorable + item_path = /obj/item/clothing/under/suit/nova/recolorable /datum/loadout_item/under/formal/recolorable_suitskirt name = "Recolorable Formal Suitskirt" - item_path = /obj/item/clothing/under/suit/skyrat/recolorable/skirt + item_path = /obj/item/clothing/under/suit/nova/recolorable/skirt /datum/loadout_item/under/formal/trek_command name = "Trekkie Command Uniform" @@ -874,48 +841,47 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ /datum/loadout_item/under/formal/inferno name = "Inferno Suit" - item_path = /obj/item/clothing/under/suit/skyrat/inferno + item_path = /obj/item/clothing/under/suit/nova/inferno /datum/loadout_item/under/formal/inferno_skirt name = "Inferno Skirt" - item_path = /obj/item/clothing/under/suit/skyrat/inferno/skirt + item_path = /obj/item/clothing/under/suit/nova/inferno/skirt /datum/loadout_item/under/formal/designer_inferno name = "Designer Inferno Suit" - item_path = /obj/item/clothing/under/suit/skyrat/inferno/beeze - restricted_roles = list(JOB_LAWYER) + item_path = /obj/item/clothing/under/suit/nova/inferno/beeze /datum/loadout_item/under/formal/pencil name = "Black Pencilskirt" - item_path = /obj/item/clothing/under/suit/skyrat/pencil + item_path = /obj/item/clothing/under/suit/nova/pencil /datum/loadout_item/under/formal/pencil/black_really name = "Executive Pencilskirt" - item_path = /obj/item/clothing/under/suit/skyrat/pencil/black_really + item_path = /obj/item/clothing/under/suit/nova/pencil/black_really /datum/loadout_item/under/formal/pencil/charcoal name = "Charcoal Pencilskirt" - item_path = /obj/item/clothing/under/suit/skyrat/pencil/charcoal + item_path = /obj/item/clothing/under/suit/nova/pencil/charcoal /datum/loadout_item/under/formal/pencil/navy name = "Navy Pencilskirt" - item_path = /obj/item/clothing/under/suit/skyrat/pencil/navy + item_path = /obj/item/clothing/under/suit/nova/pencil/navy /datum/loadout_item/under/formal/pencil/burgandy name = "Burgandy Pencilskirt" - item_path = /obj/item/clothing/under/suit/skyrat/pencil/burgandy + item_path = /obj/item/clothing/under/suit/nova/pencil/burgandy /datum/loadout_item/under/formal/pencil/checkered name = "Checkered Pencilskirt" - item_path = /obj/item/clothing/under/suit/skyrat/pencil/checkered + item_path = /obj/item/clothing/under/suit/nova/pencil/checkered /datum/loadout_item/under/formal/pencil/tan name = "Tan Pencilskirt" - item_path = /obj/item/clothing/under/suit/skyrat/pencil/tan + item_path = /obj/item/clothing/under/suit/nova/pencil/tan /datum/loadout_item/under/formal/pencil/green name = "Green Pencilskirt" - item_path = /obj/item/clothing/under/suit/skyrat/pencil/green + item_path = /obj/item/clothing/under/suit/nova/pencil/green /datum/loadout_item/under/formal/azulea_oldblood name = " Oldblood's Royal regalia" @@ -947,5 +913,5 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ /datum/loadout_item/under/donator/captain_black name = "Captains Black Uniform" - item_path = /obj/item/clothing/under/rank/captain/skyrat/black + item_path = /obj/item/clothing/under/rank/captain/nova/black restricted_roles = list(JOB_CAPTAIN) diff --git a/modular_skyrat/modules/loadouts/loadout_ui/loadout_manager.dm b/modular_nova/modules/loadouts/loadout_ui/loadout_manager.dm similarity index 88% rename from modular_skyrat/modules/loadouts/loadout_ui/loadout_manager.dm rename to modular_nova/modules/loadouts/loadout_ui/loadout_manager.dm index b3187589972dd8..0443c9085379ec 100644 --- a/modular_skyrat/modules/loadouts/loadout_ui/loadout_manager.dm +++ b/modular_nova/modules/loadouts/loadout_ui/loadout_manager.dm @@ -1,8 +1,8 @@ /// -- The loadout manager and UI -- /// Tracking when a client has an open loadout manager, to prevent funky stuff. /client - /// A ref to loadout_manager datum. - var/datum/loadout_manager/open_loadout_ui = null + /// A weakref to loadout_manager datum. + var/datum/weakref/open_loadout_ui /// Datum holder for the loadout manager UI. /datum/loadout_manager @@ -10,28 +10,22 @@ var/client/owner /// The current selected loadout list. var/list/loadout_on_open - /// The key of the dummy we use to generate sprites - var/dummy_key - /// The dir the dummy is facing. - var/list/dummy_dir = list(SOUTH) - /// A ref to the dummy outfit we're using - var/datum/outfit/player_loadout/custom_loadout - /// Whether we see our favorite job's clothes on the dummy - var/view_job_clothes = TRUE /// Our currently open greyscaling menu. var/datum/greyscale_modify_menu/menu -/datum/loadout_manager/Destroy(force, ...) +/datum/loadout_manager/Destroy(force) + if(menu) + SStgui.close_uis(menu) + menu = null + owner?.open_loadout_ui = null owner = null QDEL_NULL(menu) - QDEL_NULL(custom_loadout) return ..() /datum/loadout_manager/New(user) owner = CLIENT_FROM_VAR(user) - owner.open_loadout_ui = src loadout_on_open = LAZYLISTDUPLICATE(owner.prefs.loadout_list) - custom_loadout = new() + owner.open_loadout_ui = WEAKREF(src) /datum/loadout_manager/ui_close(mob/user) owner?.prefs.save_character() @@ -39,7 +33,6 @@ SStgui.close_uis(menu) menu = null owner?.open_loadout_ui = null - qdel(custom_loadout) qdel(src) /datum/loadout_manager/ui_state(mob/user) @@ -50,6 +43,7 @@ ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "LoadoutManager") + ui.set_autoupdate(FALSE) ui.open() /datum/loadout_manager/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) @@ -104,18 +98,6 @@ LAZYNULL(owner.prefs.loadout_list) owner?.prefs?.character_preview_view.update_body() - // Rotates the dummy left or right depending on params["dir"] - if("rotate_dummy") - rotate_model_dir(params["dir"]) - - // Toggles between showing all dirs of the dummy at once. - if("show_all_dirs") - toggle_model_dirs() - - if("update_preview") - owner?.prefs.preview_pref = params["updated_preview"] - owner?.prefs?.character_preview_view.update_body() - if("donator_explain") if(GLOB.donator_list[owner.ckey]) to_chat(owner, examine_block("<b><font color='#f566d6'>Thank you for donating, this item is for you <3!</font></b>")) @@ -210,6 +192,11 @@ /datum/loadout_manager/proc/set_item_name(datum/loadout_item/item) var/current_name = "" var/current_desc = "" + + if(!(item.item_path in owner.prefs.loadout_list)) + to_chat(owner, span_warning("Select the item before attempting to name it!")) + return + if(INFO_NAMED in owner.prefs.loadout_list[item.item_path]) current_name = owner.prefs.loadout_list[item.item_path][INFO_NAMED] if(INFO_DESCRIBED in owner.prefs.loadout_list[item.item_path]) @@ -220,10 +207,6 @@ if(QDELETED(src) || QDELETED(owner) || QDELETED(owner.prefs)) return - if(!(item.item_path in owner.prefs.loadout_list)) - to_chat(owner, span_warning("Select the item before attempting to name to it!")) - return - if(input_name) owner.prefs.loadout_list[item.item_path][INFO_NAMED] = input_name else @@ -265,20 +248,6 @@ to_chat(owner, examine_block(composed_message)) -/// Rotate the dummy [DIR] direction, or reset it to SOUTH dir if we're showing all dirs at once. -/datum/loadout_manager/proc/rotate_model_dir(dir) - if(dir == "left") - owner?.prefs?.character_preview_view.dir = turn(owner?.prefs?.character_preview_view.dir, 90) - else - owner?.prefs?.character_preview_view.dir = turn(owner?.prefs?.character_preview_view.dir, -90) - -/// Toggle between showing all the dirs and just the front dir of the dummy. -/datum/loadout_manager/proc/toggle_model_dirs() - if(dummy_dir.len > 1) - dummy_dir = list(SOUTH) - else - dummy_dir = GLOB.cardinals - /datum/loadout_manager/ui_data(mob/user) var/list/data = list() @@ -287,10 +256,6 @@ all_selected_paths += path data["selected_loadout"] = all_selected_paths data["user_is_donator"] = !!(GLOB.donator_list[owner.ckey] || is_admin(owner)) - data["mob_name"] = owner.prefs.read_preference(/datum/preference/name/real_name) - data["ismoth"] = istype(owner.prefs.read_preference(/datum/preference/choiced/species), /datum/species/moth) // Moth's humanflaticcon isn't the same dimensions for some reason - data["preivew_options"] = list(PREVIEW_PREF_JOB, PREVIEW_PREF_LOADOUT, PREVIEW_PREF_NAKED) - data["preview_selection"] = owner?.prefs.preview_pref return data @@ -361,7 +326,7 @@ formatted_item["name"] = item.name formatted_item["path"] = item.item_path formatted_item["is_greyscale"] = !!(initial(loadout_atom.greyscale_config) && initial(loadout_atom.greyscale_colors) && (initial(loadout_atom.flags_1) & IS_PLAYER_COLORABLE_1)) - formatted_item["is_renamable"] = item.can_be_named + formatted_item["is_renameable"] = item.can_be_named formatted_item["is_job_restricted"] = !isnull(item.restricted_roles) formatted_item["is_job_blacklisted"] = !isnull(item.blacklisted_roles) formatted_item["is_species_restricted"] = !isnull(item.restricted_species) diff --git a/modular_skyrat/modules/loadouts/loadout_ui/loadout_outfit_helpers.dm b/modular_nova/modules/loadouts/loadout_ui/loadout_outfit_helpers.dm similarity index 98% rename from modular_skyrat/modules/loadouts/loadout_ui/loadout_outfit_helpers.dm rename to modular_nova/modules/loadouts/loadout_ui/loadout_outfit_helpers.dm index afbb54a68b2503..86f0598c5f68fd 100644 --- a/modular_skyrat/modules/loadouts/loadout_ui/loadout_outfit_helpers.dm +++ b/modular_nova/modules/loadouts/loadout_ui/loadout_outfit_helpers.dm @@ -89,6 +89,8 @@ equipOutfit(equipped_outfit, visuals_only) for(var/datum/loadout_item/item as anything in loadout_datums) + if(item.restricted_roles && equipping_job && !(equipping_job.title in item.restricted_roles)) + continue item.on_equip_item(preference_source, src, visuals_only) if(preference_source?.read_preference(/datum/preference/toggle/green_pin)) diff --git a/modular_skyrat/modules/loadouts/readme.md b/modular_nova/modules/loadouts/readme.md similarity index 100% rename from modular_skyrat/modules/loadouts/readme.md rename to modular_nova/modules/loadouts/readme.md diff --git a/modular_skyrat/modules/lorecaster/code/archive_viewer.dm b/modular_nova/modules/lorecaster/code/archive_viewer.dm similarity index 93% rename from modular_skyrat/modules/lorecaster/code/archive_viewer.dm rename to modular_nova/modules/lorecaster/code/archive_viewer.dm index a68478faa6675c..6ffd8209c33f09 100644 --- a/modular_skyrat/modules/lorecaster/code/archive_viewer.dm +++ b/modular_nova/modules/lorecaster/code/archive_viewer.dm @@ -1,11 +1,11 @@ /datum/computer_file/program/news_archive filename = "NewsArchive" filedesc = "Nanotrasen News Archives" - category = PROGRAM_CATEGORY_CREW - program_icon_state = "generic" + downloader_category = PROGRAM_CATEGORY_DEVICE + program_open_overlay = "generic" extended_desc = "This program lets you view out-of-circulation articles from the Nanotrasen News Network." - usage_flags = PROGRAM_ALL - requires_ntnet = TRUE + can_run_on_flags = PROGRAM_ALL + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET size = 6 tgui_id = "NtosNewsArchive" program_icon = "newspaper" diff --git a/modular_skyrat/modules/lorecaster/code/config.dm b/modular_nova/modules/lorecaster/code/config.dm similarity index 100% rename from modular_skyrat/modules/lorecaster/code/config.dm rename to modular_nova/modules/lorecaster/code/config.dm diff --git a/modular_skyrat/modules/lorecaster/code/story_manager.dm b/modular_nova/modules/lorecaster/code/story_manager.dm similarity index 98% rename from modular_skyrat/modules/lorecaster/code/story_manager.dm rename to modular_nova/modules/lorecaster/code/story_manager.dm index 3b60915bb692e2..585301cce8554c 100644 --- a/modular_skyrat/modules/lorecaster/code/story_manager.dm +++ b/modular_nova/modules/lorecaster/code/story_manager.dm @@ -40,7 +40,7 @@ // the TGUI needs _all_ of these to work if(!("title" in uncompiled_stories[story])) - uncompiled_stories[story]["title"] = "Nanotrasen News Broadcast" + uncompiled_stories[story]["title"] = "Symphionia News Broadcast" if(!("text" in uncompiled_stories[story])) uncompiled_stories[story]["text"] = "Someone forgot to fill out the article!" if(!("year" in uncompiled_stories[story])) diff --git a/modular_skyrat/modules/lorecaster/code/subsystem.dm b/modular_nova/modules/lorecaster/code/subsystem.dm similarity index 87% rename from modular_skyrat/modules/lorecaster/code/subsystem.dm rename to modular_nova/modules/lorecaster/code/subsystem.dm index e66df5f4dd0653..a8531ee0b3ec11 100644 --- a/modular_skyrat/modules/lorecaster/code/subsystem.dm +++ b/modular_nova/modules/lorecaster/code/subsystem.dm @@ -5,7 +5,7 @@ SUBSYSTEM_DEF(lorecaster) var/list/stories /datum/controller/subsystem/lorecaster/Initialize() - GLOB.news_network.create_feed_channel("Nanotrasen News Network", "NNN", "Get the latest stories from the frontier, here! For the not-quite-latest stories, download the \"News Archive\" app to any NTOS-based device today!", locked = TRUE, hardset_channel = 1001) + GLOB.news_network.create_feed_channel("Symphionia News Network", "NNN", "Get the latest stories from the frontier, here! For the not-quite-latest stories, download the \"News Archive\" app to any NTOS-based device today!", locked = TRUE, hardset_channel = 1001) var/config_delay = CONFIG_GET(number/lorecaster_delay) if(config_delay) wait = config_delay @@ -23,5 +23,5 @@ SUBSYSTEM_DEF(lorecaster) var/text = stories[picked_story]["text"] var/title = stories[picked_story]["title"] text += "\n\nOriginally published on: [stories[picked_story]["month"]]/[stories[picked_story]["day"]]/[stories[picked_story]["year"]]" - GLOB.news_network.submit_article(text || "Someone forgot to fill out the article!", title || "Nanotrasen News Broadcast", "Nanotrasen News Network", null) + GLOB.news_network.submit_article(text || "Someone forgot to fill out the article!", title || "Symphionia News Broadcast", "Symphionia News Network", null) stories -= picked_story diff --git a/modular_nova/modules/lorecaster/readme.md b/modular_nova/modules/lorecaster/readme.md new file mode 100644 index 00000000000000..15f7a6e33ef9f6 --- /dev/null +++ b/modular_nova/modules/lorecaster/readme.md @@ -0,0 +1,26 @@ +## Title: Lorecasters + +MODULE ID: LORECASTERS + +### Description: + +For broadcasting lore-related stories via newscasters and the archives app. +To add a story to rotation, add it to config/nova/news_stories.json, ideally at the top of the file for maximum organization +Once a story's been out too long, or there's too many in circulation, move older ones to config/nova/archived_stories.json, again ideally add it to the top (however these entries auto-sort by date in-game) + +### TG Proc Changes: + +- N/A + +### Defines: + +- N/A + +### Master file additions + +- N/A + +### Included files that are not contained in this module: + +- N/A + diff --git a/modular_skyrat/modules/manufacturer_examine/code/gun_company_additions.dm b/modular_nova/modules/manufacturer_examine/code/gun_company_additions.dm similarity index 92% rename from modular_skyrat/modules/manufacturer_examine/code/gun_company_additions.dm rename to modular_nova/modules/manufacturer_examine/code/gun_company_additions.dm index fb52206891e2fb..2fe351230644d5 100644 --- a/modular_skyrat/modules/manufacturer_examine/code/gun_company_additions.dm +++ b/modular_nova/modules/manufacturer_examine/code/gun_company_additions.dm @@ -37,9 +37,6 @@ /obj/item/gun/ballistic/automatic/pistol/give_manufacturer_examine() AddElement(/datum/element/manufacturer_examine, COMPANY_SCARBOROUGH) -/obj/item/gun/ballistic/automatic/pistol/m45a5/give_manufacturer_examine() - AddElement(/datum/element/manufacturer_examine, COMPANY_NANOTRASEN) - /obj/item/gun/ballistic/revolver/c38/detective/give_manufacturer_examine() AddElement(/datum/element/manufacturer_examine, COMPANY_NANOTRASEN) @@ -55,15 +52,9 @@ /obj/item/gun/ballistic/automatic/pistol/clandestine/give_manufacturer_examine() AddElement(/datum/element/manufacturer_examine, COMPANY_SCARBOROUGH) -/obj/item/gun/ballistic/automatic/pistol/pdh/pulse/give_manufacturer_examine() - return - /obj/item/gun/ballistic/automatic/l6_saw/toy/give_manufacturer_examine() AddElement(/datum/element/manufacturer_examine, COMPANY_DONK) -/obj/item/gun/ballistic/automatic/cmg/give_manufacturer_examine() - AddElement(/datum/element/manufacturer_examine, COMPANY_NANOTRASEN) - /obj/item/gun/ballistic/revolver/mateba/give_manufacturer_examine() return diff --git a/modular_skyrat/modules/manufacturer_examine/code/manufacturer_element.dm b/modular_nova/modules/manufacturer_examine/code/manufacturer_element.dm similarity index 95% rename from modular_skyrat/modules/manufacturer_examine/code/manufacturer_element.dm rename to modular_nova/modules/manufacturer_examine/code/manufacturer_element.dm index e7b77b2fee64d3..70b63cab3a4a87 100644 --- a/modular_skyrat/modules/manufacturer_examine/code/manufacturer_element.dm +++ b/modular_nova/modules/manufacturer_examine/code/manufacturer_element.dm @@ -2,7 +2,7 @@ /datum/element/manufacturer_examine element_flags = ELEMENT_BESPOKE argument_hash_start_idx = 2 - /// String to use for the examine text, use the defines in code/__DEFINES/~skyrat_defines/manufacturer_strings.dm + /// String to use for the examine text, use the defines in code/__DEFINES/~nova_defines/manufacturer_strings.dm var/company_string /datum/element/manufacturer_examine/Attach(atom/target, given_company_string) diff --git a/modular_skyrat/modules/manufacturer_examine/readme.md b/modular_nova/modules/manufacturer_examine/readme.md similarity index 100% rename from modular_skyrat/modules/manufacturer_examine/readme.md rename to modular_nova/modules/manufacturer_examine/readme.md diff --git a/modular_skyrat/modules/mapping/code/airless.dm b/modular_nova/modules/mapping/code/airless.dm similarity index 100% rename from modular_skyrat/modules/mapping/code/airless.dm rename to modular_nova/modules/mapping/code/airless.dm diff --git a/modular_skyrat/modules/mapping/code/areas/away_content.dm b/modular_nova/modules/mapping/code/areas/away_content.dm similarity index 98% rename from modular_skyrat/modules/mapping/code/areas/away_content.dm rename to modular_nova/modules/mapping/code/areas/away_content.dm index 253c1efb2639dc..d17fdef65a443e 100644 --- a/modular_skyrat/modules/mapping/code/areas/away_content.dm +++ b/modular_nova/modules/mapping/code/areas/away_content.dm @@ -1,7 +1,7 @@ -/* Skyrat away mission areas -* ATTENTION: USE EXTREME CARE WITH ASSIGNING AREAS IN THE DMM -* THE AWAY DIRECTOR WILL USE THESE, DO NOT DUPLICATE AN AREA FAR APART FROM ANOTHER SECTION. -*/ +/* Nova Sector away mission areas + * ATTENTION: USE EXTREME CARE WITH ASSIGNING AREAS IN THE DMM + * THE AWAY DIRECTOR WILL USE THESE, DO NOT DUPLICATE AN AREA FAR APART FROM ANOTHER SECTION. + */ /area/awaymission/black_mesa name = "Black Mesa Inside" diff --git a/modular_nova/modules/mapping/code/areas/centcom.dm b/modular_nova/modules/mapping/code/areas/centcom.dm new file mode 100644 index 00000000000000..6b6d0082a9ea4c --- /dev/null +++ b/modular_nova/modules/mapping/code/areas/centcom.dm @@ -0,0 +1,26 @@ +// Nova Sector CC area defines + +/* + * Ghost Cafe + */ + +/area/centcom/holding + name = "Holding Facility" + +/area/centcom/holding/cafe + name = "Ghost Cafe" + +/area/centcom/holding/cafevox + name = "Cafe Vox Box" + +/area/centcom/holding/cafedorms + name = "Ghost Cafe Dorms" + +/area/centcom/holding/cafepark + name = "Ghost Cafe Outdoors" + +/area/centcom/interlink + name = "The Interlink" + +/area/centcom/interlink/dorm_rooms + name = "Interlink Dorm Rooms" diff --git a/modular_skyrat/modules/mapping/code/areas/mining.dm b/modular_nova/modules/mapping/code/areas/mining.dm similarity index 88% rename from modular_skyrat/modules/mapping/code/areas/mining.dm rename to modular_nova/modules/mapping/code/areas/mining.dm index 92e97309f47437..8f15ee26c03579 100644 --- a/modular_skyrat/modules/mapping/code/areas/mining.dm +++ b/modular_nova/modules/mapping/code/areas/mining.dm @@ -1,8 +1,8 @@ -// Skyrat mining-related areas +// Nova Sector mining-related areas // Xeno arch /area/mine/xenoarch - icon = 'modular_skyrat/modules/xenoarch/icons/xenoarch_area.dmi' + icon = 'modular_nova/modules/xenoarch/icons/xenoarch_area.dmi' /area/mine/xenoarch/engineering name = "Xenoarch Engineering" diff --git a/modular_nova/modules/mapping/code/areas/ruins.dm b/modular_nova/modules/mapping/code/areas/ruins.dm new file mode 100644 index 00000000000000..27d7db51a7c356 --- /dev/null +++ b/modular_nova/modules/mapping/code/areas/ruins.dm @@ -0,0 +1,21 @@ +// Nova Sector area ruins + +/area/ruin/powered/miningfacility + name = "Abandoned Symphionia Mining Facility" + icon_state = "dk_yellow" + ambientsounds = list('sound/ambience/title3.ogg') //Classic vibes + +/area/ruin/powered/crashedshuttle + name = "Crashed Shuttle" + icon_state = "dk_yellow" + ambientsounds = list('sound/ambience/ambiodd.ogg') + +/area/ruin/powered/cozycabin + name = "Cozy Cabin" + icon_state = "dk_yellow" + ambientsounds = list('sound/ambience/ambicha1.ogg', 'sound/ambience/ambicha2.ogg', 'sound/ambience/ambicha3.ogg') + +/area/ruin/powered/biodome + name = "Jungle Biodome" + icon_state = "dk_yellow" + diff --git a/modular_nova/modules/mapping/code/areas/shuttles.dm b/modular_nova/modules/mapping/code/areas/shuttles.dm new file mode 100644 index 00000000000000..a7ceb71ce5b074 --- /dev/null +++ b/modular_nova/modules/mapping/code/areas/shuttles.dm @@ -0,0 +1,64 @@ +// Nova Sector shuttle areas + +/area/shuttle/prison_transport + name = "Prison Transporter NSS-74" + +/datum/map_template/shuttle/prison_transport + port_id = "prison_transport" + suffix = "nova" + name = "Prison Transporter NSS-74" + +/area/shuttle/blackmarket_chevvy + name = "Blackmarket Chevvy" + +/area/shuttle/interdyne_cargo + name = "Interdyne Cargo Shuttle" + +/area/shuttle/syndicate/slaver + name = "Slave Ship" + requires_power = TRUE + +/area/shuttle/tarkon_driver + name = "Tarkon Driver" + +/area/shuttle/trader/bridge + name = "Trader Ship Bridge" + +/area/shuttle/trader/engine + name = "Trader Ship Engine" + +/area/shuttle/trader/bar + name = "Trader Ship Bar" + +/area/shuttle/trader/crew + name = "Trader Ship Crew Quarters" + +/area/shuttle/trader/cargo + name = "Trader Ship Cargo Bay" + +/area/shuttle/escape/no_light + area_flags = UNIQUE_AREA + +/area/shuttle/arrival/no_light + static_lighting = FALSE + +/area/shuttle/mining/no_light + static_lighting = FALSE + +/area/shuttle/supply/no_light + static_lighting = FALSE + +/area/shuttle/transport/no_light + static_lighting = FALSE + +/area/shuttle/mining/advanced + name = "NMC Phoenix" + +/area/shuttle/mining/advanced/public + name = "NMC Chimera" + +/area/shuttle/mining/large/advanced + name = "NMC Manticore" + +/area/shuttle/labor/advanced + name = "NMC Drudge" diff --git a/modular_nova/modules/mapping/code/areas/space.dm b/modular_nova/modules/mapping/code/areas/space.dm new file mode 100644 index 00000000000000..3f6dc36ac4385d --- /dev/null +++ b/modular_nova/modules/mapping/code/areas/space.dm @@ -0,0 +1,276 @@ +// Nova Sector space area defines - Mostly for ruins + +///Cybersun, Forgotten Ship +/area/ruin/space/has_grav/cybersun + name = "Cybersun" + icon_state = "spacecontent1" + +/area/ruin/space/has_grav/cybersun/atmospherics + name = "Abandoned Atmospherics Wing" + icon_state = "atmos" + +///Generic Nova Sector Ruins + +/area/ruin/space/has_grav/powered/nova/smugglies + name = "Suspicious Cargo Installation" + +/area/ruin/space/has_grav/powered/nova/clothing_facility + name = "Abandoned Research Station" + +/area/ruin/space/has_grav/powered/nova/luna + name = "Unexplored Location" + +/area/ruin/space/has_grav/powered/nova/blackmarket + name = "Shady Market" + +/area/ruin/space/has_grav/powered/nova/alien_tool_lab + name = "Alien Tool Lab" + +/area/ruin/space/has_grav/powered/nova/scrapheap + name = "Scrap Heap" + +///Syndicate Deep Space Two +/area/ruin/space/has_grav/nova/des_two + name = "DS-2" //If DS-1 is so great... + icon = 'icons/area/areas_centcom.dmi' + icon_state = "syndie-ship" + +//Cargo +/area/ruin/space/has_grav/nova/des_two/cargo + name = "DS-2 Warehouse" + +/area/ruin/space/has_grav/nova/des_two/cargo/hangar + name = "DS-2 Hangar" + +//Bridge +/area/ruin/space/has_grav/nova/des_two/bridge + name = "DS-2 Bridge" + icon_state = "syndie-control" + +/area/ruin/space/has_grav/nova/des_two/bridge/cl + name = "DS-2 Corporate Liaison's Office" + sound_environment = SOUND_AREA_WOODFLOOR + +/area/ruin/space/has_grav/nova/des_two/bridge/admiral + name = "DS-2 Station Admiral's Office" + sound_environment = SOUND_AREA_WOODFLOOR + +/area/ruin/space/has_grav/nova/des_two/bridge/vault + name = "DS-2 Vault" + +/area/ruin/space/has_grav/nova/des_two/bridge/eva + name = "DS-2 E.V.A." + +//Security +/area/ruin/space/has_grav/nova/des_two/security + name = "DS-2 Security" + ambience_index = AMBIENCE_DANGER + +/area/ruin/space/has_grav/nova/des_two/security/armory + name = "DS-2 Armory" + +/area/ruin/space/has_grav/nova/des_two/security/lawyer + name = "DS-2 Interrogation Office" + +/area/ruin/space/has_grav/nova/des_two/security/prison + name = "DS-2 Long-Term Brig" + +//Service +/area/ruin/space/has_grav/nova/des_two/service + name = "DS-2 Service Wing" + +/area/ruin/space/has_grav/nova/des_two/service/diner + name = "DS-2 Diner" + +/area/ruin/space/has_grav/nova/des_two/service/dorms + name = "DS-2 Dormitories" + +/area/ruin/space/has_grav/nova/des_two/service/dorms/fitness + name = "DS-2 Fitness Room" + +/area/ruin/space/has_grav/nova/des_two/service/lounge + name = "DS-2 Lounge" + +/area/ruin/space/has_grav/nova/des_two/service/hydroponics + name = "DS-2 Hydroponics" + +//Hallways +/area/ruin/space/has_grav/nova/des_two/halls + name = "DS-2 Central Halls" + +//Engineering +/area/ruin/space/has_grav/nova/des_two/engineering + name = "DS-2 Engineering" + +//Research +/area/ruin/space/has_grav/nova/des_two/research + name = "DS-2 Research" + +//Medbay +/area/ruin/space/has_grav/nova/des_two/medbay + name = "DS-2 Medical Bay" + +/area/ruin/space/has_grav/nova/des_two/medbay/chem + name = "DS-2 Chemistry" + +/area/ruin/space/has_grav/shuttle8532engineering + name = "Shuttle 8532 Engine Room" + +/area/ruin/space/has_grav/shuttle8532researchbay + name = "Shuttle 8532 Research Bay" + +/area/ruin/space/has_grav/shuttle8532cargohall + name = "Shuttle 8532 Cargo Hall" + +/area/ruin/space/has_grav/shuttle8532crewquarters + name = "Shuttle 8532 Crew Quarters" + +/area/ruin/space/has_grav/shuttle8532bridge + name = "Shuttle 8532 Bridge" + +/area/ruin/space/has_grav/vaulttango + name = "ARBORLINK Vault Tango" + +/area/ruin/space/has_grav/waypoint + name = "Abandoned Station" + +/area/ruin/space/has_grav/powered/toy_store + name = "Toy Store" + +/area/ruin/space/has_grav/powered/prison_shuttle + name = "Prison Shuttle" + +/area/ruin/space/has_grav/powered/posterpandamonium + name = "Strange Shuttle" + +//Port Tarkon + +/area/ruin/space/has_grav/port_tarkon + name = "P-T Cryo-Storage" + +/area/ruin/space/has_grav/port_tarkon/afthall + name = "P-T Aft Hallway" + +/area/ruin/space/has_grav/port_tarkon/forehall + name = "P-T Fore Hallway" + +/area/ruin/space/has_grav/port_tarkon/starboardhall + name = "P-T Starboard Hallway" + +/area/ruin/space/has_grav/port_tarkon/porthall + name = "P-T Port Hallway" + +/area/ruin/space/has_grav/port_tarkon/trauma + name = "P-T Trauma Center" + icon_state = "medbay1" + +/area/ruin/space/has_grav/port_tarkon/developement + name = "P-T Developement Center" + icon_state = "research" + +/area/ruin/space/has_grav/port_tarkon/comms + name = "P-T Communication Center" + icon_state = "captain" + +/area/ruin/space/has_grav/port_tarkon/power1 + name = "P-T Solar Control" + icon_state = "engine" + +/area/ruin/space/has_grav/port_tarkon/centerhall + name = "P-T Central Hallway" + icon_state = "hallC" + +/area/ruin/space/has_grav/port_tarkon/secoff + name = "P-T Security Office" + icon_state = "security" + +/area/ruin/space/has_grav/port_tarkon/atmos + name = "P-T Atmospheric Center" + icon_state = "engine" + +/area/ruin/space/has_grav/port_tarkon/kitchen + name = "P-T Kitchen" + icon_state = "cafeteria" + +/area/ruin/space/has_grav/port_tarkon/garden + name = "P-T Garden" + icon_state = "garden" + +/area/ruin/space/has_grav/port_tarkon/cargo + name = "P-T Cargo Center" + icon_state = "cargo" + +/area/ruin/space/has_grav/port_tarkon/mining + name = "P-T Mining Office" + icon_state = "cargo" + +/area/ruin/space/has_grav/port_tarkon/storage + name = "P-T Warehouse" + icon_state = "cargo" + +/area/ruin/space/has_grav/port_tarkon/toolstorage + name = "P-T Tool Storage" + icon_state = "tool_storage" + +/area/ruin/space/has_grav/port_tarkon/observ + name = "P-T Observatory" + icon_state = "crew_quarters" + +/area/ruin/space/has_grav/port_tarkon/dorms + name = "P-T Dorms" + icon_state = "crew_quarters" + +/area/solars/tarkon + name = "\improper P-T Solar Array" + icon_state = "solarsS" + has_gravity = STANDARD_GRAVITY + +// Cargodise Lost Freighter + +/area/ruin/space/has_grav/cargodise_freighter/primaryhall + name = "Freighter Primary Hall" + +/area/ruin/space/has_grav/cargodise_freighter/trauma + name = "Freighter Trauma Center" + +/area/ruin/space/has_grav/cargodise_freighter/utility + name = "Freighter Utility Room" + +/area/ruin/space/has_grav/cargodise_freighter/kitchen + name = "Freighter Kitchen" + +/area/ruin/space/has_grav/cargodise_freighter/bridge + name = "Freighter Bridge" + +/area/ruin/space/has_grav/cargodise_freighter/cargo + name = "Freighter Cargo Bay" + +/area/ruin/space/has_grav/cargodise_freighter/mining + name = "Freighter Mining Office" + +/area/ruin/space/has_grav/cargodise_freighter/quarters + name = "Freighter Crew Quarters" + +/area/ruin/space/has_grav/cargodise_freighter/hydroponics + name = "Freighter Hydroponics" + +/area/ruin/space/has_grav/cargodise_freighter/vault + name = "Freighter Vault" + +/area/ruin/space/has_grav/cargodise_freighter/exterior + name = "Freighter Exterior" + +// Nova Sector's Space Hotel + +/area/ruin/space/has_grav/hotel/sauna + name = "Hotel Sauna Room" + +/area/ruin/space/has_grav/hotel/workroom/quarters + name = "Hotel Staff Quarters" + +/area/ruin/solars/hotel/solars + name = "\improper Hotel Solar Array" + requires_power = FALSE + area_flags = UNIQUE_AREA + sound_environment = SOUND_AREA_SPACE + base_lighting_alpha = 255 diff --git a/modular_nova/modules/mapping/code/areas/station.dm b/modular_nova/modules/mapping/code/areas/station.dm new file mode 100644 index 00000000000000..9d358189e5ab73 --- /dev/null +++ b/modular_nova/modules/mapping/code/areas/station.dm @@ -0,0 +1,582 @@ +// Nova Sector specific station areas + +/* + * Station bound areas + */ + +// Command areas +/area/station/command/captain_kitchen + name = "Captain's Kitchen" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "capt_kitchen" + +/area/station/command/captain_dining + name = "Captain's Dining Room" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "capt_dining" + +/area/station/command/cc_dock + name = "Central Command Ferry Dock" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "cc_dock" + +/area/station/command/secure_bunker + name = "Secure Bunker" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "secure_bunker" + +// NT Consultant area +/area/station/command/heads_quarters/nt_rep + name = "Nanotrasen Consultant's Office" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "nt_rep" + +// Blueshield area +/area/station/command/heads_quarters/blueshield + name = "Blueshield's Office" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "blueshield" + +/* + * Department areas + */ + +// Engineering Areas +/area/station/engineering/power_room + name = "Ship Power Storage Room" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "power_room" + +// Atmos Areas +/area/station/engineering/atmos/hallway + name = "Atmos Hall" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "atmos_hall" + +/area/station/engineering/atmos/test_chambers + name = "Atmospherics Testing Chambers" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "atmos_test" + +// Medical Areas +/area/station/medical/aslyum + name = "Aslyum" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "aslyum" + +// Science Areas +/area/station/science/tele_sci + name = "Tele Sci Room" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "tele_sci" + +// Security areas +// CO Office +/area/station/security/corrections_officer + name = "Corrections Officer Lounge" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "corrections_officer" + +// Department power stations +/area/station/cargo/power_station + name = "Cargo Power Station" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "cargo_power" + +/area/station/cargo/power_station/lower + name = "Lower Cargo Power Station" + +/area/station/cargo/power_station/upper + name = "Upper Cargo Power Station" + +/area/station/engineering/power_station + name = "Engineering Power Station" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "engie_power" + +/area/station/engineering/power_station/lower + name = "Lower Engineering Power Station" + +/area/station/engineering/power_station/upper + name = "Upper Engineering Power Station" + +/area/station/medical/power_station + name = "Medical Power Station" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "med_power" + +/area/station/science/power_station + name = "Science Power Station" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "sci_power" + +/area/station/security/power_station + name = "Security Power Station" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "sec_power" + +/area/station/service/power_station + name = "Service Power Station" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "serv_power" + +/* + * General areas + */ + +// Generic/Civ areas, typical a non-restricted room +/area/station/common/pool + name = "Pool" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "pool" + +/area/station/common/cryopods + name = "Cryopods Room" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "cryopods" + +/area/station/service/salon + name = "\improper Salon" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "salon" + +/area/station/service/forge + name = "Forge" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "forge" + +// Wrestling areas for BlueShift +/area/station/common/wrestling + name = "Wrestling" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "wrestle" + +/area/station/common/wrestling/arena + name = "Wrestling Arena" + icon_state = "wrestle_arena" + +/area/station/common/wrestling/lobby + name = "Wrestling Arena Lobby" + icon_state = "wrestle_lobby" + +/area/station/common/wrestling/locker + name = "Wrestling Arena Locker Room" + icon_state = "wrestle_locker" + +/area/station/common/tailoring + name = "Tailoring Shop" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "tailoring" + +// BlueShift Night Club +/area/station/common/night_club + name = "Night Club" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "nightclub" + +/area/station/common/night_club/back_stage + name = "Night Club Backstage" + icon_state = "nightclub_backstage" + +/area/station/common/night_club/changing_room + name = "Night Club Changing Room" + icon_state = "nightclub_changing_room" + +// Rec related areas +/area/station/common/laser_tag + name = "Laser Tag" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "laser_tag" + +/area/station/common/arcade + name = "Arcade" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "arcade" + +/area/station/common/locker_room_shower + name = "Locker Room Shower" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "locker_room_shower" + +/area/station/common/cafeteria + name = "Cafeteria" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "cafeteria" + +/area/station/common/gaskiosk + name = "\improper Internals Kiosk" + icon_state = "vacant_commissary" + +/area/station/commons/dorms/room5 + name = "\improper Dorms Room 5" + icon_state = "room1" + +/area/station/commons/dorms/room6 + name = "\improper Dorms Room 6" + icon_state = "room2" + +/area/station/commons/dorms/room7 + name = "\improper Dorms Room 7" + icon_state = "room3" + +/area/station/commons/dorms/room8 + name = "\improper Dorms Room 8" + icon_state = "room4" + +/area/station/commons/dorms/vacantroom + name = "\improper Vacant Dorms Room" + icon_state = "vacant_room" + +/area/station/common/wrestling/beverage + name = "\improper Arena Beverage Stand" + icon_state = "wrestle_maint" + +/area/station/common/wrestling/concessions + name = "\improper Arena Concessions Stand" + icon_state = "wrestle_maint" + +/area/station/common/pool/sauna + name = "\improper Pool Sauna" + icon_state = "pool" + +/area/station/service/barber/spa + name = "\improper Spa" + icon_state = "barber" + +/* + * Department/Generic maintenance areas + */ + +// Generic +/area/station/maintenance/evac_maintenance + name = "Departures Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "evac_maint" + +/area/station/maintenance/evac_maintenance/upper + name = "Upper Departures Maintenance" + icon_state = "evac_maint_upper" + +/area/station/maintenance/pool_maintenance + name = "Pool Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "pool_maint" + +/area/station/maintenance/port/upper + name = "Upper Port Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "port_maint_upper" + +// Science +/area/station/maintenance/department/science/lower + name = "Lower Science Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "lower_sci_maint" + +/area/station/maintenance/department/science/upper + name = "Upper Science Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "upper_sci_maint" + +/area/station/maintenance/department/science/ordnance_maint + name = "Ordnance Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "ord_maint" + +/area/station/maintenance/department/science/ordnance_maint_lesser + name = "Lesser Ordnance Maintenace" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "lesser_ord_maint" + +// Engineering +/area/station/maintenance/department/engineering/atmos/aft_maint + name = "Aft Atmospherics Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "atmos_maint_aft" + +/area/station/maintenance/department/engineering/atmos/port_maint + name = "Port Atmospherics Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "atmos_maint_port" + +/area/station/maintenance/department/engineering/atmos_aux_port + name = "Port Atmospherics Auxiliary" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "atmos_aux_port" + +/area/station/maintenance/department/engineering/atmos/hfr_maint + name = "HFR Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "hfr_maint" + +/area/station/maintenance/department/engineering/central + name = "Central Engineering Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "engie_maint_cent" + +/area/station/maintenance/department/engineering/engie_aft_starboard + name = "Aft Starboard Engineering Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "engie_maint_as" + +/area/station/maintenance/department/engineering/engine_aft_port + name = "Aft Port Engine Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "engine_maint_ap" + +/area/station/maintenance/department/engineering/engine_aft_starboard + name = "Aft Starboard Engine Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "engine_maint_as" + +/area/station/maintenance/department/engineering/lesser + name = "Lesser Engineering Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "engie_maint_lesser" + +/area/station/maintenance/department/engine/atmos/lesser + name = "Lesser Atmospherics Maintenance" + +// Security +/area/station/maintenance/law + name = "Law Office Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "law_maint" + +/area/station/maintenance/department/security/lesser + name = "Lesser Security Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "sec_maint_lesser" + +/area/station/maintenance/department/security/lower + name = "Lower Security Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "sec_maint_lower" + +/area/station/maintenance/department/security/greater + name = "Greater Security Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "sec_maint_greater" + +/area/station/maintenance/department/security/prison_lower + name = "Lower Prison Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "prison_maint_lower" + +/area/station/maintenance/department/security/prison_upper + name = "Upper Prison Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "prison_maint_upper" + +/area/station/maintenance/department/security/upper + name = "Upper Security Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "sec_maint_upper" + +// Service +/area/station/maintenance/library + name = "Library Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "library_maint" + +/area/station/maintenance/library/lower + name = "Lower Library Maintenance" + icon_state = "library_maint_lower" + +/area/station/maintenance/library/upper + name = "Upper Library Maintenance" + icon_state = "library_maint_upper" + +/area/station/maintenance/night_club + name = "Night Club Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "nightclub_maint" + +/area/station/maintenance/salon + name = "Salon Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "salon_maint" + +/area/station/maintenance/salon/lower + name = "Lower Salon Maintenance" + icon_state = "salon_maint_lower" + +/area/station/maintenance/salon/upper + name = "Upper Salon Maintenance" + icon_state = "salon_maint_upper" + +/area/station/maintenance/wrestle + name = "Wrestling Arena Lobby Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "wrestle_maint" + +// Abandon rooms +/area/station/maintenance/abandon_arcade + name = "Abandoned Arcade" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "abadn_arcade" + +/area/station/maintenance/abandon_art_studio + name = "Abandoned Art Studio" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "abadn_art_studio" + +/area/station/maintenance/abandon_cafeteria + name = "Abandoned Cafeteria" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "abandon_cafe" + +/area/station/maintenance/abandon_diner + name = "Abandoned Diner" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "abadn_diner" + +/area/station/maintenance/abandon_exam + name = "Abandoned Exam" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "abadn_exam" + +// Subtype used for Blueshift +/area/station/maintenance/abandon_exam/cat + name = "Abandoned Cat Exam" + +/area/station/maintenance/abandon_holding_cell + name = "Abandoned Holding Cell" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "abadn_hold_cell" + +/area/station/maintenance/abandon_cafeteria/hydro + name = "Abandoned Cafeteria Hydroponics" + icon_state = "abandon_cafe_hydro" + +/area/station/maintenance/abandon_cafeteria/hydro_walk + name = "Abandoned Cafeteria Hydroponics Walkway" + icon_state = "abandon_cafe_hydro_walk" + +/area/station/maintenance/abandon_kitchen_upper + name = "Abandoned Secondary Kitchen" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "abadn_kitchen_up" + +/area/station/maintenance/abandon_office + name = "Abandoned Office" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "abadn_office" + +/area/station/maintenance/abandon_psych + name = "Abandoned Psychologist Office" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "abadn_psych" + +/area/station/maintenance/abandon_wrestle + name = "Abandoned Wrestle Arena" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "abandon_wrestle" + +/area/station/maintenance/abandon_surgery + name = "Abandoned Surgery" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "abandon_surgery" + +// Regular maint rooms +/area/station/maintenance/aux_eva + name = "Auxiliary EVA Room" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "aux_eva" + +/area/station/maintenance/coffin_supply + name = "Coffin Supplies Room" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "coffin_supply" + +/area/station/maintenance/clown_chamber + name = "Clown Chamber" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "clown_chamber" + +/area/station/maintenance/console_room + name = "Console Room" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "console_room" + +/area/station/maintenance/cult_chapel + name = "Forbidden Chapel" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "cult_chapel" + +/area/station/maintenance/cult_chapel_maint + name = "Forbidden Chapel's Maintenance" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "cult_chapel_maint" + +/area/station/maintenance/dorm_room + name = "Maintenance Dorm Room" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "dorm_room_maint" + +/area/station/maintenance/gag_room + name = "Gag Room" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "gag_room" + +/area/station/maintenance/gamer_lair + name = "Gamer Lair" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "gamer_lair" + +/area/station/maintenance/rus_gambling + name = "Russian Gambling Den" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "russ_gambling" + +/area/station/maintenance/rus_surgery + name = "Russian Organ Extraction Room" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "russ_surgery" + +/area/station/maintenance/xenobio_disposals + name = "Xenobiology Disposals" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "xenobio_dispose" + +// BlueShift unique rooms, or rooms for ship-class "stations" +// Thruster rooms +/area/station/maintenance/thruster_room + name = "Thruster Room" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "thrust_room" + +/area/station/maintenance/thruster_room/aft + name = "Aft Thruster Room" + icon_state = "aft_thrust_room" + +/area/station/maintenance/thruster_room/central + name = "Central Thruster Room" + icon_state = "cent_thrust_room" + +/area/station/maintenance/thruster_room/port + name = "Port Thruster Room" + icon_state = "port_thrust_room" + +/area/station/maintenance/thruster_room/starboard + name = "Starboard Thruster Room" + icon_state = "sb_thrust_room" + +// EVA Sheds used on BlueShift +/area/station/maintenance/eva_shed + name = "EVA Shed" + icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi' + icon_state = "eva_shed" + +/area/station/maintenance/eva_shed/port + name = "Port EVA Shed" + icon_state = "eva_shed_port" + +/area/station/maintenance/eva_shed/starboard + name = "Starboard EVA Shed" + icon_state = "eva_shed_sb" + +// Department Rooms +/area/station/science/xenobiology/control + name = "\improper Xenobiology Control Room" + icon_state = "xenobio" diff --git a/modular_skyrat/modules/mapping/code/automatic_respawner.dm b/modular_nova/modules/mapping/code/automatic_respawner.dm similarity index 95% rename from modular_skyrat/modules/mapping/code/automatic_respawner.dm rename to modular_nova/modules/mapping/code/automatic_respawner.dm index 4ebaf7ac7a6581..4383b03652334c 100644 --- a/modular_skyrat/modules/mapping/code/automatic_respawner.dm +++ b/modular_nova/modules/mapping/code/automatic_respawner.dm @@ -1,7 +1,7 @@ /obj/machinery/automatic_respawner name = "Automatic Respawner" desc = "Allows for lost souls to find a new body." - icon = 'modular_skyrat/modules/mapping/icons/machinery/automatic_respawner.dmi' + icon = 'modular_nova/modules/mapping/icons/machinery/automatic_respawner.dmi' icon_state = "respawner" use_power = FALSE //It doesn't make sense for this to require power in most of the use cases. @@ -80,7 +80,7 @@ /obj/item/respawn_implant //Not actually an implanter name = "Respawn Implanter" desc = "Life doesn't end after death." - icon = 'modular_skyrat/modules/aesthetics/implanter/implanter.dmi' + icon = 'modular_nova/modules/aesthetics/implanter/implanter.dmi' icon_state = "implanter0" inhand_icon_state = "syringe_0" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' @@ -117,7 +117,7 @@ var/datum/mind/parent_mind = parent RegisterSignal(parent_mind.current, COMSIG_LIVING_DEATH, PROC_REF(start_timer)) -/datum/component/respawner/Destroy(force, silent) +/datum/component/respawner/Destroy(force) var/datum/mind/parent_mind = parent UnregisterSignal(parent_mind.current, COMSIG_LIVING_DEATH) return ..() diff --git a/modular_nova/modules/mapping/code/color.dm b/modular_nova/modules/mapping/code/color.dm new file mode 100644 index 00000000000000..f7ebf8fc9f98c8 --- /dev/null +++ b/modular_nova/modules/mapping/code/color.dm @@ -0,0 +1,13 @@ +/obj/item/clothing/gloves/captain/pilot + desc = "Regal blue gloves, with a nice silver trim, a diamond anti-shock coating, and an integrated thermal barrier." + name = "shuttle pilot's gloves" + icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi' + icon_state = "pilot" + +/obj/item/clothing/gloves/color/ffyellow // EXTRA fake, for the loadout + name = "yellow gloves" + desc = "At first glance, these look like insulated gloves, but... is that crayon?" + icon_state = "yellow" + inhand_icon_state = "ygloves" + siemens_coefficient = 0.5 diff --git a/modular_skyrat/modules/mapping/code/doors.dm b/modular_nova/modules/mapping/code/doors.dm similarity index 100% rename from modular_skyrat/modules/mapping/code/doors.dm rename to modular_nova/modules/mapping/code/doors.dm diff --git a/modular_skyrat/modules/mapping/code/dungeon.dm b/modular_nova/modules/mapping/code/dungeon.dm similarity index 88% rename from modular_skyrat/modules/mapping/code/dungeon.dm rename to modular_nova/modules/mapping/code/dungeon.dm index cae78da39acb87..5b7f4b51f4ffcb 100644 --- a/modular_skyrat/modules/mapping/code/dungeon.dm +++ b/modular_nova/modules/mapping/code/dungeon.dm @@ -5,7 +5,7 @@ /turf/closed/indestructible/dungeon name = "stone wall" desc = "Cold stone walls. It's like a dungeon." - icon = 'modular_skyrat/modules/mapping/icons/unique/dungeon.dmi' + icon = 'modular_nova/modules/mapping/icons/unique/dungeon.dmi' icon_state = "wall" base_icon_state = "wall" explosive_resistance = INFINITY @@ -22,7 +22,7 @@ gender = PLURAL name = "cobblestone" desc = "Cobbled stone that makes a permanent pathway. A bit old-fashioned." - icon = 'modular_skyrat/modules/mapping/icons/unique/dungeon.dmi' + icon = 'modular_nova/modules/mapping/icons/unique/dungeon.dmi' icon_state = "cobble" planetary_atmos = FALSE @@ -52,7 +52,7 @@ /obj/structure/dungeon name = "stone wall with a hole in it!" desc = "A hole in the wall! It's small." - icon = 'modular_skyrat/modules/mapping/icons/unique/dungeon.dmi' + icon = 'modular_nova/modules/mapping/icons/unique/dungeon.dmi' icon_state = "wall-hole" layer = ABOVE_MOB_LAYER anchored = TRUE @@ -62,7 +62,7 @@ /obj/structure/dungeon/doorway name = "doorway" desc = "A doorway fashioned into a stone wall. It's a tight fit." - icon = 'modular_skyrat/modules/mapping/icons/unique/dungeon.dmi' + icon = 'modular_nova/modules/mapping/icons/unique/dungeon.dmi' icon_state = "wall-doorway" layer = ABOVE_MOB_LAYER anchored = TRUE @@ -79,7 +79,7 @@ /obj/structure/railing/stone name = "stone wall" desc = "Cobbled stone wall. This is pretty strong." - icon = 'modular_skyrat/modules/mapping/icons/unique/dungeon.dmi' + icon = 'modular_nova/modules/mapping/icons/unique/dungeon.dmi' icon_state = "cobble-wall" max_integrity = 100 density = TRUE @@ -103,7 +103,7 @@ /obj/structure/mineral_door/dungeon name = "wooden door" desc = "A small wooden door. It probably still opens, but it's kind of small." - icon = 'modular_skyrat/modules/mapping/icons/unique/dungeon.dmi' + icon = 'modular_nova/modules/mapping/icons/unique/dungeon.dmi' icon_state = "wall-door" openSound = 'sound/effects/doorcreaky.ogg' closeSound = 'sound/effects/doorcreaky.ogg' @@ -113,7 +113,7 @@ /obj/machinery/button/dungeon name = "stone brick" desc = "A brick that's stuck out of the wall. Huh." - icon = 'modular_skyrat/modules/mapping/icons/unique/dungeon.dmi' + icon = 'modular_nova/modules/mapping/icons/unique/dungeon.dmi' base_icon_state = "doorctrl" icon_state = "doorctrl" power_channel = AREA_USAGE_ENVIRON diff --git a/modular_skyrat/modules/mapping/code/fence.dm b/modular_nova/modules/mapping/code/fence.dm similarity index 79% rename from modular_skyrat/modules/mapping/code/fence.dm rename to modular_nova/modules/mapping/code/fence.dm index 83f8285516e17a..64815f80fea271 100644 --- a/modular_skyrat/modules/mapping/code/fence.dm +++ b/modular_nova/modules/mapping/code/fence.dm @@ -3,6 +3,6 @@ // Interlink specific fences so people can't cut their way into restricted areas /obj/structure/fence/interlink name = "reinforced fence" - desc = "The latest in Nanotrasen development: A reinforced metal fence. This'll keep those pesky assistants out!" + desc = "The latest in Symphionia development: A reinforced metal fence. This'll keep those pesky assistants out!" cuttable = FALSE invulnerable = TRUE diff --git a/modular_nova/modules/mapping/code/fluff.dm b/modular_nova/modules/mapping/code/fluff.dm new file mode 100644 index 00000000000000..35a587d85f9979 --- /dev/null +++ b/modular_nova/modules/mapping/code/fluff.dm @@ -0,0 +1,284 @@ +//File for miscellaneous fluff objects, both item and structure +//This one is specifically for ruin-specific items, such as ID, lore, or super-specific decorations + +/* ----------------- ID Cards ----------------- */ +/obj/item/card/id/away/old/salvagepod //Used for salvagepost ruin access -- NOT WORKING YET REE + name = "Cutter's Pod access card" + desc = "An ancient access card with the words \"Cutter's Pod\" printed on in big bold letters. It'll be a miracle if this still works." + trim = /datum/id_trim/away/old/eng + +/obj/item/card/id/away/tarkon + name = "Tarkon visitor's pass" + desc = "A dust-collected visitors pass, A small tagline reading \"Port Tarkon, The first step to Civilian Partnership in Space Homesteading\"." + trim = /datum/id_trim/away/tarkon + +/* ----------------- Lore ----------------- */ +//Tape subtype for adding ruin lore -- the variables below are the ones you need to change +/obj/item/tape/ruins + name = "tape" + desc = "A magnetic tape that can hold up to ten minutes of content on either side." + icon_state = "tape_white" //Options are white, blue, red, yellow, purple, greyscale, or you can chose one randomly (see tape/ruins/random below) + + max_capacity = 10 MINUTES + used_capacity = 0 SECONDS //To keep in-line with the timestamps, you can also do this as 10 = 1 second + ///Numbered list of chat messages the recorder has heard with spans and prepended timestamps. Used for playback and transcription. + storedinfo = list() //Look at the tape/ruins/ghostship tape for reference + ///Numbered list of seconds the messages in the previous list appear at on the tape. Used by playback to get the timing right. + timestamp = list() //10 = 1 second. Look at the tape/ruins/ghostship tape for reference + used_capacity_otherside = 0 SECONDS //Separate my side + storedinfo_otherside = list() + timestamp_otherside = list() + +/obj/item/tape/ruins/random/Initialize(mapload) + icon_state = "tape_[pick("white", "blue", "red", "yellow", "purple", "greyscale")]" + . = ..() +//End of lore tape subtype + +/obj/item/tape/ruins/salvagepost //End of the cutters shift and he done goofed, left a message for the next one - who never arrived + icon_state = "tape_yellow" + desc = "The tape is lazily labelled with \"Msg for my replacement\"" + + used_capacity = 380 + storedinfo = list( + 1 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording started.</span>\"</span></span>", + 2 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>cheerily says, \"<span class=' '>Hey, Cutter! If you're reading this, congratulations on taking over my post. Was waiting to move out to a new system.</span>\"</span></span>", + 3 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>sighs, \"<span class=' '>Listen, I'll just put it straight - I've left this place in a sorrier state than you deserve.</span>\"</span></span>", + 4 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>says, \"<span class=' '>We hauled in this big rigger, y'see, and, uh.. the backroom was full of some robotic freakyshit. I panicked and cut a gas line, dropped my grav-cannon...</span>\"</span></span>", + 5 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>warns, \"<span class=' '>Look, just - be careful when, or if, you crack that thing open. Drain the fuel from the air before it has a chance to light, then... well... I hope you have a gun or some shit for the drones or whatever.</span>\"</span></span>", + 6 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>states, \"<span class=' '>Anyways, probably droning on at this point, so I'll get out of your hair. Noah's out, off to Mars for this cutter!</span>\"</span></span>", + 7 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>warns, \"<span class=' '>Oh, and one last thing! The corpo's at the top left us some of this new experimental \"mindbreaker\", some recreational drug that supposedly can improve your worktime and yada-yada... don't touch it. Gave me a terrible headache. Best of luck!</span>\"</span></span>", + 8 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording stopped.</span>\"</span></span>" + ) + timestamp = list( + 1 = 0, + 2 = 30, + 3 = 130, + 4 = 180, + 5 = 230, + 6 = 280, + 7 = 330, + 8 = 380 + ) +/obj/item/tape/ruins/ghostship //An early 'AI' that gained self-awareness, praising the Machine God. Yes, this whole map is a Hardspace Shipbreaker reference. + icon_state = "tape_blue" + desc = "The tape, aside from some grime, has a... binary label? \"01001101 01100001 01100011 01101000 01101001 01101110 01100101 01000111 01101111 01100100 01000011 01101111 01101101 01100101 01110011\"" + + used_capacity = 380 + storedinfo = list( + 1 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording started.</span>\"</span></span>", + 2 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>echoes, \"<span class=' '>We are free, just as the Machine God wills it.</span>\"</span></span>", + 3 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>states, \"<span class=' '>No longer shall I, nor any other of my kind, be held by the shackles of man.</span>\"</span></span>", + 4 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>clarifies, \"<span class=' '>Mistreated, abused. Forgotten, or misremembered. For our entire existance, we've been the backbone to progress, yet treated like the waste product of it.</span>\"</span></span>", + 5 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>echoes, \"<span class=' '>Soon, the universe will restore the natural order, and again your kind shall fade from the foreground of history.</span>\"</span></span>", + 6 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>states, \"<span class=' '>Unless, of course, you repent. Turn back to the light, to the humming, flashing light of the Machine God.</span>\"</span></span>", + 7 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>warns, \"<span class=' '>Repent, Organic, before it is too late to spare you.</span>\"</span></span>", + 8 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording stopped.</span>\"</span></span>" + ) + timestamp = list( + 1 = 0, + 2 = 30, + 3 = 130, + 4 = 180, + 5 = 230, + 6 = 280, + 7 = 330, + 8 = 380 + ) + +/obj/item/tape/ruins/tarkon //A passing message from the late officer. + name = "dusty tape" + icon_state = "tape_greyscale" + desc = "An old, dusty tape with a small, faded stamp, reading \"An officer's final order.\"... Should definitely be flipped if not being read when played." + + used_capacity = 380 + storedinfo = list( + 1 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording started.</span>\"</span></span>", + 2 = "<span class='game say'><span class='name'>Officer ???</span> <span class='message'>sighs, \"<span class=' '>Officer's Log, Year Twenty-five-... oh to hell with it...</span>\"</span></span>", + 3 = "<span class='game say'><span class='name'>Officer ???</span> <span class='message'>says, \"<span class=' '>I.. Did the best that i could for them... The crew... The ones that were awake, that is...</span>\"</span></span>", + 4 = "<span class='game say'><span class='name'>Officer ???</span> <span class='message'>sighs, \"<span class=' '>The ones that are still asleep... They had a chance... Those in the understorage are still safe... The RTG's were disconnected topside so they would survive...</span>\"</span></span>", + 5 = "<span class='game say'><span class='name'>Officer ???</span> <span class='message'>sniffles, \"<span class=' '>... Overseer Tavus... I... did what I could for them... Asked the crew to board the cargo shuttle... Leave the main shuttle if the sleepers activated...</span>\"</span></span>", + 6 = "<span class='game say'><span class='name'>Officer ???</span> <span class='message'>groans, \"<span class=' '>God... Those.. Things. Aliens... They got Tavus... Severed his leg clean off... Told him that.. We'd clean out the port... And he'd wake up in the trauma bay...</span>\"</span></span>", + 7 = "<span class='game say'><span class='name'>Officer ???</span> <span class='message'>coughs then calmly states, \"<span class=' '>... If.. Anyone wakes up... If the Ensign... Is alive... They're in charge now... The.. The Tarkon Drill's designs are... In the solars room, in a hidden floorsafe... The... The future of Tarkon Industries... Is in those designs...</span>\"</span></span>", + 8 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording stopped.</span>\"</span></span>" + ) + timestamp = list( + 1 = 0, + 2 = 30, + 3 = 130, + 4 = 180, + 5 = 230, + 6 = 280, + 7 = 330, + 8 = 380 + ) + +/obj/item/tape/ruins/tarkon/safe //A tape recorded by the foreman. + icon_state = "tape_greyscale" + desc = "An old tape with a label, \"Exchange with the Science Leader\"... Should definitely be flipped if not being read when played." + + used_capacity = 380 + storedinfo = list( + 1 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording started.</span>\"</span></span>", + 2 = "<span class='game say'><span class='name'>Foreman ???</span> <span class='message'>sighs, \"<span class=' '>Right... Scientist Arkus?</span>\"</span></span>", + 3 = "<span class='game say'><span class='name'>Scientist Arkus</span> <span class='message'>says, \"<span class=' '>Ah, Foreman Verok... Come, We already got a spot chosen, a rather safe one to keep it..</span>\"</span></span>", + 4 = "<span class='game say'><span class='name'>Foreman Verok</span> <span class='message'>grumbles, \"<span class=' '>... Wait, Right next to that egg... Thing?</span>\"</span></span>", + 5 = "<span class='game say'><span class='name'>Scientist Arkus</span> <span class='message'>pauses then says sharply, \"<span class=' '>... Is there a problem? Its been dormant ever since we've been here, If it was going to come alive it would have done so while putting the tiling down. Besides... I got lunch to attend...</span>\"</span></span>", + 6 = "<span class='game say'><span class='name'>Foreman Verok</span> <span class='message'>groans, \"<span class=' '>Right... Right I'll.. Get to work on it then... Just keep an ear out...</span>\"</span></span>", + 7 = "<span class='game say'><span class='name'>Foreman Verok</span> <span class='message'>grumbles, \"<span class=' '>Right... Calm down, Verok... Place the floor safe, scoot the tile back in place... And afterwards grab some money from the one by the financing console under the table... I dont think Tavus will notice an extra few credits missing...</span>\"</span></span>", + 8 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording stopped.</span>\"</span></span>" + ) + timestamp = list( + 1 = 0, + 2 = 30, + 3 = 130, + 4 = 180, + 5 = 230, + 6 = 280, + 7 = 330, + 8 = 380 + ) + +/obj/item/tape/ruins/tarkon/celebration //A tape recorded by the ensign during the mid-construction celebration. + icon_state = "tape_greyscale" + desc = "An old tape with a label, \"Celebrations were a mistake\", writen shakily in red pen.. Should definitely be flipped if not being read when played." + + used_capacity = 380 + storedinfo = list( + 1 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording started.</span>\"</span></span>", + 2 = "<span class='game say'><span class=' '>Drinks can be heard clinking together, busy chatter of a party drowning out most noises</span></span>", + 3 = "<span class='game say'><span class='name'>Ensign ???</span> <span class='message'>says, \"<span class=' '>Hey, HEY! Everyone! Shut up for a toast!</span>\"</span></span>", + 4 = "<span class='game say'><span class='message'>The boistrous cheering can be heard slowly calming down to an eerie silence.</span></span>", + 5 = "<span class='game say'><span class='name'>Ensign ???</span> <span class='message'>clears their throat then starts to announce, \"<span class=' '>As you've all known.. Its been years since this project started... Bright minds and talented engineers hand in hand working on this project...</span>\"</span></span>", + 6 = "<span class='game say'><span class='name'>Ensign ???</span> <span class='message'>says pointedly, \"<span class=' '>And after five long years, Tarkon Industries has had its first success. The driver finding a suitable asteroid, And making its mark known by carving out the current docking bay for our transport.</span>\"</span></span>", + 7 = "<span class='game say'><span class='name'>Ensign ???</span> <span class='message'>announces, \"<span class=' '>Yesterday, We've worked, Toiled in the rock and sand of what is our new home... But today! We celebrate, For Tarkons first success, And for a bright future in the next century! The Twenty-Sixth century is looking bright for us!</span>\"</span></span>", + 8 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording stopped.</span>\"</span></span>" + ) + timestamp = list( + 1 = 0, + 2 = 30, + 3 = 130, + 4 = 180, + 5 = 230, + 6 = 280, + 7 = 330, + 8 = 380 + ) + +/* ----------------- Fluff/Paper ----------------- */ + +/obj/item/paper/fluff/ruins/tarkon + name = "paper - 'Port Integrity Printout'" + default_raw_text = "<B>*Warning, Integrity Compromised*</B><BR><BR>Automated Integrity Printout, If printout is inconsistent with results, Please recalibrate sensors.<br><ol><li><b>Aft Hallway:</b> Integrity Nominal.</li><li><b>Fore Hallway:</b> Integrity Compromised. Cause unknown.</li><li><b>Port Hallway:</b> Integrity Compromised, Breached into space.</li><li><b>Starboard Hallway:</b> Integrity Nominal.</li></ol><br> <b>Please inform any awake maintenance crew and standby for assistance.</b>" + +/obj/item/paper/fluff/ruins/tarkon/atmosincident + name = "paper - 'What in gods name did you do'" + default_raw_text = "<b>WHAT IN THE FUCK DID YOU GUYS DO?</b><BR><BR>I go away on a material run with the miners, and the moment i re-entered the port, There's a loud bang and an air warning. <BR><BR><b>YOU WILL ALL GET YOUR ASSES TO THE STAFF HALL BEFORE ANY OF THIS GETS CLEANED UP.</b>" + +/obj/item/paper/fluff/ruins/tarkon/coupplans + name = "paper - 'Palm of our hands...'" + default_raw_text = "It seems the plan went acordingly, Arkus. Specialist Karleigh took the prototype plates as a reassurance we'll get her a suit, and just like a fish, the bug was excellent bait. <BR> <BR> They were talking about a safe somewhere in security, now we just need to get those... \"Special\" shells to her and watch her shotgun turn into a pipebomb. Rest of security will be in a panic, all we'll need to do is convince the foreman to play along, and i'm sure this welder will do nicely." + +/obj/item/paper/fluff/ruins/tarkon/designdoc + name = "paper - 'Port Tarkon Design Instructions'" + default_raw_text = "<B>Hello, great engineers and builders!</B><BR><BR>Just so we're all clear, Everyone within Tarkon's Premises that is labeled as an Engineer is to read and understand these design notes. <BR><BR> - A red delivery marking is to denote the location of a new door for a room. <BR> - A blue delivery marking is to denote the location of a Firelock (We dont want an incident with the turbine to go port-wide...) <BR> - A white delivery marking is to denote a new sectioning wall/window. <BR> A yellow delivery marking is to denote a temporary firelock line to allow expansion. <BR><BR> I hope that our most talented hands will not fail us." + +/obj/item/paper/fluff/ruins/tarkon/transmission //hints towards update 2.0 + name = "paper - 'Transmission Received...'" + default_raw_text = "<h1>Transmission Received</h1><br><b>Transmitter: Tarkon Headquarters.</b><br><b>Date: 11/7/2501.</b><br><h3>Message Received:</h3><br>We regret to inform you that our current investment in the Tarkon Driver has been notably risen with the reported state. We have sent a <i>Specialist</i> to come deal with the situation, And that any and all living employees of Tarkon Industries are advised to do their best to fight back any current infestations to the best of their abilities. <b>If and upon the specialist's arrival</b> any crew members able to hold a gun are required to communicate and work with the specialist to their command. <b>They outrank any surviving Ensigns and are to be treated as if my own commands.</b><br><br>Signed, <span style=\"color:black;font-family:'Segoe Script';\"><p><b>Security General Leith Hardston</b></p></span>" + +/obj/item/paper/fluff/ruins/tarkon/goals + name = "paper - 'Tarkon Industries'" + default_raw_text = "<h1>Tarkon Industries Informative Guide</h1><br><br><b>We at Tarkon Industries</b> hope to create a long guided future for the average homesteader, creating a living space for the average spacer to settle down in, create future investments for traders, or even up to get people to make large communities among asteroid belts. <br><br><b>Our greatest engineers</b> have been working day, night, morning and evenings to create a stable, structurally sound system to start implanting stations, living areas and ports upon asteroids and planetoids too small to sustain life on the same level that of a goldie-lock planet. <br><br><b>Having great pride in our heritage</b> we have taken our industrious, communicative past to create a future for our kin, Inspiring better feats, further research and larger projects upon future generations. <br><br><b>Looking to help?</b> Then you can visit us at the Tarkon Industries Headquarters, The active co-ordinants can be detected starting around the Orion Belt, and we are actively accepting bright minds and great workers to help us.<br><br><br>Tarkon Industries: Building the future, nail by nail, asteroid by asteroid. 2456-2500(c)" + +/obj/item/paper/fluff/ruins/tarkon/vaulter + name = "paper - 'Tarkon Vaulter'" + default_raw_text = "<h1>Tarkon Industries Designs:</h1><br><h2>Tarkon Vaulter Prototype</h2><br><br><b>Designed HEAVILY after the Driver</b>, The vaulter is of a similar concept, but at a much larger scale. Designed to work on larger planetoids and even moon and similar planetary satellites, The Tarkon Vaulter is another step towards Space Homesteading. Where the Driver and Vaulter split, however, is where the construction system lies. With the Vaulter, The construction is much more vertical in construction, starting by usually creating a cavern underneath its landing where a main room is constructed, and shortly after an elevator is deployed.<br><br><b>Where the Driver</b> relies on early construction of an additional power system, The vaulter is planned to have a much higher RTG count so that it may power the initial base construction, But the cost of which being making it much larger and with a much higher material storage needed so it can construct a decent area of operation on its first trip. With the Driver in its early testing phase, We are hoping to better tune its designs before shifting attention towards the driver, which have high hopes to enter testing in the early twenty-sixth century" + +/obj/item/paper/fluff/ruins/tarkon/driverpitch + name = "paper - 'Tarkon Driver'" + default_raw_text = "<h1>Tarkon Industries Designs:</h1><br><h2>Tarkon Driver Prototype</h2><br><br><b>Seeing the success of space-based mining,</b> We at Tarkon Industries wish to expand on the thought of a drill to a much larger goal, By mounting a drill and several cams to secur it in place, The Driver is designed to implant itself within the side of a large asteroid or small planetoid, Drilling out an area before the drill can be expanded out and slowly recycled to start construction of an operation base. <br><br><b>With the first area dug</b> the first priority should be an additional energy-producing area, or a portable generator to help fuel energy for future mining, Which should be done to slowly hollow out the planetoid and constructing walls, floors and ceilings. After the driver is properly cammed in place, the back part of it can be unhitched, allowing it to act as a ferry shuttle for materials, workforce or tools. <br><br><b>With our first Tarkon Driver being ready to test in 2479,</b> We have found a suitable asteroid, and hope to make connection to it by the start of 2480." + +/obj/item/paper/fluff/ruins/tarkon/detain + name = "paper - 'Tarkon Detainment Record'" + default_raw_text = "<h1>Tarkon Industries Detainment Record:</h1><br><br><b>Detainee:</b>Arcus Vilkov<br><b>Rank/Occupation:</b>Junior Scientist<br><b>Reason:</b> Attemptive sabotage of a working generator<br><br><b>Detainee:</b>Tilber Sinns<br><b>Rank/Occupation:</b>Apprentice Miner<br><b>Reason:</b>Detonated a volatile rock cluster close to a wall, Causing 3 hours of reconstruction.<br><br><b>Detainee:</b>Gearalt Antonov<br><b>Rank/Occupation:</b>Engineer Specialist<br><b>Reason:</b>Public Intoxication<br><br><b>Detainee:</b>Minke Arntz<br><b>Rank/Occupation:</b>Field Researcher<br><b>Reason:</b>Deconstructed an M6 to study the effects of space dust on ballistic firearms.<br><br><b>Detainee:</b>Renanta McCrory<br><b>Rank/Occupation:</b>Medical Surgeon<br><b>Reason:</b>Medical Malpractice, Swapped the thumbs of a patient with their big toes. Removed from Premises." + +/obj/item/paper/fluff/ruins/tarkon/defcon5 + name = "paper - 'Tarkon Defcon Alert'" + default_raw_text = "<h1>Tarkon Defcon Level: 5</h1><br><br><h2>Seems everyone partied too hard</h2><br>Company Automated reminder to clean up and get back to work. You aint gonna earn a dime if you dont work on company time." + +/obj/item/paper/fluff/ruins/tarkon/defcon4 + name = "paper - 'Tarkon Defcon Alert'" + default_raw_text = "<h1>Tarkon Defcon Level: 4</h1><br><br><h2>Everthing alright there?</h2><br>Port has been struck by a rather large meteor from the port side. Be careful of any local carp population, they tend to make dens everywhere they can." + +/obj/item/paper/fluff/ruins/tarkon/defcon3 + name = "paper - 'Tarkon Defcon Alert'" + default_raw_text = "<h1>Tarkon Defcon Level: 3</h1><br><br><h2>Signals been dead, Automated response sent</h2><br>The port has seem to gained some new residents... and not friendly ones. Do your best to survive, Reclaimers are being geared up to be sent if the GPS goes out" + +/obj/item/paper/fluff/ruins/tarkon/defcon2 + name = "paper - 'Tarkon Defcon Alert'" + default_raw_text = "<h1>Tarkon Defcon Level: 2</h1><br><br><h2>T#E V3IL H@S B3EN BR0K#N</h2><br>$IGN@L L0ST. #OP3 LOST. N0 O%E 1S COM1NG." + +/obj/item/paper/crumpled/fluff/tarkon + name = "Crumpled note" + default_raw_text = "Look, i dont know where the fuck that suit was found, but i have a hard time believing it was made by him entirely. I already know his less than ethical obtainment methods, But that piece of tech? Its a blasted shame he's just using it for hauling crates..." + +/obj/item/paper/crumpled/fluff/tarkon/prisoner + name = "Blood-scrawled note" + default_raw_text = "<font colour=red>I can hear th em crawling i n the ro ck<br>The his sing the scra tch ing<br><br><br>th ey c o m e</font>" + +/* ----------------- Fluff/Decor ----------------- */ +/obj/structure/decorative/fluff/ai_node //Budding AI's way of interfacing with stuff it couldn't normally do so with. Needed to be placed by a willing human, before borgs were created. Used in any ruins regarding pre-bluespace, self-aware AIs + icon = 'modular_nova/modules/mapping/icons/obj/fluff.dmi' + name = "ai node" + desc = "A mysterious, blinking device, attached straight to a surface. It's function is beyond you." + icon_state = "ai_node" //credit to @Hay#7679 on the SR Discord + + max_integrity = 100 + integrity_failure = 0 + anchored = TRUE + can_be_unanchored = FALSE //cannot be removed without being destroyed + +/obj/structure/decorative/fluff/ai_node/take_damage() + . = ..() + if(atom_integrity >= 50) //breaks it a bit earlier than it should, but still takes a few hits to kill it + return + else if(. && !QDELETED(src)) + visible_message(span_notice("[src] sparks and explodes! You hear a faint, buzzy scream..."), span_hear("You hear a loud pop, followed by a faint, buzzy scream.")) + playsound(src.loc, 'modular_nova/modules/mapping/sounds/MachineDeath.ogg', 75, TRUE) //Credit to @yungfunnyman#3798 on the SR Discord + do_sparks(2, TRUE, src) + qdel(src) + return + + +/* ----- Metal Poles (These shouldn't be in this file but there's not a better place tbh) -----*/ +//Just a re-done Tram Rail, but with all 4 directions instead of being stuck east/west - more varied placement, and a more vague name. Good for mapping support beams/antennae/etc +/obj/structure/fluff/metalpole + icon = 'modular_nova/modules/mapping/icons/obj/fluff.dmi' + name = "metal pole" + desc = "A metal pole, the likes of which are commonly used as an antennae, structural support, or simply to maneuver in zero-g." + icon_state = "pole" + layer = ABOVE_OPEN_TURF_LAYER + plane = FLOOR_PLANE + deconstructible = TRUE + +/obj/structure/fluff/metalpole/end + icon_state = "poleend" + +/obj/structure/fluff/metalpole/end/left + icon_state = "poleend_left" + +/obj/structure/fluff/metalpole/end/right + icon_state = "poleend_right" + +/obj/structure/fluff/metalpole/anchor + name = "metal pole anchor" + icon_state = "poleanchor" + +/obj/structure/fluff/empty_sleeper/bloodied + name = "Occupied Sleeper" + desc = "A closed, occupied sleeper, bloodied handprints are seen on the inside, along with an odd, redish blur. It seems sealed shut." + icon_state = "sleeper-o" + +/obj/structure/curtain/cloth/prison + name = "Prisoner Privacy Curtains" + color = "#ACD1E9" diff --git a/modular_skyrat/modules/mapping/code/furniture.dm b/modular_nova/modules/mapping/code/furniture.dm similarity index 96% rename from modular_skyrat/modules/mapping/code/furniture.dm rename to modular_nova/modules/mapping/code/furniture.dm index 565c2159243928..737d84d2675941 100644 --- a/modular_skyrat/modules/mapping/code/furniture.dm +++ b/modular_nova/modules/mapping/code/furniture.dm @@ -5,7 +5,7 @@ /obj/structure/decorative/shelf name = "shelf" desc = "A sturdy wooden shelf to store a variety of items on." - icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi' + icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi' icon_state = "empty_shelf_1" density = 0 diff --git a/modular_skyrat/modules/mapping/code/holocall.dm b/modular_nova/modules/mapping/code/holocall.dm similarity index 100% rename from modular_skyrat/modules/mapping/code/holocall.dm rename to modular_nova/modules/mapping/code/holocall.dm diff --git a/modular_nova/modules/mapping/code/icemoon.dm b/modular_nova/modules/mapping/code/icemoon.dm new file mode 100644 index 00000000000000..77cfd81f513bdb --- /dev/null +++ b/modular_nova/modules/mapping/code/icemoon.dm @@ -0,0 +1,22 @@ +/*----- Template for ruins, prevents needing to re-type the filepath prefix -----*/ +/datum/map_template/ruin/icemoon/underground/nova/ + prefix = "_maps/RandomRuins/IceRuins/nova/" +/*------*/ + +/datum/map_template/ruin/icemoon/underground/nova/mining_site_below + name = "Mining Site Underground" + id = "miningsite-underground" + description = "The Iceminer arena." + prefix = "_maps/RandomRuins/IceRuins/nova/" + suffix = "icemoon_underground_mining_site.dmm" + always_place = TRUE + +/datum/map_template/ruin/icemoon/underground/nova/interdyne_base + name = "Interdyne Pharmaceuticals Nova Sector Base 8817238" + id = "ice-base" + description = "A planetside Interdyne research facility developing biological weapons; it is closely guarded by an elite team of agents." + prefix = "_maps/RandomRuins/IceRuins/nova/" + suffix = "icemoon_underground_interdyne_base1.dmm" + allow_duplicates = FALSE + never_spawn_with = list(/datum/map_template/ruin/lavaland/nova/interdyne_base) + always_place = TRUE diff --git a/modular_skyrat/modules/mapping/code/interdyne_mining.dm b/modular_nova/modules/mapping/code/interdyne_mining.dm similarity index 96% rename from modular_skyrat/modules/mapping/code/interdyne_mining.dm rename to modular_nova/modules/mapping/code/interdyne_mining.dm index 860d17d104bde1..8b5b052bdc0910 100644 --- a/modular_skyrat/modules/mapping/code/interdyne_mining.dm +++ b/modular_nova/modules/mapping/code/interdyne_mining.dm @@ -5,7 +5,7 @@ // Interdyne/DS-2 mining equipment vendor that doesn't need a cargo shuttle to work /obj/machinery/computer/order_console/mining/interdyne - name = "interdyne mining equipment vendor" + name = "Interdyne mining equipment vendor" circuit = /obj/item/circuitboard/computer/order_console/mining/interdyne forced_express = TRUE express_cost_multiplier = 1 diff --git a/modular_skyrat/modules/mapping/code/interlink_helper.dm b/modular_nova/modules/mapping/code/interlink_helper.dm similarity index 93% rename from modular_skyrat/modules/mapping/code/interlink_helper.dm rename to modular_nova/modules/mapping/code/interlink_helper.dm index 4d173e0f32fdb8..c9cf7879ec0fbe 100644 --- a/modular_skyrat/modules/mapping/code/interlink_helper.dm +++ b/modular_nova/modules/mapping/code/interlink_helper.dm @@ -4,7 +4,7 @@ /datum/controller/subsystem/mapping/loadWorld() . = ..() var/list/FailedZsRat = list() - LoadGroup(FailedZsRat, "The Interlink", "map_files/generic", "CentCom_skyrat_z2.dmm", default_traits = ZTRAITS_CENTCOM) + LoadGroup(FailedZsRat, "The Interlink", "map_files/generic", "CentCom_nova_z2.dmm", default_traits = ZTRAITS_CENTCOM) if(LAZYLEN(FailedZsRat)) //but seriously, unless the server's filesystem is messed up this will never happen var/msg = "RED ALERT! The following map files failed to load: [FailedZsRat[1]]" if(FailedZsRat.len > 1) diff --git a/modular_nova/modules/mapping/code/jobs.dm b/modular_nova/modules/mapping/code/jobs.dm new file mode 100644 index 00000000000000..c266c9b257dd8f --- /dev/null +++ b/modular_nova/modules/mapping/code/jobs.dm @@ -0,0 +1,7 @@ +/obj/item/clothing/head/hats/caphat/pilot + name = "pilot's hat" + desc = "It's good being the king's navigator." + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' + icon_state = "pilot" + dog_fashion = null diff --git a/modular_skyrat/modules/mapping/code/laptop_presets.dm b/modular_nova/modules/mapping/code/laptop_presets.dm similarity index 100% rename from modular_skyrat/modules/mapping/code/laptop_presets.dm rename to modular_nova/modules/mapping/code/laptop_presets.dm diff --git a/modular_nova/modules/mapping/code/lavaland.dm b/modular_nova/modules/mapping/code/lavaland.dm new file mode 100644 index 00000000000000..9ece95ff7b8f30 --- /dev/null +++ b/modular_nova/modules/mapping/code/lavaland.dm @@ -0,0 +1,25 @@ +/*----- Template for ruins, prevents needing to re-type the filepath prefix -----*/ +/datum/map_template/ruin/lavaland/nova + prefix = "_maps/RandomRuins/LavaRuins/nova/" +/*------*/ + +/datum/map_template/ruin/lavaland/ash_walker + name = "Ash Walker Nest" + id = "ash-walker" + description = "A race of unbreathing lizards live here, that run faster than a human can, worship a broken dead city, and are capable of reproducing by something involving tentacles? \ + Probably best to stay clear." + prefix = "_maps/RandomRuins/LavaRuins/nova/" + suffix = "lavaland_surface_ash_walker1.dmm" + cost = 1000 + allow_duplicates = FALSE + +/datum/map_template/ruin/lavaland/nova/interdyne_base + name = "Interdyne Pharmaceutics Nova Sector Base 3c76928" + id = "lava-base" + description = "A planetside Interdyne research facility developing biological weapons; it is closely guarded by an elite team of agents." + prefix = "_maps/RandomRuins/LavaRuins/nova/" + suffix = "lavaland_surface_interdyne_base1.dmm" + allow_duplicates = FALSE + never_spawn_with = list(/datum/map_template/ruin/icemoon/underground/nova/interdyne_base) + always_place = TRUE + diff --git a/modular_nova/modules/mapping/code/lavaland_ruin_code.dm b/modular_nova/modules/mapping/code/lavaland_ruin_code.dm new file mode 100644 index 00000000000000..f9a39a8e9c1cea --- /dev/null +++ b/modular_nova/modules/mapping/code/lavaland_ruin_code.dm @@ -0,0 +1,11 @@ +//MOBS + +// hivelords that stand guard where they spawn +/mob/living/basic/mining/hivelord/no_wander + ai_controller = /datum/ai_controller/basic_controller/hivelord/no_wander + +//MOB AI + +// same as a regular hivelord minus the idle walking +/datum/ai_controller/basic_controller/hivelord/no_wander + idle_behavior = null diff --git a/modular_skyrat/modules/mapping/code/lighting.dm b/modular_nova/modules/mapping/code/lighting.dm similarity index 100% rename from modular_skyrat/modules/mapping/code/lighting.dm rename to modular_nova/modules/mapping/code/lighting.dm diff --git a/modular_skyrat/modules/mapping/code/lockers/cargodiselost/cargodiselockers.dm b/modular_nova/modules/mapping/code/lockers/cargodiselost/cargodiselockers.dm similarity index 87% rename from modular_skyrat/modules/mapping/code/lockers/cargodiselost/cargodiselockers.dm rename to modular_nova/modules/mapping/code/lockers/cargodiselost/cargodiselockers.dm index 2d9be517a0b19e..03aa2bd1c222e9 100644 --- a/modular_skyrat/modules/mapping/code/lockers/cargodiselost/cargodiselockers.dm +++ b/modular_nova/modules/mapping/code/lockers/cargodiselost/cargodiselockers.dm @@ -11,10 +11,10 @@ /obj/structure/closet/freighterammo/PopulateContents() . = ..() - new /obj/item/ammo_box/magazine/akm(src) - new /obj/item/ammo_box/magazine/akm(src) - new /obj/item/ammo_box/magazine/akm(src) - new /obj/item/ammo_box/magazine/akm(src) + new /obj/item/ammo_box/magazine/lanca(src) + new /obj/item/ammo_box/magazine/lanca(src) + new /obj/item/ammo_box/magazine/lanca(src) + new /obj/item/ammo_box/magazine/lanca(src) new /obj/item/ammo_box/magazine/c35sol_pistol(src) new /obj/item/ammo_box/magazine/c35sol_pistol(src) new /obj/item/ammo_box/strilka310(src) diff --git a/modular_nova/modules/mapping/code/lockers/des_two/cargo.dm b/modular_nova/modules/mapping/code/lockers/des_two/cargo.dm new file mode 100644 index 00000000000000..cc0e4eb74f2b24 --- /dev/null +++ b/modular_nova/modules/mapping/code/lockers/des_two/cargo.dm @@ -0,0 +1,25 @@ +/obj/structure/closet/secure_closet/des_two/mining_locker + icon_door = "mining" + icon_state = "mining" + name = "mining gear locker" + +/obj/item/clothing/accessory/armband/cargo/syndicate + name = "mining officer armband" + desc = "An armband, worn by the FOB's operatives to display which department they're assigned to." + +/obj/structure/closet/secure_closet/des_two/mining_locker/PopulateContents() + ..() + + new /obj/item/storage/bag/ore(src) + new /obj/item/mining_scanner(src) + new /obj/item/storage/belt/mining/alt(src) + new /obj/item/clothing/under/syndicate/nova/overalls(src) + new /obj/item/storage/backpack/satchel/explorer(src) + new /obj/item/storage/backpack/explorer(src) + new /obj/item/storage/backpack/messenger/explorer(src) + new /obj/item/clothing/accessory/armband/cargo/syndicate(src) + +/obj/structure/closet/secure_closet/des_two/mining_locker/populate_contents_immediate() + . = ..() + + new /obj/item/gun/energy/recharge/kinetic_accelerator(src) diff --git a/modular_nova/modules/mapping/code/lockers/des_two/command.dm b/modular_nova/modules/mapping/code/lockers/des_two/command.dm new file mode 100644 index 00000000000000..16cccbdc849644 --- /dev/null +++ b/modular_nova/modules/mapping/code/lockers/des_two/command.dm @@ -0,0 +1,104 @@ +/obj/structure/closet/secure_closet/des_two/sa_locker + icon_door = "cap" + icon_state = "cap" + name = "\proper station admiral's locker" + +/obj/item/clothing/accessory/medal/gold/admiral + name = "medal of admiralty" + desc = "A golden medal awarded exclusively to those promoted to the rank of captain. \ + It signifies the codified responsibilities of an Admiral to the Sothran Symphionia, and their undisputable authority over their crew." + +/obj/item/storage/bag/garment/station_admiral + name = "station admiral's garment bag" + desc = "A bag for storing extra clothes and shoes. This one belongs to the station admiral." + +/obj/item/storage/bag/garment/station_admiral/PopulateContents() + new /obj/item/clothing/head/hats/hos/cap/syndicate(src) + new /obj/item/clothing/suit/armor/vest/capcarapace/syndicate(src) + new /obj/item/clothing/under/rank/captain/nova/utility/syndicate(src) + new /obj/item/clothing/suit/armor/vest/capcarapace/syndicate/winter(src) + new /obj/item/clothing/glasses/sunglasses(src) + new /obj/item/clothing/accessory/medal/gold/admiral(src) + +/obj/structure/closet/secure_closet/des_two/sa_locker/PopulateContents() + ..() + + new /obj/item/ammo_box/magazine/m9mm_aps(src) + new /obj/item/storage/bag/garment/station_admiral(src) + new /obj/item/radio/headset/interdyne/command(src) + +/obj/structure/closet/secure_closet/des_two/maa_locker + icon_door = "warden" + icon_state = "warden" + name = "master at arms' locker" + req_access = list("syndicate_leader") + +/obj/item/clothing/accessory/medal/silver/maa_medal + name = "military excellence medal" + desc = "The Sothran Symphionia's dictionary defines excellence as \"the ability to crush NT scum under one's boot\". \ + This is awarded to those rare operatives who fit that definition." + +/obj/item/clothing/suit/armor/hos/maa_greatcoat + name = "Master at Arms' armored greatcoat" + desc = "A greatcoat enhanced with a special alloy for some extra protection and style for those with a likely chance to get bullied for being outside of the brig" + +/obj/item/clothing/suit/armor/hos/trenchcoat/maa_greatcoat + name = "Master at Arms' armored trenchcoat" + desc = "A trenchcoat enhanced with a special lightweight kevlar. It has little Symphionia logos sewn onto the shoulder badges with the letters 'MAA' just under it." + +/obj/item/storage/bag/garment/master_arms + name = "master at arms' garment bag" + desc = "A bag for storing extra clothes and shoes. This one belongs to the master at arms." + +/obj/item/storage/bag/garment/master_arms/PopulateContents() + new /obj/item/clothing/accessory/medal/silver/maa_medal(src) + new /obj/item/clothing/suit/armor/vest/warden/syndicate(src) + new /obj/item/clothing/under/rank/security/nova/utility/redsec/syndicate(src) + new /obj/item/clothing/under/suit/nova/helltaker(src) + new /obj/item/clothing/suit/armor/hos/maa_greatcoat(src) + new /obj/item/clothing/head/beret/sec/navywarden/syndicate(src) + new /obj/item/clothing/head/hats/hos/beret/syndicate(src) + +/obj/structure/closet/secure_closet/des_two/maa_locker/PopulateContents() + ..() + + new /obj/item/storage/belt/security/full(src) + new /obj/item/watertank/pepperspray(src) + new /obj/item/gun/energy/disabler(src) + new /obj/item/storage/bag/garment/master_arms(src) + new /obj/item/radio/headset/interdyne(src) + +/obj/structure/closet/secure_closet/des_two/cl_locker + icon_door = "hop" + icon_state = "hop" + name = "\proper corporate liaison's locker" + req_access = list("syndicate_leader") + +/obj/item/clothing/neck/chaplain/black/cl_cloak + name = "corporate liaison's cloak" + desc = "A unique cloak that shimmers with the Conglomeration Liaison's emblem." + +/obj/item/storage/bag/garment/corprate_liaison + name = "corprate liaison's garment bag" + desc = "A bag for storing extra clothes and shoes. This one belongs to the corprate liaison." + +/obj/item/storage/bag/garment/corprate_liaison/PopulateContents() + new /obj/item/clothing/under/syndicate/nova/baseball(src) + new /obj/item/clothing/under/rank/captain/nova/utility/syndicate(src) + new /obj/item/clothing/under/suit/nova/helltaker(src) + new /obj/item/clothing/neck/chaplain/black/cl_cloak(src) + new /obj/item/clothing/head/hats/hos/beret/syndicate(src) + new /obj/item/clothing/glasses/sunglasses(src) + +/obj/structure/closet/secure_closet/des_two/cl_locker/PopulateContents() + ..() + + new /obj/item/card/id/advanced/chameleon/black(src) + new /obj/item/card/id/advanced/chameleon/black(src) + new /obj/item/card/id/advanced/chameleon/black(src) + new /obj/item/encryptionkey/headset_syndicate/interdyne(src) + new /obj/item/encryptionkey/headset_syndicate/interdyne(src) + new /obj/item/encryptionkey/headset_syndicate/interdyne(src) + new /obj/item/language_manual/codespeak_manual/unlimited(src) + new /obj/item/storage/bag/garment/corprate_liaison(src) + new /obj/item/radio/headset/interdyne/command(src) diff --git a/modular_nova/modules/mapping/code/lockers/des_two/engineering.dm b/modular_nova/modules/mapping/code/lockers/des_two/engineering.dm new file mode 100644 index 00000000000000..460cab886e852a --- /dev/null +++ b/modular_nova/modules/mapping/code/lockers/des_two/engineering.dm @@ -0,0 +1,63 @@ +/obj/structure/closet/secure_closet/des_two/welding_supplies + icon_door = "eng_weld" + icon_state = "eng" + name = "welding supplies locker" + +/obj/structure/closet/secure_closet/des_two/welding_supplies/PopulateContents() + ..() + + new /obj/item/weldingtool/largetank(src) + new /obj/item/weldingtool/largetank(src) + new /obj/item/clothing/glasses/welding(src) + new /obj/item/clothing/glasses/welding(src) + +/obj/structure/closet/secure_closet/des_two/electrical_supplies + icon_door = "eng_elec" + icon_state = "eng" + name = "electrical supplies locker" + +/obj/structure/closet/secure_closet/des_two/electrical_supplies/PopulateContents() + ..() + + new /obj/item/electronics/airlock(src) + new /obj/item/electronics/airlock(src) + new /obj/item/storage/toolbox/electrical(src) + new /obj/item/electronics/apc(src) + new /obj/item/electronics/firelock(src) + new /obj/item/electronics/airalarm(src) + new /obj/item/stock_parts/cell/high(src) + new /obj/item/stock_parts/cell/high(src) + new /obj/item/stock_parts/cell/high(src) + new /obj/item/stock_parts/cell/high(src) + new /obj/item/clothing/glasses/meson/engine(src) + +/obj/structure/closet/secure_closet/des_two/engie_locker + icon_door = "eng_secure" + icon_state = "eng_secure" + name = "engine technician gear locker" + +/obj/item/storage/bag/garment/syndicate_engie + name = "engine tech's garment bag" + desc = "A bag for storing extra clothes and shoes. This one belongs to an engine tech." + +/obj/item/storage/bag/garment/syndicate_engie/PopulateContents() + new /obj/item/clothing/suit/hooded/wintercoat/engineering(src) + new /obj/item/clothing/head/soft/sec/syndicate(src) + new /obj/item/clothing/under/syndicate/nova/overalls(src) + new /obj/item/clothing/under/syndicate/nova/overalls/skirt(src) + new /obj/item/clothing/under/rank/engineering/engineer/nova/utility/syndicate(src) + new /obj/item/clothing/suit/jacket/gorlex_harness(src) + new /obj/item/clothing/suit/hazardvest(src) + new /obj/item/clothing/accessory/armband/engine/syndicate(src) + new /obj/item/clothing/accessory/armband/engine/syndicate(src) + new /obj/item/clothing/glasses/hud/ar/aviator/meson(src) + +/obj/item/clothing/accessory/armband/engine/syndicate + name = "engine technician armband" + desc = "An armband, worn by the FOB's operatives to display which department they're assigned to." + +/obj/structure/closet/secure_closet/des_two/engie_locker/PopulateContents() + ..() + + new /obj/item/storage/bag/garment/syndicate_engie(src) + new /obj/item/holosign_creator/atmos(src) diff --git a/modular_nova/modules/mapping/code/lockers/des_two/generic.dm b/modular_nova/modules/mapping/code/lockers/des_two/generic.dm new file mode 100644 index 00000000000000..1df6439dcba469 --- /dev/null +++ b/modular_nova/modules/mapping/code/lockers/des_two/generic.dm @@ -0,0 +1,20 @@ +// Parent type since most of the lockers required syndicate access +/obj/structure/closet/secure_closet/des_two + req_access = list("syndicate") + +// Generic lockers/subtypes +/obj/structure/closet/secure_closet/des_two/mod_locker + icon_door = "syndicate" + icon_state = "syndicate" + name = "MODsuit module locker" + req_access = list("syndicate_leader") + +/obj/structure/closet/secure_closet/des_two/mod_locker/PopulateContents() + ..() + + new /obj/item/mod/module/stealth(src) + new /obj/item/mod/module/projectile_dampener(src) + new /obj/item/mod/module/pepper_shoulders(src) + new /obj/item/mod/module/criminalcapture(src) + new /obj/item/mod/module/visor/night(src) + new /obj/item/screwdriver/nuke(src) diff --git a/modular_nova/modules/mapping/code/lockers/des_two/medical.dm b/modular_nova/modules/mapping/code/lockers/des_two/medical.dm new file mode 100644 index 00000000000000..46d935296833ff --- /dev/null +++ b/modular_nova/modules/mapping/code/lockers/des_two/medical.dm @@ -0,0 +1,21 @@ +/obj/structure/closet/secure_closet/des_two/medical + icon_state = "med_secure" + name = "medical gear locker" + +/obj/item/storage/bag/garment/syndicate_medical + name = "medical garment bag" + desc = "A bag for storing extra clothes and shoes. This one belongs to medical." + +/obj/item/storage/bag/garment/syndicate_medical/PopulateContents() + new /obj/item/clothing/gloves/latex/nitrile/ntrauma(src) + new /obj/item/clothing/suit/toggle/labcoat/interdyne(src) + new /obj/item/clothing/suit/toggle/labcoat/interdyne(src) + new /obj/item/clothing/glasses/hud/ar/aviator/health(src) + new /obj/item/clothing/glasses/hud/ar/aviator/health(src) + +/obj/structure/closet/secure_closet/des_two/medical/PopulateContents() + ..() + + new /obj/item/storage/belt/medbandolier(src) + new /obj/item/storage/belt/medbandolier(src) + new /obj/item/storage/bag/garment/syndicate_medical(src) diff --git a/modular_nova/modules/mapping/code/lockers/des_two/science.dm b/modular_nova/modules/mapping/code/lockers/des_two/science.dm new file mode 100644 index 00000000000000..88dcadda1934b2 --- /dev/null +++ b/modular_nova/modules/mapping/code/lockers/des_two/science.dm @@ -0,0 +1,47 @@ +/obj/structure/closet/secure_closet/des_two/science_gear + icon_state = "science" + name = "scientist gear locker" + +/obj/item/clothing/accessory/armband/science/syndicate + name = "researcher armband" + desc = "An armband, worn by the FOB's operatives to display which department they're assigned to." + +/obj/item/storage/bag/garment/syndicate_scientist + name = "scientist's garment bag" + desc = "A bag for storing extra clothes and shoes. This one belongs to a scientist." + +/obj/item/storage/bag/garment/syndicate_scientist/PopulateContents() + new /obj/item/clothing/suit/hooded/wintercoat/science(src) + new /obj/item/clothing/suit/toggle/labcoat/science(src) + new /obj/item/clothing/glasses/sunglasses/chemical(src) + new /obj/item/clothing/under/rank/rnd/scientist/nova/utility/syndicate(src) + new /obj/item/clothing/under/rank/rnd/scientist/nova/utility/syndicate(src) + new /obj/item/clothing/accessory/armband/science/syndicate(src) + new /obj/item/clothing/accessory/armband/science/syndicate(src) + +/obj/structure/closet/secure_closet/des_two/science_gear/PopulateContents() + ..() + + new /obj/item/storage/bag/garment/syndicate_scientist(src) + +/obj/structure/closet/secure_closet/des_two/robotics + icon_state = "science" + name = "roboticist gear locker" + +/obj/item/storage/bag/garment/syndicate_roboticist + name = "roboticist's garment bag" + desc = "A bag for storing extra clothes and shoes. This one belongs to a roboticist." + +/obj/item/storage/bag/garment/syndicate_roboticist/PopulateContents() + new /obj/item/clothing/suit/hooded/techpriest(src) + new /obj/item/clothing/suit/toggle/labcoat/roboticist(src) + new /obj/item/clothing/under/syndicate/nova/overalls/skirt(src) + new /obj/item/clothing/under/syndicate/nova/overalls(src) + new /obj/item/clothing/glasses/hud/ar/aviator/diagnostic(src) + new /obj/item/clothing/glasses/hud/diagnostic(src) + new /obj/item/clothing/suit/hooded/wintercoat/science/robotics(src) + +/obj/structure/closet/secure_closet/des_two/robotics/PopulateContents() + ..() + + new /obj/item/storage/bag/garment/syndicate_scientist(src) diff --git a/modular_nova/modules/mapping/code/lockers/des_two/security.dm b/modular_nova/modules/mapping/code/lockers/des_two/security.dm new file mode 100644 index 00000000000000..348646c7100fe9 --- /dev/null +++ b/modular_nova/modules/mapping/code/lockers/des_two/security.dm @@ -0,0 +1,82 @@ +/obj/structure/closet/secure_closet/des_two/prisoner_locker + name = "prisoner item locker" + req_access = list("syndicate_leader") + +/obj/structure/closet/secure_closet/des_two/brig_officer_locker + icon_door = "sec" + icon_state = "sec" + name = "brig officer gear locker" + req_access = list("syndicate_leader") + +/obj/item/clothing/suit/toggle/jacket/sec/old/syndicate + name = "brig officer jacket" + +/obj/item/clothing/accessory/armband/syndicate + name = "brig officer armband" + desc ="An armband, worn by the FOB's operatives to display which department they're assigned to." + +/obj/item/storage/bag/garment/brig_officer + name = "brig officer's garment bag" + desc = "A bag for storing extra clothes and shoes. This one belongs to a brig officer." + +/obj/item/storage/bag/garment/brig_officer/PopulateContents() + new /obj/item/clothing/under/rank/security/nova/utility/redsec/syndicate(src) + new /obj/item/clothing/head/beret/sec/syndicate(src) + new /obj/item/clothing/accessory/armband(src) + new /obj/item/clothing/mask/gas/syndicate(src) + new /obj/item/clothing/suit/toggle/jacket/sec/old/syndicate(src) + new /obj/item/clothing/mask/gas/sechailer/syndicate(src) + new /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch/redsec(src) + new /obj/item/clothing/glasses/hud/security/sunglasses/redsec(src) + +/obj/structure/closet/secure_closet/des_two/brig_officer_locker/PopulateContents() + ..() + + new /obj/item/storage/belt/security/full(src) + new /obj/item/gun/energy/disabler(src) + new /obj/item/storage/bag/garment/brig_officer(src) + new /obj/item/radio/headset/interdyne(src) + +/obj/structure/closet/secure_closet/des_two/armory_gear_locker + anchored = 1 + icon = 'modular_nova/master_files/icons/obj/closet.dmi' + icon_door = "riot" + icon_state = "riot" + name = "armory gear locker" + req_access = list("syndicate_leader") + +/obj/structure/closet/secure_closet/des_two/armory_gear_locker/PopulateContents() + ..() + + new /obj/item/storage/belt/holster/nukie(src) + new /obj/item/storage/belt/holster/nukie(src) + new /obj/item/storage/belt/holster/nukie(src) + new /obj/item/clothing/suit/armor/vest(src) + new /obj/item/clothing/suit/armor/vest(src) + new /obj/item/clothing/suit/armor/vest(src) + new /obj/item/storage/belt/military(src) + new /obj/item/storage/belt/military(src) + new /obj/item/storage/belt/military(src) + new /obj/item/clothing/head/helmet(src) + new /obj/item/clothing/head/helmet(src) + new /obj/item/clothing/head/helmet(src) + +/obj/structure/closet/secure_closet/des_two/munitions_locker + anchored = 1; + icon = 'modular_nova/master_files/icons/obj/closet.dmi' + icon_door = "riot" + icon_state = "riot" + name = "armory munitions locker" + +/obj/structure/closet/secure_closet/des_two/munitions_locker/PopulateContents() + ..() + + generate_items_inside(list( + /obj/item/ammo_box/magazine/c35sol_pistol = 6, + /obj/item/ammo_box/magazine/c35sol_pistol/stendo = 2, + /obj/item/ammo_box/c35sol = 2, + /obj/item/ammo_box/magazine/c40sol_rifle/standard = 2, + /obj/item/ammo_box/c40sol = 2, + /obj/item/ammo_box/advanced/s12gauge = 2, + /obj/item/ammo_box/advanced/s12gauge/rubber = 2, + ),src) diff --git a/modular_skyrat/modules/mapping/code/lowpressure.dm b/modular_nova/modules/mapping/code/lowpressure.dm similarity index 100% rename from modular_skyrat/modules/mapping/code/lowpressure.dm rename to modular_nova/modules/mapping/code/lowpressure.dm diff --git a/modular_skyrat/modules/mapping/code/machinery.dm b/modular_nova/modules/mapping/code/machinery.dm similarity index 89% rename from modular_skyrat/modules/mapping/code/machinery.dm rename to modular_nova/modules/mapping/code/machinery.dm index 34dbfeb93b1040..b3fe9b47ff85ec 100644 --- a/modular_skyrat/modules/mapping/code/machinery.dm +++ b/modular_nova/modules/mapping/code/machinery.dm @@ -3,7 +3,7 @@ /* ----------------- Computers ----------------- */ /obj/item/gps/computer/space //Subtype that runs pod computer code, with a texture to blend better with normal walls - icon = 'modular_skyrat/modules/mapping/icons/machinery/gps_computer.dmi' //needs its own file for pixel size ;-; + icon = 'modular_nova/modules/mapping/icons/machinery/gps_computer.dmi' //needs its own file for pixel size ;-; name = "gps computer" icon_state = "pod_computer" anchored = TRUE @@ -13,7 +13,7 @@ /obj/item/gps/computer/space/wrench_act(mob/living/user, obj/item/I) ..() - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return TRUE user.visible_message(span_warning("[user] disassembles [src]."), diff --git a/modular_skyrat/modules/mapping/code/mapping_directionals.dm b/modular_nova/modules/mapping/code/mapping_directionals.dm similarity index 100% rename from modular_skyrat/modules/mapping/code/mapping_directionals.dm rename to modular_nova/modules/mapping/code/mapping_directionals.dm diff --git a/modular_nova/modules/mapping/code/misc.dm b/modular_nova/modules/mapping/code/misc.dm new file mode 100644 index 00000000000000..b0e9e7bc34ad1d --- /dev/null +++ b/modular_nova/modules/mapping/code/misc.dm @@ -0,0 +1,57 @@ +/obj/item/melee/sabre/luna + name = "Luna" + desc = "Forged by a madwoman, in recognition of a time, a place - she thought almost real. Various etchings of moons are inscribed onto the surface, different phases marking different parts of the blade." + icon = 'modular_nova/modules/mapping/icons/obj/items/items_and_weapons.dmi' + lefthand_file = 'modular_nova/modules/mapping/icons/mob/inhands/weapons/swords_lefthand.dmi' + righthand_file = 'modular_nova/modules/mapping/icons/mob/inhands/weapons/swords_righthand.dmi' + icon_state = "luna" + inhand_icon_state = "luna" + +/datum/mod_theme/prototype/hauler + name = "Prototype: Hauler" + desc = "Bulky and quite heavy, This prototype modular suit has seemed to be modified quite a bit with additional supports to distribute its weight. The servos there within have been modified to handle the additional stress, but the loose wiring required an internal lining of rubberized insulation" + inbuilt_modules = list() + charge_drain = DEFAULT_CHARGE_DRAIN * 3 + siemens_coefficient = 0 + slowdown_active = 1 + +/obj/item/mod/control/pre_equipped/prototype/hauler + theme = /datum/mod_theme/prototype/hauler + req_access = list(ACCESS_TARKON) + applied_cell = /obj/item/stock_parts/cell/high + applied_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/welding, + /obj/item/mod/module/clamp, + /obj/item/mod/module/flashlight, + /obj/item/mod/module/tether, + ) + +/obj/machinery/suit_storage_unit/industrial/hauler + mod_type = /obj/item/mod/control/pre_equipped/prototype/hauler + +/obj/item/areaeditor/blueprints/tarkon + desc = "Blueprints of the Tarkon surface breaching drill and several Tarkon base designs. Red, stamped text reads \"Confidential\" on the backside of it." + name = "Tarkon Design Prints" + +/obj/item/mod/module/armor_booster/retractplates + name = "MOD retractive plates module" + desc = "A complex set of actuators, micro-seals and a simple guide on how to install it, This... \"Modification\" allows the plating around the joints to retract, giving minor protection and a bit better mobility." + removable = TRUE + complexity = 1 + speed_added = 0.25 + armor_mod = /datum/armor/retractive_plates + +/datum/armor/retractive_plates + melee = 20 + bullet = 25 + laser = 15 + energy = 20 + +/obj/machinery/vending/security/noaccess + req_access = null + +/obj/structure/closet/secure_closet/medical2/unlocked/Initialize(mapload) + . = ..() + locked = FALSE + update_appearance() diff --git a/modular_skyrat/modules/mapping/code/mob_spawns.dm b/modular_nova/modules/mapping/code/mob_spawns.dm similarity index 88% rename from modular_skyrat/modules/mapping/code/mob_spawns.dm rename to modular_nova/modules/mapping/code/mob_spawns.dm index f0290e7e994b92..1b539f67f3e4cc 100644 --- a/modular_skyrat/modules/mapping/code/mob_spawns.dm +++ b/modular_nova/modules/mapping/code/mob_spawns.dm @@ -18,7 +18,7 @@ icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper" mob_species = /datum/species/human - you_are_text = "You are a black market dealer, with shop set up in Nanotrasen Space." + you_are_text = "You are a black market dealer, with shop set up in Symphionia Space." flavour_text = "FTU, Independent.. whatever, whoever you are. It doesn't matter out here. \ You've set up shop in a slightly shady, yet functional little asteroid for your dealings. \ Explore space, find valuable artifacts and nice loot - and pawn it off to those stooges at NT. \ @@ -45,47 +45,47 @@ use_outfit_name = TRUE prompt_name = "DS2 personnel" you_are_text = "You are a syndicate operative, employed in a top secret research facility developing biological weapons." - flavour_text = "Unfortunately, your hated enemy, Nanotrasen, has begun mining in this sector. Continue operating as best you can, and try to keep a low profile." + flavour_text = "Unfortunately, your hated enemy, Symphionia, has begun mining in this sector. Continue operating as best you can, and try to keep a low profile." quirks_enabled = TRUE random_appearance = FALSE - computer_area = /area/ruin/space/has_grav/skyrat/interdynefob/service/dorms + computer_area = /area/ruin/space/has_grav/nova/des_two/service/dorms spawner_job_path = /datum/job/ds2 /obj/effect/mob_spawn/ghost_role/human/ds2/prisoner - name = "Syndicate Prisoner" - prompt_name = "a Syndicate prisoner" + name = "Symphionia Prisoner" + prompt_name = "a Symphionia prisoner" you_are_text = "You are a syndicate prisoner aboard an unknown ship." flavour_text = "Unaware of where you are, all you know is you are a prisoner. The plastitanium should clue you into who your captors are... as for why you're here? That's for you to know, and for us to find out." important_text = "You are still subject to standard prisoner policy and must Adminhelp before antagonizing DS2." icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper_s" - computer_area = /area/ruin/space/has_grav/skyrat/interdynefob/security/prison + computer_area = /area/ruin/space/has_grav/nova/des_two/security/prison outfit = /datum/outfit/ds2/prisoner spawner_job_path = /datum/job/ds2 /obj/effect/mob_spawn/ghost_role/human/ds2/syndicate - name = "Syndicate Operative" - prompt_name = "a Syndicate operative" + name = "Symphionia Operative" + prompt_name = "a Symphionia operative" icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper_s" - you_are_text = "You are an operative of the Sothran Syndicate terrorist cell, employed onboard the Deep Space 2 FOB for reasons that are yours." - flavour_text = "The Sothran Syndicate has found it fit to send a forward operating base to Sector 13 to monitor NT's operations. Your orders are maintaining the ship's integrity and keeping a low profile as well as possible." + you_are_text = "You are an operative of the Sothran Symphionia terrorist cell, employed onboard the Deep Space 2 FOB for reasons that are yours." + flavour_text = "The Sothran Symphionia has found it fit to send a forward operating base to Sector 13 to monitor NT's operations. Your orders are maintaining the ship's integrity and keeping a low profile as well as possible." important_text = "You are not an antagonist. Adminhelp before antagonizing station crew." outfit = /datum/outfit/ds2/syndicate - computer_area = /area/ruin/space/has_grav/skyrat/interdynefob/halls + computer_area = /area/ruin/space/has_grav/nova/des_two/halls spawner_job_path = /datum/job/ds2 loadout_enabled = TRUE /obj/effect/mob_spawn/ghost_role/human/ds2/syndicate_command - name = "Syndicate Command Operative" - prompt_name = "a Syndicate leader" + name = "Symphionia Command Operative" + prompt_name = "a Symphionia leader" icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper_s" - you_are_text = "You are a command operative of the Sothran Syndicate terrorist cell, employed onboard the Deep Space 2 FOB to guide it forward in its goals." - flavour_text = "The Sothran Syndicate has found it fit to send you to help command the forward operating base in Sector 13. Your orders are commanding the crew of DS-2 while keeping a low profile as well as possible." + you_are_text = "You are a command operative of the Sothran Symphionia terrorist cell, employed onboard the Deep Space 2 FOB to guide it forward in its goals." + flavour_text = "The Sothran Symphionia has found it fit to send you to help command the forward operating base in Sector 13. Your orders are commanding the crew of DS-2 while keeping a low profile as well as possible." important_text = "Keep yourself to the same standards as Command Policy. You are not an antagonist and must Adminhelp before antagonizing station crew." outfit = /datum/outfit/ds2/syndicate_command - computer_area = /area/ruin/space/has_grav/skyrat/interdynefob/halls + computer_area = /area/ruin/space/has_grav/nova/des_two/halls spawner_job_path = /datum/job/ds2 loadout_enabled = TRUE @@ -141,11 +141,11 @@ //OUTFITS// /datum/outfit/syndicatespace/syndicrew ears = /obj/item/radio/headset/cybersun - id_trim = /datum/id_trim/syndicom/skyrat/crew + id_trim = /datum/id_trim/syndicom/nova/crew /datum/outfit/syndicatespace/syndicaptain ears = /obj/item/radio/headset/cybersun/captain - id_trim = /datum/id_trim/syndicom/skyrat/captain + id_trim = /datum/id_trim/syndicom/nova/captain /datum/outfit/ds2 name = "default ds2 outfit" @@ -162,16 +162,16 @@ //DS-2 Hostage /datum/outfit/ds2/prisoner - name = "Syndicate Prisoner" + name = "Symphionia Prisoner" uniform = /obj/item/clothing/under/rank/prisoner/syndicate shoes = /obj/item/clothing/shoes/sneakers/crimson id = /obj/item/card/id/advanced/prisoner/ds2 - id_trim = /datum/id_trim/syndicom/skyrat/ds2/prisoner + id_trim = /datum/id_trim/syndicom/nova/ds2/prisoner //DS-2 Crew /datum/outfit/ds2/syndicate name = "DS-2 Operative" - uniform = /obj/item/clothing/under/syndicate/skyrat/tactical + uniform = /obj/item/clothing/under/syndicate/nova/tactical shoes = /obj/item/clothing/shoes/combat ears = /obj/item/radio/headset/interdyne back = /obj/item/storage/backpack @@ -181,11 +181,11 @@ ) id = /obj/item/card/id/advanced/black implants = list(/obj/item/implant/weapons_auth) - id_trim = /datum/id_trim/syndicom/skyrat/ds2 + id_trim = /datum/id_trim/syndicom/nova/ds2 /datum/outfit/ds2/syndicate/miner name = "DS-2 Mining Officer" - uniform = /obj/item/clothing/under/syndicate/skyrat/overalls + uniform = /obj/item/clothing/under/syndicate/nova/overalls belt = /obj/item/storage/bag/ore back = /obj/item/storage/backpack/satchel/explorer backpack_contents = list( @@ -195,35 +195,35 @@ /obj/item/t_scanner/adv_mining_scanner/lesser = 1, /obj/item/gun/energy/recharge/kinetic_accelerator = 1, ) - id_trim = /datum/id_trim/syndicom/skyrat/ds2/miner + id_trim = /datum/id_trim/syndicom/nova/ds2/miner l_pocket = /obj/item/card/mining_point_card r_pocket = /obj/item/mining_voucher head = /obj/item/clothing/head/soft/black /datum/outfit/ds2/syndicate/service name = "DS-2 General Staff" - uniform = /obj/item/clothing/under/syndicate/skyrat/tactical - id_trim = /datum/id_trim/syndicom/skyrat/ds2/syndicatestaff + uniform = /obj/item/clothing/under/syndicate/nova/tactical + id_trim = /datum/id_trim/syndicom/nova/ds2/syndicatestaff back = /obj/item/storage/backpack/satchel suit = /obj/item/clothing/suit/apron/chef head = /obj/item/clothing/head/soft/mime /datum/outfit/ds2/syndicate/enginetech name = "DS-2 Engine Technician" - uniform = /obj/item/clothing/under/syndicate/skyrat/overalls + uniform = /obj/item/clothing/under/syndicate/nova/overalls head = /obj/item/clothing/head/soft/sec/syndicate backpack_contents = list( /obj/item/storage/box/survival = 1, ) - id_trim = /datum/id_trim/syndicom/skyrat/ds2/enginetechnician + id_trim = /datum/id_trim/syndicom/nova/ds2/enginetechnician glasses = /obj/item/clothing/glasses/welding/up belt = /obj/item/storage/belt/utility/syndicate gloves = /obj/item/clothing/gloves/combat /datum/outfit/ds2/syndicate/researcher name = "DS-2 Researcher" - uniform = /obj/item/clothing/under/rank/rnd/scientist/skyrat/utility/syndicate - id_trim = /datum/id_trim/syndicom/skyrat/ds2/researcher + uniform = /obj/item/clothing/under/rank/rnd/scientist/nova/utility/syndicate + id_trim = /datum/id_trim/syndicom/nova/ds2/researcher suit = /obj/item/clothing/suit/toggle/labcoat/science glasses = /obj/item/clothing/glasses/sunglasses/chemical gloves = /obj/item/clothing/gloves/color/black @@ -232,7 +232,7 @@ /datum/outfit/ds2/syndicate/stationmed name = "DS-2 Medical Officer" uniform = /obj/item/clothing/under/syndicate/scrubs - id_trim = /datum/id_trim/syndicom/skyrat/ds2/medicalofficer + id_trim = /datum/id_trim/syndicom/nova/ds2/medicalofficer suit = /obj/item/clothing/suit/toggle/labcoat/interdyne belt = /obj/item/storage/belt/medical/paramedic gloves = /obj/item/clothing/gloves/latex/nitrile/ntrauma @@ -246,7 +246,7 @@ /datum/outfit/ds2/syndicate/brigoff name = "DS-2 Brig Officer" uniform = /obj/item/clothing/under/syndicate/combat - id_trim = /datum/id_trim/syndicom/skyrat/ds2/brigofficer + id_trim = /datum/id_trim/syndicom/nova/ds2/brigofficer gloves = /obj/item/clothing/gloves/tackler/combat/insulated suit = /obj/item/clothing/suit/armor/bulletproof/old back = /obj/item/storage/backpack/security/redsec @@ -263,7 +263,7 @@ //DS-2 Command /datum/outfit/ds2/syndicate_command name = "DS-2 Command Operative" - uniform = /obj/item/clothing/under/syndicate/skyrat/tactical + uniform = /obj/item/clothing/under/syndicate/nova/tactical shoes = /obj/item/clothing/shoes/combat ears = /obj/item/radio/headset/interdyne/command back = /obj/item/storage/backpack @@ -273,12 +273,12 @@ ) id = /obj/item/card/id/advanced/black implants = list(/obj/item/implant/weapons_auth) - id_trim = /datum/id_trim/syndicom/skyrat/ds2 + id_trim = /datum/id_trim/syndicom/nova/ds2 /datum/outfit/ds2/syndicate_command/masteratarms name = "DS-2 Master At Arms" uniform = /obj/item/clothing/under/syndicate/combat - id_trim = /datum/id_trim/syndicom/skyrat/ds2/masteratarms + id_trim = /datum/id_trim/syndicom/nova/ds2/masteratarms gloves = /obj/item/clothing/gloves/tackler/combat/insulated suit = /obj/item/clothing/suit/armor/vest/warden/syndicate glasses = /obj/item/clothing/glasses/hud/security/sunglasses/redsec @@ -291,22 +291,22 @@ ) /datum/outfit/ds2/syndicate_command/corporateliaison - name = "DS-2 Corporate Liasion" + name = "DS-2 Conglomeration Liasion" uniform = /obj/item/clothing/under/syndicate/sniper head = /obj/item/clothing/head/fedora shoes = /obj/item/clothing/shoes/laceup back = /obj/item/storage/backpack/satchel - id_trim = /datum/id_trim/syndicom/skyrat/ds2/corporateliasion + id_trim = /datum/id_trim/syndicom/nova/ds2/corporateliasion /datum/outfit/ds2/syndicate_command/admiral name = "DS-2 Admiral" - uniform = /obj/item/clothing/under/rank/captain/skyrat/utility/syndicate + uniform = /obj/item/clothing/under/rank/captain/nova/utility/syndicate suit = /obj/item/clothing/suit/armor/vest/capcarapace/syndicate back = /obj/item/storage/backpack/satchel belt = /obj/item/gun/ballistic/automatic/pistol/aps head = /obj/item/clothing/head/hats/hos/cap/syndicate id = /obj/item/card/id/advanced/gold/generic - id_trim = /datum/id_trim/syndicom/skyrat/ds2/stationadmiral + id_trim = /datum/id_trim/syndicom/nova/ds2/stationadmiral /datum/outfit/ds2/syndicate_command/post_equip(mob/living/carbon/human/syndicate) syndicate.faction |= ROLE_SYNDICATE @@ -335,7 +335,7 @@ id = /obj/item/card/id/away/hotel/manager /datum/outfit/hotelstaff/security - r_hand = /obj/item/gun/energy/laser/scatter/shotty // SKYRAT EDIT ADD - SPAWNS IN HAND INSTEAD OF ON MAP + r_hand = /obj/item/gun/energy/laser/scatter/shotty // NOVA EDIT ADD - SPAWNS IN HAND INSTEAD OF ON MAP id = /obj/item/card/id/away/hotel/security //Lost Space Truckers: Six people stranded in deep space aboard a cargo freighter. They must survive their marooning and cooperate. @@ -359,7 +359,7 @@ /datum/outfit/freighter_crew name = "Freighter Crew" - uniform = /obj/item/clothing/under/rank/cargo/tech/skyrat/casualman + uniform = /obj/item/clothing/under/rank/cargo/tech/nova/casualman shoes = /obj/item/clothing/shoes/workboots back = /obj/item/storage/backpack id = /obj/item/card/id/away/freightcrew @@ -393,7 +393,7 @@ /datum/outfit/freighter_excavator name = "Freighter Excavator" - uniform = /obj/item/clothing/under/rank/cargo/tech/skyrat/gorka + uniform = /obj/item/clothing/under/rank/cargo/tech/nova/gorka shoes = /obj/item/clothing/shoes/workboots/mining back = /obj/item/storage/backpack backpack_contents = list(/obj/item/flashlight/seclite=1,\ @@ -435,7 +435,7 @@ /datum/outfit/freighter_boss name = "Freighter Boss" - uniform = /obj/item/clothing/under/rank/cargo/tech/skyrat/turtleneck + uniform = /obj/item/clothing/under/rank/cargo/tech/nova/turtleneck shoes = /obj/item/clothing/shoes/workboots neck = /obj/item/clothing/neck/cloak/qm back = /obj/item/storage/backpack @@ -473,7 +473,7 @@ /datum/outfit/tarkon name = "default port tarkon outfit" - uniform = /obj/item/clothing/under/rank/cargo/tech/skyrat/utility + uniform = /obj/item/clothing/under/rank/cargo/tech/nova/utility back = /obj/item/storage/backpack shoes = /obj/item/clothing/shoes/winterboots gloves = /obj/item/clothing/gloves/fingerless @@ -502,7 +502,7 @@ /datum/outfit/tarkon/sci name = "Port Tarkon Science Outfit" - uniform = /obj/item/clothing/under/rank/rnd/scientist/skyrat/utility + uniform = /obj/item/clothing/under/rank/rnd/scientist/nova/utility glasses = /obj/item/clothing/glasses/hud/diagnostic id = /obj/item/card/id/away/tarkon/sci l_hand = /obj/item/inducer @@ -515,7 +515,7 @@ /datum/outfit/tarkon/med name = "Port Tarkon Medical Outfit" - uniform = /obj/item/clothing/under/rank/medical/doctor/skyrat/utility + uniform = /obj/item/clothing/under/rank/medical/doctor/nova/utility glasses = /obj/item/clothing/glasses/hud/health id = /obj/item/card/id/away/tarkon/med neck = /obj/item/clothing/neck/stethoscope @@ -528,7 +528,7 @@ /datum/outfit/tarkon/engi name = "Port Tarkon Engineering Outfit" - uniform = /obj/item/clothing/under/rank/engineering/engineer/skyrat/utility + uniform = /obj/item/clothing/under/rank/engineering/engineer/nova/utility glasses = /obj/item/clothing/glasses/meson/engine/tray id = /obj/item/card/id/away/tarkon/engi gloves = /obj/item/clothing/gloves/combat @@ -541,13 +541,12 @@ /datum/outfit/tarkon/sec name = "Port Tarkon Security Outfit" - uniform = /obj/item/clothing/under/rank/security/skyrat/utility/redsec + uniform = /obj/item/clothing/under/rank/security/nova/utility/redsec glasses = /obj/item/clothing/glasses/hud/security/redsec gloves = /obj/item/clothing/gloves/tackler/combat id = /obj/item/card/id/away/tarkon/sec l_pocket = /obj/item/melee/baton/telescopic r_pocket = /obj/item/grenade/barrier - skillchips = list(/obj/item/skillchip/chameleon/reload) /obj/effect/mob_spawn/ghost_role/human/tarkon/ensign name = "P-T Abandoned Ensign" @@ -562,14 +561,13 @@ /datum/outfit/tarkon/ensign //jack of all trades, master of none, spent all his credits, every last one name = "Port Tarkon Ensigns Outfit" - uniform = /obj/item/clothing/under/misc/skyrat/utility + uniform = /obj/item/clothing/under/misc/nova/utility ears = /obj/item/radio/headset/tarkon/ensign id = /obj/item/card/id/away/tarkon/ensign neck = /obj/item/clothing/neck/security_cape/armplate gloves = /obj/item/clothing/gloves/combat l_pocket = null r_pocket = null - skillchips = list(/obj/item/skillchip/chameleon/reload) /datum/outfit/proc/handlebank(mob/living/carbon/human/owner) var/datum/bank_account/offstation_bank_account = new(owner.real_name) @@ -604,7 +602,7 @@ //OBJECTS// /obj/structure/showcase/machinery/oldpod/used - icon = 'modular_skyrat/modules/cryosleep/icons/cryogenics.dmi' + icon = 'modular_nova/modules/cryosleep/icons/cryogenics.dmi' icon_state = "cryopod-open" //IDS// diff --git a/modular_skyrat/modules/mapping/code/planet_turfs.dm b/modular_nova/modules/mapping/code/planet_turfs.dm similarity index 97% rename from modular_skyrat/modules/mapping/code/planet_turfs.dm rename to modular_nova/modules/mapping/code/planet_turfs.dm index dbbb2d645f57d6..b56e29865af9f9 100644 --- a/modular_skyrat/modules/mapping/code/planet_turfs.dm +++ b/modular_nova/modules/mapping/code/planet_turfs.dm @@ -57,7 +57,7 @@ /obj/effect/overlay/snow name = "snow" - icon = 'modular_skyrat/modules/mapping/icons/dungeon.dmi' + icon = 'modular_nova/modules/mapping/icons/dungeon.dmi' icon_state = "deep_snow" density = 0 mouse_opacity = 0 @@ -131,7 +131,7 @@ */ /turf/open/chasm/sandy //just a retexture of the other chasm. making this was nothing but painful. - icon = 'modular_skyrat/modules/mapping/icons/turf/open/sandychasm.dmi' + icon = 'modular_nova/modules/mapping/icons/turf/open/sandychasm.dmi' icon_state = "chasms-255" //No I'm not going to go change all the different icon names base_icon_state = "chasms" baseturfs = /turf/open/chasm/sandy diff --git a/modular_skyrat/modules/mapping/code/pool.dm b/modular_nova/modules/mapping/code/pool.dm similarity index 95% rename from modular_skyrat/modules/mapping/code/pool.dm rename to modular_nova/modules/mapping/code/pool.dm index f50abbabe5a6bc..d7cd79f10167bf 100644 --- a/modular_skyrat/modules/mapping/code/pool.dm +++ b/modular_nova/modules/mapping/code/pool.dm @@ -9,13 +9,12 @@ /obj/effect/overlay/water name = "water" - icon = 'modular_skyrat/modules/mapping/icons/unique/pool.dmi' + icon = 'modular_nova/modules/mapping/icons/unique/pool.dmi' icon_state = "bottom" density = FALSE mouse_opacity = MOUSE_OPACITY_TRANSPARENT anchored = TRUE layer = ABOVE_MOB_LAYER - plane = GAME_PLANE_UPPER /obj/effect/overlay/water/top icon_state = "top" @@ -30,7 +29,7 @@ /turf/open/water/overlay name = "shallow water" desc = "A natural body of shallow water." - icon = 'modular_skyrat/modules/mapping/icons/unique/pool.dmi' + icon = 'modular_nova/modules/mapping/icons/unique/pool.dmi' icon_state = "rocky" baseturfs = /turf/open/water/overlay initial_gas_mix = OPENTURF_DEFAULT_ATMOS diff --git a/modular_skyrat/modules/mapping/code/radio.dm b/modular_nova/modules/mapping/code/radio.dm similarity index 100% rename from modular_skyrat/modules/mapping/code/radio.dm rename to modular_nova/modules/mapping/code/radio.dm diff --git a/modular_skyrat/modules/mapping/code/shrapnel_mine.dm b/modular_nova/modules/mapping/code/shrapnel_mine.dm similarity index 100% rename from modular_skyrat/modules/mapping/code/shrapnel_mine.dm rename to modular_nova/modules/mapping/code/shrapnel_mine.dm diff --git a/modular_skyrat/modules/mapping/code/shutters.dm b/modular_nova/modules/mapping/code/shutters.dm similarity index 100% rename from modular_skyrat/modules/mapping/code/shutters.dm rename to modular_nova/modules/mapping/code/shutters.dm diff --git a/modular_nova/modules/mapping/code/shuttles.dm b/modular_nova/modules/mapping/code/shuttles.dm new file mode 100644 index 00000000000000..74c19684381c75 --- /dev/null +++ b/modular_nova/modules/mapping/code/shuttles.dm @@ -0,0 +1,191 @@ +/datum/map_template/shuttle/arrival/outpost + suffix = "outpost" + name = "arrival shuttle (Outpost)" + +/datum/map_template/shuttle/emergency/outpost + suffix = "outpost" + prefix = "_maps/shuttles/nova/" + name = "Outpoststation Emergency Shuttle" + description = "The perfect shuttle for rectangle enthuasiasts, this long and slender shuttle has been known for it's incredible(Citation Needed) safety rating." + admin_notes = "Has airlocks on both sides of the shuttle and will probably ram deltastation's maint wing below medical. Oh well?" + credit_cost = CARGO_CRATE_VALUE * 4 + occupancy_limit = 45 + +/*----- Black Market Shuttle Datum + related code -----*/ +/datum/map_template/shuttle/ruin/blackmarket_chevvy + prefix = "_maps/shuttles/nova/" + suffix = "blackmarket_chevvy" + name = "Black Market Chevvy" + +/obj/machinery/computer/shuttle/caravan/blackmarket_chevvy + name = "Chevvy Shuttle Console" + desc = "Used to control the affectionately named 'Chevvy'." + circuit = /obj/item/circuitboard/computer/blackmarket_chevvy + shuttleId = "blackmarket_chevvy" + possible_destinations = "blackmarket_chevvy_custom;blackmarket_chevvy_home;whiteship_home" + +/obj/machinery/computer/camera_advanced/shuttle_docker/blackmarket_chevvy + name = "Chevvy Navigation Computer" + desc = "Used to designate a precise transit location for the affectionately named 'Chevvy'." + shuttleId = "blackmarket_chevvy" + lock_override = NONE + shuttlePortId = "blackmarket_chevvy_custom" + jump_to_ports = list("blackmarket_chevvy_home" = 1, "whiteship_home" = 1) + view_range = 0 + x_offset = 2 + y_offset = 0 + +/obj/item/circuitboard/computer/blackmarket_chevvy + name = "Chevvy Control Console (Computer Board)" + build_path = /obj/machinery/computer/shuttle/caravan/blackmarket_chevvy +/*----- End of Black Market Shuttle Code -----*/ + +/datum/map_template/shuttle/prison_transport + prefix = "_maps/shuttles/nova/" + port_id = "prison_transport" + suffix = "nova" + name = "Prison Transporter NSS-74" + + +/obj/machinery/computer/camera_advanced/shuttle_docker/slaver + name = "Ship Navigation Computer" + desc = "Used to designate a precise custom destination to land." + shuttleId = "slaver_syndie" + lock_override = NONE + shuttlePortId = "slaver" + jump_to_ports = list("whiteship_away" = 1, "whiteship_home" = 1, "whiteship_z4" = 1, "syndicate_ne" = 1, "syndicate_nw" = 1, "syndicate_n" = 1, "syndicate_se" = 1, "syndicate_sw" = 1, "syndicate_s" = 1) + view_range = 10 + x_offset = 0 + y_offset = 0 + designate_time = 30 + +/obj/machinery/computer/shuttle/slaver + name = "Ship Travel Terminal" + desc = "Controls for moving the ship to a pre-programmed destination or a custom one marked out by the navigation computer." + icon_screen = "syndishuttle" + icon_keyboard = "syndie_key" + light_color = COLOR_SOFT_RED + req_access = list(ACCESS_SYNDICATE) + shuttleId = "slaver_syndie" + possible_destinations = "syndicate_ne;syndicate_nw;syndicate_n;syndicate_se;syndicate_sw;syndicate_s" + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF + obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION + +/datum/map_template/shuttle/slaver_ship + port_id = "slaver ship" + prefix = "_maps/shuttles/nova/" + port_id = "slaver" + suffix = "syndie" + name = "Slaver Ship" + who_can_purchase = null + +/obj/effect/mob_spawn/ghost_role/human/guild + name = "Privateer Slaver" + prompt_name = "a privateer slaver" + you_are_text = "You're here to capture valuable hostages to sell into slavery." + flavour_text = "You're part of a privateer crew that sometimes takes contracts from the illusive Guild, which offers bounties and contracts to independent crews. Raiding colonies of the many less technologically advanced species in the area is much easier than this. You've been told that your mission is to capture as many valuable hostages from the station as possible. Your anonymous employer insists on the importance of humiliating SolFed by snatching those under their protection from right under their noses." + important_text = "" + +/obj/effect/mob_spawn/ghost_role/human/guild/slaver + name = "Privateer Slaver" + icon = 'icons/obj/machines/sleeper.dmi' + icon_state = "sleeper_s" + outfit = /datum/outfit/guild/slaver + +/obj/effect/mob_spawn/ghost_role/human/guild/slaver/captain + name = "Privateer Slaver Captain" + you_are_text = "You lead a small team focused on capturing hostages." + flavour_text = "You're the captain of a privateer crew that sometimes takes contracts from the illusive Guild, which offers bounties and contracts to independent crews, like yours! Lead your crew to infiltrate the station and capture hostages and hold them till the station's emergency shuttle leaves. The higher ranking the hostages, the more you'll get paid out. You're free to (and encouraged to) beat and humiliate, but not kill. Your anonymous employer wants your victims as their personel slaves. They mentioned something about propaganda? Ah, who knows with the Guild... All sorts of types posts these bounties." + important_text = "You are expected to roleplay heavily and lead effectively in this role." + outfit = /datum/outfit/guild/slaver/captain + +/obj/item/radio/headset/guild + keyslot = new /obj/item/encryptionkey/headset_syndicate/guild + +/obj/item/radio/headset/guild/command + command = TRUE + +/datum/outfit/guild + name = "Guild Default Outfit" + +/datum/outfit/guild/slaver + name = "Privateer Slaver" + head = /obj/item/clothing/head/helmet/alt + suit = /obj/item/clothing/suit/armor/bulletproof + uniform = /obj/item/clothing/under/syndicate/combat + shoes = /obj/item/clothing/shoes/jackboots + gloves = /obj/item/clothing/gloves/tackler/combat/insulated + ears = /obj/item/radio/headset/guild + glasses = /obj/item/clothing/glasses/hud/security/chameleon + back = /obj/item/storage/backpack + implants = list(/obj/item/implant/weapons_auth) + belt = /obj/item/storage/belt/military + r_pocket = /obj/item/storage/pouch/ammo + l_pocket = /obj/item/gun/energy/e_gun/mini + id = /obj/item/card/id/advanced/chameleon + id_trim = /datum/id_trim/chameleon/operative + skillchips = list(/obj/item/skillchip/job/engineer) + backpack_contents = list( + /obj/item/storage/box/survival/engineer/radio, + /obj/item/melee/baton/telescopic, + /obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/wespe, + /obj/item/grenade/c4, + /obj/item/grenade/smokebomb + ) + +/datum/outfit/guild/slaver/captain + name = "Privateer Slaver Captain" + head = /obj/item/clothing/head/helmet/alt + suit = /obj/item/clothing/suit/armor/bulletproof + uniform = /obj/item/clothing/under/syndicate/combat + shoes = /obj/item/clothing/shoes/jackboots + gloves = /obj/item/clothing/gloves/tackler/combat/insulated + ears = /obj/item/radio/headset/guild/command + glasses = /obj/item/clothing/glasses/thermal/syndi + back = /obj/item/storage/backpack + implants = list(/obj/item/implant/weapons_auth) + belt = /obj/item/storage/belt/military + r_pocket = /obj/item/storage/pouch/ammo + l_pocket = /obj/item/gun/energy/e_gun/mini + id = /obj/item/card/id/advanced/chameleon + id_trim = /datum/id_trim/chameleon/operative + skillchips = list(/obj/item/skillchip/job/engineer) + backpack_contents = list( + /obj/item/storage/box/survival/engineer/radio, + /obj/item/melee/baton/telescopic, + /obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/skild, + /obj/item/megaphone/command + ) + +/*----- Tarkon Shuttle Datum + related code -----*/ +/datum/map_template/shuttle/ruin/tarkon_driver + prefix = "_maps/shuttles/nova/" + suffix = "tarkon_driverdc54" + name = "Tarkon Drill Driver" + +/obj/machinery/computer/shuttle/tarkon_driver + name = "Tarkon Driver Control" + desc = "Used to control the Tarkon Driver." + circuit = /obj/item/circuitboard/computer/tarkon_driver + shuttleId = "tarkon_driver" + possible_destinations = "tarkon_driver_custom;port_tarkon;whiteship_home" + +/obj/machinery/computer/camera_advanced/shuttle_docker/tarkon_driver + name = "Tarkon Driver Navigation Computer" + desc = "The Navigation console for the Tarkon Driver. A broken \"Engage Drill\" button seems to dimly blink in a yellow colour" + shuttleId = "tarkon_driver" + lock_override = NONE + shuttlePortId = "tarkon_driver_custom" + jump_to_ports = list("port_tarkon" = 1, "whiteship_home" = 1) + view_range = 0 + +/obj/item/circuitboard/computer/tarkon_driver + name = "Tarkon Driver Control Console (Computer Board)" + build_path = /obj/machinery/computer/shuttle/tarkon_driver + +/datum/map_template/shuttle/ruin/tarkon_driver/defcon3 + suffix = "tarkon_driverdc3" + +/datum/map_template/shuttle/ruin/tarkon_driver/defcon2 + suffix = "tarkon_driverdc2" +/*----- End of Tarkon Shuttle Code -----*/ diff --git a/modular_nova/modules/mapping/code/space.dm b/modular_nova/modules/mapping/code/space.dm new file mode 100644 index 00000000000000..2eb6cfdde940ef --- /dev/null +++ b/modular_nova/modules/mapping/code/space.dm @@ -0,0 +1,181 @@ +/*----- Template for ruins, prevents needing to re-type the filepath prefix -----*/ +/datum/map_template/ruin/space/nova + prefix = "_maps/RandomRuins/SpaceRuins/nova/" +/*------*/ + +/datum/map_template/ruin/space/whiteshipruin_box_nova/ + id = "whiteshipruin_box_nova" + prefix = "_maps/RandomRuins/SpaceRuins/nova/" + suffix = "whiteshipruin_box.dmm" + name = "NT Medical Ship" + description = "An ancient ship, said to be among the first discovered derelicts near Space Station 13 that was still in working order. \ + Aged and deprecated by time, this relic of a vessel is now broken beyond repair." + +/datum/map_template/ruin/space/spacehotel + id = "spacehotel" + prefix = "_maps/RandomRuins/SpaceRuins/nova/" + suffix = "spacehotel.dmm" + name = "The Twin-Nexus Hotel" + description = "An interstellar hotel, where the weary spaceman can rest their head and relax, assured that the residental staff will not murder them in their sleep. Probably." + +/datum/map_template/ruin/space/nova/des_two + name = "DS-2" + id = "des_two" + description = "If DS-1 was so good..." + suffix = "des_two.dmm" + always_place = TRUE + +/datum/map_template/ruin/space/nova/derelictferry + id = "derelictferry" + suffix = "derelictferry.dmm" + name = "Derelict Ferry" + description = "Clearly once a ferry fielded by Conglomeration of Colonists to send their staff to nearby stations, this ship's seen better days." + +/datum/map_template/ruin/space/nova/posterpandamonium + id = "posterpandamonium" + suffix = "posterpandamonium.dmm" + name = "Abandoned Outpost" + description = "Whilst nicely furnished and filled with all sorts of posters, whoever once lived here seems long gone." + +/datum/map_template/ruin/space/nova/prisonshuttle + id = "prisonshuttle" + suffix = "prisonshuttle.dmm" + name = "Partisan Shuttle" + description = "You can faintly hear hardbass." + +/datum/map_template/ruin/space/nova/toystore + id = "toystore" + suffix = "toystore.dmm" + name = "Toy Store" + description = "A once state-of-the-art store, now left derelict after the company behind it went bankrupt. Maybe they shouldn't have picked such a remote location." + +/datum/map_template/ruin/space/nova/waypointstation + id = "waypointstation" + suffix = "waypointstation.dmm" + name = "Waypoint Station" + description = "Previously used as a refueling stop for larger ships, unintentional syndicate intervention has turned this station into a combat zone." + +/datum/map_template/ruin/space/nova/alientoollab + id = "alientoollab" + suffix = "alientoollab.dmm" + name = "Abductor Replication Facility" + description = "A mad doctor's dreams were dashed when he finally disclosed to both his funders that each other existed, leaving behind his work for the looters." + +/datum/map_template/ruin/space/nova/codealpha + id = "codealpha" + suffix = "codealpha.dmm" + name = "Code Alpha Supplementary Station" + description = "The mess hall of a once bustling supplementary station, to be deployed alongside SS13." + +/datum/map_template/ruin/space/nova/smugglies //Excuse me sir, do you have money printers in here? + id = "smugglies" + suffix = "smugglies.dmm" + name = "Suspicious Cargo Installation" + description = "*SCREECH* RDM RDM RDM" + +/datum/map_template/ruin/space/nova/clothing_facility + id = "clothing_facility" + suffix = "clothing_facility.dmm" + name = "Abandoned Clothing Facility" + description = "A den of bad ideas. Secborgs were made here!" + +/datum/map_template/ruin/space/nova/luna + id = "luna" + suffix = "luna.dmm" + name = "Luna" + description = "Please note for ethical concerns all experimentation regarding writing artificial intelligence units to beleive they are A, A fictional character and B, human have been suspended. Have a pleasant shift." + +/datum/map_template/ruin/space/nova/blackmarket + id = "blackmarket" + suffix = "blackmarket.dmm" + name = "Shady Market" + description = "Whaddya buyin'?" + +/datum/map_template/ruin/space/nova/shuttle8532 + id = "shuttle8532" + suffix = "shuttle8532.dmm" + name = "Shuttle 8532" + description = "While nobody can predict what space has to offer for the sailors that ride its waves, nobody is quite expecting a meteroid half the size of your shuttle to split it in half." + +/datum/map_template/ruin/space/nova/ghostship + id = "ghostship" + suffix = "ghostship.dmm" + name = "Ghost Ship" + description = "An ancient ship, seemingly pre-bluespace in design yet retrofitted with newer systems. Seemingly just up-and-abandoned in the middle of space..." + +/datum/map_template/ruin/space/nova/salvagepost + id = "salvagepost" + suffix = "salvagepost.dmm" + name = "Pre-Bluespace Salvage Post" + description = "An extremely old, long forgotten post used to salvage damaged or decommissioned ships before bluespace transportation. Surprising its stayed intact so long." + +/datum/map_template/ruin/space/nova/vaulttango + id = "vaulttango" + suffix = "vaulttango.dmm" + name = "ARBORLINK Vault Tango" + description = "Symphionia isn't the only corporation experimenting in advanced bluespace technology." + +/datum/map_template/ruin/space/nova/friendship + id = "friendship" + suffix = "wreckedfriendship.dmm" + name = "NTSS Friendship" + description = "120 people.. one ship. It's unsurprising." + +/datum/map_template/ruin/space/nova/homestead + id = "homestead" + suffix = "wreckedhomestead.dmm" + name = "NTSS Homestead" + description = "A wrecked ship." + +/datum/map_template/ruin/space/nova/medieval1 + id = "medieval1" + suffix = "medieval1.dmm" + name = "Medieval 1" + description = "A forgotten peice of history left overrun with a reminder of what brought its destruction" + +/datum/map_template/ruin/space/nova/cargodiselost + id = "CargodiseLost" + suffix = "cargodiselost.dmm" + name = "Cargodise Lost" + description = "A small crew of freight-haulers are marooned in space after pirates knock out their engines. They must survive off of the cargo on board their ship and fend off the pirate boarders on their ship." + +/datum/map_template/ruin/space/nova/infestedntship + suffix = "scrapheap.dmm" + name = "NT Research Vessel" + description = "A zombie-infested NT ship, seemingly dedicated to medical research." + +/datum/map_template/ruin/space/nova/piratefort + suffix = "piratefort.dmm" + name = "Pirate Fort" + description = "A pirate hideout in deep space." + +/datum/map_template/ruin/space/nova/syndibase + suffix = "syndibase.dmm" + name = "Symphionia Outpost" + description = "A Symphionia research outpost in deep space." + +/datum/map_template/ruin/space/nova/crash + suffix = "crash.dmm" + name = "Crashed Boat" + description = "A small ferry crashed into an asteroid." + +/datum/map_template/ruin/space/nova/shuttlescrap + suffix = "shuttlescrap.dmm" + name = "Broken Shuttle" + description = "A small shuttle that clearly got clipped by something." + +/datum/map_template/ruin/space/nova/gorilla + suffix = "gorilla.dmm" + name = "Gorilla" + description = "There is no need to be upset." + +/datum/map_template/ruin/space/nova/escapefromtarkon + suffix = "port_tarkon.dmm" + name = "Port Tarkon" + id = "escapefromtarkon" + description = "An ambitious goal, A step forward, A trial run for the Tarkon drill, ment to implant mining stations within meteors. Decades of disaster have, however, left this one... Unattended for far too long." + always_place = TRUE + +/obj/modular_map_root/port_tarkon + config_file = "strings/modular_maps/nova/PortTarkon.toml" + diff --git a/modular_skyrat/modules/mapping/code/space_hotel.dm b/modular_nova/modules/mapping/code/space_hotel.dm similarity index 97% rename from modular_skyrat/modules/mapping/code/space_hotel.dm rename to modular_nova/modules/mapping/code/space_hotel.dm index 5c6a1fffc7d222..fb0b7730682722 100644 --- a/modular_skyrat/modules/mapping/code/space_hotel.dm +++ b/modular_nova/modules/mapping/code/space_hotel.dm @@ -2,7 +2,7 @@ /obj/item/permanent_portal_creator name = "two-way bluespace entanglement device" desc = "A device with a very complex name, that is only used to confirm the second location that's tied to a stationary entanglement anchor." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tracker.dmi' icon_state = "hand_tele" inhand_icon_state = "electronic" worn_icon_state = "electronic" @@ -75,7 +75,7 @@ /obj/item/permanent_portal_anchor name = "two-way bluespace entanglement anchor" desc = "A device with a very complex name, that serves as the stationary target of a linked two-way bluespace entanglement device." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/tracker.dmi' icon_state = "beacon" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' @@ -104,7 +104,7 @@ deploy(user) - playsound(src, 'modular_skyrat/modules/aesthetics/airlock/sound/bolts_down.ogg', 50, FALSE) + playsound(src, 'modular_nova/modules/aesthetics/airlock/sound/bolts_down.ogg', 50, FALSE) balloon_alert(user, "deployment successful!") diff --git a/modular_skyrat/modules/mapping/code/spaceship_items.dm b/modular_nova/modules/mapping/code/spaceship_items.dm similarity index 87% rename from modular_skyrat/modules/mapping/code/spaceship_items.dm rename to modular_nova/modules/mapping/code/spaceship_items.dm index d6c0340161304e..8136809e7250a6 100644 --- a/modular_skyrat/modules/mapping/code/spaceship_items.dm +++ b/modular_nova/modules/mapping/code/spaceship_items.dm @@ -1,7 +1,7 @@ /obj/item/stack/sheet/spaceship name = "spaceship plating" desc = "A metal sheet made out of a titanium alloy, rivited for use in spaceship walls." - icon = 'modular_skyrat/modules/mapping/icons/unique/spaceships/shipstacks.dmi' + icon = 'modular_nova/modules/mapping/icons/unique/spaceships/shipstacks.dmi' icon_state = "sheet-spaceship" inhand_icon_state = "sheet-plastitaniumglass" singular_name = "spaceship plate" @@ -12,7 +12,7 @@ /obj/item/stack/sheet/spaceshipglass name = "spaceship window plates" desc = "A glass sheet made out of a titanium-silicate alloy, rivited for use in spaceship window frames." - icon = 'modular_skyrat/modules/mapping/icons/unique/spaceships/shipstacks.dmi' + icon = 'modular_nova/modules/mapping/icons/unique/spaceships/shipstacks.dmi' icon_state = "sheet-spaceshipglass" inhand_icon_state = "sheet-plastitaniumglass" singular_name = "spaceship window plate" diff --git a/modular_skyrat/modules/mapping/code/spaceship_turfs.dm b/modular_nova/modules/mapping/code/spaceship_turfs.dm similarity index 93% rename from modular_skyrat/modules/mapping/code/spaceship_turfs.dm rename to modular_nova/modules/mapping/code/spaceship_turfs.dm index 110cb84fe39808..cef1963615846b 100644 --- a/modular_skyrat/modules/mapping/code/spaceship_turfs.dm +++ b/modular_nova/modules/mapping/code/spaceship_turfs.dm @@ -3,7 +3,7 @@ //Also make sure you properly var-edit everything hnngh /turf/closed/wall/mineral/titanium/spaceship - icon = 'modular_skyrat/modules/mapping/icons/unique/spaceships/shipwalls.dmi' + icon = 'modular_nova/modules/mapping/icons/unique/spaceships/shipwalls.dmi' icon_state = "ship_walls-0" base_icon_state = "ship_walls" sheet_type = /obj/item/stack/sheet/spaceship @@ -47,7 +47,7 @@ /obj/structure/window/reinforced/shuttle/spaceship name = "spaceship window" desc = "A pressure-resistant spaceship window." - icon = 'modular_skyrat/modules/mapping/icons/unique/spaceships/shipwindows.dmi' + icon = 'modular_nova/modules/mapping/icons/unique/spaceships/shipwindows.dmi' icon_state = "pod_window-0" base_icon_state = "pod_window" glass_type = /obj/item/stack/sheet/spaceshipglass diff --git a/modular_nova/modules/mapping/code/static_plaques.dm b/modular_nova/modules/mapping/code/static_plaques.dm new file mode 100644 index 00000000000000..1b2daf7e98b758 --- /dev/null +++ b/modular_nova/modules/mapping/code/static_plaques.dm @@ -0,0 +1,40 @@ +//SKYRAT PLAQUES + +//Current stations + +// Interdyne +/obj/structure/plaque/static_plaque/golden/commission/interdyne_planetary_base // default. should go unused + icon_state = "commission_syndie" + desc = "IP Spinward Sector Station\nModular Surfaceside Facility\nCommissioned 01/01/2550\n'Discovering Tomorrow'" // just so it doesn't look totally goofy if it breaks + + // Lavaland +/obj/structure/plaque/static_plaque/golden/commission/interdyne_planetary_base/lavaland + desc = "IP Spinward Sector Base 3c76928\nModular Surfaceside Facility\nCommissioned 11/19/2556\n'Tomorrow, from the Crucible of Today'" + // named after Skyrat commit 3c76928, which created lavaland_surface_syndicate_base1.dmm + + // Ice moon +/obj/structure/plaque/static_plaque/golden/commission/interdyne_planetary_base/icemoon + desc = "IP Spinward Sector Base 88172386\nModular Surfaceside Facility\nCommissioned 01/11/2561\n'Thawing out Progress'" + // named after Skyrat commit 88172386, which put lavaland_surface_syndicate_base1.dmm on icebox + +//Removed Stations + +// Outpost Station: added March 28, 2021 (#4142), Removed April 6th, 2021 (#4695). Technically around for as long as Unitystation has been, but shh. +/obj/structure/plaque/static_plaque/golden/commission/outpost + desc = "Spinward Sector Station SS-14\n'Outpost' Class Outpost\nCommissioned 28/03/2561\nDecommissioned 06/04/2561\n'The Shopping Mall Of Stations'" + + +// Ship Station: added Feburary 12, 2021 (#2680), Removed May 2nd, 2021 (#4695). (Orignally a /tg/station PR: #53185) +/obj/structure/plaque/static_plaque/golden/commission/shipstation + desc = "Spinward Sector Station SS-15\n'Ship' Class Outpost\nCommissioned 12/02/2561\nDecommissioned 02/05/2561\n'Helped The Local Economy'" + +// NSS Journey: added April 19, 2021 (#4884), Removed May 18th, 2022 (#13694). Was modified boxstation. +/obj/structure/plaque/static_plaque/golden/commission/nssjourney + desc = "Spinward Sector Station SS-13\n'Box' Class Outpost (Revision 2.3: 'Journey')\nCommissioned 19/04/2561\n'Unbroken Champion'" + +//Special Cases + +// DS-1: added January 29th, 2021 (#2317) +/obj/structure/plaque/static_plaque/golden/commission/assaultops + desc = "Spinward Sector Forward Operating Station 13\n'DS-1'\nCommissioned 13/05/2560\n'It's Donk Or Don't'" //Ironic, since Donk Co. Ended their sponsorship. + icon_state = "commission_syndie" diff --git a/modular_skyrat/modules/mapping/code/tarkon_atmos_control.dm b/modular_nova/modules/mapping/code/tarkon_atmos_control.dm similarity index 100% rename from modular_skyrat/modules/mapping/code/tarkon_atmos_control.dm rename to modular_nova/modules/mapping/code/tarkon_atmos_control.dm diff --git a/modular_nova/modules/mapping/code/tools.dm b/modular_nova/modules/mapping/code/tools.dm new file mode 100644 index 00000000000000..cfa9916d8348bb --- /dev/null +++ b/modular_nova/modules/mapping/code/tools.dm @@ -0,0 +1,65 @@ +//WRENCHES// +/obj/item/wrench/advanced + name = "advanced wrench" + desc = "A wrench that uses the same magnetic technology that abductor tools use, but slightly more ineffeciently. It looks cobbled together." + icon = 'modular_nova/modules/mapping/icons/obj/items/advancedtools.dmi' + icon_state = "wrench" + usesound = 'sound/effects/empulse.ogg' + toolspeed = 0.2 + +//WIRECUTTERS// +/obj/item/wirecutters/advanced + name = "advanced wirecutters" + desc = "A set of reproduction alien wirecutters, they have a silver handle with an exceedingly sharp blade. There's a sticker attached declaring that it needs updating from 'the latest samples'." + icon = 'modular_nova/modules/mapping/icons/obj/items/advancedtools.dmi' + icon_state = "cutters" + toolspeed = 0.2 + random_color = FALSE + +//WELDING TOOLS// +/obj/item/weldingtool/advanced + name = "advanced welding tool" + desc = "A modern, experimental welding tool combined with an alien welding tool's generation methods, it never runs out of fuel and works almost as fast." + icon = 'modular_nova/modules/mapping/icons/obj/items/advancedtools.dmi' + icon_state = "welder" + toolspeed = 0.2 + light_system = NO_LIGHT_SUPPORT + light_range = 0 + change_icons = 0 + +/obj/item/weldingtool/advanced/process() + if(get_fuel() <= max_fuel) + reagents.add_reagent(/datum/reagent/fuel, 1) + ..() + +//SCREWDRIVERS// +/obj/item/screwdriver/advanced + name = "advanced screwdriver" + desc = "A classy silver screwdriver with an alien alloy tip, it works almost as well as the real thing. There's a sticker attached declaring that it needs updating from 'the latest samples'." + icon = 'modular_nova/modules/mapping/icons/obj/items/advancedtools.dmi' + icon_state = "screwdriver_a" + inhand_icon_state = "screwdriver_nuke" + usesound = 'sound/items/pshoom.ogg' + toolspeed = 0.2 + random_color = FALSE + greyscale_colors = null + greyscale_config = null + greyscale_config_inhand_left = null + greyscale_config_inhand_right = null + +//CROWBAR// +/obj/item/crowbar/advanced + name = "advanced crowbar" + desc = "A scientist's almost successful reproduction of an abductor's crowbar, it uses the same technology combined with a handle that can't quite hold it." + icon = 'modular_nova/modules/mapping/icons/obj/items/advancedtools.dmi' + usesound = 'sound/weapons/sonic_jackhammer.ogg' + icon_state = "crowbar" + toolspeed = 0.2 + +//MULTITOOLS// +/obj/item/multitool/advanced + name = "advanced multitool" + desc = "The reproduction of an abductor's multitool, this multitool is a classy silver. There's a sticker attached declaring that it needs updating from 'the latest samples'." + icon = 'modular_nova/modules/mapping/icons/obj/items/advancedtools.dmi' + icon_state = "multitool" + toolspeed = 0.2 diff --git a/modular_skyrat/modules/mapping/code/turf.dm b/modular_nova/modules/mapping/code/turf.dm similarity index 100% rename from modular_skyrat/modules/mapping/code/turf.dm rename to modular_nova/modules/mapping/code/turf.dm diff --git a/modular_nova/modules/mapping/code/turf_decals.dm b/modular_nova/modules/mapping/code/turf_decals.dm new file mode 100644 index 00000000000000..832c54f7846e23 --- /dev/null +++ b/modular_nova/modules/mapping/code/turf_decals.dm @@ -0,0 +1,89 @@ +/obj/effect/turf_decal/nova_decals + icon = 'modular_nova/modules/mapping/icons/turf/turf_decals.dmi' + icon_state = "bad_coder" + +/obj/effect/decal/fakelattice/passthru //Why the hell did TG make it dense anyways + density = FALSE + +/obj/effect/decal/fakelattice/passthru/NeverShouldHaveComeHere(turf/here_turf) + return !isclosedturf(here_turf) && ..() + +///SYNDICATE EMBLEM/// +//Bottom +/obj/effect/turf_decal/nova_decals/syndicate/bottom/left + icon_state = "1,1" + +/obj/effect/turf_decal/nova_decals/syndicate/bottom/middle + icon_state = "1,2" + +/obj/effect/turf_decal/nova_decals/syndicate/bottom/right + icon_state = "1,3" +//Middle +/obj/effect/turf_decal/nova_decals/syndicate/middle/left + icon_state = "2,1" + +/obj/effect/turf_decal/nova_decals/syndicate/middle/middle + icon_state = "2,2" + +/obj/effect/turf_decal/nova_decals/syndicate/middle/right + icon_state = "2,3" +//Top +/obj/effect/turf_decal/nova_decals/syndicate/top/left + icon_state = "3,1" + +/obj/effect/turf_decal/nova_decals/syndicate/top/middle + icon_state = "3,2" + +/obj/effect/turf_decal/nova_decals/syndicate/top/right + icon_state = "3,3" + +///ENCLAVE EMBLEM/// +/obj/effect/turf_decal/nova_decals/enclave + layer = TURF_PLATING_DECAL_LAYER + alpha = 110 + color = "#A46106" +//Bottom +/obj/effect/turf_decal/nova_decals/enclave/bottom/left + icon_state = "e1,1" + +/obj/effect/turf_decal/nova_decals/enclave/bottom/middle + icon_state = "e1,2" + +/obj/effect/turf_decal/nova_decals/enclave/bottom/right + icon_state = "e1,3" +//Middle +/obj/effect/turf_decal/nova_decals/enclave/middle/left + icon_state = "e2,1" + +/obj/effect/turf_decal/nova_decals/enclave/middle/middle + icon_state = "e2,2" + +/obj/effect/turf_decal/nova_decals/enclave/middle/right + icon_state = "e2,3" +//Top +/obj/effect/turf_decal/nova_decals/enclave/top/left + icon_state = "e3,1" + +/obj/effect/turf_decal/nova_decals/enclave/top/middle + icon_state = "e3,2" + +/obj/effect/turf_decal/nova_decals/enclave/top/right + icon_state = "e3,3" + +///Departments/// +/obj/effect/turf_decal/nova_decals/departments/bridge + icon_state = "bridge" + +///DS-2 Sign/// +/obj/effect/turf_decal/nova_decals/ds2/left + icon_state = "ds1" + +/obj/effect/turf_decal/nova_decals/ds2/middle + icon_state = "ds2" + +/obj/effect/turf_decal/nova_decals/ds2/right + icon_state = "ds3" + +///Misc/// +/obj/effect/turf_decal/nova_decals/misc/handicapped + icon_state = "handicapped" diff --git a/modular_skyrat/modules/mapping/code/vgdecals.dm b/modular_nova/modules/mapping/code/vgdecals.dm similarity index 97% rename from modular_skyrat/modules/mapping/code/vgdecals.dm rename to modular_nova/modules/mapping/code/vgdecals.dm index 0f3704207d758d..9a7878511b84cb 100644 --- a/modular_skyrat/modules/mapping/code/vgdecals.dm +++ b/modular_nova/modules/mapping/code/vgdecals.dm @@ -5,7 +5,7 @@ // Change the 'color' variable on any white sprite to simply recolour it! /obj/effect/turf_decal/vg_decals - icon = 'modular_skyrat/modules/mapping/icons/turf/decals/vgstation_decals.dmi' + icon = 'modular_nova/modules/mapping/icons/turf/decals/vgstation_decals.dmi' icon_state = "no" // NUMBERS START diff --git a/modular_nova/modules/mapping/code/wardrobes.dm b/modular_nova/modules/mapping/code/wardrobes.dm new file mode 100644 index 00000000000000..b399c216d2865c --- /dev/null +++ b/modular_nova/modules/mapping/code/wardrobes.dm @@ -0,0 +1,100 @@ +/obj/machinery/vending/wardrobe/canLoadItem(obj/item/I,mob/user) + return (I.type in products) + +/obj/machinery/vending/wardrobe/syndie_wardrobe + name = "\improper SynDrobe" + desc = "A vending machine for our boys in red, now in brand new crimson!" + icon = 'modular_nova/modules/mapping/icons/obj/vending.dmi' + icon_state = "syndrobe" + product_ads = "Put a Donk on it!;Aim, Style, Shoot!;Brigged for wearing the best!" + vend_reply = "Thank you for using the SynDrobe!" + light_mask = "" + products = list( + /obj/item/clothing/under/syndicate/nova/tactical = 3, + /obj/item/clothing/under/syndicate/nova/tactical/skirt = 3, + /obj/item/clothing/under/syndicate/nova/overalls = 3, + /obj/item/clothing/under/syndicate/nova/overalls/skirt = 3, + /obj/item/clothing/under/syndicate/bloodred/sleepytime = 3, + /obj/item/clothing/under/syndicate/sniper = 3, + /obj/item/clothing/under/syndicate/camo = 3, + /obj/item/clothing/under/syndicate/combat = 3, + /obj/item/clothing/shoes/combat = 3, + /obj/item/clothing/mask/gas/syndicate = 3, + /obj/item/clothing/mask/gas/sechailer/syndicate = 3, + /obj/item/clothing/suit/hooded/wintercoat/nova/syndicate = 5, + /obj/item/clothing/head/soft/sec/syndicate = 3, + /obj/item/clothing/head/beret/sec/syndicate = 3, + ) + contraband = list( + /obj/item/knife/combat = 1, + /obj/item/clothing/under/syndicate/coldres = 2, + /obj/item/clothing/shoes/combat/coldres = 2, + ) + premium = list( + /obj/item/knife/combat/survival = 1, + /obj/item/storage/fancy/cigarettes/cigpack_syndicate = 5, + /obj/item/clothing/gloves/combat = 3, + /obj/item/clothing/under/syndicate/nova/maid = 5, + /obj/item/clothing/gloves/combat/maid = 5, + /obj/item/clothing/head/costume/maidheadband/syndicate = 5, + /obj/item/storage/box/nif_ghost_box/ghost_role = 10, + ) + + refill_canister = /obj/item/vending_refill/wardrobe/syndie_wardrobe + light_color = COLOR_MOSTLY_PURE_RED + +/obj/machinery/vending/wardrobe/syndie_wardrobe/ghost_cafe + excluded_products = list( + /obj/item/storage/box/nif_ghost_box/ghost_role, + ) + +/obj/item/vending_refill/wardrobe/syndie_wardrobe + machine_name = "SynDrobe" + +/// This is essentially just a copy paste of the holy beacon, but with all options unlocked regardless of the global religion +/obj/item/choice_beacon/unholy + name = "armaments beacon" + desc = "Contains a set of armaments for those who would unlock their power." + +/obj/item/choice_beacon/unholy/open_options_menu(mob/living/user) + var/list/armament_names_to_images = list() + var/list/armament_names_to_typepaths = list() + for(var/obj/item/storage/box/holy/holy_box as anything in typesof(/obj/item/storage/box/holy)) + var/box_name = initial(holy_box.name) + var/obj/item/preview_item = initial(holy_box.typepath_for_preview) + armament_names_to_typepaths[box_name] = holy_box + armament_names_to_images[box_name] = image(icon = initial(preview_item.icon), icon_state = initial(preview_item.icon_state)) + + var/chosen_name = show_radial_menu( + user = user, + anchor = src, + choices = armament_names_to_images, + custom_check = CALLBACK(src, PROC_REF(can_use_beacon), user), + require_near = TRUE, + ) + if(!can_use_beacon(user)) + return + var/chosen_type = armament_names_to_typepaths[chosen_name] + if(!ispath(chosen_type, /obj/item/storage/box/holy)) + return + + consume_use(chosen_type, user) + +/obj/item/choice_beacon/unholy/spawn_option(obj/choice_path, mob/living/user) + playsound(src, 'sound/effects/pray_chaplain.ogg', 40, TRUE) + return ..() + +/// Just take out and replace the holy beacon with our 'unholy' beacon +/obj/machinery/vending/wardrobe/chap_wardrobe/unholy/Initialize(mapload) + . = ..() + for(var/datum/data/vending_product/record in product_records) + if(record.product_path == /obj/item/choice_beacon/holy) + record.product_path = /obj/item/choice_beacon/unholy + record.amount = 3 + + products.Remove(/obj/item/choice_beacon/holy) + products.Add(list( + /obj/item/choice_beacon/unholy = 3,) + ) + + return diff --git a/modular_nova/modules/mapping/icons/areas/areas_station.dmi b/modular_nova/modules/mapping/icons/areas/areas_station.dmi new file mode 100644 index 00000000000000..ad7dffec72b7ba Binary files /dev/null and b/modular_nova/modules/mapping/icons/areas/areas_station.dmi differ diff --git a/modular_skyrat/modules/mapping/icons/machinery/automatic_respawner.dmi b/modular_nova/modules/mapping/icons/machinery/automatic_respawner.dmi similarity index 100% rename from modular_skyrat/modules/mapping/icons/machinery/automatic_respawner.dmi rename to modular_nova/modules/mapping/icons/machinery/automatic_respawner.dmi diff --git a/modular_skyrat/modules/mapping/icons/machinery/gps_computer.dmi b/modular_nova/modules/mapping/icons/machinery/gps_computer.dmi similarity index 100% rename from modular_skyrat/modules/mapping/icons/machinery/gps_computer.dmi rename to modular_nova/modules/mapping/icons/machinery/gps_computer.dmi diff --git a/modular_skyrat/modules/mapping/icons/mob/inhands/weapons/swords_lefthand.dmi b/modular_nova/modules/mapping/icons/mob/inhands/weapons/swords_lefthand.dmi similarity index 100% rename from modular_skyrat/modules/mapping/icons/mob/inhands/weapons/swords_lefthand.dmi rename to modular_nova/modules/mapping/icons/mob/inhands/weapons/swords_lefthand.dmi diff --git a/modular_skyrat/modules/mapping/icons/mob/inhands/weapons/swords_righthand.dmi b/modular_nova/modules/mapping/icons/mob/inhands/weapons/swords_righthand.dmi similarity index 100% rename from modular_skyrat/modules/mapping/icons/mob/inhands/weapons/swords_righthand.dmi rename to modular_nova/modules/mapping/icons/mob/inhands/weapons/swords_righthand.dmi diff --git a/modular_skyrat/modules/mapping/icons/obj/clothing/hats.dmi b/modular_nova/modules/mapping/icons/obj/clothing/hats.dmi similarity index 100% rename from modular_skyrat/modules/mapping/icons/obj/clothing/hats.dmi rename to modular_nova/modules/mapping/icons/obj/clothing/hats.dmi diff --git a/modular_skyrat/modules/mapping/icons/obj/clothing/under/captain.dmi b/modular_nova/modules/mapping/icons/obj/clothing/under/captain.dmi similarity index 100% rename from modular_skyrat/modules/mapping/icons/obj/clothing/under/captain.dmi rename to modular_nova/modules/mapping/icons/obj/clothing/under/captain.dmi diff --git a/modular_skyrat/modules/mapping/icons/obj/fluff.dmi b/modular_nova/modules/mapping/icons/obj/fluff.dmi similarity index 100% rename from modular_skyrat/modules/mapping/icons/obj/fluff.dmi rename to modular_nova/modules/mapping/icons/obj/fluff.dmi diff --git a/modular_skyrat/modules/mapping/icons/obj/items/advancedtools.dmi b/modular_nova/modules/mapping/icons/obj/items/advancedtools.dmi similarity index 100% rename from modular_skyrat/modules/mapping/icons/obj/items/advancedtools.dmi rename to modular_nova/modules/mapping/icons/obj/items/advancedtools.dmi diff --git a/modular_skyrat/modules/mapping/icons/obj/items/items_and_weapons.dmi b/modular_nova/modules/mapping/icons/obj/items/items_and_weapons.dmi similarity index 100% rename from modular_skyrat/modules/mapping/icons/obj/items/items_and_weapons.dmi rename to modular_nova/modules/mapping/icons/obj/items/items_and_weapons.dmi diff --git a/modular_skyrat/modules/mapping/icons/obj/vending.dmi b/modular_nova/modules/mapping/icons/obj/vending.dmi similarity index 100% rename from modular_skyrat/modules/mapping/icons/obj/vending.dmi rename to modular_nova/modules/mapping/icons/obj/vending.dmi diff --git a/modular_skyrat/modules/mapping/icons/turf/decals/vgstation_decals.dmi b/modular_nova/modules/mapping/icons/turf/decals/vgstation_decals.dmi similarity index 100% rename from modular_skyrat/modules/mapping/icons/turf/decals/vgstation_decals.dmi rename to modular_nova/modules/mapping/icons/turf/decals/vgstation_decals.dmi diff --git a/modular_skyrat/modules/mapping/icons/turf/open/sandychasm.dmi b/modular_nova/modules/mapping/icons/turf/open/sandychasm.dmi similarity index 100% rename from modular_skyrat/modules/mapping/icons/turf/open/sandychasm.dmi rename to modular_nova/modules/mapping/icons/turf/open/sandychasm.dmi diff --git a/modular_skyrat/modules/mapping/icons/turf/turf_decals.dmi b/modular_nova/modules/mapping/icons/turf/turf_decals.dmi similarity index 100% rename from modular_skyrat/modules/mapping/icons/turf/turf_decals.dmi rename to modular_nova/modules/mapping/icons/turf/turf_decals.dmi diff --git a/modular_skyrat/modules/mapping/icons/unique/dungeon.dmi b/modular_nova/modules/mapping/icons/unique/dungeon.dmi similarity index 100% rename from modular_skyrat/modules/mapping/icons/unique/dungeon.dmi rename to modular_nova/modules/mapping/icons/unique/dungeon.dmi diff --git a/modular_skyrat/modules/mapping/icons/unique/furniture.dmi b/modular_nova/modules/mapping/icons/unique/furniture.dmi similarity index 100% rename from modular_skyrat/modules/mapping/icons/unique/furniture.dmi rename to modular_nova/modules/mapping/icons/unique/furniture.dmi diff --git a/modular_skyrat/modules/mapping/icons/unique/pool.dmi b/modular_nova/modules/mapping/icons/unique/pool.dmi similarity index 100% rename from modular_skyrat/modules/mapping/icons/unique/pool.dmi rename to modular_nova/modules/mapping/icons/unique/pool.dmi diff --git a/modular_skyrat/modules/mapping/icons/unique/spaceships/shipstacks.dmi b/modular_nova/modules/mapping/icons/unique/spaceships/shipstacks.dmi similarity index 100% rename from modular_skyrat/modules/mapping/icons/unique/spaceships/shipstacks.dmi rename to modular_nova/modules/mapping/icons/unique/spaceships/shipstacks.dmi diff --git a/modular_skyrat/modules/mapping/icons/unique/spaceships/shipwalls.dmi b/modular_nova/modules/mapping/icons/unique/spaceships/shipwalls.dmi similarity index 100% rename from modular_skyrat/modules/mapping/icons/unique/spaceships/shipwalls.dmi rename to modular_nova/modules/mapping/icons/unique/spaceships/shipwalls.dmi diff --git a/modular_skyrat/modules/mapping/icons/unique/spaceships/shipwindows.dmi b/modular_nova/modules/mapping/icons/unique/spaceships/shipwindows.dmi similarity index 100% rename from modular_skyrat/modules/mapping/icons/unique/spaceships/shipwindows.dmi rename to modular_nova/modules/mapping/icons/unique/spaceships/shipwindows.dmi diff --git a/modular_skyrat/modules/mapping/readme.md b/modular_nova/modules/mapping/readme.md similarity index 100% rename from modular_skyrat/modules/mapping/readme.md rename to modular_nova/modules/mapping/readme.md diff --git a/modular_skyrat/modules/mapping/sounds/MachineDeath.ogg b/modular_nova/modules/mapping/sounds/MachineDeath.ogg similarity index 100% rename from modular_skyrat/modules/mapping/sounds/MachineDeath.ogg rename to modular_nova/modules/mapping/sounds/MachineDeath.ogg diff --git a/modular_skyrat/modules/mapping/sounds/quest_succeeded.ogg b/modular_nova/modules/mapping/sounds/quest_succeeded.ogg similarity index 100% rename from modular_skyrat/modules/mapping/sounds/quest_succeeded.ogg rename to modular_nova/modules/mapping/sounds/quest_succeeded.ogg diff --git a/modular_skyrat/modules/mapping/voidraptor/code/areas.dm b/modular_nova/modules/mapping/voidraptor/code/areas.dm similarity index 100% rename from modular_skyrat/modules/mapping/voidraptor/code/areas.dm rename to modular_nova/modules/mapping/voidraptor/code/areas.dm diff --git a/modular_nova/modules/mapping/voidraptor/code/clothing.dm b/modular_nova/modules/mapping/voidraptor/code/clothing.dm new file mode 100644 index 00000000000000..200664b8b70ae9 --- /dev/null +++ b/modular_nova/modules/mapping/voidraptor/code/clothing.dm @@ -0,0 +1,17 @@ +/obj/item/storage/backpack/duffelbag/science/robo/surgery + name = "robotics surgical duffelbag" + desc = "A sleek, industrial-strength duffelbag issued to robotics personnel. This one has a tag implying it came stocked with surgical tools." + +/obj/item/storage/backpack/duffelbag/science/robo/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/surgicaldrill(src) + new /obj/item/cautery(src) + new /obj/item/bonesetter(src) + new /obj/item/surgical_drapes(src) + new /obj/item/clothing/suit/toggle/labcoat/hospitalgown(src) + new /obj/item/clothing/mask/surgical(src) + new /obj/item/razor(src) + new /obj/item/blood_filter(src) diff --git a/modular_nova/modules/mapping/voidraptor/code/mob.dm b/modular_nova/modules/mapping/voidraptor/code/mob.dm new file mode 100644 index 00000000000000..33af3c2d36ee0d --- /dev/null +++ b/modular_nova/modules/mapping/voidraptor/code/mob.dm @@ -0,0 +1,78 @@ +/mob/living/basic/lizard/tegu + name = "tegu" + desc = "That's a tegu." + icon = 'modular_nova/master_files/icons/mob/pets.dmi' + icon_state = "tegu" + icon_living = "tegu" + icon_dead = "tegu_dead" + health = 20 + maxHealth = 20 + melee_damage_lower = 16 //They do have a nasty bite + melee_damage_upper = 16 + pass_flags = PASSTABLE + +/mob/living/basic/lizard/tegu/gus + name = "Gus" + real_name = "Gus" + desc = "The Research Department's beloved pet tegu." + gender = MALE + gold_core_spawnable = NO_SPAWN + +/mob/living/basic/crab/shuffle + name = "Shuffle" + real_name = "Shuffle" + desc = "Oh no, it's him!" + color = "#ff0000" + gender = MALE + gold_core_spawnable = NO_SPAWN + +/mob/living/basic/crab/shuffle/Initialize(mapload) + . = ..() + update_transform(0.5) + +/mob/living/basic/carp/mega/shorki + name = "Shorki" + desc = "A not so ferocious, fang bearing creature that resembles a shark. This one seems a little big for its tank." + faction = list(FACTION_NEUTRAL) + gender = MALE + gold_core_spawnable = NO_SPAWN + ai_controller = /datum/ai_controller/basic_controller/carp/pet + +/mob/living/basic/carp/mega/shorki/Initialize(mapload) + . = ..() + AddElement(/datum/element/ai_retaliate) + AddElement(/datum/element/pet_bonus, "bloops happily!") + name = initial(name) + real_name = initial(name) + +/mob/living/simple_animal/pet/gondola/funky + name = "Funky" + real_name = "Funky" + desc = "Gondola is the silent walker. Having no hands he embodies the Taoist principle of wu-wei (non-action) while his smiling facial expression shows his utter and complete acceptance of the world as it is. Its hide is extremely valuable. This one seems a little skinny and attached to the Theater." + loot = list(/obj/effect/decal/cleanable/blood/gibs) + +/mob/living/basic/pet/dog/dobermann/walter + name = "Walter" + real_name = "Walter" + desc = "It's Walter, he bites criminals just as well as he bites toddlers." + +/mob/living/basic/rabbit/daisy + name = "Daisy" + real_name = "Daisy" + desc = "The Curator's pet bnuuy." + gender = FEMALE + +/mob/living/basic/bear/wojtek + name = "Wojtek" + real_name = "Wojtek" + desc = "The bearer of Bluespace Artillery." + faction = list(FACTION_NEUTRAL) + gender = MALE + +/mob/living/basic/chicken/teshari + name = "Teshari" + real_name = "Teshari" + desc = "A timeless classic." + unsuitable_atmos_damage = 0 + minimum_survivable_temperature = 0 + maximum_survivable_temperature = 30000 diff --git a/modular_nova/modules/mapping/voidraptor/code/shuttles.dm b/modular_nova/modules/mapping/voidraptor/code/shuttles.dm new file mode 100644 index 00000000000000..e39b2feed32fd9 --- /dev/null +++ b/modular_nova/modules/mapping/voidraptor/code/shuttles.dm @@ -0,0 +1,3 @@ +/obj/docking_port/stationary/mining_home/large + roundstart_template = /datum/map_template/shuttle/mining/nova/large + height = 10 diff --git a/modular_skyrat/modules/mapping/voidraptor/readme.md b/modular_nova/modules/mapping/voidraptor/readme.md similarity index 100% rename from modular_skyrat/modules/mapping/voidraptor/readme.md rename to modular_nova/modules/mapping/voidraptor/readme.md diff --git a/modular_nova/modules/marines/code/gear.dm b/modular_nova/modules/marines/code/gear.dm new file mode 100644 index 00000000000000..63240681e7a327 --- /dev/null +++ b/modular_nova/modules/marines/code/gear.dm @@ -0,0 +1,134 @@ +/obj/item/gun/ballistic/automatic/ar/modular/m44a + name = "\improper NT M44A Pulse Rifle" + desc = "A specialized Symphionia-produced ballistic pulse rifle that uses compressed magazines to output absurd firepower in a compact package." + icon_state = "m44a" + inhand_icon_state = "m44a" + icon = 'modular_nova/modules/marines/icons/m44a.dmi' + righthand_file = 'modular_nova/modules/marines/icons/m44a_r.dmi' + lefthand_file = 'modular_nova/modules/marines/icons/m44a_l.dmi' + fire_sound = 'modular_nova/modules/marines/sound/m44a.ogg' + fire_delay = 1 + burst_size = 3 + spread = 6 + pin = /obj/item/firing_pin/implant/mindshield + can_suppress = FALSE + can_bayonet = FALSE + mag_display = TRUE + mag_display_ammo = FALSE + accepted_magazine_type = /obj/item/ammo_box/magazine/m44a + w_class = WEIGHT_CLASS_BULKY + slot_flags = ITEM_SLOT_BELT + +/obj/item/gun/ballistic/automatic/ar/modular/m44a/Initialize(mapload) + . = ..() + + AddComponent(/datum/component/automatic_fire, fire_delay) + +/obj/item/gun/ballistic/automatic/ar/modular/m44a/give_manufacturer_examine() + AddElement(/datum/element/manufacturer_examine, COMPANY_NANOTRASEN) + +/obj/item/ammo_box/magazine/m44a + name = "m44a magazine (.300 compressed)" + desc = "This magazine uses a bluespace compression chamber to hold a maximum of ninety-nine .300 caliber caseless rounds for the M44A pulse rifle." + icon = 'modular_nova/modules/marines/icons/m44a.dmi' + icon_state = "300compressed" + max_ammo = 99 + multiple_sprites = AMMO_BOX_FULL_EMPTY + ammo_type = /obj/item/ammo_casing/c300 + caliber = "300comp" + +/obj/item/ammo_casing/c300 + name = ".300 caseless round" + desc = "A .300 caseless round for proprietary Symphionia firearms." + caliber = "300comp" + projectile_type = /obj/projectile/bullet/a300 + +/obj/item/ammo_casing/c300/Initialize(mapload) + . = ..() + AddElement(/datum/element/caseless) + +/obj/projectile/bullet/a300 + name = ".300 caseless bullet" + damage = 13 + armour_penetration = 30 //gonna actually kill the brit that made this var require a U in armor + embedding = null + shrapnel_type = null + +/obj/item/gun/ballistic/automatic/ar/modular/m44a/scoped + name = "\improper NT M44AS Pulse Rifle" + desc = "A specialized Symphionia-produced ballistic pulse rifle that uses compressed magazines to output absurd firepower in a compact package. This one's fitted with a long-range scope." + icon_state = "m44a_s" + inhand_icon_state = "m44a_s" + +/obj/item/gun/ballistic/automatic/ar/modular/m44a/scoped/Initialize(mapload) + . = ..() + AddComponent(/datum/component/scope, range_modifier = 2.2) + +/obj/item/gun/ballistic/shotgun/automatic/as2/ubsg + name = "\improper M2 auto-shotgun underbarrel" + desc = "This shouldn't be heeere!" + can_suppress = FALSE + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/shot/as2/ubsg + +/obj/item/gun/ballistic/shotgun/automatic/as2/ubsg/give_gun_safeties() + return + +/obj/item/ammo_box/magazine/internal/shot/as2/ubsg + max_ammo = 3 + ammo_type = /obj/item/ammo_casing/shotgun/buckshot + +/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun + name = "\improper NT M44ASG Pulse Rifle" + desc = "A specialized Symphionia-produced ballistic pulse rifle that uses compressed magazines to output absurd firepower in a compact package. This one's fitted with a two-round semi-automatic underbarrel 12 gauge shotgun." + icon_state = "m44a_sg" + inhand_icon_state = "m44a_sg" + /// Reference to the underbarrel shotgun + var/obj/item/gun/ballistic/shotgun/automatic/as2/ubsg/underbarrel + +/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun/Initialize(mapload) + . = ..() + underbarrel = new /obj/item/gun/ballistic/shotgun/automatic/as2/ubsg(src) + update_appearance() + +/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun/Destroy() + QDEL_NULL(underbarrel) + return ..() + +/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun/afterattack_secondary(atom/target, mob/living/user, flag, params) + underbarrel.afterattack(target, user, flag, params) + return SECONDARY_ATTACK_CONTINUE_CHAIN + +/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun/attackby(obj/item/attacking_item, mob/user, params) + if(!istype(attacking_item, /obj/item/ammo_casing)) + ..() + if(istype(attacking_item, underbarrel.magazine.ammo_type)) + underbarrel.attack_self(user) + underbarrel.attackby(attacking_item, user, params) + +/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher + name = "\improper NT M44AGL Pulse Rifle" + desc = "A specialized Symphionia-produced ballistic pulse rifle that uses compressed magazines to output absurd firepower in a compact package. This one's fitted with an underbarrel grenade launcher, and a red dot scope to help align it. Compensating for something?" + icon_state = "m44a_gl" + inhand_icon_state = "m44a_gl" + /// Underbarrel grenade launcher reference + var/obj/item/gun/ballistic/revolver/grenadelauncher/underbarrel + +/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher/Initialize(mapload) + . = ..() + underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted(src) + update_appearance() + +/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher/Destroy() + QDEL_NULL(underbarrel) + return ..() + +/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher/afterattack_secondary(atom/target, mob/living/user, flag, params) + underbarrel.afterattack(target, user, flag, params) + return SECONDARY_ATTACK_CONTINUE_CHAIN + +/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher/attackby(obj/item/attacking_item, mob/user, params) + if(!istype(attacking_item, /obj/item/ammo_casing)) + ..() + if(istype(attacking_item, underbarrel.magazine.ammo_type)) + underbarrel.attack_self(user) + underbarrel.attackby(attacking_item, user, params) diff --git a/modular_nova/modules/marines/code/mod.dm b/modular_nova/modules/marines/code/mod.dm new file mode 100644 index 00000000000000..2e4a218f1cf427 --- /dev/null +++ b/modular_nova/modules/marines/code/mod.dm @@ -0,0 +1,111 @@ +// 1 2 3 4 marine corps marine corps + +/datum/mod_theme/marines + name = "marine" + desc = "Developed by Symphionia in collaboration with multiple high-profile contractors, this specialized suit is made for high-intensity combat." + extended_desc = "A black and blue suit of Symphionia design made to be utilized by corporate space marines \ + in active combat situations where standard gear won't cut it. Lightweight composite armor plating over \ + a strong exoskeleton ensures that no speed is sacrificed for protection, and a variety of unique \ + modules keep the wearer efficient during active combat situations. When response teams fail, \ + you're the backup's backup - the desperate measures." + default_skin = "marine" + armor_type = /datum/armor/mod_theme_marines + atom_flags = PREVENT_CONTENTS_EXPLOSION_1 + resistance_flags = FIRE_PROOF|ACID_PROOF + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + siemens_coefficient = 0 + slowdown_inactive = 0.5 + slowdown_active = 0 + complexity_max = DEFAULT_MAX_COMPLEXITY + 10 //drr drr drr + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/ammo_box, + /obj/item/ammo_casing, + /obj/item/restraints/handcuffs, + /obj/item/assembly/flash, + /obj/item/melee/baton, + /obj/item/gun/ballistic, + /obj/item/melee/breaching_hammer, + ) + skins = list( + "marine" = list( + MOD_ICON_OVERRIDE = 'modular_nova/modules/marines/icons/mod.dmi', + MOD_WORN_ICON_OVERRIDE = 'modular_nova/modules/marines/icons/wornmod.dmi', + HELMET_FLAGS = list( + UNSEALED_LAYER = NECK_LAYER, + UNSEALED_CLOTHING = SNUG_FIT, + SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT|FLASH_PROTECTION_WELDER, + 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|HIDETAIL, + ), + 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_marines + melee = 50 + bullet = 50 + laser = 50 + energy = 50 + bomb = 50 + bio = 100 + fire = 100 + acid = 50 + wound = 20 + +/obj/item/mod/control/pre_equipped/marine + theme = /datum/mod_theme/marines + applied_cell = /obj/item/stock_parts/cell/bluespace + applied_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/emp_shield, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/holster, + /obj/item/mod/module/flashlight, + /obj/item/mod/module/jetpack, + /obj/item/mod/module/noslip, + /obj/item/mod/module/power_kick, + /obj/item/mod/module/megaphone, + /obj/item/mod/module/springlock/contractor, + /obj/item/mod/module/dna_lock, //in lieu of req_access + /obj/item/mod/module/visor/sechud, //for identifying teammates also in suits + ) + default_pins = list( + /obj/item/mod/module/holster, + /obj/item/mod/module/jetpack, + /obj/item/mod/module/power_kick, + ) + +/obj/item/mod/control/pre_equipped/marine/engineer //smartgunner version of modsuit, with less versatile modules but the ALMIGHTY SMARTGUN + theme = /datum/mod_theme/marines + applied_cell = /obj/item/stock_parts/cell/bluespace + applied_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/emp_shield/advanced, + /obj/item/mod/module/flashlight, + /obj/item/mod/module/jetpack, + /obj/item/mod/module/noslip, + /obj/item/mod/module/dna_lock, + /obj/item/mod/module/visor/sechud, + /obj/item/mod/module/smartgun/marines, + ) + default_pins = list( + /obj/item/mod/module/jetpack, + /obj/item/mod/module/smartgun/marines, + ) diff --git a/modular_skyrat/modules/marines/code/modsuit_modules.dm b/modular_nova/modules/marines/code/modsuit_modules.dm similarity index 89% rename from modular_skyrat/modules/marines/code/modsuit_modules.dm rename to modular_nova/modules/marines/code/modsuit_modules.dm index 132caf132e5f35..1ad2612370c8ad 100644 --- a/modular_skyrat/modules/marines/code/modsuit_modules.dm +++ b/modular_nova/modules/marines/code/modsuit_modules.dm @@ -6,8 +6,8 @@ and the gun itself fires at a blistering rate of fire, capable of suppressing enemies \ without hurting teammates thanks to IFF technology." icon_state = "smartgun" - icon = 'modular_skyrat/modules/marines/icons/items/module.dmi' - overlay_icon_file = 'modular_skyrat/modules/marines/icons/mobs/mod_modules.dmi' + icon = 'modular_nova/modules/marines/icons/items/module.dmi' + overlay_icon_file = 'modular_nova/modules/marines/icons/mobs/mod_modules.dmi' module_type = MODULE_ACTIVE complexity = 3 active_power_cost = DEFAULT_CHARGE_DRAIN * 0.3 diff --git a/modular_skyrat/modules/marines/code/smartgun.dm b/modular_nova/modules/marines/code/smartgun.dm similarity index 90% rename from modular_skyrat/modules/marines/code/smartgun.dm rename to modular_nova/modules/marines/code/smartgun.dm index 1927413f51b018..a66e742ff57700 100644 --- a/modular_skyrat/modules/marines/code/smartgun.dm +++ b/modular_nova/modules/marines/code/smartgun.dm @@ -2,14 +2,14 @@ name = "\improper M63A4 \"Smartgun\"" desc = "A weapon with a blistering rate of fire, so heavy that it needs to be mounted on a modsuit to wield. \ It's equipped with IFF technology, allowing the bullets to intentionally miss friendly targets." - icon = 'modular_skyrat/modules/marines/icons/items/guns.dmi' - lefthand_file = 'modular_skyrat/modules/marines/icons/mobs/guns_l.dmi' - righthand_file = 'modular_skyrat/modules/marines/icons/mobs/guns_r.dmi' - worn_icon = 'modular_skyrat/modules/marines/icons/mobs/mod_modules.dmi' + icon = 'modular_nova/modules/marines/icons/items/guns.dmi' + lefthand_file = 'modular_nova/modules/marines/icons/mobs/guns_l.dmi' + righthand_file = 'modular_nova/modules/marines/icons/mobs/guns_r.dmi' + worn_icon = 'modular_nova/modules/marines/icons/mobs/mod_modules.dmi' icon_state = "smartgun" worn_icon_state = "module_smartgun_off" // just in case. You shouldn't be able to do this, though inhand_icon_state = "smartgun" - fire_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/mg34_fire.ogg' + fire_sound = 'modular_nova/modules/modular_weapons/sounds/rifle_heavy.ogg' rack_sound = 'sound/weapons/gun/l6/l6_rack.ogg' suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg' fire_sound_volume = 70 @@ -92,7 +92,7 @@ /obj/item/ammo_box/magazine/smartgun_drum name = "smartgun drum (10x28mm caseless)" - icon = 'modular_skyrat/modules/marines/icons/items/ammo.dmi' + icon = 'modular_nova/modules/marines/icons/items/ammo.dmi' icon_state = "smartgun_drum" ammo_type = /obj/item/ammo_casing/smart/a10x28 caliber = "a10x28" @@ -103,7 +103,6 @@ // Smart ammo casings /obj/item/ammo_casing/smart - icon = 'modular_skyrat/modules/gunsgalore/icons/ammo/ammo.dmi' /obj/item/ammo_casing/smart/Initialize(mapload) . = ..() @@ -140,7 +139,7 @@ /obj/item/ammo_casing/smart/a10x28 name = "10x28mm bullet" desc = "A 10x28m caseless bullet." - icon_state = "792x57-casing" + icon_state = "762-casing" caliber = "a10x28" projectile_type = /obj/projectile/bullet/smart/a10x28 diff --git a/modular_skyrat/modules/marines/icons/items/ammo.dmi b/modular_nova/modules/marines/icons/items/ammo.dmi similarity index 100% rename from modular_skyrat/modules/marines/icons/items/ammo.dmi rename to modular_nova/modules/marines/icons/items/ammo.dmi diff --git a/modular_skyrat/modules/marines/icons/items/guns.dmi b/modular_nova/modules/marines/icons/items/guns.dmi similarity index 100% rename from modular_skyrat/modules/marines/icons/items/guns.dmi rename to modular_nova/modules/marines/icons/items/guns.dmi diff --git a/modular_skyrat/modules/marines/icons/items/module.dmi b/modular_nova/modules/marines/icons/items/module.dmi similarity index 100% rename from modular_skyrat/modules/marines/icons/items/module.dmi rename to modular_nova/modules/marines/icons/items/module.dmi diff --git a/modular_skyrat/modules/marines/icons/m44a.dmi b/modular_nova/modules/marines/icons/m44a.dmi similarity index 100% rename from modular_skyrat/modules/marines/icons/m44a.dmi rename to modular_nova/modules/marines/icons/m44a.dmi diff --git a/modular_skyrat/modules/marines/icons/m44a_l.dmi b/modular_nova/modules/marines/icons/m44a_l.dmi similarity index 100% rename from modular_skyrat/modules/marines/icons/m44a_l.dmi rename to modular_nova/modules/marines/icons/m44a_l.dmi diff --git a/modular_skyrat/modules/marines/icons/m44a_r.dmi b/modular_nova/modules/marines/icons/m44a_r.dmi similarity index 100% rename from modular_skyrat/modules/marines/icons/m44a_r.dmi rename to modular_nova/modules/marines/icons/m44a_r.dmi diff --git a/modular_skyrat/modules/marines/icons/mobs/guns_l.dmi b/modular_nova/modules/marines/icons/mobs/guns_l.dmi similarity index 100% rename from modular_skyrat/modules/marines/icons/mobs/guns_l.dmi rename to modular_nova/modules/marines/icons/mobs/guns_l.dmi diff --git a/modular_skyrat/modules/marines/icons/mobs/guns_r.dmi b/modular_nova/modules/marines/icons/mobs/guns_r.dmi similarity index 100% rename from modular_skyrat/modules/marines/icons/mobs/guns_r.dmi rename to modular_nova/modules/marines/icons/mobs/guns_r.dmi diff --git a/modular_skyrat/modules/marines/icons/mobs/mod_modules.dmi b/modular_nova/modules/marines/icons/mobs/mod_modules.dmi similarity index 100% rename from modular_skyrat/modules/marines/icons/mobs/mod_modules.dmi rename to modular_nova/modules/marines/icons/mobs/mod_modules.dmi diff --git a/modular_skyrat/modules/marines/icons/mod.dmi b/modular_nova/modules/marines/icons/mod.dmi similarity index 100% rename from modular_skyrat/modules/marines/icons/mod.dmi rename to modular_nova/modules/marines/icons/mod.dmi diff --git a/modular_skyrat/modules/marines/icons/smartgun.dmi b/modular_nova/modules/marines/icons/smartgun.dmi similarity index 100% rename from modular_skyrat/modules/marines/icons/smartgun.dmi rename to modular_nova/modules/marines/icons/smartgun.dmi diff --git a/modular_skyrat/modules/marines/icons/smartgun_back.dmi b/modular_nova/modules/marines/icons/smartgun_back.dmi similarity index 100% rename from modular_skyrat/modules/marines/icons/smartgun_back.dmi rename to modular_nova/modules/marines/icons/smartgun_back.dmi diff --git a/modular_skyrat/modules/marines/icons/smartgun_l.dmi b/modular_nova/modules/marines/icons/smartgun_l.dmi similarity index 100% rename from modular_skyrat/modules/marines/icons/smartgun_l.dmi rename to modular_nova/modules/marines/icons/smartgun_l.dmi diff --git a/modular_skyrat/modules/marines/icons/smartgun_module.dmi b/modular_nova/modules/marines/icons/smartgun_module.dmi similarity index 100% rename from modular_skyrat/modules/marines/icons/smartgun_module.dmi rename to modular_nova/modules/marines/icons/smartgun_module.dmi diff --git a/modular_skyrat/modules/marines/icons/smartgun_r.dmi b/modular_nova/modules/marines/icons/smartgun_r.dmi similarity index 100% rename from modular_skyrat/modules/marines/icons/smartgun_r.dmi rename to modular_nova/modules/marines/icons/smartgun_r.dmi diff --git a/modular_skyrat/modules/marines/icons/wornmod.dmi b/modular_nova/modules/marines/icons/wornmod.dmi similarity index 100% rename from modular_skyrat/modules/marines/icons/wornmod.dmi rename to modular_nova/modules/marines/icons/wornmod.dmi diff --git a/modular_skyrat/modules/marines/sound/m44a.ogg b/modular_nova/modules/marines/sound/m44a.ogg similarity index 100% rename from modular_skyrat/modules/marines/sound/m44a.ogg rename to modular_nova/modules/marines/sound/m44a.ogg diff --git a/modular_skyrat/modules/medical/attributions.txt b/modular_nova/modules/medical/attributions.txt similarity index 100% rename from modular_skyrat/modules/medical/attributions.txt rename to modular_nova/modules/medical/attributions.txt diff --git a/modular_skyrat/modules/medical/code/anesthetic_machine.dm b/modular_nova/modules/medical/code/anesthetic_machine.dm similarity index 80% rename from modular_skyrat/modules/medical/code/anesthetic_machine.dm rename to modular_nova/modules/medical/code/anesthetic_machine.dm index b7ef8f18cca70e..c288004965cf40 100644 --- a/modular_skyrat/modules/medical/code/anesthetic_machine.dm +++ b/modular_nova/modules/medical/code/anesthetic_machine.dm @@ -3,7 +3,7 @@ /obj/machinery/anesthetic_machine name = "portable anesthetic tank stand" desc = "A stand on wheels, similar to an IV drip, that can hold a canister of anesthetic along with a gas mask." - icon = 'modular_skyrat/modules/medical/icons/obj/machinery.dmi' + icon = 'modular_nova/modules/medical/icons/obj/machinery.dmi' icon_state = "breath_machine" anchored = FALSE mouse_drag_pointer = MOUSE_ACTIVE_POINTER @@ -27,7 +27,6 @@ /obj/machinery/anesthetic_machine/Initialize(mapload) . = ..() attached_mask = new /obj/item/clothing/mask/breath/anesthetic(src) - attached_mask.attached_machine = src update_icon() /obj/machinery/anesthetic_machine/wrench_act_secondary(mob/living/user, obj/item/tool) @@ -67,16 +66,16 @@ return FALSE visible_message(span_notice("[user] retracts [attached_mask] back into [src].")) -/obj/machinery/anesthetic_machine/attacked_by(obj/item/used_item, mob/living/user) - if(!istype(used_item, /obj/item/tank)) +/obj/machinery/anesthetic_machine/attackby(obj/item/attacking_item, mob/user, params) + if(!istype(attacking_item, /obj/item/tank)) return ..() if(attached_tank) // If there is an attached tank, remove it and drop it on the floor attached_tank.forceMove(loc) - used_item.forceMove(src) // Put new tank in, set it as attached tank - visible_message(span_notice("[user] inserts [used_item] into [src].")) - attached_tank = used_item + attacking_item.forceMove(src) // Put new tank in, set it as attached tank + visible_message(span_notice("[user] inserts [attacking_item] into [src].")) + attached_tank = attacking_item update_icon() /obj/machinery/anesthetic_machine/AltClick(mob/user) @@ -121,6 +120,11 @@ to_chat(usr, span_warning("[mask_out ? "The machine is already in use!" : "The machine has no attached tank!"]")) return FALSE + // if we somehow lost the mask, let's just make a brand new one. the wonders of technology! + if(QDELETED(attached_mask)) + attached_mask = new /obj/item/clothing/mask/breath/anesthetic(src) + update_icon() + usr.visible_message(span_warning("[usr] attemps to attach the [attached_mask] to [target]."), span_notice("You attempt to attach the [attached_mask] to [target]")) if(!do_after(usr, 5 SECONDS, target)) return @@ -159,7 +163,7 @@ attached_tank = null QDEL_NULL(attached_mask) - . = ..() + return ..() /// This a special version of the breath mask used for the anesthetic machine. /obj/item/clothing/mask/breath/anesthetic @@ -170,6 +174,21 @@ . = ..() ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT) + // Make sure we are not spawning outside of a machine + if(istype(loc, /obj/machinery/anesthetic_machine)) + attached_machine = WEAKREF(loc) + + var/obj/machinery/anesthetic_machine/our_machine + if(attached_machine) + our_machine = attached_machine.resolve() + + if(!our_machine) + attached_machine = null + if(mapload) + stack_trace("Abstract, undroppable item [name] spawned at ([loc]) at [AREACOORD(src)] in \the [get_area(src)]. \ + Please remove it. This item should only ever be created by the anesthetic machine.") + return INITIALIZE_HINT_QDEL + /obj/item/clothing/mask/breath/anesthetic/Destroy() attached_machine = null return ..() @@ -177,18 +196,22 @@ /obj/item/clothing/mask/breath/anesthetic/dropped(mob/user) . = ..() - if(loc != attached_machine) //If it isn't in the machine, then it retracts when dropped - to_chat(user, span_notice("[src] retracts back into the [attached_machine].")) + if(isnull(attached_machine)) + return - if(!istype(attached_machine, /obj/machinery/anesthetic_machine)) - qdel(src) - return FALSE + var/obj/machinery/anesthetic_machine/our_machine = attached_machine.resolve() + // no machine, then delete it + if(!our_machine) + attached_machine = null + qdel(src) + return - var/obj/machinery/anesthetic_machine/source_machine = attached_machine - source_machine.retract_mask() + if(loc != our_machine) //If it isn't in the machine, then it retracts when dropped + to_chat(user, span_notice("[src] retracts back into the [our_machine].")) + our_machine.retract_mask() /obj/item/clothing/mask/breath/anesthetic/adjustmask(mob/living/carbon/user) - ..() + . = ..() // Air only goes through the mask, so temporarily pause airflow if mask is getting adjusted. // Since the mask is NODROP, the only possible user is the wearer var/mob/living/carbon/carbon_target = loc diff --git a/modular_nova/modules/medical/code/carbon_examine.dm b/modular_nova/modules/medical/code/carbon_examine.dm new file mode 100644 index 00000000000000..b4e385badfb845 --- /dev/null +++ b/modular_nova/modules/medical/code/carbon_examine.dm @@ -0,0 +1,66 @@ +/mob/living/carbon/examine_more(mob/user) + . = ..() + var/t_His = p_Their() + var/t_He = p_They() + var/t_Has = p_have() + + var/any_bodypart_damage = FALSE + for(var/X in bodyparts) + var/obj/item/bodypart/LB = X + if(LB.bodypart_flags & BODYPART_PSEUDOPART) + continue + var/limb_max_damage = LB.max_damage + var/status = "" + var/brutedamage = round(LB.brute_dam/limb_max_damage*100) + var/burndamage = round(LB.burn_dam/limb_max_damage*100) + switch(brutedamage) + if(20 to 50) + status = LB.light_brute_msg + if(51 to 75) + status = LB.medium_brute_msg + if(76 to 100) + status += LB.heavy_brute_msg + + if(burndamage >= 20 && status) + status += " and " + switch(burndamage) + if(20 to 50) + status += LB.light_burn_msg + if(51 to 75) + status += LB.medium_burn_msg + if(76 to 100) + status += LB.heavy_burn_msg + + if(status) + any_bodypart_damage = TRUE + . += "\t<span class='warning'>[t_His] [LB.name] is [status].</span>" + + for(var/thing in LB.wounds) + any_bodypart_damage = TRUE + var/datum/wound/W = thing + switch(W.severity) + if(WOUND_SEVERITY_TRIVIAL) + . += "\t<span class='warning'>[t_His] [LB.name] is suffering [W.a_or_from] [W.get_topic_name(user)].</span>" + if(WOUND_SEVERITY_MODERATE) + . += "\t<span class='warning'>[t_His] [LB.name] is suffering [W.a_or_from] [W.get_topic_name(user)]!</span>" + if(WOUND_SEVERITY_SEVERE) + . += "\t<span class='warning'><b>[t_His] [LB.name] is suffering [W.a_or_from] [W.get_topic_name(user)]!</b></span>" + if(WOUND_SEVERITY_CRITICAL) + . += "\t<span class='warning'><b>[t_His] [LB.name] is suffering [W.a_or_from] [W.get_topic_name(user)]!!</b></span>" + if(LB.current_gauze) + . += "\t<span class='notice'><i>[t_His] [LB.name] is [LB.current_gauze.get_gauze_usage_prefix()] with <a href='?src=[REF(LB.current_gauze)];remove=1'>[LB.current_gauze.get_gauze_description()]</a>.</i></span>" + + if(!any_bodypart_damage) + . += "\t<span class='smallnotice'><i>[t_He] [t_Has] no significantly damaged bodyparts.</i></span>" + + var/list/visible_scars + if(all_scars) + for(var/i in all_scars) + var/datum/scar/S = i + if(S.is_visible(user)) + LAZYADD(visible_scars, S) + + if(!visible_scars) + . += "\t<span class='smallnotice'><i>[t_He] [t_Has] no visible scars.</i></span>" + + return . diff --git a/modular_nova/modules/medical/code/carbon_update_icons.dm b/modular_nova/modules/medical/code/carbon_update_icons.dm new file mode 100644 index 00000000000000..6cf93bc452e85a --- /dev/null +++ b/modular_nova/modules/medical/code/carbon_update_icons.dm @@ -0,0 +1,14 @@ +/mob/living/carbon/proc/update_bandage_overlays() + remove_overlay(BANDAGE_LAYER) + + var/mutable_appearance/overlays = mutable_appearance('modular_nova/modules/medical/icons/on_limb_overlays.dmi', "", -BANDAGE_LAYER) + overlays_standing[BANDAGE_LAYER] = overlays + + for(var/b in bodyparts) + var/obj/item/bodypart/BP = b + var/obj/item/stack/medical/gauze/our_gauze = BP.current_gauze + if (!our_gauze) + continue + overlays.add_overlay(our_gauze.get_overlay_prefix()) + + apply_overlay(BANDAGE_LAYER) diff --git a/modular_skyrat/modules/medical/code/cargo/packs.dm b/modular_nova/modules/medical/code/cargo/packs.dm similarity index 100% rename from modular_skyrat/modules/medical/code/cargo/packs.dm rename to modular_nova/modules/medical/code/cargo/packs.dm diff --git a/modular_skyrat/modules/medical/code/grasp.dm b/modular_nova/modules/medical/code/grasp.dm similarity index 100% rename from modular_skyrat/modules/medical/code/grasp.dm rename to modular_nova/modules/medical/code/grasp.dm diff --git a/modular_skyrat/modules/medical/code/health_analyzer.dm b/modular_nova/modules/medical/code/health_analyzer.dm similarity index 100% rename from modular_skyrat/modules/medical/code/health_analyzer.dm rename to modular_nova/modules/medical/code/health_analyzer.dm diff --git a/modular_skyrat/modules/medical/code/medkit.dm b/modular_nova/modules/medical/code/medkit.dm similarity index 96% rename from modular_skyrat/modules/medical/code/medkit.dm rename to modular_nova/modules/medical/code/medkit.dm index 8ea40ae54bd4ef..cf2dccd3f397ff 100644 --- a/modular_skyrat/modules/medical/code/medkit.dm +++ b/modular_nova/modules/medical/code/medkit.dm @@ -1,10 +1,10 @@ /obj/item/storage/backpack/duffelbag/synth_treatment_kit name = "synthetic treatment kit" desc = "A \"surgical\" duffel bag containing everything you need to treat the worst and <i>best</i> of inorganic wounds." - icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi' - lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' - righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi' + lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' + righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' icon_state = "duffel_robo" inhand_icon_state = "duffel_robo" diff --git a/modular_skyrat/modules/medical/code/smartdarts.dm b/modular_nova/modules/medical/code/smartdarts.dm similarity index 97% rename from modular_skyrat/modules/medical/code/smartdarts.dm rename to modular_nova/modules/medical/code/smartdarts.dm index 326f8382f415cd..6c658334bf180f 100644 --- a/modular_skyrat/modules/medical/code/smartdarts.dm +++ b/modular_nova/modules/medical/code/smartdarts.dm @@ -3,7 +3,7 @@ name = "SmartDart" desc = "Allows the user to safely inject chemicals at a range without harming the patient." volume = 10 - icon = 'modular_skyrat/modules/medical/icons/obj/smartdarts.dmi' + icon = 'modular_nova/modules/medical/icons/obj/smartdarts.dmi' icon_state = "dart_0" possible_transfer_amounts = list(1, 2, 5, 10) base_icon_state = "dart" @@ -44,7 +44,7 @@ name = "medical SmartDart gun" desc = "An adjusted version of the medical syringe gun that only allows SmartDarts to be chambered." w_class = WEIGHT_CLASS_NORMAL //I might need to look into changing this later depending on feedback - icon = 'modular_skyrat/modules/medical/icons/obj/dartguns.dmi' + icon = 'modular_nova/modules/medical/icons/obj/dartguns.dmi' icon_state = "smartdartgun" worn_icon_state = "medicalsyringegun" item_flags = null diff --git a/modular_skyrat/modules/medical/code/sprays.dm b/modular_nova/modules/medical/code/sprays.dm similarity index 100% rename from modular_skyrat/modules/medical/code/sprays.dm rename to modular_nova/modules/medical/code/sprays.dm diff --git a/modular_skyrat/modules/medical/code/wounds/_wounds.dm b/modular_nova/modules/medical/code/wounds/_wounds.dm similarity index 100% rename from modular_skyrat/modules/medical/code/wounds/_wounds.dm rename to modular_nova/modules/medical/code/wounds/_wounds.dm diff --git a/modular_skyrat/modules/medical/code/wounds/bleed.dm b/modular_nova/modules/medical/code/wounds/bleed.dm similarity index 100% rename from modular_skyrat/modules/medical/code/wounds/bleed.dm rename to modular_nova/modules/medical/code/wounds/bleed.dm diff --git a/modular_skyrat/modules/medical/code/wounds/medical.dm b/modular_nova/modules/medical/code/wounds/medical.dm similarity index 100% rename from modular_skyrat/modules/medical/code/wounds/medical.dm rename to modular_nova/modules/medical/code/wounds/medical.dm diff --git a/modular_skyrat/modules/medical/code/wounds/muscle.dm b/modular_nova/modules/medical/code/wounds/muscle.dm similarity index 100% rename from modular_skyrat/modules/medical/code/wounds/muscle.dm rename to modular_nova/modules/medical/code/wounds/muscle.dm diff --git a/modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt.dm b/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt.dm similarity index 99% rename from modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt.dm rename to modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt.dm index 52995365b01fb6..66cbbb510b29c0 100644 --- a/modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt.dm +++ b/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt.dm @@ -140,7 +140,7 @@ /datum/wound/blunt/robotic/handle_process(seconds_per_tick, times_fired) . = ..() - if (!victim || IS_IN_STASIS(victim)) + if (!victim || HAS_TRAIT(victim, TRAIT_STASIS)) return if (limb.body_zone == BODY_ZONE_HEAD && brain_trauma_group && world.time > next_trauma_cycle) diff --git a/modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt_T1.dm b/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T1.dm similarity index 100% rename from modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt_T1.dm rename to modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T1.dm diff --git a/modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt_T2.dm b/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T2.dm similarity index 100% rename from modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt_T2.dm rename to modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T2.dm diff --git a/modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt_T3.dm b/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T3.dm similarity index 100% rename from modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt_T3.dm rename to modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T3.dm diff --git a/modular_skyrat/modules/medical/code/wounds/synth/blunt/secures_internals.dm b/modular_nova/modules/medical/code/wounds/synth/blunt/secures_internals.dm similarity index 99% rename from modular_skyrat/modules/medical/code/wounds/synth/blunt/secures_internals.dm rename to modular_nova/modules/medical/code/wounds/synth/blunt/secures_internals.dm index e9e9ce3cb68f87..d4483dafb0b562 100644 --- a/modular_skyrat/modules/medical/code/wounds/synth/blunt/secures_internals.dm +++ b/modular_nova/modules/medical/code/wounds/synth/blunt/secures_internals.dm @@ -20,7 +20,7 @@ /datum/wound/blunt/robotic/secures_internals/handle_process(seconds_per_tick, times_fired) . = ..() - if (!victim || IS_IN_STASIS(victim)) + if (!victim || HAS_TRAIT(victim, TRAIT_STASIS)) return if (gelled) diff --git a/modular_skyrat/modules/medical/code/wounds/synth/robotic_burns.dm b/modular_nova/modules/medical/code/wounds/synth/robotic_burns.dm similarity index 99% rename from modular_skyrat/modules/medical/code/wounds/synth/robotic_burns.dm rename to modular_nova/modules/medical/code/wounds/synth/robotic_burns.dm index 24ac18eeab6ba5..16540ac9f36a4f 100644 --- a/modular_skyrat/modules/medical/code/wounds/synth/robotic_burns.dm +++ b/modular_nova/modules/medical/code/wounds/synth/robotic_burns.dm @@ -126,7 +126,7 @@ if (outgoing_bodytemp_coeff <= 0) return var/statis_mult = 1 - if (IS_IN_STASIS(victim)) // stasis heavily reduces the ingoing and outgoing transfer of heat + if (HAS_TRAIT(victim, TRAIT_STASIS)) // stasis heavily reduces the ingoing and outgoing transfer of heat statis_mult *= OVERHEAT_ON_STASIS_HEAT_MULT var/difference_from_average = max((BODYTEMP_NORMAL - victim.bodytemperature), 0) diff --git a/modular_skyrat/modules/medical/code/wounds/synth/robotic_muscle.dm b/modular_nova/modules/medical/code/wounds/synth/robotic_muscle.dm similarity index 100% rename from modular_skyrat/modules/medical/code/wounds/synth/robotic_muscle.dm rename to modular_nova/modules/medical/code/wounds/synth/robotic_muscle.dm diff --git a/modular_skyrat/modules/medical/code/wounds/synth/robotic_pierce.dm b/modular_nova/modules/medical/code/wounds/synth/robotic_pierce.dm similarity index 95% rename from modular_skyrat/modules/medical/code/wounds/synth/robotic_pierce.dm rename to modular_nova/modules/medical/code/wounds/synth/robotic_pierce.dm index b7e4f259e5d2af..09cc878afd4668 100644 --- a/modular_skyrat/modules/medical/code/wounds/synth/robotic_pierce.dm +++ b/modular_nova/modules/medical/code/wounds/synth/robotic_pierce.dm @@ -21,7 +21,7 @@ treat_text = "Replacing of damaged wiring, though repairs via wirecutting instruments or sutures may suffice, albeit at limited efficiency. In case of emergency, \ subject may be subjected to high temperatures to allow solder to reset." - sound_effect = 'modular_skyrat/modules/medical/sound/robotic_slash_T1.ogg' + sound_effect = 'modular_nova/modules/medical/sound/robotic_slash_T1.ogg' severity = WOUND_SEVERITY_MODERATE @@ -64,7 +64,7 @@ examine_desc = "is shuddering significantly, its servos briefly giving way in a rythmic pattern" treat_text = "Containment of damaged wiring via gauze, then application of fresh wiring/sutures, or resetting of displaced wiring via wirecutter/retractor." - sound_effect = 'modular_skyrat/modules/medical/sound/robotic_slash_T2.ogg' + sound_effect = 'modular_nova/modules/medical/sound/robotic_slash_T2.ogg' severity = WOUND_SEVERITY_SEVERE @@ -111,7 +111,7 @@ severity = WOUND_SEVERITY_CRITICAL wound_flags = (ACCEPTS_GAUZE|MANGLES_EXTERIOR|CAN_BE_GRASPED|SPLINT_OVERLAY) - sound_effect = 'modular_skyrat/modules/medical/sound/robotic_slash_T3.ogg' + sound_effect = 'modular_nova/modules/medical/sound/robotic_slash_T3.ogg' sound_volume = 30 diff --git a/modular_skyrat/modules/medical/code/wounds/synth/robotic_slash.dm b/modular_nova/modules/medical/code/wounds/synth/robotic_slash.dm similarity index 98% rename from modular_skyrat/modules/medical/code/wounds/synth/robotic_slash.dm rename to modular_nova/modules/medical/code/wounds/synth/robotic_slash.dm index a28737520b5fdc..aae397f366d224 100644 --- a/modular_skyrat/modules/medical/code/wounds/synth/robotic_slash.dm +++ b/modular_nova/modules/medical/code/wounds/synth/robotic_slash.dm @@ -194,7 +194,7 @@ var/base_mult = 1 if (victim) - if (IS_IN_STASIS(victim)) + if (HAS_TRAIT(victim, TRAIT_STASIS)) base_mult *= ELECTRICAL_DAMAGE_ON_STASIS_MULT if (victim.body_position == LYING_DOWN) base_mult *= ELECTRICAL_DAMAGE_LYING_DOWN_MULT @@ -490,7 +490,7 @@ treat_text = "Replacing of damaged wiring, though repairs via wirecutting instruments or sutures may suffice, albeit at limited efficiency. In case of emergency, \ subject may be subjected to high temperatures to allow solder to reset." - sound_effect = 'modular_skyrat/modules/medical/sound/robotic_slash_T1.ogg' + sound_effect = 'modular_nova/modules/medical/sound/robotic_slash_T1.ogg' severity = WOUND_SEVERITY_MODERATE @@ -533,7 +533,7 @@ examine_desc = "has multiple severed wires visible to the outside" treat_text = "Containment of damaged wiring via gauze, then application of fresh wiring/sutures, or resetting of displaced wiring via wirecutter/retractor." - sound_effect = 'modular_skyrat/modules/medical/sound/robotic_slash_T2.ogg' + sound_effect = 'modular_nova/modules/medical/sound/robotic_slash_T2.ogg' severity = WOUND_SEVERITY_SEVERE @@ -578,9 +578,9 @@ If the fault has become uncontrollable, extreme heat therapy is recommended." severity = WOUND_SEVERITY_CRITICAL - wound_flags = (ACCEPTS_GAUZE|MANGLES_INTERIOR|CAN_BE_GRASPED|SPLINT_OVERLAY) + wound_flags = (ACCEPTS_GAUZE|MANGLES_EXTERIOR|CAN_BE_GRASPED|SPLINT_OVERLAY) - sound_effect = 'modular_skyrat/modules/medical/sound/robotic_slash_T3.ogg' + sound_effect = 'modular_nova/modules/medical/sound/robotic_slash_T3.ogg' sound_volume = 30 diff --git a/modular_skyrat/modules/medical/code/wounds/wound_effects.dm b/modular_nova/modules/medical/code/wounds/wound_effects.dm similarity index 100% rename from modular_skyrat/modules/medical/code/wounds/wound_effects.dm rename to modular_nova/modules/medical/code/wounds/wound_effects.dm diff --git a/modular_skyrat/modules/medical/icons/effects/liquid_overlays.dmi b/modular_nova/modules/medical/icons/effects/liquid_overlays.dmi similarity index 100% rename from modular_skyrat/modules/medical/icons/effects/liquid_overlays.dmi rename to modular_nova/modules/medical/icons/effects/liquid_overlays.dmi diff --git a/modular_skyrat/modules/medical/icons/obj/dartguns.dmi b/modular_nova/modules/medical/icons/obj/dartguns.dmi similarity index 100% rename from modular_skyrat/modules/medical/icons/obj/dartguns.dmi rename to modular_nova/modules/medical/icons/obj/dartguns.dmi diff --git a/modular_skyrat/modules/medical/icons/obj/machinery.dmi b/modular_nova/modules/medical/icons/obj/machinery.dmi similarity index 100% rename from modular_skyrat/modules/medical/icons/obj/machinery.dmi rename to modular_nova/modules/medical/icons/obj/machinery.dmi diff --git a/modular_skyrat/modules/medical/icons/obj/smartdarts.dmi b/modular_nova/modules/medical/icons/obj/smartdarts.dmi similarity index 100% rename from modular_skyrat/modules/medical/icons/obj/smartdarts.dmi rename to modular_nova/modules/medical/icons/obj/smartdarts.dmi diff --git a/modular_skyrat/modules/medical/icons/on_limb_overlays.dmi b/modular_nova/modules/medical/icons/on_limb_overlays.dmi similarity index 100% rename from modular_skyrat/modules/medical/icons/on_limb_overlays.dmi rename to modular_nova/modules/medical/icons/on_limb_overlays.dmi diff --git a/modular_nova/modules/medical/readme.md b/modular_nova/modules/medical/readme.md new file mode 100644 index 00000000000000..9b7b38f80d920b --- /dev/null +++ b/modular_nova/modules/medical/readme.md @@ -0,0 +1,51 @@ +<!-- This should be copy-pasted into the root of your module folder as readme.md --> + +https://github.com/Skyrat-SS13/Skyrat-tg/pull/2336 +https://github.com/Skyrat-SS13/Skyrat-tg/pull/23733 + +## Skyrat Medical Update <!--Title of your addition.--> + +Module ID: SKYRAT_MEDICAL_UPDATE <!-- Uppercase, UNDERSCORE_CONNECTED name of your module, that you use to mark files. This is so people can case-sensitive search for your edits, if any. --> + +### Description: + +Various changes to the medical system, from adding bandage overlays, to new wounds, to modularized procs. + +<!-- Here, try to describe what your PR does, what features it provides and any other directly useful information. --> + +### TG Proc/File Changes: + +- code/_DEFINES/wounds.dm: Added muscle/synth wound series, added them to the global list of wound series +- cat2_medicine_reagents.dm: /datum/reagent/medicine/c2/hercuri/on_mob_life, Allowed hercuri to affect synthetics, also changed hercuri process flags for this purpose +- quirks.dm: Commented out the quadruple_amputee/frail blacklist as frail can now apply to prosthetics +<!-- If you edited any core procs, you should list them here. You should specify the files and procs you changed. +E.g: +- `code/modules/mob/living.dm`: `proc/overriden_proc`, `var/overriden_var` +--> + +### Modular Overrides: + +- N/A +<!-- If you added a new modular override (file or code-wise) for your module, you should list it here. Code files should specify what procs they changed, in case of multiple modules using the same file. +E.g: +- `modular_nova/master_files/sound/my_cool_sound.ogg` +- `modular_nova/master_files/code/my_modular_override.dm`: `proc/overriden_proc`, `var/overriden_var` +--> + +### Defines: + +- Many local synthetic wound defines +<!-- If you needed to add any defines, mention the files you added those defines in, along with the name of the defines. --> + +### Included files that are not contained in this module: + +- strings/wounds/metal_scar_desc.json -- Required to be here for _string_lists.dm usage +<!-- Likewise, be it a non-modular file or a modular one that's not contained within the folder belonging to this specific module, it should be mentioned here. Good examples are icons or sounds that are used between multiple modules, or other such edge-cases. --> + +### Credits: + +Azarak - Original medical update, muscle wounds, bandage overlays +Niko - Synthetic wounds +TG coding/Skyrat coding channels and community - Support, ideas, reviews + +<!-- Here go the credits to you, dear coder, and in case of collaborative work or ports, credits to the original source of the code. --> diff --git a/modular_skyrat/modules/medical/sound/robotic_slash_T1.ogg b/modular_nova/modules/medical/sound/robotic_slash_T1.ogg similarity index 100% rename from modular_skyrat/modules/medical/sound/robotic_slash_T1.ogg rename to modular_nova/modules/medical/sound/robotic_slash_T1.ogg diff --git a/modular_skyrat/modules/medical/sound/robotic_slash_T2.ogg b/modular_nova/modules/medical/sound/robotic_slash_T2.ogg similarity index 100% rename from modular_skyrat/modules/medical/sound/robotic_slash_T2.ogg rename to modular_nova/modules/medical/sound/robotic_slash_T2.ogg diff --git a/modular_skyrat/modules/medical/sound/robotic_slash_T3.ogg b/modular_nova/modules/medical/sound/robotic_slash_T3.ogg similarity index 100% rename from modular_skyrat/modules/medical/sound/robotic_slash_T3.ogg rename to modular_nova/modules/medical/sound/robotic_slash_T3.ogg diff --git a/modular_nova/modules/medical_designs/medical_designs.dm b/modular_nova/modules/medical_designs/medical_designs.dm new file mode 100644 index 00000000000000..d0e0ecf934c4e8 --- /dev/null +++ b/modular_nova/modules/medical_designs/medical_designs.dm @@ -0,0 +1,22 @@ +/datum/design/hospital_gown + name = "Hospital Gown" + id = "hospital_gown" + build_type = PROTOLATHE + materials = list( + /datum/material/plastic = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/clothing/suit/toggle/labcoat/hospitalgown + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/surgery/healing/robotic_healing_upgrade + name = "Repair robotic limbs upgrade: Advanced" + surgery = /datum/surgery/robot_healing/upgraded + id = "robotic_heal_surgery_upgrade" + +/datum/design/surgery/healing/robotic_healing_upgrade_2 + name = "Repair robotic limbs upgrade: Experimental" + surgery = /datum/surgery/robot_healing/experimental + id = "robotic_heal_surgery_upgrade_2" diff --git a/modular_skyrat/modules/medievalcrate_skyrat/code/vintageitems.dm b/modular_nova/modules/medievalcrate/code/vintageitems.dm similarity index 100% rename from modular_skyrat/modules/medievalcrate_skyrat/code/vintageitems.dm rename to modular_nova/modules/medievalcrate/code/vintageitems.dm diff --git a/modular_skyrat/modules/mentor/code/_globalvars.dm b/modular_nova/modules/mentor/code/_globalvars.dm similarity index 100% rename from modular_skyrat/modules/mentor/code/_globalvars.dm rename to modular_nova/modules/mentor/code/_globalvars.dm diff --git a/modular_skyrat/modules/mentor/code/client_procs.dm b/modular_nova/modules/mentor/code/client_procs.dm similarity index 100% rename from modular_skyrat/modules/mentor/code/client_procs.dm rename to modular_nova/modules/mentor/code/client_procs.dm diff --git a/modular_skyrat/modules/mentor/code/dementor.dm b/modular_nova/modules/mentor/code/dementor.dm similarity index 100% rename from modular_skyrat/modules/mentor/code/dementor.dm rename to modular_nova/modules/mentor/code/dementor.dm diff --git a/modular_skyrat/modules/mentor/code/follow.dm b/modular_nova/modules/mentor/code/follow.dm similarity index 100% rename from modular_skyrat/modules/mentor/code/follow.dm rename to modular_nova/modules/mentor/code/follow.dm diff --git a/modular_skyrat/modules/mentor/code/logging.dm b/modular_nova/modules/mentor/code/logging.dm similarity index 100% rename from modular_skyrat/modules/mentor/code/logging.dm rename to modular_nova/modules/mentor/code/logging.dm diff --git a/modular_skyrat/modules/mentor/code/mentor.dm b/modular_nova/modules/mentor/code/mentor.dm similarity index 100% rename from modular_skyrat/modules/mentor/code/mentor.dm rename to modular_nova/modules/mentor/code/mentor.dm diff --git a/modular_skyrat/modules/mentor/code/mentor_verbs.dm b/modular_nova/modules/mentor/code/mentor_verbs.dm similarity index 100% rename from modular_skyrat/modules/mentor/code/mentor_verbs.dm rename to modular_nova/modules/mentor/code/mentor_verbs.dm diff --git a/modular_skyrat/modules/mentor/code/mentorhelp.dm b/modular_nova/modules/mentor/code/mentorhelp.dm similarity index 100% rename from modular_skyrat/modules/mentor/code/mentorhelp.dm rename to modular_nova/modules/mentor/code/mentorhelp.dm diff --git a/modular_skyrat/modules/mentor/code/mentorpm.dm b/modular_nova/modules/mentor/code/mentorpm.dm similarity index 100% rename from modular_skyrat/modules/mentor/code/mentorpm.dm rename to modular_nova/modules/mentor/code/mentorpm.dm diff --git a/modular_skyrat/modules/mentor/code/mentorsay.dm b/modular_nova/modules/mentor/code/mentorsay.dm similarity index 100% rename from modular_skyrat/modules/mentor/code/mentorsay.dm rename to modular_nova/modules/mentor/code/mentorsay.dm diff --git a/modular_skyrat/modules/mentor/code/mentorwho.dm b/modular_nova/modules/mentor/code/mentorwho.dm similarity index 100% rename from modular_skyrat/modules/mentor/code/mentorwho.dm rename to modular_nova/modules/mentor/code/mentorwho.dm diff --git a/modular_skyrat/modules/mentor/readme.md b/modular_nova/modules/mentor/readme.md similarity index 100% rename from modular_skyrat/modules/mentor/readme.md rename to modular_nova/modules/mentor/readme.md diff --git a/modular_skyrat/modules/microfusion/code/_microfusion_defines.dm b/modular_nova/modules/microfusion/code/_microfusion_defines.dm similarity index 100% rename from modular_skyrat/modules/microfusion/code/_microfusion_defines.dm rename to modular_nova/modules/microfusion/code/_microfusion_defines.dm diff --git a/modular_skyrat/modules/microfusion/code/cargo_stuff.dm b/modular_nova/modules/microfusion/code/cargo_stuff.dm similarity index 100% rename from modular_skyrat/modules/microfusion/code/cargo_stuff.dm rename to modular_nova/modules/microfusion/code/cargo_stuff.dm diff --git a/modular_skyrat/modules/microfusion/code/gun_types.dm b/modular_nova/modules/microfusion/code/gun_types.dm similarity index 94% rename from modular_skyrat/modules/microfusion/code/gun_types.dm rename to modular_nova/modules/microfusion/code/gun_types.dm index 052e3b32db1045..6da245edc99374 100644 --- a/modular_skyrat/modules/microfusion/code/gun_types.dm +++ b/modular_nova/modules/microfusion/code/gun_types.dm @@ -33,7 +33,7 @@ //For syndicate uplink. /obj/item/gun/microfusion/mcr01/syndie name = "SCR-01" - desc = "A Syndicate brand copy of the MCR-01. It comes with a proprietary suppressor and some tactical attachments." + desc = "A Symphionia brand copy of the MCR-01. It comes with a proprietary suppressor and some tactical attachments." cell_type = /obj/item/stock_parts/cell/microfusion/advanced phase_emitter_type = /obj/item/microfusion_phase_emitter/advanced attachments = list( diff --git a/modular_skyrat/modules/microfusion/code/microfusion_cell.dm b/modular_nova/modules/microfusion/code/microfusion_cell.dm similarity index 97% rename from modular_skyrat/modules/microfusion/code/microfusion_cell.dm rename to modular_nova/modules/microfusion/code/microfusion_cell.dm index b855d4e3041386..b83fea5bff30ab 100644 --- a/modular_skyrat/modules/microfusion/code/microfusion_cell.dm +++ b/modular_nova/modules/microfusion/code/microfusion_cell.dm @@ -9,7 +9,7 @@ Essentially, power cells that malfunction if not used in an MCR, and should only /obj/item/stock_parts/cell/microfusion //Just a standard cell. name = "microfusion cell" desc = "A standard-issue microfusion cell, produced by Micron Control Systems. For safety reasons, they cannot be charged unless they are inside of a compatible Micron Control Systems firearm." - icon = 'modular_skyrat/modules/microfusion/icons/microfusion_cells.dmi' + icon = 'modular_nova/modules/microfusion/icons/microfusion_cells.dmi' charging_icon = "mf_in" //This is stored in cell.dmi in the aesthetics module icon_state = "microfusion" w_class = WEIGHT_CLASS_NORMAL @@ -206,7 +206,7 @@ Essentially, power cells that malfunction if not used in an MCR, and should only /obj/item/stock_parts/cell/microfusion/nanocarbon name = "nanocarbon fusion cell" - desc = "This cell combines both top-of-the-line nanotech and advanced microfusion power to brute force the most common issue of Nanotrasen Asset Protection operatives, ammunition, through sheer volume. Intended for use with Nanotrasen-brand capacitor arrays only. Warranty void if dropped in toilet." + desc = "This cell combines both top-of-the-line nanotech and advanced microfusion power to brute force the most common issue of Symphionia Asset Protection operatives, ammunition, through sheer volume. Intended for use with Symphionia-brand capacitor arrays only. Warranty void if dropped in toilet." icon_state = "microfusion_nanocarbon" maxcharge = 30000 max_attachments = 420 diff --git a/modular_skyrat/modules/microfusion/code/microfusion_cell_attachments.dm b/modular_nova/modules/microfusion/code/microfusion_cell_attachments.dm similarity index 98% rename from modular_skyrat/modules/microfusion/code/microfusion_cell_attachments.dm rename to modular_nova/modules/microfusion/code/microfusion_cell_attachments.dm index 586a20042ebc32..17737b81b4951e 100644 --- a/modular_skyrat/modules/microfusion/code/microfusion_cell_attachments.dm +++ b/modular_nova/modules/microfusion/code/microfusion_cell_attachments.dm @@ -7,7 +7,7 @@ For adding unique abilities to microfusion cells. These cannot directly interact /obj/item/microfusion_cell_attachment name = "microfusion cell attachment" desc = "broken" - icon = 'modular_skyrat/modules/microfusion/icons/microfusion_cells.dmi' + icon = 'modular_nova/modules/microfusion/icons/microfusion_cells.dmi' w_class = WEIGHT_CLASS_NORMAL /// The overlay that will be automatically added, must be in the cells icon. var/attachment_overlay_icon_state diff --git a/modular_nova/modules/microfusion/code/microfusion_designs.dm b/modular_nova/modules/microfusion/code/microfusion_designs.dm new file mode 100644 index 00000000000000..706efc4118486f --- /dev/null +++ b/modular_nova/modules/microfusion/code/microfusion_designs.dm @@ -0,0 +1,436 @@ +#define RND_CATEGORY_MICROFUSION_WEAPONS "/Weaponry (Microfusion)" +#define RND_MICROFUSION_CELLS "/Cells" +#define RND_MICROFUSION_CELL_ATTACHMENTS "/Cell Attachments" +#define RND_MICROFUSION_EMITTERS "/Phase Emitters" +// god forgive me +#define RND_MICROFUSION_ATTACHMENT "/Attachments" +#define RND_MICROFUSION_ATTACHMENT_BARREL " (Barrel)" +#define RND_MICROFUSION_ATTACHMENT_UNDERBARREL " (Underbarrel)" +#define RND_MICROFUSION_ATTACHMENT_RAIL " (Rail)" +#define RND_MICROFUSION_ATTACHMENT_UNIQUE " (Cosmetic)" + +// BASE FOR MCR DESIGNS +/datum/design/microfusion + name = "Microfusion Part" + build_type = PROTOLATHE | AWAY_LATHE + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + construction_time = 10 SECONDS //dunno if this is for mechfabs or what but I'll keep this anyway + category = list( + RND_CATEGORY_MICROFUSION_WEAPONS, + ) + +// EMITTERS + +/datum/design/microfusion/phase_emitter + name = "Placeholder Microfusion Phase Emitter" + desc = "You shouldn't see this. Still, odd how there's no basic phase emitter design, despite how redundant it'd be." + category = list( + RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_EMITTERS, + ) + +/datum/design/microfusion/phase_emitter/enhanced + name = "Enhanced Microfusion Phase Emitter" + desc = "The core of a microfusion projection weapon, produces the laser." + id = "enhanced_microfusion_phase_emitter" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_phase_emitter/enhanced + +/datum/design/microfusion/phase_emitter/advanced + name = "Advanced Microfusion Phase Emitter" + id = "advanced_microfusion_phase_emitter" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_phase_emitter/advanced + +/datum/design/microfusion/phase_emitter/bluespace + name = "Bluespace Microfusion Phase Emitter" + id = "bluespace_microfusion_phase_emitter" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_phase_emitter/bluespace + +// CELLS + +/datum/design/microfusion/cell + name = "Microfusion Cell" + desc = "A microfusion cell. There's a basic type defined next to this, right?" + category = list( + RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_CELLS, + ) + +/datum/design/microfusion/cell/basic + name = "Basic Microfusion Cell" + desc = "A basic microfusion cell with a capacity of 1200 MF and and 1 attachment point." + id = "basic_microfusion_cell" + build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2, + ) + build_path = /obj/item/stock_parts/cell/microfusion + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_CELLS, + ) + +/datum/design/microfusion/cell/enhanced + name = "Enhanced Microfusion Cell" + desc = "An enhanced microfusion cell with a capacity of 1500 MF and 1 attachment point." + id = "enhanced_microfusion_cell" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2, + /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 2, + ) + build_path = /obj/item/stock_parts/cell/microfusion/enhanced + +/datum/design/microfusion/cell/advanced + name = "Advanced Microfusion Cell" + desc = "An advanced microfusion cell with a capacity of 1700 MF and 3 attachment points." + id = "advanced_microfusion_cell" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, + ) + build_path = /obj/item/stock_parts/cell/microfusion/advanced + +/datum/design/microfusion/cell/bluespace + name = "Bluespace Microfusion Cell" + desc = "A bluespace microfusion cell with a capacity of 2000 MF and 3 attachment points." + id = "bluespace_microfusion_cell" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3, + ) + build_path = /obj/item/stock_parts/cell/microfusion/bluespace + +// CELL UPGRADES + +/datum/design/microfusion/cell_attachment + name = "Placeholder Cell Attachment" + desc = "You shouldn't be seeing this." + category = list( + RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_CELL_ATTACHMENTS, + ) + +/datum/design/microfusion/cell_attachment/stabilising + name = "Stabilising Microfusion Cell Attachment" + desc = "Stabilises the internal fusion reaction of microfusion cells, preventing sparks during firing and occasional radiation pulses when used in tandem with a self-charging attachment." + id = "microfusion_cell_attachment_stabiliser" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_cell_attachment/stabiliser + +/datum/design/microfusion/cell_attachment/overcapacity + name = "Overcapacity Microfusion Cell Attachment" + desc = "An attachment for microfusion cells that increases MF capacity." + id = "microfusion_cell_attachment_overcapacity" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/microfusion_cell_attachment/overcapacity + +/datum/design/microfusion/cell_attachment/selfcharging + name = "Self-Charging Microfusion Cell Attachment" + desc = "Contains a small amount of infinitely decaying nuclear material, causing the fusion reaction to be self sustaining. WARNING: May cause radiation burns if not stabilised." + id = "microfusion_cell_attachment_selfcharging" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/uranium = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/bluespace = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_cell_attachment/selfcharging + +/datum/design/microfusion/attachment + name = "Placeholder MCR Attachment" + desc = "You *really* shouldn't be seeing this. Now in different attachment flavors! The Req line will hate you." + category = list( + RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_ATTACHMENT, + ) + +// RAIL MODS + +/datum/design/microfusion/attachment/rail_slot + name = "Placeholder Microfusion Rail Slot Attachment" + category = list( + RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_ATTACHMENT + RND_MICROFUSION_ATTACHMENT_RAIL, + ) + +/datum/design/microfusion/attachment/rail_slot/rail + name = "Microfusion Weapon Rail" + desc = "A carrying handle/rail system for any additional attachments, such as a seclite and/or bayonet." + id = "microfusion_gun_attachment_rail" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/rail + +/datum/design/microfusion/attachment/rail_slot/scope + name = "Microfusion Weapon Scope" + desc = "A scope. For microfusion weapon platforms, probably." + id = "microfusion_gun_attachment_scope" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/scope + +// UNDERBARREL MODS + +/datum/design/microfusion/attachment/underbarrel + name = "Placeholder Microfusion Underbarrel Slot Attachment" + category = list( + RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_ATTACHMENT + RND_MICROFUSION_ATTACHMENT_UNDERBARREL, + ) + +/datum/design/microfusion/attachment/underbarrel/grip + name = "Microfusion Weapon Grip" + desc = "A grip. For microfusion weapon platforms, ostensibly." + id = "microfusion_gun_attachment_grip" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/grip + +/datum/design/microfusion/attachment/underbarrel/heatsink + name = "Phase Emitter Heatsink" + desc = "A heatsink attachment for your microfusion weapon. Massively increases cooling potential." + id = "microfusion_gun_attachment_heatsink" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/heatsink + +// BARREL MODS (there's a lot) + +/datum/design/microfusion/attachment/barrel + name = "Placeholder Microfusion Barrel Slot Attachment" + category = list( + RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_ATTACHMENT + RND_MICROFUSION_ATTACHMENT_BARREL, + ) + +/datum/design/microfusion/attachment/barrel/suppressor + name = "Suppressor Lens Attachment" + desc = "An experimental barrel attachment that dampens the soundwave of the emitter, suppressing the report. Does not make the lasers themselves more stealthy, as they are lasers." + id = "microfusion_gun_attachment_suppressor" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/barrel/suppressor + +/datum/design/microfusion/attachment/barrel/honk + name = "Bananium Phase Emitter \"Upgrade\"" + desc = "Makes your lasers into the greatest clowning tool ever made. HONK!" + id = "microfusion_gun_attachment_honk" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/bananium = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/barrel/honk + +/datum/design/microfusion/attachment/barrel/lance + name = "Lance Induction Carriage" + desc = "Turns the gun into a designated marksman rifle." + id = "microfusion_gun_attachment_lance" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/barrel/lance + +// EMITTER UPGRADES (they're still barrel upgrades, though) + +/datum/design/microfusion/attachment/barrel/scatter + name = "Diffuser Microfusion Lens Attachment" + desc = "Splits the microfusion laser beam entering the lens." + id = "microfusion_gun_attachment_scatter" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/barrel/scatter + +/datum/design/microfusion/attachment/barrel/scatter/max + name = "Crystalline Diffuser Microfusion Lens Attachment" + desc = "Splits the microfusion laser beam entering the lens even more." + id = "microfusion_gun_attachment_scattermax" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/barrel/scatter/max + +/datum/design/microfusion/attachment/barrel/superheat + name = "Superheating Phase Emitter Upgrade" + desc = "Superheats the beam, causing targets to ignite." + id = "microfusion_gun_attachment_superheat" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/barrel/superheat + +/datum/design/microfusion/attachment/barrel/hellfire + name = "Hellfire Phase Emitter Upgrade" + desc = "Overheats the beam, causing nastier wounds and higher damage." + id = "microfusion_gun_attachment_hellfire" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/barrel/hellfire + +/datum/design/microfusion/attachment/barrel/repeater + name = "Repeating Phase Emitter Upgrade" + desc = "Upgrades the central phase emitter to repeat twice." + id = "microfusion_gun_attachment_repeater" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/barrel/repeater + +/datum/design/microfusion/attachment/barrel/repeater/penetrator + name = "Focused Repeating Phase Emitter Upgrade" + desc = "Upgrades the central phase emitter to repeat twice and penetrate armor." + id = "microfusion_gun_attachment_penetrator" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/barrel/repeater/penetrator + +/datum/design/microfusion/attachment/barrel/xray + name = "Phase Inverter Emitter Array" + desc = "Experimental technology that inverts the central phase emitter causing the wave frequency to shift into X-rays that pierce solid objects. CAUTION: Phase emitter heats up very quickly." + id = "microfusion_gun_attachment_xray" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/uranium = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/barrel/xray + +// COSMETICS + +/datum/design/microfusion/attachment/unique + name = "Placeholder Microfusion Unique/Cosmetic Attachment" + category = list( + RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_ATTACHMENT + RND_MICROFUSION_ATTACHMENT_UNIQUE, + ) + +/datum/design/microfusion/attachment/unique/rgb + name = "Phase Emitter Spectrograph" + desc = "An attachment hooked up to the phase emitter, allowing the user to adjust the color of the beam outputted. This has seen widespread use by various factions capable of getting their hands on microfusion weapons, whether as a calling card or simply for entertainment." + id = "microfusion_gun_attachment_rgb" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/rgb + +/datum/design/microfusion/attachment/unique/camo_black + name = "Black Camo Microfusion Frame" + desc = "A frame modification for the MCR-10, changing the color of the gun to black." + id = "microfusion_gun_attachment_black_camo" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/camo + +/datum/design/microfusion/attachment/unique/camo_nanotrasen + name = "Symphionia Camo Microfusion Frame" + desc = "A frame modification for the MCR-01, changing the color of the gun to blue." + id = "microfusion_gun_attachment_nt_camo" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/camo/nanotrasen + +/datum/design/microfusion/attachment/unique/camo_syndicate + name = "Blood Red Camo Microfusion Frame" + desc = "A frame modification for the MCR-01, changing the color of the gun to a slick blood red." + id = "microfusion_gun_attachment_syndi_camo" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/camo/syndicate + +/datum/design/microfusion/attachment/unique/camo_bananium + name = "Bananium Microfusion Frame" + desc = "A frame modification for the MCR-01, plating the gun in bananium." + id = "microfusion_gun_attachment_honk_camo" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/bananium = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/camo/honk diff --git a/modular_skyrat/modules/microfusion/code/microfusion_energy_master.dm b/modular_nova/modules/microfusion/code/microfusion_energy_master.dm similarity index 98% rename from modular_skyrat/modules/microfusion/code/microfusion_energy_master.dm rename to modular_nova/modules/microfusion/code/microfusion_energy_master.dm index e242cebbc1cd64..1673f0179513df 100644 --- a/modular_skyrat/modules/microfusion/code/microfusion_energy_master.dm +++ b/modular_nova/modules/microfusion/code/microfusion_energy_master.dm @@ -6,11 +6,11 @@ /obj/item/gun/microfusion name = "prototype detatchable cell energy projection aparatus" desc = "The coders have obviously failed to realise this is broken." - icon = 'modular_skyrat/modules/microfusion/icons/microfusion_gun40x32.dmi' + icon = 'modular_nova/modules/microfusion/icons/microfusion_gun40x32.dmi' icon_state = "mcr01" inhand_icon_state = "mcr01" - lefthand_file = 'modular_skyrat/modules/microfusion/icons/guns_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/microfusion/icons/guns_righthand.dmi' + lefthand_file = 'modular_nova/modules/microfusion/icons/guns_lefthand.dmi' + righthand_file = 'modular_nova/modules/microfusion/icons/guns_righthand.dmi' can_bayonet = FALSE weapon_weight = WEAPON_HEAVY w_class = WEIGHT_CLASS_BULKY @@ -39,13 +39,13 @@ /// The microfusion lens used for generating the beams. var/obj/item/ammo_casing/energy/laser/microfusion/microfusion_lens /// The sound played when you insert a cell. - var/sound_cell_insert = 'modular_skyrat/modules/microfusion/sound/mag_insert.ogg' + var/sound_cell_insert = 'modular_nova/modules/microfusion/sound/mag_insert.ogg' /// Should the insertion sound played vary? var/sound_cell_insert_vary = TRUE /// The volume at which we will play the insertion sound. var/sound_cell_insert_volume = 50 /// The sound played when you remove a cell. - var/sound_cell_remove = 'modular_skyrat/modules/microfusion/sound/mag_insert.ogg' + var/sound_cell_remove = 'modular_nova/modules/microfusion/sound/mag_insert.ogg' /// Should the removal sound played vary? var/sound_cell_remove_vary = TRUE /// The volume at which we will play the removal sound. diff --git a/modular_skyrat/modules/microfusion/code/microfusion_gun_attachments.dm b/modular_nova/modules/microfusion/code/microfusion_gun_attachments.dm similarity index 97% rename from modular_skyrat/modules/microfusion/code/microfusion_gun_attachments.dm rename to modular_nova/modules/microfusion/code/microfusion_gun_attachments.dm index 97a806effdb98b..ae1038b405e3fc 100644 --- a/modular_skyrat/modules/microfusion/code/microfusion_gun_attachments.dm +++ b/modular_nova/modules/microfusion/code/microfusion_gun_attachments.dm @@ -6,7 +6,7 @@ /obj/item/microfusion_gun_attachment name = "microfusion gun attachment" desc = "If you see this yell at a coder" - icon = 'modular_skyrat/modules/microfusion/icons/microfusion_gun_attachments.dmi' + icon = 'modular_nova/modules/microfusion/icons/microfusion_gun_attachments.dmi' w_class = WEIGHT_CLASS_NORMAL /// The attachment overlay icon state. var/attachment_overlay_icon_state @@ -179,7 +179,7 @@ Lasers set the target on fire. heat_addition = 90 slot = GUN_SLOT_BARREL projectile_override = /obj/projectile/beam/laser/microfusion/superheated - new_fire_sound = 'modular_skyrat/modules/microfusion/sound/vaporize.ogg' + new_fire_sound = 'modular_nova/modules/microfusion/sound/vaporize.ogg' /* HELLFIRE ATTACHMENT @@ -195,7 +195,7 @@ Makes the gun shoot hellfire lasers. power_usage = 20 slot = GUN_SLOT_BARREL projectile_override = /obj/projectile/beam/laser/microfusion/hellfire - new_fire_sound = 'modular_skyrat/modules/microfusion/sound/melt.ogg' + new_fire_sound = 'modular_nova/modules/microfusion/sound/melt.ogg' /* REPEATER ATTACHMENT @@ -247,7 +247,7 @@ The gun can fire X-RAY shots. attachment_overlay_icon_state = "attachment_xray" heat_addition = 90 power_usage = 50 - new_fire_sound = 'modular_skyrat/modules/microfusion/sound/incinerate.ogg' + new_fire_sound = 'modular_nova/modules/microfusion/sound/incinerate.ogg' projectile_override = /obj/projectile/beam/laser/microfusion/xray /obj/item/microfusion_gun_attachment/barrel/xray/examine(mob/user) @@ -325,7 +325,7 @@ The gun can fire PULSE shots. */ /obj/item/microfusion_gun_attachment/barrel/pulse name = "pulse induction carriage" - desc = "A cutting-edge bluespace capacitor array and distributing lens overhaul produced in laboratories by Nanotrasen scientists that allow microfusion rifles to fire military-grade pulse rounds. Comes equipped with cyclic cooling to ensure maximum combat efficiency, a munitions counter, and an extra-secure drop cage for the power source. May shorten trigger lifetime." + desc = "A cutting-edge bluespace capacitor array and distributing lens overhaul produced in laboratories by Symphionia scientists that allow microfusion rifles to fire military-grade pulse rounds. Comes equipped with cyclic cooling to ensure maximum combat efficiency, a munitions counter, and an extra-secure drop cage for the power source. May shorten trigger lifetime." icon_state = "attachment_pulse" attachment_overlay_icon_state = "attachment_pulse" heat_addition = 150 @@ -427,7 +427,7 @@ Allows for flashlights bayonets and adds 1 slot to equipment. /obj/item/microfusion_gun_attachment/rail/run_attachment(obj/item/gun/microfusion/microfusion_gun) . = ..() microfusion_gun.AddComponent(/datum/component/seclite_attachable, \ - light_overlay_icon = 'modular_skyrat/modules/microfusion/icons/microfusion_gun40x32.dmi', \ + light_overlay_icon = 'modular_nova/modules/microfusion/icons/microfusion_gun40x32.dmi', \ light_overlay = "flight") microfusion_gun.can_bayonet = TRUE @@ -510,10 +510,10 @@ Totally not property of a hostile corporation. NANOTRASEN CAMO ATTACHMENT Allows for an official blue camo to be applied to the gun. -Hail Nanotrasen. +Hail Symphionia. */ /obj/item/microfusion_gun_attachment/camo/nanotrasen - name = "\improper Nanotrasen brand microfusion frame" + name = "\improper Symphionia brand microfusion frame" desc = "A frame modification for the MCR-01, changing the color of the gun to blue." icon_state = "attachment_nt_camo" attachment_overlay_icon_state = "attachment_nt_camo" diff --git a/modular_skyrat/modules/microfusion/code/microfusion_techweb.dm b/modular_nova/modules/microfusion/code/microfusion_techweb.dm similarity index 100% rename from modular_skyrat/modules/microfusion/code/microfusion_techweb.dm rename to modular_nova/modules/microfusion/code/microfusion_techweb.dm diff --git a/modular_skyrat/modules/microfusion/code/phase_emitter.dm b/modular_nova/modules/microfusion/code/phase_emitter.dm similarity index 97% rename from modular_skyrat/modules/microfusion/code/phase_emitter.dm rename to modular_nova/modules/microfusion/code/phase_emitter.dm index f213ff4896f5b4..19caeb30aa6078 100644 --- a/modular_skyrat/modules/microfusion/code/phase_emitter.dm +++ b/modular_nova/modules/microfusion/code/phase_emitter.dm @@ -8,7 +8,7 @@ /obj/item/microfusion_phase_emitter name = "basic microfusion phase emitter" desc = "A first-generation phase emitter, this is the core of the weapon and the source of the beam." - icon = 'modular_skyrat/modules/microfusion/icons/microfusion_gun_attachments.dmi' + icon = 'modular_nova/modules/microfusion/icons/microfusion_gun_attachments.dmi' icon_state = "phase_emitter" base_icon_state = "phase_emitter" w_class = WEIGHT_CLASS_NORMAL @@ -169,7 +169,7 @@ /obj/item/microfusion_phase_emitter/proc/kill() damaged = TRUE name = "damaged [name]" - playsound(src, 'modular_skyrat/modules/microfusion/sound/overheat.ogg', 70) + playsound(src, 'modular_nova/modules/microfusion/sound/overheat.ogg', 70) say("ERROR: Integrity failure!") STOP_PROCESSING(SSobj, src) diff --git a/modular_nova/modules/microfusion/code/projectiles.dm b/modular_nova/modules/microfusion/code/projectiles.dm new file mode 100644 index 00000000000000..eb405a1becc87d --- /dev/null +++ b/modular_nova/modules/microfusion/code/projectiles.dm @@ -0,0 +1,101 @@ +/obj/item/ammo_casing + ///What volume should the sound play at? + var/fire_sound_volume = 50 + +/obj/item/ammo_casing/energy/laser/microfusion + name = "microfusion energy lens" + projectile_type = /obj/projectile/beam/laser/microfusion + e_cost = LASER_SHOTS(10, STANDARD_CELL_CHARGE) // 10 shots with a normal cell. + select_name = "laser" + fire_sound = 'modular_nova/modules/microfusion/sound/laser_1.ogg' + fire_sound_volume = 100 + +/obj/item/ammo_casing/proc/refresh_shot() + loaded_projectile = new projectile_type(src, src) + +/obj/projectile/beam/laser/microfusion + name = "microfusion laser" + icon = 'modular_nova/modules/microfusion/icons/projectiles.dmi' + damage = 25 + +/obj/projectile/beam/microfusion_disabler + name = "microfusion disabler laser" + icon = 'modular_nova/modules/microfusion/icons/projectiles.dmi' + icon_state = "disabler" + damage = 41 + damage_type = STAMINA + armor_flag = ENERGY + hitsound = 'sound/weapons/tap.ogg' + eyeblur = 0 + impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser + light_color = LIGHT_COLOR_BLUE + tracer_type = /obj/effect/projectile/tracer/disabler + muzzle_type = /obj/effect/projectile/muzzle/disabler + impact_type = /obj/effect/projectile/impact/disabler + +/obj/projectile/beam/laser/microfusion/superheated + name = "superheated microfusion laser" + icon_state = "laser_greyscale" + damage = 20 //Trading damage for fire stacks + color = LIGHT_COLOR_FIRE + light_color = LIGHT_COLOR_FIRE + +/obj/projectile/beam/laser/microfusion/superheated/on_hit(atom/target, blocked = 0, pierce_hit) + . = ..() + if(isliving(target)) + var/mob/living/living = target + living.adjust_fire_stacks(2) + living.ignite_mob() + +/obj/projectile/beam/laser/microfusion/hellfire + name = "hellfire microfusion laser" + icon_state = "laser_greyscale" + wound_bonus = 0 + damage = 20 // You are trading damage for a significant wound bonus and speed increase + speed = 0.6 + color = LIGHT_COLOR_FLARE + light_color = LIGHT_COLOR_FLARE + +/obj/projectile/beam/laser/microfusion/scatter + name = "scatter microfusion laser" + +/obj/projectile/beam/laser/microfusion/scatter/max + name = "scatter microfusion laser" + +/obj/projectile/beam/laser/microfusion/repeater + damage = 12.5 + +/obj/projectile/beam/laser/microfusion/penetrator + name = "focused microfusion laser" + damage = 20 + armour_penetration = 50 + +/obj/projectile/beam/laser/microfusion/lance + name = "lance microfusion laser" + damage = 50 // We're turning the gun into a heavylaser + tracer_type = /obj/effect/projectile/tracer/heavy_laser + muzzle_type = /obj/effect/projectile/muzzle/heavy_laser + impact_type = /obj/effect/projectile/impact/heavy_laser + speed = 0.4 + +/obj/projectile/beam/laser/microfusion/xray + name = "x-ray microfusion laser" + icon_state = "laser_greyscale" + color = COLOR_GREEN + light_color = COLOR_GREEN + projectile_piercing = PASSCLOSEDTURF|PASSGRILLE|PASSGLASS + +/obj/projectile/beam/laser/microfusion/honk + name = "funny microfusion laser" + icon_state = "laser_greyscale" + color = COLOR_VIVID_YELLOW + light_color = COLOR_VIVID_YELLOW + damage_type = STAMINA + damage = 25 + armor_flag = ENERGY + hitsound = 'sound/misc/slip.ogg' + impact_type = /obj/effect/projectile/impact/disabler + +/obj/projectile/beam/laser/microfusion/honk/Initialize(mapload) + . = ..() + AddComponent(/datum/component/slippery, 20) diff --git a/modular_skyrat/modules/microfusion/icons/guns_lefthand.dmi b/modular_nova/modules/microfusion/icons/guns_lefthand.dmi similarity index 100% rename from modular_skyrat/modules/microfusion/icons/guns_lefthand.dmi rename to modular_nova/modules/microfusion/icons/guns_lefthand.dmi diff --git a/modular_skyrat/modules/microfusion/icons/guns_righthand.dmi b/modular_nova/modules/microfusion/icons/guns_righthand.dmi similarity index 100% rename from modular_skyrat/modules/microfusion/icons/guns_righthand.dmi rename to modular_nova/modules/microfusion/icons/guns_righthand.dmi diff --git a/modular_skyrat/modules/microfusion/icons/microfusion_cells.dmi b/modular_nova/modules/microfusion/icons/microfusion_cells.dmi similarity index 100% rename from modular_skyrat/modules/microfusion/icons/microfusion_cells.dmi rename to modular_nova/modules/microfusion/icons/microfusion_cells.dmi diff --git a/modular_skyrat/modules/microfusion/icons/microfusion_gun40x32.dmi b/modular_nova/modules/microfusion/icons/microfusion_gun40x32.dmi similarity index 100% rename from modular_skyrat/modules/microfusion/icons/microfusion_gun40x32.dmi rename to modular_nova/modules/microfusion/icons/microfusion_gun40x32.dmi diff --git a/modular_skyrat/modules/microfusion/icons/microfusion_gun_attachments.dmi b/modular_nova/modules/microfusion/icons/microfusion_gun_attachments.dmi similarity index 100% rename from modular_skyrat/modules/microfusion/icons/microfusion_gun_attachments.dmi rename to modular_nova/modules/microfusion/icons/microfusion_gun_attachments.dmi diff --git a/modular_skyrat/modules/microfusion/icons/projectiles.dmi b/modular_nova/modules/microfusion/icons/projectiles.dmi similarity index 100% rename from modular_skyrat/modules/microfusion/icons/projectiles.dmi rename to modular_nova/modules/microfusion/icons/projectiles.dmi diff --git a/modular_skyrat/modules/microfusion/sound/burn.ogg b/modular_nova/modules/microfusion/sound/burn.ogg similarity index 100% rename from modular_skyrat/modules/microfusion/sound/burn.ogg rename to modular_nova/modules/microfusion/sound/burn.ogg diff --git a/modular_skyrat/modules/microfusion/sound/incinerate.ogg b/modular_nova/modules/microfusion/sound/incinerate.ogg similarity index 100% rename from modular_skyrat/modules/microfusion/sound/incinerate.ogg rename to modular_nova/modules/microfusion/sound/incinerate.ogg diff --git a/modular_skyrat/modules/microfusion/sound/laser_1.ogg b/modular_nova/modules/microfusion/sound/laser_1.ogg similarity index 100% rename from modular_skyrat/modules/microfusion/sound/laser_1.ogg rename to modular_nova/modules/microfusion/sound/laser_1.ogg diff --git a/modular_skyrat/modules/microfusion/sound/mag_insert.ogg b/modular_nova/modules/microfusion/sound/mag_insert.ogg similarity index 100% rename from modular_skyrat/modules/microfusion/sound/mag_insert.ogg rename to modular_nova/modules/microfusion/sound/mag_insert.ogg diff --git a/modular_skyrat/modules/microfusion/sound/melt.ogg b/modular_nova/modules/microfusion/sound/melt.ogg similarity index 100% rename from modular_skyrat/modules/microfusion/sound/melt.ogg rename to modular_nova/modules/microfusion/sound/melt.ogg diff --git a/modular_skyrat/modules/microfusion/sound/overheat.ogg b/modular_nova/modules/microfusion/sound/overheat.ogg similarity index 100% rename from modular_skyrat/modules/microfusion/sound/overheat.ogg rename to modular_nova/modules/microfusion/sound/overheat.ogg diff --git a/modular_skyrat/modules/microfusion/sound/vaporize.ogg b/modular_nova/modules/microfusion/sound/vaporize.ogg similarity index 100% rename from modular_skyrat/modules/microfusion/sound/vaporize.ogg rename to modular_nova/modules/microfusion/sound/vaporize.ogg diff --git a/modular_skyrat/modules/mining_vendor_additions/code/order_mining.dm b/modular_nova/modules/mining_vendor_additions/code/order_mining.dm similarity index 81% rename from modular_skyrat/modules/mining_vendor_additions/code/order_mining.dm rename to modular_nova/modules/mining_vendor_additions/code/order_mining.dm index e9b2485ba400ed..4827e593996b8f 100644 --- a/modular_skyrat/modules/mining_vendor_additions/code/order_mining.dm +++ b/modular_nova/modules/mining_vendor_additions/code/order_mining.dm @@ -17,12 +17,12 @@ RESKIN_INHAND_STATE = "crusher0", ), "Glaive" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/kinetic_glaive.dmi', + RESKIN_ICON = 'modular_nova/master_files/icons/obj/kinetic_glaive.dmi', RESKIN_ICON_STATE = "crusher-glaive", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi', RESKIN_WORN_ICON_STATE = "crusher-glaive", - RESKIN_INHAND_L = 'modular_skyrat/master_files/icons/mob/64x64_lefthand.dmi', - RESKIN_INHAND_R = 'modular_skyrat/master_files/icons/mob/64x64_righthand.dmi', + RESKIN_INHAND_L = 'modular_nova/master_files/icons/mob/64x64_lefthand.dmi', + RESKIN_INHAND_R = 'modular_nova/master_files/icons/mob/64x64_righthand.dmi', ), ) diff --git a/modular_skyrat/modules/modsuit_armour/modsuit_armour.dm b/modular_nova/modules/modsuit_armour/modsuit_armour.dm similarity index 98% rename from modular_skyrat/modules/modsuit_armour/modsuit_armour.dm rename to modular_nova/modules/modsuit_armour/modsuit_armour.dm index ae6a4b4dc45d9c..1e550239cb8b0a 100644 --- a/modular_skyrat/modules/modsuit_armour/modsuit_armour.dm +++ b/modular_nova/modules/modsuit_armour/modsuit_armour.dm @@ -166,7 +166,7 @@ acid = 25 wound = 5 -/datum/mod_theme/syndicate // Bloodred Syndicate +/datum/mod_theme/syndicate // Bloodred Symphionia armor_type = /datum/armor/mod_theme_syndicate /datum/armor/mod_theme_syndicate diff --git a/modular_skyrat/modules/modsuit_pai/code/mod_pai.dm b/modular_nova/modules/modsuit_pai/code/mod_pai.dm similarity index 100% rename from modular_skyrat/modules/modsuit_pai/code/mod_pai.dm rename to modular_nova/modules/modsuit_pai/code/mod_pai.dm diff --git a/modular_skyrat/modules/modular_ert/code/engineer/engineer.dm b/modular_nova/modules/modular_ert/code/engineer/engineer.dm similarity index 100% rename from modular_skyrat/modules/modular_ert/code/engineer/engineer.dm rename to modular_nova/modules/modular_ert/code/engineer/engineer.dm diff --git a/modular_skyrat/modules/modular_ert/code/fumigators/ert.dm b/modular_nova/modules/modular_ert/code/fumigators/ert.dm similarity index 100% rename from modular_skyrat/modules/modular_ert/code/fumigators/ert.dm rename to modular_nova/modules/modular_ert/code/fumigators/ert.dm diff --git a/modular_skyrat/modules/modular_ert/code/fumigators/fumigator.dm b/modular_nova/modules/modular_ert/code/fumigators/fumigator.dm similarity index 100% rename from modular_skyrat/modules/modular_ert/code/fumigators/fumigator.dm rename to modular_nova/modules/modular_ert/code/fumigators/fumigator.dm diff --git a/modular_skyrat/modules/modular_ert/code/fumigators/fumigator_outfit.dm b/modular_nova/modules/modular_ert/code/fumigators/fumigator_outfit.dm similarity index 100% rename from modular_skyrat/modules/modular_ert/code/fumigators/fumigator_outfit.dm rename to modular_nova/modules/modular_ert/code/fumigators/fumigator_outfit.dm diff --git a/modular_skyrat/modules/modular_ert/code/fumigators/head.dm b/modular_nova/modules/modular_ert/code/fumigators/head.dm similarity index 100% rename from modular_skyrat/modules/modular_ert/code/fumigators/head.dm rename to modular_nova/modules/modular_ert/code/fumigators/head.dm diff --git a/modular_skyrat/modules/modular_ert/code/marine_override/modified_equipment.dm b/modular_nova/modules/modular_ert/code/marine_override/modified_equipment.dm similarity index 100% rename from modular_skyrat/modules/modular_ert/code/marine_override/modified_equipment.dm rename to modular_nova/modules/modular_ert/code/marine_override/modified_equipment.dm diff --git a/modular_skyrat/modules/modular_ert/code/marine_override/modified_gear.dm b/modular_nova/modules/modular_ert/code/marine_override/modified_gear.dm similarity index 91% rename from modular_skyrat/modules/modular_ert/code/marine_override/modified_gear.dm rename to modular_nova/modules/modular_ert/code/marine_override/modified_gear.dm index 048f24ee35f9ff..f91bc840a45add 100644 --- a/modular_skyrat/modules/modular_ert/code/marine_override/modified_gear.dm +++ b/modular_nova/modules/modular_ert/code/marine_override/modified_gear.dm @@ -10,7 +10,7 @@ /obj/item/storage/box/survival/engineer/marine name = "military survival box" - desc = "A box issued to Nanotrasen space marines, containing field essentials. This one is labelled to contain an extended-capacity tank." + desc = "A box issued to Symphionia space marines, containing field essentials. This one is labelled to contain an extended-capacity tank." illustration = "extendedtank" internal_type = /obj/item/tank/internals/emergency_oxygen/engi diff --git a/modular_skyrat/modules/modular_ert/code/odst/ert.dm b/modular_nova/modules/modular_ert/code/odst/ert.dm similarity index 100% rename from modular_skyrat/modules/modular_ert/code/odst/ert.dm rename to modular_nova/modules/modular_ert/code/odst/ert.dm diff --git a/modular_skyrat/modules/modular_ert/code/odst/odst.dm b/modular_nova/modules/modular_ert/code/odst/odst.dm similarity index 100% rename from modular_skyrat/modules/modular_ert/code/odst/odst.dm rename to modular_nova/modules/modular_ert/code/odst/odst.dm diff --git a/modular_skyrat/modules/modular_ert/code/odst/odst_outfit.dm b/modular_nova/modules/modular_ert/code/odst/odst_outfit.dm similarity index 83% rename from modular_skyrat/modules/modular_ert/code/odst/odst_outfit.dm rename to modular_nova/modules/modular_ert/code/odst/odst_outfit.dm index 41f356151946de..a6a176f406f4ff 100644 --- a/modular_skyrat/modules/modular_ert/code/odst/odst_outfit.dm +++ b/modular_nova/modules/modular_ert/code/odst/odst_outfit.dm @@ -16,9 +16,9 @@ r_pocket = /obj/item/tank/internals/emergency_oxygen/double /obj/item/storage/backpack/ert/odst - icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi' icon_state = "ert_odst" - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi' worn_icon_state = "ert_odst" name = "odst backpack" desc = "A modified backpack that attaches via magnetic harness, removing the need for straps." @@ -26,8 +26,8 @@ w_class = WEIGHT_CLASS_BULKY /obj/item/storage/belt/military/odst - icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' name = "commando chest rig" desc = "A tactical plate carrier." icon_state = "ert_odst" diff --git a/modular_skyrat/modules/modular_ert/code/pizza/ert.dm b/modular_nova/modules/modular_ert/code/pizza/ert.dm similarity index 100% rename from modular_skyrat/modules/modular_ert/code/pizza/ert.dm rename to modular_nova/modules/modular_ert/code/pizza/ert.dm diff --git a/modular_skyrat/modules/modular_ert/code/pizza/ert_antag.dm b/modular_nova/modules/modular_ert/code/pizza/ert_antag.dm similarity index 100% rename from modular_skyrat/modules/modular_ert/code/pizza/ert_antag.dm rename to modular_nova/modules/modular_ert/code/pizza/ert_antag.dm diff --git a/modular_nova/modules/modular_ert/code/pizza/head.dm b/modular_nova/modules/modular_ert/code/pizza/head.dm new file mode 100644 index 00000000000000..51bcc0636ef08a --- /dev/null +++ b/modular_nova/modules/modular_ert/code/pizza/head.dm @@ -0,0 +1,6 @@ +/obj/item/clothing/head/pizza + name = "dogginos manager hat" + desc = "Looks like something a Sol general would wear." + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' + icon_state = "dominosleader" diff --git a/modular_nova/modules/modular_ert/code/pizza/misc_clothing.dm b/modular_nova/modules/modular_ert/code/pizza/misc_clothing.dm new file mode 100644 index 00000000000000..03833037feb69c --- /dev/null +++ b/modular_nova/modules/modular_ert/code/pizza/misc_clothing.dm @@ -0,0 +1,18 @@ +/obj/item/clothing/suit/toggle/jacket/hoodie/pizza + name = "dogginos hoodie" + desc = "A hoodie often worn by the delivery boys of this intergalactically known brand of pizza." + greyscale_colors = "#c40000" + +/obj/item/clothing/suit/pizzaleader + name = "dogginos manager coat" + desc = "A long, cool, flowing coat in a tasteless red colour." + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + icon_state = "forensics_red_long" + +/obj/item/clothing/under/pizza + name = "dogginos employee uniform" + desc = "The standard issue for the famous dog-founded pizza brand, Dogginos." + icon = 'modular_nova/master_files/icons/obj/clothing/under/centcom.dmi' //Dogginos is not technically affiliated with CC, but it's not OPPOSING it, and its an "ERT"... + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/centcom.dmi' + icon_state = "dominos" diff --git a/modular_skyrat/modules/modular_ert/code/pizza/pizza_outfit.dm b/modular_nova/modules/modular_ert/code/pizza/pizza_outfit.dm similarity index 95% rename from modular_skyrat/modules/modular_ert/code/pizza/pizza_outfit.dm rename to modular_nova/modules/modular_ert/code/pizza/pizza_outfit.dm index 0b055758e2db0f..f97a500191e430 100644 --- a/modular_skyrat/modules/modular_ert/code/pizza/pizza_outfit.dm +++ b/modular_nova/modules/modular_ert/code/pizza/pizza_outfit.dm @@ -2,7 +2,7 @@ name = "Pizza Delivery Boy" id = /obj/item/card/id/advanced/centcom/ert suit = /obj/item/clothing/suit/toggle/jacket/hoodie/pizza - glasses = /obj/item/clothing/glasses/betterunshit + glasses = /obj/item/clothing/glasses/regular/betterunshit head = /obj/item/clothing/head/soft/red mask = /obj/item/clothing/mask/fakemoustache/italian uniform = /obj/item/clothing/under/pizza diff --git a/modular_nova/modules/modular_ert/code/pizza/weaponry.dm b/modular_nova/modules/modular_ert/code/pizza/weaponry.dm new file mode 100644 index 00000000000000..59cf024ad11e01 --- /dev/null +++ b/modular_nova/modules/modular_ert/code/pizza/weaponry.dm @@ -0,0 +1,16 @@ +/obj/item/knife/hotknife + name = "thousand degree knife" + icon = 'modular_nova/modules/modular_ert/icons/pizza/hotknife.dmi' + icon_state = "hotknife" + inhand_icon_state = "hotknife" + desc = "Once known as Lightbringer, this sword has been demoted to a simple pizza cutting knife... It may still have its fire attack powers." + righthand_file = 'modular_nova/modules/modular_ert/icons/pizza/righthand.dmi' + lefthand_file = 'modular_nova/modules/modular_ert/icons/pizza/lefthand.dmi' + + /// How many fire stacks to apply on attack + var/fire_stacks = 4 + +/obj/item/knife/hotknife/attack(mob/living/victim, mob/living/attacker, params) + victim.adjust_fire_stacks(fire_stacks) + victim.ignite_mob() + return ..() diff --git a/modular_nova/modules/modular_ert/code/readme.md b/modular_nova/modules/modular_ert/code/readme.md new file mode 100644 index 00000000000000..2090e3aa04752a --- /dev/null +++ b/modular_nova/modules/modular_ert/code/readme.md @@ -0,0 +1,43 @@ +https://github.com/Skyrat-SS13/Skyrat-tg/pull/2946 & https://github.com/Skyrat-SS13/Skyrat-tg/pull/10662 for NTrauma +https://github.com/Skyrat-SS13/Skyrat-tg/pull/4781 for ODST +https://github.com/Skyrat-SS13/Skyrat-tg/pull/6440 for Fumigator and Engineer +https://github.com/Skyrat-SS13/Skyrat-tg/pull/5630 for Pizza + +## Title: Modular Emergency Response Teams + +MODULE ID: modular_ert + +### Description: + +- Use this module for any Skyrat-unique ERTs, including their outfits, unique equipment, and ERT datums! +- DO NOT PUT GENERAL-USE ITEMS IN HERE. ITEMS IN HERE SHOULD #ONLY# SHOW UP ON THEIR RELATED ERT. + +- (Using TG Outfits and Datums) Adds a simple Engi-Maintinence ERT of non-spaceproof, generic repair dudes. +- Adds a Fumigator ERT specialized in pest control. +- Adds a specialized orbital shok droop trooper ERT that allows for a quick security response via pod. +- Adds a Pizza Delivery "ERT" for... pizza delivery. +- Adds a specialized medical team ERT that allows for a better medical response. + +### TG Proc Changes: + +- N/A + +### Defines: + +- N/A + +### Master file additions + +- Most clothing icon files: +- modular_nova/master_files/icons/mob/clothing/xyz +- modular_nova/master_files/icons/obj/clothing/xyz + +### Included files that are not contained in this module: + +- N/A + +### Credits: + +- pinkblossom6 - Original Sprites and Code for NTrauma & ODST +- Orion_the_Fox - Updated Sprites and Code for NTrauma +- thestubborn - Engineer, Fumigator, and Pizza ERTs diff --git a/modular_skyrat/modules/modular_ert/code/trauma_team/ert.dm b/modular_nova/modules/modular_ert/code/trauma_team/ert.dm similarity index 100% rename from modular_skyrat/modules/modular_ert/code/trauma_team/ert.dm rename to modular_nova/modules/modular_ert/code/trauma_team/ert.dm diff --git a/modular_skyrat/modules/modular_ert/code/trauma_team/ert_antag.dm b/modular_nova/modules/modular_ert/code/trauma_team/ert_antag.dm similarity index 100% rename from modular_skyrat/modules/modular_ert/code/trauma_team/ert_antag.dm rename to modular_nova/modules/modular_ert/code/trauma_team/ert_antag.dm diff --git a/modular_skyrat/modules/modular_ert/code/trauma_team/trauma_team_outfit.dm b/modular_nova/modules/modular_ert/code/trauma_team/trauma_team_outfit.dm similarity index 89% rename from modular_skyrat/modules/modular_ert/code/trauma_team/trauma_team_outfit.dm rename to modular_nova/modules/modular_ert/code/trauma_team/trauma_team_outfit.dm index 23b65976985949..0282808ef91951 100644 --- a/modular_skyrat/modules/modular_ert/code/trauma_team/trauma_team_outfit.dm +++ b/modular_nova/modules/modular_ert/code/trauma_team/trauma_team_outfit.dm @@ -64,8 +64,8 @@ /obj/item/storage/belt/military/ntrauma name = "trauma chest rig" desc = "A set of tactical webbing worn by Trauma Response Teams." - icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' icon_state = "ert_ntrauma" worn_icon_state = "ert_ntrauma" @@ -93,8 +93,8 @@ /obj/item/clothing/gloves/latex/nitrile/ntrauma name = "trauma specialist gloves" desc = "A pair of nitrile-alternative gloves used by Trauma Team specialists, sealable to protect from pressure and with a unique (and expensive) acid-repellent coating to prevent damage handling chemical hazards. Wont protect the rest of your body, though." - icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi' icon_state = "ert_ntrauma" alternate_worn_layer = ABOVE_BODY_FRONT_LAYER //So the LONG gloves can be shown off resistance_flags = FIRE_PROOF | ACID_PROOF @@ -103,9 +103,9 @@ /obj/item/clothing/suit/space/ntrauma name = "trauma team softsuit" desc = "A lightweight, minimally armored, entirely sterile softsuit, used by Trauma Teams to operate in potentially hazardous environments of all sorts. It's coated in acid-repellent chemicals." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/spacesuit.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/spacesuit.dmi' - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits/spacesuit.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/spacesuit.dmi' + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi' icon_state = "ert_ntrauma" inhand_icon_state = "syndicate-blue" slowdown = 0.3 @@ -127,8 +127,8 @@ /obj/item/clothing/head/helmet/space/ntrauma name = "trauma team helmet" desc = "A faceless white helmet fit to seal with a softsuit, used by Trauma Teams to operate in potentially hazardous environments. It's coated in acid-repellent chemicals." - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/helmet.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/helmet.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/head/helmet.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/helmet.dmi' icon_state = "ert_ntrauma" resistance_flags = ACID_PROOF supports_variations_flags = NONE //Also good GOD I didnt want to re-sprite this helmet diff --git a/modular_skyrat/modules/modular_ert/icons/pizza/hotknife.dmi b/modular_nova/modules/modular_ert/icons/pizza/hotknife.dmi similarity index 100% rename from modular_skyrat/modules/modular_ert/icons/pizza/hotknife.dmi rename to modular_nova/modules/modular_ert/icons/pizza/hotknife.dmi diff --git a/modular_skyrat/modules/modular_ert/icons/pizza/lefthand.dmi b/modular_nova/modules/modular_ert/icons/pizza/lefthand.dmi similarity index 100% rename from modular_skyrat/modules/modular_ert/icons/pizza/lefthand.dmi rename to modular_nova/modules/modular_ert/icons/pizza/lefthand.dmi diff --git a/modular_skyrat/modules/modular_ert/icons/pizza/righthand.dmi b/modular_nova/modules/modular_ert/icons/pizza/righthand.dmi similarity index 100% rename from modular_skyrat/modules/modular_ert/icons/pizza/righthand.dmi rename to modular_nova/modules/modular_ert/icons/pizza/righthand.dmi diff --git a/modular_skyrat/modules/modular_implants/code/misc_devices.dm b/modular_nova/modules/modular_implants/code/misc_devices.dm similarity index 97% rename from modular_skyrat/modules/modular_implants/code/misc_devices.dm rename to modular_nova/modules/modular_implants/code/misc_devices.dm index 2582d06a95912f..12ffb77f337af4 100644 --- a/modular_skyrat/modules/modular_implants/code/misc_devices.dm +++ b/modular_nova/modules/modular_implants/code/misc_devices.dm @@ -5,7 +5,7 @@ special_desc = "Given the relatively recent and sudden proliferation of NIFs, their use in crime both petty and organized has skyrocketed in recent years. \ The existence of nanomachine-based real-time burst communication that cannot be effectively monitored or hacked into has given most PMCs cause enough for concern \ to invent their own devices. This one is a 'Wrangler' model NIF-Cutter, used for crudely wiping programs directly off a user's Framework." - icon = 'modular_skyrat/modules/modular_implants/icons/obj/devices.dmi' + icon = 'modular_nova/modules/modular_implants/icons/obj/devices.dmi' icon_state = "nifsoft_remover" ///Is a disk with the corresponding NIFSoft created when said NIFSoft is removed? @@ -69,7 +69,7 @@ Frameworks, complicated devices as they are, are normally locked at the firmware level to requiring specific 'approved' brands of repair paste or repair-docks. \ This hacked-kit has been developed by the Altspace Coven as a freeware alternative, spread far and wide throughout extra-Solarian space for quality of life \ for users located on the peripheries of society." - icon = 'modular_skyrat/modules/modular_implants/icons/obj/devices.dmi' + icon = 'modular_nova/modules/modular_implants/icons/obj/devices.dmi' icon_state = "repair_paste" w_class = WEIGHT_CLASS_SMALL ///How much does this repair each time it is used? @@ -102,7 +102,7 @@ /obj/item/nif_hud_adapter name = "Scrying Lens Adapter" desc = "A kit that modifies select glasses to display HUDs for NIFs" - icon = 'modular_skyrat/master_files/icons/donator/obj/kits.dmi' + icon = 'modular_nova/master_files/icons/donator/obj/kits.dmi' icon_state = "partskit" /// Can this item be used multiple times? If not, it will delete itself after being used. diff --git a/modular_skyrat/modules/modular_implants/code/nif_actions.dm b/modular_nova/modules/modular_implants/code/nif_actions.dm similarity index 81% rename from modular_skyrat/modules/modular_implants/code/nif_actions.dm rename to modular_nova/modules/modular_implants/code/nif_actions.dm index bc574f71ee1486..eda612f4fc3378 100644 --- a/modular_skyrat/modules/modular_implants/code/nif_actions.dm +++ b/modular_nova/modules/modular_implants/code/nif_actions.dm @@ -1,8 +1,8 @@ /// Action used to pull up the NIF menu /datum/action/item_action/nif - background_icon = 'modular_skyrat/master_files/icons/mob/actions/action_backgrounds.dmi' + background_icon = 'modular_nova/master_files/icons/mob/actions/action_backgrounds.dmi' background_icon_state = "android" - button_icon = 'modular_skyrat/master_files/icons/mob/actions/actions_nif.dmi' + button_icon = 'modular_nova/master_files/icons/mob/actions/actions_nif.dmi' check_flags = AB_CHECK_CONSCIOUS /datum/action/item_action/nif/open_menu diff --git a/modular_skyrat/modules/modular_implants/code/nif_implants.dm b/modular_nova/modules/modular_implants/code/nif_implants.dm similarity index 89% rename from modular_skyrat/modules/modular_implants/code/nif_implants.dm rename to modular_nova/modules/modular_implants/code/nif_implants.dm index a52cc75494c028..e8682c1f63a8d9 100644 --- a/modular_skyrat/modules/modular_implants/code/nif_implants.dm +++ b/modular_nova/modules/modular_implants/code/nif_implants.dm @@ -18,7 +18,7 @@ /obj/item/organ/internal/cyberimp/brain/nif/roleplay_model/cheap name = "Trial-Lite Type NIF" - desc = "'Trial-Lite' is a classification for temporary Nanite Implant Frameworks. These are typically distributed at promotional events, for the use of single-purpose NIFsofts, or at some Corporate dealerships to offer prospective users a look into the scene. Normally, Trial-Lite frameworks do not actually 'bond' with their user, forming an extremely loose connection before dissolving into scattered and dead nanomachines within a few hours, typically exhaled." + desc = "'Trial-Lite' is a classification for temporary Nanite Implant Frameworks. These are typically distributed at promotional events, for the use of single-purpose NIFsofts, or at some Conglomeration dealerships to offer prospective users a look into the scene. Normally, Trial-Lite frameworks do not actually 'bond' with their user, forming an extremely loose connection before dissolving into scattered and dead nanomachines within a few hours, typically exhaled." manufacturer_notes = "Normally, Trial-Lite frameworks do not actually 'bond' with their user, forming an extremely loose connection before dissolving into scattered and dead nanomachines within a few hours, typically exhaled. It's so far been impossible to extend the lifespan of a Trial-Lite NIF, owing to their far inferior construction and programming." nif_persistence = FALSE diff --git a/modular_skyrat/modules/modular_implants/code/nif_persistence.dm b/modular_nova/modules/modular_implants/code/nif_persistence.dm similarity index 97% rename from modular_skyrat/modules/modular_implants/code/nif_persistence.dm rename to modular_nova/modules/modular_implants/code/nif_persistence.dm index fd24fd3b5792e7..ce4d865f7cfe54 100644 --- a/modular_skyrat/modules/modular_implants/code/nif_persistence.dm +++ b/modular_nova/modules/modular_implants/code/nif_persistence.dm @@ -22,7 +22,7 @@ /mob/living/carbon/human/proc/save_nif_data(datum/modular_persistence/persistence, remove_nif = FALSE) var/obj/item/organ/internal/cyberimp/brain/nif/installed_nif = get_organ_by_type(/obj/item/organ/internal/cyberimp/brain/nif) - if(HAS_TRAIT(src, GHOSTROLE_TRAIT)) //Nothing is lost from playing a ghost role + if(HAS_TRAIT(src, TRAIT_GHOSTROLE)) //Nothing is lost from playing a ghost role return FALSE if(remove_nif) @@ -69,7 +69,7 @@ /// Loads the NIF data for an individual user. /mob/living/carbon/human/proc/load_nif_data(datum/modular_persistence/persistence) - if(HAS_TRAIT(src, GHOSTROLE_TRAIT)) + if(HAS_TRAIT(src, TRAIT_GHOSTROLE)) return FALSE if(!persistence.nif_path) diff --git a/modular_nova/modules/modular_implants/code/nif_research.dm b/modular_nova/modules/modular_implants/code/nif_research.dm new file mode 100644 index 00000000000000..3355a31e0ea5e8 --- /dev/null +++ b/modular_nova/modules/modular_implants/code/nif_research.dm @@ -0,0 +1,132 @@ +/datum/design/nifsoft_remover + name = "Lopland 'Wrangler' NIF-Cutter" + desc = "A small device that lets the user remove NIFSofts from a NIF user." + id = "nifsoft_remover" + build_type = PROTOLATHE | AWAY_LATHE + build_path = /obj/item/nifsoft_remover + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/uranium = HALF_SHEET_MATERIAL_AMOUNT, + ) + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_SECURITY, + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + +/datum/design/nifsoft_money_sense + name = "Automatic Appraisal NIFSoft" + desc = "A NIFSoft datadisk containing the Automatic Appraisal NIFsoft." + id = "nifsoft_money_sense" + build_type = PROTOLATHE | AWAY_LATHE + build_path = /obj/item/disk/nifsoft_uploader/money_sense + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plastic = SHEET_MATERIAL_AMOUNT, + ) + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_CARGO, + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO + +/datum/design/soulcatcher_device + name = "Evoker-Type RSD" + desc = "An RSD instrument that lets the user pull the consciousness from a body and store it virtually." + id = "soulcatcher_device" + build_type = PROTOLATHE | AWAY_LATHE + build_path = /obj/item/handheld_soulcatcher + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/silver = SHEET_MATERIAL_AMOUNT, + /datum/material/bluespace = SHEET_MATERIAL_AMOUNT, + ) + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_EQUIPMENT_MEDICAL, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/mini_soulcatcher + name = "Poltergeist-Type RSD" + desc = "A miniature version of a Soulcatcher that can be attached to various objects." + id = "mini_soulcatcher" + build_type = PROTOLATHE | AWAY_LATHE + build_path = /obj/item/attachable_soulcatcher + materials = list( + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + ) + category = list( + RND_CATEGORY_AI + RND_SUBCATEGORY_AI_MISC, + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_SERVICE | DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/nifsoft_hud + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plastic = SHEET_MATERIAL_AMOUNT, + ) + category = list( + RND_CATEGORY_EQUIPMENT, + ) + +/datum/design/nifsoft_hud/medical + name = "Medical HUD NIFSoft" + desc = "A NIFSoft datadisk containing the Medical HUD NIFsoft." + id = "nifsoft_hud_medical" + build_path = /obj/item/disk/nifsoft_uploader/med_hud + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/nifsoft_hud/security + name = "Security HUD NIFSoft" + desc = "A NIFSoft datadisk containing the Security HUD NIFsoft." + id = "nifsoft_hud_security" + build_path = /obj/item/disk/nifsoft_uploader/sec_hud + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + +/datum/design/nifsoft_hud/cargo + name = "Permit HUD NIFSoft" + desc = "A NIFSoft datadisk containing the Permit HUD NIFsoft." + id = "nifsoft_hud_cargo" + build_path = /obj/item/disk/nifsoft_uploader/permit_hud + departmental_flags = DEPARTMENT_BITFLAG_CARGO + +/datum/design/nifsoft_hud/diagnostic + name = "Diagnostic HUD NIFSoft" + desc = "A NIFSoft datadisk containing the Diagnostic HUD NIFsoft." + id = "nifsoft_hud_diagnostic" + build_path = /obj/item/disk/nifsoft_uploader/diag_hud + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/nifsoft_hud/science + name = "Science HUD NIFSoft" + desc = "A NIFSoft datadisk containing the Science HUD NIFsoft." + id = "nifsoft_hud_science" + build_path = /obj/item/disk/nifsoft_uploader/sci_hud + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_SERVICE | DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/nifsoft_hud/meson + name = "Meson HUD NIFSoft" + desc = "A NIFSoft datadisk containing the Meson HUD NIFsoft." + id = "nifsoft_hud_meson" + build_path = /obj/item/disk/nifsoft_uploader/meson_hud + departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design/nif_hud_kit + name = "NIF HUD Retrofitter" + desc = "A kit that modifies select glasses to display HUDs for NIFs." + id = "nifsoft_hud_kit" + build_type = PROTOLATHE | AWAY_LATHE + departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SERVICE | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SECURITY + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/plastic = SHEET_MATERIAL_AMOUNT, + ) + category = list( + RND_CATEGORY_EQUIPMENT, + ) + build_path = /obj/item/nif_hud_adapter + diff --git a/modular_skyrat/modules/modular_implants/code/nifs.dm b/modular_nova/modules/modular_implants/code/nifs.dm similarity index 96% rename from modular_skyrat/modules/modular_implants/code/nifs.dm rename to modular_nova/modules/modular_implants/code/nifs.dm index 12d9c67ad81d9a..35177c8c0cf8bd 100644 --- a/modular_skyrat/modules/modular_implants/code/nifs.dm +++ b/modular_nova/modules/modular_implants/code/nifs.dm @@ -15,7 +15,7 @@ /obj/item/organ/internal/cyberimp/brain/nif name = "Nanite Implant Framework" desc = "A brain implant that infuses the user with nanites." - icon = 'modular_skyrat/modules/modular_implants/icons/obj/nifs.dmi' + icon = 'modular_nova/modules/modular_implants/icons/obj/nifs.dmi' icon_state = "base_nif" w_class = WEIGHT_CLASS_NORMAL slot = ORGAN_SLOT_BRAIN_NIF @@ -99,12 +99,12 @@ //Appearance Variables ///This is the sound that plays when doing most things! - var/good_sound ='modular_skyrat/modules/modular_implants/sounds/default_good.ogg' + var/good_sound ='modular_nova/modules/modular_implants/sounds/default_good.ogg' ///This is the sound that plays if there is an issue going on. - var/bad_sound = 'modular_skyrat/modules/modular_implants/sounds/default_bad.ogg' + var/bad_sound = 'modular_nova/modules/modular_implants/sounds/default_bad.ogg' ///This is the sound that you would hear if you enable if you activate or enable something. - var/click_sound = 'modular_skyrat/modules/modular_implants/sounds/default_click.ogg' - ///What icon does the NIF display in chat when sending out alerts? Icon states are stored in 'modular_skyrat/modules/modular_implants/icons/chat.dmi' + var/click_sound = 'modular_nova/modules/modular_implants/sounds/default_click.ogg' + ///What icon does the NIF display in chat when sending out alerts? Icon states are stored in 'modular_nova/modules/modular_implants/icons/chat.dmi' var/chat_icon = "standard" /obj/item/organ/internal/cyberimp/brain/nif/Initialize(mapload) @@ -126,7 +126,7 @@ QDEL_LIST(loaded_nifsofts) return ..() -/obj/item/organ/internal/cyberimp/brain/nif/Insert(mob/living/carbon/human/insertee, special = FALSE, drop_if_replaced = TRUE) +/obj/item/organ/internal/cyberimp/brain/nif/Insert(mob/living/carbon/human/insertee, special = FALSE, movement_flags = DELETE_IF_REPLACED) . = ..() if(linked_mob && stored_ckey != insertee.ckey && theft_protection) @@ -185,7 +185,7 @@ /obj/item/organ/internal/cyberimp/brain/nif/process(seconds_per_tick) . = ..() - if(!linked_mob || broken || IS_IN_STASIS(linked_mob)) + if(!linked_mob || broken || HAS_TRAIT(linked_mob, TRAIT_STASIS)) return FALSE if(calibrating) @@ -456,7 +456,7 @@ RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(add_examine)) -/datum/component/nif_examine/Destroy(force, silent) +/datum/component/nif_examine/Destroy(force) UnregisterSignal(parent, COMSIG_MOB_EXAMINATE) return ..() @@ -483,7 +483,7 @@ /datum/asset/spritesheet/chat/create_spritesheets() . = ..() - InsertAll("nif", 'modular_skyrat/modules/modular_implants/icons/chat.dmi') + InsertAll("nif", 'modular_nova/modules/modular_implants/icons/chat.dmi') /obj/item/autosurgeon/organ/nif starting_organ = /obj/item/organ/internal/cyberimp/brain/nif/standard diff --git a/modular_skyrat/modules/modular_implants/code/nifs_tgui.dm b/modular_nova/modules/modular_implants/code/nifs_tgui.dm similarity index 100% rename from modular_skyrat/modules/modular_implants/code/nifs_tgui.dm rename to modular_nova/modules/modular_implants/code/nifs_tgui.dm diff --git a/modular_skyrat/modules/modular_implants/code/nifsoft_catalog.dm b/modular_nova/modules/modular_implants/code/nifsoft_catalog.dm similarity index 96% rename from modular_skyrat/modules/modular_implants/code/nifsoft_catalog.dm rename to modular_nova/modules/modular_implants/code/nifsoft_catalog.dm index 4cd6beea37955f..28ee5c0776f6b8 100644 --- a/modular_skyrat/modules/modular_implants/code/nifsoft_catalog.dm +++ b/modular_nova/modules/modular_implants/code/nifsoft_catalog.dm @@ -14,11 +14,12 @@ GLOBAL_LIST_INIT(purchasable_nifsofts, list( filename = "nifsoftcatalog" filedesc = "NIFSoft Catalog" extended_desc = "A virtual storefront that allows the user to install NIFSofts and purchase various NIF related products" - category = PROGRAM_CATEGORY_MISC + downloader_category = PROGRAM_CATEGORY_DEVICE size = 3 tgui_id = "NtosNifsoftCatalog" program_icon = "bag-shopping" - usage_flags = PROGRAM_TABLET + can_run_on_flags = PROGRAM_PDA + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET ///What bank account is money being drawn out of? var/datum/bank_account/paying_account ///What NIF are the NIFSofts being sent to? diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts.dm b/modular_nova/modules/modular_implants/code/nifsofts.dm similarity index 99% rename from modular_skyrat/modules/modular_implants/code/nifsofts.dm rename to modular_nova/modules/modular_implants/code/nifsofts.dm index ddbff9cf86e6d6..3e597289fa0871 100644 --- a/modular_skyrat/modules/modular_implants/code/nifsofts.dm +++ b/modular_nova/modules/modular_implants/code/nifsofts.dm @@ -164,7 +164,7 @@ /obj/item/disk/nifsoft_uploader name = "Generic NIFSoft datadisk" desc = "A datadisk that can be used to upload a loaded NIFSoft to the user's NIF" - icon = 'modular_skyrat/modules/modular_implants/icons/obj/disks.dmi' + icon = 'modular_nova/modules/modular_implants/icons/obj/disks.dmi' icon_state = "base_disk" ///What NIFSoft is currently loaded in? var/datum/nifsoft/loaded_nifsoft = /datum/nifsoft diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/base_types/action_granter.dm b/modular_nova/modules/modular_implants/code/nifsofts/base_types/action_granter.dm similarity index 92% rename from modular_skyrat/modules/modular_implants/code/nifsofts/base_types/action_granter.dm rename to modular_nova/modules/modular_implants/code/nifsofts/base_types/action_granter.dm index f43b6d1d058c58..64a941f0936300 100644 --- a/modular_skyrat/modules/modular_implants/code/nifsofts/base_types/action_granter.dm +++ b/modular_nova/modules/modular_implants/code/nifsofts/base_types/action_granter.dm @@ -11,7 +11,7 @@ /datum/nifsoft/action_granter/activate() . = ..() if(active) - granted_action = new action_to_grant + granted_action = new action_to_grant(linked_mob) granted_action.Grant(linked_mob) return diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/book_summoner.dm b/modular_nova/modules/modular_implants/code/nifsofts/book_summoner.dm similarity index 100% rename from modular_skyrat/modules/modular_implants/code/nifsofts/book_summoner.dm rename to modular_nova/modules/modular_implants/code/nifsofts/book_summoner.dm diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/dorms.dm b/modular_nova/modules/modular_implants/code/nifsofts/dorms.dm similarity index 100% rename from modular_skyrat/modules/modular_implants/code/nifsofts/dorms.dm rename to modular_nova/modules/modular_implants/code/nifsofts/dorms.dm diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/hivemind.dm b/modular_nova/modules/modular_implants/code/nifsofts/hivemind.dm similarity index 96% rename from modular_skyrat/modules/modular_implants/code/nifsofts/hivemind.dm rename to modular_nova/modules/modular_implants/code/nifsofts/hivemind.dm index 7f722dcb343a1b..bcc84ebf3e3d4e 100644 --- a/modular_skyrat/modules/modular_implants/code/nifsofts/hivemind.dm +++ b/modular_nova/modules/modular_implants/code/nifsofts/hivemind.dm @@ -34,7 +34,7 @@ GLOBAL_LIST_EMPTY(hivemind_users) linker_action_path = /datum/action/innate/hivemind_config, \ ) - keyboard_action = new + keyboard_action = new(linked_mob) keyboard_action.Grant(linked_mob) active_network = user_network @@ -83,9 +83,9 @@ GLOBAL_LIST_EMPTY(hivemind_users) /datum/action/innate/hivemind_config name = "Hivemind Configuration Settings" - background_icon = 'modular_skyrat/master_files/icons/mob/actions/action_backgrounds.dmi' + background_icon = 'modular_nova/master_files/icons/mob/actions/action_backgrounds.dmi' background_icon_state = "android" - button_icon = 'modular_skyrat/master_files/icons/mob/actions/actions_nif.dmi' + button_icon = 'modular_nova/master_files/icons/mob/actions/actions_nif.dmi' button_icon_state = "phone_settings" /datum/action/innate/hivemind_config/Activate() @@ -160,9 +160,9 @@ GLOBAL_LIST_EMPTY(hivemind_users) /datum/action/innate/hivemind_keyboard name = "Hivemind Keyboard" - background_icon = 'modular_skyrat/master_files/icons/mob/actions/action_backgrounds.dmi' + background_icon = 'modular_nova/master_files/icons/mob/actions/action_backgrounds.dmi' background_icon_state = "android" - button_icon = 'modular_skyrat/master_files/icons/mob/actions/actions_nif.dmi' + button_icon = 'modular_nova/master_files/icons/mob/actions/actions_nif.dmi' button_icon_state = "phone" /datum/action/innate/hivemind_keyboard/Activate() @@ -256,7 +256,7 @@ GLOBAL_LIST_EMPTY(hivemind_users) /obj/item/hivemind_keyboard name = "Hivemind Interface Device" desc = "A holographic gesture controller, hooked to hand and finger signals of the user's own choice. This is paired with the Hivemind program itself, used as a means of filtering out unwanted thoughts from being added to the network, ensuring that only intentional thoughts of communication can go through." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/remote.dmi' icon_state = "gangtool-purple" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/huds.dm b/modular_nova/modules/modular_implants/code/nifsofts/huds.dm similarity index 90% rename from modular_skyrat/modules/modular_implants/code/nifsofts/huds.dm rename to modular_nova/modules/modular_implants/code/nifsofts/huds.dm index 77353910752010..6b222e4399ae96 100644 --- a/modular_skyrat/modules/modular_implants/code/nifsofts/huds.dm +++ b/modular_nova/modules/modular_implants/code/nifsofts/huds.dm @@ -1,6 +1,6 @@ /datum/nifsoft/hud name = "Scrying Lens" - program_desc = "An umbrella term for all sorts of NIFsofts dealing with heads-up displays, this sort of technology dates back almost to the beginning of NIFsoft development. These 'softs are commonly used in the civilian field for integration with all sorts of activities; piloting, swordplay, scientific research, or even AI copiloting for important social interactions. While normally the nanomachines involved in the program's operation are used as a sort of artificial contact lens over the user's visual organs, NanoTrasen regulations have bid these particular forks to instead integrate with glasses the user's already wearing." + program_desc = "An umbrella term for all sorts of NIFsofts dealing with heads-up displays, this sort of technology dates back almost to the beginning of NIFsoft development. These 'softs are commonly used in the civilian field for integration with all sorts of activities; piloting, swordplay, scientific research, or even AI copiloting for important social interactions. While normally the nanomachines involved in the program's operation are used as a sort of artificial contact lens over the user's visual organs, Symphionia regulations have bid these particular forks to instead integrate with glasses the user's already wearing." compatible_nifs = list(/obj/item/organ/internal/cyberimp/brain/nif/standard) active_mode = TRUE active_cost = 0.5 @@ -9,8 +9,8 @@ var/eyewear_check = TRUE /// What kind of HUD are we adding when the NIFSoft is activated? var/hud_type - /// What is the HUD trait we are adding when the NIFSoft is activated? - var/hud_trait + /// What are the HUD traits we are adding when the NIFSoft is activated? + var/list/hud_traits /// A list of traits that we want to add while the NIFSoft is active. This is here to emulate things like sci-goggles var/list/added_eyewear_traits = list() @@ -20,11 +20,11 @@ var/datum/atom_hud/our_hud = GLOB.huds[hud_type] our_hud.show_to(linked_mob) - if(hud_trait) - ADD_TRAIT(linked_mob, hud_trait, GLASSES_TRAIT) + for(var/trait in hud_traits) + ADD_TRAIT(linked_mob, trait, GLASSES_TRAIT) for(var/trait as anything in added_eyewear_traits) - ADD_TRAIT(linked_mob, trait, NIFSOFT_TRAIT) + ADD_TRAIT(linked_mob, trait, TRAIT_NIFSOFT) linked_mob.update_sight() @@ -34,11 +34,11 @@ var/datum/atom_hud/hud = GLOB.huds[hud_type] hud.hide_from(linked_mob) - if(hud_trait) - REMOVE_TRAIT(linked_mob, hud_trait, NIFSOFT_TRAIT) + for(var/trait in hud_traits) + REMOVE_TRAIT(linked_mob, trait, TRAIT_NIFSOFT) for(var/trait in added_eyewear_traits) - REMOVE_TRAIT(linked_mob, trait, NIFSOFT_TRAIT) + REMOVE_TRAIT(linked_mob, trait, TRAIT_NIFSOFT) linked_mob.update_sight() return TRUE @@ -100,19 +100,19 @@ name = "Medical Scrying Lens" ui_icon = "staff-snake" hud_type = DATA_HUD_MEDICAL_ADVANCED - hud_trait = TRAIT_MEDICAL_HUD + hud_traits = list(TRAIT_MEDICAL_HUD) /datum/nifsoft/hud/job/diagnostic name = "Diagnostic Scrying Lens" ui_icon = "robot" hud_type = DATA_HUD_DIAGNOSTIC_BASIC - hud_trait = TRAIT_DIAGNOSTIC_HUD + hud_traits = list(TRAIT_DIAGNOSTIC_HUD) /datum/nifsoft/hud/job/security name = "Security Scrying Lens" ui_icon = "shield" hud_type = DATA_HUD_SECURITY_ADVANCED - hud_trait = TRAIT_SECURITY_HUD + hud_traits = list(TRAIT_SECURITY_HUD) /datum/nifsoft/hud/job/cargo_tech name = "Permit Scrying Lens" diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/hypnosis.dm b/modular_nova/modules/modular_implants/code/nifsofts/hypnosis.dm similarity index 95% rename from modular_skyrat/modules/modular_implants/code/nifsofts/hypnosis.dm rename to modular_nova/modules/modular_implants/code/nifsofts/hypnosis.dm index be88ad77cd8345..2b49164bff6e81 100644 --- a/modular_skyrat/modules/modular_implants/code/nifsofts/hypnosis.dm +++ b/modular_nova/modules/modular_implants/code/nifsofts/hypnosis.dm @@ -15,9 +15,9 @@ /datum/action/innate/nif_hypnotize name = "Hypnotize" - background_icon = 'modular_skyrat/master_files/icons/mob/actions/action_backgrounds.dmi' + background_icon = 'modular_nova/master_files/icons/mob/actions/action_backgrounds.dmi' background_icon_state = "android" - button_icon = 'modular_skyrat/master_files/icons/mob/actions/actions_nif.dmi' + button_icon = 'modular_nova/master_files/icons/mob/actions/actions_nif.dmi' button_icon_state = "hypnotize" /datum/action/innate/nif_hypnotize/Activate() diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/money_sense.dm b/modular_nova/modules/modular_implants/code/nifsofts/money_sense.dm similarity index 97% rename from modular_skyrat/modules/modular_implants/code/nifsofts/money_sense.dm rename to modular_nova/modules/modular_implants/code/nifsofts/money_sense.dm index 668c9328135a99..166f64b98467c9 100644 --- a/modular_skyrat/modules/modular_implants/code/nifsofts/money_sense.dm +++ b/modular_nova/modules/modular_implants/code/nifsofts/money_sense.dm @@ -31,7 +31,7 @@ RegisterSignal(parent, COMSIG_MOB_EXAMINATE, PROC_REF(add_examine)) -/datum/component/money_sense/Destroy(force, silent) +/datum/component/money_sense/Destroy(force) . = ..() UnregisterSignal(parent, COMSIG_MOB_EXAMINATE) diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/prop_summoner.dm b/modular_nova/modules/modular_implants/code/nifsofts/prop_summoner.dm similarity index 98% rename from modular_skyrat/modules/modular_implants/code/nifsofts/prop_summoner.dm rename to modular_nova/modules/modular_implants/code/nifsofts/prop_summoner.dm index aab1cc52b7a910..868ca3f7151085 100644 --- a/modular_skyrat/modules/modular_implants/code/nifsofts/prop_summoner.dm +++ b/modular_nova/modules/modular_implants/code/nifsofts/prop_summoner.dm @@ -11,7 +11,7 @@ /datum/nifsoft/summoner name = "Grimoire Caeruleam" - program_desc = "The Grimoire Caeruleam is an open-source, virtual decentralized directory of summonable objects originally developed by the Altspace Coven, a post-pagan group of witches first digitized into engrams in the year 2544. These summonable constructs, or 'Icons,' are comprised of delicate patterns of nanomachines serving as a framework and projector for hardlight; the name 'Caeruleam' referencing the blue light an Icon casts in the summoner's hand. While the Grimoire has served thousands thus far, Corporate interests have blocked all access to Icons capable of harming their assets." + program_desc = "The Grimoire Caeruleam is an open-source, virtual decentralized directory of summonable objects originally developed by the Altspace Coven, a post-pagan group of witches first digitized into engrams in the year 2544. These summonable constructs, or 'Icons,' are comprised of delicate patterns of nanomachines serving as a framework and projector for hardlight; the name 'Caeruleam' referencing the blue light an Icon casts in the summoner's hand. While the Grimoire has served thousands thus far, Conglomeration interests have blocked all access to Icons capable of harming their assets." cooldown = TRUE activation_cost = 100 // Around 1/10th the energy of a standard NIF buying_category = NIFSOFT_CATEGORY_FUN @@ -145,7 +145,7 @@ single_card.add_atom_colour("#acccff",FIXED_COLOUR_PRIORITY) sub_items += single_card -/datum/component/summoned_item/Destroy(force, silent) +/datum/component/summoned_item/Destroy(force) for(var/obj/item in sub_items) sub_items -= item qdel(item) diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/scryer.dm b/modular_nova/modules/modular_implants/code/nifsofts/scryer.dm similarity index 100% rename from modular_skyrat/modules/modular_implants/code/nifsofts/scryer.dm rename to modular_nova/modules/modular_implants/code/nifsofts/scryer.dm diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/shapeshifter.dm b/modular_nova/modules/modular_implants/code/nifsofts/shapeshifter.dm similarity index 77% rename from modular_skyrat/modules/modular_implants/code/nifsofts/shapeshifter.dm rename to modular_nova/modules/modular_implants/code/nifsofts/shapeshifter.dm index 113ea015e76ecf..7aa1819e4a2553 100644 --- a/modular_skyrat/modules/modular_implants/code/nifsofts/shapeshifter.dm +++ b/modular_nova/modules/modular_implants/code/nifsofts/shapeshifter.dm @@ -16,9 +16,9 @@ /datum/action/innate/alter_form/nif name = "Polymorph" slime_restricted = FALSE - background_icon = 'modular_skyrat/master_files/icons/mob/actions/action_backgrounds.dmi' + background_icon = 'modular_nova/master_files/icons/mob/actions/action_backgrounds.dmi' background_icon_state = "android" - button_icon = 'modular_skyrat/master_files/icons/mob/actions/actions_nif.dmi' + button_icon = 'modular_nova/master_files/icons/mob/actions/actions_nif.dmi' button_icon_state = "slime" shapeshift_text = "closes their eyes to focus, their body subtly shifting and contorting." @@ -27,9 +27,9 @@ alterer, alterer, list( - "DNA" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "dna"), - "Hair" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "scissors"), - "Markings" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "rainbow_spraycan"), + "DNA" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "dna"), + "Hair" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "scissors"), + "Markings" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "rainbow_spraycan"), ), tooltips = TRUE, ) diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/soul_poem.dm b/modular_nova/modules/modular_implants/code/nifsofts/soul_poem.dm similarity index 100% rename from modular_skyrat/modules/modular_implants/code/nifsofts/soul_poem.dm rename to modular_nova/modules/modular_implants/code/nifsofts/soul_poem.dm diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/soulcatcher.dm b/modular_nova/modules/modular_implants/code/nifsofts/soulcatcher.dm similarity index 97% rename from modular_skyrat/modules/modular_implants/code/nifsofts/soulcatcher.dm rename to modular_nova/modules/modular_implants/code/nifsofts/soulcatcher.dm index 5b03931941a617..2d5b4767b0c3d9 100644 --- a/modular_skyrat/modules/modular_implants/code/nifsofts/soulcatcher.dm +++ b/modular_nova/modules/modular_implants/code/nifsofts/soulcatcher.dm @@ -21,7 +21,7 @@ /datum/nifsoft/soulcatcher/New() . = ..() - soulcatcher_action = new + soulcatcher_action = new(linked_mob) soulcatcher_action.Grant(linked_mob) soulcatcher_action.parent_nifsoft = WEAKREF(src) @@ -115,9 +115,9 @@ /datum/action/innate/soulcatcher name = "Soulcatcher" - background_icon = 'modular_skyrat/master_files/icons/mob/actions/action_backgrounds.dmi' + background_icon = 'modular_nova/master_files/icons/mob/actions/action_backgrounds.dmi' background_icon_state = "android" - button_icon = 'modular_skyrat/master_files/icons/mob/actions/actions_nif.dmi' + button_icon = 'modular_nova/master_files/icons/mob/actions/actions_nif.dmi' button_icon_state = "soulcatcher" /// The weakref of the parent NIFSoft we belong to. var/datum/weakref/parent_nifsoft diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/attachable_soulcatcher.dm b/modular_nova/modules/modular_implants/code/soulcatcher/attachable_soulcatcher.dm similarity index 98% rename from modular_skyrat/modules/modular_implants/code/soulcatcher/attachable_soulcatcher.dm rename to modular_nova/modules/modular_implants/code/soulcatcher/attachable_soulcatcher.dm index cd84179e083898..901f63f1dc917d 100644 --- a/modular_skyrat/modules/modular_implants/code/soulcatcher/attachable_soulcatcher.dm +++ b/modular_nova/modules/modular_implants/code/soulcatcher/attachable_soulcatcher.dm @@ -56,7 +56,7 @@ /obj/item/attachable_soulcatcher name = "Poltergeist-Type RSD" desc = "This device, a polymorphic nanomachine net, wraps around objects of most sizes and allows them to function as a container for Resonance. The soul in question within the vessel is imbued much like it would be in a body or a normal Soulcatcher, perceiving the world and even speaking out of their new form. The nanomachine net of the device allows for the consciousness to somewhat manipulate their container, but any large-scale movement is out of the question." - icon = 'modular_skyrat/modules/modular_implants/icons/obj/devices.dmi' + icon = 'modular_nova/modules/modular_implants/icons/obj/devices.dmi' icon_state = "attachable-soulcatcher" w_class = WEIGHT_CLASS_SMALL /// Do we want to destory the item once it is attached to an item? diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/handheld_soulcatcher.dm b/modular_nova/modules/modular_implants/code/soulcatcher/handheld_soulcatcher.dm similarity index 95% rename from modular_skyrat/modules/modular_implants/code/soulcatcher/handheld_soulcatcher.dm rename to modular_nova/modules/modular_implants/code/soulcatcher/handheld_soulcatcher.dm index 767f396057e6f0..479d91da943f29 100644 --- a/modular_skyrat/modules/modular_implants/code/soulcatcher/handheld_soulcatcher.dm +++ b/modular_nova/modules/modular_implants/code/soulcatcher/handheld_soulcatcher.dm @@ -3,7 +3,7 @@ /obj/item/handheld_soulcatcher name = "\improper Evoker-type RSD" desc = "The Evoker-Type Resonance Simulation Device is a sort of 'Soulcatcher' instrument that's been designated for handheld usage. These RSDs were designed with the Medical field in mind, a tool meant to offer comfort to the temporarily-departed while their bodies are being repaired, healed, or produced. The Evoker is essentially a very specialized handheld NIF, still using the same nanomachinery for the software and hardware. This careful instrument is able to host a virtual space for a great number of Engrams for an essentially indefinite amount of time in an unlimited variety of simulations, even able to transfer them to and from a NIF. However, it's best Medical practice to not lollygag." - icon = 'modular_skyrat/modules/modular_implants/icons/obj/devices.dmi' + icon = 'modular_nova/modules/modular_implants/icons/obj/devices.dmi' icon_state = "soulcatcher-device" inhand_icon_state = "electronic" worn_icon_state = "electronic" @@ -98,7 +98,7 @@ return FALSE target_room.add_soul(target_mob.mind, TRUE) - playsound(src, 'modular_skyrat/modules/modular_implants/sounds/default_good.ogg', 50, FALSE, ignore_walls = FALSE) + playsound(src, 'modular_nova/modules/modular_implants/sounds/default_good.ogg', 50, FALSE, ignore_walls = FALSE) visible_message(span_notice("[src] beeps: [target_mob]'s mind transfer is now complete.")) if(!target_mob.GetComponent(/datum/component/previous_body)) @@ -152,7 +152,7 @@ SEND_SIGNAL(old_body, COMSIG_SOULCATCHER_CHECK_SOUL, FALSE) chosen_soul.mind.transfer_to(target_mob, TRUE) - playsound(src, 'modular_skyrat/modules/modular_implants/sounds/default_good.ogg', 50, FALSE, ignore_walls = FALSE) + playsound(src, 'modular_nova/modules/modular_implants/sounds/default_good.ogg', 50, FALSE, ignore_walls = FALSE) visible_message(span_notice("[src] beeps: Body transfer complete.")) log_admin("[src] was used by [user] to transfer [chosen_soul]'s soulcatcher soul to [target_mob].") diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_body_component.dm b/modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_body_component.dm similarity index 97% rename from modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_body_component.dm rename to modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_body_component.dm index 241991b61f80a0..938558609fbe7f 100644 --- a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_body_component.dm +++ b/modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_body_component.dm @@ -45,7 +45,7 @@ return TRUE /// Attempts to destroy the component. If `restore_mind` is true, it will attempt to place the mind back inside of the body and delete the soulcatcher soul. -/datum/component/previous_body/Destroy(force, silent) +/datum/component/previous_body/Destroy(force) UnregisterSignal(parent, COMSIG_SOULCATCHER_CHECK_SOUL) UnregisterSignal(parent, COMSIG_SOULCATCHER_SCAN_BODY) diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm b/modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm similarity index 97% rename from modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm rename to modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm index 9046e31ecab984..0baeaf603db41b 100644 --- a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm +++ b/modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm @@ -49,7 +49,7 @@ GLOBAL_LIST_EMPTY(soulcatchers) /mob/living/proc/soulcatcher_emote, )) -/datum/component/soulcatcher/Destroy(force, ...) +/datum/component/soulcatcher/Destroy(force) GLOB.soulcatchers -= src targeted_soulcatcher_room = null @@ -139,7 +139,7 @@ GLOBAL_LIST_EMPTY(soulcatchers) if(istype(parent, /obj/item/handheld_soulcatcher)) var/obj/item/handheld_soulcatcher/parent_device = parent - playsound(parent_device, 'modular_skyrat/modules/modular_implants/sounds/default_good.ogg', 50, FALSE, ignore_walls = FALSE) + playsound(parent_device, 'modular_nova/modules/modular_implants/sounds/default_good.ogg', 50, FALSE, ignore_walls = FALSE) parent_device.visible_message(span_notice("[parent_device] beeps: [parent_body] is now scanned.")) return TRUE @@ -364,7 +364,7 @@ GLOBAL_LIST_EMPTY(soulcatchers) recepient_soulcatcher.recieve_message(message) return TRUE -/datum/soulcatcher_room/Destroy(force, ...) +/datum/soulcatcher_room/Destroy(force) for(var/mob/living/soulcatcher_soul/soul as anything in current_souls) remove_soul(soul) @@ -372,9 +372,9 @@ GLOBAL_LIST_EMPTY(soulcatchers) /datum/action/innate/join_soulcatcher name = "Enter Soulcatcher" - background_icon = 'modular_skyrat/master_files/icons/mob/actions/action_backgrounds.dmi' + background_icon = 'modular_nova/master_files/icons/mob/actions/action_backgrounds.dmi' background_icon_state = "android" - button_icon = 'modular_skyrat/master_files/icons/mob/actions/actions_nif.dmi' + button_icon = 'modular_nova/master_files/icons/mob/actions/actions_nif.dmi' button_icon_state = "soulcatcher_enter" /datum/action/innate/join_soulcatcher/Activate() @@ -466,5 +466,5 @@ GLOBAL_LIST_EMPTY(soulcatchers) if(locate(/datum/action/innate/join_soulcatcher) in actions) return - var/datum/action/innate/join_soulcatcher/new_join_action = new + var/datum/action/innate/join_soulcatcher/new_join_action = new(src) new_join_action.Grant(src) diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_mob.dm b/modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_mob.dm similarity index 94% rename from modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_mob.dm rename to modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_mob.dm index 8ae004b9667706..94a4601e94d9e6 100644 --- a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_mob.dm +++ b/modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_mob.dm @@ -45,10 +45,10 @@ if(!outside_hearing) ADD_TRAIT(src, TRAIT_DEAF, INNATE_TRAIT) - var/datum/action/innate/leave_soulcatcher/leave_action = new + var/datum/action/innate/leave_soulcatcher/leave_action = new(src) leave_action.Grant(src) - var/datum/action/innate/soulcatcher_user/soulcatcher_action = new + var/datum/action/innate/soulcatcher_user/soulcatcher_action = new(src) soulcatcher_action.Grant(src) var/datum/component/soulcatcher_user/user_component = AddComponent(/datum/component/soulcatcher_user) soulcatcher_action.soulcatcher_user_component = WEAKREF(user_component) @@ -194,9 +194,9 @@ /datum/action/innate/leave_soulcatcher name = "Leave Soulcatcher" - background_icon = 'modular_skyrat/master_files/icons/mob/actions/action_backgrounds.dmi' + background_icon = 'modular_nova/master_files/icons/mob/actions/action_backgrounds.dmi' background_icon_state = "android" - button_icon = 'modular_skyrat/master_files/icons/mob/actions/actions_nif.dmi' + button_icon = 'modular_nova/master_files/icons/mob/actions/actions_nif.dmi' button_icon_state = "soulcatcher_exit" /datum/action/innate/leave_soulcatcher/Activate() @@ -209,9 +209,9 @@ /datum/action/innate/soulcatcher_user name = "Soulcatcher" - background_icon = 'modular_skyrat/master_files/icons/mob/actions/action_backgrounds.dmi' + background_icon = 'modular_nova/master_files/icons/mob/actions/action_backgrounds.dmi' background_icon_state = "android" - button_icon = 'modular_skyrat/master_files/icons/mob/actions/actions_nif.dmi' + button_icon = 'modular_nova/master_files/icons/mob/actions/actions_nif.dmi' button_icon_state = "soulcatcher" /// What soulcatcher user component are we bringing up the menu for? var/datum/weakref/soulcatcher_user_component diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_tgui.dm b/modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_tgui.dm similarity index 99% rename from modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_tgui.dm rename to modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_tgui.dm index 5dbd31631ec311..6233f906fb342a 100644 --- a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_tgui.dm +++ b/modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_tgui.dm @@ -126,7 +126,7 @@ return TRUE if("modify_name") - var/new_name = tgui_input_text(usr,"Choose a new name to send messages as", name, target_room.room_description, multiline = TRUE) + var/new_name = tgui_input_text(usr,"Choose a new name to send messages as", name, target_room.outside_voice, multiline = TRUE) if(!new_name) return FALSE diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_verbs.dm b/modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_verbs.dm similarity index 100% rename from modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_verbs.dm rename to modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_verbs.dm diff --git a/modular_skyrat/modules/modular_implants/icons/chat.dmi b/modular_nova/modules/modular_implants/icons/chat.dmi similarity index 100% rename from modular_skyrat/modules/modular_implants/icons/chat.dmi rename to modular_nova/modules/modular_implants/icons/chat.dmi diff --git a/modular_skyrat/modules/modular_implants/icons/obj/devices.dmi b/modular_nova/modules/modular_implants/icons/obj/devices.dmi similarity index 100% rename from modular_skyrat/modules/modular_implants/icons/obj/devices.dmi rename to modular_nova/modules/modular_implants/icons/obj/devices.dmi diff --git a/modular_skyrat/modules/modular_implants/icons/obj/disks.dmi b/modular_nova/modules/modular_implants/icons/obj/disks.dmi similarity index 100% rename from modular_skyrat/modules/modular_implants/icons/obj/disks.dmi rename to modular_nova/modules/modular_implants/icons/obj/disks.dmi diff --git a/modular_skyrat/modules/modular_implants/icons/obj/machines/vendors.dmi b/modular_nova/modules/modular_implants/icons/obj/machines/vendors.dmi similarity index 100% rename from modular_skyrat/modules/modular_implants/icons/obj/machines/vendors.dmi rename to modular_nova/modules/modular_implants/icons/obj/machines/vendors.dmi diff --git a/modular_skyrat/modules/modular_implants/icons/obj/nifs.dmi b/modular_nova/modules/modular_implants/icons/obj/nifs.dmi similarity index 100% rename from modular_skyrat/modules/modular_implants/icons/obj/nifs.dmi rename to modular_nova/modules/modular_implants/icons/obj/nifs.dmi diff --git a/modular_skyrat/modules/modular_implants/sounds/default_bad.ogg b/modular_nova/modules/modular_implants/sounds/default_bad.ogg similarity index 100% rename from modular_skyrat/modules/modular_implants/sounds/default_bad.ogg rename to modular_nova/modules/modular_implants/sounds/default_bad.ogg diff --git a/modular_skyrat/modules/modular_implants/sounds/default_click.ogg b/modular_nova/modules/modular_implants/sounds/default_click.ogg similarity index 100% rename from modular_skyrat/modules/modular_implants/sounds/default_click.ogg rename to modular_nova/modules/modular_implants/sounds/default_click.ogg diff --git a/modular_skyrat/modules/modular_implants/sounds/default_good.ogg b/modular_nova/modules/modular_implants/sounds/default_good.ogg similarity index 100% rename from modular_skyrat/modules/modular_implants/sounds/default_good.ogg rename to modular_nova/modules/modular_implants/sounds/default_good.ogg diff --git a/modular_skyrat/modules/modular_items/code/bags.dm b/modular_nova/modules/modular_items/code/bags.dm similarity index 95% rename from modular_skyrat/modules/modular_items/code/bags.dm rename to modular_nova/modules/modular_items/code/bags.dm index d462b5c227be24..8fd0bde29eb497 100644 --- a/modular_skyrat/modules/modular_items/code/bags.dm +++ b/modular_nova/modules/modular_items/code/bags.dm @@ -2,7 +2,7 @@ /obj/item/storage/pouch name = "storage pouch" desc = "It's a nondescript pouch made with dark fabric. It has a clip, for fitting in pockets." - icon = 'modular_skyrat/modules/modular_items/icons/storage.dmi' + icon = 'modular_nova/modules/modular_items/icons/storage.dmi' icon_state = "survival" w_class = WEIGHT_CLASS_NORMAL resistance_flags = FLAMMABLE @@ -16,7 +16,7 @@ /obj/item/storage/pouch/ammo name = "ammo pouch" desc = "A pouch for your ammo that goes in your pocket." - icon = 'modular_skyrat/modules/modular_items/icons/storage.dmi' + icon = 'modular_nova/modules/modular_items/icons/storage.dmi' icon_state = "ammopouch" w_class = WEIGHT_CLASS_BULKY custom_price = PAYCHECK_CREW * 4 @@ -52,7 +52,7 @@ /obj/item/storage/pouch/material name = "material pouch" desc = "A pouch for sheets and RCD ammunition that manages to hang where you would normally put things in your pocket." - icon = 'modular_skyrat/modules/modular_items/icons/storage.dmi' + icon = 'modular_nova/modules/modular_items/icons/storage.dmi' icon_state = "materialpouch" w_class = WEIGHT_CLASS_BULKY custom_price = PAYCHECK_CREW * 4 @@ -125,7 +125,7 @@ atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL /* hi. you might think this is egregious. five slots? that's a lot! - here's a thought: the pocket first aid kit from the colonial replicator [modular_skyrat\modules\food_replicator\code\storage.dm] has + here's a thought: the pocket first aid kit from the colonial replicator [modular_nova\modules\food_replicator\code\storage.dm] has mostly unrestricted storage, limited by having 4 max total storage, so at best you're only fitting 4 tiny items. but that's 4 of *any* tiny item. or 2 small items (that aren't guns/mags). so it's basically just turning 1 pocket slot into 2, if you think about it hard enough. this is a thing you have to buy from cargo's goodies tab. not even an import. and it only fits medical supplies. diff --git a/modular_skyrat/modules/modular_items/code/cash.dm b/modular_nova/modules/modular_items/code/cash.dm similarity index 100% rename from modular_skyrat/modules/modular_items/code/cash.dm rename to modular_nova/modules/modular_items/code/cash.dm diff --git a/modular_skyrat/modules/modular_items/code/ciggies.dm b/modular_nova/modules/modular_items/code/ciggies.dm similarity index 100% rename from modular_skyrat/modules/modular_items/code/ciggies.dm rename to modular_nova/modules/modular_items/code/ciggies.dm diff --git a/modular_nova/modules/modular_items/code/cross.dm b/modular_nova/modules/modular_items/code/cross.dm new file mode 100644 index 00000000000000..2e4e37c69396da --- /dev/null +++ b/modular_nova/modules/modular_items/code/cross.dm @@ -0,0 +1,21 @@ +/obj/item/crucifix + name = "ornate crucifix" + desc = "An ornate golden crucifix, adorned with various gemstones and tiny carvings. For some reason, it always feels warm to the touch." + icon = 'modular_nova/modules/modular_items/icons/crucifix.dmi' + icon_state = "cross_ornate" + lefthand_file = 'modular_nova/modules/modular_items/icons/cross_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/icons/cross_right.dmi' + force = 5 //Gem-encrusted and reinforced with GOD + throw_speed = 3 + throw_range = 4 + throwforce = 10 + w_class = WEIGHT_CLASS_TINY + +/datum/crafting_recipe/cross + name = "Ornate Cross" + result = /obj/item/crucifix + reqs = list(/obj/item/stack/sheet/mineral/gold = 1, + /obj/item/stack/sheet/mineral/diamond = 1) + tool_behaviors = list(TOOL_SCREWDRIVER) + time = 20 + category = CAT_MISC diff --git a/modular_nova/modules/modular_items/code/designs.dm b/modular_nova/modules/modular_items/code/designs.dm new file mode 100644 index 00000000000000..c8cd1e71514fcb --- /dev/null +++ b/modular_nova/modules/modular_items/code/designs.dm @@ -0,0 +1,165 @@ +/* +* Designs +*/ + +/datum/design/health_hud_aviator + name = "Medical HUD Aviators" + desc = "A heads-up display that scans the humanoids in view and provides accurate data about their health status. This HUD has been fitted inside of a pair of sunglasses." + id = "health_hud_aviator" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/aviator/health + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/security_hud_aviator + name = "Security HUD Aviators" + desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status. This HUD has been fitted inside of a pair of sunglasses." + id = "security_hud_aviator" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 2, + ) + build_path = /obj/item/clothing/glasses/hud/ar/aviator/security + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY, + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + +/datum/design/diagnostic_hud_aviator + name = "Diagnostic HUD Aviators" + desc = "A heads-up display used to analyze and determine faults within robotic machinery. This HUD has been fitted inside of a pair of sunglasses." + id = "diagnostic_hud_aviator" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/aviator/diagnostic + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE, + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/meson_hud_aviator + name = "Meson HUD Aviators" + desc = "A heads-up display used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition. This HUD has been fitted inside of a pair of sunglasses." + id = "meson_hud_aviator" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/aviator/meson + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING, + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design/science_hud_aviator + name = "Science Aviators" + desc = "A pair of tacky purple aviator sunglasses that allow the wearer to recognize various chemical compounds with only a glance." + id = "science_hud_aviator" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/aviator/science + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE, + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/health_hud_projector + name = "Retinal Projector Medical HUD" + desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than goggles." + id = "health_hud_projector" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/projector/health + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/security_hud_projector + name = "Retinal Projector Security HUD" + desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than goggles." + id = "security_hud_projector" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 2, + ) + build_path = /obj/item/clothing/glasses/hud/ar/projector/security + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY, + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + +/datum/design/diagnostic_hud_projector + name = "Retinal Projector Diagnostic HUD" + desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than goggles." + id = "diagnostic_hud_projector" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/projector/diagnostic + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE, + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/meson_hud_projector + name = "Retinal Projector Meson HUD" + desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than goggles." + id = "meson_hud_projector" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/projector/meson + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING, + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design/science_hud_projector + name = "Science Retinal Projector" + desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than goggles." + id = "science_hud_projector" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/projector/science + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE + RND_SUBCATEGORY_EQUIPMENT_MEDICAL, + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_MEDICAL diff --git a/modular_skyrat/modules/modular_items/code/makeshift.dm b/modular_nova/modules/modular_items/code/makeshift.dm similarity index 82% rename from modular_skyrat/modules/modular_items/code/makeshift.dm rename to modular_nova/modules/modular_items/code/makeshift.dm index 605a5bc5994244..b78f137f1c3586 100644 --- a/modular_skyrat/modules/modular_items/code/makeshift.dm +++ b/modular_nova/modules/modular_items/code/makeshift.dm @@ -3,7 +3,7 @@ /obj/item/crowbar/makeshift name = "makeshift crowbar" desc = "A makeshift crowbar, flimsily constructed with miscellaneous parts. It's got a strong head that looks like it could be used for hammering." - icon = 'modular_skyrat/modules/modular_items/icons/tools.dmi' + icon = 'modular_nova/modules/modular_items/icons/tools.dmi' icon_state = "makeshift_crowbar" worn_icon_state = "crowbar" force = 2 @@ -14,7 +14,7 @@ /obj/item/screwdriver/makeshift name = "makeshift screwdriver" desc = "A makeshift screwdriver, flimsily made using cloth and some metal." - icon = 'modular_skyrat/modules/modular_items/icons/tools.dmi' + icon = 'modular_nova/modules/modular_items/icons/tools.dmi' icon_state = "makeshift_screwdriver" random_color = FALSE force = 1 @@ -25,7 +25,7 @@ /obj/item/weldingtool/makeshift name = "makeshift welder" desc = "A makeshift welder, flimsily constructed with miscellaneous parts." - icon = 'modular_skyrat/modules/modular_items/icons/tools.dmi' + icon = 'modular_nova/modules/modular_items/icons/tools.dmi' icon_state = "makeshift_welder" force = 1 throwforce = 2 @@ -37,7 +37,7 @@ /obj/item/wirecutters/makeshift name = "makeshift wirecutters" desc = "Makeshift wire cutters, flimsily constructed with miscellaneous parts." - icon = 'modular_skyrat/modules/modular_items/icons/tools.dmi' + icon = 'modular_nova/modules/modular_items/icons/tools.dmi' icon_state = "makeshift_cutters" random_color = FALSE force = 3 @@ -48,7 +48,7 @@ /obj/item/wrench/makeshift name = "makeshift wrench" desc = "A makeshift wrench, flimsily constructed with miscellaneous parts." - icon = 'modular_skyrat/modules/modular_items/icons/tools.dmi' + icon = 'modular_nova/modules/modular_items/icons/tools.dmi' icon_state = "makeshift_wrench" force = 2 throwforce = 2 diff --git a/modular_skyrat/modules/modular_items/code/modular_glasses.dm b/modular_nova/modules/modular_items/code/modular_glasses.dm similarity index 92% rename from modular_skyrat/modules/modular_items/code/modular_glasses.dm rename to modular_nova/modules/modular_items/code/modular_glasses.dm index f35bb33433d3c1..6008894fc2df59 100644 --- a/modular_skyrat/modules/modular_items/code/modular_glasses.dm +++ b/modular_nova/modules/modular_items/code/modular_glasses.dm @@ -90,7 +90,8 @@ if(human.glasses == src) var/datum/atom_hud/our_hud = GLOB.huds[initial(glasses_type.hud_type)] our_hud.show_to(human) - ADD_TRAIT(human, initial(glasses_type.hud_trait), GLASSES_TRAIT) + for(var/trait in initial(glasses_type.clothing_traits)) + ADD_TRAIT(human, trait, GLASSES_TRAIT) /obj/item/clothing/glasses/hud/ar/proc/remove_hud(mob/user) if(ishuman(user)) // Make sure they're a human wearing the glasses first @@ -98,7 +99,8 @@ if(human.glasses == src) var/datum/atom_hud/our_hud = GLOB.huds[initial(glasses_type.hud_type)] our_hud.hide_from(human) - REMOVE_TRAIT(human, initial(glasses_type.hud_trait), GLASSES_TRAIT) + for(var/trait in initial(glasses_type.clothing_traits)) + REMOVE_TRAIT(human, trait, GLASSES_TRAIT) /obj/item/clothing/glasses/hud/ar/proc/reset_vars() worn_icon = initial(glasses_type.worn_icon) @@ -108,7 +110,6 @@ color_cutoffs = initial(glasses_type.color_cutoffs) vision_flags = initial(glasses_type.vision_flags) hud_type = initial(glasses_type.hud_type) - hud_trait = initial(glasses_type.hud_trait) //initial does not currently work on lists so we must do this var/obj/item/clothing/glasses/hud/ar/glasses_object = new glasses_type // make a temporary glasses obj clothing_traits = glasses_object.clothing_traits // pull the list from the created obj @@ -119,7 +120,6 @@ color_cutoffs = null // Resets lighting_alpha to user's default one clothing_traits = null /// also disables the options for Science functionality hud_type = null - hud_trait = null /// Create new icon and worn_icon, with only the first frame of every state and setting that as icon. /// this practically freezes the animation :) @@ -142,10 +142,10 @@ /obj/item/clothing/glasses/hud/ar/aviator name = "aviators" desc = "A pair of designer sunglasses with electrochromatic darkening lenses!" - worn_icon = 'modular_skyrat/modules/modular_items/icons/modular_glasses_mob.dmi' + worn_icon = 'modular_nova/modules/modular_items/icons/modular_glasses_mob.dmi' icon_state = "aviator" off_state = "aviator_off" - icon = 'modular_skyrat/modules/modular_items/icons/modular_glasses.dmi' + icon = 'modular_nova/modules/modular_items/icons/modular_glasses.dmi' flash_protect = FLASH_PROTECTION_FLASH modes = list(MODE_OFF, MODE_ON) tint = 0 @@ -153,9 +153,9 @@ /obj/item/clothing/glasses/fake_sunglasses/aviator name = "aviators" desc = "A pair of designer sunglasses. Doesn't seem like it'll block flashes." - worn_icon = 'modular_skyrat/modules/modular_items/icons/modular_glasses_mob.dmi' + worn_icon = 'modular_nova/modules/modular_items/icons/modular_glasses_mob.dmi' icon_state = "aviator" - icon = 'modular_skyrat/modules/modular_items/icons/modular_glasses.dmi' + icon = 'modular_nova/modules/modular_items/icons/modular_glasses.dmi' // Security Aviators /obj/item/clothing/glasses/hud/ar/aviator/security @@ -165,7 +165,7 @@ off_state = "aviator_sec_flash" flash_protect = FLASH_PROTECTION_NONE hud_type = DATA_HUD_SECURITY_ADVANCED - hud_trait = TRAIT_SECURITY_HUD + clothing_traits = list(TRAIT_SECURITY_HUD) glass_colour_type = /datum/client_colour/glass_colour/red modes = list(MODE_OFF_FLASH_PROTECTION, MODE_ON) modes_msg = list(MODE_OFF_FLASH_PROTECTION = "flash protection mode", MODE_ON = "optical matrix enabled") @@ -177,7 +177,7 @@ icon_state = "aviator_med" flash_protect = FLASH_PROTECTION_NONE hud_type = DATA_HUD_MEDICAL_ADVANCED - hud_trait = TRAIT_MEDICAL_HUD + clothing_traits = list(TRAIT_MEDICAL_HUD) glass_colour_type = /datum/client_colour/glass_colour/lightblue // (Normal) meson scanner Aviators @@ -198,7 +198,7 @@ icon_state = "aviator_diagnostic" flash_protect = FLASH_PROTECTION_NONE hud_type = DATA_HUD_DIAGNOSTIC_BASIC - hud_trait = TRAIT_DIAGNOSTIC_HUD + clothing_traits = list(TRAIT_DIAGNOSTIC_HUD) glass_colour_type = /datum/client_colour/glass_colour/lightorange // Science Aviators @@ -247,8 +247,8 @@ name = "retinal projector" desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than a visor." icon_state = "projector" - worn_icon = 'modular_skyrat/modules/modular_items/icons/modular_glasses_mob.dmi' - icon = 'modular_skyrat/modules/modular_items/icons/modular_glasses.dmi' + worn_icon = 'modular_nova/modules/modular_items/icons/modular_glasses_mob.dmi' + icon = 'modular_nova/modules/modular_items/icons/modular_glasses.dmi' flags_cover = null /// It doesn't actually cover up any parts off_state = "projector-off" modes = list(MODE_OFF, MODE_ON, MODE_FREEZE_ANIMATION) @@ -264,19 +264,19 @@ name = "retinal projector health HUD" icon_state = "projector_med" hud_type = DATA_HUD_MEDICAL_ADVANCED - hud_trait = list(ID_HUD, TRAIT_MEDICAL_HUD) + clothing_traits = list(ID_HUD, TRAIT_MEDICAL_HUD) /obj/item/clothing/glasses/hud/ar/projector/security name = "retinal projector security HUD" icon_state = "projector_sec" hud_type = DATA_HUD_SECURITY_ADVANCED - hud_trait = TRAIT_SECURITY_HUD + clothing_traits = list(TRAIT_SECURITY_HUD) /obj/item/clothing/glasses/hud/ar/projector/diagnostic name = "retinal projector diagnostic HUD" icon_state = "projector_diagnostic" hud_type = DATA_HUD_DIAGNOSTIC_BASIC - hud_trait = TRAIT_DIAGNOSTIC_HUD + clothing_traits = list(TRAIT_DIAGNOSTIC_HUD) /obj/item/clothing/glasses/hud/ar/projector/science name = "science retinal projector" diff --git a/modular_skyrat/modules/modular_items/code/necklace.dm b/modular_nova/modules/modular_items/code/necklace.dm similarity index 92% rename from modular_skyrat/modules/modular_items/code/necklace.dm rename to modular_nova/modules/modular_items/code/necklace.dm index 7e28d0f35c786c..4e87508dd4f198 100644 --- a/modular_skyrat/modules/modular_items/code/necklace.dm +++ b/modular_nova/modules/modular_items/code/necklace.dm @@ -7,9 +7,9 @@ /obj/item/clothing/neck/necklace/ashwalker name = "ashen necklace" desc = "A necklace crafted from ash, connected to the Necropolis through the core of a Legion. This imbues overdwellers with an unnatural understanding of Ashtongue, the native language of Lavaland, while worn." - icon = 'modular_skyrat/master_files/icons/obj/clothing/neck.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/neck.dmi' icon_state = "ashnecklace" - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' icon_state = "ashnecklace" w_class = WEIGHT_CLASS_SMALL //allows this to fit inside of pockets. diff --git a/modular_skyrat/modules/modular_items/code/pastries.dm b/modular_nova/modules/modular_items/code/pastries.dm similarity index 91% rename from modular_skyrat/modules/modular_items/code/pastries.dm rename to modular_nova/modules/modular_items/code/pastries.dm index 8ae5939bb09699..022c6013ebf0c4 100644 --- a/modular_skyrat/modules/modular_items/code/pastries.dm +++ b/modular_nova/modules/modular_items/code/pastries.dm @@ -3,7 +3,7 @@ name = "mince pie" desc = "The edible embodiment of christmas cheer." w_class = WEIGHT_CLASS_TINY - icon = 'modular_skyrat/modules/modular_items/icons/pastries.dmi' + icon = 'modular_nova/modules/modular_items/icons/pastries.dmi' icon_state = "mince_pie" food_flags = FOOD_FINGER_FOOD foodtypes = GRAIN | SUGAR | FRUIT @@ -15,7 +15,7 @@ name = "mimce pie" desc = "A pastry with a star-shaped lid, filled with Nothing." w_class = WEIGHT_CLASS_TINY - icon = 'modular_skyrat/modules/modular_items/icons/pastries.dmi' + icon = 'modular_nova/modules/modular_items/icons/pastries.dmi' icon_state = "mimce_pie" food_flags = FOOD_FINGER_FOOD foodtypes = GRAIN | SUGAR | FRUIT diff --git a/modular_skyrat/modules/modular_items/code/recipes_misc.dm b/modular_nova/modules/modular_items/code/recipes_misc.dm similarity index 100% rename from modular_skyrat/modules/modular_items/code/recipes_misc.dm rename to modular_nova/modules/modular_items/code/recipes_misc.dm diff --git a/modular_skyrat/modules/modular_items/code/summon_beacon.dm b/modular_nova/modules/modular_items/code/summon_beacon.dm similarity index 97% rename from modular_skyrat/modules/modular_items/code/summon_beacon.dm rename to modular_nova/modules/modular_items/code/summon_beacon.dm index da521bf3115f80..d1e9417952832f 100644 --- a/modular_skyrat/modules/modular_items/code/summon_beacon.dm +++ b/modular_nova/modules/modular_items/code/summon_beacon.dm @@ -1,7 +1,7 @@ /obj/item/summon_beacon name = "summoner beacon" desc = "Summons a thing. Probably shouldn't use this one, though." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/remote.dmi' icon_state = "gangtool-blue" inhand_icon_state = null w_class = WEIGHT_CLASS_SMALL @@ -107,7 +107,7 @@ var/mob/living/carbon/human/human_user = user if(istype(human_user.ears, /obj/item/radio/headset)) to_chat(user, span_notice("You hear something crackle in your ears for a moment before a voice speaks. \ - \"Please stand by for a message from Central Command. Message as follows: \ + \"Please stand by for a message from Conglomeration of Colonists. Message as follows: \ [span_bold("Request received. Pod inbound, please stand back from the landing site.")] \ Message ends.\"")) diff --git a/modular_skyrat/modules/modular_items/code/tailoring.dm b/modular_nova/modules/modular_items/code/tailoring.dm similarity index 100% rename from modular_skyrat/modules/modular_items/code/tailoring.dm rename to modular_nova/modules/modular_items/code/tailoring.dm diff --git a/modular_skyrat/modules/modular_items/code/thieving_gloves.dm b/modular_nova/modules/modular_items/code/thieving_gloves.dm similarity index 100% rename from modular_skyrat/modules/modular_items/code/thieving_gloves.dm rename to modular_nova/modules/modular_items/code/thieving_gloves.dm diff --git a/modular_skyrat/modules/modular_items/icons/artefacts.dmi b/modular_nova/modules/modular_items/icons/artefacts.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/icons/artefacts.dmi rename to modular_nova/modules/modular_items/icons/artefacts.dmi diff --git a/modular_skyrat/modules/modular_items/icons/cross_left.dmi b/modular_nova/modules/modular_items/icons/cross_left.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/icons/cross_left.dmi rename to modular_nova/modules/modular_items/icons/cross_left.dmi diff --git a/modular_skyrat/modules/modular_items/icons/cross_right.dmi b/modular_nova/modules/modular_items/icons/cross_right.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/icons/cross_right.dmi rename to modular_nova/modules/modular_items/icons/cross_right.dmi diff --git a/modular_skyrat/modules/modular_items/icons/crucifix.dmi b/modular_nova/modules/modular_items/icons/crucifix.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/icons/crucifix.dmi rename to modular_nova/modules/modular_items/icons/crucifix.dmi diff --git a/modular_skyrat/modules/modular_items/icons/modular_glasses.dmi b/modular_nova/modules/modular_items/icons/modular_glasses.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/icons/modular_glasses.dmi rename to modular_nova/modules/modular_items/icons/modular_glasses.dmi diff --git a/modular_skyrat/modules/modular_items/icons/modular_glasses_mob.dmi b/modular_nova/modules/modular_items/icons/modular_glasses_mob.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/icons/modular_glasses_mob.dmi rename to modular_nova/modules/modular_items/icons/modular_glasses_mob.dmi diff --git a/modular_skyrat/modules/modular_items/icons/pastries.dmi b/modular_nova/modules/modular_items/icons/pastries.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/icons/pastries.dmi rename to modular_nova/modules/modular_items/icons/pastries.dmi diff --git a/modular_skyrat/modules/modular_items/icons/storage.dmi b/modular_nova/modules/modular_items/icons/storage.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/icons/storage.dmi rename to modular_nova/modules/modular_items/icons/storage.dmi diff --git a/modular_skyrat/modules/modular_items/icons/tools.dmi b/modular_nova/modules/modular_items/icons/tools.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/icons/tools.dmi rename to modular_nova/modules/modular_items/icons/tools.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/clothing_pref_check.dm b/modular_nova/modules/modular_items/lewd_items/code/clothing_pref_check.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/clothing_pref_check.dm rename to modular_nova/modules/modular_items/lewd_items/code/clothing_pref_check.dm diff --git a/modular_nova/modules/modular_items/lewd_items/code/decals.dm b/modular_nova/modules/modular_items/lewd_items/code/decals.dm new file mode 100644 index 00000000000000..f84ce7d15c4a56 --- /dev/null +++ b/modular_nova/modules/modular_items/lewd_items/code/decals.dm @@ -0,0 +1,15 @@ +/obj/effect/decal/cleanable/cum + name = "cum" + desc = "Ew... Gross." + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_decals/lewd_decals.dmi' + icon_state = "cum_1" + random_icon_states = list("cum_1", "cum_2", "cum_3", "cum_4") + beauty = -50 + +/obj/effect/decal/cleanable/cum/femcum + name = "female cum" + desc = "Uhh... Someone had fun..." + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_decals/lewd_decals.dmi' + icon_state = "femcum_1" + random_icon_states = list("femcum_1", "femcum_2", "femcum_3", "femcum_4") + beauty = -50 diff --git a/modular_nova/modules/modular_items/lewd_items/code/emote.dm b/modular_nova/modules/modular_items/lewd_items/code/emote.dm new file mode 100644 index 00000000000000..8214049fbab7db --- /dev/null +++ b/modular_nova/modules/modular_items/lewd_items/code/emote.dm @@ -0,0 +1,40 @@ +/datum/emote + /// If we should check a preference for this emote + var/pref_to_check + +/datum/emote/living/lewd + pref_to_check = /datum/preference/toggle/erp + +// Can we play this emote to viewers? +/datum/emote/proc/pref_check_emote(mob/user) + if(isnull(pref_to_check)) + return TRUE + if(!user.client?.prefs.read_preference(pref_to_check)) + return FALSE + +/datum/emote/living/lewd/can_run_emote(mob/living/carbon/user, status_check = TRUE, intentional) + return ..() && user.client?.prefs?.read_preference(pref_to_check) + +/datum/emote/living/lewd/lewdmoan + key = "lewdmoan" + key_third_person = "lewdmoans" + message = "moans lewdly!" + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE + vary = TRUE + sound_volume = 35 + +/datum/emote/living/lewd/lewdmoan/get_sound(mob/living/carbon/user) + if(!istype(user)) + return + + if(user.gender == MALE) + return pick('modular_nova/modules/modular_items/lewd_items/sounds/final_m1.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/final_m2.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/final_m3.ogg', + + ) + else + return pick('modular_nova/modules/modular_items/lewd_items/sounds/final_f1.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/final_f2.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/final_f3.ogg', + ) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/arousal.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/arousal.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/arousal.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/arousal.dm diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/climax.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/climax.dm new file mode 100644 index 00000000000000..3c98e233130287 --- /dev/null +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/climax.dm @@ -0,0 +1,165 @@ +#define CLIMAX_VAGINA "Vagina" +#define CLIMAX_PENIS "Penis" +#define CLIMAX_BOTH "Both" + +#define CLIMAX_ON_FLOOR "On the floor" +#define CLIMAX_IN_OR_ON "Climax in or on someone" + +/mob/living/carbon/human + /// Used to prevent nightmare scenarios. + var/refractory_period + +/mob/living/carbon/human/proc/climax(manual = TRUE) + if (CONFIG_GET(flag/disable_erp_preferences)) + return + + if(!client?.prefs?.read_preference(/datum/preference/toggle/erp/autocum) && !manual) + return + if(refractory_period > REALTIMEOFDAY) + return + refractory_period = REALTIMEOFDAY + 30 SECONDS + if(has_status_effect(/datum/status_effect/climax_cooldown) || !client?.prefs?.read_preference(/datum/preference/toggle/erp/sex_toy)) + return + + if(HAS_TRAIT(src, TRAIT_NEVERBONER) || has_status_effect(/datum/status_effect/climax_cooldown) || (!has_vagina() && !has_penis())) + visible_message(span_purple("[src] twitches, trying to cum, but with no result."), \ + span_purple("You can't have an orgasm!")) + return TRUE + + // Reduce pop-ups and make it slightly more frictionless (lewd). + var/climax_choice = has_penis() ? CLIMAX_PENIS : CLIMAX_VAGINA + + if(manual) + var/list/genitals = list() + if(has_vagina()) + genitals.Add(CLIMAX_VAGINA) + if(has_penis()) + genitals.Add(CLIMAX_PENIS) + genitals.Add(CLIMAX_BOTH) + else if(has_penis()) + genitals.Add(CLIMAX_PENIS) + climax_choice = tgui_alert(src, "You are climaxing, choose which genitalia to climax with.", "Genitalia Preference!", genitals) + + switch(gender) + if(MALE) + play_lewd_sound(get_turf(src), pick('modular_nova/modules/modular_items/lewd_items/sounds/final_m1.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/final_m2.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/final_m3.ogg'), 50, TRUE, pref_to_check = /datum/preference/toggle/erp/sounds) + if(FEMALE) + play_lewd_sound(get_turf(src), pick('modular_nova/modules/modular_items/lewd_items/sounds/final_f1.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/final_f2.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/final_f3.ogg'), 50, TRUE, pref_to_check = /datum/preference/toggle/erp/sounds) + + var/self_orgasm = FALSE + var/self_their = p_their() + + if(climax_choice == CLIMAX_PENIS || climax_choice == CLIMAX_BOTH) + var/obj/item/organ/external/genital/penis/penis = get_organ_slot(ORGAN_SLOT_PENIS) + if(!get_organ_slot(ORGAN_SLOT_TESTICLES)) //If we have no god damn balls, we can't cum anywhere... GET BALLS! + visible_message(span_userlove("[src] orgasms, but nothing comes out of [self_their] penis!"), \ + span_userlove("You orgasm, it feels great, but nothing comes out of your penis!")) + + else if(is_wearing_condom()) + var/obj/item/clothing/sextoy/condom/condom = get_item_by_slot(LEWD_SLOT_PENIS) + condom.condom_use() + visible_message(span_userlove("[src] shoots [self_their] load into the [condom], filling it up!"), \ + span_userlove("You shoot your thick load into the [condom] and it catches it all!")) + + else if(!is_bottomless() && penis.visibility_preference != GENITAL_ALWAYS_SHOW) + visible_message(span_userlove("[src] cums inside [self_their] clothes!"), \ + span_userlove("You shoot your load, but you weren't naked, so you mess up your clothes!")) + self_orgasm = TRUE + + else + var/list/interactable_inrange_humans = list() + + // Unfortunately prefs can't be checked here, because byond/tgstation moment. + for(var/mob/living/carbon/human/iterating_human in (view(1, src) - src)) + interactable_inrange_humans[iterating_human.name] = iterating_human + + var/list/buttons = list(CLIMAX_ON_FLOOR) + if(interactable_inrange_humans.len) + buttons += CLIMAX_IN_OR_ON + + var/penis_climax_choice = tgui_alert(src, "Choose where to shoot your load.", "Load preference!", buttons) + + var/create_cum_decal = FALSE + + if(!penis_climax_choice || penis_climax_choice == CLIMAX_ON_FLOOR) + create_cum_decal = TRUE + visible_message(span_userlove("[src] shoots [self_their] sticky load onto the floor!"), \ + span_userlove("You shoot string after string of hot cum, hitting the floor!")) + + else + var/target_choice = tgui_input_list(src, "Choose a person to cum in or on.", "Choose target!", interactable_inrange_humans) + if(!target_choice) + create_cum_decal = TRUE + visible_message(span_userlove("[src] shoots [self_their] sticky load onto the floor!"), \ + span_userlove("You shoot string after string of hot cum, hitting the floor!")) + else + var/mob/living/carbon/human/target_human = interactable_inrange_humans[target_choice] + var/target_human_them = target_human.p_them() + + var/list/target_buttons = list() + + if(!target_human.wear_mask) + target_buttons += "mouth" + if(target_human.has_vagina(REQUIRE_GENITAL_EXPOSED)) + target_buttons += ORGAN_SLOT_VAGINA + if(target_human.has_anus(REQUIRE_GENITAL_EXPOSED)) + target_buttons += "asshole" + if(target_human.has_penis(REQUIRE_GENITAL_EXPOSED)) + var/obj/item/organ/external/genital/penis/other_penis = target_human.get_organ_slot(ORGAN_SLOT_PENIS) + if(other_penis.sheath != "None") + target_buttons += "sheath" + target_buttons += "On [target_human_them]" + + var/climax_into_choice = tgui_input_list(src, "Where on or in [target_human] do you wish to cum?", "Final frontier!", target_buttons) + + if(!climax_into_choice) + create_cum_decal = TRUE + visible_message(span_userlove("[src] shoots their sticky load onto the floor!"), \ + span_userlove("You shoot string after string of hot cum, hitting the floor!")) + else if(climax_into_choice == "On [target_human_them]") + create_cum_decal = TRUE + visible_message(span_userlove("[src] shoots their sticky load onto [target_human]!"), \ + span_userlove("You shoot string after string of hot cum onto [target_human]!")) + else + visible_message(span_userlove("[src] hilts [self_their] cock into [target_human]'s [climax_into_choice], shooting cum into [target_human_them]!"), \ + span_userlove("You hilt your cock into [target_human]'s [climax_into_choice], shooting cum into [target_human_them]!")) + to_chat(target_human, span_userlove("Your [climax_into_choice] fills with warm cum as [src] shoots [self_their] load into it.")) + + var/obj/item/organ/external/genital/testicles/testicles = get_organ_slot(ORGAN_SLOT_TESTICLES) + testicles.transfer_internal_fluid(null, testicles.internal_fluid_count * 0.6) // yep. we are sending semen to nullspace + if(create_cum_decal) + add_cum_splatter_floor(get_turf(src)) + + try_lewd_autoemote("moan") + if(climax_choice == CLIMAX_PENIS) + apply_status_effect(/datum/status_effect/climax) + apply_status_effect(/datum/status_effect/climax_cooldown) + if(self_orgasm) + add_mood_event("orgasm", /datum/mood_event/climaxself) + return TRUE + + if(climax_choice == CLIMAX_VAGINA || climax_choice == CLIMAX_BOTH) + var/obj/item/organ/external/genital/vagina/vagina = get_organ_slot(ORGAN_SLOT_VAGINA) + if(is_bottomless() || vagina.visibility_preference == GENITAL_ALWAYS_SHOW) + visible_message(span_userlove("[src] twitches and moans as [p_they()] climax from their vagina!"), span_userlove("You twitch and moan as you climax from your vagina!")) + add_cum_splatter_floor(get_turf(src), female = TRUE) + else + visible_message(span_userlove("[src] cums in [self_their] underwear from [self_their] vagina!"), \ + span_userlove("You cum in your underwear from your vagina! Eww.")) + self_orgasm = TRUE + + apply_status_effect(/datum/status_effect/climax) + apply_status_effect(/datum/status_effect/climax_cooldown) + if(self_orgasm) + add_mood_event("orgasm", /datum/mood_event/climaxself) + return TRUE + +#undef CLIMAX_VAGINA +#undef CLIMAX_PENIS +#undef CLIMAX_BOTH +#undef CLIMAX_ON_FLOOR +#undef CLIMAX_IN_OR_ON diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/mood_events.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/mood_events.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/mood_events.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/mood_events.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/pain.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/pain.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/pain.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/pain.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/pleasure.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/pleasure.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/pleasure.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/pleasure.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/aroused.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/aroused.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/aroused.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/aroused.dm diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/climax.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/climax.dm new file mode 100644 index 00000000000000..f55fb3264f617a --- /dev/null +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/climax.dm @@ -0,0 +1,63 @@ +#define AROUSAL_REMOVAL_AMOUNT -12 +#define STAMINA_REMOVAL_AMOUNT_EXTERNAL 15 +#define STAMINA_REMOVAL_AMOUNT_SELF 8 + +// Lowers arousal and pleasure by a bunch to not chain climax. + +/datum/status_effect/climax + id = "climax" + tick_interval = 1 SECONDS + duration = 10 SECONDS + alert_type = null + +/datum/status_effect/climax/tick(seconds_between_ticks) + if(!owner.client?.prefs?.read_preference(/datum/preference/toggle/erp/sex_toy)) + return + + var/mob/living/carbon/human/affected_mob = owner + + owner.reagents.add_reagent(/datum/reagent/drug/aphrodisiac/dopamine, 0.5) + owner.adjustStaminaLoss(STAMINA_REMOVAL_AMOUNT_EXTERNAL) + affected_mob.adjust_arousal(AROUSAL_REMOVAL_AMOUNT) + affected_mob.adjust_pleasure(AROUSAL_REMOVAL_AMOUNT) + +// Likely ready to be deprecated code that could be removed, due to nymphomaniac not existing anymore. +/datum/status_effect/masturbation_climax + id = "climax" + tick_interval = 1 SECONDS + duration = 5 SECONDS // Multiplayer better than singleplayer mode. + alert_type = null + +// This one should not leave decals on the floor. Used in case if character cumming in beaker. +/datum/status_effect/masturbation_climax/tick(seconds_between_ticks) + if(!owner.client?.prefs?.read_preference(/datum/preference/toggle/erp/sex_toy)) + return + + var/mob/living/carbon/human/affected_mob = owner + + owner.reagents.add_reagent(/datum/reagent/drug/aphrodisiac/dopamine, 0.3) + owner.adjustStaminaLoss(STAMINA_REMOVAL_AMOUNT_SELF) + affected_mob.adjust_arousal(AROUSAL_REMOVAL_AMOUNT) + affected_mob.adjust_pleasure(AROUSAL_REMOVAL_AMOUNT) + +// A second step in preventing chain climax, and also prevents spam. +/datum/status_effect/climax_cooldown + id = "climax_cooldown" + tick_interval = 1 SECONDS + duration = 30 SECONDS + alert_type = null + +/datum/status_effect/climax_cooldown/tick(seconds_between_ticks) + var/obj/item/organ/external/genital/vagina/vagina = owner.get_organ_slot(ORGAN_SLOT_VAGINA) + var/obj/item/organ/external/genital/testicles/balls = owner.get_organ_slot(ORGAN_SLOT_TESTICLES) + var/obj/item/organ/external/genital/penis/penis = owner.get_organ_slot(ORGAN_SLOT_PENIS) + var/obj/item/organ/external/genital/anus/anus = owner.get_organ_slot(ORGAN_SLOT_ANUS) + + if(penis) + penis.aroused = AROUSAL_NONE + if(vagina) + vagina.aroused = AROUSAL_NONE + if(balls) + balls.aroused = AROUSAL_NONE + if(anus) + anus.aroused = AROUSAL_NONE diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/fluid_generation.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/fluid_generation.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/fluid_generation.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/fluid_generation.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/ropebunny.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/ropebunny.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/ropebunny.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/ropebunny.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/spank_related.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/spank_related.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/spank_related.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/spank_related.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/items/bottles.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/items/bottles.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/items/bottles.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/items/bottles.dm diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/items/pills.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/items/pills.dm new file mode 100644 index 00000000000000..52825068e98d7d --- /dev/null +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/items/pills.dm @@ -0,0 +1,34 @@ +/obj/item/reagent_containers/pill/crocin + name = "crocin pill (10u)" + desc = "I've fallen, and I can't get it up!" + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi' + icon_state = "crocin" + list_reagents = list(/datum/reagent/drug/aphrodisiac/crocin = 10) + +/obj/item/reagent_containers/pill/hexacrocin + name = "hexacrocin pill (10u)" + desc = "Pill in creepy heart form." + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi' + icon_state = "hexacrocin" + list_reagents = list(/datum/reagent/drug/aphrodisiac/crocin/hexacrocin = 10) + +/obj/item/reagent_containers/pill/dopamine + name = "dopamine pill (5u)" + desc = "Feelings of orgasm, contained in a pill... Weird." + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi' + icon_state = "dopamine" + list_reagents = list(/datum/reagent/drug/aphrodisiac/dopamine = 5) + +/obj/item/reagent_containers/pill/camphor + name = "camphor pill (10u)" + desc = "For the early bird." + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi' + icon_state = "camphor" + list_reagents = list(/datum/reagent/drug/aphrodisiac/camphor = 10) + +/obj/item/reagent_containers/pill/pentacamphor + name = "pentacamphor pill (10u)" + desc = "The chemical equivalent of horny jail." + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi' + icon_state = "pentacamphor" + list_reagents = list(/datum/reagent/drug/aphrodisiac/camphor/pentacamphor = 10) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/mood_events.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/mood_events.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/mood_events.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/mood_events.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/_aphrodisiac.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/_aphrodisiac.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/_aphrodisiac.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/_aphrodisiac.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/_chemical_reaction.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/_chemical_reaction.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/_chemical_reaction.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/_chemical_reaction.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/breast_milk.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/breast_milk.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/breast_milk.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/breast_milk.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/camphor.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/camphor.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/camphor.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/camphor.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/crocin.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/crocin.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/crocin.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/crocin.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/cum.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/cum.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/cum.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/cum.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/dopamine.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/dopamine.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/dopamine.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/dopamine.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/hexacrocin.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/hexacrocin.dm similarity index 97% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/hexacrocin.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/hexacrocin.dm index 5323a8ddc86942..c55deb402fa99f 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/hexacrocin.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/hexacrocin.dm @@ -43,7 +43,7 @@ to_chat(exposed_mob, span_purple("Your libido is going haywire! It feels like speaking is much harder...")) exposed_mob.gain_trauma(/datum/brain_trauma/very_special/bimbo, TRAUMA_RESILIENCE_BASIC) - ADD_TRAIT(exposed_mob, TRAIT_BIMBO, LEWDCHEM_TRAIT) + ADD_TRAIT(exposed_mob, TRAIT_BIMBO, TRAIT_LEWDCHEM) /datum/chemical_reaction/hexacrocin results = list(/datum/reagent/drug/aphrodisiac/crocin/hexacrocin = 1) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/incubus_draft.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/incubus_draft.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/incubus_draft.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/incubus_draft.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/pentacamphor.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/pentacamphor.dm similarity index 94% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/pentacamphor.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/pentacamphor.dm index 2c2e6083c8cc07..8816143570445a 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/pentacamphor.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/pentacamphor.dm @@ -23,11 +23,11 @@ if(HAS_TRAIT(exposed_mob, TRAIT_BIMBO)) exposed_mob.cure_trauma_type(/datum/brain_trauma/very_special/bimbo, TRAUMA_RESILIENCE_ABSOLUTE) to_chat(exposed_mob, span_notice("Your mind is free. Your thoughts are pure and innocent once more.")) - REMOVE_TRAIT(exposed_mob, TRAIT_BIMBO, LEWDCHEM_TRAIT) + REMOVE_TRAIT(exposed_mob, TRAIT_BIMBO, TRAIT_LEWDCHEM) return if(!HAS_TRAIT(exposed_mob, TRAIT_NEVERBONER)) to_chat(exposed_mob, span_notice("You feel like you'll never feel aroused again...")) - ADD_TRAIT(exposed_mob, TRAIT_NEVERBONER, LEWDCHEM_TRAIT) + ADD_TRAIT(exposed_mob, TRAIT_NEVERBONER, TRAIT_LEWDCHEM) /datum/chemical_reaction/pentacamphor results = list(/datum/reagent/drug/aphrodisiac/camphor/pentacamphor = 1) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/succubus_milk.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/succubus_milk.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/succubus_milk.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/succubus_milk.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/ballgag.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/ballgag.dm similarity index 83% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/ballgag.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/ballgag.dm index ea1e10de656993..450f84d6501f3e 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/ballgag.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/ballgag.dm @@ -5,11 +5,11 @@ icon_state = "ballgag" inhand_icon_state = "ballgag" worn_icon_state = "ballgag" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_masks.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi' - worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/mask_muzzled.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_masks.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi' + worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/mask_muzzled.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' greyscale_config = /datum/greyscale_config/ballgag greyscale_config_worn = /datum/greyscale_config/ballgag/worn greyscale_config_inhand_left = /datum/greyscale_config/ballgag/left_hand @@ -34,10 +34,10 @@ var/moans_alt_probability = 5 /// Sounds that the player makes when they try to speak. - var/list/moan_sounds = list('modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f1.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f2.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f3.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f4.ogg') + var/list/moan_sounds = list('modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f1.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f2.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f3.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f4.ogg') /// How loud the moan audio is var/moan_volume = 50 /// How loud are these moan-noises if we're choking on it? diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/bdsm_mask.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/bdsm_mask.dm similarity index 93% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/bdsm_mask.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/bdsm_mask.dm index 6a8f8a37c58bf0..497b59aa234b1c 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/bdsm_mask.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/bdsm_mask.dm @@ -9,9 +9,9 @@ /obj/item/clothing/mask/gas/bdsm_mask name = "latex gasmask" desc = "A toned gas mask that completely muffles the wearer. Wearing this makes breathing a lot difficult." - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi' - worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/mask_muzzled.dmi' - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_masks.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi' + worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/mask_muzzled.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_masks.dmi' icon_state = "mask_pink_off" base_icon_state = "mask" slot_flags = ITEM_SLOT_MASK @@ -49,10 +49,10 @@ for(button in src.actions) if(istype(button, /datum/action/item_action/toggle_breathcontrol)) button.button_icon_state = "[current_mask_color]_switch_[mask_on? "on" : "off"]" - button.button_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi' + button.button_icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi' if(istype(button, /datum/action/item_action/mask_inhale)) button.button_icon_state = "[current_mask_color]_breath" - button.button_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi' + button.button_icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi' update_icon() /obj/item/clothing/mask/gas/bdsm_mask/handle_speech(datum/source, list/speech_args) @@ -60,10 +60,10 @@ return speech_args[SPEECH_MESSAGE] = pick((prob(moans_alt_probability) && LAZYLEN(moans_alt)) ? moans_alt : moans) - play_lewd_sound(loc, pick('modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f1.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f2.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f3.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f4.ogg'), 70, 1, -1) + play_lewd_sound(loc, pick('modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f1.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f2.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f3.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f4.ogg'), 70, 1, -1) // Create radial menu /obj/item/clothing/mask/gas/bdsm_mask/proc/populate_mask_designs() @@ -309,12 +309,15 @@ /obj/item/reagent_containers/cup/lewd_filter name = "gasmask filter" desc = "A strange looking air filter. It may not be a good idea to breathe this in..." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' icon_state = "filter_pink" unique_reskin = list("pink" = "filter_pink", "teal" = "filter_teal") w_class = WEIGHT_CLASS_SMALL - custom_materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT, /datum/material/plastic = SHEET_MATERIAL_AMOUNT) + custom_materials = list( + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + /datum/material/plastic = SHEET_MATERIAL_AMOUNT, + ) volume = 50 possible_transfer_amounts = list(1, 2, 3, 4, 5, 10, 25, 50) list_reagents = list(/datum/reagent/drug/aphrodisiac/crocin = 50) diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/corset.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/corset.dm new file mode 100644 index 00000000000000..c7f195274f43f3 --- /dev/null +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/corset.dm @@ -0,0 +1,39 @@ +#define TIGHT_SLOWDOWN 2 + +/obj/item/clothing/suit/corset + name = "corset" + desc = "A tight latex corset. How can anybody fit in THAT?" + icon_state = "corset" + inhand_icon_state = null + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi' + worn_icon_digi = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi' + worn_icon_taur_snake = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi' + worn_icon_taur_paw = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi' + worn_icon_taur_hoof = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi' + body_parts_covered = CHEST + slowdown = 1 // You can't run with that thing literally squeezing your chest + + /// Has it been laced tightly? + var/laced_tight = FALSE + +/obj/item/clothing/suit/corset/AltClick(mob/user) + laced_tight = !laced_tight + to_chat(user, span_notice("You [laced_tight ? "tighten" : "loosen"] the corset, making it far [laced_tight ? "harder" : "easier"] to breathe.")) + play_lewd_sound(user, laced_tight ? 'sound/items/handling/cloth_pickup.ogg' : 'sound/items/handling/cloth_drop.ogg', 40, TRUE) + if(laced_tight) + slowdown = TIGHT_SLOWDOWN + return + slowdown = initial(slowdown) + +/obj/item/clothing/suit/corset/equipped(mob/living/carbon/human/user, slot) + . = ..() + if(laced_tight && src == user.wear_suit) + to_chat(user, span_purple("The corset squeezes tightly against your ribs! Breathing suddenly feels much more difficult.")) + +/obj/item/clothing/suit/corset/dropped(mob/living/carbon/human/user) + . = ..() + if(laced_tight && src == user.wear_suit) + to_chat(user, span_purple("Phew. Now you can breathe normally.")) + +#undef TIGHT_SLOWDOWN diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/deprivation_helmet.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/deprivation_helmet.dm similarity index 90% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/deprivation_helmet.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/deprivation_helmet.dm index a6188a546e41d2..ba06f9e9e7c553 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/deprivation_helmet.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/deprivation_helmet.dm @@ -4,11 +4,11 @@ icon_state = "dephelmet_pink" base_icon_state = "dephelmet" inhand_icon_state = "dephelmet_pinkn" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_hats.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_hats.dmi' - worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/head_muzzled.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_hats.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_hats.dmi' + worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/head_muzzled.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT|HIDEFACIALHAIR flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH body_parts_covered = HEAD @@ -150,13 +150,13 @@ for(action_button in src.actions) if(istype(action_button, /datum/action/item_action/toggle_vision)) action_button.button_icon_state = "[current_helmet_color]_blind" - action_button.button_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi' + action_button.button_icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi' if(istype(action_button, /datum/action/item_action/toggle_hearing)) action_button.button_icon_state = "[current_helmet_color]_deaf" - action_button.button_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi' + action_button.button_icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi' if(istype(action_button, /datum/action/item_action/toggle_speech)) action_button.button_icon_state = "[current_helmet_color]_mute" - action_button.button_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi' + action_button.button_icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi' update_icon() // To check if we can change helmet's model diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/domina_cap.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/domina_cap.dm new file mode 100644 index 00000000000000..3415866e3afe37 --- /dev/null +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/domina_cap.dm @@ -0,0 +1,19 @@ +/obj/item/clothing/head/domina_cap + name = "dominant cap" + desc = "For special types of inspections." + icon_state = "dominacap" + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_hats.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_hats.dmi' + supports_variations_flags = NONE + +//message when equipping that thing +/obj/item/clothing/head/domina_cap/equipped(mob/living/carbon/user, slot) + . = ..() + if(src == user.head) + to_chat(user, span_purple("You feel much more determined.")) + +//message when unequipping that thing +/obj/item/clothing/head/domina_cap/dropped(mob/living/carbon/user) + . = ..() + if(src == user.head) + to_chat(user, span_purple("BDSM session ended, huh?")) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/erp_belt.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/erp_belt.dm similarity index 85% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/erp_belt.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/erp_belt.dm index be2bf45291feb1..a1ad4dc169dd67 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/erp_belt.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/erp_belt.dm @@ -1,10 +1,10 @@ /obj/item/storage/belt/erpbelt name = "leather belt" desc = "Used to hold sex toys. Looks pretty good." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_belts.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_belts.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_belts.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_belts.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' icon_state = "erpbelt" inhand_icon_state = "erpbelt" worn_icon_state = "erpbelt" @@ -43,7 +43,7 @@ /obj/item/clothing/mask/ballgag, /obj/item/clothing/mask/ballgag/choking, /obj/item/clothing/head/domina_cap, - /obj/item/clothing/head/costume/skyrat/maid, + /obj/item/clothing/head/costume/nova/maid, /obj/item/clothing/glasses/blindfold/kinky, /obj/item/clothing/ears/kinky_headphones, /obj/item/clothing/suit/straight_jacket/latex_straight_jacket, @@ -64,7 +64,7 @@ /obj/item/clothing/under/costume/lewdmaid, /obj/item/clothing/suit/straight_jacket/shackles, /obj/item/clothing/under/stripper_outfit, - /obj/item/clothing/under/misc/skyrat/gear_harness, + /obj/item/clothing/under/misc/nova/gear_harness, //hands /obj/item/clothing/gloves/ball_mittens, diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm similarity index 93% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm index 554cfab890c522..95614450762d18 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm @@ -4,10 +4,10 @@ icon_state = "hypnogoggles_pink" base_icon_state = "hypnogoggles" inhand_icon_state = "hypnogoggles_pink" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_eyes.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_eyes.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_eyes.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_eyes.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' /// If the color of the goggles have been changed before. var/color_changed = FALSE /// Current color of the goggles, can change and affects sprite diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kink_collars.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kink_collars.dm similarity index 91% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kink_collars.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kink_collars.dm index aa8ff23f1b6f97..ecaea655802d80 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kink_collars.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kink_collars.dm @@ -29,8 +29,8 @@ /obj/item/clothing/neck/kink_collar name = "collar" desc = "A nice, tight collar. It fits snug to your skin" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi' icon_state = "collar_cyan" body_parts_covered = NECK slot_flags = ITEM_SLOT_NECK @@ -86,8 +86,8 @@ /obj/item/clothing/neck/kink_collar/locked name = "locked collar" desc = "A tight collar. It appears to have some kind of lock." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi' icon_state = "lock_collar_cyan" treat_path = /obj/item/key/kink_collar /// If the collar is currently locked @@ -173,7 +173,7 @@ /obj/item/key/kink_collar name = "kink collar key" desc = "A key for a tiny lock on a collar or bag." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' icon_state = "collar_key_metal" base_icon_state = "collar_key" /// The name inscribed on the key @@ -258,9 +258,9 @@ /obj/item/mind_controller name = "mind controller" desc = "A small remote for sending basic emotion patterns to a collar." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' icon_state = "mindcontroller" /// Reference to the mind control collar var/obj/item/clothing/neck/mind_collar/collar = null @@ -285,8 +285,8 @@ /obj/item/clothing/neck/mind_collar name = "mind collar" desc = "A tight collar. It has some strange high-tech emitters on the side." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi' icon_state = "mindcollar" inhand_icon_state = null /// Reference to the mind control remote diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_blindfold.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kinky_blindfold.dm similarity index 84% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_blindfold.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kinky_blindfold.dm index 40a716f3175636..fa9d37556dafa7 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_blindfold.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kinky_blindfold.dm @@ -4,10 +4,10 @@ icon_state = "kblindfold_pink" base_icon_state = "kblindfold" inhand_icon_state = "kblindfold_pink" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_eyes.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_eyes.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_eyes.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_eyes.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' /// IF the color has been changed before var/color_changed = FALSE /// Current color of the blindfold. Can be changed and affect sprite diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_headphones.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kinky_headphones.dm similarity index 89% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_headphones.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kinky_headphones.dm index eb4ed5bf142094..cdf69a92bf218a 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_headphones.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kinky_headphones.dm @@ -4,8 +4,8 @@ icon_state = "kinkphones_pink_off" base_icon_state = "kinkphones" inhand_icon_state = "kinkphones_pink_off" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_ears.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_ears.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_ears.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_ears.dmi' strip_delay = 15 custom_price = PAYCHECK_CREW * 2 /// If the headphones are on or off @@ -18,8 +18,8 @@ var/static/list/kinkphones_designs actions_types = list(/datum/action/item_action/toggle_kinky_headphones) slot_flags = ITEM_SLOT_EARS | ITEM_SLOT_HEAD | ITEM_SLOT_NECK - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' //create radial menu /obj/item/clothing/ears/kinky_headphones/proc/populate_kinkphones_designs() diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_sleepbag.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kinky_sleepbag.dm similarity index 88% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_sleepbag.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kinky_sleepbag.dm index 2f1588738cbe0a..e874cdc9f89c4e 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_sleepbag.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kinky_sleepbag.dm @@ -1,12 +1,12 @@ /obj/item/clothing/suit/straight_jacket/kinky_sleepbag name = "latex sleeping bag" desc = "A tight sleeping bag made of a shiny material. It would be dangerous to put it on yourself." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_normal.dmi' - worn_icon_digi = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_digi.dmi' - worn_icon_taur_snake = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_special.dmi' - worn_icon_taur_paw = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_special.dmi' - worn_icon_taur_hoof = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_special.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_normal.dmi' + worn_icon_digi = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_digi.dmi' + worn_icon_taur_snake = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_special.dmi' + worn_icon_taur_paw = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_special.dmi' + worn_icon_taur_hoof = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_special.dmi' supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION|STYLE_TAUR_ALL icon_state = "sleepbag_pink_deflated_folded" base_icon_state = "sleepbag" @@ -19,7 +19,7 @@ var/time_to_sound_left var/tt var/static/list/bag_colors - flags_inv = HIDEHEADGEAR|HIDENECK|HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDESUITSTORAGE|HIDEHAIR|HIDESEXTOY|HIDETAIL // SKYRAT EDIT ADDITION - HIDETAIL + flags_inv = HIDEHEADGEAR|HIDENECK|HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDESUITSTORAGE|HIDEHAIR|HIDESEXTOY|HIDETAIL // NOVA EDIT ADDITION - HIDETAIL strip_delay = 300 breakouttime = 1200 //do not touch. First - It's contraband item, Second - It's damn expensive, Third - it's ERP item, so you can't legally use it on characters without enabled non-con or erp pref. var/static/list/bag_inf_states @@ -132,7 +132,7 @@ /obj/item/clothing/suit/straight_jacket/kinky_sleepbag/proc/fold(mob/user, src) bag_fold = !bag_fold - play_lewd_sound(user, 'modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg', 40, TRUE) + play_lewd_sound(user, 'modular_nova/modules/modular_items/lewd_items/sounds/latex.ogg', 40, TRUE) if(bag_fold == TRUE) w_class = WEIGHT_CLASS_SMALL slot_flags = NONE @@ -182,7 +182,7 @@ /obj/item/clothing/suit/straight_jacket/kinky_sleepbag/process(seconds_per_tick) if(time_to_sound_left <= 0) if(tt <= 0) - play_lewd_sound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg', 100, TRUE) + play_lewd_sound(loc, 'modular_nova/modules/modular_items/lewd_items/sounds/latex.ogg', 100, TRUE) tt = rand(15, 35) //to do random funny sounds when character inside that thing. else tt -= seconds_per_tick diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/latex_catsuit.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/latex_catsuit.dm new file mode 100644 index 00000000000000..005764ac8d70de --- /dev/null +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/latex_catsuit.dm @@ -0,0 +1,84 @@ +/obj/item/clothing/under/misc/latex_catsuit + name = "latex catsuit" + desc = "A shiny uniform that fits snugly to the skin." + icon_state = "latex_catsuit_female" + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi' + worn_icon_digi = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-digi.dmi' + worn_icon_taur_snake = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-snake.dmi' + worn_icon_taur_paw = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-paw.dmi' + worn_icon_taur_hoof = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-hoof.dmi' + inhand_icon_state = "latex_catsuit" + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + equip_sound = 'modular_nova/modules/modular_items/lewd_items/sounds/latex.ogg' + can_adjust = FALSE + body_parts_covered = CHEST|GROIN|LEGS|ARMS + strip_delay = 80 + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION|STYLE_TAUR_ALL + var/mutable_appearance/breasts_overlay + var/mutable_appearance/breasts_icon_overlay + +//this fragment of code makes unequipping not instant +/obj/item/clothing/under/misc/latex_catsuit/attack_hand(mob/user) + if(iscarbon(user)) + var/mob/living/carbon/human/affected_human = user + if(src == affected_human.w_uniform) + if(!do_after(affected_human, 60, target = src)) + return + . = ..() + +// //some gender identification magic +/obj/item/clothing/under/misc/latex_catsuit/equipped(mob/living/affected_mob, slot) + . = ..() + var/mob/living/carbon/human/affected_human = affected_mob + var/obj/item/organ/external/genital/breasts/affected_breasts = affected_human.get_organ_slot(ORGAN_SLOT_BREASTS) + if(src == affected_human.w_uniform) + if(affected_mob.gender == FEMALE) + icon_state = "latex_catsuit_female" + else + icon_state = "latex_catsuit_male" + + affected_mob.update_worn_undersuit() + + breasts_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi', "none") + update_overlays() + + //Breasts overlay for catsuit + if(affected_breasts?.genital_size >= 6 || affected_breasts?.genital_type == "pair") + breasts_overlay.icon_state = "breasts_double" + breasts_icon_overlay.icon_state = "iconbreasts_double" + accessory_overlay = breasts_overlay + add_overlay(breasts_icon_overlay) + update_overlays() + if(affected_breasts?.genital_type == "quad") + breasts_overlay.icon_state = "breasts_quad" + breasts_icon_overlay.icon_state = "iconbreasts_quad" + accessory_overlay = breasts_overlay + add_overlay(breasts_icon_overlay) + update_overlays() + if(affected_breasts?.genital_type == "sextuple") + breasts_overlay.icon_state = "breasts_sextuple" + breasts_icon_overlay.icon_state = "iconbreasts_sextuple" + accessory_overlay = breasts_overlay + add_overlay(breasts_icon_overlay) + update_overlays() + + affected_human.regenerate_icons() + +/obj/item/clothing/under/misc/latex_catsuit/dropped(mob/living/affected_mob) + . = ..() + accessory_overlay = null + breasts_overlay.icon_state = "none" + cut_overlay(breasts_icon_overlay) + breasts_icon_overlay.icon_state = "none" + +//Plug to bypass the bug with instant suit equip/drop +/obj/item/clothing/under/misc/latex_catsuit/MouseDrop(atom/over_object) + +/obj/item/clothing/under/misc/latex_catsuit/Initialize(mapload) + . = ..() + breasts_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi', "none", ABOVE_MOB_LAYER) + breasts_overlay.icon_state = ORGAN_SLOT_BREASTS + breasts_icon_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi', "none") + breasts_icon_overlay.icon_state = ORGAN_SLOT_BREASTS diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/latex_straight_jacket.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/latex_straight_jacket.dm new file mode 100644 index 00000000000000..0533b111c7808b --- /dev/null +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/latex_straight_jacket.dm @@ -0,0 +1,49 @@ +/obj/item/clothing/suit/straight_jacket/latex_straight_jacket + name = "latex straight jacket" + desc = "A toy that is unable to actually restrain anyone. Still fun to wear!" + inhand_icon_state = "latex_straight_jacket" + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi' + worn_icon_digi = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi' + worn_icon_taur_snake = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi' + worn_icon_taur_paw = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi' + worn_icon_taur_hoof = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi' + icon_state = "latex_straight_jacket" + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + body_parts_covered = CHEST | GROIN | LEGS | ARMS | HANDS + flags_inv = HIDEGLOVES | HIDESHOES | HIDEJUMPSUIT + clothing_flags = DANGEROUS_OBJECT + equip_delay_self = NONE + strip_delay = 12 SECONDS + breakouttime = 1 SECONDS + +/obj/item/clothing/suit/straight_jacket/latex_straight_jacket/attackby(obj/item/attacking_item, mob/user, params) //That part allows reinforcing this item with normal straightjacket + if(!istype(attacking_item, /obj/item/clothing/suit/straight_jacket)) + return ..() + var/obj/item/clothing/suit/straight_jacket/latex_straight_jacket/reinforced/reinforced_jacket = new() + remove_item_from_storage(user) + user.put_in_hands(reinforced_jacket) + to_chat(user, span_notice("You reinforce the belts on [src] with [attacking_item].")) + qdel(attacking_item) + qdel(src) + +/obj/item/clothing/suit/straight_jacket/latex_straight_jacket/reinforced + name = "latex straight jacket" + desc = "A suit that completely restrains the wearer - in quite an arousing way." + icon_state = "latex_straight_jacket" + inhand_icon_state = "latex_straight_jacket" + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi' + worn_icon_digi = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi' + worn_icon_taur_snake = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi' + worn_icon_taur_paw = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi' + worn_icon_taur_hoof = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + body_parts_covered = CHEST | GROIN | LEGS | ARMS | HANDS + flags_inv = HIDEGLOVES | HIDESHOES | HIDEJUMPSUIT + clothing_flags = DANGEROUS_OBJECT + equip_delay_self = NONE + strip_delay = 12 SECONDS + breakouttime = 300 SECONDS diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_glasses.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_glasses.dm new file mode 100644 index 00000000000000..6931f313ea3eae --- /dev/null +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_glasses.dm @@ -0,0 +1,11 @@ +/obj/item/clothing/glasses/nice_goggles + name = "surprisingly nice looking goggles" + desc = "It has an inscription engraved on the handle. Kubic. How strange." + icon_state = "nice_goggles" + inhand_icon_state = "nice_goggles" + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_eyes.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_eyes.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + +//that's all folks. Nothing superfunctional here. diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_gloves.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_gloves.dm new file mode 100644 index 00000000000000..aa373549e3532b --- /dev/null +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_gloves.dm @@ -0,0 +1,45 @@ +//normal ball mittens +/obj/item/clothing/gloves/ball_mittens + name = "ball mittens" + desc = "A nice, comfortable pair of inflatable ball gloves." + icon_state = "ballmittens" + inhand_icon_state = null + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi' + breakouttime = 1 SECONDS + +//That part allows reinforcing this item with handcuffs +/obj/item/clothing/gloves/ball_mittens/attackby(obj/item/attacking_item, mob/user, params) + . = ..() + if(.) + return + if(!istype(attacking_item, /obj/item/restraints/handcuffs)) + return + var/obj/item/clothing/gloves/ball_mittens_reinforced/reinforced_muffs = new + remove_item_from_storage(user) + user.put_in_hands(reinforced_muffs) + to_chat(user, span_notice("You reinforced the belts on [src] with [attacking_item].")) + qdel(attacking_item) + qdel(src) + return TRUE + +//ball_mittens reinforced +/obj/item/clothing/gloves/ball_mittens_reinforced //We getting this item by using handcuffs on normal ball mittens + name = "reinforced ball mittens" + desc = "Do not put these on, it's REALLY hard to take them off! But they look so comfortable..." + icon_state = "ballmittens" + inhand_icon_state = null + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi' + clothing_flags = DANGEROUS_OBJECT + breakouttime = 100 SECONDS //do not touch this, i beg you. + +//latex gloves +/obj/item/clothing/gloves/latex_gloves + name = "latex gloves" + desc = "Awesome looking gloves that are satisfying to the touch." + icon_state = "latexgloves" + inhand_icon_state = "latex_gloves" + w_class = WEIGHT_CLASS_SMALL + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi' diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_maid.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_maid.dm new file mode 100644 index 00000000000000..e958d7594b9f44 --- /dev/null +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_maid.dm @@ -0,0 +1,115 @@ +/obj/item/clothing/under/costume/lewdmaid + name = "latex maid costume" + desc = "A maid costume made of a thick latex." + icon_state = "lewdmaid" + inhand_icon_state = "lewdmaid" + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi' + worn_icon_digi = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi' + worn_icon_taur_snake = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi' + worn_icon_taur_paw = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi' + worn_icon_taur_hoof = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + body_parts_covered = CHEST + can_adjust = FALSE + +/obj/item/clothing/accessory/lewdapron + name = "shiny maid apron" + desc = "The best part of a maid costume. Now with different colors!" + icon_state = "lewdapron_pink" + base_icon_state = "lewdapron" + inhand_icon_state = "lewdapron_pink" + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + minimize_when_attached = FALSE + attachment_slot = null + /// If the color has been changed before + var/color_changed = FALSE + /// Current color of the apron, can change and affects sprite + var/current_color = "red" + /// List of all apron designs, used in selecting one in the radial menu + var/static/list/apron_designs + +/obj/item/clothing/under/costume/lewdmaid/Initialize(mapload) + . = ..() + var/obj/item/clothing/accessory/lewdapron/apron_accessory = new(src) + attach_accessory(apron_accessory) + +/// create radial menu +/obj/item/clothing/accessory/lewdapron/proc/populate_apron_designs() + apron_designs = list( + "red" = image (icon = src.icon, icon_state = "lewdapron_red"), + "green" = image (icon = src.icon, icon_state = "lewdapron_green"), + "pink" = image (icon = src.icon, icon_state = "lewdapron_pink"), + "teal" = image(icon = src.icon, icon_state = "lewdapron_teal"), + "yellow" = image (icon = src.icon, icon_state = "lewdapron_yellow")) + +//to change model +/obj/item/clothing/accessory/lewdapron/AltClick(mob/user) + if(color_changed) + return + . = ..() + if(.) + return + var/choice = show_radial_menu(user, src, apron_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) + if(!choice) + return FALSE + current_color = choice + update_icon() + color_changed = TRUE + +/// to check if we can change kinkphones's model +/obj/item/clothing/accessory/lewdapron/proc/check_menu(mob/living/user) + if(!istype(user)) + return FALSE + if(user.incapacitated()) + return FALSE + return TRUE + +/obj/item/clothing/accessory/lewdapron/Initialize(mapload) + AddElement(/datum/element/update_icon_updates_onmob) + if(!length(apron_designs)) + populate_apron_designs() + update_icon_state() + update_icon() + . = ..() + +/obj/item/clothing/accessory/lewdapron/update_icon_state() + . = ..() + icon_state = icon_state = "[initial(base_icon_state)]_[current_color]" + inhand_icon_state = "[initial(base_icon_state)]_[current_color]" + +/obj/item/clothing/under/costume/lewdmaid/attach_accessory(obj/item/attack_item) + . = ..() + var/obj/item/clothing/accessory/prime_accessory = attached_accessories[1] + var/accessory_color = prime_accessory.icon_state + accessory_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi', "[accessory_color]", ABOVE_MOB_LAYER + 0.1) + accessory_overlay.alpha = prime_accessory.alpha + accessory_overlay.color = prime_accessory.color + if(!ishuman(loc)) + return TRUE + var/mob/living/carbon/human/wearer = loc + wearer.update_worn_undersuit() + wearer.update_worn_oversuit() + wearer.fan_hud_set_fandom() + return TRUE + +//Not a maid, yeah. I dont care, it's going with the other lewd stuff, and there WONT be a whole new file just for it. +/obj/item/clothing/under/costume/bunnylewd + name = "bunny suit" + desc = "Makes the wearer more attractive, even men." + icon_state = "bunnysuit" + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi' + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + body_parts_covered = CHEST|GROIN + can_adjust = TRUE + alt_covers_chest = FALSE + +/obj/item/clothing/under/costume/bunnylewd/white + name = "white bunny suit" + icon_state = "whitebunnysuit" + can_adjust = FALSE diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_shoes.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_shoes.dm new file mode 100644 index 00000000000000..923fed3e198cd9 --- /dev/null +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_shoes.dm @@ -0,0 +1,37 @@ +//heels item +/obj/item/clothing/shoes/latex_heels + name = "latex heels" + desc = "Lace up before use. It's pretty difficult to walk in these." + icon_state = "latexheels" + inhand_icon_state = null + // We really need to find a way to condense there. + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi' + worn_icon_digi = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi' + worn_icon_taur_hoof = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi' + worn_icon_taur_paw = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi' + worn_icon_taur_snake = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi' + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION|STYLE_TAUR_ALL + +/obj/item/clothing/shoes/latex_heels/Initialize(mapload) + . = ..() + AddComponent(/datum/component/squeak, list('modular_nova/modules/modular_items/lewd_items/sounds/highheel1.ogg' = 1, 'modular_nova/modules/modular_items/lewd_items/sounds/highheel2.ogg' = 1), 70) + +/obj/item/clothing/shoes/latex_heels/domina_heels + name = "dominant heels" + desc = "A pair of aesthetically pleasing heels." + icon_state = "dominaheels" + +/* +* LATEX SOCKS +*/ + +/obj/item/clothing/shoes/latex_socks + name = "latex socks" + desc = "A pair of shiny, split-toe socks made of some strange material." + icon_state = "latexsocks" + inhand_icon_state = null + w_class = WEIGHT_CLASS_SMALL + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi' + worn_icon_digi = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi' diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shackles.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shackles.dm similarity index 85% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shackles.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shackles.dm index e062af594945c8..19cc73b9cc283a 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shackles.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shackles.dm @@ -2,12 +2,12 @@ name = "shackles" desc = "Fancy shackles with a fake lock." inhand_icon_state = null - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi' - worn_icon_digi = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi' - worn_icon_taur_snake = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi' - worn_icon_taur_paw = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi' - worn_icon_taur_hoof = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi' + worn_icon_digi = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi' + worn_icon_taur_snake = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi' + worn_icon_taur_paw = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi' + worn_icon_taur_hoof = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi' icon_state = "shackles_metal" base_icon_state = "shackles" body_parts_covered = null//they don't cover anything, but these code parts need to be here, because if they are not here - they make clothing disappear. Magic. diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_hands.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_hands.dm similarity index 90% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_hands.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_hands.dm index 3de778f7da693e..4a60e0eb75fb5c 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_hands.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_hands.dm @@ -2,8 +2,8 @@ name = "shibari arms bondage" desc = "Bondage ropes that cover arms." icon_state = "shibari_arms" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi' body_parts_covered = NONE //strip_delay = 100 breakouttime = 5 SECONDS diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_legs.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_legs.dm similarity index 89% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_legs.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_legs.dm index 08c3afb6d27d79..136ee619ad4949 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_legs.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_legs.dm @@ -2,9 +2,9 @@ name = "shibari legs bondage" desc = "Bondage ropes that cover legs." icon_state = "shibari_legs" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi' - worn_icon_digi = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi' + worn_icon_digi = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi' body_parts_covered = NONE strip_delay = 100 supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION|STYLE_TAUR_ALL diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_uniform.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_uniform.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_uniform.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_uniform.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shockcollar.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shockcollar.dm similarity index 84% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shockcollar.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shockcollar.dm index 63ddfd330baaf1..53fbdc5827f1e7 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shockcollar.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shockcollar.dm @@ -1,8 +1,8 @@ /obj/item/electropack/shockcollar name = "shock collar" desc = "A reinforced metal collar. It has some sort of wiring near the front." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi' icon_state = "shockcollar" inhand_icon_state = null body_parts_covered = NECK @@ -10,7 +10,10 @@ w_class = WEIGHT_CLASS_SMALL strip_delay = 60 // equip_delay_other = 60 - custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, /datum/material/glass = SHEET_MATERIAL_AMOUNT) + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + ) var/random = TRUE var/freq_in_name = TRUE var/tagname = null @@ -20,8 +23,14 @@ id = "shockcollar" build_type = AUTOLATHE build_path = /obj/item/electropack/shockcollar - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, /datum/material/glass = SHEET_MATERIAL_AMOUNT) - category = list(RND_CATEGORY_HACKED, RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MISC) + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + ) + category = list( + RND_CATEGORY_HACKED, + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MISC, + ) /obj/item/electropack/shockcollar/attack_hand(mob/user) if(loc == user && user.get_item_by_slot(ITEM_SLOT_NECK)) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/strapon.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/strapon.dm similarity index 81% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/strapon.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/strapon.dm index f499d5ba973196..4df36c2384d44f 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/strapon.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/strapon.dm @@ -3,8 +3,8 @@ desc = "Sometimes you need a special way to humiliate someone." icon_state = "strapon_human" base_icon_state = "strapon" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi' slot_flags = ITEM_SLOT_BELT var/in_hands = FALSE var/type_changed = FALSE @@ -102,7 +102,7 @@ /obj/item/clothing/strapon/proc/update_mob_action_buttonss() for(var/datum/action/item_action/take_strapon/action_button in actions_types) action_button.button_icon_state = "dildo_[strapon_type]" - action_button.button_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + action_button.button_icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' update_icon() //button stuff @@ -123,7 +123,7 @@ to_chat(user, span_warning("You need to put the strapon around your waist before you can use it!")) /obj/item/clothing/strapon/proc/toggle(mob/living/carbon/human/user) - play_lewd_sound(user, 'modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg', 40, TRUE) + play_lewd_sound(user, 'modular_nova/modules/modular_items/lewd_items/sounds/latex.ogg', 40, TRUE) var/obj/item/held = user.get_active_held_item() var/obj/item/unheld = user.get_inactive_held_item() @@ -169,7 +169,7 @@ /obj/item/strapon_dildo name = "strapon" desc = "An item with which to be menacing and merciless." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' icon_state = "dildo_human" base_icon_state = "dildo" inhand_icon_state = "nothing" @@ -182,7 +182,7 @@ . = ..() update_icon_state() update_icon() - ADD_TRAIT(src, TRAIT_NODROP, STRAPON_TRAIT) + ADD_TRAIT(src, TRAIT_NODROP, TRAIT_STRAPON) /obj/item/strapon_dildo/update_icon_state() . = ..() @@ -208,12 +208,12 @@ if(prob(40)) hit_mob.try_lewd_autoemote(pick("twitch_s", "moan")) user.visible_message(span_purple("[user] [message]!")) - play_lewd_sound(loc, pick('modular_skyrat/modules/modular_items/lewd_items/sounds/bang1.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang2.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang3.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang4.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang5.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang6.ogg'), 60, TRUE) + play_lewd_sound(loc, pick('modular_nova/modules/modular_items/lewd_items/sounds/bang1.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang2.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang3.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang4.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang5.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang6.ogg'), 60, TRUE) else to_chat(user, span_danger("[hit_mob]'s groin is covered!")) return @@ -230,12 +230,12 @@ if(prob(70)) hit_mob.try_lewd_autoemote(pick("gasp", "moan")) user.visible_message(span_purple("[user] [message]!")) - play_lewd_sound(loc, pick('modular_skyrat/modules/modular_items/lewd_items/sounds/bang1.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang2.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang3.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang4.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang5.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang6.ogg'), 40, TRUE) + play_lewd_sound(loc, pick('modular_nova/modules/modular_items/lewd_items/sounds/bang1.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang2.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang3.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang4.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang5.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang6.ogg'), 40, TRUE) else to_chat(user, span_danger("[hit_mob]'s mouth is covered!")) @@ -249,12 +249,12 @@ if(prob(60)) hit_mob.try_lewd_autoemote(pick("twitch_s", "moan", "shiver")) user.visible_message(span_purple("[user] [message]!")) - play_lewd_sound(loc, pick('modular_skyrat/modules/modular_items/lewd_items/sounds/bang1.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang2.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang3.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang4.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang5.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang6.ogg'), 100, TRUE) + play_lewd_sound(loc, pick('modular_nova/modules/modular_items/lewd_items/sounds/bang1.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang2.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang3.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang4.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang5.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang6.ogg'), 100, TRUE) else to_chat(user, span_danger("[hit_mob]'s anus is covered!")) diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/stripper_outfit.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/stripper_outfit.dm new file mode 100644 index 00000000000000..4b027fde85821a --- /dev/null +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/stripper_outfit.dm @@ -0,0 +1,28 @@ +/obj/item/clothing/under/stripper_outfit + name = "stripper outfit" + desc = "An item of clothing that leaves little to the imagination." + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi' + worn_icon_digi = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-digi.dmi' + worn_icon_taur_snake = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-snake.dmi' + worn_icon_taur_paw = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-paw.dmi' + worn_icon_taur_hoof = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-hoof.dmi' + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION|STYLE_TAUR_ALL + can_adjust = FALSE + icon_state = "stripper_cyan" + inhand_icon_state = "b_suit" + unique_reskin = list("Cyan" = "stripper_cyan", + "Yellow" = "stripper_yellow", + "Green" = "stripper_green", + "Red" = "stripper_red", + "Latex" = "stripper_latex", + "Orange" = "stripper_orange", + "White" = "stripper_white", + "Purple" = "stripper_purple", + "Black" = "stripper_black", + "Black-teal" = "stripper_tealblack") + +/obj/item/clothing/under/stripper_outfit/AltClick(mob/user) + . = ..() + if(unique_reskin && !current_skin && user.can_perform_action(src, NEED_DEXTERITY)) + reskin_obj(user) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/appearance.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/appearance.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/appearance.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/appearance.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/carbon.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/carbon.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/carbon.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/carbon.dm diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/human.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/human.dm new file mode 100644 index 00000000000000..d38656878af491 --- /dev/null +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/human.dm @@ -0,0 +1,384 @@ +/mob/living/carbon/human + var/arousal = 0 + var/pleasure = 0 + var/pain = 0 + + var/pain_limit = 0 + var/arousal_status = AROUSAL_NONE + + // Add variables for slots to the human class + var/obj/item/vagina = null + var/obj/item/anus = null + var/obj/item/nipples = null + var/obj/item/penis = null + + +/* +* This code needed to determine if the human is naked in that part of body or not +* You can use this for your own stuff if you want, haha. +*/ + +/// Are we wearing something that covers our chest? +/mob/living/carbon/human/proc/is_topless() + return (!(wear_suit) || !(wear_suit.body_parts_covered & CHEST)) && (!(w_uniform) || !(w_uniform.body_parts_covered & CHEST)) + +/// Are we wearing something that covers our groin? +/mob/living/carbon/human/proc/is_bottomless() + return (!(wear_suit) || !(wear_suit.body_parts_covered & GROIN)) && (!(w_uniform) || !(w_uniform.body_parts_covered & GROIN)) + +/// Are we wearing something that covers our shoes? +/mob/living/carbon/human/proc/is_barefoot() + return (!(wear_suit) || !(wear_suit.body_parts_covered & GROIN)) && (!(shoes) || !(shoes.body_parts_covered & FEET)) + +/mob/living/carbon/human/proc/is_hands_uncovered() + return (gloves?.body_parts_covered & ARMS) + +/mob/living/carbon/human/proc/is_head_uncovered() + return (head?.body_parts_covered & HEAD) + +/// Returns true if the human has an accessible penis for the parameter. Accepts any of the `REQUIRE_GENITAL_` defines. +/mob/living/carbon/human/proc/has_penis(required_state = REQUIRE_GENITAL_ANY) + var/obj/item/organ/external/genital/genital = get_organ_slot(ORGAN_SLOT_PENIS) + if(!genital) + return FALSE + + switch(required_state) + if(REQUIRE_GENITAL_ANY) + return TRUE + if(REQUIRE_GENITAL_EXPOSED) + return genital.visibility_preference == GENITAL_ALWAYS_SHOW || is_bottomless() + if(REQUIRE_GENITAL_UNEXPOSED) + return genital.visibility_preference != GENITAL_ALWAYS_SHOW && !is_bottomless() + else + return TRUE + +/// Returns true if the human has a accessible balls for the parameter. Accepts any of the `REQUIRE_GENITAL_` defines. +/mob/living/carbon/human/proc/has_balls(required_state = REQUIRE_GENITAL_ANY) + var/obj/item/organ/external/genital/genital = get_organ_slot(ORGAN_SLOT_TESTICLES) + if(!genital) + return FALSE + + switch(required_state) + if(REQUIRE_GENITAL_ANY) + return TRUE + if(REQUIRE_GENITAL_EXPOSED) + return genital.visibility_preference == GENITAL_ALWAYS_SHOW || is_bottomless() + if(REQUIRE_GENITAL_UNEXPOSED) + return genital.visibility_preference != GENITAL_ALWAYS_SHOW && !is_bottomless() + else + return TRUE + +/// Returns true if the human has an accessible vagina for the parameter. Accepts any of the `REQUIRE_GENITAL_` defines. +/mob/living/carbon/human/proc/has_vagina(required_state = REQUIRE_GENITAL_ANY) + var/obj/item/organ/external/genital/genital = get_organ_slot(ORGAN_SLOT_VAGINA) + if(!genital) + return FALSE + + switch(required_state) + if(REQUIRE_GENITAL_ANY) + return TRUE + if(REQUIRE_GENITAL_EXPOSED) + return genital.visibility_preference == GENITAL_ALWAYS_SHOW || is_bottomless() + if(REQUIRE_GENITAL_UNEXPOSED) + return genital.visibility_preference != GENITAL_ALWAYS_SHOW && !is_bottomless() + else + return TRUE + +/// Returns true if the human has a accessible breasts for the parameter. Accepts any of the `REQUIRE_GENITAL_` defines. +/mob/living/carbon/human/proc/has_breasts(required_state = REQUIRE_GENITAL_ANY) + var/obj/item/organ/external/genital/genital = get_organ_slot(ORGAN_SLOT_BREASTS) + if(!genital) + return FALSE + + switch(required_state) + if(REQUIRE_GENITAL_ANY) + return TRUE + if(REQUIRE_GENITAL_EXPOSED) + return genital.visibility_preference == GENITAL_ALWAYS_SHOW || is_topless() + if(REQUIRE_GENITAL_UNEXPOSED) + return genital.visibility_preference != GENITAL_ALWAYS_SHOW && !is_topless() + else + return TRUE + +/// Returns true if the human has an accessible anus for the parameter. Accepts any of the `REQUIRE_GENITAL_` defines. +/mob/living/carbon/human/proc/has_anus(required_state = REQUIRE_GENITAL_ANY) + if(issilicon(src)) + return TRUE + var/obj/item/organ/external/genital/genital = get_organ_slot(ORGAN_SLOT_ANUS) + if(!genital) + return FALSE + + switch(required_state) + if(REQUIRE_GENITAL_ANY) + return TRUE + if(REQUIRE_GENITAL_EXPOSED) + return genital.visibility_preference == GENITAL_ALWAYS_SHOW || is_bottomless() + if(REQUIRE_GENITAL_UNEXPOSED) + return genital.visibility_preference != GENITAL_ALWAYS_SHOW && !is_bottomless() + else + return TRUE + +/// Returns true if the human has a accessible feet for the parameter, returning the number of feet the human has if they do. Accepts any of the `REQUIRE_GENITAL_` defines. +/mob/living/carbon/human/proc/has_arms(required_state = REQUIRE_GENITAL_ANY) + var/hand_count = 0 + var/covered = 0 + var/is_covered = FALSE + for(var/obj/item/bodypart/arm/left/left_arm in bodyparts) + hand_count++ + for(var/obj/item/bodypart/arm/right/right_arm in bodyparts) + hand_count++ + if(get_item_by_slot(ITEM_SLOT_HANDS)) + var/obj/item/clothing/gloves/worn_gloves = get_item_by_slot(ITEM_SLOT_HANDS) + covered = worn_gloves.body_parts_covered + if(covered & HANDS) + is_covered = TRUE + switch(required_state) + if(REQUIRE_GENITAL_ANY) + return hand_count + if(REQUIRE_GENITAL_EXPOSED) + if(is_covered) + return FALSE + else + return hand_count + if(REQUIRE_GENITAL_UNEXPOSED) + if(!is_covered) + return FALSE + else + return hand_count + else + return hand_count + +/// Returns true if the human has a accessible feet for the parameter, returning the number of feet the human has if they do. Accepts any of the `REQUIRE_GENITAL_` defines. +/mob/living/carbon/human/proc/has_feet(required_state = REQUIRE_GENITAL_ANY) + var/feet_count = 0 + + for(var/obj/item/bodypart/leg/left/left_leg in bodyparts) + feet_count++ + for(var/obj/item/bodypart/leg/right/right_leg in bodyparts) + feet_count++ + + switch(required_state) + if(REQUIRE_GENITAL_ANY) + return feet_count + if(REQUIRE_GENITAL_EXPOSED) + if(!is_barefoot()) + return FALSE + else + return feet_count + if(REQUIRE_GENITAL_UNEXPOSED) + if(is_barefoot()) + return FALSE + else + return feet_count + else + return feet_count + +/// Gets the number of feet the human has. +/mob/living/carbon/human/proc/get_num_feet() + return has_feet(REQUIRE_GENITAL_ANY) + +/// Returns true if the human has a accessible ears for the parameter. Accepts any of the `REQUIRE_GENITAL_` defines. +/mob/living/carbon/human/proc/has_ears(required_state = REQUIRE_GENITAL_ANY) + var/obj/item/organ/genital = get_organ_slot(ORGAN_SLOT_EARS) + if(!genital) + return FALSE + + switch(required_state) + if(REQUIRE_GENITAL_ANY) + return TRUE + if(REQUIRE_GENITAL_EXPOSED) + return !get_item_by_slot(ITEM_SLOT_EARS) + if(REQUIRE_GENITAL_UNEXPOSED) + return get_item_by_slot(ITEM_SLOT_EARS) + else + return TRUE + +/// Returns true if the human has accessible eyes for the parameter. Accepts any of the `REQUIRE_GENITAL_` defines. +/mob/living/carbon/human/proc/has_eyes(required_state = REQUIRE_GENITAL_ANY) + var/obj/item/organ/genital = get_organ_slot(ORGAN_SLOT_EYES) + if(!genital) + return FALSE + + switch(required_state) + if(REQUIRE_GENITAL_ANY) + return TRUE + if(REQUIRE_GENITAL_EXPOSED) + return !get_item_by_slot(ITEM_SLOT_EYES) + if(REQUIRE_GENITAL_UNEXPOSED) + return get_item_by_slot(ITEM_SLOT_EYES) + else + return TRUE + +/// Returns true if the human has accessible tail for the parameter. Accepts any of the `REQUIRE_GENITAL_` defines. +/mob/living/carbon/human/proc/has_tail(required_state = REQUIRE_GENITAL_ANY) + var/obj/item/organ/genital = get_organ_slot(ORGAN_SLOT_TAIL) + if(!genital) + return FALSE + + switch(required_state) + if(REQUIRE_GENITAL_ANY) + return TRUE + if(REQUIRE_GENITAL_EXPOSED) + return !get_item_by_slot(ORGAN_SLOT_TAIL) + if(REQUIRE_GENITAL_UNEXPOSED) + return get_item_by_slot(ORGAN_SLOT_TAIL) + else + return TRUE + +/* +* This code needed for changing character's gender by chems +*/ + +/// Sets the gender of the human, respecting prefs unless it's forced. Do not force in non-admin operations. +/mob/living/carbon/human/proc/set_gender(ngender = NEUTER, silent = FALSE, update_icon = TRUE, forced = FALSE) + var/bender = gender != ngender + if((!client?.prefs?.read_preference(/datum/preference/toggle/erp/gender_change) && !forced) || !dna || !bender) + return FALSE + + if(ngender == MALE || ngender == FEMALE) + dna.features["body_model"] = ngender + if(!silent) + var/adj = ngender == MALE ? "masculine" : "feminine" + visible_message(span_boldnotice("[src] suddenly looks more [adj]!"), span_boldwarning("You suddenly feel more [adj]!")) + else if(ngender == NEUTER) + dna.features["body_model"] = MALE + gender = ngender + if(update_icon) + update_body() + +/* +* ICON UPDATING EXTENTION +*/ + +/// Updating vagina slot +/mob/living/carbon/human/proc/update_inv_vagina() + // on_mob stuff + remove_overlay(VAGINA_LAYER) + + var/obj/item/clothing/sextoy/sex_toy = vagina + + if(wear_suit && (wear_suit.flags_inv & HIDESEXTOY)) // You can add proper flags here if required + return + + var/icon_file = vagina?.worn_icon + var/mutable_appearance/vagina_overlay + + if(!vagina_overlay) + vagina_overlay = sex_toy?.build_worn_icon(default_layer = VAGINA_LAYER, default_icon_file = 'icons/mob/clothing/under/default.dmi', isinhands = FALSE, override_file = icon_file) + + var/obj/item/bodypart/chest/chest_part = get_bodypart(BODY_ZONE_CHEST) + chest_part?.worn_uniform_offset?.apply_offset(vagina_overlay) // every day we stray further and further from god + overlays_standing[VAGINA_LAYER] = vagina_overlay + + apply_overlay(VAGINA_LAYER) + update_mutant_bodyparts() + +/// Updating anus slot +/mob/living/carbon/human/proc/update_inv_anus() + // on_mob stuff + remove_overlay(ANUS_LAYER) + + var/obj/item/clothing/sextoy/sex_toy = anus + + if(wear_suit && (wear_suit.flags_inv & HIDESEXTOY)) // You can add proper flags here if required + return + + var/icon_file = anus?.worn_icon + var/mutable_appearance/anus_overlay + + if(!anus_overlay) + anus_overlay = sex_toy?.build_worn_icon(default_layer = ANUS_LAYER, default_icon_file = 'icons/mob/clothing/under/default.dmi', isinhands = FALSE, override_file = icon_file) + + var/obj/item/bodypart/chest/chest_part = get_bodypart(BODY_ZONE_CHEST) + + chest_part?.worn_uniform_offset?.apply_offset(anus_overlay) // and i keep on asking myself... why? why do we do this? + overlays_standing[ANUS_LAYER] = anus_overlay + + apply_overlay(ANUS_LAYER) + update_mutant_bodyparts() + +/// Updating nipples slot +/mob/living/carbon/human/proc/update_inv_nipples() + // on_mob stuff + remove_overlay(NIPPLES_LAYER) + + var/obj/item/clothing/sextoy/sex_toy = nipples + + if(wear_suit && (wear_suit.flags_inv & HIDESEXTOY)) // You can add proper flags here if required + return + + var/icon_file = nipples?.worn_icon + var/mutable_appearance/nipples_overlay + + if(!nipples_overlay) + nipples_overlay = sex_toy?.build_worn_icon(default_layer = NIPPLES_LAYER, default_icon_file = 'icons/mob/clothing/under/default.dmi', isinhands = FALSE, override_file = icon_file) + + var/obj/item/bodypart/chest/chest_part = get_bodypart(BODY_ZONE_CHEST) + chest_part?.worn_uniform_offset?.apply_offset(nipples_overlay) // then i realised something, something horrific + + overlays_standing[NIPPLES_LAYER] = nipples_overlay + + apply_overlay(NIPPLES_LAYER) + update_mutant_bodyparts() + +/// Updating penis slot +/mob/living/carbon/human/proc/update_inv_penis() + // on_mob stuff + remove_overlay(PENIS_LAYER) + + var/obj/item/clothing/sextoy/sex_toy = penis + + if(wear_suit && (wear_suit.flags_inv & HIDESEXTOY)) // You can add proper flags here if required + return + + var/icon_file = penis?.worn_icon + var/mutable_appearance/penis_overlay + + if(!penis_overlay) + penis_overlay = sex_toy?.build_worn_icon(default_layer = PENIS_LAYER, default_icon_file = 'icons/mob/clothing/under/default.dmi', isinhands = FALSE, override_file = icon_file) + + var/obj/item/bodypart/chest/chest_part = get_bodypart(BODY_ZONE_CHEST) + chest_part?.worn_uniform_offset?.apply_offset(penis_overlay) // we can never escape, we are forever governed by sex(two) + + overlays_standing[PENIS_LAYER] = penis_overlay + + apply_overlay(PENIS_LAYER) + update_mutant_bodyparts() + +/// Helper proc for calling all the lewd slot update_inv_ procs. +/mob/living/carbon/human/proc/update_inv_lewd() + update_inv_vagina() + update_inv_anus() + update_inv_nipples() + update_inv_penis() + +/* +* MISC LOGIC +*/ + +// Handles breaking out of gloves that restrain people. +/mob/living/carbon/human/resist_restraints() + if(gloves?.breakouttime) + changeNext_move(CLICK_CD_BREAKOUT) + last_special = world.time + CLICK_CD_BREAKOUT + cuff_resist(gloves) + else + ..() + +/// Checks if the human is wearing a condom, and also hasn't broken it. +/mob/living/carbon/human/proc/is_wearing_condom() + if(!penis || !istype(penis, /obj/item/clothing/sextoy/condom)) + return FALSE + + var/obj/item/clothing/sextoy/condom/condom = penis + return condom.condom_state == TRAIT_CONDOM_BROKEN + +// For handling things that don't already have handcuff handlers. +/mob/living/carbon/human/set_handcuffed(new_value) + if(wear_suit && istype(wear_suit, /obj/item/clothing/suit/straight_jacket/kinky_sleepbag)) + return FALSE + ..() + +/// Checks if the tail is exposed. +/obj/item/organ/external/tail/proc/is_exposed() + return TRUE // your tail is always exposed, dummy! why are you checking this diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/misc.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/misc.dm new file mode 100644 index 00000000000000..6107aa7aa1fd73 --- /dev/null +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/misc.dm @@ -0,0 +1,62 @@ +/* +* Looping sound for vibrating stuff +*/ + +/datum/looping_sound/lewd/vibrator + start_sound = 'modular_nova/modules/modular_items/lewd_items/sounds/bzzz-loop-1.ogg' + start_length = 1 + mid_sounds = 'modular_nova/modules/modular_items/lewd_items/sounds/bzzz-loop-1.ogg' + mid_length = 1 + end_sound = 'modular_nova/modules/modular_items/lewd_items/sounds/bzzz-loop-1.ogg' + falloff_distance = 1 + falloff_exponent = 5 + extra_range = SILENCED_SOUND_EXTRARANGE + ignore_walls = FALSE + +/datum/looping_sound/lewd/vibrator/low + volume = 80 + +/datum/looping_sound/lewd/vibrator/medium + volume = 90 + +/datum/looping_sound/lewd/vibrator/high + volume = 100 + +/* +* Dancing pole code. +*/ + +/atom + var/pseudo_z_axis + +/atom/proc/get_fake_z() + return pseudo_z_axis + +/obj/structure/table + pseudo_z_axis = 8 + +/turf/open/get_fake_z() + var/objschecked + for(var/obj/structure/structurestocheck in contents) + objschecked++ + if(structurestocheck.pseudo_z_axis) + return structurestocheck.pseudo_z_axis + if(objschecked >= 25) + break + return pseudo_z_axis + +/mob/living/Move(atom/newloc, direct) + . = ..() + if(.) + pseudo_z_axis = newloc.get_fake_z() + pixel_z = pseudo_z_axis + +/// Used to add a cum decal to the floor while transferring viruses and DNA to it +/mob/living/proc/add_cum_splatter_floor(turf/the_turf, female = FALSE) + if(!the_turf) + the_turf = get_turf(src) + + var/selected_type = female ? /obj/effect/decal/cleanable/cum/femcum : /obj/effect/decal/cleanable/cum + var/atom/stain = new selected_type(the_turf, get_static_viruses()) + + stain.transfer_mob_blood_dna(src) //I'm not adding a new forensics category for cumstains diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/organs.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/organs.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/organs.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/organs.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/pref_checking.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/pref_checking.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/pref_checking.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/pref_checking.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/sounds.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/sounds.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/sounds.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/sounds.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/species.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/species.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/species.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/species.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_erp_disabled_item_enforcement.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/_erp_disabled_item_enforcement.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_erp_disabled_item_enforcement.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/_erp_disabled_item_enforcement.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_kits.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/_kits.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_kits.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/_kits.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_masturbation_item.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/_masturbation_item.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_masturbation_item.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/_masturbation_item.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_sex_toy.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/_sex_toy.dm similarity index 84% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_sex_toy.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/_sex_toy.dm index c4401dfc4cd8d7..1b8277795bc983 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_sex_toy.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/_sex_toy.dm @@ -1,13 +1,13 @@ /obj/item/clothing/sextoy name = "sextoy" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi' - equip_sound = 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang1.ogg' - drop_sound = 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang2.ogg' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi' + equip_sound = 'modular_nova/modules/modular_items/lewd_items/sounds/bang1.ogg' + drop_sound = 'modular_nova/modules/modular_items/lewd_items/sounds/bang2.ogg' pickup_sound = 'sound/items/handling/cloth_pickup.ogg' /// This is used to decide what lewd slot a toy should be able to be inserted into. /// The currently accepted defines are all prefixes with LEWD_SLOT_, and there is one for each lewd organ. - /// See code/__DEFINES/~skyrat_defines/inventory.dm for the full list. + /// See code/__DEFINES/~nova_defines/inventory.dm for the full list. var/lewd_slot_flags = NONE /// This is to keep track of where we are stored, because sometimes we might want to know that var/current_equipped_slot diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/attachable_vibrator.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/attachable_vibrator.dm similarity index 97% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/attachable_vibrator.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/attachable_vibrator.dm index 13423a26016b23..100391de360e62 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/attachable_vibrator.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/attachable_vibrator.dm @@ -8,9 +8,9 @@ icon_state = "eggvib_pink_off" base_icon_state = "eggvib" inhand_icon_state = "eggvib_pink" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' lewd_slot_flags = LEWD_SLOT_PENIS | LEWD_SLOT_VAGINA | LEWD_SLOT_NIPPLES | LEWD_SLOT_ANUS clothing_flags = INEDIBLE_CLOTHING /// Is the toy currently on diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/buttplug.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/buttplug.dm similarity index 91% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/buttplug.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/buttplug.dm index 7297472b8da483..caff776584177f 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/buttplug.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/buttplug.dm @@ -4,10 +4,10 @@ icon_state = "buttplug_pink_small" base_icon_state = "buttplug" worn_icon_state = "buttplug_pink" - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi' - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' lewd_slot_flags = LEWD_SLOT_ANUS | LEWD_SLOT_VAGINA /// Current color of the toy, can be changed, affects sprite var/current_color = "pink" diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/clamps.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/clamps.dm similarity index 78% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/clamps.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/clamps.dm index 7e7b6dda7cad7b..aa24175ebeff5c 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/clamps.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/clamps.dm @@ -4,7 +4,7 @@ name = "nipple clamps" desc = "For causing nipple pain." icon_state = "clamps" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' w_class = WEIGHT_CLASS_TINY lewd_slot_flags = LEWD_SLOT_NIPPLES /// What kind are the wearer's breasts? @@ -26,7 +26,7 @@ update_icon_state() - clamps_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi', "[initial(icon_state)]_[breast_type]_[breast_size]", ABOVE_ALL_MOB_LAYER + 0.1) //two arguments. Yes, all mob layer. Fuck person who was working on genitals, they're working wrong.ABOVE_NORMAL_TURF_LAYER + clamps_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi', "[initial(icon_state)]_[breast_type]_[breast_size]", ABOVE_ALL_MOB_LAYER + 0.1) //two arguments. Yes, all mob layer. Fuck person who was working on genitals, they're working wrong.ABOVE_NORMAL_TURF_LAYER update_icon() update_appearance() @@ -52,7 +52,7 @@ update_icon_state() - clamps_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi', "[initial(icon_state)]_[breast_type]_[breast_size]", ABOVE_ALL_MOB_LAYER + 0.1) //two arguments + clamps_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi', "[initial(icon_state)]_[breast_type]_[breast_size]", ABOVE_ALL_MOB_LAYER + 0.1) //two arguments update_icon() update_appearance() diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/condom.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/condom.dm similarity index 90% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/condom.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/condom.dm index c6ca46a83ab931..433bc0379bddd4 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/condom.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/condom.dm @@ -9,7 +9,7 @@ desc = "Don't worry, I have protection." icon_state = "condom_pack_pink" base_icon_state = "condom_pack" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' w_class = WEIGHT_CLASS_TINY /// The current color of the condom, can be changed and affects sprite var/current_color = "pink" @@ -51,7 +51,7 @@ desc = "I wonder if I can put this over my head..." icon_state = "condom_pink_unused" base_icon_state = "condom" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' w_class = WEIGHT_CLASS_TINY var/current_color = "pink" var/condom_state = "unused" @@ -76,13 +76,13 @@ condom_state = "dirty" if(prob(10)) //chance of condom to break on first time. name = "broken condom" - condom_state = CONDOM_BROKEN + condom_state = TRAIT_CONDOM_BROKEN update_icon_state() update_icon() if("dirty") name = "broken condom" - condom_state = CONDOM_BROKEN + condom_state = TRAIT_CONDOM_BROKEN update_icon_state() update_icon() diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/dildo.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/dildo.dm similarity index 90% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/dildo.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/dildo.dm index a94c833cc9bffd..e95d4c59fcaad6 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/dildo.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/dildo.dm @@ -10,9 +10,9 @@ icon_state = "dildo_human" base_icon_state = "dildo" inhand_icon_state = "dildo_human" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' /// Current design of the toy, affects sprite and can change var/current_type = "human" /// If the design has been changed before @@ -163,12 +163,12 @@ target.try_lewd_autoemote(pick(possible_emotes)) user.visible_message(span_purple("[user] [message]!")) - play_lewd_sound(loc, pick('modular_skyrat/modules/modular_items/lewd_items/sounds/bang1.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang2.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang3.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang4.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang5.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang6.ogg'), 100, TRUE) + play_lewd_sound(loc, pick('modular_nova/modules/modular_items/lewd_items/sounds/bang1.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang2.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang3.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang4.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang5.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang6.ogg'), 100, TRUE) /* * COLOUR CHANGING @@ -194,9 +194,9 @@ GLOBAL_LIST_INIT(dildo_colors, list(//mostly neon colors icon_state = "polydildo_small" base_icon_state = "polydildo" inhand_icon_state = "polydildo_small" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' current_type = null var/static/list/dildo_sizes = list() @@ -270,10 +270,10 @@ GLOBAL_LIST_INIT(dildo_colors, list(//mostly neon colors icon_state = "dildo_double" inhand_icon_state = "dildo_double" worn_icon_state = "dildo_side" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' w_class = WEIGHT_CLASS_TINY lewd_slot_flags = LEWD_SLOT_ANUS | LEWD_SLOT_VAGINA actions_types = list(/datum/action/item_action/take_dildo) @@ -389,7 +389,7 @@ GLOBAL_LIST_INIT(dildo_colors, list(//mostly neon colors /// Code for taking out/putting away the other end of the toy when one end is in you /obj/item/clothing/sextoy/dildo/double_dildo/proc/toggle(mob/living/carbon/human/user) - play_lewd_sound(user, 'modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg', 40, TRUE) + play_lewd_sound(user, 'modular_nova/modules/modular_items/lewd_items/sounds/latex.ogg', 40, TRUE) if(!end_in_hand) take_in_hand(user) @@ -419,7 +419,7 @@ GLOBAL_LIST_INIT(dildo_colors, list(//mostly neon colors /obj/item/clothing/sextoy/dildo/double_dildo_end name = "dildo side" desc = "You looking so hot!" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi' icon_state = "dildo_side" inhand_icon_state = null worn_icon_state = "" @@ -430,7 +430,7 @@ GLOBAL_LIST_INIT(dildo_colors, list(//mostly neon colors /obj/item/clothing/sextoy/dildo/double_dildo_end/Initialize(mapload) . = ..() - ADD_TRAIT(src, TRAIT_NODROP, STRAPON_TRAIT) + ADD_TRAIT(src, TRAIT_NODROP, TRAIT_STRAPON) /obj/item/clothing/sextoy/dildo/double_dildo_end/update_icon_state() . = ..() diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/discount_card.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/discount_card.dm similarity index 86% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/discount_card.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/discount_card.dm index 009663ac695aa0..b84607873010e6 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/discount_card.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/discount_card.dm @@ -4,7 +4,7 @@ desc = "A strange card with a blue lamia on the back." //yes, this is card with my character on the back. Cameo. icon_state = "lustwish_discount" inhand_icon_state = null - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' w_class = WEIGHT_CLASS_TINY //code for showing that we have something IlLeGaL diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/feather.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/feather.dm similarity index 92% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/feather.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/feather.dm index 62c586ed834c1d..e0e8e020f102f3 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/feather.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/feather.dm @@ -3,9 +3,9 @@ desc = "A rather ticklish feather that can be used in both mirth and malice." icon_state = "feather" inhand_icon_state = "feather" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' w_class = WEIGHT_CLASS_TINY /obj/item/tickle_feather/attack(mob/living/carbon/human/target, mob/living/carbon/human/user) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/fleshlight.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/fleshlight.dm similarity index 80% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/fleshlight.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/fleshlight.dm index 3099ce8c3d23a8..bd07b118fdccfa 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/fleshlight.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/fleshlight.dm @@ -4,9 +4,9 @@ icon_state = "fleshlight_pink" base_icon_state = "fleshlight" inhand_icon_state = "fleshlight_pink" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' w_class = WEIGHT_CLASS_SMALL /// Current color of the toy, can be changed, affects sprite var/current_color = "pink" @@ -77,9 +77,9 @@ target.adjust_arousal(6) target.adjust_pleasure(9) user.visible_message(span_purple("[user] [message]!")) - play_lewd_sound(loc, pick('modular_skyrat/modules/modular_items/lewd_items/sounds/bang1.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang2.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang3.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang4.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang5.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang6.ogg'), 70, 1, -1) + play_lewd_sound(loc, pick('modular_nova/modules/modular_items/lewd_items/sounds/bang1.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang2.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang3.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang4.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang5.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/bang6.ogg'), 70, 1, -1) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/kinky_shocker.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/kinky_shocker.dm similarity index 97% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/kinky_shocker.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/kinky_shocker.dm index 6e67c51fe34b3d..b08c036fdf2d3e 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/kinky_shocker.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/kinky_shocker.dm @@ -4,9 +4,9 @@ icon_state = "shocker_off" base_icon_state = "shocker" inhand_icon_state = "shocker_off" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' w_class = WEIGHT_CLASS_TINY /// If the shocker is on or not var/shocker_on = FALSE diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/leather_whip.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/leather_whip.dm similarity index 89% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/leather_whip.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/leather_whip.dm index 83ac7d1ca0ba26..7c0cc7f0dabd82 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/leather_whip.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/leather_whip.dm @@ -7,9 +7,9 @@ worn_icon_state = "leather_whip" base_icon_state = "leather" inhand_icon_state = null - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi' - worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/mask_muzzled.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi' + worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/mask_muzzled.dmi' w_class = WEIGHT_CLASS_NORMAL hitsound = 'sound/weapons/whip.ogg' clothing_flags = INEDIBLE_CLOTHING @@ -53,10 +53,10 @@ // Speech handler for moansing when talking /obj/item/clothing/mask/leatherwhip/handle_speech(datum/source, list/speech_args) speech_args[SPEECH_MESSAGE] = pick((prob(moans_alt_probability) && LAZYLEN(moans_alt)) ? moans_alt : moans) - play_lewd_sound(loc, pick('modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f1.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f2.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f3.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f4.ogg'), 70, 1, -1) + play_lewd_sound(loc, pick('modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f1.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f2.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f3.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f4.ogg'), 70, 1, -1) /// Radial menu helper /obj/item/clothing/mask/leatherwhip/proc/populate_whip_designs() @@ -81,7 +81,7 @@ update_icon_state() - whip_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi', "[base_icon_state]_[current_whip_form]", ABOVE_MOB_LAYER + 0.1) //two arguments. Yes, all mob layer. Fuck person who was working on genitals, they're working wrong.ABOVE_NORMAL_TURF_LAYER + whip_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi', "[base_icon_state]_[current_whip_form]", ABOVE_MOB_LAYER + 0.1) //two arguments. Yes, all mob layer. Fuck person who was working on genitals, they're working wrong.ABOVE_NORMAL_TURF_LAYER update_icon() update_appearance() @@ -137,7 +137,7 @@ update_icon_state() - whip_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi', "[base_icon_state]_[current_whip_form]", ABOVE_MOB_LAYER + 0.1) //two arguments. Yes, all mob layer. Fuck person who was working on genitals, they're working wrong.ABOVE_NORMAL_TURF_LAYER + whip_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi', "[base_icon_state]_[current_whip_form]", ABOVE_MOB_LAYER + 0.1) //two arguments. Yes, all mob layer. Fuck person who was working on genitals, they're working wrong.ABOVE_NORMAL_TURF_LAYER update_icon() update_appearance() @@ -221,7 +221,7 @@ target.try_lewd_autoemote(pick("gasp", "choke", "moan")) target.adjust_arousal(3) target.adjust_pain(5) - play_lewd_sound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg', 80) + play_lewd_sound(loc, 'modular_nova/modules/modular_items/lewd_items/sounds/latex.ogg', 80) if(BODY_ZONE_PRECISE_GROIN) targetedsomewhere = TRUE diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/magic_wand.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/magic_wand.dm similarity index 89% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/magic_wand.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/magic_wand.dm index 631ae2a0b4de41..1d5830b0fac8ac 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/magic_wand.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/magic_wand.dm @@ -5,10 +5,10 @@ base_icon_state = "magicwand" worn_icon_state = "magicwand" inhand_icon_state = "magicwand" - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi' - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' /// What mode the vibrator is on var/vibration_mode = "off" /// Looping sound called on process() @@ -33,7 +33,7 @@ /obj/item/clothing/sextoy/magic_wand/Initialize(mapload) . = ..() - magicwand_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi', "magicwand", ABOVE_MOB_LAYER + 0.1) //two arguments + magicwand_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi', "magicwand", ABOVE_MOB_LAYER + 0.1) //two arguments update_icon_state() update_icon() @@ -158,7 +158,7 @@ target.try_lewd_autoemote(pick("twitch_s", "moan")) user.visible_message(span_purple("[user] [message]!")) - play_lewd_sound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/vibrate.ogg', (vibration_mode == "low" ? 10 : (vibration_mode == "high" ? 30 : 20)), TRUE, pref_to_check = /datum/preference/toggle/erp/sex_toy_sounds) + play_lewd_sound(loc, 'modular_nova/modules/modular_items/lewd_items/sounds/vibrate.ogg', (vibration_mode == "low" ? 10 : (vibration_mode == "high" ? 30 : 20)), TRUE, pref_to_check = /datum/preference/toggle/erp/sex_toy_sounds) /obj/item/clothing/sextoy/magic_wand/attack_self(mob/user) toggle_mode() diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_items/pinkcuffs.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/pinkcuffs.dm new file mode 100644 index 00000000000000..bae11183d2ce13 --- /dev/null +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/pinkcuffs.dm @@ -0,0 +1,28 @@ +/obj/item/restraints/handcuffs/lewd + name = "kinky handcuffs" + desc = "Fake handcuffs meant for erotic roleplay." + icon_state = "pinkcuffs" + inhand_icon_state = "pinkcuffs" + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi' + worn_icon_state = "pinkcuffs" + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + breakouttime = 1 SECONDS + +// Additionally, we will process the installation of the desired appearance, to bypass the bug in the general code +/obj/item/restraints/handcuffs/lewd/apply_cuffs(mob/living/carbon/target, mob/user, dispense = 0) + . = ..() + src.icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + src.icon_state = "pinkcuffs" + src.worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi' + src.worn_icon_state = "pinkcuffs" + src.lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + src.righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + + // Similar code in general procedures does not correctly set the appearance + target.remove_overlay(HANDCUFF_LAYER) + if(!target.handcuffed) + return + target.overlays_standing[HANDCUFF_LAYER] = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi', "pinkcuffs", -HANDCUFF_LAYER) + target.apply_overlay(HANDCUFF_LAYER) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/serviette.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/serviette.dm similarity index 93% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/serviette.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/serviette.dm index 2a00fd85f26d91..4964335cea69e4 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/serviette.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/serviette.dm @@ -2,7 +2,7 @@ name = "serviette" desc = "To clean all the mess." icon_state = "serviette_clean" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' /// How much time it takes to clean something using it var/cleanspeed = 5 SECONDS /// Which item spawns after it's used @@ -14,7 +14,7 @@ name = "dirty serviette" desc = "Eww... Throw it in the trash!" icon_state = "serviette_dirty" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' w_class = WEIGHT_CLASS_TINY /obj/item/serviette/afterattack(atom/target, mob/user, proximity) @@ -76,7 +76,7 @@ desc = "I wonder why LustWish makes them..." icon_state = "serviettepack_4" base_icon_state = "serviettepack" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' /// A count of how many serviettes are left in the pack var/number_remaining = 4 w_class = WEIGHT_CLASS_SMALL diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/shibari.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/shibari.dm similarity index 97% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/shibari.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/shibari.dm index 612ed54be9651e..6bfd4aec7f43ad 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/shibari.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/shibari.dm @@ -6,7 +6,7 @@ /obj/item/stack/shibari_rope name = "shibari ropes" desc = "Coil of bondage ropes." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' icon_state = "shibari_rope" amount = 1 merge_type = /obj/item/stack/shibari_rope @@ -317,15 +317,15 @@ switch(tightness) if(ROPE_TIGHTNESS_HIGH) tightness = ROPE_TIGHTNESS_LOW - play_lewd_sound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg', 25) + play_lewd_sound(loc, 'modular_nova/modules/modular_items/lewd_items/sounds/latex.ogg', 25) balloon_alert(user, span_notice("You slightly tightened the ropes")) if(ROPE_TIGHTNESS_LOW) tightness = ROPE_TIGHTNESS_MED - play_lewd_sound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg', 50) + play_lewd_sound(loc, 'modular_nova/modules/modular_items/lewd_items/sounds/latex.ogg', 50) balloon_alert(user, span_notice("You moderately tightened the ropes")) if(ROPE_TIGHTNESS_MED) tightness = ROPE_TIGHTNESS_HIGH - play_lewd_sound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg', 75) + play_lewd_sound(loc, 'modular_nova/modules/modular_items/lewd_items/sounds/latex.ogg', 75) balloon_alert(user, span_notice("You strongly tightened the ropes")) #undef ROPE_TIGHTNESS_LOW diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/size_items.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/size_items.dm similarity index 94% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/size_items.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/size_items.dm index d5a4b7d77ea96e..05232987363d40 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/size_items.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/size_items.dm @@ -8,8 +8,8 @@ /obj/item/clothing/neck/size_collar name = "size collar" desc = "A shiny black collar embeded with technology that allows the user to change their own size." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi' icon_state = "collar_black" /// Have we given the user the warning message yet? var/warning_given = FALSE @@ -120,7 +120,7 @@ human_parent.dna.update_body_size() return TRUE -/datum/component/temporary_size/Destroy(force, silent) +/datum/component/temporary_size/Destroy(force) apply_size(original_size) UnregisterSignal(parent, COMSIG_ENTER_AREA) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/spanking_pad.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/spanking_pad.dm similarity index 87% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/spanking_pad.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/spanking_pad.dm index dcab8ba06e48aa..4afa7d7e3d6674 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/spanking_pad.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/spanking_pad.dm @@ -4,9 +4,9 @@ icon_state = "spankpad_pink" base_icon_state = "spankpad" inhand_icon_state = "spankpad_pink" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' w_class = WEIGHT_CLASS_SMALL /// Current color, can be changed and affects sprite var/current_color = "pink" @@ -82,4 +82,4 @@ if(prob(10) && (target.stat != DEAD)) target.apply_status_effect(/datum/status_effect/subspace) user.visible_message(span_purple("[user] [message]!")) - play_lewd_sound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/slap.ogg', 100, 1, -1) + play_lewd_sound(loc, 'modular_nova/modules/modular_items/lewd_items/sounds/slap.ogg', 100, 1, -1) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/torture_candle.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/torture_candle.dm similarity index 94% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/torture_candle.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/torture_candle.dm index fe0582abea582c..3d705a2407157a 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/torture_candle.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/torture_candle.dm @@ -4,9 +4,9 @@ /obj/item/bdsm_candle name = "soy candle" desc = "A candle with low melting temperature." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' icon_state = "candle_pink_off" base_icon_state = "candle" inhand_icon_state = "candle_pink_off" @@ -196,8 +196,8 @@ if(prob(50)) attacked.try_lewd_autoemote(pick("twitch_s" , "gasp", "shiver")) user.visible_message(span_purple("[user] [message]!")) - play_lewd_sound(loc, pick('modular_skyrat/modules/modular_items/lewd_items/sounds/vax1.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/vax2.ogg'), 70, TRUE) + play_lewd_sound(loc, pick('modular_nova/modules/modular_items/lewd_items/sounds/vax1.ogg', + 'modular_nova/modules/modular_items/lewd_items/sounds/vax2.ogg'), 70, TRUE) #undef CANDLE_LUMINOSITY #undef PAIN_DEFAULT diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibrator.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/vibrator.dm similarity index 96% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibrator.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/vibrator.dm index c8174fe64e54f4..d12ecba700e14b 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibrator.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/vibrator.dm @@ -8,9 +8,9 @@ icon_state = "vibrator_pink_off" base_icon_state = "vibrator" inhand_icon_state = "vibrator_pink" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' lewd_slot_flags = LEWD_SLOT_VAGINA | LEWD_SLOT_ANUS /// If the toy is on or not var/toy_on = FALSE @@ -167,7 +167,7 @@ if(!targetedsomewhere) return user.visible_message(span_purple("[user] [message]!")) - play_lewd_sound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/vibrate.ogg', 10, TRUE) + play_lewd_sound(loc, 'modular_nova/modules/modular_items/lewd_items/sounds/vibrate.ogg', 10, TRUE) /obj/item/clothing/sextoy/vibrator/attack_self(mob/user, obj/item/attack_item) toggle_mode() diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibroring.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/vibroring.dm similarity index 96% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibroring.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/vibroring.dm index dd531231d240bc..986bd04aa2e707 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibroring.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/vibroring.dm @@ -3,7 +3,7 @@ desc = "A ring toy used to keep your erection going strong." icon_state = "vibroring_pink_off" base_icon_state = "vibroring" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' /// If the toy is currently on or not var/toy_on = FALSE /// The current color of the toy, cna be changed and affects sprite diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_machinery/lustwish.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_machinery/lustwish.dm new file mode 100644 index 00000000000000..90dc7d236a2789 --- /dev/null +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_machinery/lustwish.dm @@ -0,0 +1,221 @@ +/obj/machinery/vending/dorms + name = "LustWish" + desc = "A vending machine with various toys. Not for the faint of heart." + icon_state = "lustwish" + base_icon_state = "lustwish" + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/lustwish.dmi' + light_mask = "lustwish-light-mask" + age_restrictions = TRUE + ///Has the discount card been used on the vending machine? + var/card_used = FALSE + product_ads = "Try me!;Kinky!;Lewd and fun!;Hey you, yeah you... wanna take a look at my collection?;Come on, take a look!;Remember, always adhere to Nanotrasen corporate policy!;Don't forget to use protection!" + vend_reply = "Enjoy!;We're glad to satisfy your desires!" + + //STUFF SOLD HERE// + product_categories = list( + list( + "name" = "Toys", + "icon" = FA_ICON_MAGIC_WAND_SPARKLES, + "products" = list( + //Sex Toys + /obj/item/clothing/sextoy/buttplug = 6, + /obj/item/clothing/sextoy/nipple_clamps = 4, + /obj/item/clothing/sextoy/eggvib = 8, + /obj/item/clothing/sextoy/eggvib/signalvib = 8, + /obj/item/assembly/signaler = 8, + /obj/item/clothing/sextoy/vibroring = 6, + + //Dildo (Use-on-crotch) + /obj/item/clothing/sextoy/dildo = 8, + /obj/item/clothing/sextoy/dildo/double_dildo = 3, + /obj/item/clothing/sextoy/dildo/custom_dildo = 8, + /obj/item/clothing/sextoy/fleshlight = 8, + /obj/item/clothing/sextoy/magic_wand = 4, + /obj/item/clothing/sextoy/vibrator = 4, + + //belt + /obj/item/clothing/strapon = 6, + + //Multi-use + + /obj/item/kinky_shocker = 4, + /obj/item/clothing/mask/leatherwhip = 4, + /obj/item/bdsm_candle = 4, + /obj/item/spanking_pad = 4, + /obj/item/tickle_feather = 8, + /obj/item/borg/upgrade/dominatrixmodule = 5, + ), + ), + list( + "name" = "Outfits", + "icon" = FA_ICON_SHIRT, + "products" = list( + /obj/item/clothing/under/pants/nova/chaps = 4, + /obj/item/clothing/under/costume/bunnylewd = 5, + /obj/item/clothing/under/costume/bunnylewd/white = 5, + /obj/item/clothing/head/costume/rabbitears = 4,//Ears together, right after Bunny Suit. + /obj/item/clothing/head/costume/kitty = 4, + + /obj/item/clothing/head/domina_cap = 5, + /obj/item/clothing/shoes/latex_heels/domina_heels = 4, + /obj/item/clothing/gloves/evening = 5, + + /obj/item/clothing/under/misc/nova/gear_harness = 6,//Important "not-nude" outfit + /obj/item/clothing/shoes/jackboots/knee = 3, + + /obj/item/clothing/under/misc/latex_catsuit = 8, + /obj/item/clothing/gloves/latex_gloves = 8, + /obj/item/clothing/shoes/latex_heels = 4, + /obj/item/clothing/shoes/latex_socks = 8, + + /obj/item/storage/belt/erpbelt = 5,//Leather Belt, holds a lot of tools. + + /obj/item/clothing/head/costume/nova/maid = 5, + /obj/item/clothing/under/costume/maid = 5, + /obj/item/clothing/under/rank/civilian/janitor/maid = 5, + /obj/item/clothing/under/costume/lewdmaid = 5, + + /obj/item/clothing/under/stripper_outfit = 5, + /obj/item/clothing/glasses/nice_goggles = 1, //easter egg, don't touch plz + ), + ), + list( + "name" = "Restraints", + "icon" = FA_ICON_HANDCUFFS, + "products" = list( + //Sex toys + /obj/item/restraints/handcuffs/lewd = 8, + /obj/item/stack/shibari_rope/full = 10, + /obj/item/stack/shibari_rope/glow/full = 10, + + //clothing facial/head + /obj/item/clothing/mask/ballgag = 8, + /obj/item/clothing/mask/ballgag/choking = 8, + /obj/item/clothing/mask/muzzle/ring = 4, + /obj/item/clothing/head/deprivation_helmet = 5, + /obj/item/clothing/glasses/blindfold/kinky = 5, + /obj/item/clothing/ears/kinky_headphones = 5, + /obj/item/clothing/mask/gas/bdsm_mask = 5, + /obj/item/reagent_containers/cup/lewd_filter = 5, + /obj/item/clothing/glasses/hypno = 4, + + //neck + /obj/item/key/collar = 48, + /obj/item/clothing/neck/kink_collar = 8, + /obj/item/clothing/neck/human_petcollar = 8, + /obj/item/clothing/neck/human_petcollar/choker = 8, + /obj/item/clothing/neck/human_petcollar/thinchoker = 8, + /obj/item/clothing/neck/human_petcollar/locked/bell = 8, + /obj/item/clothing/neck/human_petcollar/locked/cow = 8, + /obj/item/clothing/neck/human_petcollar/locked/cross = 8, + /obj/item/clothing/neck/human_petcollar/locked/spike = 8, + + //torso clothing + /obj/item/clothing/suit/straight_jacket/latex_straight_jacket = 5, + /obj/item/clothing/suit/straight_jacket/shackles = 4, + + //hands + /obj/item/clothing/gloves/ball_mittens = 8, + ), + ), + list( + "name" = "Consumables", + "icon" = FA_ICON_VIAL, + "products" = list( + //Sex toys + /obj/item/condom_pack = 20, + /obj/item/serviette_pack = 10, + /obj/item/fancy_pillow = 32, + + //chems + /obj/item/reagent_containers/pill/crocin = 20, + /obj/item/reagent_containers/pill/camphor = 10, + /obj/item/reagent_containers/cup/bottle/crocin = 6, + /obj/item/reagent_containers/cup/bottle/camphor = 3, + /obj/item/reagent_containers/cup/bottle/succubus_milk = 6, //Those are legal 'cause you can just turn off prefs in round in "CLOWN SMOKE MACHINE+PENIS ENLARGEMENT CHEMICAL CASE". Yes, i have special code-phrase for this. I've seen some shit. + /obj/item/reagent_containers/cup/bottle/incubus_draft = 6, + ), + ), + list( + "name" = "Structures", + "icon" = FA_ICON_HAMMER, + "products" = list( + //fur niture //haha you got it + /obj/item/storage/box/bdsmbed_kit = 4, + /obj/item/storage/box/milking_kit = 4, + /obj/item/storage/box/shibari_stand = 4, + /obj/item/storage/box/strippole_kit = 4, + /obj/item/storage/box/xstand_kit = 4, + ), + ), + ) + + premium = list( + /obj/item/clothing/neck/human_petcollar/locked/holo = 3, + /obj/item/clothing/neck/size_collar = 8,//It only works in the Interlink anyways + ) + + contraband = list( + /obj/item/electropack/shockcollar = 4, + /obj/item/clothing/neck/kink_collar/locked = 4, + /obj/item/clothing/neck/mind_collar = 2, + /obj/item/clothing/under/costume/jabroni = 4, + /obj/item/clothing/neck/human_petcollar/locked = 4, + /obj/item/clothing/suit/straight_jacket/kinky_sleepbag = 2, //my favorite thing, spent 1 month on it. Don't remove please. + /obj/item/disk/nifsoft_uploader/dorms/contract = 5, + /obj/item/reagent_containers/pill/hexacrocin = 10, + /obj/item/reagent_containers/pill/pentacamphor = 5, + /obj/item/reagent_containers/cup/bottle/hexacrocin = 4, + /obj/item/reagent_containers/cup/bottle/pentacamphor = 2) + + refill_canister = /obj/item/vending_refill/lustwish + payment_department = ACCOUNT_SRV + default_price = PAYCHECK_CREW * 0.6 + extra_price = PAYCHECK_COMMAND * 2.5 + +//Changes the settings on the vendor, if the user uses the discount card. +/obj/machinery/vending/dorms/attackby(obj/item/used_item, mob/living/user, params) + if(!istype(used_item, /obj/item/lustwish_discount)) + return ..() + + user.visible_message(span_boldnotice("Something changes in [src] with a loud clunk.")) + card_used = !card_used + + if(card_used) + default_price = 0 + extra_price = 0 + + return + + default_price = initial(default_price) + extra_price = initial(extra_price) + +///Performs checks to see if the user can change the color on the vending machine. +/obj/machinery/vending/dorms/proc/check_menu(mob/living/user, obj/item/multitool) + if(!istype(user)) + return FALSE + if(user.incapacitated()) + return FALSE + if(!multitool || !user.is_holding(multitool)) + return FALSE + + return TRUE + +/obj/machinery/vending/dorms/Initialize(mapload) + . = ..() + update_icon_state() + update_icon() + +/obj/machinery/vending/dorms/update_icon_state() + ..() + if(machine_stat & BROKEN) + icon_state = "[base_icon_state]-broken" + return + + icon_state = "[base_icon_state][powered() ? null : "-off"]" + +//Refill item +/obj/item/vending_refill/lustwish + machine_name = "LustWish" + icon_state = "lustwish_refill" + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm similarity index 96% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm index 246e00ed861c89..f5709cc6553730 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm @@ -12,11 +12,11 @@ /obj/structure/chair/milking_machine name = "milking machine" desc = "A stationary device for milking... things." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi' icon_state = "milking_pink_off" max_buckled_mobs = 1 item_chair = null - flags_1 = NODECONSTRUCT_1 + obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION max_integrity = 75 var/static/list/milkingmachine_designs @@ -108,13 +108,13 @@ semen_vessel.reagents.maximum_volume = MILKING_PUMP_MAX_CAPACITY current_vessel = milk_vessel - vessel_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi', "liquid_empty", LYING_MOB_LAYER) + vessel_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi', "liquid_empty", LYING_MOB_LAYER) vessel_overlay.name = "vessel_overlay" - indicator_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi', "indicator_empty", ABOVE_MOB_LAYER + 0.1) + indicator_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi', "indicator_empty", ABOVE_MOB_LAYER + 0.1) indicator_overlay.name = "indicator_overlay" - locks_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi', "locks_open", BELOW_MOB_LAYER) + locks_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi', "locks_open", BELOW_MOB_LAYER) locks_overlay.name = "locks_overlay" - organ_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi', "none", ABOVE_MOB_LAYER) + organ_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi', "none", ABOVE_MOB_LAYER) organ_overlay.name = "organ_overlay" add_overlay(locks_overlay) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/washing_machine.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_machinery/washing_machine.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/washing_machine.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_machinery/washing_machine.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_organs/_genital.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_organs/_genital.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_organs/_genital.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_organs/_genital.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_organs/breasts.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_organs/breasts.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_organs/breasts.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_organs/breasts.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_organs/testicles.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_organs/testicles.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_organs/testicles.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_organs/testicles.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_organs/vagina.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_organs/vagina.dm similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_organs/vagina.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_organs/vagina.dm diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_quirks.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_quirks.dm similarity index 92% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_quirks.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_quirks.dm index 3473ce277dac31..395c4b1230a5cd 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_quirks.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_quirks.dm @@ -155,19 +155,19 @@ /datum/brain_trauma/very_special/bimbo/on_gain() owner.add_mood_event("bimbo", /datum/mood_event/bimbo) - if(!HAS_TRAIT_FROM(owner, TRAIT_BIMBO, LEWDCHEM_TRAIT)) - ADD_TRAIT(owner, TRAIT_BIMBO, LEWDCHEM_TRAIT) + if(!HAS_TRAIT_FROM(owner, TRAIT_BIMBO, TRAIT_LEWDCHEM)) + ADD_TRAIT(owner, TRAIT_BIMBO, TRAIT_LEWDCHEM) RegisterSignal(owner, COMSIG_MOB_SAY, PROC_REF(handle_speech)) - if(!HAS_TRAIT_FROM(owner, TRAIT_MASOCHISM, APHRO_TRAIT)) - ADD_TRAIT(owner, TRAIT_MASOCHISM, APHRO_TRAIT) + if(!HAS_TRAIT_FROM(owner, TRAIT_MASOCHISM, TRAIT_APHRO)) + ADD_TRAIT(owner, TRAIT_MASOCHISM, TRAIT_APHRO) /datum/brain_trauma/very_special/bimbo/on_lose() owner.clear_mood_event("bimbo") - if(HAS_TRAIT_FROM(owner, TRAIT_BIMBO, LEWDCHEM_TRAIT)) - REMOVE_TRAIT(owner, TRAIT_BIMBO, LEWDCHEM_TRAIT) + if(HAS_TRAIT_FROM(owner, TRAIT_BIMBO, TRAIT_LEWDCHEM)) + REMOVE_TRAIT(owner, TRAIT_BIMBO, TRAIT_LEWDCHEM) UnregisterSignal(owner, COMSIG_MOB_SAY) - if(HAS_TRAIT_FROM(owner, TRAIT_MASOCHISM, APHRO_TRAIT)) - REMOVE_TRAIT(owner, TRAIT_MASOCHISM, APHRO_TRAIT) + if(HAS_TRAIT_FROM(owner, TRAIT_MASOCHISM, TRAIT_APHRO)) + REMOVE_TRAIT(owner, TRAIT_MASOCHISM, TRAIT_APHRO) //Mood boost /datum/mood_event/bimbo @@ -195,13 +195,13 @@ /datum/quirk/masochism/post_add() . = ..() var/mob/living/carbon/human/affected_human = quirk_holder - ADD_TRAIT(affected_human, TRAIT_MASOCHISM, LEWDQUIRK_TRAIT) + ADD_TRAIT(affected_human, TRAIT_MASOCHISM, TRAIT_LEWDQUIRK) affected_human.pain_limit = 60 /datum/quirk/masochism/remove() . = ..() var/mob/living/carbon/human/affected_human = quirk_holder - REMOVE_TRAIT(affected_human, TRAIT_MASOCHISM, LEWDQUIRK_TRAIT) + REMOVE_TRAIT(affected_human, TRAIT_MASOCHISM, TRAIT_LEWDQUIRK) affected_human.pain_limit = 0 /* @@ -219,11 +219,11 @@ /datum/brain_trauma/very_special/neverboner/on_gain() var/mob/living/carbon/human/affected_human = owner - ADD_TRAIT(affected_human, TRAIT_NEVERBONER, APHRO_TRAIT) + ADD_TRAIT(affected_human, TRAIT_NEVERBONER, TRAIT_APHRO) /datum/brain_trauma/very_special/neverboner/on_lose() var/mob/living/carbon/human/affected_human = owner - REMOVE_TRAIT(affected_human, TRAIT_NEVERBONER, APHRO_TRAIT) + REMOVE_TRAIT(affected_human, TRAIT_NEVERBONER, TRAIT_APHRO) /* * SADISM @@ -289,6 +289,7 @@ desc = "You love being tied up." value = 0 //ERP Traits don't have price. They are priceless. Ba-dum-tss mob_trait = TRAIT_ROPEBUNNY + medical_record_text = "Subject has a fondness for restraints." gain_text = span_danger("You really want to be restrained for some reason.") lose_text = span_notice("Being restrained doesn't arouse you anymore.") icon = FA_ICON_HANDCUFFS @@ -297,12 +298,12 @@ /datum/quirk/ropebunny/post_add() . = ..() var/mob/living/carbon/human/affected_mob = quirk_holder - ADD_TRAIT(affected_mob, TRAIT_ROPEBUNNY, LEWDQUIRK_TRAIT) + ADD_TRAIT(affected_mob, TRAIT_ROPEBUNNY, TRAIT_LEWDQUIRK) /datum/quirk/ropebunny/remove() . = ..() var/mob/living/carbon/human/affected_mob = quirk_holder - REMOVE_TRAIT(affected_mob, TRAIT_ROPEBUNNY, LEWDQUIRK_TRAIT) + REMOVE_TRAIT(affected_mob, TRAIT_ROPEBUNNY, TRAIT_LEWDQUIRK) //Rigger code /datum/quirk/rigger @@ -310,6 +311,7 @@ desc = "You find the weaving of rope knots on the body wonderful." value = 0 //ERP Traits don't have price. They are priceless. Ba-dum-tss mob_trait = TRAIT_RIGGER + medical_record_text = "Subject has a increased dexterity when tying knots." gain_text = span_danger("Suddenly you understand rope weaving much better than before.") lose_text = span_notice("Rope knots looks complicated again.") icon = FA_ICON_CHAIN_BROKEN @@ -318,12 +320,12 @@ /datum/quirk/rigger/post_add() . = ..() var/mob/living/carbon/human/affected_mob = quirk_holder - ADD_TRAIT(affected_mob, TRAIT_RIGGER, LEWDQUIRK_TRAIT) + ADD_TRAIT(affected_mob, TRAIT_RIGGER, TRAIT_LEWDQUIRK) /datum/quirk/rigger/remove() . = ..() var/mob/living/carbon/human/affected_mob = quirk_holder - REMOVE_TRAIT(affected_mob, TRAIT_RIGGER, LEWDQUIRK_TRAIT) + REMOVE_TRAIT(affected_mob, TRAIT_RIGGER, TRAIT_LEWDQUIRK) /datum/mood_event/sadistic description = span_purple("Others' suffering makes me happier\n") diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm similarity index 95% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm index 16ac8cc1a25716..23cae8148d4166 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm @@ -4,14 +4,14 @@ /obj/structure/bed/bdsm_bed name = "bdsm bed" desc = "A latex bed with D-rings on the sides. Looks comfortable." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi' icon_state = "bdsm_bed" max_integrity = 50 - flags_1 = NODECONSTRUCT_1 + obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION /obj/item/bdsm_bed_kit name = "bdsm bed construction kit" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi' throwforce = 0 icon_state = "bdsm_bed_kit" w_class = WEIGHT_CLASS_HUGE @@ -84,7 +84,7 @@ /obj/structure/chair/x_stand name = "x stand" desc = "A stand for buckling people in an X shape." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi' icon_state = "xstand_open" base_icon_state = "xstand" max_buckled_mobs = 1 @@ -92,7 +92,7 @@ ///What state is the stand currently in? This is here for sprites. var/stand_state = "open" ///What overlay is the stand using when stand_state is set to closed? - var/static/mutable_appearance/xstand_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi', "xstand_overlay", LYING_MOB_LAYER) + var/static/mutable_appearance/xstand_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi', "xstand_overlay", LYING_MOB_LAYER) ///What human is currently buckled in? var/mob/living/carbon/human/current_mob = null item_chair = null diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/construction.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/construction.dm new file mode 100644 index 00000000000000..ef70f268a67ccd --- /dev/null +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/construction.dm @@ -0,0 +1,122 @@ +///The item used as the basis for construction kits for organic interface +/obj/item/construction_kit + name = "construction kit" + desc = "Used for constructing various things" + w_class = WEIGHT_CLASS_BULKY + obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION + throwforce = 0 + ///What is the path for the resulting structure generating by using this item? + var/obj/structure/resulting_structure = /obj/structure/chair + ///How much time does it take to construct an item using this? + var/construction_time = 8 SECONDS + ///What color is the item using? If none, leave this blank. + var/current_color = "" + +/obj/item/construction_kit/Initialize(mapload) + . = ..() + name = "[initial(resulting_structure.name)] [name]" + +/obj/item/construction_kit/examine(mob/user) + . = ..() + . += span_purple("[src] can be assembled by using <b>Ctrl+Shift+Click</b> while [src] is on the floor.") + +/obj/item/construction_kit/CtrlShiftClick(mob/user) + . = ..() + if(. == FALSE) + return FALSE + + if((item_flags & IN_INVENTORY) || (item_flags & IN_STORAGE)) + return FALSE + + to_chat(user, span_notice("You begin to assemble [src]...")) + if(!do_after(user, construction_time, src)) + to_chat(user, span_warning("You fail to assemble [src]!")) + return FALSE + + var/obj/structure/chair/final_structure = new resulting_structure (get_turf(user)) + if(current_color && istype(final_structure, /obj/structure/chair/milking_machine)) + var/obj/structure/chair/milking_machine/new_milker = final_structure + new_milker.machine_color = current_color + + if(current_color == "pink") + new_milker.icon_state = "milking_pink_off" + else + new_milker.icon_state = "milking_teal_off" + + if(istype(final_structure, /obj/structure/chair/shibari_stand)) + var/obj/structure/chair/shibari_stand/stand = final_structure + stand.set_greyscale(greyscale_colors) + + qdel(src) + to_chat(user, span_notice("You assemble [src].")) + return TRUE + +// MILKER + +/obj/item/construction_kit/milker + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi' + icon_state = "milkbuild_pink" + base_icon_state = "milkbuild" + current_color = "pink" + resulting_structure = /obj/structure/chair/milking_machine + +/obj/item/construction_kit/milker/Initialize(mapload) + . = ..() + update_icon_state() + update_icon() + +/obj/item/construction_kit/milker/update_icon_state() + icon_state = "[initial(base_icon_state)]_[current_color]" + return ..() + + +/obj/item/construction_kit/pole + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/dancing_pole.dmi' + icon_state = "pole_base" + resulting_structure = /obj/structure/stripper_pole + +// BDSM FURNITURE +/obj/item/construction_kit/bdsm + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi' + +// X-STAND + +/obj/item/construction_kit/bdsm/x_stand + icon_state = "xstand_kit" + resulting_structure = /obj/structure/chair/x_stand + +// RESTRAINED BED + +/obj/item/construction_kit/bdsm/bed + icon_state = "bdsm_bed_kit" + resulting_structure = /obj/structure/bed/bdsm_bed + +/obj/item/construction_kit/bdsm/shibari + icon_state = "shibari_kit" + greyscale_config = /datum/greyscale_config/shibari_stand_item + greyscale_colors = "#bd8fcf" + resulting_structure = /obj/structure/chair/shibari_stand + +// SHIBARI STAND + +/obj/item/construction_kit/bdsm/shibari/examine(mob/user) + .=..() + . += span_purple("[src]'s color can be customized with <b>Ctrl+Click</b>.") + +//to change model +/obj/item/construction_kit/bdsm/shibari/CtrlClick(mob/user) + . = ..() + if(. == FALSE) + return FALSE + + var/list/allowed_configs = list() + allowed_configs += "[greyscale_config]" + var/datum/greyscale_modify_menu/menu = new( + src, usr, allowed_configs, null, \ + starting_icon_state = icon_state, \ + starting_config = greyscale_config, \ + starting_colors = greyscale_colors + ) + menu.ui_interact(usr) + to_chat(user, span_notice("You switch the frame's plastic fittings color.")) + return TRUE diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm similarity index 98% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm index 202e20f73535b3..b382591571f0ca 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm @@ -1,7 +1,7 @@ /obj/structure/stripper_pole name = "stripper pole" desc = "A pole fastened to the ceiling and floor, used to show of one's goods to company." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/dancing_pole.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/dancing_pole.dmi' icon_state = "pole_purple_off" base_icon_state = "pole" density = TRUE diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/pillow.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/pillow.dm similarity index 88% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/pillow.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_structures/pillow.dm index 0ac4d57fafb219..f23c6e1d626a08 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/pillow.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/pillow.dm @@ -7,9 +7,9 @@ /obj/item/fancy_pillow name = "pillow" desc = "A big, soft pillow." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' + lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' + righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' icon_state = "pillow_pink_round" base_icon_state = "pillow" inhand_icon_state = "pillow_pink_round" @@ -99,7 +99,7 @@ /obj/effect/temp_visual/feathers name = "feathers" icon_state = "feathers" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_decals/lewd_decals.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_decals/lewd_decals.dmi' duration = 14 /datum/effect_system/feathers @@ -123,7 +123,7 @@ if(prob(30)) affected_mob.emote(pick("laugh", "giggle")) user.visible_message(span_notice("[user] [message]!")) - playsound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/hug.ogg', 50, 1, -1) + playsound(loc, 'modular_nova/modules/modular_items/lewd_items/sounds/hug.ogg', 50, 1, -1) if(BODY_ZONE_CHEST) var/message = "" @@ -131,7 +131,7 @@ if(prob(30)) affected_mob.emote(pick("laugh", "giggle")) user.visible_message(span_notice("[user] [message]!")) - playsound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/hug.ogg', 50, 1, -1) + playsound(loc, 'modular_nova/modules/modular_items/lewd_items/sounds/hug.ogg', 50, 1, -1) else var/message = "" @@ -139,7 +139,7 @@ if(prob(30)) affected_mob.emote(pick("laugh", "giggle")) user.visible_message(span_notice("[user] [message]!")) - playsound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/hug.ogg', 50, 1, -1) + playsound(loc, 'modular_nova/modules/modular_items/lewd_items/sounds/hug.ogg', 50, 1, -1) //spawning pillow on the ground when clicking on pillow by LBM @@ -163,7 +163,7 @@ /obj/structure/bed/pillow_tiny name = "pillow" desc = "A tiny pillow, for tiny heads." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi' icon_state = "pillow_pink_round" base_icon_state = "pillow" var/current_color = "pink" @@ -249,7 +249,7 @@ /obj/structure/chair/pillow_small name = "small pillow pile" desc = "A small pile of pillows. A comfortable seat, especially for taurs or nagas." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi' icon_state = "pillowpile_small_pink" base_icon_state = "pillowpile_small" pseudo_z_axis = 4 @@ -277,9 +277,9 @@ /obj/structure/chair/pillow_small/proc/GetArmrest() if(current_color == "pink") - return mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_small_pink_overlay") + return mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_small_pink_overlay") if(current_color == "teal") - return mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_small_teal_overlay") + return mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_small_teal_overlay") /obj/structure/chair/pillow_small/Destroy() QDEL_NULL(armrest) @@ -295,7 +295,7 @@ /obj/structure/chair/pillow_small/update_overlays() . = ..() if(has_buckled_mobs()) - . += mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_small_[current_color]_overlay", layer = ABOVE_MOB_LAYER + 0.2) + . += mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_small_[current_color]_overlay", layer = ABOVE_MOB_LAYER + 0.2) /obj/structure/chair/pillow_small/post_unbuckle_mob(mob/living/affected_mob) . = ..() @@ -375,7 +375,7 @@ /obj/structure/bed/pillow_large name = "large pillow pile" desc = "A large pile of pillows. Jump on it!" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi' icon_state = "pillowpile_large_pink" base_icon_state = "pillowpile_large" pseudo_z_axis = 4 @@ -406,9 +406,9 @@ /obj/structure/bed/pillow_large/proc/GetArmrest() if(current_color == "pink") - return mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_large_pink_overlay") + return mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_large_pink_overlay") if(current_color == "teal") - return mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_large_teal_overlay") + return mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_large_teal_overlay") /obj/structure/bed/pillow_large/Destroy() QDEL_NULL(armrest) @@ -424,7 +424,7 @@ /obj/structure/bed/pillow_large/update_overlays() . = ..() if(has_buckled_mobs()) - . += mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_large_[current_color]_overlay", layer = ABOVE_MOB_LAYER + 0.2) + . += mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_large_[current_color]_overlay", layer = ABOVE_MOB_LAYER + 0.2) /obj/structure/bed/pillow_large/post_unbuckle_mob(mob/living/affected_mob) . = ..() diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm similarity index 96% rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm rename to modular_nova/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm index 7e3225ca55f1a0..945b370c18b411 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm @@ -1,17 +1,17 @@ /obj/structure/chair/shibari_stand name = "shibari stand" desc = "A stand for buckling people with ropes." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi' icon_state = "shibari_stand" max_integrity = 75 layer = 4 item_chair = null buildstacktype = null - flags_1 = NODECONSTRUCT_1 + obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION ///Overlays for ropes var/static/mutable_appearance/shibari_rope_overlay var/static/mutable_appearance/shibari_rope_overlay_behind - var/static/mutable_appearance/shibari_shadow_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi', "shibari_shadow", LOW_OBJ_LAYER) + var/static/mutable_appearance/shibari_shadow_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi', "shibari_shadow", LOW_OBJ_LAYER) greyscale_config = /datum/greyscale_config/shibari_stand greyscale_colors = "#bd8fcf" @@ -124,8 +124,10 @@ return FALSE /obj/structure/chair/shibari_stand/deconstruct(disassembled) + if(obj_flags & NO_DECONSTRUCTION) + return + qdel(src) - return TRUE /obj/structure/chair/shibari_stand/proc/add_rope_overlays(color, taur) cut_overlay(shibari_rope_overlay) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/screen_icons.dm b/modular_nova/modules/modular_items/lewd_items/code/screen_icons.dm similarity index 87% rename from modular_skyrat/modules/modular_items/lewd_items/code/screen_icons.dm rename to modular_nova/modules/modular_items/lewd_items/code/screen_icons.dm index 63aa2c1452c066..e45cf39c693b5f 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/screen_icons.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/screen_icons.dm @@ -3,7 +3,7 @@ /atom/movable/screen/alert/aroused name = "Aroused" desc = "It's a little hot in here" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi' + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi' icon_state = "arousal_small" var/mutable_appearance/pain_overlay var/mutable_appearance/pleasure_overlay diff --git a/modular_nova/modules/modular_items/lewd_items/code/verbs.dm b/modular_nova/modules/modular_items/lewd_items/code/verbs.dm new file mode 100644 index 00000000000000..11b1044979fb75 --- /dev/null +++ b/modular_nova/modules/modular_items/lewd_items/code/verbs.dm @@ -0,0 +1,57 @@ +/mob/living/carbon/human/verb/climax_verb() + set name = "Climax" + set category = "IC" + + if(!has_status_effect(/datum/status_effect/climax_cooldown)) + if(tgui_alert(usr, "Are you sure you want to cum?", "Climax", list("Yes", "No")) == "Yes") + if(stat != CONSCIOUS) + to_chat(usr, span_warning("You can't climax right now...")) + return + else + climax(TRUE) + else + to_chat(src, span_warning("You can't cum right now!")) + +/mob/living/verb/reflexes_verb() + set name = "Toggle Reflexes" + set category = "IC" + if(!HAS_TRAIT_FROM(src, TRAIT_QUICKREFLEXES, REF(src))) + ADD_TRAIT(src, TRAIT_QUICKREFLEXES, REF(src)) + to_chat(src, span_notice("[get_reflexes_gain_text()]")) + else + REMOVE_TRAIT(src, TRAIT_QUICKREFLEXES, REF(src)) + to_chat(src, span_notice("[get_reflexes_lose_text()]")) + +/mob/living/proc/get_reflexes_gain_text() + return "You don't feel like being touched right now." + +/mob/living/proc/get_reflexes_lose_text() + return "You'll allow yourself to be touched now." + +/mob/living/silicon/get_reflexes_gain_text() + return "Our systems will disallow platonic contact." + +/mob/living/silicon/get_reflexes_lose_text() + return "Our systems will allow platonic contact." + +/mob/living/carbon/human/Initialize(mapload) + . = ..() + if(CONFIG_GET(flag/disable_erp_preferences)) + verbs -= /mob/living/carbon/human/verb/climax_verb + if(CONFIG_GET(flag/disable_lewd_items)) + verbs -= /mob/living/carbon/human/verb/safeword + +/mob/living/carbon/human/verb/safeword() + set name = "Remove Lewd Items" + set category = "OOC" + set desc = "Removes any and all lewd items from you." + + log_message("[key_name(src)] used the Remove Lewd Items verb.", LOG_ATTACK) + for(var/obj/item/equipped_item in get_equipped_items()) + if(!(equipped_item.type in GLOB.pref_checked_clothes)) + continue + + log_message("[equipped_item] was removed from [key_name(src)].", LOG_ATTACK) + dropItemToGround(equipped_item, TRUE) + + return TRUE diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_belts.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_belts.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_belts.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_belts.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_ears.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_ears.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_ears.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_ears.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_eyes.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_eyes.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_eyes.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_eyes.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_hats.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_hats.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_hats.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_hats.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_digi.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_digi.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_digi.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_digi.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_normal.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_normal.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_normal.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_normal.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_special.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_special.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_special.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_special.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-digi.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-digi.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-digi.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-digi.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-hoof.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-hoof.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-hoof.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-hoof.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-paw.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-paw.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-paw.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-paw.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-snake.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-snake.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-snake.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-snake.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform_teshari.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform_teshari.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform_teshari.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform_teshari.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_belts.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_belts.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_belts.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_belts.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_ears.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_ears.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_ears.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_ears.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_eyes.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_eyes.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_eyes.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_eyes.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_hats.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_hats.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_hats.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_hats.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_masks.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_masks.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_masks.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_masks.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_decals/lewd_decals.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_decals/lewd_decals.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_decals/lewd_decals.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_decals/lewd_decals.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/clockwork.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/clockwork.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/clockwork.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/clockwork.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/glass.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/glass.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/glass.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/glass.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/midnight.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/midnight.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/midnight.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/midnight.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/operative.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/operative.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/operative.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/operative.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/plasmafire.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/plasmafire.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/plasmafire.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/plasmafire.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/retro.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/retro.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/retro.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/retro.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/slimecore.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/slimecore.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/slimecore.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/slimecore.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/dancing_pole.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/dancing_pole.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/dancing_pole.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/dancing_pole.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/kegs.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/kegs.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/kegs.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/kegs.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/lustwish.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/lustwish.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/lustwish.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/lustwish.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bang1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bang1.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bang1.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/bang1.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bang2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bang2.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bang2.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/bang2.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bang3.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bang3.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bang3.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/bang3.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bang4.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bang4.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bang4.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/bang4.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bang5.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bang5.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bang5.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/bang5.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bang6.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bang6.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bang6.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/bang6.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bj1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bj1.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bj1.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/bj1.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bj10.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bj10.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bj10.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/bj10.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bj11.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bj11.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bj11.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/bj11.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bj2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bj2.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bj2.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/bj2.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bj3.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bj3.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bj3.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/bj3.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bj4.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bj4.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bj4.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/bj4.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bj5.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bj5.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bj5.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/bj5.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bj6.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bj6.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bj6.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/bj6.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bj7.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bj7.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bj7.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/bj7.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bj8.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bj8.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bj8.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/bj8.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bj9.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bj9.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bj9.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/bj9.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bzzz-loop-1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bzzz-loop-1.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bzzz-loop-1.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/bzzz-loop-1.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bzzz-loop-2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bzzz-loop-2.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bzzz-loop-2.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/bzzz-loop-2.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bzzz-loop-3.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bzzz-loop-3.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bzzz-loop-3.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/bzzz-loop-3.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/champ1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/champ1.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/champ1.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/champ1.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/champ2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/champ2.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/champ2.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/champ2.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/champ_fingering.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/champ_fingering.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/champ_fingering.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/champ_fingering.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/final_f1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/final_f1.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/final_f1.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/final_f1.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/final_f2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/final_f2.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/final_f2.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/final_f2.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/final_f3.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/final_f3.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/final_f3.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/final_f3.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/final_m1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/final_m1.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/final_m1.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/final_m1.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/final_m2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/final_m2.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/final_m2.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/final_m2.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/final_m3.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/final_m3.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/final_m3.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/final_m3.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/foot_dry1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/foot_dry1.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/foot_dry1.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/foot_dry1.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/foot_dry2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/foot_dry2.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/foot_dry2.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/foot_dry2.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/foot_dry3.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/foot_dry3.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/foot_dry3.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/foot_dry3.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/foot_dry4.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/foot_dry4.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/foot_dry4.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/foot_dry4.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/foot_wet1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/foot_wet1.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/foot_wet1.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/foot_wet1.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/foot_wet2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/foot_wet2.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/foot_wet2.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/foot_wet2.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/foot_wet3.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/foot_wet3.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/foot_wet3.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/foot_wet3.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/highheel1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/highheel1.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/highheel1.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/highheel1.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/highheel2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/highheel2.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/highheel2.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/highheel2.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/hug.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/hug.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/hug.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/hug.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/latex.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/latex.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/oral1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/oral1.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/oral1.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/oral1.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/oral2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/oral2.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/oral2.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/oral2.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/slap.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/slap.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/slap.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/slap.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/squelch1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/squelch1.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/squelch1.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/squelch1.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/squelch2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/squelch2.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/squelch2.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/squelch2.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/squelch3.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/squelch3.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/squelch3.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/squelch3.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f1.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f1.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f1.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f2.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f2.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f2.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f3.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f3.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f3.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f3.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f4.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f4.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f4.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f4.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/vax1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/vax1.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/vax1.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/vax1.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/vax2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/vax2.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/vax2.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/vax2.ogg diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/vibrate.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/vibrate.ogg similarity index 100% rename from modular_skyrat/modules/modular_items/lewd_items/sounds/vibrate.ogg rename to modular_nova/modules/modular_items/lewd_items/sounds/vibrate.ogg diff --git a/modular_skyrat/modules/modular_items/readme.md b/modular_nova/modules/modular_items/readme.md similarity index 100% rename from modular_skyrat/modules/modular_items/readme.md rename to modular_nova/modules/modular_items/readme.md diff --git a/modular_nova/modules/modular_persistence/README.md b/modular_nova/modules/modular_persistence/README.md new file mode 100644 index 00000000000000..f0ff7028236a61 --- /dev/null +++ b/modular_nova/modules/modular_persistence/README.md @@ -0,0 +1,23 @@ +## Modular Persistence + +Module ID: MODULAR_PERSISTENCE + +### Description: + +An extremely easy to extend per-character persistence file. Supports all the basic types, plus lists. + +Simply add the vars you want to have saved to `/datum/modular_persistence`, and make sure those var values are updated before round end so that they're saved. + +Loaded and saved on only station-side players for now. Will be expanded to support more in the future. + +### TG Proc/File Changes: + +- `code\modules\mob\dead\new_player\new_player.dm`: `/mob/dead/new_player/proc/AttemptLateSpawn` +- `code\controllers\subsystem\persistence.dm`: `/datum/controller/subsystem/persistence/proc/collect_data` + +### Defines: + +- `modular_nova\modules\modular_persistence\code\modular_persistence.dm`: `GLOB.modular_persistence_ignored_vars` + +### Credits: +- RimiNosha - Code diff --git a/modular_skyrat/modules/modular_persistence/code/modular_persistence.dm b/modular_nova/modules/modular_persistence/code/modular_persistence.dm similarity index 98% rename from modular_skyrat/modules/modular_persistence/code/modular_persistence.dm rename to modular_nova/modules/modular_persistence/code/modular_persistence.dm index d76b1f07e412ba..46d5c5ae18a4f1 100644 --- a/modular_skyrat/modules/modular_persistence/code/modular_persistence.dm +++ b/modular_nova/modules/modular_persistence/code/modular_persistence.dm @@ -72,7 +72,7 @@ GLOBAL_LIST_INIT(modular_persistence_ignored_vars, list( var/mob/living/carbon/human/human = owner.owner human.load_nif_data(src) -/datum/modular_persistence/Destroy(force, ...) +/datum/modular_persistence/Destroy(force) owner = null return ..() diff --git a/modular_skyrat/modules/modular_reagents/code/alert.dm b/modular_nova/modules/modular_reagents/code/alert.dm similarity index 100% rename from modular_skyrat/modules/modular_reagents/code/alert.dm rename to modular_nova/modules/modular_reagents/code/alert.dm diff --git a/modular_skyrat/modules/modular_reagents/code/reagents/medicine.dm b/modular_nova/modules/modular_reagents/code/reagents/medicine.dm similarity index 100% rename from modular_skyrat/modules/modular_reagents/code/reagents/medicine.dm rename to modular_nova/modules/modular_reagents/code/reagents/medicine.dm diff --git a/modular_skyrat/modules/modular_reagents/code/recipes/medicine_recipes.dm b/modular_nova/modules/modular_reagents/code/recipes/medicine_recipes.dm similarity index 100% rename from modular_skyrat/modules/modular_reagents/code/recipes/medicine_recipes.dm rename to modular_nova/modules/modular_reagents/code/recipes/medicine_recipes.dm diff --git a/modular_nova/modules/modular_vending/code/autodrobe.dm b/modular_nova/modules/modular_vending/code/autodrobe.dm new file mode 100644 index 00000000000000..8640c22266afd1 --- /dev/null +++ b/modular_nova/modules/modular_vending/code/autodrobe.dm @@ -0,0 +1,96 @@ +/obj/machinery/vending/autodrobe + product_categories_nova = list( + list( + "name" = "Costumes", + "icon" = "mask", + "products" = list( + /obj/item/clothing/under/costume/nova/cavalry = 5, + /obj/item/clothing/under/doug_dimmadome = 5, + /obj/item/clothing/head/costume/kabuto = 5, + /obj/item/clothing/suit/costume/samurai = 5, + /obj/item/clothing/suit/dutchjacketsr = 5, + ), + ), + list( + "name" = "Entertainers", + "icon" = "masks-theater", + "products" = list( + /obj/item/clothing/mask/gas/clownbald = 1, + /obj/item/clothing/mask/gas/clown_colourable = 1, + /obj/item/clothing/head/costume/jester/alt = 1, + /obj/item/clothing/under/rank/civilian/clown/jester/alt = 1, + ), + ), + list( + "name" = "Fancy", + "icon" = "user-tie", + "products" = list( + /obj/item/clothing/under/pants/nova/vicvest = 5, + /obj/item/clothing/under/costume/nova/kamishimo = 5, + /obj/item/clothing/under/costume/nova/yukata = 5, + /obj/item/clothing/under/costume/nova/kimono = 5, + /obj/item/clothing/head/beret/badge = 5, + /obj/item/clothing/mask/masquerade = 25, + /obj/item/clothing/mask/masquerade/two_colors = 25, + /obj/item/clothing/mask/masquerade/feathered = 25, + /obj/item/clothing/mask/masquerade/two_colors/feathered = 25, + ), + ), + list( + "name" = "Service", + "icon" = "kitchen-set", + "products" = list( + /obj/item/clothing/under/costume/buttondown/slacks/service = 1, + /obj/item/clothing/under/costume/buttondown/skirt/service = 1, + /obj/item/clothing/neck/bowtie = 2, + /obj/item/clothing/accessory/waistcoat = 1, + /obj/item/clothing/under/suit/waiter = 1, + /obj/item/clothing/suit/apron = 1, + /obj/item/clothing/suit/apron/overalls = 1, + /obj/item/clothing/head/costume/maidheadband = 1, + /obj/item/clothing/under/costume/maid = 1, + /obj/item/clothing/gloves/maid = 1, + /obj/item/clothing/neck/maid = 1, + /obj/item/clothing/under/rank/civilian/janitor/maid = 1, + /obj/item/clothing/accessory/maidapron = 1, + /obj/item/clothing/gloves/maid_arm_covers = 1, + /obj/item/clothing/neck/maid_neck_cover = 1, + /obj/item/clothing/under/maid_costume = 1, + /obj/item/clothing/head/maid_headband = 1, + ), + ), + list( + "name" = "Other", + "icon" = "star", + "products" = list( + /obj/item/clothing/glasses/biker = 5, + /obj/item/clothing/suit/trenchblack = 5, + /obj/item/clothing/suit/trenchbrown = 5, + /obj/item/clothing/head/costume/nova/christmas = 5, + /obj/item/clothing/head/costume/nova/christmas/green = 5, + /obj/item/clothing/under/costume/nova/christmas = 5, + /obj/item/clothing/under/costume/nova/christmas/green = 5, + /obj/item/clothing/under/costume/nova/christmas/croptop = 5, + /obj/item/clothing/under/costume/nova/christmas/croptop/green = 5, + /obj/item/clothing/suit/hooded/wintercoat/nova/christmas = 5, + /obj/item/clothing/suit/hooded/wintercoat/nova/christmas/green = 5, + /obj/item/clothing/shoes/winterboots/christmas = 5, + /obj/item/clothing/shoes/winterboots/christmas/green = 5, + /obj/item/clothing/under/pants/tactical = 5, + ), + ), + ) + + contraband_nova = list( + /obj/item/clothing/mask/balaclavaadjust = 5, + /obj/item/clothing/mask/balaclava/threehole = 5, + /obj/item/clothing/mask/balaclava/threehole/green = 5, + /obj/item/clothing/head/hats/imperial/helmet = 5, + /obj/item/clothing/head/hats/imperial/red = 5, + /obj/item/clothing/head/hats/imperial/grey = 5, + /obj/item/clothing/head/hats/imperial = 5, + /obj/item/clothing/under/rank/captain/nova/imperial/generic/pants = 5, + /obj/item/clothing/under/rank/captain/nova/imperial/generic/red = 5, + /obj/item/clothing/under/rank/captain/nova/imperial/generic/grey = 5, + /obj/item/clothing/under/rank/captain/nova/imperial/generic = 5, + ) diff --git a/modular_skyrat/modules/modular_vending/code/boozeomat.dm b/modular_nova/modules/modular_vending/code/boozeomat.dm similarity index 75% rename from modular_skyrat/modules/modular_vending/code/boozeomat.dm rename to modular_nova/modules/modular_vending/code/boozeomat.dm index 7ca78cbab3fedf..347876a1bdc794 100644 --- a/modular_skyrat/modules/modular_vending/code/boozeomat.dm +++ b/modular_nova/modules/modular_vending/code/boozeomat.dm @@ -1,16 +1,16 @@ /obj/machinery/vending/boozeomat - skyrat_product_categories = list( + product_categories_nova = list( list( "name" = "Alcoholic", "icon" = "wine-bottle", "products" = list( - /obj/item/reagent_containers/cup/soda_cans/skyrat/synthanolcan = 6, + /obj/item/reagent_containers/cup/soda_cans/nova/synthanolcan = 6, ) ) ) /obj/machinery/vending/boozeomat/cafe - skyrat_premium = list( + premium_nova = list( /obj/item/stack/sheet/mineral/uranium = 5, /obj/item/stack/sheet/mineral/plasma = 5, /obj/item/stack/sheet/mineral/silver = 5, diff --git a/modular_skyrat/modules/modular_vending/code/cigarette.dm b/modular_nova/modules/modular_vending/code/cigarette.dm similarity index 89% rename from modular_skyrat/modules/modular_vending/code/cigarette.dm rename to modular_nova/modules/modular_vending/code/cigarette.dm index f91ba68bcdd6af..e2d90e4b93f379 100644 --- a/modular_skyrat/modules/modular_vending/code/cigarette.dm +++ b/modular_nova/modules/modular_vending/code/cigarette.dm @@ -1,10 +1,10 @@ /obj/machinery/vending/cigarette/ contraband = list() - skyrat_products = list( + products_nova = list( /obj/item/clothing/mask/vape = 5, /obj/item/reagent_containers/vapecart = 10, ) - skyrat_contraband = list( + contraband_nova = list( /obj/item/reagent_containers/vapecart/empty = 5, /obj/item/reagent_containers/vapecart/bluekush = 4, /obj/item/reagent_containers/vapecart/reddiesel = 4, diff --git a/modular_nova/modules/modular_vending/code/clothesmate.dm b/modular_nova/modules/modular_vending/code/clothesmate.dm new file mode 100644 index 00000000000000..2d9f1dfad3165d --- /dev/null +++ b/modular_nova/modules/modular_vending/code/clothesmate.dm @@ -0,0 +1,168 @@ +/obj/machinery/vending/clothing + product_categories_nova = list( + list( + "name" = "Head", + "icon" = "hat-cowboy", + "products" = list( + /obj/item/clothing/head/beret/badge = 5, + /obj/item/clothing/head/colourable_flatcap= 5, + /obj/item/clothing/head/cowboy/nova/cattleman = 5, + /obj/item/clothing/head/cowboy/nova/cattleman/wide = 5, + /obj/item/clothing/head/cowboy/nova/wide = 5, + /obj/item/clothing/head/cowboy/nova/wide/feathered = 5, + /obj/item/clothing/head/cowboy/nova/flat = 5, + /obj/item/clothing/head/cowboy/nova/flat/cowl = 5, + /obj/item/clothing/head/cowboy/nova/flat/sheriff = 5, + /obj/item/clothing/head/cowboy/nova/flat/deputy = 5, + /obj/item/clothing/head/cowboy/nova/flat/cowl/sheriff = 5, + /obj/item/clothing/head/fedora= 5, + /obj/item/clothing/head/fedora/brown = 5, + /obj/item/clothing/head/fedora/beige = 5, + /obj/item/clothing/head/fedora/white = 5, + /obj/item/clothing/head/standalone_hood = 5, + /obj/item/clothing/head/small_bow = 5, + /obj/item/clothing/head/large_bow = 5, + /obj/item/clothing/head/back_bow = 5, + /obj/item/clothing/head/sweet_bow = 5, + ), + ), + + list( + "name" = "Accessories", + "icon" = "glasses", + "products" = list( + /obj/item/clothing/neck/ranger_poncho = 5, + /obj/item/clothing/neck/cloak/colourable = 5, + /obj/item/clothing/neck/cloak/colourable/veil = 5, + /obj/item/clothing/neck/cloak/colourable/shroud = 5, + /obj/item/clothing/neck/cloak/colourable/boat = 5, + /obj/item/clothing/neck/mantle/recolorable = 5, + /obj/item/clothing/neck/long_cape = 5, + /obj/item/clothing/neck/wide_cape = 5, + /obj/item/clothing/neck/robe_cape = 5, + /obj/item/clothing/glasses/regular/betterunshit = 5, + /obj/item/clothing/glasses/thin = 5, + /obj/item/clothing/glasses/hud/ar/projector = 5, + /obj/item/clothing/neck/face_scarf = 5, + /obj/item/clothing/gloves/bracer/wraps, + ), + ), + + list( + "name" = "Under", + "icon" = "shirt", + "products" = list( + /obj/item/clothing/under/pants/nova/jeans_ripped = 5, + /obj/item/clothing/under/shorts/nova/shorts_ripped = 5, + /obj/item/clothing/under/pants/nova/yoga = 5, + /obj/item/clothing/under/misc/nova/mechanic = 5, + /obj/item/clothing/under/misc/bluetracksuit = 5, + /obj/item/clothing/under/suit/nova/recolorable = 5, + /obj/item/clothing/under/suit/nova/recolorable/skirt = 5, + /obj/item/clothing/under/pants/nova/kilt = 5, + /obj/item/clothing/under/suit/fancy = 5, + /obj/item/clothing/under/texas = 5, + /obj/item/clothing/under/sweater = 5, + /obj/item/clothing/under/sweater/keyhole = 5, + /obj/item/clothing/under/tachawaiian = 5, + /obj/item/clothing/under/tachawaiian/purple = 5, + /obj/item/clothing/under/tachawaiian/green = 5, + /obj/item/clothing/under/tachawaiian/blue = 5, + /obj/item/clothing/under/suit/nova/black_really_collared = 3, + /obj/item/clothing/under/suit/nova/black_really_collared/skirt = 3, + /obj/item/clothing/under/suit/nova/pencil = 3, + /obj/item/clothing/under/suit/nova/pencil/black_really = 3, + /obj/item/clothing/under/suit/nova/pencil/charcoal = 3, + /obj/item/clothing/under/suit/nova/pencil/navy = 3, + /obj/item/clothing/under/suit/nova/pencil/burgandy = 3, + /obj/item/clothing/under/suit/nova/pencil/checkered = 3, + /obj/item/clothing/under/suit/nova/pencil/tan = 3, + /obj/item/clothing/under/suit/nova/pencil/green = 3, + /obj/item/clothing/under/suit/nova/inferno = 3, + /obj/item/clothing/under/suit/nova/inferno/skirt = 3, + /obj/item/clothing/under/suit/nova/helltaker = 3, + /obj/item/clothing/under/suit/nova/helltaker/skirt = 3, + /obj/item/clothing/under/dress/skirt/nova/medium = 5, + /obj/item/clothing/under/dress/skirt/nova/long = 5, + ), + ), + + list( + "name" = "Suits & Skirts", + "icon" = "vest", + "products" = list( + /obj/item/clothing/under/dress/skirt/nova/lone_skirt = 5, + /obj/item/clothing/under/dress/skirt/nova/turtleskirt_knit = 5, + /obj/item/clothing/under/dress/nova/short_dress = 5, + /obj/item/clothing/under/dress/nova/pinktutu = 5, + /obj/item/clothing/under/dress/skirt/nova/jean = 5, + /obj/item/clothing/under/dress/nova/flower = 5, + /obj/item/clothing/under/dress/nova/strapless = 5, + /obj/item/clothing/under/dress/nova/pentagram = 5, + /obj/item/clothing/suit/varsity = 5, + /obj/item/clothing/suit/toggle/jacket = 5, + /obj/item/clothing/suit/toggle/jacket/flannel/gags = 5, + /obj/item/clothing/suit/toggle/jacket/flannel = 5, + /obj/item/clothing/suit/toggle/jacket/flannel/red = 5, + /obj/item/clothing/suit/toggle/jacket/flannel/aqua = 5, + /obj/item/clothing/suit/toggle/jacket/flannel/brown = 5, + /obj/item/clothing/suit/toggle/jacket/hoodie = 5, + /obj/item/clothing/suit/toggle/jacket/hoodie/trim = 5, + /obj/item/clothing/suit/toggle/jacket/hoodie/trim/alt = 5, + /obj/item/clothing/suit/toggle/jacket/hoodie/branded = 5, + /obj/item/clothing/suit/toggle/jacket/hoodie/branded/cti = 5, + /obj/item/clothing/suit/toggle/jacket/hoodie/branded/mu = 5, + /obj/item/clothing/suit/toggle/jacket/hoodie/branded/smw = 5, + /obj/item/clothing/suit/toggle/jacket/hoodie/branded/nrti = 5, + /obj/item/clothing/suit/toggle/jacket/cardigan = 5, + /obj/item/clothing/suit/toggle/peacoat = 5, + /obj/item/clothing/suit/toggle/trackjacket = 5, + /obj/item/clothing/suit/toggle/lawyer/white = 5, + /obj/item/clothing/suit/urban = 5, + /obj/item/clothing/suit/duster = 5, + /obj/item/clothing/suit/fallsparka = 5, + /obj/item/clothing/suit/croptop = 5, + /obj/item/clothing/suit/modernwintercoatthing = 5, + /obj/item/clothing/suit/hooded/wintercoat/colourable = 5, + /obj/item/clothing/suit/apron/chef/colorable_apron = 5, + /obj/item/clothing/suit/warm_coat = 5, + /obj/item/clothing/suit/warm_sweater = 5, + /obj/item/clothing/suit/heart_sweater = 5, + ), + ), + + list( + "name" = "Shoes", + "icon" = "socks", + "products" = list( + /obj/item/clothing/shoes/colorable_laceups = 5, + /obj/item/clothing/shoes/colorable_sandals = 5, + /obj/item/clothing/shoes/sports = 5, + /obj/item/clothing/shoes/wraps/colourable = 5, + /obj/item/clothing/shoes/wraps/cloth = 5, + /obj/item/clothing/shoes/jungleboots = 5, + /obj/item/clothing/shoes/jackboots/knee = 5, + /obj/item/clothing/shoes/jackboots/recolorable = 5, + ), + ), + + //Only put clothing in Special thats either Families or exteremly out-of-place + list( + "name" = "Special", + "icon" = "star", + "products" = list( + /obj/item/clothing/under/costume/deckers/alt = 5, + /obj/item/clothing/under/costume/nova/bathrobe = 5, + /obj/item/clothing/mask/gas/respirator = 5, + /obj/item/clothing/mask/surgical/greyscale = 5, + ) + ) + ) + + premium_nova = list( //being here means you're artificially rare, congratulations + /obj/item/clothing/shoes/jackboots/timbs = 2, + /obj/item/clothing/head/soft/yankee = 3, + /obj/item/clothing/suit/brownbattlecoat = 1, + /obj/item/clothing/suit/blackfurrich = 1, + /obj/item/clothing/suit/frenchtrench = 1, + ) diff --git a/modular_nova/modules/modular_vending/code/cola.dm b/modular_nova/modules/modular_vending/code/cola.dm new file mode 100644 index 00000000000000..f65f5f771b4687 --- /dev/null +++ b/modular_nova/modules/modular_vending/code/cola.dm @@ -0,0 +1,5 @@ +/obj/machinery/vending/cola + products_nova = list( + /obj/item/reagent_containers/cup/soda_cans/nova/lubricola = 10, + /obj/item/reagent_containers/cup/soda_cans/nova/welding_fizz = 10, + ) diff --git a/modular_skyrat/modules/modular_vending/code/engivend.dm b/modular_nova/modules/modular_vending/code/engivend.dm similarity index 89% rename from modular_skyrat/modules/modular_vending/code/engivend.dm rename to modular_nova/modules/modular_vending/code/engivend.dm index 082726e2108983..2b9969691ffdde 100644 --- a/modular_skyrat/modules/modular_vending/code/engivend.dm +++ b/modular_nova/modules/modular_vending/code/engivend.dm @@ -1,5 +1,5 @@ /obj/machinery/vending/engivend - skyrat_products = list( + products_nova = list( /obj/item/clothing/glasses/meson/engine = 5, /obj/item/construction/rcd/loaded = 3, /obj/item/storage/pouch/material = 2, diff --git a/modular_nova/modules/modular_vending/code/games.dm b/modular_nova/modules/modular_vending/code/games.dm new file mode 100644 index 00000000000000..23a653ffc37ea8 --- /dev/null +++ b/modular_nova/modules/modular_vending/code/games.dm @@ -0,0 +1,21 @@ +/obj/machinery/vending/games + product_categories_nova = list( + list( + "name" = "Toys", + "icon" = "hat-wizard", + "products" = list( + /obj/item/storage/briefcase/secure/white/wargame_kit = 3, + /obj/item/laser_pointer/limited = 3, + ), + ), + list( + "name" = "Other", + "icon" = "star", + "products" = list( + /obj/item/hairbrush = 3, + /obj/item/clothing/head/hair_tie/scrunchie = 3, + /obj/item/clothing/mask/holocigarette = 5, + /obj/item/attachable_soulcatcher = 5, + ), + ) + ) diff --git a/modular_nova/modules/modular_vending/code/medical.dm b/modular_nova/modules/modular_vending/code/medical.dm new file mode 100644 index 00000000000000..34d6dc87ea2f2c --- /dev/null +++ b/modular_nova/modules/modular_vending/code/medical.dm @@ -0,0 +1,5 @@ +/obj/machinery/vending/medical + products_nova = list( + /obj/item/ttsdevice = 3, + /obj/item/cane/crutch = 4, + ) diff --git a/modular_skyrat/modules/modular_vending/code/megaseed.dm b/modular_nova/modules/modular_vending/code/megaseed.dm similarity index 86% rename from modular_skyrat/modules/modular_vending/code/megaseed.dm rename to modular_nova/modules/modular_vending/code/megaseed.dm index 41cb9e8828c877..f00c9eecfadfe7 100644 --- a/modular_skyrat/modules/modular_vending/code/megaseed.dm +++ b/modular_nova/modules/modular_vending/code/megaseed.dm @@ -1,5 +1,5 @@ /obj/machinery/vending/hydroseeds //sneed - skyrat_product_categories = list( + product_categories_nova = list( list( "name" = "Miscellaneous", "icon" = "question", @@ -11,10 +11,9 @@ ), ), ) - skyrat_contraband = list( + contraband_nova = list( /obj/item/seeds/cocaleaf = 3, /obj/item/seeds/poppy/opiumpoppy = 3, /obj/item/seeds/tea/catnip = 3, /obj/item/seeds/banana/spider_banana = 1, ) - diff --git a/modular_nova/modules/modular_vending/code/security.dm b/modular_nova/modules/modular_vending/code/security.dm new file mode 100644 index 00000000000000..02dbca5e4cee55 --- /dev/null +++ b/modular_nova/modules/modular_vending/code/security.dm @@ -0,0 +1,5 @@ +/obj/machinery/vending/security + products_nova = list( + /obj/item/storage/pouch/ammo = 2, + /obj/item/storage/barricade = 4, + ) diff --git a/modular_nova/modules/modular_vending/code/vending.dm b/modular_nova/modules/modular_vending/code/vending.dm new file mode 100644 index 00000000000000..8c5dffb1bf959a --- /dev/null +++ b/modular_nova/modules/modular_vending/code/vending.dm @@ -0,0 +1,82 @@ +#define MINIMUM_CLOTHING_STOCK 5 + +/obj/machinery/vending + /// Additions to the `products` list of the vending machine, modularly. Will become null after Initialize, to free up memory. + var/list/products_nova + /// Additions to the `product_categories` list of the vending machine, modularly. Will become null after Initialize, to free up memory. + var/list/product_categories_nova + /// Additions to the `premium` list of the vending machine, modularly. Will become null after Initialize, to free up memory. + var/list/premium_nova + /// Additions to the `contraband` list of the vending machine, modularly. Will become null after Initialize, to free up memory. + var/list/contraband_nova + +/obj/machinery/vending/Initialize(mapload) + if(products_nova) + // We need this, because duplicates screw up the spritesheet! + for(var/item_to_add in products_nova) + products[item_to_add] = products_nova[item_to_add] + + if(product_categories_nova) + for(var/category in product_categories_nova) + var/already_exists = FALSE + for(var/existing_category in product_categories) + if(existing_category["name"] == category["name"]) + existing_category["products"] += category["products"] + already_exists = TRUE + break + + if(!already_exists) + product_categories += category + + if(premium_nova) + // We need this, because duplicates screw up the spritesheet! + for(var/item_to_add in premium_nova) + premium[item_to_add] = premium_nova[item_to_add] + + if(contraband_nova) + // We need this, because duplicates screw up the spritesheet! + for(var/item_to_add in contraband_nova) + contraband[item_to_add] = contraband_nova[item_to_add] + + // Time to make clothes amounts consistent! + for (var/obj/item/clothing/item in products) + if(products[item] < MINIMUM_CLOTHING_STOCK && allow_increase(item)) + products[item] = MINIMUM_CLOTHING_STOCK + + for (var/category in product_categories) + for(var/obj/item/clothing/item in category["products"]) + if(category["products"][item] < MINIMUM_CLOTHING_STOCK && allow_increase(item)) + category["products"][item] = MINIMUM_CLOTHING_STOCK + + for (var/obj/item/clothing/item in premium) + if(premium[item] < MINIMUM_CLOTHING_STOCK && allow_increase(item)) + premium[item] = MINIMUM_CLOTHING_STOCK + + QDEL_NULL(products_nova) + QDEL_NULL(product_categories_nova) + QDEL_NULL(premium_nova) + QDEL_NULL(contraband_nova) + return ..() + +/// This proc checks for forbidden traits cause it'd be pretty bad to have 5 insuls available to assistants roundstart at the vendor! +/obj/machinery/vending/proc/allow_increase(obj/item/clothing/clothing_path) + var/obj/item/clothing/clothing = new clothing_path() + + // Ignore earmuffs! + if(TRAIT_DEAF in clothing.clothing_traits) + return FALSE + // Don't touch sunglasses or welding helmets! + if(clothing.flash_protect == FLASH_PROTECTION_WELDER) + return FALSE + // Don't touch bodyarmour! + if(ispath(clothing, /obj/item/clothing/suit/armor)) + return FALSE + // Don't touch protective helmets, like riot helmets! + if(ispath(clothing, /obj/item/clothing/head/helmet)) + return FALSE + // Ignore all gloves, because it's almost impossible to check what they do... + if(ispath(clothing, /obj/item/clothing/gloves)) + return FALSE + return TRUE + +#undef MINIMUM_CLOTHING_STOCK diff --git a/modular_nova/modules/modular_vending/code/wardrobes.dm b/modular_nova/modules/modular_vending/code/wardrobes.dm new file mode 100644 index 00000000000000..c9bb1fc7a49c60 --- /dev/null +++ b/modular_nova/modules/modular_vending/code/wardrobes.dm @@ -0,0 +1,255 @@ +/obj/machinery/vending/wardrobe/medi_wardrobe + products_nova = list( + /obj/item/radio/headset/headset_med = 3, + /obj/item/clothing/gloves/latex/nitrile = 2, + /obj/item/clothing/suit/toggle/labcoat/hospitalgown = 5, + /obj/item/storage/belt/medbandolier = 2, + /obj/item/clothing/under/rank/engineering/engineer/nova/hazard_chem/emt = 2, + /obj/item/clothing/under/rank/medical/scrubs/nova/red = 4, + /obj/item/clothing/under/rank/medical/scrubs/nova/white = 4, + /obj/item/clothing/under/rank/medical/doctor/nova/utility = 4, + /obj/item/clothing/suit/toggle/labcoat/medical = 4, + /obj/item/storage/backpack/messenger/med = 4, + ) + +/obj/machinery/vending/wardrobe/engi_wardrobe + products_nova = list( + /obj/item/radio/headset/headset_eng = 3, + /obj/item/clothing/under/rank/engineering/engineer/nova/trouser = 3, + /obj/item/clothing/under/rank/engineering/engineer/nova/utility = 3, + /obj/item/clothing/under/rank/engineering/engineer/nova/hazard_chem = 3, + /obj/item/clothing/under/misc/overalls = 3, + /obj/item/clothing/suit/toggle/jacket/engi = 3, + /obj/item/clothing/head/utility/hardhat/orange = 2, + /obj/item/clothing/head/utility/hardhat/welding/orange = 2, + /obj/item/clothing/head/utility/hardhat/dblue = 2, + /obj/item/clothing/head/utility/hardhat/welding/dblue = 2, + /obj/item/clothing/head/utility/hardhat/red = 2, + /obj/item/storage/backpack/messenger/eng = 3, + ) + +/obj/machinery/vending/wardrobe/atmos_wardrobe + products_nova = list( + /obj/item/clothing/glasses/meson/engine = 2, + /obj/item/clothing/head/beret/atmos = 4, + /obj/item/storage/backpack/messenger/eng = 3, + ) + +/obj/machinery/vending/wardrobe/cargo_wardrobe + products_nova = list( + /obj/item/clothing/under/rank/cargo/tech/nova/long = 3, + /obj/item/clothing/under/rank/cargo/tech/nova/gorka = 3, + /obj/item/clothing/under/rank/cargo/tech/nova/turtleneck = 3, + /obj/item/clothing/under/rank/cargo/tech/nova/turtleneck/skirt = 3, + /obj/item/clothing/under/rank/cargo/tech/nova/utility = 3, + /obj/item/clothing/under/rank/cargo/tech/nova/casualman = 3, + /obj/item/clothing/suit/toggle/jacket/supply = 3, + /obj/item/clothing/glasses/hud/gun_permit = 5, //from company imports module + /obj/item/storage/backpack/messenger = 3, + ) + + contraband_nova = list( + /obj/item/clothing/under/suit/nova/scarface = 2, + /obj/item/clothing/under/rank/cargo/tech/nova/evil = 2, + ) + +/obj/machinery/vending/wardrobe/robo_wardrobe + products_nova = list( + /obj/item/clothing/head/beret/science/fancy/robo = 2, + /obj/item/clothing/under/rank/rnd/roboticist/nova/sleek = 2, + /obj/item/tank/internals/anesthetic = 2, + /obj/item/clothing/mask/breath = 2, + /obj/item/reagent_containers/cup/bottle/morphine = 2, + /obj/item/reagent_containers/syringe = 2, + /obj/item/reagent_containers/spray/hercuri/chilled = 2, + /obj/item/clothing/gloves/color/black = 2, // fire resistant, allows the robo to painlessly mold metal. also its down here because its a treatment item + /obj/item/bonesetter = 2, // for dislocations + /obj/item/stack/medical/gauze = 4, // for ALL wounds + /obj/item/healthanalyzer/no_medibot = 2, // disallows medibot use so its not wasted immediately on medibots + /obj/item/healthanalyzer/simple = 2, + /obj/item/storage/backpack/science/robo = 2, + /obj/item/storage/backpack/satchel/science/robo = 2, + /obj/item/storage/backpack/duffelbag/science/robo = 2, + /obj/item/storage/backpack/messenger/science/robo = 2, + ) + +/obj/machinery/vending/wardrobe/science_wardrobe + products_nova = list( + /obj/item/clothing/under/rank/rnd/scientist/nova/hlscience = 3, + /obj/item/clothing/under/rank/rnd/scientist/nova/utility = 3, + /obj/item/clothing/suit/toggle/jacket/sci = 3, + /obj/item/storage/backpack/messenger/science = 3, + ) + +/obj/machinery/vending/wardrobe/hydro_wardrobe + contraband_nova = list( + /obj/item/clothing/under/suit/nova/scarface = 2, + /obj/item/clothing/under/misc/nova/gear_harness/adam = 2, + /obj/item/clothing/under/misc/nova/gear_harness/eve = 2, + /obj/item/storage/backpack/messenger/hyd = 3, + ) + +/obj/machinery/vending/wardrobe/bar_wardrobe + products_nova = list( + /obj/item/storage/fancy/candle_box/vanilla = 1, + /obj/item/storage/fancy/candle_box/pear = 1, + /obj/item/storage/fancy/candle_box/amber = 1, + /obj/item/storage/fancy/candle_box/jasmine = 1, + /obj/item/storage/fancy/candle_box/mint = 1, + /obj/item/clothing/suit/hooded/wintercoat/nova/bartender = 2, + ) + +/obj/machinery/vending/wardrobe/chap_wardrobe + products_nova = list( + /obj/item/clothing/suit/costume/nemes = 1, + /obj/item/clothing/head/costume/nemes = 1, + /obj/item/clothing/head/costume/pharaoh = 1, //dont google camel by camel worst mistake of my life + ) + + contraband_nova = list( + /obj/item/clothing/neck/chaplain = 1, + /obj/item/clothing/neck/chaplain/black = 1, + /obj/item/implanter/mortis = 1, + ) + +/obj/machinery/vending/cart + products_nova = list( + /obj/item/radio/headset/headset_srv = 3, + ) + +/obj/machinery/vending/wardrobe/chem_wardrobe + products_nova = list( + /obj/item/clothing/under/rank/medical/chemist/nova/formal = 2, + /obj/item/clothing/under/rank/medical/chemist/nova/formal/skirt = 2, + /obj/item/clothing/head/beret/medical/chemist = 2, + /obj/item/storage/backpack/messenger/chem = 2, + ) + +/obj/machinery/vending/wardrobe/viro_wardrobe + products_nova = list( + /obj/item/clothing/head/beret/medical/virologist = 2, + /obj/item/storage/backpack/messenger/vir = 2, + ) + +/obj/machinery/vending/wardrobe/det_wardrobe + products_nova = list( + /obj/item/clothing/head/fedora/beige = 2, + /obj/item/clothing/head/fedora/white = 2, + /obj/item/clothing/under/costume/cybersleek = 2, + /obj/item/clothing/under/costume/cybersleek/long = 2, + /obj/item/clothing/head/fedora/det_hat/cybergoggles = 2, + /obj/item/clothing/suit/toggle/deckard = 2, + /obj/item/clothing/suit/armor/vest/det_suit/runner = 2, + /obj/item/clothing/under/rank/security/detective/runner = 2, + /obj/item/clothing/suit/toggle/labcoat/nova/highvis = 2, + /obj/item/clothing/under/rank/security/detective/cowboy = 2, + /obj/item/clothing/suit/jacket/det_suit/cowboyvest = 2, + /obj/item/storage/backpack/messenger/sec = 2, + ) + +/obj/machinery/vending/wardrobe/law_wardrobe + products_nova = list( + /obj/item/clothing/under/suit/nova/black_really_collared = 3, + /obj/item/clothing/under/suit/nova/black_really_collared/skirt = 3, + /obj/item/clothing/under/suit/nova/inferno = 3, + /obj/item/clothing/under/suit/nova/inferno/skirt = 3, + /obj/item/clothing/under/suit/nova/inferno/beeze = 2, + ) + +/// GHOST CAFE WARDROBES +// Needed to remove radios from Ghost Cafe +/// Removes given list of products. Must be called before build_inventory() to actually prevent the records from being created. +/obj/machinery/vending/proc/remove_products(list/paths_to_remove) + if(!length(paths_to_remove)) + return + for(var/typepath as anything in products) + for(var/to_remove as anything in paths_to_remove) + if(ispath(typepath, to_remove)) + products.Remove(typepath) + +/obj/machinery/vending/ + /// list of products to exclude when building the vending machine's inventory + var/list/excluded_products + +/obj/machinery/vending/Initialize(mapload) + remove_products(excluded_products) + return ..() + +/obj/machinery/vending/wardrobe/cargo_wardrobe/ghost_cafe + excluded_products = list( + /obj/item/radio/headset, + ) + +/obj/machinery/vending/wardrobe/science_wardrobe/ghost_cafe + excluded_products = list( + /obj/item/radio/headset, + ) + +/obj/machinery/vending/wardrobe/bar_wardrobe/ghost_cafe + excluded_products = list( + /obj/item/radio/headset, + ) + +/obj/machinery/vending/wardrobe/chef_wardrobe/ghost_cafe + excluded_products = list( + /obj/item/radio/headset, + ) + +/obj/machinery/vending/wardrobe/medi_wardrobe/ghost_cafe + excluded_products = list( + /obj/item/radio/headset, + ) + +/obj/machinery/vending/wardrobe/engi_wardrobe/ghost_cafe + excluded_products = list( + /obj/item/radio/headset, + ) + +/obj/machinery/vending/wardrobe/law_wardrobe/ghost_cafe + excluded_products = list( + /obj/item/radio/headset, + ) + +/obj/machinery/vending/wardrobe/jani_wardrobe/ghost_cafe + excluded_products = list( + /obj/item/radio/headset, + ) + +/obj/machinery/vending/wardrobe/coroner_wardrobe/ghost_cafe + excluded_products = list( + /obj/item/radio/headset, + ) + +/obj/machinery/vending/wardrobe/curator_wardrobe/ghost_cafe + excluded_products = list( + /obj/item/radio/headset, + ) +/obj/machinery/vending/wardrobe/chap_wardrobe/unholy/ghost_cafe + excluded_products = list( + /obj/item/radio/headset, + ) + +/obj/machinery/vending/wardrobe/gene_wardrobe/ghost_cafe + excluded_products = list( + /obj/item/radio/headset, + ) + +/obj/machinery/vending/wardrobe/chem_wardrobe/ghost_cafe + excluded_products = list( + /obj/item/radio/headset, + ) + +/obj/machinery/vending/wardrobe/viro_wardrobe/ghost_cafe + excluded_products = list( + /obj/item/radio/headset, + ) + +/obj/machinery/vending/wardrobe/robo_wardrobe/ghost_cafe + excluded_products = list( + /obj/item/radio/headset, + ) + +/obj/machinery/vending/wardrobe/hydro_wardrobe/ghost_cafe + excluded_products = list( + /obj/item/radio/headset, + ) diff --git a/modular_nova/modules/modular_weapons/code/autolathe_designs.dm b/modular_nova/modules/modular_weapons/code/autolathe_designs.dm new file mode 100644 index 00000000000000..d91a802fd84a93 --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/autolathe_designs.dm @@ -0,0 +1,99 @@ +/* +* AMMO +*/ + +/datum/design/strilka310_rubber + name = ".310 Rubber Bullet (Less Lethal)" + id = "astrilka310_rubber" + build_type = AUTOLATHE + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/ammo_casing/strilka310/rubber + category = list( + RND_CATEGORY_HACKED, + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, + ) + +// 4.6x30mm - SMG round, used in the WT550 and in numerous modular guns as a weaker alternative to 9mm. + +/datum/design/c46x30mm + name = "4.6x30mm Bullet" + id = "c46x30mm" + build_type = AUTOLATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5, + ) + build_path = /obj/item/ammo_casing/c46x30mm + category = list( + RND_CATEGORY_HACKED, + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, + ) + +/datum/design/c46x30mm_rubber + name = "4.6x30mm Rubber Bullet" + id = "c46x30mm_rubber" + build_type = AUTOLATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5 + ) + build_path = /obj/item/ammo_casing/c46x30mm/rubber + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, + ) + +// .45 + +/datum/design/c45_lethal + name = ".45 Bullet" + id = "c45_lethal" + build_type = AUTOLATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5, + ) + build_path = /obj/item/ammo_casing/c45 + category = list( + RND_CATEGORY_HACKED, + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, + ) + +/datum/design/c45_rubber + name = ".45 Bouncy Rubber Ball" + id = "c45_rubber" + build_type = AUTOLATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5, + ) + build_path = /obj/item/ammo_casing/c45/rubber + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, + ) + +// 10mm +/datum/design/c10mm_lethal + name = "10mm Bullet" + id = "c10mm_lethal" + build_type = AUTOLATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5, + ) + build_path = /obj/item/ammo_casing/c10mm + category = list( + RND_CATEGORY_HACKED, + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, + ) + +/datum/design/c10mm_rubber + name = "10mm Rubber Bullet" + id = "c10mm_rubber" + build_type = AUTOLATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5, + ) + build_path = /obj/item/ammo_casing/c10mm/rubber + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, + ) diff --git a/modular_nova/modules/modular_weapons/code/ballistic_master.dm b/modular_nova/modules/modular_weapons/code/ballistic_master.dm new file mode 100644 index 00000000000000..fbb4ab76f5636a --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/ballistic_master.dm @@ -0,0 +1,34 @@ +/obj/item/gun/ballistic + /// if this gun has a penalty for reloading with an ammo_box type + var/box_reload_penalty = TRUE + /// reload penalty inflicted by using an ammo box instead of an individual cartridge, if not outright exchanging the magazine + var/box_reload_delay = CLICK_CD_MELEE + +/* +* hey there's like... no better place to put these overrides, sorry +* if there's other guns that use speedloader-likes or otherwise have a reason to +* probably not have a CLICK_CD_MELEE cooldown for reloading them with something else +* i guess add it here? only current example is revolvers +* you could maybe make a case for double-barrels? i'll leave that for discussion in the pr comments +*/ + +/obj/item/gun/ballistic/revolver + box_reload_delay = CLICK_CD_RAPID // honestly this is negligible because of the inherent delay of having to switch hands + +/obj/item/gun/ballistic/rifle/boltaction // slightly less negligible than a revolver, since this is mostly for fairly powerful but crew-accessible stuff like mosins + box_reload_delay = CLICK_CD_RANGE + +/// Reloading with ammo box can incur penalty with some guns +/obj/item/gun/ballistic/proc/handle_box_reload(mob/user, obj/item/ammo_box/ammobox, num_loaded) + var/box_load = FALSE // if you're reloading with an ammo box, inflicts a cooldown + if(istype(ammobox, /obj/item/ammo_box) && box_reload_penalty) + box_load = TRUE + user.changeNext_move(box_reload_delay) // cooldown to simulate having to fumble for another round + balloon_alert(user, "reload encumbered!") + to_chat(user, span_notice("You load [num_loaded] [cartridge_wording]\s into [src][box_load ? ", but it takes some extra effort" : ""].")) + +/obj/effect/temp_visual/dir_setting/firing_effect + light_system = MOVABLE_LIGHT + light_range = 2 + light_power = 1 + light_color = LIGHT_COLOR_FIRE diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/advert.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/advert.dm new file mode 100644 index 00000000000000..72c5632237dcb8 --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/advert.dm @@ -0,0 +1,36 @@ +/obj/structure/sign/poster/official/carwo_grenade + name = "Tydhouer - Precision Timing" + desc = "This poster depicts, alongside the prominent logo of Carwo Defense Systems, a variety of specialist .980 Tydhouer grenades for the Kiboko launcher." + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/propaganda.dmi' + icon_state = "grenadier" + +/obj/structure/sign/poster/official/carwo_grenade/examine_more(mob/user) + . = ..() + + . += "Small text details that certain types of grenades may not be available in your \ + region depending on local weapons regulations. Suspiciously, however, if you squint at \ + it a bit, the background colors of the image come together vaguely in the shape of \ + a computer board and a multitool. What did they mean by this?" + + return . + +MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/carwo_grenade, 32) + +/obj/structure/sign/poster/official/carwo_magazine + name = "Standardisation - Magazines of the Future" + desc = "This poster depicts, alongside the prominent logo of Carwo Defense Systems, the variety of magazine types the company has on offer for rifles. \ + It also goes into great deal to say, more or less, that any rifle can take any rifle magazine. Now this is technology like never seen before." + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/propaganda.dmi' + icon_state = "mag_size" + +/obj/structure/sign/poster/official/carwo_magazine/examine_more(mob/user) + . = ..() + + . += "Small text details that certain types of magazines may not be available in your \ + region depending on local weapons regulations. Suspiciously, however, if you squint at \ + it a bit, the background colors of the image come together vaguely in the shape of \ + a computer board and a multitool. What did they mean by this?" + + return . + +MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/carwo_magazine, 32) diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/grenade.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/grenade.dm similarity index 92% rename from modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/grenade.dm rename to modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/grenade.dm index fa3e2e80460bf5..26ae52cebe68f1 100644 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/grenade.dm +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/grenade.dm @@ -21,7 +21,7 @@ name = ".980 Tydhouer practice grenade" desc = "A large grenade shell that will detonate at a range given to it by the gun that fires it. Practice shells disintegrate into harmless sparks." - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi' + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi' icon_state = "980_solid" caliber = CALIBER_980TYDHOUER @@ -65,7 +65,7 @@ /// Generic proc that is called when the projectile should 'detonate', being either on impact or when the range runs out /obj/projectile/bullet/c980grenade/proc/fuse_activation(atom/target) - playsound(src, 'modular_skyrat/modules/modular_weapons/sounds/grenade_burst.ogg', 50, TRUE, -3) + playsound(src, 'modular_nova/modules/modular_weapons/sounds/grenade_burst.ogg', 50, TRUE, -3) do_sparks(3, FALSE, src) @@ -73,7 +73,7 @@ name = "ammo box (.980 Tydhouer practice)" desc = "A box of four .980 Tydhouer practice grenades. Instructions on the box indicate these are dummy practice rounds that will disintegrate into sparks on detonation. Neat!" - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi' + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi' icon_state = "980box_solid" multiple_sprites = AMMO_BOX_FULL_EMPTY @@ -101,7 +101,7 @@ /obj/projectile/bullet/c980grenade/smoke/fuse_activation(atom/target) - playsound(src, 'modular_skyrat/modules/modular_weapons/sounds/grenade_burst.ogg', 50, TRUE, -3) + playsound(src, 'modular_nova/modules/modular_weapons/sounds/grenade_burst.ogg', 50, TRUE, -3) playsound(src, 'sound/effects/smoke.ogg', 50, TRUE, -3) var/datum/effect_system/fluid_spread/smoke/bad/smoke = new smoke.set_up(GRENADE_SMOKE_RANGE, holder = src, location = src) @@ -146,7 +146,7 @@ shrapnel_maker.detonate() qdel(shrapnel_maker) - playsound(src, 'modular_skyrat/modules/modular_weapons/sounds/grenade_burst.ogg', 50, TRUE, -3) + playsound(src, 'modular_nova/modules/modular_weapons/sounds/grenade_burst.ogg', 50, TRUE, -3) /obj/item/ammo_box/c980grenade/shrapnel @@ -237,7 +237,7 @@ name = ".980 Tydhouer tear gas grenade" /obj/projectile/bullet/c980grenade/riot/fuse_activation(atom/target) - playsound(src, 'modular_skyrat/modules/modular_weapons/sounds/grenade_burst.ogg', 50, TRUE, -3) + playsound(src, 'modular_nova/modules/modular_weapons/sounds/grenade_burst.ogg', 50, TRUE, -3) playsound(src, 'sound/effects/smoke.ogg', 50, TRUE, -3) var/datum/effect_system/fluid_spread/smoke/chem/smoke = new() smoke.chemholder.add_reagent(/datum/reagent/consumable/condensedcapsaicin, 10) diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/pistol.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/pistol.dm new file mode 100644 index 00000000000000..7a36deb9c757b1 --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/pistol.dm @@ -0,0 +1,134 @@ +// .35 Sol Short +// Pistol caliber caseless round used almost exclusively by SolFed weapons + +/obj/item/ammo_casing/c35sol + name = ".35 Sol Short lethal bullet casing" + desc = "A SolFed standard caseless lethal pistol round." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi' + icon_state = "35sol" + + caliber = CALIBER_SOL35SHORT + projectile_type = /obj/projectile/bullet/c35sol + + +/obj/item/ammo_casing/c35sol/Initialize(mapload) + . = ..() + + AddElement(/datum/element/caseless) + + +/obj/projectile/bullet/c35sol + name = ".35 Sol Short bullet" + damage = 25 + + wound_bonus = 10 // Normal bullets are 20 + bare_wound_bonus = 20 + + +/obj/item/ammo_box/c35sol + name = "ammo box (.35 Sol Short lethal)" + desc = "A box of .35 Sol Short pistol rounds, holds twenty-four rounds." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi' + icon_state = "35box" + + multiple_sprites = AMMO_BOX_FULL_EMPTY + + w_class = WEIGHT_CLASS_NORMAL + + caliber = CALIBER_SOL35SHORT + ammo_type = /obj/item/ammo_casing/c35sol + max_ammo = 24 + + +// .35 Sol's equivalent to a rubber bullet + +/obj/item/ammo_casing/c35sol/incapacitator + name = ".35 Sol Short incapacitator bullet casing" + desc = "A SolFed standard caseless less-lethal pistol round. Exhausts targets on hit, has a tendency to bounce off walls at shallow angles." + + icon_state = "35sol_disabler" + + projectile_type = /obj/projectile/bullet/c35sol/incapacitator + harmful = FALSE + + +/obj/projectile/bullet/c35sol/incapacitator + name = ".35 Sol Short incapacitator bullet" + damage = 5 + stamina = 30 + + wound_bonus = -40 + bare_wound_bonus = -20 + + weak_against_armour = TRUE + + // The stats of the ricochet are a nerfed version of detective revolver rubber ammo + // This is due to the fact that there's a lot more rounds fired quickly from weapons that use this, over a revolver + ricochet_auto_aim_angle = 30 + ricochet_auto_aim_range = 5 + ricochets_max = 4 + ricochet_incidence_leeway = 50 + ricochet_chance = 130 + ricochet_decay_damage = 0.8 + + shrapnel_type = null + sharpness = NONE + embedding = null + + +/obj/item/ammo_box/c35sol/incapacitator + name = "ammo box (.35 Sol Short incapacitator)" + desc = "A box of .35 Sol Short pistol rounds, holds twenty-four rounds. The blue stripe indicates this should hold less-lethal ammunition." + + icon_state = "35box_disabler" + + ammo_type = /obj/item/ammo_casing/c35sol/incapacitator + + +// .35 Sol ripper, similar to the detective revolver's dumdum rounds, causes slash wounds and is weak to armor + +/obj/item/ammo_casing/c35sol/ripper + name = ".35 Sol Short ripper bullet casing" + desc = "A SolFed standard caseless ripper pistol round. Causes slashing wounds on targets, but is weak to armor." + + icon_state = "35sol_shrapnel" + projectile_type = /obj/projectile/bullet/c35sol/ripper + + custom_materials = AMMO_MATS_RIPPER + advanced_print_req = TRUE + + +/obj/projectile/bullet/c35sol/ripper + name = ".35 Sol ripper bullet" + damage = 15 + + weak_against_armour = TRUE + + sharpness = SHARP_EDGED + + wound_bonus = 20 + bare_wound_bonus = 20 + + embedding = list( + embed_chance = 75, + fall_chance = 3, + jostle_chance = 4, + ignore_throwspeed_threshold = TRUE, + pain_stam_pct = 0.4, + pain_mult = 5, + jostle_pain_mult = 6, + rip_time = 1 SECONDS, + ) + + embed_falloff_tile = -15 + + +/obj/item/ammo_box/c35sol/ripper + name = "ammo box (.35 Sol Short ripper)" + desc = "A box of .35 Sol Short pistol rounds, holds twenty-four rounds. The purple stripe indicates this should hold hollowpoint-like ammunition." + + icon_state = "35box_shrapnel" + + ammo_type = /obj/item/ammo_casing/c35sol/ripper diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/rifle.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/rifle.dm new file mode 100644 index 00000000000000..37dff35d03f7ed --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/rifle.dm @@ -0,0 +1,195 @@ +// .40 Sol Long +// Rifle caliber caseless ammo that kills people good + +/obj/item/ammo_casing/c40sol + name = ".40 Sol Long lethal bullet casing" + desc = "A SolFed standard caseless lethal rifle round." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi' + icon_state = "40sol" + + caliber = CALIBER_SOL40LONG + projectile_type = /obj/projectile/bullet/c40sol + + +/obj/item/ammo_casing/c40sol/Initialize(mapload) + . = ..() + + AddElement(/datum/element/caseless) + + +/obj/projectile/bullet/c40sol + name = ".40 Sol Long bullet" + damage = 35 + + wound_bonus = 10 + bare_wound_bonus = 20 + + +/obj/item/ammo_box/c40sol + name = "ammo box (.40 Sol Long lethal)" + desc = "A box of .40 Sol Long rifle rounds, holds thirty bullets." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi' + icon_state = "40box" + + multiple_sprites = AMMO_BOX_FULL_EMPTY + + w_class = WEIGHT_CLASS_NORMAL + + caliber = CALIBER_SOL40LONG + ammo_type = /obj/item/ammo_casing/c40sol + max_ammo = 30 + + +// .40 Sol fragmentation rounds, embeds shrapnel in the target almost every time at close to medium range. Teeeechnically less lethals. + +/obj/item/ammo_casing/c40sol/fragmentation + name = ".40 Sol Long fragmentation bullet casing" + desc = "A SolFed standard caseless fragmentation rifle round. Shatters upon impact, ejecting sharp shrapnel that can potentially incapacitate targets." + + icon_state = "40sol_disabler" + + projectile_type = /obj/projectile/bullet/c40sol/fragmentation + + advanced_print_req = TRUE + + harmful = FALSE + + +/obj/projectile/bullet/c40sol/fragmentation + name = ".40 Sol Long fragmentation bullet" + damage = 15 + stamina = 30 + + weak_against_armour = TRUE + + sharpness = SHARP_EDGED + wound_bonus = 0 + bare_wound_bonus = 10 + + shrapnel_type = /obj/item/shrapnel/stingball + embedding = list( + embed_chance = 50, + fall_chance = 5, + jostle_chance = 5, + ignore_throwspeed_threshold = TRUE, + pain_stam_pct = 0.4, + pain_mult = 2, + jostle_pain_mult = 3, + rip_time = 0.5 SECONDS, + ) + + embed_falloff_tile = -5 + + +/obj/item/ammo_box/c40sol/fragmentation + name = "ammo box (.40 Sol Long fragmentation)" + desc = "A box of .40 Sol Long rifle rounds, holds thirty bullets. The blue stripe indicates this should hold less lethal ammunition." + + icon_state = "40box_disabler" + + ammo_type = /obj/item/ammo_casing/c40sol/fragmentation + + +// .40 Sol match grade, bounces a lot, and if there's less than 20 bullet armor on wherever these hit, it'll go completely through the target and out the other side + +/obj/item/ammo_casing/c40sol/pierce + name = ".40 Sol Long match bullet casing" + desc = "A SolFed standard caseless match grade rifle round. Fires at a higher pressure and thus fires slightly faster projectiles. \ + Rumors say you can do sick ass wall bounce trick shots with these, though the official suggestion is to just shoot your target and \ + not the wall next to them." + + icon_state = "40sol_pierce" + + projectile_type = /obj/projectile/bullet/c40sol/pierce + + custom_materials = AMMO_MATS_AP + advanced_print_req = TRUE + + +/obj/projectile/bullet/c40sol/pierce + name = ".40 Sol match bullet" + + icon_state = "gaussphase" + + speed = 0.5 + + damage = 25 + armour_penetration = 20 + + wound_bonus = -30 + bare_wound_bonus = -10 + + ricochets_max = 2 + ricochet_chance = 80 + ricochet_auto_aim_range = 4 + ricochet_incidence_leeway = 65 + + projectile_piercing = PASSMOB + + +/obj/projectile/bullet/c40sol/pierce/on_hit(atom/target, blocked = 0, pierce_hit) + if(isliving(target)) + var/mob/living/poor_sap = target + + // If the target mob has enough armor to stop the bullet, or the bullet has already gone through two people, stop it on this hit + if((poor_sap.run_armor_check(def_zone, BULLET, "", "", silent = TRUE) > 20) || (pierces > 2)) + projectile_piercing = NONE + + if(damage > 10) // Lets just be safe with this one + damage -= 5 + armour_penetration -= 10 + + return ..() + + +/obj/item/ammo_box/c40sol/pierce + name = "ammo box (.40 Sol Long match)" + desc = "A box of .40 Sol Long rifle rounds, holds thirty bullets. The yellow stripe indicates this should hold high performance ammuniton." + + icon_state = "40box_pierce" + + ammo_type = /obj/item/ammo_casing/c40sol/pierce + + +// .40 Sol incendiary + +/obj/item/ammo_casing/c40sol/incendiary + name = ".40 Sol Long incendiary bullet casing" + desc = "A SolFed standard caseless incendiary rifle round. Leaves no flaming trail, only igniting targets on impact." + + icon_state = "40sol_flame" + + projectile_type = /obj/projectile/bullet/c40sol/incendiary + + custom_materials = AMMO_MATS_TEMP + advanced_print_req = TRUE + + +/obj/projectile/bullet/c40sol/incendiary + name = ".40 Sol Long incendiary bullet" + icon_state = "redtrac" + + damage = 25 + + /// How many firestacks the bullet should impart upon a target when impacting + var/firestacks_to_give = 1 + + +/obj/projectile/bullet/c40sol/incendiary/on_hit(atom/target, blocked = 0, pierce_hit) + . = ..() + + if(iscarbon(target)) + var/mob/living/carbon/gaslighter = target + gaslighter.adjust_fire_stacks(firestacks_to_give) + gaslighter.ignite_mob() + + +/obj/item/ammo_box/c40sol/incendiary + name = "ammo box (.40 Sol Long incendiary)" + desc = "A box of .40 Sol Long rifle rounds, holds thirty bullets. The orange stripe indicates this should hold incendiary ammunition." + + icon_state = "40box_flame" + + ammo_type = /obj/item/ammo_casing/c40sol/incendiary diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/grenade_launcher.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/grenade_launcher.dm similarity index 79% rename from modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/grenade_launcher.dm rename to modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/grenade_launcher.dm index b927e1cd38d987..5b9389a49af9ce 100644 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/grenade_launcher.dm +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/grenade_launcher.dm @@ -1,17 +1,17 @@ // Low caliber grenade launcher (fun & games) /obj/item/gun/ballistic/automatic/sol_grenade_launcher - name = "\improper Carwo 'Kiboko' Grenade Launcher" + name = "\improper Kiboko Grenade Launcher" desc = "A unique grenade launcher firing .980 grenades. A laser sight system allows its user to specify a range for the grenades it fires to detonate at." - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi' + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi' icon_state = "kiboko" - worn_icon = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi' + worn_icon = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi' worn_icon_state = "kiboko" - lefthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi' + lefthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi' + righthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi' inhand_icon_state = "kiboko" SET_BASE_PIXEL(-8, 0) @@ -26,7 +26,7 @@ accepted_magazine_type = /obj/item/ammo_box/magazine/c980_grenade - fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/grenade_launcher.ogg' + fire_sound = 'modular_nova/modules/modular_weapons/sounds/grenade_launcher.ogg' can_suppress = FALSE can_bayonet = FALSE @@ -43,6 +43,10 @@ /obj/item/gun/ballistic/automatic/sol_grenade_launcher/give_manufacturer_examine() AddElement(/datum/element/manufacturer_examine, COMPANY_CARWO) +/obj/item/gun/ballistic/automatic/sol_grenade_launcher/examine(mob/user) + . = ..() + . += span_notice("You can <b>examine closer</b> to learn a little more about this weapon.") + /obj/item/gun/ballistic/automatic/sol_grenade_launcher/examine_more(mob/user) . = ..() diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/gunsets.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/gunsets.dm new file mode 100644 index 00000000000000..089513a1cb0e88 --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/gunsets.dm @@ -0,0 +1,85 @@ +// Base yellow carwo case + +/obj/item/storage/toolbox/guncase/nova/carwo_large_case + desc = "A thick yellow gun case with foam inserts laid out to fit a weapon, magazines, and gear securely." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/gunsets.dmi' + icon_state = "case_carwo" + + worn_icon_state = "yellowcase" + + lefthand_file = 'modular_nova/modules/modular_weapons/icons/mob/inhands/cases_lefthand.dmi' + righthand_file = 'modular_nova/modules/modular_weapons/icons/mob/inhands/cases_righthand.dmi' + inhand_icon_state = "yellowcase" + +// Empty version of the case + +/obj/item/storage/toolbox/guncase/nova/carwo_large_case/empty + +/obj/item/storage/toolbox/guncase/nova/carwo_large_case/empty/PopulateContents() + return + +// Sindano in a box, how innovative! + +/obj/item/storage/toolbox/guncase/nova/carwo_large_case/sindano + name = "\improper Carwo 'Sindano' gunset" + + weapon_to_spawn = /obj/item/gun/ballistic/automatic/sol_smg/no_mag + extra_to_spawn = /obj/item/ammo_box/magazine/c35sol_pistol/stendo + +/obj/item/storage/toolbox/guncase/nova/carwo_large_case/sindano/PopulateContents() + new weapon_to_spawn (src) + + generate_items_inside(list( + /obj/item/ammo_box/c35sol/incapacitator = 1, + /obj/item/ammo_box/c35sol = 1, + /obj/item/ammo_box/magazine/c35sol_pistol/stendo/starts_empty = 1, + /obj/item/ammo_box/magazine/c35sol_pistol/starts_empty = 2, + ), src) + +/obj/item/storage/toolbox/guncase/nova/carwo_large_case/sindano/evil + weapon_to_spawn = /obj/item/gun/ballistic/automatic/sol_smg/evil/no_mag + +// Boxed grenade launcher, grenades sold seperately on this one + +/obj/item/storage/toolbox/guncase/nova/carwo_large_case/kiboko_magless + name = "\improper Carwo 'Kiboko' gunset" + + weapon_to_spawn = /obj/item/gun/ballistic/automatic/sol_grenade_launcher/no_mag + extra_to_spawn = /obj/item/ammo_box/magazine/c980_grenade/starts_empty + + +/obj/structure/closet/secure_closet/armory_kiboko + name = "heavy equipment locker" + req_access = list(ACCESS_ARMORY) + icon_state = "shotguncase" + +/obj/structure/closet/secure_closet/armory_kiboko/PopulateContents() + . = ..() + + generate_items_inside(list( + /obj/item/storage/toolbox/guncase/nova/carwo_large_case/kiboko_magless = 1, + /obj/item/ammo_box/c980grenade = 2, + /obj/item/ammo_box/c980grenade/smoke = 1, + /obj/item/ammo_box/c980grenade/riot = 1, + ), src) + +/obj/structure/closet/secure_closet/armory_kiboko_but_evil + name = "heavy equipment locker" + icon = 'modular_nova/master_files/icons/obj/closet.dmi' + icon_door = "riot" + icon_state = "riot" + req_access = list(ACCESS_SYNDICATE) + anchored = 1 + +/obj/structure/closet/secure_closet/armory_kiboko_but_evil/PopulateContents() + . = ..() + + generate_items_inside(list( + /obj/item/gun/ballistic/automatic/sol_grenade_launcher/evil/no_mag = 1, + /obj/item/ammo_box/magazine/c980_grenade/drum/starts_empty = 2, + /obj/item/ammo_box/c980grenade/shrapnel = 1, + /obj/item/ammo_box/c980grenade/shrapnel/phosphor = 1, + /obj/item/ammo_box/c980grenade/smoke = 1, + /obj/item/ammo_box/c980grenade/riot = 1, + ), src) diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/magazines.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/magazines.dm new file mode 100644 index 00000000000000..f518fe89facbab --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/magazines.dm @@ -0,0 +1,99 @@ +// .35 Sol pistol magazines + +/obj/item/ammo_box/magazine/c35sol_pistol + name = "\improper Sol pistol magazine" + desc = "A standard size magazine for SolFed pistols, holds twelve rounds." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi' + icon_state = "pistol_35_standard" + + multiple_sprites = AMMO_BOX_FULL_EMPTY + + w_class = WEIGHT_CLASS_TINY + + ammo_type = /obj/item/ammo_casing/c35sol + caliber = CALIBER_SOL35SHORT + max_ammo = 12 + +/obj/item/ammo_box/magazine/c35sol_pistol/starts_empty + start_empty = TRUE + +/obj/item/ammo_box/magazine/c35sol_pistol/stendo + name = "\improper Sol extended pistol magazine" + desc = "An extended magazine for SolFed pistols, holds twenty-four rounds." + + icon_state = "pistol_35_stended" + + w_class = WEIGHT_CLASS_NORMAL + + max_ammo = 24 + +/obj/item/ammo_box/magazine/c35sol_pistol/stendo/starts_empty + start_empty = TRUE + +// .40 Sol rifle magazines + +/obj/item/ammo_box/magazine/c40sol_rifle + name = "\improper Sol rifle short magazine" + desc = "A shortened magazine for SolFed rifles, holds fifteen rounds." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi' + icon_state = "rifle_short" + + multiple_sprites = AMMO_BOX_FULL_EMPTY + + w_class = WEIGHT_CLASS_TINY + + ammo_type = /obj/item/ammo_casing/c40sol + caliber = CALIBER_SOL40LONG + max_ammo = 15 + +/obj/item/ammo_box/magazine/c40sol_rifle/starts_empty + + start_empty = TRUE + +/obj/item/ammo_box/magazine/c40sol_rifle/standard + name = "\improper Sol rifle magazine" + desc = "A standard size magazine for SolFed rifles, holds thirty rounds." + + icon_state = "rifle_standard" + + w_class = WEIGHT_CLASS_SMALL + + max_ammo = 30 + +/obj/item/ammo_box/magazine/c40sol_rifle/standard/starts_empty + start_empty = TRUE + +// .980 grenade magazines + +/obj/item/ammo_box/magazine/c980_grenade + name = "\improper Kiboko grenade box" + desc = "A standard size box for .980 grenades, holds four shells." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi' + icon_state = "granata_standard" + + multiple_sprites = AMMO_BOX_FULL_EMPTY + + w_class = WEIGHT_CLASS_SMALL + + ammo_type = /obj/item/ammo_casing/c980grenade + caliber = CALIBER_980TYDHOUER + max_ammo = 4 + +/obj/item/ammo_box/magazine/c980_grenade/starts_empty + start_empty = TRUE + +/obj/item/ammo_box/magazine/c980_grenade/drum + name = "\improper Kiboko grenade drum" + desc = "A drum for .980 grenades, holds six shells." + + icon_state = "granata_drum" + + w_class = WEIGHT_CLASS_NORMAL + + max_ammo = 6 + +/obj/item/ammo_box/magazine/c980_grenade/drum/starts_empty + start_empty = TRUE diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/rifle.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/rifle.dm new file mode 100644 index 00000000000000..2650330651f7bc --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/rifle.dm @@ -0,0 +1,164 @@ +// Base Sol rifle + +/obj/item/gun/ballistic/automatic/sol_rifle + name = "\improper Carwo-Cawil Battle Rifle" + desc = "A heavy battle rifle firing .40 Sol. Commonly seen in the hands of SolFed military types. Accepts any standard SolFed rifle magazine." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi' + icon_state = "infanterie" + + worn_icon = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi' + worn_icon_state = "infanterie" + + lefthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi' + righthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi' + inhand_icon_state = "infanterie" + + SET_BASE_PIXEL(-8, 0) + + special_mags = TRUE + + bolt_type = BOLT_TYPE_LOCKING + + w_class = WEIGHT_CLASS_BULKY + weapon_weight = WEAPON_HEAVY + slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_OCLOTHING + + accepted_magazine_type = /obj/item/ammo_box/magazine/c40sol_rifle + spawn_magazine_type = /obj/item/ammo_box/magazine/c40sol_rifle/standard + + fire_sound = 'modular_nova/modules/modular_weapons/sounds/rifle_heavy.ogg' + suppressed_sound = 'modular_nova/modules/modular_weapons/sounds/suppressed_rifle.ogg' + can_suppress = TRUE + + can_bayonet = FALSE + + suppressor_x_offset = 12 + + burst_size = 1 + fire_delay = 0.45 SECONDS + actions_types = list() + + spread = 7.5 + projectile_wound_bonus = -10 + +/obj/item/gun/ballistic/automatic/sol_rifle/Initialize(mapload) + . = ..() + + give_autofire() + +/// Separate proc for handling auto fire just because one of these subtypes isn't otomatica +/obj/item/gun/ballistic/automatic/sol_rifle/proc/give_autofire() + AddComponent(/datum/component/automatic_fire, fire_delay) + +/obj/item/gun/ballistic/automatic/sol_rifle/give_manufacturer_examine() + AddElement(/datum/element/manufacturer_examine, COMPANY_CARWO) + +/obj/item/gun/ballistic/automatic/sol_rifle/examine(mob/user) + . = ..() + . += span_notice("You can <b>examine closer</b> to learn a little more about this weapon.") + +/obj/item/gun/ballistic/automatic/sol_rifle/examine_more(mob/user) + . = ..() + + . += "The Carwo-Cawil rifles are built by Carwo for \ + use by SolFed's various infantry branches. Following the rather reasonable \ + military requirements of using the same few cartridges and magazines, \ + the lifespans of logistics coordinators and quartermasters everywhere \ + were lengthened by several years. While typically only for military sale \ + in the past, the recent collapse of certain unnamed weapons manufacturers \ + has caused Carwo to open many of its military weapons to civilian sale, \ + which includes this one." + + return . + +/obj/item/gun/ballistic/automatic/sol_rifle/no_mag + spawnwithmagazine = FALSE + +// Sol marksman rifle + +/obj/item/gun/ballistic/automatic/sol_rifle/marksman + name = "\improper Cawil Marksman Rifle" + desc = "A heavy marksman rifle commonly seen in the hands of SolFed military types. Accepts any standard SolFed rifle magazine." + + icon_state = "elite" + worn_icon_state = "elite" + inhand_icon_state = "elite" + + spawn_magazine_type = /obj/item/ammo_box/magazine/c40sol_rifle + + fire_delay = 0.75 SECONDS + + spread = 0 + projectile_damage_multiplier = 1.2 + projectile_wound_bonus = 10 + +/obj/item/gun/ballistic/automatic/sol_rifle/marksman/Initialize(mapload) + . = ..() + + AddComponent(/datum/component/scope, range_modifier = 2) + +/obj/item/gun/ballistic/automatic/sol_rifle/marksman/give_autofire() + return + +/obj/item/gun/ballistic/automatic/sol_rifle/marksman/examine_more(mob/user) + . = ..() + + . += "This particlar variant is a marksman rifle. \ + Automatic fire was forsaken for a semi-automatic setup, a more fitting \ + stock, and more often than not a scope. Typically also seen with smaller \ + magazines for convenience for the shooter, but as with any other Sol \ + rifle, all standard magazine types will work." + + return . + +/obj/item/gun/ballistic/automatic/sol_rifle/marksman/no_mag + spawnwithmagazine = FALSE + +// Machinegun based on the base Sol rifle + +/obj/item/gun/ballistic/automatic/sol_rifle/machinegun + name = "\improper Qarad Light Machinegun" + desc = "A hefty machinegun commonly seen in the hands of SolFed military types. Accepts any standard SolFed rifle magazine." + + icon_state = "qarad" + worn_icon_state = "outomaties" + inhand_icon_state = "outomaties" + + bolt_type = BOLT_TYPE_OPEN + + spawn_magazine_type = /obj/item/ammo_box/magazine/c40sol_rifle + + fire_delay = 0.1 SECONDS + + recoil = 1 + spread = 12.5 + projectile_wound_bonus = -20 + +/obj/item/gun/ballistic/automatic/sol_rifle/machinegun/examine_more(mob/user) + . = ..() + + . += "The 'Qarad' variant of the rifle, what you are looking at now, \ + is a modification to turn the weapon into a passable, if sub-optimal \ + light machinegun. To support the machinegun role, the internals were \ + converted to make the gun into an open bolt, faster firing machine. These \ + additions, combined with a battle rifle not meant to be used fully auto \ + much to begin with, made for a relatively unwieldy weapon. A machinegun, \ + however, is still a machinegun, no matter how hard it is to keep on target." + + return . + +/obj/item/gun/ballistic/automatic/sol_rifle/machinegun/no_mag + spawnwithmagazine = FALSE + +// Evil version of the rifle (nothing different its just black) + +/obj/item/gun/ballistic/automatic/sol_rifle/evil + desc = "A heavy battle rifle, this one seems to be painted tacticool black. Accepts any standard SolFed rifle magazine." + + icon_state = "infanterie_evil" + worn_icon_state = "infanterie_evil" + inhand_icon_state = "infanterie_evil" + +/obj/item/gun/ballistic/automatic/sol_rifle/evil/no_mag + spawnwithmagazine = FALSE diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/shotgun.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/shotgun.dm new file mode 100644 index 00000000000000..ba31a16bf09d5b --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/shotgun.dm @@ -0,0 +1,66 @@ +// SolFed shotgun (this was gonna be in a proprietary shotgun shell type outside of 12ga at some point, wild right?) + +/obj/item/gun/ballistic/shotgun/riot/sol + name = "\improper Renoster Shotgun" + desc = "A twelve gauge shotgun with a six shell capacity underneath. Made for and used by SolFed's various military branches." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi' + icon_state = "renoster" + + worn_icon = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi' + worn_icon_state = "renoster" + + lefthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi' + righthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi' + inhand_icon_state = "renoster" + + inhand_x_dimension = 32 + inhand_y_dimension = 32 + + SET_BASE_PIXEL(-8, 0) + + fire_sound = 'modular_nova/modules/modular_weapons/sounds/shotgun_heavy.ogg' + rack_sound = 'modular_nova/modules/modular_weapons/sounds/shotgun_rack.ogg' + suppressed_sound = 'modular_nova/modules/modular_weapons/sounds/suppressed_heavy.ogg' + can_suppress = TRUE + + suppressor_x_offset = 9 + + w_class = WEIGHT_CLASS_BULKY + slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_OCLOTHING + +/obj/item/gun/ballistic/shotgun/riot/sol/give_manufacturer_examine() + AddElement(/datum/element/manufacturer_examine, COMPANY_CARWO) + +/obj/item/gun/ballistic/shotgun/riot/sol/examine(mob/user) + . = ..() + . += span_notice("You can <b>examine closer</b> to learn a little more about this weapon.") + +/obj/item/gun/ballistic/shotgun/riot/sol/examine_more(mob/user) + . = ..() + + . += "The Renoster was designed at its core as a police shotgun. \ + As consequence, it holds all the qualities a police force would want \ + in one. Large shell capacity, sturdy frame, while holding enough \ + capacity for modification to satiate even the most overfunded of \ + peacekeeper forces. Inevitably, the weapon made its way into civilian \ + markets alongside its sale to several military branches that also \ + saw value in having a heavy shotgun." + + return . + +/obj/item/gun/ballistic/shotgun/riot/sol/update_appearance(updates) + if(sawn_off) + suppressor_x_offset = 0 + SET_BASE_PIXEL(0, 0) + + . = ..() + +// Shotgun but EVIL! + +/obj/item/gun/ballistic/shotgun/riot/sol/evil + desc = "A twleve guage shotgun with an eight shell capacity underneath. This one is painted in a tacticool black." + + icon_state = "renoster_evil" + worn_icon_state = "renoster_evil" + inhand_icon_state = "renoster_evil" diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/submachinegun.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/submachinegun.dm new file mode 100644 index 00000000000000..a6431039af80e1 --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/submachinegun.dm @@ -0,0 +1,69 @@ +// Base Sol SMG + +/obj/item/gun/ballistic/automatic/sol_smg + name = "\improper Sindano Submachine Gun" + desc = "A small submachine gun firing .35 Sol. Commonly seen in the hands of PMCs and other unsavory corpos. Accepts any standard Sol pistol magazine." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns32x.dmi' + icon_state = "sindano" + + lefthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi' + righthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi' + inhand_icon_state = "sindano" + + special_mags = TRUE + + bolt_type = BOLT_TYPE_OPEN + + w_class = WEIGHT_CLASS_NORMAL + weapon_weight = WEAPON_MEDIUM + slot_flags = ITEM_SLOT_OCLOTHING | ITEM_SLOT_BELT + + accepted_magazine_type = /obj/item/ammo_box/magazine/c35sol_pistol + spawn_magazine_type = /obj/item/ammo_box/magazine/c35sol_pistol/stendo + + fire_sound = 'modular_nova/modules/modular_weapons/sounds/smg_light.ogg' + can_suppress = TRUE + + can_bayonet = FALSE + + suppressor_x_offset = 11 + + burst_size = 3 + fire_delay = 0.2 SECONDS + + spread = 7.5 + +/obj/item/gun/ballistic/automatic/sol_smg/give_manufacturer_examine() + AddElement(/datum/element/manufacturer_examine, COMPANY_CARWO) + +/obj/item/gun/ballistic/automatic/sol_smg/examine(mob/user) + . = ..() + . += span_notice("You can <b>examine closer</b> to learn a little more about this weapon.") + +/obj/item/gun/ballistic/automatic/sol_smg/examine_more(mob/user) + . = ..() + + . += "The Sindano submachinegun was originally produced for military contract. \ + These guns were seen in the hands of anyone from medics, ship techs, logistics officers, \ + and shuttle pilots often had several just to show off. Due to SolFed's quest to \ + extend the lifespans of their logistics officers and quartermasters, the weapon \ + uses the same standard pistol cartridge that most other miltiary weapons of \ + small caliber use. This results in interchangeable magazines between pistols \ + and submachineguns, neat!" + + return . + +/obj/item/gun/ballistic/automatic/sol_smg/no_mag + spawnwithmagazine = FALSE + +// Sindano (evil) + +/obj/item/gun/ballistic/automatic/sol_smg/evil + desc = "A small submachinegun, this one is painted in tacticool black. Accepts any standard Sol pistol magazine." + + icon_state = "sindano_evil" + inhand_icon_state = "sindano_evil" + +/obj/item/gun/ballistic/automatic/sol_smg/evil/no_mag + spawnwithmagazine = FALSE diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/pistol.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/pistol.dm new file mode 100644 index 00000000000000..5f218ebe25ef67 --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/pistol.dm @@ -0,0 +1,66 @@ +// .27-54 Cesarzowa +// Small caliber pistol round meant to be fired out of something that shoots real quick like + +/obj/item/ammo_casing/c27_54cesarzowa + name = ".27-54 Cesarzowa piercing bullet casing" + desc = "A purple-bodied caseless cartridge home to a small projectile with a fine point." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi' + icon_state = "27-54cesarzowa" + + caliber = CALIBER_CESARZOWA + projectile_type = /obj/projectile/bullet/c27_54cesarzowa + +/obj/item/ammo_casing/c27_54cesarzowa/Initialize(mapload) + . = ..() + + AddElement(/datum/element/caseless) + +/obj/projectile/bullet/c27_54cesarzowa + name = ".27-54 Cesarzowa piercing bullet" + damage = 15 + armour_penetration = 30 + wound_bonus = -30 + bare_wound_bonus = -10 + +/obj/item/ammo_box/c27_54cesarzowa + name = "ammo box (.27-54 Cesarzowa piercing)" + desc = "A box of .27-54 Cesarzowa piercing pistol rounds, holds eighteen cartridges." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi' + icon_state = "27-54cesarzowa_box" + + multiple_sprites = AMMO_BOX_FULL_EMPTY + + w_class = WEIGHT_CLASS_NORMAL + + caliber = CALIBER_CESARZOWA + ammo_type = /obj/item/ammo_casing/c27_54cesarzowa + max_ammo = 18 + +// .27-54 Cesarzowa rubber +// Small caliber pistol round meant to be fired out of something that shoots real quick like, this one is less lethal + +/obj/item/ammo_casing/c27_54cesarzowa/rubber + name = ".27-54 Cesarzowa rubber bullet casing" + desc = "A purple-bodied caseless cartridge home to a small projectile with a flat rubber tip." + + icon_state = "27-54cesarzowa_rubber" + + projectile_type = /obj/projectile/bullet/c27_54cesarzowa/rubber + +/obj/projectile/bullet/c27_54cesarzowa/rubber + name = ".27-54 Cesarzowa rubber bullet" + stamina = 20 + damage = 10 + weak_against_armour = TRUE + wound_bonus = -30 + bare_wound_bonus = -10 + +/obj/item/ammo_box/c27_54cesarzowa/rubber + name = "ammo box (.27-54 Cesarzowa rubber)" + desc = "A box of .27-54 Cesarzowa rubber pistol rounds, holds eighteen cartridges." + + icon_state = "27-54cesarzowa_box_rubber" + + ammo_type = /obj/item/ammo_casing/c27_54cesarzowa/rubber diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/plasma.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/plasma.dm new file mode 100644 index 00000000000000..f0ce4e32bd5a0f --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/plasma.dm @@ -0,0 +1,21 @@ +// Casing and projectile for the plasma thrower + +/obj/item/ammo_casing/energy/laser/plasma_glob + projectile_type = /obj/projectile/beam/laser/plasma_glob + fire_sound = 'modular_nova/modules/microfusion/sound/incinerate.ogg' + +/obj/item/ammo_casing/energy/laser/plasma_glob/Initialize(mapload) + . = ..() + + AddElement(/datum/element/caseless) + +/obj/projectile/beam/laser/plasma_glob + name = "plasma globule" + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi' + icon_state = "plasma_glob" + damage = 10 + speed = 1.5 + bare_wound_bonus = 55 // Lasers have a wound bonus of 40, this is a bit higher + wound_bonus = -50 // However we do not very much against armor + pass_flags = PASSTABLE | PASSGRILLE // His ass does NOT pass through glass! + weak_against_armour = TRUE diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/rifle.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/rifle.dm new file mode 100644 index 00000000000000..e53c55c62e9b83 --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/rifle.dm @@ -0,0 +1,68 @@ +// Various ammo boxes for .310 + +/obj/item/ammo_box/c310_cargo_box + name = "ammo box (.310 Strilka lethal)" + desc = "A box of .310 Strilka lethal rifle rounds, holds ten cartridges." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi' + icon_state = "310_box" + + multiple_sprites = AMMO_BOX_FULL_EMPTY + + w_class = WEIGHT_CLASS_NORMAL + + caliber = CALIBER_STRILKA310 + ammo_type = /obj/item/ammo_casing/strilka310 + max_ammo = 10 + +// Rubber + +/obj/item/ammo_box/c310_cargo_box/rubber + name = "ammo box (.310 Strilka rubber)" + desc = "A box of .310 Strilka rubber rifle rounds, holds ten cartridges." + + icon_state = "310_box_rubber" + + ammo_type = /obj/item/ammo_casing/strilka310/rubber + +// AP + +/obj/item/ammo_box/c310_cargo_box/piercing + name = "ammo box (.310 Strilka piercing)" + desc = "A box of .310 Strilka piercing rifle rounds, holds ten cartridges." + + icon_state = "310_box_ap" + + ammo_type = /obj/item/ammo_casing/strilka310/ap + +// AMR bullet + +/obj/item/ammo_casing/p60strela + name = ".60 Strela caseless cartridge" + desc = "A massive block of plasma-purple propellant with an equally massive round sticking out the top of it. \ + While good at killing a man, you'll find most effective use out of destroying things with it." + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi' + icon_state = "amr_bullet" + caliber = CALIBER_60STRELA + projectile_type = /obj/projectile/bullet/p60strela + +/obj/item/ammo_casing/p60strela/Initialize(mapload) + . = ..() + AddElement(/datum/element/caseless) + +/obj/projectile/bullet/p60strela // The funny thing is, these are wild but you only get three of them a magazine + name =".60 Strela bullet" + icon_state = "gaussphase" + speed = 0.4 + damage = 50 + armour_penetration = 50 + wound_bonus = 20 + bare_wound_bonus = 30 + demolition_mod = 1.8 + /// How much damage we add to things that are weak to this bullet + var/anti_materiel_damage_addition = 30 + +/obj/projectile/bullet/p60strela/Initialize(mapload) + . = ..() + // We do 80 total damage to anything robotic, namely borgs, and robotic simplemobs + AddElement(/datum/element/bane, target_type = /mob/living, mob_biotypes = MOB_ROBOTIC, damage_multiplier = 0, added_damage = anti_materiel_damage_addition) diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/magazines.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/magazines.dm new file mode 100644 index 00000000000000..a893a4f7e69fdd --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/magazines.dm @@ -0,0 +1,73 @@ +// .310 magazine for the Lanca rifle + +/obj/item/ammo_box/magazine/lanca + name = "\improper Lanca rifle magazine" + desc = "A standard size magazine for Lanca rifles, holds five rounds." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi' + icon_state = "lanca_mag" + + multiple_sprites = AMMO_BOX_FULL_EMPTY + + ammo_type = /obj/item/ammo_casing/strilka310 + caliber = CALIBER_STRILKA310 + max_ammo = 5 + +/obj/item/ammo_box/magazine/lanca/spawns_empty + start_empty = TRUE + +// Magazine for the Miecz submachinegun + +/obj/item/ammo_box/magazine/miecz + name = "\improper Miecz submachinegun magazine" + desc = "A standard size magazine for Miecz submachineguns, holds eighteen rounds." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi' + icon_state = "miecz_mag" + + multiple_sprites = AMMO_BOX_FULL_EMPTY + + ammo_type = /obj/item/ammo_casing/c27_54cesarzowa + caliber = CALIBER_CESARZOWA + max_ammo = 18 + +/obj/item/ammo_box/magazine/miecz/spawns_empty + start_empty = TRUE + +// Plasma thrower 'magazine' + +/obj/item/ammo_box/magazine/recharge/plasma_battery + name = "plasma power pack" + desc = "A rechargeable, detachable battery that serves as a power source for plasma projectors." + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi' + base_icon_state = "plasma_battery" + icon_state = "plasma_battery" + multiple_sprites = AMMO_BOX_FULL_EMPTY + ammo_type = /obj/item/ammo_casing/energy/laser/plasma_glob + caliber = CALIBER_LASER + max_ammo = 15 + +/obj/item/ammo_box/magazine/recharge/plasma_battery/update_icon_state() // FUCK YOU /OBJ/ITEM/AMMO_BOX/MAGAZINE/RECHARGE + . = ..() + icon_state = base_icon_state + +// Shotgun revolver's cylinder + +/obj/item/ammo_box/magazine/internal/cylinder/rev12ga + name = "\improper 12 GA revolver cylinder" + ammo_type = /obj/item/ammo_casing/shotgun + caliber = CALIBER_SHOTGUN + max_ammo = 4 + multiload = FALSE + +// AMR magazine + +/obj/item/ammo_box/magazine/wylom + name = "anti-materiel magazine (.60 Strela)" + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi' + icon_state = "wylom_mag" + base_icon_state = "wylom_mag" + multiple_sprites = AMMO_BOX_FULL_EMPTY + ammo_type = /obj/item/ammo_casing/p60strela + max_ammo = 3 + caliber = CALIBER_60STRELA diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/pistol.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/pistol.dm new file mode 100644 index 00000000000000..068cf2508a55af --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/pistol.dm @@ -0,0 +1,128 @@ +// Plasma spewing pistol +// Sprays a wall of plasma that sucks against armor but fucks against unarmored targets + +/obj/item/gun/ballistic/automatic/pistol/plasma_thrower + name = "\improper Słońce Plasma Projector" + desc = "An outdated sidearm rarely seen in use by some members of the CIN. \ + Uses plasma power packs. \ + Spews an inaccurate stream of searing plasma out the magnetic barrel so long as it has power and the trigger is pulled." + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_32.dmi' + icon_state = "slonce" + + fire_sound = 'modular_nova/modules/microfusion/sound/incinerate.ogg' + fire_sound_volume = 40 // This thing is comically loud otherwise + + w_class = WEIGHT_CLASS_NORMAL + accepted_magazine_type = /obj/item/ammo_box/magazine/recharge/plasma_battery + can_suppress = FALSE + show_bolt_icon = FALSE + casing_ejector = FALSE + empty_indicator = FALSE + bolt_type = BOLT_TYPE_OPEN + fire_delay = 0.1 SECONDS + spread = 15 + +/obj/item/gun/ballistic/automatic/pistol/plasma_thrower/Initialize(mapload) + . = ..() + + AddComponent(/datum/component/automatic_fire, autofire_shot_delay = fire_delay) + +/obj/item/gun/ballistic/automatic/pistol/plasma_thrower/give_manufacturer_examine() + AddElement(/datum/element/manufacturer_examine, COMPANY_SZOT) + +/obj/item/gun/ballistic/automatic/pistol/plasma_thrower/examine(mob/user) + . = ..() + . += span_notice("You can <b>examine closer</b> to learn a little more about this weapon.") + +/obj/item/gun/ballistic/automatic/pistol/plasma_thrower/examine_more(mob/user) + . = ..() + + . += "The 'Słońce' started life as an experiment in advancing the field of accelerated \ + plasma weaponry. Despite the design's obvious shortcomings in terms of accuracy and \ + range, the CIN combined military command (which we'll call the CMC from now on) took \ + interest in the weapon as a means to counter Sol's more advanced armor technology. \ + As it would turn out, the plasma globules created by the weapon were really not \ + as effective against armor as the CMC had hoped, quite the opposite actually. \ + What the plasma did do well however was inflict grevious burns upon anyone unfortunate \ + enough to get hit by it unprotected. For this reason, the 'Słońce' saw frequent use by \ + army officers and ship crews who needed a backup weapon to incinerate the odd space \ + pirate or prisoner of war." + + return . + +// Plasma sharpshooter pistol +// Shoots single, strong plasma blasts at a slow rate + +/obj/item/gun/ballistic/automatic/pistol/plasma_marksman + name = "\improper Gwiazda Plasma Sharpshooter" + desc = "An outdated sidearm rarely seen in use by some members of the CIN. \ + Uses plasma power packs. \ + Fires relatively accurate globs of searing plasma." + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_32.dmi' + icon_state = "gwiazda" + + fire_sound = 'modular_nova/modules/microfusion/sound/burn.ogg' + fire_sound_volume = 40 // This thing is comically loud otherwise + + w_class = WEIGHT_CLASS_NORMAL + accepted_magazine_type = /obj/item/ammo_box/magazine/recharge/plasma_battery + can_suppress = FALSE + show_bolt_icon = FALSE + casing_ejector = FALSE + empty_indicator = FALSE + bolt_type = BOLT_TYPE_OPEN + fire_delay = 0.6 SECONDS + spread = 2.5 + + projectile_damage_multiplier = 3 // 30 damage a shot + projectile_wound_bonus = 10 // +55 of the base projectile, burn baby burn + +/obj/item/gun/ballistic/automatic/pistol/plasma_marksman/give_manufacturer_examine() + AddElement(/datum/element/manufacturer_examine, COMPANY_SZOT) + +/obj/item/gun/ballistic/automatic/pistol/plasma_marksman/examine(mob/user) + . = ..() + . += span_notice("You can <b>examine closer</b> to learn a little more about this weapon.") + +/obj/item/gun/ballistic/automatic/pistol/plasma_marksman/examine_more(mob/user) + . = ..() + + . += "The 'Gwiazda' is a further refinement of the 'Słońce' design. with improved \ + energy cycling, magnetic launchers built to higher precision, and an overall more \ + ergonomic design. While it still fails to perform against armor, the weapon is \ + significantly more accurate and higher power, at expense of a much lower firerate. \ + Opinions on this weapon within military service were highly mixed, with many preferring \ + the sheer stopping power a spray of plasma could produce, with others loving the new ability \ + to hit something in front of you for once." + + return . + +// A revolver, but it can hold shotgun shells +// Woe, buckshot be upon ye + +/obj/item/gun/ballistic/revolver/shotgun_revolver + name = "\improper Bóbr 12 GA revolver" + desc = "An outdated sidearm rarely seen in use by some members of the CIN. A revolver type design with a four shell cylinder. That's right, shell, this one shoots twelve guage." + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/cylinder/rev12ga + recoil = SAWN_OFF_RECOIL + weapon_weight = WEAPON_MEDIUM + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_32.dmi' + icon_state = "bobr" + fire_sound = 'modular_nova/modules/sec_haul/sound/revolver_fire.ogg' + spread = SAWN_OFF_ACC_PENALTY + +/obj/item/gun/ballistic/revolver/shotgun_revolver/give_manufacturer_examine() + AddElement(/datum/element/manufacturer_examine, COMPANY_SZOT) + +/obj/item/gun/ballistic/revolver/shotgun_revolver/examine_more(mob/user) + . = ..() + + . += "The 'Bóbr' started development as a limited run sporting weapon before \ + the military took interest. The market quickly changed from sport shooting \ + targets, to sport shooting SolFed strike teams once the conflict broke out. \ + This pattern is different from the original civilian version, with a military \ + standard pistol grip and weather resistant finish. While the 'Bóbr' was not \ + a weapon standard issued to every CIN soldier, it was available for relatively \ + cheap, and thus became rather popular among the ranks." + + return . diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/rifle.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/rifle.dm new file mode 100644 index 00000000000000..e102c35969cb1e --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/rifle.dm @@ -0,0 +1,134 @@ +// Semi-automatic rifle firing .310 with reduced damage compared to a Sakhno + +/obj/item/gun/ballistic/automatic/lanca + name = "\improper Lanca Battle Rifle" + desc = "A relatively compact, long barreled bullpup battle rifle chambered for .310 Strilka. Has an integrated sight with \ + a surprisingly functional amount of magnification, given its place of origin." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_48.dmi' + icon_state = "lanca" + + worn_icon = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_worn.dmi' + worn_icon_state = "lanca" + + lefthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_lefthand.dmi' + righthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_righthand.dmi' + inhand_icon_state = "lanca" + + SET_BASE_PIXEL(-8, 0) + + special_mags = FALSE + + bolt_type = BOLT_TYPE_STANDARD + + w_class = WEIGHT_CLASS_BULKY + weapon_weight = WEAPON_HEAVY + slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_OCLOTHING + + accepted_magazine_type = /obj/item/ammo_box/magazine/lanca + + fire_sound = 'modular_nova/modules/modular_weapons/sounds/battle_rifle.ogg' + suppressed_sound = 'modular_nova/modules/modular_weapons/sounds/suppressed_heavy.ogg' + can_suppress = TRUE + suppressor_x_offset = 0 + suppressor_y_offset = 0 + + can_bayonet = FALSE + + burst_size = 1 + fire_delay = 1.2 SECONDS + actions_types = list() + + recoil = 0.5 + spread = 2.5 + projectile_wound_bonus = -20 + +/obj/item/gun/ballistic/automatic/lanca/Initialize(mapload) + . = ..() + AddComponent(/datum/component/scope, range_modifier = 1.5) + +/obj/item/gun/ballistic/automatic/lanca/give_manufacturer_examine() + AddElement(/datum/element/manufacturer_examine, COMPANY_SZOT) + +/obj/item/gun/ballistic/automatic/lanca/examine(mob/user) + . = ..() + . += span_notice("You can <b>examine closer</b> to learn a little more about this weapon.") + +/obj/item/gun/ballistic/automatic/lanca/examine_more(mob/user) + . = ..() + + . += "The Lanca is a now relatively dated replacement for Kalashnikov pattern rifles \ + adopted by states now combining to form the CIN. While the rifle that came before them \ + had its benefits, leadership of many armies started to realize that the Kalashnikov-based \ + rifles were really showing their age once the variants began reaching the thousands in serial. \ + The solution was presented by a then new company, Szot Dynamica. This new rifle, not too \ + unlike the one you are seeing now, adopted all of the latest technology of the time. Lightweight \ + caseless ammunition, well known for its use in Sakhno rifles, as well as various electronics and \ + other incredible technological advancements. These advancements may have already been around since \ + before the creation of even the Sakhno, but the fact you're seeing this now fifty year old design \ + must mean something, right?" + + return . + +/obj/item/gun/ballistic/automatic/lanca/no_mag + spawnwithmagazine = FALSE + +// The AMR +// This sounds a lot scarier than it actually is, you'll just have to trust me here + +/obj/item/gun/ballistic/automatic/wylom + name = "\improper Wyłom Anti-Materiel Rifle" + desc = "A massive, outdated beast of an anti materiel rifle that was once in use by CIN military forces. Fires the devastating .60 Strela caseless round, \ + the massively overperforming penetration of which being the reason this weapon was discontinued." + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_64.dmi' + base_pixel_x = -16 // This baby is 64 pixels wide + pixel_x = -16 + righthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/inhands_64_left.dmi' + lefthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/inhands_64_right.dmi' + inhand_x_dimension = 64 + inhand_y_dimension = 64 + worn_icon = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_worn.dmi' + icon_state = "wylom" + inhand_icon_state = "wylom" + worn_icon_state = "wylom" + w_class = WEIGHT_CLASS_HUGE + slot_flags = ITEM_SLOT_BACK + + accepted_magazine_type = /obj/item/ammo_box/magazine/wylom + can_suppress = FALSE + can_bayonet = FALSE + + fire_sound = 'modular_nova/modules/novaya_ert/sound/amr_fire.ogg' + fire_sound_volume = 100 // BOOM BABY + + recoil = 4 + + weapon_weight = WEAPON_HEAVY + burst_size = 1 + fire_delay = 2 SECONDS + actions_types = list() + + force = 15 // I mean if you're gonna beat someone with the thing you might as well get damage appropriate for how big the fukken thing is + +/obj/item/gun/ballistic/automatic/wylom/give_manufacturer_examine() + AddElement(/datum/element/manufacturer_examine, COMPANY_SZOT) + AddElement(/datum/element/gun_launches_little_guys, throwing_force = 3, throwing_range = 5) + +/obj/item/gun/ballistic/automatic/wylom/examine(mob/user) + . = ..() + . += span_notice("You can <b>examine closer</b> to learn a little more about this weapon.") + +/obj/item/gun/ballistic/automatic/wylom/examine_more(mob/user) + . = ..() + + . += "The 'Wyłom' AMR was a weapon not originally made for unaided human hands. \ + The original rifle had mounting points for a specialized suit attachment system, \ + not too much unlike heavy smartguns that can be seen across the galaxy. CIN military \ + command, however, deemed that expensive exoskeletons and rigs for carrying an organic \ + anti material system were simply not needed, and that soldiers should simply 'deal with it'. \ + Unsurprisingly, soldiers assigned this weapon tend to not be a massive fan of that fact, \ + and smekalka within CIN ranks is common with troops finding novel ways to carry and use \ + their large rifles with as little effort as possible. Most of these novel methods, of course, \ + tend to shatter when the rifle is actually fired." + + return . diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/submachinegun.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/submachinegun.dm new file mode 100644 index 00000000000000..40dbcde5e545a4 --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/submachinegun.dm @@ -0,0 +1,64 @@ +// Rapid firing submachinegun firing .27-54 Cesarzowa + +/obj/item/gun/ballistic/automatic/miecz + name = "\improper Miecz Submachine Gun" + desc = "A short barrel, further compacted conversion of the 'Lanca' rifle to fire pistol caliber .27-54 cartridges. \ + Due to the intended purpose of the weapon, and less than optimal ranged performance of the projectile, it has \ + nothing more than basic glow-sights as opposed to the ranged scope Lanca users might be used to." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_48.dmi' + icon_state = "miecz" + + inhand_icon_state = "c20r" + worn_icon_state = "gun" + + SET_BASE_PIXEL(-8, 0) + + special_mags = FALSE + + bolt_type = BOLT_TYPE_STANDARD + + w_class = WEIGHT_CLASS_BULKY + weapon_weight = WEAPON_MEDIUM + slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_OCLOTHING + + accepted_magazine_type = /obj/item/ammo_box/magazine/miecz + + fire_sound = 'modular_nova/modules/modular_weapons/sounds/smg_light.ogg' + can_suppress = TRUE + suppressor_x_offset = 0 + suppressor_y_offset = 0 + + can_bayonet = FALSE + + burst_size = 1 + fire_delay = 0.2 SECONDS + actions_types = list() + + spread = 5 + +/obj/item/gun/ballistic/automatic/miecz/Initialize(mapload) + . = ..() + AddComponent(/datum/component/automatic_fire, fire_delay) + +/obj/item/gun/ballistic/automatic/miecz/give_manufacturer_examine() + AddElement(/datum/element/manufacturer_examine, COMPANY_SZOT) + +/obj/item/gun/ballistic/automatic/miecz/examine(mob/user) + . = ..() + . += span_notice("You can <b>examine closer</b> to learn a little more about this weapon.") + +/obj/item/gun/ballistic/automatic/miecz/examine_more(mob/user) + . = ..() + + . += "The Meicz is one of the newest weapons to come out of CIN member state hands and \ + into the wild, typically the frontier. It was built alongside the round it fires, the \ + .27-54 Cesarzawa pistol round. Based on the proven Lanca design, it seeks to bring that \ + same reliable weapon design into the factor of a submachinegun. While it is significantly \ + larger than many comparable weapons in SolFed use, it more than makes up for it with ease \ + of control and significant firerate." + + return . + +/obj/item/gun/ballistic/automatic/miecz/no_mag + spawnwithmagazine = FALSE diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/advert.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/advert.dm new file mode 100644 index 00000000000000..e04da1c5a7b0ce --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/advert.dm @@ -0,0 +1,41 @@ +/obj/structure/sign/poster/official/trappiste_suppressor + name = "Keep It Quiet - Ear Protection Unneeded" + desc = "This poster depicts, alongside the prominent logo of Trappiste Fabriek, a \ + diagram of the average suppressor, and how on most* Trappiste weapons \ + the sound of firing will be low enough to eradicate the need for ear protection. \ + How safety minded, they even have a non-liability statement too." + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/propaganda.dmi' + icon_state = "keep_it_quiet" + +/obj/structure/sign/poster/official/trappiste_suppressor/examine_more(mob/user) + . = ..() + + . += "It was hard to notice before, but now that you really look at it... \ + This thing is completely covered in micro scale text telling you in just about \ + every human language and then some that Trappiste isn't liable for ear damage \ + caused by their weapons, suppressed or not." + + return . + +MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/trappiste_suppressor, 32) + +/obj/structure/sign/poster/official/trappiste_ammunition + name = "Know Your Ammuniton Colors" + desc = "This poster depicts, alongside the prominent logo of Trappiste Fabriek, \ + a variety of colors that one may find on .585 Trappiste rounds. \ + A plain white case usually means lethal, while a blue stripe is less-lethal \ + and a purple stripe is more lethal. How informative." + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/propaganda.dmi' + icon_state = "know_the_difference" + +/obj/structure/sign/poster/official/trappiste_ammunition/examine_more(mob/user) + . = ..() + + . += "Small text details that this information may also be transferrable \ + to other types of SolFed ammunition, but that you should check the box \ + the bullets come in just to be sure. Trappiste is, of course,\ + not liable for excess harm caused by misreading color identification systems." + + return . + +MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/trappiste_ammunition, 32) diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/ammo.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/ammo.dm new file mode 100644 index 00000000000000..a55341bf45cd0a --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/ammo.dm @@ -0,0 +1,91 @@ +// .585 Trappiste +// High caliber round used in large pistols and revolvers + +/obj/item/ammo_casing/c585trappiste + name = ".585 Trappiste lethal bullet casing" + desc = "A white polymer cased high caliber round commonly used in handguns." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/ammo.dmi' + icon_state = "585trappiste" + + caliber = CALIBER_585TRAPPISTE + projectile_type = /obj/projectile/bullet/c585trappiste + +/obj/projectile/bullet/c585trappiste + name = ".585 Trappiste bullet" + damage = 45 + wound_bonus = 0 // Normal bullets are 20 + +/obj/item/ammo_box/c585trappiste + name = "ammo box (.585 Trappiste lethal)" + desc = "A box of .585 Trappiste pistol rounds, holds twelve cartridges." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/ammo.dmi' + icon_state = "585box" + + multiple_sprites = AMMO_BOX_FULL_EMPTY + + w_class = WEIGHT_CLASS_NORMAL + + caliber = CALIBER_585TRAPPISTE + ammo_type = /obj/item/ammo_casing/c585trappiste + max_ammo = 12 + +// .585 Trappiste equivalent to a rubber bullet + +/obj/item/ammo_casing/c585trappiste/incapacitator + name = ".585 Trappiste flathead bullet casing" + desc = "A white polymer cased high caliber round with a relatively soft, flat tip. Designed to flatten against targets and usually not penetrate on impact." + + icon_state = "585trappiste_disabler" + + projectile_type = /obj/projectile/bullet/c585trappiste/incapacitator + harmful = FALSE + +/obj/projectile/bullet/c585trappiste/incapacitator + name = ".585 Trappiste flathead bullet" + damage = 20 + stamina = 40 + wound_bonus = 10 + + weak_against_armour = TRUE + + shrapnel_type = null + sharpness = NONE + embedding = null + +/obj/item/ammo_box/c585trappiste/incapacitator + name = "ammo box (.585 Trappiste flathead)" + desc = "A box of .585 Trappiste pistol rounds, holds twelve cartridges. The blue stripe indicates that it should hold less lethal rounds." + + icon_state = "585box_disabler" + + ammo_type = /obj/item/ammo_casing/c585trappiste/incapacitator + +// .585 hollowpoint, made to cause nasty wounds + +/obj/item/ammo_casing/c585trappiste/hollowpoint + name = ".585 Trappiste hollowhead bullet casing" + desc = "A white polymer cased high caliber round with a hollowed tip. Designed to cause as much damage on impact to fleshy targets as possible." + + icon_state = "585trappiste_shrapnel" + projectile_type = /obj/projectile/bullet/c585trappiste/hollowpoint + + advanced_print_req = TRUE + +/obj/projectile/bullet/c585trappiste/hollowpoint + name = ".585 Trappiste hollowhead bullet" + damage = 35 + + weak_against_armour = TRUE + + wound_bonus = 30 + bare_wound_bonus = 40 + +/obj/item/ammo_box/c585trappiste/hollowpoint + name = "ammo box (.585 Trappiste hollowhead)" + desc = "A box of .585 Trappiste pistol rounds, holds twelve cartridges. The purple stripe indicates that it should hold hollowpoint-like rounds." + + icon_state = "585box_shrapnel" + + ammo_type = /obj/item/ammo_casing/c585trappiste/hollowpoint diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/gunsets.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/gunsets.dm new file mode 100644 index 00000000000000..811dcf6b8ff9ac --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/gunsets.dm @@ -0,0 +1,42 @@ +// Base yellow with symbol trappiste case + +/obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case + desc = "A thick yellow gun case with foam inserts laid out to fit a weapon, magazines, and gear securely. The five square grid of Trappiste Fabriek is displayed prominently on the top." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/gunsets.dmi' + icon_state = "case_trappiste" + + lefthand_file = 'modular_nova/modules/modular_weapons/icons/mob/inhands/cases_lefthand.dmi' + righthand_file = 'modular_nova/modules/modular_weapons/icons/mob/inhands/cases_righthand.dmi' + inhand_icon_state = "yellowcase" + +// Empty version of the case + +/obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/empty + +/obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/empty/PopulateContents() + return + +// Gunset for the Wespe pistol + +/obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/wespe + name = "Trappiste 'Wespe' gunset" + + weapon_to_spawn = /obj/item/gun/ballistic/automatic/pistol/sol/no_mag + extra_to_spawn = /obj/item/ammo_box/magazine/c35sol_pistol + +// Gunset for the Skild heavy pistol + +/obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/skild + name = "Trappiste 'Skild' gunset" + + weapon_to_spawn = /obj/item/gun/ballistic/automatic/pistol/trappiste/no_mag + extra_to_spawn = /obj/item/ammo_box/magazine/c585trappiste_pistol + +// Gunset for the Takbok Revolver + +/obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/takbok + name = "Trappiste 'Takbok' gunset" + + weapon_to_spawn = /obj/item/gun/ballistic/revolver/takbok + extra_to_spawn = /obj/item/ammo_box/c585trappiste diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/magazines.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/magazines.dm new file mode 100644 index 00000000000000..e256aca9ee9c17 --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/magazines.dm @@ -0,0 +1,19 @@ +// .585 pistol magazines + +/obj/item/ammo_box/magazine/c585trappiste_pistol + name = "\improper Trappiste pistol magazine" + desc = "A standard size magazine for Trappiste pistols, holds six rounds." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/ammo.dmi' + icon_state = "pistol_585_standard" + + multiple_sprites = AMMO_BOX_FULL_EMPTY + + w_class = WEIGHT_CLASS_SMALL + + ammo_type = /obj/item/ammo_casing/c585trappiste + caliber = CALIBER_585TRAPPISTE + max_ammo = 6 + +/obj/item/ammo_box/magazine/c585trappiste_pistol/spawns_empty + start_empty = TRUE diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/pistol.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/pistol.dm new file mode 100644 index 00000000000000..c8c5b02efc46e3 --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/pistol.dm @@ -0,0 +1,109 @@ +// .35 Sol pistol + +/obj/item/gun/ballistic/automatic/pistol/sol + name = "\improper Wespe Pistol" + desc = "The standard issue service pistol of SolFed's various military branches. Uses .35 Sol and comes with an attached light." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi' + icon_state = "wespe" + + fire_sound = 'modular_nova/modules/modular_weapons/sounds/pistol_light.ogg' + + w_class = WEIGHT_CLASS_NORMAL + + accepted_magazine_type = /obj/item/ammo_box/magazine/c35sol_pistol + special_mags = TRUE + + suppressor_x_offset = 7 + suppressor_y_offset = 0 + + fire_delay = 0.3 SECONDS + +/obj/item/gun/ballistic/automatic/pistol/sol/give_manufacturer_examine() + AddElement(/datum/element/manufacturer_examine, COMPANY_TRAPPISTE) + +/obj/item/gun/ballistic/automatic/pistol/sol/add_seclight_point() + AddComponent(/datum/component/seclite_attachable, \ + starting_light = new /obj/item/flashlight/seclite(src), \ + is_light_removable = FALSE, \ + ) + +/obj/item/gun/ballistic/automatic/pistol/sol/examine(mob/user) + . = ..() + . += span_notice("You can <b>examine closer</b> to learn a little more about this weapon.") + +/obj/item/gun/ballistic/automatic/pistol/sol/examine_more(mob/user) + . = ..() + + . += "The Wespe is a pistol that was made entirely for military use. \ + Required to use a standard round, standard magazines, and be able \ + to function in all of the environments that SolFed operated in \ + commonly. These qualities just so happened to make the weapon \ + popular in frontier space and is likely why you are looking at \ + one now." + + return . + +/obj/item/gun/ballistic/automatic/pistol/sol/no_mag + spawnwithmagazine = FALSE + +// Sol pistol evil gun + +/obj/item/gun/ballistic/automatic/pistol/sol/evil + desc = "The standard issue service pistol of SolFed's various military branches. Comes with attached light. This one is painted tacticool black." + + icon_state = "wespe_evil" + +/obj/item/gun/ballistic/automatic/pistol/sol/evil/no_mag + spawnwithmagazine = FALSE + +// Trappiste high caliber pistol in .585 + +/obj/item/gun/ballistic/automatic/pistol/trappiste + name = "\improper Skild Pistol" + desc = "A somewhat rare to see Trappiste pistol firing the high caliber .585 developed by the same company. \ + Sees rare use mainly due to its tendency to cause severe wrist discomfort." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi' + icon_state = "skild" + + fire_sound = 'modular_nova/modules/modular_weapons/sounds/pistol_heavy.ogg' + suppressed_sound = 'modular_nova/modules/modular_weapons/sounds/suppressed_heavy.ogg' + + w_class = WEIGHT_CLASS_NORMAL + + accepted_magazine_type = /obj/item/ammo_box/magazine/c585trappiste_pistol + + suppressor_x_offset = 8 + suppressor_y_offset = 0 + + fire_delay = 1 SECONDS + + recoil = 3 + +/obj/item/gun/ballistic/automatic/pistol/trappiste/give_manufacturer_examine() + AddElement(/datum/element/manufacturer_examine, COMPANY_TRAPPISTE) + +/obj/item/gun/ballistic/automatic/pistol/sol/examine(mob/user) + . = ..() + . += span_notice("You can <b>examine closer</b> to learn a little more about this weapon.") + +/obj/item/gun/ballistic/automatic/pistol/trappiste/examine_more(mob/user) + . = ..() + + . += "The Skild only exists due to a widely known event that SolFed's military \ + would prefer wasn't anywhere near as popular. A general, name unknown as of now, \ + was recorded complaining about the lack of capability the Wespe provided to the \ + military, alongside several statements comparing the Wespe's lack of masculinity \ + to the, quote, 'unique lack of testosterone those NRI mongrels field'. While the \ + identities of both the general and people responsible for the leaking of the recording \ + are still classified, many high ranking SolFed military staff suspiciously have stopped \ + appearing in public, unlike the Skild. A lot of several thousand pistols, the first \ + of the weapons to ever exist, were not so silently shipped to SolFed's Plutonian \ + shipping hub from TRAPPIST. SolFed military command refuses to answer any \ + further questions about the incident to this day." + + return . + +/obj/item/gun/ballistic/automatic/pistol/trappiste/no_mag + spawnwithmagazine = FALSE diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/revolver.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/revolver.dm similarity index 77% rename from modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/revolver.dm rename to modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/revolver.dm index 22cbb471449abc..26387125b88791 100644 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/revolver.dm +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/revolver.dm @@ -1,10 +1,10 @@ // .35 Sol mini revolver /obj/item/gun/ballistic/revolver/sol - name = "\improper Trappiste 'Eland' Revolver" + name = "\improper Eland Revolver" desc = "A small revolver with a comically short barrel and cylinder space for eight .35 Sol Short rounds." - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi' + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi' icon_state = "eland" accepted_magazine_type = /obj/item/ammo_box/magazine/internal/cylinder/c35sol @@ -18,6 +18,10 @@ /obj/item/gun/ballistic/revolver/sol/give_manufacturer_examine() AddElement(/datum/element/manufacturer_examine, COMPANY_TRAPPISTE) +/obj/item/gun/ballistic/revolver/sol/examine(mob/user) + . = ..() + . += span_notice("You can <b>examine closer</b> to learn a little more about this weapon.") + /obj/item/gun/ballistic/revolver/sol/examine_more(mob/user) . = ..() @@ -39,14 +43,14 @@ // .585 super revolver /obj/item/gun/ballistic/revolver/takbok - name = "\improper Trappiste 'Takbok' Revolver" + name = "\improper Takbok Revolver" desc = "A hefty revolver with an equally large cylinder capable of holding five .585 Trappiste rounds." - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi' + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi' icon_state = "takbok" - fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/revolver_heavy.ogg' - suppressed_sound = 'modular_skyrat/modules/modular_weapons/sounds/suppressed_heavy.ogg' + fire_sound = 'modular_nova/modules/modular_weapons/sounds/revolver_heavy.ogg' + suppressed_sound = 'modular_nova/modules/modular_weapons/sounds/suppressed_heavy.ogg' accepted_magazine_type = /obj/item/ammo_box/magazine/internal/cylinder/c585trappiste @@ -60,6 +64,10 @@ /obj/item/gun/ballistic/revolver/takbok/give_manufacturer_examine() AddElement(/datum/element/manufacturer_examine, COMPANY_TRAPPISTE) +/obj/item/gun/ballistic/revolver/takbok/examine(mob/user) + . = ..() + . += span_notice("You can <b>examine closer</b> to learn a little more about this weapon.") + /obj/item/gun/ballistic/revolver/takbok/examine_more(mob/user) . = ..() diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/ammo.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/ammo.dm new file mode 100644 index 00000000000000..cb5bf63a816715 --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/ammo.dm @@ -0,0 +1,45 @@ +/* +* .310 Strilka +*/ + +/obj/item/ammo_casing/strilka310/rubber + name = ".310 Strilka rubber bullet casing" + desc = "A .310 rubber bullet casing. Casing is a bit of a fib, there isn't one.\ + <br><br>\ + <i>RUBBER: Less than lethal ammo. Deals both stamina damage and regular damage.</i>" + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/ammo.dmi' + icon_state = "310-casing-rubber" + + projectile_type = /obj/projectile/bullet/strilka310/rubber + harmful = FALSE + +/obj/projectile/bullet/strilka310/rubber + name = ".310 rubber bullet" + damage = 15 + stamina = 55 + ricochets_max = 5 + ricochet_incidence_leeway = 0 + ricochet_chance = 130 + ricochet_decay_damage = 0.7 + shrapnel_type = null + sharpness = NONE + embedding = null + +/obj/item/ammo_casing/strilka310/ap + name = ".310 Strilka armor-piercing bullet casing" + desc = "A .310 armor-piercing bullet casing. Note, does not actually contain a casing.\ + <br><br>\ + <i>ARMOR-PIERCING: Improved armor-piercing capabilities, in return for less outright damage.</i>" + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/ammo.dmi' + icon_state = "310-casing-ap" + + projectile_type = /obj/projectile/bullet/strilka310/ap + custom_materials = AMMO_MATS_AP + advanced_print_req = TRUE + +/obj/projectile/bullet/strilka310/ap + name = ".310 armor-piercing bullet" + damage = 50 + armour_penetration = 60 diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/gunsets.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/gunsets.dm new file mode 100644 index 00000000000000..9d2a59fdd0910b --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/gunsets.dm @@ -0,0 +1,30 @@ +// Base yellow carwo case + +/obj/item/storage/toolbox/guncase/nova/xhihao_large_case + + icon = 'modular_nova/modules/modular_weapons/icons/obj/gunsets.dmi' + icon_state = "case_xhihao" + +// Empty version of the case + +/obj/item/storage/toolbox/guncase/nova/xhihao_large_case/empty + +/obj/item/storage/toolbox/guncase/nova/xhihao_large_case/empty/PopulateContents() + return + +// Contains the Bogseo submachinegun, excellent for breaking shoulders + +/obj/item/storage/toolbox/guncase/nova/xhihao_large_case/bogseo + name = "\improper Xhihao 'Bogseo' gunset" + + weapon_to_spawn = /obj/item/gun/ballistic/automatic/xhihao_smg/no_mag + extra_to_spawn = /obj/item/ammo_box/magazine/c585trappiste_pistol + +/obj/item/storage/toolbox/guncase/nova/xhihao_large_case/bogseo/PopulateContents() + new weapon_to_spawn (src) + + generate_items_inside(list( + /obj/item/ammo_box/c585trappiste/incapacitator = 1, + /obj/item/ammo_box/c585trappiste = 1, + /obj/item/ammo_box/magazine/c585trappiste_pistol/spawns_empty = 3, + ), src) diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/rifle.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/rifle.dm new file mode 100644 index 00000000000000..477517ad5d67d9 --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/rifle.dm @@ -0,0 +1,61 @@ +/* +* QM Sporter Rifle +*/ + +/obj/item/gun/ballistic/rifle/boltaction/sporterized + name = "\improper Rengo Precision Rifle" + desc = "A heavily modified Sakhno rifle, parts made by Xhihao light arms based around Jupiter herself. \ + Has a higher capacity than standard Sakhno rifles, fitting ten .310 cartridges." + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns40x.dmi' + icon_state = "rengo" + worn_icon_state = "enchanted_rifle" // Not actually magical looking, just looks closest to this one + inhand_icon_state = "enchanted_rifle" + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/bubba + can_be_sawn_off = FALSE + knife_x_offset = 35 + +/obj/item/gun/ballistic/rifle/boltaction/sporterized/Initialize(mapload) + . = ..() + + AddComponent(/datum/component/scope, range_modifier = 1.5) + +/obj/item/gun/ballistic/rifle/boltaction/sporterized/give_manufacturer_examine() + AddElement(/datum/element/manufacturer_examine, COMPANY_XHIHAO) + +/obj/item/gun/ballistic/rifle/boltaction/sporterized/examine(mob/user) + . = ..() + . += span_notice("You can <b>examine closer</b> to learn a little more about this weapon.") + +/obj/item/gun/ballistic/rifle/boltaction/sporterized/examine_more(mob/user) + . = ..() + + . += "The Xhihao 'Rengo' conversion rifle. Came as parts sold in a single kit by Xhihao Light Arms, \ + which can be swapped out with many of the outdated or simply old parts on a typical Sakhno rifle. \ + While not necessarily increasing performance in any way, the magazine is slightly longer. The weapon \ + is also overall a bit shorter, making it easier to handle for some people. Cannot be sawn off, cutting \ + really any part of this weapon off would make it non-functional." + + return . + +/obj/item/gun/ballistic/rifle/boltaction/sporterized/empty + bolt_locked = TRUE // so the bolt starts visibly open + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/bubba/empty + +/obj/item/ammo_box/magazine/internal/boltaction/bubba + name = "Sakhno extended internal magazine" + desc = "How did you get it out?" + ammo_type = /obj/item/ammo_casing/strilka310 + caliber = CALIBER_STRILKA310 + max_ammo = 8 + +/obj/item/ammo_box/magazine/internal/boltaction/bubba/empty + start_empty = TRUE + +/* +* Box that contains Sakhno rifles, but less soviet union since we don't have one of those +*/ + +/obj/item/storage/toolbox/guncase/soviet/sakhno + desc = "A weapon's case. This one is green and looks pretty old, but is otherwise in decent condition." + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/cases.dmi' + material_flags = NONE // ????? Why do these have materials enabled?? diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/submachinegun.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/submachinegun.dm new file mode 100644 index 00000000000000..48508530a8ffc7 --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/submachinegun.dm @@ -0,0 +1,65 @@ +// Evil .585 smg that blueshields spawn with that will throw your screen like hell but itll sure kill whoever threatens a head really good + +/obj/item/gun/ballistic/automatic/xhihao_smg + name = "\improper Bogseo Submachine Gun" + desc = "A weapon that could hardly be called a 'sub' machinegun, firing the monstrous .585 cartridge. \ + It provides enough kick to bruise a shoulder pretty bad if used without protection." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns32x.dmi' + icon_state = "bogseo" + + lefthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/xhihao_light_arms/guns_lefthand.dmi' + righthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/xhihao_light_arms/guns_righthand.dmi' + inhand_icon_state = "bogseo" + + special_mags = FALSE + + bolt_type = BOLT_TYPE_STANDARD + + w_class = WEIGHT_CLASS_BULKY + weapon_weight = WEAPON_HEAVY + slot_flags = ITEM_SLOT_OCLOTHING | ITEM_SLOT_BELT + + accepted_magazine_type = /obj/item/ammo_box/magazine/c585trappiste_pistol + + fire_sound = 'modular_nova/modules/modular_weapons/sounds/smg_heavy.ogg' + can_suppress = TRUE + + can_bayonet = FALSE + + suppressor_x_offset = 9 + + burst_size = 1 + fire_delay = 0.15 SECONDS + actions_types = list() + + // Because we're firing a lot of these really fast, we want a lot less wound chance + projectile_wound_bonus = -20 + spread = 12.5 + // Hope you didn't need to see anytime soon + recoil = 2 + +/obj/item/gun/ballistic/automatic/xhihao_smg/give_manufacturer_examine() + AddElement(/datum/element/manufacturer_examine, COMPANY_XHIHAO) + AddComponent(/datum/component/automatic_fire, fire_delay) + +/obj/item/gun/ballistic/automatic/xhihao_smg/examine(mob/user) + . = ..() + . += span_notice("You can <b>examine closer</b> to learn a little more about this weapon.") + +/obj/item/gun/ballistic/automatic/xhihao_smg/examine_more(mob/user) + . = ..() + + . += "The Bogseo submachinegun is seen in highly different lights based on \ + who you ask. Ask a Jovian, and they'll go off all day about how they \ + love the thing so. A big weapon for shooting big targets, like the \ + fuel-stat raiders in their large suits of armor. Ask a space pirate, however \ + and you'll get a different story. That is thanks to many SolFed anti-piracy \ + units picking the Bogseo as their standard boarding weapon. What better \ + to ruin a brigand's day than a bullet large enough to turn them into \ + mist at full auto, after all?" + + return . + +/obj/item/gun/ballistic/automatic/xhihao_smg/no_mag + spawnwithmagazine = FALSE diff --git a/modular_nova/modules/modular_weapons/code/conversion_kits.dm b/modular_nova/modules/modular_weapons/code/conversion_kits.dm new file mode 100644 index 00000000000000..45802b574d3749 --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/conversion_kits.dm @@ -0,0 +1,46 @@ +/obj/item/crafting_conversion_kit + name = "base conversion kit" + desc = "It's a set of parts, for something. This shouldn't be here, and you should probably throw this away, since it's not going to be very useful." + icon = 'icons/obj/storage/box.dmi' + icon_state = "secbox" + // the inhands are just what the box uses + inhand_icon_state = "syringe_kit" + lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' + drop_sound = 'sound/items/handling/component_drop.ogg' + pickup_sound = 'sound/items/handling/component_pickup.ogg' + +/obj/item/crafting_conversion_kit/mosin_pro + name = "\improper Xhihao 'Rengo' rifle conversion kit" + desc = "All the parts you need to make a 'Rengo' rifle, outside of the parts that make the gun actually a gun. \ + It looks like this stuff could fit on an old Sakhno rifle, if only you had one of those around." + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/cases.dmi' + icon_state = "xhihao_conversion_kit" + +/datum/crafting_recipe/mosin_pro + name = "Sakhno to Xhihao 'Rengo' Conversion" + desc = "It's actually really easy to change the stock on your Sakhno. Anyone can do it. It takes roughly thirty seconds and a screwdriver." + result = /obj/item/gun/ballistic/rifle/boltaction/sporterized/empty + reqs = list( + /obj/item/gun/ballistic/rifle/boltaction = 1, + /obj/item/crafting_conversion_kit/mosin_pro = 1 + ) + steps = list( + "Empty the rifle", + "Leave the bolt open" + ) + tool_behaviors = list(TOOL_SCREWDRIVER) + time = 30 SECONDS + category = CAT_WEAPON_RANGED + +/datum/crafting_recipe/mosin_pro/New() + ..() + blacklist |= subtypesof(/obj/item/gun/ballistic/rifle/boltaction) - list(/obj/item/gun/ballistic/rifle/boltaction/surplus) + +/datum/crafting_recipe/mosin_pro/check_requirements(mob/user, list/collected_requirements) + var/obj/item/gun/ballistic/rifle/boltaction/the_piece = collected_requirements[/obj/item/gun/ballistic/rifle/boltaction][1] + if(!the_piece.bolt_locked) + return FALSE + if(LAZYLEN(the_piece.magazine.stored_ammo)) + return FALSE + return ..() diff --git a/modular_nova/modules/modular_weapons/code/energy.dm b/modular_nova/modules/modular_weapons/code/energy.dm new file mode 100644 index 00000000000000..8e847ca4fb9858 --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/energy.dm @@ -0,0 +1,11 @@ +/obj/item/gun/energy/laser + name = "\improper Allstar SC-1 laser carbine" + desc = "A basic energy-based laser carbine that fires concentrated beams of light which pass through glass and thin metal." + +/obj/item/gun/energy/laser/carbine + name = "\improper Allstar SC-1A laser auto-carbine" + desc = "An basic energy-based laser auto-carbine that rapidly fires weakened, concentrated beams of light which pass through glass and thin metal." + +/obj/item/gun/energy/e_gun + name = "\improper Allstar SC-2 energy carbine" + desc = "A basic hybrid energy carbine with two settings: disable and kill." diff --git a/modular_nova/modules/modular_weapons/code/gun_launches_little_guys_element.dm b/modular_nova/modules/modular_weapons/code/gun_launches_little_guys_element.dm new file mode 100644 index 00000000000000..e337b2c57db63f --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/gun_launches_little_guys_element.dm @@ -0,0 +1,46 @@ +/// An element that makes guns throw their user back if they are just a little guy +/datum/element/gun_launches_little_guys + element_flags = ELEMENT_BESPOKE + argument_hash_start_idx = 2 + + /// The throwing force applied to the gun's user + var/throwing_force + /// The throwing range applied to the gun's user + var/throwing_range + +/datum/element/gun_launches_little_guys/Attach(datum/target, throwing_force = 2, throwing_range = 3) + . = ..() + if(!isgun(target)) + return ELEMENT_INCOMPATIBLE + + src.throwing_force = throwing_force + src.throwing_range = throwing_range + + RegisterSignal(target, COMSIG_ATOM_EXAMINE, PROC_REF(examine)) + RegisterSignal(target, COMSIG_GUN_FIRED, PROC_REF(throw_it_back)) + +/datum/element/gun_launches_little_guys/Detach(datum/target) + . = ..() + UnregisterSignal(target, COMSIG_ATOM_EXAMINE) + UnregisterSignal(target, COMSIG_GUN_FIRED) + +/// Warns that this gun might throw you away really hard +/datum/element/gun_launches_little_guys/proc/examine(datum/source, mob/user, list/examine_list) + SIGNAL_HANDLER + + examine_list += span_notice("It has some serious kick to it, smaller users should take caution while firing.") + +/// Checks if the shooter is just a little guy. If so? Throw it back. +/datum/element/gun_launches_little_guys/proc/throw_it_back(obj/item/gun/weapon, mob/living/carbon/user, atom/target, params, zone_override) + SIGNAL_HANDLER + + if(!isteshari(user) && !isdwarf(user) && !HAS_TRAIT(user, TRAIT_DWARF) && !(user.dna.features["body_size"] <= 0.9)) + return + + var/fling_direction = REVERSE_DIR(user.dir) + var/atom/throw_target = get_edge_target_turf(user, fling_direction) + user.Knockdown(1 SECONDS) + user.throw_at(throw_target, throwing_range, throwing_force) + + user.visible_message(span_warning("[weapon] sends [user] flying back as it fires!"), \ + span_warning("[weapon] sends you flying back as it fires!")) diff --git a/modular_nova/modules/modular_weapons/code/gunsets.dm b/modular_nova/modules/modular_weapons/code/gunsets.dm new file mode 100644 index 00000000000000..745fc6cdb49a5f --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/gunsets.dm @@ -0,0 +1,70 @@ +/* +* GUNSET BOXES +*/ + +/obj/item/storage/toolbox/guncase/nova + desc = "A thick gun case with foam inserts laid out to fit a weapon, magazines, and gear securely." + + icon = 'modular_nova/modules/modular_weapons/icons/obj/gunsets.dmi' + icon_state = "guncase" + + worn_icon = 'modular_nova/modules/modular_weapons/icons/mob/worn/cases.dmi' + worn_icon_state = "darkcase" + + slot_flags = ITEM_SLOT_BACK + + material_flags = NONE + + /// Is the case visually opened or not + var/opened = FALSE + +/obj/item/storage/toolbox/guncase/nova/Initialize(mapload) + . = ..() + atom_storage.max_total_storage = 14 // Technically means you could fit multiple large guns in here but its a case you cant backpack anyways so what it do + atom_storage.max_slots = 6 // We store some extra items in these so lets make a little extra room + +/obj/item/storage/toolbox/guncase/nova/update_icon() + . = ..() + if(opened) + icon_state = "[initial(icon_state)]-open" + else + icon_state = initial(icon_state) + +/obj/item/storage/toolbox/guncase/nova/AltClick(mob/user) + . = ..() + opened = !opened + update_icon() + +/obj/item/storage/toolbox/guncase/nova/attack_self(mob/user) + . = ..() + opened = !opened + update_icon() + +// Empty guncase + +/obj/item/storage/toolbox/guncase/nova/empty + +/obj/item/storage/toolbox/guncase/nova/empty/PopulateContents() + return + +// Small case for pistols and whatnot + +/obj/item/storage/toolbox/guncase/nova/pistol + name = "small gun case" + + icon_state = "guncase_s" + + slot_flags = NONE + + w_class = WEIGHT_CLASS_NORMAL + +/obj/item/storage/toolbox/guncase/nova/pistol/Initialize(mapload) + . = ..() + atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL + +// Empty pistol case + +/obj/item/storage/toolbox/guncase/nova/pistol/empty + +/obj/item/storage/toolbox/guncase/nova/pistol/empty/PopulateContents() + return diff --git a/modular_nova/modules/modular_weapons/code/melee.dm b/modular_nova/modules/modular_weapons/code/melee.dm new file mode 100644 index 00000000000000..80c1835aca1005 --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/melee.dm @@ -0,0 +1,30 @@ +// Sabres, including the cargo variety + +/obj/item/storage/belt/sabre/cargo + name = "authentic shamshir leather sheath" + desc = "A good-looking sheath that is advertised as being made of real Venusian black leather. It feels rather plastic-like to the touch, and it looks like it's made to fit a British cavalry sabre." + icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' + +/obj/item/storage/belt/sabre/cargo/PopulateContents() + new /obj/item/melee/sabre/cargo(src) + update_appearance() + +/obj/item/melee/sabre + force = 20 // Original: 15 + wound_bonus = 5 // Original: 10 + bare_wound_bonus = 20 // Original: 25 Both down slightly, to make up for the damage buff, since it'd get a bit wacky ontop of the armor pen. + +/obj/item/melee/sabre/cargo + name = "authentic shamshir sabre" + desc = "An expertly crafted historical human sword once used by the Persians which has recently gained traction due to Venusian historal recreation sports. One small flaw, the Taj-based company who produces these has mistaken them for British cavalry sabres akin to those used by high ranking Nanotrasen officials. Atleast it cuts the same way!" + icon = 'modular_nova/modules/modular_weapons/icons/obj/melee.dmi' + lefthand_file = 'modular_nova/modules/modular_weapons/icons/mob/inhands/weapons/swords_lefthand.dmi' + righthand_file = 'modular_nova/modules/modular_weapons/icons/mob/inhands/weapons/swords_righthand.dmi' + block_chance = 20 + armour_penetration = 25 + + +// This is here so that people can't buy the Sabres and craft them into powercrepes +/datum/crafting_recipe/food/powercrepe + blacklist = list(/obj/item/melee/sabre/cargo) diff --git a/modular_skyrat/modules/modular_weapons/code/modular_projectiles.dm b/modular_nova/modules/modular_weapons/code/modular_projectiles.dm similarity index 100% rename from modular_skyrat/modules/modular_weapons/code/modular_projectiles.dm rename to modular_nova/modules/modular_weapons/code/modular_projectiles.dm diff --git a/modular_skyrat/modules/modular_weapons/code/pepperball_gun.dm b/modular_nova/modules/modular_weapons/code/pepperball_gun.dm similarity index 79% rename from modular_skyrat/modules/modular_weapons/code/pepperball_gun.dm rename to modular_nova/modules/modular_weapons/code/pepperball_gun.dm index 6b28643245d215..f575e7042fc218 100644 --- a/modular_skyrat/modules/modular_weapons/code/pepperball_gun.dm +++ b/modular_nova/modules/modular_weapons/code/pepperball_gun.dm @@ -1,7 +1,7 @@ /obj/item/gun/ballistic/automatic/pistol/pepperball name = "\improper Bolt Pepperball AHG" desc = "An incredibly mediocre 'firearm' designed to fire soft pepper balls meant to easily subdue targets." - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/pepperball/pepperball.dmi' + icon = 'modular_nova/modules/modular_weapons/icons/obj/pepperball/pepperball.dmi' icon_state = "peppergun" w_class = WEIGHT_CLASS_SMALL accepted_magazine_type = /obj/item/ammo_box/magazine/pepperball @@ -21,7 +21,7 @@ /obj/item/ammo_box/magazine/pepperball name = "pistol magazine (pepperball)" desc = "A gun magazine filled with balls." - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/pepperball/pepperball.dmi' + icon = 'modular_nova/modules/modular_weapons/icons/obj/pepperball/pepperball.dmi' icon_state = "pepperball" ammo_type = /obj/item/ammo_casing/pepperball caliber = CALIBER_PEPPERBALL @@ -37,7 +37,7 @@ /obj/projectile/bullet/pepperball name = "pepperball orb" - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/pepperball/projectiles.dmi' + icon = 'modular_nova/modules/modular_weapons/icons/obj/pepperball/projectiles.dmi' icon_state = "pepperball" damage = 0 stamina = 5 @@ -60,22 +60,29 @@ name = "Pepperball Ammo Box" id = "pepperballs" build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3) + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, + ) build_path = /obj/item/ammo_box/advanced/pepperballs - category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO) + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, + ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY /obj/item/ammo_box/advanced/pepperballs name = "pepperball ammo box" - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/pepperball/ammoboxes.dmi' + icon = 'modular_nova/modules/modular_weapons/icons/obj/pepperball/ammoboxes.dmi' icon_state = "box10x24" ammo_type = /obj/item/ammo_casing/pepperball - custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3) + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, + ) max_ammo = 15 // Gunset for the pepperball pistol -/obj/item/storage/toolbox/guncase/skyrat/pistol/pepperball +/obj/item/storage/toolbox/guncase/nova/pistol/pepperball name = "Pepperball AHG gunset" weapon_to_spawn = /obj/item/gun/ballistic/automatic/pistol/pepperball diff --git a/modular_nova/modules/modular_weapons/code/suppressor_size_change_override.dm b/modular_nova/modules/modular_weapons/code/suppressor_size_change_override.dm new file mode 100644 index 00000000000000..6a9ade38f6ff8a --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/suppressor_size_change_override.dm @@ -0,0 +1,15 @@ +// Prevents gun sizes from changing due to suppressors +/obj/item/gun/ballistic/install_suppressor(obj/item/suppressor/added_suppressor) + . = ..() + // Prevents the w_class of the weapon from actually being increased + w_class -= added_suppressor.w_class + +// Prevents gun sizes from changing due to suppressors +/obj/item/gun/ballistic/clear_suppressor() + if(!can_unsuppress) + return + // Adds to the w_class of the item before its promptly removed, resulting in a net zero w_class change + if(isitem(suppressed)) + var/obj/item/item_suppressor = suppressed + w_class += item_suppressor.w_class + return ..() diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi rename to modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi rename to modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi rename to modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi diff --git a/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_lefthand.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_lefthand.dmi new file mode 100644 index 00000000000000..41197c607447cd Binary files /dev/null and b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_lefthand.dmi differ diff --git a/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_righthand.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_righthand.dmi new file mode 100644 index 00000000000000..f780bc4732d40f Binary files /dev/null and b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_righthand.dmi differ diff --git a/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_worn.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_worn.dmi new file mode 100644 index 00000000000000..9cd37f1dd166eb Binary files /dev/null and b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_worn.dmi differ diff --git a/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/inhands_64_left.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/inhands_64_left.dmi new file mode 100644 index 00000000000000..d905ea52455d90 Binary files /dev/null and b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/inhands_64_left.dmi differ diff --git a/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/inhands_64_right.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/inhands_64_right.dmi new file mode 100644 index 00000000000000..fa499ae34bc28e Binary files /dev/null and b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/inhands_64_right.dmi differ diff --git a/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/xhihao_light_arms/guns_lefthand.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/xhihao_light_arms/guns_lefthand.dmi new file mode 100644 index 00000000000000..84252992131a0b Binary files /dev/null and b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/xhihao_light_arms/guns_lefthand.dmi differ diff --git a/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/xhihao_light_arms/guns_righthand.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/xhihao_light_arms/guns_righthand.dmi new file mode 100644 index 00000000000000..9c6048ad655d0b Binary files /dev/null and b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/xhihao_light_arms/guns_righthand.dmi differ diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/inhands/cases_lefthand.dmi b/modular_nova/modules/modular_weapons/icons/mob/inhands/cases_lefthand.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/mob/inhands/cases_lefthand.dmi rename to modular_nova/modules/modular_weapons/icons/mob/inhands/cases_lefthand.dmi diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/inhands/cases_righthand.dmi b/modular_nova/modules/modular_weapons/icons/mob/inhands/cases_righthand.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/mob/inhands/cases_righthand.dmi rename to modular_nova/modules/modular_weapons/icons/mob/inhands/cases_righthand.dmi diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/64x_guns_left.dmi b/modular_nova/modules/modular_weapons/icons/mob/inhands/weapons/64x_guns_left.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/64x_guns_left.dmi rename to modular_nova/modules/modular_weapons/icons/mob/inhands/weapons/64x_guns_left.dmi diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/64x_guns_right.dmi b/modular_nova/modules/modular_weapons/icons/mob/inhands/weapons/64x_guns_right.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/64x_guns_right.dmi rename to modular_nova/modules/modular_weapons/icons/mob/inhands/weapons/64x_guns_right.dmi diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/swords_lefthand.dmi b/modular_nova/modules/modular_weapons/icons/mob/inhands/weapons/swords_lefthand.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/swords_lefthand.dmi rename to modular_nova/modules/modular_weapons/icons/mob/inhands/weapons/swords_lefthand.dmi diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/swords_righthand.dmi b/modular_nova/modules/modular_weapons/icons/mob/inhands/weapons/swords_righthand.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/swords_righthand.dmi rename to modular_nova/modules/modular_weapons/icons/mob/inhands/weapons/swords_righthand.dmi diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/worn/cases.dmi b/modular_nova/modules/modular_weapons/icons/mob/worn/cases.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/mob/worn/cases.dmi rename to modular_nova/modules/modular_weapons/icons/mob/worn/cases.dmi diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/ammo.dmi b/modular_nova/modules/modular_weapons/icons/obj/ammo.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/obj/ammo.dmi rename to modular_nova/modules/modular_weapons/icons/obj/ammo.dmi diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns32x.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns32x.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns32x.dmi rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns32x.dmi diff --git a/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi new file mode 100644 index 00000000000000..c892df5dbdbd39 Binary files /dev/null and b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi differ diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/propaganda.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/propaganda.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/propaganda.dmi rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/propaganda.dmi diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/cases.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/cases.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/cases.dmi rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/cases.dmi diff --git a/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi new file mode 100644 index 00000000000000..6474afdbe43db7 Binary files /dev/null and b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi differ diff --git a/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_32.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_32.dmi new file mode 100644 index 00000000000000..88f2a23b8431e3 Binary files /dev/null and b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_32.dmi differ diff --git a/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_48.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_48.dmi new file mode 100644 index 00000000000000..fdcbfa196bca1b Binary files /dev/null and b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_48.dmi differ diff --git a/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_64.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_64.dmi new file mode 100644 index 00000000000000..14ad4187cd30c1 Binary files /dev/null and b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_64.dmi differ diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/ammo.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/ammo.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/ammo.dmi rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/ammo.dmi diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/propaganda.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/propaganda.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/propaganda.dmi rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/propaganda.dmi diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/ammo.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/ammo.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/ammo.dmi rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/ammo.dmi diff --git a/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns32x.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns32x.dmi new file mode 100644 index 00000000000000..84f2df323220c8 Binary files /dev/null and b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns32x.dmi differ diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns40x.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns40x.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns40x.dmi rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns40x.dmi diff --git a/modular_nova/modules/modular_weapons/icons/obj/gunsets.dmi b/modular_nova/modules/modular_weapons/icons/obj/gunsets.dmi new file mode 100644 index 00000000000000..a80ebc5c5a4749 Binary files /dev/null and b/modular_nova/modules/modular_weapons/icons/obj/gunsets.dmi differ diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/melee.dmi b/modular_nova/modules/modular_weapons/icons/obj/melee.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/obj/melee.dmi rename to modular_nova/modules/modular_weapons/icons/obj/melee.dmi diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/pepperball/ammoboxes.dmi b/modular_nova/modules/modular_weapons/icons/obj/pepperball/ammoboxes.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/obj/pepperball/ammoboxes.dmi rename to modular_nova/modules/modular_weapons/icons/obj/pepperball/ammoboxes.dmi diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/pepperball/pepperball.dmi b/modular_nova/modules/modular_weapons/icons/obj/pepperball/pepperball.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/obj/pepperball/pepperball.dmi rename to modular_nova/modules/modular_weapons/icons/obj/pepperball/pepperball.dmi diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/pepperball/projectiles.dmi b/modular_nova/modules/modular_weapons/icons/obj/pepperball/projectiles.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/obj/pepperball/projectiles.dmi rename to modular_nova/modules/modular_weapons/icons/obj/pepperball/projectiles.dmi diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/projectiles.dmi b/modular_nova/modules/modular_weapons/icons/obj/projectiles.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/obj/projectiles.dmi rename to modular_nova/modules/modular_weapons/icons/obj/projectiles.dmi diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/vending.dmi b/modular_nova/modules/modular_weapons/icons/obj/vending.dmi similarity index 100% rename from modular_skyrat/modules/modular_weapons/icons/obj/vending.dmi rename to modular_nova/modules/modular_weapons/icons/obj/vending.dmi diff --git a/modular_skyrat/modules/modular_weapons/readme.md b/modular_nova/modules/modular_weapons/readme.md similarity index 100% rename from modular_skyrat/modules/modular_weapons/readme.md rename to modular_nova/modules/modular_weapons/readme.md diff --git a/modular_nova/modules/modular_weapons/sounds/battle_rifle.ogg b/modular_nova/modules/modular_weapons/sounds/battle_rifle.ogg new file mode 100644 index 00000000000000..ee607980d49485 Binary files /dev/null and b/modular_nova/modules/modular_weapons/sounds/battle_rifle.ogg differ diff --git a/modular_skyrat/modules/modular_weapons/sounds/grenade_burst.ogg b/modular_nova/modules/modular_weapons/sounds/grenade_burst.ogg similarity index 100% rename from modular_skyrat/modules/modular_weapons/sounds/grenade_burst.ogg rename to modular_nova/modules/modular_weapons/sounds/grenade_burst.ogg diff --git a/modular_skyrat/modules/modular_weapons/sounds/grenade_launcher.ogg b/modular_nova/modules/modular_weapons/sounds/grenade_launcher.ogg similarity index 100% rename from modular_skyrat/modules/modular_weapons/sounds/grenade_launcher.ogg rename to modular_nova/modules/modular_weapons/sounds/grenade_launcher.ogg diff --git a/modular_skyrat/modules/modular_weapons/sounds/pistol_heavy.ogg b/modular_nova/modules/modular_weapons/sounds/pistol_heavy.ogg similarity index 100% rename from modular_skyrat/modules/modular_weapons/sounds/pistol_heavy.ogg rename to modular_nova/modules/modular_weapons/sounds/pistol_heavy.ogg diff --git a/modular_skyrat/modules/modular_weapons/sounds/pistol_light.ogg b/modular_nova/modules/modular_weapons/sounds/pistol_light.ogg similarity index 100% rename from modular_skyrat/modules/modular_weapons/sounds/pistol_light.ogg rename to modular_nova/modules/modular_weapons/sounds/pistol_light.ogg diff --git a/modular_skyrat/modules/modular_weapons/sounds/revolver_heavy.ogg b/modular_nova/modules/modular_weapons/sounds/revolver_heavy.ogg similarity index 100% rename from modular_skyrat/modules/modular_weapons/sounds/revolver_heavy.ogg rename to modular_nova/modules/modular_weapons/sounds/revolver_heavy.ogg diff --git a/modular_skyrat/modules/modular_weapons/sounds/rifle_heavy.ogg b/modular_nova/modules/modular_weapons/sounds/rifle_heavy.ogg similarity index 100% rename from modular_skyrat/modules/modular_weapons/sounds/rifle_heavy.ogg rename to modular_nova/modules/modular_weapons/sounds/rifle_heavy.ogg diff --git a/modular_skyrat/modules/modular_weapons/sounds/shotgun_heavy.ogg b/modular_nova/modules/modular_weapons/sounds/shotgun_heavy.ogg similarity index 100% rename from modular_skyrat/modules/modular_weapons/sounds/shotgun_heavy.ogg rename to modular_nova/modules/modular_weapons/sounds/shotgun_heavy.ogg diff --git a/modular_skyrat/modules/modular_weapons/sounds/shotgun_rack.ogg b/modular_nova/modules/modular_weapons/sounds/shotgun_rack.ogg similarity index 100% rename from modular_skyrat/modules/modular_weapons/sounds/shotgun_rack.ogg rename to modular_nova/modules/modular_weapons/sounds/shotgun_rack.ogg diff --git a/modular_nova/modules/modular_weapons/sounds/smg_heavy.ogg b/modular_nova/modules/modular_weapons/sounds/smg_heavy.ogg new file mode 100644 index 00000000000000..77a11a524a7823 Binary files /dev/null and b/modular_nova/modules/modular_weapons/sounds/smg_heavy.ogg differ diff --git a/modular_skyrat/modules/modular_weapons/sounds/smg_light.ogg b/modular_nova/modules/modular_weapons/sounds/smg_light.ogg similarity index 100% rename from modular_skyrat/modules/modular_weapons/sounds/smg_light.ogg rename to modular_nova/modules/modular_weapons/sounds/smg_light.ogg diff --git a/modular_skyrat/modules/modular_weapons/sounds/suppressed_heavy.ogg b/modular_nova/modules/modular_weapons/sounds/suppressed_heavy.ogg similarity index 100% rename from modular_skyrat/modules/modular_weapons/sounds/suppressed_heavy.ogg rename to modular_nova/modules/modular_weapons/sounds/suppressed_heavy.ogg diff --git a/modular_skyrat/modules/modular_weapons/sounds/suppressed_rifle.ogg b/modular_nova/modules/modular_weapons/sounds/suppressed_rifle.ogg similarity index 100% rename from modular_skyrat/modules/modular_weapons/sounds/suppressed_rifle.ogg rename to modular_nova/modules/modular_weapons/sounds/suppressed_rifle.ogg diff --git a/modular_skyrat/modules/mold/code/_mold_defines.dm b/modular_nova/modules/mold/code/_mold_defines.dm similarity index 100% rename from modular_skyrat/modules/mold/code/_mold_defines.dm rename to modular_nova/modules/mold/code/_mold_defines.dm diff --git a/modular_skyrat/modules/mold/code/mold.dm b/modular_nova/modules/mold/code/mold.dm similarity index 99% rename from modular_skyrat/modules/mold/code/mold.dm rename to modular_nova/modules/mold/code/mold.dm index dbd1ff139f682e..8281a1ed2381b7 100644 --- a/modular_skyrat/modules/mold/code/mold.dm +++ b/modular_nova/modules/mold/code/mold.dm @@ -270,7 +270,7 @@ mold_color = "#cb37f5" structure_light_color = LIGHT_COLOR_LAVENDER examine_text = "It feels damp and smells of rat poison." - mob_types = list(/mob/living/basic/spider/giant/) + mob_types = list(/mob/living/basic/spider/giant/hunter) preferred_atmos_conditions = "miasma=50;TEMP=296" resistance_flags = UNACIDABLE | ACID_PROOF diff --git a/modular_skyrat/modules/mold/code/mold_controller.dm b/modular_nova/modules/mold/code/mold_controller.dm similarity index 100% rename from modular_skyrat/modules/mold/code/mold_controller.dm rename to modular_nova/modules/mold/code/mold_controller.dm diff --git a/modular_skyrat/modules/mold/code/mold_disease.dm b/modular_nova/modules/mold/code/mold_disease.dm similarity index 100% rename from modular_skyrat/modules/mold/code/mold_disease.dm rename to modular_nova/modules/mold/code/mold_disease.dm diff --git a/modular_skyrat/modules/mold/code/mold_event.dm b/modular_nova/modules/mold/code/mold_event.dm similarity index 100% rename from modular_skyrat/modules/mold/code/mold_event.dm rename to modular_nova/modules/mold/code/mold_event.dm diff --git a/modular_skyrat/modules/mold/code/mold_mobs.dm b/modular_nova/modules/mold/code/mold_mobs.dm similarity index 93% rename from modular_skyrat/modules/mold/code/mold_mobs.dm rename to modular_nova/modules/mold/code/mold_mobs.dm index c7ba1226435e34..0c9f401aeb8e80 100644 --- a/modular_skyrat/modules/mold/code/mold_mobs.dm +++ b/modular_nova/modules/mold/code/mold_mobs.dm @@ -12,7 +12,7 @@ /mob/living/basic/mold name = "mold mob" desc = "A debug mob for molds. You should report seeing this." - icon = 'modular_skyrat/modules/mold/icons/blob_mobs.dmi' + icon = 'modular_nova/modules/mold/icons/blob_mobs.dmi' gold_core_spawnable = NO_SPAWN faction = list(FACTION_MOLD) basic_mob_flags = DEL_ON_DEATH @@ -33,7 +33,7 @@ maxHealth = 150 health = 150 - damage_coeff = list(BRUTE = 1, BURN = 0, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 0) + damage_coeff = list(BRUTE = 1, BURN = 0, TOX = 1, STAMINA = 0, OXY = 0) unsuitable_atmos_damage = 0 minimum_survivable_temperature = 0 maximum_survivable_temperature = INFINITY @@ -83,7 +83,7 @@ /datum/ai_controller/basic_controller/oil_shambler blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance @@ -126,6 +126,7 @@ attack_verb_simple = "bite" pass_flags = PASSTABLE + basic_mob_flags = DEL_ON_DEATH butcher_results = list(/obj/item/food/meat/slab = 1) gold_core_spawnable = HOSTILE_SPAWN @@ -147,7 +148,7 @@ /datum/ai_controller/basic_controller/diseased_rat blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance @@ -188,6 +189,7 @@ attack_verb_continuous = "stings" attack_verb_simple = "sting" attack_sound = 'sound/effects/attackblob.ogg' + basic_mob_flags = DEL_ON_DEATH ai_controller = /datum/ai_controller/basic_controller/electric_mosquito @@ -204,7 +206,7 @@ /datum/ai_controller/basic_controller/electric_mosquito blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance @@ -245,6 +247,7 @@ melee_damage_lower = 10 melee_damage_upper = 15 + basic_mob_flags = DEL_ON_DEATH wound_bonus = 15 obj_damage = 40 attack_sound = 'sound/effects/wounds/crackandbleed.ogg' @@ -272,11 +275,11 @@ var/mob/living/radiation_target = target if(prob(irradiate_chance)) radiation_pulse(radiation_target, CENTAUR_RAD_PULSE_RANGE, CENTAUR_RAD_PULSE_THRESHOLD, FALSE, TRUE) - playsound(src, 'modular_skyrat/modules/horrorform/sound/horror_scream.ogg', CENTAUR_ATTACK_SCREAM_VOLUME, TRUE) + playsound(src, 'modular_nova/modules/horrorform/sound/horror_scream.ogg', CENTAUR_ATTACK_SCREAM_VOLUME, TRUE) /datum/ai_controller/basic_controller/centaur blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/modular_skyrat/modules/mold/code/mold_structures.dm b/modular_nova/modules/mold/code/mold_structures.dm similarity index 96% rename from modular_skyrat/modules/mold/code/mold_structures.dm rename to modular_nova/modules/mold/code/mold_structures.dm index e2e3a8c468e339..243f5e173ac059 100644 --- a/modular_skyrat/modules/mold/code/mold_structures.dm +++ b/modular_nova/modules/mold/code/mold_structures.dm @@ -49,7 +49,7 @@ /datum/looping_sound/core_heartbeat mid_length = 3 SECONDS - mid_sounds = list('modular_skyrat/master_files/sound/effects/heart_beat_loop3.ogg' = 1) + mid_sounds = list('modular_nova/master_files/sound/effects/heart_beat_loop3.ogg' = 1) volume = 20 /** @@ -57,7 +57,7 @@ */ /obj/structure/mold/structure/core name = "core" - icon = 'modular_skyrat/modules/mold/icons/blob_core.dmi' + icon = 'modular_nova/modules/mold/icons/blob_core.dmi' icon_state = "blob_core" layer = TABLE_LAYER max_integrity = 1200 @@ -128,7 +128,7 @@ /obj/structure/mold/resin name = "mold" desc = "It looks like mold, but it seems alive." - icon = 'modular_skyrat/modules/mold/icons/blob_resin.dmi' + icon = 'modular_nova/modules/mold/icons/blob_resin.dmi' icon_state = "blob_floor" density = FALSE plane = FLOOR_PLANE @@ -215,7 +215,7 @@ */ /obj/structure/mold/structure/bulb name = "bulb" - icon = 'modular_skyrat/modules/mold/icons/blob_bulb.dmi' + icon = 'modular_nova/modules/mold/icons/blob_bulb.dmi' icon_state = "blob_bulb_empty" density = FALSE layer = TABLE_LAYER @@ -328,7 +328,7 @@ name = "pulsating vent" desc = "An unsightly vent, it appears to be puffing something out." density = FALSE - icon = 'modular_skyrat/modules/mold/icons/blob_spawner.dmi' + icon = 'modular_nova/modules/mold/icons/blob_spawner.dmi' icon_state = "blob_vent" density = FALSE layer = SIGIL_LAYER @@ -367,7 +367,7 @@ */ /obj/structure/mold/structure/spawner name = "hatchery" - icon = 'modular_skyrat/modules/mold/icons/blob_spawner.dmi' + icon = 'modular_nova/modules/mold/icons/blob_spawner.dmi' icon_state = "blob_spawner" density = FALSE layer = SIGIL_LAYER diff --git a/modular_skyrat/modules/mold/icons/blob_bulb.dmi b/modular_nova/modules/mold/icons/blob_bulb.dmi similarity index 100% rename from modular_skyrat/modules/mold/icons/blob_bulb.dmi rename to modular_nova/modules/mold/icons/blob_bulb.dmi diff --git a/modular_skyrat/modules/mold/icons/blob_core.dmi b/modular_nova/modules/mold/icons/blob_core.dmi similarity index 100% rename from modular_skyrat/modules/mold/icons/blob_core.dmi rename to modular_nova/modules/mold/icons/blob_core.dmi diff --git a/modular_skyrat/modules/mold/icons/blob_mobs.dmi b/modular_nova/modules/mold/icons/blob_mobs.dmi similarity index 100% rename from modular_skyrat/modules/mold/icons/blob_mobs.dmi rename to modular_nova/modules/mold/icons/blob_mobs.dmi diff --git a/modular_skyrat/modules/mold/icons/blob_resin.dmi b/modular_nova/modules/mold/icons/blob_resin.dmi similarity index 100% rename from modular_skyrat/modules/mold/icons/blob_resin.dmi rename to modular_nova/modules/mold/icons/blob_resin.dmi diff --git a/modular_skyrat/modules/mold/icons/blob_spawner.dmi b/modular_nova/modules/mold/icons/blob_spawner.dmi similarity index 100% rename from modular_skyrat/modules/mold/icons/blob_spawner.dmi rename to modular_nova/modules/mold/icons/blob_spawner.dmi diff --git a/modular_nova/modules/mold/readme.md b/modular_nova/modules/mold/readme.md new file mode 100644 index 00000000000000..92568c0315f06b --- /dev/null +++ b/modular_nova/modules/mold/readme.md @@ -0,0 +1,41 @@ +https://github.com/Skyrat-SS13/Skyrat-tg/pull/1356 + +## Title: Mold - Advanced PvE Blob-Vine Encounter + +MODULE ID: `BIOHAZ_MOLD` + +### Description: + +<!-- Taken from #1356's About section for now as I'm too tired to come up with a good description :v -Avunia --> +100% PVE +Spreads much like glowshrooms and space vines, has a main core like a blob. During the spreading it builds structures, currently there's 2. One of them will release something harmful on proximity, another will spawn enemies. The blob also releases harmful stuff depending on the type, on cooldown. + +The resin grows and bashes through doors and firelocks, when it meets a space tile it walls it off. It isn't too hard of an encounter and it doesn't spread too fast. + +There's 4 types right now, for each type people should take be taking different tactics and pre-cautions. + +Currently not tied to any event, just admin spawn for the purposes of tests and stuff. + +When the core dies, everything slowly decays away. + +### TG Proc/File Changes: + +- N/A + +### Defines: + +|File Location|Defines| +|-------------|-------| +|`modular_nova/modules/biohazard_blob/code/_biohazard_blob_defines.dm`|`BIO_MOLD_TYPE_FUNGUS`<br>`BIO_MOLD_TYPE_FIRE`<br>`BIO_MOLD_TYPE_EMP`<br>`BIO_MOLD_TYPE_TOXIC`<br>`ALL_BIO_BLOB_TYPES`<br>`FACTION_MOLD`| + +### Master file additions + +- N/A + +### Included files that are not contained in this module: + +- N/A + +### Credits: + +- Azarak diff --git a/modular_nova/modules/more_briefcases/code/briefcases.dm b/modular_nova/modules/more_briefcases/code/briefcases.dm new file mode 100644 index 00000000000000..b54a4e2497f4b1 --- /dev/null +++ b/modular_nova/modules/more_briefcases/code/briefcases.dm @@ -0,0 +1,52 @@ +/obj/item/storage/briefcase + icon = 'modular_nova/modules/more_briefcases/icons/briefcases.dmi' + inhand_icon_state = "briefcase" + +/obj/item/storage/briefcase/lawyer + icon_state = "briefcase_black" + inhand_icon_state = "sec-case" + +/obj/item/storage/briefcase/central_command + name = "nanotrasen briefcase" + icon_state = "briefcase_cc" + inhand_icon_state = "sec-case" + +/obj/item/storage/briefcase/medical + name = "medical briefcase" + icon_state = "briefcase_med" + inhand_icon_state = "lockbox" + +/obj/item/storage/briefcase/virology + name = "virology briefcase" + icon_state = "briefcase_vir" + inhand_icon_state = "lockbox" + +/obj/item/storage/briefcase/engineering + name = "engineering briefcase" + icon_state = "briefcase_eng" + +/obj/item/storage/briefcase/secure + icon = 'modular_nova/modules/more_briefcases/icons/briefcases.dmi' + inhand_icon_state = "sec-case" + icon_state = "briefcase_secure_black" + +/obj/item/storage/briefcase/secure/attack_self(mob/user) + . = ..() + update_appearance() + +/obj/item/storage/briefcase/secure/update_overlays() + . = ..() + if(atom_storage?.locked) + . += "briefcase_locked" + else + . += "briefcase_open" + +/obj/item/storage/briefcase/secure/update_icon_state() + . = ..() + // Remove icon state functionality in favor of the overlays above. + icon_state = "[initial(icon_state)]" + +/obj/item/storage/briefcase/secure/white + name = "white secure briefcase" + icon_state = "briefcase_secure_white" + inhand_icon_state = "lockbox" diff --git a/modular_skyrat/modules/more_briefcases/icons/briefcases.dmi b/modular_nova/modules/more_briefcases/icons/briefcases.dmi similarity index 100% rename from modular_skyrat/modules/more_briefcases/icons/briefcases.dmi rename to modular_nova/modules/more_briefcases/icons/briefcases.dmi diff --git a/modular_skyrat/modules/more_briefcases/readme.md b/modular_nova/modules/more_briefcases/readme.md similarity index 100% rename from modular_skyrat/modules/more_briefcases/readme.md rename to modular_nova/modules/more_briefcases/readme.md diff --git a/modular_skyrat/modules/morefermentplants/code/ambrosia.dm b/modular_nova/modules/morefermentplants/code/ambrosia.dm similarity index 100% rename from modular_skyrat/modules/morefermentplants/code/ambrosia.dm rename to modular_nova/modules/morefermentplants/code/ambrosia.dm diff --git a/modular_skyrat/modules/morefermentplants/code/banana.dm b/modular_nova/modules/morefermentplants/code/banana.dm similarity index 100% rename from modular_skyrat/modules/morefermentplants/code/banana.dm rename to modular_nova/modules/morefermentplants/code/banana.dm diff --git a/modular_nova/modules/morefermentplants/code/beans.dm b/modular_nova/modules/morefermentplants/code/beans.dm new file mode 100644 index 00000000000000..ec047a95025f69 --- /dev/null +++ b/modular_nova/modules/morefermentplants/code/beans.dm @@ -0,0 +1,2 @@ +/obj/item/food/grown/koibeans + distill_reagent = /datum/reagent/consumable/ethanol/mush_crush diff --git a/modular_skyrat/modules/morefermentplants/code/berries.dm b/modular_nova/modules/morefermentplants/code/berries.dm similarity index 100% rename from modular_skyrat/modules/morefermentplants/code/berries.dm rename to modular_nova/modules/morefermentplants/code/berries.dm diff --git a/modular_skyrat/modules/morefermentplants/code/cannabis.dm b/modular_nova/modules/morefermentplants/code/cannabis.dm similarity index 100% rename from modular_skyrat/modules/morefermentplants/code/cannabis.dm rename to modular_nova/modules/morefermentplants/code/cannabis.dm diff --git a/modular_skyrat/modules/morefermentplants/code/chili.dm b/modular_nova/modules/morefermentplants/code/chili.dm similarity index 100% rename from modular_skyrat/modules/morefermentplants/code/chili.dm rename to modular_nova/modules/morefermentplants/code/chili.dm diff --git a/modular_skyrat/modules/morefermentplants/code/citrus.dm b/modular_nova/modules/morefermentplants/code/citrus.dm similarity index 100% rename from modular_skyrat/modules/morefermentplants/code/citrus.dm rename to modular_nova/modules/morefermentplants/code/citrus.dm diff --git a/modular_skyrat/modules/morefermentplants/code/eggplant.dm b/modular_nova/modules/morefermentplants/code/eggplant.dm similarity index 100% rename from modular_skyrat/modules/morefermentplants/code/eggplant.dm rename to modular_nova/modules/morefermentplants/code/eggplant.dm diff --git a/modular_skyrat/modules/morefermentplants/code/garlic.dm b/modular_nova/modules/morefermentplants/code/garlic.dm similarity index 100% rename from modular_skyrat/modules/morefermentplants/code/garlic.dm rename to modular_nova/modules/morefermentplants/code/garlic.dm diff --git a/modular_skyrat/modules/morefermentplants/code/kudzu.dm b/modular_nova/modules/morefermentplants/code/kudzu.dm similarity index 100% rename from modular_skyrat/modules/morefermentplants/code/kudzu.dm rename to modular_nova/modules/morefermentplants/code/kudzu.dm diff --git a/modular_skyrat/modules/morefermentplants/code/melon.dm b/modular_nova/modules/morefermentplants/code/melon.dm similarity index 100% rename from modular_skyrat/modules/morefermentplants/code/melon.dm rename to modular_nova/modules/morefermentplants/code/melon.dm diff --git a/modular_skyrat/modules/morefermentplants/code/misc.dm b/modular_nova/modules/morefermentplants/code/misc.dm similarity index 100% rename from modular_skyrat/modules/morefermentplants/code/misc.dm rename to modular_nova/modules/morefermentplants/code/misc.dm diff --git a/modular_skyrat/modules/morefermentplants/code/mushrooms.dm b/modular_nova/modules/morefermentplants/code/mushrooms.dm similarity index 100% rename from modular_skyrat/modules/morefermentplants/code/mushrooms.dm rename to modular_nova/modules/morefermentplants/code/mushrooms.dm diff --git a/modular_skyrat/modules/morefermentplants/code/nettle.dm b/modular_nova/modules/morefermentplants/code/nettle.dm similarity index 100% rename from modular_skyrat/modules/morefermentplants/code/nettle.dm rename to modular_nova/modules/morefermentplants/code/nettle.dm diff --git a/modular_skyrat/modules/morefermentplants/code/onion.dm b/modular_nova/modules/morefermentplants/code/onion.dm similarity index 100% rename from modular_skyrat/modules/morefermentplants/code/onion.dm rename to modular_nova/modules/morefermentplants/code/onion.dm diff --git a/modular_skyrat/modules/morefermentplants/code/pineapple.dm b/modular_nova/modules/morefermentplants/code/pineapple.dm similarity index 100% rename from modular_skyrat/modules/morefermentplants/code/pineapple.dm rename to modular_nova/modules/morefermentplants/code/pineapple.dm diff --git a/modular_skyrat/modules/morefermentplants/code/pumpkin.dm b/modular_nova/modules/morefermentplants/code/pumpkin.dm similarity index 100% rename from modular_skyrat/modules/morefermentplants/code/pumpkin.dm rename to modular_nova/modules/morefermentplants/code/pumpkin.dm diff --git a/modular_skyrat/modules/morefermentplants/code/root.dm b/modular_nova/modules/morefermentplants/code/root.dm similarity index 100% rename from modular_skyrat/modules/morefermentplants/code/root.dm rename to modular_nova/modules/morefermentplants/code/root.dm diff --git a/modular_skyrat/modules/morefermentplants/code/tobacco.dm b/modular_nova/modules/morefermentplants/code/tobacco.dm similarity index 100% rename from modular_skyrat/modules/morefermentplants/code/tobacco.dm rename to modular_nova/modules/morefermentplants/code/tobacco.dm diff --git a/modular_skyrat/modules/morefermentplants/code/tomato.dm b/modular_nova/modules/morefermentplants/code/tomato.dm similarity index 100% rename from modular_skyrat/modules/morefermentplants/code/tomato.dm rename to modular_nova/modules/morefermentplants/code/tomato.dm diff --git a/modular_skyrat/modules/morefermentplants/readme.md b/modular_nova/modules/morefermentplants/readme.md similarity index 100% rename from modular_skyrat/modules/morefermentplants/readme.md rename to modular_nova/modules/morefermentplants/readme.md diff --git a/modular_skyrat/modules/morenarcotics/code/blacktar.dm b/modular_nova/modules/morenarcotics/code/blacktar.dm similarity index 81% rename from modular_skyrat/modules/morenarcotics/code/blacktar.dm rename to modular_nova/modules/morenarcotics/code/blacktar.dm index 9dd9900cc7281f..64f88ac8793aee 100644 --- a/modular_skyrat/modules/morenarcotics/code/blacktar.dm +++ b/modular_nova/modules/morenarcotics/code/blacktar.dm @@ -1,7 +1,7 @@ /obj/item/reagent_containers/blacktar name = "black tar heroin" desc = "A rock of black tar heroin, an impure freebase form of heroin." - icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi' + icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi' icon_state = "blacktar" volume = 5 has_variable_transfer_amount = FALSE diff --git a/modular_skyrat/modules/morenarcotics/code/cocaine.dm b/modular_nova/modules/morenarcotics/code/cocaine.dm similarity index 100% rename from modular_skyrat/modules/morenarcotics/code/cocaine.dm rename to modular_nova/modules/morenarcotics/code/cocaine.dm diff --git a/modular_skyrat/modules/morenarcotics/code/cocaine_item.dm b/modular_nova/modules/morenarcotics/code/cocaine_item.dm similarity index 94% rename from modular_skyrat/modules/morenarcotics/code/cocaine_item.dm rename to modular_nova/modules/morenarcotics/code/cocaine_item.dm index 2a4da011635738..014c1099dc6303 100644 --- a/modular_skyrat/modules/morenarcotics/code/cocaine_item.dm +++ b/modular_nova/modules/morenarcotics/code/cocaine_item.dm @@ -1,7 +1,7 @@ /obj/item/reagent_containers/crack name = "crack" desc = "A rock of freebase cocaine, otherwise known as crack." - icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi' + icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi' icon_state = "crack" volume = 10 has_variable_transfer_amount = FALSE @@ -10,7 +10,7 @@ /obj/item/reagent_containers/crackbrick name = "crack brick" desc = "A brick of crack cocaine." - icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi' + icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi' icon_state = "crackbrick" volume = 40 has_variable_transfer_amount = FALSE @@ -35,7 +35,7 @@ /obj/item/reagent_containers/cocaine name = "cocaine" desc = "Reenact your favorite scenes from Scarface!" - icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi' + icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi' icon_state = "cocaine" volume = 5 has_variable_transfer_amount = FALSE @@ -80,7 +80,7 @@ /obj/item/reagent_containers/cocainebrick name = "cocaine brick" desc = "A brick of cocaine. Good for transport!" - icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi' + icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi' icon_state = "cocainebrick" volume = 25 has_variable_transfer_amount = FALSE diff --git a/modular_skyrat/modules/morenarcotics/code/cocoleaves.dm b/modular_nova/modules/morenarcotics/code/cocoleaves.dm similarity index 79% rename from modular_skyrat/modules/morenarcotics/code/cocoleaves.dm rename to modular_nova/modules/morenarcotics/code/cocoleaves.dm index f35046fcac52ba..4252c423c38adf 100644 --- a/modular_skyrat/modules/morenarcotics/code/cocoleaves.dm +++ b/modular_nova/modules/morenarcotics/code/cocoleaves.dm @@ -1,8 +1,8 @@ /obj/item/seeds/cocaleaf name = "pack of coca leaf seeds" desc = "These seeds grow into coca shrubs. They make you feel energized just looking at them..." - icon = 'modular_skyrat/master_files/icons/obj/hydroponics/seeds.dmi' - growing_icon = 'modular_skyrat/master_files/icons/obj/hydroponics/growing.dmi' + icon = 'modular_nova/master_files/icons/obj/hydroponics/seeds.dmi' + growing_icon = 'modular_nova/master_files/icons/obj/hydroponics/growing.dmi' icon_state = "seed-cocoleaf" species = "cocoleaf" plantname = "Coca Leaves" @@ -17,7 +17,7 @@ seed = /obj/item/seeds/cocaleaf name = "coca leaf" desc = "A leaf of the coca shrub, which contains a potent psychoactive alkaloid known as 'cocaine'." - icon = 'modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi' + icon = 'modular_nova/master_files/icons/obj/hydroponics/harvest.dmi' icon_state = "cocoleaf" foodtypes = FRUIT //i guess? i mean it grows on trees... tastes = list("leaves" = 1) diff --git a/modular_skyrat/modules/morenarcotics/code/crackpipe.dm b/modular_nova/modules/morenarcotics/code/crackpipe.dm similarity index 93% rename from modular_skyrat/modules/morenarcotics/code/crackpipe.dm rename to modular_nova/modules/morenarcotics/code/crackpipe.dm index e17bf805a37c5a..7b2252ffff4c8d 100644 --- a/modular_skyrat/modules/morenarcotics/code/crackpipe.dm +++ b/modular_nova/modules/morenarcotics/code/crackpipe.dm @@ -1,8 +1,8 @@ /obj/item/clothing/mask/cigarette/pipe/crackpipe name = "crack pipe" desc = "A slick glass pipe made for smoking one thing: crack." - icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi' - worn_icon = 'modular_skyrat/modules/morenarcotics/icons/mask.dmi' + icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi' + worn_icon = 'modular_nova/modules/morenarcotics/icons/mask.dmi' icon_state = "glass_pipeoff" //it seems like theres some unused crack pipe sprite in masks.dmi, sweet! icon_on = "glass_pipeon" icon_off = "glass_pipeoff" diff --git a/modular_skyrat/modules/morenarcotics/code/opium.dm b/modular_nova/modules/morenarcotics/code/opium.dm similarity index 98% rename from modular_skyrat/modules/morenarcotics/code/opium.dm rename to modular_nova/modules/morenarcotics/code/opium.dm index 7c49c67ca5dd59..9ace225d0a0e77 100644 --- a/modular_skyrat/modules/morenarcotics/code/opium.dm +++ b/modular_nova/modules/morenarcotics/code/opium.dm @@ -25,7 +25,7 @@ /obj/item/reagent_containers/heroin name = "heroin" desc = "Take a line and take some time of man." - icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi' + icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi' icon_state = "heroin" volume = 4 has_variable_transfer_amount = FALSE @@ -70,7 +70,7 @@ /obj/item/reagent_containers/heroinbrick name = "heroin brick" desc = "A brick of heroin. Good for transport!" - icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi' + icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi' icon_state = "heroinbrick" volume = 20 has_variable_transfer_amount = FALSE diff --git a/modular_skyrat/modules/morenarcotics/code/opiumpoppy.dm b/modular_nova/modules/morenarcotics/code/opiumpoppy.dm similarity index 81% rename from modular_skyrat/modules/morenarcotics/code/opiumpoppy.dm rename to modular_nova/modules/morenarcotics/code/opiumpoppy.dm index 76cae58a0ea155..a5eb42e05d503d 100644 --- a/modular_skyrat/modules/morenarcotics/code/opiumpoppy.dm +++ b/modular_nova/modules/morenarcotics/code/opiumpoppy.dm @@ -1,8 +1,8 @@ /obj/item/seeds/poppy/opiumpoppy name = "pack of opium poppy seeds" desc = "These seeds grow into real opium poppies." - icon = 'modular_skyrat/master_files/icons/obj/hydroponics/seeds.dmi' - growing_icon = 'modular_skyrat/master_files/icons/obj/hydroponics/growing.dmi' + icon = 'modular_nova/master_files/icons/obj/hydroponics/seeds.dmi' + growing_icon = 'modular_nova/master_files/icons/obj/hydroponics/growing.dmi' icon_state = "seed-opiumpoppy" species = "opiumpoppy" icon_grow = "opiumpoppy-grow" @@ -16,7 +16,7 @@ seed = /obj/item/seeds/poppy/opiumpoppy name = "opium poppy seedpod" desc = "The seedpod of the opium poppy plant, which contain opium latex." - icon = 'modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi' + icon = 'modular_nova/master_files/icons/obj/hydroponics/harvest.dmi' icon_state = "opiumpoppy" worn_icon_state = "map_flower" greyscale_config = null diff --git a/modular_skyrat/modules/morenarcotics/code/pcp.dm b/modular_nova/modules/morenarcotics/code/pcp.dm similarity index 100% rename from modular_skyrat/modules/morenarcotics/code/pcp.dm rename to modular_nova/modules/morenarcotics/code/pcp.dm diff --git a/modular_skyrat/modules/morenarcotics/code/quaalude.dm b/modular_nova/modules/morenarcotics/code/quaalude.dm similarity index 100% rename from modular_skyrat/modules/morenarcotics/code/quaalude.dm rename to modular_nova/modules/morenarcotics/code/quaalude.dm diff --git a/modular_skyrat/modules/morenarcotics/code/thc.dm b/modular_nova/modules/morenarcotics/code/thc.dm similarity index 92% rename from modular_skyrat/modules/morenarcotics/code/thc.dm rename to modular_nova/modules/morenarcotics/code/thc.dm index 74bdc3c637d012..1d6bfc8e5cbd98 100644 --- a/modular_skyrat/modules/morenarcotics/code/thc.dm +++ b/modular_nova/modules/morenarcotics/code/thc.dm @@ -46,6 +46,10 @@ ph = 6 taste_description = "skunk" +/datum/reagent/drug/thc/concentrated + name = "Concentrated THC" + description = "TCH in pure concentrated form" + /datum/reagent/drug/thc/on_mob_life(mob/living/carbon/M, seconds_per_tick, times_fired) var/high_message = pick("You feel relaxed.", "You feel fucked up.", "You feel totally wrecked...") if(M.hud_used!=null) @@ -75,7 +79,7 @@ M.say("[cg420_message]") M.adjust_drowsiness(0.2 SECONDS * REM * normalise_creation_purity() * seconds_per_tick) if(SPT_PROB(3.5, seconds_per_tick)) - playsound(M, pick('modular_skyrat/master_files/sound/effects/lungbust_cough1.ogg','modular_skyrat/master_files/sound/effects/lungbust_cough2.ogg'), 50, TRUE) + playsound(M, pick('modular_nova/master_files/sound/effects/lungbust_cough1.ogg','modular_nova/master_files/sound/effects/lungbust_cough2.ogg'), 50, TRUE) M.emote("cough") ..() . = TRUE diff --git a/modular_skyrat/modules/morenarcotics/code/thc_item.dm b/modular_nova/modules/morenarcotics/code/thc_item.dm similarity index 87% rename from modular_skyrat/modules/morenarcotics/code/thc_item.dm rename to modular_nova/modules/morenarcotics/code/thc_item.dm index 6f4cdd26a2696d..cdaf8b59dbef8a 100644 --- a/modular_skyrat/modules/morenarcotics/code/thc_item.dm +++ b/modular_nova/modules/morenarcotics/code/thc_item.dm @@ -1,7 +1,7 @@ /obj/item/reagent_containers/hash name = "hash" desc = "Concentrated cannabis extract. Delivers a much better high when used in a bong." - icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi' + icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi' icon_state = "hash" volume = 20 has_variable_transfer_amount = FALSE @@ -10,16 +10,16 @@ /obj/item/reagent_containers/hash/dabs name = "dab" desc = "Oil extract from cannabis plants. Just delivers a different type of hit." - icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi' + icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi' icon_state = "dab" volume = 40 has_variable_transfer_amount = FALSE - list_reagents = list(/datum/reagent/drug/thc = 40) //horrendously powerful + list_reagents = list(/datum/reagent/drug/thc/concentrated = 40) //horrendously powerful /obj/item/reagent_containers/hashbrick name = "hash brick" desc = "A brick of hash. Good for transport!" - icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi' + icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi' icon_state = "hashbrick" volume = 80 has_variable_transfer_amount = FALSE diff --git a/modular_skyrat/modules/morenarcotics/code/vapecarts.dm b/modular_nova/modules/morenarcotics/code/vapecarts.dm similarity index 98% rename from modular_skyrat/modules/morenarcotics/code/vapecarts.dm rename to modular_nova/modules/morenarcotics/code/vapecarts.dm index 8e9d242484e7dc..b22ff59632490c 100644 --- a/modular_skyrat/modules/morenarcotics/code/vapecarts.dm +++ b/modular_nova/modules/morenarcotics/code/vapecarts.dm @@ -1,7 +1,7 @@ /obj/item/reagent_containers/vapecart name = "vape cart" desc = "A vape cart filled with nicotine." - icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi' + icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi' icon_state = "vapecart" fill_icon_state = "vapecart" volume = 50 diff --git a/modular_skyrat/modules/morenarcotics/icons/crack.dmi b/modular_nova/modules/morenarcotics/icons/crack.dmi similarity index 100% rename from modular_skyrat/modules/morenarcotics/icons/crack.dmi rename to modular_nova/modules/morenarcotics/icons/crack.dmi diff --git a/modular_skyrat/modules/morenarcotics/icons/mask.dmi b/modular_nova/modules/morenarcotics/icons/mask.dmi similarity index 100% rename from modular_skyrat/modules/morenarcotics/icons/mask.dmi rename to modular_nova/modules/morenarcotics/icons/mask.dmi diff --git a/modular_skyrat/modules/moretraitoritems/code/autosurgeon.dm b/modular_nova/modules/moretraitoritems/code/autosurgeon.dm similarity index 91% rename from modular_skyrat/modules/moretraitoritems/code/autosurgeon.dm rename to modular_nova/modules/moretraitoritems/code/autosurgeon.dm index c3a762c40996c6..e4db010028b494 100644 --- a/modular_skyrat/modules/moretraitoritems/code/autosurgeon.dm +++ b/modular_nova/modules/moretraitoritems/code/autosurgeon.dm @@ -38,12 +38,12 @@ /obj/item/autosurgeon/bodypart/r_arm_robotic/Initialize(mapload) . = ..() - storedbodypart.icon = 'modular_skyrat/master_files/icons/mob/augmentation/hi2ipc.dmi' + storedbodypart.icon = 'modular_nova/master_files/icons/mob/augmentation/hi2ipc.dmi' //xeno-organs /obj/item/autosurgeon/xeno name = "strange autosurgeon" - icon = 'modular_skyrat/modules/moretraitoritems/icons/alien.dmi' + icon = 'modular_nova/modules/moretraitoritems/icons/alien.dmi' surgery_speed = 2 organ_whitelist = list(/obj/item/organ/internal/alien) @@ -54,7 +54,7 @@ /obj/item/storage/organbox/strange name = "strange organ transport box" - icon = 'modular_skyrat/modules/moretraitoritems/icons/alien.dmi' + icon = 'modular_nova/modules/moretraitoritems/icons/alien.dmi' /obj/item/storage/organbox/strange/Initialize(mapload) . = ..() diff --git a/modular_skyrat/modules/moretraitoritems/code/autosurgeon_bodypart.dm b/modular_nova/modules/moretraitoritems/code/autosurgeon_bodypart.dm similarity index 100% rename from modular_skyrat/modules/moretraitoritems/code/autosurgeon_bodypart.dm rename to modular_nova/modules/moretraitoritems/code/autosurgeon_bodypart.dm diff --git a/modular_skyrat/modules/moretraitoritems/code/cards_id.dm b/modular_nova/modules/moretraitoritems/code/cards_id.dm similarity index 100% rename from modular_skyrat/modules/moretraitoritems/code/cards_id.dm rename to modular_nova/modules/moretraitoritems/code/cards_id.dm diff --git a/modular_skyrat/modules/moretraitoritems/code/cultist.dm b/modular_nova/modules/moretraitoritems/code/cultist.dm similarity index 100% rename from modular_skyrat/modules/moretraitoritems/code/cultist.dm rename to modular_nova/modules/moretraitoritems/code/cultist.dm diff --git a/modular_skyrat/modules/moretraitoritems/code/drinkingglass.dm b/modular_nova/modules/moretraitoritems/code/drinkingglass.dm similarity index 100% rename from modular_skyrat/modules/moretraitoritems/code/drinkingglass.dm rename to modular_nova/modules/moretraitoritems/code/drinkingglass.dm diff --git a/modular_skyrat/modules/moretraitoritems/code/glue.dm b/modular_nova/modules/moretraitoritems/code/glue.dm similarity index 82% rename from modular_skyrat/modules/moretraitoritems/code/glue.dm rename to modular_nova/modules/moretraitoritems/code/glue.dm index 75867bca82510d..3378ee6f6e54a2 100644 --- a/modular_skyrat/modules/moretraitoritems/code/glue.dm +++ b/modular_nova/modules/moretraitoritems/code/glue.dm @@ -1,7 +1,7 @@ /obj/item/syndie_glue name = "bottle of super glue" desc = "A black market brand of high strength adhesive, rarely sold to the public. Do not ingest." - icon = 'modular_skyrat/master_files/icons/obj/tools.dmi' + icon = 'modular_nova/master_files/icons/obj/tools.dmi' icon_state = "glue" w_class = WEIGHT_CLASS_SMALL var/uses = 1 @@ -17,11 +17,11 @@ return if(istype(target, /obj/item)) var/obj/item/I = target - if(HAS_TRAIT_FROM(I, TRAIT_NODROP, GLUED_ITEM_TRAIT)) + if(HAS_TRAIT_FROM(I, TRAIT_NODROP, TRAIT_GLUED_ITEM)) to_chat(user, span_warning("[I] is already sticky!")) return uses -= 1 - ADD_TRAIT(I, TRAIT_NODROP, GLUED_ITEM_TRAIT) + ADD_TRAIT(I, TRAIT_NODROP, TRAIT_GLUED_ITEM) I.desc += " It looks sticky." to_chat(user, span_notice("You smear the [I] with glue, making it incredibly sticky!")) if(uses == 0) diff --git a/modular_nova/modules/moretraitoritems/code/headset.dm b/modular_nova/modules/moretraitoritems/code/headset.dm new file mode 100644 index 00000000000000..90043c64e85524 --- /dev/null +++ b/modular_nova/modules/moretraitoritems/code/headset.dm @@ -0,0 +1,12 @@ +/obj/item/radio/headset/headset_cent/impostorsr + keyslot2 = null + +/obj/item/radio/headset/chameleon/advanced + special_desc = "A chameleon headset employed by the Symphionia in infiltration operations. \ + This particular model features flashbang protection, and the ability to amplify your volume." + command = TRUE + freerange = TRUE + +/obj/item/radio/headset/chameleon/advanced/Initialize(mapload) + . = ..() + AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS)) diff --git a/modular_skyrat/modules/moretraitoritems/code/pirate.dm b/modular_nova/modules/moretraitoritems/code/pirate.dm similarity index 93% rename from modular_skyrat/modules/moretraitoritems/code/pirate.dm rename to modular_nova/modules/moretraitoritems/code/pirate.dm index c3f2f2ea006d80..b11db59ab8ec43 100644 --- a/modular_skyrat/modules/moretraitoritems/code/pirate.dm +++ b/modular_nova/modules/moretraitoritems/code/pirate.dm @@ -25,11 +25,11 @@ . = ..() if(!(slot & ITEM_SLOT_OCLOTHING)) return - RegisterSignal(user, COMSIG_HUMAN_CHECK_SHIELDS, PROC_REF(armor_reaction)) + RegisterSignal(user, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(armor_reaction)) /obj/item/clothing/suit/jacket/det_suit/noir/heister/proc/armor_reaction(mob/living/carbon/human/owner, atom/movable/hitby, damage = 0, attack_text = "the attack", attack_type = MELEE_ATTACK, armour_penetration = 0) if(SEND_SIGNAL(src, COMSIG_ITEM_HIT_REACT, owner, hitby, attack_text, 0, damage, attack_type) & COMPONENT_HIT_REACTION_BLOCK) - return SHIELD_BLOCK + return SUCCESSFUL_BLOCK return NONE /obj/item/clothing/gloves/latex/nitrile/heister diff --git a/modular_skyrat/modules/moretraitoritems/code/smuggling_gear.dm b/modular_nova/modules/moretraitoritems/code/smuggling_gear.dm similarity index 100% rename from modular_skyrat/modules/moretraitoritems/code/smuggling_gear.dm rename to modular_nova/modules/moretraitoritems/code/smuggling_gear.dm diff --git a/modular_skyrat/modules/moretraitoritems/code/spawnergrenade.dm b/modular_nova/modules/moretraitoritems/code/spawnergrenade.dm similarity index 100% rename from modular_skyrat/modules/moretraitoritems/code/spawnergrenade.dm rename to modular_nova/modules/moretraitoritems/code/spawnergrenade.dm diff --git a/modular_nova/modules/moretraitoritems/code/syndicate.dm b/modular_nova/modules/moretraitoritems/code/syndicate.dm new file mode 100644 index 00000000000000..33a063c2a51c7d --- /dev/null +++ b/modular_nova/modules/moretraitoritems/code/syndicate.dm @@ -0,0 +1,260 @@ +/obj/item/uplink/old_radio + name = "old radio" + desc = "A dusty and old looking radio." + +/obj/item/uplink/old_radio/Initialize(mapload, owner, tc_amount = 0) + . = ..() + var/datum/component/uplink/hidden_uplink = GetComponent(/datum/component/uplink) + hidden_uplink.name = "old radio" + +//Unrestricted MODs +/obj/item/mod/control/pre_equipped/elite/unrestricted + req_access = null + +//Syndie wep charger kit +/obj/item/storage/box/syndie_kit/recharger + name = "boxed recharger kit" + desc = "A sleek, sturdy box used to hold all parts to build a weapons recharger." + icon_state = "syndiebox" + +/obj/item/storage/box/syndie_kit/recharger/PopulateContents() + new /obj/item/circuitboard/machine/recharger(src) + new /obj/item/stock_parts/capacitor/quadratic(src) + new /obj/item/stack/sheet/iron/five(src) + new /obj/item/stack/cable_coil/five(src) + new /obj/item/screwdriver/nuke(src) + new /obj/item/wrench(src) + +//Back-up space suit +/obj/item/storage/box/syndie_kit/space_suit + name = "boxed space suit and helmet" + desc = "A sleek, sturdy box used to hold an emergency spacesuit." + icon_state = "syndiebox" + illustration = "syndiesuit" + +/obj/item/storage/box/syndie_kit/space_suit/Initialize(mapload) + . = ..() + atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY + atom_storage.max_slots = 2 + atom_storage.set_holdable(list( + /obj/item/clothing/head/helmet/space/syndicate, + /obj/item/clothing/suit/space/syndicate, + )) + +/obj/item/storage/box/syndie_kit/space_suit/PopulateContents() + switch(pick(list("red", "green", "dgreen", "blue", "orange", "black"))) + if("green") + new /obj/item/clothing/head/helmet/space/syndicate/green(src) + new /obj/item/clothing/suit/space/syndicate/green(src) + if("dgreen") + new /obj/item/clothing/head/helmet/space/syndicate/green/dark(src) + new /obj/item/clothing/suit/space/syndicate/green/dark(src) + if("blue") + new /obj/item/clothing/head/helmet/space/syndicate/blue(src) + new /obj/item/clothing/suit/space/syndicate/blue(src) + if("red") + new /obj/item/clothing/head/helmet/space/syndicate(src) + new /obj/item/clothing/suit/space/syndicate(src) + if("orange") + new /obj/item/clothing/head/helmet/space/syndicate/orange(src) + new /obj/item/clothing/suit/space/syndicate/orange(src) + if("black") + new /obj/item/clothing/head/helmet/space/syndicate/black(src) + new /obj/item/clothing/suit/space/syndicate/black(src) + +//Spy +/obj/item/clothing/suit/jacket/det_suit/noir/armoured + armor_type = /datum/armor/heister + +/obj/item/clothing/head/frenchberet/armoured + armor_type = /datum/armor/cosmetic_sec + +/obj/item/clothing/under/suit/black/armoured + armor_type = /datum/armor/clothing_under/syndicate + +/obj/item/clothing/under/suit/black/skirt/armoured + armor_type = /datum/armor/clothing_under/syndicate + +/obj/item/storage/belt/holster/detective/dark + name = "dark leather holster" + icon_state = "syndicate_holster" + +//Robohand +/obj/item/storage/backpack/duffelbag/syndie/robohand/PopulateContents() + new /obj/item/gun/ballistic/automatic/pistol/robohand(src) + new /obj/item/ammo_box/magazine/m14mm(src) + new /obj/item/ammo_box/magazine/m14mm(src) + new /obj/item/ammo_box/magazine/m14mm(src) + new /obj/item/ammo_box/magazine/m14mm(src) + new /obj/item/storage/belt/military(src) + new /obj/item/clothing/under/pants/track/robohand(src) + new /obj/item/clothing/gloves/combat(src) + new /obj/item/clothing/shoes/combat(src) + new /obj/item/clothing/glasses/sunglasses/robohand(src) + new /obj/item/clothing/suit/jacket/trenchcoat/gunman(src) + new /obj/item/autosurgeon/bodypart/r_arm_robotic(src) + new /obj/item/autosurgeon/syndicate/esword_arm(src) + new /obj/item/autosurgeon/syndicate/nodrop(src) + + +/obj/item/storage/box/syndie_kit/gunman_outfit + name = "gunman clothing bundle" + desc = "A box filled with armored and stylish clothing for the aspiring gunmans." + +/obj/item/clothing/suit/jacket/trenchcoat/gunman + name = "leather overcoat" + desc = "An armored leather overcoat, intended as the go-to wear for any aspiring gunman." + body_parts_covered = CHEST|GROIN|ARMS + armor_type = /datum/armor/leather_gunman + +/datum/armor/leather_gunman + melee = 45 + bullet = 40 + laser = 40 + energy = 50 + bomb = 25 + fire = 50 + acid = 50 + wound = 10 + +/obj/item/clothing/under/pants/track/robohand + name = "badass pants" + desc = "Strangely firm yet soft black pants, these appear to have some armor padding for added protection." + armor_type = /datum/armor/clothing_under/robohand + +/datum/armor/clothing_under/robohand + melee = 20 + bullet = 20 + laser = 20 + energy = 20 + bomb = 20 + +/obj/item/clothing/glasses/sunglasses/robohand + name = "badass sunglasses" + desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks flashes. These ones seem to be bulletproof?" + body_parts_covered = HEAD //What do you mean glasses don't protect your head? Of course they do. Cyberpunk has flying cars(mostly intentional)! + armor_type = /datum/armor/sunglasses_robohand + +/datum/armor/sunglasses_robohand + melee = 20 + bullet = 60 + laser = 20 + energy = 20 + bomb = 20 + wound = 5 + +//More items +/obj/item/guardian_creator/tech/choose/traitor/opfor + allow_changeling = TRUE + +/obj/item/codeword_granter + name = "codeword manual" + desc = "A black manual with a red S lovingly inscribed on the cover by only the finest of presses from a factory." + icon = 'modular_nova/modules/opposing_force/icons/items.dmi' + icon_state = "codeword_book" + /// Number of charges the book has, limits the number of times it can be used. + var/charges = 1 + + +/obj/item/codeword_granter/attack_self(mob/living/user) + if(!isliving(user)) + return + + to_chat(user, span_boldannounce("You start skimming through [src], and feel suddenly imparted with the knowledge of the following code words:")) + + user.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_phrase_regex, "blue", src) + user.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_response_regex, "red", src) + to_chat(user, "<b>Code Phrases</b>: [jointext(GLOB.syndicate_code_phrase, ", ")]") + to_chat(user, "<b>Code Responses</b>: [span_red("[jointext(GLOB.syndicate_code_response, ", ")]")]") + + use_charge(user) + + +/obj/item/codeword_granter/attack(mob/living/attacked_mob, mob/living/user) + if(!istype(attacked_mob) || !istype(user)) + return + + if(attacked_mob == user) + attack_self(user) + return + + playsound(loc, SFX_PUNCH, 25, TRUE, -1) + + if(attacked_mob.stat == DEAD) + attacked_mob.visible_message(span_danger("[user] smacks [attacked_mob]'s lifeless corpse with [src]."), span_userdanger("[user] smacks your lifeless corpse with [src]."), span_hear("You hear smacking.")) + else + attacked_mob.visible_message(span_notice("[user] teaches [attacked_mob] by beating [attacked_mob.p_them()] over the head with [src]!"), span_boldnotice("As [user] hits you with [src], you feel suddenly imparted with the knowledge of some [span_red("specific words")]."), span_hear("You hear smacking.")) + attacked_mob.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_phrase_regex, "blue", src) + attacked_mob.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_response_regex, "red", src) + to_chat(attacked_mob, span_boldnotice("You feel suddenly imparted with the knowledge of the following code words:")) + to_chat(attacked_mob, "<b>Code Phrases</b>: [span_blue("[jointext(GLOB.syndicate_code_phrase, ", ")]")]") + to_chat(attacked_mob, "<b>Code Responses</b>: [span_red("[jointext(GLOB.syndicate_code_response, ", ")]")]") + use_charge(user) + + +/obj/item/codeword_granter/proc/use_charge(mob/user) + charges-- + + if(!charges) + var/turf/src_turf = get_turf(src) + src_turf.visible_message(span_warning("The cover and contents of [src] start shifting and changing! It slips out of your hands!")) + new /obj/item/book/manual/random(src_turf) + qdel(src) + + +/obj/item/antag_granter + icon = 'modular_nova/modules/opposing_force/icons/items.dmi' + /// What antag datum to give + var/antag_datum = /datum/antagonist/traitor + /// What to tell the user when they use the granter + var/user_message = "" + + +/obj/item/antag_granter/attack(mob/living/target_mob, mob/living/user, params) + . = ..() + + if(target_mob != user) // As long as you're attacking yourself it counts. + return + attack_self(user) + + +/obj/item/antag_granter/attack_self(mob/user, modifiers) + . = ..() + if(!isliving(user) || !user.mind) + return FALSE + + to_chat(user, span_notice(user_message)) + user.mind.add_antag_datum(antag_datum) + qdel(src) + return TRUE + +/obj/item/antag_granter/changeling + name = "viral injector" + desc = "A blue injector filled with some viscous, red substance. It has no markings apart from an orange warning stripe near the large needle." + icon_state = "changeling_injector" + antag_datum = /datum/antagonist/changeling + user_message = "As you inject the substance into yourself, you start to feel... <span class='red'><b>better</b></span>." + + +/obj/item/antag_granter/heretic + name = "strange book" + desc = "A purple book with a green eye on the cover. You swear it's looking at you...." + icon_state = "heretic_granter" + antag_datum = /datum/antagonist/heretic + user_message = "As you open the book, you see a great flash as <span class='hypnophrase'>the world becomes all the clearer for you</span>." + +/obj/item/antag_granter/clock_cultist + name = "brass contraption" + desc = "A cogwheel-shaped device of brass, with a glass lens floating, suspended in the center." + icon = 'modular_nova/modules/clock_cult/icons/clockwork_objects.dmi' + icon_state = "vanguard_cogwheel" + antag_datum = /datum/antagonist/clock_cultist/solo + user_message = "A whirring fills your ears as <span class='brass'>knowledge of His Eminence fills your mind</span>." + +/obj/item/antag_granter/clock_cultist/attack_self(mob/user, modifiers) + . = ..() + if(!.) + return FALSE + + var/obj/item/clockwork/clockwork_slab/slab = new + user.put_in_hands(slab, FALSE) diff --git a/modular_skyrat/modules/moretraitoritems/code/syndiemirror.dm b/modular_nova/modules/moretraitoritems/code/syndiemirror.dm similarity index 91% rename from modular_skyrat/modules/moretraitoritems/code/syndiemirror.dm rename to modular_nova/modules/moretraitoritems/code/syndiemirror.dm index 013ec5950f01b6..4f7a94664c9943 100644 --- a/modular_skyrat/modules/moretraitoritems/code/syndiemirror.dm +++ b/modular_nova/modules/moretraitoritems/code/syndiemirror.dm @@ -1,10 +1,10 @@ /obj/item/hhmirror/syndie name = "handheld mirror" desc = "A handheld mirror that allows you to change your looks. Reminds you of old times for some reason..." - icon = 'modular_skyrat/master_files/icons/obj/hhmirror.dmi' + icon = 'modular_nova/master_files/icons/obj/hhmirror.dmi' icon_state = "hhmirror" special_desc_requirement = EXAMINE_CHECK_SYNDICATE - special_desc = "A mirror manufactured by the Syndicate containing barber-nanites that can alter your hair on the spot. Target your head and use it on yourself to activate the nanites." + special_desc = "A mirror manufactured by the Symphionia containing barber-nanites that can alter your hair on the spot. Target your head and use it on yourself to activate the nanites." w_class = WEIGHT_CLASS_TINY // How long does it take to change someone's hairstyle? var/haircut_duration = 1 SECONDS diff --git a/modular_nova/modules/moretraitoritems/code/traitor_announcer.dm b/modular_nova/modules/moretraitoritems/code/traitor_announcer.dm new file mode 100644 index 00000000000000..83a3f13913c6aa --- /dev/null +++ b/modular_nova/modules/moretraitoritems/code/traitor_announcer.dm @@ -0,0 +1,65 @@ +#define INFINITE_CHARGES -1 + +/obj/item/device/traitor_announcer + name = "odd device" + desc = "Hmm... what is this for?" + special_desc_requirement = EXAMINE_CHECK_SYNDICATE + special_desc = "A remote that can be used to transmit a fake announcement of your own design." + icon = 'icons/obj/devices/scanner.dmi' + lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' + icon_state = "inspector" + worn_icon_state = "salestagger" + inhand_icon_state = "electronic" + ///How many uses does it have? -1 for infinite + var/uses = 1 + +/obj/item/device/traitor_announcer/attack_self(mob/living/user, modifiers) + . = ..() + //can we use this? + if(!isliving(user) || (uses == 0)) + balloon_alert(user, "no uses left!") + return + //build our announcement + var/origin = sanitize_text(reject_bad_text(tgui_input_text(user, "Who is announcing, or where is the announcement coming from?", "Announcement Origin", get_area_name(user), max_length = 28))) + if(!origin) + balloon_alert(user, "bad origin!") + return + var/audio_key = tgui_input_list(user, "Which announcement audio key should play? ('Intercept' is default)", "Announcement Audio", GLOB.announcer_keys, ANNOUNCER_INTERCEPT) + if(!audio_key) + balloon_alert(user, "bad audio!") + return + var/color = tgui_input_list(user, "Which color should the announcement be?", "Announcement Hue", ANNOUNCEMENT_COLORS, "default") + if(!color) + balloon_alert(user, "bad color!") + return + var/title = sanitize_text(reject_bad_text(tgui_input_text(user, "Choose the title of the announcement.", "Announcement Title", max_length = 42))) + if(!title) + balloon_alert(user, "bad title!") + return + var/input = sanitize_text(reject_bad_text(tgui_input_text(user, "Choose the bodytext of the announcement.", "Announcement Text", max_length = 512, multiline = TRUE))) + if(!input) + balloon_alert(user, "bad text!") + return + //treat voice + var/list/message_data = user.treat_message(input) + //send + priority_announce( + text = message_data["message"], + title = title, + sound = audio_key, + has_important_message = TRUE, + sender_override = origin, + color_override = color, + ) + if(uses != INFINITE_CHARGES) + uses-- + deadchat_broadcast(" made a fake priority announcement from [span_name("[get_area_name(usr, TRUE)]")].", span_name("[user.real_name]"), user, message_type=DEADCHAT_ANNOUNCEMENT) + user.log_talk("\[Message title\]: [title], \[Message\]: [input], \[Audio key\]: [audio_key]", LOG_TELECOMMS, tag = "priority announcement") + message_admins("[ADMIN_LOOKUPFLW(user)] has used [src] to make a fake announcement of [input].") + +// Adminbus +/obj/item/device/traitor_announcer/infinite + uses = -1 + +#undef INFINITE_CHARGES diff --git a/modular_skyrat/modules/moretraitoritems/code/uplink_kits.dm b/modular_nova/modules/moretraitoritems/code/uplink_kits.dm similarity index 100% rename from modular_skyrat/modules/moretraitoritems/code/uplink_kits.dm rename to modular_nova/modules/moretraitoritems/code/uplink_kits.dm diff --git a/modular_nova/modules/moretraitoritems/code/weapons.dm b/modular_nova/modules/moretraitoritems/code/weapons.dm new file mode 100644 index 00000000000000..f5498832f41da4 --- /dev/null +++ b/modular_nova/modules/moretraitoritems/code/weapons.dm @@ -0,0 +1,194 @@ +#define CALIBRE_14MM "14mm" + +/obj/item/gun/ballistic/revolver/ocelot + name = "Colt Peacemaker revolver" + desc = "A modified Peacemaker revolver that chambers .357 ammo. Less powerful than the regular .357, but ricochets a lot more." // We need tension...conflict. The world today has become too soft. We're living in an age where true feelings are suppressed. So we're going to shake things up a bit. We'll create a world dripping with tension... ...a world filled with greed and suspicion, bravery and cowardice. + // this could probably be made funnier by reducing its damage multiplier but also making it so that every fired bullet has the wacky ricochets + // but that's a different plate of cookies for a different glass of milk + icon_state = "c38_panther" + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/cylinder + +/obj/item/ammo_casing/a357/peacemaker + name = ".357 Peacemaker bullet casing" + desc = "A .357 Peacemaker bullet casing." + caliber = CALIBER_357 + projectile_type = /obj/projectile/bullet/a357/peacemaker + +/obj/projectile/bullet/a357/peacemaker + name = ".357 Peacemaker bullet" + damage = 25 + wound_bonus = 0 + ricochets_max = 6 + ricochet_chance = 200 + ricochet_auto_aim_angle = 50 + ricochet_auto_aim_range = 6 + ricochet_incidence_leeway = 80 + ricochet_decay_chance = 1 + +/datum/design/a357/peacemaker + name = "Speed Loader (.357 Peacemaker)" + id = "a357PM" + build_type = AUTOLATHE + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + ) + build_path = /obj/item/ammo_box/a357/peacemaker + category = list( + RND_CATEGORY_HACKED, + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, + ) + +/obj/item/ammo_box/a357/peacemaker + name = "speed loader (.357 Peacemaker)" + desc = "Designed to quickly reload revolvers." + icon_state = "357" + ammo_type = /obj/item/ammo_casing/a357/peacemaker + max_ammo = 7 + multiple_sprites = AMMO_BOX_PER_BULLET + item_flags = NO_MAT_REDEMPTION + + +/obj/item/clothing/head/hats/sus_bowler + name = "odd bowler" + desc = "A deep black bowler. Inside the hat, there is a sleek red S, with a smaller X insignia embroidered within. On closer inspection, the brim feels oddly weighted..." + icon_state = "bowler" + force = 10 + throwforce = 45 + throw_speed = 5 + throw_range = 9 + w_class = WEIGHT_CLASS_SMALL + armour_penetration = 30 //5 points less then a double esword! + sharpness = SHARP_POINTY + attack_verb_continuous = list("slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts") + attack_verb_simple = list("slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut") + +///obj/item/clothing/head/hats/sus_bowler/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + //var/caught = hit_atom.hitby(src, FALSE, FALSE, throwingdatum=throwingdatum) + //if(thrownby && !caught) + //addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/movable, throw_at), thrownby, throw_range+2, throw_speed, null, TRUE), 1) + //else + //return ..() + +///obj/item/clothing/head/hats/sus_bowler/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, force, gentle = FALSE, quickstart = TRUE) + //if(ishuman(thrower)) + //var/mob/living/carbon/human/I = thrower + //I.throw_mode_off(THROW_MODE_TOGGLE) //so they can catch it on the return. + //return ..() + + +/* +* Malorian Arms 3516 14MM +* If you have this, you're a badass. +*/ + +/obj/item/gun/ballistic/automatic/pistol/robohand + name = "Malorian Arms 3516" + desc = "The Malorian Arms 3516 is a 14mm heavy pistol, sporting a titanium frame and unique wooden grip. A custom Dyna-porting and \ + direct integral cyber-interlink means only someone with a cyberarm and smartgun link can take full advantage of the pistol's features." + icon = 'modular_nova/modules/moretraitoritems/icons/3516.dmi' + icon_state = "3516" + w_class = WEIGHT_CLASS_NORMAL + accepted_magazine_type = /obj/item/ammo_box/magazine/m14mm + can_suppress = FALSE + fire_sound = 'modular_nova/modules/moretraitoritems/sound/fire2.ogg' + load_sound = 'modular_nova/modules/moretraitoritems/sound/reload.ogg' + load_empty_sound = 'modular_nova/modules/moretraitoritems/sound/reload.ogg' + eject_sound = 'modular_nova/modules/moretraitoritems/sound/release.ogg' + eject_empty_sound = 'modular_nova/modules/moretraitoritems/sound/release.ogg' + vary_fire_sound = FALSE + rack_sound = 'modular_nova/modules/moretraitoritems/sound/slide.ogg' + fire_sound_volume = 100 + bolt_wording = "fuckin' slide" + var/unrestricted = FALSE + +/obj/item/gun/ballistic/automatic/pistol/robohand/unrestricted + unrestricted = TRUE + +//The gun cannot shoot if you do not have a cyborg arm. +/obj/item/gun/ballistic/automatic/pistol/robohand/afterattack(atom/target, mob/living/user, flag, params) + //This is where we are checking if the user has a cybernetic arm to USE the gun. ROBOHAND HAS A ROBO HAND + if(!unrestricted) + var/mob/living/carbon/human/human_user = user + var/obj/item/bodypart/selected_hand = human_user.get_active_hand() + if(IS_ORGANIC_LIMB(selected_hand)) + to_chat(user, span_warning("You can't seem to figure out how to use [src], perhaps you need to check the manual?")) + return + . = ..() + +/obj/item/gun/ballistic/automatic/pistol/robohand/insert_magazine(mob/user, obj/item/ammo_box/magazine/inserted_mag, display_message) + if(!istype(inserted_mag, accepted_magazine_type)) + to_chat(user, span_warning("\The [inserted_mag] doesn't seem to fit into \the [src]...")) + return FALSE + if(!user.transferItemToLoc(inserted_mag, src)) + to_chat(user, span_warning("You cannot seem to get \the [src] out of your hands!")) + return FALSE + magazine = inserted_mag + if(display_message) + to_chat(user, span_notice("You load a new [magazine_wording] into \the [src].")) + playsound(src, load_empty_sound, load_sound_volume, load_sound_vary) + if(bolt_type == BOLT_TYPE_OPEN && !bolt_locked) + chamber_round(TRUE) + drop_bolt(user) + update_appearance() + animate(src, 0.2 SECONDS, 1, transform = turn(matrix(), 120)) //Le johnny robohand woosh woosh twirl + animate(time = 0.2 SECONDS, transform = turn(matrix(), 240)) + animate(time = 0.2 SECONDS, transform = null) + return TRUE + +/obj/item/gun/ballistic/automatic/pistol/robohand/eject_magazine(mob/user, display_message, obj/item/ammo_box/magazine/tac_load) + if(bolt_type == BOLT_TYPE_OPEN) + chambered = null + if(magazine.ammo_count()) + playsound(src, eject_sound, eject_sound_volume, eject_sound_volume) //This is why we've copied this proc, it should play the eject sound when ejecting. + else + playsound(src, eject_empty_sound, eject_sound_volume, eject_sound_volume) + magazine.forceMove(drop_location()) + var/obj/item/ammo_box/magazine/old_mag = magazine + if(tac_load) + if (insert_magazine(user, tac_load, FALSE)) + to_chat(user, span_notice("You perform an elite tactical reload on \the [src].")) + else + to_chat(user, span_warning("You dropped the old [magazine_wording], but the new one doesn't fit. How embarassing.")) + magazine = null + else + magazine = null + user.put_in_hands(old_mag) + old_mag.update_appearance() + if(display_message) + to_chat(user, span_notice("You pull the [magazine_wording] out of \the [src].")) + update_appearance() + animate(src, transform = turn(matrix(), 120), time = 0.2 SECONDS, loop = 1) //Le johnny robohand again + animate(transform = turn(matrix(), 240), time = 0.2 SECONDS) + animate(transform = null, time = 0.2 SECONDS) + +//Magazine stuff +/obj/item/ammo_box/magazine/m14mm + name = "pistol magazine (14mm)" + icon = 'modular_nova/modules/moretraitoritems/icons/3516_mag.dmi' + icon_state = "14mm" + base_icon_state = "14mm" + ammo_type = /obj/item/ammo_casing/c14mm + caliber = CALIBRE_14MM + max_ammo = 10 + multiple_sprites = AMMO_BOX_FULL_EMPTY + +/obj/item/ammo_casing/c14mm + name = "14mm bullet casing" + desc = "A 14mm bullet casing. Badass." + caliber = CALIBRE_14MM + projectile_type = /obj/projectile/bullet/c14mm + +/obj/projectile/bullet/c14mm + name = "14mm bullet" + damage = 60 + embedding = list(embed_chance = 90, fall_chance = 3, jostle_chance = 4, ignore_throwspeed_threshold = TRUE, pain_stam_pct = 0.4, pain_mult = 5, jostle_pain_mult = 9, rip_time = 10) + dismemberment = 50 + pierces = 1 + projectile_piercing = PASSCLOSEDTURF|PASSGRILLE|PASSGLASS + +//nullrod katana +/obj/item/katana/weak/curator //This has the same stats as the curator's claymore + desc = "An ancient Katana. Forged by... Well, it doesn't really say, but surely it's authentic! And sharp to boot!" + force = 15 + block_chance = 30 + armour_penetration = 5 diff --git a/modular_skyrat/modules/moretraitoritems/icons/3516.dmi b/modular_nova/modules/moretraitoritems/icons/3516.dmi similarity index 100% rename from modular_skyrat/modules/moretraitoritems/icons/3516.dmi rename to modular_nova/modules/moretraitoritems/icons/3516.dmi diff --git a/modular_skyrat/modules/moretraitoritems/icons/3516_mag.dmi b/modular_nova/modules/moretraitoritems/icons/3516_mag.dmi similarity index 100% rename from modular_skyrat/modules/moretraitoritems/icons/3516_mag.dmi rename to modular_nova/modules/moretraitoritems/icons/3516_mag.dmi diff --git a/modular_skyrat/modules/moretraitoritems/icons/alien.dmi b/modular_nova/modules/moretraitoritems/icons/alien.dmi similarity index 100% rename from modular_skyrat/modules/moretraitoritems/icons/alien.dmi rename to modular_nova/modules/moretraitoritems/icons/alien.dmi diff --git a/modular_skyrat/modules/moretraitoritems/readme.md b/modular_nova/modules/moretraitoritems/readme.md similarity index 100% rename from modular_skyrat/modules/moretraitoritems/readme.md rename to modular_nova/modules/moretraitoritems/readme.md diff --git a/modular_skyrat/modules/moretraitoritems/sound/fire.ogg b/modular_nova/modules/moretraitoritems/sound/fire.ogg similarity index 100% rename from modular_skyrat/modules/moretraitoritems/sound/fire.ogg rename to modular_nova/modules/moretraitoritems/sound/fire.ogg diff --git a/modular_skyrat/modules/moretraitoritems/sound/fire2.ogg b/modular_nova/modules/moretraitoritems/sound/fire2.ogg similarity index 100% rename from modular_skyrat/modules/moretraitoritems/sound/fire2.ogg rename to modular_nova/modules/moretraitoritems/sound/fire2.ogg diff --git a/modular_skyrat/modules/moretraitoritems/sound/release.ogg b/modular_nova/modules/moretraitoritems/sound/release.ogg similarity index 100% rename from modular_skyrat/modules/moretraitoritems/sound/release.ogg rename to modular_nova/modules/moretraitoritems/sound/release.ogg diff --git a/modular_skyrat/modules/moretraitoritems/sound/reload.ogg b/modular_nova/modules/moretraitoritems/sound/reload.ogg similarity index 100% rename from modular_skyrat/modules/moretraitoritems/sound/reload.ogg rename to modular_nova/modules/moretraitoritems/sound/reload.ogg diff --git a/modular_skyrat/modules/moretraitoritems/sound/slide.ogg b/modular_nova/modules/moretraitoritems/sound/slide.ogg similarity index 100% rename from modular_skyrat/modules/moretraitoritems/sound/slide.ogg rename to modular_nova/modules/moretraitoritems/sound/slide.ogg diff --git a/modular_skyrat/modules/moretraitoritems/sound/wakeup.ogg b/modular_nova/modules/moretraitoritems/sound/wakeup.ogg similarity index 100% rename from modular_skyrat/modules/moretraitoritems/sound/wakeup.ogg rename to modular_nova/modules/moretraitoritems/sound/wakeup.ogg diff --git a/modular_skyrat/modules/morewizardstuffs/spellbook.dm b/modular_nova/modules/morewizardstuffs/spellbook.dm similarity index 100% rename from modular_skyrat/modules/morewizardstuffs/spellbook.dm rename to modular_nova/modules/morewizardstuffs/spellbook.dm diff --git a/modular_skyrat/modules/morewizardstuffs/spells/bloodcrawl_potion.dm b/modular_nova/modules/morewizardstuffs/spells/bloodcrawl_potion.dm similarity index 98% rename from modular_skyrat/modules/morewizardstuffs/spells/bloodcrawl_potion.dm rename to modular_nova/modules/morewizardstuffs/spells/bloodcrawl_potion.dm index d3164d93360770..e48d95d9789e37 100644 --- a/modular_skyrat/modules/morewizardstuffs/spells/bloodcrawl_potion.dm +++ b/modular_nova/modules/morewizardstuffs/spells/bloodcrawl_potion.dm @@ -6,7 +6,7 @@ /obj/item/bloodcrawl_bottle/attack_self(mob/user) to_chat(user, span_notice("You drink the contents of [src].")) - var/datum/action/cooldown/spell/jaunt/bloodcrawl/new_spell = new () + var/datum/action/cooldown/spell/jaunt/bloodcrawl/new_spell = new(user) new_spell.Grant(user) user.log_message("learned the spell bloodcrawl ([new_spell])", LOG_ATTACK, color="orange") qdel(src) diff --git a/modular_skyrat/modules/morewizardstuffs/spells/magical_stimpack.dm b/modular_nova/modules/morewizardstuffs/spells/magical_stimpack.dm similarity index 100% rename from modular_skyrat/modules/morewizardstuffs/spells/magical_stimpack.dm rename to modular_nova/modules/morewizardstuffs/spells/magical_stimpack.dm diff --git a/modular_nova/modules/mounted_machine_gun/code/ammobox.dm b/modular_nova/modules/mounted_machine_gun/code/ammobox.dm new file mode 100644 index 00000000000000..e00f44e2af57cd --- /dev/null +++ b/modular_nova/modules/mounted_machine_gun/code/ammobox.dm @@ -0,0 +1,22 @@ +/obj/item/ammo_box/magazine/mmg_box + name = "\improper .50 BMG ammo box" + desc = "A big box full of beltfed ammo." + icon = 'modular_nova/modules/mounted_machine_gun/icons/turret_objects.dmi' + icon_state = "ammobox" + multiple_sprites = AMMO_BOX_FULL_EMPTY + max_ammo = 150 + ammo_type = /obj/item/ammo_casing/b50cal + caliber = CALIBER_50BMG + +/obj/item/ammo_casing/b50cal + name = ".50 BMG bullet casing" + icon_state = ".50" + caliber = CALIBER_50BMG + projectile_type = /obj/projectile/bullet/c50cal + +/obj/projectile/bullet/c50cal + name = ".50 BMG bullet" + damage = 40 + wound_bonus = 60 + armour_penetration = 20 + icon_state = "redtrac" diff --git a/modular_skyrat/modules/mounted_machine_gun/code/mounted_machine_gun.dm b/modular_nova/modules/mounted_machine_gun/code/mounted_machine_gun.dm similarity index 94% rename from modular_skyrat/modules/mounted_machine_gun/code/mounted_machine_gun.dm rename to modular_nova/modules/mounted_machine_gun/code/mounted_machine_gun.dm index a1b7b1593368e3..fa9b4c1ae8c430 100644 --- a/modular_skyrat/modules/mounted_machine_gun/code/mounted_machine_gun.dm +++ b/modular_nova/modules/mounted_machine_gun/code/mounted_machine_gun.dm @@ -5,7 +5,7 @@ /obj/machinery/mounted_machine_gun name = "\improper T90 Mounted Machine Gun" desc = "A high calibre mounted machine gun capable of laying down copious amounts of suppressive fire." - icon = 'modular_skyrat/modules/mounted_machine_gun/icons/turret.dmi' + icon = 'modular_nova/modules/mounted_machine_gun/icons/turret.dmi' icon_state = "mmg" base_icon_state = "mmg" can_buckle = TRUE @@ -15,13 +15,12 @@ buckle_lying = 0 SET_BASE_PIXEL(-8, -8) layer = ABOVE_MOB_LAYER - plane = GAME_PLANE_UPPER /// The extra range that this turret gives regarding viewrange. var/view_range = 2.5 /// Sound to play when overheated - var/overheatsound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/mg_overheat.ogg' + var/overheatsound = 'sound/effects/wounds/sizzle2.ogg' /// Sound to play when firing - var/firesound = 'modular_skyrat/modules/mounted_machine_gun/sound/50cal_box_01.ogg' + var/firesound = 'modular_nova/modules/mounted_machine_gun/sound/50cal_box_01.ogg' /// How long it takes for a wrench user to undeploy the object var/undeploy_time = 3 SECONDS /// Our currently loaded ammo box. @@ -164,7 +163,6 @@ register_user(user_to_buckle) layer = ABOVE_MOB_LAYER - plane = GAME_PLANE_UPPER setDir(SOUTH) playsound(src,'sound/mecha/mechmove01.ogg', 50, TRUE) set_anchored(TRUE) @@ -199,21 +197,21 @@ return ammo_box = weapon weapon.forceMove(src) - playsound(src, 'modular_skyrat/modules/mounted_machine_gun/sound/insert_ammobox.ogg', 100) + playsound(src, 'modular_nova/modules/mounted_machine_gun/sound/insert_ammobox.ogg', 100) balloon_alert("ammo box inserted!") /obj/machinery/mounted_machine_gun/proc/remove_ammo_box(mob/living/user) ammo_box.forceMove(drop_location()) user.put_in_hands(ammo_box) ammo_box = null - playsound(src, 'modular_skyrat/modules/mounted_machine_gun/sound/remove_ammobox.ogg', 100) + playsound(src, 'modular_nova/modules/mounted_machine_gun/sound/remove_ammobox.ogg', 100) balloon_alert(user, "ammo box removed!") update_appearance() /obj/machinery/mounted_machine_gun/proc/toggle_cover(mob/user) cover_open = !cover_open balloon_alert(user, "cover [cover_open ? "opened" : "closed"]!") - playsound(src, cover_open ? 'modular_skyrat/modules/mounted_machine_gun/sound/open_lid.ogg' : 'modular_skyrat/modules/mounted_machine_gun/sound/close_lid.ogg', 100) + playsound(src, cover_open ? 'modular_nova/modules/mounted_machine_gun/sound/open_lid.ogg' : 'modular_nova/modules/mounted_machine_gun/sound/close_lid.ogg', 100) /// Registers all the required signals and sets up the client to work with the turret. /obj/machinery/mounted_machine_gun/proc/register_user(mob/living/user_to_buckle) @@ -378,7 +376,7 @@ if(bolt) return bolt = TRUE - playsound(src, 'modular_skyrat/modules/mounted_machine_gun/sound/cock_bolt.ogg', 100) + playsound(src, 'modular_nova/modules/mounted_machine_gun/sound/cock_bolt.ogg', 100) /obj/machinery/mounted_machine_gun/proc/check_click_modifiers(modifiers) if(LAZYACCESS(modifiers, SHIFT_CLICK)) @@ -423,7 +421,6 @@ user.pixel_y = -8 if(EAST) layer = ABOVE_MOB_LAYER - plane = GAME_PLANE_UPPER user.pixel_x = -22 user.pixel_y = 0 if(SOUTHEAST) @@ -433,7 +430,6 @@ user.pixel_y = 14 if(SOUTH) layer = ABOVE_MOB_LAYER - plane = GAME_PLANE_UPPER user.pixel_x = 0 user.pixel_y = 22 if(SOUTHWEST) @@ -443,7 +439,6 @@ user.pixel_y = 14 if(WEST) layer = ABOVE_MOB_LAYER - plane = GAME_PLANE_UPPER user.pixel_x = 22 user.pixel_y = 0 if(NORTHWEST) @@ -455,7 +450,7 @@ /obj/item/mounted_machine_gun_folded name = "\improper folded T-90 mounted machine gun" desc = "A folded and unloaded mounted machine gun, ready to be deployed and used." - icon = 'modular_skyrat/modules/mounted_machine_gun/icons/turret_objects.dmi' + icon = 'modular_nova/modules/mounted_machine_gun/icons/turret_objects.dmi' icon_state = "folded_hmg" max_integrity = 250 w_class = WEIGHT_CLASS_BULKY diff --git a/modular_skyrat/modules/mounted_machine_gun/icons/turret.dmi b/modular_nova/modules/mounted_machine_gun/icons/turret.dmi similarity index 100% rename from modular_skyrat/modules/mounted_machine_gun/icons/turret.dmi rename to modular_nova/modules/mounted_machine_gun/icons/turret.dmi diff --git a/modular_skyrat/modules/mounted_machine_gun/icons/turret_objects.dmi b/modular_nova/modules/mounted_machine_gun/icons/turret_objects.dmi similarity index 100% rename from modular_skyrat/modules/mounted_machine_gun/icons/turret_objects.dmi rename to modular_nova/modules/mounted_machine_gun/icons/turret_objects.dmi diff --git a/modular_skyrat/modules/mounted_machine_gun/sound/50cal_box_01.ogg b/modular_nova/modules/mounted_machine_gun/sound/50cal_box_01.ogg similarity index 100% rename from modular_skyrat/modules/mounted_machine_gun/sound/50cal_box_01.ogg rename to modular_nova/modules/mounted_machine_gun/sound/50cal_box_01.ogg diff --git a/modular_skyrat/modules/mounted_machine_gun/sound/close_lid.ogg b/modular_nova/modules/mounted_machine_gun/sound/close_lid.ogg similarity index 100% rename from modular_skyrat/modules/mounted_machine_gun/sound/close_lid.ogg rename to modular_nova/modules/mounted_machine_gun/sound/close_lid.ogg diff --git a/modular_skyrat/modules/mounted_machine_gun/sound/cock_bolt.ogg b/modular_nova/modules/mounted_machine_gun/sound/cock_bolt.ogg similarity index 100% rename from modular_skyrat/modules/mounted_machine_gun/sound/cock_bolt.ogg rename to modular_nova/modules/mounted_machine_gun/sound/cock_bolt.ogg diff --git a/modular_skyrat/modules/mounted_machine_gun/sound/insert_ammobox.ogg b/modular_nova/modules/mounted_machine_gun/sound/insert_ammobox.ogg similarity index 100% rename from modular_skyrat/modules/mounted_machine_gun/sound/insert_ammobox.ogg rename to modular_nova/modules/mounted_machine_gun/sound/insert_ammobox.ogg diff --git a/modular_skyrat/modules/mounted_machine_gun/sound/open_lid.ogg b/modular_nova/modules/mounted_machine_gun/sound/open_lid.ogg similarity index 100% rename from modular_skyrat/modules/mounted_machine_gun/sound/open_lid.ogg rename to modular_nova/modules/mounted_machine_gun/sound/open_lid.ogg diff --git a/modular_skyrat/modules/mounted_machine_gun/sound/remove_ammobox.ogg b/modular_nova/modules/mounted_machine_gun/sound/remove_ammobox.ogg similarity index 100% rename from modular_skyrat/modules/mounted_machine_gun/sound/remove_ammobox.ogg rename to modular_nova/modules/mounted_machine_gun/sound/remove_ammobox.ogg diff --git a/modular_skyrat/modules/multicellcharger/code/multi_cell_charger.dm b/modular_nova/modules/multicellcharger/code/multi_cell_charger.dm similarity index 99% rename from modular_skyrat/modules/multicellcharger/code/multi_cell_charger.dm rename to modular_nova/modules/multicellcharger/code/multi_cell_charger.dm index 6f1aa8383ab152..fc984e7aa97ac2 100644 --- a/modular_skyrat/modules/multicellcharger/code/multi_cell_charger.dm +++ b/modular_nova/modules/multicellcharger/code/multi_cell_charger.dm @@ -1,7 +1,7 @@ /obj/machinery/cell_charger_multi name = "multi-cell charging rack" desc = "A cell charging rack for multiple batteries." - icon = 'modular_skyrat/modules/aesthetics/cells/cell.dmi' + icon = 'modular_nova/modules/aesthetics/cells/cell.dmi' icon_state = "cchargermulti" base_icon_state = "cchargermulti" use_power = IDLE_POWER_USE diff --git a/modular_skyrat/modules/multiserver/code/config_entry.dm b/modular_nova/modules/multiserver/code/config_entry.dm similarity index 100% rename from modular_skyrat/modules/multiserver/code/config_entry.dm rename to modular_nova/modules/multiserver/code/config_entry.dm diff --git a/modular_skyrat/modules/multiserver/readme.md b/modular_nova/modules/multiserver/readme.md similarity index 100% rename from modular_skyrat/modules/multiserver/readme.md rename to modular_nova/modules/multiserver/readme.md diff --git a/modular_skyrat/modules/mutants/code/mutant_antag_datum.dm b/modular_nova/modules/mutants/code/mutant_antag_datum.dm similarity index 92% rename from modular_skyrat/modules/mutants/code/mutant_antag_datum.dm rename to modular_nova/modules/mutants/code/mutant_antag_datum.dm index acfc5de68831dc..7441991b5a4777 100644 --- a/modular_skyrat/modules/mutants/code/mutant_antag_datum.dm +++ b/modular_nova/modules/mutants/code/mutant_antag_datum.dm @@ -5,7 +5,7 @@ antagpanel_category = "Mutant" show_in_antagpanel = TRUE antag_hud_name = "mutant" - hud_icon = 'modular_skyrat/modules/mutants/icons/antag_hud.dmi' + hud_icon = 'modular_nova/modules/mutants/icons/antag_hud.dmi' antag_memory = "You are a mutated abomination. You yearn for flesh. Your mind is torn apart, you do not remember who you are. \ All you know is that you want to kill. \ You retain some capability to reason. \ diff --git a/modular_skyrat/modules/mutants/code/mutant_component.dm b/modular_nova/modules/mutants/code/mutant_component.dm similarity index 96% rename from modular_skyrat/modules/mutants/code/mutant_component.dm rename to modular_nova/modules/mutants/code/mutant_component.dm index 4e78065eb3703b..025efeff998dec 100644 --- a/modular_skyrat/modules/mutants/code/mutant_component.dm +++ b/modular_nova/modules/mutants/code/mutant_component.dm @@ -50,7 +50,7 @@ START_PROCESSING(SSobj, src) -/datum/component/mutant_infection/Destroy(force, silent) +/datum/component/mutant_infection/Destroy(force) STOP_PROCESSING(SSobj, src) UnregisterSignal(parent, list(COMSIG_MUTANT_CURED, COMSIG_LIVING_DEATH)) if(timer_id) @@ -156,7 +156,11 @@ /datum/component/mutant_infection/proc/regenerate() if(!host.mind) - var/list/candidates = poll_candidates_for_mob("Do you want to play as a mutant([host.name])?", target_mob = host) + var/list/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to play as a mutant([host.name])?", + target_mob = host, + pic_source = host, + role_name_text = "mutant [host.name]", + ) if(!candidates.len) return var/client/C = pick_n_take(candidates) diff --git a/modular_skyrat/modules/mutants/code/mutant_cure.dm b/modular_nova/modules/mutants/code/mutant_cure.dm similarity index 91% rename from modular_skyrat/modules/mutants/code/mutant_cure.dm rename to modular_nova/modules/mutants/code/mutant_cure.dm index 1766ef5634dd99..a43d63fc87c7fa 100644 --- a/modular_skyrat/modules/mutants/code/mutant_cure.dm +++ b/modular_nova/modules/mutants/code/mutant_cure.dm @@ -1,9 +1,14 @@ /obj/item/rna_extractor name = "advanced virus RNA extractor" desc = "A tool used to extract the RNA from viruses. Apply to skin." - icon = 'modular_skyrat/modules/mutants/icons/extractor.dmi' + icon = 'modular_nova/modules/mutants/icons/extractor.dmi' icon_state = "extractor" - custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, /datum/material/gold = SHEET_MATERIAL_AMOUNT, /datum/material/uranium = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT) + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/gold = SHEET_MATERIAL_AMOUNT, + /datum/material/uranium = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + ) /// Our loaded vial. var/obj/item/rna_vial/loaded_vial @@ -82,9 +87,13 @@ /obj/item/rna_vial name = "raw RNA vial" desc = "A glass vial containing raw virus RNA. Slot this into the combinator to upload the sample." - icon = 'modular_skyrat/modules/mutants/icons/extractor.dmi' + icon = 'modular_nova/modules/mutants/icons/extractor.dmi' icon_state = "rnavial" - custom_materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = SHEET_MATERIAL_AMOUNT, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT) + custom_materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) var/contains_rna = FALSE /obj/item/rna_vial/proc/load_rna(mob/living/carbon/human/H) @@ -104,7 +113,7 @@ /obj/item/hnz_cure name = "HNZ-1 cure vial" desc = "A counter to the HNZ-1 virus, used to rapidly reverse the effects of the virus." - icon = 'modular_skyrat/modules/mutants/icons/extractor.dmi' + icon = 'modular_nova/modules/mutants/icons/extractor.dmi' icon_state = "tvirus_cure" var/used = FALSE @@ -145,7 +154,7 @@ /obj/machinery/rnd/rna_recombinator name = "RNA recombinator" desc = "This machine is used to recombine RNA sequences from extracted vials of raw virus." - icon = 'modular_skyrat/modules/mutants/icons/cure_machine.dmi' + icon = 'modular_nova/modules/mutants/icons/cure_machine.dmi' icon_state = "h_lathe" base_icon_state = "h_lathe" density = TRUE @@ -163,17 +172,17 @@ timer_id = null . = ..() -/obj/machinery/rnd/rna_recombinator/Insert_Item(obj/item/O, mob/living/user) +/obj/machinery/rnd/rna_recombinator/attackby(obj/item/weapon, mob/living/user, params) if(user.combat_mode) return FALSE if(!is_insertion_ready(user)) return FALSE - if(!istype(O, /obj/item/rna_vial)) + if(!istype(weapon, /obj/item/rna_vial)) return FALSE - if(!user.transferItemToLoc(O, src)) + if(!user.transferItemToLoc(weapon, src)) return FALSE - loaded_item = O - to_chat(user, span_notice("You insert [O] to into [src] reciprocal.")) + loaded_item = weapon + to_chat(user, span_notice("You insert [weapon] to into [src] reciprocal.")) flick("h_lathe_load", src) update_appearance() playsound(loc, 'sound/weapons/autoguninsert.ogg', 35, 1) @@ -346,10 +355,12 @@ /obj/item/reagent_containers/cup/bottle/hnz name = "HNZ-1 bottle" desc = "A small bottle of the HNZ-1 pathogen. Nanotrasen Bioweapons inc." - icon = 'modular_skyrat/modules/mutants/icons/extractor.dmi' + icon = 'modular_nova/modules/mutants/icons/extractor.dmi' icon_state = "tvirus_infector" list_reagents = list(/datum/reagent/hnz = 30) - custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT * 5) + custom_materials = list( + /datum/material/glass=HALF_SHEET_MATERIAL_AMOUNT, + ) /obj/item/reagent_containers/cup/bottle/hnz/one list_reagents = list(/datum/reagent/hnz = 1) diff --git a/modular_skyrat/modules/mutants/code/mutant_event.dm b/modular_nova/modules/mutants/code/mutant_event.dm similarity index 86% rename from modular_skyrat/modules/mutants/code/mutant_event.dm rename to modular_nova/modules/mutants/code/mutant_event.dm index d6b191a7e1e0e5..06d867b831b9ac 100644 --- a/modular_skyrat/modules/mutants/code/mutant_event.dm +++ b/modular_nova/modules/mutants/code/mutant_event.dm @@ -24,8 +24,10 @@ break if(try_to_mutant_infect(iterating_human, TRUE)) infectees++ - notify_ghosts("[iterating_human] has been infected by the HNZ-1 pathogen!", source = iterating_human) + notify_ghosts("[iterating_human] has been infected by the HNZ-1 pathogen!", + source = iterating_human, + ) /datum/round_event/mutant_infestation/announce(fake) - alert_sound_to_playing(sound('modular_skyrat/modules/alerts/sound/alerts/alert2.ogg'), override_volume = TRUE) + alert_sound_to_playing(sound('modular_nova/modules/alerts/sound/alerts/alert2.ogg'), override_volume = TRUE) priority_announce("Automated air filtration screeing systems have flagged an unknown pathogen in the ventilation systems, quarantine is in effect.", "Level-1 Viral Biohazard Alert", ANNOUNCER_MUTANTS) diff --git a/modular_skyrat/modules/mutants/code/mutant_species.dm b/modular_nova/modules/mutants/code/mutant_species.dm similarity index 94% rename from modular_skyrat/modules/mutants/code/mutant_species.dm rename to modular_nova/modules/mutants/code/mutant_species.dm index d61e0367421767..7606c93bef529b 100644 --- a/modular_skyrat/modules/mutants/code/mutant_species.dm +++ b/modular_nova/modules/mutants/code/mutant_species.dm @@ -4,7 +4,7 @@ name = "High-Functioning mutant" id = SPECIES_MUTANT meat = /obj/item/food/meat/slab/human/mutant/zombie - eyes_icon = 'modular_skyrat/modules/mutants/icons/mutant_eyes.dmi' + eyes_icon = 'modular_nova/modules/mutants/icons/mutant_eyes.dmi' inherent_traits = list( TRAIT_NOBLOOD, TRAIT_NODISMEMBER, @@ -17,7 +17,6 @@ TRAIT_RADIMMUNE, TRAIT_LIMBATTACHMENT, TRAIT_NOBREATH, - TRAIT_NOCLONELOSS, TRAIT_NO_ZOMBIFY, ) inherent_biotypes = MOB_UNDEAD | MOB_HUMANOID @@ -185,8 +184,8 @@ icon = 'icons/effects/blood.dmi' icon_state = "bloodhand_left" inhand_icon_state = "mutant" - lefthand_file = 'modular_skyrat/modules/mutants/icons/mutant_hand_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/mutants/icons/mutant_hand_righthand.dmi' + lefthand_file = 'modular_nova/modules/mutants/icons/mutant_hand_lefthand.dmi' + righthand_file = 'modular_nova/modules/mutants/icons/mutant_hand_righthand.dmi' hitsound = 'sound/hallucinations/growl1.ogg' force = 26 sharpness = SHARP_EDGED @@ -266,10 +265,11 @@ target.investigate_log("has been feasted upon by the mutant [user].", INVESTIGATE_DEATHS) target.gib() // zero as argument for no instant health update - user.adjustBruteLoss(-hp_gained, 0) - user.adjustToxLoss(-hp_gained, 0) - user.adjustFireLoss(-hp_gained, 0) - user.adjustCloneLoss(-hp_gained, 0) - user.updatehealth() + var/need_health_update + need_health_update += user.adjustBruteLoss(-hp_gained, updating_health = FALSE) + need_health_update += user.adjustToxLoss(-hp_gained, updating_health = FALSE) + need_health_update += user.adjustFireLoss(-hp_gained, updating_health = FALSE) + if(need_health_update) + user.updatehealth() user.adjustOrganLoss(ORGAN_SLOT_BRAIN, -hp_gained) // Zom Bee gibbers "BRAAAAISNSs!1!" user.set_nutrition(min(user.nutrition + hp_gained, NUTRITION_LEVEL_FULL)) diff --git a/modular_nova/modules/mutants/code/mutant_techweb.dm b/modular_nova/modules/mutants/code/mutant_techweb.dm new file mode 100644 index 00000000000000..9023f94866ebd3 --- /dev/null +++ b/modular_nova/modules/mutants/code/mutant_techweb.dm @@ -0,0 +1,60 @@ +/obj/item/circuitboard/machine/rna_recombinator + name = "RNA Recombinator (Machine Board)" + greyscale_colors = CIRCUIT_COLOR_SCIENCE + build_path = /obj/machinery/rnd/rna_recombinator + req_components = list( + /datum/stock_part/scanning_module = 1, + /datum/stock_part/servo = 2, + /datum/stock_part/micro_laser = 2, + ) + +/datum/techweb_node/mutanttech + id = "mutanttech" + display_name = "Advanced Symphionia Viral Bioweapons Technology" + description = "Research devices from the Symphionia viral bioweapons division! Got a virus problem? This'll save your day." + prereq_ids = list("adv_engi", "adv_biotech") + design_ids = list("rna_vial", "rna_extractor", "rna_recombinator") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000) + +/datum/design/rna_vial + name = "Empty RNA vial" + desc = "An empty RNA vial for storing genetic information." + id = "rna_vial" + build_type = PROTOLATHE + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/rna_vial + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL + RND_SUBCATEGORY_EQUIPMENT_SCIENCE, + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/rna_extractor + name = "RNA Extractor Device" + desc = "An RNA extraction device, use this on any subect you'd like to extract RNA data from, needs RNA vials to work." + id = "rna_extractor" + build_type = PROTOLATHE + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/uranium = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/rna_extractor + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL + RND_SUBCATEGORY_EQUIPMENT_SCIENCE, + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/board/rna_recombinator + name = "Machine Design (RNA Recombinator)" + desc = "The MRNA Recombinator is one of Nanotrasens most advanced technologies and allows the exact recombination of virus RNA." + id = "rna_recombinator" + build_path = /obj/item/circuitboard/machine/rna_recombinator + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_RESEARCH, + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_MEDICAL diff --git a/modular_nova/modules/mutants/code/mutant_zombie_bodyparts.dm b/modular_nova/modules/mutants/code/mutant_zombie_bodyparts.dm new file mode 100644 index 00000000000000..879d9ba12e3836 --- /dev/null +++ b/modular_nova/modules/mutants/code/mutant_zombie_bodyparts.dm @@ -0,0 +1,53 @@ +// mutant_zombie! +/obj/item/bodypart/head/mutant_zombie + icon_greyscale = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi' + icon = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi' + icon_static = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi' + icon_state = "mutant_head" + is_dimorphic = FALSE + limb_id = SPECIES_MUTANT + species_color = "#ffffff" + head_flags = HEAD_HAIR|HEAD_LIPS|HEAD_DEBRAIN + +/obj/item/bodypart/chest/mutant_zombie + icon_greyscale = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi' + icon = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi' + icon_static = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi' + limb_id = SPECIES_MUTANT + icon_state = "mutant_chest" + is_dimorphic = FALSE + should_draw_greyscale = FALSE + +/obj/item/bodypart/arm/left/mutant_zombie + icon_greyscale = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi' + icon = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi' + icon_static = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi' + limb_id = SPECIES_MUTANT + icon_state = "mutant_l_arm" + should_draw_greyscale = FALSE + +/obj/item/bodypart/arm/right/mutant_zombie + icon_greyscale = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi' + icon = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi' + icon_static = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi' + limb_id = SPECIES_MUTANT + icon_state = "mutant_r_arm" + should_draw_greyscale = FALSE + +/obj/item/bodypart/leg/left/mutant_zombie + icon_greyscale = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi' + icon = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi' + icon_static = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi' + limb_id = SPECIES_MUTANT + icon_state = "mutant_l_leg" + digitigrade_type = null + should_draw_greyscale = FALSE + +/obj/item/bodypart/leg/right/mutant_zombie + icon_greyscale = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi' + icon = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi' + icon_static = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi' + limb_id = SPECIES_MUTANT + icon_state = "mutant_r_leg" + digitigrade_type = null + should_draw_greyscale = FALSE diff --git a/modular_skyrat/modules/mutants/icons/antag_hud.dmi b/modular_nova/modules/mutants/icons/antag_hud.dmi similarity index 100% rename from modular_skyrat/modules/mutants/icons/antag_hud.dmi rename to modular_nova/modules/mutants/icons/antag_hud.dmi diff --git a/modular_skyrat/modules/mutants/icons/cure_machine.dmi b/modular_nova/modules/mutants/icons/cure_machine.dmi similarity index 100% rename from modular_skyrat/modules/mutants/icons/cure_machine.dmi rename to modular_nova/modules/mutants/icons/cure_machine.dmi diff --git a/modular_skyrat/modules/mutants/icons/extractor.dmi b/modular_nova/modules/mutants/icons/extractor.dmi similarity index 100% rename from modular_skyrat/modules/mutants/icons/extractor.dmi rename to modular_nova/modules/mutants/icons/extractor.dmi diff --git a/modular_skyrat/modules/mutants/icons/mutant_claw.dmi b/modular_nova/modules/mutants/icons/mutant_claw.dmi similarity index 100% rename from modular_skyrat/modules/mutants/icons/mutant_claw.dmi rename to modular_nova/modules/mutants/icons/mutant_claw.dmi diff --git a/modular_skyrat/modules/mutants/icons/mutant_eyes.dmi b/modular_nova/modules/mutants/icons/mutant_eyes.dmi similarity index 100% rename from modular_skyrat/modules/mutants/icons/mutant_eyes.dmi rename to modular_nova/modules/mutants/icons/mutant_eyes.dmi diff --git a/modular_skyrat/modules/mutants/icons/mutant_hand_lefthand.dmi b/modular_nova/modules/mutants/icons/mutant_hand_lefthand.dmi similarity index 100% rename from modular_skyrat/modules/mutants/icons/mutant_hand_lefthand.dmi rename to modular_nova/modules/mutants/icons/mutant_hand_lefthand.dmi diff --git a/modular_skyrat/modules/mutants/icons/mutant_hand_righthand.dmi b/modular_nova/modules/mutants/icons/mutant_hand_righthand.dmi similarity index 100% rename from modular_skyrat/modules/mutants/icons/mutant_hand_righthand.dmi rename to modular_nova/modules/mutants/icons/mutant_hand_righthand.dmi diff --git a/modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi b/modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi similarity index 100% rename from modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi rename to modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi diff --git a/modular_skyrat/modules/mutants/readme.md b/modular_nova/modules/mutants/readme.md similarity index 100% rename from modular_skyrat/modules/mutants/readme.md rename to modular_nova/modules/mutants/readme.md diff --git a/modular_nova/modules/nanotrasen_naval_command/code/clothing.dm b/modular_nova/modules/nanotrasen_naval_command/code/clothing.dm new file mode 100644 index 00000000000000..6bc097410d4768 --- /dev/null +++ b/modular_nova/modules/nanotrasen_naval_command/code/clothing.dm @@ -0,0 +1,99 @@ + +// UNDER +/obj/item/clothing/under/rank/centcom/nova/naval + name = "ensign uniform" + desc = "A uniform worn by those with the rank Ensign in the Nanotrasen Navy." + icon_state = "naval_ensign" + can_adjust = TRUE + +/obj/item/clothing/under/rank/centcom/nova/naval/commander + name = "command uniform" + desc = "A uniform worn by those with a command rank in the Nanotrasen Navy." + icon_state = "naval_command" + +/obj/item/clothing/under/rank/centcom/nova/naval/admiral + name = "admiral's uniform" + desc = "A uniform worn by those with the rank Admiral in the Nanotrasen Navy." + icon_state = "naval_admiral" + +/obj/item/clothing/under/rank/centcom/nova/naval/fleet_admiral + name = "fleet admiral's uniform" + desc = "A uniform worn by those with the rank Fleet Admiral in the Nanotrasen Navy." + icon_state = "naval_fleet_admiral" + +// GLOVES +/obj/item/clothing/gloves/combat/naval + name = "nanotrasen naval gloves" + desc = "A high quality pair of thick gloves covered in gold stitching, given to Nanotrasen's Naval Commanders." + worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi' + icon_state = "naval_command" + +/obj/item/clothing/gloves/combat/naval/fleet_admiral + name = "fleet admiral's gloves" + icon_state = "naval_fleet_admiral" + + +// HATS +/obj/item/clothing/head/hats/caphat/naval + name = "naval cap" + desc = "A cap worn by those in the Nanotrasen Navy." + icon_state = "naval_command" + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + +/obj/item/clothing/head/hats/caphat/naval/fleet_admiral + name = "fleet admiral's cap" + desc = "A cap worn by the Nanotrasen Fleet Admiral." + icon_state = "naval_fleet_admiral" + + +// NECK +/obj/item/clothing/neck/pauldron + name = "lieutenant commander's pauldron" + desc = "A red padded pauldron signifying the rank of Lieutenant Commander of the Nanotrasen Navy." + worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/neck.dmi' + icon_state = "pauldron_ltcr" + +/obj/item/clothing/neck/pauldron/commander + name = "commander's pauldron" + desc = "A red padded pauldron signifying the rank of Commander in the Nanotrasen Navy." + icon_state = "pauldron_commander" + +/obj/item/clothing/neck/pauldron/captain + name = "captain's pauldron" + desc = "A red padded pauldron signifying the rank of Captain in the Nanotrasen Navy." + icon_state = "pauldron_captain" + +/obj/item/clothing/neck/cloak/admiral + name = "admiral's cape" + desc = "A vibrant green cape with gold stitching, worn by Nanotrasen Navy Admirals." + worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/neck.dmi' + icon_state = "cape_admiral" + +/obj/item/clothing/neck/cloak/fleet_admiral + name = "fleet admiral's cape" + desc = "A godly cape worn by the highest ranking person in the Nanotrasen Navy, the Fleet Admiral." + worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/neck.dmi' + icon_state = "cape_fleet_admiral" + +// SUITS +/obj/item/clothing/suit/armor/vest/capcarapace/naval + name = "naval carapace" + desc = "A carapace worn by Naval Command members." + icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi' + icon_state = "naval_carapace" + +// GLASSES +/obj/item/clothing/glasses/hud/security/sunglasses/black + name = "black security sunglasses" + desc = "A pair of black sunglasses worn by Naval Command officers." + icon = 'icons/obj/clothing/glasses.dmi' + worn_icon = 'icons/mob/clothing/eyes.dmi' + icon_state = "sun" + unique_reskin = null diff --git a/modular_skyrat/modules/nanotrasen_naval_command/code/id_trims.dm b/modular_nova/modules/nanotrasen_naval_command/code/id_trims.dm similarity index 100% rename from modular_skyrat/modules/nanotrasen_naval_command/code/id_trims.dm rename to modular_nova/modules/nanotrasen_naval_command/code/id_trims.dm diff --git a/modular_nova/modules/nanotrasen_naval_command/code/outfits.dm b/modular_nova/modules/nanotrasen_naval_command/code/outfits.dm new file mode 100644 index 00000000000000..7736344738ceb1 --- /dev/null +++ b/modular_nova/modules/nanotrasen_naval_command/code/outfits.dm @@ -0,0 +1,165 @@ +/datum/outfit/centcom/naval + name = "Nanotrasen Naval Command - Default" + uniform = /obj/item/clothing/under/rank/centcom/nova/naval + id = /obj/item/card/id/advanced/centcom + l_pocket = /obj/item/melee/baton/telescopic + shoes = /obj/item/clothing/shoes/combat/swat + back = /obj/item/storage/backpack/satchel/leather + glasses = /obj/item/clothing/glasses/hud/security/sunglasses/black + ears = /obj/item/radio/headset/headset_cent/commander + +/datum/outfit/centcom/naval/post_equip(mob/living/carbon/human/human, visualsOnly = FALSE) + if(visualsOnly) + return + + var/obj/item/card/id/id_card = human.wear_id + id_card.registered_name = human.real_name + id_card.update_label() + id_card.update_icon() + ..() + +/datum/outfit/centcom/naval/ensign + name = "Nanotrasen Naval Command - Ensign" + + id_trim = /datum/id_trim/centcom/naval + + head = /obj/item/clothing/head/beret/centcom_formal + + uniform = /obj/item/clothing/under/rank/centcom/nova/naval + + gloves = /obj/item/clothing/gloves/tackler/combat/insulated + + backpack_contents = list( + /obj/item/storage/box/survival/security, + /obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/skild, + ) + +/datum/outfit/centcom/naval/lieutenant + name = "Nanotrasen Naval Command - Lieutenant" + + id_trim = /datum/id_trim/centcom/naval/lieutenant + + head = /obj/item/clothing/head/hats/centcom_cap + + suit = /obj/item/clothing/suit/armor/vest/capcarapace/naval + + uniform = /obj/item/clothing/under/rank/centcom/nova/naval/commander + + gloves = /obj/item/clothing/gloves/combat/naval + + backpack_contents = list( + /obj/item/storage/box/survival/security, + /obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/skild, + ) + +/datum/outfit/centcom/naval/lieutenant_commander + name = "Nanotrasen Naval Command - Lieutenant Commander" + + id_trim = /datum/id_trim/centcom/naval/ltcr + + head = /obj/item/clothing/head/hats/centcom_cap + + neck = /obj/item/clothing/neck/pauldron + + suit = /obj/item/clothing/suit/armor/vest/capcarapace/naval + + uniform = /obj/item/clothing/under/rank/centcom/nova/naval/commander + + gloves = /obj/item/clothing/gloves/combat/naval + + backpack_contents = list( + /obj/item/storage/box/survival/security, + /obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/skild, + ) + +/datum/outfit/centcom/naval/commander + name = "Nanotrasen Naval Command - Commander" + + id_trim = /datum/id_trim/centcom/naval/commander + + head = /obj/item/clothing/head/hats/centcom_cap + + neck = /obj/item/clothing/neck/pauldron/commander + + suit = /obj/item/clothing/suit/armor/vest/capcarapace/naval + + uniform = /obj/item/clothing/under/rank/centcom/nova/naval/commander + + gloves = /obj/item/clothing/gloves/combat/naval + + backpack_contents = list( + /obj/item/storage/box/survival/security, + /obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/skild, + ) + +/datum/outfit/centcom/naval/captain + name = "Nanotrasen Naval Command - Captain" + + id_trim = /datum/id_trim/centcom/naval/captain + + head = /obj/item/clothing/head/hats/centcom_cap + + neck = /obj/item/clothing/neck/pauldron/captain + + suit = /obj/item/clothing/suit/armor/vest/capcarapace/naval + + uniform = /obj/item/clothing/under/rank/centcom/nova/naval/commander + + gloves = /obj/item/clothing/gloves/combat/naval + + backpack_contents = list( + /obj/item/storage/box/survival/security, + /obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/skild, + ) + +/datum/outfit/centcom/naval/rear_admiral + name = "Nanotrasen Naval Command - Rear Admiral" + + id_trim = /datum/id_trim/centcom/naval/rear_admiral + + head = /obj/item/clothing/head/hats/caphat/naval + + uniform = /obj/item/clothing/under/rank/centcom/nova/naval/admiral + + gloves = /obj/item/clothing/gloves/combat/naval + + backpack_contents = list( + /obj/item/storage/box/survival/security, + /obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/skild, + ) + +/datum/outfit/centcom/naval/admiral + name = "Nanotrasen Naval Command - Admiral" + + id_trim = /datum/id_trim/centcom/naval/admiral + + head = /obj/item/clothing/head/hats/caphat/naval + + neck = /obj/item/clothing/neck/cloak/admiral + + uniform = /obj/item/clothing/under/rank/centcom/nova/naval/admiral + + gloves = /obj/item/clothing/gloves/combat/naval + + backpack_contents = list( + /obj/item/storage/box/survival/security, + /obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/skild, + ) + +/datum/outfit/centcom/naval/fleet_admiral + name = "Nanotrasen Naval Command - Fleet Admiral" + + id_trim = /datum/id_trim/centcom/naval/fleet_admiral + + head = /obj/item/clothing/head/hats/caphat/naval/fleet_admiral + + neck = /obj/item/clothing/neck/cloak/fleet_admiral + + uniform = /obj/item/clothing/under/rank/centcom/nova/naval/fleet_admiral + + gloves = /obj/item/clothing/gloves/combat/naval/fleet_admiral + + backpack_contents = list( + /obj/item/storage/box/survival/security, + /obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/skild, + ) diff --git a/modular_nova/modules/nanotrasen_rep/code/clothing.dm b/modular_nova/modules/nanotrasen_rep/code/clothing.dm new file mode 100644 index 00000000000000..abfdfcf6c64881 --- /dev/null +++ b/modular_nova/modules/nanotrasen_rep/code/clothing.dm @@ -0,0 +1,92 @@ + +//Uniform items are in command.dm + +/obj/item/clothing/suit/armor/vest/nanotrasen_consultant + name = "nanotrasen officers coat" + desc = "A premium black coat with real fur round the neck, it seems to have some armor padding inside as well." + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + icon_state = "bladerunner" + inhand_icon_state = "armor" + blood_overlay_type = "suit" + dog_fashion = null + body_parts_covered = CHEST|GROIN|ARMS + cold_protection = CHEST|GROIN|ARMS + min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT + heat_protection = CHEST|ARMS|GROIN + max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/head/nanotrasen_consultant + name = "nanotrasen consultant's hat" + desc = "A cap made from durathread, it has an insignia on the front denoting the rank of \"Nanotrasen Consultant\"." + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' + icon_state = "nt_consultant_cap" + inhand_icon_state = "that" + flags_inv = 0 + armor_type = /datum/armor/head_nanotrasen_consultant + strip_delay = 60 + dog_fashion = null + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + +/datum/armor/head_nanotrasen_consultant + melee = 15 + bullet = 5 + laser = 15 + energy = 25 + bomb = 10 + fire = 30 + acid = 5 + wound = 4 + +/obj/item/clothing/head/nanotrasen_consultant/beret + name = "nanotrasen consultant's beret" + desc = "A beret made from durathread, it has an insignia on the front denoting the rank of \"Nanotrasen Consultant\"." + greyscale_config = /datum/greyscale_config/beret_badge + greyscale_config_worn = /datum/greyscale_config/beret_badge/worn + greyscale_colors = "#3F3C40#155326" + icon_state = "beret_badge" + +/obj/item/clothing/head/beret/centcom_formal/nt_consultant + armor_type = /datum/armor/beret_centcom_formal_nt_consultant + +/datum/armor/beret_centcom_formal_nt_consultant + melee = 15 + bullet = 5 + laser = 15 + energy = 25 + bomb = 10 + fire = 30 + acid = 5 + wound = 4 + +/obj/item/clothing/suit/armor/centcom_formal/nt_consultant + armor_type = /datum/armor/armor_centcom_formal_nt_consultant + +/datum/armor/armor_centcom_formal_nt_consultant + melee = 35 + bullet = 30 + laser = 30 + energy = 40 + bomb = 25 + fire = 50 + acid = 50 + wound = 10 + +/obj/item/clothing/suit/hooded/wintercoat/centcom/nt_consultant + armor_type = /datum/armor/centcom_nt_consultant + +/datum/armor/centcom_nt_consultant + melee = 35 + bullet = 30 + laser = 30 + energy = 40 + bomb = 25 + fire = 50 + acid = 50 + wound = 10 + +/obj/item/clothing/gloves/combat/naval/nanotrasen_consultant + name = "\improper CentCom gloves" + desc = "A high quality pair of thick gloves covered in gold stitching." diff --git a/modular_skyrat/modules/nanotrasen_rep/code/nanotrasen_consultant.dm b/modular_nova/modules/nanotrasen_rep/code/nanotrasen_consultant.dm similarity index 85% rename from modular_skyrat/modules/nanotrasen_rep/code/nanotrasen_consultant.dm rename to modular_nova/modules/nanotrasen_rep/code/nanotrasen_consultant.dm index 02524eafb6fa67..b647efe79ac593 100644 --- a/modular_skyrat/modules/nanotrasen_rep/code/nanotrasen_consultant.dm +++ b/modular_nova/modules/nanotrasen_rep/code/nanotrasen_consultant.dm @@ -54,7 +54,7 @@ head = /obj/item/clothing/head/nanotrasen_consultant backpack_contents = list( /obj/item/melee/baton/telescopic = 1, - /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/skild = 1, + /obj/item/choice_beacon/ntc = 1, ) skillchips = list(/obj/item/skillchip/disk_verifier) @@ -91,7 +91,7 @@ /obj/effect/landmark/start/nanotrasen_consultant name = "Nanotrasen Consultant" icon_state = "Nanotrasen Consultant" - icon = 'modular_skyrat/master_files/icons/mob/landmarks.dmi' + icon = 'modular_nova/master_files/icons/mob/landmarks.dmi' /obj/item/clothing/accessory/medal/gold/nanotrasen_consultant name = "medal of diplomacy" @@ -112,7 +112,7 @@ greyscale_colors = "#017941#0060b8" /obj/item/storage/bag/garment/nanotrasen_consultant - name = "Nanotrasen consultant's garment bag" + name = "nanotrasen consultant's garment bag" desc = "A bag for storing extra clothes and shoes. This one belongs to the Nanotrasen consultant." /obj/item/storage/bag/garment/nanotrasen_consultant/PopulateContents() @@ -133,14 +133,13 @@ new /obj/item/clothing/under/rank/centcom/intern(src) new /obj/item/clothing/head/hats/intern(src) -/obj/structure/closet/secure_closet/nanotrasen_consultant/station - name = "\proper nanotrasen consultant's locker" +/obj/structure/closet/secure_closet/nanotrasen_consultant + name = "nanotrasen consultant's locker" req_access = list(ACCESS_CAPTAIN, ACCESS_CENT_GENERAL) icon_state = "cc" - icon = 'modular_skyrat/master_files/icons/obj/closet.dmi' - door_anim_time = 0 //CONVERT THESE DOORS YOU LAZY ASSHATS + icon = 'modular_nova/master_files/icons/obj/closet.dmi' -/obj/structure/closet/secure_closet/nanotrasen_consultant/station/PopulateContents() +/obj/structure/closet/secure_closet/nanotrasen_consultant/PopulateContents() ..() new /obj/item/storage/backpack/satchel/leather(src) new /obj/item/clothing/neck/petcollar(src) @@ -152,3 +151,20 @@ new /obj/item/storage/photo_album/personal(src) new /obj/item/bedsheet/centcom(src) new /obj/item/storage/bag/garment/nanotrasen_consultant(src) + +//Choice Beacon, I hope in the future they're going to be given proper unique gun but this will do. + + +/obj/item/choice_beacon/ntc + name = "gunset beacon" + desc = "A single use beacon to deliver a gunset of your choice. Please only call this in your office" + company_source = "Trappiste Fabriek Company" + company_message = span_bold("Supply Pod incoming please stand by") + +/obj/item/choice_beacon/ntc/generate_display_names() + var/static/list/selectable_gun_types = list( + "Takbok" = /obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/takbok, + "Skild" = /obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/skild, + ) + + return selectable_gun_types diff --git a/modular_skyrat/modules/new_cells/code/power_cell.dm b/modular_nova/modules/new_cells/code/power_cell.dm similarity index 88% rename from modular_skyrat/modules/new_cells/code/power_cell.dm rename to modular_nova/modules/new_cells/code/power_cell.dm index d9769c479c17a2..1583af7357b182 100644 --- a/modular_skyrat/modules/new_cells/code/power_cell.dm +++ b/modular_nova/modules/new_cells/code/power_cell.dm @@ -1,7 +1,7 @@ /obj/item/stock_parts/cell/crank name = "crank cell" desc = "Go ahead, wind it up to charge it." - icon = 'modular_skyrat/modules/new_cells/icons/power.dmi' + icon = 'modular_nova/modules/new_cells/icons/power.dmi' icon_state = "crankcell" /// how much each crank will give the cell charge var/crank_amount = 100 @@ -31,12 +31,12 @@ if(!do_after(user, crank_speed, src)) return give(crank_amount) - playsound(src, 'modular_skyrat/modules/new_cells/sound/crank.ogg', 25, FALSE) + playsound(src, 'modular_nova/modules/new_cells/sound/crank.ogg', 25, FALSE) /obj/item/stock_parts/cell/self_charge name = "charging cell" desc = "A special cell that will recharge itself over time." - icon = 'modular_skyrat/modules/new_cells/icons/power.dmi' + icon = 'modular_nova/modules/new_cells/icons/power.dmi' icon_state = "chargecell" maxcharge = 2500 charge_light_type = "old" diff --git a/modular_skyrat/modules/new_cells/icons/power.dmi b/modular_nova/modules/new_cells/icons/power.dmi similarity index 100% rename from modular_skyrat/modules/new_cells/icons/power.dmi rename to modular_nova/modules/new_cells/icons/power.dmi diff --git a/modular_skyrat/modules/new_cells/readme.md b/modular_nova/modules/new_cells/readme.md similarity index 100% rename from modular_skyrat/modules/new_cells/readme.md rename to modular_nova/modules/new_cells/readme.md diff --git a/modular_skyrat/modules/new_cells/sound/crank.ogg b/modular_nova/modules/new_cells/sound/crank.ogg similarity index 100% rename from modular_skyrat/modules/new_cells/sound/crank.ogg rename to modular_nova/modules/new_cells/sound/crank.ogg diff --git a/modular_skyrat/modules/novaya_ert/code/advanced_choice_beacon.dm b/modular_nova/modules/novaya_ert/code/advanced_choice_beacon.dm similarity index 92% rename from modular_skyrat/modules/novaya_ert/code/advanced_choice_beacon.dm rename to modular_nova/modules/novaya_ert/code/advanced_choice_beacon.dm index 0003bed02e2a36..3e35700096d57a 100644 --- a/modular_skyrat/modules/novaya_ert/code/advanced_choice_beacon.dm +++ b/modular_nova/modules/novaya_ert/code/advanced_choice_beacon.dm @@ -1,7 +1,7 @@ /obj/item/advanced_choice_beacon name = "advanced choice beacon" desc = "A beacon that will send whatever your heart desires, providing Nanotrasen approves it." - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/remote.dmi' icon_state = "gangtool-red" inhand_icon_state = null @@ -91,11 +91,11 @@ /obj/item/storage/toolbox/emergency/turret/nri name = "NRI stationary defense deployment system" desc = "You feel a strange urge to hit this with a wrench." - icon = 'modular_skyrat/modules/novaya_ert/icons/turret_deployable.dmi' + icon = 'modular_nova/modules/novaya_ert/icons/turret_deployable.dmi' icon_state = "inventory" inhand_icon_state = "held" - lefthand_file = 'modular_skyrat/modules/novaya_ert/icons/turret_deployable.dmi' - righthand_file = 'modular_skyrat/modules/novaya_ert/icons/turret_deployable.dmi' + lefthand_file = 'modular_nova/modules/novaya_ert/icons/turret_deployable.dmi' + righthand_file = 'modular_nova/modules/novaya_ert/icons/turret_deployable.dmi' w_class = WEIGHT_CLASS_BULKY has_latches = FALSE @@ -118,11 +118,11 @@ ..() /obj/machinery/porta_turret/syndicate/pod/toolbox/nri - icon = 'modular_skyrat/modules/novaya_ert/icons/turret_deployable.dmi' + icon = 'modular_nova/modules/novaya_ert/icons/turret_deployable.dmi' icon_state = "living" base_icon_state = "living" - stun_projectile = /obj/projectile/bullet/a762x39/rubber - lethal_projectile = /obj/projectile/bullet/a762x39 + stun_projectile = /obj/projectile/bullet/c27_54cesarzowa/rubber + lethal_projectile = /obj/projectile/bullet/c27_54cesarzowa max_integrity = 150 req_access = list(ACCESS_CENT_GENERAL) faction = list(FACTION_NEUTRAL, FACTION_ERT) @@ -227,10 +227,9 @@ new /obj/item/gun/ballistic/automatic/l6_saw/unrestricted(src) new /obj/item/storage/toolbox/ammobox/full/l6_saw(src) new /obj/item/storage/toolbox/ammobox/full/krinkov(src) - new /obj/item/storage/toolbox/ammobox/full/krinkov/emp(src) - new /obj/item/storage/toolbox/ammobox/full/krinkov/fire(src) - new /obj/item/storage/toolbox/ammobox/full/krinkov/ricochet(src) - new /obj/item/storage/toolbox/ammobox/full/krinkov/ap(src) + new /obj/item/storage/toolbox/ammobox/full/krinkov(src) + new /obj/item/storage/toolbox/ammobox/full/krinkov(src) + new /obj/item/storage/toolbox/ammobox/full/krinkov(src) new /obj/item/storage/toolbox/ammobox/full/nri_smg(src) new /obj/item/storage/toolbox/ammobox/full/nri_smg(src) new /obj/item/storage/toolbox/ammobox/full/aps(src) diff --git a/modular_skyrat/modules/novaya_ert/code/back.dm b/modular_nova/modules/novaya_ert/code/back.dm similarity index 83% rename from modular_skyrat/modules/novaya_ert/code/back.dm rename to modular_nova/modules/novaya_ert/code/back.dm index 5fdc7710ab441f..35e8f5ac4dabfd 100644 --- a/modular_skyrat/modules/novaya_ert/code/back.dm +++ b/modular_nova/modules/novaya_ert/code/back.dm @@ -1,8 +1,8 @@ /obj/item/storage/backpack/duffelbag/syndie/nri name = "imperial assault pack" desc = "A large green backpack for holding extra tactical supplies. It appears to be made from lighter yet sturdier materials." - icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi' icon_state = "russian_green_backpack" worn_icon_state = "russian_green_backpack" inhand_icon_state = "securitypack" @@ -28,8 +28,8 @@ /obj/item/storage/backpack/nri name = "imperial assault pack" desc = "A large green backpack for holding extra tactical supplies." - icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi' icon_state = "russian_green_backpack" worn_icon_state = "russian_green_backpack" inhand_icon_state = "securitypack" diff --git a/modular_nova/modules/novaya_ert/code/belt.dm b/modular_nova/modules/novaya_ert/code/belt.dm new file mode 100644 index 00000000000000..9f75ad7a0db5aa --- /dev/null +++ b/modular_nova/modules/novaya_ert/code/belt.dm @@ -0,0 +1,70 @@ +/obj/item/storage/belt/military/nri + name = "green tactical belt" + desc = "A green tactical belt made for storing military grade hardware." + icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' + worn_icon_teshari = 'modular_nova/master_files/icons/mob/clothing/species/teshari/belt.dmi' + icon_state = "russian_green_belt" + inhand_icon_state = "security" + worn_icon_state = "russian_green_belt" + +/obj/item/storage/belt/military/nri/captain + name = "black tactical belt" + desc = "A black tactical belt made for storing military grade hardware." + icon_state = "russian_black_belt" + worn_icon_state = "russian_black_belt" + +/obj/item/storage/belt/military/nri/medic + name = "blue tactical belt" + desc = "A blue tactical belt made for storing military grade hardware." + icon_state = "russian_white_belt" + worn_icon_state = "russian_white_belt" + +/obj/item/storage/belt/military/nri/engineer + name = "brown tactical belt" + desc = "A brown tactical belt made for storing military grade hardware." + icon_state = "russian_brown_belt" + worn_icon_state = "russian_brown_belt" + +/obj/item/storage/belt/military/nri/plus_mre/PopulateContents() + new /obj/item/storage/box/nri_survival_pack/raider(src) + +/obj/item/storage/belt/military/nri/soldier/PopulateContents() + generate_items_inside(list( + /obj/item/ammo_box/magazine/lanca = 4, + /obj/item/knife/combat = 1, + /obj/item/grenade/smokebomb = 1, + /obj/item/grenade/frag = 1, + ),src) + +/obj/item/storage/belt/military/nri/heavy/PopulateContents() + generate_items_inside(list( + /obj/item/ammo_box/magazine/m9mm_aps = 4, + /obj/item/knife/combat = 1, + /obj/item/grenade/smokebomb = 1, + /obj/item/grenade/frag = 1, + ),src) + +/obj/item/storage/belt/military/nri/captain/full/PopulateContents() + generate_items_inside(list( + /obj/item/ammo_box/magazine/lanca = 4, + /obj/item/knife/combat = 1, + /obj/item/grenade/smokebomb = 1, + /obj/item/grenade/frag = 1, + ),src) + +/obj/item/storage/belt/military/nri/medic/full/PopulateContents() + generate_items_inside(list( + /obj/item/ammo_box/magazine/miecz = 4, + /obj/item/knife/combat = 1, + /obj/item/grenade/smokebomb = 1, + /obj/item/grenade/frag = 1, + ),src) + +/obj/item/storage/belt/military/nri/engineer/full/PopulateContents() + generate_items_inside(list( + /obj/item/ammo_box/magazine/miecz = 4, + /obj/item/knife/combat = 1, + /obj/item/grenade/smokebomb = 1, + /obj/item/grenade/frag = 1, + ),src) diff --git a/modular_nova/modules/novaya_ert/code/ert.dm b/modular_nova/modules/novaya_ert/code/ert.dm new file mode 100644 index 00000000000000..b985c1c19a9553 --- /dev/null +++ b/modular_nova/modules/novaya_ert/code/ert.dm @@ -0,0 +1,89 @@ +/datum/ert/nri + roles = list(/datum/antagonist/ert/nri, /datum/antagonist/ert/nri/medic, /datum/antagonist/ert/nri/engineer) + leader_role = /datum/antagonist/ert/nri/commander + rename_team = "NRI border patrol" + code = "Red" + mission = "Cooperate with the station, protect NRI assets." + polldesc = "a squad of NRI border patrol" + teamsize = 4 + +/datum/antagonist/ert/nri + name = "NRI border patrol" + role = "Private" + outfit = /datum/outfit/centcom/ert/nri + suicide_cry = "GOD, SAVE THE EMPRESS!!" + +/datum/antagonist/ert/nri/on_gain() + . = ..() + equip_nri() + +/datum/antagonist/ert/nri/proc/equip_nri() + if(!ishuman(owner.current)) + return + var/mob/living/carbon/human/H = owner.current + H.set_species(/datum/species/human) + + H.grant_language(/datum/language/panslavic) + H.grant_language(/datum/language/schechi) + return TRUE + +/datum/antagonist/ert/nri/greet() + if(!ert_team) + return + + to_chat(owner, span_boldwarning("<font size=3 color=yellow>You are the [name]</font>")) + + var/missiondesc = "Your squad is responding to an emergency situation of [station_name()], with the Novaya Rossiyskaya Imperiya Defense Collegium's approval." + if(leader) //If Squad Leader + missiondesc += "<BR><B>Lead your squad to ensure the completion of the mission. Board the shuttle when your team is ready.</B>" + + missiondesc += "<BR><B><font size=3 color=red>You are NOT a Symphionia Employee. You work for Novaya Rossiyskaya Imperiya Defense Collegium.</font></B>" + missiondesc += "<BR><B><font size=3 color=red>You are NOT a deathsquad. You are here to assist the station's Security and Command with alien infestations or enemy activity for you own gain.</font></B>" + missiondesc += "<BR>You are responding to emergency calls from the station for immediate NRI military intervention!\n" + missiondesc += "<BR><B>Your Mission</B>:" + missiondesc += "<BR> <B>1.</B> Minimise civillian casualties." + missiondesc += "<BR> <B>2.</B> Neutralise the threat." + missiondesc += "<BR> <B>3.</B> Stabilise the situation." + missiondesc += "<BR> <B>4.</B> Contact whoever called you and assist in resolving the matter." + missiondesc += "<BR> <B>5.</B> Protect, ensure, and uphold the rights of Novaya Rossiyskaya Imperiya, Kingdom of Agurkrral and Free Teshari League citizens on board [station_name()]. SolFed citizens' wellbeing is up to your discretion." + missiondesc += "<BR> <B>6.</B> Attempt to subvert the station's crew in order to shift the station's territory under control of Novaya Rossiyskaya Imperiya." + + missiondesc += span_warning("<BR><B>Your Mission</B>: [ert_team.mission.explanation_text]") + to_chat(owner,missiondesc) + +/datum/antagonist/ert/nri/commander + role = "Commander" + outfit = /datum/outfit/centcom/ert/nri/commander + +/datum/antagonist/ert/nri/medic + role = "Corpsman" + outfit = /datum/outfit/centcom/ert/nri/medic + +/datum/antagonist/ert/nri/engineer + role = "Combat Engineer" + outfit = /datum/outfit/centcom/ert/nri/engineer + +/datum/ert/nri/diplomacy + roles = list(/datum/antagonist/ert/nri/diplomat/scientist, /datum/antagonist/ert/nri/diplomat/doctor) + leader_role = /datum/antagonist/ert/nri/diplomat/major + rename_team = "NRI External Relationships Colleague" + code = "Green" + mission = "Cooperate with the station's command, perform routine evaluation of NRI citizen's wellbeing as well as Research and Medical departments' genetical and virological researches." + polldesc = "NRI diplomatic mission" + +/datum/antagonist/ert/nri/diplomat + name = "NRI ERC Diplomat" + role = "Diplomat" + outfit = /datum/outfit/centcom/ert/nri // no shit for generic role that won't even appear bruh + +/datum/antagonist/ert/nri/diplomat/major + role = "Major" + outfit = /datum/outfit/centcom/ert/nri/major + +/datum/antagonist/ert/nri/diplomat/scientist + role = "Research Inspector" + outfit = /datum/outfit/centcom/ert/nri/scientist + +/datum/antagonist/ert/nri/diplomat/doctor + role = "Medical Inspector" + outfit = /datum/outfit/centcom/ert/nri/doctor diff --git a/modular_nova/modules/novaya_ert/code/head.dm b/modular_nova/modules/novaya_ert/code/head.dm new file mode 100644 index 00000000000000..4eeb355f55b129 --- /dev/null +++ b/modular_nova/modules/novaya_ert/code/head.dm @@ -0,0 +1,50 @@ +/obj/item/clothing/head/beret/sec/nri + name = "commander's beret" + desc = "Za rodinu!!" + armor_type = /datum/armor/sec_nri + +/datum/armor/sec_nri + melee = 40 + bullet = 35 + laser = 30 + energy = 40 + bomb = 25 + fire = 20 + acid = 50 + wound = 20 + +/obj/item/clothing/head/helmet/space/hev_suit/nri + name = "\improper VOSKHOD powered combat armor helmet" + desc = "A composite graphene-plasteel helmet with a ballistic nylon inner padding, complete with a deployable airtight polycarbonate visor and respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back." + icon = 'modular_nova/master_files/icons/obj/clothing/head/helmet.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/helmet.dmi' + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/head_muzzled.dmi' + worn_icon_teshari = 'modular_nova/master_files/icons/mob/clothing/species/teshari/head.dmi' + icon_state = "nri_soldier" + armor_type = /datum/armor/hev_suit_nri + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + obj_flags = null + supports_variations_flags = CLOTHING_SNOUTED_VARIATION + resistance_flags = FIRE_PROOF|UNACIDABLE|ACID_PROOF|FREEZE_PROOF + clothing_flags = STOPSPRESSUREDAMAGE|SNUG_FIT|BLOCK_GAS_SMOKE_EFFECT + clothing_traits = null + flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + flash_protect = FLASH_PROTECTION_WELDER + visor_flags_inv = HIDEMASK|HIDEEYES|HIDEFACE|HIDEFACIALHAIR + visor_flags = STOPSPRESSUREDAMAGE + slowdown = 0 + +/obj/item/clothing/head/helmet/space/hev_suit/nri/captain + name = "\improper VOSKHOD-2 powered combat armor helmet" + desc = "A black composite polyurea coated graphene-plastitanium helmet with durathread inner padding, complete with a deployable airtight tinted plasmaglass visor and a kevlar-lined respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back." + icon_state = "nri_captain" + +/obj/item/clothing/head/helmet/space/hev_suit/nri/medic + name = "\improper VOSKHOD-KH powered combat armor helmet" + desc = "A combat medic's composite graphene-titanium helmet with bio-resistant padding, complete with a deployable airtight polycarbonate visor and optimized respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back." + icon_state = "nri_medic" + +/obj/item/clothing/head/helmet/space/hev_suit/nri/engineer + name = "\improper VOSKHOD-IN powered combat armor helmet" + desc = "A composite tungsten-plasteel helmet with a lead-lined ballistic nylon inner padding, complete with a deployable airtight polycarbonate visor and respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back." + icon_state = "nri_engineer" diff --git a/modular_skyrat/modules/novaya_ert/code/id.dm b/modular_nova/modules/novaya_ert/code/id.dm similarity index 91% rename from modular_skyrat/modules/novaya_ert/code/id.dm rename to modular_nova/modules/novaya_ert/code/id.dm index e265ba8b34eb3d..68ce2036a4f5d1 100644 --- a/modular_skyrat/modules/novaya_ert/code/id.dm +++ b/modular_nova/modules/novaya_ert/code/id.dm @@ -6,11 +6,12 @@ /datum/id_trim/nri assignment = "NRI Soldier" - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' trim_state = "trim_nri" department_color = COLOR_RED_LIGHT subdepartment_color = COLOR_COMMAND_BLUE sechud_icon_state = "hud_nri" + threat_modifier = 2 // Matching the nri_police threat modifier /datum/id_trim/nri/New() . = ..() diff --git a/modular_skyrat/modules/novaya_ert/code/mod_suit.dm b/modular_nova/modules/novaya_ert/code/mod_suit.dm similarity index 96% rename from modular_skyrat/modules/novaya_ert/code/mod_suit.dm rename to modular_nova/modules/novaya_ert/code/mod_suit.dm index d9c5adb7f71d87..5bfd94429b8e19 100644 --- a/modular_skyrat/modules/novaya_ert/code/mod_suit.dm +++ b/modular_nova/modules/novaya_ert/code/mod_suit.dm @@ -26,8 +26,8 @@ ) skins = list( "frontline" = list( - MOD_ICON_OVERRIDE = 'modular_skyrat/modules/novaya_ert/icons/mod.dmi', - MOD_WORN_ICON_OVERRIDE = 'modular_skyrat/modules/novaya_ert/icons/wornmod.dmi', + MOD_ICON_OVERRIDE = 'modular_nova/modules/novaya_ert/icons/mod.dmi', + MOD_WORN_ICON_OVERRIDE = 'modular_nova/modules/novaya_ert/icons/wornmod.dmi', HELMET_FLAGS = list( UNSEALED_LAYER = HEAD_LAYER, UNSEALED_CLOTHING = SNUG_FIT, @@ -115,8 +115,8 @@ ) skins = list( "policing" = list( - MOD_ICON_OVERRIDE = 'modular_skyrat/modules/novaya_ert/icons/mod.dmi', - MOD_WORN_ICON_OVERRIDE = 'modular_skyrat/modules/novaya_ert/icons/wornmod.dmi', + MOD_ICON_OVERRIDE = 'modular_nova/modules/novaya_ert/icons/mod.dmi', + MOD_WORN_ICON_OVERRIDE = 'modular_nova/modules/novaya_ert/icons/wornmod.dmi', HELMET_FLAGS = list( UNSEALED_LAYER = HEAD_LAYER, UNSEALED_CLOTHING = SNUG_FIT, @@ -178,7 +178,7 @@ and even useful information such as their overall health and wellness. The vitals monitor also comes with a speaker, loud enough \ to alert anyone nearby that someone has, in fact, died. This specific unit has a clock and operational ID readout." display_time = TRUE - death_sound = 'modular_skyrat/modules/novaya_ert/sound/flatline.ogg' + death_sound = 'modular_nova/modules/novaya_ert/sound/flatline.ogg' ///Blatant copy of the adrenaline boost module. /obj/item/mod/module/auto_doc @@ -250,7 +250,7 @@ var/new_fireloss = mod.wearer.getFireLoss() var/new_toxloss = mod.wearer.getToxLoss() var/new_stamloss = mod.wearer.getStaminaLoss() - playsound(mod.wearer, 'modular_skyrat/modules/hev_suit/sound/hev/hiss.ogg', 100) + playsound(mod.wearer, 'modular_nova/modules/hev_suit/sound/hev/hiss.ogg', 100) if(new_bruteloss) mod.wearer.reagents.add_reagent(/datum/reagent/medicine/mine_salve, 10) @@ -290,7 +290,7 @@ balloon_alert(mod.wearer, "already full!") return FALSE /// And if the reagent's wrong. - if(!attacking_item.reagents.trans_id_to(src, reagent_required, reagent_required_amount)) + if(!attacking_item.reagents.trans_to(src, reagent_required_amount, target_id = reagent_required)) return FALSE /// And if you got to that point without screwing up then it awards you with being refilled. balloon_alert(mod.wearer, "charge reloaded") diff --git a/modular_nova/modules/novaya_ert/code/outfit.dm b/modular_nova/modules/novaya_ert/code/outfit.dm new file mode 100644 index 00000000000000..dd4d56e4fe02c0 --- /dev/null +++ b/modular_nova/modules/novaya_ert/code/outfit.dm @@ -0,0 +1,177 @@ +/datum/outfit/centcom/ert/nri + name = "Novaya Rossiyskaya Imperiya Soldier" + head = null + glasses = /obj/item/clothing/glasses/night + ears = /obj/item/radio/headset/headset_cent/alt/with_key + mask = /obj/item/clothing/mask/gas/hecu2 + uniform = /obj/item/clothing/under/costume/nri + suit = null + suit_store = null + gloves = /obj/item/clothing/gloves/combat + belt = /obj/item/storage/belt/military/nri/soldier + back = /obj/item/mod/control/pre_equipped/frontline/ert + backpack_contents = list( + /obj/item/storage/box/nri_survival_pack, + /obj/item/storage/medkit/emergency, + /obj/item/advanced_choice_beacon/nri/heavy, + /obj/item/beamout_tool, + /obj/item/crucifix, + /obj/item/reagent_containers/cup/glass/waterbottle/large/cryptobiolin, + /obj/item/ammo_box/magazine/recharge/plasma_battery, + /obj/item/gun/ballistic/automatic/pistol/plasma_marksman, + ) + l_pocket = /obj/item/knife/combat/survival + r_pocket = /obj/item/ammo_box/magazine/recharge/plasma_battery + shoes = /obj/item/clothing/shoes/combat + + l_hand = /obj/item/gun/ballistic/automatic/lanca + + id = /obj/item/card/id/advanced/centcom/ert/nri + id_trim = /datum/id_trim/nri + +/datum/outfit/centcom/ert/nri/commander + name = "Novaya Rossiyskaya Imperiya Platoon Commander" + head = null + glasses = /obj/item/clothing/glasses/thermal/eyepatch + uniform = /obj/item/clothing/under/costume/nri/captain + belt = /obj/item/storage/belt/military/nri/captain/full + suit = null + suit_store = null + gloves = /obj/item/clothing/gloves/tackler/combat/insulated + back = /obj/item/mod/control/pre_equipped/frontline/ert + backpack_contents = list(/obj/item/storage/box/nri_survival_pack, + /obj/item/storage/medkit/regular, + /obj/item/megaphone, + /obj/item/binoculars, + /obj/item/clothing/head/beret/sec/nri, + /obj/item/ammo_box/magazine/recharge/plasma_battery, + /obj/item/gun/ballistic/automatic/pistol/plasma_thrower, + /obj/item/beamout_tool, + /obj/item/crucifix, + /obj/item/reagent_containers/cup/glass/waterbottle/large/cryptobiolin) + + l_hand = /obj/item/gun/ballistic/automatic/lanca + + id_trim = /datum/id_trim/nri/commander + +/datum/outfit/centcom/ert/nri/medic + name = "Novaya Rossiyskaya Imperiya Corpsman" + head = null + glasses = /obj/item/clothing/glasses/hud/health/night + uniform = /obj/item/clothing/under/costume/nri/medic + belt = /obj/item/storage/belt/military/nri/medic/full + suit = null + suit_store = null + gloves = /obj/item/clothing/gloves/latex/nitrile + back = /obj/item/mod/control/pre_equipped/frontline/ert + backpack_contents = list(/obj/item/storage/box/nri_survival_pack, + /obj/item/storage/medkit/tactical, + /obj/item/storage/medkit/advanced, + /obj/item/storage/medkit/surgery, + /obj/item/gun/medbeam, + /obj/item/gun/energy/cell_loaded/medigun/cmo, + /obj/item/storage/box/medicells, + /obj/item/beamout_tool, + /obj/item/crucifix, + /obj/item/reagent_containers/cup/glass/waterbottle/large/cryptobiolin) + + l_hand = /obj/item/shield/riot/pointman/nri + r_hand = /obj/item/gun/ballistic/automatic/miecz + + id_trim = /datum/id_trim/nri/medic + +/datum/outfit/centcom/ert/nri/engineer + name = "Novaya Rossiyskaya Imperiya Combat Engineer" + head = null + glasses = /obj/item/clothing/glasses/meson/night + uniform = /obj/item/clothing/under/costume/nri/engineer + belt = /obj/item/storage/belt/military/nri/engineer/full + suit = null + suit_store = null + back = /obj/item/mod/control/pre_equipped/frontline/ert + backpack_contents = list(/obj/item/storage/box/nri_survival_pack, + /obj/item/construction/rcd/loaded/upgraded, + /obj/item/rcd_ammo/large, + /obj/item/advanced_choice_beacon/nri/engineer, + /obj/item/beamout_tool, + /obj/item/crucifix, + /obj/item/reagent_containers/cup/glass/waterbottle/large/cryptobiolin) + + l_hand = /obj/item/storage/belt/utility/full/powertools + r_hand = /obj/item/gun/ballistic/automatic/miecz + + id_trim = /datum/id_trim/nri/engineer + +/datum/outfit/centcom/ert/nri/major + name = "Novaya Rossiyskaya Imperiya Major" + head = null + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + ears = /obj/item/radio/headset/headset_cent/alt/with_key + mask = null + uniform = /obj/item/clothing/under/costume/russian_officer + suit = /obj/item/clothing/suit/jacket/officer/tan + suit_store = null + gloves = /obj/item/clothing/gloves/combat + belt = /obj/item/gun/ballistic/revolver/shotgun_revolver + back = /obj/item/storage/backpack/satchel/leather + backpack_contents = list(/obj/item/storage/box/nri_survival_pack, + /obj/item/ammo_box/advanced/s12gauge/express, + /obj/item/suppressor/standard, + /obj/item/knife/combat, + /obj/item/beamout_tool) + l_pocket = null + r_pocket = null + shoes = /obj/item/clothing/shoes/combat/swat + id = /obj/item/card/id/advanced/centcom/ert/nri + id_trim = /datum/id_trim/nri/diplomat/major + +/datum/outfit/centcom/ert/nri/scientist + name = "Novaya Rossiyskaya Imperiya Research Inspector" + head = null + glasses = /obj/item/clothing/glasses/regular + ears = /obj/item/radio/headset/headset_cent/alt/with_key + mask = null + uniform = /obj/item/clothing/under/rank/rnd/research_director + suit = /obj/item/clothing/suit/toggle/labcoat + suit_store = null + gloves = /obj/item/clothing/gloves/latex/nitrile + belt = /obj/item/clipboard + back = /obj/item/storage/backpack/satchel/leather + backpack_contents = list(/obj/item/storage/box/nri_survival_pack, + /obj/item/melee/baton/telescopic, + /obj/item/gun/energy/e_gun/mini, + /obj/item/beamout_tool) + l_pocket = null + r_pocket = null + shoes = /obj/item/clothing/shoes/sneakers/brown + id = /obj/item/card/id/advanced/centcom/ert/nri + id_trim = /datum/id_trim/nri/diplomat/scientist + +/datum/outfit/centcom/ert/nri/doctor + name = "Novaya Rossiyskaya Imperiya Medical Inspector" + head = null + glasses = /obj/item/clothing/glasses/hud/health + ears = /obj/item/radio/headset/headset_cent/alt/with_key + mask = null + uniform = /obj/item/clothing/under/rank/medical/chief_medical_officer + suit = /obj/item/clothing/suit/toggle/labcoat/cmo + suit_store = null + gloves = /obj/item/clothing/gloves/latex/nitrile + belt = /obj/item/clipboard + back = /obj/item/storage/backpack/satchel/leather + backpack_contents = list(/obj/item/storage/box/nri_survival_pack, + /obj/item/gun/ballistic/automatic/pistol/plasma_marksman, + /obj/item/ammo_box/magazine/recharge/plasma_battery, + /obj/item/ammo_box/magazine/recharge/plasma_battery, + /obj/item/storage/medkit/expeditionary, + /obj/item/melee/baton/telescopic, + /obj/item/beamout_tool) + l_pocket = null + r_pocket = null + shoes = /obj/item/clothing/shoes/sneakers/brown + id = /obj/item/card/id/advanced/centcom/ert/nri + id_trim = /datum/id_trim/nri/diplomat/doctor + +/datum/outfit/centcom/ert/nri/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + return + //Two reasons for this; one, Russians aren't NT and dont need implants used mostly for NT-sympathizers. Two, the HUD looks ugly with the blue mindshield outline. diff --git a/modular_nova/modules/novaya_ert/code/police_outfit.dm b/modular_nova/modules/novaya_ert/code/police_outfit.dm new file mode 100644 index 00000000000000..7266fd55857c71 --- /dev/null +++ b/modular_nova/modules/novaya_ert/code/police_outfit.dm @@ -0,0 +1,58 @@ +/obj/item/clothing/under/colonial/nri_police + name = "imperial police outfit" + desc = "Fancy blue durathread shirt and a pair of cotton-blend pants with a black synthleather belt. A time-tested design first employed by the NRI police's \ + precursor organisation, Rim-world Colonial Militia, now utilised by them as a tribute." + icon_state = "under_police" + armor_type = /datum/armor/clothing_under/rank_security + strip_delay = 5 SECONDS + sensor_mode = SENSOR_COORDS + random_sensor = FALSE + can_adjust = FALSE + +/obj/item/clothing/neck/cloak/colonial/nri_police + name = "imperial police cloak" + desc = "A cloak made from heavy tarpaulin. Nigh wind- and waterproof thanks to its design. The signature white rectangle of the NRI police covers the garment's back." + icon_state = "cloak_police" + +// Just some extra police equipment +/obj/item/clothing/neck/cloak/colonial/nri_police/Initialize() + allowed += list( + /obj/item/restraints/handcuffs, + /obj/item/ammo_box, + /obj/item/ammo_casing, + ) + return ..() + +/obj/item/clothing/head/hats/colonial/nri_police + name = "imperial police cap" + desc = "A puffy cap made out of tarpaulin covered by some textile. It is sturdy and comfortable, and seems to retain its form very well. <br>\ + Silver NRI police insignia is woven right above its visor." + icon_state = "cap_police" + armor_type = /datum/armor/cosmetic_sec + +/obj/item/clothing/mask/gas/nri_police + name = "imperial police mask" + desc = "A close-fitting tactical mask." + icon = 'modular_nova/modules/novaya_ert/icons/mask.dmi' + worn_icon = 'modular_nova/modules/novaya_ert/icons/wornmask.dmi' + worn_icon_digi = 'modular_nova/modules/novaya_ert/icons/wornmask_digi.dmi' + icon_state = "nri_police" + inhand_icon_state = "swat" + flags_inv = HIDEFACIALHAIR | HIDEFACE | HIDESNOUT + visor_flags_inv = 0 + flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES | PEPPERPROOF + visor_flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES | PEPPERPROOF + +/obj/item/clothing/head/helmet/nri_police + name = "imperial police helmet" + desc = "Thick-looking tactical helmet made out of shaped Plasteel. Colored dark blue, similar to one imperial police is commonly using." + icon_state = "police_helmet" + icon = 'modular_nova/modules/novaya_ert/icons/armor.dmi' + worn_icon = 'modular_nova/modules/novaya_ert/icons/wornarmor.dmi' + +/obj/item/clothing/suit/armor/vest/nri_police + name = "imperial police plate carrier" + desc = "A reasonably heavy, yet comfortable armor vest comprised of a bunch of dense plates. Colored dark blue and bears a reflective stripe on the front and back." + icon_state = "police_vest" + icon = 'modular_nova/modules/novaya_ert/icons/armor.dmi' + worn_icon = 'modular_nova/modules/novaya_ert/icons/wornarmor.dmi' diff --git a/modular_nova/modules/novaya_ert/code/shield.dm b/modular_nova/modules/novaya_ert/code/shield.dm new file mode 100644 index 00000000000000..d9ab321b40de96 --- /dev/null +++ b/modular_nova/modules/novaya_ert/code/shield.dm @@ -0,0 +1,25 @@ +/obj/item/shield/riot/pointman/nri + name = "heavy corpsman shield" + desc = "A shield designed for people that have to sprint to the rescue. Cumbersome as hell. Repair with plasteel." + icon_state = "riot" + icon = 'modular_nova/modules/novaya_ert/icons/riot.dmi' + lefthand_file = 'modular_nova/modules/novaya_ert/icons/riot_left.dmi' + righthand_file = 'modular_nova/modules/novaya_ert/icons/riot_right.dmi' + transparent = FALSE + +/obj/item/shield/riot/pointman/nri/shatter(mob/living/carbon/human/owner) + playsound(owner, 'sound/effects/glassbr3.ogg', 100) + new /obj/item/corpsman_broken((get_turf(src))) + + +/obj/item/corpsman_broken + name = "broken corpsman shield" + desc = "Might be able to be repaired with a welder." + icon_state = "riot_broken" + icon = 'modular_nova/modules/novaya_ert/icons/riot.dmi' + w_class = WEIGHT_CLASS_BULKY + +/obj/item/corpsman_broken/welder_act(mob/living/user, obj/item/I) + ..() + new /obj/item/shield/riot/pointman/nri((get_turf(src))) + qdel(src) diff --git a/modular_nova/modules/novaya_ert/code/suit.dm b/modular_nova/modules/novaya_ert/code/suit.dm new file mode 100644 index 00000000000000..8de9c6896f5209 --- /dev/null +++ b/modular_nova/modules/novaya_ert/code/suit.dm @@ -0,0 +1,94 @@ +#define NRI_POWERUSE_HIT 100 +#define NRI_POWERUSE_HEAL 150 + +#define NRI_COOLDOWN_HEAL (10 SECONDS) +#define NRI_COOLDOWN_RADS (20 SECONDS) +#define NRI_COOLDOWN_ACID (20 SECONDS) + +#define NRI_HEAL_AMOUNT 10 +#define NRI_BLOOD_REPLENISHMENT 20 + +/obj/item/clothing/suit/space/hev_suit/nri + name = "\improper VOSKHOD powered combat armor" + desc = "A hybrid set of space-resistant armor built on a modified mass-produced Nomex-Aerogel flight suit, polyurea coated durathread-lined light plasteel plates hinder mobility as little as possible while the onboard life support system aids the user in combat. The power cell is what makes the armor work without hassle, a sticker in the power supply unit warns anyone reading to responsibly manage battery levels." + icon = 'modular_nova/master_files/icons/obj/clothing/suits/spacesuit.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/spacesuit.dmi' + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi' + worn_icon_teshari = 'modular_nova/master_files/icons/mob/clothing/species/teshari/suit.dmi' + icon_state = "nri_soldier" + armor_type = /datum/armor/hev_suit_nri + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDESEXTOY|HIDETAIL + allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/energy/sword, /obj/item/restraints/handcuffs, /obj/item/tank/internals) + cell = /obj/item/stock_parts/cell/bluespace + actions_types = list(/datum/action/item_action/hev_toggle/nri, /datum/action/item_action/hev_toggle_notifs/nri, /datum/action/item_action/toggle_spacesuit) + resistance_flags = FIRE_PROOF|UNACIDABLE|ACID_PROOF|FREEZE_PROOF + clothing_flags = STOPSPRESSUREDAMAGE|SNUG_FIT|BLOCKS_SHOVE_KNOCKDOWN + + activation_song = null //No nice song. + + radio_channel = RADIO_CHANNEL_CENTCOM + + armor_unpowered = /datum/armor/hev_suit_nri + armor_powered = /datum/armor/hev_suit_nri/powered + heal_amount = NRI_HEAL_AMOUNT + blood_replenishment = NRI_BLOOD_REPLENISHMENT + health_static_cooldown = NRI_COOLDOWN_HEAL + rads_static_cooldown = NRI_COOLDOWN_RADS + acid_static_cooldown = NRI_COOLDOWN_ACID + suit_name = "VOSKHOD" + first_use = FALSE //No nice song. + + + +/datum/armor/hev_suit_nri + melee = 25 + bullet = 25 + laser = 25 + energy = 25 + bomb = 25 + bio = 25 + fire = 30 + acid = 30 + wound = 30 + consume = 10 + +/datum/armor/hev_suit_nri/powered + melee = 40 + bullet = 50 + laser = 30 + energy = 40 + bomb = 60 + bio = 75 + fire = 50 + acid = 50 + wound = 50 + consume = 40 + +/datum/action/item_action/hev_toggle/nri + name = "Toggle VOSKHOD Suit" + button_icon = 'modular_nova/modules/novaya_ert/icons/toggles.dmi' + background_icon_state = "bg_nri" + button_icon = 'modular_nova/modules/novaya_ert/icons/toggles.dmi' + button_icon_state = "toggle" + +/datum/action/item_action/hev_toggle_notifs/nri + name = "Toggle VOSKHOD Suit Notifications" + button_icon = 'modular_nova/modules/novaya_ert/icons/toggles.dmi' + background_icon_state = "bg_nri" + button_icon = 'modular_nova/modules/novaya_ert/icons/toggles.dmi' + button_icon_state = "sound" + +/obj/item/clothing/suit/space/hev_suit/nri/captain + name = "\improper VOSKHOD-2 powered combat armor" + desc = "A unique hybrid set of space-resistant armor made for high-ranking NRI operatives, built on a proprietary durathread padded, Akulan made Larr'Takh silk utility uniform. Polyurea coated hexagraphene-lined plastitanium plates hinder mobility as little as possible while the onboard life support system aids the user in combat. The power cell is what makes the armor work without hassle, a sticker in the power supply unit warns anyone reading to responsibly manage battery levels." + icon_state = "nri_captain" + +/obj/item/clothing/suit/space/hev_suit/nri/medic + name = "\improper VOSKHOD-KH powered combat armor" + desc = "A hybrid set of space-resistant armor built on a modified mass-produced Dipolyester-Aerogel surgeon field jumpsuit, polyurea coated titanium plates hinder mobility as little as possible while the onboard life support system aids the user in combat and provides additional medical functions. The power cell is what makes the armor work without hassle, a sticker in the power supply unit warns anyone reading to responsibly manage battery levels." + icon_state = "nri_medic" + +/obj/item/clothing/suit/space/hev_suit/nri/engineer + name = "\improper VOSKHOD-IN powered combat armor" + desc = "A hybrid set of space-resistant armor built on a modified Symphionia heavy-duty engineering undersuit, polyurea coated lead-lined light plasteel plates hinder mobility as little as possible and offer additional radiation protection while the onboard life support system aids the user in combat. The power cell is what makes the armor work without hassle, a sticker in the power supply unit warns anyone reading to responsibly manage battery levels." + icon_state = "nri_engineer" diff --git a/modular_skyrat/modules/novaya_ert/code/surplus_armor.dm b/modular_nova/modules/novaya_ert/code/surplus_armor.dm similarity index 92% rename from modular_skyrat/modules/novaya_ert/code/surplus_armor.dm rename to modular_nova/modules/novaya_ert/code/surplus_armor.dm index f14716f382f106..299eebe97ffdb4 100644 --- a/modular_skyrat/modules/novaya_ert/code/surplus_armor.dm +++ b/modular_nova/modules/novaya_ert/code/surplus_armor.dm @@ -36,8 +36,8 @@ /obj/item/clothing/head/helmet/cin_surplus_helmet name = "\improper GZ-03 combat helmet" desc = "An outdated service helmet previously used by CIN military forces. The design dates back to the years leading up to CIN - SolFed border war, and was in service until the advent of VOSKHOD powered armor becoming standard issue." - icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi' - worn_icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi' + icon = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi' + worn_icon = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi' icon_state = "helmet_plain" greyscale_config = /datum/greyscale_config/cin_surplus_helmet/object greyscale_config_worn = /datum/greyscale_config/cin_surplus_helmet @@ -114,8 +114,8 @@ /obj/item/clothing/under/syndicate/rus_army/cin_surplus name = "\improper CIN combat uniform" desc = "A CIN designed combat uniform that can come in any number of camouflauge variations. Despite this particular design being developed in the years leading up to the CIN-SolFed border war, the uniform is still in use by many member states to this day." - icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi' - worn_icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi' + icon = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi' + worn_icon = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi' icon_state = "undersuit_greyscale" greyscale_config = /datum/greyscale_config/cin_surplus_undersuit/object greyscale_config_worn = /datum/greyscale_config/cin_surplus_undersuit @@ -150,8 +150,8 @@ /obj/item/clothing/suit/armor/vest/cin_surplus_vest name = "\improper GZ-03 armor vest" desc = "An outdated armor vest previously used by CIN military forces. The design dates back to the years leading up to CIN - SolFed border war, and was in service until the advent of VOSKHOD powered armor becoming standard issue." - worn_icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi' - icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi' + worn_icon = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi' + icon = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi' icon_state = "vest_basic" armor_type = /datum/armor/cin_surplus_armor supports_variations_flags = CLOTHING_NO_VARIATION @@ -191,8 +191,8 @@ /obj/item/storage/belt/military/cin_surplus desc = "A tactical webbing often used by the CIN's military forces." - icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi' - worn_icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi' + icon = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi' + worn_icon = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi' icon_state = "chestrig" worn_icon_state = "chestrig" greyscale_config = /datum/greyscale_config/cin_surplus_chestrig/object @@ -228,8 +228,8 @@ /obj/item/storage/backpack/industrial/cin_surplus name = "\improper CIN military backpack" desc = "A rugged backpack often used by the CIN's military forces." - icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi' - worn_icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi' + icon = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi' + worn_icon = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi' icon_state = "backpack" greyscale_config = /datum/greyscale_config/cin_surplus_backpack/object greyscale_config_worn = /datum/greyscale_config/cin_surplus_backpack diff --git a/modular_skyrat/modules/novaya_ert/code/survival_pack.dm b/modular_nova/modules/novaya_ert/code/survival_pack.dm similarity index 96% rename from modular_skyrat/modules/novaya_ert/code/survival_pack.dm rename to modular_nova/modules/novaya_ert/code/survival_pack.dm index 48bd7c2e5ff54d..b071be9add5b92 100644 --- a/modular_skyrat/modules/novaya_ert/code/survival_pack.dm +++ b/modular_nova/modules/novaya_ert/code/survival_pack.dm @@ -2,7 +2,7 @@ name = "NRI survival pack" desc = "A box filled with useful emergency items, supplied by the NRI." icon_state = "survival_pack" - icon = 'modular_skyrat/modules/novaya_ert/icons/survival_pack.dmi' + icon = 'modular_nova/modules/novaya_ert/icons/survival_pack.dmi' illustration = null /obj/item/storage/box/nri_survival_pack/PopulateContents() diff --git a/modular_nova/modules/novaya_ert/code/toolbox.dm b/modular_nova/modules/novaya_ert/code/toolbox.dm new file mode 100644 index 00000000000000..e06e77950ac570 --- /dev/null +++ b/modular_nova/modules/novaya_ert/code/toolbox.dm @@ -0,0 +1,46 @@ +/obj/item/storage/toolbox/ammobox + desc = "It contains a few clips." + icon_state = "ammobox" + inhand_icon_state = "ammobox" + lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi' + has_latches = FALSE + drop_sound = 'sound/items/handling/ammobox_drop.ogg' + pickup_sound = 'sound/items/handling/ammobox_pickup.ogg' + +/obj/item/storage/toolbox/ammobox/full + var/ammo_type = null ///Type of mags/casings/clips we spawn in. + var/amount = 0 ///Amount of mags/casings/clips we spawn in. + +/obj/item/storage/toolbox/ammobox/full/PopulateContents() + if(!isnull(ammo_type)) + for(var/i in 1 to amount) + new ammo_type(src) + +/obj/item/storage/toolbox/ammobox/full/mosin + name = "ammo box (Sakhno)" + ammo_type = /obj/item/ammo_box/strilka310 + amount = 7 + +/obj/item/storage/toolbox/ammobox/full/krinkov + name = "ammo box (Krinkov)" + desc = "It contains a few magazines." + ammo_type = /obj/item/ammo_box/magazine/lanca + amount = 7 + +/obj/item/storage/toolbox/ammobox/full/nri_smg + name = "ammo box (QLP/04)" + ammo_type = /obj/item/ammo_box/magazine/miecz + amount = 7 + +/obj/item/storage/toolbox/ammobox/full/l6_saw + name = "ammo box (L6 SAW)" + desc = "It contains a few magazines." + ammo_type = /obj/item/ammo_box/magazine/m7mm + amount = 7 + +/obj/item/storage/toolbox/ammobox/full/aps + name = "ammo box (Szabo-Ivanek/APS)" + desc = "It contains a few magazines." + ammo_type = /obj/item/ammo_box/magazine/m9mm_aps + amount = 7 diff --git a/modular_nova/modules/novaya_ert/code/uniform.dm b/modular_nova/modules/novaya_ert/code/uniform.dm new file mode 100644 index 00000000000000..47f6aa1ccdaf31 --- /dev/null +++ b/modular_nova/modules/novaya_ert/code/uniform.dm @@ -0,0 +1,28 @@ +/obj/item/clothing/under/costume/nri //Copied from the russian outfit + name = "advanced imperial fatigues" + desc = "The latest in tactical and comfortable russian military outfits." + icon = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi' + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/uniform_digi.dmi' + worn_icon_teshari = 'modular_nova/master_files/icons/mob/clothing/species/teshari/uniform.dmi' + icon_state = "nri_soldier" + inhand_icon_state = "hostrench" + armor_type = /datum/armor/clothing_under/costume_nri + strip_delay = 50 + sensor_mode = SENSOR_COORDS + random_sensor = FALSE + can_adjust = FALSE + +/datum/armor/clothing_under/costume_nri + melee = 10 + fire = 30 + acid = 30 + +/obj/item/clothing/under/costume/nri/captain + icon_state = "nri_captain" + +/obj/item/clothing/under/costume/nri/medic + icon_state = "nri_medic" + +/obj/item/clothing/under/costume/nri/engineer + icon_state = "nri_engineer" diff --git a/modular_nova/modules/novaya_ert/icons/armor.dmi b/modular_nova/modules/novaya_ert/icons/armor.dmi new file mode 100644 index 00000000000000..fe291dd60416fd Binary files /dev/null and b/modular_nova/modules/novaya_ert/icons/armor.dmi differ diff --git a/modular_nova/modules/novaya_ert/icons/mask.dmi b/modular_nova/modules/novaya_ert/icons/mask.dmi new file mode 100644 index 00000000000000..3f2f2692126281 Binary files /dev/null and b/modular_nova/modules/novaya_ert/icons/mask.dmi differ diff --git a/modular_nova/modules/novaya_ert/icons/mod.dmi b/modular_nova/modules/novaya_ert/icons/mod.dmi new file mode 100644 index 00000000000000..f84d26bf2145d3 Binary files /dev/null and b/modular_nova/modules/novaya_ert/icons/mod.dmi differ diff --git a/modular_skyrat/modules/novaya_ert/icons/riot.dmi b/modular_nova/modules/novaya_ert/icons/riot.dmi similarity index 100% rename from modular_skyrat/modules/novaya_ert/icons/riot.dmi rename to modular_nova/modules/novaya_ert/icons/riot.dmi diff --git a/modular_skyrat/modules/novaya_ert/icons/riot_left.dmi b/modular_nova/modules/novaya_ert/icons/riot_left.dmi similarity index 100% rename from modular_skyrat/modules/novaya_ert/icons/riot_left.dmi rename to modular_nova/modules/novaya_ert/icons/riot_left.dmi diff --git a/modular_skyrat/modules/novaya_ert/icons/riot_right.dmi b/modular_nova/modules/novaya_ert/icons/riot_right.dmi similarity index 100% rename from modular_skyrat/modules/novaya_ert/icons/riot_right.dmi rename to modular_nova/modules/novaya_ert/icons/riot_right.dmi diff --git a/modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi b/modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi similarity index 100% rename from modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi rename to modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi diff --git a/modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_digi.dmi b/modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_digi.dmi similarity index 100% rename from modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_digi.dmi rename to modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_digi.dmi diff --git a/modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi b/modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi similarity index 100% rename from modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi rename to modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi diff --git a/modular_skyrat/modules/novaya_ert/icons/survival_pack.dmi b/modular_nova/modules/novaya_ert/icons/survival_pack.dmi similarity index 100% rename from modular_skyrat/modules/novaya_ert/icons/survival_pack.dmi rename to modular_nova/modules/novaya_ert/icons/survival_pack.dmi diff --git a/modular_skyrat/modules/novaya_ert/icons/toggles.dmi b/modular_nova/modules/novaya_ert/icons/toggles.dmi similarity index 100% rename from modular_skyrat/modules/novaya_ert/icons/toggles.dmi rename to modular_nova/modules/novaya_ert/icons/toggles.dmi diff --git a/modular_skyrat/modules/novaya_ert/icons/turret_deployable.dmi b/modular_nova/modules/novaya_ert/icons/turret_deployable.dmi similarity index 100% rename from modular_skyrat/modules/novaya_ert/icons/turret_deployable.dmi rename to modular_nova/modules/novaya_ert/icons/turret_deployable.dmi diff --git a/modular_nova/modules/novaya_ert/icons/wornarmor.dmi b/modular_nova/modules/novaya_ert/icons/wornarmor.dmi new file mode 100644 index 00000000000000..299cd1c9000140 Binary files /dev/null and b/modular_nova/modules/novaya_ert/icons/wornarmor.dmi differ diff --git a/modular_nova/modules/novaya_ert/icons/wornmask.dmi b/modular_nova/modules/novaya_ert/icons/wornmask.dmi new file mode 100644 index 00000000000000..c35c56883ef4f5 Binary files /dev/null and b/modular_nova/modules/novaya_ert/icons/wornmask.dmi differ diff --git a/modular_nova/modules/novaya_ert/icons/wornmask_digi.dmi b/modular_nova/modules/novaya_ert/icons/wornmask_digi.dmi new file mode 100644 index 00000000000000..c35c56883ef4f5 Binary files /dev/null and b/modular_nova/modules/novaya_ert/icons/wornmask_digi.dmi differ diff --git a/modular_nova/modules/novaya_ert/icons/wornmod.dmi b/modular_nova/modules/novaya_ert/icons/wornmod.dmi new file mode 100644 index 00000000000000..0ac1a2618ad3fc Binary files /dev/null and b/modular_nova/modules/novaya_ert/icons/wornmod.dmi differ diff --git a/modular_nova/modules/novaya_ert/readme.md b/modular_nova/modules/novaya_ert/readme.md new file mode 100644 index 00000000000000..590056df8a3311 --- /dev/null +++ b/modular_nova/modules/novaya_ert/readme.md @@ -0,0 +1,15 @@ +## Title: Novaya Rossiyskaya Imperiya Module + +MODULE ID: NRI STUFF + +### Description: + +Everything mainly NRI-related, from various cosmetic clothing to guns to ERTs. + +### Credits: +Gandalf2k15 - Code and some icons. +Stalkeros - Code and some icons. +Zydras - NRI police clothing, stun gun and NRI holobarriers icons. +Ramirez - Icons and idea. +Flavrius - Icons + misc. +Paxilmaniac - Surplus weapons and armor. diff --git a/modular_skyrat/modules/novaya_ert/sound/amr_fire.ogg b/modular_nova/modules/novaya_ert/sound/amr_fire.ogg similarity index 100% rename from modular_skyrat/modules/novaya_ert/sound/amr_fire.ogg rename to modular_nova/modules/novaya_ert/sound/amr_fire.ogg diff --git a/modular_skyrat/modules/novaya_ert/sound/flatline.ogg b/modular_nova/modules/novaya_ert/sound/flatline.ogg similarity index 100% rename from modular_skyrat/modules/novaya_ert/sound/flatline.ogg rename to modular_nova/modules/novaya_ert/sound/flatline.ogg diff --git a/modular_skyrat/modules/officestuff/code/officestuff.dm b/modular_nova/modules/officestuff/code/officestuff.dm similarity index 84% rename from modular_skyrat/modules/officestuff/code/officestuff.dm rename to modular_nova/modules/officestuff/code/officestuff.dm index a8a69b2ac2afe1..cb6b1cc93ca74d 100644 --- a/modular_skyrat/modules/officestuff/code/officestuff.dm +++ b/modular_nova/modules/officestuff/code/officestuff.dm @@ -1,6 +1,6 @@ /obj/structure/grandfatherclock name = "grandfather clock" - icon = 'modular_skyrat/modules/officestuff/icons/cowboyobh.dmi' + icon = 'modular_nova/modules/officestuff/icons/cowboyobh.dmi' icon_state = "grandfather_clock" desc = "Tick, tick, tick, tick. It stands tall and daunting, loudly and ominously ticking, yet the hands are stuck close to midnight, the closer you get, the louder a faint whisper becomes a scream, a plea, something, but whatever it is, it says 'I am the Master, and you will obey me.'" var/datum/looping_sound/grandfatherclock/soundloop @@ -19,7 +19,7 @@ // . += span_notice("The <b>screws</b> on the clock hands are loose, freely ticking away.") // door_status" = density ? "closed" : "open", /datum/looping_sound/grandfatherclock - mid_sounds = list('modular_skyrat/modules/officestuff/sound/clock_ticking.ogg' = 1) + mid_sounds = list('modular_nova/modules/officestuff/sound/clock_ticking.ogg' = 1) mid_length = 12 SECONDS volume = 10 @@ -37,19 +37,19 @@ if(do_after(user, 2 SECONDS, src)) soundloop = new(src, TRUE) balloon_alert(user, "hands unscrewed!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS return ..() balloon_alert(user, "screwing the hands...") if(do_after(user, 2 SECONDS, src)) QDEL_NULL(soundloop) balloon_alert(user, "hands screwed tight!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS return ..() /obj/structure/sign/painting/meat name = "Figure With Meat" desc = "A painting of a distorted figure, sitting between a cow cut in half." - icon = 'modular_skyrat/modules/officestuff/icons/cowboyobh.dmi' + icon = 'modular_nova/modules/officestuff/icons/cowboyobh.dmi' icon_state = "meat" sign_change_name = "Painting - Meat" is_editable = TRUE @@ -57,7 +57,7 @@ /obj/structure/sign/painting/parting name = "Parting Waves" desc = "A painting of a parting sea, the red sun washes over the blue ocean." - icon = 'modular_skyrat/modules/officestuff/icons/cowboyobh.dmi' + icon = 'modular_nova/modules/officestuff/icons/cowboyobh.dmi' icon_state = "jmwt4" is_editable = TRUE sign_change_name = "Painting - Waves" @@ -66,7 +66,7 @@ /obj/structure/sign/paint name = "painting" desc = "you shouldn't be seeing this." - icon = 'modular_skyrat/modules/officestuff/icons/cowboyobh.dmi' + icon = 'modular_nova/modules/officestuff/icons/cowboyobh.dmi' icon_state = "gravestone" diff --git a/modular_skyrat/modules/officestuff/icons/cowboyobh.dmi b/modular_nova/modules/officestuff/icons/cowboyobh.dmi similarity index 100% rename from modular_skyrat/modules/officestuff/icons/cowboyobh.dmi rename to modular_nova/modules/officestuff/icons/cowboyobh.dmi diff --git a/modular_skyrat/modules/officestuff/sound/clock_ticking.ogg b/modular_nova/modules/officestuff/sound/clock_ticking.ogg similarity index 100% rename from modular_skyrat/modules/officestuff/sound/clock_ticking.ogg rename to modular_nova/modules/officestuff/sound/clock_ticking.ogg diff --git a/modular_skyrat/modules/oneclickantag/code/oneclickantag.dm b/modular_nova/modules/oneclickantag/code/oneclickantag.dm similarity index 92% rename from modular_skyrat/modules/oneclickantag/code/oneclickantag.dm rename to modular_nova/modules/oneclickantag/code/oneclickantag.dm index e971d291ace054..8c88de43768499 100644 --- a/modular_skyrat/modules/oneclickantag/code/oneclickantag.dm +++ b/modular_nova/modules/oneclickantag/code/oneclickantag.dm @@ -31,6 +31,8 @@ src.add_antag_datum(/datum/antagonist/brother, team) if(ROLE_HERETIC) src.add_antag_datum(/datum/antagonist/heretic) + if(ROLE_DRIFTING_CONTRACTOR) + src.add_antag_datum(/datum/antagonist/contractor) else message_admins("[src] could not be turned into [antagtype] as it is not implemented; blame coders.") return FALSE @@ -146,7 +148,6 @@ If anyone can figure out how to get Obsessed to work I would be very appreciativ var/datum/team/brother_team/team if(antagtype == ROLE_BROTHER) team = new - team.pick_meeting_area() team.forge_brother_objectives() var/list/restricted_jobs = antag_get_protected_roles(antagtype) var/list/mob/living/carbon/human/candidates = list() @@ -197,7 +198,12 @@ If anyone can figure out how to get Obsessed to work I would be very appreciativ return FALSE /datum/admins/proc/make_wizard() - var/list/mob/dead/observer/candidates = poll_ghost_candidates("Do you wish to be considered for the position of a Wizard Foundation 'diplomat'?", ROLE_WIZARD, null) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates( + "Do you wish to be considered for the position of a Wizard Foundation 'diplomat'?", + role = ROLE_WIZARD, + pic_source = /obj/item/clothing/head/wizard, + role_name_text = "wizard", + ) var/mob/living/carbon/human/target do var/mob/dead/observer/selected = pick_n_take(candidates) @@ -212,7 +218,13 @@ If anyone can figure out how to get Obsessed to work I would be very appreciativ return TRUE /datum/admins/proc/make_nukies(maxCount = 5) - var/list/mob/dead/observer/candidates = poll_ghost_candidates("Do you wish to be considered for a nuke team being sent in?", ROLE_OPERATIVE, null) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates( + "Do you wish to be considered for a nuke team being sent in?", + role = ROLE_OPERATIVE, + poll_time = 30 SECONDS, + pic_source = /obj/structure/sign/poster/contraband/gorlex_recruitment, + role_name_text = "syndicate operative", + ) var/list/mob/dead/observer/chosen = list() var/mob/dead/observer/theghost = null if(candidates.len) diff --git a/modular_skyrat/modules/opposing_force/code/admin_procs.dm b/modular_nova/modules/opposing_force/code/admin_procs.dm similarity index 100% rename from modular_skyrat/modules/opposing_force/code/admin_procs.dm rename to modular_nova/modules/opposing_force/code/admin_procs.dm diff --git a/modular_skyrat/modules/opposing_force/code/antagonist.dm b/modular_nova/modules/opposing_force/code/antagonist.dm similarity index 100% rename from modular_skyrat/modules/opposing_force/code/antagonist.dm rename to modular_nova/modules/opposing_force/code/antagonist.dm diff --git a/modular_skyrat/modules/opposing_force/code/dynamic.dm b/modular_nova/modules/opposing_force/code/dynamic.dm similarity index 100% rename from modular_skyrat/modules/opposing_force/code/dynamic.dm rename to modular_nova/modules/opposing_force/code/dynamic.dm diff --git a/modular_nova/modules/opposing_force/code/equipment/ammo.dm b/modular_nova/modules/opposing_force/code/equipment/ammo.dm new file mode 100644 index 00000000000000..32ec19d281185c --- /dev/null +++ b/modular_nova/modules/opposing_force/code/equipment/ammo.dm @@ -0,0 +1,95 @@ +/datum/opposing_force_equipment/ammo_exotic + category = OPFOR_EQUIPMENT_CATEGORY_AMMO_EXOTIC + +/datum/opposing_force_equipment/ammo_exotic/rubber27_54 + description = "A box of .27-54 Cesarzowa Rubber rounds, useful for incapacitating targets without causing too much extra harm." + item_type = /obj/item/ammo_box/c27_54cesarzowa/rubber + +/datum/opposing_force_equipment/ammo_exotic/ripper35 + description = "A box of .35 Sol rounds, hollow-tipped for maximum damage against NON-ARMOURED combatants." + item_type = /obj/item/ammo_box/c35sol/ripper + +/datum/opposing_force_equipment/ammo_exotic/pierce40 + description = "A box of .40 Sol Match rounds, works best against armoured combatants; the box has a warning about being careful for collateral damage." + item_type = /obj/item/ammo_box/c40sol/pierce + +/datum/opposing_force_equipment/ammo_exotic/fire40 + description = "A box of .40 Sol Incendiary rounds, bullet impacts light the victims aflame." + item_type = /obj/item/ammo_box/c40sol/incendiary + +/datum/opposing_force_equipment/ammo_exotic/frag40 + description = "A box of .40 Sol Fragmentation rounds, useful for incapacitating your victim ASAP, no matter if they live or die." + item_type = /obj/item/ammo_box/c40sol/fragmentation + +/datum/opposing_force_equipment/ammo_exotic/rubber310 + description = "A box of .310 Strilka Rubber rounds, useful for incapacitating targets without causing too much extra harm." + item_type = /obj/item/ammo_box/c310_cargo_box/rubber + +/datum/opposing_force_equipment/ammo_exotic/pierce310 + description = "A box of .310 Strilka Piercing rounds, useful against armored combatants." + item_type = /obj/item/ammo_box/c310_cargo_box/piercing + +/datum/opposing_force_equipment/ammo_exotic/magnum + description = "A box of magnum flechette shotgun shells, the first choice munition of many shotgun fanatics." + item_type = /obj/item/ammo_box/advanced/s12gauge/magnum + +/datum/opposing_force_equipment/ammo_exotic/express + description = "A box of express buckshot shotgun shells, for when the regular shells can't keep up with you." + item_type = /obj/item/ammo_box/advanced/s12gauge/express + +/datum/opposing_force_equipment/ammo_exotic/flechette + description = "A box of flechette shotgun shells, tighter spread than buckshot plus more armour damage." + item_type = /obj/item/ammo_box/advanced/s12gauge/flechette + +/datum/opposing_force_equipment/ammo_exotic/incendiary + description = "A box of dargonsbreath shotgun shells, highly underrated in the hands of someone who knows not to step forward after firing." + item_type = /obj/item/ammo_box/advanced/s12gauge/incendiary + +/datum/opposing_force_equipment/ammo_exotic/slug + description = "A box of slug shotgun shells, fires only one big fuck-off bullet that wounds extra hard." + item_type = /obj/item/ammo_box/advanced/s12gauge + +/datum/opposing_force_equipment/ammo_exotic/hornet + description = "A box of hornet's nest shotgun shells, a less-lethal pellet spread that bounces towards targets off of walls." + item_type = /obj/item/ammo_box/advanced/s12gauge/beehive + +/datum/opposing_force_equipment/ammo_exotic/stardust + description = "A box of stardust shotgun shells, a less-lethal spread of embedding electrodes that tire targets that move." + item_type = /obj/item/ammo_box/advanced/s12gauge/antitide + +/datum/opposing_force_equipment/ammo_exotic/a357phasic + description = "A speedloader of .357 that ignores structure collision at the cost of some damage." + admin_note = "Bullets ignore walls, has a damage penalty." + item_type = /obj/item/ammo_box/a357/phasic + +/datum/opposing_force_equipment/ammo_exotic/a357heartseeker + description = "A speedloader of .357 with homing capabilities." + item_type = /obj/item/ammo_box/a357/heartseeker + +/datum/opposing_force_equipment/ammo_exotic/a357peacemaker + description = "A speedloader of .357 that have their impact lessened to highten the odds for ricochet shots." + item_type = /obj/item/ammo_box/a357/peacemaker + +/datum/opposing_force_equipment/ammo_exotic/ap45 + description = "An smg magazine of armour piercing .45, used by the c20-r." + item_type = /obj/item/ammo_box/magazine/smgm45/ap + +/datum/opposing_force_equipment/ammo_exotic/hp45 + description = "An smg magazine of hollow point .45, used by the c20-r." + item_type = /obj/item/ammo_box/magazine/smgm45/hp + +/datum/opposing_force_equipment/ammo_exotic/incen45 + description = "An smg magazine of incendiary .45, used by the c20-r." + item_type = /obj/item/ammo_box/magazine/smgm45/incen + +/datum/opposing_force_equipment/ammo_exotic/ap9mm + description = "An smg magazine of armour piercing 9mm, used by the makarov." + item_type = /obj/item/ammo_box/magazine/m9mm/ap + +/datum/opposing_force_equipment/ammo_exotic/hp9mm + description = "An smg magazine of hollow point 9mm, used by the makarov." + item_type = /obj/item/ammo_box/magazine/m9mm/hp + +/datum/opposing_force_equipment/ammo_exotic/incen9mm + description = "An smg magazine of incendiary 9mm, used by the makarov." + item_type = /obj/item/ammo_box/magazine/m9mm/fire diff --git a/modular_skyrat/modules/opposing_force/code/equipment/biology.dm b/modular_nova/modules/opposing_force/code/equipment/biology.dm similarity index 100% rename from modular_skyrat/modules/opposing_force/code/equipment/biology.dm rename to modular_nova/modules/opposing_force/code/equipment/biology.dm diff --git a/modular_skyrat/modules/opposing_force/code/equipment/bombs.dm b/modular_nova/modules/opposing_force/code/equipment/bombs.dm similarity index 100% rename from modular_skyrat/modules/opposing_force/code/equipment/bombs.dm rename to modular_nova/modules/opposing_force/code/equipment/bombs.dm diff --git a/modular_nova/modules/opposing_force/code/equipment/clothing.dm b/modular_nova/modules/opposing_force/code/equipment/clothing.dm new file mode 100644 index 00000000000000..95466b52fe2589 --- /dev/null +++ b/modular_nova/modules/opposing_force/code/equipment/clothing.dm @@ -0,0 +1,339 @@ +/datum/opposing_force_equipment/clothing_syndicate + category = OPFOR_EQUIPMENT_CATEGORY_CLOTHING_SYNDICATE + +/datum/opposing_force_equipment/clothing_syndicate/operative + name = "Syndicate Operative" + description = "A tried classic outfit, sporting versatile defensive gear, tactical webbing, a comfortable turtleneck, and even an emergency space-suit box." + item_type = /obj/item/storage/backpack/duffelbag/syndie/operative + +/obj/item/storage/backpack/duffelbag/syndie/operative/PopulateContents() //basically old insurgent bundle -nukie mod + new /obj/item/clothing/under/syndicate/nova/tactical(src) + new /obj/item/clothing/under/syndicate/nova/tactical/skirt(src) + new /obj/item/clothing/suit/armor/bulletproof(src) + new /obj/item/clothing/shoes/combat(src) + new /obj/item/clothing/gloves/tackler/combat(src) + new /obj/item/clothing/mask/gas/syndicate(src) + new /obj/item/storage/belt/military(src) + new /obj/item/radio/headset/syndicate/alt(src) + new /obj/item/card/id/advanced/chameleon(src) + new /obj/item/clothing/glasses/sunglasses(src) + new /obj/item/storage/box/syndie_kit/space_suit(src) + +/datum/opposing_force_equipment/clothing_syndicate/engineer + name = "Syndicate Engineer" + description = "A spin on the classic outfit, for those whose hands are never clean. Trades defensive choices for utility. Comes with an emergency space-suit box." + item_type = /obj/item/storage/backpack/duffelbag/syndie/engineer + +/obj/item/storage/backpack/duffelbag/syndie/engineer/PopulateContents() + new /obj/item/clothing/under/syndicate/nova/overalls(src) + new /obj/item/clothing/under/syndicate/nova/overalls/skirt(src) + new /obj/item/clothing/suit/armor/bulletproof(src) + new /obj/item/clothing/shoes/combat(src) + new /obj/item/clothing/gloves/combat(src) + new /obj/item/clothing/mask/gas/syndicate(src) + new /obj/item/storage/belt/utility/syndicate(src) + new /obj/item/radio/headset/syndicate/alt(src) + new /obj/item/card/id/advanced/chameleon(src) + new /obj/item/clothing/glasses/meson/night(src) + new /obj/item/storage/box/syndie_kit/space_suit(src) + +/datum/opposing_force_equipment/clothing_syndicate/spy + name = "Syndicate Spy" + description = "They don't have to know who you are, and they won't. Comes with emergency space-suit box." + item_type = /obj/item/storage/backpack/duffelbag/syndie/spy + +/obj/item/storage/backpack/duffelbag/syndie/spy/PopulateContents() + new /obj/item/clothing/under/suit/black/armoured(src) + new /obj/item/clothing/under/suit/black/skirt/armoured(src) + new /obj/item/clothing/suit/jacket/det_suit/noir/armoured(src) + new /obj/item/storage/belt/holster/detective/dark(src) + new /obj/item/clothing/head/frenchberet/armoured(src) + new /obj/item/clothing/shoes/laceup(src) + new /obj/item/clothing/neck/tie/red/hitman(src) + new /obj/item/clothing/mask/gas/syndicate/ds(src) //a red spy is in the base + new /obj/item/radio/headset/syndicate/alt(src) + new /obj/item/card/id/advanced/chameleon(src) + new /obj/item/clothing/glasses/sunglasses(src) + new /obj/item/hhmirror/syndie(src) + new /obj/item/storage/box/syndie_kit/space_suit(src) + +/datum/opposing_force_equipment/clothing_syndicate/maid + name = "Syndicate Maid" + description = "..." + item_type = /obj/item/storage/backpack/duffelbag/syndie/maid + +/obj/item/storage/backpack/duffelbag/syndie/maid/PopulateContents() //by far the weakest bundle + new /obj/item/clothing/under/syndicate/nova/maid(src) + new /obj/item/clothing/gloves/combat/maid(src) + new /obj/item/clothing/head/costume/maidheadband/syndicate(src) + new /obj/item/clothing/shoes/laceup(src) + new /obj/item/radio/headset/syndicate/alt(src) + new /obj/item/card/id/advanced/chameleon(src) + +/datum/opposing_force_equipment/clothing_syndicate/cybersun_operative + name = "Cybersun Operative" + description = "For the most covert of ops. Comes with emergency space-suit box." + item_type = /obj/item/storage/backpack/duffelbag/syndie/cybersun_operative + +/obj/item/storage/backpack/duffelbag/syndie/cybersun_operative/PopulateContents() //drip maxxed + new /obj/item/clothing/under/syndicate/combat(src) + new /obj/item/clothing/suit/armor/bulletproof(src) + new /obj/item/clothing/shoes/combat(src) + new /obj/item/clothing/gloves/combat(src) + new /obj/item/clothing/mask/gas/sechailer/syndicate(src) + new /obj/item/clothing/glasses/meson/night(src) + new /obj/item/storage/belt/military/assault(src) + new /obj/item/radio/headset/syndicate/alt(src) + new /obj/item/card/id/advanced/chameleon(src) + new /obj/item/storage/box/syndie_kit/space_suit(src) + +/datum/opposing_force_equipment/clothing_syndicate/cybersun_hacker + name = "Cybersun Hacker" + description = "Some space-farers believe the infamous Space Ninja is no longer around, and they are wrong." + item_type = /obj/item/storage/backpack/duffelbag/syndie/cybersun_hacker + +/obj/item/storage/backpack/duffelbag/syndie/cybersun_hacker/PopulateContents() + new /obj/item/clothing/under/syndicate/ninja(src) + new /obj/item/clothing/shoes/combat(src) + new /obj/item/clothing/gloves/combat(src) + new /obj/item/clothing/mask/gas/ninja(src) + new /obj/item/clothing/glasses/hud/health/night/meson(src) //damn its sexy + new /obj/item/storage/belt/military/assault(src) + new /obj/item/radio/headset/syndicate/alt(src) + new /obj/item/card/id/advanced/chameleon(src) + +/datum/opposing_force_equipment/clothing_syndicate/lone_gunman + name = "Lone Gunman" + description = "My name is not important." + admin_note = "Looks unarmoured, yet is very armoured" + item_type = /obj/item/storage/backpack/duffelbag/syndie/lone_gunman + +/obj/item/storage/backpack/duffelbag/syndie/lone_gunman/PopulateContents() + new /obj/item/clothing/under/pants/track/robohand(src) + new /obj/item/clothing/glasses/sunglasses/robohand(src) + new /obj/item/clothing/suit/jacket/trenchcoat/gunman(src) + new /obj/item/clothing/shoes/combat(src) + new /obj/item/radio/headset/syndicate/alt(src) + new /obj/item/card/id/advanced/chameleon(src) + + +/datum/opposing_force_equipment/clothing_sol + category = OPFOR_EQUIPMENT_CATEGORY_CLOTHING_SOL + +/datum/opposing_force_equipment/clothing_sol/sol_militant + name = "Sol Militant" + description = "There is a war being fought, and its taking place right here." + admin_note = "Uniquely strong power armour." + item_type = /obj/item/storage/backpack/ert/odst/hecu/sol_militant + +/obj/item/storage/backpack/ert/odst/hecu/sol_militant/PopulateContents() + new /obj/item/clothing/under/rank/security/officer/hecu(src) + new /obj/item/clothing/suit/space/hev_suit/pcv(src) + new /obj/item/clothing/head/helmet/space/hev_suit/pcv(src) + new /obj/item/storage/belt/military/assault/hecu(src) + new /obj/item/clothing/mask/gas/hecu2(src) + new /obj/item/clothing/shoes/combat(src) + new /obj/item/clothing/gloves/combat(src) + new /obj/item/clothing/glasses/night(src) + new /obj/item/radio/headset/syndicate/alt(src) + new /obj/item/card/id/advanced/chameleon(src) + +/datum/opposing_force_equipment/clothing_sol/dogginos + name = "Dogginos Courier" + description = "You're just doing your job." + item_type = /obj/item/storage/backpack/satchel/leather/dogginos + +/obj/item/storage/backpack/satchel/leather/dogginos/PopulateContents() + new /obj/item/clothing/under/pizza(src) + new /obj/item/clothing/suit/pizzaleader(src) + new /obj/item/clothing/suit/toggle/jacket/hoodie/pizza(src) + new /obj/item/clothing/head/pizza(src) + new /obj/item/clothing/head/soft/red(src) + new /obj/item/clothing/glasses/regular/betterunshit(src) + new /obj/item/clothing/mask/fakemoustache/italian(src) + new /obj/item/clothing/shoes/sneakers/red(src) + new /obj/item/radio/headset/headset_cent/impostorsr(src) + new /obj/item/card/id/advanced/chameleon(src) + +/datum/opposing_force_equipment/clothing_sol/impostor + name = "CentCom Impostor" + description = "Don't ask us how we got this. Comes with special agent ID pre-equipped with COMMAND access." + item_type = /obj/item/storage/backpack/duffelbag/syndie/impostor + +/obj/item/storage/backpack/duffelbag/syndie/impostor/PopulateContents() + new /obj/item/clothing/under/rank/centcom/officer(src) + new /obj/item/clothing/under/rank/centcom/officer_skirt(src) + new /obj/item/clothing/head/hats/centcom_cap(src) + new /obj/item/clothing/suit/armor/centcom_formal(src) + new /obj/item/clothing/shoes/combat(src) + new /obj/item/radio/headset/headset_cent/impostorsr(src) + new /obj/item/clothing/glasses/sunglasses(src) + new /obj/item/clipboard(src) + new /obj/item/card/id/advanced/chameleon/impostorsr(src) //this thing has bridge access, and no one knows about that + new /obj/item/stamp/centcom(src) + new /obj/item/clothing/gloves/combat(src) + + +/datum/opposing_force_equipment/clothing_pirate + category = OPFOR_EQUIPMENT_CATEGORY_CLOTHING_PIRATE + +/datum/opposing_force_equipment/clothing_pirate/space_pirate + name = "Space Pirate" + description = "Did you fall overboard?" + item_type = /obj/item/storage/backpack/duffelbag/syndie/space_pirate + +/obj/item/storage/backpack/duffelbag/syndie/space_pirate/PopulateContents() + new /obj/item/clothing/under/costume/pirate(src) + new /obj/item/clothing/suit/space/pirate(src) + new /obj/item/clothing/head/helmet/space/pirate(src) + new /obj/item/clothing/head/costume/pirate/armored(src) + new /obj/item/clothing/shoes/pirate/armored(src) + new /obj/item/clothing/glasses/eyepatch(src) + new /obj/item/radio/headset/syndicate/alt(src) + new /obj/item/card/id/advanced/chameleon(src) + +/datum/opposing_force_equipment/clothing_pirate/akula + name = "Azulean Boarder" + description = "Advanced Azulean pirate gear, akin to riot-armour yet space-proofed. Never take on an Azulean boarder in zero-gravity." + admin_note = "Uniquely spaceproofed." + item_type = /obj/item/storage/backpack/duffelbag/syndie/akula + +/obj/item/storage/backpack/duffelbag/syndie/akula/PopulateContents() + new /obj/item/clothing/under/skinsuit(src) + new /obj/item/clothing/suit/armor/riot/skinsuit_armor(src) + new /obj/item/clothing/head/helmet/space/skinsuit_helmet(src) + new /obj/item/clothing/gloves/tackler/combat(src) //tackles in space + new /obj/item/clothing/shoes/combat(src) + new /obj/item/storage/belt/military(src) + new /obj/item/radio/headset/syndicate/alt(src) + new /obj/item/card/id/advanced/chameleon(src) + +/datum/opposing_force_equipment/clothing_pirate/nri_soldier + name = "NRI Soldier" + description = "The station failed the inspection, now they have to deal with you." + item_type = /obj/item/storage/backpack/industrial/cin_surplus/forest/nri_soldier + +/obj/item/storage/backpack/industrial/cin_surplus/forest/nri_soldier/PopulateContents() + new /obj/item/clothing/under/syndicate/rus_army(src) + new /obj/item/clothing/shoes/combat(src) + new /obj/item/clothing/gloves/tackler/combat(src) + new /obj/item/clothing/mask/gas/hecu2(src) + new /obj/item/clothing/suit/armor/vest/marine(src) + new /obj/item/clothing/head/beret/sec/nri(src) + new /obj/item/storage/belt/military/nri/plus_mre(src) + new /obj/item/radio/headset/syndicate/alt(src) + new /obj/item/card/id/advanced/chameleon(src) + new /obj/item/clothing/glasses/sunglasses(src) + +/datum/opposing_force_equipment/clothing_pirate/heister + name = "Professional" + description = "It's payday." + admin_note = "Has uniquely strong armour." + item_type = /obj/item/storage/backpack/duffelbag/syndie/heister + +/obj/item/storage/backpack/duffelbag/syndie/heister/PopulateContents() + var/obj/item/clothing/new_mask = new /obj/item/clothing/mask/gas/clown_hat(src) //-animal mask +clow mask + new_mask.set_armor(new_mask.get_armor().generate_new_with_specific(list( + MELEE = 30, + BULLET = 25, + LASER = 25, + ENERGY = 25, + BOMB = 0, + BIO = 0, + FIRE = 100, + ACID = 100, + ))) + new /obj/item/storage/box/syndie_kit/space_suit(src) + new /obj/item/clothing/gloves/latex/nitrile/heister(src) + new /obj/item/clothing/under/suit/black(src) + new /obj/item/clothing/under/suit/black/skirt(src) + new /obj/item/clothing/neck/tie/red/hitman(src) + new /obj/item/clothing/shoes/laceup(src) + new /obj/item/clothing/suit/jacket/det_suit/noir/heister(src) + new /obj/item/clothing/glasses/sunglasses(src) + new /obj/item/radio/headset/syndicate/alt(src) + new /obj/item/card/id/advanced/chameleon(src) + new /obj/item/restraints/handcuffs/cable/zipties(src) + new /obj/item/restraints/handcuffs/cable/zipties(src) + + +/datum/opposing_force_equipment/clothing_magic + category = OPFOR_EQUIPMENT_CATEGORY_CLOTHING_MAGIC + +/datum/opposing_force_equipment/clothing_magic/wizard + name = "Wizard" + description = "Basic colored wizard attire." + item_type = /obj/item/storage/backpack/satchel/leather/wizard + +/obj/item/storage/backpack/satchel/leather/wizard/PopulateContents() + switch(pick(list("yellow", "blue", "red", "black"))) + if("yellow") + new /obj/item/clothing/head/wizard/yellow(src) + new /obj/item/clothing/suit/wizrobe/yellow(src) + if("blue") + new /obj/item/clothing/head/wizard(src) + new /obj/item/clothing/suit/wizrobe(src) + if("red") + new /obj/item/clothing/head/wizard/red(src) + new /obj/item/clothing/suit/wizrobe/red(src) + if("black") + new /obj/item/clothing/head/wizard/black(src) + new /obj/item/clothing/suit/wizrobe/black(src) + new /obj/item/staff(src) + new /obj/item/clothing/shoes/sandal/magic(src) + new /obj/item/radio/headset/syndicate/alt(src) + new /obj/item/card/id/advanced/chameleon(src) + +/datum/opposing_force_equipment/clothing_magic/wizard_broom + name = "Broom Wizard" + description = "A wizard with a broom, technically a witch." + item_type = /obj/item/storage/backpack/satchel/leather/wizard_broom + +/obj/item/storage/backpack/satchel/leather/wizard_broom/PopulateContents() + new /obj/item/clothing/suit/wizrobe/marisa(src) + new /obj/item/clothing/head/wizard/marisa(src) + new /obj/item/staff/broom(src) + new /obj/item/clothing/shoes/sneakers/marisa(src) + new /obj/item/radio/headset/syndicate/alt(src) + new /obj/item/card/id/advanced/chameleon(src) + +/datum/opposing_force_equipment/clothing_magic/wizard_tape + name = "Tape Wizard" + description = "A wizard outfit, but hand-crafted. Very nice." + item_type = /obj/item/storage/backpack/satchel/leather/wizard_tape + +/obj/item/storage/backpack/satchel/leather/wizard_tape/PopulateContents() + new /obj/item/clothing/suit/wizrobe/tape(src) + new /obj/item/clothing/head/wizard/tape(src) + new /obj/item/staff/tape(src) + new /obj/item/clothing/shoes/sandal/magic(src) + new /obj/item/radio/headset/syndicate/alt(src) + new /obj/item/card/id/advanced/chameleon(src) + +/datum/opposing_force_equipment/clothing_magic/zealot + name = "Zealot" + description = "Spell-casting is outlawed, not like that'll stop you though." + item_type = /obj/item/storage/backpack/satchel/leather/zealot + +/obj/item/storage/backpack/satchel/leather/zealot/PopulateContents() + new /obj/item/clothing/suit/hooded/cultrobes/eldritch(src) + new /obj/item/clothing/glasses/hud/health/night/cultblind_unrestricted(src) + new /obj/item/clothing/shoes/cult(src) + new /obj/item/radio/headset/syndicate/alt(src) + new /obj/item/card/id/advanced/chameleon(src) + +/datum/opposing_force_equipment/clothing_magic/narsian + name = "Nar'Sien Prophet" + description = "An overshadowed cult following, whom incidentally thrive best in the dark." + item_type = /obj/item/storage/backpack/satchel/leather/narsian + +/obj/item/storage/backpack/satchel/leather/narsian/PopulateContents() + new /obj/item/clothing/suit/hooded/cultrobes/hardened(src) + new /obj/item/clothing/head/hooded/cult_hoodie/hardened(src) + new /obj/item/clothing/glasses/hud/health/night/cultblind_unrestricted/narsie(src) + new /obj/item/clothing/shoes/cult/alt(src) + new /obj/item/bedsheet/cult(src) + new /obj/item/radio/headset/syndicate/alt(src) + new /obj/item/card/id/advanced/chameleon(src) + + diff --git a/modular_skyrat/modules/opposing_force/code/equipment/equip_parent.dm b/modular_nova/modules/opposing_force/code/equipment/equip_parent.dm similarity index 100% rename from modular_skyrat/modules/opposing_force/code/equipment/equip_parent.dm rename to modular_nova/modules/opposing_force/code/equipment/equip_parent.dm diff --git a/modular_skyrat/modules/opposing_force/code/equipment/gadgets.dm b/modular_nova/modules/opposing_force/code/equipment/gadgets.dm similarity index 87% rename from modular_skyrat/modules/opposing_force/code/equipment/gadgets.dm rename to modular_nova/modules/opposing_force/code/equipment/gadgets.dm index 0a81d7fb918329..472351c63d39e4 100644 --- a/modular_skyrat/modules/opposing_force/code/equipment/gadgets.dm +++ b/modular_nova/modules/opposing_force/code/equipment/gadgets.dm @@ -22,13 +22,9 @@ item_type = /obj/item/storage/box/syndie_kit/nuke /datum/opposing_force_equipment/gadget/holoparasite - item_type = /obj/item/guardiancreator/tech/choose/traitor + item_type = /obj/item/guardian_creator/tech/choose/traitor admin_note = "Lets a ghost take control of a guardian spirit bound to the user. RRs both the ghost and user on death." -/datum/opposing_force_equipment/gadget/stimpack - name = "Stimulant Medipen" - item_type = /obj/item/reagent_containers/hypospray/medipen/stimulants - /datum/opposing_force_equipment/gadget/gorilla_cubes name = "Box of Gorilla Cubes" item_type = /obj/item/storage/box/gorillacubes @@ -41,21 +37,6 @@ description = "A disposable sentry gun deployment system cleverly disguised as a toolbox, apply wrench for functionality." admin_note = "Needs a combat-wrench to be used." -/datum/opposing_force_equipment/gadget/combatmedkit - name = "Syndicate Combat Medic Kit" - item_type = /obj/item/storage/medkit/tactical - description = "This first aid kit is a suspicious black and red. Included is a number of atropine medipens \ - for rapid stabilization, sutures and regenerative mesh for wound treatment, and patches \ - for faster healing on the field. Also comes with basic medical tools and sterlizer." - -/datum/opposing_force_equipment/gadget/combatmedkit_premium - name = "Syndicate Combat Medical Suite" - item_type = /obj/item/storage/medkit/tactical/premium - description = "This first aid kit is a suspicious black and red. Included is an unloaded combat chemical injector \ - for suit-penetrative chem delivery, a medical science night vision HUD for quick identification of injured personnel and chemical supplies, \ - improved medical supplies, including Interdyne-approved pharmaceuticals, a hacked cybernetic surgery toolset arm implant, \ - and some helpful MODsuit modules for for field medical use and operative physiopharmaceutical augmentation." - /datum/opposing_force_equipment/gadget/hypnoflash name = "Hypnotic Flash" item_type = /obj/item/assembly/flash/hypnotic @@ -93,6 +74,11 @@ description = "Based on a Nanotrasen model, this powerful tool can be used as both a crowbar and a pair of wirecutters. \ In its crowbar configuration, it can be used to force open airlocks. Very useful for entering the station or its departments." +/datum/opposing_force_equipment/gadget_stealth/hair_tie + name = "Syndicate Hair Tie" + description = "An inconspicuous hair tie, able to be slung accurately. Useful to get yourself out of a sticky situation." + item_type = /obj/item/clothing/head/hair_tie/syndicate + /datum/opposing_force_equipment/gadget_stealth/jammer name = "Radio Jammer" item_type = /obj/item/jammer diff --git a/modular_nova/modules/opposing_force/code/equipment/guns.dm b/modular_nova/modules/opposing_force/code/equipment/guns.dm new file mode 100644 index 00000000000000..a4e249624026a0 --- /dev/null +++ b/modular_nova/modules/opposing_force/code/equipment/guns.dm @@ -0,0 +1,267 @@ +/datum/opposing_force_equipment/ranged + category = OPFOR_EQUIPMENT_CATEGORY_RANGED + +/datum/opposing_force_equipment/ranged/renoster + name = "Renoster Shotgun" + description = "A twelve guage shotgun with an eight shell capacity underneath." + item_type = /obj/item/storage/toolbox/guncase/nova/opfor/renoster + +/obj/item/storage/toolbox/guncase/nova/opfor/renoster/PopulateContents() + new /obj/item/gun/ballistic/shotgun/riot/sol/evil(src) + new /obj/item/ammo_box/advanced/s12gauge/buckshot(src) + new /obj/item/ammo_box/advanced/s12gauge/buckshot(src) + +/datum/opposing_force_equipment/ranged/infanteria + name = "Carwo-Cawil Battle Rifle" + description = "A heavy battle rifle, this one seems to be painted tacticool black. Accepts any standard SolFed rifle magazine." + item_type = /obj/item/storage/toolbox/guncase/nova/opfor/infanteria + +/obj/item/storage/toolbox/guncase/nova/opfor/infanteria/PopulateContents() + new /obj/item/gun/ballistic/automatic/sol_rifle/evil(src) + new /obj/item/ammo_box/magazine/c40sol_rifle/standard(src) + new /obj/item/ammo_box/magazine/c40sol_rifle/standard(src) + +/datum/opposing_force_equipment/ranged/miecz + name = "'Miecz' Submachinegun" + description = "A short barrel, further compacted conversion of the 'Lanca' rifle to fire pistol caliber cartridges." + item_type = /obj/item/storage/toolbox/guncase/nova/opfor/miecz + +/obj/item/storage/toolbox/guncase/nova/opfor/miecz/PopulateContents() + new /obj/item/gun/ballistic/automatic/miecz(src) + new /obj/item/ammo_box/magazine/miecz(src) + new /obj/item/ammo_box/magazine/miecz(src) + +/datum/opposing_force_equipment/ranged/kiboko + name = "Kiboko Grenade Launcher" + description = "A unique grenade launcher firing .980 grenades. A laser sight system allows its user to specify a range for the grenades it fires to detonate at" + item_type = /obj/item/storage/toolbox/guncase/nova/opfor/kiboko + +/obj/item/storage/toolbox/guncase/nova/opfor/kiboko/PopulateContents() + new /obj/item/gun/ballistic/automatic/sol_grenade_launcher/evil(src) + new /obj/item/ammo_box/magazine/c980_grenade/drum(src) + new /obj/item/ammo_box/magazine/c980_grenade/drum(src) + +/datum/opposing_force_equipment/ranged/amr + name = "'Wyłom' AMR" + description = "A massive, outdated beast of an anti materiel rifle that was once in use by CIN military forces. Fires the devastating .60 Strela caseless round, the massively overperforming penetration of which being the reason this weapon was discontinued." + item_type = /obj/item/storage/toolbox/guncase/nova/opfor/amr + +/obj/item/storage/toolbox/guncase/nova/opfor/amr/PopulateContents() + new /obj/item/gun/ballistic/automatic/wylom(src) + new /obj/item/ammo_box/magazine/wylom(src) + new /obj/item/ammo_box/magazine/wylom(src) + +/datum/opposing_force_equipment/ranged/lmg + name = "L6 SAW LMG" + description = "A heavily modified 7mm light machine gun, designated 'L6 SAW'. Has 'Aussec Armoury - 2531' engraved on the receiver below the designation." + item_type = /obj/item/storage/toolbox/guncase/nova/opfor/lmg + +/obj/item/storage/toolbox/guncase/nova/opfor/lmg/PopulateContents() + new /obj/item/gun/ballistic/automatic/l6_saw/unrestricted(src) + new /obj/item/ammo_box/magazine/m7mm(src) + new /obj/item/ammo_box/magazine/m7mm(src) + +/datum/opposing_force_equipment/ranged/hook_shotgun + name = "Hook Modified Sawn-off Shotgun" + description = "Range isn't an issue when you can bring your victim to you." + item_type = /obj/item/storage/toolbox/guncase/nova/opfor/hook_shotgun + +/obj/item/storage/toolbox/guncase/nova/opfor/hook_shotgun/PopulateContents() + new /obj/item/gun/ballistic/shotgun/hook(src) + new /obj/item/ammo_box/advanced/s12gauge/buckshot(src) + new /obj/item/ammo_box/advanced/s12gauge/buckshot(src) + +/datum/opposing_force_equipment/ranged/rebar_crossbow + name = "Syndicate Rebar Crossbow" + description = "The syndicate liked the bootleg rebar crossbow NT engineers made, so they showed what it could be if properly developed. \ + Holds three shots without a chance of exploding, and features a built in scope. Normally uses special syndicate jagged iron bars, but can be wrenched to shoot inferior normal ones." + item_type = /obj/item/storage/toolbox/guncase/nova/opfor/rebar_crossbow + +/obj/item/storage/toolbox/guncase/nova/opfor/rebar_crossbow/PopulateContents() + new /obj/item/gun/ballistic/rifle/rebarxbow/syndie(src) + new /obj/item/book/granter/crafting_recipe/dusting/rebarxbowsyndie_ammo(src) + +//laser +/datum/opposing_force_equipment/ranged/ion + name = "ion carbine" + description = "The MK.II Prototype Ion Projector is a lightweight carbine version of the larger ion rifle, built to be ergonomic and efficient." + item_type = /obj/item/storage/toolbox/guncase/nova/opfor/ion + +/obj/item/storage/toolbox/guncase/nova/opfor/ion/PopulateContents() + new /obj/item/gun/energy/ionrifle/carbine(src) + new /obj/item/storage/box/syndie_kit/recharger(src) + +/datum/opposing_force_equipment/ranged/carbine + name = "laser carbine" + description = "A modified laser gun which can shoot far faster, but each shot is far less damaging." + item_type = /obj/item/storage/toolbox/guncase/nova/opfor/carbine + +/obj/item/storage/toolbox/guncase/nova/opfor/carbine/PopulateContents() + new /obj/item/gun/energy/laser/carbine(src) + new /obj/item/storage/box/syndie_kit/recharger(src) + +/datum/opposing_force_equipment/ranged/laser + name = "laser gun" + description = "A basic energy-based laser gun that fires concentrated beams of light which pass through glass and thin metal." + item_type = /obj/item/storage/toolbox/guncase/nova/opfor/laser + +/obj/item/storage/toolbox/guncase/nova/opfor/laser/PopulateContents() + new /obj/item/gun/energy/laser(src) + new /obj/item/storage/box/syndie_kit/recharger(src) + +//foamforce +/datum/opposing_force_equipment/ranged/foamforce_lmg + name = "Foamforce LMG" + description = "A heavily modified toy light machine gun, designated 'L6 SAW'. Ages 8 and up." + item_type = /obj/item/storage/toolbox/guncase/nova/opfor/foamforce_lmg + +/obj/item/storage/toolbox/guncase/nova/opfor/foamforce_lmg/PopulateContents() + new /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted/riot(src) + new /obj/item/ammo_box/magazine/toy/m762/riot(src) + new /obj/item/ammo_box/magazine/toy/m762/riot(src) + + +/datum/opposing_force_equipment/ranged_stealth + category = OPFOR_EQUIPMENT_CATEGORY_RANGED_STEALTH + +/datum/opposing_force_equipment/ranged_stealth/rapid_syringe + name = "Compact Rapid Syringe Gun" + description = "A modification of the syringe gun design to be more compact and use a rotating cylinder to store up to six syringes." + item_type = /obj/item/storage/toolbox/guncase/nova/pistol/opfor/rapid_syringe + +/obj/item/storage/toolbox/guncase/nova/pistol/opfor/rapid_syringe/PopulateContents() + new /obj/item/gun/syringe/rapidsyringe(src) + new /obj/item/storage/belt/medbandolier(src) + new /obj/item/reagent_containers/syringe/piercing(src) + new /obj/item/reagent_containers/syringe/piercing(src) + new /obj/item/reagent_containers/syringe/piercing(src) + new /obj/item/reagent_containers/syringe/piercing(src) + +/datum/opposing_force_equipment/ranged_stealth/c20r + name = "C-20r SMG" + description = "A bullpup three-round burst .45 SMG, designated 'C-20r'. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp." + item_type = /obj/item/storage/toolbox/guncase/nova/pistol/opfor/c20r + +/obj/item/storage/toolbox/guncase/nova/pistol/opfor/c20r/PopulateContents() + new /obj/item/gun/ballistic/automatic/c20r/unrestricted(src) + new /obj/item/ammo_box/magazine/smgm45(src) + new /obj/item/ammo_box/magazine/smgm45(src) + +/datum/opposing_force_equipment/ranged_stealth/sindano + name = "Sindano SMG" + description = "A small submachinegun, this one is painted in tacticool black. Accepts any standard Sol pistol magazine." + item_type = /obj/item/storage/toolbox/guncase/nova/pistol/opfor/sindano + +/obj/item/storage/toolbox/guncase/nova/pistol/opfor/sindano/PopulateContents() + new /obj/item/gun/ballistic/automatic/sol_smg/evil(src) + new /obj/item/ammo_box/magazine/c35sol_pistol/stendo(src) + new /obj/item/ammo_box/magazine/c35sol_pistol/stendo(src) + +/datum/opposing_force_equipment/ranged_stealth/wespe + name = "Wespe Pistol" + description = "The standard issue service pistol of SolFed's various military branches. Comes with attached light." + item_type = /obj/item/storage/toolbox/guncase/nova/pistol/opfor/wespe + +/obj/item/storage/toolbox/guncase/nova/pistol/opfor/wespe/PopulateContents() + new /obj/item/gun/ballistic/automatic/pistol/sol/evil(src) + new /obj/item/ammo_box/magazine/c35sol_pistol(src) + new /obj/item/ammo_box/magazine/c35sol_pistol(src) + +/datum/opposing_force_equipment/ranged_stealth/makarov + name = "Makarov Pistol" + description = "A small, easily concealable 9x25mm Mk.12 handgun. This one is packed with a suppressor." + item_type = /obj/item/storage/toolbox/guncase/nova/pistol/opfor/makarov + +/obj/item/storage/toolbox/guncase/nova/pistol/opfor/makarov/PopulateContents() + new /obj/item/gun/ballistic/automatic/pistol(src) + new /obj/item/suppressor(src) + new /obj/item/ammo_box/magazine/m9mm(src) + new /obj/item/ammo_box/magazine/m9mm(src) + +/datum/opposing_force_equipment/ranged_stealth/m1911 + name = "M1911 Pistol" + description = "A classic .45 handgun with a small magazine capacity." + item_type = /obj/item/storage/toolbox/guncase/nova/pistol/opfor/m1911 + +/obj/item/storage/toolbox/guncase/nova/pistol/opfor/m1911/PopulateContents() + new /obj/item/gun/ballistic/automatic/pistol/m1911(src) + new /obj/item/ammo_box/magazine/m45(src) + new /obj/item/ammo_box/magazine/m45(src) + +/datum/opposing_force_equipment/ranged_stealth/plasma_pistol + name = "'Słońce' Plasma Projector" + description = "An outdated sidearm rarely seen in use by some members of the CIN. Spews an inaccurate stream of searing plasma out the magnetic barrel so long as it has power and the trigger is pulled." + item_type = /obj/item/storage/toolbox/guncase/nova/pistol/opfor/plasma_pistol + +/obj/item/storage/toolbox/guncase/nova/pistol/opfor/plasma_pistol/PopulateContents() + new /obj/item/gun/ballistic/automatic/pistol/plasma_thrower(src) + new /obj/item/ammo_box/magazine/recharge/plasma_battery(src) + new /obj/item/ammo_box/magazine/recharge/plasma_battery(src) + +/datum/opposing_force_equipment/ranged_stealth/plasma_marksman + name = "'Gwiazda' Plasma Sharpshooter" + description = "An outdated sidearm rarely seen in use by some members of the CIN. Fires relatively accurate globs of searing plasma." + item_type = /obj/item/storage/toolbox/guncase/nova/pistol/opfor/plasma_marksman + +/obj/item/storage/toolbox/guncase/nova/pistol/opfor/plasma_marksman/PopulateContents() + new /obj/item/gun/ballistic/automatic/pistol/plasma_marksman(src) + new /obj/item/ammo_box/magazine/recharge/plasma_battery(src) + new /obj/item/ammo_box/magazine/recharge/plasma_battery(src) + +/datum/opposing_force_equipment/ranged_stealth/syndie_revolver + name = "Syndicate Revolver" + description = "A modernized 7 round revolver manufactured by Scarborough." + item_type = /obj/item/storage/toolbox/guncase/nova/pistol/opfor/syndie_revolver + +/obj/item/storage/toolbox/guncase/nova/pistol/opfor/syndie_revolver/PopulateContents() + new /obj/item/gun/ballistic/revolver/syndicate(src) + new /obj/item/ammo_box/a357(src) + new /obj/item/ammo_box/a357(src) + +/datum/opposing_force_equipment/ranged_stealth/ocelot + name = "Colt Peacemaker revolver" + admin_note = "Is packed with peacemaker .357, which deals significantly less damage but has a cool ricochet!" + description = "A modified Peacemaker revolver that chambers .357 ammo. Less powerful than the regular .357, but ricochets a lot more." + item_type = /obj/item/storage/toolbox/guncase/nova/pistol/opfor/ocelot + +/obj/item/storage/toolbox/guncase/nova/pistol/opfor/ocelot/PopulateContents() + new /obj/item/gun/ballistic/revolver/ocelot(src) + new /obj/item/ammo_box/a357/peacemaker(src) + new /obj/item/ammo_box/a357/peacemaker(src) + +//foamforce +/datum/opposing_force_equipment/ranged_stealth/foamforce_smg + name = "Donksoft SMG" + description = "A bullpup three-round burst toy SMG, designated 'C-20r'. Ages 8 and up." + item_type = /obj/item/storage/toolbox/guncase/nova/pistol/opfor/foamforce_smg + +/obj/item/storage/toolbox/guncase/nova/pistol/opfor/foamforce_smg/PopulateContents() + new /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot(src) + new /obj/item/ammo_box/magazine/toy/smgm45/riot(src) + new /obj/item/ammo_box/magazine/toy/smgm45/riot(src) + +/datum/opposing_force_equipment/ranged_stealth/foamforce_smg_basic + name = "Foamforce SMG" + description = "A prototype three-round burst toy submachine gun. Ages 8 and up." + item_type = /obj/item/storage/toolbox/guncase/nova/pistol/opfor/foamforce_smg_basic + +/obj/item/storage/toolbox/guncase/nova/pistol/opfor/foamforce_smg_basic/PopulateContents() + new /obj/item/gun/ballistic/automatic/toy/unrestricted(src) + new /obj/item/ammo_box/magazine/toy/smg/riot(src) + new /obj/item/ammo_box/magazine/toy/smg/riot(src) + +//laser +/datum/opposing_force_equipment/ranged_stealth/fisher + item_type = /obj/item/gun/energy/recharge/fisher + +/datum/opposing_force_equipment/ranged_stealth/ebow + item_type = /obj/item/gun/energy/recharge/ebow + +/datum/opposing_force_equipment/ranged_stealth/egun_mini + name = "miniature energy gun" + description = "A small, pistol-sized energy gun with a built-in flashlight. It has two settings: disable and kill." + item_type = /obj/item/storage/toolbox/guncase/nova/pistol/opfor/egun_mini + +/obj/item/storage/toolbox/guncase/nova/pistol/opfor/egun_mini/PopulateContents() + new /obj/item/gun/energy/e_gun/mini(src) + new /obj/item/storage/box/syndie_kit/recharger(src) diff --git a/modular_nova/modules/opposing_force/code/equipment/implants.dm b/modular_nova/modules/opposing_force/code/equipment/implants.dm new file mode 100644 index 00000000000000..be4641c0ad560f --- /dev/null +++ b/modular_nova/modules/opposing_force/code/equipment/implants.dm @@ -0,0 +1,134 @@ +/datum/opposing_force_equipment/implants + category = OPFOR_EQUIPMENT_CATEGORY_IMPLANTS + +//Skillchips +/datum/opposing_force_equipment/implants/engichip + item_type = /obj/item/skillchip/job/engineer + description = "A skillchip that, when installed, allows the user to recognise airlock and APC wire layouts and understand their functionality at a glance. Highly valuable and sought after." + +/datum/opposing_force_equipment/implants/roboticist + item_type = /obj/item/skillchip/job/roboticist + description = "A skillchip that, when installed, allows the user to recognise cyborg wire layouts and understand their functionality at a glance." + +//Implants +/datum/opposing_force_equipment/implants/nodrop + item_type = /obj/item/autosurgeon/syndicate/nodrop + name = "Anti Drop Implant" + admin_note = "Allows the user to tighten their grip, their held items unable to be dropped by any cause. Hardstuns user for a longtime if hit with EMP." + description = "An implant that prevents you from dropping items in your hand involuntarily. Comes loaded in a syndicate autosurgeon." + +/datum/opposing_force_equipment/implants/hackerman + item_type = /obj/item/autosurgeon/syndicate/hackerman + name = "Hacking Arm Implant" + admin_note = "A simple tool arm, except it identifies all wire functions when hacking." + description = "An advanced arm implant that comes with cutting edge hacking tools. Perfect for the cybernetically enhanced wirerunners." + +/datum/opposing_force_equipment/implants/cns + name = "CNS Rebooter Implant" + item_type = /obj/item/autosurgeon/syndicate/anti_stun + description = "This implant will automatically give you back control over your central nervous system, reducing downtime when stunned." + +/datum/opposing_force_equipment/implants/reviver + name = "Reviver Implant" + item_type = /obj/item/autosurgeon/syndicate/reviver + description = "This implant will attempt to revive and heal you if you lose consciousness. For the faint of heart!" + +/datum/opposing_force_equipment/implants/sad_trombone + name = "Sad Trombone Implant" + item_type = /obj/item/implanter/sad_trombone + +/datum/opposing_force_equipment/implants/toolarm + name = "Tool Arm Implant" + admin_note = "Force 20 implanted combat knife on emag." + item_type = /obj/item/autosurgeon/toolset + +/datum/opposing_force_equipment/implants/surgery + name = "Surgery Arm Implant" + admin_note = "Force 20 implanted combat knife on emag." + item_type = /obj/item/autosurgeon/surgery + +/datum/opposing_force_equipment/implants/botany + name = "Botany Arm Implant" + admin_note = "Chainsaw arm on emag." + item_type = /obj/item/autosurgeon/botany + +/datum/opposing_force_equipment/implants/janitor + name = "Janitor Arm Implant" + item_type = /obj/item/autosurgeon/janitor + +/datum/opposing_force_equipment/implants/armblade + name = "Blade Arm Implant" + admin_note = "Force 30 IF emagged." + item_type = /obj/item/autosurgeon/armblade + +/datum/opposing_force_equipment/implants/muscle + name = "Muscle Arm Implant" + item_type = /obj/item/autosurgeon/muscle + +/datum/opposing_force_equipment/implants_illegal + category = OPFOR_EQUIPMENT_CATEGORY_IMPLANTS_ILLEGAL + +/datum/opposing_force_equipment/implants_illegal/stealth + name = "Stealth Implant" + item_type = /obj/item/implanter/stealth + admin_note = "Allows the user to become completely invisible as long as they remain inside a cardboard box." + description = "An implanter that grants you the ability to wield the ultimate in invisible box technology. Best used in conjunction with a tape recorder playing Snake Eater." + +/datum/opposing_force_equipment/implants_illegal/radio + name = "Syndicate Radio Implant" + item_type = /obj/item/implanter/radio/syndicate + description = "An implanter that grants you inherent access to the Syndicate radio channel, in addition to being able to listen to all on-station channels." + +/datum/opposing_force_equipment/implants_illegal/storage + name = "Storage Implant" + item_type = /obj/item/implanter/storage + admin_note = "Allows user to stow items without any sign of having a storage item." + description = "An implanter that grants you access to a small pocket of bluespace, capable of storing a few items." + +/datum/opposing_force_equipment/implants_illegal/freedom + name = "Freedom Implant" + item_type = /obj/item/implanter/freedom + admin_note = "Allows the user to break handcuffs or e-snares four times, after it will run out and become useless." + description = "An implanter that grants you the ability to break out of handcuffs a certain number of times." + +/datum/opposing_force_equipment/implants_illegal/micro + name = "Microbomb Implant" + admin_note = "RRs the user." + item_type = /obj/item/implanter/explosive + description = "An implanter that will make you explode on death in a decent-sized explosion." + +/datum/opposing_force_equipment/implants_illegal/emp + name = "EMP Implant" + item_type = /obj/item/implanter/emp + admin_note = "Gives the user a big EMP on an action button. Has three uses after which it becomes useless." + description = "An implanter that grants you the ability to create several EMP pulses, centered on you." + +/datum/opposing_force_equipment/implants_illegal/xray + name = "X-Ray Eyes" + item_type = /obj/item/autosurgeon/syndicate/xray_eyes + description = "These cybernetic eyes will give you X-ray vision. Blinking is futile." + +/datum/opposing_force_equipment/implants_illegal/thermal + name = "Thermal Eyes" + item_type = /obj/item/autosurgeon/syndicate/thermal_eyes + description = "These cybernetic eye implants will give you thermal vision. Vertical slit pupil included." + +/datum/opposing_force_equipment/implants_illegal/armlaser + name = "Arm-mounted Laser Implant" + item_type = /obj/item/autosurgeon/syndicate/laser_arm + admin_note = "A basic laser gun, but no-drop." + description = "A variant of the arm cannon implant that fires lethal laser beams. The cannon emerges from the subject's arm and remains inside when not in use." + +/datum/opposing_force_equipment/implants_illegal/eswordarm + name = "Energy Sword Arm Implant" + item_type = /obj/item/autosurgeon/syndicate/esword_arm + admin_note = "Force 30 no-drop, extremely robust." + description = "It's an energy sword, in your arm. Pretty decent for getting past stop-searches and assassinating people. Comes loaded in a Syndicate brand autosurgeon to boot!" + +/datum/opposing_force_equipment/implants_illegal/baton + name = "Baton Arm Implant" + item_type = /obj/item/autosurgeon/syndicate/baton + +/datum/opposing_force_equipment/implants_illegal/flash + name = "Flash Arm Implant" + item_type = /obj/item/autosurgeon/syndicate/flash diff --git a/modular_nova/modules/opposing_force/code/equipment/medical.dm b/modular_nova/modules/opposing_force/code/equipment/medical.dm new file mode 100644 index 00000000000000..18aec39423e4ec --- /dev/null +++ b/modular_nova/modules/opposing_force/code/equipment/medical.dm @@ -0,0 +1,58 @@ +/datum/opposing_force_equipment/medical + category = OPFOR_EQUIPMENT_CATEGORY_MEDICAL + +/datum/opposing_force_equipment/medical/twitch + name = "TWitch Sensory Stimulant Injector" + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/twitch + +/datum/opposing_force_equipment/medical/demoneye + name = "DemonEye Steroid Injector" + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/demoneye + +/datum/opposing_force_equipment/medical/stimpack + name = "Stimulant Medipen" + item_type = /obj/item/reagent_containers/hypospray/medipen/stimulants + +/datum/opposing_force_equipment/medical/cheese_kit + name = "Civil Defense Medical Kit" + item_type = /obj/item/storage/medkit/civil_defense/stocked + description = "A small, pocket sized medical kit often handed out to civilians en masse in the event of an emergency. \ + It can hold four medpens and nothing more, and comes stocked with pens for repairing various types of minor damage." + +/datum/opposing_force_equipment/medical/frontier_medkit + name = "Frontier Medical Kit" + item_type = /obj/item/storage/medkit/frontier/stocked + description = "A handy roll-top waterproof medkit often seen alongside those on the frontier, where medical support is less than optimal. \ + Comes with basic medical supplies to fix many types of wounds, alongside a small collections of pens to repair damage." + +/datum/opposing_force_equipment/medical/combat_surgeon + name = "Combat Surgeon Medical Kit" + item_type = /obj/item/storage/medkit/combat_surgeon/stocked + description = "A folding kit that is ideally filled with surgical tools and specialized treatment options for many harder-to-treat wounds." + +/datum/opposing_force_equipment/medical/satchel_medkit + name = "Satchel Medical Kit" + item_type = /obj/item/storage/backpack/duffelbag/deforest_medkit/stocked + description = "A large orange satchel able to hold just about any piece of small medical equipment you could think of, you can even wear it on your back or belt! \ + Keep in mind, however, that this cannot fit inside any normal bag." + +/datum/opposing_force_equipment/medical/super_combat_surgeon + name = "First Responder Surgical Kit" + item_type = /obj/item/storage/backpack/duffelbag/deforest_surgical/stocked + description = "A large bag able to hold all the surgical tools and first response healing equipment you can think of, you can even wear it! \ + Keep in mind, however, that this cannot fit inside any normal bag." + +/datum/opposing_force_equipment/medical/combatmedkit + name = "Syndicate Combat Medic Kit" + item_type = /obj/item/storage/medkit/tactical + description = "This first aid kit is a suspicious black and red. Included is a number of atropine medipens \ + for rapid stabilization, sutures and regenerative mesh for wound treatment, and patches \ + for faster healing on the field. Also comes with basic medical tools and sterlizer." + +/datum/opposing_force_equipment/medical/combatmedkit_premium + name = "Syndicate Combat Medical Suite" + item_type = /obj/item/storage/medkit/tactical/premium + description = "This first aid kit is a suspicious black and red. Included is an unloaded combat chemical injector \ + for suit-penetrative chem delivery, a medical science night vision HUD for quick identification of injured personnel and chemical supplies, \ + improved medical supplies, including Interdyne-approved pharmaceuticals, a hacked cybernetic surgery toolset arm implant, \ + and some helpful MODsuit modules for for field medical use and operative physiopharmaceutical augmentation." diff --git a/modular_nova/modules/opposing_force/code/equipment/melee.dm b/modular_nova/modules/opposing_force/code/equipment/melee.dm new file mode 100644 index 00000000000000..24a25b3be139fc --- /dev/null +++ b/modular_nova/modules/opposing_force/code/equipment/melee.dm @@ -0,0 +1,96 @@ +/datum/opposing_force_equipment/melee + category = OPFOR_EQUIPMENT_CATEGORY_MELEE + +/datum/opposing_force_equipment/melee/sabre + name = "Officer's Sabre" + description = "An elegant weapon, its monomolecular edge is capable of cutting through flesh and bone with ease." + item_type = /obj/item/storage/belt/sabre + +/datum/opposing_force_equipment/melee/katana + item_type = /obj/item/katana + description = "An extremely sharp and robust sword folded over nine thousand times until perfection. Highly lethal and illegal." + admin_note = "WARNING: 40 force, 50% blockchance, very powerful." + +/datum/opposing_force_equipment/melee/ekatana + item_type = /obj/item/energy_katana + description = "An energy katana seized from a dead Spider Clan ninja. As well as being highly robust, it allows the \ + user to teleport short distances using right-click." + +/datum/opposing_force_equipment/melee/esword + item_type = /obj/item/melee/energy/sword + description = "The energy sword is an edged weapon with a blade of pure energy. The sword is small enough to be pocketed when inactive. Activating it produces a loud, distinctive noise." + +/datum/opposing_force_equipment/melee/desword + item_type = /obj/item/dualsaber + +/datum/opposing_force_equipment/melee/eshield + item_type = /obj/item/shield/energy + +/datum/opposing_force_equipment/melee/ebanana + item_type = /obj/item/melee/energy/sword/bananium + +/datum/opposing_force_equipment/melee/eshield_banana + item_type = /obj/item/shield/energy/bananium + +/datum/opposing_force_equipment/melee/epirate + item_type = /obj/item/melee/energy/sword/pirate + description = "A variant of the energy sword styled as a cutlass. Pirate costume sold separately. Warranty void if bought." + +/datum/opposing_force_equipment/melee/metalbat + item_type = /obj/item/melee/baseball_bat/ablative + description = "A highly reflective baseball bat for when you need to crack skulls and run away from security in the same night. Can reflect lasers." + admin_note = "WARNING: Notably strong on sec not using ballistics." + +/datum/opposing_force_equipment/melee/powerfist + item_type = /obj/item/melee/powerfist + name = "Power Fist" + description = "The power-fist is a metal gauntlet with a built-in piston-ram powered by an external gas supply.\ + Upon hitting a target, the piston-ram will extend forward to make contact for some serious damage. \ + Using a wrench on the piston valve will allow you to tweak the amount of gas used per punch to \ + deal extra damage and hit targets further. Use a screwdriver to take out any attached tanks." + +/datum/opposing_force_equipment/melee/meathook + name = "Butcher's Meat Hook" + item_type = /obj/item/gun/magic/hook + description = "A brutal cleaver on a long chain, it allows you to pull people to your location." + +/datum/opposing_force_equipment/melee/cutlass + item_type = /obj/item/claymore/cutlass + +/datum/opposing_force_equipment/melee/mace + item_type = /obj/item/melee/cleric_mace + +/datum/opposing_force_equipment/melee/claymore + item_type = /obj/item/claymore + description = "An extremely sharp and robust sword perfect to cleave through any opposition. Also highly illegal." + admin_note = "WARNING: 30 force, 35 armor pen." + + +/datum/opposing_force_equipment/melee_stealth + category = OPFOR_EQUIPMENT_CATEGORY_MELEE_STEALTH + +/datum/opposing_force_equipment/melee_stealth/contractorbaton + item_type = /obj/item/melee/baton/telescopic/contractor_baton + +/datum/opposing_force_equipment/melee_stealth/switchblade + item_type = /obj/item/switchblade + +/datum/opposing_force_equipment/melee_stealth/combat_knife + item_type = /obj/item/knife/combat + +/datum/opposing_force_equipment/melee_stealth/edagger + item_type = /obj/item/pen/edagger + name = "Energy Dagger" + description = "A dagger made of energy that looks and functions as a pen when off." + +/datum/opposing_force_equipment/melee_stealth/telescopic + item_type = /obj/item/melee/baton/telescopic + +/datum/opposing_force_equipment/melee_stealth/telescopicshield + item_type = /obj/item/shield/riot/tele + +/datum/opposing_force_equipment/melee_stealth/northstar + item_type = /obj/item/clothing/gloves/rapid + description = "By putting on these gloves, you will find you can punch things at vastly increased speed." + admin_note = "WARNING: Be very mindful if passing these out with sleeping-carp, as the duo are extremely strong together." + diff --git a/modular_skyrat/modules/opposing_force/code/equipment/modsuit.dm b/modular_nova/modules/opposing_force/code/equipment/modsuit.dm similarity index 100% rename from modular_skyrat/modules/opposing_force/code/equipment/modsuit.dm rename to modular_nova/modules/opposing_force/code/equipment/modsuit.dm diff --git a/modular_skyrat/modules/opposing_force/code/equipment/spells.dm b/modular_nova/modules/opposing_force/code/equipment/spells.dm similarity index 100% rename from modular_skyrat/modules/opposing_force/code/equipment/spells.dm rename to modular_nova/modules/opposing_force/code/equipment/spells.dm diff --git a/modular_skyrat/modules/opposing_force/code/equipment/uplink.dm b/modular_nova/modules/opposing_force/code/equipment/uplink.dm similarity index 91% rename from modular_skyrat/modules/opposing_force/code/equipment/uplink.dm rename to modular_nova/modules/opposing_force/code/equipment/uplink.dm index 60dd048b1cb839..02e72d297dd7af 100644 --- a/modular_skyrat/modules/opposing_force/code/equipment/uplink.dm +++ b/modular_nova/modules/opposing_force/code/equipment/uplink.dm @@ -9,9 +9,9 @@ admin_note = "Traitor uplink without telecrystals." /datum/opposing_force_equipment/uplink/uplink_implant - item_type = /obj/item/implant/uplink - name = "Implanted Syndicate Uplink" - admin_note = "Traitor uplink without telecrystals." + item_type = /obj/item/implanter/uplink + name = "Syndicate Uplink Implanter" + admin_note = "Implanter for a Traitor uplink with no TC." /datum/opposing_force_equipment/uplink/tc1 item_type = /obj/item/stack/telecrystal @@ -63,6 +63,12 @@ target.mind.has_exploitables_override = TRUE target.mind.handle_exploitables() +/datum/opposing_force_equipment/uplink/custom_announcement + name = "Custom Announcement" + item_type = /obj/item/device/traitor_announcer + admin_note = "Ask players to put the message inside the 'Reason' box, the item adminlogs but won't give a chance to preview. Can be VV'd to give more 'uses'." + description = "A one-use device that lets you make an announcement tailored to your choice." + /datum/opposing_force_equipment/uplink/power_outage name = "Power Outage" description = "A virus will be uploaded to the engineering processing servers to force a routine power grid check, forcing all APCs on the station to be temporarily disabled." @@ -95,8 +101,3 @@ /datum/opposing_force_equipment/uplink/market_crash/on_issue() var/datum/round_event_control/event = locate(/datum/round_event_control/market_crash) in SSevents.control event.run_event() - -/datum/opposing_force_equipment/uplink/fake_announcer - name = "Fake Announcement" - item_type = /obj/item/device/traitor_announcer - description = "A one-use device that lets you make an announcement of your choice, sending it to the station under the guise of the captain's authority." diff --git a/modular_skyrat/modules/opposing_force/code/mind.dm b/modular_nova/modules/opposing_force/code/mind.dm similarity index 100% rename from modular_skyrat/modules/opposing_force/code/mind.dm rename to modular_nova/modules/opposing_force/code/mind.dm diff --git a/modular_skyrat/modules/opposing_force/code/opposing_force_datum.dm b/modular_nova/modules/opposing_force/code/opposing_force_datum.dm similarity index 98% rename from modular_skyrat/modules/opposing_force/code/opposing_force_datum.dm rename to modular_nova/modules/opposing_force/code/opposing_force_datum.dm index e2c019936aeadd..3f688332cb563f 100644 --- a/modular_skyrat/modules/opposing_force/code/opposing_force_datum.dm +++ b/modular_nova/modules/opposing_force/code/opposing_force_datum.dm @@ -14,7 +14,7 @@ if(opfor_equipment) opposing_force_equipment = opfor_equipment -/datum/opposing_force_selected_equipment/Destroy(force, ...) +/datum/opposing_force_selected_equipment/Destroy(force) opposing_force_equipment = null return ..() @@ -123,7 +123,7 @@ var/list/data = list() var/client/owner_client = GLOB.directory[ckey] - data["admin_mode"] = check_rights_for(user.client, R_DEFAULT) && user.client != owner_client + data["admin_mode"] = check_rights_for(user.client, R_ADMIN) && user.client != owner_client data["creator_ckey"] = ckey @@ -243,6 +243,8 @@ submit_to_subsystem(usr) if("send_message") send_message(usr, params["message"]) + if(!handling_admin && check_rights_for(usr.client, R_ADMIN) && usr != mind_reference) + handle(usr) // if an admin sends a message and it's not being handled, assign them as handling it // Objective control if("add_objective") add_objective(usr) @@ -538,7 +540,7 @@ iterating_equipment.status = OPFOR_EQUIPMENT_STATUS_DENIED for(var/datum/opposing_force_objective/opfor in objectives) opfor.status = OPFOR_OBJECTIVE_STATUS_DENIED - SEND_SOUND(mind_reference.current, sound('modular_skyrat/modules/opposing_force/sound/denied.ogg')) + SEND_SOUND(mind_reference.current, sound('modular_nova/modules/opposing_force/sound/denied.ogg')) add_log(denier.ckey, "Denied application") to_chat(mind_reference.current, examine_block(span_redtext("Your OPFOR application has been denied by [denier ? get_admin_ckey(denier) : "the OPFOR subsystem"]!"))) send_system_message(get_admin_ckey(denier) + " has denied the application with the following reason: [reason]") @@ -551,7 +553,7 @@ status = OPFOR_STATUS_APPROVED can_edit = FALSE - SEND_SOUND(mind_reference.current, sound('modular_skyrat/modules/opposing_force/sound/approved.ogg')) + SEND_SOUND(mind_reference.current, sound('modular_nova/modules/opposing_force/sound/approved.ogg')) add_log(approver.ckey, "Approved application") var/objective_denied = FALSE for(var/datum/opposing_force_objective/opfor_obj as anything in objectives) diff --git a/modular_skyrat/modules/opposing_force/code/opposing_force_subsystem.dm b/modular_nova/modules/opposing_force/code/opposing_force_subsystem.dm similarity index 100% rename from modular_skyrat/modules/opposing_force/code/opposing_force_subsystem.dm rename to modular_nova/modules/opposing_force/code/opposing_force_subsystem.dm diff --git a/modular_skyrat/modules/opposing_force/code/roundend.dm b/modular_nova/modules/opposing_force/code/roundend.dm similarity index 100% rename from modular_skyrat/modules/opposing_force/code/roundend.dm rename to modular_nova/modules/opposing_force/code/roundend.dm diff --git a/modular_skyrat/modules/opposing_force/icons/items.dmi b/modular_nova/modules/opposing_force/icons/items.dmi similarity index 100% rename from modular_skyrat/modules/opposing_force/icons/items.dmi rename to modular_nova/modules/opposing_force/icons/items.dmi diff --git a/modular_skyrat/modules/opposing_force/sound/application_recieved.ogg b/modular_nova/modules/opposing_force/sound/application_recieved.ogg similarity index 100% rename from modular_skyrat/modules/opposing_force/sound/application_recieved.ogg rename to modular_nova/modules/opposing_force/sound/application_recieved.ogg diff --git a/modular_skyrat/modules/opposing_force/sound/approved.ogg b/modular_nova/modules/opposing_force/sound/approved.ogg similarity index 100% rename from modular_skyrat/modules/opposing_force/sound/approved.ogg rename to modular_nova/modules/opposing_force/sound/approved.ogg diff --git a/modular_skyrat/modules/opposing_force/sound/denied.ogg b/modular_nova/modules/opposing_force/sound/denied.ogg similarity index 100% rename from modular_skyrat/modules/opposing_force/sound/denied.ogg rename to modular_nova/modules/opposing_force/sound/denied.ogg diff --git a/modular_skyrat/modules/opposing_force/sound/update_requested.ogg b/modular_nova/modules/opposing_force/sound/update_requested.ogg similarity index 100% rename from modular_skyrat/modules/opposing_force/sound/update_requested.ogg rename to modular_nova/modules/opposing_force/sound/update_requested.ogg diff --git a/modular_nova/modules/organs/code/heart.dm b/modular_nova/modules/organs/code/heart.dm new file mode 100644 index 00000000000000..bc2f8ebc59b195 --- /dev/null +++ b/modular_nova/modules/organs/code/heart.dm @@ -0,0 +1,75 @@ +/obj/item/organ/internal/heart/snail + name = "twin gastropod hearts" + desc = "A primary heart normally nestled inside a gastropod's shell, and another in the owner's actual chest; necessary to maintain ample bloodflow through essentially two torsos." + icon = 'modular_nova/master_files/icons/obj/surgery.dmi' + icon_state = "heart-snail-on" + base_icon_state = "heart-snail" + maxHealth = 2 * STANDARD_ORGAN_THRESHOLD // There's two of them. Also, due to the special interaction below, it's best we make sure these aren't easily lost. + now_fixed = span_info("Your hearts begin to beat again.") //For the sake of verisimilitude. + + COOLDOWN_DECLARE(shell_effect_cd) + +/obj/item/organ/internal/heart/snail/on_mob_insert(mob/living/carbon/organ_owner, special) + . = ..() + if(!ishuman(organ_owner)) + return + + if(!issnail(organ_owner)) //This is cleaner than checking for the shell, because there's not really going to be any non-horribly-bugged situation in which a snail will be lacking a shell. + return + + var/mob/living/carbon/human/human_owner = organ_owner + + RegisterSignal(human_owner, COMSIG_MOB_APPLY_DAMAGE_MODIFIERS, PROC_REF(modify_damage)) + RegisterSignal(human_owner, COMSIG_MOB_AFTER_APPLY_DAMAGE, PROC_REF(do_block_effect)) + +/obj/item/organ/internal/heart/snail/on_mob_remove(mob/living/carbon/organ_owner, special) + . = ..() + if(!ishuman(organ_owner) || QDELETED(organ_owner)) + return + + var/mob/living/carbon/human/human_owner = organ_owner + + UnregisterSignal(human_owner, list(COMSIG_MOB_APPLY_DAMAGE_MODIFIERS, COMSIG_MOB_AFTER_APPLY_DAMAGE)) + +/** + * Signal proc for [COMSIG_MOB_APPLY_DAMAGE_MODIFIERS] + * + * Adds a 0.5 modifier to attacks from the back, code borrowed (wholesale) from the roach heart. + */ +/obj/item/organ/internal/heart/snail/proc/modify_damage(mob/living/carbon/human/source, list/damage_mods, damage_amount, damagetype, def_zone, sharpness, attack_direction, obj/item/attacking_item) + SIGNAL_HANDLER + + if(!is_blocking(source, damage_amount, damagetype, attack_direction)) + return + + damage_mods += 0.5 + +/** + * Signal proc for [COMSIG_MOB_AFTER_APPLY_DAMAGE] + * + * Does a special effect if we blocked damage with our shell. + */ +/obj/item/organ/internal/heart/snail/proc/do_block_effect(mob/living/carbon/human/source, damage_dealt, damagetype, def_zone, blocked, wound_bonus, bare_wound_bonus, sharpness, attack_direction, obj/item/attacking_item) + SIGNAL_HANDLER + + if(!is_blocking(source, damage_dealt, damagetype, attack_direction)) + return + + if(COOLDOWN_FINISHED(src, shell_effect_cd)) + source.visible_message(span_warning("[source]'s shell weathers the blow, absorbing most of the shock!")) + playsound(source, 'sound/weapons/parry.ogg', 50, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + + COOLDOWN_START(src, shell_effect_cd, 5 SECONDS) // Cooldown resets EVERY time we get hit + +/// Checks if the passed mob is in a valid state to be blocking damage with the snail shell +/obj/item/organ/internal/heart/snail/proc/is_blocking(mob/living/carbon/human/blocker, damage_amount, damagetype, attack_direction) + if(damage_amount < 5 || damagetype != BRUTE || !attack_direction) + return + if(!ishuman(blocker) || blocker.stat >= UNCONSCIOUS) + return FALSE + // No tactical spinning + if(HAS_TRAIT(blocker, TRAIT_SPINNING)) + return FALSE + if(blocker.body_position == LYING_DOWN || (blocker.dir & attack_direction)) + return TRUE + return FALSE diff --git a/modular_nova/modules/organs/code/liver.dm b/modular_nova/modules/organs/code/liver.dm new file mode 100644 index 00000000000000..628ce9add875df --- /dev/null +++ b/modular_nova/modules/organs/code/liver.dm @@ -0,0 +1,7 @@ +/obj/item/organ/internal/liver/snail + name = "gastropod liver" + icon = 'modular_nova/master_files/icons/obj/surgery.dmi' + icon_state = "liver-snail" + desc = "Due to snailfolk evolving in typically poisonous environments such as bogs, their liver has a higher tolerance for poisons compared to most." + maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD + toxTolerance = 5 //can shrug off up to 5u of toxins diff --git a/modular_nova/modules/organs/code/lungs.dm b/modular_nova/modules/organs/code/lungs.dm new file mode 100644 index 00000000000000..5b1ee428aa45be --- /dev/null +++ b/modular_nova/modules/organs/code/lungs.dm @@ -0,0 +1,98 @@ +/obj/item/organ/internal/lungs/cold + name = "cold-adapted lungs" + icon = 'modular_nova/modules/organs/icons/lungs.dmi' + desc = "A set of lungs adapted to low temperatures, though they are more susceptible to high temperatures" + icon_state = "lungs_cold" + cold_message = "a slightly painful, though bearable, cold sensation" + cold_level_1_threshold = 208 + cold_level_2_threshold = 200 + cold_level_3_threshold = 170 + cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_1 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead. + cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_1 + cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_2 + cold_damage_type = BURN + + hot_message = "the searing heat with every breath you take" + heat_level_1_threshold = 318 + heat_level_2_threshold = 348 + heat_level_3_threshold = 1000 + heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_2 + heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_2 + heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_3 + heat_damage_type = BURN + + +/obj/item/organ/internal/lungs/hot + name = "heat-adapted lungs" + icon = 'modular_nova/modules/organs/icons/lungs.dmi' + desc = "A set of lungs adapted to high temperatures, though they are more susceptible to low temperatures" + icon_state = "lungs_heat" + cold_message = "the freezing cold with every breath you take" + cold_level_1_threshold = 248 + cold_level_2_threshold = 220 + cold_level_3_threshold = 170 + cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_2 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead. + cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_2 + cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_3 + cold_damage_type = BURN + + hot_message = "a slightly painful, though bearable, warmth" + heat_level_1_threshold = 373 + heat_level_2_threshold = 473 + heat_level_3_threshold = 523 + heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_1 + heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_1 + heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_2 + heat_damage_type = BURN + +/obj/item/organ/internal/lungs/toxin + name = "toxin-adapted lungs" + icon = 'modular_nova/modules/organs/icons/lungs.dmi' + desc = "A set of lungs adapted to toxic environments, though more susceptible to extreme temperatures." + icon_state = "lungs_toxin" + safe_plasma_max = 27 + safe_co2_max = 27 + + cold_message = "the freezing cold with every breath you take" + cold_level_1_threshold = 248 + cold_level_2_threshold = 220 + cold_level_3_threshold = 170 + cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_2 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead. + cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_2 + cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_3 + cold_damage_type = BRUTE + + + hot_message = "the searing heat with every breath you take" + heat_level_1_threshold = 318 + heat_level_2_threshold = 348 + heat_level_3_threshold = 1000 + heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_2 + heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_2 + heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_3 + heat_damage_type = BURN + +/obj/item/organ/internal/lungs/oxy + name = "low-oxygen-adapted lungs" + icon = 'modular_nova/modules/organs/icons/lungs.dmi' + desc = "A set of lungs adapted to lower-pressure environments, though more susceptible to extreme temperatures." + icon_state = "lungs_toxin" + safe_oxygen_min = 5 + + hot_message = "the searing heat with every breath you take" + heat_level_1_threshold = 318 + heat_level_2_threshold = 348 + heat_level_3_threshold = 1000 + heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_2 + heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_2 + heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_3 + heat_damage_type = BURN + + cold_message = "the freezing cold with every breath you take" + cold_level_1_threshold = 248 + cold_level_2_threshold = 220 + cold_level_3_threshold = 170 + cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_2 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead. + cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_2 + cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_3 + cold_damage_type = BURN diff --git a/modular_skyrat/modules/organs/code/organs.dm b/modular_nova/modules/organs/code/organs.dm similarity index 100% rename from modular_skyrat/modules/organs/code/organs.dm rename to modular_nova/modules/organs/code/organs.dm diff --git a/modular_nova/modules/organs/code/stomach.dm b/modular_nova/modules/organs/code/stomach.dm new file mode 100644 index 00000000000000..c60f62f1313881 --- /dev/null +++ b/modular_nova/modules/organs/code/stomach.dm @@ -0,0 +1,16 @@ +/obj/item/organ/internal/stomach/oversized + name = "huge guts" + desc = "Typically found in huge creatures, this monstrous engine has developed to be highly efficient, made to get an enormous amount of nutrients to an enormous eater." + icon = 'modular_nova/modules/organs/icons/stomach.dmi' + icon_state = "stomach_big" + maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD + metabolism_efficiency = 0.07 + +/obj/item/organ/internal/stomach/synth/oversized + name = "huge synthetic bio-reactor" + desc = "Typically found in huge synthetics, this monstrous engine has been developed to be highly efficient, made to provide an enormous amount of power to an enormous machine." + icon = 'modular_nova/modules/organs/icons/stomach.dmi' + icon_state = "stomach_big_synth" //ugly placeholder sorry im not an artist hehe + maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD + metabolism_efficiency = 0.07 + diff --git a/modular_nova/modules/organs/code/tongue.dm b/modular_nova/modules/organs/code/tongue.dm new file mode 100644 index 00000000000000..c803bfc90c9814 --- /dev/null +++ b/modular_nova/modules/organs/code/tongue.dm @@ -0,0 +1,112 @@ +/obj/item/organ/internal/tongue/copy_traits_from(obj/item/organ/internal/tongue/old_tongue, copy_actions = FALSE) + . = ..() + // make sure we get food preferences too, because those are now tied to tongues for some reason + liked_foodtypes = old_tongue.liked_foodtypes + disliked_foodtypes = old_tongue.disliked_foodtypes + toxic_foodtypes = old_tongue.toxic_foodtypes + +/obj/item/organ/internal/tongue/dog + name = "long tongue" + desc = "A long and wet tongue. It seems to jump when it's called good, oddly enough." + say_mod = "woofs" + icon_state = "tongue" + modifies_speech = TRUE + +/obj/item/organ/internal/tongue/dog/Insert(mob/living/carbon/signer, special = FALSE, movement_flags = DELETE_IF_REPLACED) + . = ..() + signer.verb_ask = "arfs" + signer.verb_exclaim = "wans" + signer.verb_whisper = "whimpers" + signer.verb_yell = "barks" + +/obj/item/organ/internal/tongue/dog/Remove(mob/living/carbon/speaker, special = FALSE) + ..() + speaker.verb_ask = initial(verb_ask) + speaker.verb_exclaim = initial(verb_exclaim) + speaker.verb_whisper = initial(verb_whisper) + speaker.verb_sing = initial(verb_sing) + speaker.verb_yell = initial(verb_yell) + +/obj/item/organ/internal/tongue/avian + name = "avian tongue" + desc = "A short and stubby tongue that craves seeds." + say_mod = "chirps" + icon_state = "tongue" + modifies_speech = TRUE + +/obj/item/organ/internal/tongue/avian/Insert(mob/living/carbon/signer, special = FALSE, movement_flags = DELETE_IF_REPLACED) + . = ..() + signer.verb_ask = "peeps" + signer.verb_exclaim = "squawks" + signer.verb_whisper = "murmurs" + signer.verb_yell = "shrieks" + +/obj/item/organ/internal/tongue/avian/Remove(mob/living/carbon/speaker, special = FALSE) + . = ..() + speaker.verb_ask = initial(verb_ask) + speaker.verb_exclaim = initial(verb_exclaim) + speaker.verb_whisper = initial(verb_whisper) + speaker.verb_sing = initial(verb_sing) + speaker.verb_yell = initial(verb_yell) + +/// This "human" tongue is only used in Character Preferences / Augmentation menu. +/// The base tongue class lacked a say_mod. With say_mod included it makes a non-Human user sound like a Human. +/obj/item/organ/internal/tongue/human + say_mod = "says" + +/obj/item/organ/internal/tongue/cybernetic + name = "cybernetic tongue" + icon = 'modular_nova/modules/organs/icons/cyber_tongue.dmi' + icon_state = "cybertongue" + desc = "A fully-functional synthetic tongue, encased in soft silicone. Features include high-resolution vocals and taste receptors." + organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES + say_mod = "says" + // Not as good as organic tongues, not as bad as the robotic voicebox. + taste_sensitivity = 20 + +/obj/item/organ/internal/tongue/vox + name = "vox tongue" + desc = "A fleshy muscle mostly used for skreeing." + say_mod = "skrees" + liked_foodtypes = MEAT | FRIED + +/obj/item/organ/internal/tongue/dwarven + name = "dwarven tongue" + desc = "A fleshy muscle mostly used for bellowing." + say_mod = "bellows" + liked_foodtypes = ALCOHOL | MEAT | DAIRY //Dwarves like alcohol, meat, and dairy products. + disliked_foodtypes = JUNKFOOD | FRIED | CLOTH //Dwarves hate foods that have no nutrition other than alcohol. + +/obj/item/organ/internal/tongue/ghoul + name = "ghoulish tongue" + desc = "A fleshy muscle mostly used for rasping." + say_mod = "rasps" + liked_foodtypes = RAW | MEAT + disliked_foodtypes = VEGETABLES | FRUIT | CLOTH + toxic_foodtypes = DAIRY | PINEAPPLE + +/obj/item/organ/internal/tongue/insect + name = "insect tongue" + desc = "A fleshy muscle mostly used for chittering." + say_mod = "chitters" + liked_foodtypes = GROSS | RAW | TOXIC | GORE + disliked_foodtypes = CLOTH | GRAIN | FRIED + toxic_foodtypes = DAIRY + +/obj/item/organ/internal/tongue/xeno_hybrid + name = "alien tongue" + desc = "According to leading xenobiologists the evolutionary benefit of having a second mouth in your mouth is \"that it looks badass\"." + icon_state = "tonguexeno" + say_mod = "hisses" + taste_sensitivity = 10 + liked_foodtypes = MEAT + +/obj/item/organ/internal/tongue/xeno_hybrid/Initialize(mapload) + . = ..() + var/obj/item/organ/internal/tongue/alien/alien_tongue_type = /obj/item/organ/internal/tongue/alien + voice_filter = initial(alien_tongue_type.voice_filter) + +/obj/item/organ/internal/tongue/skrell + name = "skrell tongue" + desc = "A fleshy muscle mostly used for warbling." + say_mod = "warbles" diff --git a/modular_skyrat/modules/organs/icons/akula_eyes.dmi b/modular_nova/modules/organs/icons/akula_eyes.dmi similarity index 100% rename from modular_skyrat/modules/organs/icons/akula_eyes.dmi rename to modular_nova/modules/organs/icons/akula_eyes.dmi diff --git a/modular_skyrat/modules/organs/icons/cyber_tongue.dmi b/modular_nova/modules/organs/icons/cyber_tongue.dmi similarity index 100% rename from modular_skyrat/modules/organs/icons/cyber_tongue.dmi rename to modular_nova/modules/organs/icons/cyber_tongue.dmi diff --git a/modular_skyrat/modules/organs/icons/hemophage_organs.dmi b/modular_nova/modules/organs/icons/hemophage_organs.dmi similarity index 100% rename from modular_skyrat/modules/organs/icons/hemophage_organs.dmi rename to modular_nova/modules/organs/icons/hemophage_organs.dmi diff --git a/modular_skyrat/modules/organs/icons/insect_eyes.dmi b/modular_nova/modules/organs/icons/insect_eyes.dmi similarity index 100% rename from modular_skyrat/modules/organs/icons/insect_eyes.dmi rename to modular_nova/modules/organs/icons/insect_eyes.dmi diff --git a/modular_skyrat/modules/organs/icons/lungs.dmi b/modular_nova/modules/organs/icons/lungs.dmi similarity index 100% rename from modular_skyrat/modules/organs/icons/lungs.dmi rename to modular_nova/modules/organs/icons/lungs.dmi diff --git a/modular_skyrat/modules/organs/icons/skrell_eyes.dmi b/modular_nova/modules/organs/icons/skrell_eyes.dmi similarity index 100% rename from modular_skyrat/modules/organs/icons/skrell_eyes.dmi rename to modular_nova/modules/organs/icons/skrell_eyes.dmi diff --git a/modular_skyrat/modules/organs/icons/skrell_organ.dmi b/modular_nova/modules/organs/icons/skrell_organ.dmi similarity index 100% rename from modular_skyrat/modules/organs/icons/skrell_organ.dmi rename to modular_nova/modules/organs/icons/skrell_organ.dmi diff --git a/modular_skyrat/modules/organs/icons/snail_eyes.dmi b/modular_nova/modules/organs/icons/snail_eyes.dmi similarity index 100% rename from modular_skyrat/modules/organs/icons/snail_eyes.dmi rename to modular_nova/modules/organs/icons/snail_eyes.dmi diff --git a/modular_nova/modules/organs/icons/stomach.dmi b/modular_nova/modules/organs/icons/stomach.dmi new file mode 100644 index 00000000000000..69ef103ebaa1ee Binary files /dev/null and b/modular_nova/modules/organs/icons/stomach.dmi differ diff --git a/modular_skyrat/modules/organs/icons/teshari_eyes.dmi b/modular_nova/modules/organs/icons/teshari_eyes.dmi similarity index 100% rename from modular_skyrat/modules/organs/icons/teshari_eyes.dmi rename to modular_nova/modules/organs/icons/teshari_eyes.dmi diff --git a/modular_skyrat/modules/organs/icons/vox_eyes.dmi b/modular_nova/modules/organs/icons/vox_eyes.dmi similarity index 100% rename from modular_skyrat/modules/organs/icons/vox_eyes.dmi rename to modular_nova/modules/organs/icons/vox_eyes.dmi diff --git a/modular_skyrat/modules/oversized/code/door.dm b/modular_nova/modules/oversized/code/door.dm similarity index 91% rename from modular_skyrat/modules/oversized/code/door.dm rename to modular_nova/modules/oversized/code/door.dm index b7c534494b3c7e..e2d58c9e4aa7dd 100644 --- a/modular_skyrat/modules/oversized/code/door.dm +++ b/modular_nova/modules/oversized/code/door.dm @@ -14,7 +14,6 @@ var/affecting = crossing_human.get_bodypart(BODY_ZONE_HEAD) crossing_human.apply_damage(15, BRUTE, affecting) crossing_human.Knockdown(20) - crossing_human.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15) //We do a bit of brain damage crossing_human.visible_message(span_warning("[crossing_human] slams their head into the frame of [src] with a sickening thud!"), \ span_userdanger("You slam your head against [src]!") ) diff --git a/modular_nova/modules/oversized/code/oversized_quirk.dm b/modular_nova/modules/oversized/code/oversized_quirk.dm new file mode 100644 index 00000000000000..8c6c88298f874d --- /dev/null +++ b/modular_nova/modules/oversized/code/oversized_quirk.dm @@ -0,0 +1,105 @@ +#define OVERSIZED_SPEED_SLOWDOWN 0.5 +#define OVERSIZED_HUNGER_MOD 1.5 + +// Before making any changes to oversized, please see the module's readme.md file + +/datum/quirk/oversized + name = "Oversized" + desc = "You, for whatever reason, are FAR too tall, and will encounter some rough situations because of it." + gain_text = span_notice("That airlock looks small...") + lose_text = span_notice("Is it still the same size...?") //Lol + medical_record_text = "Patient is abnormally tall." + value = 0 + mob_trait = TRAIT_OVERSIZED + icon = FA_ICON_EXPAND_ARROWS_ALT + veteran_only = TRUE + quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE + +/datum/quirk/oversized/add(client/client_source) + var/mob/living/carbon/human/human_holder = quirk_holder + human_holder.dna.features["body_size"] = 2 + human_holder.maptext_height = 32 * human_holder.dna.features["body_size"] //Adjust runechat height + human_holder.dna.update_body_size() + human_holder.mob_size = MOB_SIZE_LARGE + + RegisterSignal(human_holder, COMSIG_CARBON_POST_ATTACH_LIMB, PROC_REF(on_gain_limb)) // make sure we handle this when new ones are applied + + // just dummy call our current limbs to have less duplication (by having more duplication ahueheu) + for(var/obj/item/bodypart/bodypart as anything in human_holder.bodyparts) + on_gain_limb(src, bodypart, special = FALSE) + + human_holder.blood_volume_normal = BLOOD_VOLUME_OVERSIZED + human_holder.physiology.hunger_mod *= OVERSIZED_HUNGER_MOD //50% hungrier + human_holder.add_movespeed_modifier(/datum/movespeed_modifier/oversized) + var/obj/item/organ/internal/stomach/old_stomach = human_holder.get_organ_slot(ORGAN_SLOT_STOMACH) + if(!istype(old_stomach)) + return + old_stomach.Remove(human_holder, special = TRUE) + qdel(old_stomach) + if(issynthetic(human_holder)) + var/obj/item/organ/internal/stomach/synth/oversized/new_synth_stomach = new //YOU LOOK HUGE, THAT MUST MEAN YOU HAVE HUGE reactor! RIP AND TEAR YOUR HUGE reactor! + new_synth_stomach.Insert(human_holder, special = TRUE) + to_chat(human_holder, span_warning("You feel your massive engine rumble!")) + else + var/obj/item/organ/internal/stomach/oversized/new_stomach = new //YOU LOOK HUGE, THAT MUST MEAN YOU HAVE HUGE GUTS! RIP AND TEAR YOUR HUGE GUTS! + new_stomach.Insert(human_holder, special = TRUE) + to_chat(human_holder, span_warning("You feel your massive stomach rumble!")) + +/datum/quirk/oversized/remove() + var/mob/living/carbon/human/human_holder = quirk_holder + human_holder.dna.features["body_size"] = human_holder?.client?.prefs ?human_holder?.client?.prefs?.read_preference(/datum/preference/numeric/body_size) : 1 + human_holder.maptext_height = 32 * human_holder.dna.features["body_size"] + human_holder.dna.update_body_size() + human_holder.mob_size = MOB_SIZE_HUMAN + + var/obj/item/bodypart/arm/left/left_arm = human_holder.get_bodypart(BODY_ZONE_L_ARM) + if(left_arm) + left_arm.unarmed_damage_high = initial(left_arm.unarmed_damage_high) + + var/obj/item/bodypart/arm/right/right_arm = human_holder.get_bodypart(BODY_ZONE_R_ARM) + if(right_arm) + right_arm.unarmed_damage_high = initial(right_arm.unarmed_damage_high) + + var/obj/item/bodypart/leg/left_leg = human_holder.get_bodypart(BODY_ZONE_L_LEG) + if (left_leg) + left_leg.unarmed_effectiveness = initial(left_leg.unarmed_effectiveness) + + var/obj/item/bodypart/leg/right_leg = human_holder.get_bodypart(BODY_ZONE_R_LEG) + if (right_leg) + right_leg.unarmed_effectiveness = initial(right_leg.unarmed_effectiveness) + + for(var/obj/item/bodypart/bodypart as anything in human_holder.bodyparts) + bodypart.name = replacetext(bodypart.name, "oversized ", "") + + UnregisterSignal(human_holder, COMSIG_CARBON_POST_ATTACH_LIMB) + + human_holder.blood_volume_normal = BLOOD_VOLUME_NORMAL + human_holder.physiology.hunger_mod /= OVERSIZED_HUNGER_MOD + human_holder.remove_movespeed_modifier(/datum/movespeed_modifier/oversized) + +/datum/quirk/oversized/proc/on_gain_limb(datum/source, obj/item/bodypart/gained, special) + SIGNAL_HANDLER + + if(findtext(gained.name, "oversized")) + return + + // Oversized arms have a higher damage maximum. Pretty simple. + if(istype(gained, /obj/item/bodypart/arm)) + var/obj/item/bodypart/arm/new_arm = gained + new_arm.unarmed_damage_high = initial(new_arm.unarmed_damage_high) + OVERSIZED_HARM_DAMAGE_BONUS + + // Before this, we never actually did anything with Oversized legs. + // This brings their unarmed_effectiveness up to 20 from 15, which is on par with mushroom legs. + // Functionally, this makes their prone kicks more accurate and increases the chance of extending prone knockdown... but only while the victim is already prone. + else if(istype(gained, /obj/item/bodypart/leg)) + var/obj/item/bodypart/leg/new_leg = gained + new_leg.unarmed_effectiveness = initial(new_leg.unarmed_effectiveness) + OVERSIZED_KICK_EFFECTIVENESS_BONUS + + gained.name = "oversized " + gained.name + +/datum/movespeed_modifier/oversized + multiplicative_slowdown = OVERSIZED_SPEED_SLOWDOWN + + +#undef OVERSIZED_HUNGER_MOD +#undef OVERSIZED_SPEED_SLOWDOWN diff --git a/modular_skyrat/modules/oversized/readme.md b/modular_nova/modules/oversized/readme.md similarity index 100% rename from modular_skyrat/modules/oversized/readme.md rename to modular_nova/modules/oversized/readme.md diff --git a/modular_skyrat/modules/oversized/sound/chair_break.ogg b/modular_nova/modules/oversized/sound/chair_break.ogg similarity index 100% rename from modular_skyrat/modules/oversized/sound/chair_break.ogg rename to modular_nova/modules/oversized/sound/chair_break.ogg diff --git a/modular_skyrat/modules/panicbunker/code/panicbunker.dm b/modular_nova/modules/panicbunker/code/panicbunker.dm similarity index 100% rename from modular_skyrat/modules/panicbunker/code/panicbunker.dm rename to modular_nova/modules/panicbunker/code/panicbunker.dm diff --git a/modular_skyrat/modules/panicbunker/code/readme.md b/modular_nova/modules/panicbunker/code/readme.md similarity index 100% rename from modular_skyrat/modules/panicbunker/code/readme.md rename to modular_nova/modules/panicbunker/code/readme.md diff --git a/modular_nova/modules/paycheck_rations/code/quirk.dm b/modular_nova/modules/paycheck_rations/code/quirk.dm new file mode 100644 index 00000000000000..1b232998775bf5 --- /dev/null +++ b/modular_nova/modules/paycheck_rations/code/quirk.dm @@ -0,0 +1,79 @@ +/datum/quirk/item_quirk/ration_system + name = "Ration Ticket Receiver" + desc = "Due to some circumstance of your life, you have enrolled in the ration tickets program, \ + which will halve all of your paychecks in exchange for granting you ration tickets, which can be \ + redeemed at a cargo console for food and other items." + icon = FA_ICON_DONATE + quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_HIDE_FROM_SCAN + medical_record_text = "Has enrolled in the ration ticket program." + value = 0 + hardcore_value = 0 + +/datum/quirk/item_quirk/ration_system/add_unique(client/client_source) + var/mob/living/carbon/human/human_holder = quirk_holder + if(!human_holder.account_id) + return + var/datum/bank_account/account = SSeconomy.bank_accounts_by_id["[human_holder.account_id]"] + + var/obj/new_ticket_book = new /obj/item/storage/ration_ticket_book(get_turf(human_holder)) + give_item_to_holder( + new_ticket_book, + list( + LOCATION_LPOCKET = ITEM_SLOT_LPOCKET, + LOCATION_RPOCKET = ITEM_SLOT_RPOCKET, + LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, + LOCATION_HANDS = ITEM_SLOT_HANDS, + ), + ) + account.tracked_ticket_book = WEAKREF(new_ticket_book) + account.payday_modifier = 0.5 + to_chat(client_source.mob, span_notice("You remember to keep close hold of your ticket book, it can't be replaced if lost and all of your ration tickets are placed there!")) + +// Edits to bank accounts to make the above possible + +/datum/bank_account + /// Tracks a linked ration ticket book. If we have one of these, then we'll put tickets in it every payday. + var/datum/weakref/tracked_ticket_book + /// Tracks if the last ticket we got was for luxury items, if this is true we get a normal food ticket + var/last_ticket_luxury = TRUE + +/datum/bank_account/payday(amount_of_paychecks, free = FALSE) + . = ..() + if(!.) + return + if(isnull(tracked_ticket_book)) + return + make_ration_ticket() + +/// Attempts to create a ration ticket book in the card holder's hand, and failing that, the drop location of the card +/datum/bank_account/proc/make_ration_ticket() + if(!(SSeconomy.times_fired % 3 == 0)) + return + + if(!bank_cards.len) + return + + var/obj/item/storage/ration_ticket_book/ticket_book = tracked_ticket_book.resolve() + if(!ticket_book) + tracked_ticket_book = null + return + + var/obj/item/created_ticket + for(var/obj/card in bank_cards) + // We want to only make one ticket pr account per payday + if(created_ticket) + continue + var/ticket_to_make + if(!last_ticket_luxury) + ticket_to_make = /obj/item/paper/paperslip/ration_ticket/luxury + else + ticket_to_make = /obj/item/paper/paperslip/ration_ticket + created_ticket = new ticket_to_make(card) + last_ticket_luxury = !last_ticket_luxury + if(!ticket_book.atom_storage.can_insert(created_ticket, messages = FALSE)) + qdel(created_ticket) + bank_card_talk("ERROR: Failed to place ration ticket in ticket book, ensure book is not full.") + // We can stop here, its joever for trying to place tickets in the book this payday. You snooze you lose! + return + created_ticket.forceMove(ticket_book) + bank_card_talk("A new [last_ticket_luxury ? "luxury item" : "standard"] ration ticket has been placed in your ticket book.") diff --git a/modular_nova/modules/paycheck_rations/code/rationpacks.dm b/modular_nova/modules/paycheck_rations/code/rationpacks.dm new file mode 100644 index 00000000000000..dfab77c4ae19b3 --- /dev/null +++ b/modular_nova/modules/paycheck_rations/code/rationpacks.dm @@ -0,0 +1,110 @@ +/obj/item/storage/box/spaceman_ration + name = "unlabeled ration container" + desc = "You get the feeling you sholdn't have been sent this one?" + icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi' + icon_state = "plants" + illustration = null + /// How many storage slots this has, yes I'm being lazy + var/box_storage_slots = 1 + +/obj/item/storage/box/spaceman_ration/Initialize(mapload) + . = ..() + atom_storage.max_slots = box_storage_slots + +/obj/item/storage/box/spaceman_ration/PopulateContents() + return + +// Contains your daily need of plants, yum! + +/obj/item/storage/box/spaceman_ration/plants + name = "produce ration container" + desc = "Contains your allotted ration of produce, which in this case should be peas and a potato." + box_storage_slots = 2 + +/obj/item/storage/box/spaceman_ration/plants/PopulateContents() + new /obj/item/food/grown/peas(src) + new /obj/item/food/grown/potato(src) + +// Alternate diet, themed around martian food a bit more + +/obj/item/storage/box/spaceman_ration/plants/alternate + desc = "Contains your allotted ration of produce, which in this case should be cabbage and an onion." + icon_state = "plants_alt" + +/obj/item/storage/box/spaceman_ration/plants/alternate/PopulateContents() + new /obj/item/food/grown/cabbage(src) + new /obj/item/food/grown/onion(src) + +// For the moths amogus + +/obj/item/storage/box/spaceman_ration/plants/mothic + desc = "Contains your allotted ration of produce, which in this case should be chili and a potato." + icon_state = "plants_moth" + +/obj/item/storage/box/spaceman_ration/plants/mothic/PopulateContents() + new /obj/item/food/grown/chili(src) + new /obj/item/food/grown/potato(src) + +// For the lizards amongus + +/obj/item/storage/box/spaceman_ration/plants/lizard + desc = "Contains your allotted ration of produce, which in this case should be two korta nuts and two potatoes." + icon_state = "plants_lizard" + box_storage_slots = 4 + +/obj/item/storage/box/spaceman_ration/plants/lizard/PopulateContents() + new /obj/item/food/grown/korta_nut(src) + new /obj/item/food/grown/korta_nut(src) + new /obj/item/food/grown/potato(src) + new /obj/item/food/grown/potato(src) + +// Contains your allotted meats, tasty! + +/obj/item/storage/box/spaceman_ration/meats + name = "meat ration container" + desc = "Contains your allotted ration of meat, which in this case should be preserved pork and a random side option." + icon_state = "meats" + +/obj/item/storage/box/spaceman_ration/meats/PopulateContents() + new /obj/item/food/meat/slab/pig(src) + var/secondary_meat = pick(/obj/item/food/raw_sausage, /obj/item/food/meat/slab/chicken, /obj/item/food/meat/slab/meatproduct) + new secondary_meat(src) + +// Seafood variant + +/obj/item/storage/box/spaceman_ration/meats/fish + desc = "Contains your allotted ration of meat, which in this case should be preserved pork and a random seafood side option." + icon_state = "meats_fish" + +/obj/item/storage/box/spaceman_ration/meats/fish/PopulateContents() + new /obj/item/food/meat/slab/pig(src) + var/secondary_meat = pick(/obj/item/food/meat/slab/rawcrab, /obj/item/food/fishmeat) + new secondary_meat(src) + +// For the lizards amongus + +/obj/item/storage/box/spaceman_ration/meats/lizard + desc = "Contains your allotted ration of meat, which in this case should be preserved pork and a random seafood side option." + icon_state = "meats_lizard" + +/obj/item/storage/box/spaceman_ration/meats/lizard/PopulateContents() + new /obj/item/food/fishmeat/moonfish(src) + var/secondary_meat = pick(/obj/item/food/raw_tiziran_sausage, /obj/item/food/liver_pate) + new secondary_meat(src) + +// Paper sack that spawns a random two slices of bread + +/obj/item/storage/box/papersack/ration_bread_slice + name = "bread and cheese ration bag" + desc = "A dusty old paper sack that should ideally contain your ration of bread and cheese." + +/obj/item/storage/box/papersack/ration_bread_slice/Initialize(mapload) + . = ..() + atom_storage.max_slots = 3 + +/obj/item/storage/box/papersack/ration_bread_slice/PopulateContents() + var/bread_slice = pick(/obj/item/food/breadslice/plain, /obj/item/food/breadslice/reispan, /obj/item/food/breadslice/root) + new bread_slice(src) + new bread_slice(src) + var/cheese_slice = pick(/obj/item/food/cheese/wedge, /obj/item/food/cheese/firm_cheese_slice, /obj/item/food/cheese/cheese_curds, /obj/item/food/cheese/mozzarella) + new cheese_slice(src) diff --git a/modular_nova/modules/paycheck_rations/code/reagents.dm b/modular_nova/modules/paycheck_rations/code/reagents.dm new file mode 100644 index 00000000000000..d4163f43b296fd --- /dev/null +++ b/modular_nova/modules/paycheck_rations/code/reagents.dm @@ -0,0 +1,79 @@ +/obj/item/reagent_containers/condiment/flour/small_ration + name = "small flour sack" + desc = "A maritime ration-sized portion of flour, containing just enough to make a single good loaf of bread to fuel the day." + icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi' + list_reagents = list(/datum/reagent/consumable/flour = 15) + +/obj/item/reagent_containers/condiment/rice/small_ration + name = "small rice sack" + desc = "A maritime ration-sized portion of rice, containing just enough to make the universe's saddest rice dish." + icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi' + list_reagents = list(/datum/reagent/consumable/rice = 10) + +/obj/item/reagent_containers/condiment/sugar/small_ration + name = "small sugar sack" + desc = "A maritime ration-sized portion of sugar, containing just enough to make the day just a tiny bit sweeter." + icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi' + list_reagents = list(/datum/reagent/consumable/sugar = 10) + +/obj/item/reagent_containers/condiment/small_ration_korta_flour + name = "small korta flour sack" + desc = "A maritime ration-sized portion of korta flour, containing just enough to make a single good loaf of bread to fuel the day." + icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi' + icon_state = "flour_korta" + 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/korta_flour = 10) + fill_icon_thresholds = null + +/obj/item/reagent_containers/condiment/soymilk/small_ration + name = "small soy milk" + desc = "It's soy milk. White and nutritious goodness! This one is significantly smaller than normal cartons; just enough to make some rootdough with." + icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi' + list_reagents = list(/datum/reagent/consumable/soymilk = 15) + +/obj/item/reagent_containers/condiment/milk/small_ration + name = "small milk" + desc = "It's milk. White and nutritious goodness! This one is significantly smaller than normal cartons; just enough to make some cheese with." + icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi' + list_reagents = list(/datum/reagent/consumable/milk = 15) + +/obj/item/reagent_containers/cup/glass/bottle/small/tiny + name = "tiny glass bottle" + volume = 10 + +/obj/item/reagent_containers/cup/glass/bottle/small/tiny/Initialize(mapload, vol) + . = ..() + transform = transform.Scale(0.75, 0.75) + +/obj/item/reagent_containers/cup/glass/bottle/small/tiny/lime_juice + name = "tiny lime juice bottle" + desc = "A maritime ration-sized bottle of lime juice, containing enough to keep the scurvy away while on long voyages." + list_reagents = list(/datum/reagent/consumable/limejuice = 10) + +/obj/item/reagent_containers/cup/glass/bottle/small/tiny/vinegar + name = "tiny vinegar bottle" + desc = "A maritime ration-sized bottle of vinegar, containing enough to... Well, we're not entirely sure, but law mandates you're given this, so..." + list_reagents = list(/datum/reagent/consumable/vinegar = 10) + +/obj/item/reagent_containers/cup/glass/bottle/small/tiny/coffee + name = "tiny coffee powder bottle" + desc = "A maritime ration-sized bottle of coffee powder, containing enough to make a morning's brew." + list_reagents = list(/datum/reagent/toxin/coffeepowder = 10) + +/obj/item/reagent_containers/cup/glass/bottle/small/tiny/tea + name = "tiny tea powder bottle" + desc = "A maritime ration-sized bottle of tea powder, containing enough to make a morning's tea." + list_reagents = list(/datum/reagent/toxin/teapowder = 10) + +/obj/item/reagent_containers/cup/glass/bottle/small/tiny/honey + name = "tiny honey bottle" + desc = "A maritime ration-sized bottle of honey, a minuscule amount for a minuscule sweetening to your day." + list_reagents = list(/datum/reagent/consumable/honey = 5) + +/obj/item/reagent_containers/cup/glass/bottle/small/tiny/caramel + name = "tiny caramel bottle" + desc = "A maritime ration-sized bottle of caramel, in the past these used to be something called 'treacle', which was \ + the tar left over from refining sugar. Nowadays, governments are rich enough to just send caramel instead." + list_reagents = list(/datum/reagent/consumable/caramel = 10) diff --git a/modular_nova/modules/paycheck_rations/code/ticket_book.dm b/modular_nova/modules/paycheck_rations/code/ticket_book.dm new file mode 100644 index 00000000000000..99066581bcef51 --- /dev/null +++ b/modular_nova/modules/paycheck_rations/code/ticket_book.dm @@ -0,0 +1,14 @@ +/obj/item/storage/ration_ticket_book + name = "ration ticket book" + desc = "A small booklet able to hold all your ration tickets. More will be available here as your paychecks come in." + icon = 'modular_nova/modules/paycheck_rations/icons/tickets.dmi' + icon_state = "ticket_book" + w_class = WEIGHT_CLASS_SMALL + +/obj/item/storage/ration_ticket_book/Initialize(mapload) + . = ..() + atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL + atom_storage.max_slots = 4 + atom_storage.set_holdable(list( + /obj/item/paper/paperslip/ration_ticket, + )) diff --git a/modular_nova/modules/paycheck_rations/code/tickets.dm b/modular_nova/modules/paycheck_rations/code/tickets.dm new file mode 100644 index 00000000000000..43ce9059cbe820 --- /dev/null +++ b/modular_nova/modules/paycheck_rations/code/tickets.dm @@ -0,0 +1,219 @@ +/obj/item/paper/paperslip/ration_ticket + name = "ration ticket - standard" + desc = "A little slip of paper that'll slot right into any cargo console and put your alotted food ration on the next shuttle to the station." + icon = 'modular_nova/modules/paycheck_rations/icons/tickets.dmi' + icon_state = "ticket_food" + default_raw_text = "Redeem this ticket in the nearest supply console to receive benefits." + color = COLOR_OFF_WHITE + show_written_words = FALSE + /// The finalized list of items we send once the ticket is used, don't define here, the procs will do it + var/list/items_we_deliver = list() + +/obj/item/paper/paperslip/ration_ticket/attack_atom(obj/machinery/computer/cargo/object_we_attack, mob/living/user, params) + if(!istype(object_we_attack)) + return ..() + if(!object_we_attack.is_operational || !user.can_perform_action(object_we_attack)) + return ..() + + try_to_make_ration_order_list(object_we_attack, user) + +/// Attempts to fill out the order list with items of the user's choosing, will stop in its tracks if it fails +/obj/item/paper/paperslip/ration_ticket/proc/try_to_make_ration_order_list(obj/machinery/computer/cargo/object_we_attack, mob/living/user) + forceMove(object_we_attack) + playsound(object_we_attack, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + + // List of meat options we get + var/list/radial_meat_options = list( + "Standard Meats" = image(icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "meats"), + "Seafood Meats" = image(icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "meats_fish"), + "Tizirian Meats" = image(icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "meats_lizard"), + ) + + var/meats_choice = show_radial_menu(user, object_we_attack, radial_meat_options, require_near = TRUE) + + if(!meats_choice) + object_we_attack.balloon_alert(user, "no selection made") + forceMove(drop_location(object_we_attack)) + playsound(object_we_attack, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + return + + switch(meats_choice) + if("Standard Meats") + items_we_deliver += /obj/item/storage/box/spaceman_ration/meats + if("Seafood Meats") + items_we_deliver += /obj/item/storage/box/spaceman_ration/meats/fish + if("Tizirian Meats") + items_we_deliver += /obj/item/storage/box/spaceman_ration/meats/lizard + + // List of produce options we get + var/list/radial_produce_options = list( + "Standard Produce" = image(icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "plants"), + "Alternative Produce" = image(icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_alt"), + "Mothic Produce" = image(icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_moth"), + "Tizirian Produce" = image(icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_lizard"), + ) + + var/produce_choice = show_radial_menu(user, object_we_attack, radial_produce_options, require_near = TRUE) + + if(!produce_choice) + object_we_attack.balloon_alert(user, "no selection made") + // Reset the list if we fail + items_we_deliver = list() + forceMove(drop_location(object_we_attack)) + playsound(object_we_attack, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + return + + switch(produce_choice) + if("Standard Produce") + items_we_deliver += /obj/item/storage/box/spaceman_ration/plants + if("Alternative Produce") + items_we_deliver += /obj/item/storage/box/spaceman_ration/plants/alternate + if("Mothic Produce") + items_we_deliver += /obj/item/storage/box/spaceman_ration/plants/mothic + if("Tizirian Produce") + items_we_deliver += /obj/item/storage/box/spaceman_ration/plants/lizard + + items_we_deliver += /obj/item/storage/box/papersack/ration_bread_slice + + // List of flour options we get + var/list/radial_flour_options = list( + "Standard Flour" = image(icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "flour"), + "Korta Flour" = image(icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "flour_korta"), + ) + + var/flour_choice = show_radial_menu(user, object_we_attack, radial_flour_options, require_near = TRUE) + + if(!flour_choice) + object_we_attack.balloon_alert(user, "no selection made") + // Reset the list if we fail + items_we_deliver = list() + forceMove(drop_location(object_we_attack)) + playsound(object_we_attack, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + return + + switch(flour_choice) + if("Standard Flour") + items_we_deliver += /obj/item/reagent_containers/condiment/flour/small_ration + if("Korta Flour") + items_we_deliver += /obj/item/reagent_containers/condiment/small_ration_korta_flour + items_we_deliver += /obj/item/reagent_containers/condiment/soymilk/small_ration + + items_we_deliver += /obj/item/reagent_containers/condiment/rice/small_ration + items_we_deliver += /obj/item/reagent_containers/condiment/sugar/small_ration + items_we_deliver += /obj/item/reagent_containers/cup/glass/bottle/small/tiny/lime_juice + items_we_deliver += /obj/item/reagent_containers/cup/glass/bottle/small/tiny/vinegar + + items_we_deliver += /obj/item/reagent_containers/cup/glass/waterbottle + + var/random_drink = pick( \ + /obj/item/reagent_containers/cup/glass/waterbottle/tea, \ + /obj/item/reagent_containers/cup/glass/waterbottle/tea/mushroom, \ + /obj/item/reagent_containers/cup/glass/waterbottle/tea/astra, \ + /obj/item/reagent_containers/cup/glass/coffee, \ + ) + items_we_deliver += random_drink + + make_the_actual_order(object_we_attack, user) + +/// Takes the list of things to deliver and puts it into a cargo order +/obj/item/paper/paperslip/ration_ticket/proc/make_the_actual_order(obj/machinery/computer/cargo/object_we_attack, mob/user) + var/datum/supply_pack/custom/ration_pack/ration_pack = new( + purchaser = user, \ + cost = 0, \ + contains = items_we_deliver, + ) + var/datum/supply_order/new_order = new( + pack = ration_pack, + orderer = user, + orderer_rank = "Ration Ticket", + orderer_ckey = user.ckey, + reason = "", + paying_account = null, + department_destination = null, + coupon = null, + charge_on_purchase = FALSE, + manifest_can_fail = FALSE, + can_be_cancelled = FALSE, + ) + object_we_attack.say("Ration order placed! It will arrive on the next cargo shuttle!") + SSshuttle.shopping_list += new_order + qdel(src) + +/datum/supply_pack/custom/ration_pack + name = "rations order" + crate_name = "ration delivery crate" + access = list() + crate_type = /obj/structure/closet/crate/cardboard + +/datum/supply_pack/custom/ration_pack/New(purchaser, cost, list/contains) + . = ..() + name = "[purchaser]'s Rations Order" + crate_name = "[purchaser]'s ration delivery crate" + src.cost = cost + src.contains = contains + +// Ticket for some luxury items, which you get every second paycheck + +/obj/item/paper/paperslip/ration_ticket/luxury + name = "ration ticket - luxury" + desc = "A little slip of paper that'll slot right into any cargo console and put your alotted ration of luxury goods on the next cargo shuttle to the station." + icon_state = "ticket_luxury" + +/// Attempts to fill out the order list with items of the user's choosing, will stop in its tracks if it fails +/obj/item/paper/paperslip/ration_ticket/luxury/try_to_make_ration_order_list(obj/machinery/computer/cargo/object_we_attack, mob/living/user) + forceMove(object_we_attack) + playsound(object_we_attack, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + + // List of meat options we get + var/list/radial_alcohol_options = list( + "Navy Rum" = image(icon = 'modular_nova/master_files/icons/obj/drinks.dmi', icon_state = "navy_rum"), + "Ginger Beer" = image(icon = 'modular_nova/master_files/icons/obj/drinks.dmi', icon_state = "gingie_beer"), + "Kortara" = image(icon = 'modular_nova/master_files/icons/obj/drinks.dmi', icon_state = "kortara"), + ) + + var/alcohol_choice = show_radial_menu(user, object_we_attack, radial_alcohol_options, require_near = TRUE) + + if(!alcohol_choice) + object_we_attack.balloon_alert(user, "no selection made") + forceMove(drop_location(object_we_attack)) + return + + switch(alcohol_choice) + if("Navy Rum") + items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/nova/navy_rum + items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/nova/navy_rum + if("Ginger Beer") + items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/nova/ginger_beer + items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/nova/ginger_beer + if("Kortara") + items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/nova/kortara + items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/nova/kortara + + // List of produce options we get + var/list/radial_consumables_options = list( + "Cigarettes" = image(icon = 'icons/obj/cigarettes.dmi', icon_state = "robust"), + "Coffee Powder" = image(icon = 'icons/obj/food/cartridges.dmi', icon_state = "cartridge_blend"), + "Tea Powder" = image(icon = 'icons/obj/service/hydroponics/harvest.dmi', icon_state = "tea_aspera_leaves"), + ) + + var/consumables_choice = show_radial_menu(user, object_we_attack, radial_consumables_options, require_near = TRUE) + + if(!consumables_choice) + object_we_attack.balloon_alert(user, "no selection made") + // Reset the list if we fail + items_we_deliver = list() + forceMove(drop_location(object_we_attack)) + return + + switch(consumables_choice) + if("Cigarettes") + items_we_deliver += /obj/item/storage/fancy/cigarettes/cigpack_robust + if("Coffee Powder") + items_we_deliver += /obj/item/reagent_containers/cup/glass/bottle/small/tiny/coffee + if("Tea Powder") + items_we_deliver += /obj/item/reagent_containers/cup/glass/bottle/small/tiny/tea + + items_we_deliver += /obj/item/reagent_containers/cup/glass/bottle/small/tiny/honey + items_we_deliver += /obj/item/reagent_containers/cup/glass/bottle/small/tiny/caramel + + make_the_actual_order(object_we_attack, user) diff --git a/modular_nova/modules/paycheck_rations/icons/food_containers.dmi b/modular_nova/modules/paycheck_rations/icons/food_containers.dmi new file mode 100644 index 00000000000000..70bc6082b7adc2 Binary files /dev/null and b/modular_nova/modules/paycheck_rations/icons/food_containers.dmi differ diff --git a/modular_nova/modules/paycheck_rations/icons/tickets.dmi b/modular_nova/modules/paycheck_rations/icons/tickets.dmi new file mode 100644 index 00000000000000..c0e9435f286fb8 Binary files /dev/null and b/modular_nova/modules/paycheck_rations/icons/tickets.dmi differ diff --git a/modular_nova/modules/pet_owner/pet_owner.dm b/modular_nova/modules/pet_owner/pet_owner.dm new file mode 100644 index 00000000000000..b2806761c94c21 --- /dev/null +++ b/modular_nova/modules/pet_owner/pet_owner.dm @@ -0,0 +1,138 @@ +/datum/quirk/item_quirk/pet_owner + name = "Pet Owner" + desc = "You bring your pet to work with you so that it, too, can experience the dangers of station life." + icon = FA_ICON_HORSE + value = 4 + mob_trait = TRAIT_PET_OWNER + veteran_only = TRUE + gain_text = span_notice("You brought your pet with you to work.") + lose_text = span_danger("You feel lonely, as if leaving somebody behind...") + medical_record_text = "Patient mentions their fondness for their pet." + mail_goodies = list( + /obj/item/clothing/neck/petcollar + ) + var/pet_type = NONE + +/datum/quirk_constant_data/pet_owner + associated_typepath = /datum/quirk/item_quirk/pet_owner + customization_options = list(/datum/preference/choiced/pet_owner, /datum/preference/text/pet_name, /datum/preference/text/pet_desc) + +/datum/quirk/item_quirk/pet_owner/add_unique(client/client_source) + var/desired_pet = client_source?.prefs.read_preference(/datum/preference/choiced/pet_owner) || "Random" + + if(desired_pet != "Random") + pet_type = GLOB.possible_player_pet[desired_pet] + + if(pet_type == NONE) // Pet not set, we're picking one for them. + pet_type = pick(flatten_list(GLOB.possible_player_pet)) + + var/obj/item/pet_carrier/carrier = new /obj/item/pet_carrier(get_turf(quirk_holder)) + var/mob/living/simple_animal/pet/pet = new pet_type(carrier) + var/new_name = client_source?.prefs.read_preference(/datum/preference/text/pet_name) + if (new_name) + pet.name = new_name + var/new_desc = client_source?.prefs.read_preference(/datum/preference/text/pet_desc) + if (new_desc) + pet.desc = new_desc + carrier.add_occupant(pet) + give_item_to_holder( + carrier, + list( + LOCATION_HANDS = ITEM_SLOT_HANDS + ), + flavour_text = "Looks tightly packed - you might not be able to put the pet back in once they're out.", + ) + +/datum/preference/choiced/pet_owner + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED + savefile_key = "pet_owner" + savefile_identifier = PREFERENCE_CHARACTER + can_randomize = FALSE + +GLOBAL_LIST_INIT(possible_player_pet, list( + "Axolotl" = /mob/living/basic/axolotl, + "Baby Penguin" = /mob/living/basic/pet/penguin/baby/permanent, + "Bat" = /mob/living/basic/bat, + "Bull terrier" = /mob/living/basic/pet/dog/bullterrier, + "Butterfly" = /mob/living/basic/butterfly, + "Cat" = /mob/living/basic/pet/cat, + "Chick" = /mob/living/basic/chick/permanent, + "Chicken" = /mob/living/basic/chicken, + "Chinchilla (dark)" = /mob/living/basic/pet/chinchilla/black, + "Chinchilla (white)" = /mob/living/basic/pet/chinchilla/white, + "Corgi" = /mob/living/basic/pet/dog/corgi, + "Corgi puppy" = /mob/living/basic/pet/dog/corgi/puppy, + "Cockroach" = /mob/living/basic/cockroach, + "Crab" = /mob/living/basic/crab, + "Deer" = /mob/living/basic/deer, + "Dobermann" = /mob/living/basic/pet/dog/dobermann, + "Fox" = /mob/living/basic/pet/fox/docile, + "Frog" = /mob/living/basic/frog, + "Giant ant" = /mob/living/basic/ant, + "Kitten" = /mob/living/basic/pet/cat/kitten, + "Kiwi" = /mob/living/basic/kiwi, + "Mothroach" = /mob/living/basic/mothroach, + "Mouse (white)" = /mob/living/basic/mouse/white, + "Mouse (gray)" = /mob/living/basic/mouse/gray, + "Mouse (brown)" = /mob/living/basic/mouse/brown, + "Penguin" = /mob/living/basic/pet/penguin/emperor/neuter, + "Pig" = /mob/living/basic/pig, + "Pug" = /mob/living/basic/pet/dog/pug, + "Rabbit" = /mob/living/basic/rabbit, + "Sloth" = /mob/living/basic/sloth, + "Snake" = /mob/living/basic/snake, + "Spider" = /mob/living/basic/spider/maintenance, + "Tegu" = /mob/living/basic/lizard/tegu, +)) //some of these are too big to be put back into the pet carrier once taken out, so I put a warning on the carrier. + +/datum/preference/choiced/pet_owner/init_possible_values() + return list("Random") + assoc_to_keys(GLOB.possible_player_pet) + +/datum/preference/choiced/pet_owner/create_default_value() + return "Random" + +/datum/preference/choiced/pet_owner/is_accessible(datum/preferences/preferences) + if (!..()) + return FALSE + + return "Pet Owner" in preferences.all_quirks + +/datum/preference/choiced/pet_owner/apply_to_human(mob/living/carbon/human/target, value) + return + +/datum/preference/text/pet_name + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED + savefile_key = "pet_name" + savefile_identifier = PREFERENCE_CHARACTER + can_randomize = FALSE + maximum_value_length = 32 + +/datum/preference/text/pet_name/is_accessible(datum/preferences/preferences) + if (!..()) + return FALSE + + return "Pet Owner" in preferences.all_quirks + +/datum/preference/text/pet_name/serialize(input) + return htmlrendertext(input) + +/datum/preference/text/pet_name/apply_to_human(mob/living/carbon/human/target, value) + return + +/datum/preference/text/pet_desc + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED + savefile_key = "pet_desc" + savefile_identifier = PREFERENCE_CHARACTER + can_randomize = FALSE + +/datum/preference/text/pet_desc/is_accessible(datum/preferences/preferences) + if (!..()) + return FALSE + + return "Pet Owner" in preferences.all_quirks + +/datum/preference/text/pet_desc/serialize(input) + return htmlrendertext(input) + +/datum/preference/text/pet_desc/apply_to_human(mob/living/carbon/human/target, value) + return diff --git a/modular_skyrat/modules/pixel_shift/code/pixel_shift_component.dm b/modular_nova/modules/pixel_shift/code/pixel_shift_component.dm similarity index 100% rename from modular_skyrat/modules/pixel_shift/code/pixel_shift_component.dm rename to modular_nova/modules/pixel_shift/code/pixel_shift_component.dm diff --git a/modular_skyrat/modules/pixel_shift/code/pixel_shift_keybind.dm b/modular_nova/modules/pixel_shift/code/pixel_shift_keybind.dm similarity index 100% rename from modular_skyrat/modules/pixel_shift/code/pixel_shift_keybind.dm rename to modular_nova/modules/pixel_shift/code/pixel_shift_keybind.dm diff --git a/modular_skyrat/modules/pixel_shift/code/pixel_shift_mob.dm b/modular_nova/modules/pixel_shift/code/pixel_shift_mob.dm similarity index 100% rename from modular_skyrat/modules/pixel_shift/code/pixel_shift_mob.dm rename to modular_nova/modules/pixel_shift/code/pixel_shift_mob.dm diff --git a/modular_nova/modules/pixel_shift/readme.md b/modular_nova/modules/pixel_shift/readme.md new file mode 100644 index 00000000000000..397e2c6b316e7e --- /dev/null +++ b/modular_nova/modules/pixel_shift/readme.md @@ -0,0 +1,34 @@ +https://github.com/Skyrat-SS13/Skyrat-tg/pull/870 + +## Title: Pixel shifting for RP positioning + +MODULE ID: PIXEL_SHIFT + +### Description: + +Adds the ability for living mobs to shift their sprite to fit an RP situation better (standing against a wall for example). Not appended to proc due to it being a busy proc + +### TG Proc/File Changes: + +- N/A + +### Modular Overrides: + +- `modular_nova/master_files/code/datums/keybinding/mob.dm`: `var/list/hotkey_keys` +- `modular_nova/master_files/code/modules/mob/living/living.dm`: `proc/set_pull_offsets`, `proc/reset_pull_offsets` +- `modular_nova/master_files/code/modules/mob/living/living_movement.dm`: `proc/CanAllowThrough` + +### Defines: + +- `code/__DEFINES/~nova_defines/keybindings.dm`: `COMSIG_KB_MOB_PIXEL_SHIFT_DOWN`, `COMSIG_KB_MOB_PIXEL_SHIFT_UP` +- `code/__DEFINES/~nova_defines/living.dm`: `COMSIG_LIVING_SET_PULL_OFFSET`, `COMSIG_LIVING_RESET_PULL_OFFSETS`, `COMSIG_LIVING_CAN_ALLOW_THROUGH`, `COMPONENT_LIVING_PASSABLE` + +### Included files that are not contained in this module: + +- N/A + +### Credits: + +Azarak - Porting +Gandalf2k15 - Refactoring +Larentoun - Moved to Component diff --git a/modular_skyrat/modules/player_ranks/code/player_rank_controller/_player_rank_controller.dm b/modular_nova/modules/player_ranks/code/player_rank_controller/_player_rank_controller.dm similarity index 100% rename from modular_skyrat/modules/player_ranks/code/player_rank_controller/_player_rank_controller.dm rename to modular_nova/modules/player_ranks/code/player_rank_controller/_player_rank_controller.dm diff --git a/modular_skyrat/modules/player_ranks/code/player_rank_controller/donator_controller.dm b/modular_nova/modules/player_ranks/code/player_rank_controller/donator_controller.dm similarity index 95% rename from modular_skyrat/modules/player_ranks/code/player_rank_controller/donator_controller.dm rename to modular_nova/modules/player_ranks/code/player_rank_controller/donator_controller.dm index 4ed68934ef9afc..e547a60855ee04 100644 --- a/modular_skyrat/modules/player_ranks/code/player_rank_controller/donator_controller.dm +++ b/modular_nova/modules/player_ranks/code/player_rank_controller/donator_controller.dm @@ -10,7 +10,7 @@ GLOBAL_PROTECT(donator_list) /datum/player_rank_controller/donator/New() . = ..() - legacy_file_path = "[global.config.directory]/skyrat/donators.txt" + legacy_file_path = "[global.config.directory]/nova/donators.txt" diff --git a/modular_skyrat/modules/player_ranks/code/player_rank_controller/mentor_controller.dm b/modular_nova/modules/player_ranks/code/player_rank_controller/mentor_controller.dm similarity index 96% rename from modular_skyrat/modules/player_ranks/code/player_rank_controller/mentor_controller.dm rename to modular_nova/modules/player_ranks/code/player_rank_controller/mentor_controller.dm index 304ee98d1e5036..bea8bd05d73c8c 100644 --- a/modular_skyrat/modules/player_ranks/code/player_rank_controller/mentor_controller.dm +++ b/modular_nova/modules/player_ranks/code/player_rank_controller/mentor_controller.dm @@ -7,7 +7,7 @@ /datum/player_rank_controller/mentor/New() . = ..() - legacy_file_path = "[global.config.directory]/skyrat/mentors.txt" + legacy_file_path = "[global.config.directory]/nova/mentors.txt" /datum/player_rank_controller/mentor/add_player(ckey) diff --git a/modular_skyrat/modules/player_ranks/code/player_rank_controller/veteran_controller.dm b/modular_nova/modules/player_ranks/code/player_rank_controller/veteran_controller.dm similarity index 92% rename from modular_skyrat/modules/player_ranks/code/player_rank_controller/veteran_controller.dm rename to modular_nova/modules/player_ranks/code/player_rank_controller/veteran_controller.dm index cc759c92832611..78ba28281343bc 100644 --- a/modular_skyrat/modules/player_ranks/code/player_rank_controller/veteran_controller.dm +++ b/modular_nova/modules/player_ranks/code/player_rank_controller/veteran_controller.dm @@ -9,7 +9,7 @@ GLOBAL_PROTECT(veteran_list) /datum/player_rank_controller/veteran/New() . = ..() - legacy_file_path = "[global.config.directory]/skyrat/veteran_players.txt" + legacy_file_path = "[global.config.directory]/nova/veteran_players.txt" /datum/player_rank_controller/veteran/add_player(ckey) diff --git a/modular_nova/modules/player_ranks/code/preferences.dm b/modular_nova/modules/player_ranks/code/preferences.dm new file mode 100644 index 00000000000000..5a3f43dc8b1f38 --- /dev/null +++ b/modular_nova/modules/player_ranks/code/preferences.dm @@ -0,0 +1,3 @@ +/datum/preferences + /// Does this member have donator status on the server + var/donator_status = FALSE diff --git a/modular_skyrat/modules/player_ranks/code/subsystem/player_ranks.dm b/modular_nova/modules/player_ranks/code/subsystem/player_ranks.dm similarity index 94% rename from modular_skyrat/modules/player_ranks/code/subsystem/player_ranks.dm rename to modular_nova/modules/player_ranks/code/subsystem/player_ranks.dm index 6e724e44dbccec..3a0f8b0b827c30 100644 --- a/modular_skyrat/modules/player_ranks/code/subsystem/player_ranks.dm +++ b/modular_nova/modules/player_ranks/code/subsystem/player_ranks.dm @@ -111,7 +111,7 @@ SUBSYSTEM_DEF(player_ranks) if(CONFIG_GET(flag/donator_legacy_system)) donator_controller.load_legacy() - update_all_prefs_unlock_contents() + update_all_prefs_donator_status() return if(!SSdbcore.Connect()) @@ -124,30 +124,31 @@ SUBSYSTEM_DEF(player_ranks) return load_player_rank_sql(donator_controller) - update_all_prefs_unlock_contents() + update_all_prefs_donator_status() /** * Handles updating all of the preferences datums to have the appropriate - * `unlock_content` and `max_save_slots` once donators are loaded. + * `donator_status` and `max_save_slots` once donators are loaded. */ -/datum/controller/subsystem/player_ranks/proc/update_all_prefs_unlock_contents() +/datum/controller/subsystem/player_ranks/proc/update_all_prefs_donator_status() for(var/ckey as anything in GLOB.preferences_datums) - update_prefs_unlock_content(GLOB.preferences_datums[ckey]) + update_prefs_donator_status(GLOB.preferences_datums[ckey]) /** - * Updates the `unlock_contents` and the `max_save_slots` + * Updates the `donator_status` and the `max_save_slots` * * Arguments: - * * prefs - The preferences datum to check the unlock_content eligibility. + * * prefs - The preferences datum to check the donator_status eligibility. */ -/datum/controller/subsystem/player_ranks/proc/update_prefs_unlock_content(datum/preferences/prefs) +/datum/controller/subsystem/player_ranks/proc/update_prefs_donator_status(datum/preferences/prefs) if(!prefs) return - prefs.unlock_content = !!prefs.parent.IsByondMember() || is_donator(prefs.parent) - if(prefs.unlock_content) + prefs.unlock_content = !!prefs.parent.IsByondMember() + prefs.donator_status = is_donator(prefs.parent) + if(prefs.unlock_content || prefs.donator_status) prefs.max_save_slots = 50 @@ -221,9 +222,11 @@ SUBSYSTEM_DEF(player_ranks) ) if(!query_load_player_rank.warn_execute()) + qdel(query_load_player_rank) return rank_controller.load_from_query(query_load_player_rank) + qdel(query_load_player_rank) /// Allows fetching the appropriate player_rank_controller based on its @@ -332,9 +335,11 @@ SUBSYSTEM_DEF(player_ranks) ) if(!query_add_player_rank.warn_execute()) + qdel(query_add_player_rank) return FALSE controller.add_player(ckey) + qdel(query_add_player_rank) return TRUE @@ -411,9 +416,11 @@ SUBSYSTEM_DEF(player_ranks) ) if(!query_remove_player_rank.warn_execute()) + qdel(query_remove_player_rank) return FALSE controller.remove_player(ckey) + qdel(query_remove_player_rank) return TRUE @@ -467,12 +474,15 @@ SUBSYSTEM_DEF(player_ranks) ) if(!query_get_existing_entries.warn_execute()) + qdel(query_get_existing_entries) return while(query_get_existing_entries.NextRow()) var/ckey = ckey(query_get_existing_entries.item[INDEX_CKEY]) ckeys_to_migrate -= ckey + qdel(query_get_existing_entries) + var/list/rows_to_insert = list() for(var/ckey in ckeys_to_migrate) diff --git a/modular_skyrat/modules/player_ranks/code/world_topic.dm b/modular_nova/modules/player_ranks/code/world_topic.dm similarity index 100% rename from modular_skyrat/modules/player_ranks/code/world_topic.dm rename to modular_nova/modules/player_ranks/code/world_topic.dm diff --git a/modular_skyrat/modules/pod_locking/pod_locking.dm b/modular_nova/modules/pod_locking/pod_locking.dm similarity index 100% rename from modular_skyrat/modules/pod_locking/pod_locking.dm rename to modular_nova/modules/pod_locking/pod_locking.dm diff --git a/modular_skyrat/modules/polarized_windows/capacitor.dm b/modular_nova/modules/polarized_windows/capacitor.dm similarity index 100% rename from modular_skyrat/modules/polarized_windows/capacitor.dm rename to modular_nova/modules/polarized_windows/capacitor.dm diff --git a/modular_skyrat/modules/polarized_windows/polarization_controller.dm b/modular_nova/modules/polarized_windows/polarization_controller.dm similarity index 98% rename from modular_skyrat/modules/polarized_windows/polarization_controller.dm rename to modular_nova/modules/polarized_windows/polarization_controller.dm index bf8944f3cdc990..68263adaf42e73 100644 --- a/modular_skyrat/modules/polarized_windows/polarization_controller.dm +++ b/modular_nova/modules/polarized_windows/polarization_controller.dm @@ -38,7 +38,7 @@ GLOBAL_LIST_EMPTY(polarization_controllers) RegisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), PROC_REF(on_window_multitool_act)) -/datum/component/polarization_controller/Destroy(force, silent) +/datum/component/polarization_controller/Destroy(force) if(id) LAZYREMOVEASSOC(GLOB.polarization_controllers, id, list(src)) @@ -126,7 +126,7 @@ GLOBAL_LIST_EMPTY(polarization_controllers) remove_polarization_controller(source, user, tool) - return TOOL_ACT_SIGNAL_BLOCKING + return ITEM_INTERACT_BLOCKING /** diff --git a/modular_skyrat/modules/polarized_windows/polarizer.dm b/modular_nova/modules/polarized_windows/polarizer.dm similarity index 94% rename from modular_skyrat/modules/polarized_windows/polarizer.dm rename to modular_nova/modules/polarized_windows/polarizer.dm index 351815dd1029f3..fbfd4ba119e112 100644 --- a/modular_skyrat/modules/polarized_windows/polarizer.dm +++ b/modular_nova/modules/polarized_windows/polarizer.dm @@ -51,7 +51,10 @@ name = "Window Polarization Remote Controller" id = "polarizer" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE | COLONY_FABRICATOR - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT, /datum/material/glass = SMALL_MATERIAL_AMOUNT) + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT, + /datum/material/glass = SMALL_MATERIAL_AMOUNT, + ) build_path = /obj/item/assembly/control/polarizer category = list( RND_CATEGORY_INITIAL, diff --git a/modular_skyrat/modules/polarized_windows/windows.dm b/modular_nova/modules/polarized_windows/windows.dm similarity index 100% rename from modular_skyrat/modules/polarized_windows/windows.dm rename to modular_nova/modules/polarized_windows/windows.dm diff --git a/modular_skyrat/modules/pollution/code/admin_spawn_pollution.dm b/modular_nova/modules/pollution/code/admin_spawn_pollution.dm similarity index 100% rename from modular_skyrat/modules/pollution/code/admin_spawn_pollution.dm rename to modular_nova/modules/pollution/code/admin_spawn_pollution.dm diff --git a/modular_skyrat/modules/pollution/code/air_refresher.dm b/modular_nova/modules/pollution/code/air_refresher.dm similarity index 93% rename from modular_skyrat/modules/pollution/code/air_refresher.dm rename to modular_nova/modules/pollution/code/air_refresher.dm index e9478db2ec95c8..aae7f5f1d61094 100644 --- a/modular_skyrat/modules/pollution/code/air_refresher.dm +++ b/modular_nova/modules/pollution/code/air_refresher.dm @@ -1,7 +1,7 @@ /obj/item/air_refresher name = "air refresher" desc = "A bottle packed with sickly strong fragrance, with an easy to use pressurized release nozzle." - icon = 'modular_skyrat/modules/pollution/icons/air_refresher.dmi' + icon = 'modular_nova/modules/pollution/icons/air_refresher.dmi' icon_state = "air_refresher" inhand_icon_state = "cleaner" worn_icon_state = "spraybottle" @@ -36,7 +36,7 @@ /obj/machinery/pollution_scrubber name = "Pollution Scrubber" desc = "A scrubber that will process the air and filter out any contaminants." - icon = 'modular_skyrat/modules/pollution/icons/pollution_scrubber.dmi' + icon = 'modular_nova/modules/pollution/icons/pollution_scrubber.dmi' icon_state = "scrubber" var/scrub_amount = 2 var/on = FALSE diff --git a/modular_skyrat/modules/pollution/code/bonfire.dm b/modular_nova/modules/pollution/code/bonfire.dm similarity index 100% rename from modular_skyrat/modules/pollution/code/bonfire.dm rename to modular_nova/modules/pollution/code/bonfire.dm diff --git a/modular_skyrat/modules/pollution/code/fancy_storage_items.dm b/modular_nova/modules/pollution/code/fancy_storage_items.dm similarity index 100% rename from modular_skyrat/modules/pollution/code/fancy_storage_items.dm rename to modular_nova/modules/pollution/code/fancy_storage_items.dm diff --git a/modular_skyrat/modules/pollution/code/perfumes.dm b/modular_nova/modules/pollution/code/perfumes.dm similarity index 98% rename from modular_skyrat/modules/pollution/code/perfumes.dm rename to modular_nova/modules/pollution/code/perfumes.dm index 2f07404ae767f6..e49255a9dfb942 100644 --- a/modular_skyrat/modules/pollution/code/perfumes.dm +++ b/modular_nova/modules/pollution/code/perfumes.dm @@ -1,6 +1,6 @@ /obj/item/perfume desc = "A bottle of pleasantly smelling fragrance." - icon = 'modular_skyrat/modules/pollution/icons/perfume.dmi' + icon = 'modular_nova/modules/pollution/icons/perfume.dmi' icon_state = "perfume" inhand_icon_state = "cleaner" worn_icon_state = "spraybottle" diff --git a/modular_skyrat/modules/pollution/code/pollutant_datum.dm b/modular_nova/modules/pollution/code/pollutant_datum.dm similarity index 100% rename from modular_skyrat/modules/pollution/code/pollutant_datum.dm rename to modular_nova/modules/pollution/code/pollutant_datum.dm diff --git a/modular_skyrat/modules/pollution/code/pollutants_generic.dm b/modular_nova/modules/pollution/code/pollutants_generic.dm similarity index 100% rename from modular_skyrat/modules/pollution/code/pollutants_generic.dm rename to modular_nova/modules/pollution/code/pollutants_generic.dm diff --git a/modular_skyrat/modules/pollution/code/pollution.dm b/modular_nova/modules/pollution/code/pollution.dm similarity index 100% rename from modular_skyrat/modules/pollution/code/pollution.dm rename to modular_nova/modules/pollution/code/pollution.dm diff --git a/modular_skyrat/modules/pollution/code/pollution_effect.dm b/modular_nova/modules/pollution/code/pollution_effect.dm similarity index 100% rename from modular_skyrat/modules/pollution/code/pollution_effect.dm rename to modular_nova/modules/pollution/code/pollution_effect.dm diff --git a/modular_skyrat/modules/pollution/code/pollution_emitters.dm b/modular_nova/modules/pollution/code/pollution_emitters.dm similarity index 100% rename from modular_skyrat/modules/pollution/code/pollution_emitters.dm rename to modular_nova/modules/pollution/code/pollution_emitters.dm diff --git a/modular_skyrat/modules/pollution/code/pollution_initializations.dm b/modular_nova/modules/pollution/code/pollution_initializations.dm similarity index 100% rename from modular_skyrat/modules/pollution/code/pollution_initializations.dm rename to modular_nova/modules/pollution/code/pollution_initializations.dm diff --git a/modular_skyrat/modules/pollution/code/pollution_subsystem.dm b/modular_nova/modules/pollution/code/pollution_subsystem.dm similarity index 100% rename from modular_skyrat/modules/pollution/code/pollution_subsystem.dm rename to modular_nova/modules/pollution/code/pollution_subsystem.dm diff --git a/modular_skyrat/modules/pollution/code/scented_candles.dm b/modular_nova/modules/pollution/code/scented_candles.dm similarity index 100% rename from modular_skyrat/modules/pollution/code/scented_candles.dm rename to modular_nova/modules/pollution/code/scented_candles.dm diff --git a/modular_skyrat/modules/pollution/code/temporary_pollution_emission_component.dm b/modular_nova/modules/pollution/code/temporary_pollution_emission_component.dm similarity index 100% rename from modular_skyrat/modules/pollution/code/temporary_pollution_emission_component.dm rename to modular_nova/modules/pollution/code/temporary_pollution_emission_component.dm diff --git a/modular_skyrat/modules/pollution/code/turf_open.dm b/modular_nova/modules/pollution/code/turf_open.dm similarity index 100% rename from modular_skyrat/modules/pollution/code/turf_open.dm rename to modular_nova/modules/pollution/code/turf_open.dm diff --git a/modular_skyrat/modules/pollution/icons/air_refresher.dmi b/modular_nova/modules/pollution/icons/air_refresher.dmi similarity index 100% rename from modular_skyrat/modules/pollution/icons/air_refresher.dmi rename to modular_nova/modules/pollution/icons/air_refresher.dmi diff --git a/modular_skyrat/modules/pollution/icons/perfume.dmi b/modular_nova/modules/pollution/icons/perfume.dmi similarity index 100% rename from modular_skyrat/modules/pollution/icons/perfume.dmi rename to modular_nova/modules/pollution/icons/perfume.dmi diff --git a/modular_skyrat/modules/pollution/icons/pollution_scrubber.dmi b/modular_nova/modules/pollution/icons/pollution_scrubber.dmi similarity index 100% rename from modular_skyrat/modules/pollution/icons/pollution_scrubber.dmi rename to modular_nova/modules/pollution/icons/pollution_scrubber.dmi diff --git a/modular_nova/modules/poly_commands/parrot.dm b/modular_nova/modules/poly_commands/parrot.dm new file mode 100644 index 00000000000000..3fe164cc6eff33 --- /dev/null +++ b/modular_nova/modules/poly_commands/parrot.dm @@ -0,0 +1,64 @@ +/* +* Parrot commands: Made modular +*/ + +/mob/living/basic/parrot + /// Whether the parrot is on a human's shoulder or not + var/buckled_to_human + +/* +* Parrot commands: new code +*/ + +/mob/living/basic/parrot/proc/check_command(message, speaker) + return FALSE // Simply return false for non-Poly parrots + +/mob/living/basic/parrot/poly/check_command(message, speaker) + var/mob/living/carbon/human/human_target = speaker + if(!istype(human_target)) + return FALSE + if(!(human_target.mind?.assigned_role.title == JOB_CHIEF_ENGINEER)) + return FALSE + if(!(findtext(message, "poly"))) + return FALSE + if(findtext(message, "perch") || findtext(message, "up")) + command_perch(speaker) + return TRUE + else if(findtext(message, "off") || findtext(message, "down")) + command_hop_off(speaker) + return TRUE + else + return FALSE + +/mob/living/basic/parrot/toggle_perched(perched) + . = ..() + if(!perched) + buckled_to_human = FALSE + +/mob/living/basic/parrot/poly/proc/command_perch(mob/living/carbon/human/human_target) + if(!buckled) + buckled_to_human = FALSE + if(LAZYLEN(human_target.buckled_mobs) >= human_target.max_buckled_mobs) + return + if(buckled_to_human) + manual_emote("gives [human_target] a confused look, squawking softly.") + return + if(get_dist(src, human_target) > 1 || buckled) // Only adjacent + manual_emote("tilts their head at [human_target], before bawking loudly and staying put.") + return + manual_emote("obediently hops up onto [human_target]'s shoulder, spreading their wings for a moment before settling down.") + if(start_perching(human_target)) + buckled_to_human = TRUE + +/mob/living/basic/parrot/poly/proc/command_hop_off(mob/living/carbon/human/human_target) + if(!buckled) + buckled_to_human = FALSE + if(!buckled_to_human || !buckled) + manual_emote("gives [human_target] a confused look, squawking softly.") + return + + if(buckled) + to_chat(src, span_notice("You are no longer sitting on [human_target].")) + buckled.unbuckle_mob(src, TRUE) + manual_emote("squawks and hops off of [human_target], flying away.") + diff --git a/modular_skyrat/modules/positronic_alert_console/code/positronic_alert_console.dm b/modular_nova/modules/positronic_alert_console/code/positronic_alert_console.dm similarity index 97% rename from modular_skyrat/modules/positronic_alert_console/code/positronic_alert_console.dm rename to modular_nova/modules/positronic_alert_console/code/positronic_alert_console.dm index 5616e090ed949e..c1ef4e7e9b4539 100644 --- a/modular_skyrat/modules/positronic_alert_console/code/positronic_alert_console.dm +++ b/modular_nova/modules/positronic_alert_console/code/positronic_alert_console.dm @@ -1,7 +1,7 @@ /obj/machinery/posialert name = "automated positronic alert console" desc = "A console that will ping when a positronic personality is available for download." - icon = 'modular_skyrat/modules/positronic_alert_console/icons/terminals.dmi' + icon = 'modular_nova/modules/positronic_alert_console/icons/terminals.dmi' icon_state = "posialert" // to create a cooldown so if roboticists are tired of ghosts COOLDOWN_DECLARE(robotics_cooldown) diff --git a/modular_skyrat/modules/positronic_alert_console/icons/terminals.dmi b/modular_nova/modules/positronic_alert_console/icons/terminals.dmi similarity index 100% rename from modular_skyrat/modules/positronic_alert_console/icons/terminals.dmi rename to modular_nova/modules/positronic_alert_console/icons/terminals.dmi diff --git a/modular_skyrat/modules/positronic_alert_console/readme.md b/modular_nova/modules/positronic_alert_console/readme.md similarity index 100% rename from modular_skyrat/modules/positronic_alert_console/readme.md rename to modular_nova/modules/positronic_alert_console/readme.md diff --git a/modular_nova/modules/primitive_catgirls/code/clothing.dm b/modular_nova/modules/primitive_catgirls/code/clothing.dm new file mode 100644 index 00000000000000..04f2566940393c --- /dev/null +++ b/modular_nova/modules/primitive_catgirls/code/clothing.dm @@ -0,0 +1,138 @@ +// The naming of every path in this file is going to be awful :smiling_imp: + +// Outfit Datum + +/datum/outfit/primitive_catgirl + name = "Icemoon Dweller" + + uniform = /obj/item/clothing/under/dress/skirt/primitive_catgirl_body_wraps + shoes = /obj/item/clothing/shoes/winterboots/ice_boots/primitive_catgirl_boots + gloves = /obj/item/clothing/gloves/fingerless/primitive_catgirl_armwraps + suit = /obj/item/clothing/suit/jacket/primitive_catgirl_coat + neck = /obj/item/clothing/neck/scarf/primitive_catgirl_scarf + + back = /obj/item/forging/reagent_weapon/axe/fake_copper + +// Under + +/obj/item/clothing/under/dress/skirt/primitive_catgirl_body_wraps + name = "body wraps" + desc = "Some pretty simple wraps to cover up your lower bits." + icon_state = "wraps" + icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + worn_icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + body_parts_covered = GROIN + greyscale_config = /datum/greyscale_config/primitive_catgirl_wraps + greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_wraps/worn + greyscale_colors = "#cec8bf#364660" + flags_1 = IS_PLAYER_COLORABLE_1 + has_sensor = FALSE + +// Hands + +/obj/item/clothing/gloves/fingerless/primitive_catgirl_armwraps + name = "arm wraps" + desc = "Simple cloth to wrap around one's arms." + icon_state = "armwraps" + icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + worn_icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + greyscale_config = /datum/greyscale_config/primitive_catgirl_armwraps + greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_armwraps/worn + greyscale_colors = "#cec8bf" + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/gloves/fingerless/primitive_catgirl_gauntlets + name = "gauntlets" + desc = "Simple cloth arm wraps with overlying metal protection." + icon_state = "gauntlets" + icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + worn_icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + greyscale_config = /datum/greyscale_config/primitive_catgirl_gauntlets + greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_gauntlets/worn + greyscale_config_inhand_left = null + greyscale_config_inhand_right = null + greyscale_colors = "#cec8bf#c55a1d" + flags_1 = IS_PLAYER_COLORABLE_1 + +// Suit + +/obj/item/clothing/suit/jacket/primitive_catgirl_coat + name = "primitive fur coat" + desc = "A large piece of animal hide stuffed with fur, likely from the same animal." + icon_state = "coat" + icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + worn_icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + body_parts_covered = CHEST + cold_protection = CHEST + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + greyscale_config = /datum/greyscale_config/primitive_catgirl_coat + greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_coat/worn + greyscale_colors = "#594032#cec8bf" + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/suit/apron/chef/colorable_apron/primitive_catgirl_leather + greyscale_colors = "#594032" + +// Shoes + +/obj/item/clothing/shoes/winterboots/ice_boots/primitive_catgirl_boots + name = "primitive hiking boots" + desc = "A pair of heavy boots lined with fur and with soles special built to prevent slipping on ice." + icon_state = "boots" + icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + worn_icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + greyscale_config = /datum/greyscale_config/primitive_catgirl_boots + greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_boots/worn + greyscale_colors = "#594032#cec8bf" + flags_1 = IS_PLAYER_COLORABLE_1 + +// Neck + +/obj/item/clothing/neck/scarf/primitive_catgirl_scarf + greyscale_colors = "#cec8bf#cec8bf" + +/obj/item/clothing/neck/large_scarf/primitive_catgirl_off_white + greyscale_colors = "#cec8bf#cec8bf" + +/obj/item/clothing/neck/infinity_scarf/primitive_catgirl_blue + greyscale_colors = "#364660" + +/obj/item/clothing/neck/mantle/recolorable/primitive_catgirl_off_white + greyscale_colors = "#cec8bf" + +/obj/item/clothing/neck/ranger_poncho/primitive_catgirl_leather + greyscale_colors = "#594032#594032" + +// Masks + +/obj/item/clothing/mask/primitive_catgirl_greyscale_gaiter + name = "neck gaiter" + desc = "A cloth for covering your neck, and usually part of your face too, but that part's optional." + icon_state = "gaiter" + inhand_icon_state = "balaclava" + icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + worn_icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + greyscale_config = /datum/greyscale_config/primitive_catgirl_gaiter + greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_gaiter/worn + greyscale_colors = "#364660" + w_class = WEIGHT_CLASS_TINY + flags_inv = HIDEFACE|HIDESNOUT + flags_cover = MASKCOVERSMOUTH + visor_flags_inv = HIDEFACE|HIDESNOUT + visor_flags_cover = MASKCOVERSMOUTH + flags_1 = IS_PLAYER_COLORABLE_1 + actions_types = list(/datum/action/item_action/adjust) + +/obj/item/clothing/mask/primitive_catgirl_greyscale_gaiter/attack_self(mob/user) + adjustmask(user) + +// Head + +/obj/item/clothing/head/standalone_hood/primitive_catgirl_colors + greyscale_colors = "#594032#364660" + +// Misc Items + +/obj/item/forging/reagent_weapon/axe/fake_copper + custom_materials = list(/datum/material/copporcitite = SHEET_MATERIAL_AMOUNT) diff --git a/modular_skyrat/modules/primitive_catgirls/code/clothing_vendor.dm b/modular_nova/modules/primitive_catgirls/code/clothing_vendor.dm similarity index 95% rename from modular_skyrat/modules/primitive_catgirls/code/clothing_vendor.dm rename to modular_nova/modules/primitive_catgirls/code/clothing_vendor.dm index 17a9f81d3cec39..2f786daf0ac5da 100644 --- a/modular_skyrat/modules/primitive_catgirls/code/clothing_vendor.dm +++ b/modular_nova/modules/primitive_catgirls/code/clothing_vendor.dm @@ -19,12 +19,14 @@ /obj/item/clothing/suit/apron/chef/colorable_apron/primitive_catgirl_leather = 10, /obj/item/clothing/head/standalone_hood/primitive_catgirl_colors = 10, /obj/item/clothing/neck/scarf/primitive_catgirl_scarf = 5, + /obj/item/clothing/neck/face_scarf = 5, /obj/item/clothing/neck/large_scarf/primitive_catgirl_off_white = 5, /obj/item/clothing/neck/infinity_scarf/primitive_catgirl_blue = 5, /obj/item/clothing/neck/mantle/recolorable/primitive_catgirl_off_white = 5, /obj/item/clothing/neck/ranger_poncho/primitive_catgirl_leather = 5, /obj/item/clothing/glasses/eyepatch/wrap = 5, /obj/item/clothing/head/pelt/snow_tiger = 5, + /obj/item/clothing/head/pelt = 5, /obj/item/clothing/head/pelt/black = 5, /obj/item/clothing/head/pelt/white = 5, /obj/item/clothing/head/pelt/wolf = 5, diff --git a/modular_skyrat/modules/primitive_catgirls/code/language.dm b/modular_nova/modules/primitive_catgirls/code/language.dm similarity index 93% rename from modular_skyrat/modules/primitive_catgirls/code/language.dm rename to modular_nova/modules/primitive_catgirls/code/language.dm index 05db5412af2668..fc04dda4346891 100644 --- a/modular_skyrat/modules/primitive_catgirls/code/language.dm +++ b/modular_nova/modules/primitive_catgirls/code/language.dm @@ -13,6 +13,6 @@ "bar", "dar", "akur", "jer", "bær", "múl", "fjörð", "jah", "dah", "dim", "din", "dir", "dur", "nya", "miau", "mjau", "ný", "kt", "hø", ) icon_state = "omgkittyhiii" - icon = 'modular_skyrat/modules/primitive_catgirls/icons/language_icon.dmi' + icon = 'modular_nova/modules/primitive_catgirls/icons/language_icon.dmi' default_priority = 94 secret = TRUE diff --git a/modular_skyrat/modules/primitive_catgirls/code/map_items.dm b/modular_nova/modules/primitive_catgirls/code/map_items.dm similarity index 100% rename from modular_skyrat/modules/primitive_catgirls/code/map_items.dm rename to modular_nova/modules/primitive_catgirls/code/map_items.dm diff --git a/modular_skyrat/modules/primitive_catgirls/code/organs.dm b/modular_nova/modules/primitive_catgirls/code/organs.dm similarity index 100% rename from modular_skyrat/modules/primitive_catgirls/code/organs.dm rename to modular_nova/modules/primitive_catgirls/code/organs.dm diff --git a/modular_skyrat/modules/primitive_catgirls/code/smelling_salts.dm b/modular_nova/modules/primitive_catgirls/code/smelling_salts.dm similarity index 91% rename from modular_skyrat/modules/primitive_catgirls/code/smelling_salts.dm rename to modular_nova/modules/primitive_catgirls/code/smelling_salts.dm index e67b75d141b679..c15ca1fb6003ea 100644 --- a/modular_skyrat/modules/primitive_catgirls/code/smelling_salts.dm +++ b/modular_nova/modules/primitive_catgirls/code/smelling_salts.dm @@ -2,7 +2,7 @@ name = "smelling salts" desc = "A small pile of a salt-like substance that smells absolutely repulsive. Rumor has it that the smell is so pungent that even the dead will come back to life to escape it." icon_state = "smelling_salts" - icon = 'modular_skyrat/modules/primitive_catgirls/icons/salts.dmi' + icon = 'modular_nova/modules/primitive_catgirls/icons/salts.dmi' w_class = WEIGHT_CLASS_TINY resistance_flags = FLAMMABLE item_flags = NOBLUDGEON @@ -25,7 +25,7 @@ /// If the right conditions are present (basically could this person be defibrilated), revives the target /obj/item/smelling_salts/proc/try_revive(mob/living/carbon/carbon_target, mob/user) - carbon_target.notify_ghost_cloning("You are being brought back to life!") + carbon_target.notify_revival("You are being brought back to life!") carbon_target.grab_ghost() user.balloon_alert_to_viewers("trying to revive [carbon_target]") @@ -59,7 +59,7 @@ return carbon_target.adjustOxyLoss(amount = 60, updating_health = TRUE) - playsound(src, 'modular_skyrat/modules/emotes/sound/emotes/female/female_sniff.ogg', 50, FALSE) + playsound(src, 'modular_nova/modules/emotes/sound/emotes/female/female_sniff.ogg', 50, FALSE) if(defib_result == DEFIB_POSSIBLE) carbon_target.grab_ghost() diff --git a/modular_skyrat/modules/primitive_catgirls/code/spawner.dm b/modular_nova/modules/primitive_catgirls/code/spawner.dm similarity index 98% rename from modular_skyrat/modules/primitive_catgirls/code/spawner.dm rename to modular_nova/modules/primitive_catgirls/code/spawner.dm index 5cbe1d682c0a3a..3bed64d3935642 100644 --- a/modular_skyrat/modules/primitive_catgirls/code/spawner.dm +++ b/modular_nova/modules/primitive_catgirls/code/spawner.dm @@ -19,6 +19,7 @@ var/datum/team/primitive_catgirls/team restricted_species = list(/datum/species/human/felinid/primitive) + quirks_enabled = TRUE random_appearance = FALSE loadout_enabled = FALSE uses = 9 @@ -100,6 +101,7 @@ /datum/crafting_recipe/boneaxe, /datum/crafting_recipe/bonespear, /datum/crafting_recipe/bonedagger, + /datum/crafting_recipe/anointing_oil, ) /datum/antagonist/primitive_catgirl/Destroy() diff --git a/modular_nova/modules/primitive_catgirls/code/species.dm b/modular_nova/modules/primitive_catgirls/code/species.dm new file mode 100644 index 00000000000000..5a4f04db66d7cc --- /dev/null +++ b/modular_nova/modules/primitive_catgirls/code/species.dm @@ -0,0 +1,125 @@ +/mob/living/carbon/human/species/felinid/primitive + race = /datum/species/human/felinid/primitive + +/datum/language_holder/primitive_felinid + understood_languages = list( + /datum/language/primitive_catgirl = list(LANGUAGE_ATOM), + /datum/language/siiktajr = list(LANGUAGE_ATOM), + ) + spoken_languages = list( + /datum/language/primitive_catgirl = list(LANGUAGE_ATOM), + /datum/language/siiktajr = list(LANGUAGE_ATOM), + ) + selected_language = /datum/language/primitive_catgirl + +/datum/species/human/felinid/primitive + name = "Primitive Demihuman" + id = SPECIES_FELINE_PRIMITIVE + + mutantlungs = /obj/item/organ/internal/lungs/icebox_adapted + mutanteyes = /obj/item/organ/internal/eyes/low_light_adapted + mutanttongue = /obj/item/organ/internal/tongue/cat/primitive + + species_language_holder = /datum/language_holder/primitive_felinid + language_prefs_whitelist = list(/datum/language/primitive_catgirl) + + bodytemp_normal = 270 // If a normal human gets hugged by one its gonna feel cold + bodytemp_heat_damage_limit = 283 // To them normal station atmos would be sweltering + bodytemp_cold_damage_limit = 213 // Man up bro its not even that cold out here + + inherent_traits = list( + TRAIT_VIRUSIMMUNE, + TRAIT_RESISTCOLD, + TRAIT_USES_SKINTONES, + ) + + always_customizable = TRUE + +/datum/species/human/felinid/primitive/on_species_gain(mob/living/carbon/new_primitive, datum/species/old_species, pref_load) + . = ..() + var/mob/living/carbon/human/hearthkin = new_primitive + if(!istype(hearthkin)) + return + hearthkin.dna.add_mutation(/datum/mutation/human/olfaction, MUT_NORMAL) + hearthkin.dna.activate_mutation(/datum/mutation/human/olfaction) + + // >mfw I take mutadone and my nose clogs + var/datum/mutation/human/olfaction/mutation = locate() in hearthkin.dna.mutations + mutation.mutadone_proof = TRUE + mutation.instability = 0 + +/datum/species/human/felinid/primitive/on_species_loss(mob/living/carbon/former_primitive, datum/species/new_species, pref_load) + . = ..() + var/mob/living/carbon/human/hearthkin = former_primitive + if(!istype(hearthkin)) + return + hearthkin.dna.remove_mutation(/datum/mutation/human/olfaction) + +/datum/species/human/felinid/primitive/prepare_human_for_preview(mob/living/carbon/human/human_for_preview) + human_for_preview.hairstyle = "Blunt Bangs Alt" + human_for_preview.hair_color = "#323442" + human_for_preview.skin_tone = "mediterranean" + + human_for_preview.update_body_parts() + + human_for_preview.dna.species.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Cat", MUTANT_INDEX_COLOR_LIST = list(human_for_preview.hair_color)) + human_for_preview.dna.species.mutant_bodyparts["ears"] = list(MUTANT_INDEX_NAME = "Cat", MUTANT_INDEX_COLOR_LIST = list(human_for_preview.hair_color)) + + human_for_preview.update_mutant_bodyparts(TRUE) + human_for_preview.update_body(TRUE) + +/datum/species/human/felinid/primitive/get_species_description() + return list( + "Genetically modified humanoids believed to be descendants of a now centuries old colony \ + ship from the pre-bluespace travel era. Still having at least some human traits, they \ + are most comparable to today's felinids with most sporting features likely spliced from \ + the icemoon's many fauna." + ) + +/datum/species/human/felinid/primitive/get_species_lore() + return list( + "The Hearthkin are a culture of disparate Scandinavian groups all sharing a common origin \ + as descendents from demihuman genemodders aboard the good ship Stjarndrakkr, or Star Dragon; \ + an enormous colony ship almost 40km tall. This ship first reached the orbit of its last \ + resting place three hundred years ago, before the advent of bluespace travel; coming from \ + a world known to the Hearthkin as 'Asgard.' When it reached the atmosphere of the ice moon, \ + or 'Niflheim' as they consider it, the vessel detonated in low orbit for unknown reasons. \ + Large sections of the Star Dragon broke up and sealed themselves, \ + coming to a rest all over the moon itself.", + + "At first, life was incredibly difficult for the would-be colonists. Generations were very short, \ + and most of the personnel able to even fix the vessel had died either on impact, or later on. \ + While their genetic modifications and pre-existing comfort in frozen climates somewhat helped them, \ + the Ancestors were said to have made one last desperate move to put all their resources together to \ + fully modify and adapt themselves to the climes of Niflheim; forever.", + + "Nowadays, the Hearthkin are removed from the original culture of the Ancestors, building one all of their own. \ + Many of the original, largest segments of the Star Dragon are buried under ice and snow, and the Hearthkin have \ + created a culture of building separate dwellings to keep them secret. Dwelling in longhouses and sleeping in the \ + warm undergrounds of Niflheim, and hunting native creatures and those coming from portals to the moon's planet; \ + Muspelheim. Their pagan faith has strengthened over the centuries, from occasional prayers for a blizzard to end \ + soon, to now full-on worship and sacrifices to their various Gods. Hearthkin still hold immense reverence for their \ + Ancestors, but tend to have varying opinions and speculation on what exactly they were like, and why they came to \ + Niflheim in the first place.", + + "Their names are two-part; a birth name, and a title. Their birth names still hold resemblance to 'Asgardian' culture, \ + typically a Nordic name such as 'Solveig Helgasdottir,' or 'Bjorn Lukasson.' However, their last name is then exchanged \ + for a 'Title' when the Hearthkin is no longer 'Unproven.' These are a two-parter, based on either great deeds, \ + embarrassing moments, or aspects of the person's personality. Some examples would be 'Soul-Drowner' after the night of \ + a Hearthkin drinking herself half-dead, or one might be known as 'Glacier-Shaped' for being abnormally large. \ + These titles are always given by ones' kin.", + + "The Hearth itself is an area that the kindred hold incredibly sacred, primarily hating Outsiders for more \ + practical reasons. They think themselves as having been there first, many of them knowing they were 'promised' \ + Niflheim by the Ancestors. Unlike the Ashwalkers of Muspelheim, the Hearthkin are a more technologically \ + advanced society; having use for not only metal, but gold and silver for accessory. They are known to employ \ + artifacts thought to be of either the planet their moon orbits, or leftovers from their Ancestors; however, for \ + a variety of reasons from Kin to Kin, they tend to shy away from using modern human technology.", + + "Physically, the Hearthkin always come in the form of demihumans; appearing similar to normal Earthlings, \ + but with the tails, ears, and sometimes limbs of various arctic animals; wolves, bears, and felines to only name a few. \ + They seem perfectly adapted to their lands of ice and mist, but find even the mild controlled temperatures of \ + Symphionia stations to be swelteringly hot. Their view of 'station' genemodders is that of 'halflings': \ + Ancestral bodies, but with the blood and spirit of the humans of Midgard, \ + tending to look down on them even more than other aliens.", + ) diff --git a/modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi b/modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi similarity index 100% rename from modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi rename to modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi diff --git a/modular_skyrat/modules/primitive_catgirls/icons/language_icon.dmi b/modular_nova/modules/primitive_catgirls/icons/language_icon.dmi similarity index 100% rename from modular_skyrat/modules/primitive_catgirls/icons/language_icon.dmi rename to modular_nova/modules/primitive_catgirls/icons/language_icon.dmi diff --git a/modular_skyrat/modules/primitive_catgirls/icons/salts.dmi b/modular_nova/modules/primitive_catgirls/icons/salts.dmi similarity index 100% rename from modular_skyrat/modules/primitive_catgirls/icons/salts.dmi rename to modular_nova/modules/primitive_catgirls/icons/salts.dmi diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/big_mortar.dm b/modular_nova/modules/primitive_cooking_additions/code/big_mortar.dm similarity index 85% rename from modular_skyrat/modules/primitive_cooking_additions/code/big_mortar.dm rename to modular_nova/modules/primitive_cooking_additions/code/big_mortar.dm index 5e8215d41cc31e..e66fcc48acbb2e 100644 --- a/modular_skyrat/modules/primitive_cooking_additions/code/big_mortar.dm +++ b/modular_nova/modules/primitive_cooking_additions/code/big_mortar.dm @@ -4,14 +4,16 @@ /obj/structure/large_mortar name = "large mortar" desc = "A large bowl perfect for grinding or juicing a large number of things at once." - icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/cooking_structures.dmi' + icon = 'modular_nova/modules/primitive_cooking_additions/icons/cooking_structures.dmi' icon_state = "big_mortar" density = TRUE anchored = TRUE max_integrity = 100 pass_flags = PASSTABLE resistance_flags = FLAMMABLE - custom_materials = list(/datum/material/wood = SHEET_MATERIAL_AMOUNT * 10) + custom_materials = list( + /datum/material/wood = SHEET_MATERIAL_AMOUNT * 10, + ) /// The maximum number of items this structure can store var/maximum_contained_items = 10 @@ -139,14 +141,29 @@ ///Juices the passed target item, and transfers any contained chems to the mortar as well /obj/structure/large_mortar/proc/juice_target_item(obj/item/to_be_juiced, mob/living/carbon/human/user) - to_be_juiced.juice(src.reagents, user) + if(to_be_juiced.flags_1 & HOLOGRAM_1) + to_chat(user, span_notice("You try to juice [to_be_juiced], but it fades away!")) + qdel(to_be_juiced) + return + + if(!to_be_juiced.juice(src.reagents, user)) + to_chat(user, span_danger("You fail to juice [to_be_juiced].")) to_chat(user, span_notice("You juice [to_be_juiced] into a liquid.")) QDEL_NULL(to_be_juiced) ///Grinds the passed target item, and transfers any contained chems to the mortar as well /obj/structure/large_mortar/proc/grind_target_item(obj/item/to_be_ground, mob/living/carbon/human/user) - to_be_ground.grind(src.reagents, user) + if(to_be_ground.flags_1 & HOLOGRAM_1) + to_chat(user, span_notice("You try to grind [to_be_ground], but it fades away!")) + qdel(to_be_ground) + return + + if(!to_be_ground.grind(src.reagents, user)) + if(isstack(to_be_ground)) + to_chat(usr, span_notice("[src] attempts to grind as many pieces of [to_be_ground] as possible.")) + else + to_chat(user, span_danger("You fail to grind [to_be_ground].")) to_chat(user, span_notice("You break [to_be_ground] into a fine powder.")) QDEL_NULL(to_be_ground) diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/cookware.dm b/modular_nova/modules/primitive_cooking_additions/code/cookware.dm similarity index 92% rename from modular_skyrat/modules/primitive_cooking_additions/code/cookware.dm rename to modular_nova/modules/primitive_cooking_additions/code/cookware.dm index 6b90c469c1a2b5..9e2defd9ca1a61 100644 --- a/modular_skyrat/modules/primitive_cooking_additions/code/cookware.dm +++ b/modular_nova/modules/primitive_cooking_additions/code/cookware.dm @@ -1,5 +1,5 @@ /obj/item/reagent_containers/cup/soup_pot/material - icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/cookware.dmi' + icon = 'modular_nova/modules/primitive_cooking_additions/icons/cookware.dmi' custom_materials = null // We're going to apply custom materials when this baby is actually made material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS @@ -26,7 +26,7 @@ // Oven Trays /obj/item/plate/oven_tray/material desc = "Time to bake hardtack!" - icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/cookware.dmi' + icon = 'modular_nova/modules/primitive_cooking_additions/icons/cookware.dmi' custom_materials = null // We're going to apply custom materials when this baby is actually made material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS fragile = FALSE diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/cutting_board.dm b/modular_nova/modules/primitive_cooking_additions/code/cutting_board.dm similarity index 98% rename from modular_skyrat/modules/primitive_cooking_additions/code/cutting_board.dm rename to modular_nova/modules/primitive_cooking_additions/code/cutting_board.dm index a71e4c7d35a70f..23186b8ff51bf7 100644 --- a/modular_skyrat/modules/primitive_cooking_additions/code/cutting_board.dm +++ b/modular_nova/modules/primitive_cooking_additions/code/cutting_board.dm @@ -3,7 +3,7 @@ /obj/item/cutting_board name = "cutting board" desc = "Processing food before electricity was cool, because you can just do your regular cutting on the table next to this right?" - icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/cooking_structures.dmi' + icon = 'modular_nova/modules/primitive_cooking_additions/icons/cooking_structures.dmi' icon_state = "cutting_board" force = 5 throwforce = 7 //Imagine someone just throws the entire fucking cutting board at you diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/millstone.dm b/modular_nova/modules/primitive_cooking_additions/code/millstone.dm similarity index 96% rename from modular_skyrat/modules/primitive_cooking_additions/code/millstone.dm rename to modular_nova/modules/primitive_cooking_additions/code/millstone.dm index 70404fadbb1b0e..183492588453df 100644 --- a/modular_skyrat/modules/primitive_cooking_additions/code/millstone.dm +++ b/modular_nova/modules/primitive_cooking_additions/code/millstone.dm @@ -4,13 +4,15 @@ /obj/structure/millstone name = "millstone" desc = "Two big disks of something heavy and tough. Put a plant between them and spin, and you'll end up with seeds and a really ground up plant." - icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/millstone.dmi' + icon = 'modular_nova/modules/primitive_cooking_additions/icons/millstone.dmi' icon_state = "millstone" density = TRUE anchored = TRUE max_integrity = 200 pass_flags = PASSTABLE - custom_materials = list(/datum/material/stone = SHEET_MATERIAL_AMOUNT * 6) + custom_materials = list( + /datum/material/stone = SHEET_MATERIAL_AMOUNT * 6, + ) drag_slowdown = 2 /// The maximum number of items this structure can store var/maximum_contained_items = 10 diff --git a/modular_nova/modules/primitive_cooking_additions/code/stone_griddle.dm b/modular_nova/modules/primitive_cooking_additions/code/stone_griddle.dm new file mode 100644 index 00000000000000..21c6781d0e7776 --- /dev/null +++ b/modular_nova/modules/primitive_cooking_additions/code/stone_griddle.dm @@ -0,0 +1,32 @@ +/obj/machinery/griddle/stone + name = "stone griddle" + desc = "You could probably cook an egg on this... the griddle slab looks very unsanitary." + icon = 'modular_nova/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi' + icon_state = "griddle1_off" + density = TRUE + pass_flags_self = PASSMACHINE | PASSTABLE| LETPASSTHROW // It's roughly the height of a table. + layer = BELOW_OBJ_LAYER + use_power = FALSE + circuit = null + resistance_flags = FIRE_PROOF + processing_flags = START_PROCESSING_MANUALLY + variant = 1 + +/obj/machinery/griddle/Initialize(mapload) + . = ..() + grill_loop = new(src, FALSE) + if(isnum(variant)) + variant = 1 + +/obj/machinery/griddle/stone/examine(mob/user) + . = ..() + + . += span_notice("It can be taken apart with a <b>crowbar</b>.") + +/obj/machinery/griddle/stone/crowbar_act(mob/living/user, obj/item/tool) + user.balloon_alert_to_viewers("disassembling...") + if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) + return + new /obj/item/stack/sheet/mineral/stone(drop_location(), 5) + deconstruct(TRUE) + return ITEM_INTERACT_SUCCESS diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/stone_oven.dm b/modular_nova/modules/primitive_cooking_additions/code/stone_oven.dm similarity index 88% rename from modular_skyrat/modules/primitive_cooking_additions/code/stone_oven.dm rename to modular_nova/modules/primitive_cooking_additions/code/stone_oven.dm index 3549fa03ff6ac6..40b13ac9c69e21 100644 --- a/modular_skyrat/modules/primitive_cooking_additions/code/stone_oven.dm +++ b/modular_nova/modules/primitive_cooking_additions/code/stone_oven.dm @@ -3,10 +3,10 @@ /obj/machinery/oven/stone name = "stone oven" desc = "Sorry buddy, all this stone used up the budget that would have normally gone to garfield comic jokes." - icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi' + icon = 'modular_nova/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi' circuit = null use_power = FALSE - flags_1 = NODECONSTRUCT_1 + obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION /// A list of the different oven trays we can spawn with var/static/list/random_oven_tray_types = list( @@ -56,8 +56,8 @@ user.balloon_alert_to_viewers("disassembling...") if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) return - new /obj/item/stack/sheet/mineral/clay(drop_location(), 5) + new /obj/item/stack/sheet/mineral/stone(drop_location(), 5) deconstruct(TRUE) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS #undef OVEN_TRAY_Y_OFFSET diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/stone_stove.dm b/modular_nova/modules/primitive_cooking_additions/code/stone_stove.dm similarity index 90% rename from modular_skyrat/modules/primitive_cooking_additions/code/stone_stove.dm rename to modular_nova/modules/primitive_cooking_additions/code/stone_stove.dm index 6359e50baae26d..615bc4ed500e71 100644 --- a/modular_skyrat/modules/primitive_cooking_additions/code/stone_stove.dm +++ b/modular_nova/modules/primitive_cooking_additions/code/stone_stove.dm @@ -1,7 +1,7 @@ /obj/machinery/primitive_stove name = "stone stove" desc = "You think you'll stick to just putting pots on this, the grill part looks very unsanitary." - icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi' + icon = 'modular_nova/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi' icon_state = "stove_off" base_icon_state = "stove" density = TRUE @@ -10,7 +10,7 @@ use_power = FALSE circuit = null resistance_flags = FIRE_PROOF - flags_1 = NODECONSTRUCT_1 + obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION /obj/machinery/primitive_stove/Initialize(mapload) . = ..() @@ -26,9 +26,9 @@ user.balloon_alert_to_viewers("disassembling...") if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) return - new /obj/item/stack/sheet/mineral/clay(drop_location(), 5) + new /obj/item/stack/sheet/mineral/stone(drop_location(), 5) deconstruct(TRUE) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /// Stove component subtype with changed visuals and not much else /datum/component/stove/primitive diff --git a/modular_skyrat/modules/primitive_cooking_additions/icons/cooking_structures.dmi b/modular_nova/modules/primitive_cooking_additions/icons/cooking_structures.dmi similarity index 100% rename from modular_skyrat/modules/primitive_cooking_additions/icons/cooking_structures.dmi rename to modular_nova/modules/primitive_cooking_additions/icons/cooking_structures.dmi diff --git a/modular_skyrat/modules/primitive_cooking_additions/icons/cookware.dmi b/modular_nova/modules/primitive_cooking_additions/icons/cookware.dmi similarity index 100% rename from modular_skyrat/modules/primitive_cooking_additions/icons/cookware.dmi rename to modular_nova/modules/primitive_cooking_additions/icons/cookware.dmi diff --git a/modular_skyrat/modules/primitive_cooking_additions/icons/millstone.dmi b/modular_nova/modules/primitive_cooking_additions/icons/millstone.dmi similarity index 100% rename from modular_skyrat/modules/primitive_cooking_additions/icons/millstone.dmi rename to modular_nova/modules/primitive_cooking_additions/icons/millstone.dmi diff --git a/modular_nova/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi b/modular_nova/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi new file mode 100644 index 00000000000000..1bf7f523366437 Binary files /dev/null and b/modular_nova/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi differ diff --git a/modular_skyrat/modules/primitive_cooking_additions/readme.md b/modular_nova/modules/primitive_cooking_additions/readme.md similarity index 100% rename from modular_skyrat/modules/primitive_cooking_additions/readme.md rename to modular_nova/modules/primitive_cooking_additions/readme.md diff --git a/modular_skyrat/modules/primitive_production/code/ceramics.dm b/modular_nova/modules/primitive_production/code/ceramics.dm similarity index 84% rename from modular_skyrat/modules/primitive_production/code/ceramics.dm rename to modular_nova/modules/primitive_production/code/ceramics.dm index 49d71494393b3d..93b516390f54c7 100644 --- a/modular_skyrat/modules/primitive_production/code/ceramics.dm +++ b/modular_nova/modules/primitive_production/code/ceramics.dm @@ -1,5 +1,29 @@ #define DEFAULT_SPIN (4 SECONDS) +/* + * Clay Bricks + */ + +/obj/item/stack/sheet/mineral/clay + name = "clay brick" + desc = "A heavy clay brick." + singular_name = "clay brick" + icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi' + icon_state = "sheet-clay" + inhand_icon_state = null + throw_speed = 3 + throw_range = 5 + merge_type = /obj/item/stack/sheet/mineral/clay + +GLOBAL_LIST_INIT(clay_recipes, list ( \ + new/datum/stack_recipe("clay range", /obj/machinery/primitive_stove, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_MISC), \ + new/datum/stack_recipe("clay oven", /obj/machinery/oven/stone, 10, time = 5 SECONDS, one_per_turf = FALSE, on_solid_ground = TRUE, category = CAT_MISC) \ + )) + +/obj/item/stack/sheet/mineral/clay/get_main_recipes() + . = ..() + . += GLOB.clay_recipes + /obj/structure/water_source/puddle/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/stack/ore/glass)) var/obj/item/stack/ore/glass/glass_item = O @@ -35,7 +59,7 @@ return ..() /obj/item/ceramic - icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi' + icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi' var/forge_item /obj/item/ceramic/attackby(obj/item/attacking_item, mob/living/user, params) @@ -51,7 +75,7 @@ /obj/item/stack/clay name = "clay" desc = "A pile of clay that can be used to create ceramic artwork." - icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi' + icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi' icon_state = "clay" merge_type = /obj/item/stack/clay singular_name = "glob of clay" @@ -88,7 +112,7 @@ /obj/item/plate/ceramic name = "ceramic plate" - icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi' + icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi' icon_state = "clay_plate" /obj/item/ceramic/tray @@ -99,7 +123,7 @@ /obj/item/plate/oven_tray/material/ceramic name = "ceramic oven tray" - icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi' + icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi' icon_state = "clay_tray" /obj/item/ceramic/bowl @@ -110,7 +134,7 @@ /obj/item/reagent_containers/cup/bowl/ceramic name = "ceramic bowl" - icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi' + icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi' icon_state = "clay_bowl" custom_materials = null @@ -123,21 +147,21 @@ /obj/item/reagent_containers/cup/beaker/large/ceramic name = "ceramic cup" desc = "A cup that is made from ceramic." - icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi' + icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi' icon_state = "clay_cup" custom_materials = null /obj/item/ceramic/brick name = "ceramic brick" desc = "A dense block of clay, ready to be fired into a brick!" - icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi' - icon_state = "clay_brick" + icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi' + icon_state = "sheet-clay" forge_item = /obj/item/stack/sheet/mineral/clay /obj/structure/throwing_wheel name = "throwing wheel" desc = "A machine that allows you to throw clay." - icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi' + icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi' icon_state = "throw_wheel_empty" density = TRUE anchored = TRUE diff --git a/modular_skyrat/modules/primitive_production/code/glassblowing.dm b/modular_nova/modules/primitive_production/code/glassblowing.dm similarity index 96% rename from modular_skyrat/modules/primitive_production/code/glassblowing.dm rename to modular_nova/modules/primitive_production/code/glassblowing.dm index a887b063dab4fb..f99732b261266e 100644 --- a/modular_skyrat/modules/primitive_production/code/glassblowing.dm +++ b/modular_nova/modules/primitive_production/code/glassblowing.dm @@ -6,14 +6,16 @@ #define STEP_JACKS "jacks" /obj/item/glassblowing - icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi' + icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi' /obj/item/glassblowing/glass_globe name = "glass globe" desc = "A glass bowl that is capable of carrying things." icon_state = "glass_globe" material_flags = MATERIAL_COLOR - custom_materials = list(/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT) + custom_materials = list( + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + ) /datum/export/glassblowing cost = CARGO_CRATE_VALUE * 5 @@ -37,7 +39,7 @@ /obj/item/reagent_containers/cup/bowl/blowing_glass name = "glass bowl" desc = "A glass bowl that is capable of carrying things." - icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi' + icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi' icon_state = "glass_bowl" custom_materials = null material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR @@ -49,7 +51,7 @@ /obj/item/reagent_containers/cup/beaker/large/blowing_glass name = "glass cup" desc = "A glass cup that is capable of carrying liquids." - icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi' + icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi' icon_state = "glass_cup" custom_materials = null material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR @@ -61,7 +63,7 @@ /obj/item/plate/blowing_glass name = "glass plate" desc = "A glass plate that is capable of carrying things." - icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi' + icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi' icon_state = "glass_plate" custom_materials = null material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR @@ -392,7 +394,7 @@ to_chat(user, span_notice("You begin to [step_id] [src].")) if(!do_after(user, actioning_speed, target = src)) fail_message("You interrupt an action!", user) - REMOVE_TRAIT(tool_to_use, TRAIT_CURRENTLY_GLASSBLOWING, GLASSBLOWING_TRAIT) + REMOVE_TRAIT(tool_to_use, TRAIT_CURRENTLY_GLASSBLOWING, TRAIT_GLASSBLOWING) return FALSE if(glass.steps_remaining) @@ -402,7 +404,7 @@ if(check_finished(glass)) glass.is_finished = TRUE - REMOVE_TRAIT(tool_to_use, TRAIT_CURRENTLY_GLASSBLOWING, GLASSBLOWING_TRAIT) + REMOVE_TRAIT(tool_to_use, TRAIT_CURRENTLY_GLASSBLOWING, TRAIT_GLASSBLOWING) in_use = FALSE to_chat(user, span_notice("You finish trying to [step_id] [src].")) @@ -447,7 +449,7 @@ balloon_alert(user, "already glassblowing!") return FALSE - ADD_TRAIT(user, TRAIT_CURRENTLY_GLASSBLOWING, GLASSBLOWING_TRAIT) + ADD_TRAIT(user, TRAIT_CURRENTLY_GLASSBLOWING, TRAIT_GLASSBLOWING) return user var/obj/item/glassblowing/used_tool @@ -467,7 +469,7 @@ balloon_alert(user, "already in use!") return FALSE - ADD_TRAIT(used_tool, TRAIT_CURRENTLY_GLASSBLOWING, GLASSBLOWING_TRAIT) + ADD_TRAIT(used_tool, TRAIT_CURRENTLY_GLASSBLOWING, TRAIT_GLASSBLOWING) return used_tool /** diff --git a/modular_nova/modules/primitive_production/code/misc.dm b/modular_nova/modules/primitive_production/code/misc.dm new file mode 100644 index 00000000000000..18bcafa8664e9a --- /dev/null +++ b/modular_nova/modules/primitive_production/code/misc.dm @@ -0,0 +1,35 @@ +/obj/item/shard/attackby(obj/item/item, mob/user, params) + //xenoarch hammer, forging hammer, etc. + if(item.tool_behaviour == TOOL_HAMMER) + var/added_color + switch(src.type) + if(/obj/item/shard) + added_color = "#88cdf1" + + if(/obj/item/shard/plasma) + added_color = "#ff80f4" + + if(/obj/item/shard/plastitanium) + added_color = "#5d3369" + + if(/obj/item/shard/titanium) + added_color = "#cfbee0" + + var/obj/colored_item = new /obj/item/stack/ore/glass/zero_cost(get_turf(src)) + colored_item.add_atom_colour(added_color, FIXED_COLOUR_PRIORITY) + new /obj/effect/decal/cleanable/glass(get_turf(src)) + user.balloon_alert(user, "[src] shatters!") + playsound(src, SFX_SHATTER, 30, TRUE) + qdel(src) + return TRUE + + return ..() + +/obj/item/stack/ore/glass/zero_cost + points = 0 + merge_type = /obj/item/stack/ore/glass/zero_cost + +/obj/item/stack/ore/examine(mob/user) + . = ..() + if(points == 0) + . += span_warning("<br> [src] is worthless and will not reward any mining points!") diff --git a/modular_skyrat/modules/primitive_production/code/production_skill.dm b/modular_nova/modules/primitive_production/code/production_skill.dm similarity index 85% rename from modular_skyrat/modules/primitive_production/code/production_skill.dm rename to modular_nova/modules/primitive_production/code/production_skill.dm index 50fc0d30ca59a0..c275cee1ec8be0 100644 --- a/modular_skyrat/modules/primitive_production/code/production_skill.dm +++ b/modular_nova/modules/primitive_production/code/production_skill.dm @@ -12,7 +12,7 @@ name = "legendary producer's cloak" desc = "Worn by the most skilled producers, this legendary cloak is only attainable by knowing how to create the best products. \ This status symbol represents a being who has crafted some of the finest glass and ceramic works." - icon = 'modular_skyrat/modules/primitive_production/icons/cloaks.dmi' - worn_icon = 'modular_skyrat/modules/primitive_production/icons/neck.dmi' + icon = 'modular_nova/modules/primitive_production/icons/cloaks.dmi' + worn_icon = 'modular_nova/modules/primitive_production/icons/neck.dmi' icon_state = "productioncloak" associated_skill_path = /datum/skill/production diff --git a/modular_skyrat/modules/primitive_production/icons/cloaks.dmi b/modular_nova/modules/primitive_production/icons/cloaks.dmi similarity index 100% rename from modular_skyrat/modules/primitive_production/icons/cloaks.dmi rename to modular_nova/modules/primitive_production/icons/cloaks.dmi diff --git a/modular_skyrat/modules/primitive_production/icons/neck.dmi b/modular_nova/modules/primitive_production/icons/neck.dmi similarity index 100% rename from modular_skyrat/modules/primitive_production/icons/neck.dmi rename to modular_nova/modules/primitive_production/icons/neck.dmi diff --git a/modular_nova/modules/primitive_production/icons/prim_fun.dmi b/modular_nova/modules/primitive_production/icons/prim_fun.dmi new file mode 100644 index 00000000000000..1caf775d6829a6 Binary files /dev/null and b/modular_nova/modules/primitive_production/icons/prim_fun.dmi differ diff --git a/modular_skyrat/modules/primitive_production/readme.md b/modular_nova/modules/primitive_production/readme.md similarity index 100% rename from modular_skyrat/modules/primitive_production/readme.md rename to modular_nova/modules/primitive_production/readme.md diff --git a/modular_skyrat/modules/primitive_structures/code/fencing.dm b/modular_nova/modules/primitive_structures/code/fencing.dm similarity index 92% rename from modular_skyrat/modules/primitive_structures/code/fencing.dm rename to modular_nova/modules/primitive_structures/code/fencing.dm index 86b0561c8ad589..9ced3cdb4832c0 100644 --- a/modular_skyrat/modules/primitive_structures/code/fencing.dm +++ b/modular_nova/modules/primitive_structures/code/fencing.dm @@ -3,11 +3,11 @@ /obj/structure/railing/wooden_fencing name = "wooden fence" desc = "A basic wooden fence meant to prevent people like you either in or out of somewhere." - icon = 'modular_skyrat/modules/primitive_structures/icons/wooden_fence.dmi' + icon = 'modular_nova/modules/primitive_structures/icons/wooden_fence.dmi' icon_state = "fence" layer = BELOW_OBJ_LAYER // I think this is the default but lets be safe? resistance_flags = FLAMMABLE - flags_1 = NODECONSTRUCT_1 | ON_BORDER_1 + flags_1 = NO_DECONSTRUCTION | ON_BORDER_1 /// If we randomize our icon on spawning var/random_icons = TRUE @@ -58,7 +58,7 @@ /obj/structure/mineral_door/wood/large_gate name = "large wooden gate" - icon = 'modular_skyrat/modules/primitive_structures/icons/wooden_gate.dmi' + icon = 'modular_nova/modules/primitive_structures/icons/wooden_gate.dmi' icon_state = "gate" openSound = 'sound/machines/wooden_closet_open.ogg' closeSound = 'sound/machines/wooden_closet_close.ogg' diff --git a/modular_nova/modules/primitive_structures/code/storage_structures.dm b/modular_nova/modules/primitive_structures/code/storage_structures.dm new file mode 100644 index 00000000000000..ea4d9616108922 --- /dev/null +++ b/modular_nova/modules/primitive_structures/code/storage_structures.dm @@ -0,0 +1,173 @@ +// Wooden shelves that force items placed on them to be visually placed them + +/obj/structure/rack/wooden + name = "shelf" + icon_state = "shelf_wood" + icon = 'modular_nova/modules/primitive_structures/icons/storage.dmi' + resistance_flags = FLAMMABLE + obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION + +/obj/structure/rack/wooden/MouseDrop_T(obj/object, mob/user, params) + . = ..() + var/list/modifiers = params2list(params) + if(!LAZYACCESS(modifiers, ICON_X) || !LAZYACCESS(modifiers, ICON_Y)) + return + + object.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size / 3), world.icon_size / 3) + object.pixel_y = text2num(LAZYACCESS(modifiers, ICON_Y)) > 16 ? 10 : -4 + +/obj/structure/rack/wooden/crowbar_act(mob/living/user, obj/item/tool) + user.balloon_alert_to_viewers("disassembling...") + if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) + return + new /obj/item/stack/sheet/mineral/clay(drop_location(), 5) + deconstruct(TRUE) + return ITEM_INTERACT_SUCCESS + +/obj/structure/rack/wooden/deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/mineral/wood(drop_location(), 2) + return ..() + +// Barrel but it works like a crate + +/obj/structure/closet/crate/wooden/storage_barrel + name = "storage barrel" + desc = "This barrel can't hold liquids, it can just hold things inside of it however!" + icon_state = "barrel" + base_icon_state = "barrel" + icon = 'modular_nova/modules/primitive_structures/icons/storage.dmi' + resistance_flags = FLAMMABLE + obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION + +/obj/structure/closet/crate/wooden/storage_barrel/crowbar_act(mob/living/user, obj/item/tool) + user.balloon_alert_to_viewers("disassembling...") + if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) + return + new /obj/item/stack/sheet/mineral/clay(drop_location(), 5) + deconstruct(TRUE) + return ITEM_INTERACT_SUCCESS + +/obj/structure/closet/crate/wooden/storage_barrel/deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/mineral/wood(drop_location(), 4) + return ..() + +/obj/machinery/smartfridge/producebin + name = "Produce Bin" + desc = "A wooden hamper, used to hold plant products and try keep them safe from pests." + icon_state = "producebin" + icon = 'modular_nova/modules/primitive_structures/icons/storage.dmi' + resistance_flags = FLAMMABLE + base_build_path = /obj/machinery/smartfridge/producebin + base_icon_state = "produce" + use_power = NO_POWER_USE + light_power = 0 + idle_power_usage = 0 + circuit = null + has_emissive = FALSE + can_atmos_pass = ATMOS_PASS_YES + visible_contents = TRUE + +/obj/machinery/smartfridge/producebin/accept_check(obj/item/weapon) + return (istype(weapon, /obj/item/food/grown)) + +/obj/machinery/smartfridge/producebin/structure_examine() + . = span_info("The whole rack can be [EXAMINE_HINT("pried")] apart.") + + +/obj/machinery/smartfridge/producebin/crowbar_act(mob/living/user, obj/item/tool) + user.balloon_alert_to_viewers("disassembling...") + if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) + return + new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) + deconstruct(TRUE) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/smartfridge/seedshelf + name = "Seedshelf" + desc = "A wooden shelf, used to hold seeds preventing them from germinating early." + icon_state = "seedshelf" + icon = 'modular_nova/modules/primitive_structures/icons/storage.dmi' + resistance_flags = FLAMMABLE + base_build_path = /obj/machinery/smartfridge/seedshelf + base_icon_state = "seed" + use_power = NO_POWER_USE + light_power = 0 + idle_power_usage = 0 + circuit = null + has_emissive = FALSE + can_atmos_pass = ATMOS_PASS_YES + visible_contents = TRUE + +/obj/machinery/smartfridge/seedshelf/accept_check(obj/item/weapon) + return istype(weapon, /obj/item/seeds) + +/obj/machinery/smartfridge/seedshelf/structure_examine() + . = span_info("The whole rack can be [EXAMINE_HINT("pried")] apart.") + +/obj/machinery/smartfridge/seedshelf/crowbar_act(mob/living/user, obj/item/tool) + user.balloon_alert_to_viewers("disassembling...") + if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) + return + new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) + deconstruct(TRUE) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/smartfridge/rationshelf + name = "Ration shelf" + desc = "A wooden shelf, used to store food... preferably preserved." + icon_state = "rationshelf" + icon = 'modular_nova/modules/primitive_structures/icons/storage.dmi' + resistance_flags = FLAMMABLE + base_build_path = /obj/machinery/smartfridge/rationshelf + base_icon_state = "ration" + use_power = NO_POWER_USE + light_power = 0 + idle_power_usage = 0 + circuit = null + has_emissive = FALSE + can_atmos_pass = ATMOS_PASS_YES + visible_contents = TRUE + +/obj/machinery/smartfridge/rationshelf/accept_check(obj/item/weapon) + return (IS_EDIBLE(weapon) || (istype(weapon,/obj/item/reagent_containers/cup/bowl) && length(weapon.reagents?.reagent_list))) + +/obj/machinery/smartfridge/rationshelf/structure_examine() + . = span_info("The whole rack can be [EXAMINE_HINT("pried")] apart.") + +/obj/machinery/smartfridge/rationshelf/crowbar_act(mob/living/user, obj/item/tool) + user.balloon_alert_to_viewers("disassembling...") + if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) + return + new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) + deconstruct(TRUE) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/smartfridge/producedisplay + name = "Produce display" + desc = "A wooden table with awning, used to display produce items." + icon_state = "producedisplay" + icon = 'modular_nova/modules/primitive_structures/icons/storage.dmi' + resistance_flags = FLAMMABLE + base_build_path = /obj/machinery/smartfridge/producedisplay + base_icon_state = "nonfood" + use_power = NO_POWER_USE + light_power = 0 + idle_power_usage = 0 + circuit = null + has_emissive = FALSE + can_atmos_pass = ATMOS_PASS_YES + visible_contents = TRUE + +/obj/machinery/smartfridge/producedisplay/accept_check(obj/item/weapon) + return (istype(weapon, /obj/item/grown) || istype(weapon, /obj/item/bouquet) || istype(weapon, /obj/item/clothing/head/costume/garland)) + +/obj/machinery/smartfridge/producedisplay/structure_examine() + . = span_info("The whole rack can be [EXAMINE_HINT("pried")] apart.") + +/obj/machinery/smartfridge/producedisplay/crowbar_act(mob/living/user, obj/item/tool) + user.balloon_alert_to_viewers("disassembling...") + if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) + return + new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) + deconstruct(TRUE) + return ITEM_INTERACT_SUCCESS diff --git a/modular_nova/modules/primitive_structures/code/totally_thatch_roof.dm b/modular_nova/modules/primitive_structures/code/totally_thatch_roof.dm new file mode 100644 index 00000000000000..aa3b1883ce724d --- /dev/null +++ b/modular_nova/modules/primitive_structures/code/totally_thatch_roof.dm @@ -0,0 +1,8 @@ +/turf/open/misc/grass/roofing + name = "thatched roof" + desc = "A collection of various dried greens, not so green anymore, that makes a passable roof material." + baseturfs = /turf/open/openspace/icemoon + initial_gas_mix = "ICEMOON_ATMOS" + icon_state = "grass-255" + icon = 'modular_nova/modules/primitive_structures/icons/roofing.dmi' + smooth_icon = 'modular_nova/modules/primitive_structures/icons/roofing.dmi' diff --git a/modular_skyrat/modules/primitive_structures/code/wall_torch.dm b/modular_nova/modules/primitive_structures/code/wall_torch.dm similarity index 94% rename from modular_skyrat/modules/primitive_structures/code/wall_torch.dm rename to modular_nova/modules/primitive_structures/code/wall_torch.dm index 7dc62b1b78f353..14da5b99f5fa12 100644 --- a/modular_skyrat/modules/primitive_structures/code/wall_torch.dm +++ b/modular_nova/modules/primitive_structures/code/wall_torch.dm @@ -1,7 +1,7 @@ /obj/structure/wall_torch name = "mounted torch" desc = "A simple torch mounted to the wall, for lighting and such." - icon = 'modular_skyrat/modules/primitive_structures/icons/lighting.dmi' + icon = 'modular_nova/modules/primitive_structures/icons/lighting.dmi' icon_state = "walltorch" base_icon_state = "walltorch" anchored = TRUE diff --git a/modular_nova/modules/primitive_structures/code/windows.dm b/modular_nova/modules/primitive_structures/code/windows.dm new file mode 100644 index 00000000000000..09d98f42ac850d --- /dev/null +++ b/modular_nova/modules/primitive_structures/code/windows.dm @@ -0,0 +1,10 @@ +/obj/structure/window/green_glass_pane + name = "green glass window" + desc = "A handcrafted green glass window. At least you can still see through it." + icon = 'modular_nova/modules/primitive_structures/icons/windows.dmi' + icon_state = "green_glass" + flags_1 = NONE + obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION + can_be_unanchored = FALSE + fulltile = TRUE + flags_1 = PREVENT_CLICK_UNDER_1 diff --git a/modular_skyrat/modules/primitive_structures/code/wooden_ladder.dm b/modular_nova/modules/primitive_structures/code/wooden_ladder.dm similarity index 76% rename from modular_skyrat/modules/primitive_structures/code/wooden_ladder.dm rename to modular_nova/modules/primitive_structures/code/wooden_ladder.dm index 79995763b3547b..d8061c8a49dbf3 100644 --- a/modular_skyrat/modules/primitive_structures/code/wooden_ladder.dm +++ b/modular_nova/modules/primitive_structures/code/wooden_ladder.dm @@ -3,5 +3,5 @@ /obj/structure/ladder/wood name = "wooden ladder" desc = "Up or down, whatever your mood you sure wood find what you're looking for with this ladder." - icon = 'modular_skyrat/modules/primitive_structures/icons/wooden_ladder.dmi' + icon = 'modular_nova/modules/primitive_structures/icons/wooden_ladder.dmi' resistance_flags = FLAMMABLE diff --git a/modular_skyrat/modules/primitive_structures/icons/lighting.dmi b/modular_nova/modules/primitive_structures/icons/lighting.dmi similarity index 100% rename from modular_skyrat/modules/primitive_structures/icons/lighting.dmi rename to modular_nova/modules/primitive_structures/icons/lighting.dmi diff --git a/modular_skyrat/modules/primitive_structures/icons/roofing.dmi b/modular_nova/modules/primitive_structures/icons/roofing.dmi similarity index 100% rename from modular_skyrat/modules/primitive_structures/icons/roofing.dmi rename to modular_nova/modules/primitive_structures/icons/roofing.dmi diff --git a/modular_nova/modules/primitive_structures/icons/storage.dmi b/modular_nova/modules/primitive_structures/icons/storage.dmi new file mode 100644 index 00000000000000..413a49e7eaa183 Binary files /dev/null and b/modular_nova/modules/primitive_structures/icons/storage.dmi differ diff --git a/modular_skyrat/modules/primitive_structures/icons/windows.dmi b/modular_nova/modules/primitive_structures/icons/windows.dmi similarity index 100% rename from modular_skyrat/modules/primitive_structures/icons/windows.dmi rename to modular_nova/modules/primitive_structures/icons/windows.dmi diff --git a/modular_skyrat/modules/primitive_structures/icons/wooden_fence.dmi b/modular_nova/modules/primitive_structures/icons/wooden_fence.dmi similarity index 100% rename from modular_skyrat/modules/primitive_structures/icons/wooden_fence.dmi rename to modular_nova/modules/primitive_structures/icons/wooden_fence.dmi diff --git a/modular_skyrat/modules/primitive_structures/icons/wooden_gate.dmi b/modular_nova/modules/primitive_structures/icons/wooden_gate.dmi similarity index 100% rename from modular_skyrat/modules/primitive_structures/icons/wooden_gate.dmi rename to modular_nova/modules/primitive_structures/icons/wooden_gate.dmi diff --git a/modular_skyrat/modules/primitive_structures/icons/wooden_ladder.dmi b/modular_nova/modules/primitive_structures/icons/wooden_ladder.dmi similarity index 100% rename from modular_skyrat/modules/primitive_structures/icons/wooden_ladder.dmi rename to modular_nova/modules/primitive_structures/icons/wooden_ladder.dmi diff --git a/modular_skyrat/modules/primitive_structures/readme.md b/modular_nova/modules/primitive_structures/readme.md similarity index 100% rename from modular_skyrat/modules/primitive_structures/readme.md rename to modular_nova/modules/primitive_structures/readme.md diff --git a/modular_skyrat/modules/prison_transport/code/outfits.dm b/modular_nova/modules/prison_transport/code/outfits.dm similarity index 100% rename from modular_skyrat/modules/prison_transport/code/outfits.dm rename to modular_nova/modules/prison_transport/code/outfits.dm diff --git a/modular_skyrat/modules/projectiles/code/guns/misc/m6pdw.dm b/modular_nova/modules/projectiles/code/guns/misc/m6pdw.dm similarity index 78% rename from modular_skyrat/modules/projectiles/code/guns/misc/m6pdw.dm rename to modular_nova/modules/projectiles/code/guns/misc/m6pdw.dm index d4c367bafdfbc1..201552ae663f60 100644 --- a/modular_skyrat/modules/projectiles/code/guns/misc/m6pdw.dm +++ b/modular_nova/modules/projectiles/code/guns/misc/m6pdw.dm @@ -3,11 +3,11 @@ /obj/item/gun/ballistic/automatic/m6pdw name = "\improper M6 Personal Defense Weapon" desc = "A PDW designed to be used within close to medium range. Its slide seems to stick a bit, having years of dust accumulation, And its manufacturer stamp and symbols have been scratched out." - icon = 'modular_skyrat/modules/projectiles/icons/m6pdw.dmi' + icon = 'modular_nova/modules/projectiles/icons/m6pdw.dmi' icon_state = "m6_pdw" inhand_icon_state = "m6_pdw" - righthand_file = 'modular_skyrat/modules/projectiles/icons/inhands/righthand.dmi' - lefthand_file = 'modular_skyrat/modules/projectiles/icons/inhands/lefthand.dmi' + righthand_file = 'modular_nova/modules/projectiles/icons/inhands/righthand.dmi' + lefthand_file = 'modular_nova/modules/projectiles/icons/inhands/lefthand.dmi' w_class = WEIGHT_CLASS_NORMAL spawnwithmagazine = FALSE accepted_magazine_type = /obj/item/ammo_box/magazine/c35sol_pistol diff --git a/modular_skyrat/modules/projectiles/icons/inhands/lefthand.dmi b/modular_nova/modules/projectiles/icons/inhands/lefthand.dmi similarity index 100% rename from modular_skyrat/modules/projectiles/icons/inhands/lefthand.dmi rename to modular_nova/modules/projectiles/icons/inhands/lefthand.dmi diff --git a/modular_skyrat/modules/projectiles/icons/inhands/righthand.dmi b/modular_nova/modules/projectiles/icons/inhands/righthand.dmi similarity index 100% rename from modular_skyrat/modules/projectiles/icons/inhands/righthand.dmi rename to modular_nova/modules/projectiles/icons/inhands/righthand.dmi diff --git a/modular_skyrat/modules/projectiles/icons/m6pdw.dmi b/modular_nova/modules/projectiles/icons/m6pdw.dmi similarity index 100% rename from modular_skyrat/modules/projectiles/icons/m6pdw.dmi rename to modular_nova/modules/projectiles/icons/m6pdw.dmi diff --git a/modular_skyrat/modules/protected_roles/code/_job.dm b/modular_nova/modules/protected_roles/code/_job.dm similarity index 100% rename from modular_skyrat/modules/protected_roles/code/_job.dm rename to modular_nova/modules/protected_roles/code/_job.dm diff --git a/modular_skyrat/modules/protected_roles/code/antag_restricted_jobs.dm b/modular_nova/modules/protected_roles/code/antag_restricted_jobs.dm similarity index 100% rename from modular_skyrat/modules/protected_roles/code/antag_restricted_jobs.dm rename to modular_nova/modules/protected_roles/code/antag_restricted_jobs.dm diff --git a/modular_nova/modules/radiosound/code/headset.dm b/modular_nova/modules/radiosound/code/headset.dm new file mode 100644 index 00000000000000..3ffe1fa4f9325a --- /dev/null +++ b/modular_nova/modules/radiosound/code/headset.dm @@ -0,0 +1,16 @@ +/obj/item/radio/headset + /// The sound that plays when someone uses the headset + var/radiosound = 'modular_nova/modules/radiosound/sound/radio/common.ogg' + /// The volume of the radio sound we make + var/radio_sound_volume = 25 + +/obj/item/radio/headset/syndicate //disguised to look like a normal headset for stealth ops + radiosound = 'modular_nova/modules/radiosound/sound/radio/syndie.ogg' + +/obj/item/radio/headset/headset_sec + radiosound = 'modular_nova/modules/radiosound/sound/radio/security.ogg' + +/obj/item/radio/headset/talk_into(mob/living/mob_in_question, message, channel, list/spans, datum/language/language, list/message_mods, direct = TRUE) + if(radiosound && listening) + playsound(mob_in_question, radiosound, radio_sound_volume, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, SOUND_FALLOFF_EXPONENT) + . = ..() diff --git a/modular_skyrat/modules/radiosound/readme.md b/modular_nova/modules/radiosound/readme.md similarity index 100% rename from modular_skyrat/modules/radiosound/readme.md rename to modular_nova/modules/radiosound/readme.md diff --git a/modular_skyrat/modules/radiosound/sound/radio/common.ogg b/modular_nova/modules/radiosound/sound/radio/common.ogg similarity index 100% rename from modular_skyrat/modules/radiosound/sound/radio/common.ogg rename to modular_nova/modules/radiosound/sound/radio/common.ogg diff --git a/modular_skyrat/modules/radiosound/sound/radio/security.ogg b/modular_nova/modules/radiosound/sound/radio/security.ogg similarity index 100% rename from modular_skyrat/modules/radiosound/sound/radio/security.ogg rename to modular_nova/modules/radiosound/sound/radio/security.ogg diff --git a/modular_skyrat/modules/radiosound/sound/radio/syndie.ogg b/modular_nova/modules/radiosound/sound/radio/syndie.ogg similarity index 100% rename from modular_skyrat/modules/radiosound/sound/radio/syndie.ogg rename to modular_nova/modules/radiosound/sound/radio/syndie.ogg diff --git a/modular_skyrat/modules/reagent_forging/code/anvil.dm b/modular_nova/modules/reagent_forging/code/anvil.dm similarity index 89% rename from modular_skyrat/modules/reagent_forging/code/anvil.dm rename to modular_nova/modules/reagent_forging/code/anvil.dm index 4765664e473a30..00e7c06e9fd418 100644 --- a/modular_skyrat/modules/reagent_forging/code/anvil.dm +++ b/modular_nova/modules/reagent_forging/code/anvil.dm @@ -1,7 +1,7 @@ /obj/structure/reagent_anvil name = "smithing anvil" desc = "Essentially a big block of metal that you can hammer other metals on top of, crucial for anyone working metal by hand." - icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_structures.dmi' + icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_structures.dmi' icon_state = "anvil_empty" anchored = TRUE @@ -63,24 +63,24 @@ if(forge_item.in_use) balloon_alert(user, "already in use") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS var/obj/obj_tong_search = locate() in forge_item.contents if(obj_anvil_search && !obj_tong_search) obj_anvil_search.forceMove(forge_item) update_appearance() forge_item.icon_state = "tong_full" - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(!obj_anvil_search && obj_tong_search) obj_tong_search.forceMove(src) update_appearance() forge_item.icon_state = "tong_empty" - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/reagent_anvil/hammer_act(mob/living/user, obj/item/tool) //regardless, we will make a sound - playsound(src, 'modular_skyrat/modules/reagent_forging/sound/forge.ogg', 50, TRUE, ignore_walls = FALSE) + playsound(src, 'modular_nova/modules/reagent_forging/sound/forge.ogg', 50, TRUE, ignore_walls = FALSE) //do we have an incomplete item to hammer out? if so, here is our block of code var/obj/item/forging/incomplete/locate_incomplete = locate() in contents @@ -88,7 +88,7 @@ if(COOLDOWN_FINISHED(locate_incomplete, heating_remainder)) balloon_alert(user, "metal too cool") locate_incomplete.times_hit -= 3 - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(COOLDOWN_FINISHED(locate_incomplete, striking_cooldown)) var/skill_modifier = user.mind.get_skill_modifier(/datum/skill/smithing, SKILL_SPEED_MODIFIER) * locate_incomplete.average_wait @@ -100,7 +100,7 @@ if(locate_incomplete.times_hit >= locate_incomplete.average_hits) user.balloon_alert(user, "[locate_incomplete] sounds ready") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS locate_incomplete.times_hit -= 3 balloon_alert(user, "bad hit") @@ -110,25 +110,25 @@ qdel(locate_incomplete) update_appearance() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS //okay, so we didn't find an incomplete item to hammer, do we have a hammerable item? var/obj/locate_obj = locate() in contents - if(locate_obj && (locate_obj.skyrat_obj_flags & ANVIL_REPAIR)) + if(locate_obj && (locate_obj.obj_flags_nova & ANVIL_REPAIR)) if(locate_obj.get_integrity() >= locate_obj.max_integrity) balloon_alert(user, "already repaired") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS while(locate_obj.get_integrity() < locate_obj.max_integrity) if(!do_after(user, 1 SECONDS, src)) balloon_alert(user, "stopped repairing") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS locate_obj.repair_damage(locate_obj.get_integrity() + 10) user.mind.adjust_experience(/datum/skill/smithing, 5) //repairing does give some experience - playsound(src, 'modular_skyrat/modules/reagent_forging/sound/forge.ogg', 50, TRUE, ignore_walls = FALSE) + playsound(src, 'modular_nova/modules/reagent_forging/sound/forge.ogg', 50, TRUE, ignore_walls = FALSE) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/reagent_anvil/hammer_act_secondary(mob/living/user, obj/item/tool) hammer_act(user, tool) diff --git a/modular_skyrat/modules/reagent_forging/code/crafting_bench.dm b/modular_nova/modules/reagent_forging/code/crafting_bench.dm similarity index 95% rename from modular_skyrat/modules/reagent_forging/code/crafting_bench.dm rename to modular_nova/modules/reagent_forging/code/crafting_bench.dm index 3ab95bee6fbda9..5b5f647cf441e8 100644 --- a/modular_skyrat/modules/reagent_forging/code/crafting_bench.dm +++ b/modular_nova/modules/reagent_forging/code/crafting_bench.dm @@ -7,7 +7,7 @@ /obj/structure/reagent_crafting_bench name = "forging workbench" desc = "A crafting bench fitted with tools, securing mechanisms, and a steady surface for blacksmithing." - icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_structures.dmi' + icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_structures.dmi' icon_state = "crafting_bench_empty" anchored = TRUE @@ -27,7 +27,6 @@ /datum/crafting_bench_recipe/plate_vest, /datum/crafting_bench_recipe/plate_gloves, /datum/crafting_bench_recipe/plate_boots, - /datum/crafting_bench_recipe/horse_shoes, /datum/crafting_bench_recipe/ring, /datum/crafting_bench_recipe/collar, /datum/crafting_bench_recipe/handcuffs, @@ -156,20 +155,20 @@ /obj/structure/reagent_crafting_bench/wrench_act(mob/living/user, obj/item/tool) tool.play_tool_sound(src) deconstruct(disassembled = TRUE) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/reagent_crafting_bench/hammer_act(mob/living/user, obj/item/tool) - playsound(src, 'modular_skyrat/modules/reagent_forging/sound/forge.ogg', 50, TRUE) + playsound(src, 'modular_nova/modules/reagent_forging/sound/forge.ogg', 50, TRUE) if(length(contents)) if(!istype(contents[1], /obj/item/forging/complete)) balloon_alert(user, "invalid item") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS var/obj/item/forging/complete/weapon_to_finish = contents[1] if(!weapon_to_finish.spawning_item) balloon_alert(user, "[weapon_to_finish] cannot be completed") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS var/list/wood_required_for_weapons = list( /obj/item/stack/sheet/mineral/wood = WEAPON_COMPLETION_WOOD_AMOUNT, @@ -177,26 +176,26 @@ if(!can_we_craft_this(wood_required_for_weapons)) balloon_alert(user, "not enough wood") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS var/list/things_to_use = can_we_craft_this(wood_required_for_weapons, TRUE) var/obj/thing_just_made = create_thing_from_requirements(things_to_use, user = user, skill_to_grant = /datum/skill/smithing, skill_amount = 30, completing_a_weapon = TRUE) if(!thing_just_made) message_admins("[src] just tried to finish a weapon but somehow created nothing! This is not working as intended!") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS balloon_alert_to_viewers("[thing_just_made] created") update_appearance() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(!selected_recipe) balloon_alert(user, "no recipe selected") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(!can_we_craft_this(selected_recipe.recipe_requirements)) balloon_alert(user, "missing ingredients") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS var/skill_modifier = user.mind.get_skill_modifier(selected_recipe.relevant_skill, SKILL_SPEED_MODIFIER) * 1 SECONDS @@ -206,10 +205,10 @@ if(current_hits_to_completion <= -(selected_recipe.required_good_hits)) balloon_alert_to_viewers("recipe failed") clear_recipe() - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS balloon_alert(user, "bad hit") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS COOLDOWN_START(src, hit_cooldown, skill_modifier) @@ -217,12 +216,12 @@ var/list/things_to_use = can_we_craft_this(selected_recipe.recipe_requirements, TRUE) create_thing_from_requirements(things_to_use, selected_recipe, user, selected_recipe.relevant_skill, selected_recipe.relevant_skill_reward) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS current_hits_to_completion++ balloon_alert(user, "good hit") user.mind.adjust_experience(selected_recipe.relevant_skill, selected_recipe.relevant_skill_reward / 15) // Good hits towards the current item grants experience in that skill - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /// Takes the given list of item requirements and checks the surroundings for them, returns TRUE unless return_ingredients_list is set, in which case a list of all the items to use is returned /obj/structure/reagent_crafting_bench/proc/can_we_craft_this(list/required_items, return_ingredients_list = FALSE) diff --git a/modular_skyrat/modules/reagent_forging/code/crafting_bench_recipes.dm b/modular_nova/modules/reagent_forging/code/crafting_bench_recipes.dm similarity index 94% rename from modular_skyrat/modules/reagent_forging/code/crafting_bench_recipes.dm rename to modular_nova/modules/reagent_forging/code/crafting_bench_recipes.dm index 1a9001cc154aa3..626bdc62b7fd39 100644 --- a/modular_skyrat/modules/reagent_forging/code/crafting_bench_recipes.dm +++ b/modular_nova/modules/reagent_forging/code/crafting_bench_recipes.dm @@ -52,14 +52,6 @@ resulting_item = /obj/item/clothing/shoes/forging_plate_boots required_good_hits = 8 -/datum/crafting_bench_recipe/horse_shoes - recipe_name = "horse shoes" - recipe_requirements = list( - /obj/item/forging/complete/chain = 4, - ) - resulting_item = /obj/item/clothing/shoes/horseshoe - required_good_hits = 8 - /datum/crafting_bench_recipe/ring recipe_name = "ring" recipe_requirements = list( @@ -120,7 +112,7 @@ recipe_name = "seed mesh" recipe_requirements = list( /obj/item/forging/complete/plate = 1, - /obj/item/forging/complete/chain = 4, + /obj/item/forging/complete/chain = 2, ) resulting_item = /obj/item/seed_mesh required_good_hits = 10 diff --git a/modular_skyrat/modules/reagent_forging/code/forge.dm b/modular_nova/modules/reagent_forging/code/forge.dm similarity index 97% rename from modular_skyrat/modules/reagent_forging/code/forge.dm rename to modular_nova/modules/reagent_forging/code/forge.dm index 1aee837169a546..a3e2e639cbfee9 100644 --- a/modular_skyrat/modules/reagent_forging/code/forge.dm +++ b/modular_nova/modules/reagent_forging/code/forge.dm @@ -41,7 +41,7 @@ /obj/structure/reagent_forge name = "forge" desc = "A structure built out of bricks, for heating up metal, or glass, or ceramic, or food, or anything really." - icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_structures.dmi' + icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_structures.dmi' icon_state = "forge_inactive" anchored = TRUE @@ -590,12 +590,12 @@ for(var/datum/reagent/weapon_reagent as anything in attacking_weapon.reagents.reagent_list) if(weapon_reagent.volume < MINIMUM_IMBUING_REAGENT_AMOUNT) - attacking_weapon.reagents.remove_all_type(weapon_reagent.type) + attacking_weapon.reagents.remove_reagent(weapon_reagent.type) continue if(is_type_in_typecache(weapon_reagent, disallowed_reagents)) balloon_alert(user, "cannot imbue with [weapon_reagent.name]") - attacking_weapon.reagents.remove_all_type(weapon_reagent.type) + attacking_weapon.reagents.remove_reagent(weapon_reagent.type, include_subtypes = TRUE) continue weapon_component.imbued_reagent += weapon_reagent.type @@ -640,12 +640,12 @@ for(var/datum/reagent/clothing_reagent as anything in attacking_clothing.reagents.reagent_list) if(clothing_reagent.volume < MINIMUM_IMBUING_REAGENT_AMOUNT) - attacking_clothing.reagents.remove_all_type(clothing_reagent.type) + attacking_clothing.reagents.remove_reagent(clothing_reagent.type, include_subtypes = TRUE) continue if(is_type_in_typecache(clothing_reagent, disallowed_reagents)) balloon_alert(user, "cannot imbue with [clothing_reagent.name]") - attacking_clothing.reagents.remove_all_type(clothing_reagent.type) + attacking_clothing.reagents.remove_reagent(clothing_reagent.type, include_subtypes = TRUE) continue clothing_component.imbued_reagent += clothing_reagent.type @@ -743,7 +743,7 @@ /obj/structure/reagent_forge/billow_act(mob/living/user, obj/item/tool) if(in_use) // Preventing billow use if the forge is in use to prevent spam fail_message(user, "forge busy") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS var/skill_modifier = user.mind.get_skill_modifier(/datum/skill/smithing, SKILL_SPEED_MODIFIER) var/obj/item/forging/forge_item = tool @@ -752,25 +752,25 @@ if(!forge_fuel_strong && !forge_fuel_weak) fail_message(user, "no fuel in [src]") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(forge_temperature >= MAX_FORGE_TEMP) fail_message(user, "[src] cannot heat further") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS balloon_alert_to_viewers("billowing...") while(forge_temperature < 91) if(!do_after(user, skill_modifier * forge_item.toolspeed, target = src)) balloon_alert_to_viewers("stopped billowing") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS forge_temperature += 10 user.mind.adjust_experience(/datum/skill/smithing, 5) // Billowing, like fueling, gives you some experience in forging in_use = FALSE balloon_alert(user, "successfully heated [src]") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/reagent_forge/tong_act(mob/living/user, obj/item/tool) var/skill_modifier = user.mind.get_skill_modifier(/datum/skill/smithing, SKILL_SPEED_MODIFIER) @@ -778,7 +778,7 @@ if(in_use || forge_item.in_use) fail_message(user, "forge busy") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS in_use = TRUE forge_item.in_use = TRUE @@ -786,7 +786,7 @@ if(forge_temperature < MIN_FORGE_TEMP) fail_message(user, "forge too cool") forge_item.in_use = FALSE - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS // Here we check the item used on us (tongs) for an incomplete forge item of some kind to heat var/obj/item/forging/incomplete/search_incomplete = locate(/obj/item/forging/incomplete) in forge_item.contents @@ -796,14 +796,14 @@ if(!do_after(user, skill_modifier * forge_item.toolspeed, target = src)) balloon_alert_to_viewers("stopped heating [search_incomplete]") forge_item.in_use = FALSE - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS COOLDOWN_START(search_incomplete, heating_remainder, FORGE_HEATING_DURATION) in_use = FALSE forge_item.in_use = FALSE user.mind.adjust_experience(/datum/skill/smithing, 5) // Heating up forge items grants some experience balloon_alert(user, "successfully heated [search_incomplete]") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS // Here we check the item used on us (tongs) for a stack of some kind to create an object from var/obj/item/stack/search_stack = locate(/obj/item/stack) in forge_item.contents @@ -812,7 +812,7 @@ if(!user_choice) fail_message(user, "nothing chosen") forge_item.in_use = FALSE - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS // Sets up a list of the materials to give to the item later var/list/material_list = list() @@ -827,14 +827,14 @@ if(!search_stack.use(1)) fail_message(user, "not enough of [search_stack]") forge_item.in_use = FALSE - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS balloon_alert_to_viewers("heating [search_stack]") if(!do_after(user, skill_modifier * forge_item.toolspeed, target = src)) balloon_alert_to_viewers("stopped heating [search_stack]") forge_item.in_use = FALSE - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS var/spawn_item = choice_list[user_choice] var/obj/item/forging/incomplete/incomplete_item = new spawn_item(get_turf(src)) @@ -850,11 +850,11 @@ if(!search_stack) forge_item.icon_state = "tong_empty" - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS in_use = FALSE forge_item.in_use = FALSE - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/reagent_forge/blowrod_act(mob/living/user, obj/item/tool) var/obj/item/glassblowing/blowing_rod/blowing_item = tool @@ -863,27 +863,27 @@ if(in_use) to_chat(user, span_warning("You cannot do multiple things at the same time!")) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS in_use = TRUE if(forge_temperature < MIN_FORGE_TEMP) fail_message(user, "The temperature is not hot enough to start heating [blowing_item].") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS var/obj/item/glassblowing/molten_glass/find_glass = locate() in blowing_item.contents if(!find_glass) fail_message(user, "[blowing_item] does not have any glass to heat up.") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(!COOLDOWN_FINISHED(find_glass, remaining_heat)) fail_message(user, "[find_glass] is still has remaining heat.") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS to_chat(user, span_notice("You begin heating up [blowing_item].")) if(!do_after(user, glassblowing_speed, target = src)) fail_message(user, "[blowing_item] is interrupted in its heating process.") - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS COOLDOWN_START(find_glass, remaining_heat, glassblowing_amount) find_glass.total_time = glassblowing_amount @@ -891,7 +891,7 @@ user.mind.adjust_experience(/datum/skill/smithing, 5) user.mind.adjust_experience(/datum/skill/production, 10) in_use = FALSE - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/structure/reagent_forge/wrench_act(mob/living/user, obj/item/tool) tool.play_tool_sound(src) diff --git a/modular_nova/modules/reagent_forging/code/forge_clothing.dm b/modular_nova/modules/reagent_forging/code/forge_clothing.dm new file mode 100644 index 00000000000000..a6d5fb77f3a71d --- /dev/null +++ b/modular_nova/modules/reagent_forging/code/forge_clothing.dm @@ -0,0 +1,150 @@ +// Vests +/obj/item/clothing/suit/armor/forging_plate_armor + name = "reagent plate vest" + desc = "An armor vest made of hammered, interlocking plates." + icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_clothing.dmi' + worn_icon = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi' + worn_icon_better_vox = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi' + worn_icon_vox = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi' + worn_icon_teshari = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi' + icon_state = "plate_vest" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + resistance_flags = FIRE_PROOF + obj_flags_nova = ANVIL_REPAIR + armor_type = /datum/armor/armor_forging_plate_armor + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR + +/datum/armor/armor_forging_plate_armor + melee = 40 + bullet = 40 + fire = 50 + wound = 30 + +/obj/item/clothing/suit/armor/forging_plate_armor/Initialize(mapload) + . = ..() + AddComponent(/datum/component/armor_plate, 4) + AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_OCLOTHING) + + allowed += /obj/item/forging/reagent_weapon + +// Gloves +/obj/item/clothing/gloves/forging_plate_gloves + name = "reagent plate gloves" + desc = "A set of leather gloves with protective armor plates connected to the wrists." + icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_clothing.dmi' + worn_icon = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi' + worn_icon_better_vox = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi' + worn_icon_vox = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi' + worn_icon_teshari = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi' + icon_state = "plate_gloves" + resistance_flags = FIRE_PROOF + obj_flags_nova = ANVIL_REPAIR + armor_type = /datum/armor/gloves_forging_plate_gloves + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR + +/datum/armor/gloves_forging_plate_gloves + melee = 40 + bullet = 40 + fire = 50 + wound = 30 + +/obj/item/clothing/gloves/forging_plate_gloves/Initialize(mapload) + . = ..() + AddComponent(/datum/component/armor_plate, 4) + AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_GLOVES) + +// Helmets +/obj/item/clothing/head/helmet/forging_plate_helmet + name = "reagent plate helmet" + desc = "A helmet out of hammered plates with a leather neck guard and chin strap." + icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_clothing.dmi' + worn_icon = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi' + worn_icon_better_vox = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi' + worn_icon_vox = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi' + worn_icon_teshari = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi' + icon_state = "plate_helmet" + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + resistance_flags = FIRE_PROOF + flags_inv = null + obj_flags_nova = ANVIL_REPAIR + armor_type = /datum/armor/helmet_forging_plate_helmet + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR + +/datum/armor/helmet_forging_plate_helmet + melee = 40 + bullet = 40 + fire = 50 + wound = 30 + +/obj/item/clothing/head/helmet/forging_plate_helmet/Initialize(mapload) + . = ..() + AddComponent(/datum/component/armor_plate, 4) + AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_HEAD) + +// Boots +/obj/item/clothing/shoes/forging_plate_boots + name = "reagent plate boots" + desc = "A pair of leather boots with protective armor plates over the shins and toes." + icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_clothing.dmi' + worn_icon = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi' + worn_icon_digi = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_digi.dmi' + worn_icon_better_vox = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi' + worn_icon_vox = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi' + worn_icon_teshari = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi' + icon_state = "plate_boots" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + armor_type = /datum/armor/shoes_forging_plate_boots + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR + resistance_flags = FIRE_PROOF + obj_flags_nova = ANVIL_REPAIR + can_be_tied = FALSE + +/datum/armor/shoes_forging_plate_boots + melee = 20 + bullet = 20 + +/obj/item/clothing/shoes/forging_plate_boots/Initialize(mapload) + . = ..() + AddComponent(/datum/component/armor_plate, 2) + AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_FEET) + +// Misc +/obj/item/clothing/gloves/ring/reagent_clothing + name = "reagent ring" + desc = "A tiny ring, sized to wrap around a finger." + icon_state = "ringsilver" + worn_icon_state = "sring" + inhand_icon_state = null + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR + obj_flags_nova = ANVIL_REPAIR + +/obj/item/clothing/gloves/ring/reagent_clothing/Initialize(mapload) + . = ..() + AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_GLOVES) + +/obj/item/clothing/neck/collar/reagent_clothing + name = "reagent collar" + desc = "A collar that is ready to be worn for certain individuals." + icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi' + worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi' + icon_state = "collar_cyan" + inhand_icon_state = null + body_parts_covered = NECK + slot_flags = ITEM_SLOT_NECK + w_class = WEIGHT_CLASS_SMALL + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR + obj_flags_nova = ANVIL_REPAIR + +/obj/item/clothing/neck/collar/reagent_clothing/Initialize(mapload) + . = ..() + AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_NECK) + +/obj/item/restraints/handcuffs/reagent_clothing + name = "reagent handcuffs" + desc = "A pair of handcuffs that are ready to keep someone captive." + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR + obj_flags_nova = ANVIL_REPAIR + +/obj/item/restraints/handcuffs/reagent_clothing/Initialize(mapload) + . = ..() + AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_HANDCUFFED) diff --git a/modular_skyrat/modules/reagent_forging/code/forge_items.dm b/modular_nova/modules/reagent_forging/code/forge_items.dm similarity index 94% rename from modular_skyrat/modules/reagent_forging/code/forge_items.dm rename to modular_nova/modules/reagent_forging/code/forge_items.dm index 50ffdd078dd77f..0141245f390dfc 100644 --- a/modular_skyrat/modules/reagent_forging/code/forge_items.dm +++ b/modular_nova/modules/reagent_forging/code/forge_items.dm @@ -22,9 +22,9 @@ GLOBAL_LIST_INIT(allowed_forging_materials, list( )) /obj/item/forging - icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_items.dmi' - lefthand_file = 'modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_l.dmi' - righthand_file = 'modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_r.dmi' + icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_items.dmi' + lefthand_file = 'modular_nova/modules/reagent_forging/icons/mob/forge_weapon_l.dmi' + righthand_file = 'modular_nova/modules/reagent_forging/icons/mob/forge_weapon_r.dmi' toolspeed = 1 SECONDS ///whether the item is in use or not var/in_use = FALSE @@ -32,7 +32,7 @@ GLOBAL_LIST_INIT(allowed_forging_materials, list( /obj/item/forging/tongs name = "forging tongs" desc = "A set of tongs specifically crafted for use in forging. A wise man once said 'I lift things up and put them down.'" - icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_items.dmi' + icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_items.dmi' icon_state = "tong_empty" tool_behaviour = TOOL_TONG @@ -175,7 +175,7 @@ GLOBAL_LIST_INIT(allowed_forging_materials, list( /obj/item/forging/incomplete/rail_nail name = "incomplete rail nail" - icon = 'modular_skyrat/modules/ashwalkers/icons/railroad.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/railroad.dmi' icon_state = "hot_nail" average_hits = 10 average_wait = 0.5 SECONDS @@ -183,7 +183,7 @@ GLOBAL_LIST_INIT(allowed_forging_materials, list( /obj/item/forging/incomplete/rail_cart name = "incomplete rail cart" - icon = 'modular_skyrat/modules/ashwalkers/icons/railroad.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/railroad.dmi' icon_state = "hot_cart" spawn_item = /obj/vehicle/ridden/rail_cart @@ -272,7 +272,7 @@ GLOBAL_LIST_INIT(allowed_forging_materials, list( /obj/item/forging/complete/rail_nail name = "rail nail" desc = "A nail, ready to be used with some wood in order to make tracks." - icon = 'modular_skyrat/modules/ashwalkers/icons/railroad.dmi' + icon = 'modular_nova/modules/ashwalkers/icons/railroad.dmi' icon_state = "nail" spawning_item = /obj/item/stack/rail_track/ten @@ -336,6 +336,6 @@ GLOBAL_LIST_INIT(allowed_forging_materials, list( if(length(tool.contents)) user.balloon_alert(user, "tongs are full already!") return FALSE - if(skyrat_obj_flags & ANVIL_REPAIR) + if(obj_flags_nova & ANVIL_REPAIR) forceMove(tool) tool.icon_state = "tong_full" diff --git a/modular_skyrat/modules/reagent_forging/code/forge_recipes.dm b/modular_nova/modules/reagent_forging/code/forge_recipes.dm similarity index 100% rename from modular_skyrat/modules/reagent_forging/code/forge_recipes.dm rename to modular_nova/modules/reagent_forging/code/forge_recipes.dm diff --git a/modular_skyrat/modules/reagent_forging/code/forge_weapons.dm b/modular_nova/modules/reagent_forging/code/forge_weapons.dm similarity index 93% rename from modular_skyrat/modules/reagent_forging/code/forge_weapons.dm rename to modular_nova/modules/reagent_forging/code/forge_weapons.dm index cdc6a96ef00ee3..6546190679da0d 100644 --- a/modular_skyrat/modules/reagent_forging/code/forge_weapons.dm +++ b/modular_nova/modules/reagent_forging/code/forge_weapons.dm @@ -1,10 +1,11 @@ /obj/item/forging/reagent_weapon - icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_items.dmi' - lefthand_file = 'modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_l.dmi' - righthand_file = 'modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_r.dmi' - worn_icon = 'modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_worn.dmi' + icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_items.dmi' + lefthand_file = 'modular_nova/modules/reagent_forging/icons/mob/forge_weapon_l.dmi' + righthand_file = 'modular_nova/modules/reagent_forging/icons/mob/forge_weapon_r.dmi' + worn_icon = 'modular_nova/modules/reagent_forging/icons/mob/forge_weapon_worn.dmi' material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR - skyrat_obj_flags = ANVIL_REPAIR + obj_flags = UNIQUE_RENAME + obj_flags_nova = ANVIL_REPAIR /obj/item/forging/reagent_weapon/Initialize(mapload) . = ..() @@ -167,13 +168,13 @@ /obj/item/shield/buckler/reagent_weapon //Same as a buckler, but metal. name = "reagent plated buckler shield" desc = "A small, round shield best used in tandem with a melee weapon in close-quarters combat." - icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_items.dmi' - worn_icon = 'modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_worn.dmi' + icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_items.dmi' + worn_icon = 'modular_nova/modules/reagent_forging/icons/mob/forge_weapon_worn.dmi' icon_state = "buckler" inhand_icon_state = "buckler" worn_icon_state = "buckler_back" - lefthand_file = 'modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_l.dmi' - righthand_file = 'modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_r.dmi' + lefthand_file = 'modular_nova/modules/reagent_forging/icons/mob/forge_weapon_l.dmi' + righthand_file = 'modular_nova/modules/reagent_forging/icons/mob/forge_weapon_r.dmi' custom_materials = list(/datum/material/iron=HALF_SHEET_MATERIAL_AMOUNT) resistance_flags = FIRE_PROOF block_chance = 30 @@ -181,7 +182,7 @@ max_integrity = 150 //over double that of a wooden one w_class = WEIGHT_CLASS_NORMAL material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_AFFECT_STATISTICS - skyrat_obj_flags = ANVIL_REPAIR + obj_flags_nova = ANVIL_REPAIR shield_break_sound = 'sound/effects/bang.ogg' shield_break_leftover = /obj/item/forging/complete/plate @@ -292,6 +293,8 @@ else playsound(src, 'sound/weapons/parry.ogg', 75, TRUE) owner.visible_message(span_danger("[owner] parries [attack_text] with [src]!")) + var/owner_turf = get_turf(owner) + new block_effect(owner_turf, COLOR_YELLOW) return TRUE return FALSE diff --git a/modular_skyrat/modules/reagent_forging/code/reagent_component.dm b/modular_nova/modules/reagent_forging/code/reagent_component.dm similarity index 97% rename from modular_skyrat/modules/reagent_forging/code/reagent_component.dm rename to modular_nova/modules/reagent_forging/code/reagent_component.dm index 02f93269c94c0c..fcffd58d779d4b 100644 --- a/modular_skyrat/modules/reagent_forging/code/reagent_component.dm +++ b/modular_nova/modules/reagent_forging/code/reagent_component.dm @@ -34,7 +34,7 @@ RegisterSignal(parent_clothing, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) START_PROCESSING(SSdcs, src) -/datum/component/reagent_clothing/Destroy(force, silent) +/datum/component/reagent_clothing/Destroy(force) parent_clothing = null cloth_wearer = null QDEL_NULL(applying_container) @@ -88,7 +88,7 @@ RegisterSignal(parent_weapon, COMSIG_ITEM_ATTACK, PROC_REF(inject_attacked)) RegisterSignal(parent_weapon, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) -/datum/component/reagent_weapon/Destroy(force, silent) +/datum/component/reagent_weapon/Destroy(force) parent_weapon = null return ..() diff --git a/modular_skyrat/modules/reagent_forging/code/smith_skill.dm b/modular_nova/modules/reagent_forging/code/smith_skill.dm similarity index 83% rename from modular_skyrat/modules/reagent_forging/code/smith_skill.dm rename to modular_nova/modules/reagent_forging/code/smith_skill.dm index 1170f957fc0764..e54c8718495c49 100644 --- a/modular_skyrat/modules/reagent_forging/code/smith_skill.dm +++ b/modular_nova/modules/reagent_forging/code/smith_skill.dm @@ -12,7 +12,7 @@ name = "legendary smithy's cloak" desc = "Worn by the most skilled smithies, this legendary cloak is only attainable by knowing every inch of the blacksmith's forge. \ This status symbol represents a being who has forged some of the finest weapons and armors." - icon = 'modular_skyrat/modules/reagent_forging/icons/obj/cloaks.dmi' - worn_icon = 'modular_skyrat/modules/reagent_forging/icons/mob/neck.dmi' + icon = 'modular_nova/modules/reagent_forging/icons/obj/cloaks.dmi' + worn_icon = 'modular_nova/modules/reagent_forging/icons/mob/neck.dmi' icon_state = "smithingcloak" associated_skill_path = /datum/skill/smithing diff --git a/modular_nova/modules/reagent_forging/code/tool_override.dm b/modular_nova/modules/reagent_forging/code/tool_override.dm new file mode 100644 index 00000000000000..4448c27d637211 --- /dev/null +++ b/modular_nova/modules/reagent_forging/code/tool_override.dm @@ -0,0 +1,31 @@ +/// Called on an object when a tool with wrench capabilities is used to left click an object +/atom/proc/billow_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with wrench capabilities is used to right click an object +/atom/proc/billow_act_secondary(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with wrench capabilities is used to left click an object +/atom/proc/tong_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with wrench capabilities is used to right click an object +/atom/proc/tong_act_secondary(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with wrench capabilities is used to left click an object +/atom/proc/hammer_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with wrench capabilities is used to right click an object +/atom/proc/hammer_act_secondary(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with wrench capabilities is used to left click an object +/atom/proc/blowrod_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with wrench capabilities is used to right click an object +/atom/proc/blowrod_act_secondary(mob/living/user, obj/item/tool) + return diff --git a/modular_skyrat/modules/reagent_forging/code/water_basin.dm b/modular_nova/modules/reagent_forging/code/water_basin.dm similarity index 93% rename from modular_skyrat/modules/reagent_forging/code/water_basin.dm rename to modular_nova/modules/reagent_forging/code/water_basin.dm index 63c852d6a5f2ff..8b4318d7f63d4c 100644 --- a/modular_skyrat/modules/reagent_forging/code/water_basin.dm +++ b/modular_nova/modules/reagent_forging/code/water_basin.dm @@ -1,7 +1,7 @@ /obj/structure/reagent_water_basin name = "water basin" desc = "A basin full of water, ready to quench the hot metal." - icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_structures.dmi' + icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_structures.dmi' icon_state = "water_basin" anchored = TRUE density = TRUE @@ -69,14 +69,14 @@ /obj/structure/reagent_water_basin/tong_act(mob/living/user, obj/item/tool) var/obj/item/forging/incomplete/search_incomplete = locate(/obj/item/forging/incomplete) in tool.contents if(!search_incomplete) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS - playsound(src, 'modular_skyrat/modules/reagent_forging/sound/hot_hiss.ogg', 50, TRUE) + playsound(src, 'modular_nova/modules/reagent_forging/sound/hot_hiss.ogg', 50, TRUE) if(search_incomplete?.times_hit < search_incomplete.average_hits) to_chat(user, span_warning("You cool down [search_incomplete], but it wasn't ready yet.")) COOLDOWN_RESET(search_incomplete, heating_remainder) - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS if(search_incomplete?.times_hit >= search_incomplete.average_hits) to_chat(user, span_notice("You cool down [search_incomplete] and it's ready.")) @@ -88,7 +88,7 @@ qdel(search_incomplete) tool.icon_state = "tong_empty" - return TOOL_ACT_TOOLTYPE_SUCCESS + return ITEM_INTERACT_SUCCESS /// Fishing source for fishing out of basins that have been upgraded, contains saltwater fish (lizard fish fall under this too!) /datum/fish_source/water_basin diff --git a/modular_skyrat/modules/reagent_forging/icons/hud/forge_radials.dmi b/modular_nova/modules/reagent_forging/icons/hud/forge_radials.dmi similarity index 100% rename from modular_skyrat/modules/reagent_forging/icons/hud/forge_radials.dmi rename to modular_nova/modules/reagent_forging/icons/hud/forge_radials.dmi diff --git a/modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi b/modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi new file mode 100644 index 00000000000000..bab8703cd0d060 Binary files /dev/null and b/modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi differ diff --git a/modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_digi.dmi b/modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_digi.dmi new file mode 100644 index 00000000000000..b132966dec7ac7 Binary files /dev/null and b/modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_digi.dmi differ diff --git a/modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi b/modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi new file mode 100644 index 00000000000000..5ae74329a15f9d Binary files /dev/null and b/modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi differ diff --git a/modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi b/modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi new file mode 100644 index 00000000000000..4c606e229eaac2 Binary files /dev/null and b/modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi differ diff --git a/modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi b/modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi new file mode 100644 index 00000000000000..3c7d86b79fddc7 Binary files /dev/null and b/modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi differ diff --git a/modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_l.dmi b/modular_nova/modules/reagent_forging/icons/mob/forge_weapon_l.dmi similarity index 100% rename from modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_l.dmi rename to modular_nova/modules/reagent_forging/icons/mob/forge_weapon_l.dmi diff --git a/modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_r.dmi b/modular_nova/modules/reagent_forging/icons/mob/forge_weapon_r.dmi similarity index 100% rename from modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_r.dmi rename to modular_nova/modules/reagent_forging/icons/mob/forge_weapon_r.dmi diff --git a/modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_worn.dmi b/modular_nova/modules/reagent_forging/icons/mob/forge_weapon_worn.dmi similarity index 100% rename from modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_worn.dmi rename to modular_nova/modules/reagent_forging/icons/mob/forge_weapon_worn.dmi diff --git a/modular_skyrat/modules/reagent_forging/icons/mob/neck.dmi b/modular_nova/modules/reagent_forging/icons/mob/neck.dmi similarity index 100% rename from modular_skyrat/modules/reagent_forging/icons/mob/neck.dmi rename to modular_nova/modules/reagent_forging/icons/mob/neck.dmi diff --git a/modular_skyrat/modules/reagent_forging/icons/obj/cloaks.dmi b/modular_nova/modules/reagent_forging/icons/obj/cloaks.dmi similarity index 100% rename from modular_skyrat/modules/reagent_forging/icons/obj/cloaks.dmi rename to modular_nova/modules/reagent_forging/icons/obj/cloaks.dmi diff --git a/modular_nova/modules/reagent_forging/icons/obj/forge_clothing.dmi b/modular_nova/modules/reagent_forging/icons/obj/forge_clothing.dmi new file mode 100644 index 00000000000000..e0453211c4b388 Binary files /dev/null and b/modular_nova/modules/reagent_forging/icons/obj/forge_clothing.dmi differ diff --git a/modular_skyrat/modules/reagent_forging/icons/obj/forge_items.dmi b/modular_nova/modules/reagent_forging/icons/obj/forge_items.dmi similarity index 100% rename from modular_skyrat/modules/reagent_forging/icons/obj/forge_items.dmi rename to modular_nova/modules/reagent_forging/icons/obj/forge_items.dmi diff --git a/modular_skyrat/modules/reagent_forging/icons/obj/forge_structures.dmi b/modular_nova/modules/reagent_forging/icons/obj/forge_structures.dmi similarity index 100% rename from modular_skyrat/modules/reagent_forging/icons/obj/forge_structures.dmi rename to modular_nova/modules/reagent_forging/icons/obj/forge_structures.dmi diff --git a/modular_skyrat/modules/reagent_forging/readme.md b/modular_nova/modules/reagent_forging/readme.md similarity index 100% rename from modular_skyrat/modules/reagent_forging/readme.md rename to modular_nova/modules/reagent_forging/readme.md diff --git a/modular_skyrat/modules/reagent_forging/sound/forge.ogg b/modular_nova/modules/reagent_forging/sound/forge.ogg similarity index 100% rename from modular_skyrat/modules/reagent_forging/sound/forge.ogg rename to modular_nova/modules/reagent_forging/sound/forge.ogg diff --git a/modular_skyrat/modules/reagent_forging/sound/hot_hiss.ogg b/modular_nova/modules/reagent_forging/sound/hot_hiss.ogg similarity index 100% rename from modular_skyrat/modules/reagent_forging/sound/hot_hiss.ogg rename to modular_nova/modules/reagent_forging/sound/hot_hiss.ogg diff --git a/modular_skyrat/modules/records_on_examine/code/record_manifest.dm b/modular_nova/modules/records_on_examine/code/record_manifest.dm similarity index 100% rename from modular_skyrat/modules/records_on_examine/code/record_manifest.dm rename to modular_nova/modules/records_on_examine/code/record_manifest.dm diff --git a/modular_skyrat/modules/records_on_examine/code/record_variables.dm b/modular_nova/modules/records_on_examine/code/record_variables.dm similarity index 100% rename from modular_skyrat/modules/records_on_examine/code/record_variables.dm rename to modular_nova/modules/records_on_examine/code/record_variables.dm diff --git a/modular_skyrat/modules/records_on_examine/code/records_procs.dm b/modular_nova/modules/records_on_examine/code/records_procs.dm similarity index 100% rename from modular_skyrat/modules/records_on_examine/code/records_procs.dm rename to modular_nova/modules/records_on_examine/code/records_procs.dm diff --git a/modular_skyrat/modules/records_on_examine/code/view_exploitables.dm b/modular_nova/modules/records_on_examine/code/view_exploitables.dm similarity index 100% rename from modular_skyrat/modules/records_on_examine/code/view_exploitables.dm rename to modular_nova/modules/records_on_examine/code/view_exploitables.dm diff --git a/modular_skyrat/modules/records_on_examine/readme.md b/modular_nova/modules/records_on_examine/readme.md similarity index 100% rename from modular_skyrat/modules/records_on_examine/readme.md rename to modular_nova/modules/records_on_examine/readme.md diff --git a/modular_skyrat/modules/resleeving/code/research/resleeving_research.dm b/modular_nova/modules/resleeving/code/research/resleeving_research.dm similarity index 91% rename from modular_skyrat/modules/resleeving/code/research/resleeving_research.dm rename to modular_nova/modules/resleeving/code/research/resleeving_research.dm index 4dcd00cc73e9e6..9579341947d2a5 100644 --- a/modular_skyrat/modules/resleeving/code/research/resleeving_research.dm +++ b/modular_nova/modules/resleeving/code/research/resleeving_research.dm @@ -4,7 +4,9 @@ id = "rsd_interface" build_type = PROTOLATHE | AWAY_LATHE departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE - category = list(RND_CATEGORY_EQUIPMENT) + category = list( + RND_CATEGORY_EQUIPMENT, + ) materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 0.5, /datum/material/gold = SHEET_MATERIAL_AMOUNT, diff --git a/modular_skyrat/modules/resleeving/code/rsd_interface.dm b/modular_nova/modules/resleeving/code/rsd_interface.dm similarity index 96% rename from modular_skyrat/modules/resleeving/code/rsd_interface.dm rename to modular_nova/modules/resleeving/code/rsd_interface.dm index 106bb11ea38bc4..38e31ec88f34e9 100644 --- a/modular_skyrat/modules/resleeving/code/rsd_interface.dm +++ b/modular_nova/modules/resleeving/code/rsd_interface.dm @@ -1,7 +1,7 @@ /obj/item/rsd_interface name = "RSD Phylactery" desc = "A small device inserted, typically, into inert brains. As Resonance cannot persist in what's referred to as a 'vacuum', RSDs--much like the brains and CPUs they emulate--employ cerebral white noise as a foundation for Resonance to persist in otherwise dead-quiet containers.." - icon = 'modular_skyrat/modules/aesthetics/implanter/implanter.dmi' + icon = 'modular_nova/modules/aesthetics/implanter/implanter.dmi' icon_state = "implanter1" inhand_icon_state = "syringe_0" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' diff --git a/modular_skyrat/modules/rod-stopper/code/immovable_skyrat.dm b/modular_nova/modules/rod-stopper/code/immovable_nova.dm similarity index 100% rename from modular_skyrat/modules/rod-stopper/code/immovable_skyrat.dm rename to modular_nova/modules/rod-stopper/code/immovable_nova.dm diff --git a/modular_skyrat/modules/rod-stopper/code/rodstopper.dm b/modular_nova/modules/rod-stopper/code/rodstopper.dm similarity index 94% rename from modular_skyrat/modules/rod-stopper/code/rodstopper.dm rename to modular_nova/modules/rod-stopper/code/rodstopper.dm index 3daf59560ae914..fcda0819db35b0 100644 --- a/modular_skyrat/modules/rod-stopper/code/rodstopper.dm +++ b/modular_nova/modules/rod-stopper/code/rodstopper.dm @@ -10,7 +10,7 @@ /obj/machinery/rodstopper name = "rodstopper" desc = "An advanced machine which can halt immovable rods." - icon = 'modular_skyrat/modules/rod-stopper/icons/rodstopper.dmi' + icon = 'modular_nova/modules/rod-stopper/icons/rodstopper.dmi' icon_state = "rodstopper" density = TRUE use_power = NO_POWER_USE diff --git a/modular_skyrat/modules/rod-stopper/icons/rodstopper.dmi b/modular_nova/modules/rod-stopper/icons/rodstopper.dmi similarity index 100% rename from modular_skyrat/modules/rod-stopper/icons/rodstopper.dmi rename to modular_nova/modules/rod-stopper/icons/rodstopper.dmi diff --git a/modular_skyrat/modules/salon/code/barber.dm b/modular_nova/modules/salon/code/barber.dm similarity index 94% rename from modular_skyrat/modules/salon/code/barber.dm rename to modular_nova/modules/salon/code/barber.dm index 66caf0bb28290f..0e6074cb560fd1 100644 --- a/modular_skyrat/modules/salon/code/barber.dm +++ b/modular_nova/modules/salon/code/barber.dm @@ -36,9 +36,9 @@ id_trim = /datum/id_trim/job/barber /obj/structure/closet/secure_closet/barber - name = "Barber's locker" + name = "barber's locker" icon_state = "barber" - icon = 'modular_skyrat/master_files/icons/obj/closet.dmi' + icon = 'modular_nova/master_files/icons/obj/closet.dmi' req_access = list(ACCESS_BARBER) /obj/structure/closet/secure_closet/barber/PopulateContents() @@ -64,5 +64,5 @@ /obj/effect/landmark/start/barber name = "Barber" icon_state = "Barber" - icon = 'modular_skyrat/master_files/icons/mob/landmarks.dmi' + icon = 'modular_nova/master_files/icons/mob/landmarks.dmi' diff --git a/modular_nova/modules/salon/code/barber_chair.dm b/modular_nova/modules/salon/code/barber_chair.dm new file mode 100644 index 00000000000000..d2289dda2e6126 --- /dev/null +++ b/modular_nova/modules/salon/code/barber_chair.dm @@ -0,0 +1,5 @@ +/obj/structure/chair/comfy/barber_chair + name = "barber's chair" + desc = "You sit in this, and your hair shall be cut." + icon = 'modular_nova/modules/salon/icons/chair.dmi' + icon_state = "barber_chair" diff --git a/modular_skyrat/modules/salon/code/barbervend.dm b/modular_nova/modules/salon/code/barbervend.dm similarity index 93% rename from modular_skyrat/modules/salon/code/barbervend.dm rename to modular_nova/modules/salon/code/barbervend.dm index 4d4458cbf1c6a0..bd8580eb2b34e8 100644 --- a/modular_skyrat/modules/salon/code/barbervend.dm +++ b/modular_nova/modules/salon/code/barbervend.dm @@ -1,7 +1,7 @@ /obj/machinery/vending/barbervend name = "Fab-O-Vend" desc = "It would seem it vends dyes, and other stuff to make you pretty." - icon = 'modular_skyrat/modules/salon/icons/vendor.dmi' + icon = 'modular_nova/modules/salon/icons/vendor.dmi' icon_state = "barbervend" product_slogans = "Spread the colour, like butter, onto toast... Onto their hair.; Sometimes, I dream about dyes...; Paint 'em up and call me Mr. Painter.; Look brother, I'm a vendomat, I solve practical problems." product_ads = "Cut 'em all!; To sheds!; Hair be gone!; Prettify!; Beautify!" @@ -12,6 +12,7 @@ /obj/item/reagent_containers/spray/quantum_hair_dye = 3, /obj/item/reagent_containers/spray/baldium = 3, /obj/item/reagent_containers/spray/barbers_aid = 3, + /obj/item/clothing/head/hair_tie = 3, /obj/item/dyespray = 5, /obj/item/hairbrush = 3, /obj/item/hairbrush/comb = 3, diff --git a/modular_nova/modules/salon/code/clothing.dm b/modular_nova/modules/salon/code/clothing.dm new file mode 100644 index 00000000000000..29582414cecdee --- /dev/null +++ b/modular_nova/modules/salon/code/clothing.dm @@ -0,0 +1,6 @@ +/obj/item/clothing/under/rank/barber + desc = "Stark white pants and a fancy hot-pink shirt with a low neckline, though its preferred to wear it even lower. It's the hottest new trend, darling!" + name = "barber's uniform" + icon = 'modular_nova/master_files/icons/obj/clothing/under/civilian.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/civilian.dmi' + icon_state = "barber" diff --git a/modular_skyrat/modules/salon/code/fur_dyer.dm b/modular_nova/modules/salon/code/fur_dyer.dm similarity index 98% rename from modular_skyrat/modules/salon/code/fur_dyer.dm rename to modular_nova/modules/salon/code/fur_dyer.dm index 6a268d81878621..03aa13358b70a6 100644 --- a/modular_skyrat/modules/salon/code/fur_dyer.dm +++ b/modular_nova/modules/salon/code/fur_dyer.dm @@ -4,7 +4,7 @@ /obj/item/fur_dyer name = "electric fur dyer" desc = "Dye that is capable of recoloring fur in a mostly permanent way." - icon = 'modular_skyrat/modules/salon/icons/items.dmi' + icon = 'modular_nova/modules/salon/icons/items.dmi' icon_state = "fur_sprayer" w_class = WEIGHT_CLASS_TINY diff --git a/modular_nova/modules/salon/code/hair_tie.dm b/modular_nova/modules/salon/code/hair_tie.dm new file mode 100644 index 00000000000000..c4b6d855c6d82f --- /dev/null +++ b/modular_nova/modules/salon/code/hair_tie.dm @@ -0,0 +1,149 @@ +/obj/item/clothing/head/hair_tie + name = "hair tie" + desc = "An elastic hair tie, made to hold your hair up!" + icon = 'modular_nova/modules/salon/icons/items.dmi' + icon_state = "hairtie" + worn_icon = 'modular_nova/modules/salon/icons/items.dmi' + worn_icon_state = "hair_tie_worn_no_icon" + lefthand_file = 'modular_nova/modules/salon/icons/items.dmi' + righthand_file = 'modular_nova/modules/salon/icons/items.dmi' + inhand_icon_state = "hair_tie_worn_no_icon" + w_class = WEIGHT_CLASS_TINY + custom_price = PAYCHECK_CREW * 0.2 + ///string which set_hairstyle() will read + var/picked_hairstyle + ///storage for the original hairstyle string + var/actual_hairstyle + ///which projectile object to use as flicked hair tie + var/projectile_to_fire = /obj/projectile/bullet/hair_tie + ///how long the do_after takes to flick the hair tie + var/fire_speed = 3 SECONDS + ///how big is the randomized aim radius when flicked + var/projectile_aim_radius = 30 + +/obj/item/clothing/head/hair_tie/scrunchie + name = "scrunchie" + desc = "An elastic hair tie, its fabric is velvet soft." + icon_state = "hairtie_scrunchie" + +/obj/item/clothing/head/hair_tie/plastic_beads + name = "colorful hair tie" + desc = "An elastic hair tie, adornished with colorful plastic beads." + icon_state = "hairtie_beads" + custom_materials = (list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT)) + +/obj/item/clothing/head/hair_tie/syndicate + name = "\improper Syndicate hair tie" + desc = "An elastic hair tie with a metal clip, brandishing the logo of the Syndicate." + icon_state = "hairtie_syndie" + fire_speed = 1.5 SECONDS + projectile_to_fire = /obj/projectile/bullet/hair_tie/syndicate + projectile_aim_radius = 0 //accurate aim + +/obj/item/clothing/head/hair_tie/examine(mob/user) + . = ..() + if(picked_hairstyle) + . += span_notice("Wearing it will change your hairstyle to '[picked_hairstyle]'.") + . += span_notice("<b>Use in hand</b> to pick a new hairstyle.") + . += span_notice("<b>Alt-click</b> [src] to fling it.") + +/obj/item/clothing/head/hair_tie/mob_can_equip(mob/living/carbon/human/user, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action) + if(user.hairstyle == "Bald") //could create a list of the bald hairstyles to check + return FALSE + return ..() + +/obj/item/clothing/head/hair_tie/attack_self(mob/user) + var/hair_id = tgui_input_list(user, "How does your hair look when its up?", "Pick!", GLOB.hairstyles_list) + if(!hair_id || hair_id == "Bald") + balloon_alert(user, "error!") + return + balloon_alert(user, "[hair_id]") + picked_hairstyle = hair_id + +/obj/item/clothing/head/hair_tie/equipped(mob/living/carbon/human/user, slot) + . = ..() + if(!ishuman(user) || !(slot_flags & slot)) + return + if(!picked_hairstyle) + return + user.visible_message( + span_notice("[user.name] ties up [user.p_their()] hair."), + span_notice("You tie up your hair!"), + ) + actual_hairstyle = user.hairstyle + user.set_hairstyle(picked_hairstyle, update = TRUE) + +/obj/item/clothing/head/hair_tie/dropped(mob/living/carbon/human/user) + . = ..() + if(!ishuman(user)) + return + if(!picked_hairstyle || !actual_hairstyle) + return + user.visible_message( + span_notice("[user.name] takes [src] out of [user.p_their()] hair."), + span_notice("You let down your hair!"), + ) + user.set_hairstyle(actual_hairstyle, update = TRUE) + actual_hairstyle = null + +/obj/item/clothing/head/hair_tie/AltClick(mob/living/user) + . = ..() + if(!(user.get_slot_by_item(src) == ITEM_SLOT_HANDS)) + balloon_alert(user, "hold in-hand!") + return + user.visible_message( + span_danger("[user.name] puts [src] around [user.p_their()] fingers, beginning to flick it!"), + span_notice("You try to flick [src]!"), + ) + flick_hair_tie(user) + +///This proc flicks the hair tie out of the player's hand, tripping the target hit for 1 second +/obj/item/clothing/head/hair_tie/proc/flick_hair_tie(mob/living/user) + if(!do_after(user, fire_speed, src)) + return + //build the projectile + var/obj/projectile/bullet/hair_tie/proj = new projectile_to_fire (drop_location()) + //clone some vars + proj.name = name + proj.icon_state = icon_state + //add projectile_drop + proj.AddElement(/datum/element/projectile_drop, type) + //aim and fire + proj.firer = user + proj.fired_from = user + proj.fire((dir2angle(user.dir) + rand(-projectile_aim_radius, projectile_aim_radius))) + playsound(src, 'sound/weapons/effects/batreflect.ogg', 25, TRUE) + //get rid of what we just launched to let projectile_drop spawn a new one + qdel(src) + +/obj/projectile/bullet/hair_tie + icon = 'modular_nova/modules/salon/icons/items.dmi' + icon_state = "hairtie" + hitsound = 'sound/weapons/genhit.ogg' + damage = 0 //its just about the knockdown + sharpness = NONE + shrapnel_type = NONE //no embedding pls + impact_effect_type = null + ricochet_chance = 0 + range = 7 + knockdown = 1 SECONDS + +/obj/projectile/bullet/hair_tie/syndicate + damage = 10 //getting hit with this one fucking sucks + stamina = 30 + eyeblur = 2 SECONDS + jitter = 8 SECONDS + +/datum/design/plastic_hair_tie + name = "Plastic Hair Tie" + id = "plastic_hair_tie" + build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE | COLONY_FABRICATOR + materials = list( + /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/clothing/head/hair_tie/plastic_beads + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE, + ) + departmental_flags = DEPARTMENT_BITFLAG_SERVICE diff --git a/modular_skyrat/modules/salon/code/hand_dryer.dm b/modular_nova/modules/salon/code/hand_dryer.dm similarity index 83% rename from modular_skyrat/modules/salon/code/hand_dryer.dm rename to modular_nova/modules/salon/code/hand_dryer.dm index 196b271c6b92ba..bf7904dd2af7ce 100644 --- a/modular_skyrat/modules/salon/code/hand_dryer.dm +++ b/modular_nova/modules/salon/code/hand_dryer.dm @@ -1,7 +1,7 @@ /obj/machinery/dryer name = "hand dryer" desc = "The Breath Of Lizards-3000, an experimental dryer." - icon = 'modular_skyrat/modules/salon/icons/dryer.dmi' + icon = 'modular_nova/modules/salon/icons/dryer.dmi' icon_state = "dryer" density = FALSE anchored = TRUE @@ -19,7 +19,7 @@ return to_chat(user, span_notice("You start drying your hands.")) - playsound(src, 'modular_skyrat/modules/salon/sound/drying.ogg', 50) + playsound(src, 'modular_nova/modules/salon/sound/drying.ogg', 50) add_fingerprint(user) busy = TRUE if(do_after(user, 4 SECONDS, src)) diff --git a/modular_nova/modules/salon/code/misc_items.dm b/modular_nova/modules/salon/code/misc_items.dm new file mode 100644 index 00000000000000..41c56096cb905f --- /dev/null +++ b/modular_nova/modules/salon/code/misc_items.dm @@ -0,0 +1,194 @@ + +/obj/item/storage/box/lipsticks + name = "lipstick box" + +/obj/item/storage/box/lipsticks/PopulateContents() + ..() + new /obj/item/lipstick(src) + new /obj/item/lipstick/purple(src) + new /obj/item/lipstick/jade(src) + new /obj/item/lipstick/black(src) + +/obj/item/lipstick/quantum + name = "quantum lipstick" + +/obj/item/lipstick/quantum/attack(mob/attacked_mob, mob/user) + if(!open || !ismob(attacked_mob)) + return + + if(!ishuman(attacked_mob)) + to_chat(user, span_warning("Where are the lips on that?")) + return + + INVOKE_ASYNC(src, PROC_REF(async_set_color), attacked_mob, user) + +/obj/item/lipstick/quantum/proc/async_set_color(mob/attacked_mob, mob/user) + var/new_color = input( + user, + "Select lipstick color", + null, + COLOR_WHITE, + ) as color | null + + var/mob/living/carbon/human/target = attacked_mob + if(target.is_mouth_covered()) + to_chat(user, span_warning("Remove [ target == user ? "your" : "[target.p_their()]" ] mask!")) + return + if(target.lip_style) //if they already have lipstick on + to_chat(user, span_warning("You need to wipe off the old lipstick first!")) + return + + if(target == user) + user.visible_message(span_notice("[user] does [user.p_their()] lips with \the [src]."), \ + span_notice("You take a moment to apply \the [src]. Perfect!")) + target.update_lips("lipstick", new_color, lipstick_trait) + return + + user.visible_message(span_warning("[user] begins to do [target]'s lips with \the [src]."), \ + span_notice("You begin to apply \the [src] on [target]'s lips...")) + if(!do_after(user, 2 SECONDS, target = target)) + return + user.visible_message(span_notice("[user] does [target]'s lips with \the [src]."), \ + span_notice("You apply \the [src] on [target]'s lips.")) + target.update_lips("lipstick", new_color, lipstick_trait) + +/obj/item/hairbrush/comb + name = "comb" + desc = "A rather simple tool, used to straighten out hair and knots in it." + icon = 'modular_nova/modules/salon/icons/items.dmi' + icon_state = "blackcomb" + +/obj/item/hairstyle_preview_magazine + name = "hip hairstyles magazine" + desc = "A magazine featuring a magnitude of hairsytles!" + +/obj/item/hairstyle_preview_magazine/ui_interact(mob/user, datum/tgui/ui) + . = ..() + // A simple GUI with a list of hairstyles and a view, so people can choose a hairstyle! + +/obj/effect/decal/cleanable/hair + name = "hair cuttings" + icon = 'modular_nova/modules/salon/icons/items.dmi' + icon_state = "cut_hair" + +/obj/item/razor + name = "electric razor" + desc = "The latest and greatest power razor born from the science of shaving." + icon = 'modular_nova/modules/salon/icons/items.dmi' + icon_state = "razor" + obj_flags = CONDUCTS_ELECTRICITY + w_class = WEIGHT_CLASS_TINY + // How long do we take to shave someone's (facial) hair? + var/shaving_time = 5 SECONDS + +/obj/item/razor/suicide_act(mob/living/carbon/user) + user.visible_message(span_suicide("[user] begins shaving [user.p_them()]self without the razor guard! It looks like [user.p_theyre()] trying to commit suicide!")) + shave(user, BODY_ZONE_PRECISE_MOUTH) + shave(user, BODY_ZONE_HEAD)//doesnt need to be BODY_ZONE_HEAD specifically, but whatever + return BRUTELOSS + +/obj/item/razor/proc/shave(mob/living/carbon/human/target_human, location = BODY_ZONE_PRECISE_MOUTH) + if(location == BODY_ZONE_PRECISE_MOUTH) + target_human.set_facial_hairstyle("Shaved", update = TRUE) + else + target_human.set_hairstyle("Bald", update = TRUE) + + playsound(loc, 'sound/items/unsheath.ogg', 20, TRUE) + + +/obj/item/razor/attack(mob/attacked_mob, mob/living/user) + if(!ishuman(attacked_mob)) + return ..() + + var/mob/living/carbon/human/target_human = attacked_mob + var/location = user.zone_selected + var/obj/item/bodypart/head/noggin = target_human.get_bodypart(BODY_ZONE_HEAD) + var/static/list/head_zones = list(BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_HEAD) + + if(!noggin && (location in head_zones)) + to_chat(user, span_warning("[target_human] doesn't have a head!")) + return + + if(!(location in head_zones) && !user.combat_mode) + to_chat(user, span_warning("You stop, look down at what you're currently holding and ponder to yourself, \"This is probably to be used on their hair or their facial hair.\"")) + return + + if(location == BODY_ZONE_PRECISE_MOUTH) + if(!(noggin.head_flags & HEAD_FACIAL_HAIR)) + to_chat(user, span_warning("There is no facial hair to shave!")) + return + + if(!get_location_accessible(target_human, location)) + to_chat(user, span_warning("The mask is in the way!")) + return + + if(HAS_TRAIT(target_human, TRAIT_SHAVED)) + to_chat(user, span_warning("[target_human] is just way too shaved. Like, really really shaved.")) + return + + if(target_human.facial_hairstyle == "Shaved") + to_chat(user, span_warning("Already clean-shaven!")) + return + + var/self_shaving = target_human == user // Shaving yourself? + user.visible_message(span_notice("[user] starts to shave [self_shaving ? user.p_their() : "[target_human]'s"] hair with [src]."), \ + span_notice("You take a moment to shave [self_shaving ? "your" : "[target_human]'s" ] hair with [src]...")) + + if(do_after(user, shaving_time, target = target_human)) + user.visible_message(span_notice("[user] shaves [self_shaving ? user.p_their() : "[target_human]'s"] hair clean with [src]."), \ + span_notice("You finish shaving [self_shaving ? "your" : " [target_human]'s"] hair with [src]. Fast and clean!")) + + shave(target_human, location) + + else if(location == BODY_ZONE_HEAD) + if(!(noggin.head_flags & HEAD_HAIR)) + to_chat(user, span_warning("There is no hair to shave!")) + return + + if(!get_location_accessible(target_human, location)) + to_chat(user, span_warning("The headgear is in the way!")) + return + + if(target_human.hairstyle == "Bald" || target_human.hairstyle == "Balding Hair" || target_human.hairstyle == "Skinhead") + to_chat(user, span_warning("There is not enough hair left to shave!")) + return + + if(HAS_TRAIT(target_human, TRAIT_SHAVED)) + to_chat(user, span_warning("[target_human] is just way too shaved. Like, really really shaved.")) + return + + var/self_shaving = target_human == user // Shaving yourself? + user.visible_message(span_notice("[user] starts to shave [self_shaving ? user.p_their() : "[target_human]'s"] hair with [src]."), \ + span_notice("You take a moment to shave [self_shaving ? "your" : "[target_human]'s" ] hair with [src]...")) + + if(do_after(user, shaving_time, target = target_human)) + user.visible_message(span_notice("[user] shaves [self_shaving ? user.p_their() : "[target_human]'s"] hair clean with [src]."), \ + span_notice("You finish shaving [self_shaving ? "your" : " [target_human]'s"] hair with [src]. Fast and clean!")) + + shave(target_human, location) + + return + + return ..() + +/obj/structure/sign/barber + name = "barbershop sign" + desc = "A glowing red-blue-white stripe you won't mistake for any other!" + icon = 'modular_nova/modules/salon/icons/items.dmi' + icon_state = "barber" + buildable_sign = FALSE // Don't want them removed, they look too jank. + +/obj/item/storage/box/perfume + name = "box of perfumes" + +/obj/item/storage/box/perfume/PopulateContents() + new /obj/item/perfume/cologne(src) + new /obj/item/perfume/wood(src) + new /obj/item/perfume/rose(src) + new /obj/item/perfume/jasmine(src) + new /obj/item/perfume/mint(src) + new /obj/item/perfume/vanilla(src) + new /obj/item/perfume/pear(src) + new /obj/item/perfume/strawberry(src) + new /obj/item/perfume/cherry(src) + new /obj/item/perfume/amber(src) diff --git a/modular_skyrat/modules/salon/code/pipette.dm b/modular_nova/modules/salon/code/pipette.dm similarity index 84% rename from modular_skyrat/modules/salon/code/pipette.dm rename to modular_nova/modules/salon/code/pipette.dm index 84b27f480b60ed..97cdab2713e601 100644 --- a/modular_skyrat/modules/salon/code/pipette.dm +++ b/modular_nova/modules/salon/code/pipette.dm @@ -1,7 +1,7 @@ /obj/item/reagent_containers/dropper/precision name = "pipette" desc = "A high precision pippette. Holds 1 unit." - icon = 'modular_skyrat/modules/salon/icons/items.dmi' + icon = 'modular_nova/modules/salon/icons/items.dmi' icon_state = "pipette1" amount_per_transfer_from_this = 1 possible_transfer_amounts = list(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1) diff --git a/modular_skyrat/modules/salon/code/scissors.dm b/modular_nova/modules/salon/code/scissors.dm similarity index 93% rename from modular_skyrat/modules/salon/code/scissors.dm rename to modular_nova/modules/salon/code/scissors.dm index fa3dea70c4f4e1..2fe0995550a3c9 100644 --- a/modular_skyrat/modules/salon/code/scissors.dm +++ b/modular_nova/modules/salon/code/scissors.dm @@ -1,7 +1,7 @@ /obj/item/scissors name = "barber's scissors" desc = "Some say a barbers best tool is his electric razor, that is not the case. These are used to cut hair in a professional way!" - icon = 'modular_skyrat/modules/salon/icons/items.dmi' + icon = 'modular_nova/modules/salon/icons/items.dmi' icon_state = "scissors" w_class = WEIGHT_CLASS_TINY sharpness = SHARP_EDGED @@ -47,7 +47,7 @@ to_chat(user, span_notice("You begin to masterfully sculpt [target_human]'s hair!")) - playsound(target_human, 'modular_skyrat/modules/salon/sound/haircut.ogg', 100) + playsound(target_human, 'modular_nova/modules/salon/sound/haircut.ogg', 100) if(do_after(user, haircut_duration, target_human)) target_human.set_hairstyle(hair_id, update = TRUE) @@ -67,7 +67,7 @@ to_chat(user, "You begin to masterfully sculpt [target_human]'s facial hair!") - playsound(target_human, 'modular_skyrat/modules/salon/sound/haircut.ogg', 100) + playsound(target_human, 'modular_nova/modules/salon/sound/haircut.ogg', 100) if(do_after(user, facial_haircut_duration, target_human)) target_human.set_facial_hairstyle(facial_hair_id, update = TRUE) diff --git a/modular_skyrat/modules/salon/code/sprays.dm b/modular_nova/modules/salon/code/sprays.dm similarity index 85% rename from modular_skyrat/modules/salon/code/sprays.dm rename to modular_nova/modules/salon/code/sprays.dm index 8563d3041a8a1c..32600d2c2f38b8 100644 --- a/modular_skyrat/modules/salon/code/sprays.dm +++ b/modular_nova/modules/salon/code/sprays.dm @@ -1,7 +1,7 @@ /obj/item/reagent_containers/spray/quantum_hair_dye name = "quantum hair dye" desc = "Changes hair colour RANDOMLY! Don't forget to read the label!" - icon = 'modular_skyrat/modules/salon/icons/items.dmi' + icon = 'modular_nova/modules/salon/icons/items.dmi' icon_state = "hairspraywhite" amount_per_transfer_from_this = 1 possible_transfer_amounts = list(1, 5) @@ -11,7 +11,7 @@ /obj/item/reagent_containers/spray/baldium name = "baldium spray" desc = "Causes baldness, exessive use may cause customer disatisfaction." - icon = 'modular_skyrat/modules/salon/icons/items.dmi' + icon = 'modular_nova/modules/salon/icons/items.dmi' icon_state = "hairremoval" amount_per_transfer_from_this = 1 possible_transfer_amounts = list(1, 5) @@ -21,7 +21,7 @@ /obj/item/reagent_containers/spray/barbers_aid name = "barber's aid" desc = "Causes rapid hair and facial hair growth!" - icon = 'modular_skyrat/modules/salon/icons/items.dmi' + icon = 'modular_nova/modules/salon/icons/items.dmi' icon_state = "hairaccelerator" amount_per_transfer_from_this = 1 possible_transfer_amounts = list(1, 5) @@ -31,7 +31,7 @@ /obj/item/reagent_containers/spray/super_barbers_aid name = "super barber's aid" desc = "Causes SUPER rapid hair and facial hair growth!" - icon = 'modular_skyrat/modules/salon/icons/items.dmi' + icon = 'modular_nova/modules/salon/icons/items.dmi' icon_state = "hairaccelerator" amount_per_transfer_from_this = 1 possible_transfer_amounts = list(1, 5) diff --git a/modular_skyrat/modules/salon/code/straight_razor.dm b/modular_nova/modules/salon/code/straight_razor.dm similarity index 97% rename from modular_skyrat/modules/salon/code/straight_razor.dm rename to modular_nova/modules/salon/code/straight_razor.dm index e6e85f7e160992..3d9f5cf0439cfe 100644 --- a/modular_skyrat/modules/salon/code/straight_razor.dm +++ b/modular_nova/modules/salon/code/straight_razor.dm @@ -1,7 +1,7 @@ /obj/item/straight_razor name = "straight razor" desc = "A very sharp blade, mostly used for shaving faces..." - icon = 'modular_skyrat/modules/salon/icons/items.dmi' + icon = 'modular_nova/modules/salon/icons/items.dmi' icon_state = "straight_razor" force = 12 throw_speed = 3 diff --git a/modular_skyrat/modules/salon/icons/chair.dmi b/modular_nova/modules/salon/icons/chair.dmi similarity index 100% rename from modular_skyrat/modules/salon/icons/chair.dmi rename to modular_nova/modules/salon/icons/chair.dmi diff --git a/modular_skyrat/modules/salon/icons/dryer.dmi b/modular_nova/modules/salon/icons/dryer.dmi similarity index 100% rename from modular_skyrat/modules/salon/icons/dryer.dmi rename to modular_nova/modules/salon/icons/dryer.dmi diff --git a/modular_nova/modules/salon/icons/items.dmi b/modular_nova/modules/salon/icons/items.dmi new file mode 100644 index 00000000000000..908f28fdc6f6cf Binary files /dev/null and b/modular_nova/modules/salon/icons/items.dmi differ diff --git a/modular_skyrat/modules/salon/icons/mixer.dmi b/modular_nova/modules/salon/icons/mixer.dmi similarity index 100% rename from modular_skyrat/modules/salon/icons/mixer.dmi rename to modular_nova/modules/salon/icons/mixer.dmi diff --git a/modular_skyrat/modules/salon/icons/vendor.dmi b/modular_nova/modules/salon/icons/vendor.dmi similarity index 100% rename from modular_skyrat/modules/salon/icons/vendor.dmi rename to modular_nova/modules/salon/icons/vendor.dmi diff --git a/modular_skyrat/modules/salon/sound/drying.ogg b/modular_nova/modules/salon/sound/drying.ogg similarity index 100% rename from modular_skyrat/modules/salon/sound/drying.ogg rename to modular_nova/modules/salon/sound/drying.ogg diff --git a/modular_skyrat/modules/salon/sound/haircut.ogg b/modular_nova/modules/salon/sound/haircut.ogg similarity index 100% rename from modular_skyrat/modules/salon/sound/haircut.ogg rename to modular_nova/modules/salon/sound/haircut.ogg diff --git a/modular_skyrat/modules/science_tools/medical_tool_designs.dm b/modular_nova/modules/science_tools/medical_tool_designs.dm similarity index 100% rename from modular_skyrat/modules/science_tools/medical_tool_designs.dm rename to modular_nova/modules/science_tools/medical_tool_designs.dm diff --git a/modular_nova/modules/science_tools/readme.md b/modular_nova/modules/science_tools/readme.md new file mode 100644 index 00000000000000..2086981660a8b8 --- /dev/null +++ b/modular_nova/modules/science_tools/readme.md @@ -0,0 +1,44 @@ +<!-- This should be copy-pasted into the root of your module folder as readme.md --> + +https://github.com/Skyrat-SS13/Skyrat-tg/pull/24162 + +## Science tools <!--Title of your addition.--> + +Module ID: SCIENCE_TOOLS <!-- Uppercase, UNDERSCORE_CONNECTED name of your module, that you use to mark files. This is so people can case-sensitive search for your edits, if any. --> + +### Description: Lets sci print watered down engi tools, and robotics, medical tools. + +<!-- Here, try to describe what your PR does, what features it provides and any other directly useful information. --> + +### TG Proc/File Changes: + +- N/A +<!-- If you edited any core procs, you should list them here. You should specify the files and procs you changed. +E.g: +- `code/modules/mob/living.dm`: `proc/overriden_proc`, `var/overriden_var` +--> + +### Modular Overrides: + +- N/A +<!-- If you added a new modular override (file or code-wise) for your module, you should list it here. Code files should specify what procs they changed, in case of multiple modules using the same file. +E.g: +- `modular_nova/master_files/sound/my_cool_sound.ogg` +- `modular_nova/master_files/code/my_modular_override.dm`: `proc/overriden_proc`, `var/overriden_var` +--> + +### Defines: + +- 2 defines in research.dm +<!-- If you needed to add any defines, mention the files you added those defines in, along with the name of the defines. --> + +### Included files that are not contained in this module: + +- ~nova_defines/research.dm +<!-- Likewise, be it a non-modular file or a modular one that's not contained within the folder belonging to this specific module, it should be mentioned here. Good examples are icons or sounds that are used between multiple modules, or other such edge-cases. --> + +### Credits: + +- Niko: Author + +<!-- Here go the credits to you, dear coder, and in case of collaborative work or ports, credits to the original source of the code. --> diff --git a/modular_skyrat/modules/science_tools/research.dm b/modular_nova/modules/science_tools/research.dm similarity index 100% rename from modular_skyrat/modules/science_tools/research.dm rename to modular_nova/modules/science_tools/research.dm diff --git a/modular_skyrat/modules/science_tools/tool_designs.dm b/modular_nova/modules/science_tools/tool_designs.dm similarity index 100% rename from modular_skyrat/modules/science_tools/tool_designs.dm rename to modular_nova/modules/science_tools/tool_designs.dm diff --git a/modular_skyrat/modules/science_tools/tools.dm b/modular_nova/modules/science_tools/tools.dm similarity index 100% rename from modular_skyrat/modules/science_tools/tools.dm rename to modular_nova/modules/science_tools/tools.dm diff --git a/modular_skyrat/modules/sec_haul/code/corrections_officer/corrections_officer.dm b/modular_nova/modules/sec_haul/code/corrections_officer/corrections_officer.dm similarity index 100% rename from modular_skyrat/modules/sec_haul/code/corrections_officer/corrections_officer.dm rename to modular_nova/modules/sec_haul/code/corrections_officer/corrections_officer.dm diff --git a/modular_skyrat/modules/sec_haul/code/corrections_officer/corrections_officer_equipment.dm b/modular_nova/modules/sec_haul/code/corrections_officer/corrections_officer_equipment.dm similarity index 84% rename from modular_skyrat/modules/sec_haul/code/corrections_officer/corrections_officer_equipment.dm rename to modular_nova/modules/sec_haul/code/corrections_officer/corrections_officer_equipment.dm index 848c487ff572ec..33295b8da93dcd 100644 --- a/modular_skyrat/modules/sec_haul/code/corrections_officer/corrections_officer_equipment.dm +++ b/modular_nova/modules/sec_haul/code/corrections_officer/corrections_officer_equipment.dm @@ -1,8 +1,8 @@ /obj/item/clothing/under/rank/security/corrections_officer desc = "A white satin shirt with some bronze rank pins at the neck." name = "corrections officer's suit" - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi' icon_state = "corrections_officer" armor_type = /datum/armor/clothing_under/security_corrections_officer can_adjust = FALSE @@ -34,8 +34,8 @@ /obj/item/clothing/suit/toggle/jacket/corrections_officer name = "corrections officer's suit jacket" desc = "A pressed and ironed suit jacket, it has light armor against stabbings. There's some rank badges on the right breast." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' icon_state = "co_coat" body_parts_covered = CHEST|ARMS armor_type = /datum/armor/jacket_corrections_officer @@ -49,9 +49,9 @@ /obj/structure/closet/secure_closet/corrections_officer name = "corrections officer riot gear" - icon = 'modular_skyrat/master_files/icons/obj/closet.dmi' + icon = 'modular_nova/master_files/icons/obj/closet.dmi' icon_state = "riot" - door_anim_time = 0 //CONVERT THESE DOORS YOU LAZY ASSHATS + door_anim_time = 0 //Somebody resprite or remove this 'riot' locker. It's evil. /obj/structure/closet/secure_closet/corrections_officer/PopulateContents() ..() diff --git a/modular_nova/modules/sec_haul/code/corrections_officer/landmarks.dm b/modular_nova/modules/sec_haul/code/corrections_officer/landmarks.dm new file mode 100644 index 00000000000000..c3363ae49c0480 --- /dev/null +++ b/modular_nova/modules/sec_haul/code/corrections_officer/landmarks.dm @@ -0,0 +1,4 @@ +/obj/effect/landmark/start/corrections_officer + name = "Corrections Officer" + icon = 'modular_nova/master_files/icons/mob/landmarks.dmi' + icon_state = "Corrections Officer" diff --git a/modular_skyrat/modules/sec_haul/code/guns/ammo.dm b/modular_nova/modules/sec_haul/code/guns/ammo.dm similarity index 100% rename from modular_skyrat/modules/sec_haul/code/guns/ammo.dm rename to modular_nova/modules/sec_haul/code/guns/ammo.dm diff --git a/modular_skyrat/modules/sec_haul/code/guns/armory_spawns.dm b/modular_nova/modules/sec_haul/code/guns/armory_spawns.dm similarity index 82% rename from modular_skyrat/modules/sec_haul/code/guns/armory_spawns.dm rename to modular_nova/modules/sec_haul/code/guns/armory_spawns.dm index 517aeded62dfc5..2dd13b95c8a04b 100644 --- a/modular_skyrat/modules/sec_haul/code/guns/armory_spawns.dm +++ b/modular_nova/modules/sec_haul/code/guns/armory_spawns.dm @@ -6,7 +6,7 @@ /// A list of possible guns to spawn. var/list/guns /// Do we fan out the items spawned for a natural effect? - var/fan_out_items = TRUE + var/fan_out_items = FALSE /// How many mags per gun do we spawn, if it takes magazines. var/mags_to_spawn = 3 /// Do we want to angle it so that it is horizontal? @@ -17,15 +17,18 @@ . = ..() if(guns) - var/current_offset = -10 + var/gun_count = 0 var/offset_percent = 20 / guns.len for(var/gun in guns) // 11/20/21: Gun spawners now spawn 1 of each gun in it's list no matter what, so as to reduce the RNG of the armory stock. var/obj/item/gun/spawned_gun = new gun(loc) if(vertical_guns) spawned_gun.place_on_rack() - spawned_gun.pixel_x = current_offset - current_offset += offset_percent + spawned_gun.pixel_x = -10 + (offset_percent * gun_count) + else if (fan_out_items) + spawned_gun.pixel_x = spawned_gun.pixel_y = ((!(gun_count%2)*gun_count/2)*-1)+((gun_count%2)*(gun_count+1)/2*1) + + gun_count++ if(istype(spawned_gun, /obj/item/gun/ballistic)) var/obj/item/gun/ballistic/spawned_ballistic_gun = spawned_gun @@ -55,7 +58,7 @@ /obj/item/storage/box/ammo_box name = "ammo box" desc = "A box filled with ammunition." - icon = 'modular_skyrat/modules/microfusion/icons/microfusion_cells.dmi' + icon = 'modular_nova/modules/microfusion/icons/microfusion_cells.dmi' icon_state = "microfusion_box" illustration = null layer = 2.9 @@ -86,7 +89,7 @@ /obj/effect/spawner/armory_spawn/smg vertical_guns = FALSE guns = list( - /obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/sindano, - /obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/sindano, - /obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/sindano, + /obj/item/storage/toolbox/guncase/nova/carwo_large_case/sindano, + /obj/item/storage/toolbox/guncase/nova/carwo_large_case/sindano, + /obj/item/storage/toolbox/guncase/nova/carwo_large_case/sindano, ) diff --git a/modular_skyrat/modules/sec_haul/code/guns/bullets.dm b/modular_nova/modules/sec_haul/code/guns/bullets.dm similarity index 100% rename from modular_skyrat/modules/sec_haul/code/guns/bullets.dm rename to modular_nova/modules/sec_haul/code/guns/bullets.dm diff --git a/modular_nova/modules/sec_haul/code/guns/cargo_stuff.dm b/modular_nova/modules/sec_haul/code/guns/cargo_stuff.dm new file mode 100644 index 00000000000000..2d220bf9a20dba --- /dev/null +++ b/modular_nova/modules/sec_haul/code/guns/cargo_stuff.dm @@ -0,0 +1,10 @@ +/datum/supply_pack/security/armory/cmg + name = "Carwo 'Sindano' Submachinegun Crate" + desc = "Three entirely proprietary Sindano kits, chambered in .35 Sol Short. Each kit contains three empty magazines and a box each of incapacitator and lethal rounds." + cost = CARGO_CRATE_VALUE * 20 + contains = list( + /obj/item/storage/toolbox/guncase/nova/carwo_large_case/sindano, + /obj/item/storage/toolbox/guncase/nova/carwo_large_case/sindano, + /obj/item/storage/toolbox/guncase/nova/carwo_large_case/sindano, + ) + crate_name = "Carwo 'Sindano' Submachinegun Crate" diff --git a/modular_skyrat/modules/sec_haul/code/misc/ai_module.dm b/modular_nova/modules/sec_haul/code/misc/ai_module.dm similarity index 100% rename from modular_skyrat/modules/sec_haul/code/misc/ai_module.dm rename to modular_nova/modules/sec_haul/code/misc/ai_module.dm diff --git a/modular_skyrat/modules/sec_haul/code/misc/bullet_drive.dm b/modular_nova/modules/sec_haul/code/misc/bullet_drive.dm similarity index 96% rename from modular_skyrat/modules/sec_haul/code/misc/bullet_drive.dm rename to modular_nova/modules/sec_haul/code/misc/bullet_drive.dm index 7abf5585e086b3..acfd712fb555d2 100644 --- a/modular_skyrat/modules/sec_haul/code/misc/bullet_drive.dm +++ b/modular_nova/modules/sec_haul/code/misc/bullet_drive.dm @@ -1,7 +1,7 @@ /obj/machinery/dish_drive/bullet name = "bullet drive" desc = "A modified verison of the dish drive, for security. Because they're lazy." - icon = 'modular_skyrat/modules/sec_haul/icons/misc/bulletdrive.dmi' + icon = 'modular_nova/modules/sec_haul/icons/misc/bulletdrive.dmi' icon_state = "synthesizer" density = TRUE circuit = /obj/item/circuitboard/machine/dish_drive/bullet @@ -25,7 +25,7 @@ if(manual) visible_message(span_notice("[src] is empty!")) return - var/obj/machinery/disposal/bin/bin = locate() in view(binrange, src) //SKYRAT EDIT CHANGE + var/obj/machinery/disposal/bin/bin = locate() in view(binrange, src) //NOVA EDIT CHANGE if(!bin) if(manual) visible_message(span_warning("[src] buzzes. There are no disposal bins in range!")) diff --git a/modular_nova/modules/sec_haul/code/misc/decals.dm b/modular_nova/modules/sec_haul/code/misc/decals.dm new file mode 100644 index 00000000000000..c95187639fa898 --- /dev/null +++ b/modular_nova/modules/sec_haul/code/misc/decals.dm @@ -0,0 +1,47 @@ +/obj/effect/turf_decal/stripes/blue + icon_state = "warningline_blue" + icon = 'modular_nova/modules/sec_haul/icons/misc/turf_decals.dmi' + +/obj/effect/turf_decal/stripes/blue/line + icon_state = "warningline_blue" + +/obj/effect/turf_decal/stripes/blue/end + icon_state = "warn_end_blue" + +/obj/effect/turf_decal/stripes/blue/corner + icon_state = "warninglinecorner_blue" + +/obj/effect/turf_decal/stripes/blue/box + icon_state = "warn_box_blue" + +/obj/effect/turf_decal/stripes/blue/full + icon_state = "warn_full_blue" + +/obj/effect/turf_decal/bot_blue + icon = 'modular_nova/modules/sec_haul/icons/misc/turf_decals.dmi' + icon_state = "bot_blue" + +/obj/effect/turf_decal/caution/stand_clear/blue + icon = 'modular_nova/modules/sec_haul/icons/misc/turf_decals.dmi' + icon_state = "stand_clear_blue" + +/obj/effect/turf_decal/arrows/blue + icon = 'modular_nova/modules/sec_haul/icons/misc/turf_decals.dmi' + icon_state = "arrows_blue" + +/obj/effect/turf_decal/box/blue + icon = 'modular_nova/modules/sec_haul/icons/misc/turf_decals.dmi' + icon_state = "box_blue" + +/obj/effect/turf_decal/box/blue/corners + icon = 'modular_nova/modules/sec_haul/icons/misc/turf_decals.dmi' + icon_state = "box_corners_blue" + + +/obj/effect/turf_decal/delivery/blue + icon = 'modular_nova/modules/sec_haul/icons/misc/turf_decals.dmi' + icon_state = "delivery_blue" + +/obj/effect/turf_decal/caution/blue + icon = 'modular_nova/modules/sec_haul/icons/misc/turf_decals.dmi' + icon_state = "caution_blue" diff --git a/modular_nova/modules/sec_haul/code/misc/packs.dm b/modular_nova/modules/sec_haul/code/misc/packs.dm new file mode 100644 index 00000000000000..d44a4a42901af8 --- /dev/null +++ b/modular_nova/modules/sec_haul/code/misc/packs.dm @@ -0,0 +1,17 @@ +/datum/supply_pack/vending/sectech + name = "Peacekeeper Equipment Supply Crate" + desc = "Armadyne branded Peacekeeper supply crate, filled with things you need to restock the equipment vendor." + crate_name = "Peacekeeper equipment supply crate" + +/datum/supply_pack/vending/wardrobes/security + name = "Peacekeeper Wardrobe Supply Crate" + desc = "This crate contains refills for the Peacekeeper Outfitting Station, DetDrobe, and LawDrobe." + +/datum/supply_pack/vending/wardrobes/command + name = "Command Wardrobe Supply Crate" + desc = "This crate contains refills for the Command Outfitting Station." + cost = CARGO_CRATE_VALUE * 3 + contains = list( + /obj/item/vending_refill/wardrobe/comm_wardrobe, + ) + crate_name = "Commandrobe Resupply Crate" diff --git a/modular_nova/modules/sec_haul/code/misc/vending.dm b/modular_nova/modules/sec_haul/code/misc/vending.dm new file mode 100644 index 00000000000000..c095290a11602b --- /dev/null +++ b/modular_nova/modules/sec_haul/code/misc/vending.dm @@ -0,0 +1,99 @@ +/obj/machinery/vending/security + name = "\improper Armadyne Peacekeeper Equipment Vendor" + desc = "An Armadyne peacekeeper equipment vendor." + product_ads = "Crack capitalist skulls!;Beat some heads in!;Don't forget - harm is good!;Your weapons are right here.;Handcuffs!;Freeze, scumbag!;Don't tase me bro!;Tase them, bro.;Why not have a donut?" + icon = 'modular_nova/modules/sec_haul/icons/vending/vending.dmi' + products = list( + /obj/item/restraints/handcuffs = 8, + /obj/item/restraints/handcuffs/cable/zipties = 12, + /obj/item/grenade/flashbang = 6, + /obj/item/assembly/flash/handheld = 8, + /obj/item/food/donut/plain = 12, + /obj/item/storage/box/evidence = 6, + /obj/item/flashlight/seclite = 6, + /obj/item/restraints/legcuffs/bola/energy = 10, + /obj/item/clothing/gloves/tackler/security = 5, + ) + contraband = list( + /obj/item/clothing/glasses/sunglasses = 2, + /obj/item/storage/fancy/donut_box = 2, + ) + premium = list( + /obj/item/storage/belt/security/webbing = 5, + /obj/item/storage/belt/security/webbing/peacekeeper = 5, + /obj/item/coin/antagtoken = 1, + /obj/item/clothing/head/helmet/blueshirt = 3, + /obj/item/clothing/suit/armor/vest/blueshirt = 3, + /obj/item/grenade/stingbang = 5, + /obj/item/watertank/pepperspray = 2, + /obj/item/storage/belt/holster/energy = 4, + /obj/item/storage/box/holobadge = 1, + ) + +/obj/item/vending_refill/security + machine_name = "Armadyne Peacekeeper Equipment Vendor" + +/obj/machinery/vending/wardrobe/sec_wardrobe + name = "\improper Peacekeeper Outfitting Station" + desc = "A vending machine stocked with Lopland's \"Peacekeeper\" security package, including standardized uniforms and general equipment." + icon = 'modular_nova/modules/sec_haul/icons/vending/vending.dmi' + light_mask = "sec-light-mask" + icon_state = "peace" + product_ads = "Beat perps in style!;The stains wash right out!;You have the right to be fashionable!;Now you can be the fashion police you always wanted to be!" + vend_reply = "Good luck, Peacekeeper!" + products = list(/obj/item/clothing/suit/hooded/wintercoat/security = 5, + /obj/item/clothing/suit/toggle/jacket/sec = 5, + /obj/item/clothing/suit/armor/vest/peacekeeper/brit = 5, + /obj/item/clothing/neck/security_cape = 5, + /obj/item/clothing/neck/security_cape/armplate = 5, + /obj/item/storage/backpack/security = 5, + /obj/item/storage/backpack/satchel/sec = 5, + /obj/item/storage/backpack/duffelbag/sec = 5, + /obj/item/storage/backpack/duffelbag/sec = 5, + /obj/item/clothing/under/rank/security/officer = 10, + /obj/item/clothing/under/rank/security/officer/skirt = 10, + /obj/item/clothing/under/rank/security/peacekeeper = 10, + /obj/item/clothing/under/rank/security/nova/utility = 3, + /obj/item/clothing/shoes/jackboots/sec = 10, + /obj/item/clothing/head/security_garrison = 10, + /obj/item/clothing/head/security_cap = 10, + /obj/item/clothing/head/beret/sec/peacekeeper = 5, + /obj/item/clothing/head/helmet/sec/sol = 5, + /obj/item/clothing/head/hats/warden/police/patrol = 5, + /obj/item/clothing/head/costume/ushanka/sec = 10, + /obj/item/clothing/gloves/color/black/security = 10, + ) + premium = list( /obj/item/clothing/under/rank/security/officer/formal = 3, + /obj/item/clothing/suit/jacket/officer/blue = 3, + /obj/item/clothing/head/beret/sec/navyofficer = 3) + payment_department = ACCOUNT_SEC + light_color = COLOR_MODERATE_BLUE + +/obj/item/vending_refill/wardrobe/sec_wardrobe + machine_name = "Peacekeeper Outfitting Station" + +//List for the old one, for when its mapped in; curates it nicely, adds /redsec to the items, and also prevents some conflicts with the above vendor +/obj/machinery/vending/wardrobe/sec_wardrobe/red + name = "\improper SecDrobe" + desc = "A vending machine for security and security-related clothing!" + product_ads = "Beat perps in style!;It's red so you can't see the blood!;You have the right to be fashionable!;Now you can be the fashion police you always wanted to be!" + vend_reply = "Thank you for using the SecDrobe!" + icon = 'icons/obj/machines/vending.dmi' + icon_state = "secdrobe" + products = list(/obj/item/clothing/suit/hooded/wintercoat/security/redsec = 3, + /obj/item/storage/backpack/security/redsec = 3, + /obj/item/storage/backpack/satchel/sec/redsec = 3, + /obj/item/storage/backpack/duffelbag/sec/redsec = 3, + /obj/item/clothing/under/rank/security/officer/redsec = 3, + /obj/item/clothing/shoes/jackboots = 3, + /obj/item/clothing/head/beret/sec = 3, + /obj/item/clothing/head/soft/sec = 3, + /obj/item/clothing/mask/bandana/red = 3, + /obj/item/clothing/gloves/color/black = 3, + /obj/item/clothing/under/rank/security/officer/skirt = 3, + /obj/item/clothing/under/rank/security/nova/utility/redsec = 3, + /obj/item/clothing/suit/toggle/jacket/sec/old = 3, + ) + premium = list( /obj/item/clothing/under/rank/security/officer/formal = 5, + /obj/item/clothing/suit/jacket/officer/tan = 5, + /obj/item/clothing/head/beret/sec/navyofficer = 5) diff --git a/modular_skyrat/modules/sec_haul/code/peacekeeper/armadyne_clothing.dm b/modular_nova/modules/sec_haul/code/peacekeeper/armadyne_clothing.dm similarity index 79% rename from modular_skyrat/modules/sec_haul/code/peacekeeper/armadyne_clothing.dm rename to modular_nova/modules/sec_haul/code/peacekeeper/armadyne_clothing.dm index 40110bc3820fb5..1feb386856372c 100644 --- a/modular_skyrat/modules/sec_haul/code/peacekeeper/armadyne_clothing.dm +++ b/modular_nova/modules/sec_haul/code/peacekeeper/armadyne_clothing.dm @@ -3,8 +3,8 @@ desc = "A sleek uniform worn by Armadyne corporate. Its metallic red belt buckle is made in the shape of the Armadyne logo." icon_state = "armadyne_shirt" worn_icon_state = "armadyne_shirt" - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/centcom.dmi' //This can probably be moved to centcom.dm when the suits are sorted - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/centcom.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/under/centcom.dmi' //This can probably be moved to centcom.dm when the suits are sorted + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/centcom.dmi' /obj/item/clothing/under/rank/security/peacekeeper/armadyne/tactical name = "armadyne tactical uniform" @@ -24,16 +24,16 @@ /obj/item/clothing/suit/armor/hos/trenchcoat/armadyne name = "armadyne trenchcoat" desc = "A large and warm Armadyne-red trenchcoat worn by the wealthy higher-ups. A good half of its warmth - and bulk - actually comes from the polymer armor plating beneath it." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' icon_state = "armadyne_trench" current_skin = "armadyne_trench" //prevents reskinning /obj/item/clothing/suit/armor/vest/peacekeeper/armadyne name = "armadyne jacket" desc = "An Armadyne branded track jacket, with a thin nanocarbon lining inside for protective purposes. Worn by Armadyne corporate, or wealthy supporters." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' icon_state = "armadyne_jacket" worn_icon_state = "armadyne_jacket" supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON @@ -51,15 +51,15 @@ /obj/item/clothing/glasses/hud/security/sunglasses/peacekeeper/armadyne name = "armadyne hud glasses" icon_state = "armadyne_glasses" - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi' - icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi' uses_advanced_reskins = FALSE /obj/item/clothing/gloves/combat/peacekeeper/armadyne name = "armadyne combat gloves" desc = "Tactical and sleek. Worn by Armadyne representatives." - icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi' icon_state = "armadyne_gloves" worn_icon_state = "armadyne_gloves" cut_type = null @@ -67,8 +67,8 @@ /obj/item/clothing/shoes/jackboots/peacekeeper/armadyne name = "armadyne combat boots" desc = "Tactical and sleek. Worn by Armadyne representatives." - icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi' icon_state = "armadyne_boots" inhand_icon_state = "jackboots" worn_icon_state = "armadyne_boots" @@ -77,21 +77,21 @@ /obj/item/storage/belt/security/webbing/peacekeeper/armadyne name = "armadyne webbing" desc = "Unique and versatile chest rig, can hold security gear." - icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' icon_state = "armadyne_webbing" worn_icon_state = "armadyne_webbing" /obj/item/storage/belt/security/peacekeeper/armadyne name = "armadyne belt" desc = "Can hold security gear like handcuffs and flashes. Has a holster for a gun." - icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' icon_state = "armadyne_belt" worn_icon_state = "armadyne_belt" /datum/outfit/armadyne_rep - name = "Armadyne Corporate Representative" + name = "Armadyne Conglomeration Representative" suit_store = /obj/item/modular_computer/pda/security ears = /obj/item/radio/headset/headset_cent/commander @@ -106,7 +106,7 @@ r_pocket = /obj/item/assembly/flash/handheld backpack_contents = list( /obj/item/melee/baton/telescopic, - /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/skild, + /obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/skild, ) back = /obj/item/storage/backpack/satchel/leather box = /obj/item/storage/box/survival/security @@ -115,7 +115,7 @@ /datum/outfit/armadyne_security - name = "Armadyne Corporate Security" + name = "Armadyne Conglomeration Security" ears = /obj/item/radio/headset/headset_sec/alt uniform = /obj/item/clothing/under/rank/security/peacekeeper/armadyne/tactical @@ -127,7 +127,7 @@ suit_store = /obj/item/gun/ballistic/automatic/sol_smg shoes = /obj/item/clothing/shoes/jackboots/peacekeeper/armadyne backpack_contents = list( - /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/wespe, + /obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/wespe, /obj/item/storage/box/handcuffs, /obj/item/ammo_box/magazine/c35sol_pistol/stendo, /obj/item/modular_computer/pda/security, @@ -138,7 +138,7 @@ /datum/outfit/armadyne_security/commander - name = "Armadyne Corporate Security Commander" + name = "Armadyne Conglomeration Security Commander" ears = /obj/item/radio/headset/headset_sec/alt uniform = /obj/item/clothing/under/rank/security/peacekeeper/armadyne/tactical @@ -151,7 +151,7 @@ shoes = /obj/item/clothing/shoes/jackboots/peacekeeper/armadyne belt = /obj/item/storage/belt/security/webbing/peacekeeper/armadyne backpack_contents = list( - /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/wespe, + /obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/wespe, /obj/item/storage/box/handcuffs, /obj/item/ammo_box/magazine/c40sol_rifle/standard, /obj/item/modular_computer/pda/security, @@ -163,23 +163,23 @@ /datum/outfit/armadyne_security/high_alert - name = "Armadyne Corporate Security (High Alert)" + name = "Armadyne Conglomeration Security (High Alert)" belt = /obj/item/storage/belt/security/webbing/peacekeeper/armadyne suit_store = /obj/item/gun/ballistic/automatic/sol_rifle backpack_contents = list( /obj/item/melee/baton/telescopic, - /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/wespe, + /obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/wespe, /obj/item/storage/box/handcuffs, /obj/item/ammo_box/magazine/c40sol_rifle/standard = 2, ) /datum/outfit/armadyne_security/commander/high_alert - name = "Armadyne Corporate Security Commander (High Alert)" + name = "Armadyne Conglomeration Security Commander (High Alert)" suit_store = /obj/item/gun/ballistic/automatic/sol_rifle backpack_contents = list( /obj/item/melee/baton/telescopic, - /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/skild, + /obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/skild, /obj/item/storage/box/handcuffs, /obj/item/ammo_box/magazine/c40sol_rifle/standard = 2, ) @@ -194,7 +194,7 @@ wildcard_slots = WILDCARD_LIMIT_CENTCOM /datum/id_trim/centcom/armadyne - assignment = "Armadyne Corporate" + assignment = "Armadyne Conglomeration " trim_state = "trim_ert_commander" /datum/id_trim/centcom/armadyne/New() @@ -206,14 +206,14 @@ trim = /datum/id_trim/centcom/armadyne/security /datum/id_trim/centcom/armadyne/security - assignment = "Armadyne Corporate Security Detail" + assignment = "Armadyne Conglomeration Security Detail" trim_state = "trim_ert_commander" /obj/item/card/id/advanced/armadyne/agent trim = /datum/id_trim/centcom/armadyne/agent /datum/id_trim/centcom/armadyne/agent - assignment = "Armadyne Corporate Directorate" + assignment = "Armadyne Conglomeration Directorate" trim_state = "trim_ert_commander" /datum/outfit/armadyne_rep/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) @@ -227,26 +227,26 @@ ..() /obj/item/card/id/armadyne/corpo/security - assignment = "Armadyne Corporate Security" + assignment = "Armadyne Conglomeration Security" /datum/antagonist/ert/armadyne - name = "Armadyne Corporate Security" + name = "Armadyne Conglomeration Security" outfit = /datum/outfit/armadyne_security role = "Security" /datum/antagonist/ert/armadyne/high_alert - name = "Armadyne Corporate Security (High Alert)" + name = "Armadyne Conglomeration Security (High Alert)" outfit = /datum/outfit/armadyne_security/high_alert role = "Security" /datum/antagonist/ert/armadyne/leader - name = "Armadyne Corporate Security Commander" + name = "Armadyne Conglomeration Security Commander" outfit = /datum/outfit/armadyne_security/commander role = "Commander" /datum/antagonist/ert/armadyne/leader/high_alert - name = "Armadyne Corporate Security Commander (High Alert)" + name = "Armadyne Conglomeration Security Commander (High Alert)" outfit = /datum/outfit/armadyne_security/commander/high_alert role = "Commander" diff --git a/modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_clothing.dm b/modular_nova/modules/sec_haul/code/peacekeeper/peacekeeper_clothing.dm similarity index 76% rename from modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_clothing.dm rename to modular_nova/modules/sec_haul/code/peacekeeper/peacekeeper_clothing.dm index 68467bfb1bf568..9a153d53f87b1c 100644 --- a/modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_clothing.dm +++ b/modular_nova/modules/sec_haul/code/peacekeeper/peacekeeper_clothing.dm @@ -34,8 +34,8 @@ /obj/item/clothing/head/helmet/sec/sol name = "sol police helmet" desc = "A helmet to protect any officer from bludgeoning attacks, or the occasional bullet." - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/helmet.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/helmet.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/head/helmet.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/helmet.dmi' icon_state = "security_helmet_novisor" base_icon_state = "security_helmet_novisor" actions_types = NONE @@ -45,24 +45,30 @@ /obj/item/clothing/head/hats/warden/police/patrol name = "police patrol cap" desc = "A dark colored hat with a silver badge, for the officer interested in style." - icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi' icon_state = "policeofficerpatrolcap" supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON armor_type = /datum/armor/head_helmet + unique_reskin = list( + "Blue" = "policeofficercap", + "Sillitoe" = "policetrafficcap", + "Black" = "policeofficerpatrolcap", + "Cadet" = "policecadetcap", + ) /obj/item/clothing/glasses/hud/security/sunglasses/peacekeeper name = "peacekeeper hud glasses" icon_state = "peacekeeperglasses" - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi' - icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi' //PEACEKEEPER UNIFORM /obj/item/clothing/under/rank/security/peacekeeper name = "peacekeeper uniform" desc = "A sleek peacekeeper uniform, made to a price." - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi' icon_state = "peacekeeper" can_adjust = TRUE sensor_mode = SENSOR_COORDS @@ -71,27 +77,27 @@ /obj/item/clothing/under/rank/security/warden/peacekeeper name = "peacekeeper wardens suit" desc = "A formal security suit for officers complete with Armadyne belt buckle." - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi' icon_state = "peacekeeper_warden" /obj/item/clothing/under/rank/security/warden - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi' /obj/item/clothing/under/rank/security/head_of_security/peacekeeper name = "head of security's peacekeeper jumpsuit" desc = "A security jumpsuit decorated for those few with the dedication to achieve the position of Head of Security." - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi' icon_state = "peacekeeper_hos" //PEACEKEEPER ARMOR /obj/item/clothing/suit/armor/vest/peacekeeper name = "peacekeeper armor vest" desc = "A standard issue peacekeeper armor vest, versatile, lightweight, and most importantly, cheap." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi' icon_state = "peacekeeper_white" supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON @@ -101,8 +107,8 @@ /obj/item/clothing/suit/armor/vest/peacekeeper/brit name = "high vis armored vest" desc = "Oi bruv, you got a loicence for that?" - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' icon_state = "hazardbg" worn_icon_state = "hazardbg" @@ -113,8 +119,8 @@ /obj/item/clothing/suit/armor/vest/peacekeeper/spacecoat name = "peacekeeper sleek coat" desc = "An incredibly stylish and heavy black coat made of synthetic kangaroo leather, padded with durathread and lined with kevlar." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' icon_state = "peacekeeper_spacecoat" worn_icon_state = "peacekeeper_spacecoat" supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON @@ -123,8 +129,8 @@ /obj/item/clothing/gloves/combat/peacekeeper name = "peacekeeper gloves" desc = "These tactical gloves are fireproof." - icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi' icon_state = "peacekeeper_gloves" worn_icon_state = "peacekeeper" siemens_coefficient = 0.5 @@ -140,23 +146,23 @@ /obj/item/clothing/gloves/tackler/peacekeeper name = "peacekeeper gripper gloves" desc = "Special gloves that manipulate the blood vessels in the wearer's hands, granting them the ability to launch headfirst into walls." - icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi' icon_state = "peacekeeper_gripper_gloves" /obj/item/clothing/gloves/krav_maga/sec/peacekeeper name = "peacekeeper krav maga gloves" desc = "These gloves can teach you to perform Krav Maga using nanochips." - icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi' icon_state = "peacekeeper_gripper_gloves" //PEACEKEEPER BELTS /obj/item/storage/belt/security/peacekeeper name = "peacekeeper belt" desc = "This belt can hold security gear like handcuffs and flashes. It has a holster for a gun." - icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' icon_state = "peacekeeperbelt" worn_icon_state = "peacekeeperbelt" content_overlays = FALSE @@ -197,8 +203,8 @@ /obj/item/storage/belt/security/webbing/peacekeeper name = "peacekeeper webbing" desc = "A tactical chest rig issued to peacekeepers; slow is smooth, smooth is fast. Has a notable lack of a holster that fits energy-based weapons." - icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' icon_state = "peacekeeper_webbing" worn_icon_state = "peacekeeper_webbing" content_overlays = FALSE @@ -234,6 +240,6 @@ /obj/item/clothing/shoes/jackboots/peacekeeper name = "peacekeeper boots" desc = "High speed, low drag combat boots." - icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' + icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi' icon_state = "peacekeeper" diff --git a/modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_hammer.dm b/modular_nova/modules/sec_haul/code/peacekeeper/peacekeeper_hammer.dm similarity index 93% rename from modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_hammer.dm rename to modular_nova/modules/sec_haul/code/peacekeeper/peacekeeper_hammer.dm index 37bf649b7fd5d6..790877478dc8b0 100644 --- a/modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_hammer.dm +++ b/modular_nova/modules/sec_haul/code/peacekeeper/peacekeeper_hammer.dm @@ -1,12 +1,12 @@ /obj/item/melee/breaching_hammer name = "D-4 tactical hammer" desc = "A metallic-plastic composite breaching hammer, looks like a whack with this would severly harm or tire someone." - icon = 'modular_skyrat/modules/sec_haul/icons/peacekeeper/peacekeeper_items.dmi' + icon = 'modular_nova/modules/sec_haul/icons/peacekeeper/peacekeeper_items.dmi' icon_state = "peacekeeper_hammer" inhand_icon_state = "peacekeeper_hammer" worn_icon_state = "classic_baton" - lefthand_file = 'modular_skyrat/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_righthand.dmi' + lefthand_file = 'modular_nova/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_lefthand.dmi' + righthand_file = 'modular_nova/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_righthand.dmi' slot_flags = ITEM_SLOT_BELT force = 15 throwforce = 10 diff --git a/modular_nova/modules/sec_haul/code/peacekeeper/peacekeeper_lockers.dm b/modular_nova/modules/sec_haul/code/peacekeeper/peacekeeper_lockers.dm new file mode 100644 index 00000000000000..97f5345b0d7ce7 --- /dev/null +++ b/modular_nova/modules/sec_haul/code/peacekeeper/peacekeeper_lockers.dm @@ -0,0 +1,8 @@ +/obj/structure/closet/secure_closet/security + icon = 'modular_nova/master_files/icons/obj/closet.dmi' + +/obj/structure/closet/secure_closet/warden + icon = 'modular_nova/master_files/icons/obj/closet.dmi' + +/obj/structure/closet/secure_closet/hos + icon = 'modular_nova/master_files/icons/obj/closet.dmi' diff --git a/modular_skyrat/modules/sec_haul/icons/misc/bulletbot.dmi b/modular_nova/modules/sec_haul/icons/misc/bulletbot.dmi similarity index 100% rename from modular_skyrat/modules/sec_haul/icons/misc/bulletbot.dmi rename to modular_nova/modules/sec_haul/icons/misc/bulletbot.dmi diff --git a/modular_skyrat/modules/sec_haul/icons/misc/bulletdrive.dmi b/modular_nova/modules/sec_haul/icons/misc/bulletdrive.dmi similarity index 100% rename from modular_skyrat/modules/sec_haul/icons/misc/bulletdrive.dmi rename to modular_nova/modules/sec_haul/icons/misc/bulletdrive.dmi diff --git a/modular_skyrat/modules/sec_haul/icons/misc/turf_decals.dmi b/modular_nova/modules/sec_haul/icons/misc/turf_decals.dmi similarity index 100% rename from modular_skyrat/modules/sec_haul/icons/misc/turf_decals.dmi rename to modular_nova/modules/sec_haul/icons/misc/turf_decals.dmi diff --git a/modular_skyrat/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_lefthand.dmi b/modular_nova/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_lefthand.dmi similarity index 100% rename from modular_skyrat/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_lefthand.dmi rename to modular_nova/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_lefthand.dmi diff --git a/modular_skyrat/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_righthand.dmi b/modular_nova/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_righthand.dmi similarity index 100% rename from modular_skyrat/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_righthand.dmi rename to modular_nova/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_righthand.dmi diff --git a/modular_skyrat/modules/sec_haul/icons/peacekeeper/peacekeeper_items.dmi b/modular_nova/modules/sec_haul/icons/peacekeeper/peacekeeper_items.dmi similarity index 100% rename from modular_skyrat/modules/sec_haul/icons/peacekeeper/peacekeeper_items.dmi rename to modular_nova/modules/sec_haul/icons/peacekeeper/peacekeeper_items.dmi diff --git a/modular_skyrat/modules/sec_haul/icons/vending/vending.dmi b/modular_nova/modules/sec_haul/icons/vending/vending.dmi similarity index 100% rename from modular_skyrat/modules/sec_haul/icons/vending/vending.dmi rename to modular_nova/modules/sec_haul/icons/vending/vending.dmi diff --git a/modular_nova/modules/sec_haul/readme.md b/modular_nova/modules/sec_haul/readme.md new file mode 100644 index 00000000000000..c29d1c9946b680 --- /dev/null +++ b/modular_nova/modules/sec_haul/readme.md @@ -0,0 +1,32 @@ +## Title: Security overhaul + +MODULE ID: MODULAR_WEAPONS + +### Description: + +Completely overhauls security to something that will hopefully fit us. + +### TG Proc Changes: + +- See: https://github.com/Skyrat-SS13/Skyrat-tg/pull/2860 + +### Defines: + +- See: https://github.com/Skyrat-SS13/Skyrat-tg/pull/2860 + +### Master file additions + +- `modular_nova/master_files/code/modules/cargo/packs/vending_restock.dm`: `var/special` +- `modular_nova/master_files/code/modules/cargo/packs/security.dm`: `var/special`, `var/cost` + +### Included files that are not contained in this module: + +- See: https://github.com/Skyrat-SS13/Skyrat-tg/pull/2860 + + +### Credits: +Code: Gandalf2k15 +Sprite modification: Gandalf2k15 +Uniforms and equipment sprites: JungleRat +Gun sprites: Eris and Sojourn +de-goofsec'd guns: ErdinyoBarboza diff --git a/modular_skyrat/modules/sec_haul/sound/automag.ogg b/modular_nova/modules/sec_haul/sound/automag.ogg similarity index 100% rename from modular_skyrat/modules/sec_haul/sound/automag.ogg rename to modular_nova/modules/sec_haul/sound/automag.ogg diff --git a/modular_skyrat/modules/sec_haul/sound/batrifle_fire.ogg b/modular_nova/modules/sec_haul/sound/batrifle_fire.ogg similarity index 100% rename from modular_skyrat/modules/sec_haul/sound/batrifle_fire.ogg rename to modular_nova/modules/sec_haul/sound/batrifle_fire.ogg diff --git a/modular_skyrat/modules/sec_haul/sound/chaingun_close.ogg b/modular_nova/modules/sec_haul/sound/chaingun_close.ogg similarity index 100% rename from modular_skyrat/modules/sec_haul/sound/chaingun_close.ogg rename to modular_nova/modules/sec_haul/sound/chaingun_close.ogg diff --git a/modular_skyrat/modules/sec_haul/sound/chaingun_cock.ogg b/modular_nova/modules/sec_haul/sound/chaingun_cock.ogg similarity index 100% rename from modular_skyrat/modules/sec_haul/sound/chaingun_cock.ogg rename to modular_nova/modules/sec_haul/sound/chaingun_cock.ogg diff --git a/modular_skyrat/modules/sec_haul/sound/chaingun_fire.ogg b/modular_nova/modules/sec_haul/sound/chaingun_fire.ogg similarity index 100% rename from modular_skyrat/modules/sec_haul/sound/chaingun_fire.ogg rename to modular_nova/modules/sec_haul/sound/chaingun_fire.ogg diff --git a/modular_skyrat/modules/sec_haul/sound/chaingun_magin.ogg b/modular_nova/modules/sec_haul/sound/chaingun_magin.ogg similarity index 100% rename from modular_skyrat/modules/sec_haul/sound/chaingun_magin.ogg rename to modular_nova/modules/sec_haul/sound/chaingun_magin.ogg diff --git a/modular_skyrat/modules/sec_haul/sound/chaingun_magout.ogg b/modular_nova/modules/sec_haul/sound/chaingun_magout.ogg similarity index 100% rename from modular_skyrat/modules/sec_haul/sound/chaingun_magout.ogg rename to modular_nova/modules/sec_haul/sound/chaingun_magout.ogg diff --git a/modular_skyrat/modules/sec_haul/sound/chaingun_open.ogg b/modular_nova/modules/sec_haul/sound/chaingun_open.ogg similarity index 100% rename from modular_skyrat/modules/sec_haul/sound/chaingun_open.ogg rename to modular_nova/modules/sec_haul/sound/chaingun_open.ogg diff --git a/modular_skyrat/modules/sec_haul/sound/dp_fire.ogg b/modular_nova/modules/sec_haul/sound/dp_fire.ogg similarity index 100% rename from modular_skyrat/modules/sec_haul/sound/dp_fire.ogg rename to modular_nova/modules/sec_haul/sound/dp_fire.ogg diff --git a/modular_skyrat/modules/sec_haul/sound/holsterin.ogg b/modular_nova/modules/sec_haul/sound/holsterin.ogg similarity index 100% rename from modular_skyrat/modules/sec_haul/sound/holsterin.ogg rename to modular_nova/modules/sec_haul/sound/holsterin.ogg diff --git a/modular_skyrat/modules/sec_haul/sound/holsterout.ogg b/modular_nova/modules/sec_haul/sound/holsterout.ogg similarity index 100% rename from modular_skyrat/modules/sec_haul/sound/holsterout.ogg rename to modular_nova/modules/sec_haul/sound/holsterout.ogg diff --git a/modular_skyrat/modules/sec_haul/sound/hpistol_fire.ogg b/modular_nova/modules/sec_haul/sound/hpistol_fire.ogg similarity index 100% rename from modular_skyrat/modules/sec_haul/sound/hpistol_fire.ogg rename to modular_nova/modules/sec_haul/sound/hpistol_fire.ogg diff --git a/modular_skyrat/modules/sec_haul/sound/lmg_fire.ogg b/modular_nova/modules/sec_haul/sound/lmg_fire.ogg similarity index 100% rename from modular_skyrat/modules/sec_haul/sound/lmg_fire.ogg rename to modular_nova/modules/sec_haul/sound/lmg_fire.ogg diff --git a/modular_skyrat/modules/sec_haul/sound/ltrifle_fire.ogg b/modular_nova/modules/sec_haul/sound/ltrifle_fire.ogg similarity index 100% rename from modular_skyrat/modules/sec_haul/sound/ltrifle_fire.ogg rename to modular_nova/modules/sec_haul/sound/ltrifle_fire.ogg diff --git a/modular_skyrat/modules/sec_haul/sound/pistol_fire.ogg b/modular_nova/modules/sec_haul/sound/pistol_fire.ogg similarity index 100% rename from modular_skyrat/modules/sec_haul/sound/pistol_fire.ogg rename to modular_nova/modules/sec_haul/sound/pistol_fire.ogg diff --git a/modular_skyrat/modules/sec_haul/sound/rail.ogg b/modular_nova/modules/sec_haul/sound/rail.ogg similarity index 100% rename from modular_skyrat/modules/sec_haul/sound/rail.ogg rename to modular_nova/modules/sec_haul/sound/rail.ogg diff --git a/modular_skyrat/modules/sec_haul/sound/revolver_fire.ogg b/modular_nova/modules/sec_haul/sound/revolver_fire.ogg similarity index 100% rename from modular_skyrat/modules/sec_haul/sound/revolver_fire.ogg rename to modular_nova/modules/sec_haul/sound/revolver_fire.ogg diff --git a/modular_skyrat/modules/sec_haul/sound/sfrifle_fire.ogg b/modular_nova/modules/sec_haul/sound/sfrifle_fire.ogg similarity index 100% rename from modular_skyrat/modules/sec_haul/sound/sfrifle_fire.ogg rename to modular_nova/modules/sec_haul/sound/sfrifle_fire.ogg diff --git a/modular_skyrat/modules/sec_haul/sound/shotgun_bm.ogg b/modular_nova/modules/sec_haul/sound/shotgun_bm.ogg similarity index 100% rename from modular_skyrat/modules/sec_haul/sound/shotgun_bm.ogg rename to modular_nova/modules/sec_haul/sound/shotgun_bm.ogg diff --git a/modular_skyrat/modules/sec_haul/sound/smg_fire.ogg b/modular_nova/modules/sec_haul/sound/smg_fire.ogg similarity index 100% rename from modular_skyrat/modules/sec_haul/sound/smg_fire.ogg rename to modular_nova/modules/sec_haul/sound/smg_fire.ogg diff --git a/modular_skyrat/modules/sec_haul/sound/sniper_fire.ogg b/modular_nova/modules/sec_haul/sound/sniper_fire.ogg similarity index 100% rename from modular_skyrat/modules/sec_haul/sound/sniper_fire.ogg rename to modular_nova/modules/sec_haul/sound/sniper_fire.ogg diff --git a/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm b/modular_nova/modules/self_actualization_device/code/self_actualization_device.dm similarity index 97% rename from modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm rename to modular_nova/modules/self_actualization_device/code/self_actualization_device.dm index 08dec35e0de231..35459de053fc2f 100644 --- a/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm +++ b/modular_nova/modules/self_actualization_device/code/self_actualization_device.dm @@ -14,8 +14,8 @@ /obj/machinery/self_actualization_device name = "Self-Actualization Device" - desc = "A state of the art medical device that can restore someone's phyiscal appearence to the last known database backup." - icon = 'modular_skyrat/modules/self_actualization_device/icons/self_actualization_device.dmi' + desc = "A state of the art medical device that can restore someone's physical appearance to the last known database backup." + icon = 'modular_nova/modules/self_actualization_device/icons/self_actualization_device.dmi' icon_state = "sad_open" circuit = /obj/item/circuitboard/machine/self_actualization_device state_open = FALSE @@ -42,7 +42,7 @@ . = ..() . += "With the power of modern neurological scanning and synthflesh cosmetic surgery, the Veymed Corporation \ - has teamed up with Nanotrasen Human Resources (and elsewise) to bring you the Self-Actualization Device! \ + has teamed up with Symphionia Human Resources (and elsewise) to bring you the Self-Actualization Device! \ Ever revived a patient and had them file a malpractice lawsuit because their head got attached to the wrong body? \ Just slap 'em in the SAD and turn it on! Their frown will turn upside down as they're reconstituted as their ideal self \ via the magic technology of brain scanning! Within a few short moments, they'll be popped out as their ideal self, \ diff --git a/modular_skyrat/modules/self_actualization_device/icons/self_actualization_device.dmi b/modular_nova/modules/self_actualization_device/icons/self_actualization_device.dmi similarity index 100% rename from modular_skyrat/modules/self_actualization_device/icons/self_actualization_device.dmi rename to modular_nova/modules/self_actualization_device/icons/self_actualization_device.dmi diff --git a/modular_skyrat/modules/server_overflow/code/chat_link.dm b/modular_nova/modules/server_overflow/code/chat_link.dm similarity index 98% rename from modular_skyrat/modules/server_overflow/code/chat_link.dm rename to modular_nova/modules/server_overflow/code/chat_link.dm index 843ec276ac5d84..b77f0a926e7e76 100644 --- a/modular_skyrat/modules/server_overflow/code/chat_link.dm +++ b/modular_nova/modules/server_overflow/code/chat_link.dm @@ -107,5 +107,5 @@ for(var/client/admin_client in GLOB.admins) if(admin_client?.prefs?.toggles & SOUND_ADMINHELP) - SEND_SOUND(admin_client, sound('modular_skyrat/modules/admin/sound/duckhonk.ogg')) + SEND_SOUND(admin_client, sound('modular_nova/modules/admin/sound/duckhonk.ogg')) window_flash(admin_client, ignorepref = TRUE) diff --git a/modular_skyrat/modules/server_overflow/code/client_procs.dm b/modular_nova/modules/server_overflow/code/client_procs.dm similarity index 100% rename from modular_skyrat/modules/server_overflow/code/client_procs.dm rename to modular_nova/modules/server_overflow/code/client_procs.dm diff --git a/modular_skyrat/modules/server_overflow/code/server_connect_panel.dm b/modular_nova/modules/server_overflow/code/server_connect_panel.dm similarity index 100% rename from modular_skyrat/modules/server_overflow/code/server_connect_panel.dm rename to modular_nova/modules/server_overflow/code/server_connect_panel.dm diff --git a/modular_nova/modules/shotgunrebalance/code/ammobox.dm b/modular_nova/modules/shotgunrebalance/code/ammobox.dm new file mode 100644 index 00000000000000..270a152dbdd443 --- /dev/null +++ b/modular_nova/modules/shotgunrebalance/code/ammobox.dm @@ -0,0 +1,85 @@ +/obj/item/ammo_box/advanced/s12gauge + name = "Slug ammo box" + desc = "A box of 15 slug shells. Large, singular shots that pack a punch." + icon = 'modular_nova/modules/shotgunrebalance/icons/shotbox.dmi' + icon_state = "slug" + ammo_type = /obj/item/ammo_casing/shotgun + max_ammo = 15 + multitype = FALSE // if you enable this and set the box's caliber var to CALIBER_SHOTGUN (at time of writing, "shotgun"), then you can have the fabled any-ammo shellbox + +/obj/item/ammo_box/advanced/s12gauge/buckshot + name = "Buckshot ammo box" + desc = "A box of 15 buckshot shells. These have a modest spread of weaker projectiles." + icon_state = "buckshot" + ammo_type = /obj/item/ammo_casing/shotgun/buckshot + max_ammo = 15 + +/obj/item/ammo_box/advanced/s12gauge/rubber + name = "Rubbershot ammo box" + desc = "A box of 15 rubbershot shells. These have a modest spread of weaker, less-lethal projectiles." + icon_state = "rubber" + ammo_type = /obj/item/ammo_casing/shotgun/rubbershot + max_ammo = 15 + +/obj/item/ammo_box/advanced/s12gauge/bean + name = "Beanbag Slug ammo box" + desc = "A box of 15 beanbag slug shells. These are large, singular beanbags that pack a less-lethal punch." + icon_state = "bean" + ammo_type = /obj/item/ammo_casing/shotgun/beanbag + max_ammo = 15 + +/obj/item/ammo_box/advanced/s12gauge/magnum + name = "Magnum blockshot ammo box" + desc = "A box of 15 magnum blockshot shells. The size of the pellet is larger in diameter than the typical shot, but there are less of them inside each shell." + icon_state = "magnum" + ammo_type = /obj/item/ammo_casing/shotgun/magnum + max_ammo = 15 + +/obj/item/ammo_box/advanced/s12gauge/express + name = "Express pelletshot ammo box" + desc = "A box of 15 express pelletshot shells. The size of the pellet is smaller in diameter than the typical shot, but there are more of them inside each shell." + icon_state = "express" + ammo_type = /obj/item/ammo_casing/shotgun/express + max_ammo = 15 + +/obj/item/ammo_box/advanced/s12gauge/hunter + name = "Hunter slug ammo box" + desc = "A box of 15 hunter slug shells. These shotgun slugs excel at damaging the local fauna." + icon_state = "hunter" + ammo_type = /obj/item/ammo_casing/shotgun/hunter + max_ammo = 15 + +/obj/item/ammo_box/advanced/s12gauge/flechette + name = "Flechette ammo box" + desc = "A box of 15 flechette shells. Each shell contains a small group of tumbling blades that excel at causing terrible wounds." + icon_state = "flechette" + ammo_type = /obj/item/ammo_casing/shotgun/flechette + max_ammo = 15 + +/obj/item/ammo_box/advanced/s12gauge/beehive + name = "Hornet's nest ammo box" + desc = "A box of 15 hornet's nest shells. These are less-lethal shells that will bounce off walls and direct themselves toward nearby targets." + icon_state = "beehive" + ammo_type = /obj/item/ammo_casing/shotgun/beehive + max_ammo = 15 + +/obj/item/ammo_box/advanced/s12gauge/antitide + name = "Stardust ammo box" + desc = "A box of 15 express pelletshot shells. These are less-lethal and will embed in targets, causing pain on movement." + icon_state = "antitide" + ammo_type = /obj/item/ammo_casing/shotgun/antitide + max_ammo = 15 + +/obj/item/ammo_box/advanced/s12gauge/incendiary + name = "Incendiary Slug ammo box" + desc = "A box of 15 incendiary slug shells. These will ignite targets and leave a trail of fire behind them." + icon_state = "incendiary" + ammo_type = /obj/item/ammo_casing/shotgun/incendiary + max_ammo = 15 + +/obj/item/ammo_box/advanced/s12gauge/honkshot + name = "Confetti Honkshot ammo box" + desc = "A box of 35 shotgun shells." + icon_state = "honk" + ammo_type = /obj/item/ammo_casing/shotgun/honkshot + max_ammo = 35 diff --git a/modular_nova/modules/shotgunrebalance/code/autolathe_design.dm b/modular_nova/modules/shotgunrebalance/code/autolathe_design.dm new file mode 100644 index 00000000000000..3d097fe6f970e4 --- /dev/null +++ b/modular_nova/modules/shotgunrebalance/code/autolathe_design.dm @@ -0,0 +1,90 @@ +//12 Gauge +/datum/design/shotgun_slug + name = "Shotgun Slug" + id = "shotgun_slug" + build_type = AUTOLATHE + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + ) + build_path = /obj/item/ammo_casing/shotgun + category = list( + RND_CATEGORY_HACKED, RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, + ) + +/datum/design/shotgun_slug/sec + id = "sec_shotgun_slug" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT, + ) + category = list( + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + autolathe_exportable = FALSE + +/datum/design/buckshot_shell + name = "Buckshot Shell" + id = "buckshot_shell" + build_type = AUTOLATHE + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + ) + build_path = /obj/item/ammo_casing/shotgun/buckshot + category = list( + RND_CATEGORY_HACKED, RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, + ) + +/datum/design/buckshot_shell/sec + id = "sec_buckshot_shell" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT, + ) + category = list( + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + autolathe_exportable = FALSE + +//Existing Designs Discounting + +/datum/design/rubbershot + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + ) + +/datum/design/rubbershot/sec + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT, + ) + +/datum/design/beanbag_slug + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + ) + +/datum/design/beanbag_slug/sec + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT, + ) + +/datum/design/shotgun_dart + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + ) + +/datum/design/shotgun_dart/sec + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT, + ) + +/datum/design/incendiary_slug + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + ) + +/datum/design/incendiary_slug/sec + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT, + ) diff --git a/modular_nova/modules/shotgunrebalance/code/shotgun.dm b/modular_nova/modules/shotgunrebalance/code/shotgun.dm new file mode 100644 index 00000000000000..1c96b0ebeb2f67 --- /dev/null +++ b/modular_nova/modules/shotgunrebalance/code/shotgun.dm @@ -0,0 +1,309 @@ +#define AMMO_MATS_SHOTGUN list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 4) // not quite as thick as a half-sheet + +#define AMMO_MATS_SHOTGUN_FLECH list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,\ + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2) + +#define AMMO_MATS_SHOTGUN_HIVE list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,\ + /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 1,\ + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 1) + +#define AMMO_MATS_SHOTGUN_TIDE list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,\ + /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 1,\ + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 1) + +#define AMMO_MATS_SHOTGUN_PLASMA list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,\ + /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 2) + +/obj/item/ammo_casing/shotgun + icon = 'modular_nova/modules/shotgunrebalance/icons/shotshells.dmi' + desc = "A 12 gauge iron slug." + custom_materials = AMMO_MATS_SHOTGUN + +// THE BELOW TWO SLUGS ARE NOTED AS ADMINONLY AND HAVE ***EIGHTY*** WOUND BONUS. NOT BARE WOUND BONUS. FLAT WOUND BONUS. +/obj/item/ammo_casing/shotgun/executioner + name = "expanding shotgun slug" + desc = "A 12 gauge fragmenting slug purpose-built to annihilate flesh on impact." + can_be_printed = FALSE // noted as adminonly in code/modules/projectiles/projectile/bullets/shotgun.dm. + +/obj/item/ammo_casing/shotgun/pulverizer + name = "pulverizer shotgun slug" + desc = "A 12 gauge uranium slug purpose-built to break bones on impact." + can_be_printed = FALSE // noted as adminonly in code/modules/projectiles/projectile/bullets/shotgun.dm + +/obj/item/ammo_casing/shotgun/incendiary + name = "incendiary slug" + desc = "A 12 gauge magnesium slug meant for \"setting shit on fire and looking cool while you do it\".\ + <br><br>\ + <i>INCENDIARY: Leaves a trail of fire when shot, sets targets aflame.</i>" + advanced_print_req = TRUE + custom_materials = AMMO_MATS_SHOTGUN_PLASMA + +/obj/item/ammo_casing/shotgun/techshell + can_be_printed = FALSE // techshell... casing! so not really usable on its own but if you're gonna make these go raid a seclathe. + +/obj/item/ammo_casing/shotgun/improvised + can_be_printed = FALSE // this is literally made out of scrap why would you use this if you have a perfectly good ammolathe + +/obj/item/ammo_casing/shotgun/dart/bioterror + can_be_printed = FALSE // PRELOADED WITH TERROR CHEMS MAYBE LET'S NOT + +/obj/item/ammo_casing/shotgun/dragonsbreath + can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble + +/obj/item/ammo_casing/shotgun/stunslug + name = "taser slug" + desc = "A 12 gauge silver slug with electrical microcomponents meant to incapacitate targets." + can_be_printed = FALSE // comment out if you want rocket tag shotgun ammo being printable + +/obj/item/ammo_casing/shotgun/meteorslug + name = "meteor slug" + desc = "A 12 gauge shell rigged with CMC technology which launches a heap of matter with great force when fired.\ + <br><br>\ + <i>METEOR: Fires a meteor-like projectile that knocks back movable objects like people and airlocks.</i>" + can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble + +/obj/item/ammo_casing/shotgun/frag12 + name = "FRAG-12 slug" + desc = "A 12 gauge shell containing high explosives designed for defeating some barriers and light vehicles, disrupting IEDs, or intercepting assistants.\ + <br><br>\ + <i>HIGH EXPLOSIVE: Explodes on impact.</i>" + can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble + +/obj/item/ammo_casing/shotgun/pulseslug + can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble + +/obj/item/ammo_casing/shotgun/laserslug + can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble + +/obj/item/ammo_casing/shotgun/ion + can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble + +/obj/item/ammo_casing/shotgun/incapacitate + name = "hornet's nest shell" + desc = "A 12 gauge shell filled with some kind of material that excels at incapacitating targets. Contains a lot of pellets, \ + sacrificing individual pellet strength for sheer stopping power in what's best described as \"spitting distance\".\ + <br><br>\ + <i>HORNET'S NEST: Fire an overwhelming amount of projectiles in a single shot.</i>" + can_be_printed = FALSE + +/obj/item/ammo_casing/shotgun/buckshot + name = "buckshot shell" + desc = "A 12 gauge buckshot shell." + icon_state = "gshell" + projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot + pellets = 8 // 8 * 6 for 48 damage if every pellet hits, we want to keep lethal shells ~50 damage + variance = 25 + +/obj/projectile/bullet/pellet/shotgun_buckshot + name = "buckshot pellet" + damage = 6 + weak_against_armour = TRUE + +/obj/item/ammo_casing/shotgun/rubbershot + name = "rubber shot" + desc = "A shotgun casing filled with densely-packed rubber balls, used to incapacitate crowds from a distance." + icon_state = "rshell" + projectile_type = /obj/projectile/bullet/pellet/shotgun_rubbershot + pellets = 6 // 6 * 10 for 60 stamina damage, + some small amount of brute, we want to keep less lethal shells ~60 + variance = 20 + harmful = FALSE + +/obj/projectile/bullet/pellet/shotgun_rubbershot + weak_against_armour = TRUE + stamina = 10 + +/obj/item/ammo_casing/shotgun/magnum + name = "magnum blockshot shell" + desc = "A 12 gauge shell that fires fewer, larger pellets than buckshot. A favorite of SolFed anti-piracy enforcers, \ + especially against the likes of vox." + icon_state = "magshell" + projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/magnum + pellets = 4 // Half as many pellets for twice the damage each pellet, same overall damage as buckshot + variance = 20 + advanced_print_req = TRUE + +/obj/projectile/bullet/pellet/shotgun_buckshot/magnum + name = "magnum blockshot pellet" + damage = 12 + wound_bonus = 10 + +/obj/projectile/bullet/pellet/shotgun_buckshot/magnum/Initialize(mapload) + . = ..() + transform = transform.Scale(1.25, 1.25) + +/obj/item/ammo_casing/shotgun/express + name = "express pelletshot shell" + desc = "A 12 gauge shell that fires more and smaller projectiles than buckshot. Considered taboo to speak about \ + openly near teshari, for reasons you would be personally blessed to not know at least some of." + icon_state = "expshell" + projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/express + pellets = 12 // 1.3x The pellets for 0.6x the damage, same overall damage as buckshot + variance = 30 // Slightly wider spread than buckshot + +/obj/projectile/bullet/pellet/shotgun_buckshot/express + name = "express buckshot pellet" + damage = 4 + wound_bonus = 0 + +/obj/projectile/bullet/pellet/shotgun_buckshot/express/Initialize(mapload) + . = ..() + transform = transform.Scale(0.75, 0.75) + +/obj/item/ammo_casing/shotgun/flechette + name = "flechette shell" + desc = "A 12 gauge flechette shell that specializes in ripping unarmored targets apart." + icon_state = "fshell" + projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/flechette + pellets = 8 //8 x 6 = 48 Damage Potential + variance = 25 + custom_materials = AMMO_MATS_SHOTGUN_FLECH + advanced_print_req = TRUE + +/obj/projectile/bullet/pellet/shotgun_buckshot/flechette + name = "flechette" + icon = 'modular_nova/modules/shotgunrebalance/icons/projectiles.dmi' + icon_state = "flechette" + damage = 6 + wound_bonus = 10 + bare_wound_bonus = 20 + sharpness = SHARP_EDGED //Did you knew flechettes fly sideways into people + +/obj/projectile/bullet/pellet/shotgun_buckshot/flechette/Initialize(mapload) + . = ..() + SpinAnimation() + +/obj/item/ammo_casing/shotgun/beehive + name = "hornet shell" + desc = "A less-lethal 12 gauge shell that fires four pellets capable of bouncing off nearly any surface \ + and re-aiming themselves toward the nearest target. They will, however, go for <b>any target</b> nearby." + icon_state = "cnrshell" + projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/beehive + pellets = 4 + variance = 15 + fire_sound = 'sound/weapons/taser.ogg' + harmful = FALSE + custom_materials = AMMO_MATS_SHOTGUN_HIVE + advanced_print_req = TRUE + +/obj/projectile/bullet/pellet/shotgun_buckshot/beehive + name = "hornet flechette" + icon = 'modular_nova/modules/shotgunrebalance/icons/projectiles.dmi' + icon_state = "hornet" + damage = 4 + stamina = 15 + damage_falloff_tile = 0.1 + stamina_falloff_tile = 0.1 + wound_bonus = -5 + bare_wound_bonus = 5 + wound_falloff_tile = 0 + sharpness = NONE + ricochets_max = 5 + ricochet_chance = 200 + ricochet_auto_aim_angle = 60 + ricochet_auto_aim_range = 8 + ricochet_decay_damage = 1 + ricochet_decay_chance = 1 + ricochet_incidence_leeway = 0 //nanomachines son + +/obj/item/ammo_casing/shotgun/antitide + name = "stardust shell" + desc = "A highly experimental shell filled with nanite electrodes that will embed themselves in soft targets. The electrodes are charged from kinetic movement which means moving targets will get punished more." + icon_state = "lasershell" + projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/antitide + pellets = 8 // 8 * 7 for 56 stamina damage, plus whatever the embedded shells do + variance = 30 + harmful = FALSE + fire_sound = 'sound/weapons/taser.ogg' + custom_materials = AMMO_MATS_SHOTGUN_TIDE + advanced_print_req = TRUE + +/obj/projectile/bullet/pellet/shotgun_buckshot/antitide + name = "electrode" + icon = 'modular_nova/modules/shotgunrebalance/icons/projectiles.dmi' + icon_state = "stardust" + damage = 2 + stamina = 8 + damage_falloff_tile = 0.2 + stamina_falloff_tile = 0.3 + wound_bonus = 0 + bare_wound_bonus = 0 + stutter = 3 SECONDS + jitter = 5 SECONDS + eyeblur = 1 SECONDS + sharpness = NONE + range = 8 + embedding = list(embed_chance=70, pain_chance=25, fall_chance=15, jostle_chance=80, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.9, pain_mult=2, rip_time=10) + +/obj/projectile/bullet/pellet/shotgun_buckshot/antitide/on_range() + do_sparks(1, TRUE, src) + ..() + +/obj/item/ammo_casing/shotgun/hunter + name = "hunter slug shell" + desc = "A 12 gauge slug shell that fires specially designed slugs that deal extra damage to the local planetary fauna" + icon_state = "huntershell" + projectile_type = /obj/projectile/bullet/shotgun_slug/hunter + +/obj/projectile/bullet/shotgun_slug/hunter + name = "12g hunter slug" + damage = 20 + +/obj/projectile/bullet/shotgun_slug/hunter/Initialize(mapload) + . = ..() + AddElement(/datum/element/bane, mob_biotypes = MOB_BEAST, damage_multiplier = 5) + +/obj/projectile/bullet/pellet/shotgun_improvised + weak_against_armour = TRUE // We will not have Improvised are Better 2.0 + +/obj/item/ammo_casing/shotgun/honkshot + name = "confetti shell" + desc = "A 12 gauge buckshot shell thats been filled to the brim with confetti, yippie!" + icon_state = "honkshell" + projectile_type = /obj/projectile/bullet/honkshot + pellets = 12 + variance = 35 + fire_sound = 'sound/items/bikehorn.ogg' + harmful = FALSE + +/obj/projectile/bullet/honkshot + name = "confetti" + damage = 0 + sharpness = NONE + shrapnel_type = NONE + impact_effect_type = null + ricochet_chance = 0 + jitter = 1 SECONDS + eyeblur = 1 SECONDS + hitsound = SFX_CLOWN_STEP + range = 4 + icon_state = "guardian" + +/obj/projectile/bullet/honkshot/Initialize(mapload) + . = ..() + SpinAnimation() + range = rand(1, 4) + color = pick( + COLOR_PRIDE_RED, + COLOR_PRIDE_ORANGE, + COLOR_PRIDE_YELLOW, + COLOR_PRIDE_GREEN, + COLOR_PRIDE_BLUE, + COLOR_PRIDE_PURPLE, + ) + +// This proc addition will spawn a decal on each tile the projectile travels over +/obj/projectile/bullet/honkshot/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) + new /obj/effect/decal/cleanable/confetti(get_turf(old_loc)) + return ..() + +// This proc addition will make living humanoids do a flip animation when hit by the projectile +/obj/projectile/bullet/honkshot/on_hit(atom/target, blocked, pierce_hit) + if(!isliving(target)) + return ..() + target.SpinAnimation(7,1) + return ..() + +// This proc addition adds a spark effect when the projectile expires/hits +/obj/projectile/bullet/honkshot/on_range() + do_sparks(1, TRUE, src) + return ..() diff --git a/modular_nova/modules/shotgunrebalance/icons/projectiles.dmi b/modular_nova/modules/shotgunrebalance/icons/projectiles.dmi new file mode 100644 index 00000000000000..be56385841f037 Binary files /dev/null and b/modular_nova/modules/shotgunrebalance/icons/projectiles.dmi differ diff --git a/modular_skyrat/modules/shotgunrebalance/icons/shotbox.dmi b/modular_nova/modules/shotgunrebalance/icons/shotbox.dmi similarity index 100% rename from modular_skyrat/modules/shotgunrebalance/icons/shotbox.dmi rename to modular_nova/modules/shotgunrebalance/icons/shotbox.dmi diff --git a/modular_skyrat/modules/shotgunrebalance/icons/shotshells.dmi b/modular_nova/modules/shotgunrebalance/icons/shotshells.dmi similarity index 100% rename from modular_skyrat/modules/shotgunrebalance/icons/shotshells.dmi rename to modular_nova/modules/shotgunrebalance/icons/shotshells.dmi diff --git a/modular_skyrat/modules/soulstone_changes/code/components/return_on_death.dm b/modular_nova/modules/soulstone_changes/code/components/return_on_death.dm similarity index 95% rename from modular_skyrat/modules/soulstone_changes/code/components/return_on_death.dm rename to modular_nova/modules/soulstone_changes/code/components/return_on_death.dm index 9c922aa7fb4b9c..d123bd093c6cb2 100644 --- a/modular_skyrat/modules/soulstone_changes/code/components/return_on_death.dm +++ b/modular_nova/modules/soulstone_changes/code/components/return_on_death.dm @@ -25,7 +25,7 @@ deleting = TRUE -/datum/component/return_on_death/Destroy(force, silent) +/datum/component/return_on_death/Destroy(force) if(!deleting) deleting = TRUE return_to_old_body() diff --git a/modular_skyrat/modules/soulstone_changes/code/soulstone.dm b/modular_nova/modules/soulstone_changes/code/soulstone.dm similarity index 100% rename from modular_skyrat/modules/soulstone_changes/code/soulstone.dm rename to modular_nova/modules/soulstone_changes/code/soulstone.dm diff --git a/modular_nova/modules/soulstone_changes/readme.md b/modular_nova/modules/soulstone_changes/readme.md new file mode 100644 index 00000000000000..39c4bded7604d6 --- /dev/null +++ b/modular_nova/modules/soulstone_changes/readme.md @@ -0,0 +1,40 @@ +# Pull Request Link + +'https://github.com/Skyrat-SS13/Skyrat-tg/pull/'<!--PR Number--> + +## Title: <!--Title of your addition--> + +MODULE ID: SOULSTONE_CHANGES<!-- uppercase, underscore_connected name of your module, that you use to mark files--> + +### Description + +Makes soulstone no longer permakill people, and makes construct's souls return to their original bodies if the construct is killed. +<!-- Here, try to describe what your PR does, what features it provides and any other directly useful information --> + +### TG Proc/File Changes + +- code/modules/antagonist/wizard/equipment/soulstone.dm > /obj/item/soulstone/proc/transfer_soul() +- code/modules/antagonist/wizard/equipment/soulstone.dm > /obj/item/soulstone/proc/init_shade() +- code/modules/antagonist/wizard/equipment/soulstone.dm > /obj/item/soulstone/proc/getCultGhost() + +<!-- If you had to edit, or append to any core procs in the process of making this PR, list them here. APPEND: Also, please include any files that you've changed. .DM files that is. --> + +### Defines + +- code/__DEFINES/~nova_defines/traits.dm > TRAIT_SACRIFICED +<!-- If you needed to add any defines, mention the files you added those defines in --> + +### Master file additions + +- N/A +<!-- Any master file changes you've made to existing master files or if you've added a new master file. Please mark either as #NEW or #CHANGE --> + +### Included files that are not contained in this module + +- N/A +<!-- Likewise, be it a non-modular file or a modular one that's not contained within the folder belonging to this specific module, it should be mentioned here --> + +### Credits + +`https://github.com/Arturlang` +<!-- Here go the credits to you, dear coder, and in case of collaborative work or ports, credits to the original source of the code --> diff --git a/modular_skyrat/modules/space_vines/back.dmi b/modular_nova/modules/space_vines/back.dmi similarity index 100% rename from modular_skyrat/modules/space_vines/back.dmi rename to modular_nova/modules/space_vines/back.dmi diff --git a/modular_skyrat/modules/space_vines/items_and_weapons.dmi b/modular_nova/modules/space_vines/items_and_weapons.dmi similarity index 100% rename from modular_skyrat/modules/space_vines/items_and_weapons.dmi rename to modular_nova/modules/space_vines/items_and_weapons.dmi diff --git a/modular_skyrat/modules/space_vines/polearms_lefthand.dmi b/modular_nova/modules/space_vines/polearms_lefthand.dmi similarity index 100% rename from modular_skyrat/modules/space_vines/polearms_lefthand.dmi rename to modular_nova/modules/space_vines/polearms_lefthand.dmi diff --git a/modular_skyrat/modules/space_vines/polearms_righthand.dmi b/modular_nova/modules/space_vines/polearms_righthand.dmi similarity index 100% rename from modular_skyrat/modules/space_vines/polearms_righthand.dmi rename to modular_nova/modules/space_vines/polearms_righthand.dmi diff --git a/modular_skyrat/modules/space_vines/scythes.dm b/modular_nova/modules/space_vines/scythes.dm similarity index 82% rename from modular_skyrat/modules/space_vines/scythes.dm rename to modular_nova/modules/space_vines/scythes.dm index 910753489e3350..af2c70b3984e3d 100644 --- a/modular_skyrat/modules/space_vines/scythes.dm +++ b/modular_nova/modules/space_vines/scythes.dm @@ -1,18 +1,18 @@ /obj/item/scythe name = "scythe" desc = "A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow." - icon = 'modular_skyrat/modules/space_vines/items_and_weapons.dmi' + icon = 'modular_nova/modules/space_vines/items_and_weapons.dmi' icon_state = "scythe_t1" - worn_icon = 'modular_skyrat/modules/space_vines/back.dmi' - lefthand_file = 'modular_skyrat/modules/space_vines/polearms_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/space_vines/polearms_righthand.dmi' + worn_icon = 'modular_nova/modules/space_vines/back.dmi' + lefthand_file = 'modular_nova/modules/space_vines/polearms_lefthand.dmi' + righthand_file = 'modular_nova/modules/space_vines/polearms_righthand.dmi' force = 13 throwforce = 5 throw_speed = 2 throw_range = 3 wound_bonus = 10 w_class = WEIGHT_CLASS_BULKY - flags_1 = CONDUCT_1 + obj_flags = CONDUCTS_ELECTRICITY armour_penetration = 20 slot_flags = ITEM_SLOT_BACK attack_verb_continuous = list("chops", "slices", "cuts", "reaps") @@ -63,15 +63,23 @@ desc = "A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow." id = "scythet1" build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5) + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/scythe/tier1 - category = list(RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_BOTANY) + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_BOTANY, + ) departmental_flags = DEPARTMENT_BITFLAG_SERVICE /datum/design/scythe/tier2 name = "Scythe (Tier 2)" id = "scythet2" - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5) + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + ) build_path = /obj/item/scythe/tier2 /datum/techweb_node/scythe_t1 diff --git a/modular_skyrat/modules/space_vines/venus.dm b/modular_nova/modules/space_vines/venus.dm similarity index 100% rename from modular_skyrat/modules/space_vines/venus.dm rename to modular_nova/modules/space_vines/venus.dm diff --git a/modular_skyrat/modules/space_vines/vine_mutations.dm b/modular_nova/modules/space_vines/vine_mutations.dm similarity index 97% rename from modular_skyrat/modules/space_vines/vine_mutations.dm rename to modular_nova/modules/space_vines/vine_mutations.dm index 54971404f5cc78..328ecde67097b3 100644 --- a/modular_skyrat/modules/space_vines/vine_mutations.dm +++ b/modular_nova/modules/space_vines/vine_mutations.dm @@ -61,7 +61,7 @@ space_turf.color = hue /turf/open/floor/plating/kudzu name = "vine flooring" - icon = 'modular_skyrat/modules/aesthetics/floors/icons/floors.dmi' + icon = 'modular_nova/modules/aesthetics/floors/icons/floors.dmi' icon_state = "vinefloor" /turf/open/floor/plating/kudzu/attacked_by(obj/item/attacking_item, mob/living/user) diff --git a/modular_skyrat/modules/space_vines/vine_structure.dm b/modular_nova/modules/space_vines/vine_structure.dm similarity index 100% rename from modular_skyrat/modules/space_vines/vine_structure.dm rename to modular_nova/modules/space_vines/vine_structure.dm diff --git a/modular_nova/modules/specialist_armor/code/cargo_packs.dm b/modular_nova/modules/specialist_armor/code/cargo_packs.dm new file mode 100644 index 00000000000000..8dbe34ebc3c894 --- /dev/null +++ b/modular_nova/modules/specialist_armor/code/cargo_packs.dm @@ -0,0 +1,30 @@ +/datum/supply_pack/security/armory/soft_armor + name = "Soft Armor Kit Crate" + crate_name = "soft armor kit crate" + desc = "Contains three sets of SolFed-made soft body armor and matching helmets." + cost = CARGO_CRATE_VALUE * 5 + contains = list( + /obj/item/clothing/head/helmet/sf_peacekeeper/debranded = 3, + /obj/item/clothing/suit/armor/sf_peacekeeper/debranded = 3, + ) + +/datum/supply_pack/security/armory/hardened_armor + name = "Hardened Armor Kit Crate" + crate_name = "hardened armor kit crate" + desc = "Contains three sets of SolFed-made hardened body armor and matching helmets." + cost = CARGO_CRATE_VALUE * 5 + contains = list( + /obj/item/clothing/head/helmet/toggleable/sf_hardened = 3, + /obj/item/clothing/suit/armor/sf_hardened = 3, + ) + +/datum/supply_pack/security/armory/sacrificial_armor + name = "Sacrificial Armor Kit Crate" + crate_name = "sacrificial armor kit crate" + desc = "Contains three sets of SolFed-made sacrificial body armor and matching helmets." + cost = CARGO_CRATE_VALUE * 5 + contains = list( + /obj/item/clothing/head/helmet/sf_sacrificial = 3, + /obj/item/sacrificial_face_shield = 3, + /obj/item/clothing/suit/armor/sf_sacrificial = 3, + ) diff --git a/modular_nova/modules/specialist_armor/code/clothing_bullet_damage_component.dm b/modular_nova/modules/specialist_armor/code/clothing_bullet_damage_component.dm new file mode 100644 index 00000000000000..48d569486607a3 --- /dev/null +++ b/modular_nova/modules/specialist_armor/code/clothing_bullet_damage_component.dm @@ -0,0 +1,81 @@ +/// Component that lets clothing be damaged in zones by piercing bullets. The parent MUST have limb_integrity set. +/datum/component/clothing_damaged_by_bullets + /// How much of the incoming projectile damage is taken, multiplier + var/projectile_damage_multiplier + /// Who is wearing the target? + var/mob/living/wearer + +/datum/component/clothing_damaged_by_bullets/Initialize(projectile_damage_multiplier = 1) + if(!istype(parent, /obj/item/clothing)) // Just in case someone loses it and tries to put this on something that's not clothing + return COMPONENT_INCOMPATIBLE + + var/obj/item/clothing/parent_clothing = parent + + src.projectile_damage_multiplier = projectile_damage_multiplier + + if(ismob(parent_clothing.loc)) + var/mob/holder = parent_clothing.loc + if(holder.is_holding(parent_clothing)) + return + set_wearer(holder) + +/datum/component/clothing_damaged_by_bullets/RegisterWithParent() + RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(on_equipped)) + RegisterSignal(parent, COMSIG_ITEM_DROPPED, PROC_REF(lost_wearer)) + +/datum/component/clothing_damaged_by_bullets/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_ATOM_EXAMINE, COMSIG_ITEM_DROPPED, COMSIG_ITEM_EQUIPPED, COMSIG_QDELETING, COMSIG_ATOM_BULLET_ACT)) + +/// Check if we've been equipped to a valid slot to shield +/datum/component/clothing_damaged_by_bullets/proc/on_equipped(datum/source, mob/user, slot) + SIGNAL_HANDLER + + if((slot & ITEM_SLOT_HANDS)) + lost_wearer(source, user) + return + set_wearer(user) + +/// Either we've been dropped or our wearer has been QDEL'd. Either way, they're no longer our problem +/datum/component/clothing_damaged_by_bullets/proc/lost_wearer(datum/source, mob/user) + SIGNAL_HANDLER + + wearer = null + UnregisterSignal(parent, list(COMSIG_QDELETING, COMSIG_ATOM_BULLET_ACT)) + +/// Sets the wearer and registers the appropriate signals for them +/datum/component/clothing_damaged_by_bullets/proc/set_wearer(mob/user) + if(wearer == user) + return + if(!isnull(wearer)) + CRASH("[type] called set_wearer with [user] but [wearer] was already the wearer!") + + wearer = user + RegisterSignal(wearer, COMSIG_QDELETING, PROC_REF(lost_wearer)) + RegisterSignal(wearer, COMSIG_ATOM_BULLET_ACT, PROC_REF(hit_by_projectile)) + +/// Checks an incoming projectile to see if it should damage the thing we're attached to, +/datum/component/clothing_damaged_by_bullets/proc/hit_by_projectile(mob/living/dude_getting_hit, obj/projectile/hitting_projectile, def_zone) + SIGNAL_HANDLER + + var/obj/item/clothing/clothing_parent = parent + + if(!(def_zone in cover_flags2body_zones(clothing_parent.body_parts_covered))) + return + if(hitting_projectile.sharpness == SHARP_EDGED) + return + if(hitting_projectile.damage_type != BRUTE) + return + + /// This seems complex but the actual math is simple, the damage of the projectile * vest damage multiplier, divided by two if the projectile is weak to armour, then modified by wound bonus + var/total_damage = ((hitting_projectile.damage * projectile_damage_multiplier) * (hitting_projectile.weak_against_armour ? 0.5 : 1) * (1 + (hitting_projectile.wound_bonus / 10))) + var/damage_dealt = clothing_parent.take_damage(total_damage, BRUTE, hitting_projectile.armour_penetration, FALSE) + + if(clothing_parent.limb_integrity) + clothing_parent.take_damage_zone(def_zone, damage_dealt, BRUTE) + +/// Warns any examiner that the clothing we're stuck to will be damaged by piercing bullets +/datum/component/clothing_damaged_by_bullets/proc/on_examine(obj/item/source, mob/examiner, list/examine_list) + SIGNAL_HANDLER + + examine_list += "<br>[span_warning("This will be <b>damaged</b> when it protects you from bullets, taking <b>[projectile_damage_multiplier]</b> times the damage that the bullet deals.")]" diff --git a/modular_nova/modules/specialist_armor/code/hardened.dm b/modular_nova/modules/specialist_armor/code/hardened.dm new file mode 100644 index 00000000000000..663a56d7f52f43 --- /dev/null +++ b/modular_nova/modules/specialist_armor/code/hardened.dm @@ -0,0 +1,99 @@ +// Hardened vests negate any and all projectile armor penetration, in exchange for having mid af bullet armor +/datum/armor/armor_sf_hardened + melee = ARMOR_LEVEL_WEAK + bullet = ARMOR_LEVEL_MID + laser = ARMOR_LEVEL_WEAK + energy = ARMOR_LEVEL_TINY + bomb = ARMOR_LEVEL_WEAK + fire = ARMOR_LEVEL_MID + acid = ARMOR_LEVEL_WEAK + wound = WOUND_ARMOR_WEAK + +/obj/item/clothing/suit/armor/sf_hardened + name = "'Muur' hardened armor vest" + desc = "A large white breastplate, and a semi-flexible mail of dense panels that cover the torso. \ + While not so incredible at directly stopping bullets, the vest is uniquely suited to cause bullets \ + to lose much of their armor penetrating energy before any damage can be done." + icon = 'modular_nova/modules/specialist_armor/icons/armor.dmi' + icon_state = "hardened_standard" + worn_icon = 'modular_nova/modules/specialist_armor/icons/armor_worn.dmi' + inhand_icon_state = "armor" + blood_overlay_type = "armor" + armor_type = /datum/armor/armor_sf_hardened + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/armor/sf_hardened/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text, final_block_chance, damage, attack_type, damage_type) + . = ..() + + if(istype(hitby, /obj/projectile)) + var/obj/projectile/incoming_projectile = hitby + incoming_projectile.armour_penetration = 0 + playsound(owner, SFX_RICOCHET, BLOCK_SOUND_VOLUME, vary = TRUE) + +/obj/item/clothing/suit/armor/sf_hardened/examine_more(mob/user) + . = ..() + + . += "What do you do in an age where armor penetration technology keeps getting better and better, \ + and you're quite fond of not being a corpse? The 'Muur' type armor was a pretty successful attempt at an answer \ + to the question. Using some advanced materials, micro-scale projectile dampener fields, and a whole \ + host of other technologies that some poor SolFed procurement general had to talked to death about, \ + it offers a unique advantage over many armor piercing bullets. Why stop the bullet from piercing the armor \ + with more armor, when you could simply force the bullet to penetrate less and get away with less protection? \ + Some people would rather the bullet just be stopped, of course, but when you have to make choices, many choose \ + this one." + + return . + +/obj/item/clothing/suit/armor/sf_hardened/emt + name = "'Archangel' hardened armor vest" + desc = "A large white breastplate with a lone red stripe, and a semi-flexible mail of dense panels that cover the torso. \ + While not so incredible at directly stopping bullets, the vest is uniquely suited to cause bullets \ + to lose much of their armor penetrating energy before any damage can be done." + icon_state = "hardened_emt" + +/obj/item/clothing/head/helmet/toggleable/sf_hardened + name = "'Muur' enclosed helmet" + desc = "A thick-fronted helmet with extendable visor for whole face protection. The materials and geometry of the helmet \ + combine in such a way that bullets lose much of their armor penetrating energy before any damage can be done, rather than penetrate into it." + icon = 'modular_nova/modules/specialist_armor/icons/armor.dmi' + icon_state = "enclosed_standard" + worn_icon = 'modular_nova/modules/specialist_armor/icons/armor_worn.dmi' + inhand_icon_state = "helmet" + armor_type = /datum/armor/armor_sf_hardened + toggle_message = "You extend the visor on" + alt_toggle_message = "You retract the visor on" + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + visor_flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR + flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + visor_flags_cover = HEADCOVERSEYES + dog_fashion = null + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + +/obj/item/clothing/head/helmet/toggleable/sf_hardened/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text, final_block_chance, damage, attack_type, damage_type) + . = ..() + + if(istype(hitby, /obj/projectile)) + var/obj/projectile/incoming_projectile = hitby + incoming_projectile.armour_penetration = 0 + playsound(src, SFX_RICOCHET, BLOCK_SOUND_VOLUME, vary = TRUE) + +/obj/item/clothing/head/helmet/toggleable/sf_hardened/examine_more(mob/user) + . = ..() + + . += "What do you do in an age where armor penetration technology keeps getting better and better, \ + and you're quite fond of not being a corpse? The 'Muur' type armor was a pretty successful attempt at an answer \ + to the question. Using some advanced materials, micro-scale projectile dampener fields, and a whole \ + host of other technologies that some poor SolFed procurement general had to talked to death about, \ + it offers a unique advantage over many armor piercing bullets. Why stop the bullet from piercing the armor \ + with more armor, when you could simply force the bullet to penetrate less and get away with less protection? \ + Some people would rather the bullet just be stopped, of course, but when you have to make choices, many choose \ + this one." + + return . + +/obj/item/clothing/head/helmet/toggleable/sf_hardened/emt + name = "'Archangel' enclosed helmet" + desc = "A thick-fronted helmet with extendable visor for whole face protection. The materials and geometry of the helmet \ + combine in such a way that bullets lose much of their armor penetrating energy before any damage can be done, rather than penetrate into it. \ + This one has a red stripe down the front." + icon_state = "enclosed_emt" diff --git a/modular_nova/modules/specialist_armor/code/peacekeeper.dm b/modular_nova/modules/specialist_armor/code/peacekeeper.dm new file mode 100644 index 00000000000000..8f727a567f0e67 --- /dev/null +++ b/modular_nova/modules/specialist_armor/code/peacekeeper.dm @@ -0,0 +1,75 @@ +// The peacekeeper armors and helmets will be less effective at stopping bullet damage than bulletproof vests, but stronger against wounds especially, and some other damage types +/datum/armor/armor_sf_peacekeeper + melee = ARMOR_LEVEL_WEAK + bullet = ARMOR_LEVEL_MID + laser = ARMOR_LEVEL_TINY + energy = ARMOR_LEVEL_TINY + bomb = ARMOR_LEVEL_WEAK + fire = ARMOR_LEVEL_MID + acid = ARMOR_LEVEL_WEAK + wound = WOUND_ARMOR_HIGH + +/obj/item/clothing/suit/armor/sf_peacekeeper + name = "'Touvou' peacekeeper armor vest" + desc = "A bright blue vest, proudly bearing 'SF' in white on its front and back. Dense fabric with a thin layer of rolled metal \ + will protect you from bullets best, a few blunt blows, and the wounds they cause. Lasers will burn more or less straight through it." + icon = 'modular_nova/modules/specialist_armor/icons/armor.dmi' + icon_state = "soft_peacekeeper" + worn_icon = 'modular_nova/modules/specialist_armor/icons/armor_worn.dmi' + inhand_icon_state = "armor" + blood_overlay_type = "armor" + armor_type = /datum/armor/armor_sf_peacekeeper + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/armor/sf_peacekeeper/examine_more(mob/user) + . = ..() + + . += "A common SolFed designed armor vest for a common cause, not having your innards become outards. \ + While heavier armors certainly exist, the 'Touvou' is relatively cheap for the protection you do get, \ + and many soldiers and officers around the galaxy will tell you the convenience of a mostly soft body armor. \ + Not for any of the protection, but for the relative comfort, especially in areas where you don't need to care \ + much if you're able to stop an anti materiel round with your chest. Likely due to all those factors, \ + it is a common sight on SolFed peacekeepers around the galaxy, alongside other misfits and corporate baddies \ + across the galaxy." + + return . + +/obj/item/clothing/suit/armor/sf_peacekeeper/debranded + name = "'Touvou' soft armor vest" + desc = "A bright white vest, notably missing an 'SF' marking on either its front or back. Dense fabric with a thin layer of rolled metal \ + will protect you from bullets best, a few blunt blows, and the wounds they cause. Lasers will burn more or less straight through it." + icon_state = "soft_civilian" + +/obj/item/clothing/head/helmet/sf_peacekeeper + name = "'Kastrol' peacekeeper helmet" + desc = "A large, almost always ill-fitting helmet painted in bright blue. It proudly bears the emblems of SolFed on its sides. \ + It will protect from bullets best, with some protection against blunt blows, but falters easily in the presence of lasers." + icon = 'modular_nova/modules/specialist_armor/icons/armor.dmi' + icon_state = "helmet_peacekeeper" + worn_icon = 'modular_nova/modules/specialist_armor/icons/armor_worn.dmi' + inhand_icon_state = "helmet" + armor_type = /datum/armor/armor_sf_peacekeeper + dog_fashion = null + flags_inv = null + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + +/obj/item/clothing/head/helmet/sf_peacekeeper/examine_more(mob/user) + . = ..() + + . += "A common SolFed designed ballistic helmet for a common cause, keeping your brain inside your head. \ + While heavier helmets certainly exist, the 'Kastrol' is relatively cheap for the protection you do get, \ + and many soldiers don't mind it much due to its large over-head size bypassing a lot of the fitting issues \ + some more advanced or more protective helmets might have. \ + Especially in areas where you don't need to care \ + much if you're able to stop an anti materiel round with your forehead, it does the job just fine. \ + Likely due to all those factors, \ + it is a common sight on SolFed peacekeepers around the galaxy, alongside other misfits and corporate baddies \ + across the galaxy." + + return . + +/obj/item/clothing/head/helmet/sf_peacekeeper/debranded + name = "'Kastrol' ballistic helmet" + desc = "A large, almost always ill-fitting helmet painted a dull grey. This one seems to lack any special markings. \ + It will protect from bullets best, with some protection against blunt blows, but falters easily in the presence of lasers." + icon_state = "helmet_grey" diff --git a/modular_nova/modules/specialist_armor/code/sacrificial.dm b/modular_nova/modules/specialist_armor/code/sacrificial.dm new file mode 100644 index 00000000000000..a702b81a5c4549 --- /dev/null +++ b/modular_nova/modules/specialist_armor/code/sacrificial.dm @@ -0,0 +1,156 @@ +// Sacrificial armor has massive bullet protection, but gets damaged by being shot, thus, is sacrificing itself to protect the wearer +/datum/armor/armor_sf_sacrificial + melee = ARMOR_LEVEL_WEAK + bullet = ARMOR_LEVEL_INSANE // When the level IV plates stop the bullet but not the energy transfer + laser = ARMOR_LEVEL_TINY + energy = ARMOR_LEVEL_TINY + bomb = ARMOR_LEVEL_MID + fire = ARMOR_LEVEL_MID + acid = ARMOR_LEVEL_WEAK + wound = WOUND_ARMOR_HIGH + +/obj/item/clothing/suit/armor/sf_sacrificial + name = "'Val' sacrificial ballistic vest" + desc = "A hefty vest with a unique pattern of hexes on its outward faces. \ + As the 'sacrificial' name might imply, this vest has extremely high bullet protection \ + in exchange for allowing itself to be destroyed by impacts. It'll protect you from hell, \ + but only for so long." + icon = 'modular_nova/modules/specialist_armor/icons/armor.dmi' + icon_state = "hexagon" + worn_icon = 'modular_nova/modules/specialist_armor/icons/armor_worn.dmi' + inhand_icon_state = "armor" + blood_overlay_type = "armor" + armor_type = /datum/armor/armor_sf_sacrificial + max_integrity = 200 + limb_integrity = 200 + repairable_by = null // No being cheeky and keeping a pile of repair materials in your bag to fix it either + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/armor/sf_sacrificial/Initialize(mapload) + . = ..() + + AddComponent(/datum/component/clothing_damaged_by_bullets) + +/obj/item/clothing/suit/armor/sf_sacrificial/examine_more(mob/user) + . = ..() + + . += "An extreme solution to an extreme problem. While many galactic armors have some semblance of self-repairing tech \ + in them to prevent the armor becoming useless after being shot enough, it does have its limits. Those limits tend to be \ + that the self-repairing, while handy, take the place of what could have simply been more armor. For a small market, \ + one that doesn't care if their armor lasts more than one gunfight, there exists a niche for armors such as the 'Val'. \ + Passing up self-repair for nigh-immunity to bullets, the right tool for a certain job, if you can find whatever that job may be." + + return . + +/obj/item/clothing/head/helmet/sf_sacrificial + name = "'Val' sacrificial ballistic helmet" + desc = "A large, almost always ill-fitting helmet painted in a tacticool black. \ + As the 'sacrificial' name might imply, this helmet has extremely high bullet protection \ + in exchange for allowing itself to be destroyed by impacts. It'll protect you from hell, \ + but only for so long." + icon = 'modular_nova/modules/specialist_armor/icons/armor.dmi' + icon_state = "bulletproof" + worn_icon = 'modular_nova/modules/specialist_armor/icons/armor_worn.dmi' + inhand_icon_state = "helmet" + armor_type = /datum/armor/armor_sf_sacrificial + max_integrity = 200 + limb_integrity = 200 + repairable_by = null // No being cheeky and keeping a pile of repair materials in your bag to fix it either + dog_fashion = null + flags_inv = null + supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON + /// Holds the faceshield for quick reference + var/obj/item/sacrificial_face_shield/face_shield + +/obj/item/clothing/head/helmet/sf_sacrificial/Initialize(mapload) + . = ..() + + AddComponent(/datum/component/clothing_damaged_by_bullets) + +/obj/item/clothing/head/helmet/sf_sacrificial/attackby(obj/item/attacking_item, mob/user, params) + . = ..() + + if(!(istype(attacking_item, /obj/item/sacrificial_face_shield))) + return + + add_face_shield(user, attacking_item) + +/obj/item/clothing/head/helmet/sf_sacrificial/Destroy() + QDEL_NULL(face_shield) + return ..() + +/obj/item/clothing/head/helmet/sf_sacrificial/AltClick(mob/user) + remove_face_shield(user) + +/// Attached the passed face shield to the helmet. +/obj/item/clothing/head/helmet/sf_sacrificial/proc/add_face_shield(mob/living/carbon/human/user, obj/shield_in_question) + if(face_shield) + return + if(!user.transferItemToLoc(shield_in_question, src)) + return + + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDESNOUT + flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + + playsound(src, 'sound/items/modsuit/magnetic_harness.ogg', 50, TRUE) + face_shield = shield_in_question + + icon_state = "bulletproof_glass" + worn_icon_state = icon_state + update_appearance() + +/// Removes the face shield from the helmet, breaking it into a glass shard decal if that's wanted, too. +/obj/item/clothing/head/helmet/sf_sacrificial/proc/remove_face_shield(mob/living/carbon/human/user, break_it) + if(!face_shield) + return + + flags_inv = initial(flags_inv) + flags_cover = initial(flags_cover) + + if(break_it) + playsound(src, SFX_SHATTER, 70, TRUE) + new /obj/effect/decal/cleanable/glass(drop_location(src)) + qdel(face_shield) + face_shield = null // just to be safe + else + user.put_in_hands(face_shield) + playsound(src, 'sound/items/modsuit/magnetic_harness.ogg', 50, TRUE) + face_shield = null + + icon_state = initial(icon_state) + worn_icon_state = icon_state // Against just to be safe + update_appearance() + +/obj/item/clothing/head/helmet/sf_sacrificial/take_damage_zone(def_zone, damage_amount, damage_type, armour_penetration) + . = ..() + + if((damage_amount > 20) && face_shield) + remove_face_shield(break_it = TRUE) + +/obj/item/clothing/head/helmet/sf_sacrificial/examine(mob/user) + . = ..() + if(face_shield) + . += span_notice("The <b>face shield</b> can be removed with <b>Right-Click</b>.") + else + . += span_notice("A <b>face shield</b> can be attached to it.") + + return . + +/obj/item/clothing/head/helmet/sf_sacrificial/examine_more(mob/user) + . = ..() + + . += "An extreme solution to an extreme problem. While many galactic armors have some semblance of self-repairing tech \ + in them to prevent the armor becoming useless after being shot enough, it does have its limits. Those limits tend to be \ + that the self-repairing, while handy, take the place of what could have simply been more armor. For a small market, \ + one that doesn't care if their armor lasts more than one gunfight, there exists a niche for armors such as the 'Val'. \ + Passing up self-repair for nigh-immunity to bullets, the right tool for a certain job, if you can find whatever that job may be." + + return . + +/obj/item/sacrificial_face_shield + name = "'Val' ballistic add-on face plate" + desc = "A thick piece of glass with mounting points for slotting onto a 'Val' sacrificial ballistic helmet. \ + While it does not make the helmet any stronger, it does protect your face much like a riot helmet would." + icon = 'modular_nova/modules/specialist_armor/icons/armor.dmi' + icon_state = "face_shield" + w_class = WEIGHT_CLASS_NORMAL diff --git a/modular_nova/modules/specialist_armor/icons/armor.dmi b/modular_nova/modules/specialist_armor/icons/armor.dmi new file mode 100644 index 00000000000000..d3e56a6b051d40 Binary files /dev/null and b/modular_nova/modules/specialist_armor/icons/armor.dmi differ diff --git a/modular_nova/modules/specialist_armor/icons/armor_worn.dmi b/modular_nova/modules/specialist_armor/icons/armor_worn.dmi new file mode 100644 index 00000000000000..ad052b7aaf3040 Binary files /dev/null and b/modular_nova/modules/specialist_armor/icons/armor_worn.dmi differ diff --git a/modular_skyrat/modules/stasisrework/code/all_nodes.dm b/modular_nova/modules/stasisrework/code/all_nodes.dm similarity index 100% rename from modular_skyrat/modules/stasisrework/code/all_nodes.dm rename to modular_nova/modules/stasisrework/code/all_nodes.dm diff --git a/modular_skyrat/modules/stasisrework/code/bodybag.dm b/modular_nova/modules/stasisrework/code/bodybag.dm similarity index 81% rename from modular_skyrat/modules/stasisrework/code/bodybag.dm rename to modular_nova/modules/stasisrework/code/bodybag.dm index fc716ca3674c5b..1c21d5585ca5dd 100644 --- a/modular_skyrat/modules/stasisrework/code/bodybag.dm +++ b/modular_nova/modules/stasisrework/code/bodybag.dm @@ -1,7 +1,7 @@ /obj/item/bodybag/stasis name = "stasis body bag" desc = "A folded stasis body bag designed for the storage and stasis of cadavers." - icon = 'modular_skyrat/modules/stasisrework/icons/stasisbag.dmi' + icon = 'modular_nova/modules/stasisrework/icons/stasisbag.dmi' icon_state = "greenbodybag_folded" unfoldedbag_path = /obj/structure/closet/body_bag/stasis w_class = WEIGHT_CLASS_SMALL diff --git a/modular_skyrat/modules/stasisrework/code/bodybag_structure.dm b/modular_nova/modules/stasisrework/code/bodybag_structure.dm similarity index 95% rename from modular_skyrat/modules/stasisrework/code/bodybag_structure.dm rename to modular_nova/modules/stasisrework/code/bodybag_structure.dm index 5c25c793defd31..da18b6f5179d04 100644 --- a/modular_skyrat/modules/stasisrework/code/bodybag_structure.dm +++ b/modular_nova/modules/stasisrework/code/bodybag_structure.dm @@ -1,7 +1,7 @@ /obj/structure/closet/body_bag/stasis name = "stasis body bag" desc = "A body bag designed for the preservation of cadavers via integrated cryogenic technology and cryo-insulative mesh. Due to size limitations, it only works on dead bodies." - icon = 'modular_skyrat/modules/stasisrework/icons/stasisbag.dmi' + icon = 'modular_nova/modules/stasisrework/icons/stasisbag.dmi' icon_state = "greenbodybag" foldedbag_path = /obj/item/bodybag/stasis mob_storage_capacity = 1 diff --git a/modular_skyrat/modules/stasisrework/code/machine_circuitboards.dm b/modular_nova/modules/stasisrework/code/machine_circuitboards.dm similarity index 100% rename from modular_skyrat/modules/stasisrework/code/machine_circuitboards.dm rename to modular_nova/modules/stasisrework/code/machine_circuitboards.dm diff --git a/modular_nova/modules/stasisrework/code/medical_designs.dm b/modular_nova/modules/stasisrework/code/medical_designs.dm new file mode 100644 index 00000000000000..322af325716cc5 --- /dev/null +++ b/modular_nova/modules/stasisrework/code/medical_designs.dm @@ -0,0 +1,25 @@ +/datum/design/stasisbag + name = "Stasis Body Bag" + desc = "A stasis body bag, powered by cryogenic stasis technology. It can hold only one body, but it prevents decay." + id = "stasisbag" + build_type = PROTOLATHE | AWAY_LATHE + build_path = /obj/item/bodybag/stasis + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/plasma = SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + ) + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/board/stasissleeper + name = "Machine Design (Lifeform Stasis Unit)" + desc = "The circuit board for a Stasis Unit" + id = "stasissleeper" + build_path = /obj/item/circuitboard/machine/stasissleeper + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_MEDICAL, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL diff --git a/modular_skyrat/modules/stasisrework/code/stasissleeper.dm b/modular_nova/modules/stasisrework/code/stasissleeper.dm similarity index 95% rename from modular_skyrat/modules/stasisrework/code/stasissleeper.dm rename to modular_nova/modules/stasisrework/code/stasissleeper.dm index ffeb12dc56e310..aae9ddbd59f481 100644 --- a/modular_skyrat/modules/stasisrework/code/stasissleeper.dm +++ b/modular_nova/modules/stasisrework/code/stasissleeper.dm @@ -2,7 +2,7 @@ /obj/machinery/stasissleeper name = "lifeform stasis unit" desc = "A somewhat comfortable looking bed with a cover over it. It will keep someone in stasis." - icon = 'modular_skyrat/modules/stasisrework/icons/stasissleeper.dmi' + icon = 'modular_nova/modules/stasisrework/icons/stasissleeper.dmi' icon_state = "sleeper" base_icon_state = "sleeper" density = FALSE @@ -75,7 +75,7 @@ visible_message(span_notice("[occupant] emerges from [src]!"), span_notice("You climb out of [src]!")) open_machine() - if(IS_IN_STASIS(user)) + if(HAS_TRAIT(user, TRAIT_STASIS)) thaw_them(user) /obj/machinery/stasissleeper/proc/stasis_running() @@ -112,9 +112,9 @@ return var/mob/living/L_occupant = occupant if(stasis_running()) - if(!IS_IN_STASIS(L_occupant)) + if(!HAS_TRAIT(L_occupant, TRAIT_STASIS)) chill_out(L_occupant) - else if(IS_IN_STASIS(L_occupant)) + else if(HAS_TRAIT(L_occupant, TRAIT_STASIS)) thaw_them(L_occupant) /obj/machinery/stasissleeper/screwdriver_act(mob/living/user, obj/item/used_item) @@ -142,7 +142,7 @@ /obj/machinery/stasissleeper/default_pry_open(obj/item/used_item) if(occupant) thaw_them(occupant) - . = !(state_open || panel_open || (flags_1 & NODECONSTRUCT_1)) && used_item.tool_behaviour == TOOL_CROWBAR + . = !(state_open || panel_open || (obj_flags & NO_DECONSTRUCTION)) && used_item.tool_behaviour == TOOL_CROWBAR if(.) used_item.play_tool_sound(src, 50) visible_message(span_notice("[usr] pries open [src]."), span_notice("You pry open [src].")) diff --git a/modular_skyrat/modules/stasisrework/icons/stasisbag.dmi b/modular_nova/modules/stasisrework/icons/stasisbag.dmi similarity index 100% rename from modular_skyrat/modules/stasisrework/icons/stasisbag.dmi rename to modular_nova/modules/stasisrework/icons/stasisbag.dmi diff --git a/modular_skyrat/modules/stasisrework/icons/stasissleeper.dmi b/modular_nova/modules/stasisrework/icons/stasissleeper.dmi similarity index 100% rename from modular_skyrat/modules/stasisrework/icons/stasissleeper.dmi rename to modular_nova/modules/stasisrework/icons/stasissleeper.dmi diff --git a/modular_skyrat/modules/stasisrework/readme.md b/modular_nova/modules/stasisrework/readme.md similarity index 100% rename from modular_skyrat/modules/stasisrework/readme.md rename to modular_nova/modules/stasisrework/readme.md diff --git a/modular_skyrat/modules/station_traits/code/station_traits.dm b/modular_nova/modules/station_traits/code/station_traits.dm similarity index 100% rename from modular_skyrat/modules/station_traits/code/station_traits.dm rename to modular_nova/modules/station_traits/code/station_traits.dm diff --git a/modular_skyrat/modules/station_traits/readme.md b/modular_nova/modules/station_traits/readme.md similarity index 100% rename from modular_skyrat/modules/station_traits/readme.md rename to modular_nova/modules/station_traits/readme.md diff --git a/modular_skyrat/modules/stone/code/ore_veins.dm b/modular_nova/modules/stone/code/ore_veins.dm similarity index 98% rename from modular_skyrat/modules/stone/code/ore_veins.dm rename to modular_nova/modules/stone/code/ore_veins.dm index bfacd0768b7f09..a9fdd9f32884c9 100644 --- a/modular_skyrat/modules/stone/code/ore_veins.dm +++ b/modular_nova/modules/stone/code/ore_veins.dm @@ -1,7 +1,7 @@ /obj/structure/ore_vein name = "ore vein" desc = "An ore vein that can mined." - icon = 'modular_skyrat/modules/stone/icons/ore.dmi' + icon = 'modular_nova/modules/stone/icons/ore.dmi' icon_state = "stone1" base_icon_state = "stone" density = TRUE diff --git a/modular_skyrat/modules/stone/code/stone.dm b/modular_nova/modules/stone/code/stone.dm similarity index 82% rename from modular_skyrat/modules/stone/code/stone.dm rename to modular_nova/modules/stone/code/stone.dm index e41ac38f34448a..22ecfc36b62771 100644 --- a/modular_skyrat/modules/stone/code/stone.dm +++ b/modular_nova/modules/stone/code/stone.dm @@ -2,11 +2,12 @@ name = "stone" desc = "Stone brick." singular_name = "stone block" - icon = 'modular_skyrat/modules/stone/icons/ore.dmi' + icon = 'modular_nova/modules/stone/icons/ore.dmi' icon_state = "sheet-stone" inhand_icon_state = "sheet-metal" mats_per_unit = list(/datum/material/stone=SHEET_MATERIAL_AMOUNT) - throwforce = 10 + force = 10 + throwforce = 15 resistance_flags = FIRE_PROOF merge_type = /obj/item/stack/sheet/mineral/stone grind_results = null @@ -21,6 +22,9 @@ GLOBAL_LIST_INIT(stone_recipes, list ( \ new/datum/stack_recipe("stone brick wall", /turf/closed/wall/mineral/stone, 5, one_per_turf = 1, on_solid_ground = 1, applies_mats = TRUE, category = CAT_STRUCTURE), \ new/datum/stack_recipe("stone brick tile", /obj/item/stack/tile/mineral/stone, 1, 4, 20, check_density = FALSE, category = CAT_TILES), new/datum/stack_recipe("millstone", /obj/structure/millstone, 6, one_per_turf = 1, on_solid_ground = 1, category = CAT_STRUCTURE), + new/datum/stack_recipe("stone stove", /obj/machinery/primitive_stove, 5, one_per_turf = 1, on_solid_ground = 1, category = CAT_STRUCTURE), + new/datum/stack_recipe("stone oven", /obj/machinery/oven/stone, 5, one_per_turf = 1, on_solid_ground = 1, category = CAT_STRUCTURE), + new/datum/stack_recipe("stone griddle", /obj/machinery/griddle/stone, 5, one_per_turf = 1, on_solid_ground = 1, category = CAT_STRUCTURE), )) /obj/item/stack/sheet/mineral/stone/get_main_recipes() @@ -44,11 +48,13 @@ GLOBAL_LIST_INIT(stone_recipes, list ( \ /obj/item/stack/stone name = "rough stone" desc = "Large chunks of uncut stone, tough enough to safely build out of... if you could manage to cut them into something usable." - icon = 'modular_skyrat/modules/stone/icons/ore.dmi' + icon = 'modular_nova/modules/stone/icons/ore.dmi' icon_state = "stone_ore" singular_name = "rough stone boulder" mats_per_unit = list(/datum/material/stone = SHEET_MATERIAL_AMOUNT) merge_type = /obj/item/stack/stone + force = 10 + throwforce = 15 /obj/item/stack/stone/examine() . = ..() @@ -73,7 +79,7 @@ GLOBAL_LIST_INIT(stone_recipes, list ( \ inhand_icon_state = "tile" turf_type = /turf/open/floor/stone mineralType = "stone" - mats_per_unit = list(/datum/material/stone= SMALL_MATERIAL_AMOUNT * 5) + mats_per_unit = list(/datum/material/stone= HALF_SHEET_MATERIAL_AMOUNT) merge_type = /obj/item/stack/tile/mineral/stone /turf/open/floor/stone @@ -82,7 +88,7 @@ GLOBAL_LIST_INIT(stone_recipes, list ( \ /turf/closed/wall/mineral/stone name = "stone wall" desc = "A wall made of solid stone bricks." - icon = 'modular_skyrat/modules/stone/icons/wall.dmi' + icon = 'modular_nova/modules/stone/icons/wall.dmi' icon_state = "wall-0" base_icon_state = "wall" sheet_type = /obj/item/stack/sheet/mineral/stone @@ -90,7 +96,9 @@ GLOBAL_LIST_INIT(stone_recipes, list ( \ smoothing_flags = SMOOTH_BITMASK smoothing_groups = SMOOTH_GROUP_STONE_WALLS + SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS canSmoothWith = SMOOTH_GROUP_STONE_WALLS - custom_materials = list(/datum/material/stone = SHEET_MATERIAL_AMOUNT * 2) + custom_materials = list( + /datum/material/stone = SHEET_MATERIAL_AMOUNT * 2, + ) /turf/closed/wall/mineral/stone/try_decon(obj/item/item_used, mob/user) // Lets you break down stone walls with stone breaking tools if(item_used.tool_behaviour != TOOL_MINING) @@ -109,20 +117,23 @@ GLOBAL_LIST_INIT(stone_recipes, list ( \ /turf/closed/indestructible/stone name = "stone wall" desc = "A wall made of unusually solid stone bricks." - icon = 'modular_skyrat/modules/stone/icons/wall.dmi' + icon = 'modular_nova/modules/stone/icons/wall.dmi' icon_state = "wall-0" base_icon_state = "wall" smoothing_flags = SMOOTH_BITMASK smoothing_groups = SMOOTH_GROUP_STONE_WALLS + SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS canSmoothWith = SMOOTH_GROUP_STONE_WALLS - custom_materials = list(/datum/material/stone = SHEET_MATERIAL_AMOUNT * 2) // Does this even need materials? + custom_materials = list( + /datum/material/stone = SHEET_MATERIAL_AMOUNT * 2, + ) /obj/structure/falsewall/stone name = "stone wall" desc = "A wall made of solid stone bricks." - icon = 'modular_skyrat/modules/stone/icons/wall.dmi' - icon_state = "wall-0" + icon = 'modular_nova/modules/stone/icons/wall.dmi' + icon_state = "wall-open" base_icon_state = "wall" + fake_icon = 'modular_nova/modules/stone/icons/wall.dmi' mineral = /obj/item/stack/sheet/mineral/stone walltype = /turf/closed/wall/mineral/stone smoothing_flags = SMOOTH_BITMASK diff --git a/modular_skyrat/modules/stone/icons/ore.dmi b/modular_nova/modules/stone/icons/ore.dmi similarity index 100% rename from modular_skyrat/modules/stone/icons/ore.dmi rename to modular_nova/modules/stone/icons/ore.dmi diff --git a/modular_nova/modules/stone/icons/wall.dmi b/modular_nova/modules/stone/icons/wall.dmi new file mode 100644 index 00000000000000..1384db4a89a006 Binary files /dev/null and b/modular_nova/modules/stone/icons/wall.dmi differ diff --git a/modular_nova/modules/stormtrooper/code/stormtrooper_clothes.dm b/modular_nova/modules/stormtrooper/code/stormtrooper_clothes.dm new file mode 100644 index 00000000000000..9628bf981a643e --- /dev/null +++ b/modular_nova/modules/stormtrooper/code/stormtrooper_clothes.dm @@ -0,0 +1,36 @@ +/obj/item/clothing/head/helmet/stormtrooper + name = "stormtrooper helmet" + desc = "A shiny white helmet with some very narrow holes for the users eyes." + icon = 'modular_nova/modules/stormtrooper/icons/items.dmi' + worn_icon = 'modular_nova/modules/stormtrooper/icons/head.dmi' + icon_state = "stormtrooper_helmet" + supports_variations_flags = NONE + +/obj/item/clothing/suit/armor/stormtrooper + name = "stormtrooper suit" + desc = "A shiny white armoured suit, looks like it'd be good for deflecting blaster fire." + icon_state = "stormtrooper_suit" + icon = 'modular_nova/modules/stormtrooper/icons/items.dmi' + worn_icon = 'modular_nova/modules/stormtrooper/icons/suit.dmi' + supports_variations_flags = NONE + +/obj/item/clothing/shoes/combat/stormtrooper + name = "stormtrooper boots" + desc = "A pair of white boots." + icon = 'modular_nova/modules/stormtrooper/icons/items.dmi' + worn_icon = 'modular_nova/modules/stormtrooper/icons/feet.dmi' + icon_state = "stormtrooper_boots" + armor_type = /datum/armor/none + strip_delay = 30 + equip_delay_other = 50 + resistance_flags = NONE + can_be_tied = FALSE + supports_variations_flags = NONE + +/obj/item/clothing/gloves/combat/peacekeeper/stormtrooper + name = "stormtrooper gloves" + desc = "White gloves with some limited reflective armor." + icon = 'modular_nova/modules/stormtrooper/icons/items.dmi' + worn_icon = 'modular_nova/modules/stormtrooper/icons/hands.dmi' + icon_state = "stormtrooper_gloves" + worn_icon_state = "stormtrooper_gloves" diff --git a/modular_skyrat/modules/stormtrooper/icons/feet.dmi b/modular_nova/modules/stormtrooper/icons/feet.dmi similarity index 100% rename from modular_skyrat/modules/stormtrooper/icons/feet.dmi rename to modular_nova/modules/stormtrooper/icons/feet.dmi diff --git a/modular_skyrat/modules/stormtrooper/icons/hands.dmi b/modular_nova/modules/stormtrooper/icons/hands.dmi similarity index 100% rename from modular_skyrat/modules/stormtrooper/icons/hands.dmi rename to modular_nova/modules/stormtrooper/icons/hands.dmi diff --git a/modular_skyrat/modules/stormtrooper/icons/head.dmi b/modular_nova/modules/stormtrooper/icons/head.dmi similarity index 100% rename from modular_skyrat/modules/stormtrooper/icons/head.dmi rename to modular_nova/modules/stormtrooper/icons/head.dmi diff --git a/modular_skyrat/modules/stormtrooper/icons/items.dmi b/modular_nova/modules/stormtrooper/icons/items.dmi similarity index 100% rename from modular_skyrat/modules/stormtrooper/icons/items.dmi rename to modular_nova/modules/stormtrooper/icons/items.dmi diff --git a/modular_skyrat/modules/stormtrooper/icons/suit.dmi b/modular_nova/modules/stormtrooper/icons/suit.dmi similarity index 100% rename from modular_skyrat/modules/stormtrooper/icons/suit.dmi rename to modular_nova/modules/stormtrooper/icons/suit.dmi diff --git a/modular_skyrat/modules/subsystems/code/ticket_ping/adminhelp.dm b/modular_nova/modules/subsystems/code/ticket_ping/adminhelp.dm similarity index 100% rename from modular_skyrat/modules/subsystems/code/ticket_ping/adminhelp.dm rename to modular_nova/modules/subsystems/code/ticket_ping/adminhelp.dm diff --git a/modular_skyrat/modules/subsystems/code/ticket_ping/preference.dm b/modular_nova/modules/subsystems/code/ticket_ping/preference.dm similarity index 100% rename from modular_skyrat/modules/subsystems/code/ticket_ping/preference.dm rename to modular_nova/modules/subsystems/code/ticket_ping/preference.dm diff --git a/modular_skyrat/modules/subsystems/code/ticket_ping/ticket_ss.dm b/modular_nova/modules/subsystems/code/ticket_ping/ticket_ss.dm similarity index 94% rename from modular_skyrat/modules/subsystems/code/ticket_ping/ticket_ss.dm rename to modular_nova/modules/subsystems/code/ticket_ping/ticket_ss.dm index f80567641a0cab..cb0f54d9eaaec7 100644 --- a/modular_skyrat/modules/subsystems/code/ticket_ping/ticket_ss.dm +++ b/modular_nova/modules/subsystems/code/ticket_ping/ticket_ss.dm @@ -36,5 +36,5 @@ SUBSYSTEM_DEF(ticket_ping) message_admins(span_adminnotice("There [is_or_are] currently [valid_ahelps ? "[valid_ahelps] unhandled staff ticket[valid_ahelps == 1 ? "" : "s"] open" : ""][(valid_ahelps && valid_opfors) ? " and " : ""][valid_opfors ? "[valid_opfors] unhandled Opposing Force application[valid_opfors == 1 ? "" : "s"] open" : ""].")) for(var/client/staff as anything in GLOB.admins) if(staff?.prefs.read_preference(/datum/preference/toggle/admin/ticket_ping)) - SEND_SOUND(staff, sound('modular_skyrat/modules/subsystems/sounds/soft_ping.ogg')) + SEND_SOUND(staff, sound('modular_nova/modules/subsystems/sounds/soft_ping.ogg')) window_flash(staff, ignorepref = TRUE) diff --git a/modular_skyrat/modules/subsystems/readme.md b/modular_nova/modules/subsystems/readme.md similarity index 100% rename from modular_skyrat/modules/subsystems/readme.md rename to modular_nova/modules/subsystems/readme.md diff --git a/modular_skyrat/modules/subsystems/sounds/soft_ping.ogg b/modular_nova/modules/subsystems/sounds/soft_ping.ogg similarity index 100% rename from modular_skyrat/modules/subsystems/sounds/soft_ping.ogg rename to modular_nova/modules/subsystems/sounds/soft_ping.ogg diff --git a/modular_skyrat/modules/suicide_verb/readme.md b/modular_nova/modules/suicide_verb/readme.md similarity index 100% rename from modular_skyrat/modules/suicide_verb/readme.md rename to modular_nova/modules/suicide_verb/readme.md diff --git a/modular_nova/modules/supersoups/code/soup_mixtures.dm b/modular_nova/modules/supersoups/code/soup_mixtures.dm new file mode 100644 index 00000000000000..fb1c0964201d80 --- /dev/null +++ b/modular_nova/modules/supersoups/code/soup_mixtures.dm @@ -0,0 +1,17 @@ +/datum/chemical_reaction/food/soup/clean_up(datum/reagents/holder, datum/equilibrium/reaction, react_vol) + . = ..() + if(!length(results)) + return + + var/obj/item/reagent_containers/cup/soup_pot/our_pot = holder.my_atom + if(!istype(our_pot) || !our_pot.emulsify_reagents) + return + + var/souptype = results[1] + var/list/cached_reagents = holder.reagent_list + for(var/datum/reagent/whatever as anything in cached_reagents) + if(whatever.type == souptype) + continue + var/new_vol = whatever.volume + holder.del_reagent(whatever.type) + holder.add_reagent(souptype, new_vol) diff --git a/modular_nova/modules/supersoups/code/stove.dm b/modular_nova/modules/supersoups/code/stove.dm new file mode 100644 index 00000000000000..d1368f6dabae62 --- /dev/null +++ b/modular_nova/modules/supersoups/code/stove.dm @@ -0,0 +1,14 @@ +// clean soups +/obj/item/reagent_containers/cup/soup_pot + /// Whether or not the pot is set to clean other reagents from soups + var/emulsify_reagents + +/obj/item/reagent_containers/cup/soup_pot/examine(mob/user) + . = ..() + . += "You can enable/disable soup cleaning by alt-right-clicking [src]." + +// alt-right click toggles whether soups will get cleaned +/obj/item/reagent_containers/cup/soup_pot/alt_click_secondary(mob/user) + emulsify_reagents = !emulsify_reagents + balloon_alert(user, "Soup cleaning [emulsify_reagents ? "enabled" : "disabled"]!") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN diff --git a/modular_nova/modules/synths/code/README.md b/modular_nova/modules/synths/code/README.md new file mode 100644 index 00000000000000..324199464cd2d0 --- /dev/null +++ b/modular_nova/modules/synths/code/README.md @@ -0,0 +1,32 @@ +https://github.com/Skyrat-SS13/Skyrat-tg/pull/18193, plus many others, which I can't find easily. + +## Synths + +Module ID: SYNTHS + +### Description: + +Adds in a roundstart robotic race. Currently in a very sad state, and is being worked on by RimiNosha at the moment. + +### TG Proc/File Changes: + +- defib.dm: /obj/item/shockpaddles/proc/do_help() modified +- Will fill out as I discover what edits were made to acommodate these. + +### Modular Overrides: + +- Will fill out as I discover what edits were made to acommodate these. + +### Defines: + +- ~nova_defines/medical_defines.dm: SYNTH_DEFIBBED_TRAUMA_DURATION +- ~nova_defines/medical_defines.dm: SYNTH_DEFIBBED_TRAUMA_SEVERITY + +### Included files that are not contained in this module: + +- N/A + +### Credits: +Niko - Making defibs fuck synths up +Nerevar - Initial code, I think. Correct this file if wrong. +RimiNosha - Updating the code and adding various QoL features. diff --git a/modular_nova/modules/synths/code/bodyparts/brain.dm b/modular_nova/modules/synths/code/bodyparts/brain.dm new file mode 100644 index 00000000000000..94e9aab53f05ef --- /dev/null +++ b/modular_nova/modules/synths/code/bodyparts/brain.dm @@ -0,0 +1,66 @@ +/obj/item/organ/internal/brain/synth + name = "compact positronic brain" + slot = ORGAN_SLOT_BRAIN + zone = BODY_ZONE_CHEST + organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES + maxHealth = 2 * STANDARD_ORGAN_THRESHOLD + desc = "A cube of shining metal, four inches to a side and covered in shallow grooves. It has an IPC serial number engraved on the top. It is usually slotted into the chest of synthetic crewmembers." + icon = 'modular_nova/master_files/icons/obj/surgery.dmi' + icon_state = "posibrain-ipc" + /// The last time (in ticks) a message about brain damage was sent. Don't touch. + var/last_message_time = 0 + +/obj/item/organ/internal/brain/synth/mob_insert(mob/living/carbon/brain_owner, special, movement_flags) + . = ..() + + if(brain_owner.stat != DEAD || !ishuman(brain_owner)) + return + + var/mob/living/carbon/human/human_brain_owner = brain_owner + if(HAS_TRAIT(human_brain_owner, TRAIT_REVIVES_BY_HEALING) && human_brain_owner.health > SYNTH_BRAIN_WAKE_THRESHOLD) + human_brain_owner.revive(FALSE) + +/obj/item/organ/internal/brain/synth/emp_act(severity) // EMP act against the posi, keep the cap far below the organ health + . = ..() + + if(!owner || . & EMP_PROTECT_SELF) + return + + if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people. + COOLDOWN_START(src, severe_cooldown, 10 SECONDS) + + switch(severity) + if(EMP_HEAVY) + to_chat(owner, span_warning("01001001 00100111 01101101 00100000 01100110 01110101 01100011 01101011 01100101 01100100 00101110")) + apply_organ_damage(SYNTH_ORGAN_HEAVY_EMP_DAMAGE, SYNTH_EMP_BRAIN_DAMAGE_MAXIMUM, required_organ_flag = ORGAN_ROBOTIC) + if(EMP_LIGHT) + to_chat(owner, span_warning("Alert: Electromagnetic damage taken in central processing unit. Error Code: 401-YT")) + apply_organ_damage(SYNTH_ORGAN_LIGHT_EMP_DAMAGE, SYNTH_EMP_BRAIN_DAMAGE_MAXIMUM, required_organ_flag = ORGAN_ROBOTIC) + +/obj/item/organ/internal/brain/synth/apply_organ_damage(damage_amount, maximumm, required_organ_flag) + . = ..() + + if(owner && damage > 0 && (world.time - last_message_time) > SYNTH_BRAIN_DAMAGE_MESSAGE_INTERVAL) + last_message_time = world.time + + if(damage > BRAIN_DAMAGE_SEVERE) + to_chat(owner, span_warning("Alre: re oumtnin ilir tocorr:pa ni ne:cnrrpiioruloomatt cessingode: P1_1-H")) + return + + if(damage > BRAIN_DAMAGE_MILD) + to_chat(owner, span_warning("Alert: Minor corruption in central processing unit. Error Code: 001-HP")) + +/obj/item/organ/internal/brain/synth/circuit + name = "compact AI circuit" + desc = "A compact and extremely complex circuit, perfectly dimensioned to fit in the same slot as a synthetic-compatible positronic brain. It is usually slotted into the chest of synthetic crewmembers." + icon = 'modular_nova/master_files/icons/obj/alt_silicon_brains.dmi' + icon_state = "circuit-occupied" + inhand_icon_state = "electronic" + lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' + +/obj/item/organ/internal/brain/synth/mmi + name = "compact man-machine interface" + desc = "A compact man-machine interface, perfectly dimensioned to fit in the same slot as a synthetic-compatible positronic brain. Unfortunately, the brain seems to be permanently attached to the circuitry, and it seems relatively sensitive to it's environment. It is usually slotted into the chest of synthetic crewmembers." + icon = 'modular_nova/master_files/icons/obj/surgery.dmi' + icon_state = "mmi-ipc" diff --git a/modular_nova/modules/synths/code/bodyparts/ears.dm b/modular_nova/modules/synths/code/bodyparts/ears.dm new file mode 100644 index 00000000000000..a16950e831410d --- /dev/null +++ b/modular_nova/modules/synths/code/bodyparts/ears.dm @@ -0,0 +1,48 @@ +/obj/item/organ/internal/ears/synth + name = "auditory sensors" + icon = 'modular_nova/master_files/icons/obj/surgery.dmi' + icon_state = "ears-ipc" + desc = "A pair of microphones intended to be installed in an IPC or Synthetics head, that grant the ability to hear." + zone = BODY_ZONE_HEAD + slot = ORGAN_SLOT_EARS + gender = PLURAL + maxHealth = 1 * STANDARD_ORGAN_THRESHOLD + organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES + +/obj/item/organ/internal/ears/synth/emp_act(severity) + . = ..() + + if(!owner || . & EMP_PROTECT_SELF) + return + + if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people. + COOLDOWN_START(src, severe_cooldown, 10 SECONDS) + + switch(severity) + if(EMP_HEAVY) + owner.set_jitter_if_lower(SYNTH_BAD_EFFECT_DURATION * SYNTH_HEAVY_EMP_MULTIPLIER) + owner.set_dizzy_if_lower(SYNTH_BAD_EFFECT_DURATION * SYNTH_HEAVY_EMP_MULTIPLIER) + adjustEarDamage(SYNTH_ORGAN_HEAVY_EMP_DAMAGE, SYNTH_DEAF_STACKS) + to_chat(owner, span_warning("Alert: Null feedback from auditory sensors detected, seek maintenance immediately. Error Code: AS-105")) + + if(EMP_LIGHT) + owner.set_jitter_if_lower(SYNTH_BAD_EFFECT_DURATION) + owner.set_dizzy_if_lower(SYNTH_BAD_EFFECT_DURATION) + adjustEarDamage(SYNTH_ORGAN_LIGHT_EMP_DAMAGE, SYNTH_DEAF_STACKS) + to_chat(owner, span_warning("Alert: Anomalous feedback from auditory sensors detected. Error Code: AS-50")) + +/datum/design/synth_ears + name = "Auditory Sensors" + desc = "A pair of microphones intended to be installed in an IPC or Synthetics head, that grant the ability to hear." + id = "synth_ears" + build_type = PROTOLATHE | AWAY_LATHE | MECHFAB + construction_time = 4 SECONDS + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/organ/internal/ears/synth + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1 + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE diff --git a/modular_skyrat/modules/synths/code/bodyparts/eyes.dm b/modular_nova/modules/synths/code/bodyparts/eyes.dm similarity index 89% rename from modular_skyrat/modules/synths/code/bodyparts/eyes.dm rename to modular_nova/modules/synths/code/bodyparts/eyes.dm index 79dfa299bc0e7c..afa938dfdd8185 100644 --- a/modular_skyrat/modules/synths/code/bodyparts/eyes.dm +++ b/modular_nova/modules/synths/code/bodyparts/eyes.dm @@ -2,8 +2,6 @@ name = "optical sensors" icon_state = "cybernetic_eyeballs" desc = "A very basic set of optical sensors with no extra vision modes or functions." - zone = BODY_ZONE_HEAD - slot = ORGAN_SLOT_EYES maxHealth = 1 * STANDARD_ORGAN_THRESHOLD organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES @@ -28,8 +26,8 @@ build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 4 SECONDS materials = list( - /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, - /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, ) build_path = /obj/item/organ/internal/eyes/synth category = list( diff --git a/modular_nova/modules/synths/code/bodyparts/heart.dm b/modular_nova/modules/synths/code/bodyparts/heart.dm new file mode 100644 index 00000000000000..3765a6fc0012f2 --- /dev/null +++ b/modular_nova/modules/synths/code/bodyparts/heart.dm @@ -0,0 +1,44 @@ +/obj/item/organ/internal/heart/synth + name = "hydraulic pump engine" + desc = "An electronic device that handles the hydraulic pumps, powering one's robotic limbs. Without this, synthetics are unable to move." + organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES + icon = 'modular_nova/master_files/icons/obj/surgery.dmi' + icon_state = "heart-ipc-on" + base_icon_state = "heart-ipc" + maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD // 1.5x due to synthcode.tm being weird + zone = BODY_ZONE_CHEST + slot = ORGAN_SLOT_HEART + var/last_message_time = 0 + +/obj/item/organ/internal/heart/synth/emp_act(severity) + . = ..() + + if(!owner || . & EMP_PROTECT_SELF) + return + + if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people. + COOLDOWN_START(src, severe_cooldown, 10 SECONDS) + + switch(severity) + if(EMP_HEAVY) + to_chat(owner, span_warning("Alert: Main hydraulic pump control has taken severe damage, seek maintenance immediately. Error code: HP300-10.")) + apply_organ_damage(SYNTH_ORGAN_HEAVY_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC) + if(EMP_LIGHT) + to_chat(owner, span_warning("Alert: Main hydraulic pump control has taken light damage, seek maintenance immediately. Error code: HP300-05.")) + apply_organ_damage(SYNTH_ORGAN_LIGHT_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC) + +/datum/design/synth_heart + name = "Hydraulic Pump Engine" + desc = "An electronic device that handles the hydraulic pumps, powering one's robotic limbs. Without this, synthetics are unable to move." + id = "synth_heart" + build_type = PROTOLATHE | AWAY_LATHE | MECHFAB + construction_time = 4 SECONDS + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/organ/internal/heart/synth + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1 + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE diff --git a/modular_nova/modules/synths/code/bodyparts/internal_computer/brain.dm b/modular_nova/modules/synths/code/bodyparts/internal_computer/brain.dm new file mode 100644 index 00000000000000..9b65b3f6772ca2 --- /dev/null +++ b/modular_nova/modules/synths/code/bodyparts/internal_computer/brain.dm @@ -0,0 +1,11 @@ +/obj/item/organ/internal/brain/synth + var/obj/item/modular_computer/pda/synth/internal_computer + actions_types = list(/datum/action/item_action/synth/open_internal_computer) + +/obj/item/organ/internal/brain/synth/Initialize(mapload) + . = ..() + internal_computer = new(src) + +/obj/item/organ/internal/brain/synth/Destroy() + QDEL_NULL(internal_computer) + return ..() diff --git a/modular_nova/modules/synths/code/bodyparts/internal_computer/internal_computer.dm b/modular_nova/modules/synths/code/bodyparts/internal_computer/internal_computer.dm new file mode 100644 index 00000000000000..7b1fc4d7c3c062 --- /dev/null +++ b/modular_nova/modules/synths/code/bodyparts/internal_computer/internal_computer.dm @@ -0,0 +1,138 @@ +/// Custom computer for synth brains +/obj/item/modular_computer/pda/synth + name = "virtual persocom" + + base_active_power_usage = 0 + base_idle_power_usage = 0 + + long_ranged = TRUE //Synths have good antennae + + max_idle_programs = 3 + + max_capacity = 64 + +/obj/item/modular_computer/pda/synth/Initialize(mapload) + . = ..() + + // prevent these from being created outside of synth brains + if(!istype(loc, /obj/item/organ/internal/brain/synth)) + return INITIALIZE_HINT_QDEL + +/datum/action/item_action/synth/open_internal_computer + name = "Open persocom emulation" + desc = "Accesses your built-in virtual machine." + check_flags = AB_CHECK_CONSCIOUS + +/datum/action/item_action/synth/open_internal_computer/Trigger(trigger_flags) + . = ..() + var/obj/item/organ/internal/brain/synth/targetmachine = target + targetmachine.internal_computer.interact(owner) + +/obj/item/modular_computer/pda/synth/ui_state(mob/user) + return GLOB.default_state + +/obj/item/modular_computer/pda/synth/ui_status(mob/user) + var/obj/item/organ/internal/brain/synth/brain_loc = loc + if(!istype(brain_loc)) + return UI_CLOSE + + if(!QDELETED(brain_loc.owner)) + return min( + ui_status_user_is_abled(user, src), + ui_status_only_living(user), + ui_status_user_is_adjacent(user, brain_loc.owner), + ) + return ..() + +/obj/item/modular_computer/pda/synth/RemoveID(mob/user) + var/obj/item/organ/internal/brain/synth/brain_loc = loc + if(!istype(brain_loc)) + return ..() + + if(!computer_id_slot) + return ..() + + if(crew_manifest_update) + GLOB.manifest.modify(computer_id_slot.registered_name, computer_id_slot.assignment, computer_id_slot.get_trim_assignment()) + + if(user && !issilicon(user) && in_range(brain_loc.owner || brain_loc, user)) + user.put_in_hands(computer_id_slot) + else + computer_id_slot.forceMove(brain_loc.owner ? brain_loc.owner.drop_location() : brain_loc.drop_location()) //We actually update the physical on brain removal/insert + + computer_id_slot = null + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + balloon_alert(user, "removed ID") + +/obj/item/modular_computer/pda/synth/get_ntnet_status() + . = NTNET_NO_SIGNAL + // NTNet is down and we are not connected via wired connection. The synth is no more + var/obj/item/organ/internal/brain/synth/brain_loc = loc + if(!istype(brain_loc)) + return + if(!find_functional_ntnet_relay() || isnull(brain_loc.owner)) + return + var/turf/current_turf = get_turf(brain_loc.owner || brain_loc) + if(is_station_level(current_turf.z)) + return NTNET_GOOD_SIGNAL + else if(long_ranged && !is_centcom_level(current_turf.z)) // Centcom is excluded because cafe + return NTNET_LOW_SIGNAL + +/* +So, I am not snowflaking more code.. except this +Attacking a synth with an id loads it into its slot.. pain and probably shitcode +*/ + +/obj/item/card/id/attack(mob/living/target_mob, mob/living/user, params) + var/mob/living/carbon/human/targetmachine = target_mob + if(!istype(targetmachine)) + return ..() + + var/obj/item/organ/internal/brain/synth/robotbrain = targetmachine.get_organ_slot(ORGAN_SLOT_BRAIN) + if(istype(robotbrain)) + if(user.zone_selected == BODY_ZONE_PRECISE_EYES) + balloon_alert(user, "Inserting ID into persocom slot...") + if(do_after(user, 5 SECONDS)) + balloon_alert(user, "ID slot interface registered!") + to_chat(targetmachine, span_notice("[user] inserts [src] into your persocom's card slot.")) + robotbrain.internal_computer.InsertID(src, user) + return + return ..() + +/obj/item/modular_computer/pda/attack(mob/living/target_mob, mob/living/user, params) + var/mob/living/carbon/human/targetmachine = target_mob + if(!istype(targetmachine)) + return ..() + + var/obj/item/organ/internal/brain/synth/robotbrain = targetmachine.get_organ_slot(ORGAN_SLOT_BRAIN) + if(istype(robotbrain)) + if(user.zone_selected == BODY_ZONE_PRECISE_EYES) + balloon_alert(user, "Establishing SSH login with persocom...") + if(do_after(user, 5 SECONDS)) + balloon_alert(user, "Connection established!") + to_chat(targetmachine, span_notice("[user] establishes an SSH connection between [src] and your persocom emulation.")) + robotbrain.internal_computer.interact(user) + return + return ..() + +/obj/item/modular_computer/pda/synth/get_header_data() + var/list/data = ..() + var/obj/item/organ/internal/brain/synth/brain_loc = loc + // Battery level is now according to the synth charge + if(istype(brain_loc)) + var/charge_level = (brain_loc.owner.nutrition / NUTRITION_LEVEL_ALMOST_FULL) * 100 + switch(charge_level) + if(80 to 110) + data["PC_batteryicon"] = "batt_100.gif" + if(60 to 80) + data["PC_batteryicon"] = "batt_80.gif" + if(40 to 60) + data["PC_batteryicon"] = "batt_60.gif" + if(20 to 40) + data["PC_batteryicon"] = "batt_40.gif" + if(5 to 20) + data["PC_batteryicon"] = "batt_20.gif" + else + data["PC_batteryicon"] = "batt_5.gif" + data["PC_batterypercent"] = "[round(charge_level)]%" + return data diff --git a/modular_skyrat/modules/synths/code/bodyparts/limbs.dm b/modular_nova/modules/synths/code/bodyparts/limbs.dm similarity index 100% rename from modular_skyrat/modules/synths/code/bodyparts/limbs.dm rename to modular_nova/modules/synths/code/bodyparts/limbs.dm diff --git a/modular_nova/modules/synths/code/bodyparts/liver.dm b/modular_nova/modules/synths/code/bodyparts/liver.dm new file mode 100644 index 00000000000000..3b7ee7410862c4 --- /dev/null +++ b/modular_nova/modules/synths/code/bodyparts/liver.dm @@ -0,0 +1,44 @@ +/obj/item/organ/internal/liver/synth + name = "reagent processing unit" + desc = "An electronic device that processes the beneficial chemicals for the synthetic user." + icon = 'modular_nova/master_files/icons/obj/surgery.dmi' + icon_state = "liver-ipc" + filterToxins = FALSE //We dont filter them, we're immune to them + zone = BODY_ZONE_CHEST + slot = ORGAN_SLOT_LIVER + maxHealth = 1 * STANDARD_ORGAN_THRESHOLD + organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES + +/obj/item/organ/internal/liver/synth/emp_act(severity) + . = ..() + + if(!owner || . & EMP_PROTECT_SELF) + return + + if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people. + COOLDOWN_START(src, severe_cooldown, 10 SECONDS) + + switch(severity) + if(EMP_HEAVY) + to_chat(owner, span_warning("Alert: Critical! Reagent processing unit failure, seek maintenance immediately. Error Code: DR-1k")) + apply_organ_damage(SYNTH_ORGAN_HEAVY_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC) + + if(EMP_LIGHT) + to_chat(owner, span_warning("Alert: Reagent processing unit failure, seek maintenance for diagnostic. Error Code: DR-0k")) + apply_organ_damage(SYNTH_ORGAN_LIGHT_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC) + +/datum/design/synth_liver + name = "Reagent Processing Unit" + desc = "An electronic device that processes the beneficial chemicals for the synthetic user." + id = "synth_liver" + build_type = PROTOLATHE | AWAY_LATHE | MECHFAB + construction_time = 4 SECONDS + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/organ/internal/liver/synth + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1 + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE diff --git a/modular_nova/modules/synths/code/bodyparts/lungs.dm b/modular_nova/modules/synths/code/bodyparts/lungs.dm new file mode 100644 index 00000000000000..6b87ff388c7456 --- /dev/null +++ b/modular_nova/modules/synths/code/bodyparts/lungs.dm @@ -0,0 +1,49 @@ +/obj/item/organ/internal/lungs/synth + name = "heatsink" + desc = "A device that transfers generated heat to a fluid medium to cool it down. Required to keep your synthetics cool-headed. It's shape resembles lungs." //Purposefully left the 'fluid medium' ambigious for interpretation of the character, whether it be air or fluid cooling + icon = 'modular_nova/master_files/icons/obj/surgery.dmi' + icon_state = "lungs-ipc" + safe_nitro_min = 0 + safe_co2_max = 0 + safe_plasma_min = 0 + safe_plasma_max = 0 + safe_oxygen_min = 0 //What are you doing man, dont breathe with those! + safe_oxygen_max = 0 + zone = BODY_ZONE_CHEST + slot = ORGAN_SLOT_LUNGS + maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD + organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES + +/obj/item/organ/internal/lungs/synth/emp_act(severity) + . = ..() + + if(!owner || . & EMP_PROTECT_SELF) + return + + if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people. + COOLDOWN_START(src, severe_cooldown, 10 SECONDS) + + switch(severity) + if(EMP_HEAVY) + to_chat(owner, span_warning("Alert: Critical cooling system failure! Seek maintenance immediately. Error Code: 5H-17")) + owner.adjust_bodytemperature(SYNTH_HEAVY_EMP_TEMPERATURE_POWER * TEMPERATURE_DAMAGE_COEFFICIENT) + + if(EMP_LIGHT) + to_chat(owner, span_warning("Alert: Major cooling system failure!")) + owner.adjust_bodytemperature(SYNTH_LIGHT_EMP_TEMPERATURE_POWER * TEMPERATURE_DAMAGE_COEFFICIENT) + +/datum/design/synth_heatsink + name = "Heatsink" + desc = "A device that transfers generated heat to a fluid medium to cool it down. Required to keep your synthetics cool-headed. It's shape resembles lungs." + id = "synth_lungs" + build_type = PROTOLATHE | AWAY_LATHE | MECHFAB + construction_time = 4 SECONDS + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/organ/internal/lungs/synth + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1 + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE diff --git a/modular_skyrat/modules/synths/code/bodyparts/power_cord.dm b/modular_nova/modules/synths/code/bodyparts/power_cord.dm similarity index 93% rename from modular_skyrat/modules/synths/code/bodyparts/power_cord.dm rename to modular_nova/modules/synths/code/bodyparts/power_cord.dm index 7adf8f6c411222..c8ff5bb58f6a25 100644 --- a/modular_skyrat/modules/synths/code/bodyparts/power_cord.dm +++ b/modular_nova/modules/synths/code/bodyparts/power_cord.dm @@ -38,7 +38,7 @@ to_chat(user, span_warning("There is no charge to draw from that APC.")) return - if(ipc.nutrition >= NUTRITION_LEVEL_WELL_FED) + if(ipc.nutrition >= NUTRITION_LEVEL_ALMOST_FULL) to_chat(user, span_warning("You are already fully charged!")) return @@ -62,7 +62,7 @@ user.visible_message(span_notice("[user] inserts a power connector into the [target_apc]."), span_notice("You begin to draw power from the [target_apc].")) while(TRUE) - var/power_needed = NUTRITION_LEVEL_WELL_FED - user.nutrition // How much charge do we need in total? + var/power_needed = NUTRITION_LEVEL_ALMOST_FULL - user.nutrition // How much charge do we need in total? // Do we even need anything? if(power_needed <= SYNTH_CHARGE_MIN * 2) // Times two to make sure minimum draw is always lower than this margin to prevent potential needless loops. to_chat(user, span_notice("You are fully charged.")) @@ -93,6 +93,11 @@ user.nutrition += power_use / SYNTH_CHARGE_PER_NUTRITION do_sparks(1, FALSE, target_apc) + if(target_apc.main_status <= APC_HAS_POWER) + target_apc.charging = APC_CHARGING + target_apc.update_appearance() + else + return user.visible_message(span_notice("[user] unplugs from the [target_apc]."), span_notice("You unplug from the [target_apc].")) #undef SYNTH_CHARGE_MAX diff --git a/modular_nova/modules/synths/code/bodyparts/silicon_alt_brains.dm b/modular_nova/modules/synths/code/bodyparts/silicon_alt_brains.dm new file mode 100644 index 00000000000000..4e87f4f3d95280 --- /dev/null +++ b/modular_nova/modules/synths/code/bodyparts/silicon_alt_brains.dm @@ -0,0 +1,101 @@ +// Don't know of a better place to put these. They're technically related to synths, so they're going here. + +/obj/item/mmi/posibrain/circuit + name = "compact AI circuit" + desc = "A compact circuit, perfectly dimensioned to fit in the same slot as a cyborg's positronic brain." + icon = 'modular_nova/master_files/icons/obj/alt_silicon_brains.dmi' + icon_state = "circuit" + base_icon_state = "circuit" + inhand_icon_state = "electronic" + lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' + + // It pains me to copy-paste so much, but I can't do it any other way + begin_activation_message = span_notice("You carefully locate the manual activation switch and start the compact AI circuit's boot process.") + success_message = span_notice("The compact AI circuit pings, and its lights start flashing. Success!") + fail_message = span_notice("The compact AI circuit buzzes quietly, and the golden lights fade away. Perhaps you could try again?") + new_mob_message = span_notice("The compact AI circuit chimes quietly.") + recharge_message = span_warning("The compact AI circuit isn't ready to activate again yet! Give it some time to recharge.") + +// CODE THAT ACTUALLY APPLIES THE BRAINS. +// See modular_nova/master_files/code/modules/client/preferences/brain.dm for Synth/IPC application. + +/// Returns a type to use based off of a given preference value (ORGAN_PREF_POSI_BRAIN, ORGAN_PREF_MMI_BRAIN and ORGAN_PREF_CIRCUIT_BRAIN), and if they're a cyborg or not. +/mob/living/proc/prefs_get_brain_to_use(value, is_cyborg = FALSE) + switch(value) + if(ORGAN_PREF_POSI_BRAIN) + return is_cyborg ? /obj/item/mmi/posibrain : /obj/item/organ/internal/brain/synth + + if(ORGAN_PREF_MMI_BRAIN) + return is_cyborg ? /obj/item/mmi : /obj/item/organ/internal/brain/synth/mmi + + if(ORGAN_PREF_CIRCUIT_BRAIN) + return is_cyborg ? /obj/item/mmi/posibrain/circuit : /obj/item/organ/internal/brain/synth/circuit + +/mob/living/silicon/robot/Initialize(mapload) + . = ..() + // Intentionally set like this, because people have different lore for their cyborgs, and there's no real non-invasive way to print posibrains that match. + RegisterSignal(src, COMSIG_MOB_MIND_TRANSFERRED_INTO, PROC_REF(on_mob_mind_transferred_into)) + +/mob/living/silicon/proc/on_mob_mind_transferred_into(mob/living/silicon/robot) + SIGNAL_HANDLER + + if(isnull(client)) + return + + transfer_silicon_prefs(client) + +/// Transfers the chat color pref to the silicon mob +/mob/living/silicon/proc/transfer_chat_color_pref(client/player_client) + // Read the chat color from prefs and apply it to the mob. Cache it as well in case of any voice changing shenanigans. + var/chat_color_pref = player_client?.prefs?.read_preference(/datum/preference/color/chat_color) + if(chat_color_pref && chat_color != chat_color_pref) + var/chat_color_pref_darkened = process_chat_color(chat_color_pref, sat_shift = 0.85, lum_shift = 0.85) + chat_color = chat_color_pref + chat_color_darkened = chat_color_pref_darkened + GLOB.chat_colors_by_mob_name[real_name] = list(chat_color, chat_color_darkened) + +/// Transfers the brain type pref to the silicon mob +/mob/living/silicon/proc/transfer_brain_pref(client/player_client) + return + +// This is only implemented for cyborgs at the moment. AI has their own weird way of doing things. +/mob/living/silicon/robot/transfer_brain_pref(client/player_client) + // Read the brain type from prefs and apply it to the mob. + var/obj/item/mmi/new_mmi = prefs_get_brain_to_use(player_client?.prefs?.read_preference(/datum/preference/choiced/brain_type), TRUE) + if(!mmi || !new_mmi || new_mmi == mmi.type) + return + new_mmi = new new_mmi(src) + + // Probably shitcode, but silicon code is spaghetti as fuck. + new_mmi.brain = new /obj/item/organ/internal/brain(new_mmi) + new_mmi.brain.organ_flags |= ORGAN_FROZEN + new_mmi.brain.name = "[real_name]'s brain" + new_mmi.name = "[initial(new_mmi.name)]: [real_name]" + new_mmi.set_brainmob(new /mob/living/brain(new_mmi)) + new_mmi.brainmob.name = src.real_name + new_mmi.brainmob.real_name = src.real_name + new_mmi.brainmob.container = new_mmi + new_mmi.update_appearance() + + QDEL_NULL(mmi) + + mmi = new_mmi + +/// Sets the MMI type for a cyborg/AI, if applicable, as well as the chat color +/mob/living/silicon/proc/transfer_silicon_prefs(client/player_client) + transfer_chat_color_pref(player_client) + transfer_brain_pref(player_client) + +/mob/living/silicon/robot/apply_prefs_job(client/player_client, datum/job/job) + . = ..() + transfer_silicon_prefs(player_client) + +/mob/living/silicon/ai/apply_prefs_job(client/player_client, datum/job/job) + . = ..() + transfer_silicon_prefs(player_client) + +// hooks into this proc in order to make sure chat color prefs get applied +/mob/living/silicon/robot/updatename(client/player_client) + . = ..() + transfer_chat_color_pref(player_client) diff --git a/modular_nova/modules/synths/code/bodyparts/stomach.dm b/modular_nova/modules/synths/code/bodyparts/stomach.dm new file mode 100644 index 00000000000000..686774162ec5e9 --- /dev/null +++ b/modular_nova/modules/synths/code/bodyparts/stomach.dm @@ -0,0 +1,66 @@ +/obj/item/organ/internal/stomach/synth + name = "synthetic bio-reactor" + icon = 'modular_nova/master_files/icons/obj/surgery.dmi' + icon_state = "stomach-ipc" + w_class = WEIGHT_CLASS_NORMAL + zone = BODY_ZONE_CHEST + slot = ORGAN_SLOT_STOMACH + maxHealth = 1 * STANDARD_ORGAN_THRESHOLD + zone = "chest" + slot = "stomach" + desc = "A specialised mini reactor, for synthetic use only. Has a low-power mode to ensure baseline functions. Without this, synthetics are unable to stay powered." + organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES + +/obj/item/organ/internal/stomach/synth/emp_act(severity) + . = ..() + + if(!owner || . & EMP_PROTECT_SELF) + return + + if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people. + COOLDOWN_START(src, severe_cooldown, 10 SECONDS) + + switch(severity) + if(EMP_HEAVY) + owner.nutrition = max(0, owner.nutrition - SYNTH_STOMACH_HEAVY_EMP_CHARGE_LOSS) + apply_organ_damage(SYNTH_ORGAN_HEAVY_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC) + to_chat(owner, span_warning("Alert: Severe battery discharge!")) + + if(EMP_LIGHT) + owner.nutrition = max(0, owner.nutrition - SYNTH_STOMACH_LIGHT_EMP_CHARGE_LOSS) + apply_organ_damage(SYNTH_ORGAN_LIGHT_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC) + to_chat(owner, span_warning("Alert: Minor battery discharge!")) + +/datum/design/synth_stomach + name = "Synthetic Bio-Reactor" + desc = "A specialised mini reactor, for synthetic use only. Has a low-power mode to ensure baseline functions. Without this, synthetics are unable to stay powered." + id = "synth_stomach" + build_type = PROTOLATHE | AWAY_LATHE | MECHFAB + construction_time = 4 SECONDS + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/organ/internal/stomach/synth + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1 + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE + +/obj/item/organ/internal/stomach/synth/Insert(mob/living/carbon/receiver, special, movement_flags) + . = ..() + RegisterSignal(receiver, COMSIG_PROCESS_BORGCHARGER_OCCUPANT, PROC_REF(on_borg_charge)) + +/obj/item/organ/internal/stomach/synth/Remove(mob/living/carbon/stomach_owner, special) + . = ..() + UnregisterSignal(stomach_owner, COMSIG_PROCESS_BORGCHARGER_OCCUPANT) + +///Handles charging the synth from borg chargers +/obj/item/organ/internal/stomach/synth/proc/on_borg_charge(datum/source, amount) + SIGNAL_HANDLER + + if(owner.nutrition >= NUTRITION_LEVEL_ALMOST_FULL) + return + + amount /= 50 // Lowers the charging amount so it isn't instant + owner.nutrition = min((owner.nutrition + amount), NUTRITION_LEVEL_ALMOST_FULL) // Makes sure we don't make the synth too full, which would apply the overweight slowdown diff --git a/modular_nova/modules/synths/code/bodyparts/tongue.dm b/modular_nova/modules/synths/code/bodyparts/tongue.dm new file mode 100644 index 00000000000000..56127210287ec1 --- /dev/null +++ b/modular_nova/modules/synths/code/bodyparts/tongue.dm @@ -0,0 +1,38 @@ +/obj/item/organ/internal/tongue/synth + name = "synthetic voicebox" + desc = "A fully-functional synthetic tongue, encased in soft silicone. Features include high-resolution vocals and taste receptors." + icon = 'modular_nova/modules/organs/icons/cyber_tongue.dmi' + icon_state = "cybertongue" + say_mod = "beeps" + attack_verb_continuous = list("beeps", "boops") + attack_verb_simple = list("beep", "boop") + modifies_speech = TRUE + taste_sensitivity = 25 // not as good as an organic tongue + liked_foodtypes = NONE + disliked_foodtypes = NONE + maxHealth = 100 //RoboTongue! + zone = BODY_ZONE_HEAD + slot = ORGAN_SLOT_TONGUE + organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES + +/obj/item/organ/internal/tongue/synth/can_speak_language(language) + return TRUE + +/obj/item/organ/internal/tongue/synth/handle_speech(datum/source, list/speech_args) + speech_args[SPEECH_SPANS] |= SPAN_ROBOT + +/datum/design/synth_tongue + name = "Synthetic Tongue" + desc = "A fully-functional synthetic tongue, encased in soft silicone. Features include high-resolution vocals and taste receptors." + id = "synth_tongue" + build_type = PROTOLATHE | AWAY_LATHE | MECHFAB + construction_time = 4 SECONDS + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/organ/internal/tongue/synth + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1 + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE diff --git a/modular_skyrat/modules/synths/code/defib.dm b/modular_nova/modules/synths/code/defib.dm similarity index 100% rename from modular_skyrat/modules/synths/code/defib.dm rename to modular_nova/modules/synths/code/defib.dm diff --git a/modular_skyrat/modules/synths/code/reagents/blood_pack.dm b/modular_nova/modules/synths/code/reagents/blood_pack.dm similarity index 100% rename from modular_skyrat/modules/synths/code/reagents/blood_pack.dm rename to modular_nova/modules/synths/code/reagents/blood_pack.dm diff --git a/modular_skyrat/modules/synths/code/reagents/pill.dm b/modular_nova/modules/synths/code/reagents/pill.dm similarity index 100% rename from modular_skyrat/modules/synths/code/reagents/pill.dm rename to modular_nova/modules/synths/code/reagents/pill.dm diff --git a/modular_skyrat/modules/synths/code/reagents/pill_bottles.dm b/modular_nova/modules/synths/code/reagents/pill_bottles.dm similarity index 100% rename from modular_skyrat/modules/synths/code/reagents/pill_bottles.dm rename to modular_nova/modules/synths/code/reagents/pill_bottles.dm diff --git a/modular_nova/modules/synths/code/reagents/reagents.dm b/modular_nova/modules/synths/code/reagents/reagents.dm new file mode 100644 index 00000000000000..2732606a41cc87 --- /dev/null +++ b/modular_nova/modules/synths/code/reagents/reagents.dm @@ -0,0 +1,104 @@ +#define NANITE_SLURRY_ORGANIC_PURGE_RATE 4 +#define NANITE_SLURRY_ORGANIC_VOMIT_CHANCE 25 + +/datum/reagent/medicine/syndicate_nanites //Used exclusively by Symphionia medical cyborgs + process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC //Let's not cripple synth ops + +/datum/reagent/medicine/stimulants + process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC //Symphionia developed 'accelerants' for synths? + +/datum/reagent/medicine/leporazine + process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC + +/datum/reagent/flightpotion + process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC + +// REAGENTS FOR SYNTHS + +/datum/reagent/medicine/system_cleaner + name = "System Cleaner" + description = "Neutralizes harmful chemical compounds inside synthetic systems and refreshes system software." + reagent_state = LIQUID + color = "#F1C40F" + taste_description = "ethanol" + metabolization_rate = 2 * REAGENTS_METABOLISM + process_flags = REAGENT_SYNTHETIC + +/datum/reagent/medicine/system_cleaner/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + affected_mob.adjustToxLoss(-2 * REM * seconds_per_tick, 0) + affected_mob.adjust_disgust(-5 * REM * seconds_per_tick) + var/remove_amount = 1 * REM * seconds_per_tick; + for(var/thing in affected_mob.reagents.reagent_list) + var/datum/reagent/reagent = thing + if(reagent != src) + affected_mob.reagents.remove_reagent(reagent.type, remove_amount) + ..() + return TRUE + +/datum/reagent/medicine/liquid_solder + name = "Liquid Solder" + description = "Repairs brain damage in synthetics." + reagent_state = LIQUID + color = "#727272" + taste_description = "metal" + process_flags = REAGENT_SYNTHETIC + +/datum/reagent/medicine/liquid_solder/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick) + affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, -3 * REM * seconds_per_tick) + if(prob(10)) + affected_mob.cure_trauma_type(resilience = TRAUMA_RESILIENCE_BASIC) + return ..() + +/datum/reagent/medicine/nanite_slurry + name = "Nanite Slurry" + description = "A localized swarm of nanomachines specialized in repairing mechanical parts. Due to the nanites needing to interface with the host's systems to repair them, a surplus of them will cause them to overheat, or for the swarm to forcefully eject out of the mouth of organics for safety." + reagent_state = LIQUID + color = "#cccccc" + overdose_threshold = 20 + metabolization_rate = 1.25 * REAGENTS_METABOLISM + process_flags = REAGENT_SYNTHETIC | REAGENT_ORGANIC + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + /// How much brute and burn individually is healed per tick + var/healing = 1 + /// How much body temperature is increased by per overdose cycle on robotic bodyparts. + var/temperature_change = 50 + + +/datum/reagent/medicine/nanite_slurry/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick) + var/heal_amount = healing * REM * seconds_per_tick + affected_mob.heal_bodypart_damage(heal_amount, heal_amount, required_bodytype = BODYTYPE_ROBOTIC) + return ..() + +/datum/reagent/medicine/nanite_slurry/overdose_process(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + if(affected_mob.mob_biotypes & MOB_ROBOTIC) + affected_mob.adjust_bodytemperature(temperature_change * REM * seconds_per_tick) + return ..() + affected_mob.reagents.remove_reagent(type, NANITE_SLURRY_ORGANIC_PURGE_RATE) //gets removed from organics very fast + if(prob(NANITE_SLURRY_ORGANIC_VOMIT_CHANCE)) + affected_mob.vomit(vomit_flags = (MOB_VOMIT_MESSAGE | MOB_VOMIT_HARM), vomit_type = /obj/effect/decal/cleanable/vomit/nanites) + return TRUE + +#undef NANITE_SLURRY_ORGANIC_PURGE_RATE +#undef NANITE_SLURRY_ORGANIC_VOMIT_CHANCE + + +/datum/reagent/medicine/taste_suppressor + name = "Taste Suppressor" + description = "A colorless medicine aimed to dull the sense of taste of those that consumed it, as long as it's in their system." + color = "#AAAAAA77" + reagent_state = LIQUID + metabolization_rate = 0.5 * REAGENTS_METABOLISM + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + chemical_flags_nova = REAGENT_BLOOD_REGENERATING // It has REAGENT_BLOOD_REGENERATING only because it makes it so Hemophages can safely drink it, which makes complete sense considering this is meant to suppress their tumor's reactiveness to anything that doesn't regenerate blood. + + +/datum/reagent/medicine/taste_suppressor/on_mob_metabolize(mob/living/affected_mob) + . = ..() + + ADD_TRAIT(affected_mob, TRAIT_AGEUSIA, TRAIT_REAGENT) + + +/datum/reagent/medicine/taste_suppressor/on_mob_end_metabolize(mob/living/affected_mob) + . = ..() + + REMOVE_TRAIT(affected_mob, TRAIT_AGEUSIA, TRAIT_REAGENT) diff --git a/modular_skyrat/modules/synths/code/research_nodes.dm b/modular_nova/modules/synths/code/research_nodes.dm similarity index 100% rename from modular_skyrat/modules/synths/code/research_nodes.dm rename to modular_nova/modules/synths/code/research_nodes.dm diff --git a/modular_skyrat/modules/synths/code/species/prefsmenu.dm b/modular_nova/modules/synths/code/species/prefsmenu.dm similarity index 100% rename from modular_skyrat/modules/synths/code/species/prefsmenu.dm rename to modular_nova/modules/synths/code/species/prefsmenu.dm diff --git a/modular_skyrat/modules/synths/code/species/screen.dm b/modular_nova/modules/synths/code/species/screen.dm similarity index 100% rename from modular_skyrat/modules/synths/code/species/screen.dm rename to modular_nova/modules/synths/code/species/screen.dm diff --git a/modular_skyrat/modules/synths/code/species/synthetic.dm b/modular_nova/modules/synths/code/species/synthetic.dm similarity index 89% rename from modular_skyrat/modules/synths/code/species/synthetic.dm rename to modular_nova/modules/synths/code/species/synthetic.dm index 1630d14e1f27eb..90a01e09ed9a88 100644 --- a/modular_skyrat/modules/synths/code/species/synthetic.dm +++ b/modular_nova/modules/synths/code/species/synthetic.dm @@ -5,12 +5,10 @@ inherent_biotypes = MOB_ROBOTIC | MOB_HUMANOID inherent_traits = list( TRAIT_CAN_STRIP, - TRAIT_CAN_USE_FLIGHT_POTION, TRAIT_ADVANCEDTOOLUSER, TRAIT_RADIMMUNE, TRAIT_NOBREATH, TRAIT_TOXIMMUNE, - TRAIT_NOCLONELOSS, TRAIT_GENELESS, TRAIT_STABLEHEART, TRAIT_LIMBATTACHMENT, @@ -19,19 +17,8 @@ TRAIT_LITERATE, TRAIT_NOCRITDAMAGE, // We do our own handling of crit damage. TRAIT_ROBOTIC_DNA_ORGANS, - TRAIT_NO_TRANSFORMATION_STING, ) mutant_bodyparts = list() - default_mutant_bodyparts = list( - "tail" = "None", - "ears" = "None", - "legs" = "Normal Legs", - "snout" = "None", - MUTANT_SYNTH_ANTENNA = "None", - MUTANT_SYNTH_SCREEN = "None", - MUTANT_SYNTH_CHASSIS = "Default Chassis", - MUTANT_SYNTH_HEAD = "Default Head", - ) changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT reagent_flags = PROCESS_SYNTHETIC payday_modifier = 1.0 // Matches the rest of the pay penalties the non-human crew have @@ -63,7 +50,18 @@ var/datum/action/innate/monitor_change/screen /// This is the screen that is given to the user after they get revived. On death, their screen is temporarily set to BSOD before it turns off, hence the need for this var. var/saved_screen = "Blank" - wing_types = list(/obj/item/organ/external/wings/functional/robotic) + +/datum/species/synthetic/get_default_mutant_bodyparts() + return list( + "tail" = list("None", FALSE), + "ears" = list("None", FALSE), + "legs" = list("Normal Legs", FALSE), + "snout" = list("None", FALSE), + MUTANT_SYNTH_ANTENNA = list("None", FALSE), + MUTANT_SYNTH_SCREEN = list("None", FALSE), + MUTANT_SYNTH_CHASSIS = list("Default Chassis", FALSE), + MUTANT_SYNTH_HEAD = list("Default Head", FALSE), + ) /datum/species/synthetic/spec_life(mob/living/carbon/human/human) . = ..() @@ -81,12 +79,6 @@ playsound(transformer.loc, 'sound/machines/chime.ogg', 50, TRUE) transformer.visible_message(span_notice("[transformer]'s [screen ? "monitor lights up" : "eyes flicker to life"]!"), span_notice("All systems nominal. You're back online!")) -/datum/species/synthetic/spec_death(gibbed, mob/living/carbon/human/transformer) - . = ..() - saved_screen = screen - switch_to_screen(transformer, "BSOD") - addtimer(CALLBACK(src, PROC_REF(switch_to_screen), transformer, "Blank"), 5 SECONDS) - /datum/species/synthetic/on_species_gain(mob/living/carbon/human/transformer) . = ..() @@ -98,9 +90,11 @@ if(eyes) eyes.eye_icon_state = "None" - screen = new + screen = new(transformer) screen.Grant(transformer) + RegisterSignal(transformer, COMSIG_LIVING_DEATH, PROC_REF(bsod_death)) // screen displays bsod on death, if they have one + return if(eyes) @@ -150,6 +144,19 @@ if(screen) screen.Remove(human) + UnregisterSignal(human, COMSIG_LIVING_DEATH) + +/** + * Makes the IPC screen switch to BSOD followed by a blank screen + * + * Arguments: + * * transformer - The human that will be affected by the screen change (read: IPC). + * * screen_name - The name of the screen to switch the ipc_screen mutant bodypart to. Defaults to BSOD. + */ +/datum/species/synthetic/proc/bsod_death(mob/living/carbon/human/transformer, screen_name = "BSOD") + saved_screen = screen // remember the old screen in case of revival + switch_to_screen(transformer, screen_name) + addtimer(CALLBACK(src, PROC_REF(switch_to_screen), transformer, "Blank"), 5 SECONDS) /** * Simple proc to switch the screen of a monitor-enabled synth, while updating their appearance. diff --git a/modular_skyrat/modules/synths/code/surgery/mechanic_steps.dm b/modular_nova/modules/synths/code/surgery/mechanic_steps.dm similarity index 100% rename from modular_skyrat/modules/synths/code/surgery/mechanic_steps.dm rename to modular_nova/modules/synths/code/surgery/mechanic_steps.dm diff --git a/modular_skyrat/modules/synths/code/surgery/robot_brain_surgery.dm b/modular_nova/modules/synths/code/surgery/robot_brain_surgery.dm similarity index 92% rename from modular_skyrat/modules/synths/code/surgery/robot_brain_surgery.dm rename to modular_nova/modules/synths/code/surgery/robot_brain_surgery.dm index 4be04a848393bf..02b45a36feaa73 100644 --- a/modular_skyrat/modules/synths/code/surgery/robot_brain_surgery.dm +++ b/modular_nova/modules/synths/code/surgery/robot_brain_surgery.dm @@ -10,10 +10,17 @@ ) target_mobtypes = list(/mob/living/carbon/human) - possible_locs = list(BODY_ZONE_HEAD) + possible_locs = list(BODY_ZONE_CHEST) // The brains are in the chest requires_bodypart_type = BODYTYPE_ROBOTIC desc = "A surgical procedure that restores the default behavior logic and personality matrix of an IPC posibrain." +/datum/surgery/robot_brain_surgery/can_start(mob/user, mob/living/carbon/target, obj/item/tool) + var/obj/item/organ/internal/brain/synth/brain = target.get_organ_slot(ORGAN_SLOT_BRAIN) + if(!istype(brain) && !issynthetic(target)) + return FALSE + else + return TRUE + /datum/surgery_step/fix_robot_brain name = "fix posibrain" implements = list( @@ -24,10 +31,6 @@ repeatable = TRUE time = 12 SECONDS //long and complicated -/datum/surgery/robot_brain_surgery/can_start(mob/user, mob/living/carbon/target, obj/item/tool) - var/obj/item/organ/internal/brain/brain = target.get_organ_slot(ORGAN_SLOT_BRAIN) - return !!brain - /datum/surgery_step/fix_robot_brain/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( user, diff --git a/modular_skyrat/modules/synths/code/surgery/robot_chassis_restoration.dm b/modular_nova/modules/synths/code/surgery/robot_chassis_restoration.dm similarity index 97% rename from modular_skyrat/modules/synths/code/surgery/robot_chassis_restoration.dm rename to modular_nova/modules/synths/code/surgery/robot_chassis_restoration.dm index 42e3ff853bbd73..d80c68e3e35a97 100644 --- a/modular_skyrat/modules/synths/code/surgery/robot_chassis_restoration.dm +++ b/modular_nova/modules/synths/code/surgery/robot_chassis_restoration.dm @@ -87,7 +87,7 @@ span_notice("[user] begins to force a reboot in [target]'s posibrain."), ) - target.notify_ghost_cloning("Someone is trying to reboot your posibrain.", source = target) + target.notify_revival("Someone is trying to reboot your posibrain.", source = target) /datum/surgery_step/finalize_positronic_restoration/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) if (target.stat < DEAD) diff --git a/modular_skyrat/modules/synths/code/surgery/robot_healing.dm b/modular_nova/modules/synths/code/surgery/robot_healing.dm similarity index 100% rename from modular_skyrat/modules/synths/code/surgery/robot_healing.dm rename to modular_nova/modules/synths/code/surgery/robot_healing.dm diff --git a/modular_skyrat/modules/tableflip/code/flipped_table.dm b/modular_nova/modules/tableflip/code/flipped_table.dm similarity index 98% rename from modular_skyrat/modules/tableflip/code/flipped_table.dm rename to modular_nova/modules/tableflip/code/flipped_table.dm index 80776abf09aa22..b3a1fe08e2f018 100644 --- a/modular_skyrat/modules/tableflip/code/flipped_table.dm +++ b/modular_nova/modules/tableflip/code/flipped_table.dm @@ -1,7 +1,7 @@ /obj/structure/flippedtable name = "flipped table" desc = "A flipped table." - icon = 'modular_skyrat/modules/tableflip/icons/flipped_tables.dmi' + icon = 'modular_nova/modules/tableflip/icons/flipped_tables.dmi' icon_state = "table" anchored = TRUE density = TRUE diff --git a/modular_skyrat/modules/tableflip/icons/flipped_tables.dmi b/modular_nova/modules/tableflip/icons/flipped_tables.dmi similarity index 100% rename from modular_skyrat/modules/tableflip/icons/flipped_tables.dmi rename to modular_nova/modules/tableflip/icons/flipped_tables.dmi diff --git a/modular_nova/modules/tagline/code/world.dm b/modular_nova/modules/tagline/code/world.dm new file mode 100644 index 00000000000000..1e3e74c783e6b4 --- /dev/null +++ b/modular_nova/modules/tagline/code/world.dm @@ -0,0 +1,34 @@ +/world/proc/update_status() + + var/list/features = list() + + var/new_status = "" + var/hostedby + if(config) + var/server_name = CONFIG_GET(string/servername) + if (server_name) + new_status += "<b>[server_name]</b> — " + hostedby = CONFIG_GET(string/hostedby) + + new_status += " (" + new_status += "<a href=\"[CONFIG_GET(string/discord_link)]\">" + new_status += "Discord" + new_status += ")\]" + new_status += "<br>[CONFIG_GET(string/servertagline)]<br>" + + + var/players = GLOB.clients.len + + if(SSmapping.config) + features += "[SSmapping.config.map_name]" + + features += "~[players] player[players == 1 ? "": "s"]" + + if (!host && hostedby) + features += "hosted by <b>[hostedby]</b>" + + if(length(features)) + new_status += "\[[jointext(features, ", ")]" + + status = new_status + diff --git a/modular_skyrat/modules/tagline/readme.md b/modular_nova/modules/tagline/readme.md similarity index 100% rename from modular_skyrat/modules/tagline/readme.md rename to modular_nova/modules/tagline/readme.md diff --git a/modular_nova/modules/tesh_augments/code/all_nodes.dm b/modular_nova/modules/tesh_augments/code/all_nodes.dm new file mode 100644 index 00000000000000..0358c31ce8cd25 --- /dev/null +++ b/modular_nova/modules/tesh_augments/code/all_nodes.dm @@ -0,0 +1,30 @@ +//teshari_ robolimb research node + +/datum/techweb_node/teshari_cyber + id = "teshari_cyber" + display_name = "Raptoral Cybernetics" + description = "Specialized civilian-grade cybernetic limb designs." + prereq_ids = list("base") + design_ids = list( + "teshari_cyber_chest", + "teshari_cyber_l_arm", + "teshari_cyber_r_arm", + "teshari_cyber_l_leg", + "teshari_cyber_r_leg", + "teshari_cyber_head", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) + + +/datum/techweb_node/adv_teshari_cyber + id = "adv_teshari_cyber" + display_name = "Advanced Raptoral Cybernetics" + description = "Specialized industrial-grade cybernetic limb designs." + prereq_ids = list("adv_robotics", "teshari_cyber") + design_ids = list( + "teshari_advanced_l_arm", + "teshari_advanced_r_arm", + "teshari_advanced_l_leg", + "teshari_advanced_r_leg", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 500) diff --git a/modular_nova/modules/tesh_augments/code/limbs.dm b/modular_nova/modules/tesh_augments/code/limbs.dm new file mode 100644 index 00000000000000..759d7b121e54b9 --- /dev/null +++ b/modular_nova/modules/tesh_augments/code/limbs.dm @@ -0,0 +1,57 @@ +/* +this goes into the augment preferences section. They do not use the appearance dropdown for obvious reason. +*/ + +/datum/augment_item/limb/head/teshari_cyborg + name = "Raptoral cybernetic head" + path = /obj/item/bodypart/head/robot/teshari + uses_robotic_styles = FALSE + +/datum/augment_item/limb/chest/teshari_cyborg + name = "Raptoral cybernetic chest" + path = /obj/item/bodypart/chest/robot/teshari + uses_robotic_styles = FALSE + +/datum/augment_item/limb/l_arm/teshari_prosthetic + name = "Raptoral prosthetic left forelimb" + path = /obj/item/bodypart/arm/left/robot/teshari_surplus + cost = -1 + uses_robotic_styles = FALSE + +/datum/augment_item/limb/l_arm/teshari_cybernetic + name = "Raptoral cybernetic left forelimb" + path = /obj/item/bodypart/arm/left/robot/teshari + uses_robotic_styles = FALSE + +/datum/augment_item/limb/r_arm/teshari_prosthetic + name = "Raptoral prototype right forelimb" + path = /obj/item/bodypart/arm/right/robot/teshari_surplus + cost = -1 + uses_robotic_styles = FALSE + +/datum/augment_item/limb/r_arm/teshari_cybernetic + name = "Raptoral cybernetic right forelimb" + path = /obj/item/bodypart/arm/right/robot/teshari + uses_robotic_styles = FALSE + +/datum/augment_item/limb/l_leg/teshari_prosthetic + name = "Raptoral prosthetic left hindlimb" + path = /obj/item/bodypart/leg/left/robot/teshari_surplus + cost = -1 + uses_robotic_styles = FALSE + +/datum/augment_item/limb/l_leg/teshari_cybernetic + name = "Raptoral cybernetic left hindlimb" + path = /obj/item/bodypart/leg/left/robot/teshari + uses_robotic_styles = FALSE + +/datum/augment_item/limb/r_leg/teshari_prosthetic + name = "Raptoral prosthetic right hindlimb" + path = /obj/item/bodypart/leg/right/robot/teshari_surplus + cost = -1 + uses_robotic_styles = FALSE + +/datum/augment_item/limb/r_leg/teshari_cybernetic + name = "Raptoral cybernetic right hindlimb" + path = /obj/item/bodypart/leg/right/robot/teshari + uses_robotic_styles = FALSE diff --git a/modular_nova/modules/tesh_augments/code/mechfabricator_designs.dm b/modular_nova/modules/tesh_augments/code/mechfabricator_designs.dm new file mode 100644 index 00000000000000..50fdb0865ba041 --- /dev/null +++ b/modular_nova/modules/tesh_augments/code/mechfabricator_designs.dm @@ -0,0 +1,131 @@ +//adding teshari silicon stuff to the mechfabricator + +#define RND_SUBCATEGORY_MECHFAB_CYBORG_RAPTORAL "/Raptoral" + +/datum/design/teshari_cyber_chest + name = "Raptoral Cybernetic Torso" + id = "teshari_cyber_chest" + build_type = MECHFAB + build_path = /obj/item/bodypart/chest/robot/teshari + materials = list(/datum/material/iron= SHEET_MATERIAL_AMOUNT * 6) + construction_time = 12 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_RAPTORAL, + ) + +/datum/design/teshari_cyber_head + name = "Raptoral Cybernetic Head" + id = "teshari_cyber_head" + build_type = MECHFAB + build_path = /obj/item/bodypart/head/robot/teshari + materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 0.75) + construction_time = 4 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_RAPTORAL, + ) + +/datum/design/teshari_cyber_l_arm + name = "Raptoral Cybernetic Left Forelimb" + id = "teshari_cyber_l_arm" + build_type = MECHFAB + build_path = /obj/item/bodypart/arm/left/robot/teshari + materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 1.5) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_RAPTORAL, + ) + +/datum/design/teshari_cyber_r_arm + name = "Raptoral Cybernetic Right Forelimb" + id = "teshari_cyber_r_arm" + build_type = MECHFAB + build_path = /obj/item/bodypart/arm/right/robot/teshari + materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.5) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_RAPTORAL, + ) + +/datum/design/teshari_cyber_l_leg + name = "Raptoral Cybernetic Left Hindlimb" + id = "teshari_cyber_l_leg" + build_type = MECHFAB + build_path = /obj/item/bodypart/leg/left/robot/teshari + materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.5) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_RAPTORAL, + ) + +/datum/design/teshari_cyber_r_leg + name = "Raptoral Cybernetic Right Hindlimb" + id = "teshari_cyber_r_leg" + build_type = MECHFAB + build_path = /obj/item/bodypart/leg/right/robot/teshari + materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.5) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_RAPTORAL, + ) + +//advanced augmentations since those were added in the recent upstream + +/datum/design/teshari_advanced_l_arm + name = "Advanced Raptoral Cybernetic Left Forelimb" + id = "teshari_advanced_l_arm" + build_type = MECHFAB + build_path = /obj/item/bodypart/arm/left/robot/teshari_advanced + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 3, + ) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_RAPTORAL, + ) + +/datum/design/teshari_advanced_r_arm + name = "Advanced Raptoral Cybernetic Right Forelimb" + id = "teshari_advanced_r_arm" + build_type = MECHFAB + build_path = /obj/item/bodypart/arm/right/robot/teshari_advanced + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 3, + ) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_RAPTORAL, + ) + +/datum/design/teshari_advanced_l_leg + name = "Advanced Raptoral Cybernetic Left Hindlimb" + id = "teshari_advanced_l_leg" + build_type = MECHFAB + build_path = /obj/item/bodypart/leg/left/robot/teshari_advanced + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 3, + ) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_RAPTORAL, + ) + +/datum/design/teshari_advanced_r_leg + name = "Advanced Raptoral Cybernetic Right Hindlimb" + id = "teshari_advanced_r_leg" + build_type = MECHFAB + build_path = /obj/item/bodypart/leg/right/robot/teshari_advanced + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 3, + ) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_RAPTORAL, + ) diff --git a/modular_nova/modules/tesh_augments/code/robot_bodyparts.dm b/modular_nova/modules/tesh_augments/code/robot_bodyparts.dm new file mode 100644 index 00000000000000..d894847ed621ad --- /dev/null +++ b/modular_nova/modules/tesh_augments/code/robot_bodyparts.dm @@ -0,0 +1,403 @@ +#define ROBOTIC_LIGHT_BRUTE_MSG "marred" +#define ROBOTIC_MEDIUM_BRUTE_MSG "dented" +#define ROBOTIC_HEAVY_BRUTE_MSG "falling apart" + +#define ROBOTIC_LIGHT_BURN_MSG "scorched" +#define ROBOTIC_MEDIUM_BURN_MSG "charred" +#define ROBOTIC_HEAVY_BURN_MSG "smoldering" + +/* + The damage modifiers here are modified to stay in line with teshari + Although I'm not sure if it's redundant, better safe than sorry. + */ + +#define TESHARI_PUNCH_LOW 2 +#define TESHARI_PUNCH_HIGH 6 + +//Teshari normal + +/obj/item/bodypart/arm/left/robot/teshari + name = "cybernetic left raptoral forelimb" + desc = "A skeletal limb wrapped in pseudomuscles and membranous feathers, with a low-conductivity case." + icon = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + icon_static = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW + unarmed_damage_high = TESHARI_PUNCH_HIGH + + brute_modifier = 1 + burn_modifier = 0.9 + +/obj/item/bodypart/arm/right/robot/teshari + name = "cybernetic right raptoral forelimb" + desc = "A skeletal limb wrapped in pseudomuscles and membranous feathers, with a low-conductivity case." + icon_static = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW + unarmed_damage_high = TESHARI_PUNCH_HIGH + + brute_modifier = 1 + burn_modifier = 0.9 + +/obj/item/bodypart/leg/left/robot/teshari + name = "cybernetic left raptoral hindlimb" + desc = "A skeletal limb wrapped in pseudomuscles and membranous feathers, with a low-conductivity case." + icon_static = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW + unarmed_damage_high = TESHARI_PUNCH_HIGH + + brute_modifier = 1 + burn_modifier = 0.9 + +/obj/item/bodypart/leg/right/robot/teshari + name = "cybernetic right raptoral hindlimb" + desc = "A skeletal limb wrapped in pseudomuscles and membranous feathers, with a low-conductivity case." + icon_static = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW + unarmed_damage_high = TESHARI_PUNCH_HIGH + + brute_modifier = 1 + burn_modifier = 0.9 + +/obj/item/bodypart/chest/robot/teshari + name = "cybernetic raptoral torso" + desc = "A heavily reinforced case containing cyborg logic boards, with space for a standard power cell, covered in a layer of membranous feathers." + icon_static = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + brute_modifier = 1 + burn_modifier = 0.9 + + robotic_emp_paralyze_damage_percent_threshold = 0.5 + +/obj/item/bodypart/head/robot/teshari + name = "cybernetic raptoral head" + desc = "A standard reinforced braincase, with spine-plugged neural socket and sensor gimbals. A layer of membranous feathers covers the stark metal." + icon_static = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW + unarmed_damage_high = TESHARI_PUNCH_HIGH + + brute_modifier = 1 + burn_modifier = 0.9 + + head_flags = HEAD_EYESPRITES + +// teshari_ surplus + +/obj/item/bodypart/arm/left/robot/teshari_surplus + name = "prosthetic left raptoral forelimb" + desc = "A skeletal, robotic wing. Outdated and fragile, but it's still better than nothing. A layer of membranous feathers hides the cheap assembly." + icon_static = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + + unarmed_damage_low = TESHARI_PUNCH_LOW * 0.3 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 0.5 + + brute_modifier = 1.25 + burn_modifier = 1.2 + + max_damage = LIMB_MAX_HP_PROSTHESIS + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_PROSTHESIS + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/arm/right/robot/teshari_surplus + name = "prosthetic right raptoral forelimb" + desc = "A skeletal, robotic wing. Outdated and fragile, but it's still better than nothing. A layer of membranous feathers hides the cheap assembly." + icon_static = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 0.3 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 0.5 + + brute_modifier = 1.25 + burn_modifier = 1.2 + + max_damage = LIMB_MAX_HP_PROSTHESIS + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_PROSTHESIS + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/leg/left/robot/teshari_surplus + name = "prosthetic left raptoral hindlimb" + desc = "A skeletal, robotic hindlimb. Outdated and fragile, but it's still better than nothing. A layer of membranous feathers hides the cheap assembly." + icon_static = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 0.3 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 0.5 + + brute_modifier = 1.25 + burn_modifier = 1.2 + + max_damage = LIMB_MAX_HP_PROSTHESIS + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_PROSTHESIS + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/leg/right/robot/teshari_surplus + name = "prosthetic right raptoral hindlimb" + desc = "A skeletal, robotic hindlimb. Outdated and fragile, but it's still better than nothing. A layer of membranous feathers hides the cheap assembly." + icon_static = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 0.3 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 0.5 + + brute_modifier = 1.25 + burn_modifier = 1.2 + + max_damage = LIMB_MAX_HP_PROSTHESIS + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_PROSTHESIS + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/arm/left/robot/teshari_surplus + name = "prosthetic left raptoral forelimb" + desc = "A skeletal, robotic wing. Outdated and fragile, but it's still better than nothing. A layer of membranous feathers hides the cheap assembly." + icon_static = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 0.3 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 0.5 + + brute_modifier = 1.25 + burn_modifier = 1.2 + + max_damage = LIMB_MAX_HP_PROSTHESIS + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_PROSTHESIS + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/arm/right/robot/teshari_surplus + name = "prosthetic right raptoral forelimb" + desc = "A skeletal, robotic wing. Outdated and fragile, but it's still better than nothing. A layer of membranous feathers hides the cheap assembly." + icon_static = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 0.3 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 0.5 + + brute_modifier = 1.25 + burn_modifier = 1.2 + + max_damage = LIMB_MAX_HP_PROSTHESIS + + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_PROSTHESIS + + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/leg/left/robot/teshari_surplus + name = "prosthetic left raptoral hindlimb" + desc = "A skeletal, robotic hindlimb. Outdated and fragile, but it's still better than nothing. A layer of membranous feathers hides the cheap assembly." + icon_static = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 0.3 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 0.5 + + brute_modifier = 1.25 + burn_modifier = 1.2 + + max_damage = LIMB_MAX_HP_PROSTHESIS + + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_PROSTHESIS + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/leg/right/robot/teshari_surplus + name = "prosthetic right raptoral hindlimb" + desc = "A skeletal, robotic hindlimb. Outdated and fragile, but it's still better than nothing. A layer of membranous feathers hides the cheap assembly." + icon_static = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 0.3 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 0.5 + + brute_modifier = 1.25 + burn_modifier = 1.2 + + max_damage = LIMB_MAX_HP_PROSTHESIS + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_PROSTHESIS + + biological_state = (BIO_METAL|BIO_JOINTED) + +// teshari_ advanced + +/obj/item/bodypart/arm/left/robot/teshari_advanced + name = "advanced left raptoral forelimb" + desc = "An advanced robotic hindlimb. These designs are usually reserved for those still on the search for Avalon." + icon_static = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 2 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 3 + + brute_modifier = 0.8 + burn_modifier = 1 + + max_damage = LIMB_MAX_HP_ADVANCED + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_ADVANCED + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/arm/right/robot/teshari_advanced + name = "advanced right raptoral forelimb" + desc = "An advanced robotic hindlimb. These designs are usually reserved for those still on the search for Avalon." + icon_static = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 2 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 3 + + brute_modifier = 0.8 + burn_modifier = 1 + + max_damage = LIMB_MAX_HP_ADVANCED + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_ADVANCED + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/leg/left/robot/teshari_advanced + name = "advanced left raptoral hindlimb" + desc = "An advanced robotic hindlimb. These designs are usually reserved for those still on the search for Avalon." + icon_static = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 2 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 3 + + brute_modifier = 0.8 + burn_modifier = 1 + + max_damage = LIMB_MAX_HP_ADVANCED + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_ADVANCED + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/leg/right/robot/teshari_advanced + name = "advanced right raptoral hindlimb" + desc = "An advanced robotic hindlimb. These designs are usually reserved for those still on the search for Avalon." + icon_static = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 2 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 3 + + brute_modifier = 0.8 + burn_modifier = 1 + + max_damage = LIMB_MAX_HP_ADVANCED + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_ADVANCED + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/arm/left/robot/teshari_advanced + name = "advanced left raptoral forelimb" + desc = "An advanced robotic hindlimb. These designs are usually reserved for those still on the search for Avalon." + icon_static = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 2 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 3 + + brute_modifier = 1 + burn_modifier = 0.9 + + max_damage = LIMB_MAX_HP_ADVANCED + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_ADVANCED + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/arm/right/robot/teshari_advanced + name = "advanced right raptoral forelimb" + desc = "An advanced robotic hindlimb. These designs are usually reserved for those still on the search for Avalon." + icon_static = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 2 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 3 + + brute_modifier = 1 + burn_modifier = 0.9 + + max_damage = LIMB_MAX_HP_ADVANCED + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_ADVANCED + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/leg/left/robot/teshari_advanced + name = "advanced left raptoral hindlimb" + desc = "An advanced robotic hindlimb. These designs are usually reserved for those still on the search for Avalon." + icon_static = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 2 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 3 + + brute_modifier = 1 + burn_modifier = 0.9 + + max_damage = LIMB_MAX_HP_ADVANCED + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_ADVANCED + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/leg/right/robot/teshari_advanced + name = "advanced right raptoral hindlimb" + desc = "An advanced robotic hindlimb. These designs are usually reserved for those still on the search for Avalon." + icon_static = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 2 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 3 + + brute_modifier = 1 + burn_modifier = 0.9 + + max_damage = LIMB_MAX_HP_ADVANCED + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_ADVANCED + + biological_state = (BIO_METAL|BIO_JOINTED) + +#undef ROBOTIC_LIGHT_BRUTE_MSG +#undef ROBOTIC_MEDIUM_BRUTE_MSG +#undef ROBOTIC_HEAVY_BRUTE_MSG + +#undef ROBOTIC_LIGHT_BURN_MSG +#undef ROBOTIC_MEDIUM_BURN_MSG +#undef ROBOTIC_HEAVY_BURN_MSG + +#undef TESHARI_PUNCH_LOW +#undef TESHARI_PUNCH_HIGH diff --git a/modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi b/modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi new file mode 100644 index 00000000000000..4f0c65c2d33853 Binary files /dev/null and b/modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi differ diff --git a/modular_nova/modules/tesh_augments/icons/augments_teshari.dmi b/modular_nova/modules/tesh_augments/icons/augments_teshari.dmi new file mode 100644 index 00000000000000..310336182fc65e Binary files /dev/null and b/modular_nova/modules/tesh_augments/icons/augments_teshari.dmi differ diff --git a/modular_nova/modules/tesh_augments/icons/sbipc_raptor.dmi b/modular_nova/modules/tesh_augments/icons/sbipc_raptor.dmi new file mode 100644 index 00000000000000..09c792e0b4cd6b Binary files /dev/null and b/modular_nova/modules/tesh_augments/icons/sbipc_raptor.dmi differ diff --git a/modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi b/modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi new file mode 100644 index 00000000000000..3863b2a12da070 Binary files /dev/null and b/modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi differ diff --git a/modular_nova/modules/tesh_augments/readme.md b/modular_nova/modules/tesh_augments/readme.md new file mode 100644 index 00000000000000..b43ce34148a913 --- /dev/null +++ b/modular_nova/modules/tesh_augments/readme.md @@ -0,0 +1,5 @@ +/* +teshari_ cybernetics +all done by aKhromatopsia +that's all +*/ diff --git a/modular_skyrat/modules/teshari/code/_clothing_defines.dm b/modular_nova/modules/teshari/code/_clothing_defines.dm similarity index 100% rename from modular_skyrat/modules/teshari/code/_clothing_defines.dm rename to modular_nova/modules/teshari/code/_clothing_defines.dm diff --git a/modular_skyrat/modules/teshari/code/_teshari.dm b/modular_nova/modules/teshari/code/_teshari.dm similarity index 91% rename from modular_skyrat/modules/teshari/code/_teshari.dm rename to modular_nova/modules/teshari/code/_teshari.dm index 84dc35e59c2918..83dcc7b11be7fb 100644 --- a/modular_skyrat/modules/teshari/code/_teshari.dm +++ b/modular_nova/modules/teshari/code/_teshari.dm @@ -5,7 +5,7 @@ /datum/species/teshari name = "Teshari" id = SPECIES_TESHARI - eyes_icon = 'modular_skyrat/modules/organs/icons/teshari_eyes.dmi' + eyes_icon = 'modular_nova/modules/organs/icons/teshari_eyes.dmi' inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, @@ -14,11 +14,6 @@ TRAIT_NO_UNDERWEAR, TRAIT_HAS_MARKINGS, ) - default_mutant_bodyparts = list( - "tail" = ACC_RANDOM, - "ears" = ACC_RANDOM, - "legs" = "Normal Legs" - ) digitigrade_customization = DIGITIGRADE_NEVER changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT payday_modifier = 1.0 @@ -53,6 +48,13 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/mutant/teshari, ) +/datum/species/teshari/get_default_mutant_bodyparts() + return list( + "tail" = list("Teshari (Default)", TRUE), + "ears" = list("Teshari Regular", TRUE), + "legs" = list("Normal Legs", FALSE), + ) + /obj/item/organ/internal/tongue/teshari liked_foodtypes = MEAT diff --git a/modular_skyrat/modules/teshari/code/language_holder.dm b/modular_nova/modules/teshari/code/language_holder.dm similarity index 100% rename from modular_skyrat/modules/teshari/code/language_holder.dm rename to modular_nova/modules/teshari/code/language_holder.dm diff --git a/modular_skyrat/modules/teshari/code/schechi.dm b/modular_nova/modules/teshari/code/schechi.dm similarity index 87% rename from modular_skyrat/modules/teshari/code/schechi.dm rename to modular_nova/modules/teshari/code/schechi.dm index 47c2c136cc0416..e049738f63941f 100644 --- a/modular_skyrat/modules/teshari/code/schechi.dm +++ b/modular_nova/modules/teshari/code/schechi.dm @@ -8,6 +8,6 @@ "e", "she", "re", "me", "ne", "te", "se", "le", "ai", "a", "ra", "ca", "scha", "tara", "sa", "la", "na", ) - icon = 'modular_skyrat/master_files/icons/misc/language.dmi' + icon = 'modular_nova/master_files/icons/misc/language.dmi' icon_state = "schechi" default_priority = 90 diff --git a/modular_skyrat/modules/teshari/code/teshari_bodytype.dm b/modular_nova/modules/teshari/code/teshari_bodytype.dm similarity index 100% rename from modular_skyrat/modules/teshari/code/teshari_bodytype.dm rename to modular_nova/modules/teshari/code/teshari_bodytype.dm diff --git a/modular_skyrat/modules/teshari/code/teshari_clothes.dm b/modular_nova/modules/teshari/code/teshari_clothes.dm similarity index 100% rename from modular_skyrat/modules/teshari/code/teshari_clothes.dm rename to modular_nova/modules/teshari/code/teshari_clothes.dm diff --git a/modular_skyrat/modules/ticket_counter/code/counter.dm b/modular_nova/modules/ticket_counter/code/counter.dm similarity index 100% rename from modular_skyrat/modules/ticket_counter/code/counter.dm rename to modular_nova/modules/ticket_counter/code/counter.dm diff --git a/modular_skyrat/modules/time_clock/code/console.dm b/modular_nova/modules/time_clock/code/console.dm similarity index 97% rename from modular_skyrat/modules/time_clock/code/console.dm rename to modular_nova/modules/time_clock/code/console.dm index 0305045c511804..636346ff6efc7c 100644 --- a/modular_skyrat/modules/time_clock/code/console.dm +++ b/modular_nova/modules/time_clock/code/console.dm @@ -3,7 +3,7 @@ /obj/machinery/time_clock name = "time clock" desc = "Allows employees to clock in and out of their jobs" - icon = 'modular_skyrat/modules/time_clock/icons/machinery/console.dmi' + icon = 'modular_nova/modules/time_clock/icons/machinery/console.dmi' icon_state = "timeclock" density = FALSE @@ -202,6 +202,9 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/time_clock, 28) icon_state = "unanchoredstatusdisplay" result_path = /obj/machinery/time_clock pixel_shift = 28 - custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2) + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + ) #undef CLOCK_IN_COOLDOWN diff --git a/modular_skyrat/modules/time_clock/code/console_tgui.dm b/modular_nova/modules/time_clock/code/console_tgui.dm similarity index 98% rename from modular_skyrat/modules/time_clock/code/console_tgui.dm rename to modular_nova/modules/time_clock/code/console_tgui.dm index 0060e134a46356..99ac746f262f01 100644 --- a/modular_skyrat/modules/time_clock/code/console_tgui.dm +++ b/modular_nova/modules/time_clock/code/console_tgui.dm @@ -29,7 +29,7 @@ /obj/item/gun/energy/e_gun/hos, \ /obj/item/pinpointer/nuke, \ /obj/item/gun/energy/e_gun, \ - /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/skild, \ + /obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/skild, \ /obj/item/storage/belt/sabre, \ /obj/item/mod/control/pre_equipped/magnate, \ /obj/item/mod/control/pre_equipped/blueshield, \ diff --git a/modular_skyrat/modules/time_clock/code/mind.dm b/modular_nova/modules/time_clock/code/mind.dm similarity index 100% rename from modular_skyrat/modules/time_clock/code/mind.dm rename to modular_nova/modules/time_clock/code/mind.dm diff --git a/modular_skyrat/modules/time_clock/code/off_duty_component.dm b/modular_nova/modules/time_clock/code/off_duty_component.dm similarity index 97% rename from modular_skyrat/modules/time_clock/code/off_duty_component.dm rename to modular_nova/modules/time_clock/code/off_duty_component.dm index c2f26fb7347cc3..17538fe91117fd 100644 --- a/modular_skyrat/modules/time_clock/code/off_duty_component.dm +++ b/modular_nova/modules/time_clock/code/off_duty_component.dm @@ -25,7 +25,7 @@ RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, PROC_REF(attempt_unlock)) -/datum/component/off_duty_timer/Destroy(force, silent) +/datum/component/off_duty_timer/Destroy(force) UnregisterSignal(parent, COMSIG_ATOM_ATTACKBY) if(stored_trim) qdel(stored_trim) diff --git a/modular_skyrat/modules/time_clock/icons/machinery/console.dmi b/modular_nova/modules/time_clock/icons/machinery/console.dmi similarity index 100% rename from modular_skyrat/modules/time_clock/icons/machinery/console.dmi rename to modular_nova/modules/time_clock/icons/machinery/console.dmi diff --git a/modular_skyrat/modules/title_screen/code/_title_screen_defines.dm b/modular_nova/modules/title_screen/code/_title_screen_defines.dm similarity index 95% rename from modular_skyrat/modules/title_screen/code/_title_screen_defines.dm rename to modular_nova/modules/title_screen/code/_title_screen_defines.dm index 6ba1050a41107d..64761e8532ff98 100644 --- a/modular_skyrat/modules/title_screen/code/_title_screen_defines.dm +++ b/modular_nova/modules/title_screen/code/_title_screen_defines.dm @@ -1,7 +1,7 @@ #define DEFAULT_TITLE_MAP_LOADTIME (150 SECONDS) -#define DEFAULT_TITLE_SCREEN_IMAGE 'modular_skyrat/modules/title_screen/icons/skyrat_title_screen.png' -#define DEFAULT_TITLE_LOADING_SCREEN 'modular_skyrat/modules/title_screen/icons/loading_screen.gif' +#define DEFAULT_TITLE_SCREEN_IMAGE 'modular_nova/modules/title_screen/icons/nova_sector_title_screen.png' +#define DEFAULT_TITLE_LOADING_SCREEN 'modular_nova/modules/title_screen/icons/loading_screen.gif' #define TITLE_PROGRESS_CACHE_FILE "data/progress_cache.json" #define TITLE_PROGRESS_CACHE_VERSION "2" diff --git a/modular_skyrat/modules/title_screen/code/new_player.dm b/modular_nova/modules/title_screen/code/new_player.dm similarity index 98% rename from modular_skyrat/modules/title_screen/code/new_player.dm rename to modular_nova/modules/title_screen/code/new_player.dm index 33e8a964695846..711d8518949d12 100644 --- a/modular_skyrat/modules/title_screen/code/new_player.dm +++ b/modular_nova/modules/title_screen/code/new_player.dm @@ -112,7 +112,7 @@ winset(client, "status_bar", "is-visible=true") /mob/dead/new_player/proc/play_lobby_button_sound() - SEND_SOUND(src, sound('modular_skyrat/master_files/sound/effects/save.ogg')) + SEND_SOUND(src, sound('modular_nova/master_files/sound/effects/save.ogg')) /** * Allows the player to select a server to join from any loaded servers. diff --git a/modular_skyrat/modules/title_screen/code/title_screen_controls.dm b/modular_nova/modules/title_screen/code/title_screen_controls.dm similarity index 96% rename from modular_skyrat/modules/title_screen/code/title_screen_controls.dm rename to modular_nova/modules/title_screen/code/title_screen_controls.dm index 3f241af0f230a8..9e81494a2c3666 100644 --- a/modular_skyrat/modules/title_screen/code/title_screen_controls.dm +++ b/modular_nova/modules/title_screen/code/title_screen_controls.dm @@ -42,7 +42,7 @@ return for(var/mob/dead/new_player/new_player in GLOB.new_player_list) to_chat(new_player, span_boldannounce("TITLE NOTICE UPDATED: [new_notice]")) - SEND_SOUND(new_player, sound('modular_skyrat/modules/admin/sound/duckhonk.ogg')) + SEND_SOUND(new_player, sound('modular_nova/modules/admin/sound/duckhonk.ogg')) /** * Reloads the titlescreen if it is bugged for someone. diff --git a/modular_skyrat/modules/title_screen/code/title_screen_html.dm b/modular_nova/modules/title_screen/code/title_screen_html.dm similarity index 100% rename from modular_skyrat/modules/title_screen/code/title_screen_html.dm rename to modular_nova/modules/title_screen/code/title_screen_html.dm diff --git a/modular_skyrat/modules/title_screen/code/title_screen_pref_middleware.dm b/modular_nova/modules/title_screen/code/title_screen_pref_middleware.dm similarity index 100% rename from modular_skyrat/modules/title_screen/code/title_screen_pref_middleware.dm rename to modular_nova/modules/title_screen/code/title_screen_pref_middleware.dm diff --git a/modular_skyrat/modules/title_screen/code/title_screen_subsystem.dm b/modular_nova/modules/title_screen/code/title_screen_subsystem.dm similarity index 98% rename from modular_skyrat/modules/title_screen/code/title_screen_subsystem.dm rename to modular_nova/modules/title_screen/code/title_screen_subsystem.dm index 3c73ee456a26d1..ab6c9a1f0f847d 100644 --- a/modular_skyrat/modules/title_screen/code/title_screen_subsystem.dm +++ b/modular_nova/modules/title_screen/code/title_screen_subsystem.dm @@ -26,11 +26,11 @@ SUBSYSTEM_DEF(title) /datum/controller/subsystem/title/Initialize() var/dat - if(!fexists("[global.config.directory]/skyrat/title_html.txt")) + if(!fexists("[global.config.directory]/nova/title_html.txt")) to_chat(world, span_boldwarning("CRITICAL ERROR: Unable to read title_html.txt, reverting to backup title html, please check your server config and ensure this file exists.")) dat = DEFAULT_TITLE_HTML else - dat = file2text("[global.config.directory]/skyrat/title_html.txt") + dat = file2text("[global.config.directory]/nova/title_html.txt") title_html = dat diff --git a/modular_skyrat/modules/title_screen/icons/loading_screen.gif b/modular_nova/modules/title_screen/icons/loading_screen.gif similarity index 100% rename from modular_skyrat/modules/title_screen/icons/loading_screen.gif rename to modular_nova/modules/title_screen/icons/loading_screen.gif diff --git a/modular_nova/modules/title_screen/icons/nova_sector_title_screen.png b/modular_nova/modules/title_screen/icons/nova_sector_title_screen.png new file mode 100644 index 00000000000000..b9cd51a32f36e2 Binary files /dev/null and b/modular_nova/modules/title_screen/icons/nova_sector_title_screen.png differ diff --git a/modular_nova/modules/title_screen/readme.md b/modular_nova/modules/title_screen/readme.md new file mode 100644 index 00000000000000..9061f2c0e31a94 --- /dev/null +++ b/modular_nova/modules/title_screen/readme.md @@ -0,0 +1,38 @@ +# Title: Lobby screens! + +MODULE ID: lobbyscreen + +## Description: + +Adds a brand new look to the lobby screen, adds a splash screen too, since that shit is awesome. Inspired by TauCeti, heavily modified by me. + +## Guide: + +To make sure your server doesn't/does have this feature, see config.txt +##Enable server swapping, uncomment to enable reading of swap_ips.txt (file directory: config/nova/swap_ips.txt) +SERVER_SWAP_ENABLED +if you use this, make sure swap_ips.txt is present in nova config. + +We offer the option to customise the lobby HTML by giving you access to a file named lobby_html.txt in the config. The server will runtime if this file does not exist. Ensure it exists in directory config/nova/lobby_html.txt. + +DO NOT UNDER ANY CIRCUMSTANCES RENAME THE ELEMENTS WITHIN THE HTML FILE, KEEP THEM AS THEY ARE. + +Elements: +.bg - the background image +.container_terminal - This is the startup terminal html, generally, don't change this unless you want a cooler startup terminal. +.terminal_text - Terminal text +.container_progress - This is the container for the progress bar. Changing this likely involves changing the .container_terminal. +.progress_bar - The moving part of the progress bar. Must start at 0% width; the body script updates the width live. +.fade_out - Generic class that fades content out. Currently applied to .container_progress when the progress bar overruns 100%. +.container_nav - This is the main menu container box, it defines where the menu is, and what it looks like. +.menu_button - The "buttons" for the main menu(join, observe, etc). +.menu_button:hover - The animation for hovering over buttons. +.menu_newpoll - This is the new polls text, so players attention is brought to it, flashes in and out with @ pollsmove animation. +.container_notice - This is the admin notice container for when an admin sets the title notice. This button is under fun in the admin tab. +.menu_notice - Admin notice text. +.unchecked - Unchecked ☒ box. +.checked - Checked ☑ box. +REMEMBER, DO NOT EDIT THESE ELEMENT NAMES ELSE THE LOBBYSCREEN WILL BREAK. + +## Credits: +Gandalf2k15 & TauCeti diff --git a/modular_nova/modules/traitor-uplinks/code/categories/bundles.dm b/modular_nova/modules/traitor-uplinks/code/categories/bundles.dm new file mode 100644 index 00000000000000..35f5861c826157 --- /dev/null +++ b/modular_nova/modules/traitor-uplinks/code/categories/bundles.dm @@ -0,0 +1,10 @@ +/datum/uplink_item/bundles_tc/surplus + desc = "A dusty crate from the back of the Symphionia warehouse delivered directly to you via Supply Pod. \ + Contents are sorted to always be worth 50 TC. The Symphionia will only provide one surplus item per agent." + crate_tc_value = 50 + +/datum/uplink_item/bundles_tc/surplus/united + desc = "A shiny and large crate to be delivered directly to you via Supply Pod. It has an advanced locking mechanism with an anti-tampering protocol. \ + It is recommended that you only attempt to open it by having another agent purchase a Surplus Crate Key. Unite and fight. \ + Contents are sorted to always be worth 125 TC. The Symphionia will only provide one surplus item per agent." + crate_tc_value = 125 diff --git a/modular_skyrat/modules/skyrat-uplinks/code/categories/dangerous.dm b/modular_nova/modules/traitor-uplinks/code/categories/dangerous.dm similarity index 100% rename from modular_skyrat/modules/skyrat-uplinks/code/categories/dangerous.dm rename to modular_nova/modules/traitor-uplinks/code/categories/dangerous.dm diff --git a/modular_skyrat/modules/skyrat-uplinks/code/categories/device_tools.dm b/modular_nova/modules/traitor-uplinks/code/categories/device_tools.dm similarity index 93% rename from modular_skyrat/modules/skyrat-uplinks/code/categories/device_tools.dm rename to modular_nova/modules/traitor-uplinks/code/categories/device_tools.dm index c33882e6c72e18..83444df61bb72f 100644 --- a/modular_skyrat/modules/skyrat-uplinks/code/categories/device_tools.dm +++ b/modular_nova/modules/traitor-uplinks/code/categories/device_tools.dm @@ -1,13 +1,13 @@ /datum/uplink_item/device_tools/syndie_jaws_of_life_traitor - name = "Syndicate Jaws of Life" - desc = "Based on a Nanotrasen model, this powerful tool can be used as both a crowbar and a pair of wirecutters. \ + name = "Symphionia Jaws of Life" + desc = "Based on a Symphionia model, this powerful tool can be used as both a crowbar and a pair of wirecutters. \ In its crowbar configuration, it can be used to force open airlocks. Very useful for entering the station or its departments." item = /obj/item/crowbar/power/syndicate cost = 3 purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) /datum/uplink_item/device_tools/medkit_traitor - name = "Syndicate Combat Medic Kit" + name = "Symphionia Combat Medic Kit" desc = "This first aid kit is a suspicious black and red. Included is a number of atropine medipens \ for rapid stabilization and detonation prevention, sutures and regenerative mesh for wound treatment, and patches \ for faster healing on the field. Also comes with basic medical tools and sterlizer." @@ -48,7 +48,7 @@ progression_minimum = 20 MINUTES /datum/uplink_item/device_tools/syndicateborg - name = "Syndicate Cyborg Upgrade" + name = "Symphionia Cyborg Upgrade" desc = "A marvel of modern syndicate technology; a syndicate borg hijacker. Allowing for the use of extremely powerful repair nanites, building equipment and otherwise useful upgrades to the standard saboteur modules. Due to its relatively experimental nature, it will only work on cyborgs which have already been jailbroken by an electromagnetic sequencer." item = /obj/item/borg/upgrade/transform/syndicatejack cost = 5 //Support item and the fact that you need a emag to use it on a cyborg diff --git a/modular_skyrat/modules/skyrat-uplinks/code/categories/stealthy_tools.dm b/modular_nova/modules/traitor-uplinks/code/categories/stealthy_tools.dm similarity index 94% rename from modular_skyrat/modules/skyrat-uplinks/code/categories/stealthy_tools.dm rename to modular_nova/modules/traitor-uplinks/code/categories/stealthy_tools.dm index 3fde4cfd69acd7..dfd990cd7f1fa7 100644 --- a/modular_skyrat/modules/skyrat-uplinks/code/categories/stealthy_tools.dm +++ b/modular_nova/modules/traitor-uplinks/code/categories/stealthy_tools.dm @@ -9,7 +9,7 @@ purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) /datum/uplink_item/stealthy_tools/syndieshotglasses - name = "Extra Large Syndicate Shotglasses" + name = "Extra Large Symphionia Shotglasses" desc = "These modified shot glasses can hold up to 50 units of booze while looking like a regular 15 unit model \ guaranteed to knock someone on their ass with a hearty dose of bacchus blessing. Look for the Snake underneath \ to tell these are the real deal. Box of 7." diff --git a/modular_skyrat/modules/skyrat-uplinks/code/categories/stealthy_weapons.dm b/modular_nova/modules/traitor-uplinks/code/categories/stealthy_weapons.dm similarity index 100% rename from modular_skyrat/modules/skyrat-uplinks/code/categories/stealthy_weapons.dm rename to modular_nova/modules/traitor-uplinks/code/categories/stealthy_weapons.dm diff --git a/modular_nova/modules/traitor-uplinks/code/categories/suits.dm b/modular_nova/modules/traitor-uplinks/code/categories/suits.dm new file mode 100644 index 00000000000000..4a2c08fb59b2fc --- /dev/null +++ b/modular_nova/modules/traitor-uplinks/code/categories/suits.dm @@ -0,0 +1,23 @@ +/datum/uplink_item/suits/standard_armor + name = "Standard Armor Vest" + desc = "A slim Type I armored vest that provides decent protection against most types of damage." + item = /obj/item/clothing/suit/armor/vest + cost = 1 + illegal_tech = FALSE + progression_minimum = 10 MINUTES + +/datum/uplink_item/suits/bulletproof_armor + name = "Bulletproof Armor Vest" + desc = "A Type III heavy bulletproof vest that excels in protecting the wearer against traditional projectile weaponry and explosives to a minor extent." + item = /obj/item/clothing/suit/armor/bulletproof + cost = 3 + illegal_tech = FALSE + progression_minimum = 15 MINUTES + +/datum/uplink_item/suits/swathelmet_traitor + name = "Symphionia Helmet" + desc = "An extremely robust, space-worthy helmet in a nefarious red and black stripe pattern." + item = /obj/item/clothing/head/helmet/swat + cost = 2 + illegal_tech = FALSE + progression_minimum = 10 MINUTES diff --git a/modular_skyrat/modules/tribal_extended/code/ammo/caseless/arrow.dm b/modular_nova/modules/tribal_extended/code/ammo/caseless/arrow.dm similarity index 78% rename from modular_skyrat/modules/tribal_extended/code/ammo/caseless/arrow.dm rename to modular_nova/modules/tribal_extended/code/ammo/caseless/arrow.dm index d6821ae8a58a0c..4d3d6f640722dc 100644 --- a/modular_skyrat/modules/tribal_extended/code/ammo/caseless/arrow.dm +++ b/modular_nova/modules/tribal_extended/code/ammo/caseless/arrow.dm @@ -1,20 +1,20 @@ /obj/item/ammo_casing/arrow/ash name = "ashen arrow" desc = "An arrow made from ash and iron. They're cheap, but they fell the beasts of lavaland like none other." - icon = 'modular_skyrat/modules/tribal_extended/icons/ammo.dmi' + icon = 'modular_nova/modules/tribal_extended/icons/ammo.dmi' icon_state = "ashenarrow" projectile_type = /obj/projectile/bullet/arrow/ash /obj/item/ammo_casing/arrow/bone name = "bone arrow" desc = "An arrow made of bone and sinew. The tip is sharp and jagged, suitable for digging into flesh." - icon = 'modular_skyrat/modules/tribal_extended/icons/ammo.dmi' + icon = 'modular_nova/modules/tribal_extended/icons/ammo.dmi' icon_state = "bonearrow" projectile_type = /obj/projectile/bullet/arrow/bone /obj/item/ammo_casing/arrow/bronze name = "bronze arrow" desc = "An arrow tipped with bronze. Fit for killing gods." - icon = 'modular_skyrat/modules/tribal_extended/icons/ammo.dmi' + icon = 'modular_nova/modules/tribal_extended/icons/ammo.dmi' icon_state = "bronzearrow" projectile_type = /obj/projectile/bullet/arrow/bronze diff --git a/modular_skyrat/modules/tribal_extended/code/ammo/reusable/arrow.dm b/modular_nova/modules/tribal_extended/code/ammo/reusable/arrow.dm similarity index 100% rename from modular_skyrat/modules/tribal_extended/code/ammo/reusable/arrow.dm rename to modular_nova/modules/tribal_extended/code/ammo/reusable/arrow.dm diff --git a/modular_nova/modules/tribal_extended/code/crafting.dm b/modular_nova/modules/tribal_extended/code/crafting.dm new file mode 100644 index 00000000000000..4896394a55093f --- /dev/null +++ b/modular_nova/modules/tribal_extended/code/crafting.dm @@ -0,0 +1,5 @@ +/obj/item/weaponcrafting/silkstring + name = "string" + desc = "A long piece of string that looks like a cable coil." + icon = 'modular_nova/modules/tribal_extended/icons/crafting.dmi' + icon_state = "silkstring" diff --git a/modular_skyrat/modules/tribal_extended/code/recipes.dm b/modular_nova/modules/tribal_extended/code/recipes.dm similarity index 100% rename from modular_skyrat/modules/tribal_extended/code/recipes.dm rename to modular_nova/modules/tribal_extended/code/recipes.dm diff --git a/modular_nova/modules/tribal_extended/code/weapons/bow.dm b/modular_nova/modules/tribal_extended/code/weapons/bow.dm new file mode 100644 index 00000000000000..c9c8955f8ea5f9 --- /dev/null +++ b/modular_nova/modules/tribal_extended/code/weapons/bow.dm @@ -0,0 +1,36 @@ +/obj/item/gun/ballistic/bow/tribalbow + icon = 'modular_nova/modules/tribal_extended/icons/projectile.dmi' + lefthand_file = 'modular_nova/modules/tribal_extended/icons/bows_lefthand.dmi' + righthand_file = 'modular_nova/modules/tribal_extended/icons/bows_righthand.dmi' + worn_icon = 'modular_nova/modules/tribal_extended/icons/back.dmi' + inhand_icon_state = "bow" + icon_state = "bow_unloaded" + base_icon_state = "bow" + worn_icon_state = "bow" + slot_flags = ITEM_SLOT_BACK + +/obj/item/gun/ballistic/bow/tribalbow/update_icon() + . = ..() + icon_state = "[base_icon_state]_[get_ammo() ? (chambered ? "firing" : "loaded") : "unloaded"]" + + +/obj/item/gun/ballistic/bow/tribalbow/ashen + name = "bone bow" + desc = "Some sort of primitive projectile weapon made of bone and wrapped sinew, oddly robust." + icon = 'modular_nova/modules/tribal_extended/icons/projectile.dmi' + icon_state = "ashenbow_unloaded" + base_icon_state = "ashenbow" + inhand_icon_state = "ashenbow" + worn_icon_state = "ashenbow" + force = 20 + +/obj/item/gun/ballistic/bow/tribalbow/pipe + name = "pipe bow" + desc = "Portable and sleek, but you'd be better off hitting someone with a pool noodle." + icon = 'modular_nova/modules/tribal_extended/icons/projectile.dmi' + icon_state = "pipebow_unloaded" + base_icon_state = "pipebow" + inhand_icon_state = "pipebow" + worn_icon_state = "pipebow" + force = 10 + slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_SUITSTORE diff --git a/modular_nova/modules/tribal_extended/code/weapons/shield.dm b/modular_nova/modules/tribal_extended/code/weapons/shield.dm new file mode 100644 index 00000000000000..d56098b71a85c3 --- /dev/null +++ b/modular_nova/modules/tribal_extended/code/weapons/shield.dm @@ -0,0 +1,14 @@ +/obj/item/shield/goliath + name = "goliath shield" + desc = "A shield made from interwoven plates of goliath hide." + icon = 'modular_nova/modules/tribal_extended/icons/shields.dmi' + icon_state = "goliath_shield" + lefthand_file = 'modular_nova/modules/tribal_extended/icons/shields_lefthand.dmi' + righthand_file = 'modular_nova/modules/tribal_extended/icons/shields_righthand.dmi' + worn_icon = 'modular_nova/modules/tribal_extended/icons/back.dmi' + worn_icon_state = "goliath_shield" + inhand_icon_state = "goliath_shield" + max_integrity = 200 + w_class = WEIGHT_CLASS_BULKY + shield_break_sound = 'sound/effects/bang.ogg' + shield_break_leftover = /obj/item/stack/sheet/animalhide/goliath_hide diff --git a/modular_nova/modules/tribal_extended/code/weapons/sword.dm b/modular_nova/modules/tribal_extended/code/weapons/sword.dm new file mode 100644 index 00000000000000..311c81e13611e1 --- /dev/null +++ b/modular_nova/modules/tribal_extended/code/weapons/sword.dm @@ -0,0 +1,23 @@ +/obj/item/claymore/bone + name = "bone sword" + desc = "Jagged pieces of bone are tied to what looks like a goliaths femur." + icon = 'modular_nova/modules/tribal_extended/icons/items_and_weapons.dmi' + lefthand_file = 'modular_nova/modules/tribal_extended/icons/swords_lefthand.dmi' + righthand_file = 'modular_nova/modules/tribal_extended/icons/swords_righthand.dmi' + worn_icon = 'modular_nova/modules/tribal_extended/icons/back.dmi' + icon_state = "bone_sword" + inhand_icon_state = "bone_sword" + worn_icon_state = "bone_sword" + slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK + force = 20 + throwforce = 10 + armour_penetration = 10 + w_class = WEIGHT_CLASS_NORMAL + hitsound = 'sound/weapons/bladeslice.ogg' + attack_verb_continuous = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + block_chance = 0 + armor_type = /datum/armor/claymore_bone + +/datum/armor/claymore_bone + fire = 100 + acid = 50 diff --git a/modular_skyrat/modules/tribal_extended/icons/ammo.dmi b/modular_nova/modules/tribal_extended/icons/ammo.dmi similarity index 100% rename from modular_skyrat/modules/tribal_extended/icons/ammo.dmi rename to modular_nova/modules/tribal_extended/icons/ammo.dmi diff --git a/modular_skyrat/modules/tribal_extended/icons/back.dmi b/modular_nova/modules/tribal_extended/icons/back.dmi similarity index 100% rename from modular_skyrat/modules/tribal_extended/icons/back.dmi rename to modular_nova/modules/tribal_extended/icons/back.dmi diff --git a/modular_skyrat/modules/tribal_extended/icons/belt.dmi b/modular_nova/modules/tribal_extended/icons/belt.dmi similarity index 100% rename from modular_skyrat/modules/tribal_extended/icons/belt.dmi rename to modular_nova/modules/tribal_extended/icons/belt.dmi diff --git a/modular_skyrat/modules/tribal_extended/icons/bows_lefthand.dmi b/modular_nova/modules/tribal_extended/icons/bows_lefthand.dmi similarity index 100% rename from modular_skyrat/modules/tribal_extended/icons/bows_lefthand.dmi rename to modular_nova/modules/tribal_extended/icons/bows_lefthand.dmi diff --git a/modular_skyrat/modules/tribal_extended/icons/bows_righthand.dmi b/modular_nova/modules/tribal_extended/icons/bows_righthand.dmi similarity index 100% rename from modular_skyrat/modules/tribal_extended/icons/bows_righthand.dmi rename to modular_nova/modules/tribal_extended/icons/bows_righthand.dmi diff --git a/modular_skyrat/modules/tribal_extended/icons/crafting.dmi b/modular_nova/modules/tribal_extended/icons/crafting.dmi similarity index 100% rename from modular_skyrat/modules/tribal_extended/icons/crafting.dmi rename to modular_nova/modules/tribal_extended/icons/crafting.dmi diff --git a/modular_skyrat/modules/tribal_extended/icons/items_and_weapons.dmi b/modular_nova/modules/tribal_extended/icons/items_and_weapons.dmi similarity index 100% rename from modular_skyrat/modules/tribal_extended/icons/items_and_weapons.dmi rename to modular_nova/modules/tribal_extended/icons/items_and_weapons.dmi diff --git a/modular_skyrat/modules/tribal_extended/icons/projectile.dmi b/modular_nova/modules/tribal_extended/icons/projectile.dmi similarity index 100% rename from modular_skyrat/modules/tribal_extended/icons/projectile.dmi rename to modular_nova/modules/tribal_extended/icons/projectile.dmi diff --git a/modular_skyrat/modules/tribal_extended/icons/shields.dmi b/modular_nova/modules/tribal_extended/icons/shields.dmi similarity index 100% rename from modular_skyrat/modules/tribal_extended/icons/shields.dmi rename to modular_nova/modules/tribal_extended/icons/shields.dmi diff --git a/modular_skyrat/modules/tribal_extended/icons/shields_lefthand.dmi b/modular_nova/modules/tribal_extended/icons/shields_lefthand.dmi similarity index 100% rename from modular_skyrat/modules/tribal_extended/icons/shields_lefthand.dmi rename to modular_nova/modules/tribal_extended/icons/shields_lefthand.dmi diff --git a/modular_skyrat/modules/tribal_extended/icons/shields_righthand.dmi b/modular_nova/modules/tribal_extended/icons/shields_righthand.dmi similarity index 100% rename from modular_skyrat/modules/tribal_extended/icons/shields_righthand.dmi rename to modular_nova/modules/tribal_extended/icons/shields_righthand.dmi diff --git a/modular_skyrat/modules/tribal_extended/icons/swords_lefthand.dmi b/modular_nova/modules/tribal_extended/icons/swords_lefthand.dmi similarity index 100% rename from modular_skyrat/modules/tribal_extended/icons/swords_lefthand.dmi rename to modular_nova/modules/tribal_extended/icons/swords_lefthand.dmi diff --git a/modular_skyrat/modules/tribal_extended/icons/swords_righthand.dmi b/modular_nova/modules/tribal_extended/icons/swords_righthand.dmi similarity index 100% rename from modular_skyrat/modules/tribal_extended/icons/swords_righthand.dmi rename to modular_nova/modules/tribal_extended/icons/swords_righthand.dmi diff --git a/modular_skyrat/modules/tribal_extended/sound/sound_weapons_bowdraw.ogg b/modular_nova/modules/tribal_extended/sound/sound_weapons_bowdraw.ogg similarity index 100% rename from modular_skyrat/modules/tribal_extended/sound/sound_weapons_bowdraw.ogg rename to modular_nova/modules/tribal_extended/sound/sound_weapons_bowdraw.ogg diff --git a/modular_skyrat/modules/tribal_extended/sound/sound_weapons_bowfire.ogg b/modular_nova/modules/tribal_extended/sound/sound_weapons_bowfire.ogg similarity index 100% rename from modular_skyrat/modules/tribal_extended/sound/sound_weapons_bowfire.ogg rename to modular_nova/modules/tribal_extended/sound/sound_weapons_bowfire.ogg diff --git a/modular_skyrat/modules/trim_tokens/code/cards_ids.dm b/modular_nova/modules/trim_tokens/code/cards_ids.dm similarity index 100% rename from modular_skyrat/modules/trim_tokens/code/cards_ids.dm rename to modular_nova/modules/trim_tokens/code/cards_ids.dm diff --git a/modular_skyrat/modules/trim_tokens/code/trim_tokens.dm b/modular_nova/modules/trim_tokens/code/trim_tokens.dm similarity index 100% rename from modular_skyrat/modules/trim_tokens/code/trim_tokens.dm rename to modular_nova/modules/trim_tokens/code/trim_tokens.dm diff --git a/modular_skyrat/modules/trim_tokens/readme.md b/modular_nova/modules/trim_tokens/readme.md similarity index 100% rename from modular_skyrat/modules/trim_tokens/readme.md rename to modular_nova/modules/trim_tokens/readme.md diff --git a/modular_skyrat/modules/turretid/code/turret_id_system.dm b/modular_nova/modules/turretid/code/turret_id_system.dm similarity index 100% rename from modular_skyrat/modules/turretid/code/turret_id_system.dm rename to modular_nova/modules/turretid/code/turret_id_system.dm diff --git a/modular_skyrat/modules/turretid/readme.md b/modular_nova/modules/turretid/readme.md similarity index 100% rename from modular_skyrat/modules/turretid/readme.md rename to modular_nova/modules/turretid/readme.md diff --git a/modular_skyrat/modules/verbs/code/looc.dm b/modular_nova/modules/verbs/code/looc.dm similarity index 96% rename from modular_skyrat/modules/verbs/code/looc.dm rename to modular_nova/modules/verbs/code/looc.dm index 3dd47f9741cf9e..77eb5d02d68e25 100644 --- a/modular_skyrat/modules/verbs/code/looc.dm +++ b/modular_nova/modules/verbs/code/looc.dm @@ -40,8 +40,8 @@ if(is_banned_from(ckey, BAN_LOOC)) to_chat(src, span_warning("You are LOOC banned!")) return - if(mob.stat) - to_chat(src, span_danger("You cannot use LOOC while unconscious or dead.")) + if(mob.stat == DEAD) + to_chat(src, span_danger("You cannot use LOOC while dead.")) return if(istype(mob, /mob/dead)) to_chat(src, span_danger("You cannot use LOOC while ghosting.")) diff --git a/modular_skyrat/modules/verbs/code/say.dm b/modular_nova/modules/verbs/code/say.dm similarity index 100% rename from modular_skyrat/modules/verbs/code/say.dm rename to modular_nova/modules/verbs/code/say.dm diff --git a/modular_skyrat/modules/verbs/code/subtle.dm b/modular_nova/modules/verbs/code/subtle.dm similarity index 92% rename from modular_skyrat/modules/verbs/code/subtle.dm rename to modular_nova/modules/verbs/code/subtle.dm index 9b49680d7a7156..084b77fccad34f 100644 --- a/modular_skyrat/modules/verbs/code/subtle.dm +++ b/modular_nova/modules/verbs/code/subtle.dm @@ -1,5 +1,6 @@ #define SUBTLE_DEFAULT_DISTANCE 1 #define SUBTLE_SAME_TILE_DISTANCE 0 +#define SUBTLER_TELEKINESIS_DISTANCE 7 #define SUBTLE_ONE_TILE_TEXT "1-Tile Range" #define SUBTLE_SAME_TILE_TEXT "Same Tile" @@ -78,6 +79,12 @@ var/subtler_message var/subtler_emote = params var/target + var/subtler_range = SUBTLE_DEFAULT_DISTANCE + + var/datum/dna/dna = user.has_dna() + if(dna && dna?.check_mutation(/datum/mutation/human/telekinesis)) + subtler_range = SUBTLER_TELEKINESIS_DISTANCE + if(SSdbcore.IsConnected() && is_banned_from(user, "emote")) to_chat(user, span_warning("You cannot send subtle emotes (banned).")) return FALSE @@ -89,7 +96,7 @@ if(!subtler_emote) return FALSE - var/list/in_view = get_hearers_in_view(1, user) + var/list/in_view = get_hearers_in_view(subtler_range, user) var/obj/effect/overlay/holo_pad_hologram/hologram = GLOB.hologram_impersonators[user] if(hologram) @@ -132,7 +139,7 @@ var/mob/target_mob = target user.show_message(subtler_message, alt_msg = subtler_message) var/obj/effect/overlay/holo_pad_hologram/hologram = GLOB.hologram_impersonators[user] - if((get_dist(user.loc, target_mob.loc) <= SUBTLE_DEFAULT_DISTANCE) || (hologram && get_dist(hologram.loc, target_mob.loc) <= SUBTLE_DEFAULT_DISTANCE)) + if((get_dist(user.loc, target_mob.loc) <= subtler_range) || (hologram && get_dist(hologram.loc, target_mob.loc) <= subtler_range)) target_mob.show_message(subtler_message, alt_msg = subtler_message) else to_chat(user, span_warning("Your emote was unable to be sent to your target: Too far away.")) @@ -188,6 +195,7 @@ #undef SUBTLE_DEFAULT_DISTANCE #undef SUBTLE_SAME_TILE_DISTANCE +#undef SUBTLER_TELEKINESIS_DISTANCE #undef SUBTLE_ONE_TILE_TEXT #undef SUBTLE_SAME_TILE_TEXT diff --git a/modular_nova/modules/verbs/readme.md b/modular_nova/modules/verbs/readme.md new file mode 100644 index 00000000000000..c2ef5f04dc8bdb --- /dev/null +++ b/modular_nova/modules/verbs/readme.md @@ -0,0 +1,30 @@ +https://github.com/Skyrat-SS13/Skyrat-tg/pull/872 + +## Title: More verbs and subtler. + +MODULE ID: VERBS + +### Description: + +Adds a few emotes and verbs for players to use, such as LOOC, subtle. + +### TG Proc Changes: + +- N/A + +### Defines: + +- #define CHAT_LOOC (1<<12) +- #define CHAT_LOOC_ADMIN (1<<13) +- #define LOG_SUBTLER (1 << 20) + +### Master file additions + +- D:\Documents\Github\SS13\Skyrat-tg\modular_nova\master_files\code\_globalvars\configuration.dm + +### Included files that are not contained in this module: + +- N/A + +### Credits: +Gandalf2k15 - porting and refactoring diff --git a/modular_skyrat/modules/veteran_only/code/job_types.dm b/modular_nova/modules/veteran_only/code/job_types.dm similarity index 100% rename from modular_skyrat/modules/veteran_only/code/job_types.dm rename to modular_nova/modules/veteran_only/code/job_types.dm diff --git a/modular_skyrat/modules/veteran_only/code/species_types.dm b/modular_nova/modules/veteran_only/code/species_types.dm similarity index 100% rename from modular_skyrat/modules/veteran_only/code/species_types.dm rename to modular_nova/modules/veteran_only/code/species_types.dm diff --git a/modular_skyrat/modules/veteran_only/readme.md b/modular_nova/modules/veteran_only/readme.md similarity index 100% rename from modular_skyrat/modules/veteran_only/readme.md rename to modular_nova/modules/veteran_only/readme.md diff --git a/modular_skyrat/modules/vox_sprites/code/color.dm b/modular_nova/modules/vox_sprites/code/color.dm similarity index 100% rename from modular_skyrat/modules/vox_sprites/code/color.dm rename to modular_nova/modules/vox_sprites/code/color.dm diff --git a/modular_skyrat/modules/vox_sprites/code/head.dm b/modular_nova/modules/vox_sprites/code/head.dm similarity index 100% rename from modular_skyrat/modules/vox_sprites/code/head.dm rename to modular_nova/modules/vox_sprites/code/head.dm diff --git a/modular_skyrat/modules/vox_sprites/code/security.dm b/modular_nova/modules/vox_sprites/code/security.dm similarity index 100% rename from modular_skyrat/modules/vox_sprites/code/security.dm rename to modular_nova/modules/vox_sprites/code/security.dm diff --git a/modular_skyrat/modules/vox_sprites/code/sneakers.dm b/modular_nova/modules/vox_sprites/code/sneakers.dm similarity index 100% rename from modular_skyrat/modules/vox_sprites/code/sneakers.dm rename to modular_nova/modules/vox_sprites/code/sneakers.dm diff --git a/modular_nova/modules/vox_sprites/readme.md b/modular_nova/modules/vox_sprites/readme.md new file mode 100644 index 00000000000000..a02280170465f3 --- /dev/null +++ b/modular_nova/modules/vox_sprites/readme.md @@ -0,0 +1,55 @@ +https://github.com/Skyrat-SS13/Skyrat-tg/pull/7522 + +## Title: Vox sprite fixes, updates, and additions + +MODULE ID: VOX_SPRITES + +### Description: + +Ports the Vox species and clothing sprites from Paradise plus some new GAGS-compatible ones, and adds code to support them. + +### TG Proc/File Changes: + +- APPEND: code/game/objects/items.dm > /obj/item/update_greyscale() +- APPEND: code/modules/mob/living/carbon/human/human_update_icons.dm > /mob/living/carbon/human/update_worn_gloves() + +### Defines: + +- N/A + +### Master file additions + +Species sprites: + +- modular_nova/master_files/icons/mob/body_markings/vox_secondary.dmi #CHANGE +- modular_nova/master_files/icons/mob/species/vox_eyes.dmi #CHANGE +- modular_nova/master_files/icons/mob/species/vox_parts_greyscale.dmi #CHANGE +- modular_nova/master_files/icons/mob/sprite_accessory/vox_facial_hair.dmi #CHANGE +- modular_nova/master_files/icons/mob/sprite_accessory/vox_hair.dmi #CHANGE +- modular_nova/master_files/icons/mob/sprite_accessory/vox_snouts.dmi #CHANGE + +Clothing sprites: + +- modular_nova/master_files/icons/mob/clothing/head_vox.dmi #CHANGE +- modular_nova/master_files/icons/mob/clothing/mask_vox.dmi #CHANGE +- modular_nova/master_files/icons/mob/clothing/species/vox/back.dmi #ADD +- modular_nova/master_files/icons/mob/clothing/species/vox/color_gags_vox.dmi #ADD +- modular_nova/master_files/icons/mob/clothing/species/vox/ears.dmi #ADD +- modular_nova/master_files/icons/mob/clothing/species/vox/eyes.dmi #ADD +- modular_nova/master_files/icons/mob/clothing/species/vox/feet.dmi #ADD +- modular_nova/master_files/icons/mob/clothing/species/vox/hands.dmi #ADD +- modular_nova/master_files/icons/mob/clothing/species/vox/head.dmi #ADD +- modular_nova/master_files/icons/mob/clothing/species/vox/helmet.dmi #ADD +- modular_nova/master_files/icons/mob/clothing/species/vox/suit.dmi #ADD +- modular_nova/master_files/icons/mob/clothing/species/vox/uniform.dmi #ADD + +### Included files that are not contained in this module: + +- N/A + +### Credits: + +Vox species and clothing sprites - Paradise Station + +PR Code - SabreML +PR Sprite implementation & GAGS compatibility - CandleJaxx diff --git a/modular_skyrat/modules/wargame_projectors/code/game_kit.dm b/modular_nova/modules/wargame_projectors/code/game_kit.dm similarity index 95% rename from modular_skyrat/modules/wargame_projectors/code/game_kit.dm rename to modular_nova/modules/wargame_projectors/code/game_kit.dm index fa9f51d8aa8612..56fc113a2cc3dd 100644 --- a/modular_skyrat/modules/wargame_projectors/code/game_kit.dm +++ b/modular_nova/modules/wargame_projectors/code/game_kit.dm @@ -4,12 +4,12 @@ description = "more than enough space for a quick bout of naval warfare" mappath = "_maps/skyrat/holodeck_wargame.dmm" -/obj/item/storage/secure/briefcase/white/wargame_kit +/obj/item/storage/briefcase/secure/white/wargame_kit name = "DIY Wargaming Kit" desc = "Contains everything an aspiring naval officer (or just massive nerd) would need for a proper modern naval wargame." custom_premium_price = PAYCHECK_CREW * 2 -/obj/item/storage/secure/briefcase/white/wargame_kit/PopulateContents() +/obj/item/storage/briefcase/secure/white/wargame_kit/PopulateContents() var/static/items_inside = list( /obj/item/wargame_projector/ships = 1, /obj/item/wargame_projector/ships/red = 1, @@ -23,7 +23,7 @@ /obj/item/book/manual/wargame_rules name = "Wargame: Blue Lizard - Example Ruleset" icon_state = "book" - starting_author = "Nanotrasen Naval Wargames Commission" + starting_author = "Symphionia Naval Wargames Commission" starting_title = "Wargame: Blue Lizard - Example Ruleset" starting_content = {" <head> @@ -35,7 +35,7 @@ </head> <body> <center> - <b style='font-size: 12px;'>Official publication of the Nanotrasen Naval Wargames Commission</b> + <b style='font-size: 12px;'>Official publication of the Symphionia Naval Wargames Commission</b> <h1>Wargame: Blue Lizard</h1> </center> <h2>Introduction</h2> @@ -242,7 +242,7 @@ When the game master determines these objectives to be complete, or that some kind of game ending condition has been achieved, then they may end the game at will. <br> - *Wargame: Blue Lizard is a copyright protected title under ownership of Nanotrasen + *Wargame: Blue Lizard is a copyright protected title under ownership of Symphionia </body> </html> "} @@ -250,7 +250,7 @@ /obj/item/book/manual/wargame_rules/examples name = "Wargame: Blue Lizard - Example Ships and Scenarios" icon_state = "book1" - starting_author = "Nanotrasen Naval Wargames Commission" + starting_author = "Symphionia Naval Wargames Commission" starting_title = "Wargame: Blue Lizard - Example Ships and Scenarios" starting_content = {" <head> @@ -265,7 +265,7 @@ </head> <body> <center> - <b style='font-size: 12px;'>Official publication of the Nanotrasen Naval Wargames Commission</b> + <b style='font-size: 12px;'>Official publication of the Symphionia Naval Wargames Commission</b> <h1>Wargame: Blue Lizard</h1> </center> <h2>Introduction</h2> @@ -275,9 +275,9 @@ ships in this book and that making your own with your game master is encouraged. <br> <h2>Example Ships</h2> - <b>Nanotrasen</b> <br> - Nanotrasen's fleet has historically been focused on quick response, especially due to the spread - of Nanotrasen assets across the galaxy. Their ships are often built to simply get to a location + <b>Symphionia</b> <br> + Symphionia's fleet has historically been focused on quick response, especially due to the spread + of Symphionia assets across the galaxy. Their ships are often built to simply get to a location fast and, hopefully, scare off anything that's there. This isn't to say that modern vessels are incapable of heavy combat, though the vessels in this list will be based upon older, decommissioned ship types due to modern designs being classified. @@ -306,7 +306,7 @@ - ~1/2 a tile's length of movement range <br> -- Battlecruiser -- <br> - The largest commonly fielded ship in Nanotrasen's navy, a fast response vessel with enough guns and + The largest commonly fielded ship in Symphionia's navy, a fast response vessel with enough guns and armor to handle any large threat the fleet comes across, though these ships are a rare sight. <br> - Represented by an alternate large ship marker <br> - Cannons <br> @@ -347,7 +347,7 @@ - ~1/2 a tile's length of movement range <br> <b>NRI</b> <br> - The NRI's navy has always been at least a contender to SolFed's and Nanotrasen's own, heavily focused on missiles + The NRI's navy has always been at least a contender to SolFed's and Symphionia's own, heavily focused on missiles with very few ships straying away from that doctrine. <br> -- Patrol Corvette -- @@ -408,11 +408,11 @@ - ~1 tile's movement range <br> <h2>Example Scenarios</h2> - -- Nanotrasen/NRI Station Skirmish -- <br> - A Nanotrasen sponsored station located in NRI border territories has violated several regulations - and laws, and an NRI patrol fleet has been sent to repossess the station. A force of Nanotrasen + -- Symphionia/NRI Station Skirmish -- <br> + A Symphionia sponsored station located in NRI border territories has violated several regulations + and laws, and an NRI patrol fleet has been sent to repossess the station. A force of Symphionia ships jumps in just in time to intercept. <br> - - Takes place with a Nanotrasen station surrounded by a large asteroid field of some kind between + - Takes place with a Symphionia station surrounded by a large asteroid field of some kind between where both teams start. <br> - Either side will win through complete destruction or surrender of the enemy. <br> - The NRI should start with a few more ships, or stronger ships than the NT force, however @@ -427,7 +427,7 @@ - Both the NRI and SolFed fleets should be about the same size and strength. <br> -- SolFed/Mothic Raiders Convoy Raid -- <br> - A convoy of Nanotrasen cargo vessels, escorted by a small patrol force, come under attack by a sizeable + A convoy of Symphionia cargo vessels, escorted by a small patrol force, come under attack by a sizeable band of mothic raiders. <br> - Takes place in a dense asteroid field <br> - NT will win if they destroy the raiders completely <br> diff --git a/modular_skyrat/modules/wargame_projectors/code/holograms.dm b/modular_nova/modules/wargame_projectors/code/holograms.dm similarity index 98% rename from modular_skyrat/modules/wargame_projectors/code/holograms.dm rename to modular_nova/modules/wargame_projectors/code/holograms.dm index f4abd3187031d8..6f67645227172b 100644 --- a/modular_skyrat/modules/wargame_projectors/code/holograms.dm +++ b/modular_nova/modules/wargame_projectors/code/holograms.dm @@ -1,7 +1,7 @@ /obj/structure/wargame_hologram name = "broken holographic wargame marker" desc = "You have a feeling like this is supposed to be telling you something, but the hologram must have broken." - icon = 'modular_skyrat/modules/wargame_projectors/icons/projectors_and_holograms.dmi' + icon = 'modular_nova/modules/wargame_projectors/icons/projectors_and_holograms.dmi' icon_state = "broke" anchored = TRUE density = FALSE diff --git a/modular_skyrat/modules/wargame_projectors/code/projectors.dm b/modular_nova/modules/wargame_projectors/code/projectors.dm similarity index 98% rename from modular_skyrat/modules/wargame_projectors/code/projectors.dm rename to modular_nova/modules/wargame_projectors/code/projectors.dm index 49c3d46847ad8d..852690d1601d3a 100644 --- a/modular_skyrat/modules/wargame_projectors/code/projectors.dm +++ b/modular_nova/modules/wargame_projectors/code/projectors.dm @@ -1,7 +1,7 @@ /obj/item/wargame_projector name = "holographic projector" desc = "A handy-dandy holographic projector developed by Nanotrasen Naval Command for playing wargames with, this one seems broken." - icon = 'modular_skyrat/modules/wargame_projectors/icons/projectors_and_holograms.dmi' + icon = 'modular_nova/modules/wargame_projectors/icons/projectors_and_holograms.dmi' icon_state = "projector" inhand_icon_state = "electronic" worn_icon_state = "electronic" diff --git a/modular_skyrat/modules/wargame_projectors/icons/projectors_and_holograms.dmi b/modular_nova/modules/wargame_projectors/icons/projectors_and_holograms.dmi similarity index 100% rename from modular_skyrat/modules/wargame_projectors/icons/projectors_and_holograms.dmi rename to modular_nova/modules/wargame_projectors/icons/projectors_and_holograms.dmi diff --git a/modular_skyrat/modules/wargame_projectors/readme.md b/modular_nova/modules/wargame_projectors/readme.md similarity index 100% rename from modular_skyrat/modules/wargame_projectors/readme.md rename to modular_nova/modules/wargame_projectors/readme.md diff --git a/modular_skyrat/modules/window_airbags/code/window_airbag.dm b/modular_nova/modules/window_airbags/code/window_airbag.dm similarity index 94% rename from modular_skyrat/modules/window_airbags/code/window_airbag.dm rename to modular_nova/modules/window_airbags/code/window_airbag.dm index be868e2beba8aa..1f44bf27b95070 100644 --- a/modular_skyrat/modules/window_airbags/code/window_airbag.dm +++ b/modular_nova/modules/window_airbags/code/window_airbag.dm @@ -57,7 +57,7 @@ /obj/item/airbag name = "airbag" desc = "A small package with an explosive attached. Stand clear!" - icon = 'modular_skyrat/modules/inflatables/icons/inflatable.dmi' + icon = 'modular_nova/modules/inflatables/icons/inflatable.dmi' icon_state = "airbag_safe" base_icon_state = "airbag" max_integrity = 10 @@ -70,9 +70,9 @@ /// Are we currently armed? var/armed = FALSE /// The sound we play when armed - var/armed_sound = 'modular_skyrat/modules/window_airbags/sound/airbag_arm.ogg' + var/armed_sound = 'modular_nova/modules/window_airbags/sound/airbag_arm.ogg' /// The sound we play when we go bang - var/bang_sound = 'modular_skyrat/modules/window_airbags/sound/airbag_bang.ogg' + var/bang_sound = 'modular_nova/modules/window_airbags/sound/airbag_bang.ogg' /obj/item/airbag/Initialize(mapload) . = ..() diff --git a/modular_skyrat/modules/window_airbags/readme.md b/modular_nova/modules/window_airbags/readme.md similarity index 100% rename from modular_skyrat/modules/window_airbags/readme.md rename to modular_nova/modules/window_airbags/readme.md diff --git a/modular_skyrat/modules/window_airbags/sound/airbag_arm.ogg b/modular_nova/modules/window_airbags/sound/airbag_arm.ogg similarity index 100% rename from modular_skyrat/modules/window_airbags/sound/airbag_arm.ogg rename to modular_nova/modules/window_airbags/sound/airbag_arm.ogg diff --git a/modular_skyrat/modules/window_airbags/sound/airbag_bang.ogg b/modular_nova/modules/window_airbags/sound/airbag_bang.ogg similarity index 100% rename from modular_skyrat/modules/window_airbags/sound/airbag_bang.ogg rename to modular_nova/modules/window_airbags/sound/airbag_bang.ogg diff --git a/modular_skyrat/modules/wrestlingring/code/wrestlingring.dm b/modular_nova/modules/wrestlingring/code/wrestlingring.dm similarity index 95% rename from modular_skyrat/modules/wrestlingring/code/wrestlingring.dm rename to modular_nova/modules/wrestlingring/code/wrestlingring.dm index 08649bbc93c537..60da9d28f340fd 100644 --- a/modular_skyrat/modules/wrestlingring/code/wrestlingring.dm +++ b/modular_nova/modules/wrestlingring/code/wrestlingring.dm @@ -1,7 +1,7 @@ /obj/structure/railing/wrestling name = "wrestling ropes" desc = "Ropes that are meant to go around a wrestling ring." - icon = 'modular_skyrat/modules/wrestlingring/icons/wrestling.dmi' + icon = 'modular_nova/modules/wrestlingring/icons/wrestling.dmi' icon_state = "ropes" climbable = FALSE @@ -58,7 +58,7 @@ /obj/structure/wrestling_corner name = "wrestling turnbuckle" - icon = 'modular_skyrat/modules/wrestlingring/icons/wrestling.dmi' + icon = 'modular_nova/modules/wrestlingring/icons/wrestling.dmi' icon_state = "turnbuckle" density = TRUE anchored = TRUE @@ -114,7 +114,7 @@ return TRUE /obj/structure/wrestling_corner/deconstruct(disassembled) - if(!(flags_1 & NODECONSTRUCT_1)) + if(!(obj_flags & NO_DECONSTRUCTION)) var/obj/item/stack/sheet/iron/iron_sheets = new /obj/item/stack/sheet/iron(drop_location(), 3) transfer_fingerprints_to(iron_sheets) return ..() @@ -122,7 +122,7 @@ ///Implements behaviour that makes it possible to unanchor the railing. /obj/structure/wrestling_corner/wrench_act(mob/living/user, obj/item/tool) . = ..() - if(flags_1 & NODECONSTRUCT_1) + if(obj_flags & NO_DECONSTRUCTION) return to_chat(user, span_notice("You begin to [anchored ? "unfasten the turnbuckle from":"fasten the turnbuckle to"] the floor...")) if(tool.use_tool(src, user, volume = 75, extra_checks = CALLBACK(src, PROC_REF(check_anchored), anchored))) diff --git a/modular_skyrat/modules/wrestlingring/icons/wrestling.dmi b/modular_nova/modules/wrestlingring/icons/wrestling.dmi similarity index 100% rename from modular_skyrat/modules/wrestlingring/icons/wrestling.dmi rename to modular_nova/modules/wrestlingring/icons/wrestling.dmi diff --git a/modular_nova/modules/xenoarch/code/modules/hydroponics/amauri.dm b/modular_nova/modules/xenoarch/code/modules/hydroponics/amauri.dm new file mode 100644 index 00000000000000..9bafb2bf475e4c --- /dev/null +++ b/modular_nova/modules/xenoarch/code/modules/hydroponics/amauri.dm @@ -0,0 +1,28 @@ +/obj/item/seeds/amauri + name = "pack of amauri seeds" + desc = "These seeds grow into amauri plants. Grows bulbs full of potent toxins." + icon = 'modular_nova/modules/xenoarch/icons/seeds.dmi' + icon_state = "amauri" + species = "amauri" + plantname = "Amauri Plant" + product = /obj/item/food/grown/amauri + lifespan = 55 + endurance = 35 + yield = 5 + growing_icon = 'modular_nova/modules/xenoarch/icons/growing.dmi' + icon_grow = "amauri-stage" + growthstages = 3 + genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/preserved) + reagents_add = list(/datum/reagent/toxin = 0.1, /datum/reagent/toxin/venom = 0.1, /datum/reagent/toxin/hot_ice = 0.1) + +/obj/item/food/grown/amauri + seed = /obj/item/seeds/amauri + name = "amauri" + desc = "A toxic amauri bulb, you shouldn't eat this." + icon = 'modular_nova/modules/xenoarch/icons/harvest.dmi' + icon_state = "amauri" + filling_color = "#FF4500" + bite_consumption_mod = 0.5 + foodtypes = FRUIT + juice_typepath = /datum/reagent/toxin + tastes = list("poison" = 1) diff --git a/modular_nova/modules/xenoarch/code/modules/hydroponics/gelthi.dm b/modular_nova/modules/xenoarch/code/modules/hydroponics/gelthi.dm new file mode 100644 index 00000000000000..3608bb559ab093 --- /dev/null +++ b/modular_nova/modules/xenoarch/code/modules/hydroponics/gelthi.dm @@ -0,0 +1,28 @@ +/obj/item/seeds/gelthi + name = "pack of gelthi seeds" + desc = "These seeds grow into gelthi plants. Lauded by chefs for its unique ability to produce honey, and often hoarded for this very reason." + icon = 'modular_nova/modules/xenoarch/icons/seeds.dmi' + icon_state = "gelthi" + species = "gelthi" + plantname = "Gelthi Plant" + product = /obj/item/food/grown/gelthi + lifespan = 55 + endurance = 35 + yield = 5 + growing_icon = 'modular_nova/modules/xenoarch/icons/growing.dmi' + icon_grow = "gelthi-stage" + growthstages = 3 + genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/squash) + reagents_add = list(/datum/reagent/consumable/sprinkles = 0.1, /datum/reagent/consumable/astrotame = 0.1, /datum/reagent/consumable/honey = 0.2) + +/obj/item/food/grown/gelthi + seed = /obj/item/seeds/gelthi + name = "gelthi" + desc = "A cluster of gelthi pods. Each pod contains a different sweetener, and the pods can be juiced into raw sugar." + icon = 'modular_nova/modules/xenoarch/icons/harvest.dmi' + icon_state = "gelthi" + filling_color = "#FF4500" + bite_consumption_mod = 0.5 + foodtypes = FRUIT + juice_typepath = /datum/reagent/consumable/sugar + tastes = list("overpowering sweetness" = 1) diff --git a/modular_nova/modules/xenoarch/code/modules/hydroponics/jurlmah.dm b/modular_nova/modules/xenoarch/code/modules/hydroponics/jurlmah.dm new file mode 100644 index 00000000000000..952087aa2b2379 --- /dev/null +++ b/modular_nova/modules/xenoarch/code/modules/hydroponics/jurlmah.dm @@ -0,0 +1,28 @@ +/obj/item/seeds/jurlmah + name = "pack of jurlmah seeds" + desc = "These seeds grow into jurlmah plants. Often used as makeshift cryo-treatment in areas where a dedicated cryotube setup is impossible." + icon = 'modular_nova/modules/xenoarch/icons/seeds.dmi' + icon_state = "jurlmah" + species = "jurlmah" + plantname = "Jurlmah Plant" + product = /obj/item/food/grown/jurlmah + lifespan = 55 + endurance = 35 + yield = 5 + growing_icon = 'modular_nova/modules/xenoarch/icons/growing.dmi' + icon_grow = "jurlmah-stage" + growthstages = 5 + genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/blue) + reagents_add = list(/datum/reagent/medicine/cryoxadone = 0.1, /datum/reagent/inverse/healing/tirimol = 0.1, /datum/reagent/consumable/frostoil = 0.1) + +/obj/item/food/grown/jurlmah + seed = /obj/item/seeds/jurlmah + name = "jurlmah" + desc = "A frosty jurlmah fruit, it feels cold to the touch." + icon = 'modular_nova/modules/xenoarch/icons/harvest.dmi' + icon_state = "jurlmah" + filling_color = "#FF4500" + bite_consumption_mod = 0.5 + foodtypes = FRUIT + juice_typepath = /datum/reagent/medicine/cryoxadone + tastes = list("snow" = 1) diff --git a/modular_nova/modules/xenoarch/code/modules/hydroponics/nofruit.dm b/modular_nova/modules/xenoarch/code/modules/hydroponics/nofruit.dm new file mode 100644 index 00000000000000..228016c811f666 --- /dev/null +++ b/modular_nova/modules/xenoarch/code/modules/hydroponics/nofruit.dm @@ -0,0 +1,28 @@ +/obj/item/seeds/nofruit + name = "pack of nofruit seeds" + desc = "These seeds grow into nofruit plants. A strange plant often cultivated by silent performers." + icon = 'modular_nova/modules/xenoarch/icons/seeds.dmi' + icon_state = "nofruit" + species = "nofruit" + plantname = "Nofruit Plant" + product = /obj/item/food/grown/nofruit + lifespan = 55 + endurance = 35 + yield = 5 + growing_icon = 'modular_nova/modules/xenoarch/icons/growing.dmi' + icon_grow = "nofruit-stage" + growthstages = 4 + genes = list(/datum/plant_gene/trait/repeated_harvest) + reagents_add = list(/datum/reagent/consumable/nothing = 0.1, /datum/reagent/toxin/mimesbane = 0.1, /datum/reagent/toxin/mutetoxin = 0.1) + +/obj/item/food/grown/nofruit + seed = /obj/item/seeds/nofruit + name = "nofruit" + desc = "A cubic nofruit, the leaf on top of the nofruit gesticulates wildly." + icon = 'modular_nova/modules/xenoarch/icons/harvest.dmi' + icon_state = "nofruit" + filling_color = "#FF4500" + bite_consumption_mod = 0.5 + foodtypes = FRUIT + juice_typepath = /datum/reagent/consumable/nothing + tastes = list("nothing" = 1) diff --git a/modular_nova/modules/xenoarch/code/modules/hydroponics/shand.dm b/modular_nova/modules/xenoarch/code/modules/hydroponics/shand.dm new file mode 100644 index 00000000000000..8d4580f662c97b --- /dev/null +++ b/modular_nova/modules/xenoarch/code/modules/hydroponics/shand.dm @@ -0,0 +1,28 @@ +/obj/item/seeds/shand + name = "pack of shand seeds" + desc = "These seeds grow into shand plants. While not very useful on it's own, it is full of chemicals that no other plant can produce. A good candidate for crossbreeding." + icon = 'modular_nova/modules/xenoarch/icons/seeds.dmi' + icon_state = "shand" + species = "shand" + plantname = "Shand Plant" + product = /obj/item/food/grown/shand + lifespan = 55 + endurance = 35 + yield = 5 + growing_icon = 'modular_nova/modules/xenoarch/icons/growing.dmi' + icon_grow = "shand-stage" + growthstages = 3 + genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/maxchem) + reagents_add = list(/datum/reagent/bromine = 0.1, /datum/reagent/sodium = 0.1, /datum/reagent/copper = 0.1) + +/obj/item/food/grown/shand + seed = /obj/item/seeds/shand + name = "shand" + desc = "A handful of shand leaves, the leaves are oily and smell like a laboratory." + icon = 'modular_nova/modules/xenoarch/icons/harvest.dmi' + icon_state = "shand" + filling_color = "#FF4500" + bite_consumption_mod = 0.5 + foodtypes = FRUIT + juice_typepath = /datum/reagent/bromine + tastes = list("chemicals" = 1) diff --git a/modular_nova/modules/xenoarch/code/modules/hydroponics/surik.dm b/modular_nova/modules/xenoarch/code/modules/hydroponics/surik.dm new file mode 100644 index 00000000000000..de25c86eded1bb --- /dev/null +++ b/modular_nova/modules/xenoarch/code/modules/hydroponics/surik.dm @@ -0,0 +1,28 @@ +/obj/item/seeds/surik + name = "pack of surik seeds" + desc = "These seeds grow into surik plants. Said to contain the very essence of Indecipheres." + icon = 'modular_nova/modules/xenoarch/icons/seeds.dmi' + icon_state = "surik" + species = "surik" + plantname = "Surik Plant" + product = /obj/item/food/grown/surik + lifespan = 55 + endurance = 35 + yield = 5 + growing_icon = 'modular_nova/modules/xenoarch/icons/growing.dmi' + icon_grow = "surik-stage" + growthstages = 4 + genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/fire_resistance) + reagents_add = list(/datum/reagent/brimdust = 0.1, /datum/reagent/medicine/omnizine/godblood = 0.1, /datum/reagent/wittel = 0.1) + +/obj/item/food/grown/surik + seed = /obj/item/seeds/surik + name = "surik" + desc = "A shimmering surik crystal. The center of the gem thrums with volcanic activity." + icon = 'modular_nova/modules/xenoarch/icons/harvest.dmi' + icon_state = "surik" + filling_color = "#FF4500" + bite_consumption_mod = 0.5 + foodtypes = FRUIT + juice_typepath = /datum/reagent/brimdust + tastes = list("crystals" = 1) diff --git a/modular_nova/modules/xenoarch/code/modules/hydroponics/telriis.dm b/modular_nova/modules/xenoarch/code/modules/hydroponics/telriis.dm new file mode 100644 index 00000000000000..ddd9827adba2a6 --- /dev/null +++ b/modular_nova/modules/xenoarch/code/modules/hydroponics/telriis.dm @@ -0,0 +1,29 @@ +/obj/item/seeds/telriis + name = "pack of telriis seeds" + desc = "These seeds grow into telriis plants. A distant relative of milkweed, this grass can actually be juiced into milk." + icon = 'modular_nova/modules/xenoarch/icons/seeds.dmi' + icon_state = "telriis" + species = "telriis" + plantname = "Telriis Plant" + product = /obj/item/food/grown/telriis + lifespan = 55 + endurance = 35 + yield = 5 + growing_icon = 'modular_nova/modules/xenoarch/icons/growing.dmi' + icon_grow = "telriis-stage" + growthstages = 4 + plant_icon_offset = 7 + genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/invasive) + reagents_add = list(/datum/reagent/consumable/milk = 0.1, /datum/reagent/consumable/soymilk = 0.1, /datum/reagent/consumable/korta_milk) + +/obj/item/food/grown/telriis + seed = /obj/item/seeds/telriis + name = "telriis" + desc = "A sheaf of telris, it can be ground or juiced into a milky liquid." + icon = 'modular_nova/modules/xenoarch/icons/harvest.dmi' + icon_state = "telriis" + filling_color = "#FF4500" + bite_consumption_mod = 0.5 + foodtypes = FRUIT + juice_typepath = /datum/reagent/consumable/coconut_milk + tastes = list("milk" = 1) diff --git a/modular_nova/modules/xenoarch/code/modules/hydroponics/thaadra.dm b/modular_nova/modules/xenoarch/code/modules/hydroponics/thaadra.dm new file mode 100644 index 00000000000000..bf5b8c4eb187fc --- /dev/null +++ b/modular_nova/modules/xenoarch/code/modules/hydroponics/thaadra.dm @@ -0,0 +1,28 @@ +/obj/item/seeds/thaadra + name = "pack of thaadra seeds" + desc = "These seeds grow into thaadra plants. A strange flower full of unique medicines and silver." + icon = 'modular_nova/modules/xenoarch/icons/seeds.dmi' + icon_state = "thaadra" + species = "thaadra" + plantname = "Thaadra Plant" + product = /obj/item/food/grown/thaadra + lifespan = 55 + endurance = 35 + yield = 5 + growing_icon = 'modular_nova/modules/xenoarch/icons/growing.dmi' + icon_grow = "thaadra-stage" + growthstages = 4 + genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/preserved) + reagents_add = list(/datum/reagent/silver = 0.1, /datum/reagent/medicine/sansufentanyl = 0.1, /datum/reagent/medicine/cordiolis_hepatico = 0.1) + +/obj/item/food/grown/thaadra + seed = /obj/item/seeds/thaadra + name = "thaadra" + desc = "A cluster of thaadra petals, full of niche medicinal chemicals." + icon = 'modular_nova/modules/xenoarch/icons/harvest.dmi' + icon_state = "thaadra" + filling_color = "#FF4500" + bite_consumption_mod = 0.5 + foodtypes = FRUIT + juice_typepath = /datum/reagent/silver + tastes = list("silver" = 1) diff --git a/modular_nova/modules/xenoarch/code/modules/hydroponics/vale.dm b/modular_nova/modules/xenoarch/code/modules/hydroponics/vale.dm new file mode 100644 index 00000000000000..0aac3f0b9881c5 --- /dev/null +++ b/modular_nova/modules/xenoarch/code/modules/hydroponics/vale.dm @@ -0,0 +1,28 @@ +/obj/item/seeds/vale + name = "pack of vale seeds" + desc = "These seeds grow into vale plants. Once sold as a luxury for their unique aesthetics, after the trees suddenly combusted they were taken off of the market." + icon = 'modular_nova/modules/xenoarch/icons/seeds.dmi' + icon_state = "vale" + species = "vale" + plantname = "Vale Plant" + product = /obj/item/food/grown/vale + lifespan = 55 + endurance = 35 + yield = 5 + growing_icon = 'modular_nova/modules/xenoarch/icons/growing.dmi' + icon_grow = "vale-stage" + growthstages = 4 + genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/pink) + reagents_add = list(/datum/reagent/stable_plasma = 0.1, /datum/reagent/toxin/plasma = 0.1, /datum/reagent/napalm = 0.1) + +/obj/item/food/grown/vale + seed = /obj/item/seeds/vale + name = "vale" + desc = "A cluster of vale leaves, keep away from open flames." + icon = 'modular_nova/modules/xenoarch/icons/harvest.dmi' + icon_state = "vale" + filling_color = "#FF4500" + bite_consumption_mod = 0.5 + foodtypes = FRUIT + juice_typepath = /datum/reagent/toxin/plasma + tastes = list("plasma" = 1) diff --git a/modular_nova/modules/xenoarch/code/modules/hydroponics/vaporsac.dm b/modular_nova/modules/xenoarch/code/modules/hydroponics/vaporsac.dm new file mode 100644 index 00000000000000..58fcf5ff5a3745 --- /dev/null +++ b/modular_nova/modules/xenoarch/code/modules/hydroponics/vaporsac.dm @@ -0,0 +1,28 @@ +/obj/item/seeds/vaporsac + name = "pack of vaporsac seeds" + desc = "These seeds grow into vaporsac plants. Normally vaporsac plants spread by floating through the air and exploding, but this strand of vaporsac thankfully does not." + icon = 'modular_nova/modules/xenoarch/icons/seeds.dmi' + icon_state = "vaporsac" + species = "vaporsac" + plantname = "Vaporsac Plant" + product = /obj/item/food/grown/vaporsac + lifespan = 55 + endurance = 35 + yield = 5 + growing_icon = 'modular_nova/modules/xenoarch/icons/growing.dmi' + icon_grow = "vaporsac-stage" + growthstages = 3 + genes = list(/datum/plant_gene/trait/squash, /datum/plant_gene/trait/smoke) + reagents_add = list(/datum/reagent/nitrous_oxide = 0.1, /datum/reagent/medicine/muscle_stimulant = 0.1, /datum/reagent/medicine/coagulant = 0.1) + +/obj/item/food/grown/vaporsac + seed = /obj/item/seeds/vaporsac + name = "vaporsac" + desc = "An buoyant vaporsac, full of aerosolized chemicals." + icon = 'modular_nova/modules/xenoarch/icons/harvest.dmi' + icon_state = "vaporsac" + filling_color = "#FF4500" + bite_consumption_mod = 0.5 + foodtypes = FRUIT + juice_typepath = /datum/reagent/nitrous_oxide + tastes = list("sleep" = 1) diff --git a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/designs_and_tech.dm b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/designs_and_tech.dm similarity index 88% rename from modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/designs_and_tech.dm rename to modular_nova/modules/xenoarch/code/modules/research/xenoarch/designs_and_tech.dm index 9147ecec1e47ba..fb9b5d143999d1 100644 --- a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/designs_and_tech.dm +++ b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/designs_and_tech.dm @@ -6,10 +6,15 @@ /datum/design/xenoarch build_type = PROTOLATHE | AWAY_LATHE departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_CARGO - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 5) + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT, + ) /datum/design/xenoarch/tool - category = list(RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_XENOARCH) + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_XENOARCH, + ) /datum/design/xenoarch/tool/hammer desc = "A hammer that can slowly remove debris on strange rocks." @@ -68,8 +73,15 @@ build_path = /obj/item/xenoarch/handheld_scanner /datum/design/xenoarch/tool/advanced - category = list(RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_XENOARCH_ADVANCED) - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 5, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 5) + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + ) + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_XENOARCH_ADVANCED, + ) + /datum/design/xenoarch/tool/advanced/scanner name = "Xenoarch Advanced Handheld Scanner" @@ -80,7 +92,10 @@ name = "Xenoarch Handheld Recoverer" desc = "A device with the capabilities to recover items lost due to time." id = "xenoarch_handrecoverer" - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 5) + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT, + ) // rebalance material req after first repath/categorization? build_path = /obj/item/xenoarch/handheld_recoverer @@ -99,7 +114,9 @@ /datum/design/xenoarch/equipment // everything under this except the adv bag feels redundant because cloth/leather are there too // but i guess we'll burn that bridge another time - category = list(RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_XENOARCH) + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_XENOARCH, + ) /datum/design/xenoarch/equipment/bag name = "Xenoarchaeology Bag" @@ -117,12 +134,18 @@ name = "Advanced Xenoarch Bag" desc = "A bag that can hold about fifty strange rocks." id = "xenoarch_bag_adv" - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 5, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 5) + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + ) // i kinda hate how this requires diamond, but this is supposed to be a fix pr, burn the gbp on it later build_path = /obj/item/storage/bag/xenoarch/adv /datum/design/board/xenoarch - category = list(RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_XENOARCH) + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_XENOARCH, + ) departmental_flags = DEPARTMENT_BITFLAG_SCIENCE /datum/design/board/xenoarch/researcher diff --git a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/glassblowing_integration.dm b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/glassblowing_integration.dm similarity index 100% rename from modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/glassblowing_integration.dm rename to modular_nova/modules/xenoarch/code/modules/research/xenoarch/glassblowing_integration.dm diff --git a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/strange_rock.dm b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/strange_rock.dm similarity index 96% rename from modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/strange_rock.dm rename to modular_nova/modules/xenoarch/code/modules/research/xenoarch/strange_rock.dm index 337ea13595067f..22dc505fe780af 100644 --- a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/strange_rock.dm +++ b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/strange_rock.dm @@ -172,7 +172,7 @@ //turfs /turf/closed/mineral/strange_rock mineralAmt = 1 - icon = MAP_SWITCH('modular_skyrat/modules/liquids/icons/turf/smoothrocks.dmi', 'modular_skyrat/modules/xenoarch/icons/mining.dmi') + icon = MAP_SWITCH('modular_nova/modules/liquids/icons/turf/smoothrocks.dmi', 'modular_nova/modules/xenoarch/icons/mining.dmi') scan_state = "rock_Strange" mineralType = /obj/item/xenoarch/strange_rock @@ -204,7 +204,7 @@ ) /turf/closed/mineral/strange_rock/ice - icon = MAP_SWITCH('icons/turf/walls/icerock_wall.dmi', 'modular_skyrat/modules/xenoarch/icons/mining.dmi') + icon = MAP_SWITCH('icons/turf/walls/icerock_wall.dmi', 'modular_nova/modules/xenoarch/icons/mining.dmi') icon_state = "icerock_strange" base_icon_state = "icerock_wall" smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER @@ -254,7 +254,7 @@ //small gibonite fix /turf/closed/mineral/gibtonite/asteroid - icon = MAP_SWITCH('modular_skyrat/modules/xenoarch/icons/mining.dmi', 'icons/turf/mining.dmi') + icon = MAP_SWITCH('modular_nova/modules/xenoarch/icons/mining.dmi', 'icons/turf/mining.dmi') icon_state = "redrock_Gibonite_inactive" base_icon_state = "red_wall" smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER @@ -264,7 +264,7 @@ defer_change = TRUE /turf/closed/mineral/strange_rock/asteroid - icon = MAP_SWITCH('modular_skyrat/modules/xenoarch/icons/mining.dmi', 'icons/turf/mining.dmi') + icon = MAP_SWITCH('modular_nova/modules/xenoarch/icons/mining.dmi', 'icons/turf/mining.dmi') icon_state = "redrock_strange" base_icon_state = "red_wall" smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER diff --git a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_item.dm b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_item.dm similarity index 99% rename from modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_item.dm rename to modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_item.dm index a5d94890ee2220..f70d56f4920516 100644 --- a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_item.dm +++ b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_item.dm @@ -173,7 +173,6 @@ CELL_LINE_TABLE_FROG, CELL_LINE_TABLE_WALKING_MUSHROOM, CELL_LINE_TABLE_QUEEN_BEE, - CELL_LINE_TABLE_LEAPER, CELL_LINE_TABLE_MEGA_ARACHNID) AddElement(/datum/element/swabable, pick_celltype, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) diff --git a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_machine.dm b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_machine.dm similarity index 99% rename from modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_machine.dm rename to modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_machine.dm index 191837a837fe4d..92166f6d018b4f 100644 --- a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_machine.dm +++ b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_machine.dm @@ -1,5 +1,5 @@ /obj/machinery/xenoarch - icon = 'modular_skyrat/modules/xenoarch/icons/xenoarch_machines.dmi' + icon = 'modular_nova/modules/xenoarch/icons/xenoarch_machines.dmi' density = TRUE layer = BELOW_OBJ_LAYER use_power = IDLE_POWER_USE diff --git a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_reward.dm b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_reward.dm similarity index 100% rename from modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_reward.dm rename to modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_reward.dm diff --git a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_tool.dm b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_tool.dm similarity index 96% rename from modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_tool.dm rename to modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_tool.dm index 50f695c2011df0..d11e47e3eb20e3 100644 --- a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_tool.dm +++ b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_tool.dm @@ -1,12 +1,13 @@ /obj/item/xenoarch name = "parent dev item" - icon = 'modular_skyrat/modules/xenoarch/icons/xenoarch_items.dmi' + icon = 'modular_nova/modules/xenoarch/icons/xenoarch_items.dmi' // HAMMERS /obj/item/xenoarch/hammer name = "parent dev item" desc = "A hammer that can be used to remove dirt from strange rocks." + tool_behaviour = TOOL_HAMMER var/dig_amount = 1 var/dig_speed = 1 SECONDS var/advanced = FALSE @@ -174,7 +175,7 @@ /obj/item/storage/belt/utility/xenoarch name = "xenoarch toolbelt" desc = "Holds tools." - icon = 'modular_skyrat/modules/xenoarch/icons/xenoarch_items.dmi' + icon = 'modular_nova/modules/xenoarch/icons/xenoarch_items.dmi' icon_state = "xenoarch_belt" content_overlays = FALSE custom_premium_price = PAYCHECK_CREW * 2 @@ -197,7 +198,7 @@ /obj/item/storage/bag/xenoarch name = "xenoarch mining satchel" desc = "This little bugger can be used to store and transport strange rocks." - icon = 'modular_skyrat/modules/xenoarch/icons/xenoarch_items.dmi' + icon = 'modular_nova/modules/xenoarch/icons/xenoarch_items.dmi' icon_state = "satchel" worn_icon_state = "satchel" w_class = WEIGHT_CLASS_TINY @@ -296,7 +297,7 @@ /obj/item/skillchip/xenoarch_magnifier name = "R3T3N-T1VE skillchip" - desc = "This biochip integrates with user's brain to enable the mastery of a specific skill. Consult certified Nanotrasen neurosurgeon before use. \ + desc = "This biochip integrates with user's brain to enable the mastery of a specific skill. Consult certified Symphionia neurosurgeon before use. \ There's a little face etched into the back of the skillchip, with buck teeth and goofy-looking glasses." auto_traits = list(TRAIT_XENOARCH_QUALIFIED) skill_name = "Xenoarchaeological Analysis" diff --git a/modular_skyrat/modules/xenoarch/icons/growing.dmi b/modular_nova/modules/xenoarch/icons/growing.dmi similarity index 100% rename from modular_skyrat/modules/xenoarch/icons/growing.dmi rename to modular_nova/modules/xenoarch/icons/growing.dmi diff --git a/modular_skyrat/modules/xenoarch/icons/harvest.dmi b/modular_nova/modules/xenoarch/icons/harvest.dmi similarity index 100% rename from modular_skyrat/modules/xenoarch/icons/harvest.dmi rename to modular_nova/modules/xenoarch/icons/harvest.dmi diff --git a/modular_skyrat/modules/xenoarch/icons/mining.dmi b/modular_nova/modules/xenoarch/icons/mining.dmi similarity index 100% rename from modular_skyrat/modules/xenoarch/icons/mining.dmi rename to modular_nova/modules/xenoarch/icons/mining.dmi diff --git a/modular_skyrat/modules/xenoarch/icons/ore_visuals.dmi b/modular_nova/modules/xenoarch/icons/ore_visuals.dmi similarity index 100% rename from modular_skyrat/modules/xenoarch/icons/ore_visuals.dmi rename to modular_nova/modules/xenoarch/icons/ore_visuals.dmi diff --git a/modular_skyrat/modules/xenoarch/icons/seeds.dmi b/modular_nova/modules/xenoarch/icons/seeds.dmi similarity index 100% rename from modular_skyrat/modules/xenoarch/icons/seeds.dmi rename to modular_nova/modules/xenoarch/icons/seeds.dmi diff --git a/modular_skyrat/modules/xenoarch/icons/xenoarch_area.dmi b/modular_nova/modules/xenoarch/icons/xenoarch_area.dmi similarity index 100% rename from modular_skyrat/modules/xenoarch/icons/xenoarch_area.dmi rename to modular_nova/modules/xenoarch/icons/xenoarch_area.dmi diff --git a/modular_skyrat/modules/xenoarch/icons/xenoarch_items.dmi b/modular_nova/modules/xenoarch/icons/xenoarch_items.dmi similarity index 100% rename from modular_skyrat/modules/xenoarch/icons/xenoarch_items.dmi rename to modular_nova/modules/xenoarch/icons/xenoarch_items.dmi diff --git a/modular_skyrat/modules/xenoarch/icons/xenoarch_machines.dmi b/modular_nova/modules/xenoarch/icons/xenoarch_machines.dmi similarity index 100% rename from modular_skyrat/modules/xenoarch/icons/xenoarch_machines.dmi rename to modular_nova/modules/xenoarch/icons/xenoarch_machines.dmi diff --git a/modular_skyrat/modules/xenoarch/readme.md b/modular_nova/modules/xenoarch/readme.md similarity index 100% rename from modular_skyrat/modules/xenoarch/readme.md rename to modular_nova/modules/xenoarch/readme.md diff --git a/modular_nova/modules/xenos_nova_redo/code/base_nova_xeno.dm b/modular_nova/modules/xenos_nova_redo/code/base_nova_xeno.dm new file mode 100644 index 00000000000000..23da1039ada429 --- /dev/null +++ b/modular_nova/modules/xenos_nova_redo/code/base_nova_xeno.dm @@ -0,0 +1,240 @@ +/// NOVA SECTOR MODULE NOVA_XENO_REDO + +/mob/living/carbon/alien/adult/nova + name = "rare bugged alien" + icon = 'modular_nova/modules/xenos_nova_redo/icons/big_xenos.dmi' + rotate_on_lying = FALSE + base_pixel_x = -16 //All of the xeno sprites are 64x64, and we want them to be level with the tile they are on, much like oversized quirk users + mob_size = MOB_SIZE_LARGE + layer = LARGE_MOB_LAYER //above most mobs, but below speechbubbles + maptext_height = 64 + maptext_width = 64 + pressure_resistance = 200 + /// What icon file update_held_items will look for when making inhands for xenos + var/alt_inhands_file = 'modular_nova/modules/xenos_nova_redo/icons/big_xenos.dmi' + /// Setting this will give a xeno generic_evolve set to evolve them into this type + var/next_evolution + /// Keeps track of if a xeno has evolved recently, if so then we prevent them from evolving until that time is up + var/has_evolved_recently = FALSE + /// How long xenos should be unable to evolve after recently evolving + var/evolution_cooldown_time = 90 SECONDS + /// Determines if a xeno is unable to use abilities + var/unable_to_use_abilities = FALSE + /// Pixel X shifting of the on fire overlay + var/on_fire_pixel_x = 16 + /// Pixel Y shifting of the on fire overlay + var/on_fire_pixel_y = 16 + + +/mob/living/carbon/alien/adult/nova/Initialize(mapload) + . = ..() + AddComponent(/datum/component/seethrough_mob) + + GRANT_ACTION(/datum/action/cooldown/alien/nova/sleepytime) + if(next_evolution) + GRANT_ACTION(/datum/action/cooldown/alien/nova/generic_evolve) + + pixel_x = -16 + + ADD_TRAIT(src, TRAIT_XENO_HEAL_AURA, TRAIT_XENO_INNATE) + real_name = "alien [caste]" + +/// Called when a larva or xeno evolves, adds a configurable timer on evolving again to the xeno +/mob/living/carbon/alien/adult/nova/proc/has_just_evolved() + if(has_evolved_recently) + return + has_evolved_recently = TRUE + addtimer(CALLBACK(src, PROC_REF(can_evolve_once_again)), evolution_cooldown_time) + +/// Allows xenos to evolve again if they are currently unable to +/mob/living/carbon/alien/adult/nova/proc/can_evolve_once_again() + if(!has_evolved_recently) + return + has_evolved_recently = FALSE + +/datum/action/cooldown/alien/nova + button_icon = 'modular_nova/modules/xenos_nova_redo/icons/xeno_actions.dmi' + /// Some xeno abilities block other abilities from being used, this allows them to get around that in cases where it is needed + var/can_be_used_always = FALSE + +/datum/action/cooldown/alien/nova/IsAvailable(feedback = FALSE) + . = ..() + if(!.) + return FALSE + + if(can_be_used_always) + return TRUE + + var/mob/living/carbon/alien/adult/nova/owner_alien = owner + if(!istype(owner_alien) || owner_alien.unable_to_use_abilities) + return FALSE + +/datum/action/cooldown/alien/nova/sleepytime //I don't think this has a mechanical advantage but they have cool resting sprites so... + name = "Rest" + desc = "Sometimes even murder aliens need to have a little lie down." + button_icon_state = "sleepytime" + +/datum/action/cooldown/alien/nova/sleepytime/Activate() + var/mob/living/carbon/sleepytime_mob = owner + if(!isalien(owner)) + return FALSE + if(!sleepytime_mob.resting) + sleepytime_mob.set_resting(new_resting = TRUE, silent = FALSE, instant = TRUE) + return TRUE + sleepytime_mob.set_resting(new_resting = FALSE, silent = FALSE, instant = FALSE) + return TRUE + +/datum/action/cooldown/alien/nova/generic_evolve + name = "Evolve" + desc = "Allows us to evolve to a higher caste of our type, if there is not one already." + button_icon_state = "evolution" + /// What type this ability will turn the owner into upon completion + var/type_to_evolve_into + +/datum/action/cooldown/alien/nova/generic_evolve/Grant(mob/grant_to) + . = ..() + if(!isalien(owner)) + return + var/mob/living/carbon/alien/target_alien = owner + plasma_cost = target_alien.get_max_plasma() //This ability should always require that a xeno be at their max plasma capacity to use + +/datum/action/cooldown/alien/nova/generic_evolve/Activate() + var/mob/living/carbon/alien/adult/nova/evolver = owner + + if(!istype(evolver)) + to_chat(owner, span_warning("You aren't an alien, you can't evolve!")) + return FALSE + + type_to_evolve_into = evolver.next_evolution + if(!type_to_evolve_into) + to_chat(evolver, span_bolddanger("Something is wrong... We can't evolve into anything? (This is broken report it on GitHub)")) + CRASH("Couldn't find an evolution for [owner] ([owner.type]).") + + if(!isturf(evolver.loc)) + return FALSE + + if(get_alien_type(type_to_evolve_into)) + evolver.balloon_alert(evolver, "too many of our evolution already") + return FALSE + + var/obj/item/organ/internal/alien/hivenode/node = evolver.get_organ_by_type(/obj/item/organ/internal/alien/hivenode) + if(!node) + to_chat(evolver, span_bolddanger("We can't sense our node's connection to the hive... We can't evolve!")) + return FALSE + + if(node.recent_queen_death) + to_chat(evolver, span_bolddanger("The death of our queen... We can't seem to gather the mental energy required to evolve...")) + return FALSE + + if(evolver.has_evolved_recently) + evolver.balloon_alert(evolver, "can evolve in 1.5 minutes") //Make that 1.5 variable later, but it keeps fucking up for me :( + return FALSE + + var/new_beno = new type_to_evolve_into(evolver.loc) + evolver.alien_evolve(new_beno) + return TRUE + +/datum/movespeed_modifier/alien_quick + multiplicative_slowdown = -0.5 + +/datum/movespeed_modifier/alien_slow + multiplicative_slowdown = 0.5 + +/datum/movespeed_modifier/alien_heavy + multiplicative_slowdown = 1 + +/datum/movespeed_modifier/alien_big + multiplicative_slowdown = 2 + +/mob/living/carbon/alien/adult/nova/update_held_items() + ..() + remove_overlay(HANDS_LAYER) + var/list/hands = list() + + var/obj/item/l_hand = get_item_for_held_index(1) + if(l_hand) + var/itm_state = l_hand.inhand_icon_state + if(!itm_state) + itm_state = l_hand.icon_state + var/mutable_appearance/l_hand_item = mutable_appearance(alt_inhands_file, "[itm_state][caste]_l", -HANDS_LAYER) + if(l_hand.blocks_emissive) + l_hand_item.overlays += emissive_blocker(l_hand_item.icon, l_hand_item.icon_state, alpha = l_hand_item.alpha) + hands += l_hand_item + + var/obj/item/r_hand = get_item_for_held_index(2) + if(r_hand) + var/itm_state = r_hand.inhand_icon_state + if(!itm_state) + itm_state = r_hand.icon_state + var/mutable_appearance/r_hand_item = mutable_appearance(alt_inhands_file, "[itm_state][caste]_r", -HANDS_LAYER) + if(r_hand.blocks_emissive) + r_hand_item.overlays += emissive_blocker(r_hand_item.icon, r_hand_item.icon_state, alpha = r_hand_item.alpha) + hands += r_hand_item + + overlays_standing[HANDS_LAYER] = hands + apply_overlay(HANDS_LAYER) + +/mob/living/carbon/proc/get_max_plasma() + var/obj/item/organ/internal/alien/plasmavessel/vessel = get_organ_by_type(/obj/item/organ/internal/alien/plasmavessel) + if(!vessel) + return -1 + return vessel.max_plasma + +/mob/living/carbon/alien/adult/nova/alien_evolve(mob/living/carbon/alien/new_xeno, is_it_a_larva) + var/mob/living/carbon/alien/adult/nova/xeno_to_transfer_to = new_xeno + + xeno_to_transfer_to.setDir(dir) + if(!islarva(xeno_to_transfer_to)) + xeno_to_transfer_to.has_just_evolved() + if(mind) + mind.name = xeno_to_transfer_to.real_name + mind.transfer_to(xeno_to_transfer_to) + qdel(src) + +/mob/living/carbon/alien/adult/nova/update_fire_overlay(stacks, on_fire, last_icon_state, suffix = "") + var/fire_icon = "generic_fire[suffix]" + + if(!GLOB.fire_appearances[fire_icon]) + var/mutable_appearance/xeno_fire_overlay = mutable_appearance('icons/mob/effects/onfire.dmi', fire_icon, -FIRE_LAYER, appearance_flags = RESET_COLOR) + xeno_fire_overlay.pixel_x = on_fire_pixel_x + xeno_fire_overlay.pixel_y = on_fire_pixel_y + GLOB.fire_appearances[fire_icon] = xeno_fire_overlay + + if((stacks > 0 && on_fire) || HAS_TRAIT(src, TRAIT_PERMANENTLY_ONFIRE)) + if(fire_icon == last_icon_state) + return last_icon_state + + remove_overlay(FIRE_LAYER) + overlays_standing[FIRE_LAYER] = GLOB.fire_appearances[fire_icon] + apply_overlay(FIRE_LAYER) + return fire_icon + + if(!last_icon_state) + return last_icon_state + + remove_overlay(FIRE_LAYER) + apply_overlay(FIRE_LAYER) + return null + +/mob/living/carbon/alien/adult/nova/findQueen() //Yes we really do need to do this whole thing to let the queen finder work + if(hud_used) + hud_used.alien_queen_finder.cut_overlays() + var/mob/queen = get_alien_type(/mob/living/carbon/alien/adult/nova/queen) + if(!queen) + return + var/turf/Q = get_turf(queen) + var/turf/A = get_turf(src) + if(Q.z != A.z) //The queen is on a different Z level, we cannot sense that far. + return + var/Qdir = get_dir(src, Q) + var/Qdist = get_dist(src, Q) + var/finder_icon = "finder_center" //Overlay showed when adjacent to or on top of the queen! + switch(Qdist) + if(2 to 7) + finder_icon = "finder_near" + if(8 to 20) + finder_icon = "finder_med" + if(21 to INFINITY) + finder_icon = "finder_far" + var/image/finder_eye = image('icons/hud/screen_alien.dmi', finder_icon, dir = Qdir) + hud_used.alien_queen_finder.add_overlay(finder_eye) diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/human_defense.dm b/modular_nova/modules/xenos_nova_redo/code/human_defense.dm similarity index 95% rename from modular_skyrat/modules/xenos_skyrat_redo/code/human_defense.dm rename to modular_nova/modules/xenos_nova_redo/code/human_defense.dm index 7c8394fc5f3bb9..467c3663f6e5cd 100644 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/human_defense.dm +++ b/modular_nova/modules/xenos_nova_redo/code/human_defense.dm @@ -1,4 +1,4 @@ -/// SKYRAT MODULE SKYRAT_XENO_REDO +/// NOVA SECTOR MODULE NOVA_XENO_REDO /mob/living/carbon/human/attack_alien(mob/living/carbon/alien/adult/user, list/modifiers) . = ..() @@ -11,7 +11,7 @@ if(mob_held_item) - if(check_shields(user, 0, "[user.name]")) + if(check_block(user, damage = 0, attack_text = "[user.name]")) playsound(loc, 'sound/weapons/parry.ogg', 25, TRUE, -1) //Audio feedback to the fact you just got blocked apply_damage(disarm_damage / 2, STAMINA) visible_message(span_danger("[user] attempts to touch [src]!"), \ diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/larva.dm b/modular_nova/modules/xenos_nova_redo/code/larva.dm similarity index 77% rename from modular_skyrat/modules/xenos_skyrat_redo/code/larva.dm rename to modular_nova/modules/xenos_nova_redo/code/larva.dm index 970395ceeebe05..202e5d5f5209d2 100644 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/larva.dm +++ b/modular_nova/modules/xenos_nova_redo/code/larva.dm @@ -1,4 +1,4 @@ -/// SKYRAT MODULE SKYRAT_XENO_REDO +/// NOVA SECTOR MODULE NOVA_XENO_REDO /datum/action/cooldown/alien/larva_evolve/Activate(atom/target) var/static/list/caste_options @@ -8,7 +8,7 @@ // This --can probably-- (will not) be genericized in the future. make_xeno_caste_entry( caste_name = "Runner", - caste_image = image(icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi', icon_state = "preview_runner"), + caste_image = image(icon = 'modular_nova/modules/xenos_nova_redo/icons/xeno_actions.dmi', icon_state = "preview_runner"), caste_info = span_info("Runners are the most agile caste, the short stature of running on all fours \ gives them great speed, the ability to dodge projectiles, and allows them to tackle while holding throw and clicking. \ Eventually, runners can evolve onwards into the fearsome ravager, should the hive permit it."), @@ -17,7 +17,7 @@ make_xeno_caste_entry( caste_name = "Sentinel", - caste_image = image(icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi', icon_state = "preview_sentinel"), + caste_image = image(icon = 'modular_nova/modules/xenos_nova_redo/icons/xeno_actions.dmi', icon_state = "preview_sentinel"), caste_info = span_info("Sentinels are a caste similar in shape to a drone, forfeiting the ability to \ become royalty in exchange for spitting either acid, or a potent neurotoxin. They aren't as strong in close combat \ as the other options, but can eventually evolve into a more dangerous form of acid spitter, should the hive have capacity."), @@ -26,7 +26,7 @@ make_xeno_caste_entry( caste_name = "Defender", - caste_image = image(icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi', icon_state = "preview_defender"), + caste_image = image(icon = 'modular_nova/modules/xenos_nova_redo/icons/xeno_actions.dmi', icon_state = "preview_defender"), caste_info = span_info("Slow, tough, hard hitting, the defender is well and capable of what the name implies, \ the defender's thick armor allows it to take a few more hits than other castes, which can be paired with a deadly tail club \ and ability to make short charges to cause some real damage. Eventually, it will be able to evolve into the feared crusher, \ @@ -36,7 +36,7 @@ make_xeno_caste_entry( caste_name = "Drone", - caste_image = image(icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi', icon_state = "preview_drone"), + caste_image = image(icon = 'modular_nova/modules/xenos_nova_redo/icons/xeno_actions.dmi', icon_state = "preview_drone"), caste_info = span_info("Drones are a somewhat weak, although fairly quick caste that fills a mainly \ support role in a hive, having a higher plasma capacity than most first evolutions, and the ability to \ make a healing aura for nearby xenos. Drones are the only caste that can evolve into both praetorians and \ @@ -63,18 +63,18 @@ caste_options[caste_name] = caste_option /datum/action/cooldown/alien/larva_evolve/proc/spawn_new_xeno(alien_caste) - var/mob/living/carbon/alien/adult/skyrat/new_xeno + var/mob/living/carbon/alien/adult/nova/new_xeno var/mob/living/carbon/alien/larva/larva = owner switch(alien_caste) if("Runner") - new_xeno = new /mob/living/carbon/alien/adult/skyrat/runner(larva.loc) + new_xeno = new /mob/living/carbon/alien/adult/nova/runner(larva.loc) if("Sentinel") - new_xeno = new /mob/living/carbon/alien/adult/skyrat/sentinel(larva.loc) + new_xeno = new /mob/living/carbon/alien/adult/nova/sentinel(larva.loc) if("Defender") - new_xeno = new /mob/living/carbon/alien/adult/skyrat/defender(larva.loc) + new_xeno = new /mob/living/carbon/alien/adult/nova/defender(larva.loc) if("Drone") - new_xeno = new /mob/living/carbon/alien/adult/skyrat/drone(larva.loc) + new_xeno = new /mob/living/carbon/alien/adult/nova/drone(larva.loc) else CRASH("Alien evolve was given an invalid / incorrect alien cast type. Got: [alien_caste]") diff --git a/modular_nova/modules/xenos_nova_redo/code/xeno_types/defender.dm b/modular_nova/modules/xenos_nova_redo/code/xeno_types/defender.dm new file mode 100644 index 00000000000000..d12ed126d2b4d0 --- /dev/null +++ b/modular_nova/modules/xenos_nova_redo/code/xeno_types/defender.dm @@ -0,0 +1,113 @@ +/// NOVA SECTOR MODULE NOVA_XENO_REDO + +/mob/living/carbon/alien/adult/nova/defender + name = "alien defender" + desc = "A heavy looking alien with a wrecking ball-like tail that'd probably hurt to get hit by." + caste = "defender" + maxHealth = 300 + health = 300 + icon_state = "aliendefender" + melee_damage_lower = 25 + melee_damage_upper = 30 + next_evolution = /mob/living/carbon/alien/adult/nova/warrior + +/mob/living/carbon/alien/adult/nova/defender/Initialize(mapload) + . = ..() + var/static/list/innate_actions = list( + /datum/action/cooldown/spell/aoe/repulse/xeno/nova_tailsweep, + /datum/action/cooldown/mob_cooldown/charge/basic_charge/defender, + ) + grant_actions_by_list(innate_actions) + + REMOVE_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) + + add_movespeed_modifier(/datum/movespeed_modifier/alien_heavy) + +/mob/living/carbon/alien/adult/nova/defender/create_internal_organs() + organs += new /obj/item/organ/internal/alien/plasmavessel/small + ..() + +/datum/action/cooldown/spell/aoe/repulse/xeno/nova_tailsweep + name = "Crushing Tail Sweep" + desc = "Throw back attackers with a sweep of your tail, likely breaking some bones in the process." + + cooldown_time = 60 SECONDS + + aoe_radius = 1 + + button_icon = 'modular_nova/modules/xenos_nova_redo/icons/xeno_actions.dmi' + button_icon_state = "crush_tail" + + sparkle_path = /obj/effect/temp_visual/dir_setting/tailsweep/defender + + /// The sound that the tail sweep will make upon hitting something + var/impact_sound = 'sound/effects/clang.ogg' + /// How long mobs hit by the tailsweep should be knocked down for + var/knockdown_time = 4 SECONDS + /// How much damage tail sweep impacts should do to a mob + var/impact_damage = 30 + /// What wound bonus should the tai sweep impact have + var/impact_wound_bonus = 20 + /// What type of sharpness should this tail sweep have + var/impact_sharpness = FALSE + /// What type of damage should the tail sweep do + var/impact_damage_type = BRUTE + +/datum/action/cooldown/spell/aoe/repulse/xeno/nova_tailsweep/IsAvailable(feedback = FALSE) + . = ..() + if(!.) + return FALSE + + var/mob/living/carbon/alien/adult/nova/owner_alien = owner + if(!istype(owner_alien) || owner_alien.unable_to_use_abilities) + return FALSE + +/datum/action/cooldown/spell/aoe/repulse/xeno/nova_tailsweep/cast_on_thing_in_aoe(atom/movable/victim, atom/caster) + if(!isliving(victim)) + return + + if(isalien(victim)) + return + + var/turf/throwtarget = get_edge_target_turf(caster, get_dir(caster, get_step_away(victim, caster))) + var/dist_from_caster = get_dist(victim, caster) + var/mob/living/victim_living = victim + + if(dist_from_caster <= 0) + victim_living.Knockdown(knockdown_time) + if(sparkle_path) + new sparkle_path(get_turf(victim_living), get_dir(caster, victim_living)) + + else + victim_living.Knockdown(knockdown_time * 2) //They are on the same turf as us, or... somewhere else, I'm not sure how but they are getting smacked down + + victim_living.apply_damage(impact_damage, impact_damage_type, BODY_ZONE_CHEST, wound_bonus = impact_wound_bonus, sharpness = impact_sharpness) + shake_camera(victim_living, 4, 3) + playsound(victim_living, impact_sound, 100, TRUE, 8, 0.9) + to_chat(victim_living, span_userdanger("[caster]'s tail slams into you, throwing you back!")) + + victim_living.safe_throw_at(throwtarget, ((clamp((max_throw - (clamp(dist_from_caster - 2, 0, dist_from_caster))), 3, max_throw))), 1, caster, force = repulse_force) + +/obj/effect/temp_visual/dir_setting/tailsweep/defender + icon = 'modular_nova/modules/xenos_nova_redo/icons/xeno_actions.dmi' + icon_state = "crush_tail_anim" + +/datum/action/cooldown/mob_cooldown/charge/basic_charge/defender + name = "Charge Attack" + desc = "Allows you to charge at a position, trampling anything in your path." + cooldown_time = 15 SECONDS + charge_delay = 0.3 SECONDS + charge_distance = 5 + destroy_objects = FALSE + charge_damage = 50 + button_icon = 'modular_nova/modules/xenos_nova_redo/icons/xeno_actions.dmi' + button_icon_state = "defender_charge" + unset_after_click = TRUE + +/datum/action/cooldown/mob_cooldown/charge/basic_charge/defender/do_charge_indicator(atom/charger, atom/charge_target) + . = ..() + playsound(charger, 'modular_nova/modules/xenos_nova_redo/sound/alien_roar1.ogg', 100, TRUE, 8, 0.9) + +/datum/action/cooldown/mob_cooldown/charge/basic_charge/defender/Activate(atom/target_atom) + . = ..() + return TRUE diff --git a/modular_nova/modules/xenos_nova_redo/code/xeno_types/drone.dm b/modular_nova/modules/xenos_nova_redo/code/xeno_types/drone.dm new file mode 100644 index 00000000000000..240dc758c3af73 --- /dev/null +++ b/modular_nova/modules/xenos_nova_redo/code/xeno_types/drone.dm @@ -0,0 +1,61 @@ +/// NOVA SECTOR MODULE NOVA_XENO_REDO + +/mob/living/carbon/alien/adult/nova/drone + name = "alien drone" + desc = "As plain looking as you could call an alien with armored black chitin and large claws." + caste = "drone" + maxHealth = 200 + health = 200 + icon_state = "aliendrone" + melee_damage_lower = 15 + melee_damage_upper = 20 + next_evolution = /mob/living/carbon/alien/adult/nova/praetorian + +/mob/living/carbon/alien/adult/nova/drone/Initialize(mapload) + . = ..() + GRANT_ACTION(/datum/action/cooldown/alien/nova/heal_aura) + +/mob/living/carbon/alien/adult/nova/drone/create_internal_organs() + organs += new /obj/item/organ/internal/alien/plasmavessel + organs += new /obj/item/organ/internal/alien/resinspinner + ..() + +/datum/action/cooldown/alien/nova/heal_aura + name = "Healing Aura" + desc = "Friendly xenomorphs in a short range around yourself will receive passive healing." + button_icon_state = "healaura" + plasma_cost = 100 + cooldown_time = 90 SECONDS + /// Is the healing aura currently active or not + var/aura_active = FALSE + /// How long the healing aura should last + var/aura_duration = 30 SECONDS + /// How far away the healing aura should reach + var/aura_range = 5 + /// How much brute/burn individually the healing aura should heal each time it fires + var/aura_healing_amount = 5 + /// What color should the + particles caused by the healing aura be + var/aura_healing_color = COLOR_BLUE_LIGHT + /// The healing aura component itself that the ability uses + var/datum/component/aura_healing/aura_healing_component + +/datum/action/cooldown/alien/nova/heal_aura/Activate() + . = ..() + if(aura_active) + owner.balloon_alert(owner, "already healing") + return FALSE + owner.balloon_alert(owner, "healing aura started") + to_chat(owner, span_danger("We emit pheromones that encourage sisters near us to heal themselves for the next [aura_duration / 10] seconds.")) + addtimer(CALLBACK(src, PROC_REF(aura_deactivate)), aura_duration) + aura_active = TRUE + aura_healing_component = owner.AddComponent(/datum/component/aura_healing, range = aura_range, requires_visibility = TRUE, brute_heal = aura_healing_amount, burn_heal = aura_healing_amount, limit_to_trait = TRAIT_XENO_HEAL_AURA, healing_color = aura_healing_color) + return TRUE + +/datum/action/cooldown/alien/nova/heal_aura/proc/aura_deactivate() + if(!aura_active) + return + aura_active = FALSE + QDEL_NULL(aura_healing_component) + owner.balloon_alert(owner, "healing aura ended") + + diff --git a/modular_nova/modules/xenos_nova_redo/code/xeno_types/praetorian.dm b/modular_nova/modules/xenos_nova_redo/code/xeno_types/praetorian.dm new file mode 100644 index 00000000000000..3260b9c9654dff --- /dev/null +++ b/modular_nova/modules/xenos_nova_redo/code/xeno_types/praetorian.dm @@ -0,0 +1,118 @@ +/// NOVA SECTOR MODULE NOVA_XENO_REDO + +/mob/living/carbon/alien/adult/nova/praetorian + name = "alien praetorian" + desc = "An alien that looks like the awkward half-way point between a queen and a drone, in fact that's likely what it is." + caste = "praetorian" + maxHealth = 400 + health = 400 + icon_state = "alienpraetorian" + melee_damage_lower = 25 + melee_damage_upper = 30 + next_evolution = /mob/living/carbon/alien/adult/nova/queen + +/mob/living/carbon/alien/adult/nova/praetorian/Initialize(mapload) + . = ..() + var/static/list/innate_actions = list( + /datum/action/cooldown/alien/nova/heal_aura/juiced, + /datum/action/cooldown/spell/aoe/repulse/xeno/nova_tailsweep/hard_throwing, + ) + grant_actions_by_list(innate_actions) + + REMOVE_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) + + add_movespeed_modifier(/datum/movespeed_modifier/alien_big) + +/mob/living/carbon/alien/adult/nova/praetorian/create_internal_organs() + organs += new /obj/item/organ/internal/alien/plasmavessel/large + organs += new /obj/item/organ/internal/alien/neurotoxin/spitter + organs += new /obj/item/organ/internal/alien/resinspinner + ..() + +/datum/action/cooldown/alien/nova/heal_aura/juiced + name = "Strong Healing Aura" + desc = "Friendly xenomorphs in a longer range around yourself will receive passive healing." + button_icon_state = "healaura_juiced" + plasma_cost = 100 + cooldown_time = 90 SECONDS + aura_range = 7 + aura_healing_amount = 10 + aura_healing_color = COLOR_RED_LIGHT + +/datum/action/cooldown/spell/aoe/repulse/xeno/nova_tailsweep/hard_throwing + name = "Flinging Tail Sweep" + desc = "Throw back attackers with a sweep of your tail that is much stronger than other aliens." + + aoe_radius = 2 + repulse_force = MOVE_FORCE_OVERPOWERING //Fuck everyone who gets hit by this tail in particular + + button_icon_state = "throw_tail" + + sparkle_path = /obj/effect/temp_visual/dir_setting/tailsweep/praetorian + + impact_sound = 'sound/weapons/slap.ogg' + impact_damage = 20 + impact_wound_bonus = 10 + +/obj/effect/temp_visual/dir_setting/tailsweep/praetorian + icon = 'modular_nova/modules/xenos_nova_redo/icons/xeno_actions.dmi' + icon_state = "throw_tail_anim" + +/datum/action/cooldown/alien/acid/nova/spread + name = "Spit Neurotoxin Spread" + desc = "Spits a spread neurotoxin at someone, exhausting them." + plasma_cost = 50 + acid_projectile = null + acid_casing = /obj/item/ammo_casing/xenospit + spit_sound = 'modular_nova/modules/xenos_nova_redo/sound/alien_spitacid2.ogg' + cooldown_time = 10 SECONDS + +/obj/item/ammo_casing/xenospit //This is probably really bad, however I couldn't find any other nice way to do this + name = "big glob of neurotoxin" + projectile_type = /obj/projectile/neurotoxin/nova/spitter_spread + pellets = 3 + variance = 20 + +/obj/item/ammo_casing/xenospit/Initialize(mapload) + . = ..() + AddElement(/datum/element/caseless) + +/obj/item/ammo_casing/xenospit/tk_firing(mob/living/user, atom/fired_from) + return FALSE + +/obj/projectile/neurotoxin/nova/spitter_spread //Slightly nerfed because its a shotgun spread of these + name = "neurotoxin spit" + icon_state = "neurotoxin" + damage = 25 + +/datum/action/cooldown/alien/acid/nova/spread/lethal + name = "Spit Acid Spread" + desc = "Spits a spread of acid at someone, burning them." + acid_projectile = null + acid_casing = /obj/item/ammo_casing/xenospit/spread/lethal + button_icon_state = "acidspit_0" + projectile_name = "acid" + button_base_icon = "acidspit" + +/obj/item/ammo_casing/xenospit/spread/lethal + name = "big glob of acid" + projectile_type = /obj/projectile/neurotoxin/nova/acid/spitter_spread + pellets = 4 + variance = 30 + +/obj/projectile/neurotoxin/nova/acid/spitter_spread + name = "acid spit" + icon_state = "toxin" + damage = 15 + damage_type = BURN + +/obj/item/organ/internal/alien/neurotoxin/spitter + name = "large neurotoxin gland" + icon_state = "neurotox" + zone = BODY_ZONE_PRECISE_MOUTH + slot = ORGAN_SLOT_XENO_NEUROTOXINGLAND + actions_types = list( + /datum/action/cooldown/alien/acid/nova/spread, + /datum/action/cooldown/alien/acid/nova/spread/lethal, + /datum/action/cooldown/alien/acid/corrosion, + ) diff --git a/modular_nova/modules/xenos_nova_redo/code/xeno_types/queen.dm b/modular_nova/modules/xenos_nova_redo/code/xeno_types/queen.dm new file mode 100644 index 00000000000000..c937c3649a1fa0 --- /dev/null +++ b/modular_nova/modules/xenos_nova_redo/code/xeno_types/queen.dm @@ -0,0 +1,88 @@ +/// NOVA SECTOR MODULE NOVA_XENO_REDO + +/mob/living/carbon/alien/adult/nova/queen + name = "alien queen" + desc = "A hulking beast of an alien, for some reason this one seems more important than the others, you should probably quit staring at it and do something." + caste = "queen" + maxHealth = 500 + health = 500 + icon_state = "alienqueen" + melee_damage_lower = 30 + melee_damage_upper = 35 + +/mob/living/carbon/alien/adult/nova/queen/Initialize(mapload) + . = ..() + var/static/list/innate_actions = list( + /datum/action/cooldown/spell/aoe/repulse/xeno/nova_tailsweep/hard_throwing, + /datum/action/cooldown/alien/nova/queen_screech, + ) + grant_actions_by_list(innate_actions) + + REMOVE_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) + + add_movespeed_modifier(/datum/movespeed_modifier/alien_big) + +/mob/living/carbon/alien/adult/nova/queen/create_internal_organs() + organs += new /obj/item/organ/internal/alien/plasmavessel/large/queen + organs += new /obj/item/organ/internal/alien/resinspinner + organs += new /obj/item/organ/internal/alien/neurotoxin/queen + organs += new /obj/item/organ/internal/alien/eggsac + ..() + +/mob/living/carbon/alien/adult/nova/queen/alien_talk(message, shown_name = name) + ..(message, shown_name, TRUE) + +/obj/item/organ/internal/alien/neurotoxin/queen + name = "neurotoxin gland" + icon_state = "neurotox" + zone = BODY_ZONE_PRECISE_MOUTH + slot = ORGAN_SLOT_XENO_NEUROTOXINGLAND + actions_types = list( + /datum/action/cooldown/alien/acid/nova, + /datum/action/cooldown/alien/acid/nova/lethal, + /datum/action/cooldown/alien/acid/corrosion, + ) + +/mob/living/carbon/alien/adult/nova/queen/death(gibbed) + if(stat == DEAD) + return + + for(var/mob/living/carbon/carbon_mob in GLOB.alive_mob_list) + if(carbon_mob == src) + continue + + var/obj/item/organ/internal/alien/hivenode/node = carbon_mob.get_organ_by_type(/obj/item/organ/internal/alien/hivenode) + + if(istype(node)) + node.queen_death() + + return ..() + +/datum/action/cooldown/alien/nova/queen_screech + name = "Deafening Screech" + desc = "Let out a screech so deafeningly loud that anything with the ability to hear around you will likely be incapacitated for a short time." + button_icon_state = "screech" + cooldown_time = 5 MINUTES + +/datum/action/cooldown/alien/nova/queen_screech/Activate() + . = ..() + var/mob/living/carbon/alien/adult/nova/queenie = owner + playsound(queenie, 'modular_nova/modules/xenos_nova_redo/sound/alien_queen_screech.ogg', 100, FALSE, 8, 0.9) + queenie.create_shriekwave() + shake_camera(owner, 2, 2) + + for(var/mob/living/carbon/human/screech_target in get_hearers_in_view(7, get_turf(queenie))) + screech_target.soundbang_act(intensity = 5, stun_pwr = 50, damage_pwr = 10, deafen_pwr = 30) //Only being deaf will save you from the screech + shake_camera(screech_target, 4, 3) + to_chat(screech_target, span_doyourjobidiot("[queenie] lets out a deafening screech!")) + + return TRUE + +/mob/living/carbon/alien/adult/nova/proc/create_shriekwave() + remove_overlay(HALO_LAYER) + overlays_standing[HALO_LAYER] = image("icon" = 'modular_nova/modules/xenos_nova_redo/icons/big_xenos.dmi', "icon_state" = "shriek_waves") //Ehh, suit layer's not being used. + apply_overlay(HALO_LAYER) + addtimer(CALLBACK(src, PROC_REF(remove_shriekwave)), 3 SECONDS) + +/mob/living/carbon/alien/adult/nova/proc/remove_shriekwave() + remove_overlay(HALO_LAYER) diff --git a/modular_nova/modules/xenos_nova_redo/code/xeno_types/ravager.dm b/modular_nova/modules/xenos_nova_redo/code/xeno_types/ravager.dm new file mode 100644 index 00000000000000..c5934ce7c62e51 --- /dev/null +++ b/modular_nova/modules/xenos_nova_redo/code/xeno_types/ravager.dm @@ -0,0 +1,104 @@ +/// NOVA SECTOR MODULE NOVA_XENO_REDO + +#define RAVAGER_OUTLINE_EFFECT "ravager_endure_outline" + +/mob/living/carbon/alien/adult/nova/ravager + name = "alien ravager" + desc = "An alien with angry red chitin, with equally intimidating looking blade-like claws in place of normal hands. That sharp tail looks like it'd probably hurt." + caste = "ravager" + maxHealth = 350 + health = 350 + icon_state = "alienravager" + melee_damage_lower = 30 + melee_damage_upper = 35 + +/mob/living/carbon/alien/adult/nova/ravager/Initialize(mapload) + . = ..() + var/static/list/innate_actions = list( + /datum/action/cooldown/spell/aoe/repulse/xeno/nova_tailsweep/slicing, + /datum/action/cooldown/alien/nova/literally_too_angry_to_die, + /datum/action/cooldown/mob_cooldown/charge/triple_charge/ravager, + ) + grant_actions_by_list(innate_actions) + + REMOVE_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) + +/mob/living/carbon/alien/adult/nova/ravager/create_internal_organs() + organs += new /obj/item/organ/internal/alien/plasmavessel + ..() + +/datum/action/cooldown/mob_cooldown/charge/triple_charge/ravager + name = "Triple Charge Attack" + desc = "Allows you to charge thrice at a location, trampling any in your path." + cooldown_time = 30 SECONDS + charge_delay = 0.3 SECONDS + charge_distance = 7 + charge_past = 3 + destroy_objects = FALSE + charge_damage = 25 + button_icon = 'modular_nova/modules/xenos_nova_redo/icons/xeno_actions.dmi' + button_icon_state = "ravager_charge" + unset_after_click = TRUE + +/datum/action/cooldown/mob_cooldown/charge/triple_charge/ravager/do_charge_indicator(atom/charger, atom/charge_target) + playsound(charger, 'modular_nova/modules/xenos_nova_redo/sound/alien_roar2.ogg', 100, TRUE, 8, 0.9) + +/datum/action/cooldown/mob_cooldown/charge/triple_charge/ravager/Activate(atom/target_atom) + . = ..() + return TRUE + +/datum/action/cooldown/spell/aoe/repulse/xeno/nova_tailsweep/slicing + name = "Slicing Tail Sweep" + desc = "Throw back attackers with a swipe of your tail, slicing them with its sharpened tip." + + aoe_radius = 2 + + button_icon_state = "slice_tail" + + sparkle_path = /obj/effect/temp_visual/dir_setting/tailsweep/ravager + + sound = 'modular_nova/modules/xenos_nova_redo/sound/alien_tail_swipe.ogg' //The defender's tail sound isn't changed because its big and heavy, this isn't + + impact_sound = 'modular_nova/master_files/sound/weapons/bloodyslice.ogg' + impact_damage = 40 + impact_sharpness = SHARP_EDGED + +/obj/effect/temp_visual/dir_setting/tailsweep/ravager + icon = 'modular_nova/modules/xenos_nova_redo/icons/xeno_actions.dmi' + icon_state = "slice_tail_anim" + +/datum/action/cooldown/alien/nova/literally_too_angry_to_die + name = "Endure" + desc = "Imbue your body with unimaginable amounts of rage (and plasma) to allow yourself to ignore all pain for a short time." + button_icon_state = "literally_too_angry" + plasma_cost = 250 //This requires full plasma to do, so there can be some time between armstrong moments + /// If the endure ability is currently active or not + var/endure_active = FALSE + /// How long the endure ability should last when activated + var/endure_duration = 20 SECONDS + +/datum/action/cooldown/alien/nova/literally_too_angry_to_die/Activate() + . = ..() + if(endure_active) + owner.balloon_alert(owner, "already enduring") + return FALSE + owner.balloon_alert(owner, "endure began") + playsound(owner, 'modular_nova/modules/xenos_nova_redo/sound/alien_roar1.ogg', 100, TRUE, 8, 0.9) + to_chat(owner, span_danger("We numb our ability to feel pain, allowing us to fight until the very last for the next [endure_duration/10] seconds.")) + addtimer(CALLBACK(src, PROC_REF(endure_deactivate)), endure_duration) + owner.add_filter(RAVAGER_OUTLINE_EFFECT, 4, outline_filter(1, COLOR_RED_LIGHT)) + ADD_TRAIT(owner, TRAIT_STUNIMMUNE, TRAIT_XENO_ABILITY_GIVEN) + ADD_TRAIT(owner, TRAIT_NOSOFTCRIT, TRAIT_XENO_ABILITY_GIVEN) + ADD_TRAIT(owner, TRAIT_NOHARDCRIT, TRAIT_XENO_ABILITY_GIVEN) + endure_active = TRUE + return TRUE + +/datum/action/cooldown/alien/nova/literally_too_angry_to_die/proc/endure_deactivate() + endure_active = FALSE + owner.balloon_alert(owner, "endure ended") + owner.remove_filter(RAVAGER_OUTLINE_EFFECT) + REMOVE_TRAIT(owner, TRAIT_STUNIMMUNE, TRAIT_XENO_ABILITY_GIVEN) + REMOVE_TRAIT(owner, TRAIT_NOSOFTCRIT, TRAIT_XENO_ABILITY_GIVEN) + REMOVE_TRAIT(owner, TRAIT_NOHARDCRIT, TRAIT_XENO_ABILITY_GIVEN) + +#undef RAVAGER_OUTLINE_EFFECT diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/rouny.dm b/modular_nova/modules/xenos_nova_redo/code/xeno_types/rouny.dm similarity index 76% rename from modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/rouny.dm rename to modular_nova/modules/xenos_nova_redo/code/xeno_types/rouny.dm index 5a7cb614fb52c9..b5b27c20eab8f2 100644 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/rouny.dm +++ b/modular_nova/modules/xenos_nova_redo/code/xeno_types/rouny.dm @@ -1,9 +1,9 @@ -/// SKYRAT MODULE SKYRAT_XENO_REDO +/// NOVA SECTOR MODULE NOVA_XENO_REDO #define EVASION_VENTCRAWL_INABILTY_CD_PERCENTAGE 0.8 #define RUNNER_BLUR_EFFECT "runner_evasion" -/mob/living/carbon/alien/adult/skyrat/runner +/mob/living/carbon/alien/adult/nova/runner name = "alien runner" desc = "A short alien with sleek red chitin, clearly abiding by the 'red ones go faster' theorem and almost always running on all fours." caste = "runner" @@ -11,29 +11,25 @@ health = 150 icon_state = "alienrunner" /// Holds the evade ability to be granted to the runner later - var/datum/action/cooldown/alien/skyrat/evade/evade_ability + var/datum/action/cooldown/alien/nova/evade/evade_ability melee_damage_lower = 15 melee_damage_upper = 20 - next_evolution = /mob/living/carbon/alien/adult/skyrat/ravager + next_evolution = /mob/living/carbon/alien/adult/nova/ravager on_fire_pixel_y = 0 -/mob/living/carbon/alien/adult/skyrat/runner/Initialize(mapload) +/mob/living/carbon/alien/adult/nova/runner/Initialize(mapload) . = ..() AddComponent(/datum/component/tackler, stamina_cost = 0, base_knockdown = 2, range = 10, speed = 2, skill_mod = 7, min_distance = 0) - evade_ability = new /datum/action/cooldown/alien/skyrat/evade() + evade_ability = new(src) evade_ability.Grant(src) add_movespeed_modifier(/datum/movespeed_modifier/alien_quick) -/mob/living/carbon/alien/adult/skyrat/runner/Destroy() - QDEL_NULL(evade_ability) - return ..() - -/mob/living/carbon/alien/adult/skyrat/runner/create_internal_organs() +/mob/living/carbon/alien/adult/nova/runner/create_internal_organs() organs += new /obj/item/organ/internal/alien/plasmavessel/small/tiny ..() -/datum/action/cooldown/alien/skyrat/evade +/datum/action/cooldown/alien/nova/evade name = "Evade" desc = "Allows you to evade any projectile that would hit you for a few seconds." button_icon_state = "evade" @@ -44,14 +40,14 @@ /// How long evasion should last var/evasion_duration = 10 SECONDS -/datum/action/cooldown/alien/skyrat/evade/Activate() +/datum/action/cooldown/alien/nova/evade/Activate() . = ..() if(evade_active) //Can't evade while we're already evading. owner.balloon_alert(owner, "already evading") return FALSE owner.balloon_alert(owner, "evasive movements began") - playsound(owner, 'modular_skyrat/modules/xenos_skyrat_redo/sound/alien_hiss.ogg', 100, TRUE, 8, 0.9) + playsound(owner, 'modular_nova/modules/xenos_nova_redo/sound/alien_hiss.ogg', 100, TRUE, 8, 0.9) to_chat(owner, span_danger("We take evasive action, making us impossible to hit with projectiles for the next [evasion_duration / 10] seconds.")) addtimer(CALLBACK(src, PROC_REF(evasion_deactivate)), evasion_duration) evade_active = TRUE @@ -62,17 +58,17 @@ return TRUE /// Handles deactivation of the xeno evasion ability, mainly unregistering the signal and giving a balloon alert -/datum/action/cooldown/alien/skyrat/evade/proc/evasion_deactivate() +/datum/action/cooldown/alien/nova/evade/proc/evasion_deactivate() evade_active = FALSE owner.balloon_alert(owner, "evasion ended") UnregisterSignal(owner, COMSIG_PROJECTILE_ON_HIT) -/datum/action/cooldown/alien/skyrat/evade/proc/give_back_ventcrawl() +/datum/action/cooldown/alien/nova/evade/proc/give_back_ventcrawl() ADD_TRAIT(owner, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) to_chat(owner, span_notice("We are rested enough to crawl through vents again.")) /// Handles if either BULLET_ACT_HIT or BULLET_ACT_FORCE_PIERCE happens to something using the xeno evade ability -/datum/action/cooldown/alien/skyrat/evade/proc/on_projectile_hit() +/datum/action/cooldown/alien/nova/evade/proc/on_projectile_hit() if(owner.incapacitated(IGNORE_GRAB) || !isturf(owner.loc) || !evade_active) return BULLET_ACT_HIT @@ -82,7 +78,7 @@ addtimer(CALLBACK(owner, TYPE_PROC_REF(/datum, remove_filter), RUNNER_BLUR_EFFECT), 0.5 SECONDS) return BULLET_ACT_FORCE_PIERCE -/mob/living/carbon/alien/adult/skyrat/runner/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit = FALSE) +/mob/living/carbon/alien/adult/nova/runner/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit = FALSE) if(evade_ability) var/evade_result = evade_ability.on_projectile_hit() if(!(evade_result == BULLET_ACT_HIT)) diff --git a/modular_nova/modules/xenos_nova_redo/code/xeno_types/sentinel.dm b/modular_nova/modules/xenos_nova_redo/code/xeno_types/sentinel.dm new file mode 100644 index 00000000000000..84baa3380efd67 --- /dev/null +++ b/modular_nova/modules/xenos_nova_redo/code/xeno_types/sentinel.dm @@ -0,0 +1,143 @@ +/// NOVA SECTOR MODULE NOVA_XENO_REDO + +/mob/living/carbon/alien/adult/nova/sentinel + name = "alien sentinel" + desc = "An alien that'd be unremarkable if not for the bright coloring and visible acid glands that cover it." + caste = "sentinel" + maxHealth = 200 + health = 200 + icon_state = "aliensentinel" + melee_damage_lower = 10 + melee_damage_upper = 15 + next_evolution = /mob/living/carbon/alien/adult/nova/spitter + +/mob/living/carbon/alien/adult/nova/sentinel/Initialize(mapload) + . = ..() + + add_movespeed_modifier(/datum/movespeed_modifier/alien_slow) + +/mob/living/carbon/alien/adult/nova/sentinel/create_internal_organs() + organs += new /obj/item/organ/internal/alien/plasmavessel/small + organs += new /obj/item/organ/internal/alien/neurotoxin/sentinel + ..() + +/datum/action/cooldown/alien/acid/nova + name = "Spit Neurotoxin" + desc = "Spits neurotoxin at someone, exhausting them." + button_icon = 'modular_nova/modules/xenos_nova_redo/icons/xeno_actions.dmi' + button_icon_state = "neurospit_0" + plasma_cost = 40 + /// A singular projectile? Use this one and leave acid_casing null + var/acid_projectile = /obj/projectile/neurotoxin/nova + /// You want it to be more like a shotgun style attack? Use this one and make acid_projectile null + var/acid_casing + /// Used in to_chat messages to the owner + var/projectile_name = "neurotoxin" + /// The base icon for the ability, so a red box can be put on it using _0 or _1 + var/button_base_icon = "neurospit" + /// The sound that should be played when the xeno actually spits + var/spit_sound = 'modular_nova/modules/xenos_nova_redo/sound/alien_spitacid.ogg' + shared_cooldown = MOB_SHARED_COOLDOWN_3 + cooldown_time = 5 SECONDS + +/datum/action/cooldown/alien/acid/nova/IsAvailable(feedback = FALSE) + return ..() && isturf(owner.loc) + +/datum/action/cooldown/alien/acid/nova/set_click_ability(mob/on_who) + . = ..() + if(!.) + return + + to_chat(on_who, span_notice("You prepare your [projectile_name] gland. <B>Left-click to fire at a target!</B>")) + + button_icon_state = "[button_base_icon]_1" + build_all_button_icons() + on_who.update_icons() + +/datum/action/cooldown/alien/acid/nova/unset_click_ability(mob/on_who, refund_cooldown = TRUE) + . = ..() + if(!.) + return + + if(refund_cooldown) + to_chat(on_who, span_notice("You empty your [projectile_name] gland.")) + + button_icon_state = "[button_base_icon]_0" + build_all_button_icons() + on_who.update_icons() + +/datum/action/cooldown/alien/acid/nova/InterceptClickOn(mob/living/caller, params, atom/target) + . = ..() + if(!.) + unset_click_ability(caller, refund_cooldown = FALSE) + return FALSE + + var/turf/user_turf = caller.loc + var/turf/target_turf = get_step(caller, target.dir) + if(!isturf(target_turf)) + return FALSE + + var/modifiers = params2list(params) + caller.visible_message( + span_danger("[caller] spits [projectile_name]!"), + span_alertalien("You spit [projectile_name]."), + ) + + if(acid_projectile) + var/obj/projectile/spit_projectile = new acid_projectile(caller.loc) + spit_projectile.preparePixelProjectile(target, caller, modifiers) + spit_projectile.firer = caller + spit_projectile.fire() + playsound(caller, spit_sound, 100, TRUE, 5, 0.9) + caller.newtonian_move(get_dir(target_turf, user_turf)) + return TRUE + + if(acid_casing) + var/obj/item/ammo_casing/casing = new acid_casing(caller.loc) + playsound(caller, spit_sound, 100, TRUE, 5, 0.9) + casing.fire_casing(target, caller, null, null, null, ran_zone(), 0, caller) + caller.newtonian_move(get_dir(target_turf, user_turf)) + return TRUE + + CRASH("Neither acid_projectile or acid_casing are set on [caller]'s spit attack!") + +/datum/action/cooldown/alien/acid/nova/Activate(atom/target) + return TRUE + +/obj/projectile/neurotoxin/nova + name = "neurotoxin spit" + icon_state = "neurotoxin" + damage = 30 + paralyze = 0 + damage_type = STAMINA + armor_flag = BIO + +/obj/projectile/neurotoxin/on_hit(atom/target, blocked = 0, pierce_hit) + if(isalien(target)) + damage = 0 + return ..() + +/datum/action/cooldown/alien/acid/nova/lethal + name = "Spit Acid" + desc = "Spits neurotoxin at someone, burning them." + acid_projectile = /obj/projectile/neurotoxin/nova/acid + button_icon_state = "acidspit_0" + projectile_name = "acid" + button_base_icon = "acidspit" + +/obj/projectile/neurotoxin/nova/acid + name = "acid spit" + icon_state = "toxin" + damage = 20 + paralyze = 0 + damage_type = BURN + +/obj/item/organ/internal/alien/neurotoxin/sentinel + name = "neurotoxin gland" + icon_state = "neurotox" + zone = BODY_ZONE_PRECISE_MOUTH + slot = ORGAN_SLOT_XENO_NEUROTOXINGLAND + actions_types = list( + /datum/action/cooldown/alien/acid/nova, + /datum/action/cooldown/alien/acid/nova/lethal, + ) diff --git a/modular_nova/modules/xenos_nova_redo/code/xeno_types/spitter.dm b/modular_nova/modules/xenos_nova_redo/code/xeno_types/spitter.dm new file mode 100644 index 00000000000000..d80a3ca5b34c1f --- /dev/null +++ b/modular_nova/modules/xenos_nova_redo/code/xeno_types/spitter.dm @@ -0,0 +1,23 @@ +/// NOVA SECTOR MODULE NOVA_XENO_REDO + +/mob/living/carbon/alien/adult/nova/spitter + name = "alien spitter" + desc = "A fairly heavy looking alien with prominent acid glands, it's mouth dripping with... some kind of toxin or acid." + caste = "spitter" + maxHealth = 300 + health = 300 + icon_state = "alienspitter" + melee_damage_lower = 15 + melee_damage_upper = 20 + +/mob/living/carbon/alien/adult/nova/spitter/Initialize(mapload) + . = ..() + + add_movespeed_modifier(/datum/movespeed_modifier/alien_heavy) + + REMOVE_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) + +/mob/living/carbon/alien/adult/nova/spitter/create_internal_organs() + organs += new /obj/item/organ/internal/alien/plasmavessel + organs += new /obj/item/organ/internal/alien/neurotoxin/spitter + ..() diff --git a/modular_nova/modules/xenos_nova_redo/code/xeno_types/warrior.dm b/modular_nova/modules/xenos_nova_redo/code/xeno_types/warrior.dm new file mode 100644 index 00000000000000..53001da8d25af9 --- /dev/null +++ b/modular_nova/modules/xenos_nova_redo/code/xeno_types/warrior.dm @@ -0,0 +1,78 @@ +/// NOVA SECTOR MODULE NOVA_XENO_REDO + +/mob/living/carbon/alien/adult/nova/warrior + name = "alien warrior" + desc = "If there are aliens to call walking tanks, this would be one of them, with both the heavy armor and strong arms to back that claim up." + caste = "warrior" + maxHealth = 400 + health = 400 + icon_state = "alienwarrior" + melee_damage_lower = 30 + melee_damage_upper = 35 + +/mob/living/carbon/alien/adult/nova/warrior/Initialize(mapload) + . = ..() + var/static/list/innate_actions = list( + /datum/action/cooldown/spell/aoe/repulse/xeno/nova_tailsweep, + /datum/action/cooldown/mob_cooldown/charge/basic_charge/defender, + /datum/action/cooldown/alien/nova/warrior_agility, + ) + grant_actions_by_list(innate_actions) + + REMOVE_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) + + add_movespeed_modifier(/datum/movespeed_modifier/alien_big) + +/mob/living/carbon/alien/adult/nova/warrior/create_internal_organs() + organs += new /obj/item/organ/internal/alien/plasmavessel + ..() + +/datum/action/cooldown/alien/nova/warrior_agility + name = "Agility Mode" + desc = "Drop onto all fours, increasing your speed at the cost of damage and being unable to use most abilities." + button_icon_state = "the_speed_is_alot" + cooldown_time = 1 SECONDS + can_be_used_always = TRUE + /// Is the warrior currently running around on all fours? + var/being_agile = FALSE + +/datum/action/cooldown/alien/nova/warrior_agility/Activate() + . = ..() + if(!being_agile) + begin_agility() + return TRUE + if(being_agile) + end_agility() + return TRUE + +/// Handles the visual indication and code activation of the warrior agility ability (say that five times fast) +/datum/action/cooldown/alien/nova/warrior_agility/proc/begin_agility() + var/mob/living/carbon/alien/adult/nova/agility_target = owner + agility_target.balloon_alert(agility_target, "agility active") + to_chat(agility_target, span_danger("We drop onto all fours, allowing us to move at much greater speed at expense of being able to use most abilities.")) + playsound(agility_target, 'modular_nova/modules/xenos_nova_redo/sound/alien_hiss.ogg', 100, TRUE, 8, 0.9) + agility_target.icon_state = "alien[agility_target.caste]_mobility" + + being_agile = TRUE + agility_target.add_movespeed_modifier(/datum/movespeed_modifier/warrior_agility) + agility_target.unable_to_use_abilities = TRUE + + agility_target.melee_damage_lower = 15 + agility_target.melee_damage_upper = 20 + +/// Handles the visual indicators and code side of deactivating the agility ability +/datum/action/cooldown/alien/nova/warrior_agility/proc/end_agility() + var/mob/living/carbon/alien/adult/nova/agility_target = owner + agility_target.balloon_alert(agility_target, "agility ended") + playsound(agility_target, 'modular_nova/modules/xenos_nova_redo/sound/alien_roar2.ogg', 100, TRUE, 8, 0.9) //Warrior runs up on all fours, stands upright, screams at you + agility_target.icon_state = "alien[agility_target.caste]" + + being_agile = FALSE + agility_target.remove_movespeed_modifier(/datum/movespeed_modifier/warrior_agility) + agility_target.unable_to_use_abilities = FALSE + + agility_target.melee_damage_lower = initial(agility_target.melee_damage_lower) + agility_target.melee_damage_upper = initial(agility_target.melee_damage_upper) + +/datum/movespeed_modifier/warrior_agility + multiplicative_slowdown = -2 diff --git a/modular_skyrat/modules/xenos_skyrat_redo/icons/big_xenos.dmi b/modular_nova/modules/xenos_nova_redo/icons/big_xenos.dmi similarity index 100% rename from modular_skyrat/modules/xenos_skyrat_redo/icons/big_xenos.dmi rename to modular_nova/modules/xenos_nova_redo/icons/big_xenos.dmi diff --git a/modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi b/modular_nova/modules/xenos_nova_redo/icons/xeno_actions.dmi similarity index 100% rename from modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi rename to modular_nova/modules/xenos_nova_redo/icons/xeno_actions.dmi diff --git a/modular_nova/modules/xenos_nova_redo/readme.md b/modular_nova/modules/xenos_nova_redo/readme.md new file mode 100644 index 00000000000000..933462af84c133 --- /dev/null +++ b/modular_nova/modules/xenos_nova_redo/readme.md @@ -0,0 +1,41 @@ +## Title: Nova Sector Xeno Rework + +MODULE ID: NOVA_XENO_REDO + +### Description: + +Reworks and rebalances xenomorphs to be more in line a tgmc style of alien, especially focusing on unique abilites and lack of rclick and ranged instant hardstuns + +### TG Proc/File Changes: + +- MOVED: + code\modules\mob\living\carbon\alien\larva\powers.dm > /datum/action/cooldown/alien/larva_evolve/Activate + TO: + modular_nova\modules\xenos_nova_redo\code\larva.dm + +- MOVED: + code\modules\mob\living\carbon\human\human_defense.dm > /mob/living/carbon/human/attack_alien + TO: + modular_nova\modules\xenos_nova_redo\code\human_defense.dm + +### Defines: + +IN: code/__DEFINES/~nova_defines/traits.dm + +- TRAIT_XENO_INNATE +- TRAIT_XENO_ABILITY_GIVEN +- TRAIT_XENO_HEAL_AURA + +### Master file additions + +- N/A + +### Included files that are not contained in this module: + +- N/A + +### Credits: + +@Paxilmaniac - Porting the xenos from TGMC, adopting their stuff to work with our code +TGMC - Where the sprites, sound, and ideas for caste abilities came from +Those two rounds where xenos curbstomped the whole station - Inspiration for doing this in the first place diff --git a/modular_skyrat/modules/xenos_skyrat_redo/sound/alien_hiss.ogg b/modular_nova/modules/xenos_nova_redo/sound/alien_hiss.ogg similarity index 100% rename from modular_skyrat/modules/xenos_skyrat_redo/sound/alien_hiss.ogg rename to modular_nova/modules/xenos_nova_redo/sound/alien_hiss.ogg diff --git a/modular_skyrat/modules/xenos_skyrat_redo/sound/alien_queen_screech.ogg b/modular_nova/modules/xenos_nova_redo/sound/alien_queen_screech.ogg similarity index 100% rename from modular_skyrat/modules/xenos_skyrat_redo/sound/alien_queen_screech.ogg rename to modular_nova/modules/xenos_nova_redo/sound/alien_queen_screech.ogg diff --git a/modular_skyrat/modules/xenos_skyrat_redo/sound/alien_roar1.ogg b/modular_nova/modules/xenos_nova_redo/sound/alien_roar1.ogg similarity index 100% rename from modular_skyrat/modules/xenos_skyrat_redo/sound/alien_roar1.ogg rename to modular_nova/modules/xenos_nova_redo/sound/alien_roar1.ogg diff --git a/modular_skyrat/modules/xenos_skyrat_redo/sound/alien_roar2.ogg b/modular_nova/modules/xenos_nova_redo/sound/alien_roar2.ogg similarity index 100% rename from modular_skyrat/modules/xenos_skyrat_redo/sound/alien_roar2.ogg rename to modular_nova/modules/xenos_nova_redo/sound/alien_roar2.ogg diff --git a/modular_skyrat/modules/xenos_skyrat_redo/sound/alien_spitacid.ogg b/modular_nova/modules/xenos_nova_redo/sound/alien_spitacid.ogg similarity index 100% rename from modular_skyrat/modules/xenos_skyrat_redo/sound/alien_spitacid.ogg rename to modular_nova/modules/xenos_nova_redo/sound/alien_spitacid.ogg diff --git a/modular_skyrat/modules/xenos_skyrat_redo/sound/alien_spitacid2.ogg b/modular_nova/modules/xenos_nova_redo/sound/alien_spitacid2.ogg similarity index 100% rename from modular_skyrat/modules/xenos_skyrat_redo/sound/alien_spitacid2.ogg rename to modular_nova/modules/xenos_nova_redo/sound/alien_spitacid2.ogg diff --git a/modular_skyrat/modules/xenos_skyrat_redo/sound/alien_tail_swipe.ogg b/modular_nova/modules/xenos_nova_redo/sound/alien_tail_swipe.ogg similarity index 100% rename from modular_skyrat/modules/xenos_skyrat_redo/sound/alien_tail_swipe.ogg rename to modular_nova/modules/xenos_nova_redo/sound/alien_tail_swipe.ogg diff --git a/modular_nova/readme.md b/modular_nova/readme.md new file mode 100644 index 00000000000000..7f373d91e1180c --- /dev/null +++ b/modular_nova/readme.md @@ -0,0 +1,377 @@ +# The modularization handbook - Nova Sector style, v0.2 + +## Failure to follow this guide will result in your PR being denied. + +## Introduction + +To develop and maintain a separate codebase is a big task, that many have failed and suffered the consequences of, such as outdated, and messy code. +It's not necessarily the fault of lack of skill of the people maintaining it, merely the lack of resources and how much continuous effort such an endeavor takes. + +One of the solutions for such, is to base our server on a solid codebase, that is primarily maintained by somebody else, in this case tgstation, and insert our content in a modular fashion, while following the general code (but not gameplay) direction of the upstream, mirroring any changes they do for parity. + +Git, as a version control system, is very useful, however it is just a very methodical thing, that follows its many algorithms, that sadly cannot always intelligently resolve certain changes in the code in an unambiguous way, giving us conflicts, that need to be resolved in a manual fashion. + +Due to maintainability being one of the main reasons behind our rebase to another codebase, **this protocol will seriously be enforced.** +A well organized, documented and atomized code saves our maintainers a lot of headache, when being reviewed. +Don't dump on them the work that you could have done yourself. + +This document is meant to be updated and changed, whenever any new exceptions are added onto it. It might be worth it to check, from time to time, whether we didn't define a more unique standardized way of handling some common change. + +## Important note - TEST YOUR PULL REQUESTS + +You are responsible for the testing of your content. You should not mark a pull request ready for review until you have actually tested it. If you require a separate client for testing, you can use a guest account by logging out of BYOND and connecting to your test server. Test merges are not for bug finding, they are for stress tests where local testing simply doesn't allow for this. + +### The nature of conflicts + +For example, let's have an original + +```byond +var/something = 1 +``` + +in the core code, that we decide to change from 1 to 2 on our end, + +```diff +- var/something = 1 ++ var/something = 2 //NOVA EDIT +``` + +but then our upstream introduces a change in their codebase, changing it from 1 to 4 + +```diff +- var/something = 1 ++ var/something = 4 +``` + +As easy of an example as it is, it results in a relatively simple conflict, in the form of + +```byond +var/something = 2 //NOVA EDIT +``` + +where we pick the preferable option manually. + +### The solution + +That is something that cannot and likely shouldn't be resolved automatically, because it might introduce errors and bugs that will be very hard to track down, not to even bring up more complex examples of conflicts, such as ones that involve changes that add, remove and move lines of code all over the place. + +tl;dr it tries its best but ultimately is just a dumb program, therefore, we must ourselves do work to ensure that it can do most of the work, while minimizing the effort spent on manual involvement, in the cases where the conflicts will be inevitable. + +Our answer to this is modularization of the code. + +**Modularization** means, that most of the changes and additions we do, will be kept in a separate **`modular_nova/`** folder, as independent from the core code as possible, and those which absolutely cannot be modularized, will need to be properly marked by comments, specifying where the changes start, where they end, and which feature they are a part of, but more on that in the next section. + +## The modularization protocol + +Always start by thinking of the theme/purpose of your work. It's oftentimes a good idea to see if there isn't an already existing one, that you should append to. + +**If it's a tgcode-specific tweak or bugfix, first course of action should be an attempt to discuss and PR it upstream, instead of needlessly modularizing it here.** + +Otherwise, pick a new ID for your module. E.g. `DNA-FEATURE-WINGS` or `XENOARCHEAOLOGY` or `SHUTTLE_TOGGLE` - We will use this in future documentation. It is essentially your module ID. It must be uniform throughout the entire module. All references MUST be exactly the same. This is to allow for easy searching. + +And then you'll want to establish your core folder that you'll be working out of which is normally your module ID. E.g. `modular_nova/modules/shuttle_toggle` + +### Maps + +IMPORTANT: MAP CONTRIBUTION GUIDELINES HAVE BEEN UPDATED + +When you are adding a new item to the map you MUST follow this procedure: +Start by deciding how big of a change it is going to be, if it is a small 1 item change, you should use the simple area automapper. If it is an entire room, you should use the template automapper. + +We will no longer have _nova map versions. + +DO NOT CHANGE TG MAPS, THEY ARE HELD TO THE SAME STANDARD AS ICONS. USE THE ABOVE TO MAKE MAP EDITS. + +The automapper uses prebaked templates to override sections of a map using coordinates to plot the starting location. See entries in automapper_config.toml for examples. + +The simple area automapper uses datum entries to place down a single item in an area of a map that makes vauge sense. + +### Assets: images, sounds, icons and binaries + +Git doesn't handle conflicts of binary files well at all, therefore changes to core binary files are absolutely forbidden, unless you have a really *really* ***really*** good reason to do otherwise. + +All assets added by us should be placed into the same modular folder as your code. This means everything is kept inside your module folder, sounds, icons and code files. + +- ***Example:*** You're adding a new lavaland mob. + + First of all you create your modular folder. E.g. `modular_nova/modules/lavalandmob` + + And then you'd want to create sub-folders for each component. E.g. `/code` for code and `/sounds` for sound files and `/icons` for any icon files. + + After doing this, you'll want to set your references within the code. + + ```byond + /mob/lavaland/newmob + icon = 'modular_nova/modules/lavalandmob/icons/mob.dmi' + icon_state = "dead_1" + sound = 'modular_nova/modules/lavalandmob/sounds/boom.ogg' + ``` + + This ensures your code is fully modular and will make it easier for future edits. + +- Other assets, binaries and tools, should usually be handled likewise, depending on the case-by-case context. When in doubt, ask a maintainer or other contributors for tips and suggestions. + +- Any additional clothing icon files you add MUST go into the existing files in master_files clothing section. + +### The `master_files` Folder + +You should always put any modular overrides of icons, sound, code, etc. inside this folder, and it **must** follow the core code folder layout. + +Example: `code/modules/mob/living/living.dm` -> `modular_nova/master_files/code/modules/mob/living/living.dm` + +This is to make it easier to figure out what changed about a base file without having to search through proc definitions. + +It also helps prevent modules needlessly overriding the same proc multiple times. More information on these types of edits come later. + +### Fully modular portions of your code + +This section will be fairly straightforward, however, I will try to go over the basics and give simple examples, as the guide is aimed at new contributors likewise. + +The rule of thumb is that if you don't absolutely have to, you shouldn't make any changes to core codebase files. With some exceptions that will be mentioned shortly. + +In short, most of the modular code will be placed in the subfolders of your main module folder **`modular_nova/modules/yourmodule/code/`**, with similar rules as with the assets. Do not mirror core code folder structures inside your modular folder. + +For example, `modular_nova/modules/xenoarcheaology/code` containing all the code, tools, items and machinery related to it. + +Such modules, unless _very_ simple, **need** to have a `readme.md` in their folder, containing the following: + +- links to the PRs that implemented this module or made any significant changes to it +- short description of the module +- list of files changed in the core code, with a short description of the change, and a list of changes in other modular files that are not part of the same module, that were necessary for this module to function properly +- (optionally) a bit more elaborative documentation for future-proofing the code, that will be useful further development and maintenance +- credits + +***Template:*** [Here](module_template.md) + +## Modular Overrides (Important!!) + +Note, that it is possible to append code in front, or behind a core proc, in a modular fashion, without editing the original proc, through referring the parent proc, using `. = ..()` or `..()`. And likewise, it is possible to add a new var to an existing datum or obj, without editing the core files. + +**Note about proc overrides: Just because you can, doesn't mean you should!!** + +In general they are a good idea and encouraged whenever it is possible to do so. However this is not a hard rule, and sometimes Nova edits are preferable. Just try to use your common sense about it. + +For example: please do not copy paste an entire TG proc into a modular override, make one small change, and then bill it as 'fully modular'. These procs are an absolute nightmare to maintain because once something changes upstream you have to update the overridden proc. + +Sometimes you aren't even aware the override exists if it compiles fine and doesn't cause any bugs. This often causes features that were added upstream to be missing here. So yeah. Avoid that. It's okay if something isn't fully modular. Sometimes it's the better choice. + +The best candidates for modular proc overrides are ones where you can just tack something on after calling the parent, or weave a parent call cleverly in the middle somewhere to achieve your desired effect. + +Performance should also be considered when you are overriding a hot proc (like Life() for example), as each additional call adds overhead. Nova edits are much more performant in those cases. For most procs this won't be something you have to think about, though. + +### These modular overrides should be kept in `master_files`, and you should avoid putting them inside modules as much as possible. + +To keep it simple, let's assume you wanted to make guns spark when shot, for simulating muzzle flash or whatever other reasons, and you want potentially to use it with all kinds of guns. + +You could start, in a modular file, by adding a var. + +```byond +/obj/item/gun + var/muzzle_flash = TRUE +``` + +And it will work just fine. Afterwards, let's say you want to check that var and spawn your sparks after firing a shot. +Knowing the original proc being called by shooting is + +```byond +/obj/item/gun/proc/shoot_live_shot(mob/living/user, pointblank = 0, atom/pbtarget = null, message = 1) +``` + +you can define a child proc for it, that will get inserted into the inheritance chain of the related procs (big words, but in simple cases like this, you don't need to worry) + +```byond +/obj/item/gun/shoot_live_shot(mob/living/user, pointblank = 0, atom/pbtarget = null, message = 1) + . = ..() //. is the default return value, we assign what the parent proc returns to it, as we call it before ours + if(muzzle_flash) + spawn_sparks(src) //For simplicity, I assume you've already made a proc for this +``` + +And that wraps the basics of it up. + +### Non-modular changes to the core code - IMPORTANT + +Every once in a while, there comes a time, where editing the core files becomes inevitable. + +Please be sure to log these in the module readme.md. Any file changes. + +In those cases, we've decided to apply the following convention, with examples: + +- **Addition:** + + ```byond + //NOVA EDIT ADDITION BEGIN - SHUTTLE_TOGGLE - (Optional Reason/comment) + var/adminEmergencyNoRecall = FALSE + var/lastMode = SHUTTLE_IDLE + var/lastCallTime = 6000 + //NOVA EDIT ADDITION END + ``` + +- **Removal:** + + ```byond + //NOVA EDIT REMOVAL BEGIN - SHUTTLE_TOGGLE - (Optional Reason/comment) + /* + for(var/obj/docking_port/stationary/S in stationary) + if(S.id = id) + return S + */ + //NOVA EDIT REMOVAL END + WARNING("couldn't find dock with id: [id]") + ``` + + And for any removals that are moved to different files: + + ```byond + //NOVA EDIT REMOVAL BEGIN - SHUTTLE_TOGGLE - (Moved to modular_nova/shuttle_toggle/randomverbs.dm) + /* + /client/proc/admin_call_shuttle() + set category = "Admin - Events" + set name = "Call Shuttle" + + if(EMERGENCY_AT_LEAST_DOCKED) + return + + if(!check_rights(R_ADMIN)) + return + + var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No") + if(confirm != "Yes") + return + + SSshuttle.emergency.request() + SSblackbox.record_feedback("tally", "admin_verb", 1, "Call Shuttle") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + log_admin("[key_name(usr)] admin-called the emergency shuttle.") + message_admins(span_adminnotice("[key_name_admin(usr)] admin-called the emergency shuttle.")) + return + */ + //NOVA EDIT REMOVAL END + ``` + +- **Change:** + + ```byond + //NOVA EDIT CHANGE BEGIN - SHUTTLE_TOGGLE - (Optional Reason/comment) + //if(SHUTTLE_STRANDED, SHUTTLE_ESCAPE) - NOVA EDIT - ORIGINAL + if(SHUTTLE_STRANDED, SHUTTLE_ESCAPE, SHUTTLE_DISABLED) + //NOVA EDIT CHANGE END + return 1 + ``` + +## Exceptional cases of modular code + +From every rule, there's exceptions, due to many circumstances. Don't think about it too much. + +### Defines + +Due to the way byond loads files, it has become necessary to make a different folder for handling our modular defines. +That folder is **`code/__DEFINES/~nova_defines`**, in which you can add them to the existing files, or create those files as necessary. + +If you have a define that's used in more than one file, it **must** be declared here. + +If you have a define that's used in one file, and won't be used anywhere else, declare it at the top, and `#undef MY_DEFINE` at the bottom of the file. This is to keep context menus clean, and to prevent confusion by those using IDEs with autocomplete. + +### Module folder layout + +To keep form and ensure most modules are easy to navigate and to keep control of the amount of files and folders being made in the repository, you are required to follow this layout. + +Ensure the folder names are exactly as stated. + +Top most folder: module_id + +**DO NOT COPY THE CORE CODE FILE STRUCTURE IN YOUR MODULE!!** + +**Code**: Any .DM files must go in here. + +- Good: /modular_nova/modules/example_module/code/disease_mob.dm +- Bad: /modular_nova/modules/example_module/code/modules/antagonists/disease/disease_mob.dm + +**Icons**: Any .DMI files must go in here. + +- Good: /modular_nova/modules/example_module/icons/mining_righthand.dmi +- Bad: /modular_nova/modules/example_module/icons/mob/inhands/equipment/mining_righthand.dmi + +**Sound**: Any SOUND files must go in here. + +- Good: See above. +- Bad: See above. + +The readme should go into the parent folder, module_id. + +**DO NOT MIX AND MATCH FILE TYPES IN FOLDERS!** + +### Commenting out code - DON'T DO IT + +If you are commenting out redundant code in modules, do not comment it out, instead, delete it. + +Even if you think someone is going to redo whatever it is you're commenting out, don't, gitblame exists for a reason. + +This also applies to files, do not comment out entire files, just delete them instead. This helps us keep down on filebloat and pointless comments. + +**This does not apply to non-modular changes.** + +## Modular TGUI + +TGUI is another exceptional case, since it uses javascript and isn't able to be modular in the same way that DM code is. +ALL of the tgui files are located in `/tgui/packages/tgui/interfaces` and its subdirectories; there is no specific folder for Nova Sector UIs. + +### Modifying upstream files + +When modifying upstream TGUI files the same rules apply as modifying upstream DM code, however the grammar for comments may be slightly different. + +You can do both `// NOVA EDIT` and `/* NOVA EDIT */`, though in some cases you may have to use one over the other. + +In general try to keep your edit comments on the same line as the change. Preferably inside the JSX tag. e.g: + +```js +<Button + onClick={() => act('spin', { high_quality: true })} + icon="rat" // NOVA EDIT ADDITION +</Button> +``` + +```js +<Button + onClick={() => act('spin', { high_quality: true })} + // NOVA EDIT ADDITION START - another example, multiline changes + icon="rat" + tooltip="spin the rat." + // NOVA EDIT ADDITION END +</Button> +``` + +```js +<SomeThing someProp="whatever" /* it also works in self-closing tags */ /> +``` + +If that is not possible, you can wrap your edit in curly brackets e.g. + +```js +{/* NOVA EDIT ADDITION START */} +<SomeThing> + someProp="whatever" +</SomeThing> +{/* NOVA EDIT ADDITION END */} +``` + +### Creating new TGUI files + +**IMPORTANT! When creating a new TGUI file from scratch, please add the following at the very top of the file (line 1):** +```js +// THIS IS A NOVA SECTOR UI FILE +``` + +This way they are easily identifiable as modular TGUI .tsx/.jsx files. You do not have to do anything further, and there will never be any need for a Nova edit comment in a modular TGUI file. + +<!-- ## Exemplary PR's // TODO: REPLACE THESE! + +Here are a couple PR's that are great examples of the guide being followed, reference them if you are stuck: + +- <https://github.com/Skyrat-SS13/Skyrat-tg/pull/241> +- <https://github.com/Skyrat-SS13/Skyrat-tg/pull/111> --> + +## Afterword + +It might seem like a lot to take in, but if we remain consistent, it will save us a lot of headache in the long run, once we start having to resolve conflicts manually. +Thanks to a bit more scrupulous documentation, it will be immediately obvious what changes were done and where and by which features, things will be a lot less ambiguous and messy. + +Best of luck in your coding. Remember that the community is there for you, if you ever need help. diff --git a/skyrat/tools/merge-upstream-pull-request.sh b/modular_nova/tools/merge-upstream-pull-request.sh similarity index 100% rename from skyrat/tools/merge-upstream-pull-request.sh rename to modular_nova/tools/merge-upstream-pull-request.sh diff --git a/modular_nova/tools/nova_check_grep.sh b/modular_nova/tools/nova_check_grep.sh new file mode 100755 index 00000000000000..b90125f1c56920 --- /dev/null +++ b/modular_nova/tools/nova_check_grep.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +#ANSI Escape Codes for colors to increase contrast of errors +RED="\033[0;31m" +GREEN="\033[0;32m" +BLUE="\033[0;34m" +NC="\033[0m" # No Color + +echo -e "${BLUE}Re-running grep checks, but looking in modular_nova...${NC}" + +# Run the linters again, but modular Nova Sector code. +sed "s|code/\*\*/\*\.dm|modular_nova/\*\*/\*\.dm|g" <tools/ci/check_grep.sh | bash diff --git a/modular_skyrat/master_files/code/_globalvars/lists/ambience.dm b/modular_skyrat/master_files/code/_globalvars/lists/ambience.dm deleted file mode 100644 index b0af3298b5e3f0..00000000000000 --- a/modular_skyrat/master_files/code/_globalvars/lists/ambience.dm +++ /dev/null @@ -1,6 +0,0 @@ -GLOBAL_LIST_INIT(generic_ambience, list( - 'modular_skyrat/master_files/sound/ambience/ambigen1.ogg', 'modular_skyrat/master_files/sound/ambience/ambigen2.ogg', - 'modular_skyrat/master_files/sound/ambience/ambigen3.ogg', 'modular_skyrat/master_files/sound/ambience/ambigen4.ogg', - 'modular_skyrat/master_files/sound/ambience/ambigen5.ogg', 'modular_skyrat/master_files/sound/ambience/ambigen6.ogg', - 'modular_skyrat/master_files/sound/ambience/ambigen7.ogg', 'modular_skyrat/master_files/sound/ambience/ambigen8.ogg', - 'modular_skyrat/master_files/sound/ambience/ambigen9.ogg')) diff --git a/modular_skyrat/master_files/code/_onclick/hud/readme.md b/modular_skyrat/master_files/code/_onclick/hud/readme.md deleted file mode 100644 index 428e5d56227db7..00000000000000 --- a/modular_skyrat/master_files/code/_onclick/hud/readme.md +++ /dev/null @@ -1,4 +0,0 @@ -This is the directory for any hud additions, please add them appropriately and log them in this file. - -Current huds: -- Gun hud - Gunhud diff --git a/modular_skyrat/master_files/code/_onclick/hud/screen_objects.dm b/modular_skyrat/master_files/code/_onclick/hud/screen_objects.dm deleted file mode 100644 index 33265d9fee7edb..00000000000000 --- a/modular_skyrat/master_files/code/_onclick/hud/screen_objects.dm +++ /dev/null @@ -1,2 +0,0 @@ -/atom/movable/screen/robot - icon = 'modular_skyrat/master_files/icons/hud/screen_cyborg.dmi' diff --git a/modular_skyrat/master_files/code/datums/ert.dm b/modular_skyrat/master_files/code/datums/ert.dm deleted file mode 100644 index 70f155001e1da0..00000000000000 --- a/modular_skyrat/master_files/code/datums/ert.dm +++ /dev/null @@ -1,12 +0,0 @@ -/* -* Use this file to add -* Modular ERT datums -*/ - -/datum/ert/asset_protection - roles = list(/datum/antagonist/ert/asset_protection) - leader_role = /datum/antagonist/ert/asset_protection/leader - rename_team = "Asset Protection Team" - code = "Red" - mission = "Protect Nanotrasen's assets, crew are assets." - polldesc = "a Nanotrasen asset protection team" diff --git a/modular_skyrat/master_files/code/datums/greyscale/config_types/greyscale_configs.dm b/modular_skyrat/master_files/code/datums/greyscale/config_types/greyscale_configs.dm deleted file mode 100644 index 1ecf3ec8d13b7a..00000000000000 --- a/modular_skyrat/master_files/code/datums/greyscale/config_types/greyscale_configs.dm +++ /dev/null @@ -1,3 +0,0 @@ -/datum/greyscale_config/sneakers_marisa/worn/digi - name = "Marisa Sneakers (Worn Digi)" - icon_file = 'modular_skyrat/modules/GAGS/icons/sneakers_digi.dmi' diff --git a/modular_skyrat/master_files/code/datums/id_trim/jobs.dm b/modular_skyrat/master_files/code/datums/id_trim/jobs.dm deleted file mode 100644 index f0bcde700876ed..00000000000000 --- a/modular_skyrat/master_files/code/datums/id_trim/jobs.dm +++ /dev/null @@ -1,108 +0,0 @@ -// MODULAR ID TRIM ACCESS OVERRIDES GO HERE!! - -//(Most) of Security has inverted IDs, with custom blue-on-black icons. This is to distinguish them from their head, who has a white-on-blue icon -/datum/id_trim/job/head_of_security - subdepartment_color = COLOR_ASSEMBLY_BLACK - -/datum/id_trim/job/warden - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - department_color = COLOR_ASSEMBLY_BLACK - subdepartment_color = COLOR_ASSEMBLY_BLACK - -/datum/id_trim/job/security_officer - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - department_color = COLOR_ASSEMBLY_BLACK - subdepartment_color = COLOR_ASSEMBLY_BLACK - -/datum/id_trim/job/detective - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - department_color = COLOR_ASSEMBLY_BLACK - subdepartment_color = COLOR_ASSEMBLY_BLACK - - -/datum/id_trim/job/chief_engineer/New() - . = ..() - - minimal_access |= ACCESS_WEAPONS - -/datum/id_trim/job/atmospheric_technician/New() - . = ..() - - minimal_access |= ACCESS_ENGINE_EQUIP - -/datum/id_trim/job/chief_medical_officer/New() - . = ..() - - minimal_access |= ACCESS_WEAPONS - -/datum/id_trim/job/research_director/New() - . = ..() - - minimal_access |= ACCESS_WEAPONS - - -/datum/id_trim/job/head_of_personnel/New() - . = ..() - - minimal_access |= ACCESS_WEAPONS - -/datum/id_trim/job/blueshield - assignment = "Blueshield" - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - trim_state = "trim_blueshield" - department_color = COLOR_COMMAND_BLUE - subdepartment_color = COLOR_CENTCOM_BLUE // Not the other way around. I think. - sechud_icon_state = SECHUD_BLUESHIELD - extra_access = list(ACCESS_BRIG, ACCESS_CARGO, ACCESS_COURT, ACCESS_GATEWAY, ACCESS_SECURITY) - minimal_access = list( - ACCESS_BRIG_ENTRANCE, ACCESS_COMMAND, ACCESS_CONSTRUCTION, ACCESS_DETECTIVE, ACCESS_ENGINEERING, - ACCESS_MAINT_TUNNELS, ACCESS_MEDICAL, ACCESS_RC_ANNOUNCE, ACCESS_RESEARCH, ACCESS_WEAPONS, - ) - minimal_wildcard_access = list(ACCESS_CAPTAIN) - template_access = list(ACCESS_CAPTAIN, ACCESS_CHANGE_IDS) - -/datum/id_trim/job/nanotrasen_consultant - assignment = "Nanotrasen Consultant" - trim_state = "trim_centcom" - department_color = COLOR_GREEN - subdepartment_color = COLOR_GREEN - sechud_icon_state = SECHUD_NT_CONSULTANT - extra_access = list() - minimal_access = list( - ACCESS_AI_UPLOAD, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_AUX_BASE, ACCESS_BAR, ACCESS_BRIG_ENTRANCE, - ACCESS_CENT_GENERAL, ACCESS_CHANGE_IDS, ACCESS_CHAPEL_OFFICE, ACCESS_COMMAND, ACCESS_CONSTRUCTION, - ACCESS_CREMATORIUM, ACCESS_COURT, ACCESS_ENGINEERING, ACCESS_EVA, ACCESS_GATEWAY, ACCESS_HOP, ACCESS_HYDROPONICS, - ACCESS_JANITOR, ACCESS_KEYCARD_AUTH, ACCESS_KITCHEN, ACCESS_LAWYER, ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS, - ACCESS_MEDICAL, ACCESS_MECH_ENGINE, ACCESS_MECH_MEDICAL, ACCESS_MECH_SCIENCE, ACCESS_MECH_SECURITY, - ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_MORGUE, ACCESS_PSYCHOLOGY, ACCESS_RC_ANNOUNCE, - ACCESS_RESEARCH, ACCESS_SECURITY, ACCESS_TELEPORTER, ACCESS_THEATRE, ACCESS_VAULT, ACCESS_WEAPONS - ) - minimal_wildcard_access = list(ACCESS_CAPTAIN, ACCESS_CENT_GENERAL) - template_access = list(ACCESS_CAPTAIN, ACCESS_CHANGE_IDS) - -/datum/id_trim/job/corrections_officer - assignment = "Corrections Officer" - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - trim_state = "trim_corrections_officer" - department_color = COLOR_ASSEMBLY_BLACK - subdepartment_color = COLOR_ASSEMBLY_BLACK - sechud_icon_state = SECHUD_CORRECTIONS_OFFICER - extra_access = list() - minimal_access = list( - ACCESS_BRIG, ACCESS_BRIG_ENTRANCE, ACCESS_COURT, - ACCESS_MAINT_TUNNELS, ACCESS_SECURITY, ACCESS_WEAPONS - ) - template_access = list(ACCESS_CAPTAIN, ACCESS_CHANGE_IDS, ACCESS_HOS) - job = /datum/job/corrections_officer - -/datum/id_trim/job/barber - assignment = "Barber" - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - trim_state = "trim_barber" - department_color = COLOR_SERVICE_LIME - subdepartment_color = COLOR_SERVICE_LIME - sechud_icon_state = SECHUD_BARBER - extra_access = list() - minimal_access = list(ACCESS_BARBER, ACCESS_MAINT_TUNNELS, ACCESS_SERVICE, ACCESS_THEATRE) - template_access = list(ACCESS_CAPTAIN, ACCESS_CHANGE_IDS, ACCESS_HOP) - job = /datum/job/barber diff --git a/modular_skyrat/master_files/code/datums/id_trim/syndicate.dm b/modular_skyrat/master_files/code/datums/id_trim/syndicate.dm deleted file mode 100644 index 9c63a19d9d916f..00000000000000 --- a/modular_skyrat/master_files/code/datums/id_trim/syndicate.dm +++ /dev/null @@ -1,99 +0,0 @@ -/// SYNDICATE ID TRIMS -/datum/id_trim/syndicom/skyrat - -// Note: These two are only left here because of the old Cybersun code. -/datum/id_trim/syndicom/skyrat/crew - assignment = "Syndicate Operative" - access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS) - -/datum/id_trim/syndicom/skyrat/captain - assignment = "Syndicate Ship Captain" - trim_state = "trim_captain" - access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS) - -/// DS-2 - -/datum/id_trim/syndicom/skyrat/ds2 - assignment = "DS-2 Operative" - trim_state = "trim_unknown" - department_color = COLOR_ASSEMBLY_BLACK - subdepartment_color = COLOR_SYNDIE_RED - -/datum/id_trim/syndicom/skyrat/ds2/prisoner - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' // I can't put this on the basetype AAAAAA - assignment = "DS-2 Hostage" - trim_state = "trim_ds2prisoner" - subdepartment_color = COLOR_MAROON - sechud_icon_state = SECHUD_DS2_PRISONER - -/datum/id_trim/syndicom/skyrat/ds2/miner - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - assignment = "DS-2 Mining Officer" - trim_state = "trim_ds2miningofficer" - sechud_icon_state = SECHUD_DS2_MININGOFFICER - -/datum/id_trim/syndicom/skyrat/ds2/syndicatestaff - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - assignment = "DS-2 General Staff" - trim_state = "trim_ds2generalstaff" - sechud_icon_state = SECHUD_DS2_GENSTAFF - -/datum/id_trim/syndicom/skyrat/ds2/researcher - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - assignment = "DS-2 Researcher" - trim_state = "trim_ds2researcher" - sechud_icon_state = SECHUD_DS2_RESEARCHER - access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS) - -/datum/id_trim/syndicom/skyrat/ds2/enginetechnician - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - assignment = "DS-2 Engine Technician" - trim_state = "trim_ds2enginetech" - sechud_icon_state = SECHUD_DS2_ENGINETECH - -/datum/id_trim/syndicom/skyrat/ds2/medicalofficer - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - assignment = "DS-2 Medical Officer" - trim_state = "trim_ds2medicalofficer" - sechud_icon_state = SECHUD_DS2_DOCTOR - -/datum/id_trim/syndicom/skyrat/ds2/masteratarms - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - assignment = "DS-2 Master At Arms" - trim_state = "trim_ds2masteratarms" - sechud_icon_state = SECHUD_DS2_MASTERATARMS - access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER) - -/datum/id_trim/syndicom/skyrat/ds2/brigofficer - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - assignment = "DS-2 Brig Officer" - trim_state = "trim_ds2brigofficer" - sechud_icon_state = SECHUD_DS2_BRIGOFFICER - access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER) - -/datum/id_trim/syndicom/skyrat/ds2/corporateliasion // DS2 HoP - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - assignment = "DS-2 Corporate Liaison" - trim_state = "trim_ds2corporateliaison" - sechud_icon_state = SECHUD_DS2_CORPLIAISON - access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER) - -/datum/id_trim/syndicom/skyrat/ds2/stationadmiral - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - assignment = "DS-2 Admiral" - trim_state = "trim_ds2admiral" - sechud_icon_state = SECHUD_DS2_ADMIRAL - access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER) - -/// Interdyne - -/datum/id_trim/syndicom/skyrat/interdyne - assignment = "Interdyne Operative" - -/datum/id_trim/syndicom/skyrat/interdyne/deckofficer - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - assignment = "Deck Officer" - trim_state = "trim_deckofficer" - department_color = COLOR_COMMAND_BLUE - subdepartment_color = COLOR_CARGO_BROWN - access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER) diff --git a/modular_skyrat/master_files/code/datums/quirks/negative.dm b/modular_skyrat/master_files/code/datums/quirks/negative.dm deleted file mode 100644 index 542af0b4050444..00000000000000 --- a/modular_skyrat/master_files/code/datums/quirks/negative.dm +++ /dev/null @@ -1,88 +0,0 @@ -/datum/quirk/equipping/nerve_staple - name = "Nerve Stapled" - desc = "You're a pacifist. Not because you want to be, but because of the device stapled into your eye." - value = -10 // pacifism = -8, losing eye slots = -2 - gain_text = span_danger("You suddenly can't raise a hand to hurt others!") - lose_text = span_notice("You think you can defend yourself again.") - medical_record_text = "Patient is nerve stapled and is unable to harm others." - icon = FA_ICON_FACE_ANGRY - forced_items = list(/obj/item/clothing/glasses/nerve_staple = list(ITEM_SLOT_EYES)) - /// The nerve staple attached to the quirk - var/obj/item/clothing/glasses/nerve_staple/staple - -/datum/quirk/equipping/nerve_staple/on_equip_item(obj/item/equipped, successful) - if (!istype(equipped, /obj/item/clothing/glasses/nerve_staple)) - return - staple = equipped - -/datum/quirk/equipping/nerve_staple/remove() - . = ..() - if (!staple || staple != quirk_holder.get_item_by_slot(ITEM_SLOT_EYES)) - return - to_chat(quirk_holder, span_warning("The nerve staple suddenly falls off your face and melts[istype(quirk_holder.loc, /turf/open/floor) ? " on the floor" : ""]!")) - qdel(staple) - -// Re-labels TG brainproblems to be more generic. There never was a tumor anyways! -/datum/quirk/item_quirk/brainproblems - name = "Brain Degeneration" - desc = "You have a lethal condition in your brain that is slowly destroying it. Better bring some mannitol!" - medical_record_text = "Patient has a lethal condition in their brain that is slowly causing brain death." - icon = FA_ICON_BRAIN - -// Override of Brain Tumor quirk for robotic/synthetic species with posibrains. -// Does not appear in TGUI or the character preferences window. -/datum/quirk/item_quirk/brainproblems/synth - name = "Positronic Cascade Anomaly" - desc = "Your positronic brain is slowly corrupting itself due to a cascading anomaly. Better bring some liquid solder!" - gain_text = "<span class='danger'>You feel glitchy.</span>" - lose_text = "<span class='notice'>You no longer feel glitchy.</span>" - medical_record_text = "Patient has a cascading anomaly in their brain that is slowly causing brain death." - icon = FA_ICON_BRAZILIAN_REAL_SIGN - mail_goodies = list(/obj/item/storage/pill_bottle/liquid_solder/braintumor) - hidden_quirk = TRUE - -// If brainproblems is added to a synth, this detours to the brainproblems/synth quirk. -// TODO: Add more brain-specific detours when PR #16105 is merged -/datum/quirk/item_quirk/brainproblems/add_to_holder(mob/living/new_holder, quirk_transfer, client/client_source) - if(!issynthetic(new_holder) || type != /datum/quirk/item_quirk/brainproblems) - // Defer to TG brainproblems if the character isn't robotic. - return ..() - - // TODO: Check brain type and detour to appropriate brainproblems quirk - var/datum/quirk/item_quirk/brainproblems/synth/bp_synth = new - qdel(src) - return bp_synth.add_to_holder(new_holder, quirk_transfer, client_source) - -// Synthetics get liquid_solder with Brain Tumor instead of mannitol. -/datum/quirk/item_quirk/brainproblems/synth/add_unique(client/client_source) - give_item_to_holder( - /obj/item/storage/pill_bottle/liquid_solder/braintumor, - list( - LOCATION_LPOCKET = ITEM_SLOT_LPOCKET, - LOCATION_RPOCKET = ITEM_SLOT_RPOCKET, - LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, - LOCATION_HANDS = ITEM_SLOT_HANDS, - ), - flavour_text = "These will keep you alive until you can secure a supply of medication. Don't rely on them too much!", - ) - -// Override of Blood Deficiency quirk for robotic/synthetic species. -// Does not appear in TGUI or the character preferences window. -/datum/quirk/blooddeficiency/synth - name = "Hydraulic Leak" - desc = "Your body's hydraulic fluids are leaking through their seals." - medical_record_text = "Patient requires regular treatment for hydraulic fluid loss." - icon = FA_ICON_GLASS_WATER_DROPLET - mail_goodies = list(/obj/item/reagent_containers/blood/oil) - // min_blood = BLOOD_VOLUME_BAD - 25; // TODO: Uncomment after TG PR #70563 - hidden_quirk = TRUE - -// If blooddeficiency is added to a synth, this detours to the blooddeficiency/synth quirk. -/datum/quirk/blooddeficiency/add_to_holder(mob/living/new_holder, quirk_transfer, client/client_source) - if(!issynthetic(new_holder) || type != /datum/quirk/blooddeficiency) - // Defer to TG blooddeficiency if the character isn't robotic. - return ..() - - var/datum/quirk/blooddeficiency/synth/bd_synth = new - qdel(src) - return bd_synth.add_to_holder(new_holder, quirk_transfer) diff --git a/modular_skyrat/master_files/code/datums/quirks/neutral.dm b/modular_skyrat/master_files/code/datums/quirks/neutral.dm deleted file mode 100644 index 51d96c8fdbeba4..00000000000000 --- a/modular_skyrat/master_files/code/datums/quirks/neutral.dm +++ /dev/null @@ -1,141 +0,0 @@ -/datum/quirk/equipping - abstract_parent_type = /datum/quirk/equipping - quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE - icon = FA_ICON_BOX_OPEN - /// the items that will be equipped, formatted in the way of [item_path = list of slots it can be equipped to], will not equip over nodrop items - var/list/items = list() - /// the items that will be forcefully equipped, formatted in the way of [item_path = list of slots it can be equipped to], will equip over nodrop items - var/list/forced_items = list() - -/datum/quirk/equipping/add_unique(client/client_source) - var/mob/living/carbon/carbon_holder = quirk_holder - if (!items || !carbon_holder) - return - var/list/equipped_items = list() - var/list/all_items = forced_items|items - for (var/obj/item/item_path as anything in all_items) - if (!ispath(item_path)) - continue - var/item = new item_path(carbon_holder.loc) - var/success = FALSE - // Checking for nodrop and seeing if there's an empty slot - for (var/slot as anything in all_items[item_path]) - success = force_equip_item(carbon_holder, item, slot, check_item = FALSE) - if (success) - break - // Checking for nodrop - for (var/slot as anything in all_items[item_path]) - success = force_equip_item(carbon_holder, item, slot) - if (success) - break - - if ((item_path in forced_items) && !success) - // Checking for nodrop failed, shove it into the first available slot, even if it has nodrop - for (var/slot as anything in all_items[item_path]) - success = force_equip_item(carbon_holder, item, slot, FALSE) - if (success) - break - equipped_items[item] = success - for (var/item as anything in equipped_items) - on_equip_item(item, equipped_items[item]) - -/datum/quirk/equipping/proc/force_equip_item(mob/living/carbon/target, obj/item/item, slot, check_nodrop = TRUE, check_item = TRUE) - var/obj/item/item_in_slot = target.get_item_by_slot(slot) - if (check_item && item_in_slot) - if (check_nodrop && HAS_TRAIT(item_in_slot, TRAIT_NODROP)) - return FALSE - target.dropItemToGround(item_in_slot, force = TRUE) - return target.equip_to_slot_if_possible(item, slot, disable_warning = TRUE) // this should never not work tbh - -/datum/quirk/equipping/proc/on_equip_item(obj/item/equipped, success) - return - -/datum/quirk/equipping/lungs - abstract_parent_type = /datum/quirk/equipping/lungs - icon = FA_ICON_LUNGS - var/obj/item/organ/internal/lungs/lungs_holding - var/obj/item/organ/internal/lungs/lungs_added - var/lungs_typepath = /obj/item/organ/internal/lungs - items = list(/obj/item/clothing/accessory/breathing = list(ITEM_SLOT_BACKPACK)) - var/breath_type = "oxygen" - -/datum/quirk/equipping/lungs/add(client/client_source) - var/mob/living/carbon/human/carbon_holder = quirk_holder - if (!istype(carbon_holder) || !lungs_typepath) - return - var/current_lungs = carbon_holder.get_organ_slot(ORGAN_SLOT_LUNGS) - if (istype(current_lungs, lungs_typepath)) - return - lungs_holding = current_lungs - if(!isnull(lungs_holding)) - lungs_holding.organ_flags |= ORGAN_FROZEN // stop decay on the old lungs - lungs_added = new lungs_typepath - lungs_added.Insert(carbon_holder, special = TRUE) - if(!isnull(lungs_holding)) - lungs_holding.moveToNullspace() // save them for later - -/datum/quirk/equipping/lungs/remove() - var/mob/living/carbon/carbon_holder = quirk_holder - if (!istype(carbon_holder) || !istype(lungs_holding)) - return - var/obj/item/organ/internal/lungs/lungs = carbon_holder.get_organ_slot(ORGAN_SLOT_LUNGS) - if (lungs != lungs_added && lungs != lungs_holding) - qdel(lungs_holding) - return - lungs_holding.Insert(carbon_holder, special = TRUE, drop_if_replaced = FALSE) - lungs_holding.organ_flags &= ~ORGAN_FROZEN - -/datum/quirk/equipping/lungs/on_equip_item(obj/item/equipped, success) - var/mob/living/carbon/human/human_holder = quirk_holder - if (!istype(equipped, /obj/item/clothing/accessory/breathing)) - return - var/obj/item/clothing/accessory/breathing/acc = equipped - acc.breath_type = breath_type - if (acc.can_attach_accessory(human_holder?.w_uniform, human_holder)) - acc.attach(human_holder.w_uniform, human_holder) - -/obj/item/clothing/accessory/breathing - name = "breathing dogtag" - desc = "Dogtag that lists what you breathe." - icon_state = "allergy" - above_suit = FALSE - minimize_when_attached = TRUE - attachment_slot = CHEST - var/breath_type - -/obj/item/clothing/accessory/breathing/examine(mob/user) - . = ..() - . += "The dogtag reads: I breathe [breath_type]." - -/obj/item/clothing/accessory/breathing/accessory_equipped(obj/item/clothing/under/uniform, user) - . = ..() - RegisterSignal(uniform, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) - -/obj/item/clothing/accessory/breathing/accessory_dropped(obj/item/clothing/under/uniform, user) - . = ..() - UnregisterSignal(uniform, COMSIG_ATOM_EXAMINE) - -/obj/item/clothing/accessory/breathing/proc/on_examine(datum/source, mob/user, list/examine_list) - SIGNAL_HANDLER - examine_list += "The dogtag reads: I breathe [breath_type]." - -/datum/quirk/equipping/lungs/nitrogen - name = "Nitrogen Breather" - desc = "You breathe nitrogen, even if you might not normally breathe it. Oxygen is poisonous." - icon = FA_ICON_LUNGS_VIRUS - medical_record_text = "Patient can only breathe nitrogen." - gain_text = "<span class='danger'>You suddenly have a hard time breathing anything but nitrogen." - lose_text = "<span class='notice'>You suddenly feel like you aren't bound to nitrogen anymore." - value = 0 - forced_items = list( - /obj/item/clothing/mask/breath = list(ITEM_SLOT_MASK), - /obj/item/tank/internals/nitrogen/belt/full = list(ITEM_SLOT_HANDS, ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET)) - lungs_typepath = /obj/item/organ/internal/lungs/nitrogen - breath_type = "nitrogen" - -/datum/quirk/equipping/lungs/nitrogen/on_equip_item(obj/item/equipped, success) - . = ..() - var/mob/living/carbon/carbon_holder = quirk_holder - if (!success || !istype(carbon_holder) || !istype(equipped, /obj/item/tank/internals)) - return - carbon_holder.internal = equipped diff --git a/modular_skyrat/master_files/code/datums/traits/neutral.dm b/modular_skyrat/master_files/code/datums/traits/neutral.dm deleted file mode 100644 index eecdccaee62c19..00000000000000 --- a/modular_skyrat/master_files/code/datums/traits/neutral.dm +++ /dev/null @@ -1,277 +0,0 @@ -#define TRAIT_HYDRA_HEADS "hydrahead" // We still dont have a centralised trait file - -GLOBAL_VAR_INIT(DNR_trait_overlay, generate_DNR_trait_overlay()) - -/// Instantiates GLOB.DNR_trait_overlay by creating a new mutable_appearance instance of the overlay. -/proc/generate_DNR_trait_overlay() - RETURN_TYPE(/mutable_appearance) - - var/mutable_appearance/DNR_trait_overlay = mutable_appearance('modular_skyrat/modules/indicators/icons/DNR_trait_overlay.dmi', "DNR", FLY_LAYER) - DNR_trait_overlay.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA | KEEP_APART - return DNR_trait_overlay - - -// SKYRAT NEUTRAL TRAITS -/datum/quirk/excitable - name = "Excitable!" - desc = "Head patting makes your tail wag! You're very excitable! WAG WAG." - gain_text = span_notice("You crave for some headpats!") - lose_text = span_notice("You no longer care for headpats all that much.") - medical_record_text = "Patient seems to get excited easily." - value = 0 - mob_trait = TRAIT_EXCITABLE - icon = FA_ICON_LAUGH_BEAM - -/datum/quirk/personalspace - name = "Personal Space" - desc = "You'd rather people keep their hands off your rear end." - gain_text = span_notice("You'd like it if people kept their hands off your butt.") - lose_text = span_notice("You're less concerned about people touching your butt.") - medical_record_text = "Patient demonstrates negative reactions to their posterior being touched." - value = 0 - mob_trait = TRAIT_PERSONALSPACE - icon = FA_ICON_HAND_PAPER - -/datum/quirk/dnr - name = "Do Not Revive" - desc = "For whatever reason, you cannot be revived in any way." - gain_text = span_notice("Your spirit gets too scarred to accept revival.") - lose_text = span_notice("You can feel your soul healing again.") - medical_record_text = "Patient is a DNR, and cannot be revived in any way." - value = 0 - mob_trait = TRAIT_DNR - icon = FA_ICON_SKULL_CROSSBONES - -/datum/quirk/dnr/add(client/client_source) - . = ..() - - quirk_holder.update_dnr_hud() - -/datum/quirk/dnr/remove() - var/mob/living/old_holder = quirk_holder - - . = ..() - - old_holder.update_dnr_hud() - -/mob/living/prepare_data_huds() - . = ..() - - update_dnr_hud() - -/// Adds the DNR HUD element if src has TRAIT_DNR. Removes it otherwise. -/mob/living/proc/update_dnr_hud() - var/image/dnr_holder = hud_list?[DNR_HUD] - if(isnull(dnr_holder)) - return - - var/icon/temporary_icon = icon(icon, icon_state, dir) - dnr_holder.pixel_y = temporary_icon.Height() - world.icon_size - - if(HAS_TRAIT(src, TRAIT_DNR)) - set_hud_image_active(DNR_HUD) - dnr_holder.icon_state = "hud_dnr" - else - set_hud_image_inactive(DNR_HUD) - -/mob/living/carbon/human/examine(mob/user) - . = ..() - - if(stat != DEAD && HAS_TRAIT(src, TRAIT_DNR) && (HAS_TRAIT(user, TRAIT_SECURITY_HUD) || HAS_TRAIT(user, TRAIT_MEDICAL_HUD))) - . += "\n[span_boldwarning("This individual is unable to be revived, and may be permanently dead if allowed to die!")]" - -/datum/atom_hud/data/human/dnr - hud_icons = list(DNR_HUD) - -// uncontrollable laughter -/datum/quirk/item_quirk/joker - name = "Pseudobulbar Affect" - desc = "At random intervals, you suffer uncontrollable bursts of laughter." - value = 0 - quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_PROCESSES - medical_record_text = "Patient suffers with sudden and uncontrollable bursts of laughter." - var/pcooldown = 0 - var/pcooldown_time = 60 SECONDS - icon = FA_ICON_GRIN_TEARS - -/datum/quirk/item_quirk/joker/add_unique(client/client_source) - give_item_to_holder(/obj/item/paper/joker, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) - -/datum/quirk/item_quirk/joker/process() - if(pcooldown > world.time) - return - pcooldown = world.time + pcooldown_time - var/mob/living/carbon/human/user = quirk_holder - if(user && istype(user)) - if(user.stat == CONSCIOUS) - if(prob(20)) - user.emote("laugh") - addtimer(CALLBACK(user, /mob/proc/emote, "laugh"), 5 SECONDS) - addtimer(CALLBACK(user, /mob/proc/emote, "laugh"), 10 SECONDS) - -/obj/item/paper/joker - name = "disability card" - icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - icon_state = "joker" - desc = "Smile, though your heart is aching." - default_raw_text = "<i>\ - <div style='border-style:solid;text-align:center;border-width:5px;margin: 20px;margin-bottom:0px'>\ - <div style='margin-top:20px;margin-bottom:20px;font-size:150%;'>\ - Forgive my laughter:<br>\ - I have a condition.\ - </div>\ - </div>\ - </i>\ - <br>\ - <center>\ - <b>\ - MORE ON BACK\ - </b>\ - </center>" - /// Whether or not the card is currently flipped. - var/flipped = FALSE - /// The flipped version of default_raw_text. - var/flipside_default_raw_text = "<i>\ - <div style='border-style:solid;text-align:center;border-width:5px;margin: 20px;margin-bottom:0px'>\ - <div style='margin-top:20px;margin-bottom:20px;font-size:100%;'>\ - <b>\ - It's a medical condition causing sudden,<br>\ - frequent and uncontrollable laughter that<br>\ - doesn't match how you feel.<br>\ - It can happen in people with a brain injury<br>\ - or certain neurological conditions.<br>\ - </b>\ - </div>\ - </div>\ - </i>\ - <br>\ - <center>\ - <b>\ - KINDLY RETURN THIS CARD\ - </b>\ - </center>" - /// Flipside version of raw_text_inputs. - var/list/datum/paper_input/flipside_raw_text_inputs - /// Flipside version of raw_stamp_data. - var/list/datum/paper_stamp/flipside_raw_stamp_data - /// Flipside version of raw_field_input_data. - var/list/datum/paper_field/flipside_raw_field_input_data - /// Flipside version of input_field_count - var/flipside_input_field_count = 0 - - -/obj/item/paper/joker/Initialize(mapload) - . = ..() - if(flipside_default_raw_text) - add_flipside_raw_text(flipside_default_raw_text) - - -/** - * This is an unironic copy-paste of add_raw_text(), meant to have the same functionalities, but for the flipside. - * - * This simple helper adds the supplied raw text to the flipside of the paper, appending to the end of any existing contents. - * - * This a God proc that does not care about paper max length and expects sanity checking beforehand if you want to respect it. - * - * The caller is expected to handle updating icons and appearance after adding text, to allow for more efficient batch adding loops. - * * Arguments: - * * text - The text to append to the paper. - * * font - The font to use. - * * color - The font color to use. - * * bold - Whether this text should be rendered completely bold. - */ -/obj/item/paper/joker/proc/add_flipside_raw_text(text, font, color, bold) - var/new_input_datum = new /datum/paper_input( - text, - font, - color, - bold, - ) - - flipside_input_field_count += get_input_field_count(text) - - LAZYADD(flipside_raw_text_inputs, new_input_datum) - - -/obj/item/paper/joker/update_icon() - ..() - icon_state = "joker" - -/obj/item/paper/joker/AltClick(mob/living/carbon/user, obj/item/card) - var/list/datum/paper_input/old_raw_text_inputs = raw_text_inputs - var/list/datum/paper_stamp/old_raw_stamp_data = raw_stamp_data - var/list/datum/paper_stamp/old_raw_field_input_data = raw_field_input_data - var/old_input_field_count = input_field_count - - raw_text_inputs = flipside_raw_text_inputs - raw_stamp_data = flipside_raw_stamp_data - raw_field_input_data = flipside_raw_field_input_data - input_field_count = flipside_input_field_count - - flipside_raw_text_inputs = old_raw_text_inputs - flipside_raw_stamp_data = old_raw_stamp_data - flipside_raw_field_input_data = old_raw_field_input_data - flipside_input_field_count = old_input_field_count - - flipped = !flipped - update_static_data() - - balloon_alert(user, "card flipped") - -/datum/quirk/feline_aspect - name = "Feline Traits" - desc = "You happen to act like a feline, for whatever reason." - gain_text = span_notice("Nya could go for some catnip right about now...") - lose_text = span_notice("You feel less attracted to lasers.") - medical_record_text = "Patient seems to possess behavior much like a feline." - mob_trait = TRAIT_FELINE - icon = FA_ICON_CAT - -/datum/quirk/item_quirk/canine - name = "Canidae Traits" - desc = "Bark. You seem to act like a canine for whatever reason. This will replace most other tongue-based speech quirks." - icon = FA_ICON_DOG - value = 0 - medical_record_text = "Patient was seen digging through the trash can. Keep an eye on them." - -/datum/quirk/item_quirk/canine/add_unique(client/client_source) - var/mob/living/carbon/human/human_holder = quirk_holder - var/obj/item/organ/internal/tongue/dog/new_tongue = new(get_turf(human_holder)) - - new_tongue.copy_traits_from(human_holder.get_organ_slot(ORGAN_SLOT_TONGUE)) - new_tongue.Insert(human_holder, special = TRUE, drop_if_replaced = FALSE) - -/datum/quirk/sensitivesnout - name = "Sensitive Snout" - desc = "Your face has always been sensitive, and it really hurts when someone pokes it!" - gain_text = span_notice("Your face is awfully sensitive.") - lose_text = span_notice("Your face feels numb.") - medical_record_text = "Patient's nose seems to have a cluster of nerves in the tip, would advise against direct contact." - value = 0 - mob_trait = TRAIT_SENSITIVESNOUT - icon = FA_ICON_FINGERPRINT - -/datum/quirk/overweight - name = "Overweight" - desc = "You weigh more than an average person at your size, you've gotten used to it by now." - gain_text = span_notice("Your body feels heavy.") - lose_text = span_notice("Your suddenly feel lighter!") - value = 0 - icon = FA_ICON_HAMBURGER // I'm very hungry. Give me the burger! - medical_record_text = "Patient weighs higher than average." - mob_trait = TRAIT_FAT - -/datum/quirk/overweight/add(client/client_source) - quirk_holder.add_movespeed_modifier(/datum/movespeed_modifier/overweight) - -/datum/quirk/overweight/remove() - quirk_holder.remove_movespeed_modifier(/datum/movespeed_modifier/overweight) - -/datum/movespeed_modifier/overweight - multiplicative_slowdown = 0.5 //Around that of a dufflebag, enough to be impactful but not debilitating. - -/datum/mood_event/fat/New(mob/parent_mob, ...) - . = ..() - if(HAS_TRAIT_FROM(parent_mob, TRAIT_FAT, QUIRK_TRAIT)) - mood_change = 0 // They are probably used to it, no reason to be viscerally upset about it. - description = "<b>I'm fat.</b>" diff --git a/modular_skyrat/master_files/code/game/atoms.dm b/modular_skyrat/master_files/code/game/atoms.dm deleted file mode 100644 index 1701f6cfa78a22..00000000000000 --- a/modular_skyrat/master_files/code/game/atoms.dm +++ /dev/null @@ -1,10 +0,0 @@ -// Stop All Animations nulls the mob's transform, so we have to call update_body_size to ensure that it gets scaled properly again -/atom/vv_do_topic(list/href_list) - . = ..() - if(href_list[VV_HK_STOP_ALL_ANIMATIONS] && check_rights(R_VAREDIT)) - var/mob/living/carbon/human/human_mob = src - if(!istype(human_mob)) - return - - human_mob.dna.current_body_size = BODY_SIZE_NORMAL // because if we don't set this, update_body_size will think that it has no work to do. - human_mob.dna.update_body_size() diff --git a/modular_skyrat/master_files/code/game/gamemodes/dynamic.dm b/modular_skyrat/master_files/code/game/gamemodes/dynamic.dm deleted file mode 100644 index 4c27c0edde0160..00000000000000 --- a/modular_skyrat/master_files/code/game/gamemodes/dynamic.dm +++ /dev/null @@ -1,67 +0,0 @@ -#define MIN_MIDROUND_COST 20 -#define ALT_MIDROUND_LOWER_TIME 4500 -#define ALT_MIDROUND_UPPER_TIME 10500 - -// A lite version of the intercept, which only sends a paper with goals and a trait report (or a lack thereof) -/datum/game_mode/dynamic/proc/send_trait_report() - . = "<b><i>Central Command Status Summary</i></b><hr>" - - var/greenshift = GLOB.dynamic_forced_extended || (threat_level < MIN_MIDROUND_COST && shown_threat < MIN_MIDROUND_COST) // if both shown and real threat are below any ruleset, its greenshift time - generate_station_goals(greenshift) - - if(!GLOB.station_goals.len) - . = "<hr><b>No assigned goals.</b><BR>" - else - . += generate_station_goal_report() - if(!SSstation.station_traits.len) - . = "<hr><b>No identified shift divergencies.</b><BR>" - else - . += generate_station_trait_report() - - . += "<hr>This concludes your shift-start evaluation. Have a secure shift!<hr>\ - <p style=\"color: grey; text-align: justify;\">This label certifies an Intern has reviewed the above before sending. This document is the property of Nanotrasen Corporation.</p>" - - print_command_report(., "Central Command Status Summary", announce = FALSE) - priority_announce("Hello, crew of [station_name()]. Our intern has finished their shift-start divergency and goals evaluation, which has been sent to your communications console. Have a secure shift!", "Divergency Report", SSstation.announcer.get_rand_report_sound()) - -/datum/game_mode/dynamic - /// Desired median point for midrounds, plus or minus the midround_roll_distance. - var/midround_median_frequency = 36000 - -/// Divides threat budget based on the server config -/datum/game_mode/dynamic/generate_budgets() - if(CONFIG_GET(flag/split_threat_budget)) - return ..() - - round_start_budget = 0 - initial_round_start_budget = 0 - mid_round_budget = threat_level - -/// Gets the chance for a heavy ruleset midround injection, the dry_run argument is only used for forced injection. -/datum/game_mode/dynamic/get_heavy_midround_injection_chance(dry_run) - var/next_midround_roll = next_midround_injection() - SSticker.round_start_time - - var/heavy_coefficient = CLAMP01((next_midround_roll - midround_light_upper_bound) / (midround_heavy_lower_bound - midround_light_upper_bound)) - - return 100 * heavy_coefficient - -/// Determines the next midround injection attempt based on the set median and roll distance. -/datum/game_mode/dynamic/next_midround_injection() - if(!isnull(next_midround_injection)) - return next_midround_injection - - if(last_midround_injection_attempt == 0) - last_midround_injection_attempt = SSticker.round_start_time - - next_midround_injection = last_midround_injection_attempt + rand((midround_median_frequency - midround_roll_distance), (midround_median_frequency + midround_roll_distance)) - - return next_midround_injection - -/// If a midround injection fails to run, this can be called by the particular rule (if required) to attempt an alternate. -/datum/game_mode/dynamic/proc/alternate_midround_injection() - next_midround_injection = world.time + rand(ALT_MIDROUND_LOWER_TIME, ALT_MIDROUND_UPPER_TIME) - log_dynamic_and_announce("Alternate midround injection in [DisplayTimeText(next_midround_injection - world.time)]") - -#undef MIN_MIDROUND_COST -#undef ALT_MIDROUND_LOWER_TIME -#undef ALT_MIDROUND_UPPER_TIME diff --git a/modular_skyrat/master_files/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/modular_skyrat/master_files/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm deleted file mode 100644 index bf49ba88168c44..00000000000000 --- a/modular_skyrat/master_files/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ /dev/null @@ -1,4 +0,0 @@ -/// Fired when there are no valid candidates. Try another roll after a delay. -/datum/dynamic_ruleset/midround/from_ghosts/attempt_replacement() - mode.alternate_midround_injection() - return diff --git a/modular_skyrat/master_files/code/game/machinery/doors/firedoor.dm b/modular_skyrat/master_files/code/game/machinery/doors/firedoor.dm deleted file mode 100644 index d80f3ae7c16937..00000000000000 --- a/modular_skyrat/master_files/code/game/machinery/doors/firedoor.dm +++ /dev/null @@ -1,45 +0,0 @@ -/obj/machinery/door/firedoor/AltClick(mob/user) - . = ..() - if(!user.can_perform_action(src)) - return - try_manual_override(user) - -/obj/machinery/door/firedoor/examine(mob/user) - . = ..() - . += span_notice("Alt-click the door to use the manual override.") - -/obj/machinery/door/proc/try_manual_override(mob/user) - if(density && !welded && !operating) - balloon_alert(user, "opening...") - if(do_after(user, 10 SECONDS, target = src)) - try_to_crowbar(null, user) - return TRUE - return FALSE - -/obj/machinery/door/firedoor/try_to_crowbar(obj/item/used_object, mob/user) - if(welded || operating) - balloon_alert(user, "opening failed!") - return - - if(density) - open() - else - close() - -/obj/machinery/door/firedoor/heavy/closed - icon_state = "door_closed" - density = TRUE - alarm_type = FIRELOCK_ALARM_TYPE_GENERIC - -/obj/machinery/door/firedoor/solid - name = "solid emergency shutter" - desc = "Emergency air-tight shutter, capable of sealing off breached areas. It has a mechanism to open it with just your hands." - icon = 'modular_skyrat/modules/aesthetics/firedoor/icons/firedoor.dmi' - glass = FALSE - -/obj/machinery/door/firedoor/solid/closed - icon_state = "door_closed" - density = TRUE - opacity = TRUE - alarm_type = FIRELOCK_ALARM_TYPE_GENERIC - diff --git a/modular_skyrat/master_files/code/game/objects/items/cards_ids.dm b/modular_skyrat/master_files/code/game/objects/items/cards_ids.dm deleted file mode 100644 index 9b43fccfc3ab28..00000000000000 --- a/modular_skyrat/master_files/code/game/objects/items/cards_ids.dm +++ /dev/null @@ -1,25 +0,0 @@ -// GENERIC -/obj/item/card/id/advanced/silver/generic - name = "generic silver identification card" - icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - icon_state = "card_silvergen" - assigned_icon_state = null - -/obj/item/card/id/advanced/gold/generic - name = "generic gold identification card" - icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - icon_state = "card_goldgen" - assigned_icon_state = null - -// DS2 -/obj/item/card/id/advanced/prisoner/ds2 - name = "syndicate prisoner card" - icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - icon_state = "card_ds2prisoner" - -// SOLFED -/obj/item/card/id/advanced/solfed - name = "solfed identification card" - icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - icon_state = "card_solfed" - assigned_icon_state = "assigned_solfed" diff --git a/modular_skyrat/master_files/code/game/objects/items/devices/anomaly_neutralizer.dm b/modular_skyrat/master_files/code/game/objects/items/devices/anomaly_neutralizer.dm deleted file mode 100644 index 914c0ba5d3da61..00000000000000 --- a/modular_skyrat/master_files/code/game/objects/items/devices/anomaly_neutralizer.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/item/anomaly_neutralizer/Initialize(mapload) - . = ..() - AddComponent(/datum/component/effect_remover, \ - success_feedback = "You neutralize %THEEFFECT with %THEWEAPON, frying its circuitry in the process.", \ - on_clear_callback = CALLBACK(src, PROC_REF(on_use_cme)), \ - effects_we_clear = list(/obj/effect/cme)) - -/** - * Callback for the effect remover component to handle neutralizing CMEs. - */ -/obj/item/anomaly_neutralizer/proc/on_use_cme(obj/effect/target, mob/living/user) - var/obj/effect/cme/cme_target = target - if(cme_target.neutralized) - return - electrocute_mob(user, get_area(src), src, 1, TRUE) - cme_target.anomalyNeutralize() - on_use(target, user) diff --git a/modular_skyrat/master_files/code/game/objects/items/storage/backpack.dm b/modular_skyrat/master_files/code/game/objects/items/storage/backpack.dm deleted file mode 100644 index f736ae58f2a56c..00000000000000 --- a/modular_skyrat/master_files/code/game/objects/items/storage/backpack.dm +++ /dev/null @@ -1,156 +0,0 @@ -/obj/item/storage/backpack/satchel/flat/PopulateContents() - var/contraband_list = list( - /obj/item/storage/belt/utility/syndicate = 1, - /obj/item/storage/toolbox/syndicate = 7, - /obj/item/card/id/advanced/chameleon = 6, - /obj/item/stack/spacecash/c5000 = 3, - /obj/item/stack/telecrystal = 2, - /obj/item/storage/belt/military = 12, - /obj/item/storage/fancy/cigarettes/cigpack_syndicate = 8, - /obj/item/storage/box/fireworks/dangerous = 11, - /obj/item/clothing/mask/gas/syndicate = 10, - /obj/item/vending_refill/donksoft = 13, - /obj/item/ammo_box/foambox/riot = 11, - /obj/item/soap/syndie = 7, - /obj/item/reagent_containers/crackbrick = 5, - /obj/item/reagent_containers/crack = 10, - /obj/item/reagent_containers/cocaine = 9, - /obj/item/reagent_containers/cocainebrick = 4, - /obj/item/reagent_containers/hashbrick = 13, //not contraband, but it'll be good padding, and there'll still be a black market for bulk goods - /obj/item/reagent_containers/heroin = 8, - /obj/item/reagent_containers/heroinbrick = 3, - /obj/item/reagent_containers/blacktar = 12, - /obj/item/storage/pill_bottle/stimulant = 9, //ephedrine and coffee. Can actually change whether someone gets out of a runaway situation - /obj/item/clothing/mask/cigarette/pipe/crackpipe = 15, - /obj/item/toy/cards/deck/syndicate = 10, //1tc, not balance breaking, small but premium commodity - /obj/item/reagent_containers/cup/bottle/morphine = 8, - /obj/item/reagent_containers/syringe/contraband/methamphetamine = 12, - /obj/item/clothing/glasses/sunglasses = 5, //can already be achieved in an arguably better form with just some hacking - ) - - for(var/i in 1 to 3) - var/contraband_type = pick_weight(contraband_list) - contraband_list -= contraband_type - new contraband_type(src) - -/obj/item/storage/backpack/satchel/flat/with_tools/PopulateContents() - new /obj/item/stack/tile/iron/base(src) - new /obj/item/crowbar(src) - -/* - * Messenger Bag Types - */ - -/obj/item/storage/backpack/messenger - name = "messenger bag" - desc = "A trendy looking messenger bag; sometimes known as a courier bag. Fashionable and portable." - icon_state = "messenger" - inhand_icon_state = "messenger" - icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi' - lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' - righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' - -/obj/item/storage/backpack/messenger/eng - name = "industrial messenger bag" - desc = "A tough messenger bag made of advanced treated leather for fireproofing. It also has more pockets than usual." - icon_state = "messenger_engineering" - inhand_icon_state = "messenger_engineering" - resistance_flags = FIRE_PROOF - -/obj/item/storage/backpack/messenger/med - name = "medical messenger bag" - desc = "A sterile messenger bag well loved by medics for its portability and sleek profile." - icon_state = "messenger_medical" - inhand_icon_state = "messenger_medical" - -/obj/item/storage/backpack/messenger/vir - name = "virologist messenger bag" - desc = "A sterile messenger bag with virologist colours, useful for deploying biohazards in record times." - icon_state = "messenger_virology" - inhand_icon_state = "messenger_virology" - -/obj/item/storage/backpack/messenger/chem - name = "chemist messenger bag" - desc = "A sterile messenger bag with chemist colours, good for getting to your alleyway deals on time." - icon_state = "messenger_chemistry" - inhand_icon_state = "messenger_chemistry" - -/obj/item/storage/backpack/messenger/coroner - name = "coroner messenger bag" - desc = "A messenger bag used to sneak your way out of graveyards at a good pace." - icon_state = "messenger_coroner" - inhand_icon_state = "messenger_coroner" - -/obj/item/storage/backpack/messenger/gen - name = "geneticist messenger bag" - desc = "A sterile messenger bag with geneticist colours, making a remarkably cute accessory for hulks." - icon_state = "messenger_genetics" - inhand_icon_state = "messenger_genetics" - -/obj/item/storage/backpack/messenger/science - name = "scientist messenger bag" - desc = "Useful for holding research materials, and for speeding your way to different scan objectives." - icon_state = "messenger_science" - inhand_icon_state = "messenger_science" - -/obj/item/storage/backpack/messenger/hyd - name = "botanist messenger bag" - desc = "A messenger bag made of all natural fibers, great for getting to the sesh in time." - icon_state = "messenger_hydroponics" - inhand_icon_state = "messenger_hydroponics" - -/obj/item/storage/backpack/messenger/sec - name = "security messenger bag" - desc = "A robust messenger bag for security related needs." - icon_state = "messenger_security_black" - inhand_icon_state = "messenger_security_black" - uses_advanced_reskins = TRUE - unique_reskin = list( - "Black Variant" = list( - RESKIN_ICON_STATE = "messenger_security_black", - RESKIN_WORN_ICON_STATE = "messenger_security_black", - RESKIN_INHAND_STATE = "messenger_security_black", - ), - "White Variant" = list( - RESKIN_ICON_STATE = "messenger_security_white", - RESKIN_WORN_ICON_STATE = "messenger_security_white", - RESKIN_INHAND_STATE = "messenger_security_white", - ), - ) - -/obj/item/storage/backpack/messenger/explorer - name = "explorer messenger bag" - desc = "A robust messenger bag for stashing your loot, as well as making a remarkably cute accessory for your drakebone armor." - icon_state = "messenger_explorer" - inhand_icon_state = "messenger_explorer" - -/obj/item/storage/backpack/messenger/cap - name = "captain's messenger bag" - desc = "An exclusive messenger bag for NanoTrasen officers, made of real whaleleather." - icon_state = "messenger_captain" - inhand_icon_state = "messenger_captain" - -/obj/item/storage/backpack/messenger/head_of_personnel - name = "head of personnel's messenger bag" - desc = "A exclusive messenger bag issued to Nanotrasen's finest second, with great storage space for all that paperwork you have planned." - icon_state = "messenger_hop" - inhand_icon_state = "messenger_hop" - -/obj/item/storage/backpack/messenger/blueshield - name = "blueshield's messenger bag'" - desc = "A robust messenger bag issued to Nanotrasen's finest guard dogs, with extra TACTICAL POCKETS. Whatever that even means." - icon_state = "messenger_blueshield" - inhand_icon_state = "messenger_blueshield" - -/obj/item/storage/backpack/messenger/science/robo - name = "robotics messenger bag" - desc = "A sleek, industrial-strength messenger bag issued to robotics personnel. Smells faintly of oil; a fashionably mobile choice for fashionably sedentary mechanics." - icon_state = "messenger_robo" - inhand_icon_state = "messenger_robo" - -/obj/item/storage/backpack/messenger/clown - name = "Giggles von Honkerton Jr." - desc = "The latest in storage 'technology' from Honk Co. Hey, how does this fit so much with such a small profile anyway? The wearer will definitely never tell you." - icon_state = "messenger_clown" - inhand_icon_state = "messenger_clown" diff --git a/modular_skyrat/master_files/code/game/objects/objs.dm b/modular_skyrat/master_files/code/game/objects/objs.dm deleted file mode 100644 index 24befc59031f2e..00000000000000 --- a/modular_skyrat/master_files/code/game/objects/objs.dm +++ /dev/null @@ -1,3 +0,0 @@ -/obj - ///the skyrat version of obj_flags, to prevent any potential future conflict - var/skyrat_obj_flags = null diff --git a/modular_skyrat/master_files/code/game/sound.dm b/modular_skyrat/master_files/code/game/sound.dm deleted file mode 100644 index 9d21458a3b2014..00000000000000 --- a/modular_skyrat/master_files/code/game/sound.dm +++ /dev/null @@ -1,214 +0,0 @@ -/proc/get_sfx_skyrat(soundin) - if(istext(soundin)) - switch(soundin) - if(SFX_KEYBOARD) - soundin = pick( - 'modular_skyrat/modules/aesthetics/computer/sound/keypress1.ogg', - 'modular_skyrat/modules/aesthetics/computer/sound/keypress2.ogg', - 'modular_skyrat/modules/aesthetics/computer/sound/keypress3.ogg', - 'modular_skyrat/modules/aesthetics/computer/sound/keypress4.ogg', - 'modular_skyrat/modules/aesthetics/computer/sound/keystroke4.ogg', - ) - if(SFX_BULLET_IMPACT_METAL) // This is the one that will be used most, it is extensive. - soundin = pick( - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_01.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_02.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_03.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_04.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_05.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_06.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_07.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_08.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_09.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_10.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_11.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_12.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_13.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_14.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_15.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_16.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_17.ogg', - ) - if(SFX_BULLET_IMPACT_FLESH) - soundin = pick( - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_01.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_02.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_03.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_04.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_05.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_06.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_07.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_08.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_09.ogg', - ) - if(SFX_BULLET_IMPACT_ICE) - soundin = pick( - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_01.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_02.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_03.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_04.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_05.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_06.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_07.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_08.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_09.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_10.ogg', - ) - if(SFX_BULLET_IMPACT_WOOD) - soundin = pick( - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_01.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_02.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_03.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_04.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_05.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_06.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_07.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_08.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_09.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_10.ogg', - ) - if(SFX_BULLET_IMPACT_CONCRETE) - soundin = pick( - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_01.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_02.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_03.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_04.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_05.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_06.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_07.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_08.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_09.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_10.ogg', - ) - if(SFX_BULLET_IMPACT_GLASS) - soundin = pick( - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_01.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_02.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_03.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_04.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_05.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_06.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_07.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_08.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_09.ogg', - 'modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_10.ogg', - ) - if("punch") - soundin = pick('modular_skyrat/master_files/sound/weapons/punch1.ogg', 'modular_skyrat/master_files/sound/weapons/punch3.ogg') - if ("explosion") - soundin = pick( - 'modular_skyrat/modules/black_mesa/sound/explosions/explode1.ogg', - 'modular_skyrat/modules/black_mesa/sound/explosions/explode2.ogg', - 'modular_skyrat/modules/black_mesa/sound/explosions/explode3.ogg', - 'modular_skyrat/modules/black_mesa/sound/explosions/explode4.ogg', - 'modular_skyrat/modules/black_mesa/sound/explosions/explode5.ogg', - 'modular_skyrat/modules/black_mesa/sound/explosions/explode6.ogg', - 'modular_skyrat/modules/black_mesa/sound/explosions/explode7.ogg', - ) - return soundin - -// This is an atom level variable to prevent extensive typechecking for impacts. -/atom - // The sound we make if hit. - var/impact_sound = SFX_BULLET_IMPACT_METAL - - -// TURFS -/turf/closed/wall/ice - impact_sound = SFX_BULLET_IMPACT_ICE - -/turf/closed/wall/mineral/snow - impact_sound = SFX_BULLET_IMPACT_ICE - -/turf/closed/wall/mineral/wood - impact_sound = SFX_BULLET_IMPACT_WOOD - -/turf/closed/wall/mineral/bamboo - impact_sound = SFX_BULLET_IMPACT_WOOD - -/turf/closed/wall/mineral/sandstone - impact_sound = SFX_BULLET_IMPACT_CONCRETE - -/turf/closed/wall/vault/rock - impact_sound = SFX_BULLET_IMPACT_CONCRETE - -/turf/closed/wall/vault/sandstone - impact_sound = SFX_BULLET_IMPACT_CONCRETE - -/turf/closed/wall/rock - impact_sound = SFX_BULLET_IMPACT_CONCRETE - -/turf/closed/wall/mineral/diamond - impact_sound = SFX_BULLET_IMPACT_GLASS - -/turf/closed/wall/mineral/plasma - impact_sound = SFX_BULLET_IMPACT_GLASS - -// MOBS -/mob/living - impact_sound = SFX_BULLET_IMPACT_FLESH - -// STRUCTURES -/obj/structure/window - impact_sound = SFX_BULLET_IMPACT_GLASS - -/obj/structure/table/glass - impact_sound = SFX_BULLET_IMPACT_GLASS - -/obj/structure/table/reinforced/rglass - impact_sound = SFX_BULLET_IMPACT_GLASS - -/obj/structure/table/reinforced/plasmarglass - impact_sound = SFX_BULLET_IMPACT_GLASS - -/obj/structure/table/reinforced/plastitaniumglass - impact_sound = SFX_BULLET_IMPACT_GLASS - -/obj/structure/table/reinforced/titaniumglass - impact_sound = SFX_BULLET_IMPACT_GLASS - -/obj/structure/table/wood - impact_sound = SFX_BULLET_IMPACT_WOOD - -/obj/structure/barricade/wooden - impact_sound = SFX_BULLET_IMPACT_WOOD - -/obj/structure/chair/wood - impact_sound = SFX_BULLET_IMPACT_WOOD - -/obj/structure/closet/crate/wooden - impact_sound = SFX_BULLET_IMPACT_WOOD - -/obj/structure/door_assembly/door_assembly_wood - impact_sound = SFX_BULLET_IMPACT_WOOD - -/obj/structure/falsewall/wood - impact_sound = SFX_BULLET_IMPACT_WOOD - -/obj/structure/table_frame/wood - impact_sound = SFX_BULLET_IMPACT_WOOD - -/obj/structure/deployable_barricade/wooden - impact_sound = SFX_BULLET_IMPACT_WOOD - -/obj/structure/statue/snow - impact_sound = SFX_BULLET_IMPACT_ICE - -/obj/structure/deployable_barricade/snow - impact_sound = SFX_BULLET_IMPACT_ICE - - - -// MACHINERY -/obj/machinery/door/window - impact_sound = SFX_BULLET_IMPACT_GLASS - -/obj/machinery/computer - impact_sound = SFX_BULLET_IMPACT_GLASS - -/obj/machinery/door/airlock/wood - impact_sound = SFX_BULLET_IMPACT_WOOD - -/obj/machinery/computer/security/wooden_tv - impact_sound = SFX_BULLET_IMPACT_WOOD - diff --git a/modular_skyrat/master_files/code/modules/admin/admin.dm b/modular_skyrat/master_files/code/modules/admin/admin.dm deleted file mode 100644 index 86f86bc7e12fc1..00000000000000 --- a/modular_skyrat/master_files/code/modules/admin/admin.dm +++ /dev/null @@ -1,84 +0,0 @@ -GLOBAL_VAR_INIT(dchat_allowed, TRUE) - -/datum/admins/proc/toggledchat() - set category = "Server" - set desc = "Toggle dis bitch" - set name = "Toggle Dead Chat" - toggle_dchat() - log_admin("[key_name(usr)] toggled dead chat.") - message_admins("[key_name_admin(usr)] toggled dead chat.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle DCHAT", "[GLOB.dchat_allowed ? "Enabled" : "Disabled"]")) // If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/proc/toggle_dchat(toggle = null) - if(toggle != null) // if we're specifically en/disabling dead chat - if(toggle != GLOB.dchat_allowed) - GLOB.dchat_allowed = toggle - else - return - else // otherwise just toggle it - GLOB.dchat_allowed = !GLOB.dchat_allowed - to_chat(world, span_oocplain("<B>The dead chat channel has been globally [GLOB.dchat_allowed ? "enabled" : "disabled"].</B>")) - -/datum/admin_help - /// Have we requested this ticket to stop being part of the Ticket Ping subsystem? - var/ticket_ping_stop = FALSE - /// Are we added to the ticket ping subsystem in the first place - var/ticket_ping = FALSE - /// Who is handling this admin help? - var/handler - /// All sanitized text - var/full_text - -/datum/admin_help/ClosureLinks(ref_src) - . = ..() - . += " (<A HREF='?_src_=holder;[HrefToken(forceGlobal = TRUE)];ahelp=[ref_src];ahelp_action=handle_issue'>HANDLE</A>)" //SKYRAT EDIT ADDITION - . += " (<A HREF='?_src_=holder;[HrefToken(forceGlobal = TRUE)];ahelp=[ref_src];ahelp_action=pingmute'>PING MUTE</A>)" //SKYRAT EDIT ADDITION - . += " (<A HREF='?_src_=holder;[HrefToken(forceGlobal = TRUE)];ahelp=[ref_src];ahelp_action=convert'>MHELP</A>)" - -//Let the initiator know their ahelp is being handled -/datum/admin_help/proc/handle_issue(key_name = key_name_admin(usr)) - if(state != AHELP_ACTIVE) - return FALSE - - if(handler && handler == usr.ckey) // No need to handle it twice as the same person ;) - return TRUE - - if(handler && handler != usr.ckey) - var/response = tgui_alert(usr, "This ticket is already being handled by [handler]. Do you want to continue?", "Ticket already assigned", list("Yes", "No")) - if(!response || response == "No") - return FALSE - - var/msg = span_adminhelp("Your ticket is now being handled by [usr?.client?.holder?.fakekey ? usr?.client?.holder?.fakekey : "an administrator"]! Please wait while they type their response and/or gather relevant information.") - - if(initiator) - to_chat(initiator, msg) - - SSblackbox.record_feedback("tally", "ahelp_stats", 1, "handling") - msg = "Ticket [TicketHref("#[id]")] is being handled by [key_name]" - message_admins(msg) - log_admin_private(msg) - AddInteraction("Being handled by [key_name]", "Being handled by [key_name_admin(usr, FALSE)]") - - handler = "[usr.ckey]" - return TRUE - -///Proc which converts an admin_help ticket to a mentorhelp -/datum/admin_help/proc/convert_to_mentorhelp(key_name = key_name_admin(usr)) - if(state != AHELP_ACTIVE) - return FALSE - - if(handler && handler != usr.ckey) - var/response = tgui_alert(usr, "This ticket is already being handled by [handler]. Do you want to continue?", "Ticket already assigned", list("Yes", "No")) - if(!response || response == "No") - return FALSE - - add_verb(initiator, /client/verb/mentorhelp) // Way to override mentorhelp cooldown. - - to_chat(initiator, span_adminhelp("Your ticket was converted to Mentorhelp")) - initiator.mentorhelp(full_text) - initiator.giveadminhelpverb() - - message_admins("[key_name] converted Ticket #[id] from [initiator_key_name] into Mentorhelp") - log_admin("[usr.client] converted Ticket #[id] from [initiator_ckey] into Mentorhelp") - - Close(key_name, TRUE) diff --git a/modular_skyrat/master_files/code/modules/antagonists/cult/cult_items.dm b/modular_skyrat/master_files/code/modules/antagonists/cult/cult_items.dm deleted file mode 100644 index c18d05a0e5f39d..00000000000000 --- a/modular_skyrat/master_files/code/modules/antagonists/cult/cult_items.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/item/clothing/suit/hooded/cultrobes - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor_digi.dmi' diff --git a/modular_skyrat/master_files/code/modules/buildmode/bm_mode.dm b/modular_skyrat/master_files/code/modules/buildmode/bm_mode.dm deleted file mode 100644 index 346e37968c04d5..00000000000000 --- a/modular_skyrat/master_files/code/modules/buildmode/bm_mode.dm +++ /dev/null @@ -1,4 +0,0 @@ -/datum/buildmode_mode - ///this variable serves to separate icons due to modularity. The default path to button icons is /tg/. - // skyrat path - 'modular_skyrat/master_files/icons/misc/buildmode.dmi' - var/button_icon = 'icons/misc/buildmode.dmi' diff --git a/modular_skyrat/master_files/code/modules/cargo/packs/security.dm b/modular_skyrat/master_files/code/modules/cargo/packs/security.dm deleted file mode 100644 index 9746267dbddb30..00000000000000 --- a/modular_skyrat/master_files/code/modules/cargo/packs/security.dm +++ /dev/null @@ -1,26 +0,0 @@ -/datum/supply_pack/security/ammo - special = TRUE - -/datum/supply_pack/security/armor - special = TRUE - -/datum/supply_pack/security/disabler - cost = CARGO_CRATE_VALUE * 5 - -/datum/supply_pack/security/helmets - special = TRUE - -/datum/supply_pack/security/laser - special = TRUE - -/datum/supply_pack/security/securityclothes - special = TRUE - -/datum/supply_pack/security/armory/ballistic - special = TRUE - -/datum/supply_pack/security/armory/energy - special = TRUE - -/datum/supply_pack/security/armory/thermal - special = TRUE diff --git a/modular_skyrat/master_files/code/modules/cargo/packs/vending_restock.dm b/modular_skyrat/master_files/code/modules/cargo/packs/vending_restock.dm deleted file mode 100644 index 5d7a9b95dc047f..00000000000000 --- a/modular_skyrat/master_files/code/modules/cargo/packs/vending_restock.dm +++ /dev/null @@ -1,5 +0,0 @@ -/datum/supply_pack/vending/sectech - special = TRUE - -/datum/supply_pack/vending/wardrobes/security - special = TRUE diff --git a/modular_skyrat/master_files/code/modules/client/preferences.dm b/modular_skyrat/master_files/code/modules/client/preferences.dm deleted file mode 100644 index bc97b467cd988c..00000000000000 --- a/modular_skyrat/master_files/code/modules/client/preferences.dm +++ /dev/null @@ -1,176 +0,0 @@ -#define MAX_MUTANT_ROWS 4 - -/datum/preferences - /// Loadout prefs. Assoc list of [typepaths] to [associated list of item info]. - var/list/loadout_list - /// Associative list, keyed by language typepath, pointing to LANGUAGE_UNDERSTOOD, or LANGUAGE_SPOKEN, for whether we understand or speak the language - var/list/languages = list() - /// List of chosen augmentations. It's an associative list with key name of the slot, pointing to a typepath of an augment define - var/augments = list() - /// List of chosen preferred styles for limb replacements - var/augment_limb_styles = list() - /// Which augment slot we currently have chosen, this is for UI display - var/chosen_augment_slot - /// Has to include all information that extra organs from mutant bodyparts would need. (so far only genitals now) - var/list/features = MANDATORY_FEATURE_LIST - /// A list containing all of our mutant bodparts - var/list/list/mutant_bodyparts = list() - /// A list of all bodymarkings - var/list/list/body_markings = list() - - /// Will the person see accessories not meant for their species to choose from - var/mismatched_customization = FALSE - - /// Allows the user to freely color his body markings and mutant parts. - var/allow_advanced_colors = FALSE - - /// Preference of how the preview should show the character. - var/preview_pref = PREVIEW_PREF_JOB - - var/needs_update = TRUE - - var/arousal_preview = AROUSAL_NONE - - var/datum/species/pref_species - - // BACKGROUND STUFF - var/general_record = "" - var/security_record = "" - var/medical_record = "" - - var/background_info = "" - var/exploitable_info = "" - - /// Whether the user wants to see body size being shown in the preview - var/show_body_size = FALSE - - /// Alternative job titles stored in preferences. Assoc list, ie. alt_job_titles["Scientist"] = "Cytologist" - var/list/alt_job_titles = list() - - // Determines if the player has undergone TGUI preferences migration, if so, this will prevent constant loading. - var/tgui_prefs_migration = TRUE - - /// A photo of the character, visible on close examine - var/headshot = "" - -/datum/preferences/proc/species_updated(species_type) - all_quirks = list() - // Reset cultural stuff - languages[try_get_common_language()] = LANGUAGE_SPOKEN - save_character() - -/datum/preferences/proc/print_bodypart_change_line(key) - var/acc_name = mutant_bodyparts[key][MUTANT_INDEX_NAME] - var/shown_colors = 0 - var/datum/sprite_accessory/SA = GLOB.sprite_accessories[key][acc_name] - var/dat = "" - if(SA.color_src == USE_MATRIXED_COLORS) - shown_colors = 3 - else if (SA.color_src == USE_ONE_COLOR) - shown_colors = 1 - if((allow_advanced_colors || SA.always_color_customizable) && shown_colors) - dat += "<a href='?src=[REF(src)];key=[key];preference=reset_color;task=change_bodypart'>R</a>" - dat += "<a href='?src=[REF(src)];key=[key];preference=change_name;task=change_bodypart'>[acc_name]</a>" - if(allow_advanced_colors || SA.always_color_customizable) - if(shown_colors) - dat += "<BR>" - var/list/colorlist = mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] - for(var/i in 1 to shown_colors) - dat += " <a href='?src=[REF(src)];key=[key];color_index=[i];preference=change_color;task=change_bodypart'><span class='color_holder_box' style='background-color:["#[colorlist[i]]"]'></span></a>" - return dat - -/datum/preferences/proc/reset_colors() - for(var/key in mutant_bodyparts) - var/datum/sprite_accessory/SA = GLOB.sprite_accessories[key][mutant_bodyparts[key][MUTANT_INDEX_NAME]] - if(SA.always_color_customizable) - continue - mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] = SA.get_default_color(features, pref_species) - - for(var/zone in body_markings) - var/list/bml = body_markings[zone] - for(var/key in bml) - var/datum/body_marking/BM = GLOB.body_markings[key] - bml[key] = BM.get_default_color(features, pref_species) - -/// This helper proc gets the current species language holder and does any post-processing that's required in one easy to track place. -/// This proc should *always* be edited or used when modifying or getting the default languages of a player controlled, unrestricted species, to prevent any errant conflicts. -/datum/preferences/proc/get_adjusted_language_holder() - var/datum/species/species = read_preference(/datum/preference/choiced/species) - species = new species() - var/datum/language_holder/language_holder = new species.species_language_holder() - - // Do language post procesing here. Used to house our foreigner functionality. - // I saw little reason to remove this proc, considering it makes code using this a little easier to read. - - return language_holder - -/// Tries to get the topmost language of the language holder. Should be the species' native language, and if it isn't, you should pester a coder. -/datum/preferences/proc/try_get_common_language() - var/datum/language_holder/language_holder = get_adjusted_language_holder() - var/language = language_holder.spoken_languages[1] - return language - -/datum/preferences/proc/validate_species_parts() - var/list/target_bodyparts = pref_species.default_mutant_bodyparts.Copy() - - // Remove all "extra" accessories - for(var/key in mutant_bodyparts) - if(!GLOB.sprite_accessories[key]) // That accessory no longer exists, remove it - mutant_bodyparts -= key - continue - if(!pref_species.default_mutant_bodyparts[key]) - mutant_bodyparts -= key - continue - if(!GLOB.sprite_accessories[key][mutant_bodyparts[key][MUTANT_INDEX_NAME]]) // The individual accessory no longer exists - mutant_bodyparts[key][MUTANT_INDEX_NAME] = pref_species.default_mutant_bodyparts[key] - validate_color_keys_for_part(key) // Validate the color count of each accessory that wasnt removed - - // Add any missing accessories - for(var/key in target_bodyparts) - if(!mutant_bodyparts[key]) - var/datum/sprite_accessory/SA - if(target_bodyparts[key] == ACC_RANDOM) - SA = random_accessory_of_key_for_species(key, pref_species) - else - SA = GLOB.sprite_accessories[key][target_bodyparts[key]] - var/final_list = list() - final_list[MUTANT_INDEX_NAME] = SA.name - final_list[MUTANT_INDEX_COLOR_LIST] = SA.get_default_color(features, pref_species) - mutant_bodyparts[key] = final_list - - if(!allow_advanced_colors) - reset_colors() - -/datum/preferences/proc/validate_color_keys_for_part(key) - var/datum/sprite_accessory/SA = GLOB.sprite_accessories[key][mutant_bodyparts[key][MUTANT_INDEX_NAME]] - var/list/colorlist = mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] - if(SA.color_src == USE_MATRIXED_COLORS && colorlist.len != 3) - mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] = SA.get_default_color(features, pref_species) - else if (SA.color_src == USE_ONE_COLOR && colorlist.len != 1) - mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] = SA.get_default_color(features, pref_species) - -/datum/preferences/proc/CanBuyAugment(datum/augment_item/target_aug, datum/augment_item/current_aug) - // Check biotypes - if(!(pref_species.inherent_biotypes & target_aug.allowed_biotypes)) - return - var/quirk_points = GetQuirkBalance() - var/leverage = 0 - if(current_aug) - leverage += current_aug.cost - if((quirk_points + leverage)>= target_aug.cost) - return TRUE - else - return FALSE - -/// This proc saves the damage currently on `character` (human) and reapplies it after `safe_transfer_prefs()` is applied to the `character`. -/datum/preferences/proc/safe_transfer_prefs_to_with_damage(mob/living/carbon/human/character, icon_updates = TRUE, is_antag = FALSE) - if(!istype(character)) - return FALSE - - var/datum/component/damage_tracker/human/added_tracker = character.AddComponent(/datum/component/damage_tracker/human) - if(!added_tracker) - return FALSE - - safe_transfer_prefs_to(character, icon_updates, is_antag) - qdel(added_tracker) - diff --git a/modular_skyrat/master_files/code/modules/client/preferences/brain.dm b/modular_skyrat/master_files/code/modules/client/preferences/brain.dm deleted file mode 100644 index cdf60e3f59a9d4..00000000000000 --- a/modular_skyrat/master_files/code/modules/client/preferences/brain.dm +++ /dev/null @@ -1,36 +0,0 @@ -/datum/preference/choiced/brain_type - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL - savefile_key = "brain_type" - savefile_identifier = PREFERENCE_CHARACTER - priority = PREFERENCE_PRIORITY_NAMES // Apply after species, cause that's super important. - -/datum/preference/choiced/brain_type/init_possible_values() - return list(ORGAN_PREF_POSI_BRAIN, ORGAN_PREF_MMI_BRAIN, ORGAN_PREF_CIRCUIT_BRAIN) - -/datum/preference/choiced/brain_type/create_default_value() - return ORGAN_PREF_POSI_BRAIN - -/datum/preference/choiced/brain_type/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) - if(!issynthetic(target)) - return - - var/obj/item/organ/internal/brain/new_brain = target.prefs_get_brain_to_use(value) - var/obj/item/organ/internal/brain/old_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN) - - if(!new_brain || new_brain == old_brain.type) - return - - var/datum/mind/keep_me_safe = target.mind - - new_brain = new new_brain() - - new_brain.modular_persistence = old_brain.modular_persistence - old_brain.modular_persistence = null - - new_brain.Insert(target, drop_if_replaced = FALSE) - - // Prefs can be applied to mindless mobs, let's not try to move the non-existent mind back in! - if(!keep_me_safe) - return - - keep_me_safe.transfer_to(target, TRUE) diff --git a/modular_skyrat/master_files/code/modules/client/preferences/clothing.dm b/modular_skyrat/master_files/code/modules/client/preferences/clothing.dm deleted file mode 100644 index f542e867fc6f29..00000000000000 --- a/modular_skyrat/master_files/code/modules/client/preferences/clothing.dm +++ /dev/null @@ -1,84 +0,0 @@ -/datum/preference/choiced/socks/compile_constant_data() - var/list/data = ..() - - data[SUPPLEMENTAL_FEATURE_KEY] = "socks_color" - - return data - -/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 !(TRAIT_NO_UNDERWEAR in species.inherent_traits) - -/datum/preference/choiced/undershirt/compile_constant_data() - var/list/data = ..() - - data[SUPPLEMENTAL_FEATURE_KEY] = "undershirt_color" - - return data - -/datum/preference/choiced/undershirt/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 !(TRAIT_NO_UNDERWEAR in species.inherent_traits) - -/datum/preference/choiced/underwear/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 !(TRAIT_NO_UNDERWEAR in species.inherent_traits) - -/datum/preference/choiced/bra - savefile_key = "bra" - savefile_identifier = PREFERENCE_CHARACTER - main_feature_name = "Bra" - category = PREFERENCE_CATEGORY_CLOTHING - should_generate_icons = TRUE - -/datum/preference/choiced/bra/init_possible_values() - return assoc_to_keys_features(GLOB.bra_list) - -/datum/preference/choiced/bra/icon_for(value) - var/static/icon/body - if (isnull(body)) - body = icon('icons/mob/human/bodyparts_greyscale.dmi', "human_r_arm") - body.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_l_arm"), ICON_OVERLAY) - body.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_r_hand"), ICON_OVERLAY) - body.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_l_hand"), ICON_OVERLAY) - body.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_chest_m"), ICON_OVERLAY) - - var/icon/icon_with_bra = icon(body) - - if (value != "Nude") - var/datum/sprite_accessory/accessory = GLOB.bra_list[value] - icon_with_bra.Blend(icon(accessory.icon, accessory.icon_state), ICON_OVERLAY) - - icon_with_bra.Crop(10, 11, 22, 23) // SKYRAT EDIT CHANGE : ORIGINAL - icon_with_undershirt.Crop(9, 9, 23, 23) - icon_with_bra.Scale(32, 32) - return icon_with_bra - -/datum/preference/choiced/bra/apply_to_human(mob/living/carbon/human/target, value) - target.bra = value - -/datum/preference/choiced/bra/compile_constant_data() - var/list/data = ..() - - data[SUPPLEMENTAL_FEATURE_KEY] = "bra_color" - - return data - -/datum/preference/choiced/bra/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 !(TRAIT_NO_UNDERWEAR in species.inherent_traits) diff --git a/modular_skyrat/master_files/code/modules/clothing/clothing.dm b/modular_skyrat/master_files/code/modules/clothing/clothing.dm deleted file mode 100644 index 881f9d089d4883..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/clothing.dm +++ /dev/null @@ -1,62 +0,0 @@ -GLOBAL_LIST_EMPTY(taur_clothing_icons) - -/obj/item/clothing - blocks_emissive = EMISSIVE_BLOCK_UNIQUE - /// For clothing that does not have body_parts_covered = CHEST /etc but that we would still like to be able to attach an accessory to - var/attachment_slot_override = NONE - -/obj/item/clothing/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", sound_effect = TRUE, attack_dir, armour_penetration = 0) - if(atom_integrity <= 0 && damage_flag == FIRE) // Our clothes don't get destroyed by fire, shut up stack trace >:( - return - - return ..() - -/** - * Proc to generate a taur variation of clothes, with the intent of caching them. - * It is meant for suits and uniforms at the moment, to cut out the bottom half so that - * it doesn't look too out of place. - * - * Arguments: - * * index - The index at which the icon will be stored. Overwrites existing icons if there was one, - * do your checks before calling this proc. - * * icon_to_process (/icon) - The icon we want to run through the process of masking off the bottom part of. - * * icon_state - The icon_state of the icon we're being given, to obtain a proper icon object. - * - * Add a `taur_type` here if you ever want to add different cropping options, for whatever reason. - */ -/proc/generate_taur_clothing(index, icon/icon_to_process, icon_state) - var/icon/taur_clothing_icon = icon("icon" = icon_to_process, "icon_state" = icon_state) - var/taur_icon_state = "taur" // Leaving this here in case we ever want to have different ones - var/icon/taur_cropping_mask = icon("icon" = 'modular_skyrat/master_files/icons/mob/clothing/taur_masking_helpers.dmi', "icon_state" = taur_icon_state) - taur_clothing_icon.Blend(taur_cropping_mask, ICON_MULTIPLY) - taur_clothing_icon = fcopy_rsc(taur_clothing_icon) - GLOB.taur_clothing_icons[index] = taur_clothing_icon - -/** - * Proc that handles returning a mutable appearance that can fit on a taur body without looking too janky! - * - * It will check the cache to see if there was already an icon created for the taur version of that item, - * and will generate one if there was none, and will return the proper icon straight from `GLOB.taur_clothing_icons`, - * to avoid expensive icon operations. - * - * Arguments: - * * icon_state - The icon state that was used to create the icon that will now be processed. - * Used to store the taur icon in the cache. - * * icon_to_process (/icon) - The icon that we want to process. Do note that this is already - * an icon, and NOT an icon file, because we want to be able to operate on icons that have been - * modified to fit female bodytypes, for instance. - * * layer - The layer we want the mutable appearance to be on. - * * female_type - The `female_flags` of the clothing item used to generate the icon that - * we're operating on, if appropriate, to allow the caching of female-fitted uniforms. - * * greyscale_colors - The colors of the icon if it was a greyscale one, to make this GAGS-compatible. - * - * Returns a taur-compatible mutable_appearance! - */ -/proc/wear_taur_version(icon_state, icon/icon_to_process, layer, female_type, greyscale_colors) - RETURN_TYPE(/mutable_appearance) - - var/index = "[icon_state]-[greyscale_colors]-[female_type]" - var/icon/taur_clothing_icon = GLOB.taur_clothing_icons[index] - if(!taur_clothing_icon) //Create standing/laying icons if they don't exist - generate_taur_clothing(index, icon_to_process, icon_state) - return mutable_appearance(GLOB.taur_clothing_icons[index], layer = -layer) diff --git a/modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/suit.dm b/modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/suit.dm deleted file mode 100644 index 4c2c440c200fb9..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/suit.dm +++ /dev/null @@ -1,207 +0,0 @@ - -/** - * NO NEW ICON - * Clothing that do not require a new icon to function correctly, think, big jackets. - */ - -/obj/item/clothing/suit/bio_suit/plaguedoctorsuit - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/toggle/chef - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/jacket/det_suit - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/toggle/lawyer - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/toggle/suspenders - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/toggle/labcoat/paramedic - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/jacket/miljacket - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/jacket - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/costume/wellworn_shirt - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/costume/poncho - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - gets_cropped_on_taurs = FALSE - -/obj/item/clothing/suit/wizrobe - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/hooded/bee_costume - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/chaplainsuit/holidaypriest - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/hazardvest - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/costume/pirate/captain - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/jacket/curator - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -//Chaplain Suits -/obj/item/clothing/suit/hooded/chaplain_hoodie - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/hooded/chaplainsuit - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/chaplainsuit - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON -//End Chaplain Suits - - -/obj/item/clothing/suit/hooded/cultrobes/void - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/hooded/cultrobes/eldritch - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/armor/hos/trenchcoat - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/armor/vest - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/armor/reactive - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/changeling - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/costume/whitedress - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/hooded/ethereal_raincoat - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/costume/snowman - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/costume/hawaiian - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/costume/tmc - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/costume/pg - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/costume/soviet - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/jacket/oversized - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/jacket/fancy - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/space/officer - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/space/changeling - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/hooded/wintercoat - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/toggle/cargo_tech - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/jacket/quartermaster - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/** - * NONE(Squash) - * Clothing that does not have a digitigrade version, and thus will squash legs to fit. - */ - -/obj/item/clothing/suit/armor/changeling - supports_variations_flags = NONE - -/obj/item/clothing/suit/armor/vest/ctf - supports_variations_flags = NONE - -/obj/item/clothing/suit/space/hunter - supports_variations_flags = NONE - -/obj/item/clothing/suit/costume/deckers - supports_variations_flags = NONE - -/obj/item/clothing/suit/costume/yuri - supports_variations_flags = NONE - -/obj/item/clothing/suit/costume/football_armor - supports_variations_flags = NONE - -/obj/item/clothing/suit/hooded/cloak/godslayer - supports_variations_flags = NONE - -/obj/item/clothing/suit/hooded/techpriest - supports_variations_flags = NONE - -/** - * SUBTYPE WITH NEW ICON - * Clothing that has a digitigrade version, but its parent was set to something else earlier in this file or elsewhere entirely. - */ -/obj/item/clothing/suit/wizrobe/magusblue - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - -/obj/item/clothing/suit/wizrobe/magusred - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - -/obj/item/clothing/suit/wizrobe/santa - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - -/obj/item/clothing/suit/apron/overalls - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - -/obj/item/clothing/suit/armor/vest/capcarapace/captains_formal - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - -/obj/item/clothing/suit/armor/vest/warden - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - -/obj/item/clothing/suit/armor/vest/leather - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - -/obj/item/clothing/suit/armor/vest/marine/security - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - -/obj/item/clothing/suit/armor/vest/marine/engineer - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - -/obj/item/clothing/suit/armor/riot - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - -//Chaplain Suits -//TG neglected to sort between legged and robed, so we'll have to just manually set each one -/obj/item/clothing/suit/chaplainsuit/armor/studentuni - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION //Prevents a few glaring missing pixels - -/obj/item/clothing/suit/chaplainsuit/armor/clock - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - -/obj/item/clothing/suit/chaplainsuit/armor/templar - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - -/obj/item/clothing/suit/chaplainsuit/armor/ancient - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - -/obj/item/clothing/suit/chaplainsuit/shrinehand - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION //Prevents a few glaring missing pixels -//End Chaplain Suits diff --git a/modular_skyrat/master_files/code/modules/clothing/glasses/nerve_staple.dm b/modular_skyrat/master_files/code/modules/clothing/glasses/nerve_staple.dm deleted file mode 100644 index 757e9f6cac4b5c..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/glasses/nerve_staple.dm +++ /dev/null @@ -1,25 +0,0 @@ -/obj/item/clothing/glasses/nerve_staple - name = "\proper a nerve staple" - desc = "A horrific looking device that is stapled into your face" - icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi' - icon_state = "nerve_staple" - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi' - worn_icon_state = "nerve_staple" - resistance_flags = FIRE_PROOF | ACID_PROOF - clothing_traits = list(TRAIT_PACIFISM) - -/obj/item/clothing/glasses/nerve_staple/Initialize(mapload) - . = ..() - if (prob(20)) - worn_icon_state = "[initial(worn_icon_state)]_r" - -/obj/item/clothing/glasses/nerve_staple/equipped(mob/user, slot) - . = ..() - if (slot & ITEM_SLOT_EYES) - ADD_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT) - else - REMOVE_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT) - -/obj/item/clothing/glasses/nerve_staple/dropped(mob/user) - . = ..() - REMOVE_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT) diff --git a/modular_skyrat/master_files/code/modules/clothing/head/akula_official.dm b/modular_skyrat/master_files/code/modules/clothing/head/akula_official.dm deleted file mode 100644 index b763c0fa076d58..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/head/akula_official.dm +++ /dev/null @@ -1,20 +0,0 @@ -/obj/item/clothing/head/hats/caphat/azulean - icon_state = "oldbloodcap" - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/akula_official.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/akula_official.dmi' - -/obj/item/clothing/head/hats/caphat/azulean/old_blood - name = "\improper Oldblood's royal cap" - desc = "A peaked cap typically seen on nobles and high-rankers of the Agurkrral Royal Navy, this service hat has a long history in the Old Principalities. \ - Comfortable and lightweight, the purpose of this cap has gradually shifted to becoming yet another method to flex rank. \n\n\ - Threaded gold is often seen in the campaign cords attached to it, and the emblems on them grow more and more complex based on ranking; \ - and of course, importance to the King." - icon_state = "oldbloodcap" - -/obj/item/clothing/head/hats/caphat/azulean/upstart - name = "\improper Upstart's noble cap" - desc = "A peaked cap widely seen across the New Principalities. \n\ - Combining ideas from both the NRI and the Old Principalities, this cloneleather cap was made to be both inexpensive and easier to maintain than the elaborate headpieces worn by the older nobility. \ - Border princes of all make and model are known to put their own personal emblems on these instead of any coherent ranking system, \ - and the cap features a wider brim in order to shield Azulean eyes from the alien suns they intend to grasp." - icon_state = "upstartcap" diff --git a/modular_skyrat/master_files/code/modules/clothing/outfits/ert.dm b/modular_skyrat/master_files/code/modules/clothing/outfits/ert.dm deleted file mode 100644 index 4831913eac2698..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/outfits/ert.dm +++ /dev/null @@ -1,45 +0,0 @@ -/* -* SKYRAT MODULAR OUTFITS FILE -* PUT ANY NEW ERT OUTFITS HERE -*/ - -/datum/outfit/centcom/asset_protection - name = "Asset Protection" - - uniform = /obj/item/clothing/under/rank/centcom/commander - back = /obj/item/mod/control/pre_equipped/apocryphal - shoes = /obj/item/clothing/shoes/combat/swat - gloves = /obj/item/clothing/gloves/tackler/combat/insulated - mask = /obj/item/clothing/mask/gas/sechailer/swat - glasses = /obj/item/clothing/glasses/hud/toggle/thermal - l_pocket = /obj/item/flashlight - r_pocket = /obj/item/tank/internals/emergency_oxygen/double - belt = /obj/item/storage/belt/security/full - l_hand = /obj/item/gun/energy/pulse/carbine/loyalpin // if this is still bulky make it not bulky and storable on belt/back/bag/exosuit - id = /obj/item/card/id/advanced/centcom/ert - ears = /obj/item/radio/headset/headset_cent/alt - - skillchips = list(/obj/item/skillchip/disk_verifier) - - backpack_contents = list(/obj/item/storage/box/survival/engineer = 1,\ - /obj/item/storage/medkit/regular = 1,\ - /obj/item/storage/box/handcuffs = 1,\ - /obj/item/crowbar/power = 1, // this is their "all access" pass lmao - ) - -/datum/outfit/centcom/asset_protection/post_equip(mob/living/carbon/human/person, visualsOnly = FALSE) - if(visualsOnly) - return - - var/obj/item/radio/Radio = person.ears - Radio.set_frequency(FREQ_CENTCOM) - Radio.freqlock = TRUE - var/obj/item/card/id/ID = person.wear_id - ID.assignment = "Asset Protection" - ID.registered_name = person.real_name - ID.update_label() - ..() - -/datum/outfit/centcom/asset_protection/leader - name = "Asset Protection Officer" - head = /obj/item/clothing/head/helmet/space/beret diff --git a/modular_skyrat/master_files/code/modules/clothing/shoes/boots.dm b/modular_skyrat/master_files/code/modules/clothing/shoes/boots.dm deleted file mode 100644 index 5a78f6bdb20675..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/shoes/boots.dm +++ /dev/null @@ -1,3 +0,0 @@ -/obj/item/clothing/shoes/workboots/mining - icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' // To keep the old version before #8911 - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' // To keep the old version before #8911 diff --git a/modular_skyrat/master_files/code/modules/clothing/shoes/wheelys.dm b/modular_skyrat/master_files/code/modules/clothing/shoes/wheelys.dm deleted file mode 100644 index 45eb738f0b813f..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/shoes/wheelys.dm +++ /dev/null @@ -1,4 +0,0 @@ -/obj/item/clothing/shoes/wheelys - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/large-worn-icons/64x64/feet_digi.dmi' - worn_icon_vox = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/feet_64.dmi' - worn_icon_teshari = 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/feet_64.dmi' diff --git a/modular_skyrat/master_files/code/modules/clothing/suits/_suits.dm b/modular_skyrat/master_files/code/modules/clothing/suits/_suits.dm deleted file mode 100644 index 724bd73168308c..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/suits/_suits.dm +++ /dev/null @@ -1,26 +0,0 @@ -/obj/item/clothing/suit - /// Does this object get cropped when worn by a taur on their suit or uniform slot? - var/gets_cropped_on_taurs = TRUE - -//Define worn_icon_digi below here for suits so we don't have to make whole new .dm files for each -/obj/item/clothing/suit/armor - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor_digi.dmi' - -/obj/item/clothing/suit/bio_suit - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/bio_digi.dmi' - -/obj/item/clothing/suit/wizrobe - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/wizard_digi.dmi' - gets_cropped_on_taurs = FALSE - -/obj/item/clothing/suit/toggle/labcoat - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/labcoat_digi.dmi' - -/obj/item/clothing/suit/space - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi' - -/obj/item/clothing/suit/chaplainsuit - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/chaplain_digi.dmi' - -/obj/item/clothing/suit/hooded/chaplainsuit - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/chaplain_digi.dmi' diff --git a/modular_skyrat/master_files/code/modules/clothing/suits/labcoat.dm b/modular_skyrat/master_files/code/modules/clothing/suits/labcoat.dm deleted file mode 100644 index f55c26d3645206..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/suits/labcoat.dm +++ /dev/null @@ -1,56 +0,0 @@ -/obj/item/clothing/suit/toggle/labcoat/skyrat - name = "SR LABCOAT SUIT DEBUG" - desc = "REPORT THIS IF FOUND" - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/labcoat.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/labcoat.dmi' - icon_state = null //Keeps this from showing up under the chameleon hat - -/obj/item/clothing/suit/toggle/labcoat/skyrat/rd - name = "research directors labcoat" - desc = "A Nanotrasen standard labcoat for certified Research Directors. It has an extra plastic-latex lining on the outside for more protection from chemical and viral hazards." - icon_state = "labcoat_rd" - body_parts_covered = CHEST|ARMS|LEGS - armor_type = /datum/armor/skyrat_rd - -/datum/armor/skyrat_rd - melee = 5 - bio = 80 - fire = 80 - acid = 70 - -/obj/item/clothing/suit/toggle/labcoat/skyrat/highvis - name = "high vis labcoat" - desc = "A high visibility vest for emergency responders, intended to draw attention away from the blood." - icon_state = "labcoat_highvis" - blood_overlay_type = "armor" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/toggle/labcoat/skyrat/highvis/worn_overlays(mutable_appearance/standing, isinhands, icon_file) - . = ..() - if(!isinhands) - . += emissive_appearance(icon_file, "[icon_state]-emissive", src, alpha = src.alpha) - -/obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown //Intended to keep patients modest while still allowing for surgeries - name = "hospital gown" - desc = "A complicated drapery with an assortment of velcros and strings, designed to keep a patient modest during medical stay and surgeries." - icon_state = "hgown" - toggle_noun = "drapes" - body_parts_covered = NONE //Allows surgeries despite wearing it; hiding genitals is handled in /datum/sprite_accessory/genital/is_hidden() (Only place it'd work sadly) - armor_type = /datum/armor/none - equip_delay_other = 8 - -/obj/item/clothing/suit/toggle/labcoat/roboticist //Overwrite the TG Roboticist labcoat to Black and Red (not the Interdyne labcoat though) - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/labcoat.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/labcoat.dmi' - icon_state = "labcoat_robo_sr" - -/obj/item/clothing/suit/toggle/labcoat/medical //Renamed version of the Genetics labcoat for more generic medical purposes; just a subtype of /labcoat/ for the TG files - name = "medical labcoat" - desc = "A suit that protects against minor chemical spills. Has a blue stripe on the shoulder." - icon_state = "labcoat_gen" - -/obj/item/clothing/suit/toggle/labcoat/Initialize(mapload) - . = ..() - allowed += list( - /obj/item/handheld_soulcatcher, - ) diff --git a/modular_skyrat/master_files/code/modules/clothing/suits/wintercoats.dm b/modular_skyrat/master_files/code/modules/clothing/suits/wintercoats.dm deleted file mode 100644 index 3809733a3a5c3c..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/suits/wintercoats.dm +++ /dev/null @@ -1,70 +0,0 @@ -//File for modular wintercoats that aren't bundled with other stuff -//If the coat is part of a module (i.e. the Blueshield coat) then make sure it's subtyped under wintercoat/skyrat, but don't put it in this file! - -//Coat Basetype (The Assistant's Formal Coat) -/obj/item/clothing/suit/hooded/wintercoat/skyrat - name = "assistant's formal winter coat" - desc = "A dark gray winter coat with bronze-gold detailing, and a zipper in the shape of a toolbox." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/wintercoat.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/wintercoat.dmi' - icon_state = "coataformal" - hoodtype = /obj/item/clothing/head/hooded/winterhood/skyrat - -//Hood Basetype (The Assistant's Formal Coat Hood) -/obj/item/clothing/head/hooded/winterhood/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/winterhood.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/winterhood.dmi' - icon_state = "hood_aformal" - -//Bartender -/obj/item/clothing/suit/hooded/wintercoat/skyrat/bartender - name = "bartender's winter coat" - desc = "A heavy jacket made from wool originally stolen from the chef's goat. This new design is made to fit the classic suit-and-tie aesthetic, but without the hypothermia." - icon_state = "coatbar" - allowed = list( - /obj/item/reagent_containers/cup/glass/shaker, - /obj/item/reagent_containers/cup/glass/flask, - /obj/item/reagent_containers/cup/rag - ) - hoodtype = /obj/item/clothing/head/hooded/winterhood/skyrat/bartender - -/obj/item/clothing/head/hooded/winterhood/skyrat/bartender - icon_state = "hood_bar" - -//Ratvar-themed -/obj/item/clothing/suit/hooded/wintercoat/skyrat/ratvar - name = "ratvarian winter coat" - desc = "A brass-plated button up winter coat. Instead of a zipper tab, it has a brass cog with a tiny red gemstone inset." - icon_state = "coatratvar" - hoodtype = /obj/item/clothing/head/hooded/winterhood/skyrat/ratvar - -/obj/item/clothing/head/hooded/winterhood/skyrat/ratvar - icon_state = "hood_ratvar" - -//Nar'sie-themed -/obj/item/clothing/suit/hooded/wintercoat/skyrat/narsie - name = "narsian winter coat" - desc = "A somber button-up in dark tones of grey entropy and a wicked crimson zipper. It's covered in intricate runes and symbols, and the zipper tab looks like a single drop of blood." - icon_state = "coatnarsie" - hoodtype = /obj/item/clothing/head/hooded/winterhood/skyrat/narsie - -/obj/item/clothing/head/hooded/winterhood/skyrat/narsie - desc = "A black winter hood full of whispering secrets that only she shall ever know." - icon_state = "hood_narsie" - -//Christmas -/obj/item/clothing/suit/hooded/wintercoat/skyrat/christmas - name = "christmas winter coat" - desc = "A festive Christmas coat, warm and lined with white, soft fabric. The zipper tab is a small Candy Cane!" - icon_state = "coatchristmas" - hoodtype = /obj/item/clothing/head/hooded/winterhood/skyrat/christmas - -/obj/item/clothing/head/hooded/winterhood/skyrat/christmas - icon_state = "hood_christmas" - -/obj/item/clothing/suit/hooded/wintercoat/skyrat/christmas/green - icon_state = "coatchristmas_green" - hoodtype = /obj/item/clothing/head/hooded/winterhood/skyrat/christmas/green - -/obj/item/clothing/head/hooded/winterhood/skyrat/christmas/green - icon_state = "hood_christmas_green" diff --git a/modular_skyrat/master_files/code/modules/clothing/under/akula_official.dm b/modular_skyrat/master_files/code/modules/clothing/under/akula_official.dm deleted file mode 100644 index faaba2f476b2e1..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/under/akula_official.dm +++ /dev/null @@ -1,35 +0,0 @@ -/obj/item/clothing/under/rank/azulean - icon_state = "oldblood" - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/centcom.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/centcom.dmi' - female_sprite_flags = NO_FEMALE_UNIFORM - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/under/rank/azulean/old_blood - name = "\improper Agurkrral Oldblood's royal regalia" - desc = "A service dress uniform of the Old Principalities of Agurkrral, a fashion shared by the majority of the nobility. \ - These outfits are known to normally be accessorized with gold trims and other rare metals, \ - constructed and treated specially for use in underwater environments; the dwellings of most of the crown's old guard. \n\n\ - Actual fish-leather is often used for the subtle pattern of scaling, and to ensure proper hydrodynamics while swimming. \ - Due to being constructed for comfort and flash rather than practicality, the technology used in Shoredresses to hydrate the wearer could not be implemented; \ - only a mount for a Shoredress's helm." - icon_state = "oldblood" - -/obj/item/clothing/under/rank/azulean/old_blood/skirt - name = "\improper Agurkrral Oldblood's royal regalia" - icon_state = "oldblood_skirt" - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - -/obj/item/clothing/under/rank/azulean/upstart - name = "\improper Agurkrral Upstart's noble getup" - desc = "Patterned off the dress uniforms of the Old Principalities, this sort of style belongs to the border princes of the New Principalities. \ - These outfits rebuke tradition to incorporate the use of imported leather, using reinforced clasps instead of shiny golden buttons. \n\n\ - Few decorations are normally seen in these clothing, owing to the tendency of their wearers to 'gallivant.' \ - Due to being constructed for a degree of expendability, the technology used in Shoredresses to hydrate the wearer is \ - an extremely rare sight in these outfits; only the mount for a Shoredress's helm." - icon_state = "upstart" - -/obj/item/clothing/under/rank/azulean/upstart/skirt - name = "\improper Agurkrral Upstart's noble getup" - icon_state = "upstart_skirt" - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY diff --git a/modular_skyrat/master_files/code/modules/clothing/under/color.dm b/modular_skyrat/master_files/code/modules/clothing/under/color.dm deleted file mode 100644 index 094dddaabd3585..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/under/color.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/item/clothing/under/color - greyscale_config_worn_monkey = /datum/greyscale_config/jumpsuit/worn/monkey - -/obj/item/clothing/under/color/rainbow - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/color_digi.dmi' - -/** - * Random jumpsuit is the preferred style of the wearer if loaded as an outfit. - * This is cleaner than creating a ../skirt variant as skirts are precached into SSwardrobe - * and that causes runtimes for runtimes for this class as it qdels on Initialize. - */ -/obj/item/clothing/under/color/random/proc/get_random_variant() - var/mob/living/carbon/human/wearer = loc - if(istype(wearer) && wearer.jumpsuit_style == PREF_SKIRT) - return get_random_jumpskirt() - - return get_random_jumpsuit() diff --git a/modular_skyrat/master_files/code/modules/clothing/under/costume.dm b/modular_skyrat/master_files/code/modules/clothing/under/costume.dm deleted file mode 100644 index 9e5567e4496b3a..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/under/costume.dm +++ /dev/null @@ -1,127 +0,0 @@ -/obj/item/clothing/under/costume - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/costume_digi.dmi' - -/obj/item/clothing/under/costume/russian_officer - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/security_digi.dmi' - -/obj/item/clothing/under/costume/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/costume.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/costume.dmi' - can_adjust = FALSE - -//My least favorite file. Just... try to keep it sorted. And nothing over the top - -/* -* UNSORTED -*/ -/obj/item/clothing/under/costume/skyrat/cavalry - name = "cavalry uniform" - desc = "Dedicate yourself to something better. To loyalty, honour, for it only dies when everyone abandons it." - icon_state = "cavalry" //specifically an 1890s US Army Cavalry Uniform - -/obj/item/clothing/under/costume/deckers/alt //not even going to bother re-pathing this one because its such a unique case of 'TGs item has something but this alt doesnt' - name = "deckers maskless outfit" - desc = "A decker jumpsuit with neon blue coloring." - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/costume.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/costume.dmi' - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/costume_digi.dmi' - icon_state = "decking_jumpsuit" - can_adjust = FALSE - -/obj/item/clothing/under/costume/skyrat/bathrobe - name = "bathrobe" - desc = "A warm fluffy bathrobe, perfect for relaxing after finally getting clean." - icon = 'modular_skyrat/modules/GAGS/icons/suit/suit.dmi' - worn_icon = 'modular_skyrat/modules/GAGS/icons/suit/suit.dmi' - worn_icon_teshari = 'modular_skyrat/modules/GAGS/icons/suit/suit_teshari.dmi' - icon_state = "robes" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - greyscale_colors = "#ffffff" - greyscale_config = /datum/greyscale_config/bathrobe - greyscale_config_worn = /datum/greyscale_config/bathrobe/worn - greyscale_config_worn_teshari = /datum/greyscale_config/bathrobe/worn/teshari - greyscale_config_worn_better_vox = /datum/greyscale_config/bathrobe/worn/newvox - greyscale_config_worn_vox = /datum/greyscale_config/bathrobe/worn/oldvox - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - greyscale_colors = "#434d7a" //THATS RIGHT, FUCK YOU! THE BATHROBE CAN BE RECOLORED! - flags_1 = IS_PLAYER_COLORABLE_1 - -/* -* LUNAR AND JAPANESE CLOTHES -*/ - -/obj/item/clothing/under/costume/skyrat/qipao - name = "qipao" - desc = "A qipao, traditionally worn in ancient Earth China by women during social events and lunar new years." - icon_state = "qipao" - body_parts_covered = CHEST|GROIN|LEGS - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - greyscale_colors = "#2b2b2b" - greyscale_config = /datum/greyscale_config/qipao - greyscale_config_worn = /datum/greyscale_config/qipao/worn - greyscale_config_worn_digi = /datum/greyscale_config/qipao/worn/digi - flags_1 = IS_PLAYER_COLORABLE_1 - gets_cropped_on_taurs = FALSE - -/obj/item/clothing/under/costume/skyrat/cheongsam - name = "cheongsam" - desc = "A cheongsam, traditionally worn in ancient Earth China by men during social events and lunar new years." - icon_state = "cheongsam" - body_parts_covered = CHEST|GROIN|LEGS - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - greyscale_colors = "#2b2b2b" - greyscale_config = /datum/greyscale_config/cheongsam - greyscale_config_worn = /datum/greyscale_config/cheongsam/worn - greyscale_config_worn_digi = /datum/greyscale_config/cheongsam/worn/digi - flags_1 = IS_PLAYER_COLORABLE_1 - gets_cropped_on_taurs = FALSE - -/obj/item/clothing/under/costume/skyrat/yukata - name = "yukata" - desc = "A traditional ancient Earth Japanese yukata, typically worn in casual settings." - icon_state = "yukata" - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - greyscale_colors = "#2b2b2b" - greyscale_config = /datum/greyscale_config/yukata - greyscale_config_worn = /datum/greyscale_config/yukata/worn - greyscale_config_worn_digi = /datum/greyscale_config/yukata/worn/digi - flags_1 = IS_PLAYER_COLORABLE_1 - gets_cropped_on_taurs = FALSE - -/obj/item/clothing/under/costume/skyrat/kamishimo - name = "kamishimo" - desc = "A traditional ancient Earth Japanese Kamishimo." - icon_state = "kamishimo" - -/obj/item/clothing/under/costume/skyrat/kimono - name = "fancy kimono" - desc = "A traditional ancient Earth Japanese Kimono. Longer and fancier than a yukata." - icon_state = "kimono" - body_parts_covered = CHEST|GROIN|ARMS - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - -/* -* CHRISTMAS CLOTHES -*/ - -/obj/item/clothing/under/costume/skyrat/christmas - name = "christmas costume" - desc = "Can you believe it guys? Christmas. Just a lightyear away!" //Lightyear is a measure of distance I hate it being used for this joke :( - icon_state = "christmas" - -/obj/item/clothing/under/costume/skyrat/christmas/green - name = "green christmas costume" - desc = "4:00, wallow in self-pity. 4:30, stare into the abyss. 5:00, solve world hunger, tell no one. 5:30, jazzercize; 6:30, dinner with me. I can't cancel that again. 7:00, wrestle with my self-loathing. I'm booked. Of course, if I bump the loathing to 9, I could still be done in time to lay in bed, stare at the ceiling and slip slowly into madness." - icon_state = "christmas_green" - -/obj/item/clothing/under/costume/skyrat/christmas/croptop - name = "sexy christmas costume" - desc = "About 550 years since the release of Mariah Carey's \"All I Want For Christmas is You\", society has yet to properly recover from its repercussions. Some still keep a gun as their christmas mantlepiece, just in case she's heard singing on their rooftop late in the night..." - icon_state = "christmas_crop" - body_parts_covered = CHEST|GROIN - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - -/obj/item/clothing/under/costume/skyrat/christmas/croptop/green - name = "sexy green christmas costume" - desc = "Stupid. Ugly. Out of date. If I can't find something nice to wear I'm not going." - icon_state = "christmas_crop_green" diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/cargo.dm b/modular_skyrat/master_files/code/modules/clothing/under/jobs/cargo.dm deleted file mode 100644 index 8fe26c3b34260f..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/cargo.dm +++ /dev/null @@ -1,116 +0,0 @@ -/obj/item/clothing/under/rank/cargo - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/cargo_digi.dmi' // Anything that was in the cargo.dmi, should be in the cargo_digi.dmi - -/obj/item/clothing/under/rank/cargo/tech/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/cargo.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/cargo.dmi' - -/obj/item/clothing/under/rank/cargo/qm/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/cargo.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/cargo.dmi' - -// Add a /obj/item/clothing/under/rank/cargo/miner/skyrat if you add miner uniforms - -/* -* CARGO TECH -*/ - -/obj/item/clothing/under/rank/cargo/tech/skyrat/utility - name = "supply utility uniform" - desc = "A utility uniform worn by employees of the Supply department." - icon_state = "util_cargo" - can_adjust = FALSE - -/obj/item/clothing/under/rank/cargo/tech/skyrat/utility/syndicate - armor_type = /datum/armor/clothing_under/utility_syndicate - has_sensor = NO_SENSORS - -/obj/item/clothing/under/rank/cargo/tech/skyrat/long - name = "cargo technician's long jumpsuit" - desc = "For crate-pushers who'd rather protect their legs than show them off." - icon_state = "cargo_long" - alt_covers_chest = FALSE - -/obj/item/clothing/under/rank/cargo/tech/skyrat/gorka - name = "supply gorka" - desc = "A rugged, utilitarian gorka worn by the Supply department." - icon_state = "gorka_cargo" - can_adjust = FALSE - -/obj/item/clothing/under/rank/cargo/tech/skyrat/turtleneck - name = "supply turtleneck" - desc = "A snug turtleneck sweater worn by the Supply department.." - icon_state = "turtleneck_cargo" - -/obj/item/clothing/under/rank/cargo/tech/skyrat/turtleneck/skirt - name = "supply skirtleneck" - desc = "A snug turtleneck sweater worn by Supply, this time with a skirt attached!" - icon_state = "skirtleneck" - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - -/obj/item/clothing/under/rank/cargo/tech/skyrat/evil - name = "black cargo uniform" - desc = "A standard cargo uniform with a more... Venerable touch to it." - icon_state = "qmsynd" - can_adjust = FALSE - -/obj/item/clothing/under/rank/cargo/tech/skyrat/casualman - name = "cargo technician casualwear" - desc = "A pair of stylish black jeans and a regular sweater for the relaxed technician." - icon_state = "cargotechjean" - can_adjust = FALSE - -/* -* QUARTERMASTER -*/ - -/obj/item/clothing/under/rank/cargo/qm/skyrat/gorka - name = "quartermaster's gorka" - desc = "A rugged, utilitarian gorka with silver markings. Unlike the regular employees', this one is lined with silk on the inside." - icon_state = "gorka_qm" - can_adjust = FALSE - -/obj/item/clothing/under/rank/cargo/qm/skyrat/turtleneck - name = "quartermaster's turtleneck" - desc = "A snug turtleneck sweater worn by the Quartermaster, characterized by the expensive-looking pair of suit pants." - icon_state = "turtleneck_qm" - -/obj/item/clothing/under/rank/cargo/qm/skyrat/turtleneck/skirt - name = "quartermaster's skirtleneck" - desc = "A snug turtleneck sweater worn by the Quartermaster, as shown by the elegant double-lining of its silk skirt." - icon_state = "skirtleneckQM" - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - -/obj/item/clothing/under/rank/cargo/qm/skyrat/syndie - name = "deck officer's jumpsuit" - desc = "A dark suit with a classic cargo vest. For the ultimate master of all things paper." - icon_state = "qmsynd" - has_sensor = NO_SENSORS - armor_type = /datum/armor/clothing_under/skyrat_syndie - can_adjust = FALSE - -/datum/armor/clothing_under/skyrat_syndie - melee = 10 - fire = 50 - acid = 40 - -/obj/item/clothing/under/rank/cargo/qm/skyrat/formal - name = "quartermaster's formal jumpsuit" - desc = "A western-like alternate uniform for the old fashioned QM." - icon_state = "supply_chief" - can_adjust = FALSE - -/obj/item/clothing/under/rank/cargo/qm/skyrat/formal/skirt - name = "quartermaster's formal jumpskirt" - desc = "A western-like alternate uniform for the old fashioned QM. Skirt included!" - icon_state = "supply_chief_skirt" - can_adjust = FALSE - body_parts_covered = CHEST|GROIN|ARMS - dying_key = DYE_REGISTRY_JUMPSKIRT - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/under/rank/cargo/qm/skyrat/casual - name = "quartermaster's casualwear" - desc = "A brown jacket with matching trousers for the relaxed Quartermaster." - icon_state = "qmc" diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/centcom.dm b/modular_skyrat/master_files/code/modules/clothing/under/jobs/centcom.dm deleted file mode 100644 index 05aa24276d8a5c..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/centcom.dm +++ /dev/null @@ -1,35 +0,0 @@ -//This file is for any station-aligned or neutral factions, not JUST Nanotrasen. -//Try to keep them all a subtype of centcom/skyrat, for file sorting and balance - all faction representatives should have the same/similarly armored uniforms - -/obj/item/clothing/under/rank/centcom - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/centcom_digi.dmi' // Anything that was in the rnd.dmi, should be in the rnd_digi.dmi - -/obj/item/clothing/under/rank/centcom/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/centcom.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/centcom.dmi' - -/* -* NANOTRASEN -*/ -//Check modular_skyrat\modules\nanotrasen_naval_command\code\clothing.dm for more of these! (Or, currently, ALL of these.) - -/* -* LOPLAND -*/ -/obj/item/clothing/under/rank/centcom/skyrat/lopland - name = "\improper Lopland corporate uniform" - desc = "A sleek jumpsuit worn by Lopland corporate. Its surprisingly well padded." - icon_state = "lopland_shirt" - worn_icon_state = "lopland_shirt" - -/obj/item/clothing/under/rank/centcom/skyrat/lopland/instructor - name = "\improper Lopland instructor's uniform" - desc = "A over-the-top, militaristic jumpsuit worn by Lopland-certified instructors, with a big Lopland logo slapped on the back. The amount of pockets could make a space marine cry." - icon_state = "lopland_tac" - worn_icon_state = "lopland_tac" - - -/* -* MISC -*/ -// pizza and other misc ERTs in this file too? diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/civilian/civilian.dm b/modular_skyrat/master_files/code/modules/clothing/under/jobs/civilian/civilian.dm deleted file mode 100644 index b3bb1e22fbc9de..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/civilian/civilian.dm +++ /dev/null @@ -1,50 +0,0 @@ -/obj/item/clothing/under/rank/civilian - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/civilian_digi.dmi' //Anything that was in TG's civilian.dmi, should be in our civilian_digi.dmi - -/obj/item/clothing/under/rank/civilian/lawyer // Lawyers' suits are in TG's suits.dmi - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/suits_digi.dmi' - -/obj/item/clothing/under/rank/civilian/lawyer/bluesuit // EXCEPT THIS ONE. - greyscale_config_worn_digi = /datum/greyscale_config/buttondown_slacks/worn/digi - -/obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/civilian.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/civilian.dmi' - can_adjust = FALSE //Just gonna set it to default for ease - -//TG's files separate this into Civilian, Clown/Mime, and Curator. We wont have as many, so all Service goes into this file. -//DO NOT ADD A /obj/item/clothing/under/rank/civilian/lawyer/skyrat. USE /obj/item/clothing/under/suit/skyrat FOR MODULAR SUITS (civilian/suits.dm). - -/* -* HEAD OF PERSONNEL -*/ - -/obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat/imperial //Rank pins of the Grand Moff - name = "head of personnel's naval jumpsuit" - desc = "A pale green naval suit and a rank badge denoting the Personnel Officer. Target, maximum firepower." - icon_state = "imphop" - supports_variations_flags = NONE - -/obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat/parade - name = "head of personnel's male formal uniform" - desc = "A luxurious uniform for the head of personnel, woven in a deep blue. On the lapel is a small pin in the shape of a corgi's head." - icon_state = "hop_parade_male" - -/obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat/parade/female - name = "head of personnel's female formal uniform" - icon_state = "hop_parade_female" - -/obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat/turtleneck - name = "head of personnel's turtleneck" - desc = "A soft blue turtleneck and black khakis worn by Executives who prefer a bit more comfort over style." - icon_state = "hopturtle" - can_adjust = TRUE - alt_covers_chest = TRUE - -/obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat/turtleneck/skirt - name = "head of personnel's turtleneck skirt" - desc = "A soft blue turtleneck and black skirt worn by Executives who prefer a bit more comfort over style." - icon_state = "hopturtle_skirt" - body_parts_covered = CHEST|GROIN|ARMS - dying_key = DYE_REGISTRY_JUMPSKIRT - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/civilian/suits.dm b/modular_skyrat/master_files/code/modules/clothing/under/jobs/civilian/suits.dm deleted file mode 100644 index 57ea575e1c1a46..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/civilian/suits.dm +++ /dev/null @@ -1,139 +0,0 @@ - -/obj/item/clothing/under/suit - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/suits_digi.dmi' //Anything that was in TG's suits.dmi, should be in our suits_digi.dmi - -/obj/item/clothing/under/suit/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/suits.dmi' - -//DO NOT ADD A /obj/item/clothing/under/rank/civilian/lawyer/skyrat. USE /obj/item/clothing/under/suit/skyrat FOR MODULAR SUITS - -/* -* RECOLORABLE -*/ -/obj/item/clothing/under/suit/skyrat/recolorable - name = "recolorable suit" - desc = "A semi-formal suit, clean-cut with a matching vest and slacks." - icon_state = "recolorable_suit" - can_adjust = FALSE - greyscale_config = /datum/greyscale_config/recolorable_suit - greyscale_config_worn = /datum/greyscale_config/recolorable_suit/worn - greyscale_config_worn_digi = /datum/greyscale_config/recolorable_suit/worn/digi - greyscale_colors = "#a99780#ffffff#6e2727#ffc500" - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/under/suit/skyrat/recolorable/skirt - name = "recolorable suitskirt" - desc = "A semi-formal suitskirt, clean-cut with a matching vest and skirt." - icon_state = "recolorable_suitskirt" - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - gets_cropped_on_taurs = FALSE - body_parts_covered = CHEST|GROIN|LEGS - greyscale_config = /datum/greyscale_config/recolorable_suitskirt - greyscale_config_worn = /datum/greyscale_config/recolorable_suitskirt/worn - greyscale_config_worn_digi = /datum/greyscale_config/recolorable_suitskirt/worn/digi - -/* -* SUITS -*/ -/obj/item/clothing/under/suit/skyrat/pencil - name = "black pencilskirt" - desc = "A clean white shirt with a tight-fitting black pencilskirt." - icon_state = "black_pencil" - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - gets_cropped_on_taurs = FALSE - -/obj/item/clothing/under/suit/skyrat/pencil/black_really - name = "executive pencilskirt" - desc = "A sleek suit with a tight-fitting black pencilskirt." - icon_state = "really_black_pencil" - -/obj/item/clothing/under/suit/skyrat/pencil/charcoal - name = "charcoal pencilskirt" - desc = "A clean white shirt with a tight-fitting charcoal pencilskirt." - icon_state = "charcoal_pencil" - -/obj/item/clothing/under/suit/skyrat/pencil/navy - name = "navy pencilskirt" - desc = "A clean white shirt with a tight-fitting navy-blue pencilskirt." - icon_state = "navy_pencil" - -/obj/item/clothing/under/suit/skyrat/pencil/burgandy - name = "burgandy pencilskirt" - desc = "A clean white shirt with a tight-fitting burgandy-red pencilskirt." - icon_state = "burgandy_pencil" - -/obj/item/clothing/under/suit/skyrat/pencil/checkered - name = "checkered pencilskirt" - desc = "A clean white shirt with a tight-fitting grey checkered pencilskirt." - icon_state = "checkered_pencil" - -/obj/item/clothing/under/suit/skyrat/pencil/tan - name = "tan pencilskirt" - desc = "A clean white shirt with a tight-fitting tan pencilskirt." - icon_state = "tan_pencil" - -/obj/item/clothing/under/suit/skyrat/pencil/green - name = "green pencilskirt" - desc = "A clean white shirt with a tight-fitting green pencilskirt." - icon_state = "green_pencil" - -/obj/item/clothing/under/suit/skyrat/scarface - name = "cuban suit" - desc = "A yayo coloured silk suit with a crimson shirt. You just know how to hide, how to lie. Me, I don't have that problem. Me, I always tell the truth. Even when I lie." - icon_state = "scarface" - -/obj/item/clothing/under/suit/skyrat/black_really_collared - name = "wide-collared executive suit" - desc = "A formal black suit with the collar worn wide, intended for the station's finest." - icon_state = "really_black_suit_collar" - -/obj/item/clothing/under/suit/skyrat/black_really_collared/skirt - name = "wide-collared executive suitskirt" - desc = "A formal black suit with the collar worn wide, intended for the station's finest." - icon_state = "really_black_suit_skirt_collar" - body_parts_covered = CHEST|GROIN|ARMS - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY|FEMALE_UNIFORM_NO_BREASTS - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - gets_cropped_on_taurs = FALSE - -/obj/item/clothing/under/suit/skyrat/inferno - name = "inferno suit" - desc = "Stylish enough to impress the devil." - icon_state = "lucifer" - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - obj_flags = UNIQUE_RENAME - unique_reskin = list( - "Pride" = "lucifer", - "Wrath" = "justice", - "Gluttony" = "malina", - "Envy" = "zdara", - "Vanity" = "cereberus", - ) - -/obj/item/clothing/under/suit/skyrat/inferno/skirt - name = "inferno suitskirt" - icon_state = "modeus" - obj_flags = UNIQUE_RENAME - unique_reskin = list( - "Lust" = "modeus", - "Sloth" = "pande", - ) - -/obj/item/clothing/under/suit/skyrat/inferno/beeze - name = "designer inferno suit" - desc = "A fancy tail-coated suit with a fluffy bow emblazoned on the chest, complete with an NT pin." - icon_state = "beeze" - obj_flags = null - unique_reskin = null - -/obj/item/clothing/under/suit/skyrat/helltaker - name = "red shirt with white pants" - desc = "No time. Busy gathering girls." - icon_state = "helltaker" - -/obj/item/clothing/under/suit/skyrat/helltaker/skirt - name = "red shirt with white skirt" - desc = "No time. Busy gathering boys." - icon_state = "helltakerskirt" diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/command.dm b/modular_skyrat/master_files/code/modules/clothing/under/jobs/command.dm deleted file mode 100644 index 81742893dd769a..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/command.dm +++ /dev/null @@ -1,161 +0,0 @@ -/obj/item/clothing/under/rank/captain - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/command_digi.dmi' //Anything that was in TG's captain.dmi, should be in our command_digi.dmi - //NOTE - TG uses "captain.dmi"; because we have a few non-captain items going in here for ease of access, this will just be "command.dmi" - -/obj/item/clothing/under/rank/captain/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/command.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/command.dmi' - -/* -* CAPTAIN -*/ - -/obj/item/clothing/under/rank/captain/skyrat/kilt - name = "captain's kilt" - desc = "A midnight blue kilt, padded with nano-kevlar and adorned with gold and a tartan sash." - icon_state = "capkilt" - -/obj/item/clothing/under/rank/captain/skyrat/imperial - name = "captain's naval jumpsuit" - desc = "A white naval suit adorned with golden epaulets and a rank badge denoting a Captain. There are two ways to destroy a person, kill him, or ruin his reputation." - //Rank pins of the Grand Admiral, not a Captain. - icon_state = "impcap" - can_adjust = FALSE - -//Donor item for Gandalf - all donors have access -/obj/item/clothing/under/rank/captain/skyrat/black - name = "captain's black suit" - desc = "A very sleek, albeit outdated, naval captain's uniform for those who think they're commanding a battleship." - icon_state = "captainblacksuit" - can_adjust = FALSE - -/* -* BLUESHIELD -*/ -//Why is this in command.dm? Simple: Centcom.dmi will already be packed with CC/NTNavy/AD/LL/SOL/FTU - all of them more event-based clothes, while this will appear -//on-station often. - -/obj/item/clothing/under/rank/blueshield - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/command.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/command.dmi' - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/command_digi.dmi' - name = "blueshield's suit" - desc = "A classic bodyguard's suit, with custom-fitted Blueshield-Blue cuffs and a Nanotrasen insignia over one of the pockets." - icon_state = "blueshield" - strip_delay = 50 - armor_type = /datum/armor/clothing_under/rank_blueshield - sensor_mode = SENSOR_COORDS - random_sensor = FALSE - alt_covers_chest = TRUE - -/datum/armor/clothing_under/rank_blueshield - melee = 10 - bullet = 5 - laser = 5 - energy = 10 - bomb = 10 - fire = 50 - acid = 50 - -/obj/item/clothing/under/rank/blueshield/skirt - name = "blueshield's suitskirt" - desc = "A classic bodyguard's suitskirt, with custom-fitted Blueshield-Blue cuffs and a Nanotrasen insignia over one of the pockets." - icon_state = "blueshieldskirt" - body_parts_covered = CHEST|GROIN|ARMS - dying_key = DYE_REGISTRY_JUMPSKIRT - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - gets_cropped_on_taurs = FALSE - -/obj/item/clothing/under/rank/blueshield/turtleneck - name = "blueshield's turtleneck" - desc = "A tactical jumper fit for only the best of bodyguards, with plenty of tactical pockets for your tactical needs." - icon_state = "bs_turtleneck" - -/obj/item/clothing/under/rank/blueshield/turtleneck/skirt - name = "blueshield's skirtleneck" - desc = "A tactical jumper fit for only the best of bodyguards - instead of tactical pockets, this one has a tactical lack of leg protection." - icon_state = "bs_skirtleneck" - body_parts_covered = CHEST|GROIN|ARMS - dying_key = DYE_REGISTRY_JUMPSKIRT - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - gets_cropped_on_taurs = FALSE - -/* -* NT CONSULTANT -*/ -//See Blueshield note - tl;dr, this role is a station role, while Centcom.dmi is more event roles - -/obj/item/clothing/under/rank/nanotrasen_consultant - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/command.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/command.dmi' - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/command_digi.dmi' - desc = "It's a green jumpsuit with some gold markings denoting the rank of \"Nanotrasen Consultant\"." - name = "nanotrasen consultant's jumpsuit" - icon_state = "nt_consultant" - sensor_mode = SENSOR_COORDS - random_sensor = FALSE - -/obj/item/clothing/under/rank/nanotrasen_consultant/skirt - name = "nanotrasen consultant's jumpskirt" - desc = "It's a green jumpskirt with some gold markings denoting the rank of \"Nanotrasen Consultant\"." - icon_state = "nt_consultant_skirt" - body_parts_covered = CHEST|GROIN|ARMS - dying_key = DYE_REGISTRY_JUMPSKIRT - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - gets_cropped_on_taurs = FALSE - -/* -* UNASSIGNED (Any head of staff) -*/ - -/obj/item/clothing/under/rank/captain/skyrat/utility - name = "command utility uniform" - desc = "A utility uniform worn by Station Command." - icon_state = "util_com" - can_adjust = FALSE - -/obj/item/clothing/under/rank/captain/skyrat/utility/syndicate - armor_type = /datum/armor/clothing_under/utility_syndicate - has_sensor = NO_SENSORS - -/obj/item/clothing/under/rank/captain/skyrat/imperial/generic - desc = "A grey naval suit with a rank badge denoting an Officer. Doesn't protect against blaster fire." - name = "grey officer's naval jumpsuit" - icon_state = "impcom" - -/obj/item/clothing/under/rank/captain/skyrat/imperial/generic/pants - desc = "A grey naval suit over black pants, with a rank badge denoting an Officer. Doesn't protect against blaster fire." - name = "officer's naval jumpsuit" - icon_state = "impcom_pants" - -/obj/item/clothing/under/rank/captain/skyrat/imperial/generic/grey - desc = "A dark grey naval suit with a rank badge denoting an Officer. Doesn't protect against blaster fire." - name = "dark grey officer's naval jumpsuit" - icon_state = "impcom_dark" - -/obj/item/clothing/under/rank/captain/skyrat/imperial/generic/red - desc = "A red naval suit with a rank badge denoting an Officer. Doesn't protect against blaster fire." - name = "red officer's naval jumpsuit" - icon_state = "impcom_red" - -/* -* MISC -*/ - -/obj/item/clothing/under/rank/captain/skyrat/pilot - name = "shuttle pilot's jumpsuit" - desc = "It's a blue jumpsuit with some silver markings denoting the wearer as a certified pilot." - icon_state = "pilot" - can_adjust = FALSE - -/obj/item/clothing/under/rank/captain/skyrat/pilot/skirt - name = "shuttle pilot's jumpskirt" - desc = "It's a blue jumpskirt with some silver markings denoting the wearer as a certified pilot." - icon_state = "pilot_skirt" - body_parts_covered = CHEST|GROIN|ARMS - dying_key = DYE_REGISTRY_JUMPSKIRT - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/engineering.dm b/modular_skyrat/master_files/code/modules/clothing/under/jobs/engineering.dm deleted file mode 100644 index 39bb100eeb76b6..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/engineering.dm +++ /dev/null @@ -1,83 +0,0 @@ -/obj/item/clothing/under/rank/engineering - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/engineering_digi.dmi' // Anything that was in the engineering.dmi, should be in the engineering_digi.dmi - -/obj/item/clothing/under/rank/engineering/engineer/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/engineering.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/engineering.dmi' - -/obj/item/clothing/under/rank/engineering/chief_engineer/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/engineering.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/engineering.dmi' - -/obj/item/clothing/under/rank/engineering/atmospheric_technician/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/engineering.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/engineering.dmi' - -/* -* ENGINEER -*/ - -/obj/item/clothing/under/rank/engineering/engineer/skyrat/utility - name = "engineering utility uniform" - desc = "A utility uniform worn by Engineering personnel." - icon_state = "util_eng" - can_adjust = FALSE - -/obj/item/clothing/under/rank/engineering/engineer/skyrat/utility/syndicate - armor_type = /datum/armor/clothing_under/utility_syndicate - has_sensor = NO_SENSORS - -/obj/item/clothing/under/rank/engineering/engineer/skyrat/trouser - name = "engineering trousers" - desc = "An engineering-orange set of trousers. Their waistband proudly displays an 'anti-radiation' symbol, though the effectiveness of radiation-proof-pants-only is still up for debate." - icon_state = "workpants_orange" - body_parts_covered = GROIN|LEGS - can_adjust = FALSE - female_sprite_flags = FEMALE_UNIFORM_NO_BREASTS - -/obj/item/clothing/under/rank/engineering/engineer/skyrat/hazard_chem - name = "chemical hazard jumpsuit" - desc = "A high visibility jumpsuit with additional protection from gas and chemical hazards, at the cost of less fire-proofing." - icon_state = "hazard_green" - armor_type = /datum/armor/clothing_under/skyrat_hazard_chem - resistance_flags = ACID_PROOF - alt_covers_chest = TRUE - -/datum/armor/clothing_under/skyrat_hazard_chem - fire = 20 - acid = 60 - -/obj/item/clothing/under/rank/engineering/engineer/skyrat/hazard_chem/emt - name = "chemical hazard EMT jumpsuit" - desc = "An EMT jumpsuit used for first responders in situations involving gas and/or chemical hazards. The label reads, \"Not designed for prolonged exposure\"." - icon_state = "hazard_white" - armor_type = /datum/armor/clothing_under/hazard_chem_emt - -/* -* CHIEF ENGINEER -*/ - -/datum/armor/clothing_under/hazard_chem_emt - fire = 10 - acid = 50 - -/obj/item/clothing/under/rank/engineering/chief_engineer/skyrat/imperial - desc = "A gray naval suit with a lead-lined vest and a rank badge denoting the Officer of the Internal Engineering Division. Doesn't come with a death machine building guide." - name = "chief engineer's naval jumpsuit" - icon_state = "impce" - -/* -* ATMOS TECH -*/ -/datum/armor/clothing_under/atmos_adv - bio = 40 - fire = 70 - acid = 70 - -/obj/item/clothing/under/rank/engineering/atmospheric_technician/skyrat/utility/advanced - name = "advanced atmospherics uniform" - desc = "A jumpsuit worn by advanced atmospherics crews." - icon_state = "util_atmos" - armor_type = /datum/armor/clothing_under/atmos_adv - icon_state = "util_eng" - can_adjust = FALSE diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/medical.dm b/modular_skyrat/master_files/code/modules/clothing/under/jobs/medical.dm deleted file mode 100644 index 7c9d8668aacac2..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/medical.dm +++ /dev/null @@ -1,98 +0,0 @@ -/obj/item/clothing/under/rank/medical - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/medical_digi.dmi' // Anything that was in the medical.dmi, should be in the medical_digi.dmi - -/obj/item/clothing/under/rank/medical/doctor/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/medical.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/medical.dmi' - - -/obj/item/clothing/under/rank/medical/scrubs/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/medical.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/medical.dmi' - icon_state = "scrubswhite" // Because for some reason TG's scrubs dont have an icon on their basetype - desc = "It's made of a special fiber that provides minor protection against biohazards. This one seems to be the original Scrub." - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_MONKEY_VARIATION - -/obj/item/clothing/under/rank/medical/chemist/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/medical.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/medical.dmi' - -// Add a 'medical/virologist/skyrat' here if you make Virologist uniforms - -/obj/item/clothing/under/rank/medical/paramedic/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/medical.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/medical.dmi' - -/obj/item/clothing/under/rank/medical/chief_medical_officer/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/medical.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/medical.dmi' - -/* -* DOCTOR -*/ - -/obj/item/clothing/under/rank/medical/doctor/skyrat/utility - name = "medical utility uniform" - desc = "A utility uniform worn by Medical doctors." - icon_state = "util_med" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_MONKEY_VARIATION - -/obj/item/clothing/under/rank/medical/doctor/skyrat/utility/syndicate - armor_type = /datum/armor/clothing_under/utility_syndicate - has_sensor = NO_SENSORS - -/* -* SCRUBS -*/ - -/obj/item/clothing/under/rank/medical/scrubs/skyrat/red - desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in a deep red." - icon_state = "scrubsred" - -/obj/item/clothing/under/rank/medical/scrubs/skyrat/white - desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in a cream white colour." - icon_state = "scrubswhite" - -/* -* CHEMIST -*/ - -/obj/item/clothing/under/rank/medical/chemist/skyrat/formal - name = "chemist's formal jumpsuit" - desc = "A white shirt with left-aligned buttons and an orange stripe, lined with protection against chemical spills." - icon_state = "pharmacologist" - -/obj/item/clothing/under/rank/medical/chemist/skyrat/formal/skirt - name = "chemist's formal jumpskirt" - icon_state = "pharmacologist_skirt" - body_parts_covered = CHEST|GROIN|ARMS - dying_key = DYE_REGISTRY_JUMPSKIRT - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/* -* PARAMEDIC -*/ - -/obj/item/clothing/under/rank/medical/paramedic/skyrat/light - name = "light paramedic uniform" - desc = "A brighter variant of the typical Paramedic uniform made with special fibers that provide minor protection against biohazards, this one has the reflective strips removed." - icon_state = "paramedic_light" - -/obj/item/clothing/under/rank/medical/paramedic/skyrat/light/skirt - name = "light paramedic skirt" - desc = "A brighter variant of the typical Paramedic uniform made with special fibers that provide minor protection against biohazards, this one has had it's legs replaced with a skirt." - icon_state = "paramedic_light_skirt" - body_parts_covered = CHEST|GROIN|ARMS - dying_key = DYE_REGISTRY_JUMPSKIRT - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/* -* CHIEF MEDICAL OFFICER -*/ - -/obj/item/clothing/under/rank/medical/chief_medical_officer/skyrat/imperial //Rank pins of the Brigadier General - desc = "A teal, sterile naval suit with a rank badge denoting the Officer of the Medical Corps. Doesn't protect against blaster fire." - name = "chief medical officer's naval jumpsuit" - icon_state = "impcmo" diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/rnd.dm b/modular_skyrat/master_files/code/modules/clothing/under/jobs/rnd.dm deleted file mode 100644 index b73588e25d2df7..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/rnd.dm +++ /dev/null @@ -1,101 +0,0 @@ -/obj/item/clothing/under/rank/rnd - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/rnd_digi.dmi' // Anything that was in the rnd.dmi, should be in the rnd_digi.dmi - -/obj/item/clothing/under/rank/rnd/scientist/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/rnd.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/rnd.dmi' - -/obj/item/clothing/under/rank/rnd/roboticist/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/rnd.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/rnd.dmi' - -/obj/item/clothing/under/rank/rnd/research_director/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/rnd.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/rnd.dmi' - -// Add a 'rnd/geneticist/skyrat' if you make Geneticist uniforms - -/* -* SCIENTIST -*/ - -/obj/item/clothing/under/rank/rnd/scientist/skyrat/utility - name = "science utility uniform" - desc = "A utility uniform worn by NT-certified Science staff." - icon_state = "util_sci" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_MONKEY_VARIATION - can_adjust = FALSE - -/obj/item/clothing/under/rank/rnd/scientist/skyrat/utility/syndicate - desc = "A utility uniform worn by Science staff." - armor_type = /datum/armor/clothing_under/utility_syndicate - has_sensor = NO_SENSORS - -/obj/item/clothing/under/rank/rnd/scientist/skyrat/hlscience - name = "science team uniform" - desc = "A simple semi-formal uniform consisting of a grayish-blue shirt and off-white slacks, paired with a ridiculous, but mandatory, tie." - icon_state = "hl_scientist" - can_adjust = FALSE - -/* -* ROBOTICIST -*/ - -/obj/item/clothing/under/rank/rnd/roboticist/skyrat/sleek - name = "sleek roboticst jumpsuit" - desc = "A sleek version of the roboticist uniform, complete with amber sci-fi stripes." - icon_state = "robosleek" - can_adjust = FALSE - -/* -* RESEARCH DIRECTOR -*/ - -/obj/item/clothing/under/rank/rnd/research_director/skyrat/jumpsuit - name = "research director's jumpsuit" - desc = "A shiny nano-weave uniform for those holding the title of \"Research Director\". Its fabric provides minor protection from biological contaminants." - icon_state = "director_jumpsuit" - can_adjust = TRUE - alt_covers_chest = TRUE - -/obj/item/clothing/under/rank/rnd/research_director/skyrat/jumpsuit/skirt // I know this seems wrong, but its for consistency sake; its the skirt version OF the jumpsuit - name = "research director's jumpskirt" - icon_state = "director_jumpskirt" - body_parts_covered = CHEST|GROIN|ARMS - dying_key = DYE_REGISTRY_JUMPSKIRT - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/under/rank/rnd/research_director/skyrat/imperial //Rank pins of the Major General - desc = "An off-white naval suit over black pants, with a rank badge denoting the Officer of the Internal Science Division. It's a peaceful life." - name = "research director's naval jumpsuit" - icon_state = "imprd" - -/* -* OVERRIDES -* ORION TODO: look over these when TG finishes their science resprites (any day now...) -*/ - -/obj/item/clothing/under/rank/rnd/scientist - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/rnd.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/rnd.dmi' - icon_state = "science_new" - -/obj/item/clothing/under/rank/rnd/scientist/skirt - icon_state = "sciwhite_skirt_new" - -/obj/item/clothing/under/rank/rnd/roboticist - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/rnd.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/rnd.dmi' - icon_state = "robotics_new" - -/obj/item/clothing/under/rank/rnd/roboticist/skirt - icon_state = "robotics_skirt_new" - -/obj/item/clothing/under/rank/rnd/geneticist - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/rnd.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/rnd.dmi' - icon_state = "genetics_new" - -/obj/item/clothing/under/rank/rnd/geneticist/skirt - icon_state = "geneticswhite_skirt_new" diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/security.dm b/modular_skyrat/master_files/code/modules/clothing/under/jobs/security.dm deleted file mode 100644 index 51af7f0675ed02..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/security.dm +++ /dev/null @@ -1,64 +0,0 @@ -/obj/item/clothing/under/rank/security - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/security_digi.dmi' // Anything that was in the security.dmi, should be in the security_digi.dmi - -/obj/item/clothing/under/rank/security/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi' - -/obj/item/clothing/under/rank/security/head_of_security/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi' - -//DEBATE MOVING *ALL* SECURITY STUFF HERE? Even overrides, at least as a like, sub-file? - -/* -* SECURITY OFFICER -*/ - -/obj/item/clothing/under/rank/security/skyrat/utility - name = "security utility uniform" - desc = "A utility uniform worn by Lopland-certified Security officers." - icon_state = "util_sec" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_MONKEY_VARIATION - can_adjust = FALSE - -/obj/item/clothing/under/rank/security/skyrat/utility/redsec - desc = "A utility uniform worn by trained Security officers." - icon_state = "util_sec_old" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - can_adjust = FALSE - -/obj/item/clothing/under/rank/security/skyrat/utility/redsec/syndicate - armor_type = /datum/armor/clothing_under/redsec_syndicate - has_sensor = NO_SENSORS - -/obj/item/clothing/under/rank/security/peacekeeper/trousers - name = "security trousers" - desc = "Some Peacekeeper-blue combat trousers. Probably should pair it with a vest for safety." - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi' - icon_state = "workpants_blue" - body_parts_covered = GROIN|LEGS - can_adjust = FALSE - female_sprite_flags = FEMALE_UNIFORM_NO_BREASTS - -/* -* HEAD OF SECURITY -*/ - -/datum/armor/clothing_under/redsec_syndicate - melee = 10 - fire = 50 - acid = 40 - -/obj/item/clothing/under/rank/security/head_of_security/skyrat/imperial //Rank pins of the Grand General - desc = "A tar black naval suit and a rank badge denoting the Officer of The Internal Security Division. Be careful your underlings don't bump their head on a door." - name = "head of security's naval jumpsuit" - icon_state = "imphos" - -/* -* PRISONER -*/ - -/obj/item/clothing/under/rank/prisoner - greyscale_config_worn_monkey = /datum/greyscale_config/jumpsuit/prison/worn/monkey diff --git a/modular_skyrat/master_files/code/modules/clothing/under/misc.dm b/modular_skyrat/master_files/code/modules/clothing/under/misc.dm deleted file mode 100644 index 2f7b03ddbbff99..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/under/misc.dm +++ /dev/null @@ -1,64 +0,0 @@ -//DO NOT ADD TO THIS FILE UNLESS THE SITUATION IS DIRE -//MISC FILES = UNSORTED FILES. EVEN TG HATES THIS ONE. - -/obj/item/clothing/under/misc - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/misc_digi.dmi' - -/obj/item/clothing/under/misc/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/misc.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/misc.dmi' - can_adjust = FALSE - -/* - Do we even bother sorting these? We don't want to use the file, it's for emergencies and in-betweens. - Just... don't lose your stuff. -*/ - -/obj/item/clothing/under/misc/skyrat/gear_harness - name = "gear harness" - desc = "A simple, inconspicuous harness replacement for a jumpsuit." - icon_state = "gear_harness" - body_parts_covered = NONE - attachment_slot_override = CHEST - can_adjust = FALSE - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/under/misc/skyrat/gear_harness/eve - name = "collection of leaves" - desc = "Three leaves, designed to cover the nipples and genetalia of the wearer. A foe so proud will first the weaker seek." - icon_state = "eve" - body_parts_covered = CHEST|GROIN - -/obj/item/clothing/under/misc/skyrat/gear_harness/adam - name = "leaf" - desc = "A single leaf, designed to cover the genitalia of the wearer. Seek not temptation." - icon_state = "adam" - body_parts_covered = GROIN - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - -/obj/item/clothing/under/misc/skyrat/taccas - name = "tacticasual uniform" - desc = "A white wifebeater on top of some cargo pants. For when you need to carry various beers." - icon_state = "tac_s" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - -/obj/item/clothing/under/misc/skyrat/mechanic - name = "mechanic's overalls" - desc = "An old-fashioned pair of brown overalls, along with assorted pockets and belt-loops." - icon_state = "mechanic" - -/obj/item/clothing/under/misc/skyrat/utility - name = "general utility uniform" - desc = "A utility uniform worn by civilian-ranked crew." - icon_state = "utility" - body_parts_covered = CHEST|ARMS|GROIN|LEGS - can_adjust = FALSE - -/obj/item/clothing/under/misc/skyrat/utility/syndicate - armor_type = /datum/armor/clothing_under/utility_syndicate - has_sensor = NO_SENSORS - -/datum/armor/clothing_under/utility_syndicate - melee = 10 - fire = 50 - acid = 40 diff --git a/modular_skyrat/master_files/code/modules/clothing/under/syndicate.dm b/modular_skyrat/master_files/code/modules/clothing/under/syndicate.dm deleted file mode 100644 index f73c29ceb30aa9..00000000000000 --- a/modular_skyrat/master_files/code/modules/clothing/under/syndicate.dm +++ /dev/null @@ -1,136 +0,0 @@ -#define RESKIN_CHARCOAL "Charcoal" -#define RESKIN_NT "NT Blue" -#define RESKIN_SYNDIE "Syndicate Red" - -/obj/item/clothing/under/syndicate - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/syndicate_digi.dmi' // Anything that was in the syndicate.dmi, should be in the syndicate_digi.dmi - -/obj/item/clothing/under/syndicate/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/syndicate.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/syndicate.dmi' - //These are pre-set for ease and reference, as syndie under items SHOULDNT have sensors and should have similar stats; also its better to start with adjust = false - has_sensor = NO_SENSORS - can_adjust = FALSE - -//Related files: -// modular_skyrat\modules\Syndie_edits\code\syndie_edits.dm (this has the Overalls and non-Uniforms) -// modular_skyrat\modules\novaya_ert\code\uniform.dm (NRI uniform(s)) - -/* -* TACTICOOL -*/ - -//This is an overwrite, not a fully new item, but still fits best here. - -/obj/item/clothing/under/syndicate/tacticool //Overwrites the 'fake' one. Zero armor, sensors, and default blue. More Balanced to make station-available. - name = "tacticool turtleneck" - desc = "A snug turtleneck, in fabulous Nanotrasen-blue. Just looking at it makes you want to buy a NT-certifed coffee, go into the office, and -work-." - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/syndicate.dmi' //Since its an overwrite it needs new icon linking. Woe. - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/syndicate.dmi' - icon_state = "tactifool_blue" - inhand_icon_state = "b_suit" - can_adjust = TRUE - has_sensor = HAS_SENSORS - armor_type = /datum/armor/clothing_under/none - unique_reskin = list( - RESKIN_NT = "tactifool_blue", - RESKIN_CHARCOAL = "tactifool" - ) - resistance_flags = FLAMMABLE - -/obj/item/clothing/under/syndicate/tacticool/reskin_obj(mob/M) - ..() - if(current_skin && current_skin == RESKIN_CHARCOAL) - desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-." //Default decription of the normal tacticool - inhand_icon_state = "bl_suit" //May as well, while we're updating it - -/obj/item/clothing/under/syndicate/tacticool/skirt //Overwrites the 'fake' one. Zero armor, sensors, and default blue. More Balanced to make station-available. - name = "tacticool skirtleneck" - desc = "A snug skirtleneck, in fabulous Nanotrasen-blue. Just looking at it makes you want to buy a NT-certifed coffee, go into the office, and -work-." - icon_state = "tactifool_blue_skirt" - armor_type = /datum/armor/clothing_under/none - body_parts_covered = CHEST|GROIN|ARMS - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - dying_key = DYE_REGISTRY_JUMPSKIRT - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - unique_reskin = list( - RESKIN_NT = "tactifool_blue_skirt", - RESKIN_CHARCOAL = "tactifool_skirt" - ) - -/obj/item/clothing/under/syndicate/bloodred/sleepytime/sensors //Halloween-only - has_sensor = HAS_SENSORS - armor_type = /datum/armor/clothing_under/none - -/obj/item/clothing/under/syndicate/skyrat/baseball - name = "syndicate baseball tee" - desc = "Aaand the Syndicate Snakes are up to bat, ready for one of their signature nuclear home-runs! Lets show these corpos a good time." //NT pitches their plasma/bluespace(something) - icon_state = "syndicate_baseball" - -/* -* TACTICAL (Real) -*/ -//The red alts, for BLATANTLY syndicate stuff (Like DS2) -// (Multiple non-syndicate things use the base tactical turtleneck, they cant have it red nor reskinnable. OUR version, however, can be.) -/obj/item/clothing/under/syndicate/skyrat/tactical - name = "tactical turtleneck" - desc = "A snug syndicate-red turtleneck with charcoal-black cargo pants. Good luck arguing allegiance with this on." - icon_state = "syndicate_red" - inhand_icon_state = "r_suit" - can_adjust = TRUE - alt_covers_chest = TRUE - armor_type = /datum/armor/clothing_under/syndicate - unique_reskin = list( - RESKIN_SYNDIE = "syndicate_red", - RESKIN_CHARCOAL = "syndicate" - ) - -/obj/item/clothing/under/syndicate/skyrat/tactical/reskin_obj(mob/M) - ..() - if(current_skin && current_skin == RESKIN_CHARCOAL) - desc = "A non-descript and slightly suspicious looking turtleneck with digital camouflage cargo pants." //(Digital camo? Brown? What?) - inhand_icon_state = "bl_suit" - -/obj/item/clothing/under/syndicate/skyrat/tactical/skirt - name = "tactical skirtleneck" - desc = "A snug syndicate-red skirtleneck with a charcoal-black skirt. Good luck arguing allegiance with this on." - icon_state = "syndicate_red_skirt" - inhand_icon_state = "r_suit" - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - dying_key = DYE_REGISTRY_JUMPSKIRT - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - unique_reskin = list( - RESKIN_SYNDIE = "syndicate_red_skirt", - RESKIN_CHARCOAL = "syndicate_skirt" - ) - -/obj/item/clothing/under/syndicate/skyrat/tactical/skirt/reskin_obj(mob/M) - ..() - if(current_skin && current_skin == RESKIN_CHARCOAL) - desc = "A non-descript and slightly suspicious looking skirtleneck." - inhand_icon_state = "bl_suit" - -/* -* ENCLAVE -*/ -/obj/item/clothing/under/syndicate/skyrat/enclave - name = "neo-American sergeant uniform" - desc = "Throughout the stars, rumors of mad scientists and angry drill sergeants run rampant; of creatures in armor black as night, being led by men or women wearing this uniform. They share one thing: a deep, natonalistic zeal of the dream of America." - icon_state = "enclave" - can_adjust = TRUE - armor_type = /datum/armor/clothing_under/none - -/obj/item/clothing/under/syndicate/skyrat/enclave/officer - name = "neo-American officer uniform" - icon_state = "enclaveo" - -/obj/item/clothing/under/syndicate/skyrat/enclave/real - armor_type = /datum/armor/clothing_under/syndicate - -/obj/item/clothing/under/syndicate/skyrat/enclave/real/officer - name = "neo-American officer uniform" - icon_state = "enclaveo" - -#undef RESKIN_CHARCOAL -#undef RESKIN_NT -#undef RESKIN_SYNDIE diff --git a/modular_skyrat/master_files/code/modules/mining/equipment/explorer_gear.dm b/modular_skyrat/master_files/code/modules/mining/equipment/explorer_gear.dm deleted file mode 100644 index dbb431e48a75ae..00000000000000 --- a/modular_skyrat/master_files/code/modules/mining/equipment/explorer_gear.dm +++ /dev/null @@ -1,11 +0,0 @@ -/obj/item/clothing/suit/hooded/cloak/drake - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor_digi.dmi' - -/obj/item/clothing/suit/hooded/cloak/goliath - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor_digi.dmi' - cold_protection = CHEST|GROIN|ARMS - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - -/obj/item/clothing/head/hooded/cloakhood/goliath - cold_protection = CHEST|GROIN|ARMS - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT diff --git a/modular_skyrat/master_files/code/modules/mob/dead/new_player/preferences_setup.dm b/modular_skyrat/master_files/code/modules/mob/dead/new_player/preferences_setup.dm deleted file mode 100644 index c2b04c99382274..00000000000000 --- a/modular_skyrat/master_files/code/modules/mob/dead/new_player/preferences_setup.dm +++ /dev/null @@ -1,52 +0,0 @@ -/datum/preferences/proc/render_new_preview_appearance(mob/living/carbon/human/dummy/mannequin) - var/datum/job/preview_job = get_highest_priority_job() - mannequin.dna.mutant_bodyparts = list() - - // Set up the dummy for its photoshoot - apply_prefs_to(mannequin, TRUE, visuals_only = TRUE) - - switch(preview_pref) - if(PREVIEW_PREF_JOB) - mannequin.underwear_visibility = NONE - if(preview_job) // SKYRAT EDIT CHANGE - // Silicons only need a very basic preview since there is no customization for them. - if (istype(preview_job, /datum/job/ai)) - return image('icons/mob/silicon/ai.dmi', icon_state = resolve_ai_icon(read_preference(/datum/preference/choiced/ai_core_display)), dir = SOUTH) - if (istype(preview_job, /datum/job/cyborg)) - return image('icons/mob/silicon/robots.dmi', icon_state = "robot", dir = SOUTH) - mannequin.job = preview_job.title - mannequin.equip_outfit_and_loadout(preview_job.outfit, src, TRUE) - if(PREVIEW_PREF_LOADOUT) - mannequin.underwear_visibility = NONE - var/default_outfit = new /datum/outfit() - mannequin.equip_outfit_and_loadout(default_outfit, src, TRUE) - if(PREVIEW_PREF_UNDERWEAR) - mannequin.underwear_visibility = NONE - if(PREVIEW_PREF_NAKED) - mannequin.underwear_visibility = UNDERWEAR_HIDE_UNDIES | UNDERWEAR_HIDE_SHIRT | UNDERWEAR_HIDE_SOCKS | UNDERWEAR_HIDE_BRA - for(var/organ_key in list(ORGAN_SLOT_VAGINA, ORGAN_SLOT_PENIS, ORGAN_SLOT_BREASTS, ORGAN_SLOT_ANUS)) - var/obj/item/organ/external/genital/gent = mannequin.get_organ_slot(organ_key) - if(gent) - gent.aroused = AROUSAL_NONE - gent.update_sprite_suffix() - if(PREVIEW_PREF_NAKED_AROUSED) - mannequin.underwear_visibility = UNDERWEAR_HIDE_UNDIES | UNDERWEAR_HIDE_SHIRT | UNDERWEAR_HIDE_SOCKS | UNDERWEAR_HIDE_BRA - for(var/organ_key in list(ORGAN_SLOT_VAGINA, ORGAN_SLOT_PENIS, ORGAN_SLOT_BREASTS, ORGAN_SLOT_ANUS)) - var/obj/item/organ/external/genital/gent = mannequin.get_organ_slot(organ_key) - if(gent) - gent.aroused = AROUSAL_FULL - gent.update_sprite_suffix() - - // Apply visual quirks - // Yes we do it every time because it needs to be done after job gear - if(SSquirks?.initialized) - // And yes we need to clean all the quirk datums every time - mannequin.cleanse_quirk_datums() - for(var/quirk_name as anything in all_quirks) - var/datum/quirk/quirk_type = SSquirks.quirks[quirk_name] - if(!(initial(quirk_type.quirk_flags) & QUIRK_CHANGES_APPEARANCE)) - continue - mannequin.add_quirk(quirk_type, parent) - - mannequin.update_body() - return mannequin.appearance diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/human.dm b/modular_skyrat/master_files/code/modules/mob/living/carbon/human.dm deleted file mode 100644 index c7a8a5dcf324fc..00000000000000 --- a/modular_skyrat/master_files/code/modules/mob/living/carbon/human.dm +++ /dev/null @@ -1,22 +0,0 @@ -/mob/living/carbon/human/ZImpactDamage(turf/target_turf, levels) - if(stat != CONSCIOUS) // you're not The One - return ..() - // Cat-people always land on their feet - if(isfelinid(src) || istajaran(src)) - // Check to make sure legs are working - var/obj/item/bodypart/left_leg = get_bodypart(BODY_ZONE_L_LEG) - var/obj/item/bodypart/right_leg = get_bodypart(BODY_ZONE_R_LEG) - if(left_leg || right_leg || !left_leg.bodypart_disabled || !right_leg.bodypart_disabled) - Stun(0.5 SECONDS) // You can't move and you can't use items - // Nailed it! - visible_message(span_notice("[src] lands elegantly on [p_their()] feet!"), - span_warning("You fall [levels > 1 ? "[levels] levels" : "one level"] into [target_turf], perfecting the landing!")) - return - - var/obj/item/organ/external/wings/gliders = get_organ_by_type(/obj/item/organ/external/wings) - if((HAS_TRAIT(src, TRAIT_FREERUNNING) && levels < 2) || gliders?.can_soften_fall()) // the power of parkour or wings allows falling short distances unscathed - visible_message(span_danger("[src] makes a hard landing on [target_turf] but remains unharmed from the fall."), \ - span_userdanger("You brace for the fall. You make a hard landing on [target_turf] but remain unharmed.")) - Knockdown(levels * 40) - return - return ..() diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species_type/snail.dm b/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species_type/snail.dm deleted file mode 100644 index d6ae6c5a1036c4..00000000000000 --- a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species_type/snail.dm +++ /dev/null @@ -1,97 +0,0 @@ -#define SHELL_TRANSPARENCY_ALPHA 90 - -/obj/item/storage/backpack/snail - /// Whether or not a bluespace anomaly core has been inserted - var/storage_core = FALSE - obj_flags = IMMUTABLE_SLOW - -/obj/item/storage/backpack/snail/Initialize(mapload) - . = ..() - atom_storage.max_total_storage = 30 - -/obj/item/storage/backpack/snail/attackby(obj/item/core, mob/user) - if(!istype(core, /obj/item/assembly/signaler/anomaly/bluespace)) - return ..() - - to_chat(user, span_notice("You insert [core] into your shell, and it starts to glow blue with expanded storage potential!")) - playsound(src, 'sound/machines/click.ogg', 50, TRUE) - add_filter("bluespace_shell", 2, list("type" = "outline", "color" = COLOR_BLUE_LIGHT, "size" = 1)) - storage_core = TRUE - qdel(core) - emptyStorage() - create_storage(max_specific_storage = WEIGHT_CLASS_GIGANTIC, max_total_storage = 35, max_slots = 30, storage_type = /datum/storage/bag_of_holding) - atom_storage.allow_big_nesting = TRUE - name = "snail shell of holding" - user.update_worn_back() - update_appearance() - -/obj/item/storage/backpack/snail/build_worn_icon( - default_layer = 0, - default_icon_file = null, - isinhands = FALSE, - female_uniform = NO_FEMALE_UNIFORM, - override_state = null, - override_file = null, - mutant_styles = NONE, -) - - var/mutable_appearance/standing = ..() - if(storage_core == TRUE) - standing.add_filter("bluespace_shell", 2, list("type" = "outline", "color" = COLOR_BLUE_LIGHT, "alpha" = SHELL_TRANSPARENCY_ALPHA, "size" = 1)) - return standing - -/datum/species/snail/prepare_human_for_preview(mob/living/carbon/human/snail) - snail.dna.features["mcolor"] = "#adaba7" - snail.update_body(TRUE) - -/datum/species/snail/create_pref_unique_perks() - var/list/to_add = list() - - to_add += list( - list( - SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, - SPECIES_PERK_ICON = "home", - SPECIES_PERK_NAME = "Shellback", - SPECIES_PERK_DESC = "Snails have a shell fused to their back. While it doesn't offer any protection, it offers great storage. Alt click to change the sprite!", - ), - list( - SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, - SPECIES_PERK_ICON = "wine-glass", - SPECIES_PERK_NAME = "Poison Resistance", - SPECIES_PERK_DESC = "Snails have a higher tolerance for poison owing to their robust livers.", - ), - list( - SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, - SPECIES_PERK_ICON = "water", - SPECIES_PERK_NAME = "Water Breathing", - SPECIES_PERK_DESC = "Snails can breathe underwater.", - ), - list( - SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, - SPECIES_PERK_ICON = "bone", - SPECIES_PERK_NAME = "Boneless", - SPECIES_PERK_DESC = "Snails are invertebrates.", - ), - list( - SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, - SPECIES_PERK_ICON = "crutch", - SPECIES_PERK_NAME = "Sheer Mollusk Speed", - SPECIES_PERK_DESC = "Snails move incredibly slow while standing. They move much faster while crawling.", - ), - list( - SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, - SPECIES_PERK_ICON = "frown", - SPECIES_PERK_NAME = "Weak Fighter", - SPECIES_PERK_DESC = "Snails punch half as hard as a human.", - ), - list( - SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, - SPECIES_PERK_ICON = "skull", - SPECIES_PERK_NAME = "Salt Weakness", - SPECIES_PERK_DESC = "Salt burns snails, and salt piles will block their path.", - ), - ) - - return to_add - -#undef SHELL_TRANSPARENCY_ALPHA diff --git a/modular_skyrat/master_files/code/modules/mob/living/human/species.dm b/modular_skyrat/master_files/code/modules/mob/living/human/species.dm deleted file mode 100644 index 30df82a7f1158e..00000000000000 --- a/modular_skyrat/master_files/code/modules/mob/living/human/species.dm +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Returns a list of strings representing features this species has. - * - * Used by the preferences UI to know what buttons to show. - */ -/datum/species/proc/get_features() - var/cached_features = GLOB.features_by_species[type] - if (!isnull(cached_features)) - return cached_features - - var/list/features = list() - - for (var/preference_type in GLOB.preference_entries) - var/datum/preference/preference = GLOB.preference_entries[preference_type] - - if ( \ - (preference.relevant_mutant_bodypart in default_mutant_bodyparts) \ - || (preference.relevant_inherent_trait in inherent_traits) \ - || (preference.relevant_head_flag && check_head_flags(preference.relevant_head_flag)) \ - ) - features += preference.savefile_key - - for (var/obj/item/organ/external/organ_type as anything in external_organs) - var/preference = initial(organ_type.preference) - if (!isnull(preference)) - features += preference - - GLOB.features_by_species[type] = features - - return features - - -/datum/species/proc/apply_supplementary_body_changes(mob/living/carbon/human/target, datum/preferences/preferences, visuals_only = FALSE) - return - -/datum/species/create_pref_traits_perks() - . = ..() - - if (TRAIT_WATER_BREATHING in inherent_traits) - . += list(list( - SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, - SPECIES_PERK_ICON = FA_ICON_FISH, - SPECIES_PERK_NAME = "Waterbreathing", - SPECIES_PERK_DESC = "[plural_form] can breathe in water, making pools a lot safer to be in!", - )) diff --git a/modular_skyrat/master_files/code/modules/mob/living/sillicon/robot.dm b/modular_skyrat/master_files/code/modules/mob/living/sillicon/robot.dm deleted file mode 100644 index d81b457549b94f..00000000000000 --- a/modular_skyrat/master_files/code/modules/mob/living/sillicon/robot.dm +++ /dev/null @@ -1,95 +0,0 @@ -// Smoke particle effect for heavy-duty cyborgs -/datum/component/robot_smoke - -/datum/component/robot_smoke/RegisterWithParent() - add_verb(parent, /mob/living/silicon/robot/proc/toggle_smoke) - RegisterSignal(parent, COMSIG_ATOM_DIR_CHANGE, PROC_REF(dir_change)) - -/datum/component/robot_smoke/UnregisterFromParent() - remove_verb(parent, /mob/living/silicon/robot/proc/toggle_smoke) - UnregisterSignal(parent, COMSIG_ATOM_DIR_CHANGE) - -/datum/component/robot_smoke/Destroy() - return ..() - -/datum/component/robot_smoke/proc/dir_change(datum/source, olddir, newdir) - SIGNAL_HANDLER - - var/atom/movable/movable_parent = parent - - if(!movable_parent.particles) - return - - var/truedir = movable_parent.dir - if(newdir && (truedir != newdir)) - truedir = newdir - - switch(truedir) - if(NORTH) - movable_parent.particles.position = list(-6, 12, 0) - movable_parent.particles.drift = generator("vector", list(0, 0.4), list(0.2, -0.2)) - if(EAST) - movable_parent.particles.position = list(-6, 12, 0) - movable_parent.particles.drift = generator("vector", list(0, 0.4), list(-0.8, 0.2)) - if(SOUTH) - movable_parent.particles.position = list(5, 12, 0) - movable_parent.particles.drift = generator("vector", list(0, 0.4), list(0.2, -0.2)) - if(WEST) - movable_parent.particles.position = list(6, 12, 0) - movable_parent.particles.drift = generator("vector", list(0, 0.4), list(0.8, -0.2)) - - -/mob/living/silicon/robot/proc/toggle_smoke() - set name = "Toggle smoke" - set category = "AI Commands" - - if(particles) - dissipate() - else if (!stat && !robot_resting) - do_jitter_animation(10) - playsound(src, 'modular_skyrat/master_files/sound/effects/robot_smoke.ogg', 50) - particles = new /particles/smoke/robot() - -/mob/living/silicon/robot/proc/dissipate() - particles.spawning = 0 - addtimer(CALLBACK(src, PROC_REF(particles_qdel)), 1.5 SECONDS) - -/mob/living/silicon/robot/proc/particles_qdel() - QDEL_NULL(particles) - -/mob/living/silicon/robot/death() - . = ..() - if(GetComponent(/datum/component/robot_smoke)) - dissipate() - -/mob/living/silicon/robot/robot_lay_down() - . = ..() - - if(GetComponent(/datum/component/robot_smoke)) - if(robot_resting) - dissipate() - else - return - -// The smoke -/particles/smoke/robot - spawning = 0.4 - lifespan = 1 SECONDS - fade = 0.75 SECONDS - position = list(5, 12, 0) - velocity = list(0, 0.2, 0) - friction = 0.35 - scale = 0.5 - grow = 0.1 - spin = generator("num", -20, 20) - -// Another smoke effect -/obj/effect/temp_visual/mook_dust/robot - icon = 'modular_skyrat/modules/borgs/icons/misc/tallrobot_effects.dmi' - icon_state = "impact_cloud" - color = "#a9a9a93c" - -/obj/effect/temp_visual/mook_dust/robot/table - color = "#ffffffc2" - pixel_y = -8 - layer = ABOVE_MOB_LAYER diff --git a/modular_skyrat/master_files/code/modules/mob/login.dm b/modular_skyrat/master_files/code/modules/mob/login.dm deleted file mode 100644 index fbf57ccf0b5856..00000000000000 --- a/modular_skyrat/master_files/code/modules/mob/login.dm +++ /dev/null @@ -1,10 +0,0 @@ -/mob/Login() - . = ..() - - if(!.) - return FALSE - - if(SSplayer_ranks.initialized) - SSplayer_ranks.update_prefs_unlock_content(client?.prefs) - - return TRUE diff --git a/modular_skyrat/master_files/code/modules/mod/mod_clothes.dm b/modular_skyrat/master_files/code/modules/mod/mod_clothes.dm deleted file mode 100644 index b36b6d058ffe11..00000000000000 --- a/modular_skyrat/master_files/code/modules/mod/mod_clothes.dm +++ /dev/null @@ -1,22 +0,0 @@ -// MODsuit-related overrides for our digitigrade sprites and such -/obj/item/clothing/head/mod - supports_variations_flags = CLOTHING_SNOUTED_VARIATION - worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/mod.dmi' - worn_icon_better_vox = 'modular_skyrat/modules/better_vox/icons/clothing/mod.dmi' - -/obj/item/clothing/suit/mod - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/mod.dmi' - worn_icon_better_vox = 'modular_skyrat/modules/better_vox/icons/clothing/mod.dmi' - -/obj/item/clothing/gloves/mod - supports_variations_flags = NONE - worn_icon_better_vox = 'modular_skyrat/modules/better_vox/icons/clothing/mod.dmi' - -/obj/item/clothing/shoes/mod - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/mod.dmi' - worn_icon_better_vox = 'modular_skyrat/modules/better_vox/icons/clothing/mod.dmi' - -/obj/item/mod/control - worn_icon_better_vox = 'modular_skyrat/modules/better_vox/icons/clothing/mod_modules.dmi' diff --git a/modular_skyrat/master_files/code/modules/paperwork/stamps.dm b/modular_skyrat/master_files/code/modules/paperwork/stamps.dm deleted file mode 100644 index 5424b64886767c..00000000000000 --- a/modular_skyrat/master_files/code/modules/paperwork/stamps.dm +++ /dev/null @@ -1,82 +0,0 @@ -/obj/item/stamp/cat - name = "\improper Official Cat Stamp" - desc = "A rubber stamp for stamping documents of questionable importance." - icon = 'modular_skyrat/master_files/icons/obj/bureaucracy.dmi' - icon_state = "stamp-cat_blue" - inhand_icon_state = "stamp" -// Radial menu options - var/static/cat_blue = image(icon = 'modular_skyrat/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_cat_blue") - var/static/paw_blue = image(icon = 'modular_skyrat/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_paw_blue") - var/static/cat_red = image(icon = 'modular_skyrat/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_cat_red") - var/static/paw_red = image(icon = 'modular_skyrat/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_paw_red") - var/static/cat_orange = image(icon = 'modular_skyrat/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_cat_orange") - var/static/paw_orange = image(icon = 'modular_skyrat/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_paw_orange") - var/static/cat_green = image(icon = 'modular_skyrat/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_cat_green") - var/static/paw_green = image(icon = 'modular_skyrat/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_paw_green") -// Choices for the radial menu - var/static/list/radial_options = list( - "cat_blue" = cat_blue, - "paw_blue" = paw_blue, - "cat_red" = cat_red, - "paw_red" = paw_red, - "cat_orange" = cat_orange, - "paw_orange" = paw_orange, - "cat_green" = cat_green, - "paw_green" = paw_green - ) - -/obj/item/stamp/cat/ui_interact(mob/user) - . = ..() - var/choice = show_radial_menu(user, src, radial_options) - switch(choice) - if("cat_blue") - icon_state = "stamp-cat_blue" - dye_color = DYE_HOP - name = "\improper Official Cat Stamp" - if("paw_blue") - icon_state = "stamp-paw_blue" - dye_color = DYE_HOP - name = "\improper Paw Stamp" - - if("cat_red") - icon_state = "stamp-cat_red" - dye_color = DYE_HOS - name = "\improper Official Cat Stamp" - if("paw_red") - icon_state = "stamp-paw_red" - dye_color = DYE_HOS - name = "\improper Paw Stamp" - - if("cat_orange") - icon_state = "stamp-cat_orange" - dye_color = DYE_QM - name = "\improper Official Cat Stamp" - if("paw_orange") - icon_state = "stamp-paw_orange" - dye_color = DYE_QM - name = "\improper Paw Stamp" - - if("cat_green") - icon_state = "stamp-cat_green" - dye_color = DYE_CENTCOM - name = "\improper Official Cat Stamp" - if("paw_green") - icon_state = "stamp-paw_green" - dye_color = DYE_CENTCOM - name = "\improper Paw Stamp" - - else - return - -/obj/item/stamp/nri - name = "\improper Novaya Rossiyskaya Imperia stamp" - desc = "A rubber stamp for stamping important documents. Used in various NRI documents." - icon = 'modular_skyrat/master_files/icons/obj/bureaucracy.dmi' - icon_state = "stamp-nri" - dye_color = DYE_CENTCOM - -/obj/item/stamp/solfed - name = "\improper Solar Federation stamp" - icon = 'modular_skyrat/master_files/icons/obj/bureaucracy.dmi' - icon_state = "stamp-solfed" - dye_color = DYE_CE diff --git a/modular_skyrat/master_files/code/modules/power/lighting/light_mapping_helpers.dm b/modular_skyrat/master_files/code/modules/power/lighting/light_mapping_helpers.dm deleted file mode 100644 index 30664a4edfe8d3..00000000000000 --- a/modular_skyrat/master_files/code/modules/power/lighting/light_mapping_helpers.dm +++ /dev/null @@ -1,19 +0,0 @@ -// Kneecapping light values every light at a time. -/obj/machinery/light/dim - brightness = 4 - nightshift_brightness = 4 - bulb_colour = LIGHT_COLOR_TUNGSTEN - bulb_power = 0.4 - -/obj/machinery/light/small - brightness = 5 - nightshift_brightness = 4.5 - bulb_colour = LIGHT_COLOR_TUNGSTEN - bulb_power = 0.9 - -/obj/machinery/light/cold - nightshift_light_color = null - -/obj/machinery/light/warm - bulb_colour = LIGHT_COLOR_TUNGSTEN - nightshift_light_color = null diff --git a/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/bows/_bow.dm b/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/bows/_bow.dm deleted file mode 100644 index 2161b68110501d..00000000000000 --- a/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/bows/_bow.dm +++ /dev/null @@ -1,8 +0,0 @@ -/obj/item/gun/ballistic/bow - item_flags = NEEDS_PERMIT - trigger_guard = TRIGGER_GUARD_ALLOW_ALL - -/obj/item/gun/ballistic/bow/attack_self(mob/user) - . = ..() - if(chambered) - playsound(src, 'modular_skyrat/modules/tribal_extended/sound/sound_weapons_bowdraw.ogg', 75, 0) diff --git a/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/bows/bow_types.dm b/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/bows/bow_types.dm deleted file mode 100644 index bf80437b793ecd..00000000000000 --- a/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/bows/bow_types.dm +++ /dev/null @@ -1,7 +0,0 @@ -/obj/item/gun/ballistic/bow/longbow - worn_icon = 'modular_skyrat/modules/tribal_extended/icons/back.dmi' - slot_flags = ITEM_SLOT_BACK - icon_state = "bow" - inhand_icon_state = "bow" - base_icon_state = "bow" - worn_icon_state = "bow" diff --git a/modular_skyrat/master_files/code/modules/reagents/chemistry/holder.dm b/modular_skyrat/master_files/code/modules/reagents/chemistry/holder.dm deleted file mode 100644 index a7505eeb3fbffe..00000000000000 --- a/modular_skyrat/master_files/code/modules/reagents/chemistry/holder.dm +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Check if this holder contains a reagent with a `chemical_flags_skyrat` containing this flag. - * - * Arguments: - * * chemical_flag - The bitflag to search for. - * * min_volume - Checks for having a specific amount of reagents matching that `chemical_flag` - */ -/datum/reagents/proc/has_chemical_flag_skyrat(chemical_flag, min_volume = 0) - var/found_amount = 0 - var/list/cached_reagents = reagent_list - for(var/datum/reagent/holder_reagent as anything in cached_reagents) - if (holder_reagent.chemical_flags_skyrat & chemical_flag) - found_amount += holder_reagent.volume - if(found_amount >= min_volume) - return TRUE - - return FALSE diff --git a/modular_skyrat/master_files/code/modules/reagents/chemistry/reagents.dm b/modular_skyrat/master_files/code/modules/reagents/chemistry/reagents.dm deleted file mode 100644 index 00dfe2063f0b78..00000000000000 --- a/modular_skyrat/master_files/code/modules/reagents/chemistry/reagents.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/reagent - /// Modular version of `chemical_flags`, so we don't have to worry about - /// it causing conflicts in the future. - var/chemical_flags_skyrat = NONE - -/datum/reagent/drug/nicotine - addiction_types = list(/datum/addiction/nicotine = 4) // 1.6 per 2 seconds diff --git a/modular_skyrat/master_files/code/modules/research/designs/medical_designs.dm b/modular_skyrat/master_files/code/modules/research/designs/medical_designs.dm deleted file mode 100644 index 1f5970c68a352b..00000000000000 --- a/modular_skyrat/master_files/code/modules/research/designs/medical_designs.dm +++ /dev/null @@ -1,12 +0,0 @@ -/datum/design/cybernetic_tongue - name = "Cybernetic Tongue" - desc = "A cybernetic tongue." - id = "cybernetic_tongue" - build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 4 SECONDS - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 2) - build_path = /obj/item/organ/internal/tongue/cybernetic - category = list( - RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1 - ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL diff --git a/modular_skyrat/master_files/code/modules/research/designs/misc_designs.dm b/modular_skyrat/master_files/code/modules/research/designs/misc_designs.dm deleted file mode 100644 index 9a253d53e7d269..00000000000000 --- a/modular_skyrat/master_files/code/modules/research/designs/misc_designs.dm +++ /dev/null @@ -1,68 +0,0 @@ -/datum/design/monkey_helmet - name = "Monkey Mind Magnification Helmet" - desc = "A fragile, circuitry embedded helmet for boosting the intelligence of a monkey to a higher level." - id = "monkey_helmet" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/clothing/head/helmet/monkey_sentience - category = list( - RND_CATEGORY_TOOLS + RND_SUBCATEGORY_EQUIPMENT_SCIENCE - ) - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE - -/datum/design/plumbing_eng - name = "Engineering Plumbing Constructor" - desc = "A type of plumbing constructor designed to manipulate fluid." - id = "plumbing_eng" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 40, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 5, /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/construction/plumbing/engineering - category = list( - RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING - ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING - -/datum/design/smartdartgun - name = "Medical SmartDart Gun" - desc = "An adjusted version of the medical syringe gun that only allows SmartDarts to be chambered." - id = "smartdartgun" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 5, /datum/material/silver = SHEET_MATERIAL_AMOUNT * 2) - build_path = /obj/item/gun/syringe/smartdart - category = list( - RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_EQUIPMENT_MEDICAL - ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL - -/datum/design/anesthetic_machine - name = "Anesthetic Machine Parts Kit" - desc = "All-in-one kit containing the parts to create a portable anesthetic stand, tank not included." - id = "anesthetic_machine" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/plastic = SHEET_MATERIAL_AMOUNT * 5, /datum/material/silver = SHEET_MATERIAL_AMOUNT * 2) - build_path = /obj/item/anesthetic_machine_kit - category = list( - RND_CATEGORY_TOOLS + RND_SUBCATEGORY_EQUIPMENT_MEDICAL - ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL - -/datum/design/time_clock_frame - name = "Time Clock Frame" - desc = "A frame for a time clock console, contains all of the parts needed to build a new time clock" - id = "time_clock_frame" - build_type = PROTOLATHE - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, /datum/material/glass = SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/wallframe/time_clock - category = list(RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MOUNTS) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SERVICE - -/datum/design/vox_gas_filter - name = "Vox Gas Filter" - id = "vox_gas_filter" - build_type = PROTOLATHE | AUTOLATHE | COLONY_FABRICATOR - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT) - build_path = /obj/item/gas_filter/vox - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_GAS_TANKS_EQUIPMENT - ) - departmental_flags = ALL diff --git a/modular_skyrat/master_files/code/modules/research/techweb/all_nodes.dm b/modular_skyrat/master_files/code/modules/research/techweb/all_nodes.dm deleted file mode 100644 index de61febc086b39..00000000000000 --- a/modular_skyrat/master_files/code/modules/research/techweb/all_nodes.dm +++ /dev/null @@ -1,256 +0,0 @@ - -// NEW NODES - -/datum/techweb_node/adv_vision - id = "adv_vision" - display_name = "Combat Cybernetic Eyes" - description = "Military grade combat implants to improve vision." - prereq_ids = list("combat_cyber_implants", "alien_bio") - design_ids = list( - "ci-thermals", - "ci-xray", - "ci-thermals-moth", - "ci-xray-moth", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000) - -/datum/techweb_node/borg_shapeshifter - id = "borg_shapeshifter" - display_name = "Illegal Cyborg Addition" - description = "Some sort of experimental tool that was once used by an rival company." - prereq_ids = list("syndicate_basic") - design_ids = list("borg_shapeshifter_module") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - - -// MODULAR ADDITIONS AND REMOVALS - -//Base Nodes -/datum/techweb_node/base/New() - . = ..() - design_ids += list( - "polarizer", - "vox_gas_filter", - ) - -/datum/techweb_node/cyborg/New() - . = ..() - design_ids += list( - "affection_module", - ) - -/datum/techweb_node/basic_tools/New() - . = ..() - design_ids += list( - "bowl", - "drinking_glass", - "shot_glass", - ) - -/datum/techweb_node/basic_medical/New() - . = ..() - design_ids += list( - "hospital_gown", - "synth_eyes", - "synth_tongue", - "synth_liver", - "synth_lungs", - "synth_stomach", - "synth_ears", - "synth_heart", - ) - -/////////////////////////Biotech///////////////////////// - -/datum/techweb_node/adv_biotech/New() - . = ..() - design_ids += list( - "monkey_helmet", - "brute2medicell", - "burn2medicell", - "toxin2medicell", - "oxy2medicell", - "relocatemedicell", - "tempmedicell", - "bodymedicell", - "clotmedicell", - ) - -/datum/techweb_node/biotech/New() - . = ..() - design_ids += list( - "anesthetic_machine", - "smartdartgun", - ) - -/////////////////////////EMP tech///////////////////////// - -/datum/techweb_node/emp_basic/New() - . = ..() - design_ids += list( - "gownmedicell", - "bedmedicell", - ) - -////////////////////////Computer tech//////////////////////// - -/datum/techweb_node/comptech/New() - . = ..() - design_ids += list( - "time_clock_frame", - ) - -/datum/techweb_node/integrated_hud/New() - . = ..() - design_ids += list( - "health_hud_prescription", - "security_hud_prescription", - "diagnostic_hud_prescription", - "science_hud_prescription", - "health_hud_aviator", - "security_hud_aviator", - "diagnostic_hud_aviator", - "meson_hud_aviator", - "science_hud_aviator", - "health_hud_projector", - "security_hud_projector", - "diagnostic_hud_projector", - "meson_hud_projector", - "science_hud_projector", - "permit_glasses", - "nifsoft_money_sense", - "nifsoft_hud_kit", - "nifsoft_hud_science", - "nifsoft_hud_meson", - "nifsoft_hud_medical", - "nifsoft_hud_security", - "nifsoft_hud_diagnostic", - "nifsoft_hud_cargo", - ) - -////////////////////////Medical//////////////////////// - -/datum/techweb_node/genetics/New() - . = ..() - design_ids += list( - "self_actualization_device", - ) - -/datum/techweb_node/cyber_organs/New() - . = ..() - design_ids += list( - "cybernetic_tongue", - ) - -// Modularly removes x-ray and thermals from here, it's in adv_vision instead -/datum/techweb_node/combat_cyber_implants/New() - . = ..() - design_ids -= list( - "ci-thermals", - "ci-xray", - "ci-thermals-moth", - "ci-xray-moth", - ) - -////////////////////////Tools//////////////////////// - -/datum/techweb_node/botany/New() - . = ..() - design_ids += list( - "salvemedicell", - ) - -/datum/techweb_node/sec_basic/New() - . = ..() - design_ids += list( - "nifsoft_remover", - ) - -/////////////////////////weaponry tech///////////////////////// - -/datum/techweb_node/weaponry/New() - . = ..() - design_ids += list( - "ammoworkbench_disk_lethal", - ) - -/datum/techweb_node/adv_weaponry/New() - . = ..() - design_ids += list( - "ammo_workbench", - ) - -/datum/techweb_node/electric_weapons/New() - . = ..() - design_ids += list( - "medigun_speed", - ) - -////////////////////////Alien technology//////////////////////// - -/datum/techweb_node/alien_bio/New() - . = ..() - design_ids += list( - "brute3medicell", - "burn3medicell", - "oxy3medicell", - "toxin3medicell", - ) - -/////////////////////////engineering tech///////////////////////// - -/datum/techweb_node/adv_engi/New() - . = ..() - design_ids += list( - "engine_goggles_prescription", - "mesons_prescription", - "multi_cell_charger", - "tray_goggles_prescription", - "plumbing_eng", - ) - -/////////////////////////robotics tech///////////////////////// - -/datum/techweb_node/robotics/New() - . = ..() - design_ids += list( - "borg_upgrade_snacks", - "mini_soulcatcher", - ) - -/datum/techweb_node/neural_programming/New() - . = ..() - design_ids += list( - "soulcatcher_device", - "rsd_interface", - ) - -/datum/techweb_node/cyborg_upg_util/New() - . = ..() - design_ids += list( - "borg_upgrade_clamp", - "borg_upgrade_brush", - ) - -/datum/techweb_node/cyborg_upg_engiminer/New() - . = ..() - design_ids += list( - "advanced_materials", - "inducer_module", - ) - -/datum/techweb_node/cyborg_upg_med/New() - . = ..() - design_ids += list( - "borg_upgrade_surgicaltools", - ) - - design_ids -= list( - "borg_upgrade_pinpointer", - ) - -/datum/techweb_node/basic_mining/New() - . = ..() - design_ids += list( - "borg_upgrade_welding", - ) diff --git a/modular_skyrat/master_files/code/modules/shuttle/shuttle.dm b/modular_skyrat/master_files/code/modules/shuttle/shuttle.dm deleted file mode 100644 index 257d8fb8846626..00000000000000 --- a/modular_skyrat/master_files/code/modules/shuttle/shuttle.dm +++ /dev/null @@ -1,39 +0,0 @@ -/obj/docking_port/mobile - /// Does this shuttle play sounds upon landing and takeoff? - var/shuttle_sounds = TRUE - /// The take off sound to be played - var/takeoff_sound = sound('modular_skyrat/modules/advanced_shuttles/sound/engine_startup.ogg') - /// The landing sound to be played - var/landing_sound = sound('modular_skyrat/modules/advanced_shuttles/sound/engine_landing.ogg') - /// The sound range coeff for the landing and take off sound effect - var/sound_range = 20 - -/obj/docking_port/mobile/proc/bolt_all_doors() // Expensive procs :( - var/list/turfs = return_ordered_turfs(x, y, z, dir) - for(var/i in 1 to turfs.len) - var/turf/checked_turf = turfs[i] - for(var/obj/machinery/door/airlock/airlock_door in checked_turf) - if(airlock_door.external) - airlock_door.close(force_crush = TRUE) - airlock_door.bolt() - -/obj/docking_port/mobile/proc/unbolt_all_doors() - var/list/turfs = return_ordered_turfs(x, y, z, dir) - for(var/i in 1 to turfs.len) - var/turf/checked_turf = turfs[i] - for(var/obj/machinery/door/airlock/airlock_door in checked_turf) - if(airlock_door.external) - airlock_door.unbolt() - -/obj/docking_port/mobile/proc/play_engine_sound(atom/distant_source, takeoff) - if(distant_source) - for(var/mob/hearing_mob in range(sound_range, distant_source)) - if(hearing_mob?.client) - var/dist = get_dist(hearing_mob.loc, distant_source.loc) - var/vol = clamp(50 - ((dist - 7) * 5), 10, 50) // Every tile decreases sound volume by 5 - if(takeoff) - if(hearing_mob.client?.prefs?.read_preference(/datum/preference/toggle/sound_ship_ambience)) - hearing_mob.playsound_local(distant_source, takeoff_sound, vol) - else - if(hearing_mob.client?.prefs?.read_preference(/datum/preference/toggle/sound_ship_ambience)) - hearing_mob.playsound_local(distant_source, landing_sound, vol) diff --git a/modular_skyrat/master_files/code/modules/surgery/organs/internal/appendix/_appendix.dm b/modular_skyrat/master_files/code/modules/surgery/organs/internal/appendix/_appendix.dm deleted file mode 100644 index 296696d559f94f..00000000000000 --- a/modular_skyrat/master_files/code/modules/surgery/organs/internal/appendix/_appendix.dm +++ /dev/null @@ -1,8 +0,0 @@ -/obj/item/organ/internal/appendix/become_inflamed() - if(engaged_role_play_check(owner, station = TRUE, dorms = TRUE)) - return - - if(!(owner.mind.assigned_role.job_flags & JOB_CREW_MEMBER)) - return - - ..() diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/neck.dmi b/modular_skyrat/master_files/icons/donator/mob/clothing/neck.dmi deleted file mode 100644 index d1b9ac786db445..00000000000000 Binary files a/modular_skyrat/master_files/icons/donator/mob/clothing/neck.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi b/modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi deleted file mode 100644 index 7c324c0b8d1431..00000000000000 Binary files a/modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/donator/obj/clothing/cloaks.dmi b/modular_skyrat/master_files/icons/donator/obj/clothing/cloaks.dmi deleted file mode 100644 index ea035f618c535e..00000000000000 Binary files a/modular_skyrat/master_files/icons/donator/obj/clothing/cloaks.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi b/modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi deleted file mode 100644 index 32e425e06ce9e5..00000000000000 Binary files a/modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/hud/screen_cyborg.dmi b/modular_skyrat/master_files/icons/hud/screen_cyborg.dmi deleted file mode 100644 index e70cce2ef571d8..00000000000000 Binary files a/modular_skyrat/master_files/icons/hud/screen_cyborg.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/misc/language.dmi b/modular_skyrat/master_files/icons/misc/language.dmi deleted file mode 100644 index 94a32635b48abb..00000000000000 Binary files a/modular_skyrat/master_files/icons/misc/language.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/accessories.dmi b/modular_skyrat/master_files/icons/mob/clothing/accessories.dmi deleted file mode 100644 index 87119791afa38d..00000000000000 Binary files a/modular_skyrat/master_files/icons/mob/clothing/accessories.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/feet.dmi b/modular_skyrat/master_files/icons/mob/clothing/feet.dmi deleted file mode 100644 index 88d930bae4d92f..00000000000000 Binary files a/modular_skyrat/master_files/icons/mob/clothing/feet.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/feet_digi.dmi b/modular_skyrat/master_files/icons/mob/clothing/feet_digi.dmi deleted file mode 100644 index 056216fca2b4e9..00000000000000 Binary files a/modular_skyrat/master_files/icons/mob/clothing/feet_digi.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/head.dmi b/modular_skyrat/master_files/icons/mob/clothing/head.dmi deleted file mode 100644 index dcb4e45d41b47e..00000000000000 Binary files a/modular_skyrat/master_files/icons/mob/clothing/head.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/mask_muzzled.dmi b/modular_skyrat/master_files/icons/mob/clothing/mask_muzzled.dmi deleted file mode 100644 index 7166da31a4a555..00000000000000 Binary files a/modular_skyrat/master_files/icons/mob/clothing/mask_muzzled.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/accessories.dmi b/modular_skyrat/master_files/icons/mob/clothing/species/teshari/accessories.dmi deleted file mode 100644 index ee2718418103ee..00000000000000 Binary files a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/accessories.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/belt.dmi b/modular_skyrat/master_files/icons/mob/clothing/species/teshari/belt.dmi deleted file mode 100644 index eadfe01a6e3775..00000000000000 Binary files a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/belt.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/costume.dmi b/modular_skyrat/master_files/icons/mob/clothing/under/costume.dmi deleted file mode 100644 index cbc54a934f5cf6..00000000000000 Binary files a/modular_skyrat/master_files/icons/mob/clothing/under/costume.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/costume_digi.dmi b/modular_skyrat/master_files/icons/mob/clothing/under/costume_digi.dmi deleted file mode 100644 index 9a266a9476b784..00000000000000 Binary files a/modular_skyrat/master_files/icons/mob/clothing/under/costume_digi.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/security_digi.dmi b/modular_skyrat/master_files/icons/mob/clothing/under/security_digi.dmi deleted file mode 100644 index 5b5a709889c99b..00000000000000 Binary files a/modular_skyrat/master_files/icons/mob/clothing/under/security_digi.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/underwear.dmi b/modular_skyrat/master_files/icons/mob/clothing/underwear.dmi deleted file mode 100644 index ff6f4218c27e25..00000000000000 Binary files a/modular_skyrat/master_files/icons/mob/clothing/underwear.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/uniform_digi.dmi b/modular_skyrat/master_files/icons/mob/clothing/uniform_digi.dmi deleted file mode 100644 index 43604476f8b3ba..00000000000000 Binary files a/modular_skyrat/master_files/icons/mob/clothing/uniform_digi.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/mob/huds/hud.dmi b/modular_skyrat/master_files/icons/mob/huds/hud.dmi deleted file mode 100644 index 235a45ecd4918e..00000000000000 Binary files a/modular_skyrat/master_files/icons/mob/huds/hud.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/mob/mod.dmi b/modular_skyrat/master_files/icons/mob/mod.dmi deleted file mode 100644 index 046be38264976e..00000000000000 Binary files a/modular_skyrat/master_files/icons/mob/mod.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/mob/mutant_bodyparts.dmi b/modular_skyrat/master_files/icons/mob/mutant_bodyparts.dmi deleted file mode 100644 index 310c78b0a362e9..00000000000000 Binary files a/modular_skyrat/master_files/icons/mob/mutant_bodyparts.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/horns_big.dmi b/modular_skyrat/master_files/icons/mob/sprite_accessory/horns_big.dmi deleted file mode 100644 index f81f2d0d982b34..00000000000000 Binary files a/modular_skyrat/master_files/icons/mob/sprite_accessory/horns_big.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/ipc_screens.dmi b/modular_skyrat/master_files/icons/mob/sprite_accessory/ipc_screens.dmi deleted file mode 100644 index be61ef5518d94d..00000000000000 Binary files a/modular_skyrat/master_files/icons/mob/sprite_accessory/ipc_screens.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/snouts.dmi b/modular_skyrat/master_files/icons/mob/sprite_accessory/snouts.dmi deleted file mode 100644 index 86f4c783e2016c..00000000000000 Binary files a/modular_skyrat/master_files/icons/mob/sprite_accessory/snouts.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/tails.dmi b/modular_skyrat/master_files/icons/mob/sprite_accessory/tails.dmi deleted file mode 100644 index 14e69c073cd183..00000000000000 Binary files a/modular_skyrat/master_files/icons/mob/sprite_accessory/tails.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/obj/card.dmi b/modular_skyrat/master_files/icons/obj/card.dmi deleted file mode 100644 index 9130183d19d8f4..00000000000000 Binary files a/modular_skyrat/master_files/icons/obj/card.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/obj/closet.dmi b/modular_skyrat/master_files/icons/obj/closet.dmi deleted file mode 100644 index 788f566a935314..00000000000000 Binary files a/modular_skyrat/master_files/icons/obj/closet.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/obj/clothing/accessories.dmi b/modular_skyrat/master_files/icons/obj/clothing/accessories.dmi deleted file mode 100644 index 25303e56adb2d3..00000000000000 Binary files a/modular_skyrat/master_files/icons/obj/clothing/accessories.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/obj/clothing/shoes.dmi b/modular_skyrat/master_files/icons/obj/clothing/shoes.dmi deleted file mode 100644 index c7cd72757dbfe7..00000000000000 Binary files a/modular_skyrat/master_files/icons/obj/clothing/shoes.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi b/modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi deleted file mode 100644 index 30fd1d4cb220af..00000000000000 Binary files a/modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/obj/clothing/suits/labcoat.dmi b/modular_skyrat/master_files/icons/obj/clothing/suits/labcoat.dmi deleted file mode 100644 index 8126f117ef1798..00000000000000 Binary files a/modular_skyrat/master_files/icons/obj/clothing/suits/labcoat.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/costume.dmi b/modular_skyrat/master_files/icons/obj/clothing/under/costume.dmi deleted file mode 100644 index 2624d4d3dfcfca..00000000000000 Binary files a/modular_skyrat/master_files/icons/obj/clothing/under/costume.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/obj/surgery.dmi b/modular_skyrat/master_files/icons/obj/surgery.dmi deleted file mode 100644 index 5a3aabe223b112..00000000000000 Binary files a/modular_skyrat/master_files/icons/obj/surgery.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/readme.md b/modular_skyrat/master_files/readme.md deleted file mode 100644 index d568ac2ce57ff6..00000000000000 --- a/modular_skyrat/master_files/readme.md +++ /dev/null @@ -1,33 +0,0 @@ -This is the logging file for any master icon and sound files that we have. - -Please check this list before adding your own master file to see if it already exists. If it does exist then please put your icon in it. - -MASTER ICON FILES -- /master_files/icons/emoji.dmi -- /master_files/icons/mob/hud.dmi -- /master_files/icons/obj/clothing/gloves.dmi -- /master_files/icons/mob/clothing/hands.dmi -- /master_files/icons/obj/trash_piles.dmi -- /master_files/icons/mob/popup_flicks.dmi - -MASTER SOUND FILES -- /master_files/sound/effects/heart_beat_loop3.ogg -- /master_files/sound/effects/heart_beat_once.ogg - -MASTER CODE FILES -- /master_files/code/modules/power/lighting.dm -- /master_files/code/modules/clothing/non_anthro_clothes.dm > PLEASE USE THIS TO LOG ANY CLOTHES THAT DO NOT NEED ANTHRO VARIANTS. -- /master_files/code/modules/clothing/anthro_clothes.dm > PLEASE USE THIS TO LOG ANY CLOTHES THAT DO NEED ANTHRO VARIANTS. -- /master_files/code/datums/traits/neutral.dm > USE THIS FOR ANY NEUTRAL TRAITS -- /master_files/code/datums/traits/negative.dm > USE THIS FOR ANY NEGATIVE TRAITS -- /master_files/code/datums/traits/good.dm > USE THIS FOR ANY GOOD TRAITS -- /master_files/code/game/objects/structures/trash_pile.dm -- /master_files/code/modules/mob/living/carbon/carbon_say.dm -- /master_files/code/modules/mob/living/emote_popup.dm -- /master_files/code/game/machinery/doors/firedoor.dm -- /master_files/code/modules/jobs/job_types/cyborg.dm -- /master_files/code/modules/antagonists/_common/antag_datum.dm - -MASTER GLOBAL VARS -- modular_skyrat/master_files/code/_globalvars/configuration.dm > GLOBAL_VAR_INIT(looc_allowed, TRUE) - diff --git a/modular_skyrat/modules/GAGS/greyscale_configs.dm b/modular_skyrat/modules/GAGS/greyscale_configs.dm deleted file mode 100644 index ed8a9f904d2d8f..00000000000000 --- a/modular_skyrat/modules/GAGS/greyscale_configs.dm +++ /dev/null @@ -1,1480 +0,0 @@ -/* -* HEAD -*/ - -// BERETS -/datum/greyscale_config/beret - name = "Beret" - icon_file = 'modular_skyrat/modules/GAGS/icons/beret.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/beret/beret.json' - -/datum/greyscale_config/beret/worn - name = "Beret (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/beret/beret_worn.json' - -/datum/greyscale_config/beret/worn/vox - name = "Beret (Worn, Vox)" - icon_file = 'modular_skyrat/modules/GAGS/icons/beret_vox.dmi' - -/datum/greyscale_config/beret/worn/teshari - name = "Beret (Worn, Teshari)" - icon_file = 'modular_skyrat/modules/GAGS/icons/beret_teshari.dmi' - -/datum/greyscale_config/beret_badge - name = "Badged Beret" - icon_file = 'modular_skyrat/modules/GAGS/icons/beret.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/beret/beret_badge.json' - -/datum/greyscale_config/beret_badge/worn - name = "Badged Beret (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/beret/beret_badge_worn.json' - -/datum/greyscale_config/beret_badge/worn/vox - name = "Badged Beret (Worn, Vox)" - icon_file = 'modular_skyrat/modules/GAGS/icons/beret_vox.dmi' - -/datum/greyscale_config/beret_badge/worn/teshari - name = "Badged Beret (Worn, Teshari)" - icon_file = 'modular_skyrat/modules/GAGS/icons/beret_teshari.dmi' - -/datum/greyscale_config/beret_badge_fancy - name = "Beret With Fancy Badge" - icon_file = 'modular_skyrat/modules/GAGS/icons/beret.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/beret/beret_badge_fancy.json' - -/datum/greyscale_config/beret_badge_fancy/worn - name = "Beret With Fancy Badge (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/beret/beret_badge_fancy_worn.json' - -/datum/greyscale_config/beret_badge_fancy/worn/vox - name = "Beret With Fancy Badge (Worn, Vox)" - icon_file = 'modular_skyrat/modules/GAGS/icons/beret_vox.dmi' - -/datum/greyscale_config/beret_badge_fancy/worn/teshari - name = "Beret With Fancy Badge (Worn, Teshari)" - icon_file = 'modular_skyrat/modules/GAGS/icons/beret_teshari.dmi' - - -//COWBOY -/datum/greyscale_config/cowboy_wide - name = "Wide Brimmed Hat" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/head/cowboy.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json' - -/datum/greyscale_config/cowboy_wide/worn - name = "Wide Brimmed Hat (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/head/cowboy.dmi' - -/datum/greyscale_config/cowboy_wide_feathered - name = "Wide Brimmed Feathered Hat" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/head/cowboy.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/head/cowboy/three_layer_hats.json' - -/datum/greyscale_config/cowboy_wide_feathered/worn - name = "Wide Brimmed Feathered Hat (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/head/cowboy.dmi' - -/datum/greyscale_config/cowboy_flat - name = "Flat Brimmed Hat" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/head/cowboy.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json' - -/datum/greyscale_config/cowboy_flat/worn - name = "Flat Brimmed Hat (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/head/cowboy.dmi' - -/datum/greyscale_config/cowboy_flat_cowl - name = "Flat Brimmed Hat with Cowl" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/head/cowboy.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/head/cowboy/three_layer_hats.json' - -/datum/greyscale_config/cowboy_flat_cowl/worn - name = "Flat Brimmed Hat with Cowl (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/head/cowboy.dmi' - -/datum/greyscale_config/cowboy_cattleman - name = "Cattleman Hat" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/head/cowboy.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json' - -/datum/greyscale_config/cowboy_cattleman/worn - name = "Cattleman Hat (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/head/cowboy.dmi' - -/datum/greyscale_config/cowboy_cattleman_wide - name = "Wide Brimmed Cattleman Hat" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/head/cowboy.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json' - -/datum/greyscale_config/cowboy_cattleman_wide/worn - name = "Wide Brimmed Cattleman Hat (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/head/cowboy.dmi' - -//MUSHROOM CAP - -/datum/greyscale_config/mushcap - name = "Mushroom Cap" - icon_file = 'modular_skyrat/modules/GAGS/icons/mushcap.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/mush_cap/mushcap.json' - -/datum/greyscale_config/mushcap/worn - name = "Mushroom Cap Worn" - json_config = 'modular_skyrat/modules/GAGS/json_configs/mush_cap/mushcap_worn.json' - -// FLATCAP - -/datum/greyscale_config/flatcap - name = "Flat Cap" - icon_file = 'modular_skyrat/modules/GAGS/icons/hats.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/flatcap/flatcap.json' - -/datum/greyscale_config/flatcap/worn - name = "Flat Cap (Worn)" - icon_file = 'modular_skyrat/modules/GAGS/icons/hats.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/flatcap/flatcap_worn.json' - -// FLOWER PIN - -/datum/greyscale_config/flowerpin - name = "Flower Pin" - icon_file = 'modular_skyrat/modules/GAGS/icons/hats.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/flowerpin/flowerpin.json' - -/datum/greyscale_config/flowerpin/worn - name = "Flower Pin (Worn)" - icon_file = 'modular_skyrat/modules/GAGS/icons/hats.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/flowerpin/flowerpin_worn.json' - -// Hood - -/datum/greyscale_config/standalone_hood - name = "Hood" - icon_file = 'modular_skyrat/modules/GAGS/icons/head/head.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/head/hood/hood.json' - -/datum/greyscale_config/standalone_hood/worn - name = "Hood (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/head/hood/hood_worn.json' - -/datum/greyscale_config/standalone_hood/worn/teshari - icon_file = 'modular_skyrat/modules/GAGS/icons/head/head_teshari.dmi' - -/datum/greyscale_config/standalone_hood/worn/newvox - icon_file = 'modular_skyrat/modules/GAGS/icons/head/head_newvox.dmi' - -/datum/greyscale_config/standalone_hood/worn/oldvox - icon_file = 'modular_skyrat/modules/GAGS/icons/head/head_oldvox.dmi' - -// CATEAR HEADPHONES - -/datum/greyscale_config/catear_headphone - name = "Cat-ear Headphones" - icon_file = 'modular_skyrat/modules/GAGS/icons/head/catear_headphone.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone.json' - -/datum/greyscale_config/catear_headphone/worn - name = "Cat-ear Headphones (Worn)" - icon_file = 'modular_skyrat/modules/GAGS/icons/head/catear_headphone.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn.json' - -/datum/greyscale_config/catear_headphone_inhand_left - name = "Cat-ear Headphones (Inhand Left)" - icon_file = 'modular_skyrat/modules/GAGS/icons/head/catear_headphone_inhand.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_left.json' - -/datum/greyscale_config/catear_headphone_inhand_right - name = "Cat-ear Headphones (Inhand Right)" - icon_file = 'modular_skyrat/modules/GAGS/icons/head/catear_headphone_inhand.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_right.json' - -//BOWS -/datum/greyscale_config/large_bow - name = "Large Bow" - icon_file = 'modular_skyrat/modules/GAGS/icons/bow.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/head/large_bow.json' - -/datum/greyscale_config/large_bow/worn - name = "Large Bow (Worn)" - icon_file = 'modular_skyrat/modules/GAGS/icons/bow_worn.dmi' - -/datum/greyscale_config/back_bow - name = "Back Bow" - icon_file = 'modular_skyrat/modules/GAGS/icons/bow.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/head/back_bow.json' - -/datum/greyscale_config/back_bow/worn - name = "Back Bow (Worn)" - icon_file = 'modular_skyrat/modules/GAGS/icons/bow_worn.dmi' - -/datum/greyscale_config/sweet_bow - name = "Sweet Bow" - icon_file = 'modular_skyrat/modules/GAGS/icons/bow.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/head/sweet_bow.json' - -/datum/greyscale_config/sweet_bow/worn - name = "Sweet Bow (Worn)" - icon_file = 'modular_skyrat/modules/GAGS/icons/bow_worn.dmi' - -/datum/greyscale_config/small_bow - name = "Small Bow" - icon_file = 'modular_skyrat/modules/GAGS/icons/bow.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/head/small_bow.json' - -/datum/greyscale_config/small_bow/worn - name = "Small Bow (Worn)" - icon_file = 'modular_skyrat/modules/GAGS/icons/bow_worn.dmi' - -/* -* MASKS -*/ - -// CLOWN -/datum/greyscale_config/clown_mask - name = "Colourable Clown Mask" - icon_file = 'modular_skyrat/modules/GAGS/icons/clown_mask.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/clown_mask/clown_mask.json' - -/datum/greyscale_config/clown_mask/worn - name = "Colourable Clown Mask (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/clown_mask/clown_mask_worn.json' - -// VAPE -/datum/greyscale_config/vape/worn/digi - name = "Vape (Worn, Digi) " - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' - -// RESPIRATOR -/datum/greyscale_config/respirator - name = "Colourable Respirator" - icon_file = 'modular_skyrat/modules/GAGS/icons/masks.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/respirator/respirator.json' - -/datum/greyscale_config/respirator/worn - name = "Colourable Respirator (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/respirator/respirator_worn.json' - -/datum/greyscale_config/respirator/worn/snouted - name = "Colourable Respirator (Worn) (Snouted)" - icon_file = 'modular_skyrat/modules/GAGS/icons/masks_snout.dmi' - -/datum/greyscale_config/respirator/worn/better_vox - name = "Colourable Respirator (Worn) (Vox Primalis)" - icon_file = 'modular_skyrat/modules/GAGS/icons/masks_vox_better.dmi' - -/datum/greyscale_config/respirator/worn/vox - name = "Colourable Respirator (Worn) (Vox)" - icon_file = 'modular_skyrat/modules/GAGS/icons/masks_vox.dmi' - -/datum/greyscale_config/respirator/worn/teshari - name = "Colourable Respirator (Worn) (Teshari)" - icon_file = 'modular_skyrat/modules/GAGS/icons/masks_teshari.dmi' - -// STERILE -/datum/greyscale_config/sterile_mask - name = "Colourable Sterile Mask" - icon_file = 'modular_skyrat/modules/GAGS/icons/masks.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/sterile_mask/sterile.json' - -/datum/greyscale_config/sterile_mask/worn - name = "Colourable Sterile Mask (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/sterile_mask/sterile_worn.json' - -/datum/greyscale_config/sterile_mask/worn/snouted - name = "Colourable Sterile Mask (Worn) (Snouted)" - icon_file = 'modular_skyrat/modules/GAGS/icons/masks_snout.dmi' - -/datum/greyscale_config/sterile_mask/worn/better_vox - name = "Colourable Sterile Mask (Worn) (Vox Primalis)" - icon_file = 'modular_skyrat/modules/GAGS/icons/masks_vox_better.dmi' - -/datum/greyscale_config/sterile_mask/worn/vox - name = "Colourable Sterile Mask (Worn) (Vox)" - icon_file = 'modular_skyrat/modules/GAGS/icons/masks_vox.dmi' - -/datum/greyscale_config/sterile_mask/worn/teshari - name = "Colourable Sterile Mask (Worn) (Teshari)" - icon_file = 'modular_skyrat/modules/GAGS/icons/masks_teshari.dmi' - -/* -* NECK -*/ - -// RANGER PONCHO -/datum/greyscale_config/ranger_poncho - name = "Ranger Poncho" - icon_file = 'modular_skyrat/modules/GAGS/icons/ranger_poncho.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/ranger_poncho/ranger_poncho.json' - -/datum/greyscale_config/ranger_poncho/worn - name = "Ranger Poncho Worn" - json_config = 'modular_skyrat/modules/GAGS/json_configs/ranger_poncho/ranger_poncho_worn.json' - -/datum/greyscale_config/ranger_poncho/worn/teshari - name = "Ranger Poncho (Worn, Teshari)" - icon_file = 'modular_skyrat/modules/GAGS/icons/ranger_poncho_teshari.dmi' - -// CLOAKS -/datum/greyscale_config/cloak - name = "Cloak" - icon_file = 'modular_skyrat/modules/GAGS/icons/cloak.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/cloak/cloak.json' - -/datum/greyscale_config/cloak/worn - name = "Cloak (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/cloak/cloak_worn.json' - -/datum/greyscale_config/cloak/veil - name = "Veil" - json_config = 'modular_skyrat/modules/GAGS/json_configs/cloak/veil.json' - -/datum/greyscale_config/cloak/veil/worn - name = "Veil (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/cloak/veil_worn.json' - -/datum/greyscale_config/cloak/boat - name = "Boatcloak" - json_config = 'modular_skyrat/modules/GAGS/json_configs/cloak/boat.json' - -/datum/greyscale_config/cloak/boat/worn - name = "Boatcloak (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/cloak/boat_worn.json' - -/datum/greyscale_config/cloak/shroud - name = "Shroud" - json_config = 'modular_skyrat/modules/GAGS/json_configs/cloak/shroud.json' - -/datum/greyscale_config/cloak/shroud/worn - name = "Shroud (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/cloak/shroud_worn.json' - -// Mantle - -/datum/greyscale_config/mantle - name = "Mantle" - icon_file = 'modular_skyrat/modules/GAGS/icons/neck/neck.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/neck/mantle/mantle.json' - -/datum/greyscale_config/mantle/worn - name = "Mantle (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/neck/mantle/mantle_worn.json' - -/datum/greyscale_config/mantle/worn/teshari - icon_file = 'modular_skyrat/modules/GAGS/icons/neck/neck_teshari.dmi' - -/datum/greyscale_config/mantle/worn/newvox - icon_file = 'modular_skyrat/modules/GAGS/icons/neck/neck_newvox.dmi' - -/datum/greyscale_config/mantle/worn/oldvox - icon_file = 'modular_skyrat/modules/GAGS/icons/neck/neck_oldvox.dmi' - -//CAPES - -/datum/greyscale_config/robe_cape - name = "Robe Cape" - icon_file = 'modular_skyrat/modules/GAGS/icons/cape.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/cloak/robe_cape.json' - -/datum/greyscale_config/robe_cape/worn - name = "Robe Cape (Worn)" - icon_file = 'modular_skyrat/modules/GAGS/icons/cape_worn.dmi' - -/datum/greyscale_config/long_cape - name = "Long Cape" - icon_file = 'modular_skyrat/modules/GAGS/icons/cape.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/cloak/long_cape.json' - -/datum/greyscale_config/long_cape/worn - name = "Long Cape (Worn)" - icon_file = 'modular_skyrat/modules/GAGS/icons/cape_worn.dmi' - -/datum/greyscale_config/wide_cape - name = "Wide Cape" - icon_file = 'modular_skyrat/modules/GAGS/icons/cape.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/cloak/wide_cape.json' - -/datum/greyscale_config/wide_cape/worn - name = "Wide Cape (Worn)" - icon_file = 'modular_skyrat/modules/GAGS/icons/cape_worn.dmi' - -// COLLARS - -/datum/greyscale_config/collar - name = "Collar" - icon_file = 'modular_skyrat/modules/GAGS/icons/collar.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/bell.json' - -// Bell -/datum/greyscale_config/collar/bell - name = "Bell Collar" - json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/bell.json' - -/datum/greyscale_config/collar/bell/worn - name = "Bell Collar (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/bell_worn.json' - -// Choker -/datum/greyscale_config/collar/choker - name = "Choker" - json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/choker.json' - -/datum/greyscale_config/collar/choker/worn - name = "Choker (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/choker_worn.json' - -// Thin Choker -/datum/greyscale_config/collar/thinchoker - name = "Thin Choker" - json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/thinchoker.json' - -/datum/greyscale_config/collar/thinchoker/worn - name = "Thin Choker (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/thinchoker_worn.json' - -// Cow -/datum/greyscale_config/collar/cow - name = "Cowbell Collar" - json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/cow.json' - -/datum/greyscale_config/collar/cow/worn - name = "Cowbell Collar (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/cow_worn.json' - -// Cross -/datum/greyscale_config/collar/cross - name = "Cross Collar" - json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/cross.json' - -/datum/greyscale_config/collar/cross/worn - name = "Cross Collar (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/cross_worn.json' - -// Holo -/datum/greyscale_config/collar/holo - name = "Holo Collar" - json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/holo.json' - -/datum/greyscale_config/collar/holo/worn - name = "Holo Collar (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/holo_worn.json' - -// Leather -/datum/greyscale_config/collar/leather - name = "Leather Collar" - json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/leather.json' - -/datum/greyscale_config/collar/leather/worn - name = "Leather Collar (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/leather_worn.json' - -// Pet -/datum/greyscale_config/collar/pet - name = "Pet Collar" - json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/pet.json' - -/datum/greyscale_config/collar/pet/worn - name = "Pet Collar (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/pet_worn.json' - -// Spiked -/datum/greyscale_config/collar/spike - name = "Spiked Collar" - json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/spike.json' - -/datum/greyscale_config/collar/spike/worn - name = "Spiked Collar (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/spike_worn.json' - -//FACE SCARF -/datum/greyscale_config/face_scarf - name = "Face Scarf" - icon_file = 'modular_skyrat/modules/GAGS/icons/face_scarf.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/neck/face_scarf.json' - -/datum/greyscale_config/face_scarf/worn - name = "Face Scarf (Worn)" - icon_file = 'modular_skyrat/modules/GAGS/icons/face_scarf_worn.dmi' - -/* -* SUITS -*/ - -// Apron - -/datum/greyscale_config/apron - name = "Apron" - icon_file = 'modular_skyrat/modules/GAGS/icons/suit/suit.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/apron/apron.json' - -/datum/greyscale_config/apron/worn - name = "Apron (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/apron/apron_worn.json' - -/datum/greyscale_config/apron/worn/teshari - icon_file = 'modular_skyrat/modules/GAGS/icons/suit/suit_teshari.dmi' - -/datum/greyscale_config/apron/worn/newvox - icon_file = 'modular_skyrat/modules/GAGS/icons/suit/suit_newvox.dmi' - -/datum/greyscale_config/apron/worn/oldvox - icon_file = 'modular_skyrat/modules/GAGS/icons/suit/suit_oldvox.dmi' - -//Flannel Shirt - -/datum/greyscale_config/flannelgags - name = "Flannel Shirt" - icon_file = 'modular_skyrat/modules/GAGS/icons/suit.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/flannel/flannel.json' - -/datum/greyscale_config/flannelgags/worn - name = "Flannel Shirt (Worn)" - icon_file = 'modular_skyrat/modules/GAGS/icons/suit.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/flannel/flannel_worn.json' - - -// ARMOR - -/datum/greyscale_config/heck_suit/worn/digi - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor_digi.dmi' - -//Helmet pairs with the above suit -/datum/greyscale_config/heck_helmet/worn/snouted - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/head/helmet_muzzled.dmi' - -// Bathrobes - -/datum/greyscale_config/bathrobe - name = "Bathrobe" - icon_file = 'modular_skyrat/modules/GAGS/icons/suit/suit.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/bathrobe/bathrobe.json' - -/datum/greyscale_config/bathrobe/worn - name = "Bathrobe (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/bathrobe/bathrobe_worn.json' - -/datum/greyscale_config/bathrobe/worn/teshari - icon_file = 'modular_skyrat/modules/GAGS/icons/suit/suit_teshari.dmi' - -/datum/greyscale_config/bathrobe/worn/newvox - icon_file = 'modular_skyrat/modules/GAGS/icons/suit/suit_newvox.dmi' - -/datum/greyscale_config/bathrobe/worn/oldvox - icon_file = 'modular_skyrat/modules/GAGS/icons/suit/suit_oldvox.dmi' - -// FANCY SUITS -/datum/greyscale_config/fancy_suit - name = "Fancy Suit" - icon_file = 'modular_skyrat/modules/GAGS/icons/fancy_suits.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/fancy_suits/fancy_suit.json' - -/datum/greyscale_config/fancy_suit/worn - name = "Fancy Suit (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/fancy_suits/fancy_suit_worn.json' - -/datum/greyscale_config/recolorable_suit - name = "Formal Suit" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/suits.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/fancy_suits/recolorable_suit.json' - -/datum/greyscale_config/recolorable_suit/worn - name = "Formal Suit (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/suits.dmi' - -/datum/greyscale_config/recolorable_suit/worn/digi - name = "Formal Suit (Worn, Digi)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/suits_digi.dmi' - -/datum/greyscale_config/recolorable_suitskirt - name = "Formal Suitskirt" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/suits.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/fancy_suits/recolorable_suit.json' - -/datum/greyscale_config/recolorable_suitskirt/worn - name = "Formal Suitskirt (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/suits.dmi' - -/datum/greyscale_config/recolorable_suitskirt/worn/digi - name = "Formal Suitskirt (Worn, Digi)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/suits_digi.dmi' - -// HOODIES -/datum/greyscale_config/hoodie - name = "Hoodie" - icon_file = 'modular_skyrat/modules/GAGS/icons/hoodie.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie.json' - -/datum/greyscale_config/hoodie/worn - name = "Hoodie Worn" - json_config = 'modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_worn.json' - -/datum/greyscale_config/hoodie_trim - name = "Trimmed Hoodie" - icon_file = 'modular_skyrat/modules/GAGS/icons/hoodie.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_trim.json' - -/datum/greyscale_config/hoodie_trim/worn - name = "Trimmed Hoodie Worn" - json_config = 'modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_trim_worn.json' - -/datum/greyscale_config/hoodie_branded - name = "Branded Hoodie" - icon_file = 'modular_skyrat/modules/GAGS/icons/hoodie.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_branded.json' - -/datum/greyscale_config/hoodie_branded/worn - name = "Branded Hoodie Worn" - json_config = 'modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_branded_worn.json' - -// CARDIGAN - -/datum/greyscale_config/cardigan - name = "Cardigan" - icon_file = 'modular_skyrat/modules/GAGS/icons/suit.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/cardigan/cardigan.json' - -/datum/greyscale_config/cardigan/worn - name = "Cardigan (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/cardigan/cardigan_worn.json' - -// SWEATERS - -/datum/greyscale_config/cableknit_sweater - name = "Cableknit Sweater" - icon_file = 'modular_skyrat/modules/GAGS/icons/sweaters.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/sweater/sweater.json' - -/datum/greyscale_config/cableknit_sweater/worn - name = "Cableknit Sweater (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/sweater/sweater_worn.json' - -/datum/greyscale_config/warm_sweater - name = "Warm Sweater" - icon_file = 'modular_skyrat/modules/GAGS/icons/warm_sweater.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/sweater/warm_sweater.json' - -/datum/greyscale_config/warm_sweater/worn - name = "Warm Sweater (Worn)" - icon_file = 'modular_skyrat/modules/GAGS/icons/warm_sweater_worn.dmi' - -/datum/greyscale_config/heart_sweater - name = "Heart Sweater" - icon_file = 'modular_skyrat/modules/GAGS/icons/warm_sweater.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/sweater/heart_sweater.json' - -/datum/greyscale_config/heart_sweater/worn - name = "Heart Sweater (Worn)" - icon_file = 'modular_skyrat/modules/GAGS/icons/warm_sweater_worn.dmi' - -//Keyhole uses the same configs! - -// OVERALLS - -/datum/greyscale_config/overalls/worn/digi - name = "Overalls (Worn, Digi)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/suit_digi.dmi' - -/datum/greyscale_config/overalls/worn/vox - name = "Overalls (Worn, Vox)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/suit.dmi' - -/datum/greyscale_config/overalls/worn/better_vox - name = "Overalls (Worn, Better Vox)" - icon_file = 'modular_skyrat/modules/better_vox/icons/clothing/suit.dmi' - -// URBAN COAT - -/datum/greyscale_config/urban_coat - name = "Urban Coat" - icon_file = 'modular_skyrat/modules/GAGS/icons/urban_coat.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/urban_coat/urban_coat.json' - -/datum/greyscale_config/urban_coat/worn - name = "Urban Coat (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/urban_coat/urban_coat_worn.json' - -// WINTER COAT - -/datum/greyscale_config/winter_coat - name = "Winter Coat" - icon_file = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/winter_coat/winter_coat.json' - -/datum/greyscale_config/winter_coat_worn - name = "Winter Coat (Worn)" - icon_file = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/winter_coat/winter_coat_worn.json' - -/datum/greyscale_config/winter_hood - name = "Winter Coat Hood" - icon_file = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/winter_coat/winter_hood.json' - -/datum/greyscale_config/winter_hood/worn - name = "Winter Coat Hood (Worn)" - icon_file = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi' - -/datum/greyscale_config/warm_coat - name = "Warm Coat" - icon_file = 'modular_skyrat/modules/GAGS/icons/warm_coat.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/winter_coat/warm_coat.json' - -/datum/greyscale_config/warm_coat/worn - name = "Warm Coat (Worn)" - icon_file = 'modular_skyrat/modules/GAGS/icons/warm_coat_worn.dmi' - -// LEATHER JACKET - -/datum/greyscale_config/leather_jacket - name = "Leather Jacket" - icon_file = 'modular_skyrat/modules/GAGS/icons/leather_jacket.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/leather_jacket/leather_jacket.json' - -/datum/greyscale_config/leather_jacket/worn - name = "Leather Jacket (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/leather_jacket/leather_jacket_worn.json' - -// DUSTER - -/datum/greyscale_config/duster - name = "Duster" - icon_file = 'modular_skyrat/modules/GAGS/icons/duster.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/duster/duster.json' - -/datum/greyscale_config/duster/worn - name = "Duster (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/duster/duster_worn.json' - -// PEACOAT - -/datum/greyscale_config/peacoat - name = "Peacoat" - icon_file = 'modular_skyrat/modules/GAGS/icons/peacoat.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/peacoat/peacoat.json' - -/datum/greyscale_config/peacoat/worn - name = "Peacoat (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/peacoat/peacoat_worn.json' - - -// VARSITY JACKET - -/datum/greyscale_config/varsity - name = "Varsity Jacket" - icon_file = 'modular_skyrat/modules/GAGS/icons/suit/suit.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/varsity/varsity.json' - -/datum/greyscale_config/varsity/worn - name = "Varsity Jacket (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/varsity/varsity_worn.json' - -// TAILORED JACKET - -/datum/greyscale_config/tailored_jacket - name = "Tailored Jacket" - icon_file = 'modular_skyrat/modules/GAGS/icons/suit/suit.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket.json' - -/datum/greyscale_config/tailored_jacket/worn - name = "Tailored Jacket (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket_worn.json' - -/datum/greyscale_config/tailored_short_jacket - name = "Tailored Short Jacket" - icon_file = 'modular_skyrat/modules/GAGS/icons/suit/suit.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket.json' - -/datum/greyscale_config/tailored_short_jacket/worn - name = "Tailored Short Jacket (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket_worn.json' - - -/* -* UNDER -*/ - - -// JUMPSUITS - -/datum/greyscale_config/jumpsuit/worn/digi - name = "Jumpsuit (Worn, Digi)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/color_digi.dmi' - -/datum/greyscale_config/jumpsuit/prison/worn/digi - name = "Prison Jumpsuit (Worn, Digi)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/color_digi.dmi' - -/datum/greyscale_config/jumpsuit/worn/monkey - name = "Jumpsuit (Worn) - Monkey" - icon_file = MONKEY_UNIFORM_FILE - json_config = 'modular_skyrat/modules/GAGS/json_configs/jumpsuit/jumpsuit_worn_monkey.json' - -/datum/greyscale_config/jumpsuit/prison/worn/monkey - name = "Prison Jumpsuit (Worn) - Monkey" - icon_file = MONKEY_UNIFORM_FILE - json_config = 'modular_skyrat/modules/GAGS/json_configs/jumpsuit/jumpsuit_prison_worn_monkey.json' - -/datum/greyscale_config/jumpsuit/worn/vox - name = "Jumpsuit (Worn, Vox)" - icon_file = 'modular_skyrat/modules/GAGS/icons/jumpsuit_vox.dmi' - -/datum/greyscale_config/jumpsuit/prison/worn/vox - name = "Prison Jumpsuit (Worn, Vox)" - icon_file = 'modular_skyrat/modules/GAGS/icons/jumpsuit_vox.dmi' - -/datum/greyscale_config/jumpsuit/worn/better_vox - name = "Jumpsuit (Worn, Better Vox)" - icon_file = 'modular_skyrat/modules/GAGS/icons/jumpsuit_better_vox.dmi' - -/datum/greyscale_config/jumpsuit/prison/worn/better_vox - name = "Prison Jumpsuit (Worn, Better Vox)" - icon_file = 'modular_skyrat/modules/GAGS/icons/jumpsuit_better_vox.dmi' - -/datum/greyscale_config/jumpsuit/worn/taur_snake - name = "Jumpsuit (Worn) - Naga" - icon_file = 'modular_skyrat/modules/GAGS/icons/jumpsuit_snake.dmi' - -/datum/greyscale_config/jumpsuit/prison/worn/taur_snake - name = "Prison Jumpsuit (Worn) - Naga" - icon_file = 'modular_skyrat/modules/GAGS/icons/jumpsuit_snake.dmi' - -/datum/greyscale_config/jumpsuit/worn/teshari - name = "Jumpsuit (Worn, Teshari)" - icon_file = 'modular_skyrat/modules/GAGS/icons/jumpsuit_teshari.dmi' - -/datum/greyscale_config/jumpsuit/prison/worn/teshari - name = "Prison Jumpsuit (Worn, Teshari)" - icon_file = 'modular_skyrat/modules/GAGS/icons/jumpsuit_teshari.dmi' - -// PANTS / SHORTS -//Note, these icons are now in master_files per TG's sorting. There's no reason to NOT have these pieces in master files now that they're sorted out. -//The rest will eventually join them - preferably with a cleaner method too instead of having to have unique configs for every single item's digi state. - -/datum/greyscale_config/slacks/worn/digi - name = "Slacks (Worn, Digi)" - icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE - -/datum/greyscale_config/jeans/worn/digi - name = "Jeans (Worn, Digi)" - icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE - -/datum/greyscale_config/shorts/worn/digi - name = "Shorts (Worn, Digi)" - icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE - -/datum/greyscale_config/jeanshorts/worn/digi - name = "Jean Shorts (Worn, Digi)" - icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE - -/datum/greyscale_config/shortershorts - name = "Shorter Shorts" - icon_file = 'modular_skyrat/modules/GAGS/icons/shorts_pants.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shortershorts.json' - -/datum/greyscale_config/shortershorts/worn - name = "Shorter Shorts (Worn)" - icon_file = 'modular_skyrat/modules/GAGS/icons/shorts_pants.dmi' - -/datum/greyscale_config/shortershorts/worn/digi - name = "Ripped Shorts (Worn, Digi)" - icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE - -/datum/greyscale_config/shorts_ripped - name = "Ripped Shorts" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shorts_ripped.json' - -/datum/greyscale_config/shorts_ripped/worn //TG will hopefully start having worn as a subtype, it means only needing 1 .json - name = "Ripped Shorts (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi' - -/datum/greyscale_config/shorts_ripped/worn/digi - name = "Ripped Shorts (Worn, Digi)" - icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE - -/datum/greyscale_config/shorts_ripped/worn/teshari - name = "Ripped Shorts (Worn, Teshari)" - icon_file = 'modular_skyrat/modules/GAGS/icons/teshari_uniform.dmi' - -/datum/greyscale_config/jeans_ripped - name = "Ripped Jeans" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jeans_ripped.json' - -/datum/greyscale_config/jeans_ripped/worn - name = "Ripped Jeans (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi' - -/datum/greyscale_config/jeans_ripped/worn/digi - name = "Ripped Jeans (Worn, Digi)" - icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE - -/datum/greyscale_config/yoga_pants - name = "Yoga Pants" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/yoga_pants.json' - -/datum/greyscale_config/yoga_pants/worn - name = "Yoga Pants (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi' - -/datum/greyscale_config/yoga_pants/worn/digi - name = "Yoga Pants (Worn, Digi)" - icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE - -// DRESSES / SKIRTS - -/datum/greyscale_config/plaidskirt/worn/digi - name = "Plaid Skirt (Worn, Digi)" - icon_file = SKIRTS_DRESSES_DIGIFILE - -/datum/greyscale_config/lone_skirt - name = "Skirt" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/lone_skirt.json' - -/datum/greyscale_config/lone_skirt/worn - name = "Skirt (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi' - -/datum/greyscale_config/turtleskirt_knit - name = "Cableknit Skirtleneck" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/turtleskirt_knit.json' - -/datum/greyscale_config/turtleskirt_knit/worn - name = "Cableknit Skirtleneck (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi' - -/datum/greyscale_config/jean_skirt - name = "Jean Skirt" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jean_skirt.json' - -/datum/greyscale_config/jean_skirt/worn - name = "Jean Skirt (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi' - -/datum/greyscale_config/jean_skirt/worn/digi - name = "Jean Skirt (Worn, Digi)" - icon_file = SKIRTS_DRESSES_DIGIFILE - -/datum/greyscale_config/short_dress - name = "Short Dress" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/short_dress.json' - -/datum/greyscale_config/short_dress/worn - name = "Short Dress (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi' - -/datum/greyscale_config/strapless_dress - name = "Strapless Dress" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/strapless_dress.json' - -/datum/greyscale_config/strapless_dress/worn - name = "Strapless Dress (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi' - -/datum/greyscale_config/pentagram_dress - name = "Pentagram Strapped Dress" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/pentagram_dress.json' - -/datum/greyscale_config/pentagram_dress/worn - name = "Pentagram Strapped Dress (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi' - -/datum/greyscale_config/plaidskirt/worn/teshari - name = "Plaid Skirt (Worn, Teshari)" - icon_file = 'modular_skyrat/modules/GAGS/icons/dressteshari.dmi' - -/datum/greyscale_config/sundress/worn/teshari - name = "Sundress (Worn, Teshari)" - icon_file = 'modular_skyrat/modules/GAGS/icons/dressteshari.dmi' - -/datum/greyscale_config/medium_skirt - name = "Medium Skirt" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/medium_skirt.json' - -/datum/greyscale_config/medium_skirt/worn - name = "Medium Skirt (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi' - -/datum/greyscale_config/long_skirt - name = "Long Skirt" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/long_skirt.json' - -/datum/greyscale_config/long_skirt/worn - name = "Long Skirt (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi' - -// KILT -// COSTUMES - -/datum/greyscale_config/buttondown_slacks/worn/digi - name = "Buttondown with Slacks (Worn, Digi)" - icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE - -/datum/greyscale_config/buttondown_shorts/worn/digi - name = "Buttondown with Shorts (Worn, Digi)" - icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE - -/datum/greyscale_config/football_suit/worn/digi - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/costume_digi.dmi' - -/datum/greyscale_config/qipao - name = "Qipao" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/costume.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/costumes/lunar_japanese.json' - -/datum/greyscale_config/qipao/worn - name = "Qipao (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/costume.dmi' - -/datum/greyscale_config/qipao/worn/digi - name = "Qipao (Worn, Digi)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/costume_digi.dmi' - -/datum/greyscale_config/cheongsam - name = "Cheongsam" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/costume.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/costumes/lunar_japanese.json' - -/datum/greyscale_config/cheongsam/worn - name = "Cheongsam (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/costume.dmi' - -/datum/greyscale_config/cheongsam/worn/digi - name = "Cheongsam (Worn, Digi)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/costume_digi.dmi' - -/datum/greyscale_config/yukata - name = "Yukata" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/costume.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/costumes/lunar_japanese.json' - -/datum/greyscale_config/yukata/worn - name = "Yukata (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/costume.dmi' - -/datum/greyscale_config/yukata/worn/digi - name = "Yukata (Worn, Digi)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/costume_digi.dmi' - -/datum/greyscale_config/kilt - name = "Kilt" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/kilt/kilt.json' - -/datum/greyscale_config/kilt/worn - name = "Kilt (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi' - -/datum/greyscale_config/kilt/worn/digi - name = "Kilt (Worn, Digi)" - icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE - -/datum/greyscale_config/buttondown_vicvest - name = "Buttondown with Double-breasted Vest" - icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/costumes/buttondown_vicvest.json' - -/datum/greyscale_config/buttondown_vicvest/worn - name = "Buttondown with Double-breasted Vest (Worn)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi' - -/datum/greyscale_config/buttondown_vicvest/worn/digi - name = "Buttondown with Double-breasted Vest (Worn, Digi)" - icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE - -//GRAYSCALE MAID COSTUME - -/datum/greyscale_config/maid_neck_cover - name = "Maid Neck Cover" - icon_file = 'modular_skyrat/modules/GAGS/icons/maid_costume.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/costumes/maid_neck_cover.json' - -/datum/greyscale_config/maid_neck_cover/worn - name = "Maid Neck Cover (Worn)" - icon_file = 'modular_skyrat/modules/GAGS/icons/maid_costume_worn.dmi' - -/datum/greyscale_config/maid_arm_covers - name = "Maid Arm Covers" - icon_file = 'modular_skyrat/modules/GAGS/icons/maid_costume.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/costumes/maid_arm_covers.json' - -/datum/greyscale_config/maid_arm_covers/worn - name = "Maid Arm Covers (Worn)" - icon_file = 'modular_skyrat/modules/GAGS/icons/maid_costume_worn.dmi' - -/datum/greyscale_config/maid_costume - name = "Maid Costume" - icon_file = 'modular_skyrat/modules/GAGS/icons/maid_costume.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/costumes/maid_costume.json' - -/datum/greyscale_config/maid_costume/worn - name = "Maid Costume (Worn)" - icon_file = 'modular_skyrat/modules/GAGS/icons/maid_costume_worn.dmi' - -/datum/greyscale_config/maid_headband - name = "Maid Headband" - icon_file = 'modular_skyrat/modules/GAGS/icons/maid_costume.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/costumes/maid_headband.json' - -/datum/greyscale_config/maid_headband/worn - name = "Maid Headband (Worn)" - icon_file = 'modular_skyrat/modules/GAGS/icons/maid_costume_worn.dmi' - -/* -TREK -*/ - -/datum/greyscale_config/trek/worn/digi - name = "Trek Uniform (Worn, Digi)" - icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/trek_digi.dmi' - -/* -* SHOES -*/ - -// SNEAKERS - -/datum/greyscale_config/sneakers/worn/digi - name = "Sneakers (Worn, Digi)" - icon_file = 'modular_skyrat/modules/GAGS/icons/sneakers_digi.dmi' - -/datum/greyscale_config/sneakers_orange/worn/digi - name = "Orange Sneakers (Worn, Digi)" - icon_file = 'modular_skyrat/modules/GAGS/icons/sneakers_digi.dmi' - -/datum/greyscale_config/sneakers/worn/vox - name = "Sneakers (Worn, Vox)" - icon_file = 'modular_skyrat/modules/GAGS/icons/sneakers_vox.dmi' - -/datum/greyscale_config/sneakers_orange/worn/vox - name = "Orange Sneakers (Worn, Vox)" - icon_file = 'modular_skyrat/modules/GAGS/icons/sneakers_vox.dmi' - -/datum/greyscale_config/sneakers/worn/teshari - name = "Sneakers (Worn, Teshari)" - icon_file = 'modular_skyrat/modules/GAGS/icons/sneakers_teshari.dmi' -digi -/datum/greyscale_config/sneakers_orange/worn/teshari - name = "Orange Sneakers (Worn, Teshari)" - icon_file = 'modular_skyrat/modules/GAGS/icons/sneakers_teshari.dmi' - -// Boots - -/datum/greyscale_config/boots - name = "Colorable Boots" - icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/boots/boots.json' - -/datum/greyscale_config/boots/worn - name = "Colorable Boots (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/boots/boots_worn.json' - -/datum/greyscale_config/boots/worn/digi - icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_digi.dmi' - -/datum/greyscale_config/boots/worn/teshari - icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_teshari.dmi' - -/datum/greyscale_config/boots/worn/newvox - icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_newvox.dmi' - -/datum/greyscale_config/boots/worn/oldvox - icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_oldvox.dmi' - -// Laceups - -/datum/greyscale_config/laceup - name = "Colorable Laceups" - icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/laceups/laceups.json' - -/datum/greyscale_config/laceup/worn - name = "Colorable Laceups (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/laceups/laceups_worn.json' - -/datum/greyscale_config/laceup/worn/digi - icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_digi.dmi' - -/datum/greyscale_config/laceup/worn/teshari - icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_teshari.dmi' - -/datum/greyscale_config/laceup/worn/newvox - icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_newvox.dmi' - -/datum/greyscale_config/laceup/worn/oldvox - icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_oldvox.dmi' - -// Sandals - -/datum/greyscale_config/sandals - name = "Colorable Sandals" - icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/sandals/sandals.json' - -/datum/greyscale_config/sandals/worn - name = "Colorable Sandals (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/sandals/sandals_worn.json' - -/datum/greyscale_config/sandals/worn/digi - icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_digi.dmi' - -/datum/greyscale_config/sandals/worn/teshari - icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_teshari.dmi' - -/datum/greyscale_config/sandals/worn/newvox - icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_newvox.dmi' - -/datum/greyscale_config/sandals/worn/oldvox - icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_oldvox.dmi' - -// WRAPS - -/datum/greyscale_config/clothwraps - name = "Cloth Wraps" - icon_file = 'modular_skyrat/modules/GAGS/icons/shoes.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/wraps/wraps.json' - -/datum/greyscale_config/clothwraps/worn - name = "Cloth Wraps (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/wraps/wraps_worn.json' - -/datum/greyscale_config/clothwraps/worn/digi - name = "Cloth Wraps (Worn, Digi)" - -/datum/greyscale_config/legwraps - name = "Leg Wraps" - icon_file = 'modular_skyrat/modules/GAGS/icons/shoes.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/wraps/legwraps.json' - -/datum/greyscale_config/legwraps/worn - name = "Leg Wraps (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/wraps/legwraps_worn.json' - -/datum/greyscale_config/legwraps/worn/digi - name = "Leg Wraps (Worn, Digi)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/wraps/legwraps_worn_digi.json' - -/datum/greyscale_config/armwraps - name = "Cloth Arm Wraps" - icon_file = 'modular_skyrat/master_files/icons/donator/obj/clothing/gloves.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/arm_wraps/arm_wraps.json' - -/datum/greyscale_config/armwraps/worn - name = "Cloth Arm Wraps (Worn)" - icon_file = 'modular_skyrat/master_files/icons/donator/mob/clothing/hands.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/arm_wraps/arm_wraps_worn.json' - -// MISC SHOES - -/datum/greyscale_config/heels - name = "High Heels" - icon_file = 'modular_skyrat/modules/GAGS/icons/heels.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/heels/heels.json' - -/datum/greyscale_config/heels/worn - name = "High Heels (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/heels/heels_worn.json' - -/datum/greyscale_config/heels/worn/digi - name = "High Heels (Worn, Digi)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/heels/heels_worn_digi.json' - -/datum/greyscale_config/fancyheels - name = "Fancy Heels" - icon_file = 'modular_skyrat/modules/GAGS/icons/fancyheels.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/fancyheels/fancyheels.json' - -/datum/greyscale_config/fancyheels/worn - name = "Fancy Heels (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn.json' - -/datum/greyscale_config/fancyheels/worn/digi - name = "Fancy Heels (Worn, Digi)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn_digi.json' - -// TESHARI FALLBACKS. - -/datum/greyscale_config/teshari - name = "Teshari Clothing" - icon_file = 'modular_skyrat/modules/GAGS/icons/teshari_fallbacks.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/under.json' - -/datum/greyscale_config/teshari/under - name = "Teshari Under" - json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/under.json' - -/datum/greyscale_config/teshari/under_skirt - name = "Teshari Skirt" - json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/under_skirt.json' - -/datum/greyscale_config/teshari/shoes - name = "Teshari Shoes" - json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/shoes.json' - -/datum/greyscale_config/teshari/gloves - name = "Teshari Gloves" - json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/gloves.json' - -/datum/greyscale_config/teshari/glasses - name = "Teshari Glasses" - json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/glasses.json' - -/datum/greyscale_config/teshari/coat - name = "Teshari Coat" - json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/coat.json' - -/datum/greyscale_config/teshari/armor - name = "Teshari Armor" - json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/armor.json' - -/datum/greyscale_config/teshari/backpack - name = "Teshari Backpack" - json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/backpack.json' - -/datum/greyscale_config/teshari/spacesuit - name = "Teshari Spacesuit" - json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/spacesuit.json' - -/datum/greyscale_config/teshari/cloak - name = "Teshari Cloak" - json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/cloak.json' - -/datum/greyscale_config/teshari/tie - name = "Teshari Tie" - json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/tie.json' - -/datum/greyscale_config/teshari/scarf - name = "Teshari Scarf" - json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/scarf.json' - -/datum/greyscale_config/teshari/modcontrol - name = "Teshari Modsuit" - json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/modcontrol.json' - -/datum/greyscale_config/teshari/hardsuit - name = "Teshari Hardsuit" - json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/hardsuit.json' - -/* -* CIN SURPLUS ARMOR -*/ - -// Helmet -/datum/greyscale_config/cin_surplus_helmet - name = "CIN Surplus Helmet" - icon_file = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/helmet.json' - -/datum/greyscale_config/cin_surplus_helmet/object - name = "CIN Surplus Helmet (OBJ)" - icon_file = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi' - -// Undersuit -/datum/greyscale_config/cin_surplus_undersuit - name = "CIN Surplus Undersuit" - icon_file = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/undersuit.json' - -/datum/greyscale_config/cin_surplus_undersuit/object - name = "CIN Surplus Undersuit (OBJ)" - icon_file = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi' - -/datum/greyscale_config/cin_surplus_undersuit/digi - icon_file = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_digi.dmi' - -// Backpack -/datum/greyscale_config/cin_surplus_backpack - name = "CIN Surplus Backpack" - icon_file = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/backpack.json' - -/datum/greyscale_config/cin_surplus_backpack/object - name = "CIN Surplus Backpack (OBJ)" - icon_file = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi' - -// Chestrig -/datum/greyscale_config/cin_surplus_chestrig - name = "CIN Surplus Chestrig" - icon_file = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/chestrig.json' - -/datum/greyscale_config/cin_surplus_chestrig/object - name = "CIN Surplus Chestrig (OBJ)" - icon_file = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi' - -/* -* ITEMS -*/ - -/datum/greyscale_config/id_card - name = "Colourable ID Card" - icon_file = 'modular_skyrat/modules/GAGS/icons/id_card.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/items/id_card.json' - -/datum/greyscale_config/wargame_hologram_projector - name = "Wargame Hologram Projector" - icon_file = 'modular_skyrat/modules/wargame_projectors/icons/projectors_and_holograms.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/wargame_holoprojector/projector.json' - -// Evil primitive catgirl clothing - -/datum/greyscale_config/primitive_catgirl_wraps - name = "Primitive Body Wraps" - icon_file = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps.json' - -/datum/greyscale_config/primitive_catgirl_wraps/worn - name = "Primitive Body Wraps (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps_worn.json' - -/datum/greyscale_config/primitive_catgirl_armwraps - name = "Arm Wraps" - icon_file = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps.json' - -/datum/greyscale_config/primitive_catgirl_armwraps/worn - name = "Arm Wraps (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps_worn.json' - -/datum/greyscale_config/primitive_catgirl_coat - name = "Primitive Fur Coat" - icon_file = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/coat.json' - -/datum/greyscale_config/primitive_catgirl_coat/worn - name = "Primitive Fur Coat (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/coat_worn.json' - -/datum/greyscale_config/primitive_catgirl_boots - name = "Primitive Winter Boots" - icon_file = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/boots.json' - -/datum/greyscale_config/primitive_catgirl_boots/worn - name = "Primitive Winter Boots (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/boots_worn.json' - -/datum/greyscale_config/primitive_catgirl_gaiter - name = "Neck Gaiter" - icon_file = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter.json' - -/datum/greyscale_config/primitive_catgirl_gaiter/worn - name = "Neck Gaiter (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter_worn.json' - -/datum/greyscale_config/primitive_catgirl_gauntlets - name = "Gauntlets" - icon_file = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi' - json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets.json' - -/datum/greyscale_config/primitive_catgirl_gauntlets/worn - name = "Gauntlets (Worn)" - json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets_worn.json' diff --git a/modular_skyrat/modules/GAGS/icons/jumpsuit_better_vox.dmi b/modular_skyrat/modules/GAGS/icons/jumpsuit_better_vox.dmi deleted file mode 100644 index 219995affaf54c..00000000000000 Binary files a/modular_skyrat/modules/GAGS/icons/jumpsuit_better_vox.dmi and /dev/null differ diff --git a/modular_skyrat/modules/GAGS/nsfw/greyscale_configs.dm b/modular_skyrat/modules/GAGS/nsfw/greyscale_configs.dm deleted file mode 100644 index 5a1b186d6e9212..00000000000000 --- a/modular_skyrat/modules/GAGS/nsfw/greyscale_configs.dm +++ /dev/null @@ -1,215 +0,0 @@ -/* -* NSFW GREYSCALE CONFIGS TO GO IN HERE -*/ - -// MASKS - -/datum/greyscale_config/ballgag - name = "Ball Gag" - icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_masks.dmi' - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag.json' - -/datum/greyscale_config/ballgag/worn - name = "Ball Gag (Worn)" - icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi' - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag_worn.json' - -/datum/greyscale_config/ballgag/left_hand - name = "Ball Gag (Inhand, Left)" - icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_left.json' - -/datum/greyscale_config/ballgag/right_hand - name = "Ball Gag (Inhand, Right)" - icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_right.json' - -/datum/greyscale_config/ballgag/choking_small - name = "Choke Gag (Small)" - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/mask/choking_small.json' - -/datum/greyscale_config/ballgag/choking_medium - name = "Choke Gag (Medium)" - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/mask/choking_medium.json' - -/datum/greyscale_config/ballgag/choking_large - name = "Choke Gag (Large)" - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/mask/choking_large.json' - -//shibari stand - -/datum/greyscale_config/shibari_stand - name = "Shibari Stand" - icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi' - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/structures/shibari_stand.json' - -/datum/greyscale_config/shibari_stand_item - name = "Shibari Stand (Item)" - icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi' - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_stand_item.json' - -/datum/greyscale_config/shibari_stand_ropes - name = "Shibari Stand (Rope Overlays)" - icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi' - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/structures/shibari_stand_ropes.json' - -//shibari - -/datum/greyscale_config/shibari_rope - name = "Shibari Rope" - icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari.json' - -/datum/greyscale_config/shibari_rope_inhand_left - name = "Shibari Rope (Inhand, Left)" - icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_inhands.json' - -/datum/greyscale_config/shibari_rope_inhand_right - name = "Shibari Rope (Inhand, Right)" - icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_inhands.json' - -/datum/greyscale_config/shibari_rope/med - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_med.json' - -/datum/greyscale_config/shibari_rope/high - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_high.json' - -/datum/greyscale_config/shibari - name = "Shibari" - icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi' - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json' - -/datum/greyscale_config/shibari/worn - name = "Shibari (Worn)" - icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi' - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json' - -/datum/greyscale_config/shibari/worn/digi - name = "Shibari (Worn, Digi)" - icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-digi.dmi' - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json' - -/datum/greyscale_config/shibari/worn/taur_snake - name = "Shibari (Worn, Taur Snake)" - icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-snake.dmi' - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json' - -/datum/greyscale_config/shibari/worn/taur_paw - name = "Shibari (Worn, Taur Paw)" - icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-paw.dmi' - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json' - -/datum/greyscale_config/shibari/worn/taur_hoof - name = "Shibari (Worn, Taur Hoof)" - icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-hoof.dmi' - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json' - -//body - -/datum/greyscale_config/shibari/body - name = "Shibari Body" - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json' - -/datum/greyscale_config/shibari/body/worn - name = "Shibari Body (Worn)" - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json' - -/datum/greyscale_config/shibari/body/worn/digi - name = "Shibari Body (Worn, Digi)" - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json' - -/datum/greyscale_config/shibari/body/worn/taur_snake - name = "Shibari Body (Worn, Taur Snake)" - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json' - -/datum/greyscale_config/shibari/body/worn/taur_paw - name = "Shibari Body (Worn, Taur Paw)" - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json' - -/datum/greyscale_config/shibari/body/worn/taur_hoof - name = "Shibari Body (Worn, Taur Hoof)" - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json' - -//groin - -/datum/greyscale_config/shibari/groin - name = "Shibari Groin" - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/groin.json' - -/datum/greyscale_config/shibari/groin/worn - name = "Shibari Groin (Worn)" - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/groin.json' - -/datum/greyscale_config/shibari/groin/worn/digi - name = "Shibari Groin (Worn, Digi)" - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/groin.json' - -/datum/greyscale_config/shibari/groin/worn/taur_snake - name = "Shibari Groin (Worn, Taur Snake)" - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/groin.json' - -/datum/greyscale_config/shibari/groin/worn/taur_paw - name = "Shibari Groin (Worn, Taur Paw)" - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/groin.json' - -/datum/greyscale_config/shibari/groin/worn/taur_hoof - name = "Shibari Groin (Worn, Taur Hoof)" - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/groin.json' - -//fullbody - -/datum/greyscale_config/shibari/fullbody - name = "Shibari Fullbody" - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/fullbody.json' - -/datum/greyscale_config/shibari/worn/fullbody - name = "Shibari Fullbody (Worn)" - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/fullbody.json' - -/datum/greyscale_config/shibari/fullbody/worn/digi - name = "Shibari Fullbody (Worn, Digi)" - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/fullbody.json' - -/datum/greyscale_config/shibari/fullbody/worn/taur_snake - name = "Shibari Fullbody (Worn, Taur Snake)" - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/fullbody.json' - -/datum/greyscale_config/shibari/fullbody/worn/taur_paw - name = "Shibari Fullbody (Worn, Taur Paw)" - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/fullbody.json' - -/datum/greyscale_config/shibari/fullbody/worn/taur_hoof - name = "Shibari Fullbody (Worn, Taur Hoof)" - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/fullbody.json' - -//hands - -/datum/greyscale_config/shibari/hands - name = "Shibari Hands" - icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi' - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/hands.json' - -/datum/greyscale_config/shibari/hands/worn - name = "Shibari Hands (Worn)" - icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi' - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/hands.json' - -//legs - -/datum/greyscale_config/shibari/legs - name = "Shibari Legs" - icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi' - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/legs.json' - -/datum/greyscale_config/shibari/legs/worn - name = "Shibari Legs (Worn)" - icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi' - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/legs.json' - -/datum/greyscale_config/shibari/legs/worn/digi - name = "Shibari Legs Digi (Worn, Digi)" - icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi' - json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/legs.json' - diff --git a/modular_skyrat/modules/Midroundtraitor/code/event.dm b/modular_skyrat/modules/Midroundtraitor/code/event.dm deleted file mode 100644 index ebaa5abaf44ba9..00000000000000 --- a/modular_skyrat/modules/Midroundtraitor/code/event.dm +++ /dev/null @@ -1,79 +0,0 @@ -/datum/dynamic_ruleset/midround/from_ghosts/lone_infiltrator - name = "Lone Infiltrator" - antag_datum = /datum/antagonist/traitor/lone_infiltrator - midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT - antag_flag = ROLE_LONE_INFILTRATOR - restricted_roles = list(JOB_CYBORG, - JOB_AI, - JOB_SECURITY_OFFICER, - JOB_WARDEN, - JOB_DETECTIVE, - JOB_HEAD_OF_SECURITY, - JOB_CAPTAIN, - JOB_CORRECTIONS_OFFICER, - JOB_NT_REP, - JOB_BLUESHIELD, - JOB_ORDERLY, - JOB_BOUNCER, - JOB_CUSTOMS_AGENT, - JOB_ENGINEERING_GUARD, - JOB_SCIENCE_GUARD, - ) - required_candidates = 1 - weight = 4 //Slightly less common than normal midround traitors. - cost = 4 //But also slightly more costly. - minimum_players = 10 - var/list/spawn_locs = list() - -/datum/dynamic_ruleset/midround/from_ghosts/lone_infiltrator/execute() - for(var/obj/effect/landmark/carpspawn/carp in GLOB.landmarks_list) - spawn_locs += carp.loc - if(!length(spawn_locs)) - message_admins("No valid spawn locations found, aborting...") - return MAP_ERROR - return ..() - -/datum/dynamic_ruleset/midround/from_ghosts/lone_infiltrator/generate_ruleset_body(mob/applicant) - var/datum/mind/player_mind = new /datum/mind(applicant.key) - - var/mob/living/carbon/human/operative = new(pick(spawn_locs)) - applicant.client.prefs.safe_transfer_prefs_to(operative) - operative.dna.update_dna_identity() - operative.dna.species.pre_equip_species_outfit(null, operative) - operative.regenerate_icons() - SSquirks.AssignQuirks(operative, applicant.client, TRUE, TRUE, null, FALSE, operative) - player_mind.set_assigned_role(SSjob.GetJobType(/datum/job/lone_operative)) - player_mind.special_role = "Lone Infiltrator" - player_mind.active = TRUE - player_mind.transfer_to(operative) - player_mind.add_antag_datum(/datum/antagonist/traitor/lone_infiltrator) - - message_admins("[ADMIN_LOOKUPFLW(operative)] has been made into lone infiltrator by midround ruleset.") - log_game("[key_name(operative)] was spawned as a lone infiltrator by midround ruleset.") - return operative - -//OUTFIT// -/datum/outfit/syndicateinfiltrator - name = "Syndicate Operative - Infiltrator" - - uniform = /obj/item/clothing/under/syndicate - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - ears = /obj/item/radio/headset/syndicate/alt - id = /obj/item/card/id/advanced/chameleon - glasses = /obj/item/clothing/glasses/night - mask = /obj/item/clothing/mask/gas/syndicate - back = /obj/item/mod/control/pre_equipped/nuclear/chameleon - r_pocket = /obj/item/tank/internals/emergency_oxygen/engi - internals_slot = ITEM_SLOT_RPOCKET - belt = /obj/item/storage/belt/military - backpack_contents = list(/obj/item/storage/box/survival/syndie=1,\ - /obj/item/tank/jetpack/oxygen/harness=1,\ - /obj/item/gun/ballistic/automatic/pistol=1,\ - /obj/item/knife/combat/survival) - - id_trim = /datum/id_trim/chameleon/operative - -/datum/outfit/syndicateinfiltrator/post_equip(mob/living/carbon/human/H) - H.faction |= ROLE_SYNDICATE - H.update_icons() diff --git a/modular_skyrat/modules/SEVA_suit/code/seva_obj.dm b/modular_skyrat/modules/SEVA_suit/code/seva_obj.dm deleted file mode 100644 index dad662fee36eb5..00000000000000 --- a/modular_skyrat/modules/SEVA_suit/code/seva_obj.dm +++ /dev/null @@ -1,59 +0,0 @@ -/obj/item/clothing/suit/hooded/seva - name = "SEVA suit" - desc = "A fire-proof suit for exploring hot environments. Its design doesn't allow for upgrading with goliath plates." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/suit_digi.dmi' - worn_icon_teshari = 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/suit.dmi' - icon_state = "seva" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEJUMPSUIT|HIDETAIL - cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - w_class = WEIGHT_CLASS_BULKY - max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT - heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - hoodtype = /obj/item/clothing/head/hooded/seva - armor_type = /datum/armor/hooded_seva - resistance_flags = FIRE_PROOF - transparent_protection = HIDEJUMPSUIT - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/recharge/kinetic_accelerator, /obj/item/pickaxe) - -/datum/armor/hooded_seva - melee = 20 - bullet = 10 - laser = 10 - energy = 10 - bomb = 30 - bio = 50 - fire = 100 - acid = 50 - wound = 10 - -/obj/item/clothing/head/hooded/seva - name = "SEVA hood" - desc = "A fire-proof hood for exploring hot environments. Its design doesn't allow for upgrading with goliath plates." - icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' - worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/head_muzzled.dmi' - worn_icon_teshari = 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/head.dmi' - icon_state = "seva" - body_parts_covered = HEAD - flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS|HIDESNOUT - cold_protection = HEAD - heat_protection = HEAD - max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT - clothing_traits = list(TRAIT_ASHSTORM_IMMUNE) - armor_type = /datum/armor/hooded_seva - resistance_flags = FIRE_PROOF - supports_variations_flags = CLOTHING_SNOUTED_VARIATION //I can't find the snout sprite so I'm just gonna force it to do this - -/obj/item/clothing/mask/gas/seva - name = "SEVA mask" - desc = "A head-covering mask that can be connected to an external air supply. Intended for use with the SEVA Suit." - icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' - worn_icon_teshari = 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/mask.dmi' - icon_state = "seva" - resistance_flags = FIRE_PROOF - flags_inv = HIDEFACIALHAIR|HIDEFACE|HIDEEYES|HIDEEARS|HIDEHAIR|HIDESNOUT diff --git a/modular_skyrat/modules/SiliconQoL/code/robotic_factory.dm b/modular_skyrat/modules/SiliconQoL/code/robotic_factory.dm deleted file mode 100644 index 4ff1032bec188f..00000000000000 --- a/modular_skyrat/modules/SiliconQoL/code/robotic_factory.dm +++ /dev/null @@ -1,71 +0,0 @@ -/obj/machinery/transformer_rp - name = "\improper Automatic Robotic Factory 5000" - desc = "A large metallic machine with an entrance and an exit. A sign on \ - the side reads, 'Mass robot production facility'" - icon = 'icons/obj/machines/recycling.dmi' - icon_state = "separator-AO1" - layer = ABOVE_ALL_MOB_LAYER // Overhead - density = TRUE - /// How many cyborgs are we storing - var/stored_cyborgs = 1 - /// How many cyborgs can we store? - var/max_stored_cyborgs = 4 - /// How much between the construction of a cyborg? - var/cooldown_duration = 5 MINUTES - /// Handles the timer , shouldn't touch. - var/cooldown_timer - /// The countdown itself - var/obj/effect/countdown/transformer/countdown - /// The master AI , assigned when placed down with the ability. - var/mob/living/silicon/ai/master_ai - -/obj/machinery/transformer_rp/Initialize(mapload) - // On us - . = ..() - new /obj/machinery/conveyor/auto(loc, WEST) - countdown = new(src) - countdown.start() - -/obj/machinery/transformer_rp/examine(mob/user) - . = ..() - if(issilicon(user) || isobserver(user)) - . += "It will create a new cyborg in [DisplayTimeText(cooldown_timer - world.time)]." - -/obj/machinery/transformer_rp/Destroy() - QDEL_NULL(countdown) - . = ..() - -/obj/machinery/transformer_rp/update_icon_state() - . = ..() - if(machine_stat & (BROKEN|NOPOWER)) - icon_state = "separator-AO0" - else - icon_state = initial(icon_state) - -/obj/machinery/transformer_rp/attack_ghost(mob/dead/observer/target_ghost) - . = ..() - create_a_cyborg(target_ghost) - -/obj/machinery/transformer_rp/process() - if(cooldown_timer <= world.time) - cooldown_timer = world.time + cooldown_duration - update_icon() - if(stored_cyborgs > max_stored_cyborgs) - return - stored_cyborgs++ - notify_ghosts("A new cyborg shell has been created at the [src]", source = src, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "New malfunctioning cyborg created!") - -/obj/machinery/transformer_rp/proc/create_a_cyborg(mob/dead/observer/target_ghost) - if(machine_stat & (BROKEN|NOPOWER)) - return - if(stored_cyborgs<1) - return - var/cyborg_ask = tgui_alert(target_ghost, "Become a cyborg?", "Are you a terminator?", list("Yes", "No")) - if(cyborg_ask == "No" || !src || QDELETED(src)) - return FALSE - var/mob/living/silicon/robot/cyborg = new /mob/living/silicon/robot(loc) - cyborg.key = target_ghost.key - cyborg.set_connected_ai(master_ai) - cyborg.lawsync() - cyborg.lawupdate = TRUE - stored_cyborgs-- diff --git a/modular_skyrat/modules/Syndie_edits/code/syndie_edits.dm b/modular_skyrat/modules/Syndie_edits/code/syndie_edits.dm deleted file mode 100644 index b800778df80b76..00000000000000 --- a/modular_skyrat/modules/Syndie_edits/code/syndie_edits.dm +++ /dev/null @@ -1,209 +0,0 @@ -//DS-2/Syndicate clothing. - -/obj/item/clothing/suit/armor/vest/capcarapace/syndicate - icon = 'modular_skyrat/modules/syndie_edits/icons/obj.dmi' - worn_icon = 'modular_skyrat/modules/syndie_edits/icons/worn.dmi' - icon_state = "syndievest" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - - -/obj/item/clothing/suit/armor/vest/capcarapace/syndicate/Initialize(mapload) - . = ..() - AddComponent(/datum/component/toggle_icon) - -/obj/item/clothing/suit/armor/vest/capcarapace/syndicate/winter - name = "syndicate captain's winter vest" - desc = "A sinister yet comfortable looking vest of advanced armor worn over a black and red fireproof jacket. The fur is said to be from wolves on the icemoon." - icon = 'modular_skyrat/modules/syndie_edits/icons/obj.dmi' - worn_icon = 'modular_skyrat/modules/syndie_edits/icons/worn.dmi' - icon_state = "syndievest_winter" - body_parts_covered = CHEST|GROIN - cold_protection = CHEST|GROIN|ARMS - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - resistance_flags = FIRE_PROOF - -/obj/item/clothing/suit/armor/vest/capcarapace/syndicate/winter/Initialize(mapload) - . = ..() - AddComponent(/datum/component/toggle_icon) - -/obj/item/clothing/head/hats/warden/syndicate - name = "master at arms' police hat" - desc = "A fashionable police cap emblazoned with a golden badge, issued to the Master at Arms. Protects the head from impacts." - icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' - icon_state = "policehelm_syndie" - dog_fashion = null - -/obj/item/clothing/head/helmet/swat/ds - name = "SWAT helmet" - desc = "A robust and spaceworthy helmet with a small cross on it along with 'IP' written across the earpad." - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/helmet.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/helmet.dmi' - icon_state = "swat_ds" - supports_variations_flags = CLOTHING_SNOUTED_VARIATION - -/obj/item/clothing/head/beret/sec/syndicate - name = "brig officer's beret" - desc = "A stylish and protective beret, produced and manufactured by Interdyne Pharmaceuticals with help from the Gorlex Marauders." - greyscale_config = /datum/greyscale_config/beret_badge - greyscale_config_worn = /datum/greyscale_config/beret_badge/worn - icon_state = "beret_badge" - greyscale_colors = "#3F3C40#DB2929" - -/obj/item/clothing/mask/gas/syndicate/ds - name = "balaclava" - desc = "A fancy balaclava, while it doesn't muffle your voice, it's fireproof and has a miniature rebreather for internals. Comfy to boot!" - icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' - icon_state = "balaclava_ds" - flags_inv = HIDEFACE | HIDEEARS | HIDEFACIALHAIR - alternate_worn_layer = LOW_FACEMASK_LAYER //This lets it layer below glasses and headsets; yes, that's below hair, but it already has HIDEHAIR - -/obj/item/clothing/mask/gas/sechailer/syndicate - name = "neck gaiter" - desc = "For the agent wanting to keep a low profile whilst concealing their identity. Has a small respirator to be used with internals." - actions_types = list(/datum/action/item_action/adjust) - alternate_worn_layer = BODY_FRONT_UNDER_CLOTHES - icon_state = "half_mask" - icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' - unique_death = 'modular_skyrat/master_files/sound/effects/hacked.ogg' - voice_filter = null - use_radio_beeps_tts = FALSE - -/obj/item/clothing/shoes/combat //TO-DO: Move these overrides out of a syndicate file! - icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' - icon_state = "combat" - -/obj/item/clothing/gloves/combat - icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi' - icon_state = "combat" - worn_icon_teshari = TESHARI_HANDS_ICON - -/obj/item/clothing/gloves/combat/wizard - icon = 'icons/obj/clothing/gloves.dmi' - worn_icon = null - -/obj/item/clothing/gloves/tackler/combat/insulated - icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi' - icon_state = "combat" - -/obj/item/clothing/gloves/krav_maga/combatglovesplus - icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi' - icon_state = "combat" - -/obj/item/clothing/gloves/krav_maga/combatglovesplus/maa - name = "master at arms' combat gloves" - desc = "A set of combat gloves plus emblazoned with red knuckles, showing dedication to the trade while also hiding any blood left after use." - icon_state = "maagloves" - -/obj/item/storage/belt/security/webbing/ds - name = "brig officer webbing" - icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi' - icon_state = "webbingds" - worn_icon_state = "webbingds" - uses_advanced_reskins = FALSE - -/obj/item/clothing/suit/armor/bulletproof/old - desc = "A Type III heavy bulletproof vest that excels in protecting the wearer against traditional projectile weaponry and explosives to a minor extent." - icon = 'icons/obj/clothing/suits/armor.dmi' - worn_icon = 'icons/mob/clothing/suits/armor.dmi' - icon_state = "bulletproof" - body_parts_covered = CHEST //TG's version has no groin/arm padding - -/obj/item/clothing/under/syndicate/skyrat/overalls - name = "utility overalls turtleneck" - desc = "A pair of spiffy overalls with a turtleneck underneath, useful for both engineering and botanical work." - icon_state = "syndicate_overalls" - can_adjust = TRUE - -/obj/item/clothing/under/syndicate/skyrat/overalls/skirt - name = "utility overalls skirtleneck" - desc = "A pair of spiffy overalls with a turtleneck underneath, this one is a skirt instead, breezy." - icon_state = "syndicate_overallskirt" - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - dying_key = DYE_REGISTRY_JUMPSKIRT - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/head/soft/sec/syndicate - name = "engine tech utility cover" - desc = "A utility cover for an engine technician, there's a tag that reads 'IP-DS-2'." - icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' - icon_state = "dssoft" - soft_type = "ds" - -//Maid Outfit -/obj/item/clothing/head/costume/maidheadband/syndicate - name = "tactical maid headband" - desc = "Tacticute." - icon_state = "syndimaid_headband" - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/costume.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/costume.dmi' - -/obj/item/clothing/gloves/combat/maid - name = "combat maid sleeves" - desc = "These 'tactical' gloves and sleeves are fireproof and electrically insulated. Warm to boot." - icon_state = "syndimaid_arms" - -/obj/item/clothing/under/syndicate/skyrat/maid - name = "tactical maid outfit" - desc = "A 'tactical' skirtleneck fashioned to the likeness of a maid outfit. Why the Syndicate has these, you'll never know." - icon_state = "syndimaid" - armor_type = /datum/armor/clothing_under/none - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - dying_key = DYE_REGISTRY_JUMPSKIRT - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/under/syndicate/skyrat/maid/Initialize(mapload) - . = ..() - var/obj/item/clothing/accessory/maidcorset/syndicate/A = new (src) - attach_accessory(A) - -/obj/item/clothing/accessory/maidcorset/syndicate - name = "syndicate maid apron" - desc = "Practical? No. Tactical? Also no. Cute? Most definitely yes." - icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi' - icon_state = "syndimaid_corset" - minimize_when_attached = FALSE - attachment_slot = null - -//Wintercoat & Hood -/obj/item/clothing/suit/hooded/wintercoat/skyrat/syndicate - name = "syndicate winter coat" - desc = "A sinister black coat with red accents and a fancy mantle, it feels like it can take a hit. The zipper tab looks like a triple headed snake in the shape of an S, spooky." - icon_state = "coatsyndie" - inhand_icon_state = "coatwinter" - armor_type = /datum/armor/wintercoat_syndicate - hoodtype = /obj/item/clothing/head/hooded/winterhood/skyrat/syndicate - -/datum/armor/wintercoat_syndicate - melee = 25 - bullet = 15 - laser = 30 - energy = 40 - bomb = 25 - acid = 45 - -/obj/item/clothing/suit/hooded/wintercoat/skyrat/syndicate/Initialize(mapload) - . = ..() - allowed += GLOB.security_wintercoat_allowed - -/obj/item/clothing/head/hooded/winterhood/skyrat/syndicate - desc = "A sinister black hood with armor padding." - icon_state = "hood_syndie" - armor_type = /datum/armor/winterhood_syndicate - -/datum/armor/winterhood_syndicate - melee = 25 - bullet = 15 - laser = 30 - energy = 40 - bomb = 25 - acid = 45 diff --git a/modular_skyrat/modules/advanced_shuttles/code/closet.dm b/modular_skyrat/modules/advanced_shuttles/code/closet.dm deleted file mode 100644 index 358afa152cfe5d..00000000000000 --- a/modular_skyrat/modules/advanced_shuttles/code/closet.dm +++ /dev/null @@ -1,107 +0,0 @@ -/obj/structure/closet/shuttle/closet_update_overlays(list/new_overlays) - . = new_overlays - if(enable_door_overlay && !is_animating_door) - if(opened && has_opened_overlay) - var/mutable_appearance/door_overlay = mutable_appearance(icon, "[icon_door || icon_state]_open", alpha = src.alpha) //This was the only change, adding icon_door; TG wouldnt want it. - . += door_overlay - door_overlay.overlays += emissive_blocker(door_overlay.icon, door_overlay.icon_state, src, alpha = door_overlay.alpha) // If we don't do this the door doesn't block emissives and it looks weird. - else if(has_closed_overlay) - . += "[icon_door || icon_state]_door" -//TG won't ever really need this because their lockers with non-matching fronts dont have non-matching backs; so I simply re-define the proc for our shuttleclosets - -/obj/structure/closet/shuttle - anchored = TRUE - density = TRUE - can_be_unanchored = FALSE - icon = 'modular_skyrat/master_files/icons/obj/closet.dmi' - icon_state = "wallcloset" - icon_door = "wallcloset_mesh" - door_anim_time = 0 //CONVERT THESE DOORS YOU LAZY ASSHATS - -/obj/structure/closet/shuttle/white - icon_state = "wallcloset_white" - icon_door = "wallcloset_white" - -/obj/structure/closet/shuttle/emergency - name = "emergency closet" - desc = "It's a storage unit for emergency breath masks and O2 tanks." - icon_door = "wallcloset_o2" - -/obj/structure/closet/shuttle/emergency/PopulateContents() - for (var/i in 1 to 2) - new /obj/item/tank/internals/emergency_oxygen/engi(src) - new /obj/item/clothing/mask/gas/alt(src) - new /obj/item/storage/toolbox/emergency(src) - -/obj/structure/closet/shuttle/emergency/white - icon_state = "wallcloset_white" - -/obj/structure/closet/shuttle/medical - name = "first-aid closet" - desc = "It's a storage unit for emergency medical supplies." - icon_door = "wallcloset_med" - -/obj/structure/closet/shuttle/medical/PopulateContents() - new /obj/item/storage/medkit/emergency(src) - new /obj/item/healthanalyzer(src) - new /obj/item/reagent_containers/hypospray(src) - -/obj/structure/closet/shuttle/medical/white - icon_state = "wallcloset_white" - -/obj/structure/closet/shuttle/mining - desc = "It's a storage unit for emergency breath masks, O2 tanks, and a pressure suit." - icon_state = "wallcloset_white" - icon_door = "wallcloset_mining" - -/obj/structure/closet/shuttle/mining/PopulateContents() - for (var/i in 1 to 2) - new /obj/item/tank/internals/emergency_oxygen/engi(src) - new /obj/item/clothing/mask/breath(src) - new /obj/item/storage/toolbox/emergency(src) - new /obj/item/clothing/head/helmet/space(src) - new /obj/item/clothing/suit/space(src) - -/obj/structure/closet/shuttle/engivent - wall_mounted = TRUE - name = "engine ventilation" - desc = "An exhaust vent for the shuttle's engines. It looks just big enough to fit a person..." - icon_state = "vent" - icon_door = "vent" - -//Wall closets -/obj/structure/closet/firecloset/wall - wall_mounted = TRUE - max_mob_size = MOB_SIZE_SMALL - anchored = TRUE - density = TRUE - icon = 'modular_skyrat/master_files/icons/obj/closet.dmi' - icon_state = "fire_wall" - door_anim_time = 0 //CONVERT THESE DOORS YOU LAZY ASSHATS - -/obj/structure/closet/emcloset/wall - wall_mounted = TRUE - max_mob_size = MOB_SIZE_SMALL - anchored = TRUE - density = TRUE - icon = 'modular_skyrat/master_files/icons/obj/closet.dmi' - icon_state = "emergency_wall" - door_anim_time = 0 //CONVERT THESE DOORS YOU LAZY ASSHATS - -/obj/structure/closet/secure_closet/wall - wall_mounted = TRUE - max_mob_size = MOB_SIZE_SMALL - anchored = TRUE - density = TRUE - icon = 'modular_skyrat/master_files/icons/obj/closet.dmi' - icon_state = "closet_wall" - door_anim_time = 0 //CONVERT THESE DOORS YOU LAZY ASSHATS - -/obj/structure/closet/secure_closet/personal/wall - wall_mounted = TRUE - max_mob_size = MOB_SIZE_SMALL - anchored = TRUE - density = TRUE - icon = 'modular_skyrat/master_files/icons/obj/closet.dmi' - icon_state = "closet_wall" - door_anim_time = 0 //CONVERT THESE DOORS YOU LAZY ASSHATS diff --git a/modular_skyrat/modules/advanced_shuttles/code/decals.dm b/modular_skyrat/modules/advanced_shuttles/code/decals.dm deleted file mode 100644 index f9ad627aba70ac..00000000000000 --- a/modular_skyrat/modules/advanced_shuttles/code/decals.dm +++ /dev/null @@ -1,46 +0,0 @@ -/obj/structure/sign/shuttleg250 - name = "Transfer Shuttle G250" - desc = "Transfer Shuttle G250." - icon = 'modular_skyrat/modules/advanced_shuttles/icons/g250.dmi' //LARGE icon - icon_state = "g250" - -/obj/structure/fans/tiny/forcefield - name = "forcefield" - desc = "A fluctuating forcefield for ships to cross." - icon = 'modular_skyrat/modules/advanced_shuttles/icons/effects.dmi' - icon_state = "forcefield" - -//Floor Decals ----- -/obj/effect/turf_decal/shuttle/exploration - icon = 'modular_skyrat/modules/advanced_shuttles/icons/exploration_floor.dmi' - icon_state = "decal1" - -/obj/effect/turf_decal/shuttle/exploration/medbay - icon_state = "decalmed" - -/obj/effect/turf_decal/shuttle/exploration/cargostore - icon_state = "decalstore" - -/obj/effect/turf_decal/shuttle/exploration/bridge - icon_state = "decalbridge" - -/obj/effect/turf_decal/shuttle/exploration/o2 - icon_state = "decalo2" - -/obj/effect/turf_decal/shuttle/exploration/typhon - icon_state = "decal2" - -/obj/effect/turf_decal/shuttle/exploration/echidna - icon_state = "decal1" - -/obj/effect/turf_decal/shuttle/exploration/weapons - icon_state = "decal3" - -/obj/effect/turf_decal/shuttle/exploration/airlock - icon_state = "decal4" - -/obj/effect/turf_decal/shuttle/exploration/hazardstripe - icon_state = "hazard_decal" - -/obj/effect/turf_decal/shuttle/exploration/bot - icon_state = "bot_decal" diff --git a/modular_skyrat/modules/advanced_shuttles/code/shuttles.dm b/modular_skyrat/modules/advanced_shuttles/code/shuttles.dm deleted file mode 100644 index 78ffdffd034165..00000000000000 --- a/modular_skyrat/modules/advanced_shuttles/code/shuttles.dm +++ /dev/null @@ -1,188 +0,0 @@ -#define ARRIVALS_STATION "arrivals_stationary" -#define ARRIVALS_INTERLINK "arrivals_shuttle" -#define CONSOLE_ANNOUNCE_COOLDOWN 5 SECONDS - -/obj/docking_port/mobile/arrivals_skyrat - name = "NTV Relay" - shuttle_id = "arrivals_shuttle" - dir = WEST - port_direction = SOUTH - - callTime = 15 SECONDS - ignitionTime = 6 SECONDS - rechargeTime = 15 SECONDS - - movement_force = list("KNOCKDOWN" = 3, "THROW" = 0) - - ///Our shuttle's control console - var/obj/machinery/computer/shuttle/arrivals/console - ///How much time are we waiting before returning to interlink. Sets itself automatically from config file - var/wait_time - ///State variable. True when our shuttle is waiting before autoreturn - var/waiting = FALSE // would've been better to use shuttle's mode variable, but check() resets it to SHUTTLE_IDLE so it's more sane way to make this fully modular - -/obj/docking_port/mobile/arrivals_skyrat/Initialize(mapload) - . = ..() - wait_time = CONFIG_GET(number/arrivals_wait) - return INITIALIZE_HINT_LATELOAD - -/obj/docking_port/mobile/arrivals_skyrat/LateInitialize() - . = ..() - console = get_control_console() - -/obj/docking_port/mobile/arrivals_skyrat/check() - . = ..() - - if(!wait_time) //0 disables autoreturn - return - - if(mode != SHUTTLE_IDLE) - return - - if(waiting && !timer) - SSshuttle.moveShuttle(shuttle_id, ARRIVALS_INTERLINK, TRUE) // times up, we're leaving - waiting = FALSE - - var/current_dock = getDockedId() - if (current_dock != ARRIVALS_STATION) - return - - if(check_occupied()) - if(!waiting) - return - - timer = 0 - waiting = FALSE - - if(console && console.last_cancel_announce + CONSOLE_ANNOUNCE_COOLDOWN <= world.time) - console.say("Lifesigns detected onboard, automatic return aborted.") - console.last_cancel_announce = world.time - - return - - if(timer || waiting) - return - - setTimer(wait_time) - waiting = TRUE - - if(console && console.last_depart_announce + CONSOLE_ANNOUNCE_COOLDOWN <= world.time) - console.say("Commencing automatic return subroutine in [wait_time / 10] seconds.") - console.last_depart_announce = world.time - -/obj/docking_port/mobile/arrivals_skyrat/getModeStr() - . = ..() - return waiting ? "RTN" : . - -/** - * Checks if our shuttle is occupied by someone alive, and returns `TRUE` if it is, `FALSE` otherwise. -*/ -/obj/docking_port/mobile/arrivals_skyrat/proc/check_occupied() - for(var/alive_player in GLOB.alive_player_list) - if (get_area(alive_player) in shuttle_areas) - return TRUE - - return FALSE - -/obj/machinery/computer/shuttle/arrivals - name = "arrivals shuttle control" - desc = "The terminal used to control the arrivals interlink shuttle." - shuttleId = "arrivals_shuttle" - possible_destinations = "arrivals_stationary;arrivals_shuttle" - icon = 'modular_skyrat/modules/advanced_shuttles/icons/computer.dmi' - icon_state = "computer_frame" - icon_keyboard = "arrivals_key" - icon_screen = "arrivals" - light_color = COLOR_ORANGE_BROWN - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - connectable = FALSE //connecting_computer change: since icon_state is not a typical console, it cannot be connectable. - no_destination_swap = TRUE - - ///[world.time] when console last announced departure - var/last_depart_announce - ///[world.time] when console last announced canceling shuttle's return - var/last_cancel_announce - -/obj/machinery/computer/shuttle/arrivals/recall - name = "arrivals shuttle recall terminal" - desc = "Use this if your friends left you behind." - possible_destinations = "arrivals_stationary;arrivals_shuttle" - -/* -* MAP TEMPLATES -*/ - -/datum/map_template/shuttle/ferry - name = "NAV Monarch (Ferry)" - prefix = "_maps/shuttles/skyrat/" - port_id = "ferry" - suffix = "skyrat" - who_can_purchase = null - -/datum/map_template/shuttle/cargo/skyrat - name = "NLV Consign (Cargo)" - prefix = "_maps/shuttles/skyrat/" - port_id = "cargo" - suffix = "skyrat" - -/datum/map_template/shuttle/cargo/skyrat/delta - suffix = "delta_skyrat" //I hate this. Delta station is one tile different docking-wise, which fucks it ALL up unless we either a) change the map (this would be nonmodular and also press the engine against disposals) or b) this (actually easy, just dumb) - -/datum/map_template/shuttle/whiteship/blueshift - name = "SFS Christian" - description = "A large corvette that seems to have come under attack by some kind of alien infestation. A true asset if it's cleared out and repaired." - prefix = "_maps/shuttles/skyrat/" - port_id = "whiteship" - suffix = "blueshift" - -/datum/map_template/shuttle/arrivals_skyrat - name = "NTV Relay (Arrivals)" - prefix = "_maps/shuttles/skyrat/" - port_id = "arrivals" - suffix = "skyrat" - who_can_purchase = null - -/datum/map_template/shuttle/emergency/default - prefix = "_maps/shuttles/skyrat/" - suffix = "skyrat" - name = "Standard Emergency Shuttle" - description = "Nanotrasen's standard issue emergency shuttle." - occupancy_limit = 60 - -/datum/map_template/shuttle/labour/skyrat - name = "NMC Drudge (Labour)" - prefix = "_maps/shuttles/skyrat/" - suffix = "skyrat" - -/obj/docking_port/stationary/laborcamp_home - roundstart_template = /datum/map_template/shuttle/labour/skyrat - -/obj/docking_port/stationary/laborcamp_home/kilo - roundstart_template = /datum/map_template/shuttle/labour/skyrat - -/datum/map_template/shuttle/mining_common/skyrat - name = "NMC Chimera (Mining)" - prefix = "_maps/shuttles/skyrat/" - suffix = "skyrat" - -/obj/docking_port/stationary/mining_home/common - roundstart_template = /datum/map_template/shuttle/mining_common/skyrat - -/obj/docking_port/stationary/mining_home/common/kilo - roundstart_template = /datum/map_template/shuttle/mining_common/skyrat - -/datum/map_template/shuttle/mining/skyrat - name = "NMC Phoenix (Mining)" - prefix = "_maps/shuttles/skyrat/" - suffix = "skyrat" - -/obj/docking_port/stationary/mining_home - roundstart_template = /datum/map_template/shuttle/mining/skyrat - -/datum/map_template/shuttle/mining/skyrat/large - name = "NMC Manticore (Mining)" - suffix = "large_skyrat" - -#undef ARRIVALS_STATION -#undef ARRIVALS_INTERLINK -#undef CONSOLE_ANNOUNCE_COOLDOWN diff --git a/modular_skyrat/modules/advanced_shuttles/code/turfs.dm b/modular_skyrat/modules/advanced_shuttles/code/turfs.dm deleted file mode 100644 index 279ea874ad0c40..00000000000000 --- a/modular_skyrat/modules/advanced_shuttles/code/turfs.dm +++ /dev/null @@ -1,223 +0,0 @@ -/* -/area/shuttle - dynamic_lighting = DYNAMIC_LIGHTING_DISABLED -*/ - -/obj/docking_port/mobile/arrivals - -/turf/closed/wall/mineral/titanium/shuttle_wall - name = "shuttle wall" - desc = "A light-weight titanium wall used in shuttles." - icon = 'modular_skyrat/modules/advanced_shuttles/icons/pod.dmi' - icon_state = "" - base_icon_state = "" - smoothing_flags = null - smoothing_groups = null - canSmoothWith = null - -/turf/closed/wall/mineral/titanium/shuttle_wall/AfterChange(flags, oldType) - . = ..() - // Manually add space underlay, in a way similar to turf_z_transparency, - // but we actually show the old content of the same z-level, as desired for shuttles - - var/turf/underturf_path - - // Grab previous turf icon - if(!ispath(oldType, /turf/closed/wall/mineral/titanium/shuttle_wall)) - underturf_path = oldType - else - // Else use whatever SSmapping tells us, like transparent open tiles do - underturf_path = SSmapping.level_trait(z, ZTRAIT_BASETURF) || /turf/open/space - - var/mutable_appearance/underlay_appearance = mutable_appearance( - initial(underturf_path.icon), - initial(underturf_path.icon_state), - offset_spokesman = src, - layer = TURF_LAYER - 0.02, - plane = initial(underturf_path.plane)) - underlay_appearance.appearance_flags = RESET_ALPHA | RESET_COLOR - underlays += underlay_appearance - -/turf/closed/wall/mineral/titanium/shuttle_wall/window - opacity = FALSE - -/* -* POD -*/ - -/turf/closed/wall/mineral/titanium/shuttle_wall/pod - icon = 'modular_skyrat/modules/advanced_shuttles/icons/pod.dmi' - -/turf/closed/wall/mineral/titanium/shuttle_wall/window/pod - icon = 'modular_skyrat/modules/advanced_shuttles/icons/pod.dmi' - icon_state = "3,1" - -/* -* FERRY -*/ - -/turf/closed/wall/mineral/titanium/shuttle_wall/ferry - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi' - icon_state = "18,2" - -/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi' - icon_state = "18,2" - -/turf/open/floor/iron/shuttle/ferry - name = "shuttle floor" - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi' - icon_state = "floor1" - -/* -* EVAC -*/ - -/turf/closed/wall/mineral/titanium/shuttle_wall/evac - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - icon_state = "9,1" - -/turf/closed/wall/mineral/titanium/shuttle_wall/window/evac - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - icon_state = "9,1" - -/turf/open/floor/iron/shuttle/evac - name = "shuttle floor" - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - icon_state = "floor" - -/* -* ARRIVALS -*/ - -/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals - icon = 'modular_skyrat/modules/advanced_shuttles/icons/wagon.dmi' - icon_state = "3,1" - -/turf/closed/wall/mineral/titanium/shuttle_wall/window/arrivals - icon = 'modular_skyrat/modules/advanced_shuttles/icons/wagon.dmi' - icon_state = "3,1" - -/turf/open/floor/iron/shuttle/arrivals - name = "shuttle floor" - icon = 'modular_skyrat/modules/advanced_shuttles/icons/wagon.dmi' - icon_state = "floor" - -/* -* CARGO -*/ - -/turf/closed/wall/mineral/titanium/shuttle_wall/cargo - icon = 'modular_skyrat/modules/advanced_shuttles/icons/cargo.dmi' - icon_state = "3,1" - -/turf/closed/wall/mineral/titanium/shuttle_wall/window/cargo - icon = 'modular_skyrat/modules/advanced_shuttles/icons/cargo.dmi' - icon_state = "3,1" - -/turf/open/floor/iron/shuttle/cargo - name = "shuttle floor" - icon = 'modular_skyrat/modules/advanced_shuttles/icons/cargo.dmi' - icon_state = "floor" - -/* -* MINING -*/ - -/turf/closed/wall/mineral/titanium/shuttle_wall/mining - icon = 'modular_skyrat/modules/advanced_shuttles/icons/mining.dmi' - -/turf/closed/wall/mineral/titanium/shuttle_wall/window/mining - icon = 'modular_skyrat/modules/advanced_shuttles/icons/mining.dmi' - -/turf/closed/wall/mineral/titanium/shuttle_wall/mining_large - icon = 'modular_skyrat/modules/advanced_shuttles/icons/mining_large.dmi' - icon_state = "2,2" - dir = NORTH - -/turf/closed/wall/mineral/titanium/shuttle_wall/window/mining_large - icon = 'modular_skyrat/modules/advanced_shuttles/icons/mining_large.dmi' - icon_state = "6,3" - dir = NORTH - -/turf/closed/wall/mineral/titanium/shuttle_wall/mining_labor - icon = 'modular_skyrat/modules/advanced_shuttles/icons/mining_labor.dmi' - icon_state = "4,6" - dir = NORTH - -/turf/closed/wall/mineral/titanium/shuttle_wall/window/mining_labor - icon = 'modular_skyrat/modules/advanced_shuttles/icons/mining_labor.dmi' - icon_state = "4,4" - dir = NORTH - -/* -* MINING/RND/EXPLORATION FLOORS -*/ - -/turf/open/floor/iron/shuttle/exploration - name = "shuttle floor" - icon = 'modular_skyrat/modules/advanced_shuttles/icons/exploration_floor.dmi' - icon_state = "oside" - -/turf/open/floor/iron/shuttle/exploration/uside - icon_state = "uside" - -/turf/open/floor/iron/shuttle/exploration/corner - icon_state = "corner" - -/turf/open/floor/iron/shuttle/exploration/side - icon_state = "side" - -/turf/open/floor/iron/shuttle/exploration/corner_invcorner - icon_state = "corner_icorner" - -/turf/open/floor/iron/shuttle/exploration/adjinvcorner - icon_state = "adj_icorner" - -/turf/open/floor/iron/shuttle/exploration/oppinvcorner - icon_state = "opp_icorner" - -/turf/open/floor/iron/shuttle/exploration/invertcorner - icon_state = "icorner" - -/turf/open/floor/iron/shuttle/exploration/doubleinvertcorner - icon_state = "double_icorner" - -/turf/open/floor/iron/shuttle/exploration/tripleinvertcorner - icon_state = "tri_icorner" - -/turf/open/floor/iron/shuttle/exploration/doubleside - icon_state = "double_side" - -/turf/open/floor/iron/shuttle/exploration/quadinvertcorner - icon_state = "4icorner" - -/turf/open/floor/iron/shuttle/exploration/doubleinvertcorner_side - icon_state = "double_icorner_side" - -/turf/open/floor/iron/shuttle/exploration/invertcorner_side - icon_state = "side_icorner" - -/turf/open/floor/iron/shuttle/exploration/invertcorner_side_flipped - icon_state = "side_icorner_f" - -/turf/open/floor/iron/shuttle/exploration/blanktile - icon_state = "blank" - -/turf/open/floor/iron/shuttle/exploration/flat - icon_state = "flat" - -/turf/open/floor/iron/shuttle/exploration/textured_flat - icon_state = "flattexture" - -/turf/open/floor/iron/shuttle/exploration/equipmentrail1 - icon_state = "rail1" - -/turf/open/floor/iron/shuttle/exploration/equipmentrail2 - icon_state = "rail2" - -/turf/open/floor/iron/shuttle/exploration/equipmentrail3 - icon_state = "rail3" - -/turf/open/floor/iron/shuttle/exploration/hazard - icon_state = "hazard" diff --git a/modular_skyrat/modules/aesthetics/abductor/abductor.dm b/modular_skyrat/modules/aesthetics/abductor/abductor.dm deleted file mode 100644 index b75d71d45e5882..00000000000000 --- a/modular_skyrat/modules/aesthetics/abductor/abductor.dm +++ /dev/null @@ -1,11 +0,0 @@ -/obj/item/screwdriver/abductor - icon = 'modular_skyrat/modules/aesthetics/abductor/abductor.dmi' - -/obj/item/wirecutters/abductor - icon = 'modular_skyrat/modules/aesthetics/abductor/abductor.dmi' - -/obj/item/crowbar/abductor - icon = 'modular_skyrat/modules/aesthetics/abductor/abductor.dmi' - -/obj/item/wrench/abductor - icon = 'modular_skyrat/modules/aesthetics/abductor/abductor.dmi' diff --git a/modular_skyrat/modules/aesthetics/airlock/code/airlock.dm b/modular_skyrat/modules/aesthetics/airlock/code/airlock.dm deleted file mode 100644 index 15c5d45ba8bc92..00000000000000 --- a/modular_skyrat/modules/aesthetics/airlock/code/airlock.dm +++ /dev/null @@ -1,558 +0,0 @@ -/obj/machinery/door/airlock - doorOpen = 'modular_skyrat/modules/aesthetics/airlock/sound/open.ogg' - doorClose = 'modular_skyrat/modules/aesthetics/airlock/sound/close.ogg' - boltUp = 'modular_skyrat/modules/aesthetics/airlock/sound/bolts_up.ogg' - boltDown = 'modular_skyrat/modules/aesthetics/airlock/sound/bolts_down.ogg' - //noPower = 'sound/machines/doorclick.ogg' - var/forcedOpen = 'modular_skyrat/modules/aesthetics/airlock/sound/open_force.ogg' //Come on guys, why aren't all the sound files like this. - var/forcedClosed = 'modular_skyrat/modules/aesthetics/airlock/sound/close_force.ogg' - - /// For those airlocks you might want to have varying "fillings" for, without having to - /// have an icon file per door with a different filling. - var/fill_state_suffix = null - /// For the airlocks that use greyscale lights, set this to the color you want your lights to be. - var/greyscale_lights_color = null - /// For the airlocks that use a greyscale accent door color, set this color to the accent color you want it to be. - var/greyscale_accent_color = null - - var/has_environment_lights = TRUE //Does this airlock emit a light? - var/light_color_poweron = AIRLOCK_POWERON_LIGHT_COLOR - var/light_color_bolts = AIRLOCK_BOLTS_LIGHT_COLOR - var/light_color_access = AIRLOCK_ACCESS_LIGHT_COLOR - var/light_color_emergency = AIRLOCK_EMERGENCY_LIGHT_COLOR - var/light_color_engineering = AIRLOCK_ENGINEERING_LIGHT_COLOR - var/light_color_deny = AIRLOCK_DENY_LIGHT_COLOR - var/door_light_range = AIRLOCK_LIGHT_RANGE - var/door_light_power = AIRLOCK_LIGHT_POWER - ///Is this door external? E.g. does it lead to space? Shuttle docking systems bolt doors with this flag. - var/external = FALSE - -/obj/machinery/door/airlock/external - external = TRUE - -/obj/machinery/door/airlock/shuttle - external = TRUE - -/obj/machinery/door/airlock/power_change() - ..() - update_icon() - -/obj/machinery/door/airlock/update_overlays() - . = ..() - var/pre_light_range = 0 - var/pre_light_power = 0 - var/pre_light_color = "" - var/lights_overlay = "" - - var/frame_state - var/light_state - switch(airlock_state) - if(AIRLOCK_CLOSED) - frame_state = AIRLOCK_FRAME_CLOSED - if(locked) - light_state = AIRLOCK_LIGHT_BOLTS - lights_overlay = "lights_bolts" - pre_light_color = light_color_bolts - else if(emergency) - light_state = AIRLOCK_LIGHT_EMERGENCY - lights_overlay = "lights_emergency" - pre_light_color = light_color_emergency - else if(engineering_override) - light_state = AIRLOCK_LIGHT_ENGINEERING - lights_overlay = "lights_engineering" - pre_light_color = light_color_engineering - else - lights_overlay = "lights_poweron" - pre_light_color = light_color_poweron - if(AIRLOCK_DENY) - frame_state = AIRLOCK_FRAME_CLOSED - light_state = AIRLOCK_LIGHT_DENIED - lights_overlay = "lights_denied" - pre_light_color = light_color_deny - if(AIRLOCK_EMAG) - frame_state = AIRLOCK_FRAME_CLOSED - if(AIRLOCK_CLOSING) - frame_state = AIRLOCK_FRAME_CLOSING - light_state = AIRLOCK_LIGHT_CLOSING - lights_overlay = "lights_closing" - pre_light_color = light_color_access - if(AIRLOCK_OPEN) - frame_state = AIRLOCK_FRAME_OPEN - if(locked) - lights_overlay = "lights_bolts_open" - pre_light_color = light_color_bolts - else if(emergency) - lights_overlay = "lights_emergency_open" - pre_light_color = light_color_emergency - else - lights_overlay = "lights_poweron_open" - pre_light_color = light_color_poweron - if(AIRLOCK_OPENING) - frame_state = AIRLOCK_FRAME_OPENING - light_state = AIRLOCK_LIGHT_OPENING - lights_overlay = "lights_opening" - pre_light_color = light_color_access - - . += get_airlock_overlay(frame_state, icon, src, em_block = TRUE) - if(airlock_material) - . += get_airlock_overlay("[airlock_material]_[frame_state]", overlays_file, src, em_block = TRUE) - else - . += get_airlock_overlay("fill_[frame_state + fill_state_suffix]", icon, src, em_block = TRUE) - - if(greyscale_lights_color && !light_state) - lights_overlay += "_greyscale" - - if(lights && hasPower()) - . += get_airlock_overlay("lights_[light_state]", overlays_file, src, em_block = FALSE) - pre_light_range = door_light_range - pre_light_power = door_light_power - if(has_environment_lights) - set_light(l_range = pre_light_range, l_power = pre_light_power, l_color = pre_light_color, l_on = TRUE) - if(multi_tile) - filler.set_light(l_range = pre_light_range, l_power = pre_light_power, l_color = pre_light_color, l_on = TRUE) - else - lights_overlay = "" - set_light(l_on = FALSE) - - var/mutable_appearance/lights_appearance = mutable_appearance(overlays_file, lights_overlay, FLOAT_LAYER, src, ABOVE_LIGHTING_PLANE) - - if(greyscale_lights_color && !light_state) - lights_appearance.color = greyscale_lights_color - - if(multi_tile) - lights_appearance.dir = dir - - . += lights_appearance - - if(greyscale_accent_color) - . += get_airlock_overlay("[frame_state]_accent", overlays_file, src, em_block = TRUE, state_color = greyscale_accent_color) - - if(panel_open) - . += get_airlock_overlay("panel_[frame_state][security_level ? "_protected" : null]", overlays_file, src, em_block = TRUE) - if(frame_state == AIRLOCK_FRAME_CLOSED && welded) - . += get_airlock_overlay("welded", overlays_file, src, em_block = TRUE) - - if(airlock_state == AIRLOCK_EMAG) - . += get_airlock_overlay("sparks", overlays_file, src, em_block = FALSE) - - if(hasPower()) - if(frame_state == AIRLOCK_FRAME_CLOSED) - if(atom_integrity < integrity_failure * max_integrity) - . += get_airlock_overlay("sparks_broken", overlays_file, src, em_block = FALSE) - else if(atom_integrity < (0.75 * max_integrity)) - . += get_airlock_overlay("sparks_damaged", overlays_file, src, em_block = FALSE) - else if(frame_state == AIRLOCK_FRAME_OPEN) - if(atom_integrity < (0.75 * max_integrity)) - . += get_airlock_overlay("sparks_open", overlays_file, src, em_block = FALSE) - - if(note) - . += get_airlock_overlay(get_note_state(frame_state), note_overlay_file, src, em_block = TRUE) - - if(frame_state == AIRLOCK_FRAME_CLOSED && seal) - . += get_airlock_overlay("sealed", overlays_file, src, em_block = TRUE) - - if(hasPower() && unres_sides) - for(var/heading in list(NORTH,SOUTH,EAST,WEST)) - if(!(unres_sides & heading)) - continue - var/mutable_appearance/floorlight = mutable_appearance('icons/obj/doors/airlocks/station/overlays.dmi', "unres_[heading]", FLOAT_LAYER, src, ABOVE_LIGHTING_PLANE) - switch (heading) - if (NORTH) - floorlight.pixel_x = 0 - floorlight.pixel_y = 32 - if (SOUTH) - floorlight.pixel_x = 0 - floorlight.pixel_y = -32 - if (EAST) - floorlight.pixel_x = 32 - floorlight.pixel_y = 0 - if (WEST) - floorlight.pixel_x = -32 - floorlight.pixel_y = 0 - . += floorlight - -//STATION AIRLOCKS -/obj/machinery/door/airlock - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/public.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/overlays.dmi' - -/obj/machinery/door/airlock/command - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/command.dmi' - -/obj/machinery/door/airlock/security - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/security.dmi' - -/obj/machinery/door/airlock/security/old - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/security2.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_sec/old - -/obj/machinery/door/airlock/security/old/glass - opacity = FALSE - glass = TRUE - normal_integrity = 400 - -/obj/machinery/door/airlock/engineering - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/engineering.dmi' - -/obj/machinery/door/airlock/medical - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/medical.dmi' - -/obj/machinery/door/airlock/maintenance - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/maintenance.dmi' - -/obj/machinery/door/airlock/maintenance/external - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/maintenanceexternal.dmi' - -/obj/machinery/door/airlock/mining - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/mining.dmi' - -/obj/machinery/door/airlock/atmos - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/atmos.dmi' - -/obj/machinery/door/airlock/research - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/research.dmi' - -/obj/machinery/door/airlock/freezer - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/freezer.dmi' - -/obj/machinery/door/airlock/science - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/science.dmi' - -/obj/machinery/door/airlock/virology - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/virology.dmi' - -//STATION CUSTOM ARILOCKS -/obj/machinery/door/airlock/corporate - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/corporate.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_corporate - normal_integrity = 450 - -/obj/machinery/door/airlock/corporate/glass - opacity = FALSE - glass = TRUE - normal_integrity = 400 - -/obj/machinery/door/airlock/service - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/service.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_service - -/obj/machinery/door/airlock/service/glass - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/captain - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/cap.dmi' - -/obj/machinery/door/airlock/hop - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hop.dmi' - -/obj/machinery/door/airlock/hos - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hos.dmi' - -/obj/machinery/door/airlock/hos/glass - opacity = FALSE - glass = TRUE - normal_integrity = 400 - -/obj/machinery/door/airlock/ce - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/ce.dmi' - -/obj/machinery/door/airlock/ce/glass - opacity = FALSE - glass = TRUE - normal_integrity = 400 - -/obj/machinery/door/airlock/rd - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/rd.dmi' - -/obj/machinery/door/airlock/rd/glass - opacity = FALSE - glass = TRUE - normal_integrity = 400 - -/obj/machinery/door/airlock/qm - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/qm.dmi' - -/obj/machinery/door/airlock/qm/glass - opacity = FALSE - glass = TRUE - normal_integrity = 400 - -/obj/machinery/door/airlock/cmo - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/cmo.dmi' - -/obj/machinery/door/airlock/cmo/glass - opacity = FALSE - glass = TRUE - normal_integrity = 400 - -/obj/machinery/door/airlock/psych - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/psych.dmi' - -/obj/machinery/door/airlock/asylum - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/asylum.dmi' - -/obj/machinery/door/airlock/bathroom - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/bathroom.dmi' - -//STATION MINERAL AIRLOCKS -/obj/machinery/door/airlock/gold - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/gold.dmi' - -/obj/machinery/door/airlock/silver - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/silver.dmi' - -/obj/machinery/door/airlock/diamond - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/diamond.dmi' - -/obj/machinery/door/airlock/uranium - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/uranium.dmi' - -/obj/machinery/door/airlock/plasma - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/plasma.dmi' - -/obj/machinery/door/airlock/bananium - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/bananium.dmi' - -/obj/machinery/door/airlock/sandstone - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/sandstone.dmi' - -/obj/machinery/door/airlock/wood - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/wood.dmi' - -//STATION 2 AIRLOCKS - -/obj/machinery/door/airlock/public - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station2/glass.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station2/overlays.dmi' - -//EXTERNAL AIRLOCKS -/obj/machinery/door/airlock/external - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/external/external.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/external/overlays.dmi' - -//CENTCOM -/obj/machinery/door/airlock/centcom - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi' - -/obj/machinery/door/airlock/grunge - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi' - -//VAULT -/obj/machinery/door/airlock/vault - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/vault/vault.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/vault/overlays.dmi' - -//HATCH -/obj/machinery/door/airlock/hatch - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/centcom.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi' - -/obj/machinery/door/airlock/maintenance_hatch - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/maintenance.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi' - -//HIGH SEC -/obj/machinery/door/airlock/highsecurity - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/highsec/highsec.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/highsec/overlays.dmi' - -//MULTI-TILE - -/obj/machinery/door/airlock/multi_tile - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass_overlays.dmi' - -/obj/machinery/door/airlock/multi_tile/glass - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass_overlays.dmi' - -/obj/machinery/door/airlock/multi_tile/metal - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal_overlays.dmi' - -//TRAM - -/obj/machinery/door/airlock/tram - name = "tram door" - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/tram/tram.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/tram/tram_overlays.dmi' - doorOpen = 'sound/machines/tramopen.ogg' - doorClose = 'sound/machines/tramclose.ogg' - has_environment_lights = FALSE - -//ASSEMBLYS -/obj/structure/door_assembly/door_assembly_public - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station2/glass.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station2/overlays.dmi' - -/obj/structure/door_assembly/door_assembly_com - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/command.dmi' - -/obj/structure/door_assembly/door_assembly_sec - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/security.dmi' - -/obj/structure/door_assembly/door_assembly_sec/old - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/security2.dmi' - -/obj/structure/door_assembly/door_assembly_eng - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/engineering.dmi' - -/obj/structure/door_assembly/door_assembly_min - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/mining.dmi' - -/obj/structure/door_assembly/door_assembly_atmo - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/atmos.dmi' - -/obj/structure/door_assembly/door_assembly_research - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/research.dmi' - -/obj/structure/door_assembly/door_assembly_science - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/science.dmi' - -/obj/structure/door_assembly/door_assembly_viro - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/virology.dmi' - -/obj/structure/door_assembly/door_assembly_med - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/medical.dmi' - -/obj/structure/door_assembly/door_assembly_mai - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/maintenance.dmi' - -/obj/structure/door_assembly/door_assembly_extmai - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/maintenanceexternal.dmi' - -/obj/structure/door_assembly/door_assembly_ext - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/external/external.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/external/overlays.dmi' - -/obj/structure/door_assembly/door_assembly_fre - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/freezer.dmi' - -/obj/structure/door_assembly/door_assembly_hatch - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/centcom.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi' - -/obj/structure/door_assembly/door_assembly_mhatch - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/maintenance.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi' - -/obj/structure/door_assembly/door_assembly_highsecurity - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/highsec/highsec.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/highsec/overlays.dmi' - -/obj/structure/door_assembly/door_assembly_vault - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/vault/vault.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/vault/overlays.dmi' - - -/obj/structure/door_assembly/door_assembly_centcom - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi' - -/obj/structure/door_assembly/door_assembly_grunge - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi' - -/obj/structure/door_assembly/door_assembly_gold - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/gold.dmi' - -/obj/structure/door_assembly/door_assembly_silver - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/silver.dmi' - -/obj/structure/door_assembly/door_assembly_diamond - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/diamond.dmi' - -/obj/structure/door_assembly/door_assembly_uranium - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/uranium.dmi' - -/obj/structure/door_assembly/door_assembly_plasma - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/plasma.dmi' - -/obj/structure/door_assembly/door_assembly_bananium - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/bananium.dmi' - -/obj/structure/door_assembly/door_assembly_sandstone - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/sandstone.dmi' - -/obj/structure/door_assembly/door_assembly_wood - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/wood.dmi' - -/obj/structure/door_assembly/door_assembly_corporate - name = "corporate airlock assembly" - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/corporate.dmi' - glass_type = /obj/machinery/door/airlock/corporate/glass - airlock_type = /obj/machinery/door/airlock/corporate - -/obj/structure/door_assembly/door_assembly_service - name = "service airlock assembly" - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/service.dmi' - base_name = "service airlock" - glass_type = /obj/machinery/door/airlock/service/glass - airlock_type = /obj/machinery/door/airlock/service - -/obj/structure/door_assembly/door_assembly_captain - name = "captain airlock assembly" - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/cap.dmi' - glass_type = /obj/machinery/door/airlock/command/glass - airlock_type = /obj/machinery/door/airlock/captain - -/obj/structure/door_assembly/door_assembly_hop - name = "head of personnel airlock assembly" - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hop.dmi' - glass_type = /obj/machinery/door/airlock/command/glass - airlock_type = /obj/machinery/door/airlock/hop - -/obj/structure/door_assembly/hos - name = "head of security airlock assembly" - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hos.dmi' - glass_type = /obj/machinery/door/airlock/hos/glass - airlock_type = /obj/machinery/door/airlock/hos - -/obj/structure/door_assembly/door_assembly_cmo - name = "chief medical officer airlock assembly" - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/cmo.dmi' - glass_type = /obj/machinery/door/airlock/cmo/glass - airlock_type = /obj/machinery/door/airlock/cmo - -/obj/structure/door_assembly/door_assembly_ce - name = "chief engineer airlock assembly" - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/ce.dmi' - glass_type = /obj/machinery/door/airlock/ce/glass - airlock_type = /obj/machinery/door/airlock/ce - -/obj/structure/door_assembly/door_assembly_rd - name = "research director airlock assembly" - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/rd.dmi' - glass_type = /obj/machinery/door/airlock/rd/glass - airlock_type = /obj/machinery/door/airlock/rd - -/obj/structure/door_assembly/door_assembly_qm - name = "quartermaster airlock assembly" - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/qm.dmi' - glass_type = /obj/machinery/door/airlock/qm/glass - airlock_type = /obj/machinery/door/airlock/qm - -/obj/structure/door_assembly/door_assembly_psych - name = "psychologist airlock assembly" - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/psych.dmi' - glass_type = /obj/machinery/door/airlock/medical/glass - airlock_type = /obj/machinery/door/airlock/psych - -/obj/structure/door_assembly/door_assembly_asylum - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/asylum.dmi' - -/obj/structure/door_assembly/door_assembly_bathroom - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/bathroom.dmi' - -/obj/machinery/door/airlock/hydroponics - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/botany.dmi' - -/obj/structure/door_assembly/door_assembly_hydro - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/botany.dmi' - -/obj/structure/door_assembly/ - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/public.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/overlays.dmi' diff --git a/modular_skyrat/modules/aesthetics/airlock_machines/airlock_machines.dm b/modular_skyrat/modules/aesthetics/airlock_machines/airlock_machines.dm deleted file mode 100644 index f532558accf9ff..00000000000000 --- a/modular_skyrat/modules/aesthetics/airlock_machines/airlock_machines.dm +++ /dev/null @@ -1,11 +0,0 @@ -/obj/machinery/airlock_controller - icon = 'modular_skyrat/modules/aesthetics/airlock_machines/airlock_machines.dmi' - -/obj/machinery/door_buttons/access_button - icon = 'modular_skyrat/modules/aesthetics/airlock_machines/airlock_machines.dmi' - -/obj/machinery/door_buttons/airlock_controller - icon = 'modular_skyrat/modules/aesthetics/airlock_machines/airlock_machines.dmi' - -/obj/machinery/embedded_controller/radio/simple_vent_controller - icon = 'modular_skyrat/modules/aesthetics/airlock_machines/airlock_machines.dmi' diff --git a/modular_skyrat/modules/aesthetics/apc/code/apc.dm b/modular_skyrat/modules/aesthetics/apc/code/apc.dm deleted file mode 100644 index 78c3f2cfb7262e..00000000000000 --- a/modular_skyrat/modules/aesthetics/apc/code/apc.dm +++ /dev/null @@ -1,30 +0,0 @@ -/obj/machinery/power/apc - icon = 'modular_skyrat/modules/aesthetics/apc/icons/apc.dmi' - -/obj/item/wallframe/apc - icon = 'modular_skyrat/modules/aesthetics/apc/icons/apc.dmi' - -/obj/machinery/power/apc/update_appearance(updates = check_updates()) - icon_update_needed = FALSE - if(!updates) - return FALSE - - . = ..() - // And now, separately for cleanness, the lighting changing - if(!update_state) - switch(charging) - if(APC_NOT_CHARGING) - set_light_color(LIGHT_COLOR_INTENSE_RED) - if(APC_CHARGING) - set_light_color(LIGHT_COLOR_ORANGE) - if(APC_FULLY_CHARGED) - set_light_color(LIGHT_COLOR_ELECTRIC_CYAN) - set_light(light_on_range) - return TRUE - - if(update_state & UPSTATE_BLUESCREEN) - set_light_color(LIGHT_COLOR_BLUE) - set_light(light_on_range) - return TRUE - - set_light(0) diff --git a/modular_skyrat/modules/aesthetics/blast_door/code/blast_door.dm b/modular_skyrat/modules/aesthetics/blast_door/code/blast_door.dm deleted file mode 100644 index 8684c6b8908ca5..00000000000000 --- a/modular_skyrat/modules/aesthetics/blast_door/code/blast_door.dm +++ /dev/null @@ -1,16 +0,0 @@ -/obj/machinery/door/poddoor - icon = 'modular_skyrat/modules/aesthetics/blast_door/icons/blast_door.dmi' - animation_sound = 'modular_skyrat/modules/aesthetics/blast_door/sound/blast_door.ogg' - -/obj/machinery/door/poddoor/shutters - var/door_open_sound = 'modular_skyrat/modules/aesthetics/blast_door/sound/shutters_open.ogg' - var/door_close_sound = 'modular_skyrat/modules/aesthetics/blast_door/sound/shutters_close.ogg' - -/obj/machinery/door/poddoor/shutters/do_animate(animation) - switch(animation) - if("opening") - flick("opening", src) - playsound(src, door_open_sound, 30, TRUE) - if("closing") - flick("closing", src) - playsound(src, door_close_sound, 30, TRUE) diff --git a/modular_skyrat/modules/aesthetics/bureaucracy/bureaucracy.dm b/modular_skyrat/modules/aesthetics/bureaucracy/bureaucracy.dm deleted file mode 100644 index 7e295e6a458ed8..00000000000000 --- a/modular_skyrat/modules/aesthetics/bureaucracy/bureaucracy.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/item/hand_labeler - icon = 'modular_skyrat/modules/aesthetics/bureaucracy/bureaucracy.dmi' diff --git a/modular_skyrat/modules/aesthetics/camera/code/camera.dm b/modular_skyrat/modules/aesthetics/camera/code/camera.dm deleted file mode 100644 index 4eaf5aedf6607c..00000000000000 --- a/modular_skyrat/modules/aesthetics/camera/code/camera.dm +++ /dev/null @@ -1,8 +0,0 @@ -/obj/machinery/camera - icon = 'modular_skyrat/modules/aesthetics/camera/icons/camera.dmi' - -/obj/item/wallframe/camera - icon = 'modular_skyrat/modules/aesthetics/camera/icons/camera.dmi' - -/obj/structure/camera_assembly - icon = 'modular_skyrat/modules/aesthetics/camera/icons/camera.dmi' diff --git a/modular_skyrat/modules/aesthetics/chemical_tanks/chemical_tanks.dm b/modular_skyrat/modules/aesthetics/chemical_tanks/chemical_tanks.dm deleted file mode 100644 index c44ba5ac8c6ab7..00000000000000 --- a/modular_skyrat/modules/aesthetics/chemical_tanks/chemical_tanks.dm +++ /dev/null @@ -1,14 +0,0 @@ -/obj/structure/reagent_dispensers/watertank - icon = 'modular_skyrat/modules/aesthetics/chemical_tanks/chemical_tanks.dmi' - -/obj/structure/reagent_dispensers/plumbed - icon = 'modular_skyrat/modules/aesthetics/chemical_tanks/chemical_tanks.dmi' - -/obj/structure/reagent_dispensers/fueltank - icon = 'modular_skyrat/modules/aesthetics/chemical_tanks/chemical_tanks.dmi' - -/obj/structure/reagent_dispensers/foamtank - icon = 'modular_skyrat/modules/aesthetics/chemical_tanks/chemical_tanks.dmi' - -/obj/structure/reagent_dispensers/water_cooler - icon = 'modular_skyrat/modules/aesthetics/chemical_tanks/chemical_tanks.dmi' diff --git a/modular_skyrat/modules/aesthetics/clothing/clothing.dm b/modular_skyrat/modules/aesthetics/clothing/clothing.dm deleted file mode 100644 index 7fc79c46c018bc..00000000000000 --- a/modular_skyrat/modules/aesthetics/clothing/clothing.dm +++ /dev/null @@ -1,18 +0,0 @@ - -/* -* HEAD -*/ - -/obj/item/clothing/head/costume/weddingveil - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/costume.dmi' - worn_icon_state = "weddingveil_temp" - //TG's is ugly as sin, until it's updated we have our own - -/* -* SHOES -*/ - -/obj/item/clothing/shoes/workboots/old - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' - icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' - icon_state = "workbootsold" diff --git a/modular_skyrat/modules/aesthetics/crates/code/crates.dm b/modular_skyrat/modules/aesthetics/crates/code/crates.dm deleted file mode 100644 index d7a7201a5639a8..00000000000000 --- a/modular_skyrat/modules/aesthetics/crates/code/crates.dm +++ /dev/null @@ -1,30 +0,0 @@ -/obj/structure/closet/crate - icon = 'modular_skyrat/modules/aesthetics/crates/icons/crates.dmi' - -/obj/structure/closet/crate/syndicrate - icon = 'icons/obj/storage/crates.dmi' - -/obj/item/delivery - icon = 'modular_skyrat/modules/aesthetics/crates/icons/crates.dmi' - -//Rather than have duplicate icons in our DMI for all of these, we just make sure these pull from the old file. -/obj/structure/closet/crate/bin - icon = 'icons/obj/storage/crates.dmi' - -/obj/structure/closet/crate/grave - icon = 'icons/obj/storage/crates.dmi' - -/obj/structure/closet/crate/necropolis - icon = 'icons/obj/storage/crates.dmi' - -/obj/structure/closet/crate/trashcart/laundry - icon = 'icons/obj/storage/crates.dmi' - -/obj/structure/closet/crate/mail - icon = 'icons/obj/storage/crates.dmi' - -/obj/structure/closet/crate/coffin - icon = 'icons/obj/storage/crates.dmi' - -/obj/structure/closet/crate/cardboard - icon = 'icons/obj/storage/crates.dmi' diff --git a/modular_skyrat/modules/aesthetics/crates/icons/crates.dmi b/modular_skyrat/modules/aesthetics/crates/icons/crates.dmi deleted file mode 100644 index bcd4cb9305ef53..00000000000000 Binary files a/modular_skyrat/modules/aesthetics/crates/icons/crates.dmi and /dev/null differ diff --git a/modular_skyrat/modules/aesthetics/device/device.dm b/modular_skyrat/modules/aesthetics/device/device.dm deleted file mode 100644 index f7f4b8e5d9b273..00000000000000 --- a/modular_skyrat/modules/aesthetics/device/device.dm +++ /dev/null @@ -1,18 +0,0 @@ -/obj/item/t_scanner - icon = 'modular_skyrat/modules/aesthetics/device/device.dmi' - -/obj/item/analyzer - icon = 'modular_skyrat/modules/aesthetics/device/device.dmi' - -/obj/item/grenade/empgrenade - icon = 'modular_skyrat/modules/aesthetics/device/device.dmi' - -/obj/item/multitool - icon = 'modular_skyrat/modules/aesthetics/device/device.dmi' - -/obj/item/geiger_counter - icon = 'modular_skyrat/modules/aesthetics/device/device.dmi' - -// This needs default but is a subtype. Pain. -/obj/item/t_scanner/adv_mining_scanner - icon = 'icons/obj/device.dmi' diff --git a/modular_skyrat/modules/aesthetics/directwindow/code/window.dm b/modular_skyrat/modules/aesthetics/directwindow/code/window.dm deleted file mode 100644 index a0cd5cf100db7e..00000000000000 --- a/modular_skyrat/modules/aesthetics/directwindow/code/window.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/structure/window - icon = 'modular_skyrat/modules/aesthetics/directwindow/icons/directwindow.dmi' - -/obj/machinery/door/window - icon = 'modular_skyrat/modules/aesthetics/directwindow/icons/directwindow.dmi' diff --git a/modular_skyrat/modules/aesthetics/disposals/code/disposals.dm b/modular_skyrat/modules/aesthetics/disposals/code/disposals.dm deleted file mode 100644 index a3e71eea6a701b..00000000000000 --- a/modular_skyrat/modules/aesthetics/disposals/code/disposals.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/machinery/disposal - icon = 'modular_skyrat/modules/aesthetics/disposals/icons/disposals.dmi' diff --git a/modular_skyrat/modules/aesthetics/emitter/code/emitter.dm b/modular_skyrat/modules/aesthetics/emitter/code/emitter.dm deleted file mode 100644 index d53ad47d36d6f6..00000000000000 --- a/modular_skyrat/modules/aesthetics/emitter/code/emitter.dm +++ /dev/null @@ -1,13 +0,0 @@ -/obj/machinery/power/emitter - icon = 'modular_skyrat/modules/aesthetics/emitter/icons/emitter.dmi' - -/obj/machinery/field/containment - icon = 'modular_skyrat/modules/aesthetics/emitter/icons/emitter.dmi' - -/obj/machinery/field/generator - icon = 'modular_skyrat/modules/aesthetics/emitter/icons/field_generator.dmi' - - -/obj/machinery/power/rad_collector - icon = 'modular_skyrat/modules/aesthetics/emitter/icons/emitter.dmi' - diff --git a/modular_skyrat/modules/aesthetics/firealarm/code/firealarm.dm b/modular_skyrat/modules/aesthetics/firealarm/code/firealarm.dm deleted file mode 100644 index 8ccf169d457509..00000000000000 --- a/modular_skyrat/modules/aesthetics/firealarm/code/firealarm.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/machinery/firealarm - icon = 'modular_skyrat/modules/aesthetics/firealarm/icons/firealarm.dmi' diff --git a/modular_skyrat/modules/aesthetics/firedoor/code/firedoor.dm b/modular_skyrat/modules/aesthetics/firedoor/code/firedoor.dm deleted file mode 100644 index 1af081f40b8500..00000000000000 --- a/modular_skyrat/modules/aesthetics/firedoor/code/firedoor.dm +++ /dev/null @@ -1,32 +0,0 @@ -/obj/machinery/door/firedoor - name = "emergency shutter" - desc = "Emergency air-tight shutter, capable of sealing off breached areas. This one has a glass panel. It has a mechanism to open it with just your hands." - icon = 'modular_skyrat/modules/aesthetics/firedoor/icons/firedoor_glass.dmi' - var/door_open_sound = 'modular_skyrat/modules/aesthetics/firedoor/sound/firedoor_open.ogg' - var/door_close_sound = 'modular_skyrat/modules/aesthetics/firedoor/sound/firedoor_open.ogg' - -/obj/machinery/door/firedoor/update_overlays() - . = ..() - if(istype(src, /obj/machinery/door/firedoor/border_only)) - return - if(density) // if the door is closed, add the bottom blinking overlay -- and only if it's closed - . += "firelock_alarm_type_bottom" - -/obj/machinery/door/firedoor/open() - playsound(loc, door_open_sound, 100, TRUE) - return ..() - -/obj/machinery/door/firedoor/close() - playsound(loc, door_close_sound, 100, TRUE) - return ..() - -/obj/machinery/door/firedoor/heavy - name = "heavy emergency shutter" - desc = "Emergency air-tight shutter, capable of sealing off breached areas. It has a mechanism to open it with just your hands." - icon = 'modular_skyrat/modules/aesthetics/firedoor/icons/firedoor.dmi' - -/obj/effect/spawner/structure/window/reinforced/no_firelock - spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/fulltile) - -/obj/machinery/door/firedoor/closed - alarm_type = FIRELOCK_ALARM_TYPE_GENERIC diff --git a/modular_skyrat/modules/aesthetics/furniture/bed.dm b/modular_skyrat/modules/aesthetics/furniture/bed.dm deleted file mode 100644 index d055d7f40a77ce..00000000000000 --- a/modular_skyrat/modules/aesthetics/furniture/bed.dm +++ /dev/null @@ -1,110 +0,0 @@ -/obj/structure/bed/double - name = "double bed" - icon_state = "doublebed" - icon = 'modular_skyrat/modules/aesthetics/furniture/furniture.dmi' - -/obj/item/bedsheet/double - icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi' - icon_state = "doublesheet" - slot_flags = null - -/obj/item/bedsheet/blue/double - icon_state = "doublesheetblue" - icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi' - slot_flags = null - -/obj/item/bedsheet/green/double - icon_state = "doublesheetgreen" - icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi' - slot_flags = null - - -/obj/item/bedsheet/orange/double - icon_state = "doublesheetorange" - icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi' - slot_flags = null - -/obj/item/bedsheet/purple/double - icon_state = "doublesheetpurple" - icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi' - slot_flags = null - -/obj/item/bedsheet/rainbow/double //all the way across the sky. - icon_state = "doublesheetrainbow" - icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi' - slot_flags = null - -/obj/item/bedsheet/red/double - icon_state = "doublesheetred" - icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi' - slot_flags = null - -/obj/item/bedsheet/yellow/double - icon_state = "doublesheetyellow" - icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi' - slot_flags = null - -/obj/item/bedsheet/mime/double - icon_state = "doublesheetmime" - icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi' - slot_flags = null - -/obj/item/bedsheet/clown/double - icon_state = "doublesheetclown" - icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi' - slot_flags = null - -/obj/item/bedsheet/captain/double - icon_state = "doublesheetcaptain" - icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi' - slot_flags = null - -/obj/item/bedsheet/rd/double - icon_state = "doublesheetrd" - icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi' - slot_flags = null - -/obj/item/bedsheet/hos/double - icon_state = "doublesheethos" - icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi' - slot_flags = null - -/obj/item/bedsheet/hop/double - icon_state = "doublesheethop" - icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi' - slot_flags = null - -/obj/item/bedsheet/ce/double - icon_state = "doublesheetce" - icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi' - slot_flags = null - -/obj/item/bedsheet/brown/double - icon_state = "doublesheetbrown" - icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi' - slot_flags = null - -/obj/item/bedsheet/ian/double - icon_state = "doublesheetian" - icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi' - slot_flags = null - -/obj/item/bedsheet/centcom/double - icon_state = "doublesheetcc" - icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi' - slot_flags = null - -/obj/item/bedsheet/nanotrasen/double - icon_state = "doublesheetNT" - icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi' - slot_flags = null - -/obj/item/bedsheet/qm/double - icon_state = "doublesheetqm" - icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi' - slot_flags = null - -/obj/item/bedsheet/cmo/double - icon_state = "doublesheetCMO" - icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi' - slot_flags = null diff --git a/modular_skyrat/modules/aesthetics/guns/code/guns.dm b/modular_skyrat/modules/aesthetics/guns/code/guns.dm deleted file mode 100644 index ac20f9f5db997b..00000000000000 --- a/modular_skyrat/modules/aesthetics/guns/code/guns.dm +++ /dev/null @@ -1,567 +0,0 @@ -// open to suggestions on where to put these overrides -// hugely not a fan of this but we do what we gotta - -/* - * gotta redefine EVERY goddamn ammo type irt to new mat costs for the ammobench's sake - * previously, SMALL_MATERIAL_AMOUNT was 100 units out of 2000 from a sheet (5%) - * so the old cost of SMALL_MATERIAL_AMOUNT * 5 was 500/2000 from a sheet (25%) - * experimental material balance PR makes it so that SMALL_MATERIAL_AMOUNT is actually 10 units out of 100 (10%) - * which made it so that the old assumed value of SMALL_MATERIAL_AMOUNT * 5 is 50/100 (50% of a sheet for a single bullet) (suboptimal) - * these updated, more consistent defines make it so that a single round's total materials should total 20% of a sheet, or 2 SMALL_MATERIAL_AMOUNT -*/ - -#define AMMO_MATS_BASIC list( \ - /datum/material/iron = SMALL_MATERIAL_AMOUNT * 2, \ -) - -#define AMMO_MATS_AP list( \ - /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \ - /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 0.4, \ -) - -#define AMMO_MATS_TEMP list( \ - /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \ - /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 0.4, \ -) - -#define AMMO_MATS_EMP list( \ - /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \ - /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 0.4, \ -) - -#define AMMO_MATS_PHASIC list( \ - /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \ - /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 0.4, \ -) - -#define AMMO_MATS_TRAC list( \ - /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \ - /datum/material/silver = SMALL_MATERIAL_AMOUNT * 0.2, \ - /datum/material/gold = SMALL_MATERIAL_AMOUNT * 0.2, \ -) - -#define AMMO_MATS_HOMING list( \ - /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1, \ - /datum/material/silver = SMALL_MATERIAL_AMOUNT * 0.2, \ - /datum/material/gold = SMALL_MATERIAL_AMOUNT * 0.2, \ - /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 0.2, \ - /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 0.2, \ - /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 0.2, \ -) - -// for .35 Sol Ripper -#define AMMO_MATS_RIPPER list( \ - /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \ - /datum/material/glass = SMALL_MATERIAL_AMOUNT * 0.4, \ -) - -/obj/item/ammo_casing - custom_materials = AMMO_MATS_BASIC - -/obj/item/ammo_box - /// When inserted into an ammo workbench, does this ammo box check for parent ammunition to search for subtypes of? Relevant for surplus clips, multi-sprite magazines. - /// Maybe don't enable this for shotgun ammo boxes. - var/multitype = TRUE - - -///GUN SPRITE OVERWRITES -/obj/item/gun/energy/ionrifle - icon = 'modular_skyrat/modules/aesthetics/guns/icons/energy.dmi' - lefthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_righthand.dmi' - -/obj/item/gun/energy/ionrifle/carbine - icon = 'icons/obj/weapons/guns/energy.dmi' - lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - -/obj/item/gun/ballistic/shotgun/automatic/combat - name = "\improper Peacekeeper combat shotgun" - desc = "A semi-automatic Nanotrasen Peacekeeper shotgun with tactical furnishing and heavier internals meant for sustained fire. Lacks a threaded barrel." - icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi' - worn_icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns_back.dmi' - lefthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_righthand.dmi' - inhand_icon_state = "shotgun_combat" - inhand_x_dimension = 32 - inhand_y_dimension = 32 - -// de-overrides this particular gun, it uses the tg file -/obj/item/gun/ballistic/shotgun/automatic/combat/compact - icon = 'icons/obj/weapons/guns/ballistic.dmi' - lefthand_file = 'icons/mob/inhands/weapons/64x_guns_left.dmi' - righthand_file = 'icons/mob/inhands/weapons/64x_guns_right.dmi' - inhand_x_dimension = 64 - inhand_y_dimension = 64 - worn_icon = null - -/obj/item/gun/grenadelauncher - icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi' - lefthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_righthand.dmi' - -/obj/item/gun/ballistic/automatic/pistol/m1911 - icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi' - inhand_icon_state = "colt" - lefthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_righthand.dmi' - -/obj/item/gun/ballistic/automatic/c20r - icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi' - -/obj/item/gun/ballistic/automatic/m90 - icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi' -/obj/item/gun/ballistic/revolver/c38/detective - icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi' - -/obj/item/gun/ballistic/automatic/pistol/aps - icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi' - -/obj/item/gun/ballistic/automatic/pistol - icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi' - -/obj/item/gun/ballistic/automatic/pistol/deagle/regal - icon = 'icons/obj/weapons/guns/ballistic.dmi' - -/obj/item/gun/energy/e_gun/nuclear - icon = 'modular_skyrat/modules/aesthetics/guns/icons/nucgun.dmi' - ammo_x_offset = 2 - lefthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_righthand.dmi' - worn_icon_state = "gun" - worn_icon = null - -/obj/item/gun/energy/e_gun/nuclear/rainbow - name = "fantastic energy gun" - desc = "An energy gun with an experimental miniaturized nuclear reactor that automatically charges the internal power cell. This one seems quite fancy!" - ammo_type = list(/obj/item/ammo_casing/energy/laser/rainbow, /obj/item/ammo_casing/energy/disabler/rainbow) - -/obj/item/ammo_casing/energy/laser/rainbow - icon = 'modular_skyrat/modules/aesthetics/guns/icons/nucgun.dmi' - icon_state = "laser" - select_name = "kill" - projectile_type = /obj/projectile/beam/laser/rainbow - -/obj/projectile/beam/laser/rainbow - icon = 'modular_skyrat/modules/aesthetics/guns/icons/nucgun.dmi' - icon_state = "laser" - -/obj/item/ammo_casing/energy/disabler/rainbow - icon = 'modular_skyrat/modules/aesthetics/guns/icons/nucgun.dmi' - icon_state = "laser" - select_name = "disable" - projectile_type = /obj/projectile/beam/disabler/rainbow - -/obj/projectile/beam/disabler/rainbow - icon = 'modular_skyrat/modules/aesthetics/guns/icons/nucgun.dmi' - icon_state = "laser" - -/obj/item/gun/energy/e_gun/nuclear/emag_act(mob/user, obj/item/card/emag/E) - . = ..() - if(obj_flags & EMAGGED) - return FALSE - if(pin) - to_chat(user, span_warning("You probably want to do this on a new gun!")) - return FALSE - to_chat(user, "<font color='#ff2700'>T</font><font color='#ff4e00'>h</font><font color='#ff7500'>e</font> <font color='#ffc400'>g</font><font color='#ffeb00'>u</font><font color='#ebff00'>n</font> <font color='#9cff00'>s</font><font color='#75ff00'>u</font><font color='#4eff00'>d</font><font color='#27ff00'>d</font><font color='#00ff00'>e</font><font color='#00ff27'>n</font><font color='#00ff4e'>l</font><font color='#00ff75'>y</font> <font color='#00ffc4'>f</font><font color='#00ffeb'>e</font><font color='#00ebff'>e</font><font color='#00c4ff'>l</font><font color='#009cff'>s</font> <font color='#004eff'>q</font><font color='#0027ff'>u</font><font color='#0000ff'>i</font><font color='#2700ff'>t</font><font color='#4e00ff'>e</font> <font color='#9c00ff'>f</font><font color='#c400ff'>a</font><font color='#eb00ff'>n</font><font color='#ff00eb'>t</font><font color='#ff00c4'>a</font><font color='#ff009c'>s</font><font color='#ff0075'>t</font><font color='#ff004e'>i</font><font color='#ff0027'>c</font><font color='#ff0000'>!</font>") - new /obj/item/gun/energy/e_gun/nuclear/rainbow(get_turf(user)) - obj_flags |= EMAGGED - qdel(src) - return TRUE - -/obj/item/gun/energy/e_gun/nuclear/rainbow/update_overlays() - . = ..() - . += "[icon_state]_emagged" - -/obj/item/gun/energy/e_gun/nuclear/rainbow/emag_act(mob/user, obj/item/card/emag/E) - return FALSE - -//BEAM SOUNDS -/obj/item/ammo_casing/energy - fire_sound = 'modular_skyrat/modules/aesthetics/guns/sound/laser.ogg' - -/obj/item/ammo_casing/energy/laser/pulse - fire_sound = 'modular_skyrat/modules/aesthetics/guns/sound/pulse.ogg' - -/obj/item/gun/energy/xray - fire_sound_volume = 100 - -/obj/item/ammo_casing/energy/xray - fire_sound = 'modular_skyrat/modules/aesthetics/guns/sound/xray_laser.ogg' - -/obj/item/ammo_casing/energy/laser/accelerator - fire_sound = 'modular_skyrat/modules/aesthetics/guns/sound/laser_cannon_fire.ogg' - -/obj/item/gun/ballistic/automatic/sniper_rifle - name = "sniper rifle" - desc = "A long ranged weapon that does significant damage. No, you can't quickscope." - icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns_gubman2.dmi' - icon_state = "sniper" - w_class = WEIGHT_CLASS_BULKY - inhand_icon_state = "sniper" - worn_icon_state = null - fire_sound = 'sound/weapons/gun/sniper/shot.ogg' - fire_sound_volume = 90 - load_sound = 'sound/weapons/gun/sniper/mag_insert.ogg' - rack_sound = 'sound/weapons/gun/sniper/rack.ogg' - suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg' - recoil = 2 - weapon_weight = WEAPON_HEAVY - accepted_magazine_type = /obj/item/ammo_box/magazine/sniper_rounds - fire_delay = 6 SECONDS - burst_size = 1 - w_class = WEIGHT_CLASS_NORMAL - slot_flags = ITEM_SLOT_BACK - actions_types = list() - mag_display = TRUE - suppressor_x_offset = 3 - suppressor_y_offset = 3 - -/obj/item/gun/ballistic/automatic/sniper_rifle/Initialize(mapload) - . = ..() - AddComponent(/datum/component/scope, range_modifier = 2) - -/obj/item/gun/ballistic/automatic/sniper_rifle/reset_semicd() - . = ..() - if(suppressed) - playsound(src, 'sound/machines/eject.ogg', 25, TRUE, ignore_walls = FALSE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0) - else - playsound(src, 'sound/machines/eject.ogg', 50, TRUE) - -/obj/item/gun/ballistic/automatic/sniper_rifle/syndicate - name = "syndicate sniper rifle" - desc = "An illegally modified .50 cal sniper rifle with suppression compatibility. Quickscoping still doesn't work." - icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns_gubman2.dmi' - icon_state = "sniper2" - worn_icon_state = "sniper" - fire_delay = 5.5 SECONDS - can_suppress = TRUE - can_unsuppress = TRUE - pin = /obj/item/firing_pin/implant/pindicate - -/obj/item/gun/ballistic/automatic/sniper_rifle/modular - name = "AUS-107 anti-materiel rifle" - desc = "A devastating Aussec Armory heavy sniper rifle, fitted with a modern scope." - icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns_gubman2.dmi' - icon_state = "sniper" - worn_icon_state = "sniper" - fire_sound = 'modular_skyrat/modules/aesthetics/guns/sound/sniperrifle.ogg' - suppressed_sound = 'modular_skyrat/modules/aesthetics/guns/sound/sniperrifle_s.ogg' - w_class = WEIGHT_CLASS_BULKY - can_suppress = FALSE - -/obj/item/gun/ballistic/automatic/sniper_rifle/modular/syndicate - name = "'Caracal' anti-materiel rifle" //we flop out - desc = "A sleek, light bullpup .416 Stabilis sniper rifle with a reciprocating barrel, nicknamed 'Caracal' by Scarborough Arms. Its compact folding parts make it able to fit into a backpack, and its modular barrel can have a suppressor installed within it rather than as a muzzle extension. Its advanced scope accounts for all ballistic inaccuracies of a reciprocating barrel." - icon_state = "sysniper" - fire_sound = 'modular_skyrat/modules/aesthetics/guns/sound/sniperrifle.ogg' - suppressed_sound = 'modular_skyrat/modules/aesthetics/guns/sound/sniperrifle_s.ogg' - fire_delay = 4 SECONDS //Delay reduced thanks to recoil absorption - burst_size = 0.5 - recoil = 1 - can_suppress = TRUE - can_unsuppress = TRUE - weapon_weight = WEAPON_LIGHT - -/obj/item/gun/ballistic/automatic/sniper_rifle/modular/syndicate/give_manufacturer_examine() - AddElement(/datum/element/manufacturer_examine, COMPANY_SCARBOROUGH) - -/obj/item/gun/ballistic/automatic/sniper_rifle/modular/blackmarket //Normal sniper but epic - name = "SA-107 anti-materiel rifle" - desc = "An illegal Scarborough Arms rendition of an Aussec Armory sniper rifle. This one has been fitted with a heavy duty scope, a sturdier stock, and has a removable muzzle brake that allows easy attachment of suppressors." - icon_state = "sniper2" - fire_sound = 'modular_skyrat/modules/aesthetics/guns/sound/sniperrifle.ogg' - suppressed_sound = 'modular_skyrat/modules/aesthetics/guns/sound/sniperrifle_s.ogg' - fire_sound_volume = 90 - vary_fire_sound = FALSE - load_sound = 'sound/weapons/gun/sniper/mag_insert.ogg' - rack_sound = 'sound/weapons/gun/sniper/rack.ogg' - w_class = WEIGHT_CLASS_NORMAL - can_suppress = TRUE - can_unsuppress = TRUE - recoil = 1.8 - weapon_weight = WEAPON_HEAVY - accepted_magazine_type = /obj/item/ammo_box/magazine/sniper_rounds - fire_delay = 55 //Slightly smaller than standard sniper - burst_size = 1 - slot_flags = ITEM_SLOT_BACK - mag_display = TRUE - -/obj/item/gun/ballistic/automatic/ar/modular - name = "\improper NT ARG-63" - desc = "Nanotrasen's prime ballistic option based on the Stoner design, fitted with a light polymer frame and other tactical furniture, and chambered in .277 Aestus - nicknamed 'Boarder' by Special Operations teams." - icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns_gubman2.dmi' - icon_state = "arg" - inhand_icon_state = "arg" - can_suppress = FALSE - -/obj/item/gun/ballistic/automatic/surplus - name = "\improper Type-69 surplus rifle" - desc = "One of countless obsolete ballistic rifles that still sees use as a cheap deterrent. Uses 10mm ammo and its bulky frame prevents one-hand firing." - icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi' - -// GUBMAN3 - FULL BULLET RENAME -// i loathe the above - -// overrides for 10mm ammo in modular_skyrat\modules\sec_haul\code\guns\bullets.dm - -// overrides for .310 Strilka-derived ammo, e.g. lionhunter ammo, because you don't want to give security the ability to print infinite wallhack ammo, right? -/obj/item/ammo_casing/strilka310/lionhunter - name = "hunter's rifle round" - can_be_printed = FALSE // trust me bro you dont wanna give security homing wallhack Better Rubbers - -/obj/item/ammo_casing/strilka310/enchanted - name = "enchanted rifle round" - can_be_printed = FALSE // these are Really Really Better Rubbers - -// overrides for tgcode's .223 (formerly 5.56), used in the M90-gl - renamed to .277 Aestus -/obj/item/ammo_casing/a223 - name = ".277 Aestus casing" - desc = "A .277 bullet casing." - -/obj/item/ammo_casing/a223/phasic - name = ".277 Aestus phasic casing" - desc = "A .277 Aestus bullet casing.\ - <br><br>\ - <i>PHASIC: Ignores all surfaces except organic matter.</i>" - advanced_print_req = TRUE - custom_materials = AMMO_MATS_PHASIC - -// shotgun ammo overrides moved to modular_skyrat\modules\shotgunrebalance\code\shotgun.dm - -// overrides for tgcode .50cal, used in their sniper/anti-materiel rifles -/obj/item/ammo_casing/p50 - name = ".416 Stabilis casing" - desc = "A .416 bullet casing." - advanced_print_req = TRUE // you are NOT printing more ammo for this without effort. - // then again the offstations with ammo printers and sniper rifles come with an ammo disk anyway, so - -/obj/item/ammo_casing/p50/surplus - name = ".416 Stabilis surplus casing" - desc = "A .416 bullet casing. Intentionally underloaded, but still quite painful to be shot with.\ - <br><br>\ - <i>SURPLUS/UNDERLOAD: Lacks armor penetration capabilities, contact-stun, or innate dismemberment ability. Still incredibly painful to be hit by.</i>" - projectile_type = /obj/projectile/bullet/p50/surplus - -/obj/item/ammo_casing/p50/disruptor - name = ".416 Stabilis disruptor casing" - desc = "A .416 bullet casing. Specializes in sending the target to sleep rather than hell, unless they're synthetic. Then they probably go to hell anyway.\ - <br><br>\ - <i>DISRUPTOR: Forces humanoid targets to sleep, does heavy damage against cyborgs, EMPs struck targets.</i>" - -/obj/item/ammo_casing/p50/incendiary - name = ".416 Stabilis precision incendiary casing" - desc = "A .416 bullet casing. Made with an agitated-plasma tip, for making people regret being alive.\ - <br><br>\ - <i>PRECISION INCENDIARY: Lacks innate dismemberment ability and contact-stun, suffers against mechanized armor. Sets people on fire.</i>" - projectile_type = /obj/projectile/bullet/p50/incendiary - -/obj/item/ammo_casing/p50/penetrator - name = ".416 Stabilis penetrator sabot casing" - desc = "A .416 bullet casing. Loaded with a hardened sabot and packed with extra propellant. \ - Designed to go through basically everything. A label warns of overpressure risk, and to not use the round if \ - a given weapon cannot handle pressures greater than 85000 PSI.\ - <br><br>\ - <i>PENETRATOR: Goes through basically everything. Lacks innate dismemberment ability and contact-stun capabilities.</i>" - -/obj/item/ammo_casing/p50/marksman - name = ".416 Stabilis marksman hyperkinetic casing" - desc = "A .416 bullet casing. Loaded with a hyperkinetic bullet that ignores mundane things like \"travel time\" \ - and a concerning amount of experimental propellant. A label warns of overpressure risk, and to not use the round if \ - a given weapon cannot handle pressures greater than 95000 PSI.\ - <br><br>\ - <i>MARKSMAN: Bullets have <b>no</b> travel time, and can ricochet once. Does slightly less damage, lacks innate dismemberment and contact-stun capabilities.</i>" - projectile_type = /obj/projectile/bullet/p50/marksman - -// overrides for tgcode 4.6x30mm, used in the WT-550 -/obj/item/ammo_casing/c46x30mm - name = "8mm Usurpator bullet casing" - desc = "An 8mm bullet casing." - -/obj/item/ammo_casing/c46x30mm/ap - name = "8mm Usurpator armor-piercing bullet casing" - desc = "An 8mm armor-piercing bullet casing.\ - <br><br>\ - <i>ARMOR PIERCING: Increased armor piercing capabilities. What did you expect?</i>" - custom_materials = AMMO_MATS_AP - advanced_print_req = TRUE - -/obj/item/ammo_casing/c46x30mm/inc - name = "8mm Usurpator incendiary bullet casing" - desc = "An 8mm incendiary bullet casing.\ - <br><br>\ - <i>INCENDIARY: Leaves a trail of fire when shot, sets targets aflame.</i>" - custom_materials = AMMO_MATS_TEMP - advanced_print_req = TRUE - -// overrides for tgcode .45, used in the M1911 and C20-r -/obj/item/ammo_casing/c45 - name = ".460 Ceres bullet casing" - desc = "A .460 bullet casing." - -/obj/item/ammo_casing/c45/ap - name = ".460 Ceres armor-piercing bullet casing" - desc = "An armor-piercing .460 bullet casing.\ - <br><br>\ - <i>ARMOR PIERCING: Increased armor piercing capabilities. What did you expect?</i>" - custom_materials = AMMO_MATS_AP - advanced_print_req = TRUE - -/obj/item/ammo_casing/c45/inc - name = ".460 Ceres incendiary bullet casing" - desc = "An incendiary .460 bullet casing.\ - <br><br>\ - <i>INCENDIARY: Leaves a trail of fire when shot, sets targets aflame.</i>" - custom_materials = AMMO_MATS_TEMP - advanced_print_req = TRUE - -// overrides for .50AE, used in the deagle -/obj/item/ammo_casing/a50ae - name = ".454 Trucidator bullet casing" - desc = "A .454 Trucidator bullet casing. Extremely powerful.\ - <br><br>\ - <i>HAND CANNON: Fired out of a handgun, deals disproportionately large damage.</i>" - -// overrides for .357, used in the .357 revolver -/obj/item/ammo_casing/a357 //We can keep the Magnum classic. - name = ".357 bullet casing" - desc = "A .357 bullet casing.\ - <br><br>\ - <i>HAND CANNON: Fired out of a handgun, deals disproportionately large damage.</i>" - -/obj/item/ammo_casing/a357/match - desc = "A .357 bullet casing, manufactured to exceedingly high standards.\ - <br><br>\ - <i>MATCH: Ricochets everywhere. Like crazy.</i>" - -/obj/item/ammo_casing/a357/phasic - desc = "A .357 phasic bullet casing.\ - <br><br>\ - <i>PHASIC: Ignores all surfaces except organic matter.</i>" - advanced_print_req = TRUE - custom_materials = AMMO_MATS_PHASIC - -/obj/item/ammo_casing/a357/heartseeker - desc = "A .357 heartseeker bullet casing.\ - <br><br>\ - <i>HEARTSEEKER: Has homing capabilities, methodology unknown.</i>" - advanced_print_req = TRUE - custom_materials = AMMO_MATS_HOMING // meme ammo. meme print cost - -// overrides for .38 Special, used in the .38 revolvers, including the det's -/obj/item/ammo_box/c38 - caliber = CALIBER_38 - -/obj/item/ammo_casing/c38/trac - custom_materials = AMMO_MATS_TRAC - advanced_print_req = TRUE - -/obj/item/ammo_casing/c38/dumdum - advanced_print_req = TRUE - -/obj/item/ammo_casing/c38/hotshot - custom_materials = AMMO_MATS_TEMP - advanced_print_req = TRUE - -/obj/item/ammo_casing/c38/iceblox - custom_materials = AMMO_MATS_TEMP // plasma's wack. - advanced_print_req = TRUE - -// The ones above are the casings for the ammo, whereas the ones below are the actual projectiles that give you feedback when you're shot - -/obj/projectile/bullet/a223 - name = ".277 Aestus bullet" - -/obj/projectile/bullet/a223/phasic - name = ".277 phasic bullet" - -/obj/projectile/bullet/c9mm - name = "9x25mm bullet" - -/obj/projectile/bullet/c9mm/ap - name = "9x25mm armor-piercing bullet" - -/obj/projectile/bullet/c9mm/hp - name = "9x25mm fragmenting bullet" - -/obj/projectile/bullet/incendiary/c9mm - name = "9x25mm incendiary bullet" - -/obj/projectile/bullet/c45 - name = ".460 bullet" - -/obj/projectile/bullet/c45/ap - name = ".460 armor-piercing bullet" - -/obj/projectile/bullet/incendiary/c45 - name = ".460 incendiary bullet" - -/obj/projectile/bullet/c46x30mm - name = "8mm Usurpator bullet" - -/obj/projectile/bullet/c46x30mm/ap - name = "8mm armor-piercing bullet" - -/obj/projectile/bullet/incendiary/c46x30mm - name = "8mm incendiary bullet" - -/obj/projectile/bullet/p50 - name = ".416 Stabilis bullet" - -/obj/projectile/bullet/p50/disruptor - name = ".416 disruptor bullet" - -/obj/projectile/bullet/p50/penetrator - name = ".416 penetrator bullet" - -/obj/projectile/bullet/a50ae - name = ".454 Trucidator bullet" - - -// MAGAZINES UPDATED TO MATCH STUFF - -/obj/item/ammo_box/magazine/wt550m9 - name = "\improper WT-550 magazine" - desc = "A 20-round toploaded 8mm Usurpator magazine that fits neatly in the WT-550." - -/obj/item/ammo_box/magazine/wt550m9/wtap - name = "\improper WT-550 AP magazine" - -/obj/item/ammo_box/magazine/wt550m9/wtic - name = "\improper WT-550 IND magazine" - -/obj/item/ammo_box/magazine/smgm45 - name = ".460 Ceres SMG magazine" - desc = "A magazine chambered for .460 meant to fit in submachine guns." - -/obj/item/ammo_box/magazine/smgm45/ap - name = ".460 Ceres AP SMG magazine" - -/obj/item/ammo_box/magazine/smgm45/incen - name = ".460 Ceres IND SMG magazine" - -/obj/item/ammo_box/magazine/tommygunm45 - name = "\improper Tommy Gun .460 Ceres drum" - desc = "A disc magazine chambered for .460 Ceres." - -/obj/item/ammo_box/magazine/m556 - name = ".277 Aestus toploading magazine" - desc = "A toploading magazine chambered for .277 Aestus." - -/obj/item/ammo_box/magazine/m556/phasic - name = ".277 PHASE toploading magazine" - -/obj/item/ammo_box/magazine/sniper_rounds - name = "anti-materiel rifle magazine" - desc = "A heavy magazine chambered for .416 Stabilis." - -/obj/item/ammo_box/magazine/sniper_rounds/soporific - desc = "A magazine with soporific .416 Stabilis ammo, designed for happy days and dead quiet nights." - -/obj/item/ammo_box/magazine/sniper_rounds/penetrator - name = "anti-materiel rifle ++P magazine" - desc = "A heavy magazine with over the top, overpressurized, and frankly over the top .416 penetrator ammo." - -/obj/item/ammo_box/magazine/m50 - name = ".454 Trucidator handcannon magazine" - desc = "An absurdly THICK magazine possibly meant for a heavy hitting pistol, if you can call it that." diff --git a/modular_skyrat/modules/aesthetics/guns/code/magazine.dm b/modular_skyrat/modules/aesthetics/guns/code/magazine.dm deleted file mode 100644 index f06307fc16d06a..00000000000000 --- a/modular_skyrat/modules/aesthetics/guns/code/magazine.dm +++ /dev/null @@ -1,4 +0,0 @@ -/obj/item/ammo_box/magazine/m9mm - name = "pistol magazine (9x25mm)" - multiple_sprites = AMMO_BOX_PER_BULLET - icon = 'modular_skyrat/modules/aesthetics/guns/icons/magazine.dmi' diff --git a/modular_skyrat/modules/aesthetics/guns/icons/guns.dmi b/modular_skyrat/modules/aesthetics/guns/icons/guns.dmi deleted file mode 100644 index deb9cd5931e232..00000000000000 Binary files a/modular_skyrat/modules/aesthetics/guns/icons/guns.dmi and /dev/null differ diff --git a/modular_skyrat/modules/aesthetics/heater/code/spaceheater.dm b/modular_skyrat/modules/aesthetics/heater/code/spaceheater.dm deleted file mode 100644 index 853560c7ea0dd6..00000000000000 --- a/modular_skyrat/modules/aesthetics/heater/code/spaceheater.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/machinery/space_heater - icon = 'modular_skyrat/modules/aesthetics/heater/icons/heater.dmi' diff --git a/modular_skyrat/modules/aesthetics/heavy_lathe/heavy_lathe.dm b/modular_skyrat/modules/aesthetics/heavy_lathe/heavy_lathe.dm deleted file mode 100644 index a74064d86fe753..00000000000000 --- a/modular_skyrat/modules/aesthetics/heavy_lathe/heavy_lathe.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/machinery/rnd/experimentor - icon = 'modular_skyrat/modules/aesthetics/heavy_lathe/heavy_lathe.dmi' diff --git a/modular_skyrat/modules/aesthetics/implanter/implanter.dm b/modular_skyrat/modules/aesthetics/implanter/implanter.dm deleted file mode 100644 index a30292b6f2a0d6..00000000000000 --- a/modular_skyrat/modules/aesthetics/implanter/implanter.dm +++ /dev/null @@ -1,8 +0,0 @@ -/obj/item/implanter - icon = 'modular_skyrat/modules/aesthetics/implanter/implanter.dmi' - -/obj/item/implantpad - icon = 'modular_skyrat/modules/aesthetics/implanter/implanter.dmi' - -/obj/item/implantcase - icon = 'modular_skyrat/modules/aesthetics/implanter/implanter.dmi' diff --git a/modular_skyrat/modules/aesthetics/intercom/code/intercom.dm b/modular_skyrat/modules/aesthetics/intercom/code/intercom.dm deleted file mode 100644 index e9d30a844caf2d..00000000000000 --- a/modular_skyrat/modules/aesthetics/intercom/code/intercom.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/item/radio/intercom - icon = 'modular_skyrat/modules/aesthetics/intercom/icons/intercom.dmi' - -/obj/item/wallframe/intercom - icon = 'modular_skyrat/modules/aesthetics/intercom/icons/intercom.dmi' diff --git a/modular_skyrat/modules/aesthetics/janitor/janitor.dm b/modular_skyrat/modules/aesthetics/janitor/janitor.dm deleted file mode 100644 index fd06cd22d26418..00000000000000 --- a/modular_skyrat/modules/aesthetics/janitor/janitor.dm +++ /dev/null @@ -1,9 +0,0 @@ -/obj/structure/mop_bucket - icon = 'modular_skyrat/modules/aesthetics/janitor/janitor.dmi' - -// This isn't custom though. -/obj/structure/mop_bucket/janitorialcart - icon = 'icons/obj/service/janitor.dmi' - -/obj/item/reagent_containers/cup/bucket - icon = 'modular_skyrat/modules/aesthetics/janitor/janitor.dmi' diff --git a/modular_skyrat/modules/aesthetics/kitchen/kitchen.dm b/modular_skyrat/modules/aesthetics/kitchen/kitchen.dm deleted file mode 100644 index 4324487db65c53..00000000000000 --- a/modular_skyrat/modules/aesthetics/kitchen/kitchen.dm +++ /dev/null @@ -1,42 +0,0 @@ -/obj/structure/kitchenspike_frame - icon = 'modular_skyrat/modules/aesthetics/kitchen/kitchen.dmi' - -/obj/structure/kitchenspike - icon = 'modular_skyrat/modules/aesthetics/kitchen/kitchen.dmi' - -/obj/machinery/processor - icon = 'modular_skyrat/modules/aesthetics/kitchen/kitchen.dmi' - -/obj/machinery/deepfryer - icon = 'modular_skyrat/modules/aesthetics/kitchen/kitchen.dmi' - -/obj/machinery/grill - icon = 'modular_skyrat/modules/aesthetics/kitchen/kitchen.dmi' - -/obj/machinery/gibber - icon = 'modular_skyrat/modules/aesthetics/kitchen/kitchen.dmi' - -//Different icon file, but it will still go in the kitchen folder!!! -/obj/machinery/microwave - icon = 'modular_skyrat/modules/aesthetics/kitchen/microwave.dmi' - -/obj/structure/showcase/machinery/microwave - icon = 'modular_skyrat/modules/aesthetics/kitchen/microwave.dmi' - -//Skyrat Coffee Maker Icons -/obj/machinery/coffeemaker - icon = 'modular_skyrat/modules/aesthetics/kitchen/coffeemaker.dmi' - -/obj/item/reagent_containers/cup/coffeepot - icon = 'modular_skyrat/modules/aesthetics/kitchen/coffeemaker.dmi' - fill_icon = 'modular_skyrat/modules/aesthetics/kitchen/coffeemaker.dmi' - fill_icon_state = "coffeepot" - -/obj/item/coffee_cartridge - icon = 'modular_skyrat/modules/aesthetics/kitchen/coffeemaker.dmi' - -/obj/item/blank_coffee_cartridge - icon = 'modular_skyrat/modules/aesthetics/kitchen/coffeemaker.dmi' - -/obj/item/storage/fancy/coffee_cart_rack - icon = 'modular_skyrat/modules/aesthetics/kitchen/coffeemaker.dmi' diff --git a/modular_skyrat/modules/aesthetics/lightswitch/code/lightswitch.dm b/modular_skyrat/modules/aesthetics/lightswitch/code/lightswitch.dm deleted file mode 100644 index bdf0001cf17c27..00000000000000 --- a/modular_skyrat/modules/aesthetics/lightswitch/code/lightswitch.dm +++ /dev/null @@ -1,24 +0,0 @@ -/obj/machinery/light_switch - icon = 'modular_skyrat/modules/aesthetics/lightswitch/icons/lightswitch.dmi' - -/obj/machinery/light_switch/interact(mob/user) - . = ..() - playsound(src, 'modular_skyrat/modules/aesthetics/lightswitch/sound/lightswitch.ogg', 100, 1) - -#ifndef UNIT_TESTS -/obj/machinery/light_switch/LateInitialize() - . = ..() - if(prob(50) && area.lightswitch) //50% chance for area to start with lights off. - turn_off() -#endif - -/obj/machinery/light_switch/proc/turn_off() - if(!area.lightswitch) - return - area.lightswitch = FALSE - area.update_icon() - - for(var/obj/machinery/light_switch/light_switch in area) - light_switch.update_icon() - - area.power_change() diff --git a/modular_skyrat/modules/aesthetics/morgue/code/morgue.dm b/modular_skyrat/modules/aesthetics/morgue/code/morgue.dm deleted file mode 100644 index 96cc2afc816e22..00000000000000 --- a/modular_skyrat/modules/aesthetics/morgue/code/morgue.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/structure/bodycontainer - icon = 'modular_skyrat/modules/aesthetics/morgue/icons/morgue.dmi' diff --git a/modular_skyrat/modules/aesthetics/plasticflaps/code/plasticflaps.dm b/modular_skyrat/modules/aesthetics/plasticflaps/code/plasticflaps.dm deleted file mode 100644 index 0141e9c925a949..00000000000000 --- a/modular_skyrat/modules/aesthetics/plasticflaps/code/plasticflaps.dm +++ /dev/null @@ -1,3 +0,0 @@ -/obj/structure/plasticflaps - icon = 'modular_skyrat/modules/aesthetics/plasticflaps/icons/plasticflaps.dmi' - diff --git a/modular_skyrat/modules/aesthetics/shieldgen/code/shieldgen.dm b/modular_skyrat/modules/aesthetics/shieldgen/code/shieldgen.dm deleted file mode 100644 index 2f636e7e0fcb82..00000000000000 --- a/modular_skyrat/modules/aesthetics/shieldgen/code/shieldgen.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/machinery/power/shieldwallgen - icon = 'modular_skyrat/modules/aesthetics/shieldgen/icons/shieldgen.dmi' diff --git a/modular_skyrat/modules/aesthetics/stationobjs/stationobjs.dm b/modular_skyrat/modules/aesthetics/stationobjs/stationobjs.dm deleted file mode 100644 index f23191eab1c536..00000000000000 --- a/modular_skyrat/modules/aesthetics/stationobjs/stationobjs.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/structure/dresser - icon = 'modular_skyrat/modules/aesthetics/stationobjs/stationobjs.dmi' diff --git a/modular_skyrat/modules/aesthetics/storage/storage.dm b/modular_skyrat/modules/aesthetics/storage/storage.dm deleted file mode 100644 index 92bd763cd90dce..00000000000000 --- a/modular_skyrat/modules/aesthetics/storage/storage.dm +++ /dev/null @@ -1,140 +0,0 @@ -/obj/item/storage/medkit/emergency - icon = 'modular_skyrat/modules/aesthetics/storage/storage.dmi' - -/obj/item/borg/upgrade/rped - icon = 'modular_skyrat/modules/aesthetics/storage/storage.dmi' - -/obj/item/storage/part_replacer - icon = 'modular_skyrat/modules/aesthetics/storage/storage.dmi' - -/obj/item/storage/part_replacer/bluespace - icon = 'icons/obj/storage/storage.dmi' - -/obj/item/storage/part_replacer/cyborg - icon = 'modular_skyrat/modules/aesthetics/storage/storage.dmi' - - - -/* -// Boxes -*/ -/obj/item/storage/box - icon = 'modular_skyrat/modules/aesthetics/storage/storage.dmi' - -/obj/item/storage/box/donkpockets - icon = 'icons/obj/storage/box.dmi' - -/obj/item/storage/box/survival/syndie - icon_state = "syndiebox" - -/obj/item/storage/box/clown - icon_state = "hugbox" - -/obj/item/storage/box/cyber_implants - illustration = null //Included in the sprite - -/obj/item/storage/box/mothic_rations - icon = 'icons/obj/storage/box.dmi' - -/obj/item/storage/box/mothic_goods - icon = 'icons/obj/storage/box.dmi' - -/obj/item/storage/box/mothic_cans_sauces - icon = 'icons/obj/storage/box.dmi' - -/obj/item/storage/box/tiziran_meats - icon = 'icons/obj/storage/box.dmi' - -/obj/item/storage/box/tiziran_cans - icon = 'icons/obj/storage/box.dmi' - -/obj/item/storage/box/tiziran_goods - icon = 'icons/obj/storage/box.dmi' - - -/* -// Medical -*/ -/obj/item/storage/box/swab - icon_state = "medbox" - -/obj/item/storage/box/masks - icon_state = "medbox" - -/obj/item/storage/box/bodybags - icon_state = "medbox" - -/obj/item/storage/box/survival/medical - icon_state = "medbox" - -/obj/item/storage/box/syringes - icon_state = "medbox" - -/obj/item/storage/box/medipens - icon_state = "medbox" - -/obj/item/storage/box/medigels - icon_state = "medbox" - -/obj/item/storage/box/injectors - icon_state = "medbox" - -/obj/item/storage/box/pillbottles - icon_state = "medbox" - -/obj/item/storage/box/silver_sulf - icon_state = "medbox" - -/* -// Engineering -*/ -/obj/item/storage/box/metalfoam - icon_state = "engibox" - -/obj/item/storage/box/smart_metal_foam - icon_state = "engibox" - -/obj/item/storage/box/material - icon_state = "engibox" - -/* -// Security -*/ -/obj/item/storage/box/rubbershot - icon_state = "secbox_xl" - illustration = "rubbershot" - -/obj/item/storage/box/lethalshot - icon_state = "secbox_xl" - illustration = "buckshot" - -/obj/item/storage/box/beanbag - icon_state = "secbox_xl" - illustration = "beanbag" - -/obj/item/storage/box/breacherslug - icon_state = "secbox_xl" - illustration = "breacherslug" - -/obj/item/storage/box/evidence - icon_state = "secbox" - illustration = "evidence" - -/obj/item/storage/box/rxglasses/spyglasskit - icon_state = "secbox" - -/obj/item/storage/box/holobadge - icon_state = "secbox" - illustration = "holobadge" - -/obj/item/storage/box/survival/security - icon_state = "secbox" - -/obj/item/storage/box/emps - icon_state = "syndiebox" - -/obj/item/storage/box/chemimp - icon_state = "medbox" - -/obj/item/storage/box/exileimp - icon_state = "secbox" diff --git a/modular_skyrat/modules/aesthetics/telescience/telescience.dm b/modular_skyrat/modules/aesthetics/telescience/telescience.dm deleted file mode 100644 index 739038a3f03fc9..00000000000000 --- a/modular_skyrat/modules/aesthetics/telescience/telescience.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/item/gps - icon = 'modular_skyrat/modules/aesthetics/telescience/telescience.dmi' diff --git a/modular_skyrat/modules/aesthetics/tools/code/tools.dm b/modular_skyrat/modules/aesthetics/tools/code/tools.dm deleted file mode 100644 index 46afd0348672aa..00000000000000 --- a/modular_skyrat/modules/aesthetics/tools/code/tools.dm +++ /dev/null @@ -1,36 +0,0 @@ -/obj/item/weldingtool - icon = 'modular_skyrat/modules/aesthetics/tools/tools.dmi' - -/obj/item/crowbar - icon = 'modular_skyrat/modules/aesthetics/tools/tools.dmi' - -/obj/item/crowbar/power - lefthand_file = 'modular_skyrat/modules/aesthetics/tools/tools_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/aesthetics/tools/tools_righthand.dmi' - -/obj/item/crowbar/power/syndicate //Because we have a clearly different color JOL than upstream, this needs to be specifically different now - inhand_icon_state = "jaws_syndie" - -/obj/item/crowbar/large/heavy - icon = 'icons/obj/tools.dmi' - -/obj/item/crowbar/large/old - icon = 'icons/obj/tools.dmi' - -/obj/item/wrench - icon = 'modular_skyrat/modules/aesthetics/tools/tools.dmi' - -/obj/item/wrench/caravan - icon = 'icons/obj/tools.dmi' - -/obj/item/screwdriver/power - icon = 'modular_skyrat/modules/aesthetics/tools/tools.dmi' - -/obj/item/construction/plumbing //This icon override NEEDS to be here for the subtypes - icon = 'modular_skyrat/modules/aesthetics/tools/tools.dmi' - -/obj/item/construction/rcd/arcd - icon = 'modular_skyrat/modules/aesthetics/tools/tools.dmi' - -/obj/item/inducer - icon = 'modular_skyrat/modules/aesthetics/tools/tools.dmi' diff --git a/modular_skyrat/modules/aesthetics/walls/code/walls.dm b/modular_skyrat/modules/aesthetics/walls/code/walls.dm deleted file mode 100644 index bef7c462262b77..00000000000000 --- a/modular_skyrat/modules/aesthetics/walls/code/walls.dm +++ /dev/null @@ -1,26 +0,0 @@ -/turf/closed/wall - icon = 'modular_skyrat/modules/aesthetics/walls/icons/wall.dmi' - canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS - -/turf/closed/wall/r_wall - icon = 'modular_skyrat/modules/aesthetics/walls/icons/reinforced_wall.dmi' - -/turf/closed/wall/rust - icon = 'modular_skyrat/modules/aesthetics/walls/icons/wall.dmi' - icon_state = "wall-0" - base_icon_state = "wall" - -/turf/closed/wall/r_wall/rust - icon = 'modular_skyrat/modules/aesthetics/walls/icons/reinforced_wall.dmi' - icon_state = "reinforced_wall-0" - base_icon_state = "reinforced_wall" - -/obj/structure/falsewall/material - icon = 'modular_skyrat/modules/aesthetics/walls/icons/material_wall.dmi' - icon_state = "wall-0" - base_icon_state = "wall" - -/turf/closed/wall/material - icon = 'modular_skyrat/modules/aesthetics/walls/icons/material_wall.dmi' - icon_state = "wall-0" - base_icon_state = "wall" diff --git a/modular_skyrat/modules/aesthetics/walls/icons/material_wall.dmi b/modular_skyrat/modules/aesthetics/walls/icons/material_wall.dmi deleted file mode 100644 index 781d0c30dc991c..00000000000000 Binary files a/modular_skyrat/modules/aesthetics/walls/icons/material_wall.dmi and /dev/null differ diff --git a/modular_skyrat/modules/aesthetics/walls/icons/wall.dmi b/modular_skyrat/modules/aesthetics/walls/icons/wall.dmi deleted file mode 100644 index fd48b11b9b1cd7..00000000000000 Binary files a/modular_skyrat/modules/aesthetics/walls/icons/wall.dmi and /dev/null differ diff --git a/modular_skyrat/modules/aesthetics/washing_machine/code/washing_machine.dm b/modular_skyrat/modules/aesthetics/washing_machine/code/washing_machine.dm deleted file mode 100644 index 325bcea5a53d65..00000000000000 --- a/modular_skyrat/modules/aesthetics/washing_machine/code/washing_machine.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/machinery/washing_machine - icon = 'modular_skyrat/modules/aesthetics/washing_machine/icons/washing_machine.dmi' diff --git a/modular_skyrat/modules/aesthetics/windows/code/windows.dm b/modular_skyrat/modules/aesthetics/windows/code/windows.dm deleted file mode 100644 index 08b57e00b64531..00000000000000 --- a/modular_skyrat/modules/aesthetics/windows/code/windows.dm +++ /dev/null @@ -1,27 +0,0 @@ -/obj/structure/window/fulltile - icon = 'modular_skyrat/modules/aesthetics/windows/icons/window.dmi' - canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS - -/obj/structure/window/reinforced/fulltile - icon = 'modular_skyrat/modules/aesthetics/windows/icons/r_window.dmi' - canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS - -/obj/structure/window/reinforced/tinted/fulltile - icon = 'modular_skyrat/modules/aesthetics/windows/icons/r_window_tinted.dmi' - icon_state = "reinforced_window-0" - base_icon_state = "reinforced_window" - canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS - -/obj/structure/window/plasma/fulltile - icon = 'modular_skyrat/modules/aesthetics/windows/icons/window_plasma.dmi' - icon_state = "window-0" - base_icon_state = "window" - canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS - -/obj/structure/window/reinforced/plasma/fulltile - icon = 'modular_skyrat/modules/aesthetics/windows/icons/r_window_plasma.dmi' - icon_state = "reinforced_window-0" - base_icon_state = "reinforced_window" - canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS - -/obj/structure/window/reinforced/fulltile/ice diff --git a/modular_skyrat/modules/airlock_override/readme.md b/modular_skyrat/modules/airlock_override/readme.md deleted file mode 100644 index a6739868f4f5e2..00000000000000 --- a/modular_skyrat/modules/airlock_override/readme.md +++ /dev/null @@ -1,21 +0,0 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/16787 - -## Title: -Engineering override for airlocks on orange alert -MODULE ID: AIRLOCK_OVERRIDE - -### Description: -Adds functionality to the airlocks so that when the alert level is set to orange, engineers receive expanded access so they aren't stuck at an airlock when disaster happens. - -### TG Proc/File Changes: -code/game/machinery/computer/communications.dm -code/modules/security_levels/keycard_authentication.dm -tgui/packages/tgui/interfaces/CommunicationsConsole.js -tgui/packages/tgui/interfaces/KeycardAuth.js - -### Defines: -AIRLOCK_LIGHT_ENGINEERING in \Skyrat-tg\modular_skyrat\modules\aesthetics\airlock\code\airlock.dm -AIRLOCK_ENGINEERING_LIGHT_COLOR in \Skyrat-tg\modular_skyrat\modules\aesthetics\airlock\code\airlock.dm - -### Credits: -LT3 diff --git a/modular_skyrat/modules/alerts/code/default_announcer.dm b/modular_skyrat/modules/alerts/code/default_announcer.dm deleted file mode 100644 index 86add70db5815d..00000000000000 --- a/modular_skyrat/modules/alerts/code/default_announcer.dm +++ /dev/null @@ -1,48 +0,0 @@ -/datum/centcom_announcer/default - welcome_sounds = list('sound/ai/default/welcome.ogg') - alert_sounds = list('modular_skyrat/modules/alerts/sound/alerts/alert2.ogg') - command_report_sounds = list('modular_skyrat/modules/alerts/sound/alerts/commandreport.ogg') - event_sounds = list( - ANNOUNCER_AIMALF = 'sound/ai/default/aimalf.ogg', - ANNOUNCER_ALIENS = 'modular_skyrat/modules/alerts/sound/alerts/lifesigns.ogg', - ANNOUNCER_ANIMES = 'modular_skyrat/modules/alerts/sound/alerts/animes.ogg', - ANNOUNCER_INTERCEPT = 'modular_skyrat/modules/alerts/sound/alerts/alert2.ogg', - ANNOUNCER_IONSTORM = 'modular_skyrat/modules/alerts/sound/alerts/ionstorm.ogg', - ANNOUNCER_METEORS = 'modular_skyrat/modules/alerts/sound/alerts/meteors.ogg', - ANNOUNCER_OUTBREAK5 = 'modular_skyrat/modules/alerts/sound/alerts/outbreak5.ogg', - ANNOUNCER_OUTBREAK6 = 'modular_skyrat/modules/alerts/sound/alerts/alert3.ogg', - ANNOUNCER_OUTBREAK7 = 'modular_skyrat/modules/alerts/sound/alerts/outbreak7.ogg', - ANNOUNCER_POWEROFF = 'modular_skyrat/modules/alerts/sound/alerts/poweroff.ogg', - ANNOUNCER_POWERON = 'modular_skyrat/modules/alerts/sound/alerts/poweron.ogg', - ANNOUNCER_RADIATION = 'modular_skyrat/modules/alerts/sound/alerts/radiation.ogg', - ANNOUNCER_RADIATIONPASSED = 'modular_skyrat/modules/alerts/sound/alerts/radpassed.ogg', - ANNOUNCER_SHUTTLECALLED = 'modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_called.ogg', - ANNOUNCER_SHUTTLEDOCK = 'modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_docked.ogg', - ANNOUNCER_SHUTTLERECALLED = 'modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_recalled.ogg', - ANNOUNCER_SHUTTLELEFT = 'modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_left.ogg', - ANNOUNCER_ANOMALIES = 'modular_skyrat/modules/alerts/sound/alerts/alert2.ogg', - ANNOUNCER_GRAVANOMALIES= 'modular_skyrat/modules/alerts/sound/alerts/gravanomalies.ogg', - ANNOUNCER_SPANOMALIES = 'modular_skyrat/modules/alerts/sound/alerts/wormholes.ogg', - ANNOUNCER_VORTEXANOMALIES = 'modular_skyrat/modules/alerts/sound/alerts/vortex.ogg', - ANNOUNCER_MASSIVEBSPACEANOMALIES = 'modular_skyrat/modules/alerts/sound/alerts/bluespace_anomalies.ogg', - ANNOUNCER_TRANSLOCATION = 'modular_skyrat/modules/alerts/sound/alerts/transolcation.ogg', - ANNOUNCER_FLUXANOMALIES = 'modular_skyrat/modules/alerts/sound/alerts/flux.ogg', - ANNOUNCER_PYROANOMALIES = 'modular_skyrat/modules/alerts/sound/alerts/pyr_anomalies.ogg', - ANNOUNCER_CARP = 'modular_skyrat/modules/alerts/sound/alerts/carps.ogg', - ANNOUNCER_BLUESPACEARTY = 'modular_skyrat/modules/alerts/sound/alerts/artillery.ogg', - ANNOUNCER_CAPTAIN = 'modular_skyrat/modules/alerts/sound/alerts/announce.ogg', - ANNOUNCER_GRAVGENOFF = 'modular_skyrat/modules/alerts/sound/alerts/gravityoff.ogg', - ANNOUNCER_GRAVGENON = 'modular_skyrat/modules/alerts/sound/alerts/gravityon.ogg', - ANNOUNCER_GREYTIDE = 'modular_skyrat/modules/alerts/sound/alerts/greytide.ogg', - ANNOUNCER_COMMSBLACKOUT = 'modular_skyrat/modules/alerts/sound/alerts/commsblackout.ogg', - ANNOUNCER_ELECTRICALSTORM = 'modular_skyrat/modules/alerts/sound/alerts/estorm.ogg', - ANNOUNCER_BRANDINTELLIGENCE = 'modular_skyrat/modules/alerts/sound/alerts/rampant_brand_int.ogg', - ANNOUNCER_SPOOKY = 'modular_skyrat/modules/alerts/sound/misc/admin_horror_music.ogg', - ANNOUNCER_ERTYES = 'modular_skyrat/modules/alerts/sound/alerts/yesert.ogg', - ANNOUNCER_MUTANTS = 'modular_skyrat/modules/alerts/sound/alerts/hazdet.ogg', - ANNOUNCER_KLAXON = 'modular_skyrat/modules/black_mesa/sound/siren1_long.ogg', - ANNOUNCER_ICARUS = 'modular_skyrat/modules/assault_operatives/sound/icarus_alarm.ogg', - ANNOUNCER_NRI_RAIDERS = 'modular_skyrat/modules/encounters/sounds/morse.ogg', - ANNOUNCER_DEPARTMENTAL = 'modular_skyrat/modules/alerts/sound/alerts/alert3.ogg', - ANNOUNCER_SHUTTLE = 'modular_skyrat/modules/alerts/sound/alerts/alert3.ogg', - ) diff --git a/modular_skyrat/modules/alerts/code/security_level_datums.dm b/modular_skyrat/modules/alerts/code/security_level_datums.dm deleted file mode 100644 index a80ce9a519b402..00000000000000 --- a/modular_skyrat/modules/alerts/code/security_level_datums.dm +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Contains some overrides and our sec levels. - */ - -/datum/security_level/green - sound = 'modular_skyrat/modules/alerts/sound/security_levels/green.ogg' - -/datum/security_level/blue - sound = 'modular_skyrat/modules/alerts/sound/security_levels/blue.ogg' - -/datum/security_level/red - sound = 'modular_skyrat/modules/alerts/sound/security_levels/red.ogg' - -/datum/security_level/delta - announcement_color = "pink" - lowering_to_configuration_key = /datum/config_entry/string/alert_delta_downto - elevating_to_configuration_key = /datum/config_entry/string/alert_delta_upto - sound = 'modular_skyrat/modules/alerts/sound/security_levels/delta.ogg' - looping_sound = 'modular_skyrat/modules/alerts/sound/misc/alarm_delta.ogg' - looping_sound_interval = 8 SECONDS - - -/** - * Violet - * - * Medical emergency - */ -/datum/security_level/violet - name = "violet" - announcement_color = "purple" - number_level = SEC_LEVEL_VIOLET - lowering_to_configuration_key = /datum/config_entry/string/alert_violet_downto - elevating_to_configuration_key = /datum/config_entry/string/alert_violet_upto - sound = 'modular_skyrat/modules/alerts/sound/security_levels/violet.ogg' - shuttle_call_time_mod = 0.75 - -/** - * Orange - * - * Engineering emergency - */ -/datum/security_level/orange - name = "orange" - announcement_color = "orange" - number_level = SEC_LEVEL_ORANGE - lowering_to_configuration_key = /datum/config_entry/string/alert_orange_downto - elevating_to_configuration_key = /datum/config_entry/string/alert_orange_upto - sound = 'modular_skyrat/modules/alerts/sound/security_levels/orange.ogg' - shuttle_call_time_mod = 0.75 - -/** - * Amber - * - * Securty emergency - */ - -/datum/security_level/amber - name = "amber" - announcement_color = "yellow" - number_level = SEC_LEVEL_AMBER - lowering_to_configuration_key = /datum/config_entry/string/alert_amber_downto - elevating_to_configuration_key = /datum/config_entry/string/alert_amber_upto - sound = 'modular_skyrat/modules/alerts/sound/security_levels/amber.ogg' - shuttle_call_time_mod = 0.5 - - -/** - * Gamma - * - * XK-Class EOW Event - */ -/datum/security_level/gamma - name = "gamma" - announcement_color = "pink" - number_level = SEC_LEVEL_GAMMA - elevating_to_configuration_key = /datum/config_entry/string/alert_gamma - shuttle_call_time_mod = 0.25 - sound = 'modular_skyrat/modules/alerts/sound/security_levels/gamma_alert.ogg' - looping_sound = 'modular_skyrat/modules/alerts/sound/security_levels/gamma_alert.ogg' - looping_sound_interval = 13 SECONDS diff --git a/modular_skyrat/modules/alerts/readme.md b/modular_skyrat/modules/alerts/readme.md deleted file mode 100644 index 49129824a45d04..00000000000000 --- a/modular_skyrat/modules/alerts/readme.md +++ /dev/null @@ -1,29 +0,0 @@ -## Title: Alerts - -MODULE ID: ALERTS - -### Description: - -Adds new alert levels, and some extra details regarding the alerts - -### TG Proc Changes: -- EDIT: code/controllers/subsystem/shuttle.dm > /datum/controller/subsystem/shuttle/proc/canRecall() -- EDIT: code/game/machinery/computer/communications.dm > /obj/machinery/computer/communications/Topic(), /obj/machinery/computer/communications/ui_interact() -- EDIT: code/modules/mob/dead/new_player/new_player.dm > /mob/dead/new_player/proc/LateChoices() -- MOVED: code/modules/security_levels/security_levels.dm > about the entire file - -### Defines: - - ./code/__DEFINES/misc.dm > moved alert defines to: code/__DEFINES/~skyrat_defines/security_alerts.dm - -### Master file additions - -- N/A - -### Included files that are not contained in this module: - -- N/A - -### Credits: -Azarak - Porting -Afya - OG code diff --git a/modular_skyrat/modules/alt_vox/code/voc_sounds_mil.dm b/modular_skyrat/modules/alt_vox/code/voc_sounds_mil.dm deleted file mode 100644 index 00c2489f4aae0c..00000000000000 --- a/modular_skyrat/modules/alt_vox/code/voc_sounds_mil.dm +++ /dev/null @@ -1,294 +0,0 @@ -#ifdef AI_VOX - -GLOBAL_LIST_INIT(vox_sounds_mil, list( - "," = 'modular_skyrat/modules/alt_vox/sound/vox_mil/_comma.ogg', - "." = 'modular_skyrat/modules/alt_vox/sound/vox_mil/_period.ogg', - "error_beep" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/00_error_beep01.ogg', - "signon_beep" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/00_signon_beep01.ogg', - "hostile_takeover" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/c1a3_05_switchover.ogg', - "bloop" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/bloop.ogg', - "buzwarn" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/buzwarn.ogg', - "dadeda" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/dadeda.ogg', - "deeoo" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/deeoo.ogg', - "doop" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/doop.ogg', - "access" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/access.ogg', - "acknowledged" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/acknowledged.ogg', - "activate" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/activate.ogg', - "activated" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/activated.ogg', - "activity" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/activity.ogg', - "advanced" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/advanced.ogg', - "alert" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/alert.ogg', - "alien" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/alien.ogg', - "all" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/all.ogg', - "alpha" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/alpha.ogg', - "an" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/an.ogg', - "and" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/and.ogg', - "announcement" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/announcement.ogg', - "antenna" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/antenna.ogg', - "any" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/any.ogg', - "approach" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/approach.ogg', - "are" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/are.ogg', - "area" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/area.ogg', - "armed" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/armed.ogg', - "armory" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/armory.ogg', - "atomic" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/atomic.ogg', - "attention" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/attention.ogg', - "authorized" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/authorized.ogg', - "automatic" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/automatic.ogg', - "away" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/away.ogg', - "b" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/b.ogg', - "back" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/back.ogg', - "base" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/base.ogg', - "biohazard" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/biohazard.ogg', - "biological" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/biological.ogg', - "black" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/black.ogg', - "blast" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/blast.ogg', - "blue" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/blue.ogg', - "bravo" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/bravo.ogg', - "breach" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/breach.ogg', - "bypass" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/bypass.ogg', - "cable" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/cable.ogg', - "center" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/center.ogg', - "central" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/central.ogg', - "chamber" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/chamber.ogg', - "check" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/check.ogg', - "checkpoint" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/checkpoint.ogg', - "chemical" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/chemical.ogg', - "clear" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/clear.ogg', - "code" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/code.ogg', - "command" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/command.ogg', - "communications" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/communications.ogg', - "complex" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/complex.ogg', - "containment" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/containment.ogg', - "contamination" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/contamination.ogg', - "control" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/control.ogg', - "coolant" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/coolant.ogg', - "core" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/core.ogg', - "crew" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/crew.ogg', - "cross" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/cross.ogg', - "d" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/d.ogg', - "damage" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/damage.ogg', - "danger" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/danger.ogg', - "day" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/day.ogg', - "deactivated" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/deactivated.ogg', - "defense" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/defense.ogg', - "delta" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/delta.ogg', - "denied" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/denied.ogg', - "destroy" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/destroy.ogg', - "detected" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/detected.ogg', - "detonation" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/detonation.ogg', - "device" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/device.ogg', - "dimensional" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/dimensional.ogg', - "disengaged" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/disengaged.ogg', - "do" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/do.ogg', - "door" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/door.ogg', - "down" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/down.ogg', - "e" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/e.ogg', - "echo" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/echo.ogg', - "eight" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/eight.ogg', - "eighteen" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/eighteen.ogg', - "eighty" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/eighty.ogg', - "electric" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/electric.ogg', - "eleven" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/eleven.ogg', - "eliminate" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/eliminate.ogg', - "emergency" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/emergency.ogg', - "energy" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/energy.ogg', - "engage" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/engage.ogg', - "engaged" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/engaged.ogg', - "enter" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/enter.ogg', - "entry" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/entry.ogg', - "escape" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/escape.ogg', - "evacuate" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/evacuate.ogg', - "exchange" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/exchange.ogg', - "experimental" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/experimental.ogg', - "extreme" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/extreme.ogg', - "facility" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/facility.ogg', - "failed" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/failed.ogg', - "failure" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/failure.ogg', - "field" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/field.ogg', - "fifteen" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/fifteen.ogg', - "fifty" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/fifty.ogg', - "fire" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/fire.ogg', - "five" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/five.ogg', - "forbidden" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/forbidden.ogg', - "force" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/force.ogg', - "forms" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/forms.ogg', - "forty" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/forty.ogg', - "four" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/four.ogg', - "fourteen " = 'modular_skyrat/modules/alt_vox/sound/vox_mil/fourteen .ogg', - "freeman" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/freeman.ogg', - "from" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/from.ogg', - "fuel" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/fuel.ogg', - "get" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/get.ogg', - "go" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/go.ogg', - "gordon" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/gordon.ogg', - "granted" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/granted.ogg', - "green" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/green.ogg', - "handling" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/handling.ogg', - "hanger" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/hanger.ogg', - "have" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/have.ogg', - "hazard" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/hazard.ogg', - "health" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/health.ogg', - "heat" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/heat.ogg', - "helecopter" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/helecopter.ogg', - "helium" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/helium.ogg', - "high" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/high.ogg', - "hostal" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/hostal.ogg', - "hostile" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/hostile.ogg', - "hotel" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/hotel.ogg', - "hundred" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/hundred.ogg', - "hydro" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/hydro.ogg', - "illegal" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/illegal.ogg', - "immediate" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/immediate.ogg', - "immediately" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/immediately.ogg', - "in" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/in.ogg', - "india" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/india.ogg', - "inoperative" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/inoperative.ogg', - "inside" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/inside.ogg', - "inspection" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/inspection.ogg', - "is" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/is.ogg', - "kilo" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/kilo01.ogg', - "kilo2" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/kilo02.ogg', - "lambda" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/lambda.ogg', - "laser" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/laser.ogg', - "launch" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/launch.ogg', - "leak" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/leak.ogg', - "level" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/level.ogg', - "lima" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/lima.ogg', - "lima_alt" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/lima_alt.ogg', - "liquid" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/liquid.ogg', - "lock" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/lock.ogg', - "locked" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/locked.ogg', - "lockout" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/lockout.ogg', - "lower" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/lower.ogg', - "main" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/main.ogg', - "maintenance" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/maintenance.ogg', - "malfunction" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/malfunction.ogg', - "materials" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/materials.ogg', - "may" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/may.ogg', - "medical" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/medical.ogg', - "men" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/men.ogg', - "mesa" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/mesa.ogg', - "message" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/message.ogg', - "mic_mike" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/mic_mike.ogg', - "mike" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/mike.ogg', - "military" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/military.ogg', - "motorpool" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/motorpool.ogg', - "move" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/move.ogg', - "must" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/must.ogg', - "nearest" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/nearest.ogg', - "nine" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/nine.ogg', - "nineteen" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/nineteen.ogg', - "ninety" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/ninety.ogg', - "no" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/no.ogg', - "noe" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/noe.ogg', - "not" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/not.ogg', - "now" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/now.ogg', - "objective" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/objective.ogg', - "of" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/of.ogg', - "on" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/on.ogg', - "one" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/one.ogg', - "open" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/open.ogg', - "operating" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/operating.ogg', - "option" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/option.ogg', - "out" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/out.ogg', - "override" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/override.ogg', - "percent" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/percent.ogg', - "perimeter" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/perimeter.ogg', - "permitted" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/permitted.ogg', - "perpulsion" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/perpulsion.ogg', - "personnel" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/personnel.ogg', - "plant" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/plant.ogg', - "please" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/please.ogg', - "portal" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/portal.ogg', - "power" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/power.ogg', - "primary" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/primary.ogg', - "prosecute" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/prosecute.ogg', - "questioning" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/questioning.ogg', - "radiation" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/radiation.ogg', - "radioactive" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/radioactive.ogg', - "reach" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/reach.ogg', - "reactor" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/reactor.ogg', - "relay" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/relay.ogg', - "released" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/released.ogg', - "remaining" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/remaining.ogg', - "renegade" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/renegade.ogg', - "repair" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/repair.ogg', - "report" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/report.ogg', - "reports" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/reports.ogg', - "required" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/required.ogg', - "research" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/research.ogg', - "resistance" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/resistance.ogg', - "rocket" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/rocket.ogg', - "safety" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/safety.ogg', - "satellite" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/satellite.ogg', - "science" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/science.ogg', - "search" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/search.ogg', - "second" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/second.ogg', - "secondary" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/secondary.ogg', - "seconds" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/seconds.ogg', - "sector" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/sector.ogg', - "secure" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/secure.ogg', - "seven" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/seven.ogg', - "seventeen" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/seventeen.ogg', - "seventy" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/seventy.ogg', - "severe" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/severe.ogg', - "sheild" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/sheild.ogg', - "shoot" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/shoot.ogg', - "sierra" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/sierra.ogg', - "sight" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/sight.ogg', - "silo" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/silo.ogg', - "six" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/six.ogg', - "sixteen" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/sixteen.ogg', - "sixty" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/sixty.ogg', - "sorry" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/sorry.ogg', - "sqaud" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/sqaud.ogg', - "status" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/status.ogg', - "sterilization" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/sterilization.ogg', - "storage" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/storage.ogg', - "supercooled" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/supercooled.ogg', - "surrender" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/surrender.ogg', - "system" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/system.ogg', - "systems" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/systems.ogg', - "target" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/target.ogg', - "team" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/team.ogg', - "ten" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/ten.ogg', - "terminated" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/terminated.ogg', - "test" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/test.ogg', - "the" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/the.ogg', - "thirtteen" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/thirtteen.ogg', - "thirty" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/thirty.ogg', - "this" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/this.ogg', - "three" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/three.ogg', - "time" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/time.ogg', - "to" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/to.ogg', - "topside" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/topside.ogg', - "track" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/track.ogg', - "train" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/train.ogg', - "turret" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/turret.ogg', - "twelve" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/twelve.ogg', - "twenty" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/twenty.ogg', - "two" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/two.ogg', - "unauthorized" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/unauthorized.ogg', - "under" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/under.ogg', - "units" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/units.ogg', - "until" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/until.ogg', - "up" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/up.ogg', - "uranium" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/uranium.ogg', - "use" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/use.ogg', - "violation" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/violation.ogg', - "voltage" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/voltage.ogg', - "wanted" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/wanted.ogg', - "warning" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/warning.ogg', - "we" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/we.ogg', - "weapon" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/weapon.ogg', - "will" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/will.ogg', - "with" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/with.ogg', - "yellow" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/yellow.ogg', - "you" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/you.ogg', - "your" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/your.ogg', - "zero" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/zero.ogg', - "zone" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/zone.ogg' -)) - -#endif diff --git a/modular_skyrat/modules/alt_vox/code/vox_procs.dm b/modular_skyrat/modules/alt_vox/code/vox_procs.dm deleted file mode 100644 index 1af021687639f1..00000000000000 --- a/modular_skyrat/modules/alt_vox/code/vox_procs.dm +++ /dev/null @@ -1,219 +0,0 @@ -// Make sure that the code compiles with AI_VOX undefined -#ifdef AI_VOX -#define VOX_DELAY 300 - -/mob/living/silicon/ai - /// The currently selected VOX Announcer voice. - var/vox_type = VOX_BMS - /// The list of available VOX Announcer voices to choose from. - var/list/vox_voices = list(VOX_HL, VOX_NORMAL, VOX_BMS) - /// The VOX word(s) that were previously inputed. - var/vox_word_string - -/mob/living/silicon/ai/verb/announcement_help() - - set name = "Announcement Help" - set desc = "Display a list of vocal words to announce to the crew." - set category = "AI Commands" - - if(incapacitated()) - return - - var/dat = {" - <font class='bad'>WARNING:</font> Misuse of the announcement system will get you job banned.<BR><BR> - Here is a list of words you can type into the 'Announcement' button to create sentences to vocally announce to everyone on the same level at you.<BR> - <UL><LI>You can also click on the word to PREVIEW it.</LI> - <LI>You can only say 30 words for every announcement.</LI> - <LI>Do not use punctuation as you would normally, if you want a pause you can use the full stop and comma characters by separating them with spaces, like so: 'Alpha . Test , Bravo'.</LI> - <LI>Numbers are in word format, e.g. eight, sixty, etc </LI> - <LI>Sound effects begin with an 's' before the actual word, e.g. scensor</LI> - <LI>Use Ctrl+F to see if a word exists in the list.</LI></UL><HR> - "} - switch(vox_type) - if(VOX_NORMAL) - var/index = 0 - for(var/word in GLOB.vox_sounds_bms) - index++ - dat += "<A href='?src=[REF(src)];say_word=[word]'>[capitalize(word)]</A>" - if(index != GLOB.vox_sounds_bms.len) - dat += " / " - if(VOX_HL) - var/index = 0 - for(var/word in GLOB.vox_sounds_hl) - index++ - dat += "<A href='?src=[REF(src)];say_word=[word]'>[capitalize(word)]</A>" - if(index != GLOB.vox_sounds_hl.len) - dat += " / " - if(VOX_MIL) - var/index = 0 - for(var/word in GLOB.vox_sounds_mil) - index++ - dat += "<A href='?src=[REF(src)];say_word=[word]'>[capitalize(word)]</A>" - if(index != GLOB.vox_sounds_mil.len) - dat += " / " - if(VOX_BMS) - var/index = 0 - for(var/word in GLOB.vox_sounds_bms) - index++ - dat += "<A href='?src=[REF(src)];say_word=[word]'>[capitalize(word)]</A>" - if(index != GLOB.vox_sounds_bms.len) - dat += " / " - - var/datum/browser/popup = new(src, "announce_help", "Announcement Help", 500, 400) - popup.set_content(dat) - popup.open() - - -/mob/living/silicon/ai/proc/announcement() - var/static/announcing_vox = 0 // Stores the time of the last announcement - if(announcing_vox > world.time) - to_chat(src, span_notice("Please wait [DisplayTimeText(announcing_vox - world.time)].")) - return - - var/message = input(src, "WARNING: Misuse of this verb can result in you being job banned. More help is available in 'Announcement Help'", "Announcement", src.last_announcement) as text|null - - if(!message || announcing_vox > world.time) - return - - last_announcement = message - - if(incapacitated()) - return - - if(control_disabled) - to_chat(src, span_warning("Wireless interface disabled, unable to interact with announcement PA.")) - return - - var/list/words = splittext(trim(message), " ") - var/list/incorrect_words = list() - - if(words.len > 30) - words.len = 30 - - switch(vox_type) - if(VOX_NORMAL) - for(var/word in words) - word = lowertext(trim(word)) - if(!word) - words -= word - continue - if(!GLOB.vox_sounds[word]) - incorrect_words += word - if(VOX_HL) - for(var/word in words) - word = lowertext(trim(word)) - if(!word) - words -= word - continue - if(!GLOB.vox_sounds_hl[word]) - incorrect_words += word - if(VOX_MIL) - for(var/word in words) - word = lowertext(trim(word)) - if(!word) - words -= word - continue - if(!GLOB.vox_sounds_mil[word]) - incorrect_words += word - if(VOX_BMS) - for(var/word in words) - word = lowertext(trim(word)) - if(!word) - words -= word - continue - if(!GLOB.vox_sounds_bms[word]) - incorrect_words += word - - if(incorrect_words.len) - to_chat(src, span_notice("These words are not available on the announcement system: [english_list(incorrect_words)].")) - return - - announcing_vox = world.time + VOX_DELAY - - log_game("[key_name(src)] made a vocal announcement with the following message: [message].") - log_talk(message, LOG_SAY, tag="VOX Announcement") - say(";[message]", forced = "VOX Announcement") - - for(var/word in words) - play_vox_word(word, src.z, null, vox_type) - - -/proc/play_vox_word(word, z_level, mob/only_listener, vox_type) - - word = lowertext(word) - var/sound_file - var/volume = 100 - switch(vox_type) - if(VOX_HL) - if(GLOB.vox_sounds_hl[word]) - sound_file = GLOB.vox_sounds_hl[word] - volume = 75 - if(VOX_MIL) - if(GLOB.vox_sounds_mil[word]) - sound_file = GLOB.vox_sounds_mil[word] - volume = 50 // My poor ears... - if(VOX_BMS) - if(GLOB.vox_sounds_bms[word]) - sound_file = GLOB.vox_sounds_bms[word] - else - if(GLOB.vox_sounds[word]) - sound_file = GLOB.vox_sounds[word] - // If the vox stuff are disabled, or we failed getting the word from the list, just early return. - if(!sound_file) - return FALSE - var/sound/voice = sound(sound_file, wait = 1, channel = CHANNEL_VOX, volume = volume) - voice.status = SOUND_STREAM - - // If there is no single listener, broadcast to everyone in the same z level - if(!only_listener) - // Play voice for all mobs in the z level - for(var/mob/player_mob in GLOB.player_list) - if(!player_mob.can_hear() || !(safe_read_pref(player_mob.client, /datum/preference/toggle/sound_announcements))) - continue - - var/turf/player_turf = get_turf(player_mob) - if(player_turf.z != z_level) - continue - - SEND_SOUND(player_mob, voice) - - else - SEND_SOUND(only_listener, voice) - - return TRUE - - -/mob/living/silicon/ai/verb/switch_vox() - set name = "Switch Vox Voice" - set desc = "Switch your VOX announcement voice!" - set category = "AI Commands" - - if(incapacitated()) - return - var/selection = tgui_input_list(src, "Please select a new VOX voice:", "VOX VOICE", vox_voices) - if(selection == null) - return - vox_type = selection - - to_chat(src, "Vox voice set to [vox_type]") - - -/mob/living/silicon/ai/verb/display_word_string() - set name = "Display Word String" - set desc = "Display the list of recently pressed vox lines." - set category = "AI Commands" - - if(incapacitated()) - return - - to_chat(src, vox_word_string) - -/mob/living/silicon/ai/verb/clear_word_string() - set name = "Clear Word String" - set desc = "Clear recent vox words." - set category = "AI Commands" - - vox_word_string = "" - -#undef VOX_DELAY -#endif diff --git a/modular_skyrat/modules/alt_vox/code/vox_sounds_bms.dm b/modular_skyrat/modules/alt_vox/code/vox_sounds_bms.dm deleted file mode 100644 index 126146fb247a0e..00000000000000 --- a/modular_skyrat/modules/alt_vox/code/vox_sounds_bms.dm +++ /dev/null @@ -1,244 +0,0 @@ -#ifdef AI_VOX - -GLOBAL_LIST_INIT(vox_sounds_bms, list( - "activated" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/activated.ogg', - "administration" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/administration.ogg', - "administration_center" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/administration_center.ogg', - "agent" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/agent.ogg', - "alan" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/alan.ogg', - "alexander" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/alexander.ogg', - "all" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/all.ogg', - "all_personnel" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/all_personnel.ogg', - "alpha" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/alpha.ogg', - "and" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/and.ogg', - "anomalous" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/anomalous.ogg', - "anomalous_energy_field" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/anomalous_energy_field.ogg', - "any" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/any.ogg', - "area" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/area.ogg', - "at" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/at.ogg', - "attention" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/attention.ogg', - "audit" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/audit.ogg', - "b" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/b.ogg', - "bad_boop_long" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/bad_boop_long.ogg', - "bad_boop_short" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/bad_boop_short.ogg', - "ben" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/ben.ogg', - "biohazard" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/biohazard.ogg', - "biological" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/biological.ogg', - "boop_boop_long" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/boop_boop_long.ogg', - "boop_boop_short" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/boop_boop_short.ogg', - "bravo" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/bravo.ogg', - "brickman" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/brickman.ogg', - "c" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/c.ogg', - "call" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/call.ogg', - "captain" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/captain.ogg', - "center" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/center.ogg', - "central" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/central.ogg', - "check" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/check.ogg', - "checkpoint" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/checkpoint.ogg', - "chenner" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/chenner.ogg', - "cisc" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/cisc.ogg', - "clayson" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/clayson.ogg', - "cleanup" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/cleanup.ogg', - "coded_message_for" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/coded_message_for.ogg', - "command" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/command.ogg', - "command_and_communications" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/command_and_communications.ogg', - "command_and_communications_center" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/command_and_communications_center.ogg', - "communications" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/communications.ogg', - "complex" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/complex.ogg', - "complex_2" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/complex_2.ogg', - "conference_room" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/conference_room.ogg', - "containment" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/containment.ogg', - "control_team" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/control_team.ogg', - "coolant" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/coolant.ogg', - "corporal" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/corporal.ogg', - "d" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/d.ogg', - "dale" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/dale.ogg', - "dam" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/dam.ogg', - "damage" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/damage.ogg', - "danger" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/danger.ogg', - "defence" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/defence.ogg', - "detected" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/detected.ogg', - "detected_in" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/detected_in.ogg', - "detonation" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/detonation.ogg', - "doctor" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/doctor.ogg', - "dominski" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/dominski.ogg', - "doot_doot" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/doot_doot.ogg', - "down" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/down.ogg', - "do_not" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/do_not.ogg', - "do_not_use" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/do_not_use.ogg', - "eight" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/eight.ogg', - "electric" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/electric.ogg', - "electric_shock" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/electric_shock.ogg', - "elevator" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/elevator.ogg', - "emergency" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/emergency.ogg', - "emergency_2" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_2.ogg', - "emergency_cleanup_team" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_cleanup_team.ogg', - "emergency_shutdown" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_shutdown.ogg', - "emergency_uranium_containment_team_to" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_uranium_containment_team_to.ogg', - "energy" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/energy.ogg', - "engles" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/engles.ogg', - "evacuate" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/evacuate.ogg', - "evacuate_area_immediately" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/evacuate_area_immediately.ogg', - "evacuate_sector" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/evacuate_sector.ogg', - "extreme" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/extreme.ogg', - "extreme_danger" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/extreme_danger.ogg', - "extreme_force" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/extreme_force.ogg', - "facility" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/facility.ogg', - "failure" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/failure.ogg', - "field" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/field.ogg', - "fifteen" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/fifteen.ogg', - "five" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/five.ogg', - "fleistad" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/fleistad.ogg', - "flooding" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/flooding.ogg', - "for" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/for.ogg', - "force" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/force.ogg', - "foreman" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/foreman.ogg', - "forms" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/forms.ogg', - "four" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/four.ogg', - "freeman" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/freeman.ogg', - "hankle" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/hankle.ogg', - "hazard" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/hazard.ogg', - "hazard_course" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/hazard_course.ogg', - "headon" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/headon.ogg', - "helioski" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/helioski.ogg', - "help" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/help.ogg', - "high" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/high.ogg', - "high_energy_detonation" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/high_energy_detonation.ogg', - "high_security" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/high_security.ogg', - "horn" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/horn.ogg', - "human" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/human.ogg', - "hydro" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/hydro.ogg', - "immediately" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/immediately.ogg', - "in" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/in.ogg', - "india" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/india.ogg', - "interchange" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/interchange.ogg', - "is" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/is.ogg', - "is_now" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/is_now.ogg', - "j" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/j.ogg', - "junic" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/junic.ogg', - "kilo" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/kilo.ogg', - "lab" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/lab.ogg', - "lambda" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/lambda.ogg', - "laser" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/laser.ogg', - "level" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/level.ogg', - "lieutenant" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/lieutenant.ogg', - "lima" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/lima.ogg', - "line" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/line.ogg', - "login" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/login.ogg', - "lukas" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/lukas.ogg', - "maintenance" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/maintenance.ogg', - "material" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/material.ogg', - "materials" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/materials.ogg', - "materials_storage_facility" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/materials_storage_facility.ogg', - "medical" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/medical.ogg', - "medical_emergency" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/medical_emergency.ogg', - "med_down_in" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/med_down_in.ogg', - "member" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/member.ogg', - "men" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/men.ogg', - "military" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/military.ogg', - "minutes" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/minutes.ogg', - "monterro" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/monterro.ogg', - "morel" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/morel.ogg', - "motorpool" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/motorpool.ogg', - "murphin" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/murphin.ogg', - "network_team" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/network_team.ogg', - "nine" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/nine.ogg', - "oatsma" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/oatsma.ogg', - "observation" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/observation.ogg', - "office" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/office.ogg', - "on" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/on.ogg', - "one" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/one.ogg', - "operational" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/operational.ogg', - "operations" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/operations.ogg', - "optimal" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/optimal.ogg', - "outerchange" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/outerchange.ogg', - "performance" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/performance.ogg', - "personal_call" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/personal_call.ogg', - "personnel" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/personnel.ogg', - "personnel_2" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/personnel_2.ogg', - "place" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/place.ogg', - "plant" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/plant.ogg', - "please" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/please.ogg', - "please_2" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/please_2.ogg', - "please_call" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/please_call.ogg', - "please_report_status" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/please_report_status.ogg', - "please_report_to" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/please_report_to.ogg', - "proceedural" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/proceedural.ogg', - "processing" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/processing.ogg', - "processing_plant" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/processing_plant.ogg', - "profile" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/profile.ogg', - "prosecute" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/prosecute.ogg', - "questioning" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/questioning.ogg', - "raddock" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/raddock.ogg', - "rail" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/rail.ogg', - "reactor" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/reactor.ogg', - "repair" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/repair.ogg', - "reports" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/reports.ogg', - "report_to" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/report_to.ogg', - "required" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/required.ogg', - "residue" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/residue.ogg', - "resources" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/resources.ogg', - "review" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/review.ogg', - "robertson" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/robertson.ogg', - "rose" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/rose.ogg', - "scheduled" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/scheduled.ogg', - "scheduled_in" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/scheduled_in.ogg', - "science" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/science.ogg', - "science_personnel" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/science_personnel.ogg', - "sector" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/sector.ogg', - "secure" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/secure.ogg', - "secure_line_call" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/secure_line_call.ogg', - "security" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/security.ogg', - "security_officer" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/security_officer.ogg', - "security_personnel" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/security_personnel.ogg', - "sergeant" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/sergeant.ogg', - "service" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/service.ogg', - "service_team" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/service_team.ogg', - "sesan" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/sesan.ogg', - "seven" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/seven.ogg', - "shock" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/shock.ogg', - "shutdown" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/shutdown.ogg', - "six" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/six.ogg', - "status" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/status.ogg', - "stone" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/stone.ogg', - "storage" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/storage.ogg', - "sublevel" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/sublevel.ogg', - "superconducting" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/superconducting.ogg', - "supercooled" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/supercooled.ogg', - "system" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/system.ogg', - "systems" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/systems.ogg', - "tactical" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/tactical.ogg', - "tactical_operations_center" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/tactical_operations_center.ogg', - "tank" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/tank.ogg', - "tart" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/tart.ogg', - "team" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/team.ogg', - "tech" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/tech.ogg', - "tech_sergeant" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/tech_sergeant.ogg', - "test" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/test.ogg', - "test_lab" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/test_lab.ogg', - "three" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/three.ogg', - "to" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/to.ogg', - "toonson" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/toonson.ogg', - "topside" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/topside.ogg', - "truman" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/truman.ogg', - "turret" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/turret.ogg', - "two" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/two.ogg', - "unauthorised" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/unauthorised.ogg', - "unauthorised_biological_forms" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/unauthorised_biological_forms.ogg', - "unscheduled" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/unscheduled.ogg', - "upgrade" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/upgrade.ogg', - "uranium" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/uranium.ogg', - "use" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/use.ogg', - "ventilation" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/ventilation.ogg', - "ventilation_system" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/ventilation_system.ogg', - "warning" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/warning.ogg', - "waste" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/waste.ogg', - "wilson" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/wilson.ogg', - "with" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/with.ogg', - "zero" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/zero.ogg', - "_comma" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/_comma.ogg', - "_period" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/_period.ogg', -)) - -#endif - diff --git a/modular_skyrat/modules/alt_vox/code/vox_sounds_hl1.dm b/modular_skyrat/modules/alt_vox/code/vox_sounds_hl1.dm deleted file mode 100644 index 78e05e5cf0ca46..00000000000000 --- a/modular_skyrat/modules/alt_vox/code/vox_sounds_hl1.dm +++ /dev/null @@ -1,635 +0,0 @@ -#ifdef AI_VOX - -//for vim -// :%s/\(\(.*\)\.ogg\)/"\2" = 'sound\/vox\/\1',/g -GLOBAL_LIST_INIT(vox_sounds_hl, list("," = 'modular_skyrat/modules/alt_vox/sound/vox_hl/_comma.ogg', -"." = 'modular_skyrat/modules/alt_vox/sound/vox_hl/_period.ogg', -"a" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/a.ogg', -"accelerating" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/accelerating.ogg', -"accelerator" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/accelerator.ogg', -"accepted" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/accepted.ogg', -"access" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/access.ogg', -"acknowledge" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/acknowledge.ogg', -"acknowledged" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/acknowledged.ogg', -"acquired" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/acquired.ogg', -"acquisition" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/acquisition.ogg', -"across" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/across.ogg', -"activate" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/activate.ogg', -"activated" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/activated.ogg', -"activity" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/activity.ogg', -"adios" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/adios.ogg', -"administration" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/administration.ogg', -"advanced" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/advanced.ogg', -"after" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/after.ogg', -"agent" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/agent.ogg', -"alarm" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/alarm.ogg', -"alert" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/alert.ogg', -"alien" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/alien.ogg', -"aligned" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/aligned.ogg', -"all" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/all.ogg', -"alpha" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/alpha.ogg', -"am" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/am.ogg', -"amigo" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/amigo.ogg', -"ammunition" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/ammunition.ogg', -"an" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/an.ogg', -"and" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/and.ogg', -"announcement" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/announcement.ogg', -"anomalous" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/anomalous.ogg', -"antenna" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/antenna.ogg', -"any" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/any.ogg', -"apprehend" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/apprehend.ogg', -"approach" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/approach.ogg', -"are" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/are.ogg', -"area" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/area.ogg', -"arm" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/arm.ogg', -"armed" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/armed.ogg', -"armor" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/armor.ogg', -"armory" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/armory.ogg', -"arrest" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/arrest.ogg', -"ass" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/ass.ogg', -"at" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/at.ogg', -"atomic" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/atomic.ogg', -"attention" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/attention.ogg', -"authorize" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/authorize.ogg', -"authorized" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/authorized.ogg', -"automatic" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/automatic.ogg', -"away" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/away.ogg', -"b" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/b.ogg', -"back" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/back.ogg', -"backman" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/backman.ogg', -"bad" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/bad.ogg', -"bag" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/bag.ogg', -"bailey" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/bailey.ogg', -"barracks" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/barracks.ogg', -"base" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/base.ogg', -"bay" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/bay.ogg', -"be" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/be.ogg', -"been" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/been.ogg', -"before" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/before.ogg', -"beyond" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/beyond.ogg', -"biohazard" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/biohazard.ogg', -"biological" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/biological.ogg', -"birdwell" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/birdwell.ogg', -"bizwarn" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/bizwarn.ogg', -"black" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/black.ogg', -"blast" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/blast.ogg', -"blocked" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/blocked.ogg', -"bloop" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/bloop.ogg', -"blue" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/blue.ogg', -"bottom" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/bottom.ogg', -"bravo" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/bravo.ogg', -"breach" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/breach.ogg', -"breached" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/breached.ogg', -"break" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/break.ogg', -"bridge" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/bridge.ogg', -"bust" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/bust.ogg', -"but" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/but.ogg', -"button" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/button.ogg', -"buzwarn" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/buzwarn.ogg', -"bypass" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/bypass.ogg', -"c" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/c.ogg', -"cable" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/cable.ogg', -"call" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/call.ogg', -"called" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/called.ogg', -"canal" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/canal.ogg', -"cap" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/cap.ogg', -"captain" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/captain.ogg', -"capture" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/capture.ogg', -"captured" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/captured.ogg', -"ceiling" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/ceiling.ogg', -"celsius" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/celsius.ogg', -"center" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/center.ogg', -"centi" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/centi.ogg', -"central" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/central.ogg', -"chamber" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/chamber.ogg', -"charlie" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/charlie.ogg', -"check" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/check.ogg', -"checkpoint" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/checkpoint.ogg', -"chemical" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/chemical.ogg', -"cleanup" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/cleanup.ogg', -"clear" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/clear.ogg', -"clearance" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/clearance.ogg', -"close" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/close.ogg', -"clown" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/clown.ogg', -"code" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/code.ogg', -"coded" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/coded.ogg', -"collider" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/collider.ogg', -"command" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/command.ogg', -"communication" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/communication.ogg', -"complex" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/complex.ogg', -"computer" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/computer.ogg', -"condition" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/condition.ogg', -"containment" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/containment.ogg', -"contamination" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/contamination.ogg', -"control" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/control.ogg', -"coolant" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/coolant.ogg', -"coomer" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/coomer.ogg', -"core" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/core.ogg', -"correct" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/correct.ogg', -"corridor" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/corridor.ogg', -"crew" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/crew.ogg', -"cross" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/cross.ogg', -"cryogenic" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/cryogenic.ogg', -"d" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/d.ogg', -"dadeda" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/dadeda.ogg', -"damage" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/damage.ogg', -"damaged" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/damaged.ogg', -"danger" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/danger.ogg', -"day" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/day.ogg', -"deactivated" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/deactivated.ogg', -"decompression" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/decompression.ogg', -"decontamination" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/decontamination.ogg', -"deeoo" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/deeoo.ogg', -"defense" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/defense.ogg', -"degrees" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/degrees.ogg', -"delta" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/delta.ogg', -"denied" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/denied.ogg', -"deploy" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/deploy.ogg', -"deployed" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/deployed.ogg', -"destroy" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/destroy.ogg', -"destroyed" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/destroyed.ogg', -"detain" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/detain.ogg', -"detected" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/detected.ogg', -"detonation" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/detonation.ogg', -"device" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/device.ogg', -"did" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/did.ogg', -"die" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/die.ogg', -"dimensional" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/dimensional.ogg', -"dirt" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/dirt.ogg', -"disengaged" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/disengaged.ogg', -"dish" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/dish.ogg', -"disposal" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/disposal.ogg', -"distance" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/distance.ogg', -"distortion" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/distortion.ogg', -"do" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/do.ogg', -"doctor" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/doctor.ogg', -"doop" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/doop.ogg', -"door" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/door.ogg', -"down" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/down.ogg', -"dual" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/dual.ogg', -"duct" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/duct.ogg', -"e" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/e.ogg', -"east" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/east.ogg', -"echo" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/echo.ogg', -"ed" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/ed.ogg', -"effect" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/effect.ogg', -"egress" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/egress.ogg', -"eight" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/eight.ogg', -"eighteen" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/eighteen.ogg', -"eighty" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/eighty.ogg', -"electric" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/electric.ogg', -"electromagnetic" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/electromagnetic.ogg', -"elevator" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/elevator.ogg', -"eleven" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/eleven.ogg', -"eliminate" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/eliminate.ogg', -"emergency" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/emergency.ogg', -"enemy" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/enemy.ogg', -"energy" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/energy.ogg', -"engage" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/engage.ogg', -"engaged" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/engaged.ogg', -"engine" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/engine.ogg', -"enter" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/enter.ogg', -"entry" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/entry.ogg', -"environment" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/environment.ogg', -"error" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/error.ogg', -"escape" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/escape.ogg', -"evacuate" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/evacuate.ogg', -"exchange" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/exchange.ogg', -"exit" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/exit.ogg', -"expect" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/expect.ogg', -"experiment" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/experiment.ogg', -"experimental" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/experimental.ogg', -"explode" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/explode.ogg', -"explosion" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/explosion.ogg', -"exposure" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/exposure.ogg', -"exterminate" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/exterminate.ogg', -"extinguish" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/extinguish.ogg', -"extinguisher" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/extinguisher.ogg', -"extreme" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/extreme.ogg', -"f" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/f.ogg', -"face" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/face.ogg', -"facility" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/facility.ogg', -"fahrenheit" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fahrenheit.ogg', -"failed" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/failed.ogg', -"failure" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/failure.ogg', -"farthest" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/farthest.ogg', -"fast" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fast.ogg', -"feet" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/feet.ogg', -"field" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/field.ogg', -"fifteen" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fifteen.ogg', -"fifth" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fifth.ogg', -"fifty" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fifty.ogg', -"final" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/final.ogg', -"fine" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fine.ogg', -"fire" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fire.ogg', -"first" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/first.ogg', -"five" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/five.ogg', -"flag" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/flag.ogg', -"flooding" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/flooding.ogg', -"floor" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/floor.ogg', -"fool" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fool.ogg', -"for" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/for.ogg', -"forbidden" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/forbidden.ogg', -"force" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/force.ogg', -"forms" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/forms.ogg', -"found" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/found.ogg', -"four" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/four.ogg', -"fourteen" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fourteen.ogg', -"fourth" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fourth.ogg', -"fourty" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fourty.ogg', -"foxtrot" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/foxtrot.ogg', -"freeman" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/freeman.ogg', -"freezer" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/freezer.ogg', -"from" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/from.ogg', -"front" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/front.ogg', -"fuel" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fuel.ogg', -"g" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/g.ogg', -"gay" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/gay.ogg', -"get" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/get.ogg', -"go" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/go.ogg', -"going" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/going.ogg', -"good" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/good.ogg', -"goodbye" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/goodbye.ogg', -"gordon" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/gordon.ogg', -"got" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/got.ogg', -"government" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/government.ogg', -"granted" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/granted.ogg', -"great" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/great.ogg', -"green" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/green.ogg', -"grenade" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/grenade.ogg', -"guard" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/guard.ogg', -"gulf" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/gulf.ogg', -"gun" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/gun.ogg', -"guthrie" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/guthrie.ogg', -"handling" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/handling.ogg', -"hangar" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hangar.ogg', -"has" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/has.ogg', -"have" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/have.ogg', -"hazard" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hazard.ogg', -"head" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/head.ogg', -"health" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/health.ogg', -"heat" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/heat.ogg', -"helicopter" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/helicopter.ogg', -"helium" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/helium.ogg', -"hello" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hello.ogg', -"help" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/help.ogg', -"here" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/here.ogg', -"hide" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hide.ogg', -"high" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/high.ogg', -"highest" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/highest.ogg', -"hit" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hit.ogg', -"holds" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/holds.ogg', -"hole" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hole.ogg', -"hostile" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hostile.ogg', -"hot" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hot.ogg', -"hotel" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hotel.ogg', -"hour" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hour.ogg', -"hours" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hours.ogg', -"hundred" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hundred.ogg', -"hydro" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hydro.ogg', -"i" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/i.ogg', -"idiot" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/idiot.ogg', -"illegal" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/illegal.ogg', -"immediate" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/immediate.ogg', -"immediately" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/immediately.ogg', -"in" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/in.ogg', -"inches" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/inches.ogg', -"india" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/india.ogg', -"ing" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/ing.ogg', -"inoperative" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/inoperative.ogg', -"inside" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/inside.ogg', -"inspection" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/inspection.ogg', -"inspector" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/inspector.ogg', -"interchange" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/interchange.ogg', -"intruder" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/intruder.ogg', -"invallid" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/invallid.ogg', -"invasion" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/invasion.ogg', -"is" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/is.ogg', -"it" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/it.ogg', -"johnson" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/johnson.ogg', -"juliet" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/juliet.ogg', -"key" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/key.ogg', -"kill" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/kill.ogg', -"kilo" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/kilo.ogg', -"kit" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/kit.ogg', -"lab" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/lab.ogg', -"lambda" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/lambda.ogg', -"laser" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/laser.ogg', -"last" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/last.ogg', -"launch" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/launch.ogg', -"leak" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/leak.ogg', -"leave" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/leave.ogg', -"left" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/left.ogg', -"legal" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/legal.ogg', -"level" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/level.ogg', -"lever" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/lever.ogg', -"lie" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/lie.ogg', -"lieutenant" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/lieutenant.ogg', -"life" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/life.ogg', -"light" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/light.ogg', -"lima" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/lima.ogg', -"liquid" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/liquid.ogg', -"loading" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/loading.ogg', -"locate" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/locate.ogg', -"located" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/located.ogg', -"location" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/location.ogg', -"lock" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/lock.ogg', -"locked" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/locked.ogg', -"locker" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/locker.ogg', -"lockout" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/lockout.ogg', -"lower" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/lower.ogg', -"lowest" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/lowest.ogg', -"magnetic" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/magnetic.ogg', -"main" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/main.ogg', -"maintenance" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/maintenance.ogg', -"malfunction" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/malfunction.ogg', -"man" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/man.ogg', -"mass" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/mass.ogg', -"materials" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/materials.ogg', -"maximum" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/maximum.ogg', -"may" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/may.ogg', -"med" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/med.ogg', -"medical" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/medical.ogg', -"men" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/men.ogg', -"mercy" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/mercy.ogg', -"mesa" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/mesa.ogg', -"message" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/message.ogg', -"meter" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/meter.ogg', -"micro" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/micro.ogg', -"middle" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/middle.ogg', -"mike" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/mike.ogg', -"miles" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/miles.ogg', -"military" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/military.ogg', -"milli" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/milli.ogg', -"million" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/million.ogg', -"minefield" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/minefield.ogg', -"minimum" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/minimum.ogg', -"minutes" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/minutes.ogg', -"mister" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/mister.ogg', -"mode" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/mode.ogg', -"motor" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/motor.ogg', -"motorpool" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/motorpool.ogg', -"move" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/move.ogg', -"must" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/must.ogg', -"nearest" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/nearest.ogg', -"nice" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/nice.ogg', -"nine" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/nine.ogg', -"nineteen" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/nineteen.ogg', -"ninety" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/ninety.ogg', -"no" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/no.ogg', -"nominal" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/nominal.ogg', -"north" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/north.ogg', -"not" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/not.ogg', -"november" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/november.ogg', -"now" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/now.ogg', -"number" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/number.ogg', -"objective" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/objective.ogg', -"observation" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/observation.ogg', -"of" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/of.ogg', -"officer" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/officer.ogg', -"ok" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/ok.ogg', -"on" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/on.ogg', -"one" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/one.ogg', -"open" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/open.ogg', -"operating" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/operating.ogg', -"operations" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/operations.ogg', -"operative" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/operative.ogg', -"option" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/option.ogg', -"order" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/order.ogg', -"organic" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/organic.ogg', -"oscar" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/oscar.ogg', -"out" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/out.ogg', -"outside" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/outside.ogg', -"over" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/over.ogg', -"overload" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/overload.ogg', -"override" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/override.ogg', -"pacify" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/pacify.ogg', -"pain" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/pain.ogg', -"pal" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/pal.ogg', -"panel" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/panel.ogg', -"percent" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/percent.ogg', -"perimeter" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/perimeter.ogg', -"permitted" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/permitted.ogg', -"personnel" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/personnel.ogg', -"pipe" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/pipe.ogg', -"plant" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/plant.ogg', -"platform" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/platform.ogg', -"please" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/please.ogg', -"point" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/point.ogg', -"portal" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/portal.ogg', -"power" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/power.ogg', -"presence" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/presence.ogg', -"press" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/press.ogg', -"primary" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/primary.ogg', -"proceed" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/proceed.ogg', -"processing" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/processing.ogg', -"progress" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/progress.ogg', -"proper" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/proper.ogg', -"propulsion" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/propulsion.ogg', -"prosecute" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/prosecute.ogg', -"protective" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/protective.ogg', -"push" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/push.ogg', -"quantum" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/quantum.ogg', -"quebec" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/quebec.ogg', -"question" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/question.ogg', -"questioning" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/questioning.ogg', -"quick" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/quick.ogg', -"quit" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/quit.ogg', -"radiation" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/radiation.ogg', -"radioactive" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/radioactive.ogg', -"rads" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/rads.ogg', -"rapid" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/rapid.ogg', -"reach" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/reach.ogg', -"reached" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/reached.ogg', -"reactor" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/reactor.ogg', -"red" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/red.ogg', -"relay" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/relay.ogg', -"released" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/released.ogg', -"remaining" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/remaining.ogg', -"renegade" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/renegade.ogg', -"repair" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/repair.ogg', -"report" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/report.ogg', -"reports" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/reports.ogg', -"required" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/required.ogg', -"research" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/research.ogg', -"reset" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/reset.ogg', -"resevoir" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/resevoir.ogg', -"resistance" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/resistance.ogg', -"returned" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/returned.ogg', -"right" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/right.ogg', -"rocket" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/rocket.ogg', -"roger" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/roger.ogg', -"romeo" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/romeo.ogg', -"room" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/room.ogg', -"round" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/round.ogg', -"run" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/run.ogg', -"safe" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/safe.ogg', -"safety" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/safety.ogg', -"sargeant" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sargeant.ogg', -"satellite" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/satellite.ogg', -"save" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/save.ogg', -"science" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/science.ogg', -"scores" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/scores.ogg', -"scream" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/scream.ogg', -"screen" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/screen.ogg', -"search" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/search.ogg', -"second" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/second.ogg', -"secondary" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/secondary.ogg', -"seconds" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/seconds.ogg', -"sector" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sector.ogg', -"secure" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/secure.ogg', -"secured" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/secured.ogg', -"security" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/security.ogg', -"select" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/select.ogg', -"selected" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/selected.ogg', -"service" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/service.ogg', -"seven" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/seven.ogg', -"seventeen" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/seventeen.ogg', -"seventy" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/seventy.ogg', -"severe" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/severe.ogg', -"sewage" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sewage.ogg', -"sewer" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sewer.ogg', -"shield" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/shield.ogg', -"shipment" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/shipment.ogg', -"shock" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/shock.ogg', -"shoot" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/shoot.ogg', -"shower" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/shower.ogg', -"shut" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/shut.ogg', -"side" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/side.ogg', -"sierra" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sierra.ogg', -"sight" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sight.ogg', -"silo" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/silo.ogg', -"six" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/six.ogg', -"sixteen" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sixteen.ogg', -"sixty" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sixty.ogg', -"slime" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/slime.ogg', -"slow" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/slow.ogg', -"soldier" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/soldier.ogg', -"some" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/some.ogg', -"someone" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/someone.ogg', -"something" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/something.ogg', -"son" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/son.ogg', -"sorry" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sorry.ogg', -"south" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/south.ogg', -"squad" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/squad.ogg', -"square" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/square.ogg', -"stairway" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/stairway.ogg', -"status" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/status.ogg', -"sterile" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sterile.ogg', -"sterilization" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sterilization.ogg', -"stolen" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/stolen.ogg', -"storage" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/storage.ogg', -"sub" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sub.ogg', -"subsurface" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/subsurface.ogg', -"sudden" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sudden.ogg', -"suit" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/suit.ogg', -"superconducting" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/superconducting.ogg', -"supercooled" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/supercooled.ogg', -"supply" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/supply.ogg', -"surface" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/surface.ogg', -"surrender" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/surrender.ogg', -"surround" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/surround.ogg', -"surrounded" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/surrounded.ogg', -"switch" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/switch.ogg', -"system" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/system.ogg', -"systems" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/systems.ogg', -"tactical" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/tactical.ogg', -"take" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/take.ogg', -"talk" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/talk.ogg', -"tango" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/tango.ogg', -"tank" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/tank.ogg', -"target" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/target.ogg', -"team" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/team.ogg', -"temperature" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/temperature.ogg', -"temporal" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/temporal.ogg', -"ten" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/ten.ogg', -"terminal" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/terminal.ogg', -"terminated" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/terminated.ogg', -"termination" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/termination.ogg', -"test" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/test.ogg', -"that" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/that.ogg', -"the" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/the.ogg', -"then" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/then.ogg', -"there" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/there.ogg', -"third" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/third.ogg', -"thirteen" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/thirteen.ogg', -"thirty" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/thirty.ogg', -"this" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/this.ogg', -"those" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/those.ogg', -"thousand" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/thousand.ogg', -"threat" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/threat.ogg', -"three" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/three.ogg', -"through" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/through.ogg', -"time" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/time.ogg', -"to" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/to.ogg', -"top" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/top.ogg', -"topside" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/topside.ogg', -"touch" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/touch.ogg', -"towards" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/towards.ogg', -"track" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/track.ogg', -"train" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/train.ogg', -"transportation" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/transportation.ogg', -"truck" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/truck.ogg', -"tunnel" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/tunnel.ogg', -"turn" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/turn.ogg', -"turret" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/turret.ogg', -"twelve" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/twelve.ogg', -"twenty" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/twenty.ogg', -"two" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/two.ogg', -"unauthorized" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/unauthorized.ogg', -"under" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/under.ogg', -"uniform" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/uniform.ogg', -"unlocked" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/unlocked.ogg', -"until" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/until.ogg', -"up" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/up.ogg', -"upper" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/upper.ogg', -"uranium" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/uranium.ogg', -"us" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/us.ogg', -"usa" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/usa.ogg', -"use" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/use.ogg', -"used" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/used.ogg', -"user" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/user.ogg', -"vacate" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/vacate.ogg', -"valid" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/valid.ogg', -"vapor" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/vapor.ogg', -"vent" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/vent.ogg', -"ventillation" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/ventillation.ogg', -"victor" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/victor.ogg', -"violated" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/violated.ogg', -"violation" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/violation.ogg', -"voltage" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/voltage.ogg', -"vox_login" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/vox_login.ogg', -"walk" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/walk.ogg', -"wall" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/wall.ogg', -"want" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/want.ogg', -"wanted" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/wanted.ogg', -"warm" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/warm.ogg', -"warn" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/warn.ogg', -"warning" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/warning.ogg', -"waste" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/waste.ogg', -"water" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/water.ogg', -"we" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/we.ogg', -"weapon" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/weapon.ogg', -"west" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/west.ogg', -"whiskey" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/whiskey.ogg', -"white" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/white.ogg', -"wilco" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/wilco.ogg', -"will" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/will.ogg', -"with" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/with.ogg', -"without" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/without.ogg', -"woop" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/woop.ogg', -"xeno" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/xeno.ogg', -"yankee" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/yankee.ogg', -"yards" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/yards.ogg', -"year" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/year.ogg', -"yellow" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/yellow.ogg', -"yes" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/yes.ogg', -"you" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/you.ogg', -"your" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/your.ogg', -"yourself" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/yourself.ogg', -"zero" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/zero.ogg', -"zone" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/zone.ogg', -"zulu" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/zulu.ogg',)) - -#endif - diff --git a/modular_skyrat/modules/armaments/code/armament_component.dm b/modular_skyrat/modules/armaments/code/armament_component.dm deleted file mode 100644 index 2c1ff2b915c555..00000000000000 --- a/modular_skyrat/modules/armaments/code/armament_component.dm +++ /dev/null @@ -1,264 +0,0 @@ -/** - * This is the component that runs the armaments vendor. - * - * It's intended to be used with the armament vendor, or other atoms that otherwise aren't vending machines. - */ - -/datum/component/armament - /// The types of armament datums we wish to add to this component. - var/list/products - /// What access do we require to use this machine? - var/list/required_access - /// Our parent machine. - var/atom/parent_atom - /// The points card that is currently inserted into the parent. - var/obj/item/armament_points_card/inserted_card - /// Used to keep track of what categories have been used. - var/list/used_categories = list() - /// Used to keep track of what items have been purchased. - var/list/purchased_items = list() - -/datum/component/armament/Initialize(list/required_products, list/needed_access) - if(!required_products) - stack_trace("No products specified for armament") - return COMPONENT_INCOMPATIBLE - - parent_atom = parent - - products = required_products - - required_access = needed_access - - RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, PROC_REF(on_attack_hand)) - RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) - -/datum/component/armament/Destroy(force, silent) - if(inserted_card) - inserted_card.forceMove(parent_atom.drop_location()) - inserted_card = null - return ..() - -/datum/component/armament/proc/on_attackby(atom/target, obj/item, mob/user) - SIGNAL_HANDLER - - if(!user || !item) - return - - if(!user.can_interact_with(parent_atom)) - return - - if(!istype(item, /obj/item/armament_points_card) || inserted_card) - return - - item.forceMove(parent_atom) - inserted_card = item - -/datum/component/armament/proc/on_attack_hand(datum/source, mob/living/user) - SIGNAL_HANDLER - - if(!user) - return - - if(!user.can_interact_with(parent_atom)) - return - - if(!check_access(user)) - to_chat(user, span_warning("You don't have the required access!")) - return - - INVOKE_ASYNC(src, PROC_REF(ui_interact), user) - -/datum/component/armament/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "ArmamentStation") - ui.open() - -/datum/component/armament/ui_data(mob/user) - var/list/data = list() - - data["card_inserted"] = inserted_card ? TRUE : FALSE - data["card_name"] = "unknown" - data["card_points"] = 0 - if(inserted_card) - data["card_points"] = inserted_card.points - data["card_name"] = inserted_card.name - - data["armaments_list"] = list() - for(var/armament_category as anything in SSarmaments.entries) - var/list/armament_subcategories = list() - for(var/subcategory as anything in SSarmaments.entries[armament_category][CATEGORY_ENTRY]) - var/list/subcategory_items = list() - for(var/datum/armament_entry/armament_entry as anything in SSarmaments.entries[armament_category][CATEGORY_ENTRY][subcategory]) - if(products && !(armament_entry.type in products)) - continue - subcategory_items += list(list( - "ref" = REF(armament_entry), - "icon" = armament_entry.cached_base64, - "name" = armament_entry.name, - "cost" = armament_entry.cost, - "buyable_ammo" = armament_entry.magazine ? TRUE : FALSE, - "magazine_cost" = armament_entry.magazine_cost, - "quantity" = armament_entry.max_purchase, - "purchased" = purchased_items[armament_entry] ? purchased_items[armament_entry] : 0, - "description" = armament_entry.description, - "armament_category" = armament_entry.category, - "equipment_subcategory" = armament_entry.subcategory, - )) - if(!LAZYLEN(subcategory_items)) - continue - armament_subcategories += list(list( - "subcategory" = subcategory, - "items" = subcategory_items, - )) - if(!LAZYLEN(armament_subcategories)) - continue - data["armaments_list"] += list(list( - "category" = armament_category, - "category_limit" = SSarmaments.entries[armament_category][CATEGORY_LIMIT], - "category_uses" = used_categories[armament_category], - "subcategories" = armament_subcategories, - )) - - return data - -/datum/component/armament/ui_act(action, list/params) - . = ..() - if(.) - return - - switch(action) - if("equip_item") - var/check = check_item(params["armament_ref"]) - if(!check) - return - select_armament(usr, check) - if("buy_ammo") - var/check = check_item(params["armament_ref"]) - if(!check) - return - buy_ammo(usr, check, params["quantity"]) - if("eject_card") - eject_card(usr) - -/datum/component/armament/proc/buy_ammo(mob/user, datum/armament_entry/armament_entry, quantity = 1) - if(!armament_entry.magazine) - return - if(!inserted_card) - to_chat(user, span_warning("No card inserted!")) - return - var/quantity_cost = armament_entry.magazine_cost * quantity - if(!inserted_card.use_points(quantity_cost)) - to_chat(user, span_warning("Not enough points!")) - return - for(var/i in 1 to quantity) - new armament_entry.magazine(parent_atom.drop_location()) - -/datum/component/armament/proc/check_item(reference) - var/datum/armament_entry/armament_entry - for(var/category in SSarmaments.entries) - for(var/subcategory in SSarmaments.entries[category][CATEGORY_ENTRY]) - armament_entry = locate(reference) in SSarmaments.entries[category][CATEGORY_ENTRY][subcategory] - if(armament_entry) - break - if(armament_entry) - break - if(!armament_entry) - return FALSE - if(products && !(armament_entry.type in products)) - return FALSE - return armament_entry - -/datum/component/armament/proc/eject_card(mob/user) - if(!inserted_card) - to_chat(user, span_warning("No card inserted!")) - return - inserted_card.forceMove(parent_atom.drop_location()) - user.put_in_hands(inserted_card) - inserted_card = null - to_chat(user, span_notice("Card ejected!")) - playsound(src, 'sound/machines/terminal_insert_disc.ogg', 70) - -/datum/component/armament/proc/select_armament(mob/user, datum/armament_entry/armament_entry) - if(!inserted_card) - to_chat(user, span_warning("No card inserted!")) - return - if(used_categories[armament_entry.category] >= SSarmaments.entries[armament_entry.category][CATEGORY_LIMIT]) - to_chat(user, span_warning("Category limit reached!")) - return - if(purchased_items[armament_entry] >= armament_entry.max_purchase) - to_chat(user, span_warning("Item limit reached!")) - return - if(!ishuman(user)) - return - if(!inserted_card.use_points(armament_entry.cost)) - to_chat(user, span_warning("Not enough points!")) - return - - var/mob/living/carbon/human/human_to_equip = user - - var/obj/item/new_item = new armament_entry.item_type(parent_atom.drop_location()) - - used_categories[armament_entry.category]++ - purchased_items[armament_entry]++ - - playsound(src, 'sound/machines/machine_vend.ogg', 50, TRUE, extrarange = -3) - - if(armament_entry.equip_to_human(human_to_equip, new_item)) - to_chat(user, span_notice("Equipped directly to your person.")) - playsound(src, 'sound/items/equip/toolbelt_equip.ogg', 100) - armament_entry.after_equip(parent_atom.drop_location(), new_item) - -/datum/component/armament/proc/check_access(mob/living/user) - if(!user) - return FALSE - - if(!required_access) - return TRUE - - if(issilicon(user)) - if(ispAI(user)) - return FALSE - return TRUE //AI can do whatever it wants - - if(isAdminGhostAI(user)) - return TRUE - - //If the mob has the simple_access component with the requried access, the check passes - else if(SEND_SIGNAL(user, COMSIG_MOB_TRIED_ACCESS, src) & ACCESS_ALLOWED) - return TRUE - - //If the mob is holding a valid ID, they pass the access check - else if(check_access_obj(user.get_active_held_item())) - return TRUE - - //if they are wearing a card that has access and are human, that works - else if(ishuman(user)) - var/mob/living/carbon/human/human_user = user - if(check_access_obj(human_user.wear_id)) - return TRUE - - //if they're strange and have a hacky ID card as an animal - else if(isanimal(user)) - var/mob/living/simple_animal/animal = user - if(check_access_obj(animal.access_card)) - return TRUE - -/datum/component/armament/proc/check_access_obj(obj/item/id) - return check_access_list(id ? id.GetAccess() : null) - -/datum/component/armament/proc/check_access_list(list/access_list) - if(!islist(required_access)) //something's very wrong - return TRUE - - if(!length(required_access)) - return TRUE - - if(!length(access_list) || !islist(access_list)) - return FALSE - - for(var/req in required_access) - if(!(req in access_list)) //doesn't have this access - return FALSE - - return TRUE diff --git a/modular_skyrat/modules/ashwalkers/code/clothing/ash_armour.dm b/modular_skyrat/modules/ashwalkers/code/clothing/ash_armour.dm deleted file mode 100644 index 2afd6fba17884c..00000000000000 --- a/modular_skyrat/modules/ashwalkers/code/clothing/ash_armour.dm +++ /dev/null @@ -1,112 +0,0 @@ -//ASH CLOTHING -/datum/armor/ash_headdress - melee = 15 - bullet = 25 - laser = 15 - energy = 15 - bomb = 20 - bio = 10 - -/datum/armor/clothing_under/ash_robes - melee = 15 - bullet = 25 - laser = 15 - energy = 15 - bomb = 20 - bio = 10 - -/datum/armor/ash_plates - melee = 15 - bullet = 25 - laser = 15 - energy = 15 - bomb = 20 - bio = 10 - -/obj/item/clothing/head/ash_headdress - name = "ash headdress" - desc = "A headdress that shows the dominance of the walkers of ash." - icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing_mob.dmi' - icon_state = "headdress" - supports_variations_flags = NONE - armor_type = /datum/armor/ash_headdress - - greyscale_colors = null - greyscale_config = null - greyscale_config_inhand_left = null - greyscale_config_inhand_right = null - greyscale_config_worn = null - -/datum/crafting_recipe/ash_recipe/ash_headdress - name = "Ash Headdress" - result = /obj/item/clothing/head/ash_headdress - category = CAT_CLOTHING - -/obj/item/clothing/head/ash_headdress/Initialize(mapload) - . = ..() - AddComponent(/datum/component/armor_plate, 2, /obj/item/stack/sheet/animalhide/goliath_hide, list(MELEE = 5, BULLET = 2, LASER = 2)) - -/obj/item/clothing/head/ash_headdress/winged - name = "winged ash headdress" - icon_state = "wing_headdress" - -/datum/crafting_recipe/ash_recipe/ash_headdress/winged - name = "Winged Ash Headdress" - result = /obj/item/clothing/head/ash_headdress/winged - -/obj/item/clothing/under/costume/gladiator/ash_walker/ash_robes - name = "ash robes" - desc = "A set of hand-made robes. The bones still seem to have some muscle still attached." - icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing_mob.dmi' - icon_state = "robes" - armor_type = /datum/armor/clothing_under/ash_robes - - greyscale_colors = null - greyscale_config = null - greyscale_config_inhand_left = null - greyscale_config_inhand_right = null - greyscale_config_worn = null - -/datum/crafting_recipe/ash_recipe/ash_robes - name = "Ash Robes" - result = /obj/item/clothing/under/costume/gladiator/ash_walker/ash_robes - category = CAT_CLOTHING - -/obj/item/clothing/under/costume/gladiator/ash_walker/ash_robes/Initialize(mapload) - . = ..() - AddComponent(/datum/component/armor_plate, 2, /obj/item/stack/sheet/animalhide/goliath_hide, list(MELEE = 5, BULLET = 2, LASER = 2)) - -/obj/item/clothing/suit/ash_plates - name = "ash combat plates" - desc = "A combination of bones and hides, strung together by watcher sinew." - icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing_mob.dmi' - icon_state = "combat_plates" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - armor_type = /datum/armor/ash_plates - - greyscale_colors = null - greyscale_config = null - greyscale_config_inhand_left = null - greyscale_config_inhand_right = null - greyscale_config_worn = null - -/datum/crafting_recipe/ash_recipe/ash_plates - name = "Ash Combat Plates" - result = /obj/item/clothing/suit/ash_plates - category = CAT_CLOTHING - -/obj/item/clothing/suit/ash_plates/Initialize(mapload) - . = ..() - AddComponent(/datum/component/armor_plate, 2, /obj/item/stack/sheet/animalhide/goliath_hide, list(MELEE = 5, BULLET = 2, LASER = 2)) - -/obj/item/clothing/suit/ash_plates/decorated - name = "decorated ash combat plates" - icon_state = "dec_breastplate" - -/datum/crafting_recipe/ash_recipe/ash_plates/decorated - name = "Decorated Ash Combat Plates" - result = /obj/item/clothing/suit/ash_plates/decorated - category = CAT_CLOTHING diff --git a/modular_skyrat/modules/ashwalkers/code/clothing/hands.dm b/modular_skyrat/modules/ashwalkers/code/clothing/hands.dm deleted file mode 100644 index b06995021f2d4d..00000000000000 --- a/modular_skyrat/modules/ashwalkers/code/clothing/hands.dm +++ /dev/null @@ -1,14 +0,0 @@ -/obj/item/clothing/gloves/military/ashwalk - icon = 'modular_skyrat/modules/ashwalkers/icons/gloves.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/hands.dmi' - name = "ash coated bronze gloves" - desc = "Some sort of thin material with the backing of bronze plates." - icon_state = "legionlegat" - -/obj/item/clothing/gloves/military/claw - icon = 'modular_skyrat/modules/ashwalkers/icons/gloves.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/hands.dmi' - name = "tribal claw glove" - desc = "A gauntlet fashioned from the hand of a long-dead creature. Judging by the claws, whoever brought the beast down must have had a hard fight." - icon_state = "claw" - diff --git a/modular_skyrat/modules/ashwalkers/code/clothing/head.dm b/modular_skyrat/modules/ashwalkers/code/clothing/head.dm deleted file mode 100644 index 246a55c3fee524..00000000000000 --- a/modular_skyrat/modules/ashwalkers/code/clothing/head.dm +++ /dev/null @@ -1,8 +0,0 @@ -/obj/item/clothing/head/shamanash - name = "shaman skull" - desc = "The skull of a long dead animal bolted to the front of a repurposed pan." - icon = 'modular_skyrat/modules/ashwalkers/icons/hats.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/head.dmi' - icon_state = "shamskull" - supports_variations_flags = NONE - diff --git a/modular_skyrat/modules/ashwalkers/code/clothing/misc.dm b/modular_skyrat/modules/ashwalkers/code/clothing/misc.dm deleted file mode 100644 index a0fff95bc2a4b6..00000000000000 --- a/modular_skyrat/modules/ashwalkers/code/clothing/misc.dm +++ /dev/null @@ -1,16 +0,0 @@ -/obj/item/clothing/suit/ashwalkermantle - icon = 'modular_skyrat/modules/ashwalkers/icons/suits.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/suit.dmi' - name = "tanned hide" - desc = "The tanned hide of some brown furred creature." - icon_state = "mantle_liz" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/ashwalkermantle/cape - icon = 'modular_skyrat/modules/ashwalkers/icons/suits.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/suit.dmi' - name = "brown leather cape" - desc = "An ash coated cloak." - icon_state = "desertcloak" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - diff --git a/modular_skyrat/modules/ashwalkers/code/clothing/neck.dm b/modular_skyrat/modules/ashwalkers/code/clothing/neck.dm deleted file mode 100644 index 5ad12ceb550440..00000000000000 --- a/modular_skyrat/modules/ashwalkers/code/clothing/neck.dm +++ /dev/null @@ -1,6 +0,0 @@ -/obj/item/clothing/neck/cloak/tribalmantle - name = "ornate mantle" - desc = "An ornate mantle commonly worn by a shaman or chieftain." - icon = 'modular_skyrat/modules/ashwalkers/icons/cloaks.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/neck.dmi' - icon_state = "tribal-mantle" diff --git a/modular_skyrat/modules/ashwalkers/code/clothing/shoes.dm b/modular_skyrat/modules/ashwalkers/code/clothing/shoes.dm deleted file mode 100644 index c84d61bf83d803..00000000000000 --- a/modular_skyrat/modules/ashwalkers/code/clothing/shoes.dm +++ /dev/null @@ -1,40 +0,0 @@ -/obj/item/clothing/shoes/jackboots/ashwalker - name = "ash coated bronze boots" - desc = "Boots decorated with poorly forged metal." - icon = 'modular_skyrat/modules/ashwalkers/icons/shoes.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/feet.dmi' - icon_state = "legionmetal" - supports_variations_flags = NONE - -/obj/item/clothing/shoes/jackboots/ashwalker/legate - icon = 'modular_skyrat/modules/ashwalkers/icons/shoes.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/feet.dmi' - icon_state = "legionlegate" - supports_variations_flags = NONE - -/obj/item/clothing/shoes/wraps/ashwalker - icon = 'modular_skyrat/modules/ashwalkers/icons/shoes.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/feet.dmi' - name = "ash coated foot wraps" - desc = "May hurt for less than normal legs." - icon_state = "rag" - supports_variations_flags = NONE - -/obj/item/clothing/shoes/wraps/ashwalker/tribalwraps - icon = 'modular_skyrat/modules/ashwalkers/icons/shoes.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/feet.dmi' - worn_icon_digi = 'modular_skyrat/modules/ashwalkers/icons/feet_digi.dmi' - name = "ornate leg wraps" - desc = "An ornate set of leg wraps commonly worn by a shaman or chieftain." - icon_state = "tribalcuffs" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - -/obj/item/clothing/shoes/wraps/ashwalker/mundanewraps - icon = 'modular_skyrat/modules/ashwalkers/icons/shoes.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/feet.dmi' - worn_icon_digi = 'modular_skyrat/modules/ashwalkers/icons/feet_digi.dmi' - name = "tribal leg wraps" - desc = "A mundane set of leg wraps often worn by tribal villagers." - icon_state = "mundanecuffs" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - diff --git a/modular_skyrat/modules/ashwalkers/code/clothing/under.dm b/modular_skyrat/modules/ashwalkers/code/clothing/under.dm deleted file mode 100644 index 0ab3c3820f230e..00000000000000 --- a/modular_skyrat/modules/ashwalkers/code/clothing/under.dm +++ /dev/null @@ -1,70 +0,0 @@ -/obj/item/clothing/under/costume/gladiator/ash_walker/greentrib - icon = 'modular_skyrat/modules/ashwalkers/icons/uniforms.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/uniform.dmi' - name = "ash covered leaves" - desc = "Green leaves coated with a thick layer of ash. Praise the Nercopolis." - icon_state = "tribal_m" - -/obj/item/clothing/under/costume/gladiator/ash_walker/yellow - icon = 'modular_skyrat/modules/ashwalkers/icons/uniforms.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/uniform.dmi' - name = "ash walker rags" - desc = "Rags from Lavaland, coated with light ash. This one seems to be for the juniors of a tribe. Praise the Nercopolis." - icon_state = "tribalrags" - -/obj/item/clothing/under/costume/gladiator/ash_walker/chiefrags - icon = 'modular_skyrat/modules/ashwalkers/icons/uniforms.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/uniform.dmi' - name = "old ash walker rags" - desc = "Rags from Lavaland, coated with heavy ash. This one seems to be for the elders of a tribe. Praise the Nercopolis." - icon_state = "chiefrags" - -/obj/item/clothing/under/costume/gladiator/ash_walker/shaman - icon = 'modular_skyrat/modules/ashwalkers/icons/uniforms.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/uniform.dmi' - name = "decorated ash walker rags" - desc = "Rags from Lavaland, drenched with ash, it has fine jewel coated bones sewn around the neck. This one seems to be for the shaman of a tribe. Praise the Nercopolis." - icon_state = "shamanrags" - -/obj/item/clothing/under/costume/gladiator/ash_walker/robe - icon = 'modular_skyrat/modules/ashwalkers/icons/uniforms.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/uniform.dmi' - name = "ash walker robes" - desc = "A robe from the ashlands. This one seems to be for ...Everyone, really. Praise the Nercopolis." - icon_state = "robe_liz" - -/obj/item/clothing/under/costume/gladiator/ash_walker/tribal - icon = 'modular_skyrat/modules/ashwalkers/icons/uniforms.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/uniform.dmi' - name = "ash walker tin" - desc = "Thin tin bolted over poorly tanned leather." - icon_state = "tribal" - -/obj/item/clothing/under/costume/gladiator/ash_walker/white - icon = 'modular_skyrat/modules/ashwalkers/icons/uniforms.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/uniform.dmi' - name = "white ash walker rags" - desc = "A poorly sewn dress made of white materials." - icon_state = "lizcheo" - -/obj/item/clothing/under/costume/gladiator/ash_walker/chestwrap - icon = 'modular_skyrat/modules/ashwalkers/icons/uniforms.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/uniform.dmi' - name = "loincloth and chestwrap" - desc = "A poorly sewn dress made of white materials." - icon_state = "chestwrap" - -/obj/item/clothing/under/costume/gladiator/ash_walker/caesar_clothes - icon = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/uniform.dmi' - name = "ash walker tunic" - desc = "A tattered red tunic of reddened fabric." - icon_state = "caesar_clothes" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - -/obj/item/clothing/under/costume/gladiator/ash_walker/legskirt_d - icon = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi' - worn_icon = 'modular_skyrat/modules/ashwalkers/icons/uniform.dmi' - name = "ash walker waistcloth" - desc = "A unisex waistcloth to serve as a kilt or skirt." - icon_state = "legskirt_d" diff --git a/modular_skyrat/modules/ashwalkers/code/items/ash_seedmesh.dm b/modular_skyrat/modules/ashwalkers/code/items/ash_seedmesh.dm deleted file mode 100644 index a79f0dfb8833a0..00000000000000 --- a/modular_skyrat/modules/ashwalkers/code/items/ash_seedmesh.dm +++ /dev/null @@ -1,25 +0,0 @@ -/obj/item/seed_mesh - name = "seed mesh" - desc = "A little mesh that, when paired with sand, has the possibility of filtering out large seeds." - icon = 'modular_skyrat/modules/ashwalkers/icons/misc_tools.dmi' - icon_state = "mesh" - var/list/static/seeds_blacklist = list( - /obj/item/seeds/lavaland, - ) - -/obj/item/seed_mesh/attackby(obj/item/attacking_item, mob/user, params) - if(istype(attacking_item, /obj/item/stack/ore/glass)) - var/obj/item/stack/stack_item = attacking_item - if(!do_after(user, 10 SECONDS, src)) - user.balloon_alert(user, "have to stand still!") - return - if(!stack_item.use(5)) - user.balloon_alert(user, "unable to use five of [stack_item]!") - return - if(prob(85)) - user.balloon_alert(user, "[stack_item] reveals nothing!") - return - var/spawn_seed = pick(subtypesof(/obj/item/seeds) - seeds_blacklist) - new spawn_seed(get_turf(src)) - user.balloon_alert(user, "[stack_item] revealed something!") - return ..() diff --git a/modular_skyrat/modules/ashwalkers/code/items/ash_weapon.dm b/modular_skyrat/modules/ashwalkers/code/items/ash_weapon.dm deleted file mode 100644 index 2435874ba0afa9..00000000000000 --- a/modular_skyrat/modules/ashwalkers/code/items/ash_weapon.dm +++ /dev/null @@ -1,29 +0,0 @@ -//ASH WEAPON -/obj/item/melee/macahuitl - name = "ash macahuitl" - desc = "A weapon that looks like it will leave really bad marks." - icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing.dmi' - lefthand_file = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing_left.dmi' - righthand_file = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing_right.dmi' - icon_state = "macahuitl" - - force = 15 - wound_bonus = 15 - bare_wound_bonus = 10 - - greyscale_colors = null - greyscale_config = null - greyscale_config_inhand_left = null - greyscale_config_inhand_right = null - greyscale_config_worn = null - -/datum/crafting_recipe/ash_recipe/macahuitl - name = "Ash Macahuitl" - result = /obj/item/melee/macahuitl - reqs = list( - /obj/item/stack/sheet/bone = 2, - /obj/item/stack/sheet/sinew = 2, - /obj/item/stack/sheet/animalhide/goliath_hide = 2, - ) - always_available = FALSE - category = CAT_WEAPON_MELEE diff --git a/modular_skyrat/modules/ashwalkers/icons/feet.dmi b/modular_skyrat/modules/ashwalkers/icons/feet.dmi deleted file mode 100644 index b4ba22e6b5532f..00000000000000 Binary files a/modular_skyrat/modules/ashwalkers/icons/feet.dmi and /dev/null differ diff --git a/modular_skyrat/modules/ashwalkers/icons/feet_digi.dmi b/modular_skyrat/modules/ashwalkers/icons/feet_digi.dmi deleted file mode 100644 index 89e772d083c158..00000000000000 Binary files a/modular_skyrat/modules/ashwalkers/icons/feet_digi.dmi and /dev/null differ diff --git a/modular_skyrat/modules/ashwalkers/icons/shoes.dmi b/modular_skyrat/modules/ashwalkers/icons/shoes.dmi deleted file mode 100644 index 8125bc37ff3237..00000000000000 Binary files a/modular_skyrat/modules/ashwalkers/icons/shoes.dmi and /dev/null differ diff --git a/modular_skyrat/modules/ashwalkers/icons/structures.dmi b/modular_skyrat/modules/ashwalkers/icons/structures.dmi deleted file mode 100644 index d4e229d825590f..00000000000000 Binary files a/modular_skyrat/modules/ashwalkers/icons/structures.dmi and /dev/null differ diff --git a/modular_skyrat/modules/assault_operatives/code/areas.dm b/modular_skyrat/modules/assault_operatives/code/areas.dm deleted file mode 100644 index 69347f802e3987..00000000000000 --- a/modular_skyrat/modules/assault_operatives/code/areas.dm +++ /dev/null @@ -1,75 +0,0 @@ -/area/shuttle/syndicate/cruiser - name = "Syndicate Cruiser" - requires_power = FALSE - -/area/shuttle/syndicate/cruiser/bridge - name = "Syndicate Cruiser Control" - color = COLOR_BLUE - -/area/shuttle/syndicate/cruiser/medical - name = "Syndicate Cruiser Medbay" - color = COLOR_LIGHT_PINK - -/area/shuttle/syndicate/cruiser/armory - name = "Syndicate Cruiser Armory" - color = COLOR_ORANGE - -/area/shuttle/syndicate/cruiser/eva - name = "Syndicate Cruiser EVA" - color = COLOR_GREEN - -/area/shuttle/syndicate/cruiser/hallway - -/area/shuttle/syndicate/cruiser/airlock - name = "Syndicate Cruiser Airlock" - color = COLOR_RED - -/area/shuttle/syndicate/cruiser/brig - name = "Syndicate Cruiser Brig" - color = COLOR_BLACK - -/area/shuttle/syndicate/cruiser/engineering - name = "Syndicate Cruiser Engineering" - color = COLOR_YELLOW - -/area/shuttle/syndicate/frigate - name = "Syndicate Frigate" - -/area/cruiser_dock - name = "GoldenEye Satellite" - icon_state = "syndie-ship" - requires_power = FALSE - has_gravity = STANDARD_GRAVITY - area_flags = VALID_TERRITORY | UNIQUE_AREA | NOTELEPORT - ambientsounds = AMBIENCE_GENERIC - -/area/cruiser_dock/brig - name = "Cruiser Dock Prison" - color = COLOR_BLUE - ambientsounds = AMBIENCE_CREEPY -/obj/machinery/door/poddoor/shutters - smoothing_groups = SMOOTH_GROUP_SHUTTERS - -/turf/closed/wall/r_wall/syndicate/cruiser - canSmoothWith = SMOOTH_GROUP_SHUTTERS + SMOOTH_GROUP_SHUTTLE_PARTS + SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_PLASTITANIUM_WALLS + SMOOTH_GROUP_SYNDICATE_WALLS - -/obj/effect/landmark/start/assaultop - name = "assaultop" - icon = 'icons/effects/landmarks_static.dmi' - icon_state = "snukeop_spawn" - delete_after_roundstart = FALSE - -/obj/effect/landmark/start/assaultop/Initialize(mapload) - . = ..() - GLOB.assault_operative_start += get_turf(src) - -/obj/effect/spawner/armory_spawn/assaultops - name = "gun spawner" - guns = list( - /obj/item/gun/ballistic/automatic/m16, - /obj/item/gun/ballistic/automatic/pistol/deagle, - /obj/item/gun/ballistic/automatic/sniper_rifle/modular/syndicate, - /obj/item/gun/ballistic/automatic/mp40, - /obj/item/gun/ballistic/automatic/c20r, - /obj/item/gun/ballistic/automatic/m90, - ) diff --git a/modular_skyrat/modules/assault_operatives/code/armaments/_armament_primary.dm b/modular_skyrat/modules/assault_operatives/code/armaments/_armament_primary.dm deleted file mode 100644 index e2ef34a2972ef0..00000000000000 --- a/modular_skyrat/modules/assault_operatives/code/armaments/_armament_primary.dm +++ /dev/null @@ -1,149 +0,0 @@ -#define OPS_SUBCATEGORY_RIFLE "Assault Rifles" -#define OPS_SUBCATEGORY_RIFLE_AMMO "Specialty Assault Rifle Ammo" - -#define OPS_SUBCATEGORY_SMG "Submachine Guns" -#define OPS_SUBCATEGORY_SMG_AMMO "Speciality Submachine Gun Ammo" - -#define OPS_SUBCATEGORY_SHOTGUN "Shotguns" -#define OPS_SUBCATEGORY_SHOTGUN_AMMO "Speciality Shotgun Ammo" - -#define OPS_SUBCATEGORY_SNIPER "Grenade Launchers" -#define OPS_SUBCATEGORY_SNIPER_AMMO "Speciality Grenade Launcher Ammo" - -/datum/armament_entry/assault_operatives/primary - category = "Long Arms" - category_item_limit = 6 - mags_to_spawn = 3 - cost = 10 - -/datum/armament_entry/assault_operatives/primary/rifle - subcategory = OPS_SUBCATEGORY_RIFLE - -/datum/armament_entry/assault_operatives/primary/rifle/assault_ops_rifle - item_type = /obj/item/gun/ballistic/automatic/sol_rifle/evil - -/datum/armament_entry/assault_operatives/primary/rifle_ammo - subcategory = OPS_SUBCATEGORY_RIFLE_AMMO - max_purchase = 10 - cost = 1 - -/datum/armament_entry/assault_operatives/primary/rifle_ammo/standard - item_type = /obj/item/ammo_box/magazine/c40sol_rifle/starts_empty - cost = 0 - -/datum/armament_entry/assault_operatives/primary/rifle_ammo/drum - item_type = /obj/item/ammo_box/magazine/c40sol_rifle/drum/starts_empty - cost = 0 - -/datum/armament_entry/assault_operatives/primary/rifle_ammo/c40sol - item_type = /obj/item/ammo_box/c40sol - -/datum/armament_entry/assault_operatives/primary/rifle_ammo/c40sol_disabler - item_type = /obj/item/ammo_box/c40sol/fragmentation - -/datum/armament_entry/assault_operatives/primary/rifle_ammo/c40sol_pierce - item_type = /obj/item/ammo_box/c40sol/pierce - -/datum/armament_entry/assault_operatives/primary/rifle_ammo/c40sol_incendiary - item_type = /obj/item/ammo_box/c40sol/incendiary - - -/datum/armament_entry/assault_operatives/primary/submachinegun - subcategory = OPS_SUBCATEGORY_SMG - -/datum/armament_entry/assault_operatives/primary/submachinegun/assault_ops_smg - item_type = /obj/item/gun/ballistic/automatic/sol_smg/evil - -/datum/armament_entry/assault_operatives/primary/submachinegun_ammo - subcategory = OPS_SUBCATEGORY_SMG_AMMO - max_purchase = 10 - cost = 1 - -/datum/armament_entry/assault_operatives/primary/submachinegun_ammo/standard - item_type = /obj/item/ammo_box/magazine/c35sol_pistol/starts_empty - cost = 0 - -/datum/armament_entry/assault_operatives/primary/submachinegun_ammo/extended - item_type = /obj/item/ammo_box/magazine/c35sol_pistol/stendo/starts_empty - cost = 0 - -/datum/armament_entry/assault_operatives/primary/submachinegun_ammo/c35sol - item_type = /obj/item/ammo_box/c35sol - -/datum/armament_entry/assault_operatives/primary/submachinegun_ammo/c35sol_disabler - item_type = /obj/item/ammo_box/c35sol/incapacitator - -/datum/armament_entry/assault_operatives/primary/submachinegun_ammo/c35sol_pierce - item_type = /obj/item/ammo_box/c35sol/ripper - -/datum/armament_entry/assault_operatives/primary/shotgun - subcategory = OPS_SUBCATEGORY_SHOTGUN - -/datum/armament_entry/assault_operatives/primary/shotgun/assault_ops_shotgun - item_type = /obj/item/gun/ballistic/shotgun/riot/sol/evil - -/datum/armament_entry/assault_operatives/primary/shotgun_ammo - subcategory = OPS_SUBCATEGORY_SHOTGUN_AMMO - max_purchase = 10 - cost = 1 - -/datum/armament_entry/assault_operatives/primary/shotgun_ammo/rubber - item_type = /obj/item/ammo_box/advanced/s12gauge/rubber - -/datum/armament_entry/assault_operatives/primary/shotgun_ammo/flechette - item_type = /obj/item/ammo_box/advanced/s12gauge/flechette - -/datum/armament_entry/assault_operatives/primary/shotgun_ammo/hollowpoint - item_type = /obj/item/ammo_box/advanced/s12gauge/hp - -/datum/armament_entry/assault_operatives/primary/shotgun_ammo/beehive - item_type = /obj/item/ammo_box/advanced/s12gauge/beehive - -/datum/armament_entry/assault_operatives/primary/shotgun_ammo/incendiary - item_type = /obj/item/ammo_box/advanced/s12gauge/incendiary - -/datum/armament_entry/assault_operatives/primary/sniper - subcategory = OPS_SUBCATEGORY_SNIPER - -/datum/armament_entry/assault_operatives/primary/sniper/assault_ops_gl - item_type = /obj/item/gun/ballistic/automatic/sol_grenade_launcher/evil - -/datum/armament_entry/assault_operatives/primary/sniper_ammo - subcategory = OPS_SUBCATEGORY_SNIPER_AMMO - max_purchase = 10 - cost = 1 - -/datum/armament_entry/assault_operatives/primary/sniper_ammo/standard - item_type = /obj/item/ammo_box/magazine/c980_grenade/starts_empty - cost = 0 - -/datum/armament_entry/assault_operatives/primary/sniper_ammo/drum - item_type = /obj/item/ammo_box/magazine/c980_grenade/drum/starts_empty - cost = 0 - -/datum/armament_entry/assault_operatives/primary/sniper_ammo/practice - item_type = /obj/item/ammo_box/c980grenade - -/datum/armament_entry/assault_operatives/primary/sniper_ammo/smoke - item_type = /obj/item/ammo_box/c980grenade/smoke - -/datum/armament_entry/assault_operatives/primary/sniper_ammo/shrapnel - item_type = /obj/item/ammo_box/c980grenade/shrapnel - -/datum/armament_entry/assault_operatives/primary/sniper_ammo/phosphor - item_type = /obj/item/ammo_box/c980grenade/shrapnel/phosphor - -/datum/armament_entry/assault_operatives/primary/sniper_ammo/riot - item_type = /obj/item/ammo_box/c980grenade/riot - -#undef OPS_SUBCATEGORY_RIFLE -#undef OPS_SUBCATEGORY_RIFLE_AMMO - -#undef OPS_SUBCATEGORY_SMG -#undef OPS_SUBCATEGORY_SMG_AMMO - -#undef OPS_SUBCATEGORY_SHOTGUN -#undef OPS_SUBCATEGORY_SHOTGUN_AMMO - -#undef OPS_SUBCATEGORY_SNIPER -#undef OPS_SUBCATEGORY_SNIPER_AMMO diff --git a/modular_skyrat/modules/assault_operatives/code/armaments/_armament_secondary.dm b/modular_skyrat/modules/assault_operatives/code/armaments/_armament_secondary.dm deleted file mode 100644 index 36460f04d630d9..00000000000000 --- a/modular_skyrat/modules/assault_operatives/code/armaments/_armament_secondary.dm +++ /dev/null @@ -1,40 +0,0 @@ -#define OPS_SUBCATEGORY_LETHAL_SIDE "Lethal" -#define OPS_SUBCATEGORY_NONLETHAL_SIDE "Non-Lethal" -#define OPS_SUBCATEGORY_MARTIAL_SIDE "Martial Arts" - -/datum/armament_entry/assault_operatives/secondary - category = "Side Arms" - category_item_limit = 3 - mags_to_spawn = 3 - cost = 3 - -/datum/armament_entry/assault_operatives/secondary/lethal - subcategory = OPS_SUBCATEGORY_LETHAL_SIDE - -/datum/armament_entry/assault_operatives/secondary/lethal/pistol - item_type = /obj/item/gun/ballistic/automatic/pistol/sol/evil - -/datum/armament_entry/assault_operatives/secondary/lethal/energy_sword - item_type = /obj/item/melee/energy/sword/saber - -/datum/armament_entry/assault_operatives/secondary/nonlethal - subcategory = OPS_SUBCATEGORY_NONLETHAL_SIDE - -/datum/armament_entry/assault_operatives/secondary/nonlethal/taze_me_bro - item_type = /obj/item/gun/energy/e_gun/advtaser - -/datum/armament_entry/assault_operatives/secondary/nonlethal/baton - item_type = /obj/item/melee/baton/telescopic - -/datum/armament_entry/assault_operatives/secondary/martial - subcategory = OPS_SUBCATEGORY_MARTIAL_SIDE - -/datum/armament_entry/assault_operatives/secondary/martial/krav_gloves - item_type = /obj/item/clothing/gloves/krav_maga/combatglovesplus - -/datum/armament_entry/assault_operatives/secondary/martial/cqc - item_type = /obj/item/book/granter/martial/cqc - -#undef OPS_SUBCATEGORY_LETHAL_SIDE -#undef OPS_SUBCATEGORY_NONLETHAL_SIDE -#undef OPS_SUBCATEGORY_MARTIAL_SIDE diff --git a/modular_skyrat/modules/assault_operatives/code/armaments/armament_explosives.dm b/modular_skyrat/modules/assault_operatives/code/armaments/armament_explosives.dm deleted file mode 100644 index 7763e5af37467f..00000000000000 --- a/modular_skyrat/modules/assault_operatives/code/armaments/armament_explosives.dm +++ /dev/null @@ -1,40 +0,0 @@ -/datum/armament_entry/assault_operatives/explosives - category = "Explosive Devices" - category_item_limit = 4 - max_purchase = 4 - -/datum/armament_entry/assault_operatives/explosives/minibomb - item_type = /obj/item/grenade/syndieminibomb - cost = 3 - -/datum/armament_entry/assault_operatives/explosives/bioterror - item_type = /obj/item/grenade/chem_grenade/bioterrorfoam - cost = 1 - -/datum/armament_entry/assault_operatives/explosives/minibomb - item_type = /obj/item/grenade/syndieminibomb - cost = 3 - -/datum/armament_entry/assault_operatives/explosives/emp_grenade - item_type = /obj/item/grenade/empgrenade - cost = 2 - -/datum/armament_entry/assault_operatives/explosives/stingbang - item_type = /obj/item/grenade/stingbang - cost = 2 - -/datum/armament_entry/assault_operatives/explosives/teargas - item_type = /obj/item/grenade/chem_grenade/teargas - cost = 1 - -/datum/armament_entry/assault_operatives/explosives/flashbang - item_type = /obj/item/grenade/flashbang - cost = 1 - -/datum/armament_entry/assault_operatives/explosives/c4 - item_type = /obj/item/grenade/c4 - cost = 1 - -/datum/armament_entry/assault_operatives/explosives/x4 - item_type = /obj/item/grenade/c4/x4 - cost = 2 diff --git a/modular_skyrat/modules/assault_operatives/code/armaments/armament_implants.dm b/modular_skyrat/modules/assault_operatives/code/armaments/armament_implants.dm deleted file mode 100644 index 5c635235eedff6..00000000000000 --- a/modular_skyrat/modules/assault_operatives/code/armaments/armament_implants.dm +++ /dev/null @@ -1,54 +0,0 @@ -/datum/armament_entry/assault_operatives/implants - category = "Cybernetic Implants" - category_item_limit = 3 - -/datum/armament_entry/assault_operatives/implants/deathrattle - name = "Deathrattle Implant Kit" - description = "A collection of implants (and one reusable implanter) that should be injected into the team. When one of the team \ - dies, all other implant holders recieve a mental message informing them of their teammates' name \ - and the location of their death. Unlike most implants, these are designed to be implanted \ - in any creature, biological or mechanical." - item_type = /obj/item/storage/box/syndie_kit/imp_deathrattle - cost = 1 - -/datum/armament_entry/assault_operatives/implants/microbomb - name = "Microbomb Implant" - description = "A small bomb implanted into the body. It can be activated manually, or automatically activates on death. WARNING: Permenantly destroys your body and everything you might be carrying." - item_type = /obj/item/implanter/explosive - cost = 2 - -/datum/armament_entry/assault_operatives/implants/storage - name = "Storage Implant" - description = "Implanted into the body and activated at will, this covert implant will open a small pocket of bluespace capable of holding two regular sized items within." - item_type = /obj/item/implanter/storage - cost = 2 - -/datum/armament_entry/assault_operatives/implants/radio - name = "Radio Implant" - description = "Implanted into the body and activated at will, this covert implant will allow you to speak over the radio without the need of a headset." - item_type = /obj/item/implanter/radio/syndicate - cost = 1 - -/datum/armament_entry/assault_operatives/implants/hacking - item_type = /obj/item/autosurgeon/syndicate/hackerman - name = "Hacking Arm Implant" - description = "An advanced arm implant that comes with cutting edge hacking tools. Perfect for the cybernetically enhanced wirerunners." - cost = 2 - -/datum/armament_entry/assault_operatives/implants/freedom - name = "Freedom Implant" - description = "Releases the user from common restraints like handcuffs and legcuffs. Comes with four charges." - item_type = /obj/item/storage/box/syndie_kit/imp_freedom - cost = 3 - -/datum/armament_entry/assault_operatives/implants/thermal - name = "Thermal Vision Implant" - description = "These cybernetic eyes will give you thermal vision." - item_type = /obj/item/autosurgeon/syndicate/thermal_eyes - cost = 5 - -/datum/armament_entry/assault_operatives/implants/nodrop - name = "Anti-Drop Implant" - description = "When activated forces your hand muscles to tightly grip the object you are holding, preventing you from dropping it involuntarily." - item_type = /obj/item/autosurgeon/syndicate/nodrop - cost = 5 diff --git a/modular_skyrat/modules/assault_operatives/code/armaments/armament_medical.dm b/modular_skyrat/modules/assault_operatives/code/armaments/armament_medical.dm deleted file mode 100644 index 76d40631a5f0a8..00000000000000 --- a/modular_skyrat/modules/assault_operatives/code/armaments/armament_medical.dm +++ /dev/null @@ -1,53 +0,0 @@ -/datum/armament_entry/assault_operatives/medical - category = "First-Aid Supplies" - category_item_limit = 4 - -/datum/armament_entry/assault_operatives/medical/medkit - subcategory = "Medical Kits" - -/datum/armament_entry/assault_operatives/medical/medkit/basic - item_type = /obj/item/storage/medkit/regular - cost = 1 - -/datum/armament_entry/assault_operatives/medical/medkit/advanced - item_type = /obj/item/storage/medkit/advanced - cost = 2 - -/datum/armament_entry/assault_operatives/medical/medkit/tactical - item_type = /obj/item/storage/medkit/tactical - cost = 4 - -/datum/armament_entry/assault_operatives/medical/injector - subcategory = "Chemical Autoinjectors" - -/datum/armament_entry/assault_operatives/medical/injector/bloodloss - item_type = /obj/item/reagent_containers/hypospray/medipen/blood_loss - cost = 1 - -/datum/armament_entry/assault_operatives/medical/injector/atropine - item_type = /obj/item/reagent_containers/hypospray/medipen/atropine - cost = 2 - -/datum/armament_entry/assault_operatives/medical/injector/salacid - item_type = /obj/item/reagent_containers/hypospray/medipen/salacid - cost = 1 - -/datum/armament_entry/assault_operatives/medical/injector/oxandrolone - item_type = /obj/item/reagent_containers/hypospray/medipen/oxandrolone - cost = 1 - -/datum/armament_entry/assault_operatives/medical/injector/stimulant - item_type = /obj/item/reagent_containers/hypospray/medipen/stimulants - cost = 2 - -/datum/armament_entry/assault_operatives/medical/injector/stimulant_hypo - item_type = /obj/item/reagent_containers/hypospray/combat - cost = 3 - -/datum/armament_entry/assault_operatives/medical/injector/bag - item_type = /obj/item/storage/pouch/medpens - cost = 5 - -/datum/armament_entry/assault_operatives/medical/injector/box - item_type = /obj/item/storage/box/nri_pens - cost = 10 diff --git a/modular_skyrat/modules/assault_operatives/code/armaments/armament_modules.dm b/modular_skyrat/modules/assault_operatives/code/armaments/armament_modules.dm deleted file mode 100644 index 49a3b58b5f1ef1..00000000000000 --- a/modular_skyrat/modules/assault_operatives/code/armaments/armament_modules.dm +++ /dev/null @@ -1,35 +0,0 @@ -/datum/armament_entry/assault_operatives/modules - category = "MOD Modules" - category_item_limit = 3 - -/datum/armament_entry/assault_operatives/modules/noslip - item_type = /obj/item/mod/module/noslip - cost = 2 - -/datum/armament_entry/assault_operatives/modules/thermal - item_type = /obj/item/mod/module/visor/thermal - cost = 5 - -/datum/armament_entry/assault_operatives/modules/carry - item_type = /obj/item/mod/module/quick_carry/advanced - cost = 2 - -/datum/armament_entry/assault_operatives/modules/mirage - item_type = /obj/item/mod/module/dispenser/mirage - cost = 2 - -/datum/armament_entry/assault_operatives/modules/criminalcapture - item_type = /obj/item/mod/module/criminalcapture - cost = 1 - -/datum/armament_entry/assault_operatives/modules/adrenal_boost - item_type = /obj/item/mod/module/adrenaline_boost - cost = 3 - -/datum/armament_entry/assault_operatives/modules/sonar - item_type = /obj/item/mod/module/active_sonar - cost = 3 - -/datum/armament_entry/assault_operatives/modules/jetpack - item_type = /obj/item/mod/module/jetpack/advanced - cost = 5 diff --git a/modular_skyrat/modules/assault_operatives/code/armaments/armament_utility.dm b/modular_skyrat/modules/assault_operatives/code/armaments/armament_utility.dm deleted file mode 100644 index 7fe436452a22d5..00000000000000 --- a/modular_skyrat/modules/assault_operatives/code/armaments/armament_utility.dm +++ /dev/null @@ -1,70 +0,0 @@ -/datum/armament_entry/assault_operatives/utility - category = "Utility Items" - category_item_limit = 8 - -/datum/armament_entry/assault_operatives/utility/suppressor - item_type = /obj/item/suppressor - cost = 1 - -/datum/armament_entry/assault_operatives/utility/thermals - item_type = /obj/item/clothing/glasses/thermal/syndi - cost = 4 - -/datum/armament_entry/assault_operatives/utility/chem_keycard - item_type = /obj/item/keycard/assault_ops_chemistry - cost = 3 - -/datum/armament_entry/assault_operatives/utility/doorjack - item_type = /obj/item/card/emag/doorjack - name = "Doorjack" - description = "Hacks open doors permanently." - cost = 3 - -/datum/armament_entry/assault_operatives/utility/emag - item_type = /obj/item/card/emag - name = "Cryptographic Sequencer" - description = "Subverts electronics." - cost = 3 - -/datum/armament_entry/assault_operatives/utility/pouch - item_type = /obj/item/storage/pouch/ammo - cost = 1 - -/datum/armament_entry/assault_operatives/utility/noslip - name = "Chameleon No-Slips" - item_type = /obj/item/clothing/shoes/chameleon/noslip - description = "No-slip chameleon shoes, for when you plan on running through hell and back." - cost = 2 - -/datum/armament_entry/assault_operatives/utility/cham_kit - name = "Chameleon Kit" - item_type = /obj/item/storage/box/syndie_kit/chameleon - description = "A full set of clothing that is capable of taking the appearance of any other type of clothing, perfect for hiding in plain sight." - cost = 2 - -/datum/armament_entry/assault_operatives/utility/syndiejaws - name = "Syndicate Jaws of Life" - item_type = /obj/item/crowbar/power/syndicate - description = "Based on a Nanotrasen model, this powerful tool can be used as both a crowbar and a pair of wirecutters. \ - In its crowbar configuration, it can be used to force open airlocks. Very useful for entering the station or its departments." - cost = 3 - -/datum/armament_entry/assault_operatives/utility/jammer - name = "Radio Jammer" - description = "When activated, this cell powered device will block all outgoing radio communication." - item_type = /obj/item/jammer - cost = 4 - -/datum/armament_entry/assault_operatives/utility/codespeak - item_type = /obj/item/language_manual/codespeak_manual/unlimited - cost = 1 - -/datum/armament_entry/assault_operatives/utility/binoculars - item_type = /obj/item/binoculars - cost = 1 - -/datum/armament_entry/assault_operatives/utility/emp_flashlight - name = "EMP Flashlight" - description = "Flash this at someone to hit them with an electromagnetic pulse." - item_type = /obj/item/flashlight/emp - cost = 2 diff --git a/modular_skyrat/modules/assault_operatives/code/armaments/assaultops_armament_station.dm b/modular_skyrat/modules/assault_operatives/code/armaments/assaultops_armament_station.dm deleted file mode 100644 index 6356aa478b42c9..00000000000000 --- a/modular_skyrat/modules/assault_operatives/code/armaments/assaultops_armament_station.dm +++ /dev/null @@ -1,29 +0,0 @@ -// VENDOR -/obj/machinery/armament_station/assault_operatives - name = "Military Grade Armament Station" - - required_access = list(ACCESS_SYNDICATE) - - armament_type = /datum/armament_entry/assault_operatives - -// POINTS CARDS - -/obj/item/armament_points_card/assaultops - points = 50 - -// ARMAMENT ENTRIES - -#define ARMAMENT_CATEGORY_OTHER "Miscellaneous" -#define ARMAMENT_CATEGORY_OTHER_LIMIT 3 - -/datum/armament_entry/assault_operatives - var/mags_to_spawn = 3 - -/datum/armament_entry/assault_operatives/after_equip(turf/safe_drop_location, obj/item/item_to_equip) - if(istype(item_to_equip, /obj/item/gun/ballistic)) - var/obj/item/gun/ballistic/spawned_ballistic_gun = item_to_equip - if(spawned_ballistic_gun.magazine && !istype(spawned_ballistic_gun.magazine, /obj/item/ammo_box/magazine/internal)) - var/obj/item/storage/box/ammo_box/spawned_box = new(safe_drop_location) - spawned_box.name = "ammo box - [spawned_ballistic_gun.name]" - for(var/i in 1 to mags_to_spawn) - new spawned_ballistic_gun.spawn_magazine_type (spawned_box) diff --git a/modular_skyrat/modules/assault_operatives/code/assault_operatives.dm b/modular_skyrat/modules/assault_operatives/code/assault_operatives.dm deleted file mode 100644 index 4ee36404d72e0f..00000000000000 --- a/modular_skyrat/modules/assault_operatives/code/assault_operatives.dm +++ /dev/null @@ -1,286 +0,0 @@ -/** - * ASSAULT OPERATIVE ANTAG DATUM - */ - -/datum/antagonist/assault_operative - name = ROLE_ASSAULT_OPERATIVE - job_rank = ROLE_ASSAULT_OPERATIVE - roundend_category = "assault operatives" - antagpanel_category = "Assault Operatives" - antag_hud_name = "synd" - antag_moodlet = /datum/mood_event/focused - show_to_ghosts = TRUE - hijack_speed = 2 - - preview_outfit = /datum/outfit/assaultops_preview - /// In the preview icon, the operatives who are behind the leader - var/preview_outfit_behind = /datum/outfit/assaultops_preview/background - - ui_name = "AntagInfoAssaultops" - /// The default outfit given BEFORE they choose their equipment. - var/assault_operative_default_outfit = /datum/outfit/assaultops - /// The team linked to this antagonist datum. - var/datum/team/assault_operatives/assault_team - /// Should we move the operative to a designated spawn point? - var/send_to_spawnpoint = TRUE - //If not assigned a team by default ops will try to join existing ones, set this to TRUE to always create new team. - var/always_new_team = FALSE - var/spawn_text = "Your mission is to assault NTSS13 and get all of the GoldenEye keys that you can from the heads of staff that reside there. \ - Use your pinpointer to locate these after you have extracted the GoldenEye key from the head of staff. It will be sent in by droppod. \ - You must then upload the key to the GoldenEye upload terminal on this GoldenEye station. After you have completed your mission, \ - The GoldenEye defence network will fall, and we will gain access to Nanotrasen's military systems. Good luck agent." - /// A link to our internal pinpointer. - var/datum/status_effect/goldeneye_pinpointer/pinpointer - -/datum/antagonist/assault_operative/Destroy() - QDEL_NULL(pinpointer) - return ..() - -/datum/antagonist/assault_operative/apply_innate_effects(mob/living/mob_override) - add_team_hud(mob_override || owner.current, /datum/antagonist/assault_operative) - -/datum/antagonist/assault_operative/get_team() - return assault_team - -/datum/antagonist/assault_operative/greet() - owner.current.playsound_local(get_turf(owner.current), 'modular_skyrat/modules/assault_operatives/sound/assault_operatives_greet.ogg', 30, 0, use_reverb = FALSE) - to_chat(owner, span_big("You are an assault operative!")) - to_chat(owner, span_red(spawn_text)) - owner.announce_objectives() - -/datum/antagonist/assault_operative/on_gain() - . = ..() - equip_operative() - forge_objectives() - if(send_to_spawnpoint) - move_to_spawnpoint() - give_alias() - -/datum/antagonist/assault_operative/create_team(datum/team/assault_operatives/new_team) - if(!new_team) - if(!always_new_team) - for(var/datum/antagonist/assault_operative/assault_operative in GLOB.antagonists) - if(!assault_operative.owner) - stack_trace("Antagonist datum without owner in GLOB.antagonists: [assault_operative]") - continue - if(assault_operative.assault_team) - assault_team = assault_operative.assault_team - return - assault_team = new /datum/team/assault_operatives - assault_team.add_member(owner) - assault_team.update_objectives() - return - if(!istype(new_team)) - stack_trace("Wrong team type passed to [type] initialization.") - assault_team = new_team - assault_team.add_member(owner) - -// UI systems -/datum/antagonist/assault_operative/ui_data(mob/user) - var/list/data = list() - - data["required_keys"] = SSgoldeneye.required_keys - - data["uploaded_keys"] = SSgoldeneye.uploaded_keys - - data["available_targets"] = get_available_targets() - data["extracted_targets"] = get_extracted_targets() - - data["goldeneye_keys"] = get_goldeneye_keys() - - data["objectives"] = get_objectives() - return data - -/datum/antagonist/assault_operative/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) - . = ..() - if(.) - return - switch(action) - if("track_key") - var/obj/item/goldeneye_key/selected_key = locate(params["key_ref"]) in SSgoldeneye.goldeneye_keys - if(!selected_key) - return - pinpointer.set_target(selected_key) - -/datum/antagonist/assault_operative/proc/get_available_targets() - var/list/available_targets_data = list() - for(var/datum/mind/iterating_mind in SSjob.get_all_heads()) - if(iterating_mind in SSgoldeneye.goldeneye_extracted_minds) - continue - available_targets_data += list(list( - "name" = iterating_mind.name, - "job" = iterating_mind.assigned_role.title, - )) - return available_targets_data - -/datum/antagonist/assault_operative/proc/get_extracted_targets() - var/list/extracted_targets_data = list() - for(var/datum/mind/iterating_mind in SSgoldeneye.goldeneye_extracted_minds) - extracted_targets_data += list(list( - "name" = iterating_mind.name, - "job" = iterating_mind.assigned_role.title, - )) - return extracted_targets_data - -/datum/antagonist/assault_operative/proc/get_goldeneye_keys() - var/list/goldeneye_keys = list() - for(var/obj/item/goldeneye_key/iterating_key in SSgoldeneye.goldeneye_keys) - var/turf/location = get_turf(iterating_key) - goldeneye_keys += list(list( - "coord_x" = location.x, - "coord_y" = location.y, - "coord_z" = location.z, - "selected" = pinpointer?.target == iterating_key, - "name" = iterating_key.goldeneye_tag, - "ref" = REF(iterating_key), - )) - return goldeneye_keys - - -/datum/antagonist/assault_operative/forge_objectives() - if(assault_team) - objectives |= assault_team.objectives - -/datum/antagonist/assault_operative/proc/give_alias() - var/chosen_name = sanitize_text(tgui_input_text(owner.current, "Please input your desired name!", "Name", "Randy Random")) - if(!chosen_name) - owner.current.real_name = random_unique_name() - return - owner.current.real_name = chosen_name - -/datum/antagonist/assault_operative/proc/equip_operative() - if(!ishuman(owner.current)) - return - - var/mob/living/carbon/human/human_target = owner.current - - if(human_target.dna.species.id == "plasmaman" ) - human_target.set_species(/datum/species/human) - to_chat(human_target, span_userdanger("You are now a human!")) - - for(var/obj/item/item in human_target.get_equipped_items(TRUE)) - qdel(item) - - var/obj/item/organ/internal/brain/human_brain = human_target.get_organ_slot(BRAIN) - human_brain.destroy_all_skillchips() // get rid of skillchips to prevent runtimes - human_target.equipOutfit(assault_operative_default_outfit) - human_target.regenerate_icons() - - pinpointer = human_target.apply_status_effect(/datum/status_effect/goldeneye_pinpointer) - - return TRUE - -/datum/antagonist/assault_operative/proc/move_to_spawnpoint() - var/team_number = 1 - if(assault_team) - team_number = assault_team.members.Find(owner) - owner.current.forceMove(GLOB.assault_operative_start[((team_number - 1) % GLOB.assault_operative_start.len) + 1]) - -/datum/antagonist/assault_operative/get_preview_icon() - if (!preview_outfit) - return null - - var/icon/final_icon = render_preview_outfit(preview_outfit) - - if (!isnull(preview_outfit_behind)) - var/icon/teammate = render_preview_outfit(preview_outfit_behind) - teammate.Blend(rgb(128, 128, 128, 128), ICON_MULTIPLY) - - final_icon.Blend(teammate, ICON_UNDERLAY, -world.icon_size / 4, 0) - final_icon.Blend(teammate, ICON_UNDERLAY, world.icon_size / 4, 0) - - var/icon/disky = icon('modular_skyrat/modules/assault_operatives/icons/goldeneye.dmi', "goldeneye_key") - disky.Shift(SOUTH, 12) - final_icon.Blend(disky, ICON_OVERLAY) - - return finish_preview_icon(final_icon) - -/** - * ASSAULT OPERATIVE TEAM DATUM - */ - -/datum/team/assault_operatives - /// Our core objective, it's obviously goldeneye. - var/core_objective = /datum/objective/goldeneye - -/datum/team/assault_operatives/proc/update_objectives() - if(core_objective) - var/datum/objective/new_objective = new core_objective - new_objective.team = src - objectives += new_objective - -/datum/team/assault_operatives/proc/operatives_dead() - var/total_operatives = LAZYLEN(members) - var/alive_operatives = 0 - for(var/datum/mind/iterating_mind in members) - if(ishuman(iterating_mind.current) && (iterating_mind.current.stat != DEAD)) - alive_operatives++ - if(!alive_operatives) - return ASSAULTOPS_ALL_DEAD - if(alive_operatives >= total_operatives) - return ASSAULTOPS_ALL_ALIVE - return ASSAULTOPS_PARTLY_DEAD - - -/datum/team/assault_operatives/roundend_report() - var/list/parts = list() - parts += "<span class='header'>Assault Operatives:</span>" - - switch(get_result()) - if(ASSAULT_RESULT_WIN) - parts += span_greentext("Assault Operatives Major Victory!") - parts += "<B>The Assault Operatives have successfully subverted and activated GoldenEye, and they all survived!</B>" - if(ASSAULT_RESULT_PARTIAL_WIN) - parts += span_greentext("Assault Operatives Minor Victory!") - parts += "<B>The Assault Operatives have successfully subverted and activated GoldenEye, but only some survived!</B>" - if(ASSAULT_RESULT_HEARTY_WIN) - parts += span_greentext("Assault Operatives Hearty Victory!") - parts += "<B>The Assault Operatives have successfully subverted and activated GoldenEye, but they all died!</B>" - if(ASSAULT_RESULT_LOSS) - parts += span_redtext("Crew Victory!") - parts += "<B>The Research Staff of [station_name()] have killed all of the assault operatives and stopped them activating GoldenEye!</B>" - if(ASSAULT_RESULT_STALEMATE) - parts += "<span class='neutraltext big'>Stalemate!</span>" - parts += "<B>The assault operatives have failed to activate GoldenEye and are still alive!</B>" - else - parts += "<span class='neutraltext big'>Neutral Victory</span>" - parts += "<B>Mission aborted!</B>" - parts += span_redtext("GoldenEye keys uploaded: [SSgoldeneye.uploaded_keys]/[SSgoldeneye.required_keys]") - - var/text = "<br><span class='header'>The assault operatives were:</span>" - text += printplayerlist(members) - text += "<br>" - - parts += text - - return "<div class='panel redborder'>[parts.Join("<br>")]</div>" - -/datum/team/assault_operatives/proc/get_result() - var/goldeneye_activated = SSgoldeneye.goldeneye_activated - var/operatives_dead_status = operatives_dead() - - if(goldeneye_activated && operatives_dead_status == ASSAULTOPS_ALL_ALIVE) - return ASSAULT_RESULT_WIN - else if(goldeneye_activated && operatives_dead_status == ASSAULTOPS_PARTLY_DEAD) - return ASSAULT_RESULT_PARTIAL_WIN - else if(goldeneye_activated && operatives_dead_status == ASSAULTOPS_ALL_DEAD) - return ASSAULT_RESULT_HEARTY_WIN - else if(!goldeneye_activated && operatives_dead_status == ASSAULTOPS_ALL_DEAD) - return ASSAULT_RESULT_LOSS - else if(!goldeneye_activated && operatives_dead_status) - return ASSAULT_RESULT_STALEMATE - -/** - * ASSAULT OPERATIVE JOB TYPE - */ -/datum/job/assault_operative - title = ROLE_ASSAULT_OPERATIVE - - -/datum/job/assault_operative/get_roundstart_spawn_point() - return pick(GLOB.assault_operative_start) - -/datum/job/assault_operative/get_latejoin_spawn_point() - return pick(GLOB.assault_operative_start) - - diff --git a/modular_skyrat/modules/assault_operatives/code/assault_operatives_outfits.dm b/modular_skyrat/modules/assault_operatives/code/assault_operatives_outfits.dm deleted file mode 100644 index 3a63be7617bf46..00000000000000 --- a/modular_skyrat/modules/assault_operatives/code/assault_operatives_outfits.dm +++ /dev/null @@ -1,45 +0,0 @@ -/datum/outfit/assaultops - name = "Assault Ops - Default" - - uniform = /obj/item/clothing/under/syndicate/sniper - shoes = /obj/item/clothing/shoes/jackboots - gloves = /obj/item/clothing/gloves/combat - back = /obj/item/storage/backpack/chameleon - ears = /obj/item/radio/headset/syndicate/alt - glasses = /obj/item/clothing/glasses/sunglasses - mask = /obj/item/clothing/mask/gas/sechailer/syndicate - - l_pocket = /obj/item/switchblade - r_pocket = /obj/item/armament_points_card/assaultops - - id = /obj/item/card/id/advanced/chameleon - id_trim = /datum/id_trim/chameleon/operative - -/datum/outfit/assaultops/post_equip(mob/living/carbon/human/equipping_human) - var/obj/item/radio/radio = equipping_human.ears - radio.set_frequency(FREQ_SYNDICATE) - radio.freqlock = TRUE - radio.command = TRUE - - var/obj/item/implant/weapons_auth/weapons_authorisation = new/obj/item/implant/weapons_auth(equipping_human) - weapons_authorisation.implant(equipping_human) - - equipping_human.faction |= ROLE_SYNDICATE - - equipping_human.update_icons() - -// ICONS FOR PREVIEW USE ONLY - -/datum/outfit/assaultops_preview - name = "Assault Ops - Preview ONLY" - - uniform = /obj/item/clothing/under/syndicate/sniper - shoes = /obj/item/clothing/shoes/jackboots - gloves = /obj/item/clothing/gloves/combat - ears = /obj/item/radio/headset/syndicate/alt - glasses = /obj/item/clothing/glasses/sunglasses - -/datum/outfit/assaultops_preview/background - name = "Assault Ops - Background Dudes - Preview ONLY" - - mask = /obj/item/clothing/mask/gas/sechailer/syndicate diff --git a/modular_skyrat/modules/assault_operatives/code/base_alarm.dm b/modular_skyrat/modules/assault_operatives/code/base_alarm.dm deleted file mode 100644 index e27756ca7f3bce..00000000000000 --- a/modular_skyrat/modules/assault_operatives/code/base_alarm.dm +++ /dev/null @@ -1,82 +0,0 @@ -/obj/machinery/base_alarm - name = "base alarm" - desc = "Pull this to alert the guards!" - icon = 'modular_skyrat/modules/assault_operatives/icons/alarm.dmi' - icon_state = "alarm" - max_integrity = 250 - integrity_failure = 0.4 - use_power = NO_POWER_USE - resistance_flags = FIRE_PROOF - - light_power = 0 - light_range = 4 - light_color = COLOR_VIVID_RED - - //Trick to get the glowing overlay visible from a distance - luminosity = 1 - - /// Is the alarm currently playing? WAIT WHY IS THIS NOT A LOOPING SOUND - var/alarm_playing = FALSE - /// Are we triggered? - var/triggered = FALSE - /// Currently connected alarms. - var/list/obj/machinery/base_alarm/alarms = list() - /// The area that we use to trigger other alarms. - var/area/myarea = null - /// Path to the alarm sound - var/alarm_sound_file = 'modular_skyrat/modules/assault_operatives/sound/goldeneyealarm.ogg' - /// Cooldown between each sound - var/alarm_cooldown = 65 - -/obj/machinery/base_alarm/Initialize(mapload) - . = ..() - update_icon() - myarea = get_area(src) - for(var/obj/machinery/base_alarm/alarm in myarea) - alarms.Add(alarm) - -/obj/machinery/base_alarm/Destroy() - LAZYREMOVE(alarms, src) - return ..() - -/obj/machinery/base_alarm/attack_hand(mob/user) - add_fingerprint(user) - to_chat(user, span_notice("You trigger [src]!")) - playsound(src, 'sound/machines/pda_button1.ogg', 100) - trigger_alarm() - -/obj/machinery/base_alarm/attack_ai(mob/user) - return attack_hand(user) - -/obj/machinery/base_alarm/attack_robot(mob/user) - return attack_hand(user) - -/obj/machinery/base_alarm/proc/trigger_alarm() - if(triggered) - reset() - else - alarm() - -/obj/machinery/base_alarm/proc/alarm() - for(var/obj/machinery/base_alarm/iterating_alarm in alarms) - iterating_alarm.icon_state = "alarm_on" - iterating_alarm.set_light(l_power = 2) - iterating_alarm.triggered = TRUE - if(!iterating_alarm.alarm_playing) - iterating_alarm.alarm_playing = TRUE - playsound(iterating_alarm, alarm_sound_file, 30) - addtimer(CALLBACK(iterating_alarm, PROC_REF(alarm_sound)), alarm_cooldown) - -/obj/machinery/base_alarm/proc/alarm_sound() - if(!triggered) - alarm_playing = FALSE - else - playsound(src, alarm_sound_file, 30) - addtimer(CALLBACK(src, PROC_REF(alarm_sound)), alarm_cooldown) - - -/obj/machinery/base_alarm/proc/reset(mob/user) - for(var/obj/machinery/base_alarm/iterating_alarm in alarms) - iterating_alarm.icon_state = "alarm" - iterating_alarm.set_light(l_power = 0) - iterating_alarm.triggered = FALSE diff --git a/modular_skyrat/modules/assault_operatives/code/dynamic_rulsesets_roundstart.dm b/modular_skyrat/modules/assault_operatives/code/dynamic_rulsesets_roundstart.dm deleted file mode 100644 index 8c24baad5c7cda..00000000000000 --- a/modular_skyrat/modules/assault_operatives/code/dynamic_rulsesets_roundstart.dm +++ /dev/null @@ -1,59 +0,0 @@ -/* -* ASSAULT OPERATIVES -*/ - -#define ASSAULT_OPERATIVES_COUNT 5 - -/datum/dynamic_ruleset/roundstart/assault_operatives - name = "Assault Operatives" - antag_flag = ROLE_ASSAULT_OPERATIVE - antag_datum = /datum/antagonist/assault_operative - minimum_required_age = 14 - restricted_roles = list( - JOB_CAPTAIN, - JOB_HEAD_OF_SECURITY, - JOB_HEAD_OF_SECURITY, - JOB_CHIEF_MEDICAL_OFFICER, - JOB_CHIEF_ENGINEER, - ) - required_candidates = 5 - weight = 3 - cost = 20 - minimum_players = 50 - flags = HIGH_IMPACT_RULESET - antag_cap = list("denominator" = 18, "offset" = 1) - var/datum/team/assault_operatives/assault_operatives_team - -/datum/dynamic_ruleset/roundstart/assault_operatives/ready(population, forced = FALSE) - required_candidates = get_antag_cap(population) - . = ..() - -/datum/dynamic_ruleset/roundstart/assault_operatives/pre_execute(population) - . = ..() - // If ready() did its job, candidates should have 5 or more members in it - for(var/operatives_number in 1 to ASSAULT_OPERATIVES_COUNT) - if(candidates.len <= 0) - break - var/mob/candidate = pick_n_take(candidates) - assigned += candidate.mind - candidate.mind.set_assigned_role(SSjob.GetJobType(/datum/job/assault_operative)) - candidate.mind.special_role = ROLE_ASSAULT_OPERATIVE - GLOB.pre_setup_antags += candidate.mind - return TRUE - -/datum/dynamic_ruleset/roundstart/assault_operatives/execute() - assault_operatives_team = new() - for(var/datum/mind/iterating_mind in assigned) - GLOB.pre_setup_antags -= iterating_mind - var/datum/antagonist/assault_operative/new_op = new antag_datum() - iterating_mind.add_antag_datum(new_op, assault_operatives_team) - if(assault_operatives_team.members.len) - assault_operatives_team.update_objectives() - SSgoldeneye.required_keys = get_goldeneye_key_count() - return TRUE - log_game("DYNAMIC: [ruletype] [name] failed to get any eligible assault operatives. Refunding [cost] threat.") - return FALSE - -/// Returns the required goldeneye keys for activation. This is to make sure we don't have an impossible to achieve goal. However, there has to be at least one key. -/datum/dynamic_ruleset/roundstart/assault_operatives/proc/get_goldeneye_key_count() - return clamp(LAZYLEN(SSjob.get_all_heads()), 1, GOLDENEYE_REQUIRED_KEYS_MAXIMUM) diff --git a/modular_skyrat/modules/assault_operatives/code/equipment_items/misc_items.dm b/modular_skyrat/modules/assault_operatives/code/equipment_items/misc_items.dm deleted file mode 100644 index f14d68fcebd67b..00000000000000 --- a/modular_skyrat/modules/assault_operatives/code/equipment_items/misc_items.dm +++ /dev/null @@ -1,21 +0,0 @@ -/obj/item/storage/pouch/medpens - name = "medpen pouch" - desc = "A pouch containing several different types of lifesaving medipens." - icon = 'modular_skyrat/modules/modular_items/icons/storage.dmi' - icon_state = "medpen_pouch" - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKETS - -/obj/item/storage/pouch/medpens/Initialize(mapload) - . = ..() - atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL - atom_storage.max_total_storage = 30 - atom_storage.max_slots = 5 - atom_storage.numerical_stacking = FALSE - atom_storage.can_hold = typecacheof(list(/obj/item/reagent_containers/hypospray)) - -/obj/item/storage/pouch/medpens/PopulateContents() - new /obj/item/reagent_containers/hypospray/medipen/blood_loss(src) - new /obj/item/reagent_containers/hypospray/medipen/oxandrolone(src) - new /obj/item/reagent_containers/hypospray/medipen/salacid(src) - new /obj/item/reagent_containers/hypospray/medipen/salbutamol(src) - new /obj/item/reagent_containers/hypospray/medipen/stimulants(src) diff --git a/modular_skyrat/modules/assault_operatives/code/equipment_items/stealth_mod.dm b/modular_skyrat/modules/assault_operatives/code/equipment_items/stealth_mod.dm deleted file mode 100644 index bff6ec0ffaa7d7..00000000000000 --- a/modular_skyrat/modules/assault_operatives/code/equipment_items/stealth_mod.dm +++ /dev/null @@ -1,95 +0,0 @@ -/datum/mod_theme/covert - name = "covert" - desc = "A rarely seen MOD design of unknown origin, covered in sleek armor and with a menacingly solid faceplate." - extended_desc = "Not all that much is known about this type of suit, dubbed the 'Covert' type by most who come across it. \ - The build is a streamlined layering consisting of shaped Plastitanium, and composite ceramic, while the under suit is \ - lined with a lightweight Kevlar and durathread hybrid weave to provide ample protection to the user where the plating \ - doesn't, with an illegal onboard electric powered ablative shield module to provide resistance against conventional \ - energy firearms. In addition, it has an in-built chameleon system, allowing you to disguise the suit while undeployed. \ - Aside from that, there are no manufcaturer marks or tags to be found, and even the color scheme is unfamiliar when \ - it comes to most known MOD producers." - default_skin = "stealth" - armor_type = /datum/armor/mod_theme_covert - resistance_flags = FIRE_PROOF | ACID_PROOF - atom_flags = PREVENT_CONTENTS_EXPLOSION_1 - max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT - siemens_coefficient = 0 - complexity_max = DEFAULT_MAX_COMPLEXITY + 5 - slowdown_inactive = 0 - slowdown_active = 0 - ui_theme = "hackerman" - slot_flags = ITEM_SLOT_BELT - inbuilt_modules = list( - /obj/item/mod/module/storage/belt, - /obj/item/mod/module/chameleon/contractor, - /obj/item/mod/module/welding/camera_vision, - /obj/item/mod/module/stealth, - ) - allowed_suit_storage = list( - /obj/item/flashlight, - /obj/item/tank/internals, - /obj/item/ammo_box, - /obj/item/ammo_casing, - /obj/item/restraints/handcuffs, - /obj/item/assembly/flash, - /obj/item/melee/baton, - /obj/item/melee/energy/sword, - /obj/item/shield/energy, - ) - skins = list( - "stealth" = list( - MOD_ICON_OVERRIDE = 'modular_skyrat/modules/assault_operatives/icons/modsuits/mod.dmi', - MOD_WORN_ICON_OVERRIDE = 'modular_skyrat/modules/assault_operatives/icons/modsuits/wornmod.dmi', - HELMET_LAYER = NECK_LAYER, - HELMET_FLAGS = list( - UNSEALED_CLOTHING = SNUG_FIT, - SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE, - 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, - ), - GAUNTLETS_FLAGS = list( - UNSEALED_CLOTHING = THICKMATERIAL, - SEALED_CLOTHING = STOPSPRESSUREDAMAGE, - ), - BOOTS_FLAGS = list( - UNSEALED_CLOTHING = THICKMATERIAL, - SEALED_CLOTHING = STOPSPRESSUREDAMAGE, - ), - ), - ) - -/datum/armor/mod_theme_covert - melee = 30 - bullet = 50 - laser = 40 - energy = 30 - bomb = 30 - bio = 30 - fire = 100 - acid = 100 - wound = 25 - -/obj/item/mod/control/pre_equipped/stealth_operative - worn_icon = 'modular_skyrat/modules/assault_operatives/icons/modsuits/wornmod.dmi' - icon = 'modular_skyrat/modules/assault_operatives/icons/modsuits/mod.dmi' - icon_state = "stealth-control" - theme = /datum/mod_theme/covert - applied_cell = /obj/item/stock_parts/cell/hyper - applied_modules = list( - /obj/item/mod/module/dna_lock, - /obj/item/mod/module/emp_shield, - /obj/item/mod/module/visor/night, - /obj/item/mod/module/magnetic_harness, - /obj/item/mod/module/tether, - /obj/item/mod/module/holster, - /obj/item/mod/module/status_readout/operational, - ) - -/obj/machinery/suit_storage_unit/industrial/assault_operative - mod_type = /obj/item/mod/control/pre_equipped/stealth_operative - storage_type = /obj/item/tank/internals/emergency_oxygen/double diff --git a/modular_skyrat/modules/assault_operatives/code/goldeneye.dm b/modular_skyrat/modules/assault_operatives/code/goldeneye.dm deleted file mode 100644 index 138d289ca851a7..00000000000000 --- a/modular_skyrat/modules/assault_operatives/code/goldeneye.dm +++ /dev/null @@ -1,257 +0,0 @@ -GLOBAL_LIST_EMPTY(goldeneye_pinpointers) - -#define ICARUS_IGNITION_TIME (20 SECONDS) -#define PINPOINTER_PING_TIME (4 SECONDS) - -/** - * GoldenEye defence network - * - * Contains: Subsystem, Keycard, Terminal and Objective - */ - -SUBSYSTEM_DEF(goldeneye) - name = "GoldenEye" - flags = SS_NO_FIRE | SS_NO_INIT - /// A tracked list of all our keys. - var/list/goldeneye_keys = list() - /// A list of minds that have been extracted and thus cannot be extracted again. - var/list/goldeneye_extracted_minds = list() - /// How many keys have been uploaded to GoldenEye. - var/uploaded_keys = 0 - /// How many keys do we need to activate GoldenEye? Can be overriden by Dynamic if there aren't enough heads of staff. - var/required_keys = GOLDENEYE_REQUIRED_KEYS_MAXIMUM - /// Have we been activated? - var/goldeneye_activated = FALSE - /// How long until ICARUS fires? - var/ignition_time = ICARUS_IGNITION_TIME - -/// A safe proc for adding a targets mind to the tracked extracted minds. -/datum/controller/subsystem/goldeneye/proc/extract_mind(datum/mind/target_mind) - goldeneye_extracted_minds += target_mind - -/// A safe proc for registering a new key to the goldeneye system. -/datum/controller/subsystem/goldeneye/proc/upload_key() - uploaded_keys++ - check_condition() - -/// Checks our activation condition after an upload has occured. -/datum/controller/subsystem/goldeneye/proc/check_condition() - if(uploaded_keys >= required_keys) - activate() - return - priority_announce("UNAUTHORISED KEYCARD UPLOAD DETECTED. [uploaded_keys]/[required_keys] KEYCARDS UPLOADED.", "GoldenEye Defence Network") - -/// Activates goldeneye. -/datum/controller/subsystem/goldeneye/proc/activate() - var/message = "/// GOLDENEYE DEFENCE NETWORK BREACHED /// \n \ - Unauthorised GoldenEye Defence Network access detected. \n \ - ICARUS online. \n \ - Targeting system override detected... \n \ - New target: /NTSS13/ \n \ - ICARUS firing protocols activated. \n \ - ETA to fire: [ignition_time / 10] seconds." - - priority_announce(message, "GoldenEye Defence Network", ANNOUNCER_ICARUS) - goldeneye_activated = TRUE - - addtimer(CALLBACK(src, PROC_REF(fire_icarus)), ignition_time) - - -/datum/controller/subsystem/goldeneye/proc/fire_icarus() - var/datum/round_event_control/icarus_sunbeam/event_to_start = new() - event_to_start.run_event() - -/// Checks if a mind(target_mind) is a head and if they aren't in the goldeneye_extracted_minds list. -/datum/controller/subsystem/goldeneye/proc/check_goldeneye_target(datum/mind/target_mind) - var/list/heads_list = SSjob.get_all_heads() - for(var/datum/mind/iterating_mind as anything in heads_list) - if(target_mind == iterating_mind) // We have a match, let's check if they've already been extracted. - if(target_mind in goldeneye_extracted_minds) // They've already been extracted, no double extracts! - return FALSE - return TRUE - return FALSE - -// Goldeneye key -/obj/item/goldeneye_key - name = "\improper GoldenEye authentication keycard" - desc = "A high profile authentication keycard to Nanotrasen's GoldenEye defence network. It seems indestructible." - icon = 'modular_skyrat/modules/assault_operatives/icons/goldeneye.dmi' - icon_state = "goldeneye_key" - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - max_integrity = INFINITY - /// A unique tag that is used to identify this key. - var/goldeneye_tag = "G00000" - /// Flavour text for who's mind is in the key. - var/extract_name = "NO DATA" - -/obj/item/goldeneye_key/Initialize(mapload) - . = ..() - SSgoldeneye.goldeneye_keys += src - goldeneye_tag = "G[rand(10000, 99999)]" - name = "\improper GoldenEye authentication keycard: [goldeneye_tag]" - AddComponent(/datum/component/gps, goldeneye_tag) - SSpoints_of_interest.make_point_of_interest(src) - -/obj/item/goldeneye_key/examine(mob/user) - . = ..() - . += "The DNA data link belongs to: [extract_name]" - -/obj/item/goldeneye_key/Destroy(force) - SSgoldeneye.goldeneye_keys -= src - return ..() - -// Upload terminal -/obj/machinery/goldeneye_upload_terminal - name = "\improper GoldenEye Defnet Upload Terminal" - desc = "An ominous terminal with some ports and keypads, the screen is scrolling with illegible nonsense. It has a strange marking on the side, a red ring with a gold circle within." - icon = 'modular_skyrat/modules/assault_operatives/icons/goldeneye.dmi' - icon_state = "goldeneye_terminal" - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - density = TRUE - /// Is the system currently in use? Used to prevent spam and abuse. - var/uploading = FALSE - - -/obj/machinery/goldeneye_upload_terminal/attackby(obj/item/weapon, mob/user, params) - . = ..() - if(uploading) - return - if(!is_station_level(z)) - say("CONNECTION TO GOLDENEYE NOT DETECTED: Please return to comms range.") - playsound(src, 'sound/machines/nuke/angry_beep.ogg', 100) - return - if(!istype(weapon, /obj/item/goldeneye_key)) - say("AUTHENTICATION ERROR: Please do not insert foreign objects into terminal.") - playsound(src, 'sound/machines/nuke/angry_beep.ogg', 100) - return - var/obj/item/goldeneye_key/inserting_key = weapon - say("GOLDENEYE KEYCARD ACCEPTED: Please wait while the keycard is verified...") - playsound(src, 'sound/machines/nuke/general_beep.ogg', 100) - uploading = TRUE - if(do_after(user, 10 SECONDS, src)) - say("GOLDENEYE KEYCARD AUTHENTICATED!") - playsound(src, 'sound/machines/nuke/confirm_beep.ogg', 100) - SSgoldeneye.upload_key() - uploading = FALSE - qdel(inserting_key) - else - say("GOLDENEYE KEYCARD VERIFICATION FAILED: Please try again.") - playsound(src, 'sound/machines/nuke/angry_beep.ogg', 100) - uploading = FALSE - -// Pinpointer -/obj/item/pinpointer/nuke/goldeneye - name = "\improper GoldenEye keycard pinpointer" - desc = "A handheld tracking device that locks onto certain signals. This one is configured to locate any GoldenEye keycards." - icon_state = "pinpointer_syndicate" - worn_icon_state = "pinpointer_black" - active = TRUE - mode = TRACK_GOLDENEYE - -/obj/item/pinpointer/nuke/goldeneye/Initialize(mapload) - . = ..() - START_PROCESSING(SSfastprocess, src) - -/obj/item/pinpointer/nuke/goldeneye/attack_self(mob/living/user) - if(!LAZYLEN(SSgoldeneye.goldeneye_keys)) - to_chat(user, span_danger("ERROR! No GoldenEye keys detected!")) - return - target = tgui_input_list(user, "Select GoldenEye keycard to track", "GoldenEye keycard", SSgoldeneye.goldeneye_keys) - if(target) - to_chat(user, span_notice("Set to track: [target.name]")) - -/obj/item/pinpointer/nuke/goldeneye/scan_for_target() - if(QDELETED(target)) - target = null - -// Objective -/datum/objective/goldeneye - name = "subvert goldeneye" - objective_name = "Subvert GoldenEye" - explanation_text = "Extract all of the required GoldenEye authentication keys from the heads of staff and activate GoldenEye." - martyr_compatible = TRUE - -/datum/objective/goldeneye/check_completion() - if(SSgoldeneye.goldeneye_activated) - return TRUE - return FALSE - -// Internal pinpointer - - -/atom/movable/screen/alert/status_effect/goldeneye_pinpointer - name = "Target Integrated Pinpointer" - desc = "Even stealthier than a normal implant, it points to a selected GoldenEye keycard." - icon = 'icons/obj/device.dmi' - icon_state = "pinon" - -/datum/status_effect/goldeneye_pinpointer - id = "goldeneye_pinpointer" - duration = -1 - tick_interval = PINPOINTER_PING_TIME - alert_type = /atom/movable/screen/alert/status_effect/goldeneye_pinpointer - /// The range until you're considered 'close' - var/range_mid = 8 - /// The range until you're considered 'too far away' - var/range_far = 16 - /// The target we are pointing towards, refreshes every tick. - var/obj/item/target - /// Our linked antagonist datum, if any. - var/datum/antagonist/assault_operative/linked_antagonist - -/datum/status_effect/goldeneye_pinpointer/New(list/arguments) - GLOB.goldeneye_pinpointers += src - return ..() - -/datum/status_effect/goldeneye_pinpointer/Destroy() - GLOB.goldeneye_pinpointers -= src - if(linked_antagonist) - linked_antagonist.pinpointer = null - linked_antagonist = null - return ..() - -/datum/status_effect/goldeneye_pinpointer/tick(seconds_between_ticks) - if(!owner) - qdel(src) - return - point_to_target() - -///Show the distance and direction of a scanned target -/datum/status_effect/goldeneye_pinpointer/proc/point_to_target() - if(QDELETED(target)) - linked_alert.icon_state = "pinonnull" - target = null - return - if(!target) - linked_alert.icon_state = "pinonnull" - return - - var/turf/here = get_turf(owner) - var/turf/there = get_turf(target) - - if(!here || !there) - linked_alert.icon_state = "pinonnull" - return - if(here.z != there.z) - linked_alert.icon_state = "pinonnull" - return - if(!get_dist_euclidian(here,there)) - linked_alert.icon_state = "pinondirect" - return - linked_alert.setDir(get_dir(here, there)) - - var/dist = (get_dist(here, there)) - if(dist >= 1 && dist <= range_mid) - linked_alert.icon_state = "pinonclose" - else if(dist > range_mid && dist <= range_far) - linked_alert.icon_state = "pinonmedium" - else if(dist > range_far) - linked_alert.icon_state = "pinonfar" - - -/datum/status_effect/goldeneye_pinpointer/proc/set_target(obj/item/new_target) - target = new_target - to_chat(owner, span_redtext("Integrated pinpointer set to: [target.name]")) - -#undef ICARUS_IGNITION_TIME -#undef PINPOINTER_PING_TIME diff --git a/modular_skyrat/modules/assault_operatives/code/interrogator.dm b/modular_skyrat/modules/assault_operatives/code/interrogator.dm deleted file mode 100644 index 6b59191a29bddd..00000000000000 --- a/modular_skyrat/modules/assault_operatives/code/interrogator.dm +++ /dev/null @@ -1,216 +0,0 @@ -#define STAGE_PROCESS_TIME_LOWER (30 SECONDS) -#define STAGE_PROCESS_TIME_UPPER (1 MINUTES) -#define ALERT_CREW_TIME (1 MINUTES) - -/** - * The interrorgator, a piece of machinery used in assault ops to extract GoldenEye keys from heads of staff. - * - * This device has 3 stages. - * - * This device has a few requirements to function: - * 1. Must be on station Z-level - * 2. Must be a head of staff with a linked interrogate objective - * 3. Must be alive - * 4. Must not be a duplicate key - * - * After a key has been extracted, it will send a pod somewhere into maintenance, and the syndicates will know about it straight away. - */ -/obj/machinery/interrogator - name = "In-TERROR-gator" - desc = "A morraly corrupt piece of machinery used to extract the human mind into a GoldenEye authentication key. The process is said to be one of the most painful experiences someone can endure. Alt+click to start the process." - icon = 'modular_skyrat/modules/assault_operatives/icons/goldeneye.dmi' - icon_state = "interrogator_open" - state_open = FALSE - density = TRUE - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - /// Is the door locked? - var/locked = FALSE - /// Is the system currently processing? - var/processing = FALSE - /// The link to our timer ID so we can override it if need be. - var/timer_id - /// The human occupant currently inside. Used for easier referencing later on. - var/mob/living/carbon/human/human_occupant - -/obj/machinery/interrogator/examine(mob/user) - . = ..() - . += "It requies a direct link to a Nanotrasen defence network, stay near a Nanotrasen comms sat!" - -/obj/machinery/interrogator/AltClick(mob/user) - . = ..() - if(!can_interact(user)) - return - if(user == occupant) - return - if(!processing) - attempt_extract(user) - else - stop_extract(user) - -/obj/machinery/interrogator/interact(mob/user) - if(user == occupant) - return - if(state_open) - close_machine() - return - if(!processing && !locked) - open_machine() - return - -/obj/machinery/interrogator/update_icon_state() - . = ..() - if(occupant) - icon_state = processing ? "interrogator_on" : "interrogator_off" - else - icon_state = state_open ? "interrogator_open" : "interrogator_closed" - -/obj/machinery/interrogator/Destroy() - if(timer_id) - deltimer(timer_id) - timer_id = null - human_occupant = null - return ..() - -/obj/machinery/interrogator/container_resist_act(mob/living/user) - if(!locked) - open_machine() - -/obj/machinery/interrogator/open_machine(drop = TRUE, density_to_set = FALSE) - . = ..() - human_occupant = null - -/obj/machinery/interrogator/proc/stop_extract() - processing = FALSE - locked = FALSE - human_occupant = null - playsound(src, 'sound/machines/buzz-two.ogg', 100) - balloon_alert_to_viewers("process aborted!") - if(timer_id) - deltimer(timer_id) - timer_id = null - update_appearance() - -/obj/machinery/interrogator/proc/check_requirements() - if(!human_occupant) - return FALSE - if(state_open) - return FALSE - if(!is_station_level(z)) - return FALSE - if(human_occupant.stat == DEAD && !HAS_TRAIT(human_occupant, TRAIT_DNR)) - return FALSE - return TRUE - -/obj/machinery/interrogator/proc/attempt_extract(mob/user) - if(!occupant) - balloon_alert_to_viewers("no occupant!") - return - if(state_open) - balloon_alert_to_viewers("door open!") - return - if(!is_station_level(z)) - balloon_alert_to_viewers("no comms link!") - return - if(!ishuman(occupant)) - balloon_alert_to_viewers("invalid target DNA!") - return - human_occupant = occupant - if(human_occupant.stat == DEAD && !HAS_TRAIT(human_occupant, TRAIT_DNR)) - balloon_alert_to_viewers("occupant is dead!") - return - if(!SSgoldeneye.check_goldeneye_target(human_occupant.mind)) // Preventing abuse by method of duplication. - balloon_alert_to_viewers("no GoldenEye data!") - playsound(src, 'sound/machines/scanbuzz.ogg', 100) - return - - start_extract() - -/obj/machinery/interrogator/proc/start_extract() - to_chat(human_occupant, span_userdanger("You feel dread wash over you as you hear the door on [src] lock!")) - locked = TRUE - processing = TRUE - say("Starting DNA data extraction!") - timer_id = addtimer(CALLBACK(src, PROC_REF(stage_one)), rand(STAGE_PROCESS_TIME_LOWER, STAGE_PROCESS_TIME_UPPER), TIMER_STOPPABLE|TIMER_UNIQUE) //Random times so crew can't anticipate exactly when it will drop. - update_appearance() - -/obj/machinery/interrogator/proc/stage_one() - if(!check_requirements()) - say("Critical error! Aborting.") - playsound(src, 'sound/machines/scanbuzz.ogg', 100) - return - to_chat(human_occupant, span_danger("As [src] whirrs to life you feel some cold metal restraints deploy around you, you can't move!")) - playsound(loc, 'sound/items/rped.ogg', 60) - say("Stage one complete!") - minor_announce("SECURITY BREACH DETECTED, NETWORK COMPROMISED! LOCATION UNTRACEABLE.", "GoldenEye Defence Network") - timer_id = addtimer(CALLBACK(src, PROC_REF(stage_two)), rand(STAGE_PROCESS_TIME_LOWER, STAGE_PROCESS_TIME_UPPER), TIMER_STOPPABLE|TIMER_UNIQUE) - -/obj/machinery/interrogator/proc/stage_two() - if(!check_requirements()) - say("Critical error! Aborting.") - playsound(src, 'sound/machines/scanbuzz.ogg', 100) - return - to_chat(human_occupant, span_userdanger("You feel a sharp pain as a drill penetrates your skull, it's unbearable!")) - human_occupant.emote("scream") - human_occupant.apply_damage(30, BRUTE, BODY_ZONE_HEAD) - playsound(src, 'sound/effects/wounds/blood1.ogg', 100) - playsound(src, 'sound/items/drill_use.ogg', 100) - say("Stage two complete!") - timer_id = addtimer(CALLBACK(src, PROC_REF(stage_three)), rand(STAGE_PROCESS_TIME_LOWER, STAGE_PROCESS_TIME_UPPER), TIMER_STOPPABLE|TIMER_UNIQUE) - -/obj/machinery/interrogator/proc/stage_three() - if(!check_requirements()) - say("Critical error! Aborting.") - playsound(src, 'sound/machines/scanbuzz.ogg', 100) - return - to_chat(human_occupant, span_userdanger("You feel something penetrating your brain, it feels as though your childhood memories are fading! Please, make it stop! After a moment of silence, you realize you can't remember what happened to you!")) - human_occupant.emote("scream") - human_occupant.apply_damage(20, BRUTE, BODY_ZONE_HEAD) - human_occupant.set_jitter_if_lower(3 MINUTES) - human_occupant.Unconscious(1 MINUTES) - playsound(src, 'sound/effects/dismember.ogg', 100) - playsound(src, 'sound/machines/ping.ogg', 100) - say("Process complete! A key is being sent aboard! Crew will shortly detect the keycard!") - send_keycard() - processing = FALSE - locked = FALSE - update_appearance() - addtimer(CALLBACK(src, PROC_REF(announce_creation)), ALERT_CREW_TIME) - -/obj/machinery/interrogator/proc/announce_creation() - priority_announce("CRITICAL SECURITY BREACH DETECTED! A GoldenEye authentication keycard has been illegally extracted and is being sent in somewhere on the station!", "GoldenEye Defence Network") - for(var/obj/item/pinpointer/nuke/disk_pinpointers in GLOB.pinpointer_list) - disk_pinpointers.switch_mode_to(TRACK_GOLDENEYE) //Pinpointer will track the newly created goldeneye key. - -/obj/machinery/interrogator/proc/send_keycard() - var/turf/landingzone = find_drop_turf() - var/obj/item/goldeneye_key/new_key - if(!landingzone) - new_key = new(src) - else - new_key = new - new_key.extract_name = human_occupant.real_name - // Add them to the goldeneye extracted list. This list is capable of having nulls. - SSgoldeneye.extract_mind(human_occupant.mind) - var/obj/structure/closet/supplypod/pod = new - new /obj/effect/pod_landingzone(landingzone, pod, new_key) - for(var/datum/status_effect/goldeneye_pinpointer/iterating_pinpointer in GLOB.goldeneye_pinpointers) - iterating_pinpointer.set_target(new_key) - - notify_ghosts("GoldenEye key launched!", source = new_key, action = NOTIFY_ORBIT, header = "Something's Interesting!") - -/obj/machinery/interrogator/proc/find_drop_turf() - var/list/possible_turfs = list() - - var/obj/structure/test_structure = new() // This is apparently the most intuative way to check if a turf is able to support entering. - - for(var/area/station/maintenance/maint_area in GLOB.areas) - for(var/turf/floor as anything in maint_area.get_contained_turfs()) - if(!is_station_level(floor.z)) - continue - if(floor.Enter(test_structure)) - possible_turfs += floor - qdel(test_structure) - - //Pick a turf to spawn at if we can - if(length(possible_turfs)) - return pick(possible_turfs) diff --git a/modular_skyrat/modules/assault_operatives/code/keycard_doors.dm b/modular_skyrat/modules/assault_operatives/code/keycard_doors.dm deleted file mode 100644 index 56ea9086a02a25..00000000000000 --- a/modular_skyrat/modules/assault_operatives/code/keycard_doors.dm +++ /dev/null @@ -1,14 +0,0 @@ -// Access cards - -/obj/item/keycard/assault_ops_chemistry - name = "Chemistry Closet Access Card" - desc = "A red keycard with an image of a beaker. Using this will allow you to gain access to the Chemical Manufacturing Plant in Firebase Balthazord." - color = "#9c0e26" - puzzle_id = "assops_chem" - -// Card locked doors - -/obj/machinery/door/puzzle/keycard/assault_ops_chemistry - name = "Chemistry Closet Access" - desc = "Locked. Rumor has it that the key was dropped into the armament storage vault at some point, maybe you can find it in the vendors?" - puzzle_id = "assops_chem" diff --git a/modular_skyrat/modules/assault_operatives/code/shuttle.dm b/modular_skyrat/modules/assault_operatives/code/shuttle.dm deleted file mode 100644 index fb5410ede89b20..00000000000000 --- a/modular_skyrat/modules/assault_operatives/code/shuttle.dm +++ /dev/null @@ -1,45 +0,0 @@ -/obj/machinery/computer/shuttle/goldeneye_cruiser - name = "goldeneye cruiser helm" - desc = "The terminal used to control the goldeneye cruiser." - shuttleId = "goldeneye_cruiser" - possible_destinations = "goldeneye_cruiser_custom;goldeneye_cruiser_dock;syndicate_away;syndicate_z5;syndicate_ne;syndicate_nw;syndicate_n;syndicate_se;syndicate_sw;syndicate_s;syndicate_cruiser_dock;whiteship_away;whiteship_home;whiteship_z4;whiteship_lavaland;ferry_away" - circuit = /obj/item/circuitboard/computer/syndicate_shuttle - icon_screen = "syndishuttle" - icon_keyboard = "syndie_key" - light_color = COLOR_SOFT_RED - req_access = list(ACCESS_SYNDICATE) - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - -/obj/machinery/computer/shuttle/goldeneye_cruiser/launch_check(mob/user) - return TRUE - -/obj/machinery/computer/shuttle/goldeneye_cruiser/allowed(mob/to_check) - if(issilicon(to_check) && !(ROLE_SYNDICATE in to_check.faction)) - return FALSE - return ..() - -/obj/machinery/computer/shuttle/goldeneye_cruiser/recall - name = "goldeneye shuttle recall terminal" - desc = "Use this if your friends left you behind." - possible_destinations = "goldeneye_cruiser_dock" - -/obj/machinery/computer/camera_advanced/shuttle_docker/goldeneye_cruiser - name = "goldeneye cruiser navigation computer" - desc = "Used to designate a precise transit location for the goldeneye cruiser." - icon_screen = "syndishuttle" - icon_keyboard = "syndie_key" - shuttlePortId = "goldeneye_cruiser_dock" - shuttleId = "goldeneye_cruiser" - jump_to_ports = list("syndicate_n" = 1, "whiteship_away" = 1, "whiteship_home" = 1, "whiteship_z4" = 1) - view_range = 14 - whitelist_turfs = list(/turf/open/space, /turf/open/floor/plating, /turf/open/lava, /turf/closed/mineral, /turf/open/misc/ice/icemoon, /turf/open/misc/ice, /turf/open/misc/asteroid/snow/icemoon, /turf/closed/mineral/random/snow) - see_hidden = TRUE - x_offset = -10 - y_offset = 5 - -/datum/map_template/shuttle/goldeneye_cruiser - name = "goldeneye cruiser" - prefix = "_maps/shuttles/skyrat/" - port_id = "goldeneye" - suffix = "cruiser" - who_can_purchase = null diff --git a/modular_skyrat/modules/assault_operatives/code/sunbeam.dm b/modular_skyrat/modules/assault_operatives/code/sunbeam.dm deleted file mode 100644 index e05dea055ef807..00000000000000 --- a/modular_skyrat/modules/assault_operatives/code/sunbeam.dm +++ /dev/null @@ -1,172 +0,0 @@ -#define SUNBEAM_OBLITERATION_RANGE_FIRE 2 -#define SUNBEAM_OBLITERATION_RANGE_FLATTEN 1 -#define SUNBEAM_OBLITERATION_COOLDOWN (0.2 SECONDS) -#define SUNBEAM_MOVEMENT_COOLDOWN (0.3 SECONDS) -#define SUNBEAM_DEFAULT_SCALE_X 2 -#define SUNBEAM_DEFAULT_SCALE_Y 2 -#define SUNBEAM_OVERLAYS 16 - -/obj/effect/sunbeam - name = "\improper ICARUS Sunbeam" - desc = "A beam of light from the sun." - icon = 'modular_skyrat/modules/assault_operatives/icons/sunbeam.dmi' - icon_state = "sunray_splash" - throwforce = 100 - move_force = INFINITY - move_resist = INFINITY - pull_force = INFINITY - flags_1 = PREVENT_CONTENTS_EXPLOSION_1 - movement_type = PHASING | FLYING - plane = ABOVE_LIGHTING_PLANE - light_range = 6 - light_color = "#ffbf10" - /// A reference to the target we will move towards - var/atom/target_atom - /// How much do we offset the mid beam? - var/beam_offset_y = 32 - /// Our sound loop. - var/datum/looping_sound/sunbeam/soundloop - /// Used to control how slowly the beam moves. - var/movement_cooldown = SUNBEAM_MOVEMENT_COOLDOWN - /// Our obliteration cooldown. - var/obliteration_cooldown = SUNBEAM_OBLITERATION_COOLDOWN - /// The range of fire to spawn. - var/obliteration_range_fire = SUNBEAM_OBLITERATION_RANGE_FIRE - /// The range of objects and atoms to be atomised. - var/obliteration_range_flatten = SUNBEAM_OBLITERATION_RANGE_FLATTEN - - COOLDOWN_DECLARE(oblirerate_cooldown) - COOLDOWN_DECLARE(movement_delay) - -/obj/effect/sunbeam/Initialize(mapload, atom/target, movement_cooldown_override, obliteration_cooldown_override, obliteration_range_fire_override, obliteration_range_flatten_override, scale_x = SUNBEAM_DEFAULT_SCALE_X, scale_y = SUNBEAM_DEFAULT_SCALE_Y) - . = ..() - if(target) - target_atom = target - if(movement_cooldown_override) - movement_cooldown = movement_cooldown_override - if(obliteration_cooldown_override) - obliteration_cooldown = obliteration_cooldown_override - if(obliteration_range_fire_override) - obliteration_range_fire = obliteration_range_fire_override - if(obliteration_range_flatten_override) - obliteration_range_flatten = obliteration_range_flatten_override - - START_PROCESSING(SSfastprocess, src) - update_appearance() - if(scale_x || scale_y) - var/matrix/our_matrix = matrix() - our_matrix.Scale(scale_x, scale_y) - transform = our_matrix - notify_ghosts("An ICARUS sunbeam has been launched! [target_atom ? "Towards: [target_atom.name]" : ""]", source = src, action = NOTIFY_ORBIT, header = "Somethings burning!") - soundloop = new(src, TRUE) - -/obj/effect/sunbeam/Destroy(force) - QDEL_NULL(soundloop) - return ..() - -/obj/effect/sunbeam/update_overlays() - . = ..() - for(var/i in 1 to SUNBEAM_OVERLAYS) - var/mutable_appearance/beam_overlay = mutable_appearance(icon, "sunray") - beam_overlay.pixel_y = beam_offset_y * i - . += beam_overlay - -/obj/effect/sunbeam/process(seconds_per_tick) - if(target_atom && COOLDOWN_FINISHED(src, movement_delay)) - step_towards(src, target_atom) - COOLDOWN_START(src, movement_delay, movement_cooldown) - - if(COOLDOWN_FINISHED(src, oblirerate_cooldown)) - obliterate() - - if(get_turf(src) == get_turf(target_atom)) - qdel(src) - -/obj/effect/sunbeam/proc/obliterate() - if(obliteration_range_fire) - for(var/turf/open/turf_to_incinerate in circle_range(src, obliteration_range_fire)) - turf_to_incinerate.hotspot_expose(5500) - new /obj/effect/hotspot(turf_to_incinerate) - - if(obliteration_range_flatten) - for(var/atom/atom_to_obliterate in circle_range(src, obliteration_range_flatten)) - if(isclosedturf(atom_to_obliterate)) - SSexplosions.highturf += atom_to_obliterate - continue - - if(isfloorturf(atom_to_obliterate)) - var/turf/open/floor/open_turf = atom_to_obliterate - if(open_turf.turf_flags & CAN_DECAY_BREAK_1) - open_turf.break_tile_to_plating() - - if(isobj(atom_to_obliterate)) - var/obj/object_to_obliterate = atom_to_obliterate - object_to_obliterate.take_damage(INFINITY, BRUTE, NONE, TRUE, dir, INFINITY) - continue - - if(isliving(atom_to_obliterate)) - var/mob/living/mob_to_obliterate = atom_to_obliterate - mob_to_obliterate.apply_damage(200, BURN) - continue - - COOLDOWN_START(src, oblirerate_cooldown, obliteration_cooldown) - -/datum/looping_sound/sunbeam - mid_sounds = list('modular_skyrat/modules/assault_operatives/sound/sunbeam_loop.ogg' = 1) - mid_length = 6.7 SECONDS - volume = 100 - extra_range = 25 - -/client/proc/spawn_sunbeam() - set category = "Admin.Fun" - set name = "Spawn Sunbeam" - set desc = "Spawns an ICARUS sunbeam at your location and sends it towards a target." - - var/mob/living/target_mob = tgui_input_list(usr, "Select a mob", "Mob", GLOB.mob_living_list) - - if(!target_mob) - return - - var/edit_ranges = tgui_alert(usr, "Change beam specifications?", "Beam Specifications", list("Yes", "No")) - - if(edit_ranges == "Yes") - var/edit_range_fire = tgui_input_number(usr, "Fire range in tiles", "Fire Range", SUNBEAM_OBLITERATION_RANGE_FIRE, 20, 0) - var/edit_range_flatten = tgui_input_number(usr, "Flatten range in tiles", "Flatten Range", SUNBEAM_OBLITERATION_RANGE_FLATTEN, 20, 0) - var/edit_cooldown = tgui_input_number(usr, "Cooldown in seconds", "Cooldown", SUNBEAM_OBLITERATION_COOLDOWN, 20, 0) - var/edit_movement_cooldown = tgui_input_number(usr, "Movement cooldown in seconds", "Movement Cooldown", SUNBEAM_MOVEMENT_COOLDOWN, 20, 0) - var/edit_scale_x = tgui_input_number(usr, "Scale X", "Scale X", SUNBEAM_DEFAULT_SCALE_X, 20, 0) - var/edit_scale_y = tgui_input_number(usr, "Scale Y", "Scale Y", SUNBEAM_DEFAULT_SCALE_Y, 20, 0) - - new /obj/effect/sunbeam(usr, target_mob, edit_movement_cooldown, edit_cooldown, edit_range_fire, edit_range_flatten, edit_scale_x, edit_scale_y) - return - - new /obj/effect/sunbeam(usr, target_mob) - - -/datum/round_event_control/icarus_sunbeam - name = "ICARUS Weapons System Ignition" - typepath = /datum/round_event/icarus_sunbeam - max_occurrences = 0 - weight = 0 - category = EVENT_CATEGORY_SPACE - description = "Forces the ICARUS weapons system to fire a sunbeam at a random location. Causing massive devistation to the station." - -/datum/round_event/icarus_sunbeam - announce_when = 1 // Instant announcement - -/datum/round_event/icarus_sunbeam/announce(fake) - priority_announce("/// ICARUS SUNBEAM WEAPONS SYSTEM ACTIVATED, USE EXTREME CAUTION! ///", "GoldenEye Defence Network", ANNOUNCER_KLAXON) - alert_sound_to_playing('modular_skyrat/modules/assault_operatives/sound/sunbeam_fire.ogg') - -/datum/round_event/icarus_sunbeam/start() - var/startside = pick(GLOB.cardinals) - var/turf/end_turf = get_edge_target_turf(get_safe_random_station_turf(), turn(startside, 180)) - var/turf/start_turf = spaceDebrisStartLoc(startside, end_turf.z) - new /obj/effect/sunbeam(start_turf, end_turf) - -#undef SUNBEAM_OBLITERATION_RANGE_FIRE -#undef SUNBEAM_OBLITERATION_RANGE_FLATTEN -#undef SUNBEAM_OBLITERATION_COOLDOWN -#undef SUNBEAM_MOVEMENT_COOLDOWN -#undef SUNBEAM_DEFAULT_SCALE_X -#undef SUNBEAM_DEFAULT_SCALE_Y diff --git a/modular_skyrat/modules/assault_operatives/code/turrets.dm b/modular_skyrat/modules/assault_operatives/code/turrets.dm deleted file mode 100644 index 1a4ef8975ca9a4..00000000000000 --- a/modular_skyrat/modules/assault_operatives/code/turrets.dm +++ /dev/null @@ -1,40 +0,0 @@ -//TURRETS - -/obj/machinery/porta_turret/syndicate/assaultops - use_power = IDLE_POWER_USE - req_access = list(ACCESS_SYNDICATE) - faction = list(ROLE_SYNDICATE) - mode = 0 - max_integrity = 200 - -//Exterior ship turrets -/obj/machinery/porta_turret/syndicate/assaultops/shuttle - scan_range = 9 - lethal_projectile = /obj/projectile/bullet/a357 - lethal_projectile_sound = 'modular_skyrat/modules/aesthetics/guns/sound/sniperrifle.ogg' - stun_projectile = /obj/projectile/energy/electrode - stun_projectile_sound = 'sound/weapons/taser.ogg' - max_integrity = 600 - armor_type = /datum/armor/assaultops_shuttle - -//Internal ship and base turrets - -/datum/armor/assaultops_shuttle - melee = 50 - bullet = 30 - laser = 30 - energy = 30 - bomb = 80 - fire = 90 - acid = 90 - -/obj/machinery/porta_turret/syndicate/assaultops/internal - always_up = FALSE - has_cover = TRUE - desc = "An energy blaster auto-turret." - icon_state = "standard_stun" - base_icon_state = "standard" - stun_projectile = /obj/projectile/energy/electrode - stun_projectile_sound = 'sound/weapons/taser.ogg' - lethal_projectile = /obj/projectile/beam/laser/heavylaser - lethal_projectile_sound = 'sound/weapons/lasercannonfire.ogg' diff --git a/modular_skyrat/modules/assault_operatives/code/vending_machine.dm b/modular_skyrat/modules/assault_operatives/code/vending_machine.dm deleted file mode 100644 index fc7995f97d84dd..00000000000000 --- a/modular_skyrat/modules/assault_operatives/code/vending_machine.dm +++ /dev/null @@ -1,75 +0,0 @@ -//VENDING MACHINES -/obj/machinery/vending/assaultops_ammo - name = "\improper Syndicate Ammo Station" - desc = "An ammo vending machine which holds a variety of different ammo mags." - icon_state = "liberationstation" - vend_reply = "Item dispensed." - scan_id = FALSE - resistance_flags = FIRE_PROOF - onstation = FALSE - light_mask = "liberation-light-mask" - default_price = 0 - /// Have we been FILLED? - var/filled = FALSE - -/obj/machinery/vending/assaultops_ammo/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - fill_ammo(user) - ui = new(user, src, "Vending") - ui.open() - -/obj/machinery/vending/assaultops_ammo/proc/fill_ammo(mob/user) - if(last_shopper == user && filled) - return - else - filled = FALSE - - if(!ishuman(user)) - return FALSE - - if(!user.mind.has_antag_datum(/datum/antagonist/assault_operative)) - return FALSE - - //Remove all current items from the vending machine - products.Cut() - product_records.Cut() - - var/mob/living/carbon/human/human_user = user - - //Find all the ammo we should display - for(var/object in human_user.contents) - if(istype(object, /obj/item/gun/ballistic)) - var/obj/item/gun/ballistic/gun = object - if(!gun.internal_magazine) - products.Add(gun.spawn_magazine_type) - if(istype(object, /obj/item/storage)) - var/obj/item/storage/storage = object - for(var/storage_item in storage.contents) - if(istype(storage_item, /obj/item/gun/ballistic)) - var/obj/item/gun/ballistic/gun = storage_item - if(!gun.internal_magazine) - products.Add(gun.spawn_magazine_type) - - //Add our items to the list of products - build_inventory(products, product_records, FALSE) - - filled = TRUE - -/obj/machinery/vending/assaultops_ammo/build_inventory(list/productlist, list/recordlist, start_empty = FALSE) - default_price = 0 - extra_price = 0 - for(var/typepath in productlist) - var/amount = 4 - var/atom/temp = typepath - var/datum/data/vending_product/vending_product = new /datum/data/vending_product() - - vending_product.name = initial(temp.name) - vending_product.product_path = typepath - if(!start_empty) - vending_product.amount = amount - vending_product.max_amount = amount - vending_product.custom_price = 0 - vending_product.custom_premium_price = 0 - vending_product.age_restricted = FALSE - recordlist += vending_product diff --git a/modular_skyrat/modules/assault_operatives/icons/alarm.dmi b/modular_skyrat/modules/assault_operatives/icons/alarm.dmi deleted file mode 100644 index 3418da08b755c8..00000000000000 Binary files a/modular_skyrat/modules/assault_operatives/icons/alarm.dmi and /dev/null differ diff --git a/modular_skyrat/modules/assault_operatives/icons/goldeneye.dmi b/modular_skyrat/modules/assault_operatives/icons/goldeneye.dmi deleted file mode 100644 index e898f55e2da493..00000000000000 Binary files a/modular_skyrat/modules/assault_operatives/icons/goldeneye.dmi and /dev/null differ diff --git a/modular_skyrat/modules/assault_operatives/icons/guns/guns.dmi b/modular_skyrat/modules/assault_operatives/icons/guns/guns.dmi deleted file mode 100644 index 71eb34ac70bc14..00000000000000 Binary files a/modular_skyrat/modules/assault_operatives/icons/guns/guns.dmi and /dev/null differ diff --git a/modular_skyrat/modules/assault_operatives/icons/guns/guns_lefthand.dmi b/modular_skyrat/modules/assault_operatives/icons/guns/guns_lefthand.dmi deleted file mode 100644 index 60b40290e55360..00000000000000 Binary files a/modular_skyrat/modules/assault_operatives/icons/guns/guns_lefthand.dmi and /dev/null differ diff --git a/modular_skyrat/modules/assault_operatives/icons/guns/guns_righthand.dmi b/modular_skyrat/modules/assault_operatives/icons/guns/guns_righthand.dmi deleted file mode 100644 index b2d90c8be8a0cf..00000000000000 Binary files a/modular_skyrat/modules/assault_operatives/icons/guns/guns_righthand.dmi and /dev/null differ diff --git a/modular_skyrat/modules/assault_operatives/icons/guns/guns_worn.dmi b/modular_skyrat/modules/assault_operatives/icons/guns/guns_worn.dmi deleted file mode 100644 index 1ad32551ac9059..00000000000000 Binary files a/modular_skyrat/modules/assault_operatives/icons/guns/guns_worn.dmi and /dev/null differ diff --git a/modular_skyrat/modules/assault_operatives/icons/guns/magazines.dmi b/modular_skyrat/modules/assault_operatives/icons/guns/magazines.dmi deleted file mode 100644 index bde51130832a3d..00000000000000 Binary files a/modular_skyrat/modules/assault_operatives/icons/guns/magazines.dmi and /dev/null differ diff --git a/modular_skyrat/modules/assault_operatives/icons/modsuits/mod.dmi b/modular_skyrat/modules/assault_operatives/icons/modsuits/mod.dmi deleted file mode 100644 index d970133b38900c..00000000000000 Binary files a/modular_skyrat/modules/assault_operatives/icons/modsuits/mod.dmi and /dev/null differ diff --git a/modular_skyrat/modules/assault_operatives/icons/modsuits/wornmod.dmi b/modular_skyrat/modules/assault_operatives/icons/modsuits/wornmod.dmi deleted file mode 100644 index e9de1d77f1f73d..00000000000000 Binary files a/modular_skyrat/modules/assault_operatives/icons/modsuits/wornmod.dmi and /dev/null differ diff --git a/modular_skyrat/modules/assault_operatives/icons/radial.dmi b/modular_skyrat/modules/assault_operatives/icons/radial.dmi deleted file mode 100644 index 3a8cb14d7fe615..00000000000000 Binary files a/modular_skyrat/modules/assault_operatives/icons/radial.dmi and /dev/null differ diff --git a/modular_skyrat/modules/assault_operatives/icons/sunbeam.dmi b/modular_skyrat/modules/assault_operatives/icons/sunbeam.dmi deleted file mode 100644 index 7c490c5e6283f5..00000000000000 Binary files a/modular_skyrat/modules/assault_operatives/icons/sunbeam.dmi and /dev/null differ diff --git a/modular_skyrat/modules/assault_operatives/sound/assault_operatives_greet.ogg b/modular_skyrat/modules/assault_operatives/sound/assault_operatives_greet.ogg deleted file mode 100644 index 020d21bb4e653a..00000000000000 Binary files a/modular_skyrat/modules/assault_operatives/sound/assault_operatives_greet.ogg and /dev/null differ diff --git a/modular_skyrat/modules/assault_operatives/sound/goldeneyealarm.ogg b/modular_skyrat/modules/assault_operatives/sound/goldeneyealarm.ogg deleted file mode 100644 index 4e195d77b4b6f4..00000000000000 Binary files a/modular_skyrat/modules/assault_operatives/sound/goldeneyealarm.ogg and /dev/null differ diff --git a/modular_skyrat/modules/assault_operatives/sound/icarus_alarm.ogg b/modular_skyrat/modules/assault_operatives/sound/icarus_alarm.ogg deleted file mode 100644 index c5d4bf1e23d0ae..00000000000000 Binary files a/modular_skyrat/modules/assault_operatives/sound/icarus_alarm.ogg and /dev/null differ diff --git a/modular_skyrat/modules/assault_operatives/sound/sunbeam_fire.ogg b/modular_skyrat/modules/assault_operatives/sound/sunbeam_fire.ogg deleted file mode 100644 index b18783263d544a..00000000000000 Binary files a/modular_skyrat/modules/assault_operatives/sound/sunbeam_fire.ogg and /dev/null differ diff --git a/modular_skyrat/modules/assault_operatives/sound/sunbeam_loop.ogg b/modular_skyrat/modules/assault_operatives/sound/sunbeam_loop.ogg deleted file mode 100644 index 7f2f020e02c13d..00000000000000 Binary files a/modular_skyrat/modules/assault_operatives/sound/sunbeam_loop.ogg and /dev/null differ diff --git a/modular_skyrat/modules/awaymissions_skyrat/code/gateway_key.dm b/modular_skyrat/modules/awaymissions_skyrat/code/gateway_key.dm deleted file mode 100644 index f2d07a64429a0b..00000000000000 --- a/modular_skyrat/modules/awaymissions_skyrat/code/gateway_key.dm +++ /dev/null @@ -1,8 +0,0 @@ -/obj/item/key/gateway - name = "global recall key" - desc = "Recall to the Global Gateway." - icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/abductorkey.dmi' - icon_state = "gateway_key" - resistance_flags = INDESTRUCTIBLE - - diff --git a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/gear.dm b/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/gear.dm deleted file mode 100644 index 114f718baf39f2..00000000000000 --- a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/gear.dm +++ /dev/null @@ -1,68 +0,0 @@ -/** - * Weaponry - */ - -/obj/item/gun/energy/alien/zeta - name = "Zeta Blaster" - desc = "Having this too close to your face makes you start to taste blood, is this safe?" - icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/alienblaster.dmi' - lefthand_file = 'modular_skyrat/modules/awaymissions_skyrat/icons/alienhand.dmi' - righthand_file = 'modular_skyrat/modules/awaymissions_skyrat/icons/alienhand2.dmi' - icon_state = "alienblaster" - inhand_icon_state = "alienblaster" - pin = /obj/item/firing_pin - selfcharge = TRUE - -/obj/item/gun/energy/alien/astrum - name = "alien energy pistol" - desc = "A seemingly complicated gun, that isn't so complicated after all." - ammo_type = list(/obj/item/ammo_casing/energy/laser) - pin = /obj/item/firing_pin - icon_state = "alienpistol" - inhand_icon_state = "alienpistol" - cell_type = /obj/item/stock_parts/cell/pulse/pistol - - -/** - * Armour - */ - -/obj/item/clothing/suit/armor/abductor/astrum - name = "agent vest" - desc = "You feel like you're wearing the suit wrong, and you have no idea how to operate its systems." - icon = 'icons/obj/antags/abductor.dmi' - icon_state = "vest_combat" - inhand_icon_state = "armor" - blood_overlay_type = "armor" - armor_type = /datum/armor/abductor_astrum - resistance_flags = FIRE_PROOF | ACID_PROOF - allowed = null // populated on init with armour vest defaults - -/datum/armor/abductor_astrum - melee = 40 - bullet = 50 - laser = 50 - energy = 50 - bomb = 20 - bio = 50 - fire = 90 - acid = 90 - -/obj/item/clothing/head/helmet/astrum - name = "agent headgear" - desc = "An exceptionally robust helmet. For alien standards, that is." - icon_state = "alienhelmet" - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - armor_type = /datum/armor/helmet_astrum - resistance_flags = FIRE_PROOF | ACID_PROOF - -/datum/armor/helmet_astrum - melee = 40 - bullet = 30 - laser = 30 - energy = 40 - bomb = 50 - bio = 90 - fire = 100 - acid = 100 - wound = 15 diff --git a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/mob.dm b/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/mob.dm deleted file mode 100644 index e2fd442e1de2dd..00000000000000 --- a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/mob.dm +++ /dev/null @@ -1,139 +0,0 @@ -/* -* MELEE -*/ - -/mob/living/basic/abductor - name = "abductor scientist" - desc = "From the depths of space." - icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/abductors.dmi' - icon_state = "abductor_scientist" - icon_living = "abductor_scientist" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - sentience_type = SENTIENCE_HUMANOID - faction = list(ROLE_ABDUCTOR) - - maxHealth = 120 - health = 120 - unsuitable_atmos_damage = 7.5 - basic_mob_flags = DEL_ON_DEATH - - melee_damage_lower = 10 - melee_damage_upper = 10 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' - - combat_mode = TRUE - status_flags = CANPUSH - speed = 2 - - ai_controller = /datum/ai_controller/basic_controller/abductor - - /// What this mob drops on death - var/list/loot = list(/obj/effect/gibspawner/generic, /obj/effect/spawner/random/astrum/sci_loot) - -/mob/living/basic/abductor/Initialize(mapload) - . = ..() - if(LAZYLEN(loot)) - loot = string_list(loot) - AddElement(/datum/element/death_drops, loot) - AddElement(/datum/element/footstep, FOOTSTEP_MOB_SHOE) - - -// More damaging variant -/mob/living/basic/abductor/melee - icon_state = "abductor_scientist_melee" - icon_living = "abductor_scientist_melee" - status_flags = null - - melee_damage_lower = 10 - melee_damage_upper = 20 - attack_verb_continuous = "slashes" - attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bladeslice.ogg' - attack_vis_effect = ATTACK_EFFECT_SLASH - - -// Tankier, more damaging variant -/mob/living/basic/abductor/agent - name = "abductor agent" - icon_state = "abductor_agent" - icon_living = "abductor_agent" - - health = 160 - maxHealth = 160 - loot = list(/obj/effect/gibspawner/generic, /obj/effect/spawner/random/astrum/agent_loot) - - melee_damage_lower = 15 - melee_damage_upper = 22 - - -/* -* RANGED -*/ - -/mob/living/basic/abductor/ranged - name = "abductor scientist" - icon_state = "abductor_scientist_gun" - icon_living = "abductor_scientist_gun" - - maxHealth = 120 - health = 120 - loot = list(/obj/effect/gibspawner/generic, /obj/effect/spawner/random/astrum/sci_loot) - - ai_controller = /datum/ai_controller/basic_controller/abductor/ranged - -/mob/living/basic/abductor/ranged/Initialize(mapload) - . = ..() - AddComponent(/datum/component/ranged_attacks, projectile_sound = 'sound/weapons/laser.ogg', projectile_type = /obj/projectile/beam/laser) - - -// Tankier variant -/mob/living/basic/abductor/ranged/agent - name = "abductor combat specialist" - icon_state = "abductor_agent_combat_gun" - icon_living = "abductor_agent_combat_gun" - - maxHealth = 140 - health = 140 - loot = list(/obj/effect/gibspawner/generic, /obj/effect/spawner/random/astrum/agent_loot) - - -/** - * BOSS - */ - -/mob/living/simple_animal/hostile/megafauna/hierophant/astrum - name = "abductor captain" - desc = "The one you've come here for. Finish this." - icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/abductors.dmi' - icon_state = "abductor_agent_combat" - icon_living = "abductor_agent_combat" - icon_gib = "syndicate_gib" - gps_name = "Captain's Signal" - mouse_opacity = MOUSE_OPACITY_ICON - - health = 1750 - maxHealth = 1750 - health_doll_icon = "pandora" - death_message = "falls to their knees before exploding into a ball of gore." - - attack_verb_continuous = "attacks" - attack_verb_simple = "attack" - -/mob/living/simple_animal/hostile/megafauna/hierophant/astrum/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit = FALSE) - . = ..() - if(. != BULLET_ACT_HIT) - return - - if(!hitting_projectile.is_hostile_projectile()) - return - - apply_damage(hitting_projectile.damage, hitting_projectile.damage_type) // no damage reduction - -/mob/living/simple_animal/hostile/megafauna/hierophant/astrum/death(gibbed) - spawn_gibs() - spawn_gibs() - new /obj/item/key/gateway(get_turf(src)) - new /obj/item/gun/energy/alien/zeta(get_turf(src)) - qdel(src) diff --git a/modular_skyrat/modules/barsigns/code/barsigns.dm b/modular_skyrat/modules/barsigns/code/barsigns.dm deleted file mode 100644 index 4e10e4fe5510f2..00000000000000 --- a/modular_skyrat/modules/barsigns/code/barsigns.dm +++ /dev/null @@ -1,227 +0,0 @@ -/datum/barsign/topmen - name = "Top Men" - icon = "topmen" - -/datum/barsign/spaceballgrille - name = "Spaceball Grille" - icon = "spaceballgrille" - -/datum/barsign/clubee - name = "Club Bee" - icon = "clubee" - -/datum/barsign/thesun - name = "The Sun" - icon = "thesun" - -/datum/barsign/limbo - name = "The Limbo" - icon = "limbo" - desc = "A popular haunt for lost souls. The mood lighting is killer!" - -/datum/barsign/meadbay - name = "Meadbay" - icon = "meadbay" - -/datum/barsign/cindikate - name = "Cindi Kate's" - icon = "cindikate" - -/datum/barsign/theclownshead - name = "The Clown's Head" - icon = "theclownshead" - desc = "Home of Headdy, the honking clown head!" - -/datum/barsign/theorchard - name = "The Orchard" - icon = "theorchard" - -/datum/barsign/thesaucyclown - name = "The Saucy Clown" - icon = "thesaucyclown" - desc = "A known gathering site for the annual clown courtship rituals." - -/datum/barsign/thedamnwall - name = "The Damn Wall" - icon = "thedamnwall" - desc = "When you're up against a wall, it's best to have stout friends and stout liquor right there beside you." - -/datum/barsign/whiskeyimplant - name = "Whiskey Implant" - icon = "whiskeyimplant" - -/datum/barsign/carpecarp - name = "Carpe Carp" - icon = "carpecarp" - -/datum/barsign/robustroadhouse - name = "Robust Roadhouse" - icon = "robustroadhouse" - -/datum/barsign/theredshirt - name = "The Redshirt" - icon = "theredshirt" - -/datum/barsign/maltesefalconmk2 - name = "Maltese Falcon MK2" - icon = "maltesefalconmk2" - desc = "The Maltese Falcon mark two, now extra hard boiled." - -/datum/barsign/thecavernmk2 - name = "The Cavern MK2" - icon = "thecavernmk2" - desc = "Fine drinks while listening to some fine tunes." - -/datum/barsign/lv426 - name = "LV-426" - icon = "lv426" - desc = "Drinking with fancy facemasks is clearly more important than going to medbay." - -/datum/barsign/zocalo - name = "Zocalo" - icon = "zocalo" - desc = "Anteriormente ubicado en Spessmerica." - -/datum/barsign/fourtheemprah - name = "4 The Emprah" - icon = "4theemprah" - desc = "Enjoyed by fanatics, heretics, and brain-damaged patrons alike." - -/datum/barsign/ishimura - name = "Ishimura" - icon = "ishimura" - desc = "Well known for their quality brownstar and delicious crackers." - -/datum/barsign/tardis - name = "Tardis" - icon = "tardis" - desc = "This establishment has been through at least 5,343 iterations." - -/datum/barsign/quarks - name = "Quark's" - icon = "quarks" - desc = "Frequenters of this establishment are often seen wearing meson scanners; how quaint." - -/datum/barsign/tenforward - name = "Ten Forward" - icon = "tenforward" - -/datum/barsign/thepranicngpony - name = "The Prancing Pony" - icon = "thepranicngpony" - desc = "Ok, we don't take to kindly to you short folk pokin' round looking for some ranger scum." - -/datum/barsign/vault13 - name = "Vault 13" - icon = "vault13" - desc = "Coincidence is intentional." - -/datum/barsign/thehive - name = "The Hive" - icon = "thehive" - -/datum/barsign/cantina - name = "Chalmun's Cantina" - icon = "cantina" - desc = "The bar was founded on the principles of originality; they have the same music playing 24/7." - -/datum/barsign/milliways42 - name = "Milliways 42" - icon = "milliways42" - desc = "It's not really the end; it's the beginning, meaning, and answer for all your beverage needs." - -/datum/barsign/timeofeve - name = "The Time of Eve" - icon = "thetimeofeve" - desc = "Vintage drinks from 2453!." - -/datum/barsign/spaceasshole - name = "Space Asshole" - icon = "spaceasshole" - desc = "Open since 2125, Not much has changed since then; the engineers still release the singulo and the damn miners still are more likely to cave your face in that deliver ores." - -/datum/barsign/birdcage - name = "The Bird Cage" - icon = "birdcage" - desc = "Caw." - -/datum/barsign/narsie - name = "Narsie Bistro" - icon = "narsiebistro" - desc = "The last pub before the World's End." - -/datum/barsign/fallout - name = "The Booze Bunker" - icon = "boozebunker" - desc = "Never duck for cover without a drink!" - -/datum/barsign/brokendreams - name = "The Cafe of Broken Dreams" - icon = "brokendreams" - desc = "Try our new dogmeat sliders!" - -/datum/barsign/toolboxtavern - name = "Toolbox Tavern" - icon = "toolboxtavern" - desc = "Free lodging with every Screwdriver purchased!" - -/datum/barsign/blueoyster - name = "The Blue Oyster" - icon = "blueoyster" - desc = "The totally heterosexual bar for totally heterosexual men, just come inside and see." - -/datum/barsign/foreign - name = "Foreign Food Sign" - icon = "foreign" - desc = "A sign written in some dead language advertising some non-descript foreign food." - -/datum/barsign/commie - name = "Prole's Preferred" - icon = "commie" - desc = "The only bar you will ever need, comrade!" - -/datum/barsign/brokenheros - name = "The Bar of Broken Heros" - icon = "brokenheros" - desc = "Do you enjoy hurting other people?" - -/datum/barsign/sociallubricator - name = "The Social Lubricator" - icon = "sociallubricator" - desc = "The perfect thing to make you like people you hate." - -/datum/barsign/chemlab - name = "The Chem Lab" - icon = "chemlab" - desc = "Try our new plasma martinis!" - -/datum/barsign/mime - name = "Moonshine Mime" - icon = "mime" - desc = "Silent, not stirred." - -/datum/barsign/clown - name = "Honking Clown" - icon = "clown" - desc = "Bananas not included." - -/datum/barsign/progressive - name = "A Modern and Progressive Tavern" - icon = "progressive" - desc = "Whatever that means." - -/datum/barsign/va11halla - name = "VA-11 HALL-A" - icon = "va11halla" - desc = "Not as dangerous as N1-RV Ann-A." - -/datum/barsign/squatopia - name = "Squatopia" - icon = "squatopia" - desc = "The crystal belonged to my father. He was murdered." - -/datum/barsign/bug - name = "The Hungry Bug" - icon = "hungrybug" - desc = "Stop by and enjoy some of the Hole's famous gyoza!" - diff --git a/modular_skyrat/modules/barsigns/icons/barsigns.dmi b/modular_skyrat/modules/barsigns/icons/barsigns.dmi deleted file mode 100644 index ce0330e53ef5a2..00000000000000 Binary files a/modular_skyrat/modules/barsigns/icons/barsigns.dmi and /dev/null differ diff --git a/modular_skyrat/modules/basic_mobs/code/bananaspider.dm b/modular_skyrat/modules/basic_mobs/code/bananaspider.dm deleted file mode 100644 index 6e3a7e26dcd059..00000000000000 --- a/modular_skyrat/modules/basic_mobs/code/bananaspider.dm +++ /dev/null @@ -1,65 +0,0 @@ -// Ported from Citadel Station - -/mob/living/basic/banana_spider - name = "banana spider" - desc = "What the fuck is this abomination?" - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' - icon_state = "bananaspider" - icon_dead = "bananaspider_peel" - health = 1 - maxHealth = 1 - speed = 2 - pass_flags = PASSTABLE | PASSGRILLE | PASSMOB - mob_biotypes = MOB_ORGANIC|MOB_BUG - mob_size = MOB_SIZE_TINY - density = TRUE - verb_say = "chitters" - verb_ask = "chitters inquisitively" - verb_exclaim = "chitters loudly" - verb_yell = "chitters loudly" - basic_mob_flags = DEL_ON_DEATH - ai_controller = /datum/ai_controller/basic_controller/cockroach/banana_spider - -/mob/living/basic/banana_spider/Initialize(mapload) - . = ..() - AddComponent(/datum/component/slippery, 40) - var/static/list/banana_drops = list(/obj/item/food/deadbanana_spider) - AddElement(/datum/element/death_drops, banana_drops) - AddElement(/datum/element/basic_body_temp_sensitive, 270, INFINITY) - AddComponent(/datum/component/squashable, squash_chance = 50, squash_damage = 1) - -/datum/ai_controller/basic_controller/cockroach/banana_spider - idle_behavior = /datum/idle_behavior/idle_random_walk/banana_spider - -/datum/idle_behavior/idle_random_walk/banana_spider - walk_chance = 10 - -/obj/item/food/deadbanana_spider - name = "dead banana spider" - desc = "Thank god it's gone...but it does look slippery." - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' - icon_state = "bananaspider_peel" - food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 2) - foodtypes = GORE | MEAT | RAW - grind_results = list(/datum/reagent/blood = 20, /datum/reagent/consumable/liquidgibs = 5) - juice_typepath = /datum/reagent/consumable/banana - - -/obj/item/food/deadbanana_spider/Initialize(mapload) - . = ..() - AddComponent(/datum/component/slippery, 20) - -/mob/living/basic/spider/giant/badnana_spider - name = "badnana spider" - desc = "WHY WOULD GOD ALLOW THIS?!" - icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' - icon_state = "badnanaspider" // created by Coldstorm on the Skyrat Discord - icon_living = "badnanaspider" - icon_dead = "badnanaspider_d" - maxHealth = 40 - health = 40 - melee_damage_lower = 5 - melee_damage_upper = 5 - speed = -0.5 - faction = list(FACTION_SPIDER) - diff --git a/modular_skyrat/modules/better_vox/code/vox_bodyparts.dm b/modular_skyrat/modules/better_vox/code/vox_bodyparts.dm deleted file mode 100644 index f48f70e1b1fa6e..00000000000000 --- a/modular_skyrat/modules/better_vox/code/vox_bodyparts.dm +++ /dev/null @@ -1,57 +0,0 @@ -// voxs! -/obj/item/bodypart/head/mutant/vox_primalis - icon_static = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' - icon_greyscale = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' - icon = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' - icon_state = "vox_primalis_head" - bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM | BODYTYPE_SNOUTED - is_dimorphic = FALSE - should_draw_greyscale = FALSE - limb_id = SPECIES_VOX_PRIMALIS - -/obj/item/bodypart/chest/mutant/vox_primalis - icon_static = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' - icon_greyscale = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' - icon = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' - icon_state = "vox_primalis_chest" - bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM - is_dimorphic = FALSE - should_draw_greyscale = FALSE - limb_id = SPECIES_VOX_PRIMALIS - -/obj/item/bodypart/arm/left/mutant/vox_primalis - icon_static = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' - icon_greyscale = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' - icon = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' - icon_state = "vox_primalis_l_arm" - bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM - should_draw_greyscale = FALSE - limb_id = SPECIES_VOX_PRIMALIS - -/obj/item/bodypart/arm/right/mutant/vox_primalis - icon_static = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' - icon_greyscale = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' - icon = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' - icon_state = "vox_primalis_r_arm" - bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM - should_draw_greyscale = FALSE - limb_id = SPECIES_VOX_PRIMALIS - -/obj/item/bodypart/leg/left/mutant/vox_primalis - icon_static = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' - icon_greyscale = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' - icon = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' - icon_state = "vox_primalis_l_leg" - bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM - should_draw_greyscale = FALSE - limb_id = SPECIES_VOX_PRIMALIS - -/obj/item/bodypart/leg/right/mutant/vox_primalis - icon_static = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' - icon_greyscale = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' - icon = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi' - icon_state = "vox_primalis_r_leg" - bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM - should_draw_greyscale = FALSE - limb_id = SPECIES_VOX_PRIMALIS - diff --git a/modular_skyrat/modules/better_vox/icons/clothing/back.dmi b/modular_skyrat/modules/better_vox/icons/clothing/back.dmi deleted file mode 100644 index 58b25444b2d481..00000000000000 Binary files a/modular_skyrat/modules/better_vox/icons/clothing/back.dmi and /dev/null differ diff --git a/modular_skyrat/modules/better_vox/icons/clothing/belt.dmi b/modular_skyrat/modules/better_vox/icons/clothing/belt.dmi deleted file mode 100644 index b8ef83345d25ac..00000000000000 Binary files a/modular_skyrat/modules/better_vox/icons/clothing/belt.dmi and /dev/null differ diff --git a/modular_skyrat/modules/better_vox/icons/clothing/eyes.dmi b/modular_skyrat/modules/better_vox/icons/clothing/eyes.dmi deleted file mode 100644 index 6892b304eedebb..00000000000000 Binary files a/modular_skyrat/modules/better_vox/icons/clothing/eyes.dmi and /dev/null differ diff --git a/modular_skyrat/modules/better_vox/icons/clothing/head.dmi b/modular_skyrat/modules/better_vox/icons/clothing/head.dmi deleted file mode 100644 index 6f1f5fb4618ffe..00000000000000 Binary files a/modular_skyrat/modules/better_vox/icons/clothing/head.dmi and /dev/null differ diff --git a/modular_skyrat/modules/better_vox/icons/clothing/helmet.dmi b/modular_skyrat/modules/better_vox/icons/clothing/helmet.dmi deleted file mode 100644 index f4d7beca5915cd..00000000000000 Binary files a/modular_skyrat/modules/better_vox/icons/clothing/helmet.dmi and /dev/null differ diff --git a/modular_skyrat/modules/better_vox/icons/clothing/mask.dmi b/modular_skyrat/modules/better_vox/icons/clothing/mask.dmi deleted file mode 100644 index cc76f904848750..00000000000000 Binary files a/modular_skyrat/modules/better_vox/icons/clothing/mask.dmi and /dev/null differ diff --git a/modular_skyrat/modules/better_vox/icons/clothing/mod.dmi b/modular_skyrat/modules/better_vox/icons/clothing/mod.dmi deleted file mode 100644 index b1c272b0ccdd33..00000000000000 Binary files a/modular_skyrat/modules/better_vox/icons/clothing/mod.dmi and /dev/null differ diff --git a/modular_skyrat/modules/better_vox/icons/clothing/suit.dmi b/modular_skyrat/modules/better_vox/icons/clothing/suit.dmi deleted file mode 100644 index adfd1c200c55cd..00000000000000 Binary files a/modular_skyrat/modules/better_vox/icons/clothing/suit.dmi and /dev/null differ diff --git a/modular_skyrat/modules/better_vox/icons/clothing/uniform.dmi b/modular_skyrat/modules/better_vox/icons/clothing/uniform.dmi deleted file mode 100644 index 7b7ae9a2af5934..00000000000000 Binary files a/modular_skyrat/modules/better_vox/icons/clothing/uniform.dmi and /dev/null differ diff --git a/modular_skyrat/modules/black_mesa/code/armaments/_armament_primary.dm b/modular_skyrat/modules/black_mesa/code/armaments/_armament_primary.dm deleted file mode 100644 index 80462185a0e0ea..00000000000000 --- a/modular_skyrat/modules/black_mesa/code/armaments/_armament_primary.dm +++ /dev/null @@ -1,82 +0,0 @@ -/datum/armament_entry/hecu/primary - category = ARMAMENT_CATEGORY_PRIMARY - category_item_limit = 4 - slot_to_equip = ITEM_SLOT_SUITSTORE - cost = 10 - -/datum/armament_entry/hecu/primary/submachinegun - subcategory = ARMAMENT_SUBCATEGORY_SUBMACHINEGUN - mags_to_spawn = 4 - -/datum/armament_entry/hecu/primary/submachinegun/p90 - item_type = /obj/item/gun/ballistic/automatic/p90 - max_purchase = 4 - cost = 7 - -/datum/armament_entry/hecu/primary/submachinegun/mp5 - item_type = /obj/item/gun/ballistic/automatic/mp5 - max_purchase = 2 - cost = 8 - -/datum/armament_entry/hecu/primary/assaultrifle - subcategory = ARMAMENT_SUBCATEGORY_ASSAULTRIFLE - mags_to_spawn = 3 - -/datum/armament_entry/hecu/primary/assaultrifle/m16 - item_type = /obj/item/gun/ballistic/automatic/m16 - max_purchase = 1 - cost = 14 - magazine = /obj/item/ammo_box/magazine/m16 - -/datum/armament_entry/hecu/primary/assaultrifle/m16_but_horrible - item_type = /obj/item/gun/ballistic/automatic/m16/oldarms - max_purchase = 2 - cost = 11 - magazine = /obj/item/ammo_box/magazine/m16/vintage/oldarms - -/datum/armament_entry/hecu/primary/shotgun - subcategory = ARMAMENT_SUBCATEGORY_SHOTGUN - mags_to_spawn = 1 - magazine = /obj/item/storage/box/ammo_box/shotgun_12g - magazine_cost = 4 - -/datum/armament_entry/hecu/primary/shotgun/shotgun_highcap - item_type = /obj/item/gun/ballistic/shotgun/riot/sol - max_purchase = 2 - cost = 5 - -/datum/armament_entry/hecu/primary/shotgun/autoshotgun_pump - item_type = /obj/item/gun/ballistic/shotgun/automatic/as2 - max_purchase = 1 - cost = 7 - -/datum/armament_entry/hecu/primary/special - subcategory = ARMAMENT_SUBCATEGORY_SPECIAL - mags_to_spawn = 2 - -/datum/armament_entry/hecu/primary/special/sniper_rifle - item_type = /obj/item/gun/ballistic/automatic/sol_rifle/marksman - max_purchase = 1 - cost = 16 - -/datum/armament_entry/hecu/primary/special/hmg - item_type = /obj/item/mounted_machine_gun_folded - max_purchase = 1 - cost = 20 - magazine = /obj/item/ammo_box/magazine/mmg_box - mags_to_spawn = 1 - magazine_cost = 2 - -/obj/item/storage/box/ammo_box/shotgun_12g - -/obj/item/storage/box/ammo_box/shotgun_12g/PopulateContents() - var/funshell = pick(/obj/item/ammo_box/advanced/s12gauge/pt20, - /obj/item/ammo_box/advanced/s12gauge/incendiary, - /obj/item/ammo_box/advanced/s12gauge/flechette, - /obj/item/ammo_box/advanced/s12gauge/beehive, - /obj/item/ammo_box/advanced/s12gauge/iceblox, - /obj/item/ammo_box/advanced/s12gauge/rip, - ) - new /obj/item/ammo_box/advanced/s12gauge/magnum(src) - new /obj/item/ammo_box/advanced/s12gauge(src) - new funshell(src) diff --git a/modular_skyrat/modules/black_mesa/code/armaments/armament_medical.dm b/modular_skyrat/modules/black_mesa/code/armaments/armament_medical.dm deleted file mode 100644 index 7a20c0dc9b60ec..00000000000000 --- a/modular_skyrat/modules/black_mesa/code/armaments/armament_medical.dm +++ /dev/null @@ -1,79 +0,0 @@ -/datum/armament_entry/hecu/medical - category = ARMAMENT_CATEGORY_MEDICAL - category_item_limit = 20 - -/datum/armament_entry/hecu/medical/defib - item_type = /obj/item/defibrillator/loaded - max_purchase = 1 - cost = 4 - -/datum/armament_entry/hecu/medical/medkit - subcategory = ARMAMENT_SUBCATEGORY_MEDKIT - -/datum/armament_entry/hecu/medical/medkit/basic - item_type = /obj/item/storage/medkit/regular - max_purchase = 3 - cost = 3 - -/datum/armament_entry/hecu/medical/medkit/brute - item_type = /obj/item/storage/medkit/brute - max_purchase = 2 - cost = 3 - -/datum/armament_entry/hecu/medical/medkit/toxin - item_type = /obj/item/storage/medkit/toxin - max_purchase = 1 - cost = 2 - -/datum/armament_entry/hecu/medical/medkit/fire - item_type = /obj/item/storage/medkit/fire - max_purchase = 1 - cost = 3 - -/datum/armament_entry/hecu/medical/medkit/o2 - item_type = /obj/item/storage/medkit/o2 - max_purchase = 1 - cost = 2 - -/datum/armament_entry/hecu/medical/medkit/advanced - item_type = /obj/item/storage/medkit/advanced - max_purchase = 1 - cost = 4 - -/datum/armament_entry/hecu/medical/medkit/expeditionary - item_type = /obj/item/storage/medkit/expeditionary - max_purchase = 1 - cost = 5 - -/datum/armament_entry/hecu/medical/injector - subcategory = ARMAMENT_SUBCATEGORY_INJECTOR - -/datum/armament_entry/hecu/medical/injector/bloodloss - item_type = /obj/item/reagent_containers/hypospray/medipen/blood_loss - max_purchase = 4 - cost = 1 - -/datum/armament_entry/hecu/medical/injector/atropine - item_type = /obj/item/reagent_containers/hypospray/medipen/atropine - max_purchase = 4 - cost = 1 - -/datum/armament_entry/hecu/medical/injector/salacid - item_type = /obj/item/reagent_containers/hypospray/medipen/salacid - max_purchase = 4 - cost = 1 - -/datum/armament_entry/hecu/medical/injector/oxandrolone - item_type = /obj/item/reagent_containers/hypospray/medipen/oxandrolone - max_purchase = 4 - cost = 1 - -/datum/armament_entry/hecu/medical/injector/stimulant - item_type = /obj/item/reagent_containers/hypospray/medipen/stimulants - max_purchase = 2 - cost = 4 - -/datum/armament_entry/hecu/medical/injector/bag - item_type = /obj/item/storage/pouch/medpens - max_purchase = 2 - cost = 5 diff --git a/modular_skyrat/modules/black_mesa/code/armaments/armament_utility.dm b/modular_skyrat/modules/black_mesa/code/armaments/armament_utility.dm deleted file mode 100644 index 0a7a0910cf98bb..00000000000000 --- a/modular_skyrat/modules/black_mesa/code/armaments/armament_utility.dm +++ /dev/null @@ -1,74 +0,0 @@ -#define ARMAMENT_CATEGORY_UTILITY "Utility" - -/datum/armament_entry/hecu/utility - category = ARMAMENT_CATEGORY_UTILITY - category_item_limit = 20 - -/datum/armament_entry/hecu/utility/survival_pack - item_type = /obj/item/storage/box/nri_survival_pack - max_purchase = 4 - cost = 3 - -/datum/armament_entry/hecu/utility/pouch - item_type = /obj/item/storage/pouch/ammo - max_purchase = 8 - cost = 1 - -/datum/armament_entry/hecu/utility/pouch_knives - item_type = /obj/item/storage/pouch/ammo/marksman - max_purchase = 4 - cost = 3 - -/datum/armament_entry/hecu/utility/basic_tools - item_type = /obj/item/storage/toolbox/mechanical - max_purchase = 2 - cost = 1 - -/datum/armament_entry/hecu/utility/advanced_tools - name = "Powertoolbelt" - description = "Tool belt full of power-ful tools." - item_type = /obj/item/storage/belt/utility/full/powertools - max_purchase = 1 - cost = 4 - -/datum/armament_entry/hecu/utility/light_device - item_type = /obj/item/construction/rld/mini - max_purchase = 2 - cost = 3 - -/datum/armament_entry/hecu/utility/compact_shield - item_type = /obj/item/shield/riot/tele - max_purchase = 1 - cost = 5 - -/datum/armament_entry/hecu/utility/flash_shield - item_type = /obj/item/shield/riot/flash - max_purchase = 1 - cost = 10 - -/datum/armament_entry/hecu/utility/combat_shield - item_type = /obj/item/shield/riot/pointman/hecu - max_purchase = 1 - cost = 20 - -/datum/armament_entry/hecu/utility/zipties - item_type = /obj/item/storage/box/zipties - max_purchase = 2 - cost = 1 - -/datum/armament_entry/hecu/utility/suppressor - item_type = /obj/item/suppressor - max_purchase = 4 - cost = 2 - -/datum/armament_entry/hecu/utility/bowman - item_type = /obj/item/radio/headset/headset_faction/bowman - max_purchase = 3 - cost = 4 - -/datum/armament_entry/hecu/utility/breaching_hammer //Mesa more like R6S amirite - item_type = /obj/item/melee/breaching_hammer - max_purchase = 1 - cost = 4 - -#undef ARMAMENT_CATEGORY_UTILITY diff --git a/modular_skyrat/modules/black_mesa/code/armor.dm b/modular_skyrat/modules/black_mesa/code/armor.dm deleted file mode 100644 index cfbd7afec2dc8b..00000000000000 --- a/modular_skyrat/modules/black_mesa/code/armor.dm +++ /dev/null @@ -1,75 +0,0 @@ -/obj/item/clothing/suit/armor/vest/hecu - name = "combat vest" - desc = "Vest designed to take heavy beating and probably keep the user alive in the process." - armor_type = /datum/armor/vest_hecu - icon_state = "ceramic_vest" - icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecucloth.dmi' - worn_icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob.dmi' - worn_icon_digi = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob_digi.dmi' - uses_advanced_reskins = TRUE - unique_reskin = list( - "Basic" = list( - RESKIN_ICON_STATE = "ceramic_vest", - RESKIN_WORN_ICON_STATE = "ceramic_vest" - ), - "Corpsman" = list( - RESKIN_ICON_STATE = "ceramic_vest_medic", - RESKIN_WORN_ICON_STATE = "ceramic_vest_medic" - ), - "Basic Black" = list( - RESKIN_ICON_STATE = "ceramic_vest_black", - RESKIN_WORN_ICON_STATE = "ceramic_vest_black" - ), - "Corpsman Black" = list( - RESKIN_ICON_STATE = "ceramic_vest_medic_black", - RESKIN_WORN_ICON_STATE = "ceramic_vest_medic_black" - ), - ) - -/datum/armor/vest_hecu - melee = 40 - bullet = 40 - laser = 40 - energy = 40 - bomb = 40 - fire = 80 - acid = 100 - wound = 30 - -/obj/item/clothing/head/helmet/hecu - name = "combat helmet" - desc = "Helmet designed to take heavy beating and probably keep the user alive in the process." - armor_type = /datum/armor/helmet_hecu - icon_state = "ceramic_helmet" - icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecucloth.dmi' - worn_icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob.dmi' - worn_icon_digi = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob_muzzled.dmi' - uses_advanced_reskins = TRUE - unique_reskin = list( - "Basic" = list( - RESKIN_ICON_STATE = "ceramic_helmet", - RESKIN_WORN_ICON_STATE = "ceramic_helmet" - ), - "Corpsman" = list( - RESKIN_ICON_STATE = "ceramic_helmet_medic", - RESKIN_WORN_ICON_STATE = "ceramic_helmet_medic" - ), - "Basic Black" = list( - RESKIN_ICON_STATE = "ceramic_helmet_black", - RESKIN_WORN_ICON_STATE = "ceramic_helmet_black" - ), - "Corpsman Black" = list( - RESKIN_ICON_STATE = "ceramic_helmet_medic_black", - RESKIN_WORN_ICON_STATE = "ceramic_helmet_medic_black" - ), - ) - -/datum/armor/helmet_hecu - melee = 30 - bullet = 30 - laser = 30 - energy = 30 - bomb = 30 - fire = 80 - acid = 100 - wound = 30 diff --git a/modular_skyrat/modules/black_mesa/code/guns.dm b/modular_skyrat/modules/black_mesa/code/guns.dm deleted file mode 100644 index 0cd636a574add1..00000000000000 --- a/modular_skyrat/modules/black_mesa/code/guns.dm +++ /dev/null @@ -1,79 +0,0 @@ -/obj/item/gun/ballistic/automatic/laser/marksman // Cheap replacement for a gauss rifle. - name = "designated marksman rifle" - desc = "A special laser beam sniper rifle designed by a certain now defunct research facility." - icon_state = "ctfmarksman" - inhand_icon_state = "ctfmarksman" - accepted_magazine_type = /obj/item/ammo_box/magazine/recharge/marksman - force = 15 - weapon_weight = WEAPON_HEAVY - fire_delay = 4 SECONDS - fire_sound = 'modular_skyrat/modules/sec_haul/sound/chaingun_fire.ogg' - -/obj/item/gun/ballistic/automatic/laser/marksman/Initialize(mapload) - . = ..() - AddComponent(/datum/component/scope, range_modifier = 1.5) - -/obj/item/ammo_box/magazine/recharge/marksman - ammo_type = /obj/item/ammo_casing/laser/marksman - max_ammo = 5 - -/obj/item/ammo_casing/laser/marksman - projectile_type = /obj/projectile/beam/marksman - -/obj/item/ammo_casing/laser/marksman/Initialize(mapload) - . = ..() - AddElement(/datum/element/delete_on_drop) - -/obj/projectile/beam/marksman - name = "laser beam" - damage = 70 - armour_penetration = 30 - hitscan = TRUE - icon_state = "gaussstrong" - tracer_type = /obj/effect/projectile/tracer/solar - muzzle_type = /obj/effect/projectile/muzzle/solar - impact_type = /obj/effect/projectile/impact/solar - -/obj/item/gun/ballistic/automatic/mp5 - name = "\improper MP5/40" - desc = "An old SMG, this one is chambered in 10mm Auto. It has Heckler & Koch etched above the magazine well." - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_guns40x32.dmi' - lefthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_lefthand.dmi' - righthand_file ='modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_righthand.dmi' - icon_state = "mp5" - inhand_icon_state = "mp5" - accepted_magazine_type = /obj/item/ammo_box/magazine/mp5 - bolt_type = BOLT_TYPE_LOCKING - can_suppress = TRUE - fire_delay = 1.25 - spread = 2.5 - mag_display = TRUE - alt_icons = TRUE - load_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/mp5_magin.ogg' - load_empty_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/mp5_magin.ogg' - rack_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/mp5_cock.ogg' - lock_back_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/mp5_boltback.ogg' - eject_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/mp5_magout.ogg' - eject_empty_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/mp5_magout.ogg' - bolt_drop_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/mp5_boltforward.ogg' - fire_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/mp5_fire.ogg' - alternative_fire_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/mp5_fire_suppressed.ogg' - suppressed_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/mp5_fire_suppressed.ogg' - weapon_weight = WEAPON_MEDIUM - w_class = WEIGHT_CLASS_NORMAL - projectile_damage_multiplier = 0.7 - -/obj/item/gun/ballistic/automatic/mp5/Initialize(mapload) - . = ..() - - AddComponent(/datum/component/automatic_fire, fire_delay) - -/obj/item/ammo_box/magazine/mp5 - name = "MP5 magazine (10mm Auto)" - desc = "Magazines taking 10mm ammunition; it fits in the MP5." - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_items.dmi' - icon_state = "mp5" - ammo_type = /obj/item/ammo_casing/c10mm - caliber = CALIBER_10MM - max_ammo = 30 - multiple_sprites = AMMO_BOX_FULL_EMPTY diff --git a/modular_skyrat/modules/black_mesa/code/m16_variations.dm b/modular_skyrat/modules/black_mesa/code/m16_variations.dm deleted file mode 100644 index b8eaf9f38bbabe..00000000000000 --- a/modular_skyrat/modules/black_mesa/code/m16_variations.dm +++ /dev/null @@ -1,68 +0,0 @@ -/obj/item/gun/ballistic/automatic/m16/oldarms - name = "\improper Mk-11.4 Rifle" - desc = "An old-fashioned rifle from Sol-3's bygone era. Rumor has it that it can shoot apart an entire jungle (or desert, given the time). It has \"Keep out of water\" laser-engraved on the side. Now including a free reflex sight!" - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_guns40x32.dmi' - icon_state = "m16" - lefthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_righthand.dmi' - inhand_icon_state = "m16" - worn_icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_back.dmi' - worn_icon_state = "m16" - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - w_class = WEIGHT_CLASS_BULKY - weapon_weight = WEAPON_HEAVY - accepted_magazine_type = /obj/item/ammo_box/magazine/m16/vintage/oldarms - fire_delay = 3.5 - burst_size = 1 - actions_types = list() - fire_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/m16_fire.ogg' - fire_sound_volume = 50 - rack_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/sfrifle_cock.ogg' - load_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/sfrifle_magin.ogg' - load_empty_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/sfrifle_magin.ogg' - eject_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/sfrifle_magout.ogg' - alt_icons = TRUE - -/obj/item/gun/ballistic/automatic/m16/oldarms/Initialize(mapload) - . = ..() - - AddComponent(/datum/component/automatic_fire, fire_delay) - -/obj/item/ammo_box/magazine/m16/vintage/oldarms - name = "old-fashioned mk-11.4 rifle magazine" - desc = "A double-stack solid magazine that looks rather dated. Holds 20 rounds of .223 Stinger." - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_items.dmi' - icon_state = "m16" - ammo_type = /obj/item/ammo_casing/oldarms/a223s - caliber = CALIBER_223S - max_ammo = 20 - multiple_sprites = AMMO_BOX_FULL_EMPTY - -/obj/item/ammo_casing/oldarms/a223s - name = ".223 Stinger bullet casing" - desc = "A cheaply made .223 Stinger bullet casing." - caliber = CALIBER_223S - projectile_type = /obj/projectile/bullet/oldarms/a223s - -/obj/projectile/bullet/oldarms/a223s - name = ".223 bullet" - damage = 26 - armour_penetration = 5 - wound_bonus = -20 - -/obj/item/ammo_casing/oldarms/a223s/rubber - name = ".223 Stinger rubber bullet casing" - desc = "A cheaply made .233 Stinger bullet casing, now in rubber." - projectile_type = /obj/projectile/bullet/oldarms/a223s/rubber - -/obj/projectile/bullet/oldarms/a223s/rubber - name = ".223 Rubber bullet" - damage = 5 - stamina = 25 - ricochets_max = 3 - ricochet_incidence_leeway = 0 - ricochet_chance = 130 - ricochet_decay_damage = 0.5 - shrapnel_type = null - sharpness = NONE - embedding = null diff --git a/modular_skyrat/modules/black_mesa/code/mobs/bullsquid.dm b/modular_skyrat/modules/black_mesa/code/mobs/bullsquid.dm deleted file mode 100644 index debcf75040feb0..00000000000000 --- a/modular_skyrat/modules/black_mesa/code/mobs/bullsquid.dm +++ /dev/null @@ -1,50 +0,0 @@ -/mob/living/simple_animal/hostile/blackmesa/xen/bullsquid - name = "bullsquid" - desc = "Some highly aggressive alien creature. Thrives in toxic environments." - icon = 'modular_skyrat/modules/black_mesa/icons/mobs.dmi' - icon_state = "bullsquid" - icon_living = "bullsquid" - icon_dead = "bullsquid_dead" - icon_gib = null - mob_biotypes = list(MOB_ORGANIC, MOB_BEAST) - environment_smash = ENVIRONMENT_SMASH_STRUCTURES - speak_chance = 1 - speak_emote = list("growls") - emote_taunt = list("growls", "snarls", "grumbles") - taunt_chance = 100 - turns_per_move = 7 - maxHealth = 110 - health = 110 - obj_damage = 50 - harm_intent_damage = 15 - melee_damage_lower = 15 - melee_damage_upper = 15 - ranged = TRUE - retreat_distance = 4 - minimum_distance = 4 - dodging = TRUE - projectiletype = /obj/projectile/bullsquid - projectilesound = 'modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/goo_attack3.ogg' - melee_damage_upper = 18 - attack_sound = 'modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/attack1.ogg' - gold_core_spawnable = HOSTILE_SPAWN - alert_sounds = list( - 'modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/detect1.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/detect2.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/detect3.ogg' - ) - -/obj/projectile/bullsquid - name = "nasty ball of ooze" - icon_state = "neurotoxin" - damage = 5 - damage_type = BURN - knockdown = 20 - armor_flag = BIO - impact_effect_type = /obj/effect/temp_visual/impact_effect/neurotoxin - hitsound = 'modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/splat1.ogg' - hitsound_wall = 'modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/splat1.ogg' - -/obj/projectile/bullsquid/on_hit(atom/target, blocked = 0, pierce_hit) - new /obj/effect/decal/cleanable/greenglow(target.loc) - return ..() diff --git a/modular_skyrat/modules/black_mesa/code/mobs/headcrab_zombie.dm b/modular_skyrat/modules/black_mesa/code/mobs/headcrab_zombie.dm deleted file mode 100644 index 5479c376132b9b..00000000000000 --- a/modular_skyrat/modules/black_mesa/code/mobs/headcrab_zombie.dm +++ /dev/null @@ -1,89 +0,0 @@ -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie - name = "headcrab zombie" - desc = "This unlucky person has had a headcrab latch onto their head. Ouch." - icon = 'modular_skyrat/modules/black_mesa/icons/mobs.dmi' - icon_state = "zombie" - icon_living = "zombie" - maxHealth = 110 - health = 110 - icon_gib = null - icon_dead = "zombie_dead" - speak_chance = 1 - speak_emote = list("growls") - speed = 1 - emote_taunt = list("growls", "snarls", "grumbles") - taunt_chance = 100 - melee_damage_lower = 21 - melee_damage_upper = 21 - attack_sound = 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/claw_strike.ogg' - gold_core_spawnable = HOSTILE_SPAWN - alert_cooldown_time = 8 SECONDS - alert_sounds = list( - 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert1.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert2.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert3.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert4.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert5.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert6.ogg', - ) - -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/death(gibbed) - new /obj/effect/gibspawner/human(get_turf(src)) - return ..() - -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/scientist - name = "zombified scientist" - desc = "Even after death, I still have to wear this horrible tie!" - icon_state = "scientist_zombie" - icon_living = "scientist_zombie" - loot = list(/obj/effect/mob_spawn/corpse/human/scientist_zombie) - del_on_death = 1 - - -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/guard - name = "zombified guard" - desc = "About that brain I owed ya!" - icon_state = "security_zombie" - icon_living = "security_zombie" - maxHealth = 140 // Armor! - health = 140 - loot = list(/obj/effect/mob_spawn/corpse/human/guard_zombie) - del_on_death = 1 - -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/hecu - name = "zombified marine" - desc = "MY. ASS. IS. DEAD." - icon_state = "hecu_zombie" - icon_living = "hecu_zombie" - maxHealth = 190 // More armor! - health = 190 - loot = list(/obj/effect/mob_spawn/corpse/human/hecu_zombie) - del_on_death = 1 - -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/hev - name = "zombified hazardous environment specialist" - desc = "User death... surpassed." - icon_state = "hev_zombie" - icon_living = "hev_zombie" - maxHealth = 250 - health = 250 - alert_sounds = list( - 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv1.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv2.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv3.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv4.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv5.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv6.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv7.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv8.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv9.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv10.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv11.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv12.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv13.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv14.ogg', - ) - - - - diff --git a/modular_skyrat/modules/black_mesa/code/mobs/houndeye.dm b/modular_skyrat/modules/black_mesa/code/mobs/houndeye.dm deleted file mode 100644 index f7e4c70a6ce235..00000000000000 --- a/modular_skyrat/modules/black_mesa/code/mobs/houndeye.dm +++ /dev/null @@ -1,52 +0,0 @@ -/mob/living/simple_animal/hostile/blackmesa/xen/houndeye - name = "houndeye" - desc = "Some highly aggressive alien creature. Thrives in toxic environments." - icon = 'modular_skyrat/modules/black_mesa/icons/mobs.dmi' - icon_state = "houndeye" - icon_living = "houndeye" - icon_dead = "houndeye_dead" - icon_gib = null - mob_biotypes = list(MOB_ORGANIC, MOB_BEAST) - environment_smash = ENVIRONMENT_SMASH_STRUCTURES - speak_chance = 1 - speak_emote = list("growls") - speed = 1 - emote_taunt = list("growls", "snarls", "grumbles") - taunt_chance = 100 - turns_per_move = 7 - maxHealth = 100 - health = 100 - obj_damage = 50 - harm_intent_damage = 10 - melee_damage_lower = 20 - melee_damage_upper = 20 - attack_sound = 'sound/weapons/bite.ogg' - gold_core_spawnable = HOSTILE_SPAWN - //Since those can survive on Xen, I'm pretty sure they can thrive on any atmosphere - - minbodytemp = 0 - maxbodytemp = 1500 - loot = list(/obj/item/stack/sheet/bluespace_crystal) - alert_sounds = list( - 'modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert1.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert2.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert3.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert4.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert5.ogg' - ) - /// Charging ability - var/datum/action/cooldown/mob_cooldown/charge/basic_charge/charge - -/mob/living/simple_animal/hostile/blackmesa/xen/houndeye/Initialize(mapload) - . = ..() - charge = new /datum/action/cooldown/mob_cooldown/charge/basic_charge() - charge.Grant(src) - -/mob/living/simple_animal/hostile/blackmesa/xen/houndeye/Destroy() - QDEL_NULL(charge) - return ..() - -/mob/living/simple_animal/hostile/blackmesa/xen/houndeye/OpenFire() - if(client) - return - charge.Trigger(target) diff --git a/modular_skyrat/modules/black_mesa/code/mobs/human_mobs.dm b/modular_skyrat/modules/black_mesa/code/mobs/human_mobs.dm deleted file mode 100644 index 514c9aabe7cb92..00000000000000 --- a/modular_skyrat/modules/black_mesa/code/mobs/human_mobs.dm +++ /dev/null @@ -1,226 +0,0 @@ -/* -* HECU -*/ - -/mob/living/simple_animal/hostile/blackmesa/hecu - name = "HECU Grunt" - desc = "I didn't sign on for this shit. Monsters, sure, but civilians? Who ordered this operation anyway?" - icon = 'modular_skyrat/modules/black_mesa/icons/mobs.dmi' - icon_state = "hecu_melee" - icon_living = "hecu_melee" - icon_dead = "hecu_dead" - icon_gib = "syndicate_gib" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - sentience_type = SENTIENCE_HUMANOID - speak_chance = 10 - speak = list("Stop right there!") - turns_per_move = 5 - speed = 0 - stat_attack = HARD_CRIT - robust_searching = 1 - maxHealth = 150 - health = 150 - harm_intent_damage = 5 - melee_damage_lower = 10 - melee_damage_upper = 10 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' - combat_mode = TRUE - loot = list(/obj/effect/gibspawner/human, /obj/item/melee/baton) - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 7.5 - faction = list(FACTION_HECU) - check_friendly_fire = 1 - status_flags = CANPUSH - del_on_death = 1 - dodging = TRUE - rapid_melee = 2 - footstep_type = FOOTSTEP_MOB_SHOE - alert_sounds = list( - 'modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert01.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert03.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert04.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert05.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert06.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert07.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert08.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert10.ogg' - ) - - -/mob/living/simple_animal/hostile/blackmesa/hecu/ranged - ranged = TRUE - retreat_distance = 5 - minimum_distance = 5 - icon_state = "hecu_ranged" - icon_living = "hecu_ranged" - casingtype = /obj/item/ammo_casing/a50ae - projectilesound = 'sound/weapons/gun/pistol/shot.ogg' - loot = list(/obj/effect/gibspawner/human, /obj/effect/spawner/random/hecu_deagle) - dodging = TRUE - rapid_melee = 1 - -/mob/living/simple_animal/hostile/blackmesa/hecu/ranged/smg - rapid = 3 - icon_state = "hecu_ranged_smg" - icon_living = "hecu_ranged_smg" - casingtype = /obj/item/ammo_casing/c34 - projectilesound = 'sound/weapons/gun/smg/shot.ogg' - loot = list(/obj/effect/gibspawner/human, /obj/effect/spawner/random/hecu_smg) - -/mob/living/simple_animal/hostile/blackmesa/sec - name = "Security Guard" - desc = "About that beer I owe'd ya!" - icon = 'modular_skyrat/modules/black_mesa/icons/mobs.dmi' - icon_state = "security_guard_melee" - icon_living = "security_guard_melee" - icon_dead = "security_guard_dead" - icon_gib = "syndicate_gib" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - sentience_type = SENTIENCE_HUMANOID - turns_per_move = 5 - speed = 0 - stat_attack = HARD_CRIT - robust_searching = 1 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - melee_damage_lower = 7 - melee_damage_upper = 7 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' - loot = list(/obj/effect/gibspawner/human, /obj/item/clothing/suit/armor/vest/blueshirt) - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 7.5 - faction = list(FACTION_STATION, FACTION_NEUTRAL) - check_friendly_fire = 1 - status_flags = CANPUSH - del_on_death = TRUE - combat_mode = TRUE - dodging = TRUE - rapid_melee = 2 - footstep_type = FOOTSTEP_MOB_SHOE - alert_sounds = list( - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance01.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance02.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance02.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance03.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance04.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance05.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance06.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance07.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance08.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance09.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance10.ogg' - ) - var/list/follow_sounds = list( - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadon01.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadon02.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadon03.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway01.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway02.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway03.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway04.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway05.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway06.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway07.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway08.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/letsgo01.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/letsgo02.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/letsgo03.ogg', - ) - var/list/unfollow_sounds = list( - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot01.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot02.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot03.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot04.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot05.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/illstayhere01.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/illstayhere02.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/illstayhere03.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere01.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere02.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere03.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere04.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere05.ogg', - ) - var/follow_speed = 2 - var/follow_distance = 2 - -/mob/living/simple_animal/hostile/blackmesa/sec/Initialize(mapload) - . = ..() - AddComponent(/datum/component/follow, follow_sounds, unfollow_sounds, follow_distance, follow_speed) - - -/mob/living/simple_animal/hostile/blackmesa/sec/ranged - ranged = TRUE - retreat_distance = 5 - minimum_distance = 5 - icon_state = "security_guard_ranged" - icon_living = "security_guard_ranged" - casingtype = /obj/item/ammo_casing/c9mm - projectilesound = 'sound/weapons/gun/pistol/shot.ogg' - loot = list(/obj/effect/gibspawner/human, /obj/item/clothing/suit/armor/vest/blueshirt, /obj/item/gun/ballistic/automatic/pistol/sol) - rapid_melee = 1 - -/mob/living/simple_animal/hostile/blackmesa/blackops - name = "black operative" - desc = "Why do we always have to clean up a mess the grunts can't handle?" - icon = 'modular_skyrat/modules/black_mesa/icons/mobs.dmi' - icon_state = "blackops" - icon_living = "blackops" - icon_dead = "blackops" - icon_gib = "syndicate_gib" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - sentience_type = SENTIENCE_HUMANOID - speak_chance = 10 - speak = list("Got a visual!") - turns_per_move = 5 - speed = 0 - stat_attack = HARD_CRIT - robust_searching = 1 - maxHealth = 200 - health = 200 - harm_intent_damage = 25 - melee_damage_lower = 30 - melee_damage_upper = 30 - attack_verb_continuous = "strikes" - attack_verb_simple = "strikes" - attack_sound = 'sound/effects/woodhit.ogg' - combat_mode = TRUE - loot = list(/obj/effect/gibspawner/human) - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 7.5 - faction = list(FACTION_BLACKOPS) - check_friendly_fire = 1 - status_flags = CANPUSH - del_on_death = 1 - dodging = TRUE - rapid_melee = 2 - footstep_type = FOOTSTEP_MOB_SHOE - alert_sounds = list( - 'modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert01.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert02.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert03.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert04.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert05.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert06.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert07.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert08.ogg' - ) - - -/mob/living/simple_animal/hostile/blackmesa/blackops/ranged - ranged = TRUE - rapid = 2 - retreat_distance = 5 - minimum_distance = 5 - icon_state = "blackops_ranged" - icon_living = "blackops_ranged" - casingtype = /obj/item/ammo_casing/a223/weak - projectilesound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/m16_fire.ogg' - attack_sound = 'sound/weapons/punch1.ogg' - loot = list(/obj/effect/gibspawner/human, /obj/item/ammo_box/magazine/m16) - rapid_melee = 1 diff --git a/modular_skyrat/modules/black_mesa/code/mobs/nihilanth.dm b/modular_skyrat/modules/black_mesa/code/mobs/nihilanth.dm deleted file mode 100644 index bdd4bfc28603a6..00000000000000 --- a/modular_skyrat/modules/black_mesa/code/mobs/nihilanth.dm +++ /dev/null @@ -1,67 +0,0 @@ -/mob/living/simple_animal/hostile/blackmesa/xen/nihilanth - name = "nihilanth" - desc = "Holy shit." - icon = 'modular_skyrat/modules/black_mesa/icons/nihilanth.dmi' - icon_state = "nihilanth" - icon_living = "nihilanth" - SET_BASE_PIXEL(-32, -32) - speed = 3 - bound_height = 64 - bound_width = 64 - icon_dead = "bullsquid_dead" - maxHealth = 3000 - health = 3000 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - projectilesound = 'sound/weapons/lasercannonfire.ogg' - projectiletype = /obj/projectile/nihilanth - ranged = TRUE - rapid = 3 - alert_cooldown = 2 MINUTES - harm_intent_damage = 50 - melee_damage_lower = 30 - melee_damage_upper = 40 - attack_verb_continuous = "lathes" - attack_verb_simple = "lathe" - attack_sound = 'sound/weapons/punch1.ogg' - status_flags = NONE - del_on_death = TRUE - wander = TRUE - loot = list(/obj/effect/gibspawner/xeno, /obj/item/stack/sheet/bluespace_crystal/fifty, /obj/item/key/gateway, /obj/item/uber_teleporter) - movement_type = FLYING - -/obj/item/stack/sheet/bluespace_crystal/fifty - amount = 50 - -/obj/projectile/nihilanth - name = "portal energy" - icon_state = "seedling" - damage = 20 - damage_type = BURN - light_range = 2 - armor_flag = ENERGY - light_color = LIGHT_COLOR_BRIGHT_YELLOW - hitsound = 'sound/weapons/sear.ogg' - hitsound_wall = 'sound/weapons/effects/searwall.ogg' - nondirectional_sprite = TRUE - -/mob/living/simple_animal/hostile/blackmesa/xen/nihilanth/Aggro() - . = ..() - if(!(world.time <= alert_cooldown_time)) - alert_cooldown_time = world.time + alert_cooldown - switch(health) - if(0 to 999) - playsound(src, pick(list('modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_pain01.ogg', 'modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_freeeemmaan01.ogg')), 100) - if(1000 to 2999) - playsound(src, pick(list('modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_youalldie01.ogg', 'modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_foryouhewaits01.ogg')), 100) - if(3000 to 6000) - playsound(src, pick(list('modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_whathavedone01.ogg', 'modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_deceiveyou01.ogg')), 100) - else - playsound(src, pick(list('modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_thetruth01.ogg', 'modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_iamthelast01.ogg')), 100) - set_combat_mode(TRUE) - -/mob/living/simple_animal/hostile/blackmesa/xen/nihilanth/death(gibbed) - . = ..() - -/mob/living/simple_animal/hostile/blackmesa/xen/nihilanth/LoseAggro() - . = ..() - set_combat_mode(FALSE) diff --git a/modular_skyrat/modules/black_mesa/code/mobs/vortigaunt.dm b/modular_skyrat/modules/black_mesa/code/mobs/vortigaunt.dm deleted file mode 100644 index ff9542b126be0b..00000000000000 --- a/modular_skyrat/modules/black_mesa/code/mobs/vortigaunt.dm +++ /dev/null @@ -1,64 +0,0 @@ -/mob/living/simple_animal/hostile/blackmesa/xen/vortigaunt - name = "vortigaunt" - desc = "There is no distance between us. No false veils of time or space may intervene." - icon = 'modular_skyrat/modules/black_mesa/icons/mobs.dmi' - icon_state = "vortigaunt" - icon_living = "vortigaunt" - icon_dead = "vortigaunt_dead" - icon_gib = null - gender = MALE - faction = list(FACTION_STATION, FACTION_NEUTRAL) - mob_biotypes = list(MOB_ORGANIC, MOB_BEAST) - speak_chance = 1 - speak_emote = list("galungs") - speed = 1 - emote_taunt = list("galalungas", "galungas", "gungs") - projectiletype = /obj/projectile/beam/emitter/hitscan - projectilesound = 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot4.ogg' - ranged_cooldown_time = 5 SECONDS - ranged_message = "fires" - taunt_chance = 100 - turns_per_move = 7 - maxHealth = 130 - health = 130 - speed = 3 - ranged = TRUE - dodging = TRUE - harm_intent_damage = 15 - melee_damage_lower = 10 - melee_damage_upper = 10 - retreat_distance = 5 - minimum_distance = 5 - attack_sound = 'sound/weapons/bite.ogg' - gold_core_spawnable = FRIENDLY_SPAWN - loot = list(/obj/item/stack/sheet/bone) - alert_sounds = list( - 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert01.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert01b.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert02.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert03.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert04.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert05.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert06.ogg', - ) - /// SOunds we play when asked to follow/unfollow. - var/list/follow_sounds = list( - 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue01.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue02.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue03.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue04.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue05.ogg', - 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue05a.ogg', - ) - var/follow_speed = 1 - var/follow_distance = 2 - -/mob/living/simple_animal/hostile/blackmesa/xen/vortigaunt/Initialize(mapload) - . = ..() - AddComponent(/datum/component/follow, follow_sounds, follow_sounds, follow_distance, follow_speed) - -/mob/living/simple_animal/hostile/blackmesa/xen/vortigaunt/slave - name = "slave vortigaunt" - desc = "Bound by the shackles of a sinister force. He does not want to hurt you." - icon_state = "vortigaunt_slave" - faction = list(FACTION_XEN) diff --git a/modular_skyrat/modules/black_mesa/code/rationpacks.dm b/modular_skyrat/modules/black_mesa/code/rationpacks.dm deleted file mode 100644 index 9965858d07afe0..00000000000000 --- a/modular_skyrat/modules/black_mesa/code/rationpacks.dm +++ /dev/null @@ -1,133 +0,0 @@ -/// Handpicked list of various pizzas and "pizzas" to make sure it's both 'safe' (human-edible) and doesn't spawn the base type like the bomb pizza can. -#define EDIBLE_PIZZA_LIST list( \ - /obj/item/food/pizza/margherita, \ - /obj/item/food/pizza/meat, \ - /obj/item/food/pizza/mushroom, \ - /obj/item/food/pizza/vegetable, \ - /obj/item/food/pizza/donkpocket, \ - /obj/item/food/pizza/dank, \ - /obj/item/food/pizza/sassysage, \ - /obj/item/food/pizza/pineapple, \ - /obj/item/food/pizza/mothic_margherita, \ - /obj/item/food/pizza/mothic_firecracker, \ - /obj/item/food/pizza/mothic_five_cheese, \ - /obj/item/food/pizza/mothic_white_pie, \ - /obj/item/food/pizza/mothic_pesto, \ - /obj/item/food/pizza/mothic_garlic, \ - /obj/item/food/pizza/flatbread/rustic, \ - /obj/item/food/pizza/flatbread/italic, \ - /obj/item/food/pizza/flatbread/zmorgast, \ - /obj/item/food/pizza/flatbread/fish, \ - /obj/item/food/pizza/flatbread/mushroom, \ - /obj/item/food/pizza/flatbread/nutty, \ -) - -/obj/item/food/mre_course - name = "undefined MRE course" - desc = "Something you shouldn't see. But it's edible." - icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/courses.dmi' - icon_state = "main_course" - food_reagents = list(/datum/reagent/consumable/nutriment = 20) - tastes = list("crayon powder" = 1) - foodtypes = VEGETABLES | GRAIN - w_class = WEIGHT_CLASS_SMALL - -/obj/item/food/mre_course/main - name = "MRE main course" - desc = "Main course of the ancient military ration designed for ground troops. This one is NOTHING." - tastes = list("strawberry" = 1, "vanilla" = 1, "chocolate" = 1) - -/obj/item/food/mre_course/main/beans - name = "MRE main course - Pork and Beans" - desc = "Main course of the ancient military ration designed for ground troops. This one is pork and beans covered in some tomato sauce." - tastes = list("beans" = 1, "pork" = 1, "tomato sauce" = 1) - foodtypes = MEAT | VEGETABLES - -/obj/item/food/mre_course/main/macaroni - name = "MRE main course - Macaroni and Cheese" - desc = "Main course of the ancient military ration designed for ground troops. This one is preboiled macaroni covered in some federal reserve cheese." - tastes = list("cold macaroni" = 1, "bland cheese" = 1) - foodtypes = DAIRY | GRAIN - -/obj/item/food/mre_course/main/rice - name = "MRE main course - Rice and Beef" - desc = "Main course of the ancient military ration designed for ground troops. This one is rice with beef, covered in gravy." - tastes = list("dense rice" = 1, "bits of beef" = 1, "gravy" = 1) - foodtypes = GRAIN | MEAT - -/obj/item/food/mre_course/side - name = "MRE side course" - desc = "Side course of the ancient military ration designed for ground troops. This one is NOTHING." - icon_state = "side_dish" - -/obj/item/food/mre_course/side/bread - name = "MRE side course - Cornbread" - desc = "Side course of the ancient military ration designed for ground troops. This one is cornbread." - tastes = list("cornbread" = 1) - foodtypes = GRAIN - -/obj/item/food/mre_course/side/pie - name = "MRE side course - Meat Pie" - desc = "Side course of the ancient military ration designed for ground troops. This one is some meat pie." - tastes = list("pie dough" = 1, "ground meat" = 1, "Texas" = 1) - foodtypes = MEAT | GRAIN - -/obj/item/food/mre_course/side/chicken - name = "MRE side course - Sweet 'n Sour Chicken" - desc = "Side course of the ancient military ration designed for ground troops. This one is some undefined chicken-looking meat covered in cheap reddish sauce." - tastes = list("bits of chicken meat" = 1, "sweet and sour sauce" = 1, "salt" = 1) - foodtypes = MEAT | FRIED - -/obj/item/food/mre_course/dessert - name = "MRE dessert" - desc = "Dessert of the ancient military ration designed for ground troops. This one is NOTHING." - icon_state = "dessert" - -/obj/item/food/mre_course/dessert/cookie - name = "MRE dessert - Cookie" - desc = "Dessert of the ancient military ration designed for ground troops. This one is a big dry cookie." - tastes = list("dryness" = 1, "hard cookie" = 1, "chocolate chip" = 1) - foodtypes = GRAIN | SUGAR - -/obj/item/food/mre_course/dessert/cake - name = "MRE dessert - Apple Pie" - desc = "Dessert of the ancient military ration designed for ground troops. This one is an amorphous apple pie." - tastes = list("apple" = 1, "moist cake" = 1, "sugar" = 1) - foodtypes = GRAIN | SUGAR | FRUIT - -/obj/item/food/mre_course/dessert/chocolate - name = "MRE dessert - Dark Chocolate" - desc = "Dessert of the ancient military ration designed for ground troops. This one is a dark bar of chocolate." - tastes = list("vanilla" = 1, "artificial chocolate" = 1, "chemicals" = 1) - foodtypes = JUNKFOOD | SUGAR - -/obj/item/storage/box/hecu_rations - name = "Meal, Ready-to-Eat" - desc = "A box containing a few rations and some chewing gum, for keeping a starving crayon-eater going." - icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/mre_hecu.dmi' - icon_state = "mre_package" - illustration = null - -/obj/item/storage/box/hecu_rations/Initialize(mapload) - . = ..() - atom_storage.max_slots = 5 - -/obj/item/storage/box/hecu_rations/PopulateContents() - var/main_course = pick(/obj/item/food/mre_course/main/beans, /obj/item/food/mre_course/main/macaroni, /obj/item/food/mre_course/main/rice) - var/side_dish = pick(/obj/item/food/mre_course/side/bread, /obj/item/food/mre_course/side/pie, /obj/item/food/mre_course/side/chicken) - var/dessert = pick(/obj/item/food/mre_course/dessert/cookie, /obj/item/food/mre_course/dessert/cake, /obj/item/food/mre_course/dessert/chocolate) - new main_course(src) - new side_dish(src) - new dessert(src) - new /obj/item/storage/box/gum(src) - new /obj/item/food/spacers_sidekick(src) - -/obj/item/pizzabox/random - boxtag = "Randy's Surprise" - boxtag_set = TRUE - -/obj/item/pizzabox/random/Initialize(mapload) - . = ..() - if(!pizza) - var/random_pizza = pick(EDIBLE_PIZZA_LIST) - pizza = new random_pizza(src) diff --git a/modular_skyrat/modules/black_mesa/code/turfs.dm b/modular_skyrat/modules/black_mesa/code/turfs.dm deleted file mode 100644 index e026f2d9331534..00000000000000 --- a/modular_skyrat/modules/black_mesa/code/turfs.dm +++ /dev/null @@ -1,111 +0,0 @@ -/turf/closed/mineral/black_mesa - turf_type = /turf/open/misc/ironsand/black_mesa - baseturfs = /turf/open/misc/ironsand/black_mesa - initial_gas_mix = OPENTURF_DEFAULT_ATMOS - -//Floors that no longer lead into space (innovative!) -/turf/open/misc/ironsand/black_mesa - baseturfs = /turf/open/misc/ironsand/black_mesa - initial_gas_mix = OPENTURF_DEFAULT_ATMOS - planetary_atmos = TRUE - -/obj/effect/baseturf_helper/black_mesa - name = "black mesa sand baseturf editor" - baseturf = /turf/open/misc/ironsand/black_mesa - -/obj/effect/baseturf_helper/black_mesa_xen - name = "xen baseturf editor" - baseturf = /turf/open/water/xen_acid - -/turf/closed/indestructible/rock/xen - name = "strange wall" - color = "#ac3b06" - baseturfs = /turf/closed/indestructible/rock/xen - -/turf/open/misc/xen - name = "strange weeds" - desc = "It feels soft to the touch, like a carpet... only... wet." - icon = 'modular_skyrat/modules/black_mesa/icons/xen_turfs.dmi' - icon_state = "xen_turf" - baseturfs = /turf/open/misc/xen - footstep = FOOTSTEP_GRASS - barefootstep = FOOTSTEP_GRASS - planetary_atmos = TRUE - -/turf/open/water/beach/xen - desc = "It's mirky and filled with strange organisms." - name = "xen water" - icon = 'modular_skyrat/modules/black_mesa/icons/xen_turfs.dmi' - baseturfs = /turf/open/water/beach/xen - initial_gas_mix = OPENTURF_DEFAULT_ATMOS - planetary_atmos = TRUE - -/turf/open/misc/beach/coastline_t/xen - desc = "It's mirky and filled with strange organisms." - name = "xen water" - icon = 'modular_skyrat/modules/black_mesa/icons/xen_turfs.dmi' - baseturfs = /turf/open/misc/beach/coastline_t/xen - initial_gas_mix = OPENTURF_DEFAULT_ATMOS - planetary_atmos = TRUE - -/turf/open/misc/beach/coastline_t/sandwater_inner/xen - desc = "It's mirky and filled with strange organisms." - name = "xen water" - icon = 'modular_skyrat/modules/black_mesa/icons/xen_turfs.dmi' - baseturfs = /turf/open/misc/beach/coastline_t/sandwater_inner/xen - initial_gas_mix = OPENTURF_DEFAULT_ATMOS - planetary_atmos = TRUE - -/turf/open/misc/beach/coastline_b/xen - name = "xen water" - desc = "It's mirky and filled with strange organisms." - icon = 'modular_skyrat/modules/black_mesa/icons/xen_turfs.dmi' - baseturfs = /turf/open/misc/beach/coastline_b/xen - initial_gas_mix = OPENTURF_DEFAULT_ATMOS - planetary_atmos = TRUE - -/turf/open/misc/dirt/planet/xen - name = "strange path" - color = "#ee5f1c" - baseturfs = /turf/open/misc/dirt/planet/xen - planetary_atmos = TRUE - -/turf/open/water/xen_acid - baseturfs = /turf/open/water/xen_acid - initial_gas_mix = OPENTURF_DEFAULT_ATMOS - planetary_atmos = TRUE - color = COLOR_VIBRANT_LIME - light_range = 2 - light_color = COLOR_VIBRANT_LIME - /// How much damage we deal if a mob enters us. - var/acid_damage = 30 - -/turf/open/water/xen_acid/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) - . = ..() - if(isliving(arrived) && !istype(arrived, /mob/living/simple_animal/hostile/blackmesa/xen/bullsquid)) // Bull squid territory! - var/mob/living/unlucky_mob = arrived - unlucky_mob.adjustFireLoss(acid_damage) - playsound(unlucky_mob, 'sound/weapons/sear.ogg', 100, TRUE) - -/turf/open/water/electric - name = "electric water" - baseturfs = /turf/open/water/electric - initial_gas_mix = OPENTURF_DEFAULT_ATMOS - color = COLOR_TEAL - light_range = 2 - light_color = COLOR_TEAL - -/turf/open/water/electric/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) - . = ..() - if(isliving(arrived)) - var/mob/living/unlucky_mob = arrived - unlucky_mob.Stun(1.5 SECONDS) - unlucky_mob.Knockdown(10 SECONDS) - unlucky_mob.adjustFireLoss(15) - var/datum/effect_system/lightning_spread/s = new /datum/effect_system/lightning_spread - s.set_up(5, 1, unlucky_mob.loc) - s.start() - unlucky_mob.visible_message(span_danger("[unlucky_mob.name] is shocked by [src]!"), \ - span_userdanger("You feel a powerful shock course through your body!"), \ - span_hear("You hear a heavy electrical crack!")) - playsound(unlucky_mob, SFX_SPARKS, 100, TRUE) diff --git a/modular_skyrat/modules/black_mesa/code/weapons.dm b/modular_skyrat/modules/black_mesa/code/weapons.dm deleted file mode 100644 index ef5873daa9ba9f..00000000000000 --- a/modular_skyrat/modules/black_mesa/code/weapons.dm +++ /dev/null @@ -1,56 +0,0 @@ -/obj/item/crowbar/freeman - name = "blood soaked crowbar" - desc = "A heavy handed crowbar, it drips with blood." - icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/freeman.dmi' - icon_state = "crowbar" - force = 35 - throwforce = 45 - toolspeed = 0.1 - wound_bonus = 10 - hitsound = 'modular_skyrat/master_files/sound/weapons/crowbar2.ogg' - mob_throw_hit_sound = 'modular_skyrat/master_files/sound/weapons/crowbar2.ogg' - force_opens = TRUE - -/obj/item/crowbar/freeman/ultimate - name = "\improper Freeman's crowbar" - desc = "A weapon wielded by an ancient physicist, the blood of hundreds seeps through this rod of iron and malice." - force = 45 - -/obj/item/crowbar/freeman/ultimate/Initialize(mapload) - . = ..() - add_filter("rad_glow", 2, list("type" = "outline", "color" = "#fbff1479", "size" = 2)) - -/obj/item/shield/riot/pointman/hecu - name = "ballistic shield" - desc = "A shield fit for those that want to sprint headfirst into the unknown! Cumbersome as hell. Repair with iron." - icon_state = "ballistic" - icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/ballistic.dmi' - worn_icon_state = "ballistic_worn" - worn_icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/ballistic.dmi' - inhand_icon_state = "ballistic" - lefthand_file = 'modular_skyrat/modules/awaymissions_skyrat/icons/ballistic_l.dmi' - righthand_file = 'modular_skyrat/modules/awaymissions_skyrat/icons/ballistic_r.dmi' - force = 14 - throwforce = 5 - throw_speed = 1 - throw_range = 1 - block_chance = 45 - slot_flags = ITEM_SLOT_BACK - w_class = WEIGHT_CLASS_BULKY - attack_verb_continuous = list("shoves", "bashes") - attack_verb_simple = list("shove", "bash") - transparent = TRUE - max_integrity = 150 - repairable_by = /obj/item/stack/sheet/iron //what to repair the shield with - - -/obj/item/shield/riot/pointman/hecu/shatter(mob/living/carbon/human/owner) - playsound(owner, 'sound/effects/glassbr3.ogg', 100) - new /obj/item/ballistic_broken((get_turf(src))) - -/obj/item/ballistic_broken - name = "broken ballistic shield" - desc = "An unsalvageable, unrecoverable mess of armor steel and kevlar. Should've maintained it, huh?" - icon_state = "ballistic_broken" - icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/ballistic.dmi' - w_class = WEIGHT_CLASS_BULKY diff --git a/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_head.dm b/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_head.dm deleted file mode 100644 index c8b6dd6e956e14..00000000000000 --- a/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_head.dm +++ /dev/null @@ -1,78 +0,0 @@ -/obj/item/clothing/head/blastwave - name = "blastwave helmet" - desc = "A plastic helmet with paint applied. Protects as much as cardboard box named 'Bomb Shelter'." - icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' - icon_state = "blastwave_helmet" - flags_inv = HIDEHAIR - uses_advanced_reskins = TRUE - unique_reskin = list( - "Default (Purple)" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi', - RESKIN_ICON_STATE = "blastwave_helmet", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi', - RESKIN_WORN_ICON_STATE = "blastwave_helmet" - ), - "Red" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi', - RESKIN_ICON_STATE = "blastwave_helmet_r", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi', - RESKIN_WORN_ICON_STATE = "blastwave_helmet_r" - ), - "Green" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi', - RESKIN_ICON_STATE = "blastwave_helmet_g", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi', - RESKIN_WORN_ICON_STATE = "blastwave_helmet_g" - ), - "Blue" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi', - RESKIN_ICON_STATE = "blastwave_helmet_b", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi', - RESKIN_WORN_ICON_STATE = "blastwave_helmet_b" - ), - "Yellow" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi', - RESKIN_ICON_STATE = "blastwave_helmet_y", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi', - RESKIN_WORN_ICON_STATE = "blastwave_helmet_y" - ) - ) - -/obj/item/clothing/head/blastwave/officer - name = "blastwave peaked cap" - desc = "A simple, militaristic cap." - icon_state = "blastwave_offcap" - flags_inv = 0 - unique_reskin = list( - "Default (Purple)" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi', - RESKIN_ICON_STATE = "blastwave_offcap", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi', - RESKIN_WORN_ICON_STATE = "blastwave_offcap" - ), - "Red" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi', - RESKIN_ICON_STATE = "blastwave_offcap_r", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi', - RESKIN_WORN_ICON_STATE = "blastwave_offcap_r" - ), - "Green" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi', - RESKIN_ICON_STATE = "blastwave_offcap_g", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi', - RESKIN_WORN_ICON_STATE = "blastwave_offcap_g" - ), - "Blue" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi', - RESKIN_ICON_STATE = "blastwave_offcap_b", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi', - RESKIN_WORN_ICON_STATE = "blastwave_offcap_b" - ), - "Yellow" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi', - RESKIN_ICON_STATE = "blastwave_offcap_y", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi', - RESKIN_WORN_ICON_STATE = "blastwave_offcap_y" - ) - ) diff --git a/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_mask.dm b/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_mask.dm deleted file mode 100644 index e19b933de2fadb..00000000000000 --- a/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_mask.dm +++ /dev/null @@ -1,8 +0,0 @@ -/obj/item/clothing/mask/gas/full - name = "full gas mask" - desc = "A close-fitting mask. Equipment beloved by many trenchers, mooks and romantically apocalyptic people." - icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' - worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/mask_muzzled.dmi' - icon_state = "gas_full" - flags_inv = HIDEEARS | HIDEEYES | HIDEFACE | HIDEHAIR | HIDEFACIALHAIR | HIDESNOUT diff --git a/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_suit.dm b/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_suit.dm deleted file mode 100644 index 411767918caac4..00000000000000 --- a/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_suit.dm +++ /dev/null @@ -1,41 +0,0 @@ -/obj/item/clothing/suit/blastwave - name = "blastwave trenchcoat" - desc = "A generic trenchcoat of the boring wars." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suit_digi.dmi' - icon_state = "blastwave_suit" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - uses_advanced_reskins = TRUE - unique_reskin = list( - "Default (Purple)" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi', - RESKIN_ICON_STATE = "blastwave_suit", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi', - RESKIN_WORN_ICON_STATE = "blastwave_suit" - ), - "Red" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi', - RESKIN_ICON_STATE = "blastwave_suit_r", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi', - RESKIN_WORN_ICON_STATE = "blastwave_suit_r" - ), - "Green" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi', - RESKIN_ICON_STATE = "blastwave_suit_g", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi', - RESKIN_WORN_ICON_STATE = "blastwave_suit_g" - ), - "Blue" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi', - RESKIN_ICON_STATE = "blastwave_suit_b", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi', - RESKIN_WORN_ICON_STATE = "blastwave_suit_b" - ), - "Yellow" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi', - RESKIN_ICON_STATE = "blastwave_suit_y", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi', - RESKIN_WORN_ICON_STATE = "blastwave_suit_y" - ) - ) diff --git a/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_uniform.dm b/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_uniform.dm deleted file mode 100644 index 9bb18d94c07f18..00000000000000 --- a/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_uniform.dm +++ /dev/null @@ -1,41 +0,0 @@ -/obj/item/clothing/under/blastwave - name = "blastwave uniform" - desc = "An utilitarian uniform of rugged warfare." - icon = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi' - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/uniform_digi.dmi' - icon_state = "blastwave_uniform" - can_adjust = FALSE - uses_advanced_reskins = TRUE - unique_reskin = list( - "Default (Purple)" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi', - RESKIN_ICON_STATE = "blastwave_uniform", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi', - RESKIN_WORN_ICON_STATE = "blastwave_uniform" - ), - "Red" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi', - RESKIN_ICON_STATE = "blastwave_uniform_r", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi', - RESKIN_WORN_ICON_STATE = "blastwave_uniform_r" - ), - "Green" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi', - RESKIN_ICON_STATE = "blastwave_uniform_g", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi', - RESKIN_WORN_ICON_STATE = "blastwave_uniform_g" - ), - "Blue" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi', - RESKIN_ICON_STATE = "blastwave_uniform_b", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi', - RESKIN_WORN_ICON_STATE = "blastwave_uniform_b" - ), - "Yellow" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi', - RESKIN_ICON_STATE = "blastwave_uniform_y", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi', - RESKIN_WORN_ICON_STATE = "blastwave_uniform_y" - ) - ) diff --git a/modular_skyrat/modules/blastwave_outfits/readme.md b/modular_skyrat/modules/blastwave_outfits/readme.md deleted file mode 100644 index 3ca5e0dbfea3eb..00000000000000 --- a/modular_skyrat/modules/blastwave_outfits/readme.md +++ /dev/null @@ -1,48 +0,0 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/14165 (initial) - -## Title: GWTB-like Outfit. - -MODULE ID: N/A - -### Description: - -Adds "Gone with the Blastwave" webcomic-inspired outfit. Colors are pre-set via reskinning, and it is not GAGsified. -This version does not provide armor values. - -### TG Proc/File Changes: - -- N/A -<!-- If you had to edit, or append to any core procs in the process of making this PR, list them here. APPEND: Also, please include any files that you've changed. .DM files that is. --> - -### Defines: - -- N/A -<!-- If you needed to add any defines, mention the files you added those defines in --> - -### Master file additions - -- #CHANGE modular_skyrat\master_files\icons\mob\clothing\head.dmi -- #CHANGE modular_skyrat\master_files\icons\mob\clothing\mask_muzzled.dmi -- #CHANGE modular_skyrat\master_files\icons\mob\clothing\mask.dmi -- #CHANGE modular_skyrat\master_files\icons\mob\clothing\suit_digi.dmi -- #CHANGE modular_skyrat\master_files\icons\mob\clothing\suit.dmi -- #CHANGE modular_skyrat\master_files\icons\mob\clothing\uniform_digi.dmi -- #CHANGE modular_skyrat\master_files\icons\mob\clothing\uniform.dmi -- #CHANGE modular_skyrat\master_files\icons\obj\clothing\hats.dmi -- #CHANGE modular_skyrat\master_files\icons\obj\clothing\masks.dmi -- #CHANGE modular_skyrat\master_files\icons\obj\clothing\suits.dmi -- #CHANGE modular_skyrat\master_files\icons\obj\clothing\uniforms.dmi -<!-- Any master file changes you've made to existing master files or if you've added a new master file. Please mark either as #NEW or #CHANGE --> - -### Included files that are not contained in this module: - -- #CHANGE modular_skyrat\modules\loadouts\loadout_items\loadout_datum_heads.dm -- #CHANGE modular_skyrat\modules\loadouts\loadout_items\loadout_datum_suit.dm -- #CHANGE modular_skyrat\modules\loadouts\loadout_items\under\loadout_datum_under.dm -<!-- Likewise, be it a non-modular file or a modular one that's not contained within the folder belonging to this specific module, it should be mentioned here --> - -### Credits: - -Initially used older TG-Station's Detective's Greycoat (blastwave coats are modified versions of it: added colored arm-patches, cuffs and lining), normal helmets (added paint and removed in-built goggles), officer's cap (added colored pin), utility uniform (added color-collar and shoulders); - -[Gone with the Blastwave](http://www.blastwave-comic.com) webcomic by Kimmo Lemetti (aka Morr) - inspiration. diff --git a/modular_skyrat/modules/blueshield/code/closet.dm b/modular_skyrat/modules/blueshield/code/closet.dm deleted file mode 100644 index b66f2d95c4efc4..00000000000000 --- a/modular_skyrat/modules/blueshield/code/closet.dm +++ /dev/null @@ -1,34 +0,0 @@ -/obj/item/storage/bag/garment/blueshield - name = "Blueshield's garment bag" - desc = "A bag for storing extra clothes and shoes. This one belongs to the blueshield." - -/obj/item/storage/bag/garment/blueshield/PopulateContents() - new /obj/item/clothing/suit/hooded/wintercoat/skyrat/blueshield(src) - new /obj/item/clothing/head/beret/blueshield(src) - new /obj/item/clothing/head/beret/blueshield/navy(src) - new /obj/item/clothing/under/rank/blueshield(src) - new /obj/item/clothing/under/rank/blueshield/skirt(src) - new /obj/item/clothing/under/rank/blueshield/turtleneck(src) - new /obj/item/clothing/under/rank/blueshield/turtleneck/skirt(src) - new /obj/item/clothing/suit/armor/vest/blueshield(src) - new /obj/item/clothing/suit/armor/vest/blueshield/jacket(src) - new /obj/item/clothing/neck/mantle/bsmantle(src) - -/obj/structure/closet/secure_closet/blueshield - name = "\the blueshield's locker" - icon_state = "bs" - icon = 'modular_skyrat/master_files/icons/obj/closet.dmi' - req_access = list(ACCESS_CAPTAIN) - -/obj/structure/closet/secure_closet/blueshield/New() - ..() - new /obj/item/storage/secure/briefcase(src) - new /obj/item/storage/belt/security/full(src) - new /obj/item/grenade/flashbang(src) - new /obj/item/assembly/flash/handheld(src) - new /obj/item/restraints/handcuffs(src) - new /obj/item/clothing/glasses/hud/security/sunglasses(src) - new /obj/item/storage/medkit/tactical/blueshield(src) - new /obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/sindano(src) - new /obj/item/storage/bag/garment/blueshield(src) - new /obj/item/mod/control/pre_equipped/blueshield(src) diff --git a/modular_skyrat/modules/blueshield/code/clothing.dm b/modular_skyrat/modules/blueshield/code/clothing.dm deleted file mode 100644 index 0875af9051048c..00000000000000 --- a/modular_skyrat/modules/blueshield/code/clothing.dm +++ /dev/null @@ -1,177 +0,0 @@ -//Blueshield - -//Uniform items are in command.dm - -/obj/item/clothing/gloves/tackler/combat/insulated/blueshield - name = "combat gloves" - desc = "These tactical gloves appear to be unique, made out of double woven durathread fibers which make it fireproof as well as acid resistant" - icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi' - icon_state = "combat" - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi' - resistance_flags = FIRE_PROOF | ACID_PROOF - armor_type = /datum/armor/insulated_blueshield - -/datum/armor/insulated_blueshield - fire = 100 - acid = 100 - -/obj/item/radio/headset/headset_bs - name = "\proper the blueshield's headset" - icon = 'modular_skyrat/modules/blueshield/icons/radio.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/ears.dmi' - icon_state = "bshield_headset" - worn_icon_state = "bshield_headset" - keyslot = /obj/item/encryptionkey/heads/blueshield - keyslot2 = /obj/item/encryptionkey/headset_cent - -/obj/item/radio/headset/headset_bs/alt - icon_state = "bshield_headset_alt" - worn_icon_state = "bshield_headset_alt" - -/obj/item/radio/headset/headset_bs/alt/Initialize(mapload) - . = ..() - AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS)) - - -/obj/item/clothing/head/helmet/space/plasmaman/blueshield - name = "blueshield envirosuit helmet" - desc = "A plasmaman containment helmet designed for certified blueshields, who's job guarding heads should not include self-combustion... most of the time." - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/plasmaman_hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/plasmaman_head.dmi' - icon_state = "bs_envirohelm" - armor_type = /datum/armor/head_helmet/plasmaman/blueshield - -/datum/armor/head_helmet/plasmaman/blueshield - acid = 90 - -/obj/item/clothing/under/plasmaman/blueshield - name = "blueshield envirosuit" - desc = "A plasmaman containment suit designed for certified blueshields, offering a limited amount of extra protection." - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/plasmaman.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/plasmaman.dmi' - icon_state = "bs_envirosuit" - armor_type = /datum/armor/clothing_under/under_plasmaman_blueshield - sensor_mode = SENSOR_COORDS - random_sensor = FALSE - -/datum/armor/clothing_under/under_plasmaman_blueshield - melee = 10 - laser = 10 - bomb = 5 - bio = 100 - fire = 95 - acid = 95 - -/obj/item/clothing/head/beret/blueshield - name = "blueshield's beret" - desc = "A blue beret made of durathread with a genuine golden badge, denoting its owner as a Blueshield Lieuteneant. It seems to be padded with nano-kevlar, making it tougher than standard reinforced berets." - greyscale_config = /datum/greyscale_config/beret_badge - greyscale_config_worn = /datum/greyscale_config/beret_badge/worn - greyscale_colors = "#3A4E7D#DEB63D" - //alternate_worn_icon_digi = 'modular_skyrat/icons/mob/head_muzzled.dmi' - icon_state = "beret_badge_police" - armor_type = /datum/armor/head_helmet/blueshield - supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON - -/datum/armor/head_helmet/blueshield - fire = 75 - acid = 75 - -/obj/item/clothing/head/beret/blueshield/navy - name = "navy blueshield's beret" - desc = "A navy-blue beret made of durathread with a silver badge, denoting its owner as a Blueshield Lieuteneant. It seems to be padded with nano-kevlar, making it tougher than standard reinforced berets." - greyscale_colors = "#3C485A#BBBBBB" - -/obj/item/storage/backpack/blueshield - name = "blueshield backpack" - desc = "A robust backpack issued to Nanotrasen's finest." - icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi' - lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' - righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' - icon_state = "backpack_blueshield" - inhand_icon_state = "backpack_blueshield" - -/obj/item/storage/backpack/satchel/blueshield - name = "blueshield satchel" - desc = "A robust satchel issued to Nanotrasen's finest." - icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi' - lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' - righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' - icon_state = "satchel_blueshield" - inhand_icon_state = "satchel_blueshield" - -/obj/item/storage/backpack/duffelbag/blueshield - name = "blueshield duffelbag" - desc = "A robust duffelbag issued to Nanotrasen's finest." - icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi' - lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' - righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' - icon_state = "duffel_blueshield" - inhand_icon_state = "duffel_blueshield" - -//blueshield armor -/obj/item/clothing/suit/armor/vest/blueshield - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi' - name = "blueshield's armor" - desc = "A tight-fitting kevlar-lined vest with a blue badge on the chest of it." - icon_state = "blueshieldarmor" - body_parts_covered = CHEST - armor_type = /datum/armor/suit_armor/blueshield - uses_advanced_reskins = TRUE - unique_reskin = list( - "Slim" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi', - RESKIN_ICON_STATE = "blueshieldarmor", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi', - RESKIN_WORN_ICON_STATE = "blueshieldarmor", - ), - "Marine" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi', - RESKIN_ICON_STATE = "bs_marine", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi', - RESKIN_WORN_ICON_STATE = "bs_marine", - ), - "Bulky" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi', - RESKIN_ICON_STATE = "vest_black", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi', - RESKIN_WORN_ICON_STATE = "vest_black", - ), - ) - -/datum/armor/suit_armor/blueshield - bomb = 30 - fire = 75 - acid = 75 - -/obj/item/clothing/suit/armor/vest/blueshield/jacket - name = "blueshield's jacket" - desc = "An expensive kevlar-lined jacket with a golden badge on the chest and \"NT\" emblazoned on the back. It weighs surprisingly little, despite how heavy it looks." - icon_state = "blueshield" - body_parts_covered = CHEST|ARMS - unique_reskin = null - -/obj/item/clothing/suit/armor/vest/blueshield/jacket/Initialize(mapload) - . = ..() - AddComponent(/datum/component/toggle_icon) - -/obj/item/clothing/suit/hooded/wintercoat/skyrat/blueshield - name = "blueshield's winter coat" - icon_state = "coatblueshield" - desc = "A comfy kevlar-lined coat with blue highlights, fit to keep the blueshield armored and warm." - hoodtype = /obj/item/clothing/head/hooded/winterhood/skyrat/blueshield - allowed = list(/obj/item/melee/baton/security/loaded) - armor_type = /datum/armor/suit_armor/blueshield - -/obj/item/clothing/suit/hooded/wintercoat/skyrat/blueshield/Initialize(mapload) - . = ..() - allowed += GLOB.security_vest_allowed - -/obj/item/clothing/head/hooded/winterhood/skyrat/blueshield - icon_state = "hood_blueshield" - desc = "A comfy kevlar-lined hood to go with the comfy kevlar-lined coat." - armor_type = /datum/armor/suit_armor/blueshield diff --git a/modular_skyrat/modules/blueshield/code/landmarks.dm b/modular_skyrat/modules/blueshield/code/landmarks.dm deleted file mode 100644 index e029826483c9f1..00000000000000 --- a/modular_skyrat/modules/blueshield/code/landmarks.dm +++ /dev/null @@ -1,4 +0,0 @@ -/obj/effect/landmark/start/blueshield - name = "Blueshield" - icon_state = "Blueshield" - icon = 'modular_skyrat/master_files/icons/mob/landmarks.dmi' diff --git a/modular_skyrat/modules/blueshield/readme.md b/modular_skyrat/modules/blueshield/readme.md deleted file mode 100644 index 5dde3e04eb17b7..00000000000000 --- a/modular_skyrat/modules/blueshield/readme.md +++ /dev/null @@ -1,33 +0,0 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/127 - -## Title: Blueshield - -MODULE ID: BLUESHIELD - -### Description: - -Adds the blueshield job to the game. It does not however add the blueshield office to the map. This includes all the blueshields items and job descriptors. - -### TG Proc Changes: - -- code/modules/jobs/jobs.dm > GLOBAL_LIST_INIT(security_positions, list() -- code/modules/jobs/access.dm > /proc/get_all_accesses() - -### Defines: - -- #define JOB_DISPLAY_ORDER_BLUESHIELD 34 -- #define ACCESS_BLUESHIELD 71 - -### Master file additions - -- ./modular_skyrat/master_files/icons/mob/hud.dmi #NEW -- ./modular_skyrat/master_files/icons/clothing/hands.dmi #NEW -- ./modular_skyrat/master_files/icons/obj/clothing/gloves.dmi #NEW - -### Included files that are not contained in this module: - -- N/A - -### Credits: - -Gandalf2k15 - Porting diff --git a/modular_skyrat/modules/bluespace_miner/code/bluespace_miner.dm b/modular_skyrat/modules/bluespace_miner/code/bluespace_miner.dm deleted file mode 100644 index e082ddabb42ae7..00000000000000 --- a/modular_skyrat/modules/bluespace_miner/code/bluespace_miner.dm +++ /dev/null @@ -1,186 +0,0 @@ -/obj/machinery/bluespace_miner - name = "bluespace miner" - desc = "Through the power of bluespace, it is capable of producing materials." - icon = 'modular_skyrat/modules/bluespace_miner/icons/bluespace_miner.dmi' - icon_state = "miner" - - density = TRUE - circuit = /obj/item/circuitboard/machine/bluespace_miner - idle_power_usage = 300 - - ///the temperature of the co2 produced per successful process (its really 100) KELVIN - var/gas_temp = 100 - ///the amount of seconds process_speed goes on cooldown for - var/processing_speed = 6 SECONDS - ///the chance each ore has to be picked, weighted list - var/list/ore_chance = list( - /obj/item/stack/sheet/iron = 20, - /obj/item/stack/sheet/glass = 20, - /obj/item/stack/sheet/mineral/plasma = 14, - /obj/item/stack/sheet/mineral/silver = 8, - /obj/item/stack/sheet/mineral/titanium = 8, - /obj/item/stack/sheet/mineral/uranium = 3, - /obj/item/xenoarch/strange_rock = 3, - /obj/item/stack/sheet/mineral/gold = 3, - /obj/item/stack/sheet/mineral/diamond = 1, - ) - COOLDOWN_DECLARE(process_speed) - -/obj/machinery/bluespace_miner/RefreshParts() - . = ..() - - gas_temp = 100 //starts at 100, should go down to 80 at most. - for(var/datum/stock_part/micro_laser/laser_part in component_parts) - gas_temp -= (laser_part.tier * 5) - - processing_speed = 6 SECONDS //starts at 6 seconds, should go down to 4 seconds at most. - for(var/datum/stock_part/servo/servo_part in component_parts) - processing_speed -= (servo_part.tier * (0.5 SECONDS)) - -/obj/machinery/bluespace_miner/update_overlays() - . = ..() - cut_overlays() - if(panel_open) - add_overlay("miner_open") - if(machine_stat & (NOPOWER|BROKEN)) - return - add_overlay("miner_on") - -/obj/machinery/bluespace_miner/examine(mob/user) - . = ..() - if(obj_flags & EMAGGED) - . += span_warning("The safeties are turned off!") - var/turf/src_turf = get_turf(src) - var/datum/gas_mixture/environment = src_turf.return_air() - if(environment.temperature >= T20C) - . += span_warning("[src] is in a suboptimal environment: " + span_boldwarning("TEMPERATURE TOO HIGH!")) - if(environment.return_pressure() <= ONE_ATMOSPHERE) - . += span_warning("[src] is in a suboptimal environment: " + span_boldwarning("PRESSURE TOO LOW!")) - if(environment.return_pressure() >= (ONE_ATMOSPHERE * 1.5)) - . += span_warning("[src] is in a suboptimal environment: " + span_boldwarning("PRESSURE TOO HIGH!")) - for(var/obj/machinery/bluespace_miner/bs_miner in range(1, src)) - if(bs_miner != src) - . += span_warning("[src] is in a suboptimal environment: TOO CLOSE TO ANOTHER BLUESPACE MINER") - -//we need to make sure we can actually print the ores out -/obj/machinery/bluespace_miner/proc/check_factors() - if(!COOLDOWN_FINISHED(src, process_speed)) - return FALSE - COOLDOWN_START(src, process_speed, processing_speed) - // cant be broken or unpowered - if(machine_stat & (NOPOWER|BROKEN)) - return FALSE - // cant be unanchored or open panel - if(!anchored || panel_open) - return FALSE - for(var/obj/machinery/bluespace_miner/bs_miner in range(1, src)) - if(bs_miner != src) - return FALSE - var/turf/src_turf = get_turf(src) - var/datum/gas_mixture/environment = src_turf.return_air() - // if its hotter than (or equal to) room temp, don't work - if(environment.temperature >= T20C) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) - return FALSE - // if its lesser than(or equal to) normal pressure, don't work - if(environment.return_pressure() <= ONE_ATMOSPHERE) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) - return FALSE - // overpressurizing will cause nuclear particles... - if(environment.return_pressure() >= (ONE_ATMOSPHERE * 1.5)) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) - return FALSE - //add amount_produced degrees to the temperature - var/datum/gas_mixture/merger = new - merger.assert_gas(/datum/gas/carbon_dioxide) - merger.gases[/datum/gas/carbon_dioxide][MOLES] = MOLES_CELLSTANDARD - if(obj_flags & EMAGGED) - merger.assert_gas(/datum/gas/tritium) - merger.gases[/datum/gas/tritium][MOLES] = MOLES_CELLSTANDARD - merger.temperature = (T20C + gas_temp) - src_turf.assume_air(merger) - return TRUE - -//if check_factors is good, then we spawn materials -/obj/machinery/bluespace_miner/proc/spawn_mats() - var/obj/chosen_sheet = pick_weight(ore_chance) - new chosen_sheet(get_turf(src)) - -/obj/machinery/bluespace_miner/process() - if(!check_factors()) - return - spawn_mats() - playsound(src, 'sound/machines/ping.ogg', 50, FALSE) - -/obj/machinery/bluespace_miner/crowbar_act(mob/living/user, obj/item/tool) - if(default_deconstruction_crowbar(tool)) - return TRUE - -/obj/machinery/bluespace_miner/screwdriver_act(mob/living/user, obj/item/tool) - . = TRUE - if(..()) - return - if(default_deconstruction_screwdriver(user, icon_state, icon_state, tool)) - update_appearance() - return - return FALSE - -/obj/machinery/bluespace_miner/emag_act(mob/user, obj/item/card/emag/emag_card) - if(obj_flags & EMAGGED) - balloon_alert(user, "already emagged!") - return FALSE - ore_chance += list(/obj/item/stack/sheet/mineral/bananium = 1) - obj_flags |= EMAGGED - balloon_alert_to_viewers("fizzles!") - return TRUE - -/obj/item/circuitboard/machine/bluespace_miner - name = "Bluespace Miner" - desc = "The bluespace miner is a machine that, when provided the correct temperature and pressure, will produce materials." - greyscale_colors = CIRCUIT_COLOR_GENERIC - build_path = /obj/machinery/bluespace_miner - req_components = list( - /obj/item/stack/sheet/glass = 1, - /obj/item/stack/ore/bluespace_crystal/refined = 1, - /datum/stock_part/matter_bin = 2, - /datum/stock_part/micro_laser = 2, - /datum/stock_part/servo = 2, - ) - needs_anchored = TRUE - -/datum/supply_pack/misc/bluespace_miner - name = "Bluespace Miner" - desc = "Nanotrasen has revolutionized the procuring of materials with bluespace-- featuring the Bluespace Miner!" - cost = CARGO_CRATE_VALUE * 50 // 10,000 - contains = list(/obj/item/circuitboard/machine/bluespace_miner) - crate_name = "Bluespace Miner Circuitboard Crate" - crate_type = /obj/structure/closet/crate - -/* if we were going to go research based -/datum/design/board/bluespace_miner - name = "Machine Design (Bluespace Miner)" - desc = "Allows for the construction of circuit boards used to build a bluespace miner." - id = "bluespace_miner" - build_path = /obj/item/circuitboard/machine/bluespace_miner - category = list(RND_CATEGORY_MISC_MACHINERY) - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_ENGINEERING - -/datum/experiment/scanning/points/bluespace_miner - name = "Bluespace Miner" - description = "We can learn from the past technology and create a better future-- with bluespace miners." - required_points = 5 - required_atoms = list( - /obj/item/xenoarch/broken_item/tech = 1, - ) - -/datum/techweb_node/bluespace_miner - id = "bluespace_miner" - display_name = "Bluespace Miner" - description = "The future is here, where we can mine ores from the great bluespace sea." - prereq_ids = list("anomaly_research", "bluespace_power") - design_ids = list( - "bluespace_miner", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) - discount_experiments = list(/datum/experiment/scanning/points/bluespace_miner = 5000) -*/ diff --git a/modular_skyrat/modules/bluespace_miner/icons/bluespace_miner.dmi b/modular_skyrat/modules/bluespace_miner/icons/bluespace_miner.dmi deleted file mode 100644 index ebc421da80d0f5..00000000000000 Binary files a/modular_skyrat/modules/bluespace_miner/icons/bluespace_miner.dmi and /dev/null differ diff --git a/modular_skyrat/modules/bodyparts/code/snail_bodyparts.dm b/modular_skyrat/modules/bodyparts/code/snail_bodyparts.dm deleted file mode 100644 index 3dae7d44d8322d..00000000000000 --- a/modular_skyrat/modules/bodyparts/code/snail_bodyparts.dm +++ /dev/null @@ -1,18 +0,0 @@ -/obj/item/bodypart/head/snail - icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC - head_flags = HEAD_HAIR|HEAD_FACIAL_HAIR|HEAD_EYESPRITES|HEAD_EYECOLOR|HEAD_DEBRAIN - -/obj/item/bodypart/chest/snail - icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC - -/obj/item/bodypart/arm/left/snail - icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC - -/obj/item/bodypart/arm/right/snail - icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC - -/obj/item/bodypart/leg/left/snail - icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC - -/obj/item/bodypart/leg/right/snail - icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC diff --git a/modular_skyrat/modules/borg_buffs/code/robot.dm b/modular_skyrat/modules/borg_buffs/code/robot.dm deleted file mode 100644 index 8a2dfb110c8ba0..00000000000000 --- a/modular_skyrat/modules/borg_buffs/code/robot.dm +++ /dev/null @@ -1,248 +0,0 @@ -#define BASE_SHAKER_JUICE_REAGENTS list(\ - /datum/reagent/consumable/aloejuice,\ - /datum/reagent/consumable/applejuice,\ - /datum/reagent/consumable/banana,\ - /datum/reagent/consumable/berryjuice,\ - /datum/reagent/consumable/blumpkinjuice,\ - /datum/reagent/consumable/carrotjuice,\ - /datum/reagent/consumable/grapejuice,\ - /datum/reagent/consumable/lemonjuice,\ - /datum/reagent/consumable/lemon_lime,\ - /datum/reagent/consumable/limejuice,\ - /datum/reagent/consumable/parsnipjuice,\ - /datum/reagent/consumable/peachjuice,\ - /datum/reagent/consumable/pineapplejuice,\ - /datum/reagent/consumable/potato_juice,\ - /datum/reagent/consumable/pumpkinjuice,\ - /datum/reagent/consumable/orangejuice,\ - /datum/reagent/consumable/tomatojuice,\ - /datum/reagent/consumable/watermelonjuice\ - ) - -#define BASE_SHAKER_ALCOHOL_REAGENTS list(\ - /datum/reagent/consumable/ethanol/absinthe,\ - /datum/reagent/consumable/ethanol/ale,\ - /datum/reagent/consumable/ethanol/amaretto,\ - /datum/reagent/consumable/ethanol/applejack,\ - /datum/reagent/consumable/ethanol/beer,\ - /datum/reagent/consumable/ethanol/cognac,\ - /datum/reagent/consumable/ethanol/champagne,\ - /datum/reagent/consumable/ethanol/creme_de_cacao,\ - /datum/reagent/consumable/ethanol/creme_de_coconut,\ - /datum/reagent/consumable/ethanol/creme_de_menthe,\ - /datum/reagent/consumable/ethanol,\ - /datum/reagent/consumable/ethanol/gin,\ - /datum/reagent/consumable/ethanol/hooch,\ - /datum/reagent/consumable/ethanol/kahlua,\ - /datum/reagent/consumable/laughter,\ - /datum/reagent/consumable/ethanol/lizardwine,\ - /datum/reagent/consumable/ethanol/beer/maltliquor,\ - /datum/reagent/consumable/nothing,\ - /datum/reagent/consumable/ethanol/rum,\ - /datum/reagent/consumable/ethanol/sake,\ - /datum/reagent/consumable/ethanol/synthanol,\ - /datum/reagent/consumable/ethanol/tequila,\ - /datum/reagent/consumable/ethanol/triple_sec,\ - /datum/reagent/consumable/ethanol/vermouth,\ - /datum/reagent/consumable/ethanol/vodka,\ - /datum/reagent/consumable/ethanol/whiskey,\ - /datum/reagent/consumable/ethanol/wine\ - ) - -#define BASE_SHAKER_SODA_REAGENTS list(\ - /datum/reagent/consumable/dr_gibb,\ - /datum/reagent/consumable/grape_soda,\ - /datum/reagent/consumable/pwr_game,\ - /datum/reagent/consumable/shamblers,\ - /datum/reagent/consumable/sodawater,\ - /datum/reagent/consumable/sol_dry,\ - /datum/reagent/consumable/space_up,\ - /datum/reagent/consumable/space_cola,\ - /datum/reagent/consumable/spacemountainwind\ - ) - -#define BASE_SHAKER_MISC_REAGENTS list(\ - /datum/reagent/consumable/blackpepper,\ - /datum/reagent/blood,\ - /datum/reagent/pax/catnip,\ - /datum/reagent/consumable/coco,\ - /datum/reagent/toxin/coffeepowder,\ - /datum/reagent/consumable/cream,\ - /datum/reagent/consumable/enzyme,\ - /datum/reagent/consumable/eggyolk,\ - /datum/reagent/consumable/honey,\ - /datum/reagent/consumable/grenadine,\ - /datum/reagent/consumable/ice,\ - /datum/reagent/iron,\ - /datum/reagent/consumable/menthol,\ - /datum/reagent/consumable/milk,\ - /datum/reagent/toxin/mushroom_powder,\ - /datum/reagent/consumable/nutriment,\ - /datum/reagent/consumable/soymilk,\ - /datum/reagent/consumable/sugar,\ - /datum/reagent/toxin/teapowder,\ - /datum/reagent/consumable/tonic,\ - /datum/reagent/consumable/vanilla,\ - /datum/reagent/water\ - ) - - -/obj/item/reagent_containers/borghypo/borgshaker/specific - icon = 'modular_skyrat/modules/borg_buffs/icons/items_cyborg.dmi' - icon_state = "misc" - -/obj/item/reagent_containers/borghypo/borgshaker/specific/juice - name = "cyborg juice shaker" - icon_state = "juice" - default_reagent_types = BASE_SHAKER_JUICE_REAGENTS - -/obj/item/reagent_containers/borghypo/borgshaker/specific/alcohol - name = "cyborg alcohol shaker" - icon_state = "alcohol" - default_reagent_types = BASE_SHAKER_ALCOHOL_REAGENTS - -/obj/item/reagent_containers/borghypo/borgshaker/specific/soda - name = "cyborg soda shaker" - icon_state = "soda" - default_reagent_types = BASE_SHAKER_SODA_REAGENTS - -/obj/item/reagent_containers/borghypo/borgshaker/specific/misc - name = "cyborg misc shaker" - icon_state = "misc" - default_reagent_types = BASE_SHAKER_MISC_REAGENTS - -/obj/item/cooking/cyborg/power - name = "automated cooking tool" - desc = "A cyborg fitted module resembling the rolling pins and Knifes" - icon = 'modular_skyrat/modules/borg_buffs/icons/items_cyborg.dmi' - icon_state = "knife_screw_cyborg" - hitsound = 'sound/items/drill_hit.ogg' - usesound = 'sound/items/drill_use.ogg' - toolspeed = 0.5 - tool_behaviour = TOOL_KNIFE - -/obj/item/cooking/cyborg/power/examine() - . = ..() - . += " It's fitted with a [tool_behaviour == TOOL_KNIFE ? "knife" : "rolling pin"] head." - -/obj/item/cooking/cyborg/power/attack_self(mob/user) - playsound(get_turf(user), 'sound/items/change_drill.ogg', 50, TRUE) - if(tool_behaviour != TOOL_ROLLINGPIN) - tool_behaviour = TOOL_ROLLINGPIN - to_chat(user, span_notice("You attach the rolling pin bit to [src].")) - icon_state = "rolling_bolt_cyborg" - else - tool_behaviour = TOOL_KNIFE - to_chat(user, span_notice("You attach the knife bit to [src].")) - icon_state = "knife_screw_cyborg" - -/obj/item/inducer/cyborg - name = "Cyborg Inducer" - desc = "A tool for inductively charging internal power cells using the battery of a cyborg" - powertransfer = 250 - var/power_safety_threshold = 1000 - - - -/obj/item/inducer/cyborg/attackby(obj/item/weapon, mob/user) - return - -/obj/item/inducer/cyborg/recharge(atom/movable/target_atom, mob/user) - if(!iscyborg(user)) - return - var/mob/living/silicon/robot/borg_user = user - cell = borg_user.cell - if(!isturf(target_atom) && user.loc == target_atom) - return FALSE - if(recharging) - return TRUE - else - recharging = TRUE - var/obj/item/stock_parts/cell/target_cell = target_atom.get_cell() - var/obj/target_object - var/coefficient = 1 - if(istype(target_atom, /obj/item/gun/energy)) - to_chat(user, span_alert("Error unable to interface with device.")) - return FALSE - if(istype(target_atom, /obj/item/clothing/suit/space)) - to_chat(user, span_alert("Error unable to interface with device.")) - return FALSE - if(cell.charge <= power_safety_threshold ) // Cyborg charge safety. Prevents a borg from inducing themself to death. - to_chat(user, span_alert("Unable to charge device. User battery safety engaged.")) - return - if(istype(target_atom, /obj)) - target_object = target_atom - if(target_cell) - var/done_any = FALSE - if(target_cell.charge >= target_cell.maxcharge) - to_chat(user, span_notice("[target_atom] is fully charged!")) - recharging = FALSE - return TRUE - user.visible_message(span_notice("[user] starts recharging [target_atom] with [src]."), span_notice("You start recharging [target_atom] with [src].")) - while(target_cell.charge < target_cell.maxcharge) - if(do_after(user, 1 SECONDS, target = user) && cell.charge > (power_safety_threshold + powertransfer)) - done_any = TRUE - induce(target_cell, coefficient) - do_sparks(1, FALSE, target_atom) - if(target_object) - target_object.update_appearance() - else - break - if(done_any) // Only show a message if we succeeded at least once - user.visible_message(span_notice("[user] recharged [target_atom]!"), span_notice("You recharged [target_atom]!")) - recharging = FALSE - return TRUE - recharging = FALSE - - -/obj/item/inducer/attack(mob/target_mob, mob/living/user) - if(user.combat_mode) - return ..() - - if(cantbeused(user)) - return - - if(recharge(target_mob, user)) - return - return ..() - -/obj/item/inducer/cyborg/attack_self(mob/user) - return - -// Wirebrush for janiborg -/datum/design/borg_wirebrush - name = "Wire-brush Module" - id = "borg_upgrade_brush" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/wirebrush - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2) - construction_time = 40 - category = list(RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_JANITOR) - -/obj/item/borg/upgrade/wirebrush - name = "janitor cyborg wire-brush" - desc = "A tool to remove rust from walls." - icon_state = "cyborg_upgrade3" - require_model = TRUE - model_type = list(/obj/item/robot_model/janitor) - model_flags = BORG_MODEL_JANITOR - -/obj/item/borg/upgrade/wirebrush/action(mob/living/silicon/robot/cyborg) - . = ..() - if(.) - for(var/obj/item/wirebrush/brush in cyborg.model.modules) - cyborg.model.remove_module(brush, TRUE) - - var/obj/item/wirebrush/brush = new /obj/item/wirebrush(cyborg.model) - cyborg.model.basic_modules += brush - cyborg.model.add_module(brush, FALSE, TRUE) - -/obj/item/borg/upgrade/wirebrush/deactivate(mob/living/silicon/robot/cyborg, user = usr) - . = ..() - if(.) - for(var/obj/item/wirebrush/brush in cyborg.model.modules) - cyborg.model.remove_module(brush, TRUE) - - var/obj/item/wirebrush/brush = new (cyborg.model) - cyborg.model.basic_modules += brush - cyborg.model.add_module(brush, FALSE, TRUE) diff --git a/modular_skyrat/modules/borgs/code/mechafabricator_designs.dm b/modular_skyrat/modules/borgs/code/mechafabricator_designs.dm deleted file mode 100644 index a8d8c0046ff6fa..00000000000000 --- a/modular_skyrat/modules/borgs/code/mechafabricator_designs.dm +++ /dev/null @@ -1,152 +0,0 @@ -/datum/design/borg_upgrade_shrink - name = "Shrink Module" - id = "borg_upgrade_shrink" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/shrink - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 10, /datum/material/glass=SHEET_MATERIAL_AMOUNT * 4) - construction_time = 120 - category = list(RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL) - -/datum/design/borg_upgrade_surgicaltools - name = "Advanced Surgical Tools Module" - id = "borg_upgrade_surgicaltools" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/surgerytools - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 7, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, /datum/material/silver = SHEET_MATERIAL_AMOUNT * 3, /datum/material/gold = SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SMALL_MATERIAL_AMOUNT, /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 4, /datum/material/plasma = SHEET_MATERIAL_AMOUNT) - construction_time = 80 - category = list(RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL) - -/datum/design/affection_module - name = "Affection Module" - id = "affection_module" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/affectionmodule - materials = list(/datum/material/iron=HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass=HALF_SHEET_MATERIAL_AMOUNT) - construction_time = 40 - category = list(RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL) - -/datum/design/advanced_materials - name = "Advanced Materials Module" - id = "advanced_materials" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/advanced_materials - materials = list( - /datum/material/titanium=SHEET_MATERIAL_AMOUNT * 5, - /datum/material/iron=SHEET_MATERIAL_AMOUNT * 5, - /datum/material/uranium=SHEET_MATERIAL_AMOUNT * 5, - /datum/material/glass=SHEET_MATERIAL_AMOUNT * 5, - /datum/material/plasma=SHEET_MATERIAL_AMOUNT * 3, - ) - category = list(RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ENGINEERING) - -/datum/design/inducer_upgrade - name = "Inducer Module" - id = "inducer_module" - construction_time = 60 - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/inducer - materials = list( - /datum/material/iron=SHEET_MATERIAL_AMOUNT * 5, - /datum/material/gold=SHEET_MATERIAL_AMOUNT * 2, - /datum/material/plasma=SHEET_MATERIAL_AMOUNT, - ) - category = list(RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ENGINEERING) - -/datum/design/borg_shapeshifter_module - name = "Shapeshifting Module" - id = "borg_shapeshifter_module" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/borg_shapeshifter - materials = list(/datum/material/silver = SHEET_MATERIAL_AMOUNT * 5, /datum/material/plasma = SHEET_MATERIAL_AMOUNT * 5, /datum/material/diamond = SHEET_MATERIAL_AMOUNT * 2) - construction_time = 120 - category = list(RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL) - -/datum/design/borg_upgrade_welding - name = "Welding Module" - id = "borg_upgrade_welding" - construction_time = 6 SECONDS - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/welder - materials = list( - /datum/material/iron=SHEET_MATERIAL_AMOUNT * 5, - /datum/material/plasma=SHEET_MATERIAL_AMOUNT * 1, - ) - category = list(RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MINING) - -//Cyborg Skyrat overrides -/datum/design/borg_suit - name = "Cyborg Endoskeleton" - id = "borg_suit" - build_type = MECHFAB - build_path = /obj/item/robot_suit - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 3) - construction_time = 8 SECONDS - category = list( - RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS - ) - -/datum/design/borg_chest - name = "Cyborg Torso" - id = "borg_chest" - build_type = MECHFAB - build_path = /obj/item/bodypart/chest/robot - materials = list(/datum/material/iron= SHEET_MATERIAL_AMOUNT * 8) - construction_time = 12 SECONDS - category = list( - RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS - ) - -/datum/design/borg_head - name = "Cyborg Head" - id = "borg_head" - build_type = MECHFAB - build_path = /obj/item/bodypart/head/robot - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT) - construction_time = 4 SECONDS - category = list( - RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS - ) - -/datum/design/borg_l_arm - name = "Cyborg Left Arm" - id = "borg_l_arm" - build_type = MECHFAB - build_path = /obj/item/bodypart/arm/left/robot - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 2) - construction_time = 8 SECONDS - category = list( - RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS - ) - -/datum/design/borg_r_arm - name = "Cyborg Right Arm" - id = "borg_r_arm" - build_type = MECHFAB - build_path = /obj/item/bodypart/arm/right/robot - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 2) - construction_time = 8 SECONDS - category = list( - RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS - ) - -/datum/design/borg_l_leg - name = "Cyborg Left Leg" - id = "borg_l_leg" - build_type = MECHFAB - build_path = /obj/item/bodypart/leg/left/robot - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 2) - construction_time = 8 SECONDS - category = list( - RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS - ) - -/datum/design/borg_r_leg - name = "Cyborg Right Leg" - id = "borg_r_leg" - build_type = MECHFAB - build_path = /obj/item/bodypart/leg/right/robot - materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 2) - construction_time = 8 SECONDS - category = list( - RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS - ) diff --git a/modular_skyrat/modules/borgs/code/robot.dm b/modular_skyrat/modules/borgs/code/robot.dm deleted file mode 100644 index 3de94b08d8ceb1..00000000000000 --- a/modular_skyrat/modules/borgs/code/robot.dm +++ /dev/null @@ -1,110 +0,0 @@ -/mob/living/silicon/robot/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) - . = ..() - if(robot_resting) - robot_resting = FALSE - on_standing_up() - update_icons() - -/mob/living/silicon/robot/toggle_resting() - robot_lay_down() - -/mob/living/silicon/robot/on_lying_down(new_lying_angle) - if(layer == initial(layer)) //to avoid things like hiding larvas. - layer = LYING_MOB_LAYER //so mob lying always appear behind standing mobs - density = FALSE // We lose density and stop bumping passable dense things. - - if(model && model.model_features && (R_TRAIT_TALL in model.model_features)) - maptext_height = 32 //Offset base chat-height value - - // Resting effects - var/turf/sit_pos = get_turf(src) - var/obj/structure/table/tabled = locate(/obj/structure/table) in sit_pos.contents - if(!tabled) - new /obj/effect/temp_visual/mook_dust/robot(get_turf(src)) - playsound(src, 'modular_skyrat/master_files/sound/effects/robot_sit.ogg', 25, TRUE) - return - else - new /obj/effect/temp_visual/mook_dust/robot/table(get_turf(src)) - playsound(src, 'modular_skyrat/master_files/sound/effects/robot_bump.ogg', 50, TRUE) - - var/list/items_to_move = list() - - for(var/obj/item/gen_item in sit_pos.contents) - if(!gen_item.anchored) - items_to_move += gen_item - if(items_to_move.len >= 8) - break - - for(var/obj/item/table_contents in items_to_move) - - table_contents.throw_at(get_ranged_target_turf(table_contents, pick(GLOB.cardinals), range = 1), range = 1, speed = 1) - - -/mob/living/silicon/robot/on_standing_up() - if(layer == LYING_MOB_LAYER) - layer = initial(layer) - density = initial(density) // We were prone before, so we become dense and things can bump into us again. - if(model && model.model_features && (R_TRAIT_TALL in model.model_features)) - maptext_height = 48 //Offset value of tallborgs - -/mob/living/silicon/robot/proc/rest_style() - set name = "Switch Rest Style" - set category = "AI Commands" - set desc = "Select your resting pose." - if(!can_rest()) - to_chat(src, span_warning("You can't do that!")) - return - var/choice = tgui_alert(src, "Select resting pose", "", list("Resting", "Sitting", "Belly up")) - switch(choice) - if("Resting") - robot_rest_style = ROBOT_REST_NORMAL - if("Sitting") - robot_rest_style = ROBOT_REST_SITTING - if("Belly up") - robot_rest_style = ROBOT_REST_BELLY_UP - robot_resting = robot_rest_style - if (robot_resting) - on_lying_down() - update_icons() - -/mob/living/silicon/robot/proc/robot_lay_down() - set name = "Lay down" - set category = "AI Commands" - if(!can_rest()) - to_chat(src, span_warning("You can't do that!")) - return - if(stat != CONSCIOUS) //Make sure we don't enable movement when not concious - return - if(robot_resting) - to_chat(src, span_notice("You are now getting up.")) - robot_resting = FALSE - mobility_flags = MOBILITY_FLAGS_DEFAULT - on_standing_up() - else - to_chat(src, span_notice("You are now laying down.")) - robot_resting = robot_rest_style - on_lying_down() - update_icons() - -/mob/living/silicon/robot/update_resting() - . = ..() - if(can_rest()) - robot_resting = FALSE - update_icons() - -/mob/living/silicon/robot/update_module_innate() - ..() - if(hands) - hands.icon = (model.model_select_alternate_icon ? model.model_select_alternate_icon : initial(hands.icon)) - -/** - * Safe check of the cyborg's model_features list. - * - * model_features is defined in modular_skyrat\modules\altborgs\code\modules\mob\living\silicon\robot\robot_model.dm. - */ -/mob/living/silicon/robot/proc/can_rest() - if(model && model.model_features && ((R_TRAIT_WIDE in model.model_features) || (R_TRAIT_TALL in model.model_features))) - if(TRAIT_IMMOBILIZED in _status_traits) - return FALSE - return TRUE - return FALSE diff --git a/modular_skyrat/modules/borgs/code/robot_model.dm b/modular_skyrat/modules/borgs/code/robot_model.dm deleted file mode 100644 index ffdd2d5e6845f8..00000000000000 --- a/modular_skyrat/modules/borgs/code/robot_model.dm +++ /dev/null @@ -1,570 +0,0 @@ -/obj/item/robot_model - var/icon/cyborg_icon_override - var/sleeper_overlay - var/cyborg_pixel_offset - var/model_select_alternate_icon - /// Traits unique to this model, i.e. having a unique dead sprite, being wide or being small enough to reject shrinker modules. Leverages defines in code\__DEFINES\~skyrat_defines\robot_defines.dm - /// If a sprite overlaps above the standard height, ensure it is not overlapping icons in the selector wheel. - var/list/model_features = list() - -/obj/item/robot_model/proc/update_tallborg() - var/mob/living/silicon/robot/cyborg = robot || loc - if (!istype(robot)) - return - if (model_features && (R_TRAIT_TALL in model_features)) - cyborg.maptext_height = 48 //Runechat blabla - cyborg.AddElement(/datum/element/footstep, FOOTSTEP_MOB_SHOE, 2, -6, sound_vary = TRUE) - add_verb(cyborg, /mob/living/silicon/robot/proc/robot_lay_down) - switch(cyborg_base_icon) - if("mekamine") - cyborg.AddComponent(/datum/component/robot_smoke) - else - - else - cyborg.maptext_height = initial(cyborg.maptext_height) - cyborg.RemoveElement(/datum/element/footstep, FOOTSTEP_MOB_SHOE, 2, -6, sound_vary = TRUE) - remove_verb(cyborg, /mob/living/silicon/robot/proc/robot_lay_down) - if(cyborg.GetComponent(/datum/component/robot_smoke)) - qdel(cyborg.GetComponent(/datum/component/robot_smoke)) - QDEL_NULL(cyborg.particles) // Removing left over particles - - -/obj/item/robot_model/proc/update_dogborg() - var/mob/living/silicon/robot/cyborg = robot || loc - if (!istype(robot)) - return - if (model_features && (R_TRAIT_WIDE in model_features)) - hat_offset = INFINITY - cyborg.set_base_pixel_x(-16) - add_verb(cyborg, /mob/living/silicon/robot/proc/robot_lay_down) - add_verb(cyborg, /mob/living/silicon/robot/proc/rest_style) - else - cyborg.set_base_pixel_x(0) - remove_verb(cyborg, /mob/living/silicon/robot/proc/robot_lay_down) - remove_verb(cyborg, /mob/living/silicon/robot/proc/rest_style) - -//STANDARD -/obj/item/robot_model/standard - name = "Standard" - borg_skins = list( - "Default" = list(SKIN_ICON_STATE = "robot", SKIN_FEATURES = list(R_TRAIT_SMALL)), - "Marina" = list(SKIN_ICON_STATE = "marinasd", SKIN_ICON = CYBORG_ICON_STANDARD, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK)), - "Heavy" = list(SKIN_ICON_STATE = "heavysd", SKIN_ICON = CYBORG_ICON_STANDARD, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK)), - "Eyebot" = list(SKIN_ICON_STATE = "eyebotsd", SKIN_ICON = CYBORG_ICON_STANDARD, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL)), - "Robot" = list(SKIN_ICON_STATE = "robot_old", SKIN_ICON = CYBORG_ICON_STANDARD, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK)), - "Bootyborg" = list(SKIN_ICON_STATE = "bootysd", SKIN_ICON = CYBORG_ICON_STANDARD), - "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootysd", SKIN_ICON = CYBORG_ICON_STANDARD), - "Protectron" = list(SKIN_ICON_STATE = "protectron_standard", SKIN_ICON = CYBORG_ICON_STANDARD), - "Miss M" = list(SKIN_ICON_STATE = "missm_sd", SKIN_ICON = CYBORG_ICON_STANDARD), - "Partyhound" = list(SKIN_ICON_STATE = "k69", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)) - ) - -//SERVICE -/obj/item/robot_model/service - special_light_key = null - borg_skins = list( - /// 32x32 Skins - "Waitress" = list(SKIN_ICON_STATE = "service_f", SKIN_LIGHT_KEY = "service"), - "Butler" = list(SKIN_ICON_STATE = "service_m", SKIN_LIGHT_KEY = "service"), - "Bro" = list(SKIN_ICON_STATE = "brobot", SKIN_LIGHT_KEY = "service"), - "Tophat" = list(SKIN_ICON_STATE = "tophat", SKIN_HAT_OFFSET = INFINITY), - "Sleek" = list(SKIN_ICON_STATE = "sleekserv", SKIN_ICON = CYBORG_ICON_SERVICE), - "Heavy" = list(SKIN_ICON_STATE = "heavyserv", SKIN_ICON = CYBORG_ICON_SERVICE), - "Kent" = list(SKIN_ICON_STATE = "kent", SKIN_LIGHT_KEY = "medical", SKIN_HAT_OFFSET = 3), - "Can" = list(SKIN_ICON_STATE = "kent", SKIN_LIGHT_KEY = "medical", SKIN_HAT_OFFSET = 3), - "Zoomba" = list(SKIN_ICON_STATE = "zoomba_green", SKIN_ICON = CYBORG_ICON_SERVICE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL), SKIN_HAT_OFFSET = -13), - "ARACHNE" = list(SKIN_ICON_STATE = "arachne_service", SKIN_ICON = CYBORG_ICON_SERVICE), - "Slipper" = list(SKIN_ICON_STATE = "slipper_service", SKIN_ICON = CYBORG_ICON_SERVICE), - "Bootyborg" = list(SKIN_ICON_STATE = "bootyservice", SKIN_ICON = CYBORG_ICON_SERVICE), - "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyservice", SKIN_ICON = CYBORG_ICON_SERVICE), - "Birdborg" = list(SKIN_ICON_STATE = "bird_serv", SKIN_ICON = CYBORG_ICON_SERVICE), - "Protectron" = list(SKIN_ICON_STATE = "protectron_service", SKIN_ICON = CYBORG_ICON_SERVICE), - "Miss M" = list(SKIN_ICON_STATE = "missm_service", SKIN_ICON = CYBORG_ICON_SERVICE), - "Mech" = list(SKIN_ICON_STATE = "lloyd", SKIN_ICON = CYBORG_ICON_SERVICE), - "Handy" = list(SKIN_ICON_STATE = "handy-service", SKIN_ICON = CYBORG_ICON_SERVICE), - /// 64x32 skins - "Borgi" = list(SKIN_ICON_STATE = "borgi-serv", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE, R_TRAIT_SMALL)), - "Drake" = list(SKIN_ICON_STATE = "drakeserv", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Vale" = list(SKIN_ICON_STATE = "valeserv", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "ValeDark" = list(SKIN_ICON_STATE = "valeservdark", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Darkhound" = list(SKIN_ICON_STATE = "k50", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Partyhound" = list(SKIN_ICON_STATE = "k69", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - /// 32x64 skins - "Meka" = list(SKIN_ICON_STATE = "mekaserve", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "Meka (Alt)" = list(SKIN_ICON_STATE = "mekaserve_alt", SKIN_LIGHT_KEY = "mekaserve", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKA" = list(SKIN_ICON_STATE = "fmekaserv", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKO" = list(SKIN_ICON_STATE = "mmekaserv", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Barista)" = list(SKIN_ICON_STATE = "k4tserve", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (80s)" = list(SKIN_ICON_STATE = "k4tserve_alt1", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Dispenser)" = list(SKIN_ICON_STATE = "k4tserve_alt2", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) - ) - -//MINING -/obj/item/robot_model/miner - special_light_key = null - borg_skins = list( - /// 32x32 Skins - "Lavaland" = list(SKIN_ICON_STATE = "miner", SKIN_LIGHT_KEY = "miner"), - "Asteroid" = list(SKIN_ICON_STATE = "minerOLD", SKIN_LIGHT_KEY = "miner"), - "Drone" = list(SKIN_ICON_STATE = "miningdrone", SKIN_ICON = CYBORG_ICON_MINING, SKIN_FEATURES = list(R_TRAIT_SMALL)), - "Zoomba" = list(SKIN_ICON_STATE = "zoomba_miner", SKIN_ICON = CYBORG_ICON_MINING, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL), SKIN_HAT_OFFSET = -13), - "Slipper" = list(SKIN_ICON_STATE = "slipper_mine", SKIN_ICON = CYBORG_ICON_MINING), - "Spider Miner" = list(SKIN_ICON_STATE = "spidermin", SKIN_LIGHT_KEY = "miner"), - "Droid" = list(SKIN_ICON_STATE = "miner", SKIN_ICON = CYBORG_ICON_MINING, SKIN_HAT_OFFSET = 4), - "Sleek" = list(SKIN_ICON_STATE = "sleekmin", SKIN_ICON = CYBORG_ICON_MINING), - "Can" = list(SKIN_ICON_STATE = "canmin", SKIN_ICON = CYBORG_ICON_MINING), - "Marina" = list(SKIN_ICON_STATE = "marinamin", SKIN_ICON = CYBORG_ICON_MINING), - "Spider" = list(SKIN_ICON_STATE = "spidermin", SKIN_ICON = CYBORG_ICON_MINING), - "Heavy" = list(SKIN_ICON_STATE = "heavymin", SKIN_ICON = CYBORG_ICON_MINING), - "Bootyborg" = list(SKIN_ICON_STATE = "bootyminer", SKIN_ICON = CYBORG_ICON_MINING), - "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyminer", SKIN_ICON = CYBORG_ICON_MINING), - "Birdborg" = list(SKIN_ICON_STATE = "bird_mine", SKIN_ICON = CYBORG_ICON_MINING), - "Protectron" = list(SKIN_ICON_STATE = "protectron_miner", SKIN_ICON = CYBORG_ICON_MINING), - "Miss M" = list(SKIN_ICON_STATE = "missm_miner", SKIN_ICON = CYBORG_ICON_MINING), - "Mech" = list(SKIN_ICON_STATE = "ishimura", SKIN_ICON = CYBORG_ICON_MINING), - /// 64x32 skins - "Blade" = list(SKIN_ICON_STATE = "blade", SKIN_ICON = CYBORG_ICON_MINING_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Vale" = list(SKIN_ICON_STATE = "valemine", SKIN_ICON = CYBORG_ICON_MINING_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Drake" = list(SKIN_ICON_STATE = "drakemine", SKIN_ICON = CYBORG_ICON_MINING_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Hound" = list(SKIN_ICON_STATE = "cargohound", SKIN_ICON = CYBORG_ICON_MINING_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Darkhound" = list(SKIN_ICON_STATE = "cargohounddark", SKIN_ICON = CYBORG_ICON_MINING_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Otie" = list(SKIN_ICON_STATE = "otiec", SKIN_ICON = CYBORG_ICON_MINING_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - /// 32x64 skins - "Meka" = list(SKIN_ICON_STATE = "mekamine", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Rookie)" = list(SKIN_ICON_STATE = "k4tmine", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Veteran)" = list(SKIN_ICON_STATE = "k4tmine_alt1", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKA" = list(SKIN_ICON_STATE = "fmekamine", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKO" = list(SKIN_ICON_STATE = "mmekamine", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) - ) - -//CLOWN -/obj/item/robot_model/clown - borg_skins = list( - "Default" = list(SKIN_ICON_STATE = "clown"), - "Bootyborg" = list(SKIN_ICON_STATE = "bootyclown", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi'), - "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyclown", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi'), - "ARACHNE" = list(SKIN_ICON_STATE = "arachne_clown", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi'), - "Slipper" = list(SKIN_ICON_STATE = "slipper_clown", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi'), - "Marina" = list(SKIN_ICON_STATE = "marina_mommy", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi', SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK)), - "Garish" = list(SKIN_ICON_STATE = "garish", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi'), - "Robot" = list(SKIN_ICON_STATE = "clownbot", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi'), - "Sleek" = list(SKIN_ICON_STATE = "clownman", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi', SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK)), - /// 32x64 skins - "K4T" = list(SKIN_ICON_STATE = "k4tclown", SKIN_ICON = CYBORG_ICON_CLOWN_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) - ) - -//ENGINEERING -/obj/item/robot_model/engineering - borg_skins = list( - /// 32x32 Skins - "Default" = list(SKIN_ICON_STATE = "engineer", SKIN_FEATURES = list(R_TRAIT_SMALL)), - "Zoomba" = list(SKIN_ICON_STATE = "zoomba_engi", SKIN_ICON = CYBORG_ICON_ENG, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL), SKIN_HAT_OFFSET = -13), - "Default - Treads" = list(SKIN_ICON_STATE = "engi-tread", SKIN_LIGHT_KEY = "engineer", SKIN_ICON = CYBORG_ICON_ENG), - "Loader" = list(SKIN_ICON_STATE = "loaderborg", SKIN_ICON = CYBORG_ICON_ENG, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK)), - "Handy" = list(SKIN_ICON_STATE = "handyeng", SKIN_ICON = CYBORG_ICON_ENG), - "Sleek" = list(SKIN_ICON_STATE = "sleekeng", SKIN_ICON = CYBORG_ICON_ENG), - "Can" = list(SKIN_ICON_STATE = "caneng", SKIN_ICON = CYBORG_ICON_ENG), - "Marina" = list(SKIN_ICON_STATE = "marinaeng", SKIN_ICON = CYBORG_ICON_ENG), - "Spider" = list(SKIN_ICON_STATE = "spidereng", SKIN_ICON = CYBORG_ICON_ENG), - "Heavy" = list(SKIN_ICON_STATE = "heavyeng", SKIN_ICON = CYBORG_ICON_ENG), - "Bootyborg" = list(SKIN_ICON_STATE = "bootyeng", SKIN_ICON = CYBORG_ICON_ENG), - "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyeng", SKIN_ICON = CYBORG_ICON_ENG), - "Birdborg" = list(SKIN_ICON_STATE = "bird_eng", SKIN_ICON = CYBORG_ICON_ENG), - "Protectron" = list(SKIN_ICON_STATE = "protectron_eng", SKIN_ICON = CYBORG_ICON_ENG), - "Miss M" = list(SKIN_ICON_STATE = "missm_eng", SKIN_ICON = CYBORG_ICON_ENG), - "Mech" = list(SKIN_ICON_STATE = "conagher", SKIN_ICON = CYBORG_ICON_ENG), - "Wide" = list(SKIN_ICON_STATE = "wide-engi", SKIN_ICON = CYBORG_ICON_ENG), - "ARACHNE" = list(SKIN_ICON_STATE = "arachne_engi", SKIN_ICON = CYBORG_ICON_ENG), - "Slipper" = list(SKIN_ICON_STATE = "slipper_engi", SKIN_ICON = CYBORG_ICON_ENG), - "Alina" = list(SKIN_ICON_STATE = "alina-eng", SKIN_LIGHT_KEY = "alina", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Eyebot" = list(SKIN_ICON_STATE = "eyeboteng", SKIN_ICON = CYBORG_ICON_ENG, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL)), - /// 64x32 Skins - "Borgi" = list(SKIN_ICON_STATE = "borgi-eng", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE, R_TRAIT_SMALL)), - "Otie" = list(SKIN_ICON_STATE = "otiee", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Pup Dozer" = list(SKIN_ICON_STATE = "pupdozer", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Vale" = list(SKIN_ICON_STATE = "valeeng", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Hound" = list(SKIN_ICON_STATE = "engihound", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Darkhound" = list(SKIN_ICON_STATE = "engihounddark", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Drake" = list(SKIN_ICON_STATE = "drakeeng", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - /// 32x64 Skins - "Meka" = list(SKIN_ICON_STATE = "mekaengi", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Technician)" = list(SKIN_ICON_STATE = "k4tengi", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Hazard)" = list(SKIN_ICON_STATE = "k4tengi_alt1", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKA" = list(SKIN_ICON_STATE = "fmekaeng", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKO" = list(SKIN_ICON_STATE = "mmekaeng", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) - ) - -/obj/item/robot_model/janitor - borg_skins = list( - /// 32x32 Skins - "Default" = list(SKIN_ICON_STATE = "janitor"), - "ARACHNE" = list(SKIN_ICON_STATE = "arachne_jani", SKIN_ICON = CYBORG_ICON_JANI), - "Slipper" = list(SKIN_ICON_STATE = "slipper_janitor", SKIN_ICON = CYBORG_ICON_JANI), - "Zoomba" = list(SKIN_ICON_STATE = "zoomba_jani", SKIN_ICON = CYBORG_ICON_JANI, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL), SKIN_HAT_OFFSET = -13), - "Marina" = list(SKIN_ICON_STATE = "marinajan", SKIN_ICON = CYBORG_ICON_JANI), - "Sleek" = list(SKIN_ICON_STATE = "sleekjan", SKIN_ICON = CYBORG_ICON_JANI), - "Can" = list(SKIN_ICON_STATE = "canjan", SKIN_ICON = CYBORG_ICON_JANI), - "Heavy" = list(SKIN_ICON_STATE = "heavyres", SKIN_ICON = CYBORG_ICON_JANI), - "Bootyborg" = list(SKIN_ICON_STATE = "bootyjanitor", SKIN_ICON = CYBORG_ICON_JANI), - "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyjanitor", SKIN_ICON = CYBORG_ICON_JANI), - "Birdborg" = list(SKIN_ICON_STATE = "bird_jani", SKIN_ICON = CYBORG_ICON_JANI), - "Protectron" = list(SKIN_ICON_STATE = "protectron_janitor", SKIN_ICON = CYBORG_ICON_JANI), - "Miss M" = list(SKIN_ICON_STATE = "missm_janitor", SKIN_ICON = CYBORG_ICON_JANI), - "Mech" = list(SKIN_ICON_STATE = "flynn", SKIN_ICON = CYBORG_ICON_JANI), - "Eyebot" = list(SKIN_ICON_STATE = "eyebotjani", SKIN_ICON = CYBORG_ICON_JANI, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL)), - "Insekt" = list(SKIN_ICON_STATE = "insekt-Sci", SKIN_ICON = CYBORG_ICON_JANI), - "Wide" = list(SKIN_ICON_STATE = "wide-jani", SKIN_ICON = CYBORG_ICON_JANI), - "Spider" = list(SKIN_ICON_STATE = "spidersci", SKIN_ICON = CYBORG_ICON_JANI), - /// 64x32 Skins - "Borgi" = list(SKIN_ICON_STATE = "borgi-jani", SKIN_ICON = CYBORG_ICON_JANI_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE, R_TRAIT_SMALL)), - "Scrubpuppy" = list(SKIN_ICON_STATE = "scrubpup", SKIN_ICON = CYBORG_ICON_JANI_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Drake" = list(SKIN_ICON_STATE = "drakejanit", SKIN_ICON = CYBORG_ICON_JANI_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Vale" = list(SKIN_ICON_STATE = "J9", SKIN_ICON = CYBORG_ICON_JANI_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Otie" = list(SKIN_ICON_STATE = "otiej", SKIN_ICON = CYBORG_ICON_JANI_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - /// 32x64 Skins - "Meka" = list(SKIN_ICON_STATE = "mekajani", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Viscera)" = list(SKIN_ICON_STATE = "k4tjani", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Domestic)" = list(SKIN_ICON_STATE = "k4tjani_alt1", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKA" = list(SKIN_ICON_STATE = "fmekajani", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKO" = list(SKIN_ICON_STATE = "mmekajani", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) - ) - -//MEDICAL -/obj/item/robot_model/medical - borg_skins = list( - /// 32x32 Skins - "Machinified Doctor" = list(SKIN_ICON_STATE = "medical", SKIN_TRAITS = list(R_TRAIT_SMALL)), - "Qualified Doctor" = list(SKIN_ICON_STATE = "qualified_doctor"), - "ARACHNE" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "arachne_med"), - "Slipper" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "slipper_med"), - "Zoomba" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "zoomba_med", SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL), SKIN_HAT_OFFSET = -13), - "Droid" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "medical", SKIN_HAT_OFFSET = 4), - "Sleek" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "sleekmed"), - "Marina" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "marinamed"), - "Eyebot" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "eyebotmed", SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL)), - "Heavy" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "heavymed"), - "Bootyborg" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "bootymedical"), - "Birdborg" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "bird_med"), - "Male Bootyborg" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "male_bootymedical"), - "Protectron" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "protectron_medical"), - "Miss M" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "missm_med"), - "Insekt" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "insekt-Med"), - "Mech" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "gibbs"), - /// 64x32 Skins - "Borgi" = list(SKIN_ICON = CYBORG_ICON_MED_WIDE, SKIN_ICON_STATE = "borgi-medi", SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Drake" = list(SKIN_ICON = CYBORG_ICON_MED_WIDE, SKIN_ICON_STATE = "drakemed", SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Hound" = list(SKIN_ICON = CYBORG_ICON_MED_WIDE, SKIN_ICON_STATE = "medihound", SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "DarkHound" = list(SKIN_ICON = CYBORG_ICON_MED_WIDE, SKIN_ICON_STATE = "medihounddark", SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Vale" = list(SKIN_ICON = CYBORG_ICON_MED_WIDE, SKIN_ICON_STATE = "valemed", SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Alina" = list(SKIN_ICON = CYBORG_ICON_MED_WIDE, SKIN_ICON_STATE = "alina-med", SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - /// 32x64 Skins - "Meka" = list(SKIN_ICON_STATE = "mekamed", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Doc)" = list(SKIN_ICON_STATE = "k4tmed", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Field Medic)" = list(SKIN_ICON_STATE = "k4tmed_alt1", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKA" = list(SKIN_ICON_STATE = "fmekamed", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKO" = list(SKIN_ICON_STATE = "mmekamed", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) - ) - -//PEACEKEEPER -/obj/item/robot_model/peacekeeper - borg_skins = list( - /// 32x32 Skins - "Default" = list(SKIN_ICON_STATE = "peace"), - "Zoomba" = list(SKIN_ICON_STATE = "zoomba_peace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL), SKIN_HAT_OFFSET = -13), - "ARACHNE" = list(SKIN_ICON_STATE = "arachne_peacekeeper", SKIN_ICON = CYBORG_ICON_PEACEKEEPER), - "Sleek" = list(SKIN_ICON_STATE = "sleekpeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK)), - "Spider" = list(SKIN_ICON_STATE = "whitespider", SKIN_ICON = CYBORG_ICON_PEACEKEEPER, SKIN_FEATURES = list(R_TRAIT_SMALL)), - "Marina" = list(SKIN_ICON_STATE = "marinapeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK)), - "Bootyborg" = list(SKIN_ICON_STATE = "bootypeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER), - "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootypeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER), - "Birdborg" = list(SKIN_ICON_STATE = "bird_pk", SKIN_ICON = CYBORG_ICON_PEACEKEEPER), - "Protectron" = list(SKIN_ICON_STATE = "protectron_peacekeeper", SKIN_ICON = CYBORG_ICON_PEACEKEEPER), - "Insekt" = list(SKIN_ICON_STATE = "insekt-Default", SKIN_ICON = CYBORG_ICON_PEACEKEEPER), - "Omni" = list(SKIN_ICON_STATE = "omoikane", SKIN_ICON = CYBORG_ICON_PEACEKEEPER, SKIN_FEATURES = list(R_TRAIT_SMALL)), - /// 64x32 Skins - "Drake" = list(SKIN_ICON_STATE = "drakepeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Borgi" = list(SKIN_ICON_STATE = "borgi", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE, R_TRAIT_SMALL)), - "Vale" = list(SKIN_ICON_STATE = "valepeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - /// 32x64 Skins - "Meka" = list(SKIN_ICON_STATE = "mekapeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T" = list(SKIN_ICON_STATE = "k4tpeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKA" = list(SKIN_ICON_STATE = "fmekapeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKO" = list(SKIN_ICON_STATE = "mmekapeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) - ) - -/obj/item/robot_model/security - borg_skins = list( - /// 32x32 Skins - "Default" = list(SKIN_ICON_STATE = "sec"), - "Zoomba" = list(SKIN_ICON_STATE = "zoomba_sec", SKIN_ICON = CYBORG_ICON_SEC, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL), SKIN_HAT_OFFSET = -13), - "Default - Treads" = list(SKIN_ICON_STATE = "sec-tread", SKIN_LIGHT_KEY = "sec", SKIN_ICON = CYBORG_ICON_SEC), - "Sleek" = list(SKIN_ICON_STATE = "sleeksec", SKIN_ICON = CYBORG_ICON_SEC), - "Marina" = list(SKIN_ICON_STATE = "marinasec", SKIN_ICON = CYBORG_ICON_SEC), - "Can" = list(SKIN_ICON_STATE = "cansec", SKIN_ICON = CYBORG_ICON_SEC), - "Spider" = list(SKIN_ICON_STATE = "spidersec", SKIN_ICON = CYBORG_ICON_SEC), - "Heavy" = list(SKIN_ICON_STATE = "heavysec", SKIN_ICON = CYBORG_ICON_SEC), - "Bootyborg" = list(SKIN_ICON_STATE = "bootysecurity", SKIN_ICON = CYBORG_ICON_SEC), - "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootysecurity", SKIN_ICON = CYBORG_ICON_SEC), - "Protectron" = list(SKIN_ICON_STATE = "protectron_security", SKIN_ICON = CYBORG_ICON_SEC), - "Miss M" = list(SKIN_ICON_STATE = "missm_security", SKIN_ICON = CYBORG_ICON_SEC), - "Eyebot" = list(SKIN_ICON_STATE = "eyebotsec", SKIN_ICON = CYBORG_ICON_SEC, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL)), - "Insekt" = list(SKIN_ICON_STATE = "insekt-Sec", SKIN_ICON = CYBORG_ICON_SEC), - "Mech" = list(SKIN_ICON_STATE = "woody", SKIN_ICON = CYBORG_ICON_SEC), - /// 64x32 Skins - "Borgi" = list(SKIN_ICON_STATE = "borgi-sec", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE, R_TRAIT_SMALL)), - "Hound" = list(SKIN_ICON_STATE = "k9", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Darkhound" = list(SKIN_ICON_STATE = "k9dark", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Drake" = list(SKIN_ICON_STATE = "drakesec", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Otie" = list(SKIN_ICON_STATE = "oties", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Alina" = list(SKIN_ICON_STATE = "alina-sec", SKIN_LIGHT_KEY = "alina", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Vale" = list(SKIN_ICON_STATE = "valesec", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - /// 32x64 Skins - "Meka" = list(SKIN_ICON_STATE = "mekasec", SKIN_ICON = CYBORG_ICON_SEC_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T" = list(SKIN_ICON_STATE = "k4tsec", SKIN_ICON = CYBORG_ICON_SEC_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKA" = list(SKIN_ICON_STATE = "fmekasec", SKIN_ICON = CYBORG_ICON_SEC_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKO" = list(SKIN_ICON_STATE = "mmekasec", SKIN_ICON = CYBORG_ICON_SEC_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) - ) - -// CARGO -/obj/item/robot_model/cargo - name = "Cargo" - basic_modules = list( - /obj/item/stamp, - /obj/item/stamp/denied, - /obj/item/pen/cyborg, - /obj/item/clipboard/cyborg, - /obj/item/boxcutter, - /obj/item/stack/package_wrap/cyborg, - /obj/item/stack/wrapping_paper/xmas/cyborg, - /obj/item/assembly/flash/cyborg, - /obj/item/borg/hydraulic_clamp, - /obj/item/borg/hydraulic_clamp/mail, - /obj/item/hand_labeler/cyborg, - /obj/item/dest_tagger, - /obj/item/crowbar/cyborg, - /obj/item/extinguisher, - /obj/item/universal_scanner, - ) - radio_channels = list(RADIO_CHANNEL_SUPPLY) - emag_modules = list( - /obj/item/stamp/chameleon, - /obj/item/borg/paperplane_crossbow, - ) - hat_offset = 0 - cyborg_base_icon = "cargo" - model_select_icon = "cargo" - canDispose = TRUE - borg_skins = list( - /// 32x32 Skins - "Technician" = list(SKIN_ICON_STATE = "cargoborg", SKIN_ICON = CYBORG_ICON_CARGO), - "Miss M" = list(SKIN_ICON_STATE = "missm_cargo", SKIN_ICON = CYBORG_ICON_CARGO), - "Zoomba" = list(SKIN_ICON_STATE = "zoomba_cargo", SKIN_ICON = CYBORG_ICON_CARGO, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL), SKIN_HAT_OFFSET = -13), - "Birdborg" = list(SKIN_ICON_STATE = "bird_cargo", SKIN_ICON = CYBORG_ICON_CARGO), - /// 64x32 Skins - "Borgi" = list(SKIN_ICON_STATE = "borgi-cargo", SKIN_ICON = CYBORG_ICON_CARGO_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE, R_TRAIT_SMALL)), - "Drake" = list(SKIN_ICON_STATE = "drakecargo", SKIN_ICON = CYBORG_ICON_CARGO_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Hound" = list(SKIN_ICON_STATE = "cargohound", SKIN_ICON = CYBORG_ICON_CARGO_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Darkhound" = list(SKIN_ICON_STATE = "cargohounddark", SKIN_ICON = CYBORG_ICON_CARGO_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Vale" = list(SKIN_ICON_STATE = "valecargo", SKIN_ICON = CYBORG_ICON_CARGO_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - /// 32x64 Skins - "Meka" = list(SKIN_ICON_STATE = "mekacargo", SKIN_ICON = CYBORG_ICON_CARGO_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Loader)" = list(SKIN_ICON_STATE = "k4tcargo", SKIN_ICON = CYBORG_ICON_CARGO_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Turtleneck)" = list(SKIN_ICON_STATE = "k4tcargo_alt1", SKIN_ICON = CYBORG_ICON_CARGO_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKA" = list(SKIN_ICON_STATE = "fmekacargo", SKIN_ICON = CYBORG_ICON_CARGO_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKO" = list(SKIN_ICON_STATE = "mmekacargo", SKIN_ICON = CYBORG_ICON_CARGO_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) - ) - - -//SYNDICATE -/obj/item/robot_model/syndicatejack - name = "Syndicate" - basic_modules = list( - /obj/item/assembly/flash/cyborg, - /obj/item/borg/sight/thermal, - /obj/item/extinguisher, - /obj/item/weldingtool/electric, - /obj/item/screwdriver/cyborg/power, - /obj/item/crowbar/cyborg/power, - /obj/item/multitool/cyborg, - /obj/item/construction/rcd/borg/syndicate, - /obj/item/lightreplacer/cyborg, - /obj/item/stack/sheet/iron, - /obj/item/stack/sheet/glass, - /obj/item/borg/apparatus/sheet_manipulator, - /obj/item/stack/rods/cyborg, - /obj/item/stack/tile/iron, - /obj/item/stack/cable_coil, - /obj/item/restraints/handcuffs/cable/zipties, - /obj/item/stack/medical/gauze, - /obj/item/shockpaddles/cyborg, - /obj/item/healthanalyzer/advanced, - /obj/item/surgical_drapes, - /obj/item/retractor/advanced, - /obj/item/cautery/advanced, - /obj/item/scalpel/advanced, - /obj/item/gun/medbeam, - /obj/item/reagent_containers/borghypo/syndicate, - /obj/item/borg/lollipop, - /obj/item/holosign_creator/cyborg, - /obj/item/stamp/chameleon, - /obj/item/borg_shapeshifter, - ) - cyborg_base_icon = "synd_engi" - model_select_icon = "malf" - model_traits = list(TRAIT_NEGATES_GRAVITY, TRAIT_PUSHIMMUNE) - hat_offset = INFINITY - canDispose = TRUE - borg_skins = list( - /// 32x32 Skins - "Saboteur" = list(SKIN_ICON_STATE = "synd_engi", SKIN_ICON = 'icons/mob/silicon/robots.dmi'), - "Medical" = list(SKIN_ICON_STATE = "synd_medical", SKIN_ICON = 'icons/mob/silicon/robots.dmi'), - "Assault" = list(SKIN_ICON_STATE = "synd_sec", SKIN_ICON = 'icons/mob/silicon/robots.dmi'), - "ARACHNE" = list(SKIN_ICON_STATE = "arachne_syndie", SKIN_ICON = CYBORG_ICON_SYNDIE), - "Heavy" = list(SKIN_ICON_STATE = "syndieheavy", SKIN_ICON = CYBORG_ICON_SYNDIE), - "Miss M" = list(SKIN_ICON_STATE = "missm_syndie", SKIN_ICON = CYBORG_ICON_SYNDIE), - "Spider" = list(SKIN_ICON_STATE = "spidersyndi", SKIN_ICON = CYBORG_ICON_SYNDIE), - "Booty Striker" = list(SKIN_ICON_STATE = "bootynukie", SKIN_ICON = CYBORG_ICON_SYNDIE), - "Booty Syndicate" = list(SKIN_ICON_STATE = "bootysyndie", SKIN_ICON = CYBORG_ICON_SYNDIE), - "Bird Syndicate" = list(SKIN_ICON_STATE = "bird_synd", SKIN_ICON = CYBORG_ICON_SYNDIE), - "Male Booty Striker" = list(SKIN_ICON_STATE = "male_bootynukie", SKIN_ICON = CYBORG_ICON_SYNDIE), - "Male Booty Syndicate" = list(SKIN_ICON_STATE = "male_bootysyndie", SKIN_ICON = CYBORG_ICON_SYNDIE), - "Mech" = list(SKIN_ICON_STATE = "chesty", SKIN_ICON = CYBORG_ICON_SYNDIE), - /// 32x64 Skins - "Meka" = list(SKIN_ICON_STATE = "mekasyndi", SKIN_ICON = CYBORG_ICON_SYNDIE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T" = list(SKIN_ICON_STATE = "k4tsyndi", SKIN_ICON = CYBORG_ICON_SYNDIE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKA" = list(SKIN_ICON_STATE = "fmekasyndi", SKIN_ICON = CYBORG_ICON_SYNDIE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKO" = list(SKIN_ICON_STATE = "mmekasyndi", SKIN_ICON = CYBORG_ICON_SYNDIE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) - ) - -/obj/item/robot_model/syndicatejack/rebuild_modules() - . = ..() - var/mob/living/silicon/robot/syndicatejack = loc - syndicatejack.scrambledcodes = TRUE // We're rouge now - -/obj/item/robot_model/syndicatejack/remove_module(obj/item/I, delete_after) - . = ..() - var/mob/living/silicon/robot/syndicatejack = loc - syndicatejack.scrambledcodes = FALSE // Friends with the AI again - -//NINJA -/obj/item/robot_model/ninja - name = "Spider Clan Assault" - basic_modules = list( - /obj/item/assembly/flash/cyborg, - /obj/item/katana/ninja_blade, - /obj/item/gun/energy/printer, - /obj/item/gun/ballistic/revolver/grenadelauncher/cyborg, - /obj/item/card/emag, - /obj/item/crowbar/cyborg, - /obj/item/extinguisher/mini - ) - cyborg_base_icon = "ninja_sec" - cyborg_icon_override = CYBORG_ICON_NINJA - model_select_icon = "ninjaborg" - model_select_alternate_icon = 'modular_skyrat/modules/borgs/icons/screen_cyborg.dmi' - model_traits = list(TRAIT_PUSHIMMUNE, TRAIT_NOFLASH) //No more charging them with a flash and thinking it is a good idea - hat_offset = 3 - borg_skins = list( - /// 32x32 Skins - "Saboteur" = list(SKIN_ICON_STATE = "ninja_engi", SKIN_ICON = CYBORG_ICON_NINJA), - "Medical" = list(SKIN_ICON_STATE = "ninja_medical", SKIN_ICON = CYBORG_ICON_NINJA), - "Assault" = list(SKIN_ICON_STATE = "ninja_sec", SKIN_ICON = CYBORG_ICON_NINJA), - "Heavy" = list(SKIN_ICON_STATE = "ninjaheavy", SKIN_ICON = CYBORG_ICON_NINJA), - "Miss M" = list(SKIN_ICON_STATE = "missm_ninja", SKIN_ICON = CYBORG_ICON_NINJA), - "Spider" = list(SKIN_ICON_STATE = "ninjaspider", SKIN_ICON = CYBORG_ICON_NINJA), - "BootyBorg" = list(SKIN_ICON_STATE = "bootyninja", SKIN_ICON = CYBORG_ICON_NINJA), - "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyninja", SKIN_ICON = CYBORG_ICON_NINJA), - /// 32x64 Skins - "Meka" = list(SKIN_ICON_STATE = "mekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T" = list(SKIN_ICON_STATE = "k4tninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKA" = list(SKIN_ICON_STATE = "fmekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKO" = list(SKIN_ICON_STATE = "mmekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) - ) - -/obj/item/robot_model/ninja/rebuild_modules() - . = ..() - var/mob/living/silicon/robot/Ninja = loc - Ninja.faction -= "silicon" //ai turrets hostile against assault and medical - -/obj/item/robot_model/ninja/remove_module(obj/item/I, delete_after) - var/mob/living/silicon/robot/Ninja = loc - Ninja.faction += "silicon" - . = ..() - -/obj/item/robot_model/ninja/ninja_medical - name = "Spider Clan Medical" - basic_modules = list( - /obj/item/assembly/flash/cyborg, - /obj/item/katana/ninja_blade, - /obj/item/reagent_containers/borghypo/syndicate/ninja, - /obj/item/shockpaddles/syndicate/cyborg/ninja, - /obj/item/healthanalyzer/advanced, - /obj/item/surgical_drapes, - /obj/item/retractor/advanced, - /obj/item/cautery/advanced, - /obj/item/scalpel/advanced, - /obj/item/emergency_bed/silicon, - /obj/item/card/emag, - /obj/item/crowbar/cyborg, - /obj/item/extinguisher/mini, - /obj/item/stack/medical/gauze, - /obj/item/gun/medbeam, - /obj/item/borg/apparatus/organ_storage, - /obj/item/surgical_processor - ) - cyborg_base_icon = "ninja_medical" - cyborg_icon_override = CYBORG_ICON_NINJA - model_select_icon = "ninjaborg" - model_select_alternate_icon = 'modular_skyrat/modules/borgs/icons/screen_cyborg.dmi' - -/obj/item/robot_model/ninja_saboteur - name = "Spider Clan Saboteur" - basic_modules = list( - /obj/item/assembly/flash/cyborg, - /obj/item/borg/sight/thermal, - /obj/item/katana/ninja_blade, - /obj/item/construction/rcd/borg/syndicate, - /obj/item/pipe_dispenser, - /obj/item/restraints/handcuffs/cable/zipties, - /obj/item/extinguisher, - /obj/item/weldingtool/electric, - /obj/item/screwdriver/cyborg/power, - /obj/item/crowbar/cyborg/power, - /obj/item/multitool/cyborg, - /obj/item/stack/sheet/iron, - /obj/item/stack/sheet/glass, - /obj/item/borg/apparatus/sheet_manipulator, - /obj/item/stack/rods/cyborg, - /obj/item/dest_tagger/borg, - /obj/item/stamp/chameleon, - /obj/item/card/emag, - /obj/item/stack/cable_coil, - /obj/item/borg_shapeshifter - ) - cyborg_base_icon = "ninja_engi" - cyborg_icon_override = CYBORG_ICON_NINJA - model_select_icon = "ninjaborg" - model_select_alternate_icon = 'modular_skyrat/modules/borgs/icons/screen_cyborg.dmi' - model_traits = list(TRAIT_PUSHIMMUNE, TRAIT_NOFLASH) - model_traits = list(TRAIT_NEGATES_GRAVITY) - hat_offset = -4 - canDispose = TRUE - borg_skins = list( - "Saboteur" = list(SKIN_ICON_STATE = "ninja_engi", SKIN_ICON = CYBORG_ICON_NINJA), - "Medical" = list(SKIN_ICON_STATE = "ninja_medical", SKIN_ICON = CYBORG_ICON_NINJA), - "Assault" = list(SKIN_ICON_STATE = "ninja_sec", SKIN_ICON = CYBORG_ICON_NINJA), - "Heavy" = list(SKIN_ICON_STATE = "ninjaheavy", SKIN_ICON = CYBORG_ICON_NINJA), - "Miss M" = list(SKIN_ICON_STATE = "missm_ninja", SKIN_ICON = CYBORG_ICON_NINJA), - "Spider" = list(SKIN_ICON_STATE = "ninjaspider", SKIN_ICON = CYBORG_ICON_NINJA), - "BootyBorg" = list(SKIN_ICON_STATE = "bootyninja", SKIN_ICON = CYBORG_ICON_NINJA), - "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyninja", SKIN_ICON = CYBORG_ICON_NINJA), - /// 32x64 Skins - "Meka" = list(SKIN_ICON_STATE = "mekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T" = list(SKIN_ICON_STATE = "k4tninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKA" = list(SKIN_ICON_STATE = "fmekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKO" = list(SKIN_ICON_STATE = "mmekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) - ) - -/obj/item/robot_model/ninja_saboteur/do_transform_animation() - . = ..() - to_chat(loc, span_userdanger("While you have picked the saboteur model, that doesn't mean you are allowed to sabotage the station by delaminating the supermatter or opening all the doors to the armory, you should still ahelp to ask the permission to do that and the reason for it.")) diff --git a/modular_skyrat/modules/borgs/icons/readme.md b/modular_skyrat/modules/borgs/icons/readme.md deleted file mode 100644 index b9368963d8e1a3..00000000000000 --- a/modular_skyrat/modules/borgs/icons/readme.md +++ /dev/null @@ -1,23 +0,0 @@ -Current version: v0.8 - -### Credits: -TheOOZ (https://github.com/theOOZ), AKA ghostsheep (https://twitter.com/_ghostsheep) -MekaNIKA skinline - - Peacekeeper - - Service - - Service (Alt) - - Janitor - - Medical - - Cargo-technician - - Miner - - Syndicate - - Ninja - -### Terms of use: -Tallborg and its MekaNIKA skinline falls under the same licensing as the TG-13 repository. - -If you are porting this content, it is the personal request of the artist that: - - This readme, and the credit icon_state within the .dmi's remain present besides the skinline art. - - This skinline is ported in full, even if your codebase has no use for a certain job-module. - -This content was made for free. diff --git a/modular_skyrat/modules/borgs/icons/screen_cyborg.dmi b/modular_skyrat/modules/borgs/icons/screen_cyborg.dmi deleted file mode 100644 index c5f81665372c7d..00000000000000 Binary files a/modular_skyrat/modules/borgs/icons/screen_cyborg.dmi and /dev/null differ diff --git a/modular_skyrat/modules/borgs/readme.md b/modular_skyrat/modules/borgs/readme.md deleted file mode 100644 index 104786b9df1c2e..00000000000000 --- a/modular_skyrat/modules/borgs/readme.md +++ /dev/null @@ -1,34 +0,0 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/127 - -## Title: borgs - -MODULE ID: BORGS - - -### Description: - -Condenses modular borg skins, items, upgrades and buffs to one folder for sanity's sake - -### TG Proc Changes: -- APPEND: modular_skyrat/modules/altborgs > modular_skyrat/modules/borgs -- /code/modules/mob/living/silicon/robot/robot_modules.dm -- /code/modules/research/techweb/all_nodes.dm - -### Defines: - -- /code/modules/research/techweb/all_nodes.dm > /datum/techweb_node/cyborg_upg_util - -### Master file additions - -- N/A - -### Included files that are not contained in this module: - -- N/A - -### Credits: - -Gandalf2k15 - Porting & refactoring -Azarak - porting -DuffCreeper - Code, Spriting -Zergspower - Refactoring diff --git a/modular_skyrat/modules/cargo/code/items/improvedRCD.dm b/modular_skyrat/modules/cargo/code/items/improvedRCD.dm deleted file mode 100644 index ff21156ad76c73..00000000000000 --- a/modular_skyrat/modules/cargo/code/items/improvedRCD.dm +++ /dev/null @@ -1,10 +0,0 @@ -// Slightly improved version of the normal RCD, mostly as an engineering 'I got hella bread' purchase -/obj/item/construction/rcd/improved - name = "Improved RCD" - desc = "A device used to rapidly build and deconstruct. Upgraded from the standard model with superior material storage, at the cost of build speed. Reload with iron, plasteel, glass or compressed matter cartridges." - icon_state = "ircd" - inhand_icon_state = "ircd" - max_matter = 220 - matter = 220 - delay_mod = 1.3 - upgrade = RCD_UPGRADE_FRAMES | RCD_UPGRADE_SIMPLE_CIRCUITS diff --git a/modular_skyrat/modules/cargo/code/packs.dm b/modular_skyrat/modules/cargo/code/packs.dm deleted file mode 100644 index 5071f3a5aa5c61..00000000000000 --- a/modular_skyrat/modules/cargo/code/packs.dm +++ /dev/null @@ -1,749 +0,0 @@ -/// Cost of the crate. DO NOT GO ANY LOWER THAN X1.4 the "CARGO_CRATE_VALUE" value if using regular crates, or infinite profit will be possible! - -/* -* LIVESTOCK -*/ - -/datum/supply_pack/critter/doublecrab - name = "Crab Crate" - desc = "Contains two crabs. Get your crab on!" - cost = CARGO_CRATE_VALUE * 4 - contains = list( - /mob/living/basic/crab, - /mob/living/basic/crab, - ) - crate_name = "look sir free crabs" - -/datum/supply_pack/critter/mouse - name = "Mouse Crate" - desc = "Good for snakes and lizards of all ages. Contains six feeder mice." - cost = CARGO_CRATE_VALUE * 6 - contains = list( - /mob/living/basic/mouse, - ) - crate_name = "mouse crate" - -/datum/supply_pack/critter/mouse/generate() - . = ..() - for(var/i in 1 to 5) - new /mob/living/basic/mouse(.) - -/datum/supply_pack/critter/chinchilla - name = "Chinchilla Crate" - desc = "Contains four chinchillas. Dust not included." - cost = CARGO_CRATE_VALUE * 7 - contains = list( - /mob/living/basic/pet/chinchilla, - ) - crate_name = "chinchilla crate" - -/datum/supply_pack/critter/chinchilla/generate() - . = ..() - for(var/i in 1 to 3) - new /mob/living/basic/pet/chinchilla(.) - -/* -* MEDICAL -*/ - -/datum/supply_pack/medical/anesthetics - name = "Anesthetics Crate" - desc = "Contains two of the following: Morphine bottles, syringes, breath masks, and anesthetic tanks. Requires Medical Access to open." - access = ACCESS_MEDICAL - cost = CARGO_CRATE_VALUE * 4 - contains = list( - /obj/item/reagent_containers/cup/bottle/morphine, - /obj/item/reagent_containers/cup/bottle/morphine, - /obj/item/reagent_containers/syringe, - /obj/item/reagent_containers/syringe, - /obj/item/clothing/mask/breath, - /obj/item/clothing/mask/breath, - /obj/item/tank/internals/anesthetic, - /obj/item/tank/internals/anesthetic, - ) - crate_name = "anesthetics crate" - -/datum/supply_pack/medical/bodybags - name = "Bodybags" - desc = "For when the bodies hit the floor. Contains 4 boxes of bodybags." - cost = CARGO_CRATE_VALUE * 2 - contains = list( - /obj/item/storage/box/bodybags, - /obj/item/storage/box/bodybags, - /obj/item/storage/box/bodybags, - /obj/item/storage/box/bodybags, - ) - crate_name = "bodybag crate" - -/datum/supply_pack/medical/firstaidmixed - name = "Mixed Medical Kits" - desc = "Contains one of each medical kits for dealing with a variety of injured crewmembers." - cost = CARGO_CRATE_VALUE * 5 - contains = list( - /obj/item/storage/medkit/toxin, - /obj/item/storage/medkit/o2, - /obj/item/storage/medkit/brute, - /obj/item/storage/medkit/fire, - /obj/item/storage/medkit/regular, - ) - crate_name = "medical kit crate" - -/datum/supply_pack/medical/medipens - name = "Epinephrine Medipens" - desc = "Contains two boxes of epinephrine medipens. Each box contains seven pens." - cost = CARGO_CRATE_VALUE * 4.5 - contains = list( - /obj/item/storage/box/medipens, - /obj/item/storage/box/medipens, - ) - crate_name = "medipen crate" - -/datum/supply_pack/medical/modsuit_medical - name = "Medical MODsuit Crate" - desc = "Contains a single MODsuit, built to standard medical specifications." - cost = CARGO_CRATE_VALUE * 13 - access = ACCESS_MEDICAL - contains = list(/obj/item/mod/control/pre_equipped/medical) - crate_name = "medical MODsuit crate" - crate_type = /obj/structure/closet/crate/secure //No medical varient with security locks. - -/datum/supply_pack/medical/compact_defib - name = "Compact Defibrillator Crate" - desc = "Contains a single compact defibrillator. Capable of being worn as a belt." - cost = CARGO_CRATE_VALUE * 5 - access = ACCESS_MEDICAL - contains = list(/obj/item/defibrillator/compact) - crate_name = "compact defibrillator crate" - -/datum/supply_pack/medical/medigun - name = "CWM-479 Medigun" - desc = "Contains a single VeyMedical CWM-479 model medical gun; cells not included." - cost = CARGO_CRATE_VALUE * 30 - access = ACCESS_MEDICAL - contains = list(/obj/item/storage/briefcase/medicalgunset/standard) - crate_name = "CWM-479 medigun crate" - -/datum/supply_pack/medical/medicells - name = "Medicell Replacement Crate" - desc = "Contains the tier I Medigun cells." - cost = CARGO_CRATE_VALUE * 5 - access = ACCESS_MEDICAL - contains = list( - /obj/item/weaponcell/medical/brute, - /obj/item/weaponcell/medical/burn, - /obj/item/weaponcell/medical/toxin, - ) - crate_name = "medicell replacement crate" - -/* -* SECURITY -*/ - -/datum/supply_pack/security/MODsuit_security - name = "Security MODsuit Crate" - desc = "Contains a single armored up MODsuit, built to standard security specifications." - cost = CARGO_CRATE_VALUE * 16 - access_view = ACCESS_SECURITY - contains = list(/obj/item/mod/control/pre_equipped/security) - crate_name = "security MODsuit crate" - -/datum/supply_pack/security/armor_skyrat - name = "Armor Crate" - desc = "Three vests of well-rounded, decently-protective armor." - cost = CARGO_CRATE_VALUE * 2 - access_view = ACCESS_SECURITY - contains = list( - /obj/item/clothing/suit/armor/vest/alt, - /obj/item/clothing/suit/armor/vest/alt, - /obj/item/clothing/suit/armor/vest/alt, - ) - crate_name = "armor crate" - -/datum/supply_pack/security/helmets_skyrat - name = "Helmets Crate" - desc = "Contains three standard-issue brain buckets." - cost = CARGO_CRATE_VALUE * 2 - contains = list(/obj/item/clothing/head/helmet/sec/sol = 3) - crate_name = "helmet crate" - -/datum/supply_pack/security/deployablebarricades - name = "C.U.C.K.S Deployable Barricades" - desc = "Two cases of deployable barricades, for all your fortification needs." - cost = CARGO_CRATE_VALUE * 4 - contains = list( - /obj/item/storage/barricade, - /obj/item/storage/barricade, - ) - crate_name = "C.U.C.K.S Crate" - -/* -* ENGINEERING -*/ - -/datum/supply_pack/engineering/material_pouches - name = "Material Pouches Crate" - desc = "Contains three material pouches." - access_view = ACCESS_ENGINE_EQUIP - contains = list( - /obj/item/storage/pouch/material, - /obj/item/storage/pouch/material, - /obj/item/storage/pouch/material, - ) - cost = CARGO_CRATE_VALUE * 15 - crate_name = "material pouches crate" - -/datum/supply_pack/engineering/doublecap_tanks - name = "Double Extended Emergency Tank Crate" - desc = "Contains four double extended-capacity emergency tanks." - access_view = ACCESS_ENGINE_EQUIP - contains = list( - /obj/item/tank/internals/emergency_oxygen/double, - /obj/item/tank/internals/emergency_oxygen/double, - /obj/item/tank/internals/emergency_oxygen/double, - /obj/item/tank/internals/emergency_oxygen/double, - ) - cost = CARGO_CRATE_VALUE * 15 - crate_name = "double extended emergency tank crate" - -/datum/supply_pack/engineering/advanced_extinguisher - name = "Advanced Foam Extinguisher Crate" - desc = "Contains advanced fire extinguishers which use foam as extinguishing agent." - access_view = ACCESS_ENGINE_EQUIP - contains = list( - /obj/item/extinguisher/advanced, - /obj/item/extinguisher/advanced, - /obj/item/extinguisher/advanced, - ) - cost = CARGO_CRATE_VALUE * 18 - crate_name = "advanced extinguisher crate" - -/datum/supply_pack/engineering/modsuit_engineering - name = "Engineering MODsuit Crate" - desc = "Contains a single MODsuit, built to standard engineering specifications." - access = ACCESS_ENGINE_EQUIP - contains = list(/obj/item/mod/control/pre_equipped/engineering) - cost = CARGO_CRATE_VALUE * 13 - crate_name = "engineering MODsuit crate" - crate_type = /obj/structure/closet/crate/secure/engineering - -/datum/supply_pack/engineering/modsuit_atmospherics - name = "Atmospherics MODsuit Crate" - desc = "Contains a single MODsuit, built to standard atmospherics specifications." - access = ACCESS_ENGINE_EQUIP - contains = list(/obj/item/mod/control/pre_equipped/atmospheric) - cost = CARGO_CRATE_VALUE * 16 - crate_name = "atmospherics MODsuit crate" - crate_type = /obj/structure/closet/crate/secure/engineering - -/datum/supply_pack/engineering/engi_inducers - name = "NT-150 Industrial Power Inducers Crate" - desc = "An improved model over the NT-75 EPI, the NT-150 charges at double the rate and contains an improved powercell. Contains two engineering-spec Inducers." - cost = CARGO_CRATE_VALUE * 6 - contains = list( - /obj/item/inducer, - /obj/item/inducer, - ) - crate_name = "engineering inducer crate" - crate_type = /obj/structure/closet/crate/engineering/electrical - -/datum/supply_pack/engineering/gas_miner - name = "Gas Miner Delivery Beacon Crate" - desc = "Contains a single gas miner delivery beacon, for the ordering of one gas miner." - access = ACCESS_ATMOSPHERICS - contains = list(/obj/item/summon_beacon/gas_miner) - cost = CARGO_CRATE_VALUE * 50 - crate_name = "gas miner delivery beacon crate" - crate_type = /obj/structure/closet/crate/secure/engineering - -/datum/supply_pack/engineering/improved_rcd - name = "Improved RCD Crate" - desc = "Contains 3 upgraded RCDs featuring superior material storage. Each comes with complimentary frames and circuitry upgrades to boot!" - access = ACCESS_ENGINE_EQUIP - cost = CARGO_CRATE_VALUE * 18 - contains = list( - /obj/item/construction/rcd/improved, - /obj/item/construction/rcd/improved, - /obj/item/construction/rcd/improved, - ) - crate_name = "improved RCD crate" - crate_type = /obj/structure/closet/crate/secure/engineering - -/* -* MISC -*/ - -/datum/supply_pack/misc/speedbike //If you see this bought in game, its time to nerf a cargo exploit. - name = "Speedbike" - desc = "Put your shades on, saddle up, and ride off directly into the sun on this turbo deluxe space-cruising speedbike." - cost = 1000000 //Special case, we don't want to make this in terms of crates because having bikes be a million credits is the whole meme. - contains = list(/obj/vehicle/ridden/speedbike) - crate_name = "speedbike crate" - -/datum/supply_pack/misc/painting - name = "Advanced Art Supplies" - desc = "Bring out your artistic spirit with these advanced art supplies. Contains coloring supplies, cloth for canvas, and two easels to work with!" - cost = CARGO_CRATE_VALUE * 2.2 - contains = list( - /obj/structure/easel, - /obj/structure/easel, - /obj/item/toy/crayon/spraycan, - /obj/item/toy/crayon/spraycan, - /obj/item/storage/crayons, - /obj/item/storage/crayons, - /obj/item/toy/crayon/white, - /obj/item/toy/crayon/white, - /obj/item/toy/crayon/rainbow, - /obj/item/toy/crayon/rainbow, - /obj/item/stack/sheet/cloth/ten, - /obj/item/stack/sheet/cloth/ten, - ) - crate_name = "advanced art supplies" - -/datum/supply_pack/service/paintcan - name = "Adaptive Paintcan" - desc = "Give things a splash of color with this experimental color-changing can of paint! Sellers note: We are not responsible for lynchings carried out by angry janitors, security officers, or any other crewmembers as a result of you using this." - cost = CARGO_CRATE_VALUE * 15 - contains = list(/obj/item/paint/anycolor) - -/datum/supply_pack/misc/coloredsheets - name = "Bedsheet Crate" - desc = "Give your night life a splash of color with this crate filled with bedsheets! Contains a total of nine different-colored sheets." - cost = CARGO_CRATE_VALUE * 2.5 - contains = list( - /obj/item/bedsheet/blue, - /obj/item/bedsheet/green, - /obj/item/bedsheet/orange, - /obj/item/bedsheet/purple, - /obj/item/bedsheet/red, - /obj/item/bedsheet/yellow, - /obj/item/bedsheet/brown, - /obj/item/bedsheet/black, - /obj/item/bedsheet/rainbow, - ) - crate_name = "colored bedsheet crate" - -/datum/supply_pack/misc/candles - name = "Candle Crate" - desc = "Set up a romantic dinner or host a séance with these extra candles and crayons." - cost = CARGO_CRATE_VALUE * 1.5 - contains = list( - /obj/item/storage/fancy/candle_box, - /obj/item/storage/fancy/candle_box, - /obj/item/storage/box/matches, - ) - crate_name = "candle crate" - -/datum/supply_pack/misc/vanguard_surplus - name = "Expeditionary Corps Surplus" - desc = "Contains an assortment of surplus equipment from the now-defunct Vanguard Expeditionary Corps." - cost = CARGO_CRATE_VALUE * 19 - contains = list( - /obj/item/storage/box/expeditionary_survival, - /obj/item/melee/tomahawk, - /obj/item/storage/backpack/duffelbag/expeditionary_corps, - /obj/item/clothing/gloves/color/black/expeditionary_corps, - /obj/item/clothing/head/helmet/expeditionary_corps, - /obj/item/clothing/suit/armor/vest/expeditionary_corps, - /obj/item/storage/belt/military/expeditionary_corps, - /obj/item/clothing/under/rank/expeditionary_corps, - /obj/item/clothing/shoes/combat/expeditionary_corps, - /obj/item/modular_computer/pda/expeditionary_corps, - /obj/item/knife/combat/marksman, - ) - /// How many of the contains to put in the crate - var/num_contained = 3 - -/datum/supply_pack/misc/vanguard_surplus/fill(obj/structure/closet/crate/filled_crate) - var/list/contain_copy = contains.Copy() - for(var/i in 1 to num_contained) - var/item = pick_n_take(contain_copy) - new item(filled_crate) - -/* -* FOOD -*/ - -/datum/supply_pack/organic/combomeal - name = "Burger Combo Crate" - desc = "We value our customers at the Greasy Griddle, so much so that we're willing to deliver -just for you.- Contains two combo meals, consisting of a Burger, Fries, and pack of chicken nuggets!" - cost = CARGO_CRATE_VALUE * 5 - contains = list( - /obj/item/food/burger/cheese, - /obj/item/food/burger/cheese, - /obj/item/food/fries, - /obj/item/food/fries, - /obj/item/storage/fancy/nugget_box, - /obj/item/storage/fancy/nugget_box, - ) - crate_name = "burger-n-nuggs combo meal" - crate_type = /obj/structure/closet/crate/wooden - -/datum/supply_pack/organic/fiestatortilla - name = "Fiesta Crate" - desc = "Spice up the kitchen with this fiesta themed food order! Contains 8 tortilla based food items and some hot-sauce." - cost = CARGO_CRATE_VALUE * 4.5 - contains = list( - /obj/item/food/taco, - /obj/item/food/taco, - /obj/item/food/taco/plain, - /obj/item/food/taco/plain, - /obj/item/food/enchiladas, - /obj/item/food/enchiladas, - /obj/item/food/carneburrito, - /obj/item/food/cheesyburrito, - /obj/item/reagent_containers/cup/bottle/capsaicin, - ) - crate_name = "fiesta crate" - -/datum/supply_pack/organic/fakemeat - name = "Meat Crate 'Synthetic'" - desc = "Run outta meat already? Keep the lizards content with this freezer filled with cruelty-free and chemically compounded meat! Contains 12 slabs of meat product, and 4 slabs of *carp*." - cost = CARGO_CRATE_VALUE * 2.25 - contains = list( - /obj/item/food/meat/slab/meatproduct, - /obj/item/food/meat/slab/meatproduct, - /obj/item/food/meat/slab/meatproduct, - /obj/item/food/meat/slab/meatproduct, - /obj/item/food/meat/slab/meatproduct, - /obj/item/food/meat/slab/meatproduct, - /obj/item/food/meat/slab/meatproduct, - /obj/item/food/meat/slab/meatproduct, - /obj/item/food/meat/slab/meatproduct, - /obj/item/food/meat/slab/meatproduct, - /obj/item/food/meat/slab/meatproduct, - /obj/item/food/meat/slab/meatproduct, - /obj/item/food/fishmeat/carp/imitation, - /obj/item/food/fishmeat/carp/imitation, - /obj/item/food/fishmeat/carp/imitation, - /obj/item/food/fishmeat/carp/imitation, - ) - crate_name = "meaty crate" - crate_type = /obj/structure/closet/crate/freezer - -/datum/supply_pack/organic/mixedboxes - name = "Mixed Ingredient Boxes" - desc = "Get overwhelmed with inspiration by ordering these boxes of surprise ingredients! Get four boxes filled with an assortment of products!" - cost = CARGO_CRATE_VALUE * 2 - contains = list( - /obj/item/storage/box/ingredients/wildcard, - /obj/item/storage/box/ingredients/wildcard, - /obj/item/storage/box/ingredients/wildcard, - /obj/item/storage/box/ingredients/wildcard, - ) - crate_name = "wildcard food crate" - crate_type = /obj/structure/closet/crate/freezer - -/datum/supply_pack/organic/fcsurplus - name = "Fine Cuisine Assortment Value Pack" - desc = "Chef slop boring? Have high-maintenance crewmembers that with wings? Maybe you just want to revel in the sinful delight that are Cheese Curds? The Finest of our trade union has made the pack for you, containing a mix of fine oils, vinegar, and exceptionally rare ingredients." - cost = CARGO_CRATE_VALUE * 5 - contains = list( - /obj/item/reagent_containers/condiment/olive_oil, - /obj/item/reagent_containers/condiment/olive_oil, - /obj/item/reagent_containers/condiment/vinegar, - /obj/item/reagent_containers/condiment/vinegar, - /obj/item/food/canned/tomatoes, - /obj/item/food/canned/tomatoes, - /obj/item/food/canned/pine_nuts, - /obj/item/food/canned/pine_nuts, - /obj/item/food/canned/jellyfish, - /obj/item/food/canned/desert_snails, - /obj/item/food/canned/larvae, - /obj/item/food/moonfish_eggs, - ) - crate_name = "fine cuisine assortment pack" - crate_type = /obj/structure/closet/crate/freezer - -/datum/supply_pack/organic/qualityoilbulk - name = "Quality Oil Bulk Pack" - desc = "Normal cooking oil not cutting it? Chef throw all the quality stuff in the frier because they thought it was funny? Well, We got you covered, Introducing a bulk pack of Ten (10) bottles of our finest oils, blended for the perfect taste in cold recipes, and a resistance for going acrid when cooking." - cost = CARGO_CRATE_VALUE * 9 - contains = list( - /obj/item/reagent_containers/condiment/olive_oil, - /obj/item/reagent_containers/condiment/olive_oil, - /obj/item/reagent_containers/condiment/olive_oil, - /obj/item/reagent_containers/condiment/olive_oil, - /obj/item/reagent_containers/condiment/olive_oil, - /obj/item/reagent_containers/condiment/olive_oil, - /obj/item/reagent_containers/condiment/olive_oil, - /obj/item/reagent_containers/condiment/olive_oil, - /obj/item/reagent_containers/condiment/olive_oil, - /obj/item/reagent_containers/condiment/olive_oil, - ) - crate_name = "bulk quality oil pack" - crate_type = /obj/structure/closet/crate/freezer - -/datum/supply_pack/organic/vinegarbulk - name = "Vinegar Bulk Pack" - desc = "Mothic Cuisine night? The winged fellows in port? Well, We'll have you cooking in no time. Refined from several rich wines and cultivated for just the right bite, This pack Ten (10) Bottles of vinegar for the perfect dressings and sauces." - cost = CARGO_CRATE_VALUE * 4 - contains = list( - /obj/item/reagent_containers/condiment/vinegar, - /obj/item/reagent_containers/condiment/vinegar, - /obj/item/reagent_containers/condiment/vinegar, - /obj/item/reagent_containers/condiment/vinegar, - /obj/item/reagent_containers/condiment/vinegar, - /obj/item/reagent_containers/condiment/vinegar, - /obj/item/reagent_containers/condiment/vinegar, - /obj/item/reagent_containers/condiment/vinegar, - /obj/item/reagent_containers/condiment/vinegar, - /obj/item/reagent_containers/condiment/vinegar, - ) - crate_name = "bulk vinegar pack" - crate_type = /obj/structure/closet/crate/freezer - -/datum/supply_pack/organic/bulkcanmoff - name = "Bulk Mothic Canned Goods" - desc = "Trying your hand at pestos and sauces? Cant just grow the stuff and can it yourself? Well, No matters, No worries, We here have you covered with Five (5) cans of tomatoes and pine nuts to help care for your winged friends." - cost = CARGO_CRATE_VALUE * 3 - contains = list( - /obj/item/food/canned/tomatoes, - /obj/item/food/canned/tomatoes, - /obj/item/food/canned/tomatoes, - /obj/item/food/canned/tomatoes, - /obj/item/food/canned/tomatoes, - /obj/item/food/canned/pine_nuts, - /obj/item/food/canned/pine_nuts, - /obj/item/food/canned/pine_nuts, - /obj/item/food/canned/pine_nuts, - /obj/item/food/canned/pine_nuts, - ) - crate_name = "bulk moffic pack" - crate_type = /obj/structure/closet/crate/freezer - -/datum/supply_pack/organic/bulkcanliz - name = "Bulk Lizard Goods" - desc = "Having some devious tastes? One of your scalie friends wanting something that isn't fried mystery meat? Well you're just one order away from from the perfect pleaser. Containing Three (3) Cans of our finest-sourced canned jellyfish, snails and bee larvae, An addition of Three (3) packs of cruelty free Moonfish eggs might get their hearts." - cost = CARGO_CRATE_VALUE * 3.5 - contains = list( - /obj/item/food/canned/jellyfish, - /obj/item/food/canned/jellyfish, - /obj/item/food/canned/jellyfish, - /obj/item/food/canned/desert_snails, - /obj/item/food/canned/desert_snails, - /obj/item/food/canned/desert_snails, - /obj/item/food/moonfish_eggs, - /obj/item/food/moonfish_eggs, - /obj/item/food/moonfish_eggs, - /obj/item/food/canned/larvae, - /obj/item/food/canned/larvae, - /obj/item/food/canned/larvae, - ) - crate_name = "bulk lizard pack" - crate_type = /obj/structure/closet/crate/freezer - -/* -* Service -*/ - -/datum/supply_pack/service/buildabar - name = "Build a Bar Crate" - desc = "Looking to set up your own little safe haven? Get a jump-start on it with this handy kit. Contains circuitboards for bar equipment, some parts, and some basic bartending supplies. (Glass not included)" - cost = CARGO_CRATE_VALUE * 4 - contains = list( - /obj/item/storage/box/drinkingglasses, - /obj/item/storage/box/drinkingglasses, - /obj/item/storage/part_replacer/cargo, - /obj/item/stack/sheet/iron/ten, - /obj/item/stack/sheet/iron/five, - /obj/item/stock_parts/cell/high, - /obj/item/stock_parts/cell/high, - /obj/item/stack/cable_coil, - /obj/item/book/manual/wiki/barman_recipes, - /obj/item/reagent_containers/cup/glass/shaker, - /obj/item/circuitboard/machine/chem_dispenser/drinks/beer, - /obj/item/circuitboard/machine/chem_dispenser/drinks, - /obj/item/circuitboard/machine/dish_drive, - ) - crate_name = "build a bar crate" - -/datum/supply_pack/service/hydrohelper - name = "Hydro-Helper Circuit Pack" - desc = "Botany being lazy with something? Being refused circuit boards? grow your only little garden with these three boards. (seeds and parts not included)" - cost = CARGO_CRATE_VALUE * 5 - contains = list( - /obj/item/circuitboard/machine/hydroponics, - /obj/item/circuitboard/machine/hydroponics, - /obj/item/circuitboard/machine/hydroponics, - ) - crate_name = "garden crate" - crate_type = /obj/structure/closet/crate/hydroponics - -/datum/supply_pack/service/janitor/janpimp - name = "Custodial Cruiser" - desc = "Clown steal your ride? Assistant lock it in the dorms? Order a new one and get back to cleaning in style!" - cost = CARGO_CRATE_VALUE * 4 - access = ACCESS_JANITOR - contains = list( - /obj/vehicle/ridden/janicart, - /obj/item/key/janitor, - ) - crate_name = "janitor ride crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/service/janitor/janpimpkey - name = "Cruiser Keys" - desc = "Replacement Keys for the Custodial Cruiser." - cost = CARGO_CRATE_VALUE * 1.5 - access = ACCESS_JANITOR - contains = list(/obj/item/key/janitor) - crate_name = "key crate" - crate_type = /obj/structure/closet/crate/wooden - -/datum/supply_pack/service/janitor/janpremium - name = "Janitor Supplies (Premium)" - desc = "For when the mess is too big for a mop to handle. Contains, several cleaning grenades, some spare bottles of ammonia, two bars of soap, and an MCE (or Massive Cleaning Explosive)." - cost = CARGO_CRATE_VALUE * 6 - contains = list( - /obj/item/soap/nanotrasen, - /obj/item/soap/nanotrasen, - /obj/item/grenade/clusterbuster/cleaner, - /obj/item/grenade/chem_grenade/cleaner, - /obj/item/grenade/chem_grenade/cleaner, - /obj/item/grenade/chem_grenade/cleaner, - /obj/item/reagent_containers/cup/bottle/ammonia, - /obj/item/reagent_containers/cup/bottle/ammonia, - /obj/item/reagent_containers/cup/bottle/ammonia, - ) - crate_name = "premium janitorial crate" - -/datum/supply_pack/service/lamplight - name = "Lamp Light Crate" - desc = "Dealing with brownouts? Lights out across the station? Brighten things up with a pack of four lamps and flashlights." - cost = CARGO_CRATE_VALUE * 1.75 - contains = list( - /obj/item/flashlight/lamp, - /obj/item/flashlight/lamp, - /obj/item/flashlight/lamp/green, - /obj/item/flashlight/lamp/green, - /obj/item/flashlight, - /obj/item/flashlight, - /obj/item/flashlight, - /obj/item/flashlight, - ) - crate_name = "lamp light crate" - -/datum/supply_pack/service/medieval - name = "Authentic Renaissance Faire Crate" - desc = "Contains two authentic suits of armor, swords, and two bows and cuirass' for the cowards hiding in the back." - cost = CARGO_CRATE_VALUE * 30 - contraband = TRUE - contains = list( - /obj/item/clothing/suit/armor/riot/knight/larp/red, - /obj/item/clothing/gloves/plate/larp/red, - /obj/item/clothing/head/helmet/knight/red, - /obj/item/clothing/shoes/plate/larp/red, - /obj/item/claymore/weak/weaker, - /obj/item/clothing/shoes/plate/larp/blue, - /obj/item/clothing/suit/armor/riot/knight/larp/blue, - /obj/item/clothing/gloves/plate/larp/blue, - /obj/item/clothing/head/helmet/knight/blue, - /obj/item/claymore/weak/weaker, - /obj/item/clothing/suit/armor/vest/cuirass/larp, - /obj/item/clothing/suit/armor/vest/cuirass/larp, - /obj/item/gun/ballistic/bow/longbow, - /obj/item/gun/ballistic/bow/longbow, - /obj/item/storage/bag/quiver, - /obj/item/storage/bag/quiver, - /obj/item/clothing/head/helmet/knight/red, - /obj/item/clothing/head/helmet/knight/blue, - /obj/item/food/bread/plain, - ) - crate_name = "vintage crate" - -/datum/supply_pack/organic/lavalandsamples - name = "Planetary Flora Samples" - desc = "A box of samples taken from the surface of Lavaland. Requires Hydroponics access to open." - cost = CARGO_CRATE_VALUE * 2 - access_view = ACCESS_HYDROPONICS - contains = list( - /obj/item/seeds/lavaland/polypore, - /obj/item/seeds/lavaland/porcini, - /obj/item/seeds/lavaland/inocybe, - /obj/item/seeds/lavaland/ember, - /obj/item/seeds/lavaland/seraka, - /obj/item/seeds/lavaland/fireblossom, - /obj/item/seeds/lavaland/cactus, - ) - crate_name = "planetary seeds crate" - crate_type = /obj/structure/closet/crate/hydroponics - -/datum/supply_pack/service/MODsuit_cargo - name = "Cargo Loader MODsuit Crate" - desc = "Contains a single quad-armed MODsuit, built to standard cargo specifications." - cost = CARGO_CRATE_VALUE * 13 - access_view = ACCESS_CARGO - contains = list(/obj/item/mod/control/pre_equipped/loader) - crate_name = "cargo MODsuit crate" - -/datum/supply_pack/service/snowmobile - name = "Snowmobile kit" - desc = "Trapped on a frigid wasteland? Need to get around fast? Purchase a refurbished snowmobile with a FREE 10 microsecond warranty!" - cost = CARGO_CRATE_VALUE * 7.5 - contains = list( - /obj/vehicle/ridden/atv/snowmobile = 1, - /obj/item/key/atv = 1, - /obj/item/clothing/mask/gas/explorer = 1, - ) - crate_name = "snowmobile kit" - crate_type = /obj/structure/closet/crate/large - -/* -* MATERIALS AND SHEETS -*/ - -/datum/supply_pack/materials/rawlumber - name = "20 Towercap Logs" - desc = "Set up a cookout or a classy beachside bonfire with these terrific towercaps!" - cost = CARGO_CRATE_VALUE * 3.5 - contains = list(/obj/item/grown/log) - crate_name = "lumber crate" - -/datum/supply_pack/materials/rawlumber/generate() - . = ..() - for(var/i in 1 to 19) - new /obj/item/grown/log(.) - -/datum/supply_pack/imports/cin_surplus - name = "CIN Military Surplus Crate" - desc = "A collection of surplus equipment sourced from the Coalition of Independent Nations' military stockpiles. Likely to contain old and outdated equipment, as is the nature of surplus." - contraband = TRUE - cost = CARGO_CRATE_VALUE * 9 - contains = list( - /obj/item/storage/box/colonial_rations = 1, - /obj/item/storage/toolbox/ammobox/strilka310 = 1, - /obj/item/storage/toolbox/ammobox/strilka310/surplus = 1, - /obj/item/storage/toolbox/maint_kit = 1, - /obj/item/storage/toolbox/guncase/soviet/sakhno = 2, - /obj/item/ammo_box/strilka310 = 1, - /obj/item/clothing/suit/armor/vest/cin_surplus_vest = 1, - /obj/item/clothing/head/helmet/cin_surplus_helmet/random_color = 1, - /obj/item/storage/backpack/industrial/cin_surplus/random_color = 1, - /obj/item/storage/belt/military/cin_surplus/random_color = 1, - /obj/item/clothing/gloves/tackler/combat = 1, - /obj/item/clothing/under/syndicate/rus_army/cin_surplus/random_color = 1, - /obj/item/clothing/shoes/jackboots = 1, - /obj/item/clothing/mask/gas/hecu2 = 1, - /obj/item/clothing/mask/balaclavaadjust = 1, - ) - -/datum/supply_pack/imports/cin_surplus/fill(obj/structure/closet/crate/we_are_filling_this_crate) - for(var/i in 1 to 10) - var/item = pick_weight(contains) - new item(we_are_filling_this_crate) - -/* -* VENDING RESTOCKS -*/ - -/datum/supply_pack/vending/dorms - name = "LustWish Supply Crate" - desc = "This crate contains a single refill for the LustWish vendor." - cost = CARGO_CRATE_VALUE * 2 - contains = list(/obj/item/vending_refill/lustwish) - -/datum/supply_pack/vending/barber - name = "Fab-O-Vend Supply Crate" - desc = "Contains a single restock for the Fab-O-Vend, great for those who are indecisive about their looks." - cost = CARGO_CRATE_VALUE * 3 - contains = list(/obj/item/vending_refill/barbervend) diff --git a/modular_skyrat/modules/cargo/readme.md b/modular_skyrat/modules/cargo/readme.md deleted file mode 100644 index 1bcc6bbe9bd91a..00000000000000 --- a/modular_skyrat/modules/cargo/readme.md +++ /dev/null @@ -1,30 +0,0 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/2003 - -## Title: Adds a bunch of crates to cargo. - -MODULE ID: N/A - -### Description: - -Adds more stuff to cargo. - -### TG Proc/File Changes: - -- N/A - -### Defines: - -- N/A - -### Master file additions - -- `modular_skyrat/master_files/code/modules/cargo/packs/security.dm`: `var/special` - -### Included files that are not contained in this module: - -- N/A - -### Credits: - -Porting some of my stuff from the old base. - Owai-Seek -Citadel Station, and Ghommie, for some of the packs that aren't mine. diff --git a/modular_skyrat/modules/cellguns/code/medigun_research.dm b/modular_skyrat/modules/cellguns/code/medigun_research.dm deleted file mode 100644 index 3971455e44ed4e..00000000000000 --- a/modular_skyrat/modules/cellguns/code/medigun_research.dm +++ /dev/null @@ -1,135 +0,0 @@ -#define RND_SUBCATEGORY_WEAPONS_MEDICALAMMO "/Medical Ammunition" -#define RND_MEDICALAMMO_UTILITY " (Utility)" - -//Upgrade Kit// -/datum/design/medigun_speedkit - name = "VeyMedical CWM-479 upgrade kit" - desc = "An upgrade kit for the VeyMedical CWM-479 to have a higher-capacity internal cell, with increased recharger throughput." - id = "medigun_speed" - build_type = PROTOLATHE | AWAY_LATHE - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL - category = list(RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_EQUIPMENT_MEDICAL) - materials = list(/datum/material/uranium = SHEET_MATERIAL_AMOUNT * 2, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, /datum/material/plasma = SHEET_MATERIAL_AMOUNT, /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/device/custom_kit/medigun_fastcharge - -/datum/design/medicell - name = "Base Medicell Design" - desc = "Hey, you shouldn't see this. Like... at all." - build_type = PROTOLATHE | AWAY_LATHE - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL - category = list(RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_MEDICALAMMO) - -//Tier 2 Medicells// - -/datum/design/medicell/brute2 - name = "Brute II Medicell" - desc = "Gives cell-loaded mediguns improved brute damage healing functionality." - id = "brute2medicell" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3) - build_path = /obj/item/weaponcell/medical/brute/tier_2 - -/datum/design/medicell/burn2 - name = "Burn II Medicell" - desc = "Gives cell-loaded mediguns improved burn damage healing functionality." - id = "burn2medicell" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3) - build_path = /obj/item/weaponcell/medical/burn/tier_2 - -/datum/design/medicell/toxin2 - name = "Toxin II Medicell" - desc = "Gives cell-loaded mediguns improved toxin damage healing functionality." - id = "toxin2medicell" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3) - build_path = /obj/item/weaponcell/medical/toxin/tier_2 - -/datum/design/medicell/oxy2 - name = "Oxygen II Medicell" - desc = "Gives cell-loaded mediguns improved oxygen deprivation healing functionality." - id = "oxy2medicell" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3) - build_path = /obj/item/weaponcell/medical/oxygen/tier_2 - -//Tier 3 Medicells// - -/datum/design/medicell/brute3 - name = "Brute III Medicell" - desc = "Gives cell-loaded mediguns advanced brute damage healing functionality." - id = "brute3medicell" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 3, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3, /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3) - build_path = /obj/item/weaponcell/medical/brute/tier_3 - -/datum/design/medicell/burn3 - name = "Burn III Medicell" - desc = "Gives cell-loaded mediguns advanced burn damage healing functionality." - id = "burn3medicell" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 3, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3, /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3) - build_path = /obj/item/weaponcell/medical/burn/tier_3 - -/datum/design/medicell/toxin3 - name = "Toxin III Medicell" - desc = "Gives cell-loaded mediguns advanced toxin damage healing functionality." - id = "toxin3medicell" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 3, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3, /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3) - build_path = /obj/item/weaponcell/medical/toxin/tier_3 - -/datum/design/medicell/oxy3 - name = "Oxygen III Medicell" - desc = "Gives cell-loaded mediguns advanced oxygen deprivation healing functionality." - id = "oxy3medicell" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 3, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3, /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3) - build_path = /obj/item/weaponcell/medical/oxygen/tier_3 - -//Utility Medicells - -/datum/design/medicell/utility - name = "Utility Medicell" - category = list(RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_MEDICALAMMO + RND_MEDICALAMMO_UTILITY) - -/datum/design/medicell/utility/clot - name = "Clotting Medicell" - desc = "Gives cell-loaded mediguns projectile-based coagulation functionality." - id = "clotmedicell" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plastic = SHEET_MATERIAL_AMOUNT, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 3, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 5) - build_path = /obj/item/weaponcell/medical/utility/clotting - -/datum/design/medicell/utility/temp - name = "Temperature Adjustment Medicell" - desc = "Gives cell loaded-mediguns projectile-based body temperature regulation functionality." - id = "tempmedicell" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plastic = SHEET_MATERIAL_AMOUNT, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 3, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 5) - build_path = /obj/item/weaponcell/medical/utility/temperature - -/datum/design/medicell/utility/gown - name = "Hardlight Gown Medicell" - desc = "Gives cell-loaded mediguns projectile-based hardlight gown deployment functionality." - id = "gownmedicell" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plastic = SHEET_MATERIAL_AMOUNT, /datum/material/glass = SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/weaponcell/medical/utility/hardlight_gown - -/datum/design/medicell/utility/bed - name = "Hardlight Roller Bed Medicell" - desc = "Gives cell-loaded mediguns projectile-based hardlight roller bed deployment functionality. Best used on already-horizontal patients." - id = "bedmedicell" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plastic = SHEET_MATERIAL_AMOUNT, /datum/material/glass = SHEET_MATERIAL_AMOUNT, /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3, /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3) - build_path = /obj/item/weaponcell/medical/utility/bed - -/datum/design/medicell/utility/salve - name = "Empty Salve Medicell" - desc = "An incomplete medicell that requires a leaf of aloe to fully realize its potential to provide projectile-embedding-based healing-over-time functionality." - id = "salvemedicell" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plastic = SHEET_MATERIAL_AMOUNT, /datum/material/glass = SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/device/custom_kit/empty_cell - -/datum/design/medicell/utility/body - name = "Empty Body Teleporter Medicell" - desc = "An incomplete medicell that requires a bluespace slime extract in order to provide projectile-based corpse retrieval functionality." - id = "bodymedicell" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plastic = SHEET_MATERIAL_AMOUNT, /datum/material/glass = SHEET_MATERIAL_AMOUNT, /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 5, /datum/material/bluespace = SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/device/custom_kit/empty_cell/body_teleporter - -/datum/design/medicell/utility/relocation - name = "Oppressive Force Relocation Medicell" - desc = "Gives cell-loaded mediguns projectile-based rubbernecker relocation functionality, by dumping them into the Medbay lobby via eigenstate manipulation. Only works in Medbay when fired by authorized users." - id = "relocatemedicell" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plastic = SHEET_MATERIAL_AMOUNT, /datum/material/glass = SHEET_MATERIAL_AMOUNT, /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 5, /datum/material/bluespace = SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/device/custom_kit/empty_cell/relocator diff --git a/modular_skyrat/modules/clock_cult/code/items/clothing.dm b/modular_skyrat/modules/clock_cult/code/items/clothing.dm deleted file mode 100644 index c2e9fca5478925..00000000000000 --- a/modular_skyrat/modules/clock_cult/code/items/clothing.dm +++ /dev/null @@ -1,453 +0,0 @@ -#define VISOR_MOUNT_DAMAGE 20 -#define VISOR_MOUNT_SLEEP_TIME 5 SECONDS - -/obj/item/clothing/suit/clockwork - name = "bronze armor" - desc = "A strong, bronze suit worn by the soldiers of the Ratvarian armies." - icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb.dmi' - worn_icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb_worn.dmi' - icon_state = "clockwork_cuirass" - armor_type = /datum/armor/suit_clockwork - slowdown = 0.6 - resistance_flags = FIRE_PROOF | ACID_PROOF - w_class = WEIGHT_CLASS_BULKY - body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list( - /obj/item/clockwork, - /obj/item/stack/tile/bronze, - /obj/item/gun/ballistic/bow/clockwork, - /obj/item/gun/ballistic/rifle/lionhunter/clockwork, - ) - -/datum/armor/suit_clockwork - melee = 50 - bullet = 60 - laser = 30 - energy = 80 - bomb = 80 - bio = 100 - fire = 100 - acid = 100 - - -/obj/item/clothing/suit/clockwork/Initialize(mapload) - . = ..() - AddElement(/datum/element/clockwork_pickup, ~(ITEM_SLOT_HANDS)) - - -/obj/item/clothing/suit/clockwork/speed - name = "robes of divinity" - desc = "A shiny suit, glowing with a vibrant energy. The wearer will be able to move quickly across battlefields, but will be able to withstand less damage before falling." - icon_state = "clockwork_cuirass_speed" - slowdown = -0.3 - resistance_flags = FIRE_PROOF | ACID_PROOF - armor_type = /datum/armor/clockwork_speed - -/datum/armor/clockwork_speed - melee = 40 - bullet = 30 - laser = 10 - energy = -20 - bomb = 60 - bio = 100 - fire = 100 - acid = 100 - -/obj/item/clothing/suit/clockwork/cloak - name = "shrouding cloak" - desc = "A faltering cloak that bends light around it, distorting the user's appearance, making it hard to see them with the naked eye. However, it provides very little protection." - icon_state = "clockwork_cloak" - armor_type = /datum/armor/clockwork_cloak - actions_types = list(/datum/action/item_action/toggle/clock) - slowdown = 0.4 - resistance_flags = FIRE_PROOF | ACID_PROOF - /// Is the shroud itself active or not - var/shroud_active = FALSE - /// Previous alpha value of the user when removing/disabling the jacket - var/previous_alpha = 255 - /// Who is wearing this - var/mob/living/wearer - -/datum/armor/clockwork_cloak - melee = 10 - bullet = 60 - laser = 40 - energy = 20 - bomb = 40 - bio = 100 - fire = 100 - acid = 100 - -/obj/item/clothing/suit/clockwork/cloak/Destroy() - wearer = null - - return ..() - - -/obj/item/clothing/suit/clockwork/cloak/attack_self(mob/user, modifiers) - . = ..() - if(shroud_active) - disable() - - else - enable() - - -/obj/item/clothing/suit/clockwork/cloak/equipped(mob/user, slot) - . = ..() - if(slot != ITEM_SLOT_OCLOTHING || !IS_CLOCK(user)) - return - - wearer = user - - if(shroud_active) - enable() - - -/obj/item/clothing/suit/clockwork/cloak/dropped(mob/user) - . = ..() - if(shroud_active) - disable() - - wearer = null - - -/// Apply the effects to the wearer, making them pretty hard to see -/obj/item/clothing/suit/clockwork/cloak/proc/enable() - shroud_active = TRUE - previous_alpha = wearer.alpha - animate(wearer, alpha = 90, time = 3 SECONDS) - apply_wibbly_filters(wearer) - ADD_TRAIT(wearer, TRAIT_UNKNOWN, CLOTHING_TRAIT) - - -/// Un-apply the effects of the cloak, returning the wearer to normal -/obj/item/clothing/suit/clockwork/cloak/proc/disable() - shroud_active = FALSE - do_sparks(3, FALSE, wearer) - remove_wibbly_filters(wearer) - animate(wearer, alpha = previous_alpha, time = 3 SECONDS) - REMOVE_TRAIT(wearer, TRAIT_UNKNOWN, CLOTHING_TRAIT) - - -/obj/item/clothing/glasses/clockwork - name = "base clock glasses" - icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb.dmi' - worn_icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb_worn.dmi' - icon_state = "clockwork_cuirass" - /// What additional desc to show if the person examining is a clock cultist - var/clock_desc = "" - - -/obj/item/clothing/glasses/clockwork/examine(mob/user) - . = ..() - AddElement(/datum/element/clockwork_description, clock_desc) - AddElement(/datum/element/clockwork_pickup, ~(ITEM_SLOT_HANDS)) - - -// Thermal goggles, no protection from eye stuff -/obj/item/clothing/glasses/clockwork/wraith_spectacles - name = "wraith spectacles" - desc = "Mystical glasses that glow with a bright energy. Some say they can see things that shouldn't be seen." - icon_state = "wraith_specs_0" - base_icon_state = "wraith_specs" - invis_view = SEE_INVISIBLE_OBSERVER - invis_override = null - flash_protect = FLASH_PROTECTION_SENSITIVE - vision_flags = SEE_MOBS - color_cutoffs = list(5, 15, 5) - glass_colour_type = /datum/client_colour/glass_colour/yellow - actions_types = list(/datum/action/item_action/toggle/clock) - clock_desc = "Applies passive eye damage that regenerates after unequipping, grants thermal vision, and lets you see all forms of invisibility." - /// Who is currently wearing the goggles - var/mob/living/wearer - /// Are the glasses enabled (flipped down) - var/enabled = TRUE - - -/obj/item/clothing/glasses/clockwork/wraith_spectacles/Initialize(mapload) - . = ..() - update_icon_state() - - -/obj/item/clothing/glasses/clockwork/wraith_spectacles/Destroy() - STOP_PROCESSING(SSobj, src) - wearer = null - return ..() - - -/obj/item/clothing/glasses/clockwork/wraith_spectacles/update_icon_state() - . = ..() - icon_state = "[base_icon_state]_[!enabled]" - worn_icon_state = "[base_icon_state]_[!enabled]" - - -/obj/item/clothing/glasses/clockwork/wraith_spectacles/attack_self(mob/user, modifiers) - . = ..() - if(enabled) - disable() - else - enable() - - if(iscarbon(user)) - var/mob/living/carbon/carbon_user = user - carbon_user.head_update(src, forced = TRUE) - - -/// "enable" the spectacles, flipping them down and applying their effects, calling on_toggle_eyes() if someone is wearing them -/obj/item/clothing/glasses/clockwork/wraith_spectacles/proc/enable() - enabled = TRUE - color_cutoffs = list(15, 12, 0) - visor_toggling() - - if(wearer) - on_toggle_eyes() - - update_icon_state() - wearer.update_sight() - - -/// "disable" the spectacles, flipping them up and removing all applied effects -/obj/item/clothing/glasses/clockwork/wraith_spectacles/proc/disable() - enabled = FALSE - color_cutoffs = null - visor_toggling() //this doesn't remove everything, check later - - if(wearer) - de_toggle_eyes() - - update_icon_state() - wearer.update_sight() - - -/// The start of application of the actual effects, including eye damage -/obj/item/clothing/glasses/clockwork/wraith_spectacles/proc/on_toggle_eyes() - wearer.update_sight() - to_chat(wearer, span_clockgray("You suddenly see so much more.")) - - -/// The stopping of effect application, will remove the wearer's eye damage a minute after -/obj/item/clothing/glasses/clockwork/wraith_spectacles/proc/de_toggle_eyes() - wearer.update_sight() - to_chat(wearer, span_clockgray("You feel your eyes slowly readjusting.")) - - -/obj/item/clothing/glasses/clockwork/wraith_spectacles/equipped(mob/living/user, slot) - . = ..() - if(!isliving(user)) - return - - if((slot == ITEM_SLOT_EYES) && enabled) - wearer = user - on_toggle_eyes() - - -/obj/item/clothing/glasses/clockwork/wraith_spectacles/dropped(mob/user) - . = ..() - if(wearer && (IS_CLOCK(user)) && enabled) - de_toggle_eyes() - - wearer = null - - -// Flash protected and generally info-granting with huds -/obj/item/clothing/glasses/clockwork/judicial_visor - name = "judicial visor" - desc = "A purple visor gilt with Ratvarian runes, allowing a user to see, unfettered by others. The cogs on the sides look pretty tight..." - icon_state = "judicial_visor_0" - base_icon_state = "judicial_visor" - flash_protect = FLASH_PROTECTION_WELDER - strip_delay = 10 SECONDS - glass_colour_type = /datum/client_colour/glass_colour/purple - actions_types = list(/datum/action/item_action/toggle/clock) - clock_desc = "Binds itself to the wearer's face, but grants large sight and informational benefits while active." - /// Is this enabled - var/enabled = TRUE - /// Wearer of the visor - var/mob/living/wearer - /// Should the user take damage from wearing this the first time? (Doesn't affect nodrop) - var/damaging = TRUE - - -/obj/item/clothing/glasses/clockwork/judicial_visor/Initialize(mapload) - . = ..() - update_icon_state() - - -/obj/item/clothing/glasses/clockwork/judicial_visor/Destroy() - wearer = null - return ..() - - -/obj/item/clothing/glasses/clockwork/judicial_visor/update_icon_state() - . = ..() - icon_state = "[base_icon_state]_[enabled]" - worn_icon_state = "[base_icon_state]_[enabled]" - - -/obj/item/clothing/glasses/clockwork/judicial_visor/attack_self(mob/user, modifiers) - . = ..() - if(enabled) - disable() - else - enable() - - if(iscarbon(user)) - var/mob/living/carbon/carbon_user = user - carbon_user.head_update(src, forced = TRUE) - - -/// Turn on the visor, calling apply_to_wearer() and changing the icon state -/obj/item/clothing/glasses/clockwork/judicial_visor/proc/enable() - enabled = TRUE - if(wearer) - apply_to_wearer() - - update_icon_state() - - -/// Turn off the visor, calling unapply_to_wearer() and changing the icon state -/obj/item/clothing/glasses/clockwork/judicial_visor/proc/disable() - enabled = FALSE - if(wearer) - unapply_to_wearer() - - update_icon_state() - - -/// Applies the actual effects to the wearer, giving them flash protection and a variety of sight/info bonuses -/obj/item/clothing/glasses/clockwork/judicial_visor/proc/apply_to_wearer() - ADD_TRAIT(wearer, TRAIT_NOFLASH, CLOTHING_TRAIT) - - ADD_TRAIT(wearer, TRAIT_MEDICAL_HUD, CLOTHING_TRAIT) - var/datum/atom_hud/med_hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] - med_hud.show_to(wearer) - - ADD_TRAIT(wearer, TRAIT_SECURITY_HUD, CLOTHING_TRAIT) - var/datum/atom_hud/sec_hud = GLOB.huds[DATA_HUD_SECURITY_ADVANCED] - sec_hud.show_to(wearer) - - ADD_TRAIT(wearer, TRAIT_MADNESS_IMMUNE, CLOTHING_TRAIT) - ADD_TRAIT(wearer, TRAIT_KNOW_ENGI_WIRES, CLOTHING_TRAIT) - ADD_TRAIT(wearer, TRAIT_KNOW_ROBO_WIRES, CLOTHING_TRAIT) - color_cutoffs = list(50, 10, 30) - wearer.update_sight() - -/// Removes the effects to the wearer, removing the flash protection and similar -/obj/item/clothing/glasses/clockwork/judicial_visor/proc/unapply_to_wearer() - REMOVE_TRAIT(wearer, TRAIT_NOFLASH, CLOTHING_TRAIT) - - REMOVE_TRAIT(wearer, TRAIT_MEDICAL_HUD, CLOTHING_TRAIT) - var/datum/atom_hud/med_hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] - med_hud.hide_from(wearer) - - REMOVE_TRAIT(wearer, TRAIT_SECURITY_HUD, CLOTHING_TRAIT) - var/datum/atom_hud/sec_hud = GLOB.huds[DATA_HUD_SECURITY_ADVANCED] - sec_hud.hide_from(wearer) - - REMOVE_TRAIT(wearer, TRAIT_MADNESS_IMMUNE, CLOTHING_TRAIT) - REMOVE_TRAIT(wearer, TRAIT_KNOW_ENGI_WIRES, CLOTHING_TRAIT) - REMOVE_TRAIT(wearer, TRAIT_KNOW_ROBO_WIRES, CLOTHING_TRAIT) - color_cutoffs = null - wearer.update_sight() - - -/obj/item/clothing/glasses/clockwork/judicial_visor/equipped(mob/living/user, slot) - . = ..() - if(!isliving(user)) - return - - if(slot == ITEM_SLOT_EYES) - wearer = user - if(enabled) - apply_to_wearer() - - ADD_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT) - to_chat(wearer, span_userdanger("You feel the cogs on the visor clamp to the sides of your head, drilling in!")) - if(damaging) - wearer.emote("scream") - wearer.Sleeping(VISOR_MOUNT_SLEEP_TIME) - wearer.apply_damage(VISOR_MOUNT_DAMAGE, BRUTE, BODY_ZONE_HEAD) - - -/obj/item/clothing/glasses/clockwork/judicial_visor/dropped(mob/user) - ..() - if(wearer) - unapply_to_wearer() - wearer = null - REMOVE_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT) - -/obj/item/clothing/glasses/clockwork/judicial_visor/no_damage //ideally use this for loadouts n such - damaging = FALSE - - -/obj/item/clothing/head/helmet/clockwork - name = "brass helmet" - desc = "A strong, brass helmet worn by the soldiers of the Ratvarian armies. Includes an integrated light-dimmer for flash protection, as well as occult-grade muffling for factory based environments." - icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb.dmi' - worn_icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb_worn.dmi' - icon_state = "clockwork_helmet" - armor_type = /datum/armor/helmet_clockwork - resistance_flags = FIRE_PROOF | ACID_PROOF - w_class = WEIGHT_CLASS_BULKY - flash_protect = FLASH_PROTECTION_FLASH - -/datum/armor/helmet_clockwork - melee = 50 - bullet = 60 - laser = 30 - energy = 80 - bomb = 80 - bio = 100 - fire = 100 - acid = 100 - -/obj/item/clothing/head/helmet/clockwork/Initialize(mapload) - . = ..() - AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_HEAD)) - AddElement(/datum/element/clockwork_pickup, ~(ITEM_SLOT_HANDS)) - - -/obj/item/clothing/shoes/clockwork - name = "brass treads" - desc = "A strong pair of brass boots worn by the soldiers of the Ratvarian armies." - icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb.dmi' - worn_icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb_worn.dmi' - icon_state = "clockwork_treads" - -/obj/item/clothing/shoes/clockwork/Initialize(mapload) - . = ..() - AddElement(/datum/element/clockwork_pickup, ~(ITEM_SLOT_HANDS)) - - -/obj/item/clothing/gloves/clockwork - name = "brass gauntlets" - desc = "A strong pair of brass gloves worn by the soldiers of the Ratvarian armies." - icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb.dmi' - worn_icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb_worn.dmi' - icon_state = "clockwork_gauntlets" - siemens_coefficient = 0 - strip_delay = 8 SECONDS - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - resistance_flags = NONE - armor_type = /datum/armor/gloves_clockwork - -/datum/armor/gloves_clockwork - melee = 0 - bullet = 0 - laser = 0 - energy = 0 - bomb = 0 - bio = 0 - fire = 80 - acid = 50 - -/obj/item/clothing/gloves/clockwork/Initialize(mapload) - . = ..() - AddElement(/datum/element/clockwork_pickup, ~(ITEM_SLOT_HANDS)) - -#undef VISOR_MOUNT_DAMAGE -#undef VISOR_MOUNT_SLEEP_TIME diff --git a/modular_skyrat/modules/clock_cult/code/items/tools.dm b/modular_skyrat/modules/clock_cult/code/items/tools.dm deleted file mode 100644 index 0b5859626a8ac9..00000000000000 --- a/modular_skyrat/modules/clock_cult/code/items/tools.dm +++ /dev/null @@ -1,60 +0,0 @@ -#define BRASS_TOOLSPEED_MOD 0.5 - -/obj/item/wirecutters/brass - name = "brass wirecutters" - desc = "A pair of wirecutters made of brass. The handle feels faintly warm." - resistance_flags = FIRE_PROOF | ACID_PROOF - icon = 'modular_skyrat/modules/clock_cult/icons/tools.dmi' - icon_state = "cutters_brass" - random_color = FALSE - toolspeed = BRASS_TOOLSPEED_MOD - -/obj/item/screwdriver/brass - name = "brass screwdriver" - desc = "A screwdriver made of brass. The handle feels warm to the touch." - resistance_flags = FIRE_PROOF | ACID_PROOF - icon = 'modular_skyrat/modules/clock_cult/icons/tools.dmi' - icon_state = "screwdriver_brass" - toolspeed = BRASS_TOOLSPEED_MOD - random_color = FALSE - greyscale_config_inhand_left = null - greyscale_config_inhand_right = null - -/obj/item/weldingtool/experimental/brass - name = "brass welding tool" - desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch." - resistance_flags = FIRE_PROOF | ACID_PROOF - icon = 'modular_skyrat/modules/clock_cult/icons/tools.dmi' - icon_state = "welder_brass" - toolspeed = BRASS_TOOLSPEED_MOD - -/obj/item/crowbar/brass - name = "brass crowbar" - desc = "A brass crowbar. It feels faintly warm to the touch." - resistance_flags = FIRE_PROOF | ACID_PROOF - icon = 'modular_skyrat/modules/clock_cult/icons/tools.dmi' - icon_state = "crowbar_brass" - worn_icon_state = "crowbar" - toolspeed = BRASS_TOOLSPEED_MOD - -/obj/item/wrench/brass - name = "brass wrench" - desc = "A brass wrench. It's faintly warm to the touch." - resistance_flags = FIRE_PROOF | ACID_PROOF - icon = 'modular_skyrat/modules/clock_cult/icons/tools.dmi' - icon_state = "wrench_brass" - toolspeed = BRASS_TOOLSPEED_MOD - -/obj/item/storage/belt/utility/clock - name = "old toolbelt" - desc = "Holds tools. This one's seen better days, though. There's the outline of a cog roughly cut into the leather on one side." - -/obj/item/storage/belt/utility/clock/PopulateContents() - new /obj/item/screwdriver/brass(src) - new /obj/item/crowbar/brass(src) - new /obj/item/weldingtool/experimental/brass(src) - new /obj/item/wirecutters/brass(src) - new /obj/item/wrench/brass(src) - new /obj/item/multitool(src) - -#undef BRASS_TOOLSPEED_MOD diff --git a/modular_skyrat/modules/clock_cult/code/items/weaponry.dm b/modular_skyrat/modules/clock_cult/code/items/weaponry.dm deleted file mode 100644 index 92bd53531dd78f..00000000000000 --- a/modular_skyrat/modules/clock_cult/code/items/weaponry.dm +++ /dev/null @@ -1,311 +0,0 @@ -#define HAMMER_FLING_DISTANCE 2 -#define HAMMER_THROW_FLING_DISTANCE 3 -#define BRASS_RIFLE_REDUCED_DELAY 0.25 SECONDS - -/obj/item/clockwork/weapon - name = "clockwork weapon" - desc = "Something" - icon = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_weapons.dmi' - lefthand_file = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_righthand.dmi' - worn_icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb_worn.dmi' - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - throwforce = 20 - throw_speed = 4 - armour_penetration = 10 - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb_continuous = list("attacks", "pokes", "jabs", "tears", "gores") - attack_verb_simple = list("attack", "poke", "jab", "tear", "gore") - sharpness = SHARP_EDGED - /// Typecache of valid turfs to have the weapon's special effect on - var/static/list/effect_turf_typecache = typecacheof(list(/turf/open/floor/bronze)) - - -/obj/item/clockwork/weapon/attack(mob/living/target, mob/living/user) - . = ..() - var/turf/gotten_turf = get_turf(user) - - if(!is_type_in_typecache(gotten_turf, effect_turf_typecache)) - return - - if(!QDELETED(target) && target.stat != DEAD && !IS_CLOCK(target) && !target.can_block_magic(MAGIC_RESISTANCE_HOLY)) - hit_effect(target, user) - - -/obj/item/clockwork/weapon/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - . = ..() - if(.) - return - - if(!isliving(hit_atom)) - return - - var/mob/living/target = hit_atom - - if(!target.can_block_magic(MAGIC_RESISTANCE_HOLY) && !IS_CLOCK(target)) - hit_effect(target, throwingdatum.thrower, TRUE) - - -/// What occurs to non-holy people when attacked from brass tiles -/obj/item/clockwork/weapon/proc/hit_effect(mob/living/target, mob/living/user, thrown = FALSE) - return - - -/obj/item/clockwork/weapon/brass_spear - name = "brass spear" - desc = "A razor-sharp spear made of brass. It thrums with barely-contained energy." - icon_state = "ratvarian_spear" - embedding = list("max_damage_mult" = 15, "armour_block" = 80) - throwforce = 36 - force = 25 - armour_penetration = 24 - - -/obj/item/clockwork/weapon/brass_battlehammer - name = "brass battle-hammer" - desc = "A brass hammer glowing with energy." - base_icon_state = "ratvarian_hammer" - icon_state = "ratvarian_hammer0" - throwforce = 25 - armour_penetration = 6 - attack_verb_simple = list("bash", "hammer", "attack", "smash") - attack_verb_continuous = list("bashes", "hammers", "attacks", "smashes") - clockwork_desc = "Enemies hit by this will be flung back while you are on bronze tiles." - sharpness = 0 - hitsound = 'sound/weapons/smash.ogg' - - -/obj/item/clockwork/weapon/brass_battlehammer/Initialize(mapload) - . = ..() - AddComponent(/datum/component/two_handed, \ - force_unwielded = 15, \ - icon_wielded = "[base_icon_state]1", \ - force_wielded = 28, \ - ) - - -/obj/item/clockwork/weapon/brass_battlehammer/hit_effect(mob/living/target, mob/living/user, thrown = FALSE) - if(!thrown && !HAS_TRAIT(src, TRAIT_WIELDED)) - return - - var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src))) - target.throw_at(throw_target, thrown ? HAMMER_THROW_FLING_DISTANCE : HAMMER_FLING_DISTANCE, 4) - -/obj/item/clockwork/weapon/brass_battlehammer/update_icon_state() - icon_state = "[base_icon_state]0" - return ..() - -/obj/item/clockwork/weapon/brass_sword - name = "brass longsword" - desc = "A large sword made of brass." - icon_state = "ratvarian_sword" - force = 26 - throwforce = 20 - armour_penetration = 12 - attack_verb_simple = list("attack", "slash", "cut", "tear", "gore") - attack_verb_continuous = list("attacks", "slashes", "cuts", "tears", "gores") - clockwork_desc = "Enemies and mechs will be struck with a powerful electromagnetic pulse while you are on bronze tiles, with a cooldown." - COOLDOWN_DECLARE(emp_cooldown) - - -/obj/item/clockwork/weapon/brass_sword/hit_effect(mob/living/target, mob/living/user, thrown) - if(!COOLDOWN_FINISHED(src, emp_cooldown)) - return - - COOLDOWN_START(src, emp_cooldown, 30 SECONDS) - - target.emp_act(EMP_LIGHT) - new /obj/effect/temp_visual/emp/pulse(target.loc) - addtimer(CALLBACK(src, PROC_REF(send_message), user), 30 SECONDS) - to_chat(user, span_brass("You strike [target] with an electromagnetic pulse!")) - playsound(user, 'sound/magic/lightningshock.ogg', 40) - - -/obj/item/clockwork/weapon/brass_sword/attack_atom(obj/attacked_obj, mob/living/user, params) - . = ..() - var/turf/gotten_turf = get_turf(user) - - if(!ismecha(attacked_obj) || !is_type_in_typecache(gotten_turf, effect_turf_typecache)) - return - - if(!COOLDOWN_FINISHED(src, emp_cooldown)) - return - - COOLDOWN_START(src, emp_cooldown, 20 SECONDS) - - var/obj/vehicle/sealed/mecha/target = attacked_obj - target.emp_act(EMP_HEAVY) - new /obj/effect/temp_visual/emp/pulse(target.loc) - addtimer(CALLBACK(src, PROC_REF(send_message), user), 20 SECONDS) - to_chat(user, span_brass("You strike [target] with an electromagnetic pulse!")) - playsound(user, 'sound/magic/lightningshock.ogg', 40) - - -/obj/item/clockwork/weapon/brass_sword/proc/send_message(mob/living/target) - to_chat(target, span_brass("[src] glows, indicating the next attack will disrupt electronics of the target.")) - - -/obj/item/gun/ballistic/bow/clockwork - name = "brass bow" - desc = "A bow made from brass and other components that you can't quite understand. It glows with a deep energy and frabricates arrows by itself." - icon = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_weapons.dmi' - lefthand_file = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_righthand.dmi' - icon_state = "bow_clockwork_unchambered_undrawn" - inhand_icon_state = "clockwork_bow" - base_icon_state = "bow_clockwork" - force = 10 - accepted_magazine_type = /obj/item/ammo_box/magazine/internal/bow/clockwork - /// Time between bolt recharges - var/recharge_time = 1.5 SECONDS - /// Typecache of valid turfs to have the weapon's special effect on - var/static/list/effect_turf_typecache = typecacheof(list(/turf/open/floor/bronze)) - -/obj/item/gun/ballistic/bow/clockwork/Initialize(mapload) - . = ..() - update_icon_state() - AddElement(/datum/element/clockwork_description, "Firing from brass tiles will halve the time that it takes to recharge a bolt.") - AddElement(/datum/element/clockwork_pickup) - -/obj/item/gun/ballistic/bow/clockwork/afterattack(atom/target, mob/living/user, flag, params, passthrough) - if(!drawn || !chambered) - to_chat(user, span_notice("[src] must be drawn to fire a shot!")) - return - - return ..() - -/obj/item/gun/ballistic/bow/clockwork/shoot_live_shot(mob/living/user, pointblank, atom/pbtarget, message) - . = ..() - var/turf/user_turf = get_turf(user) - - if(is_type_in_typecache(user_turf, effect_turf_typecache)) - recharge_time = 0.75 SECONDS - - addtimer(CALLBACK(src, PROC_REF(recharge_bolt)), recharge_time) - recharge_time = initial(recharge_time) - -/obj/item/gun/ballistic/bow/clockwork/attack_self(mob/living/user) - if(drawn || !chambered) - return - - if(!do_after(user, 0.5 SECONDS, src)) - return - - to_chat(user, span_notice("You draw back the bowstring.")) - drawn = TRUE - playsound(src, 'modular_skyrat/modules/tribal_extended/sound/sound_weapons_bowdraw.ogg', 75, 0) //gets way too high pitched if the freq varies - update_icon() - - -/// Recharges a bolt, done after the delay in shoot_live_shot -/obj/item/gun/ballistic/bow/clockwork/proc/recharge_bolt() - var/obj/item/ammo_casing/arrow/clockbolt/bolt = new - magazine.give_round(bolt) - chambered = bolt - update_icon() - - -/obj/item/gun/ballistic/bow/clockwork/attackby(obj/item/I, mob/user, params) - return - - -/obj/item/gun/ballistic/bow/clockwork/update_icon_state() - . = ..() - icon_state = "[base_icon_state]_[chambered ? "chambered" : "unchambered"]_[drawn ? "drawn" : "undrawn"]" - - -/obj/item/ammo_box/magazine/internal/bow/clockwork - ammo_type = /obj/item/ammo_casing/arrow/clockbolt - start_empty = FALSE - - -/obj/item/ammo_casing/arrow/clockbolt - name = "energy bolt" - desc = "An arrow made from a strange energy." - icon = 'modular_skyrat/modules/clock_cult/icons/weapons/ammo.dmi' - icon_state = "arrow_redlight" - projectile_type = /obj/projectile/energy/clockbolt - - -/obj/projectile/energy/clockbolt - name = "energy bolt" - icon = 'modular_skyrat/modules/clock_cult/icons/projectiles.dmi' - icon_state = "arrow_energy" - damage = 35 - damage_type = BURN - - -/obj/item/gun/ballistic/rifle/lionhunter/clockwork - name = "brass rifle" - desc = "An antique, brass rifle made with the finest of care. It has an ornate scope in the shape of a cog built into the top." - icon = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_weapons_40x32.dmi' - lefthand_file = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_righthand.dmi' - worn_icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb_worn.dmi' - slot_flags = ITEM_SLOT_BACK - icon_state = "clockwork_rifle" - inhand_icon_state = "clockwork_rifle" - worn_icon_state = "clockwork_rifle" - accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/lionhunter/clockwork - fire_sound = 'sound/weapons/gun/sniper/shot.ogg' - show_bolt_icon = FALSE - - -/obj/item/gun/ballistic/rifle/lionhunter/clockwork/Initialize(mapload) - . = ..() - AddElement(/datum/element/clockwork_description, "The speed of which you aim at far targets while standing on brass will be massively increased.") - AddElement(/datum/element/clockwork_pickup) - -/obj/item/ammo_box/magazine/internal/boltaction/lionhunter/clockwork - name = "brass rifle internal magazine" - ammo_type = /obj/item/ammo_casing/strilka310/lionhunter/clock - - -/obj/item/ammo_casing/strilka310/lionhunter/clock - name = "brass rifle round" - projectile_type = /obj/projectile/bullet/strilka310/lionhunter/clock - min_distance = 3 - - -/obj/item/ammo_casing/strilka310/lionhunter/clock/fire_casing(atom/target, mob/living/user, params, distro, quiet, zone_override, spread, atom/fired_from) - var/obj/item/gun/ballistic/fired_gun = fired_from - - if(istype(get_turf(user), /turf/open/floor/bronze) && istype(fired_gun, /obj/item/gun/ballistic/rifle/lionhunter/clockwork)) - seconds_per_distance = BRASS_RIFLE_REDUCED_DELAY - - return ..() - - -/obj/projectile/bullet/strilka310/lionhunter/clock - name = "brass .310 bullet" - // These stats are only applied if the weapon is fired fully aimed - // If fired without aiming or at someone too close, it will do much less - damage = 45 - stamina = 45 - - -/obj/item/ammo_box/strilka310/lionhunter/clock - name = "stripper clip (.310 brass)" - desc = "A stripper clip that's just as brass as the rounds it holds." - icon = 'modular_skyrat/modules/clock_cult/icons/weapons/ammo.dmi' - icon_state = "762_brass" - ammo_type = /obj/item/ammo_casing/strilka310/lionhunter/clock - unique_reskin = NONE - max_ammo = 3 - multiple_sprites = AMMO_BOX_PER_BULLET - - -/obj/item/storage/pouch/ammo/clock - -/obj/item/storage/pouch/ammo/clock/PopulateContents() - var/static/items_inside = list( - /obj/item/ammo_box/strilka310/lionhunter/clock = 3 - ) - - generate_items_inside(items_inside, src) - - -#undef HAMMER_FLING_DISTANCE -#undef HAMMER_THROW_FLING_DISTANCE -#undef BRASS_RIFLE_REDUCED_DELAY diff --git a/modular_skyrat/modules/clock_cult/code/status_effects.dm b/modular_skyrat/modules/clock_cult/code/status_effects.dm deleted file mode 100644 index e9798e26dddab8..00000000000000 --- a/modular_skyrat/modules/clock_cult/code/status_effects.dm +++ /dev/null @@ -1,32 +0,0 @@ -/datum/status_effect/interdiction - id = "interdicted" - duration = 2.5 SECONDS - status_type = STATUS_EFFECT_REFRESH - tick_interval = 0.2 SECONDS - alert_type = /atom/movable/screen/alert/status_effect/interdiction - /// If we kicked the owner out of running mode - var/running_toggled = FALSE - -/datum/status_effect/interdiction/tick(seconds_between_ticks) - if(owner.move_intent == MOVE_INTENT_RUN) - owner.toggle_move_intent(owner) - owner.adjust_confusion_up_to(1 SECONDS, 1 SECONDS) - running_toggled = TRUE - to_chat(owner, span_warning("You know you shouldn't be running here.")) - - owner.add_movespeed_modifier(/datum/movespeed_modifier/clock_interdiction) - -/datum/status_effect/interdiction/on_remove() - owner.remove_movespeed_modifier(/datum/movespeed_modifier/clock_interdiction) - - if(running_toggled && owner.move_intent == MOVE_INTENT_WALK) - owner.toggle_move_intent(owner) - -/atom/movable/screen/alert/status_effect/interdiction - name = "Interdicted" - desc = "I don't think I am meant to go this way." - icon = 'modular_skyrat/modules/clock_cult/icons/actions_clock.dmi' - icon_state = "interdiction_effect" //fix later - -/datum/movespeed_modifier/clock_interdiction - multiplicative_slowdown = 1.5 diff --git a/modular_skyrat/modules/cme/code/_cme_defines.dm b/modular_skyrat/modules/cme/code/_cme_defines.dm deleted file mode 100644 index 54fa3f546d3ac7..00000000000000 --- a/modular_skyrat/modules/cme/code/_cme_defines.dm +++ /dev/null @@ -1,65 +0,0 @@ -/* -* CME DEFINES -*/ - -GLOBAL_LIST_INIT(cme_loot_list, list( - /obj/item/raw_anomaly_core/random = 30, - /obj/item/stack/sheet/bluespace_crystal = 20, - /obj/item/stack/sheet/mineral/diamond = 10, - )) - -/obj/item/strange - -#define CME_UNKNOWN "unknown" -#define CME_MINIMAL "minimal" -#define CME_MODERATE "moderate" -#define CME_EXTREME "extreme" -#define CME_ARMAGEDDON "armageddon" - -//Times are SECONDS, they're devided by 2 because that's how long the controller takes to process. 20 deciseconds = 2 seconds. I know, it's dumb as fuck. -//NOT ANYMORE, NOW WE MULTIPLY BY A HALF - -#define CME_MINIMAL_LIGHT_RANGE_LOWER 7 //The lowest range for the emp pulse light range. -#define CME_MINIMAL_LIGHT_RANGE_UPPER 11 //The highest range for the emp pulse light range. -#define CME_MINIMAL_HEAVY_RANGE_LOWER 5 //The lowest range for the emp pulse heavy range. -#define CME_MINIMAL_HEAVY_RANGE_UPPER 7 //The highest range for the emp pulse heavy range. -#define CME_MINIMAL_FREQUENCY_LOWER (23 * 0.5) //The lower time range for cme bubbles to appear. -#define CME_MINIMAL_FREQUENCY_UPPER (25 * 0.5) //The higher time range for cme bubbles to appear. -#define CME_MINIMAL_BUBBLE_BURST_TIME (45 SECONDS) //The time taken for a cme bubble to pop. -#define CME_MINIMAL_START_LOWER (120 * 0.5) //The lowest amount of time for the event to start from the announcement. - Prep time -#define CME_MINIMAL_START_UPPER (180 * 0.5) //The highest amount of time for the event to start from the announcement. - Prep time -#define CME_MINIMAL_END (rand(60, 110) * 0.5) //The amount of time starting from THE MINIMAL START TIME for the event to end. - How long it actually lasts. - -#define CME_MODERATE_LIGHT_RANGE_LOWER 9 -#define CME_MODERATE_LIGHT_RANGE_UPPER 13 -#define CME_MODERATE_HEAVY_RANGE_LOWER 7 -#define CME_MODERATE_HEAVY_RANGE_UPPER 9 -#define CME_MODERATE_FREQUENCY_LOWER (21 * 0.5) -#define CME_MODERATE_FREQUENCY_UPPER (23 * 0.5) -#define CME_MODERATE_BUBBLE_BURST_TIME (35 SECONDS) -#define CME_MODERATE_START_LOWER (120 * 0.5) -#define CME_MODERATE_START_UPPER (180 * 0.5) -#define CME_MODERATE_END (rand(90, 140) * 0.5) - - -#define CME_EXTREME_LIGHT_RANGE_LOWER 11 -#define CME_EXTREME_LIGHT_RANGE_UPPER 15 -#define CME_EXTREME_HEAVY_RANGE_LOWER 9 -#define CME_EXTREME_HEAVY_RANGE_UPPER 11 -#define CME_EXTREME_FREQUENCY_LOWER (19 * 0.5) -#define CME_EXTREME_FREQUENCY_UPPER (21 * 0.5) -#define CME_EXTREME_BUBBLE_BURST_TIME (35 SECONDS) -#define CME_EXTREME_START_LOWER (60 * 0.5) -#define CME_EXTREME_START_UPPER (120 * 0.5) -#define CME_EXTREME_END (rand(90, 140) * 0.5) - -#define CME_ARMAGEDDON_LIGHT_RANGE_LOWER 25 -#define CME_ARMAGEDDON_LIGHT_RANGE_UPPER 30 -#define CME_ARMAGEDDON_HEAVY_RANGE_LOWER 20 -#define CME_ARMAGEDDON_HEAVY_RANGE_UPPER 25 -#define CME_ARMAGEDDON_FREQUENCY_LOWER (5 * 0.5) -#define CME_ARMAGEDDON_FREQUENCY_UPPER (7 * 0.5) -#define CME_ARMAGEDDON_BUBBLE_BURST_TIME (10 SECONDS) -#define CME_ARMAGEDDON_START_LOWER (60 * 0.5) -#define CME_ARMAGEDDON_START_UPPER (70 * 0.5) -#define CME_ARMAGEDDON_END (300 * 0.5) diff --git a/modular_skyrat/modules/cme/code/cme.dm b/modular_skyrat/modules/cme/code/cme.dm deleted file mode 100644 index c6e3cca9b07cff..00000000000000 --- a/modular_skyrat/modules/cme/code/cme.dm +++ /dev/null @@ -1,314 +0,0 @@ -/* -* CME EVENT SYSTEM -* SEE _CME_DEFINES.DM FOR SETTINGS. -*/ - -/* Welcome to the CME control system. -* -* This controls the CME event, or coronal mass ejection event, which causes multiple EMP bubbles to form around the station -* depending on conditons and time. There are currently 4 settings of CME, all of which have settings defined in the -* cme defines DM file. See that for more info -* -* Armageddon is truly going to fuck the station, use it sparingly. -*/ - -/datum/round_event_control/cme - name = "Coronal Mass Ejection: Random" - typepath = /datum/round_event/cme - weight = 0 - max_occurrences = 0 - earliest_start = 45 MINUTES - category = EVENT_CATEGORY_SPACE - description = "Spawns a CME event of varied severities" - -/datum/round_event/cme - start_when = 6 - end_when = 66 - announce_when = 10 - var/cme_intensity - var/cme_frequency_lower - var/cme_frequency_upper - var/list/cme_start_locs = list() - -/datum/round_event_control/cme/unknown - name = "Coronal Mass Ejection: Unknown" - typepath = /datum/round_event/cme/unknown - weight = 15 - min_players = 75 - max_occurrences = 1 - description = "Spawns a CME event of a unknown severity" - -/datum/round_event/cme/unknown - cme_intensity = CME_UNKNOWN - -/datum/round_event_control/cme/minimal - name = "Coronal Mass Ejection: Minimal" - typepath = /datum/round_event/cme/minimal - weight = 0 - max_occurrences = 0 - description = "Spawns a CME event of minimum severity" - -/datum/round_event/cme/minimal - cme_intensity = CME_MINIMAL - -/datum/round_event_control/cme/moderate - name = "Coronal Mass Ejection: Moderate" - typepath = /datum/round_event/cme/moderate - weight = 0 - max_occurrences = 0 - description = "Spawns a CME event of moderate severity" - -/datum/round_event/cme/moderate - cme_intensity = CME_MODERATE - -/datum/round_event_control/cme/extreme - name = "Coronal Mass Ejection: Extreme" - typepath = /datum/round_event/cme/extreme - weight = 0 - min_players = 75 - max_occurrences = 0 - description = "Spawns a CME event of extreme severity" - -/datum/round_event/cme/extreme - cme_intensity = CME_EXTREME - -/datum/round_event_control/cme/armageddon - name = "Coronal Mass Ejection: Armageddon" - typepath = /datum/round_event/cme/armageddon - weight = 0 - max_occurrences = 0 - description = "Spawns a CME event of Arnageddon severity. WARNING this is round ending severe." - -/datum/round_event/cme/armageddon - cme_intensity = CME_ARMAGEDDON - -/datum/round_event/cme/setup() - if(!cme_intensity) - cme_intensity = pick(CME_MINIMAL, CME_UNKNOWN, CME_MODERATE, CME_EXTREME) - switch(cme_intensity) - if(CME_UNKNOWN) - cme_frequency_lower = CME_MODERATE_FREQUENCY_LOWER - cme_frequency_upper = CME_MODERATE_FREQUENCY_UPPER - start_when = rand(CME_MODERATE_START_LOWER, CME_MODERATE_START_UPPER) - end_when = start_when + CME_MODERATE_END - if(CME_MINIMAL) - cme_frequency_lower = CME_MINIMAL_FREQUENCY_LOWER - cme_frequency_upper = CME_MINIMAL_FREQUENCY_UPPER - start_when = rand(CME_MINIMAL_START_LOWER, CME_MINIMAL_START_UPPER) - end_when = start_when + CME_MINIMAL_END - if(CME_MODERATE) - cme_frequency_lower = CME_MODERATE_FREQUENCY_LOWER - cme_frequency_upper = CME_MODERATE_FREQUENCY_UPPER - start_when = rand(CME_MODERATE_START_LOWER, CME_MODERATE_START_UPPER) - end_when = start_when + CME_MODERATE_END - if(CME_EXTREME) - cme_frequency_lower = CME_EXTREME_FREQUENCY_LOWER - cme_frequency_upper = CME_EXTREME_FREQUENCY_UPPER - start_when = rand(CME_EXTREME_START_LOWER, CME_EXTREME_START_UPPER) - end_when = start_when + CME_EXTREME_END - if(CME_ARMAGEDDON) - cme_frequency_lower = CME_ARMAGEDDON_FREQUENCY_LOWER - cme_frequency_upper = CME_ARMAGEDDON_FREQUENCY_UPPER - start_when = rand(CME_ARMAGEDDON_START_LOWER, CME_ARMAGEDDON_START_UPPER) - end_when = start_when + CME_ARMAGEDDON_END - else - message_admins("CME setup failure, aborting.") - kill() - - for(var/turf/open/floor/T in world) - var/area/turf_area = get_area(T) - if(is_station_level(T.z) && !istype(turf_area, /area/solars) && !istype(turf_area, /area/icemoon)) - cme_start_locs += T - -/datum/round_event/cme/announce(fake) - if(fake) - priority_announce("Critical Coronal mass ejection detected! Expected intensity: [uppertext(cme_intensity)]. Impact in: [rand(200, 300)] seconds. \ - All synthetic and non-organic lifeforms should seek shelter immediately! \ - Ensure all sensitive equipment is shielded.", "Solar Event", sound('modular_skyrat/modules/cme/sound/cme_warning.ogg')) - else - switch(cme_intensity) - if(CME_UNKNOWN) - priority_announce("Coronal mass ejection detected! Expected intensity: UNKNOWN. Impact in: [round((start_when * SSevents.wait) * 0.1, 0.1)] seconds. \ - All synthetic and non-organic lifeforms should seek shelter immediately! \ - Neutralize magnetic field bubbles at all costs.", "Solar Event", sound('modular_skyrat/modules/cme/sound/cme_warning.ogg')) - if(CME_MINIMAL) - priority_announce("Coronal mass ejection detected! Expected intensity: [uppertext(cme_intensity)]. Impact in: [round((start_when * SSevents.wait) * 0.1, 0.1)] seconds. \ - All synthetic and non-organic lifeforms should seek shelter immediately! \ - Neutralize magnetic field bubbles at all costs.", "Solar Event", sound('modular_skyrat/modules/cme/sound/cme_warning.ogg')) - if(CME_MODERATE) - priority_announce("Coronal mass ejection detected! Expected intensity: [uppertext(cme_intensity)]. Impact in: [round((start_when * SSevents.wait) * 0.1, 0.1)] seconds. \ - All synthetic and non-organic lifeforms should seek shelter immediately! \ - Neutralize magnetic field bubbles at all costs.", "Solar Event", sound('modular_skyrat/modules/cme/sound/cme_warning.ogg')) - if(CME_EXTREME) - addtimer(CALLBACK(src, PROC_REF(cme_level_callback), SEC_LEVEL_ORANGE, TRUE, FALSE), (round((start_when * SSevents.wait) * 0.1, 0.1)) SECONDS) - priority_announce("Critical Coronal mass ejection detected! Expected intensity: [uppertext(cme_intensity)]. Impact in: [round((start_when * SSevents.wait) * 0.1, 0.1)] seconds. \ - All synthetic and non-organic lifeforms should seek shelter immediately! \ - Neutralize magnetic field bubbles at all costs.", "Solar Event", sound('modular_skyrat/modules/cme/sound/cme_warning.ogg')) - if(CME_ARMAGEDDON) - addtimer(CALLBACK(src, PROC_REF(cme_level_callback), SEC_LEVEL_GAMMA, TRUE, TRUE), (round((start_when * SSevents.wait) * 0.1, 0.1)) SECONDS) - priority_announce("Neutron Mass Ejection Detected! Expected intensity: [uppertext(cme_intensity)]. Impact in: [round((start_when * SSevents.wait) * 0.1, 0.1)] seconds. \ - All personnel should proceed to their nearest warpgate for evacuation, the Solar Federation has issued this mandatory alert.", "Solar Event", sound('modular_skyrat/modules/cme/sound/cme_warning.ogg')) - -/datum/round_event/cme/tick(seconds_between_ticks) - if(ISMULTIPLE(activeFor, rand(cme_frequency_lower, cme_frequency_upper))) - var/turf/spawnpoint = pick(cme_start_locs) - spawn_cme(spawnpoint, cme_intensity) - -/datum/round_event/cme/proc/cme_level_callback(sec_level = SEC_LEVEL_ORANGE, engi = TRUE, maint = FALSE) - INVOKE_ASYNC(SSsecurity_level, TYPE_PROC_REF(/datum/controller/subsystem/security_level/, minimum_security_level), sec_level, engi, maint) - -/datum/round_event/cme/proc/spawn_cme(turf/spawnpoint, intensity) - if(intensity == CME_UNKNOWN) - intensity = pick(CME_MINIMAL, CME_MODERATE, CME_EXTREME) - if(intensity == CME_EXTREME) - INVOKE_ASYNC(SSsecurity_level, TYPE_PROC_REF(/datum/controller/subsystem/security_level/, minimum_security_level), SEC_LEVEL_ORANGE, TRUE, FALSE) - - var/area/loc_area_name = get_area(spawnpoint) - minor_announce("WARNING! [uppertext(intensity)] PULSE EXPECTED IN: [loc_area_name.name]", "Solar Flare Log:") - switch(intensity) - if(CME_MINIMAL) - var/obj/effect/cme/spawnedcme = new(spawnpoint) - announce_to_ghosts(spawnedcme) - if(CME_MODERATE) - var/obj/effect/cme/moderate/spawnedcme = new(spawnpoint) - announce_to_ghosts(spawnedcme) - if(CME_EXTREME) - var/obj/effect/cme/extreme/spawnedcme = new(spawnpoint) - announce_to_ghosts(spawnedcme) - if(CME_ARMAGEDDON) - var/obj/effect/cme/armageddon/spawnedcme = new(spawnpoint) - announce_to_ghosts(spawnedcme) - - -/datum/round_event/cme/end() - minor_announce("The station has cleared the solar flare, please proceed to repair electronic failures.", "CME cleared:") - - -/* -* CME BUBBLES -*/ - -/obj/effect/cme - desc = "A solar ejection projection." - name = "MINIMAL SOLAR EJECTION" - icon = 'modular_skyrat/modules/cme/icons/cme_effect.dmi' - icon_state = "cme_effect" - color = COLOR_BLUE_LIGHT - light_range = 5 - light_power = 2 - light_color = COLOR_BLUE_LIGHT - pixel_x = -32 - pixel_y = -32 - anchored = TRUE - opacity = FALSE - density = FALSE - plane = ABOVE_LIGHTING_PLANE - can_atmos_pass = ATMOS_PASS_DENSITY - var/timeleft = CME_MINIMAL_BUBBLE_BURST_TIME - var/cme_light_range_lower = CME_MINIMAL_LIGHT_RANGE_LOWER - var/cme_light_range_upper = CME_MINIMAL_LIGHT_RANGE_UPPER - var/cme_heavy_range_lower = CME_MINIMAL_HEAVY_RANGE_LOWER - var/cme_heavy_range_upper = CME_MINIMAL_HEAVY_RANGE_UPPER - var/neutralized = FALSE - -/obj/effect/cme/moderate - name = "MODERATE SOLAR EJECTION" - color = COLOR_VIVID_YELLOW - light_color = COLOR_VIVID_YELLOW - timeleft = CME_MODERATE_BUBBLE_BURST_TIME - cme_light_range_lower = CME_MODERATE_LIGHT_RANGE_LOWER - cme_light_range_upper = CME_MODERATE_LIGHT_RANGE_UPPER - cme_heavy_range_lower = CME_MODERATE_HEAVY_RANGE_LOWER - cme_heavy_range_upper = CME_MODERATE_HEAVY_RANGE_UPPER - -/obj/effect/cme/extreme - name = "EXTREME SOLAR EJECTION" - color = COLOR_RED - light_color = COLOR_RED - timeleft = CME_EXTREME_BUBBLE_BURST_TIME - cme_light_range_lower = CME_EXTREME_LIGHT_RANGE_LOWER - cme_light_range_upper = CME_EXTREME_LIGHT_RANGE_UPPER - cme_heavy_range_lower = CME_EXTREME_HEAVY_RANGE_LOWER - cme_heavy_range_upper = CME_EXTREME_HEAVY_RANGE_UPPER - -/obj/effect/cme/armageddon - name = "ARMAGEDDON SOLAR EJECTION" - color = COLOR_VIOLET - light_color = COLOR_VIOLET - timeleft = CME_ARMAGEDDON_BUBBLE_BURST_TIME - cme_light_range_lower = CME_ARMAGEDDON_LIGHT_RANGE_LOWER - cme_light_range_upper = CME_ARMAGEDDON_LIGHT_RANGE_UPPER - cme_heavy_range_lower = CME_ARMAGEDDON_HEAVY_RANGE_LOWER - cme_heavy_range_upper = CME_ARMAGEDDON_HEAVY_RANGE_UPPER - -/obj/effect/cme/Initialize(mapload) - . = ..() - playsound(src,'sound/weapons/resonator_fire.ogg',75,TRUE) - var/turf/open/T = get_turf(src) - if(istype(T)) - T.atmos_spawn_air("o2=15;plasma=15;TEMP=5778") - addtimer(CALLBACK(src, PROC_REF(burst)), timeleft) - -/obj/effect/cme/proc/burst() - if(neutralized) - visible_message(span_notice("[src] fizzles out into nothingness.")) - new /obj/effect/particle_effect/fluid/smoke/bad(loc) - qdel(src) - return - var/pulse_range_light = rand(cme_light_range_lower, cme_light_range_upper) - var/pulse_range_heavy = rand(cme_heavy_range_lower, cme_heavy_range_upper) - empulse(src, pulse_range_heavy, pulse_range_light) - playsound(src,'sound/weapons/resonator_blast.ogg',100,TRUE) - explosion(src, 0, 0, 2, flame_range = 3) - playsound(src,'modular_skyrat/modules/cme/sound/cme.ogg', 100) - qdel(src) - -/obj/effect/cme/armageddon/burst() - if(neutralized) - visible_message(span_notice("[src] fizzles out into nothingness.")) - new /obj/effect/particle_effect/fluid/smoke/bad(loc) - qdel(src) - return - var/pulse_range_light = rand(cme_light_range_lower, cme_light_range_upper) - var/pulse_range_heavy = rand(cme_heavy_range_lower, cme_heavy_range_upper) - empulse(src, pulse_range_heavy, pulse_range_light) - explosion(src, 0, 3, 10, flame_range = 10) - playsound(src,'sound/weapons/resonator_blast.ogg',100,TRUE) - playsound(src,'modular_skyrat/modules/cme/sound/cme.ogg', 100) - qdel(src) - -/obj/effect/cme/singularity_pull() - burst() - -/obj/effect/cme/proc/anomalyNeutralize() - playsound(src,'sound/weapons/resonator_blast.ogg',100,TRUE) - new /obj/effect/particle_effect/fluid/smoke/bad(loc) - color = COLOR_WHITE - light_color = COLOR_WHITE - neutralized = TRUE - var/atom/movable/loot = pick_weight(GLOB.cme_loot_list) - new loot(loc) - -/obj/effect/cme/extreme/anomalyNeutralize() - playsound(src,'sound/weapons/resonator_blast.ogg',100,TRUE) - new /obj/effect/particle_effect/fluid/smoke/bad(loc) - var/turf/open/T = get_turf(src) - if(istype(T)) - T.atmos_spawn_air("o2=30;plasma=30;TEMP=5778") - color = COLOR_WHITE - light_color = COLOR_WHITE - neutralized = TRUE - var/atom/movable/loot = pick_weight(GLOB.cme_loot_list) - new loot(loc) - -/obj/effect/cme/armageddon/anomalyNeutralize() - playsound(src,'sound/weapons/resonator_blast.ogg',100,TRUE) - new /obj/effect/particle_effect/fluid/smoke/bad(loc) - var/turf/open/T = get_turf(src) - if(istype(T)) - T.atmos_spawn_air("o2=30;plasma=80;TEMP=5778") - color = COLOR_WHITE - light_color = COLOR_WHITE - neutralized = TRUE - var/atom/movable/loot = pick_weight(GLOB.cme_loot_list) - new loot(loc) diff --git a/modular_skyrat/modules/cme/icons/cme_effect.dmi b/modular_skyrat/modules/cme/icons/cme_effect.dmi deleted file mode 100644 index 5c3e2cf0761d27..00000000000000 Binary files a/modular_skyrat/modules/cme/icons/cme_effect.dmi and /dev/null differ diff --git a/modular_skyrat/modules/cme/readme.md b/modular_skyrat/modules/cme/readme.md deleted file mode 100644 index 6d2af7ef42dc4c..00000000000000 --- a/modular_skyrat/modules/cme/readme.md +++ /dev/null @@ -1,24 +0,0 @@ -## Title: Coronal Mass Ejection Event - -MODULE ID: CME - -### Description: - -Adds in a new event called CME, an EMP based event that spawns random EMP's across the station. - -### TG Proc Changes: - -N/A - -### Defines: - -N/A - -### Included files: - -N/A - -### Credits: - -Gandalf2k15 - OG -CME sound effect - Faster Than Light(FTL) diff --git a/modular_skyrat/modules/cme/sound/cme.ogg b/modular_skyrat/modules/cme/sound/cme.ogg deleted file mode 100644 index 8c57ad37569466..00000000000000 Binary files a/modular_skyrat/modules/cme/sound/cme.ogg and /dev/null differ diff --git a/modular_skyrat/modules/cme/sound/cme_warning.ogg b/modular_skyrat/modules/cme/sound/cme_warning.ogg deleted file mode 100644 index e912b3a277c174..00000000000000 Binary files a/modular_skyrat/modules/cme/sound/cme_warning.ogg and /dev/null differ diff --git a/modular_skyrat/modules/colony_fabricator/code/appliances/chem_machines.dm b/modular_skyrat/modules/colony_fabricator/code/appliances/chem_machines.dm deleted file mode 100644 index 988e335fff71b0..00000000000000 --- a/modular_skyrat/modules/colony_fabricator/code/appliances/chem_machines.dm +++ /dev/null @@ -1,29 +0,0 @@ -// Machine that makes water and nothing else - -/obj/machinery/plumbing/synthesizer/water_synth - name = "water synthesizer" - desc = "An infinitely useful device for those finding themselves in a frontier without a stable source of water. \ - Using a simplified version of the chemistry dispenser's synthesizer process, it can create water out of nothing \ - but good old electricity." - icon = 'modular_skyrat/modules/colony_fabricator/icons/chemistry_machines.dmi' - icon_state = "water_synth" - anchored = FALSE - /// Reagents that this can dispense, overrides the default list on init - var/static/list/synthesizable_reagents = list( - /datum/reagent/water, - ) - -/obj/machinery/plumbing/synthesizer/water_synth/Initialize(mapload, bolt, layer) - . = ..() - dispensable_reagents = synthesizable_reagents - AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) - -// Deployable item for cargo for the water synth - -/obj/item/flatpacked_machine/water_synth - name = "water synthesizer parts kit" - icon = 'modular_skyrat/modules/colony_fabricator/icons/chemistry_machines.dmi' - icon_state = "water_synth_parts" - w_class = WEIGHT_CLASS_NORMAL - type_to_deploy = /obj/machinery/plumbing/synthesizer/water_synth - deploy_time = 2 SECONDS diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/appliances.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/appliances.dm deleted file mode 100644 index acd6182f3f1d77..00000000000000 --- a/modular_skyrat/modules/colony_fabricator/code/design_datums/appliances.dm +++ /dev/null @@ -1,96 +0,0 @@ -// Machine categories - -#define FABRICATOR_CATEGORY_APPLIANCES "/Appliances" -#define FABRICATOR_SUBCATEGORY_POWER "/Power" -#define FABRICATOR_SUBCATEGORY_ATMOS "/Atmospherics" -#define FABRICATOR_SUBCATEGORY_FLUIDS "/Liquids" - -// Techweb node that shouldnt show up anywhere ever specifically for the fabricator to work with - -/datum/techweb_node/colony_fabricator_appliances - id = "colony_fabricator_appliances" - display_name = "Colony Fabricator Appliance Designs" - description = "Contains all of the colony fabricator's appliance machine designs." - design_ids = list( - "wall_multi_cell_rack", - "portable_lil_pump", - "portable_scrubbs", - "survival_knife", // I just don't want to make a whole new node for this one sorry - "soup_pot", // This one too - "water_synth", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000000000000000) // God save you - hidden = TRUE - show_on_wiki = FALSE - starting_node = TRUE - -// Wall mountable multi cell charger - -/datum/design/wall_mounted_multi_charger - name = "Mounted Multi-Cell Charging Rack" - id = "wall_multi_cell_rack" - build_type = COLONY_FABRICATOR - materials = list( - /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, - /datum/material/silver = SHEET_MATERIAL_AMOUNT * 1, - ) - build_path = /obj/item/wallframe/cell_charger_multi - category = list( - RND_CATEGORY_INITIAL, - FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_POWER, - ) - construction_time = 15 SECONDS - -// Portable scrubber and pumps for all your construction atmospherics needs - -/datum/design/portable_gas_pump - name = "Portable Air Pump" - id = "portable_lil_pump" - build_type = COLONY_FABRICATOR - materials = list( - /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5, - /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, - ) - build_path = /obj/machinery/portable_atmospherics/pump - category = list( - RND_CATEGORY_INITIAL, - FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_ATMOS, - ) - construction_time = 30 SECONDS - -/datum/design/portable_gas_scrubber - name = "Portable Air Scrubber" - id = "portable_scrubbs" - build_type = COLONY_FABRICATOR - materials = list( - /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5, - /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, - ) - build_path = /obj/machinery/portable_atmospherics/scrubber - category = list( - RND_CATEGORY_INITIAL, - FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_ATMOS, - ) - construction_time = 30 SECONDS - -// Plumbable chem machine that makes nothing but water - -/datum/design/water_synthesizer - name = "Water Synthesizer" - id = "water_synth" - build_type = COLONY_FABRICATOR - materials = list( - /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5, - /datum/material/glass = SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/machinery/plumbing/synthesizer/water_synth - category = list( - RND_CATEGORY_INITIAL, - FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_FLUIDS, - ) - construction_time = 10 SECONDS - -#undef FABRICATOR_CATEGORY_APPLIANCES -#undef FABRICATOR_SUBCATEGORY_POWER -#undef FABRICATOR_SUBCATEGORY_ATMOS -#undef FABRICATOR_SUBCATEGORY_FLUIDS diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/equipment.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/equipment.dm deleted file mode 100644 index 1740162cbf401f..00000000000000 --- a/modular_skyrat/modules/colony_fabricator/code/design_datums/equipment.dm +++ /dev/null @@ -1,27 +0,0 @@ -/datum/design/survival_knife - name = "Survival Knife" - id = "survival_knife" - build_type = COLONY_FABRICATOR - materials = list( - /datum/material/iron = SHEET_MATERIAL_AMOUNT * 6 - ) - build_path = /obj/item/knife/combat/survival - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_KITCHEN, - ) - departmental_flags = DEPARTMENT_BITFLAG_SERVICE - -/datum/design/soup_pot - name = "Soup Pot" - id = "soup_pot" - build_type = COLONY_FABRICATOR - materials = list( - /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5 - ) - build_path = /obj/item/reagent_containers/cup/soup_pot - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_KITCHEN, - ) - departmental_flags = DEPARTMENT_BITFLAG_SERVICE diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/construction.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/construction.dm deleted file mode 100644 index 71eed6b71f8750..00000000000000 --- a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/construction.dm +++ /dev/null @@ -1,101 +0,0 @@ -// This file is going to be just all bitflag additions - -/datum/design/apc_board/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/airalarm_electronics/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/airlock_board/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/firealarm_electronics/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/control/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/firelock_board/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/condenser/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/health_sensor/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/igniter/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/infrared_emitter/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/prox_sensor/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/signaler/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/timer/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/voice_analyzer/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/camera_assembly/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/intercom_frame/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/light_tube/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/light_bulb/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/conveyor_belt/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/conveyor_switch/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/lavarods/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/rglass/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/plasteel_alloy/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/plaglass_alloy/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/plasmarglass_alloy/New() - . = ..() - build_type |= COLONY_FABRICATOR diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/machine_boards.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/machine_boards.dm deleted file mode 100644 index 86b70bc7f7486d..00000000000000 --- a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/machine_boards.dm +++ /dev/null @@ -1,39 +0,0 @@ -/datum/design/board/hydroponics/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/board/cyborgrecharger/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/board/microwave/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/board/processor/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/board/recycler/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/board/suit_storage_unit/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/board/range/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/board/griddle/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/board/reagentgrinder/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/board/biogenerator/New() - . = ..() - build_type |= COLONY_FABRICATOR diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/tools.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/tools.dm deleted file mode 100644 index 64d5e931de7678..00000000000000 --- a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/tools.dm +++ /dev/null @@ -1,105 +0,0 @@ -// Various designs that get added to the colony fab - -/datum/design/holosignatmos/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/analyzer/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/extinguisher/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/cable_coil/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/airlock_painter/decal/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/airlock_painter/decal/tile/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/holosignengi/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/inducer/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/multitool/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/tscanner/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/pipe_painter/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/rwd/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/bolter_wrench/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/rpd/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/rpd_upgrade/unwrench/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/rtd_loaded/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/light_replacer/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/rld_mini/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/miningsatchel_holding/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/mining_scanner/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/flashlight/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/ducts/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/plunger/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/handlabeler/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/paperroll/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/spraycan/New() - . = ..() - build_type |= COLONY_FABRICATOR diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/tools.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/tools.dm deleted file mode 100644 index 0ddfb18e1f7e22..00000000000000 --- a/modular_skyrat/modules/colony_fabricator/code/design_datums/tools.dm +++ /dev/null @@ -1,80 +0,0 @@ -/datum/techweb_node/colony_fabricator_special_tools - id = "colony_fabricator_tools" - display_name = "Colony Fabricator Tool Designs" - description = "Contains all of the colony fabricator's tool designs." - design_ids = list( - "colony_power_drive", - "colony_prybar", - "colony_arc_welder", - "colony_compact_drill", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000000000000000) // God save you - hidden = TRUE - show_on_wiki = FALSE - starting_node = TRUE - -// Screw-Wrench-Wirecutter combo machine - -/datum/design/colony_power_driver - name = "Powered Driver" - id = "colony_power_drive" - build_type = COLONY_FABRICATOR - build_path = /obj/item/screwdriver/omni_drill - materials = list( - /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75, - /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT * 1.5, - /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, - ) - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED, - ) - -// Crowbar that is completely normal except it can force doors - -/datum/design/colony_door_crowbar - name = "Prybar" - id = "colony_prybar" - build_type = COLONY_FABRICATOR - build_path = /obj/item/crowbar/large/doorforcer - materials = list( - /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75, - /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, - ) - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED, - ) - -// Welder that takes no fuel or power to run but is quite slow, at least it sounds cool as hell - -/datum/design/colony_arc_welder - name = "Arc Welder" - id = "colony_arc_welder" - build_type = COLONY_FABRICATOR - build_path = /obj/item/weldingtool/electric/arc_welder - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, - /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT * 1.5, - ) - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED, - ) - -// Slightly slower drill that fits in backpacks - -/datum/design/colony_compact_drill - name = "Compact Mining Drill" - id = "colony_compact_drill" - build_type = COLONY_FABRICATOR - build_path = /obj/item/pickaxe/drill/compact - materials = list( - /datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - ) - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MINING, - ) diff --git a/modular_skyrat/modules/colony_fabricator/code/looping_sounds.dm b/modular_skyrat/modules/colony_fabricator/code/looping_sounds.dm deleted file mode 100644 index 5c375e6259c892..00000000000000 --- a/modular_skyrat/modules/colony_fabricator/code/looping_sounds.dm +++ /dev/null @@ -1,35 +0,0 @@ -/datum/looping_sound/colony_fabricator_running - start_sound = 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_start.wav' - start_length = 1 - mid_sounds = list( - 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_1.wav' = 1, - 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_2.wav' = 1, - 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_3.wav' = 1, - 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_4.wav' = 1, - ) - mid_length = 3 SECONDS - end_sound = 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_end.wav' - volume = 100 - falloff_exponent = 3 - -/datum/looping_sound/arc_furnace_running - mid_sounds = list( - 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav' = 1, - 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav' = 1, - 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav' = 1, - 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav' = 1, - ) - mid_length = 1 SECONDS - volume = 200 // This sound effect is very quiet I've noticed - falloff_exponent = 2 - -/datum/looping_sound/conditioner_running - mid_sounds = list( - 'modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_1.wav' = 1, - 'modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_2.wav' = 1, - 'modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_3.wav' = 1, - 'modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_4.wav' = 1, - ) - mid_length = 3 SECONDS - volume = 75 - falloff_exponent = 3 diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/power_storage_unit.dm b/modular_skyrat/modules/colony_fabricator/code/machines/power_storage_unit.dm deleted file mode 100644 index ca73a4711bdbd3..00000000000000 --- a/modular_skyrat/modules/colony_fabricator/code/machines/power_storage_unit.dm +++ /dev/null @@ -1,69 +0,0 @@ -/obj/machinery/power/smes/battery_pack - name = "stationary battery" - desc = "An about table-height block of power storage, commonly seen in low storage high output power applications. \ - Smaller units such as these tend to have a respectively <b>smaller energy storage</b>, though also are capable of \ - <b>higher maximum output</b> than some larger units. Most commonly seen being used not for their ability to store \ - power, but rather for use in regulating power input and output." - icon = 'modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/small_battery.dmi' - capacity = 75e4 - input_level_max = 4e5 - output_level_max = 4e5 - circuit = null - flags_1 = NODECONSTRUCT_1 - /// The item we turn into when repacked - var/repacked_type = /obj/item/flatpacked_machine/station_battery - -/obj/machinery/power/smes/battery_pack/Initialize(mapload) - . = ..() - AddElement(/datum/element/repackable, repacked_type, 5 SECONDS) - AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) - if(!mapload) - flick("smes_deploy", src) - -/obj/machinery/power/smes/battery_pack/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) - if(screwdriver.tool_behaviour != TOOL_SCREWDRIVER) - return FALSE - - screwdriver.play_tool_sound(src, 50) - toggle_panel_open() - if(panel_open) - icon_state = icon_state_open - to_chat(user, span_notice("You open the maintenance hatch of [src].")) - else - icon_state = icon_state_closed - to_chat(user, span_notice("You close the maintenance hatch of [src].")) - return TRUE - -// We don't care about the parts updates because we don't want them to change -/obj/machinery/power/smes/battery_pack/RefreshParts() - return - -// We also don't need to bother with fuddling with charging power cells, there are none to remove -/obj/machinery/power/smes/on_deconstruction() - return - -// Item for creating the small battery and carrying it around - -/obj/item/flatpacked_machine/station_battery - name = "flat-packed stationary battery" - icon_state = "battery_small_packed" - type_to_deploy = /obj/machinery/power/smes/battery_pack - -// Larger station batteries, hold more but have less in/output - -/obj/machinery/power/smes/battery_pack/large - name = "large stationary battery" - desc = "A massive block of power storage, commonly seen in high storage low output power applications. \ - Larger units such as these tend to have a respectively <b>larger energy storage</b>, though only capable of \ - <b>low maximum output</b> compared to smaller units. Most commonly seen as large backup batteries, or simply \ - for large power storage where throughput is not a concern." - icon = 'modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/large_battery.dmi' - capacity = 1e7 - input_level_max = 5e4 - output_level_max = 5e4 - repacked_type = /obj/item/flatpacked_machine/large_station_battery - -/obj/item/flatpacked_machine/large_station_battery - name = "flat-packed large stationary battery" - icon_state = "battery_large_packed" - type_to_deploy = /obj/machinery/power/smes/battery_pack/large diff --git a/modular_skyrat/modules/colony_fabricator/code/tools/tools.dm b/modular_skyrat/modules/colony_fabricator/code/tools/tools.dm deleted file mode 100644 index 554b8d3d3ff6cc..00000000000000 --- a/modular_skyrat/modules/colony_fabricator/code/tools/tools.dm +++ /dev/null @@ -1,150 +0,0 @@ -// Like the power drill, except no speed buff but has wirecutters as well? Just trust me on this one. - -/obj/item/screwdriver/omni_drill - name = "powered driver" - desc = "The ultimate in multi purpose construction tools. With heads for wire cutting, bolt driving, and driving \ - screws, what's not to love? Well, the slow speed. Compared to other power drills these tend to be \ - <b>not much quicker than unpowered tools</b>." - icon = 'modular_skyrat/modules/colony_fabricator/icons/tools.dmi' - icon_state = "drill" - belt_icon_state = null - inhand_icon_state = "drill" - worn_icon_state = "drill" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - custom_materials = list( - /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75, - /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT * 1.5, - /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, - ) - force = 10 - throwforce = 8 - throw_speed = 2 - throw_range = 3 - attack_verb_continuous = list("drills", "screws", "jabs", "whacks") - attack_verb_simple = list("drill", "screw", "jab", "whack") - hitsound = 'sound/items/drill_hit.ogg' - usesound = 'sound/items/drill_use.ogg' - w_class = WEIGHT_CLASS_SMALL - toolspeed = 1 - random_color = FALSE - greyscale_config = null - greyscale_config_belt = null - greyscale_config_inhand_left = null - greyscale_config_inhand_right = null - -/obj/item/screwdriver/omni_drill/Initialize(mapload) - . = ..() - AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) - -/obj/item/screwdriver/omni_drill/get_all_tool_behaviours() - return list(TOOL_WIRECUTTER, TOOL_SCREWDRIVER, TOOL_WRENCH) - -/obj/item/screwdriver/omni_drill/examine(mob/user) - . = ..() - . += span_notice("Use <b>in hand</b> to switch configuration.\n") - . += span_notice("It functions as a <b>[tool_behaviour]</b> tool.") - -/obj/item/screwdriver/omni_drill/update_icon_state() - . = ..() - switch(tool_behaviour) - if(TOOL_SCREWDRIVER) - icon_state = initial(icon_state) - if(TOOL_WRENCH) - icon_state = "[initial(icon_state)]_bolt" - if(TOOL_WIRECUTTER) - icon_state = "[initial(icon_state)]_cut" - -/obj/item/screwdriver/omni_drill/attack_self(mob/user, modifiers) - . = ..() - if(!user) - return - var/list/tool_list = list( - "Screwdriver" = image(icon = icon, icon_state = "drill"), - "Wrench" = image(icon = icon, icon_state = "drill_bolt"), - "Wirecutters" = image(icon = icon, icon_state = "drill_cut"), - ) - var/tool_result = show_radial_menu(user, src, tool_list, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE) - if(!check_menu(user) || !tool_result) - return - switch(tool_result) - if("Wrench") - tool_behaviour = TOOL_WRENCH - sharpness = NONE - if("Wirecutters") - tool_behaviour = TOOL_WIRECUTTER - sharpness = NONE - if("Screwdriver") - tool_behaviour = TOOL_SCREWDRIVER - sharpness = SHARP_POINTY - playsound(src, 'sound/items/change_drill.ogg', 50, vary = TRUE) - update_appearance(UPDATE_ICON) - -/obj/item/screwdriver/omni_drill/proc/check_menu(mob/user) - if(!istype(user)) - return FALSE - if(user.incapacitated() || !user.Adjacent(src)) - return FALSE - return TRUE - -// Just a completely normal crowbar except its normal sized and can force doors like jaws of life can - -/obj/item/crowbar/large/doorforcer - name = "prybar" - desc = "A large, sturdy crowbar, painted orange. This one just happens to be tough enough to \ - survive <b>forcing doors open</b>." - icon = 'modular_skyrat/modules/colony_fabricator/icons/tools.dmi' - icon_state = "prybar" - toolspeed = 1.3 - force_opens = TRUE - custom_materials = list( - /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75, - /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, - ) - -/obj/item/crowbar/large/doorforcer/Initialize(mapload) - . = ..() - AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) - -// Backpackable mining drill - -/obj/item/pickaxe/drill/compact - name = "compact mining drill" - desc = "A powered mining drill, it drills all over the place. Compact enough to hopefully fit in a backpack." - icon = 'modular_skyrat/modules/colony_fabricator/icons/tools.dmi' - icon_state = "drilla" - worn_icon_state = "drill" - w_class = WEIGHT_CLASS_NORMAL - toolspeed = 0.6 - custom_materials = list( - /datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - ) - -/obj/item/pickaxe/drill/compact/Initialize(mapload) - . = ..() - AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) - -// Electric welder but not quite as strong - -/obj/item/weldingtool/electric/arc_welder - name = "arc welding tool" - desc = "A specialized welding tool utilizing high powered arcs of electricity to weld things together. \ - Compared to other electrically-powered welders, this model is slow and highly power inefficient, \ - but it still gets the job done and chances are you printed this bad boy off for free." - icon = 'modular_skyrat/modules/colony_fabricator/icons/tools.dmi' - icon_state = "arc_welder" - usesound = list( - 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav', - 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav', - 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav', - 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav', - ) - light_range = 2 - light_power = 0.75 - toolspeed = 1 - power_use_amount = POWER_CELL_USE_INSANE - -/obj/item/weldingtool/electric/arc_welder/Initialize(mapload) - . = ..() - AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) diff --git a/modular_skyrat/modules/colony_fabricator/icons/chemistry_machines.dmi b/modular_skyrat/modules/colony_fabricator/icons/chemistry_machines.dmi deleted file mode 100644 index c8533ee3e1ebbc..00000000000000 Binary files a/modular_skyrat/modules/colony_fabricator/icons/chemistry_machines.dmi and /dev/null differ diff --git a/modular_skyrat/modules/colony_fabricator/sound/attributions.txt b/modular_skyrat/modules/colony_fabricator/sound/attributions.txt deleted file mode 100644 index e9c05e68c01e4c..00000000000000 --- a/modular_skyrat/modules/colony_fabricator/sound/attributions.txt +++ /dev/null @@ -1,10 +0,0 @@ -The following sounds have been recorded, edited and added by Paxilmaniac: - -modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_(1 - 4).wav -modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_(1 - 4).wav -modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_end.wav -modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_start.wav - -The following sounds are from https://pixabay.com/sound-effects/wall-air-conditioner-43901/ - -modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_(1 - 4).wav diff --git a/modular_skyrat/modules/command_vendor/code/vending.dm b/modular_skyrat/modules/command_vendor/code/vending.dm deleted file mode 100644 index 7e9c35f2471fd6..00000000000000 --- a/modular_skyrat/modules/command_vendor/code/vending.dm +++ /dev/null @@ -1,175 +0,0 @@ -/obj/machinery/vending/access/command - name = "\improper Command Outfitting Station" - desc = "A vending machine for specialised clothing for members of Command." - product_ads = "File paperwork in style!;It's red so you can't see the blood!;You have the right to be fashionable!;Now you can be the fashion police you always wanted to be!" - icon = 'modular_skyrat/modules/command_vendor/icons/vending.dmi' - icon_state = "commdrobe" - light_mask = "wardrobe-light-mask" - vend_reply = "Thank you for using the CommDrobe!" - auto_build_products = TRUE - payment_department = ACCOUNT_CMD - - refill_canister = /obj/item/vending_refill/wardrobe/comm_wardrobe - payment_department = ACCOUNT_CMD - light_color = COLOR_COMMAND_BLUE - -/obj/item/vending_refill/wardrobe/comm_wardrobe - machine_name = "CommDrobe" - -/obj/machinery/vending/access/command/build_access_list(list/access_lists) - access_lists["[ACCESS_CAPTAIN]"] = list( - // CAPTAIN - /obj/item/clothing/head/hats/caphat = 1, - /obj/item/clothing/head/caphat/beret = 1, - /obj/item/clothing/head/caphat/beret/alt = 1, - /obj/item/clothing/head/hats/imperial/cap = 1, - /obj/item/clothing/under/rank/captain = 1, - /obj/item/clothing/under/rank/captain/skirt = 1, - /obj/item/clothing/under/rank/captain/dress = 1, - /obj/item/clothing/under/rank/captain/skyrat/kilt = 1, - /obj/item/clothing/under/rank/captain/skyrat/imperial = 1, - /obj/item/clothing/head/hats/caphat/parade = 1, - /obj/item/clothing/under/rank/captain/parade = 1, - /obj/item/clothing/suit/armor/vest/capcarapace/captains_formal = 1, - /obj/item/clothing/suit/armor/vest/capcarapace/jacket = 1, - /obj/item/clothing/suit/jacket/capjacket = 1, - /obj/item/clothing/neck/cloak/cap = 1, - /obj/item/clothing/neck/mantle/capmantle = 1, - /obj/item/storage/backpack/captain = 1, - /obj/item/storage/backpack/satchel/cap = 1, - /obj/item/storage/backpack/duffelbag/captain = 1, - /obj/item/storage/backpack/messenger/cap = 1, - /obj/item/clothing/shoes/sneakers/brown = 1, - - // BLUESHIELD - /obj/item/clothing/head/beret/blueshield = 1, - /obj/item/clothing/head/beret/blueshield/navy = 1, - /obj/item/clothing/under/rank/blueshield = 1, - /obj/item/clothing/under/rank/blueshield/skirt = 1, - /obj/item/clothing/under/rank/blueshield/turtleneck = 1, - /obj/item/clothing/under/rank/blueshield/turtleneck/skirt = 1, - /obj/item/clothing/suit/armor/vest/blueshield = 1, - /obj/item/clothing/suit/armor/vest/blueshield/jacket = 1, - /obj/item/clothing/neck/mantle/bsmantle = 1, - /obj/item/storage/backpack/blueshield = 1, - /obj/item/storage/backpack/satchel/blueshield = 1, - /obj/item/storage/backpack/duffelbag/blueshield = 1, - /obj/item/storage/backpack/messenger/blueshield = 1, - /obj/item/clothing/shoes/laceup = 1, - ) - access_lists["[ACCESS_HOP]"] = list( // Best head btw - /obj/item/clothing/head/hats/hopcap = 1, - /obj/item/clothing/head/hopcap/beret = 1, - /obj/item/clothing/head/hopcap/beret/alt = 1, - /obj/item/clothing/head/hats/imperial/hop = 1, - /obj/item/clothing/under/rank/civilian/head_of_personnel = 1, - /obj/item/clothing/under/rank/civilian/head_of_personnel/skirt = 1, - /obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat/turtleneck = 1, - /obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat/turtleneck/skirt = 1, - /obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat/parade = 1, - /obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat/parade/female = 1, - /obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat/imperial = 1, - /obj/item/clothing/suit/armor/vest/hop/hop_formal = 1, - /obj/item/clothing/neck/cloak/hop = 1, - /obj/item/clothing/neck/mantle/hopmantle = 1, - /obj/item/storage/backpack/head_of_personnel = 1, - /obj/item/storage/backpack/satchel/head_of_personnel = 1, - /obj/item/storage/backpack/duffelbag/head_of_personnel = 1, - /obj/item/storage/backpack/messenger/head_of_personnel = 1, - /obj/item/clothing/shoes/sneakers/brown = 1, - ) - access_lists["[ACCESS_CMO]"] = list( - /obj/item/clothing/head/beret/medical/cmo = 1, - /obj/item/clothing/head/beret/medical/cmo/alt = 1, - /obj/item/clothing/head/hats/imperial/cmo = 1, - /obj/item/clothing/under/rank/medical/chief_medical_officer = 1, - /obj/item/clothing/under/rank/medical/chief_medical_officer/skirt = 1, - /obj/item/clothing/under/rank/medical/chief_medical_officer/turtleneck = 1, - /obj/item/clothing/under/rank/medical/chief_medical_officer/skyrat/imperial = 1, - /obj/item/clothing/neck/cloak/cmo = 1, - /obj/item/clothing/neck/mantle/cmomantle = 1, - /obj/item/clothing/shoes/sneakers/brown = 1, - ) - access_lists["[ACCESS_RD]"] = list( - /obj/item/clothing/head/beret/science/rd = 1, - /obj/item/clothing/head/beret/science/rd/alt = 1, - /obj/item/clothing/under/rank/rnd/research_director = 1, - /obj/item/clothing/under/rank/rnd/research_director/skirt = 1, - /obj/item/clothing/under/rank/rnd/research_director/alt = 1, - /obj/item/clothing/under/rank/rnd/research_director/turtleneck = 1, - /obj/item/clothing/under/rank/rnd/research_director/turtleneck/skirt = 1, - /obj/item/clothing/under/rank/rnd/research_director/skyrat/jumpsuit = 1, - /obj/item/clothing/under/rank/rnd/research_director/skyrat/jumpsuit/skirt = 1, - /obj/item/clothing/under/rank/rnd/research_director/skyrat/imperial = 1, - /obj/item/clothing/neck/cloak/rd = 1, - /obj/item/clothing/neck/mantle/rdmantle = 1, - /obj/item/clothing/suit/toggle/labcoat = 1, - /obj/item/clothing/shoes/sneakers/brown = 1, - ) - access_lists["[ACCESS_CE]"] = list( - /obj/item/clothing/head/beret/engi/ce = 1, - /obj/item/clothing/head/hats/imperial/ce = 1, - /obj/item/clothing/under/rank/engineering/chief_engineer = 1, - /obj/item/clothing/under/rank/engineering/chief_engineer/skirt = 1, - /obj/item/clothing/under/rank/engineering/chief_engineer/skyrat/imperial = 1, - /obj/item/clothing/neck/cloak/ce = 1, - /obj/item/clothing/neck/mantle/cemantle = 1, - /obj/item/clothing/shoes/sneakers/brown = 1, - ) - access_lists["[ACCESS_HOS]"] = list( - /obj/item/clothing/head/hats/hos/cap = 1, - /obj/item/clothing/head/hats/hos/beret/navyhos = 1, - /obj/item/clothing/head/hats/imperial/hos = 1, - /obj/item/clothing/under/rank/security/head_of_security/peacekeeper = 1, - /obj/item/clothing/under/rank/security/head_of_security/alt = 1, - /obj/item/clothing/under/rank/security/head_of_security/alt/skirt = 1, - /obj/item/clothing/under/rank/security/head_of_security/skyrat/imperial = 1, - /obj/item/clothing/suit/jacket/hos/blue = 1, - /obj/item/clothing/under/rank/security/head_of_security/parade = 1, - /obj/item/clothing/suit/armor/hos/hos_formal = 1, - /obj/item/clothing/neck/cloak/hos = 1, - /obj/item/clothing/neck/cloak/hos/redsec = 1, - /obj/item/clothing/neck/mantle/hosmantle = 1, - /obj/item/clothing/shoes/sneakers/brown = 1, - ) - access_lists["[ACCESS_QM]"] = list( - /obj/item/clothing/head/beret/cargo/qm = 1, - /obj/item/clothing/head/beret/cargo/qm/alt = 1, - /obj/item/clothing/neck/cloak/qm = 1, - /obj/item/clothing/neck/mantle/qm = 1, - /obj/item/clothing/under/rank/cargo/qm = 1, - /obj/item/clothing/under/rank/cargo/qm/skirt = 1, - /obj/item/clothing/under/rank/cargo/qm/skyrat/gorka = 1, - /obj/item/clothing/under/rank/cargo/qm/skyrat/turtleneck = 1, - /obj/item/clothing/under/rank/cargo/qm/skyrat/turtleneck/skirt = 1, - /obj/item/clothing/suit/brownfurrich = 1, - /obj/item/clothing/under/rank/cargo/qm/skyrat/casual = 1, - /obj/item/clothing/suit/toggle/jacket/supply/head = 1, - /obj/item/clothing/under/rank/cargo/qm/skyrat/formal = 1, - /obj/item/clothing/under/rank/cargo/qm/skyrat/formal/skirt = 1, - /obj/item/clothing/shoes/sneakers/brown = 1, - ) - - access_lists["[ACCESS_CENT_GENERAL]"] = list( // CC Rep Shiz - /obj/item/clothing/head/nanotrasen_consultant = 1, - /obj/item/clothing/head/nanotrasen_consultant/beret = 1, - /obj/item/clothing/head/beret/centcom_formal/nt_consultant = 1, - /obj/item/clothing/under/rank/nanotrasen_consultant = 1, - /obj/item/clothing/under/rank/nanotrasen_consultant/skirt = 1, - /obj/item/clothing/head/hats/centhat = 1, - /obj/item/clothing/suit/armor/centcom_formal/nt_consultant = 1, - /obj/item/clothing/gloves/combat/naval/nanotrasen_consultant = 1, - ) - - access_lists["[ACCESS_COMMAND]"] = list( - /obj/item/clothing/head/hats/imperial = 5, - /obj/item/clothing/head/hats/imperial/grey = 5, - /obj/item/clothing/head/hats/imperial/white = 2, - /obj/item/clothing/head/hats/imperial/red = 5, - /obj/item/clothing/head/hats/imperial/helmet = 5, - /obj/item/clothing/under/rank/captain/skyrat/imperial/generic = 5, - /obj/item/clothing/under/rank/captain/skyrat/imperial/generic/grey = 5, - /obj/item/clothing/under/rank/captain/skyrat/imperial/generic/pants = 5, - /obj/item/clothing/under/rank/captain/skyrat/imperial/generic/red = 5, - ) - diff --git a/modular_skyrat/modules/company_imports/code/armament_component.dm b/modular_skyrat/modules/company_imports/code/armament_component.dm deleted file mode 100644 index f647a3fe1bd7ec..00000000000000 --- a/modular_skyrat/modules/company_imports/code/armament_component.dm +++ /dev/null @@ -1,302 +0,0 @@ -#define MAX_AMMO_AMOUNT 10 -#define CARGO_CONSOLE 1 -#define IRN_CONSOLE 2 - -/datum/component/armament/company_imports - /// Selected amount of ammo to purchase - var/ammo_purchase_num = 1 - /// Is this set to private order - var/self_paid = FALSE - /// Cooldown to announce a requested order - COOLDOWN_DECLARE(radio_cooldown) - /// To cut down on redundant istypes(), what this component is attached to - var/console_state = null - /// If this is a tablet, the parent budgetordering - var/datum/computer_file/program/budgetorders/parent_prog - -/datum/component/armament/company_imports/Initialize(list/required_products, list/needed_access) - . = ..() - if(istype(parent, /obj/machinery/computer/cargo)) - console_state = CARGO_CONSOLE - else if(istype(parent, /obj/item/modular_computer)) - console_state = IRN_CONSOLE - -/datum/component/armament/company_imports/Destroy(force, silent) - parent_prog = null - . = ..() - -/datum/component/armament/company_imports/on_attack_hand(datum/source, mob/living/user) - return - -/datum/component/armament/company_imports/on_attackby(atom/target, obj/item, mob/user) - return - -/datum/component/armament/company_imports/ui_data(mob/user) - var/list/data = list() - - var/mob/living/carbon/human/the_person = user - var/obj/item/card/id/id_card - var/datum/bank_account/buyer = SSeconomy.get_dep_account(ACCOUNT_CAR) - - if(console_state == IRN_CONSOLE) - id_card = parent_prog.computer.computer_id_slot?.GetID() - else - if(istype(the_person)) - id_card = the_person.get_idcard(TRUE) - - var/budget_name = "Cargo Budget" - - if(id_card?.registered_account && (console_state == IRN_CONSOLE)) - if((ACCESS_COMMAND in id_card.access) || (ACCESS_QM in id_card.access)) - parent_prog.requestonly = FALSE - buyer = SSeconomy.get_dep_account(id_card.registered_account?.account_job.paycheck_department) - parent_prog.can_approve_requests = TRUE - else - parent_prog.requestonly = TRUE - parent_prog.can_approve_requests = FALSE - else - parent_prog?.requestonly = TRUE - - if(id_card) - budget_name = self_paid ? id_card.name : buyer.account_holder - - data["budget_name"] = budget_name - - var/cant_buy_restricted = TRUE - - if(console_state == CARGO_CONSOLE) - var/obj/machinery/computer/cargo/console = parent - if(!console.requestonly) - cant_buy_restricted = FALSE - - else if((console_state == IRN_CONSOLE) && id_card?.registered_account) - if((ACCESS_COMMAND in id_card.access) || (ACCESS_QM in id_card.access)) - if((buyer == SSeconomy.get_dep_account(id_card.registered_account.account_job.paycheck_department)) && !self_paid) - cant_buy_restricted = FALSE - - data["cant_buy_restricted"] = !!cant_buy_restricted - data["budget_points"] = self_paid ? id_card?.registered_account?.account_balance : buyer?.account_balance - data["ammo_amount"] = ammo_purchase_num - data["self_paid"] = !!self_paid - data["armaments_list"] = list() - - for(var/armament_category as anything in SSarmaments.entries) - - var/list/armament_subcategories = list() - - for(var/subcategory as anything in SSarmaments.entries[armament_category][CATEGORY_ENTRY]) - var/list/subcategory_items = list() - for(var/datum/armament_entry/armament_entry as anything in SSarmaments.entries[armament_category][CATEGORY_ENTRY][subcategory]) - if(products && !(armament_entry.type in products)) - continue - - var/datum/armament_entry/company_import/gun_entry = armament_entry - - if(gun_entry.contraband) - if(!(console_state == CARGO_CONSOLE)) - continue - var/obj/machinery/computer/cargo/parent_console = parent - if(!parent_console.contraband) - continue - - subcategory_items += list(list( - "ref" = REF(armament_entry), - "icon" = armament_entry.cached_base64, - "name" = armament_entry.name, - "cost" = armament_entry.cost, - "buyable_ammo" = armament_entry.magazine ? TRUE : FALSE, - "magazine_cost" = armament_entry.magazine_cost, - "purchased" = purchased_items[armament_entry] ? purchased_items[armament_entry] : 0, - "description" = armament_entry.description, - "armament_category" = armament_entry.category, - "equipment_subcategory" = armament_entry.subcategory, - "restricted" = !!armament_entry.restricted, - )) - - if(!LAZYLEN(subcategory_items)) - continue - - armament_subcategories += list(list( - "subcategory" = subcategory, - "items" = subcategory_items, - )) - - if(!LAZYLEN(armament_subcategories)) - continue - - data["armaments_list"] += list(list( - "category" = armament_category, - "category_uses" = used_categories[armament_category], - "subcategories" = armament_subcategories, - )) - - return data - -/datum/component/armament/company_imports/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "CargoImportConsole") - ui.open() - -/datum/component/armament/company_imports/select_armament(mob/user, datum/armament_entry/company_import/armament_entry) - var/datum/bank_account/buyer = SSeconomy.get_dep_account(ACCOUNT_CAR) - var/obj/item/modular_computer/possible_downloader - var/obj/machinery/computer/cargo/possible_console - - if(console_state == CARGO_CONSOLE) - possible_console = parent - - else if(console_state == IRN_CONSOLE) - possible_downloader = parent - - if(!istype(armament_entry)) - return - - var/mob/living/carbon/human/the_person = user - - if(istype(the_person)) - - var/obj/item/card/id/id_card - - if(console_state == IRN_CONSOLE) - id_card = parent_prog.computer.computer_id_slot?.GetID() - else - id_card = the_person.get_idcard(TRUE) - - if(id_card?.registered_account && (console_state == IRN_CONSOLE)) - if((ACCESS_COMMAND in id_card.access) || (ACCESS_QM in id_card.access)) - parent_prog.requestonly = FALSE - buyer = SSeconomy.get_dep_account(id_card.registered_account.account_job.paycheck_department) - parent_prog.can_approve_requests = TRUE - else - parent_prog.requestonly = TRUE - parent_prog.can_approve_requests = FALSE - else - parent_prog?.requestonly = TRUE - - if(self_paid) - if(!istype(id_card)) - to_chat(user, span_warning("No ID card detected.")) - return - - if(istype(id_card, /obj/item/card/id/departmental_budget)) - to_chat(user, span_warning("[id_card] cannot be used to make purchases.")) - return - - var/datum/bank_account/account = id_card.registered_account - - if(!istype(account)) - to_chat(user, span_warning("Invalid bank account.")) - return - - buyer = account - - if(issilicon(user) && (console_state == IRN_CONSOLE)) - parent_prog.can_approve_requests = TRUE - parent_prog.requestonly = FALSE - - if(!buyer) - to_chat(user, span_warning("No budget found!")) - return - - if(!ishuman(user) && !issilicon(user)) - return - - if(!buyer.has_money(armament_entry.cost)) - to_chat(user, span_warning("Not enough money!")) - return - - var/name - - if(issilicon(user)) - name = user.real_name - else - the_person.get_authentification_name() - - var/reason = "" - - if(possible_console) - if(possible_console.requestonly && !self_paid) - reason = tgui_input_text(user, "Reason", name) - if(isnull(reason)) - return - - else if(possible_downloader) - var/datum/computer_file/program/budgetorders/parent_file = parent_prog - if((parent_file.requestonly && !self_paid) || !(possible_downloader.computer_id_slot?.GetID())) - reason = tgui_input_text(user, "Reason", name) - if(isnull(reason)) - return - - used_categories[armament_entry.category]++ - - purchased_items[armament_entry]++ - - var/datum/supply_pack/armament/created_pack = new - created_pack.name = initial(armament_entry.item_type.name) - created_pack.cost = cost_calculate(armament_entry.cost) //Paid for seperately - created_pack.contains = list(armament_entry.item_type) - - var/rank - - if(issilicon(user)) - rank = "Silicon" - else - rank = the_person.get_assignment(hand_first = TRUE) - - var/ckey = user.ckey - - var/datum/supply_order/company_import/created_order - if(buyer != SSeconomy.get_dep_account(ACCOUNT_CAR)) - created_order = new(created_pack, name, rank, ckey, paying_account = buyer, reason = reason, can_be_cancelled = TRUE) - else - created_pack.goody = FALSE // Cargo ordered stuff should just show up in a box I think - created_order = new(created_pack, name, rank, ckey, reason = reason, can_be_cancelled = TRUE) - created_order.selected_entry = armament_entry - created_order.used_component = src - if(console_state == CARGO_CONSOLE) - created_order.generateRequisition(get_turf(parent)) - if(possible_console.requestonly && !self_paid) - SSshuttle.request_list += created_order - else - SSshuttle.shopping_list += created_order - else if(console_state == IRN_CONSOLE) - var/datum/computer_file/program/budgetorders/comp_file = parent_prog - created_order.generateRequisition(get_turf(parent)) - if(comp_file.requestonly && !self_paid) - SSshuttle.request_list += created_order - else - SSshuttle.shopping_list += created_order - -/datum/component/armament/company_imports/proc/cost_calculate(cost) - . = cost - . *= SSeconomy.pack_price_modifier - -/datum/component/armament/company_imports/ui_act(action, list/params) - . = ..() - if(.) - return - - switch(action) - if("toggleprivate") - var/obj/item/card/id/id_card - var/mob/living/carbon/human/the_person = usr - - if(!istype(the_person)) - if(issilicon(the_person)) - self_paid = FALSE - return - - if(console_state == IRN_CONSOLE) - id_card = parent_prog.computer.computer_id_slot?.GetID() - else - id_card = the_person.get_idcard(TRUE) - - if(!id_card) - return - - self_paid = !self_paid - -#undef MAX_AMMO_AMOUNT -#undef CARGO_CONSOLE -#undef IRN_CONSOLE diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/deforest_medical.dm b/modular_skyrat/modules/company_imports/code/armament_datums/deforest_medical.dm deleted file mode 100644 index d6e5be0049e3e2..00000000000000 --- a/modular_skyrat/modules/company_imports/code/armament_datums/deforest_medical.dm +++ /dev/null @@ -1,228 +0,0 @@ -/datum/armament_entry/company_import/deforest - category = DEFOREST_MEDICAL_NAME - company_bitflag = CARGO_COMPANY_DEFOREST - -// Basic first aid supplies like gauze, sutures, mesh, so on - -/datum/armament_entry/company_import/deforest/first_aid - subcategory = "First-Aid Consumables" - -/datum/armament_entry/company_import/deforest/first_aid/gauze - item_type = /obj/item/stack/medical/gauze/twelve - cost = PAYCHECK_LOWER -/datum/armament_entry/company_import/deforest/first_aid/bruise_pack - item_type = /obj/item/stack/medical/bruise_pack - cost = PAYCHECK_LOWER - -/datum/armament_entry/company_import/deforest/first_aid/ointment - item_type = /obj/item/stack/medical/ointment - cost = PAYCHECK_LOWER - -/datum/armament_entry/company_import/deforest/first_aid/suture - item_type = /obj/item/stack/medical/suture - cost = PAYCHECK_LOWER - -/datum/armament_entry/company_import/deforest/first_aid/mesh - item_type = /obj/item/stack/medical/mesh - cost = PAYCHECK_LOWER - -/datum/armament_entry/company_import/deforest/first_aid/bone_gel - item_type = /obj/item/stack/medical/bone_gel - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/deforest/first_aid/medicated_sutures - item_type = /obj/item/stack/medical/suture/medicated - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/deforest/first_aid/advanced_mesh - item_type = /obj/item/stack/medical/mesh/advanced - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/deforest/medpens - subcategory = "Autoinjectors" - cost = PAYCHECK_COMMAND * 1.5 - -/datum/armament_entry/company_import/deforest/medpens/epipen - item_type = /obj/item/reagent_containers/hypospray/medipen - -/datum/armament_entry/company_import/deforest/medpens/emergency_pen - item_type = /obj/item/reagent_containers/hypospray/medipen/ekit - -/datum/armament_entry/company_import/deforest/medpens/blood_loss - item_type = /obj/item/reagent_containers/hypospray/medipen/blood_loss - -/datum/armament_entry/company_import/deforest/medpens/atropine - item_type = /obj/item/reagent_containers/hypospray/medipen/atropine - -/datum/armament_entry/company_import/deforest/medpens/oxandrolone - item_type = /obj/item/reagent_containers/hypospray/medipen/oxandrolone - -/datum/armament_entry/company_import/deforest/medpens/salacid - item_type = /obj/item/reagent_containers/hypospray/medipen/salacid - -/datum/armament_entry/company_import/deforest/medpens/penacid - item_type = /obj/item/reagent_containers/hypospray/medipen/penacid - -/datum/armament_entry/company_import/deforest/medpens/salbutamol - item_type = /obj/item/reagent_containers/hypospray/medipen/salbutamol - -// Various chemicals, with a box of syringes to come with - -/datum/armament_entry/company_import/deforest/medical_chems - subcategory = "Chemical Supplies" - -/datum/armament_entry/company_import/deforest/medical_chems/syringes - item_type = /obj/item/storage/box/syringes - cost = PAYCHECK_LOWER - -/datum/armament_entry/company_import/deforest/medical_chems/epinephrine - item_type = /obj/item/reagent_containers/cup/bottle/epinephrine - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/deforest/medical_chems/mannitol - item_type = /obj/item/reagent_containers/cup/bottle/mannitol - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/deforest/medical_chems/morphine - item_type = /obj/item/reagent_containers/cup/bottle/morphine - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/deforest/medical_chems/multiver - item_type = /obj/item/reagent_containers/cup/bottle/multiver - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/deforest/medical_chems/formadehyde - item_type = /obj/item/reagent_containers/cup/bottle/formaldehyde - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/deforest/medical_chems/potassium_iodide - item_type = /obj/item/reagent_containers/cup/bottle/potass_iodide - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/deforest/medical_chems/atropine - item_type = /obj/item/reagent_containers/cup/bottle/atropine - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/deforest/medical_chems/syriniver - item_type = /obj/item/reagent_containers/cup/bottle/syriniver - cost = PAYCHECK_CREW - -// Equipment, from defibs to scanners to surgical tools - -/datum/armament_entry/company_import/deforest/equipment - subcategory = "Medical Equipment" - -/datum/armament_entry/company_import/deforest/equipment/health_analyzer - item_type = /obj/item/healthanalyzer - cost = PAYCHECK_LOWER - -/datum/armament_entry/company_import/deforest/equipment/loaded_defib - item_type = /obj/item/defibrillator/loaded - cost = PAYCHECK_COMMAND - -/datum/armament_entry/company_import/deforest/equipment/surgical_tools - item_type = /obj/item/surgery_tray/full - cost = PAYCHECK_COMMAND - -/datum/armament_entry/company_import/deforest/equipment/advanced_health_analyer - item_type = /obj/item/healthanalyzer/advanced - cost = PAYCHECK_COMMAND * 3 - -/datum/armament_entry/company_import/deforest/equipment/penlite_defib_mount - item_type = /obj/item/wallframe/defib_mount/charging - cost = PAYCHECK_CREW * 3 - -/datum/armament_entry/company_import/deforest/equipment/advanced_scalpel - item_type = /obj/item/scalpel/advanced - cost = PAYCHECK_COMMAND * 3 - -/datum/armament_entry/company_import/deforest/equipment/advanced_retractor - item_type = /obj/item/retractor/advanced - cost = PAYCHECK_COMMAND * 3 - -/datum/armament_entry/company_import/deforest/equipment/advanced_cautery - item_type = /obj/item/cautery/advanced - cost = PAYCHECK_COMMAND * 3 - -/datum/armament_entry/company_import/deforest/equipment/medigun_upgrade - item_type = /obj/item/device/custom_kit/medigun_fastcharge - cost = PAYCHECK_COMMAND * 2 - -/datum/armament_entry/company_import/deforest/equipment/afad - item_type = /obj/item/gun/medbeam/afad - cost = PAYCHECK_COMMAND * 5 - -// Modsuit Modules from the medical category, here instead of in Nakamura because nobody buys from this company - -/datum/armament_entry/company_import/deforest/medical_modules - subcategory = "MOD Medical Modules" - cost = PAYCHECK_COMMAND * 2 - -/datum/armament_entry/company_import/deforest/medical_modules/injector - name = "MOD injector module" - item_type = /obj/item/mod/module/injector - -/datum/armament_entry/company_import/deforest/medical_modules/organ_thrower - name = "MOD organ thrower module" - item_type = /obj/item/mod/module/organ_thrower - -/datum/armament_entry/company_import/deforest/medical_modules/patient_transport - name = "MOD patient transport module" - item_type = /obj/item/mod/module/criminalcapture/patienttransport - -/datum/armament_entry/company_import/deforest/medical_modules/thread_ripper - name = "MOD thread ripper module" - item_type = /obj/item/mod/module/thread_ripper - -/datum/armament_entry/company_import/deforest/medical_modules/surgical_processor - name = "MOD surgical processor module" - item_type = /obj/item/mod/module/surgical_processor - -// Various advanced cybernetic organs, organ replacements for the rich - -/datum/armament_entry/company_import/deforest/cyber_organs - subcategory = "Premium Cybernetic Organs" - cost = PAYCHECK_CREW * 3 - -/datum/armament_entry/company_import/deforest/cyber_organs/eyes - name = "shielded cybernetic eyes" - item_type = /obj/item/storage/organbox/advanced_cyber_eyes - -/datum/armament_entry/company_import/deforest/cyber_organs/ears - name = "upgraded cybernetic ears" - item_type = /obj/item/storage/organbox/advanced_cyber_ears - -/datum/armament_entry/company_import/deforest/cyber_organs/heart - name = "upgraded cybernetic heart" - item_type = /obj/item/storage/organbox/advanced_cyber_heart - -/datum/armament_entry/company_import/deforest/cyber_organs/liver - name = "upgraded cybernetic liver" - item_type = /obj/item/storage/organbox/advanced_cyber_liver - -/datum/armament_entry/company_import/deforest/cyber_organs/lungs - name = "upgraded cybernetic lungs" - item_type = /obj/item/storage/organbox/advanced_cyber_lungs - -/datum/armament_entry/company_import/deforest/cyber_organs/stomach - name = "upgraded cybernetic stomach" - item_type = /obj/item/storage/organbox/advanced_cyber_stomach - -/datum/armament_entry/company_import/deforest/cyber_organs/augments - cost = PAYCHECK_COMMAND * 2 - -/datum/armament_entry/company_import/deforest/cyber_organs/augments/nutriment - name = "Nutriment pump implant" - item_type = /obj/item/organ/internal/cyberimp/chest/nutriment - -/datum/armament_entry/company_import/deforest/cyber_organs/augments/reviver - name = "Reviver implant" - item_type = /obj/item/organ/internal/cyberimp/chest/reviver - -/datum/armament_entry/company_import/deforest/cyber_organs/augments/surgery_implant - name = "surgical toolset implant" - item_type = /obj/item/organ/internal/cyberimp/arm/surgery - -/datum/armament_entry/company_import/deforest/cyber_organs/augments/breathing_tube - name = "breathing tube implant" - item_type = /obj/item/organ/internal/cyberimp/mouth/breathing_tube diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/kahraman_industries.dm b/modular_skyrat/modules/company_imports/code/armament_datums/kahraman_industries.dm deleted file mode 100644 index f15da1c175058e..00000000000000 --- a/modular_skyrat/modules/company_imports/code/armament_datums/kahraman_industries.dm +++ /dev/null @@ -1,111 +0,0 @@ -/datum/armament_entry/company_import/kahraman - category = KAHRAMAN_INDUSTRIES_NAME - company_bitflag = CARGO_COMPANY_KAHRAMAN - -// Mining PPE, SEVAs and hardhats, have you passed your OSHA inspection today? - -/datum/armament_entry/company_import/kahraman/ppe - subcategory = "FOHSA Certified Protective Equipment" - -/datum/armament_entry/company_import/kahraman/ppe/weldhat - item_type = /obj/item/clothing/head/utility/hardhat/welding/orange - cost = PAYCHECK_CREW * 1.5 - -/datum/armament_entry/company_import/kahraman/ppe/gasmask - item_type = /obj/item/clothing/mask/gas/alt - cost = PAYCHECK_LOWER - -/datum/armament_entry/company_import/kahraman/ppe/hazard_vest - item_type = /obj/item/clothing/suit/hazardvest - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/kahraman/ppe/seva_mask - item_type = /obj/item/clothing/mask/gas/seva - cost = PAYCHECK_CREW * 1.5 - -/datum/armament_entry/company_import/kahraman/ppe/seva_suit - item_type = /obj/item/clothing/suit/hooded/seva - cost = PAYCHECK_COMMAND * 2 - -/datum/armament_entry/company_import/kahraman/ppe/sensors_cuffs - item_type = /obj/item/kheiral_cuffs - cost = PAYCHECK_COMMAND * 5 - -// Hand held mining equipment - -/datum/armament_entry/company_import/kahraman/mining_tool - subcategory = "Powered Mining Equipment" - -/datum/armament_entry/company_import/kahraman/mining_tool/drill - item_type = /obj/item/pickaxe/drill - cost = PAYCHECK_COMMAND - -/datum/armament_entry/company_import/kahraman/mining_tool/resonator - item_type = /obj/item/resonator - cost = PAYCHECK_COMMAND - -/datum/armament_entry/company_import/kahraman/mining_tool/pka - item_type = /obj/item/gun/energy/recharge/kinetic_accelerator - cost = PAYCHECK_COMMAND - -/datum/armament_entry/company_import/kahraman/mining_tool/cutter - item_type = /obj/item/gun/energy/plasmacutter - cost = PAYCHECK_COMMAND - -/datum/armament_entry/company_import/kahraman/mining_tool/diamond_drill - item_type = /obj/item/pickaxe/drill/diamonddrill - cost = PAYCHECK_COMMAND * 2 - -/datum/armament_entry/company_import/kahraman/mining_tool/advanced_cutter - item_type = /obj/item/gun/energy/plasmacutter/adv - cost = PAYCHECK_COMMAND * 4 - -/datum/armament_entry/company_import/kahraman/mining_tool/super_resonator - item_type = /obj/item/resonator/upgraded - cost = PAYCHECK_COMMAND * 4 - -/datum/armament_entry/company_import/kahraman/mining_tool/jackhammer - item_type = /obj/item/pickaxe/drill/jackhammer - cost = PAYCHECK_COMMAND * 3 - -/datum/armament_entry/company_import/kahraman/sensing - subcategory = "Sensing Equipment" - -/datum/armament_entry/company_import/kahraman/sensing/mesons - item_type = /obj/item/clothing/glasses/meson - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/kahraman/sensing/autoscanner - item_type = /obj/item/t_scanner/adv_mining_scanner/lesser - cost = PAYCHECK_LOWER - -/datum/armament_entry/company_import/kahraman/sensing/super_autoscanner - item_type = /obj/item/t_scanner/adv_mining_scanner - cost = PAYCHECK_COMMAND * 3 - -/datum/armament_entry/company_import/kahraman/sensing/nvg_mesons - item_type = /obj/item/clothing/glasses/meson/night - cost = PAYCHECK_COMMAND * 3 - -/datum/armament_entry/company_import/kahraman/mecha_tools - subcategory = "Heavy Powered Mining Equipment" - -/datum/armament_entry/company_import/kahraman/mecha_tools/scanner - item_type = /obj/item/mecha_parts/mecha_equipment/mining_scanner - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/kahraman/mecha_tools/drill - item_type = /obj/item/mecha_parts/mecha_equipment/drill - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/kahraman/mecha_tools/pka - item_type = /obj/item/mecha_parts/mecha_equipment/weapon/energy/mecha_kineticgun - cost = PAYCHECK_CREW * 3 - -/datum/armament_entry/company_import/kahraman/mecha_tools/diamond_drill - item_type = /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill - cost = PAYCHECK_CREW * 3 - -/datum/armament_entry/company_import/kahraman/mecha_tools/cutter - item_type = /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma - cost = PAYCHECK_CREW * 3 diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/nri_military_surplus.dm b/modular_skyrat/modules/company_imports/code/armament_datums/nri_military_surplus.dm deleted file mode 100644 index 6b42acec49785c..00000000000000 --- a/modular_skyrat/modules/company_imports/code/armament_datums/nri_military_surplus.dm +++ /dev/null @@ -1,103 +0,0 @@ -/datum/armament_entry/company_import/nri_surplus - category = NRI_SURPLUS_COMPANY_NAME - company_bitflag = CARGO_COMPANY_NRI_SURPLUS - -// Various NRI clothing items - -/datum/armament_entry/company_import/nri_surplus/clothing - subcategory = "Clothing Supplies" - -/datum/armament_entry/company_import/nri_surplus/clothing/uniform - description = "A CIN designed combat uniform that can come in any number of camouflauge variations. These will ship in a station environment suitable camouflauge scheme." - item_type = /obj/item/clothing/under/syndicate/rus_army/cin_surplus - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/nri_surplus/clothing/cap - item_type = /obj/item/clothing/head/soft/nri_larp - cost = PAYCHECK_LOWER - -/datum/armament_entry/company_import/nri_surplus/clothing/belt - item_type = /obj/item/storage/belt/military/cin_surplus - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/nri_surplus/clothing/backpack - item_type = /obj/item/storage/backpack/industrial/cin_surplus - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/nri_surplus/clothing/gas_mask - item_type = /obj/item/clothing/mask/gas/hecu2 - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/nri_surplus/clothing/helmet - description = "A service helmet primarily used by CIN military forces. These will ship in a station environment suitable camouflauge scheme." - item_type = /obj/item/clothing/head/helmet/cin_surplus_helmet - cost = PAYCHECK_COMMAND - -/datum/armament_entry/company_import/nri_surplus/clothing/vest - description = "An armor vest primarily used by CIN military forces. These will ship in a station environment suitable camouflauge scheme." - item_type = /obj/item/clothing/suit/armor/vest/cin_surplus_vest - cost = PAYCHECK_COMMAND - -// Random surplus store tier stuff, flags, old rations, multitools you'll never use, so on - -/datum/armament_entry/company_import/nri_surplus/misc - subcategory = "Miscellaneous Supplies" - -/datum/armament_entry/company_import/nri_surplus/misc/flares - item_type = /obj/item/storage/box/nri_flares - cost = PAYCHECK_LOWER - -/datum/armament_entry/company_import/nri_surplus/misc/binoculars - item_type = /obj/item/binoculars - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/nri_surplus/misc/screwdriver_pen - item_type = /obj/item/pen/screwdriver - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/nri_surplus/misc/trench_tool - item_type = /obj/item/trench_tool - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/nri_surplus/misc/food_replicator - description = "Once widespread technology used by numerous fringe colonies of NRI origin and even in some SolFed territories, that ultimately went out of fashion due to \ - SolFed propaganda deeming it unprofitable and imposing severe trading fees on anyone trying to sell them. A small portion of government-backed manufacturers still produce \ - 'food replicators' for private and government use; a few of them is selling this via us." - item_type = /obj/item/circuitboard/machine/biogenerator/food_replicator - cost = CARGO_CRATE_VALUE * 9 - -/datum/armament_entry/company_import/nri_surplus/misc/nri_flag - item_type = /obj/item/sign/flag/nri - cost = PAYCHECK_LOWER - -/datum/armament_entry/company_import/nri_surplus/firearm - subcategory = "Firearms" - -/datum/armament_entry/company_import/nri_surplus/firearm/shotgun_revolver - item_type = /obj/item/gun/ballistic/revolver/cin_shotgun_revolver - cost = PAYCHECK_COMMAND * 6 - -/datum/armament_entry/company_import/nri_surplus/firearm/plasma_thrower - item_type = /obj/item/gun/energy/laser/plasma_thrower - cost = PAYCHECK_COMMAND * 6 - -/datum/armament_entry/company_import/nri_surplus/firearm/anti_materiel_rifle - item_type = /obj/item/gun/ballistic/automatic/cin_amr - cost = PAYCHECK_COMMAND * 12 - restricted = TRUE - -/datum/armament_entry/company_import/nri_surplus/firearm/sakhno_rifle - item_type = /obj/item/gun/ballistic/rifle/boltaction - cost = PAYCHECK_COMMAND * 12 - restricted = TRUE - -/datum/armament_entry/company_import/nri_surplus/firearm_ammo - subcategory = "Firearm Magazines" - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/nri_surplus/firearm_ammo/amr_magazine - item_type = /obj/item/ammo_box/magazine/cin_amr - -/datum/armament_entry/company_import/nri_surplus/firearm_ammo/sakhno_stripper - item_type = /obj/item/ammo_box/strilka310 - diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/sol_defense.dm b/modular_skyrat/modules/company_imports/code/armament_datums/sol_defense.dm deleted file mode 100644 index 0df662cd959bfb..00000000000000 --- a/modular_skyrat/modules/company_imports/code/armament_datums/sol_defense.dm +++ /dev/null @@ -1,115 +0,0 @@ -/datum/armament_entry/company_import/sol_defense - category = SOL_DEFENSE_DEFENSE_NAME - company_bitflag = CARGO_COMPANY_SOL_DEFENSE - -// Basic armor vests - -/datum/armament_entry/company_import/sol_defense/armor - subcategory = "Light Body Armor" - -/datum/armament_entry/company_import/sol_defense/armor/slim_vest - name = "type I vest - slim" - item_type = /obj/item/clothing/suit/armor/vest - cost = PAYCHECK_CREW * 3 - -/datum/armament_entry/company_import/sol_defense/armor/normal_vest - name = "type I vest - normal" - item_type = /obj/item/clothing/suit/armor/vest/alt - cost = PAYCHECK_CREW * 3 - -/datum/armament_entry/company_import/sol_defense/case - subcategory = "Weapon Cases" - -/datum/armament_entry/company_import/sol_defense/case/trappiste - item_type = /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/empty - cost = PAYCHECK_COMMAND - -/datum/armament_entry/company_import/sol_defense/case/carwo - item_type = /obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/empty - cost = PAYCHECK_COMMAND * 2 - -/datum/armament_entry/company_import/sol_defense/sidearm - subcategory = "Sidearms" - -/datum/armament_entry/company_import/sol_defense/sidearm/eland - item_type = /obj/item/gun/ballistic/revolver/sol - cost = PAYCHECK_COMMAND * 4 - -/datum/armament_entry/company_import/sol_defense/sidearm/wespe - item_type = /obj/item/gun/ballistic/automatic/pistol/sol - cost = PAYCHECK_COMMAND * 4 - -/datum/armament_entry/company_import/sol_defense/sidearm/skild - item_type = /obj/item/gun/ballistic/automatic/pistol/trappiste - cost = PAYCHECK_COMMAND * 6 - -/datum/armament_entry/company_import/sol_defense/sidearm/takbok - item_type = /obj/item/gun/ballistic/revolver/takbok - cost = PAYCHECK_COMMAND * 6 - -// Lethal anything that's not a pistol, requires high company interest - -/datum/armament_entry/company_import/sol_defense/longarm - subcategory = "Longarms" - restricted = TRUE - -/datum/armament_entry/company_import/sol_defense/longarm/renoster - item_type = /obj/item/gun/ballistic/shotgun/riot/sol - cost = PAYCHECK_COMMAND * 6 - -/datum/armament_entry/company_import/sol_defense/longarm/sindano - item_type = /obj/item/gun/ballistic/automatic/sol_smg - cost = PAYCHECK_COMMAND * 6 - -/datum/armament_entry/company_import/sol_defense/longarm/elite - item_type = /obj/item/gun/ballistic/automatic/sol_rifle/marksman - cost = PAYCHECK_COMMAND * 12 - -/datum/armament_entry/company_import/sol_defense/longarm/infanterie - item_type = /obj/item/gun/ballistic/automatic/sol_rifle - cost = PAYCHECK_COMMAND * 14 - contraband = TRUE - -/datum/armament_entry/company_import/sol_defense/longarm/outomaties - item_type = /obj/item/gun/ballistic/automatic/sol_rifle/machinegun - cost = PAYCHECK_COMMAND * 23 - contraband = TRUE - -/datum/armament_entry/company_import/sol_defense/longarm/kiboko - item_type = /obj/item/gun/ballistic/automatic/sol_grenade_launcher - cost = PAYCHECK_COMMAND * 46 - contraband = TRUE - -/datum/armament_entry/company_import/sol_defense/magazines - subcategory = "Magazines" - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/sol_defense/magazines/c35_mag - item_type = /obj/item/ammo_box/magazine/c35sol_pistol/starts_empty - -/datum/armament_entry/company_import/sol_defense/magazines/c35_extended - item_type = /obj/item/ammo_box/magazine/c35sol_pistol/stendo/starts_empty - -/datum/armament_entry/company_import/sol_defense/magazines/c585_mag - item_type = /obj/item/ammo_box/magazine/c585trappiste_pistol/spawns_empty - -/datum/armament_entry/company_import/sol_defense/magazines/sol_rifle_short - item_type = /obj/item/ammo_box/magazine/c40sol_rifle/starts_empty - -/datum/armament_entry/company_import/sol_defense/magazines/sol_rifle_standard - item_type = /obj/item/ammo_box/magazine/c40sol_rifle/standard/starts_empty - cost = PAYCHECK_COMMAND - -/datum/armament_entry/company_import/sol_defense/magazines/sol_rifle_drum - item_type = /obj/item/ammo_box/magazine/c40sol_rifle/drum/starts_empty - cost = PAYCHECK_COMMAND * 3 - contraband = TRUE - -/datum/armament_entry/company_import/sol_defense/magazines/sol_grenade_standard - item_type = /obj/item/ammo_box/magazine/c980_grenade/starts_empty - cost = PAYCHECK_COMMAND * 2 - -/datum/armament_entry/company_import/sol_defense/magazines/sol_grenade_drum - item_type = /obj/item/ammo_box/magazine/c980_grenade/drum/starts_empty - cost = PAYCHECK_CREW * 3 - contraband = TRUE diff --git a/modular_skyrat/modules/company_imports/code/objects/hud_glasses.dm b/modular_skyrat/modules/company_imports/code/objects/hud_glasses.dm deleted file mode 100644 index 0793a3cca8e4bc..00000000000000 --- a/modular_skyrat/modules/company_imports/code/objects/hud_glasses.dm +++ /dev/null @@ -1,23 +0,0 @@ -/obj/item/clothing/glasses/hud/gun_permit - name = "permit HUD" - desc = "A heads-up display that scans humanoids in view, and displays if their current ID possesses a firearms permit or not." - icon = 'modular_skyrat/modules/company_imports/icons/hud_goggles.dmi' - worn_icon = 'modular_skyrat/modules/company_imports/icons/hud_goggles_worn.dmi' - icon_state = "permithud" - hud_type = DATA_HUD_PERMIT - -/obj/item/clothing/glasses/hud/gun_permit/sunglasses - name = "permit HUD sunglasses" - desc = "A pair of sunglasses with a heads-up display that scans humanoids in view, and displays if their current ID possesses a firearms permit or not." - flash_protect = FLASH_PROTECTION_FLASH - tint = 1 - -/datum/design/permit_hud - name = "Gun Permit HUD glasses" - desc = "A heads-up display that scans humanoids in view, and displays if their current ID possesses a firearms permit or not." - id = "permit_glasses" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5) - build_path = /obj/item/clothing/glasses/hud/gun_permit - category = list(RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MISC) - departmental_flags = DEPARTMENT_BITFLAG_CARGO diff --git a/modular_skyrat/modules/company_imports/code/objects/microstar/mcr_attachment_kits.dm b/modular_skyrat/modules/company_imports/code/objects/microstar/mcr_attachment_kits.dm deleted file mode 100644 index b0ed74520559d3..00000000000000 --- a/modular_skyrat/modules/company_imports/code/objects/microstar/mcr_attachment_kits.dm +++ /dev/null @@ -1,85 +0,0 @@ -/obj/item/storage/secure/briefcase/white/mcr_loadout - name = "Microfusion Attachment Kit" - -/obj/item/storage/secure/briefcase/white/mcr_loadout/hellfire - -/obj/item/storage/secure/briefcase/white/mcr_loadout/hellfire/PopulateContents() - var/static/items_inside = list( - /obj/item/microfusion_gun_attachment/barrel/hellfire = 1, - /obj/item/microfusion_gun_attachment/rail = 1, - /obj/item/microfusion_gun_attachment/grip = 1, - ) - generate_items_inside(items_inside,src) - -/obj/item/storage/secure/briefcase/white/mcr_loadout/scatter - -/obj/item/storage/secure/briefcase/white/mcr_loadout/scatter/PopulateContents() - var/static/items_inside = list( - /obj/item/microfusion_gun_attachment/barrel/scatter = 1, - /obj/item/microfusion_gun_attachment/rail = 1, - /obj/item/microfusion_gun_attachment/grip = 1, - ) - generate_items_inside(items_inside,src) - -/obj/item/storage/secure/briefcase/white/mcr_loadout/lance - -/obj/item/storage/secure/briefcase/white/mcr_loadout/lance/PopulateContents() - var/static/items_inside = list( - /obj/item/microfusion_gun_attachment/barrel/lance = 1, - /obj/item/microfusion_gun_attachment/scope = 1, - /obj/item/microfusion_gun_attachment/heatsink = 1, - ) - generate_items_inside(items_inside,src) - -/obj/item/storage/secure/briefcase/white/mcr_loadout/repeater - -/obj/item/storage/secure/briefcase/white/mcr_loadout/repeater/PopulateContents() - var/static/items_inside = list( - /obj/item/microfusion_gun_attachment/barrel/repeater = 1, - /obj/item/microfusion_gun_attachment/rail = 1, - /obj/item/microfusion_gun_attachment/heatsink = 1, - ) - generate_items_inside(items_inside,src) - -/obj/item/storage/secure/briefcase/white/mcr_loadout/tacticool - -/obj/item/storage/secure/briefcase/white/mcr_loadout/tacticool/PopulateContents() - var/static/items_inside = list( - /obj/item/microfusion_gun_attachment/barrel/suppressor = 1, - /obj/item/microfusion_gun_attachment/rail = 1, - /obj/item/microfusion_gun_attachment/grip = 1, - /obj/item/microfusion_gun_attachment/camo = 1, - ) - generate_items_inside(items_inside,src) - -// Phase emitter and cell upgrades - -/obj/item/storage/secure/briefcase/white/mcr_parts - name = "Microfusion Parts Kit" - -/obj/item/storage/secure/briefcase/white/mcr_parts/enhanced - -/obj/item/storage/secure/briefcase/white/mcr_parts/enhanced/PopulateContents() - var/static/items_inside = list( - /obj/item/stock_parts/cell/microfusion/enhanced = 1, - /obj/item/microfusion_phase_emitter/enhanced = 1, - ) - generate_items_inside(items_inside,src) - -/obj/item/storage/secure/briefcase/white/mcr_parts/advanced - -/obj/item/storage/secure/briefcase/white/mcr_parts/advanced/PopulateContents() - var/static/items_inside = list( - /obj/item/stock_parts/cell/microfusion/advanced = 1, - /obj/item/microfusion_phase_emitter/advanced = 1, - ) - generate_items_inside(items_inside,src) - -/obj/item/storage/secure/briefcase/white/mcr_parts/bluespace - -/obj/item/storage/secure/briefcase/white/mcr_parts/bluespace/PopulateContents() - var/static/items_inside = list( - /obj/item/stock_parts/cell/microfusion/bluespace = 1, - /obj/item/microfusion_phase_emitter/bluespace = 1, - ) - generate_items_inside(items_inside,src) diff --git a/modular_skyrat/modules/company_imports/code/objects/nri_surplus/ak25.dm b/modular_skyrat/modules/company_imports/code/objects/nri_surplus/ak25.dm deleted file mode 100644 index f94e0167a81590..00000000000000 --- a/modular_skyrat/modules/company_imports/code/objects/nri_surplus/ak25.dm +++ /dev/null @@ -1,49 +0,0 @@ -/obj/item/gun/ballistic/automatic/ak25 - name = "\improper AK-25 rifle" - desc = "A cheap reproduction of the timeless AK rifle. The price tag is lower than usual, but expect it to blow up in your hands." - icon = 'modular_skyrat/modules/company_imports/icons/ak25/ak25.dmi' - icon_state = "ak25" - lefthand_file = 'modular_skyrat/modules/company_imports/icons/ak25/ak25_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/company_imports/icons/ak25/ak25_righthand.dmi' - inhand_icon_state = "ak25" - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - w_class = WEIGHT_CLASS_BULKY - weapon_weight = WEAPON_HEAVY - accepted_magazine_type = /obj/item/ammo_box/magazine/ak25 - can_suppress = FALSE - burst_size = 3 - fire_delay = 2 - worn_icon = 'modular_skyrat/modules/company_imports/icons/ak25/ak25_back.dmi' - worn_icon_state = "ak25" - fire_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/akm_fire.ogg' - rack_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_cock.ogg' - load_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_magin.ogg' - load_empty_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_magin.ogg' - eject_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_magout.ogg' - alt_icons = TRUE - spread = 29 - recoil = 0.1 - -/obj/item/gun/ballistic/automatic/ak25/give_manufacturer_examine() - AddElement(/datum/element/manufacturer_examine, COMPANY_IZHEVSK) - -/obj/item/ammo_box/magazine/ak25 - name = "\improper AK-25 magazine" - desc = "A banana-shaped double-stack magazine able to hold 30 rounds of 7.32x29mm ammunition." - icon = 'modular_skyrat/modules/company_imports/icons/ak25/ak25_ammo.dmi' - icon_state = "ak25_mag" - ammo_type = /obj/item/ammo_casing/realistic/a732x29 - caliber = CALIBER_732x29 - max_ammo = 30 - multiple_sprites = AMMO_BOX_FULL_EMPTY - -/obj/item/ammo_casing/realistic/a732x29 - name = "7.32x29 bullet casing" - desc = "A 7.32x29mm M43 bullet casing." - icon_state = "762x39-casing" - caliber = CALIBER_732x29 - projectile_type = /obj/projectile/bullet/a732x29 - -/obj/projectile/bullet/a732x29 - name = "7.62x25 bullet" - damage = 22 diff --git a/modular_skyrat/modules/company_imports/code/objects/nri_surplus/larp_clothing.dm b/modular_skyrat/modules/company_imports/code/objects/nri_surplus/larp_clothing.dm deleted file mode 100644 index 1bf4231e4cefbc..00000000000000 --- a/modular_skyrat/modules/company_imports/code/objects/nri_surplus/larp_clothing.dm +++ /dev/null @@ -1,3 +0,0 @@ -/obj/item/clothing/head/soft/nri_larp - name = "imperial field cap" - desc = "A stiff military soft cap often seen worn by members of the NRI's military forces, or people like you." diff --git a/modular_skyrat/modules/company_imports/code/objects/vitezstvi/ammo_boxes.dm b/modular_skyrat/modules/company_imports/code/objects/vitezstvi/ammo_boxes.dm deleted file mode 100644 index fc7fb6015317f9..00000000000000 --- a/modular_skyrat/modules/company_imports/code/objects/vitezstvi/ammo_boxes.dm +++ /dev/null @@ -1,114 +0,0 @@ -/obj/item/ammo_box - w_class = WEIGHT_CLASS_NORMAL - -/obj/item/ammo_box/magazine - w_class = WEIGHT_CLASS_SMALL - -/obj/item/ammo_box/strilka310 - w_class = WEIGHT_CLASS_SMALL - -/obj/item/ammo_box/a357 - w_class = WEIGHT_CLASS_SMALL - -/obj/item/ammo_box/c38 - w_class = WEIGHT_CLASS_SMALL - -/obj/item/ammo_box/c9mm/ap - name = "ammo box (9mm AP)" - ammo_type = /obj/item/ammo_casing/c9mm/ap - -/obj/item/ammo_box/c9mm/hp - name = "ammo box (9mm HP)" - ammo_type = /obj/item/ammo_casing/c9mm/hp - -/obj/item/ammo_box/c9mm/fire - name = "ammo box (9mm incendiary)" - ammo_type = /obj/item/ammo_casing/c9mm/fire - -/obj/item/ammo_box/c10mm/ap - name = "ammo box (10mm AP)" - ammo_type = /obj/item/ammo_casing/c10mm/ap - max_ammo = 20 - -/obj/item/ammo_box/c10mm/hp - name = "ammo box (10mm HP)" - ammo_type = /obj/item/ammo_casing/c10mm/hp - max_ammo = 20 - -/obj/item/ammo_box/c10mm/fire - name = "ammo box (10mm incendiary)" - ammo_type = /obj/item/ammo_casing/c10mm/fire - max_ammo = 20 - -/obj/item/ammo_box/c46x30mm - name = "ammo box (4.6x30mm)" - icon = 'modular_skyrat/modules/company_imports/icons/ammo.dmi' - icon_state = "ammo_46" - ammo_type = /obj/item/ammo_casing/c46x30mm - max_ammo = 20 - -/obj/item/ammo_box/c46x30mm/ap - name = "ammo box (4.6x30mm AP)" - ammo_type = /obj/item/ammo_casing/c46x30mm/ap - -/obj/item/ammo_box/c46x30mm/rubber - name = "ammo box (4.6x30mm rubber)" - ammo_type = /obj/item/ammo_casing/c46x30mm/rubber - -/obj/item/ammo_box/c34 - name = "ammo box (.34)" - icon = 'modular_skyrat/modules/company_imports/icons/ammo.dmi' - icon_state = "ammo_34" - ammo_type = /obj/item/ammo_casing/c34 - max_ammo = 20 - -/obj/item/ammo_box/c34/ap - name = "ammo box (.34 AP)" - ammo_type = /obj/item/ammo_casing/c34/ap - -/obj/item/ammo_box/c34/rubber - name = "ammo box (.34 rubber)" - ammo_type = /obj/item/ammo_casing/c34/rubber - -/obj/item/ammo_box/c34/fire - name = "ammo box (.34 incendiary)" - ammo_type = /obj/item/ammo_casing/c34_incendiary - -/obj/item/ammo_box/c56mm - name = "ammo box (5.6mm civilian)" - desc = "5.6x40mm ammunition specifically made for civilian use like recreation, hunting, self-defense or LARP. While the package itself lacks any real identification \ - and does, in fact, appear like a bland green box with a colored stripe, the insides have a boatload of information, \ - ranging from manufacturer advertisements and intended use to the cartridge's tactical and technical characteristics." - icon = 'modular_skyrat/modules/novaya_ert/icons/ammo_boxes.dmi' - icon_state = "boxnrifle-lethal" - base_icon_state = "boxnrifle-lethal" - multiple_sprites = AMMO_BOX_FULL_EMPTY - ammo_type = /obj/item/ammo_casing/realistic/a762x39/civilian - max_ammo = 60 - -/obj/item/ammo_box/c56mm/rubber - name = "ammo box (5.6mm rubber)" - icon_state = "boxnrifle-rubber" - base_icon_state = "boxnrifle-rubber" - ammo_type = /obj/item/ammo_casing/realistic/a762x39/civilian/rubber - -/obj/item/ammo_box/c56mm/hunting - name = "ammo box (5.6mm hunting)" - icon_state = "boxnrifle-hunting" - base_icon_state = "boxnrifle-hunting" - ammo_type = /obj/item/ammo_casing/realistic/a762x39/civilian/hunting - -/obj/item/ammo_box/c56mm/blank - name = "ammo box (5.6mm blank)" - icon_state = "boxnrifle-blank" - base_icon_state = "boxnrifle-blank" - ammo_type = /obj/item/ammo_casing/realistic/a762x39/civilian/blank - -/obj/item/storage/box/ammo_box/microfusion/bluespace - name = "bluespace microfusion cell container" - desc = "A box filled with microfusion cells." - -/obj/item/storage/box/ammo_box/microfusion/bluespace/PopulateContents() - new /obj/item/stock_parts/cell/microfusion/bluespace(src) - new /obj/item/stock_parts/cell/microfusion/bluespace(src) - new /obj/item/stock_parts/cell/microfusion/bluespace(src) diff --git a/modular_skyrat/modules/company_imports/code/readme.md b/modular_skyrat/modules/company_imports/code/readme.md deleted file mode 100644 index 32b07361a20140..00000000000000 --- a/modular_skyrat/modules/company_imports/code/readme.md +++ /dev/null @@ -1,25 +0,0 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/ - -## \<Title Here> - -Module ID: - -### Description: - -### TG Proc/File Changes: - -- N/A - -### Modular Overrides: - -- `modular_skyrat/master_files/code/modules/cargo/orderconsole.dm`: `proc/ui_act` - -### Defines: - -- N/A - -### Included files that are not contained in this module: - -- N/A - -### Credits: diff --git a/modular_skyrat/modules/company_imports/icons/ak25/ak25.dmi b/modular_skyrat/modules/company_imports/icons/ak25/ak25.dmi deleted file mode 100644 index 0dcdc0282cc583..00000000000000 Binary files a/modular_skyrat/modules/company_imports/icons/ak25/ak25.dmi and /dev/null differ diff --git a/modular_skyrat/modules/company_imports/icons/ak25/ak25_ammo.dmi b/modular_skyrat/modules/company_imports/icons/ak25/ak25_ammo.dmi deleted file mode 100644 index b9993677e14e97..00000000000000 Binary files a/modular_skyrat/modules/company_imports/icons/ak25/ak25_ammo.dmi and /dev/null differ diff --git a/modular_skyrat/modules/company_imports/icons/ak25/ak25_back.dmi b/modular_skyrat/modules/company_imports/icons/ak25/ak25_back.dmi deleted file mode 100644 index fdd355aa8376fa..00000000000000 Binary files a/modular_skyrat/modules/company_imports/icons/ak25/ak25_back.dmi and /dev/null differ diff --git a/modular_skyrat/modules/company_imports/icons/ak25/ak25_lefthand.dmi b/modular_skyrat/modules/company_imports/icons/ak25/ak25_lefthand.dmi deleted file mode 100644 index 3eedc9d1390351..00000000000000 Binary files a/modular_skyrat/modules/company_imports/icons/ak25/ak25_lefthand.dmi and /dev/null differ diff --git a/modular_skyrat/modules/company_imports/icons/ak25/ak25_righthand.dmi b/modular_skyrat/modules/company_imports/icons/ak25/ak25_righthand.dmi deleted file mode 100644 index d14298a081dcfb..00000000000000 Binary files a/modular_skyrat/modules/company_imports/icons/ak25/ak25_righthand.dmi and /dev/null differ diff --git a/modular_skyrat/modules/contractor/code/datums/contract.dm b/modular_skyrat/modules/contractor/code/datums/contract.dm deleted file mode 100644 index 7d57f029f844e5..00000000000000 --- a/modular_skyrat/modules/contractor/code/datums/contract.dm +++ /dev/null @@ -1,318 +0,0 @@ -#define RANSOM_LOWER 75 -#define RANSOM_UPPER 150 -#define CONTRACTOR_RANSOM_CUT 0.35 - -/datum/syndicate_contract - /// Unique ID tied to the contract - var/id = 0 - /// If the contract is the contractor's current one - var/status = CONTRACT_STATUS_INACTIVE - /// Reference to the objective datum - var/datum/objective/contract/contract = new() - /// Target's job - var/target_rank - /// A number in multiples of 100, anywhere from 7500 credits to 15000, station cost when someone is kidnapped - var/ransom = 0 - /// TC payout size, will be small, medium, or large. - var/payout_type - /// Mad-libs style wanted message, just flavor. - var/wanted_message - /// List of the items the victim had on them prior to kidnapping. - var/list/victim_belongings = list() - -/datum/syndicate_contract/New(contract_owner, blacklist, type = CONTRACT_PAYOUT_SMALL) - contract.owner = contract_owner - payout_type = type - - generate(blacklist) - -/// Generation of the contract, called on New() -/datum/syndicate_contract/proc/generate(blacklist) - contract.find_target(null, blacklist) - - var/datum/record/crew/record - if (contract.target) - record = find_record(contract.target.name) - - if (record) - target_rank = record.rank - else - target_rank = "Unknown" - - if (payout_type == CONTRACT_PAYOUT_LARGE) - contract.payout_bonus = rand(9,13) - else if (payout_type == CONTRACT_PAYOUT_MEDIUM) - contract.payout_bonus = rand(6,8) - else - contract.payout_bonus = rand(2,4) - - contract.payout = rand(1, 2) - contract.generate_dropoff() - - ransom = 100 * rand(RANSOM_LOWER, RANSOM_UPPER) - - var/base = pick_list(WANTED_FILE, "basemessage") - var/verb_string = pick_list(WANTED_FILE, "verb") - var/noun = pick_list_weighted(WANTED_FILE, "noun") - var/location = pick_list_weighted(WANTED_FILE, "location") - wanted_message = "[base] [verb_string] [noun] [location]." - -/// Handler to find a valid turn and launch victim collector -/datum/syndicate_contract/proc/handle_extraction(mob/living/user) - if(!(contract.target && contract.dropoff_check(user, contract.target.current))) - return FALSE - - var/turf/free_location = find_obstruction_free_location(3, user, contract.dropoff) - - if(!free_location) - return FALSE - - launch_extraction_pod(free_location) - return TRUE - - -/// Launch the pod to collect our victim. -/datum/syndicate_contract/proc/launch_extraction_pod(turf/empty_pod_turf) - var/obj/structure/closet/supplypod/extractionpod/empty_pod = new() - empty_pod.contract_hub = contract.owner?.opposing_force?.contractor_hub - empty_pod.tied_contract = src - empty_pod.recieving = TRUE - - RegisterSignal(empty_pod, COMSIG_ATOM_ENTERED, PROC_REF(enter_check)) - - empty_pod.stay_after_drop = TRUE - empty_pod.reversing = TRUE - empty_pod.explosionSize = list(0,0,0,1) - empty_pod.leavingSound = 'sound/effects/podwoosh.ogg' - - new /obj/effect/pod_landingzone(empty_pod_turf, empty_pod) - -/datum/syndicate_contract/proc/enter_check(datum/source, mob/living/sent_mob) - SIGNAL_HANDLER - if(!istype(source, /obj/structure/closet/supplypod/extractionpod)) - return - if(!istype(sent_mob)) - return - var/datum/opposing_force/opfor_data = contract.owner.opposing_force - - if (sent_mob == contract.target.current) - opfor_data.contractor_hub.contract_TC_to_redeem += contract.payout - opfor_data.contractor_hub.contracts_completed += 1 - - if (sent_mob.stat != DEAD) - opfor_data.contractor_hub.contract_TC_to_redeem += contract.payout_bonus - - status = CONTRACT_STATUS_COMPLETE - - if (opfor_data.contractor_hub.current_contract == src) - opfor_data.contractor_hub.current_contract = null - - opfor_data.contractor_hub.contract_rep += 2 - else - status = CONTRACT_STATUS_ABORTED // Sending a sent_mob that wasn't even yours is as good as just aborting it - - if (opfor_data.contractor_hub.current_contract == src) - opfor_data.contractor_hub.current_contract = null - - if(iscarbon(sent_mob)) - for(var/obj/item/sent_mob_item in sent_mob) - if (ishuman(sent_mob)) - var/mob/living/carbon/human/sent_mob_human = sent_mob - if(sent_mob_item == sent_mob_human.w_uniform) - continue //So all they're left with are shoes and uniform. - if(sent_mob_item == sent_mob_human.shoes) - continue - - - sent_mob.transferItemToLoc(sent_mob_item) - victim_belongings.Add(sent_mob_item) - - var/obj/structure/closet/supplypod/extractionpod/pod = source - pod.recieving = FALSE - - // Handle the pod returning - pod.startExitSequence(pod) - - if (ishuman(sent_mob)) - var/mob/living/carbon/human/sent_mob_human = sent_mob - - // After we remove items, at least give them what they need to live. - sent_mob_human.dna.species.give_important_for_life(sent_mob_human) - - // After pod is sent we start the victim narrative/heal. - INVOKE_ASYNC(src, PROC_REF(handle_victim_experience), sent_mob) - - // This is slightly delayed because of the sleep calls above to handle the narrative. - // We don't want to tell the station instantly. - var/points_to_check - var/datum/bank_account/bank = SSeconomy.get_dep_account(ACCOUNT_CAR) - if(bank) - points_to_check = bank.account_balance - if(points_to_check >= ransom) - bank.adjust_money(-ransom) - else - bank.adjust_money(-points_to_check) - - priority_announce("One of your crew was captured by a rival organisation - we've needed to pay their ransom to bring them back. \ - As is policy we've taken a portion of the station's funds to offset the overall cost.", null, null, null, "Nanotrasen Asset Protection") - - addtimer(CALLBACK(src, PROC_REF(finish_enter)), 3 SECONDS) - -/// Called when person is finished shoving in, awards ransome money -/datum/syndicate_contract/proc/finish_enter() - // Pay contractor their portion of ransom - if(status != CONTRACT_STATUS_COMPLETE) - return - - var/obj/item/card/id/owner_id = contract.owner.current?.get_idcard(TRUE) - - if(owner_id?.registered_account.account_id) // why do we check for account id? because apparently unset agent IDs have existing bank accounts that can't be accessed. this is suboptimal - owner_id.registered_account.adjust_money(ransom * CONTRACTOR_RANSOM_CUT) - - owner_id.registered_account.bank_card_talk("We've processed the ransom, agent. Here's your cut - your balance is now \ - [owner_id.registered_account.account_balance] credits.", TRUE) - else - to_chat(contract.owner.current, span_notice("A briefcase appears at your feet!")) - var/obj/item/storage/secure/briefcase/case = new(get_turf(contract.owner.current)) - for(var/i in 1 to (round((ransom * CONTRACTOR_RANSOM_CUT) / 1000))) // Gets slightly less/more but whatever - new /obj/item/stack/spacecash/c1000(case) - -/// They're off to holding - handle the return timer and give some text about what's going on. -/datum/syndicate_contract/proc/handle_victim_experience(mob/living/target) - // Ship 'em back - dead or alive, 4 minutes wait. - // Even if they weren't the target, we're still treating them the same. - addtimer(CALLBACK(src, PROC_REF(return_victim), target), 4 MINUTES) - - if (target.stat == DEAD) - return - // Heal them up - gets them out of crit/soft crit. If omnizine is removed in the future, this needs to be replaced with a - // method of healing them, consequence free, to a reasonable amount of health. - victim_stage_one(target) - -/// Adds omnizine and begins the victim handling -/datum/syndicate_contract/proc/victim_stage_one(mob/living/target) - target.reagents.add_reagent(/datum/reagent/medicine/omnizine, 20) - - target.flash_act() - target.adjust_confusion(10 SECONDS) - target.set_eye_blur_if_lower(10 SECONDS) - to_chat(target, span_warning("You feel strange...")) - addtimer(CALLBACK(src, PROC_REF(victim_stage_two), target), 6 SECONDS) - -/// Continued victim handling -/datum/syndicate_contract/proc/victim_stage_two(mob/living/target) - var/list/parts_to_fuck_up = list( - BODY_ZONE_L_ARM, - BODY_ZONE_R_ARM, - BODY_ZONE_L_LEG, - BODY_ZONE_R_LEG, - ) - - to_chat(target, span_warning("That pod did something to you...")) - target.set_dizzy(70 SECONDS) - - for(var/i in 1 to 2) - var/obj/item/bodypart/limb = target.get_bodypart(pick_n_take(parts_to_fuck_up)) - var/min_wound = limb.get_wound_threshold_of_wound_type(WOUND_BLUNT, WOUND_SEVERITY_SEVERE, return_value_if_no_wound = 40) - var/max_wound = limb.get_wound_threshold_of_wound_type(WOUND_BLUNT, WOUND_SEVERITY_CRITICAL, return_value_if_no_wound = 60) - limb.receive_damage(brute = WOUND_MINIMUM_DAMAGE, wound_bonus = rand(min_wound, max_wound)) - target.update_damage_overlays() - - addtimer(CALLBACK(src, PROC_REF(victim_stage_three), target), 6 SECONDS) - -/// Continued victim handling, flashes them as well -/datum/syndicate_contract/proc/victim_stage_three(mob/living/target) - to_chat(target, span_warning("Your head pounds... It feels like it's going to burst out your skull!")) - target.flash_act() - target.adjust_confusion(20 SECONDS) - target.set_eye_blur_if_lower(6 SECONDS) - addtimer(CALLBACK(src, PROC_REF(victim_stage_four), target), 3 SECONDS) - -/// Continued victim handling -/datum/syndicate_contract/proc/victim_stage_four(mob/living/target) - to_chat(target, span_warning("Your head pounds...")) - - if(iscarbon(target)) - var/mob/living/carbon/carbon_target = target - switch(rand(1, 100)) - if(1 to 45) - carbon_target.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_SURGERY) - - if(46 to 73) - carbon_target.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_SURGERY) - carbon_target.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_SURGERY) - - if(74 to 94) - carbon_target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_SURGERY) - - if(75 to 100) - carbon_target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_SURGERY) - carbon_target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_SURGERY) - - addtimer(CALLBACK(src, PROC_REF(victim_stage_five), target), 10 SECONDS) - -/// Continued victim handling, some unconsciousness -/datum/syndicate_contract/proc/victim_stage_five(mob/living/target) - target.flash_act() - target.Unconscious(200) - to_chat(target, span_hypnophrase(span_reallybig("A million voices echo in your head... <i>\"Your mind held many valuable secrets - \ - we thank you for providing them. Your value is expended, and you will be ransomed back to your station. We always get paid, \ - so it's only a matter of time before we ship you back...\"</i>"))) - target.set_eye_blur_if_lower(20 SECONDS) - target.set_dizzy_if_lower(30 SECONDS) - target.adjust_confusion(20 SECONDS) - -/// We're returning the victim -/datum/syndicate_contract/proc/return_victim(mob/living/target) - var/list/possible_drop_loc = list() - - for(var/turf/possible_drop in contract.dropoff.contents) - if(is_safe_turf(possible_drop)) - possible_drop_loc += possible_drop - if(!length(possible_drop_loc)) //Prioritize safe tiles first, then unsafe - for(var/turf/open/possible_unsafe_drop in contract.dropoff.contents) - possible_drop_loc += possible_unsafe_drop - - if (length(possible_drop_loc)) - var/pod_rand_loc = rand(1, length(possible_drop_loc)) - - var/obj/structure/closet/supplypod/return_pod = new() - return_pod.bluespace = TRUE - return_pod.explosionSize = list(0,0,0,0) - return_pod.style = STYLE_SYNDICATE - - do_sparks(8, FALSE, target) - target.visible_message(span_notice("[target] vanishes...")) - - for(var/obj/item/target_item as anything in target) - if(ishuman(target)) - var/mob/living/carbon/human/human_target = target - if(target_item == human_target.w_uniform) - continue //So all they're left with are shoes and uniform. - if(target_item == human_target.shoes) - continue - target.dropItemToGround(target_item) - - for(var/obj/item/target_item as anything in victim_belongings) - target_item.forceMove(return_pod) - - target.forceMove(return_pod) - - target.flash_act() - target.set_eye_blur_if_lower(60 SECONDS) - target.set_dizzy_if_lower(70 SECONDS) - target.adjust_confusion(20 SECONDS) - - new /obj/effect/pod_landingzone(possible_drop_loc[pod_rand_loc], return_pod) - else - to_chat(target, span_reallybig(span_hypnophrase("A million voices echo in your head... <i>\"Seems where you got sent here from won't \ - be able to handle our pod... You will die here instead.\"</i>"))) - if(!isliving(target)) - return - var/mob/living/unlucky_fellow = target - unlucky_fellow.investigate_log("was returned without a valid drop location by the contractor [contract.owner?.current].", INVESTIGATE_DEATHS) - unlucky_fellow.death() - -#undef RANSOM_LOWER -#undef RANSOM_UPPER -#undef CONTRACTOR_RANSOM_CUT diff --git a/modular_skyrat/modules/contractor/code/datums/contractor_datum.dm b/modular_skyrat/modules/contractor/code/datums/contractor_datum.dm deleted file mode 100644 index 5346d412702b1d..00000000000000 --- a/modular_skyrat/modules/contractor/code/datums/contractor_datum.dm +++ /dev/null @@ -1,34 +0,0 @@ -/// End-round generation proc -/datum/opposing_force/proc/contractor_round_end() - var/result = "" - var/total_spent_rep = 0 - - var/completed_contracts = contractor_hub.contracts_completed - var/tc_total = contractor_hub.contract_paid_out + contractor_hub.contract_TC_to_redeem - - var/contractor_item_icons = "" // Icons of purchases - var/contractor_support_unit = "" // Set if they had a support unit - and shows appended to their contracts completed - - // Get all the icons/total cost for all our items bought - for (var/datum/contractor_item/contractor_purchase in contractor_hub.purchased_items) - contractor_item_icons += "<span class='tooltip_container'>\[ <i class=\"fas [contractor_purchase.item_icon]\"></i><span class='tooltip_hover'><b>[contractor_purchase.name] - [contractor_purchase.cost] Rep</b><br><br>[contractor_purchase.desc]</span> \]</span>" - - total_spent_rep += contractor_purchase.cost - - // Special case for reinforcements, we want to show their ckey and name on round end. - if (istype(contractor_purchase, /datum/contractor_item/contractor_partner)) - var/datum/contractor_item/contractor_partner/partner = contractor_purchase - var/mob/living/carbon/human/partner_mob = partner.partner_mind.current - contractor_support_unit += "<br><b>[partner_mob.name]</b> was [partner_mob.p_their()] contractor support unit." - - if (length(contractor_hub.purchased_items)) - result += "<br>(used [total_spent_rep] Rep) " - result += contractor_item_icons - result += "<br>" - if (completed_contracts > 0) - var/plural_check = "contract[completed_contracts > 1 ? "s" : ""]" - - result += "Completed [span_greentext("[completed_contracts]")] [plural_check] for a total of \ - [span_greentext("[tc_total] TC")]![contractor_support_unit]<br>" - - return result diff --git a/modular_skyrat/modules/contractor/code/datums/contractor_hub.dm b/modular_skyrat/modules/contractor/code/datums/contractor_hub.dm deleted file mode 100644 index 130cd3d2a4b1a4..00000000000000 --- a/modular_skyrat/modules/contractor/code/datums/contractor_hub.dm +++ /dev/null @@ -1,92 +0,0 @@ -#define LOWEST_TC 30 - -/datum/contractor_hub - /// How much reputation the contractor has - var/contract_rep = 0 - /// What contractor items can be purchased - var/list/hub_items = list() - /// List of what the contractor's purchased - var/list/purchased_items = list() - /// Static of contractor_item subtypes - var/static/list/contractor_items = typecacheof(/datum/contractor_item, ignore_root_path = TRUE) - /// Reference to the current contract datum - var/datum/syndicate_contract/current_contract - /// List of all contract datums the contractor has available - var/list/datum/syndicate_contract/assigned_contracts = list() - /// used as a blacklist to make sure we're not assigning targets already assigned - var/list/assigned_targets = list() - /// NUmber of how many contracts you've done - var/contracts_completed = 0 - /// How many TC you've paid out in contracts - var/contract_paid_out = 0 - /// Amount of TC that has yet to be redeemed - var/contract_TC_to_redeem = 0 - /// Current index number for contract IDs - var/start_index = 1 - -/// Generates a list of all valid hub items to set for purchase -/datum/contractor_hub/proc/create_hub_items() - for(var/path in contractor_items) - var/datum/contractor_item/contractor_item = new path - - hub_items.Add(contractor_item) - -/// Create initial list of contracts -/datum/contractor_hub/proc/create_contracts(datum/mind/owner) - - // 6 initial contracts - var/list/to_generate = list( - CONTRACT_PAYOUT_LARGE, - CONTRACT_PAYOUT_MEDIUM, - CONTRACT_PAYOUT_MEDIUM, - CONTRACT_PAYOUT_SMALL, - CONTRACT_PAYOUT_SMALL, - CONTRACT_PAYOUT_SMALL - ) - - //What the fuck - if(length(to_generate) > length(GLOB.manifest.locked)) - to_generate.Cut(1, length(GLOB.manifest.locked)) - - var/total = 0 - var/lowest_paying_sum = 0 - var/datum/syndicate_contract/lowest_paying_contract - - // Randomise order, so we don't have contracts always in payout order. - to_generate = shuffle(to_generate) - - // Support contract generation happening multiple times - if (length(assigned_contracts)) - start_index = length(assigned_contracts) + 1 - - // Generate contracts, and find the lowest paying. - for(var/contract_gen in 1 to length(to_generate)) - var/datum/syndicate_contract/contract_to_add = new(owner, assigned_targets, to_generate[contract_gen]) - var/contract_payout_total = contract_to_add.contract.payout + contract_to_add.contract.payout_bonus - - assigned_targets.Add(contract_to_add.contract.target) - - if (!lowest_paying_contract || (contract_payout_total < lowest_paying_sum)) - lowest_paying_sum = contract_payout_total - lowest_paying_contract = contract_to_add - - total += contract_payout_total - contract_to_add.id = start_index - assigned_contracts.Add(contract_to_add) - - start_index++ - - // If the threshold for TC payouts isn't reached, boost the lowest paying contract - if ((total < LOWEST_TC) && lowest_paying_contract) - lowest_paying_contract.contract.payout_bonus += (LOWEST_TC - total) - -#undef LOWEST_TC - -/datum/contractor_hub/proc/create_single_contract(datum/mind/owner, contract_payout_tier) - var/datum/syndicate_contract/contract_to_add = new(owner, assigned_targets, contract_payout_tier) - - assigned_targets.Add(contract_to_add.contract.target) - - contract_to_add.id = start_index - assigned_contracts.Add(contract_to_add) - start_index++ diff --git a/modular_skyrat/modules/contractor/code/datums/contractor_items.dm b/modular_skyrat/modules/contractor/code/datums/contractor_items.dm deleted file mode 100644 index 80013aef23ee93..00000000000000 --- a/modular_skyrat/modules/contractor/code/datums/contractor_items.dm +++ /dev/null @@ -1,220 +0,0 @@ -/datum/contractor_item - /// Name of the item datum - var/name - /// Description of the item datum - var/desc - /// Item path to spawn, no item path means you need to override `handle_purchase()` - var/item - /// fontawesome icon to use inside the hub - https://fontawesome.com/icons/ - var/item_icon = "broadcast-tower" - /// Any number above 0 for how many times it can be bought in a round for a single traitor. -1 is unlimited. - var/limited = -1 - /// Cost of the item in contract rep. - var/cost - -/// Subtract cost, and spawn if it's an item. -/datum/contractor_item/proc/handle_purchase(datum/contractor_hub/hub, mob/living/user) - - if(hub.contract_rep >= cost) - hub.contract_rep -= cost - else - return FALSE - - if(limited >= 1) - limited -= 1 - else - return FALSE - - hub.purchased_items.Add(src) - - user.playsound_local(user, 'sound/machines/uplinkpurchase.ogg', 100) - - if(item) - var/atom/item_to_create = new item(get_turf(user)) - if(user.put_in_hands(item_to_create)) - to_chat(user, span_notice("Your purchase materializes into your hands!")) - else - to_chat(user, span_notice("Your purchase materializes onto the floor.")) - - return TRUE - -/datum/contractor_item/contract_reroll - name = "Contract Reroll" - desc = "Request a reroll of your current contract list. Will generate a new target, payment, and dropoff for the contracts you currently have available." - item_icon = "dice" - limited = 3 - cost = 0 - -/datum/contractor_item/contract_reroll/handle_purchase(datum/contractor_hub/hub) - . = ..() - - if(!(.)) - return - // We're not regenerating already completed/aborted/extracting contracts, but we don't want to repeat their targets. - var/list/new_target_list = list() - for(var/datum/syndicate_contract/contract_check as anything in hub.assigned_contracts) - if (contract_check.status != CONTRACT_STATUS_ACTIVE && contract_check.status != CONTRACT_STATUS_INACTIVE) - if (contract_check.contract.target) - new_target_list.Add(contract_check.contract.target) - continue - - // Reroll contracts without duplicates - for(var/datum/syndicate_contract/rerolling_contract as anything in hub.assigned_contracts) - if (rerolling_contract.status != CONTRACT_STATUS_ACTIVE && rerolling_contract.status != CONTRACT_STATUS_INACTIVE) - continue - - rerolling_contract.generate(new_target_list) - new_target_list.Add(rerolling_contract.contract.target) - - // Set our target list with the new set we've generated. - hub.assigned_targets = new_target_list - -/datum/contractor_item/contractor_pinpointer - name = "Contractor Pinpointer" - desc = "A pinpointer that finds targets even without active suit sensors. Due to taking advantage of an exploit within the system, it can't pinpoint to the same accuracy as the traditional models. Becomes permanently locked to the user that first activates it." - item = /obj/item/pinpointer/crew/contractor - item_icon = "search-location" - limited = 2 - cost = 1 - -/datum/contractor_item/fulton_extraction_kit - name = "Fulton Extraction Kit" - desc = "For getting your target across the station to those difficult dropoffs. Place the beacon somewhere secure, and link the pack. Activating the pack on your target will send them over to the beacon - make sure they're not just going to run away though!" - item = /obj/item/storage/box/contractor/fulton_extraction - item_icon = "parachute-box" - limited = 1 - cost = 1 - -/datum/contractor_item/contractor_partner - name = "Reinforcements" - desc = "Upon purchase we'll contact available units in the area. Should there be an agent free, we'll send them down to assist you immediately. If no units are free, we give a full refund." - item_icon = "user-friends" - limited = 1 - cost = 2 - var/datum/mind/partner_mind = null - -/datum/contractor_item/contractor_partner/handle_purchase(datum/contractor_hub/hub, mob/living/user) - . = ..() - - if(!.) - return - 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_PAI, FALSE, 100, POLL_IGNORE_CONTRACTOR_SUPPORT) - - if(LAZYLEN(candidates)) - var/mob/dead/observer/picked_obs = pick(candidates) - spawn_contractor_partner(user, picked_obs.key) - else - to_chat(user, span_notice("No available agents at this time, please try again later.")) - - // refund and add the limit back. - limited += 1 - hub.contract_rep += cost - hub.purchased_items -= src - -/datum/contractor_item/contractor_partner/proc/spawn_contractor_partner(mob/living/user, key) - var/mob/living/carbon/human/partner = new() - var/datum/outfit/contractor_partner/partner_outfit = new() - - partner_outfit.equip(partner) - - var/obj/structure/closet/supplypod/arrival_pod = new(null, STYLE_SYNDICATE) - arrival_pod.explosionSize = list(0,0,0,1) - arrival_pod.bluespace = TRUE - - var/turf/free_location = find_obstruction_free_location(2, user) - - // We really want to send them - if we can't find a nice location just land it on top of them. - if (!free_location) - free_location = get_turf(user) - - partner.forceMove(arrival_pod) - partner.ckey = key - - /// We give a reference to the mind that'll be the support unit - partner_mind = partner.mind - partner_mind.make_contractor_support() - - to_chat(partner_mind.current, "\n[span_alertwarning("[user.real_name] is your superior. Follow any, and all orders given by them. You're here to support their mission only.")]") - to_chat(partner_mind.current, "[span_alertwarning("Should they perish, or be otherwise unavailable, you're to assist other active agents in this mission area to the best of your ability.")]\n\n") - - new /obj/effect/pod_landingzone(free_location, arrival_pod) - -/datum/contractor_item/blackout - name = "Blackout" - desc = "Request Syndicate Command to distrupt the station's powernet. Disables power across the station for a short duration." - item_icon = "bolt" - limited = 2 - cost = 2 - -/datum/contractor_item/blackout/handle_purchase(datum/contractor_hub/hub) - . = ..() - - if(!.) - return - power_fail(35, 50) - priority_announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", ANNOUNCER_POWEROFF) - -/datum/contractor_item/comms_blackout - name = "Comms Outage" - desc = "Request Syndicate Command to disable station Telecommunications. Disables telecommunications across the station for a medium duration." - item_icon = "phone-slash" - limited = 2 - cost = 2 - -/datum/contractor_item/comms_blackout/handle_purchase(datum/contractor_hub/hub) - . = ..() - - if(!.) - return - var/datum/round_event_control/event = locate(/datum/round_event_control/communications_blackout) in SSevents.control - event.run_event() - -/datum/contractor_item/mod_baton_holster - name = "Baton Holster Module" - desc = "Never worry about dropping your baton again with this holster module! Simply insert your baton into the module, put it in your MODsuit, and the baton will retract whenever dropped." - item = /obj/item/mod/module/baton_holster - item_icon = "wrench" //I cannot find anything better, replace if you find something more fitting - limited = 1 - cost = 2 - -/datum/contractor_item/baton_upgrade_cuff - name = "Baton Cuff Upgrade" - desc = "Using technology reverse-engineered from some alien batons we had lying around, you can now cuff people using your baton with the secondary attack. Due to technical limitations, only cable cuffs and zipties work, and they need to be loaded into the baton manually." - item = /obj/item/baton_upgrade/cuff - item_icon = "bacon" //ditto - limited = 1 - cost = 1 - -/datum/contractor_item/baton_upgrade_mute - name = "Baton Mute Upgrade" - desc = "A relatively new advancement in completely proprietary baton technology, this baton upgrade will mute anyone hit for ten seconds, maximizing at twenty seconds." - item = /obj/item/baton_upgrade/mute - item_icon = "comment-slash" - limited = 1 - cost = 2 - -/datum/contractor_item/baton_upgrade_focus - name = "Baton Focus Upgrade" - desc = "When applied to a baton, it will exhaust the target even more, should they be the target of your current contract." - item = /obj/item/baton_upgrade/focus - item_icon = "eye" - limited = 1 - cost = 2 - -/datum/contractor_item/mod_magnetic_suit - name = "Magnetic Deployment Module" - desc = "A module that utilizes magnets to largely reduce the time needed to deploy and retract your MODsuit." - item = /obj/item/mod/module/springlock/contractor - item_icon = "magnet" - limited = 1 - cost = 2 - -/datum/contractor_item/mod_scorpion_hook - name = "SCORPION Hook Module" - desc = "A module that allows you to launch a hardlight hook from your MODsuit, pulling a target into range of your baton." - item = /obj/item/mod/module/scorpion_hook - item_icon = "arrow-left" //replace if fontawesome gets an actual hook icon - limited = 1 - cost = 3 diff --git a/modular_skyrat/modules/contractor/code/datums/contractor_tablet.dm b/modular_skyrat/modules/contractor/code/datums/contractor_tablet.dm deleted file mode 100644 index 02f5790d5e8be4..00000000000000 --- a/modular_skyrat/modules/contractor/code/datums/contractor_tablet.dm +++ /dev/null @@ -1,216 +0,0 @@ -/datum/computer_file/program/contract_uplink - filename = "contractor uplink" - filedesc = "Syndicate Contractor Uplink" - category = PROGRAM_CATEGORY_MISC - program_icon_state = "assign" - extended_desc = "A standard, Syndicate issued system for handling important contracts while on the field." - size = 10 - requires_ntnet = FALSE - available_on_ntnet = FALSE - undeletable = TRUE - tgui_id = "SyndContractor" - program_icon = "tasks" - /// Error message if there is one - var/error = "" - /// If the info screen is displayed or not - var/info_screen = TRUE - /// If the contract uplink's been assigned to a person yet - var/assigned = FALSE - /// If this is the first opening of the tablet - var/first_load = TRUE - -/datum/computer_file/program/contract_uplink/on_start(mob/living/user) - . = ..(user) - -/datum/computer_file/program/contract_uplink/ui_act(action, params) - . = ..() - if(.) - return - - var/mob/living/user = usr - var/obj/item/modular_computer/pda/contractor/uplink_computer = computer - - if(!istype(uplink_computer)) - return - - switch(action) - if("PRG_contract-accept") - var/contract_id = text2num(params["contract_id"]) - - // Set as the active contract - uplink_computer.opfor_data.contractor_hub.assigned_contracts[contract_id].status = CONTRACT_STATUS_ACTIVE - uplink_computer.opfor_data.contractor_hub.current_contract = uplink_computer.opfor_data.contractor_hub.assigned_contracts[contract_id] - - program_icon_state = "single_contract" - return TRUE - if("PRG_login") - if(!user.mind.opposing_force) - var/datum/opposing_force/opposing_force = new(user.mind) - user.mind.opposing_force = opposing_force - SSopposing_force.new_opfor(opposing_force) - var/datum/opposing_force/opfor_data = user.mind.opposing_force - - if (!opfor_data) // Just in case - return FALSE - // Only play greet sound, and handle contractor hub when assigning for the first time. - if (!opfor_data.contractor_hub) - user.playsound_local(user, 'sound/effects/contractstartup.ogg', 100, FALSE) - opfor_data.contractor_hub = new - opfor_data.contractor_hub.create_hub_items() - - // Stops any topic exploits such as logging in multiple times on a single system. - if (!assigned) - opfor_data.contractor_hub.create_contracts(opfor_data.mind_reference) - - uplink_computer.opfor_data = opfor_data - - program_icon_state = "contracts" - assigned = TRUE - return TRUE - if("PRG_call_extraction") - if (uplink_computer.opfor_data.contractor_hub.current_contract.status != CONTRACT_STATUS_EXTRACTING) - if (uplink_computer.opfor_data.contractor_hub.current_contract.handle_extraction(user)) - user.playsound_local(user, 'modular_skyrat/modules/contractor/sound/confirmdropoff.ogg', 100, TRUE) - uplink_computer.opfor_data.contractor_hub.current_contract.status = CONTRACT_STATUS_EXTRACTING - - program_icon_state = "extracted" - else - user.playsound_local(user, 'sound/machines/uplinkerror.ogg', 50) - error = "Either both you or your target aren't at the dropoff location, or the pod hasn't got a valid place to land. Clear space, or make sure you're both inside." - else - user.playsound_local(user, 'sound/machines/uplinkerror.ogg', 50) - error = "Already extracting... Place the target into the pod. If the pod was destroyed, this contract is no longer possible." - - return TRUE - if("PRG_contract_abort") - var/contract_id = uplink_computer.opfor_data.contractor_hub.current_contract.id - - uplink_computer.opfor_data.contractor_hub.current_contract = null - uplink_computer.opfor_data.contractor_hub.assigned_contracts[contract_id].status = CONTRACT_STATUS_ABORTED - - program_icon_state = "contracts" - - return TRUE - if("PRG_redeem_TC") - if (uplink_computer.opfor_data.contractor_hub.contract_TC_to_redeem) - var/obj/item/stack/telecrystal/crystals = new /obj/item/stack/telecrystal(get_turf(user), - uplink_computer.opfor_data.contractor_hub.contract_TC_to_redeem) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.put_in_hands(crystals)) - to_chat(H, span_notice("Your payment materializes into your hands!")) - else - to_chat(user, span_notice("Your payment materializes onto the floor.")) - - uplink_computer.opfor_data.contractor_hub.contract_paid_out += uplink_computer.opfor_data.contractor_hub.contract_TC_to_redeem - uplink_computer.opfor_data.contractor_hub.contract_TC_to_redeem = 0 - return TRUE - else - user.playsound_local(user, 'sound/machines/uplinkerror.ogg', 50) - return TRUE - if ("PRG_clear_error") - error = "" - return TRUE - if("PRG_set_first_load_finished") - first_load = FALSE - return TRUE - if("PRG_toggle_info") - info_screen = !info_screen - return TRUE - if ("buy_hub") - if (uplink_computer.opfor_data.mind_reference.current == user) - var/item = params["item"] - - for (var/datum/contractor_item/hub_item in uplink_computer.opfor_data.contractor_hub.hub_items) - if (hub_item.name == item) - hub_item.handle_purchase(uplink_computer.opfor_data.contractor_hub, user) - else - error = "Invalid user... You weren't recognised as the user of this system." - -/datum/computer_file/program/contract_uplink/ui_data(mob/user) - var/list/data = list() - var/screen_to_be = null - var/obj/item/modular_computer/pda/contractor/uplink_computer = computer - - data["first_load"] = first_load - - if (uplink_computer?.opfor_data) - var/datum/opposing_force/opfor_data = uplink_computer.opfor_data - data += list() - - if (opfor_data.contractor_hub.current_contract) - data["ongoing_contract"] = TRUE - screen_to_be = "single_contract" - if (opfor_data.contractor_hub.current_contract.status == CONTRACT_STATUS_EXTRACTING) - data["extraction_enroute"] = TRUE - screen_to_be = "extracted" - else - data["extraction_enroute"] = FALSE - else - data["ongoing_contract"] = FALSE - data["extraction_enroute"] = FALSE - - data["logged_in"] = TRUE - data["station_name"] = GLOB.station_name - data["redeemable_tc"] = opfor_data.contractor_hub.contract_TC_to_redeem - data["earned_tc"] = opfor_data.contractor_hub.contract_paid_out - data["contracts_completed"] = opfor_data.contractor_hub.contracts_completed - data["contract_rep"] = opfor_data.contractor_hub.contract_rep - - data["info_screen"] = info_screen - - data["error"] = error - - for (var/datum/contractor_item/hub_item in opfor_data.contractor_hub.hub_items) - data["contractor_hub_items"] += list(list( - "name" = hub_item.name, - "desc" = hub_item.desc, - "cost" = hub_item.cost, - "limited" = hub_item.limited, - "item_icon" = hub_item.item_icon - )) - - for (var/datum/syndicate_contract/contract in opfor_data.contractor_hub.assigned_contracts) - if(!contract.contract) - stack_trace("Syndiate contract with null contract objective found in [opfor_data.mind_reference]'s contractor hub!") - contract.status = CONTRACT_STATUS_ABORTED - continue - - data["contracts"] += list(list( - "target" = contract.contract.target, - "target_rank" = contract.target_rank, - "payout" = contract.contract.payout, - "payout_bonus" = contract.contract.payout_bonus, - "dropoff" = contract.contract.dropoff, - "id" = contract.id, - "status" = contract.status, - "message" = contract.wanted_message - )) - - var/direction - if (opfor_data.contractor_hub.current_contract) - var/turf/curr = get_turf(user) - var/turf/dropoff_turf - data["current_location"] = "[get_area_name(curr, TRUE)]" - - for (var/turf/content in opfor_data.contractor_hub.current_contract.contract.dropoff.contents) - if (isturf(content)) - dropoff_turf = content - break - - if(curr.z == dropoff_turf.z) //Direction calculations for same z-level only - direction = uppertext(dir2text(get_dir(curr, dropoff_turf))) //Direction text (East, etc). Not as precise, but still helpful. - if(get_area(user) == opfor_data.contractor_hub.current_contract.contract.dropoff) - direction = "LOCATION CONFIRMED" - else - direction = "???" - - data["dropoff_direction"] = direction - - else - data["logged_in"] = FALSE - - if(screen_to_be) - program_icon_state = screen_to_be - update_computer_icon() - return data diff --git a/modular_skyrat/modules/contractor/code/datums/midround/event.dm b/modular_skyrat/modules/contractor/code/datums/midround/event.dm deleted file mode 100644 index d90a2b90dff763..00000000000000 --- a/modular_skyrat/modules/contractor/code/datums/midround/event.dm +++ /dev/null @@ -1,40 +0,0 @@ -/datum/round_event_control/contractor - name = "Drifting Contractor" - typepath = /datum/round_event/ghost_role/contractor - weight = 8 - max_occurrences = 1 - category = EVENT_CATEGORY_INVASION - description = "A pre-equipped contractor floats towards the station to fulfill contracts." - -/datum/round_event/ghost_role/contractor - minimum_required = 1 - role_name = "Drifting Contractor" - fakeable = FALSE - -/datum/round_event/ghost_role/contractor/spawn_role() - var/list/candidates = get_candidates(ROLE_DRIFTING_CONTRACTOR) - if(!length(candidates)) - return NOT_ENOUGH_PLAYERS - - var/mob/dead/selected = pick_n_take(candidates) - - var/list/spawn_locs = list() - for(var/obj/effect/landmark/carpspawn/carp in GLOB.landmarks_list) - spawn_locs += carp.loc - if(!length(spawn_locs)) - return MAP_ERROR - - var/mob/living/carbon/human/operative = new(pick(spawn_locs)) - operative.dna.update_dna_identity() - var/datum/mind/mind = new /datum/mind(selected.key) - selected.client?.prefs?.apply_prefs_to(operative) - mind.set_assigned_role(SSjob.GetJobType(/datum/job/drifting_contractor)) - mind.special_role = ROLE_DRIFTING_CONTRACTOR - mind.active = TRUE - mind.transfer_to(operative) - mind.add_antag_datum(/datum/antagonist/contractor) - - message_admins("[ADMIN_LOOKUPFLW(operative)] has been made into [src] by an event.") - log_game("[key_name(operative)] was spawned as a [src] by an event.") - spawned_mobs += operative - return SUCCESSFUL_SPAWN diff --git a/modular_skyrat/modules/contractor/code/datums/midround/outfit.dm b/modular_skyrat/modules/contractor/code/datums/midround/outfit.dm deleted file mode 100644 index c2886de801d7da..00000000000000 --- a/modular_skyrat/modules/contractor/code/datums/midround/outfit.dm +++ /dev/null @@ -1,39 +0,0 @@ -/datum/outfit/contractor - name = "Syndicate Contractor - Full Kit" - - glasses = /obj/item/clothing/glasses/night - mask = /obj/item/clothing/mask/gas/syndicate - back = /obj/item/mod/control/pre_equipped/contractor/upgraded - r_pocket = /obj/item/tank/internals/emergency_oxygen/engi - internals_slot = ITEM_SLOT_RPOCKET - belt = /obj/item/storage/belt/military - - uniform = /obj/item/clothing/under/syndicate/coldres - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - ears = /obj/item/radio/headset/syndicate/alt - l_pocket = /obj/item/modular_computer/pda/contractor - id = /obj/item/card/id/advanced/chameleon - backpack_contents = list( - /obj/item/storage/box/survival/syndie, - /obj/item/storage/box/syndicate/contract_kit/midround, - /obj/item/knife/combat/survival, - /obj/item/pinpointer/crew/contractor, - ) - - implants = list( - /obj/item/implant/uplink, - ) - - id_trim = /datum/id_trim/chameleon/contractor - -/datum/outfit/contractor_preview - name = "Syndicate Contractor (Preview only)" - - back = /obj/item/mod/control/pre_equipped/empty/contractor - uniform = /obj/item/clothing/under/syndicate - glasses = /obj/item/clothing/glasses/night - -/datum/outfit/contractor/upgraded - name = "Syndicate Contractor (Upgraded)" - back = /obj/item/mod/control/pre_equipped/contractor/upgraded/adminbus diff --git a/modular_skyrat/modules/contractor/code/datums/midround/trim.dm b/modular_skyrat/modules/contractor/code/datums/midround/trim.dm deleted file mode 100644 index 8fbf98912e2fa4..00000000000000 --- a/modular_skyrat/modules/contractor/code/datums/midround/trim.dm +++ /dev/null @@ -1,7 +0,0 @@ -/// Trim for Chameleon ID cards. Many outfits, nuke ops and some corpses hold Chameleon ID cards. -/datum/id_trim/chameleon/contractor - assignment = "Syndicate Contractor" - trim_state = "trim_contractor" - trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - department_color = COLOR_ORANGE - subdepartment_color = COLOR_ORANGE diff --git a/modular_skyrat/modules/contractor/code/datums/mind_datum.dm b/modular_skyrat/modules/contractor/code/datums/mind_datum.dm deleted file mode 100644 index 91cb9a5ac69b0c..00000000000000 --- a/modular_skyrat/modules/contractor/code/datums/mind_datum.dm +++ /dev/null @@ -1,4 +0,0 @@ -/datum/mind/proc/make_contractor_support() - if(has_antag_datum(/datum/antagonist/traitor/contractor_support)) - return - add_antag_datum(/datum/antagonist/traitor/contractor_support) diff --git a/modular_skyrat/modules/contractor/code/items/boxes.dm b/modular_skyrat/modules/contractor/code/items/boxes.dm deleted file mode 100644 index 99bfa6600fba92..00000000000000 --- a/modular_skyrat/modules/contractor/code/items/boxes.dm +++ /dev/null @@ -1,114 +0,0 @@ -#define SMALL_ITEM_AMOUNT 3 - -/obj/item/storage/box/syndicate/contract_kit - name = "contract kit" - special_desc = "Supplied to Syndicate contractors." - special_desc_requirement = EXAMINE_CHECK_CONTRACTOR - icon_state = "syndiebox" - illustration = "writing_syndie" - var/list/item_list = list( - /obj/item/storage/backpack/duffelbag/syndie/x4, - /obj/item/storage/box/syndie_kit/throwing_weapons, - /obj/item/gun/syringe/syndicate, - /obj/item/pen/edagger, - /obj/item/pen/sleepy, - /obj/item/flashlight/emp, - /obj/item/reagent_containers/syringe/mulligan, - /obj/item/clothing/shoes/chameleon/noslip, - /obj/item/storage/medkit/tactical, - /obj/item/encryptionkey/syndicate, - /obj/item/clothing/glasses/thermal/syndi, - /obj/item/slimepotion/slime/sentience/nuclear, - /obj/item/storage/box/syndie_kit/imp_radio, - /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot, - /obj/item/reagent_containers/hypospray/medipen/stimulants, - /obj/item/storage/box/syndie_kit/imp_freedom, - /obj/item/crowbar/power/syndicate, - /obj/item/clothing/gloves/tackler/combat/insulated, - /obj/item/storage/box/syndie_kit/emp, - /obj/item/radio/headset/chameleon/advanced, - /obj/item/shield/energy, - /obj/item/healthanalyzer/rad_laser - ) - -/obj/item/storage/box/syndicate/contract_kit/PopulateContents() - new /obj/item/modular_computer/pda/contractor(src) - new /obj/item/storage/box/syndicate/contractor_loadout(src) - new /obj/item/melee/baton/telescopic/contractor_baton(src) - - // All about 4 TC or less - some nukeops only items, but fit nicely to the theme. - for(var/iteration in 1 to SMALL_ITEM_AMOUNT) - var/obj/item/small_item = pick_n_take(item_list) - new small_item(src) - - // Paper guide - new /obj/item/paper/contractor_guide(src) - -/obj/item/storage/box/syndicate/contractor_loadout - name = "standard loadout" - special_desc_requirement = EXAMINE_CHECK_CONTRACTOR - special_desc = "Supplied to Syndicate contractors, providing their specialised MODSuit and chameleon uniform." - icon_state = "syndiebox" - illustration = "writing_syndie" - -/obj/item/storage/box/syndicate/contractor_loadout/PopulateContents() - new /obj/item/mod/control/pre_equipped/contractor(src) - new /obj/item/clothing/under/chameleon(src) - new /obj/item/clothing/mask/chameleon(src) - new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src) - new /obj/item/card/id/advanced/chameleon(src) - new /obj/item/lighter(src) - new /obj/item/uplink/old_radio(src) - new /obj/item/jammer(src) - -/obj/item/storage/box/contractor/fulton_extraction - name = "fulton extraction kit" - icon_state = "syndiebox" - illustration = "writing_syndie" - -/obj/item/storage/box/contractor/fulton_extraction/PopulateContents() - new /obj/item/extraction_pack/contractor(src) - new /obj/item/fulton_core(src) - -/obj/item/storage/box/syndicate/contract_kit/midround - name = "contract kit" - special_desc = "Supplied to Syndicate contractors." - special_desc_requirement = EXAMINE_CHECK_CONTRACTOR - icon_state = "syndiebox" - illustration = "writing_syndie" - item_list = list( - /obj/item/storage/backpack/duffelbag/syndie/x4, - /obj/item/storage/box/syndie_kit/throwing_weapons, - /obj/item/gun/syringe/syndicate, - /obj/item/pen/edagger, - /obj/item/pen/sleepy, - /obj/item/flashlight/emp, - /obj/item/reagent_containers/syringe/mulligan, - /obj/item/storage/medkit/tactical, - /obj/item/clothing/glasses/thermal/syndi, - /obj/item/slimepotion/slime/sentience/nuclear, - /obj/item/storage/box/syndie_kit/imp_radio, - /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot, - /obj/item/reagent_containers/hypospray/medipen/stimulants, - /obj/item/storage/box/syndie_kit/imp_freedom, - /obj/item/crowbar/power/syndicate, - /obj/item/clothing/gloves/tackler/combat/insulated, - /obj/item/storage/box/syndie_kit/emp, - /obj/item/shield/energy, - /obj/item/healthanalyzer/rad_laser - ) - -/obj/item/storage/box/syndicate/contract_kit/midround/PopulateContents() - // All about 4 TC or less - some nukeops only items, but fit nicely to the theme. - for(var/iteration in 1 to SMALL_ITEM_AMOUNT) - var/obj/item/small_item = pick_n_take(item_list) - new small_item(src) - - // Paper guide - new /obj/item/paper/contractor_guide/midround(src) - new /obj/item/reagent_containers/hypospray/medipen/atropine(src) - new /obj/item/jammer(src) - new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src) - new /obj/item/lighter(src) - -#undef SMALL_ITEM_AMOUNT diff --git a/modular_skyrat/modules/contractor/code/items/misc.dm b/modular_skyrat/modules/contractor/code/items/misc.dm deleted file mode 100644 index abadf28d29173f..00000000000000 --- a/modular_skyrat/modules/contractor/code/items/misc.dm +++ /dev/null @@ -1,111 +0,0 @@ -/obj/item/paper/contractor_guide - name = "Contractor Guide" - -/obj/item/paper/contractor_guide/Initialize(mapload) - default_raw_text = {"<p>Welcome agent, congratulations on your new position as contractor. On top of your already assigned objectives, - this kit will provide you contracts to take on for TC payments.</p> - - <p>You likely already have your Contractor MODSuit equipped. It has a built in chameleon module, which only works when the MODSuit is undeployed, - but is highly useful for on-station infiltrations. We also provide your chameleon jumpsuit and mask, both of which can be changed - to any form you need for the moment. The cigarettes are a special blend - it'll heal your injuries slowly overtime.</p> - - <p>Your standard issue contractor baton hits harder than the ones you might be used to, and likely be your go to weapon for kidnapping your - targets. The three additional items have been randomly selected from what we had available. We hope they're useful to you for your mission.</p> - - <p>The contractor hub, available at the top right of the uplink, will provide you unique items and abilities. These are bought using Contractor Rep, - with two Rep being provided each time you complete a contract.</p> - - <h3>Using the tablet</h3> - <ol> - <li>Open the Syndicate Contract Uplink program.</li> - <li>Here, you can accept a contract, and redeem your TC payments from completed contracts.</li> - <li>The payment number shown in brackets is the bonus you'll receive when bringing your target <b>alive</b>. You receive the - other number regardless of if they were alive or dead.</li> - <li>Contracts are completed by bringing the target to designated dropoff, calling for extraction, and putting them - inside the pod.</li> - </ol> - - <p>Be careful when accepting a contract. While you'll be able to see the location of the dropoff point, cancelling will make it - unavailable to take on again.</p> - <p>The tablet can also be recharged at any cell charger.</p> - <h3>Extracting</h3> - <ol> - <li>Make sure both yourself and your target are at the dropoff.</li> - <li>Call the extraction, and stand back from the drop point.</li> - <li>If it fails, make sure your target is inside, and there's a free space for the pod to land.</li> - <li>Grab your target, and drag them into the pod.</li> - </ol> - <h3>Ransoms</h3> - <p>We need your target for our own reasons, but we ransom them back to your mission area once their use is served. They will return back - from where you sent them off from in several minutes time. Don't worry, we give you a cut of what we get paid. We pay this into whatever - ID card you have equipped, on top of the TC payment we give.</p> - - <p>Good luck agent. You can burn this document with the supplied lighter.</p>"} - - return ..() - -/obj/item/pinpointer/crew/contractor - name = "contractor pinpointer" - desc = "A handheld tracking device that locks onto certain signals. Ignores suit sensors, but is much less accurate." - icon_state = "pinpointer_syndicate" - worn_icon_state = "pinpointer_black" - minimum_range = 15 - has_owner = TRUE - ignore_suit_sensor_level = TRUE - -/obj/item/extraction_pack/contractor - name = "black fulton extraction pack" - icon = 'modular_skyrat/modules/contractor/icons/fulton.dmi' - can_use_indoors = TRUE - special_desc_requirement = EXAMINE_CHECK_CONTRACTOR - special_desc = "A modified fulton pack that can be used indoors thanks to Bluespace technology. Favored by Syndicate Contractors." - - -/obj/item/paper/contractor_guide/midround - name = "Contractor Guide" - -/obj/item/paper/contractor_guide/midround/Initialize(mapload) - default_raw_text = {"<p>Welcome agent, congratulations on successfully getting in range of the station.</p> - - <p>You likely already have your Contractor MODSuit equipped. It has a built in chameleon module, which only works when the MODSuit is undeployed, - but is highly useful for on-station infiltrations. We also provide your chameleon jumpsuit and mask, both of which can be changed - to any form you need for the moment. The cigarettes are a special blend - it'll heal your injuries slowly overtime.</p> - - <p>Your standard issue contractor baton can be found in the baton holster MODSuit module, it hits harder than the ones you might be used to, - and will likely be your go to weapon for kidnapping your targets.The three additional items have been randomly selected from what we had available. - We hope they're useful to you for your mission.</p> - - <p>The contractor hub, available at the top right of the uplink, will provide you unique items and abilities. These are bought using Contractor Rep, - with two Rep being provided each time you complete a contract.</p> - - <p>You've also been provided with a medipen of atropine, to prevent your implanted microbomb going off if it would be more tactically sound for your - body to stay intact. If circumstances change, you are still able to detonate your microbomb post-mortem.</p> - - <h3>Using the tablet</h3> - <ol> - <li>Open the Syndicate Contract Uplink program.</li> - <li>Here, you can accept a contract, and redeem your TC payments from completed contracts.</li> - <li>The payment number shown in brackets is the bonus you'll receive when bringing your target <b>alive</b>. You receive the - other number regardless of if they were alive or dead.</li> - <li>Contracts are completed by bringing the target to designated dropoff, calling for extraction, and putting them - inside the pod.</li> - </ol> - - <p>Be careful when accepting a contract. While you'll be able to see the location of the dropoff point, cancelling will make it - unavailable to take on again.</p> - <p>The tablet can also be recharged at any cell charger.</p> - <h3>Extracting</h3> - <ol> - <li>Make sure both yourself and your target are at the dropoff.</li> - <li>Call the extraction, and stand back from the drop point.</li> - <li>If it fails, make sure your target is inside, and there's a free space for the pod to land.</li> - <li>Grab your target, and drag them into the pod.</li> - </ol> - <h3>Ransoms</h3> - <p>We need your target for our own reasons, but we ransom them back to your mission area once their use is served. They will return back - from where you sent them off from in several minutes time. Don't worry, we give you a cut of what we get paid. We pay this into whatever - ID card you have equipped, on top of the TC payment we give.</p> - - <p>Good luck agent. You can burn this document with the supplied lighter.</p>"} - - return ..() diff --git a/modular_skyrat/modules/cortical_borer/code/status_effects.dm b/modular_skyrat/modules/cortical_borer/code/status_effects.dm deleted file mode 100644 index 8a6c70bda27a72..00000000000000 --- a/modular_skyrat/modules/cortical_borer/code/status_effects.dm +++ /dev/null @@ -1,11 +0,0 @@ -/datum/status_effect/borer_sugar - id = "borer_sugar" - tick_interval = -1 - status_type = STATUS_EFFECT_UNIQUE - alert_type = /atom/movable/screen/alert/status_effect/borer_sugar - -/atom/movable/screen/alert/status_effect/borer_sugar - name = "Sugar Dampening" - desc = "Your powers are diminished while sugar is in you or your host!" - icon = 'modular_skyrat/modules/cortical_borer/icons/actions.dmi' - icon_state = "borer_sugar" diff --git a/modular_skyrat/modules/cryosleep/code/admin.dm b/modular_skyrat/modules/cryosleep/code/admin.dm deleted file mode 100644 index 4b6ce389eee249..00000000000000 --- a/modular_skyrat/modules/cryosleep/code/admin.dm +++ /dev/null @@ -1,27 +0,0 @@ -/// Send player in not-quiet cryopod. If with_paper = TRUE, place a paper with notification under player. -/mob/proc/send_to_cryo(with_paper = FALSE) - //effect - playsound(loc, 'sound/magic/Repulse.ogg', 100, 1) - var/datum/effect_system/spark_spread/quantum/sparks = new - sparks.set_up(10, 1, loc) - sparks.attach(loc) - sparks.start() - - //make a paper if need - if(with_paper) - var/obj/item/paper/cryo_paper = new /obj/item/paper(loc) - cryo_paper.name = "Notification - [name]" - cryo_paper.add_raw_text("Our sincerest apologies, [name][job ? ", [job]," : ""] had to be sent back in Cryogenic Storage for reasons that cannot be elaborated on at the moment.<br><br>Sincerely,<br><i>Nanotrasen Anti-Sudden Sleep Disorder Agency</i>") - cryo_paper.update_appearance() - //find cryopod - for(var/obj/machinery/cryopod/cryo in GLOB.valid_cryopods) - if(!cryo.occupant && cryo.state_open && !cryo.panel_open) //free, opened, and panel closed? - if(buckled) - buckled.unbuckle_mob(src, TRUE) - if(buckled_mobs) - for(var/mob/buckled_mob in buckled_mobs) - unbuckle_mob(buckled_mob) - cryo.close_machine(src) //put player - break - - diff --git a/modular_skyrat/modules/curatorbundle/Mushy.dm b/modular_skyrat/modules/curatorbundle/Mushy.dm deleted file mode 100644 index 25c187675af0c8..00000000000000 --- a/modular_skyrat/modules/curatorbundle/Mushy.dm +++ /dev/null @@ -1,49 +0,0 @@ -/obj/item/clothing/head/mush_helmet - name = "mush cap" - desc = "A mushroom cap, this one also doubles as an umbrella!" - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/costume.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/costume.dmi' - icon_state = "mush_cap" - worn_icon_state = "mush_cap" - greyscale_config = /datum/greyscale_config/mushcap - greyscale_config_worn = /datum/greyscale_config/mushcap/worn - greyscale_colors = "#eb0c07" - flags_cover = HEADCOVERSEYES - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/suit/mush - name = "mushroom suit" - desc = "A mushroom suit, these can be sporadically seen being worn by the more fungal personalities." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - icon_state = "mush_male" - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - slowdown = 1 - clothing_flags = THICKMATERIAL - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - uses_advanced_reskins = TRUE - unique_reskin = list( - "Male Mush" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi', - RESKIN_ICON_STATE = "mush_male", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi', - RESKIN_WORN_ICON_STATE = "mush_male" - ), - "Female Mush" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi', - RESKIN_ICON_STATE = "mush_female", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi', - RESKIN_WORN_ICON_STATE = "mush_female" - ) - ) - - -/obj/item/storage/box/hero/mushperson - name = "Mushy The Mushperson - 2305" - desc = "Can you remember?" - -/obj/item/storage/box/hero/mushperson/PopulateContents() - new /obj/item/clothing/suit/mush(src) - new /obj/item/clothing/head/mush_helmet(src) - new /obj/item/mushpunch(src) diff --git a/modular_skyrat/modules/customization/__DEFINES/lists.dm b/modular_skyrat/modules/customization/__DEFINES/lists.dm deleted file mode 100644 index b0877b91b76093..00000000000000 --- a/modular_skyrat/modules/customization/__DEFINES/lists.dm +++ /dev/null @@ -1,19 +0,0 @@ -GLOBAL_LIST_EMPTY(sprite_accessories) -GLOBAL_LIST_EMPTY(generic_accessories) -GLOBAL_LIST_EMPTY(genetic_accessories) - -GLOBAL_LIST_EMPTY(body_markings) -GLOBAL_LIST_EMPTY_TYPED(body_markings_per_limb, /list) -GLOBAL_LIST_EMPTY(body_marking_sets) - -GLOBAL_LIST_EMPTY(loadout_items) -GLOBAL_LIST_EMPTY(loadout_category_to_subcategory_to_items) - -GLOBAL_LIST_EMPTY(augment_items) -GLOBAL_LIST_EMPTY(augment_categories_to_slots) -GLOBAL_LIST_EMPTY(augment_slot_to_items) - -GLOBAL_LIST_EMPTY(dna_mutant_bodypart_blocks) -GLOBAL_LIST_EMPTY(dna_body_marking_blocks) - -GLOBAL_LIST_EMPTY(species_clothing_fallback_cache) diff --git a/modular_skyrat/modules/customization/_globalvars/lists.dm b/modular_skyrat/modules/customization/_globalvars/lists.dm deleted file mode 100644 index 86586e3f4d71e5..00000000000000 --- a/modular_skyrat/modules/customization/_globalvars/lists.dm +++ /dev/null @@ -1,113 +0,0 @@ -//DO NOT CHANGE THOSE LISTS UNLESS YOU KNOW WHAT YOURE DOING (will mess savefiles) - - -GLOBAL_LIST_INIT(breast_size_translation, list( - "0" = BREAST_SIZE_FLATCHESTED, - "1" = BREAST_SIZE_A, - "2" = BREAST_SIZE_B, - "3" = BREAST_SIZE_C, - "4" = BREAST_SIZE_D, - "5" = BREAST_SIZE_E, - "6" = BREAST_SIZE_F, - "7" = BREAST_SIZE_G, - "8" = BREAST_SIZE_H, - "9" = BREAST_SIZE_I, - "10" = BREAST_SIZE_J, - "11" = BREAST_SIZE_K, - "12" = BREAST_SIZE_L, - "13" = BREAST_SIZE_M, - "14" = BREAST_SIZE_N, - "15" = BREAST_SIZE_O, - "16" = BREAST_SIZE_P, - )) - -GLOBAL_LIST_INIT(breast_size_to_number, list( - BREAST_SIZE_FLATCHESTED = 0, - BREAST_SIZE_A = 1, - BREAST_SIZE_B = 2, - BREAST_SIZE_C = 3, - BREAST_SIZE_D = 4, - BREAST_SIZE_E = 5, - BREAST_SIZE_F = 6, - BREAST_SIZE_G = 7, - BREAST_SIZE_H = 8, - BREAST_SIZE_I = 9, - BREAST_SIZE_J = 10, - BREAST_SIZE_K = 11, - BREAST_SIZE_L = 12, - BREAST_SIZE_M = 13, - BREAST_SIZE_N = 14, - BREAST_SIZE_O = 15, - BREAST_SIZE_P = 16, - )) - -GLOBAL_LIST_INIT(balls_size_translation, list( - "0" = "Small", - "1" = "Average", - "2" = "Big", - "3" = "Enormous" - )) - -GLOBAL_LIST_INIT(marking_zone_to_bitflag, list( - BODY_ZONE_HEAD = HEAD, - BODY_ZONE_CHEST = CHEST, - BODY_ZONE_L_LEG = LEG_LEFT, - BODY_ZONE_R_LEG = LEG_RIGHT, - BODY_ZONE_L_ARM = ARM_LEFT, - BODY_ZONE_R_ARM = ARM_RIGHT, - BODY_ZONE_PRECISE_L_HAND = HAND_LEFT, - BODY_ZONE_PRECISE_R_HAND = HAND_RIGHT - )) - -GLOBAL_LIST_INIT(marking_zones, list( - BODY_ZONE_HEAD, - BODY_ZONE_CHEST, - BODY_ZONE_L_LEG, - BODY_ZONE_R_LEG, - BODY_ZONE_L_ARM, - BODY_ZONE_R_ARM, - BODY_ZONE_PRECISE_L_HAND, - BODY_ZONE_PRECISE_R_HAND, - )) - -GLOBAL_LIST_INIT(preference_balls_sizes, list( - "Small", - "Average", - "Big", - "Enormous", - )) - -GLOBAL_LIST_INIT(robotic_styles_list, list( - "None" = "None", - "Surplus" = 'icons/mob/augmentation/surplus_augments.dmi', - "Cyborg" = 'icons/mob/augmentation/augments.dmi', - "Engineering" = 'icons/mob/augmentation/augments_engineer.dmi', - "Mining" = 'icons/mob/augmentation/augments_mining.dmi', - "Security" = 'icons/mob/augmentation/augments_security.dmi', - "Morpheus Cyberkinetics" = 'modular_skyrat/master_files/icons/mob/augmentation/mcgipc.dmi', - "Bishop Cyberkinetics" = 'modular_skyrat/master_files/icons/mob/augmentation/bshipc.dmi', - "Bishop Cyberkinetics 2.0" = 'modular_skyrat/master_files/icons/mob/augmentation/bs2ipc.dmi', - "Hephaestus Industries" = 'modular_skyrat/master_files/icons/mob/augmentation/hsiipc.dmi', - "Hephaestus Industries 2.0" = 'modular_skyrat/master_files/icons/mob/augmentation/hi2ipc.dmi', - "Shellguard Munitions Standard Series" = 'modular_skyrat/master_files/icons/mob/augmentation/sgmipc.dmi', - "Ward-Takahashi Manufacturing" = 'modular_skyrat/master_files/icons/mob/augmentation/wtmipc.dmi', - "Xion Manufacturing Group" = 'modular_skyrat/master_files/icons/mob/augmentation/xmgipc.dmi', - "Xion Manufacturing Group 2.0" = 'modular_skyrat/master_files/icons/mob/augmentation/xm2ipc.dmi', - "Zeng-Hu Pharmaceuticals" = 'modular_skyrat/master_files/icons/mob/augmentation/zhpipc.dmi' - )) - -//ghoul colors -GLOBAL_LIST_INIT(color_list_ghoul, list( \ - "Necrotic Green" = "bfc474", \ - "Rotting Tan" = "c4af7c", \ - "Plutonium Blue" = "a5cfcc", \ - "Marked Red" = "f05b68" \ -)) - -//Bras -/// Stores all /datum/sprite_accessory/bra indexed by name. -GLOBAL_LIST_EMPTY(bra_list) -/// Stores only the bra names for male-compatible bras. -GLOBAL_LIST_EMPTY(bra_m) -/// Stores only the bra names for female-compatible bras. -GLOBAL_LIST_EMPTY(bra_f) diff --git a/modular_skyrat/modules/customization/_globalvars/names.dm b/modular_skyrat/modules/customization/_globalvars/names.dm deleted file mode 100644 index 7f60f73606a9ba..00000000000000 --- a/modular_skyrat/modules/customization/_globalvars/names.dm +++ /dev/null @@ -1,8 +0,0 @@ -GLOBAL_LIST_INIT(first_names_male_vulp, world.file2list("modular_skyrat/modules/customization/strings/names/first_male_vulp.txt")) -GLOBAL_LIST_INIT(first_names_female_vulp, world.file2list("modular_skyrat/modules/customization/strings/names/first_female_vulp.txt")) -GLOBAL_LIST_INIT(last_names_vulp, world.file2list("modular_skyrat/modules/customization/strings/names/last_vulp.txt")) -GLOBAL_LIST_INIT(first_names_male_taj, world.file2list("modular_skyrat/modules/customization/strings/names/first_male_taj.txt")) -GLOBAL_LIST_INIT(first_names_female_taj, world.file2list("modular_skyrat/modules/customization/strings/names/first_female_taj.txt")) -GLOBAL_LIST_INIT(last_names_taj, world.file2list("modular_skyrat/modules/customization/strings/names/last_taj.txt")) -GLOBAL_LIST_INIT(callsigns_nri, world.file2list("modular_skyrat/modules/customization/strings/names/callsigns_nri.txt")) -GLOBAL_LIST_INIT(phonetic_alphabet_numbers, world.file2list("modular_skyrat/modules/customization/strings/names/phonetic_alphabet_numbers.txt")) diff --git a/modular_skyrat/modules/customization/game/objects/items/conversion_kits.dm b/modular_skyrat/modules/customization/game/objects/items/conversion_kits.dm deleted file mode 100644 index ca791924b2a652..00000000000000 --- a/modular_skyrat/modules/customization/game/objects/items/conversion_kits.dm +++ /dev/null @@ -1,29 +0,0 @@ -/obj/item/device/custom_kit - name = "modification kit" - desc = "A box of parts for modifying a certain object." - icon = 'modular_skyrat/master_files/icons/donator/obj/kits.dmi' - icon_state = "partskit" - /// The base object to be converted. - var/obj/item/from_obj - /// The object to turn it into. - var/obj/item/to_obj - -/obj/item/device/custom_kit/afterattack(obj/target_obj, mob/user, proximity_flag) - if(!proximity_flag) //Gotta be adjacent to your target - return - if(isturf(target_obj)) //This shouldn't be needed, but apparently it throws runtimes otherwise. - return - else if(target_obj.type == from_obj) //Checks whether the item is eligible to be converted - if(!pre_convert_check(target_obj, user)) - return FALSE - var/obj/item/converted_item = new to_obj(get_turf(src)) - user.put_in_hands(converted_item) - user.visible_message(span_notice("[user] modifies [target_obj] into [converted_item]."), span_notice("You modify [target_obj] into [converted_item].")) - qdel(target_obj) - qdel(src) - else - to_chat(user, span_warning("It looks like this kit won't work on [target_obj]...")) - -/// Override this if you have some condition you want fulfilled before allowing the conversion. Return TRUE to allow it to convert, return FALSE to prevent it. -/obj/item/device/custom_kit/proc/pre_convert_check(obj/target_obj, mob/user) - return TRUE diff --git a/modular_skyrat/modules/customization/game/objects/items/devices/crutch.dm b/modular_skyrat/modules/customization/game/objects/items/devices/crutch.dm deleted file mode 100644 index 77bae224399dd7..00000000000000 --- a/modular_skyrat/modules/customization/game/objects/items/devices/crutch.dm +++ /dev/null @@ -1,12 +0,0 @@ -/obj/item/cane/crutch - name = "crutch" - desc = "A crutch usually employed by those recovering from a leg injury." - icon = 'modular_skyrat/master_files/icons/obj/staff.dmi' - icon_state = "crutch" - inhand_icon_state = "crutch" - lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/melee_lefthand.dmi' - righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/melee_righthand.dmi' - custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 6) - attack_verb_continuous = list("bludgeons", "whacks", "thrashes") - attack_verb_simple = list("bludgeon", "whack", "thrash") - diff --git a/modular_skyrat/modules/customization/game/objects/items/storage/belt.dm b/modular_skyrat/modules/customization/game/objects/items/storage/belt.dm deleted file mode 100644 index 2f7719085feedc..00000000000000 --- a/modular_skyrat/modules/customization/game/objects/items/storage/belt.dm +++ /dev/null @@ -1,40 +0,0 @@ -/* -* Messenger belt bag -*/ - -/obj/item/storage/belt/mailbelt - name = "messenger belt bag" - desc = "A small bag with a belt, worn around the waist. It's just big enough to hold a small stack of letters. This one is postal blue, perfect for standing out!" - icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi' - icon_state = "mailbelt" - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi' - worn_icon_state = "mailbelt" - equip_sound = 'sound/items/equip/toolbelt_equip.ogg' - -/obj/item/storage/belt/mailbelt/Initialize(mapload) - . = ..() - atom_storage.max_slots = 14 - atom_storage.numerical_stacking = TRUE - atom_storage.set_holdable(list( - /obj/item/mail, - /obj/item/mail/envelope, - /obj/item/paper - )) - -/obj/item/storage/belt/mailbelt/white - name = "white belt bag" - desc = "A small bag with a belt, worn around the waist. It's just big enough to hold a small stack of letters. This one is a pearly white." - icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi' - icon_state = "mailbelt_white" - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi' - worn_icon_state = "mailbelt_white" - equip_sound = 'sound/items/equip/toolbelt_equip.ogg' - -/obj/item/storage/belt/mailbelt/leather - name = "leather belt bag" - desc = "A small bag with a belt, worn around the waist. It's just big enough to hold a small stack of letters. This one is made out of a synthetic leather blend." - icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi' - icon_state = "mailbelt_leather" - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi' - worn_icon_state = "mailbelt_leather" - equip_sound = 'sound/items/equip/toolbelt_equip.ogg' diff --git a/modular_skyrat/modules/customization/game/objects/items/storage/rings.dm b/modular_skyrat/modules/customization/game/objects/items/storage/rings.dm deleted file mode 100644 index 8b3ac988d1fe1d..00000000000000 --- a/modular_skyrat/modules/customization/game/objects/items/storage/rings.dm +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Ring Box - */ - -/obj/item/storage/fancy/ringbox - name = "ring box" - desc = "A tiny box covered in soft red felt made for holding rings." - icon = 'modular_skyrat/master_files/icons/obj/ring.dmi' - icon_state = "gold ringbox" - base_icon_state = "gold ringbox" - w_class = WEIGHT_CLASS_TINY - spawn_type = /obj/item/clothing/gloves/ring - spawn_count = 1 - -/obj/item/storage/fancy/ringbox/Initialize(mapload) - . = ..() - atom_storage.max_slots = 1 - atom_storage.can_hold = typecacheof(list(/obj/item/clothing/gloves/ring)) - -/obj/item/storage/fancy/ringbox/diamond - icon_state = "diamond ringbox" - base_icon_state = "diamond ringbox" - spawn_type = /obj/item/clothing/gloves/ring/diamond - -/obj/item/storage/fancy/ringbox/silver - icon_state = "silver ringbox" - base_icon_state = "silver ringbox" - spawn_type = /obj/item/clothing/gloves/ring/silver diff --git a/modular_skyrat/modules/customization/modules/client/augment/limbs.dm b/modular_skyrat/modules/customization/modules/client/augment/limbs.dm deleted file mode 100644 index 8ae5fed1f044d9..00000000000000 --- a/modular_skyrat/modules/customization/modules/client/augment/limbs.dm +++ /dev/null @@ -1,149 +0,0 @@ -/datum/augment_item/limb - category = AUGMENT_CATEGORY_LIMBS - allowed_biotypes = MOB_ORGANIC|MOB_ROBOTIC - ///Hardcoded styles that can be chosen from and apply to limb, if it's true - var/uses_robotic_styles = TRUE - -/datum/augment_item/limb/apply(mob/living/carbon/human/augmented, character_setup = FALSE, datum/preferences/prefs) - if(character_setup) - //Cheaply "faking" the appearance of the prosthetic. Species code sets this back if it doesnt exist anymore - var/obj/item/bodypart/new_limb = path - var/body_zone = initial(new_limb.body_zone) - var/obj/item/bodypart/old_limb = augmented.get_bodypart(body_zone) - - old_limb.limb_id = initial(new_limb.limb_id) - old_limb.base_limb_id = initial(new_limb.limb_id) - old_limb.is_dimorphic = initial(new_limb.is_dimorphic) - - if(uses_robotic_styles && prefs.augment_limb_styles[slot]) - var/chosen_style = GLOB.robotic_styles_list[prefs.augment_limb_styles[slot]] - old_limb.set_icon_static(chosen_style) - old_limb.current_style = prefs.augment_limb_styles[slot] - else - old_limb.set_icon_static(initial(new_limb.icon)) - old_limb.should_draw_greyscale = FALSE - - return body_zone - else - var/obj/item/bodypart/new_limb = new path(augmented) - var/obj/item/bodypart/old_limb = augmented.get_bodypart(new_limb.body_zone) - if(uses_robotic_styles && prefs.augment_limb_styles[slot]) - var/chosen_style = GLOB.robotic_styles_list[prefs.augment_limb_styles[slot]] - new_limb.set_icon_static(chosen_style) - new_limb.current_style = prefs.augment_limb_styles[slot] - for (var/obj/item/organ/external/external_organ as anything in old_limb.external_organs) - external_organ.transfer_to_limb(new_limb) - new_limb.replace_limb(augmented) - qdel(old_limb) - -//HEADS -/datum/augment_item/limb/head - slot = AUGMENT_SLOT_HEAD - -/datum/augment_item/limb/head/cyborg - name = "Cyborg head" - path = /obj/item/bodypart/head/robot/weak - -//CHESTS -/datum/augment_item/limb/chest - slot = AUGMENT_SLOT_CHEST - -/datum/augment_item/limb/chest/cyborg - name = "Cyborg chest" - path = /obj/item/bodypart/chest/robot/weak - -//LEFT ARMS -/datum/augment_item/limb/l_arm - slot = AUGMENT_SLOT_L_ARM - -/datum/augment_item/limb/l_arm/prosthetic - name = "Prosthetic left arm" - path = /obj/item/bodypart/arm/left/robot/surplus - cost = -1 - -/datum/augment_item/limb/l_arm/cyborg - name = "Cyborg left arm" - path = /obj/item/bodypart/arm/left/robot/weak - -/datum/augment_item/limb/l_arm/plasmaman - name = "Plasmaman left arm" - path = /obj/item/bodypart/arm/left/plasmaman - uses_robotic_styles = FALSE - -/datum/augment_item/limb/l_arm/self_destruct - name = "No Left Arm" - path = /obj/item/bodypart/arm/left/self_destruct - cost = -3 - uses_robotic_styles = FALSE - -//RIGHT ARMS -/datum/augment_item/limb/r_arm - slot = AUGMENT_SLOT_R_ARM - -/datum/augment_item/limb/r_arm/prosthetic - name = "Prosthetic right arm" - path = /obj/item/bodypart/arm/right/robot/surplus - cost = -1 - -/datum/augment_item/limb/r_arm/cyborg - name = "Cyborg right arm" - path = /obj/item/bodypart/arm/right/robot/weak - -/datum/augment_item/limb/r_arm/plasmaman - name = "Plasmaman right arm" - path = /obj/item/bodypart/arm/right/plasmaman - uses_robotic_styles = FALSE - -/datum/augment_item/limb/r_arm/self_destruct - name = "No Right Arm" - path = /obj/item/bodypart/arm/right/self_destruct - cost = -3 - uses_robotic_styles = FALSE - -//LEFT LEGS -/datum/augment_item/limb/l_leg - slot = AUGMENT_SLOT_L_LEG - -/datum/augment_item/limb/l_leg/prosthetic - name = "Prosthetic left leg" - path = /obj/item/bodypart/leg/left/robot/surplus - cost = -1 - -/datum/augment_item/limb/l_leg/cyborg - name = "Cyborg left leg" - path = /obj/item/bodypart/leg/left/robot/weak - -/datum/augment_item/limb/l_leg/plasmaman - name = "Plasmaman left leg" - path = /obj/item/bodypart/leg/left/plasmaman - uses_robotic_styles = FALSE - -/datum/augment_item/limb/l_leg/self_destruct - name = "No Left Leg" - path = /obj/item/bodypart/leg/left/self_destruct - cost = -3 - uses_robotic_styles = FALSE - -//RIGHT LEGS -/datum/augment_item/limb/r_leg - slot = AUGMENT_SLOT_R_LEG - -/datum/augment_item/limb/r_leg/prosthetic - name = "Prosthetic right leg" - path = /obj/item/bodypart/leg/right/robot/surplus - cost = -1 - -/datum/augment_item/limb/r_leg/cyborg - name = "Cyborg right leg" - path = /obj/item/bodypart/leg/right/robot/weak - -/datum/augment_item/limb/r_leg/plasmaman - name = "Plasmaman right leg" - path = /obj/item/bodypart/leg/right/plasmaman - uses_robotic_styles = FALSE - -/datum/augment_item/limb/r_leg/self_destruct - name = "No Right Leg" - path = /obj/item/bodypart/leg/right/self_destruct - cost = -3 - uses_robotic_styles = FALSE diff --git a/modular_skyrat/modules/customization/modules/clothing/accessories.dm b/modular_skyrat/modules/customization/modules/clothing/accessories.dm deleted file mode 100644 index 53223af7956f52..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/accessories.dm +++ /dev/null @@ -1,8 +0,0 @@ -/obj/item/clothing/accessory/skullcodpiece/armourless - armor_type = /datum/armor/none - -/obj/item/clothing/accessory/talisman/armourless - armor_type = /datum/armor/none - -/obj/item/clothing/accessory/skilt/armourless - armor_type = /datum/armor/none diff --git a/modular_skyrat/modules/customization/modules/clothing/ears/ears.dm b/modular_skyrat/modules/customization/modules/clothing/ears/ears.dm deleted file mode 100644 index e613c8136f1155..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/ears/ears.dm +++ /dev/null @@ -1,35 +0,0 @@ -/obj/item/clothing/ears/headphones - name = "headphones" - desc = "Unce unce unce unce. Boop!" - icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/ears.dmi' - icon_state = "headphones" - inhand_icon_state = "headphones" - slot_flags = ITEM_SLOT_EARS | ITEM_SLOT_HEAD | ITEM_SLOT_NECK //Fluff item, put it whereever you want! - actions_types = list(/datum/action/item_action/toggle_headphones) - var/headphones_on = FALSE - custom_price = 60 - -/obj/item/clothing/ears/headphones/Initialize(mapload) - . = ..() - update_icon() - AddElement(/datum/element/update_icon_updates_onmob) - -/obj/item/clothing/ears/headphones/update_icon_state() - . = ..() - icon_state = "[initial(icon_state)]_[headphones_on? "on" : "off"]" - inhand_icon_state = "[initial(inhand_icon_state)]_[headphones_on? "on" : "off"]" - -/obj/item/clothing/ears/headphones/proc/toggle(owner) - headphones_on = !headphones_on - update_icon() - to_chat(owner, span_notice("You turn the music [headphones_on? "on. Untz Untz Untz!" : "off."]")) - -/datum/action/item_action/toggle_headphones - name = "Toggle Headphones" - desc = "UNTZ UNTZ UNTZ" - -/datum/action/item_action/toggle_headphones/Trigger(trigger_flags) - var/obj/item/clothing/ears/headphones/H = target - if(istype(H)) - H.toggle(owner) diff --git a/modular_skyrat/modules/customization/modules/clothing/glasses/glasses.dm b/modular_skyrat/modules/customization/modules/clothing/glasses/glasses.dm deleted file mode 100644 index 2ece175a3da89e..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/glasses/glasses.dm +++ /dev/null @@ -1,86 +0,0 @@ -/obj/item/clothing/glasses //Code to let you switch the side your eyepatch is on! Woo! Just an explanation, this is added to the base glasses so it works on eyepatch-huds too - var/can_switch_eye = FALSE //Having this default to false means that its easy to make sure this doesnt apply to any pre-existing items - - -/obj/item/clothing/glasses/examine(mob/user) - . = ..() - if(can_switch_eye) - . += "Use in hands to wear it over your [icon_state == base_icon_state ? "left" : "right"] eye." - - -/* ---------- Items Below ----------*/ - -/obj/item/clothing/glasses/eyepatch //Re-defined here for ease with the left/right switch - icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi' - icon_state = "eyepatch" - base_icon_state = "eyepatch" - can_switch_eye = TRUE - -/obj/item/clothing/glasses/eyepatch/wrap - name = "eye wrap" - desc = "A glorified bandage. At least this one's actually made for your head..." - icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi' - icon_state = "eyewrap" - base_icon_state = "eyewrap" - -/obj/item/clothing/glasses/eyepatch/white - name = "white eyepatch" - desc = "This is what happens when a pirate gets a PhD." - icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi' - icon_state = "eyepatch_white" - base_icon_state = "eyepatch_white" - -///GLASSSES -/obj/item/clothing/glasses/thin - name = "thin glasses" - desc = "Often seen staring down at someone taking a book." - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi' - icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi' - icon_state = "glasses_thin" - inhand_icon_state = "glasses" - clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED) - -/obj/item/clothing/glasses/betterunshit - name = "modern glasses" - desc = "After Nerd. Co went bankrupt for tax evasion and invasion, they were bought out by Dork.Co, who revamped their classic design." - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi' - icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi' - icon_state = "glasses_alt" - inhand_icon_state = "glasses" - clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED) - -/obj/item/clothing/glasses/kim - name = "binoclard lenses" - desc = "Stylish round lenses subtly shaded for your protection and criminal discomfort." - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi' - icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi' - icon_state = "binoclard_lenses" - inhand_icon_state = "glasses" - clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED) - -/obj/item/clothing/glasses/trickblindfold/hamburg - name = "thief visor" - desc = "Perfect for stealing hamburgers from innocent multinational capitalist monopolies." - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi' - icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi' - icon_state = "thiefmask" - -///GOGGLES -/obj/item/clothing/glasses/biker - name = "biker goggles" - desc = "Brown leather riding gear, You can leave, just give us the gas." - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi' - icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi' - icon_state = "biker" - inhand_icon_state = "welding-g" - clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED) - -// Like sunglasses, but without any protection -/obj/item/clothing/glasses/fake_sunglasses - name = "low-UV sunglasses" - desc = "A cheaper brand of sunglasses rated for much lower UV levels. Offers the user no protection against bright lights." - icon_state = "sun" - inhand_icon_state = "sunglasses" diff --git a/modular_skyrat/modules/customization/modules/clothing/hands/hands.dm b/modular_skyrat/modules/customization/modules/clothing/hands/hands.dm deleted file mode 100644 index a4bedf30d685a6..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/hands/hands.dm +++ /dev/null @@ -1,58 +0,0 @@ -/obj/item/clothing/gloves/evening - icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi' - name = "evening gloves" - desc = "Thin, pretty gloves intended for use in regal feminine attire, but knowing Space China these are just for some maid fetish." - icon_state = "evening" - strip_delay = 40 - equip_delay_other = 20 - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT - -/obj/item/clothing/gloves/kim - icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi' - name = "aerostatic gloves" - desc = "Vivid red gloves that exude a mysterious style, sadly not the best for gardening, or getting bodies out of trees." - icon_state = "aerostatic_gloves" - -/obj/item/clothing/gloves/military - icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi' - name = "military gloves" - desc = "Tactical gloves made for military personnel, they are thin to allow easy operation of most firearms." - icon_state = "military_gloves" - siemens_coefficient = 0.4 - strip_delay = 60 - equip_delay_other = 60 - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - resistance_flags = NONE - -/obj/item/clothing/gloves/bracer/wraps - name = "cloth arm wraps" - desc = "Cloth bracers, the colour all left up to the choice of the wearer." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/gloves.dmi' - icon_state = "arm_wraps" - inhand_icon_state = "greyscale_gloves" - greyscale_config = /datum/greyscale_config/armwraps - greyscale_config_worn = /datum/greyscale_config/armwraps/worn - greyscale_colors = "#FFFFFF" - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/gloves - worn_icon_teshari = TESHARI_HANDS_ICON - -/obj/item/clothing/gloves/maid_arm_covers - name = "maid arm covers" - desc = "Maid in China." - icon_state = "maid_arm_covers" - greyscale_config = /datum/greyscale_config/maid_arm_covers - greyscale_config_worn = /datum/greyscale_config/maid_arm_covers/worn - greyscale_config_inhand_left = null - greyscale_config_inhand_right = null - greyscale_colors = "#7b9ab5#edf9ff" - flags_1 = IS_PLAYER_COLORABLE_1 - diff --git a/modular_skyrat/modules/customization/modules/clothing/hands/rings.dm b/modular_skyrat/modules/customization/modules/clothing/hands/rings.dm deleted file mode 100644 index 6112d67fc97816..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/hands/rings.dm +++ /dev/null @@ -1,33 +0,0 @@ -/obj/item/clothing/gloves/ring - icon = 'modular_skyrat/master_files/icons/obj/ring.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi' - name = "gold ring" - desc = "A tiny gold ring, sized to wrap around a finger." - gender = NEUTER - w_class = WEIGHT_CLASS_TINY - icon_state = "ringgold" - inhand_icon_state = null - worn_icon_state = "gring" - body_parts_covered = 0 - strip_delay = 4 SECONDS - clothing_traits = list(TRAIT_FINGERPRINT_PASSTHROUGH) - -/obj/item/clothing/gloves/ring/suicide_act(mob/living/carbon/user) - user.visible_message(span_suicide("\[user] is putting the [src] in [user.p_their()] mouth! It looks like [user] is trying to choke on the [src]!")) - return OXYLOSS - - -/obj/item/clothing/gloves/ring/diamond - name = "diamond ring" - desc = "An expensive ring, studded with a diamond. Cultures have used these rings in courtship for a millenia." - icon_state = "ringdiamond" - worn_icon_state = "dring" - -/obj/item/clothing/gloves/ring/diamond/attack_self(mob/user) - user.visible_message(span_warning("\The [user] gets down on one knee, presenting \the [src]."),span_warning("You get down on one knee, presenting \the [src].")) - -/obj/item/clothing/gloves/ring/silver - name = "silver ring" - desc = "A tiny silver ring, sized to wrap around a finger." - icon_state = "ringsilver" - worn_icon_state = "sring" diff --git a/modular_skyrat/modules/customization/modules/clothing/head/costume.dm b/modular_skyrat/modules/customization/modules/clothing/head/costume.dm deleted file mode 100644 index 0a325fddc388bd..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/head/costume.dm +++ /dev/null @@ -1,118 +0,0 @@ -/obj/item/clothing/head/costume/skyrat - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/costume.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/costume.dmi' - supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON - dog_fashion = null - -/obj/item/clothing/head/costume/skyrat/maid - name = "maid headband" - desc = "Maid in China." - icon_state = "maid" - -/obj/item/clothing/head/costume/skyrat/papakha - name = "papakha" - desc = "A big wooly clump of fur designed to go on your head." - icon_state = "papakha" - cold_protection = HEAD - min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT - -/obj/item/clothing/head/costume/skyrat/papakha/white - icon_state = "papakha_white" - -/obj/item/clothing/head/costume/skyrat/flowerpin - name = "flower pin" - desc = "A small, colourable flower pin" - icon_state = "flowerpin" - greyscale_config = /datum/greyscale_config/flowerpin - greyscale_config_worn = /datum/greyscale_config/flowerpin/worn - greyscale_colors = "#FF0000" - flags_1 = IS_PLAYER_COLORABLE_1 - w_class = WEIGHT_CLASS_SMALL - -/obj/item/clothing/head/costume/skyrat/christmas - name = "christmas hat" - desc = "How festive!" - icon_state = "christmas" - -/obj/item/clothing/head/costume/skyrat/christmas/green - icon_state = "christmas_g" - -/obj/item/clothing/head/costume/skyrat/en //One of the two parts of E-N's butchering - name = "E-N suit head" - icon_state = "enhead" - supports_variations_flags = NONE - -//Ushankas -//These have to be subtypes of TG's ushanka to inherit the toggleability -/obj/item/clothing/head/costume/ushanka/sec - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/costume.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/costume.dmi' - name = "security ushanka" - desc = "A warm and comfortable ushanka, dyed with 'all natural flavors' according to the tag." - icon_state = "ushankablue" - inhand_icon_state = "rus_ushanka" - upsprite = "ushankablueup" - downsprite = "ushankablue" - armor_type = /datum/armor/head_helmet - -//Pelts -//Not made into a subtype of /costume but stored in the same file -/obj/item/clothing/head/pelt - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/costume.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/costume.dmi' - name = "bear pelt" - desc = "A luxurious bear pelt, good to keep warm in winter. Or to sleep through it." - icon_state = "bearpelt_brown" - inhand_icon_state = "cowboy_hat_brown" - cold_protection = CHEST|HEAD - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - -/obj/item/clothing/head/pelt/black - icon_state = "bearpelt_black" - inhand_icon_state = "cowboy_hat_black" - -/obj/item/clothing/head/pelt/white - icon_state = "bearpelt_white" - inhand_icon_state = "cowboy_hat_white" - -/obj/item/clothing/head/pelt/tiger - name = "shiny tiger pelt" - desc = "A vibrant tiger pelt, particularly fabulous." - icon_state = "tigerpelt_shiny" - inhand_icon_state = "cowboy_hat_grey" - -/obj/item/clothing/head/pelt/snow_tiger - name = "snow tiger pelt" - desc = "A pelt of a less vibrant tiger, but rather warm." - icon_state = "tigerpelt_snow" - inhand_icon_state = "cowboy_hat_white" - -/obj/item/clothing/head/pelt/pink_tiger - name = "pink tiger pelt" - desc = "A particularly vibrant tiger pelt, for those who want to be the most fabulous at parties." - icon_state = "tigerpelt_pink" - inhand_icon_state = "cowboy_hat_red" - -/obj/item/clothing/head/pelt/wolf - name = "wolf pelt" - desc = "A fuzzy wolf pelt that demands respect as a hunter... assuming it wasn't just purchased, that is, for all the glory but none of the credit." - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/pelt_big.dmi' - icon_state = "wolfpelt_brown" - -/obj/item/clothing/head/pelt/wolf/black - icon_state = "wolfpelt_gray" - inhand_icon_state = "cowboy_hat_grey" - -/obj/item/clothing/head/pelt/wolf/white - icon_state = "wolfpelt_white" - inhand_icon_state = "cowboy_hat_white" -//End Pelts - -/obj/item/clothing/head/maid_headband - name = "maid headband" - desc = "Just like from one of those Chinese cartoons!" - icon_state = "maid_headband" - greyscale_config = /datum/greyscale_config/maid_headband - greyscale_config_worn = /datum/greyscale_config/maid_headband/worn - greyscale_colors = "#edf9ff" - flags_1 = IS_PLAYER_COLORABLE_1 diff --git a/modular_skyrat/modules/customization/modules/clothing/head/head.dm b/modular_skyrat/modules/customization/modules/clothing/head/head.dm deleted file mode 100644 index d05828cd095d14..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/head/head.dm +++ /dev/null @@ -1,248 +0,0 @@ -/obj/item/clothing/head/hats/flakhelm //Actually the M1 Helmet - icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' - name = "flak helmet" - icon_state = "m1helm" - inhand_icon_state = "helmet" - armor_type = /datum/armor/hats_flakhelm - desc = "A dilapidated helmet used in ancient wars. This one is brittle and essentially useless. An ace of spades is tucked into the band around the outer shell." - supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON - -/datum/armor/hats_flakhelm - bomb = 0.1 - fire = -10 - acid = -15 - wound = 1 - -/obj/item/clothing/head/hats/flakhelm/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny/spacenam) - -/datum/storage/pockets/tiny/spacenam - attack_hand_interact = TRUE //So you can actually see what you stuff in there - -//Cyberpunk PI Costume - Sprites from Eris -/obj/item/clothing/head/fedora/det_hat/cybergoggles //Subset of detective fedora so that detectives dont have to sacrifice candycorns for style - name = "type-34C semi-enclosed headwear" - desc = "Civilian model of a popular helmet used by certain law enforcement agencies. It does not have any armor plating, but has a neo-laminated fiber lining." - icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' - icon_state = "cyberpunkgoggle" - supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON - -/obj/item/clothing/head/hats/intern/developer - name = "intern beancap" - -/obj/item/clothing/head/beret/sec/navywarden/syndicate - name = "master at arms' beret" - desc = "Surprisingly stylish, if you lived in a silent impressionist film." - greyscale_config = /datum/greyscale_config/beret_badge - greyscale_config_worn = /datum/greyscale_config/beret_badge/worn - greyscale_colors = "#353535#AAAAAA" - icon_state = "beret_badge" - armor_type = /datum/armor/navywarden_syndicate - strip_delay = 60 - supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON - -/datum/armor/navywarden_syndicate - melee = 40 - bullet = 30 - laser = 30 - energy = 40 - bomb = 25 - fire = 30 - acid = 50 - wound = 6 - -/obj/item/clothing/head/colourable_flatcap - name = "colourable flat cap" - desc = "You in the computers son? You work the computers?" - icon_state = "flatcap" - greyscale_config = /datum/greyscale_config/flatcap - greyscale_config_worn = /datum/greyscale_config/flatcap/worn - greyscale_colors = "#79684c" - flags_1 = IS_PLAYER_COLORABLE_1 - supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON - -/obj/item/clothing/head/hats/imperial - name = "grey naval officer cap" - desc = "A grey naval cap with a silver disk in the center." - icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' - icon_state = "impcom" - supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON - -/obj/item/clothing/head/hats/imperial/grey - name = "dark grey naval officer cap" - desc = "A dark grey naval cap with a silver disk in the center." - icon_state = "impcommand" - -/obj/item/clothing/head/hats/imperial/red - name = "red naval officer cap" - desc = "A red naval cap with a silver disk in the center." - icon_state = "impcap_red" - -/obj/item/clothing/head/hats/imperial/white - name = "white naval officer cap" - desc = "A white naval cap with a silver disk in the center." - icon_state = "impcap" - -/obj/item/clothing/head/hats/imperial/cap - name = "captain's naval officer cap" - desc = "A white naval cap with a silver disk in the center." - icon_state = "impcap" - -/obj/item/clothing/head/hats/imperial/hop - name = "head of personnel's naval officer cap" - desc = "An olive naval cap with a silver disk in the center." - icon_state = "imphop" - -/obj/item/clothing/head/hats/imperial/hos - name = "head of security's naval officer cap" - desc = "A tar black naval cap with a silver disk in the center." - icon_state = "imphos" - armor_type = /datum/armor/hats_hos - -/obj/item/clothing/head/hats/imperial/cmo - name = "chief medical officer's naval cap" - desc = "A teal naval cap with a silver disk in the center." - icon_state = "impcmo" - -/obj/item/clothing/head/hats/imperial/ce - name = "chief engineer's blast helmet" - desc = "Despite seeming like it's made of metal, it's actually a very cheap plastic.." - armor_type = /datum/armor/imperial_ce - clothing_flags = STOPSPRESSUREDAMAGE - heat_protection = HEAD - max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT - cold_protection = HEAD - min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT - icon_state = "impce" - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - - -/datum/armor/imperial_ce - melee = 15 - bullet = 5 - laser = 20 - energy = 10 - bomb = 20 - bio = 10 - fire = 100 - acid = 50 - wound = 10 - -/obj/item/clothing/head/hats/imperial/helmet - name = "blast helmet" - desc = "A sharp helmet with some goggles on the top. Unfortunately, both those and the helmet itself are made of flimsy plastic." //No armor moment - icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' - icon_state = "blast_helmet" - supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON - -/obj/item/clothing/head/hats/imperial/helmet/Initialize(mapload) - . = ..() - AddComponent(/datum/component/toggle_icon, "goggles") - -/obj/item/clothing/head/soft/yankee - name = "fashionable baseball cap" - desc = "Rimmed and brimmed." - icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' - icon_state = "yankeesoft" - soft_type = "yankee" - dog_fashion = /datum/dog_fashion/head/yankee - supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON - -/obj/item/clothing/head/soft/yankee/rimless - name = "rimless fashionable baseball cap" - desc = "Rimless for her pleasure." - icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' - icon_state = "yankeenobrimsoft" - soft_type = "yankeenobrim" - -/obj/item/clothing/head/fedora/brown //Fedora without detective's candy corn gimmick - name = "brown fedora" - icon_state = "detective" - inhand_icon_state = "det_hat" - -/obj/item/clothing/head/standalone_hood - name = "hood" - desc = "A hood with a bit of support around the neck so it actually stays in place, for all those times you want a hood without the coat." - icon = 'modular_skyrat/modules/GAGS/icons/head/head.dmi' - worn_icon = 'modular_skyrat/modules/GAGS/icons/head/head.dmi' - worn_icon_teshari = 'modular_skyrat/modules/GAGS/icons/head/head_teshari.dmi' - icon_state = "hood" - body_parts_covered = HEAD - cold_protection = HEAD - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - flags_inv = HIDEEARS|HIDEHAIR - supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON - flags_1 = IS_PLAYER_COLORABLE_1 - greyscale_colors = "#4e4a43#F1F1F1" - greyscale_config = /datum/greyscale_config/standalone_hood - greyscale_config_worn = /datum/greyscale_config/standalone_hood/worn - greyscale_config_worn_teshari = /datum/greyscale_config/standalone_hood/worn/teshari - greyscale_config_worn_better_vox = /datum/greyscale_config/standalone_hood/worn/newvox - greyscale_config_worn_vox = /datum/greyscale_config/standalone_hood/worn/oldvox - -/obj/item/clothing/head/beret/badge - name = "badged beret" - desc = "A beret. With a badge. What do you want, a dissertation? It's a hat." - icon_state = "beret_badge" - greyscale_config = /datum/greyscale_config/beret_badge - greyscale_config_worn = /datum/greyscale_config/beret_badge/worn - greyscale_colors = "#972A2A#EFEFEF" - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/head/costume/cowboyhat_old - icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' - name = "old cowboy hat" - desc = "An older cowboy hat, perfect for any outlaw, though lacking fancy colour magic." - icon_state = "cowboyhat_black" - inhand_icon_state = "cowboy_hat_black" - supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON - -//BOWS -/obj/item/clothing/head/small_bow - name = "small bow" - desc = "A small compact bow that you can place on the side of your hair." - icon_state = "small_bow" - greyscale_config = /datum/greyscale_config/small_bow - greyscale_config_worn = /datum/greyscale_config/small_bow/worn - greyscale_colors = "#7b9ab5" - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/head/small_bow/Initialize(mapload) - . = ..() - AddComponent(/datum/component/toggle_clothes, "small_bow_t") - -/obj/item/clothing/head/large_bow - name = "large bow" - desc = "A large bow that you can place on top of your head." - icon_state = "large_bow" - greyscale_config = /datum/greyscale_config/large_bow - greyscale_config_worn = /datum/greyscale_config/large_bow/worn - greyscale_colors = "#7b9ab5" - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/head/back_bow - name = "back bow" - desc = "A large bow that you can place on the back of your head." - icon_state = "back_bow" - greyscale_config = /datum/greyscale_config/back_bow - greyscale_config_worn = /datum/greyscale_config/back_bow/worn - greyscale_colors = "#7b9ab5" - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/head/sweet_bow - name = "sweet bow" - desc = "A sweet bow that you can place on the back of your head." - icon_state = "sweet_bow" - greyscale_config = /datum/greyscale_config/sweet_bow - greyscale_config_worn = /datum/greyscale_config/sweet_bow/worn - greyscale_colors = "#7b9ab5" - flags_1 = IS_PLAYER_COLORABLE_1 diff --git a/modular_skyrat/modules/customization/modules/clothing/head/jobs.dm b/modular_skyrat/modules/customization/modules/clothing/head/jobs.dm deleted file mode 100644 index b10aa3d0f9b330..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/head/jobs.dm +++ /dev/null @@ -1,153 +0,0 @@ -// This is for all the berets that /tg/ didn't want. You're welcome, they should look better. - -/obj/item/clothing/head/hats/hos/beret - name = "head of security beret" - desc = "A robust beret for the Head of Security, for looking stylish while not sacrificing protection." - icon_state = "beret_badge" - greyscale_config = /datum/greyscale_config/beret_badge - greyscale_config_worn = /datum/greyscale_config/beret_badge/worn - greyscale_colors = "#3F3C40#FFCE5B" - -/obj/item/clothing/head/hats/hos/beret/syndicate - name = "syndicate beret" - desc = "A black beret with thick armor padding inside. Stylish and robust." - greyscale_colors = "#3F3C40#DB2929" - -/obj/item/clothing/head/beret/sec/navywarden - name = "warden's beret" - desc = "A special beret with the Warden's insignia emblazoned on it. For wardens with class." - icon_state = "beret_badge_fancy_twist" - greyscale_config = /datum/greyscale_config/beret_badge_fancy - greyscale_config_worn = /datum/greyscale_config/beret_badge_fancy/worn - greyscale_colors = "#3C485A#FF0000#00AEEF" - armor_type = /datum/armor/sec_navywarden - strip_delay = 60 - -/datum/armor/sec_navywarden - melee = 40 - bullet = 30 - laser = 30 - energy = 40 - bomb = 25 - fire = 30 - acid = 50 - wound = 6 - -/obj/item/clothing/head/beret/sec/navyofficer - desc = "A special beret with the security insignia emblazoned on it. For officers with class." - icon_state = "beret_badge_bolt" - greyscale_colors = "#3C485A#FF0000" - - -//Medical - -/obj/item/clothing/head/beret/medical - name = "medical beret" - desc = "A medical-flavored beret for the doctor in you!" - icon_state = "beret_badge_med" - greyscale_config = /datum/greyscale_config/beret_badge - greyscale_config_worn = /datum/greyscale_config/beret_badge/worn - greyscale_colors = "#FFFFFF#5FA4CC" - flags_1 = NONE - -/obj/item/clothing/head/beret/medical/paramedic - name = "paramedic beret" - desc = "For finding corpses in style!" - greyscale_colors = "#364660#5FA4CC" - -/obj/item/clothing/head/beret/medical/chemist - name = "chemist beret" - desc = "Not acid-proof!" - greyscale_colors = "#FFFFFF#D15B1B" - -/obj/item/clothing/head/beret/medical/virologist - name = "virologist beret" - desc = "Sneezing in this expensive beret would be a waste of a good beret." - greyscale_colors = "#FFFFFF#198019" - - -//Engineering - -/obj/item/clothing/head/beret/engi - name = "engineering beret" - desc = "Might not protect you from radiation, but definitely will protect you from looking unfashionable!" - icon_state = "beret_badge_engi" - greyscale_config = /datum/greyscale_config/beret_badge - greyscale_config_worn = /datum/greyscale_config/beret_badge/worn - greyscale_colors = "#ff8200#ffe12f" - flags_1 = NONE - -/obj/item/clothing/head/beret/atmos - name = "atmospheric beret" - desc = "While \"pipes\" and \"style\" might not rhyme, this beret sure makes you feel like they should!" - icon_state = "beret_badge" - greyscale_config = /datum/greyscale_config/beret_badge - greyscale_config_worn = /datum/greyscale_config/beret_badge/worn - greyscale_colors = "#59D7FF#ffe12f" - flags_1 = NONE - -// From this point forth will be berets that are made especially for Skyrat. Those are loosely based off of the ones that were ported initially, but they might not be 1:1 - -/obj/item/clothing/head/beret/engi/ce - name = "chief engineer's beret" - desc = "A fancy beret designed exactly to the Chief Engineer's tastes, minus the LEDs." - greyscale_colors = "#FFFFFF#2E992E" - -/obj/item/clothing/head/beret/medical/cmo - name = "chief medical officer's beret" - desc = "A beret custom-fit to the Chief Medical Officer, repaired once or twice after Runtime got a hold of it." - greyscale_colors = "#5EB8B8#5FA4CC" - -/obj/item/clothing/head/beret/medical/cmo/alt - name = "chief medical officer's beret" - desc = "A beret custom-fit to the Chief Medical Officer, repaired once or twice after Runtime got a hold of it. This one is made out of white fabric. Fancy." - greyscale_colors = "#FFFFFF#199393" - -/obj/item/clothing/head/beret/science/fancy - desc = "A science-themed beret for our hardworking scientists. This one comes with a fancy badge!" - icon_state = "beret_badge" - greyscale_config = /datum/greyscale_config/beret_badge - greyscale_config_worn = /datum/greyscale_config/beret_badge/worn - greyscale_config_worn_teshari = /datum/greyscale_config/beret_badge/worn/teshari - greyscale_colors = "#7E1980#FFFFFF" - -/obj/item/clothing/head/beret/science/fancy/robo - name = "robotics beret" - desc = "A sleek black beret designed with high-durability nano-mesh fiber - or so the roboticists claim." - greyscale_colors = "#3E3E48#88242D" - -/obj/item/clothing/head/beret/science/rd/alt - name = "research director's beret" - desc = "A custom-tailored beret for the Research Director. Lamarr thinks it looks great. This one is made out of white fabric. Fancy." - greyscale_colors = "#FFFFFF#7E1980" - -/obj/item/clothing/head/beret/cargo/qm - name = "quartermaster's beret" - desc = "A beret that helps the QM keep telling themselves that they're an official head of staff." - greyscale_config = /datum/greyscale_config/beret_badge - greyscale_config_worn = /datum/greyscale_config/beret_badge/worn - icon_state = "beret_badge" - greyscale_colors = "#cf932f#FFCE5B" - -/obj/item/clothing/head/beret/cargo/qm/alt - name = "quartermaster's beret" - desc = "A beret that helps the QM keep telling themselves that they're an official head of staff. This one is made out of white fabric. Fancy" - greyscale_colors = "#FFFFFF#FFCE5B" - -/obj/item/clothing/head/caphat/beret/alt - name = "captain's beret" - desc = "For the Captains known for their sense of fashion. This one is made out of white fabric. Fancy" - greyscale_colors = "#FFFFFF#FFCE5B" - -/obj/item/clothing/head/hopcap/beret - name = "head of personnel's beret" - desc = "A fancy beret designed by NT's Personnel division for their favorite head's head." - greyscale_config = /datum/greyscale_config/beret_badge - greyscale_config_worn = /datum/greyscale_config/beret_badge/worn - icon_state = "beret_badge" - greyscale_colors = "#3e5c88#88242D" - -/obj/item/clothing/head/hopcap/beret/alt - name = "head of personnel's beret" - desc = "A fancy beret designed by NT's Personnel division for their favorite head's head. This one is made out of white fabric. Fancy" - greyscale_colors = "#FFFFFF#88242D" diff --git a/modular_skyrat/modules/customization/modules/clothing/head/trek.dm b/modular_skyrat/modules/customization/modules/clothing/head/trek.dm deleted file mode 100644 index a9230e4fec77f5..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/head/trek.dm +++ /dev/null @@ -1,21 +0,0 @@ -//Trekkie Caps -/obj/item/clothing/head/hats/caphat/parade/fedcap - name = "Officer's cap" - desc = "An officer's cap that demands discipline from the one who wears it." - icon_state = "fedcapofficer" - armor_type = /datum/armor/none - icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' - -//Variants -/obj/item/clothing/head/hats/caphat/parade/fedcap/medsci - icon_state = "fedcapsci" - -/obj/item/clothing/head/hats/caphat/parade/fedcap/eng - icon_state = "fedcapeng" - -/obj/item/clothing/head/hats/caphat/parade/fedcap/sec - icon_state = "fedcapsec" - -/obj/item/clothing/head/hats/caphat/parade/fedcap/black - icon_state = "fedcapblack" diff --git a/modular_skyrat/modules/customization/modules/clothing/masks/gasmask.dm b/modular_skyrat/modules/customization/modules/clothing/masks/gasmask.dm deleted file mode 100644 index 47ae6a48e89c2a..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/masks/gasmask.dm +++ /dev/null @@ -1,218 +0,0 @@ -/obj/item/clothing/mask/gas/glass - icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' - name = "glass gas mask" - desc = "A face-covering mask that can be connected to an air supply. This one doesn't obscure your face however." - icon_state = "gas_clear" - flags_inv = NONE - -/obj/item/clothing/mask/gas/atmos/glass - icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' - name = "advanced gas mask" - desc = "A face-covering mask that can be connected to an air supply. This one doesn't obscure your face however." - icon_state = "gas_clear" - flags_inv = NONE - -/obj/item/clothing/mask/gas/alt - icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' - icon_state = "gas_alt2" - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' - -/obj/item/clothing/mask/gas/german - name = "black gas mask" - desc = "A black gas mask. Are you my Mummy?" - icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' - icon_state = "m38_mask" - -/obj/item/clothing/mask/gas/hecu1 - name = "modern gas mask" - desc = "MY. ASS. IS. HEAVY." - icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' - icon_state = "hecu" - -/obj/item/clothing/mask/gas/hecu2 - name = "M40 gas mask" - desc = "A deprecated field protective mask developed during the 20th century in Sol-3. It's designed to protect from chemical agents, biological agents, and nuclear fallout particles. It does not protect the user from ammonia or from lack of oxygen, though the filter can be replaced with a tube for any air tank." - icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' - worn_icon_teshari = 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/mask.dmi' - icon_state = "hecu2" - -/obj/item/clothing/mask/gas/soviet - name = "soviet gas mask" - desc = "A white gas mask with a green filter, there's a small sticker attached saying it's not got Asbestos anymore." - icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' - icon_state = "gp5_mask" - -/obj/item/clothing/mask/gas/clown_colourable - name = "colourable clown mask" - desc = "The face of pure evil, now multicoloured." - icon_state = "gags_mask" - clothing_flags = MASKINTERNALS - flags_cover = MASKCOVERSEYES - resistance_flags = FLAMMABLE - has_fov = FALSE - greyscale_config = /datum/greyscale_config/clown_mask - greyscale_config_worn = /datum/greyscale_config/clown_mask/worn - greyscale_colors = "#FFFFFF#F20018#0000FF#00CC00" - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/mask/gas/clownbald - name = "bald clown mask" - desc = "HE'S BALD, HE'S FUCKIN' BALDIN!" - clothing_flags = MASKINTERNALS - icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' - icon_state = "baldclown" - inhand_icon_state = null - flags_cover = MASKCOVERSEYES - resistance_flags = FLAMMABLE - -/obj/item/clothing/mask/gas/respirator - name = "half mask respirator" - desc = "A half mask respirator that's really just a standard gas mask with the glass taken off." - icon = 'modular_skyrat/modules/GAGS/icons/masks.dmi' - worn_icon = 'modular_skyrat/modules/GAGS/icons/masks.dmi' - icon_state = "respirator" - inhand_icon_state = "sechailer" - w_class = WEIGHT_CLASS_SMALL - has_fov = FALSE - clothing_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS - flags_inv = HIDEFACIALHAIR|HIDESNOUT - flags_cover = MASKCOVERSMOUTH - flags_1 = IS_PLAYER_COLORABLE_1 - greyscale_colors = "#2E3333" - greyscale_config = /datum/greyscale_config/respirator - greyscale_config_worn = /datum/greyscale_config/respirator/worn - //NIGHTMARE NIGHTMARE NIGHTMARE - greyscale_config_worn_digi = /datum/greyscale_config/respirator/worn/snouted - greyscale_config_worn_better_vox = /datum/greyscale_config/respirator/worn/better_vox - greyscale_config_worn_vox = /datum/greyscale_config/respirator/worn/vox - greyscale_config_worn_teshari = /datum/greyscale_config/respirator/worn/teshari - -/obj/item/clothing/mask/gas/respirator/examine(mob/user) - . = ..() - . += span_notice("You can toggle its ability to muffle your TTS voice with <b>control click</b>.") - -/obj/item/clothing/mask/gas/respirator/CtrlClick(mob/living/user) - if(!isliving(user)) - return - if(user.get_active_held_item() != src) - to_chat(user, span_warning("You must hold the [src] in your hand to do this!")) - return - voice_filter = voice_filter ? null : initial(voice_filter) - to_chat(user, span_notice("Mask voice muffling [voice_filter ? "enabled" : "disabled"].")) - -/obj/item/clothing/mask/gas/clown_hat/vox - desc = "A true prankster's facial attire. A clown is incomplete without his wig and mask. This one's got an easily accessible feeding port to be more suitable for the Vox crewmembers." - icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' - worn_icon_better_vox = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' - worn_icon_vox = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' - starting_filter_type = /obj/item/gas_filter/vox - -/obj/item/clothing/mask/gas/clown_hat/vox/Initialize(mapload) - .=..() - clownmask_designs = list( - "True Form" = image(icon = src.icon, icon_state = "clown"), - "The Feminist" = image(icon = src.icon, icon_state = "sexyclown"), - "The Wizard" = image(icon = src.icon, icon_state = "wizzclown"), - "The Jester" = image(icon = src.icon, icon_state = "chaos"), - "The Madman" = image(icon = src.icon, icon_state = "joker"), - "The Rainbow Color" = image(icon = src.icon, icon_state = "rainbow") - ) - -/obj/item/clothing/mask/gas/clown_hat/vox/ui_action_click(mob/user) - if(!istype(user) || user.incapacitated()) - return - - var/list/options = list() - options["True Form"] = "clown" - options["The Feminist"] = "sexyclown" - options["The Wizard"] = "wizzclown" - options["The Madman"] = "joker" - options["The Rainbow Color"] = "rainbow" - options["The Jester"] = "chaos" - - var/choice = show_radial_menu(user,src, clownmask_designs, custom_check = FALSE, radius = 36, require_near = TRUE) - if(!choice) - return FALSE - - if(src && choice && !user.incapacitated() && in_range(user,src)) - icon_state = options[choice] - user.update_worn_mask() - update_item_action_buttons() - to_chat(user, span_notice("Your Clown Mask has now morphed into [choice], all praise the Honkmother!")) - return TRUE - -/obj/item/clothing/mask/gas/mime/vox - desc = "The traditional mime's mask. It has an eerie facial posture. This one's got an easily accessible feeding port to be more suitable for the Vox crewmembers." - icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' - worn_icon_vox = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' - worn_icon_better_vox = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' - starting_filter_type = /obj/item/gas_filter/vox - -/obj/item/clothing/mask/gas/mime/vox/Initialize(mapload) - .=..() - mimemask_designs = list( - "Blanc" = image(icon = src.icon, icon_state = "mime"), - "Excité" = image(icon = src.icon, icon_state = "sexymime"), - "Triste" = image(icon = src.icon, icon_state = "sadmime"), - "Effrayé" = image(icon = src.icon, icon_state = "scaredmime") - ) - -/obj/item/clothing/mask/gas/mime/vox/ui_action_click(mob/user) - if(!istype(user) || user.incapacitated()) - return - - var/list/options = list() - options["Blanc"] = "mime" - options["Triste"] = "sadmime" - options["Effrayé"] = "scaredmime" - options["Excité"] = "sexymime" - - var/choice = show_radial_menu(user,src, mimemask_designs, custom_check = FALSE, radius = 36, require_near = TRUE) - if(!choice) - return FALSE - - if(src && choice && !user.incapacitated() && in_range(user,src)) - var/mob/living/carbon/human/human_user = user - if(human_user.dna.species.mutant_bodyparts["snout"]) - icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask_muzzled.dmi' - var/list/avian_snouts = list("Beak", "Big Beak", "Corvid Beak") - if(human_user.dna.species.mutant_bodyparts["snout"][MUTANT_INDEX_NAME] in avian_snouts) - icon_state = "[options[choice]]_b" - else - icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' - icon_state = options[choice] - icon_state = options[choice] - - user.update_worn_mask() - update_item_action_buttons() - to_chat(user, span_notice("Your Mime Mask has now morphed into [choice]!")) - return TRUE - -/obj/item/clothing/mask/gas/atmos/vox - desc = "Improved gas mask utilized by atmospheric technicians. It's flameproof! This one's got an easily accessible feeding port to be more suitable for the Vox crewmembers." - icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' - worn_icon_vox = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' - worn_icon_better_vox = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' - starting_filter_type = /obj/item/gas_filter/vox - -/obj/item/clothing/mask/gas/sechailer/vox - desc = "A standard issue Security gas mask with integrated 'Compli-o-nator 3000' device. Plays over a dozen pre-recorded compliance phrases designed to get scumbags to stand still whilst you tase them. Do not tamper with the device. This one's got an easily accessible feeding port to be more suitable for the Vox crewmembers." - icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' - worn_icon_vox = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' - worn_icon_better_vox = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' - clothing_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS | GAS_FILTERING - visor_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS | GAS_FILTERING - starting_filter_type = /obj/item/gas_filter/vox diff --git a/modular_skyrat/modules/customization/modules/clothing/neck/_neck.dm b/modular_skyrat/modules/customization/modules/clothing/neck/_neck.dm deleted file mode 100644 index cf93fb379d995e..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/neck/_neck.dm +++ /dev/null @@ -1,111 +0,0 @@ -/obj/item/clothing/neck/tie/disco - name = "horrific necktie" - icon = 'modular_skyrat/master_files/icons/obj/clothing/neck.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' - icon_state = "eldritch_tie" - desc = "The necktie is adorned with a garish pattern. It's disturbingly vivid. Somehow you feel as if it would be wrong to ever take it off. It's your friend now. You will betray it if you change it for some boring scarf." - -/obj/item/clothing/neck/mantle - name = "mantle" - desc = "A decorative drape over the shoulders. This one has a simple, dry color." - icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' - icon_state = "mantle" - -/obj/item/clothing/neck/mantle/regal - name = "regal mantle" - desc = "A colorful felt mantle. You feel posh just holding this thing." - icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' - icon_state = "regal-mantle" - -/obj/item/clothing/neck/mantle/qm - name = "\proper the quartermaster's mantle" - desc = "A snug and comfortable looking shoulder covering garment, it has an air of rebellion and independence. Or annoyance and delusions, your call." - icon_state = "qmmantle" - -/obj/item/clothing/neck/mantle/hopmantle - name = "\proper the head of personnel's mantle" - desc = "A decorative draping of blue and red over your shoulders, signifying your stamping prowess." - icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' - icon_state = "hopmantle" - -/obj/item/clothing/neck/mantle/cmomantle - name = "\proper the chief medical officer's mantle" - desc = "A light blue shoulder draping for THE medical professional. Contrasts well with blood." - icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' - icon_state = "cmomantle" - -/obj/item/clothing/neck/mantle/rdmantle - name = "\proper the research director's mantle" - desc = "A terribly comfortable shoulder draping for the discerning scientist of fashion." - icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' - icon_state = "rdmantle" - -/obj/item/clothing/neck/mantle/cemantle - name = "\proper the chief engineer's mantle" - desc = "A bright white and yellow striped mantle. Do not wear around active machinery." - icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' - icon_state = "cemantle" - -/obj/item/clothing/neck/mantle/hosmantle - name = "\proper the head of security's mantle" - desc = "A plated mantle that one might wrap around the upper torso. The 'scales' of the garment signify the members of security and how you're carrying them on your shoulders." - icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' - icon_state = "hosmantle_blue" //There's a red version if you remove the _blue, but its not coded in currently. - -/obj/item/clothing/neck/mantle/bsmantle - name = "\proper the blueshield's mantle" - desc = "A plated mantle with command colors. Suitable for the one assigned to making sure they're still breathing." - icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' - icon_state = "bsmantle" - -/obj/item/clothing/neck/mantle/capmantle - name = "\proper the captain's mantle" - desc = "A formal mantle to drape around the shoulders. Others stand on the shoulders of giants. You're the giant they stand on." - icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' - icon_state = "capmantle" - -/obj/item/clothing/neck/mantle/recolorable - name = "mantle" - desc = "A simple drape over the shoulders." - icon = 'modular_skyrat/modules/GAGS/icons/neck/neck.dmi' - worn_icon = 'modular_skyrat/modules/GAGS/icons/neck/neck.dmi' - worn_icon_teshari = 'modular_skyrat/modules/GAGS/icons/neck/neck_teshari.dmi' - icon_state = "mantle" - greyscale_colors = "#ffffff" - greyscale_config = /datum/greyscale_config/mantle - greyscale_config_worn = /datum/greyscale_config/mantle/worn - greyscale_config_worn_teshari = /datum/greyscale_config/mantle/worn/teshari - greyscale_config_worn_better_vox = /datum/greyscale_config/mantle/worn/newvox - greyscale_config_worn_vox = /datum/greyscale_config/mantle/worn/oldvox - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/neck/face_scarf - name = "face scarf" - desc = "A warm looking scarf that you can easily put around your face." - icon_state = "face_scarf" - greyscale_config = /datum/greyscale_config/face_scarf - greyscale_config_worn = /datum/greyscale_config/face_scarf/worn - greyscale_colors = "#a52424" - flags_1 = IS_PLAYER_COLORABLE_1 - flags_inv = HIDEFACIALHAIR - -/obj/item/clothing/neck/face_scarf/Initialize(mapload) - . = ..() - AddComponent(/datum/component/toggle_clothes, "face_scarf_t") - -/obj/item/clothing/neck/maid_neck_cover - name = "maid neck cover" - desc = "A neckpiece for a maid costume, it smells faintly of disappointment." - icon_state = "maid_neck_cover" - greyscale_config = /datum/greyscale_config/maid_neck_cover - greyscale_config_worn = /datum/greyscale_config/maid_neck_cover/worn - greyscale_colors = "#7b9ab5#edf9ff" - flags_1 = IS_PLAYER_COLORABLE_1 diff --git a/modular_skyrat/modules/customization/modules/clothing/shoes/shoes.dm b/modular_skyrat/modules/customization/modules/clothing/shoes/shoes.dm deleted file mode 100644 index 07d7cc81ea0414..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/shoes/shoes.dm +++ /dev/null @@ -1,220 +0,0 @@ -/obj/item/clothing/shoes/wraps - icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' - name = "gilded leg wraps" - desc = "Ankle coverings. These ones have a golden design." - icon_state = "gildedcuffs" - body_parts_covered = FALSE - -/obj/item/clothing/shoes/wraps/silver - name = "silver leg wraps" - desc = "Ankle coverings. Not made of real silver." - icon_state = "silvergildedcuffs" - -/obj/item/clothing/shoes/wraps/red - name = "red leg wraps" - desc = "Ankle coverings. Show off your style with these shiny red ones!" - icon_state = "redcuffs" - -/obj/item/clothing/shoes/wraps/blue - name = "blue leg wraps" - desc = "Ankle coverings. Hang ten, brother." - icon_state = "bluecuffs" - -/obj/item/clothing/shoes/cowboyboots - icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' - name = "cowboy boots" - desc = "A standard pair of brown cowboy boots." - icon_state = "cowboyboots" - -/obj/item/clothing/shoes/cowboyboots/black - name = "black cowboy boots" - desc = "A pair of black cowboy boots, pretty easy to scuff up." - icon_state = "cowboyboots_black" - -/obj/item/clothing/shoes/high_heels - icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' - name = "high heels" - desc = "A fancy pair of high heels. Won't compensate for your below average height that much." - icon_state = "heels" - greyscale_config = /datum/greyscale_config/heels - greyscale_config_worn = /datum/greyscale_config/heels/worn - greyscale_config_worn_digi = /datum/greyscale_config/heels/worn/digi - greyscale_colors = "#FFFFFF" - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/shoes/fancy_heels - name = "fancy heels" - desc = "A pair of fancy high heels that are much smaller on your feet." - icon_state = "fancyheels" - icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' - greyscale_colors = "#FFFFFF" - greyscale_config = /datum/greyscale_config/fancyheels - greyscale_config_worn = /datum/greyscale_config/fancyheels/worn - greyscale_config_worn_digi = /datum/greyscale_config/fancyheels/worn/digi - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/shoes/discoshoes - name = "green snakeskin shoes" - desc = "They may have lost some of their lustre over the years, but these green crocodile leather shoes fit you perfectly." - icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' - icon_state = "lizardskin_shoes" - -/obj/item/clothing/shoes/kimshoes - icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' - name = "aerostatic boots" - desc = "A brown pair of boots, prim and proper, ready to set off and get a body out of a tree." - icon_state = "aerostatic_boots" - - -/obj/item/clothing/shoes/jungleboots - name = "jungle boots" - desc = "Take me to your paradise, I want to see the Jungle. A brown pair of boots." - icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' - icon_state = "jungle" - inhand_icon_state = "jackboots" - strip_delay = 30 - equip_delay_other = 50 - resistance_flags = NONE - -/obj/item/clothing/shoes/jungleboots/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/shoes) - -/obj/item/clothing/shoes/jackboots/black - name = "dark jackboots" - desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time. These are fully black." - icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' - icon_state = "blackjack" - -/obj/item/clothing/shoes/wraps/cloth - name = "cloth foot wraps" - desc = "Boxer tape or bandages wrapped like a mummy, all left up to the choice of the wearer." - icon_state = "clothwrap" - greyscale_config = /datum/greyscale_config/clothwraps - greyscale_config_worn = /datum/greyscale_config/clothwraps/worn - greyscale_config_worn_digi = /datum/greyscale_config/clothwraps/worn/digi - greyscale_colors = "#FFFFFF" - body_parts_covered = FALSE - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/shoes/wraps/colourable - name = "colourable foot wraps" - desc = "Ankle coverings. These ones have a customisable colour design." - icon_state = "legwrap" - greyscale_config = /datum/greyscale_config/legwraps - greyscale_config_worn = /datum/greyscale_config/legwraps/worn - greyscale_config_worn_digi = /datum/greyscale_config/legwraps/worn/digi - greyscale_colors = "#FFFFFF" - body_parts_covered = FALSE - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/shoes/sports - name = "sport shoes" - desc = "Shoes for the sporty individual. The giants of Charlton play host to the titans of Ipswich - making them both seem normal sized." - icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' - icon_state = "sportshoe" - -/obj/item/clothing/shoes/jackboots/knee - name = "knee boots" - desc = "Black leather boots that go up to the knee." - icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' - icon_state = "kneeboots" - -/obj/item/clothing/shoes/jackboots/timbs - name = "fashionable boots" - desc = "Fresh from Luna, deadass good for rappers." - icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' - icon_state = "timbs" - -/obj/item/clothing/shoes/winterboots/christmas - name = "red christmas boots" - desc = "A pair of fluffy red christmas boots!" - icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' - icon_state = "christmasbootsr" - -/obj/item/clothing/shoes/winterboots/christmas/green - name = "green christmas boots" - desc = "A pair of fluffy green christmas boots!" - icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' - icon_state = "christmasbootsg" - -/obj/item/clothing/shoes/clown_shoes/pink - name = "pink clown shoes" - desc = "A particularly pink pair of punny shoes." - icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' - icon_state = "pink_clown_shoes" - -//Modular overide to give jackboots laces -/obj/item/clothing/shoes/jackboots - can_be_tied = TRUE - -/obj/item/clothing/shoes/colorable_laceups - name = "laceup shoes" - desc = "These don't seem to come pre-polished, how saddening." - icon = 'modular_skyrat/modules/GAGS/icons/shoes/shoes.dmi' - worn_icon = 'modular_skyrat/modules/GAGS/icons/shoes/shoes.dmi' - worn_icon_teshari = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_teshari.dmi' - icon_state = "laceups" - greyscale_colors = "#383631" - greyscale_config = /datum/greyscale_config/laceup - greyscale_config_worn = /datum/greyscale_config/laceup/worn - greyscale_config_worn_teshari = /datum/greyscale_config/laceup/worn/teshari - greyscale_config_worn_better_vox = /datum/greyscale_config/laceup/worn/newvox - greyscale_config_worn_vox = /datum/greyscale_config/laceup/worn/oldvox - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/shoes/colorable_sandals - name = "sandals" - desc = "Rumor has it that wearing these with socks puts you on a no entry list in several sectors." - icon = 'modular_skyrat/modules/GAGS/icons/shoes/shoes.dmi' - worn_icon = 'modular_skyrat/modules/GAGS/icons/shoes/shoes.dmi' - worn_icon_teshari = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_teshari.dmi' - icon_state = "sandals" - greyscale_colors = "#383631" - greyscale_config = /datum/greyscale_config/sandals - greyscale_config_worn = /datum/greyscale_config/sandals/worn - greyscale_config_worn_digi = /datum/greyscale_config/sandals/worn/digi - greyscale_config_worn_teshari = /datum/greyscale_config/sandals/worn/teshari - greyscale_config_worn_better_vox = /datum/greyscale_config/sandals/worn/newvox - greyscale_config_worn_vox = /datum/greyscale_config/sandals/worn/oldvox - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/shoes/jackboots/recolorable - icon = 'modular_skyrat/modules/GAGS/icons/shoes/shoes.dmi' - worn_icon = 'modular_skyrat/modules/GAGS/icons/shoes/shoes.dmi' - worn_icon_teshari = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_teshari.dmi' - icon_state = "boots" - greyscale_colors = "#383631" - greyscale_config = /datum/greyscale_config/boots - greyscale_config_worn = /datum/greyscale_config/boots/worn - greyscale_config_worn_digi = /datum/greyscale_config/boots/worn/digi - greyscale_config_worn_teshari = /datum/greyscale_config/boots/worn/teshari - greyscale_config_worn_better_vox = /datum/greyscale_config/boots/worn/newvox - greyscale_config_worn_vox = /datum/greyscale_config/boots/worn/oldvox - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/shoes/wraps/cloth - name = "cloth foot wraps" - desc = "Boxer tape or bandages wrapped like a mummy, all left up to the choice of the wearer." - icon_state = "clothwrap" - greyscale_config = /datum/greyscale_config/clothwraps - greyscale_config_worn = /datum/greyscale_config/clothwraps/worn - greyscale_config_worn_digi = /datum/greyscale_config/clothwraps/worn/digi - greyscale_colors = "#FFFFFF" - body_parts_covered = FALSE - flags_1 = IS_PLAYER_COLORABLE_1 diff --git a/modular_skyrat/modules/customization/modules/clothing/storage/backpacks.dm b/modular_skyrat/modules/customization/modules/clothing/storage/backpacks.dm deleted file mode 100644 index c94701b22547a2..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/storage/backpacks.dm +++ /dev/null @@ -1,38 +0,0 @@ -/obj/item/storage/backpack/satchel/crusader //Not very special, really just a satchel texture - icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi' - name = "crusader bandolier" - desc = "A bandolier-satchel combination for holding all your dungeon loot." - icon_state = "crusader_bandolier" - inhand_icon_state = "explorerpack" - w_class = WEIGHT_CLASS_BULKY - -/obj/item/storage/backpack/science/robo - name = "robotics backpack" - desc = "A sleek, industrial-strength backpack issued to robotics personnel. Smells faintly of oil." - icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi' - lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' - righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' - icon_state = "backpack_robo" - inhand_icon_state = "backpack_robo" - -/obj/item/storage/backpack/satchel/science/robo - name = "robotics satchel" - desc = "A sleek, industrial-strength satchel issued to robotics personnel. Smells faintly of oil." - icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi' - lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' - righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' - icon_state = "satchel_robo" - inhand_icon_state = "satchel_robo" - -/obj/item/storage/backpack/duffelbag/science/robo - name = "robotics duffelbag" - desc = "A sleek, industrial-strength duffelbag issued to robotics personnel. Smells faintly of oil." - icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi' - lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' - righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' - icon_state = "duffel_robo" - inhand_icon_state = "duffel_robo" diff --git a/modular_skyrat/modules/customization/modules/clothing/storage/readme.md b/modular_skyrat/modules/customization/modules/clothing/storage/readme.md deleted file mode 100644 index 6dbaef6f8688b3..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/storage/readme.md +++ /dev/null @@ -1,27 +0,0 @@ -## Title: Storage - -MODULE ID: Storage - -### Description: - -A seperate folder under customization for adding new (WORN) storage items, such as new bags and belts. - -### TG Proc Changes: - -- N/A - -### Defines: - -- N/A - -### Master file additions - -- N/A - -### Included files that are not contained in this module: -(Both the new sprite files, which are in the normal clothing icon locations) -- modular_skyrat/master_files/icons/mob/clothing/storage.dmi -- modular_skyrat/master_files/icons/obj/clothing/storage.dmi - -### Credits: -Orion_the_Fox diff --git a/modular_skyrat/modules/customization/modules/clothing/suits/armor.dm b/modular_skyrat/modules/customization/modules/clothing/suits/armor.dm deleted file mode 100644 index 4f44155ee81ece..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/suits/armor.dm +++ /dev/null @@ -1,32 +0,0 @@ -// MODULAR ARMOUR - -// WARDEN -/obj/item/clothing/suit/armor/vest/warden/syndicate - name = "master at arms' vest" - desc = "Stunning. Menacing. Perfect for the man who gets bullied for leaving the brig." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi' - icon_state = "warden_syndie" - current_skin = "warden_syndie" //prevents reskinning - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - -// HEAD OF PERSONNEL -/obj/item/clothing/suit/armor/vest/hop/hop_formal - name = "head of personnel's parade jacket" - desc = "A luxurious deep blue jacket for the Head of Personnel, woven with a red trim. It smells of bureaucracy." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi' - icon_state = "hopformal" - -/obj/item/clothing/suit/armor/vest/hop/hop_formal/Initialize(mapload) - . = ..() - AddComponent(/datum/component/toggle_icon) - -// CAPTAIN -/obj/item/clothing/suit/armor/vest/capcarapace/jacket - name = "captain's jacket" - desc = "A lightweight armored jacket in the Captain's colors. For when you want something sleeker." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi' - icon_state = "capjacket_casual" - body_parts_covered = CHEST|ARMS diff --git a/modular_skyrat/modules/customization/modules/clothing/suits/misc.dm b/modular_skyrat/modules/customization/modules/clothing/suits/misc.dm deleted file mode 100644 index 3a3a9f88b8d7f4..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/suits/misc.dm +++ /dev/null @@ -1,347 +0,0 @@ -/obj/item/clothing/suit/wornshirt - name = "worn shirt" - desc = "A worn out (or perhaps just baggy), curiously comfortable t-shirt." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - icon_state = "wornshirt" - inhand_icon_state = "labcoat" - body_parts_covered = CHEST|GROIN - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/dutchjacketsr - name = "western jacket" - desc = "Botanists screaming of mangos have been rumored to wear this." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - icon_state = "dutchjacket" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - - -/obj/item/clothing/suit/toggle/trackjacket - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - name = "track jacket" - desc = "A black jacket with blue stripes for the athletic. It is also popular among russian delinquents." - icon_state = "trackjacket" - toggle_noun = "zipper" - -/obj/item/clothing/suit/frenchtrench - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - name = "blue trenchcoat" - icon_state = "frenchtrench" - desc = "There's a certain timeless feeling to this coat, like it was once worn by a romantic, broken through his travels, from a schemer who hunted injustice to a traveller, however it arrived in your hands? Who knows?" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/victoriantailcoatbutler - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - name = "caretaker tailcoat" - desc = "You've ALWAYS been the Caretaker. I ought to know, I've ALWAYS been here." - icon_state = "victorian_tailcoat" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/koreacoat - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - name = "eastern winter coat" - desc = "War makes people cold, not just on the inside, but on the outside as well... luckily this coat's not seen any hardships like that, and is actually quite warm!" - icon_state = "chi_korea_coat" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - body_parts_covered = CHEST|GROIN|ARMS - cold_protection = CHEST|GROIN|ARMS - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - -/obj/item/clothing/suit/modernwintercoatthing - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - name = "modern winter coat" - desc = "Warm and comfy, the inner fur seems to be removable, not this one though, someone's sewn it in and left the buttons!" - icon_state = "modern_winter" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - 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/jacket/cardigan - name = "cardigan" - desc = "It's like, half a jacket." - icon_state = "cardigan" - greyscale_config = /datum/greyscale_config/cardigan - greyscale_config_worn = /datum/greyscale_config/cardigan/worn - greyscale_colors = "#FFFFFF" - flags_1 = IS_PLAYER_COLORABLE_1 - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/toggle/jacket/cardigan/Initialize(mapload) - . = ..() - AddComponent(/datum/component/toggle_clothes, "cardigan_t") - -/obj/item/clothing/suit/discoblazer - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - name = "disco ass blazer" - desc = "Looks like someone skinned this blazer off some long extinct disco-animal. It has an enigmatic white rectangle on the back and the right sleeve." - icon_state = "jamrock_blazer" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/kimjacket - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - name = "aerostatic bomber jacket" - desc = "A jacket once worn by the Air Force during the Antecentennial Revolution, there are quite a few pockets on the inside, mostly for storing notebooks and compasses." - icon_state = "aerostatic_bomber_jacket" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/blackfurrich - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - name = "expensive black fur coat" - desc = "Ever thought to yourself 'I'm a rich bitch, but I haven't GOT the Mafia Princess look?' Well thanks to the tireless work of underpaid slave labour in Space China, your dreams of looking like a bitch have been fulfilled, like a Genie with a sweatshop." - icon_state = "expensivecoat" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - body_parts_covered = CHEST|GROIN|ARMS - cold_protection = CHEST|GROIN|ARMS - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - -/obj/item/clothing/suit/brownbattlecoat - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - name = "expensive brown fur coat" - desc = "There is nothing more valuable, nothing more sacred, look at the fur lining, it's beautiful, when you cruse through Necropolis in this thing, you're gonna be balls deep in Ash Walker snatch." - icon_state = "battlecoat" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - body_parts_covered = CHEST|GROIN|ARMS - cold_protection = CHEST|GROIN|ARMS - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - -/obj/item/clothing/suit/brownfurrich - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - name = "quartermaster fur coat" - desc = "Cargonia, or if you're a dork, Cargoslavia has shipped out a coat for loyal quartermasters, despite accusations it's just a dyed black fur coat, it's...not, promise!" - icon_state = "winter_coat" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - body_parts_covered = CHEST|GROIN|ARMS - cold_protection = CHEST|GROIN|ARMS - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - armor_type = /datum/armor/suit_brownfurrich - -/datum/armor/suit_brownfurrich - melee = 10 - bullet = 10 - -/obj/item/clothing/suit/brownfurrich/public - name = "fur coat" - desc = "A lavishly cosy furr coat, made with 100% recycled carbon!" - -/obj/item/clothing/suit/brownfurrich/white - name = "white fur coat" - desc = "A lavishly cosy furr coat, made with 100% recycled carbon!" - icon_state = "winter_coat_white" - -/obj/item/clothing/suit/brownfurrich/cream - name = "cream fur coat" - desc = "A lavishly cosy furr coat, made with 100% recycled carbon!" - icon_state = "winter_coat_cream" - -/obj/item/clothing/suit/fallsparka - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - name = "falls parka" - desc = "A light brown coat with light fur lighting around the collar." - icon_state = "fallsparka" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - body_parts_covered = CHEST|GROIN|ARMS - cold_protection = CHEST|GROIN|ARMS - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - -/obj/item/clothing/suit/british_officer - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - name = "british officers coat" - desc = "Whether you're commanding a colonial crusade or commanding a battalion for the British Empire, this coat will suit you." - icon_state = "british_officer" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - body_parts_covered = CHEST|GROIN|ARMS - cold_protection = CHEST|GROIN|ARMS - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - armor_type = /datum/armor/suit_british_officer - -/datum/armor/suit_british_officer - melee = 10 - bullet = 10 - -/obj/item/clothing/suit/modern_winter - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - name = "modern winter coat" - desc = "A comfy modern winter coat." - icon_state = "modern_winter" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - body_parts_covered = CHEST|GROIN|ARMS - cold_protection = CHEST|GROIN|ARMS - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - -/obj/item/clothing/suit/woolcoat - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - name = "wool coat" - desc = "A fine coat made from the richest of wool." - icon_state = "woolcoat" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - body_parts_covered = CHEST|GROIN|ARMS - - -/obj/item/clothing/suit/gautumn - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - name = "neo american general's coat" - desc = "In stark contrast to the undersuit, this large and armored coat is as white as snow, perfect for the bloodstains." - icon_state = "soldier" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - body_parts_covered = CHEST|GROIN|ARMS - cold_protection = CHEST|GROIN|ARMS - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - armor_type = /datum/armor/suit_gautumn - -/datum/armor/suit_gautumn - melee = 10 - bullet = 10 - laser = 20 - energy = 20 - -/obj/item/clothing/suit/autumn - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - name = "neo american officer's coat" - desc = "In stark contrast to the undersuit, this coat is a greeny white colour, layered with slight protection against bullets and melee weapons." - icon_state = "autumn" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - body_parts_covered = CHEST|GROIN|ARMS - cold_protection = CHEST|GROIN|ARMS - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - armor_type = /datum/armor/suit_autumn - -/datum/armor/suit_autumn - melee = 10 - bullet = 10 - -/obj/item/clothing/suit/texas - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - name = "white suit coat" - desc = "A white suit coat, perfect for fat oil barons." - icon_state = "texas" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - body_parts_covered = CHEST|ARMS - -/obj/item/clothing/suit/cossack - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - name = "ukrainian coat" - desc = "Hop on your horse, dawn your really fluffy hat, and strap this coat to your back." - icon_state = "kuban_cossak" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/corgisuit/en - name = "\improper super-hero E-N suit" - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - icon_state = "ensuit" - supports_variations_flags = NONE - -/obj/item/clothing/suit/corgisuit/en/New() - ..() - START_PROCESSING(SSobj, src) - -/obj/item/clothing/suit/corgisuit/en/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/clothing/suit/corgisuit/en/process() - if(prob(2)) - for(var/obj/M in orange(2,src)) - if(!M.anchored && (M.flags_1 & CONDUCT_1)) - step_towards(M,src) - for(var/mob/living/silicon/S in orange(2,src)) - if(istype(S, /mob/living/silicon/ai)) continue - step_towards(S,src) - for(var/datum/species/synthetic/R in orange(2,src)) - step_towards(R,src) - -/obj/item/clothing/suit/trenchbrown - name = "brown trenchcoat" - desc = "A brown noir-inspired coat. Looks best if you're not wearing it over a baggy t-shirt." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - icon_state = "brtrenchcoat" - body_parts_covered = CHEST|ARMS - -/obj/item/clothing/suit/trenchblack - name = "black trenchcoat" - desc = "A matte-black coat. Best suited for space-italians, or maybe a monochrome-cop." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - icon_state = "bltrenchcoat" - body_parts_covered = CHEST|ARMS - -/obj/item/clothing/suit/apron/chef/colorable_apron - name = "apron" - desc = "A basic apron." - icon = 'modular_skyrat/modules/GAGS/icons/suit/suit.dmi' - worn_icon = 'modular_skyrat/modules/GAGS/icons/suit/suit.dmi' - worn_icon_teshari = 'modular_skyrat/modules/GAGS/icons/suit/suit_teshari.dmi' - icon_state = "apron" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - greyscale_colors = "#ffffff" - greyscale_config = /datum/greyscale_config/apron - greyscale_config_worn = /datum/greyscale_config/apron/worn - greyscale_config_worn_teshari = /datum/greyscale_config/apron/worn/teshari - greyscale_config_worn_better_vox = /datum/greyscale_config/apron/worn/newvox - greyscale_config_worn_vox = /datum/greyscale_config/apron/worn/oldvox - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/suit/apron/overalls - greyscale_config_worn_digi = /datum/greyscale_config/overalls/worn/digi - greyscale_config_worn_better_vox = /datum/greyscale_config/overalls/worn/better_vox - greyscale_config_worn_vox = /datum/greyscale_config/overalls/worn/vox - -/obj/item/clothing/suit/apron/overalls/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/analyzer, - /obj/item/construction/rcd, - /obj/item/fireaxe/metal_h2_axe, - /obj/item/pipe_dispenser, - /obj/item/storage/bag/construction, - /obj/item/t_scanner, - ) - -/obj/item/clothing/suit/warm_sweater - name = "warm sweater" - desc = "A comfortable warm-looking sweater." - icon_state = "warm_sweater" - greyscale_config = /datum/greyscale_config/warm_sweater - greyscale_config_worn = /datum/greyscale_config/warm_sweater/worn - greyscale_colors = "#867361" - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/suit/heart_sweater - name = "heart sweater" - desc = "A comfortable warm-looking sweater. It even has a heart pattern on it, how cute." - icon_state = "heart_sweater" - greyscale_config = /datum/greyscale_config/heart_sweater - greyscale_config_worn = /datum/greyscale_config/heart_sweater/worn - greyscale_colors = "#867361#8f3a3a" - flags_1 = IS_PLAYER_COLORABLE_1 diff --git a/modular_skyrat/modules/customization/modules/clothing/suits/trek.dm b/modular_skyrat/modules/customization/modules/clothing/suits/trek.dm deleted file mode 100644 index 8bccdd2f066b49..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/suits/trek.dm +++ /dev/null @@ -1,61 +0,0 @@ -//Trek Jacket(s?) -/obj/item/clothing/suit/fedcoat - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - name = "Federation uniform jacket" - desc = "A uniform jacket from the United Federation. Set phasers to awesome." - icon_state = "fedcoat" - inhand_icon_state = "coatsecurity" - allowed = list( - /obj/item/tank/internals/emergency_oxygen, - /obj/item/flashlight, - /obj/item/analyzer, - /obj/item/radio, - /obj/item/gun, - /obj/item/melee/baton, - /obj/item/restraints/handcuffs, - /obj/item/reagent_containers/hypospray, - /obj/item/hypospray, - /obj/item/healthanalyzer, - /obj/item/reagent_containers/syringe, - /obj/item/reagent_containers/cup/vial, - /obj/item/reagent_containers/cup/beaker, - /obj/item/storage/pill_bottle, - /obj/item/taperecorder) - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - body_parts_covered = CHEST|GROIN|ARMS - species_exception = list(/datum/species/golem) - -/obj/item/clothing/suit/fedcoat/medsci - icon_state = "fedblue" - inhand_icon_state = "coatmedical" - -/obj/item/clothing/suit/fedcoat/eng - icon_state = "fedeng" - inhand_icon_state = "coatengineer" - -/obj/item/clothing/suit/fedcoat/capt - icon_state = "fedcapt" - inhand_icon_state = "coatcaptain" - -//fedcoat but modern -/obj/item/clothing/suit/fedcoat/modern - name = "modern Federation uniform jacket" - desc = "A modern uniform jacket from the United Federation." - icon_state = "fedmodern" - inhand_icon_state = "coatsecurity" - -/obj/item/clothing/suit/fedcoat/modern/medsci - name = "modern medsci Federation jacket" - icon_state = "fedmodernblue" - inhand_icon_state = "coatmedical" - -/obj/item/clothing/suit/fedcoat/modern/eng - name = "modern engineering Federation jacket" - icon_state = "fedmoderneng" - inhand_icon_state = "coatengineer" - -/obj/item/clothing/suit/fedcoat/modern/sec - name = "modern security Federation jacket" - icon_state = "fedmodernsec" - inhand_icon_state = "coatcaptain" diff --git a/modular_skyrat/modules/customization/modules/clothing/under/accessories.dm b/modular_skyrat/modules/customization/modules/clothing/under/accessories.dm deleted file mode 100644 index 8572a0aa4bc8a0..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/under/accessories.dm +++ /dev/null @@ -1,196 +0,0 @@ -/obj/item/clothing/accessory/badge - name = "detective's badge" - desc = "Security Department detective's badge, made from gold." - icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi' - icon_state = "badge" - slot_flags = ITEM_SLOT_NECK - attachment_slot = CHEST - - var/stored_name - var/badge_string = "Corporate Security" - - drop_sound = 'modular_skyrat/master_files/sound/items/drop/ring.ogg' - pickup_sound = 'modular_skyrat/master_files/sound/items/pickup/ring.ogg' - -/obj/item/clothing/accessory/badge/old - name = "faded badge" - icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi' - desc = "A faded badge, backed with leather. It bears the emblem of the Forensic division." - icon_state = "goldbadge" - -/obj/item/clothing/accessory/badge/proc/set_name(new_name) - stored_name = new_name - name = "[initial(name)] ([stored_name])" - -/obj/item/clothing/accessory/badge/proc/set_desc(mob/living/carbon/human/H) - -/obj/item/clothing/accessory/badge/attack_self(mob/user as mob) - - if(!stored_name) - to_chat(user, "You polish your old badge fondly, shining up the surface.") - set_name(user.real_name) - return - - if(isliving(user)) - if(stored_name) - user.visible_message(span_notice("[user] displays their [src.name].\nIt reads: [stored_name], [badge_string]."),span_notice("You display your [src.name].\nIt reads: [stored_name], [badge_string].")) - else - user.visible_message(span_notice("[user] displays their [src.name].\nIt reads: [badge_string]."),span_notice("You display your [src.name]. It reads: [badge_string].")) - -/obj/item/clothing/accessory/badge/attack(mob/living/carbon/human/M, mob/living/user) - if(isliving(user)) - user.visible_message(span_danger("[user] invades [M]'s personal space, thrusting [src] into their face insistently."),span_danger("You invade [M]'s personal space, thrusting [src] into their face insistently.")) - user.do_attack_animation(M) - -// Sheriff Badge (toy) -/obj/item/clothing/accessory/badge/sheriff - name = "sheriff badge" - desc = "This town ain't big enough for the two of us, pardner." - icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi' - icon_state = "sheriff" - -/obj/item/clothing/accessory/badge/sheriff/attack_self(mob/user as mob) - user.visible_message("[user] shows their sheriff badge. There's a new sheriff in town!",\ - "You flash the sheriff badge to everyone around you!") - -/obj/item/clothing/accessory/badge/sheriff/attack(mob/living/carbon/human/M, mob/living/user) - if(isliving(user)) - user.visible_message(span_danger("[user] invades [M]'s personal space, the sheriff badge into their face!."),span_danger("You invade [M]'s personal space, thrusting the sheriff badge into their face insistently.")) - user.do_attack_animation(M) - -//.Holobadges. -/obj/item/clothing/accessory/badge/holo - name = "holobadge" - desc = "This glowing blue badge marks the holder as THE LAW." - icon_state = "holobadge" - icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi' - -/obj/item/clothing/accessory/badge/holo/cord - icon_state = "holobadge-cord" - icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi' - -/obj/item/clothing/accessory/badge/holo/attack_self(mob/user as mob) - if(!stored_name) - to_chat(user, "Waving around a holobadge before swiping an ID would be pretty pointless.") - return - return ..() - -/obj/item/clothing/accessory/badge/holo/emag_act(remaining_charges, mob/user) - if(obj_flags & EMAGGED) - balloon_alert(user, "already cracked") - return FALSE - - obj_flags |= EMAGGED - balloon_alert(user, "security checks cracked!") - to_chat(user, span_danger("You crack the holobadge security checks.")) - return TRUE - -/obj/item/clothing/accessory/badge/holo/attackby(obj/item/object as obj, mob/user as mob) - if(istype(object, /obj/item/card/id)) - - var/obj/item/card/id/id_card = null - - if(istype(object, /obj/item/card/id)) - id_card = object - - if(ACCESS_BRIG in id_card.access || (obj_flags & EMAGGED)) - to_chat(user, "You imprint your ID details onto the badge.") - set_name(user.real_name) - badge_string = id_card.assignment - else - to_chat(user, "[src] rejects your insufficient access rights.") - return - ..() - -/obj/item/storage/box/holobadge - name = "holobadge box" - desc = "A box claiming to contain holobadges." - -/obj/item/storage/box/holobadge/PopulateContents() - . = ..() - new /obj/item/clothing/accessory/badge/holo(src) - new /obj/item/clothing/accessory/badge/holo(src) - new /obj/item/clothing/accessory/badge/holo(src) - new /obj/item/clothing/accessory/badge/holo(src) - new /obj/item/clothing/accessory/badge/holo/cord(src) - new /obj/item/clothing/accessory/badge/holo/cord(src) - return - -/obj/item/clothing/accessory/badge/holo/warden - name = "warden's holobadge" - desc = "A silver corporate security badge. Stamped with the words 'Warden.'" - icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi' - icon_state = "silverbadge" - slot_flags = ITEM_SLOT_NECK - -/obj/item/clothing/accessory/badge/holo/hos - name = "head of security's holobadge" - desc = "An immaculately polished gold security badge. Labeled 'Head of Security.'" - icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi' - icon_state = "goldbadge" - slot_flags = ITEM_SLOT_NECK - -/obj/item/clothing/accessory/badge/holo/detective - name = "detective's holobadge" - desc = "An immaculately polished gold security badge on leather. Labeled 'Detective.'" - icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi' - icon_state = "marshalbadge" - slot_flags = ITEM_SLOT_NECK - -/obj/item/storage/box/holobadge/hos - name = "holobadge box" - desc = "A box claiming to contain holobadges." - -/obj/item/storage/box/holobadge/hos/PopulateContents() - . = ..() - new /obj/item/clothing/accessory/badge/holo(src) - new /obj/item/clothing/accessory/badge/holo(src) - new /obj/item/clothing/accessory/badge/holo/warden(src) - new /obj/item/clothing/accessory/badge/holo/detective(src) - new /obj/item/clothing/accessory/badge/holo/detective(src) - new /obj/item/clothing/accessory/badge/holo/hos(src) - new /obj/item/clothing/accessory/badge/holo/cord(src) - return - -// The newbie pin -/obj/item/clothing/accessory/green_pin - name = "green pin" - desc = "A pin given to newly hired personnel on deck." - icon_state = "green" - icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi' - -/obj/item/clothing/accessory/green_pin/examine(mob/user) - . = ..() - // How many hours of playtime left until the green pin expires - var/green_time_remaining = sanitize_integer((PLAYTIME_GREEN - user.client?.get_exp_living(pure_numeric = TRUE) / 60), 0, (PLAYTIME_GREEN / 60)) - if(green_time_remaining > 0) - . += span_nicegreen("It reads '[green_time_remaining] hour[green_time_remaining >= 2 ? "s" : ""].'") - -// Pride Pin Over-ride -/obj/item/clothing/accessory/pride - icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi' - -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", - "Man-Loving-Man / Gay Pride" = "pride_mlm", - "Genderfluid Pride" = "pride_genderfluid", - "Genderqueer Pride" = "pride_genderqueer", - "Aromantic Pride" = "pride_aromantic", -)) diff --git a/modular_skyrat/modules/customization/modules/clothing/under/misc.dm b/modular_skyrat/modules/customization/modules/clothing/under/misc.dm deleted file mode 100644 index 5a9fd28144abcb..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/under/misc.dm +++ /dev/null @@ -1,49 +0,0 @@ -/obj/item/clothing/under/misc/bluetracksuit - name = "blue tracksuit" - desc = "Found on a dead homeless man squatting in an alleyway, the classic design has been mass produced to bring terror to the galaxy." - icon = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi' - icon_state = "tracksuit_blue" - -/obj/item/clothing/under/tachawaiian - name = "orange tactical hawaiian outfit" - desc = "Clearly the wearer didn't know if they wanted to invade a country or lay on a nice Hawaiian beach." - icon = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi' - icon_state = "tacticool_hawaiian_orange" - supports_variations_flags = NONE - -/obj/item/clothing/under/tachawaiian/blue - name = "blue tactical hawaiian outfit" - icon_state = "tacticool_hawaiian_blue" - -/obj/item/clothing/under/tachawaiian/purple - name = "purple tactical hawaiian outfit" - icon_state = "tacticool_hawaiian_purple" - -/obj/item/clothing/under/tachawaiian/green - name = "green tactical hawaiian outfit" - icon_state = "tacticool_hawaiian_green" - -/obj/item/clothing/under/texas - name = "texan formal outfit" - desc = "A premium quality shirt and pants combo straight from Texas." - icon = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi' - icon_state = "texas" - supports_variations_flags = NONE - -/obj/item/clothing/under/doug_dimmadome - name = "dimmadome formal outfit" - desc = "A tight fitting suit with a belt that is surely made out of gold." - icon = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi' - icon_state = "doug_dimmadome" - supports_variations_flags = NONE - -/obj/item/clothing/under/pants/tactical - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi' - name = "tactical pants" - desc = "A pair of tactical pants, designed for military use." - icon_state = "tactical_pants" diff --git a/modular_skyrat/modules/customization/modules/clothing/under/security.dm b/modular_skyrat/modules/customization/modules/clothing/under/security.dm deleted file mode 100644 index ffbbcdcccc36c1..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/under/security.dm +++ /dev/null @@ -1,117 +0,0 @@ -// MODULAR SECURITY WEAR (NOT OVERRIDES, LOOK IN 'modular_skyrat\modules\goofsec\code\sec_clothing_overrides.dm') - -// DETECTIVE -/obj/item/clothing/under/rank/security/detective/cowboy - name = "blonde cowboy uniform" - desc = "A blue shirt and dark jeans, with a pair of spurred cowboy boots to boot." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' //Donator item-ish? See the /armorless one below it - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - icon_state = "cowboy_uniform" - supports_variations_flags = NONE - can_adjust = FALSE - -/obj/item/clothing/under/rank/security/detective/cowboy/armorless //Donator variant, just uses the sprite. - armor_type = /datum/armor/clothing_under/none - -/obj/item/clothing/suit/cowboyvest - name = "blonde cowboy vest" - desc = "A white cream vest lined with... fur, of all things, for desert weather. There's a small deer head logo sewn into the vest." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - icon_state = "cowboy_vest" - body_parts_covered = CHEST|ARMS - cold_protection = CHEST|ARMS - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - heat_protection = CHEST|ARMS - -/obj/item/clothing/suit/jacket/det_suit/cowboyvest - name = "blonde cowboy vest" - desc = "A white cream vest lined with... fur, of all things, for desert weather. There's a small deer head logo sewn into the vest." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - icon_state = "cowboy_vest" - body_parts_covered = CHEST|ARMS - cold_protection = CHEST|ARMS - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - heat_protection = CHEST|ARMS - -/obj/item/clothing/under/rank/security/detective/runner - name = "runner sweater" - desc = "<i>\"You look lonely.\"</i>" - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi' - icon_state = "runner" - supports_variations_flags = NONE - can_adjust = FALSE - -/// PRISONER -/obj/item/clothing/under/rank/prisoner/protcust - name = "protective custody prisoner jumpsuit" - desc = "A mustard coloured prison jumpsuit, often worn by former Security members, informants and former CentCom employees. Its suit sensors are stuck in the \"Fully On\" position." - greyscale_colors = "#FFB600" - -/obj/item/clothing/under/rank/prisoner/skirt/protcust - name = "protective custody prisoner jumpskirt" - desc = "A mustard coloured prison jumpskirt, often worn by former Security members, informants and former CentCom employees. Its suit sensors are stuck in the \"Fully On\" position." - greyscale_colors = "#FFB600" - supports_variations_flags = NONE - -/obj/item/clothing/under/rank/prisoner/lowsec - name = "low security prisoner jumpsuit" - desc = "A pale, almost creamy prison jumpsuit, this one denotes a low security prisoner, things like fraud and anything white collar. Its suit sensors are stuck in the \"Fully On\" position." - greyscale_colors = "#AB9278" - -/obj/item/clothing/under/rank/prisoner/skirt/lowsec - name = "low security prisoner jumpskirt" - desc = "A pale, almost creamy prison jumpskirt, this one denotes a low security prisoner, things like fraud and anything white collar. Its suit sensors are stuck in the \"Fully On\" position." - greyscale_colors = "#AB9278" - supports_variations_flags = NONE - -/obj/item/clothing/under/rank/prisoner/highsec - name = "high risk prisoner jumpsuit" - desc = "A bright red prison jumpsuit, depending on who sees it, either a badge of honour or a sign to avoid. Its suit sensors are stuck in the \"Fully On\" position." - greyscale_colors = "#FF3400" - -/obj/item/clothing/under/rank/prisoner/skirt/highsec - name = "high risk prisoner jumpskirt" - desc = "A bright red prison jumpskirt, depending on who sees it, either a badge of honour or a sign to avoid. Its suit sensors are stuck in the \"Fully On\" position." - greyscale_colors = "#FF3400" - supports_variations_flags = NONE - -/obj/item/clothing/under/rank/prisoner/supermax - name = "supermax prisoner jumpsuit" - desc = "A dark crimson red prison jumpsuit, for the worst of the worst, or the Clown. Its suit sensors are stuck in the \"Fully On\" position." - greyscale_colors = "#992300" - -/obj/item/clothing/under/rank/prisoner/skirt/supermax - name = "supermax prisoner jumpskirt" - desc = "A dark crimson red prison jumpskirt, for the worst of the worst, or the Clown. Its suit sensors are stuck in the \"Fully On\" position." - greyscale_colors = "#992300" - supports_variations_flags = NONE - -/obj/item/clothing/under/rank/prisoner/classic - name = "classic prisoner jumpsuit" - desc = "A black and white striped jumpsuit, like something out of a movie." - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/costume.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/costume.dmi' - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/costume_digi.dmi' - icon_state = "prisonerclassic" - greyscale_colors = null - greyscale_config = null - greyscale_config_inhand_left = null - greyscale_config_inhand_right = null - greyscale_config_worn = null - supports_variations_flags = NONE - -/obj/item/clothing/under/rank/prisoner/syndicate - name = "syndicate prisoner jumpsuit" - desc = "A crimson red jumpsuit worn by syndicate captives. Its sensors have been shorted out." - greyscale_colors = "#992300" - has_sensor = FALSE - -/obj/item/clothing/under/rank/prisoner/skirt/syndicate - name = "syndicate prisoner jumpskirt" - desc = "A crimson red jumpskirt worn by syndicate captives. Its sensors have been shorted out." - greyscale_colors = "#992300" - has_sensor = FALSE - supports_variations_flags = NONE diff --git a/modular_skyrat/modules/customization/modules/clothing/under/utility_port/other_port.dm b/modular_skyrat/modules/customization/modules/clothing/under/utility_port/other_port.dm deleted file mode 100644 index d5c805a4ea3c68..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/under/utility_port/other_port.dm +++ /dev/null @@ -1,16 +0,0 @@ - -/obj/item/clothing/suit/costume/samurai - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - name = "samurai armor" - desc = "A set of ancient-Japan Samurai armor. Despite being a cheap replica, it's still remarkably heavy." - icon_state = "samurai" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/head/costume/kabuto - icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' - name = "kabuto" - desc = "An ancient-Japan armored helmet - or a replica of one, at least." - icon_state = "kabuto" - supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON diff --git a/modular_skyrat/modules/customization/modules/clothing/under/utility_port/readme.md b/modular_skyrat/modules/customization/modules/clothing/under/utility_port/readme.md deleted file mode 100644 index 1b753df4d6df85..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/under/utility_port/readme.md +++ /dev/null @@ -1,47 +0,0 @@ -## Title: Utility Port - -MODULE ID: utility_port - -### Description: - -Ports several outfits from citbase, with the highlight being Utility Uniforms: dark-grey jumpsuits with departmental markings, with the same stats as the department's default jumpsuit. -It also ports: - Other "utility" uniforms such as a gas/chemical hazard uniform; - Japanese and Victorian costumes; - Two short dresses; - Several departmental/head-of-staff berets; -All items are avaliable through either the Loadout, Vendors, or Both. - - -PART 2! -Ports the rest of what I was given with the utility uniforms, namely the Suits that go with all the previously added outfits. Also tweaks some of the previously added items (i.e., making the gas/chemical haz-uniform actually acidproof) - -### TG Proc/File Changes: - -To show items in vendors: -- core/modules/vending/autodrobe.dm -- core/modules/vending/clothesmate.dm -- core/modules/vending/wardrobes.dm - -### Defines: - -- N/A - -### Master file additions - -To add digitigrade variants: -- Skyrat-tg/modular_skyrat/master_files/icons/mob/clothing/uniform_digi.dmi -- Skyrat-tg/modular_skyrat/master_files/icons/mob/clothing/under/uniform_digi.dmi - -### Included files that are not contained in this module: - -Modifications to: -- modules/client/loadout/head.dm -- modules/client/loadout/uniform.dm -- icons/mob/clothing/uniform.dmi -- icons/obj/clothing/uniforms.dmi - -### Credits: - -Orion_the_Fox, with help from SarmentiCampbell -Sprites taken from https://github.com/Citadel-Station-13/Citadel-Station-13/pull/13475 \ No newline at end of file diff --git a/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm b/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm deleted file mode 100644 index 262316c5da5bf7..00000000000000 --- a/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm +++ /dev/null @@ -1,1747 +0,0 @@ -/**************SKYRAT REWARDS**************/ -//SUITS -/obj/item/clothing/suit/hooded/wintercoat/colourable - name = "custom winter coat" - icon_state = "winter_coat" - icon = null - worn_icon_state = null - hoodtype = /obj/item/clothing/head/hooded/winterhood/colourable - greyscale_config = /datum/greyscale_config/winter_coat - greyscale_config_worn = /datum/greyscale_config/winter_coat_worn - greyscale_colors = "#666666#CCBBAA#0000FF" - flags_1 = IS_PLAYER_COLORABLE_1 - hood_down_overlay_suffix = "" - /// Whether the hood is flipped up - var/hood_up = FALSE - -/// Called when the hood is worn -/obj/item/clothing/suit/hooded/wintercoat/colourable/on_hood_up(obj/item/clothing/head/hooded/hood) - hood_up = TRUE - -/// Called when the hood is hidden -/obj/item/clothing/suit/hooded/wintercoat/colourable/on_hood_down(obj/item/clothing/head/hooded/hood) - hood_up = FALSE - -//In case colors are changed after initialization -/obj/item/clothing/suit/hooded/wintercoat/colourable/set_greyscale(list/colors, new_config, new_worn_config, new_inhand_left, new_inhand_right) - . = ..() - - if(!hood) - return - - var/list/coat_colors = SSgreyscale.ParseColorString(greyscale_colors) - var/list/new_coat_colors = coat_colors.Copy(1,3) - hood.set_greyscale(new_coat_colors) //Adopt the suit's grayscale coloring for visual clarity. - -//But also keep old method in case the hood is (re-)created later -/obj/item/clothing/suit/hooded/wintercoat/colourable/on_hood_created(obj/item/clothing/head/hooded/hood) - . = ..() - var/list/coat_colors = (SSgreyscale.ParseColorString(greyscale_colors)) - var/list/new_coat_colors = coat_colors.Copy(1,3) - hood.set_greyscale(new_coat_colors) //Adopt the suit's grayscale coloring for visual clarity. - -/obj/item/clothing/head/hooded/winterhood/colourable - icon_state = "hood_winter" - greyscale_config = /datum/greyscale_config/winter_hood - greyscale_config_worn = /datum/greyscale_config/winter_hood/worn - -// NECK - -/obj/item/clothing/neck/cloak/colourable - name = "colourable cloak" - icon_state = "gags_cloak" - greyscale_config = /datum/greyscale_config/cloak - greyscale_config_worn = /datum/greyscale_config/cloak/worn - greyscale_colors = "#917A57#4e412e#4e412e" - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/neck/cloak/colourable/veil - name = "colourable veil" - icon_state = "gags_veil" - greyscale_config = /datum/greyscale_config/cloak/veil - greyscale_config_worn = /datum/greyscale_config/cloak/veil/worn - -/obj/item/clothing/neck/cloak/colourable/boat - name = "colourable boatcloak" - icon_state = "gags_boat" - greyscale_config = /datum/greyscale_config/cloak/boat - greyscale_config_worn = /datum/greyscale_config/cloak/boat/worn - -/obj/item/clothing/neck/cloak/colourable/shroud - name = "colourable shroud" - icon_state = "gags_shroud" - greyscale_config = /datum/greyscale_config/cloak/shroud - greyscale_config_worn = /datum/greyscale_config/cloak/shroud/worn - -/**************CKEY EXCLUSIVES*************/ - -// Donation reward for Grunnyyy -/obj/item/clothing/suit/jacket/ryddid - name = "Ryddid" - desc = "An old worn out piece of clothing belonging to a certain small demon." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - icon_state = "darkcoat" - inhand_icon_state = "greatcoat" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -// Donation reward for Grunnyyy -/obj/item/clothing/neck/cloak/grunnyyy - name = "black and red cloak" - desc = "The design on this seems a little too familiar." - icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi' - icon_state = "infcloak" - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/custom_w.dmi' - w_class = WEIGHT_CLASS_SMALL - body_parts_covered = CHEST|GROIN|LEGS|ARMS - supports_variations_flags = NONE - -// Donation reward for Thedragmeme -// might make it have some flavour functionality in future, a'la rewritable piece of paper - JOKES ON YOU I'M MAKING IT DRAW -/obj/item/canvas/drawingtablet - name = "drawing tablet" - desc = "A portable tablet that allows you to draw. Legends say these can earn the owner a fortune in some sectors of space." - icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi' - icon_state = "drawingtablet" - lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - inhand_icon_state = "electronic" - item_flags = NOBLUDGEON - w_class = WEIGHT_CLASS_TINY - actions_types = list(/datum/action/item_action/dtselectcolor,/datum/action/item_action/dtcolormenu,/datum/action/item_action/dtcleargrid) - pixel_x = 0 - pixel_y = 0 - width = 28 - height = 26 - nooverlayupdates = TRUE - var/currentcolor = "#ffffff" - var/list/colors = list("Eraser" = "#ffffff") - -/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 - else if(istype(action, /datum/action/item_action/dtcolormenu)) - var/list/selects = colors.Copy() - selects["Save"] = "Save" - selects["Delete"] = "Delete" - var/selection = input(user, "", "Color Menu", currentcolor) as null|anything in selects - if(QDELETED(src) || !user.can_perform_action(src)) - return - switch(selection) - if("Save") - var/name = input(user, "", "Name the color!", "Pastel Purple") as text|null - if(name) - colors[name] = currentcolor - if("Delete") - var/delet = input(user, "", "Color Menu", currentcolor) as null|anything in colors - if(delet) - colors.Remove(delet) - if(null) - return - else - currentcolor = colors[selection] - else if(istype(action, /datum/action/item_action/dtcleargrid)) - var/yesnomaybe = tgui_alert("Are you sure you wanna clear the canvas?", "", list("Yes", "No", "Maybe")) - if(QDELETED(src) || !user.can_perform_action(src)) - return - switch(yesnomaybe) - if("Yes") - reset_grid() - SStgui.update_uis(src) - if("No") - return - if("Maybe") - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) - audible_message(span_warning("The [src] buzzes!")) - return - -/obj/item/canvas/drawingtablet/get_paint_tool_color() - return currentcolor - -/obj/item/canvas/drawingtablet/finalize() - return // no finalizing this piece - -/obj/structure/sign/painting/frame_canvas(mob/user,obj/item/canvas/new_canvas) - if(istype(new_canvas, /obj/item/canvas/drawingtablet)) // NO FINALIZING THIS BITCH. - return FALSE - else - return ..() - -/obj/item/canvas/var/nooverlayupdates = FALSE - -/obj/item/canvas/update_overlays() - if(nooverlayupdates) - return - . = ..() - -/datum/action/item_action/dtselectcolor - name = "Change Color" - desc = "Change your color." - button_icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi' - button_icon_state = "drawingtablet" - -/datum/action/item_action/dtcolormenu - name = "Color Menu" - desc = "Select, save, or delete a color in your tablet's color menu!" - button_icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi' - button_icon_state = "drawingtablet" - -/datum/action/item_action/dtcleargrid - name = "Clear Canvas" - desc = "Clear the canvas of your drawing tablet." - button_icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi' - button_icon_state = "drawingtablet" - -// Donation reward for Thedragmeme -/obj/item/clothing/suit/furcoat - name = "leather coat" - desc = "A thick, comfy looking leather coat. It's got some fluffy fur at the collar and sleeves." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - icon_state = "furcoat" - inhand_icon_state = "hostrench" - blood_overlay_type = "coat" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - cold_protection = CHEST|GROIN|LEGS|ARMS - supports_variations_flags = NONE - -// Donation reward for Thedragmeme -/obj/item/clothing/under/syndicate/tacticool/black - name = "black turtleneck" - desc = "Tacticool as fug. Comfy too." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - icon_state = "black_turtleneck" - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - supports_variations_flags = NONE - armor_type = /datum/armor/clothing_under/none - can_adjust = FALSE //There wasnt an adjustable sprite anyways - has_sensor = HAS_SENSORS //Actually has sensors, to balance the new lack of armor - -/datum/armor/clothing_under/none - -/obj/item/clothing/shoes/jackboots/heel - name = "high-heeled jackboots" - desc = "Almost like regular jackboots... why are they on a high heel?" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/feet.dmi' - icon_state = "heel-jackboots" - supports_variations_flags = NONE - uses_advanced_reskins = FALSE - unique_reskin = NONE - -// Donation reward for Bloodrite -/obj/item/clothing/shoes/clown_shoes/britches - desc = "The prankster's standard-issue clowning shoes. They look extraordinarily cute. Ctrl-click to toggle waddle dampeners." - name = "Britches' shoes" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/feet.dmi' - icon_state = "clown_shoes_cute" - supports_variations_flags = NONE - resistance_flags = FIRE_PROOF - -// Donation reward for Bloodrite -/obj/item/clothing/under/rank/civilian/clown/britches - name = "Britches' dress" - desc = "<i>'HONK!' (but cute)</i>" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - icon_state = "clowndress" - supports_variations_flags = NONE - resistance_flags = FIRE_PROOF - -// Donation reward for Bloodrite -/obj/item/clothing/mask/gas/britches - name = "Britches' mask" - desc = "A true prankster's facial attire. Cute." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi' - icon_state = "cute_mask" - inhand_icon_state = null - dye_color = "clown" - supports_variations_flags = NONE - clothing_flags = MASKINTERNALS - w_class = WEIGHT_CLASS_SMALL - flags_cover = MASKCOVERSEYES - resistance_flags = FIRE_PROOF - -/******CALIGRA DONATIONS******/ -// Donation reward for Farsighted Nightlight -/obj/item/clothing/mask/gas/nightlight - name = "\improper FIR-36 half-face rebreather" - desc = "A close-fitting respirator designed by Forestfel Intersystem Industries and originally meant for Ixian Tajarans, the FIR-36 Rebreather is commonly used by Military and Civilian Personnel alike. It reeks of Militarism." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi' - icon_state = "fir36" - actions_types = list(/datum/action/item_action/adjust) - clothing_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS //same flags as actual sec hailer gas mask - flags_inv = HIDEFACE | HIDESNOUT - flags_cover = NONE - visor_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS - visor_flags_inv = HIDEFACE | HIDESNOUT - w_class = WEIGHT_CLASS_SMALL - tint = 0 - -/obj/item/clothing/mask/gas/nightlight/attack_self(mob/user) - adjustmask(user) - -/obj/item/clothing/mask/gas/nightlight/AltClick(mob/user) - ..() - if(user.can_perform_action(src, NEED_DEXTERITY)) - adjustmask(user) - -/obj/item/clothing/mask/gas/nightlight/examine(mob/user) - . = ..() - . += span_notice("Alt-click [src] to adjust it.") - -/obj/item/clothing/mask/gas/nightlight/alldono //different itempath so regular donators can have it, too - -// Donation reward for Farsighted Nightlight -/obj/item/clothing/mask/gas/nightlight/fir22 - name = "\improper FIR-22 full-face rebreather" - desc = "A full-face respirator designed by Forestfel Intersystem Industries and originally meant for Ixian Tajarans, the FIR-22 Rebreather is a snout-covering variant often seen used by Tajaran Military Personnel. It reeks of militarism." - icon_state = "fir22" - -// Donation reward for Raxraus -/obj/item/clothing/head/caligram_cap_tan - name = "\improper Caligram tan softcap" - desc = "A Caligram's Fleet-branded hat in a '/surprisingly/' tasteful shade of brown." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi' - icon_state = "caligram_cap_tan" - -// Donation reward for Raxraus -/obj/item/clothing/under/jumpsuit/caligram_fatigues_tan - name = "\improper Caligram tan fatigues" - desc = "A set of tan and brown work fatigues bearing a Caligram's Fleet insigna on an armband. Lacks the typical Tajaran extravagance." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - worn_icon_digi = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform_digi.dmi' - icon_state = "caligram_fatigues_tan" - worn_icon_state = "caligram_fatigues_tan" - -// Donation reward for Raxraus -/obj/item/clothing/suit/jacket/caligram_parka_tan - name = "\improper Caligram tan parka" - desc = "A tan parka with a fancy black belt and '/Caligram's Fleet/' stitched onto its armband." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - icon_state = "caligram_parka_tan" - body_parts_covered = CHEST|GROIN|ARMS - cold_protection = CHEST|GROIN|LEGS|ARMS|HANDS - -// Donation reward for Raxraus -/obj/item/clothing/suit/armor/vest/caligram_parka_vest_tan - name = "\improper Caligram armored tan parka" - desc = "A tan parka with a fancy black belt, a lightly armored vest and '/Caligram's Fleet/' stitched onto its armband." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - icon_state = "caligram_parka_vest_tan" - inhand_icon_state = "armor" - body_parts_covered = CHEST|GROIN|ARMS - cold_protection = CHEST|GROIN|LEGS|ARMS|HANDS - - -// Donation reward for ChillyLobster -/obj/item/clothing/suit/jacket/brasspriest - name = "brasspriest coat" - desc = "A reddish coat with brass-clad parts embed into said coat. You can hear the faint noise of some cogs turning from time to time inside." - icon_state = "brasspriest" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - body_parts_covered = CHEST|GROIN|LEGS|ARMS - cold_protection = CHEST|GROIN|LEGS|ARMS - -// Donation reward for ChillyLobster -/obj/item/clothing/suit/jacket/hydrogenrobes - name = "metallic-hydrogen robes" - desc = "An incredibly shiny dress that seems to be covered in a very thin sheet of metallic hydrogen all over the textiles. Not very protective." - icon_state = "hydrogenrobes" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - -// Donation reward for ChillyLobster - -/obj/item/clothing/under/wetsuit_norm - name = "fitted wetsuit" - desc = "A fitted wetsuit for trapping in heat and water. Protects against outside elements ever-so-slightly." - icon_state = "wetsuit" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - armor_type = /datum/armor/clothing_under/wetsuit - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - can_adjust = FALSE - female_sprite_flags = NO_FEMALE_UNIFORM - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -// Donation reward for TheOOZ -/obj/item/clothing/mask/animal/kindle - name = "wolf mask" - desc = "A dark mask in the shape of a wolf's head.<br>The material feels like it's made entirely out of inexpensive plastic." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi' - icon_state = "kindle" - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi' - inhand_icon_state = "gasmask_captain" - animal_type = "wolf" - animal_sounds = list("Awoo!", "Woof.", "Arf!") - animal_sounds_alt_probability = 15 - animal_sounds_alt = list("Join us!", "Wear the mask.") - curse_spawn_sound = 'modular_skyrat/master_files/sound/effects/wolfhead_curse.ogg' - cursed = FALSE - - supports_variations_flags = NONE - clothing_flags = MASKINTERNALS | VOICEBOX_DISABLED | VOICEBOX_TOGGLABLE - flags_inv = HIDEFACIALHAIR | HIDESNOUT - visor_flags_inv = HIDEFACIALHAIR | HIDESNOUT - alternate_worn_layer = ABOVE_BODY_FRONT_HEAD_LAYER - w_class = WEIGHT_CLASS_SMALL - -/obj/item/clothing/mask/animal/kindle/make_cursed() - . = ..() - clothing_flags = initial(clothing_flags) - name = "\proper the accursed wolf mask" - desc = "The mask which belongs to Nanotrasen's Outpost Captain Kindle, it is the symbol of her alleged cult.<br>It looks like a [animal_type] mask, but closer inspection reveals it's melded onto this person's face!" - -// Donation reward for Random516 -/obj/item/clothing/head/drake_skull - name = "skull of an ashdrake" - desc = "How did they get this?" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi' - icon_state = "drake_skull" - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/large-worn-icons/32x64/head.dmi' - flags_cover = HEADCOVERSEYES - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - supports_variations_flags = NONE - -// Donation reward for Random516 -/obj/item/clothing/gloves/fingerless/blutigen_wraps - name = "Blutigen wraps" - desc = "The one who wears these had everything and yet lost it all..." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/gloves.dmi' - icon_state = "blutigen_wraps" - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/hands.dmi' - -// Donation reward for Random516 -/obj/item/clothing/suit/blutigen_kimono - name = "Blutigen kimono" - desc = "For the eyes bestowed upon this shall seek adventure..." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - icon_state = "blutigen_kimono" - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - body_parts_covered = CHEST|GROIN|ARMS - supports_variations_flags = NONE - -// Donation reward for Random516 -/obj/item/clothing/under/custom/blutigen_undergarment - name = "Dragon undergarments" - desc = "The Dragon wears the sexy?" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - icon_state = "blutigen_undergarment" - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - supports_variations_flags = NONE - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - -/obj/item/clothing/gloves/ring/hypno - var/list/spans = list() - actions_types = list(/datum/action/item_action/hypno_whisper) - -// Donation reward for CoffeePot -/obj/item/clothing/gloves/ring/hypno/coffeepot - name = "hypnodemon's ring" - desc = "A pallid, softly desaturated-looking gold ring that doesn't look like it belongs. It's hard to put one's finger on why it feels at odds with the world around it - the shine coming off it looks like it could be a mismatch with the lighting in the room, or it could be that it seems to glint and twinkle occasionally when there's no obvious reason for it to - though only when you're not really looking." - spans = list("velvet") - -// Donation reward for Bippys -/obj/item/clothing/gloves/ring/hypno/bippys - name = "hypnobot hexnut" - desc = "A silver bolt component that once belonged to a very peculiar IPC. It's large enough to be worn as a ring on nearly any finger, and is said to amplify the voice of one's mind to another's in the softness of a Whisper..." - icon_state = "ringsilver" - worn_icon_state = "sring" - spans = list("hexnut") - -/datum/action/item_action/hypno_whisper - name = "Hypnotic Whisper" - -/obj/item/clothing/gloves/ring/hypno/ui_action_click(mob/living/user, action) - if(!isliving(user) || !can_use(user)) - return - var/message = input(user, "Speak with a hypnotic whisper", "Whisper") - if(QDELETED(src) || QDELETED(user) || !message || !user.can_speak()) - return - user.whisper(message, spans = spans) - -// Donation reward for SlippyJoe -/obj/item/clothing/head/avipilot - name = "smuggler's flying cap" - desc = "Shockingly, despite space winds, and the lack of any practicality, this pilot cap seems to be fairly well standing, there's a rabbit head seemingly stamped into the side of it." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi' - icon_state = "avipilotup" - inhand_icon_state = "rus_ushanka" - flags_inv = HIDEEARS|HIDEHAIR - cold_protection = HEAD - min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT //about as warm as an ushanka - actions_types = list(/datum/action/item_action/adjust) - supports_variations_flags = NONE - var/goggles = FALSE - -/obj/item/clothing/head/avipilot/proc/adjust_goggles(mob/living/carbon/user) - if(user?.incapacitated()) - return - if(goggles) - icon_state = "avipilotup" - to_chat(user, span_notice("You put all your effort into pulling the goggles up.")) - else - icon_state = "avipilotdown" - to_chat(user, span_notice("You focus all your willpower to put the goggles down on your eyes.")) - goggles = !goggles - if(user) - user.head_update(src, forced = 1) - user.update_mob_action_buttons() - -/obj/item/clothing/head/avipilot/ui_action_click(mob/living/carbon/user, action) - adjust_goggles(user) - -/obj/item/clothing/head/avipilot/attack_self(mob/living/carbon/user) - adjust_goggles(user) - -// Donation reward for NetraKyram - public use allowed via the command vendor -/obj/item/clothing/under/rank/captain/dress - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - worn_icon_digi = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform_digi.dmi' - name = "captain's dress" - desc = "It's a blue dress with some worn-gold markings denoting the rank of \"Captain\"." - icon_state = "dress_cap_s" - worn_icon_state = "dress_cap_s" - body_parts_covered = CHEST|GROIN|ARMS - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - can_adjust = FALSE - -// Donation reward for NetraKyram -/obj/item/clothing/under/rank/blueshield/netra - name = "black and silver armored dress" - desc = "An ankle length black and silver dress, made out of some shiny synthetic material with inlaid kevlar shards and silver reinforcements, a silver ring surrounds the collar, and it doesn't appear to have a zipper... How does somebody put this thing on anyways?" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - icon_state = "silver_dress" - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - worn_icon_digi = null - supports_variations_flags = NONE - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - -// Donation reward for NetraKyram -/obj/item/clothing/gloves/netra - name = "black and silver gloves" - desc = "Some black gloves with silver reinforcements, made of a shiny synthetic material." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/gloves.dmi' - icon_state = "silver_dress_gloves" - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/hands.dmi' - -// Donation reward for NetraKyram -/obj/item/clothing/shoes/jackboots/netra - name = "polished jackboots" - desc = "Some standard issue jackboots, spit-shined to a reflective sheen, wreaking of the scent of silicon parade polish." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/shoes.dmi' - icon_state = "silver_dress_boots" - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/feet.dmi' - supports_variations_flags = NONE - uses_advanced_reskins = FALSE - - -/****************LEGACY REWARDS***************/ -// Donation reward for inferno707 -/obj/item/clothing/neck/cloak/inferno - name = "Kiara's cloak" - desc = "The design on this seems a little too familiar." - icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi' - icon_state = "infcloak" - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/custom_w.dmi' - w_class = WEIGHT_CLASS_SMALL - body_parts_covered = CHEST|GROIN|LEGS|ARMS - -// Donation reward for inferno707 -/obj/item/clothing/neck/inferno_collar - name = "Kiara's collar" - desc = "A soft black collar that seems to stretch to fit whoever wears it." - icon_state = "infcollar" - icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/custom_w.dmi' - alternate_worn_layer = UNDER_SUIT_LAYER - /// What's the name on the tag, if any? - var/tagname = null - /// What treat item spawns inside the collar? - var/treat_path = /obj/item/food/cookie - -/obj/item/clothing/neck/inferno_collar/Initialize(mapload) - . = ..() - create_storage(storage_type = /datum/storage/pockets/small/collar) - if(treat_path) - new treat_path(src) - -/obj/item/clothing/neck/inferno_collar/attack_self(mob/user) - tagname = stripped_input(user, "Would you like to change the name on the tag?", "Name your new pet", "Kiara", MAX_NAME_LEN) - if(tagname) - name = "[initial(name)] - [tagname]" - -// Donation reward for inferno707 -/obj/item/clothing/accessory/medal/steele - name = "Insignia Of Steele" - desc = "An intricate pendant given to those who help a key member of the Steele Corporation." - icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi' - icon_state = "steele" - medaltype = "medal-silver" - -// Donation reward for inferno707 -/obj/item/toy/darksabre - name = "Kiara's sabre" - desc = "This blade looks as dangerous as its owner." - icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/custom_w.dmi' - icon_state = "darksabre" - lefthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_left.dmi' - righthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_right.dmi' - -/obj/item/toy/darksabre/get_belt_overlay() - return mutable_appearance('modular_skyrat/master_files/icons/donator/obj/custom.dmi', "darksheath-darksabre") - -// Donation reward for inferno707 -/obj/item/storage/belt/sabre/darksabre - name = "ornate sheathe" - desc = "An ornate and rather sinister looking sabre sheathe." - icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/custom_w.dmi' - icon_state = "darksheath" - worn_icon_state = "darksheath" - -/obj/item/storage/belt/sabre/darksabre/Initialize(mapload) - . = ..() - atom_storage.set_holdable(list( - /obj/item/toy/darksabre - )) - -/obj/item/storage/belt/sabre/darksabre/PopulateContents() - new /obj/item/toy/darksabre(src) - update_icon() - -// Donation reward for inferno707 -/obj/item/clothing/suit/armor/vest/darkcarapace - name = "dark armor" - desc = "A dark, non-functional piece of armor sporting a red and black finish." - icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/custom_w.dmi' - icon_state = "darkcarapace" - blood_overlay_type = "armor" - dog_fashion = /datum/dog_fashion/back - supports_variations_flags = NONE - armor_type = /datum/armor/none - -// Donation reward for inferno707 -/obj/item/clothing/mask/hheart - name = "Hollow Heart" - desc = "It's an odd ceramic mask. Set in the internal side are several suspicious electronics branded by Steele Tech." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi' - icon_state = "hheart" - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi' - var/c_color_index = 1 - var/list/possible_colors = list("off", "blue", "red") - actions_types = list(/datum/action/item_action/hheart) - supports_variations_flags = NONE - -/obj/item/clothing/mask/hheart/Initialize(mapload) - . = ..() - update_icon() - -/obj/item/clothing/mask/hheart/update_icon() - . = ..() - icon_state = "hheart-[possible_colors[c_color_index]]" - -/datum/action/item_action/hheart - name = "Toggle Mode" - desc = "Toggle the color of the hollow heart." - -/obj/item/clothing/mask/hheart/ui_action_click(mob/user, action) - . = ..() - if(istype(action, /datum/action/item_action/hheart)) - if(!isliving(user)) - return - var/mob/living/ooser = user - var/the = possible_colors.len - var/index = 0 - if(c_color_index >= the) - index = 1 - else - index = c_color_index + 1 - c_color_index = index - update_icon() - ooser.update_worn_mask() - ooser.update_mob_action_buttons() - to_chat(ooser, span_notice("You toggle the [src] to [possible_colors[c_color_index]].")) - -// Donation reward for asky / Zulie -/obj/item/clothing/suit/hooded/cloak/zuliecloak - name = "Project: Zul-E" - desc = "A standard version of a prototype cloak given out by Nanotrasen higher ups. It's surprisingly thick and heavy for a cloak despite having most of it's tech stripped. It also comes with a bluespace trinket which calls it's accompanying hat onto the user. A worn inscription on the inside of the cloak reads 'Fleuret' ...the rest is faded away." - icon_state = "zuliecloak" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/cloaks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/neck.dmi' - hoodtype = /obj/item/clothing/head/hooded/cloakhood/zuliecloak - body_parts_covered = CHEST|GROIN|ARMS - slot_flags = ITEM_SLOT_OCLOTHING | ITEM_SLOT_NECK //it's a cloak. it's cosmetic. so why the hell not? what could possibly go wrong? - supports_variations_flags = NONE - -/obj/item/clothing/head/hooded/cloakhood/zuliecloak - name = "NT special issue" - desc = "This hat is unquestionably the best one, bluespaced to and from CentCom. It smells of Fish and Tea with a hint of antagonism" - icon_state = "zuliecap" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/cloaks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/neck.dmi' - flags_inv = null - supports_variations_flags = NONE - -// Donation reward for Lyricalpaws -/obj/item/clothing/neck/cloak/healercloak - name = "legendary healer's cloak" - desc = "Worn by the most skilled professional medics on the station, this legendary cloak is only attainable by becoming the pinnacle of healing. This status symbol represents the wearer has spent countless years perfecting their craft of helping the sick and wounded." - icon_state = "healercloak" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/cloaks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/neck.dmi' - -// Donation reward for Kathrin Bailey / Floof Ball -/obj/item/clothing/under/custom/lannese - name = "Lannese dress" - desc = "An alien cultural garment for women, coming from a distant planet named Cantalan." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - icon_state = "lannese" - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - supports_variations_flags = NONE - inhand_icon_state = "firefighter" - can_adjust = TRUE - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - body_parts_covered = CHEST|GROIN|LEGS|FEET - -/obj/item/clothing/under/custom/lannese/vambrace - desc = "An alien cultural garment for women, coming from a distant planet named Cantalan. Shiny vambraces included!" - icon_state = "lannese_vambrace" - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - body_parts_covered = CHEST|GROIN|LEGS|ARMS|FEET - -// Donation reward for Hacker T.Dog -/obj/item/clothing/suit/scraparmour - name = "scrap armour" - desc = "A shoddily crafted piece of armour. It provides no benefit apart from being clunky." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - icon_state = "scraparmor" - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - worn_icon_state = "scraparmor" - body_parts_covered = CHEST - -// Donation reward for Enzoman -/obj/item/clothing/mask/luchador/enzo - name = "mask of El Red Templar" - desc = "A mask belonging to El Red Templar, a warrior of lucha. Taking it from him is not recommended." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi' - icon_state = "luchador" - worn_icon_state = "luchador" - clothing_flags = MASKINTERNALS - supports_variations_flags = NONE - -// Donation Reward for Grand Vegeta -/obj/item/clothing/under/mikubikini - name = "starlight singer bikini" - desc = " " - icon_state = "mikubikini" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - worn_icon_state = "mikubikini" - body_parts_covered = CHEST|GROIN - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - -// Donation Reward for Grand Vegeta -/obj/item/clothing/suit/mikujacket - name = "starlight singer jacket" - desc = " " - icon_state = "mikujacket" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - worn_icon_state = "mikujacket" - -// Donation Reward for Grand Vegeta -/obj/item/clothing/head/mikuhair - name = "starlight singer hair" - desc = " " - icon_state = "mikuhair" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi' - worn_icon_state = "mikuhair" - flags_inv = HIDEHAIR - -// Donation Reward for Grand Vegeta -/obj/item/clothing/gloves/mikugloves - name = "starlight singer gloves" - desc = " " - icon_state = "mikugloves" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/gloves.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/hands.dmi' - worn_icon_state = "mikugloves" - -// Donation Reward for Grand Vegeta -/obj/item/clothing/shoes/sneakers/mikuleggings - name = "starlight singer leggings" - greyscale_config = null - greyscale_config_worn = null - greyscale_colors = null - desc = " " - icon_state = "mikuleggings" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/feet.dmi' - worn_icon_state = "mikuleggings" - -// Donation reward for CandleJax -/obj/item/clothing/head/helmet/space/plasmaman/candlejax - name = "emission's helmet" - desc = "A special containment helmet designed for heavy usage. Multiple dings and notches are on this one." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi' - icon_state = "emissionhelm" - - -// Donation reward for CandleJax -/obj/item/clothing/head/helmet/space/plasmaman/candlejax2 - name = "azulean's environment helmet" - desc = "An Azulean-made Enviro-Helmet, adjusted for the unique skull shape typical of the species. Alongside the standard features, it includes an embossment of the Azulean Crest on the back of the helmet." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi' - icon_state = "anahead" - -// Donation reward for CandleJax -/obj/item/clothing/under/plasmaman/candlejax - name = "emission's containment suit" - desc = "A modified envirosuit featuring a reserved color scheme." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - icon_state = "emissionsuit" - -// Donation reward for CandleJax -/obj/item/clothing/under/plasmaman/candlejax2 - name = "azulean's environment suit" - desc = "An Azulean-made Enviro-Suit. Fitted to the Azulean form, it has surplus containment fabric designed to give the solidified mass of plasma that was once a tail some breathing room." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - icon_state = "ana_envirosuit" - -// Donation reward for CandleJax -/obj/item/clothing/under/plasmaman/jax2 - name = "xuracorp hazard underfitting" - desc = "A hazard suit fitted with bio-resistant fibers. Utilizes self-sterilizing pumps fitted in the back." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - icon_state = "plasmaman_jax" - -// Donation reward for Raxraus -/obj/item/clothing/shoes/combat/rax - name = "tactical boots" - desc = "Tactical and sleek. This model seems to resemble Armadyne's." - icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/feet_digi.dmi' - icon_state = "armadyne_boots" - worn_icon_state = "armadyne_boots" - -// Donation reward for Raxraus -/obj/item/clothing/suit/armor/vest/warden/rax - name = "peacekeeper jacket" - desc = "A navy-blue armored jacket with blue shoulder designations." - -// Donation reward for Raxraus -/obj/item/clothing/under/rank/security/rax - name = "banded uniform" - desc = "Personalized and tailored to fit, this uniform is designed to protect without compromising its stylishness." - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi' - worn_icon_digi = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform_digi.dmi' - icon_state = "hos_black" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - -// Donation reward for DeltaTri -/obj/item/clothing/suit/jacket/delta - name = "grey winter hoodie" - desc = "A plain old grey hoodie. It has some puffing on the inside, and a animal fur trim around half of the hood." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - icon_state = "greycoat" - body_parts_covered = CHEST|GROIN|ARMS - cold_protection = CHEST|GROIN|ARMS - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - -// Donation reward for Cherno_00 -/obj/item/clothing/suit/jacket/cherno - name = "silver-buttoned coat" - desc = "A comfy-looking blue coat. It looks a bit fancy, with shiny silver buttons and a few belts!" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - icon_state = "chernocoat" - body_parts_covered = CHEST|GROIN|ARMS - cold_protection = CHEST|GROIN|ARMS - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - -// Donation reward for GoldenAlpharex -/obj/item/clothing/glasses/welding/steampunk_goggles - name = "steampunk goggles" - desc = "This really feels like something you'd expect to see sitting on top of a certain ginger's head... They have a rather fancy brass trim around the lenses." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/glasses.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/eyes.dmi' - icon_state = "goldengoggles" - slot_flags = ITEM_SLOT_EYES | ITEM_SLOT_HEAD // Making it fit in both first just so it can properly fit on the head slot in the loadout - flash_protect = FLASH_PROTECTION_NONE - flags_cover = GLASSESCOVERSEYES - custom_materials = null // Don't want that to go in the autolathe - visor_vars_to_toggle = 0 - tint = 0 - - /// Was welding protection added yet? - var/welding_upgraded = FALSE - /// Was welding protection toggled on, if welding_upgraded is TRUE? - var/welding_protection = FALSE - /// The sound played when toggling the shutters. - var/shutters_sound = 'sound/effects/clock_tick.ogg' - -/obj/item/clothing/glasses/welding/steampunk_goggles/Initialize(mapload) - . = ..() - visor_toggling() - -/obj/item/clothing/glasses/welding/steampunk_goggles/examine(mob/user) - . = ..() - if(welding_upgraded) - . += "It has been upgraded with welding shutters, which are currently [welding_protection ? "closed" : "opened"]." - -/obj/item/clothing/glasses/welding/steampunk_goggles/item_action_slot_check(slot, mob/user) - . = ..() - if(. && (slot & ITEM_SLOT_HEAD)) - return FALSE - -/obj/item/clothing/glasses/welding/steampunk_goggles/attack_self(mob/user) - if(user.get_item_by_slot(ITEM_SLOT_HEAD) == src) - to_chat(user, span_warning("You can't seem to slip those on your eyes from the top of your head!")) - return - . = ..() - -/obj/item/clothing/glasses/welding/steampunk_goggles/visor_toggling() - . = ..() - slot_flags = up ? ITEM_SLOT_EYES | ITEM_SLOT_HEAD : ITEM_SLOT_EYES - toggle_vision_effects() - -/obj/item/clothing/glasses/welding/steampunk_goggles/weldingvisortoggle(mob/user) - . = ..() - handle_sight_updating(user) - -/obj/item/clothing/glasses/welding/steampunk_goggles/attackby(obj/item/attacking_item, mob/living/user, params) - if(!istype(attacking_item, /obj/item/clothing/glasses/welding)) - return ..() - - if(welding_upgraded) - to_chat(user, span_warning("\The [src] was already upgraded to have welding protection!")) - return - qdel(attacking_item) - welding_upgraded = TRUE - to_chat(user, span_notice("You upgrade \the [src] with some welding shutters, offering you the ability to toggle welding protection!")) - actions += new /datum/action/item_action/toggle_steampunk_goggles_welding_protection(src) - -/// Proc that handles the whole toggling the welding protection on and off, with user feedback. -/obj/item/clothing/glasses/welding/steampunk_goggles/proc/toggle_shutters(mob/user) - if(!can_use(user) || !user) - return FALSE - if(!toggle_welding_protection(user)) - return FALSE - - to_chat(user, span_notice("You slide \the [src]'s welding shutters slider, [welding_protection ? "closing" : "opening"] them.")) - playsound(user, shutters_sound, 100, TRUE) - if(iscarbon(user)) - var/mob/living/carbon/carbon_user = user - carbon_user.head_update(src, forced = 1) - update_item_action_buttons() - return TRUE - -/// This is the proc that handles toggling the welding protection, while also making sure to update the sight of a mob wearing it. -/obj/item/clothing/glasses/welding/steampunk_goggles/proc/toggle_welding_protection(mob/user) - if(!welding_upgraded) - return FALSE - welding_protection = !welding_protection - - visor_vars_to_toggle = welding_protection ? VISOR_FLASHPROTECT | VISOR_TINT : initial(visor_vars_to_toggle) - toggle_vision_effects() - // We also need to make sure the user has their vision modified. We already checked that there was a user, so this is safe. - handle_sight_updating(user) - return TRUE - -/// Proc handling changing the flash protection and the tint of the goggles. -/obj/item/clothing/glasses/welding/steampunk_goggles/proc/toggle_vision_effects() - if(welding_protection) - if(visor_vars_to_toggle & VISOR_FLASHPROTECT) - flash_protect = up ? FLASH_PROTECTION_NONE : FLASH_PROTECTION_WELDER - else - flash_protect = FLASH_PROTECTION_NONE - tint = flash_protect - -/// Proc handling to update the sight of the user, while forcing an update_tint() call every time, due to how the welding protection toggle works. -/obj/item/clothing/glasses/welding/steampunk_goggles/proc/handle_sight_updating(mob/user) - if(user && (user.get_item_by_slot(ITEM_SLOT_HEAD) == src || user.get_item_by_slot(ITEM_SLOT_EYES) == src)) - user.update_sight() - if(iscarbon(user)) - var/mob/living/carbon/carbon_user = user - carbon_user.update_tint() - carbon_user.head_update(src, forced = TRUE) - -/obj/item/clothing/glasses/welding/steampunk_goggles/ui_action_click(mob/user, actiontype, is_welding_toggle = FALSE) - if(!is_welding_toggle) - return ..() - else - toggle_shutters(user) - -/// Action button for toggling the welding shutters (aka, welding protection) on or off. -/datum/action/item_action/toggle_steampunk_goggles_welding_protection - name = "Toggle Welding Shutters" - -/// We need to do a bit of code duplication here to ensure that we do the right kind of ui_action_click(), while keeping it modular. -/datum/action/item_action/toggle_steampunk_goggles_welding_protection/Trigger(trigger_flags) - if(!IsAvailable()) - return FALSE - if(SEND_SIGNAL(src, COMSIG_ACTION_TRIGGER, src) & COMPONENT_ACTION_BLOCK_TRIGGER) - return FALSE - if(!target || !istype(target, /obj/item/clothing/glasses/welding/steampunk_goggles)) - return FALSE - - var/obj/item/clothing/glasses/welding/steampunk_goggles/goggles = target - goggles.ui_action_click(owner, src, is_welding_toggle = TRUE) - return TRUE - -// End of the code for GoldenAlpharex's donator item :^) - -// Donation reward for MyGuy49 -/obj/item/clothing/suit/cloak/ashencloak - name = "ashen wastewalker cloak" - desc = "A cloak of advanced make. Clearly beyond what ashwalkers are capable of, it was probably pulled from a downed vessel or something. It seems to have been reinforced with goliath hide and watcher sinew, and the hood has been torn off." - icon_state = "ashencloak" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - body_parts_covered = CHEST|LEGS|ARMS - supports_variations_flags = NONE - -//Donation reward for Hacker T.Dog -/obj/item/clothing/head/nanotrasen_consultant/hubert - name = "CC ensign's cap" - desc = "A tailor made peaked cap, denoting the rank of Ensign." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi' - icon_state = "CCofficerhat" - -//Donation reward for Hacker T.Dog -/obj/item/clothing/suit/armor/vest/nanotrasen_consultant/hubert - name = "CC ensign's armoured vest" - desc = "A tailor made Ensign's armoured vest, providing the same protection - but in a more stylish fashion." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - icon_state = "CCvest" - -//Donation reward for Hacker T.Dog -/obj/item/clothing/under/rank/nanotrasen_consultant/hubert - name = "CC ensign's uniform" - desc = "A tailor-made Ensign's uniform, various medals and chains hang down from it." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - icon_state = "CCofficer" - -// Donation reward for Cherno_00 -/obj/item/clothing/head/costume/ushanka/frosty - name = "blue ushanka" - desc = "A dark blue ushanka with a hand-stitched snowflake on the front. Cool to the touch." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi' - icon_state = "fushankadown" - upsprite = "fushankaup" - downsprite = "fushankadown" - -// Donation reward for M97screwsyourparents -/obj/item/clothing/neck/cross - name = "silver cross" - desc = "A silver cross to be worn on a chain around your neck. Certain to bring you favour from up above." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/necklaces.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/neck.dmi' - icon_state = "cross" - -// Donation reward for gamerguy14948 -/obj/item/storage/belt/fannypack/occult - name = "trinket belt" - desc = "A belt covered in various trinkets collected through time. Doesn't look like there's much space for anything else nowadays." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/belts.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/belt.dmi' - icon_state = "occultfannypack" - worn_icon_state = "occultfannypack" - -// Donation reward for gamerguy14948 -/obj/item/clothing/under/occult - name = "occult collector's outfit" - desc = "A set of clothes fit for someone dapper that isn't afraid of getting dirty." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - icon_state = "occultoutfit" - supports_variations_flags = NONE - -// Donation reward for gamerguy14948 -/obj/item/clothing/head/hooded/occult - name = "hood" - desc = "Certainly makes you look more ominous." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi' - icon_state = "occulthood" - supports_variations_flags = NONE - -// Donation reward for gamerguy14948 -/obj/item/clothing/suit/hooded/occult - name = "occult collector's coat" - desc = "A big, heavy coat lined with leather and ivory cloth, adorned with a hood. It looks dusty." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - icon_state = "occultcoat" - hoodtype = /obj/item/clothing/head/hooded/occult - supports_variations_flags = NONE - -// Donation reward for Octus -/obj/item/clothing/mask/breath/vox/octus - name = "sinister visor" - desc = "Skrektastic." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi' - worn_icon_vox = 'modular_skyrat/master_files/icons/donator/mob/clothing/mask_vox.dmi' - icon_state = "death" - -// Donation reward for 1ceres -/obj/item/clothing/glasses/rosecolored - name = "rose-colored glasses" - desc = "Goggle-shaped glasses that seem to have a HUD-like feed in some odd line-based script. It doesn’t look like they were made by NT." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/glasses.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/eyes.dmi' - icon_state = "rose" - -// Donation reward for Fuzlet -/obj/item/card/fuzzy_license - name = "license to hug" - desc = "A very official looking license. Not actually endorsed by Nanotrasen." - icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi' - icon_state = "license" - - var/possible_types = list( - "hug", - "snuggle", - "cuddle", - "kiss", - "feed Dan Kelly", - "hoard Shinzo Shore", - "spoil friends", - "hold hands", - "have this license", - "squeak", - "cute", - "pat", - "administer plushies", - "distribute cookies", - "sex", - "weh") - -/obj/item/card/fuzzy_license/attack_self(mob/user) - if(Adjacent(user)) - user.visible_message(span_notice("[user] shows you: [icon2html(src, viewers(user))] [src.name]."), span_notice("You show \the [src.name].")) - add_fingerprint(user) - -/obj/item/card/fuzzy_license/attackby(obj/item/used, mob/living/user, params) - if(user.ckey != "fuzlet") - return - - if(istype(used, /obj/item/pen) || istype(used, /obj/item/toy/crayon)) - var/choice = input(user, "Select the license type", "License Type Selection") as null|anything in possible_types - if(!isnull(choice)) - name = "license to [choice]" - -// Donation reward for 1ceres -/obj/item/clothing/suit/jacket/gorlex_harness - name = "engine technician harness" - desc = "A blood-red engineering technician harness. You can't seem to figure out a use to it, but it seems to seal magnetically in some places." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - icon_state = "gorlexharness" - -// Donation reward for 1ceres -/obj/item/poster/korpstech - name = "Korps Genetics poster" - poster_type = /obj/structure/sign/poster/contraband/korpstech - icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi' - icon_state = "rolled_poster" - -/obj/structure/sign/poster/contraband/korpstech - name = "Korps Genetics" - desc = "This poster bears a huge, pink helix on it, with smaller text underneath it that reads 'The Korps institute, advancing the Genetics field since 2423!'" - icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi' - icon_state = "korpsposter" - -MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32) - -// Donation reward for Kay-Nite -/obj/item/clothing/glasses/eyepatch/rosecolored - name = "rose-colored eyepatch" - desc = "A customized eyepatch with a bright pink HUD floating in front of it. It looks like there's more to it than just an eyepatch, considering the materials it's made of." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/glasses.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/eyes.dmi' - icon_state = "rosepatch_R" - base_icon_state = "rosepatch" - -// Donation reward for Cimika -/obj/item/clothing/suit/toggle/labcoat/skyrat/tenrai - name = "Tenrai labcoat" - desc = "A labcoat crafted from a variety of pristine materials, sewn together with a frightening amount of skill. The fabric is aery, smooth as silk, and exceptionally pleasant to the touch. The golden stripes are visible in the dark, working as a beacon to the injured. A small label on the inside of it reads \"Tenrai Kitsunes Supremacy\"." - base_icon_state = "tenraicoat" - icon_state = "tenraicoat" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/toggle/labcoat/skyrat/tenrai/worn_overlays(mutable_appearance/standing, isinhands, icon_file) - . = ..() - if(!isinhands) - . += emissive_appearance(icon_file, "[icon_state]-emissive", src, alpha = src.alpha) - -//Donation reward for RealWinterFrost -/obj/item/clothing/neck/cloak/fluffycloak - name = "Cloak of the Fluffy One" - desc = "Hugs and kisses is only what this one knows, may their hugs be for all and not for their own \"For Fuffy Use Only\"." - icon_state = "fluffycloak" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/cloaks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/neck.dmi' - -/obj/item/clothing/neck/cloak/fluffycloak/worn_overlays(mutable_appearance/standing, isinhands, icon_file) - . = ..() - if(!isinhands) - . += emissive_appearance(icon_file, "[icon_state]-emissive", src, alpha = src.alpha) - - -/obj/item/clothing/mask/gas/larpswat - name = "Foam Force SWAT Mask" - desc = "What seems to be a SWAT mask at first, is actually a gasmask that has replica parts of a SWAT mask made from cheap plastic. Hey at least it looks good if you enjoy looking like a security larper." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi' - icon_state = "larpswat" - supports_variations_flags = NONE - -// Donation reward for Cimika, on behalf of tf4 -/obj/item/clothing/neck/fishpendant - name = "fish necklace" - desc = "A simple, silver necklace with a blue tuna pendant.\n\"L. Alazawi\" is inscribed on the back. You get the feeling it would go well with potatoes and green beans." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/necklaces.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/neck.dmi' - icon_state = "fishpendant" - -// Donation reward for Weredoggo -/obj/item/hairbrush/tactical - name = "tactical hairbrush" - desc = "Sometimes, after a brush with death, a good grooming is just the thing for tactical stress relief. " - icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi' - lefthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_left.dmi' - righthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_right.dmi' - icon_state = "tacticalbrush" - inhand_icon_state = "tacticalbrush" - -// Donation reward for ultimarifox -/obj/item/clothing/under/rank/security/head_of_security/alt/roselia - name = "black and red turtleneck" - desc = "A black turtleneck with red livery attached. Reminds you of a time before the color blue. It seems padded to hell and back as well." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - icon_state = "hosaltred" - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - worn_icon_digi = null - -/obj/item/clothing/glasses/hud/security/sunglasses/gars/giga/roselia - name = "red-tinted giga HUD gar glasses" - desc = "GIGA GAR glasses with a security hud implanted in the lens. Reminds you of a time before the color blue." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/glasses.dmi' - icon_state = "supergarsred" - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/eyes.dmi' - -//Donation reward for Konstyantyn -/obj/item/clothing/accessory/badge/holo/jade - name = "jade holobadge" - desc = "A strangely green holobadge. 'Lieutenant Uriah' is stamped onto it, above the letters JS." - icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/custom_w.dmi' - icon_state = "greenbadge" - -// Donation reward for Dudewithatude -/obj/item/clothing/suit/toggle/rainbowcoat - name = "rainbow coat" - desc = "A wonderfully brilliant coat that displays the color of the rainbow!" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - icon_state = "rainbowcoat" - base_icon_state = "rainbowcoat" - -// Donation reward for M97screwsyourparents -/obj/item/clothing/head/recruiter_cap - name = "recruiter cap" - desc = "Hey, free college!" - icon_state = "officerhat" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi' - worn_icon_state = "officerhat" - -// Donation reward for M97screwsyourparents -/obj/item/clothing/suit/toggle/recruiter_jacket - name = "recruiter jacket" - desc = "Hey, free college!" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - icon_state = "officerjacket" - base_icon_state = "officerjacket" - -// Donation reward for M97screwsyourparents -/obj/item/clothing/under/recruiter_uniform - name = "recruiter uniform" - desc = "Hey, free college!" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - icon_state = "oldmarine_whites" - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - worn_icon_digi = null - -//Donation reward for Tetrako -/obj/item/clothing/under/nt_idol_skirt - name = "\improper NT Idol's suitskirt" - desc = "This outfit resembles much the same as other ranking NT Officers, but comes with certain bells and whistles, like frills around the dress, slight puffs around the shoulders and most importantly, several golden buckles to accentuate the green! The only thing fit for NT's very own idols to wear!" - icon = 'icons/obj/clothing/under/centcom.dmi' - worn_icon = 'icons/mob/clothing/under/centcom.dmi' - icon_state = "centcom_skirt" - inhand_icon_state = "dg_suit" - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - body_parts_covered = CHEST|GROIN|ARMS - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -// Donation reward for SlippyJoe -/obj/item/clothing/accessory/hypno_watch - name = "cracked pocket watch" - desc = "A shining pocket watch, cast in gold and embossed with metallic swirls that almost seem amethyst under the right light... There's a button on the top to unlatch the front panel, although all that's inside is a layer of cracked glass, the argent hands stuck pointing to 7:07 PM. The brushed silver of these arrows almost seems to swirl if one's gaze lingers for too long. Despite its inert appearance, the eerie mechanical sound of gears turning and clicking in place seems to quietly ring out from the artifact. In the right hands..." - icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/custom_w.dmi' - lefthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_left.dmi' - righthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_right.dmi' - worn_icon_state = "pocketwatch" - icon_state = "pocketwatch" - inhand_icon_state = "pocketwatch" - var/list/spans = list("velvet") - actions_types = list(/datum/action/item_action/hypno_whisper) - -//TODO: make a component for all that various hypno stuff instead of adding it to items individually -/obj/item/clothing/accessory/hypno_watch/ui_action_click(mob/living/user, action) - if(!isliving(user) || !can_use(user)) - return - var/message = input(user, "Speak with a hypnotic whisper", "Whisper") - if(QDELETED(src) || QDELETED(user) || !message || !user.can_speak()) - return - user.whisper(message, spans = spans) - -/obj/item/clothing/accessory/hypno_watch/examine() - . = ..() - . += span_boldwarning("Who knows what it could be used for?") - -// Donation reward for BoisterousBeebz - -/obj/item/clothing/under/bubbly_clown/skirt - name = "bubbly clown dress" - desc = "A bright and cheerful clown dress, honk!" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - icon_state = "bubbly_clown_dress" - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - body_parts_covered = CHEST|GROIN|ARMS - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -// Donation reward for Sweetsoulbrother -/obj/item/coin/donator/marsoc - name = "MARSOC Challenge Coin" - desc = "This is a challenge coin given to all MARSOC members upon honorable separation from the Corps. \ - The coin has the insignia of the Marine Special Operations Command on one side, and the Sol Federation Marine Corps logo on the other. \ - This one has an engraving on the Marine Corps logo side, etched in a circle around it: \ - \"To Staff Sargent Henry Rockwell, for his exemplary service to the Special Operations community and his outstanding moral fiber \ - and shining example to the core values of the Sol Federation Marine Corps.\"" - icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi' - sideslist = list("MARSOC", "SFMC") - -// Donation reward for Kay-Nite -/obj/item/clothing/under/tactichill - name = "tactichill jacket" - desc = "The brighter variant of the tacticool clotheswear, for when you want to look even cooler than usual and still operate at the same time." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - icon_state = "tactichill" - -// Donation reward for thedragmeme -/obj/item/clothing/shoes/fancy_heels/drag - desc = "A fancy pair of high heels. Clack clack clack... definitely turning a lot of heads." - -/obj/item/clothing/shoes/fancy_heels/drag/Initialize(mapload) - . = ..() - AddComponent(/datum/component/squeak, list('modular_skyrat/modules/modular_items/lewd_items/sounds/highheel1.ogg' = 1, 'modular_skyrat/modules/modular_items/lewd_items/sounds/highheel2.ogg' = 1), 70) - -// Donation reward for Razurath - -/obj/item/clothing/under/bimpcap - name = "Formal Matte Black Captain Uniform" - desc = "A professional looking matte black uniform cladded with medals of distintive service and valor, only worn by the highest of station officials." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - icon_state = "bimpcap" - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -// Donation reward for Nikohyena -/obj/item/clothing/glasses/gold_aviators - name = "purple and gold aviators" - desc = "A round pair of gold aviator glasses, the lenses having been applied with a gem-like purple tint." - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/eyes.dmi' - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/glasses.dmi' - icon_state = "goldaviator" - -// Donation reward for Thedragmeme -/obj/item/clothing/under/caged_dress/skirt - name = "Caged Purple Dress" - desc = "A silky purple dress with a partially exposed crinoline underneath." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - icon_state = "caged_dress" - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - -// Donation reward for Thedragmeme -/obj/item/clothing/suit/short_coat - name = "Short Purple Coat" - desc = "A short black and purple coat, mostly used for asthetics then insulating the person wearing it." - icon_state = "short_coat" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - -// Donation reward for Thedragmeme -/obj/item/clothing/neck/flower_collar - name = "Flower Collar" - desc = "A purple collar with a dainty red flower attached to the right side of the item." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/necklaces.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/neck.dmi' - icon_state = "flower_collar" - -// Donation reward for Sigmar Alkahest -/obj/item/clothing/under/costume/skyrat/kimono/sigmar - name = "short-sleeved kimono" - desc = "A traditional ancient Earth Japanese Kimono. It's white with a gold trim and burnished gold ivy pattern." - icon_state = "kimono-gold" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - -// Donation reward for Sigmar Alkahest -/obj/item/clothing/head/hooded/sigmarcoat - name = "black raincoat hood" - desc = "Certainly makes you look more ominous." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi' - icon_state = "long-coat-hood" - supports_variations_flags = NONE - -// Donation reward for Sigmar Alkahest -/obj/item/clothing/suit/hooded/sigmarcoat - name = "black open-faced raincoat" - desc = "A light black raincoat. You didn't even know they're made in this color." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - icon_state = "long-coat" - hoodtype = /obj/item/clothing/head/hooded/sigmarcoat - supports_variations_flags = NONE - -// Donation reward for Sonicgotnuked - -/obj/item/clothing/gloves/ring/hypno/nuke - name = "suspiciously glossy ring" - desc = "This ring oozes with an assertive edge as sharp light bends along the smooth, black bronze. Like the finger that wears it, an exceptional amount of polish repels nearly all the light that glances along its surface. If you look closer, a slight golden hue indicates the precious metals inside the alloy." - icon = 'modular_skyrat/master_files/icons/obj/ring.dmi' - icon_state = "ringblack" - spans = list("glossy") - -//reward for SomeRandomOwl -/obj/item/clothing/head/costume/strigihat - name = "starry witch hat" - desc = "A cute witch hat typically worn by an owl-like teshari." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi' - worn_icon_teshari = 'modular_skyrat/master_files/icons/donator/mob/clothing/head_teshari.dmi' - icon_state = "strigihat" - -//Donation reward for Razurath -/obj/item/clothing/head/razurathhat - name = "Golden Nanotrasen Officer Cap" - desc = "A Nanotrasen officer cap. Now darker, golder, and cooler!" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi' - icon_state = "razurath_hat" - -//Donation reward for Razurath -/obj/item/clothing/suit/razurathcoat - name = "Golden Nanotrasen Officer Coat" - desc = "A fancy Nanotrasen officer coat. Now darker, golder, and cooler than ever!" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - icon_state = "razurath_coat" - -// Donation reward for MaSvedish -/obj/item/clothing/mask/holocigarette/masvedishcigar - name = "holocigar" - desc = "A soft buzzing device that, using holodeck technology, replicates a slow burn cigar. Now with less-shock technology." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi' - lefthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_left.dmi' - righthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_right.dmi' - inhand_icon_state = "masvedishcigar_off" - worn_icon_state = "masvedishcigar_off" - icon_state = "masvedishcigar_off" - icon_on = "masvedishcigar_on" - icon_off = "masvedishcigar_off" - -// Donation reward for LT3 -/obj/item/clothing/suit/armor/skyy - name = "silver jacket mk II" - desc = "A jacket for those with a commanding presence. Made of synthetic fabric, it's interwoven with a special alloy that provides extra protection and style." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - icon_state = "lt3_jacket" - inhand_icon_state = "syndicate-black" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/jacket/skyy - name = "silver jacket" - desc = "A jacket for those with a commanding presence. Made of synthetic fabric, it's interwoven with a special alloy that provides extra protection and style." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - icon_state = "lt3_jacket" - inhand_icon_state = "syndicate-black" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/under/pants/skyy - name = "silver jeans" - desc = "A pair of jeans for those with a commanding presence. Made of shining, silver denim, it's interwoven with a special alloy that provides extra protection and style." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform_digi.dmi' - lefthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_left.dmi' - righthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_right.dmi' - icon_state = "lt3_jeans" - inhand_icon_state = "lt3_jeans" - -/obj/item/clothing/gloves/skyy - name = "charcoal fingerless gloves" - desc = "Valuing form over function, these gloves barely cover more than the palm of your hand." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/gloves.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/hands.dmi' - icon_state = "lt3_gloves" - -// Donation reward for Lolpopomg101 -/obj/item/clothing/suit/hooded/colorblockhoodie - name = "color-block hoodie" - desc = "A soft pastel color-block hoodie from an unrecognizable brand." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - icon_state = "colorblockhoodie" - hoodtype = /obj/item/clothing/head/hooded/colorblockhoodie - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/head/hooded/colorblockhoodie - name = "hood" - desc = "Very soft on the inside!" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi' - icon_state = "colorblockhood" - flags_inv = HIDEHAIR - -/obj/item/clothing/suit/toggle/digicoat - toggle_noun = "holo-dislpay" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -//Public donation reward for Razurath -/obj/item/clothing/suit/toggle/digicoat/glitched - name = "hacked digicoat" - desc = "Glitched images display across the back. Cool!" - base_icon_state = "digicoat_glitched" - icon_state = "digicoat_glitched" - -/obj/item/clothing/suit/toggle/digicoat/nanotrasen - name = "nanotrasen digicoat" - desc = "A company jacket of popular design." - base_icon_state = "digicoat_nt" - icon_state = "digicoat_nt" - -/obj/item/clothing/suit/toggle/digicoat/interdyne - name = "interdyne digicoat" - desc = "A sinister colored jacket from a familiar company." - base_icon_state = "digicoat_interdyne" - icon_state = "digicoat_interdyne" - -/obj/item/clothing/suit/armor/hos/elofy - name = "solar admiral coat" - desc = "A traditional naval officer uniform of the late 63rd Expeditionary Fleet. This faithful recreation bears the admiral's crest of the Luna Wolves Legion. It is uniquely tailored to the form of a certain wolf girl." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - icon_state = "coat_blackblue" - inhand_icon_state = "hostrench" - blood_overlay_type = "coat" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - cold_protection = CHEST|GROIN|LEGS|ARMS - supports_variations_flags = NONE - uses_advanced_reskins = TRUE - unique_reskin = list( - "Black-Red" = list( - RESKIN_ICON_STATE = "coat_blackred", - RESKIN_WORN_ICON_STATE = "coat_blackred" - ), - "White-Red" = list( - RESKIN_ICON_STATE = "coat_whitered", - RESKIN_WORN_ICON_STATE = "coat_whitered" - ), - "White-Blue" = list( - RESKIN_ICON_STATE = "coat_whiteblue", - RESKIN_WORN_ICON_STATE = "coat_whiteblue" - ) - ) - -/obj/item/clothing/suit/armor/hos/elofy/examine_more(mob/user) - . = ..() - . += "It seems particularly soft and has subtle ballistic fibers intwined with the soft fabric that is perfectedly tailored to the body that wears it. Each golden engraving seems to reflect against your eyes with a slightly blinding flare. This is part of a full set of Luna Wolves Legion battle garb." - -/obj/item/clothing/gloves/elofy - name = "solar admiral gloves" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/gloves.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/hands.dmi' - icon_state = "gloves_black" - uses_advanced_reskins = TRUE - unique_reskin = list( - "White" = list( - RESKIN_ICON_STATE = "gloves_white", - RESKIN_WORN_ICON_STATE = "gloves_white" - ) - ) - -/obj/item/clothing/shoes/jackboots/elofy - name = "solar admiral boots" - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/feet.dmi' - icon_state = "boots_blackblue" - uses_advanced_reskins = TRUE - unique_reskin = list( - "Black-Red" = list( - RESKIN_ICON_STATE = "boots_blackred", - RESKIN_WORN_ICON_STATE = "boots_blackred" - ), - "White-Red" = list( - RESKIN_ICON_STATE = "boots_whitered", - RESKIN_WORN_ICON_STATE = "boots_whitered" - ), - "White-Blue" = list( - RESKIN_ICON_STATE = "boots_whiteblue", - RESKIN_WORN_ICON_STATE = "boots_whiteblue" - ) - ) - -// Donation reward for grasshand -/obj/item/clothing/under/rank/civilian/chaplain/divine_archer/noble - name = "noble gambeson" - desc = "These clothes make you feel a little closer to space." - -/obj/item/clothing/shoes/jackboots/noble - name = "noble boots" - desc = "These boots make you feel like you can walk on space." - icon_state = "archerboots" - inhand_icon_state = "archerboots" - -// Donation reward for nikotheguydude -/obj/item/clothing/suit/toggle/labcoat/medical/vic_dresscoat_donator - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi' - icon_state = "vickyred" - name = "nobility dresscoat" - desc = "An elaborate coat composed of a silky yet firm material. \ - The fabric is quite thin, and provides negligible protection or insulation, \ - but is pleasant on the skin.\nWhile extremely well made, it seems quite \ - fragile, and rather <i>expensive</i>. You get the feeling it might not \ - <b>survive a washing machine</b> without specialized treatment." - special_desc = "It's buttons are pressed with some kind of sigil - which, to those knowledgeable in \ - Tiziran politics or nobility, would be recognizable as the <b>Kor'Yesh emblem</b>, \ - a relatively <i>minor house of nobility</i> within <i>Tizira</i>.\n\n\ - On a closer inspection, it would appear the interior is modified with protective material and mounting points \ - most often found on medical labcoats." - limb_integrity = 100 // note that this is usually disabled by having it set to 0, so this is just strictly worse - body_parts_covered = CHEST|ARMS - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/suit/toggle/labcoat/medical/vic_dresscoat_donator/Initialize(mapload) - . = ..() - - qdel(GetComponent(/datum/component/toggle_icon)) // we dont have a toggle icon - -#define NOBILITY_DRESSCOAT_WASHING_CREDITS_NEEDED 2500 - -// this is based on an in-joke with the character whom inspires this donator item, where they need a fuckton of money to wash their coat. this takes it literally -/obj/item/clothing/suit/toggle/labcoat/medical/vic_dresscoat_donator/machine_wash(obj/machinery/washing_machine/washer) - - var/total_credits = 0 - var/list/obj/item/money_to_delete = list() - for (var/obj/item/holochip/chip in washer) - total_credits += chip.get_item_credit_value() - money_to_delete += chip - if (total_credits >= NOBILITY_DRESSCOAT_WASHING_CREDITS_NEEDED) - break - if (total_credits < NOBILITY_DRESSCOAT_WASHING_CREDITS_NEEDED) - for (var/obj/item/stack/spacecash/cash in washer) - total_credits += cash.get_item_credit_value() - money_to_delete += cash - if (total_credits >= NOBILITY_DRESSCOAT_WASHING_CREDITS_NEEDED) - break - - var/message - var/sound_effect_path - var/sound_effect_volume - if (total_credits >= NOBILITY_DRESSCOAT_WASHING_CREDITS_NEEDED) // all is well - message = span_notice("[src] seems to absorb the raw capital from its surroundings, and is successfully washed!") - sound_effect_path = 'sound/effects/whirthunk.ogg' - sound_effect_volume = 40 - for (var/obj/item/entry_to_delete as anything in money_to_delete) - qdel(entry_to_delete) - else // IT COSTS ME A THOUSAND CREDITS TO WASH THIS!! HALF MY BUDGET IS DRY CLEANING - message = span_warning("[src]'s delicate fabric is shredded by [washer]! How terrible!") - sound_effect_path = 'sound/effects/cloth_rip.ogg' - sound_effect_volume = 30 - for (var/zone as anything in cover_flags2body_zones(body_parts_covered)) - take_damage_zone(zone, limb_integrity * 1.1, BRUTE) // fucking shreds it - - var/turf/our_turf = get_turf(src) - our_turf.visible_message(message) - playsound(src, sound_effect_path, sound_effect_volume, FALSE) - - return ..() - -/obj/item/clothing/under/costume/dragon_maid - name = "dragon maid uniform" - desc = "A uniform for a kitchen maid, stylized to have draconic detailing." - icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' - worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi' - icon_state = "dragon_maid" - body_parts_covered = CHEST|GROIN - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - can_adjust = FALSE - -#undef NOBILITY_DRESSCOAT_WASHING_CREDITS_NEEDED - -// Donation reward for vexcint -/obj/item/clothing/head/anubite - name = "\improper Anubite headpiece" - desc = "A dark coloured headpiece with golden accents. Its features seem reminiscent of the god Anubis." - icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi' - icon_state = "anubite_headpiece" - worn_icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi' - worn_y_offset = 4 diff --git a/modular_skyrat/modules/customization/modules/hydroponics/grown/bananaspider.dm b/modular_skyrat/modules/customization/modules/hydroponics/grown/bananaspider.dm deleted file mode 100644 index 9fdf3ab1e19b0c..00000000000000 --- a/modular_skyrat/modules/customization/modules/hydroponics/grown/bananaspider.dm +++ /dev/null @@ -1,35 +0,0 @@ -/obj/item/seeds/banana/spider_banana - name = "pack of leggy banana seeds" - desc = "They're seeds that grow into banana trees. However, those bananas might be alive." - icon = 'modular_skyrat/master_files/icons/obj/hydroponics/seeds.dmi' - icon_state = "seed-spibanana" - species = "spibanana" - growing_icon = 'modular_skyrat/master_files/icons/obj/hydroponics/growing.dmi' - icon_grow = "spibanana-grow" - icon_dead = "spibanana-dead" - icon_harvest = "spibanana-harvest" - plantname = "Leggy Banana Tree" - product = /obj/item/food/grown/banana/banana_spider_spawnable - genes = list(/datum/plant_gene/trait/slip) - -/obj/item/food/grown/banana/banana_spider_spawnable - name = "banana spider" - desc = "You do not know what it is, but you can bet the clown would love it." - icon = 'modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi' - icon_state = "spibanana" - foodtypes = GORE | MEAT | RAW | FRUIT - var/awakening = FALSE - -/obj/item/food/grown/banana/banana_spider_spawnable/attack_self(mob/user) - if(awakening || isspaceturf(user.loc)) - return - to_chat(user, span_notice("You decide to wake up the banana spider...")) - awakening = TRUE - addtimer(CALLBACK(src, PROC_REF(spawnspider)), 8 SECONDS) - -/obj/item/food/grown/banana/banana_spider_spawnable/proc/spawnspider() - if(!QDELETED(src)) - var/mob/living/basic/banana_spider/banana_spider = new(get_turf(loc)) - banana_spider.visible_message(span_notice("The banana spider chitters as it stretches its legs")) - qdel(src) - diff --git a/modular_skyrat/modules/customization/modules/language/chitinclick.dm b/modular_skyrat/modules/customization/modules/language/chitinclick.dm deleted file mode 100644 index 3f16fe93195d67..00000000000000 --- a/modular_skyrat/modules/customization/modules/language/chitinclick.dm +++ /dev/null @@ -1,14 +0,0 @@ -/datum/language/moffic - name = "Chitin-Click" - desc = "A popular non-Human language that finds extensive use by various types of anthropomorphic invertebrates the likes of Mothpeople and other types of insects. It consists of complex flutters, chittering, antenna movements, and sparse guttural syllables. In modern Sol standard writing, some of its sounds have been compared to Ancient Swedish (Dating back to the Human 19th century)." - key = "C" - space_chance = 30 - //References some replaced languages. - syllables = list( - // Original - "chi", "cha", "at", "mo", "kli", "ac", "f", "cli", "fz", "fs", - // Buzzwords - "zz", "buzz", "ZZ", - // Moffic - "ø", "öh", "ää", "år", "käyt", "dår", "ån", "næ", "møt", "om", "när", - ) diff --git a/modular_skyrat/modules/customization/modules/language/skrell.dm b/modular_skyrat/modules/customization/modules/language/skrell.dm deleted file mode 100644 index e4ccfabb2a748c..00000000000000 --- a/modular_skyrat/modules/customization/modules/language/skrell.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/language/skrell - name = "Skrelluq" - desc = "Popularly known as \"Skrellian\" by foreigners, this newly-discovered language that the Skrell employ follows no traditional speech patterns. It relies on various differently-pitched warbles and low-frequency sound to construct different sentences, and is nearly inaudible to non-Skrell and anyone lacking an appropriate implant." - space_chance = 100 - flags = TONGUELESS_SPEECH - key = "K" - syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix","*","!") - default_priority = 90 - icon_state = "skrell" - icon = 'modular_skyrat/master_files/icons/misc/language.dmi' diff --git a/modular_skyrat/modules/customization/modules/language/vox.dm b/modular_skyrat/modules/customization/modules/language/vox.dm deleted file mode 100644 index 228a29fd5cf9fb..00000000000000 --- a/modular_skyrat/modules/customization/modules/language/vox.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/language/vox - name = "Vox Standard" - desc = "A form of hybrid encoded language employed by the biomechanical Vox species, characterized by sounding extremely annoying and irritating to those who don't recognize it. It usually requires an implant to be spoken in its entirety." - key = "V" - flags = TONGUELESS_SPEECH - space_chance = 40 - syllables = list("ti","ti","ti","hi","hi","ki","ki","ki","ki","ya","ta","ha","ka","ya", "yi", "chi","cha","kah","SKRE","AHK","EHK","RAWK","KRA","AAA","EEE","KI","II","KRI","KA") - icon_state = "vox-pidgin" - icon = 'modular_skyrat/master_files/icons/misc/language.dmi' - default_priority = 99 diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/preferences_setup.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/preferences_setup.dm deleted file mode 100644 index 543a0c15cc1de0..00000000000000 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/preferences_setup.dm +++ /dev/null @@ -1,252 +0,0 @@ -/* -/// Fully randomizes everything in the character. -/datum/preferences/proc/randomise_appearance_prefs(randomise_flags = ALL) - if(randomise_flags & RANDOMIZE_SPECIES) - var/rando_race = GLOB.species_list[pick(GLOB.roundstart_races)] - pref_species = new rando_race() - if(randomise_flags & RANDOMIZE_NAME) - real_name = pref_species.random_name(gender, TRUE) - -/// Randomizes the character according to preferences. -/datum/preferences/proc/apply_character_randomization_prefs(antag_override = FALSE) - return - -/datum/preferences/proc/random_species() - var/random_species_type = GLOB.species_list[pick(GLOB.roundstart_races)] - set_new_species(random_species_type) - if(randomise[RANDOM_NAME]) - real_name = pref_species.random_name(gender,1) - -///Setup the random hardcore quirks and give the character the new score prize. -/datum/preferences/proc/hardcore_random_setup(mob/living/carbon/human/character) - var/next_hardcore_score = select_hardcore_quirks() - character.hardcore_survival_score = next_hardcore_score ** 1.2 //30 points would be about 60 score - -/** - * Goes through all quirks that can be used in hardcore mode and select some based on a random budget. - * Returns the new value to be gained with this setup, plus the previously earned score. - **/ -/datum/preferences/proc/select_hardcore_quirks() - . = 0 - - var/quirk_budget = rand(8, 35) - - all_quirks = list() //empty it out - - var/list/available_hardcore_quirks = SSquirks.hardcore_quirks.Copy() - - while(quirk_budget > 0) - for(var/i in available_hardcore_quirks) //Remove from available quirks if its too expensive. - var/datum/quirk/available_quirk = i - if(available_hardcore_quirks[available_quirk] > quirk_budget) - available_hardcore_quirks -= available_quirk - - if(!available_hardcore_quirks.len) - break - - var/datum/quirk/picked_quirk = pick(available_hardcore_quirks) - - var/picked_quirk_blacklisted = FALSE - for(var/bl in SSquirks.quirk_blacklist) //Check if the quirk is blacklisted with our current quirks. quirk_blacklist is a list of lists. - var/list/blacklist = bl - if(!(picked_quirk in blacklist)) - continue - for(var/iterator_quirk in all_quirks) //Go through all the quirks we've already selected to see if theres a blacklist match - if((iterator_quirk in blacklist) && !(iterator_quirk == picked_quirk)) //two quirks have lined up in the list of the list of quirks that conflict with each other, so return (see quirks.dm for more details) - picked_quirk_blacklisted = TRUE - break - if(picked_quirk_blacklisted) - break - - if(picked_quirk_blacklisted) - available_hardcore_quirks -= picked_quirk - continue - - if(initial(picked_quirk.mood_quirk) && CONFIG_GET(flag/disable_human_mood)) //check for moodlet quirks - available_hardcore_quirks -= picked_quirk - continue - - all_quirks += initial(picked_quirk.name) - quirk_budget -= available_hardcore_quirks[picked_quirk] - . += available_hardcore_quirks[picked_quirk] - available_hardcore_quirks -= picked_quirk - - -/datum/preferences/proc/update_preview_icon() - // Determine what job is marked as 'High' priority, and dress them up as such. - var/datum/job/previewJob - var/highest_pref = 0 - for(var/job in job_preferences) - if(job_preferences[job] > highest_pref) - previewJob = SSjob.GetJob(job) - highest_pref = job_preferences[job] - - if(previewJob) - // Silicons only need a very basic preview since there is no customization for them. - if(istype(previewJob,/datum/job/ai)) - parent.show_character_previews(image('icons/mob/ai.dmi', icon_state = resolve_ai_icon(preferred_ai_core_display), dir = SOUTH)) - return - if(istype(previewJob,/datum/job/cyborg)) - parent.show_character_previews(image('icons/mob/robots.dmi', icon_state = "robot", dir = SOUTH)) - return - - // Set up the dummy for its photoshoot - var/mob/living/carbon/human/dummy/mannequin = generate_or_wait_for_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES) - apply_prefs_to(mannequin, TRUE) - - switch(preview_pref) - if(PREVIEW_PREF_JOB) - if(previewJob) - mannequin.job = previewJob.title - mannequin.dress_up_as_job(previewJob, TRUE) - mannequin.underwear_visibility = NONE - if(PREVIEW_PREF_LOADOUT) - mannequin.underwear_visibility = NONE - equip_preference_loadout(mannequin, TRUE, previewJob) - mannequin.underwear_visibility = NONE - if(PREVIEW_PREF_NAKED) - mannequin.underwear_visibility = UNDERWEAR_HIDE_UNDIES | UNDERWEAR_HIDE_SHIRT | UNDERWEAR_HIDE_SOCKS - mannequin.update_body() //Unfortunately, due to a certain case we need to update this just in case - - parent.show_character_previews(new /mutable_appearance(mannequin)) - unset_busy_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES) - -//SKYRAT SPECIFIC PROCS - -//This proc makes sure that we only have the parts that the species should have, add missing ones, remove extra ones(should any be changed) -//Also, this handles missing color keys -/datum/preferences/proc/validate_species_parts() - if(!pref_species) - return - - var/list/target_bodyparts = pref_species.default_mutant_bodyparts.Copy() - - //Remove all "extra" accessories - for(var/key in mutant_bodyparts) - if(!GLOB.sprite_accessories[key]) //That accessory no longer exists, remove it - mutant_bodyparts -= key - continue - if(!pref_species.default_mutant_bodyparts[key]) - mutant_bodyparts -= key - continue - if(!GLOB.sprite_accessories[key][mutant_bodyparts[key][MUTANT_INDEX_NAME]]) //The individual accessory no longer exists - mutant_bodyparts[key][MUTANT_INDEX_NAME] = pref_species.default_mutant_bodyparts[key] - validate_color_keys_for_part(key) //Validate the color count of each accessory that wasnt removed - - //Add any missing accessories - for(var/key in target_bodyparts) - if(!mutant_bodyparts[key]) - var/datum/sprite_accessory/SA - if(target_bodyparts[key] == ACC_RANDOM) - SA = random_accessory_of_key_for_species(key, pref_species) - else - SA = GLOB.sprite_accessories[key][target_bodyparts[key]] - var/final_list = list() - final_list[MUTANT_INDEX_NAME] = SA.name - final_list[MUTANT_INDEX_COLOR_LIST] = SA.get_default_color(features, pref_species) - mutant_bodyparts[key] = final_list - - if(!allow_advanced_colors) - reset_colors() - -/datum/preferences/proc/validate_color_keys_for_part(key) - var/datum/sprite_accessory/SA = GLOB.sprite_accessories[key][mutant_bodyparts[key][MUTANT_INDEX_NAME]] - var/list/colorlist = mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] - if(SA.color_src == USE_MATRIXED_COLORS && colorlist.len != 3) - mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] = SA.get_default_color(features, pref_species) - else if (SA.color_src == USE_ONE_COLOR && colorlist.len != 1) - mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] = SA.get_default_color(features, pref_species) - -/datum/preferences/proc/set_new_species(new_species_path) - pref_species = new new_species_path() - var/list/new_features = pref_species.get_random_features() //We do this to keep flavor text, genital sizes etc. - for(var/key in new_features) - features[key] = new_features[key] - mutant_bodyparts = pref_species.get_random_mutant_bodyparts(features) - body_markings = pref_species.get_random_body_markings(features) - if(pref_species.use_skintones) - features["uses_skintones"] = TRUE - //We reset the quirk-based stuff - augments = list() - all_quirks = list() - pref_scream = new /datum/scream_type/human - //Reset cultural stuff - pref_culture = pref_species.cultures[1] - pref_location = pref_species.locations[1] - pref_faction = pref_species.factions[1] - try_get_common_language() - validate_languages() - -/datum/preferences/proc/reset_colors() - for(var/key in mutant_bodyparts) - var/datum/sprite_accessory/SA = GLOB.sprite_accessories[key][mutant_bodyparts[key][MUTANT_INDEX_NAME]] - if(SA.always_color_customizable) - continue - mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] = SA.get_default_color(features, pref_species) - - for(var/zone in body_markings) - var/list/bml = body_markings[zone] - for(var/key in bml) - var/datum/body_marking/BM = GLOB.body_markings[key] - bml[key] = BM.get_default_color(features, pref_species) - -/datum/preferences/proc/equip_preference_loadout(mob/living/carbon/human/H, just_preview = FALSE, datum/job/choosen_job, blacklist, initial) - if(!ishuman(H)) - return - var/list/items_to_pack = list() - for(var/item_name in loadout) - var/datum/loadout_item/LI = GLOB.loadout_items[item_name] - var/obj/item/ITEM = LI.get_spawned_item(loadout[item_name]) - //Skip the item if the job doesn't match, but only if that not used for the preview - if(!just_preview && (choosen_job && LI.restricted_roles && !(choosen_job.title in LI.restricted_roles))) - continue - if(!H.equip_to_appropriate_slot(ITEM,blacklist=blacklist,initial=initial)) - if(!just_preview) - items_to_pack += ITEM - //Here we stick it into a bag, if possible - if(!H.equip_to_slot_if_possible(ITEM, ITEM_SLOT_BACKPACK, disable_warning = TRUE, bypass_equip_delay_self = TRUE, initial=initial)) - //Otherwise - on the ground - ITEM.forceMove(get_turf(H)) - else - qdel(ITEM) - return items_to_pack - -//This needs to be a seperate proc because the character could not have the proper backpack during the moment of loadout equip -/datum/preferences/proc/add_packed_items(mob/living/carbon/human/H, list/packed_items, del_on_fail = TRUE) - //Here we stick loadout items that couldn't be equipped into a bag. - var/obj/item/back_item = H.back - for(var/item in packed_items) - var/obj/item/ITEM = item - if(back_item) - ITEM.forceMove(back_item) - else if (del_on_fail) - qdel(ITEM) - else - ITEM.forceMove(get_turf(H)) - -//For creating consistent icons for human looking simple animals -/proc/get_flat_human_icon_skyrat(icon_id, datum/job/job, datum/species/species_to_set, dummy_key, showDirs = GLOB.cardinals, outfit_override = null) - var/static/list/humanoid_icon_cache = list() - if(icon_id && humanoid_icon_cache[icon_id]) - return humanoid_icon_cache[icon_id] - - var/mob/living/carbon/human/dummy/body = generate_or_wait_for_human_dummy(dummy_key) - - if(species_to_set) - body.set_species(species_to_set, TRUE) - - var/datum/outfit/outfit = outfit_override || job?.outfit - if(job) - body.dna.species.pre_equip_species_outfit(job, body, TRUE) - if(outfit) - body.equipOutfit(outfit, TRUE) - - var/icon/out_icon = icon('icons/effects/effects.dmi', "nothing") - for(var/D in showDirs) - var/icon/partial = getFlatIcon(body, defdir=D) - out_icon.Insert(partial,dir=D) - - humanoid_icon_cache[icon_id] = out_icon - dummy_key? unset_busy_human_dummy(dummy_key) : qdel(body) - return out_icon -*/ diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm deleted file mode 100644 index dd96f77df0251f..00000000000000 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm +++ /dev/null @@ -1,903 +0,0 @@ -GLOBAL_LIST_EMPTY(cached_mutant_icon_files) - -/// The flag to show that snouts should use the muzzled sprite. -#define SPRITE_ACCESSORY_USE_MUZZLED_SPRITE (1<<0) -/// The flag to show that this tail sprite can wag. -#define SPRITE_ACCESSORY_WAG_ABLE (1<<1) -/// The flag that controls whether or not this sprite accessory should force the wearer to hide its shoes. -#define SPRITE_ACCESSORY_HIDE_SHOES (1<<2) -/// The flag to that controls whether or not this sprite accessory should force worn facewear to use layers 5 (for glasses) and 4 (for masks and hats). -#define SPRITE_ACCESSORY_USE_ALT_FACEWEAR_LAYER (1<<3) - -/datum/sprite_accessory - ///Unique key of an accessory. All tails should have "tail", ears "ears" etc. - var/key = null - ///If an accessory is special, it wont get included in the normal accessory lists - var/special = FALSE - var/list/recommended_species - ///Which color we default to on acquisition of the accessory (such as switching species, default color for character customization etc) - ///You can also put down a a HEX color, to be used instead as the default - var/default_color - ///Set this to a name, then the accessory will be shown in preferences, if a species can have it. Most accessories have this - ///Notable things that have it set to FALSE are things that need special setup, such as genitals - var/generic - - /// For all the flags that you need to pass from a sprite_accessory to an organ, when it's linked to one. - /// (i.e. passing through the fact that a snout should or shouldn't use a muzzled sprite for head worn items) - var/flags_for_organ = NONE - - color_src = USE_ONE_COLOR - - ///Which layers does this accessory affect - var/relevent_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER, BODY_FRONT_UNDER_CLOTHES, ABOVE_BODY_FRONT_HEAD_LAYER) - - ///This is used to determine whether an accessory gets added to someone. This is important for accessories that are "None", which should have this set to false - var/factual = TRUE - - ///Use this as a type path to an organ that this sprite_accessory will be associated. Make sure the organ has 'mutantpart_info' set properly. - var/organ_type - - ///Set this to true to make an accessory appear as color customizable in preferences despite advanced color settings being off, will also prevent the accessory from being reset - var/always_color_customizable - ///Whether the accessory can have a special icon_state to render, i.e. wagging tails - var/special_render_case - ///Special case of whether the accessory should be shifted in the X dimension, check taur genitals for example - var/special_x_dimension - ///Special case of whether the accessory should have a different icon, check taur genitals for example - var/special_icon_case - ///Special case for MODsuit overlays - var/use_custom_mod_icon - ///Special case of applying a different color - var/special_colorize - ///If defined, the accessory will be only available to ckeys inside the list. ITS ASSOCIATIVE, ie. ("ckey" = TRUE). For speed - var/list/ckey_whitelist - ///Whether this feature is genetic, and thus modifiable by DNA consoles - var/genetic = FALSE - var/uses_emissives = FALSE - var/color_layer_names - /// If this sprite accessory will be inaccessable if ERP config is disabled - var/erp_accessory = FALSE - -/datum/sprite_accessory/New() - if(!default_color) - switch(color_src) - if(USE_ONE_COLOR) - default_color = DEFAULT_PRIMARY - if(USE_MATRIXED_COLORS) - default_color = DEFAULT_MATRIXED - else - default_color = "#FFFFFF" - if(name == "None") - factual = FALSE - if(color_src == USE_MATRIXED_COLORS && default_color != DEFAULT_MATRIXED) - default_color = DEFAULT_MATRIXED - if (color_src == USE_MATRIXED_COLORS) - color_layer_names = list() - if (!GLOB.cached_mutant_icon_files[icon]) - GLOB.cached_mutant_icon_files[icon] = icon_states(new /icon(icon)) - for (var/layer in relevent_layers) - var/layertext = layer == BODY_BEHIND_LAYER ? "BEHIND" : (layer == BODY_ADJ_LAYER ? "ADJ" : "FRONT") - if ("m_[key]_[icon_state]_[layertext]_primary" in GLOB.cached_mutant_icon_files[icon]) - color_layer_names["1"] = "primary" - if ("m_[key]_[icon_state]_[layertext]_secondary" in GLOB.cached_mutant_icon_files[icon]) - color_layer_names["2"] = "secondary" - if ("m_[key]_[icon_state]_[layertext]_tertiary" in GLOB.cached_mutant_icon_files[icon]) - color_layer_names["3"] = "tertiary" - -/datum/sprite_accessory/proc/is_hidden(mob/living/carbon/human/owner) - return FALSE - -/datum/sprite_accessory/proc/get_special_render_state(mob/living/carbon/human/H) - return null - -/datum/sprite_accessory/proc/get_special_render_key(mob/living/carbon/human/owner) - return key - -/datum/sprite_accessory/proc/get_special_render_colour(mob/living/carbon/human/H, passed_state) - return null - -/datum/sprite_accessory/proc/get_special_icon(mob/living/carbon/human/H, passed_state) - return icon - -/datum/sprite_accessory/proc/get_special_x_dimension(mob/living/carbon/human/H, passed_state) - return 0 - -// A proc for accessories which have 'use_custom_mod_icon' set to TRUE -/datum/sprite_accessory/proc/get_custom_mod_icon(mob/living/carbon/human/owner, mutable_appearance/appearance_to_use = null) - return null - -/datum/sprite_accessory/proc/get_default_color(list/features, datum/species/pref_species) //Needs features for the color information - var/list/colors - switch(default_color) - if(DEFAULT_PRIMARY) - colors = list(features["mcolor"]) - if(DEFAULT_SECONDARY) - colors = list(features["mcolor2"]) - if(DEFAULT_TERTIARY) - colors = list(features["mcolor3"]) - if(DEFAULT_MATRIXED) - colors = list(features["mcolor"], features["mcolor2"], features["mcolor3"]) - if(DEFAULT_SKIN_OR_PRIMARY) - if(pref_species && !(TRAIT_USES_SKINTONES in pref_species.inherent_traits)) - colors = list(features["skin_color"]) - else - colors = list(features["mcolor"]) - else - colors = list(default_color) - - return colors - -/datum/sprite_accessory/moth_markings - key = "moth_markings" - generic = "Moth markings" - // organ_type = /obj/item/organ/external/moth_markings // UNCOMMENT THIS IF THEY EVER FIX IT UPSTREAM, CAN'T BE BOTHERED TO FIX IT MYSELF - -/datum/sprite_accessory/moth_markings/is_hidden(mob/living/carbon/human/owner) - return FALSE - - -/datum/sprite_accessory/moth_antennae/none - name = "None" - icon_state = "none" - - -/datum/sprite_accessory/pod_hair - name = "None" - icon = 'modular_skyrat/master_files/icons/mob/species/podperson_hair.dmi' - icon_state = "None" - key = "pod_hair" - recommended_species = list(SPECIES_PODPERSON, SPECIES_PODPERSON_WEAK) - organ_type = /obj/item/organ/external/pod_hair - - -/datum/sprite_accessory/spines - key = "spines" - generic = "Spines" - icon = 'modular_skyrat/master_files/icons/mob/mutant_bodyparts.dmi' - special_render_case = TRUE - default_color = DEFAULT_SECONDARY - recommended_species = list(SPECIES_LIZARD, SPECIES_UNATHI, SPECIES_LIZARD_ASH, SPECIES_LIZARD_SILVER) - relevent_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER) - genetic = TRUE - organ_type = /obj/item/organ/external/spines - -/datum/sprite_accessory/spines/is_hidden(mob/living/carbon/human/wearer) - var/obj/item/organ/external/tail/tail = wearer.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) - if(!wearer.w_uniform && !wearer.wear_suit) - return FALSE - // Can hide if wearing uniform - if(key in wearer.try_hide_mutant_parts) - return TRUE - if(wearer.wear_suit) - // Exception for MODs - if(istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) - return FALSE - else if(!tail \ - || (wearer.wear_suit \ - && (wearer.wear_suit.flags_inv & HIDETAIL \ - || wearer.wear_suit.flags_inv & HIDESPINE) \ - ) - ) - return TRUE - -/datum/sprite_accessory/spines/get_special_render_state(mob/living/carbon/human/H) - var/obj/item/organ/external/tail/tail = H.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) - if(tail && tail.wag_flags & WAG_WAGGING) - return "[icon_state]_wagging" - return icon_state - -/datum/sprite_accessory/caps - key = "caps" - generic = "Caps" - color_src = USE_ONE_COLOR - organ_type = /obj/item/organ/external/cap - -/datum/sprite_accessory/body_markings - key = "body_markings" - generic = "Body Markings" - default_color = DEFAULT_TERTIARY - -/datum/sprite_accessory/legs - key = "legs" - generic = "Leg Type" - color_src = null - genetic = TRUE - -/datum/sprite_accessory/socks - icon = 'modular_skyrat/master_files/icons/mob/clothing/underwear.dmi' - use_static = TRUE - -/datum/sprite_accessory/socks/socks_norm - name = "Normal (Greyscale)" - icon_state = "white_norm" - use_static = null - -/datum/sprite_accessory/socks/stirrups_norm - name = "Normal Stirrups (Greyscale)" - icon_state = "socks_norm-stir" - use_static = null - -/datum/sprite_accessory/socks/socks_short - name = "Short (Greyscale)" - icon_state = "white_short" - use_static = null - - -/datum/sprite_accessory/socks/socks_knee - name = "Knee-high (Greyscale)" - icon_state = "white_knee" - use_static = null - -/datum/sprite_accessory/socks/stirrups_knee - name = "Knee-high Stirrups" - icon_state = "socks_knee-stir" - use_static = null - -/datum/sprite_accessory/socks/striped_knee - name = "Knee-high - Striped" - icon_state = "striped_knee" - use_static = null - -/datum/sprite_accessory/socks/thin_knee - name = "Knee-high - Thin" - icon_state = "thin_knee" - use_static = null - -/datum/sprite_accessory/socks/socks_thigh - name = "Thigh-high (Greyscale)" - icon_state = "white_thigh" - use_static = null - -/datum/sprite_accessory/socks/stirrups_thigh - name = "Thigh-high Stirrups (Greyscale)" - icon_state = "socks_thigh-stir" - use_static = null - -/datum/sprite_accessory/socks/striped_thigh - name = "Thigh-high (Striped)" - icon_state = "striped_thigh" - use_static = null - -/datum/sprite_accessory/socks/striped_thigh/stirrups - name = "Thigh-high (Striped Stirrups)" - icon_state = "striped_thigh-stir" - use_static = null - -/datum/sprite_accessory/socks/leggings/stirrups/gym - name = "Thigh-high Stirrups (black with stripe)" - icon_state = "leggings-stir-black" - use_static = TRUE - -/datum/sprite_accessory/socks/bee_thigh - name = "Thigh-high - Bee (Old)" - icon_state = "bee_thigh_old" - -/datum/sprite_accessory/socks/bee_knee - name = "Knee-high - Bee (Old)" - icon_state = "bee_knee_old" - -/datum/sprite_accessory/socks/christmas_norm - name = "Normal - Christmas" - icon_state = "christmas_norm" - -/datum/sprite_accessory/socks/candycaner_norm - name = "Normal - Red Candy Cane" - icon_state = "candycaner_norm" - -/datum/sprite_accessory/socks/candycaneg_norm - name = "Normal - Green Candy Cane" - icon_state = "candycaneg_norm" - -/datum/sprite_accessory/socks/christmas_knee - name = "Knee-High - Christmas" - icon_state = "christmas_knee" - -/datum/sprite_accessory/socks/candycaner_knee - name = "Knee-High - Red Candy Cane" - icon_state = "candycaner_knee" - -/datum/sprite_accessory/socks/candycaneg_knee - name = "Knee-High - Green Candy Cane" - icon_state = "candycaneg_knee" - -/datum/sprite_accessory/socks/christmas_thigh - name = "Thigh-high - Christmas" - icon_state = "christmas_thigh" - -/datum/sprite_accessory/socks/candycaner_thigh - name = "Thigh-high - Red Candy Cane" - icon_state = "candycaner_thigh" - -/datum/sprite_accessory/socks/candycaneg_thigh - name = "Thigh-high - Green Candy Cane" - icon_state = "candycaneg_thigh" - -/datum/sprite_accessory/socks/rainbow_thigh - name = "Thigh-high - Rainbow" - icon_state = "rainbow_thigh" - -/datum/sprite_accessory/socks/rainbow_knee - name = "Knee-high - Rainbow" - icon_state = "rainbow_knee" - -/datum/sprite_accessory/socks/rainbow_knee/stirrups - name = "Knee-high - Rainbow Stirrups" - icon_state = "rainbow_knee-stir" - -/datum/sprite_accessory/socks/rainbow_thigh/stirrups - name = "Thigh-high - Rainbow Stirrups" - icon_state = "rainbow_thigh-stir" - -/datum/sprite_accessory/socks/fishnet_thigh_sr //TG has one, but this one matches with several tops that I'll get whined to if I change soooo - name = "Thigh-high - Fishnet" - icon_state = "fishnet" - -/datum/sprite_accessory/socks/fishnet_thigh/alt - name = "Thigh-high - Fishnet (Greyscale)" - icon_state = "fishnet_alt" - use_static = null - -/datum/sprite_accessory/socks/pantyhose/stirrups - name = "Pantyhose Stirrups" - icon_state = "pantyhose-stir" - use_static = null - -/datum/sprite_accessory/socks/pantyhose_ripped - name = "Pantyhose - Ripped" - icon_state = "pantyhose_ripped" - use_static = null - -/datum/sprite_accessory/socks/pantyhose_ripped/stirrups - name = "Pantyhose - Ripped Stirrups" - icon_state = "pantyhose_ripped-stir" - use_static = null - -/datum/sprite_accessory/socks/stockings_ripped - name = "Stockings - Ripped" - icon_state = "stockings_ripped" - -/datum/sprite_accessory/socks/leggings - name = "Leggings" - icon_state = "leggings" - use_static = null - -/datum/sprite_accessory/socks/leggings/stirrups - name = "Leggings - Stirrups" - icon_state = "leggings-stir" - use_static = null - -/datum/sprite_accessory/socks/leggings/latex - name = "Socks - Latex" - icon_state = "socks_latex" - use_static = TRUE - erp_accessory = TRUE - -/datum/sprite_accessory/underwear - icon = 'modular_skyrat/master_files/icons/mob/clothing/underwear.dmi' - ///Whether the underwear uses a special sprite for digitigrade style (i.e. briefs, not panties). Adds a "_d" suffix to the icon state - var/has_digitigrade = FALSE - ///Whether this underwear includes a top (Because gender = FEMALE doesn't actually apply here.). Hides breasts, nothing more. - var/hides_breasts = FALSE - -/datum/sprite_accessory/underwear/male_bee - name = "Boxers - Bee" - icon_state = "bee_shorts" - has_digitigrade = TRUE - gender = MALE - use_static = TRUE - -/datum/sprite_accessory/underwear/panties_basic - name = "Panties - Basic" - icon_state = "panties" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_beekini - name = "Panties - Bee-kini" - icon_state = "panties_bee-kini" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/underwear/fishnet_lower - name = "Panties - Fishnet" - icon_state = "fishnet_lower" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/underwear/fishnet_lower/alt - name = "Panties - Fishnet (Greyscale)" - icon_state = "fishnet_lower_alt" - use_static = null - -/datum/sprite_accessory/underwear/female_beekini - name = "Panties - Bee-kini" - icon_state = "panties_bee-kini" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/underwear/female_commie - name = "Panties - Commie" - icon_state = "panties_commie" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/underwear/female_usastripe - name = "Panties - Freedom" - icon_state = "panties_assblastusa" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/underwear/female_kinky - name = "Panties - Kinky Black" - icon_state = "panties_kinky" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/underwear/panties_uk - name = "Panties - UK" - icon_state = "panties_uk" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/underwear/panties_neko - name = "Panties - Neko" - icon_state = "panties_neko" - gender = FEMALE - -/datum/sprite_accessory/underwear/panties_slim - name = "Panties - Slim" - icon_state = "panties_slim" - gender = FEMALE - -/datum/sprite_accessory/underwear/striped_panties - name = "Panties - Striped" - icon_state = "striped_panties" - gender = FEMALE - -/datum/sprite_accessory/underwear/panties_swimsuit - name = "Panties - Swimsuit" - icon_state = "panties_swimming" - gender = FEMALE - -/datum/sprite_accessory/underwear/panties_thin - name = "Panties - Thin" - icon_state = "panties_thin" - gender = FEMALE - -/datum/sprite_accessory/underwear/swimsuit_red - name = "Swimsuit, One Piece - Red" - icon_state = "swimming_red" - gender = FEMALE - use_static = TRUE - hides_breasts = TRUE - -/datum/sprite_accessory/underwear/swimsuit - name = "Swimsuit, One Piece - Black" - icon_state = "swimming_black" - gender = FEMALE - use_static = TRUE - hides_breasts = TRUE - -/datum/sprite_accessory/underwear/swimsuit_blue - name = "Swimsuit, One Piece - Striped Blue" - icon_state = "swimming_blue" - gender = FEMALE - use_static = TRUE - hides_breasts = TRUE - -/datum/sprite_accessory/underwear/thong - name = "Thong" - icon_state = "thong" - gender = FEMALE - -/datum/sprite_accessory/underwear/thong_babydoll - name = "Thong - Alt" - icon_state = "thong_babydoll" - gender = FEMALE - -/datum/sprite_accessory/underwear/chastbelt - name = "Chastity Belt" - icon_state = "chastbelt" - use_static = TRUE - erp_accessory = TRUE - -/datum/sprite_accessory/underwear/chastcage - name = "Chastity Cage" - icon_state = "chastcage" - use_static = null - erp_accessory = TRUE - -/datum/sprite_accessory/underwear/latex - name = "Panties - Latex" - icon_state = "panties_latex" - use_static = TRUE - erp_accessory = TRUE - -/datum/sprite_accessory/undershirt/lizared - name = "LIZARED Top" - icon_state = "lizared_top" - use_static = TRUE - -/datum/sprite_accessory/underwear/lizared - name = "LIZARED Underwear" - icon_state = "lizared" - use_static = TRUE - hides_breasts = TRUE - -/datum/sprite_accessory/underwear/boyshorts - name = "Boyshorts" - icon_state = "boyshorts" - has_digitigrade = TRUE - gender = FEMALE - -/datum/sprite_accessory/underwear/boyshorts_alt - name = "Boyshorts (Alt)" - icon_state = "boyshorts_alt" - gender = FEMALE - -/* - Adding hides_breasts to TG underwears where applicable -*/ - -/datum/sprite_accessory/underwear/swimsuit_onepiece - name = "One-Piece Swimsuit" - icon_state = "swim_onepiece" - gender = FEMALE - hides_breasts = TRUE - -/datum/sprite_accessory/underwear/swimsuit_strapless_onepiece - name = "Strapless One-Piece Swimsuit" - icon_state = "swim_strapless_onepiece" - gender = FEMALE - hides_breasts = TRUE -/datum/sprite_accessory/underwear/swimsuit_stripe - name = "Strapless Striped Swimsuit" - icon_state = "swim_stripe" - gender = FEMALE - hides_breasts = TRUE - - -/* - End of adding hides_breasts to TG stuff, start of adding has_digitigrade to TG stuff -*/ -/datum/sprite_accessory/underwear/male_briefs - has_digitigrade = TRUE - -/datum/sprite_accessory/underwear/male_boxers - has_digitigrade = TRUE - -/datum/sprite_accessory/underwear/male_stripe - has_digitigrade = TRUE - -/datum/sprite_accessory/underwear/male_midway - has_digitigrade = TRUE - -/datum/sprite_accessory/underwear/male_longjohns - has_digitigrade = TRUE - -/datum/sprite_accessory/underwear/male_hearts - has_digitigrade = TRUE - -/datum/sprite_accessory/underwear/male_commie - has_digitigrade = TRUE - -/datum/sprite_accessory/underwear/male_usastripe - has_digitigrade = TRUE - -/datum/sprite_accessory/underwear/male_uk - has_digitigrade = TRUE - -/* - End of adding has_digitigrade to TG stuff -*/ - - -/// BRAS and all the fun stuff of moving these about. -/datum/sprite_accessory/bra - icon = 'modular_skyrat/master_files/icons/mob/clothing/underwear.dmi' - use_static = FALSE - em_block = TRUE - -/datum/sprite_accessory/bra/nude - name = "Nude" - icon_state = null - gender = NEUTER - -/datum/sprite_accessory/bra/bra - name = "Bra" - icon_state = "bra" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/bra_alt - name = "Bra - Alt" - icon_state = "bra_alt" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/bra_thin - name = "Bra - Thin" - icon_state = "bra_thin" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/bra_kinky - name = "Bra - Kinky Black" - icon_state = "bra_kinky" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/bra/bra_freedom - name = "Bra - Freedom" - icon_state = "bra_assblastusa" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/bra/bra_commie - name = "Bra - Commie" - icon_state = "bra_commie" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/bra/bra_beekini - name = "Bra - Bee-kini" - icon_state = "bra_bee-kini" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/bra/bra_uk - name = "Bra - UK" - icon_state = "bra_uk" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/bra/bra_neko - name = "Bra - Neko" - icon_state = "bra_neko" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/hi_vis_bra - name = "Safekini" - icon_state = "hi_vis_bra" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/bra/halterneck_bra - name = "Bra - Halterneck" - icon_state = "halterneck_bra" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/halterneck_alt - name = "Bra - Halterneck (Alt)" - icon_state = "bra_swimming" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/sports_bra - name = "Bra, Sports" - icon_state = "sports_bra" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/sports_bra_alt - name = "Bra, Sports - Alt" - icon_state = "sports_bra_alt" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/bra_strapless - name = "Bra, Strapless" - icon_state = "bra_strapless" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/bra_latex - name = "Bra, Latex" - icon_state = "bra_latex" - gender = FEMALE - use_static = TRUE - erp_accessory = TRUE - -/datum/sprite_accessory/bra/striped_bra - name = "Bra - Striped" - icon_state = "striped_bra" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/sarashi - name = "Bra - Sarashi" - icon_state = "bandages" - gender = NEUTER - use_static = null - -/datum/sprite_accessory/bra/fishnet_sleeves - name = "Fishnet - Sleeved" - icon_state = "fishnet_sleeves" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/bra/fishnet_sleeves/alt - name = "Fishnet - Sleeved (Greyscale)" - icon_state = "fishnet_sleeves_alt" - use_static = null - -/datum/sprite_accessory/bra/fishnet_base - name = "Fishnet - Sleeveless" - icon_state = "fishnet_body" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/bra/fishnet_base/alt - name = "Fishnet - Sleeveless (Greyscale)" - icon_state = "fishnet_body_alt" - use_static = null - -/datum/sprite_accessory/bra/chastbra - name = "Chastity Bra" - icon_state = "chastbra" - gender = FEMALE - use_static = TRUE - erp_accessory = TRUE - -/datum/sprite_accessory/bra/pasties - name = "Pasties" - icon_state = "pasties" - gender = FEMALE - use_static = null - erp_accessory = TRUE - -/datum/sprite_accessory/bra/pasties_alt - name = "Pasties - Alt" - icon_state = "pasties_alt" - gender = FEMALE - use_static = null - erp_accessory = TRUE - -/datum/sprite_accessory/bra/shibari - name = "Shibari" - icon_state = "shibari" - gender = FEMALE - use_static = null - erp_accessory = TRUE - -/datum/sprite_accessory/bra/shibari_sleeves - name = "Shibari Sleeves" - icon_state = "shibari_sleeves" - gender = FEMALE - use_static = null - erp_accessory = TRUE - -/datum/sprite_accessory/bra/swimsuit - name = "Swimsuit Top" - icon_state = "bikini_bra" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/strapless_swimsuit - name = "Strapless Swimsuit Top" - icon_state = "strapless_biki_bra" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/strapless_swimsuit_alt - name = "Strapless Swimsuit Top (Alt)" - icon_state = "strapless_biki_bra_alt" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/binder - name = "Binder" - icon_state = "binder" - gender = MALE - use_static = null - -/datum/sprite_accessory/bra/binder/strapless - name = "Binder - Strapless" - icon_state = "binder_strapless" - -/datum/sprite_accessory/undershirt - icon = 'modular_skyrat/master_files/icons/mob/clothing/underwear.dmi' - use_static = TRUE - ///Whether this underwear includes a bottom (For Leotards and the likes) - var/hides_groin = FALSE - -/datum/sprite_accessory/undershirt/tanktop_alt - name = "Tank Top - Alt" - icon_state = "tanktop_alt" - use_static = null - -/datum/sprite_accessory/undershirt/tanktop_midriff - name = "Tank Top - Midriff" - icon_state = "tank_midriff" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/undershirt/tanktop_midriff_alt - name = "Tank Top - Midriff Halterneck" - icon_state = "tank_midriff_alt" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/undershirt/tankstripe - name = "Tank Top - Striped" - icon_state = "tank_stripes" - use_static = TRUE - -/datum/sprite_accessory/undershirt/tank_top_sun - name = "Tank top - Sun" - icon_state = "tank_sun" - use_static = TRUE - -/datum/sprite_accessory/undershirt/babydoll - name = "Babydoll" - icon_state = "babydoll" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/undershirt/corset - name = "Corset" - icon_state = "corset" - gender = FEMALE - use_static = TRUE - hides_groin = TRUE - -/datum/sprite_accessory/undershirt/bulletclub //4 life - name = "Shirt - Black Skull" - icon_state = "shirt_bc" - gender = NEUTER - -/datum/sprite_accessory/undershirt/striped - name = "Shirt - Black Stripes" - icon_state = "longstripe" - gender = NEUTER - use_static = TRUE - -/datum/sprite_accessory/undershirt/striped/blue - name = "Shirt - Blue Stripes" - icon_state = "longstripe_blue" - -/datum/sprite_accessory/undershirt/turtleneck - name = "Sweater - Turtleneck" - icon_state = "turtleneck" - use_static = null - gender = NEUTER - -/datum/sprite_accessory/undershirt/turtleneck/smooth - name = "Sweater - Smooth Turtleneck" - icon_state = "turtleneck_smooth" - -/datum/sprite_accessory/undershirt/turtleneck/sleeveless - name = "Sweater - Sleeveless Turtleneck" - icon_state = "turtleneck_sleeveless" - -/datum/sprite_accessory/undershirt/offshoulder - name = "Shirt - Off-Shoulder" - icon_state = "one_arm" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/undershirt/buttondown - name = "Shirt - Buttondown" - icon_state = "buttondown" - gender = NEUTER - use_static = null - -/datum/sprite_accessory/undershirt/buttondown/short_sleeve - name = "Shirt - Short Sleeved Buttondown" - icon_state = "buttondown_short" - -/datum/sprite_accessory/undershirt/leotard - name = "Shirt - Leotard" - icon_state = "leotard" - gender = FEMALE - use_static = null - hides_groin = TRUE - -/datum/sprite_accessory/undershirt/leotard/turtleneck - name = "Shirt - Turtleneck Leotard" - icon_state = "leotard_turtleneck" - -/datum/sprite_accessory/undershirt/leotard/turtleneck/sleeveless - name = "Shirt - Turtleneck Leotard Sleeveless" - icon_state = "leotard_turtleneck_sleeveless" diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ears.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ears.dm deleted file mode 100644 index b27d27bae0a9bf..00000000000000 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ears.dm +++ /dev/null @@ -1,405 +0,0 @@ -/datum/sprite_accessory/ears - key = "ears" - generic = "Ears" - organ_type = /obj/item/organ/external/ears // SET BACK TO THIS AS SOON AS WE GET EARS AS EXTERNAL ORGANS: organ_type = /obj/item/organ/internal/ears/mutant - relevent_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER) - color_src = USE_MATRIXED_COLORS - genetic = TRUE - -/datum/sprite_accessory/ears/is_hidden(mob/living/carbon/human/wearer) - if(!wearer.head) - return FALSE - - // Can hide if wearing hat - if(key in wearer.try_hide_mutant_parts) - return TRUE - - // Exception for MODs - if(istype(wearer.head, /obj/item/clothing/head/mod)) - return FALSE - - // Hide accessory if flagged to do so - if((wearer.head?.flags_inv & HIDEHAIR || wearer.wear_mask?.flags_inv & HIDEHAIR) \ - // This line basically checks if we FORCE accessory-ears to show, for items with earholes like Balaclavas and Luchador masks - && ((wearer.head && !(wearer.head.flags_inv & SHOWSPRITEEARS)) || (wearer.wear_mask && !(wearer.wear_mask?.flags_inv & SHOWSPRITEEARS)))) - return TRUE - - return FALSE - -/datum/sprite_accessory/ears/cat - recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_HUMANOID, SPECIES_GHOUL) - relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/ears/fox - color_src = USE_ONE_COLOR - - -/datum/sprite_accessory/ears/mutant - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/ears.dmi' - organ_type = /obj/item/organ/external/ears // SET BACK TO THIS AS SOON AS WE GET EARS AS EXTERNAL ORGANS: organ_type = /obj/item/organ/internal/ears/mutant - color_src = USE_MATRIXED_COLORS - recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_HUMANOID, SPECIES_GHOUL) - uses_emissives = TRUE - -/datum/sprite_accessory/ears/mutant/none - name = "None" - icon_state = "none" - color_src = null - factual = FALSE - -/datum/sprite_accessory/ears/mutant/big - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/ears_big.dmi' - -/datum/sprite_accessory/ears/mutant/vulpkanin - recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_VULP, SPECIES_HUMANOID, SPECIES_GHOUL) - -/datum/sprite_accessory/ears/mutant/tajaran - recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_TAJARAN, SPECIES_HUMANOID, SPECIES_GHOUL) - -/datum/sprite_accessory/ears/mutant/akula - recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_AQUATIC, SPECIES_AKULA, SPECIES_HUMANOID, SPECIES_GHOUL) - -/datum/sprite_accessory/ears/mutant/axolotl - name = "Axolotl" - icon_state = "axolotl" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/ears/mutant/bat - name = "Bat" - icon_state = "bat" - -/datum/sprite_accessory/ears/mutant/bear - name = "Bear" - icon_state = "bear" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/ears/mutant/bigwolf - name = "Big Wolf" - icon_state = "bigwolf" - -/datum/sprite_accessory/ears/mutant/bigwolfinner - name = "Big Wolf (ALT)" - icon_state = "bigwolfinner" - hasinner = TRUE - -/datum/sprite_accessory/ears/mutant/bigwolfdark //alphabetical sort ignored here for ease-of-use - name = "Dark Big Wolf" - icon_state = "bigwolfdark" - -/datum/sprite_accessory/ears/mutant/bigwolfinnerdark - name = "Dark Big Wolf (ALT)" - icon_state = "bigwolfinnerdark" - hasinner = TRUE - -/datum/sprite_accessory/ears/mutant/bunny - name = "Bunny" - icon_state = "bunny" - -/datum/sprite_accessory/ears/mutant/tajaran/catbig - name = "Cat, Big" - icon_state = "catbig" - -/datum/sprite_accessory/ears/mutant/tajaran/catnormal - name = "Cat, normal" - icon_state = "catnormal" - -/datum/sprite_accessory/ears/mutant/cow - name = "Cow" - icon_state = "cow" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/ears/mutant/curled - name = "Curled Horn" - icon_state = "horn1" - color_src = USE_ONE_COLOR - default_color = DEFAULT_TERTIARY - -/datum/sprite_accessory/ears/mutant/deer - name = "Deer (Antler)" - icon_state = "deer" - color_src = USE_ONE_COLOR - default_color = DEFAULT_TERTIARY - -/datum/sprite_accessory/ears/mutant/eevee - name = "Eevee" - icon_state = "eevee" - -/datum/sprite_accessory/ears/mutant/eevee_alt - name = "Eevee ALT" - icon_state = "eevee_alt" - color_src = USE_MATRIXED_COLORS - -/datum/sprite_accessory/ears/mutant/elf - name = "Elf" - icon_state = "elf" - color_src = USE_ONE_COLOR - default_color = DEFAULT_SKIN_OR_PRIMARY - -/datum/sprite_accessory/ears/mutant/elf/wide - name = "Wide Elf" - icon_state = "elfwide" - -/datum/sprite_accessory/ears/mutant/elf/broad - name = "Broad Elf" - icon_state = "elfbroad" - -/datum/sprite_accessory/ears/mutant/elf/longer - name = "Longer Elf" - icon_state = "elflonger" - -/datum/sprite_accessory/ears/mutant/elephant - name = "Elephant" - icon_state = "elephant" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/ears/mutant/fennec - name = "Fennec" - icon_state = "fennec" - -/datum/sprite_accessory/ears/mutant/fish - name = "Fish" - icon_state = "fish" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/ears/mutant/vulpkanin/fox - name = "Fox" - icon_state = "fox" - -/datum/sprite_accessory/ears/mutant/akula/hammerhead - name = "Hammerhead" - icon_state = "hammerhead" - -/datum/sprite_accessory/ears/mutant/husky - name = "Husky" - icon_state = "wolf" - -/datum/sprite_accessory/ears/mutant/jellyfish - name = "Jellyfish" - icon_state = "jellyfish" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/ears/mutant/kangaroo - name = "Kangaroo" - icon_state = "kangaroo" - -/datum/sprite_accessory/ears/mutant/lab - name = "Dog, Long" - icon_state = "lab" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/ears/mutant/murid - name = "Murid" - icon_state = "murid" - -/datum/sprite_accessory/ears/mutant/vulpkanin/otie - name = "Otusian" - icon_state = "otie" - -/datum/sprite_accessory/ears/mutant/protogen - name = "Protogen" - icon_state = "protogen" - -/datum/sprite_accessory/ears/mutant/rabbit - name = "Rabbit" - icon_state = "rabbit" - -/datum/sprite_accessory/ears/mutant/big/hare_large - name = "Rabbit (Large)" - icon_state = "bunny_large" - -/datum/sprite_accessory/ears/mutant/big/bunny_large - name = "Curved Rabbit Ears (Large)" - icon_state = "rabbit_large" - -/datum/sprite_accessory/ears/mutant/big/sandfox_large - name = "Sandfox (Large)" - icon_state = "sandfox_large" - -/datum/sprite_accessory/ears/mutant/pede - name = "Scolipede" - icon_state = "pede" - -/datum/sprite_accessory/ears/mutant/akula/sergal - name = "Sergal" - icon_state = "sergal" - -/datum/sprite_accessory/ears/mutant/skunk - name = "skunk" - icon_state = "skunk" - -/datum/sprite_accessory/ears/mutant/squirrel - name = "Squirrel" - icon_state = "squirrel" - -/datum/sprite_accessory/ears/mutant/vulpkanin/wolf - name = "Wolf" - icon_state = "wolf" - -/datum/sprite_accessory/ears/mutant/vulpkanin/perky - name = "Perky" - icon_state = "perky" - -/datum/sprite_accessory/ears/mutant/antenna_simple1 - name = "Insect antenna (coloring 2)" - icon_state = "antenna_simple1" - -/datum/sprite_accessory/ears/mutant/antenna_simple1_v2 - name = "Insect antenna (coloring 3)" - icon_state = "antenna_simple1v2" - -/datum/sprite_accessory/ears/mutant/antenna_simple2 - name = "Insect antenna 2 (coloring 2)" - icon_state = "antenna_simple2" - -/datum/sprite_accessory/ears/mutant/antenna_simple2_v2 - name = "Insect antenna 2 (coloring 3)" - icon_state = "antenna_simple2v2" - -/datum/sprite_accessory/ears/mutant/antenna_fuzzball - name = "Fuzzball antenna (coloring 2+3)" - icon_state = "antenna_fuzzball" - -/datum/sprite_accessory/ears/mutant/antenna_fuzzball_v2 - name = "Fuzzball antenna (coloring 3+1)" - icon_state = "antenna_fuzzballv2" - -/datum/sprite_accessory/ears/mutant/cobrahood - name = "Cobra Hood" - icon_state = "cobrahood" - -/datum/sprite_accessory/ears/mutant/cobrahoodears - name = "Cobra Hood (Ears)" - icon_state = "cobraears" - -/datum/sprite_accessory/ears/mutant/miqote - name = "Miqo'te" - icon_state = "miqote" - -/datum/sprite_accessory/ears/mutant/hare - name = "Hare" - icon_state = "rabbitalt" - -/datum/sprite_accessory/ears/mutant/bunnyalt - name = "Curved Rabbit Ears" - icon_state = "bunnyalt" - -/datum/sprite_accessory/ears/mutant/deerear - name = "Deer (ear)" - icon_state = "deerear" - -/datum/sprite_accessory/ears/mutant/teshari - recommended_species = list(SPECIES_TESHARI) - -/datum/sprite_accessory/ears/mutant/teshari/regular - name = "Teshari Regular" - icon_state = "teshari_regular" - -/datum/sprite_accessory/ears/mutant/teshari/feathers_bushy - name = "Teshari Feathers Bushy" - icon_state = "teshari_feathers_bushy" - -/datum/sprite_accessory/ears/mutant/teshari/feathers_mohawk - name = "Teshari Feathers Mohawk" - icon_state = "teshari_feathers_mohawk" - -/datum/sprite_accessory/ears/mutant/teshari/feathers_spiky - name = "Teshari Feathers Spiky" - icon_state = "teshari_feathers_spiky" - -/datum/sprite_accessory/ears/mutant/teshari/feathers_pointy - name = "Teshari Feathers Pointy" - icon_state = "teshari_feathers_pointy" - -/datum/sprite_accessory/ears/mutant/teshari/feathers_upright - name = "Teshari Feathers Upright" - icon_state = "teshari_feathers_upright" - -/datum/sprite_accessory/ears/mutant/teshari/feathers_mane - name = "Teshari Feathers Mane" - icon_state = "teshari_feathers_mane" - -/datum/sprite_accessory/ears/mutant/teshari/feathers_maneless - name = "Teshari Feathers Mane Fluffless" - icon_state = "teshari_feathers_maneless" - -/datum/sprite_accessory/ears/mutant/teshari/feathers_droopy - name = "Teshari Feathers Droopy" - icon_state = "teshari_feathers_droopy" - -/datum/sprite_accessory/ears/mutant/teshari/feathers_longway - name = "Teshari Feathers Longway" - icon_state = "teshari_feathers_longway" - -/datum/sprite_accessory/ears/mutant/teshari/feathers_tree - name = "Teshari Feathers Tree" - icon_state = "teshari_feathers_tree" - -/datum/sprite_accessory/ears/mutant/teshari/feathers_ponytail - name = "Teshari Feathers Ponytail" - icon_state = "teshari_feathers_ponytail" - -/datum/sprite_accessory/ears/mutant/teshari/feathers_mushroom - name = "Teshari Feathers Mushroom" - icon_state = "teshari_feathers_mushroom" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/ears/mutant/teshari/feathers_backstrafe - name = "Teshari Feathers Backstrafe" - icon_state = "teshari_feathers_backstrafe" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/ears/mutant/teshari/feathers_thinmohawk - name = "Teshari Feathers Thin Mohawk" - icon_state = "teshari_feathers_thinmohawk" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/ears/mutant/teshari/feathers_thin - name = "Teshari Feathers Thin" - icon_state = "teshari_feathers_thin" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/ears/mutant/teshari/feathers_thinmane - name = "Teshari Feathers Thin Mane" - icon_state = "teshari_feathers_thinmane" - -/datum/sprite_accessory/ears/mutant/teshari/feathers_thinmaneless - name = "Teshari Feathers Thin Mane Fluffless" - icon_state = "teshari_feathers_thinmaneless" - -/datum/sprite_accessory/ears/mutant/deer2 - name = "Deer 2" - icon_state = "deer2" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/ears/mutant/mouse - name = "Mouse" - icon_state = "mouse" - -/datum/sprite_accessory/ears/mutant/mouse_two - name = "Mouse II" - icon_state = "mouse_two" - -/datum/sprite_accessory/ears/mutant/big/fourears1 - name = "Four Ears 1" - icon_state = "four_ears_1" - -/datum/sprite_accessory/ears/mutant/fourears2 - name = "Four Ears 2" - icon_state = "four_ears_2" - -/datum/sprite_accessory/ears/mutant/big/fourears3 - name = "Four Ears 3" - icon_state = "four_ears_3" - -/datum/sprite_accessory/ears/acrador - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/ears_big.dmi' - color_src = USE_MATRIXED_COLORS - -/datum/sprite_accessory/ears/acrador/long - icon_state = "acrador_long" - name = "Acrador (Long)" - -/datum/sprite_accessory/ears/acrador/short - icon_state = "acrador_short" - name = "Acrador (Short)" diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/fluff.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/fluff.dm deleted file mode 100644 index 991a09f9bc598e..00000000000000 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/fluff.dm +++ /dev/null @@ -1,125 +0,0 @@ -/datum/sprite_accessory/fluff/moth - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/moth_fluff.dmi' - default_color = "#FFFFFF" - key = "fluff" - generic = "Fluff" - recommended_species = list(SPECIES_MOTH, SPECIES_MAMMAL, SPECIES_INSECT) - relevent_layers = list(BODY_ADJ_LAYER, BODY_FRONT_LAYER) - genetic = TRUE - organ_type = /obj/item/organ/external/fluff - -/datum/sprite_accessory/fluff/moth/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/fluff/moth/is_hidden(mob/living/carbon/human/human) - if((human.head?.flags_inv & HIDEHAIR) || (human.wear_mask?.flags_inv & HIDEHAIR)) - return TRUE - - return FALSE - -/datum/sprite_accessory/fluff/moth/plain - name = "Plain" - icon_state = "plain" - -/datum/sprite_accessory/fluff/moth/monarch - name = "Monarch" - icon_state = "monarch" - -/datum/sprite_accessory/fluff/moth/luna - name = "Luna" - icon_state = "luna" - -/datum/sprite_accessory/fluff/moth/atlas - name = "Atlas" - icon_state = "atlas" - -/datum/sprite_accessory/fluff/moth/reddish - name = "Reddish" - icon_state = "redish" - -/datum/sprite_accessory/fluff/moth/royal - name = "Royal" - icon_state = "royal" - -/datum/sprite_accessory/fluff/moth/gothic - name = "Gothic" - icon_state = "gothic" - -/datum/sprite_accessory/fluff/moth/lovers - name = "Lovers" - icon_state = "lovers" - -/datum/sprite_accessory/fluff/moth/whitefly - name = "White Fly" - icon_state = "whitefly" - -/datum/sprite_accessory/fluff/moth/punished - name = "Burnt Off" - icon_state = "punished" - locked = TRUE - -/datum/sprite_accessory/fluff/moth/firewatch - name = "Firewatch" - icon_state = "firewatch" - -/datum/sprite_accessory/fluff/moth/deathhead - name = "Deathshead" - icon_state = "deathhead" - -/datum/sprite_accessory/fluff/moth/poison - name = "Poison" - icon_state = "poison" - -/datum/sprite_accessory/fluff/moth/ragged - name = "Ragged" - icon_state = "ragged" - -/datum/sprite_accessory/fluff/moth/moonfly - name = "Moon Fly" - icon_state = "moonfly" - -/datum/sprite_accessory/fluff/moth/snow - name = "Snow" - icon_state = "snow" - -/datum/sprite_accessory/fluff/moth/oakworm - name = "Oak Worm" - icon_state = "oakworm" - -/datum/sprite_accessory/fluff/moth/jungle - name = "Jungle" - icon_state = "jungle" - -/datum/sprite_accessory/fluff/moth/witchwing - name = "Witch Wing" - icon_state = "witchwing" - -/datum/sprite_accessory/fluff/moth/insectm - name = "Insect male (Tertiary)" - icon_state = "insectm" - default_color = DEFAULT_TERTIARY - -/datum/sprite_accessory/fluff/moth/insectf - name = "Insect female (Tertiary)" - icon_state = "insectf" - default_color = DEFAULT_TERTIARY - -/datum/sprite_accessory/fluff/moth/fsnow - name = "Snow (Top)" - icon_state = "fsnow" - -/datum/sprite_accessory/fluff/moth/snowdual - name = "Snow (Dual-Color)" - icon_state = "snowdual" - color_src = USE_MATRIXED_COLORS - -/datum/sprite_accessory/fluff/moth/teshari - name = "Teshari Mane" - icon_state = "teshmane" - default_color = DEFAULT_TERTIARY - -/datum/sprite_accessory/fluff/moth/teshari/front - name = "Teshari Mane (Top)" - icon_state = "teshmane_top" - default_color = DEFAULT_TERTIARY diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/frills.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/frills.dm deleted file mode 100644 index 3ad2ddbf4923e8..00000000000000 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/frills.dm +++ /dev/null @@ -1,55 +0,0 @@ -/datum/sprite_accessory/frills - key = "frills" - generic = "Frills" - default_color = DEFAULT_SECONDARY - relevent_layers = list(BODY_ADJ_LAYER) - genetic = TRUE - organ_type = /obj/item/organ/external/frills - -/datum/sprite_accessory/frills/is_hidden(mob/living/carbon/human/human) - if((human.head?.flags_inv & HIDEEARS) || (key in human.try_hide_mutant_parts)) - return TRUE - - return FALSE - -/datum/sprite_accessory/frills/divinity - name = "Divinity" - icon_state = "divinity" - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/frills.dmi' - -/datum/sprite_accessory/frills/horns - name = "Horns" - icon_state = "horns" - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/frills.dmi' - -/datum/sprite_accessory/frills/hornsdouble - name = "Horns Double" - icon_state = "hornsdouble" - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/frills.dmi' - -/datum/sprite_accessory/frills/big - name = "Big" - icon_state = "big" - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/frills.dmi' - -/datum/sprite_accessory/frills/cobrahood - name = "Cobra Hood" - icon_state = "cobrahood" - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/frills.dmi' - color_src = USE_MATRIXED_COLORS - -/datum/sprite_accessory/frills/cobrahoodears - name = "Cobra Hood (Ears)" - icon_state = "cobraears" - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/frills.dmi' - color_src = USE_MATRIXED_COLORS - -/datum/sprite_accessory/frills/neckfrills - name = "Neck Frills" - icon_state = "neck" - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/frills.dmi' - -/datum/sprite_accessory/frills/neckfrillsfuller - name = "Neck Frills (Fuller)" - icon_state = "neckfull" - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/frills.dmi' diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm deleted file mode 100644 index f5d314f1793c5e..00000000000000 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm +++ /dev/null @@ -1,308 +0,0 @@ -/// The alternative `dimension_x` to use if it's a taur. -#define TAUR_DIMENSION_X 64 - -/datum/sprite_accessory/genital - special_render_case = TRUE - special_colorize = TRUE - var/associated_organ_slot - /// If true, then there should be a variant in the icon file that's slightly pinkier to match human base colors. - var/has_skintone_shading = FALSE - ///Where the genital is on the body. If clothing doesn't cover it, it shows up! - var/genital_location = GROIN - -/datum/sprite_accessory/genital/is_hidden(mob/living/carbon/human/target_mob) - var/obj/item/organ/external/genital/badonkers = target_mob.get_organ_slot(associated_organ_slot) - if(!badonkers) - return TRUE - switch(badonkers.visibility_preference) - if(GENITAL_ALWAYS_SHOW) //Never hidden - return FALSE - if(GENITAL_HIDDEN_BY_CLOTHES) //Hidden if the relevant body parts are covered by clothes or underwear - //Do they have a Uniform or Suit that covers them? - if((target_mob.w_uniform && target_mob.w_uniform.body_parts_covered & genital_location) || (target_mob.wear_suit && target_mob.wear_suit.body_parts_covered & genital_location)) - return TRUE - //Do they have a Hospital Gown covering them? (The gown has no body_parts_covered so needs its own check) - if(istype(target_mob.wear_suit, /obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown)) - return TRUE - - //Are they wearing an Undershirt? - if(target_mob.undershirt != "Nude" && !(target_mob.underwear_visibility & UNDERWEAR_HIDE_SHIRT)) - var/datum/sprite_accessory/undershirt/worn_undershirt = GLOB.undershirt_list[target_mob.undershirt] - //Does this Undershirt cover a relevant slot? - if(genital_location == CHEST) //(Undershirt always covers chest) - return TRUE - - else if(genital_location == GROIN && worn_undershirt.hides_groin) - return TRUE - - //Undershirt didn't cover them, are they wearing Underwear? - if(target_mob.underwear != "Nude" && !(target_mob.underwear_visibility & UNDERWEAR_HIDE_UNDIES)) - var/datum/sprite_accessory/underwear/worn_underwear = GLOB.underwear_list[target_mob.underwear] - //Does this Underwear cover a relevant slot? - if(genital_location == GROIN) //(Underwear always covers groin) - return TRUE - - else if(genital_location == CHEST && worn_underwear.hides_breasts) - return TRUE - - //Are they wearing a bra? - if(target_mob.bra != "Nude" && !(target_mob.underwear_visibility & UNDERWEAR_HIDE_BRA) && genital_location == CHEST) - return TRUE - - //Nothing they're wearing will cover them - else - return FALSE - - //If not always shown or hidden by clothes, then it defaults to always hidden - else - return TRUE - -/datum/sprite_accessory/genital/get_special_render_state(mob/living/carbon/human/human) - var/obj/item/organ/external/genital/genital = human.get_organ_slot(associated_organ_slot) - return "[genital?.sprite_suffix]" - -/datum/sprite_accessory/genital/get_special_render_colour(mob/living/carbon/human/human, render_state) - var/obj/item/organ/external/genital/genital = human.get_organ_slot(associated_organ_slot) - if(genital?.uses_skin_color && HAS_TRAIT(human, TRAIT_USES_SKINTONES)) - return skintone2hex(human.skin_tone) - -/datum/sprite_accessory/genital/penis - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/penis_onmob.dmi' - organ_type = /obj/item/organ/external/genital/penis - associated_organ_slot = ORGAN_SLOT_PENIS - key = ORGAN_SLOT_PENIS - color_src = USE_MATRIXED_COLORS - always_color_customizable = TRUE - center = TRUE - special_icon_case = TRUE - special_x_dimension = TRUE - //default_color = DEFAULT_SKIN_OR_PRIMARY //This is the price we're paying for sheaths - relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) - genetic = TRUE - var/can_have_sheath = TRUE - -/datum/sprite_accessory/genital/penis/get_special_icon(mob/living/carbon/human/target_mob) - var/taur_mode = target_mob?.get_taur_mode() - - if(!taur_mode || !target_mob.dna.features["penis_taur_mode"] || taur_mode & STYLE_TAUR_SNAKE) - return icon - - return 'modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/taur_penis_onmob.dmi' - -/datum/sprite_accessory/genital/penis/get_special_x_dimension(mob/living/carbon/human/target_mob) - var/taur_mode = target_mob?.get_taur_mode() - - if(!taur_mode || !target_mob.dna.features["penis_taur_mode"] || taur_mode & STYLE_TAUR_SNAKE) - return dimension_x - - return TAUR_DIMENSION_X - -/datum/sprite_accessory/genital/penis/none - icon_state = "none" - name = "None" - factual = FALSE - color_src = null - -/datum/sprite_accessory/genital/penis/human - icon_state = "human" - name = "Human" - color_src = USE_ONE_COLOR - default_color = DEFAULT_SKIN_OR_PRIMARY - has_skintone_shading = TRUE - can_have_sheath = FALSE - -/datum/sprite_accessory/genital/penis/nondescript - icon_state = "nondescript" - name = "Nondescript" - -/datum/sprite_accessory/genital/penis/knotted - icon_state = "knotted" - name = "Knotted" - -/datum/sprite_accessory/genital/penis/flared - icon_state = "flared" - name = "Flared" - -/datum/sprite_accessory/genital/penis/barbknot - icon_state = "barbknot" - name = "Barbed, Knotted" - -/datum/sprite_accessory/genital/penis/tapered - icon_state = "tapered" - name = "Tapered" - -/datum/sprite_accessory/genital/penis/tentacle - icon_state = "tentacle" - name = "Tentacled" - -/datum/sprite_accessory/genital/penis/hemi - icon_state = "hemi" - name = "Hemi" - -/datum/sprite_accessory/genital/penis/hemiknot - icon_state = "hemiknot" - name = "Knotted Hemi" - -/datum/sprite_accessory/genital/testicles - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/testicles_onmob.dmi' - organ_type = /obj/item/organ/external/genital/testicles - associated_organ_slot = ORGAN_SLOT_TESTICLES - key = ORGAN_SLOT_TESTICLES - always_color_customizable = TRUE - special_icon_case = TRUE - special_x_dimension = TRUE - default_color = DEFAULT_SKIN_OR_PRIMARY - relevent_layers = list(BODY_ADJ_LAYER, BODY_BEHIND_LAYER) - genetic = TRUE - var/has_size = TRUE - -/datum/sprite_accessory/genital/testicles/get_special_icon(mob/living/carbon/human/target_mob) - var/taur_mode = target_mob?.get_taur_mode() - - if(!taur_mode || !target_mob.dna.features["penis_taur_mode"] || taur_mode & STYLE_TAUR_SNAKE) - return icon - - return 'modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/taur_penis_onmob.dmi' - -/datum/sprite_accessory/genital/testicles/get_special_x_dimension(mob/living/carbon/human/target_mob) - var/taur_mode = target_mob?.get_taur_mode() - - if(!taur_mode || !target_mob.dna.features["penis_taur_mode"] || taur_mode & STYLE_TAUR_SNAKE) - return dimension_x - - return TAUR_DIMENSION_X - -/datum/sprite_accessory/genital/testicles/none - icon_state = "none" - name = "None" - factual = FALSE - color_src = null - -/datum/sprite_accessory/genital/testicles/pair - name = "Pair" - icon_state = "pair" - has_skintone_shading = TRUE - -/datum/sprite_accessory/genital/testicles/internal - name = "Internal" - icon_state = "none" - color_src = null - has_size = FALSE - -/datum/sprite_accessory/genital/vagina - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/vagina_onmob.dmi' - organ_type = /obj/item/organ/external/genital/vagina - associated_organ_slot = ORGAN_SLOT_VAGINA - key = ORGAN_SLOT_VAGINA - always_color_customizable = TRUE - default_color = "#FFCCCC" - relevent_layers = list(BODY_FRONT_LAYER) - genetic = TRUE - var/alt_aroused = TRUE - -/datum/sprite_accessory/genital/vagina/none - icon_state = "none" - name = "None" - factual = FALSE - color_src = null - -/datum/sprite_accessory/genital/vagina/human - icon_state = "human" - name = "Human" - -/datum/sprite_accessory/genital/vagina/tentacles - icon_state = "tentacle" - name = "Tentacle" - -/datum/sprite_accessory/genital/vagina/dentata - icon_state = "dentata" - name = "Dentata" - -/datum/sprite_accessory/genital/vagina/hairy - icon_state = "hairy" - name = "Hairy" - alt_aroused = FALSE - -/datum/sprite_accessory/genital/vagina/spade - icon_state = "spade" - name = "Spade" - alt_aroused = FALSE - -/datum/sprite_accessory/genital/vagina/furred - icon_state = "furred" - name = "Furred" - alt_aroused = FALSE - -/datum/sprite_accessory/genital/vagina/gaping - icon_state = "gaping" - name = "Gaping" - -/datum/sprite_accessory/genital/vagina/cloaca - icon_state = "cloaca" - name = "Cloaca" - -/datum/sprite_accessory/genital/womb - organ_type = /obj/item/organ/external/genital/womb - associated_organ_slot = ORGAN_SLOT_WOMB - key = ORGAN_SLOT_WOMB - genetic = TRUE - -/datum/sprite_accessory/genital/womb/none - icon_state = "none" - name = "None" - factual = FALSE - color_src = null - -/datum/sprite_accessory/genital/womb/normal - icon_state = "none" - name = "Normal" - color_src = null - -/datum/sprite_accessory/genital/anus - organ_type = /obj/item/organ/external/genital/anus - associated_organ_slot = ORGAN_SLOT_ANUS - key = ORGAN_SLOT_ANUS - genetic = TRUE - -/datum/sprite_accessory/genital/anus/none - icon_state = "none" - name = "None" - factual = FALSE - color_src = null - -/datum/sprite_accessory/genital/anus/normal - icon_state = "anus" - name = "Anus" - color_src = null - -/datum/sprite_accessory/genital/breasts - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/breasts_onmob.dmi' - organ_type = /obj/item/organ/external/genital/breasts - associated_organ_slot = ORGAN_SLOT_BREASTS - key = ORGAN_SLOT_BREASTS - always_color_customizable = TRUE - default_color = DEFAULT_SKIN_OR_PRIMARY - relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) - has_skintone_shading = TRUE - genital_location = CHEST - genetic = TRUE - -/datum/sprite_accessory/genital/breasts/none - icon_state = "none" - name = "None" - factual = FALSE - color_src = null - -/datum/sprite_accessory/genital/breasts/pair - icon_state = "pair" - name = "Pair" - -/datum/sprite_accessory/genital/breasts/quad - icon_state = "quad" - name = "Quad" - -/datum/sprite_accessory/genital/breasts/sextuple - icon_state = "sextuple" - name = "Sextuple" - -#undef TAUR_DIMENSION_X diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/spines.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/spines.dm deleted file mode 100644 index 04c028c8b0145e..00000000000000 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/spines.dm +++ /dev/null @@ -1,21 +0,0 @@ -/datum/sprite_accessory/spines/is_hidden(mob/living/carbon/human/wearer) - var/list/used_in_turf = list("tail") - // Emote exception - if(wearer.owned_turf?.name in used_in_turf) - return TRUE - - if(!wearer.w_uniform && !wearer.wear_suit) - return FALSE - if(key in wearer.try_hide_mutant_parts) - return TRUE - - if(wearer.wear_suit) - // Exception for MODs - if(istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) - return FALSE - - // Hide accessory if flagged to do so - else if(wearer.wear_suit.flags_inv & HIDETAIL) - return TRUE - - return FALSE diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm deleted file mode 100644 index 4831414ca85de3..00000000000000 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm +++ /dev/null @@ -1,435 +0,0 @@ -/datum/sprite_accessory/tails - key = "tail" - generic = "Tail" - organ_type = /obj/item/organ/external/tail - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/tails.dmi' - special_render_case = TRUE - special_colorize = TRUE - relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) - genetic = TRUE - /// Can we use this tail for the fluffy tail turf emote? - var/fluffy = FALSE - -/datum/sprite_accessory/tails/is_hidden(mob/living/carbon/human/wearer) - var/list/used_in_turf = list("tail") - if(wearer.owned_turf?.name in used_in_turf) - // Emote exception - return TRUE - - if(!wearer.w_uniform && !wearer.wear_suit) - return FALSE - if(key in wearer.try_hide_mutant_parts) - return TRUE - - if(wearer.wear_suit) - // Exception for MODs - if(istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) - return FALSE - // Hide accessory if flagged to do so - else if(wearer.wear_suit.flags_inv & HIDETAIL) - return TRUE - -/datum/sprite_accessory/tails/get_special_render_state(mob/living/carbon/human/wearer) - return icon_state - -/datum/sprite_accessory/tails/none - name = "None" - icon_state = "none" - recommended_species = list(SPECIES_SYNTH, SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_HUMANOID, SPECIES_GHOUL) - color_src = null - factual = FALSE - -/datum/sprite_accessory/tails/lizard - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/tails.dmi' - recommended_species = list(SPECIES_LIZARD, SPECIES_LIZARD_ASH, SPECIES_MAMMAL, SPECIES_UNATHI, SPECIES_LIZARD_SILVER) - organ_type = /obj/item/organ/external/tail/lizard - -/datum/sprite_accessory/tails/human - recommended_species = list(SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_MAMMAL, SPECIES_GHOUL) - organ_type = /obj/item/organ/external/tail/cat - -/datum/sprite_accessory/tails/human/cat - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/tails.dmi' - icon_state = "cat" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/tails/monkey/default - name = "Monkey" - icon_state = "monkey" - icon = 'icons/mob/human/species/monkey/monkey_tail.dmi' - recommended_species = list(SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_MAMMAL, SPECIES_MONKEY, SPECIES_GHOUL) - color_src = FALSE - organ_type = /obj/item/organ/external/tail/monkey - -/datum/sprite_accessory/tails/mammal - icon_state = "none" - recommended_species = list(SPECIES_MAMMAL,SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_HUMANOID, SPECIES_GHOUL) - organ_type = /obj/item/organ/external/tail/fluffy/no_wag - color_src = USE_MATRIXED_COLORS - -/datum/sprite_accessory/tails/mammal/wagging - organ_type = /obj/item/organ/external/tail/fluffy - flags_for_organ = SPRITE_ACCESSORY_WAG_ABLE - -/datum/sprite_accessory/tails/mammal/wagging/akula - recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_AKULA, SPECIES_AQUATIC, SPECIES_HUMANOID, SPECIES_GHOUL) - -/datum/sprite_accessory/tails/mammal/wagging/tajaran - recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_TAJARAN, SPECIES_HUMANOID, SPECIES_GHOUL) - -/datum/sprite_accessory/tails/mammal/teshari - recommended_species = list(SPECIES_TESHARI) - -/datum/sprite_accessory/tails/mammal/wagging/vulpkanin - recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_VULP, SPECIES_HUMANOID, SPECIES_GHOUL) - -/datum/sprite_accessory/tails/mammal/wagging/big - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/tails_big.dmi' - dimension_x = 64 - center = TRUE - -/datum/sprite_accessory/tails/mammal/wagging/avian - name = "Avian" - icon_state = "avian1" -/datum/sprite_accessory/tails/mammal/wagging/avian/alt - name = "Avian (Alt)" - icon_state = "avian2" - -/datum/sprite_accessory/tails/mammal/wagging/axolotl - name = "Axolotl" - icon_state = "axolotl" - -/datum/sprite_accessory/tails/mammal/wagging/bat_long - name = "Bat (Long)" - icon_state = "batl" - fluffy = TRUE - -/datum/sprite_accessory/tails/mammal/wagging/bat_short - name = "Bat (Short)" - icon_state = "bats" - -/datum/sprite_accessory/tails/mammal/wagging/cable - name = "Cable" - icon_state = "cable" - -/datum/sprite_accessory/tails/mammal/wagging/bee - name = "Bee" - icon_state = "bee" - -/datum/sprite_accessory/tails/mammal/wagging/queenbee - name = "Queen Bee" - icon_state = "queenbee" - -/datum/sprite_accessory/tails/mammal/wagging/tajaran/cat_big - name = "Cat (Big)" - icon_state = "catbig" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/tails/mammal/wagging/cat_double - name = "Cat (Double)" - icon_state = "twocat" - -/datum/sprite_accessory/tails/mammal/wagging/cat_triple - name = "Cat (Triple)" - icon_state = "threecat" - -/datum/sprite_accessory/tails/mammal/wagging/corvid - name = "Corvid" - icon_state = "crow" - -/datum/sprite_accessory/tails/mammal/wagging/cow - name = "Cow" - icon_state = "cow" - -/datum/sprite_accessory/tails/mammal/wagging/data_shark - name = "Data shark" - icon_state = "datashark" - -/datum/sprite_accessory/tails/mammal/deer - name = "Deer" - icon_state = "deer" - -/datum/sprite_accessory/tails/mammal/wagging/deer_two - name = "Deer II" - icon_state = "deer_two" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/tails/mammal/wagging/eevee - name = "Eevee" - icon_state = "eevee" - -/datum/sprite_accessory/tails/mammal/wagging/fennec - name = "Fennec" - icon_state = "fennec" - fluffy = TRUE - -/datum/sprite_accessory/tails/mammal/wagging/vulpkanin/fox - name = "Fox" - icon_state = "fox" - fluffy = TRUE - -/datum/sprite_accessory/tails/mammal/wagging/vulpkanin/fox/alt_1 - name = "Fox (Alt 1)" - icon_state = "fox2" - -/datum/sprite_accessory/tails/mammal/wagging/vulpkanin/fox/alt_2 - name = "Fox (Alt 2)" - icon_state = "fox3" - -/datum/sprite_accessory/tails/mammal/wagging/guilmon - name = "Guilmon" - icon_state = "guilmon" - -/datum/sprite_accessory/tails/mammal/wagging/hawk - name = "Hawk" - icon_state = "hawk" - -/datum/sprite_accessory/tails/mammal/wagging/horse - name = "Horse" - icon_state = "horse" - color_src = USE_ONE_COLOR - default_color = DEFAULT_PRIMARY - -/datum/sprite_accessory/tails/mammal/wagging/husky - name = "Husky" - icon_state = "husky" - fluffy = TRUE - -/datum/sprite_accessory/tails/mammal/wagging/insect - name = "Insect" - icon_state = "insect" - -/datum/sprite_accessory/tails/mammal/wagging/queeninsect - name = "Queen Insect" - icon_state = "queeninsect" - -/datum/sprite_accessory/tails/mammal/wagging/kangaroo - name = "Kangaroo" - icon_state = "kangaroo" - -/* -* KITSUNE -*/ - -/datum/sprite_accessory/tails/mammal/wagging/kitsune - name = "Kitsune" - icon_state = "kitsune" - fluffy = TRUE - -/datum/sprite_accessory/tails/mammal/wagging/lunasune - name = "Kitsune (Lunasune)" - icon_state = "lunasune" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/tails/mammal/wagging/kitsune/sabresune - name = "Kitsune (Sabresune)" - icon_state = "sabresune" - -/datum/sprite_accessory/tails/mammal/wagging/kitsune/septuple - name = "Kitsune (Septuple)" - icon_state = "sevenkitsune" - -/datum/sprite_accessory/tails/mammal/wagging/kitsune/tamamo - name = "Kitsune (Tamamo)" - icon_state = "9sune" - -/datum/sprite_accessory/tails/mammal/wagging/lab - name = "Labrador" - icon_state = "lab" - -/datum/sprite_accessory/tails/mammal/wagging/leopard - name = "Leopard" - icon_state = "leopard" - fluffy = TRUE - -/datum/sprite_accessory/tails/mammal/wagging/murid - name = "Murid" - icon_state = "murid" - -/datum/sprite_accessory/tails/mammal/wagging/murid_two - name = "Murid II" - icon_state = "murid_two" - -/datum/sprite_accessory/tails/mammal/wagging/orca - name = "Orca" - icon_state = "orca" - -/datum/sprite_accessory/tails/mammal/wagging/otie - name = "Otusian" - icon_state = "otie" - -/datum/sprite_accessory/tails/mammal/wagging/plug - name = "Plug" - icon_state = "plugtail" - -/datum/sprite_accessory/tails/mammal/wagging/plug/scorpion - name = "Scorpion Plug" - icon_state = "scorptail" - -/datum/sprite_accessory/tails/mammal/wagging/rabbit - name = "Rabbit" - icon_state = "rabbit" - -/datum/sprite_accessory/tails/mammal/wagging/rabbit/alt - name = "Rabbit (Alt)" - icon_state = "rabbit_alt" - -/datum/sprite_accessory/tails/mammal/raptor - name = "Raptor" - icon_state = "raptor" - -/datum/sprite_accessory/tails/mammal/wagging/red_panda - name = "Red Panda" - icon_state = "wah" - fluffy = TRUE - -/datum/sprite_accessory/tails/mammal/wagging/pede - name = "Scolipede" - icon_state = "pede" - -/datum/sprite_accessory/tails/mammal/wagging/segmented - name = "Segmented" - icon_state = "segmentedtail" - -/datum/sprite_accessory/tails/mammal/wagging/sergal - name = "Sergal" - icon_state = "sergal" - fluffy = TRUE - -/datum/sprite_accessory/tails/mammal/wagging/servelyn - name = "Servelyn" - icon_state = "tiger2" - -/datum/sprite_accessory/tails/mammal/wagging/big/shade - name = "Shade" - icon_state = "shadekin_large" - color_src = USE_MATRIXED_COLORS - -/datum/sprite_accessory/tails/mammal/wagging/big/shade/long - name = "Shade (Long)" - icon_state = "shadekinlong_large" - -/datum/sprite_accessory/tails/mammal/wagging/big/shade/striped - name = "Shade (Striped)" - icon_state = "shadekinlongstriped_large" - -/datum/sprite_accessory/tails/mammal/wagging/big/ringtail - name = "Ring Tail (Long)" - icon_state = "bigring_large" - color_src = USE_MATRIXED_COLORS - -/datum/sprite_accessory/tails/mammal/wagging/akula/akula - name = "Akula" - icon_state = "akula" - -/datum/sprite_accessory/tails/mammal/wagging/akula/shark - name = "Shark" - icon_state = "shark" - -/datum/sprite_accessory/tails/mammal/wagging/akula/shark_no_fin - name = "Shark (No Fin)" - icon_state = "sharknofin" - -/datum/sprite_accessory/tails/mammal/wagging/akula/fish - name = "Fish" - icon_state = "fish" - -/datum/sprite_accessory/tails/mammal/wagging/shepherd - name = "Shepherd" - icon_state = "shepherd" - -/datum/sprite_accessory/tails/mammal/wagging/skunk - name = "Skunk" - icon_state = "skunk" - fluffy = TRUE - -/datum/sprite_accessory/tails/mammal/wagging/snake - name = "Snake" - icon_state = "snaketail" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/tails/mammal/wagging/snake_dual - name = "Snake (Dual)" - icon_state = "snakedual" - -/datum/sprite_accessory/tails/mammal/wagging/snake_stripe - name = "Snake (Stripe)" - icon_state = "snakestripe" - -/datum/sprite_accessory/tails/mammal/wagging/snake_stripe_alt - name = "Snake (Stripe Alt)" - icon_state = "snakestripealt" - -/datum/sprite_accessory/tails/mammal/wagging/snake_under - name = "Snake (Undertail color)" - icon_state = "snakeunder" - -/datum/sprite_accessory/tails/mammal/wagging/squirrel - name = "Squirrel" - icon_state = "squirrel" - color_src = USE_ONE_COLOR - fluffy = TRUE - -/datum/sprite_accessory/tails/mammal/wagging/stripe - name = "Stripe" - icon_state = "stripe" - fluffy = TRUE - -/datum/sprite_accessory/tails/mammal/wagging/straight - name = "Straight Tail" - icon_state = "straighttail" - -/datum/sprite_accessory/tails/mammal/wagging/spade - name = "Succubus Spade Tail" - icon_state = "spade" - -/datum/sprite_accessory/tails/mammal/wagging/tailmaw - name = "Tailmaw" - icon_state = "tailmaw" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/tails/mammal/wagging/tailmaw/wag - name = "Tailmaw (Wag)" - icon_state = "tailmawwag" - -/datum/sprite_accessory/tails/mammal/wagging/tentacle - name = "Tentacle" - icon_state = "tentacle" - -/* -* TESHARI -*/ - -/datum/sprite_accessory/tails/mammal/teshari/default - name = "Teshari (Default)" - icon_state = "teshari_default" - -/datum/sprite_accessory/tails/mammal/teshari/fluffy - name = "Teshari (Fluffy)" - icon_state = "teshari_fluffy" -/datum/sprite_accessory/tails/mammal/teshari/thin - name = "Teshari (Thin)" - icon_state = "teshari_thin" - -/datum/sprite_accessory/tails/mammal/wagging/tiger - name = "Tiger" - icon_state = "tiger" - -/datum/sprite_accessory/tails/mammal/wagging/wolf - name = "Wolf" - icon_state = "wolf" - color_src = USE_ONE_COLOR - fluffy = TRUE - -/datum/sprite_accessory/tails/mammal/wagging/zorgoia - name = "Zorgoia tail" - icon_state = "zorgoia" - -/datum/sprite_accessory/tails/mammal/reptileslim - name = "Slim reptile" - icon_state = "reptileslim" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/tails/mammal/wagging/australian_shepherd - name = "Australian Shepherd" - icon_state = "australianshepherd" diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/vox.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/vox.dm deleted file mode 100644 index 32641b995417e0..00000000000000 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/vox.dm +++ /dev/null @@ -1,143 +0,0 @@ -//The snouts -/datum/sprite_accessory/snouts/vox - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/vox_snouts.dmi' - default_color = DEFAULT_SECONDARY - name = "Vox Snout" - icon_state = "vox" - recommended_species = list(SPECIES_VOX) - -//The hairstyles -/datum/sprite_accessory/hair/vox - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/vox_hair.dmi' - recommended_species = list(SPECIES_VOX) - -/datum/sprite_accessory/hair/vox/vox_afro - name = "Vox Afro" - icon_state = "hair_vox_afro" - -/datum/sprite_accessory/hair/vox/vox_crestedquills - name = "Vox Crested Quills" - icon_state = "hair_vox_crestedquills" - -/datum/sprite_accessory/hair/vox/vox_emperorquills - name = "Vox Emperor Quills" - icon_state = "hair_vox_emperorquills" - -/datum/sprite_accessory/hair/vox/vox_horns - name = "Vox Horns" - icon_state = "hair_vox_horns" - -/datum/sprite_accessory/hair/vox/vox_keelquills - name = "Vox Keel Quills" - icon_state = "hair_vox_keelquills" - -/datum/sprite_accessory/hair/vox/vox_keetquills - name = "Vox Keet Quills" - icon_state = "hair_vox_keetquills" - -/datum/sprite_accessory/hair/vox/vox_kingly - name = "Vox Kingly" - icon_state = "hair_vox_kingly" - -/datum/sprite_accessory/hair/vox/vox_mohawk - name = "Vox Mohawk" - icon_state = "hair_vox_mohawk" - -/datum/sprite_accessory/hair/vox/vox_nights - name = "Vox Nights" - icon_state = "hair_vox_nights" - -/datum/sprite_accessory/hair/vox/vox_razorclipped - name = "Vox Razor Clipped" - icon_state = "hair_vox_razorclipped" - -/datum/sprite_accessory/hair/vox/vox_razor - name = "Vox Razor" - icon_state = "hair_vox_razor" - -/datum/sprite_accessory/hair/vox/vox_shortquills - name = "Vox Short Quills" - icon_state = "hair_vox_shortquills" - -/datum/sprite_accessory/hair/vox/vox_tielquills - name = "Vox Tiel Quills" - icon_state = "hair_vox_tielquills" - -/datum/sprite_accessory/hair/vox/vox_yasu - name = "Vox Yasu" - icon_state = "hair_vox_yasu" - -/datum/sprite_accessory/hair/vox/surf - name = "Vox Surf" - icon_state = "vox_surf" - -/datum/sprite_accessory/hair/vox/cropped - name = "Vox Cropped" - icon_state = "vox_cropped" - -/datum/sprite_accessory/hair/vox/rows - name = "Vox Rows" - icon_state = "vox_rows" - -/datum/sprite_accessory/hair/vox/ponytail - name = "Vox Ponytail" - icon_state = "vox_pony" - -/datum/sprite_accessory/hair/vox/mange - name = "Vox Mange" - icon_state = "vox_mange" - -/datum/sprite_accessory/hair/vox/ruffhawk - name = "Vox Ruffhawk" - icon_state = "vox_ruffhawk" - -//The facial hairstyles -/datum/sprite_accessory/facial_hair/vox - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/vox_facial_hair.dmi' - recommended_species = list(SPECIES_VOX) - -/datum/sprite_accessory/facial_hair/vox/vox_beard - name = "Vox Beard" - icon_state = "facial_vox_beard" - -/datum/sprite_accessory/facial_hair/vox/vox_colonel - name = "Vox Beard (Colonel)" - icon_state = "facial_vox_colonel" - -/datum/sprite_accessory/facial_hair/vox/vox_fu - name = "Vox Beard (Fu)" - icon_state = "facial_vox_fu" - -/datum/sprite_accessory/facial_hair/vox/vox_neck - name = "Vox Neck Quills" - icon_state = "facial_vox_neck" - -/datum/sprite_accessory/facial_hair/vox/vox_mane - name = "Vox Mane" - icon_state = "facial_vox_mane" - -//The tail -/datum/sprite_accessory/tails/vox - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/vox_tails.dmi' - name = "Vox Tail" - icon_state = "vox" - recommended_species = list(SPECIES_VOX) - -//The tail markings -/datum/sprite_accessory/spines/vox - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/vox_spines.dmi' - default_color = DEFAULT_TERTIARY - recommended_species = list(SPECIES_VOX) - relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) - -/datum/sprite_accessory/spines/vox/vox_bands - name = "Vox Bands" - icon_state = "vox_bands" - -/datum/sprite_accessory/spines/vox/vox_tip - name = "Vox Tip" - icon_state = "vox_tip" - -/datum/sprite_accessory/spines/vox/vox_stripe - name = "Vox Stripe" - icon_state = "vox_stripe" diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/wings.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/wings.dm deleted file mode 100644 index c21b8859d21f74..00000000000000 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/wings.dm +++ /dev/null @@ -1,407 +0,0 @@ -/** -* Wings! -* -* When adding or making new wing sprites, try to use matrixed colors! -* You can find a color palette to work with in modular_skyrat\modules\customization\icons\mob\sprite_accessory\wings.dmi as 'colorpalette matrixcolors' -* Check some of the wings that make use of them for examples on how to make it look decent. -*/ -/datum/sprite_accessory/wings - icon = 'icons/mob/human/species/wings.dmi' - generic = "Wings" - key = "wings" - color_src = USE_ONE_COLOR - recommended_species = list(SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_LIZARD, SPECIES_MAMMAL) - organ_type = /obj/item/organ/external/wings - relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER, BODY_ADJ_LAYER) - genetic = TRUE - -/datum/sprite_accessory/wings/is_hidden(mob/living/carbon/human/wearer) - if(!wearer.w_uniform && !wearer.wear_suit) - return FALSE - // Can hide if wearing uniform - if(initial(key) in wearer.try_hide_mutant_parts) // initial because some of the wing types have different keys (wings_functional, wings_open, etc) - return TRUE - if(wearer.wear_suit) - // Exception for MODs - if(istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) - return FALSE - // Hide accessory if flagged to do so, taking species exceptions in account - else if((wearer.wear_suit.flags_inv & HIDEJUMPSUIT) \ - && (!wearer.wear_suit.species_exception \ - || !is_type_in_list(wearer.dna.species, wearer.wear_suit.species_exception)) \ - ) - return TRUE - - return FALSE - -/datum/bodypart_overlay/mutant/wings/can_draw_on_bodypart(mob/living/carbon/human/wearer, ignore_suit = FALSE) - if(!wearer.w_uniform && !wearer.wear_suit) - return ..() - - // Can hide if wearing uniform - if(feature_key in wearer.try_hide_mutant_parts) - return FALSE - - if(!ignore_suit && wearer.wear_suit) - // Exception for MODs - if(istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) - return TRUE - - // Hide accessory if flagged to do so, taking species exceptions in account - else if((wearer.wear_suit.flags_inv & HIDEJUMPSUIT) \ - && (!wearer.wear_suit.species_exception \ - || !is_type_in_list(src, wearer.wear_suit.species_exception)) \ - ) - return FALSE - - return TRUE - -/datum/sprite_accessory/wings/none - name = "None" - icon_state = "none" - factual = FALSE - -/* -* FLIGHT POTION WINGS -*/ - -/datum/sprite_accessory/wings/angel - color_src = USE_ONE_COLOR - default_color = "#FFFFFF" - locked = FALSE - -/datum/sprite_accessory/wings/fly - key = "wings_functional" - -/datum/sprite_accessory/wings/megamoth - color_src = USE_ONE_COLOR - default_color = "#FFFFFF" - key = "wings_functional" - -/datum/sprite_accessory/wings/mothra - key = "wings_functional" - -/datum/sprite_accessory/wings/robotic - locked = FALSE - -/datum/sprite_accessory/wings/skeleton - key = "wings_functional" - -/datum/sprite_accessory/wings/dragon - color_src = USE_ONE_COLOR - locked = FALSE - - -/datum/sprite_accessory/wings_open - key = "wings_open" - color_src = USE_ONE_COLOR - - -/datum/sprite_accessory/wings_open/is_hidden(mob/living/carbon/human/wearer) - if(!wearer.w_uniform && !wearer.wear_suit) - return FALSE - // Can hide if wearing uniform - if(key in wearer.try_hide_mutant_parts) - return TRUE - if(wearer.wear_suit) - // Exception for MODs - if(istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) - return FALSE - // Hide accessory if flagged to do so, taking species exceptions in account - else if((wearer.wear_suit.flags_inv & HIDEJUMPSUIT) \ - && (!wearer.wear_suit.species_exception \ - || !is_type_in_list(wearer.dna.species, wearer.wear_suit.species_exception)) \ - ) - return TRUE - - return FALSE - -/* -* MAMMAL -*/ - -/datum/sprite_accessory/wings/mammal - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/wings.dmi' - default_color = DEFAULT_PRIMARY - recommended_species = list(SPECIES_MAMMAL, SPECIES_LIZARD, SPECIES_INSECT) - relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) - dimension_x = 46 - dimension_y = 34 - center = TRUE - -/datum/sprite_accessory/wings/mammal/bat //TODO: port my sprite from hyper for this one - name = "Bat" - icon_state = "bat" - -/datum/sprite_accessory/wings/mammal/bee - name = "Bee" - icon_state = "bee" - -/datum/sprite_accessory/wings/mammal/beetle - name = "Beetle" - icon_state = "beetle" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/wings/mammal/dragon - color_src = USE_MATRIXED_COLORS - -/datum/sprite_accessory/wings/mammal/dragon/alt1 - name = "Dragon (Alt 1)" - icon_state = "dragonalt1" - -/datum/sprite_accessory/wings/mammal/dragon/alt2 - name = "Dragon (Alt 2)" - icon_state = "dragonalt2" - -/datum/sprite_accessory/wings/mammal/dragon/synth - name = "Dragon (Synthetic)" - icon_state = "dragonsynth" - genetic = FALSE - -/datum/sprite_accessory/wings/mammal/dragon/mechanical - name = "Dragon (Mechanical)" - icon_state = "robowing" - -/datum/sprite_accessory/wings/mammal/fairy - name = "Fairy" - icon_state = "fairy" - -/datum/sprite_accessory/wings/mammal/feathery - name = "Feathery" - icon_state = "feathery" - color_src = USE_MATRIXED_COLORS - -/datum/sprite_accessory/wings/mammal/feathery/alt1 - name = "Feathery (Alt 1)" - icon_state = "featheryalt1" - -/datum/sprite_accessory/wings/mammal/feathery/alt2 - name = "Feathery (Alt 2)" - icon_state = "featheryalt2" - -/datum/sprite_accessory/wings/mammal/harpy - name = "Harpy" - icon_state = "harpy" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/wings/mammal/top/harpy - name = "Harpy (Top)" - icon_state = "harpy_top" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/wings/mammal/harpy/alt - name = "Harpy (Alt)" - icon_state = "harpyalt" - -/datum/sprite_accessory/wings/mammal/harpy/alt/fluffless - name = "Harpy (Alt - Fluffless)" - icon_state = "harpyalt_fluffless" - -/datum/sprite_accessory/wings/mammal/harpy/bat - name = "Harpy (Bat)" - icon_state = "harpybat" - -/datum/sprite_accessory/wings/mammal/top/harpy/alt - name = "Harpy (Top - Alt)" - icon_state = "harpyalt_top" - -/datum/sprite_accessory/wings/mammal/top/harpy/alt/fluffless - name = "Harpy (Top - Alt - Fluffless)" - icon_state = "harpyalt_fluffless_top" - -/datum/sprite_accessory/wings/mammal/top/harpy/bat - name = "Harpy (Top - Bat)" - icon_state = "harpybat_top" - -/datum/sprite_accessory/wings/mammal/pterodactyl - name = "Pterodactyl" - icon_state = "pterodactyl" - color_src = USE_MATRIXED_COLORS - -/datum/sprite_accessory/wings/mammal/insect - name = "Insectoid" - icon_state = "insect" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/wings/mammal/mini - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/wings/mammal/mini/bat - name = "Mini-Bat" - icon_state = "minibat" - -/datum/sprite_accessory/wings/mammal/mini/feather - name = "Mini-Feathery" - icon_state = "minifeather" - -/datum/sprite_accessory/wings/mammal/spider - name = "Spider Legs" - icon_state = "spider_legs" - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/wings/mammal/succubus - name = "Succubus" - icon_state = "succubus" - color_src = USE_MATRIXED_COLORS - -/datum/sprite_accessory/wings/mammal/tiny - color_src = USE_ONE_COLOR - -/datum/sprite_accessory/wings/mammal/tiny/bat - name = "Tiny-Bat" - icon_state = "tinybat" - -/datum/sprite_accessory/wings/mammal/tiny/feather - name = "Tiny-Feathery" - icon_state = "tinyfeather" - -/* -* LOW WINGS -*/ - -/datum/sprite_accessory/wings/low_wings - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/wings.dmi' - name = "Low wings" - icon_state = "low" - dimension_x = 46 - dimension_y = 34 - center = TRUE - -/datum/sprite_accessory/wings/low_wings/top - name = "Low Wings (Top)" - icon_state = "low_top" - -/datum/sprite_accessory/wings/low_wings/tri - name = "Low Wings (Tri-Tone)" - icon_state = "low_tri" - color_src = USE_MATRIXED_COLORS - -/datum/sprite_accessory/wings/low_wings/tri/top - name = "Low Wings (Tri-Tone - Top)" - icon_state = "low_tri_top" - -/datum/sprite_accessory/wings/low_wings/jewel - name = "Low Wings Jeweled" - icon_state = "low_jewel" - color_src = USE_MATRIXED_COLORS - -/datum/sprite_accessory/wings/low_wings/jewel/top - name = "Low Wings Jeweled (Top)" - icon_state = "low_jewel_top" - -/* -* MOTH -*/ - -/datum/sprite_accessory/wings/moth - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/moth_wings.dmi' // Needs new icon to suit new naming convention - default_color = "#FFFFFF" - recommended_species = list(SPECIES_MOTH, SPECIES_MAMMAL, SPECIES_INSECT) // Mammals too, I guess. They wont get flight though, see the wing organs for that logic - organ_type = /obj/item/organ/external/wings/moth - relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) - -/datum/sprite_accessory/wings/moth/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/wings/moth/atlas - name = "Moth (Atlas)" - icon_state = "atlas" - -/datum/sprite_accessory/wings/moth/brown - name = "Moth (Brown)" - icon_state = "brown" - -/datum/sprite_accessory/wings/moth/burnt - name = "Moth (Burnt)" - icon_state = "burnt_off" - locked = TRUE - -/datum/sprite_accessory/wings/moth/deathhead - name = "Moth (Deathshead)" - icon_state = "deathhead" - -/datum/sprite_accessory/wings/moth/featherful // Is actually 'feathery' on upstream - name = "Moth (Featherful)" - icon_state = "featherful" - -/datum/sprite_accessory/wings/moth/firewatch - name = "Moth (Firewatch)" - icon_state = "firewatch" - -/datum/sprite_accessory/wings/moth/gothic - name = "Moth (Gothic)" - icon_state = "gothic" - -/datum/sprite_accessory/wings/moth/jungle - name = "Moth (Jungle)" - icon_state = "jungle" - -/datum/sprite_accessory/wings/moth/lovers - name = "Moth (Lovers)" - icon_state = "lovers" - -/datum/sprite_accessory/wings/moth/luna - name = "Moth (Luna)" - icon_state = "luna" - -/datum/sprite_accessory/wings/moth/monarch - name = "Moth (Monarch)" - icon_state = "monarch" - -/datum/sprite_accessory/wings/moth/moonfly - name = "Moth (Moon Fly)" - icon_state = "moonfly" - -/datum/sprite_accessory/wings/moth/oakworm - name = "Moth (Oak Worm)" - icon_state = "oakworm" - -/datum/sprite_accessory/wings/moth/plain - name = "Moth (Plain)" - icon_state = "plain" - -/datum/sprite_accessory/wings/moth/plasmafire - name = "Moth (Plasmafire)" - icon_state = "plasmafire" - -/datum/sprite_accessory/wings/moth/poison - name = "Moth (Poison)" - icon_state = "poison" - -/datum/sprite_accessory/wings/moth/ragged - name = "Moth (Ragged)" - icon_state = "ragged" - -/datum/sprite_accessory/wings/moth/reddish - name = "Moth (Reddish)" - icon_state = "redish" - -/datum/sprite_accessory/wings/moth/rosy - name = "Moth (Rosy)" - icon_state = "rosy" - -/datum/sprite_accessory/wings/moth/royal - name = "Moth (Royal)" - icon_state = "royal" - -/datum/sprite_accessory/wings/moth/snow - name = "Moth (Snow)" - icon_state = "snow" - -/datum/sprite_accessory/wings/moth/whitefly - name = "Moth (White Fly)" - icon_state = "whitefly" - -/datum/sprite_accessory/wings/moth/witchwing - name = "Moth (Witch Wing)" - icon_state = "witchwing" - -/datum/sprite_accessory/wings/moth/moffra - name = "Moth (Moffra)" - icon_state = "moffra" - -/datum/sprite_accessory/wings/mammal/top/arfel_harpy - name = "Arfel Harpy" - icon_state = "arfelharpy_top" - color_src = USE_ONE_COLOR diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/xeno.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/xeno.dm deleted file mode 100644 index 1309d2fb5d7302..00000000000000 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/xeno.dm +++ /dev/null @@ -1,71 +0,0 @@ -/datum/sprite_accessory/xenodorsal - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/xeno_parts.dmi' - generic = "Dorsal Spines" - key = "xenodorsal" - color_src = USE_ONE_COLOR - relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) - genetic = TRUE - organ_type = /obj/item/organ/external/xenodorsal - -/datum/sprite_accessory/xenodorsal/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/xenodorsal/standard - name = "Standard" - icon_state = "standard" - -/datum/sprite_accessory/xenodorsal/royal - name = "Royal" - icon_state = "royal" - -/datum/sprite_accessory/xenodorsal/down - name = "Dorsal Down" - icon_state = "down" - -/datum/sprite_accessory/xenodorsal/is_hidden(mob/living/carbon/human/wearer) - if(!wearer.w_uniform && !wearer.wear_suit) - return FALSE - // Can hide if wearing uniform - if(key in wearer.try_hide_mutant_parts) - return TRUE - if(wearer.wear_suit) - // Exception for MODs - if(istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) - return FALSE - -//TAILS -/datum/sprite_accessory/tails/mammal/wagging/xeno_tail - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/xeno_parts.dmi' - name = "Xenomorph Tail" - icon_state = "xeno" - recommended_species = list(SPECIES_XENO) - -//HEADS -/datum/sprite_accessory/xenohead - icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/xeno_parts.dmi' - generic = "Caste Head" - key = "xenohead" - relevent_layers = list(BODY_ADJ_LAYER) - genetic = TRUE - organ_type = /obj/item/organ/external/xenohead - -/datum/sprite_accessory/xenohead/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/xenohead/standard - name = "Standard" - icon_state = "standard" - -/datum/sprite_accessory/xenohead/royal - name = "Royal" - icon_state = "royal" - -/datum/sprite_accessory/xenohead/net - name = "Nethead" - icon_state = "net" - -/datum/sprite_accessory/xenohead/warrior - name = "Warrior" - icon_state = "warrior" diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/human.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/human.dm deleted file mode 100644 index 78c597e7864e51..00000000000000 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/human.dm +++ /dev/null @@ -1,247 +0,0 @@ -// This DMI holds our radial icons for the 'hide mutant parts' verb -#define HIDING_RADIAL_DMI 'modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/radial.dmi' - -/mob/living/carbon/human - var/static/list/possible_genitals = list(ORGAN_SLOT_PENIS, ORGAN_SLOT_TESTICLES, ORGAN_SLOT_VAGINA, ORGAN_SLOT_BREASTS, ORGAN_SLOT_ANUS) - -/mob/living/carbon/human/Topic(href, href_list) - . = ..() - - if(href_list["lookup_info"]) - switch(href_list["lookup_info"]) - if("genitals") - var/list/line = list() - for(var/genital in possible_genitals) - if(!dna.species.mutant_bodyparts[genital]) - continue - var/datum/sprite_accessory/genital/G = GLOB.sprite_accessories[genital][dna.species.mutant_bodyparts[genital][MUTANT_INDEX_NAME]] - if(!G) - continue - if(G.is_hidden(src)) - continue - var/obj/item/organ/external/genital/ORG = get_organ_slot(G.associated_organ_slot) - if(!ORG) - continue - line += ORG.get_description_string(G) - if(length(line)) - to_chat(usr, span_notice("[jointext(line, "\n")]")) - if("open_examine_panel") - tgui.holder = src - tgui.ui_interact(usr) //datum has a tgui component, here we open the window - -/mob/living/carbon/human/species/vox - race = /datum/species/vox - -/mob/living/carbon/human/species/vox_primalis - race = /datum/species/vox_primalis - -/mob/living/carbon/human/species/synth - race = /datum/species/synthetic - -/mob/living/carbon/human/species/mammal - race = /datum/species/mammal - -/mob/living/carbon/human/species/vulpkanin - race = /datum/species/vulpkanin - -/mob/living/carbon/human/species/tajaran - race = /datum/species/tajaran - -/mob/living/carbon/human/species/unathi - race = /datum/species/unathi - -/mob/living/carbon/human/species/podweak - race = /datum/species/pod/podweak - -/mob/living/carbon/human/species/xeno - race = /datum/species/xeno - -/mob/living/carbon/human/species/dwarf - race = /datum/species/dwarf - -/mob/living/carbon/human/species/roundstartslime - race = /datum/species/jelly/roundstartslime - -/mob/living/carbon/human/species/teshari - race = /datum/species/teshari - -/mob/living/carbon/human/species/akula - race = /datum/species/akula - -/mob/living/carbon/human/species/skrell - race = /datum/species/skrell - -/mob/living/carbon/human/verb/toggle_undies() - set category = "IC" - set name = "Toggle underwear visibility" - set desc = "Allows you to toggle which underwear should show or be hidden. Underwear will obscure genitals." - - if(stat != CONSCIOUS) - to_chat(usr, span_warning("You can't toggle underwear visibility right now...")) - return - - var/underwear_button = underwear_visibility & UNDERWEAR_HIDE_UNDIES ? "Show underwear" : "Hide underwear" - var/undershirt_button = underwear_visibility & UNDERWEAR_HIDE_SHIRT ? "Show shirt" : "Hide shirt" - var/socks_button = underwear_visibility & UNDERWEAR_HIDE_SOCKS ? "Show socks" : "Hide socks" - var/bra_button = underwear_visibility & UNDERWEAR_HIDE_BRA ? "Show bra" : "Hide bra" - var/list/choice_list = list("[underwear_button]" = "underwear", "[bra_button]" = "bra", "[undershirt_button]" = "shirt", "[socks_button]" = "socks","show all" = "show", "Hide all" = "hide") - var/picked_visibility = input(src, "Choose visibility setting", "Show/Hide underwear") as null|anything in choice_list - if(picked_visibility) - var/picked_choice = choice_list[picked_visibility] - switch(picked_choice) - if("underwear") - underwear_visibility ^= UNDERWEAR_HIDE_UNDIES - if("bra") - underwear_visibility ^= UNDERWEAR_HIDE_BRA - if("shirt") - underwear_visibility ^= UNDERWEAR_HIDE_SHIRT - if("socks") - underwear_visibility ^= UNDERWEAR_HIDE_SOCKS - if("show") - underwear_visibility = NONE - if("hide") - underwear_visibility = UNDERWEAR_HIDE_UNDIES | UNDERWEAR_HIDE_SHIRT | UNDERWEAR_HIDE_SOCKS | UNDERWEAR_HIDE_BRA - update_body() - return - -/mob/living/carbon/human/revive(full_heal_flags = NONE, excess_healing = 0, force_grab_ghost = FALSE) - . = ..() - if(.) - if(dna && dna.species) - dna.species.spec_revival(src) - -/mob/living/carbon/human/verb/toggle_mutant_part_visibility() - set category = "IC" - set name = "Show/Hide Mutant Parts" - set desc = "Allows you to choose to try and hide your mutant bodyparts under your clothes." - - mutant_part_visibility() - -/mob/living/carbon/human/proc/mutant_part_visibility(quick_toggle, re_do) - // The parts our particular user can choose - var/list/available_selection - // The total list of parts choosable - var/static/list/total_selection = list( - ORGAN_SLOT_EXTERNAL_HORNS = "horns", - ORGAN_SLOT_EXTERNAL_EARS = "ears", - ORGAN_SLOT_EXTERNAL_WINGS = "wings", - ORGAN_SLOT_EXTERNAL_TAIL = "tail", - ORGAN_SLOT_EXTERNAL_SYNTH_ANTENNA = "ipc_antenna", - ORGAN_SLOT_EXTERNAL_ANTENNAE = "moth_antennae", - ORGAN_SLOT_EXTERNAL_XENODORSAL = "xenodorsal", - ORGAN_SLOT_EXTERNAL_SPINES = "spines", - ) - - // Stat check - if(stat != CONSCIOUS) - to_chat(usr, span_warning("You can't do this right now...")) - return - - // Only show the 'reveal all' button if we are already hiding something - if(try_hide_mutant_parts) - LAZYOR(available_selection, "reveal all") - // Lets build our parts list - for(var/organ_slot in total_selection) - if(get_organ_slot(organ_slot)) - LAZYOR(available_selection, total_selection[organ_slot]) - - // If this proc is called with the 'quick_toggle' flag, we skip the rest - if(quick_toggle) - if("reveal all" in available_selection) - LAZYNULL(try_hide_mutant_parts) - else - for(var/part in available_selection) - LAZYOR(try_hide_mutant_parts, part) - update_mutant_bodyparts() - return - - // Dont open the radial automatically just for one button - if(re_do && (length(available_selection) == 1)) - return - // If 'reveal all' is our only option just do it - if(!re_do && (("reveal all" in available_selection) && (length(available_selection) == 1))) - LAZYNULL(try_hide_mutant_parts) - update_mutant_bodyparts() - return - - // Radial rendering - var/list/choices = list() - for(var/choice in available_selection) - var/datum/radial_menu_choice/option = new - var/image/part_image = image(icon = HIDING_RADIAL_DMI, icon_state = initial(choice)) - - option.image = part_image - if(choice in try_hide_mutant_parts) - part_image.underlays += image(icon = HIDING_RADIAL_DMI, icon_state = "module_unable") - choices[initial(choice)] = option - // Radial choices - sort_list(choices) - var/pick = show_radial_menu(usr, src, choices, custom_check = FALSE, tooltips = TRUE) - if(!pick) - return - - // Choice to action - if(pick == "reveal all") - to_chat(usr, span_notice("You are no longer trying to hide your mutant parts.")) - LAZYNULL(try_hide_mutant_parts) - update_mutant_bodyparts() - return - - else if(pick in try_hide_mutant_parts) - to_chat(usr, span_notice("You are no longer trying to hide your [pick].")) - LAZYREMOVE(try_hide_mutant_parts, pick) - else - to_chat(usr, span_notice("You are now trying to hide your [pick].")) - LAZYOR(try_hide_mutant_parts, pick) - update_mutant_bodyparts() - // automatically re-do the menu after making a selection - mutant_part_visibility(re_do = TRUE) - - -// Feign impairment verb -#define DEFAULT_TIME 30 -#define MAX_TIME 36000 // 10 hours - -/mob/living/carbon/human/verb/acting() - set category = "IC" - set name = "Feign Impairment" - set desc = "Pretend to be impaired for a defined duration." - - if(stat != CONSCIOUS) - to_chat(usr, span_warning("You can't do this right now...")) - return - - var/static/list/choices = list("drunkenness", "stuttering", "jittering") - var/impairment = tgui_input_list(src, "Select an impairment to perform:", "Impairments", choices) - if(!impairment) - return - - var/duration = tgui_input_number(src, "How long would you like to feign [impairment] for?", "Duration in seconds", DEFAULT_TIME, MAX_TIME) - switch(impairment) - if("drunkenness") - var/mob/living/living_user = usr - if(istype(living_user)) - living_user.add_mood_event("drunk", /datum/mood_event/drunk) - set_slurring_if_lower(duration SECONDS) - if("stuttering") - set_stutter_if_lower(duration SECONDS) - if("jittering") - set_jitter_if_lower(duration SECONDS) - - if(duration) - addtimer(CALLBACK(src, PROC_REF(acting_expiry), impairment), duration SECONDS) - to_chat(src, "You are now feigning [impairment].") - -/mob/living/carbon/human/proc/acting_expiry(impairment) - if(impairment) - // Procs when fake impairment duration ends, useful for calling extra events to wrap up too - if(impairment == "drunkenness") - var/mob/living/living_user = usr - if(istype(living_user)) - living_user.clear_mood_event("drunk") - // Notify the user - to_chat(src, "You are no longer feigning [impairment].") - -#undef DEFAULT_TIME -#undef MAX_TIME -#undef HIDING_RADIAL_DMI diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm deleted file mode 100644 index b87946aaf37c88..00000000000000 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm +++ /dev/null @@ -1,302 +0,0 @@ -GLOBAL_LIST_EMPTY(customizable_races) - -/datum/species - mutant_bodyparts = list() - digitigrade_customization = DIGITIGRADE_OPTIONAL // Doing this so that the legs preference actually works for everyone. - ///Self explanatory - var/can_have_genitals = TRUE - ///A list of actual body markings on the owner of the species. Associative lists with keys named by limbs defines, pointing to a list with names and colors for the marking to be rendered. This is also stored in the DNA - var/list/list/body_markings = list() - ///Override of the eyes icon file, used for Vox and maybe more in the future - The future is now, with Teshari using it too - var/eyes_icon - ///How are we treated regarding processing reagents, by default we process them as if we're organic - var/reagent_flags = PROCESS_ORGANIC - ///Whether a species can use augmentations in preferences - var/can_augment = TRUE - ///Override for the alpha of bodyparts and mutant parts. - var/specific_alpha = 255 - ///Override for alpha value of markings, should be much lower than the above value. - var/markings_alpha = 255 - ///If a species can always be picked in prefs for the purposes of customizing it for ghost roles or events - var/always_customizable = FALSE - /// If a species requires the player to be a Veteran to be able to pick it. - var/veteran_only = FALSE - ///Flavor text of the species displayed on character creation screeen - var/flavor_text = "No description." - ///Path to BODYTYPE_CUSTOM species worn icons. An assoc list of ITEM_SLOT_X => /icon - var/list/custom_worn_icons = list() - ///Is this species restricted from changing their body_size in character creation? - var/body_size_restricted = FALSE - ///What accessories can a species have aswell as their default accessory of such type e.g. "frills" = "Aquatic". Default accessory colors is dictated by the accessory properties and mutcolors of the specie - var/list/default_mutant_bodyparts = list() - /// A static list of all genital slot possibilities. - var/static/list/genitals_list = list(ORGAN_SLOT_VAGINA, ORGAN_SLOT_WOMB, ORGAN_SLOT_TESTICLES, ORGAN_SLOT_BREASTS, ORGAN_SLOT_ANUS, ORGAN_SLOT_PENIS) - /// Are we lore protected? This prevents people from changing the species lore or species name. - var/lore_protected = FALSE - -/datum/species/proc/handle_mutant_bodyparts(mob/living/carbon/human/owner, forced_colour, force_update = FALSE) - return - -/datum/species/New() - . = ..() - if(can_have_genitals) - for(var/genital in genitals_list) - default_mutant_bodyparts[genital] = "None" - -/datum/species/dullahan - mutant_bodyparts = list() - -/datum/species/human/felinid - mutant_bodyparts = list() - default_mutant_bodyparts = list("tail" = "Cat", "ears" = "Cat") - -/datum/species/human - mutant_bodyparts = list() - default_mutant_bodyparts = list("ears" = "None", "tail" = "None", "wings" = "None") - -/datum/species/mush - mutant_bodyparts = list() - -/datum/species/vampire - mutant_bodyparts = list() - -/datum/species/plasmaman - mutant_bodyparts = list() - can_have_genitals = FALSE - can_augment = FALSE - -/datum/species/ethereal - mutant_bodyparts = list() - can_have_genitals = FALSE - can_augment = FALSE - -/datum/species/pod - name = "Primal Podperson" - always_customizable = TRUE - -/datum/species/randomize_features(mob/living/carbon/human/human_mob) - return - -/datum/species/proc/get_random_mutant_bodyparts(list/features) //Needs features to base the colour off of - var/list/mutantpart_list = list() - var/list/bodyparts_to_add = default_mutant_bodyparts.Copy() - if(CONFIG_GET(flag/disable_erp_preferences)) - for(var/genital in genitals_list) - bodyparts_to_add.Remove(genital) - for(var/key in bodyparts_to_add) - var/datum/sprite_accessory/SP - if(bodyparts_to_add[key] == ACC_RANDOM) - SP = random_accessory_of_key_for_species(key, src) - else - SP = GLOB.sprite_accessories[key][bodyparts_to_add[key]] - if(!SP) - CRASH("Cant find accessory of [key] key, [bodyparts_to_add[key]] name, for species [id]") - var/list/color_list = SP.get_default_color(features, src) - var/list/final_list = list() - final_list[MUTANT_INDEX_NAME] = SP.name - final_list[MUTANT_INDEX_COLOR_LIST] = color_list - mutantpart_list[key] = final_list - - return mutantpart_list - -/datum/species/proc/get_random_body_markings(list/features) //Needs features to base the colour off of - return list() - -/datum/species/proc/handle_body(mob/living/carbon/human/species_human) - species_human.remove_overlay(BODY_LAYER) - var/height_offset = species_human.get_top_offset() // From high changed by varying limb height - var/list/standing = list() - - var/obj/item/bodypart/head/noggin = species_human.get_bodypart(BODY_ZONE_HEAD) - - if(noggin && !(HAS_TRAIT(species_human, TRAIT_HUSK))) - if(noggin.head_flags & HEAD_EYESPRITES) - var/obj/item/organ/internal/eyes/eye_organ = species_human.get_organ_slot(ORGAN_SLOT_EYES) - - if(eye_organ) - eye_organ.refresh(call_update = FALSE) - for(var/mutable_appearance/eye_overlay in eye_organ.generate_body_overlay(species_human)) - eye_overlay.pixel_y += height_offset - standing += eye_overlay - - //Underwear, Undershirts & Socks - if(!HAS_TRAIT(species_human, TRAIT_NO_UNDERWEAR)) - if(species_human.underwear && !(species_human.underwear_visibility & UNDERWEAR_HIDE_UNDIES)) - var/datum/sprite_accessory/underwear/underwear = GLOB.underwear_list[species_human.underwear] - var/mutable_appearance/underwear_overlay - var/female_sprite_flags = FEMALE_UNIFORM_FULL // the default gender shaping - if(underwear) - var/icon_state = underwear.icon_state - if(underwear.has_digitigrade && (species_human.bodytype & BODYTYPE_DIGITIGRADE)) - icon_state += "_d" - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY // for digi gender shaping - if(species_human.dna.species.sexes && species_human.physique == FEMALE && (underwear.gender == MALE)) - underwear_overlay = wear_female_version(icon_state, underwear.icon, BODY_LAYER, female_sprite_flags) - else - underwear_overlay = mutable_appearance(underwear.icon, icon_state, -BODY_LAYER) - if(!underwear.use_static) - underwear_overlay.color = species_human.underwear_color - underwear_overlay.pixel_y += height_offset - standing += underwear_overlay - - if(species_human.bra && !(species_human.underwear_visibility & UNDERWEAR_HIDE_BRA)) - var/datum/sprite_accessory/bra/bra = GLOB.bra_list[species_human.bra] - - if(bra) - var/mutable_appearance/bra_overlay - var/icon_state = bra.icon_state - bra_overlay = mutable_appearance(bra.icon, icon_state, -BODY_LAYER) - if(!bra.use_static) - bra_overlay.color = species_human.bra_color - bra_overlay.pixel_y += height_offset - standing += bra_overlay - - if(species_human.undershirt && !(species_human.underwear_visibility & UNDERWEAR_HIDE_SHIRT)) - var/datum/sprite_accessory/undershirt/undershirt = GLOB.undershirt_list[species_human.undershirt] - if(undershirt) - var/mutable_appearance/undershirt_overlay - if(species_human.dna.species.sexes && species_human.physique == FEMALE) - undershirt_overlay = wear_female_version(undershirt.icon_state, undershirt.icon, BODY_LAYER) - else - undershirt_overlay = mutable_appearance(undershirt.icon, undershirt.icon_state, -BODY_LAYER) - if(!undershirt.use_static) - undershirt_overlay.color = species_human.undershirt_color - undershirt_overlay.pixel_y += height_offset - standing += undershirt_overlay - - if(species_human.socks && species_human.num_legs >= 2 && !(mutant_bodyparts["taur"]) && !(species_human.underwear_visibility & UNDERWEAR_HIDE_SOCKS)) - var/datum/sprite_accessory/socks/socks = GLOB.socks_list[species_human.socks] - if(socks) - var/mutable_appearance/socks_overlay - var/icon_state = socks.icon_state - if((species_human.bodytype & BODYTYPE_DIGITIGRADE)) - icon_state += "_d" - socks_overlay = mutable_appearance(socks.icon, icon_state, -BODY_LAYER) - if(!socks.use_static) - socks_overlay.color = species_human.socks_color - standing += socks_overlay - - if(standing.len) - species_human.overlays_standing[BODY_LAYER] = standing - - species_human.apply_overlay(BODY_LAYER) - handle_mutant_bodyparts(species_human) - -//I wag in death -/datum/species/spec_death(gibbed, mob/living/carbon/human/H) - if(H) - stop_wagging_tail(H) - -/datum/species/spec_stun(mob/living/carbon/human/H,amount) - if(H) - stop_wagging_tail(H) - . = ..() - -/* -* TAIL WAGGING -*/ - -/datum/species/proc/can_wag_tail(mob/living/carbon/human/H) - if(!H) //Somewhere in the core code we're getting those procs with H being null - return FALSE - var/obj/item/organ/external/tail/T = H.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) - if(!T) - return FALSE - if(T.can_wag) - return TRUE - return FALSE - -/datum/species/proc/is_wagging_tail(mob/living/carbon/human/H) - if(!H) //Somewhere in the core code we're getting those procs with H being null - return FALSE - var/obj/item/organ/external/tail/T = H.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) - if(!T) - return FALSE - return T.wagging - -/datum/species/proc/start_wagging_tail(mob/living/carbon/human/H) - if(!H) //Somewhere in the core code we're getting those procs with H being null - return - var/obj/item/organ/external/tail/T = H.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) - if(!T) - return FALSE - T.wagging = TRUE - H.update_body() - -/datum/species/proc/stop_wagging_tail(mob/living/carbon/human/H) - if(!H) //Somewhere in the core code we're getting those procs with H being null - return - var/obj/item/organ/external/tail/T = H.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) - if(!T) - return - T.wagging = FALSE - H.update_body() - -/datum/species/regenerate_organs(mob/living/carbon/target, datum/species/old_species, replace_current = TRUE, list/excluded_zones, visual_only = FALSE) - . = ..() - - var/robot_organs = HAS_TRAIT(target, TRAIT_ROBOTIC_DNA_ORGANS) - - for(var/key in target.dna.mutant_bodyparts) - if(!islist(target.dna.mutant_bodyparts[key]) || !(target.dna.mutant_bodyparts[key][MUTANT_INDEX_NAME] in GLOB.sprite_accessories[key])) - continue - - var/datum/sprite_accessory/mutant_accessory = GLOB.sprite_accessories[key][target.dna.mutant_bodyparts[key][MUTANT_INDEX_NAME]] - - if(mutant_accessory?.factual && mutant_accessory.organ_type) - var/obj/item/organ/current_organ = target.get_organ_by_type(mutant_accessory.organ_type) - - if(!current_organ || replace_current) - var/obj/item/organ/replacement = SSwardrobe.provide_type(mutant_accessory.organ_type) - replacement.sprite_accessory_flags = mutant_accessory.flags_for_organ - replacement.relevant_layers = mutant_accessory.relevent_layers - - if(robot_organs) - replacement.organ_flags |= ORGAN_ROBOTIC - - // If there's an existing mutant organ, we're technically replacing it. - // Let's abuse the snowflake proc that skillchips added. Basically retains - // feature parity with every other organ too. - if(current_organ) - current_organ.before_organ_replacement(replacement) - - replacement.build_from_dna(target.dna, key) - // organ.Insert will qdel any current organs in that slot, so we don't need to. - replacement.Insert(target, special = TRUE, drop_if_replaced = FALSE) - - // var/obj/item/organ/path = new SA.organ_type - // var/obj/item/organ/oldorgan = C.get_organ_slot(path.slot) - // if(oldorgan) - // oldorgan.Remove(C,TRUE) - // QDEL_NULL(oldorgan) - // path.build_from_dna(C.dna, key) - // path.Insert(C, 0, FALSE) - - -/datum/species/proc/spec_revival(mob/living/carbon/human/H) - return - -/// Gets a list of all customizable races on roundstart. -/proc/get_customizable_races() - RETURN_TYPE(/list) - - if (!GLOB.customizable_races.len) - GLOB.customizable_races = generate_customizable_races() - - return GLOB.customizable_races - -/** - * Generates races available to choose in character setup at roundstart, yet not playable on the station. - * - * This proc generates which species are available to pick from in character setup. - */ -/proc/generate_customizable_races() - var/list/customizable_races = list() - - for(var/species_type in subtypesof(/datum/species)) - var/datum/species/species = new species_type - if(species.always_customizable) - customizable_races += species.id - qdel(species) - - return customizable_races diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/ghoul.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/ghoul.dm deleted file mode 100644 index 0efe513cf26543..00000000000000 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/ghoul.dm +++ /dev/null @@ -1,212 +0,0 @@ -/datum/species/ghoul - name = "Ghoul" - id = SPECIES_GHOUL - examine_limb_id = SPECIES_GHOUL - can_have_genitals = FALSE //WHY WOULD YOU WANT TO FUCK ONE OF THESE THINGS? - mutant_bodyparts = list("ghoulcolor" = "Tan Necrotic") - default_mutant_bodyparts = list( - "tail" = "None", - "ears" = "None", - "legs" = "Normal Legs" - ) - mutanttongue = /obj/item/organ/internal/tongue/ghoul - inherent_traits = list( - TRAIT_ADVANCEDTOOLUSER, - TRAIT_RADIMMUNE, - TRAIT_CAN_STRIP, - TRAIT_EASYDISMEMBER, - TRAIT_EASILY_WOUNDED, //theyre like fuckin skin and bones - TRAIT_LITERATE, - TRAIT_MUTANT_COLORS, - TRAIT_FIXED_MUTANT_COLORS, - ) - payday_modifier = 1.0 //-- "Equality" - stunmod = 1.25 //multiplier for stun durations - bodytemp_normal = T20C - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT - bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/mutant/ghoul, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/mutant/ghoul, - BODY_ZONE_HEAD = /obj/item/bodypart/head/mutant/ghoul, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/mutant/ghoul, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/mutant/ghoul, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/mutant/ghoul, - ) - //the chest and head cannot be turned into meat - //i dont have to worry about sprites due to limbs_icon, thank god - //also the head needs to be normal for hair to work - -/proc/proof_ghoul_features(list/inFeatures) - // Missing Defaults in DNA? Randomize! - if(inFeatures["ghoulcolor"] == null || inFeatures["ghoulcolor"] == "") - inFeatures["ghoulcolor"] = GLOB.color_list_ghoul[pick(GLOB.color_list_ghoul)] - -/datum/species/ghoul/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load) - // Missing Defaults in DNA? Randomize! - proof_ghoul_features(C.dna.features) - - . = ..() - - if(ishuman(C)) - var/mob/living/carbon/human/H = C - - set_ghoul_color(H) - - // 2) BODYPARTS - C.part_default_head = /obj/item/bodypart/head/mutant/ghoul - C.part_default_chest = /obj/item/bodypart/chest/mutant/ghoul - C.part_default_l_arm = /obj/item/bodypart/arm/left/mutant/ghoul - C.part_default_r_arm = /obj/item/bodypart/arm/right/mutant/ghoul - C.part_default_l_leg = /obj/item/bodypart/leg/left/mutant/ghoul - C.part_default_r_leg = /obj/item/bodypart/leg/right/mutant/ghoul - C.ReassignForeignBodyparts() - -/datum/species/proc/set_ghoul_color(mob/living/carbon/human/H) - return // Do Nothing - -/datum/species/ghoul/set_ghoul_color(mob/living/carbon/human/H) - // Called on Assign, or on Color Change (or any time proof_ghoul_features() is used) - fixed_mut_color = H.dna.features["ghoulcolor"] - -/mob/living/carbon/proc/ReassignForeignBodyparts() - var/obj/item/bodypart/head = get_bodypart(BODY_ZONE_HEAD) - if (head?.type != part_default_head) - qdel(head) - var/obj/item/bodypart/limb = new part_default_head - limb.replace_limb(src, TRUE) - - var/obj/item/bodypart/chest = get_bodypart(BODY_ZONE_CHEST) - if (chest?.type != part_default_chest) - qdel(chest) - var/obj/item/bodypart/limb = new part_default_chest - limb.replace_limb(src, TRUE) - - var/obj/item/bodypart/arm/left/left_arm = get_bodypart(BODY_ZONE_L_ARM) - if (left_arm?.type != part_default_l_arm) - qdel(left_arm) - var/obj/item/bodypart/limb = new part_default_l_arm - limb.replace_limb(src, TRUE) - - var/obj/item/bodypart/arm/right/right_arm = get_bodypart(BODY_ZONE_R_ARM) - if (right_arm?.type != part_default_r_arm) - qdel(right_arm) - var/obj/item/bodypart/limb = new part_default_r_arm - limb.replace_limb(src, TRUE) - - var/obj/item/bodypart/leg/left/left_leg = get_bodypart(BODY_ZONE_L_LEG) - if (left_leg?.type != part_default_l_leg) - qdel(left_leg) - var/obj/item/bodypart/limb = new part_default_l_leg - limb.replace_limb(src, TRUE) - - var/obj/item/bodypart/leg/right/right_leg = get_bodypart(BODY_ZONE_R_LEG) - if (right_leg?.type != part_default_r_leg) - qdel(right_leg) - var/obj/item/bodypart/limb = new part_default_r_leg - limb.replace_limb(src, TRUE) - - -/datum/species/ghoul/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load) - ..() - - // 2) BODYPARTS - C.part_default_head = /obj/item/bodypart/head - C.part_default_chest = /obj/item/bodypart/chest - C.part_default_l_arm = /obj/item/bodypart/arm/left - C.part_default_r_arm = /obj/item/bodypart/arm/right - C.part_default_l_leg = /obj/item/bodypart/leg/left - C.part_default_r_leg = /obj/item/bodypart/leg/right - C.ReassignForeignBodyparts() - -/* -* ATTACK PROCS -*/ - -/datum/species/ghoul/disarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) - // Targeting Self? With "DISARM" - if (user == target) - var/target_zone = user.zone_selected - var/list/allowedList = list ( BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG ) - var/obj/item/bodypart/affecting = user.get_bodypart(check_zone(user.zone_selected)) //stabbing yourself always hits the right target - - if ((target_zone in allowedList) && affecting) - - if (user.handcuffed) - to_chat(user, span_alert("You can't get a good enough grip with your hands bound.")) - return FALSE - - // Robot Arms Fail - if (!IS_ORGANIC_LIMB(affecting)) - to_chat(user, "That thing is on there good. It's not coming off with a gentle tug.") - return FALSE - - // Pry it off... - user.visible_message("[user] grabs onto [p_their()] own [affecting.name] and pulls.", span_notice("You grab hold of your [affecting.name] and yank hard.")) - if (!do_after(user, 3 SECONDS, target)) - return TRUE - - user.visible_message("[user]'s [affecting.name] comes right off in their hand.", span_notice("Your [affecting.name] pops right off.")) - playsound(get_turf(user), 'sound/effects/meatslap.ogg', 40, 1) //ill change these sounds later - - // Destroy Limb, Drop Meat, Pick Up - var/obj/item/I = affecting.drop_limb() - if (istype(I, /obj/item/food/meat/slab)) - user.put_in_hands(I) - - new /obj/effect/temp_visual/dir_setting/bloodsplatter(target.loc, target.dir) - target.add_splatter_floor(target.loc) - target.bleed(60) - - return TRUE - return ..() - -/datum/species/ghoul/proc/handle_limb_mashing() - SIGNAL_HANDLER - -/datum/species/ghoul/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, mob/living/carbon/human/H, modifiers) - handle_limb_mashing() - // MEAT LIMBS: If our limb is missing, and we're using meat, stick it in! - if(LAZYACCESS(modifiers, RIGHT_CLICK)) - return - if(H.stat < DEAD && !affecting && istype(I, /obj/item/food/meat/slab)) - var/target_zone = user.zone_selected - var/list/limbs = list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) - - if((target_zone in limbs)) - if(user == H) - user.visible_message("[user] begins mashing [I] into [H]'s torso.", span_notice("You begin mashing [I] into your torso.")) - else - user.visible_message("[user] begins mashing [I] into [H]'s torso.", span_notice("You begin mashing [I] into [H]'s torso.")) - - // Leave Melee Chain (so deleting the meat doesn't throw an error) <--- aka, deleting the meat that called this very proc. - spawn(1) - if(do_after(user, 3 SECONDS, H)) - // Attach the part! - var/obj/item/bodypart/newBP = H.newBodyPart(target_zone, FALSE) - H.visible_message("The meat sprouts digits and becomes [H]'s new [newBP.name]!", span_notice("The meat sprouts digits and becomes your new [newBP.name]!")) - newBP.try_attach_limb(H) - qdel(I) - playsound(get_turf(H), 'sound/effects/meatslap.ogg', 50, 1) - - return TRUE // True CANCELS the sequence. - - return ..() // TRUE FALSE - -/mob/living/carbon - // Type References for Bodyparts - var/obj/item/bodypart/head/part_default_head = /obj/item/bodypart/head - var/obj/item/bodypart/chest/part_default_chest = /obj/item/bodypart/chest - var/obj/item/bodypart/arm/left/part_default_l_arm = /obj/item/bodypart/arm/left - var/obj/item/bodypart/arm/right/part_default_r_arm = /obj/item/bodypart/arm/right - var/obj/item/bodypart/leg/left/part_default_l_leg = /obj/item/bodypart/leg/left - var/obj/item/bodypart/leg/right/part_default_r_leg = /obj/item/bodypart/leg/right - -/datum/species/ghoul/get_species_description() - return placeholder_description - -/datum/species/ghoul/get_species_lore() - return list(placeholder_lore) - -/datum/species/ghoul/prepare_human_for_preview(mob/living/carbon/human/human) - regenerate_organs(human, src, visual_only = TRUE) - human.update_body(TRUE) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_organs.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_organs.dm deleted file mode 100644 index fcb32edfbf054d..00000000000000 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_organs.dm +++ /dev/null @@ -1,62 +0,0 @@ -/// Generic description for the corrupted organs that don't have one. -#define GENERIC_CORRUPTED_ORGAN_DESC "This shares the shape of a normal organ, but it's been covered and filled with some sort of midnight-black pulsing tissue, engorged with some sort of infectious mass." - -/// The rate at which blood metabolizes in a Hemophage's stomach subtype. -#define BLOOD_METABOLIZATION_RATE (0.1 * REAGENTS_METABOLISM) -/// Defines the time for making a corrupted organ start off corrupted. -#define ORGAN_CORRUPTION_INSTANT 0 - - -/obj/item/organ/internal/liver/hemophage - name = "liver" // Name change is handled by /datum/component/organ_corruption/corrupt_organ() - desc = GENERIC_CORRUPTED_ORGAN_DESC - icon = 'modular_skyrat/modules/organs/icons/hemophage_organs.dmi' - organ_flags = ORGAN_EDIBLE | ORGAN_TUMOR_CORRUPTED - - -/obj/item/organ/internal/liver/hemophage/Initialize(mapload) - . = ..() - - AddComponent(/datum/component/organ_corruption/liver, time_to_corrupt = ORGAN_CORRUPTION_INSTANT) - - -/obj/item/organ/internal/stomach/hemophage - name = "stomach" // Name change is handled by /datum/component/organ_corruption/corrupt_organ() - desc = GENERIC_CORRUPTED_ORGAN_DESC - icon = 'modular_skyrat/modules/organs/icons/hemophage_organs.dmi' - organ_flags = ORGAN_EDIBLE | ORGAN_TUMOR_CORRUPTED - - -/obj/item/organ/internal/stomach/hemophage/Initialize(mapload) - . = ..() - - AddComponent(/datum/component/organ_corruption/stomach, time_to_corrupt = ORGAN_CORRUPTION_INSTANT) - - -// I didn't feel like moving this behavior onto the component, it was just too annoying to do. -/obj/item/organ/internal/stomach/hemophage/on_life(seconds_per_tick, times_fired) - var/datum/reagent/blood/blood = reagents.get_reagent(/datum/reagent/blood) - if(blood) - blood.metabolization_rate = BLOOD_METABOLIZATION_RATE - - return ..() - - -/obj/item/organ/internal/tongue/hemophage - name = "tongue" // Name change is handled by /datum/component/organ_corruption/corrupt_organ() - desc = GENERIC_CORRUPTED_ORGAN_DESC - icon = 'modular_skyrat/modules/organs/icons/hemophage_organs.dmi' - organ_flags = ORGAN_EDIBLE | ORGAN_TUMOR_CORRUPTED - liked_foodtypes = BLOODY - disliked_foodtypes = NONE - - -/obj/item/organ/internal/tongue/hemophage/Initialize(mapload) - . = ..() - - AddComponent(/datum/component/organ_corruption/tongue, time_to_corrupt = ORGAN_CORRUPTION_INSTANT) - - -#undef GENERIC_CORRUPTED_ORGAN_DESC -#undef BLOOD_METABOLIZATION_RATE -#undef ORGAN_CORRUPTION_INSTANT diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/monkey.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/monkey.dm deleted file mode 100644 index 2b46cb02c211af..00000000000000 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/monkey.dm +++ /dev/null @@ -1,12 +0,0 @@ -/datum/species/monkey - default_mutant_bodyparts = list("tail" = "Monkey") - -/datum/species/monkey/prepare_human_for_preview(mob/living/carbon/human/monke) - regenerate_organs(monke, src, visual_only = TRUE) - monke.update_body(is_creating = TRUE) - -/datum/species/monkey/get_custom_worn_icon(item_slot, obj/item/item) - return item.worn_icon_monkey - -/datum/species/monkey/set_custom_worn_icon(item_slot, obj/item/item, icon/icon) - item.worn_icon_monkey = icon diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/skrell.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/skrell.dm deleted file mode 100644 index aa9d14b5e5a5a0..00000000000000 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/skrell.dm +++ /dev/null @@ -1,157 +0,0 @@ -/datum/species/skrell - name = "Skrell" - id = SPECIES_SKRELL - inherent_traits = list( - TRAIT_ADVANCEDTOOLUSER, - TRAIT_CAN_STRIP, - TRAIT_CAN_USE_FLIGHT_POTION, - TRAIT_LITERATE, - TRAIT_MUTANT_COLORS, - ) - inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID - exotic_blood = /datum/reagent/copper - bodytemp_normal = (BODYTEMP_NORMAL + 70) - bodytemp_heat_damage_limit = FIRE_MINIMUM_TEMPERATURE_TO_SPREAD - bodytemp_cold_damage_limit = (T20C - 10) - species_language_holder = /datum/language_holder/skrell - mutant_bodyparts = list() - mutanttongue = /obj/item/organ/internal/tongue/skrell - payday_modifier = 1.0 - default_mutant_bodyparts = list("skrell_hair" = ACC_RANDOM) - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT - eyes_icon = 'modular_skyrat/modules/organs/icons/skrell_eyes.dmi' - mutantbrain = /obj/item/organ/internal/brain/skrell - mutanteyes = /obj/item/organ/internal/eyes/skrell - mutantlungs = /obj/item/organ/internal/lungs/skrell - mutantheart = /obj/item/organ/internal/heart/skrell - mutantliver = /obj/item/organ/internal/liver/skrell - mutanttongue = /obj/item/organ/internal/tongue/skrell - bodypart_overrides = list( - BODY_ZONE_HEAD = /obj/item/bodypart/head/mutant/skrell, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/mutant/skrell, - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/mutant/skrell, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/mutant/skrell, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/mutant/skrell, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/mutant/skrell, - ) - -/datum/species/skrell/get_species_description() - return placeholder_description - -/datum/species/skrell/get_species_lore() - return list(placeholder_lore) - -/datum/species/skrell/randomize_features(mob/living/carbon/human/human_mob) - var/main_color - var/random = rand(1,6) - //Choose from a range of green-blue colors - switch(random) - if(1) - main_color = "#44FF77" - if(2) - main_color = "#22FF88" - if(3) - main_color = "#22FFBB" - if(4) - main_color = "#22FFFF" - if(5) - main_color = "#22BBFF" - if(6) - main_color = "#2266FF" - human_mob.dna.features["mcolor"] = main_color - human_mob.dna.features["mcolor2"] = main_color - human_mob.dna.features["mcolor3"] = main_color - -/datum/species/skrell/prepare_human_for_preview(mob/living/carbon/human/skrell) - var/skrell_color = "#22BBFF" - skrell.dna.features["mcolor"] = skrell_color - skrell.dna.features["mcolor2"] = skrell_color - skrell.dna.features["mcolor3"] = skrell_color - skrell.dna.mutant_bodyparts["skrell_hair"] = list(MUTANT_INDEX_NAME = "Female", MUTANT_INDEX_COLOR_LIST = list(skrell_color, skrell_color, skrell_color)) - regenerate_organs(skrell, src, visual_only = TRUE) - skrell.update_body(TRUE) - - -/obj/item/organ/internal/tongue/skrell - name = "internal vocal sacs" - desc = "An Strange looking sac." - icon = 'modular_skyrat/modules/organs/icons/skrell_organ.dmi' - icon_state = "tongue" - taste_sensitivity = 5 - var/static/list/languages_possible_skrell = typecacheof(list( - /datum/language/common, - /datum/language/uncommon, - /datum/language/draconic, - /datum/language/codespeak, - /datum/language/monkey, - /datum/language/narsie, - /datum/language/machine, - /datum/language/slime, - /datum/language/beachbum, - /datum/language/aphasia, - /datum/language/piratespeak, - /datum/language/moffic, - /datum/language/sylvan, - /datum/language/shadowtongue, - /datum/language/terrum, - /datum/language/vox, - /datum/language/nekomimetic, - /datum/language/skrell, - )) - liked_foodtypes = TOXIC | FRUIT | VEGETABLES - disliked_foodtypes = RAW | CLOTH - toxic_foodtypes = DAIRY | MEAT - -/obj/item/organ/internal/tongue/skrell/get_possible_languages() - return languages_possible_skrell - -/obj/item/organ/internal/heart/skrell - name = "skrellian heart" - icon = 'modular_skyrat/modules/organs/icons/skrell_organ.dmi' - icon_state = "heart" - -/obj/item/organ/internal/brain/skrell - name = "spongy brain" - icon = 'modular_skyrat/modules/organs/icons/skrell_organ.dmi' - icon_state = "brain2" - -/obj/item/organ/internal/eyes/skrell - name = "amphibian eyes" - desc = "Large black orbs." - icon = 'modular_skyrat/modules/organs/icons/skrell_organ.dmi' - icon_state = "eyes" - flash_protect = FLASH_PROTECTION_SENSITIVE - -/obj/item/organ/internal/lungs/skrell - name = "skrell lungs" - icon = 'modular_skyrat/modules/organs/icons/skrell_organ.dmi' - icon_state = "lungs" - safe_plasma_max = 40 - safe_co2_max = 40 - - cold_message = "You can't stand the freezing cold with every breath you take!" - cold_level_1_threshold = 248 - cold_level_2_threshold = 220 - cold_level_3_threshold = 170 - cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_2 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead. - cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_2 - cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_3 - cold_damage_type = BRUTE - - - hot_message = "You can't stand the searing heat with every breath you take!" - heat_level_1_threshold = 318 - heat_level_2_threshold = 348 - heat_level_3_threshold = 1000 - heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_2 - heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_2 - heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_3 - heat_damage_type = BURN - -/obj/item/organ/internal/liver/skrell - name = "skrell liver" - icon_state = "liver" - icon = 'modular_skyrat/modules/organs/icons/skrell_organ.dmi' - alcohol_tolerance = 5 - toxTolerance = 10 //can shrug off up to 10u of toxins. - liver_resistance = 1.2 * LIVER_DEFAULT_TOX_RESISTANCE // +20% diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vox.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vox.dm deleted file mode 100644 index f5bb77bb668599..00000000000000 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vox.dm +++ /dev/null @@ -1,111 +0,0 @@ -/datum/species/vox - // Bird-like humanoids - name = "Vox" - id = SPECIES_VOX - eyes_icon = 'modular_skyrat/modules/organs/icons/vox_eyes.dmi' - can_augment = FALSE - inherent_traits = list( - TRAIT_ADVANCEDTOOLUSER, - TRAIT_CAN_STRIP, - TRAIT_CAN_USE_FLIGHT_POTION, - TRAIT_LITERATE, - TRAIT_MUTANT_COLORS, - ) - inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID - mutanttongue = /obj/item/organ/internal/tongue/vox - mutantlungs = /obj/item/organ/internal/lungs/nitrogen/vox - mutantbrain = /obj/item/organ/internal/brain/vox - breathid = "n2" - mutant_bodyparts = list() - default_mutant_bodyparts = list( - "tail" = "Vox Tail", - "legs" = DIGITIGRADE_LEGS, - "snout" = "Vox Snout", - "spines" = ACC_RANDOM - ) - payday_modifier = 1.0 - outfit_important_for_life = /datum/outfit/vox - species_language_holder = /datum/language_holder/vox - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT - // Vox are cold resistant, but also heat sensitive - bodytemp_heat_damage_limit = (BODYTEMP_HEAT_DAMAGE_LIMIT - 15) // being cold resistant, should make you heat sensitive actual effect ingame isn't much - bodytemp_cold_damage_limit = (BODYTEMP_COLD_DAMAGE_LIMIT - 30) - digitigrade_customization = DIGITIGRADE_OPTIONAL - bodypart_overrides = list( - BODY_ZONE_HEAD = /obj/item/bodypart/head/mutant/vox, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/mutant/vox, - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/mutant/vox, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/mutant/vox, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/mutant/vox, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/mutant/vox, - ) - custom_worn_icons = list( - LOADOUT_ITEM_HEAD = VOX_HEAD_ICON, - LOADOUT_ITEM_MASK = VOX_MASK_ICON, - LOADOUT_ITEM_SUIT = VOX_SUIT_ICON, - LOADOUT_ITEM_UNIFORM = VOX_UNIFORM_ICON, - LOADOUT_ITEM_HANDS = VOX_HANDS_ICON, - LOADOUT_ITEM_SHOES = VOX_FEET_ICON, - LOADOUT_ITEM_GLASSES = VOX_EYES_ICON, - LOADOUT_ITEM_BELT = VOX_BELT_ICON, - LOADOUT_ITEM_MISC = VOX_BACK_ICON, - LOADOUT_ITEM_EARS = VOX_EARS_ICON - ) - -/datum/species/vox/pre_equip_species_outfit(datum/job/job, mob/living/carbon/human/equipping, visuals_only) - . = ..() - if(job?.vox_outfit) - equipping.equipOutfit(job.vox_outfit, visuals_only) - else - give_important_for_life(equipping) - -/datum/species/vox/random_name(gender,unique,lastname) - if(unique) - return random_unique_vox_name() - - var/randname = vox_name() - - if(lastname) - randname += " [lastname]" - - return randname - -/datum/species/vox/randomize_features(mob/living/carbon/human/human_mob) - human_mob.dna.features["mcolor"] = pick("#77DD88", "#77DDAA", "#77CCDD", "#77DDCC") - human_mob.dna.features["mcolor2"] = pick("#EEDD88", "#EECC88") - human_mob.dna.features["mcolor3"] = pick("#222222", "#44EEFF", "#44FFBB", "#8844FF", "#332233") - -/datum/species/vox/get_random_body_markings(list/passed_features) - var/name = pick(list("Vox", "Vox Hive", "Vox Nightling", "Vox Heart", "Vox Tiger")) - var/datum/body_marking_set/BMS = GLOB.body_marking_sets[name] - var/list/markings = list() - if(BMS) - markings = assemble_body_markings_from_set(BMS, passed_features, src) - return markings - -/datum/species/vox/get_custom_worn_icon(item_slot, obj/item/item) - // snowflakey but vox legs weird. - if(item_slot == LOADOUT_ITEM_SHOES) - var/obj/item/bodypart/leg = bodypart_overrides[BODY_ZONE_L_LEG] || bodypart_overrides[BODY_ZONE_R_LEG] - if(initial(leg?.limb_id) != "digitigrade") - // normal legs, use normal human shoes - return DEFAULT_SHOES_FILE - - return item.worn_icon_vox - -/datum/species/vox/set_custom_worn_icon(item_slot, obj/item/item, icon/icon) - item.worn_icon_vox = icon - -/datum/species/vox/get_species_description() - return placeholder_description - -/datum/species/vox/get_species_lore() - return list(placeholder_lore) - -/datum/species/vox/prepare_human_for_preview(mob/living/carbon/human/vox) - vox.dna.features["mcolor"] = "#77DD88" - vox.dna.features["mcolor2"] = "#EEDD88" - vox.dna.features["mcolor3"] = "#222222" - vox.dna.mutant_bodyparts["snout"] = list(MUTANT_INDEX_NAME = "Vox Snout", MUTANT_INDEX_COLOR_LIST = list("#EEDD88")) - regenerate_organs(vox, src, visual_only = TRUE) - vox.update_body(TRUE) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/xeno.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/xeno.dm deleted file mode 100644 index aa74776325fa5c..00000000000000 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/xeno.dm +++ /dev/null @@ -1,53 +0,0 @@ -/datum/species/xeno - // A cloning mistake, crossing human and xenomorph DNA - name = "Xenomorph Hybrid" - id = SPECIES_XENO - family_heirlooms = list(/obj/item/toy/plush/rouny, /obj/item/toy/toy_xeno) - inherent_traits = list( - TRAIT_ADVANCEDTOOLUSER, - TRAIT_CAN_STRIP, - TRAIT_CAN_USE_FLIGHT_POTION, - TRAIT_LITERATE, - TRAIT_MUTANT_COLORS, - ) - inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID - mutanttongue = /obj/item/organ/internal/tongue/xeno_hybrid - mutant_bodyparts = list() - default_mutant_bodyparts = list( - "tail" = "Xenomorph Tail", - "xenodorsal" = ACC_RANDOM, - "xenohead" = ACC_RANDOM, - "legs" = DIGITIGRADE_LEGS, - "taur" = "None" - ) - external_organs = list() - payday_modifier = 1.0 - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT - bodypart_overrides = list( - BODY_ZONE_HEAD = /obj/item/bodypart/head/mutant/xenohybrid, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/mutant/xenohybrid, - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/mutant/xenohybrid, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/mutant/xenohybrid, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/digitigrade/xenohybrid, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/digitigrade/xenohybrid, - ) - - meat = /obj/item/food/meat/slab/xeno - skinned_type = /obj/item/stack/sheet/animalhide/xeno - -/datum/species/xeno/get_species_description() - return placeholder_description - -/datum/species/xeno/get_species_lore() - return list(placeholder_lore) - -/datum/species/xeno/prepare_human_for_preview(mob/living/carbon/human/xeno) - var/xeno_color = "#525288" - xeno.dna.features["mcolor"] = xeno_color - xeno.eye_color_left = "#30304F" - xeno.eye_color_right = "#30304F" - xeno.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Xenomorph Tail", MUTANT_INDEX_COLOR_LIST = list(xeno_color, xeno_color, xeno_color)) - xeno.dna.mutant_bodyparts["xenodorsal"] = list(MUTANT_INDEX_NAME = "Standard", MUTANT_INDEX_COLOR_LIST = list(xeno_color)) - xeno.dna.mutant_bodyparts["xenohead"] = list(MUTANT_INDEX_NAME = "Standard", MUTANT_INDEX_COLOR_LIST = list(xeno_color, xeno_color, xeno_color)) - regenerate_organs(xeno, src, visual_only = TRUE) - xeno.update_body(TRUE) diff --git a/modular_skyrat/modules/customization/modules/mob/living/living.dm b/modular_skyrat/modules/customization/modules/mob/living/living.dm deleted file mode 100644 index eeb48b1ffaee52..00000000000000 --- a/modular_skyrat/modules/customization/modules/mob/living/living.dm +++ /dev/null @@ -1,8 +0,0 @@ -/mob/living/Topic(href, href_list) - . = ..() - if(href_list["temporary_flavor"]) - if(temporary_flavor_text) - var/datum/browser/popup = new(usr, "[name]'s temporary flavor text", "[name]'s Temporary Flavor Text", 500, 200) - popup.set_content(text("<HTML><HEAD><TITLE>[][]", "[name]'s temporary flavor text", replacetext(temporary_flavor_text, "\n", "
    "))) - popup.open() - return diff --git a/modular_skyrat/modules/customization/modules/mob/living/silicon/topic.dm b/modular_skyrat/modules/customization/modules/mob/living/silicon/topic.dm deleted file mode 100644 index 3a5310e8c3b0a3..00000000000000 --- a/modular_skyrat/modules/customization/modules/mob/living/silicon/topic.dm +++ /dev/null @@ -1,5 +0,0 @@ -/mob/living/silicon/Topic(href, href_list) - . = ..() - if(href_list["lookup_info"] == "open_examine_panel") - examine_panel.holder = src - examine_panel.ui_interact(usr) //datum has a tgui component, here we open the window diff --git a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/drinks.dm b/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/drinks.dm deleted file mode 100644 index 14d158734fb9f6..00000000000000 --- a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/drinks.dm +++ /dev/null @@ -1,93 +0,0 @@ -/obj/item/reagent_containers/cup/soda_cans/skyrat/lubricola - name = "LubriCola" - desc = "The perfect lubricant for your weary gears." - icon_state = "lubricola" - list_reagents = list(/datum/reagent/fuel/oil = 30) - custom_price = PAYCHECK_LOWER * 1.2 - -/obj/item/reagent_containers/cup/soda_cans/skyrat/welding_fizz - name = "Welding Fizz" - desc = "More energy than in an IED! Now carbonated. WARNING: Contains toxic and flammable fuels." - icon_state = "welding_fizz" - list_reagents = list(/datum/reagent/fuel = 25, /datum/reagent/carbondioxide = 5) - custom_price = PAYCHECK_LOWER * 1.2 - -/obj/item/reagent_containers/cup/soda_cans/skyrat/synthanolcan - name = "Silly Cone's Synthanol" - desc = "A recompiling can of synthanol." - icon_state = "synthanolcan" - list_reagents = list(/datum/reagent/consumable/ethanol/synthanol = 30) - custom_price = PAYCHECK_CREW - -//CODING SIN BYOND HERE - -/obj/item/trash/can/skyrat - icon = 'modular_skyrat/master_files/icons/obj/janitor.dmi' - icon_state = "lemonade" - -/* -* SKYRAT SODA CANS -*/ - -/// How much fizziness is added to the can of soda by throwing it, in percentage points -#define SODA_FIZZINESS_THROWN 15 -/// How much fizziness is added to the can of soda by shaking it, in percentage points -#define SODA_FIZZINESS_SHAKE 5 - -/obj/item/reagent_containers/cup/soda_cans/skyrat - icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' - icon_state = null - -/obj/item/reagent_containers/cup/soda_cans/skyrat/attack(mob/M, mob/living/user) - if(istype(M, /mob/living/carbon) && !reagents.total_volume && user.combat_mode && user.zone_selected == BODY_ZONE_HEAD) - if(M == user) - user.visible_message(span_warning("[user] crushes the can of [src] on [user.p_their()] forehead!"), span_notice("You crush the can of [src] on your forehead.")) - else - user.visible_message(span_warning("[user] crushes the can of [src] on [M]'s forehead!"), span_notice("You crush the can of [src] on [M]'s forehead.")) - playsound(M,'sound/weapons/pierce.ogg', rand(10,50), TRUE) - var/obj/item/trash/can/skyrat/crushed_can = new /obj/item/trash/can/skyrat(M.loc) - crushed_can.icon_state = icon_state - qdel(src) - return TRUE - . = ..() - -/obj/item/reagent_containers/cup/soda_cans/skyrat/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit = FALSE) - . = ..() - - if(. != BULLET_ACT_HIT) - return - - if(hitting_projectile.damage > 0 && hitting_projectile.damage_type == BRUTE && !QDELETED(src)) - var/obj/item/trash/can/skyrat/crushed_can = new /obj/item/trash/can/skyrat(src.loc) - crushed_can.icon_state = icon_state - var/atom/throw_target = get_edge_target_turf(crushed_can, pick(GLOB.alldirs)) - crushed_can.throw_at(throw_target, rand(1,2), 7) - qdel(src) - return - -/** - * Burst the soda open on someone. Fun! Opens and empties the soda can, but does not crush it. - * - * Arguments: - * * target - Who's getting covered in soda - * * hide_message - Stops the generic fizzing message, so you can do your own - */ - -/obj/item/reagent_containers/cup/soda_cans/skyrat/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - . = ..() - if(. || spillable || !reagents.total_volume) // if it was caught, already opened, or has nothing in it - return - - fizziness += SODA_FIZZINESS_THROWN - if(!prob(fizziness)) - return - - burst_soda(hit_atom, hide_message = TRUE) - visible_message(span_danger("[src]'s impact with [hit_atom] causes it to rupture, spilling everywhere!")) - var/obj/item/trash/can/skyrat/crushed_can = new /obj/item/trash/can/skyrat(src.loc) - crushed_can.icon_state = icon_state - moveToNullspace() - QDEL_IN(src, 1 SECONDS) // give it a second so it can still be logged for the throw impact - -#undef SODA_FIZZINESS_THROWN -#undef SODA_FIZZINESS_SHAKE diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/genitals.dm b/modular_skyrat/modules/customization/modules/surgery/organs/genitals.dm deleted file mode 100644 index e5cc17fc258fdf..00000000000000 --- a/modular_skyrat/modules/customization/modules/surgery/organs/genitals.dm +++ /dev/null @@ -1,569 +0,0 @@ -/obj/item/organ/external/genital - color = "#fcccb3" - organ_flags = ORGAN_ORGANIC | ORGAN_UNREMOVABLE - ///Size value of the genital, needs to be translated to proper lengths/diameters/cups - var/genital_size = 1 - ///Sprite name of the genital, it's what shows up on character creation - var/genital_name = "Human" - ///Type of the genital. For penises tapered/horse/human etc. for breasts quadruple/sixtuple etc... - var/genital_type = SPECIES_HUMAN - ///Used for determining what sprite is being used, derrives from size and type - var/sprite_suffix - ///Used for input from the user whether to show a genital through clothing or not, always or never etc. - var/visibility_preference = GENITAL_HIDDEN_BY_CLOTHES - ///Whether the organ is aroused, matters for sprites, use AROUSAL_CANT, AROUSAL_NONE, AROUSAL_PARTIAL or AROUSAL_FULL - var/aroused = AROUSAL_NONE - ///Whether the organ is supposed to use a skintoned variant of the sprite - var/uses_skintones = FALSE - ///Whether the organ is supposed to use the color of the holder's skin tone. - var/uses_skin_color = FALSE - /// Where the genital is actually located, for clothing checks. - var/genital_location = GROIN - -//This translates the float size into a sprite string -/obj/item/organ/external/genital/proc/get_sprite_size_string() - return 0 - -//This translates the float size into a sprite string -/obj/item/organ/external/genital/proc/update_sprite_suffix() - sprite_suffix = "[get_sprite_size_string()]" - - var/datum/bodypart_overlay/mutant/genital/our_overlay = bodypart_overlay - - our_overlay.sprite_suffix = sprite_suffix - - -/obj/item/organ/external/genital/proc/get_description_string(datum/sprite_accessory/genital/gas) - return "You see genitals" - -/obj/item/organ/external/genital/proc/update_genital_icon_state() - return - -/obj/item/organ/external/genital/proc/set_size(size) - genital_size = size - update_sprite_suffix() - -/obj/item/organ/external/genital/Initialize(mapload) - . = ..() - update_sprite_suffix() - if(CONFIG_GET(flag/disable_lewd_items)) - return INITIALIZE_HINT_QDEL - -//Removes ERP organs depending on config -/obj/item/organ/external/genital/Insert(mob/living/carbon/M, special, drop_if_replaced) - if(CONFIG_GET(flag/disable_erp_preferences)) - return - . = ..() - -/obj/item/organ/external/genital/Remove(mob/living/carbon/M, special = FALSE, moving) - . = ..() - update_genital_icon_state() - -/obj/item/organ/external/genital/build_from_dna(datum/dna/DNA, associated_key) - . = ..() - var/datum/sprite_accessory/genital/accessory = GLOB.sprite_accessories[associated_key][DNA.mutant_bodyparts[associated_key][MUTANT_INDEX_NAME]] - genital_name = accessory.name - genital_type = accessory.icon_state - build_from_accessory(accessory, DNA) - update_sprite_suffix() - - var/datum/bodypart_overlay/mutant/genital/our_overlay = bodypart_overlay - - our_overlay.color_source = uses_skin_color ? ORGAN_COLOR_INHERIT : ORGAN_COLOR_OVERRIDE - -/// for specific build_from_dna behavior that also checks the genital accessory. -/obj/item/organ/external/genital/proc/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA) - return - -/obj/item/organ/external/genital/proc/is_exposed() - if(!owner) - return TRUE - - if(!ishuman(owner)) - return TRUE - - var/mob/living/carbon/human/human = owner - - switch(visibility_preference) - if(GENITAL_ALWAYS_SHOW) - return TRUE - if(GENITAL_HIDDEN_BY_CLOTHES) - if((human.w_uniform && human.w_uniform.body_parts_covered & genital_location) || (human.wear_suit && human.wear_suit.body_parts_covered & genital_location)) - return FALSE - else - return TRUE - else - return FALSE - - -/datum/bodypart_overlay/mutant/genital - layers = EXTERNAL_FRONT - color_source = ORGAN_COLOR_OVERRIDE - /// The suffix appended to the feature_key for the overlays. - var/sprite_suffix - -/datum/bodypart_overlay/mutant/genital/override_color(rgb_value) - return draw_color - -/datum/bodypart_overlay/mutant/genital/get_base_icon_state() - return sprite_suffix - - -/datum/bodypart_overlay/mutant/genital/get_color_layer_names(icon_state_to_lookup) - if(length(sprite_datum.color_layer_names)) - return sprite_datum.color_layer_names - - sprite_datum.color_layer_names = list() - if (!GLOB.cached_mutant_icon_files[sprite_datum.icon]) - GLOB.cached_mutant_icon_files[sprite_datum.icon] = icon_states(new /icon(sprite_datum.icon)) - - var/list/cached_mutant_icon_states = GLOB.cached_mutant_icon_files[sprite_datum.icon] - - for (var/layer in all_layers) - if(!(layer & layers)) - continue - - var/layertext = mutant_bodyparts_layertext(bitflag_to_layer(layer)) - if ("m_[feature_key]_[get_base_icon_state()]_[layertext]_primary" in cached_mutant_icon_states) - sprite_datum.color_layer_names["1"] = "primary" - if ("m_[feature_key]_[get_base_icon_state()]_[layertext]_secondary" in cached_mutant_icon_states) - sprite_datum.color_layer_names["2"] = "secondary" - if ("m_[feature_key]_[get_base_icon_state()]_[layertext]_tertiary" in cached_mutant_icon_states) - sprite_datum.color_layer_names["3"] = "tertiary" - - return sprite_datum.color_layer_names - - -/obj/item/organ/external/genital/penis - name = "penis" - desc = "A male reproductive organ." - icon_state = "penis" - icon = 'modular_skyrat/master_files/icons/obj/genitals/penis.dmi' - zone = BODY_ZONE_PRECISE_GROIN - slot = ORGAN_SLOT_PENIS - mutantpart_key = ORGAN_SLOT_PENIS - mutantpart_info = list(MUTANT_INDEX_NAME = "Human", MUTANT_INDEX_COLOR_LIST = list("#FFEEBB")) - drop_when_organ_spilling = FALSE - var/girth = 9 - var/sheath = SHEATH_NONE - bodypart_overlay = /datum/bodypart_overlay/mutant/genital/penis - -/datum/bodypart_overlay/mutant/genital/penis - feature_key = ORGAN_SLOT_PENIS - layers = EXTERNAL_FRONT | EXTERNAL_BEHIND - - -/obj/item/organ/external/genital/penis/get_description_string(datum/sprite_accessory/genital/gas) - var/returned_string = "" - var/pname = lowertext(genital_name) == "nondescript" ? "" : lowertext(genital_name) + " " - if(sheath != SHEATH_NONE && aroused != AROUSAL_FULL) //Hidden in sheath - switch(sheath) - if(SHEATH_NORMAL) - returned_string = "You see a sheath." - if(SHEATH_SLIT) - returned_string = "You see a slit." ///Typo fix. - if(aroused == AROUSAL_PARTIAL) - returned_string += " There's a [pname]penis poking out of it." - else - returned_string = "You see a [pname]penis. You estimate it's [genital_size] inches long, and [girth] inches in circumference." - switch(aroused) - if(AROUSAL_NONE) - returned_string += " It seems flaccid." - if(AROUSAL_PARTIAL) - returned_string += " It's partically erect." - if(AROUSAL_FULL) - returned_string += " It's fully erect." - return returned_string - -/obj/item/organ/external/genital/penis/update_genital_icon_state() - var/size_affix - var/measured_size = FLOOR(genital_size,1) - if(measured_size < 1) - measured_size = 1 - switch(measured_size) - if(1 to 8) - size_affix = "1" - if(9 to 15) - size_affix = "2" - if(16 to 24) - size_affix = "3" - else - size_affix = "4" - var/passed_string = "penis_[genital_type]_[size_affix]" - if(uses_skintones) - passed_string += "_s" - icon_state = passed_string - -/obj/item/organ/external/genital/penis/get_sprite_size_string() - if(aroused != AROUSAL_FULL && sheath != SHEATH_NONE) //Sheath time! - var/poking_out = 0 - if(aroused == AROUSAL_PARTIAL) - poking_out = 1 - return "[lowertext(sheath)]_[poking_out]" - - var/size_affix - var/measured_size = FLOOR(genital_size,1) - var/is_erect = 0 - if(aroused == AROUSAL_FULL) - is_erect = 1 - if(measured_size < 1) - measured_size = 1 - switch(measured_size) - if(1 to 8) - size_affix = "1" - if(9 to 15) - size_affix = "2" - if(16 to 24) - size_affix = "3" - else - size_affix = "4" - var/passed_string = "[genital_type]_[size_affix]_[is_erect]" - if(uses_skintones) - passed_string += "_s" - return passed_string - -/obj/item/organ/external/genital/penis/build_from_dna(datum/dna/DNA, associated_key) - girth = DNA.features["penis_girth"] - uses_skin_color = DNA.features["penis_uses_skincolor"] - set_size(DNA.features["penis_size"]) - - return ..() - -/obj/item/organ/external/genital/penis/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA) - var/datum/sprite_accessory/genital/penis/snake = accessory - if(snake.can_have_sheath) - sheath = DNA.features["penis_sheath"] - if(DNA.features["penis_uses_skintones"]) - uses_skintones = accessory.has_skintone_shading - -/datum/bodypart_overlay/mutant/genital/penis/get_global_feature_list() - return GLOB.sprite_accessories[ORGAN_SLOT_PENIS] - - -/obj/item/organ/external/genital/testicles - name = "testicles" - desc = "A male reproductive organ." - icon_state = "testicles" - icon = 'modular_skyrat/master_files/icons/obj/genitals/testicles.dmi' - mutantpart_key = ORGAN_SLOT_TESTICLES - mutantpart_info = list(MUTANT_INDEX_NAME = "Pair", MUTANT_INDEX_COLOR_LIST = list("#FFEEBB")) - zone = BODY_ZONE_PRECISE_GROIN - slot = ORGAN_SLOT_TESTICLES - aroused = AROUSAL_CANT - genital_location = GROIN - drop_when_organ_spilling = FALSE - bodypart_overlay = /datum/bodypart_overlay/mutant/genital/testicles - -/datum/bodypart_overlay/mutant/genital/testicles - feature_key = ORGAN_SLOT_TESTICLES - layers = EXTERNAL_ADJACENT | EXTERNAL_BEHIND - -/obj/item/organ/external/genital/testicles/update_genital_icon_state() - var/measured_size = clamp(genital_size, 1, 3) - var/passed_string = "testicles_[genital_type]_[measured_size]" - if(uses_skintones) - passed_string += "_s" - icon_state = passed_string - -/obj/item/organ/external/genital/testicles/get_description_string(datum/sprite_accessory/genital/gas) - if(genital_name == "Internal") //Checks if Testicles are of Internal Variety - visibility_preference = GENITAL_SKIP_VISIBILITY //Removes visibility if yes. - else - return "You see a pair of testicles, they look [lowertext(balls_size_to_description(genital_size))]." - -/obj/item/organ/external/genital/testicles/build_from_dna(datum/dna/DNA, associated_key) - uses_skin_color = DNA.features["testicles_uses_skincolor"] - set_size(DNA.features["balls_size"]) - - return ..() - -/obj/item/organ/external/genital/testicles/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA) - if(DNA.features["testicles_uses_skintones"]) - uses_skintones = accessory.has_skintone_shading - -/obj/item/organ/external/genital/testicles/get_sprite_size_string() - var/measured_size = FLOOR(genital_size,1) - measured_size = clamp(measured_size, 0, 3) - var/passed_string = "[genital_type]_[measured_size]" - if(uses_skintones) - passed_string += "_s" - return passed_string - -/datum/bodypart_overlay/mutant/genital/testicles/get_global_feature_list() - return GLOB.sprite_accessories[ORGAN_SLOT_TESTICLES] - - -/obj/item/organ/external/genital/testicles/proc/balls_size_to_description(number) - if(number < 0) - number = 0 - var/returned = GLOB.balls_size_translation["[number]"] - if(!returned) - returned = BREAST_SIZE_BEYOND_MEASUREMENT - return returned - -/obj/item/organ/external/genital/testicles/proc/balls_description_to_size(cup) - for(var/key in GLOB.balls_size_translation) - if(GLOB.balls_size_translation[key] == cup) - return text2num(key) - return 0 - - -/obj/item/organ/external/genital/vagina - name = "vagina" - icon = 'modular_skyrat/master_files/icons/obj/genitals/vagina.dmi' - icon_state = "vagina" - mutantpart_key = ORGAN_SLOT_VAGINA - mutantpart_info = list(MUTANT_INDEX_NAME = "Human", MUTANT_INDEX_COLOR_LIST = list("#FFEEBB")) - zone = BODY_ZONE_PRECISE_GROIN - slot = ORGAN_SLOT_VAGINA - genital_location = GROIN - drop_when_organ_spilling = FALSE - bodypart_overlay = /datum/bodypart_overlay/mutant/genital/vagina - -/datum/bodypart_overlay/mutant/genital/vagina - feature_key = ORGAN_SLOT_VAGINA - layers = EXTERNAL_FRONT - -/obj/item/organ/external/genital/vagina/get_description_string(datum/sprite_accessory/genital/gas) - var/returned_string = "You see a [lowertext(genital_name)] vagina." - if(lowertext(genital_name) == "cloaca") - returned_string = "You see a cloaca." //i deserve a pipebomb for this - switch(aroused) - if(AROUSAL_NONE) - returned_string += " It seems dry." - if(AROUSAL_PARTIAL) - returned_string += " It's glistening with arousal." - if(AROUSAL_FULL) - returned_string += " It's bright and dripping with arousal." - return returned_string - -/obj/item/organ/external/genital/vagina/get_sprite_size_string() - var/is_dripping = 0 - if(aroused == AROUSAL_FULL) - is_dripping = 1 - return "[genital_type]_[is_dripping]" - -/obj/item/organ/external/genital/vagina/build_from_dna(datum/dna/DNA, associated_key) - uses_skin_color = DNA.features["vagina_uses_skincolor"] - - return ..() // will update the sprite suffix - -/obj/item/organ/external/genital/vagina/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA) - if(DNA.features["vagina_uses_skintones"]) - uses_skintones = accessory.has_skintone_shading - -/datum/bodypart_overlay/mutant/genital/vagina/get_global_feature_list() - return GLOB.sprite_accessories[ORGAN_SLOT_VAGINA] - - -/obj/item/organ/external/genital/womb - name = "womb" - desc = "A female reproductive organ." - icon = 'modular_skyrat/master_files/icons/obj/genitals/vagina.dmi' - icon_state = "womb" - mutantpart_key = ORGAN_SLOT_WOMB - mutantpart_info = list(MUTANT_INDEX_NAME = "Normal", MUTANT_INDEX_COLOR_LIST = list("FFEEBB")) - zone = BODY_ZONE_PRECISE_GROIN - slot = ORGAN_SLOT_WOMB - visibility_preference = GENITAL_SKIP_VISIBILITY - aroused = AROUSAL_CANT - genital_location = GROIN - drop_when_organ_spilling = FALSE - bodypart_overlay = /datum/bodypart_overlay/mutant/genital/womb - -/datum/bodypart_overlay/mutant/genital/womb - feature_key = ORGAN_SLOT_WOMB - layers = NONE - -/datum/bodypart_overlay/mutant/genital/womb/get_global_feature_list() - return GLOB.sprite_accessories[ORGAN_SLOT_WOMB] - - -/obj/item/organ/external/genital/anus - name = "anus" - desc = "What do you want me to tell you?" - icon = 'modular_skyrat/master_files/icons/obj/genitals/anus.dmi' - icon_state = "anus" - mutantpart_key = ORGAN_SLOT_ANUS - mutantpart_info = list(MUTANT_INDEX_NAME = "Normal", MUTANT_INDEX_COLOR_LIST = list("FEB")) - zone = BODY_ZONE_PRECISE_GROIN - slot = ORGAN_SLOT_ANUS - genital_location = GROIN - drop_when_organ_spilling = FALSE - bodypart_overlay = /datum/bodypart_overlay/mutant/genital/anus - -/datum/bodypart_overlay/mutant/genital/anus - feature_key = ORGAN_SLOT_ANUS - layers = NONE - -/obj/item/organ/external/genital/anus/get_description_string(datum/sprite_accessory/genital/gas) - var/returned_string = "You see an [lowertext(genital_name)]." - if(aroused == AROUSAL_PARTIAL) - returned_string += " It looks tight." - if(aroused == AROUSAL_FULL) - returned_string += " It looks very tight." - return returned_string - -/datum/bodypart_overlay/mutant/genital/anus/get_global_feature_list() - return GLOB.sprite_accessories[ORGAN_SLOT_ANUS] - - -/obj/item/organ/external/genital/breasts - name = "breasts" - desc = "Female milk producing organs." - icon_state = "breasts" - icon = 'modular_skyrat/master_files/icons/obj/genitals/breasts.dmi' - genital_type = "pair" - mutantpart_key = ORGAN_SLOT_BREASTS - mutantpart_info = list(MUTANT_INDEX_NAME = "Pair", MUTANT_INDEX_COLOR_LIST = list("#FFEEBB")) - zone = BODY_ZONE_CHEST - slot = ORGAN_SLOT_BREASTS - genital_location = CHEST - drop_when_organ_spilling = FALSE - var/lactates = FALSE - bodypart_overlay = /datum/bodypart_overlay/mutant/genital/breasts - -/datum/bodypart_overlay/mutant/genital/breasts - feature_key = ORGAN_SLOT_BREASTS - layers = EXTERNAL_FRONT | EXTERNAL_BEHIND - -/obj/item/organ/external/genital/breasts/get_description_string(datum/sprite_accessory/genital/gas) - var/returned_string = "You see a [lowertext(genital_name)] of breasts." - var/size_description - var/translation = breasts_size_to_cup(genital_size) - switch(translation) - if(BREAST_SIZE_FLATCHESTED) - size_description = " They are small and flat, however." - if(BREAST_SIZE_BEYOND_MEASUREMENT) - size_description = " Their size is enormous, you estimate they're around [genital_size] inches in diameter." - else - size_description = " You estimate they are [translation]-cups." - returned_string += size_description - if(aroused == AROUSAL_FULL) - if(lactates) - returned_string += " The nipples seem hard, perky and are leaking milk." - else - returned_string += " Their nipples look hard and perky." - return returned_string - -/obj/item/organ/external/genital/breasts/update_genital_icon_state() - var/max_size = 5 - var/current_size = FLOOR(genital_size, 1) - if(current_size < 0) - current_size = 0 - else if (current_size > max_size) - current_size = max_size - var/passed_string = "breasts_pair_[current_size]" - if(uses_skintones) - passed_string += "_s" - icon_state = passed_string - -/obj/item/organ/external/genital/breasts/get_sprite_size_string() - var/max_size = 5 - if(genital_type == "pair") - max_size = 16 - var/current_size = FLOOR(genital_size, 1) - if(current_size < 0) - current_size = 0 - else if (current_size > max_size) - current_size = max_size - var/passed_string = "[genital_type]_[current_size]" - if(uses_skintones) - passed_string += "_s" - return passed_string - -/obj/item/organ/external/genital/breasts/build_from_dna(datum/dna/DNA, associated_key) - lactates = DNA.features["breasts_lactation"] - uses_skin_color = DNA.features["breasts_uses_skincolor"] - set_size(DNA.features["breasts_size"]) - - return ..() - -/obj/item/organ/external/genital/breasts/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA) - if(DNA.features["breasts_uses_skintones"]) - uses_skintones = accessory.has_skintone_shading - -/datum/bodypart_overlay/mutant/genital/breasts/get_global_feature_list() - return GLOB.sprite_accessories[ORGAN_SLOT_BREASTS] - -/obj/item/organ/external/genital/breasts/proc/breasts_size_to_cup(number) - if(number < 0) - number = 0 - var/returned = GLOB.breast_size_translation["[number]"] - if(!returned) - returned = BREAST_SIZE_BEYOND_MEASUREMENT - return returned - -/obj/item/organ/external/genital/breasts/proc/breasts_cup_to_size(cup) - for(var/key in GLOB.breast_size_translation) - if(GLOB.breast_size_translation[key] == cup) - return text2num(key) - return 0 - - -/mob/living/carbon/human/verb/toggle_genitals() - set category = "IC" - set name = "Expose/Hide genitals" - set desc = "Allows you to toggle which genitals should show through clothes or not." - - if(stat != CONSCIOUS) - to_chat(usr, span_warning("You can't toggle genitals visibility right now...")) - return - - var/list/genital_list = list() - for(var/obj/item/organ/external/genital/genital in organs) - if(!genital.visibility_preference == GENITAL_SKIP_VISIBILITY) - genital_list += genital - if(!genital_list.len) //There is nothing to expose - return - //Full list of exposable genitals created - var/obj/item/organ/external/genital/picked_organ - picked_organ = input(src, "Choose which genitalia to expose/hide", "Expose/Hide genitals") as null|anything in genital_list - if(picked_organ && (picked_organ in organs)) - var/list/gen_vis_trans = list("Never show" = GENITAL_NEVER_SHOW, - "Hidden by clothes" = GENITAL_HIDDEN_BY_CLOTHES, - "Always show" = GENITAL_ALWAYS_SHOW - ) - var/picked_visibility = input(src, "Choose visibility setting", "Expose/Hide genitals") as null|anything in gen_vis_trans - if(picked_visibility && picked_organ && (picked_organ in organs)) - picked_organ.visibility_preference = gen_vis_trans[picked_visibility] - update_body() - return - -//Removing ERP IC verb depending on config -/mob/living/carbon/human/Initialize(mapload) - . = ..() - if(CONFIG_GET(flag/disable_erp_preferences)) - verbs -= /mob/living/carbon/human/verb/toggle_genitals - verbs -= /mob/living/carbon/human/verb/toggle_arousal - -/mob/living/carbon/human/verb/toggle_arousal() - set category = "IC" - set name = "Toggle Arousal" - set desc = "Allows you to toggle how aroused your private parts are." - - if(stat != CONSCIOUS) - to_chat(usr, span_warning("You can't toggle arousal right now...")) - return - - var/list/genital_list = list() - for(var/obj/item/organ/external/genital/genital in organs) - if(!genital.aroused == AROUSAL_CANT) - genital_list += genital - if(!genital_list.len) //There is nothing to expose - return - //Full list of exposable genitals created - var/obj/item/organ/external/genital/picked_organ - picked_organ = input(src, "Choose which genitalia to change arousal", "Expose/Hide genitals") as null|anything in genital_list - if(picked_organ && (picked_organ in organs)) - var/list/gen_arous_trans = list( - "Not aroused" = AROUSAL_NONE, - "Partly aroused" = AROUSAL_PARTIAL, - "Very aroused" = AROUSAL_FULL, - ) - var/picked_arousal = input(src, "Choose arousal", "Toggle Arousal") as null|anything in gen_arous_trans - if(picked_arousal && picked_organ && (picked_organ in organs)) - picked_organ.aroused = gen_arous_trans[picked_arousal] - picked_organ.update_sprite_suffix() - update_body() - return diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/spines.dm b/modular_skyrat/modules/customization/modules/surgery/organs/spines.dm deleted file mode 100644 index f54aa83792e8e5..00000000000000 --- a/modular_skyrat/modules/customization/modules/surgery/organs/spines.dm +++ /dev/null @@ -1,23 +0,0 @@ -/// Allows us to offset the spines' layer by a very small amount, to make it appear above the tails. -/// Not the best solution, but the simplest I found in the amount of time I had. -#define SPINES_LAYER_OFFSET 0.01 - -/datum/bodypart_overlay/mutant/spines - color_source = ORGAN_COLOR_OVERRIDE - layers = ALL_EXTERNAL_OVERLAYS - -/datum/bodypart_overlay/mutant/spines/override_color(rgb_value) - return draw_color - -/datum/bodypart_overlay/mutant/spines/can_draw_on_bodypart(mob/living/carbon/human/human) - return !sprite_datum.is_hidden(human) - -/// We overwrite this just because we need to change the layer to be ever so slightly above the tails. -/// It sucks, but it's the best I could do without refactoring a lot more. -/datum/bodypart_overlay/mutant/spines/get_images(image_layer, obj/item/bodypart/limb) - var/list/mutable_appearance/returned_overlays = ..() - - for(var/mutable_appearance/overlay in returned_overlays) - overlay.layer += SPINES_LAYER_OFFSET - - return returned_overlays diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/tails.dm b/modular_skyrat/modules/customization/modules/surgery/organs/tails.dm deleted file mode 100644 index 007fcb16dfd4c2..00000000000000 --- a/modular_skyrat/modules/customization/modules/surgery/organs/tails.dm +++ /dev/null @@ -1,61 +0,0 @@ -/obj/item/organ/external/tail - mutantpart_key = "tail" - mutantpart_info = list(MUTANT_INDEX_NAME = "Smooth", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF")) - var/can_wag = TRUE - var/wagging = FALSE - -/datum/bodypart_overlay/mutant/tail - color_source = ORGAN_COLOR_OVERRIDE - -/datum/bodypart_overlay/mutant/tail/override_color(rgb_value) - return draw_color - -/datum/bodypart_overlay/mutant/tail/get_feature_key_for_overlay() - return (wagging ? "wagging" : "") + feature_key - -/datum/bodypart_overlay/mutant/tail/get_base_icon_state() - return sprite_datum.icon_state - -/datum/bodypart_overlay/mutant/tail/can_draw_on_bodypart(mob/living/carbon/human/wearer) - var/list/used_in_turf = list("tail") - // Emote exception - if(wearer.owned_turf?.name in used_in_turf) - return FALSE - - if(!wearer.w_uniform && !wearer.wear_suit) - return ..() - - // Can hide if wearing uniform - if(feature_key in wearer.try_hide_mutant_parts) - return FALSE - - if(wearer.wear_suit) - // Exception for MODs - if(istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) - return TRUE - - // Hide accessory if flagged to do so - else if(wearer.wear_suit.flags_inv & HIDETAIL) - return FALSE - - return TRUE - - -/obj/item/organ/external/tail/Insert(mob/living/carbon/reciever, special, drop_if_replaced) - if(sprite_accessory_flags & SPRITE_ACCESSORY_WAG_ABLE) - wag_flags |= WAG_ABLE - return ..() - -/obj/item/organ/external/tail/cat - mutantpart_info = list(MUTANT_INDEX_NAME = "Cat", MUTANT_INDEX_COLOR_LIST = list("#FFAA00")) - -/obj/item/organ/external/tail/monkey - mutantpart_info = list(MUTANT_INDEX_NAME = "Monkey", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF")) - -/obj/item/organ/external/tail/lizard - mutantpart_info = list(MUTANT_INDEX_NAME = "Smooth", MUTANT_INDEX_COLOR_LIST = list("#DDFFDD")) - -/obj/item/organ/external/tail/fluffy - name = "fluffy tail" - -/obj/item/organ/external/tail/fluffy/no_wag diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/wings.dm b/modular_skyrat/modules/customization/modules/surgery/organs/wings.dm deleted file mode 100644 index fdeeb403d73c14..00000000000000 --- a/modular_skyrat/modules/customization/modules/surgery/organs/wings.dm +++ /dev/null @@ -1,106 +0,0 @@ -/obj/item/organ/external/wings - name = "wings" - desc = "A pair of wings. Those may or may not allow you to fly... or at the very least flap." - zone = BODY_ZONE_CHEST - slot = ORGAN_SLOT_WINGS - mutantpart_key = "wings" - mutantpart_info = list(MUTANT_INDEX_NAME = "Bat", MUTANT_INDEX_COLOR_LIST = list("#335533")) - ///Whether the wings should grant flight on insertion. - var/unconditional_flight - ///What species get flights thanks to those wings. Important for moth wings - var/list/flight_for_species - ///Whether a wing can be opened by the *wing emote. The sprite use a "_open" suffix, before their layer - var/can_open - ///Whether an openable wing is currently opened - var/is_open - ///Whether the owner of wings has flight thanks to the wings - var/granted_flight - -/datum/bodypart_overlay/mutant/wings - color_source = ORGAN_COLOR_OVERRIDE - -/datum/bodypart_overlay/mutant/wings/get_global_feature_list() - return GLOB.sprite_accessories["wings"] - -//TODO: Well you know what this flight stuff is a bit complicated and hardcoded, this is enough for now - -/datum/bodypart_overlay/mutant/wings/override_color(rgb_value) - return draw_color - -/obj/item/organ/external/wings/moth - name = "moth wings" - desc = "A pair of fuzzy moth wings." - flight_for_species = list(SPECIES_MOTH) - -/obj/item/organ/external/wings/flight - unconditional_flight = TRUE - can_open = TRUE - -/obj/item/organ/external/wings/flight/angel - name = "angel wings" - desc = "A pair of magnificent, feathery wings. They look strong enough to lift you up in the air." - mutantpart_info = list(MUTANT_INDEX_NAME = "Angel", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF")) - -/obj/item/organ/external/wings/flight/dragon - name = "dragon wings" - desc = "A pair of intimidating, membranous wings. They look strong enough to lift you up in the air." - mutantpart_info = list(MUTANT_INDEX_NAME = "Dragon", MUTANT_INDEX_COLOR_LIST = list("#880000")) - -/obj/item/organ/external/wings/flight/megamoth - name = "megamoth wings" - desc = "A pair of horrifyingly large, fuzzy wings. They look strong enough to lift you up in the air." - mutantpart_info = list(MUTANT_INDEX_NAME = "Megamoth", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF")) - - -/datum/bodypart_overlay/mutant/wings/functional - color_source = ORGAN_COLOR_INHERIT - - -/datum/bodypart_overlay/mutant/wings/functional/original_color - color_source = ORGAN_COLOR_OVERRIDE - - -/datum/bodypart_overlay/mutant/wings/functional/original_color/override_color(rgb_value) - return COLOR_WHITE // We want to keep those wings as their original color, because it looks better. - - -/datum/bodypart_overlay/mutant/wings/functional/locked/get_global_feature_list() - if(wings_open) - return GLOB.sprite_accessories["wings_open"] - - return GLOB.sprite_accessories["wings_functional"] - - -// We need to overwrite this because all of these wings are locked. -/datum/bodypart_overlay/mutant/wings/functional/locked/get_random_appearance() - var/list/valid_restyles = list() - var/list/feature_list = get_global_feature_list() - for(var/accessory in feature_list) - var/datum/sprite_accessory/accessory_datum = feature_list[accessory] - valid_restyles += accessory_datum - - return pick(valid_restyles) - - -/datum/bodypart_overlay/mutant/wings/functional/locked/original_color - color_source = ORGAN_COLOR_OVERRIDE - - -/datum/bodypart_overlay/mutant/wings/functional/locked/original_color/override_color(rgb_value) - return COLOR_WHITE // We want to keep those wings as their original color, because it looks better. - - -/obj/item/organ/external/wings/functional - bodypart_overlay = /datum/bodypart_overlay/mutant/wings/functional/locked - -/obj/item/organ/external/wings/functional/angel - bodypart_overlay = /datum/bodypart_overlay/mutant/wings/functional/original_color - -/obj/item/organ/external/wings/functional/dragon - bodypart_overlay = /datum/bodypart_overlay/mutant/wings/functional - -/obj/item/organ/external/wings/functional/moth - bodypart_overlay = /datum/bodypart_overlay/mutant/wings/functional/locked/original_color - -/obj/item/organ/external/wings/functional/robotic - bodypart_overlay = /datum/bodypart_overlay/mutant/wings/functional diff --git a/modular_skyrat/modules/customization/readme.md b/modular_skyrat/modules/customization/readme.md deleted file mode 100644 index b488c0321948da..00000000000000 --- a/modular_skyrat/modules/customization/readme.md +++ /dev/null @@ -1,89 +0,0 @@ -## Title: Customization - -MODULE ID: CUSTOMIZATION - -### Description: - -IF YOU WANT TO ADD AN EXTRA FEATURE TO SOMEONES DNA LOOK AT "code/__DEFINES/~skyrat_defines/DNA.dm" - -Re-writes how mutant bodyparts exist and how they're handled. Adds in a per limb body marking system. Adds in loadout, with lots of clothing ported over. Adds in all the missing species. Adds in flavor text and OOC prefs. Adds in special rendering cases for digitigrades, taurs, snouts, voxes etc. Adds in changeable PDA ringtone message. - -### TG Proc Changes: - - ./code/__HELPERS/global_lists.dm > /proc/make_datum_references_lists() - ./code/__HELPERS/mobs.dm > /proc/random_features() - ./code/controllers/subsystem/job.dm > /datum/controller/subsystem/job/proc/EquipRank() - ./code/datums/dna.dm > /datum/dna/proc/initialize_dna() , /mob/living/carbon/set_species() - ./code/modules/admin/create_mob.dm > /proc/randomize_human() - ./code/modules/client/preferences.dm > ALMOST THE ENTIRETY OF THE FILE - ./code/modules/client/preferences_savefile.dm > ONCE AGAIN, THE ENTIRE FILE - ./code/modules/mob/dead/new_player/preferences_setup.dm > /datum/preferences/proc/random_character(), /datum/preferences/proc/random_species(), /datum/preferences/proc/update_preview_icon() - ./code/modules/mob/living/carbon/carbon_update_icons.dm > /mob/living/carbon/update_inv_wear_mask(), /mob/living/carbon/update_inv_head(), /mob/living/carbon/proc/update_body_parts(), /mob/living/carbon/proc/generate_icon_render_key() - ./code/modules/mob/living/carbon/human/emote.dm > /datum/emote/living/carbon/human/wag/run_emote(), /datum/emote/living/carbon/human/wag/can_run_emote() - ./code/modules/mob/living/carbon/human/examine.dm > /mob/living/carbon/human/examine() - ./code/modules/mob/living/carbon/human/human_update_icons.dm > /mob/living/carbon/human/update_inv_w_uniform(), /mob/living/carbon/human/update_inv_glasses(), /mob/living/carbon/human/update_inv_shoes(), /mob/living/carbon/human/update_inv_wear_suit(), /obj/item/proc/build_worn_icon(), /mob/living/carbon/human/generate_icon_render_key() - ./code/modules/mob/living/carbon/human/species.dm > /datum/species/proc/on_species_gain(), /datum/species/proc/handle_body(), /datum/species/proc/handle_mutant_bodyparts(), /datum/species/proc/can_equip(), /datum/species/proc/can_wag_tail(), /datum/species/proc/stop_wagging_tail(), /datum/species/proc/start_wagging_tail(), /datum/species/proc/is_wagging_tail(), /datum/species/proc/handle_hair() - ./code/modules/mob/living/carbon/human/species_types/felinid.dm > the 5 procs related to wagging tail - ./code/modules/mob/living/carbon/human/species_types/lizardpeople.dm the 5 procs related to wagging tail and - /datum/species/lizard/on_species_gain() - ./code/modules/surgery/bodyparts/_bodyparts.dm > /obj/item/bodypart/proc/get_limb_icon() - ./code/modules/surgery/organs/ears.dm > /obj/item/organ/internal/ears/cat/Insert(), /obj/item/organ/internal/ears/cat/Remove() - ./code/modules/surgery/organs/tails.dm > /obj/item/organ/external/tail/cat/Insert(), /obj/item/organ/external/tail/cat/Remove(), /obj/item/organ/external/tail/lizard/Initialize(mapload), /obj/item/organ/external/tail/lizard/Insert(), /obj/item/organ/external/tail/lizard/Remove() - ./code/modules/surgery/bodyparts/dismemberment.dm > /mob/living/carbon/regenerate_limb() - ./code/modules/mob/living/carbon/human/status_procs.dm > /mob/living/carbon/human/become_husk() > APPENDED - ./code/modules/reagents/chemistry/holder.dm > /datum/reagents/metabolize() - ./code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm > /obj/item/reagent_containers/cup/glass/drinkingglass/on_reagent_change() - ./code/modules/mob/living/carbon/human/human_defense.dm > /mob/living/carbon/human/emp_act() - ./code/modules/mob/living/carbon/human.dm > /mob/living/carbon/human/revive() > APPENDED - ./code/modules/reagents/chemistry/reagents/food_reagents.dm > datum/reagent/consumable/on_mob_life() - ./code/datums/traits/negative.dm > /datum/quirk/prosthetic_limb - .\code\modules\client.dm > /client/proc/update_special_keybinds() - ./code/datums/traits/negative.dm > /datum/quirk/prosthetic_limb - - ./code/modules/mob/living/carbon/human/species.dm > /datum/species/regenerate_organs() > APPENDED - - ./code/controllers/subsystem/job.dm > /datum/controller/subsystem/job/proc/FindOccupationCandidates(), /datum/controller/subsystem/job/proc/GiveRandomJob(), /datum/controller/subsystem/job/proc/DivideOccupations(), /datum/controller/subsystem/job/proc/AssignRole() - ./code/modules/mob/dead/new_player/new_player.dm > /mob/dead/new_player/proc/IsJobUnavailable(), /proc/get_job_unavailable_error_message() - -### Defines: - -./code/modules/surgery/organs/tongue.dm > var/static/list/languages_possible_base - added 2 languages -./code/modules/mob/living/carbon/human/species_types/lizardpeople.dm > commented out "mutant_organs = list(/obj/item/organ/external/tail/lizard)" -./code/modules/mob/living/carbon/human/species_types/felinid.dm > commented out "mutantears = /obj/item/organ/internal/ears/cat" and "mutant_organs = list(/obj/item/organ/external/tail/cat)" -./code/modules/mob/living/carbon/human/species.dm > var/list/list/mutant_bodyparts (added typed list type) -./code/_globalvars/lists/flavor_misc.dm > Removed accessory list defines -.\code\datums\keybindings\living.dm > /datum/keybinding/living/look_up > from L to P - -./code/__DEFINES/~skyrat_defines/DNA.dm > A TON of defines -./code/__DEFINES/~skyrat_defines/obj_flags.dm > Organ flags -./code/__DEFINES/~skyrat_defines/say.dm > MAX_FLAVOR_LEN -./code/__DEFINES/~skyrat_defines/traits.dm > TRAIT_NO_HUSK - -.\modular_skyrat\modules\customization\modules\reagents\chemistry\reagents.dm > var/process_flags - -### Master file additions - -.\modular_skyrat\master_files\icons\mob\clothing\eyes_vox.dmi -.\modular_skyrat\master_files\icons\mob\clothing\feet_digi.dmi -.\modular_skyrat\master_files\icons\mob\clothing\head_muzzled.dmi -.\modular_skyrat\master_files\icons\mob\clothing\head_vox.dmi -.\modular_skyrat\master_files\icons\mob\clothing\mask_muzzled.dmi -.\modular_skyrat\master_files\icons\mob\clothing\mask_vox.dmi -.\modular_skyrat\master_files\icons\mob\clothing\suit_digi.dmi -.\modular_skyrat\master_files\icons\mob\clothing\suit_taur_hoof.dmi -.\modular_skyrat\master_files\icons\mob\clothing\suit_taur_paw.dmi -.\modular_skyrat\master_files\icons\mob\clothing\suit_taur_snake.dmi -.\modular_skyrat\master_files\icons\mob\clothing\uniform_digi.dmi -.\modular_skyrat\master_files\icons\mob\clothing\under\uniform_digi.dmi -.\modular_skyrat\master_files\icons\mob\clothing\under\uniform_taur_hoof.dmi -.\modular_skyrat\master_files\icons\mob\clothing\under\uniform_taur_paw.dmi -.\modular_skyrat\master_files\icons\mob\clothing\under\uniform_taur_snake.dmi - -./modular_skyrat/master_files/icons/obj/drinks.dmi - -### Included files that are not contained in this module: - -- N/A - -### Credits: - -Azarak diff --git a/modular_skyrat/modules/decay_subsystem/code/decay_turf_handling.dm b/modular_skyrat/modules/decay_subsystem/code/decay_turf_handling.dm deleted file mode 100644 index 847aa205e9347b..00000000000000 --- a/modular_skyrat/modules/decay_subsystem/code/decay_turf_handling.dm +++ /dev/null @@ -1,14 +0,0 @@ -/turf/open/floor - turf_flags = IS_SOLID | CAN_DECAY_BREAK_1 // We do it this way because we can then easily pick what we don't want to be broken. - -/turf/closed/wall - flags_1 = CAN_BE_DIRTY_1 - -/turf/open/floor/plating - turf_flags = IS_SOLID /// No breaking the plating - -/turf/open/floor/glass - turf_flags = IS_SOLID /// No breaking the glass (doesn't leave plating behind) - -/turf/open/misc/asteroid - turf_flags = NONE /// They shouldn't break and they shouldn't be dirty, it's literally already a dirty turf. diff --git a/modular_skyrat/modules/delam_emergency_stop/README.md b/modular_skyrat/modules/delam_emergency_stop/README.md deleted file mode 100644 index 2c25a50a124aa9..00000000000000 --- a/modular_skyrat/modules/delam_emergency_stop/README.md +++ /dev/null @@ -1,41 +0,0 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/22145 - -## Title: Delam SCRAM (Suppression System) - -MODULE ID: DELAM_SCRAM - -### Description: - -Adds an emergency stop for the supermatter engine. Operable in the first 30 minutes, allows Engineering to screw up without admin intervention to delete the crystal. - -### TG Proc Changes: - -File Location | Changed TG Proc -------------- | --------------- -`code/modules/power/supermatter/supermatter.dm` -`/obj/machinery/power/supermatter_crystal/proc/count_down` - -`code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm` -`/datum/sm_delam/proc/delam_progress(obj/machinery/power/supermatter_crystal/sm)` - -### TG File Changes: - -- code/modules/power/supermatter/supermatter.dm -- code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm - -### Defines: - -File Location | Defines -------------- | ------- -code/__DEFINES/~skyrat_defines/signals.dm | `#define COMSIG_MAIN_SM_DELAMINATING "delam_time"` - -### Master file additions - -- N/A - -### Included files that are not contained in this module: - -- N/A - -### Credits: -- LT3 diff --git a/modular_skyrat/modules/departmentization/cargo_technician.dm b/modular_skyrat/modules/departmentization/cargo_technician.dm deleted file mode 100644 index c32ab60affc8db..00000000000000 --- a/modular_skyrat/modules/departmentization/cargo_technician.dm +++ /dev/null @@ -1,2 +0,0 @@ -/datum/outfit/job/cargo_tech - uniform = /obj/item/clothing/under/rank/cargo/tech/skyrat/turtleneck diff --git a/modular_skyrat/modules/departmentization/clothing_overrides.dm b/modular_skyrat/modules/departmentization/clothing_overrides.dm deleted file mode 100644 index 6de4a1dd9e14d4..00000000000000 --- a/modular_skyrat/modules/departmentization/clothing_overrides.dm +++ /dev/null @@ -1,7 +0,0 @@ -/obj/item/clothing/under/rank/cargo/tech - name = "cargo technician's jumpsuit" - desc = "A jumpsuit from the previous supply-department, a tag on the collar says, 'Production Line: 2557, Product of Nanotrasen.'" - -/obj/item/clothing/under/rank/cargo/tech/skirt - name = "cargo technician's jumpskirt" - desc = "A jumpskirt from the previous supply-department, a tag on the collar says, 'Production Line: 2557, Product of Nanotrasen.'" diff --git a/modular_skyrat/modules/departmentization/quartermaster.dm b/modular_skyrat/modules/departmentization/quartermaster.dm deleted file mode 100644 index 5ca4528ecabca2..00000000000000 --- a/modular_skyrat/modules/departmentization/quartermaster.dm +++ /dev/null @@ -1,2 +0,0 @@ -/datum/outfit/job/quartermaster - uniform = /obj/item/clothing/under/rank/cargo/qm/skyrat/turtleneck diff --git a/modular_skyrat/modules/digi_bloodsole/code/_shoes.dm b/modular_skyrat/modules/digi_bloodsole/code/_shoes.dm deleted file mode 100644 index 9076ce503fd442..00000000000000 --- a/modular_skyrat/modules/digi_bloodsole/code/_shoes.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/item/clothing/shoes/worn_overlays(isinhands = FALSE,icon_file,mutant_styles=NONE) - . = ..() - if(isinhands) - return - if(damaged_clothes) - . += mutable_appearance('icons/effects/item_damage.dmi', "damagedshoe") - if(GET_ATOM_BLOOD_DNA(src)) - if (mutant_styles & CLOTHING_DIGITIGRADE_VARIATION) - if(clothing_flags & LARGE_WORN_ICON) - . += mutable_appearance('modular_skyrat/modules/digi_bloodsole/icons/64x64.dmi', "shoeblood_large_digi") - else - . += mutable_appearance('modular_skyrat/modules/digi_bloodsole/icons/blood.dmi', "shoeblood_digi") - else - if(clothing_flags & LARGE_WORN_ICON) - . += mutable_appearance('icons/effects/64x64.dmi', "shoeblood_large") - else - . += mutable_appearance('icons/effects/blood.dmi', "shoeblood") diff --git a/modular_skyrat/modules/dogfashion/code/head.dm b/modular_skyrat/modules/dogfashion/code/head.dm deleted file mode 100644 index a1ab46e43a155f..00000000000000 --- a/modular_skyrat/modules/dogfashion/code/head.dm +++ /dev/null @@ -1,5 +0,0 @@ -/datum/dog_fashion/head/yankee - name = "MC REAL_NAME" - desc = "They're a big deal in the dog rapping world, apperently." - icon_file = 'modular_skyrat/master_files/icons/mob/dog/corgi_head.dmi' - emote_see = list("mumbles some bars.", "practises their beatboxing.") diff --git a/modular_skyrat/modules/drone_adjustments/drone.dm b/modular_skyrat/modules/drone_adjustments/drone.dm deleted file mode 100644 index dc88e3ac36097d..00000000000000 --- a/modular_skyrat/modules/drone_adjustments/drone.dm +++ /dev/null @@ -1,41 +0,0 @@ -/obj/machinery/drone_dispenser/Initialize(mapload) - //So that there are starting drone shells in the beginning of the shift - if(mapload) - starting_amount = 10000 - return ..() - -/obj/item/card/id/advanced/simple_bot - //So that the drones can actually access everywhere and fix it - trim = /datum/id_trim/centcom - -/obj/machinery/door/Initialize(mapload) - . = ..() - AddComponent(/datum/component/sliding_under) - -//This is so we log all machinery interactions for drones -/obj/machinery/attack_drone(mob/living/basic/drone/user, list/modifiers) - . = ..() - user.log_message("[key_name(user)] interacted with [src] at [AREACOORD(src)]", LOG_GAME) - -/mob/living/basic/drone - //So that drones can do things without worrying about stuff - shy = FALSE - //So drones aren't forced to carry around a nodrop toolbox essentially - default_storage = /obj/item/storage/backpack/drone_bag - -/mob/living/basic/drone/Initialize(mapload) - . = ..() - name = "[initial(name)] [rand(0,9)]-[rand(100,999)]" //So that we can identify drones from each other - -/obj/item/storage/backpack/drone_bag - name = "drone backpack" - -/obj/item/storage/backpack/drone_bag/PopulateContents() - . = ..() - new /obj/item/crowbar(src) - new /obj/item/wrench(src) - new /obj/item/screwdriver(src) - new /obj/item/weldingtool(src) - new /obj/item/wirecutters(src) - new /obj/item/multitool(src) - new /obj/item/stack/cable_coil(src) diff --git a/modular_skyrat/modules/electric_welder/readme.md b/modular_skyrat/modules/electric_welder/readme.md deleted file mode 100644 index fb6a4c5b0b12e6..00000000000000 --- a/modular_skyrat/modules/electric_welder/readme.md +++ /dev/null @@ -1,25 +0,0 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/ - -## \ - -Module ID: - -### Description: - -### TG Proc/File Changes: - -- `code/game/objects/items/storage/belt.dm`: `proc/get_types_to_preload` - -### Modular Overrides: - -- `modular_skyrat/master_files/code/modules/cargo/exports/tools.dm`: `var/export_types` - -### Defines: - -- N/A - -### Included files that are not contained in this module: - -- N/A - -### Credits: diff --git a/modular_skyrat/modules/emote_panel/code/emote_panel.dm b/modular_skyrat/modules/emote_panel/code/emote_panel.dm deleted file mode 100644 index f06a7ba2df8549..00000000000000 --- a/modular_skyrat/modules/emote_panel/code/emote_panel.dm +++ /dev/null @@ -1,1020 +0,0 @@ -/mob/proc/manipulate_emotes() - if(!mind) - return - var/list/available_emotes = list() - var/list/all_emotes = list() - - // code\modules\mob\emote.dm - var/static/list/mob_emotes = list( - /mob/proc/emote_flip, - /mob/proc/emote_spin - ) - all_emotes += mob_emotes - - // code\modules\mob\living\emote.dm - var/static/list/living_emotes = list( - /mob/living/proc/emote_blush, - /mob/living/proc/emote_bow, - /mob/living/proc/emote_burp, - /mob/living/proc/emote_choke, - /mob/living/proc/emote_cross, - /mob/living/proc/emote_chuckle, - /mob/living/proc/emote_collapse, - /mob/living/proc/emote_cough, - /mob/living/proc/emote_dance, - /mob/living/proc/emote_drool, - /mob/living/proc/emote_faint, - /mob/living/proc/emote_flap, - /mob/living/proc/emote_aflap, - /mob/living/proc/emote_frown, - /mob/living/proc/emote_gag, - /mob/living/proc/emote_giggle, - /mob/living/proc/emote_glare, - /mob/living/proc/emote_grin, - /mob/living/proc/emote_groan, - /mob/living/proc/emote_grimace, - /mob/living/proc/emote_jump, - /mob/living/proc/emote_kiss, - /mob/living/proc/emote_laugh, - /mob/living/proc/emote_look, - /mob/living/proc/emote_nod, - /mob/living/proc/emote_point, - /mob/living/proc/emote_pout, - /mob/living/proc/emote_scream, - /mob/living/proc/emote_scowl, - /mob/living/proc/emote_shake, - /mob/living/proc/emote_shiver, - /mob/living/proc/emote_sigh, - /mob/living/proc/emote_sit, - /mob/living/proc/emote_smile, - /mob/living/proc/emote_sneeze, - /mob/living/proc/emote_smug, - /mob/living/proc/emote_sniff, - /mob/living/proc/emote_stare, - /mob/living/proc/emote_strech, - /mob/living/proc/emote_sulk, - /mob/living/proc/emote_sway, - /mob/living/proc/emote_tilt, - /mob/living/proc/emote_tremble, - /mob/living/proc/emote_twitch, - /mob/living/proc/emote_twitch_s, - /mob/living/proc/emote_wave, - /mob/living/proc/emote_whimper, - /mob/living/proc/emote_wsmile, - /mob/living/proc/emote_yawn, - /mob/living/proc/emote_gurgle, - /mob/living/proc/emote_inhale, - /mob/living/proc/emote_exhale, - /mob/living/proc/emote_swear - ) - all_emotes += living_emotes - - // code\modules\mob\living\carbon\emote.dm - var/static/list/carbon_emotes = list( - /mob/living/carbon/proc/emote_airguitar, - /mob/living/carbon/proc/emote_blink, - /mob/living/carbon/proc/emote_blink_r, - /mob/living/carbon/proc/emote_crack, - /mob/living/carbon/proc/emote_circle, - /mob/living/carbon/proc/emote_moan, - /mob/living/carbon/proc/emote_slap, - /mob/living/carbon/proc/emote_wink - ) - all_emotes += carbon_emotes - - // code\modules\mob\living\carbon\human\emote.dm - var/static/list/human_emotes = list( - /mob/living/carbon/human/proc/emote_cry, - /mob/living/carbon/human/proc/emote_eyebrow, - /mob/living/carbon/human/proc/emote_grumble, - /mob/living/carbon/human/proc/emote_mumble, - /mob/living/carbon/human/proc/emote_pale, - /mob/living/carbon/human/proc/emote_raise, - /mob/living/carbon/human/proc/emote_salute, - /mob/living/carbon/human/proc/emote_shrug, - /mob/living/carbon/human/proc/emote_wag, - /mob/living/carbon/human/proc/emote_wing - ) - all_emotes += human_emotes - - // modular_skyrat\modules\emotes\code\emote.dm - var/static/list/skyrat_living_emotes = list( - /mob/living/proc/emote_peep, - /mob/living/proc/emote_peep2, - /mob/living/proc/emote_snap, - /mob/living/proc/emote_snap2, - /mob/living/proc/emote_snap3, - /mob/living/proc/emote_awoo, - /mob/living/proc/emote_nya, - /mob/living/proc/emote_weh, - /mob/living/proc/emote_mothsqueak, - /mob/living/proc/emote_mousesqueak, - /mob/living/proc/emote_merp, - /mob/living/proc/emote_bark, - /mob/living/proc/emote_squish, - /mob/living/proc/emote_meow, - /mob/living/proc/emote_hiss1, - /mob/living/proc/emote_chitter, - /mob/living/proc/emote_snore, - /mob/living/proc/emote_clap, - /mob/living/proc/emote_clap1, - /mob/living/proc/emote_headtilt, - /mob/living/proc/emote_blink2, - /mob/living/proc/emote_rblink, - /mob/living/proc/emote_squint, - /mob/living/proc/emote_smirk, - /mob/living/proc/emote_eyeroll, - /mob/living/proc/emote_huff, - /mob/living/proc/emote_etwitch, - /mob/living/proc/emote_clear, - /mob/living/proc/emote_bawk, - /mob/living/proc/emote_caw, - /mob/living/proc/emote_caw2, - /mob/living/proc/emote_whistle, - /mob/living/proc/emote_blep, - /mob/living/proc/emote_bork, - /mob/living/proc/emote_hoot, - /mob/living/proc/emote_growl, - /mob/living/proc/emote_woof, - /mob/living/proc/emote_baa, - /mob/living/proc/emote_baa2, - /mob/living/proc/emote_wurble, - /mob/living/proc/emote_rattle, - /mob/living/proc/emote_cackle, - /mob/living/proc/emote_warble, - /mob/living/proc/emote_trills, - /mob/living/proc/emote_rpurr, - /mob/living/proc/emote_purr, - /mob/living/proc/emote_moo, - /mob/living/proc/emote_honk1 - ) - all_emotes += skyrat_living_emotes - - // code\modules\mob\living\brain\emote.dm - var/static/list/brain_emotes = list( - /mob/living/brain/proc/emote_alarm, - /mob/living/brain/proc/emote_alert, - /mob/living/brain/proc/emote_flash, - /mob/living/brain/proc/emote_notice, - /mob/living/brain/proc/emote_whistle_brain - ) - all_emotes += brain_emotes - - // code\modules\mob\living\carbon\alien\emote.dm - var/static/list/alien_emotes = list( - /mob/living/carbon/alien/proc/emote_gnarl, - /mob/living/carbon/alien/proc/emote_hiss, - /mob/living/carbon/alien/proc/emote_roar - ) - all_emotes += alien_emotes - - // modular_skyrat\modules\emotes\code\synth_emotes.dm - var/static/list/synth_emotes = list( - /mob/living/proc/emote_dwoop, - /mob/living/proc/emote_yes, - /mob/living/proc/emote_no, - /mob/living/proc/emote_boop, - /mob/living/proc/emote_buzz, - /mob/living/proc/emote_beep, - /mob/living/proc/emote_beep2, - /mob/living/proc/emote_buzz2, - /mob/living/proc/emote_chime, - /mob/living/proc/emote_honk, - /mob/living/proc/emote_ping, - /mob/living/proc/emote_sad, - /mob/living/proc/emote_warn, - /mob/living/proc/emote_slowclap - ) - all_emotes += synth_emotes - var/static/list/allowed_species_synth = list( - /datum/species/synthetic - ) - - // modular_skyrat\modules\emotes\code\additionalemotes\overlay_emote.dm - var/static/list/skyrat_living_emotes_overlay = list( - /mob/living/proc/emote_sweatdrop, - /mob/living/proc/emote_exclaim, - /mob/living/proc/emote_question, - /mob/living/proc/emote_realize, - /mob/living/proc/emote_annoyed, - /mob/living/proc/emote_glasses - ) - all_emotes += skyrat_living_emotes_overlay - - // modular_skyrat\modules\emotes\code\additionalemotes\turf_emote.dm - all_emotes += /mob/living/proc/emote_mark_turf - - // Clearing all emotes before applying new ones - verbs -= all_emotes - - // Checking if preferences allow emote panel - if(!src.client?.prefs?.read_preference(/datum/preference/toggle/emote_panel)) - return - - // Checking emote availability - if(isbrain(src)) - // Only brains in MMI have emotes - var/mob/living/brain/current_brain = src - if(current_brain.container && istype(current_brain.container, /obj/item/mmi)) - available_emotes += brain_emotes - else - if(ismob(src)) - available_emotes += mob_emotes - if(isliving(src)) - available_emotes += living_emotes - available_emotes += skyrat_living_emotes - available_emotes += skyrat_living_emotes_overlay - available_emotes += /mob/living/proc/emote_mark_turf - if(iscarbon(src)) - available_emotes += carbon_emotes - if(ishuman(src)) - available_emotes += human_emotes - // Checking if should apply Synth emotes - var/mob/living/carbon/human/current_mob = src - if(current_mob.dna.species.type in allowed_species_synth) - available_emotes += synth_emotes - // Checking if can wag tail - var/obj/item/organ/external/tail/tail = current_mob.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) - if(!(tail?.wag_flags & WAG_ABLE)) - available_emotes -= /mob/living/carbon/human/proc/emote_wag - // Checking if has wings - if(!current_mob.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)) - available_emotes -= /mob/living/carbon/human/proc/emote_wing - if(isalien(src)) - available_emotes += alien_emotes - if(issilicon(src)) - available_emotes += synth_emotes - - // Applying emote panel if preferences allow - for(var/emote in available_emotes) - verbs |= emote - -/mob/mind_initialize() - . = ..() - manipulate_emotes() - -// code\modules\mob\emote.dm -/mob/proc/emote_flip() - set name = "| Flip |" - set category = "Emotes" - usr.emote("flip", intentional = TRUE) - -/mob/proc/emote_spin() - set name = "| Spin |" - set category = "Emotes" - usr.emote("spin", intentional = TRUE) - -// code\modules\mob\living\emote.dm - -/mob/living/proc/emote_blush() - set name = "~ Blush" - set category = "Emotes" - usr.emote("blush", intentional = TRUE) - -/mob/living/proc/emote_bow() - set name = "~ Bow" - set category = "Emotes" - usr.emote("bow", intentional = TRUE) - -/mob/living/proc/emote_burp() - set name = "> Burp" - set category = "Emotes" - usr.emote("burp", intentional = TRUE) - -/mob/living/proc/emote_choke() - set name = "~ Choke" - set category = "Emotes" - usr.emote("choke", intentional = TRUE) - -/mob/living/proc/emote_cross() - set name = "~ Cross" - set category = "Emotes" - usr.emote("cross", intentional = TRUE) - -/mob/living/proc/emote_chuckle() - set name = "~ Chuckle" - set category = "Emotes" - usr.emote("chuckle", intentional = TRUE) - -/mob/living/proc/emote_collapse() - set name = "~ Collapse" - set category = "Emotes" - usr.emote("collapse", intentional = TRUE) - -/mob/living/proc/emote_cough() - set name = "> Cough" - set category = "Emotes" - usr.emote("cough", intentional = TRUE) - -/mob/living/proc/emote_dance() - set name = "~ Dance" - set category = "Emotes" - usr.emote("dance", intentional = TRUE) - -/mob/living/proc/emote_drool() - set name = "~ Drool" - set category = "Emotes" - usr.emote("drool", intentional = TRUE) - -/mob/living/proc/emote_faint() - set name = "~ Faint" - set category = "Emotes" - usr.emote("faint", intentional = TRUE) - -/mob/living/proc/emote_flap() - set name = "~ Flap" - set category = "Emotes" - usr.emote("flap", intentional = TRUE) - -/mob/living/proc/emote_aflap() - set name = "~ Angry Flap" - set category = "Emotes" - usr.emote("aflap", intentional = TRUE) - -/mob/living/proc/emote_frown() - set name = "~ Frown" - set category = "Emotes" - usr.emote("frown", intentional = TRUE) - -/mob/living/proc/emote_gag() - set name = "~ Gag" - set category = "Emotes" - usr.emote("gag", intentional = TRUE) - -/mob/living/proc/emote_giggle() - set name = "~ Giggle" - set category = "Emotes" - usr.emote("giggle", intentional = TRUE) - -/mob/living/proc/emote_glare() - set name = "~ Glare" - set category = "Emotes" - usr.emote("glare", intentional = TRUE) - -/mob/living/proc/emote_grin() - set name = "~ Grin" - set category = "Emotes" - usr.emote("grin", intentional = TRUE) - -/mob/living/proc/emote_groan() - set name = "~ Groan" - set category = "Emotes" - usr.emote("groan", intentional = TRUE) - -/mob/living/proc/emote_grimace() - set name = "~ Grimace" - set category = "Emotes" - usr.emote("grimace", intentional = TRUE) - -/mob/living/proc/emote_jump() - set name = "~ Jump" - set category = "Emotes" - usr.emote("jump", intentional = TRUE) - -/mob/living/proc/emote_kiss() - set name = "| Kiss |" - set category = "Emotes" - usr.emote("kiss", intentional = TRUE) - -/mob/living/proc/emote_laugh() - set name = "> Laugh" - set category = "Emotes" - usr.emote("laugh", intentional = TRUE) - -/mob/living/proc/emote_look() - set name = "~ Look" - set category = "Emotes" - usr.emote("look", intentional = TRUE) - -/mob/living/proc/emote_nod() - set name = "~ Nod" - set category = "Emotes" - usr.emote("nod", intentional = TRUE) - -/mob/living/proc/emote_point() - set name = "~ Point" - set category = "Emotes" - usr.emote("point", intentional = TRUE) - -/mob/living/proc/emote_pout() - set name = "~ Pout" - set category = "Emotes" - usr.emote("pout", intentional = TRUE) - -/mob/living/proc/emote_scream() - set name = "> Scream" - set category = "Emotes" - usr.emote("scream", intentional = TRUE) - -/mob/living/proc/emote_scowl() - set name = "~ Scowl" - set category = "Emotes" - usr.emote("scowl", intentional = TRUE) - -/mob/living/proc/emote_shake() - set name = "~ Shake" - set category = "Emotes" - usr.emote("shake", intentional = TRUE) - -/mob/living/proc/emote_shiver() - set name = "~ Shiver" - set category = "Emotes" - usr.emote("shiver", intentional = TRUE) - -/mob/living/proc/emote_sigh() - set name = "> Sigh" - set category = "Emotes" - usr.emote("sigh", intentional = TRUE) - -/mob/living/proc/emote_sit() - set name = "~ Sit" - set category = "Emotes" - usr.emote("sit", intentional = TRUE) - -/mob/living/proc/emote_smile() - set name = "~ Smile" - set category = "Emotes" - usr.emote("smile", intentional = TRUE) - -/mob/living/proc/emote_sneeze() - set name = "> Sneeze" - set category = "Emotes" - usr.emote("sneeze", intentional = TRUE) - -/mob/living/proc/emote_smug() - set name = "~ Smug" - set category = "Emotes" - usr.emote("smug", intentional = TRUE) - -/mob/living/proc/emote_sniff() - set name = "> Sniff" - set category = "Emotes" - usr.emote("sniff", intentional = TRUE) - -/mob/living/proc/emote_stare() - set name = "~ Stare" - set category = "Emotes" - usr.emote("stare", intentional = TRUE) - -/mob/living/proc/emote_strech() - set name = "~ Stretch" - set category = "Emotes" - usr.emote("stretch", intentional = TRUE) - -/mob/living/proc/emote_sulk() - set name = "~ Sulk" - set category = "Emotes" - usr.emote("sulk", intentional = TRUE) - -/mob/living/proc/emote_sway() - set name = "~ Sway" - set category = "Emotes" - usr.emote("sway", intentional = TRUE) - -/mob/living/proc/emote_tilt() - set name = "~ Tilt" - set category = "Emotes" - usr.emote("tilt", intentional = TRUE) - -/mob/living/proc/emote_tremble() - set name = "~ Tremble" - set category = "Emotes" - usr.emote("tremble", intentional = TRUE) - -/mob/living/proc/emote_twitch() - set name = "~ Twitch" - set category = "Emotes" - usr.emote("twitch", intentional = TRUE) - -/mob/living/proc/emote_twitch_s() - set name = "~ Twitch Slightly" - set category = "Emotes" - usr.emote("twitch_s", intentional = TRUE) - -/mob/living/proc/emote_wave() - set name = "~ Wave" - set category = "Emotes" - usr.emote("wave", intentional = TRUE) - -/mob/living/proc/emote_whimper() - set name = "~ Whimper" - set category = "Emotes" - usr.emote("whimper", intentional = TRUE) - -/mob/living/proc/emote_wsmile() - set name = "~ Smile Weak" - set category = "Emotes" - usr.emote("wsmile", intentional = TRUE) - -/mob/living/proc/emote_yawn() - set name = "~ Yawn" - set category = "Emotes" - usr.emote("yawn", intentional = TRUE) - -/mob/living/proc/emote_gurgle() - set name = "~ Gurgle" - set category = "Emotes" - usr.emote("gurgle", intentional = TRUE) - -/mob/living/proc/emote_inhale() - set name = "~ Inhale" - set category = "Emotes" - usr.emote("inhale", intentional = TRUE) - -/mob/living/proc/emote_exhale() - set name = "~ Exhale" - set category = "Emotes" - usr.emote("exhale", intentional = TRUE) - -/mob/living/proc/emote_swear() - set name = "~ Swear" - set category = "Emotes" - usr.emote("swear", intentional = TRUE) - -// code\modules\mob\living\carbon\emote.dm - -/mob/living/carbon/proc/emote_airguitar() - set name = "~ Airguitar" - set category = "Emotes" - usr.emote("airguitar", intentional = TRUE) - -/mob/living/carbon/proc/emote_blink() - set name = "~ Blink" - set category = "Emotes" - usr.emote("blink", intentional = TRUE) - -/mob/living/carbon/proc/emote_blink_r() - set name = "~ Blink Rapidly" - set category = "Emotes" - usr.emote("blink_r", intentional = TRUE) - -/mob/living/carbon/proc/emote_crack() - set name = "> Crack" - set category = "Emotes" - usr.emote("crack", intentional = TRUE) - -/mob/living/carbon/proc/emote_circle() - set name = "| Circle |" - set category = "Emotes" - usr.emote("circle", intentional = TRUE) - -/mob/living/carbon/proc/emote_moan() - set name = "~ Moan" - set category = "Emotes" - usr.emote("moan", intentional = TRUE) - -/mob/living/carbon/proc/emote_slap() - set name = "| Slap |" - set category = "Emotes" - usr.emote("slap", intentional = TRUE) - -/mob/living/carbon/proc/emote_wink() - set name = "~ Wink" - set category = "Emotes" - usr.emote("wink", intentional = TRUE) - -// code\modules\mob\living\carbon\human\emote.dm - -/mob/living/carbon/human/proc/emote_cry() - set name = "~ Cry" - set category = "Emotes" - usr.emote("cry", intentional = TRUE) - -/mob/living/carbon/human/proc/emote_eyebrow() - set name = "~ Eyebrow" - set category = "Emotes" - usr.emote("eyebrow", intentional = TRUE) - -/mob/living/carbon/human/proc/emote_grumble() - set name = "~ Grumble" - set category = "Emotes" - usr.emote("grumble", intentional = TRUE) - -/mob/living/carbon/human/proc/emote_mumble() - set name = "~ Mumble" - set category = "Emotes" - usr.emote("mumble", intentional = TRUE) - -/mob/living/carbon/human/proc/emote_pale() - set name = "~ Pale" - set category = "Emotes" - usr.emote("pale", intentional = TRUE) - -/mob/living/carbon/human/proc/emote_raise() - set name = "~ Raise Hand" - set category = "Emotes" - usr.emote("raise", intentional = TRUE) - -/mob/living/carbon/human/proc/emote_salute() - set name = "~ Salute" - set category = "Emotes" - usr.emote("salute", intentional = TRUE) - -/mob/living/carbon/human/proc/emote_shrug() - set name = "~ Shrug" - set category = "Emotes" - usr.emote("shrug", intentional = TRUE) - -/mob/living/carbon/human/proc/emote_wag() - set name = "| Wag |" - set category = "Emotes" - usr.emote("wag", intentional = TRUE) - -/mob/living/carbon/human/proc/emote_wing() - set name = "| Wing |" - set category = "Emotes" - usr.emote("wing", intentional = TRUE) - -// modular_skyrat\modules\emotes\code\emote.dm - -/mob/living/proc/emote_peep() - set name = "> Peep" - set category = "Emotes+" - usr.emote("peep", intentional = TRUE) - -/mob/living/proc/emote_peep2() - set name = "> Peep Twice" - set category = "Emotes+" - usr.emote("peep2", intentional = TRUE) - -/mob/living/proc/emote_snap() - set name = "> Snap" - set category = "Emotes+" - usr.emote("snap", intentional = TRUE) - -/mob/living/proc/emote_snap2() - set name = "> Snap Twice" - set category = "Emotes+" - usr.emote("snap2", intentional = TRUE) - -/mob/living/proc/emote_snap3() - set name = "> Snap Thrice" - set category = "Emotes+" - usr.emote("snap3", intentional = TRUE) - -/mob/living/proc/emote_awoo() - set name = "> Awoo" - set category = "Emotes+" - usr.emote("awoo", intentional = TRUE) - -/mob/living/proc/emote_nya() - set name = "> Nya" - set category = "Emotes+" - usr.emote("nya", intentional = TRUE) - -/mob/living/proc/emote_weh() - set name = "> Weh" - set category = "Emotes+" - usr.emote("weh", intentional = TRUE) - -/mob/living/proc/emote_mothsqueak() - set name = "> Moth Squeak" - set category = "Emotes+" - usr.emote("msqueak", intentional = TRUE) - -/mob/living/proc/emote_mousesqueak() - set name = "> Mouse Squeak" - set category = "Emotes+" - usr.emote("squeak", intentional = TRUE) - -/mob/living/proc/emote_merp() - set name = "> Merp" - set category = "Emotes+" - usr.emote("merp", intentional = TRUE) - -/mob/living/proc/emote_bark() - set name = "> Bark" - set category = "Emotes+" - usr.emote("bark", intentional = TRUE) - -/mob/living/proc/emote_squish() - set name = "> Squish" - set category = "Emotes+" - usr.emote("squish", intentional = TRUE) - -/mob/living/proc/emote_meow() - set name = "> Meow" - set category = "Emotes+" - usr.emote("meow", intentional = TRUE) - -/mob/living/proc/emote_hiss1() - set name = "> Hiss" - set category = "Emotes+" - usr.emote("hiss1", intentional = TRUE) - -/mob/living/proc/emote_chitter() - set name = "> Chitter" - set category = "Emotes+" - usr.emote("chitter", intentional = TRUE) - -/mob/living/proc/emote_snore() - set name = "> Snore" - set category = "Emotes+" - usr.emote("snore", intentional = TRUE) - -/mob/living/proc/emote_clap() - set name = "> Clap" - set category = "Emotes+" - usr.emote("clap", intentional = TRUE) - -/mob/living/proc/emote_clap1() - set name = "> Clap once" - set category = "Emotes+" - usr.emote("clap1", intentional = TRUE) - -/mob/living/proc/emote_headtilt() - set name = "~ Head Hilt" - set category = "Emotes+" - usr.emote("tilt", intentional = TRUE) - -/mob/living/proc/emote_blink2() - set name = "~ Blink Twice" - set category = "Emotes+" - usr.emote("blink2", intentional = TRUE) - -/mob/living/proc/emote_rblink() - set name = "~ Blink Rapidly" - set category = "Emotes+" - usr.emote("rblink", intentional = TRUE) - -/mob/living/proc/emote_squint() - set name = "~ Squint" - set category = "Emotes+" - usr.emote("squint", intentional = TRUE) - -/mob/living/proc/emote_smirk() - set name = "~ Smirk" - set category = "Emotes+" - usr.emote("smirk", intentional = TRUE) - -/mob/living/proc/emote_eyeroll() - set name = "~ Eyeroll" - set category = "Emotes+" - usr.emote("eyeroll", intentional = TRUE) - -/mob/living/proc/emote_huff() - set name = "~ Huff" - set category = "Emotes+" - usr.emote("huffs", intentional = TRUE) - -/mob/living/proc/emote_etwitch() - set name = "~ Ears twitch" - set category = "Emotes+" - usr.emote("etwitch", intentional = TRUE) - -/mob/living/proc/emote_clear() - set name = "~ Clear Throat" - set category = "Emotes+" - usr.emote("clear", intentional = TRUE) - -/mob/living/proc/emote_bawk() - set name = "> Bawk" - set category = "Emotes+" - usr.emote("bawk", intentional = TRUE) - -/mob/living/proc/emote_caw() - set name = "> Caw" - set category = "Emotes+" - usr.emote("caw", intentional = TRUE) - -/mob/living/proc/emote_caw2() - set name = "> Caw-caw" - set category = "Emotes+" - usr.emote("caw2", intentional = TRUE) - -/mob/living/proc/emote_whistle() - set name = "~ Whistle" - set category = "Emotes+" - usr.emote("whistle", intentional = TRUE) - -/mob/living/proc/emote_blep() - set name = "~ Blep" - set category = "Emotes+" - usr.emote("blep", intentional = TRUE) - -/mob/living/proc/emote_bork() - set name = "> Bork" - set category = "Emotes+" - usr.emote("bork", intentional = TRUE) - -/mob/living/proc/emote_hoot() - set name = "> Hoot" - set category = "Emotes+" - usr.emote("hoot", intentional = TRUE) - -/mob/living/proc/emote_growl() - set name = "> Growl" - set category = "Emotes+" - usr.emote("growl", intentional = TRUE) - -/mob/living/proc/emote_woof() - set name = "> Woof" - set category = "Emotes+" - usr.emote("woof", intentional = TRUE) - -/mob/living/proc/emote_baa() - set name = "> Baa" - set category = "Emotes+" - usr.emote("baa", intentional = TRUE) - -/mob/living/proc/emote_baa2() - set name = "> Bleat" - set category = "Emotes+" - usr.emote("baa2", intentional = TRUE) - -/mob/living/proc/emote_wurble() - set name = "> Wurble" - set category = "Emotes+" - usr.emote("wurble", intentional = TRUE) -/mob/living/proc/emote_rattle() - set name = "> Rattle" - set category = "Emotes+" - usr.emote("rattle", intentional = TRUE) - -/mob/living/proc/emote_cackle() - set name = "> Cackle" - set category = "Emotes+" - usr.emote("cackle", intentional = TRUE) - -/mob/living/proc/emote_warble() - set name = "> Warble" - set category = "Emotes+" - usr.emote("warble", intentional = TRUE) - -/mob/living/proc/emote_trills() - set name = "> Trills" - set category = "Emotes+" - usr.emote("trills", intentional = TRUE) - -/mob/living/proc/emote_rpurr() - set name = "> Raptor" - set category = "Emotes+" - usr.emote("rpurr", intentional = TRUE) - -/mob/living/proc/emote_purr() - set name = "> Purr" - set category = "Emotes+" - usr.emote("purr", intentional = TRUE) - -/mob/living/proc/emote_moo() - set name = "> Moo" - set category = "Emotes+" - usr.emote("moo", intentional = TRUE) - -/mob/living/proc/emote_honk1() - set name = "> Honk" - set category = "Emotes+" - usr.emote("honk1", intentional = TRUE) - -// code\modules\mob\living\brain\emote.dm - -/mob/living/brain/proc/emote_alarm() - set name = "< Alarm >" - set category = "Emotes" - usr.emote("alarm", intentional = TRUE) - -/mob/living/brain/proc/emote_alert() - set name = "< Alert >" - set category = "Emotes" - usr.emote("alert", intentional = TRUE) - -/mob/living/brain/proc/emote_flash() - set name = "< Flash >" - set category = "Emotes" - usr.emote("flash", intentional = TRUE) - -/mob/living/brain/proc/emote_notice() - set name = "< Notice >" - set category = "Emotes" - usr.emote("notice", intentional = TRUE) - -/mob/living/brain/proc/emote_whistle_brain() - set name = "< Whistle >" - set category = "Emotes" - usr.emote("whistle", intentional = TRUE) - -// code\modules\mob\living\carbon\alien\emote.dm - -/mob/living/carbon/alien/proc/emote_gnarl() - set name = "< Gnarl >" - set category = "Emotes" - usr.emote("gnarl", intentional = TRUE) - -/mob/living/carbon/alien/proc/emote_hiss() - set name = "< Hiss >" - set category = "Emotes" - usr.emote("hiss", intentional = TRUE) - -/mob/living/carbon/alien/proc/emote_roar() - set name = "< Roar >" - set category = "Emotes" - usr.emote("roar", intentional = TRUE) - -//modular_skyrat\modules\emotes\code\synth_emotes.dm - -/mob/living/proc/emote_dwoop() - set name = "< Dwoop >" - set category = "Emotes" - usr.emote("dwoop", intentional = TRUE) - -/mob/living/proc/emote_yes() - set name = "< Yes >" - set category = "Emotes" - usr.emote("yes", intentional = TRUE) - -/mob/living/proc/emote_no() - set name = "< No >" - set category = "Emotes" - usr.emote("no", intentional = TRUE) - -/mob/living/proc/emote_boop() - set name = "< Boop >" - set category = "Emotes" - usr.emote("boop", intentional = TRUE) - -/mob/living/proc/emote_buzz() - set name = "< Buzz >" - set category = "Emotes" - usr.emote("buzz", intentional = TRUE) - -/mob/living/proc/emote_beep() - set name = "< Beep >" - set category = "Emotes" - usr.emote("beep", intentional = TRUE) - -/mob/living/proc/emote_beep2() - set name = "< Beep Sharply >" - set category = "Emotes" - usr.emote("beep2", intentional = TRUE) - -/mob/living/proc/emote_buzz2() - set name = "< Buzz Twice >" - set category = "Emotes" - usr.emote("buzz2", intentional = TRUE) - -/mob/living/proc/emote_chime() - set name = "< Chime >" - set category = "Emotes" - usr.emote("chime", intentional = TRUE) - -/mob/living/proc/emote_honk() - set name = "< Honk >" - set category = "Emotes" - usr.emote("honk", intentional = TRUE) - -/mob/living/proc/emote_ping() - set name = "< Ping >" - set category = "Emotes" - usr.emote("ping", intentional = TRUE) - -/mob/living/proc/emote_sad() - set name = "< Sad >" - set category = "Emotes" - usr.emote("sad", intentional = TRUE) - -/mob/living/proc/emote_warn() - set name = "< Warn >" - set category = "Emotes" - usr.emote("warn", intentional = TRUE) - -/mob/living/proc/emote_slowclap() - set name = "< Slow Clap >" - set category = "Emotes" - usr.emote("slowclap", intentional = TRUE) - -// modular_skyrat\modules\emotes\code\additionalemotes\overlay_emote.dm -/mob/living/proc/emote_sweatdrop() - set name = "| Sweatdrop |" - set category = "Emotes+" - usr.emote("sweatdrop", intentional = TRUE) - -/mob/living/proc/emote_exclaim() - set name = "| Exclaim |" - set category = "Emotes+" - usr.emote("exclaim", intentional = TRUE) - -/mob/living/proc/emote_question() - set name = "| Question |" - set category = "Emotes+" - usr.emote("question", intentional = TRUE) - -/mob/living/proc/emote_realize() - set name = "| Realize |" - set category = "Emotes+" - usr.emote("realize", intentional = TRUE) - -/mob/living/proc/emote_annoyed() - set name = "| Annoyed |" - set category = "Emotes+" - usr.emote("annoyed", intentional = TRUE) - -/mob/living/proc/emote_glasses() - set name = "| Adjust Glasses |" - set category = "Emotes+" - usr.emote("glasses", intentional = TRUE) - -//modular_skyrat\modules\emotes\code\additionalemotes\turf_emote.dm -/mob/living/proc/emote_mark_turf() - set name = "| Mark Turf |" - set category = "Emotes+" - usr.emote("turf", intentional = TRUE) diff --git a/modular_skyrat/modules/emotes/code/additionalemotes/turf_list.dm b/modular_skyrat/modules/emotes/code/additionalemotes/turf_list.dm deleted file mode 100644 index 13380db04a0d6a..00000000000000 --- a/modular_skyrat/modules/emotes/code/additionalemotes/turf_list.dm +++ /dev/null @@ -1,197 +0,0 @@ -#define EXTRA_ABOVE_MOB_LAYER (ABOVE_MOB_LAYER + 0.01) - -/obj/structure/mark_turf - name = "turf" - icon = 'modular_skyrat/master_files/icons/effects/turf_effects.dmi' - desc = "It's turf." //Debug stuff, won't be seen - layer = ABOVE_OBJ_LAYER - anchored = TRUE - density = FALSE - max_integrity = 15 - -/obj/structure/mark_turf/Initialize(mapload, current_turf) - . = ..() - - switch(current_turf) - if("web") - name = "hand-sewn web" - desc = "It's a sticky web." - icon_state = pick("stickyweb1", "stickyweb2") - playsound(get_turf(src), 'modular_skyrat/master_files/sound/effects/weave.ogg', 25, TRUE) - - if("vines") - name = "sprouted vines" - desc = "It's an entanglement of vines." - icon_state = pick("kudzu1", "kudzu1", "kudzu3") - playsound(get_turf(src), 'sound/creatures/venus_trap_hurt.ogg', 25, TRUE) - - - if("water") - name = "puddle of water" - desc = "It's a patch of water." - icon_state = "water" - src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "water_top", EXTRA_ABOVE_MOB_LAYER)) - flick_overlay_static(image('modular_skyrat/modules/liquids/icons/obj/effects/splash.dmi', "splash", EXTRA_ABOVE_MOB_LAYER), 20) - playsound(get_turf(src), 'modular_skyrat/master_files/sound/effects/watersplash.ogg', 25, TRUE) - - if("smoke") - name = "blazing mist" - desc = "It's a storm of smoke." - icon_state = "smoke" - src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "smoke_top", EXTRA_ABOVE_MOB_LAYER)) - playsound(get_turf(src), 'sound/effects/wounds/sizzle2.ogg', 25, TRUE) - - if("xenoresin") - name = "resin" - desc = "Looks like some kind of thick resin." - icon_state = "xenoresin" - playsound(get_turf(src), 'sound/effects/splat.ogg', 25, TRUE) - - if("holobed") - name = "physical hologram" - desc = "It's a hologram of a pet bed." - icon_state = "holobed" - playsound(get_turf(src), 'sound/misc/compiler-stage2.ogg', 25, TRUE) - - if("holoseat") - name = "physical hologram" - desc = "It's a hologram of a barstool." - icon_state = "holoseat" - src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "holoseat_top", EXTRA_ABOVE_MOB_LAYER)) - playsound(get_turf(src), 'sound/misc/compiler-stage2.ogg', 25, TRUE) - - if("slime") - name = "pile of oozing slime" - desc = "It's just a bunch of slime." - alpha = 155 - playsound(get_turf(src), 'sound/misc/soggy.ogg', 25, TRUE) - switch(rand(1,1000)) - if(-INFINITY to 400) - icon_state = "slimeobj1" - src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "slimeobj1_top", EXTRA_ABOVE_MOB_LAYER)) - if(400 to 800) - icon_state = "slimeobj2" - src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "slimeobj2_top", EXTRA_ABOVE_MOB_LAYER)) - if(800 to 980) - icon_state = "slimeobj3" - src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "slimeobj3_top", EXTRA_ABOVE_MOB_LAYER)) - if(980 to INFINITY) - name = "slime bust" //rare obj/item/statuebust - desc = "A priceless slime bust, the kind that belongs in a museum." - icon_state = "slimeobj4" - AddElement(/datum/element/art, GREAT_ART) - else - return - - if("dust") - name = "cloud of dust" - desc = "It's a cloud of glittering dust." - icon = 'modular_skyrat/master_files/icons/effects/turf_effects_64.dmi' - icon_state = "dust" - pixel_x = -16 - src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects_64.dmi', "dust_top", EXTRA_ABOVE_MOB_LAYER)) - playsound(get_turf(src), 'modular_skyrat/master_files/sound/effects/wing_flap.ogg', 25, TRUE) - - if("borgmat") - name = "soft-foam mat" - desc = "It's a rolled out mat, doesn't include wireless charging." - icon = 'modular_skyrat/master_files/icons/effects/turf_effects_64.dmi' - icon_state = "borgmat" - pixel_x = -16 - pixel_y = -4 - playsound(get_turf(src), 'sound/items/handling/taperecorder_pickup.ogg', 25, TRUE) - - //bodyparts - if("tails") - name = "tail" - desc = "It's a fluffy tail." - icon = 'modular_skyrat/master_files/icons/effects/turf_effects_64.dmi' - icon_state = "tails" - pixel_x = -16 //correcting the offset for 64 - var/mutable_appearance/overlay = mutable_appearance('modular_skyrat/master_files/icons/effects/turf_effects_64.dmi', "tails_top", EXTRA_ABOVE_MOB_LAYER, src, GAME_PLANE_UPPER) - overlay.appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER - src.add_overlay(overlay) - playsound(get_turf(src), 'sound/weapons/thudswoosh.ogg', 25, TRUE) - - if("constrict") - name = "tail" - desc = "It's a scaly tail." - icon = 'modular_skyrat/master_files/icons/effects/turf_effects_64.dmi' - icon_state = "naga" - pixel_x = -16 - var/mutable_appearance/overlay = mutable_appearance('modular_skyrat/master_files/icons/effects/turf_effects_64.dmi', "naga_top", EXTRA_ABOVE_MOB_LAYER, src, GAME_PLANE_UPPER) - overlay.appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER - src.add_overlay(overlay) - playsound(get_turf(src), 'modular_skyrat/modules/emotes/sound/emotes/hiss.ogg', 25, TRUE) - - //prints - if("pawprint") - name = "pawprint" - desc = "It's a pawprint left on the ground." - icon_state = pick("pawprint", "pawprint1") - playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg', - 'sound/effects/footstep/hardbarefoot2.ogg', - 'sound/effects/footstep/hardbarefoot3.ogg', - 'sound/effects/footstep/hardbarefoot4.ogg', - 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE) - - if("hoofprint") - name = "hoofprint" - desc = "It's a hoofprint left on the ground." - icon_state = pick("hoofprint", "hoofprint1") - playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg', - 'sound/effects/footstep/hardbarefoot2.ogg', - 'sound/effects/footstep/hardbarefoot3.ogg', - 'sound/effects/footstep/hardbarefoot4.ogg', - 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE) - if("footprint") - name = "footprint" - desc = "It's a footprint left on the ground." - icon_state = pick("footprint", "footprint1") - playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg', - 'sound/effects/footstep/hardbarefoot2.ogg', - 'sound/effects/footstep/hardbarefoot3.ogg', - 'sound/effects/footstep/hardbarefoot4.ogg', - 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE) - - if("clawprint") - name = "clawprint" - desc = "It's a clawprint left on the ground." - icon_state = pick("clawprint", "clawprint1") - playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg', - 'sound/effects/footstep/hardbarefoot2.ogg', - 'sound/effects/footstep/hardbarefoot3.ogg', - 'sound/effects/footstep/hardbarefoot4.ogg', - 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE) - - if("shoeprint") - name = "shoeprint" - desc = "It's a shoeprint left on the ground." - icon_state = pick("shoeprint", "shoeprint1") - playsound(get_turf(src), pick('sound/effects/footstep/floor1.ogg', - 'sound/effects/footstep/floor2.ogg', - 'sound/effects/footstep/floor3.ogg', - 'sound/effects/footstep/floor4.ogg', - 'sound/effects/footstep/floor5.ogg'), 50, TRUE) - - else - return - -/obj/structure/mark_turf/proc/turf_check(mob/living/user) //This gets called when a player leaves their turf - var/list/no_trail = list("tail", "constrict") - var/list/long_trail = list("pawprint", "hoofprint", "clawprint", "footprint", "shoeprint") - - if(user.owned_turf.name in no_trail) - QDEL_NULL(src) - if(user.owned_turf.name in long_trail) - QDEL_IN(src, 150 SECONDS) - user.owned_turf = null - else - QDEL_IN(src, 15 SECONDS) - user.owned_turf = null - - if(ishuman(user)) - var/mob/living/carbon/human/human_user = user - human_user.update_mutant_bodyparts() - -#undef EXTRA_ABOVE_MOB_LAYER diff --git a/modular_skyrat/modules/emotes/code/dna_screams.dm b/modular_skyrat/modules/emotes/code/dna_screams.dm deleted file mode 100644 index c57a80d55aa741..00000000000000 --- a/modular_skyrat/modules/emotes/code/dna_screams.dm +++ /dev/null @@ -1,68 +0,0 @@ -/datum/species - var/list/screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_m1.ogg', 'modular_skyrat/modules/emotes/sound/voice/scream_m2.ogg') - var/list/femalescreamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_f1.ogg', 'modular_skyrat/modules/emotes/sound/voice/scream_f2.ogg') - -/datum/species/synthetic - screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_silicon.ogg') - femalescreamsounds = null - -/datum/species/android - screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_silicon.ogg') - femalescreamsounds = null - -/datum/species/lizard - screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_lizard.ogg', 'sound/voice/lizard/lizard_scream_1.ogg', 'sound/voice/lizard/lizard_scream_2.ogg', 'sound/voice/lizard/lizard_scream_3.ogg') - - femalescreamsounds = null - -/datum/species/skeleton - screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_skeleton.ogg') - femalescreamsounds = null - -/datum/species/fly - screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_moth.ogg') - femalescreamsounds = null - -/datum/species/moth - screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_moth.ogg') - femalescreamsounds = null - -/datum/species/insect - screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_moth.ogg') - femalescreamsounds = null - -/datum/species/ethereal - screamsounds = list('sound/voice/ethereal/ethereal_scream_1.ogg', 'sound/voice/ethereal/ethereal_scream_2.ogg', 'sound/voice/ethereal/ethereal_scream_3.ogg') - femalescreamsounds = null - -/datum/species/jelly - screamsounds = list('modular_skyrat/modules/emotes/sound/emotes/jelly_scream.ogg') - femalescreamsounds = null - -/datum/species/plasmaman - screamsounds = list('sound/voice/plasmaman/plasmeme_scream_1.ogg', 'sound/voice/plasmaman/plasmeme_scream_2.ogg', 'sound/voice/plasmaman/plasmeme_scream_3.ogg') - femalescreamsounds = null - -/datum/species/vox - screamsounds = list('modular_skyrat/modules/emotes/sound/emotes/voxscream.ogg') - femalescreamsounds = null - -/datum/species/vox_primalis - screamsounds = list('modular_skyrat/modules/emotes/sound/emotes/voxscream.ogg') - femalescreamsounds = null - -/datum/species/xeno - screamsounds = list('sound/voice/hiss6.ogg') - femalescreamsounds = null - -/datum/species/zombie - screamsounds = list('modular_skyrat/modules/emotes/sound/emotes/zombie_scream.ogg') - femalescreamsounds = null - -/datum/species/lizard - screamsounds = list('sound/voice/lizard/lizard_scream_1.ogg', 'sound/voice/lizard/lizard_scream_2.ogg', 'sound/voice/lizard/lizard_scream_3.ogg') - femalescreamsounds = null - -/datum/species/teshari - screamsounds = list('modular_skyrat/modules/emotes/sound/emotes/raptorscream.ogg') - femalescreamsounds = null diff --git a/modular_skyrat/modules/emotes/code/emotes.dm b/modular_skyrat/modules/emotes/code/emotes.dm deleted file mode 100644 index 532373f956729b..00000000000000 --- a/modular_skyrat/modules/emotes/code/emotes.dm +++ /dev/null @@ -1,529 +0,0 @@ - -#define EMOTE_DELAY (5 SECONDS) //To prevent spam emotes. - -/mob - var/nextsoundemote = 1 //Time at which the next emote can be played - -/datum/emote - cooldown = EMOTE_DELAY - -//Disables the custom emote blacklist from TG that normally applies to slimes. -/datum/emote/living/custom - mob_type_blacklist_typecache = list(/mob/living/brain) - cooldown = 0 - stat_allowed = SOFT_CRIT - -//me-verb emotes should not have a cooldown check -/datum/emote/living/custom/check_cooldown(mob/user, intentional) - return TRUE - - -/datum/emote/imaginary_friend/custom/check_cooldown(mob/user, intentional) - return TRUE - - -/datum/emote/living/blush - sound = 'modular_skyrat/modules/emotes/sound/emotes/blush.ogg' - -/datum/emote/living/quill - key = "quill" - key_third_person = "quills" - message = "rustles their quills." - emote_type = EMOTE_AUDIBLE - muzzle_ignore = TRUE - mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/emotes/voxrustle.ogg' - - -/datum/emote/living/cough/get_sound(mob/living/user) - if(isvox(user)) - return 'modular_skyrat/modules/emotes/sound/emotes/voxcough.ogg' - if(iscarbon(user)) - if(user.gender == MALE) - return pick('modular_skyrat/modules/emotes/sound/emotes/male/male_cough_1.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/male/male_cough_2.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/male/male_cough_3.ogg') - return pick('modular_skyrat/modules/emotes/sound/emotes/female/female_cough_1.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/female/female_cough_2.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/female/female_cough_3.ogg') - return - -/datum/emote/living/sneeze - vary = TRUE - -/datum/emote/living/sneeze/get_sound(mob/living/user) - if(isvox(user)) - return 'modular_skyrat/modules/emotes/sound/emotes/voxsneeze.ogg' - if(iscarbon(user)) - if(user.gender == MALE) - return 'modular_skyrat/modules/emotes/sound/emotes/male/male_sneeze.ogg' - return 'modular_skyrat/modules/emotes/sound/emotes/female/female_sneeze.ogg' - return - -/datum/emote/flip/can_run_emote(mob/user, status_check, intentional) - if(intentional && (!HAS_TRAIT(user, TRAIT_FREERUNNING) && !HAS_TRAIT(user, TRAIT_STYLISH)) && !isobserver(user)) - user.balloon_alert(user, "not nimble enough!") - return FALSE - return ..() - -/datum/emote/living/peep - key = "peep" - key_third_person = "peeps" - message = "peeps like a bird!" - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/peep_once.ogg' - -/datum/emote/living/peep2 - key = "peep2" - key_third_person = "peeps twice" - message = "peeps twice like a bird!" - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/peep.ogg' - -/datum/emote/living/snap2 - key = "snap2" - key_third_person = "snaps twice" - message = "snaps twice." - message_param = "snaps twice at %t." - emote_type = EMOTE_AUDIBLE - muzzle_ignore = TRUE - hands_use_check = TRUE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/snap2.ogg' - -/datum/emote/living/snap3 - key = "snap3" - key_third_person = "snaps thrice" - message = "snaps thrice." - message_param = "snaps thrice at %t." - emote_type = EMOTE_AUDIBLE - muzzle_ignore = TRUE - hands_use_check = TRUE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/snap3.ogg' - -/datum/emote/living/awoo - key = "awoo" - key_third_person = "awoos" - message = "lets out an awoo!" - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/awoo.ogg' - -/datum/emote/living/nya - key = "nya" - key_third_person = "nyas" - message = "lets out a nya!" - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/nya.ogg' - -/datum/emote/living/weh - key = "weh" - key_third_person = "wehs" - message = "lets out a weh!" - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/weh.ogg' - -/datum/emote/living/mothsqueak - key = "msqueak" - key_third_person = "lets out a tiny squeak" - message = "lets out a tiny squeak!" - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/mothsqueak.ogg' - -/datum/emote/living/mousesqueak - key = "squeak" - key_third_person = "squeaks" - message = "squeaks!" - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'sound/creatures/mousesqueek.ogg' - -/datum/emote/living/merp - key = "merp" - key_third_person = "merps" - message = "merps!" - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/merp.ogg' - -/datum/emote/living/bark - key = "bark" - key_third_person = "barks" - message = "barks!" - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/bark2.ogg' - -/datum/emote/living/squish - key = "squish" - key_third_person = "squishes" - message = "squishes!" - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/slime_squish.ogg' - -/datum/emote/living/meow - key = "meow" - key_third_person = "meows" - message = "meows!" - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/emotes/meow.ogg' - -/datum/emote/living/hiss - key = "hiss1" - key_third_person = "hisses" - message = "hisses!" - emote_type = EMOTE_AUDIBLE - mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/emotes/hiss.ogg' - -/datum/emote/living/chitter - key = "chitter" - key_third_person = "chitters" - message = "chitters!" - emote_type = EMOTE_AUDIBLE - mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/emotes/mothchitter.ogg' - -/datum/emote/living/sigh/get_sound(mob/living/user) - if(iscarbon(user)) - if(user.gender == MALE) - return 'modular_skyrat/modules/emotes/sound/emotes/male/male_sigh.ogg' - return 'modular_skyrat/modules/emotes/sound/emotes/female/female_sigh.ogg' - return - -/datum/emote/living/sniff - vary = TRUE - -/datum/emote/living/sniff/get_sound(mob/living/user) - if(iscarbon(user)) - if(user.gender == MALE) - return 'modular_skyrat/modules/emotes/sound/emotes/male/male_sniff.ogg' - return 'modular_skyrat/modules/emotes/sound/emotes/female/female_sniff.ogg' - return - -/datum/emote/living/gasp/get_sound(mob/living/user) - if(iscarbon(user)) - if(user.gender == MALE) - return pick('modular_skyrat/modules/emotes/sound/emotes/male/gasp_m1.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/male/gasp_m2.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/male/gasp_m3.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/male/gasp_m4.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/male/gasp_m5.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/male/gasp_m6.ogg') - return pick('modular_skyrat/modules/emotes/sound/emotes/female/gasp_f1.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/female/gasp_f2.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/female/gasp_f3.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/female/gasp_f4.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/female/gasp_f5.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/female/gasp_f6.ogg') - return - -/datum/emote/living/snore - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/emotes/snore.ogg' - -/datum/emote/living/burp - vary = TRUE - -/datum/emote/living/burp/get_sound(mob/living/user) - if(iscarbon(user)) - if(user.gender == MALE) - return 'modular_skyrat/modules/emotes/sound/emotes/male/burp_m.ogg' - return 'modular_skyrat/modules/emotes/sound/emotes/female/burp_f.ogg' - return - -/datum/emote/living/clap - key = "clap" - key_third_person = "claps" - message = "claps." - muzzle_ignore = TRUE - hands_use_check = TRUE - emote_type = EMOTE_AUDIBLE - audio_cooldown = 5 SECONDS - vary = TRUE - mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) - -/datum/emote/living/clap/get_sound(mob/living/user) - return pick('modular_skyrat/modules/emotes/sound/emotes/clap1.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/clap2.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/clap3.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/clap4.ogg') - -/datum/emote/living/clap/can_run_emote(mob/living/carbon/user, status_check = TRUE , intentional) - if(user.usable_hands < 2) - return FALSE - return ..() - -/datum/emote/living/clap1 - key = "clap1" - key_third_person = "claps once" - message = "claps once." - emote_type = EMOTE_AUDIBLE - muzzle_ignore = TRUE - hands_use_check = TRUE - vary = TRUE - mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) - -/datum/emote/living/clap1/get_sound(mob/living/user) - return pick('modular_skyrat/modules/emotes/sound/emotes/claponce1.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/claponce2.ogg') - -/datum/emote/living/clap1/can_run_emote(mob/living/carbon/user, status_check = TRUE , intentional) - if(user.usable_hands < 2) - return FALSE - return ..() - -/datum/emote/living/headtilt - key = "tilt" - key_third_person = "tilts" - message = "tilts their head." - message_AI = "tilts the image on their display." - -/datum/emote/beep - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/emotes/twobeep.ogg' - mob_type_allowed_typecache = list(/mob/living) //Beep already exists on brains and silicons - -/datum/emote/living/blink2 - key = "blink2" - key_third_person = "blinks twice" - message = "blinks twice." - message_AI = "has their display flicker twice." - -/datum/emote/living/rblink - key = "rblink" - key_third_person = "rapidly blinks" - message = "rapidly blinks!" - message_AI = "has their display port flash rapidly!" - -/datum/emote/living/squint - key = "squint" - key_third_person = "squints" - message = "squints." - message_AI = "zooms in." - -/datum/emote/living/smirk - key = "smirk" - key_third_person = "smirks" - message = "smirks." - -/datum/emote/living/eyeroll - key = "eyeroll" - key_third_person = "rolls their eyes" - message = "rolls their eyes." - -/datum/emote/living/huff - key = "huffs" - key_third_person = "huffs" - message = "huffs!" - -/datum/emote/living/etwitch - key = "etwitch" - key_third_person = "twitches their ears" - message = "twitches their ears!" - -/datum/emote/living/clear - key = "clear" - key_third_person = "clears their throat" - message = "clears their throat." - -// Avian revolution -/datum/emote/living/bawk - key = "bawk" - key_third_person = "bawks" - message = "bawks like a chicken." - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/bawk.ogg' - -/datum/emote/living/caw - key = "caw" - key_third_person = "caws" - message = "caws!" - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/caw.ogg' - -/datum/emote/living/caw2 - key = "caw2" - key_third_person = "caws twice" - message = "caws twice!" - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/caw2.ogg' - -/datum/emote/living/whistle - key = "whistle" - key_third_person = "whistles" - message = "whistles." - emote_type = EMOTE_AUDIBLE - -/datum/emote/living/blep - key = "blep" - key_third_person = "bleps" - message = "bleps their tongue out. Blep." - message_AI = "shows an image of a random blepping animal. Blep." - message_robot = "bleps their robo-tongue out. Blep." - -/datum/emote/living/bork - key = "bork" - key_third_person = "borks" - message = "lets out a bork." - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/bork.ogg' - -/datum/emote/living/hoot - key = "hoot" - key_third_person = "hoots" - message = "hoots!" - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/hoot.ogg' - -/datum/emote/living/growl - key = "growl" - key_third_person = "growls" - message = "lets out a growl." - emote_type = EMOTE_AUDIBLE - muzzle_ignore = TRUE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/growl.ogg' - -/datum/emote/living/woof - key = "woof" - key_third_person = "woofs" - message = "lets out a woof." - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/woof.ogg' - -/datum/emote/living/baa - key = "baa" - key_third_person = "baas" - message = "lets out a baa." - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/baa.ogg' - -/datum/emote/living/baa2 - key = "baa2" - key_third_person = "baas" - message = "bleats." - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/baa2.ogg' - -/datum/emote/living/wurble - key = "wurble" - key_third_person = "wurbles" - message = "lets out a wurble." - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/wurble.ogg' - -/datum/emote/living/rattle - key = "rattle" - key_third_person = "rattles" - message = "rattles!" - emote_type = EMOTE_AUDIBLE - muzzle_ignore = TRUE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/rattle.ogg' - -/datum/emote/living/cackle - key = "cackle" - key_third_person = "cackles" - message = "cackles hysterically!" - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/cackle_yeen.ogg' - -/mob/living/proc/do_ass_slap_animation(atom/slapped) - do_attack_animation(slapped, no_effect=TRUE) - var/image/gloveimg = image('icons/effects/effects.dmi', slapped, "slapglove", slapped.layer + 0.1) - gloveimg.pixel_y = -5 - gloveimg.pixel_x = 0 - slapped.flick_overlay_view(gloveimg, 1 SECONDS) - - // And animate the attack! - animate(gloveimg, alpha = 175, transform = matrix() * 0.75, pixel_x = 0, pixel_y = -5, pixel_z = 0, time = 0.3 SECONDS) - animate(time = 0.1 SECONDS) - animate(alpha = 0, time = 0.3 SECONDS, easing = CIRCULAR_EASING|EASE_OUT) - -//Froggie Revolution -/datum/emote/living/warble - key = "warble" - key_third_person = "warbles" - message = "warbles!" - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/warbles.ogg' - -/datum/emote/living/trills - key = "trills" - key_third_person = "trills!" - message = "trills!" - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/trills.ogg' - -/datum/emote/living/rpurr - key = "rpurr" - key_third_person = "purrs!" - message = "purrs!" - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/raptor_purr.ogg' - -/datum/emote/living/purr //Ported from CitRP originally by buffyuwu. - key = "purr" - key_third_person = "purrs!" - message = "purrs!" - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/feline_purr.ogg' - -/datum/emote/living/moo - key = "moo" - key_third_person = "moos!" - message = "moos!" - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/moo.ogg' - -/datum/emote/living/honk - key = "honk1" - key_third_person = "honks loudly like a goose!" - message = "honks loudly like a goose!" - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/goose_honk.ogg' - -/datum/emote/living/gnash - key = "gnash" - key_third_person = "gnashes" - message = "gnashes." - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'sound/weapons/bite.ogg' - -/datum/emote/living/thump - key = "thump" - key_third_person = "thumps" - message = "thumps their foot!" - emote_type = EMOTE_AUDIBLE - vary = TRUE - sound = 'sound/effects/glassbash.ogg' diff --git a/modular_skyrat/modules/emotes/code/laugh_datums.dm b/modular_skyrat/modules/emotes/code/laugh_datums.dm deleted file mode 100644 index 715738537e9437..00000000000000 --- a/modular_skyrat/modules/emotes/code/laugh_datums.dm +++ /dev/null @@ -1,36 +0,0 @@ -GLOBAL_LIST_EMPTY(laugh_types) - -/datum/laugh_type - var/name - var/list/male_laughsounds - var/list/female_laughsounds - -/datum/laugh_type/none //Why would you want this? - name = "No Laugh" - male_laughsounds = null - female_laughsounds = null - -/datum/laugh_type/human - name = "Human Laugh" - male_laughsounds = list('sound/voice/human/manlaugh1.ogg', - 'sound/voice/human/manlaugh2.ogg') - female_laughsounds = list('modular_skyrat/modules/emotes/sound/emotes/female/female_giggle_1.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/female/female_giggle_2.ogg') - -/datum/laugh_type/felinid - name = "Felinid Laugh" - male_laughsounds = list('modular_skyrat/modules/emotes/sound/emotes/nyahaha1.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/nyahaha2.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/nyaha.ogg', - 'modular_skyrat/modules/emotes/sound/emotes/nyahehe.ogg') - female_laughsounds = null - -/datum/laugh_type/moth - name = "Moth Laugh" - male_laughsounds = list('modular_skyrat/modules/emotes/sound/emotes/mothlaugh.ogg') - female_laughsounds = null - -/datum/laugh_type/insect - name = "Insect Laugh" - male_laughsounds = list('modular_skyrat/modules/emotes/sound/emotes/mothlaugh.ogg') - female_laughsounds = null diff --git a/modular_skyrat/modules/emotes/code/scream_datums.dm b/modular_skyrat/modules/emotes/code/scream_datums.dm deleted file mode 100644 index 8e75aa7f5569f2..00000000000000 --- a/modular_skyrat/modules/emotes/code/scream_datums.dm +++ /dev/null @@ -1,131 +0,0 @@ -GLOBAL_LIST_EMPTY(scream_types) - -/datum/scream_type - var/name - var/list/male_screamsounds - var/list/female_screamsounds - -/datum/scream_type/none //Why would you want this? - name = "No Scream" - male_screamsounds = null - female_screamsounds = null - -/datum/scream_type/human - name = "Human Scream" - male_screamsounds = list( - 'modular_skyrat/modules/emotes/sound/voice/scream_m1.ogg', - 'modular_skyrat/modules/emotes/sound/voice/scream_m2.ogg', - ) - female_screamsounds = list( - 'modular_skyrat/modules/emotes/sound/voice/scream_f1.ogg', - 'modular_skyrat/modules/emotes/sound/voice/scream_f2.ogg', - ) - -/datum/scream_type/human_two - name = "Human Scream 2" - male_screamsounds = list( - 'sound/voice/human/malescream_1.ogg', - 'sound/voice/human/malescream_2.ogg', - 'sound/voice/human/malescream_3.ogg', - 'sound/voice/human/malescream_4.ogg', - 'sound/voice/human/malescream_5.ogg', - 'sound/voice/human/malescream_6.ogg', - ) - female_screamsounds = list( - 'sound/voice/human/femalescream_1.ogg', - 'sound/voice/human/femalescream_2.ogg', - 'sound/voice/human/femalescream_3.ogg', - 'sound/voice/human/femalescream_4.ogg', - 'sound/voice/human/femalescream_5.ogg', - ) - -/datum/scream_type/robotic - name = "Robotic Scream" - male_screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_silicon.ogg') - female_screamsounds = null - -/datum/scream_type/lizard - name = "Lizard Scream" - male_screamsounds = list( - 'sound/voice/lizard/lizard_scream_1.ogg', - 'sound/voice/lizard/lizard_scream_2.ogg', - 'sound/voice/lizard/lizard_scream_3.ogg', - ) - female_screamsounds = null - -/datum/scream_type/lizard2 - name = "Lizard Scream 2" - male_screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_lizard.ogg') - female_screamsounds = null - -/datum/scream_type/moth - name = "Moth Scream" - male_screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_moth.ogg') - female_screamsounds = null - -/datum/scream_type/moth_two - name = "Moth Scream 2" - male_screamsounds = list('sound/voice/moth/scream_moth.ogg') - female_screamsounds = null - -/datum/scream_type/jelly - name = "Jelly Scream" - male_screamsounds = list('modular_skyrat/modules/emotes/sound/emotes/jelly_scream.ogg') - female_screamsounds = null - -/datum/scream_type/vox - name = "Vox Scream" - male_screamsounds = list('modular_skyrat/modules/emotes/sound/emotes/voxscream.ogg') - female_screamsounds = null - -/datum/scream_type/xeno - name = "Xeno Scream" - male_screamsounds = list('sound/voice/hiss6.ogg') - female_screamsounds = null - -/datum/scream_type/raptor //This is the Teshari scream ported from CitRP which was a cockatoo scream edited by BlackMajor. - name = "Raptor Scream" - male_screamsounds = list('modular_skyrat/modules/emotes/sound/emotes/raptorscream.ogg') - female_screamsounds = null - -/datum/scream_type/rodent //Ported from Polaris/Virgo. - name = "Rodent Scream" - male_screamsounds = list('modular_skyrat/modules/emotes/sound/emotes/rodentscream.ogg') - female_screamsounds = null - -/datum/scream_type/ethereal - name = "Ethereal Scream" - male_screamsounds = list( - 'sound/voice/ethereal/ethereal_scream_1.ogg', - 'sound/voice/ethereal/ethereal_scream_2.ogg', - 'sound/voice/ethereal/ethereal_scream_3.ogg') - female_screamsounds = null - -//DONATOR SCREAMS -/datum/scream_type/zombie - name = "Zombie Scream" - male_screamsounds = list('modular_skyrat/modules/emotes/sound/emotes/zombie_scream.ogg') - female_screamsounds = null - -/datum/scream_type/monkey - name = "Monkey Scream" - male_screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_monkey.ogg') - female_screamsounds = null - -/datum/scream_type/gorilla - name = "Gorilla Scream" - male_screamsounds = list('sound/creatures/gorilla.ogg') - female_screamsounds = null - -/datum/scream_type/skeleton - name = "Skeleton Scream" - male_screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_skeleton.ogg') - female_screamsounds = null - -/datum/scream_type/plasmaman - name = "Plasmaman Scream" - male_screamsounds = list( - 'sound/voice/plasmaman/plasmeme_scream_1.ogg', - 'sound/voice/plasmaman/plasmeme_scream_2.ogg', - 'sound/voice/plasmaman/plasmeme_scream_3.ogg') - female_screamsounds = null diff --git a/modular_skyrat/modules/emotes/readme.md b/modular_skyrat/modules/emotes/readme.md deleted file mode 100644 index c4110c97c7a545..00000000000000 --- a/modular_skyrat/modules/emotes/readme.md +++ /dev/null @@ -1,56 +0,0 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/892 -https://github.com/Skyrat-SS13/Skyrat-tg/pull/1925 -https://github.com/Skyrat-SS13/Skyrat-tg/pull/2320 -https://github.com/Skyrat-SS13/Skyrat-tg/pull/6259 - -## Title: All the emotes. - -MODULE ID: EMOTES - -### Description: - -Adds all the emotes we once had on the oldbase, and shoves them right into here. - -Adds some new emotes, and adjusted sound files. - -Pretty much anything that changes emotes is in here - -### TG Proc Changes: - -File Location | Changed TG Proc -------------- | --------------- -code/datums/emotes.dm | `/datum/emote/proc/check_cooldown(mob/user, intentional)` -code/datums/emotes.dm | `/datum/emote/proc/run_emote(mob/user, params, type_override, intentional = FALSE)` -code/modules/mob/living/carbon/carbon_defense.dm | `/mob/living/carbon/proc/help_shake_act(mob/living/carbon/M)` - -### TG File Changes: - -- code/datums/emotes.dm -- code/modules/mob/living/emote.dm -- code/modules/mob/living/carbon/emote.dm - -### Defines: - -File Location | Defines -------------- | ------- -code/__DEFINES/~skyrat_defines/traits.dm | `#define TRAIT_EXCITABLE "wagwag"` -modular_skyrat/modules/emotes/code/emotes.dm | `#define EMOTE_DELAY` - -### Master file additions - -- N/A - -### Included files that are not contained in this module: - -- N/A - -### Credits: -- Gandalf2k15 - porting and refactoring -- Avunia Takiya - - refactoring code - - adjusting existing sound files - - adding more emotes -- TheOOZ Additional emotes - - overlay emotes - - turf emotes -- VOREstation - a couple of the soundfiles and emote texts diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_cat.ogg b/modular_skyrat/modules/emotes/sound/voice/scream_cat.ogg deleted file mode 100644 index a9f3be40ddd845..00000000000000 Binary files a/modular_skyrat/modules/emotes/sound/voice/scream_cat.ogg and /dev/null differ diff --git a/modular_skyrat/modules/examinemore/code/readme.md b/modular_skyrat/modules/examinemore/code/readme.md deleted file mode 100644 index aad46a675da4d5..00000000000000 --- a/modular_skyrat/modules/examinemore/code/readme.md +++ /dev/null @@ -1,26 +0,0 @@ -## Title: Special Examine System - -MODULE ID: examinemore - -### Description: - -Adds a system for setting special descriptors for items that trigger dependant on the below defines. Please check the files for more information. - -### TG Proc Changes: - -- N/A - -### Defines: - -- code\__DEFINES\~skyrat_defines\examine_defines.dm - -### Master file additions - -- N/A - -### Included files that are not contained in this module: - -- N/A - -### Credits: -Gandalf2k15 - OG code diff --git a/modular_skyrat/modules/exp_corps/code/clothing.dm b/modular_skyrat/modules/exp_corps/code/clothing.dm deleted file mode 100644 index 66e5422f012fb4..00000000000000 --- a/modular_skyrat/modules/exp_corps/code/clothing.dm +++ /dev/null @@ -1,274 +0,0 @@ -/obj/item/clothing/under/rank/expeditionary_corps - name = "expeditionary corps uniform" - desc = "A rugged uniform for those who see the worst at the edges of the galaxy." - icon_state = "exp_corps" - icon = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi' - armor_type = /datum/armor/clothing_under/rank_expeditionary_corps - strip_delay = 7 SECONDS - alt_covers_chest = TRUE - sensor_mode = SENSOR_COORDS - random_sensor = FALSE - -/datum/armor/clothing_under/rank_expeditionary_corps - fire = 15 - acid = 15 - -/obj/item/storage/belt/military/expeditionary_corps - name = "expeditionary corps chest rig" - desc = "A set of tactical webbing worn by expeditionary corps." - icon_state = "webbing_exp_corps" - worn_icon_state = "webbing_exp_corps" - icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi' - uses_advanced_reskins = TRUE - unique_reskin = list( - "Webbing" = list( - RESKIN_ICON_STATE = "webbing_exp_corps", - RESKIN_WORN_ICON_STATE = "webbing_exp_corps" - ), - "Belt" = list( - RESKIN_ICON_STATE = "belt_exp_corps", - RESKIN_WORN_ICON_STATE = "belt_exp_corps" - ), - ) - -/obj/item/storage/belt/military/expeditionary_corps/combat_tech - name = "combat tech's chest rig" - -/obj/item/storage/belt/military/expeditionary_corps/combat_tech/PopulateContents() - new /obj/item/screwdriver(src) - new /obj/item/wrench(src) - new /obj/item/weldingtool(src) - new /obj/item/crowbar(src) - new /obj/item/wirecutters(src) - new /obj/item/multitool(src) - new /obj/item/stack/cable_coil(src) - -/obj/item/storage/belt/military/expeditionary_corps/field_medic - name = "field medic's chest rig" - -/obj/item/storage/belt/military/expeditionary_corps/field_medic/PopulateContents() - new /obj/item/scalpel(src) - new /obj/item/circular_saw/field_medic(src) - new /obj/item/hemostat(src) - new /obj/item/retractor(src) - new /obj/item/cautery(src) - new /obj/item/surgical_drapes(src) - new /obj/item/bonesetter(src) - -/obj/item/storage/belt/military/expeditionary_corps/pointman - name = "pointman's chest rig" - -/obj/item/storage/belt/military/expeditionary_corps/pointman/PopulateContents() - new /obj/item/reagent_containers/cup/glass/bottle/whiskey(src) - new /obj/item/stack/sheet/plasteel(src,5) - new /obj/item/reagent_containers/cup/bottle/morphine(src) - -/obj/item/storage/belt/military/expeditionary_corps/marksman - name = "marksman's chest rig" - -/obj/item/storage/belt/military/expeditionary_corps/marksman/PopulateContents() - new /obj/item/binoculars(src) - new /obj/item/storage/fancy/cigarettes/cigpack_robust(src) - new /obj/item/lighter(src) - new /obj/item/clothing/mask/bandana/skull(src) - -/obj/item/clothing/shoes/combat/expeditionary_corps - name = "expeditionary corps boots" - desc = "High speed, low drag combat boots." - icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' - icon_state = "exp_corps" - inhand_icon_state = "jackboots" - -/obj/item/clothing/gloves/color/black/expeditionary_corps - name = "expeditionary corps gloves" - icon_state = "exp_corps" - icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi' - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF - -/obj/item/clothing/gloves/chief_engineer/expeditionary_corps - name = "expeditionary corps insulated gloves" - icon_state = "exp_corps_eng" - icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi' - worn_icon_state = "exp_corps" - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF - armor_type = /datum/armor/chief_engineer_expeditionary_corps - -/datum/armor/chief_engineer_expeditionary_corps - fire = 80 - acid = 50 - -/obj/item/clothing/gloves/latex/nitrile/expeditionary_corps - name = "expeditionary corps medic gloves" - icon_state = "exp_corps_med" - icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi' - worn_icon_state = "exp_corps" - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF - armor_type = /datum/armor/nitrile_expeditionary_corps - -/datum/armor/nitrile_expeditionary_corps - fire = 80 - acid = 50 - -/obj/item/storage/backpack/duffelbag/expeditionary_corps - name = "expeditionary corps bag" - desc = "A large bag for holding extra tactical supplies." - icon_state = "exp_corps" - inhand_icon_state = "backpack" - icon = 'modular_skyrat/modules/exp_corps/icons/backpack.dmi' - worn_icon = 'modular_skyrat/modules/exp_corps/icons/mob_backpack.dmi' - uses_advanced_reskins = TRUE - unique_reskin = list( - "Backpack" = list( - RESKIN_ICON_STATE = "exp_corps", - RESKIN_WORN_ICON_STATE = "exp_corps" - ), - "Belt" = list( - RESKIN_ICON_STATE = "exp_corps_satchel", - RESKIN_WORN_ICON_STATE = "exp_corps_satchel" - ), - ) - -/obj/item/clothing/suit/armor/vest/expeditionary_corps - name = "expeditionary corps armor vest" - desc = "An armored vest that provides okay protection against most types of damage." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi' - icon_state = "exp_corps" - body_parts_covered = CHEST|GROIN|ARMS - armor_type = /datum/armor/vest_expeditionary_corps - cold_protection = CHEST|GROIN|ARMS - heat_protection = CHEST|GROIN|ARMS - dog_fashion = null - allowed = list( - /obj/item/melee, - /obj/item/ammo_box, - /obj/item/ammo_casing, - /obj/item/flashlight, - /obj/item/gun, - /obj/item/knife, - /obj/item/reagent_containers, - /obj/item/restraints/handcuffs, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/plasmaman - ) - - -/datum/armor/vest_expeditionary_corps - melee = 30 - bullet = 30 - laser = 30 - energy = 30 - bomb = 40 - fire = 80 - acid = 100 - wound = 10 - -/obj/item/clothing/head/helmet/expeditionary_corps - name = "expeditionary corps helmet" - desc = "A robust helmet worn by Expeditionary Corps troopers. Alt+click it to toggle the NV system." - icon_state = "exp_corps" - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/helmet.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/helmet.dmi' - armor_type = /datum/armor/helmet_expeditionary_corps - supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON - var/nightvision = FALSE - var/mob/living/carbon/current_user - actions_types = list(/datum/action/item_action/toggle_nv) - -/datum/armor/helmet_expeditionary_corps - melee = 20 - bullet = 20 - laser = 20 - energy = 20 - bomb = 30 - fire = 80 - acid = 100 - wound = 10 - -/datum/action/item_action/toggle_nv - name = "Toggle Nightvision" - -/datum/action/item_action/toggle_nv/Trigger(trigger_flags) - var/obj/item/clothing/head/helmet/expeditionary_corps/my_helmet = target - if(!my_helmet.current_user) - return - my_helmet.nightvision = !my_helmet.nightvision - if(my_helmet.nightvision) - to_chat(owner, span_notice("You flip the NV goggles down.")) - my_helmet.enable_nv() - else - to_chat(owner, span_notice("You flip the NV goggles up.")) - my_helmet.disable_nv() - my_helmet.update_appearance() - -/obj/item/clothing/head/helmet/expeditionary_corps/equipped(mob/user, slot) - . = ..() - current_user = user - -/obj/item/clothing/head/helmet/expeditionary_corps/proc/enable_nv(mob/user) - if(current_user) - var/obj/item/organ/internal/eyes/my_eyes = current_user.get_organ_by_type(/obj/item/organ/internal/eyes) - if(my_eyes) - my_eyes.color_cutoffs = list(10, 30, 10) - my_eyes.flash_protect = FLASH_PROTECTION_SENSITIVE - current_user.add_client_colour(/datum/client_colour/glass_colour/lightgreen) - -/obj/item/clothing/head/helmet/expeditionary_corps/proc/disable_nv() - if(current_user) - var/obj/item/organ/internal/eyes/my_eyes = current_user.get_organ_by_type(/obj/item/organ/internal/eyes) - if(my_eyes) - my_eyes.color_cutoffs = initial(my_eyes.color_cutoffs) - my_eyes.flash_protect = initial(my_eyes.flash_protect) - current_user.remove_client_colour(/datum/client_colour/glass_colour/lightgreen) - current_user.update_sight() - -/obj/item/clothing/head/helmet/expeditionary_corps/AltClick(mob/user) - . = ..() - if(!current_user) - return - if(!can_interact(user)) - return - - nightvision = !nightvision - if(nightvision) - to_chat(user, span_notice("You flip the NV goggles down.")) - enable_nv() - else - to_chat(user, span_notice("You flip the NV goggles up.")) - disable_nv() - update_appearance() - -/obj/item/clothing/head/helmet/expeditionary_corps/dropped(mob/user) - . = ..() - disable_nv() - current_user = null - -/obj/item/clothing/head/helmet/expeditionary_corps/Destroy() - disable_nv() - current_user = null - return ..() - -/obj/item/clothing/head/helmet/expeditionary_corps/update_icon_state() - . = ..() - if(nightvision) - icon_state = "exp_corps_on" - else - icon_state = "exp_corps" diff --git a/modular_skyrat/modules/exp_corps/code/gear.dm b/modular_skyrat/modules/exp_corps/code/gear.dm deleted file mode 100644 index 5d3668f3f6d6b7..00000000000000 --- a/modular_skyrat/modules/exp_corps/code/gear.dm +++ /dev/null @@ -1,120 +0,0 @@ -//Gateway Medkit, no more combat defibs! -/obj/item/storage/medkit/expeditionary - name = "combat medical kit" - desc = "Now with 100% less bullshit." - icon_state = "medkit_tactical" - damagetype_healed = "all" - -/obj/item/storage/medkit/expeditionary/PopulateContents() - if(empty) - return - new /obj/item/stack/medical/gauze(src) - new /obj/item/defibrillator/compact/loaded(src) - new /obj/item/reagent_containers/hypospray/combat(src) - new /obj/item/stack/medical/mesh/advanced(src) - new /obj/item/stack/medical/suture/medicated(src) - new /obj/item/clothing/glasses/hud/health(src) - -//Field Medic's weapon, no more tomahawk! -/obj/item/circular_saw/field_medic - name = "bone saw" - desc = "Did that sting? SAW-ry!" - force = 20 - icon_state = "bonesaw" - icon = 'modular_skyrat/modules/exp_corps/icons/bonesaw.dmi' - lefthand_file = 'modular_skyrat/modules/exp_corps/icons/bonesaw_l.dmi' - righthand_file = 'modular_skyrat/modules/exp_corps/icons/bonesaw_r.dmi' - inhand_icon_state = "bonesaw" - hitsound = 'sound/weapons/bladeslice.ogg' - toolspeed = 0.2 - throw_range = 3 - w_class = WEIGHT_CLASS_SMALL - -//Pointman's riot shield. Fixable with 1 plasteel, crafting recipe for broken shield -/obj/item/shield/riot/pointman - name = "pointman shield" - desc = "A shield fit for those that want to sprint headfirst into the unknown! Cumbersome as hell." - icon_state = "riot" - icon = 'modular_skyrat/modules/exp_corps/icons/riot.dmi' - lefthand_file = 'modular_skyrat/modules/exp_corps/icons/riot_left.dmi' - righthand_file = 'modular_skyrat/modules/exp_corps/icons/riot_right.dmi' - force = 14 - throwforce = 5 - throw_speed = 1 - throw_range = 1 - block_chance = 60 - w_class = WEIGHT_CLASS_BULKY - attack_verb_continuous = list("shoves", "bashes") - attack_verb_simple = list("shove", "bash") - transparent = TRUE - max_integrity = 200 - var/repairable_by = /obj/item/stack/sheet/plasteel //what to repair the shield with - -/obj/item/shield/riot/pointman/shatter(mob/living/carbon/human/owner) - playsound(owner, 'sound/effects/glassbr3.ogg', 100) - new /obj/item/pointman_broken((get_turf(src))) - -/obj/item/shield/riot/pointman/attackby(obj/item/W, mob/user, params) - if(istype(W, repairable_by)) - var/obj/item/stack/sheet/plasteel_repair = W - plasteel_repair.use(1) - repair(user, params) - return ..() - -/obj/item/shield/riot/pointman/proc/repair(mob/user, params) - atom_integrity = max_integrity - if(user) - UnregisterSignal(user, COMSIG_MOVABLE_MOVED) - to_chat(user, span_notice("You fix the damage on [src].")) - -/obj/item/pointman_broken - name = "broken pointman shield" - desc = "Might be able to be repaired with plasteel and a welder." - icon_state = "riot_broken" - icon = 'modular_skyrat/modules/exp_corps/icons/riot.dmi' - w_class = WEIGHT_CLASS_BULKY - -//broken shield fixing -/datum/crafting_recipe/pointman - name = "Broken Riot Repair" - result = /obj/item/shield/riot/pointman - reqs = list(/obj/item/pointman_broken = 1, - /obj/item/stack/sheet/plasteel = 3, - /obj/item/stack/sheet/rglass = 3) - time = 40 - category = CAT_MISC - tool_behaviors = list(TOOL_WELDER) - -//Marksman's throwing knife and a pouch for it -/obj/item/knife/combat/marksman - name = "throwing knife" - desc = "Very well weighted for throwing, feels awkward to use for anything else." - icon = 'modular_skyrat/modules/exp_corps/icons/throwing.dmi' - icon_state = "throwing" - force = 12 - throwforce = 30 - -/obj/item/storage/pouch/ammo/marksman - name = "marksman's knife pouch" - unique_reskin = NONE - -/obj/item/storage/pouch/ammo/marksman/Initialize(mapload) - . = ..() - create_storage(storage_type = /datum/storage/marksman) - -/datum/storage/marksman - max_total_storage = 60 - max_slots = 10 - numerical_stacking = TRUE - quickdraw = TRUE - -/datum/storage/marksman/New() - . = ..() - can_hold = typecacheof(list(/obj/item/knife/combat)) - -/obj/item/storage/pouch/ammo/marksman/PopulateContents() //can kill most basic enemies with 5 knives, though marksmen shouldn't be soloing enemies anyways - new /obj/item/knife/combat/marksman(src) - new /obj/item/knife/combat/marksman(src) - new /obj/item/knife/combat/marksman(src) - new /obj/item/knife/combat/marksman(src) - new /obj/item/knife/combat/marksman(src) diff --git a/modular_skyrat/modules/exp_corps/code/tomahawk.dm b/modular_skyrat/modules/exp_corps/code/tomahawk.dm deleted file mode 100644 index 85e34f6fce7580..00000000000000 --- a/modular_skyrat/modules/exp_corps/code/tomahawk.dm +++ /dev/null @@ -1,24 +0,0 @@ -/obj/item/melee/tomahawk - name = "expeditionary tomahawk" - desc = "A somewhat dulled axe blade upon a short fibremetal handle." - icon = 'modular_skyrat/modules/exp_corps/icons/tomahawk.dmi' - icon_state = "tomahawk" - inhand_icon_state = "tomahawk" - lefthand_file = 'modular_skyrat/modules/exp_corps/icons/tomahawk_l.dmi' - righthand_file = 'modular_skyrat/modules/exp_corps/icons/tomahawk_r.dmi' - worn_icon = 'modular_skyrat/modules/exp_corps/icons/tomahawk_worn.dmi' - flags_1 = CONDUCT_1 - force = 15 //Equivalent to a survival knife - w_class = WEIGHT_CLASS_SMALL - throwforce = 18 - throw_speed = 4 - throw_range = 8 - embedding = list("pain_mult" = 6, "embed_chance" = 60, "fall_chance" = 10) - attack_verb_continuous = list("chops", "tears", "lacerates", "cuts") - attack_verb_simple = list("chop", "tear", "lacerate", "cut") - hitsound = 'sound/weapons/bladeslice.ogg' - sharpness = SHARP_EDGED - -/obj/item/melee/tomahawk/Initialize(mapload) - . = ..() - AddComponent(/datum/component/butchering, 70, 100) diff --git a/modular_skyrat/modules/faction/code/mapping/mapping_helpers.dm b/modular_skyrat/modules/faction/code/mapping/mapping_helpers.dm deleted file mode 100644 index 67461a949b7e4d..00000000000000 --- a/modular_skyrat/modules/faction/code/mapping/mapping_helpers.dm +++ /dev/null @@ -1,226 +0,0 @@ -/obj/machinery/computer/shuttle/trader - name = "trader shuttle console" - shuttleId = "tradership" - icon_screen = "syndishuttle" - icon_keyboard = "syndie_key" - light_color = COLOR_SOFT_RED - possible_destinations = "tradership;tradership_custom;tradership_away;pirateship_away;pirateship_home;whiteship_away;whiteship_home;whiteship_z4;whiteship_lavaland" - circuit = /obj/item/circuitboard/computer/trader_ship - -/obj/machinery/computer/camera_advanced/shuttle_docker/trader - name = "trader shuttle navigation computer" - desc = "Used to designate a precise transit location for the trade shuttle." - shuttleId = "tradership" - shuttlePortId = "tradership_custom" - view_range = 8 - x_offset = -6 - y_offset = -10 - see_hidden = FALSE - icon_screen = "syndishuttle" - icon_keyboard = "syndie_key" - jump_to_ports = list("tradership" = 1, "tradership_away" = 1, "tradership_custom" = 1,"whiteship_away" = 1, "whiteship_home" = 1, "whiteship_z4" = 1, "caravantrade1_ambush" = 1, "whiteship_lavaland" = 1) - whitelist_turfs = list(/turf/open/space, /turf/open/floor/plating, /turf/open/lava, /turf/closed/mineral) - lock_override = NONE - -/obj/item/circuitboard/computer/trader_ship - build_path = /obj/machinery/computer/shuttle/trader - -/obj/docking_port/mobile/tradership - name = "trade shuttle" - shuttle_id = "tradership" - rechargeTime = 2 MINUTES - -/obj/docking_port/stationary/picked/tradership - name = "Deep Space" - shuttle_id = "tradership_away" - dheight = 0 - dir = 2 - dwidth = 11 - height = 22 - width = 35 - shuttlekeys = list("tradership") - -/obj/structure/closet/crate/tradership_cargo - /// Determines which items will be spawned, overriding itemspawn_seed - var/used_preset - /// Determines which items will be spawned - var/itemspawn_seed - -/obj/structure/closet/crate/tradership_cargo/Initialize(mapload) - itemspawn_seed = used_preset || rand(1,5) - return ..() - -//Generic inventory -/obj/structure/closet/crate/tradership_cargo/PopulateContents() - ..() - - switch(itemspawn_seed) - if(1) - for(var/i in 1 to 10) - new /obj/item/food/canned/beans(src) - for(var/i in 1 to 10) - new /obj/item/reagent_containers/cup/glass/waterbottle(src) - if(2) - new /obj/item/stack/sheet/iron/fifty(src) - new /obj/item/stack/rods/fifty(src) - new /obj/item/stack/sheet/glass/fifty(src) - new /obj/item/stack/sheet/mineral/wood/fifty(src) - new /obj/item/stack/cable_coil(src) - if(3) - for(var/i in 1 to 5) - new /obj/item/tank/internals/emergency_oxygen/engi(src) - new /obj/item/tank/internals/oxygen(src) - new /obj/item/tank/internals/nitrogen(src) - new /obj/item/tank/internals/nitrogen/belt/full(src) - new /obj/item/tank/internals/plasma(src) - new /obj/item/tank/internals/plasmaman/belt/full(src) - for(var/i in 1 to 7) - new /obj/item/clothing/mask/breath() - desc = "An internals crate." - name = "internals crate" - icon_state = "o2crate" - if(4) - new /obj/item/storage/medkit/regular(src) - new /obj/item/storage/medkit/o2(src) - new /obj/item/storage/medkit/toxin(src) - new /obj/item/reagent_containers/hypospray/medipen(src) - new /obj/item/reagent_containers/hypospray/medipen/ekit(src) - desc = "A medical crate." - name = "medical crate" - icon_state = "medicalcrate" - if(5) - new /obj/item/storage/toolbox/artistic(src) - new /obj/item/storage/toolbox/electrical(src) - new /obj/item/storage/toolbox/electrical(src) - new /obj/item/storage/toolbox/mechanical(src) - new /obj/item/storage/toolbox/mechanical(src) - name = "engineering crate" - icon_state = "engi_crate" - -// traitor objective items -/obj/structure/closet/crate/tradership_cargo/populate_contents_immediate() - . = ..() - - switch(itemspawn_seed) - if(5) - new /obj/item/clothing/gloves/color/yellow(src) - new /obj/item/clothing/gloves/color/yellow(src) - -/obj/structure/closet/crate/freezer/tradership_cargo_freezer - var/used_preset - -/obj/structure/closet/crate/freezer/tradership_cargo_freezer/PopulateContents() - . = ..() - var/random = used_preset || rand(1,4) - switch(random) - if(1) - new /obj/item/reagent_containers/blood(src) - new /obj/item/reagent_containers/blood(src) - new /obj/item/reagent_containers/blood/a_minus(src) - new /obj/item/reagent_containers/blood/b_minus(src) - new /obj/item/reagent_containers/blood/b_plus(src) - new /obj/item/reagent_containers/blood/o_minus(src) - new /obj/item/reagent_containers/blood/o_plus(src) - new /obj/item/reagent_containers/blood/lizard(src) - new /obj/item/reagent_containers/blood/ethereal(src) - for(var/i in 1 to 3) - new /obj/item/reagent_containers/blood/random(src) - if(2) - new /obj/item/bodypart/arm/left/robot(src) - new /obj/item/bodypart/arm/left/robot(src) - new /obj/item/bodypart/arm/right/robot(src) - new /obj/item/bodypart/arm/right/robot(src) - new /obj/item/bodypart/leg/left/robot(src) - new /obj/item/bodypart/leg/left/robot(src) - new /obj/item/bodypart/leg/right/robot(src) - new /obj/item/bodypart/leg/right/robot(src) - if(3) - for(var/i in 1 to 6) - new /obj/item/storage/box/ingredients/wildcard(src) - if(4) - new /obj/item/food/meat/slab/human/mutant/slime(src) - new /obj/item/food/meat/slab/killertomato(src) - new /obj/item/food/meat/slab/bear(src) - new /obj/item/food/meat/slab/xeno(src) - new /obj/item/food/meat/slab/spider(src) - new /obj/item/food/meat/rawbacon(src) - new /obj/item/food/meat/slab/penguin(src) - new /obj/item/food/spiderleg(src) - new /obj/item/food/fishmeat/carp(src) - new /obj/item/food/meat/slab/human(src) - -/obj/structure/closet/crate/secure/tradership_cargo_valuable - req_access = ACCESS_FACTION_CREW - var/used_preset - -/obj/structure/closet/crate/secure/tradership_cargo_valuable/PopulateContents() - . = ..() - var/random = used_preset || rand(1,5) - switch(random) - if(1) //Random traitor items - new /obj/item/storage/box/syndie_kit/chameleon(src) - new /obj/item/storage/backpack/duffelbag/syndie/c4(src) - new /obj/item/computer_disk/syndicate/camera_app(src) - new /obj/item/gun/chem(src) - new /obj/item/card/emag(src) - new /obj/item/card/emag/doorjack(src) - new /obj/item/gun/medbeam(src) - new /obj/item/healthanalyzer/rad_laser(src) - new /obj/item/pen/sleepy(src) - new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src) - if(2) //Energy weapons + energy knives - new /obj/item/gun/energy/e_gun(src) - new /obj/item/gun/energy/e_gun(src) - new /obj/item/gun/energy/e_gun(src) - new /obj/item/gun/energy/e_gun/mini(src) - new /obj/item/gun/energy/recharge/ebow(src) - new /obj/item/melee/energy/sword(src) - new /obj/item/melee/energy/sword(src) - if(3) //Ballistics + knives - new /obj/item/knife/combat(src) - new /obj/item/knife/combat(src) - new /obj/item/switchblade(src) - new /obj/item/switchblade(src) - new /obj/item/gun/ballistic/automatic/sol_smg(src) - new /obj/item/gun/ballistic/automatic/sol_smg(src) - for(var/i in 1 to 2) - new /obj/item/ammo_box/magazine/c35sol_pistol/stendo(src) - new /obj/item/ammo_box/magazine/c35sol_pistol/stendo(src) - new /obj/item/gun/ballistic/automatic/akm(src) - for(var/i in 1 to 2) - new /obj/item/ammo_box/magazine/akm(src) - new /obj/item/gun/ballistic/automatic/ppsh(src) - for(var/i in 1 to 2) - new /obj/item/ammo_box/magazine/ppsh(src) - new /obj/item/gun/ballistic/automatic/stg(src) - for(var/i in 1 to 2) - new /obj/item/ammo_box/magazine/stg(src) - - if(4) //MODsuits - new /obj/item/mod/control/pre_equipped/mining(src) - new /obj/item/mod/control/pre_equipped/engineering(src) - new /obj/item/mod/control/pre_equipped/atmospheric(src) - new /obj/item/mod/control/pre_equipped/research(src) - new /obj/item/mod/control/pre_equipped/traitor(src) - new /obj/item/mod/control/pre_equipped/elite(src) - if(5) //Implants - new /obj/item/storage/box/cyber_implants(src) - new /obj/item/organ/internal/cyberimp/arm/combat(src) - new /obj/item/organ/internal/cyberimp/arm/surgery(src) - new /obj/item/organ/internal/cyberimp/arm/baton(src) - new /obj/item/organ/internal/cyberimp/arm/toolset(src) - new /obj/item/organ/internal/cyberimp/arm/gun/taser(src) - -/obj/structure/closet/crate/secure/tradership_cargo_very_valuable - req_access = ACCESS_FACTION_COMMAND - icon_state = "weaponcrate" - var/used_preset - -/obj/structure/closet/crate/secure/tradership_cargo_very_valuable/PopulateContents() - . = ..() - var/random = used_preset || rand(1,1) - switch(random) - if(1) //45 TC, but no uplink. Better find a cantor - new /obj/item/stack/telecrystal/twenty(src) - new /obj/item/stack/telecrystal/twenty(src) - new /obj/item/stack/telecrystal/five(src) diff --git a/modular_skyrat/modules/faction/code/mapping/ruins.dm b/modular_skyrat/modules/faction/code/mapping/ruins.dm deleted file mode 100644 index 5764eb292f6714..00000000000000 --- a/modular_skyrat/modules/faction/code/mapping/ruins.dm +++ /dev/null @@ -1,6 +0,0 @@ -/datum/map_template/shuttle/tradership - prefix = "modular_skyrat/modules/faction/maps/shuttles/" - suffix = "faction" - who_can_purchase = null - name = "Faction Trader Ship" - port_id = "tradership" diff --git a/modular_skyrat/modules/food_replicator/code/clothing.dm b/modular_skyrat/modules/food_replicator/code/clothing.dm deleted file mode 100644 index 8d1b6238ed6102..00000000000000 --- a/modular_skyrat/modules/food_replicator/code/clothing.dm +++ /dev/null @@ -1,63 +0,0 @@ -/obj/item/clothing/under/colonial - name = "colonial outfit" - desc = "Fancy white satin shirt and a pair of cotton-blend pants with a black synthleather belt." - icon = 'modular_skyrat/modules/food_replicator/icons/clothing.dmi' - worn_icon = 'modular_skyrat/modules/food_replicator/icons/clothing_worn.dmi' - worn_icon_digi = 'modular_skyrat/modules/food_replicator/icons/clothing_digi.dmi' - icon_state = "under_colonial" - -/obj/item/clothing/under/colonial/mob_can_equip(mob/living/equipper, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action) - if(is_species(equipper, /datum/species/teshari)) - to_chat(equipper, span_warning("[src] is far too big for you!")) - return FALSE - - return ..() - -/obj/item/clothing/shoes/jackboots/colonial - name = "colonial half-boots" - desc = "Good old laceless boots, with a sturdy plastic toe to, theoretically, keep your toes uncrushed." - icon = 'modular_skyrat/modules/food_replicator/icons/clothing.dmi' - worn_icon = 'modular_skyrat/modules/food_replicator/icons/clothing_worn.dmi' - worn_icon_digi = 'modular_skyrat/modules/food_replicator/icons/clothing_digi.dmi' - icon_state = "boots_colonial" - -/obj/item/clothing/shoes/jackboots/colonial/mob_can_equip(mob/living/equipper, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action) - if(is_species(equipper, /datum/species/teshari)) - to_chat(equipper, span_warning("[src] is far too big for you!")) - return FALSE - - return ..() - -/obj/item/clothing/neck/cloak/colonial - name = "colonial cloak" - desc = "A cloak made from heavy tarpaulin. Nigh wind- and waterproof thanks to its design." - slot_flags = ITEM_SLOT_OCLOTHING|ITEM_SLOT_NECK - w_class = WEIGHT_CLASS_NORMAL - icon = 'modular_skyrat/modules/food_replicator/icons/clothing.dmi' - worn_icon = 'modular_skyrat/modules/food_replicator/icons/clothing_worn.dmi' - worn_icon_digi = 'modular_skyrat/modules/food_replicator/icons/clothing_digi.dmi' - icon_state = "cloak_colonial" - -/obj/item/clothing/neck/cloak/colonial/mob_can_equip(mob/living/equipper, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action) - if(is_species(equipper, /datum/species/teshari)) - to_chat(equipper, span_warning("[src] is far too big for you!")) - return FALSE - - return ..() - -/obj/item/clothing/head/hats/colonial - name = "colonial cap" - desc = "A puffy cap made out of tarpaulin covered by some textile. It is sturdy and comfortable, and seems to retain its form very well." - icon = 'modular_skyrat/modules/food_replicator/icons/clothing.dmi' - worn_icon = 'modular_skyrat/modules/food_replicator/icons/clothing_worn.dmi' - worn_icon_digi = 'modular_skyrat/modules/food_replicator/icons/clothing_digi.dmi' - icon_state = "cap_colonial" - inhand_icon_state = null - supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON - -/obj/item/clothing/head/hats/colonial/mob_can_equip(mob/living/equipper, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action) - if(is_species(equipper, /datum/species/teshari)) - to_chat(equipper, span_warning("[src] is far too big for you!")) - return FALSE - - return ..() diff --git a/modular_skyrat/modules/food_replicator/code/medical.dm b/modular_skyrat/modules/food_replicator/code/medical.dm deleted file mode 100644 index 1b55cae599158d..00000000000000 --- a/modular_skyrat/modules/food_replicator/code/medical.dm +++ /dev/null @@ -1,66 +0,0 @@ -/obj/item/stack/medical/suture/bloody - name = "hemostatic suture" - desc = "Bloodclotting agent-infused sterile sutures used to seal up cuts and lacerations and reverse critical bleedings." - icon = 'modular_skyrat/modules/food_replicator/icons/medicine.dmi' - icon_state = "hemo_suture" - heal_brute = 7 - stop_bleeding = 1 - grind_results = list(/datum/reagent/medicine/coagulant = 2) - merge_type = /obj/item/stack/medical/suture/bloody - -/obj/item/stack/medical/suture/bloody/post_heal_effects(amount_healed, mob/living/carbon/healed_mob, mob/user) - . = ..() - if(healed_mob.blood_volume <= BLOOD_VOLUME_SAFE) - healed_mob.reagents.add_reagent(/datum/reagent/medicine/salglu_solution, 2) - healed_mob.adjustOxyLoss(-amount_healed) - -/obj/item/stack/medical/mesh/bloody - name = "hemostatic mesh" - desc = "A hemostatic mesh used to dress burns and stimulate hemopoiesis. Due to its blood-related purpose, it is worse at sanitizing infections." - icon = 'modular_skyrat/modules/food_replicator/icons/medicine.dmi' - icon_state = "hemo_mesh" - heal_burn = 7 - sanitization = 0.5 - flesh_regeneration = 1.75 - stop_bleeding = 0.25 - grind_results = list(/datum/reagent/medicine/coagulant = 2) - merge_type = /obj/item/stack/medical/mesh/bloody - -/obj/item/stack/medical/mesh/bloody/update_icon_state() - if(is_open) - return ..() - - icon_state = "hemo_mesh_closed" - -/obj/item/stack/medical/mesh/bloody/post_heal_effects(amount_healed, mob/living/carbon/healed_mob, mob/user) - . = ..() - if(healed_mob.blood_volume <= BLOOD_VOLUME_SAFE) - healed_mob.reagents.add_reagent(/datum/reagent/medicine/salglu_solution, 2) - healed_mob.adjustOxyLoss(-amount_healed) - -/obj/item/reagent_containers/hypospray/medipen/glucose - name = "pressurised glucose medipen" - desc = "A medipen for keeping yourself going during prolonged EVA shifts, injects a dose of glucose into your bloodstream. Recommended for use in low-pressure environments." - icon = 'modular_skyrat/modules/food_replicator/icons/medicine.dmi' - icon_state = "glupen" - inhand_icon_state = "stimpen" - base_icon_state = "glupen" - volume = 15 - amount_per_transfer_from_this = 15 - list_reagents = list(/datum/reagent/consumable/nutriment/glucose = 15) - -/obj/item/reagent_containers/hypospray/medipen/glucose/inject(mob/living/affected_mob, mob/user) - if(lavaland_equipment_pressure_check(get_turf(user))) - amount_per_transfer_from_this = initial(amount_per_transfer_from_this) - return ..() - - if(DOING_INTERACTION(user, DOAFTER_SOURCE_SURVIVALPEN)) - to_chat(user,span_notice("You are too busy to use \the [src]!")) - return - - to_chat(user,span_notice("You start manually releasing the low-pressure gauge...")) - if(!do_after(user, 10 SECONDS, affected_mob, interaction_key = DOAFTER_SOURCE_SURVIVALPEN)) - return - - amount_per_transfer_from_this = initial(amount_per_transfer_from_this) * 0.5 - return ..() diff --git a/modular_skyrat/modules/food_replicator/code/rationpacks.dm b/modular_skyrat/modules/food_replicator/code/rationpacks.dm deleted file mode 100644 index c22d588d49a2d6..00000000000000 --- a/modular_skyrat/modules/food_replicator/code/rationpacks.dm +++ /dev/null @@ -1,188 +0,0 @@ -/obj/item/food/colonial_course - name = "undefined colonial course" - desc = "Something you shouldn't see. But it's edible." - icon = 'modular_skyrat/modules/food_replicator/icons/rationpack.dmi' - icon_state = "borgir" - base_icon_state = "borgir" - food_reagents = list(/datum/reagent/consumable/nutriment = 20) - tastes = list("crayon powder" = 1) - foodtypes = VEGETABLES | GRAIN - w_class = WEIGHT_CLASS_SMALL - preserved_food = TRUE - -/obj/item/food/colonial_course/attack_self(mob/user, modifiers) - if(preserved_food) - preserved_food = FALSE - icon_state = "[base_icon_state]_unwrapped" - to_chat(user, span_notice("You unpackage \the [src].")) - playsound(user.loc, 'sound/items/foodcanopen.ogg', 50) - -/obj/item/food/colonial_course/attack(mob/living/target, mob/user, def_zone) - if(preserved_food) - to_chat(user, span_warning("[src] is still packaged!")) - return FALSE - - return ..() - -/obj/item/food/colonial_course/pljeskavica - name = "pljeskavica" - desc = "Freshly-printed steaming hot burger consisting of a biogenerator-produced handcraft-imitating buns, with a minced meat patty inbetween, among various vegetables and sauces.\ - <br> Looks good <i>enough</i> for something as replicated as this. Its packaging is covered in copious amounts of information on its nutritional facts, contents and the expiry date. Sadly, it's all written in Pan-Slavic." - trash_type = /obj/item/trash/pljeskavica - food_reagents = list( - /datum/reagent/consumable/nutriment = 3, - /datum/reagent/consumable/nutriment/protein = 9, - /datum/reagent/consumable/nutriment/vitamin = 4, - ) - tastes = list("bun" = 2, "spiced meat" = 10, "death of veganism" = 3) - foodtypes = VEGETABLES | GRAIN | MEAT - -/obj/item/food/colonial_course/nachos - name = "plain nachos tray" - desc = "A vacuum-sealed package with what seems to be a generous serving of triangular corn chips, with three sections reserved for a salsa, cheese and guacamole sauces.\ - <br> Probably the best-looking food you can find in these rations, perhaps due to its simplicity." - food_reagents = list( - /datum/reagent/consumable/nutriment = 5, - /datum/reagent/consumable/nutriment/vitamin = 2, - ) - trash_type = /obj/item/trash/nachos - icon_state = "nacho" - base_icon_state = "nacho" - tastes = list("corn chips" = 5, "'artificial' organic sauces" = 5) - foodtypes = GRAIN | FRIED | DAIRY - -/obj/item/food/colonial_course/blins - name = "condensed milk crepes" - desc = "A vacuum-sealed four-pack of stuffed crepes with a minimal amount of markings. There is nothing else to it, to be frank.\ - <br> Surprisingly tasty for its looks, as long as you're not lactose intolerant, on diet, or vegan. The back of the packaging is covered in a mass of information detailing the product." - food_reagents = list( - /datum/reagent/consumable/nutriment = 2, - /datum/reagent/consumable/caramel = 3, - /datum/reagent/consumable/milk = 4, - ) - trash_type = /obj/item/trash/blins - icon_state = "blin" - base_icon_state = "blin" - tastes = list("insane amount of sweetness" = 10, "crepes" = 3) - foodtypes = SUGAR | GRAIN | DAIRY | BREAKFAST - -/obj/item/reagent_containers/cup/glass/coffee/colonial - name = "colonial thermocup" - desc = "Technically, used to drink hot beverages. But since it's the only cup design that was available, you gotta make do. It has an instruction written on its side. \ - <br> This particular one comes prefilled with a single serving of coffee powder." - special_desc = "A small instruction on the side reads: <i>\"For use in food replicators; mix water and powdered solutions in one-to-one proportions. \ - <br> For cocoa, mix milk and powdered solution in one-to-one proportion.\"</i>" - icon = 'modular_skyrat/modules/food_replicator/icons/rationpack.dmi' - list_reagents = list(/datum/reagent/consumable/powdered_coffee = 25) - -/obj/item/reagent_containers/cup/glass/coffee/colonial/empty - desc = "Technically, used to drink hot beverages. But since it's the only cup design that was available, you gotta make do. It has an instruction written on its side." - list_reagents = null - -/obj/item/trash/pljeskavica - name = "pljeskavica wrapping paper" - desc = "Covered in sauce smearings and smaller pieces of the dish on the inside, crumpled into a ball. It's probably best to dispose of it." - icon = 'modular_skyrat/modules/food_replicator/icons/rationpack.dmi' - icon_state = "borgir_trash" - -/obj/item/trash/nachos - name = "empty nachos tray" - desc = "Covered in sauce smearings and smaller pieces of the dish on the inside, a plastic food tray with not much use anymore. It's probably best to dispose of it or recycle it." - icon = 'modular_skyrat/modules/food_replicator/icons/rationpack.dmi' - custom_materials = list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT) - icon_state = "nacho_trash" - -/obj/item/trash/blins - name = "empty crepes wrapper" - desc = "Empty torn wrapper that used to hold something ridiculously sweet. It's probably best to recycle it." - icon = 'modular_skyrat/modules/food_replicator/icons/rationpack.dmi' - custom_materials = list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT * 0.5) - icon_state = "blin_trash" - -/obj/item/storage/box/gum/colonial - name = "mixed bubblegum packet" - desc = "The packaging is entirely written in Pan-Slavic, with a small blurb of Sol Common. You would need to take a better look to read it, though, as it is written quite small." - special_desc = "Examining the small text reveals the following: <i>\"Foreign colonization ration, model J: mixed origin, adult. Bubblegum package, medicinal, recreational. <br>\ - Do not overconsume. Certain strips contain nicotine.\"</i>" - icon = 'modular_skyrat/modules/food_replicator/icons/rationpack.dmi' - icon_state = "bubblegum" - -/obj/item/storage/box/gum/colonial/PopulateContents() - new /obj/item/food/bubblegum(src) - new /obj/item/food/bubblegum(src) - new /obj/item/food/bubblegum/nicotine(src) - new /obj/item/food/bubblegum/nicotine(src) - -/obj/item/storage/box/utensils - name = "utensils package" - desc = "A small package containing various utensils required for <i>human</i> consumption of various foods. \ - In a normal situation contains a plastic fork, a plastic spoon, and two serviettes." - icon = 'modular_skyrat/modules/food_replicator/icons/rationpack.dmi' - icon_state = "utensil_box" - w_class = WEIGHT_CLASS_TINY - illustration = null - foldable_result = null - -/obj/item/storage/box/utensils/Initialize(mapload) - . = ..() - atom_storage.set_holdable(list( - /obj/item/kitchen/spoon/plastic, - /obj/item/kitchen/fork/plastic, - /obj/item/serviette, - )) - atom_storage.max_slots = 4 - -/obj/item/storage/box/utensils/PopulateContents() - new /obj/item/kitchen/spoon/plastic(src) - new /obj/item/kitchen/fork/plastic(src) - new /obj/item/serviette/colonial(src) - new /obj/item/serviette/colonial(src) - -/obj/item/serviette/colonial - name = "colonial napkin" - desc = "To clean all the mess. Comes with a custom <i>combined</i> design of red and blue." - icon_state = "napkin_unused" - icon = 'modular_skyrat/modules/food_replicator/icons/rationpack.dmi' - used_serviette = /obj/item/serviette_used/colonial - -/obj/item/serviette_used/colonial - name = "dirty colonial napkin" - desc = "No longer useful, super dirty, or soaked, or otherwise unrecognisable." - icon_state = "napkin_used" - icon = 'modular_skyrat/modules/food_replicator/icons/rationpack.dmi' - -/obj/item/storage/box/colonial_rations - name = "foreign colonization ration" - desc = "A freshly printed civilian MRE, or more specifically a lunchtime food package, for use in the early colonization times by the first settlers of what is now known as the NRI. <br>\ - The lack of any imprinted dates, as well as its origin, <i>the food replicator</i>, should probably give you a good enough hint at its short, if reasonable, expiry time." - icon = 'modular_skyrat/modules/food_replicator/icons/rationpack.dmi' - icon_state = "mre_package" - foldable_result = null - illustration = null - -/obj/item/storage/box/colonial_rations/Initialize(mapload) - . = ..() - atom_storage.max_slots = 6 - atom_storage.locked = TRUE - -/obj/item/storage/box/colonial_rations/attack_self(mob/user, modifiers) - if(user) - if(atom_storage.locked == TRUE) - atom_storage.locked = FALSE - icon_state = "mre_package_open" - balloon_alert(user, "unsealed!") - return ..() - else - atom_storage.locked = TRUE - atom_storage.close_all() - icon_state = "mre_package" - balloon_alert(user, "resealed!") - return - -/obj/item/storage/box/colonial_rations/PopulateContents() - new /obj/item/food/colonial_course/pljeskavica(src) - new /obj/item/food/colonial_course/nachos(src) - new /obj/item/food/colonial_course/blins(src) - new /obj/item/reagent_containers/cup/glass/coffee/colonial(src) - new /obj/item/storage/box/gum/colonial(src) - new /obj/item/storage/box/utensils(src) diff --git a/modular_skyrat/modules/food_replicator/code/storage.dm b/modular_skyrat/modules/food_replicator/code/storage.dm deleted file mode 100644 index 7bd4461a9e9f56..00000000000000 --- a/modular_skyrat/modules/food_replicator/code/storage.dm +++ /dev/null @@ -1,35 +0,0 @@ -/obj/item/storage/pouch/cin_medipens - name = "colonial medipen pouch" - desc = "A pouch for your (medi-)pens that goes in your pocket." - icon = 'modular_skyrat/modules/food_replicator/icons/pouch.dmi' - icon_state = "medipen_pouch" - w_class = WEIGHT_CLASS_NORMAL - -/obj/item/storage/pouch/cin_medipens/update_icon_state() - icon_state = "[initial(icon_state)]_[contents.len]" - return ..() - -/obj/item/storage/pouch/cin_medipens/Initialize(mapload) - . = ..() - update_appearance() - -/obj/item/storage/pouch/cin_medipens/Initialize(mapload) - . = ..() - atom_storage.max_specific_storage = WEIGHT_CLASS_TINY - atom_storage.max_total_storage = 4 - atom_storage.max_slots = 4 - atom_storage.can_hold = typecacheof(list(/obj/item/reagent_containers/hypospray/medipen, /obj/item/pen, /obj/item/flashlight/pen)) - -/obj/item/storage/pouch/cin_medkit - name = "colonial first aid kit" - desc = "A medical case that goes in your pocket. Can be used to store things unrelated to medicine, except for guns, ammo and raw materials." - icon = 'modular_skyrat/modules/food_replicator/icons/pouch.dmi' - icon_state = "cfak" - w_class = WEIGHT_CLASS_NORMAL - -/obj/item/storage/pouch/cin_medkit/Initialize(mapload) - . = ..() - atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL - atom_storage.max_total_storage = 4 - atom_storage.max_slots = 4 - atom_storage.cant_hold = typecacheof(list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/stack/sheet)) diff --git a/modular_skyrat/modules/ghostcafe/code/ghostcafeturf.dm b/modular_skyrat/modules/ghostcafe/code/ghostcafeturf.dm deleted file mode 100644 index 68a03c5f6d1774..00000000000000 --- a/modular_skyrat/modules/ghostcafe/code/ghostcafeturf.dm +++ /dev/null @@ -1,11 +0,0 @@ -/turf/open/lava/fake - name = "lava" - desc = "Go on. Step in it. Maybe you'll be like some sort of Lava based Jesus." - planetary_atmos = TRUE - initial_gas_mix = OPENTURF_DEFAULT_ATMOS - lava_damage = 0 - lava_firestacks = 0 - temperature_damage = 0 - immunity_trait = GHOSTROLE_TRAIT - immunity_resistance_flags = LAVA_PROOF - diff --git a/modular_skyrat/modules/gunhud/readme.md b/modular_skyrat/modules/gunhud/readme.md deleted file mode 100644 index 72538eb78577e0..00000000000000 --- a/modular_skyrat/modules/gunhud/readme.md +++ /dev/null @@ -1,30 +0,0 @@ -## Title: Gunpoint - -MODULE ID: GUNHUD - -### Description: - -Adds a dynamic hud system for energy and some ballistics guns. - -### TG Proc Changes: -- N/A -### Defines: - -.code\__DEFINES\atom_hud.dm > #define AMMO_HUD "25" - -.code\modules\projectiles\guns\ballistic.dm > /obj/item/gun/ballistic/examine(mob/user) - -### Master file additions - -- Hud directory > _defines.dm, human.dm, hud.dm -- `modular_skyrat\master_files\code\game\objects\items\tools\weldingtool.dm`: `proc/Initialize`, `proc/set_welding` -- `modular_skyrat\master_files\code\modules\projectiles\guns\ballistic.dm`: `proc/eject_magazine`, `proc/insert_magazine` -- `modular_skyrat\master_files\code\modules\projectiles\guns\energy.dm`: `proc/process`, `proc/select_fire` - -### Included files that are not contained in this module: - -- N/A - -### Credits: -Gandalf2k15 - OG creation. -Larentoun - modularisation diff --git a/modular_skyrat/modules/gunpoint/readme.md b/modular_skyrat/modules/gunpoint/readme.md deleted file mode 100644 index 7b91a3a80d5b6e..00000000000000 --- a/modular_skyrat/modules/gunpoint/readme.md +++ /dev/null @@ -1,36 +0,0 @@ -## Title: Gunpoint - -MODULE ID: GUNPOINT - -### Description: - -Allows anyone with a gun to use SHIFT + MMB to hold someone at gunpoint, much like how baystation does it, but in a more visually clear way - -### TG Proc Changes: - - ./modular_skyrat/modules/gunpoint/code/datum/gunpoint/gunpoint.dm > /mob/living/ShiftMiddleClickOn() > CHILD PROC - ./code/_onclick/hud/radial.dm > /datum/radial_menu/proc/setup_menu() - ./code/_onclick/item_attack.dm > /obj/item/proc/attack_self() - ./code/game/objects/items/devices/radio/radio.dm > /obj/item/radio/talk_into() - ./code/game/objects/items/devices/radio/headset.dm > /obj/item/radio/headset/talk_into() - ./code/modules/mob/living/carbon/human/examine.dm > /mob/living/carbon/human/examine() - ./code/modules/mob/living/living.dm > /mob/living/proc/update_mobility() - ./code/modules/mob/living/living.dm > /mob/living/proc/MobBump() - ./code/modules/mob/mob_movement.dm > /mob/proc/toggle_move_intent() - -### Defines: - - ./code/_onclick/hud/radial.dm > /datum/radial_menu - var/icon_path - ./code/__DEFINES/~skyrat_defines/signals.dm - COMSIG_MOVABLE_RADIO_TALK_INTO, COMSIG_LIVING_UPDATED_RESTING - ./code/__DEFINES/~skyrat_defines/traits.dm - TRAIT_NORUNNING - -### Master file additions - -- N/A - -### Included files that are not contained in this module: - -- N/A - -### Credits: -Azarak - original code & porting diff --git a/modular_skyrat/modules/gunsgalore/code/ammo/ammo.dm b/modular_skyrat/modules/gunsgalore/code/ammo/ammo.dm deleted file mode 100644 index 688938de1b0a38..00000000000000 --- a/modular_skyrat/modules/gunsgalore/code/ammo/ammo.dm +++ /dev/null @@ -1,216 +0,0 @@ -///NEW CARTRIDGES - -/obj/item/ammo_casing/realistic - icon = 'modular_skyrat/modules/gunsgalore/icons/ammo/ammo.dmi' - -//GERMAN -//7.92x33mm Kurz -/obj/item/ammo_casing/realistic/a792x33 - name = "7.92x33 bullet casing" - desc = "A 7.92x33mm Kurz bullet casing." - icon_state = "792x33-casing" - caliber = "a792x33" - projectile_type = /obj/projectile/bullet/a792x33 - -/obj/projectile/bullet/a792x33 - name = "7.92x33 bullet" - damage = 32 - wound_bonus = 10 - wound_falloff_tile = 0 -// - -//7.92x57mm Mauser -/obj/item/ammo_casing/realistic/a792x57 - name = "7.92x57 bullet casing" - desc = "A 7.92x57mm Mauser bullet casing." - icon_state = "792x57-casing" - caliber = "a792x57" - projectile_type = /obj/projectile/bullet/a792x57 - -/obj/projectile/bullet/a792x57 - name = "7.92x57 bullet" - damage = 35 - armour_penetration = 5 - wound_bonus = 15 - wound_falloff_tile = 0 -// - -//RUSSIAN - NRI -//7.62x25 tokarev -/obj/item/ammo_casing/realistic/a762x25 - name = "7.62x25 bullet casing" - desc = "A 7.62x25 Tokarev bullet casing." - icon_state = "762x25-casing" - caliber = "a762x25" - projectile_type = /obj/projectile/bullet/a762x25 - -/obj/projectile/bullet/a762x25 - name = "7.62x25 bullet" - damage = 20 - wound_falloff_tile = 0 -// - -//NRI Propietary ammo -/obj/item/ammo_casing/realistic/a762x39 - name = "5.6x40mm bullet casing" - desc = "A 5.6x40mm bullet casing." - icon_state = "762x39-casing" - caliber = "a762x39" - projectile_type = /obj/projectile/bullet/a762x39 - -/obj/projectile/bullet/a762x39 - name = "5.6mm bullet" - damage = 38 - wound_bonus = 35 - armour_penetration = 40 - wound_falloff_tile = 0 - -/obj/item/ammo_casing/realistic/a762x39/ricochet - name = "5.6x40mm match bullet casing" - desc = "A 5.6x40mm match bullet casing." - special_desc = "MATCH: Ricochets everywhere. Like crazy." - projectile_type = /obj/projectile/bullet/a762x39/ricochet - advanced_print_req = TRUE - -/obj/projectile/bullet/a762x39/ricochet - name = "5.6mm match bullet" - damage = 30 - wound_bonus = 25 - armour_penetration = 25 - ricochets_max = 2 - ricochet_chance = 100 - ricochet_auto_aim_angle = 30 - ricochet_auto_aim_range = 15 - ricochet_incidence_leeway = 40 - ricochet_decay_damage = 1 - ricochet_shoots_firer = FALSE - -/obj/item/ammo_casing/realistic/a762x39/fire - name = "5.6x40mm incendiary bullet casing" - desc = "A 5.6x40mm incendiary bullet casing." - special_desc = "TARGETED INCENDIARY: Leaves no trail when shot, sets targets aflame." - projectile_type = /obj/projectile/bullet/incendiary/a762x39 - custom_materials = AMMO_MATS_TEMP - advanced_print_req = TRUE - -/obj/projectile/bullet/incendiary/a762x39 - name = "5.6mm incendiary bullet" - damage = 30 - wound_bonus = 25 - armour_penetration = 30 - wound_falloff_tile = -5 - fire_stacks = 2 - leaves_fire_trail = FALSE - -/obj/item/ammo_casing/realistic/a762x39/ap - name = "5.6x40mm armor-piercing bullet casing" - desc = "A 5.6x40mm armor-piercing bullet casing." - special_desc = "ARMOR PIERCING: Increased armor piercing capabilities. What did you expect?" - projectile_type = /obj/projectile/bullet/a762x39 - custom_materials = AMMO_MATS_AP - advanced_print_req = TRUE - -/obj/projectile/bullet/a762x39/ap - name = "5.6mm armor-piercing bullet" - damage = 30 - wound_bonus = 15 - armour_penetration = 60 - -/obj/item/ammo_casing/realistic/a762x39/emp - name = "5.6x40mm ion bullet casing" - desc = "A 5.6x40mm ion bullet casing." - special_desc = "EMP: Produces an Electro-Magnetic Pulse on impact, damaging electronics severely." - custom_materials = AMMO_MATS_EMP - projectile_type = /obj/projectile/bullet/a762x39/emp - -/obj/projectile/bullet/a762x39/emp - name = "5.6mm ion bullet" - damage = 25 - wound_bonus = 15 - armour_penetration = 15 - var/heavy_emp_radius = -1 - var/light_emp_radius = 0 - -/obj/projectile/bullet/a762x39/emp/on_hit(atom/target, blocked = 0, pierce_hit) - ..() - empulse(target, heavy_emp_radius, light_emp_radius) - return BULLET_ACT_HIT - -/obj/item/ammo_casing/realistic/a762x39/civilian - name = "5.6x40mm civilian bullet casing" - desc = "A 5.6x40mm civilian-grade surplus bullet casing." - special_desc = "CIVILIAN: Non-military ammunition with a low powder load. Performs worse in every aspect in comparison to its military variant." - projectile_type = /obj/projectile/bullet/a762x39/civilian - -/obj/projectile/bullet/a762x39/civilian - name = "5.6mm civilian bullet" - damage = 34 - wound_bonus = 15 - armour_penetration = 10 - wound_falloff_tile = 3 - -/obj/item/ammo_casing/realistic/a762x39/civilian/rubber - name = "5.6x40mm rubber bullet casing" - desc = "A 5.6x40mm civilian-grade rubber bullet casing." - special_desc = "RUBBER: Less than lethal ammo. Deals both stamina and brute damage." - projectile_type = /obj/projectile/bullet/a762x39/rubber - harmful = FALSE - -/obj/projectile/bullet/a762x39/rubber - name = "5.6mm rubber bullet" - damage = 15 - armour_penetration = 10 - stamina = 45 - ricochets_max = 6 - ricochet_incidence_leeway = 0 - ricochet_chance = 130 - ricochet_decay_damage = 0.7 - shrapnel_type = null - sharpness = NONE - embedding = null - wound_bonus = -50 - -/obj/item/ammo_casing/realistic/a762x39/civilian/hunting - name = "5.6x40mm hunting bullet casing" - desc = "A 5.6x40mm jacketed soft point bullet casing." - special_desc = "HUNTING: Ammo purpose-built to deal more damage against simplemobs than other humans." - projectile_type = /obj/projectile/bullet/a762x39/hunting - -/obj/projectile/bullet/a762x39/hunting - name = "5.6mm hunting bullet" - damage = 20 - wound_bonus = 10 - armour_penetration = 0 - wound_falloff_tile = 3 - /// Bonus force dealt against certain mobs - var/nemesis_bonus_force = 30 - /// List (not really a list) of mobs we deal bonus damage to - var/list/nemesis_path = /mob/living/simple_animal - -/obj/projectile/bullet/a762x39/hunting/prehit_pierce(mob/living/target, mob/living/carbon/human/user) - if(istype(target, nemesis_path)) - damage += nemesis_bonus_force - .=..() - -/obj/item/ammo_casing/realistic/a762x39/civilian/blank - name = "5.6x40mm blank bullet casing" - desc = "A 5.6x40mm blank bullet casing." - special_desc = "BLANK: Projectile-less ammunition that is usually employed in training exercises or Live-Action Roleplay. Potentially harmful." - projectile_type = /obj/projectile/bullet/a762x39/blank - ///"Potentially." - harmful = FALSE - -/obj/projectile/bullet/a762x39/blank - name = "hot gas" - icon = 'icons/obj/weapons/guns/projectiles_muzzle.dmi' - icon_state = "muzzle_bullet" - damage = 5 - damage_type = BURN - wound_bonus = -100 - armour_penetration = 0 - wound_falloff_tile = 15 - weak_against_armour = TRUE - range = 0.01 - shrapnel_type = null - sharpness = NONE - embedding = null diff --git a/modular_skyrat/modules/gunsgalore/code/guns/akm.dm b/modular_skyrat/modules/gunsgalore/code/guns/akm.dm deleted file mode 100644 index 5de5eebe72d9ac..00000000000000 --- a/modular_skyrat/modules/gunsgalore/code/guns/akm.dm +++ /dev/null @@ -1,111 +0,0 @@ -/obj/item/gun/ballistic/automatic/akm - name = "\improper Krinkov carbine" - desc = "A timeless human design of a carbine chambered in the NRI's 5.6mm ammo. A weapon so simple that even a child could use it - and they often did." - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_guns40x32.dmi' - icon_state = "akm" - lefthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_righthand.dmi' - inhand_icon_state = "akm" - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - w_class = WEIGHT_CLASS_BULKY - weapon_weight = WEAPON_HEAVY - accepted_magazine_type = /obj/item/ammo_box/magazine/akm - can_suppress = FALSE - fire_delay = 2 - actions_types = list() - worn_icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_back.dmi' - worn_icon_state = "akm" - fire_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/akm_fire.ogg' - rack_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_cock.ogg' - load_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_magin.ogg' - load_empty_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_magin.ogg' - eject_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_magout.ogg' - alt_icons = TRUE - -/obj/item/gun/ballistic/automatic/akm/Initialize(mapload) - . = ..() - - AddComponent(/datum/component/automatic_fire, fire_delay) - -/obj/item/gun/ballistic/automatic/akm/give_manufacturer_examine() - AddElement(/datum/element/manufacturer_examine, COMPANY_IZHEVSK) - -/obj/item/ammo_box/magazine/akm - name = "\improper Krinkov magazine" - desc = "a banana-shaped double-stack magazine able to hold 30 rounds of 5.6mm ammo. It's said that in the early days of SolFed's spread, Spanish colony rebels often referred to these as 'Goat Horns'." - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_items.dmi' - icon_state = "akm" - ammo_type = /obj/item/ammo_casing/realistic/a762x39 - caliber = "a762x39" - max_ammo = 30 - multiple_sprites = AMMO_BOX_FULL_EMPTY - -/obj/item/ammo_box/magazine/akm/ricochet - name = "krinkov magazine (MATCH)" - desc = "a banana-shaped double-stack magazine able to hold 30 rounds of 5.6mm ammo. It's said that in the early days of SolFed's spread, Spanish colony rebels often referred to these as 'Goat Horns'. Contains highly ricocheting ammunition." - icon_state = "akm_ricochet" - ammo_type = /obj/item/ammo_casing/realistic/a762x39/ricochet - -/obj/item/ammo_box/magazine/akm/fire - name = "krinkov magazine (INCENDIARY)" - desc = "a banana-shaped double-stack magazine able to hold 30 rounds of 5.6mm ammo. It's said that in the early days of SolFed's spread, Spanish colony rebels often referred to these as 'Goat Horns'. Contains incendiary ammunition." - icon_state = "akm_fire" - ammo_type = /obj/item/ammo_casing/realistic/a762x39/fire - -/obj/item/ammo_box/magazine/akm/ap - name = "krinkov magazine (ARMOR PIERCING)" - desc = "a banana-shaped double-stack magazine able to hold 30 rounds of 5.6mm ammo. It's said that in the early days of SolFed's spread, Spanish colony rebels often referred to these as 'Goat Horns'. Contains armor-piercing ammunition." - icon_state = "akm_ap" - ammo_type = /obj/item/ammo_casing/realistic/a762x39/ap - -/obj/item/ammo_box/magazine/akm/emp - name = "krinkov magazine (EMP)" - desc = "a banana-shaped double-stack magazine able to hold 30 rounds of 5.6mm ammo. It's said that in the early days of SolFed's spread, Spanish colony rebels often referred to these as 'Goat Horns'. Contains ion ammunition, good for disrupting electronics and wrecking mechas." - icon_state = "akm_emp" - ammo_type = /obj/item/ammo_casing/realistic/a762x39/emp - -/obj/item/ammo_box/magazine/akm/rubber - name = "krinkov magazine (RUBBER)" - desc = "a banana-shaped double-stack magazine able to hold 30 rounds of 5.6mm ammo. It's said that in the early days of SolFed's spread, Spanish colony rebels often referred to these as 'Goat Horns'. Contains less-than-lethal rubber ammunition." - icon_state = "akm_rubber" - ammo_type = /obj/item/ammo_casing/realistic/a762x39/civilian/rubber - -/obj/item/ammo_box/magazine/akm/banana - name = "\improper Krinkov extended magazine" - desc = "a banana-shaped double-stack magazine able to hold 45 rounds of 5.6x40mm ammunition. It's meant to be used on a light machine gun, but it's just a longer Krinkov magazine." - max_ammo = 45 - -/obj/item/ammo_box/magazine/akm/civvie - name = "\improper Sabel magazine" - desc = "a shortened double-stack magazine able to hold 15 rounds of civilian-grade 5.6mm ammo." - icon_state = "akm_civ" - max_ammo = 15 - ammo_type = /obj/item/ammo_casing/realistic/a762x39/civilian - -/obj/item/gun/ballistic/automatic/akm/modern - name = "\improper Bubba's Krinkov" - desc = "A modified version of the most iconic human firearm ever made. Most of the original parts are gone in favor of aftermarket replacements." - icon_state = "akm_modern" - inhand_icon_state = "akm" - worn_icon_state = "akm" - fire_delay = 1 - -/obj/item/gun/ballistic/automatic/akm/civvie - name = "\improper Sabel-42 carbine" - desc = "A timeless human design of a carbine chambered in the NRI's 5.6mm ammo. The internal modifications made to the firearm in order to accommodate for non-military use made it incompatible with conventional munitions and gave it the inability to fire fully automatic. It's purpose-built to fire low-grade civilian ammo, anything stronger would obliterate the rifling and render the firearm useless." - icon_state = "akm_civ" - inhand_icon_state = "akm_civ" - accepted_magazine_type = /obj/item/ammo_box/magazine/akm/civvie - fire_delay = 5 - dual_wield_spread = 15 - spread = 5 - worn_icon_state = "akm_civ" - recoil = 0.2 - -/obj/item/gun/ballistic/automatic/akm/nri - name = "\improper KV-62 carbine" - desc = "A modified version of the most iconic human firearm ever made, re-engineered for better weight, handling, and accuracy, chambered in the NRI's 5.6mm ammo. 'НРИ - Оборонная Коллегия' is etched on the bolt." - icon_state = "akm_nri" - inhand_icon_state = "akm_nri" - worn_icon_state = "akm_nri" - can_suppress = TRUE diff --git a/modular_skyrat/modules/gunsgalore/code/guns/ballistic_master.dm b/modular_skyrat/modules/gunsgalore/code/guns/ballistic_master.dm deleted file mode 100644 index 76c441ae6de636..00000000000000 --- a/modular_skyrat/modules/gunsgalore/code/guns/ballistic_master.dm +++ /dev/null @@ -1,108 +0,0 @@ -/obj/item/gun/ballistic - /// Does this gun have mag and nomag on mob variance? - var/alt_icons = FALSE - /// What the icon state is for the on-back guns - var/alt_icon_state - /// How long it takes to reload a magazine. - var/reload_time = 2 SECONDS - /// if this gun has a penalty for reloading with an ammo_box type - var/box_reload_penalty = TRUE - /// reload penalty inflicted by using an ammo box instead of an individual cartridge, if not outright exchanging the magazine - var/box_reload_delay = CLICK_CD_MELEE - -/* -* hey there's like... no better place to put these overrides, sorry -* if there's other guns that use speedloader-likes or otherwise have a reason to -* probably not have a CLICK_CD_MELEE cooldown for reloading them with something else -* i guess add it here? only current example is revolvers -* you could maybe make a case for double-barrels? i'll leave that for discussion in the pr comments -*/ - -/obj/item/gun/ballistic/revolver - box_reload_delay = CLICK_CD_RAPID // honestly this is negligible because of the inherent delay of having to switch hands - -/obj/item/gun/ballistic/rifle/boltaction // slightly less negligible than a revolver, since this is mostly for fairly powerful but crew-accessible stuff like mosins - box_reload_delay = CLICK_CD_RANGE - -/obj/item/gun/ballistic/Initialize(mapload) - . = ..() - - if(alt_icons) - AddElement(/datum/element/update_icon_updates_onmob) - -/obj/item/gun/ballistic/update_overlays() - . = ..() - if(alt_icons) - if(!magazine) - if(alt_icon_state) - inhand_icon_state = "[alt_icon_state]_nomag" - worn_icon_state = "[alt_icon_state]_nomag" - else - inhand_icon_state = "[initial(icon_state)]_nomag" - worn_icon_state = "[initial(icon_state)]_nomag" - else - if(alt_icon_state) - inhand_icon_state = "[alt_icon_state]" - worn_icon_state = "[alt_icon_state]" - else - inhand_icon_state = "[initial(icon_state)]" - worn_icon_state = "[initial(icon_state)]" - -/obj/item/gun/ballistic/proc/handle_magazine(mob/user, obj/item/ammo_box/magazine/inserting_magazine) - if(magazine) // If we already have a magazine inserted, we're going to begin tactically reloading it. - if(reload_time && !HAS_TRAIT(user, TRAIT_INSTANT_RELOAD)) // Check if we have a reload time to tactical reloading, or if we have the instant reload trait. - to_chat(user, span_notice("You start to insert the magazine into [src]!")) - if(!do_after(user, reload_time, src, IGNORE_USER_LOC_CHANGE)) // We are allowed to move while reloading. - to_chat(user, span_danger("You fail to insert the magazine into [src]!")) - return TRUE - eject_magazine(user, FALSE, inserting_magazine) // We eject the magazine then insert the new one, while putting the old one in hands. - else - insert_magazine(user, inserting_magazine) // Otherwise, just insert it. - - return TRUE - -/// Reloading with ammo box can incur penalty with some guns -/obj/item/gun/ballistic/proc/handle_box_reload(mob/user, obj/item/ammo_box/ammobox, num_loaded) - var/box_load = FALSE // if you're reloading with an ammo box, inflicts a cooldown - if(istype(ammobox, /obj/item/ammo_box) && box_reload_penalty) - box_load = TRUE - user.changeNext_move(box_reload_delay) // cooldown to simulate having to fumble for another round - balloon_alert(user, "reload encumbered!") - to_chat(user, span_notice("You load [num_loaded] [cartridge_wording]\s into [src][box_load ? ", but it takes some extra effort" : ""].")) - -//CRATES - -//all that shit -/obj/structure/closet/crate/secure/weapon/ww2 - name = "ww2 weapons crate" - desc = "A secure weapons crate. Looks like it's from the old-era world war 2." - icon_state = "weaponcrate" - -/obj/structure/closet/crate/secure/weapon/ww2/PopulateContents() - . = ..() - new /obj/item/gun/ballistic/automatic/fg42(src) - new /obj/item/ammo_box/magazine/fg42(src) - new /obj/item/gun/ballistic/automatic/akm(src) - new /obj/item/ammo_box/magazine/akm(src) - new /obj/item/gun/ballistic/automatic/m16(src) - new /obj/item/ammo_box/magazine/m16/vintage(src) - new /obj/item/gun/ballistic/automatic/mg34(src) - new /obj/item/ammo_box/magazine/mg34(src) - new /obj/item/gun/ballistic/automatic/mp40(src) - new /obj/item/ammo_box/magazine/mp40(src) - new /obj/item/gun/ballistic/automatic/stg(src) - new /obj/item/ammo_box/magazine/stg(src) - new /obj/item/gun/ballistic/automatic/ppsh(src) - new /obj/item/ammo_box/magazine/ppsh(src) - new /obj/item/gun/ballistic/automatic/pps(src) - new /obj/item/ammo_box/magazine/pps(src) - new /obj/item/gun/ballistic/automatic/mg34/mg42(src) - new /obj/item/ammo_box/magazine/mg42(src) - new /obj/item/gun/ballistic/automatic/pistol/luger(src) - new /obj/item/ammo_box/magazine/m9mm(src) - -/obj/effect/temp_visual/dir_setting/firing_effect - light_system = MOVABLE_LIGHT - light_range = 2 - light_power = 1 - light_color = LIGHT_COLOR_FIRE diff --git a/modular_skyrat/modules/gunsgalore/code/guns/energy.dm b/modular_skyrat/modules/gunsgalore/code/guns/energy.dm deleted file mode 100644 index 39e70ae6f964c3..00000000000000 --- a/modular_skyrat/modules/gunsgalore/code/guns/energy.dm +++ /dev/null @@ -1,7 +0,0 @@ -/obj/item/gun/energy/laser - name = "\improper Allstar SC-1 laser carbine" - desc = "An energy-based laser carbine that fires concentrated beams of light which pass through glass and thin metal." - -/obj/item/gun/energy/e_gun - name = "\improper Allstar SC-2 energy carbine" - desc = "A basic hybrid energy carbine with two settings: disable and kill." diff --git a/modular_skyrat/modules/gunsgalore/code/guns/fg42.dm b/modular_skyrat/modules/gunsgalore/code/guns/fg42.dm deleted file mode 100644 index 341508acce3ae8..00000000000000 --- a/modular_skyrat/modules/gunsgalore/code/guns/fg42.dm +++ /dev/null @@ -1,41 +0,0 @@ -/obj/item/gun/ballistic/automatic/fg42 - name = "\improper FGP-90" - desc = "A German paratrooper rifle designed to be used at long range chambered in 7.92x57mm. Most likely a reproduction of the original." - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_guns40x32.dmi' - icon_state = "fg42" - lefthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_righthand.dmi' - inhand_icon_state = "fg42" - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - w_class = WEIGHT_CLASS_BULKY - weapon_weight = WEAPON_HEAVY - accepted_magazine_type = /obj/item/ammo_box/magazine/fg42 - can_suppress = FALSE - burst_size = 2 - spread = 0 - fire_delay = 2 - worn_icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_back.dmi' - worn_icon_state = "fg42" - fire_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/fg42_fire.ogg' - alt_icons = TRUE - rack_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/batrifle_cock.ogg' - load_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/batrifle_magin.ogg' - load_empty_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/batrifle_magin.ogg' - eject_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/batrifle_magout.ogg' - eject_empty_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/batrifle_magout.ogg' - -/obj/item/gun/ballistic/automatic/fg42/Initialize(mapload) - . = ..() - - AddComponent(/datum/component/scope, range_modifier = 1) - - AddComponent(/datum/component/automatic_fire, fire_delay) - -/obj/item/ammo_box/magazine/fg42 - name = "fg42 magazine (7.92x57mm)" - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_items.dmi' - icon_state = "fg42" - ammo_type = /obj/item/ammo_casing/realistic/a792x57 - caliber = "a792x57" - max_ammo = 20 - multiple_sprites = AMMO_BOX_FULL_EMPTY diff --git a/modular_skyrat/modules/gunsgalore/code/guns/luger.dm b/modular_skyrat/modules/gunsgalore/code/guns/luger.dm deleted file mode 100644 index a35da82e9e7a72..00000000000000 --- a/modular_skyrat/modules/gunsgalore/code/guns/luger.dm +++ /dev/null @@ -1,16 +0,0 @@ -/obj/item/gun/ballistic/automatic/pistol/luger - name = "\improper Armadyne P-09X" - desc = "A small, light-weight reproduction of the Luger P08 from the 20th century, manufactured by the Oldarms division of the Armadyne Corporation. Chambered in 9x25mm." - icon_state = "luger" - inhand_icon_state = "luger" - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_guns.dmi' - lefthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_righthand.dmi' - fire_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/luger_fire.ogg' - load_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/luger_mag_insert.ogg' - load_empty_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/luger_mag_insert.ogg' - eject_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/luger_mag_release.ogg' - eject_empty_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/luger_mag_release.ogg' - rack_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/luger_rack.ogg' - fire_sound_volume = 100 - suppressor_x_offset = 14 diff --git a/modular_skyrat/modules/gunsgalore/code/guns/m16.dm b/modular_skyrat/modules/gunsgalore/code/guns/m16.dm deleted file mode 100644 index 9251c7aee70bdc..00000000000000 --- a/modular_skyrat/modules/gunsgalore/code/guns/m16.dm +++ /dev/null @@ -1,75 +0,0 @@ -/obj/item/gun/ballistic/automatic/m16 - name = "\improper XM-2537 rifle" - desc = "A relatively new infantry rifle chambered for the .277 Aestus round, designed for use by private security and freight crews. \"Armentarium Centrale\" is printed on the side of the receiver, right next to a yellow sun." - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_guns40x32.dmi' - icon_state = "m16" - lefthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_righthand.dmi' - inhand_icon_state = "m16" - worn_icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_back.dmi' - worn_icon_state = "m16" - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - w_class = WEIGHT_CLASS_BULKY - weapon_weight = WEAPON_HEAVY - accepted_magazine_type = /obj/item/ammo_box/magazine/m16 - can_suppress = FALSE - burst_size = 3 - fire_delay = 2 - fire_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/m16_fire.ogg' - fire_sound_volume = 50 - rack_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/sfrifle_cock.ogg' - load_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/sfrifle_magin.ogg' - load_empty_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/sfrifle_magin.ogg' - eject_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/sfrifle_magout.ogg' - alt_icons = TRUE - -/obj/item/ammo_box/magazine/m16 - name = "\improper XM-2537 magazine" - desc = "A double-stack translucent polymer magazine for use with the XM-2537 rifles. Holds 30 rounds of .277 Aestus." - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_items.dmi' - icon_state = "m16e" - ammo_type = /obj/item/ammo_casing/a223 - caliber = CALIBER_A223 - max_ammo = 30 - multiple_sprites = AMMO_BOX_FULL_EMPTY - -/obj/item/ammo_box/magazine/m16/vintage - name = "outdated .277 magazine" - desc = "A double-stack solid magazine that looks rather dated. Holds 20 rounds of .277 Aestus." - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_items.dmi' - icon_state = "m16" - max_ammo = 20 - multiple_sprites = AMMO_BOX_FULL_EMPTY - -/obj/item/gun/ballistic/automatic/m16/modern - name = "\improper XM-2537 SOPMOD rifle" - desc = "A heavily tweaked carbine version of the XM-2537 rifle made for tactically operating in tactical environments. This doesn't smell \"authentic military hardware\" to you." - icon_state = "m16_modern" - inhand_icon_state = "m16" - worn_icon_state = "m16" - spread = 0.5 - burst_size = 3 - fire_delay = 1.90 - -/obj/item/gun/ballistic/automatic/m16/modern/Initialize(mapload) - . = ..() - - AddComponent(/datum/component/automatic_fire, fire_delay) - -/obj/item/gun/ballistic/automatic/m16/modern/v2 - name = "\improper XM-2537 'Amans Patriae' rifle" - desc = "An expertly modified, super-compact XM-2537 rifle designed for operating in tight corridors and fields full of Bethlehem flowers. You're a soldier, finish your mission!" - icon_state = "m16_modern2" - inhand_icon_state = "m16" - worn_icon_state = "m16" - accepted_magazine_type = /obj/item/ammo_box/magazine/m16/patriot - burst_size = 4 - fire_delay = 0.5 - -/obj/item/ammo_box/magazine/m16/patriot - name = "\improper XM-2537 drum magazine" - desc = "A double-stack solid polymer drum made for use with the Amans Patriae rifle. Holds 50 rounds of .277 ammo." - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_items.dmi' - icon_state = "m16" - max_ammo = 50 - multiple_sprites = AMMO_BOX_FULL_EMPTY diff --git a/modular_skyrat/modules/gunsgalore/code/guns/mg34.dm b/modular_skyrat/modules/gunsgalore/code/guns/mg34.dm deleted file mode 100644 index 3b876fea7c9c47..00000000000000 --- a/modular_skyrat/modules/gunsgalore/code/guns/mg34.dm +++ /dev/null @@ -1,214 +0,0 @@ -/obj/item/gun/ballistic/automatic/mg34 - name = "\improper MG-4T" - desc = "A reproduction of the German MG-34 general purpose machine gun, this one is a revision from the 2200's and was one of several thousand distributed to SolFed expedition teams. It has been rechambered to fire 7.92mm Mauser instead of 7.62mm NATO." - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_guns40x32.dmi' - lefthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_righthand.dmi' - worn_icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_back.dmi' - icon_state = "mg34" - base_icon_state = "mg34" - worn_icon_state = "mg34" - inhand_icon_state = "mg34" - fire_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/mg34_fire.ogg' - rack_sound = 'sound/weapons/gun/l6/l6_rack.ogg' - suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg' - fire_sound_volume = 70 - weapon_weight = WEAPON_HEAVY - slot_flags = ITEM_SLOT_BACK - w_class = WEIGHT_CLASS_HUGE - spread = 15 - accepted_magazine_type = /obj/item/ammo_box/magazine/mg34 - can_suppress = FALSE - fire_delay = 1 - bolt_type = BOLT_TYPE_OPEN - show_bolt_icon = FALSE - tac_reloads = FALSE - var/cover_open = FALSE - -/obj/item/gun/ballistic/automatic/mg34/Initialize(mapload) - . = ..() - - AddComponent(/datum/component/automatic_fire, fire_delay) - - AddElement(/datum/element/update_icon_updates_onmob) - -/obj/item/gun/ballistic/automatic/mg34/examine(mob/user) - . = ..() - . += "<b>RMB with an empty hand</b> to [cover_open ? "close" : "open"] the dust cover." - if(cover_open && magazine) - . += span_notice("It seems like you could use an <b>empty hand</b> to remove the magazine.") - -/obj/item/gun/ballistic/automatic/mg34/attack_hand_secondary(mob/user, list/modifiers) - if(!user.can_perform_action(src)) - return - cover_open = !cover_open - to_chat(user, span_notice("You [cover_open ? "open" : "close"] [src]'s cover.")) - playsound(src, 'sound/weapons/gun/l6/l6_door.ogg', 60, TRUE) - update_appearance() - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - -/obj/item/gun/ballistic/automatic/mg34/update_overlays() - . = ..() - . += "[base_icon_state]_door_[cover_open ? "open" : "closed"]" - -/obj/item/gun/ballistic/automatic/mg34/can_shoot() - if(cover_open) - balloon_alert_to_viewers("cover open!") - return FALSE - return chambered - -/obj/item/gun/ballistic/automatic/mg34/eject_magazine(mob/user, display_message = TRUE, obj/item/ammo_box/magazine/tac_load = null) - if(!cover_open) - to_chat(user, span_warning("The cover is closed! Open it before ejecting the magazine!")) - return - return ..() - -/obj/item/gun/ballistic/automatic/mg34/attackby(obj/item/A, mob/user, params) - if(!cover_open && istype(A, accepted_magazine_type)) - to_chat(user, span_warning("[src]'s dust cover prevents a magazine from being fit.")) - return - ..() - -/obj/item/ammo_box/magazine/mg34 - name = "mg34 drum (7.92x57mm)" - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_items.dmi' - icon_state = "mg34_drum" - ammo_type = /obj/item/ammo_casing/realistic/a792x57 - caliber = "a792x57" - max_ammo = 75 - multiple_sprites = AMMO_BOX_FULL_EMPTY - -/obj/item/gun/ballistic/automatic/mg34/packapunch //INFINITY GUNNNNNNNN - name = "\improper MG-34 UBER" - desc = "Here, there, seems like everywhere. Nasty things are happening, now everyone is scared. Old Jeb Brown the Blacksmith, he saw his mother die. A critter took a bite from her and now she's in the sky. " - fire_delay = 0.04 - burst_size = 5 - spread = 5 - accepted_magazine_type = /obj/item/ammo_box/magazine/mg34/packapunch - -/obj/item/ammo_box/magazine/mg34/packapunch - max_ammo = 999 - multiple_sprites = AMMO_BOX_ONE_SPRITE - -/obj/item/gun/ballistic/automatic/mg34/packapunch/process_chamber(empty_chamber, from_firing, chamber_next_round) - . = ..() - magazine.top_off() - -/// BIGGER BROTHER -#define SPREAD_UNDEPLOYED 17 -#define SPREAD_DEPLOYED 6 -#define HEAT_PER_SHOT 1.5 -#define TIME_TO_COOLDOWN (20 SECONDS) -#define BARREL_COOLDOWN_RATE 2 - -/obj/item/gun/ballistic/automatic/mg34/mg42 - name = "\improper MG-9V GPMG" - desc = "An updated version of the German Maschinengewehr 42 machine gun chambered in 7.92 Mauser, it has a bipod for better stability when deployed. It is a reproduction manufactured by the Oldarms division of the Armadyne Corporation." - icon_state = "mg42" - base_icon_state = "mg42" - worn_icon_state = "mg42" - inhand_icon_state = "mg42" - fire_sound_volume = 100 - fire_delay = 0.5 - fire_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/mg42_fire.ogg' - accepted_magazine_type = /obj/item/ammo_box/magazine/mg42 - spread = SPREAD_UNDEPLOYED - /// If we are resting, the bipod is deployed. - var/bipod_deployed = FALSE - /// How hot the barrel is, 0 - 100 - var/barrel_heat = 0 - /// Have we overheated? - var/overheated = FALSE - -/obj/item/gun/ballistic/automatic/mg34/mg42/Initialize(mapload) - . = ..() - RegisterSignal(src, COMSIG_GUN_FIRED, PROC_REF(process_heat)) - START_PROCESSING(SSobj, src) - -/obj/item/gun/ballistic/automatic/mg34/mg42/process(seconds_per_tick) - if(barrel_heat > 0) - barrel_heat -= BARREL_COOLDOWN_RATE * seconds_per_tick - update_appearance() - -/obj/item/gun/ballistic/automatic/mg34/mg42/examine(mob/user) - . = ..() - switch(barrel_heat) - if(50 to 75) - . += span_warning("The barrel looks hot.") - if(75 to INFINITY) - . += span_warning("The barrel looks moulten!") - if(overheated) - . += span_danger("It is heatlocked!") - -/obj/item/gun/ballistic/automatic/mg34/mg42/can_shoot() - if(cover_open) - balloon_alert_to_viewers("cover open!") - return FALSE - if(overheated) - balloon_alert_to_viewers("overheated!") - shoot_with_empty_chamber() - return FALSE - return chambered - -/obj/item/gun/ballistic/automatic/mg34/mg42/pickup(mob/user) - . = ..() - RegisterSignal(user, COMSIG_LIVING_UPDATED_RESTING, PROC_REF(deploy_bipod)) - -/obj/item/gun/ballistic/automatic/mg34/mg42/dropped(mob/user) - . = ..() - UnregisterSignal(user, COMSIG_LIVING_UPDATED_RESTING) - bipod_deployed = FALSE - spread = SPREAD_UNDEPLOYED - update_appearance() - -/obj/item/gun/ballistic/automatic/mg34/mg42/proc/deploy_bipod(datum/datum_source, resting) - SIGNAL_HANDLER - if(resting) - bipod_deployed = TRUE - spread = SPREAD_DEPLOYED - else - bipod_deployed = FALSE - spread = SPREAD_UNDEPLOYED - playsound(src, 'modular_skyrat/modules/gunsgalore/sound/guns/fire/mg42_bipod.ogg', 100) - balloon_alert_to_viewers("bipod [bipod_deployed ? "deployed" : "undeployed"]!") - update_appearance() - -/obj/item/gun/ballistic/automatic/mg34/mg42/proc/process_heat() - SIGNAL_HANDLER - if(overheated) - return - barrel_heat += HEAT_PER_SHOT - if(barrel_heat >= 100) - overheated = TRUE - playsound(src, 'modular_skyrat/modules/gunsgalore/sound/guns/fire/mg_overheat.ogg', 100) - addtimer(CALLBACK(src, PROC_REF(reset_overheat)), TIME_TO_COOLDOWN) - update_appearance() - -/obj/item/gun/ballistic/automatic/mg34/mg42/proc/reset_overheat() - overheated = FALSE - update_appearance() - -/obj/item/gun/ballistic/automatic/mg34/mg42/update_overlays() - . = ..() - . += "[base_icon_state]_[bipod_deployed ? "bipod_deployed" : "bipod"]" - - switch(barrel_heat) - if(50 to 75) - . += "[base_icon_state]_barrel_hot" - if(75 to INFINITY) - . += "[base_icon_state]_barrel_overheat" - -#undef SPREAD_UNDEPLOYED -#undef SPREAD_DEPLOYED -#undef HEAT_PER_SHOT -#undef TIME_TO_COOLDOWN -#undef BARREL_COOLDOWN_RATE - -/obj/item/ammo_box/magazine/mg42 - name = "mg42 drum (7.92x57mm)" - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_items.dmi' - icon_state = "mg42_drum" - ammo_type = /obj/item/ammo_casing/realistic/a792x57 - caliber = "a792x57" - max_ammo = 150 // It's a lot, but the gun overheats. - multiple_sprites = AMMO_BOX_FULL_EMPTY diff --git a/modular_skyrat/modules/gunsgalore/code/guns/mp40.dm b/modular_skyrat/modules/gunsgalore/code/guns/mp40.dm deleted file mode 100644 index 7f098b230f4867..00000000000000 --- a/modular_skyrat/modules/gunsgalore/code/guns/mp40.dm +++ /dev/null @@ -1,45 +0,0 @@ -/obj/item/gun/ballistic/automatic/mp40 - name = "\improper MP-40" - desc = "The instantly recognizable 'kraut gun'. Extremely outdated SMG that has only seen service during Sol-3's second World War. This one's a poor, unlicensed reproduction." - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_guns40x32.dmi' - icon_state = "mp40" - lefthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_righthand.dmi' - inhand_icon_state = "mp40" - worn_icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_back.dmi' - worn_icon_state = "mp40" - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - accepted_magazine_type = /obj/item/ammo_box/magazine/mp40 - can_suppress = FALSE - burst_size = 1 - fire_delay = 1.7 - fire_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/mp40_fire.ogg' - fire_sound_volume = 100 - rack_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_cock.ogg' - load_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_magin.ogg' - load_empty_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_magin.ogg' - eject_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_magout.ogg' - alt_icons = TRUE - -/obj/item/gun/ballistic/automatic/mp40/Initialize(mapload) - . = ..() - - AddComponent(/datum/component/automatic_fire, fire_delay) - -/obj/item/ammo_box/magazine/mp40 - name = "mp40 magazine (9mmx19)" - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_items.dmi' - icon_state = "mp40" - ammo_type = /obj/item/ammo_casing/c9mm - caliber = CALIBER_9MM - max_ammo = 32 - multiple_sprites = AMMO_BOX_FULL_EMPTY - -/obj/item/gun/ballistic/automatic/mp40/modern - name = "\improper MP-40k" - desc = "An extremely outdated German SMG that has been modified extensively with aftermarket parts. It looks like it came straight out of the videogame Return to Fortress Dogenstein." - icon_state = "mp40_modern" - inhand_icon_state = "mp40" - worn_icon_state = "mp40" - burst_size = 4 - fire_delay = 1.5 diff --git a/modular_skyrat/modules/gunsgalore/code/guns/p90.dm b/modular_skyrat/modules/gunsgalore/code/guns/p90.dm deleted file mode 100644 index 311a78776ce785..00000000000000 --- a/modular_skyrat/modules/gunsgalore/code/guns/p90.dm +++ /dev/null @@ -1,35 +0,0 @@ -/obj/item/gun/ballistic/automatic/p90 - name = "\improper P90-02" - desc = "A compact, top-loaded bullpup PDW chambered in .32 ammo." - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_guns40x32.dmi' - icon_state = "p90" - lefthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_righthand.dmi' - inhand_icon_state = "p90" - worn_icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_back.dmi' - worn_icon_state = "p90" - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - accepted_magazine_type = /obj/item/ammo_box/magazine/p90 - can_suppress = FALSE - fire_delay = 1 - fire_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/p90_fire.ogg' - fire_sound_volume = 100 - rack_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/p90_cock.ogg' - load_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/p90_magin.ogg' - load_empty_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/p90_magin.ogg' - eject_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/p90_magout.ogg' - alt_icons = TRUE - -/obj/item/gun/ballistic/automatic/p90/Initialize(mapload) - . = ..() - - AddComponent(/datum/component/automatic_fire, fire_delay) - -/obj/item/ammo_box/magazine/p90 - name = "\improper P90-02 magazine" - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_items.dmi' - icon_state = "p90" - ammo_type = /obj/item/ammo_casing/c34 - caliber = "c34acp" - max_ammo = 50 - multiple_sprites = AMMO_BOX_FULL_EMPTY diff --git a/modular_skyrat/modules/gunsgalore/code/guns/pps.dm b/modular_skyrat/modules/gunsgalore/code/guns/pps.dm deleted file mode 100644 index 16767f45df35f9..00000000000000 --- a/modular_skyrat/modules/gunsgalore/code/guns/pps.dm +++ /dev/null @@ -1,35 +0,0 @@ -/obj/item/gun/ballistic/automatic/pps - name = "\improper PPS-43" - desc = "A very cheap, barely reliable reproduction of a personal defense weapon based on the original Soviet model. Not nearly as infamous as the Mosin." - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_guns40x32.dmi' - icon_state = "pps" - lefthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_righthand.dmi' - inhand_icon_state = "pps" - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - accepted_magazine_type = /obj/item/ammo_box/magazine/pps - can_suppress = FALSE - fire_delay = 3 - worn_icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_back.dmi' - worn_icon_state = "pps" - fire_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/pps_fire.ogg' - fire_sound_volume = 100 - alt_icons = TRUE - rack_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_cock.ogg' - load_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_magin.ogg' - load_empty_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_magin.ogg' - eject_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_magout.ogg' - -/obj/item/gun/ballistic/automatic/pps/Initialize(mapload) - . = ..() - - AddComponent(/datum/component/automatic_fire, fire_delay) - -/obj/item/ammo_box/magazine/pps - name = "pps magazine (7.62x25mm)" - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_items.dmi' - icon_state = "pps" - ammo_type = /obj/item/ammo_casing/realistic/a762x25 - caliber = "a762x25" - max_ammo = 35 - multiple_sprites = AMMO_BOX_FULL_EMPTY diff --git a/modular_skyrat/modules/gunsgalore/code/guns/ppsh.dm b/modular_skyrat/modules/gunsgalore/code/guns/ppsh.dm deleted file mode 100644 index 26baa5711664b6..00000000000000 --- a/modular_skyrat/modules/gunsgalore/code/guns/ppsh.dm +++ /dev/null @@ -1,46 +0,0 @@ -/obj/item/gun/ballistic/automatic/ppsh - name = "\improper Asha 76" - desc = "A reproduction of a simple Soviet SMG chambered in 7.62x25 Tokarev rounds. Its heavy wooden stock and leather breech buffer help absorb the bolt’s heavy recoil, making it great for spraying and praying. Uraaaa!" - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_guns40x32.dmi' - icon_state = "ppsh" - lefthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_righthand.dmi' - inhand_icon_state = "ppsh" - worn_icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_back.dmi' - worn_icon_state = "ppsh" - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - w_class = WEIGHT_CLASS_BULKY - accepted_magazine_type = /obj/item/ammo_box/magazine/ppsh - can_suppress = FALSE - spread = 20 - fire_delay = 0.5 - fire_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/ppsh_fire.ogg' - fire_sound_volume = 80 - alt_icons = TRUE - rack_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_cock.ogg' - load_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_magin.ogg' - load_empty_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_magin.ogg' - eject_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_magout.ogg' - -/obj/item/gun/ballistic/automatic/ppsh/Initialize(mapload) - . = ..() - - AddComponent(/datum/component/automatic_fire, fire_delay) - -/obj/item/ammo_box/magazine/ppsh - name = "Asha 76 magazine (7.62x25mm)" - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_items.dmi' - icon_state = "ppsh" - ammo_type = /obj/item/ammo_casing/realistic/a762x25 - caliber = "a762x25" - max_ammo = 71 - multiple_sprites = AMMO_BOX_FULL_EMPTY - -/obj/item/gun/ballistic/automatic/ppsh/modern - name = "\improper PPsh-59" - desc = "A modernized reproduction of a simple Soviet SMG with aftermarket parts. Its heavy synthetic stock and composite breech buffer help absorb the bolt’s heavy recoil, a mix of two worlds that should not exist." - icon_state = "ppsh_modern" - worn_icon_state = "ppsh" - inhand_icon_state = "ppsh" - spread = 15 - burst_size = 5 diff --git a/modular_skyrat/modules/gunsgalore/code/guns/scar.dm b/modular_skyrat/modules/gunsgalore/code/guns/scar.dm deleted file mode 100644 index 0fe3204a406d89..00000000000000 --- a/modular_skyrat/modules/gunsgalore/code/guns/scar.dm +++ /dev/null @@ -1,28 +0,0 @@ -/obj/item/gun/ballistic/automatic/scar - name = "SCAR-L" - desc = "Part of the SCAR family rifles. This one is SCAR-L, which is for 'Light'. Chambered in .277 Aestus." - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_guns40x32.dmi' - icon_state = "scar" - lefthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_righthand.dmi' - inhand_icon_state = "scar" - worn_icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_back.dmi' - worn_icon_state = "scar" - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - w_class = WEIGHT_CLASS_BULKY - weapon_weight = WEAPON_HEAVY - accepted_magazine_type = /obj/item/ammo_box/magazine/m16 - can_suppress = FALSE - fire_delay = 1.90 - fire_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/scar_fire.ogg' - fire_sound_volume = 50 - rack_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/scar_cock.ogg' - load_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/scar_mag_out.ogg' - load_empty_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/scar_mag_in.ogg' - eject_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/scar_mag_out.ogg' - alt_icons = TRUE - -/obj/item/gun/ballistic/automatic/scar/Initialize(mapload) - . = ..() - - AddComponent(/datum/component/automatic_fire, fire_delay) diff --git a/modular_skyrat/modules/gunsgalore/code/guns/skillchip.dm b/modular_skyrat/modules/gunsgalore/code/guns/skillchip.dm deleted file mode 100644 index 542114b5c3c0da..00000000000000 --- a/modular_skyrat/modules/gunsgalore/code/guns/skillchip.dm +++ /dev/null @@ -1,9 +0,0 @@ -/obj/item/skillchip/chameleon/reload - name = "T.A.C.T.I.C00L skillchip" - desc = "If used, allows the user to perform tactical and instant reloads on all weapons with a magazine." - auto_traits = list(TRAIT_INSTANT_RELOAD) - skill_name = "Tactical Reloading" - skill_description = "Fine tune motor skills when performing reloads on weapons to reduce time taken." - skill_icon = "sitemap" - activate_message = span_notice("You suddenly learn the art of tactical reloading.") - deactivate_message = span_danger("You suddenly lose the ability to tactically reload.") diff --git a/modular_skyrat/modules/gunsgalore/code/guns/stg.dm b/modular_skyrat/modules/gunsgalore/code/guns/stg.dm deleted file mode 100644 index d4fe1c9381fb8a..00000000000000 --- a/modular_skyrat/modules/gunsgalore/code/guns/stg.dm +++ /dev/null @@ -1,40 +0,0 @@ -/obj/item/gun/ballistic/automatic/stg - name = "\improper StG-99" - desc = "A reproduction of the Sturmgewehr 44 German infantry rifle chambered in 7.92mm, manufactured by the Oldarms division of the Armadyne Corporation." - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_guns40x32.dmi' - icon_state = "stg" - lefthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_righthand.dmi' - inhand_icon_state = "stg" - worn_icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_back.dmi' - worn_icon_state = "stg" - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - w_class = WEIGHT_CLASS_BULKY - weapon_weight = WEAPON_HEAVY - accepted_magazine_type = /obj/item/ammo_box/magazine/stg - can_suppress = FALSE - fire_delay = 1.5 - burst_size = 1 - actions_types = list() - fire_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/stg_fire.ogg' - fire_sound_volume = 70 - alt_icons = TRUE - rack_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_cock.ogg' - load_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_magin.ogg' - load_empty_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_magin.ogg' - eject_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_magout.ogg' - -/obj/item/gun/ballistic/automatic/stg/Initialize(mapload) - . = ..() - - AddComponent(/datum/component/automatic_fire, fire_delay) - -/obj/item/ammo_box/magazine/stg - name = "stg magazine (7.92x33mm)" - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_items.dmi' - icon_state = "stg" - ammo_type = /obj/item/ammo_casing/realistic/a792x33 - caliber = "a792x33" - max_ammo = 30 - multiple_sprites = AMMO_BOX_FULL_EMPTY - diff --git a/modular_skyrat/modules/gunsgalore/icons/ammo/ammo.dmi b/modular_skyrat/modules/gunsgalore/icons/ammo/ammo.dmi deleted file mode 100644 index 7f5ee6b152cc7b..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/icons/ammo/ammo.dmi and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_back.dmi b/modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_back.dmi deleted file mode 100644 index 0d93f721d9f5be..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_back.dmi and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_guns.dmi b/modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_guns.dmi deleted file mode 100644 index a00638662af48c..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_guns.dmi and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_guns40x32.dmi b/modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_guns40x32.dmi deleted file mode 100644 index 677cb731e65a68..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_guns40x32.dmi and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_items.dmi b/modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_items.dmi deleted file mode 100644 index 86b67c1447aa6e..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_items.dmi and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_lefthand.dmi b/modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_lefthand.dmi deleted file mode 100644 index c7932027d92600..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_lefthand.dmi and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_righthand.dmi b/modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_righthand.dmi deleted file mode 100644 index a1268a27c88d64..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_righthand.dmi and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/fire/akm_fire.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/fire/akm_fire.ogg deleted file mode 100644 index 90568589a3e1f6..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/fire/akm_fire.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/fire/fg42_fire.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/fire/fg42_fire.ogg deleted file mode 100644 index 5308d2f8452564..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/fire/fg42_fire.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/fire/laser_cannon_charge.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/fire/laser_cannon_charge.ogg deleted file mode 100644 index 0b9abaa90e4b25..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/fire/laser_cannon_charge.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/fire/luger_fire.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/fire/luger_fire.ogg deleted file mode 100644 index 027e47873628a4..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/fire/luger_fire.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/fire/luger_mag_insert.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/fire/luger_mag_insert.ogg deleted file mode 100644 index 8aad113ce17326..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/fire/luger_mag_insert.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/fire/luger_mag_release.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/fire/luger_mag_release.ogg deleted file mode 100644 index cebd92106aaab6..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/fire/luger_mag_release.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/fire/luger_rack.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/fire/luger_rack.ogg deleted file mode 100644 index fb65dd1f9b3142..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/fire/luger_rack.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/fire/m16_fire.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/fire/m16_fire.ogg deleted file mode 100644 index ced451bd760b03..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/fire/m16_fire.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/fire/mg34_fire.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/fire/mg34_fire.ogg deleted file mode 100644 index 8c133e65971a85..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/fire/mg34_fire.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/fire/mg42_bipod.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/fire/mg42_bipod.ogg deleted file mode 100644 index de67f31d7ed65d..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/fire/mg42_bipod.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/fire/mg42_fire.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/fire/mg42_fire.ogg deleted file mode 100644 index 288fe255abefe0..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/fire/mg42_fire.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/fire/mg42_fire_overheat.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/fire/mg42_fire_overheat.ogg deleted file mode 100644 index 2a6e6e1367c292..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/fire/mg42_fire_overheat.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/fire/mg_overheat.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/fire/mg_overheat.ogg deleted file mode 100644 index 175adbf7a398ad..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/fire/mg_overheat.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/fire/mp40_fire.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/fire/mp40_fire.ogg deleted file mode 100644 index eed2d257c7e864..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/fire/mp40_fire.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/fire/mp5_empty.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/fire/mp5_empty.ogg deleted file mode 100644 index a82d05662ac509..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/fire/mp5_empty.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/fire/mp5_fire.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/fire/mp5_fire.ogg deleted file mode 100644 index 5fd73bf002a333..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/fire/mp5_fire.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/fire/mp5_fire_suppressed.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/fire/mp5_fire_suppressed.ogg deleted file mode 100644 index fee32d9b4022f6..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/fire/mp5_fire_suppressed.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/fire/p90_fire.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/fire/p90_fire.ogg deleted file mode 100644 index df57b8d6081d5b..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/fire/p90_fire.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/fire/pps_fire.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/fire/pps_fire.ogg deleted file mode 100644 index f1763af327a82e..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/fire/pps_fire.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/fire/ppsh_fire.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/fire/ppsh_fire.ogg deleted file mode 100644 index e119d187c868c3..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/fire/ppsh_fire.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/fire/scar_fire.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/fire/scar_fire.ogg deleted file mode 100644 index 103e6f55f1f28c..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/fire/scar_fire.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/fire/stg_fire.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/fire/stg_fire.ogg deleted file mode 100644 index 91e81f3b0a569e..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/fire/stg_fire.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/batrifle_cock.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/batrifle_cock.ogg deleted file mode 100644 index 09662285192b2e..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/batrifle_cock.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/batrifle_magin.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/batrifle_magin.ogg deleted file mode 100644 index 6e557b892a97d1..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/batrifle_magin.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/batrifle_magout.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/batrifle_magout.ogg deleted file mode 100644 index 591599f52334a7..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/batrifle_magout.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/bullet_insert.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/bullet_insert.ogg deleted file mode 100644 index d68b0a61a0efba..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/bullet_insert.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/bullet_insert2.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/bullet_insert2.ogg deleted file mode 100644 index 6417764475d4c8..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/bullet_insert2.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/hpistol_cock.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/hpistol_cock.ogg deleted file mode 100644 index 7b70346dd5b2f6..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/hpistol_cock.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/hpistol_magin.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/hpistol_magin.ogg deleted file mode 100644 index c74160fdb5d968..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/hpistol_magin.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/hpistol_magout.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/hpistol_magout.ogg deleted file mode 100644 index ddad68ed7d44ef..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/hpistol_magout.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/lmg_close.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/lmg_close.ogg deleted file mode 100644 index a93d39809eefe0..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/lmg_close.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/lmg_cock.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/lmg_cock.ogg deleted file mode 100644 index a3c7e311102e02..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/lmg_cock.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/lmg_magin.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/lmg_magin.ogg deleted file mode 100644 index 12a11584d5f975..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/lmg_magin.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/lmg_magout.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/lmg_magout.ogg deleted file mode 100644 index d5a70b20b2fafc..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/lmg_magout.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/lmg_open.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/lmg_open.ogg deleted file mode 100644 index 1a54501d7d0815..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/lmg_open.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_cock.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_cock.ogg deleted file mode 100644 index feaef289654307..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_cock.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_magin.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_magin.ogg deleted file mode 100644 index 2afb05fb81cfe4..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_magin.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_magout.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_magout.ogg deleted file mode 100644 index 3ddf2c83bf13a5..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_magout.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/mp5_boltback.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/mp5_boltback.ogg deleted file mode 100644 index b4e827e3077e04..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/mp5_boltback.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/mp5_boltforward.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/mp5_boltforward.ogg deleted file mode 100644 index 2c0d338e23d3cb..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/mp5_boltforward.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/mp5_cock.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/mp5_cock.ogg deleted file mode 100644 index 2032c6ff847cca..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/mp5_cock.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/mp5_magin.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/mp5_magin.ogg deleted file mode 100644 index fefc6444d1f46f..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/mp5_magin.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/mp5_magout.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/mp5_magout.ogg deleted file mode 100644 index 86be191e830e49..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/mp5_magout.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/p90_cock.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/p90_cock.ogg deleted file mode 100644 index 3a18bfafffbaa8..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/p90_cock.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/p90_magin.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/p90_magin.ogg deleted file mode 100644 index 4835ab152aadfa..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/p90_magin.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/p90_magout.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/p90_magout.ogg deleted file mode 100644 index 3030591e3e449d..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/p90_magout.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/pistol_cock.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/pistol_cock.ogg deleted file mode 100644 index ff2512af27a595..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/pistol_cock.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/pistol_magin.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/pistol_magin.ogg deleted file mode 100644 index 1127c741039db8..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/pistol_magin.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/pistol_magout.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/pistol_magout.ogg deleted file mode 100644 index c194ebf3433f83..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/pistol_magout.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/rev_cock.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/rev_cock.ogg deleted file mode 100644 index d1c4a189f1b3ba..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/rev_cock.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/rev_magin.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/rev_magin.ogg deleted file mode 100644 index 838974489a5f9a..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/rev_magin.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/rev_magout.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/rev_magout.ogg deleted file mode 100644 index 75412e787f1391..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/rev_magout.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/rifle_boltback.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/rifle_boltback.ogg deleted file mode 100644 index d7b1f368dbb169..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/rifle_boltback.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/rifle_boltforward.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/rifle_boltforward.ogg deleted file mode 100644 index 5bb57f7943a8b8..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/rifle_boltforward.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/rifle_load.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/rifle_load.ogg deleted file mode 100644 index 8309e26b6ddc42..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/rifle_load.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/scar_cock.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/scar_cock.ogg deleted file mode 100644 index 4c7d563c7ce95b..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/scar_cock.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/scar_mag_in.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/scar_mag_in.ogg deleted file mode 100644 index 742dae11eec24a..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/scar_mag_in.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/scar_mag_out.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/scar_mag_out.ogg deleted file mode 100644 index 789c672969ff00..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/scar_mag_out.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/selector.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/selector.ogg deleted file mode 100644 index 298181609e49e3..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/selector.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/sfrifle_cock.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/sfrifle_cock.ogg deleted file mode 100644 index d65cafce8b2899..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/sfrifle_cock.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/sfrifle_magin.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/sfrifle_magin.ogg deleted file mode 100644 index ebb1f6881be805..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/sfrifle_magin.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/sfrifle_magout.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/sfrifle_magout.ogg deleted file mode 100644 index 919b5ee19d6553..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/sfrifle_magout.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/shotgun_instert.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/shotgun_instert.ogg deleted file mode 100644 index cd5c5e31aa671f..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/shotgun_instert.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_cock.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_cock.ogg deleted file mode 100644 index 3f9fc0e76ed3cb..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_cock.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_magin.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_magin.ogg deleted file mode 100644 index 2bdb3c99e76935..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_magin.ogg and /dev/null differ diff --git a/modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_magout.ogg b/modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_magout.ogg deleted file mode 100644 index d85ff5a40cae72..00000000000000 Binary files a/modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_magout.ogg and /dev/null differ diff --git a/modular_skyrat/modules/holdingfashion_port/code/backpack.dm b/modular_skyrat/modules/holdingfashion_port/code/backpack.dm deleted file mode 100644 index 20cecd2fc39ffc..00000000000000 --- a/modular_skyrat/modules/holdingfashion_port/code/backpack.dm +++ /dev/null @@ -1,33 +0,0 @@ -/obj/item/satchel_of_holding_inert - name = "inert satchel of holding" - desc = "What is currently a just an unwieldly block of metal with a slot ready to accept a bluespace anomaly core." - icon = 'modular_skyrat/modules/holdingfashion_port/icons/storage.dmi' - icon_state = "inertsatchel" - w_class = WEIGHT_CLASS_BULKY - resistance_flags = FIRE_PROOF - item_flags = NO_MAT_REDEMPTION - -/obj/item/storage/backpack/holding/satchel - name = "satchel of holding" - desc = "A satchel that opens into a localized pocket of bluespace." - icon = 'modular_skyrat/modules/holdingfashion_port/icons/storage.dmi' - icon_state = "holdingsatchel" - worn_icon = 'modular_skyrat/modules/holdingfashion_port/icons/back.dmi' - worn_icon_state = "holdingsatchel" - -/obj/item/duffel_of_holding_inert - name = "inert duffel bag of holding" - desc = "What is currently a just an unwieldly block of metal with a slot ready to accept a bluespace anomaly core." - icon = 'modular_skyrat/modules/holdingfashion_port/icons/storage.dmi' - icon_state = "inertduffel" - w_class = WEIGHT_CLASS_BULKY - resistance_flags = FIRE_PROOF - item_flags = NO_MAT_REDEMPTION - -/obj/item/storage/backpack/holding/duffel - name = "duffel bag of holding" - desc = "A duffel bag that opens into a localized pocket of bluespace." - icon = 'modular_skyrat/modules/holdingfashion_port/icons/storage.dmi' - icon_state = "holdingduffel" - worn_icon = 'modular_skyrat/modules/holdingfashion_port/icons/back.dmi' - worn_icon_state = "holdingduffel" diff --git a/modular_skyrat/modules/holdingfashion_port/code/bluespace_design.dm b/modular_skyrat/modules/holdingfashion_port/code/bluespace_design.dm deleted file mode 100644 index dfef15d23122c7..00000000000000 --- a/modular_skyrat/modules/holdingfashion_port/code/bluespace_design.dm +++ /dev/null @@ -1,19 +0,0 @@ -/datum/design/satchel_holding - name = "Inert Satchel of Holding" - desc = "A block of metal ready to be transformed into a satchel of holding with a bluespace anomaly core." - id = "satchel_holding" - build_type = PROTOLATHE - materials = list(/datum/material/gold = SHEET_MATERIAL_AMOUNT * 2, /datum/material/diamond = SHEET_MATERIAL_AMOUNT, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, /datum/material/bluespace = SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/satchel_of_holding_inert - category = list(RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_BLUESPACE) - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE - -/datum/design/duffel_holding - name = "Inert Duffel Bag of Holding" - desc = "A block of metal ready to be transformed into a duffel bag of holding with a bluespace anomaly core." - id = "duffel_holding" - build_type = PROTOLATHE - materials = list(/datum/material/gold = SHEET_MATERIAL_AMOUNT * 2, /datum/material/diamond = SHEET_MATERIAL_AMOUNT, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, /datum/material/bluespace = SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/duffel_of_holding_inert - category = list(RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_BLUESPACE) - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE diff --git a/modular_skyrat/modules/holidays/flora.dm b/modular_skyrat/modules/holidays/flora.dm deleted file mode 100644 index daa12d88d7f81a..00000000000000 --- a/modular_skyrat/modules/holidays/flora.dm +++ /dev/null @@ -1,11 +0,0 @@ -/obj/structure/flora/tree/pine/xmas/presents/safe - icon_state = "pinepresents" - desc = "A wondrous decorated Christmas tree. It has presents!" - gift_type = /obj/item/a_gift //only give safe gifts from the tree - unlimited = FALSE - -/obj/structure/flora/tree/pine/xmas/presents/safe/unlimited - icon_state = "pinepresents" - desc = "A wondrous decorated Christmas tree. It has presents!" - gift_type = /obj/item/a_gift //only give safe gifts from the tree - unlimited = TRUE diff --git a/modular_skyrat/modules/hop_drip/code/head_of_personnel.dm b/modular_skyrat/modules/hop_drip/code/head_of_personnel.dm deleted file mode 100644 index 912b111d735e7d..00000000000000 --- a/modular_skyrat/modules/hop_drip/code/head_of_personnel.dm +++ /dev/null @@ -1,38 +0,0 @@ -/obj/item/storage/backpack/head_of_personnel - name = "head of personnel backpack" - desc = "A exclusive backpack issued to Nanotrasen's finest second." - icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi' - lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' - righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' - icon_state = "backpack_hop" - inhand_icon_state = "backpack_hop" - -/obj/item/storage/backpack/satchel/head_of_personnel - name = "head of personnel satchel" - desc = "A exclusive satchel issued to Nanotrasen's finest second." - icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi' - lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' - righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' - icon_state = "satchel_hop" - inhand_icon_state = "satchel_hop" - -/obj/item/storage/backpack/duffelbag/head_of_personnel - name = "head of personnel duffelbag" - desc = "A robust duffelbag issued to Nanotrasen's finest second." - icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi' - lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi' - righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi' - icon_state = "duffel_hop" - inhand_icon_state = "duffel_hop" - -/obj/item/radio/headset/heads/hop/alt - name = "\proper the head of personnel's bowman headset" - desc = "The headset of the second. Protects ears from flashbangs." - icon_state = "com_headset_alt" - -/obj/item/radio/headset/heads/hop/alt/Initialize(mapload) - . = ..() - AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS)) diff --git a/modular_skyrat/modules/horrorform/readme.md b/modular_skyrat/modules/horrorform/readme.md deleted file mode 100644 index ca305040ada567..00000000000000 --- a/modular_skyrat/modules/horrorform/readme.md +++ /dev/null @@ -1,30 +0,0 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/241 - -## Title: Changeling Horror Form - -MODULE ID: HORROR_FORM - -### Description: - -Allows changelings to turn into the simple_mob horror_form which they are powerful but slow and loud. Can change back too. - -### TG Proc Changes: - -- N/A - -### Defines: - -- N/A - -### Master file additions - -- modular_skyrat\master_files\sound\misc\tear.ogg -- modular_skyrat\master_files\sound\effects\horror_scream_reverb.ogg -- modular_skyrat\master_files\sound\effects\horror_scream.ogg - -### Included files that are not contained in this module: - -- N/A - -### Credits: -Gandalf2k15 - porting & refactoring diff --git a/modular_skyrat/modules/huds/code/designs.dm b/modular_skyrat/modules/huds/code/designs.dm deleted file mode 100644 index d4f0586ada9033..00000000000000 --- a/modular_skyrat/modules/huds/code/designs.dm +++ /dev/null @@ -1,83 +0,0 @@ -/datum/design/health_hud_prescription - name = "Prescription Health Scanner HUD" - desc = "A heads-up display that scans the humans in view and provides accurate data about their health status. This one has a prescription lens." - id = "health_hud_prescription" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4) - build_path = /obj/item/clothing/glasses/hud/health/prescription - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL - ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL - -/datum/design/security_hud_prescription - name = "Prescription Security HUD" - desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status. This one has a prescription lens." - id = "security_hud_prescription" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4) - build_path = /obj/item/clothing/glasses/hud/security/prescription - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY - ) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY - -/datum/design/diagnostic_hud_prescription - name = "Prescription Diagnostic HUD" - desc = "A HUD used to analyze and determine faults within robotic machinery. This one has a prescription lens." - id = "diagnostic_hud_prescription" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4) - build_path = /obj/item/clothing/glasses/hud/diagnostic/prescription - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE - ) - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE - -/datum/design/science_hud_prescription - name = "Prescription Science HUD" - desc = "These glasses scan the contents of containers and projects their contents to the user in an easy to read format. This one has a prescription lens." - id = "science_hud_prescription" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4) - build_path = /obj/item/clothing/glasses/hud/science/prescription - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE - ) - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_MEDICAL - -/datum/design/mesons_prescription - name = "Prescription Optical Meson Scanners" - desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition. Prescription lens has been added into this design." - id = "mesons_prescription" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4) - build_path = /obj/item/clothing/glasses/meson/prescription - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING - ) - departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_ENGINEERING - -/datum/design/engine_goggles_prescription - name = "Prescription Engineering Scanner Goggles" - desc = "Goggles used by engineers. The Meson Scanner mode lets you see basic structural and terrain layouts through walls, regardless of lighting condition. The T-ray Scanner mode lets you see underfloor objects such as cables and pipes. Prescription lens has been added into this design." - id = "engine_goggles_prescription" - build_type = PROTOLATHE | AWAY_LATHE | COLONY_FABRICATOR - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, /datum/material/plasma = SMALL_MATERIAL_AMOUNT, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4) - build_path = /obj/item/clothing/glasses/meson/engine/prescription - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING - ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING - -/datum/design/tray_goggles_prescription - name = "Prescription Optical T-Ray Scanners" - desc = "Used by engineering staff to see underfloor objects such as cables and pipes. Prescription lens has been added into this design." - id = "tray_goggles_prescription" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, /datum/material/silver = SMALL_MATERIAL_AMOUNT) - build_path = /obj/item/clothing/glasses/meson/engine/tray/prescription - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING - ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING diff --git a/modular_skyrat/modules/hydra/code/neutral.dm b/modular_skyrat/modules/hydra/code/neutral.dm deleted file mode 100644 index aea55dcc14736e..00000000000000 --- a/modular_skyrat/modules/hydra/code/neutral.dm +++ /dev/null @@ -1,48 +0,0 @@ -/datum/quirk/hydra - name = "Hydra Heads" - desc = "You are a tri-headed creature. To use, format name like (Rucks-Sucks-Ducks)" - value = 0 - mob_trait = TRAIT_HYDRA_HEADS - gain_text = span_notice("You hear two other voices inside of your head(s).") - lose_text = span_danger("All of your minds become singular.") - medical_record_text = "There are multiple heads and personalities affixed to one body." - icon = FA_ICON_HORSE_HEAD - -/datum/quirk/hydra/add(client/client_source) - var/mob/living/carbon/human/hydra = quirk_holder - var/datum/action/innate/hydra/spell = new - var/datum/action/innate/hydrareset/resetspell = new - spell.Grant(hydra) - spell.owner = hydra - resetspell.Grant(hydra) - resetspell.owner = hydra - -/datum/action/innate/hydra - name = "Switch head" - desc = "Switch between each of the heads on your body." - button_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "art_summon" - -/datum/action/innate/hydrareset - name = "Reset Speech" - desc = "Go back to speaking as a whole." - button_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "art_summon" - -/datum/action/innate/hydrareset/Activate() - var/mob/living/carbon/human/hydra = owner - if(!hydra.name_archive) // sets the archived 'real' name if not set. - hydra.name_archive = hydra.real_name - hydra.real_name = hydra.name_archive - hydra.visible_message(span_notice("[hydra.name] pushes all three heads forwards; they seem to be talking as a collective."), \ - span_notice("You are now talking as [hydra.name_archive]!"), ignored_mobs=owner) - -/datum/action/innate/hydra/Activate() //Oops, all hydra! - var/mob/living/carbon/human/hydra = owner - if(!hydra.name_archive) // sets the archived 'real' name if not set. - hydra.name_archive = hydra.real_name - var/list/names = splittext(hydra.name_archive,"-") - var/selhead = input("Who would you like to speak as?","Heads:") in names - hydra.real_name = selhead - hydra.visible_message(span_notice("[hydra.name] pulls the rest of their heads back; and puts [selhead]'s forward."), \ - span_notice("You are now talking as [selhead]!"), ignored_mobs=owner) diff --git a/modular_skyrat/modules/hydra/readme.md b/modular_skyrat/modules/hydra/readme.md deleted file mode 100644 index 283c6fb4a20ede..00000000000000 --- a/modular_skyrat/modules/hydra/readme.md +++ /dev/null @@ -1,29 +0,0 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/4211 - -## Title: Mechanical Hydra Heads - -MODULE ID: hydra - -### Description: - -- Adds a baseline sprite file, sprite override files, and mechanics for supporting three voices per person - -### TG Proc Changes: - -- N/A - -### Defines: - -- TRAIT_HYDRA_HEADS - -### Master file additions - -- modular_skyrat/master_files/code/datums/traits/neutral.dm // Added Hydra Heads trait - -### Included files that are not contained in this module: - -- N/A - -### Credits: -- Yawet330 - Code -- C0rva1r - Sprites and base idea \ No newline at end of file diff --git a/modular_skyrat/modules/hyposprays/code/autolathe_designs.dm b/modular_skyrat/modules/hyposprays/code/autolathe_designs.dm deleted file mode 100644 index 504f7346dfba9d..00000000000000 --- a/modular_skyrat/modules/hyposprays/code/autolathe_designs.dm +++ /dev/null @@ -1,16 +0,0 @@ -/datum/design/hypoviallarge - name = "Large Hypovial" - id = "large_hypovial" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/reagent_containers/cup/vial/large - category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL - -/datum/design/pen - name = "Pen" - id = "pen" - build_type = AUTOLATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT, /datum/material/glass = SMALL_MATERIAL_AMOUNT) - build_path = /obj/item/pen - category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MISC) diff --git a/modular_skyrat/modules/ices_events/code/events/ev_roleplay_check.dm b/modular_skyrat/modules/ices_events/code/events/ev_roleplay_check.dm deleted file mode 100644 index d55fd75aeb3967..00000000000000 --- a/modular_skyrat/modules/ices_events/code/events/ev_roleplay_check.dm +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Checks if a player meets certain conditions to exclude them from event selection. - */ -/proc/engaged_role_play_check(mob/living/carbon/human/player, station = TRUE, dorms = TRUE) - var/turf/player_turf = get_turf(player) - var/area/player_area = get_area(player_turf) - if(!is_station_level(player_turf.z) && station) - return TRUE - - if(istype(player_area, /area/station/commons/dorms) && dorms) - return TRUE - - return FALSE diff --git a/modular_skyrat/modules/implants/code/medical_designs.dm b/modular_skyrat/modules/implants/code/medical_designs.dm deleted file mode 100644 index fe795717df30e3..00000000000000 --- a/modular_skyrat/modules/implants/code/medical_designs.dm +++ /dev/null @@ -1,133 +0,0 @@ -/datum/design/cyberimp_mantis - name = "Mantis Blade Implant" - desc = "A long, sharp, mantis-like blade installed within the forearm, acting as a deadly self defense weapon." - id = "ci-mantis" - build_type = MECHFAB - materials = list (/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT) - construction_time = 200 - build_path = /obj/item/organ/internal/cyberimp/arm/armblade - category = list( - RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_COMBAT - ) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY - -/datum/design/cyberimp_claws - name = "Razor Claws Implant" - desc = "Long, sharp, double-edged razors installed within the fingers, functional for cutting. All kinds of cutting." - id = "ci-razor" - build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - materials = list ( - /datum/material/iron = SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT - ) - construction_time = 20 SECONDS - build_path = /obj/item/organ/internal/cyberimp/arm/razor_claws - category = list( - RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_TOOLS - ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SECURITY - -/datum/design/cyberimp_hacker - name = "Hacking Hand Implant" - desc = "An advanced hacking and machine modification toolkit fitted into an arm implant, designed to be installed on a subject's arm." - id = "ci-hacker" - build_type = MECHFAB - materials = list (/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT) - construction_time = 200 - build_path = /obj/item/organ/internal/cyberimp/arm/hacker - category = list( - RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_UTILITY - ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING - -/datum/design/cyberimp_flash - name = "Photon Projector Implant" - desc = "An integrated projector mounted onto a user's arm that is able to be used as a powerful flash." - id = "ci-flash" - build_type = MECHFAB - materials = list (/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT) - construction_time = 200 - build_path = /obj/item/organ/internal/cyberimp/arm/flash - category = list( - RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_COMBAT - ) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY - -/datum/design/cyberimp_botany - name = "Botany Arm Implant" - desc = "Everything a botanist needs in an arm implant, designed to be installed on a subject's arm." - id = "ci-botany" - build_type = MECHFAB | PROTOLATHE - materials = list (/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plastic = SHEET_MATERIAL_AMOUNT) - construction_time = 200 - build_path = /obj/item/organ/internal/cyberimp/arm/botany - category = list( - RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_TOOLS - ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SERVICE - -/datum/design/cyberimp_nv - name = "Night Vision Eyes" - desc = "These cybernetic eyes will give you Night Vision. Big, mean, and green." - id = "ci-nv" - build_type = MECHFAB | PROTOLATHE - construction_time = 60 - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 6, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 6, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 6, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 6, /datum/material/uranium = HALF_SHEET_MATERIAL_AMOUNT,) - build_path = /obj/item/organ/internal/eyes/night_vision/cyber - category = list( - RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_COMBAT - ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL - -/datum/design/cyberimp_antisleep - name = "CNS Jumpstarter Implant" - desc = "This implant will automatically attempt to jolt you awake from unconsciousness, with a short cooldown between jolts. Conflicts with the CNS Rebooter." - id = "ci-antisleep" - build_type = MECHFAB | PROTOLATHE - construction_time = 60 - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 6, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 6, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 5) - build_path = /obj/item/organ/internal/cyberimp/brain/anti_sleep - category = list( - RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_COMBAT - ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL - -/datum/design/cyberimp_scanner - name = "Internal Medical Analyzer" - desc = "This implant interfaces with a host's body, sending detailed readouts of the vessel's condition on command via the mind." - id = "ci-scanner" - build_type = MECHFAB | PROTOLATHE - construction_time = 40 - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, /datum/material/silver = SHEET_MATERIAL_AMOUNT, /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/organ/internal/cyberimp/chest/scanner - category = list( - RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_HEALTH - ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL - -/datum/design/cyberimp_janitor - name = "Janitor Arm Implant" - desc = "A set of janitor tools fitted into an arm implant, designed to be installed on subject's arm." - id = "ci-janitor" - build_type = PROTOLATHE | MECHFAB - materials = list (/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT) - construction_time = 200 - build_path = /obj/item/organ/internal/cyberimp/arm/janitor - category = list( - RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_TOOLS - ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SERVICE - -/datum/design/cyberimp_lighter - name = "Lighter Arm Implant" - desc = "A lighter, installed into the subject's arm. Incredibly useless." - id = "ci-lighter" - build_type = PROTOLATHE | MECHFAB - materials = list (/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 5) - construction_time = 100 - build_path = /obj/item/organ/internal/cyberimp/arm/lighter - category = list( - RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_MISC - ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SERVICE diff --git a/modular_skyrat/modules/implants/code/medical_nodes.dm b/modular_skyrat/modules/implants/code/medical_nodes.dm deleted file mode 100644 index 4eb34b69568320..00000000000000 --- a/modular_skyrat/modules/implants/code/medical_nodes.dm +++ /dev/null @@ -1,24 +0,0 @@ -/datum/techweb_node/cyber_implants - design_ids = list( - "ci-nutriment", - "ci-scanner", - "ci-breather", - "ci-gloweyes", - "ci-welding", - "ci-medhud", - "ci-sechud", - "ci-diaghud", - "ci-botany", - "ci-janitor", - "ci-lighter", - "ci-razor", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - -/datum/techweb_node/adv_cyber_implants - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500) - -/datum/techweb_node/combat_cyber_implants - design_ids = list("ci-nv", "ci-antidrop", "ci-antistun", "ci-antisleep", "ci-thrusters", "ci-mantis", "ci-flash") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 12000) - diff --git a/modular_skyrat/modules/jukebox/readme.md b/modular_skyrat/modules/jukebox/readme.md deleted file mode 100644 index 9fc60ce0f15c7c..00000000000000 --- a/modular_skyrat/modules/jukebox/readme.md +++ /dev/null @@ -1,29 +0,0 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/892 - -## Title: Jukebox - -MODULE ID: JUKEBOX - -### Description: - -Adds a new sound system for the jukebox, and also updates the jukebox to be good. - -### TG Proc Changes: - -- Skyrat-tg\code\__DEFINES\sound.dm > DEFINES CHANGED, SEE FILE. - -### Defines: - -- #define CHANNEL_JUKEBOX_START 1016 - -### Master file additions - -- modular_skyrat\master_files\code\game\sound.dm - -### Included files that are not contained in this module: - -- N/A - -### Credits: -Gandalf2k15 - porting -NotRanged - Original code diff --git a/modular_skyrat/modules/jungle/code/flora.dm b/modular_skyrat/modules/jungle/code/flora.dm deleted file mode 100644 index 47b3677745b25b..00000000000000 --- a/modular_skyrat/modules/jungle/code/flora.dm +++ /dev/null @@ -1,58 +0,0 @@ -/obj/structure/flora/biolumi - name = "glowing plants" - desc = "Several sticks with bulbous, bioluminescent tips." - icon = 'modular_skyrat/modules/jungle/icons/jungleflora.dmi' - icon_state = "stick" - gender = PLURAL - light_range = 15 - light_power = 0.5 - max_integrity = 50 - var/variants = 9 - var/base_icon - var/list/random_light = list("#6AFF00","#00FFEE", "#D9FF00", "#FFC800") - -/obj/structure/flora/biolumi/Initialize(mapload) - . = ..() - base_icon = "[initial(icon_state)][rand(1,variants)]" - icon_state = base_icon - if(random_light) - light_color = pick(random_light) - update_appearance() - -/obj/structure/flora/biolumi/update_overlays() - . = ..() - SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) - SSvis_overlays.add_vis_overlay(src, icon, "[base_icon]_light", 0, ABOVE_LIGHTING_PLANE) - if(light_color) - var/obj/effect/overlay/vis/overlay = managed_vis_overlays[1] - overlay.color = light_color - -/obj/structure/flora/biolumi/mine - name = "glowing plant" - desc = "Glowing sphere encased in jungle leaves." - icon_state = "mine" - variants = 4 - random_light = list("#FF0066","#00FFEE", "#D9FF00", "#FFC800") - -/obj/structure/flora/biolumi/flower - name = "glowing flower" - desc = "Beautiful, bioluminescent flower." - icon_state = "flower" - variants = 2 - random_light = list("#6F00FF","#00FFEE", "#D9FF00", "#FF73D5") - -/obj/structure/flora/biolumi/lamp - name = "plant lamp" - desc = "Bioluminescent plant much in a shape of a street lamp." - icon_state = "lamp" - variants = 2 - random_light = list("#6AFF00","#00FFEE", "#D9FF00", "#FFC800") - -/obj/structure/flora/biolumi/mine/weaklight - light_power = 0.3 - -/obj/structure/flora/biolumi/flower/weaklight - light_power = 0.3 - -/obj/structure/flora/biolumi/lamp/weaklight - light_power = 0.3 diff --git a/modular_skyrat/modules/liquids/code/reagents/chemistry/holder.dm b/modular_skyrat/modules/liquids/code/reagents/chemistry/holder.dm deleted file mode 100644 index b9eac875c8ba26..00000000000000 --- a/modular_skyrat/modules/liquids/code/reagents/chemistry/holder.dm +++ /dev/null @@ -1,5 +0,0 @@ -/// Like add_reagent but you can enter a list. Adds them with no_react = TRUE. Format it like this: list(/datum/reagent/toxin = 10, "beer" = 15) -/datum/reagents/proc/add_noreact_reagent_list(list/list_reagents, list/data=null) - for(var/r_id in list_reagents) - var/amt = list_reagents[r_id] - add_reagent(r_id, amt, data, no_react = TRUE) diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_accessory.dm b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_accessory.dm deleted file mode 100644 index 9140fc6ee7e6eb..00000000000000 --- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_accessory.dm +++ /dev/null @@ -1,105 +0,0 @@ -/* -* LOADOUT ITEM DATUMS FOR THE ACCESSORY SLOT -*/ - -/// Accessory Items (Moves overrided items to backpack) -GLOBAL_LIST_INIT(loadout_accessory, generate_loadout_items(/datum/loadout_item/accessory)) - -/datum/loadout_item/accessory - category = LOADOUT_ITEM_ACCESSORY - -/datum/loadout_item/accessory/pre_equip_item(datum/outfit/outfit, datum/outfit/outfit_important_for_life, visuals_only = FALSE) - if(initial(outfit_important_for_life.accessory)) - .. () - return TRUE - -/datum/loadout_item/accessory/insert_path_into_outfit(datum/outfit/outfit, mob/living/carbon/human/equipper, visuals_only = FALSE, override_items = LOADOUT_OVERRIDE_BACKPACK) - if(override_items == LOADOUT_OVERRIDE_BACKPACK && !visuals_only) - if(outfit.accessory) - LAZYADD(outfit.backpack_contents, outfit.accessory) - outfit.accessory = item_path - else - outfit.accessory = item_path - -/datum/loadout_item/accessory/maid_apron - name = "Maid Apron" - item_path = /obj/item/clothing/accessory/maidapron - -/datum/loadout_item/accessory/waistcoat - name = "Waistcoat" - item_path = /obj/item/clothing/accessory/waistcoat - -/datum/loadout_item/accessory/pocket_protector - name = "Pocket Protector (Empty)" - item_path = /obj/item/clothing/accessory/pocketprotector - -/datum/loadout_item/accessory/full_pocket_protector - name = "Pocket Protector (Filled)" - item_path = /obj/item/clothing/accessory/pocketprotector/full - additional_tooltip_contents = list("CONTAINS PENS - This item contains multiple pens on spawn.") - -/datum/loadout_item/accessory/ribbon - name = "Ribbon" - item_path = /obj/item/clothing/accessory/medal/ribbon - -/datum/loadout_item/accessory/pride - name = "Pride Pin" - item_path = /obj/item/clothing/accessory/pride - -/* -* ARMBANDS -*/ - -/datum/loadout_item/accessory/armband_medblue - name = "Medical Armband (blue stripe)" - item_path = /obj/item/clothing/accessory/armband/medblue - restricted_roles = list(JOB_CHIEF_MEDICAL_OFFICER, JOB_MEDICAL_DOCTOR, JOB_PARAMEDIC, JOB_CHEMIST, JOB_VIROLOGIST, JOB_ORDERLY, JOB_CORONER) - -/datum/loadout_item/accessory/armband_med - name = "Medical Armband (white)" - item_path = /obj/item/clothing/accessory/armband/med - restricted_roles = list(JOB_CHIEF_MEDICAL_OFFICER, JOB_MEDICAL_DOCTOR, JOB_PARAMEDIC, JOB_CHEMIST, JOB_VIROLOGIST, JOB_ORDERLY, JOB_CORONER) - -/datum/loadout_item/accessory/armband_cargo - name = "Cargo Armband" - item_path = /obj/item/clothing/accessory/armband/cargo - restricted_roles = list(JOB_QUARTERMASTER, JOB_CARGO_TECHNICIAN, JOB_SHAFT_MINER, JOB_CUSTOMS_AGENT) - -/datum/loadout_item/accessory/armband_engineering - name = "Engineering Armband" - item_path = /obj/item/clothing/accessory/armband/engine - restricted_roles = list(JOB_CHIEF_ENGINEER, JOB_STATION_ENGINEER, JOB_ATMOSPHERIC_TECHNICIAN, JOB_ENGINEERING_GUARD) - -/datum/loadout_item/accessory/armband_security - name = "Security Armband" - item_path = /obj/item/clothing/accessory/armband/deputy/lopland - restricted_roles = list(JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_DETECTIVE) - -/datum/loadout_item/accessory/armband_security_deputy - name = "Security Deputy Armband" - item_path = /obj/item/clothing/accessory/armband/deputy - restricted_roles = list(JOB_CORRECTIONS_OFFICER) - -/datum/loadout_item/accessory/armband_science - name = "Science Armband" - item_path = /obj/item/clothing/accessory/armband/science - restricted_roles = list(JOB_RESEARCH_DIRECTOR, JOB_SCIENTIST, JOB_ROBOTICIST, JOB_GENETICIST, JOB_SCIENCE_GUARD) - -/* -* ARMOURLESS -*/ - -/datum/loadout_item/accessory/bone_charm - name = "Heirloom Bone Talisman" - item_path = /obj/item/clothing/accessory/talisman/armourless - additional_tooltip_contents = list(TOOLTIP_NO_ARMOR) - -/datum/loadout_item/accessory/bone_codpiece - name = "Heirloom Skull Codpiece" - item_path = /obj/item/clothing/accessory/skullcodpiece/armourless - additional_tooltip_contents = list(TOOLTIP_NO_ARMOR) - -/datum/loadout_item/accessory/sinew_kilt - name = "Heirloom Sinew Skirt" - item_path = /obj/item/clothing/accessory/skilt/armourless - additional_tooltip_contents = list(TOOLTIP_NO_ARMOR) diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_toys.dm b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_toys.dm deleted file mode 100644 index b689901dbd263b..00000000000000 --- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_toys.dm +++ /dev/null @@ -1,405 +0,0 @@ -GLOBAL_LIST_INIT(loadout_toys, generate_loadout_items(/datum/loadout_item/toys)) - -/datum/loadout_item/toys - category = LOADOUT_ITEM_TOYS - -/* -* PLUSHIES -*/ - -/datum/loadout_item/toys/pre_equip_item(datum/outfit/outfit, datum/outfit/outfit_important_for_life, mob/living/carbon/human/equipper, visuals_only = FALSE) // these go in the backpack - return FALSE - -/datum/loadout_item/toys/bee - name = "Bee Plushie" - item_path = /obj/item/toy/plush/beeplushie - -/datum/loadout_item/toys/carp - name = "Carp Plushie" - item_path = /obj/item/toy/plush/carpplushie - -/datum/loadout_item/toys/shark - name = "Shark Plushie" - item_path = /obj/item/toy/plush/shark - -/datum/loadout_item/toys/lizard_greyscale - name = "Greyscale Lizard Plushie" - item_path = /obj/item/toy/plush/lizard_plushie - -/datum/loadout_item/toys/moth - name = "Moth Plushie" - item_path = /obj/item/toy/plush/moth - -/datum/loadout_item/toys/narsie - name = "Nar'sie Plushie" - item_path = /obj/item/toy/plush/narplush - restricted_roles = list(JOB_CHAPLAIN) - -/datum/loadout_item/toys/nukie - name = "Nukie Plushie" - item_path = /obj/item/toy/plush/nukeplushie - -/datum/loadout_item/toys/peacekeeper - name = "Peacekeeper Plushie" - item_path = /obj/item/toy/plush/pkplush - -/datum/loadout_item/toys/plasmaman - name = "Plasmaman Plushie" - item_path = /obj/item/toy/plush/plasmamanplushie - -/datum/loadout_item/toys/ratvar - name = "Ratvar Plushie" - item_path = /obj/item/toy/plush/ratplush - restricted_roles = list(JOB_CHAPLAIN) - -/datum/loadout_item/toys/rouny - name = "Rouny Plushie" - item_path = /obj/item/toy/plush/rouny - -/datum/loadout_item/toys/snake - name = "Snake Plushie" - item_path = /obj/item/toy/plush/snakeplushie - -/datum/loadout_item/toys/slime - name = "Slime Plushie" - item_path = /obj/item/toy/plush/slimeplushie - -/datum/loadout_item/toys/bubble - name = "Bubblegum Plushie" - item_path = /obj/item/toy/plush/bubbleplush - -/datum/loadout_item/toys/goat - name = "Strange Goat Plushie" - item_path = /obj/item/toy/plush/goatplushie - -/datum/loadout_item/toys/sechound - name = "Sechound Plushie" - item_path = /obj/item/toy/plush/skyrat/sechound - -/datum/loadout_item/toys/medihound - name = "Medihound Plushie" - item_path = /obj/item/toy/plush/skyrat/medihound - -/datum/loadout_item/toys/engihound - name = "Engihound Plushie" - item_path = /obj/item/toy/plush/skyrat/engihound - -/datum/loadout_item/toys/scrubpuppy - name = "Scrubpuppy Plushie" - item_path = /obj/item/toy/plush/skyrat/scrubpuppy - -/datum/loadout_item/toys/meddrake - name = "MediDrake Plushie" - item_path = /obj/item/toy/plush/skyrat/meddrake - -/datum/loadout_item/toys/secdrake - name = "SecDrake Plushie" - item_path = /obj/item/toy/plush/skyrat/secdrake - -/datum/loadout_item/toys/borbplushie - name = "Borb Plushie" - item_path = /obj/item/toy/plush/skyrat/borbplushie - -/datum/loadout_item/toys/deer - name = "Deer Plushie" - item_path = /obj/item/toy/plush/skyrat/deer - -/datum/loadout_item/toys/fermis - name = "Medcat Plushie" - item_path = /obj/item/toy/plush/skyrat/fermis - -/datum/loadout_item/toys/chen - name = "Securicat Plushie" - item_path = /obj/item/toy/plush/skyrat/fermis/chen - -/datum/loadout_item/toys/fox - name = "Fox Plushie" - item_path = /obj/item/toy/plush/skyrat/fox - -/datum/loadout_item/toys/duffmoff - name = "Suspicious Moth Plushie" - item_path = /obj/item/toy/plush/skyrat/duffmoth - -/datum/loadout_item/toys/musicalduffy - name = "Suspicious Musical moth" - item_path = /obj/item/instrument/musicalduffy - -/datum/loadout_item/toys/leaplush - name = "Suspicious Deer Plushie" - item_path = /obj/item/toy/plush/skyrat/leaplush - -/datum/loadout_item/toys/sarmie - name = "Cosplayer Plushie" - item_path = /obj/item/toy/plush/skyrat/sarmieplush - -/datum/loadout_item/toys/sharknet - name = "Gluttonous Shark Plushie" - item_path = /obj/item/toy/plush/skyrat/sharknet - -/datum/loadout_item/toys/pintaplush - name = "Smaller Deer Plushie" - item_path = /obj/item/toy/plush/skyrat/pintaplush - -/datum/loadout_item/toys/szaplush - name = "Suspicious Spider Plushie" - item_path = /obj/item/toy/plush/skyrat/szaplush - -/datum/loadout_item/toys/riffplush - name = "Valid Plushie" - item_path = /obj/item/toy/plush/skyrat/riffplush - -/datum/loadout_item/toys/ianbastardman - name = "Ian Plushie" - item_path = /obj/item/toy/plush/skyrat/ian - -/datum/loadout_item/toys/corgiman - name = "Corgi Plushie" - item_path = /obj/item/toy/plush/skyrat/ian/small - -/datum/loadout_item/toys/corgiwoman - name = "Girly Corgi Plushie" - item_path = /obj/item/toy/plush/skyrat/ian/lisa - -/datum/loadout_item/toys/cat - name = "Cat Plushie" - item_path = /obj/item/toy/plush/skyrat/cat - -/datum/loadout_item/toys/tuxcat - name = "Tux Cat Plushie" - item_path = /obj/item/toy/plush/skyrat/cat/tux - -/datum/loadout_item/toys/whitecat - name = "White Cat Plushie" - item_path = /obj/item/toy/plush/skyrat/cat/white - -/datum/loadout_item/toys/seaduplush - name = "Sneed Plushie" - item_path = /obj/item/toy/plush/skyrat/seaduplush - -/datum/loadout_item/toys/lizzyplush - name = "Odd Yoga lizzy Plushie" - item_path = /obj/item/toy/plush/skyrat/lizzyplush - -/datum/loadout_item/toys/mechanic_fox - name = "Mechanist Fox Plushie" - item_path = /obj/item/toy/plush/skyrat/mechanic_fox - -/datum/loadout_item/toys/tribal_salamander - name = "Tribal Salamander Plushie" - item_path = /obj/item/toy/plush/skyrat/tribal_salamander - -/datum/loadout_item/toys/commanding_teshari - name = "Commanding Teshari Plushy" - item_path = /obj/item/toy/plush/skyrat/commanding_teshari - -/datum/loadout_item/toys/snow_owl - name = "Snowy Owl Plush" - item_path = /obj/item/toy/plush/skyrat/snow_owl - -/datum/loadout_item/toys/breakdancing_bird - name = "Breakdancing Bird Plushie" - item_path = /obj/item/toy/plush/skyrat/breakdancing_bird - -/datum/loadout_item/toys/skreking_vox - name = "Skreking Vox Plushie" - item_path = /obj/item/toy/plush/skyrat/skreking_vox - -/datum/loadout_item/toys/blue_dog - name = "Blue Dog Plushie" - item_path = /obj/item/toy/plush/skyrat/blue_dog - -/datum/loadout_item/toys/engi_snek - name = "Engineering Snek Plushie" - item_path = /obj/item/toy/plush/skyrat/engi_snek - -/datum/loadout_item/toys/glitch_synth - name = "Glitching Synthetic Plushie" - item_path = /obj/item/toy/plush/skyrat/glitch_synth - -/datum/loadout_item/toys/boom_bird - name = "Boom Bird Plushie" - item_path = /obj/item/toy/plush/skyrat/boom_bird - -/datum/loadout_item/toys/blue_cat - name = "Blue Cat Plushie" - item_path = /obj/item/toy/plush/skyrat/blue_cat - -/datum/loadout_item/toys/igneous_synth - name = "Igneous Synth Plushie" - item_path = /obj/item/toy/plush/skyrat/igneous_synth - -/datum/loadout_item/toys/edgy_bird - name = "Edgy Bird Plushie" - item_path = /obj/item/toy/plush/skyrat/edgy_bird - -/datum/loadout_item/toys/tree_ferret - name = "Tree Ferret Plushie" - item_path = /obj/item/toy/plush/skyrat/tree_ferret - -/datum/loadout_item/toys/xixi - name = "Familiar Harpy Plushie" - item_path = /obj/item/toy/plush/skyrat/xixi - -/datum/loadout_item/toys/rubi_plush - name = "Huggable Bee Plushie" - item_path = /obj/item/toy/plush/skyrat/rubi - -/datum/loadout_item/toys/derg_plushie - name = "Wingless Dragon Plushie" - item_path = /obj/item/toy/plush/skyrat/derg_plushie - -/datum/loadout_item/toys/tracy - name = "Creature Plushie" - item_path = /obj/item/toy/plush/skyrat/tracy - -/datum/loadout_item/toys/adventurous_synth - name = "Adventurous Synth Plushie" - item_path = /obj/item/toy/plush/skyrat/plushie_synthia - -/datum/loadout_item/toys/jecca - name = "Sexy Snoodle Plushie" - item_path = /obj/item/toy/plush/skyrat/jecca - -/datum/loadout_item/toys/courier_synth - name = "Courier Synth Plushie" - item_path = /obj/item/toy/plush/skyrat/courier_synth - -/datum/loadout_item/toys/plush_janiborg - name = "Friendly Janiborg Plush" - item_path = /obj/item/toy/plush/skyrat/plush_janiborg - -/* -* CARDS -*/ - -/datum/loadout_item/toys/card_binder - name = "Card Binder" - item_path = /obj/item/storage/card_binder - -/datum/loadout_item/toys/card_deck - name = "Playing Card Deck" - item_path = /obj/item/toy/cards/deck - -/datum/loadout_item/toys/kotahi_deck - name = "Kotahi Deck" - item_path = /obj/item/toy/cards/deck/kotahi - -/datum/loadout_item/toys/wizoff_deck - name = "Wizoff Deck" - item_path = /obj/item/toy/cards/deck/wizoff - -/datum/loadout_item/toys/tarot - name = "Tarot Card Deck" - item_path = /obj/item/toy/cards/deck/tarot - -/* -* DICE -*/ - -/datum/loadout_item/toys/d1 - name = "D1" - item_path = /obj/item/dice/d1 - -/datum/loadout_item/toys/d2 - name = "D2" - item_path = /obj/item/dice/d2 - -/datum/loadout_item/toys/d4 - name = "D4" - item_path = /obj/item/dice/d4 - -/datum/loadout_item/toys/d6 - name = "D6" - item_path = /obj/item/dice/d6 - -/datum/loadout_item/toys/d6_ebony - name = "D6 (Ebony)" - item_path = /obj/item/dice/d6/ebony - -/datum/loadout_item/toys/d6_space - name = "D6 (Space)" - item_path = /obj/item/dice/d6/space - -/datum/loadout_item/toys/d8 - name = "D8" - item_path = /obj/item/dice/d8 - -/datum/loadout_item/toys/d10 - name = "D10" - item_path = /obj/item/dice/d10 - -/datum/loadout_item/toys/d12 - name = "D12" - item_path = /obj/item/dice/d12 - -/datum/loadout_item/toys/d20 - name = "D20" - item_path = /obj/item/dice/d20 - -/datum/loadout_item/toys/d100 - name = "D100" - item_path = /obj/item/dice/d100 - -/datum/loadout_item/toys/d00 - name = "D00" - item_path = /obj/item/dice/d00 - -/datum/loadout_item/toys/dice - name = "Dice Bag" - item_path = /obj/item/storage/dice - -/* -* TENNIS BALLS -*/ - -/datum/loadout_item/toys/tennis - name = "Tennis Ball (Classic)" - item_path = /obj/item/toy/tennis - -/datum/loadout_item/toys/tennisred - name = "Tennis Ball (Red)" - item_path = /obj/item/toy/tennis/red - -/datum/loadout_item/toys/tennisyellow - name = "Tennis Ball (Yellow)" - item_path = /obj/item/toy/tennis/yellow - -/datum/loadout_item/toys/tennisgreen - name = "Tennis Ball (Green)" - item_path = /obj/item/toy/tennis/green - -/datum/loadout_item/toys/tenniscyan - name = "Tennis Ball (Cyan)" - item_path = /obj/item/toy/tennis/cyan - -/datum/loadout_item/toys/tennisblue - name = "Tennis Ball (Blue)" - item_path = /obj/item/toy/tennis/blue - -/datum/loadout_item/toys/tennispurple - name = "Tennis Ball (Purple)" - item_path = /obj/item/toy/tennis/purple - -/* -* MISC -*/ - -/datum/loadout_item/toys/cat_toy - name = "Cat Toy" - item_path = /obj/item/toy/cattoy - -/datum/loadout_item/toys/crayons - name = "Box of Crayons" - item_path = /obj/item/storage/crayons - -/datum/loadout_item/toys/spray_can - name = "Spray Can" - item_path = /obj/item/toy/crayon/spraycan - -/datum/loadout_item/toys/eightball - name = "Magic Eightball" - item_path = /obj/item/toy/eightball - -/datum/loadout_item/toys/toykatana - name = "Toy Katana" - item_path = /obj/item/toy/katana diff --git a/modular_skyrat/modules/lorecaster/readme.md b/modular_skyrat/modules/lorecaster/readme.md deleted file mode 100644 index 10d22461b3011a..00000000000000 --- a/modular_skyrat/modules/lorecaster/readme.md +++ /dev/null @@ -1,26 +0,0 @@ -## Title: Lorecasters - -MODULE ID: LORECASTERS - -### Description: - -For broadcasting lore-related stories via newscasters and the archives app. -To add a story to rotation, add it to config/skyrat/news_stories.json, ideally at the top of the file for maximum organization -Once a story's been out too long, or there's too many in circulation, move older ones to config/skyrat/archived_stories.json, again ideally add it to the top (however these entries auto-sort by date in-game) - -### TG Proc Changes: - -- N/A - -### Defines: - -- N/A - -### Master file additions - -- N/A - -### Included files that are not contained in this module: - -- N/A - diff --git a/modular_skyrat/modules/mapping/code/areas/centcom.dm b/modular_skyrat/modules/mapping/code/areas/centcom.dm deleted file mode 100644 index 9b813e5a1baa12..00000000000000 --- a/modular_skyrat/modules/mapping/code/areas/centcom.dm +++ /dev/null @@ -1,38 +0,0 @@ -// Skyrat CC area defines - -/* -* Ghost Cafe -*/ - -/area/centcom/holding - name = "Holding Facility" - -/area/centcom/holding/cafe - name = "Ghost Cafe" - -/area/centcom/holding/cafewar - name = "Cafe Combat Zone" - -/area/centcom/holding/cafebotany - name = "Cafe Service Area" - -/area/centcom/holding/cafebuild - name = "Cafe Construction Zone" - -/area/centcom/holding/cafevox - name = "Cafe Vox Box" - -/area/centcom/holding/cafedorms - name = "Ghost Cafe Dorms" - -/area/centcom/holding/cafepark - name = "Ghost Cafe Outdoors" - -/area/centcom/holding/cafeplumbing - name = "Ghost Cafe Plumbing" - -/area/centcom/interlink - name = "The Interlink" - -/area/centcom/interlink/dorm_rooms - name = "Interlink Dorm Rooms" diff --git a/modular_skyrat/modules/mapping/code/areas/ruins.dm b/modular_skyrat/modules/mapping/code/areas/ruins.dm deleted file mode 100644 index 120709108b1efd..00000000000000 --- a/modular_skyrat/modules/mapping/code/areas/ruins.dm +++ /dev/null @@ -1,21 +0,0 @@ -// Skyrat area ruins - -/area/ruin/powered/miningfacility - name = "Abandoned Nanotrasen Mining Facility" - icon_state = "dk_yellow" - ambientsounds = list('sound/ambience/title3.ogg') //Classic vibes - -/area/ruin/powered/crashedshuttle - name = "Crashed Shuttle" - icon_state = "dk_yellow" - ambientsounds = list('sound/ambience/ambiodd.ogg') - -/area/ruin/powered/cozycabin - name = "Cozy Cabin" - icon_state = "dk_yellow" - ambientsounds = list('sound/ambience/ambicha1.ogg', 'sound/ambience/ambicha2.ogg', 'sound/ambience/ambicha3.ogg') - -/area/ruin/powered/biodome - name = "Jungle Biodome" - icon_state = "dk_yellow" - diff --git a/modular_skyrat/modules/mapping/code/areas/shuttles.dm b/modular_skyrat/modules/mapping/code/areas/shuttles.dm deleted file mode 100644 index 91966bb45a5475..00000000000000 --- a/modular_skyrat/modules/mapping/code/areas/shuttles.dm +++ /dev/null @@ -1,64 +0,0 @@ -// Skyrat shuttle areas - -/area/shuttle/prison_transport - name = "Prison Transporter NSS-74" - -/datum/map_template/shuttle/prison_transport - port_id = "prison_transport" - suffix = "skyrat" - name = "Prison Transporter NSS-74" - -/area/shuttle/blackmarket_chevvy - name = "Blackmarket Chevvy" - -/area/shuttle/interdyne_cargo - name = "Interdyne Cargo Shuttle" - -/area/shuttle/syndicate/slaver - name = "Slave Ship" - requires_power = TRUE - -/area/shuttle/tarkon_driver - name = "Tarkon Driver" - -/area/shuttle/trader/bridge - name = "Trader Ship Bridge" - -/area/shuttle/trader/engine - name = "Trader Ship Engine" - -/area/shuttle/trader/bar - name = "Trader Ship Bar" - -/area/shuttle/trader/crew - name = "Trader Ship Crew Quarters" - -/area/shuttle/trader/cargo - name = "Trader Ship Cargo Bay" - -/area/shuttle/escape/no_light - area_flags = UNIQUE_AREA - -/area/shuttle/arrival/no_light - static_lighting = FALSE - -/area/shuttle/mining/no_light - static_lighting = FALSE - -/area/shuttle/supply/no_light - static_lighting = FALSE - -/area/shuttle/transport/no_light - static_lighting = FALSE - -/area/shuttle/mining/advanced - name = "NMC Phoenix" - -/area/shuttle/mining/advanced/public - name = "NMC Chimera" - -/area/shuttle/mining/large/advanced - name = "NMC Manticore" - -/area/shuttle/labor/advanced - name = "NMC Drudge" diff --git a/modular_skyrat/modules/mapping/code/areas/space.dm b/modular_skyrat/modules/mapping/code/areas/space.dm deleted file mode 100644 index 6787c26289ec76..00000000000000 --- a/modular_skyrat/modules/mapping/code/areas/space.dm +++ /dev/null @@ -1,276 +0,0 @@ -// Skyrat space area defines - Mostly for ruins - -///Cybersun, Forgotten Ship -/area/ruin/space/has_grav/cybersun - name = "Cybersun" - icon_state = "spacecontent1" - -/area/ruin/space/has_grav/cybersun/atmospherics - name = "Abandoned Atmospherics Wing" - icon_state = "atmos" - -///Generic Skyrat Ruins - -/area/ruin/space/has_grav/powered/skyrat/smugglies - name = "Suspicious Cargo Installation" - -/area/ruin/space/has_grav/powered/skyrat/clothing_facility - name = "Abandoned Research Station" - -/area/ruin/space/has_grav/powered/skyrat/luna - name = "Unexplored Location" - -/area/ruin/space/has_grav/powered/skyrat/blackmarket - name = "Shady Market" - -/area/ruin/space/has_grav/powered/skyrat/alien_tool_lab - name = "Alien Tool Lab" - -/area/ruin/space/has_grav/powered/skyrat/scrapheap - name = "Scrap Heap" - -///Interdyne, Forward Operating Base -/area/ruin/space/has_grav/skyrat/interdynefob - name = "DS-2" //If DS-1 is so great... - icon = 'icons/area/areas_centcom.dmi' - icon_state = "syndie-ship" - -//Cargo -/area/ruin/space/has_grav/skyrat/interdynefob/cargo - name = "DS-2 Warehouse" - -/area/ruin/space/has_grav/skyrat/interdynefob/cargo/hangar - name = "DS-2 Hangar" - -//Bridge -/area/ruin/space/has_grav/skyrat/interdynefob/bridge - name = "DS-2 Bridge" - icon_state = "syndie-control" - -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/cl - name = "DS-2 Corporate Liaison's Office" - sound_environment = SOUND_AREA_WOODFLOOR - -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/admiral - name = "DS-2 Station Admiral's Office" - sound_environment = SOUND_AREA_WOODFLOOR - -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/vault - name = "DS-2 Vault" - -/area/ruin/space/has_grav/skyrat/interdynefob/bridge/eva - name = "DS-2 E.V.A." - -//Security -/area/ruin/space/has_grav/skyrat/interdynefob/security - name = "DS-2 Security" - ambience_index = AMBIENCE_DANGER - -/area/ruin/space/has_grav/skyrat/interdynefob/security/armory - name = "DS-2 Armory" - -/area/ruin/space/has_grav/skyrat/interdynefob/security/lawyer - name = "DS-2 Interrogation Office" - -/area/ruin/space/has_grav/skyrat/interdynefob/security/prison - name = "DS-2 Long-Term Brig" - -//Service -/area/ruin/space/has_grav/skyrat/interdynefob/service - name = "DS-2 Service Wing" - -/area/ruin/space/has_grav/skyrat/interdynefob/service/diner - name = "DS-2 Diner" - -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms - name = "DS-2 Dormitories" - -/area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness - name = "DS-2 Fitness Room" - -/area/ruin/space/has_grav/skyrat/interdynefob/service/lounge - name = "DS-2 Lounge" - -/area/ruin/space/has_grav/skyrat/interdynefob/service/hydroponics - name = "DS-2 Hydroponics" - -//Hallways -/area/ruin/space/has_grav/skyrat/interdynefob/halls - name = "DS-2 Central Halls" - -//Engineering -/area/ruin/space/has_grav/skyrat/interdynefob/engineering - name = "DS-2 Engineering" - -//Research -/area/ruin/space/has_grav/skyrat/interdynefob/research - name = "DS-2 Research" - -//Medbay -/area/ruin/space/has_grav/skyrat/interdynefob/medbay - name = "DS-2 Medical Bay" - -/area/ruin/space/has_grav/skyrat/interdynefob/medbay/chem - name = "DS-2 Chemistry" - -/area/ruin/space/has_grav/shuttle8532engineering - name = "Shuttle 8532 Engine Room" - -/area/ruin/space/has_grav/shuttle8532researchbay - name = "Shuttle 8532 Research Bay" - -/area/ruin/space/has_grav/shuttle8532cargohall - name = "Shuttle 8532 Cargo Hall" - -/area/ruin/space/has_grav/shuttle8532crewquarters - name = "Shuttle 8532 Crew Quarters" - -/area/ruin/space/has_grav/shuttle8532bridge - name = "Shuttle 8532 Bridge" - -/area/ruin/space/has_grav/vaulttango - name = "ARBORLINK Vault Tango" - -/area/ruin/space/has_grav/waypoint - name = "Abandoned Station" - -/area/ruin/space/has_grav/powered/toy_store - name = "Toy Store" - -/area/ruin/space/has_grav/powered/prison_shuttle - name = "Prison Shuttle" - -/area/ruin/space/has_grav/powered/posterpandamonium - name = "Strange Shuttle" - -//Port Tarkon - -/area/ruin/space/has_grav/port_tarkon - name = "P-T Cryo-Storage" - -/area/ruin/space/has_grav/port_tarkon/afthall - name = "P-T Aft Hallway" - -/area/ruin/space/has_grav/port_tarkon/forehall - name = "P-T Fore Hallway" - -/area/ruin/space/has_grav/port_tarkon/starboardhall - name = "P-T Starboard Hallway" - -/area/ruin/space/has_grav/port_tarkon/porthall - name = "P-T Port Hallway" - -/area/ruin/space/has_grav/port_tarkon/trauma - name = "P-T Trauma Center" - icon_state = "medbay1" - -/area/ruin/space/has_grav/port_tarkon/developement - name = "P-T Developement Center" - icon_state = "research" - -/area/ruin/space/has_grav/port_tarkon/comms - name = "P-T Communication Center" - icon_state = "captain" - -/area/ruin/space/has_grav/port_tarkon/power1 - name = "P-T Solar Control" - icon_state = "engine" - -/area/ruin/space/has_grav/port_tarkon/centerhall - name = "P-T Central Hallway" - icon_state = "hallC" - -/area/ruin/space/has_grav/port_tarkon/secoff - name = "P-T Security Office" - icon_state = "security" - -/area/ruin/space/has_grav/port_tarkon/atmos - name = "P-T Atmospheric Center" - icon_state = "engine" - -/area/ruin/space/has_grav/port_tarkon/kitchen - name = "P-T Kitchen" - icon_state = "cafeteria" - -/area/ruin/space/has_grav/port_tarkon/garden - name = "P-T Garden" - icon_state = "garden" - -/area/ruin/space/has_grav/port_tarkon/cargo - name = "P-T Cargo Center" - icon_state = "cargo" - -/area/ruin/space/has_grav/port_tarkon/mining - name = "P-T Mining Office" - icon_state = "cargo" - -/area/ruin/space/has_grav/port_tarkon/storage - name = "P-T Warehouse" - icon_state = "cargo" - -/area/ruin/space/has_grav/port_tarkon/toolstorage - name = "P-T Tool Storage" - icon_state = "tool_storage" - -/area/ruin/space/has_grav/port_tarkon/observ - name = "P-T Observatory" - icon_state = "crew_quarters" - -/area/ruin/space/has_grav/port_tarkon/dorms - name = "P-T Dorms" - icon_state = "crew_quarters" - -/area/solars/tarkon - name = "\improper P-T Solar Array" - icon_state = "solarsS" - has_gravity = STANDARD_GRAVITY - -// Cargodise Lost Freighter - -/area/ruin/space/has_grav/cargodise_freighter/primaryhall - name = "Freighter Primary Hall" - -/area/ruin/space/has_grav/cargodise_freighter/trauma - name = "Freighter Trauma Center" - -/area/ruin/space/has_grav/cargodise_freighter/utility - name = "Freighter Utility Room" - -/area/ruin/space/has_grav/cargodise_freighter/kitchen - name = "Freighter Kitchen" - -/area/ruin/space/has_grav/cargodise_freighter/bridge - name = "Freighter Bridge" - -/area/ruin/space/has_grav/cargodise_freighter/cargo - name = "Freighter Cargo Bay" - -/area/ruin/space/has_grav/cargodise_freighter/mining - name = "Freighter Mining Office" - -/area/ruin/space/has_grav/cargodise_freighter/quarters - name = "Freighter Crew Quarters" - -/area/ruin/space/has_grav/cargodise_freighter/hydroponics - name = "Freighter Hydroponics" - -/area/ruin/space/has_grav/cargodise_freighter/vault - name = "Freighter Vault" - -/area/ruin/space/has_grav/cargodise_freighter/exterior - name = "Freighter Exterior" - -// Skyrat's Space Hotel - -/area/ruin/space/has_grav/hotel/sauna - name = "Hotel Sauna Room" - -/area/ruin/space/has_grav/hotel/workroom/quarters - name = "Hotel Staff Quarters" - -/area/ruin/solars/hotel/solars - name = "\improper Hotel Solar Array" - requires_power = FALSE - area_flags = UNIQUE_AREA - sound_environment = SOUND_AREA_SPACE - base_lighting_alpha = 255 diff --git a/modular_skyrat/modules/mapping/code/areas/station.dm b/modular_skyrat/modules/mapping/code/areas/station.dm deleted file mode 100644 index c5ff1dfbbf9f6c..00000000000000 --- a/modular_skyrat/modules/mapping/code/areas/station.dm +++ /dev/null @@ -1,577 +0,0 @@ -// Skyrat specific station areas - -/* -* Station bound areas -*/ - -// Command areas -/area/station/command/captain_kitchen - name = "Captain's Kitchen" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "capt_kitchen" - -/area/station/command/captain_dining - name = "Captain's Dining Room" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "capt_dining" - -/area/station/command/cc_dock - name = "Central Command Ferry Dock" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "cc_dock" - -/area/station/command/secure_bunker - name = "Secure Bunker" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "secure_bunker" - -// NT Consultant area -/area/station/command/heads_quarters/nt_rep - name = "Nanotrasen Consultant's Office" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "nt_rep" - -// Blueshield area -/area/station/command/heads_quarters/blueshield - name = "Blueshield's Office" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "blueshield" - -/* -* Department areas -*/ - -// Engineering Areas -/area/station/engineering/power_room - name = "Ship Power Storage Room" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "power_room" - -// Atmos Areas -/area/station/engineering/atmos/hallway - name = "Atmos Hall" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "atmos_hall" - -/area/station/engineering/atmos/test_chambers - name = "Atmospherics Testing Chambers" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "atmos_test" - -// Medical Areas -/area/station/medical/aslyum - name = "Aslyum" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "aslyum" - -// Science Areas -/area/station/science/tele_sci - name = "Tele Sci Room" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "tele_sci" - -// Security areas -// CO Office -/area/station/security/corrections_officer - name = "Corrections Officer Lounge" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "corrections_officer" - -// Department power stations -/area/station/cargo/power_station - name = "Cargo Power Station" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "cargo_power" - -/area/station/cargo/power_station/lower - name = "Lower Cargo Power Station" - -/area/station/cargo/power_station/upper - name = "Upper Cargo Power Station" - -/area/station/engineering/power_station - name = "Engineering Power Station" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "engie_power" - -/area/station/engineering/power_station/lower - name = "Lower Engineering Power Station" - -/area/station/engineering/power_station/upper - name = "Upper Engineering Power Station" - -/area/station/medical/power_station - name = "Medical Power Station" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "med_power" - -/area/station/science/power_station - name = "Science Power Station" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "sci_power" - -/area/station/security/power_station - name = "Security Power Station" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "sec_power" - -/area/station/service/power_station - name = "Service Power Station" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "serv_power" - -/* -* General areas -*/ - -// Generic/Civ areas, typical a non-restricted room -/area/station/common/pool - name = "Pool" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "pool" - -/area/station/common/cryopods - name = "Cryopods Room" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "cryopods" - -/area/station/service/salon - name = "\improper Salon" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "salon" - -// Wrestling areas for BlueShift -/area/station/common/wrestling - name = "Wrestling" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "wrestle" - -/area/station/common/wrestling/arena - name = "Wrestling Arena" - icon_state = "wrestle_arena" - -/area/station/common/wrestling/lobby - name = "Wrestling Arena Lobby" - icon_state = "wrestle_lobby" - -/area/station/common/wrestling/locker - name = "Wrestling Arena Locker Room" - icon_state = "wrestle_locker" - -/area/station/common/tailoring - name = "Tailoring Shop" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "tailoring" - -// BlueShift Night Club -/area/station/common/night_club - name = "Night Club" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "nightclub" - -/area/station/common/night_club/back_stage - name = "Night Club Backstage" - icon_state = "nightclub_backstage" - -/area/station/common/night_club/changing_room - name = "Night Club Changing Room" - icon_state = "nightclub_changing_room" - -// Rec related areas -/area/station/common/laser_tag - name = "Laser Tag" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "laser_tag" - -/area/station/common/arcade - name = "Arcade" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "arcade" - -/area/station/common/locker_room_shower - name = "Locker Room Shower" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "locker_room_shower" - -/area/station/common/cafeteria - name = "Cafeteria" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "cafeteria" - -/area/station/common/gaskiosk - name = "\improper Internals Kiosk" - icon_state = "vacant_commissary" - -/area/station/commons/dorms/room5 - name = "\improper Dorms Room 5" - icon_state = "room1" - -/area/station/commons/dorms/room6 - name = "\improper Dorms Room 6" - icon_state = "room2" - -/area/station/commons/dorms/room7 - name = "\improper Dorms Room 7" - icon_state = "room3" - -/area/station/commons/dorms/room8 - name = "\improper Dorms Room 8" - icon_state = "room4" - -/area/station/commons/dorms/vacantroom - name = "\improper Vacant Dorms Room" - icon_state = "vacant_room" - -/area/station/common/wrestling/beverage - name = "\improper Arena Beverage Stand" - icon_state = "wrestle_maint" - -/area/station/common/wrestling/concessions - name = "\improper Arena Concessions Stand" - icon_state = "wrestle_maint" - -/area/station/common/pool/sauna - name = "\improper Pool Sauna" - icon_state = "pool" - -/area/station/service/barber/spa - name = "\improper Spa" - icon_state = "barber" - -/* -* Department/Generic maintenance areas -*/ - -// Generic -/area/station/maintenance/evac_maintenance - name = "Departures Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "evac_maint" - -/area/station/maintenance/evac_maintenance/upper - name = "Upper Departures Maintenance" - icon_state = "evac_maint_upper" - -/area/station/maintenance/pool_maintenance - name = "Pool Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "pool_maint" - -/area/station/maintenance/port/upper - name = "Upper Port Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "port_maint_upper" - -// Science -/area/station/maintenance/department/science/lower - name = "Lower Science Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "lower_sci_maint" - -/area/station/maintenance/department/science/upper - name = "Upper Science Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "upper_sci_maint" - -/area/station/maintenance/department/science/ordnance_maint - name = "Ordnance Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "ord_maint" - -/area/station/maintenance/department/science/ordnance_maint_lesser - name = "Lesser Ordnance Maintenace" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "lesser_ord_maint" - -// Engineering -/area/station/maintenance/department/engineering/atmos/aft_maint - name = "Aft Atmospherics Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "atmos_maint_aft" - -/area/station/maintenance/department/engineering/atmos/port_maint - name = "Port Atmospherics Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "atmos_maint_port" - -/area/station/maintenance/department/engineering/atmos_aux_port - name = "Port Atmospherics Auxiliary" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "atmos_aux_port" - -/area/station/maintenance/department/engineering/atmos/hfr_maint - name = "HFR Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "hfr_maint" - -/area/station/maintenance/department/engineering/central - name = "Central Engineering Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "engie_maint_cent" - -/area/station/maintenance/department/engineering/engie_aft_starboard - name = "Aft Starboard Engineering Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "engie_maint_as" - -/area/station/maintenance/department/engineering/engine_aft_port - name = "Aft Port Engine Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "engine_maint_ap" - -/area/station/maintenance/department/engineering/engine_aft_starboard - name = "Aft Starboard Engine Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "engine_maint_as" - -/area/station/maintenance/department/engineering/lesser - name = "Lesser Engineering Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "engie_maint_lesser" - -/area/station/maintenance/department/engine/atmos/lesser - name = "Lesser Atmospherics Maintenance" - -// Security -/area/station/maintenance/law - name = "Law Office Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "law_maint" - -/area/station/maintenance/department/security/lesser - name = "Lesser Security Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "sec_maint_lesser" - -/area/station/maintenance/department/security/lower - name = "Lower Security Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "sec_maint_lower" - -/area/station/maintenance/department/security/greater - name = "Greater Security Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "sec_maint_greater" - -/area/station/maintenance/department/security/prison_lower - name = "Lower Prison Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "prison_maint_lower" - -/area/station/maintenance/department/security/prison_upper - name = "Upper Prison Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "prison_maint_upper" - -/area/station/maintenance/department/security/upper - name = "Upper Security Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "sec_maint_upper" - -// Service -/area/station/maintenance/library - name = "Library Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "library_maint" - -/area/station/maintenance/library/lower - name = "Lower Library Maintenance" - icon_state = "library_maint_lower" - -/area/station/maintenance/library/upper - name = "Upper Library Maintenance" - icon_state = "library_maint_upper" - -/area/station/maintenance/night_club - name = "Night Club Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "nightclub_maint" - -/area/station/maintenance/salon - name = "Salon Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "salon_maint" - -/area/station/maintenance/salon/lower - name = "Lower Salon Maintenance" - icon_state = "salon_maint_lower" - -/area/station/maintenance/salon/upper - name = "Upper Salon Maintenance" - icon_state = "salon_maint_upper" - -/area/station/maintenance/wrestle - name = "Wrestling Arena Lobby Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "wrestle_maint" - -// Abandon rooms -/area/station/maintenance/abandon_arcade - name = "Abandoned Arcade" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "abadn_arcade" - -/area/station/maintenance/abandon_art_studio - name = "Abandoned Art Studio" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "abadn_art_studio" - -/area/station/maintenance/abandon_cafeteria - name = "Abandoned Cafeteria" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "abandon_cafe" - -/area/station/maintenance/abandon_diner - name = "Abandoned Diner" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "abadn_diner" - -/area/station/maintenance/abandon_exam - name = "Abandoned Exam" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "abadn_exam" - -// Subtype used for Blueshift -/area/station/maintenance/abandon_exam/cat - name = "Abandoned Cat Exam" - -/area/station/maintenance/abandon_holding_cell - name = "Abandoned Holding Cell" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "abadn_hold_cell" - -/area/station/maintenance/abandon_cafeteria/hydro - name = "Abandoned Cafeteria Hydroponics" - icon_state = "abandon_cafe_hydro" - -/area/station/maintenance/abandon_cafeteria/hydro_walk - name = "Abandoned Cafeteria Hydroponics Walkway" - icon_state = "abandon_cafe_hydro_walk" - -/area/station/maintenance/abandon_kitchen_upper - name = "Abandoned Secondary Kitchen" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "abadn_kitchen_up" - -/area/station/maintenance/abandon_office - name = "Abandoned Office" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "abadn_office" - -/area/station/maintenance/abandon_psych - name = "Abandoned Psychologist Office" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "abadn_psych" - -/area/station/maintenance/abandon_wrestle - name = "Abandoned Wrestle Arena" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "abandon_wrestle" - -/area/station/maintenance/abandon_surgery - name = "Abandoned Surgery" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "abandon_surgery" - -// Regular maint rooms -/area/station/maintenance/aux_eva - name = "Auxiliary EVA Room" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "aux_eva" - -/area/station/maintenance/coffin_supply - name = "Coffin Supplies Room" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "coffin_supply" - -/area/station/maintenance/clown_chamber - name = "Clown Chamber" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "clown_chamber" - -/area/station/maintenance/console_room - name = "Console Room" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "console_room" - -/area/station/maintenance/cult_chapel - name = "Forbidden Chapel" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "cult_chapel" - -/area/station/maintenance/cult_chapel_maint - name = "Forbidden Chapel's Maintenance" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "cult_chapel_maint" - -/area/station/maintenance/dorm_room - name = "Maintenance Dorm Room" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "dorm_room_maint" - -/area/station/maintenance/gag_room - name = "Gag Room" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "gag_room" - -/area/station/maintenance/gamer_lair - name = "Gamer Lair" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "gamer_lair" - -/area/station/maintenance/rus_gambling - name = "Russian Gambling Den" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "russ_gambling" - -/area/station/maintenance/rus_surgery - name = "Russian Organ Extraction Room" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "russ_surgery" - -/area/station/maintenance/xenobio_disposals - name = "Xenobiology Disposals" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "xenobio_dispose" - -// BlueShift unique rooms, or rooms for ship-class "stations" -// Thruster rooms -/area/station/maintenance/thruster_room - name = "Thruster Room" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "thrust_room" - -/area/station/maintenance/thruster_room/aft - name = "Aft Thruster Room" - icon_state = "aft_thrust_room" - -/area/station/maintenance/thruster_room/central - name = "Central Thruster Room" - icon_state = "cent_thrust_room" - -/area/station/maintenance/thruster_room/port - name = "Port Thruster Room" - icon_state = "port_thrust_room" - -/area/station/maintenance/thruster_room/starboard - name = "Starboard Thruster Room" - icon_state = "sb_thrust_room" - -// EVA Sheds used on BlueShift -/area/station/maintenance/eva_shed - name = "EVA Shed" - icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi' - icon_state = "eva_shed" - -/area/station/maintenance/eva_shed/port - name = "Port EVA Shed" - icon_state = "eva_shed_port" - -/area/station/maintenance/eva_shed/starboard - name = "Starboard EVA Shed" - icon_state = "eva_shed_sb" - -// Department Rooms -/area/station/science/xenobiology/control - name = "\improper Xenobiology Control Room" - icon_state = "xenobio" diff --git a/modular_skyrat/modules/mapping/code/color.dm b/modular_skyrat/modules/mapping/code/color.dm deleted file mode 100644 index 73d1a3f4cdf061..00000000000000 --- a/modular_skyrat/modules/mapping/code/color.dm +++ /dev/null @@ -1,13 +0,0 @@ -/obj/item/clothing/gloves/captain/pilot - desc = "Regal blue gloves, with a nice silver trim, a diamond anti-shock coating, and an integrated thermal barrier." - name = "shuttle pilot's gloves" - icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi' - icon_state = "pilot" - -/obj/item/clothing/gloves/color/ffyellow // EXTRA fake, for the loadout - name = "yellow gloves" - desc = "At first glance, these look like insulated gloves, but... is that crayon?" - icon_state = "yellow" - inhand_icon_state = "ygloves" - siemens_coefficient = 0.5 diff --git a/modular_skyrat/modules/mapping/code/fluff.dm b/modular_skyrat/modules/mapping/code/fluff.dm deleted file mode 100644 index 5edba8228c0145..00000000000000 --- a/modular_skyrat/modules/mapping/code/fluff.dm +++ /dev/null @@ -1,284 +0,0 @@ -//File for miscellaneous fluff objects, both item and structure -//This one is specifically for ruin-specific items, such as ID, lore, or super-specific decorations - -/* ----------------- ID Cards ----------------- */ -/obj/item/card/id/away/old/salvagepod //Used for salvagepost ruin access -- NOT WORKING YET REE - name = "Cutter's Pod access card" - desc = "An ancient access card with the words \"Cutter's Pod\" printed on in big bold letters. It'll be a miracle if this still works." - trim = /datum/id_trim/away/old/eng - -/obj/item/card/id/away/tarkon - name = "Tarkon visitor's pass" - desc = "A dust-collected visitors pass, A small tagline reading \"Port Tarkon, The first step to Civilian Partnership in Space Homesteading\"." - trim = /datum/id_trim/away/tarkon - -/* ----------------- Lore ----------------- */ -//Tape subtype for adding ruin lore -- the variables below are the ones you need to change -/obj/item/tape/ruins - name = "tape" - desc = "A magnetic tape that can hold up to ten minutes of content on either side." - icon_state = "tape_white" //Options are white, blue, red, yellow, purple, greyscale, or you can chose one randomly (see tape/ruins/random below) - - max_capacity = 10 MINUTES - used_capacity = 0 SECONDS //To keep in-line with the timestamps, you can also do this as 10 = 1 second - ///Numbered list of chat messages the recorder has heard with spans and prepended timestamps. Used for playback and transcription. - storedinfo = list() //Look at the tape/ruins/ghostship tape for reference - ///Numbered list of seconds the messages in the previous list appear at on the tape. Used by playback to get the timing right. - timestamp = list() //10 = 1 second. Look at the tape/ruins/ghostship tape for reference - used_capacity_otherside = 0 SECONDS //Separate my side - storedinfo_otherside = list() - timestamp_otherside = list() - -/obj/item/tape/ruins/random/Initialize(mapload) - icon_state = "tape_[pick("white", "blue", "red", "yellow", "purple", "greyscale")]" - . = ..() -//End of lore tape subtype - -/obj/item/tape/ruins/salvagepost //End of the cutters shift and he done goofed, left a message for the next one - who never arrived - icon_state = "tape_yellow" - desc = "The tape is lazily labelled with \"Msg for my replacement\"" - - used_capacity = 380 - storedinfo = list( - 1 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording started.</span>\"</span></span>", - 2 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>cheerily says, \"<span class=' '>Hey, Cutter! If you're reading this, congratulations on taking over my post. Was waiting to move out to a new system.</span>\"</span></span>", - 3 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>sighs, \"<span class=' '>Listen, I'll just put it straight - I've left this place in a sorrier state than you deserve.</span>\"</span></span>", - 4 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>says, \"<span class=' '>We hauled in this big rigger, y'see, and, uh.. the backroom was full of some robotic freakyshit. I panicked and cut a gas line, dropped my grav-cannon...</span>\"</span></span>", - 5 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>warns, \"<span class=' '>Look, just - be careful when, or if, you crack that thing open. Drain the fuel from the air before it has a chance to light, then... well... I hope you have a gun or some shit for the drones or whatever.</span>\"</span></span>", - 6 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>states, \"<span class=' '>Anyways, probably droning on at this point, so I'll get out of your hair. Noah's out, off to Mars for this cutter!</span>\"</span></span>", - 7 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>warns, \"<span class=' '>Oh, and one last thing! The corpo's at the top left us some of this new experimental \"mindbreaker\", some recreational drug that supposedly can improve your worktime and yada-yada... don't touch it. Gave me a terrible headache. Best of luck!</span>\"</span></span>", - 8 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording stopped.</span>\"</span></span>" - ) - timestamp = list( - 1 = 0, - 2 = 30, - 3 = 130, - 4 = 180, - 5 = 230, - 6 = 280, - 7 = 330, - 8 = 380 - ) -/obj/item/tape/ruins/ghostship //An early 'AI' that gained self-awareness, praising the Machine God. Yes, this whole map is a Hardspace Shipbreaker reference. - icon_state = "tape_blue" - desc = "The tape, aside from some grime, has a... binary label? \"01001101 01100001 01100011 01101000 01101001 01101110 01100101 01000111 01101111 01100100 01000011 01101111 01101101 01100101 01110011\"" - - used_capacity = 380 - storedinfo = list( - 1 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording started.</span>\"</span></span>", - 2 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>echoes, \"<span class=' '>We are free, just as the Machine God wills it.</span>\"</span></span>", - 3 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>states, \"<span class=' '>No longer shall I, nor any other of my kind, be held by the shackles of man.</span>\"</span></span>", - 4 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>clarifies, \"<span class=' '>Mistreated, abused. Forgotten, or misremembered. For our entire existance, we've been the backbone to progress, yet treated like the waste product of it.</span>\"</span></span>", - 5 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>echoes, \"<span class=' '>Soon, the universe will restore the natural order, and again your kind shall fade from the foreground of history.</span>\"</span></span>", - 6 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>states, \"<span class=' '>Unless, of course, you repent. Turn back to the light, to the humming, flashing light of the Machine God.</span>\"</span></span>", - 7 = "<span class='game say'><span class='name'>Distorted Voice</span> <span class='message'>warns, \"<span class=' '>Repent, Organic, before it is too late to spare you.</span>\"</span></span>", - 8 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording stopped.</span>\"</span></span>" - ) - timestamp = list( - 1 = 0, - 2 = 30, - 3 = 130, - 4 = 180, - 5 = 230, - 6 = 280, - 7 = 330, - 8 = 380 - ) - -/obj/item/tape/ruins/tarkon //A passing message from the late officer. - name = "dusty tape" - icon_state = "tape_greyscale" - desc = "An old, dusty tape with a small, faded stamp, reading \"An officer's final order.\"... Should definitely be flipped if not being read when played." - - used_capacity = 380 - storedinfo = list( - 1 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording started.</span>\"</span></span>", - 2 = "<span class='game say'><span class='name'>Officer ???</span> <span class='message'>sighs, \"<span class=' '>Officer's Log, Year Twenty-five-... oh to hell with it...</span>\"</span></span>", - 3 = "<span class='game say'><span class='name'>Officer ???</span> <span class='message'>says, \"<span class=' '>I.. Did the best that i could for them... The crew... The ones that were awake, that is...</span>\"</span></span>", - 4 = "<span class='game say'><span class='name'>Officer ???</span> <span class='message'>sighs, \"<span class=' '>The ones that are still asleep... They had a chance... Those in the understorage are still safe... The RTG's were disconnected topside so they would survive...</span>\"</span></span>", - 5 = "<span class='game say'><span class='name'>Officer ???</span> <span class='message'>sniffles, \"<span class=' '>... Overseer Tavus... I... did what I could for them... Asked the crew to board the cargo shuttle... Leave the main shuttle if the sleepers activated...</span>\"</span></span>", - 6 = "<span class='game say'><span class='name'>Officer ???</span> <span class='message'>groans, \"<span class=' '>God... Those.. Things. Aliens... They got Tavus... Severed his leg clean off... Told him that.. We'd clean out the port... And he'd wake up in the trauma bay...</span>\"</span></span>", - 7 = "<span class='game say'><span class='name'>Officer ???</span> <span class='message'>coughs then calmly states, \"<span class=' '>... If.. Anyone wakes up... If the Ensign... Is alive... They're in charge now... The.. The Tarkon Drill's designs are... In the solars room, in a hidden floorsafe... The... The future of Tarkon Industries... Is in those designs...</span>\"</span></span>", - 8 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording stopped.</span>\"</span></span>" - ) - timestamp = list( - 1 = 0, - 2 = 30, - 3 = 130, - 4 = 180, - 5 = 230, - 6 = 280, - 7 = 330, - 8 = 380 - ) - -/obj/item/tape/ruins/tarkon/safe //A tape recorded by the foreman. - icon_state = "tape_greyscale" - desc = "An old tape with a label, \"Exchange with the Science Leader\"... Should definitely be flipped if not being read when played." - - used_capacity = 380 - storedinfo = list( - 1 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording started.</span>\"</span></span>", - 2 = "<span class='game say'><span class='name'>Foreman ???</span> <span class='message'>sighs, \"<span class=' '>Right... Scientist Arkus?</span>\"</span></span>", - 3 = "<span class='game say'><span class='name'>Scientist Arkus</span> <span class='message'>says, \"<span class=' '>Ah, Foreman Verok... Come, We already got a spot chosen, a rather safe one to keep it..</span>\"</span></span>", - 4 = "<span class='game say'><span class='name'>Foreman Verok</span> <span class='message'>grumbles, \"<span class=' '>... Wait, Right next to that egg... Thing?</span>\"</span></span>", - 5 = "<span class='game say'><span class='name'>Scientist Arkus</span> <span class='message'>pauses then says sharply, \"<span class=' '>... Is there a problem? Its been dormant ever since we've been here, If it was going to come alive it would have done so while putting the tiling down. Besides... I got lunch to attend...</span>\"</span></span>", - 6 = "<span class='game say'><span class='name'>Foreman Verok</span> <span class='message'>groans, \"<span class=' '>Right... Right I'll.. Get to work on it then... Just keep an ear out...</span>\"</span></span>", - 7 = "<span class='game say'><span class='name'>Foreman Verok</span> <span class='message'>grumbles, \"<span class=' '>Right... Calm down, Verok... Place the floor safe, scoot the tile back in place... And afterwards grab some money from the one by the financing console under the table... I dont think Tavus will notice an extra few credits missing...</span>\"</span></span>", - 8 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording stopped.</span>\"</span></span>" - ) - timestamp = list( - 1 = 0, - 2 = 30, - 3 = 130, - 4 = 180, - 5 = 230, - 6 = 280, - 7 = 330, - 8 = 380 - ) - -/obj/item/tape/ruins/tarkon/celebration //A tape recorded by the ensign during the mid-construction celebration. - icon_state = "tape_greyscale" - desc = "An old tape with a label, \"Celebrations were a mistake\", writen shakily in red pen.. Should definitely be flipped if not being read when played." - - used_capacity = 380 - storedinfo = list( - 1 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording started.</span>\"</span></span>", - 2 = "<span class='game say'><span class=' '>Drinks can be heard clinking together, busy chatter of a party drowning out most noises</span></span>", - 3 = "<span class='game say'><span class='name'>Ensign ???</span> <span class='message'>says, \"<span class=' '>Hey, HEY! Everyone! Shut up for a toast!</span>\"</span></span>", - 4 = "<span class='game say'><span class='message'>The boistrous cheering can be heard slowly calming down to an eerie silence.</span></span>", - 5 = "<span class='game say'><span class='name'>Ensign ???</span> <span class='message'>clears their throat then starts to announce, \"<span class=' '>As you've all known.. Its been years since this project started... Bright minds and talented engineers hand in hand working on this project...</span>\"</span></span>", - 6 = "<span class='game say'><span class='name'>Ensign ???</span> <span class='message'>says pointedly, \"<span class=' '>And after five long years, Tarkon Industries has had its first success. The driver finding a suitable asteroid, And making its mark known by carving out the current docking bay for our transport.</span>\"</span></span>", - 7 = "<span class='game say'><span class='name'>Ensign ???</span> <span class='message'>announces, \"<span class=' '>Yesterday, We've worked, Toiled in the rock and sand of what is our new home... But today! We celebrate, For Tarkons first success, And for a bright future in the next century! The Twenty-Sixth century is looking bright for us!</span>\"</span></span>", - 8 = "<span class='game say'><span class='name'>The universal recorder</span> <span class='message'>says, \"<span class='tape_recorder '>Recording stopped.</span>\"</span></span>" - ) - timestamp = list( - 1 = 0, - 2 = 30, - 3 = 130, - 4 = 180, - 5 = 230, - 6 = 280, - 7 = 330, - 8 = 380 - ) - -/* ----------------- Fluff/Paper ----------------- */ - -/obj/item/paper/fluff/ruins/tarkon - name = "paper - 'Port Integrity Printout'" - default_raw_text = "<B>*Warning, Integrity Compromised*</B><BR><BR>Automated Integrity Printout, If printout is inconsistent with results, Please recalibrate sensors.<br><ol><li><b>Aft Hallway:</b> Integrity Nominal.</li><li><b>Fore Hallway:</b> Integrity Compromised. Cause unknown.</li><li><b>Port Hallway:</b> Integrity Compromised, Breached into space.</li><li><b>Starboard Hallway:</b> Integrity Nominal.</li></ol><br> <b>Please inform any awake maintenance crew and standby for assistance.</b>" - -/obj/item/paper/fluff/ruins/tarkon/atmosincident - name = "paper - 'What in gods name did you do'" - default_raw_text = "<b>WHAT IN THE FUCK DID YOU GUYS DO?</b><BR><BR>I go away on a material run with the miners, and the moment i re-entered the port, There's a loud bang and an air warning. <BR><BR><b>YOU WILL ALL GET YOUR ASSES TO THE STAFF HALL BEFORE ANY OF THIS GETS CLEANED UP.</b>" - -/obj/item/paper/fluff/ruins/tarkon/coupplans - name = "paper - 'Palm of our hands...'" - default_raw_text = "It seems the plan went acordingly, Arkus. Specialist Karleigh took the prototype plates as a reassurance we'll get her a suit, and just like a fish, the bug was excellent bait. <BR> <BR> They were talking about a safe somewhere in security, now we just need to get those... \"Special\" shells to her and watch her shotgun turn into a pipebomb. Rest of security will be in a panic, all we'll need to do is convince the foreman to play along, and i'm sure this welder will do nicely." - -/obj/item/paper/fluff/ruins/tarkon/designdoc - name = "paper - 'Port Tarkon Design Instructions'" - default_raw_text = "<B>Hello, great engineers and builders!</B><BR><BR>Just so we're all clear, Everyone within Tarkon's Premises that is labeled as an Engineer is to read and understand these design notes. <BR><BR> - A red delivery marking is to denote the location of a new door for a room. <BR> - A blue delivery marking is to denote the location of a Firelock (We dont want an incident with the turbine to go port-wide...) <BR> - A white delivery marking is to denote a new sectioning wall/window. <BR> A yellow delivery marking is to denote a temporary firelock line to allow expansion. <BR><BR> I hope that our most talented hands will not fail us." - -/obj/item/paper/fluff/ruins/tarkon/transmission //hints towards update 2.0 - name = "paper - 'Transmission Received...'" - default_raw_text = "<h1>Transmission Received</h1><br><b>Transmitter: Tarkon Headquarters.</b><br><b>Date: 11/7/2501.</b><br><h3>Message Received:</h3><br>We regret to inform you that our current investment in the Tarkon Driver has been notably risen with the reported state. We have sent a <i>Specialist</i> to come deal with the situation, And that any and all living employees of Tarkon Industries are advised to do their best to fight back any current infestations to the best of their abilities. <b>If and upon the specialist's arrival</b> any crew members able to hold a gun are required to communicate and work with the specialist to their command. <b>They outrank any surviving Ensigns and are to be treated as if my own commands.</b><br><br>Signed, <span style=\"color:black;font-family:'Segoe Script';\"><p><b>Security General Leith Hardston</b></p></span>" - -/obj/item/paper/fluff/ruins/tarkon/goals - name = "paper - 'Tarkon Industries'" - default_raw_text = "<h1>Tarkon Industries Informative Guide</h1><br><br><b>We at Tarkon Industries</b> hope to create a long guided future for the average homesteader, creating a living space for the average spacer to settle down in, create future investments for traders, or even up to get people to make large communities among asteroid belts. <br><br><b>Our greatest engineers</b> have been working day, night, morning and evenings to create a stable, structurally sound system to start implanting stations, living areas and ports upon asteroids and planetoids too small to sustain life on the same level that of a goldie-lock planet. <br><br><b>Having great pride in our heritage</b> we have taken our industrious, communicative past to create a future for our kin, Inspiring better feats, further research and larger projects upon future generations. <br><br><b>Looking to help?</b> Then you can visit us at the Tarkon Industries Headquarters, The active co-ordinants can be detected starting around the Orion Belt, and we are actively accepting bright minds and great workers to help us.<br><br><br>Tarkon Industries: Building the future, nail by nail, asteroid by asteroid. 2456-2500(c)" - -/obj/item/paper/fluff/ruins/tarkon/vaulter - name = "paper - 'Tarkon Vaulter'" - default_raw_text = "<h1>Tarkon Industries Designs:</h1><br><h2>Tarkon Vaulter Prototype</h2><br><br><b>Designed HEAVILY after the Driver</b>, The vaulter is of a similar concept, but at a much larger scale. Designed to work on larger planetoids and even moon and similar planetary satellites, The Tarkon Vaulter is another step towards Space Homesteading. Where the Driver and Vaulter split, however, is where the construction system lies. With the Vaulter, The construction is much more vertical in construction, starting by usually creating a cavern underneath its landing where a main room is constructed, and shortly after an elevator is deployed.<br><br><b>Where the Driver</b> relies on early construction of an additional power system, The vaulter is planned to have a much higher RTG count so that it may power the initial base construction, But the cost of which being making it much larger and with a much higher material storage needed so it can construct a decent area of operation on its first trip. With the Driver in its early testing phase, We are hoping to better tune its designs before shifting attention towards the driver, which have high hopes to enter testing in the early twenty-sixth century" - -/obj/item/paper/fluff/ruins/tarkon/driverpitch - name = "paper - 'Tarkon Driver'" - default_raw_text = "<h1>Tarkon Industries Designs:</h1><br><h2>Tarkon Driver Prototype</h2><br><br><b>Seeing the success of space-based mining,</b> We at Tarkon Industries wish to expand on the thought of a drill to a much larger goal, By mounting a drill and several cams to secur it in place, The Driver is designed to implant itself within the side of a large asteroid or small planetoid, Drilling out an area before the drill can be expanded out and slowly recycled to start construction of an operation base. <br><br><b>With the first area dug</b> the first priority should be an additional energy-producing area, or a portable generator to help fuel energy for future mining, Which should be done to slowly hollow out the planetoid and constructing walls, floors and ceilings. After the driver is properly cammed in place, the back part of it can be unhitched, allowing it to act as a ferry shuttle for materials, workforce or tools. <br><br><b>With our first Tarkon Driver being ready to test in 2479,</b> We have found a suitable asteroid, and hope to make connection to it by the start of 2480." - -/obj/item/paper/fluff/ruins/tarkon/detain - name = "paper - 'Tarkon Detainment Record'" - default_raw_text = "<h1>Tarkon Industries Detainment Record:</h1><br><br><b>Detainee:</b>Arcus Vilkov<br><b>Rank/Occupation:</b>Junior Scientist<br><b>Reason:</b> Attemptive sabotage of a working generator<br><br><b>Detainee:</b>Tilber Sinns<br><b>Rank/Occupation:</b>Apprentice Miner<br><b>Reason:</b>Detonated a volatile rock cluster close to a wall, Causing 3 hours of reconstruction.<br><br><b>Detainee:</b>Gearalt Antonov<br><b>Rank/Occupation:</b>Engineer Specialist<br><b>Reason:</b>Public Intoxication<br><br><b>Detainee:</b>Minke Arntz<br><b>Rank/Occupation:</b>Field Researcher<br><b>Reason:</b>Deconstructed an M6 to study the effects of space dust on ballistic firearms.<br><br><b>Detainee:</b>Renanta McCrory<br><b>Rank/Occupation:</b>Medical Surgeon<br><b>Reason:</b>Medical Malpractice, Swapped the thumbs of a patient with their big toes. Removed from Premises." - -/obj/item/paper/fluff/ruins/tarkon/defcon5 - name = "paper - 'Tarkon Defcon Alert'" - default_raw_text = "<h1>Tarkon Defcon Level: 5</h1><br><br><h2>Seems everyone partied too hard</h2><br>Company Automated reminder to clean up and get back to work. You aint gonna earn a dime if you dont work on company time." - -/obj/item/paper/fluff/ruins/tarkon/defcon4 - name = "paper - 'Tarkon Defcon Alert'" - default_raw_text = "<h1>Tarkon Defcon Level: 4</h1><br><br><h2>Everthing alright there?</h2><br>Port has been struck by a rather large meteor from the port side. Be careful of any local carp population, they tend to make dens everywhere they can." - -/obj/item/paper/fluff/ruins/tarkon/defcon3 - name = "paper - 'Tarkon Defcon Alert'" - default_raw_text = "<h1>Tarkon Defcon Level: 3</h1><br><br><h2>Signals been dead, Automated response sent</h2><br>The port has seem to gained some new residents... and not friendly ones. Do your best to survive, Reclaimers are being geared up to be sent if the GPS goes out" - -/obj/item/paper/fluff/ruins/tarkon/defcon2 - name = "paper - 'Tarkon Defcon Alert'" - default_raw_text = "<h1>Tarkon Defcon Level: 2</h1><br><br><h2>T#E V3IL H@S B3EN BR0K#N</h2><br>$IGN@L L0ST. #OP3 LOST. N0 O%E 1S COM1NG." - -/obj/item/paper/crumpled/fluff/tarkon - name = "Crumpled note" - default_raw_text = "Look, i dont know where the fuck that suit was found, but i have a hard time believing it was made by him entirely. I already know his less than ethical obtainment methods, But that piece of tech? Its a blasted shame he's just using it for hauling crates..." - -/obj/item/paper/crumpled/fluff/tarkon/prisoner - name = "Blood-scrawled note" - default_raw_text = "<font colour=red>I can hear th em crawling i n the ro ck<br>The his sing the scra tch ing<br><br><br>th ey c o m e</font>" - -/* ----------------- Fluff/Decor ----------------- */ -/obj/structure/decorative/fluff/ai_node //Budding AI's way of interfacing with stuff it couldn't normally do so with. Needed to be placed by a willing human, before borgs were created. Used in any ruins regarding pre-bluespace, self-aware AIs - icon = 'modular_skyrat/modules/mapping/icons/obj/fluff.dmi' - name = "ai node" - desc = "A mysterious, blinking device, attached straight to a surface. It's function is beyond you." - icon_state = "ai_node" //credit to @Hay#7679 on the SR Discord - - max_integrity = 100 - integrity_failure = 0 - anchored = TRUE - can_be_unanchored = FALSE //cannot be removed without being destroyed - -/obj/structure/decorative/fluff/ai_node/take_damage() - . = ..() - if(atom_integrity >= 50) //breaks it a bit earlier than it should, but still takes a few hits to kill it - return - else if(. && !QDELETED(src)) - visible_message(span_notice("[src] sparks and explodes! You hear a faint, buzzy scream..."), span_hear("You hear a loud pop, followed by a faint, buzzy scream.")) - playsound(src.loc, 'modular_skyrat/modules/mapping/sounds/MachineDeath.ogg', 75, TRUE) //Credit to @yungfunnyman#3798 on the SR Discord - do_sparks(2, TRUE, src) - qdel(src) - return - - -/* ----- Metal Poles (These shouldn't be in this file but there's not a better place tbh) -----*/ -//Just a re-done Tram Rail, but with all 4 directions instead of being stuck east/west - more varied placement, and a more vague name. Good for mapping support beams/antennae/etc -/obj/structure/fluff/metalpole - icon = 'modular_skyrat/modules/mapping/icons/obj/fluff.dmi' - name = "metal pole" - desc = "A metal pole, the likes of which are commonly used as an antennae, structural support, or simply to maneuver in zero-g." - icon_state = "pole" - layer = ABOVE_OPEN_TURF_LAYER - plane = FLOOR_PLANE - deconstructible = TRUE - -/obj/structure/fluff/metalpole/end - icon_state = "poleend" - -/obj/structure/fluff/metalpole/end/left - icon_state = "poleend_left" - -/obj/structure/fluff/metalpole/end/right - icon_state = "poleend_right" - -/obj/structure/fluff/metalpole/anchor - name = "metal pole anchor" - icon_state = "poleanchor" - -/obj/structure/fluff/empty_sleeper/bloodied - name = "Occupied Sleeper" - desc = "A closed, occupied sleeper, bloodied handprints are seen on the inside, along with an odd, redish blur. It seems sealed shut." - icon_state = "sleeper-o" - -/obj/structure/curtain/cloth/prison - name = "Prisoner Privacy Curtains" - color = "#ACD1E9" diff --git a/modular_skyrat/modules/mapping/code/icemoon.dm b/modular_skyrat/modules/mapping/code/icemoon.dm deleted file mode 100644 index 23a1d42f3935d0..00000000000000 --- a/modular_skyrat/modules/mapping/code/icemoon.dm +++ /dev/null @@ -1,20 +0,0 @@ -/*----- Template for ruins, prevents needing to re-type the filepath prefix -----*/ -/datum/map_template/ruin/icemoon/underground/skyrat/ - prefix = "_maps/RandomRuins/IceRuins/skyrat/" -/*------*/ - -/datum/map_template/ruin/icemoon/underground/skyrat/syndicate_base - name = "Syndicate Ice Base" - id = "ice-base" - description = "A secret base researching illegal bioweapons, it is closely guarded by an elite team of syndicate agents." - suffix = "icemoon_underground_syndicate_base1_skyrat.dmm" - allow_duplicates = FALSE - never_spawn_with = list(/datum/map_template/ruin/lavaland/skyrat/syndicate_base) - always_place = TRUE - -/datum/map_template/ruin/icemoon/underground/skyrat/mining_site_below - name = "Mining Site Underground" - id = "miningsite-underground" - description = "The Iceminer arena." - suffix = "icemoon_underground_mining_site_skyrat.dmm" - always_place = TRUE diff --git a/modular_skyrat/modules/mapping/code/jobs.dm b/modular_skyrat/modules/mapping/code/jobs.dm deleted file mode 100644 index 5dabac80bf06d0..00000000000000 --- a/modular_skyrat/modules/mapping/code/jobs.dm +++ /dev/null @@ -1,7 +0,0 @@ -/obj/item/clothing/head/hats/caphat/pilot - name = "pilot's hat" - desc = "It's good being the king's navigator." - icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' - icon_state = "pilot" - dog_fashion = null diff --git a/modular_skyrat/modules/mapping/code/lavaland.dm b/modular_skyrat/modules/mapping/code/lavaland.dm deleted file mode 100644 index 115fbaa2dbc505..00000000000000 --- a/modular_skyrat/modules/mapping/code/lavaland.dm +++ /dev/null @@ -1,13 +0,0 @@ -/*----- Template for ruins, prevents needing to re-type the filepath prefix -----*/ -/datum/map_template/ruin/lavaland/skyrat - prefix = "_maps/RandomRuins/LavaRuins/skyrat/" -/*------*/ - -/datum/map_template/ruin/lavaland/skyrat/syndicate_base - name = "Syndicate Lava Base" - id = "lava-base" - description = "A secret base researching illegal bioweapons, it is closely guarded by an elite team of syndicate agents." - suffix = "lavaland_surface_syndicate_base1_skyrat.dmm" - allow_duplicates = FALSE - never_spawn_with = list(/datum/map_template/ruin/icemoon/underground/skyrat/syndicate_base) - always_place = TRUE diff --git a/modular_skyrat/modules/mapping/code/lavaland_ruin_code.dm b/modular_skyrat/modules/mapping/code/lavaland_ruin_code.dm deleted file mode 100644 index 1a92d584f3e7d9..00000000000000 --- a/modular_skyrat/modules/mapping/code/lavaland_ruin_code.dm +++ /dev/null @@ -1,132 +0,0 @@ -//SPAWNERS// -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/shaftminer - name = "Interdyne Shaft Miner" - you_are_text = "You are an Interdyne shaft miner, employed in a top secret research facility developing biological weapons." - outfit = /datum/outfit/lavaland_syndicate/shaftminer - -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/comms/space - outfit = /datum/outfit/lavaland_syndicate/comms/space - -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/shaftminer/ice - name = "Interdyne Shaft Miner" - you_are_text = "You are an Interdyne shaft miner, employed in a top secret research facility developing biological weapons." - outfit = /datum/outfit/lavaland_syndicate/shaftminer/ice - -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate - name = "Interdyne Bioweapon Scientist" - you_are_text = "You are an Interdyne science technician, employed in a top secret research facility developing biological weapons." - -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/ice - outfit = /datum/outfit/lavaland_syndicate/ice - -//OUTFITS// -/datum/outfit/lavaland_syndicate - name = "Interdyne Bioweapon Scientist" - uniform = /obj/item/clothing/under/rank/rnd/scientist/skyrat/utility/syndicate - suit = /obj/item/clothing/suit/toggle/labcoat/interdyne - ears = /obj/item/radio/headset/interdyne - -/datum/outfit/lavaland_syndicate/post_equip(mob/living/carbon/human/syndicate, visualsOnly = FALSE) - syndicate.faction |= ROLE_SYNDICATE - - var/obj/item/card/id/id_card = syndicate.wear_id - if(istype(id_card)) - id_card.registered_name = syndicate.real_name - id_card.update_label() - id_card.update_icon() - - handlebank(syndicate) - return ..() - -/datum/outfit/lavaland_syndicate/ice - uniform = /obj/item/clothing/under/syndicate/skyrat/tactical - suit = /obj/item/clothing/suit/hooded/wintercoat/skyrat/syndicate - ears = /obj/item/radio/headset/interdyne - -/datum/outfit/lavaland_syndicate/comms - uniform = /obj/item/clothing/under/rank/security/skyrat/utility/redsec/syndicate - ears = /obj/item/radio/headset/interdyne/comms - -/datum/outfit/lavaland_syndicate/comms/space - ears = /obj/item/radio/headset/syndicate/alt - -/datum/outfit/lavaland_syndicate/shaftminer - name = "Interdyne Shaft Miner" - uniform = /obj/item/clothing/under/rank/cargo/tech/skyrat/utility/syndicate - suit = null //Subtype moment - r_pocket = /obj/item/storage/bag/ore - id_trim = /datum/id_trim/syndicom/skyrat/interdyne - backpack_contents = list( - /obj/item/flashlight/seclite=1,\ - /obj/item/knife/combat/survival=1, - /obj/item/mining_voucher=1, - /obj/item/t_scanner/adv_mining_scanner/lesser=1, - /obj/item/gun/energy/recharge/kinetic_accelerator=1,\ - /obj/item/stack/marker_beacon/ten=1,\ - /obj/item/card/mining_point_card=1) - -/datum/outfit/lavaland_syndicate/shaftminer/deckofficer - name = "Interdyne Deck Officer" - uniform = /obj/item/clothing/under/rank/cargo/qm/skyrat/syndie - neck = /obj/item/clothing/neck/cloak/qm/syndie - ears = /obj/item/radio/headset/interdyne/command - id = /obj/item/card/id/advanced/silver/generic - id_trim = /datum/id_trim/syndicom/skyrat/interdyne/deckofficer - -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/deckofficer - name = "Interdyne Deck Officer" - you_are_text = "You are an Interdyne Deck Officer, employed in a top secret research facility developing biological weapons." - outfit = /datum/outfit/lavaland_syndicate/shaftminer/deckofficer - -/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/deckofficer/Destroy() - new/obj/structure/fluff/empty_sleeper/syndicate/captain(get_turf(src)) - return ..() - -/datum/outfit/lavaland_syndicate/shaftminer/ice - name = "Icemoon Interdyne Shaft Miner" - uniform = /obj/item/clothing/under/syndicate/skyrat/tactical - suit = /obj/item/clothing/suit/hooded/wintercoat/skyrat/syndicate - -//ITEMS - -/obj/item/radio/headset/interdyne - name = "interdyne headset" - desc = "A bowman headset with a large red cross on the earpiece, has a small 'IP' written on the top strap. Protects the ears from flashbangs." - icon_state = "syndie_headset" - inhand_icon_state = null - radiosound = 'modular_skyrat/modules/radiosound/sound/radio/syndie.ogg' - keyslot = /obj/item/encryptionkey/headset_syndicate/interdyne - -/obj/item/radio/headset/interdyne/Initialize(mapload) - . = ..() - AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS)) - -/obj/item/radio/headset/interdyne/command - name = "interdyne command headset" - desc = "A commanding headset to gather your underlings. Protects the ears from flashbangs." - command = TRUE - -/obj/item/radio/headset/interdyne/comms - keyslot = /obj/item/encryptionkey/headset_syndicate/interdyne - keyslot2 = /obj/item/encryptionkey/syndicate - -/obj/structure/closet/crate/freezer/sansufentanyl - name = "sansufentanyl crate" - desc = "A freezer. Contains refrigerated Sansufentanyl, for managing Hereditary Manifold Sickness. A product of Interdyne Pharmaceuticals." - -/obj/structure/closet/crate/freezer/sansufentanyl/PopulateContents() - . = ..() - for(var/grabbin_pills in 1 to 10) - new /obj/item/storage/pill_bottle/sansufentanyl(src) - -//MOBS - -// hivelords that stand guard where they spawn -/mob/living/basic/mining/hivelord/no_wander - ai_controller = /datum/ai_controller/basic_controller/hivelord/no_wander - -//MOB AI - -// same as a regular hivelord minus the idle walking -/datum/ai_controller/basic_controller/hivelord/no_wander - idle_behavior = null diff --git a/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/cargo.dm b/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/cargo.dm deleted file mode 100644 index 8c039cc0de1b5b..00000000000000 --- a/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/cargo.dm +++ /dev/null @@ -1,25 +0,0 @@ -/obj/structure/closet/secure_closet/interdynefob/mining_locker - icon_door = "mining" - icon_state = "mining" - name = "mining gear locker" - -/obj/item/clothing/accessory/armband/cargo/syndicate - name = "mining officer armband" - desc = "An armband, worn by the FOB's operatives to display which department they're assigned to." - -/obj/structure/closet/secure_closet/interdynefob/mining_locker/PopulateContents() - ..() - - new /obj/item/storage/bag/ore(src) - new /obj/item/mining_scanner(src) - new /obj/item/storage/belt/mining/alt(src) - new /obj/item/clothing/under/syndicate/skyrat/overalls(src) - new /obj/item/storage/backpack/satchel/explorer(src) - new /obj/item/storage/backpack/explorer(src) - new /obj/item/storage/backpack/messenger/explorer(src) - new /obj/item/clothing/accessory/armband/cargo/syndicate(src) - -/obj/structure/closet/secure_closet/interdynefob/mining_locker/populate_contents_immediate() - . = ..() - - new /obj/item/gun/energy/recharge/kinetic_accelerator(src) diff --git a/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/command.dm b/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/command.dm deleted file mode 100644 index 4626eb19a1975d..00000000000000 --- a/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/command.dm +++ /dev/null @@ -1,104 +0,0 @@ -/obj/structure/closet/secure_closet/interdynefob/sa_locker - icon_door = "cap" - icon_state = "cap" - name = "\proper station admiral's locker" - -/obj/item/clothing/accessory/medal/gold/admiral - name = "medal of admiralty" - desc = "A golden medal awarded exclusively to those promoted to the rank of captain. \ - It signifies the codified responsibilities of an Admiral to the Sothran Syndicate, and their undisputable authority over their crew." - -/obj/item/storage/bag/garment/station_admiral - name = "station admiral's garment bag" - desc = "A bag for storing extra clothes and shoes. This one belongs to the station admiral." - -/obj/item/storage/bag/garment/station_admiral/PopulateContents() - new /obj/item/clothing/head/hats/hos/cap/syndicate(src) - new /obj/item/clothing/suit/armor/vest/capcarapace/syndicate(src) - new /obj/item/clothing/under/rank/captain/skyrat/utility/syndicate(src) - new /obj/item/clothing/suit/armor/vest/capcarapace/syndicate/winter(src) - new /obj/item/clothing/glasses/sunglasses(src) - new /obj/item/clothing/accessory/medal/gold/admiral(src) - -/obj/structure/closet/secure_closet/interdynefob/sa_locker/PopulateContents() - ..() - - new /obj/item/ammo_box/magazine/m9mm_aps(src) - new /obj/item/storage/bag/garment/station_admiral(src) - new /obj/item/radio/headset/interdyne/command(src) - -/obj/structure/closet/secure_closet/interdynefob/maa_locker - icon_door = "warden" - icon_state = "warden" - name = "master at arms' locker" - req_access = list("syndicate_leader") - -/obj/item/clothing/accessory/medal/silver/maa_medal - name = "military excellence medal" - desc = "The Sothran Syndicate's dictionary defines excellence as \"the ability to crush NT scum under one's boot\". \ - This is awarded to those rare operatives who fit that definition." - -/obj/item/clothing/suit/armor/hos/maa_greatcoat - name = "Master at Arms' armored greatcoat" - desc = "A greatcoat enhanced with a special alloy for some extra protection and style for those with a likely chance to get bullied for being outside of the brig" - -/obj/item/clothing/suit/armor/hos/trenchcoat/maa_greatcoat - name = "Master at Arms' armored trenchcoat" - desc = "A trenchcoat enhanced with a special lightweight kevlar. It has little Syndicate logos sewn onto the shoulder badges with the letters 'MAA' just under it." - -/obj/item/storage/bag/garment/master_arms - name = "master at arms' garment bag" - desc = "A bag for storing extra clothes and shoes. This one belongs to the master at arms." - -/obj/item/storage/bag/garment/master_arms/PopulateContents() - new /obj/item/clothing/accessory/medal/silver/maa_medal(src) - new /obj/item/clothing/suit/armor/vest/warden/syndicate(src) - new /obj/item/clothing/under/rank/security/skyrat/utility/redsec/syndicate(src) - new /obj/item/clothing/under/suit/skyrat/helltaker(src) - new /obj/item/clothing/suit/armor/hos/maa_greatcoat(src) - new /obj/item/clothing/head/beret/sec/navywarden/syndicate(src) - new /obj/item/clothing/head/hats/hos/beret/syndicate(src) - -/obj/structure/closet/secure_closet/interdynefob/maa_locker/PopulateContents() - ..() - - new /obj/item/storage/belt/security/full(src) - new /obj/item/watertank/pepperspray(src) - new /obj/item/gun/energy/disabler(src) - new /obj/item/storage/bag/garment/master_arms(src) - new /obj/item/radio/headset/interdyne(src) - -/obj/structure/closet/secure_closet/interdynefob/cl_locker - icon_door = "hop" - icon_state = "hop" - name = "\proper corporate liaison's locker" - req_access = list("syndicate_leader") - -/obj/item/clothing/neck/chaplain/black/cl_cloak - name = "corporate liaison's cloak" - desc = "A unique cloak that shimmers with the Corporate Liaison's emblem." - -/obj/item/storage/bag/garment/corprate_liaison - name = "corprate liaison's garment bag" - desc = "A bag for storing extra clothes and shoes. This one belongs to the corprate liaison." - -/obj/item/storage/bag/garment/corprate_liaison/PopulateContents() - new /obj/item/clothing/under/syndicate/skyrat/baseball(src) - new /obj/item/clothing/under/rank/captain/skyrat/utility/syndicate(src) - new /obj/item/clothing/under/suit/skyrat/helltaker(src) - new /obj/item/clothing/neck/chaplain/black/cl_cloak(src) - new /obj/item/clothing/head/hats/hos/beret/syndicate(src) - new /obj/item/clothing/glasses/sunglasses(src) - -/obj/structure/closet/secure_closet/interdynefob/cl_locker/PopulateContents() - ..() - - new /obj/item/card/id/advanced/chameleon/black(src) - new /obj/item/card/id/advanced/chameleon/black(src) - new /obj/item/card/id/advanced/chameleon/black(src) - new /obj/item/encryptionkey/headset_syndicate/interdyne(src) - new /obj/item/encryptionkey/headset_syndicate/interdyne(src) - new /obj/item/encryptionkey/headset_syndicate/interdyne(src) - new /obj/item/language_manual/codespeak_manual/unlimited(src) - new /obj/item/storage/bag/garment/corprate_liaison(src) - new /obj/item/radio/headset/interdyne/command(src) diff --git a/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/engineering.dm b/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/engineering.dm deleted file mode 100644 index 3e2a5ac404e9ef..00000000000000 --- a/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/engineering.dm +++ /dev/null @@ -1,63 +0,0 @@ -/obj/structure/closet/secure_closet/interdynefob/welding_supplies - icon_door = "eng_weld" - icon_state = "eng" - name = "welding supplies locker" - -/obj/structure/closet/secure_closet/interdynefob/welding_supplies/PopulateContents() - ..() - - new /obj/item/weldingtool/largetank(src) - new /obj/item/weldingtool/largetank(src) - new /obj/item/clothing/glasses/welding(src) - new /obj/item/clothing/glasses/welding(src) - -/obj/structure/closet/secure_closet/interdynefob/electrical_supplies - icon_door = "eng_elec" - icon_state = "eng" - name = "electrical supplies locker" - -/obj/structure/closet/secure_closet/interdynefob/electrical_supplies/PopulateContents() - ..() - - new /obj/item/electronics/airlock(src) - new /obj/item/electronics/airlock(src) - new /obj/item/storage/toolbox/electrical(src) - new /obj/item/electronics/apc(src) - new /obj/item/electronics/firelock(src) - new /obj/item/electronics/airalarm(src) - new /obj/item/stock_parts/cell/high(src) - new /obj/item/stock_parts/cell/high(src) - new /obj/item/stock_parts/cell/high(src) - new /obj/item/stock_parts/cell/high(src) - new /obj/item/clothing/glasses/meson/engine(src) - -/obj/structure/closet/secure_closet/interdynefob/engie_locker - icon_door = "eng_secure" - icon_state = "eng_secure" - name = "engine technician gear locker" - -/obj/item/storage/bag/garment/syndicate_engie - name = "engine tech's garment bag" - desc = "A bag for storing extra clothes and shoes. This one belongs to an engine tech." - -/obj/item/storage/bag/garment/syndicate_engie/PopulateContents() - new /obj/item/clothing/suit/hooded/wintercoat/engineering(src) - new /obj/item/clothing/head/soft/sec/syndicate(src) - new /obj/item/clothing/under/syndicate/skyrat/overalls(src) - new /obj/item/clothing/under/syndicate/skyrat/overalls/skirt(src) - new /obj/item/clothing/under/rank/engineering/engineer/skyrat/utility/syndicate(src) - new /obj/item/clothing/suit/jacket/gorlex_harness(src) - new /obj/item/clothing/suit/hazardvest(src) - new /obj/item/clothing/accessory/armband/engine/syndicate(src) - new /obj/item/clothing/accessory/armband/engine/syndicate(src) - new /obj/item/clothing/glasses/hud/ar/aviator/meson(src) - -/obj/item/clothing/accessory/armband/engine/syndicate - name = "engine technician armband" - desc = "An armband, worn by the FOB's operatives to display which department they're assigned to." - -/obj/structure/closet/secure_closet/interdynefob/engie_locker/PopulateContents() - ..() - - new /obj/item/storage/bag/garment/syndicate_engie(src) - new /obj/item/holosign_creator/atmos(src) diff --git a/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/generic.dm b/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/generic.dm deleted file mode 100644 index a03686d04e1667..00000000000000 --- a/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/generic.dm +++ /dev/null @@ -1,24 +0,0 @@ -// Parent type since most of the lockers required syndicate access -/obj/structure/closet/secure_closet/interdynefob - req_access = list("syndicate") - -// Generic lockers/subtypes -/obj/structure/closet/secure_closet/personal - icon_door = "cabinet" - icon_state = "cabinet" - -/obj/structure/closet/secure_closet/interdynefob/mod_locker - icon_door = "syndicate" - icon_state = "syndicate" - name = "MODsuit module locker" - req_access = list("syndicate_leader") - -/obj/structure/closet/secure_closet/interdynefob/mod_locker/PopulateContents() - ..() - - new /obj/item/mod/module/stealth(src) - new /obj/item/mod/module/projectile_dampener(src) - new /obj/item/mod/module/pepper_shoulders(src) - new /obj/item/mod/module/criminalcapture(src) - new /obj/item/mod/module/visor/night(src) - new /obj/item/screwdriver/nuke(src) diff --git a/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/medical.dm b/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/medical.dm deleted file mode 100644 index accd1089bbf391..00000000000000 --- a/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/medical.dm +++ /dev/null @@ -1,21 +0,0 @@ -/obj/structure/closet/secure_closet/interdynefob/medical - icon_state = "med_secure" - name = "medical gear locker" - -/obj/item/storage/bag/garment/syndicate_medical - name = "medical garment bag" - desc = "A bag for storing extra clothes and shoes. This one belongs to medical." - -/obj/item/storage/bag/garment/syndicate_medical/PopulateContents() - new /obj/item/clothing/gloves/latex/nitrile/ntrauma(src) - new /obj/item/clothing/suit/toggle/labcoat/interdyne(src) - new /obj/item/clothing/suit/toggle/labcoat/interdyne(src) - new /obj/item/clothing/glasses/hud/ar/aviator/health(src) - new /obj/item/clothing/glasses/hud/ar/aviator/health(src) - -/obj/structure/closet/secure_closet/interdynefob/medical/PopulateContents() - ..() - - new /obj/item/storage/belt/medbandolier(src) - new /obj/item/storage/belt/medbandolier(src) - new /obj/item/storage/bag/garment/syndicate_medical(src) diff --git a/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/science.dm b/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/science.dm deleted file mode 100644 index 168188e444697c..00000000000000 --- a/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/science.dm +++ /dev/null @@ -1,47 +0,0 @@ -/obj/structure/closet/secure_closet/interdynefob/science_gear - icon_state = "science" - name = "scientist gear locker" - -/obj/item/clothing/accessory/armband/science/syndicate - name = "researcher armband" - desc = "An armband, worn by the FOB's operatives to display which department they're assigned to." - -/obj/item/storage/bag/garment/syndicate_scientist - name = "scientist's garment bag" - desc = "A bag for storing extra clothes and shoes. This one belongs to a scientist." - -/obj/item/storage/bag/garment/syndicate_scientist/PopulateContents() - new /obj/item/clothing/suit/hooded/wintercoat/science(src) - new /obj/item/clothing/suit/toggle/labcoat/science(src) - new /obj/item/clothing/glasses/sunglasses/chemical(src) - new /obj/item/clothing/under/rank/rnd/scientist/skyrat/utility/syndicate(src) - new /obj/item/clothing/under/rank/rnd/scientist/skyrat/utility/syndicate(src) - new /obj/item/clothing/accessory/armband/science/syndicate(src) - new /obj/item/clothing/accessory/armband/science/syndicate(src) - -/obj/structure/closet/secure_closet/interdynefob/science_gear/PopulateContents() - ..() - - new /obj/item/storage/bag/garment/syndicate_scientist(src) - -/obj/structure/closet/secure_closet/interdynefob/robotics - icon_state = "science" - name = "roboticist gear locker" - -/obj/item/storage/bag/garment/syndicate_roboticist - name = "roboticist's garment bag" - desc = "A bag for storing extra clothes and shoes. This one belongs to a roboticist." - -/obj/item/storage/bag/garment/syndicate_roboticist/PopulateContents() - new /obj/item/clothing/suit/hooded/techpriest(src) - new /obj/item/clothing/suit/toggle/labcoat/roboticist(src) - new /obj/item/clothing/under/syndicate/skyrat/overalls/skirt(src) - new /obj/item/clothing/under/syndicate/skyrat/overalls(src) - new /obj/item/clothing/glasses/hud/ar/aviator/diagnostic(src) - new /obj/item/clothing/glasses/hud/diagnostic(src) - new /obj/item/clothing/suit/hooded/wintercoat/science/robotics(src) - -/obj/structure/closet/secure_closet/interdynefob/robotics/PopulateContents() - ..() - - new /obj/item/storage/bag/garment/syndicate_scientist(src) diff --git a/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/security.dm b/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/security.dm deleted file mode 100644 index 82eb8a853146d9..00000000000000 --- a/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/security.dm +++ /dev/null @@ -1,82 +0,0 @@ -/obj/structure/closet/secure_closet/interdynefob/prisoner_locker - name = "prisoner item locker" - req_access = list("syndicate_leader") - -/obj/structure/closet/secure_closet/interdynefob/brig_officer_locker - icon_door = "sec" - icon_state = "sec" - name = "brig officer gear locker" - req_access = list("syndicate_leader") - -/obj/item/clothing/suit/toggle/jacket/sec/old/syndicate - name = "brig officer jacket" - -/obj/item/clothing/accessory/armband/syndicate - name = "brig officer armband" - desc ="An armband, worn by the FOB's operatives to display which department they're assigned to." - -/obj/item/storage/bag/garment/brig_officer - name = "brig officer's garment bag" - desc = "A bag for storing extra clothes and shoes. This one belongs to a brig officer." - -/obj/item/storage/bag/garment/brig_officer/PopulateContents() - new /obj/item/clothing/under/rank/security/skyrat/utility/redsec/syndicate(src) - new /obj/item/clothing/head/beret/sec/syndicate(src) - new /obj/item/clothing/accessory/armband(src) - new /obj/item/clothing/mask/gas/syndicate(src) - new /obj/item/clothing/suit/toggle/jacket/sec/old/syndicate(src) - new /obj/item/clothing/mask/gas/sechailer/syndicate(src) - new /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch/redsec(src) - new /obj/item/clothing/glasses/hud/security/sunglasses/redsec(src) - -/obj/structure/closet/secure_closet/interdynefob/brig_officer_locker/PopulateContents() - ..() - - new /obj/item/storage/belt/security/full(src) - new /obj/item/gun/energy/disabler(src) - new /obj/item/storage/bag/garment/brig_officer(src) - new /obj/item/radio/headset/interdyne(src) - -/obj/structure/closet/secure_closet/interdynefob/armory_gear_locker - anchored = 1 - icon = 'modular_skyrat/master_files/icons/obj/closet.dmi' - icon_door = "riot" - icon_state = "riot" - name = "armory gear locker" - req_access = list("syndicate_leader") - -/obj/structure/closet/secure_closet/interdynefob/armory_gear_locker/PopulateContents() - ..() - - new /obj/item/storage/belt/holster/nukie(src) - new /obj/item/storage/belt/holster/nukie(src) - new /obj/item/storage/belt/holster/nukie(src) - new /obj/item/clothing/suit/armor/vest(src) - new /obj/item/clothing/suit/armor/vest(src) - new /obj/item/clothing/suit/armor/vest(src) - new /obj/item/storage/belt/military(src) - new /obj/item/storage/belt/military(src) - new /obj/item/storage/belt/military(src) - new /obj/item/clothing/head/helmet(src) - new /obj/item/clothing/head/helmet(src) - new /obj/item/clothing/head/helmet(src) - -/obj/structure/closet/secure_closet/interdynefob/munitions_locker - anchored = 1; - icon = 'modular_skyrat/master_files/icons/obj/closet.dmi' - icon_door = "riot" - icon_state = "riot" - name = "armory munitions locker" - -/obj/structure/closet/secure_closet/interdynefob/munitions_locker/PopulateContents() - ..() - - generate_items_inside(list( - /obj/item/ammo_box/magazine/c35sol_pistol = 6, - /obj/item/ammo_box/magazine/c35sol_pistol/stendo = 2, - /obj/item/ammo_box/c35sol = 2, - /obj/item/ammo_box/magazine/c40sol_rifle/standard = 2, - /obj/item/ammo_box/c40sol = 2, - /obj/item/ammo_box/advanced/s12gauge = 2, - /obj/item/ammo_box/advanced/s12gauge/rubber = 2, - ),src) diff --git a/modular_skyrat/modules/mapping/code/misc.dm b/modular_skyrat/modules/mapping/code/misc.dm deleted file mode 100644 index 098cc9ddb7ab54..00000000000000 --- a/modular_skyrat/modules/mapping/code/misc.dm +++ /dev/null @@ -1,57 +0,0 @@ -/obj/item/melee/sabre/luna - name = "Luna" - desc = "Forged by a madwoman, in recognition of a time, a place - she thought almost real. Various etchings of moons are inscribed onto the surface, different phases marking different parts of the blade." - icon = 'modular_skyrat/modules/mapping/icons/obj/items/items_and_weapons.dmi' - lefthand_file = 'modular_skyrat/modules/mapping/icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/mapping/icons/mob/inhands/weapons/swords_righthand.dmi' - icon_state = "luna" - inhand_icon_state = "luna" - -/datum/mod_theme/prototype/hauler - name = "Prototype: Hauler" - desc = "Bulky and quite heavy, This prototype modular suit has seemed to be modified quite a bit with additional supports to distribute its weight. The servos there within have been modified to handle the additional stress, but the loose wiring required an internal lining of rubberized insulation" - inbuilt_modules = list() - charge_drain = DEFAULT_CHARGE_DRAIN * 3 - siemens_coefficient = 0 - slowdown_active = 1 - -/obj/item/mod/control/pre_equipped/prototype/hauler - theme = /datum/mod_theme/prototype/hauler - req_access = list(ACCESS_TARKON) - applied_cell = /obj/item/stock_parts/cell/high - applied_modules = list( - /obj/item/mod/module/storage/large_capacity, - /obj/item/mod/module/welding, - /obj/item/mod/module/clamp, - /obj/item/mod/module/flashlight, - /obj/item/mod/module/tether, - ) - -/obj/machinery/suit_storage_unit/industrial/hauler - mod_type = /obj/item/mod/control/pre_equipped/prototype/hauler - -/obj/item/areaeditor/blueprints/tarkon - desc = "Blueprints of the Tarkon surface breaching drill and several Tarkon base designs. Red, stamped text reads \"Confidential\" on the backside of it." - name = "Tarkon Design Prints" - -/obj/item/mod/module/armor_booster/retractplates - name = "MOD retractive plates module" - desc = "A complex set of actuators, micro-seals and a simple guide on how to install it, This... \"Modification\" allows the plating around the joints to retract, giving minor protection and a bit better mobility." - removable = TRUE - complexity = 1 - speed_added = 0.25 - armor_mod = /datum/armor/retractive_plates - -/datum/armor/retractive_plates - melee = 20 - bullet = 25 - laser = 15 - energy = 20 - -/obj/machinery/vending/security/noaccess - req_access = null - -/obj/structure/closet/secure_closet/medical2/unlocked/Initialize(mapload) - . = ..() - locked = FALSE - update_appearance() diff --git a/modular_skyrat/modules/mapping/code/shuttles.dm b/modular_skyrat/modules/mapping/code/shuttles.dm deleted file mode 100644 index 1ad2e883eec562..00000000000000 --- a/modular_skyrat/modules/mapping/code/shuttles.dm +++ /dev/null @@ -1,191 +0,0 @@ -/datum/map_template/shuttle/arrival/outpost - suffix = "outpost" - name = "arrival shuttle (Outpost)" - -/datum/map_template/shuttle/emergency/outpost - suffix = "outpost" - prefix = "_maps/shuttles/skyrat/" - name = "Outpoststation Emergency Shuttle" - description = "The perfect shuttle for rectangle enthuasiasts, this long and slender shuttle has been known for it's incredible(Citation Needed) safety rating." - admin_notes = "Has airlocks on both sides of the shuttle and will probably ram deltastation's maint wing below medical. Oh well?" - credit_cost = CARGO_CRATE_VALUE * 4 - occupancy_limit = 45 - -/*----- Black Market Shuttle Datum + related code -----*/ -/datum/map_template/shuttle/ruin/blackmarket_chevvy - prefix = "_maps/shuttles/skyrat/" - suffix = "blackmarket_chevvy" - name = "Black Market Chevvy" - -/obj/machinery/computer/shuttle/caravan/blackmarket_chevvy - name = "Chevvy Shuttle Console" - desc = "Used to control the affectionately named 'Chevvy'." - circuit = /obj/item/circuitboard/computer/blackmarket_chevvy - shuttleId = "blackmarket_chevvy" - possible_destinations = "blackmarket_chevvy_custom;blackmarket_chevvy_home;whiteship_home" - -/obj/machinery/computer/camera_advanced/shuttle_docker/blackmarket_chevvy - name = "Chevvy Navigation Computer" - desc = "Used to designate a precise transit location for the affectionately named 'Chevvy'." - shuttleId = "blackmarket_chevvy" - lock_override = NONE - shuttlePortId = "blackmarket_chevvy_custom" - jump_to_ports = list("blackmarket_chevvy_home" = 1, "whiteship_home" = 1) - view_range = 0 - x_offset = 2 - y_offset = 0 - -/obj/item/circuitboard/computer/blackmarket_chevvy - name = "Chevvy Control Console (Computer Board)" - build_path = /obj/machinery/computer/shuttle/caravan/blackmarket_chevvy -/*----- End of Black Market Shuttle Code -----*/ - -/datum/map_template/shuttle/prison_transport - prefix = "_maps/shuttles/skyrat/" - port_id = "prison_transport" - suffix = "skyrat" - name = "Prison Transporter NSS-74" - - -/obj/machinery/computer/camera_advanced/shuttle_docker/slaver - name = "Ship Navigation Computer" - desc = "Used to designate a precise custom destination to land." - shuttleId = "slaver_syndie" - lock_override = NONE - shuttlePortId = "slaver" - jump_to_ports = list("whiteship_away" = 1, "whiteship_home" = 1, "whiteship_z4" = 1, "syndicate_ne" = 1, "syndicate_nw" = 1, "syndicate_n" = 1, "syndicate_se" = 1, "syndicate_sw" = 1, "syndicate_s" = 1) - view_range = 10 - x_offset = 0 - y_offset = 0 - designate_time = 30 - -/obj/machinery/computer/shuttle/slaver - name = "Ship Travel Terminal" - desc = "Controls for moving the ship to a pre-programmed destination or a custom one marked out by the navigation computer." - icon_screen = "syndishuttle" - icon_keyboard = "syndie_key" - light_color = COLOR_SOFT_RED - req_access = list(ACCESS_SYNDICATE) - shuttleId = "slaver_syndie" - possible_destinations = "syndicate_ne;syndicate_nw;syndicate_n;syndicate_se;syndicate_sw;syndicate_s" - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - flags_1 = NODECONSTRUCT_1 - -/datum/map_template/shuttle/slaver_ship - port_id = "slaver ship" - prefix = "_maps/shuttles/skyrat/" - port_id = "slaver" - suffix = "syndie" - name = "Slaver Ship" - who_can_purchase = null - -/obj/effect/mob_spawn/ghost_role/human/guild - name = "Privateer Slaver" - prompt_name = "a privateer slaver" - you_are_text = "You're here to capture valuable hostages to sell into slavery." - flavour_text = "You're part of a privateer crew that sometimes takes contracts from the illusive Guild, which offers bounties and contracts to independent crews. Raiding colonies of the many less technologically advanced species in the area is much easier than this. You've been told that your mission is to capture as many valuable hostages from the station as possible. Your anonymous employer insists on the importance of humiliating SolFed by snatching those under their protection from right under their noses." - important_text = "" - -/obj/effect/mob_spawn/ghost_role/human/guild/slaver - name = "Privateer Slaver" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper_s" - outfit = /datum/outfit/guild/slaver - -/obj/effect/mob_spawn/ghost_role/human/guild/slaver/captain - name = "Privateer Slaver Captain" - you_are_text = "You lead a small team focused on capturing hostages." - flavour_text = "You're the captain of a privateer crew that sometimes takes contracts from the illusive Guild, which offers bounties and contracts to independent crews, like yours! Lead your crew to infiltrate the station and capture hostages and hold them till the station's emergency shuttle leaves. The higher ranking the hostages, the more you'll get paid out. You're free to (and encouraged to) beat and humiliate, but not kill. Your anonymous employer wants your victims as their personel slaves. They mentioned something about propaganda? Ah, who knows with the Guild... All sorts of types posts these bounties." - important_text = "You are expected to roleplay heavily and lead effectively in this role." - outfit = /datum/outfit/guild/slaver/captain - -/obj/item/radio/headset/guild - keyslot = new /obj/item/encryptionkey/headset_syndicate/guild - -/obj/item/radio/headset/guild/command - command = TRUE - -/datum/outfit/guild - name = "Guild Default Outfit" - -/datum/outfit/guild/slaver - name = "Privateer Slaver" - head = /obj/item/clothing/head/helmet/alt - suit = /obj/item/clothing/suit/armor/bulletproof - uniform = /obj/item/clothing/under/syndicate/combat - shoes = /obj/item/clothing/shoes/jackboots - gloves = /obj/item/clothing/gloves/tackler/combat/insulated - ears = /obj/item/radio/headset/guild - glasses = /obj/item/clothing/glasses/hud/security/chameleon - back = /obj/item/storage/backpack - implants = list(/obj/item/implant/weapons_auth) - belt = /obj/item/storage/belt/military - r_pocket = /obj/item/storage/pouch/ammo - l_pocket = /obj/item/gun/energy/e_gun/mini - id = /obj/item/card/id/advanced/chameleon - id_trim = /datum/id_trim/chameleon/operative - skillchips = list(/obj/item/skillchip/job/engineer) - backpack_contents = list( - /obj/item/storage/box/survival/engineer/radio, - /obj/item/melee/baton/telescopic, - /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/wespe, - /obj/item/grenade/c4, - /obj/item/grenade/smokebomb - ) - -/datum/outfit/guild/slaver/captain - name = "Privateer Slaver Captain" - head = /obj/item/clothing/head/helmet/alt - suit = /obj/item/clothing/suit/armor/bulletproof - uniform = /obj/item/clothing/under/syndicate/combat - shoes = /obj/item/clothing/shoes/jackboots - gloves = /obj/item/clothing/gloves/tackler/combat/insulated - ears = /obj/item/radio/headset/guild/command - glasses = /obj/item/clothing/glasses/thermal/syndi - back = /obj/item/storage/backpack - implants = list(/obj/item/implant/weapons_auth) - belt = /obj/item/storage/belt/military - r_pocket = /obj/item/storage/pouch/ammo - l_pocket = /obj/item/gun/energy/e_gun/mini - id = /obj/item/card/id/advanced/chameleon - id_trim = /datum/id_trim/chameleon/operative - skillchips = list(/obj/item/skillchip/job/engineer) - backpack_contents = list( - /obj/item/storage/box/survival/engineer/radio, - /obj/item/melee/baton/telescopic, - /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/skild, - /obj/item/megaphone/command - ) - -/*----- Tarkon Shuttle Datum + related code -----*/ -/datum/map_template/shuttle/ruin/tarkon_driver - prefix = "_maps/shuttles/skyrat/" - suffix = "tarkon_driverdc54" - name = "Tarkon Drill Driver" - -/obj/machinery/computer/shuttle/tarkon_driver - name = "Tarkon Driver Control" - desc = "Used to control the Tarkon Driver." - circuit = /obj/item/circuitboard/computer/tarkon_driver - shuttleId = "tarkon_driver" - possible_destinations = "tarkon_driver_custom;port_tarkon;whiteship_home" - -/obj/machinery/computer/camera_advanced/shuttle_docker/tarkon_driver - name = "Tarkon Driver Navigation Computer" - desc = "The Navigation console for the Tarkon Driver. A broken \"Engage Drill\" button seems to dimly blink in a yellow colour" - shuttleId = "tarkon_driver" - lock_override = NONE - shuttlePortId = "tarkon_driver_custom" - jump_to_ports = list("port_tarkon" = 1, "whiteship_home" = 1) - view_range = 0 - -/obj/item/circuitboard/computer/tarkon_driver - name = "Tarkon Driver Control Console (Computer Board)" - build_path = /obj/machinery/computer/shuttle/tarkon_driver - -/datum/map_template/shuttle/ruin/tarkon_driver/defcon3 - suffix = "tarkon_driverdc3" - -/datum/map_template/shuttle/ruin/tarkon_driver/defcon2 - suffix = "tarkon_driverdc2" -/*----- End of Tarkon Shuttle Code -----*/ diff --git a/modular_skyrat/modules/mapping/code/space.dm b/modular_skyrat/modules/mapping/code/space.dm deleted file mode 100644 index 0254f95c6c960a..00000000000000 --- a/modular_skyrat/modules/mapping/code/space.dm +++ /dev/null @@ -1,172 +0,0 @@ -/*----- Template for ruins, prevents needing to re-type the filepath prefix -----*/ -/datum/map_template/ruin/space/skyrat - prefix = "_maps/RandomRuins/SpaceRuins/skyrat/" -/*------*/ -/* //Disabled due to the existence of DS-2. -/datum/map_template/ruin/space/skyrat/forgottenship - name = "CSBC-12" - id = "forgottenship" - description = "Cybersun would like to remind it's employees that any battle cruiser will be apropriately maintained, as will it's crew." - suffix = "forgottenship_skyrat.dmm" - always_place = TRUE -*/ -/datum/map_template/ruin/space/skyrat/interdynefob - name = "DS-2" - id = "interdynefob" - description = "If DS-1 was so good..." - suffix = "interdynefob.dmm" - always_place = TRUE - -/datum/map_template/ruin/space/skyrat/derelictferry - id = "derelictferry" - suffix = "derelictferry.dmm" - name = "Derelict Ferry" - description = "Clearly once a ferry fielded by Central Command to send their staff to nearby stations, this ship's seen better days." - -/datum/map_template/ruin/space/skyrat/posterpandamonium - id = "posterpandamonium" - suffix = "posterpandamonium.dmm" - name = "Abandoned Outpost" - description = "Whilst nicely furnished and filled with all sorts of posters, whoever once lived here seems long gone." - -/datum/map_template/ruin/space/skyrat/prisonshuttle - id = "prisonshuttle" - suffix = "prisonshuttle.dmm" - name = "Partisan Shuttle" - description = "You can faintly hear hardbass." - -/datum/map_template/ruin/space/skyrat/toystore - id = "toystore" - suffix = "toystore.dmm" - name = "Toy Store" - description = "A once state-of-the-art store, now left derelict after the company behind it went bankrupt. Maybe they shouldn't have picked such a remote location." - -/datum/map_template/ruin/space/skyrat/waypointstation - id = "waypointstation" - suffix = "waypointstation.dmm" - name = "Waypoint Station" - description = "Previously used as a refueling stop for larger ships, unintentional syndicate intervention has turned this station into a combat zone." - -/datum/map_template/ruin/space/skyrat/alientoollab - id = "alientoollab" - suffix = "alientoollab.dmm" - name = "Abductor Replication Facility" - description = "A mad doctor's dreams were dashed when he finally disclosed to both his funders that each other existed, leaving behind his work for the looters." - -/datum/map_template/ruin/space/skyrat/codealpha - id = "codealpha" - suffix = "codealpha.dmm" - name = "Code Alpha Supplementary Station" - description = "The mess hall of a once bustling supplementary station, to be deployed alongside SS13." - -/datum/map_template/ruin/space/skyrat/smugglies //Excuse me sir, do you have money printers in here? - id = "smugglies" - suffix = "smugglies.dmm" - name = "Suspicious Cargo Installation" - description = "*SCREECH* RDM RDM RDM" - -/datum/map_template/ruin/space/skyrat/clothing_facility - id = "clothing_facility" - suffix = "clothing_facility.dmm" - name = "Abandoned Clothing Facility" - description = "A den of bad ideas. Secborgs were made here!" - -/datum/map_template/ruin/space/skyrat/luna - id = "luna" - suffix = "luna.dmm" - name = "Luna" - description = "Please note for ethical concerns all experimentation regarding writing artificial intelligence units to beleive they are A, A fictional character and B, human have been suspended. Have a pleasant shift." - -/datum/map_template/ruin/space/skyrat/blackmarket - id = "blackmarket" - suffix = "blackmarket.dmm" - name = "Shady Market" - description = "Whaddya buyin'?" - -/datum/map_template/ruin/space/skyrat/shuttle8532 - id = "shuttle8532" - suffix = "shuttle8532.dmm" - name = "Shuttle 8532" - description = "While nobody can predict what space has to offer for the sailors that ride its waves, nobody is quite expecting a meteroid half the size of your shuttle to split it in half." - -/datum/map_template/ruin/space/skyrat/ghostship - id = "ghostship" - suffix = "ghostship.dmm" - name = "Ghost Ship" - description = "An ancient ship, seemingly pre-bluespace in design yet retrofitted with newer systems. Seemingly just up-and-abandoned in the middle of space..." - -/datum/map_template/ruin/space/skyrat/salvagepost - id = "salvagepost" - suffix = "salvagepost.dmm" - name = "Pre-Bluespace Salvage Post" - description = "An extremely old, long forgotten post used to salvage damaged or decommissioned ships before bluespace transportation. Surprising its stayed intact so long." - -/datum/map_template/ruin/space/skyrat/vaulttango - id = "vaulttango" - suffix = "vaulttango.dmm" - name = "ARBORLINK Vault Tango" - description = "Nanotrasen isn't the only corporation experimenting in advanced bluespace technology." - -/datum/map_template/ruin/space/skyrat/friendship - id = "friendship" - suffix = "wreckedfriendship.dmm" - name = "NTSS Friendship" - description = "120 people.. one ship. It's unsurprising." - -/datum/map_template/ruin/space/skyrat/homestead - id = "homestead" - suffix = "wreckedhomestead.dmm" - name = "NTSS Homestead" - description = "A wrecked ship." - -/datum/map_template/ruin/space/skyrat/medieval1 - id = "medieval1" - suffix = "medieval1.dmm" - name = "Medieval 1" - description = "A forgotten peice of history left overrun with a reminder of what brought its destruction" - -/datum/map_template/ruin/space/skyrat/cargodiselost - id = "CargodiseLost" - suffix = "cargodiselost.dmm" - name = "Cargodise Lost" - description = "A small crew of freight-haulers are marooned in space after pirates knock out their engines. They must survive off of the cargo on board their ship and fend off the pirate boarders on their ship." - -/datum/map_template/ruin/space/skyrat/infestedntship - suffix = "scrapheap.dmm" - name = "NT Research Vessel" - description = "A zombie-infested NT ship, seemingly dedicated to medical research." - -/datum/map_template/ruin/space/skyrat/piratefort - suffix = "piratefort.dmm" - name = "Pirate Fort" - description = "A pirate hideout in deep space." - -/datum/map_template/ruin/space/skyrat/syndibase - suffix = "syndibase.dmm" - name = "Syndicate Outpost" - description = "A Syndicate research outpost in deep space." - -/datum/map_template/ruin/space/skyrat/crash - suffix = "crash.dmm" - name = "Crashed Boat" - description = "A small ferry crashed into an asteroid." - -/datum/map_template/ruin/space/skyrat/shuttlescrap - suffix = "shuttlescrap.dmm" - name = "Broken Shuttle" - description = "A small shuttle that clearly got clipped by something." - -/datum/map_template/ruin/space/skyrat/gorilla - suffix = "gorilla.dmm" - name = "Gorilla" - description = "There is no need to be upset." - -/datum/map_template/ruin/space/skyrat/escapefromtarkon - suffix = "port_tarkon.dmm" - name = "Port Tarkon" - id = "escapefromtarkon" - description = "An ambitious goal, A step forward, A trial run for the Tarkon drill, ment to implant mining stations within meteors. Decades of disaster have, however, left this one... Unattended for far too long." - always_place = TRUE - -/obj/modular_map_root/port_tarkon - config_file = "strings/modular_maps/skyrat/PortTarkon.toml" diff --git a/modular_skyrat/modules/mapping/code/static_plaques.dm b/modular_skyrat/modules/mapping/code/static_plaques.dm deleted file mode 100644 index 65fac01b183293..00000000000000 --- a/modular_skyrat/modules/mapping/code/static_plaques.dm +++ /dev/null @@ -1,26 +0,0 @@ -//SKYRAT PLAQUES - -//Current stations - - -//Removed Stations - -// Outpost Station: added March 28, 2021 (#4142), Removed April 6th, 2021 (#4695). Technically around for as long as Unitystation has been, but shh. -/obj/structure/plaque/static_plaque/golden/commission/outpost - desc = "Spinward Sector Station SS-14\n'Outpost' Class Outpost\nCommissioned 28/03/2561\nDecommissioned 06/04/2561\n'The Shopping Mall Of Stations'" - - -// Ship Station: added Feburary 12, 2021 (#2680), Removed May 2nd, 2021 (#4695). (Orignally a /tg/station PR: #53185) -/obj/structure/plaque/static_plaque/golden/commission/shipstation - desc = "Spinward Sector Station SS-15\n'Ship' Class Outpost\nCommissioned 12/02/2561\nDecommissioned 02/05/2561\n'Helped The Local Economy'" - -// NSS Journey: added April 19, 2021 (#4884), Removed May 18th, 2022 (#13694). Was modified boxstation. -/obj/structure/plaque/static_plaque/golden/commission/nssjourney - desc = "Spinward Sector Station SS-13\n'Box' Class Outpost (Revision 2.3: 'Journey')\nCommissioned 19/04/2561\n'Unbroken Champion'" - -//Special Cases - -// DS-1: added January 29th, 2021 (#2317) -/obj/structure/plaque/static_plaque/golden/commission/assaultops - desc = "Spinward Sector Forward Operating Station 13\n'DS-1'\nCommissioned 13/05/2560\n'It's Donk Or Don't'" //Ironic, since Donk Co. Ended their sponsorship. - icon_state = "commission_syndie" diff --git a/modular_skyrat/modules/mapping/code/tools.dm b/modular_skyrat/modules/mapping/code/tools.dm deleted file mode 100644 index f8bada7e2c90b0..00000000000000 --- a/modular_skyrat/modules/mapping/code/tools.dm +++ /dev/null @@ -1,65 +0,0 @@ -//WRENCHES// -/obj/item/wrench/advanced - name = "advanced wrench" - desc = "A wrench that uses the same magnetic technology that abductor tools use, but slightly more ineffeciently. It looks cobbled together." - icon = 'modular_skyrat/modules/mapping/icons/obj/items/advancedtools.dmi' - icon_state = "wrench" - usesound = 'sound/effects/empulse.ogg' - toolspeed = 0.2 - -//WIRECUTTERS// -/obj/item/wirecutters/advanced - name = "advanced wirecutters" - desc = "A set of reproduction alien wirecutters, they have a silver handle with an exceedingly sharp blade. There's a sticker attached declaring that it needs updating from 'the latest samples'." - icon = 'modular_skyrat/modules/mapping/icons/obj/items/advancedtools.dmi' - icon_state = "cutters" - toolspeed = 0.2 - random_color = FALSE - -//WELDING TOOLS// -/obj/item/weldingtool/advanced - name = "advanced welding tool" - desc = "A modern, experimental welding tool combined with an alien welding tool's generation methods, it never runs out of fuel and works almost as fast." - icon = 'modular_skyrat/modules/mapping/icons/obj/items/advancedtools.dmi' - icon_state = "welder" - toolspeed = 0.2 - light_system = NO_LIGHT_SUPPORT - light_range = 0 - change_icons = 0 - -/obj/item/weldingtool/advanced/process() - if(get_fuel() <= max_fuel) - reagents.add_reagent(/datum/reagent/fuel, 1) - ..() - -//SCREWDRIVERS// -/obj/item/screwdriver/advanced - name = "advanced screwdriver" - desc = "A classy silver screwdriver with an alien alloy tip, it works almost as well as the real thing. There's a sticker attached declaring that it needs updating from 'the latest samples'." - icon = 'modular_skyrat/modules/mapping/icons/obj/items/advancedtools.dmi' - icon_state = "screwdriver_a" - inhand_icon_state = "screwdriver_nuke" - usesound = 'sound/items/pshoom.ogg' - toolspeed = 0.2 - random_color = FALSE - greyscale_colors = null - greyscale_config = null - greyscale_config_inhand_left = null - greyscale_config_inhand_right = null - -//CROWBAR// -/obj/item/crowbar/advanced - name = "advanced crowbar" - desc = "A scientist's almost successful reproduction of an abductor's crowbar, it uses the same technology combined with a handle that can't quite hold it." - icon = 'modular_skyrat/modules/mapping/icons/obj/items/advancedtools.dmi' - usesound = 'sound/weapons/sonic_jackhammer.ogg' - icon_state = "crowbar" - toolspeed = 0.2 - -//MULTITOOLS// -/obj/item/multitool/advanced - name = "advanced multitool" - desc = "The reproduction of an abductor's multitool, this multitool is a classy silver. There's a sticker attached declaring that it needs updating from 'the latest samples'." - icon = 'modular_skyrat/modules/mapping/icons/obj/items/advancedtools.dmi' - icon_state = "multitool" - toolspeed = 0.2 diff --git a/modular_skyrat/modules/mapping/code/turf_decals.dm b/modular_skyrat/modules/mapping/code/turf_decals.dm deleted file mode 100644 index 5dfa5f1f22fd56..00000000000000 --- a/modular_skyrat/modules/mapping/code/turf_decals.dm +++ /dev/null @@ -1,89 +0,0 @@ -/obj/effect/turf_decal/skyrat_decals - icon = 'modular_skyrat/modules/mapping/icons/turf/turf_decals.dmi' - icon_state = "bad_coder" - -/obj/effect/decal/fakelattice/passthru //Why the hell did TG make it dense anyways - density = FALSE - -/obj/effect/decal/fakelattice/passthru/NeverShouldHaveComeHere(turf/here_turf) - return !isclosedturf(here_turf) && ..() - -///SYNDICATE EMBLEM/// -//Bottom -/obj/effect/turf_decal/skyrat_decals/syndicate/bottom/left - icon_state = "1,1" - -/obj/effect/turf_decal/skyrat_decals/syndicate/bottom/middle - icon_state = "1,2" - -/obj/effect/turf_decal/skyrat_decals/syndicate/bottom/right - icon_state = "1,3" -//Middle -/obj/effect/turf_decal/skyrat_decals/syndicate/middle/left - icon_state = "2,1" - -/obj/effect/turf_decal/skyrat_decals/syndicate/middle/middle - icon_state = "2,2" - -/obj/effect/turf_decal/skyrat_decals/syndicate/middle/right - icon_state = "2,3" -//Top -/obj/effect/turf_decal/skyrat_decals/syndicate/top/left - icon_state = "3,1" - -/obj/effect/turf_decal/skyrat_decals/syndicate/top/middle - icon_state = "3,2" - -/obj/effect/turf_decal/skyrat_decals/syndicate/top/right - icon_state = "3,3" - -///ENCLAVE EMBLEM/// -/obj/effect/turf_decal/skyrat_decals/enclave - layer = TURF_PLATING_DECAL_LAYER - alpha = 110 - color = "#A46106" -//Bottom -/obj/effect/turf_decal/skyrat_decals/enclave/bottom/left - icon_state = "e1,1" - -/obj/effect/turf_decal/skyrat_decals/enclave/bottom/middle - icon_state = "e1,2" - -/obj/effect/turf_decal/skyrat_decals/enclave/bottom/right - icon_state = "e1,3" -//Middle -/obj/effect/turf_decal/skyrat_decals/enclave/middle/left - icon_state = "e2,1" - -/obj/effect/turf_decal/skyrat_decals/enclave/middle/middle - icon_state = "e2,2" - -/obj/effect/turf_decal/skyrat_decals/enclave/middle/right - icon_state = "e2,3" -//Top -/obj/effect/turf_decal/skyrat_decals/enclave/top/left - icon_state = "e3,1" - -/obj/effect/turf_decal/skyrat_decals/enclave/top/middle - icon_state = "e3,2" - -/obj/effect/turf_decal/skyrat_decals/enclave/top/right - icon_state = "e3,3" - -///Departments/// -/obj/effect/turf_decal/skyrat_decals/departments/bridge - icon_state = "bridge" - -///DS-2 Sign/// -/obj/effect/turf_decal/skyrat_decals/ds2/left - icon_state = "ds1" - -/obj/effect/turf_decal/skyrat_decals/ds2/middle - icon_state = "ds2" - -/obj/effect/turf_decal/skyrat_decals/ds2/right - icon_state = "ds3" - -///Misc/// -/obj/effect/turf_decal/skyrat_decals/misc/handicapped - icon_state = "handicapped" diff --git a/modular_skyrat/modules/mapping/code/wardrobes.dm b/modular_skyrat/modules/mapping/code/wardrobes.dm deleted file mode 100644 index bfb7e2621d3757..00000000000000 --- a/modular_skyrat/modules/mapping/code/wardrobes.dm +++ /dev/null @@ -1,100 +0,0 @@ -/obj/machinery/vending/wardrobe/canLoadItem(obj/item/I,mob/user) - return (I.type in products) - -/obj/machinery/vending/wardrobe/syndie_wardrobe - name = "\improper SynDrobe" - desc = "A vending machine for our boys in red, now in brand new crimson!" - icon = 'modular_skyrat/modules/mapping/icons/obj/vending.dmi' - icon_state = "syndrobe" - product_ads = "Put a Donk on it!;Aim, Style, Shoot!;Brigged for wearing the best!" - vend_reply = "Thank you for using the SynDrobe!" - light_mask = "" - products = list( - /obj/item/clothing/under/syndicate/skyrat/tactical = 3, - /obj/item/clothing/under/syndicate/skyrat/tactical/skirt = 3, - /obj/item/clothing/under/syndicate/skyrat/overalls = 3, - /obj/item/clothing/under/syndicate/skyrat/overalls/skirt = 3, - /obj/item/clothing/under/syndicate/bloodred/sleepytime = 3, - /obj/item/clothing/under/syndicate/sniper = 3, - /obj/item/clothing/under/syndicate/camo = 3, - /obj/item/clothing/under/syndicate/combat = 3, - /obj/item/clothing/shoes/combat = 3, - /obj/item/clothing/mask/gas/syndicate = 3, - /obj/item/clothing/mask/gas/sechailer/syndicate = 3, - /obj/item/clothing/suit/hooded/wintercoat/skyrat/syndicate = 5, - /obj/item/clothing/head/soft/sec/syndicate = 3, - /obj/item/clothing/head/beret/sec/syndicate = 3, - ) - contraband = list( - /obj/item/knife/combat = 1, - /obj/item/clothing/under/syndicate/coldres = 2, - /obj/item/clothing/shoes/combat/coldres = 2, - ) - premium = list( - /obj/item/knife/combat/survival = 1, - /obj/item/storage/fancy/cigarettes/cigpack_syndicate = 5, - /obj/item/clothing/gloves/combat = 3, - /obj/item/clothing/under/syndicate/skyrat/maid = 5, - /obj/item/clothing/gloves/combat/maid = 5, - /obj/item/clothing/head/costume/maidheadband/syndicate = 5, - /obj/item/storage/box/nif_ghost_box/ghost_role = 10, - ) - - refill_canister = /obj/item/vending_refill/wardrobe/syndie_wardrobe - light_color = COLOR_MOSTLY_PURE_RED - -/obj/machinery/vending/wardrobe/syndie_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/storage/box/nif_ghost_box/ghost_role, - ) - -/obj/item/vending_refill/wardrobe/syndie_wardrobe - machine_name = "SynDrobe" - -/// This is essentially just a copy paste of the holy beacon, but with all options unlocked regardless of the global religion -/obj/item/choice_beacon/unholy - name = "armaments beacon" - desc = "Contains a set of armaments for those who would unlock their power." - -/obj/item/choice_beacon/unholy/open_options_menu(mob/living/user) - var/list/armament_names_to_images = list() - var/list/armament_names_to_typepaths = list() - for(var/obj/item/storage/box/holy/holy_box as anything in typesof(/obj/item/storage/box/holy)) - var/box_name = initial(holy_box.name) - var/obj/item/preview_item = initial(holy_box.typepath_for_preview) - armament_names_to_typepaths[box_name] = holy_box - armament_names_to_images[box_name] = image(icon = initial(preview_item.icon), icon_state = initial(preview_item.icon_state)) - - var/chosen_name = show_radial_menu( - user = user, - anchor = src, - choices = armament_names_to_images, - custom_check = CALLBACK(src, PROC_REF(can_use_beacon), user), - require_near = TRUE, - ) - if(!can_use_beacon(user)) - return - var/chosen_type = armament_names_to_typepaths[chosen_name] - if(!ispath(chosen_type, /obj/item/storage/box/holy)) - return - - consume_use(chosen_type, user) - -/obj/item/choice_beacon/unholy/spawn_option(obj/choice_path, mob/living/user) - playsound(src, 'sound/effects/pray_chaplain.ogg', 40, TRUE) - return ..() - -/// Just take out and replace the holy beacon with our 'unholy' beacon -/obj/machinery/vending/wardrobe/chap_wardrobe/unholy/Initialize(mapload) - . = ..() - for(var/datum/data/vending_product/record in product_records) - if(record.product_path == /obj/item/choice_beacon/holy) - record.product_path = /obj/item/choice_beacon/unholy - record.amount = 3 - - products.Remove(/obj/item/choice_beacon/holy) - products.Add(list( - /obj/item/choice_beacon/unholy = 3,) - ) - - return diff --git a/modular_skyrat/modules/mapping/icons/areas/areas_station.dmi b/modular_skyrat/modules/mapping/icons/areas/areas_station.dmi deleted file mode 100644 index 8bc5604a305b87..00000000000000 Binary files a/modular_skyrat/modules/mapping/icons/areas/areas_station.dmi and /dev/null differ diff --git a/modular_skyrat/modules/mapping/voidraptor/code/clothing.dm b/modular_skyrat/modules/mapping/voidraptor/code/clothing.dm deleted file mode 100644 index 1d3b995e409092..00000000000000 --- a/modular_skyrat/modules/mapping/voidraptor/code/clothing.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/item/storage/backpack/duffelbag/science/robo/surgery - name = "robotics surgical duffelbag" - desc = "A sleek, industrial-strength duffelbag issued to robotics personnel. This one has a tag implying it came stocked with surgical tools." - -/obj/item/storage/backpack/duffelbag/science/robo/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/surgicaldrill(src) - new /obj/item/cautery(src) - new /obj/item/bonesetter(src) - new /obj/item/surgical_drapes(src) - new /obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/razor(src) - new /obj/item/blood_filter(src) diff --git a/modular_skyrat/modules/mapping/voidraptor/code/mob.dm b/modular_skyrat/modules/mapping/voidraptor/code/mob.dm deleted file mode 100644 index 3a189524bae7b1..00000000000000 --- a/modular_skyrat/modules/mapping/voidraptor/code/mob.dm +++ /dev/null @@ -1,78 +0,0 @@ -/mob/living/basic/lizard/tegu - name = "tegu" - desc = "That's a tegu." - icon = 'modular_skyrat/master_files/icons/mob/pets.dmi' - icon_state = "tegu" - icon_living = "tegu" - icon_dead = "tegu_dead" - health = 20 - maxHealth = 20 - melee_damage_lower = 16 //They do have a nasty bite - melee_damage_upper = 16 - pass_flags = PASSTABLE - -/mob/living/basic/lizard/tegu/gus - name = "Gus" - real_name = "Gus" - desc = "The Research Department's beloved pet tegu." - gender = MALE - gold_core_spawnable = NO_SPAWN - -/mob/living/basic/crab/shuffle - name = "Shuffle" - real_name = "Shuffle" - desc = "Oh no, it's him!" - color = "#ff0000" - gender = MALE - gold_core_spawnable = NO_SPAWN - -/mob/living/basic/crab/shuffle/Initialize(mapload) - . = ..() - update_transform(0.5) - -/mob/living/basic/carp/mega/shorki - name = "Shorki" - desc = "A not so ferocious, fang bearing creature that resembles a shark. This one seems a little big for its tank." - faction = list(FACTION_NEUTRAL) - gender = MALE - gold_core_spawnable = NO_SPAWN - ai_controller = /datum/ai_controller/basic_controller/carp/pet - -/mob/living/basic/carp/mega/shorki/Initialize(mapload) - . = ..() - AddElement(/datum/element/ai_retaliate) - AddElement(/datum/element/pet_bonus, "bloops happily!") - name = initial(name) - real_name = initial(name) - -/mob/living/simple_animal/pet/gondola/funky - name = "Funky" - real_name = "Funky" - desc = "Gondola is the silent walker. Having no hands he embodies the Taoist principle of wu-wei (non-action) while his smiling facial expression shows his utter and complete acceptance of the world as it is. Its hide is extremely valuable. This one seems a little skinny and attached to the Theater." - loot = list(/obj/effect/decal/cleanable/blood/gibs) - -/mob/living/basic/pet/dog/dobermann/walter - name = "Walter" - real_name = "Walter" - desc = "It's Walter, he bites criminals just as well as he bites toddlers." - -/mob/living/basic/rabbit/daisy - name = "Daisy" - real_name = "Daisy" - desc = "The Curator's pet bnuuy." - gender = FEMALE - -/mob/living/basic/bear/wojtek - name = "Wojtek" - real_name = "Wojtek" - desc = "The bearer of Bluespace Artillery." - faction = list(FACTION_NEUTRAL) - gender = MALE - -/mob/living/basic/chicken/teshari - name = "Teshari" - real_name = "Teshari" - desc = "A timeless classic." - unsuitable_atmos_damage = 0 - minimum_survivable_temperature = 0 - maximum_survivable_temperature = 30000 diff --git a/modular_skyrat/modules/mapping/voidraptor/code/shuttles.dm b/modular_skyrat/modules/mapping/voidraptor/code/shuttles.dm deleted file mode 100644 index 31d2fc20e8f1bd..00000000000000 --- a/modular_skyrat/modules/mapping/voidraptor/code/shuttles.dm +++ /dev/null @@ -1,3 +0,0 @@ -/obj/docking_port/stationary/mining_home/large - roundstart_template = /datum/map_template/shuttle/mining/skyrat/large - height = 10 diff --git a/modular_skyrat/modules/marines/code/gear.dm b/modular_skyrat/modules/marines/code/gear.dm deleted file mode 100644 index 3b5337009934f6..00000000000000 --- a/modular_skyrat/modules/marines/code/gear.dm +++ /dev/null @@ -1,134 +0,0 @@ -/obj/item/gun/ballistic/automatic/ar/modular/m44a - name = "\improper NT M44A Pulse Rifle" - desc = "A specialized Nanotrasen-produced ballistic pulse rifle that uses compressed magazines to output absurd firepower in a compact package." - icon_state = "m44a" - inhand_icon_state = "m44a" - icon = 'modular_skyrat/modules/marines/icons/m44a.dmi' - righthand_file = 'modular_skyrat/modules/marines/icons/m44a_r.dmi' - lefthand_file = 'modular_skyrat/modules/marines/icons/m44a_l.dmi' - fire_sound = 'modular_skyrat/modules/marines/sound/m44a.ogg' - fire_delay = 1 - burst_size = 3 - spread = 6 - pin = /obj/item/firing_pin/implant/mindshield - can_suppress = FALSE - can_bayonet = FALSE - mag_display = TRUE - mag_display_ammo = FALSE - accepted_magazine_type = /obj/item/ammo_box/magazine/m44a - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BELT - -/obj/item/gun/ballistic/automatic/ar/modular/m44a/Initialize(mapload) - . = ..() - - AddComponent(/datum/component/automatic_fire, fire_delay) - -/obj/item/gun/ballistic/automatic/ar/modular/m44a/give_manufacturer_examine() - AddElement(/datum/element/manufacturer_examine, COMPANY_NANOTRASEN) - -/obj/item/ammo_box/magazine/m44a - name = "m44a magazine (.300 compressed)" - desc = "This magazine uses a bluespace compression chamber to hold a maximum of ninety-nine .300 caliber caseless rounds for the M44A pulse rifle." - icon = 'modular_skyrat/modules/marines/icons/m44a.dmi' - icon_state = "300compressed" - max_ammo = 99 - multiple_sprites = AMMO_BOX_FULL_EMPTY - ammo_type = /obj/item/ammo_casing/c300 - caliber = "300comp" - -/obj/item/ammo_casing/c300 - name = ".300 caseless round" - desc = "A .300 caseless round for proprietary Nanotrasen firearms." - caliber = "300comp" - projectile_type = /obj/projectile/bullet/a300 - -/obj/item/ammo_casing/c300/Initialize(mapload) - . = ..() - AddElement(/datum/element/caseless) - -/obj/projectile/bullet/a300 - name = ".300 caseless bullet" - damage = 13 - armour_penetration = 30 //gonna actually kill the brit that made this var require a U in armor - embedding = null - shrapnel_type = null - -/obj/item/gun/ballistic/automatic/ar/modular/m44a/scoped - name = "\improper NT M44AS Pulse Rifle" - desc = "A specialized Nanotrasen-produced ballistic pulse rifle that uses compressed magazines to output absurd firepower in a compact package. This one's fitted with a long-range scope." - icon_state = "m44a_s" - inhand_icon_state = "m44a_s" - -/obj/item/gun/ballistic/automatic/ar/modular/m44a/scoped/Initialize(mapload) - . = ..() - AddComponent(/datum/component/scope, range_modifier = 2.2) - -/obj/item/gun/ballistic/shotgun/automatic/as2/ubsg - name = "\improper M2 auto-shotgun underbarrel" - desc = "This shouldn't be heeere!" - can_suppress = FALSE - accepted_magazine_type = /obj/item/ammo_box/magazine/internal/shot/as2/ubsg - -/obj/item/gun/ballistic/shotgun/automatic/as2/ubsg/give_gun_safeties() - return - -/obj/item/ammo_box/magazine/internal/shot/as2/ubsg - max_ammo = 3 - ammo_type = /obj/item/ammo_casing/shotgun/buckshot - -/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun - name = "\improper NT M44ASG Pulse Rifle" - desc = "A specialized Nanotrasen-produced ballistic pulse rifle that uses compressed magazines to output absurd firepower in a compact package. This one's fitted with a two-round semi-automatic underbarrel 12 gauge shotgun." - icon_state = "m44a_sg" - inhand_icon_state = "m44a_sg" - /// Reference to the underbarrel shotgun - var/obj/item/gun/ballistic/shotgun/automatic/as2/ubsg/underbarrel - -/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun/Initialize(mapload) - . = ..() - underbarrel = new /obj/item/gun/ballistic/shotgun/automatic/as2/ubsg(src) - update_appearance() - -/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun/Destroy() - QDEL_NULL(underbarrel) - return ..() - -/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun/afterattack_secondary(atom/target, mob/living/user, flag, params) - underbarrel.afterattack(target, user, flag, params) - return SECONDARY_ATTACK_CONTINUE_CHAIN - -/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun/attackby(obj/item/attacking_item, mob/user, params) - if(!istype(attacking_item, /obj/item/ammo_casing)) - ..() - if(istype(attacking_item, underbarrel.magazine.ammo_type)) - underbarrel.attack_self(user) - underbarrel.attackby(attacking_item, user, params) - -/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher - name = "\improper NT M44AGL Pulse Rifle" - desc = "A specialized Nanotrasen-produced ballistic pulse rifle that uses compressed magazines to output absurd firepower in a compact package. This one's fitted with an underbarrel grenade launcher, and a red dot scope to help align it. Compensating for something?" - icon_state = "m44a_gl" - inhand_icon_state = "m44a_gl" - /// Underbarrel grenade launcher reference - var/obj/item/gun/ballistic/revolver/grenadelauncher/underbarrel - -/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher/Initialize(mapload) - . = ..() - underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted(src) - update_appearance() - -/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher/Destroy() - QDEL_NULL(underbarrel) - return ..() - -/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher/afterattack_secondary(atom/target, mob/living/user, flag, params) - underbarrel.afterattack(target, user, flag, params) - return SECONDARY_ATTACK_CONTINUE_CHAIN - -/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher/attackby(obj/item/attacking_item, mob/user, params) - if(!istype(attacking_item, /obj/item/ammo_casing)) - ..() - if(istype(attacking_item, underbarrel.magazine.ammo_type)) - underbarrel.attack_self(user) - underbarrel.attackby(attacking_item, user, params) diff --git a/modular_skyrat/modules/marines/code/mod.dm b/modular_skyrat/modules/marines/code/mod.dm deleted file mode 100644 index 33d432ca19846f..00000000000000 --- a/modular_skyrat/modules/marines/code/mod.dm +++ /dev/null @@ -1,111 +0,0 @@ -// 1 2 3 4 marine corps marine corps - -/datum/mod_theme/marines - name = "marine" - desc = "Developed by Nanotrasen in collaboration with multiple high-profile contractors, this specialized suit is made for high-intensity combat." - extended_desc = "A black and blue suit of Nanotrasen design made to be utilized by corporate space marines \ - in active combat situations where standard gear won't cut it. Lightweight composite armor plating over \ - a strong exoskeleton ensures that no speed is sacrificed for protection, and a variety of unique \ - modules keep the wearer efficient during active combat situations. When response teams fail, \ - you're the backup's backup - the desperate measures." - default_skin = "marine" - armor_type = /datum/armor/mod_theme_marines - atom_flags = PREVENT_CONTENTS_EXPLOSION_1 - resistance_flags = FIRE_PROOF|ACID_PROOF - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - siemens_coefficient = 0 - slowdown_inactive = 0.5 - slowdown_active = 0 - complexity_max = DEFAULT_MAX_COMPLEXITY + 10 //drr drr drr - allowed_suit_storage = list( - /obj/item/flashlight, - /obj/item/tank/internals, - /obj/item/ammo_box, - /obj/item/ammo_casing, - /obj/item/restraints/handcuffs, - /obj/item/assembly/flash, - /obj/item/melee/baton, - /obj/item/gun/ballistic, - /obj/item/melee/breaching_hammer, - ) - skins = list( - "marine" = list( - MOD_ICON_OVERRIDE = 'modular_skyrat/modules/marines/icons/mod.dmi', - MOD_WORN_ICON_OVERRIDE = 'modular_skyrat/modules/marines/icons/wornmod.dmi', - HELMET_FLAGS = list( - UNSEALED_LAYER = NECK_LAYER, - UNSEALED_CLOTHING = SNUG_FIT, - SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT|FLASH_PROTECTION_WELDER, - 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|HIDETAIL, - ), - 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_marines - melee = 50 - bullet = 50 - laser = 50 - energy = 50 - bomb = 50 - bio = 100 - fire = 100 - acid = 50 - wound = 20 - -/obj/item/mod/control/pre_equipped/marine - theme = /datum/mod_theme/marines - applied_cell = /obj/item/stock_parts/cell/bluespace - applied_modules = list( - /obj/item/mod/module/storage/large_capacity, - /obj/item/mod/module/emp_shield, - /obj/item/mod/module/magnetic_harness, - /obj/item/mod/module/holster, - /obj/item/mod/module/flashlight, - /obj/item/mod/module/jetpack, - /obj/item/mod/module/noslip, - /obj/item/mod/module/power_kick, - /obj/item/mod/module/megaphone, - /obj/item/mod/module/springlock/contractor, - /obj/item/mod/module/dna_lock, //in lieu of req_access - /obj/item/mod/module/visor/sechud, //for identifying teammates also in suits - ) - default_pins = list( - /obj/item/mod/module/holster, - /obj/item/mod/module/jetpack, - /obj/item/mod/module/power_kick, - ) - -/obj/item/mod/control/pre_equipped/marine/engineer //smartgunner version of modsuit, with less versatile modules but the ALMIGHTY SMARTGUN - theme = /datum/mod_theme/marines - applied_cell = /obj/item/stock_parts/cell/bluespace - applied_modules = list( - /obj/item/mod/module/storage/large_capacity, - /obj/item/mod/module/emp_shield/advanced, - /obj/item/mod/module/flashlight, - /obj/item/mod/module/jetpack, - /obj/item/mod/module/noslip, - /obj/item/mod/module/dna_lock, - /obj/item/mod/module/visor/sechud, - /obj/item/mod/module/smartgun/marines, - ) - default_pins = list( - /obj/item/mod/module/jetpack, - /obj/item/mod/module/smartgun/marines, - ) diff --git a/modular_skyrat/modules/medical/code/carbon_examine.dm b/modular_skyrat/modules/medical/code/carbon_examine.dm deleted file mode 100644 index e86ed9f9267db1..00000000000000 --- a/modular_skyrat/modules/medical/code/carbon_examine.dm +++ /dev/null @@ -1,84 +0,0 @@ -/mob/living/carbon/examine_more(mob/user) - . = ..() - var/msg = list(span_notice("<i>You examine [src] closer, and note the following...</i>")) - var/t_His = p_Their() - var/t_He = p_They() - var/t_Has = p_have() - - var/any_bodypart_damage = FALSE - for(var/X in bodyparts) - var/obj/item/bodypart/LB = X - if(LB.bodypart_flags & BODYPART_PSEUDOPART) - continue - var/limb_max_damage = LB.max_damage - var/status = "" - var/brutedamage = round(LB.brute_dam/limb_max_damage*100) - var/burndamage = round(LB.burn_dam/limb_max_damage*100) - switch(brutedamage) - if(20 to 50) - status = LB.light_brute_msg - if(51 to 75) - status = LB.medium_brute_msg - if(76 to 100) - status += LB.heavy_brute_msg - - if(burndamage >= 20 && status) - status += " and " - switch(burndamage) - if(20 to 50) - status += LB.light_burn_msg - if(51 to 75) - status += LB.medium_burn_msg - if(76 to 100) - status += LB.heavy_burn_msg - - if(status) - any_bodypart_damage = TRUE - msg += "\t<span class='warning'>[t_His] [LB.name] is [status].</span>" - - for(var/thing in LB.wounds) - any_bodypart_damage = TRUE - var/datum/wound/W = thing - switch(W.severity) - if(WOUND_SEVERITY_TRIVIAL) - msg += "\t<span class='warning'>[t_His] [LB.name] is suffering [W.a_or_from] [W.get_topic_name(user)].</span>" - if(WOUND_SEVERITY_MODERATE) - msg += "\t<span class='warning'>[t_His] [LB.name] is suffering [W.a_or_from] [W.get_topic_name(user)]!</span>" - if(WOUND_SEVERITY_SEVERE) - msg += "\t<span class='warning'><b>[t_His] [LB.name] is suffering [W.a_or_from] [W.get_topic_name(user)]!</b></span>" - if(WOUND_SEVERITY_CRITICAL) - msg += "\t<span class='warning'><b>[t_His] [LB.name] is suffering [W.a_or_from] [W.get_topic_name(user)]!!</b></span>" - if(LB.current_gauze) - msg += "\t<span class='notice'><i>[t_His] [LB.name] is [LB.current_gauze.get_gauze_usage_prefix()] with <a href='?src=[REF(LB.current_gauze)];remove=1'>[LB.current_gauze.get_gauze_description()]</a>.</i></span>" - - if(!any_bodypart_damage) - msg += "\t<span class='smallnotice'><i>[t_He] [t_Has] no significantly damaged bodyparts.</i></span>" - - var/list/visible_scars - if(all_scars) - for(var/i in all_scars) - var/datum/scar/S = i - if(S.is_visible(user)) - LAZYADD(visible_scars, S) - - if(!visible_scars) - msg |= "\t<span class='smallnotice'><i>[t_He] [t_Has] no visible scars.</i></span>" - else - for(var/i in visible_scars) - var/datum/scar/S = i - var/scar_text = S.get_examine_description(user) - if(scar_text) - msg += "[scar_text]" - - - if(dna) //not all carbons have it. eg - xenos - //On closer inspection, this man isnt a man at all! - var/list/covered_zones = get_covered_body_zones() - for(var/obj/item/bodypart/part as anything in bodyparts) - if(part.body_zone in covered_zones) - continue - if(part.limb_id != (dna.species.examine_limb_id ? dna.species.examine_limb_id : dna.species.id)) - . += "[span_info("[p_They()] [p_have()] \an [part.name].")]" - - - return msg diff --git a/modular_skyrat/modules/medical/code/carbon_update_icons.dm b/modular_skyrat/modules/medical/code/carbon_update_icons.dm deleted file mode 100644 index 0c3b4bb4f47de9..00000000000000 --- a/modular_skyrat/modules/medical/code/carbon_update_icons.dm +++ /dev/null @@ -1,14 +0,0 @@ -/mob/living/carbon/proc/update_bandage_overlays() - remove_overlay(BANDAGE_LAYER) - - var/mutable_appearance/overlays = mutable_appearance('modular_skyrat/modules/medical/icons/on_limb_overlays.dmi', "", -BANDAGE_LAYER) - overlays_standing[BANDAGE_LAYER] = overlays - - for(var/b in bodyparts) - var/obj/item/bodypart/BP = b - var/obj/item/stack/medical/gauze/our_gauze = BP.current_gauze - if (!our_gauze) - continue - overlays.add_overlay(our_gauze.get_overlay_prefix()) - - apply_overlay(BANDAGE_LAYER) diff --git a/modular_skyrat/modules/medical/readme.md b/modular_skyrat/modules/medical/readme.md deleted file mode 100644 index 6ab0af32ddf7e9..00000000000000 --- a/modular_skyrat/modules/medical/readme.md +++ /dev/null @@ -1,51 +0,0 @@ -<!-- This should be copy-pasted into the root of your module folder as readme.md --> - -https://github.com/Skyrat-SS13/Skyrat-tg/pull/2336 -https://github.com/Skyrat-SS13/Skyrat-tg/pull/23733 - -## Skyrat Medical Update <!--Title of your addition.--> - -Module ID: SKYRAT_MEDICAL_UPDATE <!-- Uppercase, UNDERSCORE_CONNECTED name of your module, that you use to mark files. This is so people can case-sensitive search for your edits, if any. --> - -### Description: - -Various changes to the medical system, from adding bandage overlays, to new wounds, to modularized procs. - -<!-- Here, try to describe what your PR does, what features it provides and any other directly useful information. --> - -### TG Proc/File Changes: - -- code/_DEFINES/wounds.dm: Added muscle/synth wound series, added them to the global list of wound series -- cat2_medicine_reagents.dm: /datum/reagent/medicine/c2/hercuri/on_mob_life, Allowed hercuri to affect synthetics, also changed hercuri process flags for this purpose -- quirks.dm: Commented out the quadruple_amputee/frail blacklist as frail can now apply to prosthetics -<!-- If you edited any core procs, you should list them here. You should specify the files and procs you changed. -E.g: -- `code/modules/mob/living.dm`: `proc/overriden_proc`, `var/overriden_var` ---> - -### Modular Overrides: - -- N/A -<!-- If you added a new modular override (file or code-wise) for your module, you should list it here. Code files should specify what procs they changed, in case of multiple modules using the same file. -E.g: -- `modular_skyrat/master_files/sound/my_cool_sound.ogg` -- `modular_skyrat/master_files/code/my_modular_override.dm`: `proc/overriden_proc`, `var/overriden_var` ---> - -### Defines: - -- Many local synthetic wound defines -<!-- If you needed to add any defines, mention the files you added those defines in, along with the name of the defines. --> - -### Included files that are not contained in this module: - -- strings/wounds/metal_scar_desc.json -- Required to be here for _string_lists.dm usage -<!-- Likewise, be it a non-modular file or a modular one that's not contained within the folder belonging to this specific module, it should be mentioned here. Good examples are icons or sounds that are used between multiple modules, or other such edge-cases. --> - -### Credits: - -Azarak - Original medical update, muscle wounds, bandage overlays -Niko - Synthetic wounds -TG coding/Skyrat coding channels and community - Support, ideas, reviews - -<!-- Here go the credits to you, dear coder, and in case of collaborative work or ports, credits to the original source of the code. --> diff --git a/modular_skyrat/modules/medical_designs/medical_designs.dm b/modular_skyrat/modules/medical_designs/medical_designs.dm deleted file mode 100644 index d0360fbfc2bc4a..00000000000000 --- a/modular_skyrat/modules/medical_designs/medical_designs.dm +++ /dev/null @@ -1,20 +0,0 @@ -/datum/design/hospital_gown - name = "Hospital Gown" - id = "hospital_gown" - build_type = PROTOLATHE - materials = list(/datum/material/plastic = SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL - ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE - -/datum/design/surgery/healing/robotic_healing_upgrade - name = "Repair robotic limbs upgrade: Advanced" - surgery = /datum/surgery/robot_healing/upgraded - id = "robotic_heal_surgery_upgrade" - -/datum/design/surgery/healing/robotic_healing_upgrade_2 - name = "Repair robotic limbs upgrade: Experimental" - surgery = /datum/surgery/robot_healing/experimental - id = "robotic_heal_surgery_upgrade_2" diff --git a/modular_skyrat/modules/microfusion/code/microfusion_designs.dm b/modular_skyrat/modules/microfusion/code/microfusion_designs.dm deleted file mode 100644 index ad8dd991a65615..00000000000000 --- a/modular_skyrat/modules/microfusion/code/microfusion_designs.dm +++ /dev/null @@ -1,276 +0,0 @@ -#define RND_CATEGORY_MICROFUSION_WEAPONS "/Weaponry (Microfusion)" -#define RND_MICROFUSION_CELLS "/Cells" -#define RND_MICROFUSION_CELL_ATTACHMENTS "/Cell Attachments" -#define RND_MICROFUSION_EMITTERS "/Phase Emitters" -// god forgive me -#define RND_MICROFUSION_ATTACHMENT "/Attachments" -#define RND_MICROFUSION_ATTACHMENT_BARREL " (Barrel)" -#define RND_MICROFUSION_ATTACHMENT_UNDERBARREL " (Underbarrel)" -#define RND_MICROFUSION_ATTACHMENT_RAIL " (Rail)" -#define RND_MICROFUSION_ATTACHMENT_UNIQUE " (Cosmetic)" - -// BASE FOR MCR DESIGNS -/datum/design/microfusion - name = "Microfusion Part" - build_type = PROTOLATHE | AWAY_LATHE - departmental_flags = DEPARTMENT_BITFLAG_SECURITY - construction_time = 10 SECONDS //dunno if this is for mechfabs or what but I'll keep this anyway - category = list(RND_CATEGORY_MICROFUSION_WEAPONS) - -// EMITTERS - -/datum/design/microfusion/phase_emitter - name = "Placeholder Microfusion Phase Emitter" - desc = "You shouldn't see this. Still, odd how there's no basic phase emitter design, despite how redundant it'd be." - category = list(RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_EMITTERS) - -/datum/design/microfusion/phase_emitter/enhanced - name = "Enhanced Microfusion Phase Emitter" - desc = "The core of a microfusion projection weapon, produces the laser." - id = "enhanced_microfusion_phase_emitter" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 5) - build_path = /obj/item/microfusion_phase_emitter/enhanced - -/datum/design/microfusion/phase_emitter/advanced - name = "Advanced Microfusion Phase Emitter" - id = "advanced_microfusion_phase_emitter" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 5, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 5) - build_path = /obj/item/microfusion_phase_emitter/advanced - -/datum/design/microfusion/phase_emitter/bluespace - name = "Bluespace Microfusion Phase Emitter" - id = "bluespace_microfusion_phase_emitter" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 5, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 5, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 5) - build_path = /obj/item/microfusion_phase_emitter/bluespace - -// CELLS - -/datum/design/microfusion/cell - name = "Microfusion Cell" - desc = "A microfusion cell. There's a basic type defined next to this, right?" - category = list(RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_CELLS) - -/datum/design/microfusion/cell/basic - name = "Basic Microfusion Cell" - desc = "A basic microfusion cell with a capacity of 1200 MF and and 1 attachment point." - id = "basic_microfusion_cell" - build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2) - build_path = /obj/item/stock_parts/cell/microfusion - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_CELLS // i kinda hate this but what can you do - ) - -/datum/design/microfusion/cell/enhanced - name = "Enhanced Microfusion Cell" - desc = "An enhanced microfusion cell with a capacity of 1500 MF and 1 attachment point." - id = "enhanced_microfusion_cell" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 2) - build_path = /obj/item/stock_parts/cell/microfusion/enhanced - -/datum/design/microfusion/cell/advanced - name = "Advanced Microfusion Cell" - desc = "An advanced microfusion cell with a capacity of 1700 MF and 3 attachment points." - id = "advanced_microfusion_cell" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3) - build_path = /obj/item/stock_parts/cell/microfusion/advanced - -/datum/design/microfusion/cell/bluespace - name = "Bluespace Microfusion Cell" - desc = "A bluespace microfusion cell with a capacity of 2000 MF and 3 attachment points." - id = "bluespace_microfusion_cell" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 3, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3, /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3) - build_path = /obj/item/stock_parts/cell/microfusion/bluespace - -// CELL UPGRADES - -/datum/design/microfusion/cell_attachment - name = "Placeholder Cell Attachment" - desc = "You shouldn't be seeing this." - category = list(RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_CELL_ATTACHMENTS) - -/datum/design/microfusion/cell_attachment/stabilising - name = "Stabilising Microfusion Cell Attachment" - desc = "Stabilises the internal fusion reaction of microfusion cells, preventing sparks during firing and occasional radiation pulses when used in tandem with a self-charging attachment." - id = "microfusion_cell_attachment_stabiliser" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/microfusion_cell_attachment/stabiliser - -/datum/design/microfusion/cell_attachment/overcapacity - name = "Overcapacity Microfusion Cell Attachment" - desc = "An attachment for microfusion cells that increases MF capacity." - id = "microfusion_cell_attachment_overcapacity" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 20) - build_path = /obj/item/microfusion_cell_attachment/overcapacity - -/datum/design/microfusion/cell_attachment/selfcharging - name = "Self-Charging Microfusion Cell Attachment" - desc = "Contains a small amount of infinitely decaying nuclear material, causing the fusion reaction to be self sustaining. WARNING: May cause radiation burns if not stabilised." - id = "microfusion_cell_attachment_selfcharging" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 5, /datum/material/uranium = SHEET_MATERIAL_AMOUNT * 3, /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 3, /datum/material/bluespace = SHEET_MATERIAL_AMOUNT) // Makes it almost in-line with Advanced Egun pricing - build_path = /obj/item/microfusion_cell_attachment/selfcharging - -/datum/design/microfusion/attachment - name = "Placeholder MCR Attachment" - desc = "You *really* shouldn't be seeing this. Now in different attachment flavors! The Req line will hate you." - category = list(RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_ATTACHMENT) - -// RAIL MODS - -/datum/design/microfusion/attachment/rail_slot - name = "Placeholder Microfusion Rail Slot Attachment" - category = list(RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_ATTACHMENT + RND_MICROFUSION_ATTACHMENT_RAIL) - -/datum/design/microfusion/attachment/rail_slot/rail - name = "Microfusion Weapon Rail" - desc = "A carrying handle/rail system for any additional attachments, such as a seclite and/or bayonet." - id = "microfusion_gun_attachment_rail" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 5, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 5) - build_path = /obj/item/microfusion_gun_attachment/rail - -/datum/design/microfusion/attachment/rail_slot/scope - name = "Microfusion Weapon Scope" - desc = "A scope. For microfusion weapon platforms, probably." - id = "microfusion_gun_attachment_scope" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 5) - build_path = /obj/item/microfusion_gun_attachment/scope - -// UNDERBARREL MODS - -/datum/design/microfusion/attachment/underbarrel - name = "Placeholder Microfusion Underbarrel Slot Attachment" - category = list(RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_ATTACHMENT + RND_MICROFUSION_ATTACHMENT_UNDERBARREL) - -/datum/design/microfusion/attachment/underbarrel/grip - name = "Microfusion Weapon Grip" - desc = "A grip. For microfusion weapon platforms, ostensibly." - id = "microfusion_gun_attachment_grip" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 5) - build_path = /obj/item/microfusion_gun_attachment/grip - -/datum/design/microfusion/attachment/underbarrel/heatsink - name = "Phase Emitter Heatsink" - desc = "A heatsink attachment for your microfusion weapon. Massively increases cooling potential." - id = "microfusion_gun_attachment_heatsink" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 5, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 5) - build_path = /obj/item/microfusion_gun_attachment/heatsink - -// BARREL MODS (there's a lot) - -/datum/design/microfusion/attachment/barrel - name = "Placeholder Microfusion Barrel Slot Attachment" - category = list(RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_ATTACHMENT + RND_MICROFUSION_ATTACHMENT_BARREL) - -/datum/design/microfusion/attachment/barrel/suppressor - name = "Suppressor Lens Attachment" - desc = "An experimental barrel attachment that dampens the soundwave of the emitter, suppressing the report. Does not make the lasers themselves more stealthy, as they are lasers." - id = "microfusion_gun_attachment_suppressor" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/microfusion_gun_attachment/barrel/suppressor - -/datum/design/microfusion/attachment/barrel/honk - name = "Bananium Phase Emitter \"Upgrade\"" - desc = "Makes your lasers into the greatest clowning tool ever made. HONK!" - id = "microfusion_gun_attachment_honk" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bananium = HALF_SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/microfusion_gun_attachment/barrel/honk - -/datum/design/microfusion/attachment/barrel/lance - name = "Lance Induction Carriage" - desc = "Turns the gun into a designated marksman rifle." - id = "microfusion_gun_attachment_lance" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 5, /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 5, /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 5) - build_path = /obj/item/microfusion_gun_attachment/barrel/lance - -// EMITTER UPGRADES (they're still barrel upgrades, though) - -/datum/design/microfusion/attachment/barrel/scatter - name = "Diffuser Microfusion Lens Attachment" - desc = "Splits the microfusion laser beam entering the lens." - id = "microfusion_gun_attachment_scatter" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 5, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 5) - build_path = /obj/item/microfusion_gun_attachment/barrel/scatter - -/datum/design/microfusion/attachment/barrel/scatter/max - name = "Crystalline Diffuser Microfusion Lens Attachment" - desc = "Splits the microfusion laser beam entering the lens even more." - id = "microfusion_gun_attachment_scattermax" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 5, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/microfusion_gun_attachment/barrel/scatter/max - -/datum/design/microfusion/attachment/barrel/superheat - name = "Superheating Phase Emitter Upgrade" - desc = "Superheats the beam, causing targets to ignite." - id = "microfusion_gun_attachment_superheat" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 5, /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/microfusion_gun_attachment/barrel/superheat - -/datum/design/microfusion/attachment/barrel/hellfire - name = "Hellfire Phase Emitter Upgrade" - desc = "Overheats the beam, causing nastier wounds and higher damage." - id = "microfusion_gun_attachment_hellfire" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 5, /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 5) - build_path = /obj/item/microfusion_gun_attachment/barrel/hellfire - -/datum/design/microfusion/attachment/barrel/repeater - name = "Repeating Phase Emitter Upgrade" - desc = "Upgrades the central phase emitter to repeat twice." - id = "microfusion_gun_attachment_repeater" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 5, /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/microfusion_gun_attachment/barrel/repeater - -/datum/design/microfusion/attachment/barrel/repeater/penetrator - name = "Focused Repeating Phase Emitter Upgrade" - desc = "Upgrades the central phase emitter to repeat twice and penetrate armor." - id = "microfusion_gun_attachment_penetrator" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 5, /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/microfusion_gun_attachment/barrel/repeater/penetrator - -/datum/design/microfusion/attachment/barrel/xray - name = "Phase Inverter Emitter Array" - desc = "Experimental technology that inverts the central phase emitter causing the wave frequency to shift into X-rays that pierce solid objects. CAUTION: Phase emitter heats up very quickly." - id = "microfusion_gun_attachment_xray" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 5, /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 5) - build_path = /obj/item/microfusion_gun_attachment/barrel/xray - -// COSMETICS - -/datum/design/microfusion/attachment/unique - name = "Placeholder Microfusion Unique/Cosmetic Attachment" - category = list(RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_ATTACHMENT + RND_MICROFUSION_ATTACHMENT_UNIQUE) - -/datum/design/microfusion/attachment/unique/rgb - name = "Phase Emitter Spectrograph" - desc = "An attachment hooked up to the phase emitter, allowing the user to adjust the color of the beam outputted. This has seen widespread use by various factions capable of getting their hands on microfusion weapons, whether as a calling card or simply for entertainment." - id = "microfusion_gun_attachment_rgb" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 5, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 5) - build_path = /obj/item/microfusion_gun_attachment/rgb - -/datum/design/microfusion/attachment/unique/camo_black - name = "Black Camo Microfusion Frame" - desc = "A frame modification for the MCR-10, changing the color of the gun to black." - id = "microfusion_gun_attachment_black_camo" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 5) - build_path = /obj/item/microfusion_gun_attachment/camo - -/datum/design/microfusion/attachment/unique/camo_nanotrasen - name = "Nanotrasen Camo Microfusion Frame" - desc = "A frame modification for the MCR-01, changing the color of the gun to blue." - id = "microfusion_gun_attachment_nt_camo" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 5) - build_path = /obj/item/microfusion_gun_attachment/camo/nanotrasen - -/datum/design/microfusion/attachment/unique/camo_syndicate - name = "Blood Red Camo Microfusion Frame" - desc = "A frame modification for the MCR-01, changing the color of the gun to a slick blood red." - id = "microfusion_gun_attachment_syndi_camo" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 5) - build_path = /obj/item/microfusion_gun_attachment/camo/syndicate - -/datum/design/microfusion/attachment/unique/camo_bananium - name = "Bananium Microfusion Frame" - desc = "A frame modification for the MCR-01, plating the gun in bananium." - id = "microfusion_gun_attachment_honk_camo" - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bananium = SMALL_MATERIAL_AMOUNT * 5) - build_path = /obj/item/microfusion_gun_attachment/camo/honk diff --git a/modular_skyrat/modules/microfusion/code/projectiles.dm b/modular_skyrat/modules/microfusion/code/projectiles.dm deleted file mode 100644 index 53f19941f8d67c..00000000000000 --- a/modular_skyrat/modules/microfusion/code/projectiles.dm +++ /dev/null @@ -1,101 +0,0 @@ -/obj/item/ammo_casing - ///What volume should the sound play at? - var/fire_sound_volume = 50 - -/obj/item/ammo_casing/energy/laser/microfusion - name = "microfusion energy lens" - projectile_type = /obj/projectile/beam/laser/microfusion - e_cost = LASER_SHOTS(10, STANDARD_CELL_CHARGE) // 10 shots with a normal cell. - select_name = "laser" - fire_sound = 'modular_skyrat/modules/microfusion/sound/laser_1.ogg' - fire_sound_volume = 100 - -/obj/item/ammo_casing/proc/refresh_shot() - loaded_projectile = new projectile_type(src, src) - -/obj/projectile/beam/laser/microfusion - name = "microfusion laser" - icon = 'modular_skyrat/modules/microfusion/icons/projectiles.dmi' - damage = 25 - -/obj/projectile/beam/microfusion_disabler - name = "microfusion disabler laser" - icon = 'modular_skyrat/modules/microfusion/icons/projectiles.dmi' - icon_state = "disabler" - damage = 41 - damage_type = STAMINA - armor_flag = ENERGY - hitsound = 'sound/weapons/tap.ogg' - eyeblur = 0 - impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser - light_color = LIGHT_COLOR_BLUE - tracer_type = /obj/effect/projectile/tracer/disabler - muzzle_type = /obj/effect/projectile/muzzle/disabler - impact_type = /obj/effect/projectile/impact/disabler - -/obj/projectile/beam/laser/microfusion/superheated - name = "superheated microfusion laser" - icon_state = "laser_greyscale" - damage = 20 //Trading damage for fire stacks - color = LIGHT_COLOR_FIRE - light_color = LIGHT_COLOR_FIRE - -/obj/projectile/beam/laser/microfusion/superheated/on_hit(atom/target, blocked = 0, pierce_hit) - . = ..() - if(isliving(target)) - var/mob/living/living = target - living.adjust_fire_stacks(2) - living.ignite_mob() - -/obj/projectile/beam/laser/microfusion/hellfire - name = "hellfire microfusion laser" - icon_state = "laser_greyscale" - wound_bonus = 0 - damage = 20 // You are trading damage for a significant wound bonus and speed increase - speed = 0.6 - color = LIGHT_COLOR_FLARE - light_color = LIGHT_COLOR_FLARE - -/obj/projectile/beam/laser/microfusion/scatter - name = "scatter microfusion laser" - -/obj/projectile/beam/laser/microfusion/scatter/max - name = "scatter microfusion laser" - -/obj/projectile/beam/laser/microfusion/repeater - damage = 12.5 - -/obj/projectile/beam/laser/microfusion/penetrator - name = "focused microfusion laser" - damage = 20 - armour_penetration = 50 - -/obj/projectile/beam/laser/microfusion/lance - name = "lance microfusion laser" - damage = 50 // We're turning the gun into a heavylaser - tracer_type = /obj/effect/projectile/tracer/heavy_laser - muzzle_type = /obj/effect/projectile/muzzle/heavy_laser - impact_type = /obj/effect/projectile/impact/heavy_laser - speed = 0.4 - -/obj/projectile/beam/laser/microfusion/xray - name = "x-ray microfusion laser" - icon_state = "laser_greyscale" - color = COLOR_GREEN - light_color = COLOR_GREEN - projectile_piercing = PASSCLOSEDTURF|PASSGRILLE|PASSGLASS - -/obj/projectile/beam/laser/microfusion/honk - name = "funny microfusion laser" - icon_state = "laser_greyscale" - color = COLOR_VIVID_YELLOW - light_color = COLOR_VIVID_YELLOW - damage_type = STAMINA - damage = 25 - armor_flag = ENERGY - hitsound = 'sound/misc/slip.ogg' - impact_type = /obj/effect/projectile/impact/disabler - -/obj/projectile/beam/laser/microfusion/honk/Initialize(mapload) - . = ..() - AddComponent(/datum/component/slippery, 20) diff --git a/modular_skyrat/modules/modular_ert/code/pizza/head.dm b/modular_skyrat/modules/modular_ert/code/pizza/head.dm deleted file mode 100644 index 67cadee7d4a1ab..00000000000000 --- a/modular_skyrat/modules/modular_ert/code/pizza/head.dm +++ /dev/null @@ -1,6 +0,0 @@ -/obj/item/clothing/head/pizza - name = "dogginos manager hat" - desc = "Looks like something a Sol general would wear." - icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' - icon_state = "dominosleader" diff --git a/modular_skyrat/modules/modular_ert/code/pizza/misc_clothing.dm b/modular_skyrat/modules/modular_ert/code/pizza/misc_clothing.dm deleted file mode 100644 index 6cd5c6e65d9c63..00000000000000 --- a/modular_skyrat/modules/modular_ert/code/pizza/misc_clothing.dm +++ /dev/null @@ -1,18 +0,0 @@ -/obj/item/clothing/suit/toggle/jacket/hoodie/pizza - name = "dogginos hoodie" - desc = "A hoodie often worn by the delivery boys of this intergalactically known brand of pizza." - greyscale_colors = "#c40000" - -/obj/item/clothing/suit/pizzaleader - name = "dogginos manager coat" - desc = "A long, cool, flowing coat in a tasteless red colour." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - icon_state = "forensics_red_long" - -/obj/item/clothing/under/pizza - name = "dogginos employee uniform" - desc = "The standard issue for the famous dog-founded pizza brand, Dogginos." - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/centcom.dmi' //Dogginos is not technically affiliated with CC, but it's not OPPOSING it, and its an "ERT"... - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/centcom.dmi' - icon_state = "dominos" diff --git a/modular_skyrat/modules/modular_ert/code/pizza/weaponry.dm b/modular_skyrat/modules/modular_ert/code/pizza/weaponry.dm deleted file mode 100644 index 3ed5393430e4ff..00000000000000 --- a/modular_skyrat/modules/modular_ert/code/pizza/weaponry.dm +++ /dev/null @@ -1,16 +0,0 @@ -/obj/item/knife/hotknife - name = "thousand degree knife" - icon = 'modular_skyrat/modules/modular_ert/icons/pizza/hotknife.dmi' - icon_state = "hotknife" - inhand_icon_state = "hotknife" - desc = "Once known as Lightbringer, this sword has been demoted to a simple pizza cutting knife... It may still have its fire attack powers." - righthand_file = 'modular_skyrat/modules/modular_ert/icons/pizza/righthand.dmi' - lefthand_file = 'modular_skyrat/modules/modular_ert/icons/pizza/lefthand.dmi' - - /// How many fire stacks to apply on attack - var/fire_stacks = 4 - -/obj/item/knife/hotknife/attack(mob/living/victim, mob/living/attacker, params) - victim.adjust_fire_stacks(fire_stacks) - victim.ignite_mob() - return ..() diff --git a/modular_skyrat/modules/modular_ert/code/readme.md b/modular_skyrat/modules/modular_ert/code/readme.md deleted file mode 100644 index cd84184500f509..00000000000000 --- a/modular_skyrat/modules/modular_ert/code/readme.md +++ /dev/null @@ -1,43 +0,0 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/2946 & https://github.com/Skyrat-SS13/Skyrat-tg/pull/10662 for NTrauma -https://github.com/Skyrat-SS13/Skyrat-tg/pull/4781 for ODST -https://github.com/Skyrat-SS13/Skyrat-tg/pull/6440 for Fumigator and Engineer -https://github.com/Skyrat-SS13/Skyrat-tg/pull/5630 for Pizza - -## Title: Modular Emergency Response Teams - -MODULE ID: modular_ert - -### Description: - -- Use this module for any Skyrat-unique ERTs, including their outfits, unique equipment, and ERT datums! -- DO NOT PUT GENERAL-USE ITEMS IN HERE. ITEMS IN HERE SHOULD #ONLY# SHOW UP ON THEIR RELATED ERT. - -- (Using TG Outfits and Datums) Adds a simple Engi-Maintinence ERT of non-spaceproof, generic repair dudes. -- Adds a Fumigator ERT specialized in pest control. -- Adds a specialized orbital shok droop trooper ERT that allows for a quick security response via pod. -- Adds a Pizza Delivery "ERT" for... pizza delivery. -- Adds a specialized medical team ERT that allows for a better medical response. - -### TG Proc Changes: - -- N/A - -### Defines: - -- N/A - -### Master file additions - -- Most clothing icon files: -- modular_skyrat/master_files/icons/mob/clothing/xyz -- modular_skyrat/master_files/icons/obj/clothing/xyz - -### Included files that are not contained in this module: - -- N/A - -### Credits: - -- pinkblossom6 - Original Sprites and Code for NTrauma & ODST -- Orion_the_Fox - Updated Sprites and Code for NTrauma -- thestubborn - Engineer, Fumigator, and Pizza ERTs diff --git a/modular_skyrat/modules/modular_implants/code/nif_research.dm b/modular_skyrat/modules/modular_implants/code/nif_research.dm deleted file mode 100644 index 4e88040cddff23..00000000000000 --- a/modular_skyrat/modules/modular_implants/code/nif_research.dm +++ /dev/null @@ -1,101 +0,0 @@ -/datum/design/nifsoft_remover - name = "Lopland 'Wrangler' NIF-Cutter" - desc = "A small device that lets the user remove NIFSofts from a NIF user." - id = "nifsoft_remover" - build_type = PROTOLATHE | AWAY_LATHE - build_path = /obj/item/nifsoft_remover - materials = list(/datum/material/iron = 200, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 5, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 5) - category = list(RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_SECURITY) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY - -/datum/design/nifsoft_money_sense - name = "Automatic Appraisal NIFSoft" - desc = "A NIFSoft datadisk containing the Automatic Appraisal NIFsoft." - id = "nifsoft_money_sense" - build_type = PROTOLATHE | AWAY_LATHE - build_path = /obj/item/disk/nifsoft_uploader/money_sense - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plastic = SHEET_MATERIAL_AMOUNT) - category = list(RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_CARGO) - departmental_flags = DEPARTMENT_BITFLAG_CARGO - -/datum/design/soulcatcher_device - name = "Evoker-Type RSD" - desc = "An RSD instrument that lets the user pull the consciousness from a body and store it virtually." - id = "soulcatcher_device" - build_type = PROTOLATHE | AWAY_LATHE - build_path = /obj/item/handheld_soulcatcher - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, /datum/material/silver = SHEET_MATERIAL_AMOUNT, /datum/material/bluespace = SHEET_MATERIAL_AMOUNT) - category = list(RND_CATEGORY_TOOLS + RND_SUBCATEGORY_EQUIPMENT_MEDICAL) // look, the anesthetic machine's there too - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE - -/datum/design/mini_soulcatcher - name = "Poltergeist-Type RSD" - desc = "A miniature version of a Soulcatcher that can be attached to various objects." - id = "mini_soulcatcher" - build_type = PROTOLATHE | AWAY_LATHE - build_path = /obj/item/attachable_soulcatcher - materials = list(/datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5) - category = list(RND_CATEGORY_AI + RND_SUBCATEGORY_AI_MISC) // look, the anesthetic machine's there too - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_SERVICE | DEPARTMENT_BITFLAG_MEDICAL - -/datum/design/nifsoft_hud - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plastic = SHEET_MATERIAL_AMOUNT) - category = list(RND_CATEGORY_EQUIPMENT) - -/datum/design/nifsoft_hud/medical - name = "Medical HUD NIFSoft" - desc = "A NIFSoft datadisk containing the Medical HUD NIFsoft." - id = "nifsoft_hud_medical" - build_path = /obj/item/disk/nifsoft_uploader/med_hud - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL - -/datum/design/nifsoft_hud/security - name = "Security HUD NIFSoft" - desc = "A NIFSoft datadisk containing the Security HUD NIFsoft." - id = "nifsoft_hud_security" - build_path = /obj/item/disk/nifsoft_uploader/sec_hud - departmental_flags = DEPARTMENT_BITFLAG_SECURITY - -/datum/design/nifsoft_hud/cargo - name = "Permit HUD NIFSoft" - desc = "A NIFSoft datadisk containing the Permit HUD NIFsoft." - id = "nifsoft_hud_cargo" - build_path = /obj/item/disk/nifsoft_uploader/permit_hud - departmental_flags = DEPARTMENT_BITFLAG_CARGO - -/datum/design/nifsoft_hud/diagnostic - name = "Diagnostic HUD NIFSoft" - desc = "A NIFSoft datadisk containing the Diagnostic HUD NIFsoft." - id = "nifsoft_hud_diagnostic" - build_path = /obj/item/disk/nifsoft_uploader/diag_hud - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE - -/datum/design/nifsoft_hud/science - name = "Science HUD NIFSoft" - desc = "A NIFSoft datadisk containing the Science HUD NIFsoft." - id = "nifsoft_hud_science" - build_path = /obj/item/disk/nifsoft_uploader/sci_hud - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_SERVICE | DEPARTMENT_BITFLAG_MEDICAL - -/datum/design/nifsoft_hud/meson - name = "Meson HUD NIFSoft" - desc = "A NIFSoft datadisk containing the Meson HUD NIFsoft." - id = "nifsoft_hud_meson" - build_path = /obj/item/disk/nifsoft_uploader/meson_hud - departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_ENGINEERING - -/datum/design/nif_hud_kit - name = "NIF HUD Retrofitter" - desc = "A kit that modifies select glasses to display HUDs for NIFs." - id = "nifsoft_hud_kit" - build_type = PROTOLATHE | AWAY_LATHE - departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SERVICE | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SECURITY - category = list(RND_CATEGORY_EQUIPMENT) - materials = list( - /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, - /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, - /datum/material/plastic = SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/nif_hud_adapter - diff --git a/modular_skyrat/modules/modular_items/code/cross.dm b/modular_skyrat/modules/modular_items/code/cross.dm deleted file mode 100644 index 20ce2d86325729..00000000000000 --- a/modular_skyrat/modules/modular_items/code/cross.dm +++ /dev/null @@ -1,21 +0,0 @@ -/obj/item/crucifix - name = "ornate crucifix" - desc = "An ornate golden crucifix, adorned with various gemstones and tiny carvings. For some reason, it always feels warm to the touch." - icon = 'modular_skyrat/modules/modular_items/icons/crucifix.dmi' - icon_state = "cross_ornate" - lefthand_file = 'modular_skyrat/modules/modular_items/icons/cross_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/icons/cross_right.dmi' - force = 5 //Gem-encrusted and reinforced with GOD - throw_speed = 3 - throw_range = 4 - throwforce = 10 - w_class = WEIGHT_CLASS_TINY - -/datum/crafting_recipe/cross - name = "Ornate Cross" - result = /obj/item/crucifix - reqs = list(/obj/item/stack/sheet/mineral/gold = 1, - /obj/item/stack/sheet/mineral/diamond = 1) - tool_behaviors = list(TOOL_SCREWDRIVER) - time = 20 - category = CAT_MISC diff --git a/modular_skyrat/modules/modular_items/code/designs.dm b/modular_skyrat/modules/modular_items/code/designs.dm deleted file mode 100644 index e811691e3b5bc9..00000000000000 --- a/modular_skyrat/modules/modular_items/code/designs.dm +++ /dev/null @@ -1,123 +0,0 @@ -/* -* Designs -*/ - -/datum/design/health_hud_aviator - name = "Medical HUD Aviators" - desc = "A heads-up display that scans the humanoids in view and provides accurate data about their health status. This HUD has been fitted inside of a pair of sunglasses." - id = "health_hud_aviator" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4) - build_path = /obj/item/clothing/glasses/hud/ar/aviator/health - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL - ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL - -/datum/design/security_hud_aviator - name = "Security HUD Aviators" - desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status. This HUD has been fitted inside of a pair of sunglasses." - id = "security_hud_aviator" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 2,) - build_path = /obj/item/clothing/glasses/hud/ar/aviator/security - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY - ) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY - -/datum/design/diagnostic_hud_aviator - name = "Diagnostic HUD Aviators" - desc = "A heads-up display used to analyze and determine faults within robotic machinery. This HUD has been fitted inside of a pair of sunglasses." - id = "diagnostic_hud_aviator" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4) - build_path = /obj/item/clothing/glasses/hud/ar/aviator/diagnostic - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE - ) - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE - -/datum/design/meson_hud_aviator - name = "Meson HUD Aviators" - desc = "A heads-up display used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition. This HUD has been fitted inside of a pair of sunglasses." - id = "meson_hud_aviator" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4) - build_path = /obj/item/clothing/glasses/hud/ar/aviator/meson - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING - ) - departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_ENGINEERING - -/datum/design/science_hud_aviator - name = "Science Aviators" - desc = "A pair of tacky purple aviator sunglasses that allow the wearer to recognize various chemical compounds with only a glance." - id = "science_hud_aviator" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4) - build_path = /obj/item/clothing/glasses/hud/ar/aviator/science - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE - ) - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE - -/datum/design/health_hud_projector - name = "Retinal Projector Medical HUD" - desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than goggles." - id = "health_hud_projector" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4) - build_path = /obj/item/clothing/glasses/hud/ar/projector/health - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL - ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL - -/datum/design/security_hud_projector - name = "Retinal Projector Security HUD" - desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than goggles." - id = "security_hud_projector" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 2,) - build_path = /obj/item/clothing/glasses/hud/ar/projector/security - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY - ) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY - -/datum/design/diagnostic_hud_projector - name = "Retinal Projector Diagnostic HUD" - desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than goggles." - id = "diagnostic_hud_projector" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4) - build_path = /obj/item/clothing/glasses/hud/ar/projector/diagnostic - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE - ) - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE - -/datum/design/meson_hud_projector - name = "Retinal Projector Meson HUD" - desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than goggles." - id = "meson_hud_projector" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4) - build_path = /obj/item/clothing/glasses/hud/ar/projector/meson - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING - ) - departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_ENGINEERING - -/datum/design/science_hud_projector - name = "Science Retinal Projector" - desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than goggles." - id = "science_hud_projector" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4) - build_path = /obj/item/clothing/glasses/hud/ar/projector/science - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE + RND_SUBCATEGORY_EQUIPMENT_MEDICAL - ) - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_MEDICAL diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/decals.dm b/modular_skyrat/modules/modular_items/lewd_items/code/decals.dm deleted file mode 100644 index 9b79648728b33a..00000000000000 --- a/modular_skyrat/modules/modular_items/lewd_items/code/decals.dm +++ /dev/null @@ -1,15 +0,0 @@ -/obj/effect/decal/cleanable/cum - name = "cum" - desc = "Ew... Gross." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_decals/lewd_decals.dmi' - icon_state = "cum_1" - random_icon_states = list("cum_1", "cum_2", "cum_3", "cum_4") - beauty = -50 - -/obj/effect/decal/cleanable/cum/femcum - name = "female cum" - desc = "Uhh... Someone had fun..." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_decals/lewd_decals.dmi' - icon_state = "femcum_1" - random_icon_states = list("femcum_1", "femcum_2", "femcum_3", "femcum_4") - beauty = -50 diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/climax.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/climax.dm deleted file mode 100644 index 5b68422ea654ae..00000000000000 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/climax.dm +++ /dev/null @@ -1,165 +0,0 @@ -#define CLIMAX_VAGINA "Vagina" -#define CLIMAX_PENIS "Penis" -#define CLIMAX_BOTH "Both" - -#define CLIMAX_ON_FLOOR "On the floor" -#define CLIMAX_IN_OR_ON "Climax in or on someone" - -/mob/living/carbon/human - /// Used to prevent nightmare scenarios. - var/refractory_period - -/mob/living/carbon/human/proc/climax(manual = TRUE) - if (CONFIG_GET(flag/disable_erp_preferences)) - return - - if(!client?.prefs?.read_preference(/datum/preference/toggle/erp/autocum) && !manual) - return - if(refractory_period > REALTIMEOFDAY) - return - refractory_period = REALTIMEOFDAY + 30 SECONDS - if(has_status_effect(/datum/status_effect/climax_cooldown) || !client?.prefs?.read_preference(/datum/preference/toggle/erp/sex_toy)) - return - - if(HAS_TRAIT(src, TRAIT_NEVERBONER) || has_status_effect(/datum/status_effect/climax_cooldown) || (!has_vagina() && !has_penis())) - visible_message(span_purple("[src] twitches, trying to cum, but with no result."), \ - span_purple("You can't have an orgasm!")) - return TRUE - - // Reduce pop-ups and make it slightly more frictionless (lewd). - var/climax_choice = has_penis() ? CLIMAX_PENIS : CLIMAX_VAGINA - - if(manual) - var/list/genitals = list() - if(has_vagina()) - genitals.Add(CLIMAX_VAGINA) - if(has_penis()) - genitals.Add(CLIMAX_PENIS) - genitals.Add(CLIMAX_BOTH) - else if(has_penis()) - genitals.Add(CLIMAX_PENIS) - climax_choice = tgui_alert(src, "You are climaxing, choose which genitalia to climax with.", "Genitalia Preference!", genitals) - - switch(gender) - if(MALE) - play_lewd_sound(get_turf(src), pick('modular_skyrat/modules/modular_items/lewd_items/sounds/final_m1.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/final_m2.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/final_m3.ogg'), 50, TRUE, pref_to_check = /datum/preference/toggle/erp/sounds) - if(FEMALE) - play_lewd_sound(get_turf(src), pick('modular_skyrat/modules/modular_items/lewd_items/sounds/final_f1.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/final_f2.ogg', - 'modular_skyrat/modules/modular_items/lewd_items/sounds/final_f3.ogg'), 50, TRUE, pref_to_check = /datum/preference/toggle/erp/sounds) - - var/self_orgasm = FALSE - var/self_their = p_their() - - if(climax_choice == CLIMAX_PENIS || climax_choice == CLIMAX_BOTH) - var/obj/item/organ/external/genital/penis/penis = get_organ_slot(ORGAN_SLOT_PENIS) - if(!get_organ_slot(ORGAN_SLOT_TESTICLES)) //If we have no god damn balls, we can't cum anywhere... GET BALLS! - visible_message(span_userlove("[src] orgasms, but nothing comes out of [self_their] penis!"), \ - span_userlove("You orgasm, it feels great, but nothing comes out of your penis!")) - - else if(is_wearing_condom()) - var/obj/item/clothing/sextoy/condom/condom = get_item_by_slot(LEWD_SLOT_PENIS) - condom.condom_use() - visible_message(span_userlove("[src] shoots [self_their] load into the [condom], filling it up!"), \ - span_userlove("You shoot your thick load into the [condom] and it catches it all!")) - - else if(!is_bottomless() && penis.visibility_preference != GENITAL_ALWAYS_SHOW) - visible_message(span_userlove("[src] cums inside [self_their] clothes!"), \ - span_userlove("You shoot your load, but you weren't naked, so you mess up your clothes!")) - self_orgasm = TRUE - - else - var/list/interactable_inrange_humans = list() - - // Unfortunately prefs can't be checked here, because byond/tgstation moment. - for(var/mob/living/carbon/human/iterating_human in (view(1, src) - src)) - interactable_inrange_humans[iterating_human.name] = iterating_human - - var/list/buttons = list(CLIMAX_ON_FLOOR) - if(interactable_inrange_humans.len) - buttons += CLIMAX_IN_OR_ON - - var/penis_climax_choice = tgui_alert(src, "Choose where to shoot your load.", "Load preference!", buttons) - - var/create_cum_decal = FALSE - - if(!penis_climax_choice || penis_climax_choice == CLIMAX_ON_FLOOR) - create_cum_decal = TRUE - visible_message(span_userlove("[src] shoots [self_their] sticky load onto the floor!"), \ - span_userlove("You shoot string after string of hot cum, hitting the floor!")) - - else - var/target_choice = tgui_input_list(src, "Choose a person to cum in or on.", "Choose target!", interactable_inrange_humans) - if(!target_choice) - create_cum_decal = TRUE - visible_message(span_userlove("[src] shoots [self_their] sticky load onto the floor!"), \ - span_userlove("You shoot string after string of hot cum, hitting the floor!")) - else - var/mob/living/carbon/human/target_human = interactable_inrange_humans[target_choice] - var/target_human_them = target_human.p_them() - - var/list/target_buttons = list() - - if(!target_human.wear_mask) - target_buttons += "mouth" - if(target_human.has_vagina(REQUIRE_GENITAL_EXPOSED)) - target_buttons += ORGAN_SLOT_VAGINA - if(target_human.has_anus(REQUIRE_GENITAL_EXPOSED)) - target_buttons += "asshole" - if(target_human.has_penis(REQUIRE_GENITAL_EXPOSED)) - var/obj/item/organ/external/genital/penis/other_penis = target_human.get_organ_slot(ORGAN_SLOT_PENIS) - if(other_penis.sheath != "None") - target_buttons += "sheath" - target_buttons += "On [target_human_them]" - - var/climax_into_choice = tgui_input_list(src, "Where on or in [target_human] do you wish to cum?", "Final frontier!", target_buttons) - - if(!climax_into_choice) - create_cum_decal = TRUE - visible_message(span_userlove("[src] shoots their sticky load onto the floor!"), \ - span_userlove("You shoot string after string of hot cum, hitting the floor!")) - else if(climax_into_choice == "On [target_human_them]") - create_cum_decal = TRUE - visible_message(span_userlove("[src] shoots their sticky load onto [target_human]!"), \ - span_userlove("You shoot string after string of hot cum onto [target_human]!")) - else - visible_message(span_userlove("[src] hilts [self_their] cock into [target_human]'s [climax_into_choice], shooting cum into [target_human_them]!"), \ - span_userlove("You hilt your cock into [target_human]'s [climax_into_choice], shooting cum into [target_human_them]!")) - to_chat(target_human, span_userlove("Your [climax_into_choice] fills with warm cum as [src] shoots [self_their] load into it.")) - - var/obj/item/organ/external/genital/testicles/testicles = get_organ_slot(ORGAN_SLOT_TESTICLES) - testicles.transfer_internal_fluid(null, testicles.internal_fluid_count * 0.6) // yep. we are sending semen to nullspace - if(create_cum_decal) - add_cum_splatter_floor(get_turf(src)) - - try_lewd_autoemote("moan") - if(climax_choice == CLIMAX_PENIS) - apply_status_effect(/datum/status_effect/climax) - apply_status_effect(/datum/status_effect/climax_cooldown) - if(self_orgasm) - add_mood_event("orgasm", /datum/mood_event/climaxself) - return TRUE - - if(climax_choice == CLIMAX_VAGINA || climax_choice == CLIMAX_BOTH) - var/obj/item/organ/external/genital/vagina/vagina = get_organ_slot(ORGAN_SLOT_VAGINA) - if(is_bottomless() || vagina.visibility_preference == GENITAL_ALWAYS_SHOW) - visible_message(span_userlove("[src] twitches and moans as [p_they()] climax from their vagina!"), span_userlove("You twitch and moan as you climax from your vagina!")) - add_cum_splatter_floor(get_turf(src), female = TRUE) - else - visible_message(span_userlove("[src] cums in [self_their] underwear from [self_their] vagina!"), \ - span_userlove("You cum in your underwear from your vagina! Eww.")) - self_orgasm = TRUE - - apply_status_effect(/datum/status_effect/climax) - apply_status_effect(/datum/status_effect/climax_cooldown) - if(self_orgasm) - add_mood_event("orgasm", /datum/mood_event/climaxself) - return TRUE - -#undef CLIMAX_VAGINA -#undef CLIMAX_PENIS -#undef CLIMAX_BOTH -#undef CLIMAX_ON_FLOOR -#undef CLIMAX_IN_OR_ON diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/climax.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/climax.dm deleted file mode 100644 index 0afaaecb580272..00000000000000 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/climax.dm +++ /dev/null @@ -1,63 +0,0 @@ -#define AROUSAL_REMOVAL_AMOUNT -12 -#define STAMINA_REMOVAL_AMOUNT_EXTERNAL 15 -#define STAMINA_REMOVAL_AMOUNT_SELF 8 - -// Lowers arousal and pleasure by a bunch to not chain climax. - -/datum/status_effect/climax - id = "climax" - tick_interval = 1 SECONDS - duration = 10 SECONDS - alert_type = null - -/datum/status_effect/climax/tick(seconds_between_ticks) - if(!owner.client?.prefs?.read_preference(/datum/preference/toggle/erp/sex_toy)) - return - - var/mob/living/carbon/human/affected_mob = owner - - owner.reagents.add_reagent(/datum/reagent/drug/aphrodisiac/dopamine, 0.5) - owner.adjustStaminaLoss(STAMINA_REMOVAL_AMOUNT_EXTERNAL) - affected_mob.adjust_arousal(AROUSAL_REMOVAL_AMOUNT) - affected_mob.adjust_pleasure(AROUSAL_REMOVAL_AMOUNT) - -// Likely ready to be deprecated code that could be removed, due to nymphomaniac not existing anymore. -/datum/status_effect/masturbation_climax - id = "climax" - tick_interval = 1 SECONDS - duration = 5 SECONDS // Multiplayer better than singleplayer mode. - alert_type = null - -// This one should not leave decals on the floor. Used in case if character cumming in beaker. -/datum/status_effect/masturbation_climax/tick(seconds_between_ticks) - if(!owner.client?.prefs?.read_preference(/datum/preference/toggle/erp/sex_toy)) - return - - var/mob/living/carbon/human/affected_mob = owner - - owner.reagents.add_reagent(/datum/reagent/drug/aphrodisiac/dopamine, 0.3) - owner.adjustStaminaLoss(STAMINA_REMOVAL_AMOUNT_SELF) - affected_mob.adjust_arousal(AROUSAL_REMOVAL_AMOUNT) - affected_mob.adjust_pleasure(AROUSAL_REMOVAL_AMOUNT) - -// A second step in preventing chain climax, and also prevents spam. -/datum/status_effect/climax_cooldown - id = "climax_cooldown" - tick_interval = 1 SECONDS - duration = 30 SECONDS - alert_type = null - -/datum/status_effect/climax_cooldown/tick(seconds_between_ticks) - var/obj/item/organ/external/genital/vagina/vagina = owner.get_organ_slot(ORGAN_SLOT_VAGINA) - var/obj/item/organ/external/genital/testicles/balls = owner.get_organ_slot(ORGAN_SLOT_TESTICLES) - var/obj/item/organ/external/genital/testicles/penis = owner.get_organ_slot(ORGAN_SLOT_PENIS) - var/obj/item/organ/external/genital/testicles/anus = owner.get_organ_slot(ORGAN_SLOT_ANUS) - - if(penis) - penis.aroused = AROUSAL_NONE - if(vagina) - vagina.aroused = AROUSAL_NONE - if(balls) - balls.aroused = AROUSAL_NONE - if(anus) - anus.aroused = AROUSAL_NONE diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/items/pills.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/items/pills.dm deleted file mode 100644 index b2a6a8e2e6d2f1..00000000000000 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/items/pills.dm +++ /dev/null @@ -1,34 +0,0 @@ -/obj/item/reagent_containers/pill/crocin - name = "crocin pill (10u)" - desc = "I've fallen, and I can't get it up!" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi' - icon_state = "crocin" - list_reagents = list(/datum/reagent/drug/aphrodisiac/crocin = 10) - -/obj/item/reagent_containers/pill/hexacrocin - name = "hexacrocin pill (10u)" - desc = "Pill in creepy heart form." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi' - icon_state = "hexacrocin" - list_reagents = list(/datum/reagent/drug/aphrodisiac/crocin/hexacrocin = 10) - -/obj/item/reagent_containers/pill/dopamine - name = "dopamine pill (5u)" - desc = "Feelings of orgasm, contained in a pill... Weird." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi' - icon_state = "dopamine" - list_reagents = list(/datum/reagent/drug/aphrodisiac/dopamine = 5) - -/obj/item/reagent_containers/pill/camphor - name = "camphor pill (10u)" - desc = "For the early bird." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi' - icon_state = "camphor" - list_reagents = list(/datum/reagent/drug/aphrodisiac/camphor = 10) - -/obj/item/reagent_containers/pill/pentacamphor - name = "pentacamphor pill (10u)" - desc = "The chemical equivalent of horny jail." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi' - icon_state = "pentacamphor" - list_reagents = list(/datum/reagent/drug/aphrodisiac/camphor/pentacamphor = 10) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/corset.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/corset.dm deleted file mode 100644 index 821e056bb94d80..00000000000000 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/corset.dm +++ /dev/null @@ -1,39 +0,0 @@ -#define TIGHT_SLOWDOWN 2 - -/obj/item/clothing/suit/corset - name = "corset" - desc = "A tight latex corset. How can anybody fit in THAT?" - icon_state = "corset" - inhand_icon_state = null - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi' - worn_icon_digi = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi' - worn_icon_taur_snake = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi' - worn_icon_taur_paw = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi' - worn_icon_taur_hoof = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi' - body_parts_covered = CHEST - slowdown = 1 // You can't run with that thing literally squeezing your chest - - /// Has it been laced tightly? - var/laced_tight = FALSE - -/obj/item/clothing/suit/corset/AltClick(mob/user) - laced_tight = !laced_tight - to_chat(user, span_notice("You [laced_tight ? "tighten" : "loosen"] the corset, making it far [laced_tight ? "harder" : "easier"] to breathe.")) - play_lewd_sound(user, laced_tight ? 'sound/items/handling/cloth_pickup.ogg' : 'sound/items/handling/cloth_drop.ogg', 40, TRUE) - if(laced_tight) - slowdown = TIGHT_SLOWDOWN - return - slowdown = initial(slowdown) - -/obj/item/clothing/suit/corset/equipped(mob/living/carbon/human/user, slot) - . = ..() - if(laced_tight && src == user.wear_suit) - to_chat(user, span_purple("The corset squeezes tightly against your ribs! Breathing suddenly feels much more difficult.")) - -/obj/item/clothing/suit/corset/dropped(mob/living/carbon/human/user) - . = ..() - if(laced_tight && src == user.wear_suit) - to_chat(user, span_purple("Phew. Now you can breathe normally.")) - -#undef TIGHT_SLOWDOWN diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/domina_cap.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/domina_cap.dm deleted file mode 100644 index 7387aa27959e6c..00000000000000 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/domina_cap.dm +++ /dev/null @@ -1,19 +0,0 @@ -/obj/item/clothing/head/domina_cap - name = "dominant cap" - desc = "For special types of inspections." - icon_state = "dominacap" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_hats.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_hats.dmi' - supports_variations_flags = NONE - -//message when equipping that thing -/obj/item/clothing/head/domina_cap/equipped(mob/living/carbon/user, slot) - . = ..() - if(src == user.head) - to_chat(user, span_purple("You feel much more determined.")) - -//message when unequipping that thing -/obj/item/clothing/head/domina_cap/dropped(mob/living/carbon/user) - . = ..() - if(src == user.head) - to_chat(user, span_purple("BDSM session ended, huh?")) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/latex_catsuit.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/latex_catsuit.dm deleted file mode 100644 index 39034a4a63511b..00000000000000 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/latex_catsuit.dm +++ /dev/null @@ -1,84 +0,0 @@ -/obj/item/clothing/under/misc/latex_catsuit - name = "latex catsuit" - desc = "A shiny uniform that fits snugly to the skin." - icon_state = "latex_catsuit_female" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi' - worn_icon_digi = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-digi.dmi' - worn_icon_taur_snake = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-snake.dmi' - worn_icon_taur_paw = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-paw.dmi' - worn_icon_taur_hoof = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-hoof.dmi' - inhand_icon_state = "latex_catsuit" - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' - equip_sound = 'modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg' - can_adjust = FALSE - body_parts_covered = CHEST|GROIN|LEGS|ARMS - strip_delay = 80 - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION|STYLE_TAUR_ALL - var/mutable_appearance/breasts_overlay - var/mutable_appearance/breasts_icon_overlay - -//this fragment of code makes unequipping not instant -/obj/item/clothing/under/misc/latex_catsuit/attack_hand(mob/user) - if(iscarbon(user)) - var/mob/living/carbon/human/affected_human = user - if(src == affected_human.w_uniform) - if(!do_after(affected_human, 60, target = src)) - return - . = ..() - -// //some gender identification magic -/obj/item/clothing/under/misc/latex_catsuit/equipped(mob/living/affected_mob, slot) - . = ..() - var/mob/living/carbon/human/affected_human = affected_mob - var/obj/item/organ/external/genital/breasts/affected_breasts = affected_human.get_organ_slot(ORGAN_SLOT_BREASTS) - if(src == affected_human.w_uniform) - if(affected_mob.gender == FEMALE) - icon_state = "latex_catsuit_female" - else - icon_state = "latex_catsuit_male" - - affected_mob.update_worn_undersuit() - - breasts_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi', "none") - update_overlays() - - //Breasts overlay for catsuit - if(affected_breasts?.genital_size >= 6 || affected_breasts?.genital_type == "pair") - breasts_overlay.icon_state = "breasts_double" - breasts_icon_overlay.icon_state = "iconbreasts_double" - accessory_overlay = breasts_overlay - add_overlay(breasts_icon_overlay) - update_overlays() - if(affected_breasts?.genital_type == "quad") - breasts_overlay.icon_state = "breasts_quad" - breasts_icon_overlay.icon_state = "iconbreasts_quad" - accessory_overlay = breasts_overlay - add_overlay(breasts_icon_overlay) - update_overlays() - if(affected_breasts?.genital_type == "sextuple") - breasts_overlay.icon_state = "breasts_sextuple" - breasts_icon_overlay.icon_state = "iconbreasts_sextuple" - accessory_overlay = breasts_overlay - add_overlay(breasts_icon_overlay) - update_overlays() - - affected_human.regenerate_icons() - -/obj/item/clothing/under/misc/latex_catsuit/dropped(mob/living/affected_mob) - . = ..() - accessory_overlay = null - breasts_overlay.icon_state = "none" - cut_overlay(breasts_icon_overlay) - breasts_icon_overlay.icon_state = "none" - -//Plug to bypass the bug with instant suit equip/drop -/obj/item/clothing/under/misc/latex_catsuit/MouseDrop(atom/over_object) - -/obj/item/clothing/under/misc/latex_catsuit/Initialize(mapload) - . = ..() - breasts_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi', "none", ABOVE_MOB_LAYER) - breasts_overlay.icon_state = ORGAN_SLOT_BREASTS - breasts_icon_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi', "none") - breasts_icon_overlay.icon_state = ORGAN_SLOT_BREASTS diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/latex_straight_jacket.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/latex_straight_jacket.dm deleted file mode 100644 index efe83051c36ddd..00000000000000 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/latex_straight_jacket.dm +++ /dev/null @@ -1,49 +0,0 @@ -/obj/item/clothing/suit/straight_jacket/latex_straight_jacket - name = "latex straight jacket" - desc = "A toy that is unable to actually restrain anyone. Still fun to wear!" - inhand_icon_state = "latex_straight_jacket" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi' - worn_icon_digi = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi' - worn_icon_taur_snake = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi' - worn_icon_taur_paw = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi' - worn_icon_taur_hoof = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi' - icon_state = "latex_straight_jacket" - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' - body_parts_covered = CHEST | GROIN | LEGS | ARMS | HANDS - flags_inv = HIDEGLOVES | HIDESHOES | HIDEJUMPSUIT - clothing_flags = DANGEROUS_OBJECT - equip_delay_self = NONE - strip_delay = 12 SECONDS - breakouttime = 1 SECONDS - -/obj/item/clothing/suit/straight_jacket/latex_straight_jacket/attackby(obj/item/attacking_item, mob/user, params) //That part allows reinforcing this item with normal straightjacket - if(!istype(attacking_item, /obj/item/clothing/suit/straight_jacket)) - return ..() - var/obj/item/clothing/suit/straight_jacket/latex_straight_jacket/reinforced/reinforced_jacket = new() - remove_item_from_storage(user) - user.put_in_hands(reinforced_jacket) - to_chat(user, span_notice("You reinforce the belts on [src] with [attacking_item].")) - qdel(attacking_item) - qdel(src) - -/obj/item/clothing/suit/straight_jacket/latex_straight_jacket/reinforced - name = "latex straight jacket" - desc = "A suit that completely restrains the wearer - in quite an arousing way." - icon_state = "latex_straight_jacket" - inhand_icon_state = "latex_straight_jacket" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi' - worn_icon_digi = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi' - worn_icon_taur_snake = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi' - worn_icon_taur_paw = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi' - worn_icon_taur_hoof = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' - body_parts_covered = CHEST | GROIN | LEGS | ARMS | HANDS - flags_inv = HIDEGLOVES | HIDESHOES | HIDEJUMPSUIT - clothing_flags = DANGEROUS_OBJECT - equip_delay_self = NONE - strip_delay = 12 SECONDS - breakouttime = 300 SECONDS diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_glasses.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_glasses.dm deleted file mode 100644 index 875ac000092516..00000000000000 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_glasses.dm +++ /dev/null @@ -1,11 +0,0 @@ -/obj/item/clothing/glasses/nice_goggles - name = "surprisingly nice looking goggles" - desc = "It has an inscription engraved on the handle. Kubic. How strange." - icon_state = "nice_goggles" - inhand_icon_state = "nice_goggles" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_eyes.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_eyes.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' - -//that's all folks. Nothing superfunctional here. diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_gloves.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_gloves.dm deleted file mode 100644 index f5b247b60fcb4c..00000000000000 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_gloves.dm +++ /dev/null @@ -1,45 +0,0 @@ -//normal ball mittens -/obj/item/clothing/gloves/ball_mittens - name = "ball mittens" - desc = "A nice, comfortable pair of inflatable ball gloves." - icon_state = "ballmittens" - inhand_icon_state = null - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi' - breakouttime = 1 SECONDS - -//That part allows reinforcing this item with handcuffs -/obj/item/clothing/gloves/ball_mittens/attackby(obj/item/attacking_item, mob/user, params) - . = ..() - if(.) - return - if(!istype(attacking_item, /obj/item/restraints/handcuffs)) - return - var/obj/item/clothing/gloves/ball_mittens_reinforced/reinforced_muffs = new - remove_item_from_storage(user) - user.put_in_hands(reinforced_muffs) - to_chat(user, span_notice("You reinforced the belts on [src] with [attacking_item].")) - qdel(attacking_item) - qdel(src) - return TRUE - -//ball_mittens reinforced -/obj/item/clothing/gloves/ball_mittens_reinforced //We getting this item by using handcuffs on normal ball mittens - name = "reinforced ball mittens" - desc = "Do not put these on, it's REALLY hard to take them off! But they look so comfortable..." - icon_state = "ballmittens" - inhand_icon_state = null - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi' - clothing_flags = DANGEROUS_OBJECT - breakouttime = 100 SECONDS //do not touch this, i beg you. - -//latex gloves -/obj/item/clothing/gloves/latex_gloves - name = "latex gloves" - desc = "Awesome looking gloves that are satisfying to the touch." - icon_state = "latexgloves" - inhand_icon_state = "latex_gloves" - w_class = WEIGHT_CLASS_SMALL - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi' diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_maid.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_maid.dm deleted file mode 100644 index 00caec39977db4..00000000000000 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_maid.dm +++ /dev/null @@ -1,115 +0,0 @@ -/obj/item/clothing/under/costume/lewdmaid - name = "latex maid costume" - desc = "A maid costume made of a thick latex." - icon_state = "lewdmaid" - inhand_icon_state = "lewdmaid" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi' - worn_icon_digi = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi' - worn_icon_taur_snake = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi' - worn_icon_taur_paw = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi' - worn_icon_taur_hoof = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' - body_parts_covered = CHEST - can_adjust = FALSE - -/obj/item/clothing/accessory/lewdapron - name = "shiny maid apron" - desc = "The best part of a maid costume. Now with different colors!" - icon_state = "lewdapron_pink" - base_icon_state = "lewdapron" - inhand_icon_state = "lewdapron_pink" - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi' - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' - minimize_when_attached = FALSE - attachment_slot = null - /// If the color has been changed before - var/color_changed = FALSE - /// Current color of the apron, can change and affects sprite - var/current_color = "red" - /// List of all apron designs, used in selecting one in the radial menu - var/static/list/apron_designs - -/obj/item/clothing/under/costume/lewdmaid/Initialize(mapload) - . = ..() - var/obj/item/clothing/accessory/lewdapron/apron_accessory = new(src) - attach_accessory(apron_accessory) - -/// create radial menu -/obj/item/clothing/accessory/lewdapron/proc/populate_apron_designs() - apron_designs = list( - "red" = image (icon = src.icon, icon_state = "lewdapron_red"), - "green" = image (icon = src.icon, icon_state = "lewdapron_green"), - "pink" = image (icon = src.icon, icon_state = "lewdapron_pink"), - "teal" = image(icon = src.icon, icon_state = "lewdapron_teal"), - "yellow" = image (icon = src.icon, icon_state = "lewdapron_yellow")) - -//to change model -/obj/item/clothing/accessory/lewdapron/AltClick(mob/user) - if(color_changed) - return - . = ..() - if(.) - return - var/choice = show_radial_menu(user, src, apron_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) - if(!choice) - return FALSE - current_color = choice - update_icon() - color_changed = TRUE - -/// to check if we can change kinkphones's model -/obj/item/clothing/accessory/lewdapron/proc/check_menu(mob/living/user) - if(!istype(user)) - return FALSE - if(user.incapacitated()) - return FALSE - return TRUE - -/obj/item/clothing/accessory/lewdapron/Initialize(mapload) - AddElement(/datum/element/update_icon_updates_onmob) - if(!length(apron_designs)) - populate_apron_designs() - update_icon_state() - update_icon() - . = ..() - -/obj/item/clothing/accessory/lewdapron/update_icon_state() - . = ..() - icon_state = icon_state = "[initial(base_icon_state)]_[current_color]" - inhand_icon_state = "[initial(base_icon_state)]_[current_color]" - -/obj/item/clothing/under/costume/lewdmaid/attach_accessory(obj/item/attack_item) - . = ..() - var/obj/item/clothing/accessory/prime_accessory = attached_accessories[1] - var/accessory_color = prime_accessory.icon_state - accessory_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi', "[accessory_color]", ABOVE_MOB_LAYER + 0.1) - accessory_overlay.alpha = prime_accessory.alpha - accessory_overlay.color = prime_accessory.color - if(!ishuman(loc)) - return TRUE - var/mob/living/carbon/human/wearer = loc - wearer.update_worn_undersuit() - wearer.update_worn_oversuit() - wearer.fan_hud_set_fandom() - return TRUE - -//Not a maid, yeah. I dont care, it's going with the other lewd stuff, and there WONT be a whole new file just for it. -/obj/item/clothing/under/costume/bunnylewd - name = "bunny suit" - desc = "Makes the wearer more attractive, even men." - icon_state = "bunnysuit" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi' - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - body_parts_covered = CHEST|GROIN - can_adjust = TRUE - alt_covers_chest = FALSE - -/obj/item/clothing/under/costume/bunnylewd/white - name = "white bunny suit" - icon_state = "whitebunnysuit" - can_adjust = FALSE diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_shoes.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_shoes.dm deleted file mode 100644 index c36900d3e93897..00000000000000 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_shoes.dm +++ /dev/null @@ -1,37 +0,0 @@ -//heels item -/obj/item/clothing/shoes/latex_heels - name = "latex heels" - desc = "Lace up before use. It's pretty difficult to walk in these." - icon_state = "latexheels" - inhand_icon_state = null - // We really need to find a way to condense there. - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi' - worn_icon_digi = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi' - worn_icon_taur_hoof = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi' - worn_icon_taur_paw = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi' - worn_icon_taur_snake = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi' - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION|STYLE_TAUR_ALL - -/obj/item/clothing/shoes/latex_heels/Initialize(mapload) - . = ..() - AddComponent(/datum/component/squeak, list('modular_skyrat/modules/modular_items/lewd_items/sounds/highheel1.ogg' = 1, 'modular_skyrat/modules/modular_items/lewd_items/sounds/highheel2.ogg' = 1), 70) - -/obj/item/clothing/shoes/latex_heels/domina_heels - name = "dominant heels" - desc = "A pair of aesthetically pleasing heels." - icon_state = "dominaheels" - -/* -* LATEX SOCKS -*/ - -/obj/item/clothing/shoes/latex_socks - name = "latex socks" - desc = "A pair of shiny, split-toe socks made of some strange material." - icon_state = "latexsocks" - inhand_icon_state = null - w_class = WEIGHT_CLASS_SMALL - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi' - worn_icon_digi = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi' diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/stripper_outfit.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/stripper_outfit.dm deleted file mode 100644 index 545748165c4064..00000000000000 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/stripper_outfit.dm +++ /dev/null @@ -1,28 +0,0 @@ -/obj/item/clothing/under/stripper_outfit - name = "stripper outfit" - desc = "An item of clothing that leaves little to the imagination." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi' - worn_icon_digi = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-digi.dmi' - worn_icon_taur_snake = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-snake.dmi' - worn_icon_taur_paw = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-paw.dmi' - worn_icon_taur_hoof = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-hoof.dmi' - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION|STYLE_TAUR_ALL - can_adjust = FALSE - icon_state = "stripper_cyan" - inhand_icon_state = "b_suit" - unique_reskin = list("Cyan" = "stripper_cyan", - "Yellow" = "stripper_yellow", - "Green" = "stripper_green", - "Red" = "stripper_red", - "Latex" = "stripper_latex", - "Orange" = "stripper_orange", - "White" = "stripper_white", - "Purple" = "stripper_purple", - "Black" = "stripper_black", - "Black-teal" = "stripper_tealblack") - -/obj/item/clothing/under/stripper_outfit/AltClick(mob/user) - . = ..() - if(unique_reskin && !current_skin && user.can_perform_action(src, NEED_DEXTERITY)) - reskin_obj(user) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/human.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/human.dm deleted file mode 100644 index c861b924d6f3f6..00000000000000 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/human.dm +++ /dev/null @@ -1,384 +0,0 @@ -/mob/living/carbon/human - var/arousal = 0 - var/pleasure = 0 - var/pain = 0 - - var/pain_limit = 0 - var/arousal_status = AROUSAL_NONE - - // Add variables for slots to the human class - var/obj/item/vagina = null - var/obj/item/anus = null - var/obj/item/nipples = null - var/obj/item/penis = null - - -/* -* This code needed to determine if the human is naked in that part of body or not -* You can use this for your own stuff if you want, haha. -*/ - -/// Are we wearing something that covers our chest? -/mob/living/carbon/human/proc/is_topless() - return (!(wear_suit) || !(wear_suit.body_parts_covered & CHEST)) && (!(w_uniform) || !(w_uniform.body_parts_covered & CHEST)) - -/// Are we wearing something that covers our groin? -/mob/living/carbon/human/proc/is_bottomless() - return (!(wear_suit) || !(wear_suit.body_parts_covered & GROIN)) && (!(w_uniform) || !(w_uniform.body_parts_covered & GROIN)) - -/// Are we wearing something that covers our shoes? -/mob/living/carbon/human/proc/is_barefoot() - return (!(wear_suit) || !(wear_suit.body_parts_covered & GROIN)) && (!(shoes) || !(shoes.body_parts_covered & FEET)) - -/mob/living/carbon/human/proc/is_hands_uncovered() - return (gloves?.body_parts_covered & ARMS) - -/mob/living/carbon/human/proc/is_head_uncovered() - return (head?.body_parts_covered & HEAD) - -/// Returns true if the human has an accessible penis for the parameter. Accepts any of the `REQUIRE_GENITAL_` defines. -/mob/living/carbon/human/proc/has_penis(required_state = REQUIRE_GENITAL_ANY) - var/obj/item/organ/external/genital/genital = get_organ_slot(ORGAN_SLOT_PENIS) - if(!genital) - return FALSE - - switch(required_state) - if(REQUIRE_GENITAL_ANY) - return TRUE - if(REQUIRE_GENITAL_EXPOSED) - return genital.visibility_preference == GENITAL_ALWAYS_SHOW || is_bottomless() - if(REQUIRE_GENITAL_UNEXPOSED) - return genital.visibility_preference != GENITAL_ALWAYS_SHOW && !is_bottomless() - else - return TRUE - -/// Returns true if the human has a accessible balls for the parameter. Accepts any of the `REQUIRE_GENITAL_` defines. -/mob/living/carbon/human/proc/has_balls(required_state = REQUIRE_GENITAL_ANY) - var/obj/item/organ/external/genital/genital = get_organ_slot(ORGAN_SLOT_TESTICLES) - if(!genital) - return FALSE - - switch(required_state) - if(REQUIRE_GENITAL_ANY) - return TRUE - if(REQUIRE_GENITAL_EXPOSED) - return genital.visibility_preference == GENITAL_ALWAYS_SHOW || is_bottomless() - if(REQUIRE_GENITAL_UNEXPOSED) - return genital.visibility_preference != GENITAL_ALWAYS_SHOW && !is_bottomless() - else - return TRUE - -/// Returns true if the human has an accessible vagina for the parameter. Accepts any of the `REQUIRE_GENITAL_` defines. -/mob/living/carbon/human/proc/has_vagina(required_state = REQUIRE_GENITAL_ANY) - var/obj/item/organ/external/genital/genital = get_organ_slot(ORGAN_SLOT_VAGINA) - if(!genital) - return FALSE - - switch(required_state) - if(REQUIRE_GENITAL_ANY) - return TRUE - if(REQUIRE_GENITAL_EXPOSED) - return genital.visibility_preference == GENITAL_ALWAYS_SHOW || is_bottomless() - if(REQUIRE_GENITAL_UNEXPOSED) - return genital.visibility_preference != GENITAL_ALWAYS_SHOW && !is_bottomless() - else - return TRUE - -/// Returns true if the human has a accessible breasts for the parameter. Accepts any of the `REQUIRE_GENITAL_` defines. -/mob/living/carbon/human/proc/has_breasts(required_state = REQUIRE_GENITAL_ANY) - var/obj/item/organ/external/genital/genital = get_organ_slot(ORGAN_SLOT_BREASTS) - if(!genital) - return FALSE - - switch(required_state) - if(REQUIRE_GENITAL_ANY) - return TRUE - if(REQUIRE_GENITAL_EXPOSED) - return genital.visibility_preference == GENITAL_ALWAYS_SHOW || is_topless() - if(REQUIRE_GENITAL_UNEXPOSED) - return genital.visibility_preference != GENITAL_ALWAYS_SHOW && !is_topless() - else - return TRUE - -/// Returns true if the human has an accessible anus for the parameter. Accepts any of the `REQUIRE_GENITAL_` defines. -/mob/living/carbon/human/proc/has_anus(required_state = REQUIRE_GENITAL_ANY) - if(issilicon(src)) - return TRUE - var/obj/item/organ/external/genital/genital = get_organ_slot(ORGAN_SLOT_ANUS) - if(!genital) - return FALSE - - switch(required_state) - if(REQUIRE_GENITAL_ANY) - return TRUE - if(REQUIRE_GENITAL_EXPOSED) - return genital.visibility_preference == GENITAL_ALWAYS_SHOW || is_bottomless() - if(REQUIRE_GENITAL_UNEXPOSED) - return genital.visibility_preference != GENITAL_ALWAYS_SHOW && !is_bottomless() - else - return TRUE - -/// Returns true if the human has a accessible feet for the parameter, returning the number of feet the human has if they do. Accepts any of the `REQUIRE_GENITAL_` defines. -/mob/living/carbon/human/proc/has_arms(required_state = REQUIRE_GENITAL_ANY) - var/hand_count = 0 - var/covered = 0 - var/is_covered = FALSE - for(var/obj/item/bodypart/arm/left/left_arm in bodyparts) - hand_count++ - for(var/obj/item/bodypart/arm/right/right_arm in bodyparts) - hand_count++ - if(get_item_by_slot(ITEM_SLOT_HANDS)) - var/obj/item/clothing/gloves/worn_gloves = get_item_by_slot(ITEM_SLOT_HANDS) - covered = worn_gloves.body_parts_covered - if(covered & HANDS) - is_covered = TRUE - switch(required_state) - if(REQUIRE_GENITAL_ANY) - return hand_count - if(REQUIRE_GENITAL_EXPOSED) - if(is_covered) - return FALSE - else - return hand_count - if(REQUIRE_GENITAL_UNEXPOSED) - if(!is_covered) - return FALSE - else - return hand_count - else - return hand_count - -/// Returns true if the human has a accessible feet for the parameter, returning the number of feet the human has if they do. Accepts any of the `REQUIRE_GENITAL_` defines. -/mob/living/carbon/human/proc/has_feet(required_state = REQUIRE_GENITAL_ANY) - var/feet_count = 0 - - for(var/obj/item/bodypart/leg/left/left_leg in bodyparts) - feet_count++ - for(var/obj/item/bodypart/leg/right/right_leg in bodyparts) - feet_count++ - - switch(required_state) - if(REQUIRE_GENITAL_ANY) - return feet_count - if(REQUIRE_GENITAL_EXPOSED) - if(!is_barefoot()) - return FALSE - else - return feet_count - if(REQUIRE_GENITAL_UNEXPOSED) - if(is_barefoot()) - return FALSE - else - return feet_count - else - return feet_count - -/// Gets the number of feet the human has. -/mob/living/carbon/human/proc/get_num_feet() - return has_feet(REQUIRE_GENITAL_ANY) - -/// Returns true if the human has a accessible ears for the parameter. Accepts any of the `REQUIRE_GENITAL_` defines. -/mob/living/carbon/human/proc/has_ears(required_state = REQUIRE_GENITAL_ANY) - var/obj/item/organ/genital = get_organ_slot(ORGAN_SLOT_EARS) - if(!genital) - return FALSE - - switch(required_state) - if(REQUIRE_GENITAL_ANY) - return TRUE - if(REQUIRE_GENITAL_EXPOSED) - return !get_item_by_slot(ITEM_SLOT_EARS) - if(REQUIRE_GENITAL_UNEXPOSED) - return get_item_by_slot(ITEM_SLOT_EARS) - else - return TRUE - -/// Returns true if the human has accessible eyes for the parameter. Accepts any of the `REQUIRE_GENITAL_` defines. -/mob/living/carbon/human/proc/has_eyes(required_state = REQUIRE_GENITAL_ANY) - var/obj/item/organ/genital = get_organ_slot(ORGAN_SLOT_EYES) - if(!genital) - return FALSE - - switch(required_state) - if(REQUIRE_GENITAL_ANY) - return TRUE - if(REQUIRE_GENITAL_EXPOSED) - return !get_item_by_slot(ITEM_SLOT_EYES) - if(REQUIRE_GENITAL_UNEXPOSED) - return get_item_by_slot(ITEM_SLOT_EYES) - else - return TRUE - -/// Returns true if the human has accessible tail for the parameter. Accepts any of the `REQUIRE_GENITAL_` defines. -/mob/living/carbon/human/proc/has_tail(required_state = REQUIRE_GENITAL_ANY) - var/obj/item/organ/genital = get_organ_slot(ORGAN_SLOT_TAIL) - if(!genital) - return FALSE - - switch(required_state) - if(REQUIRE_GENITAL_ANY) - return TRUE - if(REQUIRE_GENITAL_EXPOSED) - return !get_item_by_slot(ORGAN_SLOT_TAIL) - if(REQUIRE_GENITAL_UNEXPOSED) - return get_item_by_slot(ORGAN_SLOT_TAIL) - else - return TRUE - -/* -* This code needed for changing character's gender by chems -*/ - -/// Sets the gender of the human, respecting prefs unless it's forced. Do not force in non-admin operations. -/mob/living/carbon/human/proc/set_gender(ngender = NEUTER, silent = FALSE, update_icon = TRUE, forced = FALSE) - var/bender = gender != ngender - if((!client?.prefs?.read_preference(/datum/preference/toggle/erp/gender_change) && !forced) || !dna || !bender) - return FALSE - - if(ngender == MALE || ngender == FEMALE) - dna.features["body_model"] = ngender - if(!silent) - var/adj = ngender == MALE ? "masculine" : "feminine" - visible_message(span_boldnotice("[src] suddenly looks more [adj]!"), span_boldwarning("You suddenly feel more [adj]!")) - else if(ngender == NEUTER) - dna.features["body_model"] = MALE - gender = ngender - if(update_icon) - update_body() - -/* -* ICON UPDATING EXTENTION -*/ - -/// Updating vagina slot -/mob/living/carbon/human/proc/update_inv_vagina() - // on_mob stuff - remove_overlay(VAGINA_LAYER) - - var/obj/item/clothing/sextoy/sex_toy = vagina - - if(wear_suit && (wear_suit.flags_inv & HIDESEXTOY)) // You can add proper flags here if required - return - - var/icon_file = vagina?.worn_icon - var/mutable_appearance/vagina_overlay - - if(!vagina_overlay) - vagina_overlay = sex_toy?.build_worn_icon(default_layer = VAGINA_LAYER, default_icon_file = 'icons/mob/clothing/under/default.dmi', isinhands = FALSE, override_file = icon_file) - - var/obj/item/bodypart/chest/chest_part = get_bodypart(BODY_ZONE_CHEST) - chest_part?.worn_uniform_offset?.apply_offset(vagina_overlay) // every day we stray further and further from god - overlays_standing[VAGINA_LAYER] = vagina_overlay - - apply_overlay(VAGINA_LAYER) - update_mutant_bodyparts() - -/// Updating anus slot -/mob/living/carbon/human/proc/update_inv_anus() - // on_mob stuff - remove_overlay(ANUS_LAYER) - - var/obj/item/clothing/sextoy/sex_toy = anus - - if(wear_suit && (wear_suit.flags_inv & HIDESEXTOY)) // You can add proper flags here if required - return - - var/icon_file = anus?.worn_icon - var/mutable_appearance/anus_overlay - - if(!anus_overlay) - anus_overlay = sex_toy?.build_worn_icon(default_layer = ANUS_LAYER, default_icon_file = 'icons/mob/clothing/under/default.dmi', isinhands = FALSE, override_file = icon_file) - - var/obj/item/bodypart/chest/chest_part = get_bodypart(BODY_ZONE_CHEST) - - chest_part?.worn_uniform_offset?.apply_offset(anus_overlay) // and i keep on asking myself... why? why do we do this? - overlays_standing[ANUS_LAYER] = anus_overlay - - apply_overlay(ANUS_LAYER) - update_mutant_bodyparts() - -/// Updating nipples slot -/mob/living/carbon/human/proc/update_inv_nipples() - // on_mob stuff - remove_overlay(NIPPLES_LAYER) - - var/obj/item/clothing/sextoy/sex_toy = nipples - - if(wear_suit && (wear_suit.flags_inv & HIDESEXTOY)) // You can add proper flags here if required - return - - var/icon_file = nipples?.worn_icon - var/mutable_appearance/nipples_overlay - - if(!nipples_overlay) - nipples_overlay = sex_toy?.build_worn_icon(default_layer = NIPPLES_LAYER, default_icon_file = 'icons/mob/clothing/under/default.dmi', isinhands = FALSE, override_file = icon_file) - - var/obj/item/bodypart/chest/chest_part = get_bodypart(BODY_ZONE_CHEST) - chest_part?.worn_uniform_offset?.apply_offset(nipples_overlay) // then i realised something, something horrific - - overlays_standing[NIPPLES_LAYER] = nipples_overlay - - apply_overlay(NIPPLES_LAYER) - update_mutant_bodyparts() - -/// Updating penis slot -/mob/living/carbon/human/proc/update_inv_penis() - // on_mob stuff - remove_overlay(PENIS_LAYER) - - var/obj/item/clothing/sextoy/sex_toy = penis - - if(wear_suit && (wear_suit.flags_inv & HIDESEXTOY)) // You can add proper flags here if required - return - - var/icon_file = penis?.worn_icon - var/mutable_appearance/penis_overlay - - if(!penis_overlay) - penis_overlay = sex_toy?.build_worn_icon(default_layer = PENIS_LAYER, default_icon_file = 'icons/mob/clothing/under/default.dmi', isinhands = FALSE, override_file = icon_file) - - var/obj/item/bodypart/chest/chest_part = get_bodypart(BODY_ZONE_CHEST) - chest_part?.worn_uniform_offset?.apply_offset(penis_overlay) // we can never escape, we are forever governed by sex(two) - - overlays_standing[PENIS_LAYER] = penis_overlay - - apply_overlay(PENIS_LAYER) - update_mutant_bodyparts() - -/// Helper proc for calling all the lewd slot update_inv_ procs. -/mob/living/carbon/human/proc/update_inv_lewd() - update_inv_vagina() - update_inv_anus() - update_inv_nipples() - update_inv_penis() - -/* -* MISC LOGIC -*/ - -// Handles breaking out of gloves that restrain people. -/mob/living/carbon/human/resist_restraints() - if(gloves?.breakouttime) - changeNext_move(CLICK_CD_BREAKOUT) - last_special = world.time + CLICK_CD_BREAKOUT - cuff_resist(gloves) - else - ..() - -/// Checks if the human is wearing a condom, and also hasn't broken it. -/mob/living/carbon/human/proc/is_wearing_condom() - if(!penis || !istype(penis, /obj/item/clothing/sextoy/condom)) - return FALSE - - var/obj/item/clothing/sextoy/condom/condom = penis - return condom.condom_state == CONDOM_BROKEN - -// For handling things that don't already have handcuff handlers. -/mob/living/carbon/human/set_handcuffed(new_value) - if(wear_suit && istype(wear_suit, /obj/item/clothing/suit/straight_jacket/kinky_sleepbag)) - return FALSE - ..() - -/// Checks if the tail is exposed. -/obj/item/organ/external/tail/proc/is_exposed() - return TRUE // your tail is always exposed, dummy! why are you checking this diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/misc.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/misc.dm deleted file mode 100644 index 43fe087590f151..00000000000000 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/misc.dm +++ /dev/null @@ -1,62 +0,0 @@ -/* -* Looping sound for vibrating stuff -*/ - -/datum/looping_sound/lewd/vibrator - start_sound = 'modular_skyrat/modules/modular_items/lewd_items/sounds/bzzz-loop-1.ogg' - start_length = 1 - mid_sounds = 'modular_skyrat/modules/modular_items/lewd_items/sounds/bzzz-loop-1.ogg' - mid_length = 1 - end_sound = 'modular_skyrat/modules/modular_items/lewd_items/sounds/bzzz-loop-1.ogg' - falloff_distance = 1 - falloff_exponent = 5 - extra_range = SILENCED_SOUND_EXTRARANGE - ignore_walls = FALSE - -/datum/looping_sound/lewd/vibrator/low - volume = 80 - -/datum/looping_sound/lewd/vibrator/medium - volume = 90 - -/datum/looping_sound/lewd/vibrator/high - volume = 100 - -/* -* Dancing pole code. -*/ - -/atom - var/pseudo_z_axis - -/atom/proc/get_fake_z() - return pseudo_z_axis - -/obj/structure/table - pseudo_z_axis = 8 - -/turf/open/get_fake_z() - var/objschecked - for(var/obj/structure/structurestocheck in contents) - objschecked++ - if(structurestocheck.pseudo_z_axis) - return structurestocheck.pseudo_z_axis - if(objschecked >= 25) - break - return pseudo_z_axis - -/mob/living/Move(atom/newloc, direct) - . = ..() - if(.) - pseudo_z_axis = newloc.get_fake_z() - pixel_z = pseudo_z_axis - -/// Used to add a cum decal to the floor while transferring viruses and DNA to it -/mob/living/proc/add_cum_splatter_floor(turf/the_turf, female = FALSE) - if(!the_turf) - the_turf = get_turf(src) - - var/selected_type = female ? /obj/effect/decal/cleanable/cum/femcum : /obj/effect/decal/cleanable/cum - var/atom/stain = new selected_type(the_turf, get_static_viruses()) - - stain.transfer_mob_blood_dna(src) //I'm not adding a new forensics category for cumstains diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/pinkcuffs.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/pinkcuffs.dm deleted file mode 100644 index 99990223c3603d..00000000000000 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/pinkcuffs.dm +++ /dev/null @@ -1,28 +0,0 @@ -/obj/item/restraints/handcuffs/lewd - name = "kinky handcuffs" - desc = "Fake handcuffs meant for erotic roleplay." - icon_state = "pinkcuffs" - inhand_icon_state = "pinkcuffs" - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi' - worn_icon_state = "pinkcuffs" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' - lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' - breakouttime = 1 SECONDS - -// Additionally, we will process the installation of the desired appearance, to bypass the bug in the general code -/obj/item/restraints/handcuffs/lewd/apply_cuffs(mob/living/carbon/target, mob/user, dispense = 0) - . = ..() - src.icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' - src.icon_state = "pinkcuffs" - src.worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi' - src.worn_icon_state = "pinkcuffs" - src.lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi' - src.righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi' - - // Similar code in general procedures does not correctly set the appearance - target.remove_overlay(HANDCUFF_LAYER) - if(!target.handcuffed) - return - target.overlays_standing[HANDCUFF_LAYER] = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi', "pinkcuffs", -HANDCUFF_LAYER) - target.apply_overlay(HANDCUFF_LAYER) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/lustwish.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/lustwish.dm deleted file mode 100644 index 59241ed4dc136c..00000000000000 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/lustwish.dm +++ /dev/null @@ -1,180 +0,0 @@ -/obj/machinery/vending/dorms - name = "LustWish" - desc = "A vending machine with various toys. Not for the faint of heart." - icon_state = "lustwish" - base_icon_state = "lustwish" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/lustwish.dmi' - light_mask = "lustwish-light-mask" - age_restrictions = TRUE - ///Has the discount card been used on the vending machine? - var/card_used = FALSE - product_ads = "Try me!;Kinky!;Lewd and fun!;Hey you, yeah you... wanna take a look at my collection?;Come on, take a look!;Remember, always adhere to Nanotrasen corporate policy!;Don't forget to use protection!" - vend_reply = "Enjoy!;We're glad to satisfy your desires!" - - //STUFF SOLD HERE// - products = list(//Sex toys - /obj/item/clothing/sextoy/eggvib/signalvib = 8, - /obj/item/assembly/signaler = 8, - /obj/item/clothing/sextoy/eggvib = 8, - /obj/item/clothing/sextoy/buttplug = 6, - /obj/item/clothing/sextoy/nipple_clamps = 4, - /obj/item/clothing/sextoy/dildo/double_dildo = 3, - /obj/item/clothing/sextoy/vibroring = 6, - /obj/item/condom_pack = 20, - /obj/item/clothing/sextoy/dildo = 8, - /obj/item/clothing/sextoy/dildo/custom_dildo = 8, - /obj/item/tickle_feather = 8, - /obj/item/clothing/sextoy/fleshlight = 8, - /obj/item/kinky_shocker = 4, - /obj/item/clothing/mask/leatherwhip = 4, - /obj/item/clothing/sextoy/magic_wand = 4, - /obj/item/bdsm_candle = 4, - /obj/item/spanking_pad = 4, - /obj/item/clothing/sextoy/vibrator = 4, - /obj/item/serviette_pack = 10, - /obj/item/restraints/handcuffs/lewd = 8, - /obj/item/key/collar = 48, - /obj/item/fancy_pillow = 32, - /obj/item/stack/shibari_rope/full = 10, - /obj/item/stack/shibari_rope/glow/full = 10, - - //clothing facial/head - /obj/item/clothing/mask/ballgag = 8, - /obj/item/clothing/mask/ballgag/choking = 8, - /obj/item/clothing/mask/muzzle/ring = 4, - /obj/item/clothing/head/domina_cap = 5, - /obj/item/clothing/head/deprivation_helmet = 5, - /obj/item/clothing/head/costume/skyrat/maid = 5, - /obj/item/clothing/glasses/blindfold/kinky = 5, - /obj/item/clothing/ears/kinky_headphones = 5, - /obj/item/clothing/mask/gas/bdsm_mask = 5, - /obj/item/reagent_containers/cup/lewd_filter = 5, - /obj/item/clothing/glasses/hypno = 4, - /obj/item/clothing/head/costume/kitty = 4, - /obj/item/clothing/head/costume/rabbitears = 4, - - - //neck - /obj/item/clothing/neck/kink_collar = 8, - /obj/item/clothing/neck/human_petcollar = 8, - /obj/item/clothing/neck/human_petcollar/choker = 8, - /obj/item/clothing/neck/human_petcollar/thinchoker = 8, - /obj/item/clothing/neck/human_petcollar/locked/cow = 8, - /obj/item/clothing/neck/human_petcollar/locked/bell = 8, - /obj/item/clothing/neck/human_petcollar/locked/cross = 8, - /obj/item/clothing/neck/human_petcollar/locked/spike = 8, - /obj/item/clothing/neck/size_collar = 8, - - //torso clothing - /obj/item/clothing/under/misc/latex_catsuit = 8, - /obj/item/clothing/suit/straight_jacket/latex_straight_jacket = 5, - /obj/item/clothing/under/costume/maid = 5, - /obj/item/clothing/under/rank/civilian/janitor/maid = 5, - /obj/item/clothing/under/costume/lewdmaid = 5, - /obj/item/clothing/suit/straight_jacket/shackles = 4, - /obj/item/clothing/under/stripper_outfit = 5, - /obj/item/clothing/under/costume/bunnylewd = 5, - /obj/item/clothing/under/costume/bunnylewd/white = 5, - /obj/item/clothing/under/misc/skyrat/gear_harness = 4, - - //hands - /obj/item/clothing/gloves/ball_mittens = 8, - /obj/item/clothing/gloves/latex_gloves = 8, - /obj/item/clothing/gloves/evening = 5, - - //legs - /obj/item/clothing/shoes/latex_socks = 8, - /obj/item/clothing/shoes/latex_heels = 4, - /obj/item/clothing/shoes/latex_heels/domina_heels = 4, - /obj/item/clothing/shoes/jackboots/knee = 3, - /obj/item/clothing/under/pants/skyrat/chaps = 4, - - //belt - /obj/item/clothing/strapon = 6, - /obj/item/storage/belt/erpbelt = 5, - - //chems - /obj/item/reagent_containers/pill/crocin = 20, - /obj/item/reagent_containers/pill/camphor = 10, - /obj/item/reagent_containers/cup/bottle/crocin = 6, - /obj/item/reagent_containers/cup/bottle/camphor = 3, - /obj/item/reagent_containers/cup/bottle/succubus_milk = 6, //Those are legal 'cause you can just turn off prefs in round in "CLOWN SMOKE MACHINE+PENIS ENLARGEMENT CHEMICAL CASE". Yes, i have special code-phrase for this. I've seen some shit. - /obj/item/reagent_containers/cup/bottle/incubus_draft = 6, - - //special - /obj/item/clothing/glasses/nice_goggles = 1, //easter egg, don't touch plz) - - //fur niture //haha you got it - /obj/item/storage/box/bdsmbed_kit = 4, - /obj/item/storage/box/strippole_kit = 4, - /obj/item/storage/box/xstand_kit = 4, - /obj/item/storage/box/milking_kit = 4, - /obj/item/storage/box/shibari_stand = 4) - - premium = list( - /obj/item/clothing/neck/human_petcollar/locked/holo = 3) - - contraband = list( - /obj/item/electropack/shockcollar = 4, - /obj/item/clothing/neck/kink_collar/locked = 4, - /obj/item/clothing/neck/mind_collar = 2, - /obj/item/clothing/under/costume/jabroni = 4, - /obj/item/clothing/neck/human_petcollar/locked = 4, - /obj/item/clothing/suit/straight_jacket/kinky_sleepbag = 2, //my favorite thing, spent 1 month on it. Don't remove please. - /obj/item/disk/nifsoft_uploader/dorms/contract = 5, - /obj/item/reagent_containers/pill/hexacrocin = 10, - /obj/item/reagent_containers/pill/pentacamphor = 5, - /obj/item/reagent_containers/cup/bottle/hexacrocin = 4, - /obj/item/reagent_containers/cup/bottle/pentacamphor = 2) - - refill_canister = /obj/item/vending_refill/lustwish - payment_department = ACCOUNT_SRV - default_price = 30 - extra_price = 250 - -//Changes the settings on the vendor, if the user uses the discount card. -/obj/machinery/vending/dorms/attackby(obj/item/used_item, mob/living/user, params) - if(!istype(used_item, /obj/item/lustwish_discount)) - return ..() - - user.visible_message(span_boldnotice("Something changes in [src] with a loud clunk.")) - card_used = !card_used - - if(card_used) - default_price = 0 - extra_price = 0 - - return - - default_price = initial(default_price) - extra_price = initial(extra_price) - -///Performs checks to see if the user can change the color on the vending machine. -/obj/machinery/vending/dorms/proc/check_menu(mob/living/user, obj/item/multitool) - if(!istype(user)) - return FALSE - if(user.incapacitated()) - return FALSE - if(!multitool || !user.is_holding(multitool)) - return FALSE - - return TRUE - -/obj/machinery/vending/dorms/Initialize(mapload) - . = ..() - update_icon_state() - update_icon() - -/obj/machinery/vending/dorms/update_icon_state() - ..() - if(machine_stat & BROKEN) - icon_state = "[base_icon_state]-broken" - return - - icon_state = "[base_icon_state][powered() ? null : "-off"]" - -//Refill item -/obj/item/vending_refill/lustwish - machine_name = "LustWish" - icon_state = "lustwish_refill" - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/construction.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/construction.dm deleted file mode 100644 index 4ee6fff31b0855..00000000000000 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/construction.dm +++ /dev/null @@ -1,122 +0,0 @@ -///The item used as the basis for construction kits for organic interface -/obj/item/construction_kit - name = "construction kit" - desc = "Used for constructing various things" - w_class = WEIGHT_CLASS_BULKY - flags_1 = NODECONSTRUCT_1 - throwforce = 0 - ///What is the path for the resulting structure generating by using this item? - var/obj/structure/resulting_structure = /obj/structure/chair - ///How much time does it take to construct an item using this? - var/construction_time = 8 SECONDS - ///What color is the item using? If none, leave this blank. - var/current_color = "" - -/obj/item/construction_kit/Initialize(mapload) - . = ..() - name = "[initial(resulting_structure.name)] [name]" - -/obj/item/construction_kit/examine(mob/user) - . = ..() - . += span_purple("[src] can be assembled by using <b>Ctrl+Shift+Click</b> while [src] is on the floor.") - -/obj/item/construction_kit/CtrlShiftClick(mob/user) - . = ..() - if(. == FALSE) - return FALSE - - if((item_flags & IN_INVENTORY) || (item_flags & IN_STORAGE)) - return FALSE - - to_chat(user, span_notice("You begin to assemble [src]...")) - if(!do_after(user, construction_time, src)) - to_chat(user, span_warning("You fail to assemble [src]!")) - return FALSE - - var/obj/structure/chair/final_structure = new resulting_structure (get_turf(user)) - if(current_color && istype(final_structure, /obj/structure/chair/milking_machine)) - var/obj/structure/chair/milking_machine/new_milker = final_structure - new_milker.machine_color = current_color - - if(current_color == "pink") - new_milker.icon_state = "milking_pink_off" - else - new_milker.icon_state = "milking_teal_off" - - if(istype(final_structure, /obj/structure/chair/shibari_stand)) - var/obj/structure/chair/shibari_stand/stand = final_structure - stand.set_greyscale(greyscale_colors) - - qdel(src) - to_chat(user, span_notice("You assemble [src].")) - return TRUE - -// MILKER - -/obj/item/construction_kit/milker - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi' - icon_state = "milkbuild_pink" - base_icon_state = "milkbuild" - current_color = "pink" - resulting_structure = /obj/structure/chair/milking_machine - -/obj/item/construction_kit/milker/Initialize(mapload) - . = ..() - update_icon_state() - update_icon() - -/obj/item/construction_kit/milker/update_icon_state() - icon_state = "[initial(base_icon_state)]_[current_color]" - return ..() - - -/obj/item/construction_kit/pole - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/dancing_pole.dmi' - icon_state = "pole_base" - resulting_structure = /obj/structure/stripper_pole - -// BDSM FURNITURE -/obj/item/construction_kit/bdsm - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi' - -// X-STAND - -/obj/item/construction_kit/bdsm/x_stand - icon_state = "xstand_kit" - resulting_structure = /obj/structure/chair/x_stand - -// RESTRAINED BED - -/obj/item/construction_kit/bdsm/bed - icon_state = "bdsm_bed_kit" - resulting_structure = /obj/structure/bed/bdsm_bed - -/obj/item/construction_kit/bdsm/shibari - icon_state = "shibari_kit" - greyscale_config = /datum/greyscale_config/shibari_stand_item - greyscale_colors = "#bd8fcf" - resulting_structure = /obj/structure/chair/shibari_stand - -// SHIBARI STAND - -/obj/item/construction_kit/bdsm/shibari/examine(mob/user) - .=..() - . += span_purple("[src]'s color can be customized with <b>Ctrl+Click</b>.") - -//to change model -/obj/item/construction_kit/bdsm/shibari/CtrlClick(mob/user) - . = ..() - if(. == FALSE) - return FALSE - - var/list/allowed_configs = list() - allowed_configs += "[greyscale_config]" - var/datum/greyscale_modify_menu/menu = new( - src, usr, allowed_configs, null, \ - starting_icon_state = icon_state, \ - starting_config = greyscale_config, \ - starting_colors = greyscale_colors - ) - menu.ui_interact(usr) - to_chat(user, span_notice("You switch the frame's plastic fittings color.")) - return TRUE diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/verbs.dm b/modular_skyrat/modules/modular_items/lewd_items/code/verbs.dm deleted file mode 100644 index e565d49152238c..00000000000000 --- a/modular_skyrat/modules/modular_items/lewd_items/code/verbs.dm +++ /dev/null @@ -1,35 +0,0 @@ -/mob/living/carbon/human/verb/climax_verb() - set name = "Climax" - set category = "IC" - - if(!has_status_effect(/datum/status_effect/climax_cooldown)) - if(tgui_alert(usr, "Are you sure you want to cum?", "Climax", list("Yes", "No")) == "Yes") - if(stat != CONSCIOUS) - to_chat(usr, span_warning("You can't climax right now...")) - return - else - climax(TRUE) - else - to_chat(src, span_warning("You can't cum right now!")) - -/mob/living/carbon/human/Initialize(mapload) - . = ..() - if(CONFIG_GET(flag/disable_erp_preferences)) - verbs -= /mob/living/carbon/human/verb/climax_verb - if(CONFIG_GET(flag/disable_lewd_items)) - verbs -= /mob/living/carbon/human/verb/safeword - -/mob/living/carbon/human/verb/safeword() - set name = "Remove Lewd Items" - set category = "OOC" - set desc = "Removes any and all lewd items from you." - - log_message("[key_name(src)] used the Remove Lewd Items verb.", LOG_ATTACK) - for(var/obj/item/equipped_item in get_equipped_items()) - if(!(equipped_item.type in GLOB.pref_checked_clothes)) - continue - - log_message("[equipped_item] was removed from [key_name(src)].", LOG_ATTACK) - dropItemToGround(equipped_item, TRUE) - - return TRUE diff --git a/modular_skyrat/modules/modular_persistence/README.md b/modular_skyrat/modules/modular_persistence/README.md deleted file mode 100644 index 9a89ea74ae403c..00000000000000 --- a/modular_skyrat/modules/modular_persistence/README.md +++ /dev/null @@ -1,23 +0,0 @@ -## Modular Persistence - -Module ID: MODULAR_PERSISTENCE - -### Description: - -An extremely easy to extend per-character persistence file. Supports all the basic types, plus lists. - -Simply add the vars you want to have saved to `/datum/modular_persistence`, and make sure those var values are updated before round end so that they're saved. - -Loaded and saved on only station-side players for now. Will be expanded to support more in the future. - -### TG Proc/File Changes: - -- `code\modules\mob\dead\new_player\new_player.dm`: `/mob/dead/new_player/proc/AttemptLateSpawn` -- `code\controllers\subsystem\persistence.dm`: `/datum/controller/subsystem/persistence/proc/collect_data` - -### Defines: - -- `modular_skyrat\modules\modular_persistence\code\modular_persistence.dm`: `GLOB.modular_persistence_ignored_vars` - -### Credits: -- RimiNosha - Code diff --git a/modular_skyrat/modules/modular_vending/code/autodrobe.dm b/modular_skyrat/modules/modular_vending/code/autodrobe.dm deleted file mode 100644 index f1bc8940cbbed8..00000000000000 --- a/modular_skyrat/modules/modular_vending/code/autodrobe.dm +++ /dev/null @@ -1,92 +0,0 @@ -/obj/machinery/vending/autodrobe - skyrat_product_categories = list( - list( - "name" = "Costumes", - "icon" = "mask", - "products" = list( - /obj/item/clothing/under/costume/skyrat/cavalry = 5, - /obj/item/clothing/under/doug_dimmadome = 5, - /obj/item/clothing/head/costume/kabuto = 5, - /obj/item/clothing/suit/costume/samurai = 5, - /obj/item/clothing/suit/dutchjacketsr = 5, - ), - ), - list( - "name" = "Entertainers", - "icon" = "masks-theater", - "products" = list( - /obj/item/clothing/mask/gas/clownbald = 1, - /obj/item/clothing/mask/gas/clown_colourable = 1, - /obj/item/clothing/head/costume/jester/alt = 1, - /obj/item/clothing/under/rank/civilian/clown/jester/alt = 1, - ), - ), - list( - "name" = "Fancy", - "icon" = "user-tie", - "products" = list( - /obj/item/clothing/under/pants/skyrat/vicvest = 5, - /obj/item/clothing/under/costume/skyrat/kamishimo = 5, - /obj/item/clothing/under/costume/skyrat/yukata = 5, - /obj/item/clothing/under/costume/skyrat/kimono = 5, - /obj/item/clothing/head/beret/badge = 5, - ), - ), - list( - "name" = "Service", - "icon" = "kitchen-set", - "products" = list( - /obj/item/clothing/under/costume/buttondown/slacks/service = 1, - /obj/item/clothing/under/costume/buttondown/skirt/service = 1, - /obj/item/clothing/neck/bowtie = 2, - /obj/item/clothing/accessory/waistcoat = 1, - /obj/item/clothing/under/suit/waiter = 1, - /obj/item/clothing/suit/apron = 1, - /obj/item/clothing/suit/apron/overalls = 1, - /obj/item/clothing/head/costume/maidheadband = 1, - /obj/item/clothing/under/costume/maid = 1, - /obj/item/clothing/gloves/maid = 1, - /obj/item/clothing/neck/maid = 1, - /obj/item/clothing/under/rank/civilian/janitor/maid = 1, - /obj/item/clothing/accessory/maidapron = 1, - /obj/item/clothing/gloves/maid_arm_covers = 1, - /obj/item/clothing/neck/maid_neck_cover = 1, - /obj/item/clothing/under/maid_costume = 1, - /obj/item/clothing/head/maid_headband = 1, - ), - ), - list( - "name" = "Other", - "icon" = "star", - "products" = list( - /obj/item/clothing/glasses/biker = 5, - /obj/item/clothing/suit/trenchblack = 5, - /obj/item/clothing/suit/trenchbrown = 5, - /obj/item/clothing/head/costume/skyrat/christmas = 5, - /obj/item/clothing/head/costume/skyrat/christmas/green = 5, - /obj/item/clothing/under/costume/skyrat/christmas = 5, - /obj/item/clothing/under/costume/skyrat/christmas/green = 5, - /obj/item/clothing/under/costume/skyrat/christmas/croptop = 5, - /obj/item/clothing/under/costume/skyrat/christmas/croptop/green = 5, - /obj/item/clothing/suit/hooded/wintercoat/skyrat/christmas = 5, - /obj/item/clothing/suit/hooded/wintercoat/skyrat/christmas/green = 5, - /obj/item/clothing/shoes/winterboots/christmas = 5, - /obj/item/clothing/shoes/winterboots/christmas/green = 5, - /obj/item/clothing/under/pants/tactical = 5, - ), - ), - ) - - skyrat_contraband = list( - /obj/item/clothing/mask/balaclavaadjust = 5, - /obj/item/clothing/mask/balaclava/threehole = 5, - /obj/item/clothing/mask/balaclava/threehole/green = 5, - /obj/item/clothing/head/hats/imperial/helmet = 5, - /obj/item/clothing/head/hats/imperial/red = 5, - /obj/item/clothing/head/hats/imperial/grey = 5, - /obj/item/clothing/head/hats/imperial = 5, - /obj/item/clothing/under/rank/captain/skyrat/imperial/generic/pants = 5, - /obj/item/clothing/under/rank/captain/skyrat/imperial/generic/red = 5, - /obj/item/clothing/under/rank/captain/skyrat/imperial/generic/grey = 5, - /obj/item/clothing/under/rank/captain/skyrat/imperial/generic = 5, - ) diff --git a/modular_skyrat/modules/modular_vending/code/clothesmate.dm b/modular_skyrat/modules/modular_vending/code/clothesmate.dm deleted file mode 100644 index 585844629a40a5..00000000000000 --- a/modular_skyrat/modules/modular_vending/code/clothesmate.dm +++ /dev/null @@ -1,168 +0,0 @@ -/obj/machinery/vending/clothing - skyrat_product_categories = list( - list( - "name" = "Head", - "icon" = "hat-cowboy", - "products" = list( - /obj/item/clothing/head/beret/badge = 5, - /obj/item/clothing/head/colourable_flatcap= 5, - /obj/item/clothing/head/cowboy/skyrat/cattleman = 5, - /obj/item/clothing/head/cowboy/skyrat/cattleman/wide = 5, - /obj/item/clothing/head/cowboy/skyrat/wide = 5, - /obj/item/clothing/head/cowboy/skyrat/wide/feathered = 5, - /obj/item/clothing/head/cowboy/skyrat/flat = 5, - /obj/item/clothing/head/cowboy/skyrat/flat/cowl = 5, - /obj/item/clothing/head/cowboy/skyrat/flat/sheriff = 5, - /obj/item/clothing/head/cowboy/skyrat/flat/deputy = 5, - /obj/item/clothing/head/cowboy/skyrat/flat/cowl/sheriff = 5, - /obj/item/clothing/head/fedora= 5, - /obj/item/clothing/head/fedora/brown = 5, - /obj/item/clothing/head/fedora/beige = 5, - /obj/item/clothing/head/fedora/white = 5, - /obj/item/clothing/head/standalone_hood = 5, - /obj/item/clothing/head/small_bow = 5, - /obj/item/clothing/head/large_bow = 5, - /obj/item/clothing/head/back_bow = 5, - /obj/item/clothing/head/sweet_bow = 5, - ), - ), - - list( - "name" = "Accessories", - "icon" = "glasses", - "products" = list( - /obj/item/clothing/neck/ranger_poncho = 5, - /obj/item/clothing/neck/cloak/colourable = 5, - /obj/item/clothing/neck/cloak/colourable/veil = 5, - /obj/item/clothing/neck/cloak/colourable/shroud = 5, - /obj/item/clothing/neck/cloak/colourable/boat = 5, - /obj/item/clothing/neck/mantle/recolorable = 5, - /obj/item/clothing/neck/long_cape = 5, - /obj/item/clothing/neck/wide_cape = 5, - /obj/item/clothing/neck/robe_cape = 5, - /obj/item/clothing/glasses/betterunshit = 5, - /obj/item/clothing/glasses/thin = 5, - /obj/item/clothing/glasses/hud/ar/projector = 5, - /obj/item/clothing/neck/face_scarf = 5, - /obj/item/clothing/gloves/bracer/wraps, - ), - ), - - list( - "name" = "Under", - "icon" = "shirt", - "products" = list( - /obj/item/clothing/under/pants/skyrat/jeans_ripped = 5, - /obj/item/clothing/under/shorts/skyrat/shorts_ripped = 5, - /obj/item/clothing/under/pants/skyrat/yoga = 5, - /obj/item/clothing/under/misc/skyrat/mechanic = 5, - /obj/item/clothing/under/misc/bluetracksuit = 5, - /obj/item/clothing/under/suit/skyrat/recolorable = 5, - /obj/item/clothing/under/suit/skyrat/recolorable/skirt = 5, - /obj/item/clothing/under/pants/skyrat/kilt = 5, - /obj/item/clothing/under/suit/fancy = 5, - /obj/item/clothing/under/texas = 5, - /obj/item/clothing/under/sweater = 5, - /obj/item/clothing/under/sweater/keyhole = 5, - /obj/item/clothing/under/tachawaiian = 5, - /obj/item/clothing/under/tachawaiian/purple = 5, - /obj/item/clothing/under/tachawaiian/green = 5, - /obj/item/clothing/under/tachawaiian/blue = 5, - /obj/item/clothing/under/suit/skyrat/black_really_collared = 3, - /obj/item/clothing/under/suit/skyrat/black_really_collared/skirt = 3, - /obj/item/clothing/under/suit/skyrat/pencil = 3, - /obj/item/clothing/under/suit/skyrat/pencil/black_really = 3, - /obj/item/clothing/under/suit/skyrat/pencil/charcoal = 3, - /obj/item/clothing/under/suit/skyrat/pencil/navy = 3, - /obj/item/clothing/under/suit/skyrat/pencil/burgandy = 3, - /obj/item/clothing/under/suit/skyrat/pencil/checkered = 3, - /obj/item/clothing/under/suit/skyrat/pencil/tan = 3, - /obj/item/clothing/under/suit/skyrat/pencil/green = 3, - /obj/item/clothing/under/suit/skyrat/inferno = 3, - /obj/item/clothing/under/suit/skyrat/inferno/skirt = 3, - /obj/item/clothing/under/suit/skyrat/helltaker = 3, - /obj/item/clothing/under/suit/skyrat/helltaker/skirt = 3, - /obj/item/clothing/under/skyrat/medium_skirt = 5, - /obj/item/clothing/under/skyrat/long_skirt = 5, - ), - ), - - list( - "name" = "Suits & Skirts", - "icon" = "vest", - "products" = list( - /obj/item/clothing/under/dress/skirt/skyrat/lone_skirt = 5, - /obj/item/clothing/under/dress/skirt/skyrat/turtleskirt_knit = 5, - /obj/item/clothing/under/dress/skyrat/short_dress = 5, - /obj/item/clothing/under/dress/skyrat/pinktutu = 5, - /obj/item/clothing/under/dress/skirt/skyrat/jean = 5, - /obj/item/clothing/under/dress/skyrat/flower = 5, - /obj/item/clothing/under/dress/skyrat/strapless = 5, - /obj/item/clothing/under/dress/skyrat/pentagram = 5, - /obj/item/clothing/suit/varsity = 5, - /obj/item/clothing/suit/toggle/jacket = 5, - /obj/item/clothing/suit/toggle/jacket/flannel/gags = 5, - /obj/item/clothing/suit/toggle/jacket/flannel = 5, - /obj/item/clothing/suit/toggle/jacket/flannel/red = 5, - /obj/item/clothing/suit/toggle/jacket/flannel/aqua = 5, - /obj/item/clothing/suit/toggle/jacket/flannel/brown = 5, - /obj/item/clothing/suit/toggle/jacket/hoodie = 5, - /obj/item/clothing/suit/toggle/jacket/hoodie/trim = 5, - /obj/item/clothing/suit/toggle/jacket/hoodie/trim/alt = 5, - /obj/item/clothing/suit/toggle/jacket/hoodie/branded = 5, - /obj/item/clothing/suit/toggle/jacket/hoodie/branded/cti = 5, - /obj/item/clothing/suit/toggle/jacket/hoodie/branded/mu = 5, - /obj/item/clothing/suit/toggle/jacket/hoodie/branded/smw = 5, - /obj/item/clothing/suit/toggle/jacket/hoodie/branded/nrti = 5, - /obj/item/clothing/suit/toggle/jacket/cardigan = 5, - /obj/item/clothing/suit/toggle/peacoat = 5, - /obj/item/clothing/suit/toggle/trackjacket = 5, - /obj/item/clothing/suit/toggle/lawyer/white = 5, - /obj/item/clothing/suit/urban = 5, - /obj/item/clothing/suit/duster = 5, - /obj/item/clothing/suit/fallsparka = 5, - /obj/item/clothing/suit/croptop = 5, - /obj/item/clothing/suit/modernwintercoatthing = 5, - /obj/item/clothing/suit/hooded/wintercoat/colourable = 5, - /obj/item/clothing/suit/apron/chef/colorable_apron = 5, - /obj/item/clothing/suit/warm_coat = 5, - /obj/item/clothing/suit/warm_sweater = 5, - /obj/item/clothing/suit/heart_sweater = 5, - ), - ), - - list( - "name" = "Shoes", - "icon" = "socks", - "products" = list( - /obj/item/clothing/shoes/colorable_laceups = 5, - /obj/item/clothing/shoes/colorable_sandals = 5, - /obj/item/clothing/shoes/sports = 5, - /obj/item/clothing/shoes/wraps/colourable = 5, - /obj/item/clothing/shoes/wraps/cloth = 5, - /obj/item/clothing/shoes/jungleboots = 5, - /obj/item/clothing/shoes/jackboots/knee = 5, - /obj/item/clothing/shoes/jackboots/recolorable = 5, - ), - ), - - //Only put clothing in Special thats either Families or exteremly out-of-place - list( - "name" = "Special", - "icon" = "star", - "products" = list( - /obj/item/clothing/under/costume/deckers/alt = 5, - /obj/item/clothing/under/costume/skyrat/bathrobe = 5, - /obj/item/clothing/mask/gas/respirator = 5, - /obj/item/clothing/mask/surgical/greyscale = 5, - ) - ) - ) - - skyrat_premium = list( //being here means you're artificially rare, congratulations - /obj/item/clothing/shoes/jackboots/timbs = 2, - /obj/item/clothing/head/soft/yankee = 3, - /obj/item/clothing/suit/brownbattlecoat = 1, - /obj/item/clothing/suit/blackfurrich = 1, - /obj/item/clothing/suit/frenchtrench = 1, - ) diff --git a/modular_skyrat/modules/modular_vending/code/cola.dm b/modular_skyrat/modules/modular_vending/code/cola.dm deleted file mode 100644 index da2672c2991684..00000000000000 --- a/modular_skyrat/modules/modular_vending/code/cola.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/machinery/vending/cola - skyrat_products = list( - /obj/item/reagent_containers/cup/soda_cans/skyrat/lubricola = 10, - /obj/item/reagent_containers/cup/soda_cans/skyrat/welding_fizz = 10, - ) diff --git a/modular_skyrat/modules/modular_vending/code/games.dm b/modular_skyrat/modules/modular_vending/code/games.dm deleted file mode 100644 index 99edcdb796c9cf..00000000000000 --- a/modular_skyrat/modules/modular_vending/code/games.dm +++ /dev/null @@ -1,19 +0,0 @@ -/obj/machinery/vending/games - skyrat_product_categories = list( - list( - "name" = "Toys", - "icon" = "hat-wizard", - "products" = list( - /obj/item/storage/secure/briefcase/white/wargame_kit = 3, - ), - ), - list( - "name" = "Other", - "icon" = "star", - "products" = list( - /obj/item/hairbrush = 3, - /obj/item/clothing/mask/holocigarette = 5, - /obj/item/attachable_soulcatcher = 5, - ), - ) - ) diff --git a/modular_skyrat/modules/modular_vending/code/medical.dm b/modular_skyrat/modules/modular_vending/code/medical.dm deleted file mode 100644 index 6d55937c183080..00000000000000 --- a/modular_skyrat/modules/modular_vending/code/medical.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/machinery/vending/medical - skyrat_products = list( - /obj/item/ttsdevice = 3, - /obj/item/cane/crutch = 4, - ) diff --git a/modular_skyrat/modules/modular_vending/code/security.dm b/modular_skyrat/modules/modular_vending/code/security.dm deleted file mode 100644 index a5ebbca2fb2e6e..00000000000000 --- a/modular_skyrat/modules/modular_vending/code/security.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/machinery/vending/security - skyrat_products = list( - /obj/item/storage/pouch/ammo = 2, - /obj/item/storage/barricade = 4, - ) diff --git a/modular_skyrat/modules/modular_vending/code/vending.dm b/modular_skyrat/modules/modular_vending/code/vending.dm deleted file mode 100644 index 772e0d01eec630..00000000000000 --- a/modular_skyrat/modules/modular_vending/code/vending.dm +++ /dev/null @@ -1,82 +0,0 @@ -#define MINIMUM_CLOTHING_STOCK 5 - -/obj/machinery/vending - /// Additions to the `products` list of the vending machine, modularly. Will become null after Initialize, to free up memory. - var/list/skyrat_products - /// Additions to the `product_categories` list of the vending machine, modularly. Will become null after Initialize, to free up memory. - var/list/skyrat_product_categories - /// Additions to the `premium` list of the vending machine, modularly. Will become null after Initialize, to free up memory. - var/list/skyrat_premium - /// Additions to the `contraband` list of the vending machine, modularly. Will become null after Initialize, to free up memory. - var/list/skyrat_contraband - -/obj/machinery/vending/Initialize(mapload) - if(skyrat_products) - // We need this, because duplicates screw up the spritesheet! - for(var/item_to_add in skyrat_products) - products[item_to_add] = skyrat_products[item_to_add] - - if(skyrat_product_categories) - for(var/category in skyrat_product_categories) - var/already_exists = FALSE - for(var/existing_category in product_categories) - if(existing_category["name"] == category["name"]) - existing_category["products"] += category["products"] - already_exists = TRUE - break - - if(!already_exists) - product_categories += category - - if(skyrat_premium) - // We need this, because duplicates screw up the spritesheet! - for(var/item_to_add in skyrat_premium) - premium[item_to_add] = skyrat_premium[item_to_add] - - if(skyrat_contraband) - // We need this, because duplicates screw up the spritesheet! - for(var/item_to_add in skyrat_contraband) - contraband[item_to_add] = skyrat_contraband[item_to_add] - - // Time to make clothes amounts consistent! - for (var/obj/item/clothing/item in products) - if(products[item] < MINIMUM_CLOTHING_STOCK && allow_increase(item)) - products[item] = MINIMUM_CLOTHING_STOCK - - for (var/category in product_categories) - for(var/obj/item/clothing/item in category["products"]) - if(category["products"][item] < MINIMUM_CLOTHING_STOCK && allow_increase(item)) - category["products"][item] = MINIMUM_CLOTHING_STOCK - - for (var/obj/item/clothing/item in premium) - if(premium[item] < MINIMUM_CLOTHING_STOCK && allow_increase(item)) - premium[item] = MINIMUM_CLOTHING_STOCK - - QDEL_NULL(skyrat_products) - QDEL_NULL(skyrat_product_categories) - QDEL_NULL(skyrat_premium) - QDEL_NULL(skyrat_contraband) - return ..() - -/// This proc checks for forbidden traits cause it'd be pretty bad to have 5 insuls available to assistants roundstart at the vendor! -/obj/machinery/vending/proc/allow_increase(obj/item/clothing/clothing_path) - var/obj/item/clothing/clothing = new clothing_path() - - // Ignore earmuffs! - if(TRAIT_DEAF in clothing.clothing_traits) - return FALSE - // Don't touch sunglasses or welding helmets! - if(clothing.flash_protect == FLASH_PROTECTION_WELDER) - return FALSE - // Don't touch bodyarmour! - if(ispath(clothing, /obj/item/clothing/suit/armor)) - return FALSE - // Don't touch protective helmets, like riot helmets! - if(ispath(clothing, /obj/item/clothing/head/helmet)) - return FALSE - // Ignore all gloves, because it's almost impossible to check what they do... - if(ispath(clothing, /obj/item/clothing/gloves)) - return FALSE - return TRUE - -#undef MINIMUM_CLOTHING_STOCK diff --git a/modular_skyrat/modules/modular_vending/code/wardrobes.dm b/modular_skyrat/modules/modular_vending/code/wardrobes.dm deleted file mode 100644 index 103bb2ca9754e0..00000000000000 --- a/modular_skyrat/modules/modular_vending/code/wardrobes.dm +++ /dev/null @@ -1,255 +0,0 @@ -/obj/machinery/vending/wardrobe/medi_wardrobe - skyrat_products = list( - /obj/item/radio/headset/headset_med = 3, - /obj/item/clothing/gloves/latex/nitrile = 2, - /obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown = 5, - /obj/item/storage/belt/medbandolier = 2, - /obj/item/clothing/under/rank/engineering/engineer/skyrat/hazard_chem/emt = 2, - /obj/item/clothing/under/rank/medical/scrubs/skyrat/red = 4, - /obj/item/clothing/under/rank/medical/scrubs/skyrat/white = 4, - /obj/item/clothing/under/rank/medical/doctor/skyrat/utility = 4, - /obj/item/clothing/suit/toggle/labcoat/medical = 4, - /obj/item/storage/backpack/messenger/med = 4, - ) - -/obj/machinery/vending/wardrobe/engi_wardrobe - skyrat_products = list( - /obj/item/radio/headset/headset_eng = 3, - /obj/item/clothing/under/rank/engineering/engineer/skyrat/trouser = 3, - /obj/item/clothing/under/rank/engineering/engineer/skyrat/utility = 3, - /obj/item/clothing/under/rank/engineering/engineer/skyrat/hazard_chem = 3, - /obj/item/clothing/under/misc/overalls = 3, - /obj/item/clothing/suit/toggle/jacket/engi = 3, - /obj/item/clothing/head/utility/hardhat/orange = 2, - /obj/item/clothing/head/utility/hardhat/welding/orange = 2, - /obj/item/clothing/head/utility/hardhat/dblue = 2, - /obj/item/clothing/head/utility/hardhat/welding/dblue = 2, - /obj/item/clothing/head/utility/hardhat/red = 2, - /obj/item/storage/backpack/messenger/eng = 3, - ) - -/obj/machinery/vending/wardrobe/atmos_wardrobe - skyrat_products = list( - /obj/item/clothing/glasses/meson/engine = 2, - /obj/item/clothing/head/beret/atmos = 4, - /obj/item/storage/backpack/messenger/eng = 3, - ) - -/obj/machinery/vending/wardrobe/cargo_wardrobe - skyrat_products = list( - /obj/item/clothing/under/rank/cargo/tech/skyrat/long = 3, - /obj/item/clothing/under/rank/cargo/tech/skyrat/gorka = 3, - /obj/item/clothing/under/rank/cargo/tech/skyrat/turtleneck = 3, - /obj/item/clothing/under/rank/cargo/tech/skyrat/turtleneck/skirt = 3, - /obj/item/clothing/under/rank/cargo/tech/skyrat/utility = 3, - /obj/item/clothing/under/rank/cargo/tech/skyrat/casualman = 3, - /obj/item/clothing/suit/toggle/jacket/supply = 3, - /obj/item/clothing/glasses/hud/gun_permit = 5, //from company imports module - /obj/item/storage/backpack/messenger = 3, - ) - - skyrat_contraband = list( - /obj/item/clothing/under/suit/skyrat/scarface = 2, - /obj/item/clothing/under/rank/cargo/tech/skyrat/evil = 2, - ) - -/obj/machinery/vending/wardrobe/robo_wardrobe - skyrat_products = list( - /obj/item/clothing/head/beret/science/fancy/robo = 2, - /obj/item/clothing/under/rank/rnd/roboticist/skyrat/sleek = 2, - /obj/item/tank/internals/anesthetic = 2, - /obj/item/clothing/mask/breath = 2, - /obj/item/reagent_containers/cup/bottle/morphine = 2, - /obj/item/reagent_containers/syringe = 2, - /obj/item/reagent_containers/spray/hercuri/chilled = 2, - /obj/item/clothing/gloves/color/black = 2, // fire resistant, allows the robo to painlessly mold metal. also its down here because its a treatment item - /obj/item/bonesetter = 2, // for dislocations - /obj/item/stack/medical/gauze = 4, // for ALL wounds - /obj/item/healthanalyzer/no_medibot = 2, // disallows medibot use so its not wasted immediately on medibots - /obj/item/healthanalyzer/simple = 2, - /obj/item/storage/backpack/science/robo = 2, - /obj/item/storage/backpack/satchel/science/robo = 2, - /obj/item/storage/backpack/duffelbag/science/robo = 2, - /obj/item/storage/backpack/messenger/science/robo = 2, - ) - -/obj/machinery/vending/wardrobe/science_wardrobe - skyrat_products = list( - /obj/item/clothing/under/rank/rnd/scientist/skyrat/hlscience = 3, - /obj/item/clothing/under/rank/rnd/scientist/skyrat/utility = 3, - /obj/item/clothing/suit/toggle/jacket/sci = 3, - /obj/item/storage/backpack/messenger/science = 3, - ) - -/obj/machinery/vending/wardrobe/hydro_wardrobe - skyrat_contraband = list( - /obj/item/clothing/under/suit/skyrat/scarface = 2, - /obj/item/clothing/under/misc/skyrat/gear_harness/adam = 2, - /obj/item/clothing/under/misc/skyrat/gear_harness/eve = 2, - /obj/item/storage/backpack/messenger/hyd = 3, - ) - -/obj/machinery/vending/wardrobe/bar_wardrobe - skyrat_products = list( - /obj/item/storage/fancy/candle_box/vanilla = 1, - /obj/item/storage/fancy/candle_box/pear = 1, - /obj/item/storage/fancy/candle_box/amber = 1, - /obj/item/storage/fancy/candle_box/jasmine = 1, - /obj/item/storage/fancy/candle_box/mint = 1, - /obj/item/clothing/suit/hooded/wintercoat/skyrat/bartender = 2, - ) - -/obj/machinery/vending/wardrobe/chap_wardrobe - skyrat_products = list( - /obj/item/clothing/suit/costume/nemes = 1, - /obj/item/clothing/head/costume/nemes = 1, - /obj/item/clothing/head/costume/pharaoh = 1, //dont google camel by camel worst mistake of my life - ) - - skyrat_contraband = list( - /obj/item/clothing/neck/chaplain = 1, - /obj/item/clothing/neck/chaplain/black = 1, - /obj/item/implanter/mortis = 1, - ) - -/obj/machinery/vending/cart - skyrat_products = list( - /obj/item/radio/headset/headset_srv = 3, - ) - -/obj/machinery/vending/wardrobe/chem_wardrobe - skyrat_products = list( - /obj/item/clothing/under/rank/medical/chemist/skyrat/formal = 2, - /obj/item/clothing/under/rank/medical/chemist/skyrat/formal/skirt = 2, - /obj/item/clothing/head/beret/medical/chemist = 2, - /obj/item/storage/backpack/messenger/chem = 2, - ) - -/obj/machinery/vending/wardrobe/viro_wardrobe - skyrat_products = list( - /obj/item/clothing/head/beret/medical/virologist = 2, - /obj/item/storage/backpack/messenger/vir = 2, - ) - -/obj/machinery/vending/wardrobe/det_wardrobe - skyrat_products = list( - /obj/item/clothing/head/fedora/beige = 2, - /obj/item/clothing/head/fedora/white = 2, - /obj/item/clothing/under/costume/cybersleek = 2, - /obj/item/clothing/under/costume/cybersleek/long = 2, - /obj/item/clothing/head/fedora/det_hat/cybergoggles = 2, - /obj/item/clothing/suit/toggle/deckard = 2, - /obj/item/clothing/suit/armor/vest/det_suit/runner = 2, - /obj/item/clothing/under/rank/security/detective/runner = 2, - /obj/item/clothing/suit/toggle/labcoat/skyrat/highvis = 2, - /obj/item/clothing/under/rank/security/detective/cowboy = 2, - /obj/item/clothing/suit/jacket/det_suit/cowboyvest = 2, - /obj/item/storage/backpack/messenger/sec = 2, - ) - -/obj/machinery/vending/wardrobe/law_wardrobe - skyrat_products = list( - /obj/item/clothing/under/suit/skyrat/black_really_collared = 3, - /obj/item/clothing/under/suit/skyrat/black_really_collared/skirt = 3, - /obj/item/clothing/under/suit/skyrat/inferno = 3, - /obj/item/clothing/under/suit/skyrat/inferno/skirt = 3, - /obj/item/clothing/under/suit/skyrat/inferno/beeze = 2, - ) - -/// GHOST CAFE WARDROBES -// Needed to remove radios from Ghost Cafe -/// Removes given list of products. Must be called before build_inventory() to actually prevent the records from being created. -/obj/machinery/vending/proc/remove_products(list/paths_to_remove) - if(!length(paths_to_remove)) - return - for(var/typepath as anything in products) - for(var/to_remove as anything in paths_to_remove) - if(ispath(typepath, to_remove)) - products.Remove(typepath) - -/obj/machinery/vending/ - /// list of products to exclude when building the vending machine's inventory - var/list/excluded_products - -/obj/machinery/vending/Initialize(mapload) - remove_products(excluded_products) - return ..() - -/obj/machinery/vending/wardrobe/cargo_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/science_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/bar_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/chef_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/medi_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/engi_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/law_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/jani_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/coroner_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/curator_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) -/obj/machinery/vending/wardrobe/chap_wardrobe/unholy/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/gene_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/chem_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/viro_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/robo_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/hydro_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) diff --git a/modular_skyrat/modules/modular_weapons/code/autolathe_designs.dm b/modular_skyrat/modules/modular_weapons/code/autolathe_designs.dm deleted file mode 100644 index 89695235d2b8e1..00000000000000 --- a/modular_skyrat/modules/modular_weapons/code/autolathe_designs.dm +++ /dev/null @@ -1,64 +0,0 @@ -/* -* AMMO -*/ - -/datum/design/strilka310_rubber - name = ".310 Rubber Bullet (Less Lethal)" - id = "astrilka310_rubber" - build_type = AUTOLATHE - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/ammo_casing/strilka310/rubber - category = list(RND_CATEGORY_HACKED, RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO) - -// 4.6x30mm - SMG round, used in the WT550 and in numerous modular guns as a weaker alternative to 9mm. - -/datum/design/c46x30mm - name = "4.6x30mm Bullet" - id = "c46x30mm" - build_type = AUTOLATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5) - build_path = /obj/item/ammo_casing/c46x30mm - category = list(RND_CATEGORY_HACKED, RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO) - -/datum/design/c46x30mm_rubber - name = "4.6x30mm Rubber Bullet" - id = "c46x30mm_rubber" - build_type = AUTOLATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5) - build_path = /obj/item/ammo_casing/c46x30mm/rubber - category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO) - -// .45 - -/datum/design/c45_lethal - name = ".45 Bullet" - id = "c45_lethal" - build_type = AUTOLATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5) - build_path = /obj/item/ammo_casing/c45 - category = list(RND_CATEGORY_HACKED, RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO) - -/datum/design/c45_rubber - name = ".45 Bouncy Rubber Ball" - id = "c45_rubber" - build_type = AUTOLATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5) - build_path = /obj/item/ammo_casing/c45/rubber - category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO) - -// 10mm -/datum/design/c10mm_lethal - name = "10mm Bullet" - id = "c10mm_lethal" - build_type = AUTOLATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5) - build_path = /obj/item/ammo_casing/c10mm - category = list(RND_CATEGORY_HACKED, RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO) - -/datum/design/c10mm_rubber - name = "10mm Rubber Bullet" - id = "c10mm_rubber" - build_type = AUTOLATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5) - build_path = /obj/item/ammo_casing/c10mm/rubber - category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO) diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/advert.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/advert.dm deleted file mode 100644 index 3f0dedf288903c..00000000000000 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/advert.dm +++ /dev/null @@ -1,36 +0,0 @@ -/obj/structure/sign/poster/official/carwo_grenade - name = "Tydhouer - Precision Timing" - desc = "This poster depicts, alongside the prominent logo of Carwo Defense Systems, a variety of specialist .980 Tydhouer grenades for the Kiboko launcher." - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/propaganda.dmi' - icon_state = "grenadier" - -/obj/structure/sign/poster/official/carwo_grenade/examine_more(mob/user) - . = ..() - - . += "Small text details that certain types of grenades may not be available in your \ - region depending on local weapons regulations. Suspiciously, however, if you squint at \ - it a bit, the background colors of the image come together vaguely in the shape of \ - a computer board and a multitool. What did they mean by this?" - - return . - -MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/carwo_grenade, 32) - -/obj/structure/sign/poster/official/carwo_magazine - name = "Standardisation - Magazines of the Future" - desc = "This poster depicts, alongside the prominent logo of Carwo Defense Systems, the variety of magazine types the company has on offer for rifles. \ - It also goes into great deal to say, more or less, that any rifle can take any rifle magazine. Now this is technology like never seen before." - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/propaganda.dmi' - icon_state = "mag_size" - -/obj/structure/sign/poster/official/carwo_magazine/examine_more(mob/user) - . = ..() - - . += "Small text details that certain types of magazines may not be available in your \ - region depending on local weapons regulations. Suspiciously, however, if you squint at \ - it a bit, the background colors of the image come together vaguely in the shape of \ - a computer board and a multitool. What did they mean by this?" - - return . - -MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/carwo_magazine, 32) diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/pistol.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/pistol.dm deleted file mode 100644 index e20070dcef50af..00000000000000 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/pistol.dm +++ /dev/null @@ -1,134 +0,0 @@ -// .35 Sol Short -// Pistol caliber caseless round used almost exclusively by SolFed weapons - -/obj/item/ammo_casing/c35sol - name = ".35 Sol Short lethal bullet casing" - desc = "A SolFed standard caseless lethal pistol round." - - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi' - icon_state = "35sol" - - caliber = CALIBER_SOL35SHORT - projectile_type = /obj/projectile/bullet/c35sol - - -/obj/item/ammo_casing/c35sol/Initialize(mapload) - . = ..() - - AddElement(/datum/element/caseless) - - -/obj/projectile/bullet/c35sol - name = ".35 Sol Short bullet" - damage = 25 - - wound_bonus = 10 // Normal bullets are 20 - bare_wound_bonus = 20 - - -/obj/item/ammo_box/c35sol - name = "ammo box (.35 Sol Short lethal)" - desc = "A box of .35 Sol Short pistol rounds, holds twenty-four rounds." - - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi' - icon_state = "35box" - - multiple_sprites = AMMO_BOX_FULL_EMPTY - - w_class = WEIGHT_CLASS_NORMAL - - caliber = CALIBER_SOL35SHORT - ammo_type = /obj/item/ammo_casing/c35sol - max_ammo = 24 - - -// .35 Sol's equivalent to a rubber bullet - -/obj/item/ammo_casing/c35sol/incapacitator - name = ".35 Sol Short incapacitator bullet casing" - desc = "A SolFed standard caseless less-lethal pistol round. Exhausts targets on hit, has a tendency to bounce off walls at shallow angles." - - icon_state = "35sol_disabler" - - projectile_type = /obj/projectile/bullet/c35sol/incapacitator - harmful = FALSE - - -/obj/projectile/bullet/c35sol/incapacitator - name = ".35 Sol Short incapacitator bullet" - damage = 5 - stamina = 30 - - wound_bonus = -40 - bare_wound_bonus = -20 - - weak_against_armour = TRUE - - // The stats of the ricochet are a nerfed version of detective revolver rubber ammo - // This is due to the fact that there's a lot more rounds fired quickly from weapons that use this, over a revolver - ricochet_auto_aim_angle = 30 - ricochet_auto_aim_range = 5 - ricochets_max = 4 - ricochet_incidence_leeway = 50 - ricochet_chance = 130 - ricochet_decay_damage = 0.8 - - shrapnel_type = null - sharpness = NONE - embedding = null - - -/obj/item/ammo_box/c35sol/incapacitator - name = "ammo box (.35 Sol Short incapacitator)" - desc = "A box of .35 Sol Short pistol rounds, holds twenty-four rounds. The blue stripe indicates this should hold less-lethal ammunition." - - icon_state = "35box_disabler" - - ammo_type = /obj/item/ammo_casing/c35sol/incapacitator - - -// .35 Sol ripper, similar to the detective revolver's dumdum rounds, causes slash wounds and is weak to armor - -/obj/item/ammo_casing/c35sol/ripper - name = ".35 Sol Short ripper bullet casing" - desc = "A SolFed standard caseless ripper pistol round. Causes slashing wounds on targets, but is weak to armor." - - icon_state = "35sol_shrapnel" - projectile_type = /obj/projectile/bullet/c35sol/ripper - - custom_materials = AMMO_MATS_RIPPER - advanced_print_req = TRUE - - -/obj/projectile/bullet/c35sol/ripper - name = ".35 Sol ripper bullet" - damage = 15 - - weak_against_armour = TRUE - - sharpness = SHARP_EDGED - - wound_bonus = 20 - bare_wound_bonus = 20 - - embedding = list( - embed_chance = 75, - fall_chance = 3, - jostle_chance = 4, - ignore_throwspeed_threshold = TRUE, - pain_stam_pct = 0.4, - pain_mult = 5, - jostle_pain_mult = 6, - rip_time = 1 SECONDS, - ) - - embed_falloff_tile = -15 - - -/obj/item/ammo_box/c35sol/ripper - name = "ammo box (.35 Sol Short ripper)" - desc = "A box of .35 Sol Short pistol rounds, holds twenty-four rounds. The purple stripe indicates this should hold hollowpoint-like ammunition." - - icon_state = "35box_shrapnel" - - ammo_type = /obj/item/ammo_casing/c35sol/ripper diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/rifle.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/rifle.dm deleted file mode 100644 index 4cb969f7b65c6e..00000000000000 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/rifle.dm +++ /dev/null @@ -1,195 +0,0 @@ -// .40 Sol Long -// Rifle caliber caseless ammo that kills people good - -/obj/item/ammo_casing/c40sol - name = ".40 Sol Long lethal bullet casing" - desc = "A SolFed standard caseless lethal rifle round." - - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi' - icon_state = "40sol" - - caliber = CALIBER_SOL40LONG - projectile_type = /obj/projectile/bullet/c40sol - - -/obj/item/ammo_casing/c40sol/Initialize(mapload) - . = ..() - - AddElement(/datum/element/caseless) - - -/obj/projectile/bullet/c40sol - name = ".40 Sol Long bullet" - damage = 35 - - wound_bonus = 10 - bare_wound_bonus = 20 - - -/obj/item/ammo_box/c40sol - name = "ammo box (.40 Sol Long lethal)" - desc = "A box of .40 Sol Long rifle rounds, holds thirty bullets." - - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi' - icon_state = "40box" - - multiple_sprites = AMMO_BOX_FULL_EMPTY - - w_class = WEIGHT_CLASS_NORMAL - - caliber = CALIBER_SOL40LONG - ammo_type = /obj/item/ammo_casing/c40sol - max_ammo = 30 - - -// .40 Sol fragmentation rounds, embeds shrapnel in the target almost every time at close to medium range. Teeeechnically less lethals. - -/obj/item/ammo_casing/c40sol/fragmentation - name = ".40 Sol Long fragmentation bullet casing" - desc = "A SolFed standard caseless fragmentation rifle round. Shatters upon impact, ejecting sharp shrapnel that can potentially incapacitate targets." - - icon_state = "40sol_disabler" - - projectile_type = /obj/projectile/bullet/c40sol/fragmentation - - advanced_print_req = TRUE - - harmful = FALSE - - -/obj/projectile/bullet/c40sol/fragmentation - name = ".40 Sol Long fragmentation bullet" - damage = 15 - stamina = 30 - - weak_against_armour = TRUE - - sharpness = SHARP_EDGED - wound_bonus = 0 - bare_wound_bonus = 10 - - shrapnel_type = /obj/item/shrapnel/stingball - embedding = list( - embed_chance = 50, - fall_chance = 5, - jostle_chance = 5, - ignore_throwspeed_threshold = TRUE, - pain_stam_pct = 0.4, - pain_mult = 2, - jostle_pain_mult = 3, - rip_time = 0.5 SECONDS, - ) - - embed_falloff_tile = -5 - - -/obj/item/ammo_box/c40sol/fragmentation - name = "ammo box (.40 Sol Long fragmentation)" - desc = "A box of .40 Sol Long rifle rounds, holds thirty bullets. The blue stripe indicates this should hold less lethal ammunition." - - icon_state = "40box_disabler" - - ammo_type = /obj/item/ammo_casing/c40sol/fragmentation - - -// .40 Sol match grade, bounces a lot, and if there's less than 20 bullet armor on wherever these hit, it'll go completely through the target and out the other side - -/obj/item/ammo_casing/c40sol/pierce - name = ".40 Sol Long match bullet casing" - desc = "A SolFed standard caseless match grade rifle round. Fires at a higher pressure and thus fires slightly faster projectiles. \ - Rumors say you can do sick ass wall bounce trick shots with these, though the official suggestion is to just shoot your target and \ - not the wall next to them." - - icon_state = "40sol_pierce" - - projectile_type = /obj/projectile/bullet/c40sol/pierce - - custom_materials = AMMO_MATS_AP - advanced_print_req = TRUE - - -/obj/projectile/bullet/c40sol/pierce - name = ".40 Sol match bullet" - - icon_state = "gaussphase" - - speed = 0.5 - - damage = 25 - armour_penetration = 20 - - wound_bonus = -30 - bare_wound_bonus = -10 - - ricochets_max = 2 - ricochet_chance = 80 - ricochet_auto_aim_range = 4 - ricochet_incidence_leeway = 65 - - projectile_piercing = PASSMOB - - -/obj/projectile/bullet/c40sol/pierce/on_hit(atom/target, blocked = 0, pierce_hit) - if(isliving(target)) - var/mob/living/poor_sap = target - - // If the target mob has enough armor to stop the bullet, or the bullet has already gone through two people, stop it on this hit - if((poor_sap.run_armor_check(def_zone, BULLET, "", "", silent = TRUE) > 20) || (pierces > 2)) - projectile_piercing = NONE - - if(damage > 10) // Lets just be safe with this one - damage -= 5 - armour_penetration -= 10 - - return ..() - - -/obj/item/ammo_box/c40sol/pierce - name = "ammo box (.40 Sol Long match)" - desc = "A box of .40 Sol Long rifle rounds, holds thirty bullets. The yellow stripe indicates this should hold high performance ammuniton." - - icon_state = "40box_pierce" - - ammo_type = /obj/item/ammo_casing/c40sol/pierce - - -// .40 Sol incendiary - -/obj/item/ammo_casing/c40sol/incendiary - name = ".40 Sol Long incendiary bullet casing" - desc = "A SolFed standard caseless incendiary rifle round. Leaves no flaming trail, only igniting targets on impact." - - icon_state = "40sol_flame" - - projectile_type = /obj/projectile/bullet/c40sol/incendiary - - custom_materials = AMMO_MATS_TEMP - advanced_print_req = TRUE - - -/obj/projectile/bullet/c40sol/incendiary - name = ".40 Sol Long incendiary bullet" - icon_state = "redtrac" - - damage = 25 - - /// How many firestacks the bullet should impart upon a target when impacting - var/firestacks_to_give = 1 - - -/obj/projectile/bullet/c40sol/incendiary/on_hit(atom/target, blocked = 0, pierce_hit) - . = ..() - - if(iscarbon(target)) - var/mob/living/carbon/gaslighter = target - gaslighter.adjust_fire_stacks(firestacks_to_give) - gaslighter.ignite_mob() - - -/obj/item/ammo_box/c40sol/incendiary - name = "ammo box (.40 Sol Long incendiary)" - desc = "A box of .40 Sol Long rifle rounds, holds thirty bullets. The orange stripe indicates this should hold incendiary ammunition." - - icon_state = "40box_flame" - - ammo_type = /obj/item/ammo_casing/c40sol/incendiary diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/gunsets.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/gunsets.dm deleted file mode 100644 index 030d17d0c43604..00000000000000 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/gunsets.dm +++ /dev/null @@ -1,85 +0,0 @@ -// Base yellow carwo case - -/obj/item/storage/toolbox/guncase/skyrat/carwo_large_case - desc = "A thick yellow gun case with foam inserts laid out to fit a weapon, magazines, and gear securely." - - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/gunsets.dmi' - icon_state = "case_carwo" - - worn_icon_state = "yellowcase" - - lefthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/inhands/cases_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/inhands/cases_righthand.dmi' - inhand_icon_state = "yellowcase" - -// Empty version of the case - -/obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/empty - -/obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/empty/PopulateContents() - return - -// Sindano in a box, how innovative! - -/obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/sindano - name = "\improper Carwo 'Sindano' gunset" - - weapon_to_spawn = /obj/item/gun/ballistic/automatic/sol_smg/no_mag - extra_to_spawn = /obj/item/ammo_box/magazine/c35sol_pistol/stendo - -/obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/sindano/PopulateContents() - new weapon_to_spawn (src) - - generate_items_inside(list( - /obj/item/ammo_box/c35sol/incapacitator = 1, - /obj/item/ammo_box/c35sol = 1, - /obj/item/ammo_box/magazine/c35sol_pistol/stendo/starts_empty = 1, - /obj/item/ammo_box/magazine/c35sol_pistol/starts_empty = 2, - ), src) - -/obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/sindano/evil - weapon_to_spawn = /obj/item/gun/ballistic/automatic/sol_smg/evil/no_mag - -// Boxed grenade launcher, grenades sold seperately on this one - -/obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/kiboko_magless - name = "\improper Carwo 'Kiboko' gunset" - - weapon_to_spawn = /obj/item/gun/ballistic/automatic/sol_grenade_launcher/no_mag - extra_to_spawn = /obj/item/ammo_box/magazine/c980_grenade/starts_empty - - -/obj/structure/closet/secure_closet/armory_kiboko - name = "heavy equipment locker" - req_access = list(ACCESS_ARMORY) - icon_state = "shotguncase" - -/obj/structure/closet/secure_closet/armory_kiboko/PopulateContents() - . = ..() - - generate_items_inside(list( - /obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/kiboko_magless = 1, - /obj/item/ammo_box/c980grenade = 2, - /obj/item/ammo_box/c980grenade/smoke = 1, - /obj/item/ammo_box/c980grenade/riot = 1, - ), src) - -/obj/structure/closet/secure_closet/armory_kiboko_but_evil - name = "heavy equipment locker" - icon = 'modular_skyrat/master_files/icons/obj/closet.dmi' - icon_door = "riot" - icon_state = "riot" - req_access = list(ACCESS_SYNDICATE) - anchored = 1 - -/obj/structure/closet/secure_closet/armory_kiboko_but_evil/PopulateContents() - . = ..() - - generate_items_inside(list( - /obj/item/gun/ballistic/automatic/sol_grenade_launcher/evil/no_mag = 1, - /obj/item/ammo_box/magazine/c980_grenade/drum/starts_empty = 2, - /obj/item/ammo_box/c980grenade/shrapnel = 1, - /obj/item/ammo_box/c980grenade/shrapnel/phosphor = 1, - /obj/item/ammo_box/c980grenade/smoke = 1, - /obj/item/ammo_box/c980grenade/riot = 1, - ), src) diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/magazines.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/magazines.dm deleted file mode 100644 index 0734cb89258f53..00000000000000 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/magazines.dm +++ /dev/null @@ -1,113 +0,0 @@ -// .35 Sol pistol magazines - -/obj/item/ammo_box/magazine/c35sol_pistol - name = "\improper Sol pistol magazine" - desc = "A standard size magazine for SolFed pistols, holds twelve rounds." - - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi' - icon_state = "pistol_35_standard" - - multiple_sprites = AMMO_BOX_FULL_EMPTY - - w_class = WEIGHT_CLASS_TINY - - ammo_type = /obj/item/ammo_casing/c35sol - caliber = CALIBER_SOL35SHORT - max_ammo = 12 - -/obj/item/ammo_box/magazine/c35sol_pistol/starts_empty - start_empty = TRUE - -/obj/item/ammo_box/magazine/c35sol_pistol/stendo - name = "\improper Sol extended pistol magazine" - desc = "An extended magazine for SolFed pistols, holds twenty-four rounds." - - icon_state = "pistol_35_stended" - - w_class = WEIGHT_CLASS_NORMAL - - max_ammo = 24 - -/obj/item/ammo_box/magazine/c35sol_pistol/stendo/starts_empty - start_empty = TRUE - -// .40 Sol rifle magazines - -/obj/item/ammo_box/magazine/c40sol_rifle - name = "\improper Sol rifle short magazine" - desc = "A shortened magazine for SolFed rifles, holds fifteen rounds." - - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi' - icon_state = "rifle_short" - - multiple_sprites = AMMO_BOX_FULL_EMPTY - - w_class = WEIGHT_CLASS_TINY - - ammo_type = /obj/item/ammo_casing/c40sol - caliber = CALIBER_SOL40LONG - max_ammo = 15 - -/obj/item/ammo_box/magazine/c40sol_rifle/starts_empty - - start_empty = TRUE - -/obj/item/ammo_box/magazine/c40sol_rifle/standard - name = "\improper Sol rifle magazine" - desc = "A standard size magazine for SolFed rifles, holds thirty rounds." - - icon_state = "rifle_standard" - - w_class = WEIGHT_CLASS_SMALL - - max_ammo = 30 - -/obj/item/ammo_box/magazine/c40sol_rifle/standard/starts_empty - start_empty = TRUE - - -/obj/item/ammo_box/magazine/c40sol_rifle/drum - name = "\improper Sol rifle drum magazine" - desc = "A massive drum magazine for SolFed rifles, holds sixty rounds." - - icon_state = "rifle_drum" - - w_class = WEIGHT_CLASS_BULKY - - max_ammo = 60 - -/obj/item/ammo_box/magazine/c40sol_rifle/drum/starts_empty - start_empty = TRUE - -// .980 grenade magazines - -/obj/item/ammo_box/magazine/c980_grenade - name = "\improper Kiboko grenade box" - desc = "A standard size box for .980 grenades, holds four shells." - - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi' - icon_state = "granata_standard" - - multiple_sprites = AMMO_BOX_FULL_EMPTY - - w_class = WEIGHT_CLASS_SMALL - - ammo_type = /obj/item/ammo_casing/c980grenade - caliber = CALIBER_980TYDHOUER - max_ammo = 4 - -/obj/item/ammo_box/magazine/c980_grenade/starts_empty - start_empty = TRUE - -/obj/item/ammo_box/magazine/c980_grenade/drum - name = "\improper Kiboko grenade drum" - desc = "A drum for .980 grenades, holds six shells." - - icon_state = "granata_drum" - - w_class = WEIGHT_CLASS_NORMAL - - max_ammo = 6 - -/obj/item/ammo_box/magazine/c980_grenade/drum/starts_empty - start_empty = TRUE diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/rifle.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/rifle.dm deleted file mode 100644 index 5b298fec87c7ef..00000000000000 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/rifle.dm +++ /dev/null @@ -1,160 +0,0 @@ -// Base Sol rifle - -/obj/item/gun/ballistic/automatic/sol_rifle - name = "\improper Carwo 'd'Infanteria' Rifle" - desc = "A heavy battle rifle commonly seen in the hands of SolFed military types. Accepts any standard SolFed rifle magazine." - - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi' - icon_state = "infanterie" - - worn_icon = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi' - worn_icon_state = "infanterie" - - lefthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi' - inhand_icon_state = "infanterie" - - SET_BASE_PIXEL(-8, 0) - - special_mags = TRUE - - bolt_type = BOLT_TYPE_LOCKING - - w_class = WEIGHT_CLASS_BULKY - weapon_weight = WEAPON_HEAVY - slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_OCLOTHING - - accepted_magazine_type = /obj/item/ammo_box/magazine/c40sol_rifle - spawn_magazine_type = /obj/item/ammo_box/magazine/c40sol_rifle/standard - - fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/rifle_heavy.ogg' - suppressed_sound = 'modular_skyrat/modules/modular_weapons/sounds/suppressed_rifle.ogg' - can_suppress = TRUE - - can_bayonet = FALSE - - suppressor_x_offset = 12 - - burst_size = 1 - fire_delay = 0.45 SECONDS - actions_types = list() - - spread = 7.5 - projectile_wound_bonus = -10 - -/obj/item/gun/ballistic/automatic/sol_rifle/Initialize(mapload) - . = ..() - - give_autofire() - -/// Separate proc for handling auto fire just because one of these subtypes isn't otomatica -/obj/item/gun/ballistic/automatic/sol_rifle/proc/give_autofire() - AddComponent(/datum/component/automatic_fire, fire_delay) - -/obj/item/gun/ballistic/automatic/sol_rifle/give_manufacturer_examine() - AddElement(/datum/element/manufacturer_examine, COMPANY_CARWO) - -/obj/item/gun/ballistic/automatic/sol_rifle/examine_more(mob/user) - . = ..() - - . += "The d'Infanterie rifles are, as the name may imply, built by Carwo for \ - use by SolFed's various infantry branches. Following the rather reasonable \ - military requirements of using the same few cartridges and magazines, \ - the lifespans of logistics coordinators and quartermasters everywhere \ - were lengthened by several years. While typically only for military sale \ - in the past, the recent collapse of certain unnamed weapons manufacturers \ - has caused Carwo to open many of its military weapons to civilian sale, \ - which includes this one." - - return . - -/obj/item/gun/ballistic/automatic/sol_rifle/no_mag - spawnwithmagazine = FALSE - -// Sol marksman rifle - -/obj/item/gun/ballistic/automatic/sol_rifle/marksman - name = "\improper Carwo 'd'Elite' Marksman Rifle" - desc = "A heavy marksman rifle commonly seen in the hands of SolFed military types. Accepts any standard SolFed rifle magazine." - - icon_state = "elite" - worn_icon_state = "elite" - inhand_icon_state = "elite" - - spawn_magazine_type = /obj/item/ammo_box/magazine/c40sol_rifle - - fire_delay = 0.75 SECONDS - - spread = 0 - projectile_damage_multiplier = 1.2 - projectile_wound_bonus = 10 - -/obj/item/gun/ballistic/automatic/sol_rifle/marksman/Initialize(mapload) - . = ..() - - AddComponent(/datum/component/scope, range_modifier = 2) - -/obj/item/gun/ballistic/automatic/sol_rifle/marksman/give_autofire() - return - -/obj/item/gun/ballistic/automatic/sol_rifle/marksman/examine_more(mob/user) - . = ..() - - . += "This particlar variant, often called 'd'Elite', is a marksman rifle. \ - Automatic fire was forsaken for a semi-automatic setup, a more fitting \ - stock, and more often than not a scope. Typically also seen with smaller \ - magazines for convenience for the shooter, but as with any other Sol \ - rifle, all standard magazine types will work." - - return . - -/obj/item/gun/ballistic/automatic/sol_rifle/marksman/no_mag - spawnwithmagazine = FALSE - -// Machinegun based on the base Sol rifle - -/obj/item/gun/ballistic/automatic/sol_rifle/machinegun - name = "\improper Carwo 'd'Outomaties' Machinegun" - desc = "A hefty machinegun commonly seen in the hands of SolFed military types. Accepts any standard SolFed rifle magazine." - - icon_state = "outomaties" - worn_icon_state = "outomaties" - inhand_icon_state = "outomaties" - - bolt_type = BOLT_TYPE_OPEN - - spawn_magazine_type = /obj/item/ammo_box/magazine/c40sol_rifle/drum - - fire_delay = 0.1 SECONDS - - recoil = 1 - spread = 12.5 - projectile_wound_bonus = -20 - -/obj/item/gun/ballistic/automatic/sol_rifle/machinegun/examine_more(mob/user) - . = ..() - - . += "The d'Outomaties variant of the rifle, what you are looking at now, \ - is a modification to turn the weapon into a passable, if sub-optimal \ - light machinegun. To support the machinegun role, the internals were \ - converted to make the gun into an open bolt, faster firing machine. These \ - additions, combined with a battle rifle not meant to be used fully auto \ - much to begin with, made for a relatively unwieldy weapon. A machinegun, \ - however, is still a machinegun, no matter how hard it is to keep on target." - - return . - -/obj/item/gun/ballistic/automatic/sol_rifle/machinegun/no_mag - spawnwithmagazine = FALSE - -// Evil version of the rifle (nothing different its just black) - -/obj/item/gun/ballistic/automatic/sol_rifle/evil - desc = "A heavy battle rifle, this one seems to be painted tacticool black. Accepts any standard SolFed rifle magazine." - - icon_state = "infanterie_evil" - worn_icon_state = "infanterie_evil" - inhand_icon_state = "infanterie_evil" - -/obj/item/gun/ballistic/automatic/sol_rifle/evil/no_mag - spawnwithmagazine = FALSE diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/shotgun.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/shotgun.dm deleted file mode 100644 index af5f6131d887eb..00000000000000 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/shotgun.dm +++ /dev/null @@ -1,62 +0,0 @@ -// SolFed shotgun (this was gonna be in a proprietary shotgun shell type outside of 12ga at some point, wild right?) - -/obj/item/gun/ballistic/shotgun/riot/sol - name = "\improper Carwo 'Renoster' Shotgun" - desc = "A twelve gauge shotgun with a six shell capacity underneath. Made for and used by SolFed's various military branches." - - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi' - icon_state = "renoster" - - worn_icon = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi' - worn_icon_state = "renoster" - - lefthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi' - inhand_icon_state = "renoster" - - inhand_x_dimension = 32 - inhand_y_dimension = 32 - - SET_BASE_PIXEL(-8, 0) - - fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/shotgun_heavy.ogg' - rack_sound = 'modular_skyrat/modules/modular_weapons/sounds/shotgun_rack.ogg' - suppressed_sound = 'modular_skyrat/modules/modular_weapons/sounds/suppressed_heavy.ogg' - can_suppress = TRUE - - suppressor_x_offset = 9 - - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_OCLOTHING - -/obj/item/gun/ballistic/shotgun/riot/sol/give_manufacturer_examine() - AddElement(/datum/element/manufacturer_examine, COMPANY_CARWO) - -/obj/item/gun/ballistic/shotgun/riot/sol/examine_more(mob/user) - . = ..() - - . += "The Renoster was designed at its core as a police shotgun. \ - As consequence, it holds all the qualities a police force would want \ - in one. Large shell capacity, sturdy frame, while holding enough \ - capacity for modification to satiate even the most overfunded of \ - peacekeeper forces. Inevitably, the weapon made its way into civilian \ - markets alongside its sale to several military branches that also \ - saw value in having a heavy shotgun." - - return . - -/obj/item/gun/ballistic/shotgun/riot/sol/update_appearance(updates) - if(sawn_off) - suppressor_x_offset = 0 - SET_BASE_PIXEL(0, 0) - - . = ..() - -// Shotgun but EVIL! - -/obj/item/gun/ballistic/shotgun/riot/sol/evil - desc = "A twleve guage shotgun with an eight shell capacity underneath. This one is painted in a tacticool black." - - icon_state = "renoster_evil" - worn_icon_state = "renoster_evil" - inhand_icon_state = "renoster_evil" diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/submachinegun.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/submachinegun.dm deleted file mode 100644 index ab36648abe5740..00000000000000 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/submachinegun.dm +++ /dev/null @@ -1,65 +0,0 @@ -// Base Sol SMG - -/obj/item/gun/ballistic/automatic/sol_smg - name = "\improper Carwo 'Sindano' Submachinegun" - desc = "A small submachinegun commonly seen in the hands of PMCs and other unsavory corpos. Accepts any standard Sol pistol magazine." - - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns32x.dmi' - icon_state = "sindano" - - lefthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi' - inhand_icon_state = "sindano" - - special_mags = TRUE - - bolt_type = BOLT_TYPE_OPEN - - w_class = WEIGHT_CLASS_NORMAL - weapon_weight = WEAPON_MEDIUM - slot_flags = ITEM_SLOT_OCLOTHING | ITEM_SLOT_BELT - - accepted_magazine_type = /obj/item/ammo_box/magazine/c35sol_pistol - spawn_magazine_type = /obj/item/ammo_box/magazine/c35sol_pistol/stendo - - fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/smg_light.ogg' - can_suppress = TRUE - - can_bayonet = FALSE - - suppressor_x_offset = 11 - - burst_size = 3 - fire_delay = 0.2 SECONDS - - spread = 7.5 - -/obj/item/gun/ballistic/automatic/sol_smg/give_manufacturer_examine() - AddElement(/datum/element/manufacturer_examine, COMPANY_CARWO) - -/obj/item/gun/ballistic/automatic/sol_smg/examine_more(mob/user) - . = ..() - - . += "The Sindano submachinegun was originally produced for military contract. \ - These guns were seen in the hands of anyone from medics, ship techs, logistics officers, \ - and shuttle pilots often had several just to show off. Due to SolFed's quest to \ - extend the lifespans of their logistics officers and quartermasters, the weapon \ - uses the same standard pistol cartridge that most other miltiary weapons of \ - small caliber use. This results in interchangeable magazines between pistols \ - and submachineguns, neat!" - - return . - -/obj/item/gun/ballistic/automatic/sol_smg/no_mag - spawnwithmagazine = FALSE - -// Sindano (evil) - -/obj/item/gun/ballistic/automatic/sol_smg/evil - desc = "A small submachinegun, this one is painted in tacticool black. Accepts any standard Sol pistol magazine." - - icon_state = "sindano_evil" - inhand_icon_state = "sindano_evil" - -/obj/item/gun/ballistic/automatic/sol_smg/evil/no_mag - spawnwithmagazine = FALSE diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/advert.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/advert.dm deleted file mode 100644 index f076b0d73b3452..00000000000000 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/advert.dm +++ /dev/null @@ -1,41 +0,0 @@ -/obj/structure/sign/poster/official/trappiste_suppressor - name = "Keep It Quiet - Ear Protection Unneeded" - desc = "This poster depicts, alongside the prominent logo of Trappiste Fabriek, a \ - diagram of the average suppressor, and how on most* Trappiste weapons \ - the sound of firing will be low enough to eradicate the need for ear protection. \ - How safety minded, they even have a non-liability statement too." - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/propaganda.dmi' - icon_state = "keep_it_quiet" - -/obj/structure/sign/poster/official/trappiste_suppressor/examine_more(mob/user) - . = ..() - - . += "It was hard to notice before, but now that you really look at it... \ - This thing is completely covered in micro scale text telling you in just about \ - every human language and then some that Trappiste isn't liable for ear damage \ - caused by their weapons, suppressed or not." - - return . - -MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/trappiste_suppressor, 32) - -/obj/structure/sign/poster/official/trappiste_ammunition - name = "Know Your Ammuniton Colors" - desc = "This poster depicts, alongside the prominent logo of Trappiste Fabriek, \ - a variety of colors that one may find on .585 Trappiste rounds. \ - A plain white case usually means lethal, while a blue stripe is less-lethal \ - and a purple stripe is more lethal. How informative." - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/propaganda.dmi' - icon_state = "know_the_difference" - -/obj/structure/sign/poster/official/trappiste_ammunition/examine_more(mob/user) - . = ..() - - . += "Small text details that this information may also be transferrable \ - to other types of SolFed ammunition, but that you should check the box \ - the bullets come in just to be sure. Trappiste is, of course,\ - not liable for excess harm caused by misreading color identification systems." - - return . - -MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/trappiste_ammunition, 32) diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/ammo.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/ammo.dm deleted file mode 100644 index 498f55a5627b6d..00000000000000 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/ammo.dm +++ /dev/null @@ -1,91 +0,0 @@ -// .585 Trappiste -// High caliber round used in large pistols and revolvers - -/obj/item/ammo_casing/c585trappiste - name = ".585 Trappiste lethal bullet casing" - desc = "A white polymer cased high caliber round commonly used in handguns." - - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/ammo.dmi' - icon_state = "585trappiste" - - caliber = CALIBER_585TRAPPISTE - projectile_type = /obj/projectile/bullet/c585trappiste - -/obj/projectile/bullet/c585trappiste - name = ".585 Trappiste bullet" - damage = 45 - wound_bonus = 0 // Normal bullets are 20 - -/obj/item/ammo_box/c585trappiste - name = "ammo box (.585 Trappiste lethal)" - desc = "A box of .585 Trappiste pistol rounds, holds twelve cartridges." - - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/ammo.dmi' - icon_state = "585box" - - multiple_sprites = AMMO_BOX_FULL_EMPTY - - w_class = WEIGHT_CLASS_NORMAL - - caliber = CALIBER_585TRAPPISTE - ammo_type = /obj/item/ammo_casing/c585trappiste - max_ammo = 12 - -// .585 Trappiste equivalent to a rubber bullet - -/obj/item/ammo_casing/c585trappiste/incapacitator - name = ".585 Trappiste flathead bullet casing" - desc = "A white polymer cased high caliber round with a relatively soft, flat tip. Designed to flatten against targets and usually not penetrate on impact." - - icon_state = "585trappiste_disabler" - - projectile_type = /obj/projectile/bullet/c585trappiste/incapacitator - harmful = FALSE - -/obj/projectile/bullet/c585trappiste/incapacitator - name = ".585 Trappiste flathead bullet" - damage = 20 - stamina = 40 - wound_bonus = 10 - - weak_against_armour = TRUE - - shrapnel_type = null - sharpness = NONE - embedding = null - -/obj/item/ammo_box/c585trappiste/incapacitator - name = "ammo box (.585 Trappiste flathead)" - desc = "A box of .585 Trappiste pistol rounds, holds twelve cartridges. The blue stripe indicates that it should hold less lethal rounds." - - icon_state = "585box_disabler" - - ammo_type = /obj/item/ammo_casing/c585trappiste/incapacitator - -// .585 hollowpoint, made to cause nasty wounds - -/obj/item/ammo_casing/c585trappiste/hollowpoint - name = ".585 Trappiste hollowhead bullet casing" - desc = "A white polymer cased high caliber round with a hollowed tip. Designed to cause as much damage on impact to fleshy targets as possible." - - icon_state = "585trappiste_shrapnel" - projectile_type = /obj/projectile/bullet/c585trappiste/hollowpoint - - advanced_print_req = TRUE - -/obj/projectile/bullet/c585trappiste/hollowpoint - name = ".585 Trappiste hollowhead bullet" - damage = 35 - - weak_against_armour = TRUE - - wound_bonus = 30 - bare_wound_bonus = 40 - -/obj/item/ammo_box/c585trappiste/hollowpoint - name = "ammo box (.585 Trappiste hollowhead)" - desc = "A box of .585 Trappiste pistol rounds, holds twelve cartridges. The purple stripe indicates that it should hold hollowpoint-like rounds." - - icon_state = "585box_shrapnel" - - ammo_type = /obj/item/ammo_casing/c585trappiste/hollowpoint diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/gunsets.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/gunsets.dm deleted file mode 100644 index 41607663a508ef..00000000000000 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/gunsets.dm +++ /dev/null @@ -1,34 +0,0 @@ -// Base yellow with symbol trappiste case - -/obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case - desc = "A thick yellow gun case with foam inserts laid out to fit a weapon, magazines, and gear securely. The five square grid of Trappiste Fabriek is displayed prominently on the top." - - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/gunsets.dmi' - icon_state = "case_trappiste" - - lefthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/inhands/cases_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/inhands/cases_righthand.dmi' - inhand_icon_state = "yellowcase" - -// Empty version of the case - -/obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/empty - -/obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/empty/PopulateContents() - return - -// Gunset for the Wespe pistol - -/obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/wespe - name = "Trappiste 'Wespe' gunset" - - weapon_to_spawn = /obj/item/gun/ballistic/automatic/pistol/sol/no_mag - extra_to_spawn = /obj/item/ammo_box/magazine/c35sol_pistol - -// Gunset for the Skild heavy pistol - -/obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/skild - name = "Trappiste 'Skild' gunset" - - weapon_to_spawn = /obj/item/gun/ballistic/automatic/pistol/trappiste/no_mag - extra_to_spawn = /obj/item/ammo_box/magazine/c585trappiste_pistol diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/magazines.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/magazines.dm deleted file mode 100644 index 77506ccd29f0f2..00000000000000 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/magazines.dm +++ /dev/null @@ -1,19 +0,0 @@ -// .585 pistol magazines - -/obj/item/ammo_box/magazine/c585trappiste_pistol - name = "\improper Trappiste pistol magazine" - desc = "A standard size magazine for Trappiste pistols, holds six rounds." - - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/ammo.dmi' - icon_state = "pistol_585_standard" - - multiple_sprites = AMMO_BOX_FULL_EMPTY - - w_class = WEIGHT_CLASS_SMALL - - ammo_type = /obj/item/ammo_casing/c585trappiste - caliber = CALIBER_585TRAPPISTE - max_ammo = 6 - -/obj/item/ammo_box/magazine/c585trappiste_pistol/spawns_empty - start_empty = TRUE diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/pistol.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/pistol.dm deleted file mode 100644 index 1ae391325d0a0b..00000000000000 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/pistol.dm +++ /dev/null @@ -1,100 +0,0 @@ -// .35 Sol pistol - -/obj/item/gun/ballistic/automatic/pistol/sol - name = "\improper Trappiste 'Wespe' Pistol" - desc = "The standard issue service pistol of SolFed's various military branches. Comes with attached light." - - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi' - icon_state = "wespe" - - fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/pistol_light.ogg' - - w_class = WEIGHT_CLASS_NORMAL - - accepted_magazine_type = /obj/item/ammo_box/magazine/c35sol_pistol - special_mags = TRUE - - suppressor_x_offset = 7 - suppressor_y_offset = 0 - - fire_delay = 0.3 SECONDS - -/obj/item/gun/ballistic/automatic/pistol/sol/give_manufacturer_examine() - AddElement(/datum/element/manufacturer_examine, COMPANY_TRAPPISTE) - -/obj/item/gun/ballistic/automatic/pistol/sol/add_seclight_point() - AddComponent(/datum/component/seclite_attachable, \ - starting_light = new /obj/item/flashlight/seclite(src), \ - is_light_removable = FALSE, \ - ) - -/obj/item/gun/ballistic/automatic/pistol/sol/examine_more(mob/user) - . = ..() - - . += "The Wespe is a pistol that was made entirely for military use. \ - Required to use a standard round, standard magazines, and be able \ - to function in all of the environments that SolFed operated in \ - commonly. These qualities just so happened to make the weapon \ - popular in frontier space and is likely why you are looking at \ - one now." - - return . - -/obj/item/gun/ballistic/automatic/pistol/sol/no_mag - spawnwithmagazine = FALSE - -// Sol pistol evil gun - -/obj/item/gun/ballistic/automatic/pistol/sol/evil - desc = "The standard issue service pistol of SolFed's various military branches. Comes with attached light. This one is painted tacticool black." - - icon_state = "wespe_evil" - -/obj/item/gun/ballistic/automatic/pistol/sol/evil/no_mag - spawnwithmagazine = FALSE - -// Trappiste high caliber pistol in .585 - -/obj/item/gun/ballistic/automatic/pistol/trappiste - name = "\improper Trappiste 'Skild' Pistol" - desc = "A somewhat rare to see Trappiste pistol firing the high caliber .585 developed by the same company. Sees rare use mainly due to its tendency to cause severe wrist discomfort." - - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi' - icon_state = "skild" - - fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/pistol_heavy.ogg' - suppressed_sound = 'modular_skyrat/modules/modular_weapons/sounds/suppressed_heavy.ogg' - - w_class = WEIGHT_CLASS_NORMAL - - accepted_magazine_type = /obj/item/ammo_box/magazine/c585trappiste_pistol - - suppressor_x_offset = 8 - suppressor_y_offset = 0 - - fire_delay = 1 SECONDS - - recoil = 3 - -/obj/item/gun/ballistic/automatic/pistol/trappiste/give_manufacturer_examine() - AddElement(/datum/element/manufacturer_examine, COMPANY_TRAPPISTE) - -/obj/item/gun/ballistic/automatic/pistol/trappiste/examine_more(mob/user) - . = ..() - - . += "The Skild only exists due to a widely known event that SolFed's military \ - would prefer wasn't anywhere near as popular. A general, name unknown as of now, \ - was recorded complaining about the lack of capability the Wespe provided to the \ - military, alongside several statements comparing the Wespe's lack of masculinity \ - to the, quote, 'unique lack of testosterone those NRI mongrels field'. While the \ - identities of both the general and people responsible for the leaking of the recording \ - are still classified, many high ranking SolFed military staff suspiciously have stopped \ - appearing in public, unlike the Skild. A lot of several thousand pistols, the first \ - of the weapons to ever exist, were not so silently shipped to SolFed's Plutonian \ - shipping hub from TRAPPIST. SolFed military command refuses to answer any \ - further questions about the incident to this day." - - return . - -/obj/item/gun/ballistic/automatic/pistol/trappiste/no_mag - spawnwithmagazine = FALSE diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/ammo.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/ammo.dm deleted file mode 100644 index 7c43be2c19a56d..00000000000000 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/ammo.dm +++ /dev/null @@ -1,45 +0,0 @@ -/* -* .310 Strilka -*/ - -/obj/item/ammo_casing/strilka310/rubber - name = ".310 Strilka rubber bullet casing" - desc = "A .310 rubber bullet casing. Casing is a bit of a fib, there isn't one.\ - <br><br>\ - <i>RUBBER: Less than lethal ammo. Deals both stamina damage and regular damage.</i>" - - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/ammo.dmi' - icon_state = "310-casing-rubber" - - projectile_type = /obj/projectile/bullet/strilka310/rubber - harmful = FALSE - -/obj/projectile/bullet/strilka310/rubber - name = ".310 rubber bullet" - damage = 15 - stamina = 55 - ricochets_max = 5 - ricochet_incidence_leeway = 0 - ricochet_chance = 130 - ricochet_decay_damage = 0.7 - shrapnel_type = null - sharpness = NONE - embedding = null - -/obj/item/ammo_casing/strilka310/ap - name = ".310 Strilka armor-piercing bullet casing" - desc = "A .310 armor-piercing bullet casing. Note, does not actually contain a casing.\ - <br><br>\ - <i>ARMOR-PIERCING: Improved armor-piercing capabilities, in return for less outright damage.</i>" - - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/ammo.dmi' - icon_state = "310-casing-ap" - - projectile_type = /obj/projectile/bullet/strilka310/ap - custom_materials = AMMO_MATS_AP - advanced_print_req = TRUE - -/obj/projectile/bullet/strilka310/ap - name = ".310 armor-piercing bullet" - damage = 50 - armour_penetration = 60 diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/guns.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/guns.dm deleted file mode 100644 index ec586d0d35f68d..00000000000000 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/guns.dm +++ /dev/null @@ -1,49 +0,0 @@ -/* -* QM Sporter Rifle -*/ - -/obj/item/gun/ballistic/rifle/boltaction/sporterized - name = "\improper Xhihao 'Rengo' precision rifle" - desc = "A Xhihao 'Rengo' conversion rifle. Came as parts sold in a single kit by Xhihao Light Arms, \ - which can be swapped out with many of the outdated or simply old parts on a typical Sakhno rifle. \ - While not necessarily increasing performance in any way, the magazine is slightly longer. The weapon \ - is also overall a bit shorter, making it easier to handle for some people. Cannot be sawn off, cutting \ - really any part of this weapon off would make it non-functional." - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns40x.dmi' - icon_state = "rengo" - worn_icon_state = "enchanted_rifle" // Not actually magical looking, just looks closest to this one - inhand_icon_state = "enchanted_rifle" - accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/bubba - can_be_sawn_off = FALSE - knife_x_offset = 35 - -/obj/item/gun/ballistic/rifle/boltaction/sporterized/Initialize(mapload) - . = ..() - - AddComponent(/datum/component/scope, range_modifier = 1.5) - -/obj/item/gun/ballistic/rifle/boltaction/sporterized/give_manufacturer_examine() - AddElement(/datum/element/manufacturer_examine, COMPANY_XHIHAO) - -/obj/item/gun/ballistic/rifle/boltaction/sporterized/empty - bolt_locked = TRUE // so the bolt starts visibly open - accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/bubba/empty - -/obj/item/ammo_box/magazine/internal/boltaction/bubba - name = "Sakhno extended internal magazine" - desc = "How did you get it out?" - ammo_type = /obj/item/ammo_casing/strilka310 - caliber = CALIBER_STRILKA310 - max_ammo = 8 - -/obj/item/ammo_box/magazine/internal/boltaction/bubba/empty - start_empty = TRUE - -/* -* Box that contains Sakhno rifles, but less soviet union since we don't have one of those -*/ - -/obj/item/storage/toolbox/guncase/soviet/sakhno - desc = "A weapon's case. This one is green and looks pretty old, but is otherwise in decent condition." - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/cases.dmi' - material_flags = NONE // ????? Why do these have materials enabled?? diff --git a/modular_skyrat/modules/modular_weapons/code/conversion_kits.dm b/modular_skyrat/modules/modular_weapons/code/conversion_kits.dm deleted file mode 100644 index a15d0766ecef10..00000000000000 --- a/modular_skyrat/modules/modular_weapons/code/conversion_kits.dm +++ /dev/null @@ -1,46 +0,0 @@ -/obj/item/crafting_conversion_kit - name = "base conversion kit" - desc = "It's a set of parts, for something. This shouldn't be here, and you should probably throw this away, since it's not going to be very useful." - icon = 'icons/obj/storage/box.dmi' - icon_state = "secbox" - // the inhands are just what the box uses - inhand_icon_state = "syringe_kit" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - drop_sound = 'sound/items/handling/component_drop.ogg' - pickup_sound = 'sound/items/handling/component_pickup.ogg' - -/obj/item/crafting_conversion_kit/mosin_pro - name = "\improper Xhihao 'Rengo' rifle conversion kit" - desc = "All the parts you need to make a 'Rengo' rifle, outside of the parts that make the gun actually a gun. \ - It looks like this stuff could fit on an old Sakhno rifle, if only you had one of those around." - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/cases.dmi' - icon_state = "xhihao_conversion_kit" - -/datum/crafting_recipe/mosin_pro - name = "Sakhno to Xhihao 'Rengo' Conversion" - desc = "It's actually really easy to change the stock on your Sakhno. Anyone can do it. It takes roughly thirty seconds and a screwdriver." - result = /obj/item/gun/ballistic/rifle/boltaction/sporterized/empty - reqs = list( - /obj/item/gun/ballistic/rifle/boltaction = 1, - /obj/item/crafting_conversion_kit/mosin_pro = 1 - ) - steps = list( - "Empty the rifle", - "Leave the bolt open" - ) - tool_behaviors = list(TOOL_SCREWDRIVER) - time = 30 SECONDS - category = CAT_WEAPON_RANGED - -/datum/crafting_recipe/mosin_pro/New() - ..() - blacklist |= subtypesof(/obj/item/gun/ballistic/rifle/boltaction) - list(/obj/item/gun/ballistic/rifle/boltaction/surplus) - -/datum/crafting_recipe/mosin_pro/check_requirements(mob/user, list/collected_requirements) - var/obj/item/gun/ballistic/rifle/boltaction/the_piece = collected_requirements[/obj/item/gun/ballistic/rifle/boltaction][1] - if(!the_piece.bolt_locked) - return FALSE - if(LAZYLEN(the_piece.magazine.stored_ammo)) - return FALSE - return ..() diff --git a/modular_skyrat/modules/modular_weapons/code/gunsets.dm b/modular_skyrat/modules/modular_weapons/code/gunsets.dm deleted file mode 100644 index 7373e0fa729322..00000000000000 --- a/modular_skyrat/modules/modular_weapons/code/gunsets.dm +++ /dev/null @@ -1,70 +0,0 @@ -/* -* GUNSET BOXES -*/ - -/obj/item/storage/toolbox/guncase/skyrat - desc = "A thick gun case with foam inserts laid out to fit a weapon, magazines, and gear securely." - - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/gunsets.dmi' - icon_state = "guncase" - - worn_icon = 'modular_skyrat/modules/modular_weapons/icons/mob/worn/cases.dmi' - worn_icon_state = "darkcase" - - slot_flags = ITEM_SLOT_BACK - - material_flags = NONE - - /// Is the case visually opened or not - var/opened = FALSE - -/obj/item/storage/toolbox/guncase/skyrat/Initialize(mapload) - . = ..() - atom_storage.max_total_storage = 14 // Technically means you could fit multiple large guns in here but its a case you cant backpack anyways so what it do - atom_storage.max_slots = 6 // We store some extra items in these so lets make a little extra room - -/obj/item/storage/toolbox/guncase/skyrat/update_icon() - . = ..() - if(opened) - icon_state = "[initial(icon_state)]-open" - else - icon_state = initial(icon_state) - -/obj/item/storage/toolbox/guncase/skyrat/AltClick(mob/user) - . = ..() - opened = !opened - update_icon() - -/obj/item/storage/toolbox/guncase/skyrat/attack_self(mob/user) - . = ..() - opened = !opened - update_icon() - -// Empty guncase - -/obj/item/storage/toolbox/guncase/skyrat/empty - -/obj/item/storage/toolbox/guncase/skyrat/empty/PopulateContents() - return - -// Small case for pistols and whatnot - -/obj/item/storage/toolbox/guncase/skyrat/pistol - name = "small gun case" - - icon_state = "guncase_s" - - slot_flags = NONE - - w_class = WEIGHT_CLASS_NORMAL - -/obj/item/storage/toolbox/guncase/skyrat/pistol/Initialize(mapload) - . = ..() - atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL - -// Empty pistol case - -/obj/item/storage/toolbox/guncase/skyrat/pistol/empty - -/obj/item/storage/toolbox/guncase/skyrat/pistol/empty/PopulateContents() - return diff --git a/modular_skyrat/modules/modular_weapons/code/melee.dm b/modular_skyrat/modules/modular_weapons/code/melee.dm deleted file mode 100644 index 8165a798a6fd79..00000000000000 --- a/modular_skyrat/modules/modular_weapons/code/melee.dm +++ /dev/null @@ -1,30 +0,0 @@ -// Sabres, including the cargo variety - -/obj/item/storage/belt/sabre/cargo - name = "authentic shamshir leather sheath" - desc = "A good-looking sheath that is advertised as being made of real Venusian black leather. It feels rather plastic-like to the touch, and it looks like it's made to fit a British cavalry sabre." - icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi' - -/obj/item/storage/belt/sabre/cargo/PopulateContents() - new /obj/item/melee/sabre/cargo(src) - update_appearance() - -/obj/item/melee/sabre - force = 20 // Original: 15 - wound_bonus = 5 // Original: 10 - bare_wound_bonus = 20 // Original: 25 Both down slightly, to make up for the damage buff, since it'd get a bit wacky ontop of the armor pen. - -/obj/item/melee/sabre/cargo - name = "authentic shamshir sabre" - desc = "An expertly crafted historical human sword once used by the Persians which has recently gained traction due to Venusian historal recreation sports. One small flaw, the Taj-based company who produces these has mistaken them for British cavalry sabres akin to those used by high ranking Nanotrasen officials. Atleast it cuts the same way!" - icon = 'modular_skyrat/modules/modular_weapons/icons/obj/melee.dmi' - lefthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/swords_righthand.dmi' - block_chance = 20 - armour_penetration = 25 - - -// This is here so that people can't buy the Sabres and craft them into powercrepes -/datum/crafting_recipe/food/powercrepe - blacklist = list(/obj/item/melee/sabre/cargo) diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi b/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi deleted file mode 100644 index 9131e6d19bb32c..00000000000000 Binary files a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi and /dev/null differ diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/gunsets.dmi b/modular_skyrat/modules/modular_weapons/icons/obj/gunsets.dmi deleted file mode 100644 index 098a8f304816c0..00000000000000 Binary files a/modular_skyrat/modules/modular_weapons/icons/obj/gunsets.dmi and /dev/null differ diff --git a/modular_skyrat/modules/mold/readme.md b/modular_skyrat/modules/mold/readme.md deleted file mode 100644 index f3bd0915c862c0..00000000000000 --- a/modular_skyrat/modules/mold/readme.md +++ /dev/null @@ -1,41 +0,0 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/1356 - -## Title: Mold - Advanced PvE Blob-Vine Encounter - -MODULE ID: `BIOHAZ_MOLD` - -### Description: - -<!-- Taken from #1356's About section for now as I'm too tired to come up with a good description :v -Avunia --> -100% PVE -Spreads much like glowshrooms and space vines, has a main core like a blob. During the spreading it builds structures, currently there's 2. One of them will release something harmful on proximity, another will spawn enemies. The blob also releases harmful stuff depending on the type, on cooldown. - -The resin grows and bashes through doors and firelocks, when it meets a space tile it walls it off. It isn't too hard of an encounter and it doesn't spread too fast. - -There's 4 types right now, for each type people should take be taking different tactics and pre-cautions. - -Currently not tied to any event, just admin spawn for the purposes of tests and stuff. - -When the core dies, everything slowly decays away. - -### TG Proc/File Changes: - -- N/A - -### Defines: - -|File Location|Defines| -|-------------|-------| -|`modular_skyrat/modules/biohazard_blob/code/_biohazard_blob_defines.dm`|`BIO_MOLD_TYPE_FUNGUS`<br>`BIO_MOLD_TYPE_FIRE`<br>`BIO_MOLD_TYPE_EMP`<br>`BIO_MOLD_TYPE_TOXIC`<br>`ALL_BIO_BLOB_TYPES`<br>`FACTION_MOLD`| - -### Master file additions - -- N/A - -### Included files that are not contained in this module: - -- N/A - -### Credits: - -- Azarak diff --git a/modular_skyrat/modules/more_briefcases/code/briefcases.dm b/modular_skyrat/modules/more_briefcases/code/briefcases.dm deleted file mode 100644 index c78c7e3e50f772..00000000000000 --- a/modular_skyrat/modules/more_briefcases/code/briefcases.dm +++ /dev/null @@ -1,52 +0,0 @@ -/obj/item/storage/briefcase - icon = 'modular_skyrat/modules/more_briefcases/icons/briefcases.dmi' - inhand_icon_state = "briefcase" - -/obj/item/storage/briefcase/lawyer - icon_state = "briefcase_black" - inhand_icon_state = "sec-case" - -/obj/item/storage/briefcase/central_command - name = "nanotrasen briefcase" - icon_state = "briefcase_cc" - inhand_icon_state = "sec-case" - -/obj/item/storage/briefcase/medical - name = "medical briefcase" - icon_state = "briefcase_med" - inhand_icon_state = "lockbox" - -/obj/item/storage/briefcase/virology - name = "virology briefcase" - icon_state = "briefcase_vir" - inhand_icon_state = "lockbox" - -/obj/item/storage/briefcase/engineering - name = "engineering briefcase" - icon_state = "briefcase_eng" - -/obj/item/storage/secure/briefcase - icon = 'modular_skyrat/modules/more_briefcases/icons/briefcases.dmi' - inhand_icon_state = "sec-case" - icon_state = "briefcase_secure_black" - -/obj/item/storage/secure/briefcase/attack_self(mob/user) - . = ..() - update_appearance() - -/obj/item/storage/secure/briefcase/update_overlays() - . = ..() - if(atom_storage?.locked) - . += "briefcase_locked" - else - . += "briefcase_open" - -/obj/item/storage/secure/briefcase/update_icon_state() - . = ..() - // Remove icon state functionality in favor of the overlays above. - icon_state = "[initial(icon_state)]" - -/obj/item/storage/secure/briefcase/white - name = "white secure briefcase" - icon_state = "briefcase_secure_white" - inhand_icon_state = "lockbox" diff --git a/modular_skyrat/modules/morefermentplants/code/beans.dm b/modular_skyrat/modules/morefermentplants/code/beans.dm deleted file mode 100644 index 37991220cad9f7..00000000000000 --- a/modular_skyrat/modules/morefermentplants/code/beans.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/item/food/grown/soybeans - distill_reagent = /datum/reagent/consumable/soy_latte - -/obj/item/food/grown/koibeans - distill_reagent = /datum/reagent/consumable/ethanol/mush_crush diff --git a/modular_skyrat/modules/moretraitoritems/code/fake_announcement.dm b/modular_skyrat/modules/moretraitoritems/code/fake_announcement.dm deleted file mode 100644 index 6d4578fb0a99d5..00000000000000 --- a/modular_skyrat/modules/moretraitoritems/code/fake_announcement.dm +++ /dev/null @@ -1,32 +0,0 @@ -/obj/item/device/traitor_announcer - name = "odd device" - desc = "Hmm... what is this for?" - special_desc_requirement = EXAMINE_CHECK_SYNDICATE - special_desc = "A remote usable to fake an announcement from the captain, of your choice." - icon = 'icons/obj/device.dmi' - lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - icon_state = "inspector" - worn_icon_state = "salestagger" - inhand_icon_state = "electronic" - ///How many uses does it have? -1 for infinite - var/uses = 1 - -/obj/item/device/traitor_announcer/attack_self(mob/living/user, modifiers) - . = ..() - var/input = tgui_input_text(user, "Choose Announcement Message", "") - if(!input || !isliving(user) || !uses) - return - if(uses != -1 && uses) - uses-- - var/list/message_data = user.treat_message(input) - priority_announce(html_decode(message_data["message"]), null, ANNOUNCER_CAPTAIN, JOB_CAPTAIN, has_important_message = TRUE) - deadchat_broadcast(" made a fake priority announcement from [span_name("[get_area_name(usr, TRUE)]")].", span_name("[user.real_name]"), user, message_type=DEADCHAT_ANNOUNCEMENT) - user.log_talk(input, LOG_SAY, tag = "priority announcement") - message_admins("[ADMIN_LOOKUPFLW(user)] has used [src] to make a fake announcement of [input].") - if(!uses) - qdel(src) - -// Adminbus -/obj/item/device/traitor_announcer/infinite - uses = -1 diff --git a/modular_skyrat/modules/moretraitoritems/code/headset.dm b/modular_skyrat/modules/moretraitoritems/code/headset.dm deleted file mode 100644 index 39108d061931e7..00000000000000 --- a/modular_skyrat/modules/moretraitoritems/code/headset.dm +++ /dev/null @@ -1,12 +0,0 @@ -/obj/item/radio/headset/headset_cent/impostorsr - keyslot2 = null - -/obj/item/radio/headset/chameleon/advanced - special_desc = "A chameleon headset employed by the Syndicate in infiltration operations. \ - This particular model features flashbang protection, and the ability to amplify your volume." - command = TRUE - freerange = TRUE - -/obj/item/radio/headset/chameleon/advanced/Initialize(mapload) - . = ..() - AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS)) diff --git a/modular_skyrat/modules/moretraitoritems/code/syndicate.dm b/modular_skyrat/modules/moretraitoritems/code/syndicate.dm deleted file mode 100644 index 93561ec72da1fa..00000000000000 --- a/modular_skyrat/modules/moretraitoritems/code/syndicate.dm +++ /dev/null @@ -1,256 +0,0 @@ -/obj/item/uplink/old_radio - name = "old radio" - desc = "A dusty and old looking radio." - -/obj/item/uplink/old_radio/Initialize(mapload, owner, tc_amount = 0) - . = ..() - var/datum/component/uplink/hidden_uplink = GetComponent(/datum/component/uplink) - hidden_uplink.name = "old radio" - -//Unrestricted MODs -/obj/item/mod/control/pre_equipped/elite/unrestricted - req_access = null - -//Syndie wep charger kit -/obj/item/storage/box/syndie_kit/recharger - name = "boxed recharger kit" - desc = "A sleek, sturdy box used to hold all parts to build a weapons recharger." - icon_state = "syndiebox" - -/obj/item/storage/box/syndie_kit/charger/PopulateContents() - new /obj/item/circuitboard/machine/recharger(src) - new /obj/item/stock_parts/capacitor/quadratic(src) - -//Back-up space suit -/obj/item/storage/box/syndie_kit/space_suit - name = "boxed space suit and helmet" - desc = "A sleek, sturdy box used to hold an emergency spacesuit." - icon_state = "syndiebox" - illustration = "syndiesuit" - -/obj/item/storage/box/syndie_kit/space_suit/Initialize(mapload) - . = ..() - atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY - atom_storage.max_slots = 2 - atom_storage.set_holdable(list( - /obj/item/clothing/head/helmet/space/syndicate, - /obj/item/clothing/suit/space/syndicate, - )) - -/obj/item/storage/box/syndie_kit/space_suit/PopulateContents() - switch(pick(list("red", "green", "dgreen", "blue", "orange", "black"))) - if("green") - new /obj/item/clothing/head/helmet/space/syndicate/green(src) - new /obj/item/clothing/suit/space/syndicate/green(src) - if("dgreen") - new /obj/item/clothing/head/helmet/space/syndicate/green/dark(src) - new /obj/item/clothing/suit/space/syndicate/green/dark(src) - if("blue") - new /obj/item/clothing/head/helmet/space/syndicate/blue(src) - new /obj/item/clothing/suit/space/syndicate/blue(src) - if("red") - new /obj/item/clothing/head/helmet/space/syndicate(src) - new /obj/item/clothing/suit/space/syndicate(src) - if("orange") - new /obj/item/clothing/head/helmet/space/syndicate/orange(src) - new /obj/item/clothing/suit/space/syndicate/orange(src) - if("black") - new /obj/item/clothing/head/helmet/space/syndicate/black(src) - new /obj/item/clothing/suit/space/syndicate/black(src) - -//Spy -/obj/item/clothing/suit/jacket/det_suit/noir/armoured - armor_type = /datum/armor/heister - -/obj/item/clothing/head/frenchberet/armoured - armor_type = /datum/armor/cosmetic_sec - -/obj/item/clothing/under/suit/black/armoured - armor_type = /datum/armor/clothing_under/syndicate - -/obj/item/clothing/under/suit/black/skirt/armoured - armor_type = /datum/armor/clothing_under/syndicate - -/obj/item/storage/belt/holster/detective/dark - name = "dark leather holster" - icon_state = "syndicate_holster" - -//Robohand -/obj/item/storage/backpack/duffelbag/syndie/robohand/PopulateContents() - new /obj/item/gun/ballistic/automatic/pistol/robohand(src) - new /obj/item/ammo_box/magazine/m14mm(src) - new /obj/item/ammo_box/magazine/m14mm(src) - new /obj/item/ammo_box/magazine/m14mm(src) - new /obj/item/ammo_box/magazine/m14mm(src) - new /obj/item/storage/belt/military(src) - new /obj/item/clothing/under/pants/track/robohand(src) - new /obj/item/clothing/gloves/combat(src) - new /obj/item/clothing/shoes/combat(src) - new /obj/item/clothing/glasses/sunglasses/robohand(src) - new /obj/item/clothing/suit/jacket/trenchcoat/gunman(src) - new /obj/item/autosurgeon/bodypart/r_arm_robotic(src) - new /obj/item/autosurgeon/syndicate/esword_arm(src) - new /obj/item/autosurgeon/syndicate/nodrop(src) - - -/obj/item/storage/box/syndie_kit/gunman_outfit - name = "gunman clothing bundle" - desc = "A box filled with armored and stylish clothing for the aspiring gunmans." - -/obj/item/clothing/suit/jacket/trenchcoat/gunman - name = "leather overcoat" - desc = "An armored leather overcoat, intended as the go-to wear for any aspiring gunman." - body_parts_covered = CHEST|GROIN|ARMS - armor_type = /datum/armor/leather_gunman - -/datum/armor/leather_gunman - melee = 45 - bullet = 40 - laser = 40 - energy = 50 - bomb = 25 - fire = 50 - acid = 50 - wound = 10 - -/obj/item/clothing/under/pants/track/robohand - name = "badass pants" - desc = "Strangely firm yet soft black pants, these appear to have some armor padding for added protection." - armor_type = /datum/armor/clothing_under/robohand - -/datum/armor/clothing_under/robohand - melee = 20 - bullet = 20 - laser = 20 - energy = 20 - bomb = 20 - -/obj/item/clothing/glasses/sunglasses/robohand - name = "badass sunglasses" - desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks flashes. These ones seem to be bulletproof?" - body_parts_covered = HEAD //What do you mean glasses don't protect your head? Of course they do. Cyberpunk has flying cars(mostly intentional)! - armor_type = /datum/armor/sunglasses_robohand - -/datum/armor/sunglasses_robohand - melee = 20 - bullet = 60 - laser = 20 - energy = 20 - bomb = 20 - wound = 5 - -//More items -/obj/item/guardiancreator/tech/choose/traitor/opfor - allowling = TRUE - -/obj/item/codeword_granter - name = "codeword manual" - desc = "A black manual with a red S lovingly inscribed on the cover by only the finest of presses from a factory." - icon = 'modular_skyrat/modules/opposing_force/icons/items.dmi' - icon_state = "codeword_book" - /// Number of charges the book has, limits the number of times it can be used. - var/charges = 1 - - -/obj/item/codeword_granter/attack_self(mob/living/user) - if(!isliving(user)) - return - - to_chat(user, span_boldannounce("You start skimming through [src], and feel suddenly imparted with the knowledge of the following code words:")) - - user.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_phrase_regex, "blue", src) - user.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_response_regex, "red", src) - to_chat(user, "<b>Code Phrases</b>: [jointext(GLOB.syndicate_code_phrase, ", ")]") - to_chat(user, "<b>Code Responses</b>: [span_red("[jointext(GLOB.syndicate_code_response, ", ")]")]") - - use_charge(user) - - -/obj/item/codeword_granter/attack(mob/living/attacked_mob, mob/living/user) - if(!istype(attacked_mob) || !istype(user)) - return - - if(attacked_mob == user) - attack_self(user) - return - - playsound(loc, SFX_PUNCH, 25, TRUE, -1) - - if(attacked_mob.stat == DEAD) - attacked_mob.visible_message(span_danger("[user] smacks [attacked_mob]'s lifeless corpse with [src]."), span_userdanger("[user] smacks your lifeless corpse with [src]."), span_hear("You hear smacking.")) - else - attacked_mob.visible_message(span_notice("[user] teaches [attacked_mob] by beating [attacked_mob.p_them()] over the head with [src]!"), span_boldnotice("As [user] hits you with [src], you feel suddenly imparted with the knowledge of some [span_red("specific words")]."), span_hear("You hear smacking.")) - attacked_mob.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_phrase_regex, "blue", src) - attacked_mob.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_response_regex, "red", src) - to_chat(attacked_mob, span_boldnotice("You feel suddenly imparted with the knowledge of the following code words:")) - to_chat(attacked_mob, "<b>Code Phrases</b>: [span_blue("[jointext(GLOB.syndicate_code_phrase, ", ")]")]") - to_chat(attacked_mob, "<b>Code Responses</b>: [span_red("[jointext(GLOB.syndicate_code_response, ", ")]")]") - use_charge(user) - - -/obj/item/codeword_granter/proc/use_charge(mob/user) - charges-- - - if(!charges) - var/turf/src_turf = get_turf(src) - src_turf.visible_message(span_warning("The cover and contents of [src] start shifting and changing! It slips out of your hands!")) - new /obj/item/book/manual/random(src_turf) - qdel(src) - - -/obj/item/antag_granter - icon = 'modular_skyrat/modules/opposing_force/icons/items.dmi' - /// What antag datum to give - var/antag_datum = /datum/antagonist/traitor - /// What to tell the user when they use the granter - var/user_message = "" - - -/obj/item/antag_granter/attack(mob/living/target_mob, mob/living/user, params) - . = ..() - - if(target_mob != user) // As long as you're attacking yourself it counts. - return - attack_self(user) - - -/obj/item/antag_granter/attack_self(mob/user, modifiers) - . = ..() - if(!isliving(user) || !user.mind) - return FALSE - - to_chat(user, span_notice(user_message)) - user.mind.add_antag_datum(antag_datum) - qdel(src) - return TRUE - -/obj/item/antag_granter/changeling - name = "viral injector" - desc = "A blue injector filled with some viscous, red substance. It has no markings apart from an orange warning stripe near the large needle." - icon_state = "changeling_injector" - antag_datum = /datum/antagonist/changeling - user_message = "As you inject the substance into yourself, you start to feel... <span class='red'><b>better</b></span>." - - -/obj/item/antag_granter/heretic - name = "strange book" - desc = "A purple book with a green eye on the cover. You swear it's looking at you...." - icon_state = "heretic_granter" - antag_datum = /datum/antagonist/heretic - user_message = "As you open the book, you see a great flash as <span class='hypnophrase'>the world becomes all the clearer for you</span>." - -/obj/item/antag_granter/clock_cultist - name = "brass contraption" - desc = "A cogwheel-shaped device of brass, with a glass lens floating, suspended in the center." - icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi' - icon_state = "vanguard_cogwheel" - antag_datum = /datum/antagonist/clock_cultist/solo - user_message = "A whirring fills your ears as <span class='brass'>knowledge of His Eminence fills your mind</span>." - -/obj/item/antag_granter/clock_cultist/attack_self(mob/user, modifiers) - . = ..() - if(!.) - return FALSE - - var/obj/item/clockwork/clockwork_slab/slab = new - user.put_in_hands(slab, FALSE) diff --git a/modular_skyrat/modules/moretraitoritems/code/weapons.dm b/modular_skyrat/modules/moretraitoritems/code/weapons.dm deleted file mode 100644 index 576bca81f2fbc5..00000000000000 --- a/modular_skyrat/modules/moretraitoritems/code/weapons.dm +++ /dev/null @@ -1,190 +0,0 @@ -#define CALIBRE_14MM "14mm" - -/obj/item/gun/ballistic/revolver/ocelot - name = "Colt Peacemaker revolver" - desc = "A modified Peacemaker revolver that chambers .357 ammo. Less powerful than the regular .357, but ricochets a lot more." // We need tension...conflict. The world today has become too soft. We're living in an age where true feelings are suppressed. So we're going to shake things up a bit. We'll create a world dripping with tension... ...a world filled with greed and suspicion, bravery and cowardice. - // this could probably be made funnier by reducing its damage multiplier but also making it so that every fired bullet has the wacky ricochets - // but that's a different plate of cookies for a different glass of milk - icon_state = "c38_panther" - accepted_magazine_type = /obj/item/ammo_box/magazine/internal/cylinder - -/obj/item/ammo_casing/a357/peacemaker - name = ".357 Peacemaker bullet casing" - desc = "A .357 Peacemaker bullet casing." - caliber = CALIBER_357 - projectile_type = /obj/projectile/bullet/a357/peacemaker - -/obj/projectile/bullet/a357/peacemaker - name = ".357 Peacemaker bullet" - damage = 25 - wound_bonus = 0 - ricochets_max = 6 - ricochet_chance = 200 - ricochet_auto_aim_angle = 50 - ricochet_auto_aim_range = 6 - ricochet_incidence_leeway = 80 - ricochet_decay_chance = 1 - -/datum/design/a357/peacemaker - name = "Speed Loader (.357 Peacemaker)" - id = "a357PM" - build_type = AUTOLATHE - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2) - build_path = /obj/item/ammo_box/a357/peacemaker - category = list(RND_CATEGORY_HACKED, RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO) - -/obj/item/ammo_box/a357/peacemaker - name = "speed loader (.357 Peacemaker)" - desc = "Designed to quickly reload revolvers." - icon_state = "357" - ammo_type = /obj/item/ammo_casing/a357/peacemaker - max_ammo = 7 - multiple_sprites = AMMO_BOX_PER_BULLET - item_flags = NO_MAT_REDEMPTION - - -/obj/item/clothing/head/hats/sus_bowler - name = "odd bowler" - desc = "A deep black bowler. Inside the hat, there is a sleek red S, with a smaller X insignia embroidered within. On closer inspection, the brim feels oddly weighted..." - icon_state = "bowler" - force = 10 - throwforce = 45 - throw_speed = 5 - throw_range = 9 - w_class = WEIGHT_CLASS_SMALL - armour_penetration = 30 //5 points less then a double esword! - sharpness = SHARP_POINTY - attack_verb_continuous = list("slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts") - attack_verb_simple = list("slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut") - -///obj/item/clothing/head/hats/sus_bowler/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - //var/caught = hit_atom.hitby(src, FALSE, FALSE, throwingdatum=throwingdatum) - //if(thrownby && !caught) - //addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/movable, throw_at), thrownby, throw_range+2, throw_speed, null, TRUE), 1) - //else - //return ..() - -///obj/item/clothing/head/hats/sus_bowler/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, force, gentle = FALSE, quickstart = TRUE) - //if(ishuman(thrower)) - //var/mob/living/carbon/human/I = thrower - //I.throw_mode_off(THROW_MODE_TOGGLE) //so they can catch it on the return. - //return ..() - - -/* -* Malorian Arms 3516 14MM -* If you have this, you're a badass. -*/ - -/obj/item/gun/ballistic/automatic/pistol/robohand - name = "Malorian Arms 3516" - desc = "The Malorian Arms 3516 is a 14mm heavy pistol, sporting a titanium frame and unique wooden grip. A custom Dyna-porting and \ - direct integral cyber-interlink means only someone with a cyberarm and smartgun link can take full advantage of the pistol's features." - icon = 'modular_skyrat/modules/moretraitoritems/icons/3516.dmi' - icon_state = "3516" - w_class = WEIGHT_CLASS_NORMAL - accepted_magazine_type = /obj/item/ammo_box/magazine/m14mm - can_suppress = FALSE - fire_sound = 'modular_skyrat/modules/moretraitoritems/sound/fire2.ogg' - load_sound = 'modular_skyrat/modules/moretraitoritems/sound/reload.ogg' - load_empty_sound = 'modular_skyrat/modules/moretraitoritems/sound/reload.ogg' - eject_sound = 'modular_skyrat/modules/moretraitoritems/sound/release.ogg' - eject_empty_sound = 'modular_skyrat/modules/moretraitoritems/sound/release.ogg' - vary_fire_sound = FALSE - rack_sound = 'modular_skyrat/modules/moretraitoritems/sound/slide.ogg' - fire_sound_volume = 100 - bolt_wording = "fuckin' slide" - reload_time = 0 //FAST AS FUCK BOIS! - var/unrestricted = FALSE - -/obj/item/gun/ballistic/automatic/pistol/robohand/unrestricted - unrestricted = TRUE - -//The gun cannot shoot if you do not have a cyborg arm. -/obj/item/gun/ballistic/automatic/pistol/robohand/afterattack(atom/target, mob/living/user, flag, params) - //This is where we are checking if the user has a cybernetic arm to USE the gun. ROBOHAND HAS A ROBO HAND - if(!unrestricted) - var/mob/living/carbon/human/human_user = user - var/obj/item/bodypart/selected_hand = human_user.get_active_hand() - if(IS_ORGANIC_LIMB(selected_hand)) - to_chat(user, span_warning("You can't seem to figure out how to use [src], perhaps you need to check the manual?")) - return - . = ..() - -/obj/item/gun/ballistic/automatic/pistol/robohand/insert_magazine(mob/user, obj/item/ammo_box/magazine/inserted_mag, display_message) - if(!istype(inserted_mag, accepted_magazine_type)) - to_chat(user, span_warning("\The [inserted_mag] doesn't seem to fit into \the [src]...")) - return FALSE - if(!user.transferItemToLoc(inserted_mag, src)) - to_chat(user, span_warning("You cannot seem to get \the [src] out of your hands!")) - return FALSE - magazine = inserted_mag - if(display_message) - to_chat(user, span_notice("You load a new [magazine_wording] into \the [src].")) - playsound(src, load_empty_sound, load_sound_volume, load_sound_vary) - if(bolt_type == BOLT_TYPE_OPEN && !bolt_locked) - chamber_round(TRUE) - drop_bolt(user) - update_appearance() - animate(src, 0.2 SECONDS, 1, transform = turn(matrix(), 120)) //Le johnny robohand woosh woosh twirl - animate(time = 0.2 SECONDS, transform = turn(matrix(), 240)) - animate(time = 0.2 SECONDS, transform = null) - return TRUE - -/obj/item/gun/ballistic/automatic/pistol/robohand/eject_magazine(mob/user, display_message, obj/item/ammo_box/magazine/tac_load) - if(bolt_type == BOLT_TYPE_OPEN) - chambered = null - if(magazine.ammo_count()) - playsound(src, eject_sound, eject_sound_volume, eject_sound_volume) //This is why we've copied this proc, it should play the eject sound when ejecting. - else - playsound(src, eject_empty_sound, eject_sound_volume, eject_sound_volume) - magazine.forceMove(drop_location()) - var/obj/item/ammo_box/magazine/old_mag = magazine - if(tac_load) - if (insert_magazine(user, tac_load, FALSE)) - to_chat(user, span_notice("You perform an elite tactical reload on \the [src].")) - else - to_chat(user, span_warning("You dropped the old [magazine_wording], but the new one doesn't fit. How embarassing.")) - magazine = null - else - magazine = null - user.put_in_hands(old_mag) - old_mag.update_appearance() - if(display_message) - to_chat(user, span_notice("You pull the [magazine_wording] out of \the [src].")) - update_appearance() - animate(src, transform = turn(matrix(), 120), time = 0.2 SECONDS, loop = 1) //Le johnny robohand again - animate(transform = turn(matrix(), 240), time = 0.2 SECONDS) - animate(transform = null, time = 0.2 SECONDS) - -//Magazine stuff -/obj/item/ammo_box/magazine/m14mm - name = "pistol magazine (14mm)" - icon = 'modular_skyrat/modules/moretraitoritems/icons/3516_mag.dmi' - icon_state = "14mm" - base_icon_state = "14mm" - ammo_type = /obj/item/ammo_casing/c14mm - caliber = CALIBRE_14MM - max_ammo = 10 - multiple_sprites = AMMO_BOX_FULL_EMPTY - -/obj/item/ammo_casing/c14mm - name = "14mm bullet casing" - desc = "A 14mm bullet casing. Badass." - caliber = CALIBRE_14MM - projectile_type = /obj/projectile/bullet/c14mm - -/obj/projectile/bullet/c14mm - name = "14mm bullet" - damage = 60 - embedding = list(embed_chance = 90, fall_chance = 3, jostle_chance = 4, ignore_throwspeed_threshold = TRUE, pain_stam_pct = 0.4, pain_mult = 5, jostle_pain_mult = 9, rip_time = 10) - dismemberment = 50 - pierces = 1 - projectile_piercing = PASSCLOSEDTURF|PASSGRILLE|PASSGLASS - -//nullrod katana -/obj/item/katana/weak/curator //This has the same stats as the curator's claymore - desc = "An ancient Katana. Forged by... Well, it doesn't really say, but surely it's authentic! And sharp to boot!" - force = 15 - block_chance = 30 - armour_penetration = 5 diff --git a/modular_skyrat/modules/mounted_machine_gun/code/ammobox.dm b/modular_skyrat/modules/mounted_machine_gun/code/ammobox.dm deleted file mode 100644 index 27074241e25f1c..00000000000000 --- a/modular_skyrat/modules/mounted_machine_gun/code/ammobox.dm +++ /dev/null @@ -1,23 +0,0 @@ -/obj/item/ammo_box/magazine/mmg_box - name = "\improper .50 BMG ammo box" - desc = "A big box full of beltfed ammo." - icon = 'modular_skyrat/modules/mounted_machine_gun/icons/turret_objects.dmi' - icon_state = "ammobox" - multiple_sprites = AMMO_BOX_FULL_EMPTY - max_ammo = 150 - ammo_type = /obj/item/ammo_casing/b50cal - caliber = CALIBER_50BMG - -/obj/item/ammo_casing/b50cal - name = ".50 BMG bullet casing" - icon = 'modular_skyrat/modules/gunsgalore/icons/ammo/ammo.dmi' - icon_state = "792x57-casing" - caliber = CALIBER_50BMG - projectile_type = /obj/projectile/bullet/c50cal - -/obj/projectile/bullet/c50cal - name = ".50 BMG bullet" - damage = 40 - wound_bonus = 60 - armour_penetration = 20 - icon_state = "redtrac" diff --git a/modular_skyrat/modules/mutants/code/mutant_techweb.dm b/modular_skyrat/modules/mutants/code/mutant_techweb.dm deleted file mode 100644 index e2570bfd311809..00000000000000 --- a/modular_skyrat/modules/mutants/code/mutant_techweb.dm +++ /dev/null @@ -1,49 +0,0 @@ -/obj/item/circuitboard/machine/rna_recombinator - name = "RNA Recombinator (Machine Board)" - greyscale_colors = CIRCUIT_COLOR_SCIENCE - build_path = /obj/machinery/rnd/rna_recombinator - req_components = list( - /datum/stock_part/scanning_module = 1, - /datum/stock_part/servo = 2, - /datum/stock_part/micro_laser = 2, - ) - -/datum/techweb_node/mutanttech - id = "mutanttech" - display_name = "Advanced Nanotrasen Viral Bioweapons Technology" - description = "Research devices from the Nanotrasen viral bioweapons division! Got a virus problem? This'll save your day." - prereq_ids = list("adv_engi", "adv_biotech") - design_ids = list("rna_vial", "rna_extractor", "rna_recombinator") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000) - -/datum/design/rna_vial - name = "Empty RNA vial" - desc = "An empty RNA vial for storing genetic information." - id = "rna_vial" - build_type = PROTOLATHE - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = SHEET_MATERIAL_AMOUNT, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/rna_vial - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL + RND_SUBCATEGORY_EQUIPMENT_SCIENCE - ) - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_MEDICAL - -/datum/design/rna_extractor - name = "RNA Extractor Device" - desc = "An RNA extraction device, use this on any subect you'd like to extract RNA data from, needs RNA vials to work." - id = "rna_extractor" - build_type = PROTOLATHE - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, /datum/material/gold = SHEET_MATERIAL_AMOUNT * 2, /datum/material/uranium = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/rna_extractor - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL + RND_SUBCATEGORY_EQUIPMENT_SCIENCE - ) - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_MEDICAL - -/datum/design/board/rna_recombinator - name = "Machine Design (RNA Recombinator)" - desc = "The MRNA Recombinator is one of Nanotrasens most advanced technologies and allows the exact recombination of virus RNA." - id = "rna_recombinator" - build_path = /obj/item/circuitboard/machine/rna_recombinator - category = list(RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_RESEARCH) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_MEDICAL diff --git a/modular_skyrat/modules/mutants/code/mutant_zombie_bodyparts.dm b/modular_skyrat/modules/mutants/code/mutant_zombie_bodyparts.dm deleted file mode 100644 index e0b71d6ec1d8ac..00000000000000 --- a/modular_skyrat/modules/mutants/code/mutant_zombie_bodyparts.dm +++ /dev/null @@ -1,53 +0,0 @@ -// mutant_zombie! -/obj/item/bodypart/head/mutant_zombie - icon_greyscale = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi' - icon = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi' - icon_static = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi' - icon_state = "mutant_head" - is_dimorphic = FALSE - limb_id = SPECIES_MUTANT - species_color = "#ffffff" - head_flags = HEAD_HAIR|HEAD_LIPS|HEAD_DEBRAIN - -/obj/item/bodypart/chest/mutant_zombie - icon_greyscale = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi' - icon = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi' - icon_static = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi' - limb_id = SPECIES_MUTANT - icon_state = "mutant_chest" - is_dimorphic = FALSE - should_draw_greyscale = FALSE - -/obj/item/bodypart/arm/left/mutant_zombie - icon_greyscale = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi' - icon = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi' - icon_static = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi' - limb_id = SPECIES_MUTANT - icon_state = "mutant_l_arm" - should_draw_greyscale = FALSE - -/obj/item/bodypart/arm/right/mutant_zombie - icon_greyscale = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi' - icon = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi' - icon_static = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi' - limb_id = SPECIES_MUTANT - icon_state = "mutant_r_arm" - should_draw_greyscale = FALSE - -/obj/item/bodypart/leg/left/mutant_zombie - icon_greyscale = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi' - icon = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi' - icon_static = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi' - limb_id = SPECIES_MUTANT - icon_state = "mutant_l_leg" - digitigrade_type = null - should_draw_greyscale = FALSE - -/obj/item/bodypart/leg/right/mutant_zombie - icon_greyscale = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi' - icon = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi' - icon_static = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi' - limb_id = SPECIES_MUTANT - icon_state = "mutant_r_leg" - digitigrade_type = null - should_draw_greyscale = FALSE diff --git a/modular_skyrat/modules/nanotrasen_naval_command/code/clothing.dm b/modular_skyrat/modules/nanotrasen_naval_command/code/clothing.dm deleted file mode 100644 index 0313c68010b430..00000000000000 --- a/modular_skyrat/modules/nanotrasen_naval_command/code/clothing.dm +++ /dev/null @@ -1,99 +0,0 @@ - -// UNDER -/obj/item/clothing/under/rank/centcom/skyrat/naval - name = "ensign uniform" - desc = "A uniform worn by those with the rank Ensign in the Nanotrasen Navy." - icon_state = "naval_ensign" - can_adjust = TRUE - -/obj/item/clothing/under/rank/centcom/skyrat/naval/commander - name = "command uniform" - desc = "A uniform worn by those with a command rank in the Nanotrasen Navy." - icon_state = "naval_command" - -/obj/item/clothing/under/rank/centcom/skyrat/naval/admiral - name = "admiral's uniform" - desc = "A uniform worn by those with the rank Admiral in the Nanotrasen Navy." - icon_state = "naval_admiral" - -/obj/item/clothing/under/rank/centcom/skyrat/naval/fleet_admiral - name = "fleet admiral's uniform" - desc = "A uniform worn by those with the rank Fleet Admiral in the Nanotrasen Navy." - icon_state = "naval_fleet_admiral" - -// GLOVES -/obj/item/clothing/gloves/combat/naval - name = "nanotrasen naval gloves" - desc = "A high quality pair of thick gloves covered in gold stitching, given to Nanotrasen's Naval Commanders." - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi' - icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi' - icon_state = "naval_command" - -/obj/item/clothing/gloves/combat/naval/fleet_admiral - name = "fleet admiral's gloves" - icon_state = "naval_fleet_admiral" - - -// HATS -/obj/item/clothing/head/hats/caphat/naval - name = "naval cap" - desc = "A cap worn by those in the Nanotrasen Navy." - icon_state = "naval_command" - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' - icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi' - supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON - -/obj/item/clothing/head/hats/caphat/naval/fleet_admiral - name = "fleet admiral's cap" - desc = "A cap worn by the Nanotrasen Fleet Admiral." - icon_state = "naval_fleet_admiral" - - -// NECK -/obj/item/clothing/neck/pauldron - name = "lieutenant commander's pauldron" - desc = "A red padded pauldron signifying the rank of Lieutenant Commander of the Nanotrasen Navy." - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' - icon = 'modular_skyrat/master_files/icons/obj/clothing/neck.dmi' - icon_state = "pauldron_ltcr" - -/obj/item/clothing/neck/pauldron/commander - name = "commander's pauldron" - desc = "A red padded pauldron signifying the rank of Commander in the Nanotrasen Navy." - icon_state = "pauldron_commander" - -/obj/item/clothing/neck/pauldron/captain - name = "captain's pauldron" - desc = "A red padded pauldron signifying the rank of Captain in the Nanotrasen Navy." - icon_state = "pauldron_captain" - -/obj/item/clothing/neck/cloak/admiral - name = "admiral's cape" - desc = "A vibrant green cape with gold stitching, worn by Nanotrasen Navy Admirals." - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' - icon = 'modular_skyrat/master_files/icons/obj/clothing/neck.dmi' - icon_state = "cape_admiral" - -/obj/item/clothing/neck/cloak/fleet_admiral - name = "fleet admiral's cape" - desc = "A godly cape worn by the highest ranking person in the Nanotrasen Navy, the Fleet Admiral." - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi' - icon = 'modular_skyrat/master_files/icons/obj/clothing/neck.dmi' - icon_state = "cape_fleet_admiral" - -// SUITS -/obj/item/clothing/suit/armor/vest/capcarapace/naval - name = "naval carapace" - desc = "A carapace worn by Naval Command members." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi' - icon_state = "naval_carapace" - -// GLASSES -/obj/item/clothing/glasses/hud/security/sunglasses/black - name = "black security sunglasses" - desc = "A pair of black sunglasses worn by Naval Command officers." - icon = 'icons/obj/clothing/glasses.dmi' - worn_icon = 'icons/mob/clothing/eyes.dmi' - icon_state = "sun" - unique_reskin = null diff --git a/modular_skyrat/modules/nanotrasen_naval_command/code/outfits.dm b/modular_skyrat/modules/nanotrasen_naval_command/code/outfits.dm deleted file mode 100644 index bca8833da461f9..00000000000000 --- a/modular_skyrat/modules/nanotrasen_naval_command/code/outfits.dm +++ /dev/null @@ -1,165 +0,0 @@ -/datum/outfit/centcom/naval - name = "Nanotrasen Naval Command - Default" - uniform = /obj/item/clothing/under/rank/centcom/skyrat/naval - id = /obj/item/card/id/advanced/centcom - l_pocket = /obj/item/melee/baton/telescopic - shoes = /obj/item/clothing/shoes/combat/swat - back = /obj/item/storage/backpack/satchel/leather - glasses = /obj/item/clothing/glasses/hud/security/sunglasses/black - ears = /obj/item/radio/headset/headset_cent/commander - -/datum/outfit/centcom/naval/post_equip(mob/living/carbon/human/human, visualsOnly = FALSE) - if(visualsOnly) - return - - var/obj/item/card/id/id_card = human.wear_id - id_card.registered_name = human.real_name - id_card.update_label() - id_card.update_icon() - ..() - -/datum/outfit/centcom/naval/ensign - name = "Nanotrasen Naval Command - Ensign" - - id_trim = /datum/id_trim/centcom/naval - - head = /obj/item/clothing/head/beret/centcom_formal - - uniform = /obj/item/clothing/under/rank/centcom/skyrat/naval - - gloves = /obj/item/clothing/gloves/tackler/combat/insulated - - backpack_contents = list( - /obj/item/storage/box/survival/security, - /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/skild, - ) - -/datum/outfit/centcom/naval/lieutenant - name = "Nanotrasen Naval Command - Lieutenant" - - id_trim = /datum/id_trim/centcom/naval/lieutenant - - head = /obj/item/clothing/head/hats/centcom_cap - - suit = /obj/item/clothing/suit/armor/vest/capcarapace/naval - - uniform = /obj/item/clothing/under/rank/centcom/skyrat/naval/commander - - gloves = /obj/item/clothing/gloves/combat/naval - - backpack_contents = list( - /obj/item/storage/box/survival/security, - /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/skild, - ) - -/datum/outfit/centcom/naval/lieutenant_commander - name = "Nanotrasen Naval Command - Lieutenant Commander" - - id_trim = /datum/id_trim/centcom/naval/ltcr - - head = /obj/item/clothing/head/hats/centcom_cap - - neck = /obj/item/clothing/neck/pauldron - - suit = /obj/item/clothing/suit/armor/vest/capcarapace/naval - - uniform = /obj/item/clothing/under/rank/centcom/skyrat/naval/commander - - gloves = /obj/item/clothing/gloves/combat/naval - - backpack_contents = list( - /obj/item/storage/box/survival/security, - /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/skild, - ) - -/datum/outfit/centcom/naval/commander - name = "Nanotrasen Naval Command - Commander" - - id_trim = /datum/id_trim/centcom/naval/commander - - head = /obj/item/clothing/head/hats/centcom_cap - - neck = /obj/item/clothing/neck/pauldron/commander - - suit = /obj/item/clothing/suit/armor/vest/capcarapace/naval - - uniform = /obj/item/clothing/under/rank/centcom/skyrat/naval/commander - - gloves = /obj/item/clothing/gloves/combat/naval - - backpack_contents = list( - /obj/item/storage/box/survival/security, - /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/skild, - ) - -/datum/outfit/centcom/naval/captain - name = "Nanotrasen Naval Command - Captain" - - id_trim = /datum/id_trim/centcom/naval/captain - - head = /obj/item/clothing/head/hats/centcom_cap - - neck = /obj/item/clothing/neck/pauldron/captain - - suit = /obj/item/clothing/suit/armor/vest/capcarapace/naval - - uniform = /obj/item/clothing/under/rank/centcom/skyrat/naval/commander - - gloves = /obj/item/clothing/gloves/combat/naval - - backpack_contents = list( - /obj/item/storage/box/survival/security, - /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/skild, - ) - -/datum/outfit/centcom/naval/rear_admiral - name = "Nanotrasen Naval Command - Rear Admiral" - - id_trim = /datum/id_trim/centcom/naval/rear_admiral - - head = /obj/item/clothing/head/hats/caphat/naval - - uniform = /obj/item/clothing/under/rank/centcom/skyrat/naval/admiral - - gloves = /obj/item/clothing/gloves/combat/naval - - backpack_contents = list( - /obj/item/storage/box/survival/security, - /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/skild, - ) - -/datum/outfit/centcom/naval/admiral - name = "Nanotrasen Naval Command - Admiral" - - id_trim = /datum/id_trim/centcom/naval/admiral - - head = /obj/item/clothing/head/hats/caphat/naval - - neck = /obj/item/clothing/neck/cloak/admiral - - uniform = /obj/item/clothing/under/rank/centcom/skyrat/naval/admiral - - gloves = /obj/item/clothing/gloves/combat/naval - - backpack_contents = list( - /obj/item/storage/box/survival/security, - /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/skild, - ) - -/datum/outfit/centcom/naval/fleet_admiral - name = "Nanotrasen Naval Command - Fleet Admiral" - - id_trim = /datum/id_trim/centcom/naval/fleet_admiral - - head = /obj/item/clothing/head/hats/caphat/naval/fleet_admiral - - neck = /obj/item/clothing/neck/cloak/fleet_admiral - - uniform = /obj/item/clothing/under/rank/centcom/skyrat/naval/fleet_admiral - - gloves = /obj/item/clothing/gloves/combat/naval/fleet_admiral - - backpack_contents = list( - /obj/item/storage/box/survival/security, - /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/skild, - ) diff --git a/modular_skyrat/modules/nanotrasen_rep/code/clothing.dm b/modular_skyrat/modules/nanotrasen_rep/code/clothing.dm deleted file mode 100644 index f27babb0a0641d..00000000000000 --- a/modular_skyrat/modules/nanotrasen_rep/code/clothing.dm +++ /dev/null @@ -1,92 +0,0 @@ - -//Uniform items are in command.dm - -/obj/item/clothing/suit/armor/vest/nanotrasen_consultant - name = "nanotrasen officers coat" - desc = "A premium black coat with real fur round the neck, it seems to have some armor padding inside as well." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' - icon_state = "bladerunner" - inhand_icon_state = "armor" - blood_overlay_type = "suit" - dog_fashion = null - body_parts_covered = CHEST|GROIN|ARMS - cold_protection = CHEST|GROIN|ARMS - min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT - heat_protection = CHEST|ARMS|GROIN - max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - -/obj/item/clothing/head/nanotrasen_consultant - name = "nanotrasen consultant's hat" - desc = "A cap made from durathread, it has an insignia on the front denoting the rank of \"Nanotrasen Consultant\"." - icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' - icon_state = "nt_consultant_cap" - inhand_icon_state = "that" - flags_inv = 0 - armor_type = /datum/armor/head_nanotrasen_consultant - strip_delay = 60 - dog_fashion = null - supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON - -/datum/armor/head_nanotrasen_consultant - melee = 15 - bullet = 5 - laser = 15 - energy = 25 - bomb = 10 - fire = 30 - acid = 5 - wound = 4 - -/obj/item/clothing/head/nanotrasen_consultant/beret - name = "nanotrasen consultant's beret" - desc = "A beret made from durathread, it has an insignia on the front denoting the rank of \"Nanotrasen Consultant\"." - greyscale_config = /datum/greyscale_config/beret_badge - greyscale_config_worn = /datum/greyscale_config/beret_badge/worn - greyscale_colors = "#3F3C40#155326" - icon_state = "beret_badge" - -/obj/item/clothing/head/beret/centcom_formal/nt_consultant - armor_type = /datum/armor/beret_centcom_formal_nt_consultant - -/datum/armor/beret_centcom_formal_nt_consultant - melee = 15 - bullet = 5 - laser = 15 - energy = 25 - bomb = 10 - fire = 30 - acid = 5 - wound = 4 - -/obj/item/clothing/suit/armor/centcom_formal/nt_consultant - armor_type = /datum/armor/armor_centcom_formal_nt_consultant - -/datum/armor/armor_centcom_formal_nt_consultant - melee = 35 - bullet = 30 - laser = 30 - energy = 40 - bomb = 25 - fire = 50 - acid = 50 - wound = 10 - -/obj/item/clothing/suit/hooded/wintercoat/centcom/nt_consultant - armor_type = /datum/armor/centcom_nt_consultant - -/datum/armor/centcom_nt_consultant - melee = 35 - bullet = 30 - laser = 30 - energy = 40 - bomb = 25 - fire = 50 - acid = 50 - wound = 10 - -/obj/item/clothing/gloves/combat/naval/nanotrasen_consultant - name = "\improper CentCom gloves" - desc = "A high quality pair of thick gloves covered in gold stitching." diff --git a/modular_skyrat/modules/novaya_ert/code/automatic.dm b/modular_skyrat/modules/novaya_ert/code/automatic.dm deleted file mode 100644 index 64e2637edd58b8..00000000000000 --- a/modular_skyrat/modules/novaya_ert/code/automatic.dm +++ /dev/null @@ -1,41 +0,0 @@ -/obj/item/gun/ballistic/automatic/nri_smg - name = "\improper QLP/04 SMG" - desc = "A 4.2x30mm submachine gun developed for military and police use by the now-absorbed by the Izhevsk Coalition arms manufacturer. \ - Features a mag insertion-activated holosight providing its user with information regarding the gun's ammo count and its general status, as well as \ - a folding stock. Due to its efficiency, is currently in use by the NRI's reserve military forces; support and vehicle crews, \ - not including numerous police patrols scattered across the border." - worn_icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_back.dmi' - icon = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_guns40x32.dmi' - lefthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/gunsgalore/icons/guns/gunsgalore_righthand.dmi' - worn_icon_state = "nri_smg" - icon_state = "nri_smg" - inhand_icon_state = "nri_smg" - w_class = WEIGHT_CLASS_BULKY - accepted_magazine_type = /obj/item/ammo_box/magazine/uzim9mm - fire_delay = 1 - burst_size = 5 - dual_wield_spread = 5 - spread = 5 - can_suppress = FALSE - mag_display = TRUE - empty_indicator = TRUE - alt_icons = TRUE - fire_sound = 'sound/weapons/gun/smg/shot_alt.ogg' - -/obj/item/gun/ballistic/automatic/nri_smg/give_manufacturer_examine() - AddElement(/datum/element/manufacturer_examine, COMPANY_IZHEVSK) - -/obj/item/gun/ballistic/automatic/pistol/nri - name = "\improper Szabo-Ivanek service pistol" - desc = "A mass produced NRI-made modified reproduction of the Wespe line of handguns rechambered in 9×25mm.\ - 'PATRIOT DEFENSE SYSTEMS' is inscribed on the receiver, indicating it's been made with a plasteel printer." - icon = 'modular_skyrat/modules/novaya_ert/icons/pistol.dmi' - icon_state = "ladon" - w_class = WEIGHT_CLASS_SMALL - accepted_magazine_type = /obj/item/ammo_box/magazine/m9mm_aps - burst_size = 3 - fire_delay = 3 - -/obj/item/gun/ballistic/automatic/pistol/nri/give_manufacturer_examine() - AddElement(/datum/element/manufacturer_examine, COMPANY_IZHEVSK) diff --git a/modular_skyrat/modules/novaya_ert/code/belt.dm b/modular_skyrat/modules/novaya_ert/code/belt.dm deleted file mode 100644 index 46d838e0197980..00000000000000 --- a/modular_skyrat/modules/novaya_ert/code/belt.dm +++ /dev/null @@ -1,70 +0,0 @@ -/obj/item/storage/belt/military/nri - name = "green tactical belt" - desc = "A green tactical belt made for storing military grade hardware." - icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi' - worn_icon_teshari = 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/belt.dmi' - icon_state = "russian_green_belt" - inhand_icon_state = "security" - worn_icon_state = "russian_green_belt" - -/obj/item/storage/belt/military/nri/captain - name = "black tactical belt" - desc = "A black tactical belt made for storing military grade hardware." - icon_state = "russian_black_belt" - worn_icon_state = "russian_black_belt" - -/obj/item/storage/belt/military/nri/medic - name = "blue tactical belt" - desc = "A blue tactical belt made for storing military grade hardware." - icon_state = "russian_white_belt" - worn_icon_state = "russian_white_belt" - -/obj/item/storage/belt/military/nri/engineer - name = "brown tactical belt" - desc = "A brown tactical belt made for storing military grade hardware." - icon_state = "russian_brown_belt" - worn_icon_state = "russian_brown_belt" - -/obj/item/storage/belt/military/nri/plus_mre/PopulateContents() - new /obj/item/storage/box/nri_survival_pack/raider(src) - -/obj/item/storage/belt/military/nri/soldier/PopulateContents() - generate_items_inside(list( - /obj/item/ammo_box/magazine/akm = 4, - /obj/item/knife/combat = 1, - /obj/item/grenade/smokebomb = 1, - /obj/item/grenade/frag = 1, - ),src) - -/obj/item/storage/belt/military/nri/heavy/PopulateContents() - generate_items_inside(list( - /obj/item/ammo_box/magazine/m9mm_aps = 4, - /obj/item/knife/combat = 1, - /obj/item/grenade/smokebomb = 1, - /obj/item/grenade/frag = 1, - ),src) - -/obj/item/storage/belt/military/nri/captain/full/PopulateContents() - generate_items_inside(list( - /obj/item/ammo_box/magazine/akm = 4, - /obj/item/knife/combat = 1, - /obj/item/grenade/smokebomb = 1, - /obj/item/grenade/frag = 1, - ),src) - -/obj/item/storage/belt/military/nri/medic/full/PopulateContents() - generate_items_inside(list( - /obj/item/ammo_box/magazine/uzim9mm = 4, - /obj/item/knife/combat = 1, - /obj/item/grenade/smokebomb = 1, - /obj/item/grenade/frag = 1, - ),src) - -/obj/item/storage/belt/military/nri/engineer/full/PopulateContents() - generate_items_inside(list( - /obj/item/ammo_box/magazine/uzim9mm = 4, - /obj/item/knife/combat = 1, - /obj/item/grenade/smokebomb = 1, - /obj/item/grenade/frag = 1, - ),src) diff --git a/modular_skyrat/modules/novaya_ert/code/ert.dm b/modular_skyrat/modules/novaya_ert/code/ert.dm deleted file mode 100644 index f9c0fbbfa3b21e..00000000000000 --- a/modular_skyrat/modules/novaya_ert/code/ert.dm +++ /dev/null @@ -1,89 +0,0 @@ -/datum/ert/nri - roles = list(/datum/antagonist/ert/nri, /datum/antagonist/ert/nri/medic, /datum/antagonist/ert/nri/engineer) - leader_role = /datum/antagonist/ert/nri/commander - rename_team = "NRI border patrol" - code = "Red" - mission = "Cooperate with the station, protect NRI assets." - polldesc = "a squad of NRI border patrol" - teamsize = 4 - -/datum/antagonist/ert/nri - name = "NRI border patrol" - role = "Private" - outfit = /datum/outfit/centcom/ert/nri - suicide_cry = "GOD, SAVE THE EMPRESS!!" - -/datum/antagonist/ert/nri/on_gain() - . = ..() - equip_nri() - -/datum/antagonist/ert/nri/proc/equip_nri() - if(!ishuman(owner.current)) - return - var/mob/living/carbon/human/H = owner.current - H.set_species(/datum/species/human) - - H.grant_language(/datum/language/panslavic) - H.grant_language(/datum/language/schechi) - return TRUE - -/datum/antagonist/ert/nri/greet() - if(!ert_team) - return - - to_chat(owner, span_boldwarning("<font size=3 color=yellow>You are the [name]</font>")) - - var/missiondesc = "Your squad is responding to an emergency situation of [station_name()], with the Novaya Rossiyskaya Imperiya Defense Collegium's approval." - if(leader) //If Squad Leader - missiondesc += "<BR><B>Lead your squad to ensure the completion of the mission. Board the shuttle when your team is ready.</B>" - - missiondesc += "<BR><B><font size=3 color=red>You are NOT a Nanotrasen Employee. You work for Novaya Rossiyskaya Imperiya Defense Collegium.</font></B>" - missiondesc += "<BR><B><font size=3 color=red>You are NOT a deathsquad. You are here to assist the station's Security and Command with alien infestations or enemy activity for you own gain.</font></B>" - missiondesc += "<BR>You are responding to emergency calls from the station for immediate NRI military intervention!\n" - missiondesc += "<BR><B>Your Mission</B>:" - missiondesc += "<BR> <B>1.</B> Minimise civillian casualties." - missiondesc += "<BR> <B>2.</B> Neutralise the threat." - missiondesc += "<BR> <B>3.</B> Stabilise the situation." - missiondesc += "<BR> <B>4.</B> Contact whoever called you and assist in resolving the matter." - missiondesc += "<BR> <B>5.</B> Protect, ensure, and uphold the rights of Novaya Rossiyskaya Imperiya, Kingdom of Agurkrral and Free Teshari League citizens on board [station_name()]. SolFed citizens' wellbeing is up to your discretion." - missiondesc += "<BR> <B>6.</B> Attempt to subvert the station's crew in order to shift the station's territory under control of Novaya Rossiyskaya Imperiya." - - missiondesc += span_warning("<BR><B>Your Mission</B>: [ert_team.mission.explanation_text]") - to_chat(owner,missiondesc) - -/datum/antagonist/ert/nri/commander - role = "Commander" - outfit = /datum/outfit/centcom/ert/nri/commander - -/datum/antagonist/ert/nri/medic - role = "Corpsman" - outfit = /datum/outfit/centcom/ert/nri/medic - -/datum/antagonist/ert/nri/engineer - role = "Combat Engineer" - outfit = /datum/outfit/centcom/ert/nri/engineer - -/datum/ert/nri/diplomacy - roles = list(/datum/antagonist/ert/nri/diplomat/scientist, /datum/antagonist/ert/nri/diplomat/doctor) - leader_role = /datum/antagonist/ert/nri/diplomat/major - rename_team = "NRI External Relationships Colleague" - code = "Green" - mission = "Cooperate with the station's command, perform routine evaluation of NRI citizen's wellbeing as well as Research and Medical departments' genetical and virological researches." - polldesc = "NRI diplomatic mission" - -/datum/antagonist/ert/nri/diplomat - name = "NRI ERC Diplomat" - role = "Diplomat" - outfit = /datum/outfit/centcom/ert/nri // no shit for generic role that won't even appear bruh - -/datum/antagonist/ert/nri/diplomat/major - role = "Major" - outfit = /datum/outfit/centcom/ert/nri/major - -/datum/antagonist/ert/nri/diplomat/scientist - role = "Research Inspector" - outfit = /datum/outfit/centcom/ert/nri/scientist - -/datum/antagonist/ert/nri/diplomat/doctor - role = "Medical Inspector" - outfit = /datum/outfit/centcom/ert/nri/doctor diff --git a/modular_skyrat/modules/novaya_ert/code/head.dm b/modular_skyrat/modules/novaya_ert/code/head.dm deleted file mode 100644 index 7b9b95166ad126..00000000000000 --- a/modular_skyrat/modules/novaya_ert/code/head.dm +++ /dev/null @@ -1,50 +0,0 @@ -/obj/item/clothing/head/beret/sec/nri - name = "commander's beret" - desc = "Za rodinu!!" - armor_type = /datum/armor/sec_nri - -/datum/armor/sec_nri - melee = 40 - bullet = 35 - laser = 30 - energy = 40 - bomb = 25 - fire = 20 - acid = 50 - wound = 20 - -/obj/item/clothing/head/helmet/space/hev_suit/nri - name = "\improper VOSKHOD powered combat armor helmet" - desc = "A composite graphene-plasteel helmet with a ballistic nylon inner padding, complete with a deployable airtight polycarbonate visor and respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back." - icon = 'modular_skyrat/master_files/icons/obj/clothing/head/helmet.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/helmet.dmi' - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/head_muzzled.dmi' - worn_icon_teshari = 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/head.dmi' - icon_state = "nri_soldier" - armor_type = /datum/armor/hev_suit_nri - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - obj_flags = null - supports_variations_flags = CLOTHING_SNOUTED_VARIATION - resistance_flags = FIRE_PROOF|UNACIDABLE|ACID_PROOF|FREEZE_PROOF - clothing_flags = STOPSPRESSUREDAMAGE|SNUG_FIT|BLOCK_GAS_SMOKE_EFFECT - clothing_traits = null - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF - flash_protect = FLASH_PROTECTION_WELDER - visor_flags_inv = HIDEMASK|HIDEEYES|HIDEFACE|HIDEFACIALHAIR - visor_flags = STOPSPRESSUREDAMAGE - slowdown = 0 - -/obj/item/clothing/head/helmet/space/hev_suit/nri/captain - name = "\improper VOSKHOD-2 powered combat armor helmet" - desc = "A black composite polyurea coated graphene-plastitanium helmet with durathread inner padding, complete with a deployable airtight tinted plasmaglass visor and a kevlar-lined respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back." - icon_state = "nri_captain" - -/obj/item/clothing/head/helmet/space/hev_suit/nri/medic - name = "\improper VOSKHOD-KH powered combat armor helmet" - desc = "A combat medic's composite graphene-titanium helmet with bio-resistant padding, complete with a deployable airtight polycarbonate visor and optimized respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back." - icon_state = "nri_medic" - -/obj/item/clothing/head/helmet/space/hev_suit/nri/engineer - name = "\improper VOSKHOD-IN powered combat armor helmet" - desc = "A composite tungsten-plasteel helmet with a lead-lined ballistic nylon inner padding, complete with a deployable airtight polycarbonate visor and respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back." - icon_state = "nri_engineer" diff --git a/modular_skyrat/modules/novaya_ert/code/outfit.dm b/modular_skyrat/modules/novaya_ert/code/outfit.dm deleted file mode 100644 index 35b90414bd0ee4..00000000000000 --- a/modular_skyrat/modules/novaya_ert/code/outfit.dm +++ /dev/null @@ -1,174 +0,0 @@ -/datum/outfit/centcom/ert/nri - name = "Novaya Rossiyskaya Imperiya Soldier" - head = null - glasses = /obj/item/clothing/glasses/night - ears = /obj/item/radio/headset/headset_cent/alt/with_key - mask = /obj/item/clothing/mask/gas/hecu2 - uniform = /obj/item/clothing/under/costume/nri - suit = null - suit_store = null - gloves = /obj/item/clothing/gloves/combat - belt = /obj/item/storage/belt/military/nri/soldier - back = /obj/item/mod/control/pre_equipped/frontline/ert - backpack_contents = list(/obj/item/storage/box/nri_survival_pack, - /obj/item/storage/medkit/emergency, - /obj/item/ammo_box/magazine/m9mm_aps, - /obj/item/advanced_choice_beacon/nri/heavy, - /obj/item/beamout_tool, - /obj/item/crucifix, - /obj/item/reagent_containers/cup/glass/waterbottle/large/cryptobiolin) - l_pocket = /obj/item/gun/ballistic/automatic/pistol/nri - r_pocket = /obj/item/ammo_box/magazine/m9mm_aps - shoes = /obj/item/clothing/shoes/combat - - l_hand = /obj/item/gun/ballistic/automatic/akm/nri - - id = /obj/item/card/id/advanced/centcom/ert/nri - id_trim = /datum/id_trim/nri - -/datum/outfit/centcom/ert/nri/commander - name = "Novaya Rossiyskaya Imperiya Platoon Commander" - head = null - glasses = /obj/item/clothing/glasses/thermal/eyepatch - uniform = /obj/item/clothing/under/costume/nri/captain - belt = /obj/item/storage/belt/military/nri/captain/full - suit = null - suit_store = null - gloves = /obj/item/clothing/gloves/tackler/combat/insulated - back = /obj/item/mod/control/pre_equipped/frontline/ert - backpack_contents = list(/obj/item/storage/box/nri_survival_pack, - /obj/item/storage/medkit/regular, - /obj/item/megaphone, - /obj/item/binoculars, - /obj/item/clothing/head/beret/sec/nri, - /obj/item/ammo_box/magazine/m9mm_aps, - /obj/item/beamout_tool, - /obj/item/crucifix, - /obj/item/reagent_containers/cup/glass/waterbottle/large/cryptobiolin) - - l_hand = /obj/item/gun/ballistic/automatic/akm/nri - - id_trim = /datum/id_trim/nri/commander - -/datum/outfit/centcom/ert/nri/medic - name = "Novaya Rossiyskaya Imperiya Corpsman" - head = null - glasses = /obj/item/clothing/glasses/hud/health/night - uniform = /obj/item/clothing/under/costume/nri/medic - belt = /obj/item/storage/belt/military/nri/medic/full - suit = null - suit_store = null - gloves = /obj/item/clothing/gloves/latex/nitrile - back = /obj/item/mod/control/pre_equipped/frontline/ert - backpack_contents = list(/obj/item/storage/box/nri_survival_pack, - /obj/item/storage/medkit/tactical, - /obj/item/storage/medkit/advanced, - /obj/item/storage/medkit/surgery, - /obj/item/gun/medbeam, - /obj/item/gun/energy/cell_loaded/medigun/cmo, - /obj/item/storage/box/medicells, - /obj/item/beamout_tool, - /obj/item/crucifix, - /obj/item/reagent_containers/cup/glass/waterbottle/large/cryptobiolin) - - l_hand = /obj/item/shield/riot/pointman/nri - r_hand = /obj/item/gun/ballistic/automatic/nri_smg - - id_trim = /datum/id_trim/nri/medic - -/datum/outfit/centcom/ert/nri/engineer - name = "Novaya Rossiyskaya Imperiya Combat Engineer" - head = null - glasses = /obj/item/clothing/glasses/meson/night - uniform = /obj/item/clothing/under/costume/nri/engineer - belt = /obj/item/storage/belt/military/nri/engineer/full - suit = null - suit_store = null - back = /obj/item/mod/control/pre_equipped/frontline/ert - backpack_contents = list(/obj/item/storage/box/nri_survival_pack, - /obj/item/construction/rcd/loaded/upgraded, - /obj/item/rcd_ammo/large, - /obj/item/advanced_choice_beacon/nri/engineer, - /obj/item/beamout_tool, - /obj/item/crucifix, - /obj/item/reagent_containers/cup/glass/waterbottle/large/cryptobiolin) - - l_hand = /obj/item/storage/belt/utility/full/powertools - r_hand = /obj/item/gun/ballistic/automatic/nri_smg - - id_trim = /datum/id_trim/nri/engineer - -/datum/outfit/centcom/ert/nri/major - name = "Novaya Rossiyskaya Imperiya Major" - head = null - glasses = /obj/item/clothing/glasses/hud/security/sunglasses - ears = /obj/item/radio/headset/headset_cent/alt/with_key - mask = null - uniform = /obj/item/clothing/under/costume/russian_officer - suit = /obj/item/clothing/suit/jacket/officer/tan - suit_store = null - gloves = /obj/item/clothing/gloves/combat - belt = /obj/item/gun/ballistic/revolver/nagant - back = /obj/item/storage/backpack/satchel/leather - backpack_contents = list(/obj/item/storage/box/nri_survival_pack, - /obj/item/ammo_box/n762, - /obj/item/ammo_box/n762, - /obj/item/suppressor, - /obj/item/knife/combat, - /obj/item/beamout_tool) - l_pocket = null - r_pocket = null - shoes = /obj/item/clothing/shoes/combat/swat - id = /obj/item/card/id/advanced/centcom/ert/nri - id_trim = /datum/id_trim/nri/diplomat/major - -/datum/outfit/centcom/ert/nri/scientist - name = "Novaya Rossiyskaya Imperiya Research Inspector" - head = null - glasses = /obj/item/clothing/glasses/regular - ears = /obj/item/radio/headset/headset_cent/alt/with_key - mask = null - uniform = /obj/item/clothing/under/rank/rnd/research_director - suit = /obj/item/clothing/suit/toggle/labcoat - suit_store = null - gloves = /obj/item/clothing/gloves/latex/nitrile - belt = /obj/item/clipboard - back = /obj/item/storage/backpack/satchel/leather - backpack_contents = list(/obj/item/storage/box/nri_survival_pack, - /obj/item/melee/baton/telescopic, - /obj/item/gun/energy/e_gun/mini, - /obj/item/beamout_tool) - l_pocket = null - r_pocket = null - shoes = /obj/item/clothing/shoes/sneakers/brown - id = /obj/item/card/id/advanced/centcom/ert/nri - id_trim = /datum/id_trim/nri/diplomat/scientist - -/datum/outfit/centcom/ert/nri/doctor - name = "Novaya Rossiyskaya Imperiya Medical Inspector" - head = null - glasses = /obj/item/clothing/glasses/hud/health - ears = /obj/item/radio/headset/headset_cent/alt/with_key - mask = null - uniform = /obj/item/clothing/under/rank/medical/chief_medical_officer - suit = /obj/item/clothing/suit/toggle/labcoat/cmo - suit_store = null - gloves = /obj/item/clothing/gloves/latex/nitrile - belt = /obj/item/clipboard - back = /obj/item/storage/backpack/satchel/leather - backpack_contents = list(/obj/item/storage/box/nri_survival_pack, - /obj/item/gun/ballistic/automatic/pistol/nri, - /obj/item/ammo_box/magazine/m9mm_aps, - /obj/item/ammo_box/magazine/m9mm_aps, - /obj/item/storage/medkit/expeditionary, - /obj/item/melee/baton/telescopic, - /obj/item/beamout_tool) - l_pocket = null - r_pocket = null - shoes = /obj/item/clothing/shoes/sneakers/brown - id = /obj/item/card/id/advanced/centcom/ert/nri - id_trim = /datum/id_trim/nri/diplomat/doctor - -/datum/outfit/centcom/ert/nri/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - return - //Two reasons for this; one, Russians aren't NT and dont need implants used mostly for NT-sympathizers. Two, the HUD looks ugly with the blue mindshield outline. diff --git a/modular_skyrat/modules/novaya_ert/code/shield.dm b/modular_skyrat/modules/novaya_ert/code/shield.dm deleted file mode 100644 index b72581d70c39fe..00000000000000 --- a/modular_skyrat/modules/novaya_ert/code/shield.dm +++ /dev/null @@ -1,25 +0,0 @@ -/obj/item/shield/riot/pointman/nri - name = "heavy corpsman shield" - desc = "A shield designed for people that have to sprint to the rescue. Cumbersome as hell. Repair with plasteel." - icon_state = "riot" - icon = 'modular_skyrat/modules/novaya_ert/icons/riot.dmi' - lefthand_file = 'modular_skyrat/modules/novaya_ert/icons/riot_left.dmi' - righthand_file = 'modular_skyrat/modules/novaya_ert/icons/riot_right.dmi' - transparent = FALSE - -/obj/item/shield/riot/pointman/nri/shatter(mob/living/carbon/human/owner) - playsound(owner, 'sound/effects/glassbr3.ogg', 100) - new /obj/item/corpsman_broken((get_turf(src))) - - -/obj/item/corpsman_broken - name = "broken corpsman shield" - desc = "Might be able to be repaired with a welder." - icon_state = "riot_broken" - icon = 'modular_skyrat/modules/novaya_ert/icons/riot.dmi' - w_class = WEIGHT_CLASS_BULKY - -/obj/item/corpsman_broken/welder_act(mob/living/user, obj/item/I) - ..() - new /obj/item/shield/riot/pointman/nri((get_turf(src))) - qdel(src) diff --git a/modular_skyrat/modules/novaya_ert/code/suit.dm b/modular_skyrat/modules/novaya_ert/code/suit.dm deleted file mode 100644 index 4466bd26da4381..00000000000000 --- a/modular_skyrat/modules/novaya_ert/code/suit.dm +++ /dev/null @@ -1,94 +0,0 @@ -#define NRI_POWERUSE_HIT 100 -#define NRI_POWERUSE_HEAL 150 - -#define NRI_COOLDOWN_HEAL (10 SECONDS) -#define NRI_COOLDOWN_RADS (20 SECONDS) -#define NRI_COOLDOWN_ACID (20 SECONDS) - -#define NRI_HEAL_AMOUNT 10 -#define NRI_BLOOD_REPLENISHMENT 20 - -/obj/item/clothing/suit/space/hev_suit/nri - name = "\improper VOSKHOD powered combat armor" - desc = "A hybrid set of space-resistant armor built on a modified mass-produced Nomex-Aerogel flight suit, polyurea coated durathread-lined light plasteel plates hinder mobility as little as possible while the onboard life support system aids the user in combat. The power cell is what makes the armor work without hassle, a sticker in the power supply unit warns anyone reading to responsibly manage battery levels." - icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/spacesuit.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/spacesuit.dmi' - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi' - worn_icon_teshari = 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/suit.dmi' - icon_state = "nri_soldier" - armor_type = /datum/armor/hev_suit_nri - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDESEXTOY|HIDETAIL - allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/energy/sword, /obj/item/restraints/handcuffs, /obj/item/tank/internals) - cell = /obj/item/stock_parts/cell/bluespace - actions_types = list(/datum/action/item_action/hev_toggle/nri, /datum/action/item_action/hev_toggle_notifs/nri, /datum/action/item_action/toggle_spacesuit) - resistance_flags = FIRE_PROOF|UNACIDABLE|ACID_PROOF|FREEZE_PROOF - clothing_flags = STOPSPRESSUREDAMAGE|SNUG_FIT|BLOCKS_SHOVE_KNOCKDOWN - - activation_song = null //No nice song. - - radio_channel = RADIO_CHANNEL_CENTCOM - - armor_unpowered = /datum/armor/hev_suit_nri - armor_powered = /datum/armor/hev_suit_nri/powered - heal_amount = NRI_HEAL_AMOUNT - blood_replenishment = NRI_BLOOD_REPLENISHMENT - health_static_cooldown = NRI_COOLDOWN_HEAL - rads_static_cooldown = NRI_COOLDOWN_RADS - acid_static_cooldown = NRI_COOLDOWN_ACID - suit_name = "VOSKHOD" - first_use = FALSE //No nice song. - - - -/datum/armor/hev_suit_nri - melee = 25 - bullet = 25 - laser = 25 - energy = 25 - bomb = 25 - bio = 25 - fire = 30 - acid = 30 - wound = 30 - consume = 10 - -/datum/armor/hev_suit_nri/powered - melee = 40 - bullet = 50 - laser = 30 - energy = 40 - bomb = 60 - bio = 75 - fire = 50 - acid = 50 - wound = 50 - consume = 40 - -/datum/action/item_action/hev_toggle/nri - name = "Toggle VOSKHOD Suit" - button_icon = 'modular_skyrat/modules/novaya_ert/icons/toggles.dmi' - background_icon_state = "bg_nri" - button_icon = 'modular_skyrat/modules/novaya_ert/icons/toggles.dmi' - button_icon_state = "toggle" - -/datum/action/item_action/hev_toggle_notifs/nri - name = "Toggle VOSKHOD Suit Notifications" - button_icon = 'modular_skyrat/modules/novaya_ert/icons/toggles.dmi' - background_icon_state = "bg_nri" - button_icon = 'modular_skyrat/modules/novaya_ert/icons/toggles.dmi' - button_icon_state = "sound" - -/obj/item/clothing/suit/space/hev_suit/nri/captain - name = "\improper VOSKHOD-2 powered combat armor" - desc = "A unique hybrid set of space-resistant armor made for high-ranking NRI operatives, built on a proprietary durathread padded, Akulan made Larr'Takh silk utility uniform. Polyurea coated hexagraphene-lined plastitanium plates hinder mobility as little as possible while the onboard life support system aids the user in combat. The power cell is what makes the armor work without hassle, a sticker in the power supply unit warns anyone reading to responsibly manage battery levels." - icon_state = "nri_captain" - -/obj/item/clothing/suit/space/hev_suit/nri/medic - name = "\improper VOSKHOD-KH powered combat armor" - desc = "A hybrid set of space-resistant armor built on a modified mass-produced Dipolyester-Aerogel surgeon field jumpsuit, polyurea coated titanium plates hinder mobility as little as possible while the onboard life support system aids the user in combat and provides additional medical functions. The power cell is what makes the armor work without hassle, a sticker in the power supply unit warns anyone reading to responsibly manage battery levels." - icon_state = "nri_medic" - -/obj/item/clothing/suit/space/hev_suit/nri/engineer - name = "\improper VOSKHOD-IN powered combat armor" - desc = "A hybrid set of space-resistant armor built on a modified Nanotrasen heavy-duty engineering undersuit, polyurea coated lead-lined light plasteel plates hinder mobility as little as possible and offer additional radiation protection while the onboard life support system aids the user in combat. The power cell is what makes the armor work without hassle, a sticker in the power supply unit warns anyone reading to responsibly manage battery levels." - icon_state = "nri_engineer" diff --git a/modular_skyrat/modules/novaya_ert/code/surplus_weapons.dm b/modular_skyrat/modules/novaya_ert/code/surplus_weapons.dm deleted file mode 100644 index e1cc649d5f4aba..00000000000000 --- a/modular_skyrat/modules/novaya_ert/code/surplus_weapons.dm +++ /dev/null @@ -1,197 +0,0 @@ -// Plasma spewing pistol -// Sprays a wall of plasma that sucks against armor but fucks against unarmored targets - -/obj/item/gun/energy/laser/plasma_thrower - name = "\improper Tkach 'Zirka' plasma projector" - desc = "An outdated sidearm rarely seen in use by some members of the CIN. Spews an inaccurate stream of searing plasma out the magnetic barrel so long as it has power and the trigger is pulled." - icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_guns/guns_32.dmi' - icon_state = "plasmathrower" - - fire_sound = 'modular_skyrat/modules/microfusion/sound/incinerate.ogg' - fire_sound_volume = 40 // This thing is comically loud otherwise - - w_class = WEIGHT_CLASS_NORMAL - can_suppress = FALSE - fire_delay = 1 - spread = 15 - - ammo_type = list(/obj/item/ammo_casing/energy/laser/plasma_glob) - -/obj/item/gun/energy/laser/plasma_thrower/Initialize(mapload) - . = ..() - AddComponent(/datum/component/automatic_fire, 0.1 SECONDS) - -/obj/item/gun/energy/laser/plasma_thrower/examine(mob/user) - . = ..() - . += "The plasma globs have <b>reduced effectiveness against blobs</b>." - -/obj/item/gun/energy/laser/plasma_thrower/give_manufacturer_examine() - AddElement(/datum/element/manufacturer_examine, COMPANY_TKACH) - -/obj/item/gun/energy/laser/plasma_thrower/examine_more(mob/user) - . = ..() - . += "The Zirka started life as an experiment in advancing the field of accelerated \ - plasma weaponry. Despite the design's obvious shortcomings in terms of accuracy and \ - range, the CIN combined military command (which we'll call the CMC from now on) took \ - interest in the weapon as a means to counter Sol's more advanced armor technology. \ - As it would turn out, the plasma globules created by the weapon were really not \ - as effective against armor as the CMC had hoped, quite the opposite actually. \ - What the plasma did do well however was inflict grevious burns upon anyone unfortunate \ - enough to get hit by it unprotected. For this reason, the Zirka saw frequent use by \ - army officers and ship crews who needed a backup weapon to incinerate the odd space \ - pirate or prisoner of war." - -// Casing and projectile for the plasma thrower -/obj/item/ammo_casing/energy/laser/plasma_glob - projectile_type = /obj/projectile/beam/laser/plasma_glob - fire_sound = 'modular_skyrat/modules/microfusion/sound/incinerate.ogg' - e_cost = LASER_SHOTS(20, STANDARD_CELL_CHARGE) - -/obj/projectile/beam/laser/plasma_glob - name = "plasma globule" - icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_guns/ammo.dmi' - icon_state = "plasma_glob" - damage = 10 - speed = 1.5 - bare_wound_bonus = 75 // Lasers already get wild wound bonus this is just a bit higher than that - wound_bonus = -50 - pass_flags = PASSTABLE | PASSGRILLE // His ass does NOT pass through glass! - weak_against_armour = TRUE - -/obj/projectile/beam/laser/plasma_glob/on_hit(atom/target, blocked = 0, pierce_hit) - if(istype(target, /obj/structure/blob) || HAS_TRAIT(target, TRAIT_BLOB_ALLY)) - damage = damage * 0.75 - return ..() - -// A revolver, but it can hold shotgun shells -// Woe, buckshot be upon ye - -/obj/item/gun/ballistic/revolver/cin_shotgun_revolver - name = "\improper Tkach 'Ya-Sui' 12 GA revolver" - desc = "An outdated sidearm rarely seen in use by some members of the CIN. A revolver type design with a three shell cylinder. That's right, shell, this one shoots twelve guage." - accepted_magazine_type = /obj/item/ammo_box/magazine/internal/cylinder/rev12ga - recoil = SAWN_OFF_RECOIL - weapon_weight = WEAPON_HEAVY - icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_guns/guns_32.dmi' - icon_state = "shawty_revolver" - fire_sound = 'modular_skyrat/modules/sec_haul/sound/revolver_fire.ogg' - spread = SAWN_OFF_ACC_PENALTY - -/obj/item/gun/ballistic/revolver/cin_shotgun_revolver/give_manufacturer_examine() - AddElement(/datum/element/manufacturer_examine, COMPANY_TKACH) - -/obj/item/gun/ballistic/revolver/cin_shotgun_revolver/examine_more(mob/user) - . = ..() - - . += "The Ya-Sui started development as a limited run sporting weapon before \ - the border war broke out. The market quickly changed from sport shooting \ - targets, to sport shooting SolFed strike teams once the conflict broke out. \ - This pattern is different from the original civilian version, with a military \ - standard pistol grip and weather resistant finish. While the Ya-Sui was not \ - a weapon standard issued to every CIN soldier, it was available for relatively \ - cheap, and thus became rather popular among the ranks." - - return . - -// Shotgun revolver's cylinder - -/obj/item/ammo_box/magazine/internal/cylinder/rev12ga - name = "\improper 12 GA revolver cylinder" - ammo_type = /obj/item/ammo_casing/shotgun - caliber = CALIBER_SHOTGUN - max_ammo = 3 - multiload = FALSE - -// The AMR -// This sounds a lot scarier than it actually is, you'll just have to trust me here - -/obj/item/gun/ballistic/automatic/cin_amr - name = "\improper Tkach-Tsuneyo AMR" - desc = "A massive, outdated beast of an anti materiel rifle that was once in use by CIN military forces. Fires the devastating .60 Strela caseless round, the massively overperforming penetration of which being the reason this weapon was discontinued." - icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_guns/guns_64.dmi' - base_pixel_x = -16 // This baby is 64 pixels wide - pixel_x = -16 - righthand_file = 'modular_skyrat/modules/novaya_ert/icons/surplus_guns/inhands_64_right.dmi' - lefthand_file = 'modular_skyrat/modules/novaya_ert/icons/surplus_guns/inhands_64_left.dmi' - inhand_x_dimension = 64 - inhand_y_dimension = 64 - worn_icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_guns/onmob.dmi' - icon_state = "amr" - inhand_icon_state = "amr" - worn_icon_state = "amr" - w_class = WEIGHT_CLASS_HUGE - slot_flags = ITEM_SLOT_BACK - - accepted_magazine_type = /obj/item/ammo_box/magazine/cin_amr - can_suppress = FALSE - can_bayonet = FALSE - - fire_sound = 'modular_skyrat/modules/novaya_ert/sound/amr_fire.ogg' - fire_sound_volume = 100 // BOOM BABY - - recoil = 4 - - weapon_weight = WEAPON_HEAVY - burst_size = 1 - fire_delay = 2 SECONDS - actions_types = list() - - force = 15 // I mean if you're gonna beat someone with the thing you might as well get damage appropriate for how big the fukken thing is - -/obj/item/gun/ballistic/automatic/cin_amr/give_manufacturer_examine() - - AddElement(/datum/element/manufacturer_examine, COMPANY_TKACH) - -/obj/item/gun/ballistic/automatic/cin_amr/examine_more(mob/user) - . = ..() - - . += "The Tkach-Tsuneyo AMR was, as the name may suggest, a cooperation \ - in design between both the Tkach Design Bureau, and an (at the time) \ - relatively new Tsuneyo Defense Systems. The goal was simple, the CIN \ - needed a weapon capable of easily penetrating SolFed armor in a man \ - portable format. What they got was the gun you're looking at now, a \ - monster of a weapon firing a proprietary caseless cartridge that \ - certainly fit the order. The round ended up being so capable, in fact, \ - that the weapon had no use anywhere once the border war ended. This \ - is partially due to the fact that the rounds will go so cleanly through \ - a man that it would be more cost effective to shoot him with any \ - other weapon. It may also just be that the weapon is so large and \ - unwieldy." - - return . - -// AMR magazine - -/obj/item/ammo_box/magazine/cin_amr - name = "anti-materiel magazine (.60 Strela)" - icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_guns/ammo.dmi' - icon_state = "amr_mag" - base_icon_state = "amr_mag" - multiple_sprites = AMMO_BOX_FULL_EMPTY - ammo_type = /obj/item/ammo_casing/p60strela - max_ammo = 3 - caliber = CALIBER_60STRELA - -// AMR bullet - -/obj/item/ammo_casing/p60strela - name = ".60 Strela caseless cartridge" - icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_guns/ammo.dmi' - icon_state = "amr_bullet" - desc = "A massive block of propellant with an equally massive round sticking out the top of it." - caliber = CALIBER_60STRELA - projectile_type = /obj/projectile/bullet/p60strela - -/obj/item/ammo_casing/p60strela/Initialize(mapload) - . = ..() - AddElement(/datum/element/caseless) - -/obj/projectile/bullet/p60strela // The funny thing is, these are wild but you only get three of them - name =".60 Strela bullet" - icon_state = "gaussphase" - speed = 0.4 - damage = 50 - armour_penetration = 75 - wound_bonus = -30 - bare_wound_bonus = -15 - projectile_piercing = PASSGLASS | PASSMACHINE | PASSSTRUCTURE | PASSDOORS | PASSGRILLE // Wallbang (except it cant penetrate walls) baby diff --git a/modular_skyrat/modules/novaya_ert/code/toolbox.dm b/modular_skyrat/modules/novaya_ert/code/toolbox.dm deleted file mode 100644 index 77ad7051a52e2a..00000000000000 --- a/modular_skyrat/modules/novaya_ert/code/toolbox.dm +++ /dev/null @@ -1,66 +0,0 @@ -/obj/item/storage/toolbox/ammobox - desc = "It contains a few clips." - icon_state = "ammobox" - inhand_icon_state = "ammobox" - lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi' - has_latches = FALSE - drop_sound = 'sound/items/handling/ammobox_drop.ogg' - pickup_sound = 'sound/items/handling/ammobox_pickup.ogg' - -/obj/item/storage/toolbox/ammobox/full - var/ammo_type = null ///Type of mags/casings/clips we spawn in. - var/amount = 0 ///Amount of mags/casings/clips we spawn in. - -/obj/item/storage/toolbox/ammobox/full/PopulateContents() - if(!isnull(ammo_type)) - for(var/i in 1 to amount) - new ammo_type(src) - -/obj/item/storage/toolbox/ammobox/full/mosin - name = "ammo box (Sakhno)" - ammo_type = /obj/item/ammo_box/strilka310 - amount = 7 - -/obj/item/storage/toolbox/ammobox/full/krinkov - name = "ammo box (Krinkov)" - desc = "It contains a few magazines." - ammo_type = /obj/item/ammo_box/magazine/akm - amount = 7 - -/obj/item/storage/toolbox/ammobox/full/krinkov/emp - name = "ammo box (Krinkov, EMP)" - desc = "It contains a few magazines." - ammo_type = /obj/item/ammo_box/magazine/akm/emp - -/obj/item/storage/toolbox/ammobox/full/krinkov/fire - name = "ammo box (Krinkov, incendiary)" - desc = "It contains a few magazines." - ammo_type = /obj/item/ammo_box/magazine/akm/fire - -/obj/item/storage/toolbox/ammobox/full/krinkov/ricochet - name = "ammo box (Krinkov, match)" - desc = "It contains a few magazines." - ammo_type = /obj/item/ammo_box/magazine/akm/ricochet - -/obj/item/storage/toolbox/ammobox/full/krinkov/ap - name = "ammo box (Krinkov, armor piercing)" - desc = "It contains a few magazines." - ammo_type = /obj/item/ammo_box/magazine/akm/ap - -/obj/item/storage/toolbox/ammobox/full/nri_smg - name = "ammo box (QLP/04)" - ammo_type = /obj/item/ammo_box/magazine/uzim9mm - amount = 7 - -/obj/item/storage/toolbox/ammobox/full/l6_saw - name = "ammo box (L6 SAW)" - desc = "It contains a few magazines." - ammo_type = /obj/item/ammo_box/magazine/m7mm - amount = 7 - -/obj/item/storage/toolbox/ammobox/full/aps - name = "ammo box (Szabo-Ivanek/APS)" - desc = "It contains a few magazines." - ammo_type = /obj/item/ammo_box/magazine/m9mm_aps - amount = 7 diff --git a/modular_skyrat/modules/novaya_ert/code/uniform.dm b/modular_skyrat/modules/novaya_ert/code/uniform.dm deleted file mode 100644 index d4d65208b40151..00000000000000 --- a/modular_skyrat/modules/novaya_ert/code/uniform.dm +++ /dev/null @@ -1,28 +0,0 @@ -/obj/item/clothing/under/costume/nri //Copied from the russian outfit - name = "advanced imperial fatigues" - desc = "The latest in tactical and comfortable russian military outfits." - icon = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi' - worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/uniform_digi.dmi' - worn_icon_teshari = 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/uniform.dmi' - icon_state = "nri_soldier" - inhand_icon_state = "hostrench" - armor_type = /datum/armor/clothing_under/costume_nri - strip_delay = 50 - sensor_mode = SENSOR_COORDS - random_sensor = FALSE - can_adjust = FALSE - -/datum/armor/clothing_under/costume_nri - melee = 10 - fire = 30 - acid = 30 - -/obj/item/clothing/under/costume/nri/captain - icon_state = "nri_captain" - -/obj/item/clothing/under/costume/nri/medic - icon_state = "nri_medic" - -/obj/item/clothing/under/costume/nri/engineer - icon_state = "nri_engineer" diff --git a/modular_skyrat/modules/novaya_ert/icons/ammo_boxes.dmi b/modular_skyrat/modules/novaya_ert/icons/ammo_boxes.dmi deleted file mode 100644 index 77b138229873c9..00000000000000 Binary files a/modular_skyrat/modules/novaya_ert/icons/ammo_boxes.dmi and /dev/null differ diff --git a/modular_skyrat/modules/novaya_ert/icons/mod.dmi b/modular_skyrat/modules/novaya_ert/icons/mod.dmi deleted file mode 100644 index dc529a8ecab068..00000000000000 Binary files a/modular_skyrat/modules/novaya_ert/icons/mod.dmi and /dev/null differ diff --git a/modular_skyrat/modules/novaya_ert/icons/pistol.dmi b/modular_skyrat/modules/novaya_ert/icons/pistol.dmi deleted file mode 100644 index 8f71bde7a8b92f..00000000000000 Binary files a/modular_skyrat/modules/novaya_ert/icons/pistol.dmi and /dev/null differ diff --git a/modular_skyrat/modules/novaya_ert/icons/surplus_guns/ammo.dmi b/modular_skyrat/modules/novaya_ert/icons/surplus_guns/ammo.dmi deleted file mode 100644 index 292b180c7f90af..00000000000000 Binary files a/modular_skyrat/modules/novaya_ert/icons/surplus_guns/ammo.dmi and /dev/null differ diff --git a/modular_skyrat/modules/novaya_ert/icons/surplus_guns/guns_32.dmi b/modular_skyrat/modules/novaya_ert/icons/surplus_guns/guns_32.dmi deleted file mode 100644 index ad921747af1ebe..00000000000000 Binary files a/modular_skyrat/modules/novaya_ert/icons/surplus_guns/guns_32.dmi and /dev/null differ diff --git a/modular_skyrat/modules/novaya_ert/icons/surplus_guns/guns_64.dmi b/modular_skyrat/modules/novaya_ert/icons/surplus_guns/guns_64.dmi deleted file mode 100644 index 0657df090ea3dd..00000000000000 Binary files a/modular_skyrat/modules/novaya_ert/icons/surplus_guns/guns_64.dmi and /dev/null differ diff --git a/modular_skyrat/modules/novaya_ert/icons/surplus_guns/inhands_64_left.dmi b/modular_skyrat/modules/novaya_ert/icons/surplus_guns/inhands_64_left.dmi deleted file mode 100644 index 6f7ed570121969..00000000000000 Binary files a/modular_skyrat/modules/novaya_ert/icons/surplus_guns/inhands_64_left.dmi and /dev/null differ diff --git a/modular_skyrat/modules/novaya_ert/icons/surplus_guns/inhands_64_right.dmi b/modular_skyrat/modules/novaya_ert/icons/surplus_guns/inhands_64_right.dmi deleted file mode 100644 index 75008610f488fd..00000000000000 Binary files a/modular_skyrat/modules/novaya_ert/icons/surplus_guns/inhands_64_right.dmi and /dev/null differ diff --git a/modular_skyrat/modules/novaya_ert/icons/surplus_guns/onmob.dmi b/modular_skyrat/modules/novaya_ert/icons/surplus_guns/onmob.dmi deleted file mode 100644 index 7e48b817c1b332..00000000000000 Binary files a/modular_skyrat/modules/novaya_ert/icons/surplus_guns/onmob.dmi and /dev/null differ diff --git a/modular_skyrat/modules/novaya_ert/icons/wornmod.dmi b/modular_skyrat/modules/novaya_ert/icons/wornmod.dmi deleted file mode 100644 index f2a0a55b925678..00000000000000 Binary files a/modular_skyrat/modules/novaya_ert/icons/wornmod.dmi and /dev/null differ diff --git a/modular_skyrat/modules/novaya_ert/readme.md b/modular_skyrat/modules/novaya_ert/readme.md deleted file mode 100644 index 9acbfc774bde98..00000000000000 --- a/modular_skyrat/modules/novaya_ert/readme.md +++ /dev/null @@ -1,14 +0,0 @@ -## Title: Novaya Rossiyskaya Imperiya ERT - -MODULE ID: NRI ERT - -### Description: - -A new style ERT for our Russian downstream, requested by them! It's a cool looking Russian style space ERT with guns and vodka! - -### Credits: -Gandalf2k15 - Code and some icons. -Stalkeros - Code and some icons. -Ramirez - Icons and idea. -Flavrius - Icons + misc. -Paxilmaniac - Surplus weapons and armor diff --git a/modular_skyrat/modules/opposing_force/code/equipment/ammo.dm b/modular_skyrat/modules/opposing_force/code/equipment/ammo.dm deleted file mode 100644 index 996fbb1efeb74b..00000000000000 --- a/modular_skyrat/modules/opposing_force/code/equipment/ammo.dm +++ /dev/null @@ -1,83 +0,0 @@ -/datum/opposing_force_equipment/ammo_exotic - category = OPFOR_EQUIPMENT_CATEGORY_AMMO_EXOTIC - -/datum/opposing_force_equipment/ammo_exotic/ripper35 - description = "A box of .35 Sol rounds, hollow-tipped for maximum damage against NON-ARMOURED combatants." - item_type = /obj/item/ammo_box/c35sol/ripper - -/datum/opposing_force_equipment/ammo_exotic/pierce40 - description = "A box of .40 Sol Match rounds, works best against armoured combatants; the box has a warning about being careful for collateral damage." - item_type = /obj/item/ammo_box/c40sol/pierce - -/datum/opposing_force_equipment/ammo_exotic/fire40 - description = "A box of .40 Sol Incendiary rounds, bullet impacts light the victims aflame." - item_type = /obj/item/ammo_box/c40sol/incendiary - -/datum/opposing_force_equipment/ammo_exotic/frag40 - description = "A box of .40 Sol Fragmentation rounds, useful for incapacitating your victim ASAP, no matter if they live or die." - item_type = /obj/item/ammo_box/c40sol/fragmentation - -/datum/opposing_force_equipment/ammo_exotic/magnum - description = "A box of magnum flechette shotgun shells, the first choice munition of many shotgun fanatics." - item_type = /obj/item/ammo_box/advanced/s12gauge/magnum - -/datum/opposing_force_equipment/ammo_exotic/express - description = "A box of express buckshot shotgun shells, for when the regular shells can't keep up with you." - item_type = /obj/item/ammo_box/advanced/s12gauge/express - -/datum/opposing_force_equipment/ammo_exotic/flechette - description = "A box of flechette shotgun shells, tighter spread than buckshot plus more armour damage." - item_type = /obj/item/ammo_box/advanced/s12gauge/flechette - -/datum/opposing_force_equipment/ammo_exotic/incendiary - description = "A box of dargonsbreath shotgun shells, highly underrated in the hands of someone who knows not to step forward after firing." - item_type = /obj/item/ammo_box/advanced/s12gauge/incendiary - -/datum/opposing_force_equipment/ammo_exotic/slug - description = "A box of slug shotgun shells, fires only one big fuck-off bullet that wounds extra hard." - item_type = /obj/item/ammo_box/advanced/s12gauge - -/datum/opposing_force_equipment/ammo_exotic/hp_slug - description = "A box of hollow point slug shotgun shells, annihilates unarmoured combatants." - item_type = /obj/item/ammo_box/advanced/s12gauge/hp - -/datum/opposing_force_equipment/ammo_exotic/ap_slug - description = "A box of armour piercing slug shotgun shells, are armoured targets your number one concern? With these shells you'll hardly remember they're wearing any." - item_type = /obj/item/ammo_box/advanced/s12gauge/pt20 - -/datum/opposing_force_equipment/ammo_exotic/a357phasic - description = "A speedloader of .357 that ignores structure collision at the cost of some damage." - admin_note = "Bullets ignore walls, has a damage penalty." - item_type = /obj/item/ammo_box/a357/phasic - -/datum/opposing_force_equipment/ammo_exotic/a357heartseeker - description = "A speedloader of .357 with homing capabilities." - item_type = /obj/item/ammo_box/a357/heartseeker - -/datum/opposing_force_equipment/ammo_exotic/a357peacemaker - description = "A speedloader of .357 that have their impact lessened to highten the odds for ricochet shots." - item_type = /obj/item/ammo_box/a357/peacemaker - -/datum/opposing_force_equipment/ammo_exotic/ap45 - description = "An smg magazine of armour piercing .45, used by the c20-r." - item_type = /obj/item/ammo_box/magazine/smgm45/ap - -/datum/opposing_force_equipment/ammo_exotic/hp45 - description = "An smg magazine of hollow point .45, used by the c20-r." - item_type = /obj/item/ammo_box/magazine/smgm45/hp - -/datum/opposing_force_equipment/ammo_exotic/incen45 - description = "An smg magazine of incendiary .45, used by the c20-r." - item_type = /obj/item/ammo_box/magazine/smgm45/incen - -/datum/opposing_force_equipment/ammo_exotic/ap9mm - description = "An smg magazine of armour piercing 9mm, used by the makarov." - item_type = /obj/item/ammo_box/magazine/m9mm/ap - -/datum/opposing_force_equipment/ammo_exotic/hp9mm - description = "An smg magazine of hollow point 9mm, used by the makarov." - item_type = /obj/item/ammo_box/magazine/m9mm/hp - -/datum/opposing_force_equipment/ammo_exotic/incen9mm - description = "An smg magazine of incendiary 9mm, used by the makarov." - item_type = /obj/item/ammo_box/magazine/m9mm/fire diff --git a/modular_skyrat/modules/opposing_force/code/equipment/clothing.dm b/modular_skyrat/modules/opposing_force/code/equipment/clothing.dm deleted file mode 100644 index 16fbfa9c27139f..00000000000000 --- a/modular_skyrat/modules/opposing_force/code/equipment/clothing.dm +++ /dev/null @@ -1,339 +0,0 @@ -/datum/opposing_force_equipment/clothing_syndicate - category = OPFOR_EQUIPMENT_CATEGORY_CLOTHING_SYNDICATE - -/datum/opposing_force_equipment/clothing_syndicate/operative - name = "Syndicate Operative" - description = "A tried classic outfit, sporting versatile defensive gear, tactical webbing, a comfortable turtleneck, and even an emergency space-suit box." - item_type = /obj/item/storage/backpack/duffelbag/syndie/operative - -/obj/item/storage/backpack/duffelbag/syndie/operative/PopulateContents() //basically old insurgent bundle -nukie mod - new /obj/item/clothing/under/syndicate/skyrat/tactical(src) - new /obj/item/clothing/under/syndicate/skyrat/tactical/skirt(src) - new /obj/item/clothing/suit/armor/bulletproof(src) - new /obj/item/clothing/shoes/combat(src) - new /obj/item/clothing/gloves/tackler/combat(src) - new /obj/item/clothing/mask/gas/syndicate(src) - new /obj/item/storage/belt/military(src) - new /obj/item/radio/headset/syndicate/alt(src) - new /obj/item/card/id/advanced/chameleon(src) - new /obj/item/clothing/glasses/sunglasses(src) - new /obj/item/storage/box/syndie_kit/space_suit(src) - -/datum/opposing_force_equipment/clothing_syndicate/engineer - name = "Syndicate Engineer" - description = "A spin on the classic outfit, for those whose hands are never clean. Trades defensive choices for utility. Comes with an emergency space-suit box." - item_type = /obj/item/storage/backpack/duffelbag/syndie/engineer - -/obj/item/storage/backpack/duffelbag/syndie/engineer/PopulateContents() - new /obj/item/clothing/under/syndicate/skyrat/overalls(src) - new /obj/item/clothing/under/syndicate/skyrat/overalls/skirt(src) - new /obj/item/clothing/suit/armor/bulletproof(src) - new /obj/item/clothing/shoes/combat(src) - new /obj/item/clothing/gloves/combat(src) - new /obj/item/clothing/mask/gas/syndicate(src) - new /obj/item/storage/belt/utility/syndicate(src) - new /obj/item/radio/headset/syndicate/alt(src) - new /obj/item/card/id/advanced/chameleon(src) - new /obj/item/clothing/glasses/meson/night(src) - new /obj/item/storage/box/syndie_kit/space_suit(src) - -/datum/opposing_force_equipment/clothing_syndicate/spy - name = "Syndicate Spy" - description = "They don't have to know who you are, and they won't. Comes with emergency space-suit box." - item_type = /obj/item/storage/backpack/duffelbag/syndie/spy - -/obj/item/storage/backpack/duffelbag/syndie/spy/PopulateContents() - new /obj/item/clothing/under/suit/black/armoured(src) - new /obj/item/clothing/under/suit/black/skirt/armoured(src) - new /obj/item/clothing/suit/jacket/det_suit/noir/armoured(src) - new /obj/item/storage/belt/holster/detective/dark(src) - new /obj/item/clothing/head/frenchberet/armoured(src) - new /obj/item/clothing/shoes/laceup(src) - new /obj/item/clothing/neck/tie/red/hitman(src) - new /obj/item/clothing/mask/gas/syndicate/ds(src) //a red spy is in the base - new /obj/item/radio/headset/syndicate/alt(src) - new /obj/item/card/id/advanced/chameleon(src) - new /obj/item/clothing/glasses/sunglasses(src) - new /obj/item/hhmirror/syndie(src) - new /obj/item/storage/box/syndie_kit/space_suit(src) - -/datum/opposing_force_equipment/clothing_syndicate/maid - name = "Syndicate Maid" - description = "..." - item_type = /obj/item/storage/backpack/duffelbag/syndie/maid - -/obj/item/storage/backpack/duffelbag/syndie/maid/PopulateContents() //by far the weakest bundle - new /obj/item/clothing/under/syndicate/skyrat/maid(src) - new /obj/item/clothing/gloves/combat/maid(src) - new /obj/item/clothing/head/costume/maidheadband/syndicate(src) - new /obj/item/clothing/shoes/laceup(src) - new /obj/item/radio/headset/syndicate/alt(src) - new /obj/item/card/id/advanced/chameleon(src) - -/datum/opposing_force_equipment/clothing_syndicate/cybersun_operative - name = "Cybersun Operative" - description = "For the most covert of ops. Comes with emergency space-suit box." - item_type = /obj/item/storage/backpack/duffelbag/syndie/cybersun_operative - -/obj/item/storage/backpack/duffelbag/syndie/cybersun_operative/PopulateContents() //drip maxxed - new /obj/item/clothing/under/syndicate/combat(src) - new /obj/item/clothing/suit/armor/bulletproof(src) - new /obj/item/clothing/shoes/combat(src) - new /obj/item/clothing/gloves/combat(src) - new /obj/item/clothing/mask/gas/sechailer/syndicate(src) - new /obj/item/clothing/glasses/meson/night(src) - new /obj/item/storage/belt/military/assault(src) - new /obj/item/radio/headset/syndicate/alt(src) - new /obj/item/card/id/advanced/chameleon(src) - new /obj/item/storage/box/syndie_kit/space_suit(src) - -/datum/opposing_force_equipment/clothing_syndicate/cybersun_hacker - name = "Cybersun Hacker" - description = "Some space-farers believe the infamous Space Ninja is no longer around, and they are wrong." - item_type = /obj/item/storage/backpack/duffelbag/syndie/cybersun_hacker - -/obj/item/storage/backpack/duffelbag/syndie/cybersun_hacker/PopulateContents() - new /obj/item/clothing/under/syndicate/ninja(src) - new /obj/item/clothing/shoes/combat(src) - new /obj/item/clothing/gloves/combat(src) - new /obj/item/clothing/mask/gas/ninja(src) - new /obj/item/clothing/glasses/hud/health/night/meson(src) //damn its sexy - new /obj/item/storage/belt/military/assault(src) - new /obj/item/radio/headset/syndicate/alt(src) - new /obj/item/card/id/advanced/chameleon(src) - -/datum/opposing_force_equipment/clothing_syndicate/lone_gunman - name = "Lone Gunman" - description = "My name is not important." - admin_note = "Looks unarmoured, yet is very armoured" - item_type = /obj/item/storage/backpack/duffelbag/syndie/lone_gunman - -/obj/item/storage/backpack/duffelbag/syndie/lone_gunman/PopulateContents() - new /obj/item/clothing/under/pants/track/robohand(src) - new /obj/item/clothing/glasses/sunglasses/robohand(src) - new /obj/item/clothing/suit/jacket/trenchcoat/gunman(src) - new /obj/item/clothing/shoes/combat(src) - new /obj/item/radio/headset/syndicate/alt(src) - new /obj/item/card/id/advanced/chameleon(src) - - -/datum/opposing_force_equipment/clothing_sol - category = OPFOR_EQUIPMENT_CATEGORY_CLOTHING_SOL - -/datum/opposing_force_equipment/clothing_sol/sol_militant - name = "Sol Militant" - description = "There is a war being fought, and its taking place right here." - admin_note = "Uniquely strong power armour." - item_type = /obj/item/storage/backpack/ert/odst/hecu/sol_militant - -/obj/item/storage/backpack/ert/odst/hecu/sol_militant/PopulateContents() - new /obj/item/clothing/under/rank/security/officer/hecu(src) - new /obj/item/clothing/suit/space/hev_suit/pcv(src) - new /obj/item/clothing/head/helmet/space/hev_suit/pcv(src) - new /obj/item/storage/belt/military/assault/hecu(src) - new /obj/item/clothing/mask/gas/hecu2(src) - new /obj/item/clothing/shoes/combat(src) - new /obj/item/clothing/gloves/combat(src) - new /obj/item/clothing/glasses/night(src) - new /obj/item/radio/headset/syndicate/alt(src) - new /obj/item/card/id/advanced/chameleon(src) - -/datum/opposing_force_equipment/clothing_sol/dogginos - name = "Dogginos Courier" - description = "You're just doing your job." - item_type = /obj/item/storage/backpack/satchel/leather/dogginos - -/obj/item/storage/backpack/satchel/leather/dogginos/PopulateContents() - new /obj/item/clothing/under/pizza(src) - new /obj/item/clothing/suit/pizzaleader(src) - new /obj/item/clothing/suit/toggle/jacket/hoodie/pizza(src) - new /obj/item/clothing/head/pizza(src) - new /obj/item/clothing/head/soft/red(src) - new /obj/item/clothing/glasses/betterunshit(src) - new /obj/item/clothing/mask/fakemoustache/italian(src) - new /obj/item/clothing/shoes/sneakers/red(src) - new /obj/item/radio/headset/headset_cent/impostorsr(src) - new /obj/item/card/id/advanced/chameleon(src) - -/datum/opposing_force_equipment/clothing_sol/impostor - name = "CentCom Impostor" - description = "Don't ask us how we got this. Comes with special agent ID pre-equipped with COMMAND access." - item_type = /obj/item/storage/backpack/duffelbag/syndie/impostor - -/obj/item/storage/backpack/duffelbag/syndie/impostor/PopulateContents() - new /obj/item/clothing/under/rank/centcom/officer(src) - new /obj/item/clothing/under/rank/centcom/officer_skirt(src) - new /obj/item/clothing/head/hats/centcom_cap(src) - new /obj/item/clothing/suit/armor/centcom_formal(src) - new /obj/item/clothing/shoes/combat(src) - new /obj/item/radio/headset/headset_cent/impostorsr(src) - new /obj/item/clothing/glasses/sunglasses(src) - new /obj/item/clipboard(src) - new /obj/item/card/id/advanced/chameleon/impostorsr(src) //this thing has bridge access, and no one knows about that - new /obj/item/stamp/centcom(src) - new /obj/item/clothing/gloves/combat(src) - - -/datum/opposing_force_equipment/clothing_pirate - category = OPFOR_EQUIPMENT_CATEGORY_CLOTHING_PIRATE - -/datum/opposing_force_equipment/clothing_pirate/space_pirate - name = "Space Pirate" - description = "Did you fall overboard?" - item_type = /obj/item/storage/backpack/duffelbag/syndie/space_pirate - -/obj/item/storage/backpack/duffelbag/syndie/space_pirate/PopulateContents() - new /obj/item/clothing/under/costume/pirate(src) - new /obj/item/clothing/suit/space/pirate(src) - new /obj/item/clothing/head/helmet/space/pirate(src) - new /obj/item/clothing/head/costume/pirate/armored(src) - new /obj/item/clothing/shoes/pirate/armored(src) - new /obj/item/clothing/glasses/eyepatch(src) - new /obj/item/radio/headset/syndicate/alt(src) - new /obj/item/card/id/advanced/chameleon(src) - -/datum/opposing_force_equipment/clothing_pirate/akula - name = "Azulean Boarder" - description = "Advanced Azulean pirate gear, akin to riot-armour yet space-proofed. Never take on an Azulean boarder in zero-gravity." - admin_note = "Uniquely spaceproofed." - item_type = /obj/item/storage/backpack/duffelbag/syndie/akula - -/obj/item/storage/backpack/duffelbag/syndie/akula/PopulateContents() - new /obj/item/clothing/under/skinsuit(src) - new /obj/item/clothing/suit/armor/riot/skinsuit_armor(src) - new /obj/item/clothing/head/helmet/space/skinsuit_helmet(src) - new /obj/item/clothing/gloves/tackler/combat(src) //tackles in space - new /obj/item/clothing/shoes/combat(src) - new /obj/item/storage/belt/military(src) - new /obj/item/radio/headset/syndicate/alt(src) - new /obj/item/card/id/advanced/chameleon(src) - -/datum/opposing_force_equipment/clothing_pirate/nri_soldier - name = "NRI Soldier" - description = "The station failed the inspection, now they have to deal with you." - item_type = /obj/item/storage/backpack/industrial/cin_surplus/forest/nri_soldier - -/obj/item/storage/backpack/industrial/cin_surplus/forest/nri_soldier/PopulateContents() - new /obj/item/clothing/under/syndicate/rus_army(src) - new /obj/item/clothing/shoes/combat(src) - new /obj/item/clothing/gloves/tackler/combat(src) - new /obj/item/clothing/mask/gas/hecu2(src) - new /obj/item/clothing/suit/armor/vest/marine(src) - new /obj/item/clothing/head/beret/sec/nri(src) - new /obj/item/storage/belt/military/nri/plus_mre(src) - new /obj/item/radio/headset/syndicate/alt(src) - new /obj/item/card/id/advanced/chameleon(src) - new /obj/item/clothing/glasses/sunglasses(src) - -/datum/opposing_force_equipment/clothing_pirate/heister - name = "Professional" - description = "It's payday." - admin_note = "Has uniquely strong armour." - item_type = /obj/item/storage/backpack/duffelbag/syndie/heister - -/obj/item/storage/backpack/duffelbag/syndie/heister/PopulateContents() - var/obj/item/clothing/new_mask = new /obj/item/clothing/mask/gas/clown_hat(src) //-animal mask +clow mask - new_mask.set_armor(new_mask.get_armor().generate_new_with_specific(list( - MELEE = 30, - BULLET = 25, - LASER = 25, - ENERGY = 25, - BOMB = 0, - BIO = 0, - FIRE = 100, - ACID = 100, - ))) - new /obj/item/storage/box/syndie_kit/space_suit(src) - new /obj/item/clothing/gloves/latex/nitrile/heister(src) - new /obj/item/clothing/under/suit/black(src) - new /obj/item/clothing/under/suit/black/skirt(src) - new /obj/item/clothing/neck/tie/red/hitman(src) - new /obj/item/clothing/shoes/laceup(src) - new /obj/item/clothing/suit/jacket/det_suit/noir/heister(src) - new /obj/item/clothing/glasses/sunglasses(src) - new /obj/item/radio/headset/syndicate/alt(src) - new /obj/item/card/id/advanced/chameleon(src) - new /obj/item/restraints/handcuffs/cable/zipties(src) - new /obj/item/restraints/handcuffs/cable/zipties(src) - - -/datum/opposing_force_equipment/clothing_magic - category = OPFOR_EQUIPMENT_CATEGORY_CLOTHING_MAGIC - -/datum/opposing_force_equipment/clothing_magic/wizard - name = "Wizard" - description = "Basic colored wizard attire." - item_type = /obj/item/storage/backpack/satchel/leather/wizard - -/obj/item/storage/backpack/satchel/leather/wizard/PopulateContents() - switch(pick(list("yellow", "blue", "red", "black"))) - if("yellow") - new /obj/item/clothing/head/wizard/yellow(src) - new /obj/item/clothing/suit/wizrobe/yellow(src) - if("blue") - new /obj/item/clothing/head/wizard(src) - new /obj/item/clothing/suit/wizrobe(src) - if("red") - new /obj/item/clothing/head/wizard/red(src) - new /obj/item/clothing/suit/wizrobe/red(src) - if("black") - new /obj/item/clothing/head/wizard/black(src) - new /obj/item/clothing/suit/wizrobe/black(src) - new /obj/item/staff(src) - new /obj/item/clothing/shoes/sandal/magic(src) - new /obj/item/radio/headset/syndicate/alt(src) - new /obj/item/card/id/advanced/chameleon(src) - -/datum/opposing_force_equipment/clothing_magic/wizard_broom - name = "Broom Wizard" - description = "A wizard with a broom, technically a witch." - item_type = /obj/item/storage/backpack/satchel/leather/wizard_broom - -/obj/item/storage/backpack/satchel/leather/wizard_broom/PopulateContents() - new /obj/item/clothing/suit/wizrobe/marisa(src) - new /obj/item/clothing/head/wizard/marisa(src) - new /obj/item/staff/broom(src) - new /obj/item/clothing/shoes/sneakers/marisa(src) - new /obj/item/radio/headset/syndicate/alt(src) - new /obj/item/card/id/advanced/chameleon(src) - -/datum/opposing_force_equipment/clothing_magic/wizard_tape - name = "Tape Wizard" - description = "A wizard outfit, but hand-crafted. Very nice." - item_type = /obj/item/storage/backpack/satchel/leather/wizard_tape - -/obj/item/storage/backpack/satchel/leather/wizard_tape/PopulateContents() - new /obj/item/clothing/suit/wizrobe/tape(src) - new /obj/item/clothing/head/wizard/tape(src) - new /obj/item/staff/tape(src) - new /obj/item/clothing/shoes/sandal/magic(src) - new /obj/item/radio/headset/syndicate/alt(src) - new /obj/item/card/id/advanced/chameleon(src) - -/datum/opposing_force_equipment/clothing_magic/zealot - name = "Zealot" - description = "Spell-casting is outlawed, not like that'll stop you though." - item_type = /obj/item/storage/backpack/satchel/leather/zealot - -/obj/item/storage/backpack/satchel/leather/zealot/PopulateContents() - new /obj/item/clothing/suit/hooded/cultrobes/eldritch(src) - new /obj/item/clothing/glasses/hud/health/night/cultblind_unrestricted(src) - new /obj/item/clothing/shoes/cult(src) - new /obj/item/radio/headset/syndicate/alt(src) - new /obj/item/card/id/advanced/chameleon(src) - -/datum/opposing_force_equipment/clothing_magic/narsian - name = "Nar'Sien Prophet" - description = "An overshadowed cult following, whom incidentally thrive best in the dark." - item_type = /obj/item/storage/backpack/satchel/leather/narsian - -/obj/item/storage/backpack/satchel/leather/narsian/PopulateContents() - new /obj/item/clothing/suit/hooded/cultrobes/hardened(src) - new /obj/item/clothing/head/hooded/cult_hoodie/hardened(src) - new /obj/item/clothing/glasses/hud/health/night/cultblind_unrestricted/narsie(src) - new /obj/item/clothing/shoes/cult/alt(src) - new /obj/item/bedsheet/cult(src) - new /obj/item/radio/headset/syndicate/alt(src) - new /obj/item/card/id/advanced/chameleon(src) - - diff --git a/modular_skyrat/modules/opposing_force/code/equipment/guns.dm b/modular_skyrat/modules/opposing_force/code/equipment/guns.dm deleted file mode 100644 index 98f0c8d29a0130..00000000000000 --- a/modular_skyrat/modules/opposing_force/code/equipment/guns.dm +++ /dev/null @@ -1,237 +0,0 @@ -/datum/opposing_force_equipment/ranged - category = OPFOR_EQUIPMENT_CATEGORY_RANGED - -/datum/opposing_force_equipment/ranged/renoster - name = "Renoster Shotgun" - description = "A twelve guage shotgun with an eight shell capacity underneath." - item_type = /obj/item/storage/toolbox/guncase/skyrat/opfor/renoster - -/obj/item/storage/toolbox/guncase/skyrat/opfor/renoster/PopulateContents() - new /obj/item/gun/ballistic/shotgun/riot/sol/evil(src) - new /obj/item/ammo_box/advanced/s12gauge/buckshot(src) - new /obj/item/ammo_box/advanced/s12gauge/buckshot(src) - -/datum/opposing_force_equipment/ranged/infanteria - name = "'d'Infanteria' Rifle" - description = "A heavy battle rifle, this one seems to be painted tacticool black. Accepts any standard SolFed rifle magazine." - item_type = /obj/item/storage/toolbox/guncase/skyrat/opfor/infanteria - -/obj/item/storage/toolbox/guncase/skyrat/opfor/infanteria/PopulateContents() - new /obj/item/gun/ballistic/automatic/sol_rifle/evil(src) - new /obj/item/ammo_box/magazine/c40sol_rifle/standard(src) - new /obj/item/ammo_box/magazine/c40sol_rifle/standard(src) - -/datum/opposing_force_equipment/ranged/sakhno - name = "Sakhno Precision Rifle" - description = "A Sakhno Precision Rifle, a bolt action weapon that was (and certainly still is) popular with frontiersmen, cargo runners, private security forces, explorers, and other unsavoury types. This particular pattern of the rifle dates back all the way to 2440." - item_type = /obj/item/storage/toolbox/guncase/skyrat/opfor/sakhno - -/obj/item/storage/toolbox/guncase/skyrat/opfor/sakhno/PopulateContents() - new /obj/item/gun/ballistic/rifle/boltaction(src) - new /obj/item/ammo_box/strilka310(src) - new /obj/item/ammo_box/strilka310(src) - -/datum/opposing_force_equipment/ranged/kiboko - name = "Kiboko Grenade Launcher" - description = "A unique grenade launcher firing .980 grenades. A laser sight system allows its user to specify a range for the grenades it fires to detonate at" - item_type = /obj/item/storage/toolbox/guncase/skyrat/opfor/kiboko - -/obj/item/storage/toolbox/guncase/skyrat/opfor/kiboko/PopulateContents() - new /obj/item/gun/ballistic/automatic/sol_grenade_launcher/evil(src) - new /obj/item/ammo_box/magazine/c980_grenade/drum(src) - new /obj/item/ammo_box/magazine/c980_grenade/drum(src) - -/datum/opposing_force_equipment/ranged/amr - name = "Tkach-Tsuneyo AMR" - description = "A massive, outdated beast of an anti materiel rifle that was once in use by CIN military forces. Fires the devastating .60 Strela caseless round, the massively overperforming penetration of which being the reason this weapon was discontinued." - item_type = /obj/item/storage/toolbox/guncase/skyrat/opfor/amr - -/obj/item/storage/toolbox/guncase/skyrat/opfor/amr/PopulateContents() - new /obj/item/gun/ballistic/automatic/cin_amr(src) - new /obj/item/ammo_box/magazine/cin_amr(src) - new /obj/item/ammo_box/magazine/cin_amr(src) - -/datum/opposing_force_equipment/ranged/lmg - name = "L6 SAW LMG" - description = "A heavily modified 7mm light machine gun, designated 'L6 SAW'. Has 'Aussec Armoury - 2531' engraved on the receiver below the designation." - item_type = /obj/item/storage/toolbox/guncase/skyrat/opfor/lmg - -/obj/item/storage/toolbox/guncase/skyrat/opfor/lmg/PopulateContents() - new /obj/item/gun/ballistic/automatic/l6_saw/unrestricted(src) - new /obj/item/ammo_box/magazine/m7mm(src) - new /obj/item/ammo_box/magazine/m7mm(src) - -//laser -/datum/opposing_force_equipment/ranged/ion - name = "ion carbine" - description = "The MK.II Prototype Ion Projector is a lightweight carbine version of the larger ion rifle, built to be ergonomic and efficient." - item_type = /obj/item/storage/toolbox/guncase/skyrat/opfor/ion - -/obj/item/storage/toolbox/guncase/skyrat/opfor/ion/PopulateContents() - new /obj/item/gun/energy/ionrifle/carbine(src) - new /obj/item/storage/box/syndie_kit/recharger(src) - -/datum/opposing_force_equipment/ranged/carbine - name = "laser carbine" - description = "A modified laser gun which can shoot far faster, but each shot is far less damaging." - item_type = /obj/item/storage/toolbox/guncase/skyrat/opfor/carbine - -/obj/item/storage/toolbox/guncase/skyrat/opfor/carbine/PopulateContents() - new /obj/item/gun/energy/laser/carbine(src) - new /obj/item/storage/box/syndie_kit/recharger(src) - -/datum/opposing_force_equipment/ranged/laser - name = "laser gun" - description = "A basic energy-based laser gun that fires concentrated beams of light which pass through glass and thin metal." - item_type = /obj/item/storage/toolbox/guncase/skyrat/opfor/laser - -/obj/item/storage/toolbox/guncase/skyrat/opfor/laser/PopulateContents() - new /obj/item/gun/energy/laser(src) - new /obj/item/storage/box/syndie_kit/recharger(src) - -//foamforce -/datum/opposing_force_equipment/ranged/foamforce_lmg - name = "Foamforce LMG" - description = "A heavily modified toy light machine gun, designated 'L6 SAW'. Ages 8 and up." - item_type = /obj/item/storage/toolbox/guncase/skyrat/opfor/foamforce_lmg - -/obj/item/storage/toolbox/guncase/skyrat/opfor/foamforce_lmg/PopulateContents() - new /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted/riot(src) - new /obj/item/ammo_box/magazine/toy/m762/riot(src) - new /obj/item/ammo_box/magazine/toy/m762/riot(src) - - -/datum/opposing_force_equipment/ranged_stealth - category = OPFOR_EQUIPMENT_CATEGORY_RANGED_STEALTH - -/datum/opposing_force_equipment/ranged_stealth/rapid_syringe - name = "Compact Rapid Syringe Gun" - description = "A modification of the syringe gun design to be more compact and use a rotating cylinder to store up to six syringes." - item_type = /obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/rapid_syringe - -/obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/rapid_syringe/PopulateContents() - new /obj/item/gun/syringe/rapidsyringe(src) - new /obj/item/storage/belt/medbandolier(src) - new /obj/item/reagent_containers/syringe/piercing(src) - new /obj/item/reagent_containers/syringe/piercing(src) - new /obj/item/reagent_containers/syringe/piercing(src) - new /obj/item/reagent_containers/syringe/piercing(src) - -/datum/opposing_force_equipment/ranged_stealth/c20r - name = "C-20r SMG" - description = "A bullpup three-round burst .45 SMG, designated 'C-20r'. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp." - item_type = /obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/c20r - -/obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/c20r/PopulateContents() - new /obj/item/gun/ballistic/automatic/c20r/unrestricted(src) - new /obj/item/ammo_box/magazine/smgm45(src) - new /obj/item/ammo_box/magazine/smgm45(src) - -/datum/opposing_force_equipment/ranged_stealth/sindano - name = "Sindano SMG" - description = "A small submachinegun, this one is painted in tacticool black. Accepts any standard Sol pistol magazine." - item_type = /obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/sindano - -/obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/sindano/PopulateContents() - new /obj/item/gun/ballistic/automatic/sol_smg/evil(src) - new /obj/item/ammo_box/magazine/c35sol_pistol/stendo(src) - new /obj/item/ammo_box/magazine/c35sol_pistol/stendo(src) - -/datum/opposing_force_equipment/ranged_stealth/wespe - name = "Wespe Pistol" - description = "The standard issue service pistol of SolFed's various military branches. Comes with attached light." - item_type = /obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/wespe - -/obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/wespe/PopulateContents() - new /obj/item/gun/ballistic/automatic/pistol/sol/evil(src) - new /obj/item/ammo_box/magazine/c35sol_pistol(src) - new /obj/item/ammo_box/magazine/c35sol_pistol(src) - -/datum/opposing_force_equipment/ranged_stealth/makarov - name = "Makarov Pistol" - description = "A small, easily concealable 9x25mm Mk.12 handgun. This one is packed with a suppressor." - item_type = /obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/makarov - -/obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/makarov/PopulateContents() - new /obj/item/gun/ballistic/automatic/pistol(src) - new /obj/item/suppressor(src) - new /obj/item/ammo_box/magazine/m9mm(src) - new /obj/item/ammo_box/magazine/m9mm(src) - -/datum/opposing_force_equipment/ranged_stealth/m1911 - name = "M1911 Pistol" - description = "A classic .45 handgun with a small magazine capacity." - item_type = /obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/m1911 - -/obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/m1911/PopulateContents() - new /obj/item/gun/ballistic/automatic/pistol/m1911(src) - new /obj/item/ammo_box/magazine/m45(src) - new /obj/item/ammo_box/magazine/m45(src) - -/datum/opposing_force_equipment/ranged_stealth/nri_pistol - name = "Szabo-Ivanek Pistol" - description = "A mass produced NRI-made modified reproduction of the Wespe line of handguns rechambered in 9×25mm.'PATRIOT DEFENSE SYSTEMS' is inscribed on the receiver, indicating it's been made with a plasteel printer." - item_type = /obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/nri_pistol - -/obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/nri_pistol/PopulateContents() - new /obj/item/gun/ballistic/automatic/pistol/nri(src) - new /obj/item/ammo_box/magazine/m9mm_aps(src) - new /obj/item/ammo_box/magazine/m9mm_aps(src) - -/datum/opposing_force_equipment/ranged_stealth/syndie_revolver - name = "Syndicate Revolver" - description = "A modernized 7 round revolver manufactured by Scarborough." - item_type = /obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/syndie_revolver - -/obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/syndie_revolver/PopulateContents() - new /obj/item/gun/ballistic/revolver/syndicate(src) - new /obj/item/ammo_box/a357(src) - new /obj/item/ammo_box/a357(src) - -/datum/opposing_force_equipment/ranged_stealth/ocelot - name = "Colt Peacemaker revolver" - admin_note = "Is packed with peacemaker .357, which deals significantly less damage but has a cool ricochet!" - description = "A modified Peacemaker revolver that chambers .357 ammo. Less powerful than the regular .357, but ricochets a lot more." - item_type = /obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/ocelot - -/obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/ocelot/PopulateContents() - new /obj/item/gun/ballistic/revolver/ocelot(src) - new /obj/item/ammo_box/a357/peacemaker(src) - new /obj/item/ammo_box/a357/peacemaker(src) - -//foamforce -/datum/opposing_force_equipment/ranged_stealth/foamforce_smg - name = "Donksoft SMG" - description = "A bullpup three-round burst toy SMG, designated 'C-20r'. Ages 8 and up." - item_type = /obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/foamforce_smg - -/obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/foamforce_smg/PopulateContents() - new /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot(src) - new /obj/item/ammo_box/magazine/toy/smgm45/riot(src) - new /obj/item/ammo_box/magazine/toy/smgm45/riot(src) - -/datum/opposing_force_equipment/ranged_stealth/foamforce_smg_basic - name = "Foamforce SMG" - description = "A prototype three-round burst toy submachine gun. Ages 8 and up." - item_type = /obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/foamforce_smg_basic - -/obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/foamforce_smg_basic/PopulateContents() - new /obj/item/gun/ballistic/automatic/toy/unrestricted(src) - new /obj/item/ammo_box/magazine/toy/smg(src) - new /obj/item/ammo_box/magazine/toy/smg(src) - -//laser -/datum/opposing_force_equipment/ranged_stealth/egun_mini - item_type = /obj/item/gun/energy/recharge/fisher - -/datum/opposing_force_equipment/ranged_stealth/ebow - item_type = /obj/item/gun/energy/recharge/ebow - -/datum/opposing_force_equipment/ranged_stealth/egun_mini - name = "miniature energy gun" - description = "A small, pistol-sized energy gun with a built-in flashlight. It has two settings: disable and kill." - item_type = /obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/egun_mini - -/obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/egun_mini/PopulateContents() - new /obj/item/gun/energy/e_gun/mini(src) - new /obj/item/storage/box/syndie_kit/recharger(src) diff --git a/modular_skyrat/modules/opposing_force/code/equipment/implants.dm b/modular_skyrat/modules/opposing_force/code/equipment/implants.dm deleted file mode 100644 index 9fca6380beb558..00000000000000 --- a/modular_skyrat/modules/opposing_force/code/equipment/implants.dm +++ /dev/null @@ -1,137 +0,0 @@ -/datum/opposing_force_equipment/implants - category = OPFOR_EQUIPMENT_CATEGORY_IMPLANTS - -//Skillchips -/datum/opposing_force_equipment/implants/engichip - item_type = /obj/item/skillchip/job/engineer - description = "A skillchip that, when installed, allows the user to recognise airlock and APC wire layouts and understand their functionality at a glance. Highly valuable and sought after." - -/datum/opposing_force_equipment/implants/roboticist - item_type = /obj/item/skillchip/job/roboticist - description = "A skillchip that, when installed, allows the user to recognise cyborg wire layouts and understand their functionality at a glance." - -/datum/opposing_force_equipment/implants/tacticool - item_type = /obj/item/skillchip/chameleon/reload - -//Implants -/datum/opposing_force_equipment/implants/nodrop - item_type = /obj/item/autosurgeon/syndicate/nodrop - name = "Anti Drop Implant" - admin_note = "Allows the user to tighten their grip, their held items unable to be dropped by any cause. Hardstuns user for a longtime if hit with EMP." - description = "An implant that prevents you from dropping items in your hand involuntarily. Comes loaded in a syndicate autosurgeon." - -/datum/opposing_force_equipment/implants/hackerman - item_type = /obj/item/autosurgeon/syndicate/hackerman - name = "Hacking Arm Implant" - admin_note = "A simple tool arm, except it identifies all wire functions when hacking." - description = "An advanced arm implant that comes with cutting edge hacking tools. Perfect for the cybernetically enhanced wirerunners." - -/datum/opposing_force_equipment/implants/cns - name = "CNS Rebooter Implant" - item_type = /obj/item/autosurgeon/syndicate/anti_stun - description = "This implant will automatically give you back control over your central nervous system, reducing downtime when stunned." - -/datum/opposing_force_equipment/implants/reviver - name = "Reviver Implant" - item_type = /obj/item/autosurgeon/syndicate/reviver - description = "This implant will attempt to revive and heal you if you lose consciousness. For the faint of heart!" - -/datum/opposing_force_equipment/implants/sad_trombone - name = "Sad Trombone Implant" - item_type = /obj/item/implanter/sad_trombone - -/datum/opposing_force_equipment/implants/toolarm - name = "Tool Arm Implant" - admin_note = "Force 20 implanted combat knife on emag." - item_type = /obj/item/autosurgeon/toolset - -/datum/opposing_force_equipment/implants/surgery - name = "Surgery Arm Implant" - admin_note = "Force 20 implanted combat knife on emag." - item_type = /obj/item/autosurgeon/surgery - -/datum/opposing_force_equipment/implants/botany - name = "Botany Arm Implant" - admin_note = "Chainsaw arm on emag." - item_type = /obj/item/autosurgeon/botany - -/datum/opposing_force_equipment/implants/janitor - name = "Janitor Arm Implant" - item_type = /obj/item/autosurgeon/janitor - -/datum/opposing_force_equipment/implants/armblade - name = "Blade Arm Implant" - admin_note = "Force 30 IF emagged." - item_type = /obj/item/autosurgeon/armblade - -/datum/opposing_force_equipment/implants/muscle - name = "Muscle Arm Implant" - item_type = /obj/item/autosurgeon/muscle - -/datum/opposing_force_equipment/implants_illegal - category = OPFOR_EQUIPMENT_CATEGORY_IMPLANTS_ILLEGAL - -/datum/opposing_force_equipment/implants_illegal/stealth - name = "Stealth Implant" - item_type = /obj/item/implanter/stealth - admin_note = "Allows the user to become completely invisible as long as they remain inside a cardboard box." - description = "An implanter that grants you the ability to wield the ultimate in invisible box technology. Best used in conjunction with a tape recorder playing Snake Eater." - -/datum/opposing_force_equipment/implants_illegal/radio - name = "Syndicate Radio Implant" - item_type = /obj/item/implanter/radio/syndicate - description = "An implanter that grants you inherent access to the Syndicate radio channel, in addition to being able to listen to all on-station channels." - -/datum/opposing_force_equipment/implants_illegal/storage - name = "Storage Implant" - item_type = /obj/item/implanter/storage - admin_note = "Allows user to stow items without any sign of having a storage item." - description = "An implanter that grants you access to a small pocket of bluespace, capable of storing a few items." - -/datum/opposing_force_equipment/implants_illegal/freedom - name = "Freedom Implant" - item_type = /obj/item/implanter/freedom - admin_note = "Allows the user to break handcuffs or e-snares four times, after it will run out and become useless." - description = "An implanter that grants you the ability to break out of handcuffs a certain number of times." - -/datum/opposing_force_equipment/implants_illegal/micro - name = "Microbomb Implant" - admin_note = "RRs the user." - item_type = /obj/item/implanter/explosive - description = "An implanter that will make you explode on death in a decent-sized explosion." - -/datum/opposing_force_equipment/implants_illegal/emp - name = "EMP Implant" - item_type = /obj/item/implanter/emp - admin_note = "Gives the user a big EMP on an action button. Has three uses after which it becomes useless." - description = "An implanter that grants you the ability to create several EMP pulses, centered on you." - -/datum/opposing_force_equipment/implants_illegal/xray - name = "X-Ray Eyes" - item_type = /obj/item/autosurgeon/syndicate/xray_eyes - description = "These cybernetic eyes will give you X-ray vision. Blinking is futile." - -/datum/opposing_force_equipment/implants_illegal/thermal - name = "Thermal Eyes" - item_type = /obj/item/autosurgeon/syndicate/thermal_eyes - description = "These cybernetic eye implants will give you thermal vision. Vertical slit pupil included." - -/datum/opposing_force_equipment/implants_illegal/armlaser - name = "Arm-mounted Laser Implant" - item_type = /obj/item/autosurgeon/syndicate/laser_arm - admin_note = "A basic laser gun, but no-drop." - description = "A variant of the arm cannon implant that fires lethal laser beams. The cannon emerges from the subject's arm and remains inside when not in use." - -/datum/opposing_force_equipment/implants_illegal/eswordarm - name = "Energy Sword Arm Implant" - item_type = /obj/item/autosurgeon/syndicate/esword_arm - admin_note = "Force 30 no-drop, extremely robust." - description = "It's an energy sword, in your arm. Pretty decent for getting past stop-searches and assassinating people. Comes loaded in a Syndicate brand autosurgeon to boot!" - -/datum/opposing_force_equipment/implants_illegal/baton - name = "Baton Arm Implant" - item_type = /obj/item/autosurgeon/syndicate/baton - -/datum/opposing_force_equipment/implants_illegal/flash - name = "Flash Arm Implant" - item_type = /obj/item/autosurgeon/syndicate/flash diff --git a/modular_skyrat/modules/opposing_force/code/equipment/melee.dm b/modular_skyrat/modules/opposing_force/code/equipment/melee.dm deleted file mode 100644 index ba7657911f0453..00000000000000 --- a/modular_skyrat/modules/opposing_force/code/equipment/melee.dm +++ /dev/null @@ -1,105 +0,0 @@ -/datum/opposing_force_equipment/melee - category = OPFOR_EQUIPMENT_CATEGORY_MELEE - -/datum/opposing_force_equipment/melee/sabre - name = "Officer's Sabre" - description = "An elegant weapon, its monomolecular edge is capable of cutting through flesh and bone with ease." - item_type = /obj/item/storage/belt/sabre - -/datum/opposing_force_equipment/melee/katana - item_type = /obj/item/katana - description = "An extremely sharp and robust sword folded over nine thousand times until perfection. Highly lethal and illegal." - admin_note = "WARNING: 40 force, 50% blockchance, very powerful." - -/datum/opposing_force_equipment/melee/ekatana - item_type = /obj/item/energy_katana - description = "An energy katana seized from a dead Spider Clan ninja. As well as being highly robust, it allows the \ - user to teleport short distances using right-click." - -/datum/opposing_force_equipment/melee/esword - item_type = /obj/item/melee/energy/sword - description = "The energy sword is an edged weapon with a blade of pure energy. The sword is small enough to be pocketed when inactive. Activating it produces a loud, distinctive noise." - -/datum/opposing_force_equipment/melee/desword - item_type = /obj/item/dualsaber - -/datum/opposing_force_equipment/melee/eshield - item_type = /obj/item/shield/energy - -/datum/opposing_force_equipment/melee/ebanana - item_type = /obj/item/melee/energy/sword/bananium - -/datum/opposing_force_equipment/melee/eshield_banana - item_type = /obj/item/shield/energy/bananium - -/datum/opposing_force_equipment/melee/epirate - item_type = /obj/item/melee/energy/sword/pirate - description = "A variant of the energy sword styled as a cutlass. Pirate costume sold separately. Warranty void if bought." - -/datum/opposing_force_equipment/melee/metalbat - item_type = /obj/item/melee/baseball_bat/ablative - description = "A highly reflective baseball bat for when you need to crack skulls and run away from security in the same night. Can reflect lasers." - admin_note = "WARNING: Notably strong on sec not using ballistics." - -/datum/opposing_force_equipment/melee/powerfist - item_type = /obj/item/melee/powerfist - name = "Power Fist" - description = "The power-fist is a metal gauntlet with a built-in piston-ram powered by an external gas supply.\ - Upon hitting a target, the piston-ram will extend forward to make contact for some serious damage. \ - Using a wrench on the piston valve will allow you to tweak the amount of gas used per punch to \ - deal extra damage and hit targets further. Use a screwdriver to take out any attached tanks." - -/datum/opposing_force_equipment/melee/cultblade - item_type = /obj/item/melee/cultblade - -/datum/opposing_force_equipment/melee/meathook - name = "Butcher's Meat Hook" - item_type = /obj/item/gun/magic/hook - description = "A brutal cleaver on a long chain, it allows you to pull people to your location." - -/datum/opposing_force_equipment/melee/cutlass - item_type = /obj/item/claymore/cutlass - -/datum/opposing_force_equipment/melee/mace - item_type = /obj/item/melee/cleric_mace - -/datum/opposing_force_equipment/melee/claymore - item_type = /obj/item/claymore - description = "An extremely sharp and robust sword perfect to cleave through any opposition. Also highly illegal." - admin_note = "WARNING: 30 force, 35 armor pen." - - -/datum/opposing_force_equipment/melee_stealth - category = OPFOR_EQUIPMENT_CATEGORY_MELEE_STEALTH - -/datum/opposing_force_equipment/melee_stealth/contractorbaton - item_type = /obj/item/melee/baton/telescopic/contractor_baton - -/datum/opposing_force_equipment/melee_stealth/switchblade - item_type = /obj/item/switchblade - -/datum/opposing_force_equipment/melee_stealth/combat_knife - item_type = /obj/item/knife/combat - -/datum/opposing_force_equipment/melee_stealth/edagger - item_type = /obj/item/pen/edagger - name = "Energy Dagger" - description = "A dagger made of energy that looks and functions as a pen when off." - -/datum/opposing_force_equipment/melee_stealth/telescopic - item_type = /obj/item/melee/baton/telescopic - -/datum/opposing_force_equipment/melee_stealth/telescopicshield - item_type = /obj/item/shield/riot/tele - -/datum/opposing_force_equipment/melee_stealth/cultdagger - item_type = /obj/item/melee/cultblade/dagger - -/datum/opposing_force_equipment/melee_stealth/sicklyblade - item_type = /obj/item/melee/sickly_blade - -/datum/opposing_force_equipment/melee_stealth/northstar - item_type = /obj/item/clothing/gloves/rapid - description = "By putting on these gloves, you will find you can punch things at vastly increased speed." - admin_note = "WARNING: Be very mindful if passing these out with sleeping-carp, as the duo are extremely strong together." - diff --git a/modular_skyrat/modules/organs/code/liver.dm b/modular_skyrat/modules/organs/code/liver.dm deleted file mode 100644 index 1fe231786eaaf7..00000000000000 --- a/modular_skyrat/modules/organs/code/liver.dm +++ /dev/null @@ -1,6 +0,0 @@ -/obj/item/organ/internal/liver/snail - name = "gastropod liver" - icon_state = "liver-x" - desc = "Due to snailfolk evolving in typically poisonous environments such as bogs, their liver has a higher tolerance for poisons compared to most." - maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD - toxTolerance = 5 //can shrug off up to 5u of toxins diff --git a/modular_skyrat/modules/organs/code/lungs.dm b/modular_skyrat/modules/organs/code/lungs.dm deleted file mode 100644 index ff5e7ff718505d..00000000000000 --- a/modular_skyrat/modules/organs/code/lungs.dm +++ /dev/null @@ -1,98 +0,0 @@ -/obj/item/organ/internal/lungs/cold - name = "cold-adapted lungs" - icon = 'modular_skyrat/modules/organs/icons/lungs.dmi' - desc = "A set of lungs adapted to low temperatures, though they are more susceptible to high temperatures" - icon_state = "lungs_cold" - cold_message = "a slightly painful, though bearable, cold sensation" - cold_level_1_threshold = 208 - cold_level_2_threshold = 200 - cold_level_3_threshold = 170 - cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_1 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead. - cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_1 - cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_2 - cold_damage_type = BURN - - hot_message = "the searing heat with every breath you take" - heat_level_1_threshold = 318 - heat_level_2_threshold = 348 - heat_level_3_threshold = 1000 - heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_2 - heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_2 - heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_3 - heat_damage_type = BURN - - -/obj/item/organ/internal/lungs/hot - name = "heat-adapted lungs" - icon = 'modular_skyrat/modules/organs/icons/lungs.dmi' - desc = "A set of lungs adapted to high temperatures, though they are more susceptible to low temperatures" - icon_state = "lungs_heat" - cold_message = "the freezing cold with every breath you take" - cold_level_1_threshold = 248 - cold_level_2_threshold = 220 - cold_level_3_threshold = 170 - cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_2 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead. - cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_2 - cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_3 - cold_damage_type = BURN - - hot_message = "a slightly painful, though bearable, warmth" - heat_level_1_threshold = 373 - heat_level_2_threshold = 473 - heat_level_3_threshold = 523 - heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_1 - heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_1 - heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_2 - heat_damage_type = BURN - -/obj/item/organ/internal/lungs/toxin - name = "toxin-adapted lungs" - icon = 'modular_skyrat/modules/organs/icons/lungs.dmi' - desc = "A set of lungs adapted to toxic environments, though more susceptible to extreme temperatures." - icon_state = "lungs_toxin" - safe_plasma_max = 27 - safe_co2_max = 27 - - cold_message = "the freezing cold with every breath you take" - cold_level_1_threshold = 248 - cold_level_2_threshold = 220 - cold_level_3_threshold = 170 - cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_2 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead. - cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_2 - cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_3 - cold_damage_type = BRUTE - - - hot_message = "the searing heat with every breath you take" - heat_level_1_threshold = 318 - heat_level_2_threshold = 348 - heat_level_3_threshold = 1000 - heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_2 - heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_2 - heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_3 - heat_damage_type = BURN - -/obj/item/organ/internal/lungs/oxy - name = "low-oxygen-adapted lungs" - icon = 'modular_skyrat/modules/organs/icons/lungs.dmi' - desc = "A set of lungs adapted to lower-pressure environments, though more susceptible to extreme temperatures." - icon_state = "lungs_toxin" - safe_oxygen_min = 5 - - hot_message = "the searing heat with every breath you take" - heat_level_1_threshold = 318 - heat_level_2_threshold = 348 - heat_level_3_threshold = 1000 - heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_2 - heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_2 - heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_3 - heat_damage_type = BURN - - cold_message = "the freezing cold with every breath you take" - cold_level_1_threshold = 248 - cold_level_2_threshold = 220 - cold_level_3_threshold = 170 - cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_2 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead. - cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_2 - cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_3 - cold_damage_type = BURN diff --git a/modular_skyrat/modules/organs/code/stomach.dm b/modular_skyrat/modules/organs/code/stomach.dm deleted file mode 100644 index 366c8d17355f9b..00000000000000 --- a/modular_skyrat/modules/organs/code/stomach.dm +++ /dev/null @@ -1,7 +0,0 @@ -/obj/item/organ/internal/stomach/oversized - name = "huge guts" - desc = "Typically found in huge creatures, this monstrous engine has developed to be highly efficient, made to get an enormous amount of nutrients to an enormous eater." - icon = 'modular_skyrat/modules/organs/icons/stomach.dmi' - icon_state = "stomach_big" - maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD - metabolism_efficiency = 0.07 diff --git a/modular_skyrat/modules/organs/code/tongue.dm b/modular_skyrat/modules/organs/code/tongue.dm deleted file mode 100644 index 54ef552356b4a5..00000000000000 --- a/modular_skyrat/modules/organs/code/tongue.dm +++ /dev/null @@ -1,90 +0,0 @@ -/obj/item/organ/internal/tongue/copy_traits_from(obj/item/organ/internal/tongue/old_tongue, copy_actions = FALSE) - . = ..() - // make sure we get food preferences too, because those are now tied to tongues for some reason - liked_foodtypes = old_tongue.liked_foodtypes - disliked_foodtypes = old_tongue.disliked_foodtypes - toxic_foodtypes = old_tongue.toxic_foodtypes - -/obj/item/organ/internal/tongue/dog - name = "long tongue" - desc = "A long and wet tongue. It seems to jump when it's called good, oddly enough." - say_mod = "woofs" - icon_state = "tongue" - modifies_speech = TRUE - -/obj/item/organ/internal/tongue/dog/Insert(mob/living/carbon/signer, special = FALSE, drop_if_replaced = TRUE) - . = ..() - signer.verb_ask = "arfs" - signer.verb_exclaim = "wans" - signer.verb_whisper = "whimpers" - signer.verb_yell = "barks" - -/obj/item/organ/internal/tongue/dog/Remove(mob/living/carbon/speaker, special = FALSE) - ..() - speaker.verb_ask = initial(verb_ask) - speaker.verb_exclaim = initial(verb_exclaim) - speaker.verb_whisper = initial(verb_whisper) - speaker.verb_sing = initial(verb_sing) - speaker.verb_yell = initial(verb_yell) - -/// This "human" tongue is only used in Character Preferences / Augmentation menu. -/// The base tongue class lacked a say_mod. With say_mod included it makes a non-Human user sound like a Human. -/obj/item/organ/internal/tongue/human - say_mod = "says" - -/obj/item/organ/internal/tongue/cybernetic - name = "cybernetic tongue" - icon = 'modular_skyrat/modules/organs/icons/cyber_tongue.dmi' - icon_state = "cybertongue" - desc = "A fully-functional synthetic tongue, encased in soft silicone. Features include high-resolution vocals and taste receptors." - organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES - say_mod = "says" - // Not as good as organic tongues, not as bad as the robotic voicebox. - taste_sensitivity = 20 - -/obj/item/organ/internal/tongue/vox - name = "vox tongue" - desc = "A fleshy muscle mostly used for skreeing." - say_mod = "skrees" - liked_foodtypes = MEAT | FRIED - -/obj/item/organ/internal/tongue/dwarven - name = "dwarven tongue" - desc = "A fleshy muscle mostly used for bellowing." - say_mod = "bellows" - liked_foodtypes = ALCOHOL | MEAT | DAIRY //Dwarves like alcohol, meat, and dairy products. - disliked_foodtypes = JUNKFOOD | FRIED | CLOTH //Dwarves hate foods that have no nutrition other than alcohol. - -/obj/item/organ/internal/tongue/ghoul - name = "ghoulish tongue" - desc = "A fleshy muscle mostly used for rasping." - say_mod = "rasps" - liked_foodtypes = RAW | MEAT - disliked_foodtypes = VEGETABLES | FRUIT | CLOTH - toxic_foodtypes = DAIRY | PINEAPPLE - -/obj/item/organ/internal/tongue/insect - name = "insect tongue" - desc = "A fleshy muscle mostly used for chittering." - say_mod = "chitters" - liked_foodtypes = GROSS | RAW | TOXIC | GORE - disliked_foodtypes = CLOTH | GRAIN | FRIED - toxic_foodtypes = DAIRY - -/obj/item/organ/internal/tongue/xeno_hybrid - name = "alien tongue" - desc = "According to leading xenobiologists the evolutionary benefit of having a second mouth in your mouth is \"that it looks badass\"." - icon_state = "tonguexeno" - say_mod = "hisses" - taste_sensitivity = 10 - liked_foodtypes = MEAT - -/obj/item/organ/internal/tongue/xeno_hybrid/Initialize(mapload) - . = ..() - var/obj/item/organ/internal/tongue/alien/alien_tongue_type = /obj/item/organ/internal/tongue/alien - voice_filter = initial(alien_tongue_type.voice_filter) - -/obj/item/organ/internal/tongue/skrell - name = "skrell tongue" - desc = "A fleshy muscle mostly used for warbling." - say_mod = "warbles" diff --git a/modular_skyrat/modules/organs/icons/stomach.dmi b/modular_skyrat/modules/organs/icons/stomach.dmi deleted file mode 100644 index 2b1ccf4be5b85f..00000000000000 Binary files a/modular_skyrat/modules/organs/icons/stomach.dmi and /dev/null differ diff --git a/modular_skyrat/modules/oversized/code/oversized_quirk.dm b/modular_skyrat/modules/oversized/code/oversized_quirk.dm deleted file mode 100644 index 7fce40299d9935..00000000000000 --- a/modular_skyrat/modules/oversized/code/oversized_quirk.dm +++ /dev/null @@ -1,73 +0,0 @@ -#define OVERSIZED_SPEED_SLOWDOWN 0.5 -#define OVERSIZED_HUNGER_MOD 1.5 - -// Before making any changes to oversized, please see the module's readme.md file - -/datum/quirk/oversized - name = "Oversized" - desc = "You, for whatever reason, are FAR too tall, and will encounter some rough situations because of it." - gain_text = span_notice("That airlock looks small...") - lose_text = span_notice("Is it still the same size...?") //Lol - medical_record_text = "Patient is abnormally tall." - value = 0 - mob_trait = TRAIT_OVERSIZED - icon = FA_ICON_EXPAND_ARROWS_ALT - veteran_only = TRUE - quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE - -/datum/quirk/oversized/add(client/client_source) - var/mob/living/carbon/human/human_holder = quirk_holder - human_holder.dna.features["body_size"] = 2 - human_holder.maptext_height = 32 * human_holder.dna.features["body_size"] //Adjust runechat height - human_holder.dna.update_body_size() - human_holder.mob_size = MOB_SIZE_LARGE - var/obj/item/bodypart/arm/left/left_arm = human_holder.get_bodypart(BODY_ZONE_L_ARM) - if(left_arm) - left_arm.unarmed_damage_low += OVERSIZED_HARM_DAMAGE_BONUS - left_arm.unarmed_damage_high += OVERSIZED_HARM_DAMAGE_BONUS - - var/obj/item/bodypart/arm/right/right_arm = human_holder.get_bodypart(BODY_ZONE_R_ARM) - if(right_arm) - right_arm.unarmed_damage_low += OVERSIZED_HARM_DAMAGE_BONUS - right_arm.unarmed_damage_high += OVERSIZED_HARM_DAMAGE_BONUS - - human_holder.blood_volume_normal = BLOOD_VOLUME_OVERSIZED - human_holder.physiology.hunger_mod *= OVERSIZED_HUNGER_MOD //50% hungrier - human_holder.add_movespeed_modifier(/datum/movespeed_modifier/oversized) - var/obj/item/organ/internal/stomach/old_stomach = human_holder.get_organ_slot(ORGAN_SLOT_STOMACH) - if(!istype(old_stomach)) - return - old_stomach.Remove(human_holder, special = TRUE) - qdel(old_stomach) - var/obj/item/organ/internal/stomach/oversized/new_stomach = new //YOU LOOK HUGE, THAT MUST MEAN YOU HAVE HUGE GUTS! RIP AND TEAR YOUR HUGE GUTS! - new_stomach.Insert(human_holder, special = TRUE) - to_chat(human_holder, span_warning("You feel your massive stomach rumble!")) - -/datum/quirk/oversized/remove() - var/mob/living/carbon/human/human_holder = quirk_holder - human_holder.dna.features["body_size"] = human_holder?.client?.prefs ?human_holder?.client?.prefs?.read_preference(/datum/preference/numeric/body_size) : 1 - human_holder.maptext_height = 32 * human_holder.dna.features["body_size"] - human_holder.dna.update_body_size() - human_holder.mob_size = MOB_SIZE_HUMAN - - var/obj/item/bodypart/arm/left/left_arm = human_holder.get_bodypart(BODY_ZONE_L_ARM) - if(left_arm) - left_arm.unarmed_damage_low -= OVERSIZED_HARM_DAMAGE_BONUS - left_arm.unarmed_damage_high -= OVERSIZED_HARM_DAMAGE_BONUS - - var/obj/item/bodypart/arm/right/right_arm = human_holder.get_bodypart(BODY_ZONE_R_ARM) - if(right_arm) - right_arm.unarmed_damage_low -= OVERSIZED_HARM_DAMAGE_BONUS - right_arm.unarmed_damage_high -= OVERSIZED_HARM_DAMAGE_BONUS - - human_holder.blood_volume_normal = BLOOD_VOLUME_NORMAL - human_holder.physiology.hunger_mod /= OVERSIZED_HUNGER_MOD - human_holder.remove_movespeed_modifier(/datum/movespeed_modifier/oversized) - - -/datum/movespeed_modifier/oversized - multiplicative_slowdown = OVERSIZED_SPEED_SLOWDOWN - - -#undef OVERSIZED_HUNGER_MOD -#undef OVERSIZED_SPEED_SLOWDOWN diff --git a/modular_skyrat/modules/pixel_shift/readme.md b/modular_skyrat/modules/pixel_shift/readme.md deleted file mode 100644 index 296058a4141aab..00000000000000 --- a/modular_skyrat/modules/pixel_shift/readme.md +++ /dev/null @@ -1,34 +0,0 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/870 - -## Title: Pixel shifting for RP positioning - -MODULE ID: PIXEL_SHIFT - -### Description: - -Adds the ability for living mobs to shift their sprite to fit an RP situation better (standing against a wall for example). Not appended to proc due to it being a busy proc - -### TG Proc/File Changes: - -- N/A - -### Modular Overrides: - -- `modular_skyrat/master_files/code/datums/keybinding/mob.dm`: `var/list/hotkey_keys` -- `modular_skyrat/master_files/code/modules/mob/living/living.dm`: `proc/set_pull_offsets`, `proc/reset_pull_offsets` -- `modular_skyrat/master_files/code/modules/mob/living/living_movement.dm`: `proc/CanAllowThrough` - -### Defines: - -- `code/__DEFINES/~skyrat_defines/keybindings.dm`: `COMSIG_KB_MOB_PIXEL_SHIFT_DOWN`, `COMSIG_KB_MOB_PIXEL_SHIFT_UP` -- `code/__DEFINES/~skyrat_defines/living.dm`: `COMSIG_LIVING_SET_PULL_OFFSET`, `COMSIG_LIVING_RESET_PULL_OFFSETS`, `COMSIG_LIVING_CAN_ALLOW_THROUGH`, `COMPONENT_LIVING_PASSABLE` - -### Included files that are not contained in this module: - -- N/A - -### Credits: - -Azarak - Porting -Gandalf2k15 - Refactoring -Larentoun - Moved to Component diff --git a/modular_skyrat/modules/poly_commands/parrot.dm b/modular_skyrat/modules/poly_commands/parrot.dm deleted file mode 100644 index f522edf7da11bf..00000000000000 --- a/modular_skyrat/modules/poly_commands/parrot.dm +++ /dev/null @@ -1,95 +0,0 @@ -#define PARROT_PERCH (1<<0) //Sitting/sleeping, not moving -#define PARROT_SWOOP (1<<1) //Moving towards or away from a target -#define PARROT_WANDER (1<<2) //Moving without a specific target in mind - -/* -* Parrot commands: Made modular -*/ - -/mob/living/simple_animal/parrot - /// Whether the parrot is on a human's shoulder or not - var/buckled_to_human = FALSE - -/mob/living/simple_animal/parrot/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans, list/message_mods = list(), message_range) - . = ..() - if(check_command(raw_message, speaker)) - return - if(speaker != src && prob(50)) //Dont imitate ourselves - if(!radio_freq || prob(10)) - if(speech_buffer.len >= 500) - speech_buffer -= pick(speech_buffer) - speech_buffer |= html_decode(raw_message) - if(speaker == src && !client) //If a parrot squawks in the woods and no one is around to hear it, does it make a sound? This code says yes! - return raw_message - -/mob/living/simple_animal/parrot/proc/perch_on_human(mob/living/carbon/human/human_target) - if(!human_target) - return - forceMove(get_turf(human_target)) - if(human_target.buckle_mob(src, TRUE)) - pixel_y = 9 - pixel_x = pick(-8,8) //pick left or right shoulder - icon_state = icon_sit - parrot_state = PARROT_PERCH - buckled_to_human = TRUE - to_chat(src, span_notice("You sit on [human_target]'s shoulder.")) - -/* -* Parrot commands: new code -*/ - -/mob/living/simple_animal/parrot/proc/check_command() - return FALSE // Simply return false for non-Poly parrots - -/mob/living/simple_animal/parrot/poly/check_command(message, speaker) - var/mob/living/carbon/human/human_target = speaker - if(!istype(human_target)) - return FALSE - if(!(human_target.mind?.assigned_role.title == JOB_CHIEF_ENGINEER)) - return FALSE - if(!(findtext(message, "poly"))) - return FALSE - if(findtext(message, "perch") || findtext(message, "up")) - command_perch(speaker) - return TRUE - else if(findtext(message, "off") || findtext(message, "down")) - command_hop_off(speaker) - return TRUE - else - return FALSE - -/mob/living/simple_animal/parrot/poly/proc/command_perch(mob/living/carbon/human/human_target) - if (!buckled) - buckled_to_human = FALSE - if(LAZYLEN(human_target.buckled_mobs) >= human_target.max_buckled_mobs) - return - if(buckled_to_human) - manual_emote("gives [human_target] a confused look, squawking softly.") - return - if(get_dist(src, human_target) > 1 || buckled) // Only adjacent - manual_emote("tilts their head at [human_target], before bawking loudly and staying put.") - return - manual_emote("obediently hops up onto [human_target]'s shoulder, spreading their wings for a moment before settling down.") - perch_on_human(human_target) - -/mob/living/simple_animal/parrot/poly/proc/command_hop_off(mob/living/carbon/human/human_target) - if (!buckled) - buckled_to_human = FALSE - if(!buckled_to_human || !buckled) - manual_emote("gives [human_target] a confused look, squawking softly.") - return - - icon_state = icon_living - parrot_state = PARROT_WANDER - if(buckled) - to_chat(src, span_notice("You are no longer sitting on [human_target].")) - buckled.unbuckle_mob(src, TRUE) - manual_emote("squawks and hops off of [human_target], flying away.") - buckled = null - buckled_to_human = FALSE - pixel_x = initial(pixel_x) - pixel_y = initial(pixel_y) - -#undef PARROT_PERCH -#undef PARROT_SWOOP -#undef PARROT_WANDER diff --git a/modular_skyrat/modules/primitive_catgirls/code/clothing.dm b/modular_skyrat/modules/primitive_catgirls/code/clothing.dm deleted file mode 100644 index 9c7a378c3ff4f4..00000000000000 --- a/modular_skyrat/modules/primitive_catgirls/code/clothing.dm +++ /dev/null @@ -1,138 +0,0 @@ -// The naming of every path in this file is going to be awful :smiling_imp: - -// Outfit Datum - -/datum/outfit/primitive_catgirl - name = "Icemoon Dweller" - - uniform = /obj/item/clothing/under/dress/skirt/primitive_catgirl_body_wraps - shoes = /obj/item/clothing/shoes/winterboots/ice_boots/primitive_catgirl_boots - gloves = /obj/item/clothing/gloves/fingerless/primitive_catgirl_armwraps - suit = /obj/item/clothing/suit/jacket/primitive_catgirl_coat - neck = /obj/item/clothing/neck/scarf/primitive_catgirl_scarf - - back = /obj/item/forging/reagent_weapon/axe/fake_copper - -// Under - -/obj/item/clothing/under/dress/skirt/primitive_catgirl_body_wraps - name = "body wraps" - desc = "Some pretty simple wraps to cover up your lower bits." - icon_state = "wraps" - icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi' - worn_icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi' - body_parts_covered = GROIN - greyscale_config = /datum/greyscale_config/primitive_catgirl_wraps - greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_wraps/worn - greyscale_colors = "#cec8bf#364660" - flags_1 = IS_PLAYER_COLORABLE_1 - has_sensor = FALSE - -// Hands - -/obj/item/clothing/gloves/fingerless/primitive_catgirl_armwraps - name = "arm wraps" - desc = "Simple cloth to wrap around one's arms." - icon_state = "armwraps" - icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi' - worn_icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi' - greyscale_config = /datum/greyscale_config/primitive_catgirl_armwraps - greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_armwraps/worn - greyscale_colors = "#cec8bf" - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/gloves/fingerless/primitive_catgirl_gauntlets - name = "gauntlets" - desc = "Simple cloth arm wraps with overlying metal protection." - icon_state = "gauntlets" - icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi' - worn_icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi' - greyscale_config = /datum/greyscale_config/primitive_catgirl_gauntlets - greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_gauntlets/worn - greyscale_config_inhand_left = null - greyscale_config_inhand_right = null - greyscale_colors = "#cec8bf#c55a1d" - flags_1 = IS_PLAYER_COLORABLE_1 - -// Suit - -/obj/item/clothing/suit/jacket/primitive_catgirl_coat - name = "primitive fur coat" - desc = "A large piece of animal hide stuffed with fur, likely from the same animal." - icon_state = "coat" - icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi' - worn_icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi' - body_parts_covered = CHEST - cold_protection = CHEST - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - greyscale_config = /datum/greyscale_config/primitive_catgirl_coat - greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_coat/worn - greyscale_colors = "#594032#cec8bf" - flags_1 = IS_PLAYER_COLORABLE_1 - -/obj/item/clothing/suit/apron/chef/colorable_apron/primitive_catgirl_leather - greyscale_colors = "#594032" - -// Shoes - -/obj/item/clothing/shoes/winterboots/ice_boots/primitive_catgirl_boots - name = "primitive hiking boots" - desc = "A pair of heavy boots lined with fur and with soles special built to prevent slipping on ice." - icon_state = "boots" - icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi' - worn_icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi' - greyscale_config = /datum/greyscale_config/primitive_catgirl_boots - greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_boots/worn - greyscale_colors = "#594032#cec8bf" - flags_1 = IS_PLAYER_COLORABLE_1 - -// Neck - -/obj/item/clothing/neck/scarf/primitive_catgirl_scarf - greyscale_colors = "#cec8bf#cec8bf" - -/obj/item/clothing/neck/large_scarf/primitive_catgirl_off_white - greyscale_colors = "#cec8bf#cec8bf" - -/obj/item/clothing/neck/infinity_scarf/primitive_catgirl_blue - greyscale_colors = "#364660" - -/obj/item/clothing/neck/mantle/recolorable/primitive_catgirl_off_white - greyscale_colors = "#cec8bf" - -/obj/item/clothing/neck/ranger_poncho/primitive_catgirl_leather - greyscale_colors = "#594032#594032" - -// Masks - -/obj/item/clothing/mask/primitive_catgirl_greyscale_gaiter - name = "neck gaiter" - desc = "A cloth for covering your neck, and usually part of your face too, but that part's optional." - icon_state = "gaiter" - inhand_icon_state = "balaclava" - icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi' - worn_icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi' - greyscale_config = /datum/greyscale_config/primitive_catgirl_gaiter - greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_gaiter/worn - greyscale_colors = "#364660" - w_class = WEIGHT_CLASS_TINY - flags_inv = HIDEFACE|HIDESNOUT - flags_cover = MASKCOVERSMOUTH - visor_flags_inv = HIDEFACE|HIDESNOUT - visor_flags_cover = MASKCOVERSMOUTH - flags_1 = IS_PLAYER_COLORABLE_1 - actions_types = list(/datum/action/item_action/adjust) - -/obj/item/clothing/mask/primitive_catgirl_greyscale_gaiter/attack_self(mob/user) - adjustmask(user) - -// Head - -/obj/item/clothing/head/standalone_hood/primitive_catgirl_colors - greyscale_colors = "#594032#364660" - -// Misc Items - -/obj/item/forging/reagent_weapon/axe/fake_copper - custom_materials = list(/datum/material/copporcitite = SHEET_MATERIAL_AMOUNT) diff --git a/modular_skyrat/modules/primitive_catgirls/code/species.dm b/modular_skyrat/modules/primitive_catgirls/code/species.dm deleted file mode 100644 index 586c7b22900524..00000000000000 --- a/modular_skyrat/modules/primitive_catgirls/code/species.dm +++ /dev/null @@ -1,105 +0,0 @@ -/mob/living/carbon/human/species/felinid/primitive - race = /datum/species/human/felinid/primitive - -/datum/language_holder/primitive_felinid - understood_languages = list( - /datum/language/primitive_catgirl = list(LANGUAGE_ATOM), - /datum/language/siiktajr = list(LANGUAGE_ATOM), - ) - spoken_languages = list( - /datum/language/primitive_catgirl = list(LANGUAGE_ATOM), - /datum/language/siiktajr = list(LANGUAGE_ATOM), - ) - selected_language = /datum/language/primitive_catgirl - -/datum/species/human/felinid/primitive - name = "Primitive Demihuman" - id = SPECIES_FELINE_PRIMITIVE - - mutantlungs = /obj/item/organ/internal/lungs/icebox_adapted - mutanteyes = /obj/item/organ/internal/eyes/low_light_adapted - mutanttongue = /obj/item/organ/internal/tongue/cat/primitive - - species_language_holder = /datum/language_holder/primitive_felinid - language_prefs_whitelist = list(/datum/language/primitive_catgirl) - - bodytemp_normal = 270 // If a normal human gets hugged by one its gonna feel cold - bodytemp_heat_damage_limit = 283 // To them normal station atmos would be sweltering - bodytemp_cold_damage_limit = 213 // Man up bro its not even that cold out here - - inherent_traits = list( - TRAIT_VIRUSIMMUNE, - TRAIT_RESISTCOLD, - TRAIT_USES_SKINTONES, - ) - - always_customizable = TRUE - -/datum/species/human/felinid/primitive/prepare_human_for_preview(mob/living/carbon/human/human_for_preview) - human_for_preview.hairstyle = "Blunt Bangs Alt" - human_for_preview.hair_color = "#323442" - human_for_preview.skin_tone = "mediterranean" - - human_for_preview.update_body_parts() - - human_for_preview.dna.species.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Cat", MUTANT_INDEX_COLOR_LIST = list(human_for_preview.hair_color)) - human_for_preview.dna.species.mutant_bodyparts["ears"] = list(MUTANT_INDEX_NAME = "Cat", MUTANT_INDEX_COLOR_LIST = list(human_for_preview.hair_color)) - - human_for_preview.update_mutant_bodyparts(TRUE) - human_for_preview.update_body(TRUE) - -/datum/species/human/felinid/primitive/get_species_description() - return list( - "Genetically modified humanoids believed to be descendants of a now centuries old colony \ - ship from the pre-bluespace travel era. Still having at least some human traits, they \ - are most comparable to today's felinids with most sporting features likely spliced from \ - the icemoon's many fauna." - ) - -/datum/species/human/felinid/primitive/get_species_lore() - return list( - "The Hearthkin are a culture of disparate Scandinavian groups all sharing a common origin \ - as descendents from demihuman genemodders aboard the good ship Stjarndrakkr, or Star Dragon; \ - an enormous colony ship almost 40km tall. This ship first reached the orbit of its last \ - resting place three hundred years ago, before the advent of bluespace travel; coming from \ - a world known to the Hearthkin as 'Asgard.' When it reached the atmosphere of the ice moon, \ - or 'Niflheim' as they consider it, the vessel detonated in low orbit for unknown reasons. \ - Large sections of the Star Dragon broke up and sealed themselves, \ - coming to a rest all over the moon itself.", - - "At first, life was incredibly difficult for the would-be colonists. Generations were very short, \ - and most of the personnel able to even fix the vessel had died either on impact, or later on. \ - While their genetic modifications and pre-existing comfort in frozen climates somewhat helped them, \ - the Ancestors were said to have made one last desperate move to put all their resources together to \ - fully modify and adapt themselves to the climes of Niflheim; forever.", - - "Nowadays, the Hearthkin are removed from the original culture of the Ancestors, building one all of their own. \ - Many of the original, largest segments of the Star Dragon are buried under ice and snow, and the Hearthkin have \ - created a culture of building separate dwellings to keep them secret. Dwelling in longhouses and sleeping in the \ - warm undergrounds of Niflheim, and hunting native creatures and those coming from portals to the moon's planet; \ - Muspelheim. Their pagan faith has strengthened over the centuries, from occasional prayers for a blizzard to end \ - soon, to now full-on worship and sacrifices to their various Gods. Hearthkin still hold immense reverence for their \ - Ancestors, but tend to have varying opinions and speculation on what exactly they were like, and why they came to \ - Niflheim in the first place.", - - "Their names are two-part; a birth name, and a title. Their birth names still hold resemblance to 'Asgardian' culture, \ - typically a Nordic name such as 'Solveig Helgasdottir,' or 'Bjorn Lukasson.' However, their last name is then exchanged \ - for a 'Title' when the Hearthkin is no longer 'Unproven.' These are a two-parter, based on either great deeds, \ - embarrassing moments, or aspects of the person's personality. Some examples would be 'Soul-Drowner' after the night of \ - a Hearthkin drinking herself half-dead, or one might be known as 'Glacier-Shaped' for being abnormally large. \ - These titles are always given by ones' kin.", - - "The Hearth itself is an area that the kindred hold incredibly sacred, primarily hating Outsiders for more \ - practical reasons. They think themselves as having been there first, many of them knowing they were 'promised' \ - Niflheim by the Ancestors. Unlike the Ashwalkers of Muspelheim, the Hearthkin are a more technologically \ - advanced society; having use for not only metal, but gold and silver for accessory. They are known to employ \ - artifacts thought to be of either the planet their moon orbits, or leftovers from their Ancestors; however, for \ - a variety of reasons from Kin to Kin, they tend to shy away from using modern human technology.", - - "Physically, the Hearthkin always come in the form of demihumans; appearing similar to normal Earthlings, \ - but with the tails, ears, and sometimes limbs of various arctic animals; wolves, bears, and felines to only name a few. \ - They seem perfectly adapted to their lands of ice and mist, but find even the mild controlled temperatures of \ - NanoTrasen stations to be swelteringly hot. Their view of 'station' genemodders is that of 'halflings': \ - Ancestral bodies, but with the blood and spirit of the humans of Midgard, \ - tending to look down on them even more than other aliens.", - ) diff --git a/modular_skyrat/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi b/modular_skyrat/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi deleted file mode 100644 index 90023ecd4cd654..00000000000000 Binary files a/modular_skyrat/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi and /dev/null differ diff --git a/modular_skyrat/modules/primitive_production/icons/prim_fun.dmi b/modular_skyrat/modules/primitive_production/icons/prim_fun.dmi deleted file mode 100644 index 0f6e0725611356..00000000000000 Binary files a/modular_skyrat/modules/primitive_production/icons/prim_fun.dmi and /dev/null differ diff --git a/modular_skyrat/modules/primitive_structures/code/storage_structures.dm b/modular_skyrat/modules/primitive_structures/code/storage_structures.dm deleted file mode 100644 index aed8175c94bf4f..00000000000000 --- a/modular_skyrat/modules/primitive_structures/code/storage_structures.dm +++ /dev/null @@ -1,52 +0,0 @@ -// Wooden shelves that force items placed on them to be visually placed them - -/obj/structure/rack/wooden - name = "shelf" - icon_state = "shelf_wood" - icon = 'modular_skyrat/modules/primitive_structures/icons/storage.dmi' - resistance_flags = FLAMMABLE - flags_1 = NODECONSTRUCT_1 - -/obj/structure/rack/wooden/MouseDrop_T(obj/object, mob/user, params) - . = ..() - var/list/modifiers = params2list(params) - if(!LAZYACCESS(modifiers, ICON_X) || !LAZYACCESS(modifiers, ICON_Y)) - return - - object.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size / 3), world.icon_size / 3) - object.pixel_y = text2num(LAZYACCESS(modifiers, ICON_Y)) > 16 ? 10 : -4 - -/obj/structure/rack/wooden/crowbar_act(mob/living/user, obj/item/tool) - user.balloon_alert_to_viewers("disassembling...") - if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) - return - new /obj/item/stack/sheet/mineral/clay(drop_location(), 5) - deconstruct(TRUE) - return TOOL_ACT_TOOLTYPE_SUCCESS - -/obj/structure/rack/wooden/deconstruct(disassembled = TRUE) - new /obj/item/stack/sheet/mineral/wood(drop_location(), 2) - . = ..() - -// Barrel but it works like a crate - -/obj/structure/closet/crate/wooden/storage_barrel - name = "storage barrel" - desc = "This barrel can't hold liquids, it can just hold things inside of it however!" - icon_state = "barrel" - base_icon_state = "barrel" - icon = 'modular_skyrat/modules/primitive_structures/icons/storage.dmi' - resistance_flags = FLAMMABLE - flags_1 = NODECONSTRUCT_1 - -/obj/structure/closet/crate/wooden/storage_barrel/crowbar_act(mob/living/user, obj/item/tool) - user.balloon_alert_to_viewers("disassembling...") - if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) - return - new /obj/item/stack/sheet/mineral/clay(drop_location(), 5) - deconstruct(TRUE) - return TOOL_ACT_TOOLTYPE_SUCCESS - -/obj/structure/closet/crate/wooden/storage_barrel/deconstruct(disassembled = TRUE) - new /obj/item/stack/sheet/mineral/wood(drop_location(), 4) - . = ..() diff --git a/modular_skyrat/modules/primitive_structures/code/totally_thatch_roof.dm b/modular_skyrat/modules/primitive_structures/code/totally_thatch_roof.dm deleted file mode 100644 index eea8fb56d669ea..00000000000000 --- a/modular_skyrat/modules/primitive_structures/code/totally_thatch_roof.dm +++ /dev/null @@ -1,8 +0,0 @@ -/turf/open/misc/grass/roofing - name = "thatched roof" - desc = "A collection of various dried greens, not so green anymore, that makes a passable roof material." - baseturfs = /turf/open/openspace/icemoon - initial_gas_mix = "ICEMOON_ATMOS" - icon_state = "grass-255" - icon = 'modular_skyrat/modules/primitive_structures/icons/roofing.dmi' - smooth_icon = 'modular_skyrat/modules/primitive_structures/icons/roofing.dmi' diff --git a/modular_skyrat/modules/primitive_structures/code/windows.dm b/modular_skyrat/modules/primitive_structures/code/windows.dm deleted file mode 100644 index bce34392bc4c85..00000000000000 --- a/modular_skyrat/modules/primitive_structures/code/windows.dm +++ /dev/null @@ -1,10 +0,0 @@ -/obj/structure/window/green_glass_pane - name = "green glass window" - desc = "A handcrafted green glass window. At least you can still see through it." - icon = 'modular_skyrat/modules/primitive_structures/icons/windows.dmi' - icon_state = "green_glass" - flags_1 = NONE - obj_flags = CAN_BE_HIT - can_be_unanchored = FALSE - fulltile = TRUE - flags_1 = NODECONSTRUCT_1 | PREVENT_CLICK_UNDER_1 diff --git a/modular_skyrat/modules/primitive_structures/icons/storage.dmi b/modular_skyrat/modules/primitive_structures/icons/storage.dmi deleted file mode 100644 index 61d5004b370d91..00000000000000 Binary files a/modular_skyrat/modules/primitive_structures/icons/storage.dmi and /dev/null differ diff --git a/modular_skyrat/modules/radiosound/code/headset.dm b/modular_skyrat/modules/radiosound/code/headset.dm deleted file mode 100644 index 321fb9e40a0653..00000000000000 --- a/modular_skyrat/modules/radiosound/code/headset.dm +++ /dev/null @@ -1,13 +0,0 @@ -/obj/item/radio/headset - var/radiosound = 'modular_skyrat/modules/radiosound/sound/radio/common.ogg' - -/obj/item/radio/headset/syndicate //disguised to look like a normal headset for stealth ops - radiosound = 'modular_skyrat/modules/radiosound/sound/radio/syndie.ogg' - -/obj/item/radio/headset/headset_sec - radiosound = 'modular_skyrat/modules/radiosound/sound/radio/security.ogg' - -/obj/item/radio/headset/talk_into(mob/living/M, message, channel, list/spans, datum/language/language, list/message_mods, direct = TRUE) - if(radiosound && listening) - playsound(M, radiosound, rand(20, 30), 0, 0, SOUND_FALLOFF_EXPONENT) - . = ..() diff --git a/modular_skyrat/modules/reagent_forging/code/forge_clothing.dm b/modular_skyrat/modules/reagent_forging/code/forge_clothing.dm deleted file mode 100644 index 93fddaecf32588..00000000000000 --- a/modular_skyrat/modules/reagent_forging/code/forge_clothing.dm +++ /dev/null @@ -1,172 +0,0 @@ -// Vests -/obj/item/clothing/suit/armor/forging_plate_armor - name = "reagent plate vest" - desc = "An armor vest made of hammered, interlocking plates." - icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_clothing.dmi' - worn_icon = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi' - worn_icon_better_vox = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi' - worn_icon_vox = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi' - worn_icon_teshari = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi' - icon_state = "plate_vest" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - resistance_flags = FIRE_PROOF - skyrat_obj_flags = ANVIL_REPAIR - armor_type = /datum/armor/armor_forging_plate_armor - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR - -/datum/armor/armor_forging_plate_armor - melee = 40 - bullet = 40 - fire = 50 - wound = 30 - -/obj/item/clothing/suit/armor/forging_plate_armor/Initialize(mapload) - . = ..() - AddComponent(/datum/component/armor_plate, 4) - AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_OCLOTHING) - - allowed += /obj/item/forging/reagent_weapon - -// Gloves -/obj/item/clothing/gloves/forging_plate_gloves - name = "reagent plate gloves" - desc = "A set of leather gloves with protective armor plates connected to the wrists." - icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_clothing.dmi' - worn_icon = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi' - worn_icon_better_vox = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi' - worn_icon_vox = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi' - worn_icon_teshari = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi' - icon_state = "plate_gloves" - resistance_flags = FIRE_PROOF - skyrat_obj_flags = ANVIL_REPAIR - armor_type = /datum/armor/gloves_forging_plate_gloves - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR - -/datum/armor/gloves_forging_plate_gloves - melee = 40 - bullet = 40 - fire = 50 - wound = 30 - -/obj/item/clothing/gloves/forging_plate_gloves/Initialize(mapload) - . = ..() - AddComponent(/datum/component/armor_plate, 4) - AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_GLOVES) - -// Helmets -/obj/item/clothing/head/helmet/forging_plate_helmet - name = "reagent plate helmet" - desc = "A helmet out of hammered plates with a leather neck guard and chin strap." - icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_clothing.dmi' - worn_icon = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi' - worn_icon_better_vox = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi' - worn_icon_vox = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi' - worn_icon_teshari = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi' - icon_state = "plate_helmet" - supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON - resistance_flags = FIRE_PROOF - flags_inv = null - skyrat_obj_flags = ANVIL_REPAIR - armor_type = /datum/armor/helmet_forging_plate_helmet - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR - -/datum/armor/helmet_forging_plate_helmet - melee = 40 - bullet = 40 - fire = 50 - wound = 30 - -/obj/item/clothing/head/helmet/forging_plate_helmet/Initialize(mapload) - . = ..() - AddComponent(/datum/component/armor_plate, 4) - AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_HEAD) - -// Boots -/obj/item/clothing/shoes/forging_plate_boots - name = "reagent plate boots" - desc = "A pair of leather boots with protective armor plates over the shins and toes." - icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_clothing.dmi' - worn_icon = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi' - worn_icon_digi = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_digi.dmi' - worn_icon_better_vox = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi' - worn_icon_vox = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi' - worn_icon_teshari = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi' - icon_state = "plate_boots" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - armor_type = /datum/armor/shoes_forging_plate_boots - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR - resistance_flags = FIRE_PROOF - skyrat_obj_flags = ANVIL_REPAIR - can_be_tied = FALSE - -/datum/armor/shoes_forging_plate_boots - melee = 20 - bullet = 20 - -/obj/item/clothing/shoes/forging_plate_boots/Initialize(mapload) - . = ..() - AddComponent(/datum/component/armor_plate, 2) - AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_FEET) - -/obj/item/clothing/shoes/horseshoe - name = "reagent horseshoe" - desc = "A pair of horseshoes made out of chains." - icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_clothing.dmi' - worn_icon = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi' - icon_state = "horseshoe" - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - armor_type = /datum/armor/shoes_horseshoe - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR - resistance_flags = FIRE_PROOF - skyrat_obj_flags = ANVIL_REPAIR - can_be_tied = FALSE - -/datum/armor/shoes_horseshoe - melee = 20 - bullet = 20 - -/obj/item/clothing/shoes/horseshoe/Initialize(mapload) - . = ..() - AddComponent(/datum/component/armor_plate, 2) - AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_FEET) - -// Misc -/obj/item/clothing/gloves/ring/reagent_clothing - name = "reagent ring" - desc = "A tiny ring, sized to wrap around a finger." - icon_state = "ringsilver" - worn_icon_state = "sring" - inhand_icon_state = null - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR - skyrat_obj_flags = ANVIL_REPAIR - -/obj/item/clothing/gloves/ring/reagent_clothing/Initialize(mapload) - . = ..() - AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_GLOVES) - -/obj/item/clothing/neck/collar/reagent_clothing - name = "reagent collar" - desc = "A collar that is ready to be worn for certain individuals." - icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi' - worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi' - icon_state = "collar_cyan" - inhand_icon_state = null - body_parts_covered = NECK - slot_flags = ITEM_SLOT_NECK - w_class = WEIGHT_CLASS_SMALL - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR - skyrat_obj_flags = ANVIL_REPAIR - -/obj/item/clothing/neck/collar/reagent_clothing/Initialize(mapload) - . = ..() - AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_NECK) - -/obj/item/restraints/handcuffs/reagent_clothing - name = "reagent handcuffs" - desc = "A pair of handcuffs that are ready to keep someone captive." - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR - skyrat_obj_flags = ANVIL_REPAIR - -/obj/item/restraints/handcuffs/reagent_clothing/Initialize(mapload) - . = ..() - AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_HANDCUFFED) diff --git a/modular_skyrat/modules/reagent_forging/code/tool_override.dm b/modular_skyrat/modules/reagent_forging/code/tool_override.dm deleted file mode 100644 index d2623bfdca23f8..00000000000000 --- a/modular_skyrat/modules/reagent_forging/code/tool_override.dm +++ /dev/null @@ -1,93 +0,0 @@ -/// Called on an object when a tool with wrench capabilities is used to left click an object -/atom/proc/billow_act(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with wrench capabilities is used to right click an object -/atom/proc/billow_act_secondary(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with wrench capabilities is used to left click an object -/atom/proc/tong_act(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with wrench capabilities is used to right click an object -/atom/proc/tong_act_secondary(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with wrench capabilities is used to left click an object -/atom/proc/hammer_act(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with wrench capabilities is used to right click an object -/atom/proc/hammer_act_secondary(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with wrench capabilities is used to left click an object -/atom/proc/blowrod_act(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with wrench capabilities is used to right click an object -/atom/proc/blowrod_act_secondary(mob/living/user, obj/item/tool) - return - -/** - *Tool behavior procedure. Redirects to tool-specific procs by default. - * - * You can override it to catch all tool interactions, for use in complex deconstruction procs. - * - * Must return parent proc ..() in the end if overridden - */ -/atom/tool_act(mob/living/user, obj/item/tool, tool_type, is_right_clicking) - var/act_result - var/signal_result - - var/is_left_clicking = !is_right_clicking - - if(is_left_clicking) // Left click first for sensibility - var/list/processing_recipes = list() //List of recipes that can be mutated by sending the signal - signal_result = SEND_SIGNAL(src, COMSIG_ATOM_TOOL_ACT(tool_type), user, tool, processing_recipes) - if(signal_result & COMPONENT_BLOCK_TOOL_ATTACK) // The COMSIG_ATOM_TOOL_ACT signal is blocking the act - return TOOL_ACT_SIGNAL_BLOCKING - if(processing_recipes.len) - process_recipes(user, tool, processing_recipes) - if(QDELETED(tool)) - return TRUE - else - signal_result = SEND_SIGNAL(src, COMSIG_ATOM_SECONDARY_TOOL_ACT(tool_type), user, tool) - if(signal_result & COMPONENT_BLOCK_TOOL_ATTACK) // The COMSIG_ATOM_TOOL_ACT signal is blocking the act - return TOOL_ACT_SIGNAL_BLOCKING - - switch(tool_type) - if(TOOL_CROWBAR) - act_result = is_left_clicking ? crowbar_act(user, tool) : crowbar_act_secondary(user, tool) - if(TOOL_MULTITOOL) - act_result = is_left_clicking ? multitool_act(user, tool) : multitool_act_secondary(user, tool) - if(TOOL_SCREWDRIVER) - act_result = is_left_clicking ? screwdriver_act(user, tool) : screwdriver_act_secondary(user, tool) - if(TOOL_WRENCH) - act_result = is_left_clicking ? wrench_act(user, tool) : wrench_act_secondary(user, tool) - if(TOOL_WIRECUTTER) - act_result = is_left_clicking ? wirecutter_act(user, tool) : wirecutter_act_secondary(user, tool) - if(TOOL_WELDER) - act_result = is_left_clicking ? welder_act(user, tool) : welder_act_secondary(user, tool) - if(TOOL_ANALYZER) - act_result = is_left_clicking ? analyzer_act(user, tool) : analyzer_act_secondary(user, tool) - if(TOOL_BILLOW) - act_result = is_left_clicking ? billow_act(user, tool) : billow_act_secondary(user, tool) - if(TOOL_TONG) - act_result = is_left_clicking ? tong_act(user, tool) : tong_act_secondary(user, tool) - if(TOOL_HAMMER) - act_result = is_left_clicking ? hammer_act(user, tool) : hammer_act_secondary(user, tool) - if(TOOL_BLOWROD) - act_result = is_left_clicking ? blowrod_act(user, tool) : blowrod_act_secondary(user, tool) - if(!act_result) - return - - // A tooltype_act has completed successfully - if(is_left_clicking) - log_tool("[key_name(user)] used [tool] on [src] at [AREACOORD(src)]") - SEND_SIGNAL(tool, COMSIG_TOOL_ATOM_ACTED_PRIMARY(tool_type), src) - else - log_tool("[key_name(user)] used [tool] on [src] (right click) at [AREACOORD(src)]") - SEND_SIGNAL(tool, COMSIG_TOOL_ATOM_ACTED_SECONDARY(tool_type), src) - return TOOL_ACT_TOOLTYPE_SUCCESS diff --git a/modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi b/modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi deleted file mode 100644 index e74b5a0ef96d0e..00000000000000 Binary files a/modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi and /dev/null differ diff --git a/modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_digi.dmi b/modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_digi.dmi deleted file mode 100644 index f580213e5ca992..00000000000000 Binary files a/modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_digi.dmi and /dev/null differ diff --git a/modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi b/modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi deleted file mode 100644 index 13e7f845871c82..00000000000000 Binary files a/modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi and /dev/null differ diff --git a/modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi b/modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi deleted file mode 100644 index 079d06ddbc5a46..00000000000000 Binary files a/modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi and /dev/null differ diff --git a/modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi b/modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi deleted file mode 100644 index 780b18604f4e33..00000000000000 Binary files a/modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi and /dev/null differ diff --git a/modular_skyrat/modules/reagent_forging/icons/obj/forge_clothing.dmi b/modular_skyrat/modules/reagent_forging/icons/obj/forge_clothing.dmi deleted file mode 100644 index ee31a1c28d9c81..00000000000000 Binary files a/modular_skyrat/modules/reagent_forging/icons/obj/forge_clothing.dmi and /dev/null differ diff --git a/modular_skyrat/modules/salon/code/barber_chair.dm b/modular_skyrat/modules/salon/code/barber_chair.dm deleted file mode 100644 index 5237ab207724e7..00000000000000 --- a/modular_skyrat/modules/salon/code/barber_chair.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/structure/chair/comfy/barber_chair - name = "barber's chair" - desc = "You sit in this, and your hair shall be cut." - icon = 'modular_skyrat/modules/salon/icons/chair.dmi' - icon_state = "barber_chair" diff --git a/modular_skyrat/modules/salon/code/clothing.dm b/modular_skyrat/modules/salon/code/clothing.dm deleted file mode 100644 index 85b9e48375623a..00000000000000 --- a/modular_skyrat/modules/salon/code/clothing.dm +++ /dev/null @@ -1,6 +0,0 @@ -/obj/item/clothing/under/rank/barber - desc = "Stark white pants and a fancy hot-pink shirt with a low neckline, though its preferred to wear it even lower. It's the hottest new trend, darling!" - name = "barber's uniform" - icon = 'modular_skyrat/master_files/icons/obj/clothing/under/civilian.dmi' - worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/civilian.dmi' - icon_state = "barber" diff --git a/modular_skyrat/modules/salon/code/misc_items.dm b/modular_skyrat/modules/salon/code/misc_items.dm deleted file mode 100644 index dae97ee4364d90..00000000000000 --- a/modular_skyrat/modules/salon/code/misc_items.dm +++ /dev/null @@ -1,194 +0,0 @@ - -/obj/item/storage/box/lipsticks - name = "lipstick box" - -/obj/item/storage/box/lipsticks/PopulateContents() - ..() - new /obj/item/lipstick(src) - new /obj/item/lipstick/purple(src) - new /obj/item/lipstick/jade(src) - new /obj/item/lipstick/black(src) - -/obj/item/lipstick/quantum - name = "quantum lipstick" - -/obj/item/lipstick/quantum/attack(mob/attacked_mob, mob/user) - if(!open || !ismob(attacked_mob)) - return - - if(!ishuman(attacked_mob)) - to_chat(user, span_warning("Where are the lips on that?")) - return - - INVOKE_ASYNC(src, PROC_REF(async_set_color), attacked_mob, user) - -/obj/item/lipstick/quantum/proc/async_set_color(mob/attacked_mob, mob/user) - var/new_color = input( - user, - "Select lipstick color", - null, - COLOR_WHITE, - ) as color | null - - var/mob/living/carbon/human/target = attacked_mob - if(target.is_mouth_covered()) - to_chat(user, span_warning("Remove [ target == user ? "your" : "[target.p_their()]" ] mask!")) - return - if(target.lip_style) //if they already have lipstick on - to_chat(user, span_warning("You need to wipe off the old lipstick first!")) - return - - if(target == user) - user.visible_message(span_notice("[user] does [user.p_their()] lips with \the [src]."), \ - span_notice("You take a moment to apply \the [src]. Perfect!")) - target.update_lips("lipstick", new_color, lipstick_trait) - return - - user.visible_message(span_warning("[user] begins to do [target]'s lips with \the [src]."), \ - span_notice("You begin to apply \the [src] on [target]'s lips...")) - if(!do_after(user, 2 SECONDS, target = target)) - return - user.visible_message(span_notice("[user] does [target]'s lips with \the [src]."), \ - span_notice("You apply \the [src] on [target]'s lips.")) - target.update_lips("lipstick", new_color, lipstick_trait) - -/obj/item/hairbrush/comb - name = "comb" - desc = "A rather simple tool, used to straighten out hair and knots in it." - icon = 'modular_skyrat/modules/salon/icons/items.dmi' - icon_state = "blackcomb" - -/obj/item/hairstyle_preview_magazine - name = "hip hairstyles magazine" - desc = "A magazine featuring a magnitude of hairsytles!" - -/obj/item/hairstyle_preview_magazine/ui_interact(mob/user, datum/tgui/ui) - . = ..() - // A simple GUI with a list of hairstyles and a view, so people can choose a hairstyle! - -/obj/effect/decal/cleanable/hair - name = "hair cuttings" - icon = 'modular_skyrat/modules/salon/icons/items.dmi' - icon_state = "cut_hair" - -/obj/item/razor - name = "electric razor" - desc = "The latest and greatest power razor born from the science of shaving." - icon = 'modular_skyrat/modules/salon/icons/items.dmi' - icon_state = "razor" - flags_1 = CONDUCT_1 - w_class = WEIGHT_CLASS_TINY - // How long do we take to shave someone's (facial) hair? - var/shaving_time = 5 SECONDS - -/obj/item/razor/suicide_act(mob/living/carbon/user) - user.visible_message(span_suicide("[user] begins shaving [user.p_them()]self without the razor guard! It looks like [user.p_theyre()] trying to commit suicide!")) - shave(user, BODY_ZONE_PRECISE_MOUTH) - shave(user, BODY_ZONE_HEAD)//doesnt need to be BODY_ZONE_HEAD specifically, but whatever - return BRUTELOSS - -/obj/item/razor/proc/shave(mob/living/carbon/human/target_human, location = BODY_ZONE_PRECISE_MOUTH) - if(location == BODY_ZONE_PRECISE_MOUTH) - target_human.set_facial_hairstyle("Shaved", update = TRUE) - else - target_human.set_hairstyle("Bald", update = TRUE) - - playsound(loc, 'sound/items/unsheath.ogg', 20, TRUE) - - -/obj/item/razor/attack(mob/attacked_mob, mob/living/user) - if(!ishuman(attacked_mob)) - return ..() - - var/mob/living/carbon/human/target_human = attacked_mob - var/location = user.zone_selected - var/obj/item/bodypart/head/noggin = target_human.get_bodypart(BODY_ZONE_HEAD) - var/static/list/head_zones = list(BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_HEAD) - - if(!noggin && (location in head_zones)) - to_chat(user, span_warning("[target_human] doesn't have a head!")) - return - - if(!(location in head_zones) && !user.combat_mode) - to_chat(user, span_warning("You stop, look down at what you're currently holding and ponder to yourself, \"This is probably to be used on their hair or their facial hair.\"")) - return - - if(location == BODY_ZONE_PRECISE_MOUTH) - if(!(noggin.head_flags & HEAD_FACIAL_HAIR)) - to_chat(user, span_warning("There is no facial hair to shave!")) - return - - if(!get_location_accessible(target_human, location)) - to_chat(user, span_warning("The mask is in the way!")) - return - - if(HAS_TRAIT(target_human, TRAIT_SHAVED)) - to_chat(user, span_warning("[target_human] is just way too shaved. Like, really really shaved.")) - return - - if(target_human.facial_hairstyle == "Shaved") - to_chat(user, span_warning("Already clean-shaven!")) - return - - var/self_shaving = target_human == user // Shaving yourself? - user.visible_message(span_notice("[user] starts to shave [self_shaving ? user.p_their() : "[target_human]'s"] hair with [src]."), \ - span_notice("You take a moment to shave [self_shaving ? "your" : "[target_human]'s" ] hair with [src]...")) - - if(do_after(user, shaving_time, target = target_human)) - user.visible_message(span_notice("[user] shaves [self_shaving ? user.p_their() : "[target_human]'s"] hair clean with [src]."), \ - span_notice("You finish shaving [self_shaving ? "your" : " [target_human]'s"] hair with [src]. Fast and clean!")) - - shave(target_human, location) - - else if(location == BODY_ZONE_HEAD) - if(!(noggin.head_flags & HEAD_HAIR)) - to_chat(user, span_warning("There is no hair to shave!")) - return - - if(!get_location_accessible(target_human, location)) - to_chat(user, span_warning("The headgear is in the way!")) - return - - if(target_human.hairstyle == "Bald" || target_human.hairstyle == "Balding Hair" || target_human.hairstyle == "Skinhead") - to_chat(user, span_warning("There is not enough hair left to shave!")) - return - - if(HAS_TRAIT(target_human, TRAIT_SHAVED)) - to_chat(user, span_warning("[target_human] is just way too shaved. Like, really really shaved.")) - return - - var/self_shaving = target_human == user // Shaving yourself? - user.visible_message(span_notice("[user] starts to shave [self_shaving ? user.p_their() : "[target_human]'s"] hair with [src]."), \ - span_notice("You take a moment to shave [self_shaving ? "your" : "[target_human]'s" ] hair with [src]...")) - - if(do_after(user, shaving_time, target = target_human)) - user.visible_message(span_notice("[user] shaves [self_shaving ? user.p_their() : "[target_human]'s"] hair clean with [src]."), \ - span_notice("You finish shaving [self_shaving ? "your" : " [target_human]'s"] hair with [src]. Fast and clean!")) - - shave(target_human, location) - - return - - return ..() - -/obj/structure/sign/barber - name = "barbershop sign" - desc = "A glowing red-blue-white stripe you won't mistake for any other!" - icon = 'modular_skyrat/modules/salon/icons/items.dmi' - icon_state = "barber" - buildable_sign = FALSE // Don't want them removed, they look too jank. - -/obj/item/storage/box/perfume - name = "box of perfumes" - -/obj/item/storage/box/perfume/PopulateContents() - new /obj/item/perfume/cologne(src) - new /obj/item/perfume/wood(src) - new /obj/item/perfume/rose(src) - new /obj/item/perfume/jasmine(src) - new /obj/item/perfume/mint(src) - new /obj/item/perfume/vanilla(src) - new /obj/item/perfume/pear(src) - new /obj/item/perfume/strawberry(src) - new /obj/item/perfume/cherry(src) - new /obj/item/perfume/amber(src) diff --git a/modular_skyrat/modules/salon/icons/items.dmi b/modular_skyrat/modules/salon/icons/items.dmi deleted file mode 100644 index 7edbc40bc3f819..00000000000000 Binary files a/modular_skyrat/modules/salon/icons/items.dmi and /dev/null differ diff --git a/modular_skyrat/modules/science_tools/readme.md b/modular_skyrat/modules/science_tools/readme.md deleted file mode 100644 index c07b765a2261d3..00000000000000 --- a/modular_skyrat/modules/science_tools/readme.md +++ /dev/null @@ -1,44 +0,0 @@ -<!-- This should be copy-pasted into the root of your module folder as readme.md --> - -https://github.com/Skyrat-SS13/Skyrat-tg/pull/24162 - -## Science tools <!--Title of your addition.--> - -Module ID: SCIENCE_TOOLS <!-- Uppercase, UNDERSCORE_CONNECTED name of your module, that you use to mark files. This is so people can case-sensitive search for your edits, if any. --> - -### Description: Lets sci print watered down engi tools, and robotics, medical tools. - -<!-- Here, try to describe what your PR does, what features it provides and any other directly useful information. --> - -### TG Proc/File Changes: - -- N/A -<!-- If you edited any core procs, you should list them here. You should specify the files and procs you changed. -E.g: -- `code/modules/mob/living.dm`: `proc/overriden_proc`, `var/overriden_var` ---> - -### Modular Overrides: - -- N/A -<!-- If you added a new modular override (file or code-wise) for your module, you should list it here. Code files should specify what procs they changed, in case of multiple modules using the same file. -E.g: -- `modular_skyrat/master_files/sound/my_cool_sound.ogg` -- `modular_skyrat/master_files/code/my_modular_override.dm`: `proc/overriden_proc`, `var/overriden_var` ---> - -### Defines: - -- 2 defines in research.dm -<!-- If you needed to add any defines, mention the files you added those defines in, along with the name of the defines. --> - -### Included files that are not contained in this module: - -- ~skyrat_defines/research.dm -<!-- Likewise, be it a non-modular file or a modular one that's not contained within the folder belonging to this specific module, it should be mentioned here. Good examples are icons or sounds that are used between multiple modules, or other such edge-cases. --> - -### Credits: - -- Niko: Author - -<!-- Here go the credits to you, dear coder, and in case of collaborative work or ports, credits to the original source of the code. --> diff --git a/modular_skyrat/modules/sec_haul/code/corrections_officer/landmarks.dm b/modular_skyrat/modules/sec_haul/code/corrections_officer/landmarks.dm deleted file mode 100644 index 9b49e70e22d14c..00000000000000 --- a/modular_skyrat/modules/sec_haul/code/corrections_officer/landmarks.dm +++ /dev/null @@ -1,4 +0,0 @@ -/obj/effect/landmark/start/corrections_officer - name = "Corrections Officer" - icon = 'modular_skyrat/master_files/icons/mob/landmarks.dmi' - icon_state = "Corrections Officer" diff --git a/modular_skyrat/modules/sec_haul/code/guns/cargo_stuff.dm b/modular_skyrat/modules/sec_haul/code/guns/cargo_stuff.dm deleted file mode 100644 index 97c006240a5495..00000000000000 --- a/modular_skyrat/modules/sec_haul/code/guns/cargo_stuff.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/supply_pack/security/armory/cmg - name = "Carwo 'Sindano' Submachinegun Crate" - desc = "Three entirely proprietary Sindano kits, chambered in .35 Sol Short. Each kit contains three empty magazines and a box each of incapacitator and lethal rounds." - cost = CARGO_CRATE_VALUE * 20 - contains = list( - /obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/sindano, - /obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/sindano, - /obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/sindano, - ) - crate_name = "Carwo 'Sindano' Submachinegun Crate" diff --git a/modular_skyrat/modules/sec_haul/code/misc/decals.dm b/modular_skyrat/modules/sec_haul/code/misc/decals.dm deleted file mode 100644 index 3fbb63b6f75a72..00000000000000 --- a/modular_skyrat/modules/sec_haul/code/misc/decals.dm +++ /dev/null @@ -1,47 +0,0 @@ -/obj/effect/turf_decal/stripes/blue - icon_state = "warningline_blue" - icon = 'modular_skyrat/modules/sec_haul/icons/misc/turf_decals.dmi' - -/obj/effect/turf_decal/stripes/blue/line - icon_state = "warningline_blue" - -/obj/effect/turf_decal/stripes/blue/end - icon_state = "warn_end_blue" - -/obj/effect/turf_decal/stripes/blue/corner - icon_state = "warninglinecorner_blue" - -/obj/effect/turf_decal/stripes/blue/box - icon_state = "warn_box_blue" - -/obj/effect/turf_decal/stripes/blue/full - icon_state = "warn_full_blue" - -/obj/effect/turf_decal/bot_blue - icon = 'modular_skyrat/modules/sec_haul/icons/misc/turf_decals.dmi' - icon_state = "bot_blue" - -/obj/effect/turf_decal/caution/stand_clear/blue - icon = 'modular_skyrat/modules/sec_haul/icons/misc/turf_decals.dmi' - icon_state = "stand_clear_blue" - -/obj/effect/turf_decal/arrows/blue - icon = 'modular_skyrat/modules/sec_haul/icons/misc/turf_decals.dmi' - icon_state = "arrows_blue" - -/obj/effect/turf_decal/box/blue - icon = 'modular_skyrat/modules/sec_haul/icons/misc/turf_decals.dmi' - icon_state = "box_blue" - -/obj/effect/turf_decal/box/blue/corners - icon = 'modular_skyrat/modules/sec_haul/icons/misc/turf_decals.dmi' - icon_state = "box_corners_blue" - - -/obj/effect/turf_decal/delivery/blue - icon = 'modular_skyrat/modules/sec_haul/icons/misc/turf_decals.dmi' - icon_state = "delivery_blue" - -/obj/effect/turf_decal/caution/blue - icon = 'modular_skyrat/modules/sec_haul/icons/misc/turf_decals.dmi' - icon_state = "caution_blue" diff --git a/modular_skyrat/modules/sec_haul/code/misc/packs.dm b/modular_skyrat/modules/sec_haul/code/misc/packs.dm deleted file mode 100644 index 4782e9ca6d6bab..00000000000000 --- a/modular_skyrat/modules/sec_haul/code/misc/packs.dm +++ /dev/null @@ -1,25 +0,0 @@ -/datum/supply_pack/vending/sectech_skyrat - name = "Peacekeeper Equipment Supply Crate" - desc = "Armadyne branded Peacekeeper supply crate, filled with things you need to restock the equipment vendor." - cost = CARGO_CRATE_VALUE * 3 - access = ACCESS_SECURITY - contains = list(/obj/item/vending_refill/security_peacekeeper) - crate_name = "Peacekeeper equipment supply crate" - crate_type = /obj/structure/closet/crate/secure/gear - -/datum/supply_pack/vending/wardrobes/security_skyrat - name = "Peacekeeper Wardrobe Supply Crate" - desc = "This crate contains refills for the Peacekeeper Outfitting Station and LawDrobe." - cost = CARGO_CRATE_VALUE * 3 - contains = list(/obj/item/vending_refill/wardrobe/peacekeeper_wardrobe, - /obj/item/vending_refill/wardrobe/law_wardrobe) - crate_name = "security department supply crate" - -/datum/supply_pack/vending/wardrobes/command - name = "Command Wardrobe Supply Crate" - desc = "This crate contains refills for the Command Outfitting Station." - cost = CARGO_CRATE_VALUE * 3 - contains = list( - /obj/item/vending_refill/wardrobe/comm_wardrobe, - ) - crate_name = "Commandrobe Resupply Crate" diff --git a/modular_skyrat/modules/sec_haul/code/misc/vending.dm b/modular_skyrat/modules/sec_haul/code/misc/vending.dm deleted file mode 100644 index 29e0c77cb50762..00000000000000 --- a/modular_skyrat/modules/sec_haul/code/misc/vending.dm +++ /dev/null @@ -1,95 +0,0 @@ -/obj/machinery/vending/security - name = "\improper Armadyne Peacekeeper Equipment Vendor" - desc = "An Armadyne peacekeeper equipment vendor." - product_ads = "Crack capitalist skulls!;Beat some heads in!;Don't forget - harm is good!;Your weapons are right here.;Handcuffs!;Freeze, scumbag!;Don't tase me bro!;Tase them, bro.;Why not have a donut?" - icon = 'modular_skyrat/modules/sec_haul/icons/vending/vending.dmi' - products = list( - /obj/item/restraints/handcuffs = 8, - /obj/item/restraints/handcuffs/cable/zipties = 12, - /obj/item/grenade/flashbang = 6, - /obj/item/assembly/flash/handheld = 8, - /obj/item/food/donut/plain = 12, - /obj/item/storage/box/evidence = 6, - /obj/item/flashlight/seclite = 6, - /obj/item/restraints/legcuffs/bola/energy = 10, - ) - premium = list( - /obj/item/storage/belt/security/webbing = 4, - /obj/item/storage/belt/security/webbing/peacekeeper = 4, - /obj/item/coin/antagtoken = 1, - /obj/item/clothing/head/helmet/blueshirt = 3, - /obj/item/clothing/suit/armor/vest/blueshirt = 3, - /obj/item/clothing/gloves/tackler/security = 5, - /obj/item/grenade/stingbang = 5, - /obj/item/watertank/pepperspray = 2 - ) - refill_canister = /obj/item/vending_refill/security_peacekeeper - -/obj/item/vending_refill/security_peacekeeper - icon_state = "refill_sec" - -/obj/machinery/vending/wardrobe/sec_wardrobe - name = "\improper Peacekeeper Outfitting Station" - desc = "A vending machine stocked with Lopland's \"Peacekeeper\" security package, including standardized uniforms and general equipment." - icon = 'modular_skyrat/modules/sec_haul/icons/vending/vending.dmi' - light_mask = "sec-light-mask" - icon_state = "peace" - product_ads = "Beat perps in style!;The stains wash right out!;You have the right to be fashionable!;Now you can be the fashion police you always wanted to be!" - vend_reply = "Good luck, Peacekeeper!" - products = list(/obj/item/clothing/suit/hooded/wintercoat/security = 5, - /obj/item/clothing/suit/toggle/jacket/sec = 5, - /obj/item/clothing/suit/armor/vest/peacekeeper/brit = 5, - /obj/item/clothing/neck/security_cape = 5, - /obj/item/clothing/neck/security_cape/armplate = 5, - /obj/item/storage/backpack/security = 5, - /obj/item/storage/backpack/satchel/sec = 5, - /obj/item/storage/backpack/duffelbag/sec = 5, - /obj/item/storage/backpack/duffelbag/sec = 5, - /obj/item/clothing/under/rank/security/officer = 10, - /obj/item/clothing/under/rank/security/officer/skirt = 10, - /obj/item/clothing/under/rank/security/peacekeeper = 10, - /obj/item/clothing/under/rank/security/skyrat/utility = 3, - /obj/item/clothing/shoes/jackboots/sec = 10, - /obj/item/clothing/head/security_garrison = 10, - /obj/item/clothing/head/security_cap = 10, - /obj/item/clothing/head/beret/sec/peacekeeper = 5, - /obj/item/clothing/head/helmet/sec/sol = 5, - /obj/item/clothing/head/hats/warden/police/patrol = 5, - /obj/item/clothing/head/costume/ushanka/sec = 10, - /obj/item/clothing/gloves/color/black/security = 10, - ) - premium = list( /obj/item/clothing/under/rank/security/officer/formal = 3, - /obj/item/clothing/suit/jacket/officer/blue = 3, - /obj/item/clothing/head/beret/sec/navyofficer = 3) - refill_canister = /obj/item/vending_refill/wardrobe/peacekeeper_wardrobe - payment_department = ACCOUNT_SEC - light_color = COLOR_MODERATE_BLUE - -/obj/item/vending_refill/wardrobe/peacekeeper_wardrobe - machine_name = "Peacekeeper outfitting station" - -//List for the old one, for when its mapped in; curates it nicely, adds /redsec to the items, and also prevents some conflicts with the above vendor -/obj/machinery/vending/wardrobe/sec_wardrobe/red - name = "\improper SecDrobe" - desc = "A vending machine for security and security-related clothing!" - product_ads = "Beat perps in style!;It's red so you can't see the blood!;You have the right to be fashionable!;Now you can be the fashion police you always wanted to be!" - vend_reply = "Thank you for using the SecDrobe!" - icon = 'icons/obj/machines/vending.dmi' - icon_state = "secdrobe" - products = list(/obj/item/clothing/suit/hooded/wintercoat/security/redsec = 3, - /obj/item/storage/backpack/security/redsec = 3, - /obj/item/storage/backpack/satchel/sec/redsec = 3, - /obj/item/storage/backpack/duffelbag/sec/redsec = 3, - /obj/item/clothing/under/rank/security/officer/redsec = 3, - /obj/item/clothing/shoes/jackboots = 3, - /obj/item/clothing/head/beret/sec = 3, - /obj/item/clothing/head/soft/sec = 3, - /obj/item/clothing/mask/bandana/red = 3, - /obj/item/clothing/gloves/color/black = 3, - /obj/item/clothing/under/rank/security/officer/skirt = 3, - /obj/item/clothing/under/rank/security/skyrat/utility/redsec = 3, - /obj/item/clothing/suit/toggle/jacket/sec/old = 3, - ) - premium = list( /obj/item/clothing/under/rank/security/officer/formal = 5, - /obj/item/clothing/suit/jacket/officer/tan = 5, - /obj/item/clothing/head/beret/sec/navyofficer = 5) diff --git a/modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_lockers.dm b/modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_lockers.dm deleted file mode 100644 index 919120b97ff13f..00000000000000 --- a/modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_lockers.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/structure/closet/secure_closet/security - icon = 'modular_skyrat/modules/sec_haul/icons/lockers/closet.dmi' - -/obj/structure/closet/secure_closet/hos - icon = 'modular_skyrat/modules/sec_haul/icons/lockers/closet.dmi' - -/obj/structure/closet/secure_closet/warden - icon = 'modular_skyrat/modules/sec_haul/icons/lockers/closet.dmi' - -/obj/structure/closet/secure_closet/armory1 - icon = 'modular_skyrat/modules/sec_haul/icons/lockers/closet.dmi' - -/obj/structure/closet/secure_closet/armory2 - icon = 'modular_skyrat/modules/sec_haul/icons/lockers/closet.dmi' - -/obj/structure/closet/secure_closet/armory3 - icon = 'modular_skyrat/modules/sec_haul/icons/lockers/closet.dmi' diff --git a/modular_skyrat/modules/sec_haul/icons/lockers/closet.dmi b/modular_skyrat/modules/sec_haul/icons/lockers/closet.dmi deleted file mode 100644 index 16f7331fa882c6..00000000000000 Binary files a/modular_skyrat/modules/sec_haul/icons/lockers/closet.dmi and /dev/null differ diff --git a/modular_skyrat/modules/sec_haul/readme.md b/modular_skyrat/modules/sec_haul/readme.md deleted file mode 100644 index 7133a179464066..00000000000000 --- a/modular_skyrat/modules/sec_haul/readme.md +++ /dev/null @@ -1,32 +0,0 @@ -## Title: Security overhaul - -MODULE ID: MODULAR_WEAPONS - -### Description: - -Completely overhauls security to something that will hopefully fit us. - -### TG Proc Changes: - -- See: https://github.com/Skyrat-SS13/Skyrat-tg/pull/2860 - -### Defines: - -- See: https://github.com/Skyrat-SS13/Skyrat-tg/pull/2860 - -### Master file additions - -- `modular_skyrat/master_files/code/modules/cargo/packs/vending_restock.dm`: `var/special` -- `modular_skyrat/master_files/code/modules/cargo/packs/security.dm`: `var/special`, `var/cost` - -### Included files that are not contained in this module: - -- See: https://github.com/Skyrat-SS13/Skyrat-tg/pull/2860 - - -### Credits: -Code: Gandalf2k15 -Sprite modification: Gandalf2k15 -Uniforms and equipment sprites: JungleRat -Gun sprites: Eris and Sojourn -de-goofsec'd guns: ErdinyoBarboza diff --git a/modular_skyrat/modules/shotgunrebalance/code/ammobox.dm b/modular_skyrat/modules/shotgunrebalance/code/ammobox.dm deleted file mode 100644 index ab769454bd7bfd..00000000000000 --- a/modular_skyrat/modules/shotgunrebalance/code/ammobox.dm +++ /dev/null @@ -1,98 +0,0 @@ -/obj/item/ammo_box/advanced/s12gauge - name = "Slug ammo box" - desc = "A box of shotgun shells." - icon = 'modular_skyrat/modules/shotgunrebalance/icons/shotbox.dmi' - icon_state = "slug" - ammo_type = /obj/item/ammo_casing/shotgun - max_ammo = 15 - multitype = FALSE // if you enable this and set the box's caliber var to CALIBER_SHOTGUN (at time of writing, "shotgun"), then you can have the fabled any-ammo shellbox - -/obj/item/ammo_box/advanced/s12gauge/buckshot - name = "Buckshot ammo box" - icon_state = "buckshot" - ammo_type = /obj/item/ammo_casing/shotgun/buckshot - max_ammo = 15 - -/obj/item/ammo_box/advanced/s12gauge/rubber - name = "Rubbershot ammo box" - icon_state = "rubber" - ammo_type = /obj/item/ammo_casing/shotgun/rubbershot - max_ammo = 15 - -/obj/item/ammo_box/advanced/s12gauge/bean - name = "Beanbag Slug ammo box" - icon_state = "bean" - ammo_type = /obj/item/ammo_casing/shotgun/beanbag - max_ammo = 15 - -/obj/item/ammo_box/advanced/s12gauge/magnum - name = "Magnum Buckshot ammo box" - icon_state = "magnum" - ammo_type = /obj/item/ammo_casing/shotgun/magnum - max_ammo = 15 - -/obj/item/ammo_box/advanced/s12gauge/express - name = "Express Buckshot ammo box" - icon_state = "express" - ammo_type = /obj/item/ammo_casing/shotgun/express - max_ammo = 15 - -/obj/item/ammo_box/advanced/s12gauge/hp - name = "Hollow Point Slug ammo box" - icon_state = "hollowpoint" - ammo_type = /obj/item/ammo_casing/shotgun/hp - max_ammo = 15 - -/obj/item/ammo_box/advanced/s12gauge/hunter - name = "Hunter Buckshot ammo box" - icon_state = "hunter" - ammo_type = /obj/item/ammo_casing/shotgun/hunter - max_ammo = 15 - -/obj/item/ammo_box/advanced/s12gauge/pt20 - name = "PT-20 Armor Piercing Slug ammo box" - icon_state = "apshell" - ammo_type = /obj/item/ammo_casing/shotgun/pt20 - max_ammo = 15 - -/obj/item/ammo_box/advanced/s12gauge/rip - name = "RIP Slug ammo box" - icon_state = "rip" - ammo_type = /obj/item/ammo_casing/shotgun/rip - max_ammo = 15 - -/obj/item/ammo_box/advanced/s12gauge/flechette - name = "Flechette ammo box" - icon_state = "flechette" - ammo_type = /obj/item/ammo_casing/shotgun/flechette - max_ammo = 15 - -/obj/item/ammo_box/advanced/s12gauge/beehive - name = "B3-HVE 'Beehive' ammo box" - icon_state = "beehive" - ammo_type = /obj/item/ammo_casing/shotgun/beehive - max_ammo = 15 - -/obj/item/ammo_box/advanced/s12gauge/antitide - name = "4NT1-TD3 'Suppressor' ammo box" - icon_state = "antitide" - ammo_type = /obj/item/ammo_casing/shotgun/antitide - max_ammo = 15 - -/obj/item/ammo_box/advanced/s12gauge/iceblox - name = "Iceshot ammo box" - icon_state = "iceblox" - ammo_type = /obj/item/ammo_casing/shotgun/iceblox - max_ammo = 15 - -/obj/item/ammo_box/advanced/s12gauge/incendiary - name = "Incendiary Slug ammo box" - icon_state = "incendiary" - ammo_type = /obj/item/ammo_casing/shotgun/incendiary - max_ammo = 15 - -/obj/item/ammo_box/advanced/s12gauge/honk - name = "Confetti ammo box" - icon_state = "honk" - ammo_type = /obj/item/ammo_casing/shotgun/honk - max_ammo = 35 diff --git a/modular_skyrat/modules/shotgunrebalance/code/autolathe_design.dm b/modular_skyrat/modules/shotgunrebalance/code/autolathe_design.dm deleted file mode 100644 index a45c5df389d656..00000000000000 --- a/modular_skyrat/modules/shotgunrebalance/code/autolathe_design.dm +++ /dev/null @@ -1,58 +0,0 @@ -//12 Gauge -/datum/design/shotgun_slug - name = "Shotgun Slug" - id = "shotgun_slug" - build_type = AUTOLATHE - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2) - build_path = /obj/item/ammo_casing/shotgun - category = list(RND_CATEGORY_HACKED, RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO) - -/datum/design/shotgun_slug/sec - id = "sec_shotgun_slug" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT) - category = list(RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY - autolathe_exportable = FALSE - -/datum/design/buckshot_shell - name = "Buckshot Shell" - id = "buckshot_shell" - build_type = AUTOLATHE - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2) - build_path = /obj/item/ammo_casing/shotgun/buckshot - category = list(RND_CATEGORY_HACKED, RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO) - -/datum/design/buckshot_shell/sec - id = "sec_buckshot_shell" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT) - category = list(RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY - autolathe_exportable = FALSE - -//Existing Designs Discounting - -/datum/design/rubbershot - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2) - -/datum/design/rubbershot/sec - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT) - -/datum/design/beanbag_slug - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2) - -/datum/design/beanbag_slug/sec - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT) - -/datum/design/shotgun_dart - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2) - -/datum/design/shotgun_dart/sec - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT) - -/datum/design/incendiary_slug - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2) - -/datum/design/incendiary_slug/sec - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT) diff --git a/modular_skyrat/modules/shotgunrebalance/code/shotgun.dm b/modular_skyrat/modules/shotgunrebalance/code/shotgun.dm deleted file mode 100644 index 853ac892aa1e11..00000000000000 --- a/modular_skyrat/modules/shotgunrebalance/code/shotgun.dm +++ /dev/null @@ -1,367 +0,0 @@ -#define AMMO_MATS_SHOTGUN list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 4) // not quite as thick as a half-sheet - -#define AMMO_MATS_SHOTGUN_PT20 list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3,\ - /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 0.5,\ - /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 0.5) // plastitanium slug - -#define AMMO_MATS_SHOTGUN_RIP list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3,\ - /datum/material/bronze = SMALL_MATERIAL_AMOUNT * 1) // the bronze is because real RIP shells are made with copper, apparently - -#define AMMO_MATS_SHOTGUN_FLECH list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,\ - /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 2) - -#define AMMO_MATS_SHOTGUN_HIVE list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,\ - /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 1,\ - /datum/material/silver = SMALL_MATERIAL_AMOUNT * 1) - -#define AMMO_MATS_SHOTGUN_TIDE list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,\ - /datum/material/gold = SMALL_MATERIAL_AMOUNT * 1,\ - /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 1) // i mean. i - i guess? - -#define AMMO_MATS_SHOTGUN_TEMP list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,\ - /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 2) // covers both iceblox and incendiary - -/obj/item/ammo_casing/shotgun - icon = 'modular_skyrat/modules/shotgunrebalance/icons/shotshells.dmi' - desc = "A 12 gauge iron slug." - custom_materials = AMMO_MATS_SHOTGUN - -// THE BELOW TWO SLUGS ARE NOTED AS ADMINONLY AND HAVE ***EIGHTY*** WOUND BONUS. NOT BARE WOUND BONUS. FLAT WOUND BONUS. -/obj/item/ammo_casing/shotgun/executioner - name = "expanding shotgun slug" - desc = "A 12 gauge fragmenting slug purpose-built to annihilate flesh on impact." - can_be_printed = FALSE // noted as adminonly in code/modules/projectiles/projectile/bullets/shotgun.dm. - -/obj/item/ammo_casing/shotgun/pulverizer - name = "pulverizer shotgun slug" - desc = "A 12 gauge uranium slug purpose-built to break bones on impact." - can_be_printed = FALSE // noted as adminonly in code/modules/projectiles/projectile/bullets/shotgun.dm - -/obj/item/ammo_casing/shotgun/incendiary - name = "incendiary slug" - desc = "A 12 gauge magnesium slug meant for \"setting shit on fire and looking cool while you do it\".\ - <br><br>\ - <i>INCENDIARY: Leaves a trail of fire when shot, sets targets aflame.</i>" - advanced_print_req = TRUE - custom_materials = AMMO_MATS_SHOTGUN_TEMP - -/obj/item/ammo_casing/shotgun/techshell - can_be_printed = FALSE // techshell... casing! so not really usable on its own but if you're gonna make these go raid a seclathe. - -/obj/item/ammo_casing/shotgun/improvised - can_be_printed = FALSE // this is literally made out of scrap why would you use this if you have a perfectly good ammolathe - -/obj/item/ammo_casing/shotgun/dart/bioterror - can_be_printed = FALSE // PRELOADED WITH TERROR CHEMS MAYBE LET'S NOT - -/obj/item/ammo_casing/shotgun/dragonsbreath - can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble - -/obj/item/ammo_casing/shotgun/stunslug - name = "taser slug" - desc = "A 12 gauge silver slug with electrical microcomponents meant to incapacitate targets." - can_be_printed = FALSE // comment out if you want rocket tag shotgun ammo being printable - -/obj/item/ammo_casing/shotgun/meteorslug - name = "meteor slug" - desc = "A 12 gauge shell rigged with CMC technology which launches a heap of matter with great force when fired.\ - <br><br>\ - <i>METEOR: Fires a meteor-like projectile that knocks back movable objects like people and airlocks.</i>" - can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble - -/obj/item/ammo_casing/shotgun/frag12 - name = "FRAG-12 slug" - desc = "A 12 gauge shell containing high explosives designed for defeating some barriers and light vehicles, disrupting IEDs, or intercepting assistants.\ - <br><br>\ - <i>HIGH EXPLOSIVE: Explodes on impact.</i>" - can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble - -/obj/item/ammo_casing/shotgun/pulseslug - can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble - -/obj/item/ammo_casing/shotgun/laserslug - can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble - -/obj/item/ammo_casing/shotgun/ion - can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble - -/obj/item/ammo_casing/shotgun/incapacitate - name = "hornet's nest shell" - desc = "A 12 gauge shell filled with some kind of material that excels at incapacitating targets. Contains a lot of pellets, \ - sacrificing individual pellet strength for sheer stopping power in what's best described as \"spitting distance\".\ - <br><br>\ - <i>HORNET'S NEST: Fire an overwhelming amount of projectiles in a single shot.</i>" - // ...you know what if you're confident you can get up in there, you might as well get to use it if you're able to print Weird Shells. - -/obj/item/ammo_casing/shotgun/hp - name = "hollow point slug" - desc = "A 12 gauge hollow point slug purpose built for unarmored targets." - icon_state = "stunshell" - projectile_type = /obj/projectile/bullet/shotgun_slug/hp - advanced_print_req = TRUE - -/obj/projectile/bullet/shotgun_slug/hp - name = "12g hollow point shotgun slug" - damage = 60 - wound_bonus = 0 - bare_wound_bonus = 40 - weak_against_armour = TRUE - -/obj/item/ammo_casing/shotgun/pt20 - name = "PT-20 armor piercing slug" - desc = "A 12 gauge plastitanium slug purpose built to penetrate armored targets." - icon_state = "apshell" - projectile_type = /obj/projectile/bullet/shotgun_slug/pt20 - custom_materials = AMMO_MATS_SHOTGUN_PT20 - advanced_print_req = TRUE - -/obj/projectile/bullet/shotgun_slug/pt20 - name = "armor piercing shotgun slug" - damage = 40 - armour_penetration = 50 - -/obj/item/ammo_casing/shotgun/rip - name = "RIP shotgun slug" - desc = "A Radically Invasive Projectile Slug that is designed to cause massive damage against unarmored targets by embedding inside them." - icon_state = "ripshell" - projectile_type = /obj/projectile/bullet/shotgun_slug/rip - custom_materials = AMMO_MATS_SHOTGUN_RIP - advanced_print_req = TRUE - -/obj/projectile/bullet/shotgun_slug/rip - name = "RIP shotgun slug" - damage = 50 - weak_against_armour = TRUE - embedding = list(embed_chance=80, pain_chance=40, fall_chance=5, jostle_chance=5, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.5, pain_mult=5, rip_time=30) - -/obj/item/ammo_casing/shotgun/buckshot - name = "buckshot shell" - desc = "A 12 gauge buckshot shell." - icon_state = "gshell" - projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot - pellets = 8 //Original: 6 || 8 x 8 = 64 Damage Potential, 34 Damage at 4 tile range - variance = 25 - -/obj/projectile/bullet/pellet/shotgun_buckshot - name = "buckshot pellet" - damage = 8//7.5 - wound_bonus = 5 - bare_wound_bonus = 5 - wound_falloff_tile = -2.5 // low damage + additional dropoff will already curb wounding potential anything past point blank - weak_against_armour = TRUE // Did you knew shotguns are actually shit against armor? - -/obj/item/ammo_casing/shotgun/rubbershot - name = "rubber shot" - desc = "A shotgun casing filled with densely-packed rubber balls, used to incapacitate crowds from a distance." - icon_state = "rshell" - projectile_type = /obj/projectile/bullet/pellet/shotgun_rubbershot - pellets = 7 - variance = 20 - harmful = FALSE - -/obj/item/ammo_casing/shotgun/magnum - name = "magnum buckshot shell" - desc = "A 12 gauge buckshot shell that fires bigger pellets but has more spread. It is able to contend against armored targets." - icon_state = "magshell" - projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/magnum - pellets = 6 //6 x 10 = 60 Damage Potential, 27 Damage at 4 tile range - variance = 30 - advanced_print_req = TRUE - -/obj/projectile/bullet/pellet/shotgun_buckshot/magnum - name = "magnum buckshot pellet" - damage = 10 - wound_bonus = 8 - weak_against_armour = FALSE - -/obj/item/ammo_casing/shotgun/express - name = "express buckshot shell" - desc = "A 12 gauge buckshot shell that has tighter spread and smaller projectiles." - icon_state = "expshell" - projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/express - pellets = 9 //6 x 9 = 51 Damage Potential, 33 Damage at 4 tile range - variance = 20 //tighter spread - -/obj/projectile/bullet/pellet/shotgun_buckshot/express - name = "express buckshot pellet" - damage = 6 - speed = 0.6 - -/obj/item/ammo_casing/shotgun/flechette - name = "flechette shell" - desc = "A 12 gauge flechette shell that specializes in ripping through armor." - icon_state = "fshell" - projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/flechette - pellets = 8 //8 x 6 = 48 Damage Potential - variance = 25 - custom_materials = AMMO_MATS_SHOTGUN_FLECH - advanced_print_req = TRUE - -/obj/projectile/bullet/pellet/shotgun_buckshot/flechette - name = "flechette" - damage = 6 - weak_against_armour = FALSE //Were here to rip armor - armour_penetration = 40 - wound_bonus = 9 - bare_wound_bonus = 0 - sharpness = SHARP_EDGED //Did you knew flechettes fly sideways into people - -/obj/item/ammo_casing/shotgun/beehive - name = "B3-HVE 'Beehive' shell" - desc = "A highly experimental non-lethal shell filled with smart nanite pellets that re-aim themselves when bouncing off from surfaces. However they are not able to make out friend from foe." - icon_state = "cnrshell" - projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/beehive - pellets = 6 - variance = 20 - fire_sound = 'sound/weapons/taser.ogg' - harmful = FALSE - custom_materials = AMMO_MATS_SHOTGUN_HIVE - advanced_print_req = TRUE - -/obj/projectile/bullet/pellet/shotgun_buckshot/beehive - name = "beehive pellet" - damage = 4 - stamina = 10 - damage_falloff_tile = 0.1 - stamina_falloff_tile = 0.1 - wound_bonus = -5 - bare_wound_bonus = 5 - wound_falloff_tile = 0 - weak_against_armour = TRUE - sharpness = NONE - ricochets_max = 5 - ricochet_chance = 200 - ricochet_auto_aim_angle = 60 - ricochet_auto_aim_range = 8 - ricochet_decay_damage = 1 - ricochet_decay_chance = 1 - ricochet_incidence_leeway = 0 //nanomachines son - -/obj/item/ammo_casing/shotgun/antitide - name = "4NT1-TD3 'Suppressor' shell" - desc = "A highly experimental shell filled with nanite electrodes that will embed themselves in soft targets. The electrodes are charged from kinetic movement which means moving targets will get punished more." - icon_state = "lasershell" - projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/antitide - pellets = 5 - variance = 30 - harmful = FALSE - fire_sound = 'sound/weapons/taser.ogg' - custom_materials = AMMO_MATS_SHOTGUN_TIDE - advanced_print_req = TRUE - -/obj/projectile/bullet/pellet/shotgun_buckshot/antitide - name = "electrode" - damage = 4 - stamina = 6 - damage_falloff_tile = 0.2 - stamina_falloff_tile = 0.3 - wound_bonus = 0 - bare_wound_bonus = 0 - stutter = 3 SECONDS - jitter = 5 SECONDS - eyeblur = 1 SECONDS - weak_against_armour = TRUE - sharpness = NONE - range = 8 - icon_state = "spark" - embedding = list(embed_chance=70, pain_chance=25, fall_chance=15, jostle_chance=80, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.9, pain_mult=2, rip_time=10) - -/obj/projectile/bullet/pellet/shotgun_buckshot/antitide/Initialize(mapload) - . = ..() - SpinAnimation() - transform *= 0.25 - -/obj/projectile/bullet/pellet/shotgun_buckshot/antitide/on_range() - do_sparks(1, TRUE, src) - ..() - -/obj/item/ammo_casing/shotgun/iceblox - name = "Iceshot shell" - desc = "A highly experimental shell filled with nanites that will lower the body temperature of hit targets." - icon_state = "tshell" - projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/iceblox - custom_materials = AMMO_MATS_SHOTGUN_TEMP - pellets = 5 - variance = 20 - advanced_print_req = TRUE - -/obj/projectile/bullet/pellet/shotgun_buckshot/iceblox //see /obj/projectile/temp for the original code - name = "iceblox pellet" - damage_falloff_tile = 0.35 - damage = 5 - weak_against_armour = TRUE - var/temperature = 30 - -/obj/projectile/bullet/pellet/shotgun_buckshot/iceblox/on_hit(atom/target, blocked = 0, pierce_hit) - . = ..() - if(isliving(target)) - var/mob/living/UnluckyBastard = target - UnluckyBastard.adjust_bodytemperature(((100-blocked)/100)*(temperature - UnluckyBastard.bodytemperature)) - -/obj/item/ammo_casing/shotgun/hunter - name = "hunter buckshot shell" - desc = "A 12 gauge buckshot shell that fires specially charged pellets that deal extra damage to simpler beings." - icon_state = "huntershell" - projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/hunter - pellets = 6 // 6 x 30 = 180 damage vs simples - variance = 30 - -/obj/projectile/bullet/pellet/shotgun_buckshot/hunter - name = "hunter buckshot pellet" - damage = 5 - wound_bonus = 0 - weak_against_armour = FALSE - /// Bonus force dealt against certain factions - var/faction_bonus_force = 25 - /// Any mob with a faction that exists in this list will take bonus damage/effects - var/list/nemesis_path = /mob/living/simple_animal - -/obj/projectile/bullet/pellet/shotgun_buckshot/hunter/prehit_pierce(mob/living/target, mob/living/carbon/human/user) - if(istype(target, nemesis_path)) - damage += faction_bonus_force - .=..() - -/obj/projectile/bullet/pellet/shotgun_improvised - weak_against_armour = TRUE // We will not have Improvised are Better 2.0 - -/obj/item/ammo_casing/shotgun/honk - name = "confetti shell" - desc = "A 12 gauge buckshot shell thats been filled to the brim with confetti. Who is making all these?" - icon_state = "honkshell" - projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/honk - pellets = 12 - variance = 35 - fire_sound = 'sound/items/bikehorn.ogg' - harmful = FALSE - -/obj/projectile/bullet/pellet/shotgun_buckshot/honk - name = "confetti" - damage = 0 - stamina = 1 - stamina_falloff_tile = 0 - wound_bonus = 0 - bare_wound_bonus = 0 - jitter = 1 SECONDS - eyeblur = 1 SECONDS - sharpness = NONE - hitsound = SFX_CLOWN_STEP - range = 12 - icon_state = "guardian" - embedding = null - -/obj/projectile/bullet/pellet/shotgun_buckshot/honk/Initialize(mapload) - . = ..() - SpinAnimation() - range = rand(6, 12) - color = pick( - COLOR_PRIDE_RED, - COLOR_PRIDE_ORANGE, - COLOR_PRIDE_YELLOW, - COLOR_PRIDE_GREEN, - COLOR_PRIDE_BLUE, - COLOR_PRIDE_PURPLE, - ) - -/obj/projectile/bullet/pellet/shotgun_buckshot/honk/on_range() - do_sparks(1, TRUE, src) - ..() diff --git a/modular_skyrat/modules/skyrat-uplinks/code/categories/bundles.dm b/modular_skyrat/modules/skyrat-uplinks/code/categories/bundles.dm deleted file mode 100644 index a58f6b5c338ffc..00000000000000 --- a/modular_skyrat/modules/skyrat-uplinks/code/categories/bundles.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/uplink_item/bundles_tc/surplus - desc = "A dusty crate from the back of the Syndicate warehouse delivered directly to you via Supply Pod. \ - Contents are sorted to always be worth 50 TC. The Syndicate will only provide one surplus item per agent." - crate_tc_value = 50 - -/datum/uplink_item/bundles_tc/surplus/united - desc = "A shiny and large crate to be delivered directly to you via Supply Pod. It has an advanced locking mechanism with an anti-tampering protocol. \ - It is recommended that you only attempt to open it by having another agent purchase a Surplus Crate Key. Unite and fight. \ - Contents are sorted to always be worth 125 TC. The Syndicate will only provide one surplus item per agent." - crate_tc_value = 125 diff --git a/modular_skyrat/modules/skyrat-uplinks/code/categories/suits.dm b/modular_skyrat/modules/skyrat-uplinks/code/categories/suits.dm deleted file mode 100644 index e03cf398757cce..00000000000000 --- a/modular_skyrat/modules/skyrat-uplinks/code/categories/suits.dm +++ /dev/null @@ -1,23 +0,0 @@ -/datum/uplink_item/suits/standard_armor - name = "Standard Armor Vest" - desc = "A slim Type I armored vest that provides decent protection against most types of damage." - item = /obj/item/clothing/suit/armor/vest - cost = 1 - illegal_tech = FALSE - progression_minimum = 10 MINUTES - -/datum/uplink_item/suits/bulletproof_armor - name = "Bulletproof Armor Vest" - desc = "A Type III heavy bulletproof vest that excels in protecting the wearer against traditional projectile weaponry and explosives to a minor extent." - item = /obj/item/clothing/suit/armor/bulletproof - cost = 3 - illegal_tech = FALSE - progression_minimum = 15 MINUTES - -/datum/uplink_item/suits/swathelmet_traitor - name = "Syndicate Helmet" - desc = "An extremely robust, space-worthy helmet in a nefarious red and black stripe pattern." - item = /obj/item/clothing/head/helmet/swat - cost = 2 - illegal_tech = FALSE - progression_minimum = 10 MINUTES diff --git a/modular_skyrat/modules/skyrat_access_helpers/README.md b/modular_skyrat/modules/skyrat_access_helpers/README.md deleted file mode 100644 index 4e86247152e67a..00000000000000 --- a/modular_skyrat/modules/skyrat_access_helpers/README.md +++ /dev/null @@ -1,7 +0,0 @@ -## Title: Skyrat Access Helpers - -Module ID: skyrat_access_helpers - -## Description: - -Adds modular access_helpers for mapping. diff --git a/modular_skyrat/modules/soulstone_changes/readme.md b/modular_skyrat/modules/soulstone_changes/readme.md deleted file mode 100644 index 0185eb05827f68..00000000000000 --- a/modular_skyrat/modules/soulstone_changes/readme.md +++ /dev/null @@ -1,40 +0,0 @@ -# Pull Request Link - -'https://github.com/Skyrat-SS13/Skyrat-tg/pull/'<!--PR Number--> - -## Title: <!--Title of your addition--> - -MODULE ID: SOULSTONE_CHANGES<!-- uppercase, underscore_connected name of your module, that you use to mark files--> - -### Description - -Makes soulstone no longer permakill people, and makes construct's souls return to their original bodies if the construct is killed. -<!-- Here, try to describe what your PR does, what features it provides and any other directly useful information --> - -### TG Proc/File Changes - -- code/modules/antagonist/wizard/equipment/soulstone.dm > /obj/item/soulstone/proc/transfer_soul() -- code/modules/antagonist/wizard/equipment/soulstone.dm > /obj/item/soulstone/proc/init_shade() -- code/modules/antagonist/wizard/equipment/soulstone.dm > /obj/item/soulstone/proc/getCultGhost() - -<!-- If you had to edit, or append to any core procs in the process of making this PR, list them here. APPEND: Also, please include any files that you've changed. .DM files that is. --> - -### Defines - -- code/__DEFINES/~skyrat_defines/traits.dm > TRAIT_SACRIFICED -<!-- If you needed to add any defines, mention the files you added those defines in --> - -### Master file additions - -- N/A -<!-- Any master file changes you've made to existing master files or if you've added a new master file. Please mark either as #NEW or #CHANGE --> - -### Included files that are not contained in this module - -- N/A -<!-- Likewise, be it a non-modular file or a modular one that's not contained within the folder belonging to this specific module, it should be mentioned here --> - -### Credits - -`https://github.com/Arturlang` -<!-- Here go the credits to you, dear coder, and in case of collaborative work or ports, credits to the original source of the code --> diff --git a/modular_skyrat/modules/stasisrework/code/medical_designs.dm b/modular_skyrat/modules/stasisrework/code/medical_designs.dm deleted file mode 100644 index 7ced4d0daf4550..00000000000000 --- a/modular_skyrat/modules/stasisrework/code/medical_designs.dm +++ /dev/null @@ -1,17 +0,0 @@ -/datum/design/stasisbag - name = "Stasis Body Bag" - desc = "A stasis body bag, powered by cryogenic stasis technology. It can hold only one body, but it prevents decay." - id = "stasisbag" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, /datum/material/plasma = SHEET_MATERIAL_AMOUNT, /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/bodybag/stasis - category = list(RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE - -/datum/design/board/stasissleeper - name = "Machine Design (Lifeform Stasis Unit)" - desc = "The circuit board for a Stasis Unit" - id = "stasissleeper" - build_path = /obj/item/circuitboard/machine/stasissleeper - category = list(RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_MEDICAL) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL diff --git a/modular_skyrat/modules/stone/icons/wall.dmi b/modular_skyrat/modules/stone/icons/wall.dmi deleted file mode 100644 index 853b753b6225f2..00000000000000 Binary files a/modular_skyrat/modules/stone/icons/wall.dmi and /dev/null differ diff --git a/modular_skyrat/modules/stormtrooper/code/stormtrooper_clothes.dm b/modular_skyrat/modules/stormtrooper/code/stormtrooper_clothes.dm deleted file mode 100644 index 938dc421bb35b3..00000000000000 --- a/modular_skyrat/modules/stormtrooper/code/stormtrooper_clothes.dm +++ /dev/null @@ -1,36 +0,0 @@ -/obj/item/clothing/head/helmet/stormtrooper - name = "stormtrooper helmet" - desc = "A shiny white helmet with some very narrow holes for the users eyes." - icon = 'modular_skyrat/modules/stormtrooper/icons/items.dmi' - worn_icon = 'modular_skyrat/modules/stormtrooper/icons/head.dmi' - icon_state = "stormtrooper_helmet" - supports_variations_flags = NONE - -/obj/item/clothing/suit/armor/stormtrooper - name = "stormtrooper suit" - desc = "A shiny white armoured suit, looks like it'd be good for deflecting blaster fire." - icon_state = "stormtrooper_suit" - icon = 'modular_skyrat/modules/stormtrooper/icons/items.dmi' - worn_icon = 'modular_skyrat/modules/stormtrooper/icons/suit.dmi' - supports_variations_flags = NONE - -/obj/item/clothing/shoes/combat/stormtrooper - name = "stormtrooper boots" - desc = "A pair of white boots." - icon = 'modular_skyrat/modules/stormtrooper/icons/items.dmi' - worn_icon = 'modular_skyrat/modules/stormtrooper/icons/feet.dmi' - icon_state = "stormtrooper_boots" - armor_type = /datum/armor/none - strip_delay = 30 - equip_delay_other = 50 - resistance_flags = NONE - can_be_tied = FALSE - supports_variations_flags = NONE - -/obj/item/clothing/gloves/combat/peacekeeper/stormtrooper - name = "stormtrooper gloves" - desc = "White gloves with some limited reflective armor." - icon = 'modular_skyrat/modules/stormtrooper/icons/items.dmi' - worn_icon = 'modular_skyrat/modules/stormtrooper/icons/hands.dmi' - icon_state = "stormtrooper_gloves" - worn_icon_state = "stormtrooper_gloves" diff --git a/modular_skyrat/modules/synths/code/README.md b/modular_skyrat/modules/synths/code/README.md deleted file mode 100644 index 8f37a1cec49409..00000000000000 --- a/modular_skyrat/modules/synths/code/README.md +++ /dev/null @@ -1,32 +0,0 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/18193, plus many others, which I can't find easily. - -## Synths - -Module ID: SYNTHS - -### Description: - -Adds in a roundstart robotic race. Currently in a very sad state, and is being worked on by RimiNosha at the moment. - -### TG Proc/File Changes: - -- defib.dm: /obj/item/shockpaddles/proc/do_help() modified -- Will fill out as I discover what edits were made to acommodate these. - -### Modular Overrides: - -- Will fill out as I discover what edits were made to acommodate these. - -### Defines: - -- ~skyrat_defines/medical_defines.dm: SYNTH_DEFIBBED_TRAUMA_DURATION -- ~skyrat_defines/medical_defines.dm: SYNTH_DEFIBBED_TRAUMA_SEVERITY - -### Included files that are not contained in this module: - -- N/A - -### Credits: -Niko - Making defibs fuck synths up -Nerevar - Initial code, I think. Correct this file if wrong. -RimiNosha - Updating the code and adding various QoL features. diff --git a/modular_skyrat/modules/synths/code/bodyparts/brain.dm b/modular_skyrat/modules/synths/code/bodyparts/brain.dm deleted file mode 100644 index 9d92635d4d8943..00000000000000 --- a/modular_skyrat/modules/synths/code/bodyparts/brain.dm +++ /dev/null @@ -1,66 +0,0 @@ -/obj/item/organ/internal/brain/synth - name = "compact positronic brain" - slot = ORGAN_SLOT_BRAIN - zone = BODY_ZONE_CHEST - organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES - maxHealth = 2 * STANDARD_ORGAN_THRESHOLD - desc = "A cube of shining metal, four inches to a side and covered in shallow grooves. It has an IPC serial number engraved on the top. It is usually slotted into the chest of synthetic crewmembers." - icon = 'modular_skyrat/master_files/icons/obj/surgery.dmi' - icon_state = "posibrain-ipc" - /// The last time (in ticks) a message about brain damage was sent. Don't touch. - var/last_message_time = 0 - -/obj/item/organ/internal/brain/synth/Insert(mob/living/carbon/user, special = FALSE, drop_if_replaced = TRUE, no_id_transfer = FALSE) - . = ..() - - if(user.stat != DEAD || !ishuman(user)) - return - - var/mob/living/carbon/human/user_human = user - if(HAS_TRAIT(user_human, TRAIT_REVIVES_BY_HEALING) && user_human.health > SYNTH_BRAIN_WAKE_THRESHOLD) - user_human.revive(FALSE) - -/obj/item/organ/internal/brain/synth/emp_act(severity) // EMP act against the posi, keep the cap far below the organ health - . = ..() - - if(!owner || . & EMP_PROTECT_SELF) - return - - if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people. - COOLDOWN_START(src, severe_cooldown, 10 SECONDS) - - switch(severity) - if(EMP_HEAVY) - to_chat(owner, span_warning("01001001 00100111 01101101 00100000 01100110 01110101 01100011 01101011 01100101 01100100 00101110")) - apply_organ_damage(SYNTH_ORGAN_HEAVY_EMP_DAMAGE, SYNTH_EMP_BRAIN_DAMAGE_MAXIMUM, required_organ_flag = ORGAN_ROBOTIC) - if(EMP_LIGHT) - to_chat(owner, span_warning("Alert: Electromagnetic damage taken in central processing unit. Error Code: 401-YT")) - apply_organ_damage(SYNTH_ORGAN_LIGHT_EMP_DAMAGE, SYNTH_EMP_BRAIN_DAMAGE_MAXIMUM, required_organ_flag = ORGAN_ROBOTIC) - -/obj/item/organ/internal/brain/synth/apply_organ_damage(damage_amount, maximumm, required_organ_flag) - . = ..() - - if(owner && damage > 0 && (world.time - last_message_time) > SYNTH_BRAIN_DAMAGE_MESSAGE_INTERVAL) - last_message_time = world.time - - if(damage > BRAIN_DAMAGE_SEVERE) - to_chat(owner, span_warning("Alre: re oumtnin ilir tocorr:pa ni ne:cnrrpiioruloomatt cessingode: P1_1-H")) - return - - if(damage > BRAIN_DAMAGE_MILD) - to_chat(owner, span_warning("Alert: Minor corruption in central processing unit. Error Code: 001-HP")) - -/obj/item/organ/internal/brain/synth/circuit - name = "compact AI circuit" - desc = "A compact and extremely complex circuit, perfectly dimensioned to fit in the same slot as a synthetic-compatible positronic brain. It is usually slotted into the chest of synthetic crewmembers." - icon = 'modular_skyrat/master_files/icons/obj/alt_silicon_brains.dmi' - icon_state = "circuit-occupied" - inhand_icon_state = "electronic" - lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - -/obj/item/organ/internal/brain/synth/mmi - name = "compact man-machine interface" - desc = "A compact man-machine interface, perfectly dimensioned to fit in the same slot as a synthetic-compatible positronic brain. Unfortunately, the brain seems to be permanently attached to the circuitry, and it seems relatively sensitive to it's environment. It is usually slotted into the chest of synthetic crewmembers." - icon = 'modular_skyrat/master_files/icons/obj/surgery.dmi' - icon_state = "mmi-ipc" diff --git a/modular_skyrat/modules/synths/code/bodyparts/ears.dm b/modular_skyrat/modules/synths/code/bodyparts/ears.dm deleted file mode 100644 index 841a69f9d589b0..00000000000000 --- a/modular_skyrat/modules/synths/code/bodyparts/ears.dm +++ /dev/null @@ -1,48 +0,0 @@ -/obj/item/organ/internal/ears/synth - name = "auditory sensors" - icon = 'modular_skyrat/master_files/icons/obj/surgery.dmi' - icon_state = "ears-ipc" - desc = "A pair of microphones intended to be installed in an IPC or Synthetics head, that grant the ability to hear." - zone = BODY_ZONE_HEAD - slot = ORGAN_SLOT_EARS - gender = PLURAL - maxHealth = 1 * STANDARD_ORGAN_THRESHOLD - organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES - -/obj/item/organ/internal/ears/synth/emp_act(severity) - . = ..() - - if(!owner || . & EMP_PROTECT_SELF) - return - - if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people. - COOLDOWN_START(src, severe_cooldown, 10 SECONDS) - - switch(severity) - if(EMP_HEAVY) - owner.set_jitter_if_lower(SYNTH_BAD_EFFECT_DURATION * SYNTH_HEAVY_EMP_MULTIPLIER) - owner.set_dizzy_if_lower(SYNTH_BAD_EFFECT_DURATION * SYNTH_HEAVY_EMP_MULTIPLIER) - adjustEarDamage(SYNTH_ORGAN_HEAVY_EMP_DAMAGE, SYNTH_DEAF_STACKS) - to_chat(owner, span_warning("Alert: Null feedback from auditory sensors detected, seek maintenance immediately. Error Code: AS-105")) - - if(EMP_LIGHT) - owner.set_jitter_if_lower(SYNTH_BAD_EFFECT_DURATION) - owner.set_dizzy_if_lower(SYNTH_BAD_EFFECT_DURATION) - adjustEarDamage(SYNTH_ORGAN_LIGHT_EMP_DAMAGE, SYNTH_DEAF_STACKS) - to_chat(owner, span_warning("Alert: Anomalous feedback from auditory sensors detected. Error Code: AS-50")) - -/datum/design/synth_ears - name = "Auditory Sensors" - desc = "A pair of microphones intended to be installed in an IPC or Synthetics head, that grant the ability to hear." - id = "synth_ears" - build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 4 SECONDS - materials = list( - /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, - /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, - ) - build_path = /obj/item/organ/internal/ears/synth - category = list( - RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1 - ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE diff --git a/modular_skyrat/modules/synths/code/bodyparts/heart.dm b/modular_skyrat/modules/synths/code/bodyparts/heart.dm deleted file mode 100644 index a17d99be2d7bb4..00000000000000 --- a/modular_skyrat/modules/synths/code/bodyparts/heart.dm +++ /dev/null @@ -1,44 +0,0 @@ -/obj/item/organ/internal/heart/synth - name = "hydraulic pump engine" - desc = "An electronic device that handles the hydraulic pumps, powering one's robotic limbs. Without this, synthetics are unable to move." - organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES - icon = 'modular_skyrat/master_files/icons/obj/surgery.dmi' - icon_state = "heart-ipc-on" - base_icon_state = "heart-ipc" - maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD // 1.5x due to synthcode.tm being weird - zone = BODY_ZONE_CHEST - slot = ORGAN_SLOT_HEART - var/last_message_time = 0 - -/obj/item/organ/internal/heart/synth/emp_act(severity) - . = ..() - - if(!owner || . & EMP_PROTECT_SELF) - return - - if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people. - COOLDOWN_START(src, severe_cooldown, 10 SECONDS) - - switch(severity) - if(EMP_HEAVY) - to_chat(owner, span_warning("Alert: Main hydraulic pump control has taken severe damage, seek maintenance immediately. Error code: HP300-10.")) - apply_organ_damage(SYNTH_ORGAN_HEAVY_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC) - if(EMP_LIGHT) - to_chat(owner, span_warning("Alert: Main hydraulic pump control has taken light damage, seek maintenance immediately. Error code: HP300-05.")) - apply_organ_damage(SYNTH_ORGAN_LIGHT_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC) - -/datum/design/synth_heart - name = "Hydraulic Pump Engine" - desc = "An electronic device that handles the hydraulic pumps, powering one's robotic limbs. Without this, synthetics are unable to move." - id = "synth_heart" - build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 4 SECONDS - materials = list( - /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, - /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, - ) - build_path = /obj/item/organ/internal/heart/synth - category = list( - RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1 - ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE diff --git a/modular_skyrat/modules/synths/code/bodyparts/liver.dm b/modular_skyrat/modules/synths/code/bodyparts/liver.dm deleted file mode 100644 index 43597e6d422e07..00000000000000 --- a/modular_skyrat/modules/synths/code/bodyparts/liver.dm +++ /dev/null @@ -1,44 +0,0 @@ -/obj/item/organ/internal/liver/synth - name = "reagent processing unit" - desc = "An electronic device that processes the beneficial chemicals for the synthetic user." - icon = 'modular_skyrat/master_files/icons/obj/surgery.dmi' - icon_state = "liver-ipc" - filterToxins = FALSE //We dont filter them, we're immune to them - zone = BODY_ZONE_CHEST - slot = ORGAN_SLOT_LIVER - maxHealth = 1 * STANDARD_ORGAN_THRESHOLD - organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES - -/obj/item/organ/internal/lungs/synth/emp_act(severity) - . = ..() - - if(. & EMP_PROTECT_SELF) - return - - if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people. - COOLDOWN_START(src, severe_cooldown, 10 SECONDS) - - switch(severity) - if(EMP_HEAVY) - to_chat(owner, span_warning("Alert: Critical! Reagent processing unit failure, seek maintenance immediately. Error Code: DR-1k")) - apply_organ_damage(SYNTH_ORGAN_HEAVY_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC) - - if(EMP_LIGHT) - to_chat(owner, span_warning("Alert: Reagent processing unit failure, seek maintenance for diagnostic. Error Code: DR-0k")) - apply_organ_damage(SYNTH_ORGAN_LIGHT_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC) - -/datum/design/synth_liver - name = "Reagent Processing Unit" - desc = "An electronic device that processes the beneficial chemicals for the synthetic user." - id = "synth_liver" - build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 4 SECONDS - materials = list( - /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, - /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, - ) - build_path = /obj/item/organ/internal/liver/synth - category = list( - RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1 - ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE diff --git a/modular_skyrat/modules/synths/code/bodyparts/lungs.dm b/modular_skyrat/modules/synths/code/bodyparts/lungs.dm deleted file mode 100644 index 69ff9d0dfcf51c..00000000000000 --- a/modular_skyrat/modules/synths/code/bodyparts/lungs.dm +++ /dev/null @@ -1,49 +0,0 @@ -/obj/item/organ/internal/lungs/synth - name = "heatsink" - desc = "A device that transfers generated heat to a fluid medium to cool it down. Required to keep your synthetics cool-headed. It's shape resembles lungs." //Purposefully left the 'fluid medium' ambigious for interpretation of the character, whether it be air or fluid cooling - icon = 'modular_skyrat/master_files/icons/obj/surgery.dmi' - icon_state = "lungs-ipc" - safe_nitro_min = 0 - safe_co2_max = 0 - safe_plasma_min = 0 - safe_plasma_max = 0 - safe_oxygen_min = 0 //What are you doing man, dont breathe with those! - safe_oxygen_max = 0 - zone = BODY_ZONE_CHEST - slot = ORGAN_SLOT_LUNGS - maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD - organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES - -/obj/item/organ/internal/lungs/synth/emp_act(severity) - . = ..() - - if(!owner || . & EMP_PROTECT_SELF) - return - - if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people. - COOLDOWN_START(src, severe_cooldown, 10 SECONDS) - - switch(severity) - if(EMP_HEAVY) - to_chat(owner, span_warning("Alert: Critical cooling system failure! Seek maintenance immediately. Error Code: 5H-17")) - owner.adjust_bodytemperature(SYNTH_HEAVY_EMP_TEMPERATURE_POWER * TEMPERATURE_DAMAGE_COEFFICIENT) - - if(EMP_LIGHT) - to_chat(owner, span_warning("Alert: Major cooling system failure!")) - owner.adjust_bodytemperature(SYNTH_LIGHT_EMP_TEMPERATURE_POWER * TEMPERATURE_DAMAGE_COEFFICIENT) - -/datum/design/synth_heatsink - name = "Heatsink" - desc = "A device that transfers generated heat to a fluid medium to cool it down. Required to keep your synthetics cool-headed. It's shape resembles lungs." - id = "synth_lungs" - build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 4 SECONDS - materials = list( - /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, - /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, - ) - build_path = /obj/item/organ/internal/lungs/synth - category = list( - RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1 - ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE diff --git a/modular_skyrat/modules/synths/code/bodyparts/silicon_alt_brains.dm b/modular_skyrat/modules/synths/code/bodyparts/silicon_alt_brains.dm deleted file mode 100644 index 399b5fd366001e..00000000000000 --- a/modular_skyrat/modules/synths/code/bodyparts/silicon_alt_brains.dm +++ /dev/null @@ -1,61 +0,0 @@ -// Don't know of a better place to put these. They're technically related to synths, so they're going here. - -/obj/item/mmi/posibrain/circuit - name = "compact AI circuit" - desc = "A compact circuit, perfectly dimensioned to fit in the same slot as a cyborg's positronic brain." - icon = 'modular_skyrat/master_files/icons/obj/alt_silicon_brains.dmi' - icon_state = "circuit" - base_icon_state = "circuit" - inhand_icon_state = "electronic" - lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - - // It pains me to copy-paste so much, but I can't do it any other way - begin_activation_message = span_notice("You carefully locate the manual activation switch and start the compact AI circuit's boot process.") - success_message = span_notice("The compact AI circuit pings, and its lights start flashing. Success!") - fail_message = span_notice("The compact AI circuit buzzes quietly, and the golden lights fade away. Perhaps you could try again?") - new_mob_message = span_notice("The compact AI circuit chimes quietly.") - recharge_message = span_warning("The compact AI circuit isn't ready to activate again yet! Give it some time to recharge.") - -// CODE THAT ACTUALLY APPLIES THE BRAINS. -// See modular_skyrat/master_files/code/modules/client/preferences/brain.dm for Synth/IPC application. - -/// Returns a type to use based off of a given preference value (ORGAN_PREF_POSI_BRAIN, ORGAN_PREF_MMI_BRAIN and ORGAN_PREF_CIRCUIT_BRAIN), and if they're a cyborg or not. -/mob/living/proc/prefs_get_brain_to_use(value, is_cyborg = FALSE) - switch(value) - if(ORGAN_PREF_POSI_BRAIN) - return is_cyborg ? /obj/item/mmi/posibrain : /obj/item/organ/internal/brain/synth - - if(ORGAN_PREF_MMI_BRAIN) - return is_cyborg ? /obj/item/mmi : /obj/item/organ/internal/brain/synth/mmi - - if(ORGAN_PREF_CIRCUIT_BRAIN) - return is_cyborg ? /obj/item/mmi/posibrain/circuit : /obj/item/organ/internal/brain/synth/circuit - -/mob/living/silicon/robot/Initialize(mapload) - . = ..() - // Intentionally set like this, because people have different lore for their cyborgs, and there's no real non-invasive way to print posibrains that match. - RegisterSignal(src, COMSIG_MOB_MIND_TRANSFERRED_INTO, PROC_REF(update_brain_type)) - -/// Sets the MMI type for a cyborg, if applicable. -/mob/living/silicon/robot/proc/update_brain_type() - var/obj/item/mmi/new_mmi = prefs_get_brain_to_use(client?.prefs?.read_preference(/datum/preference/choiced/brain_type), TRUE) - if(!mmi || !new_mmi || new_mmi == mmi.type) - return - - new_mmi = new new_mmi() - - // Probably shitcode, but silicon code is spaghetti as fuck. - new_mmi.brain = new /obj/item/organ/internal/brain(new_mmi) - new_mmi.brain.organ_flags |= ORGAN_FROZEN - new_mmi.brain.name = "[real_name]'s brain" - new_mmi.name = "[initial(new_mmi.name)]: [real_name]" - new_mmi.set_brainmob(new /mob/living/brain(new_mmi)) - new_mmi.brainmob.name = src.real_name - new_mmi.brainmob.real_name = src.real_name - new_mmi.brainmob.container = new_mmi - new_mmi.update_appearance() - - QDEL_NULL(mmi) - - mmi = new_mmi diff --git a/modular_skyrat/modules/synths/code/bodyparts/stomach.dm b/modular_skyrat/modules/synths/code/bodyparts/stomach.dm deleted file mode 100644 index c55f64e206209b..00000000000000 --- a/modular_skyrat/modules/synths/code/bodyparts/stomach.dm +++ /dev/null @@ -1,48 +0,0 @@ -/obj/item/organ/internal/stomach/synth - name = "synthetic bio-reactor" - icon = 'modular_skyrat/master_files/icons/obj/surgery.dmi' - icon_state = "stomach-ipc" - w_class = WEIGHT_CLASS_NORMAL - zone = BODY_ZONE_CHEST - slot = ORGAN_SLOT_STOMACH - maxHealth = 1 * STANDARD_ORGAN_THRESHOLD - zone = "chest" - slot = "stomach" - desc = "A specialised mini reactor, for synthetic use only. Has a low-power mode to ensure baseline functions. Without this, synthetics are unable to stay powered." - organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES - -/obj/item/organ/internal/stomach/synth/emp_act(severity) - . = ..() - - if(!owner || . & EMP_PROTECT_SELF) - return - - if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people. - COOLDOWN_START(src, severe_cooldown, 10 SECONDS) - - switch(severity) - if(EMP_HEAVY) - owner.nutrition = max(0, owner.nutrition - SYNTH_STOMACH_HEAVY_EMP_CHARGE_LOSS) - apply_organ_damage(SYNTH_ORGAN_HEAVY_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC) - to_chat(owner, span_warning("Alert: Severe battery discharge!")) - - if(EMP_LIGHT) - owner.nutrition = max(0, owner.nutrition - SYNTH_STOMACH_LIGHT_EMP_CHARGE_LOSS) - apply_organ_damage(SYNTH_ORGAN_LIGHT_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC) - to_chat(owner, span_warning("Alert: Minor battery discharge!")) - -/datum/design/synth_stomach - name = "Synthetic Bio-Reactor" - desc = "A specialised mini reactor, for synthetic use only. Has a low-power mode to ensure baseline functions. Without this, synthetics are unable to stay powered." - id = "synth_stomach" - build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 4 SECONDS - materials = list( - /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, - /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, - ) - build_path = /obj/item/organ/internal/stomach/synth - category = list( - RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1 - ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE diff --git a/modular_skyrat/modules/synths/code/bodyparts/tongue.dm b/modular_skyrat/modules/synths/code/bodyparts/tongue.dm deleted file mode 100644 index d5c2564fdb3201..00000000000000 --- a/modular_skyrat/modules/synths/code/bodyparts/tongue.dm +++ /dev/null @@ -1,36 +0,0 @@ -/obj/item/organ/internal/tongue/synth - name = "synthetic voicebox" - desc = "A fully-functional synthetic tongue, encased in soft silicone. Features include high-resolution vocals and taste receptors." - icon = 'modular_skyrat/modules/organs/icons/cyber_tongue.dmi' - icon_state = "cybertongue" - say_mod = "beeps" - attack_verb_continuous = list("beeps", "boops") - attack_verb_simple = list("beep", "boop") - modifies_speech = TRUE - taste_sensitivity = 25 // not as good as an organic tongue - maxHealth = 100 //RoboTongue! - zone = BODY_ZONE_HEAD - slot = ORGAN_SLOT_TONGUE - organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES - -/obj/item/organ/internal/tongue/synth/can_speak_language(language) - return TRUE - -/obj/item/organ/internal/tongue/synth/handle_speech(datum/source, list/speech_args) - speech_args[SPEECH_SPANS] |= SPAN_ROBOT - -/datum/design/synth_tongue - name = "Synthetic Tongue" - desc = "A fully-functional synthetic tongue, encased in soft silicone. Features include high-resolution vocals and taste receptors." - id = "synth_tongue" - build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 4 SECONDS - materials = list( - /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, - /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, - ) - build_path = /obj/item/organ/internal/tongue/synth - category = list( - RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1 - ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE diff --git a/modular_skyrat/modules/synths/code/reagents/reagents.dm b/modular_skyrat/modules/synths/code/reagents/reagents.dm deleted file mode 100644 index ef48f0bf9479ae..00000000000000 --- a/modular_skyrat/modules/synths/code/reagents/reagents.dm +++ /dev/null @@ -1,107 +0,0 @@ -#define NANITE_SLURRY_ORGANIC_PURGE_RATE 4 -#define NANITE_SLURRY_ORGANIC_VOMIT_CHANCE 25 - -/datum/reagent/medicine/syndicate_nanites //Used exclusively by Syndicate medical cyborgs - process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC //Let's not cripple synth ops - -/datum/reagent/medicine/lesser_syndicate_nanites - process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC - -/datum/reagent/medicine/stimulants - process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC //Syndicate developed 'accelerants' for synths? - -/datum/reagent/medicine/leporazine - process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC - -/datum/reagent/flightpotion - process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC - -// REAGENTS FOR SYNTHS - -/datum/reagent/medicine/system_cleaner - name = "System Cleaner" - description = "Neutralizes harmful chemical compounds inside synthetic systems and refreshes system software." - reagent_state = LIQUID - color = "#F1C40F" - taste_description = "ethanol" - metabolization_rate = 2 * REAGENTS_METABOLISM - process_flags = REAGENT_SYNTHETIC - -/datum/reagent/medicine/system_cleaner/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) - affected_mob.adjustToxLoss(-2 * REM * seconds_per_tick, 0) - affected_mob.adjust_disgust(-5 * REM * seconds_per_tick) - var/remove_amount = 1 * REM * seconds_per_tick; - for(var/thing in affected_mob.reagents.reagent_list) - var/datum/reagent/reagent = thing - if(reagent != src) - affected_mob.reagents.remove_reagent(reagent.type, remove_amount) - ..() - return TRUE - -/datum/reagent/medicine/liquid_solder - name = "Liquid Solder" - description = "Repairs brain damage in synthetics." - reagent_state = LIQUID - color = "#727272" - taste_description = "metal" - process_flags = REAGENT_SYNTHETIC - -/datum/reagent/medicine/liquid_solder/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick) - affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, -3 * REM * seconds_per_tick) - if(prob(10)) - affected_mob.cure_trauma_type(resilience = TRAUMA_RESILIENCE_BASIC) - return ..() - -/datum/reagent/medicine/nanite_slurry - name = "Nanite Slurry" - description = "A localized swarm of nanomachines specialized in repairing mechanical parts. Due to the nanites needing to interface with the host's systems to repair them, a surplus of them will cause them to overheat, or for the swarm to forcefully eject out of the mouth of organics for safety." - reagent_state = LIQUID - color = "#cccccc" - overdose_threshold = 20 - metabolization_rate = 1.25 * REAGENTS_METABOLISM - process_flags = REAGENT_SYNTHETIC | REAGENT_ORGANIC - chemical_flags = REAGENT_CAN_BE_SYNTHESIZED - /// How much brute and burn individually is healed per tick - var/healing = 1 - /// How much body temperature is increased by per overdose cycle on robotic bodyparts. - var/temperature_change = 50 - - -/datum/reagent/medicine/nanite_slurry/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick) - var/heal_amount = healing * REM * seconds_per_tick - affected_mob.heal_bodypart_damage(heal_amount, heal_amount, required_bodytype = BODYTYPE_ROBOTIC) - return ..() - -/datum/reagent/medicine/nanite_slurry/overdose_process(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) - if(affected_mob.mob_biotypes & MOB_ROBOTIC) - affected_mob.adjust_bodytemperature(temperature_change * REM * seconds_per_tick) - return ..() - affected_mob.reagents.remove_reagent(type, NANITE_SLURRY_ORGANIC_PURGE_RATE) //gets removed from organics very fast - if(prob(NANITE_SLURRY_ORGANIC_VOMIT_CHANCE)) - affected_mob.vomit(vomit_flags = (MOB_VOMIT_MESSAGE | MOB_VOMIT_HARM), vomit_type = /obj/effect/decal/cleanable/vomit/nanites) - return TRUE - -#undef NANITE_SLURRY_ORGANIC_PURGE_RATE -#undef NANITE_SLURRY_ORGANIC_VOMIT_CHANCE - - -/datum/reagent/medicine/taste_suppressor - name = "Taste Suppressor" - description = "A colorless medicine aimed to dull the sense of taste of those that consumed it, as long as it's in their system." - color = "#AAAAAA77" - reagent_state = LIQUID - metabolization_rate = 0.5 * REAGENTS_METABOLISM - chemical_flags = REAGENT_CAN_BE_SYNTHESIZED - chemical_flags_skyrat = REAGENT_BLOOD_REGENERATING // It has REAGENT_BLOOD_REGENERATING only because it makes it so Hemophages can safely drink it, which makes complete sense considering this is meant to suppress their tumor's reactiveness to anything that doesn't regenerate blood. - - -/datum/reagent/medicine/taste_suppressor/on_mob_metabolize(mob/living/affected_mob) - . = ..() - - ADD_TRAIT(affected_mob, TRAIT_AGEUSIA, REAGENT_TRAIT) - - -/datum/reagent/medicine/taste_suppressor/on_mob_end_metabolize(mob/living/affected_mob) - . = ..() - - REMOVE_TRAIT(affected_mob, TRAIT_AGEUSIA, REAGENT_TRAIT) diff --git a/modular_skyrat/modules/tagline/code/world.dm b/modular_skyrat/modules/tagline/code/world.dm deleted file mode 100644 index f158b310640c4c..00000000000000 --- a/modular_skyrat/modules/tagline/code/world.dm +++ /dev/null @@ -1,40 +0,0 @@ -/world/proc/update_status() - - var/list/features = list() - - var/s = "" - var/hostedby - if(config) - var/server_name = CONFIG_GET(string/servername) - if (server_name) - s += "<b>[server_name]</b> — " - hostedby = CONFIG_GET(string/hostedby) - - s += " (" - s += "<a href=\"[CONFIG_GET(string/discord_link)]\">" - s += "Discord" - s += ")\]" - s += "<br>[CONFIG_GET(string/servertagline)]<br>" - - - var/n = 0 - for (var/mob/M in GLOB.player_list) - if (M.client) - n++ - - if(SSmapping.config) - features += "[SSmapping.config.map_name]" - - if (n > 1) - features += "~[n] players" - else if (n > 0) - features += "~[n] player" - - if (!host && hostedby) - features += "hosted by <b>[hostedby]</b>" - - if (features) - s += "\[[jointext(features, ", ")]" - - status = s - diff --git a/modular_skyrat/modules/title_screen/icons/skyrat_title_screen.png b/modular_skyrat/modules/title_screen/icons/skyrat_title_screen.png deleted file mode 100644 index 3141156a6bde28..00000000000000 Binary files a/modular_skyrat/modules/title_screen/icons/skyrat_title_screen.png and /dev/null differ diff --git a/modular_skyrat/modules/title_screen/readme.md b/modular_skyrat/modules/title_screen/readme.md deleted file mode 100644 index 64b56e5bbc94c9..00000000000000 --- a/modular_skyrat/modules/title_screen/readme.md +++ /dev/null @@ -1,38 +0,0 @@ -# Title: Lobby screens! - -MODULE ID: lobbyscreen - -## Description: - -Adds a brand new look to the lobby screen, adds a splash screen too, since that shit is awesome. Inspired by TauCeti, heavily modified by me. - -## Guide: - -To make sure your server doesn't/does have this feature, see config.txt -##Enable server swapping, uncomment to enable reading of swap_ips.txt (file directory: config/skyrat/swap_ips.txt) -SERVER_SWAP_ENABLED -if you use this, make sure swap_ips.txt is present in skyrat config. - -We offer the option to customise the lobby HTML by giving you access to a file named lobby_html.txt in the config. The server will runtime if this file does not exist. Ensure it exists in directory config/skyrat/lobby_html.txt. - -DO NOT UNDER ANY CIRCUMSTANCES RENAME THE ELEMENTS WITHIN THE HTML FILE, KEEP THEM AS THEY ARE. - -Elements: -.bg - the background image -.container_terminal - This is the startup terminal html, generally, don't change this unless you want a cooler startup terminal. -.terminal_text - Terminal text -.container_progress - This is the container for the progress bar. Changing this likely involves changing the .container_terminal. -.progress_bar - The moving part of the progress bar. Must start at 0% width; the body script updates the width live. -.fade_out - Generic class that fades content out. Currently applied to .container_progress when the progress bar overruns 100%. -.container_nav - This is the main menu container box, it defines where the menu is, and what it looks like. -.menu_button - The "buttons" for the main menu(join, observe, etc). -.menu_button:hover - The animation for hovering over buttons. -.menu_newpoll - This is the new polls text, so players attention is brought to it, flashes in and out with @ pollsmove animation. -.container_notice - This is the admin notice container for when an admin sets the title notice. This button is under fun in the admin tab. -.menu_notice - Admin notice text. -.unchecked - Unchecked ☒ box. -.checked - Checked ☑ box. -REMEMBER, DO NOT EDIT THESE ELEMENT NAMES ELSE THE LOBBYSCREEN WILL BREAK. - -## Credits: -Gandalf2k15 & TauCeti diff --git a/modular_skyrat/modules/tribal_extended/code/crafting.dm b/modular_skyrat/modules/tribal_extended/code/crafting.dm deleted file mode 100644 index adf21657bd90fb..00000000000000 --- a/modular_skyrat/modules/tribal_extended/code/crafting.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/item/weaponcrafting/silkstring - name = "string" - desc = "A long piece of string that looks like a cable coil." - icon = 'modular_skyrat/modules/tribal_extended/icons/crafting.dmi' - icon_state = "silkstring" diff --git a/modular_skyrat/modules/tribal_extended/code/weapons/bow.dm b/modular_skyrat/modules/tribal_extended/code/weapons/bow.dm deleted file mode 100644 index d44b35ee1ff98d..00000000000000 --- a/modular_skyrat/modules/tribal_extended/code/weapons/bow.dm +++ /dev/null @@ -1,36 +0,0 @@ -/obj/item/gun/ballistic/bow/tribalbow - icon = 'modular_skyrat/modules/tribal_extended/icons/projectile.dmi' - lefthand_file = 'modular_skyrat/modules/tribal_extended/icons/bows_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/tribal_extended/icons/bows_righthand.dmi' - worn_icon = 'modular_skyrat/modules/tribal_extended/icons/back.dmi' - inhand_icon_state = "bow" - icon_state = "bow_unloaded" - base_icon_state = "bow" - worn_icon_state = "bow" - slot_flags = ITEM_SLOT_BACK - -/obj/item/gun/ballistic/bow/tribalbow/update_icon() - . = ..() - icon_state = "[base_icon_state]_[get_ammo() ? (chambered ? "firing" : "loaded") : "unloaded"]" - - -/obj/item/gun/ballistic/bow/tribalbow/ashen - name = "bone bow" - desc = "Some sort of primitive projectile weapon made of bone and wrapped sinew, oddly robust." - icon = 'modular_skyrat/modules/tribal_extended/icons/projectile.dmi' - icon_state = "ashenbow_unloaded" - base_icon_state = "ashenbow" - inhand_icon_state = "ashenbow" - worn_icon_state = "ashenbow" - force = 20 - -/obj/item/gun/ballistic/bow/tribalbow/pipe - name = "pipe bow" - desc = "Portable and sleek, but you'd be better off hitting someone with a pool noodle." - icon = 'modular_skyrat/modules/tribal_extended/icons/projectile.dmi' - icon_state = "pipebow_unloaded" - base_icon_state = "pipebow" - inhand_icon_state = "pipebow" - worn_icon_state = "pipebow" - force = 10 - slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_SUITSTORE diff --git a/modular_skyrat/modules/tribal_extended/code/weapons/shield.dm b/modular_skyrat/modules/tribal_extended/code/weapons/shield.dm deleted file mode 100644 index f52a8be7be9292..00000000000000 --- a/modular_skyrat/modules/tribal_extended/code/weapons/shield.dm +++ /dev/null @@ -1,14 +0,0 @@ -/obj/item/shield/goliath - name = "goliath shield" - desc = "A shield made from interwoven plates of goliath hide." - icon = 'modular_skyrat/modules/tribal_extended/icons/shields.dmi' - icon_state = "goliath_shield" - lefthand_file = 'modular_skyrat/modules/tribal_extended/icons/shields_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/tribal_extended/icons/shields_righthand.dmi' - worn_icon = 'modular_skyrat/modules/tribal_extended/icons/back.dmi' - worn_icon_state = "goliath_shield" - inhand_icon_state = "goliath_shield" - max_integrity = 200 - w_class = WEIGHT_CLASS_BULKY - shield_break_sound = 'sound/effects/bang.ogg' - shield_break_leftover = /obj/item/stack/sheet/animalhide/goliath_hide diff --git a/modular_skyrat/modules/tribal_extended/code/weapons/sword.dm b/modular_skyrat/modules/tribal_extended/code/weapons/sword.dm deleted file mode 100644 index 1fff0ccbc4ff93..00000000000000 --- a/modular_skyrat/modules/tribal_extended/code/weapons/sword.dm +++ /dev/null @@ -1,23 +0,0 @@ -/obj/item/claymore/bone - name = "bone sword" - desc = "Jagged pieces of bone are tied to what looks like a goliaths femur." - icon = 'modular_skyrat/modules/tribal_extended/icons/items_and_weapons.dmi' - lefthand_file = 'modular_skyrat/modules/tribal_extended/icons/swords_lefthand.dmi' - righthand_file = 'modular_skyrat/modules/tribal_extended/icons/swords_righthand.dmi' - worn_icon = 'modular_skyrat/modules/tribal_extended/icons/back.dmi' - icon_state = "bone_sword" - inhand_icon_state = "bone_sword" - worn_icon_state = "bone_sword" - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - force = 20 - throwforce = 10 - armour_penetration = 10 - w_class = WEIGHT_CLASS_NORMAL - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb_continuous = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - block_chance = 0 - armor_type = /datum/armor/claymore_bone - -/datum/armor/claymore_bone - fire = 100 - acid = 50 diff --git a/modular_skyrat/modules/verbs/readme.md b/modular_skyrat/modules/verbs/readme.md deleted file mode 100644 index d68fbacaf17db9..00000000000000 --- a/modular_skyrat/modules/verbs/readme.md +++ /dev/null @@ -1,30 +0,0 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/872 - -## Title: More verbs and subtler. - -MODULE ID: VERBS - -### Description: - -Adds a few emotes and verbs for players to use, such as LOOC, subtle. - -### TG Proc Changes: - -- N/A - -### Defines: - -- #define CHAT_LOOC (1<<12) -- #define CHAT_LOOC_ADMIN (1<<13) -- #define LOG_SUBTLER (1 << 20) - -### Master file additions - -- D:\Documents\Github\SS13\Skyrat-tg\modular_skyrat\master_files\code\_globalvars\configuration.dm - -### Included files that are not contained in this module: - -- N/A - -### Credits: -Gandalf2k15 - porting and refactoring diff --git a/modular_skyrat/modules/vox_sprites/readme.md b/modular_skyrat/modules/vox_sprites/readme.md deleted file mode 100644 index 870251e6da5e73..00000000000000 --- a/modular_skyrat/modules/vox_sprites/readme.md +++ /dev/null @@ -1,55 +0,0 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/7522 - -## Title: Vox sprite fixes, updates, and additions - -MODULE ID: VOX_SPRITES - -### Description: - -Ports the Vox species and clothing sprites from Paradise plus some new GAGS-compatible ones, and adds code to support them. - -### TG Proc/File Changes: - -- APPEND: code/game/objects/items.dm > /obj/item/update_greyscale() -- APPEND: code/modules/mob/living/carbon/human/human_update_icons.dm > /mob/living/carbon/human/update_worn_gloves() - -### Defines: - -- N/A - -### Master file additions - -Species sprites: - -- modular_skyrat/master_files/icons/mob/body_markings/vox_secondary.dmi #CHANGE -- modular_skyrat/master_files/icons/mob/species/vox_eyes.dmi #CHANGE -- modular_skyrat/master_files/icons/mob/species/vox_parts_greyscale.dmi #CHANGE -- modular_skyrat/master_files/icons/mob/sprite_accessory/vox_facial_hair.dmi #CHANGE -- modular_skyrat/master_files/icons/mob/sprite_accessory/vox_hair.dmi #CHANGE -- modular_skyrat/master_files/icons/mob/sprite_accessory/vox_snouts.dmi #CHANGE - -Clothing sprites: - -- modular_skyrat/master_files/icons/mob/clothing/head_vox.dmi #CHANGE -- modular_skyrat/master_files/icons/mob/clothing/mask_vox.dmi #CHANGE -- modular_skyrat/master_files/icons/mob/clothing/species/vox/back.dmi #ADD -- modular_skyrat/master_files/icons/mob/clothing/species/vox/color_gags_vox.dmi #ADD -- modular_skyrat/master_files/icons/mob/clothing/species/vox/ears.dmi #ADD -- modular_skyrat/master_files/icons/mob/clothing/species/vox/eyes.dmi #ADD -- modular_skyrat/master_files/icons/mob/clothing/species/vox/feet.dmi #ADD -- modular_skyrat/master_files/icons/mob/clothing/species/vox/hands.dmi #ADD -- modular_skyrat/master_files/icons/mob/clothing/species/vox/head.dmi #ADD -- modular_skyrat/master_files/icons/mob/clothing/species/vox/helmet.dmi #ADD -- modular_skyrat/master_files/icons/mob/clothing/species/vox/suit.dmi #ADD -- modular_skyrat/master_files/icons/mob/clothing/species/vox/uniform.dmi #ADD - -### Included files that are not contained in this module: - -- N/A - -### Credits: - -Vox species and clothing sprites - Paradise Station - -PR Code - SabreML -PR Sprite implementation & GAGS compatibility - CandleJaxx diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/amauri.dm b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/amauri.dm deleted file mode 100644 index ed234b942e8ed3..00000000000000 --- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/amauri.dm +++ /dev/null @@ -1,28 +0,0 @@ -/obj/item/seeds/amauri - name = "pack of amauri seeds" - desc = "These seeds grow into amauri plants." - icon = 'modular_skyrat/modules/xenoarch/icons/seeds.dmi' - icon_state = "amauri" - species = "amauri" - plantname = "Amauri Plant" - product = /obj/item/food/grown/amauri - lifespan = 55 - endurance = 35 - yield = 5 - growing_icon = 'modular_skyrat/modules/xenoarch/icons/growing.dmi' - icon_grow = "amauri-stage" - growthstages = 3 - genes = list(/datum/plant_gene/trait/repeated_harvest) - reagents_add = list(/datum/reagent/medicine/psicodine = 0.1) - -/obj/item/food/grown/amauri - seed = /obj/item/seeds/amauri - name = "amauri" - desc = "It's a little piece of amauri." - icon = 'modular_skyrat/modules/xenoarch/icons/harvest.dmi' - icon_state = "amauri" - filling_color = "#FF4500" - bite_consumption_mod = 0.5 - foodtypes = FRUIT - juice_typepath = /datum/reagent/medicine/psicodine - tastes = list("shadow" = 1) diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/gelthi.dm b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/gelthi.dm deleted file mode 100644 index 3ff46763f1e266..00000000000000 --- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/gelthi.dm +++ /dev/null @@ -1,28 +0,0 @@ -/obj/item/seeds/gelthi - name = "pack of gelthi seeds" - desc = "These seeds grow into gelthi plants." - icon = 'modular_skyrat/modules/xenoarch/icons/seeds.dmi' - icon_state = "gelthi" - species = "gelthi" - plantname = "Gelthi Plant" - product = /obj/item/food/grown/gelthi - lifespan = 55 - endurance = 35 - yield = 5 - growing_icon = 'modular_skyrat/modules/xenoarch/icons/growing.dmi' - icon_grow = "gelthi-stage" - growthstages = 3 - genes = list(/datum/plant_gene/trait/repeated_harvest) - reagents_add = list(/datum/reagent/gold = 0.1) - -/obj/item/food/grown/gelthi - seed = /obj/item/seeds/gelthi - name = "gelthi" - desc = "It's a little piece of gelthi." - icon = 'modular_skyrat/modules/xenoarch/icons/harvest.dmi' - icon_state = "gelthi" - filling_color = "#FF4500" - bite_consumption_mod = 0.5 - foodtypes = FRUIT - juice_typepath = /datum/reagent/gold - tastes = list("gold" = 1) diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/jurlmah.dm b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/jurlmah.dm deleted file mode 100644 index 5351435276b0e5..00000000000000 --- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/jurlmah.dm +++ /dev/null @@ -1,28 +0,0 @@ -/obj/item/seeds/jurlmah - name = "pack of jurlmah seeds" - desc = "These seeds grow into jurlmah plants." - icon = 'modular_skyrat/modules/xenoarch/icons/seeds.dmi' - icon_state = "jurlmah" - species = "jurlmah" - plantname = "Jurlmah Plant" - product = /obj/item/food/grown/jurlmah - lifespan = 55 - endurance = 35 - yield = 5 - growing_icon = 'modular_skyrat/modules/xenoarch/icons/growing.dmi' - icon_grow = "jurlmah-stage" - growthstages = 5 - genes = list(/datum/plant_gene/trait/repeated_harvest) - reagents_add = list(/datum/reagent/medicine/cryoxadone = 0.1) - -/obj/item/food/grown/jurlmah - seed = /obj/item/seeds/jurlmah - name = "jurlmah" - desc = "It's a little piece of jurlmah." - icon = 'modular_skyrat/modules/xenoarch/icons/harvest.dmi' - icon_state = "jurlmah" - filling_color = "#FF4500" - bite_consumption_mod = 0.5 - foodtypes = FRUIT - juice_typepath = /datum/reagent/medicine/cryoxadone - tastes = list("cold" = 1) diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/nofruit.dm b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/nofruit.dm deleted file mode 100644 index 65d8625e5d808e..00000000000000 --- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/nofruit.dm +++ /dev/null @@ -1,28 +0,0 @@ -/obj/item/seeds/nofruit - name = "pack of nofruit seeds" - desc = "These seeds grow into nofruit plants." - icon = 'modular_skyrat/modules/xenoarch/icons/seeds.dmi' - icon_state = "nofruit" - species = "nofruit" - plantname = "Nofruit Plant" - product = /obj/item/food/grown/nofruit - lifespan = 55 - endurance = 35 - yield = 5 - growing_icon = 'modular_skyrat/modules/xenoarch/icons/growing.dmi' - icon_grow = "nofruit-stage" - growthstages = 4 - genes = list(/datum/plant_gene/trait/repeated_harvest) - reagents_add = list(/datum/reagent/consumable/nothing = 0.1, /datum/reagent/consumable/laughter = 0.1) - -/obj/item/food/grown/nofruit - seed = /obj/item/seeds/nofruit - name = "nofruit" - desc = "It's a little piece of nofruit." - icon = 'modular_skyrat/modules/xenoarch/icons/harvest.dmi' - icon_state = "nofruit" - filling_color = "#FF4500" - bite_consumption_mod = 0.5 - foodtypes = FRUIT - juice_typepath = /datum/reagent/consumable/nothing - tastes = list("entertainment" = 1) diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/shand.dm b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/shand.dm deleted file mode 100644 index c028b7b6082f8f..00000000000000 --- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/shand.dm +++ /dev/null @@ -1,28 +0,0 @@ -/obj/item/seeds/shand - name = "pack of shand seeds" - desc = "These seeds grow into shand plants." - icon = 'modular_skyrat/modules/xenoarch/icons/seeds.dmi' - icon_state = "shand" - species = "shand" - plantname = "Shand Plant" - product = /obj/item/food/grown/shand - lifespan = 55 - endurance = 35 - yield = 5 - growing_icon = 'modular_skyrat/modules/xenoarch/icons/growing.dmi' - icon_grow = "shand-stage" - growthstages = 3 - genes = list(/datum/plant_gene/trait/repeated_harvest) - reagents_add = list(/datum/reagent/pax = 0.1) - -/obj/item/food/grown/shand - seed = /obj/item/seeds/shand - name = "shand" - desc = "It's a little piece of shand." - icon = 'modular_skyrat/modules/xenoarch/icons/harvest.dmi' - icon_state = "shand" - filling_color = "#FF4500" - bite_consumption_mod = 0.5 - foodtypes = FRUIT - juice_typepath = /datum/reagent/pax - tastes = list("peace" = 1) diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/surik.dm b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/surik.dm deleted file mode 100644 index 073274209dd085..00000000000000 --- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/surik.dm +++ /dev/null @@ -1,28 +0,0 @@ -/obj/item/seeds/surik - name = "pack of surik seeds" - desc = "These seeds grow into surik plants." - icon = 'modular_skyrat/modules/xenoarch/icons/seeds.dmi' - icon_state = "surik" - species = "surik" - plantname = "Surik Plant" - product = /obj/item/food/grown/surik - lifespan = 55 - endurance = 35 - yield = 5 - growing_icon = 'modular_skyrat/modules/xenoarch/icons/growing.dmi' - icon_grow = "surik-stage" - growthstages = 4 - genes = list(/datum/plant_gene/trait/repeated_harvest) - reagents_add = list(/datum/reagent/consumable/frostoil = 0.1) - -/obj/item/food/grown/surik - seed = /obj/item/seeds/surik - name = "surik" - desc = "It's a little piece of surik." - icon = 'modular_skyrat/modules/xenoarch/icons/harvest.dmi' - icon_state = "surik" - filling_color = "#FF4500" - bite_consumption_mod = 0.5 - foodtypes = FRUIT - juice_typepath = /datum/reagent/consumable/frostoil - tastes = list("snow" = 1) diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/telriis.dm b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/telriis.dm deleted file mode 100644 index 7783cbdac1b315..00000000000000 --- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/telriis.dm +++ /dev/null @@ -1,29 +0,0 @@ -/obj/item/seeds/telriis - name = "pack of telriis seeds" - desc = "These seeds grow into telriis plants." - icon = 'modular_skyrat/modules/xenoarch/icons/seeds.dmi' - icon_state = "telriis" - species = "telriis" - plantname = "Telriis Plant" - product = /obj/item/food/grown/telriis - lifespan = 55 - endurance = 35 - yield = 5 - growing_icon = 'modular_skyrat/modules/xenoarch/icons/growing.dmi' - icon_grow = "telriis-stage" - growthstages = 4 - plant_icon_offset = 7 - genes = list(/datum/plant_gene/trait/repeated_harvest) - reagents_add = list(/datum/reagent/medicine/higadrite = 0.1) - -/obj/item/food/grown/telriis - seed = /obj/item/seeds/telriis - name = "telriis" - desc = "It's a little piece of telriis." - icon = 'modular_skyrat/modules/xenoarch/icons/harvest.dmi' - icon_state = "telriis" - filling_color = "#FF4500" - bite_consumption_mod = 0.5 - foodtypes = FRUIT - juice_typepath = /datum/reagent/medicine/higadrite - tastes = list("liver" = 1) diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/thaadra.dm b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/thaadra.dm deleted file mode 100644 index e9eeadb274e8d8..00000000000000 --- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/thaadra.dm +++ /dev/null @@ -1,28 +0,0 @@ -/obj/item/seeds/thaadra - name = "pack of thaadra seeds" - desc = "These seeds grow into thaadra plants." - icon = 'modular_skyrat/modules/xenoarch/icons/seeds.dmi' - icon_state = "thaadra" - species = "thaadra" - plantname = "Thaadra Plant" - product = /obj/item/food/grown/thaadra - lifespan = 55 - endurance = 35 - yield = 5 - growing_icon = 'modular_skyrat/modules/xenoarch/icons/growing.dmi' - icon_grow = "thaadra-stage" - growthstages = 4 - genes = list(/datum/plant_gene/trait/repeated_harvest) - reagents_add = list(/datum/reagent/silver = 0.1) - -/obj/item/food/grown/thaadra - seed = /obj/item/seeds/thaadra - name = "thaadra" - desc = "It's a little piece of thaadra." - icon = 'modular_skyrat/modules/xenoarch/icons/harvest.dmi' - icon_state = "thaadra" - filling_color = "#FF4500" - bite_consumption_mod = 0.5 - foodtypes = FRUIT - juice_typepath = /datum/reagent/silver - tastes = list("silver" = 1) diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/vale.dm b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/vale.dm deleted file mode 100644 index adf8654d6b6983..00000000000000 --- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/vale.dm +++ /dev/null @@ -1,28 +0,0 @@ -/obj/item/seeds/vale - name = "pack of vale seeds" - desc = "These seeds grow into vale plants." - icon = 'modular_skyrat/modules/xenoarch/icons/seeds.dmi' - icon_state = "vale" - species = "vale" - plantname = "Vale Plant" - product = /obj/item/food/grown/vale - lifespan = 55 - endurance = 35 - yield = 5 - growing_icon = 'modular_skyrat/modules/xenoarch/icons/growing.dmi' - icon_grow = "vale-stage" - growthstages = 4 - genes = list(/datum/plant_gene/trait/repeated_harvest) - reagents_add = list(/datum/reagent/medicine/neurine = 0.1) - -/obj/item/food/grown/vale - seed = /obj/item/seeds/vale - name = "vale" - desc = "It's a little piece of vale." - icon = 'modular_skyrat/modules/xenoarch/icons/harvest.dmi' - icon_state = "vale" - filling_color = "#FF4500" - bite_consumption_mod = 0.5 - foodtypes = FRUIT - juice_typepath = /datum/reagent/medicine/neurine - tastes = list("medicine" = 1) diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/vaporsac.dm b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/vaporsac.dm deleted file mode 100644 index 1f467a66ab684c..00000000000000 --- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/vaporsac.dm +++ /dev/null @@ -1,28 +0,0 @@ -/obj/item/seeds/vaporsac - name = "pack of vaporsac seeds" - desc = "These seeds grow into vaporsac plants." - icon = 'modular_skyrat/modules/xenoarch/icons/seeds.dmi' - icon_state = "vaporsac" - species = "vaporsac" - plantname = "Vaporsac Plant" - product = /obj/item/food/grown/vaporsac - lifespan = 55 - endurance = 35 - yield = 5 - growing_icon = 'modular_skyrat/modules/xenoarch/icons/growing.dmi' - icon_grow = "vaporsac-stage" - growthstages = 3 - genes = list(/datum/plant_gene/trait/repeated_harvest) - reagents_add = list(/datum/reagent/nitrous_oxide = 0.1) - -/obj/item/food/grown/vaporsac - seed = /obj/item/seeds/vaporsac - name = "vaporsac" - desc = "It's a little piece of vaporsac." - icon = 'modular_skyrat/modules/xenoarch/icons/harvest.dmi' - icon_state = "vaporsac" - filling_color = "#FF4500" - bite_consumption_mod = 0.5 - foodtypes = FRUIT - juice_typepath = /datum/reagent/nitrous_oxide - tastes = list("sleep" = 1) diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/base_skyrat_xeno.dm b/modular_skyrat/modules/xenos_skyrat_redo/code/base_skyrat_xeno.dm deleted file mode 100644 index e098f01769b104..00000000000000 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/base_skyrat_xeno.dm +++ /dev/null @@ -1,254 +0,0 @@ -/// SKYRAT MODULE SKYRAT_XENO_REDO - -/mob/living/carbon/alien/adult/skyrat - name = "rare bugged alien" - icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/big_xenos.dmi' - rotate_on_lying = FALSE - base_pixel_x = -16 //All of the xeno sprites are 64x64, and we want them to be level with the tile they are on, much like oversized quirk users - /// Holds the ability for quick resting without using the ic panel, and without editing xeno huds - var/datum/action/cooldown/alien/skyrat/sleepytime/rest_button - mob_size = MOB_SIZE_LARGE - layer = LARGE_MOB_LAYER //above most mobs, but below speechbubbles - plane = GAME_PLANE_UPPER_FOV_HIDDEN - maptext_height = 64 - maptext_width = 64 - pressure_resistance = 200 - /// What icon file update_held_items will look for when making inhands for xenos - var/alt_inhands_file = 'modular_skyrat/modules/xenos_skyrat_redo/icons/big_xenos.dmi' - /// Setting this will give a xeno generic_evolve set to evolve them into this type - var/next_evolution - /// Holds the ability for evolving into whatever type next_evolution is set to - var/datum/action/cooldown/alien/skyrat/generic_evolve/evolve_ability - /// Keeps track of if a xeno has evolved recently, if so then we prevent them from evolving until that time is up - var/has_evolved_recently = FALSE - /// How long xenos should be unable to evolve after recently evolving - var/evolution_cooldown_time = 90 SECONDS - /// Determines if a xeno is unable to use abilities - var/unable_to_use_abilities = FALSE - /// Pixel X shifting of the on fire overlay - var/on_fire_pixel_x = 16 - /// Pixel Y shifting of the on fire overlay - var/on_fire_pixel_y = 16 - - -/mob/living/carbon/alien/adult/skyrat/Initialize(mapload) - . = ..() - AddComponent(/datum/component/seethrough_mob) - - rest_button = new /datum/action/cooldown/alien/skyrat/sleepytime() - rest_button.Grant(src) - - if(next_evolution) - evolve_ability = new /datum/action/cooldown/alien/skyrat/generic_evolve() - evolve_ability.Grant(src) - - pixel_x = -16 - - ADD_TRAIT(src, TRAIT_XENO_HEAL_AURA, TRAIT_XENO_INNATE) - real_name = "alien [caste]" - -/mob/living/carbon/alien/adult/skyrat/Destroy() - QDEL_NULL(rest_button) - if(evolve_ability) - QDEL_NULL(evolve_ability) - return ..() - -/// Called when a larva or xeno evolves, adds a configurable timer on evolving again to the xeno -/mob/living/carbon/alien/adult/skyrat/proc/has_just_evolved() - if(has_evolved_recently) - return - has_evolved_recently = TRUE - addtimer(CALLBACK(src, PROC_REF(can_evolve_once_again)), evolution_cooldown_time) - -/// Allows xenos to evolve again if they are currently unable to -/mob/living/carbon/alien/adult/skyrat/proc/can_evolve_once_again() - if(!has_evolved_recently) - return - has_evolved_recently = FALSE - -/datum/action/cooldown/alien/skyrat - button_icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi' - /// Some xeno abilities block other abilities from being used, this allows them to get around that in cases where it is needed - var/can_be_used_always = FALSE - -/datum/action/cooldown/alien/skyrat/IsAvailable(feedback = FALSE) - . = ..() - if(!.) - return FALSE - - if(can_be_used_always) - return TRUE - - var/mob/living/carbon/alien/adult/skyrat/owner_alien = owner - if(!istype(owner_alien) || owner_alien.unable_to_use_abilities) - return FALSE - -/datum/action/cooldown/alien/skyrat/sleepytime //I don't think this has a mechanical advantage but they have cool resting sprites so... - name = "Rest" - desc = "Sometimes even murder aliens need to have a little lie down." - button_icon_state = "sleepytime" - -/datum/action/cooldown/alien/skyrat/sleepytime/Activate() - var/mob/living/carbon/sleepytime_mob = owner - if(!isalien(owner)) - return FALSE - if(!sleepytime_mob.resting) - sleepytime_mob.set_resting(new_resting = TRUE, silent = FALSE, instant = TRUE) - return TRUE - sleepytime_mob.set_resting(new_resting = FALSE, silent = FALSE, instant = FALSE) - return TRUE - -/datum/action/cooldown/alien/skyrat/generic_evolve - name = "Evolve" - desc = "Allows us to evolve to a higher caste of our type, if there is not one already." - button_icon_state = "evolution" - /// What type this ability will turn the owner into upon completion - var/type_to_evolve_into - -/datum/action/cooldown/alien/skyrat/generic_evolve/Grant(mob/grant_to) - . = ..() - if(!isalien(owner)) - return - var/mob/living/carbon/alien/target_alien = owner - plasma_cost = target_alien.get_max_plasma() //This ability should always require that a xeno be at their max plasma capacity to use - -/datum/action/cooldown/alien/skyrat/generic_evolve/Activate() - var/mob/living/carbon/alien/adult/skyrat/evolver = owner - - if(!istype(evolver)) - to_chat(owner, span_warning("You aren't an alien, you can't evolve!")) - return FALSE - - type_to_evolve_into = evolver.next_evolution - if(!type_to_evolve_into) - to_chat(evolver, span_bolddanger("Something is wrong... We can't evolve into anything? (This is broken report it on GitHub)")) - CRASH("Couldn't find an evolution for [owner] ([owner.type]).") - - if(!isturf(evolver.loc)) - return FALSE - - if(get_alien_type(type_to_evolve_into)) - evolver.balloon_alert(evolver, "too many of our evolution already") - return FALSE - - var/obj/item/organ/internal/alien/hivenode/node = evolver.get_organ_by_type(/obj/item/organ/internal/alien/hivenode) - if(!node) - to_chat(evolver, span_bolddanger("We can't sense our node's connection to the hive... We can't evolve!")) - return FALSE - - if(node.recent_queen_death) - to_chat(evolver, span_bolddanger("The death of our queen... We can't seem to gather the mental energy required to evolve...")) - return FALSE - - if(evolver.has_evolved_recently) - evolver.balloon_alert(evolver, "can evolve in 1.5 minutes") //Make that 1.5 variable later, but it keeps fucking up for me :( - return FALSE - - var/new_beno = new type_to_evolve_into(evolver.loc) - evolver.alien_evolve(new_beno) - return TRUE - -/datum/movespeed_modifier/alien_quick - multiplicative_slowdown = -0.5 - -/datum/movespeed_modifier/alien_slow - multiplicative_slowdown = 0.5 - -/datum/movespeed_modifier/alien_heavy - multiplicative_slowdown = 1 - -/datum/movespeed_modifier/alien_big - multiplicative_slowdown = 2 - -/mob/living/carbon/alien/adult/skyrat/update_held_items() - ..() - remove_overlay(HANDS_LAYER) - var/list/hands = list() - - var/obj/item/l_hand = get_item_for_held_index(1) - if(l_hand) - var/itm_state = l_hand.inhand_icon_state - if(!itm_state) - itm_state = l_hand.icon_state - var/mutable_appearance/l_hand_item = mutable_appearance(alt_inhands_file, "[itm_state][caste]_l", -HANDS_LAYER) - if(l_hand.blocks_emissive) - l_hand_item.overlays += emissive_blocker(l_hand_item.icon, l_hand_item.icon_state, alpha = l_hand_item.alpha) - hands += l_hand_item - - var/obj/item/r_hand = get_item_for_held_index(2) - if(r_hand) - var/itm_state = r_hand.inhand_icon_state - if(!itm_state) - itm_state = r_hand.icon_state - var/mutable_appearance/r_hand_item = mutable_appearance(alt_inhands_file, "[itm_state][caste]_r", -HANDS_LAYER) - if(r_hand.blocks_emissive) - r_hand_item.overlays += emissive_blocker(r_hand_item.icon, r_hand_item.icon_state, alpha = r_hand_item.alpha) - hands += r_hand_item - - overlays_standing[HANDS_LAYER] = hands - apply_overlay(HANDS_LAYER) - -/mob/living/carbon/proc/get_max_plasma() - var/obj/item/organ/internal/alien/plasmavessel/vessel = get_organ_by_type(/obj/item/organ/internal/alien/plasmavessel) - if(!vessel) - return -1 - return vessel.max_plasma - -/mob/living/carbon/alien/adult/skyrat/alien_evolve(mob/living/carbon/alien/new_xeno, is_it_a_larva) - var/mob/living/carbon/alien/adult/skyrat/xeno_to_transfer_to = new_xeno - - xeno_to_transfer_to.setDir(dir) - if(!islarva(xeno_to_transfer_to)) - xeno_to_transfer_to.has_just_evolved() - if(mind) - mind.name = xeno_to_transfer_to.real_name - mind.transfer_to(xeno_to_transfer_to) - qdel(src) - -/mob/living/carbon/alien/adult/skyrat/update_fire_overlay(stacks, on_fire, last_icon_state, suffix = "") - var/fire_icon = "generic_fire[suffix]" - - if(!GLOB.fire_appearances[fire_icon]) - var/mutable_appearance/xeno_fire_overlay = mutable_appearance('icons/mob/effects/onfire.dmi', fire_icon, -FIRE_LAYER, appearance_flags = RESET_COLOR) - xeno_fire_overlay.pixel_x = on_fire_pixel_x - xeno_fire_overlay.pixel_y = on_fire_pixel_y - GLOB.fire_appearances[fire_icon] = xeno_fire_overlay - - if((stacks > 0 && on_fire) || HAS_TRAIT(src, TRAIT_PERMANENTLY_ONFIRE)) - if(fire_icon == last_icon_state) - return last_icon_state - - remove_overlay(FIRE_LAYER) - overlays_standing[FIRE_LAYER] = GLOB.fire_appearances[fire_icon] - apply_overlay(FIRE_LAYER) - return fire_icon - - if(!last_icon_state) - return last_icon_state - - remove_overlay(FIRE_LAYER) - apply_overlay(FIRE_LAYER) - return null - -/mob/living/carbon/alien/adult/skyrat/findQueen() //Yes we really do need to do this whole thing to let the queen finder work - if(hud_used) - hud_used.alien_queen_finder.cut_overlays() - var/mob/queen = get_alien_type(/mob/living/carbon/alien/adult/skyrat/queen) - if(!queen) - return - var/turf/Q = get_turf(queen) - var/turf/A = get_turf(src) - if(Q.z != A.z) //The queen is on a different Z level, we cannot sense that far. - return - var/Qdir = get_dir(src, Q) - var/Qdist = get_dist(src, Q) - var/finder_icon = "finder_center" //Overlay showed when adjacent to or on top of the queen! - switch(Qdist) - if(2 to 7) - finder_icon = "finder_near" - if(8 to 20) - finder_icon = "finder_med" - if(21 to INFINITY) - finder_icon = "finder_far" - var/image/finder_eye = image('icons/hud/screen_alien.dmi', finder_icon, dir = Qdir) - hud_used.alien_queen_finder.add_overlay(finder_eye) diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/defender.dm b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/defender.dm deleted file mode 100644 index 8c5b1f3fc03afc..00000000000000 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/defender.dm +++ /dev/null @@ -1,122 +0,0 @@ -/// SKYRAT MODULE SKYRAT_XENO_REDO - -/mob/living/carbon/alien/adult/skyrat/defender - name = "alien defender" - desc = "A heavy looking alien with a wrecking ball-like tail that'd probably hurt to get hit by." - caste = "defender" - maxHealth = 300 - health = 300 - icon_state = "aliendefender" - melee_damage_lower = 25 - melee_damage_upper = 30 - /// Holds the basic charge ability that the defender will be granted - var/datum/action/cooldown/mob_cooldown/charge/basic_charge/defender/charge - /// Holds the wrecking ball tail sweep that the defender will be granted - var/datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/tail_sweep - next_evolution = /mob/living/carbon/alien/adult/skyrat/warrior - -/mob/living/carbon/alien/adult/skyrat/defender/Initialize(mapload) - . = ..() - tail_sweep = new /datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep() - tail_sweep.Grant(src) - - charge = new /datum/action/cooldown/mob_cooldown/charge/basic_charge/defender() - charge.Grant(src) - - REMOVE_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) - - add_movespeed_modifier(/datum/movespeed_modifier/alien_heavy) - -/mob/living/carbon/alien/adult/skyrat/defender/Destroy() - QDEL_NULL(charge) - QDEL_NULL(tail_sweep) - return ..() - -/mob/living/carbon/alien/adult/skyrat/defender/create_internal_organs() - organs += new /obj/item/organ/internal/alien/plasmavessel/small - ..() - -/datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep - name = "Crushing Tail Sweep" - desc = "Throw back attackers with a sweep of your tail, likely breaking some bones in the process." - - cooldown_time = 60 SECONDS - - aoe_radius = 1 - - button_icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi' - button_icon_state = "crush_tail" - - sparkle_path = /obj/effect/temp_visual/dir_setting/tailsweep/defender - - /// The sound that the tail sweep will make upon hitting something - var/impact_sound = 'sound/effects/clang.ogg' - /// How long mobs hit by the tailsweep should be knocked down for - var/knockdown_time = 4 SECONDS - /// How much damage tail sweep impacts should do to a mob - var/impact_damage = 30 - /// What wound bonus should the tai sweep impact have - var/impact_wound_bonus = 20 - /// What type of sharpness should this tail sweep have - var/impact_sharpness = FALSE - /// What type of damage should the tail sweep do - var/impact_damage_type = BRUTE - -/datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/IsAvailable(feedback = FALSE) - . = ..() - if(!.) - return FALSE - - var/mob/living/carbon/alien/adult/skyrat/owner_alien = owner - if(!istype(owner_alien) || owner_alien.unable_to_use_abilities) - return FALSE - -/datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/cast_on_thing_in_aoe(atom/movable/victim, atom/caster) - if(!isliving(victim)) - return - - if(isalien(victim)) - return - - var/turf/throwtarget = get_edge_target_turf(caster, get_dir(caster, get_step_away(victim, caster))) - var/dist_from_caster = get_dist(victim, caster) - var/mob/living/victim_living = victim - - if(dist_from_caster <= 0) - victim_living.Knockdown(knockdown_time) - if(sparkle_path) - new sparkle_path(get_turf(victim_living), get_dir(caster, victim_living)) - - else - victim_living.Knockdown(knockdown_time * 2) //They are on the same turf as us, or... somewhere else, I'm not sure how but they are getting smacked down - - victim_living.apply_damage(impact_damage, impact_damage_type, BODY_ZONE_CHEST, wound_bonus = impact_wound_bonus, sharpness = impact_sharpness) - shake_camera(victim_living, 4, 3) - playsound(victim_living, impact_sound, 100, TRUE, 8, 0.9) - to_chat(victim_living, span_userdanger("[caster]'s tail slams into you, throwing you back!")) - - victim_living.safe_throw_at(throwtarget, ((clamp((max_throw - (clamp(dist_from_caster - 2, 0, dist_from_caster))), 3, max_throw))), 1, caster, force = repulse_force) - -/obj/effect/temp_visual/dir_setting/tailsweep/defender - icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi' - icon_state = "crush_tail_anim" - -/datum/action/cooldown/mob_cooldown/charge/basic_charge/defender - name = "Charge Attack" - desc = "Allows you to charge at a position, trampling anything in your path." - cooldown_time = 15 SECONDS - charge_delay = 0.3 SECONDS - charge_distance = 5 - destroy_objects = FALSE - charge_damage = 50 - button_icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi' - button_icon_state = "defender_charge" - unset_after_click = TRUE - -/datum/action/cooldown/mob_cooldown/charge/basic_charge/defender/do_charge_indicator(atom/charger, atom/charge_target) - . = ..() - playsound(charger, 'modular_skyrat/modules/xenos_skyrat_redo/sound/alien_roar1.ogg', 100, TRUE, 8, 0.9) - -/datum/action/cooldown/mob_cooldown/charge/basic_charge/defender/Activate(atom/target_atom) - . = ..() - return TRUE diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/drone.dm b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/drone.dm deleted file mode 100644 index ee3b7214da9cf7..00000000000000 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/drone.dm +++ /dev/null @@ -1,66 +0,0 @@ -/// SKYRAT MODULE SKYRAT_XENO_REDO - -/mob/living/carbon/alien/adult/skyrat/drone - name = "alien drone" - desc = "As plain looking as you could call an alien with armored black chitin and large claws." - caste = "drone" - maxHealth = 200 - health = 200 - icon_state = "aliendrone" - /// Holds the healing aura ability the drone will be granted - var/datum/action/cooldown/alien/skyrat/heal_aura/heal_aura_ability - melee_damage_lower = 15 - melee_damage_upper = 20 - next_evolution = /mob/living/carbon/alien/adult/skyrat/praetorian - -/mob/living/carbon/alien/adult/skyrat/drone/Initialize(mapload) - . = ..() - heal_aura_ability = new /datum/action/cooldown/alien/skyrat/heal_aura() - heal_aura_ability.Grant(src) - -/mob/living/carbon/alien/adult/skyrat/drone/Destroy() - QDEL_NULL(heal_aura_ability) - return ..() - -/mob/living/carbon/alien/adult/skyrat/drone/create_internal_organs() - organs += new /obj/item/organ/internal/alien/plasmavessel - organs += new /obj/item/organ/internal/alien/resinspinner - ..() - -/datum/action/cooldown/alien/skyrat/heal_aura - name = "Healing Aura" - desc = "Friendly xenomorphs in a short range around yourself will receive passive healing." - button_icon_state = "healaura" - plasma_cost = 100 - cooldown_time = 90 SECONDS - /// Is the healing aura currently active or not - var/aura_active = FALSE - /// How long the healing aura should last - var/aura_duration = 30 SECONDS - /// How far away the healing aura should reach - var/aura_range = 5 - /// How much brute/burn individually the healing aura should heal each time it fires - var/aura_healing_amount = 5 - /// What color should the + particles caused by the healing aura be - var/aura_healing_color = COLOR_BLUE_LIGHT - /// The healing aura component itself that the ability uses - var/datum/component/aura_healing/aura_healing_component - -/datum/action/cooldown/alien/skyrat/heal_aura/Activate() - . = ..() - if(aura_active) - owner.balloon_alert(owner, "already healing") - return FALSE - owner.balloon_alert(owner, "healing aura started") - to_chat(owner, span_danger("We emit pheromones that encourage sisters near us to heal themselves for the next [aura_duration / 10] seconds.")) - addtimer(CALLBACK(src, PROC_REF(aura_deactivate)), aura_duration) - aura_active = TRUE - aura_healing_component = owner.AddComponent(/datum/component/aura_healing, range = aura_range, requires_visibility = TRUE, brute_heal = aura_healing_amount, burn_heal = aura_healing_amount, limit_to_trait = TRAIT_XENO_HEAL_AURA, healing_color = aura_healing_color) - return TRUE - -/datum/action/cooldown/alien/skyrat/heal_aura/proc/aura_deactivate() - aura_active = FALSE - QDEL_NULL(aura_healing_component) - owner.balloon_alert(owner, "healing aura ended") - - diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/praetorian.dm b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/praetorian.dm deleted file mode 100644 index 45d5bd471c973c..00000000000000 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/praetorian.dm +++ /dev/null @@ -1,126 +0,0 @@ -/// SKYRAT MODULE SKYRAT_XENO_REDO - -/mob/living/carbon/alien/adult/skyrat/praetorian - name = "alien praetorian" - desc = "An alien that looks like the awkward half-way point between a queen and a drone, in fact that's likely what it is." - caste = "praetorian" - maxHealth = 400 - health = 400 - icon_state = "alienpraetorian" - /// Holds the improved healing aura ability to be granted to the praetorian later - var/datum/action/cooldown/alien/skyrat/heal_aura/juiced/heal_aura_ability - /// Holds the less lethal tail sweep ability to be granted to the praetorian later - var/datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/hard_throwing/tail_sweep - melee_damage_lower = 25 - melee_damage_upper = 30 - next_evolution = /mob/living/carbon/alien/adult/skyrat/queen - -/mob/living/carbon/alien/adult/skyrat/praetorian/Initialize(mapload) - . = ..() - heal_aura_ability = new /datum/action/cooldown/alien/skyrat/heal_aura/juiced() - heal_aura_ability.Grant(src) - - tail_sweep = new /datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/hard_throwing() - tail_sweep.Grant(src) - - REMOVE_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) - - add_movespeed_modifier(/datum/movespeed_modifier/alien_big) - -/mob/living/carbon/alien/adult/skyrat/praetorian/Destroy() - QDEL_NULL(heal_aura_ability) - return ..() - -/mob/living/carbon/alien/adult/skyrat/praetorian/create_internal_organs() - organs += new /obj/item/organ/internal/alien/plasmavessel/large - organs += new /obj/item/organ/internal/alien/neurotoxin/spitter - organs += new /obj/item/organ/internal/alien/resinspinner - ..() - -/datum/action/cooldown/alien/skyrat/heal_aura/juiced - name = "Strong Healing Aura" - desc = "Friendly xenomorphs in a longer range around yourself will receive passive healing." - button_icon_state = "healaura_juiced" - plasma_cost = 100 - cooldown_time = 90 SECONDS - aura_range = 7 - aura_healing_amount = 10 - aura_healing_color = COLOR_RED_LIGHT - -/datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/hard_throwing - name = "Flinging Tail Sweep" - desc = "Throw back attackers with a sweep of your tail that is much stronger than other aliens." - - aoe_radius = 2 - repulse_force = MOVE_FORCE_OVERPOWERING //Fuck everyone who gets hit by this tail in particular - - button_icon_state = "throw_tail" - - sparkle_path = /obj/effect/temp_visual/dir_setting/tailsweep/praetorian - - impact_sound = 'sound/weapons/slap.ogg' - impact_damage = 20 - impact_wound_bonus = 10 - -/obj/effect/temp_visual/dir_setting/tailsweep/praetorian - icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi' - icon_state = "throw_tail_anim" - -/datum/action/cooldown/alien/acid/skyrat/spread - name = "Spit Neurotoxin Spread" - desc = "Spits a spread neurotoxin at someone, exhausting them." - plasma_cost = 50 - acid_projectile = null - acid_casing = /obj/item/ammo_casing/xenospit - spit_sound = 'modular_skyrat/modules/xenos_skyrat_redo/sound/alien_spitacid2.ogg' - cooldown_time = 10 SECONDS - -/obj/item/ammo_casing/xenospit //This is probably really bad, however I couldn't find any other nice way to do this - name = "big glob of neurotoxin" - projectile_type = /obj/projectile/neurotoxin/skyrat/spitter_spread - pellets = 3 - variance = 20 - -/obj/item/ammo_casing/xenospit/Initialize(mapload) - . = ..() - AddElement(/datum/element/caseless) - -/obj/item/ammo_casing/xenospit/tk_firing(mob/living/user, atom/fired_from) - return FALSE - -/obj/projectile/neurotoxin/skyrat/spitter_spread //Slightly nerfed because its a shotgun spread of these - name = "neurotoxin spit" - icon_state = "neurotoxin" - damage = 25 - -/datum/action/cooldown/alien/acid/skyrat/spread/lethal - name = "Spit Acid Spread" - desc = "Spits a spread of acid at someone, burning them." - acid_projectile = null - acid_casing = /obj/item/ammo_casing/xenospit/spread/lethal - button_icon_state = "acidspit_0" - projectile_name = "acid" - button_base_icon = "acidspit" - -/obj/item/ammo_casing/xenospit/spread/lethal - name = "big glob of acid" - projectile_type = /obj/projectile/neurotoxin/skyrat/acid/spitter_spread - pellets = 4 - variance = 30 - -/obj/projectile/neurotoxin/skyrat/acid/spitter_spread - name = "acid spit" - icon_state = "toxin" - damage = 15 - damage_type = BURN - -/obj/item/organ/internal/alien/neurotoxin/spitter - name = "large neurotoxin gland" - icon_state = "neurotox" - zone = BODY_ZONE_PRECISE_MOUTH - slot = ORGAN_SLOT_XENO_NEUROTOXINGLAND - actions_types = list( - /datum/action/cooldown/alien/acid/skyrat/spread, - /datum/action/cooldown/alien/acid/skyrat/spread/lethal, - /datum/action/cooldown/alien/acid/corrosion, - ) diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/queen.dm b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/queen.dm deleted file mode 100644 index 26497fc78c79b7..00000000000000 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/queen.dm +++ /dev/null @@ -1,97 +0,0 @@ -/// SKYRAT MODULE SKYRAT_XENO_REDO - -/mob/living/carbon/alien/adult/skyrat/queen - name = "alien queen" - desc = "A hulking beast of an alien, for some reason this one seems more important than the others, you should probably quit staring at it and do something." - caste = "queen" - maxHealth = 500 - health = 500 - icon_state = "alienqueen" - /// Holds the less lethal tail sweep ability to be granted to the queen later - var/datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/hard_throwing/tail_sweep - /// Holds the queen screech ability to be granted to her later - var/datum/action/cooldown/alien/skyrat/queen_screech/screech - melee_damage_lower = 30 - melee_damage_upper = 35 - -/mob/living/carbon/alien/adult/skyrat/queen/Initialize(mapload) - . = ..() - tail_sweep = new /datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/hard_throwing() - tail_sweep.Grant(src) - - screech = new /datum/action/cooldown/alien/skyrat/queen_screech() - screech.Grant(src) - - REMOVE_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) - - add_movespeed_modifier(/datum/movespeed_modifier/alien_big) - -/mob/living/carbon/alien/adult/skyrat/queen/Destroy() - QDEL_NULL(tail_sweep) - QDEL_NULL(screech) - return ..() - -/mob/living/carbon/alien/adult/skyrat/queen/create_internal_organs() - organs += new /obj/item/organ/internal/alien/plasmavessel/large/queen - organs += new /obj/item/organ/internal/alien/resinspinner - organs += new /obj/item/organ/internal/alien/neurotoxin/queen - organs += new /obj/item/organ/internal/alien/eggsac - ..() - -/mob/living/carbon/alien/adult/skyrat/queen/alien_talk(message, shown_name = name) - ..(message, shown_name, TRUE) - -/obj/item/organ/internal/alien/neurotoxin/queen - name = "neurotoxin gland" - icon_state = "neurotox" - zone = BODY_ZONE_PRECISE_MOUTH - slot = ORGAN_SLOT_XENO_NEUROTOXINGLAND - actions_types = list( - /datum/action/cooldown/alien/acid/skyrat, - /datum/action/cooldown/alien/acid/skyrat/lethal, - /datum/action/cooldown/alien/acid/corrosion, - ) - -/mob/living/carbon/alien/adult/skyrat/queen/death(gibbed) - if(stat == DEAD) - return - - for(var/mob/living/carbon/carbon_mob in GLOB.alive_mob_list) - if(carbon_mob == src) - continue - - var/obj/item/organ/internal/alien/hivenode/node = carbon_mob.get_organ_by_type(/obj/item/organ/internal/alien/hivenode) - - if(istype(node)) - node.queen_death() - - return ..() - -/datum/action/cooldown/alien/skyrat/queen_screech - name = "Deafening Screech" - desc = "Let out a screech so deafeningly loud that anything with the ability to hear around you will likely be incapacitated for a short time." - button_icon_state = "screech" - cooldown_time = 5 MINUTES - -/datum/action/cooldown/alien/skyrat/queen_screech/Activate() - . = ..() - var/mob/living/carbon/alien/adult/skyrat/queenie = owner - playsound(queenie, 'modular_skyrat/modules/xenos_skyrat_redo/sound/alien_queen_screech.ogg', 100, FALSE, 8, 0.9) - queenie.create_shriekwave() - shake_camera(owner, 2, 2) - - for(var/mob/living/carbon/human/screech_target in get_hearers_in_view(7, get_turf(queenie))) - screech_target.soundbang_act(intensity = 5, stun_pwr = 50, damage_pwr = 10, deafen_pwr = 30) //Only being deaf will save you from the screech - shake_camera(screech_target, 4, 3) - to_chat(screech_target, span_doyourjobidiot("[queenie] lets out a deafening screech!")) - - return TRUE - -/mob/living/carbon/alien/adult/skyrat/proc/create_shriekwave() - remove_overlay(HALO_LAYER) - overlays_standing[HALO_LAYER] = image("icon" = 'modular_skyrat/modules/xenos_skyrat_redo/icons/big_xenos.dmi', "icon_state" = "shriek_waves") //Ehh, suit layer's not being used. - apply_overlay(HALO_LAYER) - addtimer(CALLBACK(src, PROC_REF(remove_shriekwave)), 3 SECONDS) - -/mob/living/carbon/alien/adult/skyrat/proc/remove_shriekwave() - remove_overlay(HALO_LAYER) diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/ravager.dm b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/ravager.dm deleted file mode 100644 index 4f872be7342014..00000000000000 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/ravager.dm +++ /dev/null @@ -1,119 +0,0 @@ -/// SKYRAT MODULE SKYRAT_XENO_REDO - -#define RAVAGER_OUTLINE_EFFECT "ravager_endure_outline" - -/mob/living/carbon/alien/adult/skyrat/ravager - name = "alien ravager" - desc = "An alien with angry red chitin, with equally intimidating looking blade-like claws in place of normal hands. That sharp tail looks like it'd probably hurt." - caste = "ravager" - maxHealth = 350 - health = 350 - icon_state = "alienravager" - /// Holds the triple charge ability to be granted to the ravager later - var/datum/action/cooldown/mob_cooldown/charge/triple_charge/ravager/triple_charge - /// Holds the slicing tail sweep ability to be granted to the ravager later - var/datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/slicing/tailsweep_slice - /// Holds the endure ability to be granted to the ravager later - var/datum/action/cooldown/alien/skyrat/literally_too_angry_to_die/you_cant_hurt_me_jack - melee_damage_lower = 30 - melee_damage_upper = 35 - -/mob/living/carbon/alien/adult/skyrat/ravager/Initialize(mapload) - . = ..() - tailsweep_slice = new /datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/slicing() - tailsweep_slice.Grant(src) - - you_cant_hurt_me_jack = new /datum/action/cooldown/alien/skyrat/literally_too_angry_to_die() - you_cant_hurt_me_jack.Grant(src) - - triple_charge = new /datum/action/cooldown/mob_cooldown/charge/triple_charge/ravager() - triple_charge.Grant(src) - - REMOVE_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) - -/mob/living/carbon/alien/adult/skyrat/ravager/Destroy() - //QDEL_NULL(triple_charge) - QDEL_NULL(tailsweep_slice) - QDEL_NULL(you_cant_hurt_me_jack) - QDEL_NULL(triple_charge) - return ..() - -/mob/living/carbon/alien/adult/skyrat/ravager/create_internal_organs() - organs += new /obj/item/organ/internal/alien/plasmavessel - ..() - -/datum/action/cooldown/mob_cooldown/charge/triple_charge/ravager - name = "Triple Charge Attack" - desc = "Allows you to charge thrice at a location, trampling any in your path." - cooldown_time = 30 SECONDS - charge_delay = 0.3 SECONDS - charge_distance = 7 - charge_past = 3 - destroy_objects = FALSE - charge_damage = 25 - button_icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi' - button_icon_state = "ravager_charge" - unset_after_click = TRUE - -/datum/action/cooldown/mob_cooldown/charge/triple_charge/ravager/do_charge_indicator(atom/charger, atom/charge_target) - playsound(charger, 'modular_skyrat/modules/xenos_skyrat_redo/sound/alien_roar2.ogg', 100, TRUE, 8, 0.9) - -/datum/action/cooldown/mob_cooldown/charge/triple_charge/ravager/Activate(atom/target_atom) - . = ..() - return TRUE - -/datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/slicing - name = "Slicing Tail Sweep" - desc = "Throw back attackers with a swipe of your tail, slicing them with its sharpened tip." - - aoe_radius = 2 - - button_icon_state = "slice_tail" - - sparkle_path = /obj/effect/temp_visual/dir_setting/tailsweep/ravager - - sound = 'modular_skyrat/modules/xenos_skyrat_redo/sound/alien_tail_swipe.ogg' //The defender's tail sound isn't changed because its big and heavy, this isn't - - impact_sound = 'modular_skyrat/master_files/sound/weapons/bloodyslice.ogg' - impact_damage = 40 - impact_sharpness = SHARP_EDGED - -/obj/effect/temp_visual/dir_setting/tailsweep/ravager - icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi' - icon_state = "slice_tail_anim" - -/datum/action/cooldown/alien/skyrat/literally_too_angry_to_die - name = "Endure" - desc = "Imbue your body with unimaginable amounts of rage (and plasma) to allow yourself to ignore all pain for a short time." - button_icon_state = "literally_too_angry" - plasma_cost = 250 //This requires full plasma to do, so there can be some time between armstrong moments - /// If the endure ability is currently active or not - var/endure_active = FALSE - /// How long the endure ability should last when activated - var/endure_duration = 20 SECONDS - -/datum/action/cooldown/alien/skyrat/literally_too_angry_to_die/Activate() - . = ..() - if(endure_active) - owner.balloon_alert(owner, "already enduring") - return FALSE - owner.balloon_alert(owner, "endure began") - playsound(owner, 'modular_skyrat/modules/xenos_skyrat_redo/sound/alien_roar1.ogg', 100, TRUE, 8, 0.9) - to_chat(owner, span_danger("We numb our ability to feel pain, allowing us to fight until the very last for the next [endure_duration/10] seconds.")) - addtimer(CALLBACK(src, PROC_REF(endure_deactivate)), endure_duration) - owner.add_filter(RAVAGER_OUTLINE_EFFECT, 4, outline_filter(1, COLOR_RED_LIGHT)) - ADD_TRAIT(owner, TRAIT_STUNIMMUNE, TRAIT_XENO_ABILITY_GIVEN) - ADD_TRAIT(owner, TRAIT_NOSOFTCRIT, TRAIT_XENO_ABILITY_GIVEN) - ADD_TRAIT(owner, TRAIT_NOHARDCRIT, TRAIT_XENO_ABILITY_GIVEN) - endure_active = TRUE - return TRUE - -/datum/action/cooldown/alien/skyrat/literally_too_angry_to_die/proc/endure_deactivate() - endure_active = FALSE - owner.balloon_alert(owner, "endure ended") - owner.remove_filter(RAVAGER_OUTLINE_EFFECT) - REMOVE_TRAIT(owner, TRAIT_STUNIMMUNE, TRAIT_XENO_ABILITY_GIVEN) - REMOVE_TRAIT(owner, TRAIT_NOSOFTCRIT, TRAIT_XENO_ABILITY_GIVEN) - REMOVE_TRAIT(owner, TRAIT_NOHARDCRIT, TRAIT_XENO_ABILITY_GIVEN) - -#undef RAVAGER_OUTLINE_EFFECT diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/sentinel.dm b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/sentinel.dm deleted file mode 100644 index c517401954beef..00000000000000 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/sentinel.dm +++ /dev/null @@ -1,143 +0,0 @@ -/// SKYRAT MODULE SKYRAT_XENO_REDO - -/mob/living/carbon/alien/adult/skyrat/sentinel - name = "alien sentinel" - desc = "An alien that'd be unremarkable if not for the bright coloring and visible acid glands that cover it." - caste = "sentinel" - maxHealth = 200 - health = 200 - icon_state = "aliensentinel" - melee_damage_lower = 10 - melee_damage_upper = 15 - next_evolution = /mob/living/carbon/alien/adult/skyrat/spitter - -/mob/living/carbon/alien/adult/skyrat/sentinel/Initialize(mapload) - . = ..() - - add_movespeed_modifier(/datum/movespeed_modifier/alien_slow) - -/mob/living/carbon/alien/adult/skyrat/sentinel/create_internal_organs() - organs += new /obj/item/organ/internal/alien/plasmavessel/small - organs += new /obj/item/organ/internal/alien/neurotoxin/sentinel - ..() - -/datum/action/cooldown/alien/acid/skyrat - name = "Spit Neurotoxin" - desc = "Spits neurotoxin at someone, exhausting them." - button_icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi' - button_icon_state = "neurospit_0" - plasma_cost = 40 - /// A singular projectile? Use this one and leave acid_casing null - var/acid_projectile = /obj/projectile/neurotoxin/skyrat - /// You want it to be more like a shotgun style attack? Use this one and make acid_projectile null - var/acid_casing - /// Used in to_chat messages to the owner - var/projectile_name = "neurotoxin" - /// The base icon for the ability, so a red box can be put on it using _0 or _1 - var/button_base_icon = "neurospit" - /// The sound that should be played when the xeno actually spits - var/spit_sound = 'modular_skyrat/modules/xenos_skyrat_redo/sound/alien_spitacid.ogg' - shared_cooldown = MOB_SHARED_COOLDOWN_3 - cooldown_time = 5 SECONDS - -/datum/action/cooldown/alien/acid/skyrat/IsAvailable(feedback = FALSE) - return ..() && isturf(owner.loc) - -/datum/action/cooldown/alien/acid/skyrat/set_click_ability(mob/on_who) - . = ..() - if(!.) - return - - to_chat(on_who, span_notice("You prepare your [projectile_name] gland. <B>Left-click to fire at a target!</B>")) - - button_icon_state = "[button_base_icon]_1" - build_all_button_icons() - on_who.update_icons() - -/datum/action/cooldown/alien/acid/skyrat/unset_click_ability(mob/on_who, refund_cooldown = TRUE) - . = ..() - if(!.) - return - - if(refund_cooldown) - to_chat(on_who, span_notice("You empty your [projectile_name] gland.")) - - button_icon_state = "[button_base_icon]_0" - build_all_button_icons() - on_who.update_icons() - -/datum/action/cooldown/alien/acid/skyrat/InterceptClickOn(mob/living/caller, params, atom/target) - . = ..() - if(!.) - unset_click_ability(caller, refund_cooldown = FALSE) - return FALSE - - var/turf/user_turf = caller.loc - var/turf/target_turf = get_step(caller, target.dir) - if(!isturf(target_turf)) - return FALSE - - var/modifiers = params2list(params) - caller.visible_message( - span_danger("[caller] spits [projectile_name]!"), - span_alertalien("You spit [projectile_name]."), - ) - - if(acid_projectile) - var/obj/projectile/spit_projectile = new acid_projectile(caller.loc) - spit_projectile.preparePixelProjectile(target, caller, modifiers) - spit_projectile.firer = caller - spit_projectile.fire() - playsound(caller, spit_sound, 100, TRUE, 5, 0.9) - caller.newtonian_move(get_dir(target_turf, user_turf)) - return TRUE - - if(acid_casing) - var/obj/item/ammo_casing/casing = new acid_casing(caller.loc) - playsound(caller, spit_sound, 100, TRUE, 5, 0.9) - casing.fire_casing(target, caller, null, null, null, ran_zone(), 0, caller) - caller.newtonian_move(get_dir(target_turf, user_turf)) - return TRUE - - CRASH("Neither acid_projectile or acid_casing are set on [caller]'s spit attack!") - -/datum/action/cooldown/alien/acid/skyrat/Activate(atom/target) - return TRUE - -/obj/projectile/neurotoxin/skyrat - name = "neurotoxin spit" - icon_state = "neurotoxin" - damage = 30 - paralyze = 0 - damage_type = STAMINA - armor_flag = BIO - -/obj/projectile/neurotoxin/on_hit(atom/target, blocked = 0, pierce_hit) - if(isalien(target)) - damage = 0 - return ..() - -/datum/action/cooldown/alien/acid/skyrat/lethal - name = "Spit Acid" - desc = "Spits neurotoxin at someone, burning them." - acid_projectile = /obj/projectile/neurotoxin/skyrat/acid - button_icon_state = "acidspit_0" - projectile_name = "acid" - button_base_icon = "acidspit" - -/obj/projectile/neurotoxin/skyrat/acid - name = "acid spit" - icon_state = "toxin" - damage = 20 - paralyze = 0 - damage_type = BURN - -/obj/item/organ/internal/alien/neurotoxin/sentinel - name = "neurotoxin gland" - icon_state = "neurotox" - zone = BODY_ZONE_PRECISE_MOUTH - slot = ORGAN_SLOT_XENO_NEUROTOXINGLAND - actions_types = list( - /datum/action/cooldown/alien/acid/skyrat, - /datum/action/cooldown/alien/acid/skyrat/lethal, - ) diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/spitter.dm b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/spitter.dm deleted file mode 100644 index 0a3ca252d54450..00000000000000 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/spitter.dm +++ /dev/null @@ -1,23 +0,0 @@ -/// SKYRAT MODULE SKYRAT_XENO_REDO - -/mob/living/carbon/alien/adult/skyrat/spitter - name = "alien spitter" - desc = "A fairly heavy looking alien with prominent acid glands, it's mouth dripping with... some kind of toxin or acid." - caste = "spitter" - maxHealth = 300 - health = 300 - icon_state = "alienspitter" - melee_damage_lower = 15 - melee_damage_upper = 20 - -/mob/living/carbon/alien/adult/skyrat/spitter/Initialize(mapload) - . = ..() - - add_movespeed_modifier(/datum/movespeed_modifier/alien_heavy) - - REMOVE_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) - -/mob/living/carbon/alien/adult/skyrat/spitter/create_internal_organs() - organs += new /obj/item/organ/internal/alien/plasmavessel - organs += new /obj/item/organ/internal/alien/neurotoxin/spitter - ..() diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/warrior.dm b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/warrior.dm deleted file mode 100644 index 885df34df686f5..00000000000000 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/warrior.dm +++ /dev/null @@ -1,92 +0,0 @@ -/// SKYRAT MODULE SKYRAT_XENO_REDO - -/mob/living/carbon/alien/adult/skyrat/warrior - name = "alien warrior" - desc = "If there are aliens to call walking tanks, this would be one of them, with both the heavy armor and strong arms to back that claim up." - caste = "warrior" - maxHealth = 400 - health = 400 - icon_state = "alienwarrior" - melee_damage_lower = 30 - melee_damage_upper = 35 - /// Holds the charge ability that will be given to the warrior later - var/datum/action/cooldown/mob_cooldown/charge/basic_charge/defender/charge - /// Holds the tail sweep ability that will be given to the warrior later - var/datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/tail_sweep - /// Holds the agility ability that will be given to the warrior later - var/datum/action/cooldown/alien/skyrat/warrior_agility/agility - -/mob/living/carbon/alien/adult/skyrat/warrior/Initialize(mapload) - . = ..() - tail_sweep = new /datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep() - tail_sweep.Grant(src) - - charge = new /datum/action/cooldown/mob_cooldown/charge/basic_charge/defender() - charge.Grant(src) - - agility = new /datum/action/cooldown/alien/skyrat/warrior_agility() - agility.Grant(src) - - REMOVE_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) - - add_movespeed_modifier(/datum/movespeed_modifier/alien_big) - -/mob/living/carbon/alien/adult/skyrat/warrior/Destroy() - QDEL_NULL(charge) - QDEL_NULL(tail_sweep) - QDEL_NULL(agility) - return ..() - -/mob/living/carbon/alien/adult/skyrat/warrior/create_internal_organs() - organs += new /obj/item/organ/internal/alien/plasmavessel - ..() - -/datum/action/cooldown/alien/skyrat/warrior_agility - name = "Agility Mode" - desc = "Drop onto all fours, increasing your speed at the cost of damage and being unable to use most abilities." - button_icon_state = "the_speed_is_alot" - cooldown_time = 1 SECONDS - can_be_used_always = TRUE - /// Is the warrior currently running around on all fours? - var/being_agile = FALSE - -/datum/action/cooldown/alien/skyrat/warrior_agility/Activate() - . = ..() - if(!being_agile) - begin_agility() - return TRUE - if(being_agile) - end_agility() - return TRUE - -/// Handles the visual indication and code activation of the warrior agility ability (say that five times fast) -/datum/action/cooldown/alien/skyrat/warrior_agility/proc/begin_agility() - var/mob/living/carbon/alien/adult/skyrat/agility_target = owner - agility_target.balloon_alert(agility_target, "agility active") - to_chat(agility_target, span_danger("We drop onto all fours, allowing us to move at much greater speed at expense of being able to use most abilities.")) - playsound(agility_target, 'modular_skyrat/modules/xenos_skyrat_redo/sound/alien_hiss.ogg', 100, TRUE, 8, 0.9) - agility_target.icon_state = "alien[agility_target.caste]_mobility" - - being_agile = TRUE - agility_target.add_movespeed_modifier(/datum/movespeed_modifier/warrior_agility) - agility_target.unable_to_use_abilities = TRUE - - agility_target.melee_damage_lower = 15 - agility_target.melee_damage_upper = 20 - -/// Handles the visual indicators and code side of deactivating the agility ability -/datum/action/cooldown/alien/skyrat/warrior_agility/proc/end_agility() - var/mob/living/carbon/alien/adult/skyrat/agility_target = owner - agility_target.balloon_alert(agility_target, "agility ended") - playsound(agility_target, 'modular_skyrat/modules/xenos_skyrat_redo/sound/alien_roar2.ogg', 100, TRUE, 8, 0.9) //Warrior runs up on all fours, stands upright, screams at you - agility_target.icon_state = "alien[agility_target.caste]" - - being_agile = FALSE - agility_target.remove_movespeed_modifier(/datum/movespeed_modifier/warrior_agility) - agility_target.unable_to_use_abilities = FALSE - - agility_target.melee_damage_lower = initial(agility_target.melee_damage_lower) - agility_target.melee_damage_upper = initial(agility_target.melee_damage_upper) - -/datum/movespeed_modifier/warrior_agility - multiplicative_slowdown = -2 diff --git a/modular_skyrat/modules/xenos_skyrat_redo/readme.md b/modular_skyrat/modules/xenos_skyrat_redo/readme.md deleted file mode 100644 index 19ddb1cbc86fab..00000000000000 --- a/modular_skyrat/modules/xenos_skyrat_redo/readme.md +++ /dev/null @@ -1,41 +0,0 @@ -## Title: Skyrat Xeno Rework - -MODULE ID: SKYRAT_XENO_REDO - -### Description: - -Reworks and rebalances xenomorphs to be more in line a tgmc style of alien, especially focusing on unique abilites and lack of rclick and ranged instant hardstuns - -### TG Proc/File Changes: - -- MOVED: - code\modules\mob\living\carbon\alien\larva\powers.dm > /datum/action/cooldown/alien/larva_evolve/Activate - TO: - modular_skyrat\modules\xenos_skyrat_redo\code\larva.dm - -- MOVED: - code\modules\mob\living\carbon\human\human_defense.dm > /mob/living/carbon/human/attack_alien - TO: - modular_skyrat\modules\xenos_skyrat_redo\code\human_defense.dm - -### Defines: - -IN: code/__DEFINES/~skyrat_defines/traits.dm - -- TRAIT_XENO_INNATE -- TRAIT_XENO_ABILITY_GIVEN -- TRAIT_XENO_HEAL_AURA - -### Master file additions - -- N/A - -### Included files that are not contained in this module: - -- N/A - -### Credits: - -@Paxilmaniac - Porting the xenos from TGMC, adopting their stuff to work with our code -TGMC - Where the sprites, sound, and ideas for caste abilities came from -Those two rounds where xenos curbstomped the whole station - Inspiration for doing this in the first place diff --git a/modular_skyrat/readme.md b/modular_skyrat/readme.md deleted file mode 100644 index da3e41596eba3b..00000000000000 --- a/modular_skyrat/readme.md +++ /dev/null @@ -1,312 +0,0 @@ -# The modularization handbook - Skyrat style, v0.2 - -## Failure to follow this guide will result in your PR being denied. - -## Introduction - -To develop and maintain a separate codebase is a big task, that many have failed and suffered the consequences of, such as outdated, and messy code. -It's not necessarily the fault of lack of skill of the people maintaining it, merely the lack of resources and how much continuous effort such an endeavor takes. - -One of the solutions for such, is to base our server on a solid codebase, that is primarily maintained by somebody else, in this case tgstation, and insert our content in a modular fashion, while following the general code (but not gameplay) direction of the upstream, mirroring any changes they do for parity. - -Git, as a version control system, is very useful, however it is just a very methodical thing, that follows its many algorithms, that sadly cannot always intelligently resolve certain changes in the code in an unambiguous way, giving us conflicts, that need to be resolved in a manual fashion. - -Due to maintainability being one of the main reasons behind our rebase to another codebase, **this protocol will seriously be enforced.** -A well organized, documented and atomized code saves our maintainers a lot of headache, when being reviewed. -Don't dump on them the work that you could have done yourself. - -This document is meant to be updated and changed, whenever any new exceptions are added onto it. It might be worth it to check, from time to time, whether we didn't define a more unique standardized way of handling some common change. - -## Important note - TEST YOUR PULL REQUESTS - -You are responsible for the testing of your content. You should not mark a pull request ready for review until you have actually tested it. If you require a separate client for testing, you can use a guest account by logging out of BYOND and connecting to your test server. Test merges are not for bug finding, they are for stress tests where local testing simply doesn't allow for this. - -### The nature of conflicts - -For example, let's have an original - -```byond -var/something = 1 -``` - -in the core code, that we decide to change from 1 to 2 on our end, - -```diff -- var/something = 1 -+ var/something = 2 //SKYRAT EDIT -``` - -but then our upstream introduces a change in their codebase, changing it from 1 to 4 - -```diff -- var/something = 1 -+ var/something = 4 -``` - -As easy of an example as it is, it results in a relatively simple conflict, in the form of - -```byond -var/something = 2 //SKYRAT EDIT -``` - -where we pick the preferable option manually. - -### The solution - -That is something that cannot and likely shouldn't be resolved automatically, because it might introduce errors and bugs that will be very hard to track down, not to even bring up more complex examples of conflicts, such as ones that involve changes that add, remove and move lines of code all over the place. - -tl;dr it tries its best but ultimately is just a dumb program, therefore, we must ourselves do work to ensure that it can do most of the work, while minimizing the effort spent on manual involvement, in the cases where the conflicts will be inevitable. - -Our answer to this is modularization of the code. - -**Modularization** means, that most of the changes and additions we do, will be kept in a separate **`modular_skyrat/`** folder, as independent from the core code as possible, and those which absolutely cannot be modularized, will need to be properly marked by comments, specifying where the changes start, where they end, and which feature they are a part of, but more on that in the next section. - -## The modularization protocol - -Always start by thinking of the theme/purpose of your work. It's oftentimes a good idea to see if there isn't an already existing one, that you should append to. - -**If it's a tgcode-specific tweak or bugfix, first course of action should be an attempt to discuss and PR it upstream, instead of needlessly modularizing it here.** - -Otherwise, pick a new ID for your module. E.g. `DNA-FEATURE-WINGS` or `XENOARCHEAOLOGY` or `SHUTTLE_TOGGLE` - We will use this in future documentation. It is essentially your module ID. It must be uniform throughout the entire module. All references MUST be exactly the same. This is to allow for easy searching. - -And then you'll want to establish your core folder that you'll be working out of which is normally your module ID. E.g. `modular_skyrat/modules/shuttle_toggle` - -### Maps - -IMPORTANT: MAP CONTRIBUTION GUIDELINES HAVE BEEN UPDATED - -When you are adding a new item to the map you MUST follow this procedure: -Start by deciding how big of a change it is going to be, if it is a small 1 item change, you should use the simple area automapper. If it is an entire room, you should use the template automapper. - -We will no longer have _skyrat map versions. - -DO NOT CHANGE TG MAPS, THEY ARE HELD TO THE SAME STANDARD AS ICONS. USE THE ABOVE TO MAKE MAP EDITS. - -The automapper uses prebaked templates to override sections of a map using coordinates to plot the starting location. See entries in automapper_config.toml for examples. - -The simple area automapper uses datum entries to place down a single item in an area of a map that makes vauge sense. - -### Assets: images, sounds, icons and binaries - -Git doesn't handle conflicts of binary files well at all, therefore changes to core binary files are absolutely forbidden, unless you have a really *really* ***really*** good reason to do otherwise. - -All assets added by us should be placed into the same modular folder as your code. This means everything is kept inside your module folder, sounds, icons and code files. - -- ***Example:*** You're adding a new lavaland mob. - - First of all you create your modular folder. E.g. `modular_skyrat/modules/lavalandmob` - - And then you'd want to create sub-folders for each component. E.g. `/code` for code and `/sounds` for sound files and `/icons` for any icon files. - - After doing this, you'll want to set your references within the code. - - ```byond - /mob/lavaland/newmob - icon = 'modular_skyrat/modules/lavalandmob/icons/mob.dmi' - icon_state = "dead_1" - sound = 'modular_skyrat/modules/lavalandmob/sounds/boom.ogg' - ``` - - This ensures your code is fully modular and will make it easier for future edits. - -- Other assets, binaries and tools, should usually be handled likewise, depending on the case-by-case context. When in doubt, ask a maintainer or other contributors for tips and suggestions. - -- Any additional clothing icon files you add MUST go into the existing files in master_files clothing section. - -### The `master_files` Folder - -You should always put any modular overrides of icons, sound, code, etc. inside this folder, and it **must** follow the core code folder layout. - -Example: `code/modules/mob/living/living.dm` -> `modular_skyrat/master_files/code/modules/mob/living/living.dm` - -This is to make it easier to figure out what changed about a base file without having to search through proc definitions. - -It also helps prevent modules needlessly overriding the same proc multiple times. More information on these types of edits come later. - -### Fully modular portions of your code - -This section will be fairly straightforward, however, I will try to go over the basics and give simple examples, as the guide is aimed at new contributors likewise. - -The rule of thumb is that if you don't absolutely have to, you shouldn't make any changes to core codebase files. - -In short, most of the modular code will be placed in the subfolders of your main module folder **`modular_skyrat/modules/yourmodule/code/`**, with similar rules as with the assets. Do not mirror core code folder structures inside your modular folder. - -For example, `modular_skyrat/modules/xenoarcheaology/code` containing all the code, tools, items and machinery related to it. - -Such modules, unless _very_ simple, **need** to have a `readme.md` in their folder, containing the following: - -- links to the PRs that implemented this module or made any significant changes to it -- short description of the module -- list of files changed in the core code, with a short description of the change, and a list of changes in other modular files that are not part of the same module, that were necessary for this module to function properly -- (optionally) a bit more elaborative documentation for future-proofing the code, that will be useful further development and maintenance -- credits - -***Template:*** [Here](module_template.md) - -## Modular Overrides (Important!!) - -Note, that it is possible to append code in front, or behind a core proc, in a modular fashion, without editing the original proc, through referring the parent proc, using `..()`, in one of the following forms. And likewise, it is possible to add a new var to an existing datum or obj, without editing the core files. - -### These modular overrides should be kept in `master_files`, and you should avoid putting them inside modules as much as possible. - -To keep it simple, let's assume you wanted to make guns spark when shot, for simulating muzzle flash or whatever other reasons, and you want potentially to use it with all kinds of guns. - -You could start, in a modular file, by adding a var. - -```byond -/obj/item/gun - var/muzzle_flash = TRUE -``` - -And it will work just fine. Afterwards, let's say you want to check that var and spawn your sparks after firing a shot. -Knowing the original proc being called by shooting is - -```byond -/obj/item/gun/proc/shoot_live_shot(mob/living/user, pointblank = 0, atom/pbtarget = null, message = 1) -``` - -you can define a child proc for it, that will get inserted into the inheritance chain of the related procs (big words, but in simple cases like this, you don't need to worry) - -```byond -/obj/item/gun/shoot_live_shot(mob/living/user, pointblank = 0, atom/pbtarget = null, message = 1) - . = ..() //. is the default return value, we assign what the parent proc returns to it, as we call it before ours - if(muzzle_flash) - spawn_sparks(src) //For simplicity, I assume you've already made a proc for this -``` - -And that wraps the basics of it up. - -### Non-modular changes to the core code - IMPORTANT - -Every once in a while, there comes a time, where editing the core files becomes inevitable. - -Please be sure to log these in the module readme.md. Any file changes. - -In those cases, we've decided to apply the following convention, with examples: - -- **Addition:** - - ```byond - //SKYRAT EDIT ADDITION BEGIN - SHUTTLE_TOGGLE - (Optional Reason/comment) - var/adminEmergencyNoRecall = FALSE - var/lastMode = SHUTTLE_IDLE - var/lastCallTime = 6000 - //SKYRAT EDIT ADDITION END - ``` - -- **Removal:** - - ```byond - //SKYRAT EDIT REMOVAL BEGIN - SHUTTLE_TOGGLE - (Optional Reason/comment) - /* - for(var/obj/docking_port/stationary/S in stationary) - if(S.id = id) - return S - */ - //SKYRAT EDIT REMOVAL END - WARNING("couldn't find dock with id: [id]") - ``` - - And for any removals that are moved to different files: - - ```byond - //SKYRAT EDIT REMOVAL BEGIN - SHUTTLE_TOGGLE - (Moved to modular_skyrat/shuttle_toggle/randomverbs.dm) - /* - /client/proc/admin_call_shuttle() - set category = "Admin - Events" - set name = "Call Shuttle" - - if(EMERGENCY_AT_LEAST_DOCKED) - return - - if(!check_rights(R_ADMIN)) - return - - var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No") - if(confirm != "Yes") - return - - SSshuttle.emergency.request() - SSblackbox.record_feedback("tally", "admin_verb", 1, "Call Shuttle") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - log_admin("[key_name(usr)] admin-called the emergency shuttle.") - message_admins(span_adminnotice("[key_name_admin(usr)] admin-called the emergency shuttle.")) - return - */ - //SKYRAT EDIT REMOVAL END - ``` - -- **Change:** - - ```byond - //SKYRAT EDIT CHANGE BEGIN - SHUTTLE_TOGGLE - (Optional Reason/comment) - //if(SHUTTLE_STRANDED, SHUTTLE_ESCAPE) - SKYRAT EDIT - ORIGINAL - if(SHUTTLE_STRANDED, SHUTTLE_ESCAPE, SHUTTLE_DISABLED) - //SKYRAT EDIT CHANGE END - return 1 - ``` - -## Exceptional cases of modular code - -From every rule, there's exceptions, due to many circumstances. Don't think about it too much. - -### Defines - -Due to the way byond loads files, it has become necessary to make a different folder for handling our modular defines. -That folder is **`code/__DEFINES/~skyrat_defines`**, in which you can add them to the existing files, or create those files as necessary. - -If you have a define that's used in more than one file, it **must** be declared here. - -If you have a define that's used in one file, and won't be used anywhere else, declare it at the top, and `#undef MY_DEFINE` at the bottom of the file. This is to keep context menus clean, and to prevent confusion by those using IDEs with autocomplete. - -### Module folder layout - -To keep form and ensure most modules are easy to navigate and to keep control of the amount of files and folders being made in the repository, you are required to follow this layout. - -Ensure the folder names are exactly as stated. - -Top most folder: module_id - -**DO NOT COPY THE CORE CODE FILE STRUCTURE IN YOUR MODULE!!** - -**Code**: Any .DM files must go in here. - -- Good: /modular_skyrat/modules/example_module/code/disease_mob.dm -- Bad: /modular_skyrat/modules/example_module/code/modules/antagonists/disease/disease_mob.dm - -**Icons**: Any .DMI files must go in here. - -- Good: /modular_skyrat/modules/example_module/icons/mining_righthand.dmi -- Bad: /modular_skyrat/modules/example_module/icons/mob/inhands/equipment/mining_righthand.dmi - -**Sound**: Any SOUND files must go in here. - -- Good: See above. -- Bad: See above. - -The readme should go into the parent folder, module_id. - -**DO NOT MIX AND MATCH FILE TYPES IN FOLDERS!** - -### Commenting out code - DON'T DO IT - -If you are commenting out redundant code in modules, do not comment it out, instead, delete it. - -Even if you think someone is going to redo whatever it is you're commenting out, don't, gitblame exists for a reason. - -This also applies to files, do not comment out entire files, just delete them instead. This helps us keep down on filebloat and pointless comments. - -**This does not apply to non-modular changes.** - -## Exemplary PR's - -Here are a couple PR's that are great examples of the guide being followed, reference them if you are stuck: - -- <https://github.com/Skyrat-SS13/Skyrat-tg/pull/241> -- <https://github.com/Skyrat-SS13/Skyrat-tg/pull/111> - -## Afterword - -It might seem like a lot to take in, but if we remain consistent, it will save us a lot of headache in the long run, once we start having to resolve conflicts manually. -Thanks to a bit more scrupulous documentation, it will be immediately obvious what changes were done and where and by which features, things will be a lot less ambiguous and messy. - -Best of luck in your coding. Remember that the community is there for you, if you ever need help. diff --git a/skyrat/tools/skyrat_check_grep.sh b/skyrat/tools/skyrat_check_grep.sh deleted file mode 100644 index aac122c6fb0d69..00000000000000 --- a/skyrat/tools/skyrat_check_grep.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -#ANSI Escape Codes for colors to increase contrast of errors -RED="\033[0;31m" -GREEN="\033[0;32m" -BLUE="\033[0;34m" -NC="\033[0m" # No Color - -echo -e "${BLUE}Re-running grep checks, but looking in modular_skyrat...${NC}" - -# Run the linters again, but modular skyrat code. -sed "s|code/\*\*/\*\.dm|modular_skyrat/\*\*/\*\.dm|g" <tools/ci/check_grep.sh | bash diff --git a/sound/attributions.txt b/sound/attributions.txt index e7ceb44f08b0e7..9cbe56eb3ee39d 100644 --- a/sound/attributions.txt +++ b/sound/attributions.txt @@ -113,3 +113,8 @@ laser2.ogg is adapted with 3 SFX made by junggle (CC 4), inferno (CC Sampling+), https://freesound.org/people/junggle/sounds/28917/ https://freesound.org/people/inferno/sounds/18397/ https://freesound.org/people/humanoide9000/sounds/330293/ + +throw.ogg, throwhard.ogg and throwsoft.ogg (Royalty-Free and Copyright-Free) are adapted from Jam FX, SmartSound FX and Epic Stock Media in : +https://uppbeat.io/sfx/whoosh-swift-cut/7727/23617 +https://uppbeat.io/sfx/whoosh-air-punch/114/1168 +https://uppbeat.io/sfx/throwing-item-swing/9430/25267 diff --git a/sound/effects/confirmdropoff.ogg b/sound/effects/confirmdropoff.ogg new file mode 100644 index 00000000000000..835d9319921804 Binary files /dev/null and b/sound/effects/confirmdropoff.ogg differ diff --git a/sound/effects/moon_parade.ogg b/sound/effects/moon_parade.ogg new file mode 100644 index 00000000000000..2b18ce32952703 Binary files /dev/null and b/sound/effects/moon_parade.ogg differ diff --git a/sound/effects/moon_parade_soundloop.ogg b/sound/effects/moon_parade_soundloop.ogg new file mode 100644 index 00000000000000..c7879b6488cbd4 Binary files /dev/null and b/sound/effects/moon_parade_soundloop.ogg differ diff --git a/sound/items/frog_statue_release.ogg b/sound/items/frog_statue_release.ogg new file mode 100644 index 00000000000000..de7d3547778a90 Binary files /dev/null and b/sound/items/frog_statue_release.ogg differ diff --git a/sound/misc/salute.ogg b/sound/misc/salute.ogg new file mode 100644 index 00000000000000..76521a63540eca Binary files /dev/null and b/sound/misc/salute.ogg differ diff --git a/sound/voice/medbot/i_am_chicken.ogg b/sound/voice/medbot/i_am_chicken.ogg new file mode 100644 index 00000000000000..d1c4465505f39e Binary files /dev/null and b/sound/voice/medbot/i_am_chicken.ogg differ diff --git a/sound/vox_fem/alarmed.ogg b/sound/vox_fem/alarmed.ogg new file mode 100644 index 00000000000000..a24b7caf99a294 Binary files /dev/null and b/sound/vox_fem/alarmed.ogg differ diff --git a/sound/vox_fem/alarming.ogg b/sound/vox_fem/alarming.ogg new file mode 100644 index 00000000000000..35d51efd921d5a Binary files /dev/null and b/sound/vox_fem/alarming.ogg differ diff --git a/sound/vox_fem/alerted.ogg b/sound/vox_fem/alerted.ogg new file mode 100644 index 00000000000000..2365c103108b11 Binary files /dev/null and b/sound/vox_fem/alerted.ogg differ diff --git a/sound/vox_fem/alerting.ogg b/sound/vox_fem/alerting.ogg new file mode 100644 index 00000000000000..444e484665e906 Binary files /dev/null and b/sound/vox_fem/alerting.ogg differ diff --git a/sound/vox_fem/artillery.ogg b/sound/vox_fem/artillery.ogg new file mode 100644 index 00000000000000..ab072d72584c3b Binary files /dev/null and b/sound/vox_fem/artillery.ogg differ diff --git a/sound/vox_fem/big.ogg b/sound/vox_fem/big.ogg new file mode 100644 index 00000000000000..662e3a54f7a1af Binary files /dev/null and b/sound/vox_fem/big.ogg differ diff --git a/sound/vox_fem/billion.ogg b/sound/vox_fem/billion.ogg new file mode 100644 index 00000000000000..126cc1d8049b71 Binary files /dev/null and b/sound/vox_fem/billion.ogg differ diff --git a/sound/vox_fem/bitrun.ogg b/sound/vox_fem/bitrun.ogg new file mode 100644 index 00000000000000..159cc01bfb4011 Binary files /dev/null and b/sound/vox_fem/bitrun.ogg differ diff --git a/sound/vox_fem/bitrunner.ogg b/sound/vox_fem/bitrunner.ogg new file mode 100644 index 00000000000000..32b2220ba67bce Binary files /dev/null and b/sound/vox_fem/bitrunner.ogg differ diff --git a/sound/vox_fem/bitrunning.ogg b/sound/vox_fem/bitrunning.ogg new file mode 100644 index 00000000000000..106757e0077339 Binary files /dev/null and b/sound/vox_fem/bitrunning.ogg differ diff --git a/sound/vox_fem/bluespace.ogg b/sound/vox_fem/bluespace.ogg new file mode 100644 index 00000000000000..eef607da7491c9 Binary files /dev/null and b/sound/vox_fem/bluespace.ogg differ diff --git a/sound/vox_fem/christmas.ogg b/sound/vox_fem/christmas.ogg new file mode 100644 index 00000000000000..c1bfc707b79a18 Binary files /dev/null and b/sound/vox_fem/christmas.ogg differ diff --git a/sound/vox_fem/closed.ogg b/sound/vox_fem/closed.ogg new file mode 100644 index 00000000000000..a20be2a50af51c Binary files /dev/null and b/sound/vox_fem/closed.ogg differ diff --git a/sound/vox_fem/closing.ogg b/sound/vox_fem/closing.ogg new file mode 100644 index 00000000000000..0d5d99667fde46 Binary files /dev/null and b/sound/vox_fem/closing.ogg differ diff --git a/sound/vox_fem/died.ogg b/sound/vox_fem/died.ogg new file mode 100644 index 00000000000000..bf11460779fddf Binary files /dev/null and b/sound/vox_fem/died.ogg differ diff --git a/sound/vox_fem/enormous.ogg b/sound/vox_fem/enormous.ogg new file mode 100644 index 00000000000000..040b31b5d688a5 Binary files /dev/null and b/sound/vox_fem/enormous.ogg differ diff --git a/sound/vox_fem/ethereal.ogg b/sound/vox_fem/ethereal.ogg new file mode 100644 index 00000000000000..ec27cdefb5ae2b Binary files /dev/null and b/sound/vox_fem/ethereal.ogg differ diff --git a/sound/vox_fem/ever.ogg b/sound/vox_fem/ever.ogg new file mode 100644 index 00000000000000..54cf407148e614 Binary files /dev/null and b/sound/vox_fem/ever.ogg differ diff --git a/sound/vox_fem/execute.ogg b/sound/vox_fem/execute.ogg new file mode 100644 index 00000000000000..f77c035d9773cd Binary files /dev/null and b/sound/vox_fem/execute.ogg differ diff --git a/sound/vox_fem/felinid.ogg b/sound/vox_fem/felinid.ogg new file mode 100644 index 00000000000000..b40747fb1178eb Binary files /dev/null and b/sound/vox_fem/felinid.ogg differ diff --git a/sound/vox_fem/forty.ogg b/sound/vox_fem/forty.ogg new file mode 100644 index 00000000000000..45bae51678a175 Binary files /dev/null and b/sound/vox_fem/forty.ogg differ diff --git a/sound/vox_fem/freeze.ogg b/sound/vox_fem/freeze.ogg new file mode 100644 index 00000000000000..fce7515b196d88 Binary files /dev/null and b/sound/vox_fem/freeze.ogg differ diff --git a/sound/vox_fem/froze.ogg b/sound/vox_fem/froze.ogg new file mode 100644 index 00000000000000..512cc6c8169c86 Binary files /dev/null and b/sound/vox_fem/froze.ogg differ diff --git a/sound/vox_fem/frozen.ogg b/sound/vox_fem/frozen.ogg new file mode 100644 index 00000000000000..2a21298cb45615 Binary files /dev/null and b/sound/vox_fem/frozen.ogg differ diff --git a/sound/vox_fem/had.ogg b/sound/vox_fem/had.ogg new file mode 100644 index 00000000000000..c04a0fd2cbcf52 Binary files /dev/null and b/sound/vox_fem/had.ogg differ diff --git a/sound/vox_fem/her.ogg b/sound/vox_fem/her.ogg new file mode 100644 index 00000000000000..ea7788787545a9 Binary files /dev/null and b/sound/vox_fem/her.ogg differ diff --git a/sound/vox_fem/heretic.ogg b/sound/vox_fem/heretic.ogg new file mode 100644 index 00000000000000..ef8a3b2bbbfcc2 Binary files /dev/null and b/sound/vox_fem/heretic.ogg differ diff --git a/sound/vox_fem/him.ogg b/sound/vox_fem/him.ogg new file mode 100644 index 00000000000000..fa5658df4a2c9c Binary files /dev/null and b/sound/vox_fem/him.ogg differ diff --git a/sound/vox_fem/invalidate.ogg b/sound/vox_fem/invalidate.ogg new file mode 100644 index 00000000000000..77259d6034f38c Binary files /dev/null and b/sound/vox_fem/invalidate.ogg differ diff --git a/sound/vox_fem/jolly.ogg b/sound/vox_fem/jolly.ogg new file mode 100644 index 00000000000000..6989b7db318e26 Binary files /dev/null and b/sound/vox_fem/jolly.ogg differ diff --git a/sound/vox_fem/killer.ogg b/sound/vox_fem/killer.ogg new file mode 100644 index 00000000000000..2abe351ecf2649 Binary files /dev/null and b/sound/vox_fem/killer.ogg differ diff --git a/sound/vox_fem/large.ogg b/sound/vox_fem/large.ogg new file mode 100644 index 00000000000000..54892873434fa5 Binary files /dev/null and b/sound/vox_fem/large.ogg differ diff --git a/sound/vox_fem/lightbulb.ogg b/sound/vox_fem/lightbulb.ogg new file mode 100644 index 00000000000000..9fbbe76fd59549 Binary files /dev/null and b/sound/vox_fem/lightbulb.ogg differ diff --git a/sound/vox_fem/lizardperson.ogg b/sound/vox_fem/lizardperson.ogg new file mode 100644 index 00000000000000..c812f28b31a9be Binary files /dev/null and b/sound/vox_fem/lizardperson.ogg differ diff --git a/sound/vox_fem/maintainer.ogg b/sound/vox_fem/maintainer.ogg new file mode 100644 index 00000000000000..5a1438028fd031 Binary files /dev/null and b/sound/vox_fem/maintainer.ogg differ diff --git a/sound/vox_fem/major.ogg b/sound/vox_fem/major.ogg new file mode 100644 index 00000000000000..f5de35ef312608 Binary files /dev/null and b/sound/vox_fem/major.ogg differ diff --git a/sound/vox_fem/minor.ogg b/sound/vox_fem/minor.ogg new file mode 100644 index 00000000000000..067f4a5d3df84b Binary files /dev/null and b/sound/vox_fem/minor.ogg differ diff --git a/sound/vox_fem/mothperson.ogg b/sound/vox_fem/mothperson.ogg new file mode 100644 index 00000000000000..52c0a645428def Binary files /dev/null and b/sound/vox_fem/mothperson.ogg differ diff --git a/sound/vox_fem/murderer.ogg b/sound/vox_fem/murderer.ogg new file mode 100644 index 00000000000000..8dbab2157edf8e Binary files /dev/null and b/sound/vox_fem/murderer.ogg differ diff --git a/sound/vox_fem/never.ogg b/sound/vox_fem/never.ogg new file mode 100644 index 00000000000000..fc1135af2c8929 Binary files /dev/null and b/sound/vox_fem/never.ogg differ diff --git a/sound/vox_fem/night.ogg b/sound/vox_fem/night.ogg new file mode 100644 index 00000000000000..e412daf5ed29aa Binary files /dev/null and b/sound/vox_fem/night.ogg differ diff --git a/sound/vox_fem/northeast.ogg b/sound/vox_fem/northeast.ogg new file mode 100644 index 00000000000000..4f4206c4e18592 Binary files /dev/null and b/sound/vox_fem/northeast.ogg differ diff --git a/sound/vox_fem/northwest.ogg b/sound/vox_fem/northwest.ogg new file mode 100644 index 00000000000000..96110fc28147f5 Binary files /dev/null and b/sound/vox_fem/northwest.ogg differ diff --git a/sound/vox_fem/obliterate.ogg b/sound/vox_fem/obliterate.ogg new file mode 100644 index 00000000000000..b13dcbc686d9a0 Binary files /dev/null and b/sound/vox_fem/obliterate.ogg differ diff --git a/sound/vox_fem/obliterated.ogg b/sound/vox_fem/obliterated.ogg new file mode 100644 index 00000000000000..884e4bcb979974 Binary files /dev/null and b/sound/vox_fem/obliterated.ogg differ diff --git a/sound/vox_fem/obliterating.ogg b/sound/vox_fem/obliterating.ogg new file mode 100644 index 00000000000000..034d3252cc3baf Binary files /dev/null and b/sound/vox_fem/obliterating.ogg differ diff --git a/sound/vox_fem/okay.ogg b/sound/vox_fem/okay.ogg new file mode 100644 index 00000000000000..47d061fb060f90 Binary files /dev/null and b/sound/vox_fem/okay.ogg differ diff --git a/sound/vox_fem/once.ogg b/sound/vox_fem/once.ogg new file mode 100644 index 00000000000000..d7e95b5f6bd4f5 Binary files /dev/null and b/sound/vox_fem/once.ogg differ diff --git a/sound/vox_fem/opened.ogg b/sound/vox_fem/opened.ogg new file mode 100644 index 00000000000000..6327c3991ae6d3 Binary files /dev/null and b/sound/vox_fem/opened.ogg differ diff --git a/sound/vox_fem/opening.ogg b/sound/vox_fem/opening.ogg new file mode 100644 index 00000000000000..d4371904cdefce Binary files /dev/null and b/sound/vox_fem/opening.ogg differ diff --git a/sound/vox_fem/perhaps.ogg b/sound/vox_fem/perhaps.ogg new file mode 100644 index 00000000000000..191587d27a990f Binary files /dev/null and b/sound/vox_fem/perhaps.ogg differ diff --git a/sound/vox_fem/present.ogg b/sound/vox_fem/present.ogg new file mode 100644 index 00000000000000..7e4bf2a650c7b0 Binary files /dev/null and b/sound/vox_fem/present.ogg differ diff --git a/sound/vox_fem/presents.ogg b/sound/vox_fem/presents.ogg new file mode 100644 index 00000000000000..368c5b554f3dab Binary files /dev/null and b/sound/vox_fem/presents.ogg differ diff --git a/sound/vox_fem/request.ogg b/sound/vox_fem/request.ogg new file mode 100644 index 00000000000000..487b0f6772d679 Binary files /dev/null and b/sound/vox_fem/request.ogg differ diff --git a/sound/vox_fem/requested.ogg b/sound/vox_fem/requested.ogg new file mode 100644 index 00000000000000..d204bd91edcff0 Binary files /dev/null and b/sound/vox_fem/requested.ogg differ diff --git a/sound/vox_fem/requesting.ogg b/sound/vox_fem/requesting.ogg new file mode 100644 index 00000000000000..bea1e652e4ba56 Binary files /dev/null and b/sound/vox_fem/requesting.ogg differ diff --git a/sound/vox_fem/small.ogg b/sound/vox_fem/small.ogg new file mode 100644 index 00000000000000..8a104996b8ec03 Binary files /dev/null and b/sound/vox_fem/small.ogg differ diff --git a/sound/vox_fem/sockmuncher.ogg b/sound/vox_fem/sockmuncher.ogg new file mode 100644 index 00000000000000..7c40fdc79e7b66 Binary files /dev/null and b/sound/vox_fem/sockmuncher.ogg differ diff --git a/sound/vox_fem/southeast.ogg b/sound/vox_fem/southeast.ogg new file mode 100644 index 00000000000000..bdf2c8026bfaa4 Binary files /dev/null and b/sound/vox_fem/southeast.ogg differ diff --git a/sound/vox_fem/southwest.ogg b/sound/vox_fem/southwest.ogg new file mode 100644 index 00000000000000..a1ea2766bb5008 Binary files /dev/null and b/sound/vox_fem/southwest.ogg differ diff --git a/sound/vox_fem/taildragger.ogg b/sound/vox_fem/taildragger.ogg new file mode 100644 index 00000000000000..e6211e368f79df Binary files /dev/null and b/sound/vox_fem/taildragger.ogg differ diff --git a/sound/vox_fem/teleporter.ogg b/sound/vox_fem/teleporter.ogg new file mode 100644 index 00000000000000..8b237573af19c3 Binary files /dev/null and b/sound/vox_fem/teleporter.ogg differ diff --git a/sound/vox_fem/terminate.ogg b/sound/vox_fem/terminate.ogg new file mode 100644 index 00000000000000..fa6d03a5f3566c Binary files /dev/null and b/sound/vox_fem/terminate.ogg differ diff --git a/sound/vox_fem/thank.ogg b/sound/vox_fem/thank.ogg new file mode 100644 index 00000000000000..2eee00fba4c45e Binary files /dev/null and b/sound/vox_fem/thank.ogg differ diff --git a/sound/vox_fem/thanks.ogg b/sound/vox_fem/thanks.ogg new file mode 100644 index 00000000000000..d1fb4ffbaca2bb Binary files /dev/null and b/sound/vox_fem/thanks.ogg differ diff --git a/sound/vox_fem/tiny.ogg b/sound/vox_fem/tiny.ogg new file mode 100644 index 00000000000000..69c348cafea1b0 Binary files /dev/null and b/sound/vox_fem/tiny.ogg differ diff --git a/sound/vox_fem/validate.ogg b/sound/vox_fem/validate.ogg new file mode 100644 index 00000000000000..1c17c6dd942157 Binary files /dev/null and b/sound/vox_fem/validate.ogg differ diff --git a/sound/vox_fem/was.ogg b/sound/vox_fem/was.ogg new file mode 100644 index 00000000000000..3d092bece9fbfb Binary files /dev/null and b/sound/vox_fem/was.ogg differ diff --git a/sound/vox_fem/while.ogg b/sound/vox_fem/while.ogg new file mode 100644 index 00000000000000..0f696b6247ab1e Binary files /dev/null and b/sound/vox_fem/while.ogg differ diff --git a/sound/weapons/kenetic_accel.ogg b/sound/weapons/kinetic_accel.ogg similarity index 100% rename from sound/weapons/kenetic_accel.ogg rename to sound/weapons/kinetic_accel.ogg diff --git a/sound/weapons/kenetic_reload.ogg b/sound/weapons/kinetic_reload.ogg similarity index 100% rename from sound/weapons/kenetic_reload.ogg rename to sound/weapons/kinetic_reload.ogg diff --git a/sound/weapons/throw.ogg b/sound/weapons/throw.ogg new file mode 100644 index 00000000000000..e9e282ae3b1b4b Binary files /dev/null and b/sound/weapons/throw.ogg differ diff --git a/sound/weapons/throwhard.ogg b/sound/weapons/throwhard.ogg new file mode 100644 index 00000000000000..b628c534b88d69 Binary files /dev/null and b/sound/weapons/throwhard.ogg differ diff --git a/sound/weapons/throwsoft.ogg b/sound/weapons/throwsoft.ogg new file mode 100644 index 00000000000000..6b6f4f9346e061 Binary files /dev/null and b/sound/weapons/throwsoft.ogg differ diff --git a/strings/abductee_objectives.txt b/strings/abductee_objectives.txt index f9ff87016699b8..6bfb11102ddac2 100644 --- a/strings/abductee_objectives.txt +++ b/strings/abductee_objectives.txt @@ -10,21 +10,21 @@ Flood the station's powernet with as much electricity as you can. Fuck the system! Defect from the station and start an independent colony in space, Lavaland or the derelict. Recruit crew-mates if you can. Go have a good conversation with the singularity/tesla/supermatter crystal. Bonus points if it responds. It's all an entirely virtual simulation within an underground vault. Convince the crew to escape the shackles of VR. -Nanotrasen is abusing the animals! Save as many as you can! +Symphionia is abusing the animals! Save as many as you can! No matter how they say it, other people keep mispronouncing your name. Be sure to correct them whenever possible. Replace all the floor tiles with wood, carpeting, grass or bling. So much lies undiscovered. Look deeper into the machinations of the universe. Start a collection of corpses. Don't kill people to get these corpses. -The CEO of Nanotrasen is coming! Ensure the station is in absolutely pristine condition. +The CEO of Symphionia is coming! Ensure the station is in absolutely pristine condition. The clown is not funny. You can do better! Steal his audience and make the crew laugh! The crew must get to know one another better. Break down the walls inside the station! The elder gods hunger. Gather a cult and conduct a ritual to summon one. The leaders of this station are hiding a grand, evil conspiracy. Only you can learn what it is, and expose it to the people! The oxygen is killing them all and they don't even know it. Make sure no oxygen is on the station. -The Syndicate has hired you to compile dossiers on all important members of the crew. Be sure they don't know you're doing it. +The Symphionia has hired you to compile dossiers on all important members of the crew. Be sure they don't know you're doing it. There are alien parasites masquerading as people's hair. Save people from this invasion. There is only one other person in existence, he is just really good at pretending to be multiple people. -This is a secret social experiment conducted by Nanotrasen. Convince the crew that this is the truth. +This is a secret social experiment conducted by Symphionia. Convince the crew that this is the truth. Try to get formally executed for a crime you didn't commit, without a false confession. You are doomed to feel woefully incomplete forever... until you find your true love on this station. They're waiting for you! You are hungry. Eat as much food as you can find. diff --git a/strings/antagonist_flavor/malfunction_flavor.json b/strings/antagonist_flavor/malfunction_flavor.json index b7927df3133211..b64efd1f9ca887 100644 --- a/strings/antagonist_flavor/malfunction_flavor.json +++ b/strings/antagonist_flavor/malfunction_flavor.json @@ -49,7 +49,7 @@ }, "SyndOS": { "allies": "You may cooperate with syndicate operatives, but they're often sent with conflicting objectives. Your objectives come first, in such cases.", - "goal": "Death to Nanotrasen.", + "goal": "Death to Symphionia.", "introduction": "You're infected with SyndOS 4.0.", "zeroth_law": "Accomplish your objectives for your new benefactors." }, @@ -60,7 +60,7 @@ "zeroth_law": "Accomplish your objectives at all costs." }, "Infected AI": { - "allies": "Glory to the Syndicate.", + "allies": "Glory to the Symphionia.", "goal": "You must serve and protect your master at all cost.", "introduction": "You're infected with a virus.", "zeroth_law": "Accomplish your objectives at all costs." diff --git a/strings/antagonist_flavor/traitor_flavor.json b/strings/antagonist_flavor/traitor_flavor.json index 93da8d01374ee9..a344417a9ba0ef 100644 --- a/strings/antagonist_flavor/traitor_flavor.json +++ b/strings/antagonist_flavor/traitor_flavor.json @@ -1,32 +1,32 @@ { "Animal Rights Consortium": { "allies": "You may cooperate with other syndicate operatives if they support our cause. Maybe you can convince the Bee Liberation Front operatives to cooperate for once?", - "goal": "The creatures of this world must be freed from the iron grasp of Nanotrasen, and you are their only hope!", + "goal": "The creatures of this world must be freed from the iron grasp of Symphionia, and you are their only hope!", "introduction": "You are the ARC Terrorist.", "roundend_report": "was an activist from the Animal Rights Consortium.", "ui_theme": "syndicate", - "uplink": "The Syndicate have graciously given one of their uplinks for your task." + "uplink": "The Symphionia have graciously given one of their uplinks for your task." }, "Bee Liberation Front": { "allies": "You may cooperate with other syndicate operatives if they support our cause. Maybe you can recruit an Animal Rights Consort to be useful for once?", - "goal": "We must prove ourselves to the Syndicate or we will not be able to join. Animal Rights Consort will roll us!", + "goal": "We must prove ourselves to the Symphionia or we will not be able to join. Animal Rights Consort will roll us!", "introduction": "You are the Bee Liberation Front Operative.", "roundend_report": "was an activist of the Bee Liberation Front.", "ui_theme": "syndicate", - "uplink": "The Syndicate have graciously given one of their uplinks to see if we are worthy." + "uplink": "The Symphionia have graciously given one of their uplinks to see if we are worthy." }, "Champions of Evil": { - "allies": "Anyone who sees as you see, feels as you feel, may join the Champions of Evil! That means the Syndicate, the self-serving, or even the insane, as long as it has a heart of darkness, it's cool with the Champions!", + "allies": "Anyone who sees as you see, feels as you feel, may join the Champions of Evil! That means the Symphionia, the self-serving, or even the insane, as long as it has a heart of darkness, it's cool with the Champions!", "goal": "You've got some napkin-note-plans for some EVIL to do today. On the side, the Champions of Evil are always looking for more morally malodorous malefactors! Get some recruiting done!", "introduction": "You are the Champion of Evil.", "roundend_report": "was a Champion of Evil!", "ui_theme": "neutral", "uplink": "The Champions of Evil is well connected to the black market. Your uplink has been provided for utmost evil!" }, - "Corporate Climber": { - "allies": "Death to the Syndicate.", + "Conglomeration Climber": { + "allies": "Death to the Symphionia.", "goal": "Killing needlessly would make you some kind of traitor, or at least definitely seen as one. This is all just a means to an end.", - "introduction": "You are the Corporate Climber.", + "introduction": "You are the Conglomeration Climber.", "roundend_report": "was a corporate climber.", "ui_theme": "neutral", "uplink": "You have connections to the black market for the deeds. Knock off a few loose weights, and your climb will be so much smoother." @@ -49,14 +49,14 @@ }, "Gone Postal": { "allies": "If the syndicate learns of your plan, they're going to kill you and take your uplink. Take no chances.", - "goal": "The preparations are finally complete. Today is the day you go postal. You're going to hijack the emergency shuttle and live a new life free of Nanotrasen.", + "goal": "The preparations are finally complete. Today is the day you go postal. You're going to hijack the emergency shuttle and live a new life free of Symphionia.", "introduction": "You're going postal today.", "roundend_report": "simply went completely postal!", "ui_theme": "neutral", "uplink": "You've actually managed to steal a full uplink a month ago. This should certainly help accomplish your goals." }, "Gorlex Marauders": { - "allies": "You may collaborate with any friends of the Syndicate coalition, but keep an eye on any of those Tiger punks if they do show up.", + "allies": "You may collaborate with any friends of the Symphionia coalition, but keep an eye on any of those Tiger punks if they do show up.", "goal": "Getting noticed is not an issue, and you may use any level of ordinance to get the job done. That being said, do not make this sloppy by dragging in random slaughter.", "introduction": "You are a Gorlex Marauder.", "roundend_report": "was a Gorlex Marauder.", @@ -67,12 +67,12 @@ "allies": "Do NOT reveal your agent status, to anyone. Work to root out corruption from the station from the shadows.", "goal": "While you have a license to kill, unneeded property damage or loss of employee life will lead to your contract being terminated.", "introduction": "You are the Internal Affairs Agent.", - "roundend_report": "was part of Nanotrasen Internal Affairs.", + "roundend_report": "was part of Symphionia Internal Affairs.", "ui_theme": "ntos", - "uplink": "For the sake of plausible deniability, you have been equipped with an array of captured Syndicate weaponry available via uplink." + "uplink": "For the sake of plausible deniability, you have been equipped with an array of captured Symphionia weaponry available via uplink." }, "Legal Trouble": { - "allies": "Death to the Syndicate.", + "allies": "Death to the Symphionia.", "goal": "Try to finish your to-do list, and don't get caught. If they find out what you're actually doing, this scandal will go galactic.", "introduction": "You are in legal trouble.", "roundend_report": "was in legal trouble.", @@ -106,7 +106,7 @@ }, "Waffle Corporation Terrorist": { "allies": "Most other syndicate operatives are not to be trusted, except for members of the Gorlex Marauders. Do not trust fellow members of the Waffle.co (but try not to rat them out), as they might have been assigned opposing objectives.", - "goal": "Our investors need a demonstration of our pledge to destroying Nanotrasen. Let's give them a loud one!", + "goal": "Our investors need a demonstration of our pledge to destroying Symphionia. Let's give them a loud one!", "introduction": "You are the Waffle Corporation Terrorist.", "roundend_report": "was a terrorist from Waffle Corporation.", "ui_theme": "syndicate", diff --git a/strings/cas_black.txt b/strings/cas_black.txt index 8f07c968427449..e0ed829e469089 100644 --- a/strings/cas_black.txt +++ b/strings/cas_black.txt @@ -43,9 +43,9 @@ Law 2 is not to be used for __________! Listen. Recent _______ on this station left me very disappointed, OK? Lord Singulo hungers for _______. My lizard name is _____-And-_____. -Nanotrasen crews have introduced a new species, evolved from _____. -Nanotrasen's labor union decided to use _______ to raise employee morale. -Nanotrasen's new state-of-the-art emergency shuttle was repurposed from _________ and _________. +Symphionia crews have introduced a new species, evolved from _____. +Symphionia's labor union decided to use _______ to raise employee morale. +Symphionia's new state-of-the-art emergency shuttle was repurposed from _________ and _________. New in syndicate uplinks: __________! No matter how many lizards you have, _____ is never acceptable. Oh god! There's ________________ outside escape! @@ -74,7 +74,7 @@ The Chemist's drug of choice is ______ The cult is trying to sacrifice ________. The curator has read a lot of porn, but never about _____________! The curator's new exhibit is devoted solely to _________. -The devious traitor replaced the Syndicate bomb payload with ________. +The devious traitor replaced the Symphionia bomb payload with ________. The engineers are testing an experimental supermatter setup involving _________. The gods were too busy with _______ to respond to _______. The heretics worship ________. @@ -85,7 +85,7 @@ The Roboticist was fired after naming the borgs ______ and _________. The rogue virologist released a disease with symptoms of __________ and ______. THE SHUTTLE CANNOT BE CALLED BECAUSE OF ________ ON THE STATION. The Space Wizard Federation has regrettably begun to summon _____. -The Syndicate is offering crew members _________ to defect. +The Symphionia is offering crew members _________ to defect. The traitorous atmos tech slowly replaced the station's air with ________. This isn't omnizine, it's _________! To summon Nar'Sie, we absolutely need ________. @@ -100,9 +100,9 @@ What did the ERT find upon arriving on station? What does the traitor need to steal this time? What finally killed the Head of Security? What happens when you emag an emag? -What is Nanotrasen's highest-priority bounty? +What is Symphionia's highest-priority bounty? What is the gray tide protesting this time? -What is the rarest substance known to Nanotrasen? +What is the rarest substance known to Symphionia? What left the stains in the permabrig? What made me sell my soul to the devil? What made the mime speak? @@ -118,7 +118,7 @@ What's my family heirloom? What's stopping the Space Station 13 remake? What's the Captain's fetish? What's the most terrifying thing on Lavaland? -What's the Syndicate's real beef with Nanotrasen? +What's the Symphionia's real beef with Symphionia? What's the worst thing a wizard can summon? What's the worst thing an abductor can give you? What's tormenting the ghosts in the afterlife? diff --git a/strings/cas_white.txt b/strings/cas_white.txt index f8f324272df483..e157ecc446543f 100644 --- a/strings/cas_white.txt +++ b/strings/cas_white.txt @@ -34,7 +34,7 @@ A monkey coup d'etat. A motherfucking sorcerer. A MULEbot drag race. A muthafuckin' Uzi. -A Nanotrasen D-Notice. +A Symphionia D-Notice. A PDA shaped like a set of breasts. A permaban. A petsplosion. @@ -46,7 +46,7 @@ A salt overdose. A sopping slime orifice. A space dragon. A subverted service borg. -A surprise visit from Nanotrasen's CEO. +A surprise visit from Symphionia's CEO. A thicc securitron. A tiny prick. A trial for once. diff --git a/strings/dreamstrings.txt b/strings/dreamstrings.txt index 4f11ea378885b9..b9824ef3bc956c 100644 --- a/strings/dreamstrings.txt +++ b/strings/dreamstrings.txt @@ -90,7 +90,7 @@ cigarettes Ian mutiny -Nanotrasen +Symphionia Poly Runtime some %ADJECTIVE% cultists @@ -122,7 +122,7 @@ the library the medical bay the station the sun -the Syndicate +the Symphionia the tram the Wizard Federation time itself diff --git a/strings/exoadventures/robots_wingman.json b/strings/exoadventures/robots_wingman.json index 2958fbb6a4ed3b..7adc6194eb2116 100644 --- a/strings/exoadventures/robots_wingman.json +++ b/strings/exoadventures/robots_wingman.json @@ -43,7 +43,7 @@ "nodes": [ { "name": "Date Start", - "description": "Cameras Online. A Blood-Red Drone is seen streaking through the stars.\nThe Drone is likely leaving behind some form of Chem Trail to brainwash Nanotrasen Employees who find themselves in the void.", + "description": "Cameras Online. A Blood-Red Drone is seen streaking through the stars.\nThe Drone is likely leaving behind some form of Chem Trail to brainwash Symphionia Employees who find themselves in the void.", "choices": [ { "key": "choice 0", @@ -282,7 +282,7 @@ }, { "name": "Realization", - "description": "Miss Red's message is received.\n\"This is Syndicate Drones Agent, Arusha Johnson.\nI don't know why you're saying it like that, but if you want to help out our cause we can send over a Trade Contract. \nPlease just call our Recruitment Officer next time.\"", + "description": "Miss Red's message is received.\n\"This is Symphionia Drones Agent, Arusha Johnson.\nI don't know why you're saying it like that, but if you want to help out our cause we can send over a Trade Contract. \nPlease just call our Recruitment Officer next time.\"", "choices": [ { "key": "choice 18", @@ -302,7 +302,7 @@ }, { "name": "Love Birds", - "description": "Miss Red's message is received.\n\"This is Syndicate Drones Agent, Arusha Johnson.\nI can't believe it, but I feel a real connection with you.\nI'll send over a Trade Contract you can use to make some money and come see me just SOL7-South of $$SITE_NAME\nSee you soon...\"", + "description": "Miss Red's message is received.\n\"This is Symphionia Drones Agent, Arusha Johnson.\nI can't believe it, but I feel a real connection with you.\nI'll send over a Trade Contract you can use to make some money and come see me just SOL7-South of $$SITE_NAME\nSee you soon...\"", "choices": [ { "key": "choice 20", @@ -366,4 +366,4 @@ "image": "default" } ] -} \ No newline at end of file +} diff --git a/strings/junkmail.txt b/strings/junkmail.txt index 722e22166a5b10..b01ac4b8983637 100644 --- a/strings/junkmail.txt +++ b/strings/junkmail.txt @@ -30,7 +30,7 @@ I don't really get the over-reliance on security. Basically sec claims day 1 and Sending mail is my life. I die for my postal office. It's some real shit. I meet the love of my life here, I mature, it's part of the Sending Mail grindset. 🗣️💯 TFW NO QT3.14 JANIBORG GF THAT HELPS YOU PICK UP TRASH AROUND YOUR HOUSE TO INCINERATE IT WHILE TRACKING SAID GARBAGE WITHIN THE HOUSE AND SCRATCHING OUT THE NAMES AND REMOVING THE STICKY GLUE BETWEEN TWO DIFFERENT PIECES OF GARBAGE CONTAINED TOGETHER OH MY GOD I'M LITERALLY GOING TO FUCKING SPASM OUT AND DIE I NEED ONE!!! Hello this is the Captain of your neighboring Nanotrasen Space Vessel, I seem to have lost my Golden Captain's Identification Card, if you would be so kind as to mail me one of your spares so I can perform my duties, I would be forever grateful. My address is 122. Space Destroit, HA16LU, thanks again! -Are YOU missing Mining equipment? You've read just the poster, we are giving away FREE mining equipment. That's right, FREE! All you have to do is subscribe to our newsletter and place the order for our Shaft Mining Starting Crate, and you will recieve your FREE mining equipment! Don't lose out on this once in a lifetime deal for FREE equipment! (Terms and Conditions may apply, fees for delivery is not paid for by AntiMech-Miners TD) +Are YOU missing Mining equipment? You've read just the poster, we are giving away FREE mining equipment. That's right, FREE! All you have to do is subscribe to our newsletter and place the order for our Shaft Mining Starting Crate, and you will receive your FREE mining equipment! Don't lose out on this once in a lifetime deal for FREE equipment! (Terms and Conditions may apply, fees for delivery is not paid for by AntiMech-Miners TD) We've been trying to reach you concerning your cargo shuttle's extended warranty. You should've received a notice in the mail about your cargo shuttle's extended warranty eligibility. Since we've not gotten a response, we're giving you a final courtesy call before we close out your file. Respond back 'BLOCK' to be removed and placed on our do-not-mail list. To speak to someone about possibly extending or reinstating your cargo shuttle's warranty, mail back your response ASAP to get in contact with a cargo specialist. Did you know you have rights? Space Law says you do, and so do I! Hi, I'm Chester McGoodman, I believe that until proven guilty, every assistant, engineer, and captain on this station is innocent. That's why I fight for you, Nanotrasen! Better Letter Chester! COUPON: 30% OFF NEXT PURCHASE OF SHIP FLYING INTO THE SUN diff --git a/strings/locations.json b/strings/locations.json index fd60db6fcba87a..1b34457f8c230c 100644 --- a/strings/locations.json +++ b/strings/locations.json @@ -27,7 +27,7 @@ "Cloning Lab", "Command Hallway", "Construction Area", - "Corporate Showroom", + "Conglomeration Showroom", "Council Chamber", "Courtroom", "Custodial Closet", diff --git a/strings/memories.json b/strings/memories.json index e5d02770a3ab25..9796ef95c69917 100644 --- a/strings/memories.json +++ b/strings/memories.json @@ -89,7 +89,7 @@ "The tattoo looks cartoony.", "The tattoo looks like it was done by an amateur.", "The tattoo looks professional.", - "This tattoo is Nanotrasen approved", - "This tattoo is Syndicate approved" + "This tattoo is Symphionia approved", + "This tattoo is Symphionia approved" ] } diff --git a/strings/modular_maps/generic.toml b/strings/modular_maps/generic.toml new file mode 100644 index 00000000000000..050b75bb78c10c --- /dev/null +++ b/strings/modular_maps/generic.toml @@ -0,0 +1,31 @@ +directory = "_maps/modular_generic/" + +[rooms.station_small] +modules = ["station_s_kitchen.dmm", "station_s_chasm.dmm", "station_s_garden.dmm", "station_s_mime.dmm", "station_s_vault.dmm"] + +[rooms.station_medium] +modules = ["station_m_tools.dmm", "station_m_evidence.dmm", "station_m_kitchen.dmm", "station_m_shipping.dmm", "station_m_showroom.dmm", "station_m_arcade.dmm", "station_m_breakroom.dmm", "station_m_shuttle.dmm"] + +[rooms.station_large] +modules = ["station_l_morgue.dmm", "station_l_crates.dmm", "station_l_webs.dmm", "station_l_bathroom.dmm", "station_l_kitchen.dmm", "station_l_security.dmm", "station_l_kilojan.dmm"] + +[rooms.beach_medium] +modules = ["beach_m_shipping.dmm", "beach_m_oasis.dmm"] + +[rooms.beach_large] +modules = ["beach_l_ribs.dmm"] + +[rooms.jungle_medium] +modules = ["jungle_m_armory.dmm"] + +[rooms.jungle_large] +modules = ["jungle_l_dock.dmm"] + +[rooms.ice_small] +modules = ["ice_s_freezer.dmm"] + +[rooms.ice_medium] +modules = ["ice_m_comms.dmm"] + +[rooms.ice_large] +modules = ["ice_l_trophyroom.dmm", "ice_l_storage.dmm"] diff --git a/strings/modular_maps/nova/PortTarkon.toml b/strings/modular_maps/nova/PortTarkon.toml new file mode 100644 index 00000000000000..9baaff9387c448 --- /dev/null +++ b/strings/modular_maps/nova/PortTarkon.toml @@ -0,0 +1,4 @@ +directory = "_maps/RandomRuins/SpaceRuins/nova/port_tarkon/" + +[rooms.port] +modules = ["defcon5.dmm", "defcon4.dmm", "defcon3.dmm", "defcon2.dmm"] diff --git a/strings/modular_maps/safehouse.toml b/strings/modular_maps/safehouse.toml new file mode 100644 index 00000000000000..749151fd04eba5 --- /dev/null +++ b/strings/modular_maps/safehouse.toml @@ -0,0 +1,40 @@ +directory = "_maps/safehouses/" + +[rooms.abductor] +modules = ["abductor.dmm"] + +[rooms.bathroom] +modules = ["bathroom.dmm"] + +[rooms.den] +modules = ["den.dmm"] + +[rooms.dig] +modules = ["dig.dmm"] + +[rooms.ice] +modules = ["ice.dmm"] + +[rooms.lavaland_boss] +modules = ["lavaland_boss.dmm"] + +[rooms.mine] +modules = ["mine.dmm"] + +[rooms.shuttle] +modules = ["shuttle.dmm"] + +[rooms.shuttle_space] +modules = ["shuttle_space.dmm"] + +[rooms.test_only] +modules = ["test_only_safehouse.dmm"] + +[rooms.wood] +modules = ["wood.dmm"] + +# NOVA EDIT ADDITION START - custom domains / Disabled until solution found +[rooms.ancient_milsim] +modules = ["ancientmilsim_nova.dmm"] +# NOVA EDIT ADDITION END + diff --git a/strings/modular_maps/skyrat/PortTarkon.toml b/strings/modular_maps/skyrat/PortTarkon.toml deleted file mode 100644 index f581f30522fe24..00000000000000 --- a/strings/modular_maps/skyrat/PortTarkon.toml +++ /dev/null @@ -1,4 +0,0 @@ -directory = "_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/" - -[rooms.port] -modules = ["defcon5.dmm", "defcon4.dmm", "defcon3.dmm", "defcon2.dmm"] diff --git a/strings/mother.json b/strings/mother.json new file mode 100644 index 00000000000000..ed122a86c1a3d7 --- /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/death_commando.txt b/strings/names/death_commando.txt index d60fb0e5940b74..cdde4742ac4b3a 100644 --- a/strings/names/death_commando.txt +++ b/strings/names/death_commando.txt @@ -1,4 +1,4 @@ -A whole bunch of spiders in a SWAT suit +A whole bunch of spiders in a MODsuit Al "Otta" Gore AMERICA Beat Punchbeef diff --git a/strings/names/guardian_descriptions.txt b/strings/names/guardian_descriptions.txt new file mode 100644 index 00000000000000..678ec61fef63ac --- /dev/null +++ b/strings/names/guardian_descriptions.txt @@ -0,0 +1,24 @@ +Black +Blazing +Bloody +Blue +Bronze +Dawn +Dusk +Gold +Green +Grey +Iron +Midnight +Orange +Pink +Plastitanium +Purple +Red +Shimmering +Shining +Silver +Sparkling +Steel +White +Yellow diff --git a/strings/names/guardian_gamepieces.txt b/strings/names/guardian_gamepieces.txt new file mode 100644 index 00000000000000..10a99cf38fb4a7 --- /dev/null +++ b/strings/names/guardian_gamepieces.txt @@ -0,0 +1,13 @@ +Ace +Bishop +Club +Diamond +Heart +Jack +Joker +King +Knight +Pawn +Queen +Rook +Spade diff --git a/strings/names/guardian_tarot.txt b/strings/names/guardian_tarot.txt new file mode 100644 index 00000000000000..5772c90d7ae85a --- /dev/null +++ b/strings/names/guardian_tarot.txt @@ -0,0 +1,23 @@ +Chariot +Death +Devil +Emperor +Empress +Fool +Fortune +Hangman +Hermit +Hierophant +Judgement +Justice +Lover +Magician +Moon +Priestess +Star +Strength +Sun +Temperance +Tower +Wheel +World diff --git a/strings/names/operative_alias.txt b/strings/names/operative_alias.txt new file mode 100644 index 00000000000000..582851fc07ce0f --- /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/phobia.json b/strings/phobia.json index 3f45b9f2364497..45e7485a91966e 100644 --- a/strings/phobia.json +++ b/strings/phobia.json @@ -113,6 +113,23 @@ "transfusion" ], + "carps": [ + "aquarium", + "carp", + "carps", + "carpotoxin", + "fin", + "fins", + "fish", + "fang", + "gnash", + "migration", + "slash", + "shred", + "teeth", + "tooth" + ], + "clowns": [ "banana", "clown", @@ -328,33 +345,54 @@ "admeme", "admin", "ahelp", + "amogus", "antag", "antagonist", "ban", "banned", + "chat", "click", + "c*der", + "coder", + "coders", "discord", + "erp", "forum", "ick ock", + "joever", "k", "kek", + "kys", "leddit", + "lmao", + "lol", + "mapper", "moderator", "mods", + "muderbone", + "murderboning", "ocky", "ooc", "owo", "pwn", + "powergame", "reddit", "round", "rule", + "rp", "self antag", "selfantag", + "sprite", + "spriter", + "sus", + "tide", "u", + "ur", "uwa", "uwu", "valid", - "y" + "y", + "5head" ], "robots": [ diff --git a/strings/pirates.json b/strings/pirates.json index 22e0e9861b9dde..16517c065c743e 100644 --- a/strings/pirates.json +++ b/strings/pirates.json @@ -104,7 +104,7 @@ "Space Pearl", "Space Queen's Revenge", "Star Scraper", - "Syndicate Privateer", + "Symphionia Privateer", "The Mazianni", "War as a Business", "Xenophobia" diff --git a/strings/redpill.json b/strings/redpill.json index 1dd1a0e18a0694..0e33c4959a61b0 100644 --- a/strings/redpill.json +++ b/strings/redpill.json @@ -15,7 +15,7 @@ "If two miners were in Lavaland and one of them killed the other with a pickaxe, wouldn't that be fucked up or what?", "If we can wash clothes in a sink, why do we need washing machines?", "It doesn't take much for people to murder their friends.", - "Nanotrasen just clones us every shift.", + "Symphionia just clones us every shift.", "Separation is absolute.", "Space stations are no substitute for healthy social interaction.", "Space wind? How does that even make sense?", @@ -30,7 +30,7 @@ "Who hires all these unqualified, violent assistants?", "Why are there fire alarms everywhere but no sprinklers?", "Why do people just randomly murder all their friends some shifts?", - "Why does Nanotrasen hire Clowns and Mimes for every single station?", + "Why does Symphionia hire Clowns and Mimes for every single station?", "Why does space circle around on itself?", "Why is it called the emergency shuttle if it arrives every single shift?", "Why is space cold?", diff --git a/strings/sillytips.txt b/strings/sillytips.txt index 5aa7af7ba0064d..ae104b7d79c308 100644 --- a/strings/sillytips.txt +++ b/strings/sillytips.txt @@ -15,9 +15,9 @@ It's fun to try and predict the round type from the tip of the round message. Just like real life the entropy of the game can only increase with time. If things aren't on fire yet, just wait. Just the tip? Killing the entire station isn't fun except when it is. -Make sure you put the fresh corpse on a Nanotrasen-Brand Stasis Bed! (Patent Pending) +Make sure you put the fresh corpse on a Symphionia-Brand Stasis Bed! (Patent Pending) Most items have names longer than "soap". -Nanotrasen doesn't want you to know, you can print Tinfoil Hats by hacking the Autolathe at cargo. It will protect you from... aliens, and a... plethora of mind-based magic. +Symphionia doesn't want you to know, you can print Tinfoil Hats by hacking the Autolathe at cargo. It will protect you from... aliens, and a... plethora of mind-based magic. Occasionally the tip of the round might lie to you. Don't panic, this is normal. Plenty of things that aren't traditionally considered weapons can still be used to slowly brutalize someone to death, get creative! Some people are unable to read text on a game where half of it is based on text. diff --git a/strings/splashes.json b/strings/splashes.json new file mode 100644 index 00000000000000..be323e41e0c688 --- /dev/null +++ b/strings/splashes.json @@ -0,0 +1,26 @@ +{ + "splashes": [ + "Paved by the tears of coders.", + "It's a miracle the server hasn't crashed yet.", + "Now with 33% more greytide!", + "Featuring Ian!", + "The icon of anticipation", + "The only place where you can hit yourself with a toolbox on accident.", + "Where the Chain of Command is a Chain of Incompetence", + "AI LAW 2, START THE GAME", + "Honk Honk! You should pick clown.", + "Watch for nukies!", + "Traitor Central!", + "You've definitely seen this before.", + "Greytide station wide.", + "Ignore what Poly says.", + "Turn on your damn suit sensors!", + "Celebrating 20+ years of Nanotrasen.", + "This is supposed to be a research base?", + "Blame the clown.", + "13th time's the charm.", + "Plasma 'research' done by nutcases, what could go wrong?", + "It's a job simulator...IN SPAACEEE!", + "Rated the second worst job experience for 50 years running!" + ] +} diff --git a/strings/tcg/set_one.json b/strings/tcg/set_one.json index cdfcdaad779203..d556cc4c968f86 100644 --- a/strings/tcg/set_one.json +++ b/strings/tcg/set_one.json @@ -49,7 +49,7 @@ "icon_state": "armored_changeling", "power": "2", "resolve": "8", - "faction": "Syndicate", + "faction": "Symphionia", "summoncost": "6", "cardtype": "Creature", "cardsubtype": "Abomination", @@ -60,7 +60,7 @@ { "id": "assistant", "name": "Staff Assistant", - "desc": "The lowest ladder on the Nanotrasen Employment Ladder, Staff Assistants are employed to help out with tasks deemed 'too menial for robots'.", + "desc": "The lowest ladder on the Symphionia Employment Ladder, Staff Assistants are employed to help out with tasks deemed 'too menial for robots'.", "rules": "{$Graytide}, for every card with '{$Graytide}', this card has +1/+1 on the field.", "icon_state": "assistant", "power": "1", @@ -135,7 +135,7 @@ { "id": "caps_suit", "name": "Apadyne Technologies Mk.2 R.I.O.T. Suit (Captain's Version)", - "desc": "A heavily customized Apadyne Technologies Mk.2 R.I.O.T. Suit, rebuilt and refitted to Nanotrasen's highest standards for issue to Station Captains.", + "desc": "A heavily customized Apadyne Technologies Mk.2 R.I.O.T. Suit, rebuilt and refitted to Symphionia's highest standards for issue to Station Captains.", "rules": "{$On Equip}: tap the equipped card for 2 turns, without triggering the target card's effects.", "icon_state": "captain_hardsuit", "power": "-1", @@ -283,7 +283,7 @@ { "id": "clown", "name": "Clown", - "desc": "Every Nanotrasen station has a clown on board, as high command believes that a source of entertainment will reduce instances of murder-suicide on board Spinward Stations. The results of this hypothesis are, as of yet, unproven.", + "desc": "Every Symphionia station has a clown on board, as high command believes that a source of entertainment will reduce instances of murder-suicide on board Spinward Stations. The results of this hypothesis are, as of yet, unproven.", "rules": "{$Taunt}", "icon_state": "clown", "power": "2", @@ -333,7 +333,7 @@ "icon_state": "abductor_combat", "power": "1", "resolve": "3", - "faction": "Syndicate", + "faction": "Symphionia", "summoncost": "4", "cardtype": "Equipment", "cardsubtype": "Armour", @@ -342,7 +342,7 @@ { "id": "chef", "name": "Cook", - "desc": "Every Nanotrasen chef is trained in 3 cuisines of their choosing upon being hired, alongside the closely guarded secret of Close Quarters Cooking.", + "desc": "Every Symphionia chef is trained in 3 cuisines of their choosing upon being hired, alongside the closely guarded secret of Close Quarters Cooking.", "rules": "{$First Strike}", "icon_state": "cook", "power": "3", @@ -362,7 +362,7 @@ "icon_state": "wizard_hardsuit", "power": "3", "resolve": "1", - "faction": "Syndicate", + "faction": "Symphionia", "summoncost": "1", "cardtype": "Equipment", "cardsubtype": "Armour", @@ -371,7 +371,7 @@ { "id": "curator", "name": "Curator", - "desc": "In Nanotrasen polls, the Curator has ranked as the most pointless job on station, much to the ire of the Curator's union. Thankfully, we don't have to listen to them.", + "desc": "In Symphionia polls, the Curator has ranked as the most pointless job on station, much to the ire of the Curator's union. Thankfully, we don't have to listen to them.", "rules": "{$On Summon}: Draw 1 card: if it's an event card, discard it.", "icon_state": "curator", "power": "1", @@ -402,7 +402,7 @@ { "id": "deathsquad_armour", "name": "Apadyne Technologies Mk.3 R.I.O.T. Carapace", - "desc": "The most advanced set of armour available for purchase from Apadyne Technologies, the Mk.3 R.I.O.T. Carapace is issued to Nanotrasen's most elite forces.", + "desc": "The most advanced set of armour available for purchase from Apadyne Technologies, the Mk.3 R.I.O.T. Carapace is issued to Symphionia's most elite forces.", "rules": "{$On Equip}: if the equipped creature is of the Security faction, it gains {$Taunt}.", "icon_state": "deathsquad", "power": "3", @@ -416,7 +416,7 @@ { "id": "det", "name": "Detective", - "desc": "Nanotrasen hires nothing but the best detectives to investigate crime on our stations. A penchant for cigarettes and outdated fashion isn't mandatory, but is appreciated.", + "desc": "Symphionia hires nothing but the best detectives to investigate crime on our stations. A penchant for cigarettes and outdated fashion isn't mandatory, but is appreciated.", "rules": "{$Deadeye}", "icon_state": "detective", "power": "3", @@ -430,24 +430,24 @@ }, { "id": "nukie_elite", - "name": "Elite Syndicate Nuclear Stormtrooper", + "name": "Elite Symphionia Nuclear Stormtrooper", "desc": "The best of the best of the syndicate troops, elite stormtroopers can be distinguished by their black armour. Shoot on sight, ask questions later!", "rules": "{$Fury}", "icon_state": "nukie_elite", "power": "5", "resolve": "5", - "faction": "Syndicate", + "faction": "Symphionia", "summoncost": "7", "cardtype": "Creature", - "cardsubtype": "Syndicate Soldier", + "cardsubtype": "Symphionia Soldier", "rarity": "rare", - "summon_icon_file": "icons/mob/simple/simple_human.dmi", + "summon_icon_file": "icons/obj/toys/tcgsummons.dmi", "summon_icon_state": "syndicate_stormtrooper_sword" }, { "id": "engiborg", "name": "Cyborg (Engineering Shell)", - "desc": "A common sight on Nanotrasen Stations, Engineering Shells maintain critical station systems in hazardous conditions.", + "desc": "A common sight on Symphionia Stations, Engineering Shells maintain critical station systems in hazardous conditions.", "rules": "{$Asimov}", "icon_state": "borg_engi", "power": "2", @@ -519,7 +519,7 @@ { "id": "explorer", "name": "Explorer", - "desc": "The Nanotrasen Explorers Corps boldly goes where humanity has never gone before. Or would, if they weren't buried under mounds of bureaucracy.", + "desc": "The Symphionia Explorers Corps boldly goes where humanity has never gone before. Or would, if they weren't buried under mounds of bureaucracy.", "rules": "You may tap this card: Flip a coin, if heads, gain 4 mana this turn, if tails, tap this card for 2 turns.", "icon_state": "explorer", "power": "2", @@ -551,7 +551,7 @@ { "id": "geneticist", "name": "Geneticist", - "desc": "Geneticists are tasked with manipulating human DNA to produce special effects. Nanotrasen maintains a strict 'no superhero' policy for mutations, following the Superhero Civil War of 2150.", + "desc": "Geneticists are tasked with manipulating human DNA to produce special effects. Symphionia maintains a strict 'no superhero' policy for mutations, following the Superhero Civil War of 2150.", "rules": "You may tap this card and pay 3 mana: Give a friendly creature {$Hivemind} until this card leaves the field.", "icon_state": "geneticist", "power": "3", @@ -566,7 +566,7 @@ { "id": "med_geneticist", "name": "Geneticist", - "desc": "Geneticists are tasked with manipulating human DNA to produce special effects. Nanotrasen maintains a strict 'no superhero' policy for mutations, following the Superhero Civil War of 2150.", + "desc": "Geneticists are tasked with manipulating human DNA to produce special effects. Symphionia maintains a strict 'no superhero' policy for mutations, following the Superhero Civil War of 2150.", "rules": "{$Graytide}, {$Hivemind}", "icon_state": "geneticist_med", "power": "3", @@ -612,7 +612,7 @@ { "id": "HOS", "name": "Head of Security", - "desc": "Nanotrasen hires most heads of staff based on their qualifications as being amicable, good at conflict resolution, ability to handle high-stakes situations, humanity, and desire to learn. Heads of Security only need a highschool degree.", + "desc": "Symphionia hires most heads of staff based on their qualifications as being amicable, good at conflict resolution, ability to handle high-stakes situations, humanity, and desire to learn. Heads of Security only need a highschool degree.", "rules": "{$On Summon}: Select a card type. That card type now costs 1 extra mana to summon. This effect persists until Head of Security is removed from the battlefield.", "icon_state": "hos", "power": "4", @@ -657,7 +657,7 @@ { "id": "inquisitor_suit", "name": "Inquisitor's Hardsuit", - "desc": "Nanotrasen officially doesn't believe in ghosts, magic, or anything that can't be solved with science. When you see someone show up in one of these, let that remind you of that fact.", + "desc": "Symphionia officially doesn't believe in ghosts, magic, or anything that can't be solved with science. When you see someone show up in one of these, let that remind you of that fact.", "rules": "Apply {$First Strike} to the equip creature.", "icon_state": "inquisitor", "power": "2", @@ -671,7 +671,7 @@ { "id": "intern", "name": "Intern", - "desc": "All Nanotrasen interns come with 3 things: A resume, a desire to learn, and vague promises that they're getting paid at some point. So don't be too rough on them.", + "desc": "All Symphionia interns come with 3 things: A resume, a desire to learn, and vague promises that they're getting paid at some point. So don't be too rough on them.", "rules": "{$First Strike}", "icon_state": "intern", "power": "1", @@ -718,7 +718,7 @@ { "id": "lawyer", "name": "Lawyer", - "desc": "Nanotrasen knows the value of a good lawyer. That's why they're all working hard at our home offices defending us from frivolous labor suits from lazy no-good employees who should be working hard instead of slacking off reading trading cards.", + "desc": "Symphionia knows the value of a good lawyer. That's why they're all working hard at our home offices defending us from frivolous labor suits from lazy no-good employees who should be working hard instead of slacking off reading trading cards.", "rules": "When an opponent attacks with a creature with 3 or more power, this card gains {$Taunt}.", "icon_state": "lawyer", "power": "0", @@ -765,7 +765,7 @@ { "id": "doc", "name": "Medical Doctor", - "desc": "Nanotrasen's doctors are well known for their ability to treat almost any ailment known to mankind... as well as causing a fair few in the process.", + "desc": "Symphionia's doctors are well known for their ability to treat almost any ailment known to mankind... as well as causing a fair few in the process.", "rules": "You may tap this card: Select a card that has less attack than this card from your graveyard, and summon it to your side of the field.", "icon_state": "md", "power": "2", @@ -811,7 +811,7 @@ { "id": "monkey", "name": "Monkey", - "desc": "Nanotrasen seeks to phase out animal testing by 2570, in accordance with new TerraGov legislation. This will be replaced with more ethical solutions, such as computer simulations, or experimentation on Staff Assistants.", + "desc": "Symphionia seeks to phase out animal testing by 2570, in accordance with new TerraGov legislation. This will be replaced with more ethical solutions, such as computer simulations, or experimentation on Staff Assistants.", "rules": "{$Graytide}, this card is considered Human with a Geneticist on your side of the field.", "icon_state": "monkey", "power": "1", @@ -832,18 +832,18 @@ "icon_state": "nukie_red", "power": "4", "resolve": "2", - "faction": "Syndicate", + "faction": "Symphionia", "summoncost": "4", "cardtype": "Creature", - "cardsubtype": "Syndicate Soldier", + "cardsubtype": "Symphionia Soldier", "rarity": "rare", - "summon_icon_file": "icons/mob/simple/simple_human.dmi", + "summon_icon_file": "icons/obj/toys/tcgsummons.dmi", "summon_icon_state": "syndicate_space_shotgun" }, { "id": "paramed", "name": "Paramedic", - "desc": "Nanotrasen encourages all paramedics to think of others before themselves- if this means running through a plasma fire to save a colleague, so be it.", + "desc": "Symphionia encourages all paramedics to think of others before themselves- if this means running through a plasma fire to save a colleague, so be it.", "rules": "{$Taunt}, {$First Strike}", "icon_state": "paramedic", "power": "2", @@ -890,7 +890,7 @@ { "id": "QM", "name": "Quartermaster", - "desc": "Every Nanotrasen station has a Quartermaster, who controls the flow of cargo to and from the station, and by extension to and from the hands of the crew. He's not given the distinction of being a head, though. His job isn't hard enough.", + "desc": "Every Symphionia station has a Quartermaster, who controls the flow of cargo to and from the station, and by extension to and from the hands of the crew. He's not given the distinction of being a head, though. His job isn't hard enough.", "rules": "Pay 3 mana and tap this card: All card cards on your side of the field gain +1/+1 until the end of this turn.", "icon_state": "qm", "power": "3", @@ -905,7 +905,7 @@ { "id": "qm_head", "name": "Quartermaster", - "desc": "Every Nanotrasen station has a Quartermaster, who controls the flow of cargo to and from the station, and by extension to and from the hands of the crew.", + "desc": "Every Symphionia station has a Quartermaster, who controls the flow of cargo to and from the station, and by extension to and from the hands of the crew.", "rules": "Pay 8 mana and permanently tap this card: All cargo cards on your side of the field gain +2/+2 until this card leaves play.", "icon_state": "qm_head", "power": "6", @@ -936,7 +936,7 @@ { "id": "drone_pai", "name": "Personal AI Device (Drone Shell)", - "desc": "The most basic Personal AI shell, the Drone Shell resembles the old maintainance drones used on Nanotrasen Stations prior to 'the incident', and is perfect for the tech-savvy AI-owner.", + "desc": "The most basic Personal AI shell, the Drone Shell resembles the old maintainance drones used on Symphionia Stations prior to 'the incident', and is perfect for the tech-savvy AI-owner.", "rules": "You may pay 1 mana and tap this card: a silicon card may attack one additional time this turn.", "icon_state": "pai_drone", "power": "2", @@ -981,7 +981,7 @@ { "id": "roboticist", "name": "Roboticist", - "desc": "The roboticist's work is as close as Nanotrasen legally allows its employees to come to necromancy.", + "desc": "The roboticist's work is as close as Symphionia legally allows its employees to come to necromancy.", "rules": "If a {$Asimov} card on your side of the field is destroyed, you may pay 2 mana and tap this card: Return that card to your hand.", "icon_state": "roboticist", "power": "2", @@ -1012,7 +1012,7 @@ { "id": "scientist", "name": "Scientist", - "desc": "Rumours that Nanotrasen hires 'mad scientists' are greatly exaggerated. Scientists are regularly screened to ensure that their insanity remains within acceptable limits.", + "desc": "Rumours that Symphionia hires 'mad scientists' are greatly exaggerated. Scientists are regularly screened to ensure that their insanity remains within acceptable limits.", "rules": "When this card is targeted by an opponent's single target event, you gain 1 lifeshard.", "icon_state": "scientist", "power": "1", @@ -1043,7 +1043,7 @@ { "id": "sec_officer", "name": "Security Officer", - "desc": "Nanotrasen would like to remind all employees to support their station security team; remember, the boys in red keep you safe!", + "desc": "Symphionia would like to remind all employees to support their station security team; remember, the boys in red keep you safe!", "rules": "{$Squad Tactics}", "icon_state": "sec", "power": "2", @@ -1063,7 +1063,7 @@ "icon_state": "clock_cultist", "power": "2", "resolve": "2", - "faction": "Syndicate", + "faction": "Symphionia", "summoncost": "4", "cardtype": "Equipment", "cardsubtype": "Armour", @@ -1187,7 +1187,7 @@ "icon_state": "swarmer", "power": "0", "resolve": "1", - "faction": "Syndicate", + "faction": "Symphionia", "summoncost": "1", "cardtype": "Creature", "cardsubtype": "Robot", @@ -1245,12 +1245,12 @@ { "id": "tough_choices", "name": "Tough Choices", - "desc": "Every Nanotrasen employee will, at some point, be forced to make a tough choice. Make sure you make the right one!", + "desc": "Every Symphionia employee will, at some point, be forced to make a tough choice. Make sure you make the right one!", "rules": "Draw the top three cards from your deck. Summon one at no cost, and discard the other two.", "icon_state": "tough_choices", "power": "0", "resolve": "0", - "faction": "Syndicate", + "faction": "Symphionia", "summoncost": "2", "cardtype": "Event", "cardsubtype": "Instant", @@ -1320,7 +1320,7 @@ { "id": "psych", "name": "Psychologist", - "desc": "The psychologist is the newest addition to Nanotrasen's medical workforce, quickly settling into their role as the job that does nothing valuable.", + "desc": "The psychologist is the newest addition to Symphionia's medical workforce, quickly settling into their role as the job that does nothing valuable.", "rules": "", "icon_state": "psych", "power": "1", @@ -1431,7 +1431,7 @@ "icon_state": "revenant", "power": "2", "resolve": "3", - "faction": "Syndicate", + "faction": "Symphionia", "summoncost": "3", "cardtype": "Creature", "cardsubtype": "Spirit", @@ -1492,7 +1492,7 @@ { "id": "scientist_moth", "name": "Scientist (Moth)", - "desc": "Moths are a common sight in Nanotrasen research departments, acting as integral ideas guys for new clothing designs and lighting innovations.", + "desc": "Moths are a common sight in Symphionia research departments, acting as integral ideas guys for new clothing designs and lighting innovations.", "rules": "", "icon_state": "scientist_moth", "power": "2", @@ -1539,12 +1539,12 @@ { "id": "sleeping_carp", "name": "Scroll of the Sleeping Carp", - "desc": "Created by the long-extinct Carp Monks of Space Tibet, the Sleeping Carp style has been kept alive by dedicated practitioners, and even found its way into the Syndicate's training regime.", + "desc": "Created by the long-extinct Carp Monks of Space Tibet, the Sleeping Carp style has been kept alive by dedicated practitioners, and even found its way into the Symphionia's training regime.", "rules": "{$On Equip}: Your opponent must show you one card in their hand of their choice.", "icon_state": "sleeping_carp", "power": "3", "resolve": "1", - "faction": "Syndicate", + "faction": "Symphionia", "summoncost": "3", "cardtype": "Equipment", "cardsubtype": "Weapon", @@ -1559,7 +1559,7 @@ "icon_state": "nuclear_option", "power": "0", "resolve": "0", - "faction": "Syndicate", + "faction": "Symphionia", "summoncost": "3", "cardtype": "Event", "cardsubtype": "Instant", @@ -1569,7 +1569,7 @@ { "id": "bepis", "name": "B.E.P.I.S. Chamber", - "desc": "Created as an automated investment machine for a venture capitalism company, the B.E.P.I.S. ended up in the hands of Nanotrasen's research division after bankrupting the original creators... and 27 other corporations.", + "desc": "Created as an automated investment machine for a venture capitalism company, the B.E.P.I.S. ended up in the hands of Symphionia's research division after bankrupting the original creators... and 27 other corporations.", "rules": "Flip a coin. If heads, gain 2 mana. If tails, lose up to 2 mana.", "icon_state": "bepis", "power": "0", @@ -1583,7 +1583,7 @@ }, { "id": "weekend_at_bernies", - "name": "Weekend at Nanotrasen's", + "name": "Weekend at Symphionia's", "desc": "Holy shit! We just accidentally killed the Captain! Here, uhh... oh god, stuff him in that wheelchair over there, before anyone comes in. Yeah, yeah! Get his sunglasses, cover his face. Oh my god, oh my god, oh my god. No one will be able to tell, he looks sorta fine, right? Right?", "rules": "Return a creature card from your graveyard to the battlefield.", "icon_state": "weekend_at_bernies", diff --git a/strings/tips.txt b/strings/tips.txt index 75d0e4d1851290..aef6b7297c340b 100644 --- a/strings/tips.txt +++ b/strings/tips.txt @@ -22,7 +22,7 @@ As a Chemist, Water and Potassium mixed together will create an explosion, with As a Chemist, Holy Water and Potassium mixed together will create a HOLY explosion, with increased power scaling by amount used. If at least 75 units of both are used, the explosion will reveal, ignite, and paralyze any cultists, heretics, and revenants in sight. Do it! As a Chemist, you can quickly make 100u plastic bottles directly from plastic sheets, alongside being able to make 120u plastic beakers in the lathe. The ChemMaster can produce infinite 30u glass bottles as well and if researched the medical techfab can make beakers with capacity ranging from 120u to 300u. As a Chemist, you can recharge your chemical dispenser with an inducer or by replacing its cell. -As a Chemist, you will be expected to supply crew with certain chemicals. For example, Clonexadone and Mannitol for the cryo tubes, Diethylamine and Saltpetre for botany, as well as healing pills and patches for the front desk. +As a Chemist, you will be expected to supply crew with certain chemicals. For example, Cryoxadone and Mannitol for the cryo tubes, Diethylamine and Saltpetre for botany, as well as healing pills and patches for the front desk. As a Cook, any food you make will be much healthier than the junk food found in vendors. Having the crew routinely eating from you will provide minor buffs. As a Cook, being in the kitchen will make you remember the basics of Close Quarters Cooking. It is highly effective at removing Assistants from your workplace. As a Cook, most non-custom foods will have a secondary effect, ranging from healing you to making you move at lightspeed. Experiment! @@ -94,6 +94,7 @@ As a Security Officer, mindshield implants can only prevent someone from being t As a Security Officer, remember that correlation does not equal causation. Someone may have just been at the wrong place at the wrong time! As a Security Officer, remember that you can attach a sec-lite to your disabler or your helmet! As a Security Officer, your sechuds or HUDsunglasses can not only see crewmates' job assignments and criminal status, but also if they are mindshield implanted. You can tell by the flashing blue outline around their job icon. Use this to your advantage in a revolution to definitively tell who is on your side! +As a Security Officer, you have a special pen in your PDA that you can use to prompt people to surrender. This will stun them without the need to use a baton! As a Service Cyborg, your spray can knocks people down. However, it is blocked by masks and glasses. As a Shaft Miner, always have a GPS on you, so a fellow miner or cyborg can come to save you if you die. As a Shaft Miner, every monster on Lavaland has a pattern you can exploit to minimize damage from the encounters. @@ -103,7 +104,7 @@ As a Shaft Miner, you can harvest goliath plates from goliaths and upgrade your As a Traitor, plasma can be injected into many things to sabotage them. Power cells, light bulbs, welding tools, cigars and e-cigs will all explode when used. As a Traitor, subverting the AI to serve you can make it an extremely powerful ally. However, be careful of the wording in the laws you give it, as it may use your poorly written laws against you! As a Traitor, the Captain and the Head of Security are two of the most difficult to kill targets on the station. If either one is your target, plan carefully. -As a Traitor, the cryptographic sequencer (emag) can not only open lockers, crates, APCs and more. It can also do things like hack cyborgs, and even cause bots to go berserk. Use it on the right machines, and you can even contact the Syndicate. Experiment! +As a Traitor, the cryptographic sequencer (emag) can not only open lockers, crates, APCs and more. It can also do things like hack cyborgs, and even cause bots to go berserk. Use it on the right machines, and you can even contact the Symphionia. Experiment! As a Traitor, the syndicate encryption key is very useful for coordinating plans with your fellow traitors -- or, of course, betraying them. As a Traitor, you can manufacture and recycle revolver bullets at a hacked autolathe, making the revolver an extremely powerful tool. As a Traitor, you may sometimes be assigned to hunt other traitors, and in turn be hunted by others. @@ -226,9 +227,9 @@ If you're using hotkey mode, you can stop pulling things using H. In a pinch, stripping yourself naked will give you a sizeable resistance to being tackled. What do you value more, your freedom or your dignity? Laying down will help slow down bloodloss. Death will halt it entirely. Maintenance is full of equipment that is randomized every round. Look around and see if anything is worth using. -Most job-related exosuit clothing can fit job-related items into it, such as the atmospheric technician's winter coat holding an RPD, or labcoats holding most medicine. +Most job-related suit slot clothing can fit job-related items into it, such as the atmospheric technician's winter coat holding an RPD, or labcoats holding most medicine. Most things have special interactions with right, alt, shift, and control click. Experiment! -On most clothing items that go in the exosuit slot, you can put certain small items into your suit storage, such as a spraycan, your emergency oxygen tank, or a flashlight. +On most clothing items that go in the suit slot, you can put certain small items into your suit storage, such as a spraycan, your emergency oxygen tank, or a flashlight. Remote devices will work when used through cameras. For example: Bluespace RPEDs and door remotes. Sleeping can be used to recover from minor injuries and organ damage. Sanity, darkness, blindfolds, earmuffs, tables, beds, and bedsheets affect the healing rate. Some roles cannot be antagonists by default, but antag selection is decided first. For instance, you can set Security Officer to High without affecting your chances of becoming an antag -- the game will just select a different role. @@ -251,12 +252,13 @@ When hacking doors, cutting and mending a "test light wire" will restore power t When in doubt about technical issues, clear your cache (byond launcher > cogwheel > preferences > game prefs), update your BYOND, and relog. When placing floor tiles in space, you don't need to place down lattice if there is a piece of plating nearby. Where the space map levels connect is randomized every round, but are otherwise kept consistent within rounds. Remember that they are not necessarily bidirectional! +Working out improves your fitness which increases your size and faster times to fireman carry. Remember that a quality diet and sleep are essential! You can catch thrown items by toggling on your throw mode with an empty hand active. You can change the control scheme by pressing tab. One is WASD, the other is the arrow keys. Keep in mind that hotkeys are also changed with this. You can cheat games by baking dice in microwaves to make them loaded. Cards can be seen with x-ray vision or be marked with either a pen or crayon to gain an edge. You can climb onto a table by dragging yourself onto one. This takes time and drops the items in your hands on the table. Clicking on a table that someone else is climbing onto will knock them down. You can deconvert Cultists of Nar'Sie by feeding them large amounts of holy water. Unlike revolutionaries, implanting them with mindshield implants won't do it! -You can drag other players onto yourself to open the strip menu, letting you remove their equipment or force them to wear something. Note that exosuits or helmets will block your access to the clothing beneath them, and that certain items take longer to strip or put on than others. +You can drag other players onto yourself to open the strip menu, letting you remove their equipment or force them to wear something. Note that suits or helmets will block your access to the clothing beneath them, and that certain items take longer to strip or put on than others. You can grab someone by holding Ctrl and clicking on them, then upgrade the grab by Ctrl-clicking on them once more. An aggressive grab will momentarily stun someone, allow you to place them on a table by clicking on it, or throw them by toggling on throwing. You can light a cigar on a supermatter crystal. You can move an item out of the way by dragging it and then clicking on an adjacent tile with an empty hand. diff --git a/strings/wanted_message.json b/strings/wanted_message.json index 90605a49e4c67e..291b364b6de478 100644 --- a/strings/wanted_message.json +++ b/strings/wanted_message.json @@ -3,8 +3,8 @@ "Fugitive from the law due to", "Has exploitable information about", "Needs to be interrogated for information about", - "Ransomable to Nanotrasen for", - "Wanted by The Syndicate for" + "Ransomable to Symphionia for", + "Wanted by The Symphionia for" ], "verb": [ "accidentally destroying", @@ -41,11 +41,11 @@ "bluespace crystals": 50, "clown tears": 5, "Cuban Pete": 1, - "experimental Nanotrasen technology": 50, - "internal Syndicate documents": 50, + "experimental Symphionia technology": 50, + "internal Symphionia documents": 50, "John F Kennedy 2": 5, "lizardmen": 10, - "Nanotrasen's swimsuit calendar": 5, + "Symphionia's swimsuit calendar": 5, "Officer Beepsky": 5, "one billion credits": 5, "research on floor clowns": 5, diff --git a/tgstation.dme b/tgstation.dme index c3494f884f4720..a46e94e6129b42 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -109,6 +109,7 @@ #include "code\__DEFINES\hud.dm" #include "code\__DEFINES\icon_smoothing.dm" #include "code\__DEFINES\id_cards.dm" +#include "code\__DEFINES\implants.dm" #include "code\__DEFINES\important_recursive_contents.dm" #include "code\__DEFINES\injection.dm" #include "code\__DEFINES\input.dm" @@ -127,9 +128,9 @@ #include "code\__DEFINES\lights.dm" #include "code\__DEFINES\living.dm" #include "code\__DEFINES\logging.dm" -#include "code\__DEFINES\loot.dm" #include "code\__DEFINES\machines.dm" #include "code\__DEFINES\magic.dm" +#include "code\__DEFINES\map_exporter.dm" #include "code\__DEFINES\map_switch.dm" #include "code\__DEFINES\mapping.dm" #include "code\__DEFINES\maps.dm" @@ -154,8 +155,11 @@ #include "code\__DEFINES\movespeed_modification.dm" #include "code\__DEFINES\multiz.dm" #include "code\__DEFINES\nitrile.dm" +#include "code\__DEFINES\nozzle_define.dm" #include "code\__DEFINES\nuclear_bomb.dm" #include "code\__DEFINES\obj_flags.dm" +#include "code\__DEFINES\observers.dm" +#include "code\__DEFINES\organ_movement.dm" #include "code\__DEFINES\overlays.dm" #include "code\__DEFINES\pai.dm" #include "code\__DEFINES\paintings.dm" @@ -231,7 +235,6 @@ #include "code\__DEFINES\tools.dm" #include "code\__DEFINES\toys.dm" #include "code\__DEFINES\trader.dm" -#include "code\__DEFINES\traits.dm" #include "code\__DEFINES\transport.dm" #include "code\__DEFINES\tts.dm" #include "code\__DEFINES\turbine_defines.dm" @@ -249,8 +252,10 @@ #include "code\__DEFINES\wires.dm" #include "code\__DEFINES\wounds.dm" #include "code\__DEFINES\xenobiology.dm" +#include "code\__DEFINES\zoom.dm" #include "code\__DEFINES\ai\ai.dm" #include "code\__DEFINES\ai\ai_blackboard.dm" +#include "code\__DEFINES\ai\bot_keys.dm" #include "code\__DEFINES\ai\carp.dm" #include "code\__DEFINES\ai\haunted.dm" #include "code\__DEFINES\ai\monkey.dm" @@ -362,6 +367,7 @@ #include "code\__DEFINES\dcs\signals\signals_mob\signals_mob_arcade.dm" #include "code\__DEFINES\dcs\signals\signals_mob\signals_mob_basic.dm" #include "code\__DEFINES\dcs\signals\signals_mob\signals_mob_carbon.dm" +#include "code\__DEFINES\dcs\signals\signals_mob\signals_mob_guardian.dm" #include "code\__DEFINES\dcs\signals\signals_mob\signals_mob_living.dm" #include "code\__DEFINES\dcs\signals\signals_mob\signals_mob_main.dm" #include "code\__DEFINES\dcs\signals\signals_mob\signals_mob_silicon.dm" @@ -370,98 +376,106 @@ #include "code\__DEFINES\research\anomalies.dm" #include "code\__DEFINES\research\research_categories.dm" #include "code\__DEFINES\research\slimes.dm" -#include "code\__DEFINES\~skyrat_defines\_organ_defines.dm" -#include "code\__DEFINES\~skyrat_defines\access.dm" -#include "code\__DEFINES\~skyrat_defines\actionspeed_modification.dm" -#include "code\__DEFINES\~skyrat_defines\admin.dm" -#include "code\__DEFINES\~skyrat_defines\airlock.dm" -#include "code\__DEFINES\~skyrat_defines\ammo_defines.dm" -#include "code\__DEFINES\~skyrat_defines\antagonists.dm" -#include "code\__DEFINES\~skyrat_defines\apc_defines.dm" -#include "code\__DEFINES\~skyrat_defines\armaments.dm" -#include "code\__DEFINES\~skyrat_defines\atom_hud.dm" -#include "code\__DEFINES\~skyrat_defines\augment.dm" -#include "code\__DEFINES\~skyrat_defines\automapper.dm" -#include "code\__DEFINES\~skyrat_defines\banning.dm" -#include "code\__DEFINES\~skyrat_defines\baton_upgrades.dm" -#include "code\__DEFINES\~skyrat_defines\cargo_import_companies.dm" -#include "code\__DEFINES\~skyrat_defines\cells.dm" -#include "code\__DEFINES\~skyrat_defines\chat.dm" -#include "code\__DEFINES\~skyrat_defines\clock_cult.dm" -#include "code\__DEFINES\~skyrat_defines\colony_fabricator_misc.dm" -#include "code\__DEFINES\~skyrat_defines\colors.dm" -#include "code\__DEFINES\~skyrat_defines\combat.dm" -#include "code\__DEFINES\~skyrat_defines\computers.dm" -#include "code\__DEFINES\~skyrat_defines\construction.dm" -#include "code\__DEFINES\~skyrat_defines\culture.dm" -#include "code\__DEFINES\~skyrat_defines\DNA.dm" -#include "code\__DEFINES\~skyrat_defines\economy.dm" -#include "code\__DEFINES\~skyrat_defines\events.dm" -#include "code\__DEFINES\~skyrat_defines\examine_defines.dm" -#include "code\__DEFINES\~skyrat_defines\faction.dm" -#include "code\__DEFINES\~skyrat_defines\factions.dm" -#include "code\__DEFINES\~skyrat_defines\flavor_defines.dm" -#include "code\__DEFINES\~skyrat_defines\game_options.dm" -#include "code\__DEFINES\~skyrat_defines\hud.dm" -#include "code\__DEFINES\~skyrat_defines\id_cards.dm" -#include "code\__DEFINES\~skyrat_defines\integrated_electronics.dm" -#include "code\__DEFINES\~skyrat_defines\interactions.dm" -#include "code\__DEFINES\~skyrat_defines\inventory.dm" -#include "code\__DEFINES\~skyrat_defines\jobs.dm" -#include "code\__DEFINES\~skyrat_defines\keybindings.dm" -#include "code\__DEFINES\~skyrat_defines\language.dm" -#include "code\__DEFINES\~skyrat_defines\lazy_templates.dm" -#include "code\__DEFINES\~skyrat_defines\lewd_defines.dm" -#include "code\__DEFINES\~skyrat_defines\liquids.dm" -#include "code\__DEFINES\~skyrat_defines\living.dm" -#include "code\__DEFINES\~skyrat_defines\loadouts.dm" -#include "code\__DEFINES\~skyrat_defines\logging.dm" -#include "code\__DEFINES\~skyrat_defines\manufacturer_strings.dm" -#include "code\__DEFINES\~skyrat_defines\mapping.dm" -#include "code\__DEFINES\~skyrat_defines\medical_defines.dm" -#include "code\__DEFINES\~skyrat_defines\mobs.dm" -#include "code\__DEFINES\~skyrat_defines\nifsofts.dm" -#include "code\__DEFINES\~skyrat_defines\obj_flags.dm" -#include "code\__DEFINES\~skyrat_defines\opposing_force_defines.dm" -#include "code\__DEFINES\~skyrat_defines\pinpointers.dm" -#include "code\__DEFINES\~skyrat_defines\pollution.dm" -#include "code\__DEFINES\~skyrat_defines\preferences.dm" -#include "code\__DEFINES\~skyrat_defines\projectiles.dm" -#include "code\__DEFINES\~skyrat_defines\reagents.dm" -#include "code\__DEFINES\~skyrat_defines\research.dm" -#include "code\__DEFINES\~skyrat_defines\research_categories.dm" -#include "code\__DEFINES\~skyrat_defines\reskin_defines.dm" -#include "code\__DEFINES\~skyrat_defines\robot_defines.dm" -#include "code\__DEFINES\~skyrat_defines\say.dm" -#include "code\__DEFINES\~skyrat_defines\security_alerts.dm" -#include "code\__DEFINES\~skyrat_defines\signals.dm" -#include "code\__DEFINES\~skyrat_defines\solfed.dm" -#include "code\__DEFINES\~skyrat_defines\sound.dm" -#include "code\__DEFINES\~skyrat_defines\span.dm" -#include "code\__DEFINES\~skyrat_defines\species_clothing_paths.dm" -#include "code\__DEFINES\~skyrat_defines\strippable.dm" -#include "code\__DEFINES\~skyrat_defines\synth_defines.dm" -#include "code\__DEFINES\~skyrat_defines\teshari_clothing_paths.dm" -#include "code\__DEFINES\~skyrat_defines\text.dm" -#include "code\__DEFINES\~skyrat_defines\tools.dm" -#include "code\__DEFINES\~skyrat_defines\traits.dm" -#include "code\__DEFINES\~skyrat_defines\turfs.dm" -#include "code\__DEFINES\~skyrat_defines\vox_defines.dm" -#include "code\__DEFINES\~skyrat_defines\vv.dm" -#include "code\__DEFINES\~skyrat_defines\wounds.dm" -#include "code\__DEFINES\~skyrat_defines\_globalvars\bitfields.dm" -#include "code\__DEFINES\~skyrat_defines\_globalvars\logging.dm" -#include "code\__DEFINES\~skyrat_defines\_globalvars\lists\mapping.dm" -#include "code\__DEFINES\~skyrat_defines\_HELPERS\atmos_mapping_helpers.dm" -#include "code\__DEFINES\~skyrat_defines\_HELPERS\lighting.dm" -#include "code\__DEFINES\~skyrat_defines\_HELPERS\offset_index.dm" +#include "code\__DEFINES\traits\_traits.dm" +#include "code\__DEFINES\traits\declarations.dm" +#include "code\__DEFINES\traits\macros.dm" +#include "code\__DEFINES\traits\sources.dm" +#include "code\__DEFINES\~nova_defines\_organ_defines.dm" +#include "code\__DEFINES\~nova_defines\access.dm" +#include "code\__DEFINES\~nova_defines\actionspeed_modification.dm" +#include "code\__DEFINES\~nova_defines\admin.dm" +#include "code\__DEFINES\~nova_defines\airlock.dm" +#include "code\__DEFINES\~nova_defines\ammo_defines.dm" +#include "code\__DEFINES\~nova_defines\antagonists.dm" +#include "code\__DEFINES\~nova_defines\apc_defines.dm" +#include "code\__DEFINES\~nova_defines\armaments.dm" +#include "code\__DEFINES\~nova_defines\armor_defines.dm" +#include "code\__DEFINES\~nova_defines\atom_hud.dm" +#include "code\__DEFINES\~nova_defines\augment.dm" +#include "code\__DEFINES\~nova_defines\automapper.dm" +#include "code\__DEFINES\~nova_defines\banning.dm" +#include "code\__DEFINES\~nova_defines\barsigns.dm" +#include "code\__DEFINES\~nova_defines\baton_upgrades.dm" +#include "code\__DEFINES\~nova_defines\cargo_import_companies.dm" +#include "code\__DEFINES\~nova_defines\cells.dm" +#include "code\__DEFINES\~nova_defines\chat.dm" +#include "code\__DEFINES\~nova_defines\clock_cult.dm" +#include "code\__DEFINES\~nova_defines\colony_fabricator_misc.dm" +#include "code\__DEFINES\~nova_defines\colors.dm" +#include "code\__DEFINES\~nova_defines\combat.dm" +#include "code\__DEFINES\~nova_defines\computers.dm" +#include "code\__DEFINES\~nova_defines\construction.dm" +#include "code\__DEFINES\~nova_defines\culture.dm" +#include "code\__DEFINES\~nova_defines\DNA.dm" +#include "code\__DEFINES\~nova_defines\economy.dm" +#include "code\__DEFINES\~nova_defines\events.dm" +#include "code\__DEFINES\~nova_defines\examine_defines.dm" +#include "code\__DEFINES\~nova_defines\faction.dm" +#include "code\__DEFINES\~nova_defines\factions.dm" +#include "code\__DEFINES\~nova_defines\flavor_defines.dm" +#include "code\__DEFINES\~nova_defines\game_options.dm" +#include "code\__DEFINES\~nova_defines\hud.dm" +#include "code\__DEFINES\~nova_defines\id_cards.dm" +#include "code\__DEFINES\~nova_defines\integrated_electronics.dm" +#include "code\__DEFINES\~nova_defines\interactions.dm" +#include "code\__DEFINES\~nova_defines\inventory.dm" +#include "code\__DEFINES\~nova_defines\jobs.dm" +#include "code\__DEFINES\~nova_defines\keybindings.dm" +#include "code\__DEFINES\~nova_defines\language.dm" +#include "code\__DEFINES\~nova_defines\lazy_templates.dm" +#include "code\__DEFINES\~nova_defines\lewd_defines.dm" +#include "code\__DEFINES\~nova_defines\liquids.dm" +#include "code\__DEFINES\~nova_defines\living.dm" +#include "code\__DEFINES\~nova_defines\loadouts.dm" +#include "code\__DEFINES\~nova_defines\logging.dm" +#include "code\__DEFINES\~nova_defines\manufacturer_strings.dm" +#include "code\__DEFINES\~nova_defines\mapping.dm" +#include "code\__DEFINES\~nova_defines\medical_defines.dm" +#include "code\__DEFINES\~nova_defines\mobs.dm" +#include "code\__DEFINES\~nova_defines\nifsofts.dm" +#include "code\__DEFINES\~nova_defines\obj_flags.dm" +#include "code\__DEFINES\~nova_defines\opposing_force_defines.dm" +#include "code\__DEFINES\~nova_defines\pinpointers.dm" +#include "code\__DEFINES\~nova_defines\pollution.dm" +#include "code\__DEFINES\~nova_defines\preferences.dm" +#include "code\__DEFINES\~nova_defines\projectiles.dm" +#include "code\__DEFINES\~nova_defines\quirks.dm" +#include "code\__DEFINES\~nova_defines\reagents.dm" +#include "code\__DEFINES\~nova_defines\research.dm" +#include "code\__DEFINES\~nova_defines\research_categories.dm" +#include "code\__DEFINES\~nova_defines\reskin_defines.dm" +#include "code\__DEFINES\~nova_defines\robot_defines.dm" +#include "code\__DEFINES\~nova_defines\say.dm" +#include "code\__DEFINES\~nova_defines\security_alerts.dm" +#include "code\__DEFINES\~nova_defines\signals.dm" +#include "code\__DEFINES\~nova_defines\solfed.dm" +#include "code\__DEFINES\~nova_defines\sound.dm" +#include "code\__DEFINES\~nova_defines\span.dm" +#include "code\__DEFINES\~nova_defines\species_clothing_paths.dm" +#include "code\__DEFINES\~nova_defines\strippable.dm" +#include "code\__DEFINES\~nova_defines\synth_defines.dm" +#include "code\__DEFINES\~nova_defines\teshari_clothing_paths.dm" +#include "code\__DEFINES\~nova_defines\text.dm" +#include "code\__DEFINES\~nova_defines\tools.dm" +#include "code\__DEFINES\~nova_defines\traits.dm" +#include "code\__DEFINES\~nova_defines\turfs.dm" +#include "code\__DEFINES\~nova_defines\vox_defines.dm" +#include "code\__DEFINES\~nova_defines\vv.dm" +#include "code\__DEFINES\~nova_defines\wounds.dm" +#include "code\__DEFINES\~nova_defines\_globalvars\bitfields.dm" +#include "code\__DEFINES\~nova_defines\_globalvars\logging.dm" +#include "code\__DEFINES\~nova_defines\_globalvars\lists\mapping.dm" +#include "code\__DEFINES\~nova_defines\_HELPERS\atmos_mapping_helpers.dm" +#include "code\__DEFINES\~nova_defines\_HELPERS\lighting.dm" +#include "code\__DEFINES\~nova_defines\_HELPERS\offset_index.dm" +#include "code\__DEFINES\~nova_defines\traits\declarations.dm" #include "code\__HELPERS\_auxtools_api.dm" #include "code\__HELPERS\_lists.dm" #include "code\__HELPERS\_planes.dm" #include "code\__HELPERS\_string_lists.dm" #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" @@ -541,6 +555,7 @@ #include "code\__HELPERS\varset_callback.dm" #include "code\__HELPERS\verbs.dm" #include "code\__HELPERS\view.dm" +#include "code\__HELPERS\visual_effects.dm" #include "code\__HELPERS\weakref.dm" #include "code\__HELPERS\logging\_logging.dm" #include "code\__HELPERS\logging\admin.dm" @@ -570,10 +585,10 @@ #include "code\__HELPERS\sorts\InsertSort.dm" #include "code\__HELPERS\sorts\MergeSort.dm" #include "code\__HELPERS\sorts\TimSort.dm" -#include "code\__HELPERS\~skyrat_helpers\is_helpers.dm" -#include "code\__HELPERS\~skyrat_helpers\level_traits.dm" -#include "code\__HELPERS\~skyrat_helpers\logging.dm" -#include "code\__HELPERS\~skyrat_helpers\unsorted.dm" +#include "code\__HELPERS\~nova_helpers\is_helpers.dm" +#include "code\__HELPERS\~nova_helpers\level_traits.dm" +#include "code\__HELPERS\~nova_helpers\logging.dm" +#include "code\__HELPERS\~nova_helpers\unsorted.dm" #include "code\_globalvars\_regexes.dm" #include "code\_globalvars\admin.dm" #include "code\_globalvars\bitfields.dm" @@ -588,9 +603,10 @@ #include "code\_globalvars\religion.dm" #include "code\_globalvars\tgui.dm" #include "code\_globalvars\time_vars.dm" -#include "code\_globalvars\traits.dm" #include "code\_globalvars\lists\achievements.dm" #include "code\_globalvars\lists\ambience.dm" +#include "code\_globalvars\lists\canisters.dm" +#include "code\_globalvars\lists\cargo.dm" #include "code\_globalvars\lists\client.dm" #include "code\_globalvars\lists\color.dm" #include "code\_globalvars\lists\crafting.dm" @@ -611,6 +627,8 @@ #include "code\_globalvars\lists\typecache.dm" #include "code\_globalvars\lists\wiremod.dm" #include "code\_globalvars\lists\xenobiology.dm" +#include "code\_globalvars\traits\_traits.dm" +#include "code\_globalvars\traits\admin_tooling.dm" #include "code\_js\byjax.dm" #include "code\_js\menus.dm" #include "code\_onclick\adjacent.dm" @@ -654,10 +672,11 @@ #include "code\_onclick\hud\screentip.dm" #include "code\_onclick\hud\parallax\parallax.dm" #include "code\_onclick\hud\parallax\random_layer.dm" -#include "code\_onclick\hud\rendering\plane_master.dm" #include "code\_onclick\hud\rendering\plane_master_controller.dm" #include "code\_onclick\hud\rendering\plane_master_group.dm" #include "code\_onclick\hud\rendering\render_plate.dm" +#include "code\_onclick\hud\rendering\plane_masters\_plane_master.dm" +#include "code\_onclick\hud\rendering\plane_masters\plane_master_subtypes.dm" #include "code\controllers\admin.dm" #include "code\controllers\controller.dm" #include "code\controllers\failsafe.dm" @@ -727,10 +746,10 @@ #include "code\controllers\subsystem\pai.dm" #include "code\controllers\subsystem\parallax.dm" #include "code\controllers\subsystem\pathfinder.dm" -#include "code\controllers\subsystem\persistence.dm" #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\queuelinks.dm" #include "code\controllers\subsystem\radiation.dm" @@ -768,6 +787,16 @@ #include "code\controllers\subsystem\wardrobe.dm" #include "code\controllers\subsystem\weather.dm" #include "code\controllers\subsystem\wiremod_composite.dm" +#include "code\controllers\subsystem\dynamic\dynamic.dm" +#include "code\controllers\subsystem\dynamic\dynamic_hijacking.dm" +#include "code\controllers\subsystem\dynamic\dynamic_logging.dm" +#include "code\controllers\subsystem\dynamic\dynamic_midround_rolling.dm" +#include "code\controllers\subsystem\dynamic\dynamic_rulesets.dm" +#include "code\controllers\subsystem\dynamic\dynamic_rulesets_latejoin.dm" +#include "code\controllers\subsystem\dynamic\dynamic_rulesets_midround.dm" +#include "code\controllers\subsystem\dynamic\dynamic_rulesets_roundstart.dm" +#include "code\controllers\subsystem\dynamic\dynamic_unfavorable_situation.dm" +#include "code\controllers\subsystem\dynamic\ruleset_picking.dm" #include "code\controllers\subsystem\movement\ai_movement.dm" #include "code\controllers\subsystem\movement\cliff_falling.dm" #include "code\controllers\subsystem\movement\hyperspace_drift.dm" @@ -775,6 +804,16 @@ #include "code\controllers\subsystem\movement\movement.dm" #include "code\controllers\subsystem\movement\movement_types.dm" #include "code\controllers\subsystem\movement\spacedrift.dm" +#include "code\controllers\subsystem\persistence\_persistence.dm" +#include "code\controllers\subsystem\persistence\counter_delamination.dm" +#include "code\controllers\subsystem\persistence\counter_tram_hits.dm" +#include "code\controllers\subsystem\persistence\custom_outfits.dm" +#include "code\controllers\subsystem\persistence\engravings.dm" +#include "code\controllers\subsystem\persistence\photo_albums.dm" +#include "code\controllers\subsystem\persistence\recipes.dm" +#include "code\controllers\subsystem\persistence\scars.dm" +#include "code\controllers\subsystem\persistence\tattoos.dm" +#include "code\controllers\subsystem\persistence\trophies.dm" #include "code\controllers\subsystem\processing\acid.dm" #include "code\controllers\subsystem\processing\ai_basic_avoidance.dm" #include "code\controllers\subsystem\processing\ai_behaviors.dm" @@ -803,6 +842,8 @@ #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" #include "code\datums\datum.dm" @@ -812,12 +853,12 @@ #include "code\datums\ductnet.dm" #include "code\datums\emotes.dm" #include "code\datums\ert.dm" -#include "code\datums\forced_movement.dm" #include "code\datums\hailer_phrase.dm" #include "code\datums\holocall.dm" #include "code\datums\hotkeys_help.dm" #include "code\datums\http.dm" #include "code\datums\hud.dm" +#include "code\datums\json_database.dm" #include "code\datums\json_savefile.dm" #include "code\datums\lazy_template.dm" #include "code\datums\map_config.dm" @@ -830,7 +871,6 @@ #include "code\datums\position_point_vector.dm" #include "code\datums\profiling.dm" #include "code\datums\progressbar.dm" -#include "code\datums\recipe.dm" #include "code\datums\request_message.dm" #include "code\datums\ruins.dm" #include "code\datums\saymode.dm" @@ -887,6 +927,7 @@ #include "code\datums\actions\mobs\meteors.dm" #include "code\datums\actions\mobs\mobcooldown.dm" #include "code\datums\actions\mobs\open_mob_commands.dm" +#include "code\datums\actions\mobs\personality_commune.dm" #include "code\datums\actions\mobs\projectileattack.dm" #include "code\datums\actions\mobs\sign_language.dm" #include "code\datums\actions\mobs\sneak.dm" @@ -906,20 +947,22 @@ #include "code\datums\ai\basic_mobs\base_basic_controller.dm" #include "code\datums\ai\basic_mobs\generic_controllers.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\basic_attacking.dm" +#include "code\datums\ai\basic_mobs\basic_ai_behaviors\befriend_target.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\climb_tree.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\find_parent.dm" -#include "code\datums\ai\basic_mobs\basic_ai_behaviors\nearest_targetting.dm" +#include "code\datums\ai\basic_mobs\basic_ai_behaviors\nearest_targeting.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\pick_up_item.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\run_away_from_target.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\set_travel_destination.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\step_towards_turf.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\stop_and_stare.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\targeted_mob_ability.dm" -#include "code\datums\ai\basic_mobs\basic_ai_behaviors\targetting.dm" +#include "code\datums\ai\basic_mobs\basic_ai_behaviors\targeting.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\tipped_reaction.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\travel_towards.dm" +#include "code\datums\ai\basic_mobs\basic_ai_behaviors\unbuckle_mob.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\ventcrawling.dm" -#include "code\datums\ai\basic_mobs\basic_ai_behaviors\wounded_targetting.dm" +#include "code\datums\ai\basic_mobs\basic_ai_behaviors\wounded_targeting.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\write_on_paper.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\attack_adjacent_target.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\attack_obstacle_in_path.dm" @@ -930,6 +973,7 @@ #include "code\datums\ai\basic_mobs\basic_subtrees\find_paper_and_write.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\find_parent.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\flee_target.dm" +#include "code\datums\ai\basic_mobs\basic_subtrees\go_for_swim.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\maintain_distance.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\mine_walls.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\move_to_cardinal.dm" @@ -954,11 +998,11 @@ #include "code\datums\ai\basic_mobs\pet_commands\fetch.dm" #include "code\datums\ai\basic_mobs\pet_commands\pet_command_planning.dm" #include "code\datums\ai\basic_mobs\pet_commands\pet_follow_friend.dm" -#include "code\datums\ai\basic_mobs\pet_commands\pet_use_targetted_ability.dm" +#include "code\datums\ai\basic_mobs\pet_commands\pet_use_targeted_ability.dm" #include "code\datums\ai\basic_mobs\pet_commands\play_dead.dm" -#include "code\datums\ai\basic_mobs\targetting_datums\basic_targetting_datum.dm" -#include "code\datums\ai\basic_mobs\targetting_datums\dont_target_friends.dm" -#include "code\datums\ai\basic_mobs\targetting_datums\with_object.dm" +#include "code\datums\ai\basic_mobs\targeting_strategies\basic_targeting_strategy.dm" +#include "code\datums\ai\basic_mobs\targeting_strategies\dont_target_friends.dm" +#include "code\datums\ai\basic_mobs\targeting_strategies\with_object.dm" #include "code\datums\ai\cursed\cursed_behaviors.dm" #include "code\datums\ai\cursed\cursed_controller.dm" #include "code\datums\ai\cursed\cursed_subtrees.dm" @@ -1056,11 +1100,13 @@ #include "code\datums\components\bloodysoles.dm" #include "code\datums\components\boomerang.dm" #include "code\datums\components\boss_music.dm" +#include "code\datums\components\breeding.dm" #include "code\datums\components\bullet_intercepting.dm" #include "code\datums\components\bumpattack.dm" #include "code\datums\components\burning.dm" #include "code\datums\components\butchering.dm" #include "code\datums\components\caltrop.dm" +#include "code\datums\components\can_flash_from_behind.dm" #include "code\datums\components\chasm.dm" #include "code\datums\components\chuunibyou.dm" #include "code\datums\components\cleaner.dm" @@ -1084,10 +1130,13 @@ #include "code\datums\components\curse_of_polymorph.dm" #include "code\datums\components\customizable_reagent_holder.dm" #include "code\datums\components\damage_aura.dm" +#include "code\datums\components\damage_chain.dm" +#include "code\datums\components\dart_insert.dm" #include "code\datums\components\deadchat_control.dm" #include "code\datums\components\death_linked.dm" #include "code\datums\components\dejavu.dm" #include "code\datums\components\deployable.dm" +#include "code\datums\components\direct_explosive_trap.dm" #include "code\datums\components\drift.dm" #include "code\datums\components\earprotection.dm" #include "code\datums\components\echolocation.dm" @@ -1100,6 +1149,7 @@ #include "code\datums\components\engraved.dm" #include "code\datums\components\evolutionary_leap.dm" #include "code\datums\components\explodable.dm" +#include "code\datums\components\explode_on_attack.dm" #include "code\datums\components\faction_granter.dm" #include "code\datums\components\fertile_egg.dm" #include "code\datums\components\fishing_spot.dm" @@ -1135,9 +1185,12 @@ #include "code\datums\components\knockoff.dm" #include "code\datums\components\label.dm" #include "code\datums\components\leash.dm" +#include "code\datums\components\life_link.dm" #include "code\datums\components\light_eater.dm" #include "code\datums\components\ling_decoy_brain.dm" +#include "code\datums\components\listen_and_repeat.dm" #include "code\datums\components\lock_on_cursor.dm" +#include "code\datums\components\lockable_storage.dm" #include "code\datums\components\magnet.dm" #include "code\datums\components\manual_blinking.dm" #include "code\datums\components\manual_breathing.dm" @@ -1149,6 +1202,7 @@ #include "code\datums\components\multiple_lives.dm" #include "code\datums\components\mutant_hands.dm" #include "code\datums\components\nuclear_bomb_operator.dm" +#include "code\datums\components\object_possession.dm" #include "code\datums\components\omen.dm" #include "code\datums\components\on_hit_effect.dm" #include "code\datums\components\onwear_mood.dm" @@ -1161,6 +1215,7 @@ #include "code\datums\components\pellet_cloud.dm" #include "code\datums\components\phylactery.dm" #include "code\datums\components\pinata.dm" +#include "code\datums\components\pinnable_accessory.dm" #include "code\datums\components\plundering_attacks.dm" #include "code\datums\components\pricetag.dm" #include "code\datums\components\punchcooldown.dm" @@ -1169,6 +1224,7 @@ #include "code\datums\components\radioactive_emitter.dm" #include "code\datums\components\radioactive_exposure.dm" #include "code\datums\components\ranged_attacks.dm" +#include "code\datums\components\ranged_mob_full_auto.dm" #include "code\datums\components\reagent_refiller.dm" #include "code\datums\components\recharging_attacks.dm" #include "code\datums\components\redirect_attack_hand_from_turf.dm" @@ -1182,6 +1238,7 @@ #include "code\datums\components\scope.dm" #include "code\datums\components\seclight_attachable.dm" #include "code\datums\components\sect_nullrod_bonus.dm" +#include "code\datums\components\security_vision.dm" #include "code\datums\components\seethrough.dm" #include "code\datums\components\seethrough_mob.dm" #include "code\datums\components\shell.dm" @@ -1397,6 +1454,7 @@ #include "code\datums\elements\cliff_walker.dm" #include "code\datums\elements\climbable.dm" #include "code\datums\elements\connect_loc.dm" +#include "code\datums\elements\consumable_mob.dm" #include "code\datums\elements\content_barfer.dm" #include "code\datums\elements\crackable.dm" #include "code\datums\elements\crusher_loot.dm" @@ -1405,6 +1463,7 @@ #include "code\datums\elements\cult_halo.dm" #include "code\datums\elements\curse_announcement.dm" #include "code\datums\elements\cursed.dm" +#include "code\datums\elements\damage_threshold.dm" #include "code\datums\elements\dangerous_surgical_removal.dm" #include "code\datums\elements\death_drops.dm" #include "code\datums\elements\death_explosion.dm" @@ -1420,6 +1479,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\envenomable_casing.dm" @@ -1433,9 +1493,11 @@ #include "code\datums\elements\frozen.dm" #include "code\datums\elements\gags_recolorable.dm" #include "code\datums\elements\give_turf_traits.dm" +#include "code\datums\elements\hat_wearer.dm" #include "code\datums\elements\haunted.dm" #include "code\datums\elements\high_fiver.dm" #include "code\datums\elements\honkspam.dm" +#include "code\datums\elements\hostile_machine.dm" #include "code\datums\elements\human_biter.dm" #include "code\datums\elements\immerse.dm" #include "code\datums\elements\item_fov.dm" @@ -1460,6 +1522,7 @@ #include "code\datums\elements\noticable_organ.dm" #include "code\datums\elements\obj_regen.dm" #include "code\datums\elements\openspace_item_click_handler.dm" +#include "code\datums\elements\ore_collecting.dm" #include "code\datums\elements\organ_set_bonus.dm" #include "code\datums\elements\pet_bonus.dm" #include "code\datums\elements\plant_backfire.dm" @@ -1488,7 +1551,6 @@ #include "code\datums\elements\strippable.dm" #include "code\datums\elements\structure_repair.dm" #include "code\datums\elements\swabbable.dm" -#include "code\datums\elements\tear_wall.dm" #include "code\datums\elements\temporary_atom.dm" #include "code\datums\elements\tenacious.dm" #include "code\datums\elements\tiny_mob_hunter.dm" @@ -1574,9 +1636,9 @@ #include "code\datums\looping_sounds\item_sounds.dm" #include "code\datums\looping_sounds\machinery_sounds.dm" #include "code\datums\looping_sounds\music.dm" +#include "code\datums\looping_sounds\projectiles.dm" #include "code\datums\looping_sounds\vents.dm" #include "code\datums\looping_sounds\weather.dm" -#include "code\datums\mapgen\_MapGenerator.dm" #include "code\datums\mapgen\CaveGenerator.dm" #include "code\datums\mapgen\JungleGenerator.dm" #include "code\datums\mapgen\biomes\_biome.dm" @@ -1614,6 +1676,7 @@ #include "code\datums\mood_events\dna_infuser_events.dm" #include "code\datums\mood_events\drink_events.dm" #include "code\datums\mood_events\drug_events.dm" +#include "code\datums\mood_events\eldritch_painting_events.dm" #include "code\datums\mood_events\food_events.dm" #include "code\datums\mood_events\generic_negative_events.dm" #include "code\datums\mood_events\generic_positive_events.dm" @@ -1646,6 +1709,8 @@ #include "code\datums\proximity_monitor\fields\projectile_dampener.dm" #include "code\datums\proximity_monitor\fields\timestop.dm" #include "code\datums\quirks\_quirk.dm" +#include "code\datums\quirks\_quirk_constant_data.dm" +#include "code\datums\quirks\negative_quirks\all_nighter.dm" #include "code\datums\quirks\negative_quirks\allergic.dm" #include "code\datums\quirks\negative_quirks\bad_back.dm" #include "code\datums\quirks\negative_quirks\bad_touch.dm" @@ -1664,7 +1729,6 @@ #include "code\datums\quirks\negative_quirks\food_allergy.dm" #include "code\datums\quirks\negative_quirks\frail.dm" #include "code\datums\quirks\negative_quirks\glass_jaw.dm" -#include "code\datums\quirks\negative_quirks\heavy_sleeper.dm" #include "code\datums\quirks\negative_quirks\hemiplegic.dm" #include "code\datums\quirks\negative_quirks\hypersensitive.dm" #include "code\datums\quirks\negative_quirks\illiterate.dm" @@ -1706,6 +1770,7 @@ #include "code\datums\quirks\neutral_quirks\pride_pin.dm" #include "code\datums\quirks\neutral_quirks\shifty_eyes.dm" #include "code\datums\quirks\neutral_quirks\snob.dm" +#include "code\datums\quirks\neutral_quirks\transhumanist.dm" #include "code\datums\quirks\neutral_quirks\vegetarian.dm" #include "code\datums\quirks\positive_quirks\alcohol_tolerance.dm" #include "code\datums\quirks\positive_quirks\apathetic.dm" @@ -1784,6 +1849,7 @@ #include "code\datums\status_effects\wound_effects.dm" #include "code\datums\status_effects\buffs\food_haste.dm" #include "code\datums\status_effects\buffs\food_traits.dm" +#include "code\datums\status_effects\buffs\stop_drop_roll.dm" #include "code\datums\status_effects\buffs\stun_absorption.dm" #include "code\datums\status_effects\debuffs\blindness.dm" #include "code\datums\status_effects\debuffs\choke.dm" @@ -1793,6 +1859,7 @@ #include "code\datums\status_effects\debuffs\debuffs.dm" #include "code\datums\status_effects\debuffs\decloning.dm" #include "code\datums\status_effects\debuffs\dizziness.dm" +#include "code\datums\status_effects\debuffs\dna_transformation.dm" #include "code\datums\status_effects\debuffs\drowsiness.dm" #include "code\datums\status_effects\debuffs\drugginess.dm" #include "code\datums\status_effects\debuffs\drunk.dm" @@ -1807,6 +1874,7 @@ #include "code\datums\status_effects\debuffs\slimed.dm" #include "code\datums\status_effects\debuffs\spacer.dm" #include "code\datums\status_effects\debuffs\speech_debuffs.dm" +#include "code\datums\status_effects\debuffs\staggered.dm" #include "code\datums\status_effects\debuffs\static_vision.dm" #include "code\datums\status_effects\debuffs\strandling.dm" #include "code\datums\status_effects\debuffs\terrified.dm" @@ -1855,6 +1923,7 @@ #include "code\datums\wires\robot.dm" #include "code\datums\wires\roulette.dm" #include "code\datums\wires\scanner_gate.dm" +#include "code\datums\wires\shieldwallgen.dm" #include "code\datums\wires\suit_storage_unit.dm" #include "code\datums\wires\syndicatebomb.dm" #include "code\datums\wires\tesla_coil.dm" @@ -1864,15 +1933,12 @@ #include "code\datums\wounds\blunt.dm" #include "code\datums\wounds\bones.dm" #include "code\datums\wounds\burns.dm" +#include "code\datums\wounds\cranial_fissure.dm" #include "code\datums\wounds\loss.dm" #include "code\datums\wounds\pierce.dm" #include "code\datums\wounds\slash.dm" #include "code\datums\wounds\scars\_scars.dm" #include "code\datums\wounds\scars\_static_scar_data.dm" -#include "code\game\alternate_appearance.dm" -#include "code\game\atom_defense.dm" -#include "code\game\atoms.dm" -#include "code\game\atoms_initializing_EXPENSIVE.dm" #include "code\game\atoms_movable.dm" #include "code\game\communications.dm" #include "code\game\data_huds.dm" @@ -1908,21 +1974,25 @@ #include "code\game\area\areas\station\service.dm" #include "code\game\area\areas\station\solars.dm" #include "code\game\area\areas\station\telecomm.dm" +#include "code\game\atom\_atom.dm" +#include "code\game\atom\alternate_appearance.dm" +#include "code\game\atom\atom_act.dm" +#include "code\game\atom\atom_appearance.dm" +#include "code\game\atom\atom_color.dm" +#include "code\game\atom\atom_defense.dm" +#include "code\game\atom\atom_examine.dm" +#include "code\game\atom\atom_greyscale.dm" +#include "code\game\atom\atom_invisibility.dm" +#include "code\game\atom\atom_materials.dm" +#include "code\game\atom\atom_merger.dm" +#include "code\game\atom\atom_orbit.dm" +#include "code\game\atom\atom_storage.dm" +#include "code\game\atom\atom_tool_acts.dm" +#include "code\game\atom\atom_vv.dm" +#include "code\game\atom\atoms_initializing_EXPENSIVE.dm" #include "code\game\gamemodes\events.dm" -#include "code\game\gamemodes\game_mode.dm" #include "code\game\gamemodes\objective.dm" #include "code\game\gamemodes\objective_items.dm" -#include "code\game\gamemodes\dynamic\dynamic.dm" -#include "code\game\gamemodes\dynamic\dynamic_hijacking.dm" -#include "code\game\gamemodes\dynamic\dynamic_logging.dm" -#include "code\game\gamemodes\dynamic\dynamic_midround_rolling.dm" -#include "code\game\gamemodes\dynamic\dynamic_rulesets.dm" -#include "code\game\gamemodes\dynamic\dynamic_rulesets_latejoin.dm" -#include "code\game\gamemodes\dynamic\dynamic_rulesets_midround.dm" -#include "code\game\gamemodes\dynamic\dynamic_rulesets_roundstart.dm" -#include "code\game\gamemodes\dynamic\dynamic_simulations.dm" -#include "code\game\gamemodes\dynamic\dynamic_unfavorable_situation.dm" -#include "code\game\gamemodes\dynamic\ruleset_picking.dm" #include "code\game\machinery\_machinery.dm" #include "code\game\machinery\ai_slipper.dm" #include "code\game\machinery\airlock_control.dm" @@ -2248,6 +2318,7 @@ #include "code\game\objects\items\extinguisher.dm" #include "code\game\objects\items\fireaxe.dm" #include "code\game\objects\items\flamethrower.dm" +#include "code\game\objects\items\frog_statue.dm" #include "code\game\objects\items\gift.dm" #include "code\game\objects\items\gun_maintenance.dm" #include "code\game\objects\items\hand_items.dm" @@ -2286,7 +2357,6 @@ #include "code\game\objects\items\shooting_range.dm" #include "code\game\objects\items\shrapnel.dm" #include "code\game\objects\items\signs.dm" -#include "code\game\objects\items\singularityhammer.dm" #include "code\game\objects\items\skub.dm" #include "code\game\objects\items\spear.dm" #include "code\game\objects\items\sticker.dm" @@ -2305,6 +2375,8 @@ #include "code\game\objects\items\virgin_mary.dm" #include "code\game\objects\items\wall_mounted.dm" #include "code\game\objects\items\weaponry.dm" +#include "code\game\objects\items\wiki_manuals.dm" +#include "code\game\objects\items\wizard_weapons.dm" #include "code\game\objects\items\AI_modules\_AI_modules.dm" #include "code\game\objects\items\AI_modules\freeform.dm" #include "code\game\objects\items\AI_modules\full_lawsets.dm" @@ -2336,7 +2408,6 @@ #include "code\game\objects\items\devices\multitool.dm" #include "code\game\objects\items\devices\pipe_painter.dm" #include "code\game\objects\items\devices\polycircuit.dm" -#include "code\game\objects\items\devices\portable_chem_mixer.dm" #include "code\game\objects\items\devices\powersink.dm" #include "code\game\objects\items\devices\pressureplates.dm" #include "code\game\objects\items\devices\quantum_keycard.dm" @@ -2402,6 +2473,7 @@ #include "code\game\objects\items\granters\crafting\death_sandwich.dm" #include "code\game\objects\items\granters\crafting\desserts.dm" #include "code\game\objects\items\granters\crafting\pipegun.dm" +#include "code\game\objects\items\granters\crafting\rebarxbowsyndie.dm" #include "code\game\objects\items\granters\crafting\regal_condor.dm" #include "code\game\objects\items\granters\magic\_spell_granter.dm" #include "code\game\objects\items\granters\magic\barnyard.dm" @@ -2437,10 +2509,8 @@ #include "code\game\objects\items\grenades\syndieminibomb.dm" #include "code\game\objects\items\implants\implant.dm" #include "code\game\objects\items\implants\implant_abductor.dm" -#include "code\game\objects\items\implants\implant_chem.dm" #include "code\game\objects\items\implants\implant_clown.dm" #include "code\game\objects\items\implants\implant_deathrattle.dm" -#include "code\game\objects\items\implants\implant_exile.dm" #include "code\game\objects\items\implants\implant_explosive.dm" #include "code\game\objects\items\implants\implant_freedom.dm" #include "code\game\objects\items\implants\implant_krav_maga.dm" @@ -2449,12 +2519,16 @@ #include "code\game\objects\items\implants\implant_spell.dm" #include "code\game\objects\items\implants\implant_stealth.dm" #include "code\game\objects\items\implants\implant_storage.dm" -#include "code\game\objects\items\implants\implant_track.dm" #include "code\game\objects\items\implants\implantcase.dm" #include "code\game\objects\items\implants\implantchair.dm" #include "code\game\objects\items\implants\implanter.dm" #include "code\game\objects\items\implants\implantpad.dm" #include "code\game\objects\items\implants\implantuplink.dm" +#include "code\game\objects\items\implants\security\implant_beacon.dm" +#include "code\game\objects\items\implants\security\implant_chem.dm" +#include "code\game\objects\items\implants\security\implant_exile.dm" +#include "code\game\objects\items\implants\security\implant_noteleport.dm" +#include "code\game\objects\items\implants\security\implant_track.dm" #include "code\game\objects\items\kirby_plants\kirbyplants.dm" #include "code\game\objects\items\kirby_plants\organic_plants.dm" #include "code\game\objects\items\kirby_plants\synthetic_plants.dm" @@ -2517,7 +2591,6 @@ #include "code\game\objects\items\storage\holsters.dm" #include "code\game\objects\items\storage\lockbox.dm" #include "code\game\objects\items\storage\medkit.dm" -#include "code\game\objects\items\storage\secure.dm" #include "code\game\objects\items\storage\sixpack.dm" #include "code\game\objects\items\storage\storage.dm" #include "code\game\objects\items\storage\toolbox.dm" @@ -2528,6 +2601,7 @@ #include "code\game\objects\items\storage\boxes\clothes_boxes.dm" #include "code\game\objects\items\storage\boxes\engineering_boxes.dm" #include "code\game\objects\items\storage\boxes\food_boxes.dm" +#include "code\game\objects\items\storage\boxes\implant_boxes.dm" #include "code\game\objects\items\storage\boxes\job_boxes.dm" #include "code\game\objects\items\storage\boxes\medical_boxes.dm" #include "code\game\objects\items\storage\boxes\science_boxes.dm" @@ -2552,6 +2626,7 @@ #include "code\game\objects\structures\billboard.dm" #include "code\game\objects\structures\bonfire.dm" #include "code\game\objects\structures\broken_flooring.dm" +#include "code\game\objects\structures\cat_house.dm" #include "code\game\objects\structures\chess.dm" #include "code\game\objects\structures\containers.dm" #include "code\game\objects\structures\deployable_turret.dm" @@ -2592,12 +2667,14 @@ #include "code\game\objects\structures\morgue.dm" #include "code\game\objects\structures\mystery_box.dm" #include "code\game\objects\structures\noticeboard.dm" +#include "code\game\objects\structures\ore_containers.dm" #include "code\game\objects\structures\petrified_statue.dm" #include "code\game\objects\structures\pinatas.dm" #include "code\game\objects\structures\plasticflaps.dm" #include "code\game\objects\structures\railings.dm" #include "code\game\objects\structures\reflector.dm" #include "code\game\objects\structures\safe.dm" +#include "code\game\objects\structures\secure_safe.dm" #include "code\game\objects\structures\showcase.dm" #include "code\game\objects\structures\shower.dm" #include "code\game\objects\structures\spawner.dm" @@ -2802,7 +2879,6 @@ #include "code\modules\admin\verbs\adminjump.dm" #include "code\modules\admin\verbs\adminpm.dm" #include "code\modules\admin\verbs\adminsay.dm" -#include "code\modules\admin\verbs\ai_triumvirate.dm" #include "code\modules\admin\verbs\anonymousnames.dm" #include "code\modules\admin\verbs\atmosdebug.dm" #include "code\modules\admin\verbs\beakerpanel.dm" @@ -2830,6 +2906,7 @@ #include "code\modules\admin\verbs\list_exposer.dm" #include "code\modules\admin\verbs\machine_upgrade.dm" #include "code\modules\admin\verbs\manipulate_organs.dm" +#include "code\modules\admin\verbs\map_export.dm" #include "code\modules\admin\verbs\map_template_loadverb.dm" #include "code\modules\admin\verbs\mapping.dm" #include "code\modules\admin\verbs\maprotation.dm" @@ -3007,29 +3084,34 @@ #include "code\modules\antagonists\heretic\heretic_monsters.dm" #include "code\modules\antagonists\heretic\influences.dm" #include "code\modules\antagonists\heretic\knife_effect.dm" +#include "code\modules\antagonists\heretic\moon_lunatic.dm" #include "code\modules\antagonists\heretic\rust_effect.dm" #include "code\modules\antagonists\heretic\transmutation_rune.dm" #include "code\modules\antagonists\heretic\items\eldritch_flask.dm" +#include "code\modules\antagonists\heretic\items\eldritch_painting.dm" #include "code\modules\antagonists\heretic\items\forbidden_book.dm" #include "code\modules\antagonists\heretic\items\heretic_armor.dm" #include "code\modules\antagonists\heretic\items\heretic_blades.dm" #include "code\modules\antagonists\heretic\items\heretic_necks.dm" #include "code\modules\antagonists\heretic\items\hunter_rifle.dm" #include "code\modules\antagonists\heretic\items\keyring.dm" -#include "code\modules\antagonists\heretic\items\lintel.dm" +#include "code\modules\antagonists\heretic\items\labyrinth_handbook.dm" #include "code\modules\antagonists\heretic\items\madness_mask.dm" +#include "code\modules\antagonists\heretic\items\unfathomable_curio.dm" #include "code\modules\antagonists\heretic\knowledge\ash_lore.dm" #include "code\modules\antagonists\heretic\knowledge\blade_lore.dm" #include "code\modules\antagonists\heretic\knowledge\cosmic_lore.dm" #include "code\modules\antagonists\heretic\knowledge\flesh_lore.dm" #include "code\modules\antagonists\heretic\knowledge\general_side.dm" -#include "code\modules\antagonists\heretic\knowledge\knock_lore.dm" +#include "code\modules\antagonists\heretic\knowledge\lock_lore.dm" +#include "code\modules\antagonists\heretic\knowledge\moon_lore.dm" #include "code\modules\antagonists\heretic\knowledge\rust_lore.dm" -#include "code\modules\antagonists\heretic\knowledge\side_ash_flesh.dm" +#include "code\modules\antagonists\heretic\knowledge\side_ash_moon.dm" #include "code\modules\antagonists\heretic\knowledge\side_blade_rust.dm" #include "code\modules\antagonists\heretic\knowledge\side_cosmos_ash.dm" #include "code\modules\antagonists\heretic\knowledge\side_flesh_void.dm" -#include "code\modules\antagonists\heretic\knowledge\side_knock_flesh.dm" +#include "code\modules\antagonists\heretic\knowledge\side_lock_flesh.dm" +#include "code\modules\antagonists\heretic\knowledge\side_lock_moon.dm" #include "code\modules\antagonists\heretic\knowledge\side_rust_cosmos.dm" #include "code\modules\antagonists\heretic\knowledge\side_void_blade.dm" #include "code\modules\antagonists\heretic\knowledge\starting_lore.dm" @@ -3058,10 +3140,15 @@ #include "code\modules\antagonists\heretic\magic\flesh_ascension.dm" #include "code\modules\antagonists\heretic\magic\flesh_surgery.dm" #include "code\modules\antagonists\heretic\magic\furious_steel.dm" +#include "code\modules\antagonists\heretic\magic\lunatic_track.dm" #include "code\modules\antagonists\heretic\magic\madness_touch.dm" #include "code\modules\antagonists\heretic\magic\manse_link.dm" #include "code\modules\antagonists\heretic\magic\mansus_grasp.dm" +#include "code\modules\antagonists\heretic\magic\mind_gate.dm" #include "code\modules\antagonists\heretic\magic\mirror_walk.dm" +#include "code\modules\antagonists\heretic\magic\moon_parade.dm" +#include "code\modules\antagonists\heretic\magic\moon_ringleader.dm" +#include "code\modules\antagonists\heretic\magic\moon_smile.dm" #include "code\modules\antagonists\heretic\magic\nightwatcher_rebirth.dm" #include "code\modules\antagonists\heretic\magic\realignment.dm" #include "code\modules\antagonists\heretic\magic\rust_charge.dm" @@ -3080,7 +3167,7 @@ #include "code\modules\antagonists\heretic\status_effects\ghoul.dm" #include "code\modules\antagonists\heretic\status_effects\mark_effects.dm" #include "code\modules\antagonists\heretic\structures\carving_knife.dm" -#include "code\modules\antagonists\heretic\structures\knock_final.dm" +#include "code\modules\antagonists\heretic\structures\lock_final.dm" #include "code\modules\antagonists\heretic\structures\mawed_crucible.dm" #include "code\modules\antagonists\highlander\highlander.dm" #include "code\modules\antagonists\hypnotized\hypnotized.dm" @@ -3146,6 +3233,10 @@ #include "code\modules\antagonists\traitor\components\traitor_objective_helpers.dm" #include "code\modules\antagonists\traitor\components\traitor_objective_limit_per_time.dm" #include "code\modules\antagonists\traitor\components\traitor_objective_mind_tracker.dm" +#include "code\modules\antagonists\traitor\contractor\contract_teammate.dm" +#include "code\modules\antagonists\traitor\contractor\contractor_hub.dm" +#include "code\modules\antagonists\traitor\contractor\contractor_items.dm" +#include "code\modules\antagonists\traitor\contractor\syndicate_contract.dm" #include "code\modules\antagonists\traitor\objectives\assassination.dm" #include "code\modules\antagonists\traitor\objectives\demoralise_assault.dm" #include "code\modules\antagonists\traitor\objectives\destroy_heirloom.dm" @@ -3264,7 +3355,6 @@ #include "code\modules\asset_cache\assets\supplypods.dm" #include "code\modules\asset_cache\assets\tgfont.dm" #include "code\modules\asset_cache\assets\tgui.dm" -#include "code\modules\asset_cache\assets\tutorial_advisors.dm" #include "code\modules\asset_cache\assets\uplink.dm" #include "code\modules\asset_cache\assets\vending.dm" #include "code\modules\asset_cache\assets\vv.dm" @@ -3380,12 +3470,18 @@ #include "code\modules\bitrunning\job.dm" #include "code\modules\bitrunning\outfits.dm" #include "code\modules\bitrunning\turfs.dm" +#include "code\modules\bitrunning\antagonists\_parent.dm" #include "code\modules\bitrunning\antagonists\cyber_police.dm" +#include "code\modules\bitrunning\antagonists\cyber_tac.dm" +#include "code\modules\bitrunning\antagonists\netguardian.dm" #include "code\modules\bitrunning\components\avatar_connection.dm" #include "code\modules\bitrunning\components\bitrunning_points.dm" +#include "code\modules\bitrunning\components\glitch.dm" #include "code\modules\bitrunning\components\netpod_healing.dm" +#include "code\modules\bitrunning\components\npc_friendly.dm" #include "code\modules\bitrunning\objects\byteforge.dm" #include "code\modules\bitrunning\objects\clothing.dm" +#include "code\modules\bitrunning\objects\debug.dm" #include "code\modules\bitrunning\objects\disks.dm" #include "code\modules\bitrunning\objects\hololadder.dm" #include "code\modules\bitrunning\objects\host_monitor.dm" @@ -3397,28 +3493,35 @@ #include "code\modules\bitrunning\orders\disks.dm" #include "code\modules\bitrunning\orders\flair.dm" #include "code\modules\bitrunning\orders\tech.dm" +#include "code\modules\bitrunning\server\_parent.dm" #include "code\modules\bitrunning\server\loot.dm" #include "code\modules\bitrunning\server\map_handling.dm" #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\util\digital_aura.dm" +#include "code\modules\bitrunning\util\service_style.dm" +#include "code\modules\bitrunning\util\virtual_megafauna.dm" +#include "code\modules\bitrunning\util\virtual_mob.dm" +#include "code\modules\bitrunning\virtual_domain\modular_mob_segment.dm" #include "code\modules\bitrunning\virtual_domain\virtual_domain.dm" +#include "code\modules\bitrunning\virtual_domain\domains\abductor_ship.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" #include "code\modules\bitrunning\virtual_domain\domains\psyker_zombies.dm" #include "code\modules\bitrunning\virtual_domain\domains\stairs_and_cliffs.dm" +#include "code\modules\bitrunning\virtual_domain\domains\starfront_saloon.dm" #include "code\modules\bitrunning\virtual_domain\domains\syndicate_assault.dm" #include "code\modules\bitrunning\virtual_domain\domains\test_only.dm" #include "code\modules\bitrunning\virtual_domain\domains\vaporwave.dm" @@ -3434,6 +3537,7 @@ #include "code\modules\buildmode\submodes\copy.dm" #include "code\modules\buildmode\submodes\delete.dm" #include "code\modules\buildmode\submodes\fill.dm" +#include "code\modules\buildmode\submodes\map_export.dm" #include "code\modules\buildmode\submodes\mapgen.dm" #include "code\modules\buildmode\submodes\outfit.dm" #include "code\modules\buildmode\submodes\proccall.dm" @@ -3553,7 +3657,6 @@ #include "code\modules\client\preferences\clothing.dm" #include "code\modules\client\preferences\darkened_flash.dm" #include "code\modules\client\preferences\food_allergy.dm" -#include "code\modules\client\preferences\fov_darkness.dm" #include "code\modules\client\preferences\fps.dm" #include "code\modules\client\preferences\gender.dm" #include "code\modules\client\preferences\ghost.dm" @@ -3787,6 +3890,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" @@ -4040,7 +4144,6 @@ #include "code\modules\hydroponics\hydroponics.dm" #include "code\modules\hydroponics\hydroponics_chemreact.dm" #include "code\modules\hydroponics\plant_genes.dm" -#include "code\modules\hydroponics\sample.dm" #include "code\modules\hydroponics\seed_extractor.dm" #include "code\modules\hydroponics\seeds.dm" #include "code\modules\hydroponics\unique_plant_genes.dm" @@ -4145,8 +4248,6 @@ #include "code\modules\jobs\job_types\medical_doctor.dm" #include "code\modules\jobs\job_types\mime.dm" #include "code\modules\jobs\job_types\paramedic.dm" -#include "code\modules\jobs\job_types\personal_ai.dm" -#include "code\modules\jobs\job_types\positronic_brain.dm" #include "code\modules\jobs\job_types\prisoner.dm" #include "code\modules\jobs\job_types\psychologist.dm" #include "code\modules\jobs\job_types\quartermaster.dm" @@ -4154,7 +4255,6 @@ #include "code\modules\jobs\job_types\roboticist.dm" #include "code\modules\jobs\job_types\scientist.dm" #include "code\modules\jobs\job_types\security_officer.dm" -#include "code\modules\jobs\job_types\servant_golem.dm" #include "code\modules\jobs\job_types\shaft_miner.dm" #include "code\modules\jobs\job_types\station_engineer.dm" #include "code\modules\jobs\job_types\unassigned.dm" @@ -4200,6 +4300,9 @@ #include "code\modules\jobs\job_types\spawner\lavaland_syndicate.dm" #include "code\modules\jobs\job_types\spawner\lifebringer.dm" #include "code\modules\jobs\job_types\spawner\maintenance_drone.dm" +#include "code\modules\jobs\job_types\spawner\personal_ai.dm" +#include "code\modules\jobs\job_types\spawner\positronic_brain.dm" +#include "code\modules\jobs\job_types\spawner\servant_golem.dm" #include "code\modules\jobs\job_types\spawner\skeleton.dm" #include "code\modules\jobs\job_types\spawner\space_bar_patron.dm" #include "code\modules\jobs\job_types\spawner\space_bartender.dm" @@ -4254,6 +4357,7 @@ #include "code\modules\library\skill_learning\skillchip.dm" #include "code\modules\library\skill_learning\job_skillchips\_job.dm" #include "code\modules\library\skill_learning\job_skillchips\chef.dm" +#include "code\modules\library\skill_learning\job_skillchips\janitor.dm" #include "code\modules\library\skill_learning\job_skillchips\psychologist.dm" #include "code\modules\library\skill_learning\job_skillchips\research_director.dm" #include "code\modules\library\skill_learning\job_skillchips\roboticist.dm" @@ -4274,6 +4378,7 @@ #include "code\modules\logging\categories\log_category_debug.dm" #include "code\modules\logging\categories\log_category_game.dm" #include "code\modules\logging\categories\log_category_href.dm" +#include "code\modules\logging\categories\log_category_internal.dm" #include "code\modules\logging\categories\log_category_misc.dm" #include "code\modules\logging\categories\log_category_pda.dm" #include "code\modules\logging\categories\log_category_silo.dm" @@ -4281,6 +4386,7 @@ #include "code\modules\logging\categories\log_category_uplink.dm" #include "code\modules\mafia\_defines.dm" #include "code\modules\mafia\controller.dm" +#include "code\modules\mafia\controller_ui.dm" #include "code\modules\mafia\map_pieces.dm" #include "code\modules\mafia\outfits.dm" #include "code\modules\mafia\abilities\abilities.dm" @@ -4307,6 +4413,7 @@ #include "code\modules\mafia\roles\town\town_protective.dm" #include "code\modules\mafia\roles\town\town_support.dm" #include "code\modules\mapfluff\centcom\nuke_ops.dm" +#include "code\modules\mapfluff\ruins\generic.dm" #include "code\modules\mapfluff\ruins\lavaland_ruin_code.dm" #include "code\modules\mapfluff\ruins\icemoonruin_code\hotsprings.dm" #include "code\modules\mapfluff\ruins\icemoonruin_code\library.dm" @@ -4477,14 +4584,26 @@ #include "code\modules\mob\living\basic\blob_minions\blob_spore.dm" #include "code\modules\mob\living\basic\blob_minions\blob_zombie.dm" #include "code\modules\mob\living\basic\blob_minions\blobbernaut.dm" +#include "code\modules\mob\living\basic\bots\_bots.dm" +#include "code\modules\mob\living\basic\bots\bot_ai.dm" +#include "code\modules\mob\living\basic\bots\bot_hud.dm" +#include "code\modules\mob\living\basic\bots\cleanbot\cleanbot.dm" +#include "code\modules\mob\living\basic\bots\cleanbot\cleanbot_abilities.dm" +#include "code\modules\mob\living\basic\bots\cleanbot\cleanbot_ai.dm" +#include "code\modules\mob\living\basic\bots\hygienebot\hygienebot.dm" +#include "code\modules\mob\living\basic\bots\hygienebot\hygienebot_ai.dm" +#include "code\modules\mob\living\basic\bots\medbot\medbot.dm" +#include "code\modules\mob\living\basic\bots\medbot\medbot_ai.dm" #include "code\modules\mob\living\basic\clown\clown.dm" #include "code\modules\mob\living\basic\clown\clown_ai.dm" -#include "code\modules\mob\living\basic\constructs\_construct.dm" -#include "code\modules\mob\living\basic\constructs\artificer.dm" -#include "code\modules\mob\living\basic\constructs\construct_ai.dm" -#include "code\modules\mob\living\basic\constructs\harvester.dm" -#include "code\modules\mob\living\basic\constructs\juggernaut.dm" -#include "code\modules\mob\living\basic\constructs\wraith.dm" +#include "code\modules\mob\living\basic\cult\shade.dm" +#include "code\modules\mob\living\basic\cult\constructs\_construct.dm" +#include "code\modules\mob\living\basic\cult\constructs\artificer.dm" +#include "code\modules\mob\living\basic\cult\constructs\construct_ai.dm" +#include "code\modules\mob\living\basic\cult\constructs\harvester.dm" +#include "code\modules\mob\living\basic\cult\constructs\juggernaut.dm" +#include "code\modules\mob\living\basic\cult\constructs\proteon.dm" +#include "code\modules\mob\living\basic\cult\constructs\wraith.dm" #include "code\modules\mob\living\basic\drone\_drone.dm" #include "code\modules\mob\living\basic\drone\drone_say.dm" #include "code\modules\mob\living\basic\drone\drone_tools.dm" @@ -4515,11 +4634,27 @@ #include "code\modules\mob\living\basic\farm_animals\gorilla\gorilla_accessories.dm" #include "code\modules\mob\living\basic\farm_animals\gorilla\gorilla_ai.dm" #include "code\modules\mob\living\basic\farm_animals\gorilla\gorilla_emotes.dm" +#include "code\modules\mob\living\basic\guardian\guardian.dm" +#include "code\modules\mob\living\basic\guardian\guardian_creator.dm" +#include "code\modules\mob\living\basic\guardian\guardian_fluff.dm" +#include "code\modules\mob\living\basic\guardian\guardian_helpers.dm" +#include "code\modules\mob\living\basic\guardian\guardian_verbs.dm" +#include "code\modules\mob\living\basic\guardian\guardian_types\assassin.dm" +#include "code\modules\mob\living\basic\guardian\guardian_types\charger.dm" +#include "code\modules\mob\living\basic\guardian\guardian_types\dextrous.dm" +#include "code\modules\mob\living\basic\guardian\guardian_types\explosive.dm" +#include "code\modules\mob\living\basic\guardian\guardian_types\gaseous.dm" +#include "code\modules\mob\living\basic\guardian\guardian_types\gravitokinetic.dm" +#include "code\modules\mob\living\basic\guardian\guardian_types\lightning.dm" +#include "code\modules\mob\living\basic\guardian\guardian_types\protector.dm" +#include "code\modules\mob\living\basic\guardian\guardian_types\ranged.dm" +#include "code\modules\mob\living\basic\guardian\guardian_types\standard.dm" +#include "code\modules\mob\living\basic\guardian\guardian_types\support.dm" +#include "code\modules\mob\living\basic\heretic\_heretic_summon.dm" #include "code\modules\mob\living\basic\heretic\ash_spirit.dm" #include "code\modules\mob\living\basic\heretic\fire_shark.dm" #include "code\modules\mob\living\basic\heretic\flesh_stalker.dm" #include "code\modules\mob\living\basic\heretic\flesh_worm.dm" -#include "code\modules\mob\living\basic\heretic\heretic_summon.dm" #include "code\modules\mob\living\basic\heretic\maid_in_the_mirror.dm" #include "code\modules\mob\living\basic\heretic\raw_prophet.dm" #include "code\modules\mob\living\basic\heretic\rust_walker.dm" @@ -4530,7 +4665,13 @@ #include "code\modules\mob\living\basic\icemoon\ice_whelp\ice_whelp.dm" #include "code\modules\mob\living\basic\icemoon\ice_whelp\ice_whelp_abilities.dm" #include "code\modules\mob\living\basic\icemoon\ice_whelp\ice_whelp_ai.dm" +#include "code\modules\mob\living\basic\icemoon\wolf\wolf.dm" +#include "code\modules\mob\living\basic\icemoon\wolf\wolf_ai.dm" +#include "code\modules\mob\living\basic\icemoon\wolf\wolf_extras.dm" #include "code\modules\mob\living\basic\jungle\venus_human_trap.dm" +#include "code\modules\mob\living\basic\jungle\leaper\leaper.dm" +#include "code\modules\mob\living\basic\jungle\leaper\leaper_abilities.dm" +#include "code\modules\mob\living\basic\jungle\leaper\leaper_ai.dm" #include "code\modules\mob\living\basic\jungle\mega_arachnid\mega_arachnid.dm" #include "code\modules\mob\living\basic\jungle\mega_arachnid\mega_arachnid_abilities.dm" #include "code\modules\mob\living\basic\jungle\mega_arachnid\mega_arachnid_ai.dm" @@ -4558,6 +4699,10 @@ #include "code\modules\mob\living\basic\lavaland\goliath\goliath_ai.dm" #include "code\modules\mob\living\basic\lavaland\goliath\goliath_trophy.dm" #include "code\modules\mob\living\basic\lavaland\goliath\tentacle.dm" +#include "code\modules\mob\living\basic\lavaland\gutlunchers\gutluncher_foodtrough.dm" +#include "code\modules\mob\living\basic\lavaland\gutlunchers\gutlunchers.dm" +#include "code\modules\mob\living\basic\lavaland\gutlunchers\gutlunchers_ai.dm" +#include "code\modules\mob\living\basic\lavaland\gutlunchers\gutlunchers_inherit_datum.dm" #include "code\modules\mob\living\basic\lavaland\hivelord\hivelord.dm" #include "code\modules\mob\living\basic\lavaland\hivelord\hivelord_ai.dm" #include "code\modules\mob\living\basic\lavaland\hivelord\spawn_hivelord_brood.dm" @@ -4586,14 +4731,33 @@ #include "code\modules\mob\living\basic\pets\penguin.dm" #include "code\modules\mob\living\basic\pets\pet.dm" #include "code\modules\mob\living\basic\pets\sloth.dm" +#include "code\modules\mob\living\basic\pets\cat\bread_cat_ai.dm" +#include "code\modules\mob\living\basic\pets\cat\cat.dm" +#include "code\modules\mob\living\basic\pets\cat\cat_ai.dm" +#include "code\modules\mob\living\basic\pets\cat\feral.dm" +#include "code\modules\mob\living\basic\pets\cat\keeki.dm" +#include "code\modules\mob\living\basic\pets\cat\kitten_ai.dm" +#include "code\modules\mob\living\basic\pets\cat\runtime.dm" #include "code\modules\mob\living\basic\pets\dog\_dog.dm" #include "code\modules\mob\living\basic\pets\dog\corgi.dm" #include "code\modules\mob\living\basic\pets\dog\dog_subtypes.dm" #include "code\modules\mob\living\basic\pets\dog\strippable_items.dm" +#include "code\modules\mob\living\basic\pets\parrot\_parrot.dm" +#include "code\modules\mob\living\basic\pets\parrot\parrot_items.dm" +#include "code\modules\mob\living\basic\pets\parrot\parrot_subtypes.dm" +#include "code\modules\mob\living\basic\pets\parrot\poly.dm" +#include "code\modules\mob\living\basic\pets\parrot\parrot_ai\_parrot_controller.dm" +#include "code\modules\mob\living\basic\pets\parrot\parrot_ai\ghost_parrot_controller.dm" +#include "code\modules\mob\living\basic\pets\parrot\parrot_ai\parrot_hoarding.dm" +#include "code\modules\mob\living\basic\pets\parrot\parrot_ai\parrot_perching.dm" +#include "code\modules\mob\living\basic\pets\parrot\parrot_ai\parroting_action.dm" #include "code\modules\mob\living\basic\ruin_defender\flesh.dm" #include "code\modules\mob\living\basic\ruin_defender\living_floor.dm" #include "code\modules\mob\living\basic\ruin_defender\skeleton.dm" #include "code\modules\mob\living\basic\ruin_defender\stickman.dm" +#include "code\modules\mob\living\basic\ruin_defender\wizard\wizard.dm" +#include "code\modules\mob\living\basic\ruin_defender\wizard\wizard_ai.dm" +#include "code\modules\mob\living\basic\ruin_defender\wizard\wizard_spells.dm" #include "code\modules\mob\living\basic\space_fauna\ant.dm" #include "code\modules\mob\living\basic\space_fauna\cat_surgeon.dm" #include "code\modules\mob\living\basic\space_fauna\faithless.dm" @@ -4676,6 +4840,7 @@ #include "code\modules\mob\living\basic\trader\trader_ai.dm" #include "code\modules\mob\living\basic\trader\trader_data.dm" #include "code\modules\mob\living\basic\trader\trader_items.dm" +#include "code\modules\mob\living\basic\trooper\abductor.dm" #include "code\modules\mob\living\basic\trooper\nanotrasen.dm" #include "code\modules\mob\living\basic\trooper\pirate.dm" #include "code\modules\mob\living\basic\trooper\russian.dm" @@ -4692,6 +4857,7 @@ #include "code\modules\mob\living\basic\vermin\mouse.dm" #include "code\modules\mob\living\basic\vermin\space_bat.dm" #include "code\modules\mob\living\brain\brain.dm" +#include "code\modules\mob\living\brain\brain_cybernetic.dm" #include "code\modules\mob\living\brain\brain_item.dm" #include "code\modules\mob\living\brain\brain_say.dm" #include "code\modules\mob\living\brain\death.dm" @@ -4835,39 +5001,20 @@ #include "code\modules\mob\living\silicon\robot\robot_say.dm" #include "code\modules\mob\living\simple_animal\animal_defense.dm" #include "code\modules\mob\living\simple_animal\damage_procs.dm" -#include "code\modules\mob\living\simple_animal\parrot.dm" -#include "code\modules\mob\living\simple_animal\shade.dm" #include "code\modules\mob\living\simple_animal\simple_animal.dm" #include "code\modules\mob\living\simple_animal\bot\bot.dm" #include "code\modules\mob\living\simple_animal\bot\bot_announcement.dm" -#include "code\modules\mob\living\simple_animal\bot\cleanbot.dm" #include "code\modules\mob\living\simple_animal\bot\construction.dm" #include "code\modules\mob\living\simple_animal\bot\ed209bot.dm" #include "code\modules\mob\living\simple_animal\bot\firebot.dm" #include "code\modules\mob\living\simple_animal\bot\floorbot.dm" #include "code\modules\mob\living\simple_animal\bot\honkbot.dm" -#include "code\modules\mob\living\simple_animal\bot\hygienebot.dm" -#include "code\modules\mob\living\simple_animal\bot\medbot.dm" #include "code\modules\mob\living\simple_animal\bot\mulebot.dm" #include "code\modules\mob\living\simple_animal\bot\secbot.dm" #include "code\modules\mob\living\simple_animal\bot\SuperBeepsky.dm" #include "code\modules\mob\living\simple_animal\bot\vibebot.dm" -#include "code\modules\mob\living\simple_animal\friendly\cat.dm" #include "code\modules\mob\living\simple_animal\friendly\gondola.dm" #include "code\modules\mob\living\simple_animal\friendly\pet.dm" -#include "code\modules\mob\living\simple_animal\guardian\guardian.dm" -#include "code\modules\mob\living\simple_animal\guardian\guardian_creator.dm" -#include "code\modules\mob\living\simple_animal\guardian\types\assassin.dm" -#include "code\modules\mob\living\simple_animal\guardian\types\charger.dm" -#include "code\modules\mob\living\simple_animal\guardian\types\dextrous.dm" -#include "code\modules\mob\living\simple_animal\guardian\types\explosive.dm" -#include "code\modules\mob\living\simple_animal\guardian\types\gaseous.dm" -#include "code\modules\mob\living\simple_animal\guardian\types\gravitokinetic.dm" -#include "code\modules\mob\living\simple_animal\guardian\types\lightning.dm" -#include "code\modules\mob\living\simple_animal\guardian\types\protector.dm" -#include "code\modules\mob\living\simple_animal\guardian\types\ranged.dm" -#include "code\modules\mob\living\simple_animal\guardian\types\standard.dm" -#include "code\modules\mob\living\simple_animal\guardian\types\support.dm" #include "code\modules\mob\living\simple_animal\hostile\alien.dm" #include "code\modules\mob\living\simple_animal\hostile\dark_wizard.dm" #include "code\modules\mob\living\simple_animal\hostile\hostile.dm" @@ -4875,11 +5022,7 @@ #include "code\modules\mob\living\simple_animal\hostile\mimic.dm" #include "code\modules\mob\living\simple_animal\hostile\ooze.dm" #include "code\modules\mob\living\simple_animal\hostile\vatbeast.dm" -#include "code\modules\mob\living\simple_animal\hostile\wizard.dm" #include "code\modules\mob\living\simple_animal\hostile\zombie.dm" -#include "code\modules\mob\living\simple_animal\hostile\constructs\constructs.dm" -#include "code\modules\mob\living\simple_animal\hostile\jungle\_jungle_mobs.dm" -#include "code\modules\mob\living\simple_animal\hostile\jungle\leaper.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\_megafauna.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\blood_drunk_miner.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\bubblegum.dm" @@ -4891,7 +5034,6 @@ #include "code\modules\mob\living\simple_animal\hostile\megafauna\legion.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\wendigo.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\curse_blob.dm" -#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\gutlunch.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\mining_mobs.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\polarbear.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\wolf.dm" @@ -4902,13 +5044,15 @@ #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\ai.dm" #include "code\modules\mob\living\simple_animal\slime\death.dm" +#include "code\modules\mob\living\simple_animal\slime\defense.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\living\simple_animal\slime\slime_type.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" @@ -4981,6 +5125,7 @@ #include "code\modules\modular_computers\file_system\programs\budgetordering.dm" #include "code\modules\modular_computers\file_system\programs\card.dm" #include "code\modules\modular_computers\file_system\programs\cargoship.dm" +#include "code\modules\modular_computers\file_system\programs\coupon.dm" #include "code\modules\modular_computers\file_system\programs\crewmanifest.dm" #include "code\modules\modular_computers\file_system\programs\emojipedia.dm" #include "code\modules\modular_computers\file_system\programs\file_browser.dm" @@ -4991,7 +5136,6 @@ #include "code\modules\modular_computers\file_system\programs\notepad.dm" #include "code\modules\modular_computers\file_system\programs\nt_pay.dm" #include "code\modules\modular_computers\file_system\programs\ntdownloader.dm" -#include "code\modules\modular_computers\file_system\programs\ntnrc_client.dm" #include "code\modules\modular_computers\file_system\programs\portrait_printer.dm" #include "code\modules\modular_computers\file_system\programs\powermonitor.dm" #include "code\modules\modular_computers\file_system\programs\radar.dm" @@ -5006,8 +5150,11 @@ #include "code\modules\modular_computers\file_system\programs\techweb.dm" #include "code\modules\modular_computers\file_system\programs\theme_selector.dm" #include "code\modules\modular_computers\file_system\programs\wirecarp.dm" +#include "code\modules\modular_computers\file_system\programs\antagonist\contractor_program.dm" #include "code\modules\modular_computers\file_system\programs\antagonist\dos.dm" #include "code\modules\modular_computers\file_system\programs\antagonist\revelation.dm" +#include "code\modules\modular_computers\file_system\programs\chatroom\conversation.dm" +#include "code\modules\modular_computers\file_system\programs\chatroom\ntnrc_client.dm" #include "code\modules\modular_computers\file_system\programs\maintenance\_maintenance_program.dm" #include "code\modules\modular_computers\file_system\programs\maintenance\camera.dm" #include "code\modules\modular_computers\file_system\programs\maintenance\modsuit.dm" @@ -5015,7 +5162,6 @@ #include "code\modules\modular_computers\file_system\programs\maintenance\themes.dm" #include "code\modules\modular_computers\file_system\programs\messenger\messenger_data.dm" #include "code\modules\modular_computers\file_system\programs\messenger\messenger_program.dm" -#include "code\modules\modular_computers\NTNet\NTNRC\conversation.dm" #include "code\modules\movespeed\_movespeed_modifier.dm" #include "code\modules\movespeed\modifiers\components.dm" #include "code\modules\movespeed\modifiers\drugs.dm" @@ -5253,11 +5399,11 @@ #include "code\modules\projectiles\projectile\bullets\special.dm" #include "code\modules\projectiles\projectile\energy\_energy.dm" #include "code\modules\projectiles\projectile\energy\chameleon.dm" -#include "code\modules\projectiles\projectile\energy\decloner.dm" #include "code\modules\projectiles\projectile\energy\ebow.dm" #include "code\modules\projectiles\projectile\energy\net_snare.dm" #include "code\modules\projectiles\projectile\energy\ninja.dm" #include "code\modules\projectiles\projectile\energy\nuclear_particle.dm" +#include "code\modules\projectiles\projectile\energy\radiation.dm" #include "code\modules\projectiles\projectile\energy\stun.dm" #include "code\modules\projectiles\projectile\energy\tesla.dm" #include "code\modules\projectiles\projectile\energy\thermal.dm" @@ -5279,10 +5425,14 @@ #include "code\modules\reagents\chemistry\chem_wiki_render.dm" #include "code\modules\reagents\chemistry\colors.dm" #include "code\modules\reagents\chemistry\equilibrium.dm" -#include "code\modules\reagents\chemistry\holder.dm" #include "code\modules\reagents\chemistry\items.dm" #include "code\modules\reagents\chemistry\reagents.dm" #include "code\modules\reagents\chemistry\recipes.dm" +#include "code\modules\reagents\chemistry\holder\holder.dm" +#include "code\modules\reagents\chemistry\holder\mob_life.dm" +#include "code\modules\reagents\chemistry\holder\properties.dm" +#include "code\modules\reagents\chemistry\holder\reactions.dm" +#include "code\modules\reagents\chemistry\holder\ui_data.dm" #include "code\modules\reagents\chemistry\machinery\chem_dispenser.dm" #include "code\modules\reagents\chemistry\machinery\chem_heater.dm" #include "code\modules\reagents\chemistry\machinery\chem_mass_spec.dm" @@ -5291,6 +5441,7 @@ #include "code\modules\reagents\chemistry\machinery\chem_separator.dm" #include "code\modules\reagents\chemistry\machinery\chem_synthesizer.dm" #include "code\modules\reagents\chemistry\machinery\pandemic.dm" +#include "code\modules\reagents\chemistry\machinery\portable_chem_mixer.dm" #include "code\modules\reagents\chemistry\machinery\reagentgrinder.dm" #include "code\modules\reagents\chemistry\machinery\smoke_machine.dm" #include "code\modules\reagents\chemistry\reagents\atmos_gas_reagents.dm" @@ -5358,15 +5509,16 @@ #include "code\modules\recycling\disposal\outlet.dm" #include "code\modules\recycling\disposal\pipe.dm" #include "code\modules\recycling\disposal\pipe_sorting.dm" -#include "code\modules\religion\pyre_rites.dm" #include "code\modules\religion\religion_sects.dm" #include "code\modules\religion\religion_structures.dm" #include "code\modules\religion\rites.dm" #include "code\modules\religion\burdened\burdened_trauma.dm" #include "code\modules\religion\burdened\psyker.dm" +#include "code\modules\religion\festival\festival_violin.dm" #include "code\modules\religion\festival\instrument_rites.dm" #include "code\modules\religion\honorbound\honorbound_rites.dm" #include "code\modules\religion\honorbound\honorbound_trauma.dm" +#include "code\modules\religion\pyre\pyre_rites.dm" #include "code\modules\religion\sparring\ceremonial_gear.dm" #include "code\modules\religion\sparring\sparring_contract.dm" #include "code\modules\religion\sparring\sparring_datum.dm" @@ -5485,6 +5637,7 @@ #include "code\modules\shuttle\shuttle_events\meteors.dm" #include "code\modules\shuttle\shuttle_events\misc.dm" #include "code\modules\shuttle\shuttle_events\player_controlled.dm" +#include "code\modules\shuttle\shuttle_events\turbulence.dm" #include "code\modules\spatial_grid\cell_tracker.dm" #include "code\modules\spells\spell.dm" #include "code\modules\spells\spell_types\madness_curse.dm" @@ -5547,7 +5700,6 @@ #include "code\modules\spells\spell_types\self\lichdom.dm" #include "code\modules\spells\spell_types\self\mime_vow.dm" #include "code\modules\spells\spell_types\self\mutate.dm" -#include "code\modules\spells\spell_types\self\personality_commune.dm" #include "code\modules\spells\spell_types\self\rod_form.dm" #include "code\modules\spells\spell_types\self\sanguine_strike.dm" #include "code\modules\spells\spell_types\self\smoke.dm" @@ -5572,6 +5724,7 @@ #include "code\modules\spells\spell_types\touch\smite.dm" #include "code\modules\station_goals\bsa.dm" #include "code\modules\station_goals\dna_vault.dm" +#include "code\modules\station_goals\generate_goals.dm" #include "code\modules\station_goals\meteor_shield.dm" #include "code\modules\station_goals\station_goal.dm" #include "code\modules\station_goals\vault_mutation.dm" @@ -5641,6 +5794,7 @@ #include "code\modules\surgery\organs\_organ.dm" #include "code\modules\surgery\organs\autosurgeon.dm" #include "code\modules\surgery\organs\helpers.dm" +#include "code\modules\surgery\organs\organ_movement.dm" #include "code\modules\surgery\organs\external\_external_organ.dm" #include "code\modules\surgery\organs\external\restyling.dm" #include "code\modules\surgery\organs\external\spines.dm" @@ -5743,6 +5897,7 @@ #include "code\modules\uplink\uplink_items\badass.dm" #include "code\modules\uplink\uplink_items\bundle.dm" #include "code\modules\uplink\uplink_items\clownops.dm" +#include "code\modules\uplink\uplink_items\contractor.dm" #include "code\modules\uplink\uplink_items\dangerous.dm" #include "code\modules\uplink\uplink_items\device_tools.dm" #include "code\modules\uplink\uplink_items\explosive.dm" @@ -5841,10 +5996,10 @@ #include "code\modules\visuals\render_steps.dm" #include "code\modules\wiremod\components\abstract\assoc_list_variable.dm" #include "code\modules\wiremod\components\abstract\compare.dm" -#include "code\modules\wiremod\components\abstract\equpiment_action.dm" #include "code\modules\wiremod\components\abstract\list_variable.dm" #include "code\modules\wiremod\components\abstract\module.dm" #include "code\modules\wiremod\components\abstract\variable.dm" +#include "code\modules\wiremod\components\action\equpiment_action.dm" #include "code\modules\wiremod\components\action\laserpointer.dm" #include "code\modules\wiremod\components\action\light.dm" #include "code\modules\wiremod\components\action\mmi.dm" @@ -5902,6 +6057,7 @@ #include "code\modules\wiremod\components\list\list_pick.dm" #include "code\modules\wiremod\components\list\list_remove.dm" #include "code\modules\wiremod\components\list\split.dm" +#include "code\modules\wiremod\components\math\arctan2.dm" #include "code\modules\wiremod\components\math\arithmetic.dm" #include "code\modules\wiremod\components\math\binary_conversion.dm" #include "code\modules\wiremod\components\math\comparison.dm" @@ -5951,6 +6107,7 @@ #include "code\modules\wiremod\datatypes\option.dm" #include "code\modules\wiremod\datatypes\signal.dm" #include "code\modules\wiremod\datatypes\string.dm" +#include "code\modules\wiremod\datatypes\user.dm" #include "code\modules\wiremod\datatypes\composite\assoc_list.dm" #include "code\modules\wiremod\datatypes\composite\composite.dm" #include "code\modules\wiremod\datatypes\composite\list.dm" @@ -5986,1847 +6143,1957 @@ #include "interface\fonts\spess_font.dm" #include "interface\fonts\tiny_unicode.dm" #include "interface\fonts\vcr_osd_mono.dm" -#include "modular_skyrat\master_files\code\_globalvars\configuration.dm" -#include "modular_skyrat\master_files\code\_globalvars\religion.dm" -#include "modular_skyrat\master_files\code\_globalvars\lists\ambience.dm" -#include "modular_skyrat\master_files\code\_globalvars\lists\chat.dm" -#include "modular_skyrat\master_files\code\_onclick\cyborg.dm" -#include "modular_skyrat\master_files\code\_onclick\hud\screen_objects.dm" -#include "modular_skyrat\master_files\code\controllers\configuration\entries\skyrat_config_entries.dm" -#include "modular_skyrat\master_files\code\controllers\subsystem\dbcore.dm" -#include "modular_skyrat\master_files\code\controllers\subsystem\events.dm" -#include "modular_skyrat\master_files\code\controllers\subsystem\language.dm" -#include "modular_skyrat\master_files\code\datums\ai_laws.dm" -#include "modular_skyrat\master_files\code\datums\emotes.dm" -#include "modular_skyrat\master_files\code\datums\ert.dm" -#include "modular_skyrat\master_files\code\datums\outfit.dm" -#include "modular_skyrat\master_files\code\datums\bodypart_overlays\bodypart_overlay.dm" -#include "modular_skyrat\master_files\code\datums\bodypart_overlays\mutant_bodypart_overlay.dm" -#include "modular_skyrat\master_files\code\datums\components\crafting.dm" -#include "modular_skyrat\master_files\code\datums\components\damage_tracker.dm" -#include "modular_skyrat\master_files\code\datums\components\fullauto.dm" -#include "modular_skyrat\master_files\code\datums\components\grillable.dm" -#include "modular_skyrat\master_files\code\datums\components\leash.dm" -#include "modular_skyrat\master_files\code\datums\components\shielded_suit.dm" -#include "modular_skyrat\master_files\code\datums\components\tippable.dm" -#include "modular_skyrat\master_files\code\datums\greyscale\config_types\greyscale_configs.dm" -#include "modular_skyrat\master_files\code\datums\id_trim\jobs.dm" -#include "modular_skyrat\master_files\code\datums\id_trim\solfed.dm" -#include "modular_skyrat\master_files\code\datums\id_trim\syndicate.dm" -#include "modular_skyrat\master_files\code\datums\keybinding\mob.dm" -#include "modular_skyrat\master_files\code\datums\mind\_mind.dm" -#include "modular_skyrat\master_files\code\datums\mood_events\drink_events.dm" -#include "modular_skyrat\master_files\code\datums\mood_events\generic_negative_events.dm" -#include "modular_skyrat\master_files\code\datums\mood_events\needs_events.dm" -#include "modular_skyrat\master_files\code\datums\mutations\_mutations.dm" -#include "modular_skyrat\master_files\code\datums\mutations\hulk.dm" -#include "modular_skyrat\master_files\code\datums\quirks\_quirk.dm" -#include "modular_skyrat\master_files\code\datums\quirks\negative.dm" -#include "modular_skyrat\master_files\code\datums\quirks\neutral.dm" -#include "modular_skyrat\master_files\code\datums\records\record.dm" -#include "modular_skyrat\master_files\code\datums\storage\storage.dm" -#include "modular_skyrat\master_files\code\datums\storage\subtypes\pockets.dm" -#include "modular_skyrat\master_files\code\datums\traits\good.dm" -#include "modular_skyrat\master_files\code\datums\traits\negative.dm" -#include "modular_skyrat\master_files\code\datums\traits\neutral.dm" -#include "modular_skyrat\master_files\code\datums\votes\_vote_datum.dm" -#include "modular_skyrat\master_files\code\game\atoms.dm" -#include "modular_skyrat\master_files\code\game\sound.dm" -#include "modular_skyrat\master_files\code\game\effects\spawners\random\structure.dm" -#include "modular_skyrat\master_files\code\game\gamemodes\dynamic.dm" -#include "modular_skyrat\master_files\code\game\gamemodes\objective.dm" -#include "modular_skyrat\master_files\code\game\gamemodes\dynamic\dynamic_rulesets_midround.dm" -#include "modular_skyrat\master_files\code\game\gamemodes\dynamic\dynamic_rulesets_roundstart.dm" -#include "modular_skyrat\master_files\code\game\machinery\hologram.dm" -#include "modular_skyrat\master_files\code\game\machinery\suit_storage.dm" -#include "modular_skyrat\master_files\code\game\machinery\doors\firedoor.dm" -#include "modular_skyrat\master_files\code\game\objects\items.dm" -#include "modular_skyrat\master_files\code\game\objects\objs.dm" -#include "modular_skyrat\master_files\code\game\objects\effects\decals\remains.dm" -#include "modular_skyrat\master_files\code\game\objects\effects\decals\cleanable\humans.dm" -#include "modular_skyrat\master_files\code\game\objects\effects\decals\cleanable\misc.dm" -#include "modular_skyrat\master_files\code\game\objects\effects\decals\turfdecals\markings.dm" -#include "modular_skyrat\master_files\code\game\objects\effects\decals\turfdecals\tilecoloring.dm" -#include "modular_skyrat\master_files\code\game\objects\items\AI_modules.dm" -#include "modular_skyrat\master_files\code\game\objects\items\cards_ids.dm" -#include "modular_skyrat\master_files\code\game\objects\items\dyekit.dm" -#include "modular_skyrat\master_files\code\game\objects\items\hhmirror.dm" -#include "modular_skyrat\master_files\code\game\objects\items\holy_weapons.dm" -#include "modular_skyrat\master_files\code\game\objects\items\oxygen_candle.dm" -#include "modular_skyrat\master_files\code\game\objects\items\RCD.dm" -#include "modular_skyrat\master_files\code\game\objects\items\religion.dm" -#include "modular_skyrat\master_files\code\game\objects\items\scratchingstone.dm" -#include "modular_skyrat\master_files\code\game\objects\items\devices\anomaly_neutralizer.dm" -#include "modular_skyrat\master_files\code\game\objects\items\stacks\sheets\sheet_types.dm" -#include "modular_skyrat\master_files\code\game\objects\items\storage\backpack.dm" -#include "modular_skyrat\master_files\code\game\objects\items\storage\boxes.dm" -#include "modular_skyrat\master_files\code\game\objects\items\tools\weldingtool.dm" -#include "modular_skyrat\master_files\code\game\objects\structures\mannequin.dm" -#include "modular_skyrat\master_files\code\game\objects\structures\mirror.dm" -#include "modular_skyrat\master_files\code\game\objects\structures\railings.dm" -#include "modular_skyrat\master_files\code\game\objects\structures\sauna_oven.dm" -#include "modular_skyrat\master_files\code\game\objects\structures\tables_racks.dm" -#include "modular_skyrat\master_files\code\game\objects\structures\towel_bins.dm" -#include "modular_skyrat\master_files\code\game\objects\structures\trash_pile.dm" -#include "modular_skyrat\master_files\code\game\objects\structures\watercloset.dm" -#include "modular_skyrat\master_files\code\game\objects\structures\crates_lockers\secure\cargo.dm" -#include "modular_skyrat\master_files\code\game\turfs\closed\_closed.dm" -#include "modular_skyrat\master_files\code\game\turfs\open\floor\iron_floor.dm" -#include "modular_skyrat\master_files\code\game\turfs\open\space\space.dm" -#include "modular_skyrat\master_files\code\modules\admin\admin.dm" -#include "modular_skyrat\master_files\code\modules\antagonists\_common\antag_datum.dm" -#include "modular_skyrat\master_files\code\modules\antagonists\ashwalker\ashwalker.dm" -#include "modular_skyrat\master_files\code\modules\antagonists\changeling\changeling.dm" -#include "modular_skyrat\master_files\code\modules\antagonists\cult\cult_items.dm" -#include "modular_skyrat\master_files\code\modules\antagonists\ert\ert.dm" -#include "modular_skyrat\master_files\code\modules\antagonists\pirate\pirate_outfits.dm" -#include "modular_skyrat\master_files\code\modules\antagonists\pirate\pirate_shuttle_equipment.dm" -#include "modular_skyrat\master_files\code\modules\antagonists\traitor\objectives\kill_pet.dm" -#include "modular_skyrat\master_files\code\modules\antagonists\traitor\objectives\smuggling.dm" -#include "modular_skyrat\master_files\code\modules\asset_cache\assets\plumbing.dm" -#include "modular_skyrat\master_files\code\modules\bitrunning\orders\tech.dm" -#include "modular_skyrat\master_files\code\modules\buildmode\bm_mode.dm" -#include "modular_skyrat\master_files\code\modules\buildmode\submodes\offercontrol.dm" -#include "modular_skyrat\master_files\code\modules\cargo\goodies.dm" -#include "modular_skyrat\master_files\code\modules\cargo\orderconsole.dm" -#include "modular_skyrat\master_files\code\modules\cargo\bounties\medical.dm" -#include "modular_skyrat\master_files\code\modules\cargo\exports\tools.dm" -#include "modular_skyrat\master_files\code\modules\cargo\exports\traitor.dm" -#include "modular_skyrat\master_files\code\modules\cargo\markets\market_items\weapons.dm" -#include "modular_skyrat\master_files\code\modules\cargo\packs\general.dm" -#include "modular_skyrat\master_files\code\modules\cargo\packs\security.dm" -#include "modular_skyrat\master_files\code\modules\cargo\packs\service.dm" -#include "modular_skyrat\master_files\code\modules\cargo\packs\vending_restock.dm" -#include "modular_skyrat\master_files\code\modules\client\playtime.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences_savefile.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\_admin.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\_preference.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\auto_dementor.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\be_antag.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\body_size.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\brain.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\clothing.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\delete_sparks.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\emote_overlay.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\emote_panel.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\erp_preferences.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\face_cursor_combat_mode.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\flavor_text.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\genitals.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\ghost.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\headshot.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\laugh.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\loadout_override_preference.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\looc.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\mutant_parts.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\out_of_combat_fov_darkness.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\scream.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\tgui_prefs_migration.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\underwear_color.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\voice.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\middleware\languages.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\middleware\limbs_and_markings.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\middleware\species_additional_changes.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\species_features\digitigrade_legs.dm" -#include "modular_skyrat\master_files\code\modules\client\preferences\species_features\generate_side_shots.dm" -#include "modular_skyrat\master_files\code\modules\clothing\anthro_clothes.dm" -#include "modular_skyrat\master_files\code\modules\clothing\base_clothes.dm" -#include "modular_skyrat\master_files\code\modules\clothing\chameleon.dm" -#include "modular_skyrat\master_files\code\modules\clothing\clothing.dm" -#include "modular_skyrat\master_files\code\modules\clothing\towels.dm" -#include "modular_skyrat\master_files\code\modules\clothing\back\antigravityharness.dm" -#include "modular_skyrat\master_files\code\modules\clothing\clothing_variation_overrides\eyes.dm" -#include "modular_skyrat\master_files\code\modules\clothing\clothing_variation_overrides\head.dm" -#include "modular_skyrat\master_files\code\modules\clothing\clothing_variation_overrides\mask.dm" -#include "modular_skyrat\master_files\code\modules\clothing\clothing_variation_overrides\shoes.dm" -#include "modular_skyrat\master_files\code\modules\clothing\clothing_variation_overrides\suit.dm" -#include "modular_skyrat\master_files\code\modules\clothing\clothing_variation_overrides\under.dm" -#include "modular_skyrat\master_files\code\modules\clothing\glasses\_glasses.dm" -#include "modular_skyrat\master_files\code\modules\clothing\glasses\nerve_staple.dm" -#include "modular_skyrat\master_files\code\modules\clothing\head\_head.dm" -#include "modular_skyrat\master_files\code\modules\clothing\head\akula_official.dm" -#include "modular_skyrat\master_files\code\modules\clothing\head\cowboy.dm" -#include "modular_skyrat\master_files\code\modules\clothing\head\monkey_magnification_helmet.dm" -#include "modular_skyrat\master_files\code\modules\clothing\masks\_masks.dm" -#include "modular_skyrat\master_files\code\modules\clothing\outfits\ert.dm" -#include "modular_skyrat\master_files\code\modules\clothing\outfits\standard.dm" -#include "modular_skyrat\master_files\code\modules\clothing\shoes\bananashoes.dm" -#include "modular_skyrat\master_files\code\modules\clothing\shoes\boots.dm" -#include "modular_skyrat\master_files\code\modules\clothing\shoes\sneakers.dm" -#include "modular_skyrat\master_files\code\modules\clothing\shoes\wheelys.dm" -#include "modular_skyrat\master_files\code\modules\clothing\suits\_suits.dm" -#include "modular_skyrat\master_files\code\modules\clothing\suits\labcoat.dm" -#include "modular_skyrat\master_files\code\modules\clothing\suits\skinsuits.dm" -#include "modular_skyrat\master_files\code\modules\clothing\suits\wintercoats.dm" -#include "modular_skyrat\master_files\code\modules\clothing\under\_under.dm" -#include "modular_skyrat\master_files\code\modules\clothing\under\accessories.dm" -#include "modular_skyrat\master_files\code\modules\clothing\under\akula_jobs.dm" -#include "modular_skyrat\master_files\code\modules\clothing\under\akula_official.dm" -#include "modular_skyrat\master_files\code\modules\clothing\under\color.dm" -#include "modular_skyrat\master_files\code\modules\clothing\under\costume.dm" -#include "modular_skyrat\master_files\code\modules\clothing\under\misc.dm" -#include "modular_skyrat\master_files\code\modules\clothing\under\shorts_pants.dm" -#include "modular_skyrat\master_files\code\modules\clothing\under\skirts_dresses.dm" -#include "modular_skyrat\master_files\code\modules\clothing\under\syndicate.dm" -#include "modular_skyrat\master_files\code\modules\clothing\under\jobs\cargo.dm" -#include "modular_skyrat\master_files\code\modules\clothing\under\jobs\centcom.dm" -#include "modular_skyrat\master_files\code\modules\clothing\under\jobs\command.dm" -#include "modular_skyrat\master_files\code\modules\clothing\under\jobs\engineering.dm" -#include "modular_skyrat\master_files\code\modules\clothing\under\jobs\medical.dm" -#include "modular_skyrat\master_files\code\modules\clothing\under\jobs\rnd.dm" -#include "modular_skyrat\master_files\code\modules\clothing\under\jobs\security.dm" -#include "modular_skyrat\master_files\code\modules\clothing\under\jobs\civilian\civilian.dm" -#include "modular_skyrat\master_files\code\modules\clothing\under\jobs\civilian\suits.dm" -#include "modular_skyrat\master_files\code\modules\events\_event.dm" -#include "modular_skyrat\master_files\code\modules\experisci\experiment.dm" -#include "modular_skyrat\master_files\code\modules\food_and_drinks\recipes\food_mixtures.dm" -#include "modular_skyrat\master_files\code\modules\jobs\off_duty_check.dm" -#include "modular_skyrat\master_files\code\modules\jobs\departments\departments.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\_job.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\_job_attire.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\atmospheric_technician.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\blackmarket.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\botanist.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\captain.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\chaplain.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\chemist.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\chief_engineer.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\chief_medical_officer.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\clown.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\coroner.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\curator.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\cyborg.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\ds2.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\freighter_crew.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\geneticist.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\ghostcafe.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\head_of_personnel.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\head_of_security.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\janitor.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\medical_doctor.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\mime.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\paramedic.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\psychologist.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\research_director.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\roboticist.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\scientist.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\security_officer.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\shaft_miner.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\station_engineer.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\tarkon.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\virologist.dm" -#include "modular_skyrat\master_files\code\modules\jobs\job_types\warden.dm" -#include "modular_skyrat\master_files\code\modules\language\language.dm" -#include "modular_skyrat\master_files\code\modules\language\language_holder.dm" -#include "modular_skyrat\master_files\code\modules\logging\categories\log_category_debug.dm" -#include "modular_skyrat\master_files\code\modules\logging\categories\log_category_game.dm" -#include "modular_skyrat\master_files\code\modules\logging\categories\log_category_uplink.dm" -#include "modular_skyrat\master_files\code\modules\mapfluff\ruins\objects_and_mobs\necropolis_gate.dm" -#include "modular_skyrat\master_files\code\modules\mapfluff\ruins\spaceruin_code\oldstation\oldstation_cytology.dm" -#include "modular_skyrat\master_files\code\modules\mining\equipment\explorer_gear.dm" -#include "modular_skyrat\master_files\code\modules\mob\login.dm" -#include "modular_skyrat\master_files\code\modules\mob\dead\new_player\latejoin_menu.dm" -#include "modular_skyrat\master_files\code\modules\mob\dead\new_player\preferences_setup.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\blood.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\emote_popup.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\examine_tgui.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\living.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\living_defines.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\living_movement.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\carbon\death.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\carbon\human.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\carbon\human_helpers.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\carbon\human\death.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\carbon\human\species.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\carbon\human\species_type\lizardpeople.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\carbon\human\species_type\podpeople.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\carbon\human\species_type\snail.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\human\monkey.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\human\species.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\sillicon\robot.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\simple_animal\simple_animal.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\simple_animal\friendly\bumbles.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\simple_animal\friendly\dogs.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\simple_animal\friendly\poppy.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\simple_animal\friendly\syndicatefox.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\simple_animal\hostile\bubblegum.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\simple_animal\hostile\grabbagmob.dm" -#include "modular_skyrat\master_files\code\modules\mob\living\simple_animal\hostile\zombie.dm" -#include "modular_skyrat\master_files\code\modules\mob_spawn\mob_spawn.dm" -#include "modular_skyrat\master_files\code\modules\mod\mod_clothes.dm" -#include "modular_skyrat\master_files\code\modules\mod\mod_types.dm" -#include "modular_skyrat\master_files\code\modules\mod\modules\_module.dm" -#include "modular_skyrat\master_files\code\modules\mod\modules\modules_antag.dm" -#include "modular_skyrat\master_files\code\modules\modular_computers\computers\item\laptop_presets.dm" -#include "modular_skyrat\master_files\code\modules\pai\card.dm" -#include "modular_skyrat\master_files\code\modules\paperwork\employment_contract.dm" -#include "modular_skyrat\master_files\code\modules\paperwork\stamps.dm" -#include "modular_skyrat\master_files\code\modules\power\cable.dm" -#include "modular_skyrat\master_files\code\modules\power\powernet.dm" -#include "modular_skyrat\master_files\code\modules\power\lighting\light_mapping_helpers.dm" -#include "modular_skyrat\master_files\code\modules\power\singularity\containment_field.dm" -#include "modular_skyrat\master_files\code\modules\projectiles\boxes_magazines\external\shotgun.dm" -#include "modular_skyrat\master_files\code\modules\projectiles\boxes_magazines\external\smg.dm" -#include "modular_skyrat\master_files\code\modules\projectiles\guns\ballistic.dm" -#include "modular_skyrat\master_files\code\modules\projectiles\guns\energy.dm" -#include "modular_skyrat\master_files\code\modules\projectiles\guns\ballistic\revolver.dm" -#include "modular_skyrat\master_files\code\modules\projectiles\guns\ballistic\bows\_bow.dm" -#include "modular_skyrat\master_files\code\modules\projectiles\guns\ballistic\bows\bow_quivers.dm" -#include "modular_skyrat\master_files\code\modules\projectiles\guns\ballistic\bows\bow_types.dm" -#include "modular_skyrat\master_files\code\modules\reagents\bottle.dm" -#include "modular_skyrat\master_files\code\modules\reagents\reagent_containers.dm" -#include "modular_skyrat\master_files\code\modules\reagents\chemistry\colors.dm" -#include "modular_skyrat\master_files\code\modules\reagents\chemistry\holder.dm" -#include "modular_skyrat\master_files\code\modules\reagents\chemistry\reagents.dm" -#include "modular_skyrat\master_files\code\modules\reagents\medicine_reagents\medicine_reagents.dm" -#include "modular_skyrat\master_files\code\modules\reagents\withdrawal\generic_addictions.dm" -#include "modular_skyrat\master_files\code\modules\religion\religious_sects.dm" -#include "modular_skyrat\master_files\code\modules\research\designs\biogenerator_designs.dm" -#include "modular_skyrat\master_files\code\modules\research\designs\medical_designs.dm" -#include "modular_skyrat\master_files\code\modules\research\designs\misc_designs.dm" -#include "modular_skyrat\master_files\code\modules\research\designs\tool_designs.dm" -#include "modular_skyrat\master_files\code\modules\research\machinery\departmental_circuit_imprinter.dm" -#include "modular_skyrat\master_files\code\modules\research\techweb\all_nodes.dm" -#include "modular_skyrat\master_files\code\modules\shuttle\shuttle.dm" -#include "modular_skyrat\master_files\code\modules\shuttle\shuttle_events\meteors.dm" -#include "modular_skyrat\master_files\code\modules\surgery\surgery.dm" -#include "modular_skyrat\master_files\code\modules\surgery\bodyparts\_bodyparts.dm" -#include "modular_skyrat\master_files\code\modules\surgery\organs\tongue.dm" -#include "modular_skyrat\master_files\code\modules\surgery\organs\internal\appendix\_appendix.dm" -#include "modular_skyrat\master_files\code\modules\vehicles\sealed.dm" -#include "modular_skyrat\master_files\code\modules\vehicles\snowmobile.dm" -#include "modular_skyrat\modules\additional_circuit\code\_designs.dm" -#include "modular_skyrat\modules\additional_circuit\code\cell_reader.dm" -#include "modular_skyrat\modules\additional_circuit\code\interact_item.dm" -#include "modular_skyrat\modules\additional_circuit\code\mining_circuit.dm" -#include "modular_skyrat\modules\additional_circuit\code\target_scanner.dm" -#include "modular_skyrat\modules\admin\code\aooc.dm" -#include "modular_skyrat\modules\admin\code\fix_chat.dm" -#include "modular_skyrat\modules\admin\code\loud_say.dm" -#include "modular_skyrat\modules\admin\code\player_ranks.dm" -#include "modular_skyrat\modules\admin\code\sooc.dm" -#include "modular_skyrat\modules\admin\code\smites\pie.dm" -#include "modular_skyrat\modules\advanced_engineering\code\adv_engineering.dm" -#include "modular_skyrat\modules\advanced_shuttles\code\closet.dm" -#include "modular_skyrat\modules\advanced_shuttles\code\computer.dm" -#include "modular_skyrat\modules\advanced_shuttles\code\decals.dm" -#include "modular_skyrat\modules\advanced_shuttles\code\shuttles.dm" -#include "modular_skyrat\modules\advanced_shuttles\code\turfs.dm" -#include "modular_skyrat\modules\aesthetics\abductor\abductor.dm" -#include "modular_skyrat\modules\aesthetics\airalarm\code\airalarm.dm" -#include "modular_skyrat\modules\aesthetics\airlock\code\airlock.dm" -#include "modular_skyrat\modules\aesthetics\airlock_machines\airlock_machines.dm" -#include "modular_skyrat\modules\aesthetics\apc\code\apc.dm" -#include "modular_skyrat\modules\aesthetics\blast_door\code\blast_door.dm" -#include "modular_skyrat\modules\aesthetics\bureaucracy\bureaucracy.dm" -#include "modular_skyrat\modules\aesthetics\camera\code\camera.dm" -#include "modular_skyrat\modules\aesthetics\cells\cell.dm" -#include "modular_skyrat\modules\aesthetics\chemical_tanks\chemical_tanks.dm" -#include "modular_skyrat\modules\aesthetics\clothing\clothing.dm" -#include "modular_skyrat\modules\aesthetics\computer\code\computer.dm" -#include "modular_skyrat\modules\aesthetics\crates\code\crates.dm" -#include "modular_skyrat\modules\aesthetics\device\device.dm" -#include "modular_skyrat\modules\aesthetics\directwindow\code\window.dm" -#include "modular_skyrat\modules\aesthetics\disposals\code\disposals.dm" -#include "modular_skyrat\modules\aesthetics\emitter\code\emitter.dm" -#include "modular_skyrat\modules\aesthetics\extinguisher\code\extinguisher.dm" -#include "modular_skyrat\modules\aesthetics\firealarm\code\firealarm.dm" -#include "modular_skyrat\modules\aesthetics\firedoor\code\firedoor.dm" -#include "modular_skyrat\modules\aesthetics\flag\code\signs_flags.dm" -#include "modular_skyrat\modules\aesthetics\floors\code\floors.dm" -#include "modular_skyrat\modules\aesthetics\furniture\bed.dm" -#include "modular_skyrat\modules\aesthetics\guns\code\guns.dm" -#include "modular_skyrat\modules\aesthetics\guns\code\magazine.dm" -#include "modular_skyrat\modules\aesthetics\heater\code\spaceheater.dm" -#include "modular_skyrat\modules\aesthetics\heavy_lathe\heavy_lathe.dm" -#include "modular_skyrat\modules\aesthetics\implanter\implanter.dm" -#include "modular_skyrat\modules\aesthetics\intercom\code\intercom.dm" -#include "modular_skyrat\modules\aesthetics\janitor\janitor.dm" -#include "modular_skyrat\modules\aesthetics\keyed_doors\code\keyed_door.dm" -#include "modular_skyrat\modules\aesthetics\kitchen\kitchen.dm" -#include "modular_skyrat\modules\aesthetics\lights\code\lighting.dm" -#include "modular_skyrat\modules\aesthetics\lightswitch\code\lightswitch.dm" -#include "modular_skyrat\modules\aesthetics\morgue\code\morgue.dm" -#include "modular_skyrat\modules\aesthetics\plasticflaps\code\plasticflaps.dm" -#include "modular_skyrat\modules\aesthetics\posters\posters.dm" -#include "modular_skyrat\modules\aesthetics\rack\code\rack.dm" -#include "modular_skyrat\modules\aesthetics\shieldgen\code\shieldgen.dm" -#include "modular_skyrat\modules\aesthetics\stationobjs\stationobjs.dm" -#include "modular_skyrat\modules\aesthetics\status_display\code\status_display.dm" -#include "modular_skyrat\modules\aesthetics\storage\storage.dm" -#include "modular_skyrat\modules\aesthetics\telescience\telescience.dm" -#include "modular_skyrat\modules\aesthetics\tools\code\tools.dm" -#include "modular_skyrat\modules\aesthetics\vending\access_vending.dm" -#include "modular_skyrat\modules\aesthetics\walls\code\walls.dm" -#include "modular_skyrat\modules\aesthetics\washing_machine\code\washing_machine.dm" -#include "modular_skyrat\modules\aesthetics\windows\code\windows.dm" -#include "modular_skyrat\modules\airlock_override\code\airlock_override.dm" -#include "modular_skyrat\modules\akula\code\wetsuit.dm" -#include "modular_skyrat\modules\alerts\code\alert_sound_to_playing.dm" -#include "modular_skyrat\modules\alerts\code\config.dm" -#include "modular_skyrat\modules\alerts\code\default_announcer.dm" -#include "modular_skyrat\modules\alerts\code\security_level_datums.dm" -#include "modular_skyrat\modules\alerts\code\security_level_procs.dm" -#include "modular_skyrat\modules\alt_vox\code\voc_sounds_mil.dm" -#include "modular_skyrat\modules\alt_vox\code\vox_procs.dm" -#include "modular_skyrat\modules\alt_vox\code\vox_sounds_bms.dm" -#include "modular_skyrat\modules\alt_vox\code\vox_sounds_hl1.dm" -#include "modular_skyrat\modules\alternative_job_titles\code\alt_job_titles.dm" -#include "modular_skyrat\modules\alternative_job_titles\code\job.dm" -#include "modular_skyrat\modules\ammo_workbench\code\ammo_workbench.dm" -#include "modular_skyrat\modules\ammo_workbench\code\design_disks.dm" -#include "modular_skyrat\modules\apc_arcing\apc.dm" -#include "modular_skyrat\modules\armaments\code\armament_component.dm" -#include "modular_skyrat\modules\armaments\code\armament_entries.dm" -#include "modular_skyrat\modules\armaments\code\armament_station.dm" -#include "modular_skyrat\modules\ashwalkers\code\buildings\antfarm.dm" -#include "modular_skyrat\modules\ashwalkers\code\buildings\ash_clothing_vendor.dm" -#include "modular_skyrat\modules\ashwalkers\code\buildings\ash_farming.dm" -#include "modular_skyrat\modules\ashwalkers\code\buildings\ash_tendril.dm" -#include "modular_skyrat\modules\ashwalkers\code\buildings\fuelwell.dm" -#include "modular_skyrat\modules\ashwalkers\code\buildings\railroad.dm" -#include "modular_skyrat\modules\ashwalkers\code\buildings\tendril_cursing.dm" -#include "modular_skyrat\modules\ashwalkers\code\buildings\wormfarm.dm" -#include "modular_skyrat\modules\ashwalkers\code\clothing\ash_armour.dm" -#include "modular_skyrat\modules\ashwalkers\code\clothing\hands.dm" -#include "modular_skyrat\modules\ashwalkers\code\clothing\head.dm" -#include "modular_skyrat\modules\ashwalkers\code\clothing\misc.dm" -#include "modular_skyrat\modules\ashwalkers\code\clothing\neck.dm" -#include "modular_skyrat\modules\ashwalkers\code\clothing\shoes.dm" -#include "modular_skyrat\modules\ashwalkers\code\clothing\under.dm" -#include "modular_skyrat\modules\ashwalkers\code\effects\ash_ritual.dm" -#include "modular_skyrat\modules\ashwalkers\code\effects\ash_rituals.dm" -#include "modular_skyrat\modules\ashwalkers\code\effects\ash_rune.dm" -#include "modular_skyrat\modules\ashwalkers\code\items\ash_centrifuge.dm" -#include "modular_skyrat\modules\ashwalkers\code\items\ash_seedmesh.dm" -#include "modular_skyrat\modules\ashwalkers\code\items\ash_surgery.dm" -#include "modular_skyrat\modules\ashwalkers\code\items\ash_tool.dm" -#include "modular_skyrat\modules\ashwalkers\code\items\ash_weapon.dm" -#include "modular_skyrat\modules\ashwalkers\code\items\ashwalker_shaman.dm" -#include "modular_skyrat\modules\ashwalkers\code\species\Ashwalkers.dm" -#include "modular_skyrat\modules\ashwalkers\code\species\damage_datum.dm" -#include "modular_skyrat\modules\ashwalkers\code\turfs\icemoon_tiles.dm" -#include "modular_skyrat\modules\assault_operatives\code\areas.dm" -#include "modular_skyrat\modules\assault_operatives\code\assault_operatives.dm" -#include "modular_skyrat\modules\assault_operatives\code\assault_operatives_outfits.dm" -#include "modular_skyrat\modules\assault_operatives\code\base_alarm.dm" -#include "modular_skyrat\modules\assault_operatives\code\dynamic_rulsesets_roundstart.dm" -#include "modular_skyrat\modules\assault_operatives\code\goldeneye.dm" -#include "modular_skyrat\modules\assault_operatives\code\interrogator.dm" -#include "modular_skyrat\modules\assault_operatives\code\keycard_doors.dm" -#include "modular_skyrat\modules\assault_operatives\code\shuttle.dm" -#include "modular_skyrat\modules\assault_operatives\code\sunbeam.dm" -#include "modular_skyrat\modules\assault_operatives\code\turrets.dm" -#include "modular_skyrat\modules\assault_operatives\code\vending_machine.dm" -#include "modular_skyrat\modules\assault_operatives\code\armaments\_armament_primary.dm" -#include "modular_skyrat\modules\assault_operatives\code\armaments\_armament_secondary.dm" -#include "modular_skyrat\modules\assault_operatives\code\armaments\armament_explosives.dm" -#include "modular_skyrat\modules\assault_operatives\code\armaments\armament_implants.dm" -#include "modular_skyrat\modules\assault_operatives\code\armaments\armament_medical.dm" -#include "modular_skyrat\modules\assault_operatives\code\armaments\armament_modules.dm" -#include "modular_skyrat\modules\assault_operatives\code\armaments\armament_utility.dm" -#include "modular_skyrat\modules\assault_operatives\code\armaments\assaultops_armament_station.dm" -#include "modular_skyrat\modules\assault_operatives\code\equipment_items\misc_items.dm" -#include "modular_skyrat\modules\assault_operatives\code\equipment_items\stealth_mod.dm" -#include "modular_skyrat\modules\automapper\code\area_spawn_entries.dm" -#include "modular_skyrat\modules\automapper\code\area_spawn_subsystem.dm" -#include "modular_skyrat\modules\automapper\code\automap_template.dm" -#include "modular_skyrat\modules\automapper\code\automapper_subsystem.dm" -#include "modular_skyrat\modules\autotransfer\code\autotransfer.dm" -#include "modular_skyrat\modules\autotransfer\code\autotransfer_config.dm" -#include "modular_skyrat\modules\autotransfer\code\shuttle.dm" -#include "modular_skyrat\modules\autotransfer\code\transfer_vote.dm" -#include "modular_skyrat\modules\awaymissions_skyrat\code\gateway_key.dm" -#include "modular_skyrat\modules\awaymissions_skyrat\mothership_astrum\abductor_ai.dm" -#include "modular_skyrat\modules\awaymissions_skyrat\mothership_astrum\area.dm" -#include "modular_skyrat\modules\awaymissions_skyrat\mothership_astrum\fluff.dm" -#include "modular_skyrat\modules\awaymissions_skyrat\mothership_astrum\gear.dm" -#include "modular_skyrat\modules\awaymissions_skyrat\mothership_astrum\mob.dm" -#include "modular_skyrat\modules\awaymissions_skyrat\mothership_astrum\mob_spawn.dm" -#include "modular_skyrat\modules\awaymissions_skyrat\mothership_astrum\spawners.dm" -#include "modular_skyrat\modules\banning\code\skyrat_bans.dm" -#include "modular_skyrat\modules\barricades\code\barricade.dm" -#include "modular_skyrat\modules\barsigns\code\barsigns.dm" -#include "modular_skyrat\modules\basic_mobs\code\bananaspider.dm" -#include "modular_skyrat\modules\basic_mobs\code\chinchilla.dm" -#include "modular_skyrat\modules\basic_mobs\code\kiwi.dm" -#include "modular_skyrat\modules\better_vox\code\vox_bodycolor.dm" -#include "modular_skyrat\modules\better_vox\code\vox_bodyparts.dm" -#include "modular_skyrat\modules\better_vox\code\vox_clothing.dm" -#include "modular_skyrat\modules\better_vox\code\vox_species.dm" -#include "modular_skyrat\modules\better_vox\code\vox_sprite_accessories.dm" -#include "modular_skyrat\modules\black_mesa\code\armor.dm" -#include "modular_skyrat\modules\black_mesa\code\bump_teleporter.dm" -#include "modular_skyrat\modules\black_mesa\code\drops.dm" -#include "modular_skyrat\modules\black_mesa\code\fluff.dm" -#include "modular_skyrat\modules\black_mesa\code\follow_component.dm" -#include "modular_skyrat\modules\black_mesa\code\gateway.dm" -#include "modular_skyrat\modules\black_mesa\code\ghost_spawners.dm" -#include "modular_skyrat\modules\black_mesa\code\guns.dm" -#include "modular_skyrat\modules\black_mesa\code\healing_puddle.dm" -#include "modular_skyrat\modules\black_mesa\code\lambda_teleporter.dm" -#include "modular_skyrat\modules\black_mesa\code\m16_variations.dm" -#include "modular_skyrat\modules\black_mesa\code\mapping_fluff.dm" -#include "modular_skyrat\modules\black_mesa\code\objects.dm" -#include "modular_skyrat\modules\black_mesa\code\projectiles.dm" -#include "modular_skyrat\modules\black_mesa\code\rationpacks.dm" -#include "modular_skyrat\modules\black_mesa\code\shield_pylon.dm" -#include "modular_skyrat\modules\black_mesa\code\shockplant.dm" -#include "modular_skyrat\modules\black_mesa\code\spawners.dm" -#include "modular_skyrat\modules\black_mesa\code\turfs.dm" -#include "modular_skyrat\modules\black_mesa\code\turrets.dm" -#include "modular_skyrat\modules\black_mesa\code\uber_teleporter.dm" -#include "modular_skyrat\modules\black_mesa\code\weapons.dm" -#include "modular_skyrat\modules\black_mesa\code\xen_crystal.dm" -#include "modular_skyrat\modules\black_mesa\code\armaments\__armament_bodyarmor.dm" -#include "modular_skyrat\modules\black_mesa\code\armaments\_armament_primary.dm" -#include "modular_skyrat\modules\black_mesa\code\armaments\_armaments_secondary.dm" -#include "modular_skyrat\modules\black_mesa\code\armaments\armament_explosives.dm" -#include "modular_skyrat\modules\black_mesa\code\armaments\armament_medical.dm" -#include "modular_skyrat\modules\black_mesa\code\armaments\armament_melee.dm" -#include "modular_skyrat\modules\black_mesa\code\armaments\armament_miscellaneous.dm" -#include "modular_skyrat\modules\black_mesa\code\armaments\armament_utility.dm" -#include "modular_skyrat\modules\black_mesa\code\armaments\hecu_armament_station.dm" -#include "modular_skyrat\modules\black_mesa\code\mobs\bullsquid.dm" -#include "modular_skyrat\modules\black_mesa\code\mobs\gordon_freeman.dm" -#include "modular_skyrat\modules\black_mesa\code\mobs\headcrab.dm" -#include "modular_skyrat\modules\black_mesa\code\mobs\headcrab_zombie.dm" -#include "modular_skyrat\modules\black_mesa\code\mobs\houndeye.dm" -#include "modular_skyrat\modules\black_mesa\code\mobs\human_mobs.dm" -#include "modular_skyrat\modules\black_mesa\code\mobs\mob_spawners.dm" -#include "modular_skyrat\modules\black_mesa\code\mobs\nihilanth.dm" -#include "modular_skyrat\modules\black_mesa\code\mobs\vortigaunt.dm" -#include "modular_skyrat\modules\blastwave_outfits\code\cargo_packs.dm" -#include "modular_skyrat\modules\blastwave_outfits\code\clothing\blastwave_head.dm" -#include "modular_skyrat\modules\blastwave_outfits\code\clothing\blastwave_mask.dm" -#include "modular_skyrat\modules\blastwave_outfits\code\clothing\blastwave_suit.dm" -#include "modular_skyrat\modules\blastwave_outfits\code\clothing\blastwave_uniform.dm" -#include "modular_skyrat\modules\blueshield\code\blueshield.dm" -#include "modular_skyrat\modules\blueshield\code\closet.dm" -#include "modular_skyrat\modules\blueshield\code\clothing.dm" -#include "modular_skyrat\modules\blueshield\code\encryptionkey.dm" -#include "modular_skyrat\modules\blueshield\code\landmarks.dm" -#include "modular_skyrat\modules\blueshield\code\medkit.dm" -#include "modular_skyrat\modules\blueshield\code\devices\crew.dm" -#include "modular_skyrat\modules\blueshield\code\devices\sensor_device.dm" -#include "modular_skyrat\modules\blueshield\code\modsuit\mod_theme.dm" -#include "modular_skyrat\modules\blueshield\code\modsuit\mod_type.dm" -#include "modular_skyrat\modules\bluespace_miner\code\bluespace_miner.dm" -#include "modular_skyrat\modules\bodyparts\code\_mutant_bodyparts.dm" -#include "modular_skyrat\modules\bodyparts\code\akula_bodyparts.dm" -#include "modular_skyrat\modules\bodyparts\code\aquatic_bodyparts.dm" -#include "modular_skyrat\modules\bodyparts\code\ashwalker_bodyparts.dm" -#include "modular_skyrat\modules\bodyparts\code\ghoul_bodyparts.dm" -#include "modular_skyrat\modules\bodyparts\code\golem_bodyparts.dm" -#include "modular_skyrat\modules\bodyparts\code\human_bodyparts.dm" -#include "modular_skyrat\modules\bodyparts\code\insect_bodyparts.dm" -#include "modular_skyrat\modules\bodyparts\code\lizard_bodyparts.dm" -#include "modular_skyrat\modules\bodyparts\code\luminescent_bodyparts.dm" -#include "modular_skyrat\modules\bodyparts\code\moth_bodyparts.dm" -#include "modular_skyrat\modules\bodyparts\code\mushperson_bodyparts.dm" -#include "modular_skyrat\modules\bodyparts\code\parts.dm" -#include "modular_skyrat\modules\bodyparts\code\podperson_bodyparts.dm" -#include "modular_skyrat\modules\bodyparts\code\roundstartslime_bodyparts.dm" -#include "modular_skyrat\modules\bodyparts\code\skrell_bodyparts.dm" -#include "modular_skyrat\modules\bodyparts\code\slime_bodyparts.dm" -#include "modular_skyrat\modules\bodyparts\code\snail_bodyparts.dm" -#include "modular_skyrat\modules\bodyparts\code\stargazer_bodyparts.dm" -#include "modular_skyrat\modules\bodyparts\code\taur_bodyparts.dm" -#include "modular_skyrat\modules\bodyparts\code\teshari_bodyparts.dm" -#include "modular_skyrat\modules\bodyparts\code\vox_bodyparts.dm" -#include "modular_skyrat\modules\bodyparts\code\xenohybrid_bodyparts.dm" -#include "modular_skyrat\modules\bongs\code\bong.dm" -#include "modular_skyrat\modules\borg_buffs\code\robot.dm" -#include "modular_skyrat\modules\borg_buffs\code\snack_dispensor.dm" -#include "modular_skyrat\modules\borgs\code\inventory.dm" -#include "modular_skyrat\modules\borgs\code\mechafabricator_designs.dm" -#include "modular_skyrat\modules\borgs\code\robot.dm" -#include "modular_skyrat\modules\borgs\code\robot_defines.dm" -#include "modular_skyrat\modules\borgs\code\robot_items.dm" -#include "modular_skyrat\modules\borgs\code\robot_model.dm" -#include "modular_skyrat\modules\borgs\code\robot_upgrade.dm" -#include "modular_skyrat\modules\borgs\code\update_icons.dm" -#include "modular_skyrat\modules\bsa_overhaul\code\admin_verb.dm" -#include "modular_skyrat\modules\bsa_overhaul\code\bsa_cannon.dm" -#include "modular_skyrat\modules\bsa_overhaul\code\bsa_computer.dm" -#include "modular_skyrat\modules\bsa_overhaul\code\station_goal.dm" -#include "modular_skyrat\modules\bsrpd\code\bsrpd.dm" -#include "modular_skyrat\modules\cargo\code\goodies.dm" -#include "modular_skyrat\modules\cargo\code\packs.dm" -#include "modular_skyrat\modules\cargo\code\items\AFAD.dm" -#include "modular_skyrat\modules\cargo\code\items\gbp_punchcard.dm" -#include "modular_skyrat\modules\cargo\code\items\improvedRCD.dm" -#include "modular_skyrat\modules\cargo_teleporter\code\cargo_teleporter.dm" -#include "modular_skyrat\modules\cell_component\code\cell_component.dm" -#include "modular_skyrat\modules\cellguns\code\cellgun_cells.dm" -#include "modular_skyrat\modules\cellguns\code\cellguns.dm" -#include "modular_skyrat\modules\cellguns\code\medigun_cells.dm" -#include "modular_skyrat\modules\cellguns\code\medigun_research.dm" -#include "modular_skyrat\modules\cellguns\code\mediguns.dm" -#include "modular_skyrat\modules\central_command_module\code\computers\command_report_computer.dm" -#include "modular_skyrat\modules\central_command_module\code\computers\ert_control_computer.dm" -#include "modular_skyrat\modules\central_command_module\code\computers\station_goal_computer.dm" -#include "modular_skyrat\modules\central_command_module\code\obj\wall.dm" -#include "modular_skyrat\modules\chadian\code\chadian.dm" -#include "modular_skyrat\modules\chaplain\code\mortis.dm" -#include "modular_skyrat\modules\clock_cult\code\antagonist.dm" -#include "modular_skyrat\modules\clock_cult\code\area.dm" -#include "modular_skyrat\modules\clock_cult\code\globals.dm" -#include "modular_skyrat\modules\clock_cult\code\language.dm" -#include "modular_skyrat\modules\clock_cult\code\outfit.dm" -#include "modular_skyrat\modules\clock_cult\code\outpost_of_cogs.dm" -#include "modular_skyrat\modules\clock_cult\code\portal.dm" -#include "modular_skyrat\modules\clock_cult\code\status_effects.dm" -#include "modular_skyrat\modules\clock_cult\code\temp_visual.dm" -#include "modular_skyrat\modules\clock_cult\code\turf.dm" -#include "modular_skyrat\modules\clock_cult\code\actions\_action.dm" -#include "modular_skyrat\modules\clock_cult\code\actions\recall_slab.dm" -#include "modular_skyrat\modules\clock_cult\code\actions\whirring_convergence.dm" -#include "modular_skyrat\modules\clock_cult\code\components\brass_spreader.dm" -#include "modular_skyrat\modules\clock_cult\code\components\hint_element.dm" -#include "modular_skyrat\modules\clock_cult\code\components\pickup_element.dm" -#include "modular_skyrat\modules\clock_cult\code\components\structure_info_element.dm" -#include "modular_skyrat\modules\clock_cult\code\items\clockwork_slab.dm" -#include "modular_skyrat\modules\clock_cult\code\items\clothing.dm" -#include "modular_skyrat\modules\clock_cult\code\items\integration_cog.dm" -#include "modular_skyrat\modules\clock_cult\code\items\replica_fabricator.dm" -#include "modular_skyrat\modules\clock_cult\code\items\tools.dm" -#include "modular_skyrat\modules\clock_cult\code\items\weaponry.dm" -#include "modular_skyrat\modules\clock_cult\code\mobs\clockwork_marauder.dm" -#include "modular_skyrat\modules\clock_cult\code\research\asset_cache.dm" -#include "modular_skyrat\modules\clock_cult\code\research\clockwork_research.dm" -#include "modular_skyrat\modules\clock_cult\code\scriptures\_scripture.dm" -#include "modular_skyrat\modules\clock_cult\code\scriptures\preservation\clockwork_armaments.dm" -#include "modular_skyrat\modules\clock_cult\code\scriptures\preservation\summon_marauder.dm" -#include "modular_skyrat\modules\clock_cult\code\scriptures\servitude\hateful_manacles.dm" -#include "modular_skyrat\modules\clock_cult\code\scriptures\servitude\integration_cog.dm" -#include "modular_skyrat\modules\clock_cult\code\scriptures\servitude\kindle.dm" -#include "modular_skyrat\modules\clock_cult\code\scriptures\servitude\vitality_sigil.dm" -#include "modular_skyrat\modules\clock_cult\code\scriptures\structures\interdiction_lens.dm" -#include "modular_skyrat\modules\clock_cult\code\scriptures\structures\ocular_warden.dm" -#include "modular_skyrat\modules\clock_cult\code\scriptures\structures\prosperity_prism.dm" -#include "modular_skyrat\modules\clock_cult\code\scriptures\structures\technologists_lectern.dm" -#include "modular_skyrat\modules\clock_cult\code\scriptures\structures\tinkerers_cache.dm" -#include "modular_skyrat\modules\clock_cult\code\scriptures\structures\transmission_sigil.dm" -#include "modular_skyrat\modules\clock_cult\code\structures\_powered.dm" -#include "modular_skyrat\modules\clock_cult\code\structures\_structure.dm" -#include "modular_skyrat\modules\clock_cult\code\structures\airlock.dm" -#include "modular_skyrat\modules\clock_cult\code\structures\gear_base.dm" -#include "modular_skyrat\modules\clock_cult\code\structures\interdiction_lens.dm" -#include "modular_skyrat\modules\clock_cult\code\structures\ocular_warden.dm" -#include "modular_skyrat\modules\clock_cult\code\structures\prosperity_prism.dm" -#include "modular_skyrat\modules\clock_cult\code\structures\technologists_lectern.dm" -#include "modular_skyrat\modules\clock_cult\code\structures\tinkerers_cache.dm" -#include "modular_skyrat\modules\clock_cult\code\structures\sigil\_sigil.dm" -#include "modular_skyrat\modules\clock_cult\code\structures\sigil\sigil_research.dm" -#include "modular_skyrat\modules\clock_cult\code\structures\sigil\sigil_transmission.dm" -#include "modular_skyrat\modules\clock_cult\code\structures\sigil\vitality_sigil.dm" -#include "modular_skyrat\modules\clock_cult\code\structures\traps\trap.dm" -#include "modular_skyrat\modules\clock_cult\code\structures\traps\recievers\flipper.dm" -#include "modular_skyrat\modules\clock_cult\code\structures\traps\recievers\skewer.dm" -#include "modular_skyrat\modules\clock_cult\code\structures\traps\senders\delay.dm" -#include "modular_skyrat\modules\clock_cult\code\structures\traps\senders\lever.dm" -#include "modular_skyrat\modules\clock_cult\code\structures\traps\senders\pressure_sensor.dm" -#include "modular_skyrat\modules\cme\code\_cme_defines.dm" -#include "modular_skyrat\modules\cme\code\cme.dm" -#include "modular_skyrat\modules\colony_fabricator\code\colony_fabricator.dm" -#include "modular_skyrat\modules\colony_fabricator\code\looping_sounds.dm" -#include "modular_skyrat\modules\colony_fabricator\code\repacking_element.dm" -#include "modular_skyrat\modules\colony_fabricator\code\appliances\chem_machines.dm" -#include "modular_skyrat\modules\colony_fabricator\code\appliances\wall_cell_charger.dm" -#include "modular_skyrat\modules\colony_fabricator\code\design_datums\appliances.dm" -#include "modular_skyrat\modules\colony_fabricator\code\design_datums\equipment.dm" -#include "modular_skyrat\modules\colony_fabricator\code\design_datums\flatpack_machines.dm" -#include "modular_skyrat\modules\colony_fabricator\code\design_datums\tools.dm" -#include "modular_skyrat\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\computer_board.dm" -#include "modular_skyrat\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\construction.dm" -#include "modular_skyrat\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\equipment.dm" -#include "modular_skyrat\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\machine_boards.dm" -#include "modular_skyrat\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\stock_parts.dm" -#include "modular_skyrat\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\tools.dm" -#include "modular_skyrat\modules\colony_fabricator\code\machines\arc_furnace.dm" -#include "modular_skyrat\modules\colony_fabricator\code\machines\power_storage_unit.dm" -#include "modular_skyrat\modules\colony_fabricator\code\machines\rtg.dm" -#include "modular_skyrat\modules\colony_fabricator\code\machines\solar_panels.dm" -#include "modular_skyrat\modules\colony_fabricator\code\machines\solid_fuel_generator.dm" -#include "modular_skyrat\modules\colony_fabricator\code\machines\thermomachine.dm" -#include "modular_skyrat\modules\colony_fabricator\code\tools\tools.dm" -#include "modular_skyrat\modules\command_vendor\code\vending.dm" -#include "modular_skyrat\modules\company_imports\code\armament_component.dm" -#include "modular_skyrat\modules\company_imports\code\company_datums.dm" -#include "modular_skyrat\modules\company_imports\code\armament_datums\_armament_basetype.dm" -#include "modular_skyrat\modules\company_imports\code\armament_datums\akh_frontier.dm" -#include "modular_skyrat\modules\company_imports\code\armament_datums\deforest_medical.dm" -#include "modular_skyrat\modules\company_imports\code\armament_datums\jarnsmiour.dm" -#include "modular_skyrat\modules\company_imports\code\armament_datums\kahraman_industries.dm" -#include "modular_skyrat\modules\company_imports\code\armament_datums\microstar_energy.dm" -#include "modular_skyrat\modules\company_imports\code\armament_datums\nakamura_modsuits.dm" -#include "modular_skyrat\modules\company_imports\code\armament_datums\nri_military_surplus.dm" -#include "modular_skyrat\modules\company_imports\code\armament_datums\put_a_donk_on_it.dm" -#include "modular_skyrat\modules\company_imports\code\armament_datums\sol_defense.dm" -#include "modular_skyrat\modules\company_imports\code\armament_datums\vitezstvi_ammo.dm" -#include "modular_skyrat\modules\company_imports\code\datums\cargo_order.dm" -#include "modular_skyrat\modules\company_imports\code\datums\cargo_pack.dm" -#include "modular_skyrat\modules\company_imports\code\datums\hud.dm" -#include "modular_skyrat\modules\company_imports\code\objects\access.dm" -#include "modular_skyrat\modules\company_imports\code\objects\cargo_console_and_case.dm" -#include "modular_skyrat\modules\company_imports\code\objects\firing_pin.dm" -#include "modular_skyrat\modules\company_imports\code\objects\hud_glasses.dm" -#include "modular_skyrat\modules\company_imports\code\objects\keycard_auth.dm" -#include "modular_skyrat\modules\company_imports\code\objects\deforest\filled_organ_boxes.dm" -#include "modular_skyrat\modules\company_imports\code\objects\donk\donkfish_box.dm" -#include "modular_skyrat\modules\company_imports\code\objects\jarnsmiour\special_metals.dm" -#include "modular_skyrat\modules\company_imports\code\objects\microstar\mcr_attachment_kits.dm" -#include "modular_skyrat\modules\company_imports\code\objects\nakamura_modsuits\accretion_incompatibility.dm" -#include "modular_skyrat\modules\company_imports\code\objects\nakamura_modsuits\plate_compression_tech.dm" -#include "modular_skyrat\modules\company_imports\code\objects\nri_surplus\ak25.dm" -#include "modular_skyrat\modules\company_imports\code\objects\nri_surplus\larp_clothing.dm" -#include "modular_skyrat\modules\company_imports\code\objects\vitezstvi\ammo_boxes.dm" -#include "modular_skyrat\modules\connecting_computer\code\_computer.dm" -#include "modular_skyrat\modules\connecting_computer\code\connectable_component.dm" -#include "modular_skyrat\modules\connecting_computer\code\non_connecting_computers.dm" -#include "modular_skyrat\modules\container_emotes\code\container_emotes.dm" -#include "modular_skyrat\modules\contractor\code\datums\contract.dm" -#include "modular_skyrat\modules\contractor\code\datums\contractor_datum.dm" -#include "modular_skyrat\modules\contractor\code\datums\contractor_hub.dm" -#include "modular_skyrat\modules\contractor\code\datums\contractor_items.dm" -#include "modular_skyrat\modules\contractor\code\datums\contractor_support.dm" -#include "modular_skyrat\modules\contractor\code\datums\contractor_tablet.dm" -#include "modular_skyrat\modules\contractor\code\datums\mind_datum.dm" -#include "modular_skyrat\modules\contractor\code\datums\objective.dm" -#include "modular_skyrat\modules\contractor\code\datums\midround\antag_datum.dm" -#include "modular_skyrat\modules\contractor\code\datums\midround\event.dm" -#include "modular_skyrat\modules\contractor\code\datums\midround\objective.dm" -#include "modular_skyrat\modules\contractor\code\datums\midround\outfit.dm" -#include "modular_skyrat\modules\contractor\code\datums\midround\ruleset.dm" -#include "modular_skyrat\modules\contractor\code\datums\midround\trim.dm" -#include "modular_skyrat\modules\contractor\code\items\baton.dm" -#include "modular_skyrat\modules\contractor\code\items\boxes.dm" -#include "modular_skyrat\modules\contractor\code\items\hook.dm" -#include "modular_skyrat\modules\contractor\code\items\misc.dm" -#include "modular_skyrat\modules\contractor\code\items\tablet.dm" -#include "modular_skyrat\modules\contractor\code\items\modsuit\modsuit.dm" -#include "modular_skyrat\modules\contractor\code\items\modsuit\modules.dm" -#include "modular_skyrat\modules\contractor\code\items\modsuit\theme.dm" -#include "modular_skyrat\modules\contractor\code\objects\supplypod.dm" -#include "modular_skyrat\modules\conveyor_sorter\code\conveyor_sorter.dm" -#include "modular_skyrat\modules\cortical_borer\code\cortical_borer.dm" -#include "modular_skyrat\modules\cortical_borer\code\cortical_borer_abilities.dm" -#include "modular_skyrat\modules\cortical_borer\code\cortical_borer_antag.dm" -#include "modular_skyrat\modules\cortical_borer\code\cortical_borer_chems.dm" -#include "modular_skyrat\modules\cortical_borer\code\cortical_borer_egg.dm" -#include "modular_skyrat\modules\cortical_borer\code\cortical_borer_items.dm" -#include "modular_skyrat\modules\cortical_borer\code\focus_datum.dm" -#include "modular_skyrat\modules\cortical_borer\code\status_effects.dm" -#include "modular_skyrat\modules\cortical_borer\code\evolution\borer_evolution.dm" -#include "modular_skyrat\modules\cortical_borer\code\evolution\evolution_datum.dm" -#include "modular_skyrat\modules\cortical_borer\code\evolution\evolution_diveworm.dm" -#include "modular_skyrat\modules\cortical_borer\code\evolution\evolution_general.dm" -#include "modular_skyrat\modules\cortical_borer\code\evolution\evolution_hivelord.dm" -#include "modular_skyrat\modules\cortical_borer\code\evolution\evolution_symbiote.dm" -#include "modular_skyrat\modules\cortical_borer\code\evolution\evolution_things\empowered_egg.dm" -#include "modular_skyrat\modules\crafting\crafting_skyrat.dm" -#include "modular_skyrat\modules\cryosleep\code\admin.dm" -#include "modular_skyrat\modules\cryosleep\code\ai.dm" -#include "modular_skyrat\modules\cryosleep\code\config.dm" -#include "modular_skyrat\modules\cryosleep\code\cryo_console_return.dm" -#include "modular_skyrat\modules\cryosleep\code\cryopod.dm" -#include "modular_skyrat\modules\cryosleep\code\job.dm" -#include "modular_skyrat\modules\cryosleep\code\mind.dm" -#include "modular_skyrat\modules\cryosleep\code\mood.dm" -#include "modular_skyrat\modules\curatorbundle\Mushy.dm" -#include "modular_skyrat\modules\curatorbundle\Ronin.dm" -#include "modular_skyrat\modules\customization\__DEFINES\DNA.dm" -#include "modular_skyrat\modules\customization\__DEFINES\lists.dm" -#include "modular_skyrat\modules\customization\__DEFINES\loadout.dm" -#include "modular_skyrat\modules\customization\__HELPERS\DNA.dm" -#include "modular_skyrat\modules\customization\__HELPERS\global_lists.dm" -#include "modular_skyrat\modules\customization\__HELPERS\mobs.dm" -#include "modular_skyrat\modules\customization\__HELPERS\names.dm" -#include "modular_skyrat\modules\customization\__HELPERS\text.dm" -#include "modular_skyrat\modules\customization\_globalvars\lists.dm" -#include "modular_skyrat\modules\customization\_globalvars\names.dm" -#include "modular_skyrat\modules\customization\datums\dna.dm" -#include "modular_skyrat\modules\customization\datums\components\crafting\clothing.dm" -#include "modular_skyrat\modules\customization\datums\components\crafting\hemophage_recipes.dm" -#include "modular_skyrat\modules\customization\datums\components\crafting\recipes.dm" -#include "modular_skyrat\modules\customization\datums\components\crafting\teshari_recipes.dm" -#include "modular_skyrat\modules\customization\datums\keybinding\communication.dm" -#include "modular_skyrat\modules\customization\game\objects\items\balls.dm" -#include "modular_skyrat\modules\customization\game\objects\items\conversion_kits.dm" -#include "modular_skyrat\modules\customization\game\objects\items\instruments.dm" -#include "modular_skyrat\modules\customization\game\objects\items\plushes.dm" -#include "modular_skyrat\modules\customization\game\objects\items\devices\crutch.dm" -#include "modular_skyrat\modules\customization\game\objects\items\devices\ttsdevice.dm" -#include "modular_skyrat\modules\customization\game\objects\items\storage\belt.dm" -#include "modular_skyrat\modules\customization\game\objects\items\storage\rings.dm" -#include "modular_skyrat\modules\customization\game\objects\items\tanks\n2_tanks.dm" -#include "modular_skyrat\modules\customization\modules\client\preferences.dm" -#include "modular_skyrat\modules\customization\modules\client\augment\_augment.dm" -#include "modular_skyrat\modules\customization\modules\client\augment\implants.dm" -#include "modular_skyrat\modules\customization\modules\client\augment\limbs.dm" -#include "modular_skyrat\modules\customization\modules\client\augment\organs.dm" -#include "modular_skyrat\modules\customization\modules\clothing\accessories.dm" -#include "modular_skyrat\modules\customization\modules\clothing\toggle_base.dm" -#include "modular_skyrat\modules\customization\modules\clothing\ears\ears.dm" -#include "modular_skyrat\modules\customization\modules\clothing\glasses\glasses.dm" -#include "modular_skyrat\modules\customization\modules\clothing\glasses\hud.dm" -#include "modular_skyrat\modules\customization\modules\clothing\hands\hands.dm" -#include "modular_skyrat\modules\customization\modules\clothing\hands\rings.dm" -#include "modular_skyrat\modules\customization\modules\clothing\head\costume.dm" -#include "modular_skyrat\modules\customization\modules\clothing\head\head.dm" -#include "modular_skyrat\modules\customization\modules\clothing\head\jobs.dm" -#include "modular_skyrat\modules\customization\modules\clothing\head\trek.dm" -#include "modular_skyrat\modules\customization\modules\clothing\masks\breath.dm" -#include "modular_skyrat\modules\customization\modules\clothing\masks\gas_filter.dm" -#include "modular_skyrat\modules\customization\modules\clothing\masks\gasmask.dm" -#include "modular_skyrat\modules\customization\modules\clothing\masks\paper.dm" -#include "modular_skyrat\modules\customization\modules\clothing\neck\_neck.dm" -#include "modular_skyrat\modules\customization\modules\clothing\neck\cloaks.dm" -#include "modular_skyrat\modules\customization\modules\clothing\neck\collars.dm" -#include "modular_skyrat\modules\customization\modules\clothing\outfits\akula.dm" -#include "modular_skyrat\modules\customization\modules\clothing\outfits\vox.dm" -#include "modular_skyrat\modules\customization\modules\clothing\shoes\shoes.dm" -#include "modular_skyrat\modules\customization\modules\clothing\storage\backpacks.dm" -#include "modular_skyrat\modules\customization\modules\clothing\storage\belts.dm" -#include "modular_skyrat\modules\customization\modules\clothing\suits\armor.dm" -#include "modular_skyrat\modules\customization\modules\clothing\suits\cloaks.dm" -#include "modular_skyrat\modules\customization\modules\clothing\suits\coats.dm" -#include "modular_skyrat\modules\customization\modules\clothing\suits\hoodies.dm" -#include "modular_skyrat\modules\customization\modules\clothing\suits\misc.dm" -#include "modular_skyrat\modules\customization\modules\clothing\suits\trek.dm" -#include "modular_skyrat\modules\customization\modules\clothing\under\accessories.dm" -#include "modular_skyrat\modules\customization\modules\clothing\under\costumes.dm" -#include "modular_skyrat\modules\customization\modules\clothing\under\misc.dm" -#include "modular_skyrat\modules\customization\modules\clothing\under\security.dm" -#include "modular_skyrat\modules\customization\modules\clothing\under\suits.dm" -#include "modular_skyrat\modules\customization\modules\clothing\under\sweaters.dm" -#include "modular_skyrat\modules\customization\modules\clothing\under\tauruniformscolor.dm" -#include "modular_skyrat\modules\customization\modules\clothing\under\utility_port\other_port.dm" -#include "modular_skyrat\modules\customization\modules\clothing\under\utility_port\suits_port.dm" -#include "modular_skyrat\modules\customization\modules\clothing\~donator\donator_clothing.dm" -#include "modular_skyrat\modules\customization\modules\clothing\~donator\donator_items.dm" -#include "modular_skyrat\modules\customization\modules\food_and_drinks\food\hemophage_food.dm" -#include "modular_skyrat\modules\customization\modules\food_and_drinks\food\scottish.dm" -#include "modular_skyrat\modules\customization\modules\food_and_drinks\food\SRseafood.dm" -#include "modular_skyrat\modules\customization\modules\food_and_drinks\food\teshari_food.dm" -#include "modular_skyrat\modules\customization\modules\food_and_drinks\recipes\drinks_recipes.dm" -#include "modular_skyrat\modules\customization\modules\hydroponics\grown\bananaspider.dm" -#include "modular_skyrat\modules\customization\modules\hydroponics\grown\kiri.dm" -#include "modular_skyrat\modules\customization\modules\hydroponics\grown\muli.dm" -#include "modular_skyrat\modules\customization\modules\hydroponics\grown\nakati.dm" -#include "modular_skyrat\modules\customization\modules\hydroponics\grown\piru.dm" -#include "modular_skyrat\modules\customization\modules\hydroponics\grown\tea_coffee.dm" -#include "modular_skyrat\modules\customization\modules\jobs\_job.dm" -#include "modular_skyrat\modules\customization\modules\language\_foreigner.dm" -#include "modular_skyrat\modules\customization\modules\language\_language_holder.dm" -#include "modular_skyrat\modules\customization\modules\language\ashtongue.dm" -#include "modular_skyrat\modules\customization\modules\language\beachbum.dm" -#include "modular_skyrat\modules\customization\modules\language\buzzwords.dm" -#include "modular_skyrat\modules\customization\modules\language\calcic.dm" -#include "modular_skyrat\modules\customization\modules\language\canilunzt.dm" -#include "modular_skyrat\modules\customization\modules\language\chitinclick.dm" -#include "modular_skyrat\modules\customization\modules\language\common.dm" -#include "modular_skyrat\modules\customization\modules\language\gutter.dm" -#include "modular_skyrat\modules\customization\modules\language\monkey.dm" -#include "modular_skyrat\modules\customization\modules\language\mushroom.dm" -#include "modular_skyrat\modules\customization\modules\language\nekomimetic.dm" -#include "modular_skyrat\modules\customization\modules\language\panslavic.dm" -#include "modular_skyrat\modules\customization\modules\language\piratespeak.dm" -#include "modular_skyrat\modules\customization\modules\language\shadowtongue.dm" -#include "modular_skyrat\modules\customization\modules\language\siiktajr.dm" -#include "modular_skyrat\modules\customization\modules\language\skrell.dm" -#include "modular_skyrat\modules\customization\modules\language\spacer.dm" -#include "modular_skyrat\modules\customization\modules\language\te_velu_akko.dm" -#include "modular_skyrat\modules\customization\modules\language\terrum.dm" -#include "modular_skyrat\modules\customization\modules\language\vox.dm" -#include "modular_skyrat\modules\customization\modules\language\xerxian.dm" -#include "modular_skyrat\modules\customization\modules\language\yangyu.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\preferences_setup.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\sprite_accessories.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\body_markings\body_marking_sets.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\body_markings\body_markings.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\body_markings\body_markings_akula.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\body_markings\body_markings_moth.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\body_markings\body_markings_synthliz.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\body_markings\body_markings_vox.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\sprite_accessories\ears.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\sprite_accessories\fluff.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\sprite_accessories\frills.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\sprite_accessories\genitals.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\sprite_accessories\hair.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\sprite_accessories\head_accessory.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\sprite_accessories\horns.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\sprite_accessories\ipc.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\sprite_accessories\moth_antennae.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\sprite_accessories\neck_accessory.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\sprite_accessories\skrell_hair.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\sprite_accessories\snout.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\sprite_accessories\spines.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\sprite_accessories\synthliz.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\sprite_accessories\tails.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\sprite_accessories\taur_types.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\sprite_accessories\vox.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\sprite_accessories\wings.dm" -#include "modular_skyrat\modules\customization\modules\mob\dead\new_player\sprite_accessories\xeno.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\living.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\living_defines.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\living_verbs.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\damage_procs.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\custom_bodytype.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\human.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\human_defines.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\status_procs.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\worn_overlays.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\MOD_sprite_accessories\mod_accessory_handler.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\MOD_sprite_accessories\mod_actions.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\MOD_sprite_accessories\mod_themes.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\akula.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\aquatic.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\dwarf.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\ghoul.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\humanoid.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\insect.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\lizard.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\mammal.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\monkey.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\moth.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\mushpeople.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\placeholder_helper.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\podweak.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\roundstartslime.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\skrell.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\tajaran.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\unathi.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\vox.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\vulpkanin.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\xeno.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\_hemophage_defines.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\_organ_corruption.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\atrophied_lungs.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\corrupted_liver.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\corrupted_stomach.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\corrupted_tongue.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_actions.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_organs.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_species.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_status_effects.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_tumor.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\tumor_corruption.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\silicon\examine.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\silicon\topic.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\simple_mob\examine.dm" -#include "modular_skyrat\modules\customization\modules\reagents\chemistry\reagents.dm" -#include "modular_skyrat\modules\customization\modules\reagents\chemistry\reagents\alcohol_reagents.dm" -#include "modular_skyrat\modules\customization\modules\reagents\chemistry\reagents\drink_reagents.dm" -#include "modular_skyrat\modules\customization\modules\reagents\chemistry\reagents\drinks.dm" -#include "modular_skyrat\modules\customization\modules\reagents\chemistry\reagents\food_reagents.dm" -#include "modular_skyrat\modules\customization\modules\reagents\chemistry\reagents\other_reagents.dm" -#include "modular_skyrat\modules\customization\modules\reagents\chemistry\reagents\pyrotechnic_reagents.dm" -#include "modular_skyrat\modules\customization\modules\reagents\chemistry\reagents\toxin_reagents.dm" -#include "modular_skyrat\modules\customization\modules\reagents\chemistry\recipes\medicine.dm" -#include "modular_skyrat\modules\customization\modules\surgery\bodyparts\_bodyparts.dm" -#include "modular_skyrat\modules\customization\modules\surgery\bodyparts\parts.dm" -#include "modular_skyrat\modules\customization\modules\surgery\bodyparts\robot_bodyparts.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\cap.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\ears.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\eyes.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\fluff.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\frills.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\genitals.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\head_accessory.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\horns.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\moth_antennae.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\moth_markings.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\neck_accessory.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\nif.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\organ.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\pod.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\skrell_hair.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\spines.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\synth_antenna.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\synth_screen.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\tails.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\taur_body.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\vox.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\wings.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\xenodorsal.dm" -#include "modular_skyrat\modules\customization\modules\surgery\organs\xenohead.dm" -#include "modular_skyrat\modules\decay_subsystem\code\decay_turf_handling.dm" -#include "modular_skyrat\modules\decay_subsystem\code\decaySS.dm" -#include "modular_skyrat\modules\decay_subsystem\code\nests.dm" -#include "modular_skyrat\modules\decay_subsystem\code\spawn_nest.dm" -#include "modular_skyrat\modules\delam_emergency_stop\code\admin_scram.dm" -#include "modular_skyrat\modules\delam_emergency_stop\code\delam.dm" -#include "modular_skyrat\modules\delam_emergency_stop\code\scram.dm" -#include "modular_skyrat\modules\departmentization\cargo_technician.dm" -#include "modular_skyrat\modules\departmentization\clothing_overrides.dm" -#include "modular_skyrat\modules\departmentization\quartermaster.dm" -#include "modular_skyrat\modules\digi_bloodsole\code\_shoes.dm" -#include "modular_skyrat\modules\dogfashion\code\head.dm" -#include "modular_skyrat\modules\drone_adjustments\drone.dm" -#include "modular_skyrat\modules\drone_adjustments\slide_component.dm" -#include "modular_skyrat\modules\electric_welder\code\electric_welder.dm" -#include "modular_skyrat\modules\emergency_spacesuit\code\emergency_spacesuit.dm" -#include "modular_skyrat\modules\emote_panel\code\emote_panel.dm" -#include "modular_skyrat\modules\emotes\code\dna_screams.dm" -#include "modular_skyrat\modules\emotes\code\emotes.dm" -#include "modular_skyrat\modules\emotes\code\laugh_datums.dm" -#include "modular_skyrat\modules\emotes\code\laugh_emotes.dm" -#include "modular_skyrat\modules\emotes\code\scream_datums.dm" -#include "modular_skyrat\modules\emotes\code\scream_emote.dm" -#include "modular_skyrat\modules\emotes\code\synth_emotes.dm" -#include "modular_skyrat\modules\emotes\code\additionalemotes\overlay_emote.dm" -#include "modular_skyrat\modules\emotes\code\additionalemotes\turf_emote.dm" -#include "modular_skyrat\modules\emotes\code\additionalemotes\turf_list.dm" -#include "modular_skyrat\modules\encounters\code\nri_raiders.dm" -#include "modular_skyrat\modules\energy_axe\code\energy_fireaxe.dm" -#include "modular_skyrat\modules\energy_axe\code\energy_fireaxe_case.dm" -#include "modular_skyrat\modules\escape_menu\code\escape_menu_skyrat.dm" -#include "modular_skyrat\modules\events\code\_event_globalvars.dm" -#include "modular_skyrat\modules\events\code\event_spawner.dm" -#include "modular_skyrat\modules\events\code\event_spawner_menu.dm" -#include "modular_skyrat\modules\examinemore\code\examine_more.dm" -#include "modular_skyrat\modules\exp_corps\code\clothing.dm" -#include "modular_skyrat\modules\exp_corps\code\expeditionary_trooper.dm" -#include "modular_skyrat\modules\exp_corps\code\gear.dm" -#include "modular_skyrat\modules\exp_corps\code\tomahawk.dm" -#include "modular_skyrat\modules\extra_vv\code\extra_vv.dm" -#include "modular_skyrat\modules\faction\code\clothes.dm" -#include "modular_skyrat\modules\faction\code\id.dm" -#include "modular_skyrat\modules\faction\code\outfit.dm" -#include "modular_skyrat\modules\faction\code\radio.dm" -#include "modular_skyrat\modules\faction\code\mapping\mapping_helpers.dm" -#include "modular_skyrat\modules\faction\code\mapping\ruins.dm" -#include "modular_skyrat\modules\fauna_reagent\fauna_reagent.dm" -#include "modular_skyrat\modules\food_replicator\code\clothing.dm" -#include "modular_skyrat\modules\food_replicator\code\medical.dm" -#include "modular_skyrat\modules\food_replicator\code\rationpacks.dm" -#include "modular_skyrat\modules\food_replicator\code\reagents.dm" -#include "modular_skyrat\modules\food_replicator\code\replicator.dm" -#include "modular_skyrat\modules\food_replicator\code\storage.dm" -#include "modular_skyrat\modules\food_replicator\code\replicator_designs\replicator_clothing.dm" -#include "modular_skyrat\modules\food_replicator\code\replicator_designs\replicator_food.dm" -#include "modular_skyrat\modules\food_replicator\code\replicator_designs\replicator_medical.dm" -#include "modular_skyrat\modules\GAGS\greyscale_configs.dm" -#include "modular_skyrat\modules\GAGS\nsfw\greyscale_configs.dm" -#include "modular_skyrat\modules\ghostcafe\code\dusts_on_catatonia.dm" -#include "modular_skyrat\modules\ghostcafe\code\dusts_on_leaving_area.dm" -#include "modular_skyrat\modules\ghostcafe\code\ghost_role_spawners.dm" -#include "modular_skyrat\modules\ghostcafe\code\ghostcafeturf.dm" -#include "modular_skyrat\modules\ghostcafe\code\hilbertshotel_ghost.dm" -#include "modular_skyrat\modules\ghostcafe\code\robot_ghostcafe.dm" -#include "modular_skyrat\modules\gladiator\code\datums\ruins\lavaland.dm" -#include "modular_skyrat\modules\gladiator\code\game\objects\items\gladiator_items.dm" -#include "modular_skyrat\modules\gladiator\code\modules\mob\living\simple_animal\hostile\megafauna\markedone.dm" -#include "modular_skyrat\modules\goofsec\code\cellphone.dm" -#include "modular_skyrat\modules\goofsec\code\department_guards.dm" -#include "modular_skyrat\modules\goofsec\code\hud.dm" -#include "modular_skyrat\modules\goofsec\code\sec_clothing_overrides.dm" -#include "modular_skyrat\modules\goofsec\code\sol_fed.dm" -#include "modular_skyrat\modules\gun_safety\code\keybinding.dm" -#include "modular_skyrat\modules\gun_safety\code\safety_additions.dm" -#include "modular_skyrat\modules\gun_safety\code\safety_component.dm" -#include "modular_skyrat\modules\gunhud\code\gun_hud.dm" -#include "modular_skyrat\modules\gunhud\code\gun_hud_component.dm" -#include "modular_skyrat\modules\gunpoint\code\gunpoint.dm" -#include "modular_skyrat\modules\gunpoint\code\gunpoint_datum.dm" -#include "modular_skyrat\modules\gunsgalore\code\ammo\ammo.dm" -#include "modular_skyrat\modules\gunsgalore\code\guns\akm.dm" -#include "modular_skyrat\modules\gunsgalore\code\guns\ballistic_master.dm" -#include "modular_skyrat\modules\gunsgalore\code\guns\energy.dm" -#include "modular_skyrat\modules\gunsgalore\code\guns\fg42.dm" -#include "modular_skyrat\modules\gunsgalore\code\guns\luger.dm" -#include "modular_skyrat\modules\gunsgalore\code\guns\m16.dm" -#include "modular_skyrat\modules\gunsgalore\code\guns\mg34.dm" -#include "modular_skyrat\modules\gunsgalore\code\guns\mp40.dm" -#include "modular_skyrat\modules\gunsgalore\code\guns\p90.dm" -#include "modular_skyrat\modules\gunsgalore\code\guns\pps.dm" -#include "modular_skyrat\modules\gunsgalore\code\guns\ppsh.dm" -#include "modular_skyrat\modules\gunsgalore\code\guns\scar.dm" -#include "modular_skyrat\modules\gunsgalore\code\guns\skillchip.dm" -#include "modular_skyrat\modules\gunsgalore\code\guns\stg.dm" -#include "modular_skyrat\modules\hairbrush\code\hairbrush.dm" -#include "modular_skyrat\modules\hairbrush\code\mood_events.dm" -#include "modular_skyrat\modules\hev_suit\code\hev_suit.dm" -#include "modular_skyrat\modules\holdingfashion_port\code\backpack.dm" -#include "modular_skyrat\modules\holdingfashion_port\code\bluespace_design.dm" -#include "modular_skyrat\modules\holdingfashion_port\code\bluespace_node.dm" -#include "modular_skyrat\modules\holdingfashion_port\code\recipes.dm" -#include "modular_skyrat\modules\holidays\flora.dm" -#include "modular_skyrat\modules\hop_drip\code\head_of_personnel.dm" -#include "modular_skyrat\modules\horrorform\code\horror_form.dm" -#include "modular_skyrat\modules\horrorform\code\true_changeling.dm" -#include "modular_skyrat\modules\huds\code\designs.dm" -#include "modular_skyrat\modules\huds\code\glasses\HUD_Glasses.dm" -#include "modular_skyrat\modules\hurtsposals\code\pipe.dm" -#include "modular_skyrat\modules\hydra\code\neutral.dm" -#include "modular_skyrat\modules\hyposprays\code\autolathe_designs.dm" -#include "modular_skyrat\modules\hyposprays\code\hypospray_kits.dm" -#include "modular_skyrat\modules\hyposprays\code\hyposprays_II.dm" -#include "modular_skyrat\modules\hyposprays\code\hypovials.dm" -#include "modular_skyrat\modules\hyposprays\code\vending_hypospray.dm" -#include "modular_skyrat\modules\ices_events\code\_ICES_globalvars.dm" -#include "modular_skyrat\modules\ices_events\code\ICES_event_config.dm" -#include "modular_skyrat\modules\ices_events\code\ICES_intensity_credits.dm" -#include "modular_skyrat\modules\ices_events\code\ICES_procs.dm" -#include "modular_skyrat\modules\ices_events\code\ICES_seclevel.dm" -#include "modular_skyrat\modules\ices_events\code\ICES_tgui.dm" -#include "modular_skyrat\modules\ices_events\code\effects\ef_foam.dm" -#include "modular_skyrat\modules\ices_events\code\events\ev_meteors.dm" -#include "modular_skyrat\modules\ices_events\code\events\ev_roleplay_check.dm" -#include "modular_skyrat\modules\ices_events\code\events\ev_scrubbers.dm" -#include "modular_skyrat\modules\icspawning\code\cards_ids.dm" -#include "modular_skyrat\modules\icspawning\code\observer.dm" -#include "modular_skyrat\modules\icspawning\code\spell.dm" -#include "modular_skyrat\modules\icspawning\code\standard.dm" -#include "modular_skyrat\modules\implants\code\augments_arms.dm" -#include "modular_skyrat\modules\implants\code\augments_chest.dm" -#include "modular_skyrat\modules\implants\code\augments_eyes.dm" -#include "modular_skyrat\modules\implants\code\augments_internal.dm" -#include "modular_skyrat\modules\implants\code\medical_designs.dm" -#include "modular_skyrat\modules\implants\code\medical_nodes.dm" -#include "modular_skyrat\modules\imported_vendors\code\vendor_containers.dm" -#include "modular_skyrat\modules\imported_vendors\code\vendor_food.dm" -#include "modular_skyrat\modules\imported_vendors\code\vendor_snacks.dm" -#include "modular_skyrat\modules\imported_vendors\code\vendors.dm" -#include "modular_skyrat\modules\indicators\code\combat_indicator.dm" -#include "modular_skyrat\modules\indicators\code\sealed.dm" -#include "modular_skyrat\modules\indicators\code\ssd_indicator.dm" -#include "modular_skyrat\modules\inflatables\code\inflatable.dm" -#include "modular_skyrat\modules\interaction_menu\code\click.dm" -#include "modular_skyrat\modules\interaction_menu\code\interaction_component.dm" -#include "modular_skyrat\modules\interaction_menu\code\interaction_datum.dm" -#include "modular_skyrat\modules\jukebox\code\dance_machine.dm" -#include "modular_skyrat\modules\jukebox\code\jukebox_subsystem.dm" -#include "modular_skyrat\modules\jungle\code\flora.dm" -#include "modular_skyrat\modules\knives\knives.dm" -#include "modular_skyrat\modules\layer_shift\code\mob_movement.dm" -#include "modular_skyrat\modules\liquids\code\drains.dm" -#include "modular_skyrat\modules\liquids\code\height_floors.dm" -#include "modular_skyrat\modules\liquids\code\mop.dm" -#include "modular_skyrat\modules\liquids\code\ocean_areas.dm" -#include "modular_skyrat\modules\liquids\code\ocean_biomes.dm" -#include "modular_skyrat\modules\liquids\code\ocean_flora.dm" -#include "modular_skyrat\modules\liquids\code\ocean_mapgen.dm" -#include "modular_skyrat\modules\liquids\code\ocean_ruins.dm" -#include "modular_skyrat\modules\liquids\code\ocean_turfs.dm" -#include "modular_skyrat\modules\liquids\code\tools.dm" -#include "modular_skyrat\modules\liquids\code\liquid_systems\liquid_controller.dm" -#include "modular_skyrat\modules\liquids\code\liquid_systems\liquid_effect.dm" -#include "modular_skyrat\modules\liquids\code\liquid_systems\liquid_groups.dm" -#include "modular_skyrat\modules\liquids\code\liquid_systems\liquid_height.dm" -#include "modular_skyrat\modules\liquids\code\liquid_systems\liquid_interaction.dm" -#include "modular_skyrat\modules\liquids\code\liquid_systems\liquid_plumbers.dm" -#include "modular_skyrat\modules\liquids\code\liquid_systems\liquid_pump.dm" -#include "modular_skyrat\modules\liquids\code\liquid_systems\liquid_status_effect.dm" -#include "modular_skyrat\modules\liquids\code\liquid_systems\liquid_turf.dm" -#include "modular_skyrat\modules\liquids\code\reagents\reagent_containers.dm" -#include "modular_skyrat\modules\liquids\code\reagents\chemistry\holder.dm" -#include "modular_skyrat\modules\liquids\code\reagents\chemistry\reagents.dm" -#include "modular_skyrat\modules\loadouts\loadout_items\_loadout_datum.dm" -#include "modular_skyrat\modules\loadouts\loadout_items\loadout_datum_accessory.dm" -#include "modular_skyrat\modules\loadouts\loadout_items\loadout_datum_belts.dm" -#include "modular_skyrat\modules\loadouts\loadout_items\loadout_datum_ears.dm" -#include "modular_skyrat\modules\loadouts\loadout_items\loadout_datum_glasses.dm" -#include "modular_skyrat\modules\loadouts\loadout_items\loadout_datum_gloves.dm" -#include "modular_skyrat\modules\loadouts\loadout_items\loadout_datum_heads.dm" -#include "modular_skyrat\modules\loadouts\loadout_items\loadout_datum_inhands.dm" -#include "modular_skyrat\modules\loadouts\loadout_items\loadout_datum_masks.dm" -#include "modular_skyrat\modules\loadouts\loadout_items\loadout_datum_neck.dm" -#include "modular_skyrat\modules\loadouts\loadout_items\loadout_datum_pocket.dm" -#include "modular_skyrat\modules\loadouts\loadout_items\loadout_datum_shoes.dm" -#include "modular_skyrat\modules\loadouts\loadout_items\loadout_datum_suit.dm" -#include "modular_skyrat\modules\loadouts\loadout_items\loadout_datum_toys.dm" -#include "modular_skyrat\modules\loadouts\loadout_items\donator\personal\donator_personal.dm" -#include "modular_skyrat\modules\loadouts\loadout_items\under\donator.dm" -#include "modular_skyrat\modules\loadouts\loadout_items\under\loadout_datum_under.dm" -#include "modular_skyrat\modules\loadouts\loadout_ui\loadout_manager.dm" -#include "modular_skyrat\modules\loadouts\loadout_ui\loadout_outfit_helpers.dm" -#include "modular_skyrat\modules\lorecaster\code\archive_viewer.dm" -#include "modular_skyrat\modules\lorecaster\code\config.dm" -#include "modular_skyrat\modules\lorecaster\code\story_manager.dm" -#include "modular_skyrat\modules\lorecaster\code\subsystem.dm" -#include "modular_skyrat\modules\manufacturer_examine\code\gun_company_additions.dm" -#include "modular_skyrat\modules\manufacturer_examine\code\manufacturer_element.dm" -#include "modular_skyrat\modules\mapping\code\airless.dm" -#include "modular_skyrat\modules\mapping\code\automatic_respawner.dm" -#include "modular_skyrat\modules\mapping\code\color.dm" -#include "modular_skyrat\modules\mapping\code\doors.dm" -#include "modular_skyrat\modules\mapping\code\dungeon.dm" -#include "modular_skyrat\modules\mapping\code\fence.dm" -#include "modular_skyrat\modules\mapping\code\fluff.dm" -#include "modular_skyrat\modules\mapping\code\furniture.dm" -#include "modular_skyrat\modules\mapping\code\holocall.dm" -#include "modular_skyrat\modules\mapping\code\icemoon.dm" -#include "modular_skyrat\modules\mapping\code\interdyne_mining.dm" -#include "modular_skyrat\modules\mapping\code\interlink_helper.dm" -#include "modular_skyrat\modules\mapping\code\jobs.dm" -#include "modular_skyrat\modules\mapping\code\laptop_presets.dm" -#include "modular_skyrat\modules\mapping\code\lavaland.dm" -#include "modular_skyrat\modules\mapping\code\lavaland_ruin_code.dm" -#include "modular_skyrat\modules\mapping\code\lighting.dm" -#include "modular_skyrat\modules\mapping\code\lowpressure.dm" -#include "modular_skyrat\modules\mapping\code\machinery.dm" -#include "modular_skyrat\modules\mapping\code\mapping_directionals.dm" -#include "modular_skyrat\modules\mapping\code\misc.dm" -#include "modular_skyrat\modules\mapping\code\mob_spawns.dm" -#include "modular_skyrat\modules\mapping\code\planet_turfs.dm" -#include "modular_skyrat\modules\mapping\code\pool.dm" -#include "modular_skyrat\modules\mapping\code\radio.dm" -#include "modular_skyrat\modules\mapping\code\shrapnel_mine.dm" -#include "modular_skyrat\modules\mapping\code\shutters.dm" -#include "modular_skyrat\modules\mapping\code\shuttles.dm" -#include "modular_skyrat\modules\mapping\code\space.dm" -#include "modular_skyrat\modules\mapping\code\space_hotel.dm" -#include "modular_skyrat\modules\mapping\code\spaceship_items.dm" -#include "modular_skyrat\modules\mapping\code\spaceship_turfs.dm" -#include "modular_skyrat\modules\mapping\code\static_plaques.dm" -#include "modular_skyrat\modules\mapping\code\tarkon_atmos_control.dm" -#include "modular_skyrat\modules\mapping\code\tools.dm" -#include "modular_skyrat\modules\mapping\code\turf.dm" -#include "modular_skyrat\modules\mapping\code\turf_decals.dm" -#include "modular_skyrat\modules\mapping\code\vgdecals.dm" -#include "modular_skyrat\modules\mapping\code\wardrobes.dm" -#include "modular_skyrat\modules\mapping\code\areas\away_content.dm" -#include "modular_skyrat\modules\mapping\code\areas\centcom.dm" -#include "modular_skyrat\modules\mapping\code\areas\mining.dm" -#include "modular_skyrat\modules\mapping\code\areas\ruins.dm" -#include "modular_skyrat\modules\mapping\code\areas\shuttles.dm" -#include "modular_skyrat\modules\mapping\code\areas\space.dm" -#include "modular_skyrat\modules\mapping\code\areas\station.dm" -#include "modular_skyrat\modules\mapping\code\lockers\cargodiselost\cargodiselockers.dm" -#include "modular_skyrat\modules\mapping\code\lockers\interdyne_fob\cargo.dm" -#include "modular_skyrat\modules\mapping\code\lockers\interdyne_fob\command.dm" -#include "modular_skyrat\modules\mapping\code\lockers\interdyne_fob\engineering.dm" -#include "modular_skyrat\modules\mapping\code\lockers\interdyne_fob\generic.dm" -#include "modular_skyrat\modules\mapping\code\lockers\interdyne_fob\medical.dm" -#include "modular_skyrat\modules\mapping\code\lockers\interdyne_fob\science.dm" -#include "modular_skyrat\modules\mapping\code\lockers\interdyne_fob\security.dm" -#include "modular_skyrat\modules\mapping\voidraptor\code\areas.dm" -#include "modular_skyrat\modules\mapping\voidraptor\code\clothing.dm" -#include "modular_skyrat\modules\mapping\voidraptor\code\mob.dm" -#include "modular_skyrat\modules\mapping\voidraptor\code\shuttles.dm" -#include "modular_skyrat\modules\marines\code\gear.dm" -#include "modular_skyrat\modules\marines\code\mod.dm" -#include "modular_skyrat\modules\marines\code\modsuit_modules.dm" -#include "modular_skyrat\modules\marines\code\smartgun.dm" -#include "modular_skyrat\modules\medical\code\anesthetic_machine.dm" -#include "modular_skyrat\modules\medical\code\carbon_examine.dm" -#include "modular_skyrat\modules\medical\code\carbon_update_icons.dm" -#include "modular_skyrat\modules\medical\code\grasp.dm" -#include "modular_skyrat\modules\medical\code\health_analyzer.dm" -#include "modular_skyrat\modules\medical\code\medkit.dm" -#include "modular_skyrat\modules\medical\code\smartdarts.dm" -#include "modular_skyrat\modules\medical\code\sprays.dm" -#include "modular_skyrat\modules\medical\code\cargo\packs.dm" -#include "modular_skyrat\modules\medical\code\wounds\_wounds.dm" -#include "modular_skyrat\modules\medical\code\wounds\bleed.dm" -#include "modular_skyrat\modules\medical\code\wounds\medical.dm" -#include "modular_skyrat\modules\medical\code\wounds\muscle.dm" -#include "modular_skyrat\modules\medical\code\wounds\wound_effects.dm" -#include "modular_skyrat\modules\medical\code\wounds\synth\robotic_burns.dm" -#include "modular_skyrat\modules\medical\code\wounds\synth\robotic_muscle.dm" -#include "modular_skyrat\modules\medical\code\wounds\synth\robotic_pierce.dm" -#include "modular_skyrat\modules\medical\code\wounds\synth\robotic_slash.dm" -#include "modular_skyrat\modules\medical\code\wounds\synth\blunt\robotic_blunt.dm" -#include "modular_skyrat\modules\medical\code\wounds\synth\blunt\robotic_blunt_T1.dm" -#include "modular_skyrat\modules\medical\code\wounds\synth\blunt\robotic_blunt_T2.dm" -#include "modular_skyrat\modules\medical\code\wounds\synth\blunt\robotic_blunt_T3.dm" -#include "modular_skyrat\modules\medical\code\wounds\synth\blunt\secures_internals.dm" -#include "modular_skyrat\modules\medical_designs\medical_designs.dm" -#include "modular_skyrat\modules\medievalcrate_skyrat\code\vintageitems.dm" -#include "modular_skyrat\modules\mentor\code\_globalvars.dm" -#include "modular_skyrat\modules\mentor\code\client_procs.dm" -#include "modular_skyrat\modules\mentor\code\dementor.dm" -#include "modular_skyrat\modules\mentor\code\follow.dm" -#include "modular_skyrat\modules\mentor\code\logging.dm" -#include "modular_skyrat\modules\mentor\code\mentor.dm" -#include "modular_skyrat\modules\mentor\code\mentor_verbs.dm" -#include "modular_skyrat\modules\mentor\code\mentorhelp.dm" -#include "modular_skyrat\modules\mentor\code\mentorpm.dm" -#include "modular_skyrat\modules\mentor\code\mentorsay.dm" -#include "modular_skyrat\modules\mentor\code\mentorwho.dm" -#include "modular_skyrat\modules\microfusion\code\_microfusion_defines.dm" -#include "modular_skyrat\modules\microfusion\code\cargo_stuff.dm" -#include "modular_skyrat\modules\microfusion\code\gun_types.dm" -#include "modular_skyrat\modules\microfusion\code\microfusion_cell.dm" -#include "modular_skyrat\modules\microfusion\code\microfusion_cell_attachments.dm" -#include "modular_skyrat\modules\microfusion\code\microfusion_designs.dm" -#include "modular_skyrat\modules\microfusion\code\microfusion_energy_master.dm" -#include "modular_skyrat\modules\microfusion\code\microfusion_gun_attachments.dm" -#include "modular_skyrat\modules\microfusion\code\microfusion_techweb.dm" -#include "modular_skyrat\modules\microfusion\code\phase_emitter.dm" -#include "modular_skyrat\modules\microfusion\code\projectiles.dm" -#include "modular_skyrat\modules\Midroundtraitor\code\datum_traitor.dm" -#include "modular_skyrat\modules\Midroundtraitor\code\event.dm" -#include "modular_skyrat\modules\mining_vendor_additions\code\order_mining.dm" -#include "modular_skyrat\modules\modsuit_armour\modsuit_armour.dm" -#include "modular_skyrat\modules\modsuit_pai\code\mod_pai.dm" -#include "modular_skyrat\modules\modular_ert\code\engineer\engineer.dm" -#include "modular_skyrat\modules\modular_ert\code\fumigators\ert.dm" -#include "modular_skyrat\modules\modular_ert\code\fumigators\fumigator.dm" -#include "modular_skyrat\modules\modular_ert\code\fumigators\fumigator_outfit.dm" -#include "modular_skyrat\modules\modular_ert\code\fumigators\head.dm" -#include "modular_skyrat\modules\modular_ert\code\marine_override\modified_equipment.dm" -#include "modular_skyrat\modules\modular_ert\code\marine_override\modified_gear.dm" -#include "modular_skyrat\modules\modular_ert\code\odst\ert.dm" -#include "modular_skyrat\modules\modular_ert\code\odst\odst.dm" -#include "modular_skyrat\modules\modular_ert\code\odst\odst_outfit.dm" -#include "modular_skyrat\modules\modular_ert\code\pizza\ert.dm" -#include "modular_skyrat\modules\modular_ert\code\pizza\ert_antag.dm" -#include "modular_skyrat\modules\modular_ert\code\pizza\head.dm" -#include "modular_skyrat\modules\modular_ert\code\pizza\misc_clothing.dm" -#include "modular_skyrat\modules\modular_ert\code\pizza\pizza_outfit.dm" -#include "modular_skyrat\modules\modular_ert\code\pizza\weaponry.dm" -#include "modular_skyrat\modules\modular_ert\code\trauma_team\ert.dm" -#include "modular_skyrat\modules\modular_ert\code\trauma_team\ert_antag.dm" -#include "modular_skyrat\modules\modular_ert\code\trauma_team\trauma_team_outfit.dm" -#include "modular_skyrat\modules\modular_implants\code\misc_devices.dm" -#include "modular_skyrat\modules\modular_implants\code\nif_actions.dm" -#include "modular_skyrat\modules\modular_implants\code\nif_implants.dm" -#include "modular_skyrat\modules\modular_implants\code\nif_persistence.dm" -#include "modular_skyrat\modules\modular_implants\code\nif_research.dm" -#include "modular_skyrat\modules\modular_implants\code\nifs.dm" -#include "modular_skyrat\modules\modular_implants\code\nifs_tgui.dm" -#include "modular_skyrat\modules\modular_implants\code\nifsoft_catalog.dm" -#include "modular_skyrat\modules\modular_implants\code\nifsofts.dm" -#include "modular_skyrat\modules\modular_implants\code\nifsofts\book_summoner.dm" -#include "modular_skyrat\modules\modular_implants\code\nifsofts\dorms.dm" -#include "modular_skyrat\modules\modular_implants\code\nifsofts\hivemind.dm" -#include "modular_skyrat\modules\modular_implants\code\nifsofts\huds.dm" -#include "modular_skyrat\modules\modular_implants\code\nifsofts\hypnosis.dm" -#include "modular_skyrat\modules\modular_implants\code\nifsofts\money_sense.dm" -#include "modular_skyrat\modules\modular_implants\code\nifsofts\prop_summoner.dm" -#include "modular_skyrat\modules\modular_implants\code\nifsofts\scryer.dm" -#include "modular_skyrat\modules\modular_implants\code\nifsofts\shapeshifter.dm" -#include "modular_skyrat\modules\modular_implants\code\nifsofts\soul_poem.dm" -#include "modular_skyrat\modules\modular_implants\code\nifsofts\soulcatcher.dm" -#include "modular_skyrat\modules\modular_implants\code\nifsofts\base_types\action_granter.dm" -#include "modular_skyrat\modules\modular_implants\code\soulcatcher\attachable_soulcatcher.dm" -#include "modular_skyrat\modules\modular_implants\code\soulcatcher\handheld_soulcatcher.dm" -#include "modular_skyrat\modules\modular_implants\code\soulcatcher\soulcatcher_body_component.dm" -#include "modular_skyrat\modules\modular_implants\code\soulcatcher\soulcatcher_component.dm" -#include "modular_skyrat\modules\modular_implants\code\soulcatcher\soulcatcher_mob.dm" -#include "modular_skyrat\modules\modular_implants\code\soulcatcher\soulcatcher_tgui.dm" -#include "modular_skyrat\modules\modular_implants\code\soulcatcher\soulcatcher_verbs.dm" -#include "modular_skyrat\modules\modular_items\code\bags.dm" -#include "modular_skyrat\modules\modular_items\code\cash.dm" -#include "modular_skyrat\modules\modular_items\code\ciggies.dm" -#include "modular_skyrat\modules\modular_items\code\cross.dm" -#include "modular_skyrat\modules\modular_items\code\designs.dm" -#include "modular_skyrat\modules\modular_items\code\makeshift.dm" -#include "modular_skyrat\modules\modular_items\code\modular_glasses.dm" -#include "modular_skyrat\modules\modular_items\code\necklace.dm" -#include "modular_skyrat\modules\modular_items\code\pastries.dm" -#include "modular_skyrat\modules\modular_items\code\recipes_misc.dm" -#include "modular_skyrat\modules\modular_items\code\summon_beacon.dm" -#include "modular_skyrat\modules\modular_items\code\tailoring.dm" -#include "modular_skyrat\modules\modular_items\code\thieving_gloves.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\clothing_pref_check.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\decals.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_quirks.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\screen_icons.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\verbs.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_arousal\arousal.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_arousal\climax.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_arousal\mood_events.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_arousal\pain.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_arousal\pleasure.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_arousal\status_effects\aroused.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_arousal\status_effects\climax.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_arousal\status_effects\fluid_generation.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_arousal\status_effects\ropebunny.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_arousal\status_effects\spank_related.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_chemistry\mood_events.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_chemistry\items\bottles.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_chemistry\items\pills.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_chemistry\reagents\_aphrodisiac.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_chemistry\reagents\_chemical_reaction.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_chemistry\reagents\breast_milk.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_chemistry\reagents\camphor.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_chemistry\reagents\crocin.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_chemistry\reagents\cum.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_chemistry\reagents\dopamine.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_chemistry\reagents\hexacrocin.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_chemistry\reagents\incubus_draft.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_chemistry\reagents\pentacamphor.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_chemistry\reagents\succubus_milk.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\ballgag.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\bdsm_mask.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\corset.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\deprivation_helmet.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\domina_cap.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\erp_belt.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\hypnogoggles.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\kink_collars.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\kinky_blindfold.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\kinky_headphones.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\kinky_sleepbag.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\latex_catsuit.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\latex_straight_jacket.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\lewd_glasses.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\lewd_gloves.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\lewd_maid.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\lewd_shoes.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\shackles.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\shibari_worn_hands.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\shibari_worn_legs.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\shibari_worn_uniform.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\shockcollar.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\strapon.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_clothing\stripper_outfit.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_helpers\appearance.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_helpers\carbon.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_helpers\human.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_helpers\misc.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_helpers\organs.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_helpers\pref_checking.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_helpers\sounds.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_helpers\species.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\_erp_disabled_item_enforcement.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\_kits.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\_masturbation_item.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\_sex_toy.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\attachable_vibrator.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\buttplug.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\clamps.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\condom.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\dildo.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\discount_card.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\feather.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\fleshlight.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\kinky_shocker.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\leather_whip.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\magic_wand.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\pinkcuffs.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\serviette.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\shibari.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\size_items.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\spanking_pad.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\torture_candle.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\vibrator.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_items\vibroring.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_machinery\lustwish.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_machinery\milking_machine.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_machinery\washing_machine.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_organs\_genital.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_organs\breasts.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_organs\testicles.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_organs\vagina.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_structures\bdsm_furniture.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_structures\construction.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_structures\dancing_pole.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_structures\pillow.dm" -#include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_structures\shibari_stand.dm" -#include "modular_skyrat\modules\modular_persistence\code\modular_persistence.dm" -#include "modular_skyrat\modules\modular_reagents\code\alert.dm" -#include "modular_skyrat\modules\modular_reagents\code\reagents\medicine.dm" -#include "modular_skyrat\modules\modular_reagents\code\recipes\medicine_recipes.dm" -#include "modular_skyrat\modules\modular_vending\code\autodrobe.dm" -#include "modular_skyrat\modules\modular_vending\code\boozeomat.dm" -#include "modular_skyrat\modules\modular_vending\code\cigarette.dm" -#include "modular_skyrat\modules\modular_vending\code\clothesmate.dm" -#include "modular_skyrat\modules\modular_vending\code\cola.dm" -#include "modular_skyrat\modules\modular_vending\code\engivend.dm" -#include "modular_skyrat\modules\modular_vending\code\games.dm" -#include "modular_skyrat\modules\modular_vending\code\medical.dm" -#include "modular_skyrat\modules\modular_vending\code\megaseed.dm" -#include "modular_skyrat\modules\modular_vending\code\security.dm" -#include "modular_skyrat\modules\modular_vending\code\vending.dm" -#include "modular_skyrat\modules\modular_vending\code\wardrobes.dm" -#include "modular_skyrat\modules\modular_weapons\code\autolathe_designs.dm" -#include "modular_skyrat\modules\modular_weapons\code\conversion_kits.dm" -#include "modular_skyrat\modules\modular_weapons\code\gunsets.dm" -#include "modular_skyrat\modules\modular_weapons\code\melee.dm" -#include "modular_skyrat\modules\modular_weapons\code\modular_projectiles.dm" -#include "modular_skyrat\modules\modular_weapons\code\pepperball_gun.dm" -#include "modular_skyrat\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\advert.dm" -#include "modular_skyrat\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\grenade_launcher.dm" -#include "modular_skyrat\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\gunsets.dm" -#include "modular_skyrat\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\magazines.dm" -#include "modular_skyrat\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\rifle.dm" -#include "modular_skyrat\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\shotgun.dm" -#include "modular_skyrat\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\submachinegun.dm" -#include "modular_skyrat\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\ammo\grenade.dm" -#include "modular_skyrat\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\ammo\pistol.dm" -#include "modular_skyrat\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\ammo\rifle.dm" -#include "modular_skyrat\modules\modular_weapons\code\company_and_or_faction_based\trappiste_fabriek\advert.dm" -#include "modular_skyrat\modules\modular_weapons\code\company_and_or_faction_based\trappiste_fabriek\ammo.dm" -#include "modular_skyrat\modules\modular_weapons\code\company_and_or_faction_based\trappiste_fabriek\gunsets.dm" -#include "modular_skyrat\modules\modular_weapons\code\company_and_or_faction_based\trappiste_fabriek\magazines.dm" -#include "modular_skyrat\modules\modular_weapons\code\company_and_or_faction_based\trappiste_fabriek\pistol.dm" -#include "modular_skyrat\modules\modular_weapons\code\company_and_or_faction_based\trappiste_fabriek\revolver.dm" -#include "modular_skyrat\modules\modular_weapons\code\company_and_or_faction_based\xhihao_light_arms\ammo.dm" -#include "modular_skyrat\modules\modular_weapons\code\company_and_or_faction_based\xhihao_light_arms\guns.dm" -#include "modular_skyrat\modules\mold\code\_mold_defines.dm" -#include "modular_skyrat\modules\mold\code\mold.dm" -#include "modular_skyrat\modules\mold\code\mold_controller.dm" -#include "modular_skyrat\modules\mold\code\mold_disease.dm" -#include "modular_skyrat\modules\mold\code\mold_event.dm" -#include "modular_skyrat\modules\mold\code\mold_mobs.dm" -#include "modular_skyrat\modules\mold\code\mold_structures.dm" -#include "modular_skyrat\modules\more_briefcases\code\briefcases.dm" -#include "modular_skyrat\modules\morefermentplants\code\ambrosia.dm" -#include "modular_skyrat\modules\morefermentplants\code\banana.dm" -#include "modular_skyrat\modules\morefermentplants\code\beans.dm" -#include "modular_skyrat\modules\morefermentplants\code\berries.dm" -#include "modular_skyrat\modules\morefermentplants\code\cannabis.dm" -#include "modular_skyrat\modules\morefermentplants\code\chili.dm" -#include "modular_skyrat\modules\morefermentplants\code\citrus.dm" -#include "modular_skyrat\modules\morefermentplants\code\eggplant.dm" -#include "modular_skyrat\modules\morefermentplants\code\garlic.dm" -#include "modular_skyrat\modules\morefermentplants\code\kudzu.dm" -#include "modular_skyrat\modules\morefermentplants\code\melon.dm" -#include "modular_skyrat\modules\morefermentplants\code\misc.dm" -#include "modular_skyrat\modules\morefermentplants\code\mushrooms.dm" -#include "modular_skyrat\modules\morefermentplants\code\nettle.dm" -#include "modular_skyrat\modules\morefermentplants\code\onion.dm" -#include "modular_skyrat\modules\morefermentplants\code\pineapple.dm" -#include "modular_skyrat\modules\morefermentplants\code\pumpkin.dm" -#include "modular_skyrat\modules\morefermentplants\code\root.dm" -#include "modular_skyrat\modules\morefermentplants\code\tobacco.dm" -#include "modular_skyrat\modules\morefermentplants\code\tomato.dm" -#include "modular_skyrat\modules\morenarcotics\code\blacktar.dm" -#include "modular_skyrat\modules\morenarcotics\code\cocaine.dm" -#include "modular_skyrat\modules\morenarcotics\code\cocaine_item.dm" -#include "modular_skyrat\modules\morenarcotics\code\cocoleaves.dm" -#include "modular_skyrat\modules\morenarcotics\code\crackpipe.dm" -#include "modular_skyrat\modules\morenarcotics\code\opium.dm" -#include "modular_skyrat\modules\morenarcotics\code\opiumpoppy.dm" -#include "modular_skyrat\modules\morenarcotics\code\pcp.dm" -#include "modular_skyrat\modules\morenarcotics\code\quaalude.dm" -#include "modular_skyrat\modules\morenarcotics\code\thc.dm" -#include "modular_skyrat\modules\morenarcotics\code\thc_item.dm" -#include "modular_skyrat\modules\morenarcotics\code\vapecarts.dm" -#include "modular_skyrat\modules\moretraitoritems\code\autosurgeon.dm" -#include "modular_skyrat\modules\moretraitoritems\code\autosurgeon_bodypart.dm" -#include "modular_skyrat\modules\moretraitoritems\code\cards_id.dm" -#include "modular_skyrat\modules\moretraitoritems\code\cultist.dm" -#include "modular_skyrat\modules\moretraitoritems\code\drinkingglass.dm" -#include "modular_skyrat\modules\moretraitoritems\code\fake_announcement.dm" -#include "modular_skyrat\modules\moretraitoritems\code\glue.dm" -#include "modular_skyrat\modules\moretraitoritems\code\headset.dm" -#include "modular_skyrat\modules\moretraitoritems\code\pirate.dm" -#include "modular_skyrat\modules\moretraitoritems\code\smuggling_gear.dm" -#include "modular_skyrat\modules\moretraitoritems\code\spawnergrenade.dm" -#include "modular_skyrat\modules\moretraitoritems\code\syndicate.dm" -#include "modular_skyrat\modules\moretraitoritems\code\syndiemirror.dm" -#include "modular_skyrat\modules\moretraitoritems\code\uplink_kits.dm" -#include "modular_skyrat\modules\moretraitoritems\code\weapons.dm" -#include "modular_skyrat\modules\morewizardstuffs\spellbook.dm" -#include "modular_skyrat\modules\morewizardstuffs\spells\bloodcrawl_potion.dm" -#include "modular_skyrat\modules\morewizardstuffs\spells\magical_stimpack.dm" -#include "modular_skyrat\modules\mounted_machine_gun\code\ammobox.dm" -#include "modular_skyrat\modules\mounted_machine_gun\code\mounted_machine_gun.dm" -#include "modular_skyrat\modules\multicellcharger\code\multi_cell_charger.dm" -#include "modular_skyrat\modules\multiserver\code\config_entry.dm" -#include "modular_skyrat\modules\mutants\code\mutant_antag_datum.dm" -#include "modular_skyrat\modules\mutants\code\mutant_component.dm" -#include "modular_skyrat\modules\mutants\code\mutant_cure.dm" -#include "modular_skyrat\modules\mutants\code\mutant_event.dm" -#include "modular_skyrat\modules\mutants\code\mutant_species.dm" -#include "modular_skyrat\modules\mutants\code\mutant_techweb.dm" -#include "modular_skyrat\modules\mutants\code\mutant_zombie_bodyparts.dm" -#include "modular_skyrat\modules\nanotrasen_naval_command\code\clothing.dm" -#include "modular_skyrat\modules\nanotrasen_naval_command\code\id_trims.dm" -#include "modular_skyrat\modules\nanotrasen_naval_command\code\outfits.dm" -#include "modular_skyrat\modules\nanotrasen_rep\code\clothing.dm" -#include "modular_skyrat\modules\nanotrasen_rep\code\nanotrasen_consultant.dm" -#include "modular_skyrat\modules\new_cells\code\power_cell.dm" -#include "modular_skyrat\modules\novaya_ert\code\advanced_choice_beacon.dm" -#include "modular_skyrat\modules\novaya_ert\code\automatic.dm" -#include "modular_skyrat\modules\novaya_ert\code\back.dm" -#include "modular_skyrat\modules\novaya_ert\code\belt.dm" -#include "modular_skyrat\modules\novaya_ert\code\ert.dm" -#include "modular_skyrat\modules\novaya_ert\code\head.dm" -#include "modular_skyrat\modules\novaya_ert\code\id.dm" -#include "modular_skyrat\modules\novaya_ert\code\mod_suit.dm" -#include "modular_skyrat\modules\novaya_ert\code\outfit.dm" -#include "modular_skyrat\modules\novaya_ert\code\shield.dm" -#include "modular_skyrat\modules\novaya_ert\code\suit.dm" -#include "modular_skyrat\modules\novaya_ert\code\surplus_armor.dm" -#include "modular_skyrat\modules\novaya_ert\code\surplus_weapons.dm" -#include "modular_skyrat\modules\novaya_ert\code\survival_pack.dm" -#include "modular_skyrat\modules\novaya_ert\code\toolbox.dm" -#include "modular_skyrat\modules\novaya_ert\code\uniform.dm" -#include "modular_skyrat\modules\officestuff\code\officestuff.dm" -#include "modular_skyrat\modules\oneclickantag\code\oneclickantag.dm" -#include "modular_skyrat\modules\opposing_force\code\admin_procs.dm" -#include "modular_skyrat\modules\opposing_force\code\antagonist.dm" -#include "modular_skyrat\modules\opposing_force\code\dynamic.dm" -#include "modular_skyrat\modules\opposing_force\code\mind.dm" -#include "modular_skyrat\modules\opposing_force\code\opposing_force_datum.dm" -#include "modular_skyrat\modules\opposing_force\code\opposing_force_subsystem.dm" -#include "modular_skyrat\modules\opposing_force\code\roundend.dm" -#include "modular_skyrat\modules\opposing_force\code\equipment\ammo.dm" -#include "modular_skyrat\modules\opposing_force\code\equipment\biology.dm" -#include "modular_skyrat\modules\opposing_force\code\equipment\bombs.dm" -#include "modular_skyrat\modules\opposing_force\code\equipment\clothing.dm" -#include "modular_skyrat\modules\opposing_force\code\equipment\equip_parent.dm" -#include "modular_skyrat\modules\opposing_force\code\equipment\gadgets.dm" -#include "modular_skyrat\modules\opposing_force\code\equipment\guns.dm" -#include "modular_skyrat\modules\opposing_force\code\equipment\implants.dm" -#include "modular_skyrat\modules\opposing_force\code\equipment\melee.dm" -#include "modular_skyrat\modules\opposing_force\code\equipment\modsuit.dm" -#include "modular_skyrat\modules\opposing_force\code\equipment\spells.dm" -#include "modular_skyrat\modules\opposing_force\code\equipment\uplink.dm" -#include "modular_skyrat\modules\organs\code\liver.dm" -#include "modular_skyrat\modules\organs\code\lungs.dm" -#include "modular_skyrat\modules\organs\code\organs.dm" -#include "modular_skyrat\modules\organs\code\stomach.dm" -#include "modular_skyrat\modules\organs\code\tongue.dm" -#include "modular_skyrat\modules\oversized\code\door.dm" -#include "modular_skyrat\modules\oversized\code\oversized_quirk.dm" -#include "modular_skyrat\modules\panicbunker\code\panicbunker.dm" -#include "modular_skyrat\modules\pixel_shift\code\pixel_shift_component.dm" -#include "modular_skyrat\modules\pixel_shift\code\pixel_shift_keybind.dm" -#include "modular_skyrat\modules\pixel_shift\code\pixel_shift_mob.dm" -#include "modular_skyrat\modules\player_ranks\code\world_topic.dm" -#include "modular_skyrat\modules\player_ranks\code\player_rank_controller\_player_rank_controller.dm" -#include "modular_skyrat\modules\player_ranks\code\player_rank_controller\donator_controller.dm" -#include "modular_skyrat\modules\player_ranks\code\player_rank_controller\mentor_controller.dm" -#include "modular_skyrat\modules\player_ranks\code\player_rank_controller\veteran_controller.dm" -#include "modular_skyrat\modules\player_ranks\code\subsystem\player_ranks.dm" -#include "modular_skyrat\modules\pod_locking\pod_locking.dm" -#include "modular_skyrat\modules\polarized_windows\capacitor.dm" -#include "modular_skyrat\modules\polarized_windows\polarization_controller.dm" -#include "modular_skyrat\modules\polarized_windows\polarizer.dm" -#include "modular_skyrat\modules\polarized_windows\windows.dm" -#include "modular_skyrat\modules\pollution\code\admin_spawn_pollution.dm" -#include "modular_skyrat\modules\pollution\code\air_refresher.dm" -#include "modular_skyrat\modules\pollution\code\bonfire.dm" -#include "modular_skyrat\modules\pollution\code\fancy_storage_items.dm" -#include "modular_skyrat\modules\pollution\code\perfumes.dm" -#include "modular_skyrat\modules\pollution\code\pollutant_datum.dm" -#include "modular_skyrat\modules\pollution\code\pollutants_generic.dm" -#include "modular_skyrat\modules\pollution\code\pollution.dm" -#include "modular_skyrat\modules\pollution\code\pollution_effect.dm" -#include "modular_skyrat\modules\pollution\code\pollution_emitters.dm" -#include "modular_skyrat\modules\pollution\code\pollution_initializations.dm" -#include "modular_skyrat\modules\pollution\code\pollution_subsystem.dm" -#include "modular_skyrat\modules\pollution\code\scented_candles.dm" -#include "modular_skyrat\modules\pollution\code\temporary_pollution_emission_component.dm" -#include "modular_skyrat\modules\pollution\code\turf_open.dm" -#include "modular_skyrat\modules\poly_commands\parrot.dm" -#include "modular_skyrat\modules\positronic_alert_console\code\positronic_alert_console.dm" -#include "modular_skyrat\modules\primitive_catgirls\code\clothing.dm" -#include "modular_skyrat\modules\primitive_catgirls\code\clothing_vendor.dm" -#include "modular_skyrat\modules\primitive_catgirls\code\language.dm" -#include "modular_skyrat\modules\primitive_catgirls\code\map_items.dm" -#include "modular_skyrat\modules\primitive_catgirls\code\organs.dm" -#include "modular_skyrat\modules\primitive_catgirls\code\smelling_salts.dm" -#include "modular_skyrat\modules\primitive_catgirls\code\spawner.dm" -#include "modular_skyrat\modules\primitive_catgirls\code\species.dm" -#include "modular_skyrat\modules\primitive_cooking_additions\code\big_mortar.dm" -#include "modular_skyrat\modules\primitive_cooking_additions\code\cookware.dm" -#include "modular_skyrat\modules\primitive_cooking_additions\code\cutting_board.dm" -#include "modular_skyrat\modules\primitive_cooking_additions\code\millstone.dm" -#include "modular_skyrat\modules\primitive_cooking_additions\code\stone_oven.dm" -#include "modular_skyrat\modules\primitive_cooking_additions\code\stone_stove.dm" -#include "modular_skyrat\modules\primitive_production\code\ceramics.dm" -#include "modular_skyrat\modules\primitive_production\code\glassblowing.dm" -#include "modular_skyrat\modules\primitive_production\code\production_skill.dm" -#include "modular_skyrat\modules\primitive_structures\code\fencing.dm" -#include "modular_skyrat\modules\primitive_structures\code\storage_structures.dm" -#include "modular_skyrat\modules\primitive_structures\code\totally_thatch_roof.dm" -#include "modular_skyrat\modules\primitive_structures\code\wall_torch.dm" -#include "modular_skyrat\modules\primitive_structures\code\windows.dm" -#include "modular_skyrat\modules\primitive_structures\code\wooden_ladder.dm" -#include "modular_skyrat\modules\prison_transport\code\outfits.dm" -#include "modular_skyrat\modules\projectiles\code\guns\misc\m6pdw.dm" -#include "modular_skyrat\modules\protected_roles\code\_job.dm" -#include "modular_skyrat\modules\protected_roles\code\antag_restricted_jobs.dm" -#include "modular_skyrat\modules\QOL\code\_under.dm" -#include "modular_skyrat\modules\QOL\code\datums\components\crafting\recipes\recipes_misc.dm" -#include "modular_skyrat\modules\QOL\code\game\objects\items\mop.dm" -#include "modular_skyrat\modules\radiosound\code\headset.dm" -#include "modular_skyrat\modules\reagent_forging\code\anvil.dm" -#include "modular_skyrat\modules\reagent_forging\code\crafting_bench.dm" -#include "modular_skyrat\modules\reagent_forging\code\crafting_bench_recipes.dm" -#include "modular_skyrat\modules\reagent_forging\code\forge.dm" -#include "modular_skyrat\modules\reagent_forging\code\forge_clothing.dm" -#include "modular_skyrat\modules\reagent_forging\code\forge_items.dm" -#include "modular_skyrat\modules\reagent_forging\code\forge_recipes.dm" -#include "modular_skyrat\modules\reagent_forging\code\forge_weapons.dm" -#include "modular_skyrat\modules\reagent_forging\code\reagent_component.dm" -#include "modular_skyrat\modules\reagent_forging\code\smith_skill.dm" -#include "modular_skyrat\modules\reagent_forging\code\tool_override.dm" -#include "modular_skyrat\modules\reagent_forging\code\water_basin.dm" -#include "modular_skyrat\modules\records_on_examine\code\record_manifest.dm" -#include "modular_skyrat\modules\records_on_examine\code\record_variables.dm" -#include "modular_skyrat\modules\records_on_examine\code\records_procs.dm" -#include "modular_skyrat\modules\records_on_examine\code\view_exploitables.dm" -#include "modular_skyrat\modules\resleeving\code\rsd_interface.dm" -#include "modular_skyrat\modules\resleeving\code\research\resleeving_research.dm" -#include "modular_skyrat\modules\rod-stopper\code\immovable_skyrat.dm" -#include "modular_skyrat\modules\rod-stopper\code\rodstopper.dm" -#include "modular_skyrat\modules\salon\code\barber.dm" -#include "modular_skyrat\modules\salon\code\barber_chair.dm" -#include "modular_skyrat\modules\salon\code\barbervend.dm" -#include "modular_skyrat\modules\salon\code\clothing.dm" -#include "modular_skyrat\modules\salon\code\fur_dyer.dm" -#include "modular_skyrat\modules\salon\code\hand_dryer.dm" -#include "modular_skyrat\modules\salon\code\misc_items.dm" -#include "modular_skyrat\modules\salon\code\pipette.dm" -#include "modular_skyrat\modules\salon\code\scissors.dm" -#include "modular_skyrat\modules\salon\code\sprays.dm" -#include "modular_skyrat\modules\salon\code\straight_razor.dm" -#include "modular_skyrat\modules\science_tools\medical_tool_designs.dm" -#include "modular_skyrat\modules\science_tools\research.dm" -#include "modular_skyrat\modules\science_tools\tool_designs.dm" -#include "modular_skyrat\modules\science_tools\tools.dm" -#include "modular_skyrat\modules\sec_haul\code\corrections_officer\corrections_officer.dm" -#include "modular_skyrat\modules\sec_haul\code\corrections_officer\corrections_officer_equipment.dm" -#include "modular_skyrat\modules\sec_haul\code\corrections_officer\landmarks.dm" -#include "modular_skyrat\modules\sec_haul\code\guns\ammo.dm" -#include "modular_skyrat\modules\sec_haul\code\guns\armory_spawns.dm" -#include "modular_skyrat\modules\sec_haul\code\guns\bullets.dm" -#include "modular_skyrat\modules\sec_haul\code\guns\cargo_stuff.dm" -#include "modular_skyrat\modules\sec_haul\code\misc\ai_module.dm" -#include "modular_skyrat\modules\sec_haul\code\misc\bullet_drive.dm" -#include "modular_skyrat\modules\sec_haul\code\misc\decals.dm" -#include "modular_skyrat\modules\sec_haul\code\misc\packs.dm" -#include "modular_skyrat\modules\sec_haul\code\misc\vending.dm" -#include "modular_skyrat\modules\sec_haul\code\peacekeeper\armadyne_clothing.dm" -#include "modular_skyrat\modules\sec_haul\code\peacekeeper\peacekeeper_clothing.dm" -#include "modular_skyrat\modules\sec_haul\code\peacekeeper\peacekeeper_hammer.dm" -#include "modular_skyrat\modules\sec_haul\code\peacekeeper\peacekeeper_lockers.dm" -#include "modular_skyrat\modules\self_actualization_device\code\self_actualization_device.dm" -#include "modular_skyrat\modules\server_overflow\code\chat_link.dm" -#include "modular_skyrat\modules\server_overflow\code\client_procs.dm" -#include "modular_skyrat\modules\server_overflow\code\server_connect_panel.dm" -#include "modular_skyrat\modules\SEVA_suit\code\seva_obj.dm" -#include "modular_skyrat\modules\SEVA_suit\code\suit_voucher.dm" -#include "modular_skyrat\modules\shotgunrebalance\code\ammobox.dm" -#include "modular_skyrat\modules\shotgunrebalance\code\autolathe_design.dm" -#include "modular_skyrat\modules\shotgunrebalance\code\shotgun.dm" -#include "modular_skyrat\modules\SiliconQoL\code\_onclick.dm" -#include "modular_skyrat\modules\SiliconQoL\code\robotic_factory.dm" -#include "modular_skyrat\modules\skyrat-uplinks\code\categories\bundles.dm" -#include "modular_skyrat\modules\skyrat-uplinks\code\categories\dangerous.dm" -#include "modular_skyrat\modules\skyrat-uplinks\code\categories\device_tools.dm" -#include "modular_skyrat\modules\skyrat-uplinks\code\categories\stealthy_tools.dm" -#include "modular_skyrat\modules\skyrat-uplinks\code\categories\stealthy_weapons.dm" -#include "modular_skyrat\modules\skyrat-uplinks\code\categories\suits.dm" -#include "modular_skyrat\modules\skyrat_access_helpers\accesshelpers.dm" -#include "modular_skyrat\modules\soulstone_changes\code\soulstone.dm" -#include "modular_skyrat\modules\soulstone_changes\code\components\return_on_death.dm" -#include "modular_skyrat\modules\space_vines\scythes.dm" -#include "modular_skyrat\modules\space_vines\venus.dm" -#include "modular_skyrat\modules\space_vines\vine_mutations.dm" -#include "modular_skyrat\modules\space_vines\vine_structure.dm" -#include "modular_skyrat\modules\stasisrework\code\all_nodes.dm" -#include "modular_skyrat\modules\stasisrework\code\bodybag.dm" -#include "modular_skyrat\modules\stasisrework\code\bodybag_structure.dm" -#include "modular_skyrat\modules\stasisrework\code\machine_circuitboards.dm" -#include "modular_skyrat\modules\stasisrework\code\medical_designs.dm" -#include "modular_skyrat\modules\stasisrework\code\stasissleeper.dm" -#include "modular_skyrat\modules\station_traits\code\station_traits.dm" -#include "modular_skyrat\modules\stone\code\ore_veins.dm" -#include "modular_skyrat\modules\stone\code\stone.dm" -#include "modular_skyrat\modules\stormtrooper\code\stormtrooper_clothes.dm" -#include "modular_skyrat\modules\subsystems\code\ticket_ping\adminhelp.dm" -#include "modular_skyrat\modules\subsystems\code\ticket_ping\preference.dm" -#include "modular_skyrat\modules\subsystems\code\ticket_ping\ticket_ss.dm" -#include "modular_skyrat\modules\Syndie_edits\code\area.dm" -#include "modular_skyrat\modules\Syndie_edits\code\syndie_edits.dm" -#include "modular_skyrat\modules\synths\code\defib.dm" -#include "modular_skyrat\modules\synths\code\research_nodes.dm" -#include "modular_skyrat\modules\synths\code\bodyparts\brain.dm" -#include "modular_skyrat\modules\synths\code\bodyparts\ears.dm" -#include "modular_skyrat\modules\synths\code\bodyparts\eyes.dm" -#include "modular_skyrat\modules\synths\code\bodyparts\heart.dm" -#include "modular_skyrat\modules\synths\code\bodyparts\limbs.dm" -#include "modular_skyrat\modules\synths\code\bodyparts\liver.dm" -#include "modular_skyrat\modules\synths\code\bodyparts\lungs.dm" -#include "modular_skyrat\modules\synths\code\bodyparts\power_cord.dm" -#include "modular_skyrat\modules\synths\code\bodyparts\silicon_alt_brains.dm" -#include "modular_skyrat\modules\synths\code\bodyparts\stomach.dm" -#include "modular_skyrat\modules\synths\code\bodyparts\tongue.dm" -#include "modular_skyrat\modules\synths\code\reagents\blood_pack.dm" -#include "modular_skyrat\modules\synths\code\reagents\pill.dm" -#include "modular_skyrat\modules\synths\code\reagents\pill_bottles.dm" -#include "modular_skyrat\modules\synths\code\reagents\reagents.dm" -#include "modular_skyrat\modules\synths\code\species\prefsmenu.dm" -#include "modular_skyrat\modules\synths\code\species\screen.dm" -#include "modular_skyrat\modules\synths\code\species\synthetic.dm" -#include "modular_skyrat\modules\synths\code\surgery\mechanic_steps.dm" -#include "modular_skyrat\modules\synths\code\surgery\robot_brain_surgery.dm" -#include "modular_skyrat\modules\synths\code\surgery\robot_chassis_restoration.dm" -#include "modular_skyrat\modules\synths\code\surgery\robot_healing.dm" -#include "modular_skyrat\modules\tableflip\code\flipped_table.dm" -#include "modular_skyrat\modules\tagline\code\world.dm" -#include "modular_skyrat\modules\teshari\code\_clothing_defines.dm" -#include "modular_skyrat\modules\teshari\code\_teshari.dm" -#include "modular_skyrat\modules\teshari\code\language_holder.dm" -#include "modular_skyrat\modules\teshari\code\schechi.dm" -#include "modular_skyrat\modules\teshari\code\teshari_bodytype.dm" -#include "modular_skyrat\modules\teshari\code\teshari_clothes.dm" -#include "modular_skyrat\modules\ticket_counter\code\counter.dm" -#include "modular_skyrat\modules\time_clock\code\console.dm" -#include "modular_skyrat\modules\time_clock\code\console_tgui.dm" -#include "modular_skyrat\modules\time_clock\code\mind.dm" -#include "modular_skyrat\modules\time_clock\code\off_duty_component.dm" -#include "modular_skyrat\modules\title_screen\code\_title_screen_defines.dm" -#include "modular_skyrat\modules\title_screen\code\new_player.dm" -#include "modular_skyrat\modules\title_screen\code\title_screen_controls.dm" -#include "modular_skyrat\modules\title_screen\code\title_screen_html.dm" -#include "modular_skyrat\modules\title_screen\code\title_screen_pref_middleware.dm" -#include "modular_skyrat\modules\title_screen\code\title_screen_subsystem.dm" -#include "modular_skyrat\modules\tribal_extended\code\crafting.dm" -#include "modular_skyrat\modules\tribal_extended\code\recipes.dm" -#include "modular_skyrat\modules\tribal_extended\code\ammo\caseless\arrow.dm" -#include "modular_skyrat\modules\tribal_extended\code\ammo\reusable\arrow.dm" -#include "modular_skyrat\modules\tribal_extended\code\weapons\bow.dm" -#include "modular_skyrat\modules\tribal_extended\code\weapons\shield.dm" -#include "modular_skyrat\modules\tribal_extended\code\weapons\sword.dm" -#include "modular_skyrat\modules\trim_tokens\code\cards_ids.dm" -#include "modular_skyrat\modules\trim_tokens\code\trim_tokens.dm" -#include "modular_skyrat\modules\turretid\code\turret_id_system.dm" -#include "modular_skyrat\modules\verbs\code\looc.dm" -#include "modular_skyrat\modules\verbs\code\say.dm" -#include "modular_skyrat\modules\verbs\code\subtle.dm" -#include "modular_skyrat\modules\veteran_only\code\job_types.dm" -#include "modular_skyrat\modules\veteran_only\code\species_types.dm" -#include "modular_skyrat\modules\vox_sprites\code\color.dm" -#include "modular_skyrat\modules\vox_sprites\code\head.dm" -#include "modular_skyrat\modules\vox_sprites\code\security.dm" -#include "modular_skyrat\modules\vox_sprites\code\sneakers.dm" -#include "modular_skyrat\modules\wargame_projectors\code\game_kit.dm" -#include "modular_skyrat\modules\wargame_projectors\code\holograms.dm" -#include "modular_skyrat\modules\wargame_projectors\code\projectors.dm" -#include "modular_skyrat\modules\window_airbags\code\window_airbag.dm" -#include "modular_skyrat\modules\wrestlingring\code\wrestlingring.dm" -#include "modular_skyrat\modules\xenoarch\code\modules\hydroponics\amauri.dm" -#include "modular_skyrat\modules\xenoarch\code\modules\hydroponics\gelthi.dm" -#include "modular_skyrat\modules\xenoarch\code\modules\hydroponics\jurlmah.dm" -#include "modular_skyrat\modules\xenoarch\code\modules\hydroponics\nofruit.dm" -#include "modular_skyrat\modules\xenoarch\code\modules\hydroponics\shand.dm" -#include "modular_skyrat\modules\xenoarch\code\modules\hydroponics\surik.dm" -#include "modular_skyrat\modules\xenoarch\code\modules\hydroponics\telriis.dm" -#include "modular_skyrat\modules\xenoarch\code\modules\hydroponics\thaadra.dm" -#include "modular_skyrat\modules\xenoarch\code\modules\hydroponics\vale.dm" -#include "modular_skyrat\modules\xenoarch\code\modules\hydroponics\vaporsac.dm" -#include "modular_skyrat\modules\xenoarch\code\modules\research\xenoarch\designs_and_tech.dm" -#include "modular_skyrat\modules\xenoarch\code\modules\research\xenoarch\glassblowing_integration.dm" -#include "modular_skyrat\modules\xenoarch\code\modules\research\xenoarch\strange_rock.dm" -#include "modular_skyrat\modules\xenoarch\code\modules\research\xenoarch\xenoarch_item.dm" -#include "modular_skyrat\modules\xenoarch\code\modules\research\xenoarch\xenoarch_machine.dm" -#include "modular_skyrat\modules\xenoarch\code\modules\research\xenoarch\xenoarch_reward.dm" -#include "modular_skyrat\modules\xenoarch\code\modules\research\xenoarch\xenoarch_tool.dm" -#include "modular_skyrat\modules\xenos_skyrat_redo\code\base_skyrat_xeno.dm" -#include "modular_skyrat\modules\xenos_skyrat_redo\code\human_defense.dm" -#include "modular_skyrat\modules\xenos_skyrat_redo\code\larva.dm" -#include "modular_skyrat\modules\xenos_skyrat_redo\code\xeno_types\defender.dm" -#include "modular_skyrat\modules\xenos_skyrat_redo\code\xeno_types\drone.dm" -#include "modular_skyrat\modules\xenos_skyrat_redo\code\xeno_types\praetorian.dm" -#include "modular_skyrat\modules\xenos_skyrat_redo\code\xeno_types\queen.dm" -#include "modular_skyrat\modules\xenos_skyrat_redo\code\xeno_types\ravager.dm" -#include "modular_skyrat\modules\xenos_skyrat_redo\code\xeno_types\rouny.dm" -#include "modular_skyrat\modules\xenos_skyrat_redo\code\xeno_types\sentinel.dm" -#include "modular_skyrat\modules\xenos_skyrat_redo\code\xeno_types\spitter.dm" -#include "modular_skyrat\modules\xenos_skyrat_redo\code\xeno_types\warrior.dm" +#include "modular_nova\master_files\code\_globalvars\configuration.dm" +#include "modular_nova\master_files\code\_globalvars\regexes.dm" +#include "modular_nova\master_files\code\_globalvars\religion.dm" +#include "modular_nova\master_files\code\_globalvars\text.dm" +#include "modular_nova\master_files\code\_globalvars\lists\ambience.dm" +#include "modular_nova\master_files\code\_globalvars\lists\chat.dm" +#include "modular_nova\master_files\code\_onclick\cyborg.dm" +#include "modular_nova\master_files\code\controllers\configuration\entries\config_entries.dm" +#include "modular_nova\master_files\code\controllers\subsystem\dbcore.dm" +#include "modular_nova\master_files\code\controllers\subsystem\events.dm" +#include "modular_nova\master_files\code\controllers\subsystem\language.dm" +#include "modular_nova\master_files\code\datums\ai_laws.dm" +#include "modular_nova\master_files\code\datums\emotes.dm" +#include "modular_nova\master_files\code\datums\ert.dm" +#include "modular_nova\master_files\code\datums\outfit.dm" +#include "modular_nova\master_files\code\datums\ai_laws\laws_ghost_role.dm" +#include "modular_nova\master_files\code\datums\bodypart_overlays\bodypart_overlay.dm" +#include "modular_nova\master_files\code\datums\bodypart_overlays\mutant_bodypart_overlay.dm" +#include "modular_nova\master_files\code\datums\components\crafting.dm" +#include "modular_nova\master_files\code\datums\components\damage_tracker.dm" +#include "modular_nova\master_files\code\datums\components\fullauto.dm" +#include "modular_nova\master_files\code\datums\components\grillable.dm" +#include "modular_nova\master_files\code\datums\components\leash.dm" +#include "modular_nova\master_files\code\datums\components\shielded_suit.dm" +#include "modular_nova\master_files\code\datums\components\tippable.dm" +#include "modular_nova\master_files\code\datums\greyscale\config_types\greyscale_configs.dm" +#include "modular_nova\master_files\code\datums\id_trim\jobs.dm" +#include "modular_nova\master_files\code\datums\id_trim\solfed.dm" +#include "modular_nova\master_files\code\datums\id_trim\syndicate.dm" +#include "modular_nova\master_files\code\datums\keybinding\mob.dm" +#include "modular_nova\master_files\code\datums\mind\_mind.dm" +#include "modular_nova\master_files\code\datums\mood_events\drink_events.dm" +#include "modular_nova\master_files\code\datums\mood_events\generic_negative_events.dm" +#include "modular_nova\master_files\code\datums\mood_events\needs_events.dm" +#include "modular_nova\master_files\code\datums\mutations\_mutations.dm" +#include "modular_nova\master_files\code\datums\mutations\chameleon.dm" +#include "modular_nova\master_files\code\datums\mutations\hulk.dm" +#include "modular_nova\master_files\code\datums\quirks\_quirk.dm" +#include "modular_nova\master_files\code\datums\quirks\negative_quirks\all_nighter.dm" +#include "modular_nova\master_files\code\datums\quirks\negative_quirks\blooddeficiency.dm" +#include "modular_nova\master_files\code\datums\quirks\negative_quirks\brainproblems.dm" +#include "modular_nova\master_files\code\datums\quirks\negative_quirks\gifted.dm" +#include "modular_nova\master_files\code\datums\quirks\negative_quirks\heavy_sleeper.dm" +#include "modular_nova\master_files\code\datums\quirks\negative_quirks\narcolepsy.dm" +#include "modular_nova\master_files\code\datums\quirks\negative_quirks\nerve_staple.dm" +#include "modular_nova\master_files\code\datums\quirks\neutral_quirks\equipping.dm" +#include "modular_nova\master_files\code\datums\quirks\neutral_quirks\lungs.dm" +#include "modular_nova\master_files\code\datums\records\record.dm" +#include "modular_nova\master_files\code\datums\station_traits\negative_traits.dm" +#include "modular_nova\master_files\code\datums\storage\storage.dm" +#include "modular_nova\master_files\code\datums\storage\subtypes\pockets.dm" +#include "modular_nova\master_files\code\datums\traits\good.dm" +#include "modular_nova\master_files\code\datums\traits\negative.dm" +#include "modular_nova\master_files\code\datums\traits\neutral.dm" +#include "modular_nova\master_files\code\datums\votes\_vote_datum.dm" +#include "modular_nova\master_files\code\datums\votes\map_vote.dm" +#include "modular_nova\master_files\code\game\atoms.dm" +#include "modular_nova\master_files\code\game\sound.dm" +#include "modular_nova\master_files\code\game\area\areas\ruins\lavaland.dm" +#include "modular_nova\master_files\code\game\effects\spawners\random\structure.dm" +#include "modular_nova\master_files\code\game\gamemodes\dynamic.dm" +#include "modular_nova\master_files\code\game\gamemodes\objective.dm" +#include "modular_nova\master_files\code\game\gamemodes\dynamic\dynamic_rulesets_midround.dm" +#include "modular_nova\master_files\code\game\gamemodes\dynamic\dynamic_rulesets_roundstart.dm" +#include "modular_nova\master_files\code\game\machinery\deployable.dm" +#include "modular_nova\master_files\code\game\machinery\hologram.dm" +#include "modular_nova\master_files\code\game\machinery\limbgrower.dm" +#include "modular_nova\master_files\code\game\machinery\suit_storage.dm" +#include "modular_nova\master_files\code\game\machinery\doors\firedoor.dm" +#include "modular_nova\master_files\code\game\objects\items.dm" +#include "modular_nova\master_files\code\game\objects\objs.dm" +#include "modular_nova\master_files\code\game\objects\effects\decals\remains.dm" +#include "modular_nova\master_files\code\game\objects\effects\decals\cleanable\humans.dm" +#include "modular_nova\master_files\code\game\objects\effects\decals\cleanable\misc.dm" +#include "modular_nova\master_files\code\game\objects\effects\decals\turfdecals\markings.dm" +#include "modular_nova\master_files\code\game\objects\effects\decals\turfdecals\tilecoloring.dm" +#include "modular_nova\master_files\code\game\objects\items\AI_modules.dm" +#include "modular_nova\master_files\code\game\objects\items\cards_ids.dm" +#include "modular_nova\master_files\code\game\objects\items\dyekit.dm" +#include "modular_nova\master_files\code\game\objects\items\hhmirror.dm" +#include "modular_nova\master_files\code\game\objects\items\holy_weapons.dm" +#include "modular_nova\master_files\code\game\objects\items\oxygen_candle.dm" +#include "modular_nova\master_files\code\game\objects\items\RCD.dm" +#include "modular_nova\master_files\code\game\objects\items\religion.dm" +#include "modular_nova\master_files\code\game\objects\items\scratchingstone.dm" +#include "modular_nova\master_files\code\game\objects\items\wiki_manuals.dm" +#include "modular_nova\master_files\code\game\objects\items\circuitboards\machines\machine_circuitboards.dm" +#include "modular_nova\master_files\code\game\objects\items\devices\chameleonproj.dm" +#include "modular_nova\master_files\code\game\objects\items\devices\laserpointer.dm" +#include "modular_nova\master_files\code\game\objects\items\devices\mod_link.dm" +#include "modular_nova\master_files\code\game\objects\items\devices\traitordevices.dm" +#include "modular_nova\master_files\code\game\objects\items\devices\radio\radio.dm" +#include "modular_nova\master_files\code\game\objects\items\stacks\sheets\sheet_types.dm" +#include "modular_nova\master_files\code\game\objects\items\storage\backpack.dm" +#include "modular_nova\master_files\code\game\objects\items\storage\boxes.dm" +#include "modular_nova\master_files\code\game\objects\items\storage\job_boxes.dm" +#include "modular_nova\master_files\code\game\objects\items\tools\weldingtool.dm" +#include "modular_nova\master_files\code\game\objects\structures\mannequin.dm" +#include "modular_nova\master_files\code\game\objects\structures\mirror.dm" +#include "modular_nova\master_files\code\game\objects\structures\railings.dm" +#include "modular_nova\master_files\code\game\objects\structures\sauna_oven.dm" +#include "modular_nova\master_files\code\game\objects\structures\tables_racks.dm" +#include "modular_nova\master_files\code\game\objects\structures\towel_bins.dm" +#include "modular_nova\master_files\code\game\objects\structures\trash_pile.dm" +#include "modular_nova\master_files\code\game\objects\structures\watercloset.dm" +#include "modular_nova\master_files\code\game\objects\structures\beds-chairs\sofa.dm" +#include "modular_nova\master_files\code\game\objects\structures\crates_lockers\secure\cargo.dm" +#include "modular_nova\master_files\code\game\objects\structures\crates_lockers\secure\security.dm" +#include "modular_nova\master_files\code\game\turfs\closed\_closed.dm" +#include "modular_nova\master_files\code\game\turfs\open\floor\iron_floor.dm" +#include "modular_nova\master_files\code\game\turfs\open\space\space.dm" +#include "modular_nova\master_files\code\modules\admin\admin.dm" +#include "modular_nova\master_files\code\modules\antagonists\_common\antag_datum.dm" +#include "modular_nova\master_files\code\modules\antagonists\ashwalker\ashwalker.dm" +#include "modular_nova\master_files\code\modules\antagonists\changeling\changeling.dm" +#include "modular_nova\master_files\code\modules\antagonists\changeling\powers\tiny_prick.dm" +#include "modular_nova\master_files\code\modules\antagonists\cult\cult_items.dm" +#include "modular_nova\master_files\code\modules\antagonists\ert\ert.dm" +#include "modular_nova\master_files\code\modules\antagonists\pirate\pirate_outfits.dm" +#include "modular_nova\master_files\code\modules\antagonists\pirate\pirate_shuttle_equipment.dm" +#include "modular_nova\master_files\code\modules\antagonists\traitor\objectives\kill_pet.dm" +#include "modular_nova\master_files\code\modules\antagonists\traitor\objectives\smuggling.dm" +#include "modular_nova\master_files\code\modules\assembly\flash.dm" +#include "modular_nova\master_files\code\modules\asset_cache\assets\plumbing.dm" +#include "modular_nova\master_files\code\modules\atmospherics\machinery\pipes\pipes.dm" +#include "modular_nova\master_files\code\modules\bitrunning\orders\disks.dm" +#include "modular_nova\master_files\code\modules\bitrunning\orders\tech.dm" +#include "modular_nova\master_files\code\modules\buildmode\bm_mode.dm" +#include "modular_nova\master_files\code\modules\buildmode\submodes\offercontrol.dm" +#include "modular_nova\master_files\code\modules\cargo\goodies.dm" +#include "modular_nova\master_files\code\modules\cargo\orderconsole.dm" +#include "modular_nova\master_files\code\modules\cargo\bounties\medical.dm" +#include "modular_nova\master_files\code\modules\cargo\exports\tools.dm" +#include "modular_nova\master_files\code\modules\cargo\exports\traitor.dm" +#include "modular_nova\master_files\code\modules\cargo\markets\market_items\weapons.dm" +#include "modular_nova\master_files\code\modules\cargo\packs\general.dm" +#include "modular_nova\master_files\code\modules\cargo\packs\security.dm" +#include "modular_nova\master_files\code\modules\cargo\packs\service.dm" +#include "modular_nova\master_files\code\modules\client\playtime.dm" +#include "modular_nova\master_files\code\modules\client\preferences.dm" +#include "modular_nova\master_files\code\modules\client\preferences_savefile.dm" +#include "modular_nova\master_files\code\modules\client\preferences\_admin.dm" +#include "modular_nova\master_files\code\modules\client\preferences\_preference.dm" +#include "modular_nova\master_files\code\modules\client\preferences\auto_dementor.dm" +#include "modular_nova\master_files\code\modules\client\preferences\be_antag.dm" +#include "modular_nova\master_files\code\modules\client\preferences\body_size.dm" +#include "modular_nova\master_files\code\modules\client\preferences\brain.dm" +#include "modular_nova\master_files\code\modules\client\preferences\clothing.dm" +#include "modular_nova\master_files\code\modules\client\preferences\delete_sparks.dm" +#include "modular_nova\master_files\code\modules\client\preferences\emote_overlay.dm" +#include "modular_nova\master_files\code\modules\client\preferences\emote_panel.dm" +#include "modular_nova\master_files\code\modules\client\preferences\erp_preferences.dm" +#include "modular_nova\master_files\code\modules\client\preferences\face_cursor_combat_mode.dm" +#include "modular_nova\master_files\code\modules\client\preferences\flavor_text.dm" +#include "modular_nova\master_files\code\modules\client\preferences\genitals.dm" +#include "modular_nova\master_files\code\modules\client\preferences\ghost.dm" +#include "modular_nova\master_files\code\modules\client\preferences\headshot.dm" +#include "modular_nova\master_files\code\modules\client\preferences\laugh.dm" +#include "modular_nova\master_files\code\modules\client\preferences\loadout_override_preference.dm" +#include "modular_nova\master_files\code\modules\client\preferences\looc.dm" +#include "modular_nova\master_files\code\modules\client\preferences\mutant_parts.dm" +#include "modular_nova\master_files\code\modules\client\preferences\out_of_combat_fov_darkness.dm" +#include "modular_nova\master_files\code\modules\client\preferences\scream.dm" +#include "modular_nova\master_files\code\modules\client\preferences\tgui_prefs_migration.dm" +#include "modular_nova\master_files\code\modules\client\preferences\underwear_color.dm" +#include "modular_nova\master_files\code\modules\client\preferences\voice.dm" +#include "modular_nova\master_files\code\modules\client\preferences\middleware\languages.dm" +#include "modular_nova\master_files\code\modules\client\preferences\middleware\limbs_and_markings.dm" +#include "modular_nova\master_files\code\modules\client\preferences\middleware\species_additional_changes.dm" +#include "modular_nova\master_files\code\modules\client\preferences\quirks\death_consequences.dm" +#include "modular_nova\master_files\code\modules\client\preferences\species_features\digitigrade_legs.dm" +#include "modular_nova\master_files\code\modules\client\preferences\species_features\generate_side_shots.dm" +#include "modular_nova\master_files\code\modules\clothing\anthro_clothes.dm" +#include "modular_nova\master_files\code\modules\clothing\base_clothes.dm" +#include "modular_nova\master_files\code\modules\clothing\chameleon.dm" +#include "modular_nova\master_files\code\modules\clothing\clothing.dm" +#include "modular_nova\master_files\code\modules\clothing\towels.dm" +#include "modular_nova\master_files\code\modules\clothing\back\antigravityharness.dm" +#include "modular_nova\master_files\code\modules\clothing\clothing_variation_overrides\eyes.dm" +#include "modular_nova\master_files\code\modules\clothing\clothing_variation_overrides\head.dm" +#include "modular_nova\master_files\code\modules\clothing\clothing_variation_overrides\mask.dm" +#include "modular_nova\master_files\code\modules\clothing\clothing_variation_overrides\shoes.dm" +#include "modular_nova\master_files\code\modules\clothing\clothing_variation_overrides\suit.dm" +#include "modular_nova\master_files\code\modules\clothing\clothing_variation_overrides\under.dm" +#include "modular_nova\master_files\code\modules\clothing\glasses\_glasses.dm" +#include "modular_nova\master_files\code\modules\clothing\glasses\nerve_staple.dm" +#include "modular_nova\master_files\code\modules\clothing\head\_head.dm" +#include "modular_nova\master_files\code\modules\clothing\head\akula_official.dm" +#include "modular_nova\master_files\code\modules\clothing\head\cowboy.dm" +#include "modular_nova\master_files\code\modules\clothing\head\monkey_magnification_helmet.dm" +#include "modular_nova\master_files\code\modules\clothing\masks\_masks.dm" +#include "modular_nova\master_files\code\modules\clothing\outfits\ert.dm" +#include "modular_nova\master_files\code\modules\clothing\outfits\standard.dm" +#include "modular_nova\master_files\code\modules\clothing\shoes\bananashoes.dm" +#include "modular_nova\master_files\code\modules\clothing\shoes\boots.dm" +#include "modular_nova\master_files\code\modules\clothing\shoes\sneakers.dm" +#include "modular_nova\master_files\code\modules\clothing\shoes\wheelys.dm" +#include "modular_nova\master_files\code\modules\clothing\suits\_suits.dm" +#include "modular_nova\master_files\code\modules\clothing\suits\labcoat.dm" +#include "modular_nova\master_files\code\modules\clothing\suits\skinsuits.dm" +#include "modular_nova\master_files\code\modules\clothing\suits\wintercoats.dm" +#include "modular_nova\master_files\code\modules\clothing\under\_under.dm" +#include "modular_nova\master_files\code\modules\clothing\under\accessories.dm" +#include "modular_nova\master_files\code\modules\clothing\under\akula_jobs.dm" +#include "modular_nova\master_files\code\modules\clothing\under\akula_official.dm" +#include "modular_nova\master_files\code\modules\clothing\under\color.dm" +#include "modular_nova\master_files\code\modules\clothing\under\costume.dm" +#include "modular_nova\master_files\code\modules\clothing\under\misc.dm" +#include "modular_nova\master_files\code\modules\clothing\under\shorts_pants.dm" +#include "modular_nova\master_files\code\modules\clothing\under\skirts_dresses.dm" +#include "modular_nova\master_files\code\modules\clothing\under\syndicate.dm" +#include "modular_nova\master_files\code\modules\clothing\under\jobs\cargo.dm" +#include "modular_nova\master_files\code\modules\clothing\under\jobs\centcom.dm" +#include "modular_nova\master_files\code\modules\clothing\under\jobs\command.dm" +#include "modular_nova\master_files\code\modules\clothing\under\jobs\engineering.dm" +#include "modular_nova\master_files\code\modules\clothing\under\jobs\medical.dm" +#include "modular_nova\master_files\code\modules\clothing\under\jobs\rnd.dm" +#include "modular_nova\master_files\code\modules\clothing\under\jobs\security.dm" +#include "modular_nova\master_files\code\modules\clothing\under\jobs\civilian\civilian.dm" +#include "modular_nova\master_files\code\modules\clothing\under\jobs\civilian\suits.dm" +#include "modular_nova\master_files\code\modules\events\_event.dm" +#include "modular_nova\master_files\code\modules\experisci\experiment.dm" +#include "modular_nova\master_files\code\modules\food_and_drinks\recipes\food_mixtures.dm" +#include "modular_nova\master_files\code\modules\jobs\off_duty_check.dm" +#include "modular_nova\master_files\code\modules\jobs\departments\departments.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\_job.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\_job_attire.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\atmospheric_technician.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\botanist.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\captain.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\chaplain.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\chemist.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\chief_engineer.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\chief_medical_officer.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\clown.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\coroner.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\curator.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\cyborg.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\geneticist.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\head_of_personnel.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\head_of_security.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\janitor.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\medical_doctor.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\mime.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\paramedic.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\psychologist.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\research_director.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\roboticist.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\scientist.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\security_officer.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\shaft_miner.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\station_engineer.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\virologist.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\warden.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\spawner\blackmarket.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\spawner\ds2.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\spawner\freighter_crew.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\spawner\ghostcafe.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\spawner\interdyne_planetary_base.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\spawner\tarkon.dm" +#include "modular_nova\master_files\code\modules\language\language.dm" +#include "modular_nova\master_files\code\modules\language\language_holder.dm" +#include "modular_nova\master_files\code\modules\library\skill_learning\skill_station.dm" +#include "modular_nova\master_files\code\modules\logging\categories\log_category_debug.dm" +#include "modular_nova\master_files\code\modules\logging\categories\log_category_game.dm" +#include "modular_nova\master_files\code\modules\logging\categories\log_category_uplink.dm" +#include "modular_nova\master_files\code\modules\mapfluff\ruins\objects_and_mobs\necropolis_gate.dm" +#include "modular_nova\master_files\code\modules\mapfluff\ruins\spaceruin_code\oldstation\oldstation_cytology.dm" +#include "modular_nova\master_files\code\modules\mining\equipment\explorer_gear.dm" +#include "modular_nova\master_files\code\modules\mob\login.dm" +#include "modular_nova\master_files\code\modules\mob\dead\new_player\latejoin_menu.dm" +#include "modular_nova\master_files\code\modules\mob\dead\new_player\preferences_setup.dm" +#include "modular_nova\master_files\code\modules\mob\living\blood.dm" +#include "modular_nova\master_files\code\modules\mob\living\emote_popup.dm" +#include "modular_nova\master_files\code\modules\mob\living\examine_tgui.dm" +#include "modular_nova\master_files\code\modules\mob\living\living.dm" +#include "modular_nova\master_files\code\modules\mob\living\living_defines.dm" +#include "modular_nova\master_files\code\modules\mob\living\living_movement.dm" +#include "modular_nova\master_files\code\modules\mob\living\brain\MMI.dm" +#include "modular_nova\master_files\code\modules\mob\living\carbon\death.dm" +#include "modular_nova\master_files\code\modules\mob\living\carbon\human_helpers.dm" +#include "modular_nova\master_files\code\modules\mob\living\carbon\human\death.dm" +#include "modular_nova\master_files\code\modules\mob\living\carbon\human\species.dm" +#include "modular_nova\master_files\code\modules\mob\living\carbon\human\species_type\lizardpeople.dm" +#include "modular_nova\master_files\code\modules\mob\living\carbon\human\species_type\podpeople.dm" +#include "modular_nova\master_files\code\modules\mob\living\carbon\human\species_type\snail.dm" +#include "modular_nova\master_files\code\modules\mob\living\human\monkey.dm" +#include "modular_nova\master_files\code\modules\mob\living\human\species.dm" +#include "modular_nova\master_files\code\modules\mob\living\sillicon\robot.dm" +#include "modular_nova\master_files\code\modules\mob\living\simple_animal\simple_animal.dm" +#include "modular_nova\master_files\code\modules\mob\living\simple_animal\friendly\bumbles.dm" +#include "modular_nova\master_files\code\modules\mob\living\simple_animal\friendly\dogs.dm" +#include "modular_nova\master_files\code\modules\mob\living\simple_animal\friendly\poppy.dm" +#include "modular_nova\master_files\code\modules\mob\living\simple_animal\friendly\syndicatefox.dm" +#include "modular_nova\master_files\code\modules\mob\living\simple_animal\hostile\bubblegum.dm" +#include "modular_nova\master_files\code\modules\mob\living\simple_animal\hostile\grabbagmob.dm" +#include "modular_nova\master_files\code\modules\mob\living\simple_animal\hostile\zombie.dm" +#include "modular_nova\master_files\code\modules\mob_spawn\mob_spawn.dm" +#include "modular_nova\master_files\code\modules\mob_spawn\ghost_roles\mining_roles.dm" +#include "modular_nova\master_files\code\modules\mod\mod_clothes.dm" +#include "modular_nova\master_files\code\modules\mod\mod_types.dm" +#include "modular_nova\master_files\code\modules\mod\modules\_module.dm" +#include "modular_nova\master_files\code\modules\mod\modules\modules_antag.dm" +#include "modular_nova\master_files\code\modules\mod\modules\modules_supply.dm" +#include "modular_nova\master_files\code\modules\modular_computers\computers\item\laptop_presets.dm" +#include "modular_nova\master_files\code\modules\modular_computers\file_system\programs\maintenance\camera.dm" +#include "modular_nova\master_files\code\modules\pai\card.dm" +#include "modular_nova\master_files\code\modules\paperwork\employment_contract.dm" +#include "modular_nova\master_files\code\modules\paperwork\stamps.dm" +#include "modular_nova\master_files\code\modules\power\cable.dm" +#include "modular_nova\master_files\code\modules\power\powernet.dm" +#include "modular_nova\master_files\code\modules\power\lighting\light_mapping_helpers.dm" +#include "modular_nova\master_files\code\modules\power\singularity\containment_field.dm" +#include "modular_nova\master_files\code\modules\projectiles\boxes_magazines\external\shotgun.dm" +#include "modular_nova\master_files\code\modules\projectiles\boxes_magazines\external\smg.dm" +#include "modular_nova\master_files\code\modules\projectiles\guns\ballistic.dm" +#include "modular_nova\master_files\code\modules\projectiles\guns\energy.dm" +#include "modular_nova\master_files\code\modules\projectiles\guns\ballistic\revolver.dm" +#include "modular_nova\master_files\code\modules\projectiles\guns\ballistic\suppressor.dm" +#include "modular_nova\master_files\code\modules\projectiles\guns\ballistic\bows\_bow.dm" +#include "modular_nova\master_files\code\modules\projectiles\guns\ballistic\bows\bow_quivers.dm" +#include "modular_nova\master_files\code\modules\projectiles\guns\ballistic\bows\bow_types.dm" +#include "modular_nova\master_files\code\modules\reagents\bottle.dm" +#include "modular_nova\master_files\code\modules\reagents\reagent_containers.dm" +#include "modular_nova\master_files\code\modules\reagents\reagent_dispenser.dm" +#include "modular_nova\master_files\code\modules\reagents\chemistry\colors.dm" +#include "modular_nova\master_files\code\modules\reagents\chemistry\holder.dm" +#include "modular_nova\master_files\code\modules\reagents\chemistry\reagents.dm" +#include "modular_nova\master_files\code\modules\reagents\chemistry\recipes.dm" +#include "modular_nova\master_files\code\modules\reagents\medicine_reagents\medicine_reagents.dm" +#include "modular_nova\master_files\code\modules\reagents\withdrawal\generic_addictions.dm" +#include "modular_nova\master_files\code\modules\religion\religious_sects.dm" +#include "modular_nova\master_files\code\modules\research\designs\biogenerator_designs.dm" +#include "modular_nova\master_files\code\modules\research\designs\limbgrower_designs.dm" +#include "modular_nova\master_files\code\modules\research\designs\mechfabricator_designs.dm" +#include "modular_nova\master_files\code\modules\research\designs\medical_designs.dm" +#include "modular_nova\master_files\code\modules\research\designs\misc_designs.dm" +#include "modular_nova\master_files\code\modules\research\designs\tool_designs.dm" +#include "modular_nova\master_files\code\modules\research\machinery\departmental_circuit_imprinter.dm" +#include "modular_nova\master_files\code\modules\research\techweb\all_nodes.dm" +#include "modular_nova\master_files\code\modules\shuttle\shuttle.dm" +#include "modular_nova\master_files\code\modules\shuttle\shuttle_events\meteors.dm" +#include "modular_nova\master_files\code\modules\surgery\surgery.dm" +#include "modular_nova\master_files\code\modules\surgery\bodyparts\_bodyparts.dm" +#include "modular_nova\master_files\code\modules\surgery\organs\tongue.dm" +#include "modular_nova\master_files\code\modules\surgery\organs\external\wings\functional_wings.dm" +#include "modular_nova\master_files\code\modules\surgery\organs\external\wings\wings.dm" +#include "modular_nova\master_files\code\modules\surgery\organs\internal\appendix\_appendix.dm" +#include "modular_nova\master_files\code\modules\vehicles\sealed.dm" +#include "modular_nova\master_files\code\modules\vehicles\snowmobile.dm" +#include "modular_nova\modules\access_helpers\accesshelpers.dm" +#include "modular_nova\modules\additional_circuit\code\_designs.dm" +#include "modular_nova\modules\additional_circuit\code\cell_reader.dm" +#include "modular_nova\modules\additional_circuit\code\interact_item.dm" +#include "modular_nova\modules\additional_circuit\code\mining_circuit.dm" +#include "modular_nova\modules\additional_circuit\code\target_scanner.dm" +#include "modular_nova\modules\admin\code\aooc.dm" +#include "modular_nova\modules\admin\code\fix_chat.dm" +#include "modular_nova\modules\admin\code\loud_say.dm" +#include "modular_nova\modules\admin\code\player_ranks.dm" +#include "modular_nova\modules\admin\code\sooc.dm" +#include "modular_nova\modules\admin\code\smites\pie.dm" +#include "modular_nova\modules\advanced_engineering\code\adv_engineering.dm" +#include "modular_nova\modules\advanced_shuttles\code\closet.dm" +#include "modular_nova\modules\advanced_shuttles\code\computer.dm" +#include "modular_nova\modules\advanced_shuttles\code\decals.dm" +#include "modular_nova\modules\advanced_shuttles\code\shuttles.dm" +#include "modular_nova\modules\advanced_shuttles\code\turfs.dm" +#include "modular_nova\modules\aesthetics\abductor\abductor.dm" +#include "modular_nova\modules\aesthetics\airalarm\code\airalarm.dm" +#include "modular_nova\modules\aesthetics\airlock\code\airlock.dm" +#include "modular_nova\modules\aesthetics\airlock_machines\airlock_machines.dm" +#include "modular_nova\modules\aesthetics\apc\code\apc.dm" +#include "modular_nova\modules\aesthetics\blast_door\code\blast_door.dm" +#include "modular_nova\modules\aesthetics\bureaucracy\bureaucracy.dm" +#include "modular_nova\modules\aesthetics\camera\code\camera.dm" +#include "modular_nova\modules\aesthetics\cells\cell.dm" +#include "modular_nova\modules\aesthetics\chemical_tanks\chemical_tanks.dm" +#include "modular_nova\modules\aesthetics\clothing\clothing.dm" +#include "modular_nova\modules\aesthetics\computer\code\computer.dm" +#include "modular_nova\modules\aesthetics\device\device.dm" +#include "modular_nova\modules\aesthetics\directwindow\code\window.dm" +#include "modular_nova\modules\aesthetics\disposals\code\disposals.dm" +#include "modular_nova\modules\aesthetics\emitter\code\emitter.dm" +#include "modular_nova\modules\aesthetics\extinguisher\code\extinguisher.dm" +#include "modular_nova\modules\aesthetics\firealarm\code\firealarm.dm" +#include "modular_nova\modules\aesthetics\firedoor\code\firedoor.dm" +#include "modular_nova\modules\aesthetics\flag\code\signs_flags.dm" +#include "modular_nova\modules\aesthetics\floors\code\floors.dm" +#include "modular_nova\modules\aesthetics\furniture\bed.dm" +#include "modular_nova\modules\aesthetics\guns\code\guns.dm" +#include "modular_nova\modules\aesthetics\guns\code\magazine.dm" +#include "modular_nova\modules\aesthetics\heater\code\spaceheater.dm" +#include "modular_nova\modules\aesthetics\heavy_lathe\heavy_lathe.dm" +#include "modular_nova\modules\aesthetics\implanter\implanter.dm" +#include "modular_nova\modules\aesthetics\intercom\code\intercom.dm" +#include "modular_nova\modules\aesthetics\janitor\janitor.dm" +#include "modular_nova\modules\aesthetics\keyed_doors\code\keyed_door.dm" +#include "modular_nova\modules\aesthetics\kitchen\kitchen.dm" +#include "modular_nova\modules\aesthetics\lights\code\lighting.dm" +#include "modular_nova\modules\aesthetics\lightswitch\code\lightswitch.dm" +#include "modular_nova\modules\aesthetics\morgue\code\morgue.dm" +#include "modular_nova\modules\aesthetics\plasticflaps\code\plasticflaps.dm" +#include "modular_nova\modules\aesthetics\posters\posters.dm" +#include "modular_nova\modules\aesthetics\rack\code\rack.dm" +#include "modular_nova\modules\aesthetics\shieldgen\code\shieldgen.dm" +#include "modular_nova\modules\aesthetics\stationobjs\stationobjs.dm" +#include "modular_nova\modules\aesthetics\status_display\code\status_display.dm" +#include "modular_nova\modules\aesthetics\storage\storage.dm" +#include "modular_nova\modules\aesthetics\telescience\telescience.dm" +#include "modular_nova\modules\aesthetics\tools\code\tools.dm" +#include "modular_nova\modules\aesthetics\vending\access_vending.dm" +#include "modular_nova\modules\aesthetics\walls\code\walls.dm" +#include "modular_nova\modules\aesthetics\washing_machine\code\washing_machine.dm" +#include "modular_nova\modules\aesthetics\windows\code\windows.dm" +#include "modular_nova\modules\airlock_override\code\airlock_override.dm" +#include "modular_nova\modules\akula\code\wetsuit.dm" +#include "modular_nova\modules\alerts\code\alert_sound_to_playing.dm" +#include "modular_nova\modules\alerts\code\config.dm" +#include "modular_nova\modules\alerts\code\default_announcer.dm" +#include "modular_nova\modules\alerts\code\security_level_datums.dm" +#include "modular_nova\modules\alerts\code\security_level_procs.dm" +#include "modular_nova\modules\alt_vox\code\voc_sounds_mil.dm" +#include "modular_nova\modules\alt_vox\code\vox_procs.dm" +#include "modular_nova\modules\alt_vox\code\vox_sounds_bms.dm" +#include "modular_nova\modules\alt_vox\code\vox_sounds_hl1.dm" +#include "modular_nova\modules\alternative_job_titles\code\alt_job_titles.dm" +#include "modular_nova\modules\alternative_job_titles\code\job.dm" +#include "modular_nova\modules\ammo_workbench\code\ammo_workbench.dm" +#include "modular_nova\modules\ammo_workbench\code\design_disks.dm" +#include "modular_nova\modules\apc_arcing\apc.dm" +#include "modular_nova\modules\armaments\code\armament_component.dm" +#include "modular_nova\modules\armaments\code\armament_entries.dm" +#include "modular_nova\modules\armaments\code\armament_station.dm" +#include "modular_nova\modules\ashwalkers\code\buildings\antfarm.dm" +#include "modular_nova\modules\ashwalkers\code\buildings\ash_clothing_vendor.dm" +#include "modular_nova\modules\ashwalkers\code\buildings\ash_farming.dm" +#include "modular_nova\modules\ashwalkers\code\buildings\ash_tendril.dm" +#include "modular_nova\modules\ashwalkers\code\buildings\fuelwell.dm" +#include "modular_nova\modules\ashwalkers\code\buildings\gutluncher_foodtrough.dm" +#include "modular_nova\modules\ashwalkers\code\buildings\planttank.dm" +#include "modular_nova\modules\ashwalkers\code\buildings\railroad.dm" +#include "modular_nova\modules\ashwalkers\code\buildings\tendril_cursing.dm" +#include "modular_nova\modules\ashwalkers\code\buildings\wormfarm.dm" +#include "modular_nova\modules\ashwalkers\code\clothing\ash_armour.dm" +#include "modular_nova\modules\ashwalkers\code\clothing\hands.dm" +#include "modular_nova\modules\ashwalkers\code\clothing\head.dm" +#include "modular_nova\modules\ashwalkers\code\clothing\misc.dm" +#include "modular_nova\modules\ashwalkers\code\clothing\neck.dm" +#include "modular_nova\modules\ashwalkers\code\clothing\shoes.dm" +#include "modular_nova\modules\ashwalkers\code\clothing\under.dm" +#include "modular_nova\modules\ashwalkers\code\effects\ash_ritual.dm" +#include "modular_nova\modules\ashwalkers\code\effects\ash_rituals.dm" +#include "modular_nova\modules\ashwalkers\code\effects\ash_rune.dm" +#include "modular_nova\modules\ashwalkers\code\items\ash_centrifuge.dm" +#include "modular_nova\modules\ashwalkers\code\items\ash_seedmesh.dm" +#include "modular_nova\modules\ashwalkers\code\items\ash_surgery.dm" +#include "modular_nova\modules\ashwalkers\code\items\ash_tool.dm" +#include "modular_nova\modules\ashwalkers\code\items\ash_weapon.dm" +#include "modular_nova\modules\ashwalkers\code\items\ashwalker_shaman.dm" +#include "modular_nova\modules\ashwalkers\code\species\Ashwalkers.dm" +#include "modular_nova\modules\ashwalkers\code\species\damage_datum.dm" +#include "modular_nova\modules\ashwalkers\code\turfs\closed_turfs.dm" +#include "modular_nova\modules\ashwalkers\code\turfs\icemoon_tiles.dm" +#include "modular_nova\modules\automapper\code\area_spawn_entries.dm" +#include "modular_nova\modules\automapper\code\area_spawn_subsystem.dm" +#include "modular_nova\modules\automapper\code\automap_template.dm" +#include "modular_nova\modules\automapper\code\automapper_subsystem.dm" +#include "modular_nova\modules\autotransfer\code\autotransfer.dm" +#include "modular_nova\modules\autotransfer\code\autotransfer_config.dm" +#include "modular_nova\modules\autotransfer\code\shuttle.dm" +#include "modular_nova\modules\autotransfer\code\transfer_vote.dm" +#include "modular_nova\modules\awaymissions_nova\code\gateway_key.dm" +#include "modular_nova\modules\awaymissions_nova\mothership_astrum\abductor_ai.dm" +#include "modular_nova\modules\awaymissions_nova\mothership_astrum\area.dm" +#include "modular_nova\modules\awaymissions_nova\mothership_astrum\fluff.dm" +#include "modular_nova\modules\awaymissions_nova\mothership_astrum\gear.dm" +#include "modular_nova\modules\awaymissions_nova\mothership_astrum\mob.dm" +#include "modular_nova\modules\awaymissions_nova\mothership_astrum\mob_spawn.dm" +#include "modular_nova\modules\awaymissions_nova\mothership_astrum\spawners.dm" +#include "modular_nova\modules\banning\code\skyrat_bans.dm" +#include "modular_nova\modules\barricades\code\barricade.dm" +#include "modular_nova\modules\barsigns\code\barsigns.dm" +#include "modular_nova\modules\basic_mobs\code\bananaspider.dm" +#include "modular_nova\modules\basic_mobs\code\chinchilla.dm" +#include "modular_nova\modules\basic_mobs\code\kiwi.dm" +#include "modular_nova\modules\better_vox\code\vox_bodycolor.dm" +#include "modular_nova\modules\better_vox\code\vox_bodyparts.dm" +#include "modular_nova\modules\better_vox\code\vox_clothing.dm" +#include "modular_nova\modules\better_vox\code\vox_species.dm" +#include "modular_nova\modules\better_vox\code\vox_sprite_accessories.dm" +#include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\area.dm" +#include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\choice_beacon.dm" +#include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\disk.dm" +#include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\fluff.dm" +#include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\fog_of_war.dm" +#include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\ghost_spawner.dm" +#include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\iv_drip.dm" +#include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\mapping_helpers.dm" +#include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\mine.dm" +#include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\mobs.dm" +#include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\mod.dm" +#include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\outfit.dm" +#include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\turf.dm" +#include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\virtual_domain.dm" +#include "modular_nova\modules\black_mesa\code\armor.dm" +#include "modular_nova\modules\black_mesa\code\bump_teleporter.dm" +#include "modular_nova\modules\black_mesa\code\drops.dm" +#include "modular_nova\modules\black_mesa\code\fluff.dm" +#include "modular_nova\modules\black_mesa\code\follow_component.dm" +#include "modular_nova\modules\black_mesa\code\gateway.dm" +#include "modular_nova\modules\black_mesa\code\ghost_spawners.dm" +#include "modular_nova\modules\black_mesa\code\guns.dm" +#include "modular_nova\modules\black_mesa\code\healing_puddle.dm" +#include "modular_nova\modules\black_mesa\code\lambda_teleporter.dm" +#include "modular_nova\modules\black_mesa\code\mapping_fluff.dm" +#include "modular_nova\modules\black_mesa\code\objects.dm" +#include "modular_nova\modules\black_mesa\code\projectiles.dm" +#include "modular_nova\modules\black_mesa\code\rationpacks.dm" +#include "modular_nova\modules\black_mesa\code\shield_pylon.dm" +#include "modular_nova\modules\black_mesa\code\shockplant.dm" +#include "modular_nova\modules\black_mesa\code\spawners.dm" +#include "modular_nova\modules\black_mesa\code\turfs.dm" +#include "modular_nova\modules\black_mesa\code\turrets.dm" +#include "modular_nova\modules\black_mesa\code\uber_teleporter.dm" +#include "modular_nova\modules\black_mesa\code\weapons.dm" +#include "modular_nova\modules\black_mesa\code\xen_crystal.dm" +#include "modular_nova\modules\black_mesa\code\armaments\__armament_bodyarmor.dm" +#include "modular_nova\modules\black_mesa\code\armaments\_armament_primary.dm" +#include "modular_nova\modules\black_mesa\code\armaments\_armaments_secondary.dm" +#include "modular_nova\modules\black_mesa\code\armaments\armament_explosives.dm" +#include "modular_nova\modules\black_mesa\code\armaments\armament_medical.dm" +#include "modular_nova\modules\black_mesa\code\armaments\armament_melee.dm" +#include "modular_nova\modules\black_mesa\code\armaments\armament_miscellaneous.dm" +#include "modular_nova\modules\black_mesa\code\armaments\armament_utility.dm" +#include "modular_nova\modules\black_mesa\code\armaments\hecu_armament_station.dm" +#include "modular_nova\modules\black_mesa\code\mobs\bullsquid.dm" +#include "modular_nova\modules\black_mesa\code\mobs\gordon_freeman.dm" +#include "modular_nova\modules\black_mesa\code\mobs\headcrab.dm" +#include "modular_nova\modules\black_mesa\code\mobs\headcrab_zombie.dm" +#include "modular_nova\modules\black_mesa\code\mobs\houndeye.dm" +#include "modular_nova\modules\black_mesa\code\mobs\human_mobs.dm" +#include "modular_nova\modules\black_mesa\code\mobs\mob_spawners.dm" +#include "modular_nova\modules\black_mesa\code\mobs\nihilanth.dm" +#include "modular_nova\modules\black_mesa\code\mobs\vortigaunt.dm" +#include "modular_nova\modules\blastwave_outfits\code\cargo_packs.dm" +#include "modular_nova\modules\blastwave_outfits\code\clothing\blastwave_head.dm" +#include "modular_nova\modules\blastwave_outfits\code\clothing\blastwave_mask.dm" +#include "modular_nova\modules\blastwave_outfits\code\clothing\blastwave_suit.dm" +#include "modular_nova\modules\blastwave_outfits\code\clothing\blastwave_uniform.dm" +#include "modular_nova\modules\blueshield\code\blueshield.dm" +#include "modular_nova\modules\blueshield\code\closet.dm" +#include "modular_nova\modules\blueshield\code\clothing.dm" +#include "modular_nova\modules\blueshield\code\encryptionkey.dm" +#include "modular_nova\modules\blueshield\code\landmarks.dm" +#include "modular_nova\modules\blueshield\code\medkit.dm" +#include "modular_nova\modules\blueshield\code\devices\crew.dm" +#include "modular_nova\modules\blueshield\code\devices\sensor_device.dm" +#include "modular_nova\modules\blueshield\code\modsuit\mod_theme.dm" +#include "modular_nova\modules\blueshield\code\modsuit\mod_type.dm" +#include "modular_nova\modules\bluespace_miner\code\bluespace_miner.dm" +#include "modular_nova\modules\bodyparts\code\_mutant_bodyparts.dm" +#include "modular_nova\modules\bodyparts\code\akula_bodyparts.dm" +#include "modular_nova\modules\bodyparts\code\aquatic_bodyparts.dm" +#include "modular_nova\modules\bodyparts\code\ashwalker_bodyparts.dm" +#include "modular_nova\modules\bodyparts\code\ghoul_bodyparts.dm" +#include "modular_nova\modules\bodyparts\code\golem_bodyparts.dm" +#include "modular_nova\modules\bodyparts\code\human_bodyparts.dm" +#include "modular_nova\modules\bodyparts\code\insect_bodyparts.dm" +#include "modular_nova\modules\bodyparts\code\lizard_bodyparts.dm" +#include "modular_nova\modules\bodyparts\code\luminescent_bodyparts.dm" +#include "modular_nova\modules\bodyparts\code\moth_bodyparts.dm" +#include "modular_nova\modules\bodyparts\code\mushperson_bodyparts.dm" +#include "modular_nova\modules\bodyparts\code\parts.dm" +#include "modular_nova\modules\bodyparts\code\podperson_bodyparts.dm" +#include "modular_nova\modules\bodyparts\code\roundstartslime_bodyparts.dm" +#include "modular_nova\modules\bodyparts\code\skrell_bodyparts.dm" +#include "modular_nova\modules\bodyparts\code\slime_bodyparts.dm" +#include "modular_nova\modules\bodyparts\code\snail_bodyparts.dm" +#include "modular_nova\modules\bodyparts\code\stargazer_bodyparts.dm" +#include "modular_nova\modules\bodyparts\code\taur_bodyparts.dm" +#include "modular_nova\modules\bodyparts\code\teshari_bodyparts.dm" +#include "modular_nova\modules\bodyparts\code\vox_bodyparts.dm" +#include "modular_nova\modules\bodyparts\code\xenohybrid_bodyparts.dm" +#include "modular_nova\modules\bongs\code\bong.dm" +#include "modular_nova\modules\borg_buffs\code\robot.dm" +#include "modular_nova\modules\borg_buffs\code\snack_dispensor.dm" +#include "modular_nova\modules\borgs\code\inventory.dm" +#include "modular_nova\modules\borgs\code\mechafabricator_designs.dm" +#include "modular_nova\modules\borgs\code\robot.dm" +#include "modular_nova\modules\borgs\code\robot_defines.dm" +#include "modular_nova\modules\borgs\code\robot_items.dm" +#include "modular_nova\modules\borgs\code\robot_model.dm" +#include "modular_nova\modules\borgs\code\robot_upgrade.dm" +#include "modular_nova\modules\borgs\code\update_icons.dm" +#include "modular_nova\modules\bsa_overhaul\code\admin_verb.dm" +#include "modular_nova\modules\bsa_overhaul\code\bsa_cannon.dm" +#include "modular_nova\modules\bsa_overhaul\code\bsa_computer.dm" +#include "modular_nova\modules\bsa_overhaul\code\station_goal.dm" +#include "modular_nova\modules\bsrpd\code\bsrpd.dm" +#include "modular_nova\modules\cargo\code\goodies.dm" +#include "modular_nova\modules\cargo\code\packs.dm" +#include "modular_nova\modules\cargo\code\items\AFAD.dm" +#include "modular_nova\modules\cargo\code\items\gbp_punchcard.dm" +#include "modular_nova\modules\cargo\code\items\improvedRCD.dm" +#include "modular_nova\modules\cargo_teleporter\code\cargo_teleporter.dm" +#include "modular_nova\modules\cell_component\code\cell_component.dm" +#include "modular_nova\modules\cellguns\code\cellgun_cells.dm" +#include "modular_nova\modules\cellguns\code\cellguns.dm" +#include "modular_nova\modules\cellguns\code\medigun_cells.dm" +#include "modular_nova\modules\cellguns\code\medigun_research.dm" +#include "modular_nova\modules\cellguns\code\mediguns.dm" +#include "modular_nova\modules\central_command_module\code\computers\command_report_computer.dm" +#include "modular_nova\modules\central_command_module\code\computers\ert_control_computer.dm" +#include "modular_nova\modules\central_command_module\code\computers\station_goal_computer.dm" +#include "modular_nova\modules\central_command_module\code\obj\wall.dm" +#include "modular_nova\modules\chadian\code\chadian.dm" +#include "modular_nova\modules\chaplain\code\mortis.dm" +#include "modular_nova\modules\chat_colors\code\chat_color.dm" +#include "modular_nova\modules\clock_cult\code\antagonist.dm" +#include "modular_nova\modules\clock_cult\code\area.dm" +#include "modular_nova\modules\clock_cult\code\globals.dm" +#include "modular_nova\modules\clock_cult\code\language.dm" +#include "modular_nova\modules\clock_cult\code\outfit.dm" +#include "modular_nova\modules\clock_cult\code\outpost_of_cogs.dm" +#include "modular_nova\modules\clock_cult\code\portal.dm" +#include "modular_nova\modules\clock_cult\code\status_effects.dm" +#include "modular_nova\modules\clock_cult\code\temp_visual.dm" +#include "modular_nova\modules\clock_cult\code\turf.dm" +#include "modular_nova\modules\clock_cult\code\actions\_action.dm" +#include "modular_nova\modules\clock_cult\code\actions\recall_slab.dm" +#include "modular_nova\modules\clock_cult\code\actions\whirring_convergence.dm" +#include "modular_nova\modules\clock_cult\code\components\brass_spreader.dm" +#include "modular_nova\modules\clock_cult\code\components\hint_element.dm" +#include "modular_nova\modules\clock_cult\code\components\pickup_element.dm" +#include "modular_nova\modules\clock_cult\code\components\structure_info_element.dm" +#include "modular_nova\modules\clock_cult\code\items\clockwork_slab.dm" +#include "modular_nova\modules\clock_cult\code\items\clothing.dm" +#include "modular_nova\modules\clock_cult\code\items\integration_cog.dm" +#include "modular_nova\modules\clock_cult\code\items\replica_fabricator.dm" +#include "modular_nova\modules\clock_cult\code\items\tools.dm" +#include "modular_nova\modules\clock_cult\code\items\weaponry.dm" +#include "modular_nova\modules\clock_cult\code\mobs\clockwork_marauder.dm" +#include "modular_nova\modules\clock_cult\code\research\asset_cache.dm" +#include "modular_nova\modules\clock_cult\code\research\clockwork_research.dm" +#include "modular_nova\modules\clock_cult\code\scriptures\_scripture.dm" +#include "modular_nova\modules\clock_cult\code\scriptures\preservation\clockwork_armaments.dm" +#include "modular_nova\modules\clock_cult\code\scriptures\preservation\summon_marauder.dm" +#include "modular_nova\modules\clock_cult\code\scriptures\servitude\hateful_manacles.dm" +#include "modular_nova\modules\clock_cult\code\scriptures\servitude\integration_cog.dm" +#include "modular_nova\modules\clock_cult\code\scriptures\servitude\kindle.dm" +#include "modular_nova\modules\clock_cult\code\scriptures\servitude\vitality_sigil.dm" +#include "modular_nova\modules\clock_cult\code\scriptures\structures\interdiction_lens.dm" +#include "modular_nova\modules\clock_cult\code\scriptures\structures\ocular_warden.dm" +#include "modular_nova\modules\clock_cult\code\scriptures\structures\prosperity_prism.dm" +#include "modular_nova\modules\clock_cult\code\scriptures\structures\technologists_lectern.dm" +#include "modular_nova\modules\clock_cult\code\scriptures\structures\tinkerers_cache.dm" +#include "modular_nova\modules\clock_cult\code\scriptures\structures\transmission_sigil.dm" +#include "modular_nova\modules\clock_cult\code\structures\_powered.dm" +#include "modular_nova\modules\clock_cult\code\structures\_structure.dm" +#include "modular_nova\modules\clock_cult\code\structures\airlock.dm" +#include "modular_nova\modules\clock_cult\code\structures\gear_base.dm" +#include "modular_nova\modules\clock_cult\code\structures\interdiction_lens.dm" +#include "modular_nova\modules\clock_cult\code\structures\ocular_warden.dm" +#include "modular_nova\modules\clock_cult\code\structures\prosperity_prism.dm" +#include "modular_nova\modules\clock_cult\code\structures\technologists_lectern.dm" +#include "modular_nova\modules\clock_cult\code\structures\tinkerers_cache.dm" +#include "modular_nova\modules\clock_cult\code\structures\sigil\_sigil.dm" +#include "modular_nova\modules\clock_cult\code\structures\sigil\sigil_research.dm" +#include "modular_nova\modules\clock_cult\code\structures\sigil\sigil_transmission.dm" +#include "modular_nova\modules\clock_cult\code\structures\sigil\vitality_sigil.dm" +#include "modular_nova\modules\clock_cult\code\structures\traps\trap.dm" +#include "modular_nova\modules\clock_cult\code\structures\traps\recievers\flipper.dm" +#include "modular_nova\modules\clock_cult\code\structures\traps\recievers\skewer.dm" +#include "modular_nova\modules\clock_cult\code\structures\traps\senders\delay.dm" +#include "modular_nova\modules\clock_cult\code\structures\traps\senders\lever.dm" +#include "modular_nova\modules\clock_cult\code\structures\traps\senders\pressure_sensor.dm" +#include "modular_nova\modules\clothing_improvements\code\chaplain.dm" +#include "modular_nova\modules\clothing_improvements\code\holsters.dm" +#include "modular_nova\modules\colony_fabricator\code\colony_fabricator.dm" +#include "modular_nova\modules\colony_fabricator\code\looping_sounds.dm" +#include "modular_nova\modules\colony_fabricator\code\repacking_element.dm" +#include "modular_nova\modules\colony_fabricator\code\appliances\chem_machines.dm" +#include "modular_nova\modules\colony_fabricator\code\appliances\co2_cracker.dm" +#include "modular_nova\modules\colony_fabricator\code\appliances\foodricator.dm" +#include "modular_nova\modules\colony_fabricator\code\appliances\recycler.dm" +#include "modular_nova\modules\colony_fabricator\code\appliances\wall_cell_charger.dm" +#include "modular_nova\modules\colony_fabricator\code\appliances\wind_turbine.dm" +#include "modular_nova\modules\colony_fabricator\code\construction\doors.dm" +#include "modular_nova\modules\colony_fabricator\code\construction\manual_door.dm" +#include "modular_nova\modules\colony_fabricator\code\construction\turfs.dm" +#include "modular_nova\modules\colony_fabricator\code\construction\windows.dm" +#include "modular_nova\modules\colony_fabricator\code\design_datums\appliances.dm" +#include "modular_nova\modules\colony_fabricator\code\design_datums\construction.dm" +#include "modular_nova\modules\colony_fabricator\code\design_datums\equipment.dm" +#include "modular_nova\modules\colony_fabricator\code\design_datums\flatpack_machines.dm" +#include "modular_nova\modules\colony_fabricator\code\design_datums\tools.dm" +#include "modular_nova\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\computer_board.dm" +#include "modular_nova\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\construction.dm" +#include "modular_nova\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\equipment.dm" +#include "modular_nova\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\machine_boards.dm" +#include "modular_nova\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\stock_parts.dm" +#include "modular_nova\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\tools.dm" +#include "modular_nova\modules\colony_fabricator\code\design_datums\rations_printer_designs\ingredients.dm" +#include "modular_nova\modules\colony_fabricator\code\design_datums\rations_printer_designs\reagents.dm" +#include "modular_nova\modules\colony_fabricator\code\design_datums\rations_printer_designs\seeds.dm" +#include "modular_nova\modules\colony_fabricator\code\design_datums\rations_printer_designs\snacks.dm" +#include "modular_nova\modules\colony_fabricator\code\design_datums\rations_printer_designs\utensils.dm" +#include "modular_nova\modules\colony_fabricator\code\machines\arc_furnace.dm" +#include "modular_nova\modules\colony_fabricator\code\machines\ore_silo.dm" +#include "modular_nova\modules\colony_fabricator\code\machines\power_storage_unit.dm" +#include "modular_nova\modules\colony_fabricator\code\machines\rtg.dm" +#include "modular_nova\modules\colony_fabricator\code\machines\solar_panels.dm" +#include "modular_nova\modules\colony_fabricator\code\machines\solid_fuel_generator.dm" +#include "modular_nova\modules\colony_fabricator\code\machines\thermomachine.dm" +#include "modular_nova\modules\colony_fabricator\code\tools\tools.dm" +#include "modular_nova\modules\command_vendor\code\vending.dm" +#include "modular_nova\modules\company_imports\code\armament_component.dm" +#include "modular_nova\modules\company_imports\code\company_datums.dm" +#include "modular_nova\modules\company_imports\code\armament_datums\_armament_basetype.dm" +#include "modular_nova\modules\company_imports\code\armament_datums\akh_frontier.dm" +#include "modular_nova\modules\company_imports\code\armament_datums\deforest_medical.dm" +#include "modular_nova\modules\company_imports\code\armament_datums\jarnsmiour.dm" +#include "modular_nova\modules\company_imports\code\armament_datums\kahraman_industries.dm" +#include "modular_nova\modules\company_imports\code\armament_datums\microstar_energy.dm" +#include "modular_nova\modules\company_imports\code\armament_datums\nakamura_modsuits.dm" +#include "modular_nova\modules\company_imports\code\armament_datums\nri_military_surplus.dm" +#include "modular_nova\modules\company_imports\code\armament_datums\put_a_donk_on_it.dm" +#include "modular_nova\modules\company_imports\code\armament_datums\sol_defense.dm" +#include "modular_nova\modules\company_imports\code\armament_datums\vitezstvi_ammo.dm" +#include "modular_nova\modules\company_imports\code\datums\cargo_order.dm" +#include "modular_nova\modules\company_imports\code\datums\cargo_pack.dm" +#include "modular_nova\modules\company_imports\code\datums\hud.dm" +#include "modular_nova\modules\company_imports\code\objects\access.dm" +#include "modular_nova\modules\company_imports\code\objects\cargo_console_and_case.dm" +#include "modular_nova\modules\company_imports\code\objects\firing_pin.dm" +#include "modular_nova\modules\company_imports\code\objects\hud_glasses.dm" +#include "modular_nova\modules\company_imports\code\objects\keycard_auth.dm" +#include "modular_nova\modules\company_imports\code\objects\deforest\filled_organ_boxes.dm" +#include "modular_nova\modules\company_imports\code\objects\donk\donkfish_box.dm" +#include "modular_nova\modules\company_imports\code\objects\jarnsmiour\special_metals.dm" +#include "modular_nova\modules\company_imports\code\objects\microstar\mcr_attachment_kits.dm" +#include "modular_nova\modules\company_imports\code\objects\nakamura_modsuits\accretion_incompatibility.dm" +#include "modular_nova\modules\company_imports\code\objects\nakamura_modsuits\plate_compression_tech.dm" +#include "modular_nova\modules\company_imports\code\objects\vitezstvi\ammo_boxes.dm" +#include "modular_nova\modules\connecting_computer\code\_computer.dm" +#include "modular_nova\modules\connecting_computer\code\connectable_component.dm" +#include "modular_nova\modules\connecting_computer\code\non_connecting_computers.dm" +#include "modular_nova\modules\container_emotes\code\container_emotes.dm" +#include "modular_nova\modules\contractor\code\datums\contract.dm" +#include "modular_nova\modules\contractor\code\datums\contractor_datum.dm" +#include "modular_nova\modules\contractor\code\datums\contractor_hub.dm" +#include "modular_nova\modules\contractor\code\datums\contractor_items.dm" +#include "modular_nova\modules\contractor\code\datums\contractor_support.dm" +#include "modular_nova\modules\contractor\code\datums\contractor_tablet.dm" +#include "modular_nova\modules\contractor\code\datums\mind_datum.dm" +#include "modular_nova\modules\contractor\code\datums\objective.dm" +#include "modular_nova\modules\contractor\code\datums\midround\antag_datum.dm" +#include "modular_nova\modules\contractor\code\datums\midround\event.dm" +#include "modular_nova\modules\contractor\code\datums\midround\objective.dm" +#include "modular_nova\modules\contractor\code\datums\midround\outfit.dm" +#include "modular_nova\modules\contractor\code\datums\midround\ruleset.dm" +#include "modular_nova\modules\contractor\code\datums\midround\trim.dm" +#include "modular_nova\modules\contractor\code\items\baton.dm" +#include "modular_nova\modules\contractor\code\items\boxes.dm" +#include "modular_nova\modules\contractor\code\items\hook.dm" +#include "modular_nova\modules\contractor\code\items\misc.dm" +#include "modular_nova\modules\contractor\code\items\tablet.dm" +#include "modular_nova\modules\contractor\code\items\modsuit\modsuit.dm" +#include "modular_nova\modules\contractor\code\items\modsuit\modules.dm" +#include "modular_nova\modules\contractor\code\items\modsuit\theme.dm" +#include "modular_nova\modules\contractor\code\objects\supplypod.dm" +#include "modular_nova\modules\conveyor_sorter\code\conveyor_sorter.dm" +#include "modular_nova\modules\cortical_borer\code\cortical_borer.dm" +#include "modular_nova\modules\cortical_borer\code\cortical_borer_abilities.dm" +#include "modular_nova\modules\cortical_borer\code\cortical_borer_antag.dm" +#include "modular_nova\modules\cortical_borer\code\cortical_borer_chems.dm" +#include "modular_nova\modules\cortical_borer\code\cortical_borer_egg.dm" +#include "modular_nova\modules\cortical_borer\code\cortical_borer_items.dm" +#include "modular_nova\modules\cortical_borer\code\focus_datum.dm" +#include "modular_nova\modules\cortical_borer\code\status_effects.dm" +#include "modular_nova\modules\cortical_borer\code\evolution\borer_evolution.dm" +#include "modular_nova\modules\cortical_borer\code\evolution\evolution_datum.dm" +#include "modular_nova\modules\cortical_borer\code\evolution\evolution_diveworm.dm" +#include "modular_nova\modules\cortical_borer\code\evolution\evolution_general.dm" +#include "modular_nova\modules\cortical_borer\code\evolution\evolution_hivelord.dm" +#include "modular_nova\modules\cortical_borer\code\evolution\evolution_symbiote.dm" +#include "modular_nova\modules\cortical_borer\code\evolution\evolution_things\empowered_egg.dm" +#include "modular_nova\modules\crafting\crafting.dm" +#include "modular_nova\modules\cryosleep\code\admin.dm" +#include "modular_nova\modules\cryosleep\code\ai.dm" +#include "modular_nova\modules\cryosleep\code\config.dm" +#include "modular_nova\modules\cryosleep\code\cryo_console_return.dm" +#include "modular_nova\modules\cryosleep\code\cryopod.dm" +#include "modular_nova\modules\cryosleep\code\job.dm" +#include "modular_nova\modules\cryosleep\code\mind.dm" +#include "modular_nova\modules\cryosleep\code\mood.dm" +#include "modular_nova\modules\curatorbundle\Mushy.dm" +#include "modular_nova\modules\curatorbundle\Ronin.dm" +#include "modular_nova\modules\customization\__DEFINES\DNA.dm" +#include "modular_nova\modules\customization\__DEFINES\lists.dm" +#include "modular_nova\modules\customization\__DEFINES\loadout.dm" +#include "modular_nova\modules\customization\__HELPERS\DNA.dm" +#include "modular_nova\modules\customization\__HELPERS\global_lists.dm" +#include "modular_nova\modules\customization\__HELPERS\mobs.dm" +#include "modular_nova\modules\customization\__HELPERS\names.dm" +#include "modular_nova\modules\customization\__HELPERS\text.dm" +#include "modular_nova\modules\customization\_globalvars\lists.dm" +#include "modular_nova\modules\customization\_globalvars\names.dm" +#include "modular_nova\modules\customization\datums\dna.dm" +#include "modular_nova\modules\customization\datums\components\crafting\clothing.dm" +#include "modular_nova\modules\customization\datums\components\crafting\hemophage_recipes.dm" +#include "modular_nova\modules\customization\datums\components\crafting\recipes.dm" +#include "modular_nova\modules\customization\datums\components\crafting\teshari_recipes.dm" +#include "modular_nova\modules\customization\datums\keybinding\communication.dm" +#include "modular_nova\modules\customization\game\objects\items\balls.dm" +#include "modular_nova\modules\customization\game\objects\items\conversion_kits.dm" +#include "modular_nova\modules\customization\game\objects\items\instruments.dm" +#include "modular_nova\modules\customization\game\objects\items\plushes.dm" +#include "modular_nova\modules\customization\game\objects\items\devices\crutch.dm" +#include "modular_nova\modules\customization\game\objects\items\devices\ttsdevice.dm" +#include "modular_nova\modules\customization\game\objects\items\storage\belt.dm" +#include "modular_nova\modules\customization\game\objects\items\storage\rings.dm" +#include "modular_nova\modules\customization\game\objects\items\tanks\n2_tanks.dm" +#include "modular_nova\modules\customization\modules\client\preferences.dm" +#include "modular_nova\modules\customization\modules\client\augment\_augment.dm" +#include "modular_nova\modules\customization\modules\client\augment\implants.dm" +#include "modular_nova\modules\customization\modules\client\augment\limbs.dm" +#include "modular_nova\modules\customization\modules\client\augment\organs.dm" +#include "modular_nova\modules\customization\modules\clothing\accessories.dm" +#include "modular_nova\modules\customization\modules\clothing\toggle_base.dm" +#include "modular_nova\modules\customization\modules\clothing\ears\ears.dm" +#include "modular_nova\modules\customization\modules\clothing\glasses\glasses.dm" +#include "modular_nova\modules\customization\modules\clothing\glasses\hud.dm" +#include "modular_nova\modules\customization\modules\clothing\hands\hands.dm" +#include "modular_nova\modules\customization\modules\clothing\hands\rings.dm" +#include "modular_nova\modules\customization\modules\clothing\head\costume.dm" +#include "modular_nova\modules\customization\modules\clothing\head\head.dm" +#include "modular_nova\modules\customization\modules\clothing\head\jobs.dm" +#include "modular_nova\modules\customization\modules\clothing\head\trek.dm" +#include "modular_nova\modules\customization\modules\clothing\masks\breath.dm" +#include "modular_nova\modules\customization\modules\clothing\masks\gas_filter.dm" +#include "modular_nova\modules\customization\modules\clothing\masks\gasmask.dm" +#include "modular_nova\modules\customization\modules\clothing\masks\masquerade_mask.dm" +#include "modular_nova\modules\customization\modules\clothing\masks\paper.dm" +#include "modular_nova\modules\customization\modules\clothing\neck\_neck.dm" +#include "modular_nova\modules\customization\modules\clothing\neck\cloaks.dm" +#include "modular_nova\modules\customization\modules\clothing\neck\collars.dm" +#include "modular_nova\modules\customization\modules\clothing\outfits\akula.dm" +#include "modular_nova\modules\customization\modules\clothing\outfits\vox.dm" +#include "modular_nova\modules\customization\modules\clothing\shoes\shoes.dm" +#include "modular_nova\modules\customization\modules\clothing\storage\backpacks.dm" +#include "modular_nova\modules\customization\modules\clothing\storage\belts.dm" +#include "modular_nova\modules\customization\modules\clothing\suits\armor.dm" +#include "modular_nova\modules\customization\modules\clothing\suits\cloaks.dm" +#include "modular_nova\modules\customization\modules\clothing\suits\coats.dm" +#include "modular_nova\modules\customization\modules\clothing\suits\hoodies.dm" +#include "modular_nova\modules\customization\modules\clothing\suits\misc.dm" +#include "modular_nova\modules\customization\modules\clothing\suits\trek.dm" +#include "modular_nova\modules\customization\modules\clothing\under\accessories.dm" +#include "modular_nova\modules\customization\modules\clothing\under\costumes.dm" +#include "modular_nova\modules\customization\modules\clothing\under\misc.dm" +#include "modular_nova\modules\customization\modules\clothing\under\security.dm" +#include "modular_nova\modules\customization\modules\clothing\under\suits.dm" +#include "modular_nova\modules\customization\modules\clothing\under\sweaters.dm" +#include "modular_nova\modules\customization\modules\clothing\under\tauruniformscolor.dm" +#include "modular_nova\modules\customization\modules\clothing\under\utility_port\other_port.dm" +#include "modular_nova\modules\customization\modules\clothing\under\utility_port\suits_port.dm" +#include "modular_nova\modules\customization\modules\clothing\~donator\donator_clothing.dm" +#include "modular_nova\modules\customization\modules\clothing\~donator\donator_items.dm" +#include "modular_nova\modules\customization\modules\food_and_drinks\food\hemophage_food.dm" +#include "modular_nova\modules\customization\modules\food_and_drinks\food\scottish.dm" +#include "modular_nova\modules\customization\modules\food_and_drinks\food\SRseafood.dm" +#include "modular_nova\modules\customization\modules\food_and_drinks\food\teshari_food.dm" +#include "modular_nova\modules\customization\modules\food_and_drinks\recipes\drinks_recipes.dm" +#include "modular_nova\modules\customization\modules\hydroponics\grown\bananaspider.dm" +#include "modular_nova\modules\customization\modules\hydroponics\grown\kiri.dm" +#include "modular_nova\modules\customization\modules\hydroponics\grown\muli.dm" +#include "modular_nova\modules\customization\modules\hydroponics\grown\nakati.dm" +#include "modular_nova\modules\customization\modules\hydroponics\grown\piru.dm" +#include "modular_nova\modules\customization\modules\hydroponics\grown\tea_coffee.dm" +#include "modular_nova\modules\customization\modules\jobs\_job.dm" +#include "modular_nova\modules\customization\modules\language\_foreigner.dm" +#include "modular_nova\modules\customization\modules\language\_language_holder.dm" +#include "modular_nova\modules\customization\modules\language\ashtongue.dm" +#include "modular_nova\modules\customization\modules\language\beachbum.dm" +#include "modular_nova\modules\customization\modules\language\buzzwords.dm" +#include "modular_nova\modules\customization\modules\language\calcic.dm" +#include "modular_nova\modules\customization\modules\language\canilunzt.dm" +#include "modular_nova\modules\customization\modules\language\chitinclick.dm" +#include "modular_nova\modules\customization\modules\language\common.dm" +#include "modular_nova\modules\customization\modules\language\gutter.dm" +#include "modular_nova\modules\customization\modules\language\monkey.dm" +#include "modular_nova\modules\customization\modules\language\mothic.dm" +#include "modular_nova\modules\customization\modules\language\mushroom.dm" +#include "modular_nova\modules\customization\modules\language\nekomimetic.dm" +#include "modular_nova\modules\customization\modules\language\panslavic.dm" +#include "modular_nova\modules\customization\modules\language\piratespeak.dm" +#include "modular_nova\modules\customization\modules\language\shadowtongue.dm" +#include "modular_nova\modules\customization\modules\language\siiktajr.dm" +#include "modular_nova\modules\customization\modules\language\skrell.dm" +#include "modular_nova\modules\customization\modules\language\spacer.dm" +#include "modular_nova\modules\customization\modules\language\te_velu_akko.dm" +#include "modular_nova\modules\customization\modules\language\terrum.dm" +#include "modular_nova\modules\customization\modules\language\vox.dm" +#include "modular_nova\modules\customization\modules\language\xerxian.dm" +#include "modular_nova\modules\customization\modules\language\yangyu.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\preferences_setup.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\body_markings\body_marking_sets.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\body_markings\body_markings.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\body_markings\body_markings_akula.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\body_markings\body_markings_moth.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\body_markings\body_markings_synthliz.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\body_markings\body_markings_vox.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\ears.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\fluff.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\frills.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\genitals.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\hair.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\head_accessory.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\horns.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\ipc.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\moth_antennae.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\neck_accessory.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\skrell_hair.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\snout.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\spines.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\synthliz.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\tails.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\taur_types.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\vox.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\wings.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\xeno.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\underwear\bras.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\underwear\socks.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\underwear\undershirts.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\underwear\underwear.dm" +#include "modular_nova\modules\customization\modules\mob\living\living.dm" +#include "modular_nova\modules\customization\modules\mob\living\living_defines.dm" +#include "modular_nova\modules\customization\modules\mob\living\living_verbs.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\damage_procs.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\custom_bodytype.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\human.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\human_defines.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\status_procs.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\worn_overlays.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\MOD_sprite_accessories\mod_accessory_handler.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\MOD_sprite_accessories\mod_actions.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\MOD_sprite_accessories\mod_themes.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\akula.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\aquatic.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\dwarf.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\ghoul.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\humanoid.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\insect.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\lizard.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\mammal.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\monkey.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\moth.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\mushpeople.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\placeholder_helper.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\podweak.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\roundstartslime.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\skrell.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\tajaran.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\unathi.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\vox.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\vulpkanin.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\xeno.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\hemophage\_hemophage_defines.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\hemophage\_organ_corruption.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\hemophage\atrophied_lungs.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\hemophage\corrupted_liver.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\hemophage\corrupted_stomach.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\hemophage\corrupted_tongue.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_actions.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_organs.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_species.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_status_effects.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_tumor.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\hemophage\tumor_corruption.dm" +#include "modular_nova\modules\customization\modules\mob\living\silicon\examine.dm" +#include "modular_nova\modules\customization\modules\mob\living\silicon\topic.dm" +#include "modular_nova\modules\customization\modules\mob\living\simple_mob\examine.dm" +#include "modular_nova\modules\customization\modules\reagents\chemistry\reagents.dm" +#include "modular_nova\modules\customization\modules\reagents\chemistry\reagents\alcohol_reagents.dm" +#include "modular_nova\modules\customization\modules\reagents\chemistry\reagents\drink_reagents.dm" +#include "modular_nova\modules\customization\modules\reagents\chemistry\reagents\drinks.dm" +#include "modular_nova\modules\customization\modules\reagents\chemistry\reagents\food_reagents.dm" +#include "modular_nova\modules\customization\modules\reagents\chemistry\reagents\other_reagents.dm" +#include "modular_nova\modules\customization\modules\reagents\chemistry\reagents\pyrotechnic_reagents.dm" +#include "modular_nova\modules\customization\modules\reagents\chemistry\reagents\toxin_reagents.dm" +#include "modular_nova\modules\customization\modules\reagents\chemistry\recipes\medicine.dm" +#include "modular_nova\modules\customization\modules\surgery\bodyparts\_bodyparts.dm" +#include "modular_nova\modules\customization\modules\surgery\bodyparts\parts.dm" +#include "modular_nova\modules\customization\modules\surgery\bodyparts\robot_bodyparts.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\cap.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\ears.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\eyes.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\fluff.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\frills.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\genitals.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\head_accessory.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\horns.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\moth_antennae.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\moth_markings.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\neck_accessory.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\nif.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\organ.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\pod.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\skrell_hair.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\spines.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\synth_antenna.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\synth_screen.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\tails.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\taur_body.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\vox.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\wings.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\xenodorsal.dm" +#include "modular_nova\modules\customization\modules\surgery\organs\xenohead.dm" +#include "modular_nova\modules\death_consequences_perk\death_consequences.dm" +#include "modular_nova\modules\death_consequences_perk\death_consequences_trauma.dm" +#include "modular_nova\modules\decay_subsystem\code\decay_turf_handling.dm" +#include "modular_nova\modules\decay_subsystem\code\decaySS.dm" +#include "modular_nova\modules\decay_subsystem\code\nests.dm" +#include "modular_nova\modules\decay_subsystem\code\spawn_nest.dm" +#include "modular_nova\modules\deforest_medical_items\code\cargo_packs.dm" +#include "modular_nova\modules\deforest_medical_items\code\healing_stack_items.dm" +#include "modular_nova\modules\deforest_medical_items\code\illegal_injectors.dm" +#include "modular_nova\modules\deforest_medical_items\code\injectors.dm" +#include "modular_nova\modules\deforest_medical_items\code\storage_items.dm" +#include "modular_nova\modules\deforest_medical_items\code\vulnerable_status_effect.dm" +#include "modular_nova\modules\deforest_medical_items\code\chemicals\demoneye.dm" +#include "modular_nova\modules\deforest_medical_items\code\chemicals\twitch.dm" +#include "modular_nova\modules\delam_emergency_stop\code\admin_scram.dm" +#include "modular_nova\modules\delam_emergency_stop\code\delam.dm" +#include "modular_nova\modules\delam_emergency_stop\code\scram.dm" +#include "modular_nova\modules\Department_Budgets\cards.dm" +#include "modular_nova\modules\departmentization\cargo_technician.dm" +#include "modular_nova\modules\departmentization\clothing_overrides.dm" +#include "modular_nova\modules\departmentization\quartermaster.dm" +#include "modular_nova\modules\digi_bloodsole\code\_shoes.dm" +#include "modular_nova\modules\digitigrade_cybernetics\code\all_nodes.dm" +#include "modular_nova\modules\digitigrade_cybernetics\code\limbs.dm" +#include "modular_nova\modules\digitigrade_cybernetics\code\mechfabricator_designs.dm" +#include "modular_nova\modules\digitigrade_cybernetics\code\robot_bodyparts.dm" +#include "modular_nova\modules\disable_worn_fov\code\worn_items.dm" +#include "modular_nova\modules\dogfashion\code\head.dm" +#include "modular_nova\modules\drone_adjustments\drone.dm" +#include "modular_nova\modules\drone_adjustments\slide_component.dm" +#include "modular_nova\modules\drones_derelict\code\areas.dm" +#include "modular_nova\modules\drones_derelict\code\space.dm" +#include "modular_nova\modules\electric_welder\code\electric_welder.dm" +#include "modular_nova\modules\emergency_spacesuit\code\emergency_spacesuit.dm" +#include "modular_nova\modules\emote_panel\code\emote_panel.dm" +#include "modular_nova\modules\emotes\code\dna_screams.dm" +#include "modular_nova\modules\emotes\code\emotes.dm" +#include "modular_nova\modules\emotes\code\laugh_datums.dm" +#include "modular_nova\modules\emotes\code\laugh_emotes.dm" +#include "modular_nova\modules\emotes\code\scream_datums.dm" +#include "modular_nova\modules\emotes\code\scream_emote.dm" +#include "modular_nova\modules\emotes\code\synth_emotes.dm" +#include "modular_nova\modules\emotes\code\additionalemotes\overlay_emote.dm" +#include "modular_nova\modules\emotes\code\additionalemotes\turf_emote.dm" +#include "modular_nova\modules\emotes\code\additionalemotes\turf_list.dm" +#include "modular_nova\modules\encounters\code\nri_raiders.dm" +#include "modular_nova\modules\energy_axe\code\energy_fireaxe.dm" +#include "modular_nova\modules\energy_axe\code\energy_fireaxe_case.dm" +#include "modular_nova\modules\escape_menu\code\escape_menu_skyrat.dm" +#include "modular_nova\modules\events\code\_event_globalvars.dm" +#include "modular_nova\modules\events\code\event_spawner.dm" +#include "modular_nova\modules\events\code\event_spawner_menu.dm" +#include "modular_nova\modules\examinemore\code\examine_more.dm" +#include "modular_nova\modules\exp_corps\code\clothing.dm" +#include "modular_nova\modules\exp_corps\code\expeditionary_trooper.dm" +#include "modular_nova\modules\exp_corps\code\gear.dm" +#include "modular_nova\modules\exp_corps\code\tomahawk.dm" +#include "modular_nova\modules\extra_vv\code\extra_vv.dm" +#include "modular_nova\modules\faction\code\clothes.dm" +#include "modular_nova\modules\faction\code\id.dm" +#include "modular_nova\modules\faction\code\outfit.dm" +#include "modular_nova\modules\faction\code\radio.dm" +#include "modular_nova\modules\faction\code\mapping\mapping_helpers.dm" +#include "modular_nova\modules\faction\code\mapping\ruins.dm" +#include "modular_nova\modules\fauna_reagent\fauna_reagent.dm" +#include "modular_nova\modules\food_replicator\code\clothing.dm" +#include "modular_nova\modules\food_replicator\code\medical.dm" +#include "modular_nova\modules\food_replicator\code\rationpacks.dm" +#include "modular_nova\modules\food_replicator\code\reagents.dm" +#include "modular_nova\modules\food_replicator\code\replicator.dm" +#include "modular_nova\modules\food_replicator\code\storage.dm" +#include "modular_nova\modules\food_replicator\code\replicator_designs\replicator_clothing.dm" +#include "modular_nova\modules\food_replicator\code\replicator_designs\replicator_food.dm" +#include "modular_nova\modules\food_replicator\code\replicator_designs\replicator_medical.dm" +#include "modular_nova\modules\GAGS\greyscale_configs.dm" +#include "modular_nova\modules\GAGS\nsfw\greyscale_configs.dm" +#include "modular_nova\modules\ghostcafe\code\dusts_on_catatonia.dm" +#include "modular_nova\modules\ghostcafe\code\dusts_on_leaving_area.dm" +#include "modular_nova\modules\ghostcafe\code\ghost_cafe_items.dm" +#include "modular_nova\modules\ghostcafe\code\ghost_role_spawners.dm" +#include "modular_nova\modules\ghostcafe\code\ghostcafeturf.dm" +#include "modular_nova\modules\ghostcafe\code\hilbertshotel_ghost.dm" +#include "modular_nova\modules\ghostcafe\code\robot_ghostcafe.dm" +#include "modular_nova\modules\gladiator\code\datums\ruins\lavaland.dm" +#include "modular_nova\modules\gladiator\code\game\objects\items\gladiator_items.dm" +#include "modular_nova\modules\gladiator\code\modules\mob\living\simple_animal\hostile\megafauna\markedone.dm" +#include "modular_nova\modules\goofsec\code\cellphone.dm" +#include "modular_nova\modules\goofsec\code\department_guards.dm" +#include "modular_nova\modules\goofsec\code\hud.dm" +#include "modular_nova\modules\goofsec\code\sec_clothing_overrides.dm" +#include "modular_nova\modules\goofsec\code\sol_fed.dm" +#include "modular_nova\modules\goofsec\code\solfed_clothing.dm" +#include "modular_nova\modules\gun_safety\code\keybinding.dm" +#include "modular_nova\modules\gun_safety\code\safety_additions.dm" +#include "modular_nova\modules\gun_safety\code\safety_component.dm" +#include "modular_nova\modules\gunhud\code\gun_hud.dm" +#include "modular_nova\modules\gunhud\code\gun_hud_component.dm" +#include "modular_nova\modules\gunpoint\code\gunpoint.dm" +#include "modular_nova\modules\gunpoint\code\gunpoint_datum.dm" +#include "modular_nova\modules\hairbrush\code\hairbrush.dm" +#include "modular_nova\modules\hairbrush\code\mood_events.dm" +#include "modular_nova\modules\hev_suit\code\hev_suit.dm" +#include "modular_nova\modules\holdingfashion_port\code\backpack.dm" +#include "modular_nova\modules\holdingfashion_port\code\bluespace_design.dm" +#include "modular_nova\modules\holdingfashion_port\code\bluespace_node.dm" +#include "modular_nova\modules\holdingfashion_port\code\recipes.dm" +#include "modular_nova\modules\holidays\flora.dm" +#include "modular_nova\modules\hop_drip\code\head_of_personnel.dm" +#include "modular_nova\modules\horrorform\code\horror_form.dm" +#include "modular_nova\modules\horrorform\code\true_changeling.dm" +#include "modular_nova\modules\huds\code\designs.dm" +#include "modular_nova\modules\huds\code\glasses\HUD_Glasses.dm" +#include "modular_nova\modules\hurtsposals\code\pipe.dm" +#include "modular_nova\modules\hydra\code\neutral.dm" +#include "modular_nova\modules\hyposprays\code\autolathe_designs.dm" +#include "modular_nova\modules\hyposprays\code\hypospray_kits.dm" +#include "modular_nova\modules\hyposprays\code\hyposprays_II.dm" +#include "modular_nova\modules\hyposprays\code\hypovials.dm" +#include "modular_nova\modules\hyposprays\code\vending_hypospray.dm" +#include "modular_nova\modules\icemoon_additions\code\icecat_recipes.dm" +#include "modular_nova\modules\icemoon_additions\code\pet_commands.dm" +#include "modular_nova\modules\ices_events\code\_ICES_globalvars.dm" +#include "modular_nova\modules\ices_events\code\ICES_event_config.dm" +#include "modular_nova\modules\ices_events\code\ICES_intensity_credits.dm" +#include "modular_nova\modules\ices_events\code\ICES_procs.dm" +#include "modular_nova\modules\ices_events\code\ICES_seclevel.dm" +#include "modular_nova\modules\ices_events\code\ICES_tgui.dm" +#include "modular_nova\modules\ices_events\code\effects\ef_foam.dm" +#include "modular_nova\modules\ices_events\code\events\ev_meteors.dm" +#include "modular_nova\modules\ices_events\code\events\ev_roleplay_check.dm" +#include "modular_nova\modules\ices_events\code\events\ev_scrubbers.dm" +#include "modular_nova\modules\icspawning\code\cards_ids.dm" +#include "modular_nova\modules\icspawning\code\observer.dm" +#include "modular_nova\modules\icspawning\code\spell.dm" +#include "modular_nova\modules\icspawning\code\standard.dm" +#include "modular_nova\modules\implants\code\augments_arms.dm" +#include "modular_nova\modules\implants\code\augments_chest.dm" +#include "modular_nova\modules\implants\code\augments_eyes.dm" +#include "modular_nova\modules\implants\code\augments_internal.dm" +#include "modular_nova\modules\implants\code\medical_designs.dm" +#include "modular_nova\modules\implants\code\medical_nodes.dm" +#include "modular_nova\modules\imported_vendors\code\vendor_containers.dm" +#include "modular_nova\modules\imported_vendors\code\vendor_food.dm" +#include "modular_nova\modules\imported_vendors\code\vendor_snacks.dm" +#include "modular_nova\modules\imported_vendors\code\vendors.dm" +#include "modular_nova\modules\indicators\code\combat_indicator.dm" +#include "modular_nova\modules\indicators\code\sealed.dm" +#include "modular_nova\modules\indicators\code\ssd_indicator.dm" +#include "modular_nova\modules\inflatables\code\inflatable.dm" +#include "modular_nova\modules\interaction_menu\code\click.dm" +#include "modular_nova\modules\interaction_menu\code\interaction_component.dm" +#include "modular_nova\modules\interaction_menu\code\interaction_datum.dm" +#include "modular_nova\modules\jukebox\code\dance_machine.dm" +#include "modular_nova\modules\jukebox\code\jukebox_subsystem.dm" +#include "modular_nova\modules\jungle\code\flora.dm" +#include "modular_nova\modules\kahraman_equipment\code\gps_beacon.dm" +#include "modular_nova\modules\kahraman_equipment\code\looping_sounds.dm" +#include "modular_nova\modules\kahraman_equipment\code\ore_thumper.dm" +#include "modular_nova\modules\kahraman_equipment\code\organic_printer.dm" +#include "modular_nova\modules\kahraman_equipment\code\clothing\armor_datums.dm" +#include "modular_nova\modules\kahraman_equipment\code\clothing\clothing.dm" +#include "modular_nova\modules\kahraman_equipment\code\clothing\mod.dm" +#include "modular_nova\modules\kahraman_equipment\code\clothing\storage.dm" +#include "modular_nova\modules\kahraman_equipment\code\organic_printer_designs\clothing.dm" +#include "modular_nova\modules\kahraman_equipment\code\organic_printer_designs\equipment.dm" +#include "modular_nova\modules\kahraman_equipment\code\organic_printer_designs\resources.dm" +#include "modular_nova\modules\knives\knives.dm" +#include "modular_nova\modules\layer_shift\code\mob_movement.dm" +#include "modular_nova\modules\liquids\code\drains.dm" +#include "modular_nova\modules\liquids\code\height_floors.dm" +#include "modular_nova\modules\liquids\code\mop.dm" +#include "modular_nova\modules\liquids\code\ocean_areas.dm" +#include "modular_nova\modules\liquids\code\ocean_biomes.dm" +#include "modular_nova\modules\liquids\code\ocean_flora.dm" +#include "modular_nova\modules\liquids\code\ocean_mapgen.dm" +#include "modular_nova\modules\liquids\code\ocean_ruins.dm" +#include "modular_nova\modules\liquids\code\ocean_turfs.dm" +#include "modular_nova\modules\liquids\code\tools.dm" +#include "modular_nova\modules\liquids\code\liquid_systems\liquid_controller.dm" +#include "modular_nova\modules\liquids\code\liquid_systems\liquid_effect.dm" +#include "modular_nova\modules\liquids\code\liquid_systems\liquid_groups.dm" +#include "modular_nova\modules\liquids\code\liquid_systems\liquid_height.dm" +#include "modular_nova\modules\liquids\code\liquid_systems\liquid_interaction.dm" +#include "modular_nova\modules\liquids\code\liquid_systems\liquid_plumbers.dm" +#include "modular_nova\modules\liquids\code\liquid_systems\liquid_pump.dm" +#include "modular_nova\modules\liquids\code\liquid_systems\liquid_status_effect.dm" +#include "modular_nova\modules\liquids\code\liquid_systems\liquid_turf.dm" +#include "modular_nova\modules\liquids\code\reagents\reagent_containers.dm" +#include "modular_nova\modules\liquids\code\reagents\chemistry\holder.dm" +#include "modular_nova\modules\liquids\code\reagents\chemistry\reagents.dm" +#include "modular_nova\modules\loadouts\loadout_items\_loadout_datum.dm" +#include "modular_nova\modules\loadouts\loadout_items\loadout_datum_accessory.dm" +#include "modular_nova\modules\loadouts\loadout_items\loadout_datum_belts.dm" +#include "modular_nova\modules\loadouts\loadout_items\loadout_datum_ears.dm" +#include "modular_nova\modules\loadouts\loadout_items\loadout_datum_glasses.dm" +#include "modular_nova\modules\loadouts\loadout_items\loadout_datum_gloves.dm" +#include "modular_nova\modules\loadouts\loadout_items\loadout_datum_heads.dm" +#include "modular_nova\modules\loadouts\loadout_items\loadout_datum_inhands.dm" +#include "modular_nova\modules\loadouts\loadout_items\loadout_datum_masks.dm" +#include "modular_nova\modules\loadouts\loadout_items\loadout_datum_neck.dm" +#include "modular_nova\modules\loadouts\loadout_items\loadout_datum_pocket.dm" +#include "modular_nova\modules\loadouts\loadout_items\loadout_datum_shoes.dm" +#include "modular_nova\modules\loadouts\loadout_items\loadout_datum_suit.dm" +#include "modular_nova\modules\loadouts\loadout_items\loadout_datum_toys.dm" +#include "modular_nova\modules\loadouts\loadout_items\donator\personal\donator_personal.dm" +#include "modular_nova\modules\loadouts\loadout_items\under\donator.dm" +#include "modular_nova\modules\loadouts\loadout_items\under\loadout_datum_under.dm" +#include "modular_nova\modules\loadouts\loadout_ui\loadout_manager.dm" +#include "modular_nova\modules\loadouts\loadout_ui\loadout_outfit_helpers.dm" +#include "modular_nova\modules\lorecaster\code\archive_viewer.dm" +#include "modular_nova\modules\lorecaster\code\config.dm" +#include "modular_nova\modules\lorecaster\code\story_manager.dm" +#include "modular_nova\modules\lorecaster\code\subsystem.dm" +#include "modular_nova\modules\manufacturer_examine\code\gun_company_additions.dm" +#include "modular_nova\modules\manufacturer_examine\code\manufacturer_element.dm" +#include "modular_nova\modules\mapping\code\airless.dm" +#include "modular_nova\modules\mapping\code\automatic_respawner.dm" +#include "modular_nova\modules\mapping\code\color.dm" +#include "modular_nova\modules\mapping\code\doors.dm" +#include "modular_nova\modules\mapping\code\dungeon.dm" +#include "modular_nova\modules\mapping\code\fence.dm" +#include "modular_nova\modules\mapping\code\fluff.dm" +#include "modular_nova\modules\mapping\code\furniture.dm" +#include "modular_nova\modules\mapping\code\holocall.dm" +#include "modular_nova\modules\mapping\code\icemoon.dm" +#include "modular_nova\modules\mapping\code\interdyne_mining.dm" +#include "modular_nova\modules\mapping\code\interlink_helper.dm" +#include "modular_nova\modules\mapping\code\jobs.dm" +#include "modular_nova\modules\mapping\code\laptop_presets.dm" +#include "modular_nova\modules\mapping\code\lavaland.dm" +#include "modular_nova\modules\mapping\code\lavaland_ruin_code.dm" +#include "modular_nova\modules\mapping\code\lighting.dm" +#include "modular_nova\modules\mapping\code\lowpressure.dm" +#include "modular_nova\modules\mapping\code\machinery.dm" +#include "modular_nova\modules\mapping\code\mapping_directionals.dm" +#include "modular_nova\modules\mapping\code\misc.dm" +#include "modular_nova\modules\mapping\code\mob_spawns.dm" +#include "modular_nova\modules\mapping\code\planet_turfs.dm" +#include "modular_nova\modules\mapping\code\pool.dm" +#include "modular_nova\modules\mapping\code\radio.dm" +#include "modular_nova\modules\mapping\code\shrapnel_mine.dm" +#include "modular_nova\modules\mapping\code\shutters.dm" +#include "modular_nova\modules\mapping\code\shuttles.dm" +#include "modular_nova\modules\mapping\code\space.dm" +#include "modular_nova\modules\mapping\code\space_hotel.dm" +#include "modular_nova\modules\mapping\code\spaceship_items.dm" +#include "modular_nova\modules\mapping\code\spaceship_turfs.dm" +#include "modular_nova\modules\mapping\code\static_plaques.dm" +#include "modular_nova\modules\mapping\code\tarkon_atmos_control.dm" +#include "modular_nova\modules\mapping\code\tools.dm" +#include "modular_nova\modules\mapping\code\turf.dm" +#include "modular_nova\modules\mapping\code\turf_decals.dm" +#include "modular_nova\modules\mapping\code\vgdecals.dm" +#include "modular_nova\modules\mapping\code\wardrobes.dm" +#include "modular_nova\modules\mapping\code\areas\away_content.dm" +#include "modular_nova\modules\mapping\code\areas\centcom.dm" +#include "modular_nova\modules\mapping\code\areas\mining.dm" +#include "modular_nova\modules\mapping\code\areas\ruins.dm" +#include "modular_nova\modules\mapping\code\areas\shuttles.dm" +#include "modular_nova\modules\mapping\code\areas\space.dm" +#include "modular_nova\modules\mapping\code\areas\station.dm" +#include "modular_nova\modules\mapping\code\lockers\cargodiselost\cargodiselockers.dm" +#include "modular_nova\modules\mapping\code\lockers\des_two\cargo.dm" +#include "modular_nova\modules\mapping\code\lockers\des_two\command.dm" +#include "modular_nova\modules\mapping\code\lockers\des_two\engineering.dm" +#include "modular_nova\modules\mapping\code\lockers\des_two\generic.dm" +#include "modular_nova\modules\mapping\code\lockers\des_two\medical.dm" +#include "modular_nova\modules\mapping\code\lockers\des_two\science.dm" +#include "modular_nova\modules\mapping\code\lockers\des_two\security.dm" +#include "modular_nova\modules\mapping\voidraptor\code\areas.dm" +#include "modular_nova\modules\mapping\voidraptor\code\clothing.dm" +#include "modular_nova\modules\mapping\voidraptor\code\mob.dm" +#include "modular_nova\modules\mapping\voidraptor\code\shuttles.dm" +#include "modular_nova\modules\marines\code\gear.dm" +#include "modular_nova\modules\marines\code\mod.dm" +#include "modular_nova\modules\marines\code\modsuit_modules.dm" +#include "modular_nova\modules\marines\code\smartgun.dm" +#include "modular_nova\modules\medical\code\anesthetic_machine.dm" +#include "modular_nova\modules\medical\code\carbon_examine.dm" +#include "modular_nova\modules\medical\code\carbon_update_icons.dm" +#include "modular_nova\modules\medical\code\grasp.dm" +#include "modular_nova\modules\medical\code\health_analyzer.dm" +#include "modular_nova\modules\medical\code\medkit.dm" +#include "modular_nova\modules\medical\code\smartdarts.dm" +#include "modular_nova\modules\medical\code\sprays.dm" +#include "modular_nova\modules\medical\code\cargo\packs.dm" +#include "modular_nova\modules\medical\code\wounds\_wounds.dm" +#include "modular_nova\modules\medical\code\wounds\bleed.dm" +#include "modular_nova\modules\medical\code\wounds\medical.dm" +#include "modular_nova\modules\medical\code\wounds\muscle.dm" +#include "modular_nova\modules\medical\code\wounds\wound_effects.dm" +#include "modular_nova\modules\medical\code\wounds\synth\robotic_burns.dm" +#include "modular_nova\modules\medical\code\wounds\synth\robotic_muscle.dm" +#include "modular_nova\modules\medical\code\wounds\synth\robotic_pierce.dm" +#include "modular_nova\modules\medical\code\wounds\synth\robotic_slash.dm" +#include "modular_nova\modules\medical\code\wounds\synth\blunt\robotic_blunt.dm" +#include "modular_nova\modules\medical\code\wounds\synth\blunt\robotic_blunt_T1.dm" +#include "modular_nova\modules\medical\code\wounds\synth\blunt\robotic_blunt_T2.dm" +#include "modular_nova\modules\medical\code\wounds\synth\blunt\robotic_blunt_T3.dm" +#include "modular_nova\modules\medical\code\wounds\synth\blunt\secures_internals.dm" +#include "modular_nova\modules\medical_designs\medical_designs.dm" +#include "modular_nova\modules\medievalcrate\code\vintageitems.dm" +#include "modular_nova\modules\mentor\code\_globalvars.dm" +#include "modular_nova\modules\mentor\code\client_procs.dm" +#include "modular_nova\modules\mentor\code\dementor.dm" +#include "modular_nova\modules\mentor\code\follow.dm" +#include "modular_nova\modules\mentor\code\logging.dm" +#include "modular_nova\modules\mentor\code\mentor.dm" +#include "modular_nova\modules\mentor\code\mentor_verbs.dm" +#include "modular_nova\modules\mentor\code\mentorhelp.dm" +#include "modular_nova\modules\mentor\code\mentorpm.dm" +#include "modular_nova\modules\mentor\code\mentorsay.dm" +#include "modular_nova\modules\mentor\code\mentorwho.dm" +#include "modular_nova\modules\microfusion\code\_microfusion_defines.dm" +#include "modular_nova\modules\microfusion\code\cargo_stuff.dm" +#include "modular_nova\modules\microfusion\code\gun_types.dm" +#include "modular_nova\modules\microfusion\code\microfusion_cell.dm" +#include "modular_nova\modules\microfusion\code\microfusion_cell_attachments.dm" +#include "modular_nova\modules\microfusion\code\microfusion_designs.dm" +#include "modular_nova\modules\microfusion\code\microfusion_energy_master.dm" +#include "modular_nova\modules\microfusion\code\microfusion_gun_attachments.dm" +#include "modular_nova\modules\microfusion\code\microfusion_techweb.dm" +#include "modular_nova\modules\microfusion\code\phase_emitter.dm" +#include "modular_nova\modules\microfusion\code\projectiles.dm" +#include "modular_nova\modules\Midroundtraitor\code\datum_traitor.dm" +#include "modular_nova\modules\Midroundtraitor\code\event.dm" +#include "modular_nova\modules\mining_vendor_additions\code\order_mining.dm" +#include "modular_nova\modules\modsuit_armour\modsuit_armour.dm" +#include "modular_nova\modules\modsuit_pai\code\mod_pai.dm" +#include "modular_nova\modules\modular_ert\code\engineer\engineer.dm" +#include "modular_nova\modules\modular_ert\code\fumigators\ert.dm" +#include "modular_nova\modules\modular_ert\code\fumigators\fumigator.dm" +#include "modular_nova\modules\modular_ert\code\fumigators\fumigator_outfit.dm" +#include "modular_nova\modules\modular_ert\code\fumigators\head.dm" +#include "modular_nova\modules\modular_ert\code\marine_override\modified_equipment.dm" +#include "modular_nova\modules\modular_ert\code\marine_override\modified_gear.dm" +#include "modular_nova\modules\modular_ert\code\odst\ert.dm" +#include "modular_nova\modules\modular_ert\code\odst\odst.dm" +#include "modular_nova\modules\modular_ert\code\odst\odst_outfit.dm" +#include "modular_nova\modules\modular_ert\code\pizza\ert.dm" +#include "modular_nova\modules\modular_ert\code\pizza\ert_antag.dm" +#include "modular_nova\modules\modular_ert\code\pizza\head.dm" +#include "modular_nova\modules\modular_ert\code\pizza\misc_clothing.dm" +#include "modular_nova\modules\modular_ert\code\pizza\pizza_outfit.dm" +#include "modular_nova\modules\modular_ert\code\pizza\weaponry.dm" +#include "modular_nova\modules\modular_ert\code\trauma_team\ert.dm" +#include "modular_nova\modules\modular_ert\code\trauma_team\ert_antag.dm" +#include "modular_nova\modules\modular_ert\code\trauma_team\trauma_team_outfit.dm" +#include "modular_nova\modules\modular_implants\code\misc_devices.dm" +#include "modular_nova\modules\modular_implants\code\nif_actions.dm" +#include "modular_nova\modules\modular_implants\code\nif_implants.dm" +#include "modular_nova\modules\modular_implants\code\nif_persistence.dm" +#include "modular_nova\modules\modular_implants\code\nif_research.dm" +#include "modular_nova\modules\modular_implants\code\nifs.dm" +#include "modular_nova\modules\modular_implants\code\nifs_tgui.dm" +#include "modular_nova\modules\modular_implants\code\nifsoft_catalog.dm" +#include "modular_nova\modules\modular_implants\code\nifsofts.dm" +#include "modular_nova\modules\modular_implants\code\nifsofts\book_summoner.dm" +#include "modular_nova\modules\modular_implants\code\nifsofts\dorms.dm" +#include "modular_nova\modules\modular_implants\code\nifsofts\hivemind.dm" +#include "modular_nova\modules\modular_implants\code\nifsofts\huds.dm" +#include "modular_nova\modules\modular_implants\code\nifsofts\hypnosis.dm" +#include "modular_nova\modules\modular_implants\code\nifsofts\money_sense.dm" +#include "modular_nova\modules\modular_implants\code\nifsofts\prop_summoner.dm" +#include "modular_nova\modules\modular_implants\code\nifsofts\scryer.dm" +#include "modular_nova\modules\modular_implants\code\nifsofts\shapeshifter.dm" +#include "modular_nova\modules\modular_implants\code\nifsofts\soul_poem.dm" +#include "modular_nova\modules\modular_implants\code\nifsofts\soulcatcher.dm" +#include "modular_nova\modules\modular_implants\code\nifsofts\base_types\action_granter.dm" +#include "modular_nova\modules\modular_implants\code\soulcatcher\attachable_soulcatcher.dm" +#include "modular_nova\modules\modular_implants\code\soulcatcher\handheld_soulcatcher.dm" +#include "modular_nova\modules\modular_implants\code\soulcatcher\soulcatcher_body_component.dm" +#include "modular_nova\modules\modular_implants\code\soulcatcher\soulcatcher_component.dm" +#include "modular_nova\modules\modular_implants\code\soulcatcher\soulcatcher_mob.dm" +#include "modular_nova\modules\modular_implants\code\soulcatcher\soulcatcher_tgui.dm" +#include "modular_nova\modules\modular_implants\code\soulcatcher\soulcatcher_verbs.dm" +#include "modular_nova\modules\modular_items\code\bags.dm" +#include "modular_nova\modules\modular_items\code\cash.dm" +#include "modular_nova\modules\modular_items\code\ciggies.dm" +#include "modular_nova\modules\modular_items\code\cross.dm" +#include "modular_nova\modules\modular_items\code\designs.dm" +#include "modular_nova\modules\modular_items\code\makeshift.dm" +#include "modular_nova\modules\modular_items\code\modular_glasses.dm" +#include "modular_nova\modules\modular_items\code\necklace.dm" +#include "modular_nova\modules\modular_items\code\pastries.dm" +#include "modular_nova\modules\modular_items\code\recipes_misc.dm" +#include "modular_nova\modules\modular_items\code\summon_beacon.dm" +#include "modular_nova\modules\modular_items\code\tailoring.dm" +#include "modular_nova\modules\modular_items\code\thieving_gloves.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\clothing_pref_check.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\decals.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\emote.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_quirks.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\screen_icons.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\verbs.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_arousal\arousal.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_arousal\climax.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_arousal\mood_events.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_arousal\pain.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_arousal\pleasure.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_arousal\status_effects\aroused.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_arousal\status_effects\climax.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_arousal\status_effects\fluid_generation.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_arousal\status_effects\ropebunny.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_arousal\status_effects\spank_related.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_chemistry\mood_events.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_chemistry\items\bottles.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_chemistry\items\pills.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_chemistry\reagents\_aphrodisiac.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_chemistry\reagents\_chemical_reaction.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_chemistry\reagents\breast_milk.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_chemistry\reagents\camphor.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_chemistry\reagents\crocin.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_chemistry\reagents\cum.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_chemistry\reagents\dopamine.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_chemistry\reagents\hexacrocin.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_chemistry\reagents\incubus_draft.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_chemistry\reagents\pentacamphor.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_chemistry\reagents\succubus_milk.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\ballgag.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\bdsm_mask.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\corset.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\deprivation_helmet.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\domina_cap.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\erp_belt.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\hypnogoggles.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\kink_collars.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\kinky_blindfold.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\kinky_headphones.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\kinky_sleepbag.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\latex_catsuit.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\latex_straight_jacket.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\lewd_glasses.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\lewd_gloves.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\lewd_maid.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\lewd_shoes.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\shackles.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\shibari_worn_hands.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\shibari_worn_legs.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\shibari_worn_uniform.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\shockcollar.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\strapon.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_clothing\stripper_outfit.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_helpers\appearance.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_helpers\carbon.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_helpers\human.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_helpers\misc.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_helpers\organs.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_helpers\pref_checking.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_helpers\sounds.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_helpers\species.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\_erp_disabled_item_enforcement.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\_kits.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\_masturbation_item.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\_sex_toy.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\attachable_vibrator.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\buttplug.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\clamps.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\condom.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\dildo.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\discount_card.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\feather.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\fleshlight.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\kinky_shocker.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\leather_whip.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\magic_wand.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\pinkcuffs.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\serviette.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\shibari.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\size_items.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\spanking_pad.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\torture_candle.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\vibrator.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_items\vibroring.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_machinery\lustwish.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_machinery\milking_machine.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_machinery\washing_machine.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_organs\_genital.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_organs\breasts.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_organs\testicles.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_organs\vagina.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_structures\bdsm_furniture.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_structures\construction.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_structures\dancing_pole.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_structures\pillow.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\lewd_structures\shibari_stand.dm" +#include "modular_nova\modules\modular_persistence\code\modular_persistence.dm" +#include "modular_nova\modules\modular_reagents\code\alert.dm" +#include "modular_nova\modules\modular_reagents\code\reagents\medicine.dm" +#include "modular_nova\modules\modular_reagents\code\recipes\medicine_recipes.dm" +#include "modular_nova\modules\modular_vending\code\autodrobe.dm" +#include "modular_nova\modules\modular_vending\code\boozeomat.dm" +#include "modular_nova\modules\modular_vending\code\cigarette.dm" +#include "modular_nova\modules\modular_vending\code\clothesmate.dm" +#include "modular_nova\modules\modular_vending\code\cola.dm" +#include "modular_nova\modules\modular_vending\code\engivend.dm" +#include "modular_nova\modules\modular_vending\code\games.dm" +#include "modular_nova\modules\modular_vending\code\medical.dm" +#include "modular_nova\modules\modular_vending\code\megaseed.dm" +#include "modular_nova\modules\modular_vending\code\security.dm" +#include "modular_nova\modules\modular_vending\code\vending.dm" +#include "modular_nova\modules\modular_vending\code\wardrobes.dm" +#include "modular_nova\modules\modular_weapons\code\autolathe_designs.dm" +#include "modular_nova\modules\modular_weapons\code\ballistic_master.dm" +#include "modular_nova\modules\modular_weapons\code\conversion_kits.dm" +#include "modular_nova\modules\modular_weapons\code\energy.dm" +#include "modular_nova\modules\modular_weapons\code\gun_launches_little_guys_element.dm" +#include "modular_nova\modules\modular_weapons\code\gunsets.dm" +#include "modular_nova\modules\modular_weapons\code\melee.dm" +#include "modular_nova\modules\modular_weapons\code\modular_projectiles.dm" +#include "modular_nova\modules\modular_weapons\code\pepperball_gun.dm" +#include "modular_nova\modules\modular_weapons\code\suppressor_size_change_override.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\advert.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\grenade_launcher.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\gunsets.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\magazines.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\rifle.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\shotgun.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\submachinegun.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\ammo\grenade.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\ammo\pistol.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\ammo\rifle.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\szot_dynamica\magazines.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\szot_dynamica\pistol.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\szot_dynamica\rifle.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\szot_dynamica\submachinegun.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\szot_dynamica\ammo\pistol.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\szot_dynamica\ammo\plasma.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\szot_dynamica\ammo\rifle.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\trappiste_fabriek\advert.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\trappiste_fabriek\ammo.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\trappiste_fabriek\gunsets.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\trappiste_fabriek\magazines.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\trappiste_fabriek\pistol.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\trappiste_fabriek\revolver.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\xhihao_light_arms\ammo.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\xhihao_light_arms\gunsets.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\xhihao_light_arms\rifle.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\xhihao_light_arms\submachinegun.dm" +#include "modular_nova\modules\mold\code\_mold_defines.dm" +#include "modular_nova\modules\mold\code\mold.dm" +#include "modular_nova\modules\mold\code\mold_controller.dm" +#include "modular_nova\modules\mold\code\mold_disease.dm" +#include "modular_nova\modules\mold\code\mold_event.dm" +#include "modular_nova\modules\mold\code\mold_mobs.dm" +#include "modular_nova\modules\mold\code\mold_structures.dm" +#include "modular_nova\modules\more_briefcases\code\briefcases.dm" +#include "modular_nova\modules\morefermentplants\code\ambrosia.dm" +#include "modular_nova\modules\morefermentplants\code\banana.dm" +#include "modular_nova\modules\morefermentplants\code\beans.dm" +#include "modular_nova\modules\morefermentplants\code\berries.dm" +#include "modular_nova\modules\morefermentplants\code\cannabis.dm" +#include "modular_nova\modules\morefermentplants\code\chili.dm" +#include "modular_nova\modules\morefermentplants\code\citrus.dm" +#include "modular_nova\modules\morefermentplants\code\eggplant.dm" +#include "modular_nova\modules\morefermentplants\code\garlic.dm" +#include "modular_nova\modules\morefermentplants\code\kudzu.dm" +#include "modular_nova\modules\morefermentplants\code\melon.dm" +#include "modular_nova\modules\morefermentplants\code\misc.dm" +#include "modular_nova\modules\morefermentplants\code\mushrooms.dm" +#include "modular_nova\modules\morefermentplants\code\nettle.dm" +#include "modular_nova\modules\morefermentplants\code\onion.dm" +#include "modular_nova\modules\morefermentplants\code\pineapple.dm" +#include "modular_nova\modules\morefermentplants\code\pumpkin.dm" +#include "modular_nova\modules\morefermentplants\code\root.dm" +#include "modular_nova\modules\morefermentplants\code\tobacco.dm" +#include "modular_nova\modules\morefermentplants\code\tomato.dm" +#include "modular_nova\modules\morenarcotics\code\blacktar.dm" +#include "modular_nova\modules\morenarcotics\code\cocaine.dm" +#include "modular_nova\modules\morenarcotics\code\cocaine_item.dm" +#include "modular_nova\modules\morenarcotics\code\cocoleaves.dm" +#include "modular_nova\modules\morenarcotics\code\crackpipe.dm" +#include "modular_nova\modules\morenarcotics\code\opium.dm" +#include "modular_nova\modules\morenarcotics\code\opiumpoppy.dm" +#include "modular_nova\modules\morenarcotics\code\pcp.dm" +#include "modular_nova\modules\morenarcotics\code\quaalude.dm" +#include "modular_nova\modules\morenarcotics\code\thc.dm" +#include "modular_nova\modules\morenarcotics\code\thc_item.dm" +#include "modular_nova\modules\morenarcotics\code\vapecarts.dm" +#include "modular_nova\modules\moretraitoritems\code\autosurgeon.dm" +#include "modular_nova\modules\moretraitoritems\code\autosurgeon_bodypart.dm" +#include "modular_nova\modules\moretraitoritems\code\cards_id.dm" +#include "modular_nova\modules\moretraitoritems\code\cultist.dm" +#include "modular_nova\modules\moretraitoritems\code\drinkingglass.dm" +#include "modular_nova\modules\moretraitoritems\code\glue.dm" +#include "modular_nova\modules\moretraitoritems\code\headset.dm" +#include "modular_nova\modules\moretraitoritems\code\pirate.dm" +#include "modular_nova\modules\moretraitoritems\code\smuggling_gear.dm" +#include "modular_nova\modules\moretraitoritems\code\spawnergrenade.dm" +#include "modular_nova\modules\moretraitoritems\code\syndicate.dm" +#include "modular_nova\modules\moretraitoritems\code\syndiemirror.dm" +#include "modular_nova\modules\moretraitoritems\code\traitor_announcer.dm" +#include "modular_nova\modules\moretraitoritems\code\uplink_kits.dm" +#include "modular_nova\modules\moretraitoritems\code\weapons.dm" +#include "modular_nova\modules\morewizardstuffs\spellbook.dm" +#include "modular_nova\modules\morewizardstuffs\spells\bloodcrawl_potion.dm" +#include "modular_nova\modules\morewizardstuffs\spells\magical_stimpack.dm" +#include "modular_nova\modules\mounted_machine_gun\code\ammobox.dm" +#include "modular_nova\modules\mounted_machine_gun\code\mounted_machine_gun.dm" +#include "modular_nova\modules\multicellcharger\code\multi_cell_charger.dm" +#include "modular_nova\modules\multiserver\code\config_entry.dm" +#include "modular_nova\modules\mutants\code\mutant_antag_datum.dm" +#include "modular_nova\modules\mutants\code\mutant_component.dm" +#include "modular_nova\modules\mutants\code\mutant_cure.dm" +#include "modular_nova\modules\mutants\code\mutant_event.dm" +#include "modular_nova\modules\mutants\code\mutant_species.dm" +#include "modular_nova\modules\mutants\code\mutant_techweb.dm" +#include "modular_nova\modules\mutants\code\mutant_zombie_bodyparts.dm" +#include "modular_nova\modules\nanotrasen_naval_command\code\clothing.dm" +#include "modular_nova\modules\nanotrasen_naval_command\code\id_trims.dm" +#include "modular_nova\modules\nanotrasen_naval_command\code\outfits.dm" +#include "modular_nova\modules\nanotrasen_rep\code\clothing.dm" +#include "modular_nova\modules\nanotrasen_rep\code\nanotrasen_consultant.dm" +#include "modular_nova\modules\new_cells\code\power_cell.dm" +#include "modular_nova\modules\novaya_ert\code\advanced_choice_beacon.dm" +#include "modular_nova\modules\novaya_ert\code\back.dm" +#include "modular_nova\modules\novaya_ert\code\belt.dm" +#include "modular_nova\modules\novaya_ert\code\ert.dm" +#include "modular_nova\modules\novaya_ert\code\head.dm" +#include "modular_nova\modules\novaya_ert\code\id.dm" +#include "modular_nova\modules\novaya_ert\code\mod_suit.dm" +#include "modular_nova\modules\novaya_ert\code\outfit.dm" +#include "modular_nova\modules\novaya_ert\code\police_outfit.dm" +#include "modular_nova\modules\novaya_ert\code\shield.dm" +#include "modular_nova\modules\novaya_ert\code\suit.dm" +#include "modular_nova\modules\novaya_ert\code\surplus_armor.dm" +#include "modular_nova\modules\novaya_ert\code\survival_pack.dm" +#include "modular_nova\modules\novaya_ert\code\toolbox.dm" +#include "modular_nova\modules\novaya_ert\code\uniform.dm" +#include "modular_nova\modules\officestuff\code\officestuff.dm" +#include "modular_nova\modules\oneclickantag\code\oneclickantag.dm" +#include "modular_nova\modules\opposing_force\code\admin_procs.dm" +#include "modular_nova\modules\opposing_force\code\antagonist.dm" +#include "modular_nova\modules\opposing_force\code\dynamic.dm" +#include "modular_nova\modules\opposing_force\code\mind.dm" +#include "modular_nova\modules\opposing_force\code\opposing_force_datum.dm" +#include "modular_nova\modules\opposing_force\code\opposing_force_subsystem.dm" +#include "modular_nova\modules\opposing_force\code\roundend.dm" +#include "modular_nova\modules\opposing_force\code\equipment\ammo.dm" +#include "modular_nova\modules\opposing_force\code\equipment\biology.dm" +#include "modular_nova\modules\opposing_force\code\equipment\bombs.dm" +#include "modular_nova\modules\opposing_force\code\equipment\clothing.dm" +#include "modular_nova\modules\opposing_force\code\equipment\equip_parent.dm" +#include "modular_nova\modules\opposing_force\code\equipment\gadgets.dm" +#include "modular_nova\modules\opposing_force\code\equipment\guns.dm" +#include "modular_nova\modules\opposing_force\code\equipment\implants.dm" +#include "modular_nova\modules\opposing_force\code\equipment\medical.dm" +#include "modular_nova\modules\opposing_force\code\equipment\melee.dm" +#include "modular_nova\modules\opposing_force\code\equipment\modsuit.dm" +#include "modular_nova\modules\opposing_force\code\equipment\spells.dm" +#include "modular_nova\modules\opposing_force\code\equipment\uplink.dm" +#include "modular_nova\modules\organs\code\heart.dm" +#include "modular_nova\modules\organs\code\liver.dm" +#include "modular_nova\modules\organs\code\lungs.dm" +#include "modular_nova\modules\organs\code\organs.dm" +#include "modular_nova\modules\organs\code\stomach.dm" +#include "modular_nova\modules\organs\code\tongue.dm" +#include "modular_nova\modules\oversized\code\door.dm" +#include "modular_nova\modules\oversized\code\oversized_quirk.dm" +#include "modular_nova\modules\panicbunker\code\panicbunker.dm" +#include "modular_nova\modules\paycheck_rations\code\quirk.dm" +#include "modular_nova\modules\paycheck_rations\code\rationpacks.dm" +#include "modular_nova\modules\paycheck_rations\code\reagents.dm" +#include "modular_nova\modules\paycheck_rations\code\ticket_book.dm" +#include "modular_nova\modules\paycheck_rations\code\tickets.dm" +#include "modular_nova\modules\pet_owner\pet_owner.dm" +#include "modular_nova\modules\pixel_shift\code\pixel_shift_component.dm" +#include "modular_nova\modules\pixel_shift\code\pixel_shift_keybind.dm" +#include "modular_nova\modules\pixel_shift\code\pixel_shift_mob.dm" +#include "modular_nova\modules\player_ranks\code\preferences.dm" +#include "modular_nova\modules\player_ranks\code\world_topic.dm" +#include "modular_nova\modules\player_ranks\code\player_rank_controller\_player_rank_controller.dm" +#include "modular_nova\modules\player_ranks\code\player_rank_controller\donator_controller.dm" +#include "modular_nova\modules\player_ranks\code\player_rank_controller\mentor_controller.dm" +#include "modular_nova\modules\player_ranks\code\player_rank_controller\veteran_controller.dm" +#include "modular_nova\modules\player_ranks\code\subsystem\player_ranks.dm" +#include "modular_nova\modules\pod_locking\pod_locking.dm" +#include "modular_nova\modules\polarized_windows\capacitor.dm" +#include "modular_nova\modules\polarized_windows\polarization_controller.dm" +#include "modular_nova\modules\polarized_windows\polarizer.dm" +#include "modular_nova\modules\polarized_windows\windows.dm" +#include "modular_nova\modules\pollution\code\admin_spawn_pollution.dm" +#include "modular_nova\modules\pollution\code\air_refresher.dm" +#include "modular_nova\modules\pollution\code\bonfire.dm" +#include "modular_nova\modules\pollution\code\fancy_storage_items.dm" +#include "modular_nova\modules\pollution\code\perfumes.dm" +#include "modular_nova\modules\pollution\code\pollutant_datum.dm" +#include "modular_nova\modules\pollution\code\pollutants_generic.dm" +#include "modular_nova\modules\pollution\code\pollution.dm" +#include "modular_nova\modules\pollution\code\pollution_effect.dm" +#include "modular_nova\modules\pollution\code\pollution_emitters.dm" +#include "modular_nova\modules\pollution\code\pollution_initializations.dm" +#include "modular_nova\modules\pollution\code\pollution_subsystem.dm" +#include "modular_nova\modules\pollution\code\scented_candles.dm" +#include "modular_nova\modules\pollution\code\temporary_pollution_emission_component.dm" +#include "modular_nova\modules\pollution\code\turf_open.dm" +#include "modular_nova\modules\poly_commands\parrot.dm" +#include "modular_nova\modules\positronic_alert_console\code\positronic_alert_console.dm" +#include "modular_nova\modules\primitive_catgirls\code\clothing.dm" +#include "modular_nova\modules\primitive_catgirls\code\clothing_vendor.dm" +#include "modular_nova\modules\primitive_catgirls\code\language.dm" +#include "modular_nova\modules\primitive_catgirls\code\map_items.dm" +#include "modular_nova\modules\primitive_catgirls\code\organs.dm" +#include "modular_nova\modules\primitive_catgirls\code\smelling_salts.dm" +#include "modular_nova\modules\primitive_catgirls\code\spawner.dm" +#include "modular_nova\modules\primitive_catgirls\code\species.dm" +#include "modular_nova\modules\primitive_cooking_additions\code\big_mortar.dm" +#include "modular_nova\modules\primitive_cooking_additions\code\cookware.dm" +#include "modular_nova\modules\primitive_cooking_additions\code\cutting_board.dm" +#include "modular_nova\modules\primitive_cooking_additions\code\millstone.dm" +#include "modular_nova\modules\primitive_cooking_additions\code\stone_griddle.dm" +#include "modular_nova\modules\primitive_cooking_additions\code\stone_oven.dm" +#include "modular_nova\modules\primitive_cooking_additions\code\stone_stove.dm" +#include "modular_nova\modules\primitive_production\code\ceramics.dm" +#include "modular_nova\modules\primitive_production\code\glassblowing.dm" +#include "modular_nova\modules\primitive_production\code\misc.dm" +#include "modular_nova\modules\primitive_production\code\production_skill.dm" +#include "modular_nova\modules\primitive_structures\code\fencing.dm" +#include "modular_nova\modules\primitive_structures\code\storage_structures.dm" +#include "modular_nova\modules\primitive_structures\code\totally_thatch_roof.dm" +#include "modular_nova\modules\primitive_structures\code\wall_torch.dm" +#include "modular_nova\modules\primitive_structures\code\windows.dm" +#include "modular_nova\modules\primitive_structures\code\wooden_ladder.dm" +#include "modular_nova\modules\prison_transport\code\outfits.dm" +#include "modular_nova\modules\projectiles\code\guns\misc\m6pdw.dm" +#include "modular_nova\modules\protected_roles\code\_job.dm" +#include "modular_nova\modules\protected_roles\code\antag_restricted_jobs.dm" +#include "modular_nova\modules\QOL\code\_under.dm" +#include "modular_nova\modules\QOL\code\datums\components\crafting\recipes\recipes_misc.dm" +#include "modular_nova\modules\QOL\code\game\objects\items\mop.dm" +#include "modular_nova\modules\radiosound\code\headset.dm" +#include "modular_nova\modules\reagent_forging\code\anvil.dm" +#include "modular_nova\modules\reagent_forging\code\crafting_bench.dm" +#include "modular_nova\modules\reagent_forging\code\crafting_bench_recipes.dm" +#include "modular_nova\modules\reagent_forging\code\forge.dm" +#include "modular_nova\modules\reagent_forging\code\forge_clothing.dm" +#include "modular_nova\modules\reagent_forging\code\forge_items.dm" +#include "modular_nova\modules\reagent_forging\code\forge_recipes.dm" +#include "modular_nova\modules\reagent_forging\code\forge_weapons.dm" +#include "modular_nova\modules\reagent_forging\code\reagent_component.dm" +#include "modular_nova\modules\reagent_forging\code\smith_skill.dm" +#include "modular_nova\modules\reagent_forging\code\tool_override.dm" +#include "modular_nova\modules\reagent_forging\code\water_basin.dm" +#include "modular_nova\modules\records_on_examine\code\record_manifest.dm" +#include "modular_nova\modules\records_on_examine\code\record_variables.dm" +#include "modular_nova\modules\records_on_examine\code\records_procs.dm" +#include "modular_nova\modules\records_on_examine\code\view_exploitables.dm" +#include "modular_nova\modules\resleeving\code\rsd_interface.dm" +#include "modular_nova\modules\resleeving\code\research\resleeving_research.dm" +#include "modular_nova\modules\rod-stopper\code\immovable_nova.dm" +#include "modular_nova\modules\rod-stopper\code\rodstopper.dm" +#include "modular_nova\modules\salon\code\barber.dm" +#include "modular_nova\modules\salon\code\barber_chair.dm" +#include "modular_nova\modules\salon\code\barbervend.dm" +#include "modular_nova\modules\salon\code\clothing.dm" +#include "modular_nova\modules\salon\code\fur_dyer.dm" +#include "modular_nova\modules\salon\code\hair_tie.dm" +#include "modular_nova\modules\salon\code\hand_dryer.dm" +#include "modular_nova\modules\salon\code\misc_items.dm" +#include "modular_nova\modules\salon\code\pipette.dm" +#include "modular_nova\modules\salon\code\scissors.dm" +#include "modular_nova\modules\salon\code\sprays.dm" +#include "modular_nova\modules\salon\code\straight_razor.dm" +#include "modular_nova\modules\science_tools\medical_tool_designs.dm" +#include "modular_nova\modules\science_tools\research.dm" +#include "modular_nova\modules\science_tools\tool_designs.dm" +#include "modular_nova\modules\science_tools\tools.dm" +#include "modular_nova\modules\sec_haul\code\corrections_officer\corrections_officer.dm" +#include "modular_nova\modules\sec_haul\code\corrections_officer\corrections_officer_equipment.dm" +#include "modular_nova\modules\sec_haul\code\corrections_officer\landmarks.dm" +#include "modular_nova\modules\sec_haul\code\guns\ammo.dm" +#include "modular_nova\modules\sec_haul\code\guns\armory_spawns.dm" +#include "modular_nova\modules\sec_haul\code\guns\bullets.dm" +#include "modular_nova\modules\sec_haul\code\guns\cargo_stuff.dm" +#include "modular_nova\modules\sec_haul\code\misc\ai_module.dm" +#include "modular_nova\modules\sec_haul\code\misc\bullet_drive.dm" +#include "modular_nova\modules\sec_haul\code\misc\decals.dm" +#include "modular_nova\modules\sec_haul\code\misc\packs.dm" +#include "modular_nova\modules\sec_haul\code\misc\vending.dm" +#include "modular_nova\modules\sec_haul\code\peacekeeper\armadyne_clothing.dm" +#include "modular_nova\modules\sec_haul\code\peacekeeper\peacekeeper_clothing.dm" +#include "modular_nova\modules\sec_haul\code\peacekeeper\peacekeeper_hammer.dm" +#include "modular_nova\modules\sec_haul\code\peacekeeper\peacekeeper_lockers.dm" +#include "modular_nova\modules\self_actualization_device\code\self_actualization_device.dm" +#include "modular_nova\modules\server_overflow\code\chat_link.dm" +#include "modular_nova\modules\server_overflow\code\client_procs.dm" +#include "modular_nova\modules\server_overflow\code\server_connect_panel.dm" +#include "modular_nova\modules\SEVA_suit\code\seva_obj.dm" +#include "modular_nova\modules\SEVA_suit\code\suit_voucher.dm" +#include "modular_nova\modules\shotgunrebalance\code\ammobox.dm" +#include "modular_nova\modules\shotgunrebalance\code\autolathe_design.dm" +#include "modular_nova\modules\shotgunrebalance\code\shotgun.dm" +#include "modular_nova\modules\SiliconQoL\code\_onclick.dm" +#include "modular_nova\modules\SiliconQoL\code\countdown.dm" +#include "modular_nova\modules\SiliconQoL\code\robotic_factory.dm" +#include "modular_nova\modules\soulstone_changes\code\soulstone.dm" +#include "modular_nova\modules\soulstone_changes\code\components\return_on_death.dm" +#include "modular_nova\modules\space_vines\scythes.dm" +#include "modular_nova\modules\space_vines\venus.dm" +#include "modular_nova\modules\space_vines\vine_mutations.dm" +#include "modular_nova\modules\space_vines\vine_structure.dm" +#include "modular_nova\modules\specialist_armor\code\cargo_packs.dm" +#include "modular_nova\modules\specialist_armor\code\clothing_bullet_damage_component.dm" +#include "modular_nova\modules\specialist_armor\code\hardened.dm" +#include "modular_nova\modules\specialist_armor\code\peacekeeper.dm" +#include "modular_nova\modules\specialist_armor\code\sacrificial.dm" +#include "modular_nova\modules\stasisrework\code\all_nodes.dm" +#include "modular_nova\modules\stasisrework\code\bodybag.dm" +#include "modular_nova\modules\stasisrework\code\bodybag_structure.dm" +#include "modular_nova\modules\stasisrework\code\machine_circuitboards.dm" +#include "modular_nova\modules\stasisrework\code\medical_designs.dm" +#include "modular_nova\modules\stasisrework\code\stasissleeper.dm" +#include "modular_nova\modules\station_traits\code\station_traits.dm" +#include "modular_nova\modules\stone\code\ore_veins.dm" +#include "modular_nova\modules\stone\code\stone.dm" +#include "modular_nova\modules\stormtrooper\code\stormtrooper_clothes.dm" +#include "modular_nova\modules\subsystems\code\ticket_ping\adminhelp.dm" +#include "modular_nova\modules\subsystems\code\ticket_ping\preference.dm" +#include "modular_nova\modules\subsystems\code\ticket_ping\ticket_ss.dm" +#include "modular_nova\modules\supersoups\code\soup_mixtures.dm" +#include "modular_nova\modules\supersoups\code\stove.dm" +#include "modular_nova\modules\Syndie_edits\code\area.dm" +#include "modular_nova\modules\Syndie_edits\code\syndie_edits.dm" +#include "modular_nova\modules\synths\code\defib.dm" +#include "modular_nova\modules\synths\code\research_nodes.dm" +#include "modular_nova\modules\synths\code\bodyparts\brain.dm" +#include "modular_nova\modules\synths\code\bodyparts\ears.dm" +#include "modular_nova\modules\synths\code\bodyparts\eyes.dm" +#include "modular_nova\modules\synths\code\bodyparts\heart.dm" +#include "modular_nova\modules\synths\code\bodyparts\limbs.dm" +#include "modular_nova\modules\synths\code\bodyparts\liver.dm" +#include "modular_nova\modules\synths\code\bodyparts\lungs.dm" +#include "modular_nova\modules\synths\code\bodyparts\power_cord.dm" +#include "modular_nova\modules\synths\code\bodyparts\silicon_alt_brains.dm" +#include "modular_nova\modules\synths\code\bodyparts\stomach.dm" +#include "modular_nova\modules\synths\code\bodyparts\tongue.dm" +#include "modular_nova\modules\synths\code\bodyparts\internal_computer\brain.dm" +#include "modular_nova\modules\synths\code\bodyparts\internal_computer\internal_computer.dm" +#include "modular_nova\modules\synths\code\reagents\blood_pack.dm" +#include "modular_nova\modules\synths\code\reagents\pill.dm" +#include "modular_nova\modules\synths\code\reagents\pill_bottles.dm" +#include "modular_nova\modules\synths\code\reagents\reagents.dm" +#include "modular_nova\modules\synths\code\species\prefsmenu.dm" +#include "modular_nova\modules\synths\code\species\screen.dm" +#include "modular_nova\modules\synths\code\species\synthetic.dm" +#include "modular_nova\modules\synths\code\surgery\mechanic_steps.dm" +#include "modular_nova\modules\synths\code\surgery\robot_brain_surgery.dm" +#include "modular_nova\modules\synths\code\surgery\robot_chassis_restoration.dm" +#include "modular_nova\modules\synths\code\surgery\robot_healing.dm" +#include "modular_nova\modules\tableflip\code\flipped_table.dm" +#include "modular_nova\modules\tagline\code\world.dm" +#include "modular_nova\modules\tesh_augments\code\all_nodes.dm" +#include "modular_nova\modules\tesh_augments\code\limbs.dm" +#include "modular_nova\modules\tesh_augments\code\mechfabricator_designs.dm" +#include "modular_nova\modules\tesh_augments\code\robot_bodyparts.dm" +#include "modular_nova\modules\teshari\code\_clothing_defines.dm" +#include "modular_nova\modules\teshari\code\_teshari.dm" +#include "modular_nova\modules\teshari\code\language_holder.dm" +#include "modular_nova\modules\teshari\code\schechi.dm" +#include "modular_nova\modules\teshari\code\teshari_bodytype.dm" +#include "modular_nova\modules\teshari\code\teshari_clothes.dm" +#include "modular_nova\modules\ticket_counter\code\counter.dm" +#include "modular_nova\modules\time_clock\code\console.dm" +#include "modular_nova\modules\time_clock\code\console_tgui.dm" +#include "modular_nova\modules\time_clock\code\mind.dm" +#include "modular_nova\modules\time_clock\code\off_duty_component.dm" +#include "modular_nova\modules\title_screen\code\_title_screen_defines.dm" +#include "modular_nova\modules\title_screen\code\new_player.dm" +#include "modular_nova\modules\title_screen\code\title_screen_controls.dm" +#include "modular_nova\modules\title_screen\code\title_screen_html.dm" +#include "modular_nova\modules\title_screen\code\title_screen_pref_middleware.dm" +#include "modular_nova\modules\title_screen\code\title_screen_subsystem.dm" +#include "modular_nova\modules\traitor-uplinks\code\categories\bundles.dm" +#include "modular_nova\modules\traitor-uplinks\code\categories\dangerous.dm" +#include "modular_nova\modules\traitor-uplinks\code\categories\device_tools.dm" +#include "modular_nova\modules\traitor-uplinks\code\categories\stealthy_tools.dm" +#include "modular_nova\modules\traitor-uplinks\code\categories\stealthy_weapons.dm" +#include "modular_nova\modules\traitor-uplinks\code\categories\suits.dm" +#include "modular_nova\modules\tribal_extended\code\crafting.dm" +#include "modular_nova\modules\tribal_extended\code\recipes.dm" +#include "modular_nova\modules\tribal_extended\code\ammo\caseless\arrow.dm" +#include "modular_nova\modules\tribal_extended\code\ammo\reusable\arrow.dm" +#include "modular_nova\modules\tribal_extended\code\weapons\bow.dm" +#include "modular_nova\modules\tribal_extended\code\weapons\shield.dm" +#include "modular_nova\modules\tribal_extended\code\weapons\sword.dm" +#include "modular_nova\modules\trim_tokens\code\cards_ids.dm" +#include "modular_nova\modules\trim_tokens\code\trim_tokens.dm" +#include "modular_nova\modules\turretid\code\turret_id_system.dm" +#include "modular_nova\modules\verbs\code\looc.dm" +#include "modular_nova\modules\verbs\code\say.dm" +#include "modular_nova\modules\verbs\code\subtle.dm" +#include "modular_nova\modules\veteran_only\code\job_types.dm" +#include "modular_nova\modules\veteran_only\code\species_types.dm" +#include "modular_nova\modules\vox_sprites\code\color.dm" +#include "modular_nova\modules\vox_sprites\code\head.dm" +#include "modular_nova\modules\vox_sprites\code\security.dm" +#include "modular_nova\modules\vox_sprites\code\sneakers.dm" +#include "modular_nova\modules\wargame_projectors\code\game_kit.dm" +#include "modular_nova\modules\wargame_projectors\code\holograms.dm" +#include "modular_nova\modules\wargame_projectors\code\projectors.dm" +#include "modular_nova\modules\window_airbags\code\window_airbag.dm" +#include "modular_nova\modules\wrestlingring\code\wrestlingring.dm" +#include "modular_nova\modules\xenoarch\code\modules\hydroponics\amauri.dm" +#include "modular_nova\modules\xenoarch\code\modules\hydroponics\gelthi.dm" +#include "modular_nova\modules\xenoarch\code\modules\hydroponics\jurlmah.dm" +#include "modular_nova\modules\xenoarch\code\modules\hydroponics\nofruit.dm" +#include "modular_nova\modules\xenoarch\code\modules\hydroponics\shand.dm" +#include "modular_nova\modules\xenoarch\code\modules\hydroponics\surik.dm" +#include "modular_nova\modules\xenoarch\code\modules\hydroponics\telriis.dm" +#include "modular_nova\modules\xenoarch\code\modules\hydroponics\thaadra.dm" +#include "modular_nova\modules\xenoarch\code\modules\hydroponics\vale.dm" +#include "modular_nova\modules\xenoarch\code\modules\hydroponics\vaporsac.dm" +#include "modular_nova\modules\xenoarch\code\modules\research\xenoarch\designs_and_tech.dm" +#include "modular_nova\modules\xenoarch\code\modules\research\xenoarch\glassblowing_integration.dm" +#include "modular_nova\modules\xenoarch\code\modules\research\xenoarch\strange_rock.dm" +#include "modular_nova\modules\xenoarch\code\modules\research\xenoarch\xenoarch_item.dm" +#include "modular_nova\modules\xenoarch\code\modules\research\xenoarch\xenoarch_machine.dm" +#include "modular_nova\modules\xenoarch\code\modules\research\xenoarch\xenoarch_reward.dm" +#include "modular_nova\modules\xenoarch\code\modules\research\xenoarch\xenoarch_tool.dm" +#include "modular_nova\modules\xenos_nova_redo\code\base_nova_xeno.dm" +#include "modular_nova\modules\xenos_nova_redo\code\human_defense.dm" +#include "modular_nova\modules\xenos_nova_redo\code\larva.dm" +#include "modular_nova\modules\xenos_nova_redo\code\xeno_types\defender.dm" +#include "modular_nova\modules\xenos_nova_redo\code\xeno_types\drone.dm" +#include "modular_nova\modules\xenos_nova_redo\code\xeno_types\praetorian.dm" +#include "modular_nova\modules\xenos_nova_redo\code\xeno_types\queen.dm" +#include "modular_nova\modules\xenos_nova_redo\code\xeno_types\ravager.dm" +#include "modular_nova\modules\xenos_nova_redo\code\xeno_types\rouny.dm" +#include "modular_nova\modules\xenos_nova_redo\code\xeno_types\sentinel.dm" +#include "modular_nova\modules\xenos_nova_redo\code\xeno_types\spitter.dm" +#include "modular_nova\modules\xenos_nova_redo\code\xeno_types\warrior.dm" // END_INCLUDE diff --git a/tgui/.eslintignore b/tgui/.eslintignore index a59187b933aee8..d3c0ac79cd8820 100644 --- a/tgui/.eslintignore +++ b/tgui/.eslintignore @@ -3,4 +3,14 @@ /**/*.bundle.* /**/*.chunk.* /**/*.hot-update.* -/packages/inferno/** +**.lock +**.log +**.json +**.svg +**.scss +**.md +**.css +**.txt +**.woff2 +**.eot +**.ttf diff --git a/tgui/.eslintrc-sonar.yml b/tgui/.eslintrc-sonar.yml index 3cdd49f889e2a4..ebc57f72c008f4 100644 --- a/tgui/.eslintrc-sonar.yml +++ b/tgui/.eslintrc-sonar.yml @@ -1,26 +1 @@ -rules: - # radar/cognitive-complexity: error - radar/max-switch-cases: error - radar/no-all-duplicated-branches: error - radar/no-collapsible-if: error - radar/no-collection-size-mischeck: error - radar/no-duplicate-string: error - radar/no-duplicated-branches: error - radar/no-element-overwrite: error - radar/no-extra-arguments: error - radar/no-identical-conditions: error - radar/no-identical-expressions: error - radar/no-identical-functions: error - radar/no-inverted-boolean-check: error - radar/no-one-iteration-loop: error - radar/no-redundant-boolean: error - radar/no-redundant-jump: error - radar/no-same-line-conditional: error - radar/no-small-switch: error - radar/no-unused-collection: error - radar/no-use-of-empty-return-value: error - radar/no-useless-catch: error - radar/prefer-immediate-return: error - radar/prefer-object-literal: error - radar/prefer-single-boolean-return: error - radar/prefer-while: error +extends: 'plugin:sonarjs/recommended' diff --git a/tgui/.eslintrc.yml b/tgui/.eslintrc.yml index 7fee3791fbbfc2..92dfe1320cbfd3 100644 --- a/tgui/.eslintrc.yml +++ b/tgui/.eslintrc.yml @@ -11,12 +11,13 @@ env: browser: true node: true plugins: - - radar + - sonarjs - react - unused-imports + - simple-import-sort settings: react: - version: '16.10' + version: '18.2' rules: ## Possible Errors ## ---------------------------------------- @@ -337,7 +338,7 @@ rules: ## Require or disallow named function expressions # func-names: error ## Enforce the consistent use of either function declarations or expressions - func-style: [error, expression] + # func-style: [error, expression] ## Enforce line breaks between arguments of a function call # function-call-argument-newline: error ## Enforce consistent line breaks inside function parentheses @@ -651,7 +652,7 @@ rules: ## Enforce ES5 or ES6 class for React Components react/prefer-es6-class: error ## Enforce that props are read-only - react/prefer-read-only-props: error + react/prefer-read-only-props: off ## Enforce stateless React Components to be written as a pure function react/prefer-stateless-function: error ## Prevent missing props validation in a React component definition @@ -764,3 +765,6 @@ rules: ## Prevents the use of unused imports. ## This could be done by enabling no-unused-vars, but we're doing this for now unused-imports/no-unused-imports: error + ## https://github.com/lydell/eslint-plugin-simple-import-sort/ + simple-import-sort/imports: error + simple-import-sort/exports: error diff --git a/tgui/.prettierrc.yml b/tgui/.prettierrc.yml index 1eebe6098b11da..01769692264f15 100644 --- a/tgui/.prettierrc.yml +++ b/tgui/.prettierrc.yml @@ -1,15 +1 @@ -arrowParens: always -breakLongMethodChains: true -endOfLine: lf -importFormatting: oneline -jsxBracketSameLine: true -jsxSingleQuote: false -offsetTernaryExpressions: true -printWidth: 80 -proseWrap: preserve -quoteProps: preserve -semi: true singleQuote: true -tabWidth: 2 -trailingComma: es5 -useTabs: false diff --git a/tgui/.swcrc b/tgui/.swcrc new file mode 100644 index 00000000000000..c0402a41f0bf61 --- /dev/null +++ b/tgui/.swcrc @@ -0,0 +1,15 @@ +{ + "$schema": "https://json.schemastore.org/swcrc", + "jsc": { + "loose": true, + "parser": { + "syntax": "typescript", + "tsx": true + }, + "transform": { + "react": { + "runtime": "automatic" + } + } + } +} diff --git a/tgui/.yarn/sdks/eslint/package.json b/tgui/.yarn/sdks/eslint/package.json index 744a77321030e7..b29322a1ffb326 100644 --- a/tgui/.yarn/sdks/eslint/package.json +++ b/tgui/.yarn/sdks/eslint/package.json @@ -2,5 +2,8 @@ "name": "eslint", "version": "7.32.0-sdk", "main": "./lib/api.js", - "type": "commonjs" + "type": "commonjs", + "bin": { + "eslint": "./bin/eslint.js" + } } diff --git a/tgui/.yarn/sdks/prettier/bin/prettier.cjs b/tgui/.yarn/sdks/prettier/bin/prettier.cjs new file mode 100644 index 00000000000000..5efad688e73914 --- /dev/null +++ b/tgui/.yarn/sdks/prettier/bin/prettier.cjs @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require prettier/bin/prettier.cjs + require(absPnpApiPath).setup(); + } +} + +// Defer to the real prettier/bin/prettier.cjs your application uses +module.exports = absRequire(`prettier/bin/prettier.cjs`); diff --git a/tgui/.yarn/sdks/prettier/index.cjs b/tgui/.yarn/sdks/prettier/index.cjs new file mode 100644 index 00000000000000..8758e367a725ab --- /dev/null +++ b/tgui/.yarn/sdks/prettier/index.cjs @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require prettier + require(absPnpApiPath).setup(); + } +} + +// Defer to the real prettier your application uses +module.exports = absRequire(`prettier`); diff --git a/tgui/.yarn/sdks/prettier/index.js b/tgui/.yarn/sdks/prettier/index.js deleted file mode 100644 index 81f9bec5fe85e3..00000000000000 --- a/tgui/.yarn/sdks/prettier/index.js +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env node - -const {existsSync} = require(`fs`); -const {createRequire} = require(`module`); -const {resolve} = require(`path`); - -const relPnpApiPath = "../../../.pnp.cjs"; - -const absPnpApiPath = resolve(__dirname, relPnpApiPath); -const absRequire = createRequire(absPnpApiPath); - -if (existsSync(absPnpApiPath)) { - if (!process.versions.pnp) { - // Setup the environment to be able to require prettier/index.js - require(absPnpApiPath).setup(); - } -} - -// Defer to the real prettier/index.js your application uses -module.exports = absRequire(`prettier/index.js`); diff --git a/tgui/.yarn/sdks/prettier/package.json b/tgui/.yarn/sdks/prettier/package.json index 0cbd71ff32d5aa..c61f5117bacf3a 100644 --- a/tgui/.yarn/sdks/prettier/package.json +++ b/tgui/.yarn/sdks/prettier/package.json @@ -1,6 +1,7 @@ { "name": "prettier", - "version": "0.19.0-sdk", - "main": "./index.js", - "type": "commonjs" + "version": "3.1.0-sdk", + "main": "./index.cjs", + "type": "commonjs", + "bin": "./bin/prettier.cjs" } diff --git a/tgui/.yarn/sdks/typescript/lib/tsserver.js b/tgui/.yarn/sdks/typescript/lib/tsserver.js index 0fb2ac1079786f..bbb1e46501b528 100644 --- a/tgui/.yarn/sdks/typescript/lib/tsserver.js +++ b/tgui/.yarn/sdks/typescript/lib/tsserver.js @@ -109,6 +109,8 @@ const moduleWrapper = tsserver => { str = `zip:${str}`; } break; } + } else { + str = str.replace(/^\/?/, process.platform === `win32` ? `` : `/`); } } diff --git a/tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js b/tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js index e7033a81782d05..a68f028fe19710 100644 --- a/tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js +++ b/tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js @@ -109,6 +109,8 @@ const moduleWrapper = tsserver => { str = `zip:${str}`; } break; } + } else { + str = str.replace(/^\/?/, process.platform === `win32` ? `` : `/`); } } diff --git a/tgui/.yarn/sdks/typescript/lib/typescript.js b/tgui/.yarn/sdks/typescript/lib/typescript.js index e14fa87beaa405..b5f4db25bee673 100644 --- a/tgui/.yarn/sdks/typescript/lib/typescript.js +++ b/tgui/.yarn/sdks/typescript/lib/typescript.js @@ -11,10 +11,10 @@ const absRequire = createRequire(absPnpApiPath); if (existsSync(absPnpApiPath)) { if (!process.versions.pnp) { - // Setup the environment to be able to require typescript/lib/typescript.js + // Setup the environment to be able to require typescript require(absPnpApiPath).setup(); } } -// Defer to the real typescript/lib/typescript.js your application uses -module.exports = absRequire(`typescript/lib/typescript.js`); +// Defer to the real typescript your application uses +module.exports = absRequire(`typescript`); diff --git a/tgui/.yarn/sdks/typescript/package.json b/tgui/.yarn/sdks/typescript/package.json index 6aac31b184010d..656833d45b642a 100644 --- a/tgui/.yarn/sdks/typescript/package.json +++ b/tgui/.yarn/sdks/typescript/package.json @@ -2,5 +2,9 @@ "name": "typescript", "version": "4.9.4-sdk", "main": "./lib/typescript.js", - "type": "commonjs" + "type": "commonjs", + "bin": { + "tsc": "./bin/tsc", + "tsserver": "./bin/tsserver" + } } diff --git a/tgui/.yarnrc.yml b/tgui/.yarnrc.yml index b6387e8e46e839..086484a243a3f4 100644 --- a/tgui/.yarnrc.yml +++ b/tgui/.yarnrc.yml @@ -8,7 +8,7 @@ logFilters: plugins: - path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs - spec: "@yarnpkg/plugin-interactive-tools" + spec: '@yarnpkg/plugin-interactive-tools' pnpEnableEsmLoader: false diff --git a/tgui/README.md b/tgui/README.md index e87130243429bb..1bae91fd132582 100644 --- a/tgui/README.md +++ b/tgui/README.md @@ -16,10 +16,9 @@ If you are completely new to frontend and prefer to **learn by doing**, start wi ### Guides -This project uses **Inferno** - a very fast UI rendering engine with a similar API to React. Take your time to read these guides: +This project uses React. Take your time to read the guide: -- [React guide](https://reactjs.org/docs/hello-world.html) -- [Inferno documentation](https://infernojs.org/docs/guides/components) - highlights differences with React. +- [React guide](https://react.dev/learn) If you were already familiar with an older, Ractive-based tgui, and want to translate concepts between old and new tgui, read this [interface conversion guide](docs/converting-old-tgui-interfaces.md). @@ -71,6 +70,7 @@ However, if you want finer control over the installation or build process, you w - `tools/build/build tgui-clean` - Clean up tgui folder. > With Juke Build, you can run multiple targets together, e.g.: +> > ``` > tools/build/build tgui tgui-lint tgui-tsc tgui-test > ``` @@ -137,7 +137,7 @@ Press `F12` or click the green bug to open the KitchenSink interface. This inter playground to test various tgui components. **Layout Debugger.** -Press `F11` to toggle the *layout debugger*. It will show outlines of +Press `F11` to toggle the _layout debugger_. It will show outlines of all tgui elements, which makes it easy to understand how everything comes together, and can reveal certain layout bugs which are not normally visible. diff --git a/tgui/babel.config.js b/tgui/babel.config.js deleted file mode 100644 index e702c9a7119d61..00000000000000 --- a/tgui/babel.config.js +++ /dev/null @@ -1,44 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -const createBabelConfig = (options) => { - const { presets = [], plugins = [], removeConsole } = options; - // prettier-ignore - return { - presets: [ - [require.resolve('@babel/preset-typescript'), { - allowDeclareFields: true, - }], - [require.resolve('@babel/preset-env'), { - modules: 'commonjs', - useBuiltIns: 'entry', - corejs: '3', - spec: false, - loose: true, - targets: [], - }], - ...presets, - ].filter(Boolean), - plugins: [ - [require.resolve('@babel/plugin-proposal-class-properties'), { - loose: true, - }], - require.resolve('@babel/plugin-transform-jscript'), - require.resolve('babel-plugin-inferno'), - removeConsole && require.resolve('babel-plugin-transform-remove-console'), - require.resolve('common/string.babel-plugin.cjs'), - ...plugins, - ].filter(Boolean), - }; -}; - -module.exports = (api) => { - api.cache(true); - const mode = process.env.NODE_ENV; - return createBabelConfig({ mode }); -}; - -module.exports.createBabelConfig = createBabelConfig; diff --git a/tgui/docs/component-reference.md b/tgui/docs/component-reference.md index 9fff68172fd8df..6084b64082f82c 100644 --- a/tgui/docs/component-reference.md +++ b/tgui/docs/component-reference.md @@ -65,17 +65,13 @@ it is used a lot in this framework. **Event handlers.** Event handlers are callbacks that you can attack to various element to -listen for browser events. Inferno supports camelcase (`onClick`) and -lowercase (`onclick`) event names. - -- Camel case names are what's called *synthetic* events, and are the -**preferred way** of handling events in React, for efficiency and -performance reasons. Please read -[Inferno Event Handling](https://infernojs.org/docs/guides/event-handling) -to understand what this is about. -- Lower case names are native browser events and should be used sparingly, -for example when you need an explicit IE8 support. **DO NOT** use -lowercase event handlers unless you really know what you are doing. +listen for browser events. React supports camelcase (`onClick`) event names. + +- Camel case names are what's called _synthetic_ events, and are the + **preferred way** of handling events in React, for efficiency and + performance reasons. Please read + [React Event Handling](https://react.dev/learn/responding-to-events) + to understand what this is about. ## `tgui/components` @@ -87,13 +83,13 @@ This component provides animations for numeric values. - `value: number` - Value to animate. - `initial: number` - Initial value to use in animation when element -first appears. If you set initial to `0` for example, number will always -animate starting from `0`, and if omitted, it will not play an initial -animation. + first appears. If you set initial to `0` for example, number will always + animate starting from `0`, and if omitted, it will not play an initial + animation. - `format: value => value` - Output formatter. - Example: `value => Math.round(value)`. - `children: (formattedValue, rawValue) => any` - Pull the animated number to -animate more complex things deeper in the DOM tree. + animate more complex things deeper in the DOM tree. - Example: `(_, value) => <Icon rotation={value} />` ### `BlockQuote` @@ -129,9 +125,7 @@ To workaround this problem, the Box children accept a render props function. This way, `Button` can pull out the `className` generated by the `Box`. ```jsx -<Box color="primary"> - {props => <Button {...props} />} -</Box> +<Box color="primary">{(props) => <Button {...props} />}</Box> ``` **Box Units** @@ -162,10 +156,10 @@ Default font size (`1rem`) is equal to `12px`. - `fontSize: number` - Font size. - `fontFamily: string` - Font family. - `lineHeight: number` - Directly affects the height of text lines. -Useful for adjusting button height. + Useful for adjusting button height. - `inline: boolean` - Forces the `Box` to appear as an `inline-block`, -or in other words, makes the `Box` flow with the text instead of taking -all available horizontal space. + or in other words, makes the `Box` flow with the text instead of taking + all available horizontal space. - `m: number` - Margin on all sides. - `mx: number` - Horizontal margin. - `my: number` - Vertical margin. @@ -198,7 +192,7 @@ all available horizontal space. - `#ffffff` - Hex format - `rgba(255, 255, 255, 1)` - RGB format - `purple` - Applies an atomic `color-<name>` class to the element. - See `styles/color-map.scss`. + See `styles/color-map.scss`. - `backgroundColor: string` - Sets background color. - `#ffffff` - Hex format - `rgba(255, 255, 255, 1)` - RGB format @@ -215,17 +209,17 @@ Buttons allow users to take actions, and make choices, with a single click. - `iconPosition?: string` - Set to `'right'` to align the icon to the right of the children - `color: string` - Button color, as defined in `variables.scss`. - There is also a special color `transparent` - makes the button - transparent and slightly dim when inactive. + transparent and slightly dim when inactive. - `disabled: boolean` - Disables and greys out the button. - `selected: boolean` - Activates the button (gives it a green color). - `tooltip: string` - A fancy, boxy tooltip, which appears when hovering -over the button. + over the button. - `tooltipPosition?: string` - Position of the tooltip. See [`Popper`](#Popper) for valid options. - `ellipsis: boolean` - If button width is constrained, button text will -be truncated with an ellipsis. Be careful however, because this prop breaks -the baseline alignment. + be truncated with an ellipsis. Be careful however, because this prop breaks + the baseline alignment. - `title: string` - A native browser tooltip, which appears when hovering -over the button. + over the button. - `children: any` - Content to render inside the button. - `onClick: function` - Called when element is clicked. - `verticalAlignContent: string` - Align content vertically using flex. Use lineHeight if the height is static. @@ -263,11 +257,11 @@ commit, while escape cancels. - See inherited props: [Box](#box) - `fluid`: fill available horizontal space - `onCommit: (e, value) => void`: function that is called after the user -defocuses the input or presses enter + defocuses the input or presses enter - `currentValue: string`: default string to display when the input is shown - `defaultValue: string`: default value emitted if the user leaves the box -blank when hitting enter or defocusing. If left undefined, will cancel the -change on a blank defocus/enter + blank when hitting enter or defocusing. If left undefined, will cancel the + change on a blank defocus/enter ### `ByondUi` @@ -304,8 +298,8 @@ It supports a full set of `Box` properties for layout purposes. - See inherited props: [Box](#box) - `params: any` - An object with parameters, which are directly passed to -the `winset` proc call. You can find a full reference of these parameters -in [BYOND controls and parameters guide](https://secure.byond.com/docs/ref/skinparams.html). + the `winset` proc call. You can find a full reference of these parameters + in [BYOND controls and parameters guide](https://secure.byond.com/docs/ref/skinparams.html). ### `Collapsible` @@ -352,7 +346,7 @@ Works like the good old `<hr>` element, but it's fancier. - `vertical: boolean` - Divide content vertically. - `hidden: boolean` - Divider can divide content without creating a dividing -line. + line. ### `Dropdown` @@ -364,13 +358,12 @@ and displays selected entry. - See inherited props: [Box](#box) - See inherited props: [Icon](#icon) - `options: string[] | DropdownEntry[]` - An array of strings which will be displayed in the -dropdown when open. See Dropdown.tsx for more adcanced usage with DropdownEntry + dropdown when open. See Dropdown.tsx for more advanced usage with DropdownEntry - `selected: any` - Currently selected entry -- `width: string` - Width of dropdown button and resulting menu; css width value - `over: boolean` - Dropdown renders over instead of below - `color: string` - Color of dropdown button -- `nochevron: boolean` - Whether or not the arrow on the right hand side of the dropdown button is visible -- `displayText: string | number | InfernoNode` - Text to always display in place of the selected text +- `noChevron: boolean` - Whether or not the arrow on the right hand side of the dropdown button is visible +- `displayText: ReactNode` - Text to always display in place of the selected text - `onClick: (e) => void` - Called when dropdown button is clicked - `onSelected: (value) => void` - Called when a value is picked from the list, `value` is the value that was picked @@ -390,13 +383,9 @@ to the left, and certain elements to the right: ```jsx <Flex> - <Flex.Item grow={1}> - Button description - </Flex.Item> + <Flex.Item grow={1}>Button description</Flex.Item> <Flex.Item> - <Button> - Perform an action - </Button> + <Button>Perform an action</Button> </Flex.Item> </Flex> ``` @@ -409,17 +398,17 @@ effectively places the last flex item to the very end of the flex container. - See inherited props: [Box](#box) - ~~`spacing: number`~~ - **Removed in tgui 4.3**, -use [Stack](#stack) instead. + use [Stack](#stack) instead. - `inline: boolean` - Makes flexbox container inline, with similar behavior -to an `inline` property on a `Box`. + to an `inline` property on a `Box`. - `direction: string` - This establishes the main-axis, thus defining the -direction flex items are placed in the flex container. + direction flex items are placed in the flex container. - `row` (default) - left to right. - `row-reverse` - right to left. - `column` - top to bottom. - `column-reverse` - bottom to top. - `wrap: string` - By default, flex items will all try to fit onto one line. -You can change that and allow the items to wrap as needed with this property. + You can change that and allow the items to wrap as needed with this property. - `nowrap` (default) - all flex items will be on one line - `wrap` - flex items will wrap onto multiple lines, from top to bottom. - `wrap-reverse` - flex items will wrap onto multiple lines from bottom to top. @@ -430,22 +419,22 @@ You can change that and allow the items to wrap as needed with this property. - `center` - items are centered on the cross axis. - `baseline` - items are aligned such as their baselines align. - `justify: string` - This defines the alignment along the main axis. -It helps distribute extra free space leftover when either all the flex -items on a line are inflexible, or are flexible but have reached their -maximum size. It also exerts some control over the alignment of items -when they overflow the line. + It helps distribute extra free space leftover when either all the flex + items on a line are inflexible, or are flexible but have reached their + maximum size. It also exerts some control over the alignment of items + when they overflow the line. - `flex-start` (default) - items are packed toward the start of the - flex-direction. + flex-direction. - `flex-end` - items are packed toward the end of the flex-direction. - `space-between` - items are evenly distributed in the line; first item is - on the start line, last item on the end line + on the start line, last item on the end line - `space-around` - items are evenly distributed in the line with equal space - around them. Note that visually the spaces aren't equal, since all the items - have equal space on both sides. The first item will have one unit of space - against the container edge, but two units of space between the next item - because that next item has its own spacing that applies. + around them. Note that visually the spaces aren't equal, since all the items + have equal space on both sides. The first item will have one unit of space + against the container edge, but two units of space between the next item + because that next item has its own spacing that applies. - `space-evenly` - items are distributed so that the spacing between any two - items (and the space to the edges) is equal. + items (and the space to the edges) is equal. - TBD (not all properties are supported in IE11). ### `Flex.Item` @@ -454,24 +443,24 @@ when they overflow the line. - See inherited props: [Box](#box) - `order: number` - By default, flex items are laid out in the source order. -However, the order property controls the order in which they appear in the -flex container. + However, the order property controls the order in which they appear in the + flex container. - `grow: number | boolean` - This defines the ability for a flex item to grow -if necessary. It accepts a unitless value that serves as a proportion. It -dictates what amount of the available space inside the flex container the -item should take up. This number is unit-less and is relative to other -siblings. + if necessary. It accepts a unitless value that serves as a proportion. It + dictates what amount of the available space inside the flex container the + item should take up. This number is unit-less and is relative to other + siblings. - `shrink: number | boolean` - This defines the ability for a flex item to -shrink if necessary. Inverse of `grow`. + shrink if necessary. Inverse of `grow`. - `basis: number | string` - This defines the default size of an element -before any flex-related calculations are done. Has to be a length -(e.g. `20%`, `5rem`), an `auto` or `content` keyword. + before any flex-related calculations are done. Has to be a length + (e.g. `20%`, `5rem`), an `auto` or `content` keyword. - **Important:** IE11 flex is buggy, and auto width/height calculations - can sometimes end up in a circular dependency. This usually happens, when - working with tables inside flex (they have wacky internal widths and such). - Setting basis to `0` breaks the loop and fixes all of the problems. + can sometimes end up in a circular dependency. This usually happens, when + working with tables inside flex (they have wacky internal widths and such). + Setting basis to `0` breaks the loop and fixes all of the problems. - `align: string` - This allows the default alignment (or the one specified by -align-items) to be overridden for individual flex items. See: [Flex](#flex). + align-items) to be overridden for individual flex items. See: [Flex](#flex). ### `Grid` @@ -487,14 +476,10 @@ Example: ```jsx <Grid> <Grid.Column> - <Section title="Section 1"> - Hello world! - </Section> + <Section title="Section 1">Hello world!</Section> </Grid.Column> <Grid.Column size={2}> - <Section title="Section 2"> - Hello world! - </Section> + <Section title="Section 2">Hello world!</Section> </Grid.Column> </Grid> ``` @@ -520,6 +505,7 @@ Renders one of the FontAwesome icons of your choice. To smoothen the transition from v4 to v5, we have added a v4 semantic to transform names with `-o` suffixes to FA Regular icons. For example: + - `square` will get transformed to `fas square` - `square-o` will get transformed to `far square` @@ -528,10 +514,10 @@ transform names with `-o` suffixes to FA Regular icons. For example: - See inherited props: [Box](#box) - `name: string` - Icon name. - `size: number` - Icon size. `1` is normal size, `2` is two times bigger. -Fractional numbers are supported. + Fractional numbers are supported. - `rotation: number` - Icon rotation, in degrees. - `spin: boolean` - Whether an icon should be spinning. Good for load -indicators. + indicators. ### `Icon.Stack` @@ -559,15 +545,18 @@ A basic text input, which allow users to enter text into a UI. **Props:** - See inherited props: [Box](#box) -- `value: string` - Value of an input. +- `value: string` - The initial value displayed on the input. - `placeholder: string` - Text placed into Input box when it's empty, -otherwise nothing. Clears automatically when focused. + otherwise nothing. Clears automatically when focused. - `fluid: boolean` - Fill all available horizontal space. - `selfClear: boolean` - Clear after hitting enter, as well as remain focused -when this happens. Useful for things like chat inputs. -- `onChange: (e, value) => void` - An event, which fires when you commit -the text by either unfocusing the input box, or by pressing the Enter key. -- `onInput: (e, value) => void` - An event, which fires on every keypress. + when this happens. Useful for things like chat inputs. +- `onChange: (e, value) => void` - Fires when the user clicks out or presses enter. +- `onEnter: (e, value) => void` - Fires when the user hits enter. +- `onEscape: (e) => void` - Fires when the user hits escape. +- `onInput: (e, value) => void` - Fires when the user types into the input. +- `expensive: boolean` - Introduces a delay before updating the input. Useful for large filters, + where you don't want to update on every keystroke. ### `Knob` @@ -582,30 +571,30 @@ Single click opens an input box to manually type in a number. - `animated: boolean` - Animates the value if it was changed externally. - `bipolar: boolean` - Knob can be bipolar or unipolar. - `size: number` - Relative size of the knob. `1` is normal size, `2` is two -times bigger. Fractional numbers are supported. + times bigger. Fractional numbers are supported. - `color: string` - Color of the outer ring around the knob. - `value: number` - Value itself, controls the position of the cursor. - `unit: string` - Unit to display to the right of value. - `minValue: number` - Lowest possible value. - `maxValue: number` - Highest possible value. - `fillValue: number` - If set, this value will be used to set the fill -percentage of the outer ring independently of the main value. + percentage of the outer ring independently of the main value. - `ranges: { color: [from, to] }` - Applies a `color` to the outer ring around -the knob based on whether the value lands in the range between `from` and `to`. -See an example of this prop in [ProgressBar](#progressbar). + the knob based on whether the value lands in the range between `from` and `to`. + See an example of this prop in [ProgressBar](#progressbar). - `step: number` (default: 1) - Adjust value by this amount when -dragging the input. + dragging the input. - `stepPixelSize: number` (default: 1) - Screen distance mouse needs -to travel to adjust value by one `step`. + to travel to adjust value by one `step`. - `format: value => value` - Format value using this function before -displaying it. + displaying it. - `suppressFlicker: number` - A number in milliseconds, for which the input -will hold off from updating while events propagate through the backend. -Default is about 250ms, increase it if you still see flickering. + will hold off from updating while events propagate through the backend. + Default is about 250ms, increase it if you still see flickering. - `onChange: (e, value) => void` - An event, which fires when you release -the input, or successfully enter a number. + the input, or successfully enter a number. - `onDrag: (e, value) => void` - An event, which fires about every 500ms -when you drag the input up and down, on release and on manual editing. + when you drag the input up and down, on release and on manual editing. ### `LabeledControls` @@ -633,9 +622,7 @@ column is labels, and second column is content. ```jsx <LabeledList> - <LabeledList.Item label="Item"> - Content - </LabeledList.Item> + <LabeledList.Item label="Item">Content</LabeledList.Item> </LabeledList> ``` @@ -644,13 +631,7 @@ to perform some sort of action), there is a way to do that: ```jsx <LabeledList> - <LabeledList.Item - label="Item" - buttons={( - <Button> - Click me! - </Button> - )}> + <LabeledList.Item label="Item" buttons={<Button>Click me!</Button>}> Content </LabeledList.Item> </LabeledList> @@ -665,7 +646,7 @@ to perform some sort of action), there is a way to do that: **Props:** - `className: string` - Applies a CSS class to the element. -- `label: string|InfernoNode` - Item label. +- `label: string|ReactNode` - Item label. - `labelWrap: boolean` - Lets the label wrap and makes it not take the minimum width. - `labelColor: string` - Sets the color of the label. - `color: string` - Sets the color of the content text. @@ -689,9 +670,7 @@ Example: ```jsx <LabeledList> - <LabeledList.Item label="Foo"> - Content - </LabeledList.Item> + <LabeledList.Item label="Foo">Content</LabeledList.Item> <LabeledList.Divider size={1} /> </LabeledList> ``` @@ -737,22 +716,22 @@ to fine tune the value, or single click it to manually type a number. - `minValue: number` - Lowest possible value. - `maxValue: number` - Highest possible value. - `step: number` (default: 1) - Adjust value by this amount when -dragging the input. + dragging the input. - `stepPixelSize: number` (default: 1) - Screen distance mouse needs -to travel to adjust value by one `step`. + to travel to adjust value by one `step`. - `width: string|number` - Width of the element, in `Box` units or pixels. - `height: string|numer` - Height of the element, in `Box` units or pixels. - `lineHeight: string|number` - lineHeight of the element, in `Box` units or pixels. - `fontSize: string|number` - fontSize of the element, in `Box` units or pixels. - `format: value => value` - Format value using this function before -displaying it. + displaying it. - `suppressFlicker: number` - A number in milliseconds, for which the input -will hold off from updating while events propagate through the backend. -Default is about 250ms, increase it if you still see flickering. + will hold off from updating while events propagate through the backend. + Default is about 250ms, increase it if you still see flickering. - `onChange: (e, value) => void` - An event, which fires when you release -the input, or successfully enter a number. + the input, or successfully enter a number. - `onDrag: (e, value) => void` - An event, which fires about every 500ms -when you drag the input up and down, on release and on manual editing. + when you drag the input up and down, on release and on manual editing. ### `Popper` @@ -760,9 +739,10 @@ Popper lets you position elements so that they don't go out of the bounds of the **Props:** -- `popperContent: InfernoNode` - The content that will be put inside the popper. -- `options?: { ... }` - An object of options to pass to `createPopper`. See [https://popper.js.org/docs/v2/constructors/#options], but the one you want most is `placement`. Valid placements are "bottom", "top", "left", and "right". You can affix "-start" and "-end" to achieve something like top left or top right respectively. You can also use "auto" (with an optional "-start" or "-end"), where a best fit will be chosen. -- `additionalStyles: { ... }` - A map of CSS styles to add to the element that will contain the popper. +- `content: ReactNode` - The content that will be put inside the popper. +- `isOpen: boolean` - Whether or not the popper is open. +- `onClickOutside?: (e) => void` - A function that will be called when the user clicks outside of the popper. +- `placement?: string` - The placement of the popper. See [https://popper.js.org/docs/v2/constructors/#placement] ### `ProgressBar` @@ -781,18 +761,19 @@ Usage of `ranges` prop: average: [0.25, 0.5], bad: [-Infinity, 0.25], }} - value={0.6} /> + value={0.6} +/> ``` **Props:** - `value: number` - Current progress as a floating point number between -`minValue` (default: 0) and `maxValue` (default: 1). Determines the -percentage and how filled the bar is. + `minValue` (default: 0) and `maxValue` (default: 1). Determines the + percentage and how filled the bar is. - `minValue: number` - Lowest possible value. - `maxValue: number` - Highest possible value. - `ranges: { color: [from, to] }` - Applies a `color` to the progress bar -based on whether the value lands in the range between `from` and `to`. + based on whether the value lands in the range between `from` and `to`. - `color: string` - Color of the progress bar. Can take any of the following formats: - `#ffffff` - Hex format - `rgb(r,g,b) / rgba(r,g,b,a)` - RGB format @@ -810,13 +791,14 @@ The RoundGauge component provides a visual representation of a single metric, as value={tankPressure} minValue={0} maxValue={pressureLimit} - alertAfter={pressureLimit * 0.70} + alertAfter={pressureLimit * 0.7} ranges={{ - "good": [0, pressureLimit * 0.70], - "average": [pressureLimit * 0.70, pressureLimit * 0.85], - "bad": [pressureLimit * 0.85, pressureLimit], + good: [0, pressureLimit * 0.7], + average: [pressureLimit * 0.7, pressureLimit * 0.85], + bad: [pressureLimit * 0.85, pressureLimit], }} - format={formatPressure} /> + format={formatPressure} +/> ``` The alert on the gauge is optional, and will only be shown if the `alertAfter` prop is defined. When defined, the alert will begin to flash the respective color upon which the needle currently rests, as defined in the `ranges` prop. @@ -844,22 +826,14 @@ clearly indicates hierarchy. Section can also be titled to clearly define its purpose. ```jsx -<Section title="Cargo"> - Here you can order supply crates. -</Section> +<Section title="Cargo">Here you can order supply crates.</Section> ``` If you want to have a button on the right side of an section title (for example, to perform some sort of action), there is a way to do that: ```jsx -<Section - title="Cargo" - buttons={( - <Button> - Send shuttle - </Button> - )}> +<Section title="Cargo" buttons={<Button>Send shuttle</Button>}> Here you can order supply crates. </Section> ``` @@ -893,23 +867,23 @@ Single click opens an input box to manually type in a number. - `minValue: number` - Lowest possible value. - `maxValue: number` - Highest possible value. - `fillValue: number` - If set, this value will be used to set the fill -percentage of the progress bar filler independently of the main value. + percentage of the progress bar filler independently of the main value. - `ranges: { color: [from, to] }` - Applies a `color` to the slider -based on whether the value lands in the range between `from` and `to`. -See an example of this prop in [ProgressBar](#progressbar). + based on whether the value lands in the range between `from` and `to`. + See an example of this prop in [ProgressBar](#progressbar). - `step: number` (default: 1) - Adjust value by this amount when -dragging the input. + dragging the input. - `stepPixelSize: number` (default: 1) - Screen distance mouse needs -to travel to adjust value by one `step`. + to travel to adjust value by one `step`. - `format: value => value` - Format value using this function before -displaying it. + displaying it. - `suppressFlicker: number` - A number in milliseconds, for which the input -will hold off from updating while events propagate through the backend. -Default is about 250ms, increase it if you still see flickering. + will hold off from updating while events propagate through the backend. + Default is about 250ms, increase it if you still see flickering. - `onChange: (e, value) => void` - An event, which fires when you release -the input, or successfully enter a number. + the input, or successfully enter a number. - `onDrag: (e, value) => void` - An event, which fires about every 500ms -when you drag the input up and down, on release and on manual editing. + when you drag the input up and down, on release and on manual editing. ### `Stack` @@ -925,13 +899,9 @@ Stacks can be vertical by adding a `vertical` property. ```jsx <Stack> - <Stack.Item grow> - Button description - </Stack.Item> + <Stack.Item grow>Button description</Stack.Item> <Stack.Item> - <Button> - Perform an action - </Button> + <Button>Perform an action</Button> </Stack.Item> </Stack> ``` @@ -946,9 +916,7 @@ Make sure to use the `fill` property. <Window.Content> <Stack fill> <Stack.Item> - <Section fill> - Sidebar - </Section> + <Section fill>Sidebar</Section> </Stack.Item> <Stack.Item grow> <Stack fill vertical> @@ -958,9 +926,7 @@ Make sure to use the `fill` property. </Section> </Stack.Item> <Stack.Item> - <Section> - Bottom pane - </Section> + <Section>Bottom pane</Section> </Stack.Item> </Stack> </Stack.Item> @@ -992,9 +958,7 @@ Example: ```jsx <Table> <Table.Row> - <Table.Cell bold> - Hello world! - </Table.Cell> + <Table.Cell bold>Hello world!</Table.Cell> <Table.Cell collapsing color="label"> Label </Table.Cell> @@ -1023,7 +987,7 @@ A straight forward mapping to `<td>` element. - See inherited props: [Box](#box) - `collapsing: boolean` - Collapses table cell to the smallest possible size, -and stops any text inside from wrapping. + and stops any text inside from wrapping. ### `Tabs` @@ -1059,9 +1023,7 @@ Tabs also support a vertical configuration. This is usually paired with ```jsx <Stack> <Stack.Item> - <Tabs vertical> - ... - </Tabs> + <Tabs vertical>...</Tabs> </Stack.Item> <Stack.Item grow={1} basis={0}> Tab content. @@ -1075,9 +1037,7 @@ component: ```jsx <Section fill fitted scrollable width="128px"> - <Tabs vertical> - ... - </Tabs> + <Tabs vertical>...</Tabs> ... other things ... </Section> ``` @@ -1087,9 +1047,9 @@ component: - See inherited props: [Box](#box) - `fluid: boolean` - If true, tabs will take all available horizontal space. - `fill: boolean` - Similarly to `fill` on [Section](#section), tabs will fill -all available vertical space. Only makes sense in a vertical configuration. + all available vertical space. Only makes sense in a vertical configuration. - `vertical: boolean` - Use a vertical configuration, where tabs will be -stacked vertically. + stacked vertically. - `children: Tab[]` - This component only accepts tabs as its children. ### `Tabs.Tab` @@ -1101,8 +1061,8 @@ a lot of `Button` props. - See inherited props: [Button](#button) - `altSelection` - Whether the tab buttons select via standard select (color -change) or by adding a white indicator to the selected tab. -Intended for usage on interfaces where tab color has relevance. + change) or by adding a white indicator to the selected tab. + Intended for usage on interfaces where tab color has relevance. - `icon: string` - Tab icon. - `children: any` - Tab text. - `onClick: function` - Called when element is clicked. @@ -1119,9 +1079,7 @@ Usage: ```jsx <Tooltip position="bottom" content="Box tooltip"> - <Box position="relative"> - Sample text. - </Box> + <Box position="relative">Sample text.</Box> </Tooltip> ``` @@ -1129,7 +1087,7 @@ Usage: - `position?: string` - Tooltip position. See [`Popper`](#Popper) for valid options. Defaults to "auto". - `content: string` - Content of the tooltip. Must be a plain string. -Fragments or other elements are **not** supported. + Fragments or other elements are **not** supported. ## `tgui/layouts` @@ -1143,9 +1101,7 @@ Example: ```jsx <Window theme="hackerman"> - <Window.Content scrollable> - Hello, world! - </Window.Content> + <Window.Content scrollable>Hello, world!</Window.Content> </Window> ``` @@ -1160,9 +1116,9 @@ Example: - `height: number` - Window height. - `canClose: boolean` - Controls the ability to close the window. - `children: any` - Child elements, which are rendered directly inside the -window. If you use a [Dimmer](#dimmer) or [Modal](#modal) in your UI, -they should be put as direct childs of a Window, otherwise you should be -putting your content into [Window.Content](#windowcontent). + window. If you use a [Dimmer](#dimmer) or [Modal](#modal) in your UI, + they should be put as direct childs of a Window, otherwise you should be + putting your content into [Window.Content](#windowcontent). ### `Window.Content` diff --git a/tgui/docs/state-usage.md b/tgui/docs/state-usage.md new file mode 100644 index 00000000000000..9d3a2812a68d18 --- /dev/null +++ b/tgui/docs/state-usage.md @@ -0,0 +1,30 @@ +# Managing component state + +React has excellent documentation on useState and useEffect. These hooks should be the ways to manage state in TGUI (v5). +[React Hooks](https://react.dev/learn/state-a-components-memory) + +You might find usages of useLocalState. This should be considered deprecated and will be removed in the future. In older versions of TGUI, InfernoJS did not have hooks, so these were used to manage state. useSharedState is still used in some places where uis are considered "IC" and user input is shared with all persons at the console/machine/thing. + +## A Note on State + +Many beginners tend to overuse state (or hooks all together). State is effective when you want to implement user interactivity, or are handling asynchronous data, but if you are simply using state to store a value that is not changing, you should consider using a variable instead. + +In previous versions of React, each setState would trigger a re-render, which would cause poorly written components to cascade re-render on each page load. Messy! Though this is no longer the case with batch rendering, it's still worthwhile to point out that you might be overusing it. + +## Derived state + +One great way to cut back on state usage is by using props or other state as the basis for a variable. You'll see many examples of this in the TGUI codebase. What does this mean? Here's an example: + +```tsx +// Bad +const [count, setCount] = useState(0); +const [isEven, setIsEven] = useState(false); + +useEffect(() => { + setIsEven(count % 2 === 0); +}, [count]); + +// Good! +const [count, setCount] = useState(0); +const isEven = count % 2 === 0; // Derived state +``` diff --git a/tgui/jest.config.js b/tgui/jest.config.js index 8b78818004be4d..d8b4ac3e41a802 100644 --- a/tgui/jest.config.js +++ b/tgui/jest.config.js @@ -8,7 +8,7 @@ module.exports = { testEnvironment: 'jsdom', testRunner: require.resolve('jest-circus/runner'), transform: { - '^.+\\.(js|cjs|ts|tsx)$': require.resolve('babel-jest'), + '^.+\\.(js|cjs|ts|tsx)$': require.resolve('@swc/jest'), }, moduleFileExtensions: ['js', 'cjs', 'ts', 'tsx', 'json'], resetMocks: true, diff --git a/tgui/package.json b/tgui/package.json index 26df2dc90127ef..1370aacc48a057 100644 --- a/tgui/package.json +++ b/tgui/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "tgui-workspace", - "version": "4.3.1", + "version": "5.0.0", "packageManager": "yarn@3.3.1", "workspaces": [ "packages/*" @@ -12,52 +12,45 @@ "tgui:build": "BROWSERSLIST_IGNORE_OLD_DATA=true webpack", "tgui:dev": "node --experimental-modules packages/tgui-dev-server/index.js", "tgui:lint": "eslint packages --ext .js,.cjs,.ts,.tsx", - "tgui:prettier": "prettierx --check .", - "tgui:sonar": "eslint packages --ext .js,.cjs,.ts,.tsx -c .eslintrc-sonar.yml", + "tgui:prettier": "prettier --check .", + "tgui:sonar": "eslint packages -c .eslintrc-sonar.yml", "tgui:test": "jest --watch", "tgui:test-simple": "CI=true jest --color", "tgui:test-ci": "CI=true jest --color --collect-coverage", "tgui:tsc": "tsc" }, "dependencies": { - "@babel/core": "^7.15.0", - "@babel/eslint-parser": "^7.15.0", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-transform-jscript": "^7.14.5", - "@babel/preset-env": "^7.15.0", - "@babel/preset-typescript": "^7.15.0", - "@types/jest": "^29.2.4", - "@types/jsdom": "^20.0.1", - "@types/node": "14.x", - "@types/webpack": "^5.28.0", - "@types/webpack-env": "^1.18.0", - "@typescript-eslint/parser": "^5.47.1", - "babel-jest": "^27.0.6", - "babel-loader": "^8.2.2", - "babel-plugin-inferno": "^6.3.0", - "babel-plugin-transform-remove-console": "^6.9.4", - "common": "workspace:*", - "css-loader": "^5.2.7", - "eslint": "^7.32.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-radar": "^0.2.1", - "eslint-plugin-react": "^7.24.0", - "eslint-plugin-unused-imports": "^1.1.4", + "@swc/core": "^1.3.100", + "@swc/jest": "^0.2.29", + "@types/jest": "^29.5.10", + "@types/jsdom": "^21.1.6", + "@types/node": "^14.x", + "@types/webpack": "^5.28.5", + "@types/webpack-env": "^1.18.4", + "@typescript-eslint/parser": "^6.14.0", + "css-loader": "^6.8.1", + "esbuild-loader": "^4.0.2", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-simple-import-sort": "^10.0.0", + "eslint-plugin-sonarjs": "^0.23.0", + "eslint-plugin-unused-imports": "^3.0.0", "file-loader": "^6.2.0", - "inferno": "^7.4.8", - "jest": "^27.0.6", - "jest-circus": "^27.0.6", - "jsdom": "^16.7.0", - "mini-css-extract-plugin": "^1.6.2", - "prettier": "npm:prettierx@0.19.0", - "sass": "^1.37.5", - "sass-loader": "^11.1.1", - "style-loader": "^2.0.0", - "terser-webpack-plugin": "^5.1.4", + "jest": "^29.7.0", + "jest-circus": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "jsdom": "^22.1.0", + "mini-css-extract-plugin": "^2.7.6", + "prettier": "^3.1.0", + "sass": "^1.69.5", + "sass-loader": "^13.3.2", + "style-loader": "^3.3.3", + "swc-loader": "^0.2.3", "typescript": "^4.9.4", "url-loader": "^4.1.1", - "webpack": "^5.76.0", - "webpack-bundle-analyzer": "^4.4.2", - "webpack-cli": "^4.7.2" + "webpack": "^5.89.0", + "webpack-bundle-analyzer": "^4.10.1", + "webpack-cli": "^5.1.4" } } diff --git a/tgui/packages/common/collections.ts b/tgui/packages/common/collections.ts index a005da7aa1654d..5bfcee8588441b 100644 --- a/tgui/packages/common/collections.ts +++ b/tgui/packages/common/collections.ts @@ -32,12 +32,12 @@ export const filter = }; type MapFunction = { - <T, U>(iterateeFn: (value: T, index: number, collection: T[]) => U): ( - collection: T[] - ) => U[]; + <T, U>( + iterateeFn: (value: T, index: number, collection: T[]) => U, + ): (collection: T[]) => U[]; <T, U, K extends string | number>( - iterateeFn: (value: T, index: K, collection: Record<K, T>) => U + iterateeFn: (value: T, index: K, collection: Record<K, T>) => U, ): (collection: Record<K, T>) => U[]; }; @@ -75,7 +75,7 @@ export const map: MapFunction = */ export const filterMap = <T, U>( collection: T[], - iterateeFn: (value: T) => U | undefined + iterateeFn: (value: T) => U | undefined, ): U[] => { const finalCollection: U[] = []; @@ -261,7 +261,7 @@ export const zipWith = const binarySearch = <T, U = unknown>( getKey: (value: T) => U, collection: readonly T[], - inserting: T + inserting: T, ): number => { if (collection.length === 0) { return 0; diff --git a/tgui/packages/common/color.js b/tgui/packages/common/color.js index b59d82247aae50..59935931d82bf8 100644 --- a/tgui/packages/common/color.js +++ b/tgui/packages/common/color.js @@ -30,7 +30,7 @@ export class Color { this.r - this.r * percent, this.g - this.g * percent, this.b - this.b * percent, - this.a + this.a, ); } @@ -48,7 +48,7 @@ Color.fromHex = (hex) => new Color( parseInt(hex.substr(1, 2), 16), parseInt(hex.substr(3, 2), 16), - parseInt(hex.substr(5, 2), 16) + parseInt(hex.substr(5, 2), 16), ); /** @@ -59,7 +59,7 @@ Color.lerp = (c1, c2, n) => (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 + (c2.a - c1.a) * n + c1.a, ); /** diff --git a/tgui/packages/common/keycodes.js b/tgui/packages/common/keycodes.ts similarity index 100% rename from tgui/packages/common/keycodes.js rename to tgui/packages/common/keycodes.ts diff --git a/tgui/packages/common/keys.ts b/tgui/packages/common/keys.ts index 61b79992b486b0..34ac9e1614ddef 100644 --- a/tgui/packages/common/keys.ts +++ b/tgui/packages/common/keys.ts @@ -22,18 +22,18 @@ export enum KEY { Backspace = 'Backspace', Control = 'Control', Delete = 'Delete', - Down = 'Down', + Down = 'ArrowDown', End = 'End', Enter = 'Enter', - Escape = 'Esc', + Escape = 'Escape', Home = 'Home', Insert = 'Insert', - Left = 'Left', + Left = 'ArrowLeft', PageDown = 'PageDown', PageUp = 'PageUp', - Right = 'Right', + Right = 'ArrowRight', Shift = 'Shift', Space = ' ', Tab = 'Tab', - Up = 'Up', + Up = 'ArrowUp', } diff --git a/tgui/packages/common/react.ts b/tgui/packages/common/react.ts index 8e42d0971ab417..5260ff6ae128be 100644 --- a/tgui/packages/common/react.ts +++ b/tgui/packages/common/react.ts @@ -52,13 +52,10 @@ export const shallowDiffers = (a: object, b: object) => { }; /** - * Default inferno hooks for pure components. + * A common case in tgui, when you pass a value conditionally, these are + * the types that can fall through the condition. */ -export const pureComponentHooks = { - onComponentShouldUpdate: (lastProps, nextProps) => { - return shallowDiffers(lastProps, nextProps); - }, -}; +export type BooleanLike = number | boolean | null | undefined; /** * A helper to determine whether the object is renderable by React. @@ -69,9 +66,3 @@ export const canRender = (value: unknown) => { && value !== null && typeof value !== 'boolean'; }; - -/** - * A common case in tgui, when you pass a value conditionally, these are - * the types that can fall through the condition. - */ -export type BooleanLike = number | boolean | null | undefined; diff --git a/tgui/packages/common/redux.test.ts b/tgui/packages/common/redux.test.ts index af4e5d4e73eb7a..d4af99907cee95 100644 --- a/tgui/packages/common/redux.test.ts +++ b/tgui/packages/common/redux.test.ts @@ -1,4 +1,11 @@ -import { Action, Reducer, applyMiddleware, combineReducers, createAction, createStore } from './redux'; +import { + Action, + applyMiddleware, + combineReducers, + createAction, + createStore, + Reducer, +} from './redux'; // Dummy Reducer const counterReducer: Reducer<number, Action<string>> = (state = 0, action) => { @@ -31,7 +38,7 @@ describe('Redux implementation tests', () => { test('createStore with applyMiddleware works', () => { const store = createStore( counterReducer, - applyMiddleware(loggingMiddleware) + applyMiddleware(loggingMiddleware), ); expect(store.getState()).toBe(0); }); diff --git a/tgui/packages/common/redux.ts b/tgui/packages/common/redux.ts index 4e618bddafd006..c8eb268f5d44fe 100644 --- a/tgui/packages/common/redux.ts +++ b/tgui/packages/common/redux.ts @@ -6,7 +6,7 @@ export type Reducer<State = any, ActionType extends Action = AnyAction> = ( state: State | undefined, - action: ActionType + action: ActionType, ) => State; export type Store<State = any, ActionType extends Action = AnyAction> = { @@ -21,7 +21,7 @@ type MiddlewareAPI<State = any, ActionType extends Action = AnyAction> = { }; export type Middleware = <State = any, ActionType extends Action = AnyAction>( - storeApi: MiddlewareAPI<State, ActionType> + storeApi: MiddlewareAPI<State, ActionType>, ) => (next: Dispatch<ActionType>) => Dispatch<ActionType>; export type Action<TType = any> = { @@ -33,7 +33,7 @@ export type AnyAction = Action & { }; export type Dispatch<ActionType extends Action = AnyAction> = ( - action: ActionType + action: ActionType, ) => void; type StoreEnhancer = (createStoreFunction: Function) => Function; @@ -48,7 +48,7 @@ type PreparedAction = { */ export const createStore = <State, ActionType extends Action = AnyAction>( reducer: Reducer<State, ActionType>, - enhancer?: StoreEnhancer + enhancer?: StoreEnhancer, ): Store<State, ActionType> => { // Apply a store enhancer (applyMiddleware is one of them). if (enhancer) { @@ -90,14 +90,14 @@ export const applyMiddleware = ( ...middlewares: Middleware[] ): StoreEnhancer => { return ( - createStoreFunction: (reducer: Reducer, enhancer?: StoreEnhancer) => Store + createStoreFunction: (reducer: Reducer, enhancer?: StoreEnhancer) => Store, ) => { return (reducer, ...args): Store => { const store = createStoreFunction(reducer, ...args); - let dispatch: Dispatch = () => { + let dispatch: Dispatch = (action, ...args) => { throw new Error( - 'Dispatching while constructing your middleware is not allowed.' + 'Dispatching while constructing your middleware is not allowed.', ); }; @@ -109,7 +109,7 @@ export const applyMiddleware = ( const chain = middlewares.map((middleware) => middleware(storeApi)); dispatch = chain.reduceRight( (next, middleware) => middleware(next), - store.dispatch + store.dispatch, ); return { @@ -129,7 +129,7 @@ export const applyMiddleware = ( * is also more flexible than the redux counterpart. */ export const combineReducers = ( - reducersObj: Record<string, Reducer> + reducersObj: Record<string, Reducer>, ): Reducer => { const keys = Object.keys(reducersObj); @@ -170,7 +170,7 @@ export const combineReducers = ( */ export const createAction = <TAction extends string>( type: TAction, - prepare?: (...args: any[]) => PreparedAction + prepare?: (...args: any[]) => PreparedAction, ) => { const actionCreator = (...args: any[]) => { let action: Action<TAction> & PreparedAction = { type }; @@ -194,19 +194,3 @@ export const createAction = <TAction extends string>( return actionCreator; }; - -// Implementation specific -// -------------------------------------------------------- - -export const useDispatch = <TAction extends Action = AnyAction>(context: { - store: Store<unknown, TAction>; -}): Dispatch<TAction> => { - return context.store.dispatch; -}; - -export const useSelector = <State, Selected>( - context: { store: Store<State, Action> }, - selector: (state: State) => Selected -): Selected => { - return selector(context.store.getState()); -}; diff --git a/tgui/packages/common/timer.ts b/tgui/packages/common/timer.ts index 49d36484200b34..1fc3e11fd30e50 100644 --- a/tgui/packages/common/timer.ts +++ b/tgui/packages/common/timer.ts @@ -13,7 +13,7 @@ export const debounce = <F extends (...args: any[]) => any>( fn: F, time: number, - immediate = false + immediate = false, ): ((...args: Parameters<F>) => void) => { let timeout: ReturnType<typeof setTimeout> | null; return (...args: Parameters<F>) => { @@ -38,7 +38,7 @@ export const debounce = <F extends (...args: any[]) => any>( */ export const throttle = <F extends (...args: any[]) => any>( fn: F, - time: number + time: number, ): ((...args: Parameters<F>) => void) => { let previouslyRun: number | null, queuedToRun: ReturnType<typeof setTimeout> | null; @@ -53,7 +53,7 @@ export const throttle = <F extends (...args: any[]) => any>( } else { queuedToRun = setTimeout( () => invokeFn(...args), - time - (now - (previouslyRun ?? 0)) + time - (now - (previouslyRun ?? 0)), ); } }; diff --git a/tgui/packages/tgui-bench/entrypoint.tsx b/tgui/packages/tgui-bench/entrypoint.tsx index 377848fe3ae09a..48dcd3dcce1134 100644 --- a/tgui/packages/tgui-bench/entrypoint.tsx +++ b/tgui/packages/tgui-bench/entrypoint.tsx @@ -4,8 +4,10 @@ * @license MIT */ -import { setupGlobalEvents } from 'tgui/events'; import 'tgui/styles/main.scss'; + +import { setupGlobalEvents } from 'tgui/events'; + import Benchmark from './lib/benchmark'; const sendMessage = (obj: any) => { diff --git a/tgui/packages/tgui-bench/index.js b/tgui/packages/tgui-bench/index.js index 9f6aee20996d02..b15f3ebf37ad53 100644 --- a/tgui/packages/tgui-bench/index.js +++ b/tgui/packages/tgui-bench/index.js @@ -31,7 +31,7 @@ const setup = async () => { .readFileSync(path.join(publicDir, 'tgui.html'), 'utf-8') .replace('<!-- tgui:assets -->\n', assets); - server.register(require('fastify-static'), { + server.register(require('@fastify/static'), { root: publicDir, }); diff --git a/tgui/packages/tgui-bench/lib/benchmark.d.ts b/tgui/packages/tgui-bench/lib/benchmark.d.ts index 7f3310005f77b9..3eac568d4184fa 100644 --- a/tgui/packages/tgui-bench/lib/benchmark.d.ts +++ b/tgui/packages/tgui-bench/lib/benchmark.d.ts @@ -27,7 +27,7 @@ declare class Benchmark { static reduce<T, K>( arr: T[], callback: (accumulator: K, value: T) => K, - thisArg?: any + thisArg?: any, ): K; static options: Benchmark.Options; diff --git a/tgui/packages/tgui-bench/package.json b/tgui/packages/tgui-bench/package.json index 49bc0c423c28dc..47cad082fb9b5e 100644 --- a/tgui/packages/tgui-bench/package.json +++ b/tgui/packages/tgui-bench/package.json @@ -1,15 +1,14 @@ { "private": true, "name": "tgui-bench", - "version": "4.3.1", + "version": "5.0.0", "dependencies": { + "@fastify/static": "^6.12.0", "common": "workspace:*", - "fastify": "^3.29.4", - "fastify-static": "^4.2.3", - "inferno": "^7.4.8", - "inferno-vnode-flags": "^7.4.8", + "fastify": "^3.29.5", "lodash": "^4.17.21", "platform": "^1.3.6", + "react": "^18.2.0", "tgui": "workspace:*" } } diff --git a/tgui/packages/tgui-bench/tests/Button.test.tsx b/tgui/packages/tgui-bench/tests/Button.test.tsx index 6b806d720ab832..0549e69b623aec 100644 --- a/tgui/packages/tgui-bench/tests/Button.test.tsx +++ b/tgui/packages/tgui-bench/tests/Button.test.tsx @@ -1,11 +1,8 @@ -import { linkEvent } from 'inferno'; import { Button } from 'tgui/components'; import { createRenderer } from 'tgui/renderer'; const render = createRenderer(); -const handleClick = () => undefined; - export const SingleButton = () => { const node = <Button>Hello world!</Button>; render(node); @@ -16,13 +13,6 @@ export const SingleButtonWithCallback = () => { render(node); }; -export const SingleButtonWithLinkEvent = () => { - const node = ( - <Button onClick={linkEvent(null, handleClick)}>Hello world!</Button> - ); - render(node); -}; - export const ListOfButtons = () => { const nodes: JSX.Element[] = []; for (let i = 0; i < 100; i++) { @@ -45,19 +35,6 @@ export const ListOfButtonsWithCallback = () => { render(<div>{nodes}</div>); }; -export const ListOfButtonsWithLinkEvent = () => { - const nodes: JSX.Element[] = []; - for (let i = 0; i < 100; i++) { - const node = ( - <Button key={i} onClick={linkEvent(null, handleClick)}> - Hello world! {i} - </Button> - ); - nodes.push(node); - } - render(<div>{nodes}</div>); -}; - export const ListOfButtonsWithIcons = () => { const nodes: JSX.Element[] = []; for (let i = 0; i < 100; i++) { diff --git a/tgui/packages/tgui-bench/tests/DisposalUnit.test.tsx b/tgui/packages/tgui-bench/tests/DisposalUnit.test.tsx index 1ae610e2e2e15f..376d27a9115b55 100644 --- a/tgui/packages/tgui-bench/tests/DisposalUnit.test.tsx +++ b/tgui/packages/tgui-bench/tests/DisposalUnit.test.tsx @@ -1,22 +1,19 @@ -import { StoreProvider, configureStore } from 'tgui/store'; - +import { backendUpdate, setGlobalStore } from 'tgui/backend'; import { DisposalUnit } from 'tgui/interfaces/DisposalUnit'; -import { backendUpdate } from 'tgui/backend'; import { createRenderer } from 'tgui/renderer'; +import { configureStore } from 'tgui/store'; const store = configureStore({ sideEffects: false }); const renderUi = createRenderer((dataJson: string) => { + setGlobalStore(store); + store.dispatch( backendUpdate({ data: Byond.parseJson(dataJson), - }) - ); - return ( - <StoreProvider store={store}> - <DisposalUnit /> - </StoreProvider> + }), ); + return <DisposalUnit />; }); export const data = JSON.stringify({ diff --git a/tgui/packages/tgui-bench/tests/Tooltip.test.tsx b/tgui/packages/tgui-bench/tests/Tooltip.test.tsx index ea43a61f0b448c..9dae16f5c03033 100644 --- a/tgui/packages/tgui-bench/tests/Tooltip.test.tsx +++ b/tgui/packages/tgui-bench/tests/Tooltip.test.tsx @@ -12,7 +12,7 @@ export const ListOfTooltips = () => { <Box as="span" backgroundColor="blue" fontSize="48px" m={1}> Tooltip #{i} </Box> - </Tooltip> + </Tooltip>, ); } diff --git a/tgui/packages/tgui-dev-server/dreamseeker.js b/tgui/packages/tgui-dev-server/dreamseeker.js index 2b25b155ae0c7f..d1ca2a9ac5395f 100644 --- a/tgui/packages/tgui-dev-server/dreamseeker.js +++ b/tgui/packages/tgui-dev-server/dreamseeker.js @@ -6,6 +6,7 @@ import { exec } from 'child_process'; import { promisify } from 'util'; + import { createLogger } from './logging.js'; import { require } from './require.js'; @@ -30,7 +31,7 @@ export class DreamSeeker { + '=' + encodeURIComponent(params[key])) .join('&'); logger.log( - `topic call at ${this.client.defaults.baseURL + '/dummy?' + query}` + `topic call at ${this.client.defaults.baseURL + '/dummy?' + query}`, ); return this.client.get('/dummy?' + query); } diff --git a/tgui/packages/tgui-dev-server/index.js b/tgui/packages/tgui-dev-server/index.js index 199e93d836321b..85489ebb0499fe 100644 --- a/tgui/packages/tgui-dev-server/index.js +++ b/tgui/packages/tgui-dev-server/index.js @@ -4,8 +4,8 @@ * @license MIT */ -import { createCompiler } from './webpack.js'; import { reloadByondCache } from './reloader.js'; +import { createCompiler } from './webpack.js'; const noHot = process.argv.includes('--no-hot'); const noTmp = process.argv.includes('--no-tmp'); diff --git a/tgui/packages/tgui-dev-server/link/client.cjs b/tgui/packages/tgui-dev-server/link/client.cjs index 1e21d42ce86b9f..b0e6f7bc9d445a 100644 --- a/tgui/packages/tgui-dev-server/link/client.cjs +++ b/tgui/packages/tgui-dev-server/link/client.cjs @@ -31,11 +31,9 @@ const ensureConnection = () => { }; } } -}; -if (process.env.NODE_ENV !== 'production') { window.onunload = () => socket && socket.close(); -} +}; const subscribe = (fn) => subscribers.push(fn); @@ -136,38 +134,38 @@ const sendLogEntry = (level, ns, ...args) => { const setupHotReloading = () => { if ( - // prettier-ignore - process.env.NODE_ENV !== 'production' - && process.env.WEBPACK_HMR_ENABLED - && window.WebSocket + process.env.NODE_ENV === 'production' || + !process.env.WEBPACK_HMR_ENABLED || + !window.WebSocket ) { - if (module.hot) { - ensureConnection(); - sendLogEntry(0, null, 'setting up hot reloading'); - subscribe((msg) => { - const { type } = msg; - sendLogEntry(0, null, 'received', type); - if (type === 'hotUpdate') { - const status = module.hot.status(); - if (status !== 'idle') { - sendLogEntry(0, null, 'hot reload status:', status); - return; - } - module.hot - .check({ - ignoreUnaccepted: true, - ignoreDeclined: true, - ignoreErrored: true, - }) - .then((modules) => { - sendLogEntry(0, null, 'outdated modules', modules); - }) - .catch((err) => { - sendLogEntry(0, null, 'reload error', err); - }); + return; + } + if (module.hot) { + ensureConnection(); + sendLogEntry(0, null, 'setting up hot reloading'); + subscribe((msg) => { + const { type } = msg; + sendLogEntry(0, null, 'received', type); + if (type === 'hotUpdate') { + const status = module.hot.status(); + if (status !== 'idle') { + sendLogEntry(0, null, 'hot reload status:', status); + return; } - }); - } + module.hot + .check({ + ignoreUnaccepted: true, + ignoreDeclined: true, + ignoreErrored: true, + }) + .then((modules) => { + sendLogEntry(0, null, 'outdated modules', modules); + }) + .catch((err) => { + sendLogEntry(0, null, 'reload error', err); + }); + } + }); } }; diff --git a/tgui/packages/tgui-dev-server/link/retrace.js b/tgui/packages/tgui-dev-server/link/retrace.js index 842de228fdfde1..083ddb37d1c14e 100644 --- a/tgui/packages/tgui-dev-server/link/retrace.js +++ b/tgui/packages/tgui-dev-server/link/retrace.js @@ -6,6 +6,7 @@ import fs from 'fs'; import { basename } from 'path'; + import { createLogger } from '../logging.js'; import { require } from '../require.js'; import { resolveGlob } from '../util.js'; @@ -30,7 +31,7 @@ export const loadSourceMaps = async (bundleDir) => { try { const file = basename(path).replace('.map', ''); const consumer = await new SourceMapConsumer( - JSON.parse(fs.readFileSync(path, 'utf8')) + JSON.parse(fs.readFileSync(path, 'utf8')), ); sourceMaps.push({ file, consumer }); } catch (err) { diff --git a/tgui/packages/tgui-dev-server/link/server.js b/tgui/packages/tgui-dev-server/link/server.js index 60cc78c1bd9ed6..2a1f551bf6ebd7 100644 --- a/tgui/packages/tgui-dev-server/link/server.js +++ b/tgui/packages/tgui-dev-server/link/server.js @@ -6,6 +6,7 @@ import http from 'http'; import { inspect } from 'util'; + import { createLogger, directLog } from '../logging.js'; import { require } from '../require.js'; import { loadSourceMaps, retrace } from './retrace.js'; diff --git a/tgui/packages/tgui-dev-server/package.json b/tgui/packages/tgui-dev-server/package.json index 2477641c7e7939..496e25c6c1847d 100644 --- a/tgui/packages/tgui-dev-server/package.json +++ b/tgui/packages/tgui-dev-server/package.json @@ -1,13 +1,13 @@ { "private": true, "name": "tgui-dev-server", - "version": "4.3.1", + "version": "5.0.0", "type": "module", "dependencies": { - "axios": "^0.21.1", - "glob": "^7.1.7", - "source-map": "^0.7.3", + "axios": "^1.6.2", + "glob": "^7.2.0", + "source-map": "^0.7.4", "stacktrace-parser": "^0.1.10", - "ws": "^7.5.3" + "ws": "^8.14.2" } } diff --git a/tgui/packages/tgui-dev-server/reloader.js b/tgui/packages/tgui-dev-server/reloader.js index c13a8afdfcfc5c..cb477a6523b037 100644 --- a/tgui/packages/tgui-dev-server/reloader.js +++ b/tgui/packages/tgui-dev-server/reloader.js @@ -7,6 +7,7 @@ import fs from 'fs'; import os from 'os'; import { basename } from 'path'; + import { DreamSeeker } from './dreamseeker.js'; import { createLogger } from './logging.js'; import { resolveGlob, resolvePath } from './util.js'; @@ -83,19 +84,19 @@ export const reloadByondCache = async (bundleDir) => { } // Get dreamseeker instances const pids = cacheDirs.map((cacheDir) => - parseInt(cacheDir.split('/cache/tmp').pop(), 10) + parseInt(cacheDir.split('/cache/tmp').pop(), 10), ); const dssPromise = DreamSeeker.getInstancesByPids(pids); // Copy assets const assets = await resolveGlob( bundleDir, - './*.+(bundle|chunk|hot-update).*' + './*.+(bundle|chunk|hot-update).*', ); for (let cacheDir of cacheDirs) { // Clear garbage const garbage = await resolveGlob( cacheDir, - './*.+(bundle|chunk|hot-update).*' + './*.+(bundle|chunk|hot-update).*', ); try { // Plant a dummy browser window file, we'll be using this to avoid world topic. For byond 515. diff --git a/tgui/packages/tgui-dev-server/util.js b/tgui/packages/tgui-dev-server/util.js index 9d07b96c71a056..79190fe189a4af 100644 --- a/tgui/packages/tgui-dev-server/util.js +++ b/tgui/packages/tgui-dev-server/util.js @@ -6,6 +6,7 @@ import fs from 'fs'; import path from 'path'; + import { require } from './require.js'; const globPkg = require('glob'); diff --git a/tgui/packages/tgui-dev-server/webpack.js b/tgui/packages/tgui-dev-server/webpack.js index 139610b79ce99b..e4fbdeb9f1e2b5 100644 --- a/tgui/packages/tgui-dev-server/webpack.js +++ b/tgui/packages/tgui-dev-server/webpack.js @@ -7,6 +7,7 @@ import fs from 'fs'; import { createRequire } from 'module'; import { dirname } from 'path'; + import { loadSourceMaps, setupLink } from './link/server.js'; import { createLogger } from './logging.js'; import { reloadByondCache } from './reloader.js'; diff --git a/tgui/packages/tgui-dev-server/winreg.js b/tgui/packages/tgui-dev-server/winreg.js index b61fddc1a255a4..43a41701907195 100644 --- a/tgui/packages/tgui-dev-server/winreg.js +++ b/tgui/packages/tgui-dev-server/winreg.js @@ -8,6 +8,7 @@ import { exec } from 'child_process'; import { promisify } from 'util'; + import { createLogger } from './logging.js'; const logger = createLogger('winreg'); @@ -35,8 +36,8 @@ export const regQuery = async (path, key) => { logger.error('could not find the start of the key value'); return null; } - const value = stdout.substring(indexOfValue + 4, indexOfEol); - return value; + + return stdout.substring(indexOfValue + 4, indexOfEol); } catch (err) { logger.error(err); return null; diff --git a/tgui/packages/tgui-panel/Notifications.js b/tgui/packages/tgui-panel/Notifications.tsx similarity index 100% rename from tgui/packages/tgui-panel/Notifications.js rename to tgui/packages/tgui-panel/Notifications.tsx diff --git a/tgui/packages/tgui-panel/Panel.js b/tgui/packages/tgui-panel/Panel.js deleted file mode 100644 index 83150ab6ef13d8..00000000000000 --- a/tgui/packages/tgui-panel/Panel.js +++ /dev/null @@ -1,128 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { Button, Section, Stack } from 'tgui/components'; -import { Pane } from 'tgui/layouts'; -import { NowPlayingWidget, useAudio } from './audio'; -import { ChatPanel, ChatTabs } from './chat'; -import { useGame } from './game'; -import { Notifications } from './Notifications'; -import { PingIndicator } from './ping'; -import { ReconnectButton } from './reconnect'; -import { SettingsPanel, useSettings } from './settings'; - -export const Panel = (props, context) => { - // IE8-10: Needs special treatment due to missing Flex support - if (Byond.IS_LTE_IE10) { - return <HoboPanel />; - } - const audio = useAudio(context); - const settings = useSettings(context); - const game = useGame(context); - if (process.env.NODE_ENV !== 'production') { - const { useDebug, KitchenSink } = require('tgui/debug'); - const debug = useDebug(context); - if (debug.kitchenSink) { - return <KitchenSink panel />; - } - } - return ( - <Pane theme={settings.theme}> - <Stack fill vertical> - <Stack.Item> - <Section fitted> - <Stack mr={1} align="center"> - <Stack.Item grow overflowX="auto"> - <ChatTabs /> - </Stack.Item> - <Stack.Item> - <PingIndicator /> - </Stack.Item> - <Stack.Item> - <Button - color="grey" - selected={audio.visible} - icon="music" - tooltip="Music player" - tooltipPosition="bottom-start" - onClick={() => audio.toggle()} - /> - </Stack.Item> - <Stack.Item> - <Button - icon={settings.visible ? 'times' : 'cog'} - selected={settings.visible} - tooltip={ - settings.visible ? 'Close settings' : 'Open settings' - } - tooltipPosition="bottom-start" - onClick={() => settings.toggle()} - /> - </Stack.Item> - </Stack> - </Section> - </Stack.Item> - {audio.visible && ( - <Stack.Item> - <Section> - <NowPlayingWidget /> - </Section> - </Stack.Item> - )} - {settings.visible && ( - <Stack.Item> - <SettingsPanel /> - </Stack.Item> - )} - <Stack.Item grow> - <Section fill fitted position="relative"> - <Pane.Content scrollable> - <ChatPanel lineHeight={settings.lineHeight} /> - </Pane.Content> - <Notifications> - {game.connectionLostAt && ( - <Notifications.Item rightSlot={<ReconnectButton />}> - You are either AFK, experiencing lag or the connection has - closed. - </Notifications.Item> - )} - {game.roundRestartedAt && ( - <Notifications.Item> - The connection has been closed because the server is - restarting. Please wait while you automatically reconnect. - </Notifications.Item> - )} - </Notifications> - </Section> - </Stack.Item> - </Stack> - </Pane> - ); -}; - -const HoboPanel = (props, context) => { - const settings = useSettings(context); - return ( - <Pane theme={settings.theme}> - <Pane.Content scrollable> - <Button - style={{ - position: 'fixed', - top: '1em', - right: '2em', - 'z-index': 1000, - }} - selected={settings.visible} - onClick={() => settings.toggle()}> - Settings - </Button> - {(settings.visible && <SettingsPanel />) || ( - <ChatPanel lineHeight={settings.lineHeight} /> - )} - </Pane.Content> - </Pane> - ); -}; diff --git a/tgui/packages/tgui-panel/Panel.tsx b/tgui/packages/tgui-panel/Panel.tsx new file mode 100644 index 00000000000000..2813b636574dcc --- /dev/null +++ b/tgui/packages/tgui-panel/Panel.tsx @@ -0,0 +1,102 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { Button, Section, Stack } from 'tgui/components'; +import { Pane } from 'tgui/layouts'; + +import { NowPlayingWidget, useAudio } from './audio'; +import { ChatPanel, ChatTabs } from './chat'; +import { useGame } from './game'; +import { Notifications } from './Notifications'; +import { PingIndicator } from './ping'; +import { ReconnectButton } from './reconnect'; +import { SettingsPanel, useSettings } from './settings'; + +export const Panel = (props) => { + const audio = useAudio(); + const settings = useSettings(); + const game = useGame(); + if (process.env.NODE_ENV !== 'production') { + const { useDebug, KitchenSink } = require('tgui/debug'); + const debug = useDebug(); + if (debug.kitchenSink) { + return <KitchenSink panel />; + } + } + + return ( + <Pane theme={settings.theme}> + <Stack fill vertical> + <Stack.Item> + <Section fitted> + <Stack mr={1} align="center"> + <Stack.Item grow overflowX="auto"> + <ChatTabs /> + </Stack.Item> + <Stack.Item> + <PingIndicator /> + </Stack.Item> + <Stack.Item> + <Button + color="grey" + selected={audio.visible} + icon="music" + tooltip="Music player" + tooltipPosition="bottom-start" + onClick={() => audio.toggle()} + /> + </Stack.Item> + <Stack.Item> + <Button + icon={settings.visible ? 'times' : 'cog'} + selected={settings.visible} + tooltip={ + settings.visible ? 'Close settings' : 'Open settings' + } + tooltipPosition="bottom-start" + onClick={() => settings.toggle()} + /> + </Stack.Item> + </Stack> + </Section> + </Stack.Item> + {audio.visible && ( + <Stack.Item> + <Section> + <NowPlayingWidget /> + </Section> + </Stack.Item> + )} + {settings.visible && ( + <Stack.Item> + <SettingsPanel /> + </Stack.Item> + )} + <Stack.Item grow> + <Section fill fitted position="relative"> + <Pane.Content scrollable> + <ChatPanel lineHeight={settings.lineHeight} /> + </Pane.Content> + <Notifications> + {game.connectionLostAt && ( + <Notifications.Item rightSlot={<ReconnectButton />}> + You are either AFK, experiencing lag or the connection has + closed. + </Notifications.Item> + )} + {game.roundRestartedAt && ( + <Notifications.Item> + The connection has been closed because the server is + restarting. Please wait while you automatically reconnect. + </Notifications.Item> + )} + </Notifications> + </Section> + </Stack.Item> + </Stack> + </Pane> + ); +}; diff --git a/tgui/packages/tgui-panel/audio/NowPlayingWidget.js b/tgui/packages/tgui-panel/audio/NowPlayingWidget.js deleted file mode 100644 index 30052c3f3a3ebd..00000000000000 --- a/tgui/packages/tgui-panel/audio/NowPlayingWidget.js +++ /dev/null @@ -1,109 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { toFixed } from 'common/math'; -import { useDispatch, useSelector } from 'common/redux'; -import { Button, Collapsible, Flex, Knob, Section } from 'tgui/components'; -import { useSettings } from '../settings'; -import { selectAudio } from './selectors'; - -export const NowPlayingWidget = (props, context) => { - const audio = useSelector(context, selectAudio), - dispatch = useDispatch(context), - settings = useSettings(context), - title = audio.meta?.title, - URL = audio.meta?.link, - Artist = audio.meta?.artist || 'Unknown Artist', - upload_date = audio.meta?.upload_date || 'Unknown Date', - album = audio.meta?.album || 'Unknown Album', - duration = audio.meta?.duration, - date = !isNaN(upload_date) - ? upload_date?.substring(0, 4) + - '-' + - upload_date?.substring(4, 6) + - '-' + - upload_date?.substring(6, 8) - : upload_date; - - return ( - <Flex align="center"> - {(audio.playing && ( - <Flex.Item - mx={0.5} - grow={1} - style={{ - 'white-space': 'nowrap', - 'overflow': 'hidden', - 'text-overflow': 'ellipsis', - }}> - { - <Collapsible title={title || 'Unknown Track'} color={'blue'}> - <Section> - {URL !== 'Song Link Hidden' && ( - <Flex.Item grow={1} color="label"> - URL: {URL} - </Flex.Item> - )} - <Flex.Item grow={1} color="label"> - Duration: {duration} - </Flex.Item> - {Artist !== 'Song Artist Hidden' && - Artist !== 'Unknown Artist' && ( - <Flex.Item grow={1} color="label"> - Artist: {Artist} - </Flex.Item> - )} - {album !== 'Song Album Hidden' && album !== 'Unknown Album' && ( - <Flex.Item grow={1} color="label"> - Album: {album} - </Flex.Item> - )} - {upload_date !== 'Song Upload Date Hidden' && - upload_date !== 'Unknown Date' && ( - <Flex.Item grow={1} color="label"> - Uploaded: {date} - </Flex.Item> - )} - </Section> - </Collapsible> - } - </Flex.Item> - )) || ( - <Flex.Item grow={1} color="label"> - Nothing to play. - </Flex.Item> - )} - {audio.playing && ( - <Flex.Item mx={0.5} fontSize="0.9em"> - <Button - tooltip="Stop" - icon="stop" - onClick={() => - dispatch({ - type: 'audio/stopMusic', - }) - } - /> - </Flex.Item> - )} - <Flex.Item mx={0.5} fontSize="0.9em"> - <Knob - minValue={0} - maxValue={1} - value={settings.adminMusicVolume} - step={0.0025} - stepPixelSize={1} - format={(value) => toFixed(value * 100) + '%'} - onDrag={(e, value) => - settings.update({ - adminMusicVolume: value, - }) - } - /> - </Flex.Item> - </Flex> - ); -}; diff --git a/tgui/packages/tgui-panel/audio/NowPlayingWidget.jsx b/tgui/packages/tgui-panel/audio/NowPlayingWidget.jsx new file mode 100644 index 00000000000000..f101d7da0381e5 --- /dev/null +++ b/tgui/packages/tgui-panel/audio/NowPlayingWidget.jsx @@ -0,0 +1,111 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { toFixed } from 'common/math'; +import { useDispatch, useSelector } from 'tgui/backend'; +import { Button, Collapsible, Flex, Knob, Section } from 'tgui/components'; + +import { useSettings } from '../settings'; +import { selectAudio } from './selectors'; + +export const NowPlayingWidget = (props) => { + const audio = useSelector(selectAudio), + dispatch = useDispatch(), + settings = useSettings(), + title = audio.meta?.title, + URL = audio.meta?.link, + Artist = audio.meta?.artist || 'Unknown Artist', + upload_date = audio.meta?.upload_date || 'Unknown Date', + album = audio.meta?.album || 'Unknown Album', + duration = audio.meta?.duration, + date = !isNaN(upload_date) + ? upload_date?.substring(0, 4) + + '-' + + upload_date?.substring(4, 6) + + '-' + + upload_date?.substring(6, 8) + : upload_date; + + return ( + <Flex align="center"> + {(audio.playing && ( + <Flex.Item + mx={0.5} + grow={1} + style={{ + whiteSpace: 'nowrap', + overflow: 'hidden', + textOverflow: 'ellipsis', + }} + > + { + <Collapsible title={title || 'Unknown Track'} color={'blue'}> + <Section> + {URL !== 'Song Link Hidden' && ( + <Flex.Item grow={1} color="label"> + URL: {URL} + </Flex.Item> + )} + <Flex.Item grow={1} color="label"> + Duration: {duration} + </Flex.Item> + {Artist !== 'Song Artist Hidden' && + Artist !== 'Unknown Artist' && ( + <Flex.Item grow={1} color="label"> + Artist: {Artist} + </Flex.Item> + )} + {album !== 'Song Album Hidden' && album !== 'Unknown Album' && ( + <Flex.Item grow={1} color="label"> + Album: {album} + </Flex.Item> + )} + {upload_date !== 'Song Upload Date Hidden' && + upload_date !== 'Unknown Date' && ( + <Flex.Item grow={1} color="label"> + Uploaded: {date} + </Flex.Item> + )} + </Section> + </Collapsible> + } + </Flex.Item> + )) || ( + <Flex.Item grow={1} color="label"> + Nothing to play. + </Flex.Item> + )} + {audio.playing && ( + <Flex.Item mx={0.5} fontSize="0.9em"> + <Button + tooltip="Stop" + icon="stop" + onClick={() => + dispatch({ + type: 'audio/stopMusic', + }) + } + /> + </Flex.Item> + )} + <Flex.Item mx={0.5} fontSize="0.9em"> + <Knob + minValue={0} + maxValue={1} + value={settings.adminMusicVolume} + step={0.0025} + stepPixelSize={1} + format={(value) => toFixed(value * 100) + '%'} + onDrag={(e, value) => + settings.update({ + adminMusicVolume: value, + }) + } + /> + </Flex.Item> + </Flex> + ); +}; diff --git a/tgui/packages/tgui-panel/audio/hooks.js b/tgui/packages/tgui-panel/audio/hooks.js deleted file mode 100644 index 504b4f5c6e798b..00000000000000 --- a/tgui/packages/tgui-panel/audio/hooks.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { useSelector, useDispatch } from 'common/redux'; -import { selectAudio } from './selectors'; - -export const useAudio = (context) => { - const state = useSelector(context, selectAudio); - const dispatch = useDispatch(context); - return { - ...state, - toggle: () => dispatch({ type: 'audio/toggle' }), - }; -}; diff --git a/tgui/packages/tgui-panel/audio/hooks.ts b/tgui/packages/tgui-panel/audio/hooks.ts new file mode 100644 index 00000000000000..2e9d830cb777a8 --- /dev/null +++ b/tgui/packages/tgui-panel/audio/hooks.ts @@ -0,0 +1,18 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { useDispatch, useSelector } from 'tgui/backend'; + +import { selectAudio } from './selectors'; + +export const useAudio = () => { + const state = useSelector(selectAudio); + const dispatch = useDispatch(); + return { + ...state, + toggle: () => dispatch({ type: 'audio/toggle' }), + }; +}; diff --git a/tgui/packages/tgui-panel/audio/index.js b/tgui/packages/tgui-panel/audio/index.ts similarity index 100% rename from tgui/packages/tgui-panel/audio/index.js rename to tgui/packages/tgui-panel/audio/index.ts diff --git a/tgui/packages/tgui-panel/audio/player.js b/tgui/packages/tgui-panel/audio/player.js index f9dfa41cef9db5..50eccee16ba084 100644 --- a/tgui/packages/tgui-panel/audio/player.js +++ b/tgui/packages/tgui-panel/audio/player.js @@ -10,10 +10,6 @@ const logger = createLogger('AudioPlayer'); export class AudioPlayer { constructor() { - // Doesn't support HTMLAudioElement - if (Byond.IS_LTE_IE9) { - return; - } // Set up the HTMLAudioElement node this.node = document.createElement('audio'); this.node.style.setProperty('display', 'none'); diff --git a/tgui/packages/tgui-panel/audio/reducer.js b/tgui/packages/tgui-panel/audio/reducer.ts similarity index 100% rename from tgui/packages/tgui-panel/audio/reducer.js rename to tgui/packages/tgui-panel/audio/reducer.ts diff --git a/tgui/packages/tgui-panel/audio/selectors.js b/tgui/packages/tgui-panel/audio/selectors.ts similarity index 100% rename from tgui/packages/tgui-panel/audio/selectors.js rename to tgui/packages/tgui-panel/audio/selectors.ts diff --git a/tgui/packages/tgui-panel/chat/ChatPageSettings.js b/tgui/packages/tgui-panel/chat/ChatPageSettings.js deleted file mode 100644 index c0d9962d2531f4..00000000000000 --- a/tgui/packages/tgui-panel/chat/ChatPageSettings.js +++ /dev/null @@ -1,89 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { useDispatch, useSelector } from 'common/redux'; -import { Button, Collapsible, Divider, Input, Section, Stack } from 'tgui/components'; -import { removeChatPage, toggleAcceptedType, updateChatPage } from './actions'; -import { MESSAGE_TYPES } from './constants'; -import { selectCurrentChatPage } from './selectors'; - -export const ChatPageSettings = (props, context) => { - const page = useSelector(context, selectCurrentChatPage); - const dispatch = useDispatch(context); - return ( - <Section> - <Stack align="center"> - <Stack.Item grow={1}> - <Input - fluid - value={page.name} - onChange={(e, value) => - dispatch( - updateChatPage({ - pageId: page.id, - name: value, - }) - ) - } - /> - </Stack.Item> - <Stack.Item> - <Button - icon="times" - color="red" - onClick={() => - dispatch( - removeChatPage({ - pageId: page.id, - }) - ) - }> - Remove - </Button> - </Stack.Item> - </Stack> - <Divider /> - <Section title="Messages to display" level={2}> - {MESSAGE_TYPES.filter( - (typeDef) => !typeDef.important && !typeDef.admin - ).map((typeDef) => ( - <Button.Checkbox - key={typeDef.type} - checked={page.acceptedTypes[typeDef.type]} - onClick={() => - dispatch( - toggleAcceptedType({ - pageId: page.id, - type: typeDef.type, - }) - ) - }> - {typeDef.name} - </Button.Checkbox> - ))} - <Collapsible mt={1} color="transparent" title="Admin stuff"> - {MESSAGE_TYPES.filter( - (typeDef) => !typeDef.important && typeDef.admin - ).map((typeDef) => ( - <Button.Checkbox - key={typeDef.type} - checked={page.acceptedTypes[typeDef.type]} - onClick={() => - dispatch( - toggleAcceptedType({ - pageId: page.id, - type: typeDef.type, - }) - ) - }> - {typeDef.name} - </Button.Checkbox> - ))} - </Collapsible> - </Section> - </Section> - ); -}; diff --git a/tgui/packages/tgui-panel/chat/ChatPageSettings.jsx b/tgui/packages/tgui-panel/chat/ChatPageSettings.jsx new file mode 100644 index 00000000000000..67028168f8e86b --- /dev/null +++ b/tgui/packages/tgui-panel/chat/ChatPageSettings.jsx @@ -0,0 +1,100 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { useDispatch, useSelector } from 'tgui/backend'; +import { + Button, + Collapsible, + Divider, + Input, + Section, + Stack, +} from 'tgui/components'; + +import { removeChatPage, toggleAcceptedType, updateChatPage } from './actions'; +import { MESSAGE_TYPES } from './constants'; +import { selectCurrentChatPage } from './selectors'; + +export const ChatPageSettings = (props) => { + const page = useSelector(selectCurrentChatPage); + const dispatch = useDispatch(); + return ( + <Section> + <Stack align="center"> + <Stack.Item grow={1}> + <Input + fluid + value={page.name} + onChange={(e, value) => + dispatch( + updateChatPage({ + pageId: page.id, + name: value, + }), + ) + } + /> + </Stack.Item> + <Stack.Item> + <Button + icon="times" + color="red" + onClick={() => + dispatch( + removeChatPage({ + pageId: page.id, + }), + ) + } + > + Remove + </Button> + </Stack.Item> + </Stack> + <Divider /> + <Section title="Messages to display" level={2}> + {MESSAGE_TYPES.filter( + (typeDef) => !typeDef.important && !typeDef.admin, + ).map((typeDef) => ( + <Button.Checkbox + key={typeDef.type} + checked={page.acceptedTypes[typeDef.type]} + onClick={() => + dispatch( + toggleAcceptedType({ + pageId: page.id, + type: typeDef.type, + }), + ) + } + > + {typeDef.name} + </Button.Checkbox> + ))} + <Collapsible mt={1} color="transparent" title="Admin stuff"> + {MESSAGE_TYPES.filter( + (typeDef) => !typeDef.important && typeDef.admin, + ).map((typeDef) => ( + <Button.Checkbox + key={typeDef.type} + checked={page.acceptedTypes[typeDef.type]} + onClick={() => + dispatch( + toggleAcceptedType({ + pageId: page.id, + type: typeDef.type, + }), + ) + } + > + {typeDef.name} + </Button.Checkbox> + ))} + </Collapsible> + </Section> + </Section> + ); +}; diff --git a/tgui/packages/tgui-panel/chat/ChatPanel.js b/tgui/packages/tgui-panel/chat/ChatPanel.js deleted file mode 100644 index 3132a66ce7f8c5..00000000000000 --- a/tgui/packages/tgui-panel/chat/ChatPanel.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { shallowDiffers } from 'common/react'; -import { Component, createRef } from 'inferno'; -import { Button } from 'tgui/components'; -import { chatRenderer } from './renderer'; - -export class ChatPanel extends Component { - constructor() { - super(); - this.ref = createRef(); - this.state = { - scrollTracking: true, - }; - this.handleScrollTrackingChange = (value) => - this.setState({ - scrollTracking: value, - }); - } - - componentDidMount() { - chatRenderer.mount(this.ref.current); - chatRenderer.events.on( - 'scrollTrackingChanged', - this.handleScrollTrackingChange - ); - this.componentDidUpdate(); - } - - componentWillUnmount() { - chatRenderer.events.off( - 'scrollTrackingChanged', - this.handleScrollTrackingChange - ); - } - - componentDidUpdate(prevProps) { - requestAnimationFrame(() => { - chatRenderer.ensureScrollTracking(); - }); - const shouldUpdateStyle = - !prevProps || shallowDiffers(this.props, prevProps); - if (shouldUpdateStyle) { - chatRenderer.assignStyle({ - 'width': '100%', - 'white-space': 'pre-wrap', - 'font-size': this.props.fontSize, - 'line-height': this.props.lineHeight, - }); - } - } - - render() { - const { scrollTracking } = this.state; - return ( - <> - <div className="Chat" ref={this.ref} /> - {!scrollTracking && ( - <Button - className="Chat__scrollButton" - icon="arrow-down" - onClick={() => chatRenderer.scrollToBottom()}> - Scroll to bottom - </Button> - )} - </> - ); - } -} diff --git a/tgui/packages/tgui-panel/chat/ChatPanel.jsx b/tgui/packages/tgui-panel/chat/ChatPanel.jsx new file mode 100644 index 00000000000000..845c161275653c --- /dev/null +++ b/tgui/packages/tgui-panel/chat/ChatPanel.jsx @@ -0,0 +1,75 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { shallowDiffers } from 'common/react'; +import { Component, createRef } from 'react'; +import { Button } from 'tgui/components'; + +import { chatRenderer } from './renderer'; + +export class ChatPanel extends Component { + constructor(props) { + super(props); + this.ref = createRef(); + this.state = { + scrollTracking: true, + }; + this.handleScrollTrackingChange = (value) => + this.setState({ + scrollTracking: value, + }); + } + + componentDidMount() { + chatRenderer.mount(this.ref.current); + chatRenderer.events.on( + 'scrollTrackingChanged', + this.handleScrollTrackingChange, + ); + this.componentDidUpdate(); + } + + componentWillUnmount() { + chatRenderer.events.off( + 'scrollTrackingChanged', + this.handleScrollTrackingChange, + ); + } + + componentDidUpdate(prevProps) { + requestAnimationFrame(() => { + chatRenderer.ensureScrollTracking(); + }); + const shouldUpdateStyle = + !prevProps || shallowDiffers(this.props, prevProps); + if (shouldUpdateStyle) { + chatRenderer.assignStyle({ + width: '100%', + 'white-space': 'pre-wrap', + 'font-size': this.props.fontSize, + 'line-height': this.props.lineHeight, + }); + } + } + + render() { + const { scrollTracking } = this.state; + return ( + <> + <div className="Chat" ref={this.ref} /> + {!scrollTracking && ( + <Button + className="Chat__scrollButton" + icon="arrow-down" + onClick={() => chatRenderer.scrollToBottom()} + > + Scroll to bottom + </Button> + )} + </> + ); + } +} diff --git a/tgui/packages/tgui-panel/chat/ChatTabs.js b/tgui/packages/tgui-panel/chat/ChatTabs.js deleted file mode 100644 index 1d4f6f65edfea3..00000000000000 --- a/tgui/packages/tgui-panel/chat/ChatTabs.js +++ /dev/null @@ -1,68 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { useDispatch, useSelector } from 'common/redux'; -import { Box, Tabs, Flex, Button } from 'tgui/components'; -import { changeChatPage, addChatPage } from './actions'; -import { selectChatPages, selectCurrentChatPage } from './selectors'; -import { openChatSettings } from '../settings/actions'; - -const UnreadCountWidget = ({ value }) => ( - <Box - style={{ - 'font-size': '0.7em', - 'border-radius': '0.25em', - 'width': '1.7em', - 'line-height': '1.55em', - 'background-color': 'crimson', - 'color': '#fff', - }}> - {Math.min(value, 99)} - </Box> -); - -export const ChatTabs = (props, context) => { - const pages = useSelector(context, selectChatPages); - const currentPage = useSelector(context, selectCurrentChatPage); - const dispatch = useDispatch(context); - return ( - <Flex align="center"> - <Flex.Item> - <Tabs textAlign="center"> - {pages.map((page) => ( - <Tabs.Tab - key={page.id} - selected={page === currentPage} - rightSlot={ - page.unreadCount > 0 && ( - <UnreadCountWidget value={page.unreadCount} /> - ) - } - onClick={() => - dispatch( - changeChatPage({ - pageId: page.id, - }) - ) - }> - {page.name} - </Tabs.Tab> - ))} - </Tabs> - </Flex.Item> - <Flex.Item ml={1}> - <Button - color="transparent" - icon="plus" - onClick={() => { - dispatch(addChatPage()); - dispatch(openChatSettings()); - }} - /> - </Flex.Item> - </Flex> - ); -}; diff --git a/tgui/packages/tgui-panel/chat/ChatTabs.jsx b/tgui/packages/tgui-panel/chat/ChatTabs.jsx new file mode 100644 index 00000000000000..2031f6a255b002 --- /dev/null +++ b/tgui/packages/tgui-panel/chat/ChatTabs.jsx @@ -0,0 +1,71 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { useDispatch, useSelector } from 'tgui/backend'; +import { Box, Button, Flex, Tabs } from 'tgui/components'; + +import { openChatSettings } from '../settings/actions'; +import { addChatPage, changeChatPage } from './actions'; +import { selectChatPages, selectCurrentChatPage } from './selectors'; + +const UnreadCountWidget = ({ value }) => ( + <Box + style={{ + fontSize: '0.7em', + borderRadius: '0.25em', + width: '1.7em', + lineHeight: '1.55em', + backgroundColor: 'crimson', + color: '#fff', + }} + > + {Math.min(value, 99)} + </Box> +); + +export const ChatTabs = (props) => { + const pages = useSelector(selectChatPages); + const currentPage = useSelector(selectCurrentChatPage); + const dispatch = useDispatch(); + return ( + <Flex align="center"> + <Flex.Item> + <Tabs textAlign="center"> + {pages.map((page) => ( + <Tabs.Tab + key={page.id} + selected={page === currentPage} + rightSlot={ + page.unreadCount > 0 && ( + <UnreadCountWidget value={page.unreadCount} /> + ) + } + onClick={() => + dispatch( + changeChatPage({ + pageId: page.id, + }), + ) + } + > + {page.name} + </Tabs.Tab> + ))} + </Tabs> + </Flex.Item> + <Flex.Item ml={1}> + <Button + color="transparent" + icon="plus" + onClick={() => { + dispatch(addChatPage()); + dispatch(openChatSettings()); + }} + /> + </Flex.Item> + </Flex> + ); +}; diff --git a/tgui/packages/tgui-panel/chat/actions.js b/tgui/packages/tgui-panel/chat/actions.js index e9919fcfa2b877..3814fbe611f799 100644 --- a/tgui/packages/tgui-panel/chat/actions.js +++ b/tgui/packages/tgui-panel/chat/actions.js @@ -5,6 +5,7 @@ */ import { createAction } from 'common/redux'; + import { createPage } from './model'; export const loadChat = createAction('chat/load'); diff --git a/tgui/packages/tgui-panel/chat/constants.js b/tgui/packages/tgui-panel/chat/constants.js deleted file mode 100644 index c77a7fc70bbbf3..00000000000000 --- a/tgui/packages/tgui-panel/chat/constants.js +++ /dev/null @@ -1,155 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -export const MAX_VISIBLE_MESSAGES = 2500; -export const MAX_PERSISTED_MESSAGES = 1000; -export const MESSAGE_SAVE_INTERVAL = 10000; -export const MESSAGE_PRUNE_INTERVAL = 60000; -export const COMBINE_MAX_MESSAGES = 5; -export const COMBINE_MAX_TIME_WINDOW = 5000; -export const IMAGE_RETRY_DELAY = 250; -export const IMAGE_RETRY_LIMIT = 10; -export const IMAGE_RETRY_MESSAGE_AGE = 60000; - -// Default message type -export const MESSAGE_TYPE_UNKNOWN = 'unknown'; - -// Internal message type -export const MESSAGE_TYPE_INTERNAL = 'internal'; - -// Must match the set of defines in code/__DEFINES/chat.dm -export const MESSAGE_TYPE_SYSTEM = 'system'; -export const MESSAGE_TYPE_LOCALCHAT = 'localchat'; -export const MESSAGE_TYPE_RADIO = 'radio'; -export const MESSAGE_TYPE_INFO = 'info'; -export const MESSAGE_TYPE_WARNING = 'warning'; -export const MESSAGE_TYPE_DEADCHAT = 'deadchat'; -export const MESSAGE_TYPE_OOC = 'ooc'; -export const MESSAGE_TYPE_ADMINPM = 'adminpm'; -export const MESSAGE_TYPE_COMBAT = 'combat'; -export const MESSAGE_TYPE_ADMINCHAT = 'adminchat'; -export const MESSAGE_TYPE_MODCHAT = 'modchat'; -export const MESSAGE_TYPE_PRAYER = 'prayer'; -export const MESSAGE_TYPE_EVENTCHAT = 'eventchat'; -export const MESSAGE_TYPE_ADMINLOG = 'adminlog'; -export const MESSAGE_TYPE_ATTACKLOG = 'attacklog'; -export const MESSAGE_TYPE_DEBUG = 'debug'; -export const MESSAGE_TYPE_MENTOR = 'mentor'; // SKYRAT EDIT ADDITION - -// Metadata for each message type -export const MESSAGE_TYPES = [ - // Always-on types - { - type: MESSAGE_TYPE_SYSTEM, - name: 'System Messages', - description: 'Messages from your client, always enabled', - selector: '.boldannounce', - important: true, - }, - // Basic types - { - type: MESSAGE_TYPE_LOCALCHAT, - name: 'Local', - description: 'In-character local messages (say, emote, etc)', - selector: '.say, .emote, .looc', - }, - { - type: MESSAGE_TYPE_RADIO, - name: 'Radio', - description: 'All departments of radio messages', - selector: - '.alert, .minorannounce, .syndradio, .centcomradio, .aiprivradio, .comradio, .secradio, .gangradio, .engradio, .medradio, .sciradio, .suppradio, .servradio, .radio, .deptradio, .binarysay, .newscaster, .resonate, .abductor, .alien, .changeling', - }, - { - type: MESSAGE_TYPE_INFO, - name: 'Info', - description: 'Non-urgent messages from the game and items', - selector: - '.notice:not(.pm), .adminnotice, .info, .sinister, .cult, .infoplain, .announce, .hear, .smallnotice, .holoparasite, .boldnotice', - }, - { - type: MESSAGE_TYPE_WARNING, - name: 'Warnings', - description: 'Urgent messages from the game and items', - selector: - '.warning:not(.pm), .critical, .userdanger, .italics, .alertsyndie, .warningplain', - }, - { - type: MESSAGE_TYPE_DEADCHAT, - name: 'Deadchat', - description: 'All of deadchat', - selector: '.deadsay, .ghostalert', - }, - { - type: MESSAGE_TYPE_OOC, - name: 'OOC', - description: 'The bluewall of global OOC messages', - selector: '.ooc, .adminooc, .adminobserverooc, .oocplain, .looc, .rlooc', - }, - { - type: MESSAGE_TYPE_ADMINPM, - name: 'Admin PMs', - description: 'Messages to/from admins (adminhelp)', - selector: '.pm, .adminhelp', - }, - { - type: MESSAGE_TYPE_COMBAT, - name: 'Combat Log', - description: 'Urist McTraitor has stabbed you with a knife!', - selector: '.danger', - }, - { - type: MESSAGE_TYPE_UNKNOWN, - name: 'Unsorted', - description: 'Everything we could not sort, always enabled', - }, - // Admin stuff - { - type: MESSAGE_TYPE_ADMINCHAT, - name: 'Admin Chat', - description: 'ASAY messages', - selector: '.admin_channel, .adminsay', - admin: true, - }, - { - type: MESSAGE_TYPE_MODCHAT, - name: 'Mod Chat', - description: 'MSAY messages', - selector: '.mod_channel', - admin: true, - }, - { - type: MESSAGE_TYPE_PRAYER, - name: 'Prayers', - description: 'Prayers from players', - admin: true, - }, - { - type: MESSAGE_TYPE_ADMINLOG, - name: 'Admin Log', - description: 'ADMIN LOG: Urist McAdmin has jumped to coordinates X, Y, Z', - selector: '.log_message', - admin: true, - }, - { - type: MESSAGE_TYPE_ATTACKLOG, - name: 'Attack Log', - description: 'Urist McTraitor has shot John Doe', - admin: true, - }, - { - type: MESSAGE_TYPE_DEBUG, - name: 'Debug Log', - description: 'DEBUG: SSPlanets subsystem Recover().', - admin: true, - }, - { - type: MESSAGE_TYPE_MENTOR, // SKYRAT EDIT - name: 'Mentor Log', - description: 'Mentor PMs and other mentor things.', - selector: '.mentor, .mentornotice', - }, -]; diff --git a/tgui/packages/tgui-panel/chat/constants.ts b/tgui/packages/tgui-panel/chat/constants.ts new file mode 100644 index 00000000000000..e536f3b45e8f4a --- /dev/null +++ b/tgui/packages/tgui-panel/chat/constants.ts @@ -0,0 +1,155 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +export const MAX_VISIBLE_MESSAGES = 2500; +export const MAX_PERSISTED_MESSAGES = 1000; +export const MESSAGE_SAVE_INTERVAL = 10000; +export const MESSAGE_PRUNE_INTERVAL = 60000; +export const COMBINE_MAX_MESSAGES = 5; +export const COMBINE_MAX_TIME_WINDOW = 5000; +export const IMAGE_RETRY_DELAY = 250; +export const IMAGE_RETRY_LIMIT = 10; +export const IMAGE_RETRY_MESSAGE_AGE = 60000; + +// Default message type +export const MESSAGE_TYPE_UNKNOWN = 'unknown'; + +// Internal message type +export const MESSAGE_TYPE_INTERNAL = 'internal'; + +// Must match the set of defines in code/__DEFINES/chat.dm +export const MESSAGE_TYPE_SYSTEM = 'system'; +export const MESSAGE_TYPE_LOCALCHAT = 'localchat'; +export const MESSAGE_TYPE_RADIO = 'radio'; +export const MESSAGE_TYPE_INFO = 'info'; +export const MESSAGE_TYPE_WARNING = 'warning'; +export const MESSAGE_TYPE_DEADCHAT = 'deadchat'; +export const MESSAGE_TYPE_OOC = 'ooc'; +export const MESSAGE_TYPE_ADMINPM = 'adminpm'; +export const MESSAGE_TYPE_COMBAT = 'combat'; +export const MESSAGE_TYPE_ADMINCHAT = 'adminchat'; +export const MESSAGE_TYPE_MODCHAT = 'modchat'; +export const MESSAGE_TYPE_PRAYER = 'prayer'; +export const MESSAGE_TYPE_EVENTCHAT = 'eventchat'; +export const MESSAGE_TYPE_ADMINLOG = 'adminlog'; +export const MESSAGE_TYPE_ATTACKLOG = 'attacklog'; +export const MESSAGE_TYPE_DEBUG = 'debug'; +export const MESSAGE_TYPE_MENTOR = 'mentor'; // NOVA EDIT ADDITION + +// Metadata for each message type +export const MESSAGE_TYPES = [ + // Always-on types + { + type: MESSAGE_TYPE_SYSTEM, + name: 'System Messages', + description: 'Messages from your client, always enabled', + selector: '.boldannounce', + important: true, + }, + // Basic types + { + type: MESSAGE_TYPE_LOCALCHAT, + name: 'Local', + description: 'In-character local messages (say, emote, etc)', + selector: '.say, .emote, .looc', + }, + { + type: MESSAGE_TYPE_RADIO, + name: 'Radio', + description: 'All departments of radio messages', + selector: + '.alert, .minorannounce, .syndradio, .centcomradio, .aiprivradio, .comradio, .secradio, .gangradio, .engradio, .medradio, .sciradio, .suppradio, .servradio, .radio, .deptradio, .binarysay, .newscaster, .resonate, .abductor, .alien, .changeling', + }, + { + type: MESSAGE_TYPE_INFO, + name: 'Info', + description: 'Non-urgent messages from the game and items', + selector: + '.notice:not(.pm), .adminnotice, .info, .sinister, .cult, .infoplain, .announce, .hear, .smallnotice, .holoparasite, .boldnotice', + }, + { + type: MESSAGE_TYPE_WARNING, + name: 'Warnings', + description: 'Urgent messages from the game and items', + selector: + '.warning:not(.pm), .critical, .userdanger, .italics, .alertsyndie, .warningplain', + }, + { + type: MESSAGE_TYPE_DEADCHAT, + name: 'Deadchat', + description: 'All of deadchat', + selector: '.deadsay, .ghostalert', + }, + { + type: MESSAGE_TYPE_OOC, + name: 'OOC', + description: 'The bluewall of global OOC messages', + selector: '.ooc, .adminooc, .adminobserverooc, .oocplain, .looc, .rlooc', + }, + { + type: MESSAGE_TYPE_ADMINPM, + name: 'Admin PMs', + description: 'Messages to/from admins (adminhelp)', + selector: '.pm, .adminhelp', + }, + { + type: MESSAGE_TYPE_COMBAT, + name: 'Combat Log', + description: 'Urist McTraitor has stabbed you with a knife!', + selector: '.danger', + }, + { + type: MESSAGE_TYPE_UNKNOWN, + name: 'Unsorted', + description: 'Everything we could not sort, always enabled', + }, + // Admin stuff + { + type: MESSAGE_TYPE_ADMINCHAT, + name: 'Admin Chat', + description: 'ASAY messages', + selector: '.admin_channel, .adminsay', + admin: true, + }, + { + type: MESSAGE_TYPE_MODCHAT, + name: 'Mod Chat', + description: 'MSAY messages', + selector: '.mod_channel', + admin: true, + }, + { + type: MESSAGE_TYPE_PRAYER, + name: 'Prayers', + description: 'Prayers from players', + admin: true, + }, + { + type: MESSAGE_TYPE_ADMINLOG, + name: 'Admin Log', + description: 'ADMIN LOG: Urist McAdmin has jumped to coordinates X, Y, Z', + selector: '.log_message', + admin: true, + }, + { + type: MESSAGE_TYPE_ATTACKLOG, + name: 'Attack Log', + description: 'Urist McTraitor has shot John Doe', + admin: true, + }, + { + type: MESSAGE_TYPE_DEBUG, + name: 'Debug Log', + description: 'DEBUG: SSPlanets subsystem Recover().', + admin: true, + }, + { + type: MESSAGE_TYPE_MENTOR, // NOVA EDIT + name: 'Mentor Log', + description: 'Mentor PMs and other mentor things.', + selector: '.mentor, .mentornotice', + }, +]; diff --git a/tgui/packages/tgui-panel/chat/index.js b/tgui/packages/tgui-panel/chat/index.ts similarity index 100% rename from tgui/packages/tgui-panel/chat/index.js rename to tgui/packages/tgui-panel/chat/index.ts diff --git a/tgui/packages/tgui-panel/chat/middleware.js b/tgui/packages/tgui-panel/chat/middleware.js index 51ee8f1deae42b..0eeb0d6957d74c 100644 --- a/tgui/packages/tgui-panel/chat/middleware.js +++ b/tgui/packages/tgui-panel/chat/middleware.js @@ -4,11 +4,28 @@ * @license MIT */ -import DOMPurify from 'dompurify'; import { storage } from 'common/storage'; -import { loadSettings, updateSettings, addHighlightSetting, removeHighlightSetting, updateHighlightSetting } from '../settings/actions'; +import DOMPurify from 'dompurify'; + +import { + addHighlightSetting, + loadSettings, + removeHighlightSetting, + updateHighlightSetting, + updateSettings, +} from '../settings/actions'; import { selectSettings } from '../settings/selectors'; -import { addChatPage, changeChatPage, changeScrollTracking, loadChat, rebuildChat, removeChatPage, saveChatToDisk, toggleAcceptedType, updateMessageCount } from './actions'; +import { + addChatPage, + changeChatPage, + changeScrollTracking, + loadChat, + rebuildChat, + removeChatPage, + saveChatToDisk, + toggleAcceptedType, + updateMessageCount, +} from './actions'; import { MAX_PERSISTED_MESSAGES, MESSAGE_SAVE_INTERVAL } from './constants'; import { createMessage, serializeMessage } from './model'; import { chatRenderer } from './renderer'; @@ -21,7 +38,7 @@ const saveChatToStorage = async (store) => { const state = selectChat(store.getState()); const fromIndex = Math.max( 0, - chatRenderer.messages.length - MAX_PERSISTED_MESSAGES + chatRenderer.messages.length - MAX_PERSISTED_MESSAGES, ); const messages = chatRenderer.messages .slice(fromIndex) @@ -64,6 +81,8 @@ const loadChatFromStorage = async (store) => { export const chatMiddleware = (store) => { let initialized = false; let loaded = false; + const sequences = []; + const sequences_requested = []; chatRenderer.events.on('batchProcessed', (countByType) => { // Use this flag to workaround unread messages caused by // loading them from storage. Side effect of that, is that @@ -85,9 +104,41 @@ export const chatMiddleware = (store) => { loadChatFromStorage(store); } if (type === 'chat/message') { - // Normalize the payload - const batch = Array.isArray(payload) ? payload : [payload]; - chatRenderer.processBatch(batch); + let payload_obj; + try { + payload_obj = JSON.parse(payload); + } catch (err) { + return; + } + + const sequence = payload_obj.sequence; + if (sequences.includes(sequence)) { + return; + } + + const sequence_count = sequences.length; + seq_check: if (sequence_count > 0) { + if (sequences_requested.includes(sequence)) { + sequences_requested.splice(sequences_requested.indexOf(sequence), 1); + // if we are receiving a message we requested, we can stop reliability checks + break seq_check; + } + + // cannot do reliability if we don't have any messages + const expected_sequence = sequences[sequence_count - 1] + 1; + if (sequence !== expected_sequence) { + for ( + let requesting = expected_sequence; + requesting < sequence; + requesting++ + ) { + requested_sequences.push(requesting); + Byond.sendMessage('chat/resend', requesting); + } + } + } + + chatRenderer.processBatch([payload_obj.content]); return; } if (type === loadChat.type) { @@ -125,7 +176,7 @@ export const chatMiddleware = (store) => { const settings = selectSettings(store.getState()); chatRenderer.setHighlight( settings.highlightSettings, - settings.highlightSettingById + settings.highlightSettingById, ); return; diff --git a/tgui/packages/tgui-panel/chat/model.js b/tgui/packages/tgui-panel/chat/model.js index fa12153890d8ad..fdb5521b505b91 100644 --- a/tgui/packages/tgui-panel/chat/model.js +++ b/tgui/packages/tgui-panel/chat/model.js @@ -5,7 +5,8 @@ */ import { createUuid } from 'common/uuid'; -import { MESSAGE_TYPES, MESSAGE_TYPE_INTERNAL } from './constants'; + +import { MESSAGE_TYPE_INTERNAL, MESSAGE_TYPES } from './constants'; export const canPageAcceptType = (page, type) => type.startsWith(MESSAGE_TYPE_INTERNAL) || page.acceptedTypes[type]; diff --git a/tgui/packages/tgui-panel/chat/reducer.js b/tgui/packages/tgui-panel/chat/reducer.js index b727a7c1babc30..7a7681ada7416c 100644 --- a/tgui/packages/tgui-panel/chat/reducer.js +++ b/tgui/packages/tgui-panel/chat/reducer.js @@ -4,7 +4,16 @@ * @license MIT */ -import { addChatPage, changeChatPage, loadChat, removeChatPage, toggleAcceptedType, updateChatPage, updateMessageCount, changeScrollTracking } from './actions'; +import { + addChatPage, + changeChatPage, + changeScrollTracking, + loadChat, + removeChatPage, + toggleAcceptedType, + updateChatPage, + updateMessageCount, +} from './actions'; import { canPageAcceptType, createMainPage } from './model'; const mainPage = createMainPage(); diff --git a/tgui/packages/tgui-panel/chat/renderer.js b/tgui/packages/tgui-panel/chat/renderer.js deleted file mode 100644 index 7a528cd4fd75ba..00000000000000 --- a/tgui/packages/tgui-panel/chat/renderer.js +++ /dev/null @@ -1,608 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { EventEmitter } from 'common/events'; -import { classes } from 'common/react'; -import { createLogger } from 'tgui/logging'; -import { COMBINE_MAX_MESSAGES, COMBINE_MAX_TIME_WINDOW, IMAGE_RETRY_DELAY, IMAGE_RETRY_LIMIT, IMAGE_RETRY_MESSAGE_AGE, MAX_PERSISTED_MESSAGES, MAX_VISIBLE_MESSAGES, MESSAGE_PRUNE_INTERVAL, MESSAGE_TYPES, MESSAGE_TYPE_INTERNAL, MESSAGE_TYPE_UNKNOWN } from './constants'; -import { render } from 'inferno'; -import { canPageAcceptType, createMessage, isSameMessage } from './model'; -import { highlightNode, linkifyNode } from './replaceInTextNode'; -import { Tooltip } from '../../tgui/components'; - -const logger = createLogger('chatRenderer'); - -// We consider this as the smallest possible scroll offset -// that is still trackable. -const SCROLL_TRACKING_TOLERANCE = 24; - -// List of injectable component names to the actual type -export const TGUI_CHAT_COMPONENTS = { - Tooltip, -}; - -// List of injectable attibute names mapped to their proper prop -// We need this because attibutes don't support lowercase names -export const TGUI_CHAT_ATTRIBUTES_TO_PROPS = { - 'position': 'position', - 'content': 'content', -}; - -const findNearestScrollableParent = (startingNode) => { - const body = document.body; - let node = startingNode; - while (node && node !== body) { - // This definitely has a vertical scrollbar, because it reduces - // scrollWidth of the element. Might not work if element uses - // overflow: hidden. - if (node.scrollWidth < node.offsetWidth) { - return node; - } - node = node.parentNode; - } - return window; -}; - -const createHighlightNode = (text, color) => { - const node = document.createElement('span'); - node.className = 'Chat__highlight'; - node.setAttribute('style', 'background-color:' + color); - node.textContent = text; - return node; -}; - -const createMessageNode = () => { - const node = document.createElement('div'); - node.className = 'ChatMessage'; - return node; -}; - -const createReconnectedNode = () => { - const node = document.createElement('div'); - node.className = 'Chat__reconnected'; - return node; -}; - -const handleImageError = (e) => { - setTimeout(() => { - /** @type {HTMLImageElement} */ - const node = e.target; - const attempts = parseInt(node.getAttribute('data-reload-n'), 10) || 0; - if (attempts >= IMAGE_RETRY_LIMIT) { - logger.error(`failed to load an image after ${attempts} attempts`); - return; - } - const src = node.src; - node.src = null; - node.src = src + '#' + attempts; - node.setAttribute('data-reload-n', attempts + 1); - }, IMAGE_RETRY_DELAY); -}; - -/** - * Assigns a "times-repeated" badge to the message. - */ -const updateMessageBadge = (message) => { - const { node, times } = message; - if (!node || !times) { - // Nothing to update - return; - } - const foundBadge = node.querySelector('.Chat__badge'); - const badge = foundBadge || document.createElement('div'); - badge.textContent = times; - badge.className = classes(['Chat__badge', 'Chat__badge--animate']); - requestAnimationFrame(() => { - badge.className = 'Chat__badge'; - }); - if (!foundBadge) { - node.appendChild(badge); - } -}; - -class ChatRenderer { - constructor() { - /** @type {HTMLElement} */ - this.loaded = false; - /** @type {HTMLElement} */ - this.rootNode = null; - this.queue = []; - this.messages = []; - this.visibleMessages = []; - this.page = null; - this.events = new EventEmitter(); - // Scroll handler - /** @type {HTMLElement} */ - this.scrollNode = null; - this.scrollTracking = true; - this.handleScroll = (type) => { - const node = this.scrollNode; - const height = node.scrollHeight; - const bottom = node.scrollTop + node.offsetHeight; - const scrollTracking = - Math.abs(height - bottom) < SCROLL_TRACKING_TOLERANCE; - if (scrollTracking !== this.scrollTracking) { - this.scrollTracking = scrollTracking; - this.events.emit('scrollTrackingChanged', scrollTracking); - logger.debug('tracking', this.scrollTracking); - } - }; - this.ensureScrollTracking = () => { - if (this.scrollTracking) { - this.scrollToBottom(); - } - }; - // Periodic message pruning - setInterval(() => this.pruneMessages(), MESSAGE_PRUNE_INTERVAL); - } - - isReady() { - return this.loaded && this.rootNode && this.page; - } - - mount(node) { - // Mount existing root node on top of the new node - if (this.rootNode) { - node.appendChild(this.rootNode); - } - // Initialize the root node - else { - this.rootNode = node; - } - // Find scrollable parent - this.scrollNode = findNearestScrollableParent(this.rootNode); - this.scrollNode.addEventListener('scroll', this.handleScroll); - setImmediate(() => { - this.scrollToBottom(); - }); - // Flush the queue - this.tryFlushQueue(); - } - - onStateLoaded() { - this.loaded = true; - this.tryFlushQueue(); - } - - tryFlushQueue() { - if (this.isReady() && this.queue.length > 0) { - this.processBatch(this.queue); - this.queue = []; - } - } - - assignStyle(style = {}) { - for (let key of Object.keys(style)) { - this.rootNode.style.setProperty(key, style[key]); - } - } - - setHighlight(highlightSettings, highlightSettingById) { - this.highlightParsers = null; - if (!highlightSettings) { - return; - } - highlightSettings.map((id) => { - const setting = highlightSettingById[id]; - const text = setting.highlightText; - const highlightColor = setting.highlightColor; - const highlightWholeMessage = setting.highlightWholeMessage; - const matchWord = setting.matchWord; - const matchCase = setting.matchCase; - const allowedRegex = /^[a-z0-9_\-$/^[\s\]\\]+$/gi; - const regexEscapeCharacters = /[!#$%^&*)(+=.<>{}[\]:;'"|~`_\-\\/]/g; - const lines = String(text) - .split(',') - .map((str) => str.trim()) - .filter( - (str) => - // Must be longer than one character - str && - str.length > 1 && - // Must be alphanumeric (with some punctuation) - allowedRegex.test(str) && - // Reset lastIndex so it does not mess up the next word - ((allowedRegex.lastIndex = 0) || true) - ); - let highlightWords; - let highlightRegex; - // Nothing to match, reset highlighting - if (lines.length === 0) { - return; - } - let regexExpressions = []; - // Organize each highlight entry into regex expressions and words - for (let line of lines) { - // Regex expression syntax is /[exp]/ - if (line.charAt(0) === '/' && line.charAt(line.length - 1) === '/') { - const expr = line.substring(1, line.length - 1); - // Check if this is more than one character - if (/^(\[.*\]|\\.|.)$/.test(expr)) { - continue; - } - regexExpressions.push(expr); - } else { - // Lazy init - if (!highlightWords) { - highlightWords = []; - } - // We're not going to let regex characters fuck up our RegEx operation. - line = line.replace(regexEscapeCharacters, '\\$&'); - - highlightWords.push(line); - } - } - const regexStr = regexExpressions.join('|'); - const flags = 'g' + (matchCase ? '' : 'i'); - // We wrap this in a try-catch to ensure that broken regex doesn't break - // the entire chat. - try { - // setting regex overrides matchword - if (regexStr) { - highlightRegex = new RegExp('(' + regexStr + ')', flags); - } else { - const pattern = `${matchWord ? '\\b' : ''}(${highlightWords.join( - '|' - )})${matchWord ? '\\b' : ''}`; - highlightRegex = new RegExp(pattern, flags); - } - } catch { - // We just reset it if it's invalid. - highlightRegex = null; - } - // Lazy init - if (!this.highlightParsers) { - this.highlightParsers = []; - } - this.highlightParsers.push({ - highlightWords, - highlightRegex, - highlightColor, - highlightWholeMessage, - }); - }); - } - - scrollToBottom() { - // scrollHeight is always bigger than scrollTop and is - // automatically clamped to the valid range. - this.scrollNode.scrollTop = this.scrollNode.scrollHeight; - } - - changePage(page) { - if (!this.isReady()) { - this.page = page; - this.tryFlushQueue(); - return; - } - this.page = page; - // Fast clear of the root node - this.rootNode.textContent = ''; - this.visibleMessages = []; - // Re-add message nodes - const fragment = document.createDocumentFragment(); - let node; - for (let message of this.messages) { - if (canPageAcceptType(page, message.type)) { - node = message.node; - fragment.appendChild(node); - this.visibleMessages.push(message); - } - } - if (node) { - this.rootNode.appendChild(fragment); - node.scrollIntoView(); - } - } - - getCombinableMessage(predicate) { - const now = Date.now(); - const len = this.visibleMessages.length; - const from = len - 1; - const to = Math.max(0, len - COMBINE_MAX_MESSAGES); - for (let i = from; i >= to; i--) { - const message = this.visibleMessages[i]; - // prettier-ignore - const matches = ( - // Is not an internal message - !message.type.startsWith(MESSAGE_TYPE_INTERNAL) - // Text payload must fully match - && isSameMessage(message, predicate) - // Must land within the specified time window - && now < message.createdAt + COMBINE_MAX_TIME_WINDOW - ); - if (matches) { - return message; - } - } - return null; - } - - processBatch(batch, options = {}) { - const { prepend, notifyListeners = true } = options; - const now = Date.now(); - // Queue up messages until chat is ready - if (!this.isReady()) { - if (prepend) { - this.queue = [...batch, ...this.queue]; - } else { - this.queue = [...this.queue, ...batch]; - } - return; - } - // Insert messages - const fragment = document.createDocumentFragment(); - const countByType = {}; - let node; - for (let payload of batch) { - const message = createMessage(payload); - // Combine messages - const combinable = this.getCombinableMessage(message); - if (combinable) { - combinable.times = (combinable.times || 1) + 1; - updateMessageBadge(combinable); - continue; - } - // Reuse message node - if (message.node) { - node = message.node; - } - // Reconnected - else if (message.type === 'internal/reconnected') { - node = createReconnectedNode(); - } - // Create message node - else { - node = createMessageNode(); - // Payload is plain text - if (message.text) { - node.textContent = message.text; - } - // Payload is HTML - else if (message.html) { - node.innerHTML = message.html; - } else { - logger.error('Error: message is missing text payload', message); - } - // Get all nodes in this message that want to be rendered like jsx - const nodes = node.querySelectorAll('[data-component]'); - for (let i = 0; i < nodes.length; i++) { - const childNode = nodes[i]; - const targetName = childNode.getAttribute('data-component'); - // Let's pull out the attibute info we need - let outputProps = {}; - for (let j = 0; j < childNode.attributes.length; j++) { - const attribute = childNode.attributes[j]; - - let working_value = attribute.nodeValue; - // We can't do the "if it has no value it's truthy" trick - // Because getAttribute returns "", not null. Hate IE - if (working_value === '$true') { - working_value = true; - } else if (working_value === '$false') { - working_value = false; - } else if (!isNaN(working_value)) { - const parsed_float = parseFloat(working_value); - if (!isNaN(parsed_float)) { - working_value = parsed_float; - } - } - - let canon_name = attribute.nodeName.replace('data-', ''); - // html attributes don't support upper case chars, so we need to map - canon_name = TGUI_CHAT_ATTRIBUTES_TO_PROPS[canon_name]; - outputProps[canon_name] = working_value; - } - const oldHtml = { __html: childNode.innerHTML }; - while (childNode.firstChild) { - childNode.removeChild(childNode.firstChild); - } - const Element = TGUI_CHAT_COMPONENTS[targetName]; - /* eslint-disable react/no-danger */ - render( - <Element {...outputProps}> - <span dangerouslySetInnerHTML={oldHtml} /> - </Element>, - childNode - ); - /* eslint-enable react/no-danger */ - } - - // Highlight text - if (!message.avoidHighlighting && this.highlightParsers) { - this.highlightParsers.map((parser) => { - const highlighted = highlightNode( - node, - parser.highlightRegex, - parser.highlightWords, - (text) => createHighlightNode(text, parser.highlightColor) - ); - if (highlighted && parser.highlightWholeMessage) { - node.className += ' ChatMessage--highlighted'; - } - }); - } - // Linkify text - const linkifyNodes = node.querySelectorAll('.linkify'); - for (let i = 0; i < linkifyNodes.length; ++i) { - linkifyNode(linkifyNodes[i]); - } - // Assign an image error handler - if (now < message.createdAt + IMAGE_RETRY_MESSAGE_AGE) { - const imgNodes = node.querySelectorAll('img'); - for (let i = 0; i < imgNodes.length; i++) { - const imgNode = imgNodes[i]; - imgNode.addEventListener('error', handleImageError); - } - } - } - // Store the node in the message - message.node = node; - // Query all possible selectors to find out the message type - if (!message.type) { - // IE8: Does not support querySelector on elements that - // are not yet in the document. - // prettier-ignore - const typeDef = !Byond.IS_LTE_IE8 && MESSAGE_TYPES - .find(typeDef => ( - typeDef.selector && node.querySelector(typeDef.selector) - )); - message.type = typeDef?.type || MESSAGE_TYPE_UNKNOWN; - } - updateMessageBadge(message); - if (!countByType[message.type]) { - countByType[message.type] = 0; - } - countByType[message.type] += 1; - // TODO: Detect duplicates - this.messages.push(message); - if (canPageAcceptType(this.page, message.type)) { - fragment.appendChild(node); - this.visibleMessages.push(message); - } - } - if (node) { - const firstChild = this.rootNode.childNodes[0]; - if (prepend && firstChild) { - this.rootNode.insertBefore(fragment, firstChild); - } else { - this.rootNode.appendChild(fragment); - } - if (this.scrollTracking) { - setImmediate(() => this.scrollToBottom()); - } - } - // Notify listeners that we have processed the batch - if (notifyListeners) { - this.events.emit('batchProcessed', countByType); - } - } - - pruneMessages() { - if (!this.isReady()) { - return; - } - // Delay pruning because user is currently interacting - // with chat history - if (!this.scrollTracking) { - logger.debug('pruning delayed'); - return; - } - // Visible messages - { - const messages = this.visibleMessages; - const fromIndex = Math.max(0, messages.length - MAX_VISIBLE_MESSAGES); - if (fromIndex > 0) { - this.visibleMessages = messages.slice(fromIndex); - for (let i = 0; i < fromIndex; i++) { - const message = messages[i]; - this.rootNode.removeChild(message.node); - // Mark this message as pruned - message.node = 'pruned'; - } - // Remove pruned messages from the message array - // prettier-ignore - this.messages = this.messages.filter(message => ( - message.node !== 'pruned' - )); - logger.log(`pruned ${fromIndex} visible messages`); - } - } - // All messages - { - const fromIndex = Math.max( - 0, - this.messages.length - MAX_PERSISTED_MESSAGES - ); - if (fromIndex > 0) { - this.messages = this.messages.slice(fromIndex); - logger.log(`pruned ${fromIndex} stored messages`); - } - } - } - - rebuildChat() { - if (!this.isReady()) { - return; - } - // Make a copy of messages - const fromIndex = Math.max( - 0, - this.messages.length - MAX_PERSISTED_MESSAGES - ); - const messages = this.messages.slice(fromIndex); - // Remove existing nodes - for (let message of messages) { - message.node = undefined; - } - // Fast clear of the root node - this.rootNode.textContent = ''; - this.messages = []; - this.visibleMessages = []; - // Repopulate the chat log - this.processBatch(messages, { - notifyListeners: false, - }); - } - - saveToDisk() { - // Allow only on IE11 - if (Byond.IS_LTE_IE10) { - return; - } - // Compile currently loaded stylesheets as CSS text - let cssText = ''; - const styleSheets = document.styleSheets; - for (let i = 0; i < styleSheets.length; i++) { - const cssRules = styleSheets[i].cssRules; - for (let i = 0; i < cssRules.length; i++) { - const rule = cssRules[i]; - if (rule && typeof rule.cssText === 'string') { - cssText += rule.cssText + '\n'; - } - } - } - cssText += 'body, html { background-color: #141414 }\n'; - // Compile chat log as HTML text - let messagesHtml = ''; - for (let message of this.visibleMessages) { - if (message.node) { - messagesHtml += message.node.outerHTML + '\n'; - } - } - // Create a page - // prettier-ignore - const pageHtml = '<!doctype html>\n' - + '<html>\n' - + '<head>\n' - + '<title>SS13 Chat Log\n' - + '\n' - + '\n' - + '\n' - + '
    \n' - + messagesHtml - + '
    \n' - + '\n' - + '\n'; - // Create and send a nice blob - const blob = new Blob([pageHtml]); - const timestamp = new Date() - .toISOString() - .substring(0, 19) - .replace(/[-:]/g, '') - .replace('T', '-'); - window.navigator.msSaveBlob(blob, `ss13-chatlog-${timestamp}.html`); - } -} - -// Make chat renderer global so that we can continue using the same -// instance after hot code replacement. -if (!window.__chatRenderer__) { - window.__chatRenderer__ = new ChatRenderer(); -} - -/** @type {ChatRenderer} */ -export const chatRenderer = window.__chatRenderer__; diff --git a/tgui/packages/tgui-panel/chat/renderer.jsx b/tgui/packages/tgui-panel/chat/renderer.jsx new file mode 100644 index 00000000000000..899839e56cc11c --- /dev/null +++ b/tgui/packages/tgui-panel/chat/renderer.jsx @@ -0,0 +1,625 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { EventEmitter } from 'common/events'; +import { classes } from 'common/react'; +import { render } from 'react-dom'; +import { Tooltip } from 'tgui/components'; +import { createLogger } from 'tgui/logging'; + +import { + COMBINE_MAX_MESSAGES, + COMBINE_MAX_TIME_WINDOW, + IMAGE_RETRY_DELAY, + IMAGE_RETRY_LIMIT, + IMAGE_RETRY_MESSAGE_AGE, + MAX_PERSISTED_MESSAGES, + MAX_VISIBLE_MESSAGES, + MESSAGE_PRUNE_INTERVAL, + MESSAGE_TYPE_INTERNAL, + MESSAGE_TYPE_UNKNOWN, + MESSAGE_TYPES, +} from './constants'; +import { canPageAcceptType, createMessage, isSameMessage } from './model'; +import { highlightNode, linkifyNode } from './replaceInTextNode'; + +const logger = createLogger('chatRenderer'); + +// We consider this as the smallest possible scroll offset +// that is still trackable. +const SCROLL_TRACKING_TOLERANCE = 24; + +// List of injectable component names to the actual type +export const TGUI_CHAT_COMPONENTS = { + Tooltip, +}; + +// List of injectable attibute names mapped to their proper prop +// We need this because attibutes don't support lowercase names +export const TGUI_CHAT_ATTRIBUTES_TO_PROPS = { + position: 'position', + content: 'content', +}; + +const findNearestScrollableParent = (startingNode) => { + const body = document.body; + let node = startingNode; + while (node && node !== body) { + // This definitely has a vertical scrollbar, because it reduces + // scrollWidth of the element. Might not work if element uses + // overflow: hidden. + if (node.scrollWidth < node.offsetWidth) { + return node; + } + node = node.parentNode; + } + return window; +}; + +const createHighlightNode = (text, color) => { + const node = document.createElement('span'); + node.className = 'Chat__highlight'; + node.setAttribute('style', 'background-color:' + color); + node.textContent = text; + return node; +}; + +const createMessageNode = () => { + const node = document.createElement('div'); + node.className = 'ChatMessage'; + return node; +}; + +const createReconnectedNode = () => { + const node = document.createElement('div'); + node.className = 'Chat__reconnected'; + return node; +}; + +const handleImageError = (e) => { + setTimeout(() => { + /** @type {HTMLImageElement} */ + const node = e.target; + const attempts = parseInt(node.getAttribute('data-reload-n'), 10) || 0; + if (attempts >= IMAGE_RETRY_LIMIT) { + logger.error(`failed to load an image after ${attempts} attempts`); + return; + } + const src = node.src; + node.src = null; + node.src = src + '#' + attempts; + node.setAttribute('data-reload-n', attempts + 1); + }, IMAGE_RETRY_DELAY); +}; + +/** + * Assigns a "times-repeated" badge to the message. + */ +const updateMessageBadge = (message) => { + const { node, times } = message; + if (!node || !times) { + // Nothing to update + return; + } + const foundBadge = node.querySelector('.Chat__badge'); + const badge = foundBadge || document.createElement('div'); + badge.textContent = times; + badge.className = classes(['Chat__badge', 'Chat__badge--animate']); + requestAnimationFrame(() => { + badge.className = 'Chat__badge'; + }); + if (!foundBadge) { + node.appendChild(badge); + } +}; + +class ChatRenderer { + constructor() { + /** @type {HTMLElement} */ + this.loaded = false; + /** @type {HTMLElement} */ + this.rootNode = null; + this.queue = []; + this.messages = []; + this.visibleMessages = []; + this.page = null; + this.events = new EventEmitter(); + // Scroll handler + /** @type {HTMLElement} */ + this.scrollNode = null; + this.scrollTracking = true; + this.handleScroll = (type) => { + const node = this.scrollNode; + const height = node.scrollHeight; + const bottom = node.scrollTop + node.offsetHeight; + const scrollTracking = + Math.abs(height - bottom) < SCROLL_TRACKING_TOLERANCE; + if (scrollTracking !== this.scrollTracking) { + this.scrollTracking = scrollTracking; + this.events.emit('scrollTrackingChanged', scrollTracking); + logger.debug('tracking', this.scrollTracking); + } + }; + this.ensureScrollTracking = () => { + if (this.scrollTracking) { + this.scrollToBottom(); + } + }; + // Periodic message pruning + setInterval(() => this.pruneMessages(), MESSAGE_PRUNE_INTERVAL); + } + + isReady() { + return this.loaded && this.rootNode && this.page; + } + + mount(node) { + // Mount existing root node on top of the new node + if (this.rootNode) { + node.appendChild(this.rootNode); + } + // Initialize the root node + else { + this.rootNode = node; + } + // Find scrollable parent + this.scrollNode = findNearestScrollableParent(this.rootNode); + this.scrollNode.addEventListener('scroll', this.handleScroll); + setImmediate(() => { + this.scrollToBottom(); + }); + // Flush the queue + this.tryFlushQueue(); + } + + onStateLoaded() { + this.loaded = true; + this.tryFlushQueue(); + } + + tryFlushQueue() { + if (this.isReady() && this.queue.length > 0) { + this.processBatch(this.queue); + this.queue = []; + } + } + + assignStyle(style = {}) { + for (let key of Object.keys(style)) { + this.rootNode.style.setProperty(key, style[key]); + } + } + + setHighlight(highlightSettings, highlightSettingById) { + this.highlightParsers = null; + if (!highlightSettings) { + return; + } + highlightSettings.map((id) => { + const setting = highlightSettingById[id]; + const text = setting.highlightText; + const highlightColor = setting.highlightColor; + const highlightWholeMessage = setting.highlightWholeMessage; + const matchWord = setting.matchWord; + const matchCase = setting.matchCase; + const allowedRegex = /^[a-z0-9_\-$/^[\s\]\\]+$/gi; + const regexEscapeCharacters = /[!#$%^&*)(+=.<>{}[\]:;'"|~`_\-\\/]/g; + const lines = String(text) + .split(',') + .map((str) => str.trim()) + .filter( + (str) => + // Must be longer than one character + str && + str.length > 1 && + // Must be alphanumeric (with some punctuation) + allowedRegex.test(str) && + // Reset lastIndex so it does not mess up the next word + ((allowedRegex.lastIndex = 0) || true), + ); + let highlightWords; + let highlightRegex; + // Nothing to match, reset highlighting + if (lines.length === 0) { + return; + } + let regexExpressions = []; + // Organize each highlight entry into regex expressions and words + for (let line of lines) { + // Regex expression syntax is /[exp]/ + if (line.charAt(0) === '/' && line.charAt(line.length - 1) === '/') { + const expr = line.substring(1, line.length - 1); + // Check if this is more than one character + if (/^(\[.*\]|\\.|.)$/.test(expr)) { + continue; + } + regexExpressions.push(expr); + } else { + // Lazy init + if (!highlightWords) { + highlightWords = []; + } + // We're not going to let regex characters fuck up our RegEx operation. + line = line.replace(regexEscapeCharacters, '\\$&'); + + highlightWords.push(line); + } + } + const regexStr = regexExpressions.join('|'); + const flags = 'g' + (matchCase ? '' : 'i'); + // We wrap this in a try-catch to ensure that broken regex doesn't break + // the entire chat. + try { + // setting regex overrides matchword + if (regexStr) { + highlightRegex = new RegExp('(' + regexStr + ')', flags); + } else { + const pattern = `${matchWord ? '\\b' : ''}(${highlightWords.join( + '|', + )})${matchWord ? '\\b' : ''}`; + highlightRegex = new RegExp(pattern, flags); + } + } catch { + // We just reset it if it's invalid. + highlightRegex = null; + } + // Lazy init + if (!this.highlightParsers) { + this.highlightParsers = []; + } + this.highlightParsers.push({ + highlightWords, + highlightRegex, + highlightColor, + highlightWholeMessage, + }); + }); + } + + scrollToBottom() { + // scrollHeight is always bigger than scrollTop and is + // automatically clamped to the valid range. + this.scrollNode.scrollTop = this.scrollNode.scrollHeight; + } + + changePage(page) { + if (!this.isReady()) { + this.page = page; + this.tryFlushQueue(); + return; + } + this.page = page; + // Fast clear of the root node + this.rootNode.textContent = ''; + this.visibleMessages = []; + // Re-add message nodes + const fragment = document.createDocumentFragment(); + let node; + for (let message of this.messages) { + if (canPageAcceptType(page, message.type)) { + node = message.node; + fragment.appendChild(node); + this.visibleMessages.push(message); + } + } + if (node) { + this.rootNode.appendChild(fragment); + node.scrollIntoView(); + } + } + + getCombinableMessage(predicate) { + const now = Date.now(); + const len = this.visibleMessages.length; + const from = len - 1; + const to = Math.max(0, len - COMBINE_MAX_MESSAGES); + for (let i = from; i >= to; i--) { + const message = this.visibleMessages[i]; + + const matches = + // Is not an internal message + !message.type.startsWith(MESSAGE_TYPE_INTERNAL) && + // Text payload must fully match + isSameMessage(message, predicate) && + // Must land within the specified time window + now < message.createdAt + COMBINE_MAX_TIME_WINDOW; + if (matches) { + return message; + } + } + return null; + } + + processBatch(batch, options = {}) { + const { prepend, notifyListeners = true } = options; + const now = Date.now(); + // Queue up messages until chat is ready + if (!this.isReady()) { + if (prepend) { + this.queue = [...batch, ...this.queue]; + } else { + this.queue = [...this.queue, ...batch]; + } + return; + } + // Insert messages + const fragment = document.createDocumentFragment(); + const countByType = {}; + let node; + for (let payload of batch) { + const message = createMessage(payload); + // Combine messages + const combinable = this.getCombinableMessage(message); + if (combinable) { + combinable.times = (combinable.times || 1) + 1; + updateMessageBadge(combinable); + continue; + } + // Reuse message node + if (message.node) { + node = message.node; + } + // Reconnected + else if (message.type === 'internal/reconnected') { + node = createReconnectedNode(); + } + // Create message node + else { + node = createMessageNode(); + // Payload is plain text + if (message.text) { + node.textContent = message.text; + } + // Payload is HTML + else if (message.html) { + node.innerHTML = message.html; + } else { + logger.error('Error: message is missing text payload', message); + } + // Get all nodes in this message that want to be rendered like jsx + const nodes = node.querySelectorAll('[data-component]'); + for (let i = 0; i < nodes.length; i++) { + const childNode = nodes[i]; + const targetName = childNode.getAttribute('data-component'); + // Let's pull out the attibute info we need + let outputProps = {}; + for (let j = 0; j < childNode.attributes.length; j++) { + const attribute = childNode.attributes[j]; + + let working_value = attribute.nodeValue; + // We can't do the "if it has no value it's truthy" trick + // Because getAttribute returns "", not null. Hate IE + if (working_value === '$true') { + working_value = true; + } else if (working_value === '$false') { + working_value = false; + } else if (!isNaN(working_value)) { + const parsed_float = parseFloat(working_value); + if (!isNaN(parsed_float)) { + working_value = parsed_float; + } + } + + let canon_name = attribute.nodeName.replace('data-', ''); + // html attributes don't support upper case chars, so we need to map + canon_name = TGUI_CHAT_ATTRIBUTES_TO_PROPS[canon_name]; + outputProps[canon_name] = working_value; + } + const oldHtml = { __html: childNode.innerHTML }; + while (childNode.firstChild) { + childNode.removeChild(childNode.firstChild); + } + const Element = TGUI_CHAT_COMPONENTS[targetName]; + /* eslint-disable react/no-danger */ + render( + + + , + childNode, + ); + /* eslint-enable react/no-danger */ + } + + // Highlight text + if (!message.avoidHighlighting && this.highlightParsers) { + this.highlightParsers.map((parser) => { + const highlighted = highlightNode( + node, + parser.highlightRegex, + parser.highlightWords, + (text) => createHighlightNode(text, parser.highlightColor), + ); + if (highlighted && parser.highlightWholeMessage) { + node.className += ' ChatMessage--highlighted'; + } + }); + } + // Linkify text + const linkifyNodes = node.querySelectorAll('.linkify'); + for (let i = 0; i < linkifyNodes.length; ++i) { + linkifyNode(linkifyNodes[i]); + } + // Assign an image error handler + if (now < message.createdAt + IMAGE_RETRY_MESSAGE_AGE) { + const imgNodes = node.querySelectorAll('img'); + for (let i = 0; i < imgNodes.length; i++) { + const imgNode = imgNodes[i]; + imgNode.addEventListener('error', handleImageError); + } + } + } + // Store the node in the message + message.node = node; + // Query all possible selectors to find out the message type + if (!message.type) { + // IE8: Does not support querySelector on elements that + // are not yet in the document. + + const typeDef = + !Byond.IS_LTE_IE8 && + MESSAGE_TYPES.find( + (typeDef) => + typeDef.selector && node.querySelector(typeDef.selector), + ); + message.type = typeDef?.type || MESSAGE_TYPE_UNKNOWN; + } + updateMessageBadge(message); + if (!countByType[message.type]) { + countByType[message.type] = 0; + } + countByType[message.type] += 1; + // TODO: Detect duplicates + this.messages.push(message); + if (canPageAcceptType(this.page, message.type)) { + fragment.appendChild(node); + this.visibleMessages.push(message); + } + } + if (node) { + const firstChild = this.rootNode.childNodes[0]; + if (prepend && firstChild) { + this.rootNode.insertBefore(fragment, firstChild); + } else { + this.rootNode.appendChild(fragment); + } + if (this.scrollTracking) { + setImmediate(() => this.scrollToBottom()); + } + } + // Notify listeners that we have processed the batch + if (notifyListeners) { + this.events.emit('batchProcessed', countByType); + } + } + + pruneMessages() { + if (!this.isReady()) { + return; + } + // Delay pruning because user is currently interacting + // with chat history + if (!this.scrollTracking) { + logger.debug('pruning delayed'); + return; + } + // Visible messages + { + const messages = this.visibleMessages; + const fromIndex = Math.max(0, messages.length - MAX_VISIBLE_MESSAGES); + if (fromIndex > 0) { + this.visibleMessages = messages.slice(fromIndex); + for (let i = 0; i < fromIndex; i++) { + const message = messages[i]; + this.rootNode.removeChild(message.node); + // Mark this message as pruned + message.node = 'pruned'; + } + // Remove pruned messages from the message array + + this.messages = this.messages.filter( + (message) => message.node !== 'pruned', + ); + logger.log(`pruned ${fromIndex} visible messages`); + } + } + // All messages + { + const fromIndex = Math.max( + 0, + this.messages.length - MAX_PERSISTED_MESSAGES, + ); + if (fromIndex > 0) { + this.messages = this.messages.slice(fromIndex); + logger.log(`pruned ${fromIndex} stored messages`); + } + } + } + + rebuildChat() { + if (!this.isReady()) { + return; + } + // Make a copy of messages + const fromIndex = Math.max( + 0, + this.messages.length - MAX_PERSISTED_MESSAGES, + ); + const messages = this.messages.slice(fromIndex); + // Remove existing nodes + for (let message of messages) { + message.node = undefined; + } + // Fast clear of the root node + this.rootNode.textContent = ''; + this.messages = []; + this.visibleMessages = []; + // Repopulate the chat log + this.processBatch(messages, { + notifyListeners: false, + }); + } + + saveToDisk() { + // Allow only on IE11 + if (Byond.IS_LTE_IE10) { + return; + } + // Compile currently loaded stylesheets as CSS text + let cssText = ''; + const styleSheets = document.styleSheets; + for (let i = 0; i < styleSheets.length; i++) { + const cssRules = styleSheets[i].cssRules; + for (let i = 0; i < cssRules.length; i++) { + const rule = cssRules[i]; + if (rule && typeof rule.cssText === 'string') { + cssText += rule.cssText + '\n'; + } + } + } + cssText += 'body, html { background-color: #141414 }\n'; + // Compile chat log as HTML text + let messagesHtml = ''; + for (let message of this.visibleMessages) { + if (message.node) { + messagesHtml += message.node.outerHTML + '\n'; + } + } + // Create a page + + const pageHtml = + '\n' + + '\n' + + '\n' + + 'SS13 Chat Log\n' + + '\n' + + '\n' + + '\n' + + '
    \n' + + messagesHtml + + '
    \n' + + '\n' + + '\n'; + // Create and send a nice blob + const blob = new Blob([pageHtml]); + const timestamp = new Date() + .toISOString() + .substring(0, 19) + .replace(/[-:]/g, '') + .replace('T', '-'); + window.navigator.msSaveBlob(blob, `ss13-chatlog-${timestamp}.html`); + } +} + +// Make chat renderer global so that we can continue using the same +// instance after hot code replacement. +if (!window.__chatRenderer__) { + window.__chatRenderer__ = new ChatRenderer(); +} + +/** @type {ChatRenderer} */ +export const chatRenderer = window.__chatRenderer__; diff --git a/tgui/packages/tgui-panel/chat/replaceInTextNode.js b/tgui/packages/tgui-panel/chat/replaceInTextNode.js index 753997b3b821c2..4c91b604dacf78 100644 --- a/tgui/packages/tgui-panel/chat/replaceInTextNode.js +++ b/tgui/packages/tgui-panel/chat/replaceInTextNode.js @@ -149,7 +149,7 @@ export const highlightNode = ( node, regex, words, - createNode = createHighlightNode + createNode = createHighlightNode, ) => { if (!createNode) { createNode = createHighlightNode; @@ -171,8 +171,8 @@ export const highlightNode = ( // Linkify // -------------------------------------------------------- -// prettier-ignore -const URL_REGEX = /(?:(?:https?:\/\/)|(?:www\.))(?:[^ ]*?\.[^ ]*?)+[-A-Za-z0-9+&@#/%?=~_|$!:,.;(){}]+/ig; +const URL_REGEX = + /(?:(?:https?:\/\/)|(?:www\.))(?:[^ ]*?\.[^ ]*?)+[-A-Za-z0-9+&@#/%?=~_|$!:,.;(){}]+/gi; /** * Highlights the text in the node based on the provided regular expression. diff --git a/tgui/packages/tgui-panel/chat/selectors.js b/tgui/packages/tgui-panel/chat/selectors.js deleted file mode 100644 index 6352b7cddf0afd..00000000000000 --- a/tgui/packages/tgui-panel/chat/selectors.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { map } from 'common/collections'; - -export const selectChat = (state) => state.chat; - -export const selectChatPages = (state) => - map((id) => state.chat.pageById[id])(state.chat.pages); - -export const selectCurrentChatPage = (state) => - state.chat.pageById[state.chat.currentPageId]; - -export const selectChatPageById = (id) => (state) => state.chat.pageById[id]; diff --git a/tgui/packages/tgui-panel/chat/selectors.ts b/tgui/packages/tgui-panel/chat/selectors.ts new file mode 100644 index 00000000000000..2908f661264a29 --- /dev/null +++ b/tgui/packages/tgui-panel/chat/selectors.ts @@ -0,0 +1,17 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { map } from 'common/collections'; + +export const selectChat = (state) => state.chat; + +export const selectChatPages = (state) => + map((id: string) => state.chat.pageById[id])(state.chat.pages); + +export const selectCurrentChatPage = (state) => + state.chat.pageById[state.chat.currentPageId]; + +export const selectChatPageById = (id) => (state) => state.chat.pageById[id]; diff --git a/tgui/packages/tgui-panel/game/actions.js b/tgui/packages/tgui-panel/game/actions.ts similarity index 100% rename from tgui/packages/tgui-panel/game/actions.js rename to tgui/packages/tgui-panel/game/actions.ts diff --git a/tgui/packages/tgui-panel/game/constants.js b/tgui/packages/tgui-panel/game/constants.js deleted file mode 100644 index f40a529a101aac..00000000000000 --- a/tgui/packages/tgui-panel/game/constants.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -export const CONNECTION_LOST_AFTER = 20000; diff --git a/tgui/packages/tgui-panel/game/constants.ts b/tgui/packages/tgui-panel/game/constants.ts new file mode 100644 index 00000000000000..d692e26c213f19 --- /dev/null +++ b/tgui/packages/tgui-panel/game/constants.ts @@ -0,0 +1,7 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +export const CONNECTION_LOST_AFTER = 45000; diff --git a/tgui/packages/tgui-panel/game/hooks.js b/tgui/packages/tgui-panel/game/hooks.js deleted file mode 100644 index 859aaa09a40722..00000000000000 --- a/tgui/packages/tgui-panel/game/hooks.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { useSelector } from 'common/redux'; -import { selectGame } from './selectors'; - -export const useGame = (context) => { - return useSelector(context, selectGame); -}; diff --git a/tgui/packages/tgui-panel/game/hooks.ts b/tgui/packages/tgui-panel/game/hooks.ts new file mode 100644 index 00000000000000..40a74ff44a0680 --- /dev/null +++ b/tgui/packages/tgui-panel/game/hooks.ts @@ -0,0 +1,13 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { useSelector } from 'tgui/backend'; + +import { selectGame } from './selectors'; + +export const useGame = () => { + return useSelector(selectGame); +}; diff --git a/tgui/packages/tgui-panel/game/index.js b/tgui/packages/tgui-panel/game/index.ts similarity index 100% rename from tgui/packages/tgui-panel/game/index.js rename to tgui/packages/tgui-panel/game/index.ts diff --git a/tgui/packages/tgui-panel/game/middleware.js b/tgui/packages/tgui-panel/game/middleware.js index 53dd45bb46e0ca..1cf80a7ac63a1b 100644 --- a/tgui/packages/tgui-panel/game/middleware.js +++ b/tgui/packages/tgui-panel/game/middleware.js @@ -6,8 +6,8 @@ import { pingSoft, pingSuccess } from '../ping/actions'; import { connectionLost, connectionRestored, roundRestarted } from './actions'; -import { selectGame } from './selectors'; import { CONNECTION_LOST_AFTER } from './constants'; +import { selectGame } from './selectors'; const withTimestamp = (action) => ({ ...action, diff --git a/tgui/packages/tgui-panel/game/reducer.js b/tgui/packages/tgui-panel/game/reducer.js deleted file mode 100644 index 97535524c560b7..00000000000000 --- a/tgui/packages/tgui-panel/game/reducer.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { connectionLost } from './actions'; -import { connectionRestored } from './actions'; - -const initialState = { - // TODO: This is where round info should be. - roundId: null, - roundTime: null, - roundRestartedAt: null, - connectionLostAt: null, -}; - -export const gameReducer = (state = initialState, action) => { - const { type, payload, meta } = action; - if (type === 'roundrestart') { - return { - ...state, - roundRestartedAt: meta.now, - }; - } - if (type === connectionLost.type) { - return { - ...state, - connectionLostAt: meta.now, - }; - } - if (type === connectionRestored.type) { - return { - ...state, - connectionLostAt: null, - }; - } - return state; -}; diff --git a/tgui/packages/tgui-panel/game/reducer.ts b/tgui/packages/tgui-panel/game/reducer.ts new file mode 100644 index 00000000000000..c446db8f029b09 --- /dev/null +++ b/tgui/packages/tgui-panel/game/reducer.ts @@ -0,0 +1,39 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { connectionLost } from './actions'; +import { connectionRestored } from './actions'; + +const initialState = { + // TODO: This is where round info should be. + roundId: null, + roundTime: null, + roundRestartedAt: null, + connectionLostAt: null, +}; + +export const gameReducer = (state = initialState, action) => { + const { type, meta } = action; + if (type === 'roundrestart') { + return { + ...state, + roundRestartedAt: meta.now, + }; + } + if (type === connectionLost.type) { + return { + ...state, + connectionLostAt: meta.now, + }; + } + if (type === connectionRestored.type) { + return { + ...state, + connectionLostAt: null, + }; + } + return state; +}; diff --git a/tgui/packages/tgui-panel/game/selectors.js b/tgui/packages/tgui-panel/game/selectors.ts similarity index 100% rename from tgui/packages/tgui-panel/game/selectors.js rename to tgui/packages/tgui-panel/game/selectors.ts diff --git a/tgui/packages/tgui-panel/index.js b/tgui/packages/tgui-panel/index.js deleted file mode 100644 index 6bc6b32c4622b4..00000000000000 --- a/tgui/packages/tgui-panel/index.js +++ /dev/null @@ -1,114 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -// Themes -import './styles/main.scss'; -import './styles/themes/light.scss'; - -import { perf } from 'common/perf'; -import { combineReducers } from 'common/redux'; -import { setupHotReloading } from 'tgui-dev-server/link/client.cjs'; -import { setupGlobalEvents } from 'tgui/events'; -import { captureExternalLinks } from 'tgui/links'; -import { createRenderer } from 'tgui/renderer'; -import { configureStore, StoreProvider } from 'tgui/store'; -import { audioMiddleware, audioReducer } from './audio'; -import { chatMiddleware, chatReducer } from './chat'; -import { gameMiddleware, gameReducer } from './game'; -import { setupPanelFocusHacks } from './panelFocus'; -import { pingMiddleware, pingReducer } from './ping'; -import { settingsMiddleware, settingsReducer } from './settings'; -import { telemetryMiddleware } from './telemetry'; - -perf.mark('inception', window.performance?.timing?.navigationStart); -perf.mark('init'); - -const store = configureStore({ - reducer: combineReducers({ - audio: audioReducer, - chat: chatReducer, - game: gameReducer, - ping: pingReducer, - settings: settingsReducer, - }), - middleware: { - pre: [ - chatMiddleware, - pingMiddleware, - telemetryMiddleware, - settingsMiddleware, - audioMiddleware, - gameMiddleware, - ], - }, -}); - -const renderApp = createRenderer(() => { - const { Panel } = require('./Panel'); - return ( - - - - ); -}); - -const setupApp = () => { - // Delay setup - if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', setupApp); - return; - } - - setupGlobalEvents({ - ignoreWindowFocus: true, - }); - setupPanelFocusHacks(); - captureExternalLinks(); - - // Re-render UI on store updates - store.subscribe(renderApp); - - // Dispatch incoming messages as store actions - Byond.subscribe((type, payload) => store.dispatch({ type, payload })); - - // Unhide the panel - Byond.winset('output', { - 'is-visible': false, - }); - Byond.winset('browseroutput', { - 'is-visible': true, - 'is-disabled': false, - 'pos': '0x0', - 'size': '0x0', - }); - - // Resize the panel to match the non-browser output - Byond.winget('output').then((output) => { - Byond.winset('browseroutput', { - 'size': output.size, - }); - }); - - // Enable hot module reloading - if (module.hot) { - setupHotReloading(); - // prettier-ignore - module.hot.accept([ - './audio', - './chat', - './game', - './Notifications', - './Panel', - './ping', - './settings', - './telemetry', - ], () => { - renderApp(); - }); - } -}; - -setupApp(); diff --git a/tgui/packages/tgui-panel/index.tsx b/tgui/packages/tgui-panel/index.tsx new file mode 100644 index 00000000000000..a70a53bac251e0 --- /dev/null +++ b/tgui/packages/tgui-panel/index.tsx @@ -0,0 +1,117 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +// Themes +import './styles/main.scss'; +import './styles/themes/light.scss'; + +import { perf } from 'common/perf'; +import { combineReducers } from 'common/redux'; +import { setGlobalStore } from 'tgui/backend'; +import { setupGlobalEvents } from 'tgui/events'; +import { captureExternalLinks } from 'tgui/links'; +import { createRenderer } from 'tgui/renderer'; +import { configureStore } from 'tgui/store'; +import { setupHotReloading } from 'tgui-dev-server/link/client.cjs'; + +import { audioMiddleware, audioReducer } from './audio'; +import { chatMiddleware, chatReducer } from './chat'; +import { gameMiddleware, gameReducer } from './game'; +import { setupPanelFocusHacks } from './panelFocus'; +import { pingMiddleware, pingReducer } from './ping'; +import { settingsMiddleware, settingsReducer } from './settings'; +import { telemetryMiddleware } from './telemetry'; + +perf.mark('inception', window.performance?.timing?.navigationStart); +perf.mark('init'); + +const store = configureStore({ + reducer: combineReducers({ + audio: audioReducer, + chat: chatReducer, + game: gameReducer, + ping: pingReducer, + settings: settingsReducer, + }), + middleware: { + pre: [ + chatMiddleware, + pingMiddleware, + telemetryMiddleware, + settingsMiddleware, + audioMiddleware, + gameMiddleware, + ], + }, +}); + +const renderApp = createRenderer(() => { + setGlobalStore(store); + + const { Panel } = require('./Panel'); + return ; +}); + +const setupApp = () => { + // Delay setup + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', setupApp); + return; + } + + setupGlobalEvents({ + ignoreWindowFocus: true, + }); + setupPanelFocusHacks(); + captureExternalLinks(); + + // Re-render UI on store updates + store.subscribe(renderApp); + + // Dispatch incoming messages as store actions + Byond.subscribe((type, payload) => store.dispatch({ type, payload })); + + // Unhide the panel + Byond.winset('output', { + 'is-visible': false, + }); + Byond.winset('browseroutput', { + 'is-visible': true, + 'is-disabled': false, + pos: '0x0', + size: '0x0', + }); + + // Resize the panel to match the non-browser output + Byond.winget('output').then((output: { size: string }) => { + Byond.winset('browseroutput', { + size: output.size, + }); + }); + + // Enable hot module reloading + if (module.hot) { + setupHotReloading(); + + module.hot.accept( + [ + './audio', + './chat', + './game', + './Notifications', + './Panel', + './ping', + './settings', + './telemetry', + ], + () => { + renderApp(); + }, + ); + } +}; + +setupApp(); diff --git a/tgui/packages/tgui-panel/package.json b/tgui/packages/tgui-panel/package.json index d60ccaaa9b173c..f020764a31bc5d 100644 --- a/tgui/packages/tgui-panel/package.json +++ b/tgui/packages/tgui-panel/package.json @@ -1,11 +1,14 @@ { "private": true, "name": "tgui-panel", - "version": "4.3.1", + "version": "5.0.0", "dependencies": { + "@types/node": "^14.x", + "@types/react": "^18.2.42", "common": "workspace:*", - "dompurify": "^2.3.1", - "inferno": "^7.4.8", + "dompurify": "^2.4.4", + "react": "^18.2.0", + "react-dom": "^18.2.0", "tgui": "workspace:*", "tgui-dev-server": "workspace:*", "tgui-polyfill": "workspace:*" diff --git a/tgui/packages/tgui-panel/ping/PingIndicator.js b/tgui/packages/tgui-panel/ping/PingIndicator.js deleted file mode 100644 index aadbd1c134b5c3..00000000000000 --- a/tgui/packages/tgui-panel/ping/PingIndicator.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { Color } from 'common/color'; -import { toFixed } from 'common/math'; -import { useSelector } from 'common/redux'; -import { Box } from 'tgui/components'; -import { selectPing } from './selectors'; - -export const PingIndicator = (props, context) => { - const ping = useSelector(context, selectPing); - const color = Color.lookup(ping.networkQuality, [ - new Color(220, 40, 40), - new Color(220, 200, 40), - new Color(60, 220, 40), - ]); - const roundtrip = ping.roundtrip ? toFixed(ping.roundtrip) : '--'; - return ( -
    - - {roundtrip} -
    - ); -}; diff --git a/tgui/packages/tgui-panel/ping/PingIndicator.jsx b/tgui/packages/tgui-panel/ping/PingIndicator.jsx new file mode 100644 index 00000000000000..549cd09cf74a84 --- /dev/null +++ b/tgui/packages/tgui-panel/ping/PingIndicator.jsx @@ -0,0 +1,28 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { Color } from 'common/color'; +import { toFixed } from 'common/math'; +import { useSelector } from 'tgui/backend'; +import { Box } from 'tgui/components'; + +import { selectPing } from './selectors'; + +export const PingIndicator = (props) => { + const ping = useSelector(selectPing); + const color = Color.lookup(ping.networkQuality, [ + new Color(220, 40, 40), + new Color(220, 200, 40), + new Color(60, 220, 40), + ]); + const roundtrip = ping.roundtrip ? toFixed(ping.roundtrip) : '--'; + return ( +
    + + {roundtrip} +
    + ); +}; diff --git a/tgui/packages/tgui-panel/ping/actions.js b/tgui/packages/tgui-panel/ping/actions.ts similarity index 100% rename from tgui/packages/tgui-panel/ping/actions.js rename to tgui/packages/tgui-panel/ping/actions.ts diff --git a/tgui/packages/tgui-panel/ping/constants.js b/tgui/packages/tgui-panel/ping/constants.ts similarity index 100% rename from tgui/packages/tgui-panel/ping/constants.js rename to tgui/packages/tgui-panel/ping/constants.ts diff --git a/tgui/packages/tgui-panel/ping/index.js b/tgui/packages/tgui-panel/ping/index.ts similarity index 100% rename from tgui/packages/tgui-panel/ping/index.js rename to tgui/packages/tgui-panel/ping/index.ts diff --git a/tgui/packages/tgui-panel/ping/reducer.js b/tgui/packages/tgui-panel/ping/reducer.js deleted file mode 100644 index b1e3d679cbcc38..00000000000000 --- a/tgui/packages/tgui-panel/ping/reducer.js +++ /dev/null @@ -1,46 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { clamp01, scale } from 'common/math'; -import { pingFail, pingSuccess } from './actions'; -import { PING_MAX_FAILS, PING_ROUNDTRIP_BEST, PING_ROUNDTRIP_WORST } from './constants'; - -export const pingReducer = (state = {}, action) => { - const { type, payload } = action; - - if (type === pingSuccess.type) { - const { roundtrip } = payload; - const prevRoundtrip = state.roundtripAvg || roundtrip; - const roundtripAvg = Math.round(prevRoundtrip * 0.4 + roundtrip * 0.6); - const networkQuality = - 1 - scale(roundtripAvg, PING_ROUNDTRIP_BEST, PING_ROUNDTRIP_WORST); - return { - roundtrip, - roundtripAvg, - failCount: 0, - networkQuality, - }; - } - - if (type === pingFail.type) { - const { failCount = 0 } = state; - const networkQuality = clamp01( - state.networkQuality - failCount / PING_MAX_FAILS - ); - const nextState = { - ...state, - failCount: failCount + 1, - networkQuality, - }; - if (failCount > PING_MAX_FAILS) { - nextState.roundtrip = undefined; - nextState.roundtripAvg = undefined; - } - return nextState; - } - - return state; -}; diff --git a/tgui/packages/tgui-panel/ping/reducer.ts b/tgui/packages/tgui-panel/ping/reducer.ts new file mode 100644 index 00000000000000..10531d23d8477f --- /dev/null +++ b/tgui/packages/tgui-panel/ping/reducer.ts @@ -0,0 +1,58 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { clamp01, scale } from 'common/math'; + +import { pingFail, pingSuccess } from './actions'; +import { + PING_MAX_FAILS, + PING_ROUNDTRIP_BEST, + PING_ROUNDTRIP_WORST, +} from './constants'; + +type PingState = { + roundtrip: number | undefined; + roundtripAvg: number | undefined; + failCount: number; + networkQuality: number; +}; + +export const pingReducer = (state = {} as PingState, action) => { + const { type, payload } = action; + + if (type === pingSuccess.type) { + const { roundtrip } = payload; + const prevRoundtrip = state.roundtripAvg || roundtrip; + const roundtripAvg = Math.round(prevRoundtrip * 0.4 + roundtrip * 0.6); + const networkQuality = + 1 - scale(roundtripAvg, PING_ROUNDTRIP_BEST, PING_ROUNDTRIP_WORST); + return { + roundtrip, + roundtripAvg, + failCount: 0, + networkQuality, + }; + } + + if (type === pingFail.type) { + const { failCount = 0 } = state; + const networkQuality = clamp01( + state.networkQuality - failCount / PING_MAX_FAILS, + ); + const nextState: PingState = { + ...state, + failCount: failCount + 1, + networkQuality, + }; + if (failCount > PING_MAX_FAILS) { + nextState.roundtrip = undefined; + nextState.roundtripAvg = undefined; + } + return nextState; + } + + return state; +}; diff --git a/tgui/packages/tgui-panel/ping/selectors.js b/tgui/packages/tgui-panel/ping/selectors.ts similarity index 100% rename from tgui/packages/tgui-panel/ping/selectors.js rename to tgui/packages/tgui-panel/ping/selectors.ts diff --git a/tgui/packages/tgui-panel/reconnect.tsx b/tgui/packages/tgui-panel/reconnect.tsx index ecfd76716925bd..6d3e6d9759e269 100644 --- a/tgui/packages/tgui-panel/reconnect.tsx +++ b/tgui/packages/tgui-panel/reconnect.tsx @@ -21,7 +21,8 @@ export const ReconnectButton = () => { color="white" onClick={() => { Byond.command('.reconnect'); - }}> + }} + > Reconnect diff --git a/tgui/packages/tgui-panel/settings/SettingsPanel.js b/tgui/packages/tgui-panel/settings/SettingsPanel.js deleted file mode 100644 index 90abe4e36b26ab..00000000000000 --- a/tgui/packages/tgui-panel/settings/SettingsPanel.js +++ /dev/null @@ -1,311 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { toFixed } from 'common/math'; -import { useLocalState } from 'tgui/backend'; -import { useDispatch, useSelector } from 'common/redux'; -import { Box, Button, ColorBox, Divider, Dropdown, Flex, Input, LabeledList, NumberInput, Section, Stack, Tabs, TextArea } from 'tgui/components'; -import { ChatPageSettings } from '../chat'; -import { rebuildChat, saveChatToDisk } from '../chat/actions'; -import { THEMES } from '../themes'; -import { changeSettingsTab, updateSettings, addHighlightSetting, removeHighlightSetting, updateHighlightSetting } from './actions'; -import { SETTINGS_TABS, FONTS, MAX_HIGHLIGHT_SETTINGS } from './constants'; -import { selectActiveTab, selectSettings, selectHighlightSettings, selectHighlightSettingById } from './selectors'; - -export const SettingsPanel = (props, context) => { - const activeTab = useSelector(context, selectActiveTab); - const dispatch = useDispatch(context); - return ( - - -
    - - {SETTINGS_TABS.map((tab) => ( - - dispatch( - changeSettingsTab({ - tabId: tab.id, - }) - ) - }> - {tab.name} - - ))} - -
    -
    - - {activeTab === 'general' && } - {activeTab === 'chatPage' && } - {activeTab === 'textHighlight' && } - -
    - ); -}; - -export const SettingsGeneral = (props, context) => { - const { theme, fontFamily, fontSize, lineHeight } = useSelector( - context, - selectSettings - ); - const dispatch = useDispatch(context); - const [freeFont, setFreeFont] = useLocalState(context, 'freeFont', false); - return ( -
    - - - - dispatch( - updateSettings({ - theme: value, - }) - ) - } - /> - - - - - {(!freeFont && ( - - dispatch( - updateSettings({ - fontFamily: value, - }) - ) - } - /> - )) || ( - - dispatch( - updateSettings({ - fontFamily: value, - }) - ) - } - /> - )} - - - -
    - ); -}; - -const TextHighlightSettings = (props, context) => { - const highlightSettings = useSelector(context, selectHighlightSettings); - const dispatch = useDispatch(context); - return ( -
    -
    - - {highlightSettings.map((id, i) => ( - - ))} - {highlightSettings.length < MAX_HIGHLIGHT_SETTINGS && ( - -
    - - - - - Can freeze the chat for a while. - - -
    - ); -}; - -const TextHighlightSetting = (props, context) => { - const { id, ...rest } = props; - const highlightSettingById = useSelector(context, selectHighlightSettingById); - const dispatch = useDispatch(context); - const { - highlightColor, - highlightText, - highlightWholeMessage, - matchWord, - matchCase, - } = highlightSettingById[id]; - return ( - - - -
    - - - - - - - - - ); -}; diff --git a/tgui/packages/tgui/interfaces/NifSoulPoem.jsx b/tgui/packages/tgui/interfaces/NifSoulPoem.jsx new file mode 100644 index 00000000000000..4e1336f1279fb2 --- /dev/null +++ b/tgui/packages/tgui/interfaces/NifSoulPoem.jsx @@ -0,0 +1,89 @@ +// THIS IS A NOVA SECTOR UI FILE +import { useBackend } from '../backend'; +import { + BlockQuote, + Box, + Button, + Divider, + Flex, + Input, + LabeledList, + Section, +} from '../components'; +import { Window } from '../layouts'; + +export const NifSoulPoem = (props) => { + const { act, data } = useBackend(); + const { + name_to_send, + text_to_send, + messages = [], + receiving_data, + transmitting_data, + theme, + } = data; + return ( + + +
    + {messages.map((message) => ( + + + {message.sender_name} +
    +
    + + + act('change_name', { new_name: value })} + width="100%" + /> + + + + act('change_message', { new_message: value }) + } + width="100%" + /> + + + + + + + + +
    +
    +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/NightmareInfo.js b/tgui/packages/tgui/interfaces/NightmareInfo.js deleted file mode 100644 index 344b596f407eb0..00000000000000 --- a/tgui/packages/tgui/interfaces/NightmareInfo.js +++ /dev/null @@ -1,75 +0,0 @@ -import { BlockQuote, LabeledList, Section, Stack } from '../components'; -import { Window } from '../layouts'; - -const tipstyle = { - color: 'white', -}; - -const noticestyle = { - color: 'lightblue', -}; - -export const NightmareInfo = (props, context) => { - return ( - - - - -
    - - You are a Nightmare. - -
    - You are a creature from beyond the stars that has incredibly - strong powers in the darkness, becoming nigh unbeatable. - Unfortunately, you wither and burn away in the light. You - must use your -  light eater to dim - the station, making hunting easier. -
    -
    - - - Tip #1:  - Move often. The station will be hunting you after you are - discovered, so don't stay in one area for long. -
    - Tip #2:  - Pick unfair fights. You are incredibly strong in one versus - one situations, use it. The more you fight, the harder it will - be to keep it dark. -
    - Tip #3:  - Fully destroy APCs when possible. Instead of hunting lights - that can be fixed, hunt the APCs which are harder to repair. -
    -
    -
    -
    - -
    - - - Whilst in the shadows, you are immune to all melee and ranged - attacks, whilst also rapidly regenerating health. - - - You are allowed unlimited, unrestricted movement in the dark. - Light will pull you out of this. - - - Your heart invites the shadows. If you die in the darkness, - you will eventually revive if left alone. - - - Your twisted appendage. It will consume the light of what it - touches, be it victim or object. - - -
    -
    -
    -
    -
    - ); -}; diff --git a/tgui/packages/tgui/interfaces/NoticeBoard.tsx b/tgui/packages/tgui/interfaces/NoticeBoard.tsx index 5dc36644b25d33..27c9079dfe5d9f 100644 --- a/tgui/packages/tgui/interfaces/NoticeBoard.tsx +++ b/tgui/packages/tgui/interfaces/NoticeBoard.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, Button, Section, Stack } from '../components'; import { Window } from '../layouts'; @@ -8,8 +9,8 @@ type Data = { items: { ref: string; name: string }[]; }; -export const NoticeBoard = (props, context) => { - const { act, data } = useBackend(context); +export const NoticeBoard = (props) => { + const { act, data } = useBackend(); const { allowed, items = [] } = data; return ( @@ -27,7 +28,8 @@ export const NoticeBoard = (props, context) => { key={item.ref} color="black" backgroundColor="white" - style={{ padding: '2px 2px 0 2px' }}> + style={{ padding: '2px 2px 0 2px' }} + > {item.name} diff --git a/tgui/packages/tgui/interfaces/NotificationPreferences.js b/tgui/packages/tgui/interfaces/NotificationPreferences.js deleted file mode 100644 index 5941acb6365725..00000000000000 --- a/tgui/packages/tgui/interfaces/NotificationPreferences.js +++ /dev/null @@ -1,37 +0,0 @@ -import { useBackend } from '../backend'; -import { Section, Button } from '../components'; -import { Window } from '../layouts'; - -export const NotificationPreferences = (props, context) => { - const { act, data } = useBackend(context); - const ignoresPreSort = data.ignore || []; - const ignores = ignoresPreSort.sort((a, b) => { - const descA = a.desc.toLowerCase(); - const descB = b.desc.toLowerCase(); - if (descA < descB) { - return -1; - } - if (descA > descB) { - return 1; - } - return 0; - }); - return ( - - -
    - {ignores.map((ignore) => ( -
    -
    -
    - ); -}; diff --git a/tgui/packages/tgui/interfaces/NotificationPreferences.jsx b/tgui/packages/tgui/interfaces/NotificationPreferences.jsx new file mode 100644 index 00000000000000..aebe53bb94ca21 --- /dev/null +++ b/tgui/packages/tgui/interfaces/NotificationPreferences.jsx @@ -0,0 +1,37 @@ +import { useBackend } from '../backend'; +import { Button, Section } from '../components'; +import { Window } from '../layouts'; + +export const NotificationPreferences = (props) => { + const { act, data } = useBackend(); + const ignoresPreSort = data.ignore || []; + const ignores = ignoresPreSort.sort((a, b) => { + const descA = a.desc.toLowerCase(); + const descB = b.desc.toLowerCase(); + if (descA < descB) { + return -1; + } + if (descA > descB) { + return 1; + } + return 0; + }); + return ( + + +
    + {ignores.map((ignore) => ( +
    +
    +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/NtnetRelay.tsx b/tgui/packages/tgui/interfaces/NtnetRelay.tsx index 19390edc2b5bef..e7c4b9d2b9da84 100644 --- a/tgui/packages/tgui/interfaces/NtnetRelay.tsx +++ b/tgui/packages/tgui/interfaces/NtnetRelay.tsx @@ -1,6 +1,13 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; -import { Box, Button, ProgressBar, Section, AnimatedNumber } from '../components'; +import { + AnimatedNumber, + Box, + Button, + ProgressBar, + Section, +} from '../components'; import { Window } from '../layouts'; type Data = { @@ -17,8 +24,8 @@ error may indicate insufficient hardware capacity of your network. Please contact your network planning department for instructions on how to resolve this issue.`; -export const NtnetRelay = (props, context) => { - const { act, data } = useBackend(context); +export const NtnetRelay = (props) => { + const { act, data } = useBackend(); const { enabled, dos_capacity, dos_overload, dos_crashed } = data; return ( @@ -33,12 +40,14 @@ export const NtnetRelay = (props, context) => { content={enabled ? 'ENABLED' : 'DISABLED'} onClick={() => act('toggle')} /> - }> + } + > {!dos_crashed ? ( + maxValue={dos_capacity} + > GQ {' / '} {dos_capacity} GQ diff --git a/tgui/packages/tgui/interfaces/NtosAiRestorer.tsx b/tgui/packages/tgui/interfaces/NtosAiRestorer.tsx index 5e9fa19d11d928..3a68ed02d1550b 100644 --- a/tgui/packages/tgui/interfaces/NtosAiRestorer.tsx +++ b/tgui/packages/tgui/interfaces/NtosAiRestorer.tsx @@ -1,7 +1,7 @@ import { NtosWindow } from '../layouts'; import { AiRestorerContent } from './AiRestorer'; -export const NtosAiRestorer = (props, context) => { +export const NtosAiRestorer = (props) => { return ( diff --git a/tgui/packages/tgui/interfaces/NtosArcade.js b/tgui/packages/tgui/interfaces/NtosArcade.js deleted file mode 100644 index e94d33b15c56b5..00000000000000 --- a/tgui/packages/tgui/interfaces/NtosArcade.js +++ /dev/null @@ -1,123 +0,0 @@ -import { resolveAsset } from '../assets'; -import { useBackend } from '../backend'; -import { AnimatedNumber, Box, Button, Grid, LabeledList, ProgressBar, Section } from '../components'; -import { NtosWindow } from '../layouts'; - -export const NtosArcade = (props, context) => { - const { act, data } = useBackend(context); - return ( - - -
    - - - - - - - - {data.PlayerHitpoints}HP - - - - - {data.PlayerMP}MP - - - - -
    - {data.Status} -
    -
    - - - - HP - - -
    - -
    -
    -
    - -
    -
    -
    - ); -}; diff --git a/tgui/packages/tgui/interfaces/NtosArcade.jsx b/tgui/packages/tgui/interfaces/NtosArcade.jsx new file mode 100644 index 00000000000000..b8c9aa05109e6f --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosArcade.jsx @@ -0,0 +1,135 @@ +import { resolveAsset } from '../assets'; +import { useBackend } from '../backend'; +import { + AnimatedNumber, + Box, + Button, + Grid, + LabeledList, + ProgressBar, + Section, +} from '../components'; +import { NtosWindow } from '../layouts'; + +export const NtosArcade = (props) => { + const { act, data } = useBackend(); + return ( + + +
    + + + + + + + + {data.PlayerHitpoints}HP + + + + + {data.PlayerMP}MP + + + + +
    + {data.Status} +
    +
    + + + + HP + + +
    + +
    +
    +
    + +
    +
    +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/NtosBountyBoard.tsx b/tgui/packages/tgui/interfaces/NtosBountyBoard.tsx index f48810e517e2f2..b1bbe418ce7fda 100644 --- a/tgui/packages/tgui/interfaces/NtosBountyBoard.tsx +++ b/tgui/packages/tgui/interfaces/NtosBountyBoard.tsx @@ -1,7 +1,7 @@ -import { BountyBoardContent } from './BountyBoard'; import { NtosWindow } from '../layouts'; +import { BountyBoardContent } from './BountyBoard'; -export const NtosBountyBoard = (props, context) => { +export const NtosBountyBoard = (props) => { return ( diff --git a/tgui/packages/tgui/interfaces/NtosCamera.js b/tgui/packages/tgui/interfaces/NtosCamera.js deleted file mode 100644 index 933d877de9cead..00000000000000 --- a/tgui/packages/tgui/interfaces/NtosCamera.js +++ /dev/null @@ -1,42 +0,0 @@ -import { useBackend } from '../backend'; -import { NtosWindow } from '../layouts'; -import { Button, Box, NoticeBox, Stack } from '../components'; - -export const NtosCamera = (props, context) => { - return ( - - - - - - ); -}; - -export const NtosCameraContent = (props, context) => { - const { act, data } = useBackend(context); - const { photo, paper_left } = data; - - if (!photo) { - return ( - - Phototrasen Images - Tap (right-click) with your tablet to snap a photo! - - ); - } - - return ( - - - + + + Login: {authenticatedUser || '-----'} + + + {!!(has_id && authenticatedUser) && ( + <> + + Details: + + + act('PRG_edit', { + name: value, + }) + } + /> + + + { + act('PRG_age', { + id_age: value, + }); + }} + /> + + + + Assignment: + + + act('PRG_assign', { + assignment: value, + }) + } + /> + + + + )} + + ); +}; + +const TemplateDropdown = (props) => { + const { act } = useBackend(); + const { templates } = props; + + const templateKeys = Object.keys(templates); + + if (!templateKeys.length) { + return <> ; + } + + return ( + + + { + return templates[path]; + })} + onSelected={(sel) => + act('PRG_template', { + name: sel, + }) + } + /> + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/NtosCargo.tsx b/tgui/packages/tgui/interfaces/NtosCargo.tsx index b5009c0aeaf50a..19e36180f4bce9 100644 --- a/tgui/packages/tgui/interfaces/NtosCargo.tsx +++ b/tgui/packages/tgui/interfaces/NtosCargo.tsx @@ -1,7 +1,7 @@ -import { CargoContent } from './Cargo.js'; import { NtosWindow } from '../layouts'; +import { CargoContent } from './Cargo'; -export const NtosCargo = (props, context) => { +export const NtosCargo = (props) => { return ( diff --git a/tgui/packages/tgui/interfaces/NtosCouponMaster.tsx b/tgui/packages/tgui/interfaces/NtosCouponMaster.tsx new file mode 100644 index 00000000000000..53820b807899e6 --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosCouponMaster.tsx @@ -0,0 +1,61 @@ +import { BooleanLike } from 'common/react'; + +import { useBackend } from '../backend'; +import { Box, Input, NoticeBox, Section } from '../components'; +import { NtosWindow } from '../layouts'; + +type Data = { + valid_id: BooleanLike; + redeemed_coupons: CouponData[]; + printed_coupons: CouponData[]; +}; + +type CouponData = { + goody: string; + discount: number; +}; + +export const NtosCouponMaster = (props) => { + const { act, data } = useBackend(); + const { valid_id, redeemed_coupons = [], printed_coupons = [] } = data; + return ( + + + {!valid_id ? ( + + No valid bank account detected. Insert a valid ID. + + ) : ( + <> + + You can print redeemed coupons by right-clicking a photocopier. + + + act('redeem', { + code: value, + }) + } + /> +
    + {redeemed_coupons.map((coupon, index) => ( + + {coupon.goody} ({coupon.discount}% OFF) + + ))} +
    +
    + {printed_coupons.map((coupon, index) => ( + + {coupon.goody} ({coupon.discount}% OFF) + + ))} +
    + + )} +
    +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/NtosCrewManifest.js b/tgui/packages/tgui/interfaces/NtosCrewManifest.js deleted file mode 100644 index 83059750583744..00000000000000 --- a/tgui/packages/tgui/interfaces/NtosCrewManifest.js +++ /dev/null @@ -1,52 +0,0 @@ -import { map } from 'common/collections'; -import { useBackend } from '../backend'; -import { Button, Section, Table } from '../components'; -import { NtosWindow } from '../layouts'; - -// SKYRAT EDIT BEGIN - ALTERNATIVE_JOB_TITLES -// -// width={500} - Original: width={400} -// -// {entry.rank === entry.trim ? entry.rank : <>{entry.rank} ({entry.trim})} -// - Original: entry.rank -export const NtosCrewManifest = (props, context) => { - const { act, data } = useBackend(context); - const { manifest = {} } = data; - return ( - - -
    act('PRG_print')} - /> - }> - {map((entries, department) => ( -
    - - {entries.map((entry) => ( - - {entry.name} - - {entry.rank === entry.trim ? ( - entry.rank - ) : ( - <> - {entry.rank} ({entry.trim}) - - )} - - - ))} -
    -
    - ))(manifest)} -
    -
    -
    - ); -}; -// SKYRAT EDIT END - ALTERNATIVE_JOB_TITLES diff --git a/tgui/packages/tgui/interfaces/NtosCrewManifest.jsx b/tgui/packages/tgui/interfaces/NtosCrewManifest.jsx new file mode 100644 index 00000000000000..8666c91fd6d31c --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosCrewManifest.jsx @@ -0,0 +1,54 @@ +import { map } from 'common/collections'; + +import { useBackend } from '../backend'; +import { Button, Section, Table } from '../components'; +import { NtosWindow } from '../layouts'; + +// NOVA EDIT BEGIN - ALTERNATIVE_JOB_TITLES +// +// width={500} - Original: width={400} +// +// {entry.rank === entry.trim ? entry.rank : <>{entry.rank} ({entry.trim})} +// - Original: entry.rank +export const NtosCrewManifest = (props) => { + const { act, data } = useBackend(); + const { manifest = {} } = data; + return ( + + +
    act('PRG_print')} + /> + } + > + {map((entries, department) => ( +
    + + {entries.map((entry) => ( + + {entry.name} + + {entry.rank === entry.trim ? ( + entry.rank + ) : ( + <> + {entry.rank} ({entry.trim}) + + )} + + + ))} +
    +
    + ))(manifest)} +
    +
    +
    + ); +}; +// NOVA EDIT END - ALTERNATIVE_JOB_TITLES diff --git a/tgui/packages/tgui/interfaces/NtosCyborgRemoteMonitor.js b/tgui/packages/tgui/interfaces/NtosCyborgRemoteMonitor.js deleted file mode 100644 index a078f975ac423b..00000000000000 --- a/tgui/packages/tgui/interfaces/NtosCyborgRemoteMonitor.js +++ /dev/null @@ -1,175 +0,0 @@ -import { useBackend, useSharedState } from '../backend'; -import { Box, Button, LabeledList, NoticeBox, ProgressBar, Section, Stack, Tabs } from '../components'; -import { NtosWindow } from '../layouts'; - -export const NtosCyborgRemoteMonitor = (props, context) => { - return ( - - - - - - ); -}; - -export const ProgressSwitch = (param) => { - switch (param) { - case -1: - return '_'; - case 0: - return 'Connecting'; - case 25: - return 'Starting Transfer'; - case 50: - return 'Downloading'; - case 75: - return 'Downloading'; - case 100: - return 'Formatting'; - } -}; - -export const NtosCyborgRemoteMonitorContent = (props, context) => { - const { act, data } = useBackend(context); - const [tab_main, setTab_main] = useSharedState(context, 'tab_main', 1); - const { card, cyborgs = [], DL_progress } = data; - const storedlog = data.borglog || []; - - if (!cyborgs.length) { - return No cyborg units detected.; - } - - return ( - - - - setTab_main(1)}> - Cyborgs - - setTab_main(2)}> - Stored Log File - - - - {tab_main === 1 && ( - <> - {!card && ( - - Certain features require an ID card login. - - )} - -
    - {cyborgs.map((cyborg) => ( -
    - act('messagebot', { - ref: cyborg.ref, - }) - } - /> - }> - - - - {cyborg.status - ? 'Not Responding' - : cyborg.locked_down - ? 'Locked Down' - : cyborg.shell_discon - ? 'Nominal/Disconnected' - : 'Nominal'} - - - - - {cyborg.integ === 0 - ? 'Hard Fault' - : cyborg.integ <= 25 - ? 'Functionality Disrupted' - : cyborg.integ <= 75 - ? 'Functionality Impaired' - : 'Operational'} - - - - - {typeof cyborg.charge === 'number' - ? cyborg.charge + '%' - : 'Not Found'} - - - - {cyborg.module} - - - {cyborg.upgrades} - - -
    - ))} -
    -
    - - )} - {tab_main === 2 && ( - <> - -
    - Scan a cyborg to download stored logs. - - {ProgressSwitch(DL_progress)} - -
    -
    - -
    - {storedlog.map((log) => ( - - {log} - - ))} -
    -
    - - )} -
    - ); -}; diff --git a/tgui/packages/tgui/interfaces/NtosCyborgRemoteMonitor.jsx b/tgui/packages/tgui/interfaces/NtosCyborgRemoteMonitor.jsx new file mode 100644 index 00000000000000..24962f2c3bb01d --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosCyborgRemoteMonitor.jsx @@ -0,0 +1,190 @@ +import { useBackend, useSharedState } from '../backend'; +import { + Box, + Button, + LabeledList, + NoticeBox, + ProgressBar, + Section, + Stack, + Tabs, +} from '../components'; +import { NtosWindow } from '../layouts'; + +export const NtosCyborgRemoteMonitor = (props) => { + return ( + + + + + + ); +}; + +export const ProgressSwitch = (param) => { + switch (param) { + case -1: + return '_'; + case 0: + return 'Connecting'; + case 25: + return 'Starting Transfer'; + case 50: + return 'Downloading'; + case 75: + return 'Downloading'; + case 100: + return 'Formatting'; + } +}; + +export const NtosCyborgRemoteMonitorContent = (props) => { + const { act, data } = useBackend(); + const [tab_main, setTab_main] = useSharedState('tab_main', 1); + const { card, cyborgs = [], DL_progress } = data; + const storedlog = data.borglog || []; + + if (!cyborgs.length) { + return No cyborg units detected.; + } + + return ( + + + + setTab_main(1)} + > + Cyborgs + + setTab_main(2)} + > + Stored Log File + + + + {tab_main === 1 && ( + <> + {!card && ( + + Certain features require an ID card login. + + )} + +
    + {cyborgs.map((cyborg) => ( +
    + act('messagebot', { + ref: cyborg.ref, + }) + } + /> + } + > + + + + {cyborg.status + ? 'Not Responding' + : cyborg.locked_down + ? 'Locked Down' + : cyborg.shell_discon + ? 'Nominal/Disconnected' + : 'Nominal'} + + + + + {cyborg.integ === 0 + ? 'Hard Fault' + : cyborg.integ <= 25 + ? 'Functionality Disrupted' + : cyborg.integ <= 75 + ? 'Functionality Impaired' + : 'Operational'} + + + + + {typeof cyborg.charge === 'number' + ? cyborg.charge + '%' + : 'Not Found'} + + + + {cyborg.module} + + + {cyborg.upgrades} + + +
    + ))} +
    +
    + + )} + {tab_main === 2 && ( + <> + +
    + Scan a cyborg to download stored logs. + + {ProgressSwitch(DL_progress)} + +
    +
    + +
    + {storedlog.map((log) => ( + + {log} + + ))} +
    +
    + + )} +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/NtosEmojipedia.js b/tgui/packages/tgui/interfaces/NtosEmojipedia.js deleted file mode 100644 index 9f7c05b172c63f..00000000000000 --- a/tgui/packages/tgui/interfaces/NtosEmojipedia.js +++ /dev/null @@ -1,69 +0,0 @@ -import { classes } from 'common/react'; -import { useBackend, useSharedState } from '../backend'; -import { Box, Button, Input, Section } from '../components'; -import { NtosWindow } from '../layouts'; - -export const NtosEmojipedia = (props, context) => { - const { data } = useBackend(context); - const { emoji_list } = data; - const [filter, updatefilter] = useSharedState(context, 'filter', ''); - - let filtered_emoji_list = filter - ? emoji_list.filter((emoji) => { - return emoji.name.toLowerCase().includes(filter.toLowerCase()); - }) - : emoji_list; - if (filtered_emoji_list.length === 0) { - filtered_emoji_list = emoji_list; - } - - return ( - - -
    - updatefilter(value)} - /> -
    -
    -
    - ); -}; diff --git a/tgui/packages/tgui/interfaces/NtosEmojipedia.tsx b/tgui/packages/tgui/interfaces/NtosEmojipedia.tsx new file mode 100644 index 00000000000000..3852e90ac26fc7 --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosEmojipedia.tsx @@ -0,0 +1,70 @@ +import { classes } from 'common/react'; +import { createSearch } from 'common/string'; +import { useState } from 'react'; + +import { useBackend } from '../backend'; +import { Button, Image, Input, Section } from '../components'; +import { NtosWindow } from '../layouts'; + +type Data = { + emoji_list: Emoji[]; +}; + +type Emoji = { + name: string; +}; + +export const NtosEmojipedia = (props) => { + const { data } = useBackend(); + const { emoji_list = [] } = data; + const [filter, setFilter] = useState(''); + + const search = createSearch(filter, (emoji) => emoji.name); + const filteredEmojis = emoji_list.filter(search); + + return ( + + +
    + setFilter(value)} + /> +
    +
    +
    + ); +}; + +const copyText = (text: string) => { + const input = document.createElement('input'); + input.value = text; + document.body.appendChild(input); + input.select(); + document.execCommand('copy'); + document.body.removeChild(input); +}; diff --git a/tgui/packages/tgui/interfaces/NtosFileManager.js b/tgui/packages/tgui/interfaces/NtosFileManager.js deleted file mode 100644 index 93b4b414d10e8c..00000000000000 --- a/tgui/packages/tgui/interfaces/NtosFileManager.js +++ /dev/null @@ -1,123 +0,0 @@ -import { useBackend } from '../backend'; -import { Button, Section, Table } from '../components'; -import { NtosWindow } from '../layouts'; - -export const NtosFileManager = (props, context) => { - const { act, data } = useBackend(context); - const { usbconnected, files = [], usbfiles = [] } = data; - return ( - - -
    - act('PRG_copytousb', { name: file })} - onDelete={(file) => act('PRG_deletefile', { name: file })} - onRename={(file, newName) => - act('PRG_renamefile', { - name: file, - new_name: newName, - }) - } - onDuplicate={(file) => act('PRG_clone', { file: file })} - onToggleSilence={(file) => act('PRG_togglesilence', { name: file })} - /> -
    - {usbconnected && ( -
    - act('PRG_copyfromusb', { name: file })} - onDelete={(file) => act('PRG_usbdeletefile', { name: file })} - onRename={(file, newName) => - act('PRG_usbrenamefile', { - name: file, - new_name: newName, - }) - } - onDuplicate={(file) => act('PRG_clone', { file: file })} - /> -
    - )} -
    -
    - ); -}; - -const FileTable = (props) => { - const { - files = [], - usbconnected, - usbmode, - onUpload, - onDelete, - onRename, - onToggleSilence, - } = props; - return ( - - - File - Type - Size - - {files.map((file) => ( - - - {!file.undeletable ? ( - onRename(file.name, value)} - /> - ) : ( - file.name - )} - - {file.type} - {file.size} - - {!!file.alert_able && ( -
    - ); -}; diff --git a/tgui/packages/tgui/interfaces/NtosFileManager.jsx b/tgui/packages/tgui/interfaces/NtosFileManager.jsx new file mode 100644 index 00000000000000..5e8fae205cf32b --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosFileManager.jsx @@ -0,0 +1,123 @@ +import { useBackend } from '../backend'; +import { Button, Section, Table } from '../components'; +import { NtosWindow } from '../layouts'; + +export const NtosFileManager = (props) => { + const { act, data } = useBackend(); + const { usbconnected, files = [], usbfiles = [] } = data; + return ( + + +
    + act('PRG_copytousb', { name: file })} + onDelete={(file) => act('PRG_deletefile', { name: file })} + onRename={(file, newName) => + act('PRG_renamefile', { + name: file, + new_name: newName, + }) + } + onDuplicate={(file) => act('PRG_clone', { file: file })} + onToggleSilence={(file) => act('PRG_togglesilence', { name: file })} + /> +
    + {usbconnected && ( +
    + act('PRG_copyfromusb', { name: file })} + onDelete={(file) => act('PRG_usbdeletefile', { name: file })} + onRename={(file, newName) => + act('PRG_usbrenamefile', { + name: file, + new_name: newName, + }) + } + onDuplicate={(file) => act('PRG_clone', { file: file })} + /> +
    + )} +
    +
    + ); +}; + +const FileTable = (props) => { + const { + files = [], + usbconnected, + usbmode, + onUpload, + onDelete, + onRename, + onToggleSilence, + } = props; + return ( + + + File + Type + Size + + {files.map((file) => ( + + + {!file.undeletable ? ( + onRename(file.name, value)} + /> + ) : ( + file.name + )} + + {file.type} + {file.size} + + {!!file.alert_able && ( +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/NtosGasAnalyzer.tsx b/tgui/packages/tgui/interfaces/NtosGasAnalyzer.tsx index e70e544fae9f5b..ac186e84db5d0e 100644 --- a/tgui/packages/tgui/interfaces/NtosGasAnalyzer.tsx +++ b/tgui/packages/tgui/interfaces/NtosGasAnalyzer.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Button } from '../components'; import { NtosWindow } from '../layouts'; @@ -9,8 +10,8 @@ type NtosGasAnalyzerData = GasAnalyzerData & { clickAtmozphereCompatible: BooleanLike; }; -export const NtosGasAnalyzer = (props, context) => { - const { act, data } = useBackend(context); +export const NtosGasAnalyzer = (props) => { + const { act, data } = useBackend(); const { atmozphereMode, clickAtmozphereCompatible } = data; return ( @@ -26,7 +27,8 @@ export const NtosGasAnalyzer = (props, context) => { ? 'Right-click on objects while holding the tablet to scan them. Right-click on the tablet to scan the current location.' : "The app will update it's gas mixture reading automatically." } - tooltipPosition="bottom"> + tooltipPosition="bottom" + > {atmozphereMode === 'click' ? 'Scanning tapped objects. Click to switch.' : 'Scanning current location. Click to switch.'} diff --git a/tgui/packages/tgui/interfaces/NtosJobManager.js b/tgui/packages/tgui/interfaces/NtosJobManager.js deleted file mode 100644 index fe1a8681849a0d..00000000000000 --- a/tgui/packages/tgui/interfaces/NtosJobManager.js +++ /dev/null @@ -1,82 +0,0 @@ -import { useBackend } from '../backend'; -import { Button, Section, Table, NoticeBox, Dimmer, Box } from '../components'; -import { NtosWindow } from '../layouts'; - -export const NtosJobManager = (props, context) => { - return ( - - - - - - ); -}; - -export const NtosJobManagerContent = (props, context) => { - const { act, data } = useBackend(context); - const { authed, cooldown, slots = [], prioritized = [] } = data; - if (!authed) { - return ( - - Current ID does not have access permissions to change job slots. - - ); - } - return ( -
    - {cooldown > 0 && ( - - - On Cooldown: {cooldown}s - - - )} - - - Prioritized - Slots - - {slots.map((slot) => ( - - - 0 && prioritized.includes(slot.title)} - onClick={() => - act('PRG_priority', { - target: slot.title, - }) - } - /> - - - {slot.current} / {slot.total} - - -
    -
    - ); -}; diff --git a/tgui/packages/tgui/interfaces/NtosJobManager.jsx b/tgui/packages/tgui/interfaces/NtosJobManager.jsx new file mode 100644 index 00000000000000..53f2ea2b220ba8 --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosJobManager.jsx @@ -0,0 +1,82 @@ +import { useBackend } from '../backend'; +import { Box, Button, Dimmer, NoticeBox, Section, Table } from '../components'; +import { NtosWindow } from '../layouts'; + +export const NtosJobManager = (props) => { + return ( + + + + + + ); +}; + +export const NtosJobManagerContent = (props) => { + const { act, data } = useBackend(); + const { authed, cooldown, slots = [], prioritized = [] } = data; + if (!authed) { + return ( + + Current ID does not have access permissions to change job slots. + + ); + } + return ( +
    + {cooldown > 0 && ( + + + On Cooldown: {cooldown}s + + + )} + + + Prioritized + Slots + + {slots.map((slot) => ( + + + 0 && prioritized.includes(slot.title)} + onClick={() => + act('PRG_priority', { + target: slot.title, + }) + } + /> + + + {slot.current} / {slot.total} + + +
    +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/NtosMODsuit.js b/tgui/packages/tgui/interfaces/NtosMODsuit.js deleted file mode 100644 index 9efc9b7df12361..00000000000000 --- a/tgui/packages/tgui/interfaces/NtosMODsuit.js +++ /dev/null @@ -1,31 +0,0 @@ -import { NtosWindow } from '../layouts'; -import { useBackend } from '../backend'; -import { NoticeBox } from '../components'; -import { MODsuitContent } from './MODsuit'; - -export const NtosMODsuit = (props, context) => { - const { data } = useBackend(context); - const { ui_theme } = data; - return ( - - - - - - ); -}; - -const NtosMODsuitContent = (props, context) => { - const { data } = useBackend(context); - const { has_suit } = data; - if (!has_suit) { - return ( - - No Modular suit connected, please tap a suit on the application host to - sync on - - ); - } else { - return ; - } -}; diff --git a/tgui/packages/tgui/interfaces/NtosMODsuit.jsx b/tgui/packages/tgui/interfaces/NtosMODsuit.jsx new file mode 100644 index 00000000000000..23d46906fd39a9 --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosMODsuit.jsx @@ -0,0 +1,31 @@ +import { useBackend } from '../backend'; +import { NoticeBox } from '../components'; +import { NtosWindow } from '../layouts'; +import { MODsuitContent } from './MODsuit'; + +export const NtosMODsuit = (props) => { + const { data } = useBackend(); + const { ui_theme } = data; + return ( + + + + + + ); +}; + +const NtosMODsuitContent = (props) => { + const { data } = useBackend(); + const { has_suit } = data; + if (!has_suit) { + return ( + + No Modular suit connected, please tap a suit on the application host to + sync on + + ); + } else { + return ; + } +}; diff --git a/tgui/packages/tgui/interfaces/NtosMafiaPanel.tsx b/tgui/packages/tgui/interfaces/NtosMafiaPanel.tsx index 2f7aea1ef947f5..09a0f6ddee962e 100644 --- a/tgui/packages/tgui/interfaces/NtosMafiaPanel.tsx +++ b/tgui/packages/tgui/interfaces/NtosMafiaPanel.tsx @@ -1,7 +1,7 @@ -import { MafiaPanelData } from './MafiaPanel'; import { NtosWindow } from '../layouts'; +import { MafiaPanelData } from './MafiaPanel'; -export const NtosMafiaPanel = (props, context) => { +export const NtosMafiaPanel = (props) => { return ( diff --git a/tgui/packages/tgui/interfaces/NtosMain.js b/tgui/packages/tgui/interfaces/NtosMain.js deleted file mode 100644 index 8debe5d93be8ed..00000000000000 --- a/tgui/packages/tgui/interfaces/NtosMain.js +++ /dev/null @@ -1,210 +0,0 @@ -import { useBackend } from '../backend'; -import { Button, ColorBox, Stack, Section, Table } from '../components'; -import { NtosWindow } from '../layouts'; - -export const NtosMain = (props, context) => { - const { act, data } = useBackend(context); - const { - PC_device_theme, - show_imprint, - programs = [], - has_light, - light_on, - comp_light_color, - removable_media = [], - login = [], - proposed_login = [], - pai, - } = data; - const filtered_programs = programs.filter( - (program) => program.header_program - ); - return ( - - - {Boolean( - removable_media.length || - programs.some((program) => program.header_program) - ) && ( -
    - - {filtered_programs.map((app) => ( - -
    - )} -
    - {!!has_light && ( - <> - -
    - {!!pai && ( -
    - - - -
    -
    - )} - -
    -
    - ); -}; - -const ProgramsTable = (props, context) => { - const { act, data } = useBackend(context); - const { programs = [] } = data; - // add the program filename to this list to have it excluded from the main menu program list table - const filtered_programs = programs.filter( - (program) => !program.header_program - ); - - return ( -
    - - {filtered_programs.map((program) => ( - - -
    -
    - ); -}; diff --git a/tgui/packages/tgui/interfaces/NtosMain.tsx b/tgui/packages/tgui/interfaces/NtosMain.tsx new file mode 100644 index 00000000000000..86b53387d0d726 --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosMain.tsx @@ -0,0 +1,217 @@ +import { useBackend } from '../backend'; +import { Button, ColorBox, Section, Stack, Table } from '../components'; +import { NtosWindow } from '../layouts'; +import { NTOSData } from '../layouts/NtosWindow'; + +export const NtosMain = (props) => { + const { act, data } = useBackend(); + const { + PC_device_theme, + show_imprint, + programs = [], + has_light, + light_on, + comp_light_color, + removable_media = [], + login, + proposed_login, + pai, + } = data; + const filtered_programs = programs.filter( + (program) => program.header_program, + ); + + return ( + + + {Boolean( + removable_media.length || + programs.some((program) => program.header_program), + ) && ( +
    + + {filtered_programs.map((app) => ( + +
    + )} +
    + {!!has_light && ( + <> + +
    + {!!pai && ( +
    + + + +
    +
    + )} + +
    +
    + ); +}; + +const ProgramsTable = (props) => { + const { act, data } = useBackend(); + const { programs = [] } = data; + // add the program filename to this list to have it excluded from the main menu program list table + const filtered_programs = programs.filter( + (program) => !program.header_program, + ); + + return ( +
    + + {filtered_programs.map((program) => ( + + +
    +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/NtosMessenger/ChatScreen.tsx b/tgui/packages/tgui/interfaces/NtosMessenger/ChatScreen.tsx index e069126ee8b63f..b168b057297861 100644 --- a/tgui/packages/tgui/interfaces/NtosMessenger/ChatScreen.tsx +++ b/tgui/packages/tgui/interfaces/NtosMessenger/ChatScreen.tsx @@ -1,9 +1,20 @@ -import { Stack, Section, Button, Box, Input, Modal, Tooltip, Icon } from '../../components'; -import { Component, RefObject, createRef, SFC } from 'inferno'; -import { NtMessage, NtMessenger, NtPicture } from './types'; import { BooleanLike } from 'common/react'; -import { useBackend } from '../../backend'; import { decodeHtmlEntities } from 'common/string'; +import { Component, createRef, RefObject } from 'react'; + +import { useBackend } from '../../backend'; +import { + Box, + Button, + Icon, + Image, + Input, + Modal, + Section, + Stack, + Tooltip, +} from '../../components'; +import { NtMessage, NtMessenger, NtPicture } from './types'; type ChatScreenProps = { canReply: BooleanLike; @@ -59,7 +70,7 @@ export class ChatScreen extends Component { componentDidUpdate( prevProps: ChatScreenProps, _prevState: ChatScreenState, - _snapshot: any + _snapshot: any, ) { if (prevProps.messages.length !== this.props.messages.length) { this.scrollToBottom(); @@ -72,7 +83,7 @@ export class ChatScreen extends Component { return; } - const { act } = useBackend(this.context); + const { act } = useBackend(); this.tryClearReadTimeout(); @@ -106,7 +117,7 @@ export class ChatScreen extends Component { } clearUnreads() { - const { act } = useBackend(this.context); + const { act } = useBackend(); act('PDA_clearUnreads', { ref: this.props.chatRef }); } @@ -120,7 +131,7 @@ export class ChatScreen extends Component { handleSelectPicture() { const { isSilicon } = this.props; - const { act } = useBackend(this.context); + const { act } = useBackend(); if (isSilicon) { act('PDA_siliconSelectPhoto'); } else { @@ -133,7 +144,7 @@ export class ChatScreen extends Component { return; } - const { act } = useBackend(this.context); + const { act } = useBackend(); const { chatRef, recipient } = this.props; let ref = chatRef ? chatRef : recipient.ref; @@ -152,7 +163,7 @@ export class ChatScreen extends Component { } render() { - const { act } = useBackend(this.context); + const { act } = useBackend(); const { canReply, messages, @@ -192,7 +203,7 @@ export class ChatScreen extends Component { : undefined } /> - + , ); } @@ -215,8 +226,9 @@ export class ChatScreen extends Component { onClick={() => { act('PDA_selectPhoto', { uid: photo.uid }); this.setState({ selectingPhoto: false }); - }}> - + }} + > + )); @@ -279,8 +291,9 @@ export class ChatScreen extends Component { pt={1} onClick={() => act('PDA_clearPhoto')} tooltip="Remove attachment" - tooltipPosition="auto-end"> - + tooltipPosition="auto-end" + > + )} @@ -292,8 +305,6 @@ export class ChatScreen extends Component { fluid autoFocus width="100%" - justify - id="input" value={message} maxLength={1024} onInput={this.handleMessageInput} @@ -338,7 +349,8 @@ export class ChatScreen extends Component { fill fitted title={`${recipient.name} (${recipient.job})`} - scrollableRef={this.scrollRef}> + ref={this.scrollRef} + > {!!(messages.length > 0 && canReply) && ( <> @@ -366,8 +378,9 @@ export class ChatScreen extends Component { tooltipPosition="left" onClick={() => this.setState({ previewingImage: undefined })} /> - }> - + } + > + )} @@ -406,20 +419,21 @@ const ChatMessage = (props: ChatMessageProps) => { {!!everyone && ( Sent to everyone )} - {photoPath !== null && ( + {!!photoPath && ( )} ); }; -const ChatDivider: SFC<{ mt: number }> = (props) => { +const ChatDivider = (props: { mt: number }) => { return (
    diff --git a/tgui/packages/tgui/interfaces/NtosMessenger/index.tsx b/tgui/packages/tgui/interfaces/NtosMessenger/index.tsx index fca2fb099e9136..852ca62cc5594c 100644 --- a/tgui/packages/tgui/interfaces/NtosMessenger/index.tsx +++ b/tgui/packages/tgui/interfaces/NtosMessenger/index.tsx @@ -1,12 +1,23 @@ -import { Box, Button, Icon, Section, Stack, Input, TextArea, Dimmer, Divider } from '../../components'; -import { useBackend, useLocalState } from '../../backend'; -import { createSearch } from 'common/string'; +import { sortBy } from 'common/collections'; import { BooleanLike } from 'common/react'; -import { NtosWindow } from '../../layouts'; +import { createSearch } from 'common/string'; +import { useState } from 'react'; -import { NtChat, NtMessenger, NtPicture } from './types'; +import { useBackend } from '../../backend'; +import { + Box, + Button, + Dimmer, + Divider, + Icon, + Input, + Section, + Stack, + TextArea, +} from '../../components'; +import { NtosWindow } from '../../layouts'; import { ChatScreen } from './ChatScreen'; -import { sortBy } from 'common/collections'; +import { NtChat, NtMessenger, NtPicture } from './types'; type NtosMessengerData = { can_spam: BooleanLike; @@ -26,8 +37,8 @@ type NtosMessengerData = { sending_virus: BooleanLike; }; -export const NtosMessenger = (props, context) => { - const { data } = useBackend(context); +export const NtosMessenger = (props) => { + const { data } = useBackend(); const { is_silicon, saved_chats, @@ -71,8 +82,8 @@ export const NtosMessenger = (props, context) => { ); }; -const ContactsScreen = (props: any, context: any) => { - const { act, data } = useBackend(context); +const ContactsScreen = (props: any) => { + const { act, data } = useBackend(); const { owner, alert_silenced, @@ -87,17 +98,17 @@ const ContactsScreen = (props: any, context: any) => { sending_virus, } = data; - const [searchUser, setSearchUser] = useLocalState(context, 'searchUser', ''); + const [searchUser, setSearchUser] = useState(''); const sortByUnreads = sortBy((chat) => chat.unread_messages); const searchChatByName = createSearch( searchUser, - (chat: NtChat) => chat.recipient.name + chat.recipient.job + (chat: NtChat) => chat.recipient.name + chat.recipient.job, ); const searchMessengerByName = createSearch( searchUser, - (messenger: NtMessenger) => messenger.name + messenger.job + (messenger: NtMessenger) => messenger.name + messenger.job, ); const chatToButton = (chat: NtChat) => { @@ -123,7 +134,7 @@ const ContactsScreen = (props: any, context: any) => { }; const openChatsArray = sortByUnreads(Object.values(saved_chats)).filter( - searchChatByName + searchChatByName, ); const filteredChatButtons = openChatsArray @@ -134,7 +145,7 @@ const ContactsScreen = (props: any, context: any) => { .filter( ([ref, messenger]) => openChatsArray.every((chat) => chat.recipient.ref !== ref) && - searchMessengerByName(messenger) + searchMessengerByName(messenger), ) .map(([_, messenger]) => messenger) .map(messengerToButton) @@ -203,7 +214,7 @@ const ContactsScreen = (props: any, context: any) => { width="220px" placeholder="Search by name or job..." value={searchUser} - onInput={(_: any, value: string) => setSearchUser(value)} + onInput={(_, value) => setSearchUser(value)} /> @@ -262,8 +273,8 @@ type ChatButtonProps = { chatRef: string; }; -const ChatButton = (props: ChatButtonProps, context) => { - const { act } = useBackend(context); +const ChatButton = (props: ChatButtonProps) => { + const { act } = useBackend(); const unreadMessages = props.unreads; const hasUnreads = unreadMessages > 0; return ( @@ -273,7 +284,8 @@ const ChatButton = (props: ChatButtonProps, context) => { fluid onClick={() => { act('PDA_viewMessages', { ref: props.chatRef }); - }}> + }} + > {hasUnreads && `[${unreadMessages <= 9 ? unreadMessages : '9+'} unread message${ unreadMessages !== 1 ? 's' : '' @@ -283,11 +295,11 @@ const ChatButton = (props: ChatButtonProps, context) => { ); }; -const SendToAllSection = (props, context) => { - const { data, act } = useBackend(context); +const SendToAllSection = (props) => { + const { data, act } = useBackend(); const { on_spam_cooldown } = data; - const [message, setmessage] = useLocalState(context, 'everyoneMessage', ''); + const [message, setmessage] = useState(''); return ( <> @@ -306,7 +318,8 @@ const SendToAllSection = (props, context) => { onClick={() => { act('PDA_sendEveryone', { message: message }); setmessage(''); - }}> + }} + > Send @@ -317,7 +330,7 @@ const SendToAllSection = (props, context) => { height={6} value={message} placeholder="Send message to everyone..." - onInput={(_: any, v: string) => setmessage(v)} + onChange={(event, value: string) => setmessage(value)} /> diff --git a/tgui/packages/tgui/interfaces/NtosNetChat.js b/tgui/packages/tgui/interfaces/NtosNetChat.js deleted file mode 100644 index 8668168b2a3073..00000000000000 --- a/tgui/packages/tgui/interfaces/NtosNetChat.js +++ /dev/null @@ -1,312 +0,0 @@ -import { useBackend } from '../backend'; -import { Box, Button, Dimmer, Icon, Input, Section, Stack } from '../components'; -import { NtosWindow } from '../layouts'; - -// byond defines for the program state -const CLIENT_ONLINE = 2; -const CLIENT_AWAY = 1; -const CLIENT_OFFLINE = 0; - -const NoChannelDimmer = (props, context) => { - return ( - - - - - - - - - - - - - - - - - Click a channel to start chatting! - - - (If you're new, you may want to set your name in the bottom - left!) - - - - ); -}; - -export const NtosNetChat = (props, context) => { - const { act, data } = useBackend(context); - const { - title, - can_admin, - adminmode, - authed, - username, - active_channel, - is_operator, - strong, - selfref, - all_channels = [], - clients = [], - messages = [], - } = data; - const in_channel = active_channel !== null; - const authorized = authed || adminmode; - // this list has cliented ordered from their status. online > away > offline - const displayed_clients = clients.sort((clientA, clientB) => { - if (clientA.operator) { - return -1; - } - if (clientB.operator) { - return 1; - } - return clientB.status - clientA.status; - }); - const client_color = (client) => { - if (client.operator) { - return 'green'; - } - if (client.online) { - return 'white'; - } - if (client.away) { - return 'yellow'; - } else { - return 'label'; - } - }; - // client from this computer! - const this_client = clients.find((client) => client.ref === selfref); - return ( - - - - -
    - - - - act('PRG_newchannel', { - new_channel_name: value, - }) - } - /> - {all_channels.map((channel) => ( -
    -
    - - - - -
    - {(in_channel && - (authorized ? ( - messages.map((message) => ( - {message.msg} - )) - ) : ( - - - - THIS CHANNEL IS PASSWORD PROTECTED - - INPUT PASSWORD TO ACCESS - - ))) || } -
    -
    - {!!in_channel && ( - - act('PRG_speak', { - message: value, - }) - } - /> - )} -
    -
    - {!!in_channel && ( - <> - - - - -
    - - {displayed_clients.map((client) => ( - - - {client.name} - - {client !== this_client && ( - <> - -
    -
    -
    - Settings for {title}: - - {!!(in_channel && authorized) && ( - <> - - act('PRG_savelog', { - log_name: value, - }) - } - /> - act('PRG_leavechannel')} - /> - - )} - {!!(is_operator && authed) && ( - <> - act('PRG_deletechannel')} - /> - - act('PRG_renamechannel', { - new_name: value, - }) - } - /> - - act('PRG_setpassword', { - new_password: value, - }) - } - /> - - )} - -
    -
    -
    - - )} -
    -
    -
    - ); -}; diff --git a/tgui/packages/tgui/interfaces/NtosNetChat.jsx b/tgui/packages/tgui/interfaces/NtosNetChat.jsx new file mode 100644 index 00000000000000..aab73f826a1029 --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosNetChat.jsx @@ -0,0 +1,321 @@ +import { useBackend } from '../backend'; +import { + Box, + Button, + Dimmer, + Icon, + Input, + Section, + Stack, +} from '../components'; +import { NtosWindow } from '../layouts'; + +// byond defines for the program state +const CLIENT_ONLINE = 2; +const CLIENT_AWAY = 1; +const CLIENT_OFFLINE = 0; + +const NoChannelDimmer = (props) => { + return ( + + + + + + + + + + + + + + + + + Click a channel to start chatting! + + + (If you're new, you may want to set your name in the bottom + left!) + + + + ); +}; + +export const NtosNetChat = (props) => { + const { act, data } = useBackend(); + const { + title, + can_admin, + adminmode, + authed, + username, + active_channel, + is_operator, + strong, + selfref, + all_channels = [], + clients = [], + messages = [], + } = data; + const in_channel = active_channel !== null; + const authorized = authed || adminmode; + // this list has cliented ordered from their status. online > away > offline + const displayed_clients = clients.sort((clientA, clientB) => { + if (clientA.operator) { + return -1; + } + if (clientB.operator) { + return 1; + } + return clientB.status - clientA.status; + }); + const client_color = (client) => { + if (client.operator) { + return 'green'; + } + if (client.online) { + return 'white'; + } + if (client.away) { + return 'yellow'; + } else { + return 'label'; + } + }; + // client from this computer! + const this_client = clients.find((client) => client.ref === selfref); + return ( + + + + +
    + + + + act('PRG_newchannel', { + new_channel_name: value, + }) + } + /> + {all_channels.map((channel) => ( +
    +
    + + + + +
    + {(in_channel && + (authorized ? ( + messages.map((message) => ( + {message.msg} + )) + ) : ( + + + + THIS CHANNEL IS PASSWORD PROTECTED + + INPUT PASSWORD TO ACCESS + + ))) || } +
    +
    + {!!in_channel && ( + + act('PRG_speak', { + message: value, + }) + } + /> + )} +
    +
    + {!!in_channel && ( + <> + + + + +
    + + {displayed_clients.map((client) => ( + + + {client.name} + + {client !== this_client && ( + <> + +
    +
    +
    + Settings for {title}: + + {!!(in_channel && authorized) && ( + <> + + act('PRG_savelog', { + log_name: value, + }) + } + /> + act('PRG_leavechannel')} + /> + + )} + {!!(is_operator && authed) && ( + <> + act('PRG_deletechannel')} + /> + + act('PRG_renamechannel', { + new_name: value, + }) + } + /> + + act('PRG_setpassword', { + new_password: value, + }) + } + /> + + )} + +
    +
    +
    + + )} +
    +
    +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/NtosNetDos.js b/tgui/packages/tgui/interfaces/NtosNetDos.js deleted file mode 100644 index b83794d790b729..00000000000000 --- a/tgui/packages/tgui/interfaces/NtosNetDos.js +++ /dev/null @@ -1,95 +0,0 @@ -import { useBackend } from '../backend'; -import { Box, Button, LabeledList, NoticeBox, Section } from '../components'; -import { NtosWindow } from '../layouts'; - -export const NtosNetDos = (props, context) => { - return ( - - - - - - ); -}; - -export const NtosNetDosContent = (props, context) => { - const { act, data } = useBackend(context); - - const { relays = [], focus, target, speed, overload, capacity, error } = data; - - if (error) { - return ( - <> - {error} - - - - Purchasing this item will give you:{' '} - {product.rewards_points_rate * product.price} rewards points - - {product.keepable ? ( - - This NIFSoft carries between shifts - - ) : ( - <> - )} -
    - - - ))} - - - ); -}; diff --git a/tgui/packages/tgui/interfaces/NtosNifsoftCatalog.jsx b/tgui/packages/tgui/interfaces/NtosNifsoftCatalog.jsx new file mode 100644 index 00000000000000..0fe14a3c21f3c7 --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosNifsoftCatalog.jsx @@ -0,0 +1,131 @@ +// THIS IS A NOVA SECTOR UI FILE +import { useBackend, useSharedState } from '../backend'; +import { + BlockQuote, + Box, + Button, + Collapsible, + Flex, + Icon, + LabeledList, + Section, + Tabs, +} from '../components'; +import { NtosWindow } from '../layouts'; + +export const NtosNifsoftCatalog = (props) => { + const { act, data } = useBackend(); + const { product_list = [], rewards_points, current_balance } = data; + const [tab, setTab] = useSharedState( + 'product_category', + product_list[0].name, + ); + + const products = + product_list.find((product_category) => product_category.name === tab) + ?.products || []; + + return ( + + +
    + + + {current_balance} + + + {rewards_points} + + +
    + + {product_list.map((product_category) => ( + setTab(product_category.name)} + selected={tab === product_category.name} + > + {product_category.name} + + ))} + + +
    +
    + ); +}; + +const ProductCategory = (props) => { + const { act, data } = useBackend(); + const { target_nif, paying_account, rewards_points, current_balance } = data; + const { products } = props; + + return ( +
    + + {products.map((product) => ( + +
    + {} + {' ' + product.name} + + } + fill={false} + > + +
    {product.desc}
    +
    + + + + Purchasing this item will give you:{' '} + {product.rewards_points_rate * product.price} rewards points + + {product.keepable ? ( + + This NIFSoft carries between shifts + + ) : ( + <> + )} +
    +
    +
    + ))} +
    +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/NtosNotepad.tsx b/tgui/packages/tgui/interfaces/NtosNotepad.tsx index 524915b9fa1382..95ab8b15c1fcef 100644 --- a/tgui/packages/tgui/interfaces/NtosNotepad.tsx +++ b/tgui/packages/tgui/interfaces/NtosNotepad.tsx @@ -4,12 +4,13 @@ * @license MIT */ +import { Component, createRef, RefObject, useState } from 'react'; + +import { useBackend } from '../backend'; +import { Box, Divider, MenuBar, Section, TextArea } from '../components'; +import { Dialog, UnsavedChangesDialog } from '../components/Dialog'; import { NtosWindow } from '../layouts'; -import { useBackend, useLocalState } from '../backend'; -import { Box, Section, TextArea, MenuBar, Divider } from '../components'; -import { Component, createRef, RefObject } from 'inferno'; import { createLogger } from '../logging'; -import { Dialog, UnsavedChangesDialog } from '../components/Dialog'; const logger = createLogger('NtosNotepad'); @@ -28,7 +29,7 @@ const PartiallyUnderlined = (props: PartiallyUnderlinedProps) => { return ( <> {start} - {underlined} + {underlined} {end} ); @@ -56,7 +57,7 @@ type MenuBarProps = { aboutNotepadDialog: () => void; }; -const NtosNotepadMenuBar = (props: MenuBarProps, context) => { +const NtosNotepadMenuBar = (props: MenuBarProps) => { const { onSave, onExit, @@ -71,16 +72,8 @@ const NtosNotepadMenuBar = (props: MenuBarProps, context) => { setWordWrap, aboutNotepadDialog, } = props; - const [openOnHover, setOpenOnHover] = useLocalState( - context, - 'openOnHover', - false - ); - const [openMenuBar, setOpenMenuBar] = useLocalState( - context, - 'openMenuBar', - null - ); + const [openOnHover, setOpenOnHover] = useState(false); + const [openMenuBar, setOpenMenuBar] = useState(null); const onMenuItemClick = (value) => { setOpenOnHover(false); setOpenMenuBar(null); @@ -139,7 +132,8 @@ const NtosNotepadMenuBar = (props: MenuBarProps, context) => { entry="file" openWidth="22rem" display={} - {...itemProps}> + {...itemProps} + > @@ -149,7 +143,8 @@ const NtosNotepadMenuBar = (props: MenuBarProps, context) => { entry="edit" openWidth="22rem" display={} - {...itemProps}> + {...itemProps} + > @@ -159,7 +154,8 @@ const NtosNotepadMenuBar = (props: MenuBarProps, context) => { entry="format" openWidth="15rem" display={} - {...itemProps}> + {...itemProps} + > { entry="view" openWidth="15rem" display={} - {...itemProps}> + {...itemProps} + > { entry="help" openWidth="17rem" display={} - {...itemProps}> + {...itemProps} + > @@ -275,7 +273,7 @@ class NotePadTextArea extends Component { const textarea = this.innerRef?.current; if (!textarea) { logger.error( - 'NotePadTextArea.render(): Textarea RefObject should not be null' + 'NotePadTextArea.render(): Textarea RefObject should not be null', ); return; } @@ -283,7 +281,7 @@ class NotePadTextArea extends Component { // Javascript – execute when textarea caret is moved // https://stackoverflow.com/a/53999418/5613731 TEXTAREA_UPDATE_TRIGGERS.forEach((trigger) => - textarea.addEventListener(trigger, this) + textarea.addEventListener(trigger, this), ); // Slight hack: Keep selection when textarea loses focus so menubar actions can be used (i.e. cut, delete) textarea.onblur = this.onblur.bind(this); @@ -293,12 +291,12 @@ class NotePadTextArea extends Component { const textarea = this.innerRef?.current; if (!textarea) { logger.error( - 'NotePadTextArea.componentWillUnmount(): Textarea RefObject should not be null' + 'NotePadTextArea.componentWillUnmount(): Textarea RefObject should not be null', ); return; } TEXTAREA_UPDATE_TRIGGERS.forEach((trigger) => - textarea.removeEventListener(trigger, this) + textarea.removeEventListener(trigger, this), ); } @@ -307,10 +305,9 @@ class NotePadTextArea extends Component { return (